ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uLzAwLUlOREVYCmluZGV4IGRkMTBiNTEuLjU0MDVmN2EgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi8wMC1JTkRFWApAQCAtMzIsOCArMzIsNiBAQAogCS0gZGlyZWN0b3J5IHdpdGggRG9jQm9vayB0ZW1wbGF0ZXMgZXRjLiBmb3Iga2VybmVsIGRvY3VtZW50YXRpb24uCiBIT1dUTwogCS0gdGhlIHByb2Nlc3MgYW5kIHByb2NlZHVyZXMgb2YgaG93IHRvIGRvIExpbnV4IGtlcm5lbCBkZXZlbG9wbWVudC4KLUlPLW1hcHBpbmcudHh0Ci0JLSBob3cgdG8gYWNjZXNzIEkvTyBtYXBwZWQgbWVtb3J5IGZyb20gd2l0aGluIGRldmljZSBkcml2ZXJzLgogSVBNSS50eHQKIAktIGluZm8gb24gTGludXggSW50ZWxsaWdlbnQgUGxhdGZvcm0gTWFuYWdlbWVudCBJbnRlcmZhY2UgKElQTUkpIERyaXZlci4KIElSUS1hZmZpbml0eS50eHQKQEAgLTg0LDYgKzgyLDggQEAKIAktIGluZm8gb24gYmxvY2sgZGV2aWNlcyAmIGRyaXZlcnMKIGJ0bXJ2bC50eHQKIAktIGluZm8gb24gTWFydmVsbCBCbHVldG9vdGggZHJpdmVyIHVzYWdlLgorYnVzLXZpcnQtcGh5cy1tYXBwaW5nLnR4dAorCS0gaG93IHRvIGFjY2VzcyBJL08gbWFwcGVkIG1lbW9yeSBmcm9tIHdpdGhpbiBkZXZpY2UgZHJpdmVycy4KIGNhY2hldGxiLnR4dAogCS0gZGVzY3JpYmVzIHRoZSBjYWNoZS9UTEIgZmx1c2hpbmcgaW50ZXJmYWNlcyBMaW51eCB1c2VzLgogY2Ryb20vCkBAIC0xNjgsNiArMTY4LDggQEAKIAktIGhvdyB0byB1c2UgdGhlIFJBTSBkaXNrIGFzIGFuIGluaXRpYWwvdGVtcG9yYXJ5IHJvb3QgZmlsZXN5c3RlbS4KIGlucHV0LwogCS0gaW5mbyBvbiBMaW51eCBpbnB1dCBkZXZpY2Ugc3VwcG9ydC4KK2lvLW1hcHBpbmcudHh0CisJLSBkZXNjcmlwdGlvbiBvZiBpb19tYXBwaW5nIGZ1bmN0aW9ucyBpbiBsaW51eC9pby1tYXBwaW5nLmgKIGlvX29yZGVyaW5nLnR4dAogCS0gaW5mbyBvbiBvcmRlcmluZyBJL08gd3JpdGVzIHRvIG1lbW9yeS1tYXBwZWQgYWRkcmVzc2VzLgogaW9jdGwvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2RlYnVnZnMtZWMgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2RlYnVnZnMtZWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU0NjExNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvZGVidWdmcy1lYwpAQCAtMCwwICsxLDIwIEBACitXaGF0OgkJL3N5cy9rZXJuZWwvZGVidWcvZWMvKi97Z3BlLHVzZV9nbG9iYWxfbG9jayxpb30KK0RhdGU6CQlKdWx5IDIwMTAKK0NvbnRhY3Q6CVRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+CitEZXNjcmlwdGlvbjoKKworR2VuZXJhbCBpbmZvcm1hdGlvbiBsaWtlIHdoaWNoIEdQRSBpcyBhc3NpZ25lZCB0byB0aGUgRUMgYW5kIHdoZXRoZXIKK3RoZSBnbG9iYWwgbG9jayBzaG91bGQgZ2V0IHVzZWQuCitLbm93aW5nIHRoZSBFQyBHUEUgb25lIGNhbiB3YXRjaCB0aGUgYW1vdW50IG9mIEhXIGV2ZW50cyByZWxhdGVkIHRvCit0aGUgRUMgaGVyZSAoWFkgLT4gR1BFIG51bWJlciBmcm9tIC9zeXMva2VybmVsL2RlYnVnL2VjLyovZ3BlKToKKy9zeXMvZmlybXdhcmUvYWNwaS9pbnRlcnJ1cHRzL2dwZVhZCisKK1RoZSBpbyBmaWxlIGlzIGJpbmFyeSBhbmQgYSB1c2Vyc3BhY2UgdG9vbCBsb2NhdGVkIGhlcmU6CitmdHA6Ly9mdHAuc3VzZS5jb20vcHViL3Blb3BsZS90cmVubi9zb3VyY2VzL2VjLworc2hvdWxkIGdldCB1c2VkIHRvIHJlYWQgb3V0IHRoZSAyNTYgRW1iZWRkZWQgQ29udHJvbGxlciByZWdpc3RlcnMKK29yIHdyaXRpbmcgdG8gdGhlbS4KKworQ0FVVElPTjogRG8gbm90IHdyaXRlIHRvIHRoZSBFbWJlZGRlZCBDb250cm9sbGVyIGlmIHlvdSBkb24ndCBrbm93Cit3aGF0IHlvdSBhcmUgZG9pbmchIFJlYm9vdGluZyBhZnRlcndhcmRzIGFsc28gaXMgYSBnb29kIGlkZWEuCitUaGlzIGNhbiBpbmZsdWVuY2UgdGhlIHdheSB5b3VyIG1hY2hpbmUgaXMgY29vbGVkIGFuZCBmYW5zIG1heQorbm90IGdldCBzd2l0Y2hlZCBvbiBhZ2FpbiBhZnRlciB5b3UgZGlkIGEgd3Jvbmcgd3JpdGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2RlYnVnZnMta21lbXRyYWNlIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9kZWJ1Z2ZzLWttZW10cmFjZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU2YTkyYS4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2RlYnVnZnMta21lbXRyYWNlCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotV2hhdDoJCS9zeXMva2VybmVsL2RlYnVnL2ttZW10cmFjZS8KLURhdGU6CQlKdWx5IDIwMDgKLUNvbnRhY3Q6CUVkdWFyZCAtIEdhYnJpZWwgTXVudGVhbnUgPGVkdWFyZC5tdW50ZWFudUBsaW51eDM2MC5ybz4KLURlc2NyaXB0aW9uOgotCi1JbiBrbWVtdHJhY2UtZW5hYmxlZCBrZXJuZWxzLCB0aGUgZm9sbG93aW5nIGZpbGVzIGFyZSBjcmVhdGVkOgotCi0vc3lzL2tlcm5lbC9kZWJ1Zy9rbWVtdHJhY2UvCi0JY3B1PG4+CQkoMDQwMCkJUGVyLUNQVSB0cmFjaW5nIGRhdGEsIHNlZSBiZWxvdy4gKGJpbmFyeSkKLQl0b3RhbF9vdmVycnVucwkoMDQwMCkJVG90YWwgbnVtYmVyIG9mIGJ5dGVzIHdoaWNoIHdlcmUgZHJvcHBlZCBmcm9tCi0JCQkJY3B1PG4+IGZpbGVzIGJlY2F1c2Ugb2YgZnVsbCBidWZmZXIgY29uZGl0aW9uLAotCQkJCW5vbi1iaW5hcnkuICh0ZXh0KQotCWFiaV92ZXJzaW9uCSgwNDAwKQlLZXJuZWwncyBrbWVtdHJhY2UgQUJJIHZlcnNpb24uICh0ZXh0KQotCi1FYWNoIHBlci1DUFUgZmlsZSBzaG91bGQgYmUgcmVhZCBhY2NvcmRpbmcgdG8gdGhlIHJlbGF5IGludGVyZmFjZS4gVGhhdCBpcywKLXRoZSByZWFkZXIgc2hvdWxkIHNldCBhZmZpbml0eSB0byB0aGF0IHNwZWNpZmljIENQVSBhbmQsIGFzIGN1cnJlbnRseSBkb25lIGJ5Ci10aGUgdXNlcnNwYWNlIGFwcGxpY2F0aW9uICh0aG91Z2ggdGhlcmUgYXJlIG90aGVyIG1ldGhvZHMpLCB1c2UgcG9sbCgpIHdpdGgKLWFuIGluZmluaXRlIHRpbWVvdXQgYmVmb3JlIGV2ZXJ5IHJlYWQoKS4gT3RoZXJ3aXNlLCBlcnJvbmVvdXMgZGF0YSBtYXkgYmUKLXJlYWQuIFRoZSBiaW5hcnkgZGF0YSBoYXMgdGhlIGZvbGxvd2luZyBfY29yZV8gZm9ybWF0OgotCi0JRXZlbnQgSUQJKDEgYnl0ZSkJVW5zaWduZWQgaW50ZWdlciwgb25lIG9mOgotCQkwIC0gcmVwcmVzZW50cyBhbiBhbGxvY2F0aW9uIChLTUVNVFJBQ0VfRVZFTlRfQUxMT0MpCi0JCTEgLSByZXByZXNlbnRzIGEgZnJlZWluZyBvZiBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkKLQkJICAgIChLTUVNVFJBQ0VfRVZFTlRfRlJFRSkKLQlUeXBlIElECQkoMSBieXRlKQlVbnNpZ25lZCBpbnRlZ2VyLCBvbmUgb2Y6Ci0JCTAgLSB0aGlzIGlzIGEga21hbGxvYygpIC8ga2ZyZWUoKQotCQkxIC0gdGhpcyBpcyBhIGttZW1fY2FjaGVfYWxsb2MoKSAvIGttZW1fY2FjaGVfZnJlZSgpCi0JCTIgLSB0aGlzIGlzIGEgX19nZXRfZnJlZV9wYWdlcygpIGV0IGFsLgotCUV2ZW50IHNpemUJKDIgYnl0ZXMpCVVuc2lnbmVkIGludGVnZXIgcmVwcmVzZW50aW5nIHRoZQotCQkJCQlzaXplIG9mIHRoaXMgZXZlbnQuIFVzZWQgdG8gZXh0ZW5kCi0JCQkJCWttZW10cmFjZS4gRGlzY2FyZCB0aGUgYnl0ZXMgeW91Ci0JCQkJCWRvbid0IGtub3cgYWJvdXQuCi0JU2VxdWVuY2UgbnVtYmVyCSg0IGJ5dGVzKQlTaWduZWQgaW50ZWdlciB1c2VkIHRvIHJlb3JkZXIgZGF0YQotCQkJCQlsb2dnZWQgb24gU01QIG1hY2hpbmVzLiBXcmFwYXJvdW5kCi0JCQkJCW11c3QgYmUgdGFrZW4gaW50byBhY2NvdW50LCBhbHRob3VnaAotCQkJCQlpdCBpcyB1bmxpa2VseS4KLQlDYWxsZXIgYWRkcmVzcwkoOCBieXRlcykJUmV0dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGxlci4KLQlQb2ludGVyIHRvIG1lbQkoOCBieXRlcykJUG9pbnRlciB0byB0YXJnZXQgbWVtb3J5IGFyZWEuIENhbiBiZQotCQkJCQlOVUxMLCBidXQgbm90IGFsbCBzdWNoIGNhbGxzIG1pZ2h0IGJlCi0JCQkJCXJlY29yZGVkLgotCi1JbiBjYXNlIG9mIEtNRU1UUkFDRV9FVkVOVF9BTExPQyBldmVudHMsIHRoZSBuZXh0IGZpZWxkcyBmb2xsb3c6Ci0KLQlSZXF1ZXN0ZWQgYnl0ZXMJKDggYnl0ZXMpCVRvdGFsIG51bWJlciBvZiByZXF1ZXN0ZWQgYnl0ZXMsCi0JCQkJCXVuc2lnbmVkLCBtdXN0IG5vdCBiZSB6ZXJvLgotCUFsbG9jYXRlZCBieXRlcyAoOCBieXRlcykJVG90YWwgbnVtYmVyIG9mIGFjdHVhbGx5IGFsbG9jYXRlZAotCQkJCQlieXRlcywgdW5zaWduZWQsIG11c3Qgbm90IGJlIGxvd2VyCi0JCQkJCXRoYW4gcmVxdWVzdGVkIGJ5dGVzLgotCVJlcXVlc3RlZCBmbGFncwkoNCBieXRlcykJR0ZQIGZsYWdzIHN1cHBsaWVkIGJ5IHRoZSBjYWxsZXIuCi0JVGFyZ2V0IENQVQkoNCBieXRlcykJU2lnbmVkIGludGVnZXIsIHZhbGlkIGZvciBldmVudCBpZCAxLgotCQkJCQlJZiBlcXVhbCB0byAtMSwgdGFyZ2V0IENQVSBpcyB0aGUgc2FtZQotCQkJCQlhcyBvcmlnaW4gQ1BVLCBidXQgdGhlIHJldmVyc2UgbWlnaHQKLQkJCQkJbm90IGJlIHRydWUuCi0KLVRoZSBkYXRhIGlzIG1hZGUgYXZhaWxhYmxlIGluIHRoZSBzYW1lIGVuZGlhbm5lc3MgdGhlIG1hY2hpbmUgaGFzLgotCi1PdGhlciBldmVudCBpZHMgYW5kIHR5cGUgaWRzIG1heSBiZSBkZWZpbmVkIGFuZCBhZGRlZC4gT3RoZXIgZmllbGRzIG1heSBiZQotYWRkZWQgYnkgaW5jcmVhc2luZyBldmVudCBzaXplLCBidXQgc2VlIGJlbG93IGZvciBkZXRhaWxzLgotRXZlcnkgbW9kaWZpY2F0aW9uIHRvIHRoZSBBQkksIGluY2x1ZGluZyBuZXcgaWQgZGVmaW5pdGlvbnMsIGFyZSBmb2xsb3dlZAotYnkgYnVtcGluZyB0aGUgQUJJIHZlcnNpb24gYnkgb25lLgotCi1BZGRpbmcgbmV3IGRhdGEgdG8gdGhlIHBhY2tldCAoZmVhdHVyZXMpIGlzIGRvbmUgYXQgdGhlIGVuZCBvZiB0aGUgbWFuZGF0b3J5Ci1kYXRhOgotCUZlYXR1cmUgc2l6ZQkoMiBieXRlKQotCUZlYXR1cmUgSUQJKDEgYnl0ZSkKLQlGZWF0dXJlIGRhdGEJKEZlYXR1cmUgc2l6ZSAtIDMgYnl0ZXMpCi0KLQotVXNlcnM6Ci0Ja21lbXRyYWNlLXVzZXIgLSBnaXQ6Ly9yZXBvLm9yLmN6L2ttZW10cmFjZS11c2VyLmdpdAotCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2kgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2kKaW5kZXggMjViZTMyNS4uZjk3OWQ4MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaQpAQCAtMTM5LDMgKzEzOSwzMCBAQAogRGVzY3JpcHRpb246CiAJCVRoaXMgc3ltYm9saWMgbGluayBwb2ludHMgdG8gdGhlIFBDSSBob3RwbHVnIGNvbnRyb2xsZXIgZHJpdmVyCiAJCW1vZHVsZSB0aGF0IG1hbmFnZXMgdGhlIGhvdHBsdWcgc2xvdC4KKworV2hhdDoJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLy4uLi9sYWJlbAorRGF0ZToJCUp1bHkgMjAxMAorQ29udGFjdDoJTmFyZW5kcmEgSyA8bmFyZW5kcmFfa0BkZWxsLmNvbT4sIGxpbnV4LWJ1Z3NAZGVsbC5jb20KK0Rlc2NyaXB0aW9uOgorCQlSZWFkaW5nIHRoaXMgYXR0cmlidXRlIHdpbGwgcHJvdmlkZSB0aGUgZmlybXdhcmUKKwkJZ2l2ZW4gbmFtZShTTUJJT1MgdHlwZSA0MSBzdHJpbmcpIG9mIHRoZSBQQ0kgZGV2aWNlLgorCQlUaGUgYXR0cmlidXRlIHdpbGwgYmUgY3JlYXRlZCBvbmx5IGlmIHRoZSBmaXJtd2FyZQorCQloYXMgZ2l2ZW4gYSBuYW1lIHRvIHRoZSBQQ0kgZGV2aWNlLgorVXNlcnM6CisJCVVzZXJzcGFjZSBhcHBsaWNhdGlvbnMgaW50ZXJlc3RlZCBpbiBrbm93aW5nIHRoZQorCQlmaXJtd2FyZSBhc3NpZ25lZCBuYW1lIG9mIHRoZSBQQ0kgZGV2aWNlLgorCitXaGF0OgkJL3N5cy9idXMvcGNpL2RldmljZXMvLi4uL2luZGV4CitEYXRlOgkJSnVseSAyMDEwCitDb250YWN0OglOYXJlbmRyYSBLIDxuYXJlbmRyYV9rQGRlbGwuY29tPiwgbGludXgtYnVnc0BkZWxsLmNvbQorRGVzY3JpcHRpb246CisJCVJlYWRpbmcgdGhpcyBhdHRyaWJ1dGUgd2lsbCBwcm92aWRlIHRoZSBmaXJtd2FyZQorCQlnaXZlbiBpbnN0YW5jZShTTUJJT1MgdHlwZSA0MSBkZXZpY2UgdHlwZSBpbnN0YW5jZSkKKwkJb2YgdGhlIFBDSSBkZXZpY2UuIFRoZSBhdHRyaWJ1dGUgd2lsbCBiZSBjcmVhdGVkCisJCW9ubHkgaWYgdGhlIGZpcm13YXJlIGhhcyBnaXZlbiBhIGRldmljZSB0eXBlIGluc3RhbmNlCisJCXRvIHRoZSBQQ0kgZGV2aWNlLgorVXNlcnM6CisJCVVzZXJzcGFjZSBhcHBsaWNhdGlvbnMgaW50ZXJlc3RlZCBpbiBrbm93aW5nIHRoZQorCQlmaXJtd2FyZSBhc3NpZ25lZCBkZXZpY2UgdHlwZSBpbnN0YW5jZSBvZiB0aGUgUENJCisJCWRldmljZSB0aGF0IGNhbiBoZWxwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGZpcm13YXJlCisJCWludGVuZGVkIG9yZGVyIG9mIHRoZSBQQ0kgZGV2aWNlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kZXZpY2VzLW1lbW9yeSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1tZW1vcnkKaW5kZXggYWJhN2Q5OC4uNzQwNWRlMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kZXZpY2VzLW1lbW9yeQorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRldmljZXMtbWVtb3J5CkBAIC03LDcgKzcsNyBAQAogCQlhZGRlZCBvciByZW1vdmVkIGR5bmFtaWNhbGx5IHRvIHJlcHJlc2VudCBob3QtYWRkL3JlbW92ZQogCQlvcGVyYXRpb25zLgogVXNlcnM6CQlob3RwbHVnIG1lbW9yeSBhZGQvcmVtb3ZlIHRvb2xzCi0JCWh0dHBzOi8vdzMub3BlbnNvdXJjZS5pYm0uY29tL3Byb2plY3RzL3Bvd2VycGMtdXRpbHMvCisJCWh0dHA6Ly93d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy93aWtpcy9kaXNwbGF5L0xpbnV4UC9wb3dlcnBjLXV0aWxzCiAKIFdoYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9tZW1vcnlYL3JlbW92YWJsZQogRGF0ZToJCUp1bmUgMjAwOApAQCAtMTksNyArMTksNyBAQAogCQlpZGVudGlmeSByZW1vdmFibGUgc2VjdGlvbnMgb2YgdGhlIG1lbW9yeSBiZWZvcmUgYXR0ZW1wdGluZwogCQlwb3RlbnRpYWxseSBleHBlbnNpdmUgaG90LXJlbW92ZSBtZW1vcnkgb3BlcmF0aW9uCiBVc2VyczoJCWhvdHBsdWcgbWVtb3J5IHJlbW92ZSB0b29scwotCQlodHRwczovL3czLm9wZW5zb3VyY2UuaWJtLmNvbS9wcm9qZWN0cy9wb3dlcnBjLXV0aWxzLworCQlodHRwOi8vd3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvd2lraXMvZGlzcGxheS9MaW51eFAvcG93ZXJwYy11dGlscwkKIAogV2hhdDoJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L21lbW9yeVgvcGh5c19kZXZpY2UKIERhdGU6CQlTZXB0ZW1iZXIgMjAwOApAQCAtNTgsNyArNTgsNyBAQAogCQlieSByb290IHRvIG9mZmxpbmUgdGhhdCBzZWN0aW9uLgogCQkjIGVjaG8gb2ZmbGluZSA+IC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L21lbW9yeTIyL3N0YXRlCiBVc2VyczoJCWhvdHBsdWcgbWVtb3J5IHJlbW92ZSB0b29scwotCQlodHRwczovL3czLm9wZW5zb3VyY2UuaWJtLmNvbS9wcm9qZWN0cy9wb3dlcnBjLXV0aWxzLworCQlodHRwOi8vd3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvd2lraXMvZGlzcGxheS9MaW51eFAvcG93ZXJwYy11dGlscwogCiAKIFdoYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeVgvbm9kZVkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1zeXN0ZW0tY3B1IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kZXZpY2VzLXN5c3RlbS1jcHUKaW5kZXggODRhNzEwZi4uNzU2NGU4OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kZXZpY2VzLXN5c3RlbS1jcHUKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kZXZpY2VzLXN5c3RlbS1jcHUKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCQlDdXJyZW50bHksIG9ubHkgQU1EIEZhbWlseSAxMGggUHJvY2Vzc29ycyBzdXBwb3J0IGNhY2hlIGluZGV4CiAJCWRpc2FibGUsIGFuZCBvbmx5IGZvciB0aGVpciBMMyBjYWNoZXMuICBTZWUgdGhlIEJJT1MgYW5kCiAJCUtlcm5lbCBEZXZlbG9wZXIncyBHdWlkZSBhdAotCQlodHRwOi8vd3d3LmFtZC5jb20vdXMtZW4vYXNzZXRzL2NvbnRlbnRfdHlwZS93aGl0ZV9wYXBlcnNfYW5kX3RlY2hfZG9jcy8zMTExNi1QdWJsaWMtR0gtQktER18zLjIwXzItNC0wOS5wZGYKKwkJaHR0cDovL3N1cHBvcnQuYW1kLmNvbS91cy9FbWJlZGRlZF9UZWNoRG9jcy8zMTExNi1QdWJsaWMtR0gtQktER18zLTI4XzUtMjgtMDkucGRmCQogCQlmb3IgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiBhbmQgb3RoZXIgZGV0YWlscyBvbiB0aGUKIAkJY2FjaGUgaW5kZXggZGlzYWJsZS4KIFVzZXJzOiAgICBqb2FjaGltLmRlZ3VhcmFAYW1kLmNvbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kcml2ZXItaGlkLXJvY2NhdC1rb25lIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kcml2ZXItaGlkLXJvY2NhdC1rb25lCmluZGV4IDg4MzQwYTIuLjA2M2JkYTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZHJpdmVyLWhpZC1yb2NjYXQta29uZQorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRyaXZlci1oaWQtcm9jY2F0LWtvbmUKQEAgLTMzLDE5ICszMyw2IEBACiAJCWxlZnQuIEUuZy4gYSByZXR1cm5lZCB2YWx1ZSBvZiAxMzggbWVhbnMgMS4zOAogCQlUaGlzIGZpbGUgaXMgcmVhZG9ubHkuCiAKLVdoYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy88YnVzbnVtPi08ZGV2bnVtPjo8Y29uZmlnIG51bT4uPGludGVyZmFjZSBudW0+L2tvbmVfZHJpdmVyX3ZlcnNpb24KLURhdGU6CQlNYXJjaCAyMDEwCi1Db250YWN0OglTdGVmYW4gQWNoYXR6IDxlcmF6b3JfZGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotRGVzY3JpcHRpb246CVdoZW4gcmVhZCwgdGhpcyBmaWxlIHJldHVybnMgdGhlIGRyaXZlciB2ZXJzaW9uLgotCQlUaGUgZm9ybWF0IG9mIHRoZSBzdHJpbmcgaXMgInY8bWFqb3I+LjxtaW5vcj4uPHBhdGNobGV2ZWw+Ii4KLQkJVGhpcyBhdHRyaWJ1dGUgaXMgdXNlZCBieSB0aGUgdXNlcmxhbmQgdG9vbHMgdG8gZmluZCB0aGUgc3lzZnMtCi0JCXBhdGhzIG9mIGluc3RhbGxlZCBrb25lLW1pY2UgYW5kIGRldGVybWluZSB0aGUgY2FwYWJpbGl0ZXMgb2YKLQkJdGhlIGRyaXZlci4gVmVyc2lvbnMgb2YgdGhpcyBkcml2ZXIgZm9yIG9sZCBrZXJuZWxzIHJlcGxhY2UKLQkJdXNiaGlkIGluc3RlYWQgb2YgZ2VuZXJpYy11c2IuIFRoZSB3YXkgdG8gc2NhbiBmb3IgdGhpcyBmaWxlCi0JCWhhcyBiZWVuIGNob3NlbiB0byBwcm92aWRlIGEgY29uc2lzdGVudCB3YXkgZm9yIGFsbCBzdXBwb3J0ZWQKLQkJa2VybmVsIHZlcnNpb25zLgotCQlUaGlzIGZpbGUgaXMgcmVhZG9ubHkuCi0KIFdoYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy88YnVzbnVtPi08ZGV2bnVtPjo8Y29uZmlnIG51bT4uPGludGVyZmFjZSBudW0+L3Byb2ZpbGVbMS01XQogRGF0ZToJCU1hcmNoIDIwMTAKIENvbnRhY3Q6CVN0ZWZhbiBBY2hhdHogPGVyYXpvcl9kZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBvd2VyIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wb3dlcgppbmRleCBkNmE4MDFmLi4yODc1ZjFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBvd2VyCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcG93ZXIKQEAgLTExNCwzICsxMTQsMTggQEAKIAkJaWYgdGhpcyBmaWxlIGNvbnRhaW5zICIxIiwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuICBJdCBtYXkgYmUKIAkJZGlzYWJsZWQgYnkgd3JpdGluZyAiMCIgdG8gdGhpcyBmaWxlLCBpbiB3aGljaCBjYXNlIGFsbCBkZXZpY2VzCiAJCXdpbGwgYmUgc3VzcGVuZGVkIGFuZCByZXN1bWVkIHN5bmNocm9ub3VzbHkuCisKK1doYXQ6CQkvc3lzL3Bvd2VyL3dha2V1cF9jb3VudAorRGF0ZToJCUp1bHkgMjAxMAorQ29udGFjdDoJUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPgorRGVzY3JpcHRpb246CisJCVRoZSAvc3lzL3Bvd2VyL3dha2V1cF9jb3VudCBmaWxlIGFsbG93cyB1c2VyIHNwYWNlIHRvIHB1dCB0aGUKKwkJc3lzdGVtIGludG8gYSBzbGVlcCBzdGF0ZSB3aGlsZSB0YWtpbmcgaW50byBhY2NvdW50IHRoZQorCQljb25jdXJyZW50IGFycml2YWwgb2Ygd2FrZXVwIGV2ZW50cy4gIFJlYWRpbmcgZnJvbSBpdCByZXR1cm5zCisJCXRoZSBjdXJyZW50IG51bWJlciBvZiByZWdpc3RlcmVkIHdha2V1cCBldmVudHMgYW5kIGl0IGJsb2NrcyBpZgorCQlzb21lIHdha2V1cCBldmVudHMgYXJlIGJlaW5nIHByb2Nlc3NlZCBhdCB0aGUgdGltZSB0aGUgZmlsZSBpcworCQlyZWFkIGZyb20uICBXcml0aW5nIHRvIGl0IHdpbGwgb25seSBzdWNjZWVkIGlmIHRoZSBjdXJyZW50CisJCW51bWJlciBvZiB3YWtldXAgZXZlbnRzIGlzIGVxdWFsIHRvIHRoZSB3cml0dGVuIHZhbHVlIGFuZCwgaWYKKwkJc3VjY2Vzc2Z1bCwgd2lsbCBtYWtlIHRoZSBrZXJuZWwgYWJvcnQgYSBzdWJzZXF1ZW50IHRyYW5zaXRpb24KKwkJdG8gYSBzbGVlcCBzdGF0ZSBpZiBhbnkgd2FrZXVwIGV2ZW50cyBhcmUgcmVwb3J0ZWQgYWZ0ZXIgdGhlCisJCXdyaXRlIGhhcyByZXR1cm5lZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQ2hhbmdlcyBiL0RvY3VtZW50YXRpb24vQ2hhbmdlcwppbmRleCBlY2E5ZjZlLi40ZmI4OGYxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0NoYW5nZXMKKysrIGIvRG9jdW1lbnRhdGlvbi9DaGFuZ2VzCkBAIC0zMzEsNyArMzMxLDcgQEAKIAogTWtpbml0cmQKIC0tLS0tLS0tCi1vICA8ZnRwOi8vcmF3aGlkZS5yZWRoYXQuY29tL3B1Yi9yYXdoaWRlL1NSUE1TL1NSUE1TLz4KK28gIDxodHRwczovL2NvZGUubGF1bmNocGFkLm5ldC9pbml0cmQtdG9vbHMvbWFpbj4KIAogRTJmc3Byb2dzCiAtLS0tLS0tLS0KQEAgLTM0MywxMSArMzQzLDExIEBACiAKIFJlaXNlcmZzcHJvZ3MKIC0tLS0tLS0tLS0tLS0KLW8gIDxodHRwOi8vd3d3Lm5hbWVzeXMuY29tL3B1Yi9yZWlzZXJmc3Byb2dzL3JlaXNlcmZzcHJvZ3MtMy42LjMudGFyLmd6PgorbyAgPGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvZnMvcmVpc2VyZnMvPgogCiBYZnNwcm9ncwogLS0tLS0tLS0KLW8gIDxmdHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy94ZnMvZG93bmxvYWQvPgorbyAgPGZ0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL3hmcy8+CiAKIFBjbWNpYXV0aWxzCiAtLS0tLS0tLS0tLQpAQCAtMzg3LDE4ICszODcsMTggQEAKIAogbWNlbG9nCiAtLS0tLS0KLW8gPGZ0cDovL2Z0cC5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9jcHUvbWNlL21jZWxvZy8+CitvIDxmdHA6Ly9mdHAua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvY3B1L21jZS8+CiAKIE5ldHdvcmtpbmcKICoqKioqKioqKioKIAogUFBQCiAtLS0KLW8gIDxmdHA6Ly9mdHAuc2FtYmEub3JnL3B1Yi9wcHAvcHBwLTIuNC4wLnRhci5nej4KK28gIDxmdHA6Ly9mdHAuc2FtYmEub3JnL3B1Yi9wcHAvPgogCiBJc2RuNGstdXRpbHMKIC0tLS0tLS0tLS0tLQotbyAgPGZ0cDovL2Z0cC5pc2RuNGxpbnV4LmRlL3B1Yi9pc2RuNGxpbnV4L3V0aWxzL2lzZG40ay11dGlscy52My4xcHJlMS50YXIuZ3o+CitvICA8ZnRwOi8vZnRwLmlzZG40bGludXguZGUvcHViL2lzZG40bGludXgvdXRpbHMvPgogCiBORlMtdXRpbHMKIC0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RldmljZS1kcml2ZXJzLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlLWRyaXZlcnMudG1wbAppbmRleCAxYjJkZDRmLi5lY2QzNWU5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlLWRyaXZlcnMudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlLWRyaXZlcnMudG1wbApAQCAtMTExLDYgKzExMSw3IEBACiA8IS0tCiBYIUVkcml2ZXJzL2Jhc2UvaW50ZXJmYWNlLmMKIC0tPgorIUlpbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCiAhRWRyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCiAhRWRyaXZlcnMvYmFzZS9idXMuYwogICAgICA8L3NlY3QxPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9kdmJhcGkueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9kdmJhcGkueG1sCmluZGV4IDYzYzUyOGYuLmUzYTk3ZmQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvZHZiYXBpLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2R2YmFwaS54bWwKQEAgLTEyLDEwICsxMiwxMiBAQAogPG90aGVybmFtZSByb2xlPSJtaSI+Ty4gQy48L290aGVybmFtZT4KIDxhZmZpbGlhdGlvbj48YWRkcmVzcz48ZW1haWw+cmprbUBtZXR6bGVyYnJvcy5kZTwvZW1haWw+PC9hZGRyZXNzPjwvYWZmaWxpYXRpb24+CiA8L2F1dGhvcj4KKzwvYXV0aG9yZ3JvdXA+Cis8YXV0aG9yZ3JvdXA+CiA8YXV0aG9yPgogPGZpcnN0bmFtZT5NYXVybzwvZmlyc3RuYW1lPgotPHN1cm5hbWU+Q2hlaGFiPC9zdXJuYW1lPgogPG90aGVybmFtZSByb2xlPSJtaSI+Q2FydmFsaG88L290aGVybmFtZT4KKzxzdXJuYW1lPkNoZWhhYjwvc3VybmFtZT4KIDxhZmZpbGlhdGlvbj48YWRkcmVzcz48ZW1haWw+bWNoZWhhYkByZWRoYXQuY29tPC9lbWFpbD48L2FkZHJlc3M+PC9hZmZpbGlhdGlvbj4KIDxjb250cmliPlBvcnRlZCBkb2N1bWVudCB0byBEb2Nib29rIFhNTC48L2NvbnRyaWI+CiA8L2F1dGhvcj4KQEAgLTIzLDEzICsyNSwyNCBAQAogPGNvcHlyaWdodD4KIAk8eWVhcj4yMDAyPC95ZWFyPgogCTx5ZWFyPjIwMDM8L3llYXI+Ci0JPHllYXI+MjAwOTwveWVhcj4KIAk8aG9sZGVyPkNvbnZlcmdlbmNlIEdtYkg8L2hvbGRlcj4KIDwvY29weXJpZ2h0PgorPGNvcHlyaWdodD4KKwk8eWVhcj4yMDA5LTIwMTA8L3llYXI+CisJPGhvbGRlcj5NYXVybyBDYXJ2YWxobyBDaGVoYWI8L2hvbGRlcj4KKzwvY29weXJpZ2h0PgogCiA8cmV2aGlzdG9yeT4KIDwhLS0gUHV0IGRvY3VtZW50IHJldmlzaW9ucyBoZXJlLCBuZXdlc3QgZmlyc3QuIC0tPgogPHJldmlzaW9uPgorCTxyZXZudW1iZXI+Mi4wLjM8L3Jldm51bWJlcj4KKwk8ZGF0ZT4yMDEwLTA3LTAzPC9kYXRlPgorCTxhdXRob3Jpbml0aWFscz5tY2M8L2F1dGhvcmluaXRpYWxzPgorCTxyZXZyZW1hcms+CisJCUFkZCBzb21lIGZyb250ZW5kIGNhcGFiaWxpdGllcyBmbGFncywgcHJlc2VudCBvbiBrZXJuZWwsIGJ1dCBtaXNzaW5nIGF0IHRoZSBzcGVjcy4KKwk8L3JldnJlbWFyaz4KKzwvcmV2aXNpb24+Cis8cmV2aXNpb24+CiAJPHJldm51bWJlcj4yLjAuMjwvcmV2bnVtYmVyPgogCTxkYXRlPjIwMDktMTAtMjU8L2RhdGU+CiAJPGF1dGhvcmluaXRpYWxzPm1jYzwvYXV0aG9yaW5pdGlhbHM+CkBAIC02Myw3ICs3Niw3IEBACiAKIAogPHRpdGxlPkxJTlVYIERWQiBBUEk8L3RpdGxlPgotPHN1YnRpdGxlPlZlcnNpb24gMzwvc3VidGl0bGU+Cis8c3VidGl0bGU+VmVyc2lvbiA1LjI8L3N1YnRpdGxlPgogPCEtLSBBREQgVEhFIENIQVBURVJTIEhFUkUgLS0+CiAgIDxjaGFwdGVyIGlkPSJkdmJfaW50cm9kdXRpb24iPgogICAgICZzdWItaW50cm87CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2Zyb250ZW5kLmgueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9mcm9udGVuZC5oLnhtbAppbmRleCBiOTk2NDRmLi5kMDhlMGQ0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2Zyb250ZW5kLmgueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvZnJvbnRlbmQuaC54bWwKQEAgLTYzLDYgKzYzLDcgQEAKICAgICAgICAgRkVfQ0FOXzhWU0IgICAgICAgICAgICAgICAgICAgICA9IDB4MjAwMDAwLAogICAgICAgICBGRV9DQU5fMTZWU0IgICAgICAgICAgICAgICAgICAgID0gMHg0MDAwMDAsCiAgICAgICAgIEZFX0hBU19FWFRFTkRFRF9DQVBTICAgICAgICAgICAgPSAweDgwMDAwMCwgICAvKiBXZSBuZWVkIG1vcmUgYml0c3BhY2UgZm9yIG5ld2VyIEFQSXMsIGluZGljYXRlIHRoaXMuICovCisgICAgICAgIEZFX0NBTl9UVVJCT19GRUMgICAgICAgICAgICAgICAgPSAweDgwMDAwMDAsICAvKiBmcm9udGVuZCBzdXBwb3J0cyAidHVyYm8gZmVjIG1vZHVsYXRpb24iICovCiAgICAgICAgIEZFX0NBTl8yR19NT0RVTEFUSU9OICAgICAgICAgICAgPSAweDEwMDAwMDAwLCAvKiBmcm9udGVuZCBzdXBwb3J0cyAiMm5kIGdlbmVyYXRpb24gbW9kdWxhdGlvbiIgKERWQi1TMikgKi8KICAgICAgICAgRkVfTkVFRFNfQkVORElORyAgICAgICAgICAgICAgICA9IDB4MjAwMDAwMDAsIC8qIG5vdCBzdXBwb3J0ZWQgYW55bW9yZSwgZG9uJ3QgdXNlIChmcm9udGVuZCByZXF1aXJlcyBmcmVxdWVuY3kgYmVuZGluZykgKi8KICAgICAgICAgRkVfQ0FOX1JFQ09WRVIgICAgICAgICAgICAgICAgICA9IDB4NDAwMDAwMDAsIC8qIGZyb250ZW5kIGNhbiByZWNvdmVyIGZyb20gYSBjYWJsZSB1bnBsdWcgYXV0b21hdGljYWxseSAqLwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9mcm9udGVuZC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2Zyb250ZW5kLnhtbAppbmRleCAzMDBiYTFmLi43OGQ3NTZkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2Zyb250ZW5kLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2Zyb250ZW5kLnhtbApAQCAtNjQsOCArNjQsMTQgQEAKIAlGRV9DQU5fQkFORFdJRFRIX0FVVE8gICAgICAgICA9IDB4NDAwMDAsCiAJRkVfQ0FOX0dVQVJEX0lOVEVSVkFMX0FVVE8gICAgPSAweDgwMDAwLAogCUZFX0NBTl9ISUVSQVJDSFlfQVVUTyAgICAgICAgID0gMHgxMDAwMDAsCi0JRkVfQ0FOX01VVEVfVFMgICAgICAgICAgICAgICAgPSAweDgwMDAwMDAwLAotCUZFX0NBTl9DTEVBTl9TRVRVUCAgICAgICAgICAgID0gMHg0MDAwMDAwMAorCUZFX0NBTl84VlNCICAgICAgICAgICAgICAgICAgID0gMHgyMDAwMDAsCisJRkVfQ0FOXzE2VlNCICAgICAgICAgICAgICAgICAgPSAweDQwMDAwMCwKKwlGRV9IQVNfRVhURU5ERURfQ0FQUyAgICAgICAgICA9IDB4ODAwMDAwLAorCUZFX0NBTl9UVVJCT19GRUMgICAgICAgICAgICAgID0gMHg4MDAwMDAwLAorCUZFX0NBTl8yR19NT0RVTEFUSU9OICAgICAgICAgID0gMHgxMDAwMDAwMCwKKwlGRV9ORUVEU19CRU5ESU5HICAgICAgICAgICAgICA9IDB4MjAwMDAwMDAsCisJRkVfQ0FOX1JFQ09WRVIgICAgICAgICAgICAgICAgPSAweDQwMDAwMDAwLAorCUZFX0NBTl9NVVRFX1RTICAgICAgICAgICAgICAgID0gMHg4MDAwMDAwMAogCX0gZmVfY2Fwc190OwogPC9wcm9ncmFtbGlzdGluZz4KIDwvc2VjdGlvbj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZ2RiLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2dkYi50bXBsCmluZGV4IDU1ZjEyYWMuLjQ5MGQ4NjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZ2RiLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tnZGIudG1wbApAQCAtMTk5LDEwICsxOTksMzMgQEAKICAgIG1heSBiZSBjb25maWd1cmVkIGFzIGEga2VybmVsIGJ1aWx0LWluIG9yIGEga2VybmVsIGxvYWRhYmxlIG1vZHVsZS4KICAgIFlvdSBjYW4gb25seSBtYWtlIHVzZSBvZiA8Y29uc3RhbnQ+a2dkYndhaXQ8L2NvbnN0YW50PiBhbmQgZWFybHkKICAgIGRlYnVnZ2luZyBpZiB5b3UgYnVpbGQga2dkYm9jIGludG8gdGhlIGtlcm5lbCBhcyBhIGJ1aWx0LWluLgorICAgPHBhcmE+T3B0aW9uYWxseSB5b3UgY2FuIGVsZWN0IHRvIGFjdGl2YXRlIGttcyAoS2VybmVsIE1vZGUKKyAgIFNldHRpbmcpIGludGVncmF0aW9uLiAgV2hlbiB5b3UgdXNlIGttcyB3aXRoIGtnZGJvYyBhbmQgeW91IGhhdmUgYQorICAgdmlkZW8gZHJpdmVyIHRoYXQgaGFzIGF0b21pYyBtb2RlIHNldHRpbmcgaG9va3MsIGl0IGlzIHBvc3NpYmxlIHRvCisgICBlbnRlciB0aGUgZGVidWdnZXIgb24gdGhlIGdyYXBoaWNzIGNvbnNvbGUuICBXaGVuIHRoZSBrZXJuZWwKKyAgIGV4ZWN1dGlvbiBpcyByZXN1bWVkLCB0aGUgcHJldmlvdXMgZ3JhcGhpY3MgbW9kZSB3aWxsIGJlIHJlc3RvcmVkLgorICAgVGhpcyBpbnRlZ3JhdGlvbiBjYW4gc2VydmUgYXMgYSB1c2VmdWwgdG9vbCB0byBhaWQgaW4gZGlhZ25vc2luZworICAgY3Jhc2hlcyBvciBkb2luZyBhbmFseXNpcyBvZiBtZW1vcnkgd2l0aCBrZGIgd2hpbGUgYWxsb3dpbmcgdGhlCisgICBmdWxsIGdyYXBoaWNzIGNvbnNvbGUgYXBwbGljYXRpb25zIHRvIHJ1bi4KKyAgIDwvcGFyYT4KICAgIDwvcGFyYT4KICAgIDxzZWN0MiBpZD0ia2dkYm9jQXJncyI+CiAgICA8dGl0bGU+a2dkYm9jIGFyZ3VtZW50czwvdGl0bGU+Ci0gICA8cGFyYT5Vc2FnZTogPGNvbnN0YW50PmtnZGJvYz1ba2JkXVtbLF1zZXJpYWxfZGV2aWNlXVssYmF1ZF08L2NvbnN0YW50PjwvcGFyYT4KKyAgIDxwYXJhPlVzYWdlOiA8Y29uc3RhbnQ+a2dkYm9jPVtrbXNdW1ssXWtiZF1bWyxdc2VyaWFsX2RldmljZV1bLGJhdWRdPC9jb25zdGFudD48L3BhcmE+CisgICA8cGFyYT5UaGUgb3JkZXIgbGlzdGVkIGFib3ZlIG11c3QgYmUgb2JzZXJ2ZWQgaWYgeW91IHVzZSBhbnkgb2YgdGhlCisgICBvcHRpb25hbCBjb25maWd1cmF0aW9ucyB0b2dldGhlci4KKyAgIDwvcGFyYT4KKyAgIDxwYXJhPkFiYnJldmlhdGlvbnM6CisgICA8aXRlbWl6ZWRsaXN0PgorICAgPGxpc3RpdGVtPjxwYXJhPmttcyA9IEtlcm5lbCBNb2RlIFNldHRpbmc8L3BhcmE+PC9saXN0aXRlbT4KKyAgIDxsaXN0aXRlbT48cGFyYT5rYmQgPSBLZXlib2FyZDwvcGFyYT48L2xpc3RpdGVtPgorICAgPC9pdGVtaXplZGxpc3Q+CisgICA8L3BhcmE+CisgICA8cGFyYT5Zb3UgY2FuIGNvbmZpZ3VyZSBrZ2Rib2MgdG8gdXNlIHRoZSBrZXlib2FyZCwgYW5kIG9yIGEgc2VyaWFsCisgICBkZXZpY2UgZGVwZW5kaW5nIG9uIGlmIHlvdSBhcmUgdXNpbmcga2RiIGFuZCBvciBrZ2RiLCBpbiBvbmUgb2YgdGhlCisgICBmb2xsb3dpbmcgc2NlbmFyaW9zLiAgVGhlIG9yZGVyIGxpc3RlZCBhYm92ZSBtdXN0IGJlIG9ic2VydmVkIGlmCisgICB5b3UgdXNlIGFueSBvZiB0aGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbnMgdG9nZXRoZXIuICBVc2luZyBrbXMgKworICAgb25seSBnZGIgaXMgZ2VuZXJhbGx5IG5vdCBhIHVzZWZ1bCBjb21iaW5hdGlvbi48L3BhcmE+CiAgICA8c2VjdDMgaWQ9ImtnZGJvY0FyZ3MxIj4KICAgIDx0aXRsZT5Vc2luZyBsb2FkYWJsZSBtb2R1bGUgb3IgYnVpbHQtaW48L3RpdGxlPgogICAgPHBhcmE+CkBAIC0yMTIsNyArMjM1LDcgQEAKICAgIDxsaXN0aXRlbT4KICAgIDxwYXJhPkFzIGEga2VybmVsIGxvYWRhYmxlIG1vZHVsZTo8L3BhcmE+CiAgICA8cGFyYT5Vc2UgdGhlIGNvbW1hbmQ6IDxjb25zdGFudD5tb2Rwcm9iZSBrZ2Rib2Mga2dkYm9jPSZsdDt0dHktZGV2aWNlJmd0OyxbYmF1ZF08L2NvbnN0YW50PjwvcGFyYT4KLSAgIDxwYXJhPkhlcmUgYXJlIHR3byBleGFtcGxlcyBvZiBob3cgeW91IG1pZ2h0IGZvcm1hdGUgdGhlIGtnZGJvYworICAgPHBhcmE+SGVyZSBhcmUgdHdvIGV4YW1wbGVzIG9mIGhvdyB5b3UgbWlnaHQgZm9ybWF0IHRoZSBrZ2Rib2MKICAgIHN0cmluZy4gVGhlIGZpcnN0IGlzIGZvciBhbiB4ODYgdGFyZ2V0IHVzaW5nIHRoZSBmaXJzdCBzZXJpYWwgcG9ydC4KICAgIFRoZSBzZWNvbmQgZXhhbXBsZSBpcyBmb3IgdGhlIEFSTSBWZXJzYXRpbGUgQUIgdXNpbmcgdGhlIHNlY29uZAogICAgc2VyaWFsIHBvcnQuCkBAIC0yNDAsNiArMjYzLDkgQEAKICAgIDwvc2VjdDM+CiAgICA8c2VjdDMgaWQ9ImtnZGJvY0FyZ3MzIj4KICAgIDx0aXRsZT5Nb3JlIGV4YW1wbGVzPC90aXRsZT4KKyAgIDxwYXJhPllvdSBjYW4gY29uZmlndXJlIGtnZGJvYyB0byB1c2UgdGhlIGtleWJvYXJkLCBhbmQgb3IgYSBzZXJpYWwKKyAgIGRldmljZSBkZXBlbmRpbmcgb24gaWYgeW91IGFyZSB1c2luZyBrZGIgYW5kIG9yIGtnZGIsIGluIG9uZSBvZiB0aGUKKyAgIGZvbGxvd2luZyBzY2VuYXJpb3MuPC9wYXJhPgogICAgPHBhcmE+WW91IGNhbiBjb25maWd1cmUga2dkYm9jIHRvIHVzZSB0aGUga2V5Ym9hcmQsIGFuZCBvciBhIHNlcmlhbCBkZXZpY2UKICAgIGRlcGVuZGluZyBvbiBpZiB5b3UgYXJlIHVzaW5nIGtkYiBhbmQgb3Iga2dkYiwgaW4gb25lIG9mIHRoZQogICAgZm9sbG93aW5nIHNjZW5hcmlvcy4KQEAgLTI1NSw2ICsyODEsMTIgQEAKICAgIDxsaXN0aXRlbT48cGFyYT5rZGIgd2l0aCBhIGtleWJvYXJkPC9wYXJhPgogICAgPHBhcmE+PGNvbnN0YW50PmtnZGJvYz1rYmQ8L2NvbnN0YW50PjwvcGFyYT4KICAgIDwvbGlzdGl0ZW0+CisgICA8bGlzdGl0ZW0+PHBhcmE+a2RiIHdpdGgga2VybmVsIG1vZGUgc2V0dGluZzwvcGFyYT4KKyAgIDxwYXJhPjxjb25zdGFudD5rZ2Rib2M9a21zLGtiZDwvY29uc3RhbnQ+PC9wYXJhPgorICAgPC9saXN0aXRlbT4KKyAgIDxsaXN0aXRlbT48cGFyYT5rZGIgd2l0aCBrZXJuZWwgbW9kZSBzZXR0aW5nIGFuZCBrZ2RiIG92ZXIgYSBzZXJpYWwgcG9ydDwvcGFyYT4KKyAgIDxwYXJhPjxjb25zdGFudD5rZ2Rib2M9a21zLGtiZCx0dHlTMCwxMTUyMDA8L2NvbnN0YW50PjwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CiAgICA8L29yZGVyZWRsaXN0PgogICAgPC9wYXJhPgogICAgPC9zZWN0Mz4KQEAgLTYzNyw2ICs2NjksOCBAQAogICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBsb2dpYyB0byBwZXJmb3JtIHNhZmUgbWVtb3J5IHJlYWRzIGFuZCB3cml0ZXMgdG8gbWVtb3J5IHdoaWxlIHVzaW5nIHRoZSBkZWJ1Z2dlcjwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgZnVsbCBpbXBsZW1lbnRhdGlvbiBmb3Igc29mdHdhcmUgYnJlYWtwb2ludHMgdW5sZXNzIG92ZXJyaWRkZW4gYnkgdGhlIGFyY2g8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgQVBJIHRvIGludm9rZSBlaXRoZXIgdGhlIGtkYiBvciBrZ2RiIGZyb250ZW5kIHRvIHRoZSBkZWJ1ZyBjb3JlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBzdHJ1Y3R1cmVzIGFuZCBjYWxsYmFjayBBUEkgZm9yIGF0b21pYyBrZXJuZWwgbW9kZSBzZXR0aW5nLjwvcGFyYT4KKyAgICAgIDxwYXJhPk5PVEU6IGtnZGJvYyBpcyB3aGVyZSB0aGUga21zIGNhbGxiYWNrcyBhcmUgaW52b2tlZC48L3BhcmE+PC9saXN0aXRlbT4KICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgPC9wYXJhPgogICAgICAgPC9saXN0aXRlbT4KQEAgLTc0Nyw2ICs3ODEsOCBAQAogICA8L3NlY3QxPgogICA8c2VjdDEgaWQ9ImtnZGJvY0Rlc2lnbiI+CiAgIDx0aXRsZT5rZ2Rib2MgaW50ZXJuYWxzPC90aXRsZT4KKyAgPHNlY3QyPgorICA8dGl0bGU+a2dkYm9jIGFuZCB1YXJ0czwvdGl0bGU+CiAgIDxwYXJhPgogICBUaGUga2dkYm9jIGRyaXZlciBpcyBhY3R1YWxseSBhIHZlcnkgdGhpbiBkcml2ZXIgdGhhdCByZWxpZXMgb24gdGhlCiAgIHVuZGVybHlpbmcgbG93IGxldmVsIHRvIHRoZSBoYXJkd2FyZSBkcml2ZXIgaGF2aW5nICJwb2xsaW5nIGhvb2tzIgpAQCAtNzU0LDExICs3OTAsOCBAQAogICBpbXBsZW1lbnRhdGlvbiBvZiBrZ2Rib2MgaXQgdGhlIHNlcmlhbF9jb3JlIHdhcyBjaGFuZ2VkIHRvIGV4cG9zZSBhCiAgIGxvdyBsZXZlbCBVQVJUIGhvb2sgZm9yIGRvaW5nIHBvbGxlZCBtb2RlIHJlYWRpbmcgYW5kIHdyaXRpbmcgb2YgYQogICBzaW5nbGUgY2hhcmFjdGVyIHdoaWxlIGluIGFuIGF0b21pYyBjb250ZXh0LiAgV2hlbiBrZ2RiIG1ha2VzIGFuIEkvTwotICByZXF1ZXN0IHRvIHRoZSBkZWJ1Z2dlciwga2dkYm9jIGludm9rZXMgYSBjYWxsIGJhY2sgaW4gdGhlIHNlcmlhbAotICBjb3JlIHdoaWNoIGluIHR1cm4gdXNlcyB0aGUgY2FsbCBiYWNrIGluIHRoZSBVQVJUIGRyaXZlci4gIEl0IGlzCi0gIGNlcnRhaW5seSBwb3NzaWJsZSB0byBleHRlbmQga2dkYm9jIHRvIHdvcmsgd2l0aCBub24tVUFSVCBiYXNlZAotICBjb25zb2xlcyBpbiB0aGUgZnV0dXJlLgotICA8L3BhcmE+CisgIHJlcXVlc3QgdG8gdGhlIGRlYnVnZ2VyLCBrZ2Rib2MgaW52b2tlcyBhIGNhbGxiYWNrIGluIHRoZSBzZXJpYWwKKyAgY29yZSB3aGljaCBpbiB0dXJuIHVzZXMgdGhlIGNhbGxiYWNrIGluIHRoZSBVQVJUIGRyaXZlci48L3BhcmE+CiAgIDxwYXJhPgogICBXaGVuIHVzaW5nIGtnZGJvYyB3aXRoIGEgVUFSVCwgdGhlIFVBUlQgZHJpdmVyIG11c3QgaW1wbGVtZW50IHR3byBjYWxsYmFja3MgaW4gdGhlIDxjb25zdGFudD5zdHJ1Y3QgdWFydF9vcHM8L2NvbnN0YW50Pi4gRXhhbXBsZSBmcm9tIGRyaXZlcnMvODI1MC5jOjxwcm9ncmFtbGlzdGluZz4KICNpZmRlZiBDT05GSUdfQ09OU09MRV9QT0xMCkBAIC03NzIsOSArODA1LDY4IEBACiAgIHRoYXQgdGhleSBjYW4gYmUgY2FsbGVkIGZyb20gYW4gYXRvbWljIGNvbnRleHQgYW5kIGhhdmUgdG8gcmVzdG9yZQogICB0aGUgc3RhdGUgb2YgdGhlIFVBUlQgY2hpcCBvbiByZXR1cm4gc3VjaCB0aGF0IHRoZSBzeXN0ZW0gY2FuIHJldHVybgogICB0byBub3JtYWwgd2hlbiB0aGUgZGVidWdnZXIgZGV0YWNoZXMuICBZb3UgbmVlZCB0byBiZSB2ZXJ5IGNhcmVmdWwKLSAgd2l0aCBhbnkga2luZCBvZiBsb2NrIHlvdSBjb25zaWRlciwgYmVjYXVzZSBmYWlsaW5nIGhlcmUgaXMgbW9zdAorICB3aXRoIGFueSBraW5kIG9mIGxvY2sgeW91IGNvbnNpZGVyLCBiZWNhdXNlIGZhaWxpbmcgaGVyZSBpcyBtb3N0IGxpa2VseQogICBnb2luZyB0byBtZWFuIHByZXNzaW5nIHRoZSByZXNldCBidXR0b24uCiAgIDwvcGFyYT4KKyAgPC9zZWN0Mj4KKyAgPHNlY3QyIGlkPSJrZ2Rib2NLYmQiPgorICA8dGl0bGU+a2dkYm9jIGFuZCBrZXlib2FyZHM8L3RpdGxlPgorICA8cGFyYT5UaGUga2dkYm9jIGRyaXZlciBjb250YWlucyBsb2dpYyB0byBjb25maWd1cmUgY29tbXVuaWNhdGlvbnMKKyAgd2l0aCBhbiBhdHRhY2hlZCBrZXlib2FyZC4gIFRoZSBrZXlib2FyZCBpbmZyYXN0cnVjdHVyZSBpcyBvbmx5CisgIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCB3aGVuIENPTkZJR19LREJfS0VZQk9BUkQ9eSBpcyBzZXQgaW4gdGhlCisgIGtlcm5lbCBjb25maWd1cmF0aW9uLjwvcGFyYT4KKyAgPHBhcmE+VGhlIGNvcmUgcG9sbGVkIGtleWJvYXJkIGRyaXZlciBkcml2ZXIgZm9yIFBTLzIgdHlwZSBrZXlib2FyZHMKKyAgaXMgaW4gZHJpdmVycy9jaGFyL2tkYl9rZXlib2FyZC5jLiAgVGhpcyBkcml2ZXIgaXMgaG9va2VkIGludG8gdGhlCisgIGRlYnVnIGNvcmUgd2hlbiBrZ2Rib2MgcG9wdWxhdGVzIHRoZSBjYWxsYmFjayBpbiB0aGUgYXJyYXkKKyAgY2FsbGVkIDxjb25zdGFudD5rZGJfcG9sbF9mdW5jc1tdPC9jb25zdGFudD4uICBUaGUKKyAga2RiX2dldF9rYmRfY2hhcigpIGlzIHRoZSB0b3AtbGV2ZWwgZnVuY3Rpb24gd2hpY2ggcG9sbHMgaGFyZHdhcmUKKyAgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgaW5wdXQuCisgIDwvcGFyYT4KKyAgPC9zZWN0Mj4KKyAgPHNlY3QyIGlkPSJrZ2Rib2NLbXMiPgorICA8dGl0bGU+a2dkYm9jIGFuZCBrbXM8L3RpdGxlPgorICA8cGFyYT5UaGUga2dkYm9jIGRyaXZlciBjb250YWlucyBsb2dpYyB0byByZXF1ZXN0IHRoZSBncmFwaGljcworICBkaXNwbGF5IHRvIHN3aXRjaCB0byBhIHRleHQgY29udGV4dCB3aGVuIHlvdSBhcmUgdXNpbmcKKyAgImtnZGJvYz1rbXMsa2JkIiwgcHJvdmlkZWQgdGhhdCB5b3UgaGF2ZSBhIHZpZGVvIGRyaXZlciB3aGljaCBoYXMgYQorICBmcmFtZSBidWZmZXIgY29uc29sZSBhbmQgYXRvbWljIGtlcm5lbCBtb2RlIHNldHRpbmcgc3VwcG9ydC48L3BhcmE+CisgIDxwYXJhPgorICBFdmVyeSB0aW1lIHRoZSBrZXJuZWwKKyAgZGVidWdnZXIgaXMgZW50ZXJlZCBpdCBjYWxscyBrZ2Rib2NfcHJlX2V4cF9oYW5kbGVyKCkgd2hpY2ggaW4gdHVybgorICBjYWxscyBjb25fZGVidWdfZW50ZXIoKSBpbiB0aGUgdmlydHVhbCBjb25zb2xlIGxheWVyLiAgT24gcmVzdW1pbmcga2VybmVsCisgIGV4ZWN1dGlvbiwgdGhlIGtlcm5lbCBkZWJ1Z2dlciBjYWxscyBrZ2Rib2NfcG9zdF9leHBfaGFuZGxlcigpIHdoaWNoCisgIGluIHR1cm4gY2FsbHMgY29uX2RlYnVnX2xlYXZlKCkuPC9wYXJhPgorICA8cGFyYT5BbnkgdmlkZW8gZHJpdmVyIHRoYXQgd2FudHMgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBrZXJuZWwKKyAgZGVidWdnZXIgYW5kIHRoZSBhdG9taWMga21zIGNhbGxiYWNrcyBtdXN0IGltcGxlbWVudCB0aGUKKyAgbW9kZV9zZXRfYmFzZV9hdG9taWMsIGZiX2RlYnVnX2VudGVyIGFuZCBmYl9kZWJ1Z19sZWF2ZSBvcGVyYXRpb25zLgorICBGb3IgdGhlIGZiX2RlYnVnX2VudGVyIGFuZCBmYl9kZWJ1Z19sZWF2ZSB0aGUgb3B0aW9uIGV4aXN0cyB0byB1c2UKKyAgdGhlIGdlbmVyaWMgZHJtIGZiIGhlbHBlciBmdW5jdGlvbnMgb3IgaW1wbGVtZW50IHNvbWV0aGluZyBjdXN0b20gZm9yCisgIHRoZSBoYXJkd2FyZS4gIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlCisgIC5tb2RlX3NldF9iYXNlX2F0b21pYyBvcGVyYXRpb24gaW4KKyAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jOgorICA8aW5mb3JtYWxleGFtcGxlPgorICA8cHJvZ3JhbWxpc3Rpbmc+CitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBpbnRlbF9oZWxwZXJfZnVuY3MgPSB7CitbLi4uXQorICAgICAgICAubW9kZV9zZXRfYmFzZV9hdG9taWMgPSBpbnRlbF9waXBlX3NldF9iYXNlX2F0b21pYywKK1suLi5dCit9OworICA8L3Byb2dyYW1saXN0aW5nPgorICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgPC9wYXJhPgorICA8cGFyYT5IZXJlIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRoZSBpOTE1IGRyaXZlciBpbml0aWFsaXplcyB0aGUgZmJfZGVidWdfZW50ZXIgYW5kIGZiX2RlYnVnX2xlYXZlIGZ1bmN0aW9ucyB0byB1c2UgdGhlIGdlbmVyaWMgZHJtIGhlbHBlcnMgaW4KKyAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmIuYzoKKyAgPGluZm9ybWFsZXhhbXBsZT4KKyAgPHByb2dyYW1saXN0aW5nPgorc3RhdGljIHN0cnVjdCBmYl9vcHMgaW50ZWxmYl9vcHMgPSB7CitbLi4uXQorICAgICAgIC5mYl9kZWJ1Z19lbnRlciA9IGRybV9mYl9oZWxwZXJfZGVidWdfZW50ZXIsCisgICAgICAgLmZiX2RlYnVnX2xlYXZlID0gZHJtX2ZiX2hlbHBlcl9kZWJ1Z19sZWF2ZSwKK1suLi5dCit9OworICA8L3Byb2dyYW1saXN0aW5nPgorICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgPC9wYXJhPgorICA8L3NlY3QyPgogICA8L3NlY3QxPgogICA8L2NoYXB0ZXI+CiAgIDxjaGFwdGVyIGlkPSJjcmVkaXRzIj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS1lbnRpdGllcy50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhLWVudGl0aWVzLnRtcGwKaW5kZXggNWQ0ZDQwZjQuLjZhZTk3MTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS1lbnRpdGllcy50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS1lbnRpdGllcy50bXBsCkBAIC0yMTgsNiArMjE4LDcgQEAKIDwhRU5USVRZIHN1Yi1kZXYtdGVsZXRleHQgU1lTVEVNICJ2NGwvZGV2LXRlbGV0ZXh0LnhtbCI+CiA8IUVOVElUWSBzdWItZHJpdmVyIFNZU1RFTSAidjRsL2RyaXZlci54bWwiPgogPCFFTlRJVFkgc3ViLWxpYnY0bCBTWVNURU0gInY0bC9saWJ2NGwueG1sIj4KKzwhRU5USVRZIHN1Yi1saXJjX2RldmljZV9pbnRlcmZhY2UgU1lTVEVNICJ2NGwvbGlyY19kZXZpY2VfaW50ZXJmYWNlLnhtbCI+CiA8IUVOVElUWSBzdWItcmVtb3RlX2NvbnRyb2xsZXJzIFNZU1RFTSAidjRsL3JlbW90ZV9jb250cm9sbGVycy54bWwiPgogPCFFTlRJVFkgc3ViLWZkbC1hcHBlbmRpeCBTWVNURU0gInY0bC9mZGwtYXBwZW5kaXgueG1sIj4KIDwhRU5USVRZIHN1Yi1jbG9zZSBTWVNURU0gInY0bC9mdW5jLWNsb3NlLnhtbCI+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS50bXBsCmluZGV4IGVlYTU2NGIuLmYxMTA0OGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS50bXBsCkBAIC0yOCw3ICsyOCw3IEBACiA8dGl0bGU+TElOVVggTUVESUEgSU5GUkFTVFJVQ1RVUkUgQVBJPC90aXRsZT4KIAogPGNvcHlyaWdodD4KLQk8eWVhcj4yMDA5PC95ZWFyPgorCTx5ZWFyPjIwMDktMjAxMDwveWVhcj4KIAk8aG9sZGVyPkxpbnV4VFYgRGV2ZWxvcGVyczwvaG9sZGVyPgogPC9jb3B5cmlnaHQ+CiAKQEAgLTYxLDcgKzYxLDcgQEAKIAkJaW4gZmFjdCBpdCBjb3ZlcnMgc2V2ZXJhbCBkaWZmZXJlbnQgdmlkZW8gc3RhbmRhcmRzIGluY2x1ZGluZwogCQlEVkItVCwgRFZCLVMsIERWQi1DIGFuZCBBVFNDLiBUaGUgQVBJIGlzIGN1cnJlbnRseSBiZWluZyB1cGRhdGVkCiAJCXRvIGRvY3VtbWVudCBzdXBwb3J0IGFsc28gZm9yIERWQi1TMiwgSVNEQi1UIGFuZCBJU0RCLVMuPC9wYXJhPgotCTxwYXJhPlRoZSB0aGlyZCBwYXJ0IGNvdmVycyBvdGhlciBBUEkncyB1c2VkIGJ5IGFsbCBtZWRpYSBpbmZyYXN0cnVjdHVyZSBkZXZpY2VzPC9wYXJhPgorCTxwYXJhPlRoZSB0aGlyZCBwYXJ0IGNvdmVycyBSZW1vdGUgQ29udHJvbGxlciBBUEk8L3BhcmE+CiAJPHBhcmE+Rm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYW5kIGZvciB0aGUgbGF0ZXN0IGRldmVsb3BtZW50IGNvZGUsCiAJCXNlZTogPHVsaW5rIHVybD0iaHR0cDovL2xpbnV4dHYub3JnIj5odHRwOi8vbGludXh0di5vcmc8L3VsaW5rPi48L3BhcmE+CiAJPHBhcmE+Rm9yIGRpc2N1c3NpbmcgaW1wcm92ZW1lbnRzLCByZXBvcnRpbmcgdHJvdWJsZXMsIHNlbmRpbmcgbmV3IGRyaXZlcnMsIGV0YywgcGxlYXNlIG1haWwgdG86IDx1bGluayB1cmw9Imh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvdmdlci1saXN0cy5odG1sI2xpbnV4LW1lZGlhIj5MaW51eCBNZWRpYSBNYWlsaW5nIExpc3QgKExNTUwpLjwvdWxpbms+LjwvcGFyYT4KQEAgLTg2LDcgKzg2LDcgQEAKIDwvYXV0aG9yPgogPC9hdXRob3Jncm91cD4KIDxjb3B5cmlnaHQ+Ci0JPHllYXI+MjAwOTwveWVhcj4KKwk8eWVhcj4yMDA5LTIwMTA8L3llYXI+CiAJPGhvbGRlcj5NYXVybyBDYXJ2YWxobyBDaGVoYWI8L2hvbGRlcj4KIDwvY29weXJpZ2h0PgogCkBAIC0xMDEsNyArMTAxLDcgQEAKIDwvcmV2aGlzdG9yeT4KIDwvcGFydGluZm8+CiAKLTx0aXRsZT5PdGhlciBBUEkncyB1c2VkIGJ5IG1lZGlhIGluZnJhc3RydWN0dXJlIGRyaXZlcnM8L3RpdGxlPgorPHRpdGxlPlJlbW90ZSBDb250cm9sbGVyIEFQSTwvdGl0bGU+CiA8Y2hhcHRlciBpZD0icmVtb3RlX2NvbnRyb2xsZXJzIj4KICZzdWItcmVtb3RlX2NvbnRyb2xsZXJzOwogPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Njc2kudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9zY3NpLnRtcGwKaW5kZXggZDg3ZjQ1Ni4uMzI0YjUzNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Njc2kudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svc2NzaS50bXBsCkBAIC0zOTMsNyArMzkzLDcgQEAKICAgICAgICAgPC9wYXJhPgogICAgICAgICA8cGFyYT4KICAgICAgICAgICBGb3IgZG9jdW1lbnRhdGlvbiBzZWUKLSAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LnRvcnF1ZS5uZXQvc2cvc2RlYnVnMjYuaHRtbCc+aHR0cDovL3d3dy50b3JxdWUubmV0L3NnL3NkZWJ1ZzI2Lmh0bWw8L3VsaW5rPgorICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9zZy5kYW5ueS5jei9zZy9zZGVidWcyNi5odG1sJz5odHRwOi8vc2cuZGFubnkuY3ovc2cvc2RlYnVnMjYuaHRtbDwvdWxpbms+CiAgICAgICAgIDwvcGFyYT4KIDwhLS0gIUVkcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jIC0tPgogICAgICAgPC9zZWN0Mj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9zdHlsZXNoZWV0LnhzbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9zdHlsZXNoZWV0LnhzbAppbmRleCAyNTRjMWQ1Li44NWIyNTI3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svc3R5bGVzaGVldC54c2wKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3N0eWxlc2hlZXQueHNsCkBAIC02LDQgKzYsNSBAQAogPHBhcmFtIG5hbWU9ImNhbGxvdXQuZ3JhcGhpY3MiPjA8L3BhcmFtPgogPCEtLSA8cGFyYW0gbmFtZT0icGFwZXIudHlwZSI+QTQ8L3BhcmFtPiAtLT4KIDxwYXJhbSBuYW1lPSJnZW5lcmF0ZS5zZWN0aW9uLnRvYy5sZXZlbCI+MjwvcGFyYW0+Cis8cGFyYW0gbmFtZT0idXNlLmlkLmFzLmZpbGVuYW1lIj4xPC9wYXJhbT4KIDwvc3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY29tcGF0LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY29tcGF0LnhtbAppbmRleCBiNDJiOTM1Li41NDQ0N2YwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2NvbXBhdC54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9jb21wYXQueG1sCkBAIC0xMDkxLDggKzEwOTEsOSBAQAogdW50aWwgdGhlIHRpbWUgaW4gdGhlIHRpbWVzdGFtcCBmaWVsZCBoYXMgYXJyaXZlZC4gSSB3b3VsZCBsaWtlIHRvCiBmb2xsb3cgU0dJJ3MgbGVhZCwgYW5kIGFkb3B0IGEgbXVsdGltZWRpYSB0aW1lc3RhbXBpbmcgc3lzdGVtIGxpa2UKIHRoZWlyIFVTVCAoVW5hZGp1c3RlZCBTeXN0ZW0gVGltZSkuIFNlZQotaHR0cDovL3JlYWxpdHkuc2dpLmNvbS9jcGlyYXp6aV9lbmdyL2xnL3RpbWUvaW50cm8uaHRtbC4gW1RoaXMgbGluayBpcwotbm8gbG9uZ2VyIHZhbGlkLl0gVVNUIHVzZXMgdGltZXN0YW1wcyB0aGF0IGFyZSA2NC1iaXQgc2lnbmVkIGludGVnZXJzCitodHRwOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8qL2h0dHA6Ly9yZWFsaXR5LnNnaS5jb20KKy9jcGlyYXp6aV9lbmdyL2xnL3RpbWUvaW50cm8uaHRtbC4gCitVU1QgdXNlcyB0aW1lc3RhbXBzIHRoYXQgYXJlIDY0LWJpdCBzaWduZWQgaW50ZWdlcnMKIChub3Qgc3RydWN0IHRpbWV2YWwncykgYW5kIGdpdmVuIGluIG5hbm9zZWNvbmQgdW5pdHMuIFRoZSBVU1QgY2xvY2sKIHN0YXJ0cyBhdCB6ZXJvIHdoZW4gdGhlIHN5c3RlbSBpcyBib290ZWQgYW5kIHJ1bnMgY29udGludW91c2x5IGFuZAogdW5pZm9ybWx5LiBJdCB0YWtlcyBhIGxpdHRsZSBvdmVyIDI5MiB5ZWFycyBmb3IgVVNUIHRvIG92ZXJmbG93LiBUaGVyZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mZGwtYXBwZW5kaXgueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mZGwtYXBwZW5kaXgueG1sCmluZGV4IGI2Y2U1MGQuLmFlMjIzOTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZmRsLWFwcGVuZGl4LnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2ZkbC1hcHBlbmRpeC54bWwKQEAgLTIsNyArMiw3IEBACiAgICAgIFRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UgMS4xIGluIERvY0Jvb2sKICAgICAgTWFya3VwIGJ5IEVyaWMgQmF1ZGFpcyA8YmF1ZGFpc0Bva3N0YXRlLmVkdT4KICAgICAgTWFpbnRhaW5lZCBieSB0aGUgR05PTUUgRG9jdW1lbnRhdGlvbiBQcm9qZWN0Ci0gICAgIGh0dHA6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL3Byb2plY3RzL2dkcAorICAgICBodHRwOi8vbGl2ZS5nbm9tZS5vcmcvRG9jdW1lbnRhdGlvblByb2plY3QKICAgICAgVmVyc2lvbjogMS4wLjEKICAgICAgTGFzdCBNb2RpZmllZDogTm92IDE2LCAyMDAwCiAtLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvbGlyY19kZXZpY2VfaW50ZXJmYWNlLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvbGlyY19kZXZpY2VfaW50ZXJmYWNlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDEzMjM0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9saXJjX2RldmljZV9pbnRlcmZhY2UueG1sCkBAIC0wLDAgKzEsMjM1IEBACis8c2VjdGlvbiBpZD0ibGlyY19kZXYiPgorPHRpdGxlPkxJUkMgRGV2aWNlIEludGVyZmFjZTwvdGl0bGU+CisKKworPHNlY3Rpb24gaWQ9ImxpcmNfZGV2X2ludHJvIj4KKzx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorCis8cGFyYT5UaGUgTElSQyBkZXZpY2UgaW50ZXJmYWNlIGlzIGEgYmktZGlyZWN0aW9uYWwgaW50ZXJmYWNlIGZvcgordHJhbnNwb3J0aW5nIHJhdyBJUiBkYXRhIGJldHdlZW4gdXNlcnNwYWNlIGFuZCBrZXJuZWxzcGFjZS4gRnVuZGFtZW50YWxseSwKK2l0IGlzIGp1c3QgYSBjaGFyZGV2ICgvZGV2L2xpcmNYLCBmb3IgWCA9IDAsIDEsIDIsIC4uLiksIHdpdGggYSBudW1iZXIKK29mIHN0YW5kYXJkIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmaW5lZCBvbiBpdC4gV2l0aCByZXNwZWN0IHRvCit0cmFuc3BvcnRpbmcgcmF3IElSIGRhdGEgdG8gYW5kIGZybywgdGhlIGVzc2VudGlhbCBmb3BzIGFyZSByZWFkLCB3cml0ZQorYW5kIGlvY3RsLjwvcGFyYT4KKworPHBhcmE+RXhhbXBsZSBkbWVzZyBvdXRwdXQgdXBvbiBhIGRyaXZlciByZWdpc3RlcmluZyB3L0xJUkM6PC9wYXJhPgorICA8YmxvY2txdW90ZT4KKyAgICA8cGFyYT4kIGRtZXNnIHxncmVwIGxpcmNfZGV2PC9wYXJhPgorICAgIDxwYXJhPmxpcmNfZGV2OiBJUiBSZW1vdGUgQ29udHJvbCBkcml2ZXIgcmVnaXN0ZXJlZCwgbWFqb3IgMjQ4PC9wYXJhPgorICAgIDxwYXJhPnJjIHJjMDogbGlyY19kZXY6IGRyaXZlciBpci1saXJjLWNvZGVjIChtY2V1c2IpIHJlZ2lzdGVyZWQgYXQgbWlub3IgPSAwPC9wYXJhPgorICA8L2Jsb2NrcXVvdGU+CisKKzxwYXJhPldoYXQgeW91IHNob3VsZCBzZWUgZm9yIGEgY2hhcmRldjo8L3BhcmE+CisgIDxibG9ja3F1b3RlPgorICAgIDxwYXJhPiQgbHMgLWwgL2Rldi9saXJjKjwvcGFyYT4KKyAgICA8cGFyYT5jcnctcnctLS0tIDEgcm9vdCByb290IDI0OCwgMCBKdWwgIDIgMjI6MjAgL2Rldi9saXJjMDwvcGFyYT4KKyAgPC9ibG9ja3F1b3RlPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ibGlyY19yZWFkIj4KKzx0aXRsZT5MSVJDIHJlYWQgZm9wPC90aXRsZT4KKworPHBhcmE+VGhlIGxpcmNkIHVzZXJzcGFjZSBkYWVtb24gcmVhZHMgcmF3IElSIGRhdGEgZnJvbSB0aGUgTElSQyBjaGFyZGV2LiBUaGUKK2V4YWN0IGZvcm1hdCBvZiB0aGUgZGF0YSBkZXBlbmRzIG9uIHdoYXQgbW9kZXMgYSBkcml2ZXIgc3VwcG9ydHMsIGFuZCB3aGF0Cittb2RlIGhhcyBiZWVuIHNlbGVjdGVkLiBsaXJjZCBvYnRhaW5zIHN1cHBvcnRlZCBtb2RlcyBhbmQgc2V0cyB0aGUgYWN0aXZlIG1vZGUKK3ZpYSB0aGUgaW9jdGwgaW50ZXJmYWNlLCBkZXRhaWxlZCBhdCA8eHJlZiBsaW5rZW5kPSJsaXJjX2lvY3RsIi8+LiBUaGUgZ2VuZXJhbGx5CitwcmVmZXJyZWQgbW9kZSBpcyBMSVJDX01PREVfTU9ERTIsIGluIHdoaWNoIHBhY2tldHMgY29udGFpbmluZyBhbiBpbnQgdmFsdWUKK2Rlc2NyaWJpbmcgYW4gSVIgc2lnbmFsIGFyZSByZWFkIGZyb20gdGhlIGNoYXJkZXYuPC9wYXJhPgorCis8cGFyYT5TZWUgYWxzbyA8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmxpcmMub3JnL2h0bWwvdGVjaG5pY2FsLmh0bWwiPmh0dHA6Ly93d3cubGlyYy5vcmcvaHRtbC90ZWNobmljYWwuaHRtbDwvdWxpbms+IGZvciBtb3JlIGluZm8uPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ibGlyY193cml0ZSI+Cis8dGl0bGU+TElSQyB3cml0ZSBmb3A8L3RpdGxlPgorCis8cGFyYT5UaGUgZGF0YSB3cml0dGVuIHRvIHRoZSBjaGFyZGV2IGlzIGEgcHVsc2Uvc3BhY2Ugc2VxdWVuY2Ugb2YgaW50ZWdlcgordmFsdWVzLiBQdWxzZXMgYW5kIHNwYWNlcyBhcmUgb25seSBtYXJrZWQgaW1wbGljaXRseSBieSB0aGVpciBwb3NpdGlvbi4gVGhlCitkYXRhIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoIGEgcHVsc2UsIHRoZXJlZm9yZSwgdGhlIGRhdGEgbXVzdCBhbHdheXMgaW5jbHVkZQorYW4gdW5ldmVudCBudW1iZXIgb2Ygc2FtcGxlcy4gVGhlIHdyaXRlIGZ1bmN0aW9uIG11c3QgYmxvY2sgdW50aWwgdGhlIGRhdGEgaGFzCitiZWVuIHRyYW5zbWl0dGVkIGJ5IHRoZSBoYXJkd2FyZS48L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJsaXJjX2lvY3RsIj4KKzx0aXRsZT5MSVJDIGlvY3RsIGZvcDwvdGl0bGU+CisKKzxwYXJhPlRoZSBMSVJDIGRldmljZSdzIGlvY3RsIGRlZmluaXRpb24gaXMgYm91bmQgYnkgdGhlIGlvY3RsIGZ1bmN0aW9uCitkZWZpbml0aW9uIG9mIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMsIGxlYXZpbmcgdXMgd2l0aCBhbiB1bnNpZ25lZCBpbnQKK2ZvciB0aGUgaW9jdGwgY29tbWFuZCBhbmQgYW4gdW5zaWduZWQgbG9uZyBmb3IgdGhlIGFyZy4gRm9yIHRoZSBwdXJwb3Nlcworb2YgaW9jdGwgcG9ydGFiaWxpdHkgYWNyb3NzIDMyLWJpdCBhbmQgNjQtYml0LCB0aGVzZSB2YWx1ZXMgYXJlIGNhcHBlZAordG8gdGhlaXIgMzItYml0IHNpemVzLjwvcGFyYT4KKworPHBhcmE+VGhlIGZvbGxvd2luZyBpb2N0bHMgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHNwZWNpZmljIGhhcmR3YXJlIHNldHRpbmdzLgorSW4gZ2VuZXJhbCBlYWNoIGRyaXZlciBzaG91bGQgaGF2ZSBhIGRlZmF1bHQgc2V0IG9mIHNldHRpbmdzLiBUaGUgZHJpdmVyCitpbXBsZW1lbnRhdGlvbiBpcyBleHBlY3RlZCB0byByZS1hcHBseSB0aGUgZGVmYXVsdCBzZXR0aW5ncyB3aGVuIHRoZSBkZXZpY2UKK2lzIGNsb3NlZCBieSB1c2VyLXNwYWNlLCBzbyB0aGF0IGV2ZXJ5IGFwcGxpY2F0aW9uIG9wZW5pbmcgdGhlIGRldmljZSBjYW4gcmVseQorb24gd29ya2luZyB3aXRoIHRoZSBkZWZhdWx0IHNldHRpbmdzIGluaXRpYWxseS48L3BhcmE+CisKKzx2YXJpYWJsZWxpc3Q+CisgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+TElSQ19HRVRfRkVBVFVSRVM8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+T2J2aW91c2x5LCBnZXQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgZGV2aWNlJ3MgZmVhdHVyZXMuIElmIGEgZHJpdmVyCisgICAgICBkb2VzIG5vdCBhbm5vdW5jZSBzdXBwb3J0IG9mIGNlcnRhaW4gZmVhdHVyZXMsIGNhbGxpbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgIGlvY3RscyBpcyB1bmRlZmluZWQuPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgIDwvdmFybGlzdGVudHJ5PgorICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPkxJUkNfR0VUX1NFTkRfTU9ERTwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT5HZXQgc3VwcG9ydGVkIHRyYW5zbWl0IG1vZGUuIE9ubHkgTElSQ19NT0RFX1BVTFNFIGlzIHN1cHBvcnRlZCBieSBsaXJjZC48L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgPC92YXJsaXN0ZW50cnk+CisgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+TElSQ19HRVRfUkVDX01PREU8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+R2V0IHN1cHBvcnRlZCByZWNlaXZlIG1vZGVzLiBPbmx5IExJUkNfTU9ERV9NT0RFMiBhbmQgTElSQ19NT0RFX0xJUkNDT0RFCisgICAgICBhcmUgc3VwcG9ydGVkIGJ5IGxpcmNkLjwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICA8L3Zhcmxpc3RlbnRyeT4KKyAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT5MSVJDX0dFVF9TRU5EX0NBUlJJRVI8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+R2V0IGNhcnJpZXIgZnJlcXVlbmN5IChpbiBIeikgY3VycmVudGx5IHVzZWQgZm9yIHRyYW5zbWl0LjwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICA8L3Zhcmxpc3RlbnRyeT4KKyAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT5MSVJDX0dFVF9SRUNfQ0FSUklFUjwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT5HZXQgY2FycmllciBmcmVxdWVuY3kgKGluIEh6KSBjdXJyZW50bHkgdXNlZCBmb3IgSVIgcmVjZXB0aW9uLjwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICA8L3Zhcmxpc3RlbnRyeT4KKyAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT5MSVJDX3tHLFN9RVRfe1NFTkQsUkVDfV9EVVRZX0NZQ0xFPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPkdldC9zZXQgdGhlIGR1dHkgY3ljbGUgKGZyb20gMCB0byAxMDApIG9mIHRoZSBjYXJyaWVyIHNpZ25hbC4gQ3VycmVudGx5LAorICAgICAgbm8gc3BlY2lhbCBtZWFuaW5nIGlzIGRlZmluZWQgZm9yIDAgb3IgMTAwLCBidXQgdGhpcyBjb3VsZCBiZSB1c2VkIHRvIHN3aXRjaAorICAgICAgb2ZmIGNhcnJpZXIgZ2VuZXJhdGlvbiBpbiB0aGUgZnV0dXJlLCBzbyB0aGVzZSB2YWx1ZXMgc2hvdWxkIGJlIHJlc2VydmVkLjwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICA8L3Zhcmxpc3RlbnRyeT4KKyAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT5MSVJDX0dFVF9SRUNfUkVTT0xVVElPTjwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT5Tb21lIHJlY2VpdmVyIGhhdmUgbWF4aW11bSByZXNvbHV0aW9uIHdoaWNoIGlzIGRlZmluZWQgYnkgaW50ZXJuYWwKKyAgICAgIHNhbXBsZSByYXRlIG9yIGRhdGEgZm9ybWF0IGxpbWl0YXRpb25zLiBFLmcuIGl0J3MgY29tbW9uIHRoYXQgc2lnbmFscyBjYW4KKyAgICAgIG9ubHkgYmUgcmVwb3J0ZWQgaW4gNTAgbWljcm9zZWNvbmQgc3RlcHMuIFRoaXMgaW50ZWdlciB2YWx1ZSBpcyB1c2VkIGJ5CisgICAgICBsaXJjZCB0byBhdXRvbWF0aWNhbGx5IGFkanVzdCB0aGUgYWVwcyB0b2xlcmFuY2UgdmFsdWUgaW4gdGhlIGxpcmNkCisgICAgICBjb25maWcgZmlsZS48L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgPC92YXJsaXN0ZW50cnk+CisgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+TElSQ19HRVRfTXtJTixBWH1fVElNRU9VVDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT5Tb21lIGRldmljZXMgaGF2ZSBpbnRlcm5hbCB0aW1lcnMgdGhhdCBjYW4gYmUgdXNlZCB0byBkZXRlY3Qgd2hlbgorICAgICAgdGhlcmUncyBubyBJUiBhY3Rpdml0eSBmb3IgYSBsb25nIHRpbWUuIFRoaXMgY2FuIGhlbHAgbGlyY2QgaW4gZGV0ZWN0aW5nCisgICAgICB0aGF0IGEgSVIgc2lnbmFsIGlzIGZpbmlzaGVkIGFuZCBjYW4gc3BlZWQgdXAgdGhlIGRlY29kaW5nIHByb2Nlc3MuCisgICAgICBSZXR1cm5zIGFuIGludGVnZXIgdmFsdWUgd2l0aCB0aGUgbWluaW11bS9tYXhpbXVtIHRpbWVvdXQgdGhhdCBjYW4gYmUKKyAgICAgIHNldC4gU29tZSBkZXZpY2VzIGhhdmUgYSBmaXhlZCB0aW1lb3V0LCBpbiB0aGF0IGNhc2UgYm90aCBpb2N0bHMgd2lsbAorICAgICAgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIGV2ZW4gdGhvdWdoIHRoZSB0aW1lb3V0IGNhbm5vdCBiZSBjaGFuZ2VkLjwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICA8L3Zhcmxpc3RlbnRyeT4KKyAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT5MSVJDX0dFVF9Ne0lOLEFYfV9GSUxURVJfe1BVTFNFLFNQQUNFfTwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT5Tb21lIGRldmljZXMgYXJlIGFibGUgdG8gZmlsdGVyIG91dCBzcGlrZXMgaW4gdGhlIGluY29taW5nIHNpZ25hbAorICAgICAgdXNpbmcgZ2l2ZW4gZmlsdGVyIHJ1bGVzLiBUaGVzZSBpb2N0bHMgcmV0dXJuIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMKKyAgICAgIHRoYXQgZGVzY3JpYmUgdGhlIGJvdW5kcyBvZiB0aGUgcG9zc2libGUgZmlsdGVycy4gRmlsdGVyIHNldHRpbmdzIGRlcGVuZAorICAgICAgb24gdGhlIElSIHByb3RvY29scyB0aGF0IGFyZSBleHBlY3RlZC4gbGlyY2QgZGVyaXZlcyB0aGUgc2V0dGluZ3MgZnJvbQorICAgICAgYWxsIHByb3RvY29scyBkZWZpbml0aW9ucyBmb3VuZCBpbiBpdHMgY29uZmlnIGZpbGUuPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgIDwvdmFybGlzdGVudHJ5PgorICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPkxJUkNfR0VUX0xFTkdUSDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT5SZXRyaWV2ZXMgdGhlIGNvZGUgbGVuZ3RoIGluIGJpdHMgKG9ubHkgZm9yIExJUkNfTU9ERV9MSVJDQ09ERSkuCisgICAgICBSZWFkcyBvbiB0aGUgZGV2aWNlIG11c3QgYmUgZG9uZSBpbiBibG9ja3MgbWF0Y2hpbmcgdGhlIGJpdCBjb3VudC4KKyAgICAgIFRoZSBiaXQgY291bGQgc2hvdWxkIGJlIHJvdW5kZWQgdXAgc28gdGhhdCBpdCBtYXRjaGVzIGZ1bGwgYnl0ZXMuPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgIDwvdmFybGlzdGVudHJ5PgorICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPkxJUkNfU0VUX3tTRU5ELFJFQ31fTU9ERTwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT5TZXQgc2VuZC9yZWNlaXZlIG1vZGUuIExhcmdlbHkgb2Jzb2xldGUgZm9yIHNlbmQsIGFzIG9ubHkKKyAgICAgIExJUkNfTU9ERV9QVUxTRSBpcyBzdXBwb3J0ZWQuPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgIDwvdmFybGlzdGVudHJ5PgorICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPkxJUkNfU0VUX3tTRU5ELFJFQ31fQ0FSUklFUjwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT5TZXQgc2VuZC9yZWNlaXZlIGNhcnJpZXIgKGluIEh6KS48L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgPC92YXJsaXN0ZW50cnk+CisgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+TElSQ19TRVRfVFJBTlNNSVRURVJfTUFTSzwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT5UaGlzIGVuYWJsZXMgdGhlIGdpdmVuIHNldCBvZiB0cmFuc21pdHRlcnMuIFRoZSBmaXJzdCB0cmFuc21pdHRlcgorICAgICAgaXMgZW5jb2RlZCBieSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0LCBldGMuIFdoZW4gYW4gaW52YWxpZCBiaXQgbWFzaworICAgICAgaXMgZ2l2ZW4sIGkuZS4gYSBiaXQgaXMgc2V0LCBldmVuIHRob3VnaCB0aGUgZGV2aWNlIGRvZXMgbm90IGhhdmUgc28gbWFueQorICAgICAgdHJhbnNpdHRlcnMsIHRoZW4gdGhpcyBpb2N0bCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIHRyYW5zaXR0ZXJzCisgICAgICBhbmQgZG9lcyBub3RoaW5nIG90aGVyd2lzZS48L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgPC92YXJsaXN0ZW50cnk+CisgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+TElSQ19TRVRfUkVDX1RJTUVPVVQ8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+U2V0cyB0aGUgaW50ZWdlciB2YWx1ZSBmb3IgSVIgaW5hY3Rpdml0eSB0aW1lb3V0IChjZi4KKyAgICAgIExJUkNfR0VUX01JTl9USU1FT1VUIGFuZCBMSVJDX0dFVF9NQVhfVElNRU9VVCkuIEEgdmFsdWUgb2YgMCAoaWYKKyAgICAgIHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUpIGRpc2FibGVzIGFsbCBoYXJkd2FyZSB0aW1lb3V0cyBhbmQgZGF0YSBzaG91bGQKKyAgICAgIGJlIHJlcG9ydGVkIGFzIHNvb24gYXMgcG9zc2libGUuIElmIHRoZSBleGFjdCB2YWx1ZSBjYW5ub3QgYmUgc2V0LCB0aGVuCisgICAgICB0aGUgbmV4dCBwb3NzaWJsZSB2YWx1ZSBfZ3JlYXRlcl8gdGhhbiB0aGUgZ2l2ZW4gdmFsdWUgc2hvdWxkIGJlIHNldC48L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgPC92YXJsaXN0ZW50cnk+CisgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+TElSQ19TRVRfUkVDX1RJTUVPVVRfUkVQT1JUUzwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT5FbmFibGUgKDEpIG9yIGRpc2FibGUgKDApIHRpbWVvdXQgcmVwb3J0cyBpbiBMSVJDX01PREVfTU9ERTIuIEJ5CisgICAgICBkZWZhdWx0LCB0aW1lb3V0IHJlcG9ydHMgc2hvdWxkIGJlIHR1cm5lZCBvZmYuPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgIDwvdmFybGlzdGVudHJ5PgorICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPkxJUkNfU0VUX1JFQ19GSUxURVJfeyxQVUxTRSxTUEFDRX08L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+UHVsc2VzL3NwYWNlcyBzaG9ydGVyIHRoYW4gdGhpcyBhcmUgZmlsdGVyZWQgb3V0IGJ5IGhhcmR3YXJlLiBJZgorICAgICAgZmlsdGVycyBjYW5ub3QgYmUgc2V0IGluZGVwZW5kZW50bHkgZm9yIHB1bHNlL3NwYWNlLCB0aGUgY29ycmVzcG9uZGluZworICAgICAgaW9jdGxzIG11c3QgcmV0dXJuIGFuIGVycm9yIGFuZCBMSVJDX1NFVF9SRUNfRklMVEVSIHNoYWxsIGJlIHVzZWQgaW5zdGVhZC48L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgPC92YXJsaXN0ZW50cnk+CisgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+TElSQ19TRVRfTUVBU1VSRV9DQVJSSUVSX01PREU8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+RW5hYmxlICgxKS9kaXNhYmxlICgwKSBtZWFzdXJlIG1vZGUuIElmIGVuYWJsZWQsIGZyb20gdGhlIG5leHQga2V5CisgICAgICBwcmVzcyBvbiwgdGhlIGRyaXZlciB3aWxsIHNlbmQgTElSQ19NT0RFMl9GUkVRVUVOQ1kgcGFja2V0cy4gQnkgZGVmYXVsdAorICAgICAgdGhpcyBzaG91bGQgYmUgdHVybmVkIG9mZi48L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgPC92YXJsaXN0ZW50cnk+CisgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+TElSQ19TRVRfUkVDX3tEVVRZX0NZQ0xFLENBUlJJRVJ9X1JBTkdFPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPlRvIHNldCBhIHJhbmdlIHVzZSBMSVJDX1NFVF9SRUNfRFVUWV9DWUNMRV9SQU5HRS9MSVJDX1NFVF9SRUNfQ0FSUklFUl9SQU5HRQorICAgICAgd2l0aCB0aGUgbG93ZXIgYm91bmQgZmlyc3QgYW5kIGxhdGVyIExJUkNfU0VUX1JFQ19EVVRZX0NZQ0xFL0xJUkNfU0VUX1JFQ19DQVJSSUVSCisgICAgICB3aXRoIHRoZSB1cHBlciBib3VuZC48L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgPC92YXJsaXN0ZW50cnk+CisgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+TElSQ19OT1RJRllfREVDT0RFPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPlRoaXMgaW9jdGwgaXMgY2FsbGVkIGJ5IGxpcmNkIHdoZW5ldmVyIGEgc3VjY2Vzc2Z1bCBkZWNvZGluZyBvZiBhbgorICAgICAgaW5jb21pbmcgSVIgc2lnbmFsIGNvdWxkIGJlIGRvbmUuIFRoaXMgY2FuIGJlIHVzZWQgYnkgc3VwcG9ydGluZyBoYXJkd2FyZQorICAgICAgdG8gZ2l2ZSB2aXN1YWwgZmVlZGJhY2sgdG8gdGhlIHVzZXIgZS5nLiBieSBmbGFzaGluZyBhIExFRC48L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgPC92YXJsaXN0ZW50cnk+CisgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+TElSQ19TRVRVUF97U1RBUlQsRU5EfTwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT5TZXR0aW5nIG9mIHNldmVyYWwgZHJpdmVyIHBhcmFtZXRlcnMgY2FuIGJlIG9wdGltaXplZCBieSBlbmNhcHN1bGF0aW5nCisgICAgICB0aGUgYWNjb3JkaW5nIGlvY3RsIGNhbGxzIHdpdGggTElSQ19TRVRVUF9TVEFSVC9MSVJDX1NFVFVQX0VORC4gV2hlbiBhCisgICAgICBkcml2ZXIgcmVjZWl2ZXMgYSBMSVJDX1NFVFVQX1NUQVJUIGlvY3RsIGl0IGNhbiBjaG9vc2UgdG8gbm90IGNvbW1pdAorICAgICAgZnVydGhlciBzZXR0aW5nIGNoYW5nZXMgdG8gdGhlIGhhcmR3YXJlIHVudGlsIGEgTElSQ19TRVRVUF9FTkQgaXMgcmVjZWl2ZWQuCisgICAgICBCdXQgdGhpcyBpcyBvcGVuIHRvIHRoZSBkcml2ZXIgaW1wbGVtZW50YXRpb24gYW5kIGV2ZXJ5IGRyaXZlciBtdXN0IGFsc28KKyAgICAgIGhhbmRsZSBwYXJhbWV0ZXIgY2hhbmdlcyB3aGljaCBhcmUgbm90IGVuY2Fwc3VsYXRlZCBieSBMSVJDX1NFVFVQX1NUQVJUCisgICAgICBhbmQgTElSQ19TRVRVUF9FTkQuIERyaXZlcnMgY2FuIGFsc28gY2hvb3NlIHRvIGlnbm9yZSB0aGVzZSBpb2N0bHMuPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgIDwvdmFybGlzdGVudHJ5PgorPC92YXJpYWJsZWxpc3Q+CisKKzwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcmVtb3RlX2NvbnRyb2xsZXJzLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcmVtb3RlX2NvbnRyb2xsZXJzLnhtbAppbmRleCA3M2Y1ZWFiLi4zYzNiNjY3YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9yZW1vdGVfY29udHJvbGxlcnMueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcmVtb3RlX2NvbnRyb2xsZXJzLnhtbApAQCAtMTczLDMgKzE3Myw1IEBACiA8cGFyYT5UaGlzIHByb2dyYW0gZGVtb25zdHJhdGVzIGhvdyB0byByZXBsYWNlIHRoZSBrZXltYXAgdGFibGVzLjwvcGFyYT4KICZzdWIta2V5dGFibGUtYzsKIDwvc2VjdGlvbj4KKworJnN1Yi1saXJjX2RldmljZV9pbnRlcmZhY2U7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0hPV1RPIGIvRG9jdW1lbnRhdGlvbi9IT1dUTwppbmRleCA0MGFkYTkzLi4zNjViZGE5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0hPV1RPCisrKyBiL0RvY3VtZW50YXRpb24vSE9XVE8KQEAgLTE4Nyw3ICsxODcsNyBAQAogSWYgeW91IGRvIG5vdCBrbm93IHdoZXJlIHlvdSB3YW50IHRvIHN0YXJ0LCBidXQgeW91IHdhbnQgdG8gbG9vayBmb3IKIHNvbWUgdGFzayB0byBzdGFydCBkb2luZyB0byBqb2luIGludG8gdGhlIGtlcm5lbCBkZXZlbG9wbWVudCBjb21tdW5pdHksCiBnbyB0byB0aGUgTGludXggS2VybmVsIEphbml0b3IncyBwcm9qZWN0OgotCWh0dHA6Ly9qYW5pdG9yLmtlcm5lbG5ld2JpZXMub3JnLworCWh0dHA6Ly9rZXJuZWxuZXdiaWVzLm9yZy9LZXJuZWxKYW5pdG9ycwkKIEl0IGlzIGEgZ3JlYXQgcGxhY2UgdG8gc3RhcnQuICBJdCBkZXNjcmliZXMgYSBsaXN0IG9mIHJlbGF0aXZlbHkgc2ltcGxlCiBwcm9ibGVtcyB0aGF0IG5lZWQgdG8gYmUgY2xlYW5lZCB1cCBhbmQgZml4ZWQgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwKIHNvdXJjZSB0cmVlLiAgV29ya2luZyB3aXRoIHRoZSBkZXZlbG9wZXJzIGluIGNoYXJnZSBvZiB0aGlzIHByb2plY3QsIHlvdQpAQCAtMzE1LDcgKzMxNSw3IEBACiBpbnRlcmZhY2Ugd2hpY2ggc2hvd3MgcGF0Y2ggcG9zdGluZ3MsIGFueSBjb21tZW50cyBvbiBhIHBhdGNoIG9yCiByZXZpc2lvbnMgdG8gaXQsIGFuZCBtYWludGFpbmVycyBjYW4gbWFyayBwYXRjaGVzIGFzIHVuZGVyIHJldmlldywKIGFjY2VwdGVkLCBvciByZWplY3RlZC4gIE1vc3Qgb2YgdGhlc2UgcGF0Y2h3b3JrIHNpdGVzIGFyZSBsaXN0ZWQgYXQKLWh0dHA6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy8gb3IgaHR0cDovL3BhdGNod29yay5vemxhYnMub3JnLy4KK2h0dHA6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy8uCiAKIDIuNi54IC1uZXh0IGtlcm5lbCB0cmVlIGZvciBpbnRlZ3JhdGlvbiB0ZXN0cwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01OTUsNyArNTk1LDcgQEAKIAogLS0tLS0tLS0tLQogVGhhbmtzIHRvIFBhb2xvIENpYXJyb2NjaGkgd2hvIGFsbG93ZWQgdGhlICJEZXZlbG9wbWVudCBQcm9jZXNzIgotKGh0dHA6Ly9saW51eC50YXIuYnovYXJ0aWNsZXMvMi42LWRldmVsb3BtZW50X3Byb2Nlc3MpIHNlY3Rpb24KKyhodHRwOi8vbHduLm5ldC9BcnRpY2xlcy85NDM4Ni8pIHNlY3Rpb24KIHRvIGJlIGJhc2VkIG9uIHRleHQgaGUgaGFkIHdyaXR0ZW4sIGFuZCB0byBSYW5keSBEdW5sYXAgYW5kIEdlcnJpdAogSHVpemVuZ2EgZm9yIHNvbWUgb2YgdGhlIGxpc3Qgb2YgdGhpbmdzIHlvdSBzaG91bGQgYW5kIHNob3VsZCBub3Qgc2F5LgogQWxzbyB0aGFua3MgdG8gUGF0IE1vY2hlbCwgSGFubmEgTGluZGVyLCBSYW5keSBEdW5sYXAsIEtheSBTaWV2ZXJzLApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9QQ0kvcGNpLnR4dCBiL0RvY3VtZW50YXRpb24vUENJL3BjaS50eHQKaW5kZXggN2Y2ZGU2ZS4uNjE0OGQ0MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9QQ0kvcGNpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1BDSS9wY2kudHh0CkBAIC01ODEsNyArNTgxLDcgQEAKIDguIFZlbmRvciBhbmQgZGV2aWNlIGlkZW50aWZpY2F0aW9ucwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKLU9uZSBpcyBub3Qgbm90IHJlcXVpcmVkIHRvIGFkZCBuZXcgZGV2aWNlIGlkcyB0byBpbmNsdWRlL2xpbnV4L3BjaV9pZHMuaC4KK09uZSBpcyBub3QgcmVxdWlyZWQgdG8gYWRkIG5ldyBkZXZpY2UgaWRzIHRvIGluY2x1ZGUvbGludXgvcGNpX2lkcy5oLgogUGxlYXNlIGFkZCBQQ0lfVkVORE9SX0lEX3h4eCBmb3IgdmVuZG9ycyBhbmQgYSBoZXggY29uc3RhbnQgZm9yIGRldmljZSBpZHMuCiAKIFBDSV9WRU5ET1JfSURfeHh4IGNvbnN0YW50cyBhcmUgcmUtdXNlZC4gVGhlIGRldmljZSBpZHMgYXJlIGFyYml0cmFyeQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1UvUlRGUC50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS9SVEZQLnR4dAppbmRleCA1YWVhNDU5Li5jNDM0NjBkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS9SVEZQLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS9SVEZQLnR4dApAQCAtNjA2LDcgKzYwNiw3IEBACiAsWWVhcj0iMjAwNiIKICxwYWdlcz0idjIgMTIzLTEzOCIKICxub3RlPSJBdmFpbGFibGU6Ci1cdXJse2h0dHA6Ly93d3cubGludXhzeW1wb3NpdW0ub3JnLzIwMDYvdmlld19hYnN0cmFjdC5waHA/Y29udGVudF9rZXk9MTg0fQorXHVybHtodHRwOi8vd3d3LmxpbnV4c3ltcG9zaXVtLm9yZy8yMDA2L2luZGV4XzIwMDYucGhwfQogXHVybHtodHRwOi8vd3d3LnJkcm9wLmNvbS91c2Vycy9wYXVsbWNrL1JDVS9PTFNydFJDVS4yMDA2LjA4LjExYS5wZGZ9CiBbVmlld2VkIEphbnVhcnkgMSwgMjAwN10iCiAsYW5ub3RhdGlvbj0iCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdEcml2ZXJzIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nRHJpdmVycwppbmRleCA0OTQ3ZmQ4Li4zOGQyYWFiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdEcml2ZXJzCisrKyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ0RyaXZlcnMKQEAgLTE2MSw3ICsxNjEsNyBAQAogCWh0dHA6Ly93d3cuZmVucnVzLm9yZy9ob3ctdG8tbm90LXdyaXRlLWEtZGV2aWNlLWRyaXZlci1wYXBlci5wZGYKIAogS2VybmVsIEphbml0b3I6Ci0JaHR0cDovL2phbml0b3Iua2VybmVsbmV3Ymllcy5vcmcvCisJaHR0cDovL2tlcm5lbG5ld2JpZXMub3JnL0tlcm5lbEphbml0b3JzCiAKIEdJVCwgRmFzdCBWZXJzaW9uIENvbnRyb2wgU3lzdGVtOgogCWh0dHA6Ly9naXQtc2NtLmNvbS8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYW9lL2FvZS50eHQgYi9Eb2N1bWVudGF0aW9uL2FvZS9hb2UudHh0CmluZGV4IDNhNGRiZTQuLmI1YWFkYTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYW9lL2FvZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9hb2UvYW9lLnR4dApAQCAtMSw2ICsxLDYgQEAKIFRoZSBFdGhlckRyaXZlIChSKSBIT1dUTyBmb3IgdXNlcnMgb2YgMi42IGtlcm5lbHMgaXMgZm91bmQgYXQgLi4uCiAKLSAgaHR0cDovL3d3dy5jb3JhaWQuY29tL3N1cHBvcnQvbGludXgvRXRoZXJEcml2ZS0yLjYtSE9XVE8uaHRtbAorICBodHRwOi8vd3d3LmNvcmFpZC5jb20vU1VQUE9SVC9FdGhlckRyaXZlLUhCQSAgCiAKICAgSXQgaGFzIG1hbnkgdGlwcyBhbmQgaGludHMhCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXBwYXJtb3IudHh0IGIvRG9jdW1lbnRhdGlvbi9hcHBhcm1vci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNjMWZkNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXBwYXJtb3IudHh0CkBAIC0wLDAgKzEsMzkgQEAKKy0tLSBXaGF0IGlzIEFwcEFybW9yPyAtLS0KKworQXBwQXJtb3IgaXMgTUFDIHN0eWxlIHNlY3VyaXR5IGV4dGVuc2lvbiBmb3IgdGhlIExpbnV4IGtlcm5lbC4gIEl0IGltcGxlbWVudHMKK2EgdGFzayBjZW50ZXJlZCBwb2xpY3ksIHdpdGggdGFzayAicHJvZmlsZXMiIGJlaW5nIGNyZWF0ZWQgYW5kIGxvYWRlZAorZnJvbSB1c2VyIHNwYWNlLiAgVGFza3Mgb24gdGhlIHN5c3RlbSB0aGF0IGRvIG5vdCBoYXZlIGEgcHJvZmlsZSBkZWZpbmVkIGZvcgordGhlbSBydW4gaW4gYW4gdW5jb25maW5lZCBzdGF0ZSB3aGljaCBpcyBlcXVpdmFsZW50IHRvIHN0YW5kYXJkIExpbnV4IERBQworcGVybWlzc2lvbnMuCisKKy0tLSBIb3cgdG8gZW5hYmxlL2Rpc2FibGUgLS0tCisKK3NldCBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1I9eQorCitJZiBBcHBBcm1vciBzaG91bGQgYmUgc2VsZWN0ZWQgYXMgdGhlIGRlZmF1bHQgc2VjdXJpdHkgbW9kdWxlIHRoZW4KKyAgIHNldCBDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iYXBwYXJtb3IiCisgICBhbmQgQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0JPT1RQQVJBTV9WQUxVRT0xCisKK0J1aWxkIHRoZSBrZXJuZWwKKworSWYgQXBwQXJtb3IgaXMgbm90IHRoZSBkZWZhdWx0IHNlY3VyaXR5IG1vZHVsZSBpdCBjYW4gYmUgZW5hYmxlZCBieSBwYXNzaW5nCitzZWN1cml0eT1hcHBhcm1vciBvbiB0aGUga2VybmVsJ3MgY29tbWFuZCBsaW5lLgorCitJZiBBcHBBcm1vciBpcyB0aGUgZGVmYXVsdCBzZWN1cml0eSBtb2R1bGUgaXQgY2FuIGJlIGRpc2FibGVkIGJ5IHBhc3NpbmcKK2FwcGFybW9yPTAsIHNlY3VyaXR5PVhYWFggKHdoZXJlIFhYWCBpcyB2YWxpZCBzZWN1cml0eSBtb2R1bGUpLCBvbiB0aGUKK2tlcm5lbCdzIGNvbW1hbmQgbGluZQorCitGb3IgQXBwQXJtb3IgdG8gZW5mb3JjZSBhbnkgcmVzdHJpY3Rpb25zIGJleW9uZCBzdGFuZGFyZCBMaW51eCBEQUMgcGVybWlzc2lvbnMKK3BvbGljeSBtdXN0IGJlIGxvYWRlZCBpbnRvIHRoZSBrZXJuZWwgZnJvbSB1c2VyIHNwYWNlIChzZWUgdGhlIERvY3VtZW50YXRpb24KK2FuZCB0b29scyBsaW5rcykuCisKKy0tLSBEb2N1bWVudGF0aW9uIC0tLQorCitEb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBvbiB0aGUgd2lraS4KKworLS0tIExpbmtzIC0tLQorCitNYWlsaW5nIExpc3QgLSBhcHBhcm1vckBsaXN0cy51YnVudHUuY29tCitXaWtpIC0gaHR0cDovL2FwcGFybW9yLndpa2kua2VybmVsLm9yZy8KK1VzZXIgc3BhY2UgdG9vbHMgLSBodHRwczovL2xhdW5jaHBhZC5uZXQvYXBwYXJtb3IKK0tlcm5lbCBtb2R1bGUgLSBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvamovYXBwYXJtb3ItZGV2LmdpdApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vSVhQMjAwMCBiL0RvY3VtZW50YXRpb24vYXJtL0lYUDIwMDAKaW5kZXggZTAxNDhiNi4uNjhkMjFkOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hcm0vSVhQMjAwMAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9JWFAyMDAwCkBAIC0xNCw3ICsxNCw3IEBACiBpbnRlcmZhY2VzIChVVE9QSUEsIFNQSSwgZXRjKSwgYSBQQ0kgaG9zdCBicmlkZ2UsIG9uZSBzZXJpYWwgcG9ydCwKIGZsYXNoIGludGVyZmFjZSwgYW5kIHNvbWUgb3RoZXIgb2RkcyBhbmQgZW5kcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZToKIAotaHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20vZGVzaWduL25ldHdvcmsvcHJvZHVjdHMvbnBmYW1pbHkvaXhwMnh4eC5odG0KK2h0dHA6Ly9kZXZlbG9wZXIuaW50ZWwuY29tCiAKIDIuIExpbnV4IFN1cHBvcnQKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vSVhQNHh4IGIvRG9jdW1lbnRhdGlvbi9hcm0vSVhQNHh4CmluZGV4IDcyZmJjYzQuLjEzM2M1ZmEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYXJtL0lYUDR4eAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9JWFA0eHgKQEAgLTQ1LDcgKzQ1LDcgQEAKIElmIHlvdSBuZWVkIHRvIHVzZSBhbnkgb2YgdGhlIGFib3ZlLCB5b3UgbmVlZCB0byBkb3dubG9hZCBJbnRlbCdzCiBzb2Z0d2FyZSBmcm9tOgogCi0gICBodHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS9kZXNpZ24vbmV0d29yay9wcm9kdWN0cy9ucGZhbWlseS9peHA0MjVzd3IxLmh0bQorICAgaHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20vZGVzaWduL25ldHdvcmsvcHJvZHVjdHMvbnBmYW1pbHkvaXhwNDI1Lmh0bSAgICAKIAogRE8gTk9UIFBPU1QgUVVFU1RJT05TIFRPIFRIRSBMSU5VWCBNQUlMSU5HIExJU1RTIFJFR0FSRElORyBUSEUgUFJPUElFVEFSWQogU09GVFdBUkUuCkBAIC01Myw3ICs1Myw3IEBACiBUaGVyZSBhcmUgc2V2ZXJhbCB3ZWJzaXRlcyB0aGF0IHByb3ZpZGUgZGlyZWN0aW9ucy9wb2ludGVycyBvbiB1c2luZwogSW50ZWwncyBzb2Z0d2FyZToKIAotaHR0cDovL2l4cDR4eC1vc2RnLnNvdXJjZWZvcmdlLm5ldC8gCisgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2l4cDR4eC1vc2RnLwogICAgT3BlbiBTb3VyY2UgRGV2ZWxvcGVyJ3MgR3VpZGUgZm9yIHVzaW5nIHVDbGludXggYW5kIHRoZSBJbnRlbCBsaWJyYXJpZXMgCiAKIGh0dHA6Ly9nYXRld2F5bWFrZXIuc291cmNlZm9yZ2UubmV0LyAKQEAgLTExMiwyMSArMTEyLDIxIEBACiAgICBGaW5hbGx5LCB0aGVyZSBpcyBhbiBJREUgcG9ydCBoYW5naW5nIG9mZiB0aGUgZXhwYW5zaW9uIGJ1cy4KIAogR2F0ZXdvcmtzIEF2aWxhIE5ldHdvcmsgUGxhdGZvcm0KLWh0dHA6Ly93d3cuZ2F0ZXdvcmtzLmNvbS9hdmlsYV9zYmMuaHRtCitodHRwOi8vd3d3LmdhdGV3b3Jrcy5jb20vc3VwcG9ydC9vdmVydmlldy5waHAKIAogICAgVGhlIEF2aWxhIHBsYXRmb3JtIGlzIGJhc2ljYWxseSBhbmQgSVhEUDQyNSB3aXRoIHRoZSA0IFBDSSBzbG90cwogICAgcmVwbGFjZWQgd2l0aCBtaW5pLVBDSSBzbG90cyBhbmQgYSBDRiBJREUgaW50ZXJmYWNlIGhhbmdpbmcgb2ZmCiAgICB0aGUgZXhwYW5zaW9uIGJ1cy4KIAogSW50ZWwgSVhEUDQyNSBEZXZlbG9wbWVudCBQbGF0Zm9ybQotaHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20vZGVzaWduL25ldHdvcmsvcHJvZHVjdHMvbnBmYW1pbHkvaXhkcDQyNS5odG0KK2h0dHA6Ly93d3cuaW50ZWwuY29tL2Rlc2lnbi9uZXR3b3JrL3Byb2R1Y3RzL25wZmFtaWx5L2l4ZHBnNDI1Lmh0bSAgCiAKICAgIFRoaXMgaXMgSW50ZWwncyBzdGFuZGFyZCByZWZlcmVuY2UgcGxhdGZvcm0gZm9yIHRoZSBJWERQNDI1IGFuZCBpcyAKICAgIGFsc28ga25vd24gYXMgdGhlIFJpY2hmaWVsZCBib2FyZC4gSXQgY29udGFpbnMgNCBQQ0kgc2xvdHMsIDE2TUIKICAgIG9mIGZsYXNoLCB0d28gMTAvMTAwIHBvcnRzIGFuZCBvbmUgQURTTCBwb3J0LgogCiBJbnRlbCBJWERQNDY1IERldmVsb3BtZW50IFBsYXRmb3JtCi1odHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS9kZXNpZ24vbmV0d29yay9wcm9kdWN0cy9ucGZhbWlseS9peGRwNDY1Lmh0bQoraHR0cDovL3d3dy5pbnRlbC5jb20vZGVzaWduL25ldHdvcmsvcHJvZHVjdHMvbnBmYW1pbHkvaXhkcDQ2NS5odG0KIAogICAgVGhpcyBpcyBiYXNpY2FsbHkgYW4gSVhEUDQyNSB3aXRoIGFuIElYUDQ2NSBhbmQgMzJNIG9mIGZsYXNoIGluc3RlYWQKICAgIG9mIGp1c3QgMTYuCkBAIC0xNDEsMTUgKzE0MSwxMyBAQAogICAgYSBwaXZvdF9yb290IHRvIE5GUy4KIAogTW90b3JvbGEgUHJQTUMxMTAwIFByb2Nlc3NvciBNZXphbmluZSBDYXJkCi1odHRwOi8vd3d3LmZvdW50YWluc3lzLmNvbS9kYXRhc2hlZXQvUHJQTUMxMTAwLnBkZgoraHR0cDovL3d3dy5mb3VudGFpbnN5cy5jb20KIAogICAgVGhlIFByUE1DMTEwMCBpcyBiYXNlZCBvbiB0aGUgSVhDUDExMDAgYW5kIGlzIG1lYW50IHRvIHBsdWcgaW50bwogICAgYW5kIElYUDI0MDAvMjgwMCBzeXN0ZW0gdG8gYWN0IGFzIHRoZSBzeXN0ZW0gY29udHJvbGxlci4gSXQgc2ltcGx5CiAgICBjb250YWlucyBhIENQVSBhbmQgMTZNQiBvZiBmbGFzaCBvbiB0aGUgYm9hcmQgYW5kIG5lZWRzIHRvIGJlCiAgICBwbHVnZ2VkIGludG8gYSBjYXJyaWVyIGJvYXJkIHRvIGZ1bmN0aW9uLiBDdXJyZW50bHkgTGludXggb25seQogICAgc3VwcG9ydHMgdGhlIE1vdG9yb2xhIFByUE1DIGNhcnJpZXIgYm9hcmQgZm9yIHRoaXMgcGxhdGZvcm0uCi0gICBTZWUgaHR0cHM6Ly9tY2cubW90b3JvbGEuY29tL3VzL2RzL3BkZi9kczAxNDQucGRmIGZvciBpbmZvCi0gICBvbiB0aGUgY2FycmllciBib2FyZC4KIAogNS4gVE9ETyBMSVNUCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1JFQURNRSBiL0RvY3VtZW50YXRpb24vYXJtL1JFQURNRQppbmRleCBkOTg3ODNmLi5hZWEzNDA5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FybS9SRUFETUUKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vUkVBRE1FCkBAIC00MSwxMiArNDEsMTIgQEAKIC0tLS0tLS0tLS0tLS0tLQogCiAgIFBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gdGhlIHBhdGNoIHN5c3RlbS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUKLSAgaHR0cDovL3d3dy5hcm0ubGludXgub3JnLnVrL3BhdGNoZXMvaW5mby5odG1sICBBbHdheXMgaW5jbHVkZSBzb21lCisgIGh0dHA6Ly93d3cuYXJtLmxpbnV4Lm9yZy51ay9kZXZlbG9wZXIvcGF0Y2hlcy9pbmZvLnBocCBBbHdheXMgaW5jbHVkZSBzb21lCiAgIGV4cGxhbmF0aW9uIGFzIHRvIHdoYXQgdGhlIHBhdGNoIGRvZXMgYW5kIHdoeSBpdCBpcyBuZWVkZWQuCiAKICAgQnVnIHJlcG9ydHMgc2hvdWxkIGJlIHNlbnQgdG8gbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrLAogICBvciBzdWJtaXR0ZWQgdGhyb3VnaCB0aGUgd2ViIGZvcm0gYXQKLSAgaHR0cDovL3d3dy5hcm0ubGludXgub3JnLnVrL2Zvcm1zL3NvbHV0aW9uLnNodG1sCisgIGh0dHA6Ly93d3cuYXJtLmxpbnV4Lm9yZy51ay9kZXZlbG9wZXIvIAogCiAgIFdoZW4gc2VuZGluZyBidWcgcmVwb3J0cywgcGxlYXNlIGVuc3VyZSB0aGF0IHRoZXkgY29udGFpbiBhbGwgcmVsZXZhbnQKICAgaW5mb3JtYXRpb24sIGVnLiB0aGUga2VybmVsIG1lc3NhZ2VzIHRoYXQgd2VyZSBwcmludGVkIGJlZm9yZS9kdXJpbmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9Bc3NhYmV0IGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0Fzc2FiZXQKaW5kZXggOTFmN2NlNy4uMDhiODg1ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0Fzc2FiZXQKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0Fzc2FiZXQKQEAgLTIsOCArMiw3IEBACiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBQbGVhc2Ugc2VlOgotaHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20vZGVzaWduL3N0cm9uZy9xdWlja2xpc3QvZXZhbC1wbGF0L3NhLTExMTAuaHRtCi1odHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS9kZXNpZ24vc3Ryb25nL2d1aWRlcy8yNzgyNzguaHRtCitodHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbQogCiBBbHNvIHNvbWUgbm90ZXMgZnJvbSBKb2huIEcgRG9yc2V5IDxqZDVxQGFuZHJldy5jbXUuZWR1PjoKIGh0dHA6Ly93d3cuY3MuY211LmVkdS9+d2VhcmFibGUvc29mdHdhcmUvYXNzYWJldC5odG1sCkBAIC02NCw3ICs2Myw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGUgY29tbWFuZHMgdXNlZCBoZXJlIGFyZSBleHBsYWluZWQgaW4gVGhlIFJlZEJvb3QgVXNlcidzIEd1aWRlIGF2YWlsYWJsZQotb24tbGluZSBhdCBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2Vjb3MvZG9jcy1sYXRlc3QvcmVkYm9vdC9yZWRib290Lmh0bWwuCitvbi1saW5lIGF0IGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vZWNvcy9kb2NzLmh0bWwuCiBQbGVhc2UgcmVmZXIgdG8gaXQgZm9yIGV4cGxhbmF0aW9ucy4KIAogSWYgeW91IGhhdmUgYSBDRiBuZXR3b3JrIGNhcmQgKG15IEFzc2FiZXQga2l0IGNvbnRhaW5lZCBhIENGKyBMUC1FIGZyb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9CcnV0dXMgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvQnJ1dHVzCmluZGV4IGIxY2ZkNDAuLjZhM2FhOTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9CcnV0dXMKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0JydXR1cwpAQCAtMSw3ICsxLDcgQEAKIEJydXR1cyBpcyBhbiBldmFsdWF0aW9uIHBsYXRmb3JtIGZvciB0aGUgU0ExMTAwIG1hbnVmYWN0dXJlZCBieSBJbnRlbC4gIAogRm9yIG1vcmUgZGV0YWlscywgc2VlOgogCi1odHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS9kZXNpZ24vc3Ryb25nL2FwcGxub3RzL3NhMTEwMGx4L2dldHN0YXJ0Lmh0bQoraHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20KIAogVG8gY29tcGlsZSBmb3IgQnJ1dHVzLCB5b3UgbXVzdCBpc3N1ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvRnJlZUJpcmQgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvRnJlZUJpcmQKaW5kZXggZWRhMjhiMy4uZmIyM2I3NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0ZyZWVCaXJkCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9GcmVlQmlyZApAQCAtMSw1ICsxLDUgQEAKIEZyZWViaXJkLTEuMSBpcyBwcm9kdWNlZCBieSBMZWduZWQoQykgLEluYy4KLShodHRwOi8vd3d3LmxlZ2VuZC5jb20uY24pCitodHRwOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8qL2h0dHA6Ly93d3cubGVnZW5kLmNvbS5jbgogYW5kIHNvZnR3YXJlL2xpbnV4IG1haW5hdGluZWQgYnkgQ292ZW50aXZlKEMpLEluYy4KIChodHRwOi8vd3d3LmNvdmVudGl2ZS5jb20pCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9HcmFwaGljc0NsaWVudCBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9HcmFwaGljc0NsaWVudAppbmRleCA2YzljNGY1Li44NjdiYjM1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvR3JhcGhpY3NDbGllbnQKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0dyYXBoaWNzQ2xpZW50CkBAIC03MSw3ICs3MSw3IEBACiAtIHNlcmlhbCBwb3J0cyAodHR5U1swLTJdKQogICAtIHR0eVMwIGlzIGRlZmF1bHQgZm9yIHNlcmlhbCBjb25zb2xlCiAtIFNtYXJ0IEkvTyAoQURDLCBrZXlwYWQsIGRpZ2l0YWwgaW5wdXRzLCBldGMpCi0gIFNlZSBodHRwOi8vd3d3LmFwcGxpZWRkYXRhLmNvbS9kZXZlbG9wZXJzL2xpbnV4IGZvciBJT0NUTCBkb2N1bWVudGF0aW9uCisgIFNlZSBodHRwOi8vd3d3LmV1cm90ZWNoLWluYy5jb20vbGludXgtc2JjLmFzcCBmb3IgSU9DVEwgZG9jdW1lbnRhdGlvbgogICBhbmQgZXhhbXBsZSB1c2VyIHNwYWNlIGNvZGUuIHBzLzIga2V5YmQgaXMgbXVsdGlwbGV4ZWQgdGhyb3VnaCB0aGlzIGRyaXZlcgogCiBUbyBkbzoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9HcmFwaGljc01hc3RlciBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9HcmFwaGljc01hc3RlcgppbmRleCBlZTdjNjU5Li45MTQ1MDg4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvR3JhcGhpY3NNYXN0ZXIKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0dyYXBoaWNzTWFzdGVyCkBAIC0yOCw3ICsyOCw3IEBACiAtIHNlcmlhbCBwb3J0cyAodHR5U1swLTJdKQogICAtIHR0eVMwIGlzIGRlZmF1bHQgZm9yIHNlcmlhbCBjb25zb2xlCiAtIFNtYXJ0IEkvTyAoQURDLCBrZXlwYWQsIGRpZ2l0YWwgaW5wdXRzLCBldGMpCi0gIFNlZSBodHRwOi8vd3d3LmFwcGxpZWRkYXRhLmNvbS9kZXZlbG9wZXJzL2xpbnV4IGZvciBJT0NUTCBkb2N1bWVudGF0aW9uCisgIFNlZSBodHRwOi8vd3d3LmV1cm90ZWNoLWluYy5jb20vbGludXgtc2JjLmFzcCBmb3IgSU9DVEwgZG9jdW1lbnRhdGlvbgogICBhbmQgZXhhbXBsZSB1c2VyIHNwYWNlIGNvZGUuIHBzLzIga2V5YmQgaXMgbXVsdGlwbGV4ZWQgdGhyb3VnaCB0aGlzIGRyaXZlcgogCiBUbyBkbzoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9JdHN5IGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0l0c3kKaW5kZXggM2I1OTQ1My4uNDRiOTQ5OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0l0c3kKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0l0c3kKQEAgLTQsNyArNCw3IEBACiAKIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWU6CiAKLQlodHRwOi8vd3d3LnJlc2VhcmNoLmRpZ2l0YWwuY29tL3dybC9pdHN5L2luZGV4Lmh0bWwKKwlodHRwOi8vd3d3LmhwbC5ocC5jb20vZG93bmxvYWRzL2NybC9pdHN5LwogCiBOb3RlcyBvbiBpbml0aWFsIDIuNCBJdHN5IHN1cHBvcnQgKDgvMjcvMjAwMCkgOgogVGhlIHBvcnQgd2FzIGRvbmUgb24gYW4gSXRzeSB2ZXJzaW9uIDEuNSBtYWNoaW5lIHdpdGggYSBkYXVnaHRlcmNhcmQgd2l0aApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL1BMRUIgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvUExFQgppbmRleCA5MmNhZTA2Ni4uYjljOGE2MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL1BMRUIKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL1BMRUIKQEAgLTYsNiArNiw2IEBACiAKIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWU6CiAKLQlodHRwOi8vd3d3LmNzZS51bnN3LmVkdS5hdS9+cGxlYi8KKwlodHRwOi8vd3d3LmNzZS51bnN3LmVkdS5hdQogCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9WaWN0b3IgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvVmljdG9yCmluZGV4IGY5MzhhMjkuLjljZmY0MTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9WaWN0b3IKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL1ZpY3RvcgpAQCAtMyw3ICszLDcgQEAKIAogRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBWaWN0b3IsIHNlZToKIAotCWh0dHA6Ly93d3cudmlzdWFpZGUuY29tL3ZpY3RvcgorCWh0dHA6Ly93d3cuaHVtYW53YXJlLmNvbS9lbi11c2EvcHJvZHVjdHMKIAogT2YgY291cnNlIFZpY3RvciBpcyB1c2luZyBMaW51eCBhcyBpdHMgbWFpbiBvcGVyYXRpbmcgc3lzdGVtLgogVGhlIFZpY3RvciBpbXBsZW1lbnRhdGlvbiBmb3IgTGludXggaXMgbWFpbnRhaW5lZCBieSBOaWNvbGFzIFBpdHJlOgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL25hbm9FbmdpbmUgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvbmFub0VuZ2luZQppbmRleCBmYzQzMWNiLi40OGE3OTM0ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL25hbm9FbmdpbmUKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL25hbm9FbmdpbmUKQEAgLTcsNSArNyw1IEBACiAoUmVmOiBTdHVhcnQgQWRhbXMgPHNqYUBicmlnaHRzdGFyZW5nLmNvbT4pCiAKIEFsc28gdmlzaXQgTGFycnkgRG9vbGl0dGxlJ3MgIkxpbnV4IGZvciB0aGUgbmFub0VuZ2luZSIgc2l0ZToKLWh0dHA6Ly9yZWN5Y2xlLmxibC5nb3Yvfmxkb29saXR0L2JzZS8KK2h0dHA6Ly93d3cuYnJpZ2h0c3RhcmVuZy5jb20vYXJtL25hbm9lbmcuaHRtCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL21lbW9yeS50eHQgYi9Eb2N1bWVudGF0aW9uL2FybS9tZW1vcnkudHh0CmluZGV4IGViMGZhZTEuLjc3MWQ0OGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYXJtL21lbW9yeS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vbWVtb3J5LnR4dApAQCAtMzMsNyArMzMsMTMgQEAKIAogZmZmZTAwMDAJZmZmZWZmZmYJWFNjYWxlIGNhY2hlIGZsdXNoIGFyZWEuICBUaGlzIGlzIHVzZWQKIAkJCQlpbiBwcm9jLXhzY2FsZS5TIHRvIGZsdXNoIHRoZSB3aG9sZSBkYXRhCi0JCQkJY2FjaGUuICBGcmVlIGZvciBvdGhlciB1c2FnZSBvbiBub24tWFNjYWxlLgorCQkJCWNhY2hlLiAoWFNjYWxlIGRvZXMgbm90IGhhdmUgVENNLikKKworZmZmZTgwMDAJZmZmZWZmZmYJRFRDTSBtYXBwaW5nIGFyZWEgZm9yIHBsYXRmb3JtcyB3aXRoCisJCQkJRFRDTSBtb3VudGVkIGluc2lkZSB0aGUgQ1BVLgorCitmZmZlMDAwMAlmZmZlN2ZmZglJVENNIG1hcHBpbmcgYXJlYSBmb3IgcGxhdGZvcm1zIHdpdGgKKwkJCQlJVENNIG1vdW50ZWQgaW5zaWRlIHRoZSBDUFUuCiAKIGZmZjAwMDAwCWZmZmRmZmZmCUZpeG1hcCBtYXBwaW5nIHJlZ2lvbi4gIEFkZHJlc3NlcyBwcm92aWRlZAogCQkJCWJ5IGZpeF90b192aXJ0KCkgd2lsbCBiZSBsb2NhdGVkIGhlcmUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS90Y20udHh0IGIvRG9jdW1lbnRhdGlvbi9hcm0vdGNtLnR4dAppbmRleCA3N2ZkOTM3Li43YzE1ODcxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FybS90Y20udHh0CisrKyBiL0RvY3VtZW50YXRpb24vYXJtL3RjbS50eHQKQEAgLTE5LDggKzE5LDggQEAKIHN5c3RlbSBjb250cm9sIGNvcHJvY2Vzc29yLiBEb2N1bWVudGF0aW9uIGZyb20gQVJNIGNhbiBiZSBmb3VuZAogYXQgaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbSwgc2VhcmNoIGZvciAiVENNIFN0YXR1cyBSZWdpc3RlciIKIHRvIHNlZSBkb2N1bWVudHMgZm9yIGFsbCBDUFVzLiBSZWFkaW5nIHRoaXMgcmVnaXN0ZXIgeW91IGNhbgotZGV0ZXJtaW5lIGlmIElUQ00gKGJpdCAwKSBhbmQvb3IgRFRDTSAoYml0IDE2KSBpcyBwcmVzZW50IGluIHRoZQotbWFjaGluZS4KK2RldGVybWluZSBpZiBJVENNIChiaXRzIDEtMCkgYW5kL29yIERUQ00gKGJpdCAxNy0xNikgaXMgcHJlc2VudAoraW4gdGhlIG1hY2hpbmUuCiAKIFRoZXJlIGlzIGZ1cnRoZXIgYSBUQ00gcmVnaW9uIHJlZ2lzdGVyIChzZWFyY2ggZm9yICJUQ00gUmVnaW9uCiBSZWdpc3RlcnMiIGF0IHRoZSBBUk0gc2l0ZSkgdGhhdCBjYW4gcmVwb3J0IGFuZCBtb2RpZnkgdGhlIGxvY2F0aW9uCkBAIC0zNSw3ICszNSwxNSBAQAogdGhlIE1NVSwgYnV0IG5vdGljZSB0aGF0IHRoZSBUQ00gaWYgb2Z0ZW4gdXNlZCBpbiBzaXR1YXRpb25zIHdoZXJlCiB0aGUgTU1VIGlzIHR1cm5lZCBvZmYuIFRvIGF2b2lkIGNvbmZ1c2lvbiB0aGUgY3VycmVudCBMaW51eAogaW1wbGVtZW50YXRpb24gd2lsbCBtYXAgdGhlIFRDTSAxIHRvIDEgZnJvbSBwaHlzaWNhbCB0byB2aXJ0dWFsCi1tZW1vcnkgaW4gdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBieSB0aGUgbWFjaGluZS4KK21lbW9yeSBpbiB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGJ5IHRoZSBrZXJuZWwuIEN1cnJlbnRseSBMaW51eAord2lsbCBtYXAgSVRDTSB0byAweGZmZmUwMDAwIGFuZCBvbiwgYW5kIERUQ00gdG8gMHhmZmZlODAwMCBhbmQKK29uLCBzdXBwb3J0aW5nIGEgbWF4aW11bSBvZiAzMktpQiBvZiBJVENNIGFuZCAzMktpQiBvZiBEVENNLgorCitOZXdlciB2ZXJzaW9ucyBvZiB0aGUgcmVnaW9uIHJlZ2lzdGVycyBhbHNvIHN1cHBvcnQgZGl2aWRpbmcgdGhlc2UKK1RDTXMgaW4gdHdvIHNlcGFyYXRlIGJhbmtzLCBzbyBmb3IgZXhhbXBsZSBhbiA4S2lCIElUQ00gaXMgZGl2aWRlZAoraW50byB0d28gNEtpQiBiYW5rcyB3aXRoIGl0cyBvd24gY29udHJvbCByZWdpc3RlcnMuIFRoZSBpZGVhIGlzIHRvCitiZSBhYmxlIHRvIGxvY2sgYW5kIGhpZGUgb25lIG9mIHRoZSBiYW5rcyBmb3IgdXNlIGJ5IHRoZSBzZWN1cmUKK3dvcmxkIChUcnVzdFpvbmUpLgogCiBUQ00gaXMgdXNlZCBmb3IgYSBmZXcgdGhpbmdzOgogCkBAIC02NSwxOCArNzMsMTggQEAKICAgbWVtb3J5LiBTdWNoIGEgaGVhcCBpcyBncmVhdCBmb3IgdGhpbmdzIGxpa2Ugc2F2aW5nCiAgIGRldmljZSBzdGF0ZSB3aGVuIHNodXR0aW5nIG9mZiBkZXZpY2UgcG93ZXIgZG9tYWlucy4KIAotQSBtYWNoaW5lIHRoYXQgaGFzIFRDTSBtZW1vcnkgc2hhbGwgc2VsZWN0IEhBVkVfVENNIGluCi1hcmNoL2FybS9LY29uZmlnIGZvciBpdHNlbGYsIGFuZCB0aGVuIHRoZQotcmVzdCBvZiB0aGUgZnVuY3Rpb25hbGl0eSB3aWxsIGRlcGVuZCBvbiB0aGUgcGh5c2ljYWwKLWxvY2F0aW9uIGFuZCBzaXplIG9mIElUQ00gYW5kIERUQ00gdG8gYmUgZGVmaW5lZCBpbgotbWFjaC9tZW1vcnkuaCBmb3IgdGhlIG1hY2hpbmUuIENvZGUgdGhhdCBuZWVkcyB0byB1c2UKLVRDTSBzaGFsbCAjaW5jbHVkZSA8YXNtL3RjbS5oPiBJZiB0aGUgVENNIGlzIG5vdCBsb2NhdGVkCi1hdCB0aGUgcGxhY2UgZ2l2ZW4gaW4gbWVtb3J5LmggaXQgd2lsbCBiZSBtb3ZlZCB1c2luZwotdGhlIFRDTSBSZWdpb24gcmVnaXN0ZXJzLgorQSBtYWNoaW5lIHRoYXQgaGFzIFRDTSBtZW1vcnkgc2hhbGwgc2VsZWN0IEhBVkVfVENNIGZyb20KK2FyY2gvYXJtL0tjb25maWcgZm9yIGl0c2VsZi4gQ29kZSB0aGF0IG5lZWRzIHRvIHVzZSBUQ00gc2hhbGwKKyNpbmNsdWRlIDxhc20vdGNtLmg+CiAKIEZ1bmN0aW9ucyB0byBnbyBpbnRvIGl0Y20gY2FuIGJlIHRhZ2dlZCBsaWtlIHRoaXM6CiBpbnQgX190Y21mdW5jIGZvbyhpbnQgYmFyKTsKIAorU2luY2UgdGhlc2UgYXJlIG1hcmtlZCB0byBiZWNvbWUgbG9uZ19jYWxscyBhbmQgeW91IG1heSB3YW50Cit0byBoYXZlIGZ1bmN0aW9ucyBjYWxsZWQgbG9jYWxseSBpbnNpZGUgdGhlIFRDTSB3aXRob3V0Cit3YXN0aW5nIHNwYWNlLCB0aGVyZSBpcyBhbHNvIHRoZSBfX3RjbWxvY2FsZnVuYyBwcmVmaXggdGhhdAord2lsbCBtYWtlIHRoZSBjYWxsIHJlbGF0aXZlLgorCiBWYXJpYWJsZXMgdG8gZ28gaW50byBkdGNtIGNhbiBiZSB0YWdnZWQgbGlrZSB0aGlzOgogaW50IF9fdGNtZGF0YSBmb287CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYmluZm10X21pc2MudHh0IGIvRG9jdW1lbnRhdGlvbi9iaW5mbXRfbWlzYy50eHQKaW5kZXggZjYwOWViZi4uYzFlZDY5NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9iaW5mbXRfbWlzYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9iaW5mbXRfbWlzYy50eHQKQEAgLTExMSw2ICsxMTEsNiBAQAogCiAKIFRoZXJlIGlzIGEgd2ViIHBhZ2UgYWJvdXQgYmluZm10X21pc2MgYXQKLWh0dHA6Ly93d3cudGF0LnBoeXNpay51bmktdHVlYmluZ2VuLmRlL35yZ3VlbnRoL2xpbnV4L2JpbmZtdF9taXNjLmh0bWwKK2h0dHA6Ly93d3cudGF0LnBoeXNpay51bmktdHVlYmluZ2VuLmRlCiAKIFJpY2hhcmQgR8O8bnRoZXIgPHJndWVudGhAdGF0LnBoeXNpay51bmktdHVlYmluZ2VuLmRlPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW9kb2MudHh0IGIvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW9kb2MudHh0CmluZGV4IDUwOGI1YjIuLmI5YTgzZGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYmxvY2svYmlvZG9jLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb2RvYy50eHQKQEAgLTcsNyArNyw3IEBACiAKIExhc3QgVXBkYXRlZCBNYXkgMiwgMjAwMgogU2VwdGVtYmVyIDIwMDM6IFVwZGF0ZWQgSS9PIFNjaGVkdWxlciBwb3J0aW9ucwotCU5pY2sgUGlnZ2luIDxwaWdnaW5AY3liZXJvbmUuY29tLmF1PgorCU5pY2sgUGlnZ2luIDxucGlnZ2luQGtlcm5lbC5kaz4KIAogSW50cm9kdWN0aW9uOgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Jsb2NrZGV2L3BhcmlkZS50eHQgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrZGV2L3BhcmlkZS50eHQKaW5kZXggZTQzMTI2Ny4uZWU2NzE3ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ibG9ja2Rldi9wYXJpZGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vYmxvY2tkZXYvcGFyaWRlLnR4dApAQCAtNDEyLDYgKzQxMiw2IEBACiBZb3UgbWlnaHQgYWxzbyBmaW5kIHNvbWUgdXNlZnVsIGluZm9ybWF0aW9uIG9uIHRoZSBsaW51eC1wYXJwb3J0CiB3ZWIgcGFnZXMgKGFsdGhvdWdoIHRoZXkgYXJlIG5vdCBhbHdheXMgdXAgdG8gZGF0ZSkgYXQKIAotCWh0dHA6Ly93d3cudG9ycXVlLm5ldC9wYXJwb3J0LworCWh0dHA6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLyovaHR0cDovL3d3dy50b3JxdWUubmV0L3BhcnBvcnQvCiAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9JTy1tYXBwaW5nLnR4dCBiL0RvY3VtZW50YXRpb24vYnVzLXZpcnQtcGh5cy1tYXBwaW5nLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9JTy1tYXBwaW5nLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9idXMtdmlydC1waHlzLW1hcHBpbmcudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nkcm9tL3BhY2tldC13cml0aW5nLnR4dCBiL0RvY3VtZW50YXRpb24vY2Ryb20vcGFja2V0LXdyaXRpbmcudHh0CmluZGV4IDFjNDA3NzcuLjEzYzI1MWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY2Ryb20vcGFja2V0LXdyaXRpbmcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY2Ryb20vcGFja2V0LXdyaXRpbmcudHh0CkBAIC05NSw3ICs5NSw3IEBACiAKIFNpbmNlIExpbnV4IDIuNi4yMCwgdGhlIHBrdGNkdmQgbW9kdWxlIGhhcyBhIHN5c2ZzIGludGVyZmFjZQogYW5kIGNhbiBiZSBjb250cm9sbGVkIGJ5IGl0LiBGb3IgZXhhbXBsZSB0aGUgInBrdGNkdmQiIHRvb2wgdXNlcwotdGhpcyBpbnRlcmZhY2UuIChzZWUgaHR0cDovL3Blb3BsZS5mcmVlbmV0LmRlL0JhbGFHaSNwa3RjZHZkICkKK3RoaXMgaW50ZXJmYWNlLiAoc2VlIGh0dHA6Ly90b20uaXN0LWltLXdlYi5kZS9kb3dubG9hZC9wa3RjZHZkICkKIAogInBrdGNkdmQiIHdvcmtzIHNpbWlsYXIgdG8gInBrdHNldHVwIiwgZS5nLjoKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2NwdXNldHMudHh0IGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2NwdXNldHMudHh0CmluZGV4IDUxNjgyYWIuLjVkMGQ1NjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jcHVzZXRzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY3B1c2V0cy50eHQKQEAgLTY5MSw3ICs2OTEsNyBAQAogICAgY2F0LCBybWRpciBjb21tYW5kcyBmcm9tIHRoZSBzaGVsbCwgb3IgdGhlaXIgZXF1aXZhbGVudCBmcm9tIEMuCiAgLSB2aWEgdGhlIEMgbGlicmFyeSBsaWJjcHVzZXQuCiAgLSB2aWEgdGhlIEMgbGlicmFyeSBsaWJjZ3JvdXAuCi0gICAoaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9lY3RzL2xpYmNnLykKKyAgIChodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYmNnLykKICAtIHZpYSB0aGUgcHl0aG9uIGFwcGxpY2F0aW9uIGNzZXQuCiAgICAoaHR0cDovL2RldmVsb3Blci5ub3ZlbGwuY29tL3dpa2kvaW5kZXgucGhwL0NwdXNldCkKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb2NjaW5lbGxlLnR4dCBiL0RvY3VtZW50YXRpb24vY29jY2luZWxsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QyYjAyOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29jY2luZWxsZS50eHQKQEAgLTAsMCArMSwyNTggQEAKK0NvcHlyaWdodCAyMDEwIE5pY29sYXMgUGFsaXggPG5wYWxpeEBkaWt1LmRrPgorQ29weXJpZ2h0IDIwMTAgSnVsaWEgTGF3YWxsIDxqdWxpYUBkaWt1LmRrPgorQ29weXJpZ2h0IDIwMTAgR2lsbGVzIE11bGxlciA8R2lsbGVzLk11bGxlckBsaXA2LmZyPgorCisKKyBHZXR0aW5nIENvY2NpbmVsbGUKK35+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBzZW1hbnRpYyBwYXRjaGVzIGluY2x1ZGVkIGluIHRoZSBrZXJuZWwgdXNlIHRoZSAndmlydHVhbCBydWxlJworZmVhdHVyZSB3aGljaCB3YXMgaW50cm9kdWNlZCBpbiBDb2NjaW5lbGxlIHZlcnNpb24gMC4xLjExLgorCitDb2NjaW5lbGxlICg+PTAuMi4wKSBpcyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgcGFja2FnZSBtYW5hZ2VyCitvZiBtYW55IGRpc3RyaWJ1dGlvbnMsIGUuZy4gOgorCisgLSBEZWJpYW4gKD49c3F1ZWV6ZSkKKyAtIEZlZG9yYSAoPj0xMykKKyAtIFVidW50dSAoPj0xMC4wNCBMdWNpZCBMeW54KQorIC0gT3BlblNVU0UKKyAtIEFyY2ggTGludXgKKyAtIE5ldEJTRAorIC0gRnJlZUJTRAorCisKK1lvdSBjYW4gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiByZWxlYXNlZCBmcm9tIHRoZSBDb2NjaW5lbGxlIGhvbWVwYWdlIGF0CitodHRwOi8vY29jY2luZWxsZS5saXA2LmZyLworCitPbmNlIHlvdSBoYXZlIGl0LCBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCisgICAgIAkuL2NvbmZpZ3VyZQorICAgICAgICBtYWtlCisKK2FzIGEgcmVndWxhciB1c2VyLCBhbmQgaW5zdGFsbCBpdCB3aXRoCisKKyAgICAgICAgc3VkbyBtYWtlIGluc3RhbGwKKworCisgVXNpbmcgQ29jY2luZWxsZSBvbiB0aGUgTGludXgga2VybmVsCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitBIENvY2NpbmVsbGUtc3BlY2lmaWMgdGFyZ2V0IGlzIGRlZmluZWQgaW4gdGhlIHRvcCBsZXZlbAorTWFrZWZpbGUuIFRoaXMgdGFyZ2V0IGlzIG5hbWVkICdjb2NjaWNoZWNrJyBhbmQgY2FsbHMgdGhlICdjb2NjaWNoZWNrJworZnJvbnQtZW5kIGluIHRoZSAnc2NyaXB0cycgZGlyZWN0b3J5LgorCitGb3VyIG1vZGVzIGFyZSBkZWZpbmVkOiByZXBvcnQsIHBhdGNoLCBjb250ZXh0LCBhbmQgb3JnLiBUaGUgbW9kZSB0bwordXNlIGlzIHNwZWNpZmllZCBieSBzZXR0aW5nIHRoZSBNT0RFIHZhcmlhYmxlIHdpdGggJ01PREU9PG1vZGU+Jy4KKworJ3JlcG9ydCcgZ2VuZXJhdGVzIGEgbGlzdCBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKyAgZmlsZTpsaW5lOmNvbHVtbi1jb2x1bW46IG1lc3NhZ2UKKworJ3BhdGNoJyBwcm9wb3NlcyBhIGZpeCwgd2hlbiBwb3NzaWJsZS4KKworJ2NvbnRleHQnIGhpZ2hsaWdodHMgbGluZXMgb2YgaW50ZXJlc3QgYW5kIHRoZWlyIGNvbnRleHQgaW4gYQorZGlmZi1saWtlIHN0eWxlLkxpbmVzIG9mIGludGVyZXN0IGFyZSBpbmRpY2F0ZWQgd2l0aCAnLScuCisKKydvcmcnIGdlbmVyYXRlcyBhIHJlcG9ydCBpbiB0aGUgT3JnIG1vZGUgZm9ybWF0IG9mIEVtYWNzLgorCitOb3RlIHRoYXQgbm90IGFsbCBzZW1hbnRpYyBwYXRjaGVzIGltcGxlbWVudCBhbGwgbW9kZXMuCisKK1RvIG1ha2UgYSByZXBvcnQgZm9yIGV2ZXJ5IHNlbWFudGljIHBhdGNoLCBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCisJbWFrZSBjb2NjaWNoZWNrIE1PREU9cmVwb3J0CisKK05COiBUaGUgJ3JlcG9ydCcgbW9kZSBpcyB0aGUgZGVmYXVsdCBvbmUuCisKK1RvIHByb2R1Y2UgcGF0Y2hlcywgcnVuOgorCisJbWFrZSBjb2NjaWNoZWNrIE1PREU9cGF0Y2gKKworCitUaGUgY29jY2ljaGVjayB0YXJnZXQgYXBwbGllcyBldmVyeSBzZW1hbnRpYyBwYXRjaCBhdmFpbGFibGUgaW4gdGhlCitzdWJkaXJlY3RvcmllcyBvZiAnc2NyaXB0cy9jb2NjaW5lbGxlJyB0byB0aGUgZW50aXJlIExpbnV4IGtlcm5lbC4KKworRm9yIGVhY2ggc2VtYW50aWMgcGF0Y2gsIGEgY2hhbmdlbG9nIG1lc3NhZ2UgaXMgcHJvcG9zZWQuICBJdCBnaXZlcyBhCitkZXNjcmlwdGlvbiBvZiB0aGUgcHJvYmxlbSBiZWluZyBjaGVja2VkIGJ5IHRoZSBzZW1hbnRpYyBwYXRjaCwgYW5kCitpbmNsdWRlcyBhIHJlZmVyZW5jZSB0byBDb2NjaW5lbGxlLgorCitBcyBhbnkgc3RhdGljIGNvZGUgYW5hbHl6ZXIsIENvY2NpbmVsbGUgcHJvZHVjZXMgZmFsc2UKK3Bvc2l0aXZlcy4gVGh1cywgcmVwb3J0cyBtdXN0IGJlIGNhcmVmdWxseSBjaGVja2VkLCBhbmQgcGF0Y2hlcworcmV2aWV3ZWQuCisKKworIFVzaW5nIENvY2NpbmVsbGUgd2l0aCBhIHNpbmdsZSBzZW1hbnRpYyBwYXRjaAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIG9wdGlvbmFsIG1ha2UgdmFyaWFibGUgQ09DQ0kgY2FuIGJlIHVzZWQgdG8gY2hlY2sgYSBzaW5nbGUKK3NlbWFudGljIHBhdGNoLiBJbiB0aGF0IGNhc2UsIHRoZSB2YXJpYWJsZSBtdXN0IGJlIGluaXRpYWxpemVkIHdpdGgKK3RoZSBuYW1lIG9mIHRoZSBzZW1hbnRpYyBwYXRjaCB0byBhcHBseS4KKworRm9yIGluc3RhbmNlOgorCisJbWFrZSBjb2NjaWNoZWNrIENPQ0NJPTxteV9TUC5jb2NjaT4gTU9ERT1wYXRjaAorb3IKKwltYWtlIGNvY2NpY2hlY2sgQ09DQ0k9PG15X1NQLmNvY2NpPiBNT0RFPXJlcG9ydAorCisKKyBQcm9wb3NpbmcgbmV3IHNlbWFudGljIHBhdGNoZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK05ldyBzZW1hbnRpYyBwYXRjaGVzIGNhbiBiZSBwcm9wb3NlZCBhbmQgc3VibWl0dGVkIGJ5IGtlcm5lbAorZGV2ZWxvcGVycy4gRm9yIHNha2Ugb2YgY2xhcml0eSwgdGhleSBzaG91bGQgYmUgb3JnYW5pemVkIGluIHRoZQorc3ViZGlyZWN0b3JpZXMgb2YgJ3NjcmlwdHMvY29jY2luZWxsZS8nLgorCisKKyBEZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgJ3JlcG9ydCcgbW9kZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisncmVwb3J0JyBnZW5lcmF0ZXMgYSBsaXN0IGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorICBmaWxlOmxpbmU6Y29sdW1uLWNvbHVtbjogbWVzc2FnZQorCitFeGFtcGxlOgorCitSdW5uaW5nCisKKwltYWtlIGNvY2NpY2hlY2sgTU9ERT1yZXBvcnQgQ09DQ0k9c2NyaXB0cy9jb2NjaW5lbGxlL2Vycl9jYXN0LmNvY2NpCisKK3dpbGwgZXhlY3V0ZSB0aGUgZm9sbG93aW5nIHBhcnQgb2YgdGhlIFNtUEwgc2NyaXB0LgorCis8c21wbD4KK0ByIGRlcGVuZHMgb24gIWNvbnRleHQgJiYgIXBhdGNoICYmIChvcmcgfHwgcmVwb3J0KUAKK2V4cHJlc3Npb24geDsKK3Bvc2l0aW9uIHA7CitAQAorCisgRVJSX1BUUkBwKFBUUl9FUlIoeCkpCisKK0BzY3JpcHQ6cHl0aG9uIGRlcGVuZHMgb24gcmVwb3J0QAorcCA8PCByLnA7Cit4IDw8IHIueDsKK0BACisKK21zZz0iRVJSX0NBU1QgY2FuIGJlIHVzZWQgd2l0aCAlcyIgJSAoeCkKK2NvY2NpbGliLnJlcG9ydC5wcmludF9yZXBvcnQocFswXSwgbXNnKQorPC9zbXBsPgorCitUaGlzIFNtUEwgZXhjZXJwdCBnZW5lcmF0ZXMgZW50cmllcyBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0LCBhcworaWxsdXN0cmF0ZWQgYmVsb3c6CisKKy9ob21lL3VzZXIvbGludXgvY3J5cHRvL2N0ci5jOjE4ODo5LTE2OiBFUlJfQ0FTVCBjYW4gYmUgdXNlZCB3aXRoIGFsZworL2hvbWUvdXNlci9saW51eC9jcnlwdG8vYXV0aGVuYy5jOjYxOTo5LTE2OiBFUlJfQ0FTVCBjYW4gYmUgdXNlZCB3aXRoIGF1dGgKKy9ob21lL3VzZXIvbGludXgvY3J5cHRvL3h0cy5jOjIyNzo5LTE2OiBFUlJfQ0FTVCBjYW4gYmUgdXNlZCB3aXRoIGFsZworCisKKyBEZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgJ3BhdGNoJyBtb2RlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1doZW4gdGhlICdwYXRjaCcgbW9kZSBpcyBhdmFpbGFibGUsIGl0IHByb3Bvc2VzIGEgZml4IGZvciBlYWNoIHByb2JsZW0KK2lkZW50aWZpZWQuCisKK0V4YW1wbGU6CisKK1J1bm5pbmcKKwltYWtlIGNvY2NpY2hlY2sgTU9ERT1wYXRjaCBDT0NDST1zY3JpcHRzL2NvY2NpbmVsbGUvZXJyX2Nhc3QuY29jY2kKKword2lsbCBleGVjdXRlIHRoZSBmb2xsb3dpbmcgcGFydCBvZiB0aGUgU21QTCBzY3JpcHQuCisKKzxzbXBsPgorQCBkZXBlbmRzIG9uICFjb250ZXh0ICYmIHBhdGNoICYmICFvcmcgJiYgIXJlcG9ydCBACitleHByZXNzaW9uIHg7CitAQAorCistIEVSUl9QVFIoUFRSX0VSUih4KSkKKysgRVJSX0NBU1QoeCkKKzwvc21wbD4KKworVGhpcyBTbVBMIGV4Y2VycHQgZ2VuZXJhdGVzIHBhdGNoIGh1bmtzIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQsIGFzCitpbGx1c3RyYXRlZCBiZWxvdzoKKworZGlmZiAtdSAtcCBhL2NyeXB0by9jdHIuYyBiL2NyeXB0by9jdHIuYworLS0tIGEvY3J5cHRvL2N0ci5jIDIwMTAtMDUtMjYgMTA6NDk6MzguMDAwMDAwMDAwICswMjAwCisrKysgYi9jcnlwdG8vY3RyLmMgMjAxMC0wNi0wMyAyMzo0NDo0OS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xODUsNyArMTg1LDcgQEAgc3RhdGljIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmNyeXB0b19jdAorIAlhbGcgPSBjcnlwdG9fYXR0cl9hbGcodGJbMV0sIENSWVBUT19BTEdfVFlQRV9DSVBIRVIsCisgCQkJCSAgQ1JZUFRPX0FMR19UWVBFX01BU0spOworIAlpZiAoSVNfRVJSKGFsZykpCistCQlyZXR1cm4gRVJSX1BUUihQVFJfRVJSKGFsZykpOworKwkJcmV0dXJuIEVSUl9DQVNUKGFsZyk7CisgCisgCS8qIEJsb2NrIHNpemUgbXVzdCBiZSA+PSA0IGJ5dGVzLiAqLworIAllcnIgPSAtRUlOVkFMOworCisgRGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlICdjb250ZXh0JyBtb2RlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKydjb250ZXh0JyBoaWdobGlnaHRzIGxpbmVzIG9mIGludGVyZXN0IGFuZCB0aGVpciBjb250ZXh0CitpbiBhIGRpZmYtbGlrZSBzdHlsZS4KKworTk9URTogVGhlIGRpZmYtbGlrZSBvdXRwdXQgZ2VuZXJhdGVkIGlzIE5PVCBhbiBhcHBsaWNhYmxlIHBhdGNoLiBUaGUKKyAgICAgIGludGVudCBvZiB0aGUgJ2NvbnRleHQnIG1vZGUgaXMgdG8gaGlnaGxpZ2h0IHRoZSBpbXBvcnRhbnQgbGluZXMKKyAgICAgIChhbm5vdGF0ZWQgd2l0aCBtaW51cywgJy0nKSBhbmQgZ2l2ZXMgc29tZSBzdXJyb3VuZGluZyBjb250ZXh0CisgICAgICBsaW5lcyBhcm91bmQuIFRoaXMgb3V0cHV0IGNhbiBiZSB1c2VkIHdpdGggdGhlIGRpZmYgbW9kZSBvZgorICAgICAgRW1hY3MgdG8gcmV2aWV3IHRoZSBjb2RlLgorCitFeGFtcGxlOgorCitSdW5uaW5nCisJbWFrZSBjb2NjaWNoZWNrIE1PREU9Y29udGV4dCBDT0NDST1zY3JpcHRzL2NvY2NpbmVsbGUvZXJyX2Nhc3QuY29jY2kKKword2lsbCBleGVjdXRlIHRoZSBmb2xsb3dpbmcgcGFydCBvZiB0aGUgU21QTCBzY3JpcHQuCisKKzxzbXBsPgorQCBkZXBlbmRzIG9uIGNvbnRleHQgJiYgIXBhdGNoICYmICFvcmcgJiYgIXJlcG9ydEAKK2V4cHJlc3Npb24geDsKK0BACisKKyogRVJSX1BUUihQVFJfRVJSKHgpKQorPC9zbXBsPgorCitUaGlzIFNtUEwgZXhjZXJwdCBnZW5lcmF0ZXMgZGlmZiBodW5rcyBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0LCBhcworaWxsdXN0cmF0ZWQgYmVsb3c6CisKK2RpZmYgLXUgLXAgL2hvbWUvdXNlci9saW51eC9jcnlwdG8vY3RyLmMgL3RtcC9ub3RoaW5nCistLS0gL2hvbWUvdXNlci9saW51eC9jcnlwdG8vY3RyLmMJMjAxMC0wNS0yNiAxMDo0OTozOC4wMDAwMDAwMDAgKzAyMDAKKysrKyAvdG1wL25vdGhpbmcKK0BAIC0xODUsNyArMTg1LDYgQEAgc3RhdGljIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmNyeXB0b19jdAorIAlhbGcgPSBjcnlwdG9fYXR0cl9hbGcodGJbMV0sIENSWVBUT19BTEdfVFlQRV9DSVBIRVIsCisgCQkJCSAgQ1JZUFRPX0FMR19UWVBFX01BU0spOworIAlpZiAoSVNfRVJSKGFsZykpCistCQlyZXR1cm4gRVJSX1BUUihQVFJfRVJSKGFsZykpOworIAorIAkvKiBCbG9jayBzaXplIG11c3QgYmUgPj0gNCBieXRlcy4gKi8KKyAJZXJyID0gLUVJTlZBTDsKKworIERldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSAnb3JnJyBtb2RlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKydvcmcnIGdlbmVyYXRlcyBhIHJlcG9ydCBpbiB0aGUgT3JnIG1vZGUgZm9ybWF0IG9mIEVtYWNzLgorCitFeGFtcGxlOgorCitSdW5uaW5nCisJbWFrZSBjb2NjaWNoZWNrIE1PREU9b3JnIENPQ0NJPXNjcmlwdHMvY29jY2luZWxsZS9lcnJfY2FzdC5jb2NjaQorCit3aWxsIGV4ZWN1dGUgdGhlIGZvbGxvd2luZyBwYXJ0IG9mIHRoZSBTbVBMIHNjcmlwdC4KKworPHNtcGw+CitAciBkZXBlbmRzIG9uICFjb250ZXh0ICYmICFwYXRjaCAmJiAob3JnIHx8IHJlcG9ydClACitleHByZXNzaW9uIHg7Citwb3NpdGlvbiBwOworQEAKKworIEVSUl9QVFJAcChQVFJfRVJSKHgpKQorCitAc2NyaXB0OnB5dGhvbiBkZXBlbmRzIG9uIG9yZ0AKK3AgPDwgci5wOworeCA8PCByLng7CitAQAorCittc2c9IkVSUl9DQVNUIGNhbiBiZSB1c2VkIHdpdGggJXMiICUgKHgpCittc2dfc2FmZT1tc2cucmVwbGFjZSgiWyIsIkAoIikucmVwbGFjZSgiXSIsIikiKQorY29jY2lsaWIub3JnLnByaW50X3RvZG8ocFswXSwgbXNnX3NhZmUpCis8L3NtcGw+CisKK1RoaXMgU21QTCBleGNlcnB0IGdlbmVyYXRlcyBPcmcgZW50cmllcyBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0LCBhcworaWxsdXN0cmF0ZWQgYmVsb3c6CisKKyogVE9ETyBbW3ZpZXc6L2hvbWUvdXNlci9saW51eC9jcnlwdG8vY3RyLmM6OmZhY2U9b3ZsLWZhY2UxOjpsaW5iPTE4ODo6Y29sYj05Ojpjb2xlPTE2XVtFUlJfQ0FTVCBjYW4gYmUgdXNlZCB3aXRoIGFsZ11dCisqIFRPRE8gW1t2aWV3Oi9ob21lL3VzZXIvbGludXgvY3J5cHRvL2F1dGhlbmMuYzo6ZmFjZT1vdmwtZmFjZTE6OmxpbmI9NjE5Ojpjb2xiPTk6OmNvbGU9MTZdW0VSUl9DQVNUIGNhbiBiZSB1c2VkIHdpdGggYXV0aF1dCisqIFRPRE8gW1t2aWV3Oi9ob21lL3VzZXIvbGludXgvY3J5cHRvL3h0cy5jOjpmYWNlPW92bC1mYWNlMTo6bGluYj0yMjc6OmNvbGI9OTo6Y29sZT0xNl1bRVJSX0NBU1QgY2FuIGJlIHVzZWQgd2l0aCBhbGddXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jcmVkZW50aWFscy50eHQgYi9Eb2N1bWVudGF0aW9uL2NyZWRlbnRpYWxzLnR4dAppbmRleCBhMmRiMzUyLi45OTViYWYzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NyZWRlbnRpYWxzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NyZWRlbnRpYWxzLnR4dApAQCAtNDE3LDYgKzQxNyw5IEBACiBUaGlzIGRvZXMgYWxsIHRoZSBSQ1UgbWFnaWMgaW5zaWRlIG9mIGl0LiAgVGhlIGNhbGxlciBtdXN0IGNhbGwgcHV0X2NyZWQoKSBvbgogdGhlIGNyZWRlbnRpYWxzIHNvIG9idGFpbmVkIHdoZW4gdGhleSdyZSBmaW5pc2hlZCB3aXRoLgogCisgWypdIE5vdGU6IFRoZSByZXN1bHQgb2YgX190YXNrX2NyZWQoKSBzaG91bGQgbm90IGJlIHBhc3NlZCBkaXJlY3RseSB0bworICAgICBnZXRfY3JlZCgpIGFzIHRoaXMgbWF5IHJhY2Ugd2l0aCBjb21taXRfY3JlZCgpLgorCiBUaGVyZSBhcmUgYSBjb3VwbGUgb2YgY29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIGFjY2VzcyBiaXRzIG9mIGFub3RoZXIgdGFzaydzCiBjcmVkZW50aWFscywgaGlkaW5nIHRoZSBSQ1UgbWFnaWMgZnJvbSB0aGUgY2FsbGVyOgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvNC5Db2RpbmcgYi9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvNC5Db2RpbmcKaW5kZXggYTVhMzQ1MC4uMjI3ODY5MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZlbG9wbWVudC1wcm9jZXNzLzQuQ29kaW5nCisrKyBiL0RvY3VtZW50YXRpb24vZGV2ZWxvcG1lbnQtcHJvY2Vzcy80LkNvZGluZwpAQCAtMjgxLDcgKzI4MSw3IEBACiB1c2VyLXNwYWNlIGFuZCBrZXJuZWwtc3BhY2UgYWRkcmVzc2VzLCBtaXh0dXJlIG9mIGJpZy1lbmRpYW4gYW5kCiBzbWFsbC1lbmRpYW4gcXVhbnRpdGllcywgdGhlIHBhc3Npbmcgb2YgaW50ZWdlciB2YWx1ZXMgd2hlcmUgYSBzZXQgb2YgYml0CiBmbGFncyBpcyBleHBlY3RlZCwgYW5kIHNvIG9uLiAgU3BhcnNlIG11c3QgYmUgaW5zdGFsbGVkIHNlcGFyYXRlbHkgKGl0IGNhbgotYmUgZm91bmQgYXQgaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9kZXZlbC9zcGFyc2UvIGlmIHlvdXIKK2JlIGZvdW5kIGF0IGh0dHBzOi8vc3BhcnNlLndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvTWFpbl9QYWdlIGlmIHlvdXIKIGRpc3RyaWJ1dG9yIGRvZXMgbm90IHBhY2thZ2UgaXQpOyBpdCBjYW4gdGhlbiBiZSBydW4gb24gdGhlIGNvZGUgYnkgYWRkaW5nCiAiQz0xIiB0byB5b3VyIG1ha2UgY29tbWFuZC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL2RtLWNyeXB0LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNlLW1hcHBlci9kbS1jcnlwdC50eHQKaW5kZXggNjY4MGNhYi4uNTI0ZGU5MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL2RtLWNyeXB0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvZG0tY3J5cHQudHh0CkBAIC0zNiw3ICszNiw3IEBACiA9PT09PT09PT09PT09PT0KIExVS1MgKExpbnV4IFVuaWZpZWQgS2V5IFNldHVwKSBpcyBub3cgdGhlIHByZWZlcnJlZCB3YXkgdG8gc2V0IHVwIGRpc2sKIGVuY3J5cHRpb24gd2l0aCBkbS1jcnlwdCB1c2luZyB0aGUgJ2NyeXB0c2V0dXAnIHV0aWxpdHksIHNlZQotaHR0cDovL2x1a3MuZW5kb3JwaGluLm9yZy8KK2h0dHA6Ly9jbGVtZW5zLmVuZG9ycGhpbi5vcmcvY3J5cHRvZ3JhcGh5CiAKIFtbCiAjIS9iaW4vc2gKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0CmluZGV4IDFkODNkMTIuLmYyZGE3ODEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2VzLnR4dApAQCAtMTUxNyw3ICsxNTE3LDcgQEAKIAkJICAgIC4uLgogCiAJCVRoZSBkcml2ZXIgYW5kIGRvY3VtZW50YXRpb24gbWF5IGJlIG9idGFpbmVkIGZyb20KLQkJaHR0cDovL3d3dy5wcm94aW1pdHkuY29tLmF1L35icmlhbi93aW5yYWRpby8KKwkJaHR0cDovL3d3dy53aW5yYWRpby5jb20vCiAKICA4MiBibG9jawlJMk8gaGFyZCBkaXNrCiAJCSAgMCA9IC9kZXYvaTJvL2hkYWcJMzNyZCBJMk8gaGFyZCBkaXNrLCB3aG9sZSBkaXNrCkBAIC0xNzIzLDcgKzE3MjMsNyBAQAogCQkgIDEgPSAvZGV2L2NvbWVkaTEJU2Vjb25kIGNvbWVkaSBkZXZpY2UKIAkJICAgIC4uLgogCi0JCVNlZSBodHRwOi8vc3RtLmxibC5nb3YvY29tZWRpIG9yIGh0dHA6Ly93d3cubGxwLmZ1LWJlcmxpbi5kZS8uCisJCVNlZSBodHRwOi8vc3RtLmxibC5nb3YvY29tZWRpLgogCiAgOTggYmxvY2sJVXNlci1tb2RlIHZpcnR1YWwgYmxvY2sgZGV2aWNlCiAJCSAgMCA9IC9kZXYvdWJkYQkJRmlyc3QgdXNlci1tb2RlIGJsb2NrIGRldmljZQpAQCAtMTk4NCw3ICsxOTg0LDcgQEAKICAgICAgICAgICAgICAgICAyNTYgTmV0V2FyZSB2b2x1bWVzIGNhbiBiZSBzdXBwb3J0ZWQgaW4gYSBzaW5nbGUKICAgICAgICAgICAgICAgICBtYWNoaW5lLgogCi0gICAgICAgICAgICAgICAgaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC9rZXJuZWwvcGVvcGxlL2ptZXJrZXkvbndmcworICAgICAgICAgICAgICAgIGh0dHA6Ly9jZ2ZhLnRlbGVwYWMucHQvZnRwMi9rZXJuZWwub3JnL2xpbnV4L2tlcm5lbC9wZW9wbGUvam1lcmtleS9ud2ZzLwogCiAgICAgICAgICAgICAgICAgMCA9IC9kZXYvbndmcy92MCAgICBGaXJzdCBOZXRXYXJlIChOV0ZTKSBMb2dpY2FsIFZvbHVtZQogICAgICAgICAgICAgICAgIDEgPSAvZGV2L253ZnMvdjEgICAgU2Vjb25kIE5ldFdhcmUgKE5XRlMpIExvZ2ljYWwgVm9sdW1lCkBAIC0yNTkxLDcgKzI1OTEsOCBAQAogCQkgIDEgPSAvZGV2L2ludGVybWV6em8xCVNlY29uZCBjYWNoZSBtYW5hZ2VyCiAJCSAgICAuLi4KIAotCQlTZWUgaHR0cDovL3d3dy5pbnRlci1tZXp6by5vcmcvIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCQlTZWUgaHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAwODAxMTUxOTUyNDEvCisJCWh0dHA6Ly9pbnRlci1tZXp6by5vcmcvaW5kZXguaHRtbAogCiAxODYgY2hhcglPYmplY3QtYmFzZWQgc3RvcmFnZSBjb250cm9sIGRldmljZQogCQkgIDAgPSAvZGV2L29iZDAJCUZpcnN0IG9iZCBjb250cm9sIGRldmljZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kdmIvZmFxLnR4dCBiL0RvY3VtZW50YXRpb24vZHZiL2ZhcS50eHQKaW5kZXggMjUxMWEzMy4uMTIxODMyZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kdmIvZmFxLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2R2Yi9mYXEudHh0CkBAIC03Niw3ICs3Niw3IEBACiAJCXRoZSBUdXhCb3ggQ1ZTIG1hbnkgaW50ZXJlc3RpbmcgRFZCIGFwcGxpY2F0aW9ucyBhbmQgdGhlIGRCb3gyCiAJCURWQiBzb3VyY2UKIAotCWh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZHZic2FrLworCWh0dHA6Ly93d3cubGludXh0di5vcmcvZG93bmxvYWRzLwkKIAkJRFZCIFN3aXNzIEFybXkgS25pZmUgbGlicmFyeSBhbmQgdXRpbGl0aWVzCiAKIAlodHRwOi8vd3d3Lm5lbmllLm9yZy9taXNjL21wc3lzLwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZSBiL0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUKaW5kZXggMjM5Y2JkYi4uMzUwOTU5ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZQorKysgYi9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlCkBAIC0yNiw3ICsyNiw3IEBACiAJCSJkZWMzMDAwcyIsICJ2cDcwNDEiLCAiZGlidXNiIiwgIm54dDIwMDIiLCAibnh0MjAwNCIsCiAJCSJvcjUxMjExIiwgIm9yNTExMzJfcWFtIiwgIm9yNTExMzJfdnNiIiwgImJsdWViaXJkIiwKIAkJIm9wZXJhMSIsICJjeDIzMXh4IiwgImN4MTgiLCAiY3gyMzg4NSIsICJwdnJ1c2IyIiwgIm1wYzcxOCIsCi0JCSJhZjkwMTUiLCAibmdlbmUiKTsKKwkJImFmOTAxNSIsICJuZ2VuZSIsICJhejYwMjciKTsKIAogIyBDaGVjayBhcmdzCiBzeW50YXgoKSBpZiAoc2NhbGFyKEBBUkdWKSAhPSAxKTsKQEAgLTUxOCwxMSArNTE4LDExIEBACiBzdWIgYWY5MDE1IHsKIAlteSAkc291cmNlZmlsZSA9ICJkb3dubG9hZC5hc2h4P2ZpbGU9NTciOwogCW15ICR1cmwgPSAiaHR0cDovL3d3dy5pdGUuY29tLnR3L0VOL1NlcnZpY2VzLyRzb3VyY2VmaWxlIjsKLQlteSAkaGFzaCA9ICJmZjViMDk2ZWQ0N2MwODA4NzBlYWNkYWIyZGUzM2FkNiI7CisJbXkgJGhhc2ggPSAiZTNmMDg5MzUxNTgwMzhkMzg1YWQzODI0NDJmNGJiMmQiOwogCW15ICRvdXRmaWxlID0gImR2Yi11c2ItYWY5MDE1LmZ3IjsKIAlteSAkdG1wZGlyID0gdGVtcGRpcihESVIgPT4gIi90bXAiLCBDTEVBTlVQID0+IDEpOwotCW15ICRmd29mZnNldCA9IDB4MjI3MDg7Ci0JbXkgJGZ3bGVuZ3RoID0gMTgyMjU7CisJbXkgJGZ3b2Zmc2V0ID0gMHgyNTY5MDsKKwlteSAkZndsZW5ndGggPSAxODcyNTsKIAlteSAoJGNodW5rbGVuZ3RoLCAkYnVmLCAkcmNvdW50KTsKIAogCWNoZWNrc3RhbmRhcmQoKTsKQEAgLTU2Nyw2ICs1NjcsMjMgQEAKICAgICAiJGZpbGUxLCAkZmlsZTIiOwogfQogCitzdWIgYXo2MDI3eworICAgIG15ICRmaWxlID0gIkFaNjAyN19MaW51eF9Ecml2ZXIudGFyLmd6IjsKKyAgICBteSAkdXJsID0gImh0dHA6Ly9saW51eC50ZXJyYXRlYy5kZS9maWxlcy8kZmlsZSI7CisgICAgbXkgJGZpcm13YXJlID0gImR2Yi11c2ItYXo2MDI3LTAzLmZ3IjsKKworICAgIHdnZXRmaWxlKCRmaWxlLCAkdXJsKTsKKworICAgICN1bnRhcgorICAgIGlmKCBzeXN0ZW0oInRhciB4enZmICRmaWxlICRmaXJtd2FyZSIpKXsKKyAgICAgICAgZGllICJmYWlsZWQgdG8gdW50YXIgZmlybXdhcmUiOworICAgIH0KKyAgICBpZiggc3lzdGVtKCJybSAkZmlsZSIpKXsKKyAgICAgICAgZGllICgidW5hYmxlIHRvIHJlbW92ZSB1bm5lY2Vzc2FyeSBmaWxlcyIpOworICAgIH0KKworICAgICRmaXJtd2FyZTsKK30KICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFV0aWxpdGllcwogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL2ZyYW1lYnVmZmVyLnR4dCBiL0RvY3VtZW50YXRpb24vZmIvZnJhbWVidWZmZXIudHh0CmluZGV4IGZlNzllM2MuLjU4YzVhZTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmIvZnJhbWVidWZmZXIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmIvZnJhbWVidWZmZXIudHh0CkBAIC0zMzAsNyArMzMwLDcgQEAKIAogVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGZic2V0IGNhbiBiZSBmb3VuZCBhdAogCi0gICAgaHR0cDovL2hvbWUudHZkLmJlL2NyMjY4NjQvTGludXgvZmJkZXYvCisgICAgaHR0cDovL3d3dy5saW51eC1mYmRldi5vcmcvIAogCiAgIAogMTAuIENyZWRpdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKaW5kZXggYzI2ODc4My4uNzFmMGZlYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dApAQCAtOTMsNyArOTMsNyBAQAogCWlucHV0cy4gIFRoaXMgZnJhbWV3b3JrIHdhcyBuZXZlciB3aWRlbHkgdXNlZCwgYW5kIG1vc3QgYXR0ZW1wdHMgdG8KIAl1c2UgaXQgd2VyZSBicm9rZW4uICBEcml2ZXJzIHNob3VsZCBpbnN0ZWFkIGJlIGV4cG9zaW5nIGRvbWFpbi1zcGVjaWZpYwogCWludGVyZmFjZXMgZWl0aGVyIHRvIGtlcm5lbCBvciB0byB1c2Vyc3BhY2UuCi1XaG86CVBhdmVsIE1hY2hlayA8cGF2ZWxAc3VzZS5jej4KK1dobzoJUGF2ZWwgTWFjaGVrIDxwYXZlbEB1Y3cuY3o+CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMTYsMjkgKzExNiw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OglQQ01DSUEgY29udHJvbCBpb2N0bCAobmVlZGVkIGZvciBwY21jaWEtY3MgW2NhcmRtZ3IsIGNhcmRjdGxdKQotV2hlbjoJMi42LjM1LzIuNi4zNgotRmlsZXM6CWRyaXZlcnMvcGNtY2lhLzogcGNtY2lhX2lvY3RsLmMKLVdoeToJV2l0aCB0aGUgMTYtYml0IFBDTUNJQSBzdWJzeXN0ZW0gbm93IGJlaGF2aW5nIChhbG1vc3QpIGxpa2UgYQotCW5vcm1hbCBob3RwbHVnZ2FibGUgYnVzLCBhbmQgd2l0aCBpdCB1c2luZyB0aGUgZGVmYXVsdCBrZXJuZWwKLQlpbmZyYXN0cnVjdHVyZSAoaG90cGx1ZywgZHJpdmVyIGNvcmUsIHN5c2ZzKSBrZWVwaW5nIHRoZSBQQ01DSUEKLQljb250cm9sIGlvY3RsIG5lZWRlZCBieSBjYXJkbWdyIGFuZCBjYXJkY3RsIGZyb20gcGNtY2lhLWNzIGlzCi0JdW5uZWNlc3NhcnkgYW5kIHBvdGVudGlhbGx5IGhhcm1mdWwgKGl0IGRvZXMgbm90IHByb3ZpZGUgZm9yCi0JcHJvcGVyIGxvY2tpbmcpLCBhbmQgbWFrZXMgZnVydGhlciBjbGVhbnVwcyBhbmQgaW50ZWdyYXRpb24gb2YgdGhlCi0JUENNQ0lBIHN1YnN5c3RlbSBpbnRvIHRoZSBMaW51eCBrZXJuZWwgZGV2aWNlIGRyaXZlciBtb2RlbCBtb3JlCi0JZGlmZmljdWx0LiBUaGUgZmVhdHVyZXMgcHJvdmlkZWQgYnkgY2FyZG1nciBhbmQgY2FyZGN0bCBhcmUgZWl0aGVyCi0JaGFuZGxlZCBieSB0aGUga2VybmVsIGl0c2VsZiBub3cgb3IgYXJlIGF2YWlsYWJsZSBpbiB0aGUgbmV3Ci0JcGNtY2lhdXRpbHMgcGFja2FnZSBhdmFpbGFibGUgYXQKLQlodHRwOi8va2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMva2VybmVsL3BjbWNpYS8KLQotCUZvciBhbGwgYXJjaGl0ZWN0dXJlcyBleGNlcHQgQVJNLCB0aGUgYXNzb2NpYXRlZCBjb25maWcgc3ltYm9sCi0JaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIGtlcm5lbCAyLjYuMzQ7IGZvciBBUk0sIGl0IHdpbGwgYmUgbGlrZWx5Ci0JYmUgcmVtb3ZlZCBmcm9tIGtlcm5lbCAyLjYuMzUuIFRoZSBhY3R1YWwgY29kZSB3aWxsIHRoZW4gbGlrZWx5Ci0JYmUgcmVtb3ZlZCBmcm9tIGtlcm5lbCAyLjYuMzYuCi1XaG86CURvbWluaWsgQnJvZG93c2tpIDxsaW51eEBkb21pbmlrYnJvZG93c2tpLm5ldD4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIFdoYXQ6CXN5c19zeXNjdGwKIFdoZW46CVNlcHRlbWJlciAyMDEwCiBPcHRpb246IENPTkZJR19TWVNDVExfU1lTQ0FMTApAQCAtMzAzLDE1ICsyODAsNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDogQ09ORklHX05GX0NUX0FDQ1QKLVdoZW46IDIuNi4yOQotV2h5OiAgQWNjb3VudGluZyBjYW4gbm93IGJlIGVuYWJsZWQvZGlzYWJsZWQgd2l0aG91dCBrZXJuZWwgcmVjb21waWxhdGlvbi4KLSAgICAgIEN1cnJlbnRseSB1c2VkIG9ubHkgdG8gc2V0IGEgZGVmYXVsdCB2YWx1ZSBmb3IgYSBmZWF0dXJlIHRoYXQgaXMgYWxzbwotICAgICAgY29udHJvbGxlZCBieSBhIGtlcm5lbC9tb2R1bGUvc3lzZnMvc3lzY3RsIHBhcmFtZXRlci4KLVdobzogIEtyenlzenRvZiBQaW90ciBPbGVkemtpIDxvbGVAYW5zLnBsPgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogV2hhdDoJc3lzZnMgdWkgZm9yIGNoYW5naW5nIHA0LWNsb2NrbW9kIHBhcmFtZXRlcnMKIFdoZW46CVNlcHRlbWJlciAyMDA5CiBXaHk6CVNlZSBjb21taXRzIDEyOWY4YWU5YjFiNWJlOTQ1MTdkYTc2MDA5ZWE5NTZlODkxMDRjZTggYW5kCkBAIC0zNzcsMTYgKzM0NSw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJbG9ja19wb2xpY3lfcndzZW1fKiBhbmQgdW5sb2NrX3BvbGljeV9yd3NlbV8qIHdpbGwgbm90IGJlCi0JZXhwb3J0ZWQgaW50ZXJmYWNlIGFueW1vcmUuCi1XaGVuOgkyLjYuMzMKLVdoeToJY3B1X3BvbGljeV9yd3NlbSBoYXMgYSBuZXcgY2xlYW5lciBkZWZpbml0aW9uIG1ha2luZyBpdCBsb2NhbCB0bwotCWNwdWZyZXEgY29yZSBhbmQgY29udGFpbmVkIGluc2lkZSBjcHVmcmVxLmMuIE90aGVyIGRlcGVuZGVudAotCWRyaXZlcnMgc2hvdWxkIG5vdCB1c2UgaXQgaW4gb3JkZXIgdG8gc2FmZWx5IGF2b2lkIGxvY2tkZXAgaXNzdWVzLgotV2hvOglWZW5rYXRlc2ggUGFsbGlwYWRpIDx2ZW5rYXRlc2gucGFsbGlwYWRpQGludGVsLmNvbT4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBXaGF0Oglzb3VuZC1zbG90L3NlcnZpY2UtKiBtb2R1bGUgYWxpYXNlcyBhbmQgcmVsYXRlZCBjbHV0dGVycyBpbgogCXNvdW5kL3NvdW5kX2NvcmUuYwogV2hlbjoJQXVndXN0IDIwMTAKQEAgLTQ1OSw1NyArNDE3LDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0Ogl1c2J2aWRlbyBxdWlja2NhbV9tZXNzZW5nZXIgZHJpdmVyCi1XaGVuOgkyLjYuMzUKLUZpbGVzOglkcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3F1aWNrY2FtX21lc3Nlbmdlci5bY2hdCi1XaHk6CW9ic29sZXRlIHY0bDEgZHJpdmVyIHJlcGxhY2VkIGJ5IGdzcGNhX3N0djA2eHgKLVdobzoJSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1XaGF0OglvdjUxMSB2NGwxIGRyaXZlcgotV2hlbjoJMi42LjM1Ci1GaWxlczoJZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5bY2hdCi1XaHk6CW9ic29sZXRlIHY0bDEgZHJpdmVyIHJlcGxhY2VkIGJ5IGdzcGNhX292NTE5Ci1XaG86CUhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotV2hhdDoJdzk5NjhjZiB2NGwxIGRyaXZlcgotV2hlbjoJMi42LjM1Ci1GaWxlczoJZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmKi5bY2hdCi1XaHk6CW9ic29sZXRlIHY0bDEgZHJpdmVyIHJlcGxhY2VkIGJ5IGdzcGNhX292NTE5Ci1XaG86CUhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotV2hhdDoJb3ZjYW1jaGlwIHNlbnNvciBmcmFtZXdvcmsKLVdoZW46CTIuNi4zNQotRmlsZXM6CWRyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwLyoKLVdoeToJT25seSB1c2VkIGJ5IG9ic29sZXRlZCB2NGwxIGRyaXZlcnMKLVdobzoJSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1XaGF0OglzdHY2ODAgdjRsMSBkcml2ZXIKLVdoZW46CTIuNi4zNQotRmlsZXM6CWRyaXZlcnMvbWVkaWEvdmlkZW8vc3R2NjgwLltjaF0KLVdoeToJb2Jzb2xldGUgdjRsMSBkcml2ZXIgcmVwbGFjZWQgYnkgZ3NwY2Ffc3R2MDY4MAotV2hvOglIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVdoYXQ6CXpjMDMwMSB2NGwgZHJpdmVyCi1XaGVuOgkyLjYuMzUKLUZpbGVzOglkcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS8qCi1XaHk6CUR1cGxpY2F0ZSBmdW5jdGlvbmFsaXR5IHdpdGggdGhlIGdzcGNhX3pjM3h4IGRyaXZlciwgemMwMzAxIG9ubHkKLQlzdXBwb3J0cyAyIFVTQi1JRCdzIChiZWNhdXNlIGl0IG9ubHkgc3VwcG9ydHMgYSBsaW1pdGVkIHNldCBvZgotCXNlbnNvcnMpIHdpY2ggYXJlIGFsc28gc3VwcG9ydGVkIGJ5IHRoZSBnc3BjYV96YzN4eCBkcml2ZXIKLQkod2hpY2ggc3VwcG9ydHMgNTMgVVNCLUlEJ3MgaW4gdG90YWwpCi1XaG86CUhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogV2hhdDoJc3lzZnMtY2xhc3MtcmZraWxsIHN0YXRlIGZpbGUKIFdoZW46CUZlYiAyMDE0CiBGaWxlczoJbmV0L3Jma2lsbC9jb3JlLmMKQEAgLTUzOCwzNyArNDQ1LDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OglLVk0gbWVtb3J5IGFsaWFzZXMgc3VwcG9ydAotV2hlbjoJSnVseSAyMDEwCi1XaHk6CU1lbW9yeSBhbGlhc2luZyBzdXBwb3J0IGlzIHVzZWQgZm9yIHNwZWVkaW5nIHVwIGd1ZXN0IHZnYSBhY2Nlc3MKLQl0aHJvdWdoIHRoZSB2Z2Egd2luZG93cy4KLQotCU1vZGVybiB1c2Vyc3BhY2Ugbm8gbG9uZ2VyIHVzZXMgdGhpcyBmZWF0dXJlLCBzbyBpdCdzIGp1c3QgYml0cm90dGVkCi0JY29kZSBhbmQgY2FuIGJlIHJlbW92ZWQgd2l0aCBubyBpbXBhY3QuCi1XaG86CUF2aSBLaXZpdHkgPGF2aUByZWRoYXQuY29tPgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVdoYXQ6CXh0aW1lLCB3YWxsX3RvX21vbm90b25pYwotV2hlbjoJMi42LjM2KwotRmlsZXM6CWtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMgaW5jbHVkZS9saW51eC90aW1lLmgKLVdoeToJQ2xlYW5pbmcgdXAgdGltZWtlZXBpbmcgaW50ZXJuYWwgdmFsdWVzLiBQbGVhc2UgdXNlCi0JZXhpc3RpbmcgdGltZWtlZXBpbmcgYWNjZXNzb3IgZnVuY3Rpb25zIHRvIGFjY2VzcwotCXRoZSBlcXVpdmFsZW50IGZ1bmN0aW9uYWxpdHkuCi1XaG86CUpvaG4gU3R1bHR6IDxqb2huc3R1bEB1cy5pYm0uY29tPgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVdoYXQ6CUtWTSBrZXJuZWwtYWxsb2NhdGVkIG1lbW9yeSBzbG90cwotV2hlbjoJSnVseSAyMDEwCi1XaHk6CVNpbmNlIDIuNi4yNSwga3ZtIHN1cHBvcnRzIHVzZXItYWxsb2NhdGVkIG1lbW9yeSBzbG90cywgd2hpY2ggYXJlCi0JbXVjaCBtb3JlIGZsZXhpYmxlIHRoYW4ga2VybmVsLWFsbG9jYXRlZCBzbG90cy4gIEFsbCBjdXJyZW50IHVzZXJzcGFjZQotCXN1cHBvcnRzIHRoZSBuZXdlciBpbnRlcmZhY2UgYW5kIHRoaXMgY29kZSBjYW4gYmUgcmVtb3ZlZCB3aXRoIG5vCi0JaW1wYWN0LgotV2hvOglBdmkgS2l2aXR5IDxhdmlAcmVkaGF0LmNvbT4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBXaGF0OglLVk0gcGFyYXZpcnQgbW11IGhvc3Qgc3VwcG9ydAogV2hlbjoJSmFudWFyeSAyMDExCiBXaHk6CVRoZSBwYXJhdmlydCBtbXUgaG9zdCBzdXBwb3J0IGlzIHNsb3dlciB0aGFuIG5vbi1wYXJhdmlydCBtbXUsIGJvdGgKQEAgLTY0NywzICs1MjMsMTAgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitXaGF0OglUaGUgYWNwaV9zbGVlcD1zNF9ub252cyBjb21tYW5kIGxpbmUgb3B0aW9uCitXaGVuOgkyLjYuMzcKK0ZpbGVzOglhcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcC5jCitXaHk6CXN1cGVyc2VkZWQgYnkgYWNwaV9zbGVlcD1ub252cworV2hvOglSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvOXAudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy85cC50eHQKaW5kZXggYzAyMzZlNy4uZjk3NjVlOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy85cC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy85cC50eHQKQEAgLTEyOCw3ICsxMjgsNyBAQAogUkVTT1VSQ0VTCiA9PT09PT09PT0KIAotT3VyIGN1cnJlbnQgcmVjb21tZW5kYXRpb24gaXMgdG8gdXNlIEluZmVybm8gKGh0dHA6Ly93d3cudml0YW51b3ZhLmNvbS9pbmZlcm5vKQorT3VyIGN1cnJlbnQgcmVjb21tZW5kYXRpb24gaXMgdG8gdXNlIEluZmVybm8gKGh0dHA6Ly93d3cudml0YW51b3ZhLmNvbS9uZmVybm8vaW5kZXguaHRtbCkKIGFzIHRoZSA5cCBzZXJ2ZXIuICBZb3UgY2FuIHN0YXJ0IGEgOXAgc2VydmVyIHVuZGVyIEluZmVybm8gYnkgaXNzdWluZyB0aGUKIGZvbGxvd2luZyBjb21tYW5kOgogICAgOyBzdHl4bGlzdGVuIC1BIHRjcCEqITU2NCBleHBvcnQgJyNVKicKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYWZmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2FmZnMudHh0CmluZGV4IDJkMTUyNDQ2Li44MWFjNDg4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2FmZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYWZmcy50eHQKQEAgLTIxNiw0ICsyMTYsNCBAQAogCiBJZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gYW4gQW1pZ2EgRW11bGF0b3IgZm9yIExpbnV4LCBsb29rIGF0CiAKLWh0dHA6Ly93d3cuZnJlaWJ1cmcubGludXguZGUvfnVhZS8KK2h0dHA6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLyovaHR0cDovL3d3dy5mcmVpYnVyZy5saW51eC5kZS9+dWFlLwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZWZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmVmcy50eHQKaW5kZXggNjczOTFhMS4uNmU0OWMzNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZWZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2JlZnMudHh0CkBAIC0zMSw3ICszMSw3IEBACiAKIFdIQVQgSVMgVEhJUyBEUklWRVI/CiA9PT09PT09PT09PT09PT09PT0KLVRoaXMgbW9kdWxlIGltcGxlbWVudHMgdGhlIG5hdGl2ZSBmaWxlc3lzdGVtIG9mIEJlT1MgPGh0dHA6Ly93d3cuYmUuY29tLz4KK1RoaXMgbW9kdWxlIGltcGxlbWVudHMgdGhlIG5hdGl2ZSBmaWxlc3lzdGVtIG9mIEJlT1MgaHR0cDovL3d3dy5iZWluY29ycG9yYXRlZC5jb20vIAogZm9yIHRoZSBsaW51eCAyLjQuMSBhbmQgbGF0ZXIga2VybmVscy4gQ3VycmVudGx5IGl0IGlzIGEgcmVhZC1vbmx5CiBpbXBsZW1lbnRhdGlvbi4KIApAQCAtNjEsNyArNjEsNyBAQAogCiBUaGUgbGludXgga2VybmVsIGhhcyBtYW55IGNvbXBpbGUtdGltZSBvcHRpb25zLiBNb3N0IG9mIHRoZW0gYXJlIGJleW9uZCB0aGUKIHNjb3BlIG9mIHRoaXMgZG9jdW1lbnQuIEkgc3VnZ2VzdCB0aGUgS2VybmVsLUhPV1RPIGRvY3VtZW50IGFzIGEgZ29vZCBnZW5lcmFsCi1yZWZlcmVuY2Ugb24gdGhpcyB0b3BpYy4gPGh0dHA6Ly93d3cubGludXguY29tL2hvd3RvL0tlcm5lbC1IT1dUTy5odG1sPgorcmVmZXJlbmNlIG9uIHRoaXMgdG9waWMuIGh0dHA6Ly93d3cubGludXhkb2NzLm9yZy9IT1dUT3MvS2VybmVsLUhPV1RPLTQuaHRtbCAKIAogSG93ZXZlciwgdG8gdXNlIHRoZSBCZUZTIG1vZHVsZSwgeW91IG11c3QgZW5hYmxlIGl0IGF0IGNvbmZpZ3VyZSB0aW1lLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lzb2ZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaXNvZnMudHh0CmluZGV4IDNjMzY3YzMuLmJhMGE5MzMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaXNvZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaXNvZnMudHh0CkBAIC00MSw3ICs0MSw3IEBACiAgIHNic2VjdG9yPXh4eCAgU2Vzc2lvbiBiZWdpbnMgZnJvbSBzZWN0b3IgeHh4CiAKIFJlY29tbWVuZGVkIGRvY3VtZW50cyBhYm91dCBJU08gOTY2MCBzdGFuZGFyZCBhcmUgbG9jYXRlZCBhdDoKLWh0dHA6Ly93d3cueS1hZGFnaW8uY29tL3B1YmxpYy9zdGFuZGFyZHMvaXNvX2Nkcm9tci90b2NvbnQuaHRtCitodHRwOi8vd3d3LnktYWRhZ2lvLmNvbS8KIGZ0cDovL2Z0cC5lY21hLmNoL2VjbWEtc3QvRWNtYS0xMTkucGRmCiBRdW90aW5nIGZyb20gdGhlIFBERiAiVGhpcyAybmQgRWRpdGlvbiBvZiBTdGFuZGFyZCBFQ01BLTExOSBpcyB0ZWNobmljYWxseSAKIGlkZW50aWNhbCB3aXRoIElTTyA5NjYwLiIsIHNvIGl0IGlzIGEgdmFsaWQgYW5kIGdyYXRpcyBzdWJzdGl0dXRlIG9mIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzcm9vdC50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNyb290LnR4dAppbmRleCAzYmEwYjk0Li5mMjQzMGE3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNyb290LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNyb290LnR4dApAQCAtMTI0LDYgKzEyNCw4IEBACiAKICAgPGhvc3RuYW1lPglOYW1lIG9mIHRoZSBjbGllbnQuIE1heSBiZSBzdXBwbGllZCBieSBhdXRvY29uZmlndXJhdGlvbiwKICAgCQlidXQgaXRzIGFic2VuY2Ugd2lsbCBub3QgdHJpZ2dlciBhdXRvY29uZmlndXJhdGlvbi4KKwkJSWYgc3BlY2lmaWVkIGFuZCBESENQIGlzIHVzZWQsIHRoZSB1c2VyIHByb3ZpZGVkIGhvc3RuYW1lIHdpbGwKKwkJYmUgY2FycmllZCBpbiB0aGUgREhDUCByZXF1ZXN0IHRvIGhvcGVmdWxseSB1cGRhdGUgRE5TIHJlY29yZC4KIAogICAJCURlZmF1bHQ6IENsaWVudCBJUCBhZGRyZXNzIGlzIHVzZWQgaW4gQVNDSUkgbm90YXRpb24uCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CmluZGV4IDlmYjZjYmUuLjhmZTg4OTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dApAQCAtNzMsOSArNzMsOSBAQAogZG9jdW1lbnQuCiAKIFRoZSAgIGxhdGVzdCAgIHZlcnNpb24gICAgb2YgICB0aGlzICAgZG9jdW1lbnQgICBpcyAgICBhdmFpbGFibGUgICBvbmxpbmUgICBhdAotaHR0cDovL3NrYXJvLm5pZ2h0Y3Jhd2xlci5jb20vfmJiL0RvY3MvUHJvYyBhcyBIVE1MIHZlcnNpb24uCitodHRwOi8vdGxkcC5vcmcvTERQL0xpbnV4LUZpbGVzeXN0ZW0tSGllcmFyY2h5L2h0bWwvcHJvYy5odG1sCiAKLUlmICB0aGUgYWJvdmUgIGRpcmVjdGlvbiBkb2VzICBub3Qgd29ya3MgIGZvciB5b3UsICB5cHUgY291bGQgIHRyeSB0aGUgIGtlcm5lbAorSWYgIHRoZSBhYm92ZSAgZGlyZWN0aW9uIGRvZXMgIG5vdCB3b3JrcyAgZm9yIHlvdSwgIHlvdSBjb3VsZCAgdHJ5IHRoZSAga2VybmVsCiBtYWlsaW5nICBsaXN0ICBhdCAgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZyAgYW5kL29yIHRyeSAgdG8gIHJlYWNoICBtZSAgYXQKIGNvbWFuZGFudGVAemFyYWxpbnV4LmNvbS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy1wY2kudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy1wY2kudHh0CmluZGV4IDg1MzU0YjMuLjc0ZWFhYzIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMtcGNpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLXBjaS50eHQKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICBsb2NhbF9jcHVzCSAgIG5lYXJieSBDUFUgbWFzayAoY3B1bWFzaywgcm8pCiAgICAgICAgcmVtb3ZlCQkgICByZW1vdmUgZGV2aWNlIGZyb20ga2VybmVsJ3MgbGlzdCAoYXNjaWksIHdvKQogICAgICAgIHJlc291cmNlCQkgICBQQ0kgcmVzb3VyY2UgaG9zdCBhZGRyZXNzZXMgKGFzY2lpLCBybykKLSAgICAgICByZXNvdXJjZTAuLk4JICAgUENJIHJlc291cmNlIE4sIGlmIHByZXNlbnQgKGJpbmFyeSwgbW1hcCkKKyAgICAgICByZXNvdXJjZTAuLk4JICAgUENJIHJlc291cmNlIE4sIGlmIHByZXNlbnQgKGJpbmFyeSwgbW1hcCwgcndbMV0pCiAgICAgICAgcmVzb3VyY2UwX3djLi5OX3djICBQQ0kgV0MgbWFwIHJlc291cmNlIE4sIGlmIHByZWZldGNoYWJsZSAoYmluYXJ5LCBtbWFwKQogICAgICAgIHJvbQkJICAgUENJIFJPTSByZXNvdXJjZSwgaWYgcHJlc2VudCAoYmluYXJ5LCBybykKICAgICAgICBzdWJzeXN0ZW1fZGV2aWNlCSAgIFBDSSBzdWJzeXN0ZW0gZGV2aWNlIChhc2NpaSwgcm8pCkBAIC01NCwxMyArNTQsMTYgQEAKICAgYmluYXJ5IC0gZmlsZSBjb250YWlucyBiaW5hcnkgZGF0YQogICBjcHVtYXNrIC0gZmlsZSBjb250YWlucyBhIGNwdW1hc2sgdHlwZQogCitbMV0gcncgZm9yIFJFU09VUkNFX0lPIChJL08gcG9ydCkgcmVnaW9ucyBvbmx5CisKIFRoZSByZWFkIG9ubHkgZmlsZXMgYXJlIGluZm9ybWF0aW9uYWwsIHdyaXRlcyB0byB0aGVtIHdpbGwgYmUgaWdub3JlZCwgd2l0aAogdGhlIGV4Y2VwdGlvbiBvZiB0aGUgJ3JvbScgZmlsZS4gIFdyaXRhYmxlIGZpbGVzIGNhbiBiZSB1c2VkIHRvIHBlcmZvcm0KIGFjdGlvbnMgb24gdGhlIGRldmljZSAoZS5nLiBjaGFuZ2luZyBjb25maWcgc3BhY2UsIGRldGFjaGluZyBhIGRldmljZSkuCiBtbWFwYWJsZSBmaWxlcyBhcmUgYXZhaWxhYmxlIHZpYSBhbiBtbWFwIG9mIHRoZSBmaWxlIGF0IG9mZnNldCAwIGFuZCBjYW4gYmUKIHVzZWQgdG8gZG8gYWN0dWFsIGRldmljZSBwcm9ncmFtbWluZyBmcm9tIHVzZXJzcGFjZS4gIE5vdGUgdGhhdCBzb21lIHBsYXRmb3JtcwogZG9uJ3Qgc3VwcG9ydCBtbWFwcGluZyBvZiBjZXJ0YWluIHJlc291cmNlcywgc28gYmUgc3VyZSB0byBjaGVjayB0aGUgcmV0dXJuCi12YWx1ZSBmcm9tIGFueSBhdHRlbXB0ZWQgbW1hcC4KK3ZhbHVlIGZyb20gYW55IGF0dGVtcHRlZCBtbWFwLiAgVGhlIG1vc3Qgbm90YWJsZSBvZiB0aGVzZSBhcmUgSS9PIHBvcnQKK3Jlc291cmNlcywgd2hpY2ggYWxzbyBwcm92aWRlIHJlYWQvd3JpdGUgYWNjZXNzLgogCiBUaGUgJ2VuYWJsZScgZmlsZSBwcm92aWRlcyBhIGNvdW50ZXIgdGhhdCBpbmRpY2F0ZXMgaG93IG1hbnkgdGltZXMgdGhlIGRldmljZSAKIGhhcyBiZWVuIGVuYWJsZWQuICBJZiB0aGUgJ2VuYWJsZScgZmlsZSBjdXJyZW50bHkgcmV0dXJucyAnNCcsIGFuZCBhICcxJyBpcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLnR4dAppbmRleCA5MzFjODA2Li41ZDEzMzVmYWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0CkBAIC00LDcgKzQsNyBAQAogUGF0cmljayBNb2NoZWwJPG1vY2hlbEBvc2RsLm9yZz4KIE1pa2UgTXVycGh5IDxtYW11cnBoQGNzLmNsZW1zb24uZWR1PgogCi1SZXZpc2VkOiAgICAyMiBGZWJydWFyeSAyMDA5CitSZXZpc2VkOiAgICAxNSBKdWx5IDIwMTAKIE9yaWdpbmFsOiAgIDEwIEphbnVhcnkgMjAwMwogCiAKQEAgLTEyNCw3ICsxMjQsNyBAQAogCiBzdHJ1Y3Qgc3lzZnNfb3BzIHsKICAgICAgICAgc3NpemVfdCAoKnNob3cpKHN0cnVjdCBrb2JqZWN0ICosIHN0cnVjdCBhdHRyaWJ1dGUgKiwgY2hhciAqKTsKLSAgICAgICAgc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3Qga29iamVjdCAqLCBzdHJ1Y3QgYXR0cmlidXRlICosIGNvbnN0IGNoYXIgKik7CisgICAgICAgIHNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGtvYmplY3QgKiwgc3RydWN0IGF0dHJpYnV0ZSAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiB9OwogCiBbIFN1YnN5c3RlbXMgc2hvdWxkIGhhdmUgYWxyZWFkeSBkZWZpbmVkIGEgc3RydWN0IGtvYmpfdHlwZSBhcyBhCkBAIC0xMzksMTggKzEzOSwyMiBAQAogCiBUbyBpbGx1c3RyYXRlOgogCisjZGVmaW5lIHRvX2RldihvYmopIGNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopCiAjZGVmaW5lIHRvX2Rldl9hdHRyKF9hdHRyKSBjb250YWluZXJfb2YoX2F0dHIsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlLCBhdHRyKQotI2RlZmluZSB0b19kZXYoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBkZXZpY2UsIGtvYmopCiAKLXN0YXRpYyBzc2l6ZV90Ci1kZXZfYXR0cl9zaG93KHN0cnVjdCBrb2JqZWN0ICoga29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqIGF0dHIsIGNoYXIgKiBidWYpCitzdGF0aWMgc3NpemVfdCBkZXZfYXR0cl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYpCiB7Ci0gICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogZGV2X2F0dHIgPSB0b19kZXZfYXR0cihhdHRyKTsKLSAgICAgICAgc3RydWN0IGRldmljZSAqIGRldiA9IHRvX2Rldihrb2JqKTsKLSAgICAgICAgc3NpemVfdCByZXQgPSAwOworICAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2X2F0dHIgPSB0b19kZXZfYXR0cihhdHRyKTsKKyAgICAgICAgc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2KGtvYmopOworICAgICAgICBzc2l6ZV90IHJldCA9IC1FSU87CiAKICAgICAgICAgaWYgKGRldl9hdHRyLT5zaG93KQotICAgICAgICAgICAgICAgIHJldCA9IGRldl9hdHRyLT5zaG93KGRldiwgYnVmKTsKKyAgICAgICAgICAgICAgICByZXQgPSBkZXZfYXR0ci0+c2hvdyhkZXYsIGRldl9hdHRyLCBidWYpOworICAgICAgICBpZiAocmV0ID49IChzc2l6ZV90KVBBR0VfU0laRSkgeworICAgICAgICAgICAgICAgIHByaW50X3N5bWJvbCgiZGV2X2F0dHJfc2hvdzogJXMgcmV0dXJuZWQgYmFkIGNvdW50XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylkZXZfYXR0ci0+c2hvdyk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJldDsKIH0KIApAQCAtMTYzLDEwICsxNjcsOSBAQAogc3BlY2lmaWVkIHdoZW4gZGVjbGFyaW5nIHRoZSBhdHRyaWJ1dGUuIFRoZSBtZXRob2QgdHlwZXMgc2hvdWxkIGJlIGFzCiBzaW1wbGUgYXMgdGhvc2UgZGVmaW5lZCBmb3IgZGV2aWNlIGF0dHJpYnV0ZXM6CiAKLXNzaXplX3QgKCpzaG93KShzdHJ1Y3QgZGV2aWNlICogZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqIGF0dHIsCi0gICAgICAgICAgICAgICAgY2hhciAqIGJ1Zik7Ci1zc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogYXR0ciwKLSAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIGJ1Zik7Citzc2l6ZV90ICgqc2hvdykoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKK3NzaXplX3QgKCpzdG9yZSkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKyAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOwogCiBJT1csIHRoZXkgc2hvdWxkIHRha2Ugb25seSBhbiBvYmplY3QsIGFuIGF0dHJpYnV0ZSwgYW5kIGEgYnVmZmVyIGFzIHBhcmFtZXRlcnMuCiAKQEAgLTIwOSw4ICsyMTIsOCBAQAogCiAtIHNob3coKSBzaG91bGQgYWx3YXlzIHVzZSBzbnByaW50ZigpLiAKIAotLSBzdG9yZSgpIHNob3VsZCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB1c2VkIGZyb20gdGhlIGJ1ZmZlci4gVGhpcwotICBjYW4gYmUgZG9uZSB1c2luZyBzdHJsZW4oKS4KKy0gc3RvcmUoKSBzaG91bGQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgdXNlZCBmcm9tIHRoZSBidWZmZXIuIElmIHRoZQorICBlbnRpcmUgYnVmZmVyIGhhcyBiZWVuIHVzZWQsIGp1c3QgcmV0dXJuIHRoZSBjb3VudCBhcmd1bWVudC4KIAogLSBzaG93KCkgb3Igc3RvcmUoKSBjYW4gYWx3YXlzIHJldHVybiBlcnJvcnMuIElmIGEgYmFkIHZhbHVlIGNvbWVzCiAgIHRocm91Z2gsIGJlIHN1cmUgdG8gcmV0dXJuIGFuIGVycm9yLgpAQCAtMjIzLDE1ICsyMjYsMTggQEAKIAogQSB2ZXJ5IHNpbXBsZSAoYW5kIG5haXZlKSBpbXBsZW1lbnRhdGlvbiBvZiBhIGRldmljZSBhdHRyaWJ1dGUgaXM6CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYpCiB7CiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIGRldi0+bmFtZSk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHN0b3JlX25hbWUoc3RydWN0IGRldmljZSAqIGRldiwgY29uc3QgY2hhciAqIGJ1ZikKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3NjYW5mKGJ1ZiwgIiUyMHMiLCBkZXYtPm5hbWUpOwotCXJldHVybiBzdHJubGVuKGJ1ZiwgUEFHRV9TSVpFKTsKKyAgICAgICAgc25wcmludGYoZGV2LT5uYW1lLCBzaXplb2YoZGV2LT5uYW1lKSwgIiUuKnMiLAorICAgICAgICAgICAgICAgICAoaW50KW1pbihjb3VudCwgc2l6ZW9mKGRldi0+bmFtZSkgLSAxKSwgYnVmKTsKKwlyZXR1cm4gY291bnQ7CiB9CiAKIHN0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93X25hbWUsIHN0b3JlX25hbWUpOwpAQCAtMzI3LDcgKzMzMyw3IEBACiBzdHJ1Y3QgYnVzX2F0dHJpYnV0ZSB7CiAgICAgICAgIHN0cnVjdCBhdHRyaWJ1dGUgICAgICAgIGF0dHI7CiAgICAgICAgIHNzaXplX3QgKCpzaG93KShzdHJ1Y3QgYnVzX3R5cGUgKiwgY2hhciAqIGJ1Zik7Ci0gICAgICAgIHNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGJ1c190eXBlICosIGNvbnN0IGNoYXIgKiBidWYpOworICAgICAgICBzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBidXNfdHlwZSAqLCBjb25zdCBjaGFyICogYnVmLCBzaXplX3QgY291bnQpOwogfTsKIAogRGVjbGFyaW5nOgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZmF0LnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZhdC50eHQKaW5kZXggZWVkNTIwZi4uZWFkNzY0YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZmF0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3ZmYXQudHh0CkBAIC0xNjUsNyArMTY1LDggQEAKIElmIHlvdSBwbGFuIHRvIG1ha2UgYW55IG1vZGlmaWNhdGlvbnMgdG8gdGhlIHZmYXQgZmlsZXN5c3RlbSwgcGxlYXNlCiBnZXQgdGhlIHRlc3Qgc3VpdGUgdGhhdCBjb21lcyB3aXRoIHRoZSB2ZmF0IGRpc3RyaWJ1dGlvbiBhdAogCi0gIGh0dHA6Ly9ibXJjLmJlcmtlbGV5LmVkdS9wZW9wbGUvY2hhZmZlZS92ZmF0Lmh0bWwKKyAgaHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIvKi9odHRwOi8vYm1yYy5iZXJrZWxleS5lZHUvCisgIHBlb3BsZS9jaGFmZmVlL3ZmYXQuaHRtbAogCiBUaGlzIHRlc3RzIHF1aXRlIGEgZmV3IHBhcnRzIG9mIHRoZSB2ZmF0IGZpbGVzeXN0ZW0gYW5kIGFkZGl0aW9uYWwKIHRlc3RzIGZvciBuZXcgZmVhdHVyZXMgb3IgdW50ZXN0ZWQgZmVhdHVyZXMgd291bGQgYmUgYXBwcmVjaWF0ZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy50eHQKaW5kZXggOTg3OGY1MC4uN2JmZjNlNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzLnR4dApAQCAtMTMxLDE3ICsxMzEsNiBAQAogCURvbid0IGNoZWNrIGZvciBkb3VibGUgbW91bnRlZCBmaWxlIHN5c3RlbXMgdXNpbmcgdGhlIGZpbGUgc3lzdGVtIHV1aWQuCiAJVGhpcyBpcyB1c2VmdWwgdG8gbW91bnQgTFZNIHNuYXBzaG90IHZvbHVtZXMuCiAKLSAgb3N5bmNpc29zeW5jCi0JTWFrZSBPX1NZTkMgd3JpdGVzIGltcGxlbWVudCB0cnVlIE9fU1lOQy4gIFdJVEhPVVQgdGhpcyBvcHRpb24sCi0JTGludXggWEZTIGJlaGF2ZXMgYXMgaWYgYW4gIm9zeW5jaXNkc3luYyIgb3B0aW9uIGlzIHVzZWQsCi0Jd2hpY2ggd2lsbCBtYWtlIHdyaXRlcyB0byBmaWxlcyBvcGVuZWQgd2l0aCB0aGUgT19TWU5DIGZsYWcgc2V0Ci0JYmVoYXZlIGFzIGlmIHRoZSBPX0RTWU5DIGZsYWcgaGFkIGJlZW4gdXNlZCBpbnN0ZWFkLgotCVRoaXMgY2FuIHJlc3VsdCBpbiBiZXR0ZXIgcGVyZm9ybWFuY2Ugd2l0aG91dCBjb21wcm9taXNpbmcKLQlkYXRhIHNhZmV0eS4KLQlIb3dldmVyIGlmIHRoaXMgb3B0aW9uIGlzIG5vdCBpbiBlZmZlY3QsIHRpbWVzdGFtcCB1cGRhdGVzIGZyb20KLQlPX1NZTkMgd3JpdGVzIGNhbiBiZSBsb3N0IGlmIHRoZSBzeXN0ZW0gY3Jhc2hlcy4KLQlJZiB0aW1lc3RhbXAgdXBkYXRlcyBhcmUgY3JpdGljYWwsIHVzZSB0aGUgb3N5bmNpc29zeW5jIG9wdGlvbi4KLQogICB1cXVvdGEvdXNycXVvdGEvdXFub2VuZm9yY2UvcXVvdGEKIAlVc2VyIGRpc2sgcXVvdGEgYWNjb3VudGluZyBlbmFibGVkLCBhbmQgbGltaXRzIChvcHRpb25hbGx5KQogCWVuZm9yY2VkLiAgUmVmZXIgdG8geGZzX3F1b3RhKDgpIGZvciBmdXJ0aGVyIGRldGFpbHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Zpcm13YXJlX2NsYXNzL2hvdHBsdWctc2NyaXB0IGIvRG9jdW1lbnRhdGlvbi9maXJtd2FyZV9jbGFzcy9ob3RwbHVnLXNjcmlwdAppbmRleCAxOTkwMTMwLi44MTQzYTk1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Zpcm13YXJlX2NsYXNzL2hvdHBsdWctc2NyaXB0CisrKyBiL0RvY3VtZW50YXRpb24vZmlybXdhcmVfY2xhc3MvaG90cGx1Zy1zY3JpcHQKQEAgLTYsMTEgKzYsMTIgQEAKIAogSE9UUExVR19GV19ESVI9L3Vzci9saWIvaG90cGx1Zy9maXJtd2FyZS8KIAotZWNobyAxID4gL3N5cy8kREVWUEFUSC9sb2FkaW5nCi1jYXQgJEhPVFBMVUdfRldfRElSLyRGSVJNV0FSRSA+IC9zeXMvJERFVlBBVEgvZGF0YQotZWNobyAwID4gL3N5cy8kREVWUEFUSC9sb2FkaW5nCi0KLSMgVG8gY2FuY2VsIHRoZSBsb2FkIGluIGNhc2Ugb2YgZXJyb3I6Ci0jCi0jCWVjaG8gLTEgPiAvc3lzLyRERVZQQVRIL2xvYWRpbmcKLSMKK2lmIFsgIiRTVUJTWVNURU0iID09ICJmaXJtd2FyZSIgLWEgIiRBQ1RJT04iID09ICJhZGQiIF07IHRoZW4KKyAgaWYgWyAtZiAkSE9UUExVR19GV19ESVIvJEZJUk1XQVJFIF07IHRoZW4KKyAgICBlY2hvIDEgPiAvc3lzLyRERVZQQVRIL2xvYWRpbmcKKyAgICBjYXQgJEhPVFBMVUdfRldfRElSLyRGSVJNV0FSRSA+IC9zeXMvJERFVlBBVEgvZGF0YQorICAgIGVjaG8gMCA+IC9zeXMvJERFVlBBVEgvbG9hZGluZworICBlbHNlCisgICAgZWNobyAtMSA+IC9zeXMvJERFVlBBVEgvbG9hZGluZworICBmaQorZmkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vYWRtMTAyNiBiL0RvY3VtZW50YXRpb24vaHdtb24vYWRtMTAyNgppbmRleCBmNDMyN2RiLi5kOGZhYmUwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2FkbTEwMjYKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9hZG0xMDI2CkBAIC02LDcgKzYsNyBAQAogICAgIFByZWZpeDogJ2FkbTEwMjYnCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDJjLCAweDJkLCAweDJlCiAgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIEFuYWxvZyBEZXZpY2VzIHdlYnNpdGUKLSAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYW5hbG9nLmNvbS9lbi9wcm9kLzAsLDc2Nl84MjVfQURNMTAyNiwwMC5odG1sCisgICAgICAgICAgICAgICBodHRwOi8vd3d3Lm9uc2VtaS5jb20vUG93ZXJTb2x1dGlvbnMvcHJvZHVjdC5kbz9pZD1BRE0xMDI2CiAKIEF1dGhvcnM6CiAgICAgICAgIFBoaWxpcCBQb2tvcm55IDxwcG9rb3JueUBwZW5ndWluY29tcHV0aW5nLmNvbT4gZm9yIFBlbmd1aW4gQ29tcHV0aW5nCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2c3NjBhIGIvRG9jdW1lbnRhdGlvbi9od21vbi9nNzYwYQppbmRleCBlMDMyZWViLi5jZmM4OTQ1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2c3NjBhCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vZzc2MGEKQEAgLTUsNyArNSw3IEBACiAgICogR2xvYmFsIE1peGVkLW1vZGUgVGVjaG5vbG9neSBJbmMuIEc3NjBBCiAgICAgUHJlZml4OiAnZzc2MGEnCiAgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIEdNVCB3ZWJzaXRlCi0gICAgICBodHRwOi8vd3d3LmdtdC5jb20udHcvZGF0YXNoZWV0L2c3NjBhLnBkZgorICAgICAgaHR0cDovL3d3dy5nbXQuY29tLnR3L3Byb2R1Y3QvZGF0YXNoZWV0L0VEUy03NjBBLnBkZgogCiBBdXRob3I6IEhlcmJlcnQgVmFsZXJpbyBSaWVkZWwgPGh2ckBnbnUub3JnPgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2dsNTE4c20gYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2dsNTE4c20KaW5kZXggMjI5ZjhiNy4uMjZmOWYzYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9nbDUxOHNtCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vZ2w1MThzbQpAQCAtNSwxMSArNSwxMCBAQAogICAqIEdlbmVzeXMgTG9naWMgR0w1MThTTSByZWxlYXNlIDB4MDAKICAgICBQcmVmaXg6ICdnbDUxOHNtJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHgyYyBhbmQgMHgyZAotICAgIERhdGFzaGVldDogaHR0cDovL3d3dy5nZW5lc3lzbG9naWMuY29tL3BkZgogICAqIEdlbmVzeXMgTG9naWMgR0w1MThTTSByZWxlYXNlIDB4ODAKICAgICBQcmVmaXg6ICdnbDUxOHNtJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHgyYyBhbmQgMHgyZAotICAgIERhdGFzaGVldDogaHR0cDovL3d3dy5nZW5lc3lzbG9naWMuY29tL3BkZgorICAgIERhdGFzaGVldDogaHR0cDovL3d3dy5nZW5lc3lzbG9naWMuY29tLwogCiBBdXRob3JzOgogICAgICAgICBGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+LApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9ocGZhbGwuYyBiL0RvY3VtZW50YXRpb24vaHdtb24vaHBmYWxsLmMKaW5kZXggNjgxZWMyMi4uYTRhOGZjNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9ocGZhbGwuYworKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2hwZmFsbC5jCkBAIC0xLDcgKzEsNyBAQAogLyogRGlzayBwcm90ZWN0aW9uIGZvciBIUCBtYWNoaW5lcy4KICAqCiAgKiBDb3B5cmlnaHQgMjAwOCBFcmljIFBpZWwKLSAqIENvcHlyaWdodCAyMDA5IFBhdmVsIE1hY2hlayA8cGF2ZWxAc3VzZS5jej4KKyAqIENvcHlyaWdodCAyMDA5IFBhdmVsIE1hY2hlayA8cGF2ZWxAdWN3LmN6PgogICoKICAqIEdQTHYyLgogICovCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2s4dGVtcCBiL0RvY3VtZW50YXRpb24vaHdtb24vazh0ZW1wCmluZGV4IDAwMDVjNzEuLjcxNmRjMjQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vazh0ZW1wCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vazh0ZW1wCkBAIC01LDcgKzUsNyBAQAogICAqIEFNRCBBdGhsb242NC9GWCBvciBPcHRlcm9uIENQVXMKICAgICBQcmVmaXg6ICdrOHRlbXAnCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IFBDSSBzcGFjZQotICAgIERhdGFzaGVldDogaHR0cDovL3d3dy5hbWQuY29tL3VzLWVuL2Fzc2V0cy9jb250ZW50X3R5cGUvd2hpdGVfcGFwZXJzX2FuZF90ZWNoX2RvY3MvMzI1NTkucGRmCisgICAgRGF0YXNoZWV0OiBodHRwOi8vc3VwcG9ydC5hbWQuY29tL3VzL1Byb2Nlc3Nvcl9UZWNoRG9jcy8zMjU1OS5wZGYKIAogQXV0aG9yOiBSdWRvbGYgTWFyZWsKIENvbnRhY3Q6IFJ1ZG9sZiBNYXJlayA8ci5tYXJla0Bhc3NlbWJsZXIuY3o+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtODUgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtODUKaW5kZXggYTc2YWVmZS4uYjk4ZTBlMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9sbTg1CisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vbG04NQpAQCAtOSwxNSArOSwxNSBAQAogICAqIEFuYWxvZyBEZXZpY2VzIEFETTEwMjcKICAgICBQcmVmaXg6ICdhZG0xMDI3JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHgyYywgMHgyZCwgMHgyZQotICAgIERhdGFzaGVldDogaHR0cDovL3d3dy5hbmFsb2cuY29tL2VuL3Byb2QvMCwsNzY2XzgyNV9BRE0xMDI3LDAwLmh0bWwKKyAgICBEYXRhc2hlZXQ6IGh0dHA6Ly93d3cub25zZW1pLmNvbS9Qb3dlclNvbHV0aW9ucy9wcm9kdWN0LmRvP2lkPUFETTEwMjcKICAgKiBBbmFsb2cgRGV2aWNlcyBBRFQ3NDYzCiAgICAgUHJlZml4OiAnYWR0NzQ2MycKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4MmMsIDB4MmQsIDB4MmUKLSAgICBEYXRhc2hlZXQ6IGh0dHA6Ly93d3cuYW5hbG9nLmNvbS9lbi9wcm9kLzAsLDc2Nl84MjVfQURUNzQ2MywwMC5odG1sCisgICAgRGF0YXNoZWV0OiBodHRwOi8vd3d3Lm9uc2VtaS5jb20vUG93ZXJTb2x1dGlvbnMvcHJvZHVjdC5kbz9pZD1BRFQ3NDYzCiAgICogU01TQyBFTUM2RDEwMCwgU01TQyBFTUM2RDEwMQogICAgIFByZWZpeDogJ2VtYzZkMTAwJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHgyYywgMHgyZCwgMHgyZQotICAgIERhdGFzaGVldDogaHR0cDovL3d3dy5zbXNjLmNvbS9tYWluL3Rvb2xzL2Rpc2NvbnRpbnVlZC82ZDEwMC5wZGYKKyAgICBEYXRhc2hlZXQ6IGh0dHA6Ly93d3cuc21zYy5jb20vbWVkaWEvRG93bmxvYWRzX1B1YmxpYy9kaXNjb250aW51ZWQvNmQxMDAucGRmIAogICAqIFNNU0MgRU1DNkQxMDIKICAgICBQcmVmaXg6ICdlbWM2ZDEwMicKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4MmMsIDB4MmQsIDB4MmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vcGtndGVtcCBiL0RvY3VtZW50YXRpb24vaHdtb24vcGtndGVtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGUxZmIwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9wa2d0ZW1wCkBAIC0wLDAgKzEsMzYgQEAKK0tlcm5lbCBkcml2ZXIgcGtndGVtcAorPT09PT09PT09PT09PT09PT09PT09PQorCitTdXBwb3J0ZWQgY2hpcHM6CisgICogSW50ZWwgZmFtaWx5CisgICAgUHJlZml4OiAncGtndGVtcCcKKyAgICBDUFVJRDoKKyAgICBEYXRhc2hlZXQ6IEludGVsIDY0IGFuZCBJQS0zMiBBcmNoaXRlY3R1cmVzIFNvZnR3YXJlIERldmVsb3BlcidzIE1hbnVhbAorICAgICAgICAgICAgICAgVm9sdW1lIDNBOiBTeXN0ZW0gUHJvZ3JhbW1pbmcgR3VpZGUKKworQXV0aG9yOiBGZW5naHVhIFl1CisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBwZXJtaXRzIHJlYWRpbmcgcGFja2FnZSBsZXZlbCB0ZW1wZXJhdHVyZSBzZW5zb3IgZW1iZWRkZWQgaW5zaWRlCitJbnRlbCBDUFUgcGFja2FnZS4gVGhlIHNlbnNvcnMgY2FuIGJlIGluIGNvcmUsIHVuY29yZSwgbWVtb3J5IGNvbnRyb2xsZXIsIG9yCitvdGhlciBjb21wb25lbnRzIGluIGEgcGFja2FnZS4gVGhlIGZlYXR1cmUgaXMgZmlyc3QgaW1wbGVtZW50ZWQgaW4gSW50ZWwgU2FuZHkKK0JyaWRnZSBwbGF0Zm9ybS4KKworVGVtcGVyYXR1cmUgaXMgbWVhc3VyZWQgaW4gZGVncmVlcyBDZWxzaXVzIGFuZCBtZWFzdXJlbWVudCByZXNvbHV0aW9uIGlzCisxIGRlZ3JlZSBDLiBWYWxpZCB0ZW1wZXJhdHVyZXMgYXJlIGZyb20gMCB0byBUak1heCBkZWdyZWVzIEMsIGJlY2F1c2UgdGhlIGFjdHVhbAordmFsdWUgb2YgdGVtcGVyYXR1cmUgcmVnaXN0ZXIgaXMgaW4gZmFjdCBhIGRlbHRhIGZyb20gVGpNYXguCisKK1RlbXBlcmF0dXJlIGtub3duIGFzIFRqTWF4IGlzIHRoZSBtYXhpbXVtIGp1bmN0aW9uIHRlbXBlcmF0dXJlIG9mIHBhY2thZ2UuCitXZSBnZXQgdGhpcyBmcm9tIE1TUl9JQTMyX1RFTVBFUkFUVVJFX1RBUkdFVC4gSWYgdGhlIE1TUiBpcyBub3QgYWNjZXNzaWJsZSwKK3dlIGRlZmluZSBUak1heCBhcyAxMDAgZGVncmVlcyBDZWxzaXVzLiBBdCB0aGlzIHRlbXBlcmF0dXJlLCBwcm90ZWN0aW9uCittZWNoYW5pc20gd2lsbCBwZXJmb3JtIGFjdGlvbnMgdG8gZm9yY2libHkgY29vbCBkb3duIHRoZSBwYWNrYWdlLiBBbGFybQorbWF5IGJlIHJhaXNlZCwgaWYgdGhlIHRlbXBlcmF0dXJlIGdyb3dzIGVub3VnaCAobW9yZSB0aGFuIFRqTWF4KSB0byB0cmlnZ2VyCit0aGUgT3V0LU9mLVNwZWMgYml0LiBGb2xsb3dpbmcgdGFibGUgc3VtbWFyaXplcyB0aGUgZXhwb3J0ZWQgc3lzZnMgZmlsZXM6CisKK3RlbXAxX2lucHV0CSAgLSBQYWNrYWdlIHRlbXBlcmF0dXJlIChpbiBtaWxsaWRlZ3JlZXMgQ2Vsc2l1cykuCit0ZW1wMV9tYXggICAgICAgIC0gQWxsIGNvb2xpbmcgZGV2aWNlcyBzaG91bGQgYmUgdHVybmVkIG9uLgordGVtcDFfY3JpdAkgIC0gTWF4aW11bSBqdW5jdGlvbiB0ZW1wZXJhdHVyZSAoaW4gbWlsbGlkZWdyZWVzIENlbHNpdXMpLgordGVtcDFfY3JpdF9hbGFybSAtIFNldCB3aGVuIE91dC1vZi1zcGVjIGJpdCBpcyBzZXQsIG5ldmVyIGNsZWFycy4KKwkJICAgIENvcnJlY3QgQ1BVIG9wZXJhdGlvbiBpcyBubyBsb25nZXIgZ3VhcmFudGVlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vc21zYzQ3bTEgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3Ntc2M0N20xCmluZGV4IDQyYzg0MzEuLjJhMTMzNzggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vc21zYzQ3bTEKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9zbXNjNDdtMQpAQCAtNywxMyArNywxMCBAQAogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBub25lLCBhZGRyZXNzIHJlYWQgZnJvbSBTdXBlciBJL08gY29uZmlnIHNwYWNlCiAgICAgUHJlZml4OiAnc21zYzQ3bTEnCiAgICAgRGF0YXNoZWV0czoKLSAgICAgICAgaHR0cDovL3d3dy5zbXNjLmNvbS9tYWluL2RhdGFzaGVldHMvNDdiMjd4LnBkZgotICAgICAgICBodHRwOi8vd3d3LnNtc2MuY29tL21haW4vZGF0YXNoZWV0cy80N20xMHgucGRmCi0gICAgICAgIGh0dHA6Ly93d3cuc21zYy5jb20vbWFpbi9kYXRhc2hlZXRzLzQ3bTExMi5wZGYKLSAgICAgICAgaHR0cDovL3d3dy5zbXNjLmNvbS9tYWluL3Rvb2xzL2Rpc2NvbnRpbnVlZC80N20xM3gucGRmCi0gICAgICAgIGh0dHA6Ly93d3cuc21zYy5jb20vbWFpbi9kYXRhc2hlZXRzLzQ3bTE0eC5wZGYKLSAgICAgICAgaHR0cDovL3d3dy5zbXNjLmNvbS9tYWluL3Rvb2xzL2Rpc2NvbnRpbnVlZC80N20xNXgucGRmCi0gICAgICAgIGh0dHA6Ly93d3cuc21zYy5jb20vbWFpbi9kYXRhc2hlZXRzLzQ3bTE5Mi5wZGYKKyAgICAgICAgaHR0cDovL3d3dy5zbXNjLmNvbS9tZWRpYS9Eb3dubG9hZHNfUHVibGljL0RhdGFfU2hlZXRzLzQ3YjI3Mi5wZGYKKyAgICAgICAgaHR0cDovL3d3dy5zbXNjLmNvbS9tZWRpYS9Eb3dubG9hZHNfUHVibGljL0RhdGFfU2hlZXRzLzQ3bTEweC5wZGYKKyAgICAgICAgaHR0cDovL3d3dy5zbXNjLmNvbS9tZWRpYS9Eb3dubG9hZHNfUHVibGljL0RhdGFfU2hlZXRzLzQ3bTExMi5wZGYKKyAgICAgICAgaHR0cDovL3d3dy5zbXNjLmNvbS8KICAgKiBTTVNDIExQQzQ3TTI5MgogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBub25lLCBhZGRyZXNzIHJlYWQgZnJvbSBTdXBlciBJL08gY29uZmlnIHNwYWNlCiAgICAgUHJlZml4OiAnc21zYzQ3bTInCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3RobWM1MCBiL0RvY3VtZW50YXRpb24vaHdtb24vdGhtYzUwCmluZGV4IDk2MzljYTkuLjhhNzc3MmEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vdGhtYzUwCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vdGhtYzUwCkBAIC05LDcgKzksNyBAQAogICAqIFRleGFzIEluc3RydW1lbnRzIFRITUM1MAogICAgIFByZWZpeDogJ3RobWM1MCcKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4MmMgLSAweDJlCi0gICAgRGF0YXNoZWV0OiBodHRwOi8vZm9jdXMudGkuY29tL2RvY3MvcHJvZC9mb2xkZXJzL3ByaW50L3RobWM1MC5odG1sCisgICAgRGF0YXNoZWV0OiBodHRwOi8vd3d3LnRpLmNvbS8gCiAKIEF1dGhvcjogS3J6eXN6dG9mIEhlbHQgPGtyenlzenRvZi5oMUB3cC5wbD4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi92aWE2ODZhIGIvRG9jdW1lbnRhdGlvbi9od21vbi92aWE2ODZhCmluZGV4IGQ2NTFiMjUuLmU1ZjkwYWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vdmlhNjg2YQorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3ZpYTY4NmEKQEAgLTUsNyArNSw3IEBACiAgICogVmlhIFZUODJDNjg2QSwgVlQ4MkM2ODZCICBTb3V0aGJyaWRnZSBJbnRlZ3JhdGVkIEhhcmR3YXJlIE1vbml0b3IKICAgICBQcmVmaXg6ICd2aWE2ODZhJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJU0EgaW4gUENJLXNwYWNlIGVuY29kZWQgYWRkcmVzcwotICAgIERhdGFzaGVldDogT24gcmVxdWVzdCB0aHJvdWdoIHdlYiBmb3JtIChodHRwOi8vd3d3LnZpYS5jb20udHcvZW4vc3VwcG9ydC9kYXRhc2hlZXRzLykKKyAgICBEYXRhc2hlZXQ6IE9uIHJlcXVlc3QgdGhyb3VnaCB3ZWIgZm9ybSAoaHR0cDovL3d3dy52aWEuY29tLnR3L2VuL3Jlc291cmNlcy9kb3dubG9hZC1jZW50ZXIvKQogCiBBdXRob3JzOgogICAgICAgICBLecO2c3RpIE3DpGxra2kgPGttYWxra2lAY2MuaHV0LmZpPiwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNjI3aGYgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4MzYyN2hmCmluZGV4IDQ0ZGQyYmMuLmZiMTQ1ZTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNjI3aGYKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi93ODM2MjdoZgpAQCAtNSwyMyArNSwxOSBAQAogICAqIFdpbmJvbmQgVzgzNjI3SEYgKElTQSBhY2Nlc3NlcyBPTkxZKQogICAgIFByZWZpeDogJ3c4MzYyN2hmJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJU0EgYWRkcmVzcyByZXRyaWV2ZWQgZnJvbSBTdXBlciBJL08gcmVnaXN0ZXJzCi0gICAgRGF0YXNoZWV0OiBodHRwOi8vd3d3LndpbmJvbmQuY29tL1BERi9zaGVldC93ODM2MjdoZi5wZGYKICAgKiBXaW5ib25kIFc4MzYyN1RIRgogICAgIFByZWZpeDogJ3c4MzYyN3RoZicKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSVNBIGFkZHJlc3MgcmV0cmlldmVkIGZyb20gU3VwZXIgSS9PIHJlZ2lzdGVycwotICAgIERhdGFzaGVldDogaHR0cDovL3d3dy53aW5ib25kLmNvbS9QREYvc2hlZXQvdzgzNjI3dGhmLnBkZgogICAqIFdpbmJvbmQgVzgzNjk3SEYKICAgICBQcmVmaXg6ICd3ODM2OTdoZicKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSVNBIGFkZHJlc3MgcmV0cmlldmVkIGZyb20gU3VwZXIgSS9PIHJlZ2lzdGVycwotICAgIERhdGFzaGVldDogaHR0cDovL3d3dy53aW5ib25kLmNvbS9QREYvc2hlZXQvNjk3aGYucGRmCiAgICogV2luYm9uZCBXODM2MzdIRgogICAgIFByZWZpeDogJ3c4MzYzN2hmJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJU0EgYWRkcmVzcyByZXRyaWV2ZWQgZnJvbSBTdXBlciBJL08gcmVnaXN0ZXJzCi0gICAgRGF0YXNoZWV0OiBodHRwOi8vd3d3LndpbmJvbmQuY29tL1BERi9zaGVldC93ODM2MzdoZi5wZGYKICAgKiBXaW5ib25kIFc4MzY4N1RIRgogICAgIFByZWZpeDogJ3c4MzY4N3RoZicKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSVNBIGFkZHJlc3MgcmV0cmlldmVkIGZyb20gU3VwZXIgSS9PIHJlZ2lzdGVycwotICAgIERhdGFzaGVldDogUHJvdmlkZWQgYnkgV2luYm9uZCBvbiByZXF1ZXN0CisgICAgRGF0YXNoZWV0OiBQcm92aWRlZCBieSBXaW5ib25kIG9uIHJlcXVlc3QoaHR0cDovL3d3dy53aW5ib25kLmNvbS9ocS9lbnUpCiAKIEF1dGhvcnM6CiAgICAgICAgIEZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc4MWQgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc4MWQKaW5kZXggYzkxZTBiNi4uZWNiYzFlNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3ODFkCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzgxZApAQCAtOSw3ICs5LDcgQEAKICAgKiBXaW5ib25kIFc4Mzc4MkQKICAgICBQcmVmaXg6ICd3ODM3ODJkJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHgyOCAtIDB4MmYsIElTQSAweDI5MCAoOCBJL08gcG9ydHMpCi0gICAgRGF0YXNoZWV0OiBodHRwOi8vd3d3LndpbmJvbmQuY29tL1BERi9zaGVldC93ODM3ODJkLnBkZgorICAgIERhdGFzaGVldDogaHR0cDovL3d3dy53aW5ib25kLmNvbQogICAqIFdpbmJvbmQgVzgzNzgzUwogICAgIFByZWZpeDogJ3c4Mzc4M3MnCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDJkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc5MmQgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc5MmQKaW5kZXggMTRhNjY4ZS4uOGEwMjNjZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3OTJkCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzkyZApAQCAtNSw3ICs1LDcgQEAKICAgKiBXaW5ib25kIFc4Mzc5MkQKICAgICBQcmVmaXg6ICd3ODM3OTJkJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHgyYyAtIDB4MmYKLSAgICBEYXRhc2hlZXQ6IGh0dHA6Ly93d3cud2luYm9uZC5jb20udHcvRS1XSU5CT05ESFRNL3BhcnRuZXIvUERGcmVzdWx0LmFzcD9QbmFtZT0xMDM1CisgICAgRGF0YXNoZWV0OiBodHRwOi8vd3d3LndpbmJvbmQuY29tLnR3CiAKIEF1dGhvcjogQ2h1bmhhbyBIdWFuZwogQ29udGFjdDogRFpTaGVuIDxEWlNoZW5AV2luYm9uZC5jb20udHc+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWFsaTE1MzUgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWFsaTE1MzUKaW5kZXggYWNiYzY1YS4uNWQ0NjM0MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbGkxNTM1CisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtYWxpMTUzNQpAQCAtMyw3ICszLDcgQEAKIFN1cHBvcnRlZCBhZGFwdGVyczoKICAgKiBBY2VyIExhYnMsIEluYy4gQUxJIDE1MzUgKHNvdXRoIGJyaWRnZSkKICAgICBEYXRhc2hlZXQ6IE5vdyB1bmRlciBOREEKLQlodHRwOi8vd3d3LmFsaS5jb20udHcvZW5nL3N1cHBvcnQvZGF0YXNoZWV0X3JlcXVlc3QucGhwCisJaHR0cDovL3d3dy5hbGkuY29tLnR3LwogCiBBdXRob3JzOgogCUZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWFsaTE1NjMgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWFsaTE1NjMKaW5kZXggNTQ2OTE2OS4uNDFiMWEwNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbGkxNTYzCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtYWxpMTU2MwpAQCAtMyw3ICszLDcgQEAKIFN1cHBvcnRlZCBhZGFwdGVyczoKICAgKiBBY2VyIExhYnMsIEluYy4gQUxJIDE1NjMgKHNvdXRoIGJyaWRnZSkKICAgICBEYXRhc2hlZXQ6IE5vdyB1bmRlciBOREEKLQlodHRwOi8vd3d3LmFsaS5jb20udHcvZW5nL3N1cHBvcnQvZGF0YXNoZWV0X3JlcXVlc3QucGhwCisJaHR0cDovL3d3dy5hbGkuY29tLnR3LwogCiBBdXRob3I6IFBhdHJpY2sgTW9jaGVsIDxtb2NoZWxAZGlnaXRhbGltcGxhbnQub3JnPgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWFsaTE1eDMgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWFsaTE1eDMKaW5kZXggNjAwZGE5MC4uNDI4ODhkOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbGkxNXgzCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtYWxpMTV4MwpAQCAtMyw3ICszLDcgQEAKIFN1cHBvcnRlZCBhZGFwdGVyczoKICAgKiBBY2VyIExhYnMsIEluYy4gQUxJIDE1MzMgYW5kIDE1NDNDIChzb3V0aCBicmlkZ2UpCiAgICAgRGF0YXNoZWV0OiBOb3cgdW5kZXIgTkRBCi0JaHR0cDovL3d3dy5hbGkuY29tLnR3L2VuZy9zdXBwb3J0L2RhdGFzaGVldF9yZXF1ZXN0LnBocAorCWh0dHA6Ly93d3cuYWxpLmNvbS50dy8KIAogQXV0aG9yczoKIAlGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+LApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1waWl4NCBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGlpeDQKaW5kZXggYWM1NDBjNy4uNDc1YmI0YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1waWl4NAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBpaXg0CkBAIC05Nyw0ICs5Nyw0IEBACiB0aGUgU01CdXMgb24gYWxsIElCTSBzeXN0ZW1zIChkZXRlY3RlZCB1c2luZyBETUkgZGF0YS4pCiAKIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCByZWFkOgotaHR0cDovL3d3dy5sbS1zZW5zb3JzLm9yZy9icm93c2VyL2xtLXNlbnNvcnMvdHJ1bmsvUkVBRE1FLnRoaW5rcGFkCitodHRwOi8vd3d3LmxtLXNlbnNvcnMub3JnL2Jyb3dzZXIvbG0tc2Vuc29ycy90cnVuay9SRUFETUUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtc2lzNjMwIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1zaXM2MzAKaW5kZXggNjI5ZWEyYzMuLjBiOTY5NzMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtc2lzNjMwCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtc2lzNjMwCkBAIC0yLDcgKzIsNyBAQAogCiBTdXBwb3J0ZWQgYWRhcHRlcnM6CiAgICogU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbXMgQ29ycCAoU2lTKQotCTYzMCBjaGlwc2V0IChEYXRhc2hlZXQ6IGF2YWlsYWJsZSBhdCBodHRwOi8vYW1hbHlzaC5iZWkudC1vbmxpbmUuZGUvZG9jcy9TSVMvKQorCTYzMCBjaGlwc2V0IChEYXRhc2hlZXQ6IGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnNmci1mcmVzaC5jb20vbGludXgpCiAJNzMwIGNoaXBzZXQKICAgKiBQb3NzaWJsZSBvdGhlciBTaVMgY2hpcHNldHMgPwogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lhNjQvYWxpYXNpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9pYTY0L2FsaWFzaW5nLnR4dAppbmRleCBhYTNlOTUzLi41YTRkZWE2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lhNjQvYWxpYXNpbmcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaWE2NC9hbGlhc2luZy50eHQKQEAgLTE2OCw4ICsxNjgsNiBAQAogCiAgICAgbW1hcCBvZiAweDAtMHg5RkZGRiAvZGV2L21lbSBieSAiaHdpbmZvIiBvbiBIUCBzeDEwMDAgd2l0aCBWR0EgZW5hYmxlZAogCi0gICAgICBTZWUgaHR0cHM6Ly9idWd6aWxsYS5ub3ZlbGwuY29tL3Nob3dfYnVnLmNnaT9pZD0xNDA4NTguCi0KICAgICAgIFRoZSBFRkkgbWVtb3J5IG1hcCByZXBvcnRzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKICAgICAgICAgMHgwMDAwMC0weDlGRkZGIFdCIG9ubHkKICAgICAgICAgMHhBMDAwMC0weEJGRkZGIFVDIG9ubHkgKFZHQSBmcmFtZSBidWZmZXIpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lhNjQvc2VyaWFsLnR4dCBiL0RvY3VtZW50YXRpb24vaWE2NC9zZXJpYWwudHh0CmluZGV4IDA0MGI5NzcuLjY4NjljNzMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaWE2NC9zZXJpYWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaWE2NC9zZXJpYWwudHh0CkBAIC0xMzMsNyArMTMzLDcgQEAKIAogCiAKLVsxXSBodHRwOi8vd3d3LmRpZzY0Lm9yZy9zcGVjaWZpY2F0aW9ucy9ESUc2NF9QQ0RQdjIwLnBkZgorWzFdIGh0dHA6Ly93d3cuZGlnNjQub3JnL3NwZWNpZmljYXRpb25zL2FncmVlbWVudCAKICAgICBUaGUgdGFibGUgd2FzIG9yaWdpbmFsbHkgZGVmaW5lZCBhcyB0aGUgIkhDRFAiIGZvciAiSGVhZGxlc3MKICAgICBDb25zb2xlL0RlYnVnIFBvcnQuIiAgVGhlIGN1cnJlbnQgdmVyc2lvbiBpcyB0aGUgIlBDRFAiIGZvcgogICAgICJQcmltYXJ5IENvbnNvbGUgYW5kIERlYnVnIFBvcnQgRGV2aWNlcy4iCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvdXNlcl92ZXJicy50eHQgYi9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvdXNlcl92ZXJicy50eHQKaW5kZXggYWZlM2Y4ZC4uZTUwOTJkNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL3VzZXJfdmVyYnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaW5maW5pYmFuZC91c2VyX3ZlcmJzLnR4dApAQCAtNSw3ICs1LDcgQEAKICAgZGVzY3JpYmVkIGluIGNoYXB0ZXIgMTEgb2YgdGhlIEluZmluaUJhbmQgQXJjaGl0ZWN0dXJlIFNwZWNpZmljYXRpb24uCiAKICAgVG8gdXNlIHRoZSB2ZXJicywgdGhlIGxpYmlidmVyYnMgbGlicmFyeSwgYXZhaWxhYmxlIGZyb20KLSAgPGh0dHA6Ly9vcGVuaWIub3JnLz4sIGlzIHJlcXVpcmVkLiAgbGliaWJ2ZXJicyBjb250YWlucyBhCisgIGh0dHA6Ly93d3cub3BlbmZhYnJpY3Mub3JnLywgaXMgcmVxdWlyZWQuICBsaWJpYnZlcmJzIGNvbnRhaW5zIGEKICAgZGV2aWNlLWluZGVwZW5kZW50IEFQSSBmb3IgdXNpbmcgdGhlIGliX3V2ZXJicyBpbnRlcmZhY2UuCiAgIGxpYmlidmVyYnMgYWxzbyByZXF1aXJlcyBhcHByb3ByaWF0ZSBkZXZpY2UtZGVwZW5kZW50IGtlcm5lbCBhbmQKICAgdXNlcnNwYWNlIGRyaXZlciBmb3IgeW91ciBJbmZpbmlCYW5kIGhhcmR3YXJlLiAgRm9yIGV4YW1wbGUsIHRvIHVzZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9hcHBsZXRvdWNoLnR4dCBiL0RvY3VtZW50YXRpb24vaW5wdXQvYXBwbGV0b3VjaC50eHQKaW5kZXggNGY3YzYzMy4uYjEzZGUzZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9hcHBsZXRvdWNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2FwcGxldG91Y2gudHh0CkBAIC04Miw0ICs4Miw0IEBACiAtLS0tLS0KIAogWzFdOiBodHRwOi8vam9oYW5uZXMuc2lwc29sdXRpb25zLm5ldC9Qb3dlckJvb2svdG91Y2hwYWQvCi1bMl06IGh0dHA6Ly93ZWIudGVsaWEuY29tL351ODk0MDQzNDAvdG91Y2hwYWQvaW5kZXguaHRtbAorWzJdOiBodHRwOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8qL2h0dHA6Ly93ZWIudGVsaWEuY29tL351ODk0MDQzNDAvdG91Y2hwYWQvaW5kZXguaHRtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9iY201OTc0LnR4dCBiL0RvY3VtZW50YXRpb24vaW5wdXQvYmNtNTk3NC50eHQKaW5kZXggNWUyMmRjZi4uNzRkMzg3NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9iY201OTc0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2JjbTU5NzQudHh0CkBAIC02Miw0ICs2Miw0IEBACiAtLS0tLQogCiBbMV0gaHR0cDovL3VidW50dWZvcnVtcy5vcmcvc2hvd3RocmVhZC5waHA/dD04NDAwNDAKLVsyXSBodHRwOi8vaHR0cDovL2JpdG1hdGgub3JnL2NvZGUvCitbMl0gaHR0cDovL2JpdG1hdGgub3JnL2NvZGUvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lucHV0L2lmb3JjZS1wcm90b2NvbC50eHQgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2lmb3JjZS1wcm90b2NvbC50eHQKaW5kZXggM2FjOTI0MS4uMmQ1ZmJmZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9pZm9yY2UtcHJvdG9jb2wudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvaWZvcmNlLXByb3RvY29sLnR4dApAQCAtMjUxLDcgKzI1MSw3IEBACiAKICoqIEF1dGhvciBvZiB0aGlzIGRvY3VtZW50ICoqCiBKb2hhbm4gRGVuZXV4IDxqb2hhbm4uZGVuZXV4QGdtYWlsLmNvbT4KLUhvbWUgcGFnZSBhdCBodHRwOi8vd3d3LmVzaWwudW5pdi1tcnMuZnIvfmpkZW5ldXgvcHJvamVjdHMvZmYvCitIb21lIHBhZ2UgYXQgaHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIvKi9odHRwOi8vd3d3LmVzaWwudW5pdi1tcnMuZnIKIAogQWRkaXRpb25zIGJ5IFZvanRlY2ggUGF2bGlrLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lucHV0L211bHRpLXRvdWNoLXByb3RvY29sLnR4dCBiL0RvY3VtZW50YXRpb24vaW5wdXQvbXVsdGktdG91Y2gtcHJvdG9jb2wudHh0CmluZGV4IGMwZmMxYzcuLmJkY2JhMTU0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lucHV0L211bHRpLXRvdWNoLXByb3RvY29sLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2lucHV0L211bHRpLXRvdWNoLXByb3RvY29sLnR4dApAQCAtNiwzMSArNiwxNDkgQEAKIEludHJvZHVjdGlvbgogLS0tLS0tLS0tLS0tCiAKLUluIG9yZGVyIHRvIHV0aWxpemUgdGhlIGZ1bGwgcG93ZXIgb2YgdGhlIG5ldyBtdWx0aS10b3VjaCBkZXZpY2VzLCBhIHdheSB0bwotcmVwb3J0IGRldGFpbGVkIGZpbmdlciBkYXRhIHRvIHVzZXIgc3BhY2UgaXMgbmVlZGVkLiBUaGlzIGRvY3VtZW50Ci1kZXNjcmliZXMgdGhlIG11bHRpLXRvdWNoIChNVCkgcHJvdG9jb2wgd2hpY2ggYWxsb3dzIGtlcm5lbCBkcml2ZXJzIHRvCi1yZXBvcnQgZGV0YWlscyBmb3IgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBmaW5nZXJzLgorSW4gb3JkZXIgdG8gdXRpbGl6ZSB0aGUgZnVsbCBwb3dlciBvZiB0aGUgbmV3IG11bHRpLXRvdWNoIGFuZCBtdWx0aS11c2VyCitkZXZpY2VzLCBhIHdheSB0byByZXBvcnQgZGV0YWlsZWQgZGF0YSBmcm9tIG11bHRpcGxlIGNvbnRhY3RzLCBpLmUuLAorb2JqZWN0cyBpbiBkaXJlY3QgY29udGFjdCB3aXRoIHRoZSBkZXZpY2Ugc3VyZmFjZSwgaXMgbmVlZGVkLiAgVGhpcworZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBtdWx0aS10b3VjaCAoTVQpIHByb3RvY29sIHdoaWNoIGFsbG93cyBrZXJuZWwKK2RyaXZlcnMgdG8gcmVwb3J0IGRldGFpbHMgZm9yIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgY29udGFjdHMuCisKK1RoZSBwcm90b2NvbCBpcyBkaXZpZGVkIGludG8gdHdvIHR5cGVzLCBkZXBlbmRpbmcgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUKK2hhcmR3YXJlLiBGb3IgZGV2aWNlcyBoYW5kbGluZyBhbm9ueW1vdXMgY29udGFjdHMgKHR5cGUgQSksIHRoZSBwcm90b2NvbAorZGVzY3JpYmVzIGhvdyB0byBzZW5kIHRoZSByYXcgZGF0YSBmb3IgYWxsIGNvbnRhY3RzIHRvIHRoZSByZWNlaXZlci4gRm9yCitkZXZpY2VzIGNhcGFibGUgb2YgdHJhY2tpbmcgaWRlbnRpZmlhYmxlIGNvbnRhY3RzICh0eXBlIEIpLCB0aGUgcHJvdG9jb2wKK2Rlc2NyaWJlcyBob3cgdG8gc2VuZCB1cGRhdGVzIGZvciBpbmRpdmlkdWFsIGNvbnRhY3RzIHZpYSBldmVudCBzbG90cy4KIAogCi1Vc2FnZQotLS0tLS0KK1Byb3RvY29sIFVzYWdlCistLS0tLS0tLS0tLS0tLQogCi1Bbm9ueW1vdXMgZmluZ2VyIGRldGFpbHMgYXJlIHNlbnQgc2VxdWVudGlhbGx5IGFzIHNlcGFyYXRlIHBhY2tldHMgb2YgQUJTCi1ldmVudHMuIE9ubHkgdGhlIEFCU19NVCBldmVudHMgYXJlIHJlY29nbml6ZWQgYXMgcGFydCBvZiBhIGZpbmdlcgotcGFja2V0LiBUaGUgZW5kIG9mIGEgcGFja2V0IGlzIG1hcmtlZCBieSBjYWxsaW5nIHRoZSBpbnB1dF9tdF9zeW5jKCkKLWZ1bmN0aW9uLCB3aGljaCBnZW5lcmF0ZXMgYSBTWU5fTVRfUkVQT1JUIGV2ZW50LiBUaGlzIGluc3RydWN0cyB0aGUKLXJlY2VpdmVyIHRvIGFjY2VwdCB0aGUgZGF0YSBmb3IgdGhlIGN1cnJlbnQgZmluZ2VyIGFuZCBwcmVwYXJlIHRvIHJlY2VpdmUKLWFub3RoZXIuIFRoZSBlbmQgb2YgYSBtdWx0aS10b3VjaCB0cmFuc2ZlciBpcyBtYXJrZWQgYnkgY2FsbGluZyB0aGUgdXN1YWwKK0NvbnRhY3QgZGV0YWlscyBhcmUgc2VudCBzZXF1ZW50aWFsbHkgYXMgc2VwYXJhdGUgcGFja2V0cyBvZiBBQlNfTVQKK2V2ZW50cy4gT25seSB0aGUgQUJTX01UIGV2ZW50cyBhcmUgcmVjb2duaXplZCBhcyBwYXJ0IG9mIGEgY29udGFjdAorcGFja2V0LiBTaW5jZSB0aGVzZSBldmVudHMgYXJlIGlnbm9yZWQgYnkgY3VycmVudCBzaW5nbGUtdG91Y2ggKFNUKQorYXBwbGljYXRpb25zLCB0aGUgTVQgcHJvdG9jb2wgY2FuIGJlIGltcGxlbWVudGVkIG9uIHRvcCBvZiB0aGUgU1QgcHJvdG9jb2wKK2luIGFuIGV4aXN0aW5nIGRyaXZlci4KKworRHJpdmVycyBmb3IgdHlwZSBBIGRldmljZXMgc2VwYXJhdGUgY29udGFjdCBwYWNrZXRzIGJ5IGNhbGxpbmcKK2lucHV0X210X3N5bmMoKSBhdCB0aGUgZW5kIG9mIGVhY2ggcGFja2V0LiBUaGlzIGdlbmVyYXRlcyBhIFNZTl9NVF9SRVBPUlQKK2V2ZW50LCB3aGljaCBpbnN0cnVjdHMgdGhlIHJlY2VpdmVyIHRvIGFjY2VwdCB0aGUgZGF0YSBmb3IgdGhlIGN1cnJlbnQKK2NvbnRhY3QgYW5kIHByZXBhcmUgdG8gcmVjZWl2ZSBhbm90aGVyLgorCitEcml2ZXJzIGZvciB0eXBlIEIgZGV2aWNlcyBzZXBhcmF0ZSBjb250YWN0IHBhY2tldHMgYnkgY2FsbGluZworaW5wdXRfbXRfc2xvdCgpLCB3aXRoIGEgc2xvdCBhcyBhcmd1bWVudCwgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHBhY2tldC4KK1RoaXMgZ2VuZXJhdGVzIGFuIEFCU19NVF9TTE9UIGV2ZW50LCB3aGljaCBpbnN0cnVjdHMgdGhlIHJlY2VpdmVyIHRvCitwcmVwYXJlIGZvciB1cGRhdGVzIG9mIHRoZSBnaXZlbiBzbG90LgorCitBbGwgZHJpdmVycyBtYXJrIHRoZSBlbmQgb2YgYSBtdWx0aS10b3VjaCB0cmFuc2ZlciBieSBjYWxsaW5nIHRoZSB1c3VhbAogaW5wdXRfc3luYygpIGZ1bmN0aW9uLiBUaGlzIGluc3RydWN0cyB0aGUgcmVjZWl2ZXIgdG8gYWN0IHVwb24gZXZlbnRzCi1hY2N1bXVsYXRlZCBzaW5jZSBsYXN0IEVWX1NZTi9TWU5fUkVQT1JUIGFuZCBwcmVwYXJlIHRvIHJlY2VpdmUgYSBuZXcKLXNldCBvZiBldmVudHMvcGFja2V0cy4KK2FjY3VtdWxhdGVkIHNpbmNlIGxhc3QgRVZfU1lOL1NZTl9SRVBPUlQgYW5kIHByZXBhcmUgdG8gcmVjZWl2ZSBhIG5ldyBzZXQKK29mIGV2ZW50cy9wYWNrZXRzLgorCitUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHN0YXRlbGVzcyB0eXBlIEEgcHJvdG9jb2wgYW5kIHRoZSBzdGF0ZWZ1bAordHlwZSBCIHNsb3QgcHJvdG9jb2wgbGllcyBpbiB0aGUgdXNhZ2Ugb2YgaWRlbnRpZmlhYmxlIGNvbnRhY3RzIHRvIHJlZHVjZQordGhlIGFtb3VudCBvZiBkYXRhIHNlbnQgdG8gdXNlcnNwYWNlLiBUaGUgc2xvdCBwcm90b2NvbCByZXF1aXJlcyB0aGUgdXNlIG9mCit0aGUgQUJTX01UX1RSQUNLSU5HX0lELCBlaXRoZXIgcHJvdmlkZWQgYnkgdGhlIGhhcmR3YXJlIG9yIGNvbXB1dGVkIGZyb20KK3RoZSByYXcgZGF0YSBbNV0uCisKK0ZvciB0eXBlIEEgZGV2aWNlcywgdGhlIGtlcm5lbCBkcml2ZXIgc2hvdWxkIGdlbmVyYXRlIGFuIGFyYml0cmFyeQorZW51bWVyYXRpb24gb2YgdGhlIGZ1bGwgc2V0IG9mIGFub255bW91cyBjb250YWN0cyBjdXJyZW50bHkgb24gdGhlCitzdXJmYWNlLiBUaGUgb3JkZXIgaW4gd2hpY2ggdGhlIHBhY2tldHMgYXBwZWFyIGluIHRoZSBldmVudCBzdHJlYW0gaXMgbm90CitpbXBvcnRhbnQuICBFdmVudCBmaWx0ZXJpbmcgYW5kIGZpbmdlciB0cmFja2luZyBpcyBsZWZ0IHRvIHVzZXIgc3BhY2UgWzNdLgorCitGb3IgdHlwZSBCIGRldmljZXMsIHRoZSBrZXJuZWwgZHJpdmVyIHNob3VsZCBhc3NvY2lhdGUgYSBzbG90IHdpdGggZWFjaAoraWRlbnRpZmllZCBjb250YWN0LCBhbmQgdXNlIHRoYXQgc2xvdCB0byBwcm9wYWdhdGUgY2hhbmdlcyBmb3IgdGhlIGNvbnRhY3QuCitDcmVhdGlvbiwgcmVwbGFjZW1lbnQgYW5kIGRlc3RydWN0aW9uIG9mIGNvbnRhY3RzIGlzIGFjaGlldmVkIGJ5IG1vZGlmeWluZwordGhlIEFCU19NVF9UUkFDS0lOR19JRCBvZiB0aGUgYXNzb2NpYXRlZCBzbG90LiAgQSBub24tbmVnYXRpdmUgdHJhY2tpbmcgaWQKK2lzIGludGVycHJldGVkIGFzIGEgY29udGFjdCwgYW5kIHRoZSB2YWx1ZSAtMSBkZW5vdGVzIGFuIHVudXNlZCBzbG90LiAgQQordHJhY2tpbmcgaWQgbm90IHByZXZpb3VzbHkgcHJlc2VudCBpcyBjb25zaWRlcmVkIG5ldywgYW5kIGEgdHJhY2tpbmcgaWQgbm8KK2xvbmdlciBwcmVzZW50IGlzIGNvbnNpZGVyZWQgcmVtb3ZlZC4gIFNpbmNlIG9ubHkgY2hhbmdlcyBhcmUgcHJvcGFnYXRlZCwKK3RoZSBmdWxsIHN0YXRlIG9mIGVhY2ggaW5pdGlhdGVkIGNvbnRhY3QgaGFzIHRvIHJlc2lkZSBpbiB0aGUgcmVjZWl2aW5nCitlbmQuICBVcG9uIHJlY2VpdmluZyBhbiBNVCBldmVudCwgb25lIHNpbXBseSB1cGRhdGVzIHRoZSBhcHByb3ByaWF0ZQorYXR0cmlidXRlIG9mIHRoZSBjdXJyZW50IHNsb3QuCisKKworUHJvdG9jb2wgRXhhbXBsZSBBCistLS0tLS0tLS0tLS0tLS0tLS0KKworSGVyZSBpcyB3aGF0IGEgbWluaW1hbCBldmVudCBzZXF1ZW5jZSBmb3IgYSB0d28tY29udGFjdCB0b3VjaCB3b3VsZCBsb29rCitsaWtlIGZvciBhIHR5cGUgQSBkZXZpY2U6CisKKyAgIEFCU19NVF9QT1NJVElPTl9YIHhbMF0KKyAgIEFCU19NVF9QT1NJVElPTl9ZIHlbMF0KKyAgIFNZTl9NVF9SRVBPUlQKKyAgIEFCU19NVF9QT1NJVElPTl9YIHhbMV0KKyAgIEFCU19NVF9QT1NJVElPTl9ZIHlbMV0KKyAgIFNZTl9NVF9SRVBPUlQKKyAgIFNZTl9SRVBPUlQKKworVGhlIHNlcXVlbmNlIGFmdGVyIG1vdmluZyBvbmUgb2YgdGhlIGNvbnRhY3RzIGxvb2tzIGV4YWN0bHkgdGhlIHNhbWU7IHRoZQorcmF3IGRhdGEgZm9yIGFsbCBwcmVzZW50IGNvbnRhY3RzIGFyZSBzZW50IGJldHdlZW4gZXZlcnkgc3luY2hyb25pemF0aW9uCit3aXRoIFNZTl9SRVBPUlQuCisKK0hlcmUgaXMgdGhlIHNlcXVlbmNlIGFmdGVyIGxpZnRpbmcgdGhlIGZpcnN0IGNvbnRhY3Q6CisKKyAgIEFCU19NVF9QT1NJVElPTl9YIHhbMV0KKyAgIEFCU19NVF9QT1NJVElPTl9ZIHlbMV0KKyAgIFNZTl9NVF9SRVBPUlQKKyAgIFNZTl9SRVBPUlQKKworQW5kIGhlcmUgaXMgdGhlIHNlcXVlbmNlIGFmdGVyIGxpZnRpbmcgdGhlIHNlY29uZCBjb250YWN0OgorCisgICBTWU5fTVRfUkVQT1JUCisgICBTWU5fUkVQT1JUCisKK0lmIHRoZSBkcml2ZXIgcmVwb3J0cyBvbmUgb2YgQlROX1RPVUNIIG9yIEFCU19QUkVTU1VSRSBpbiBhZGRpdGlvbiB0byB0aGUKK0FCU19NVCBldmVudHMsIHRoZSBsYXN0IFNZTl9NVF9SRVBPUlQgZXZlbnQgbWF5IGJlIG9taXR0ZWQuIE90aGVyd2lzZSwgdGhlCitsYXN0IFNZTl9SRVBPUlQgd2lsbCBiZSBkcm9wcGVkIGJ5IHRoZSBpbnB1dCBjb3JlLCByZXN1bHRpbmcgaW4gbm8KK3plcm8tY29udGFjdCBldmVudCByZWFjaGluZyB1c2VybGFuZC4KKworCitQcm90b2NvbCBFeGFtcGxlIEIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitIZXJlIGlzIHdoYXQgYSBtaW5pbWFsIGV2ZW50IHNlcXVlbmNlIGZvciBhIHR3by1jb250YWN0IHRvdWNoIHdvdWxkIGxvb2sKK2xpa2UgZm9yIGEgdHlwZSBCIGRldmljZToKKworICAgQUJTX01UX1NMT1QgMAorICAgQUJTX01UX1RSQUNLSU5HX0lEIDQ1CisgICBBQlNfTVRfUE9TSVRJT05fWCB4WzBdCisgICBBQlNfTVRfUE9TSVRJT05fWSB5WzBdCisgICBBQlNfTVRfU0xPVCAxCisgICBBQlNfTVRfVFJBQ0tJTkdfSUQgNDYKKyAgIEFCU19NVF9QT1NJVElPTl9YIHhbMV0KKyAgIEFCU19NVF9QT1NJVElPTl9ZIHlbMV0KKyAgIFNZTl9SRVBPUlQKKworSGVyZSBpcyB0aGUgc2VxdWVuY2UgYWZ0ZXIgbW92aW5nIGNvbnRhY3QgNDUgaW4gdGhlIHggZGlyZWN0aW9uOgorCisgICBBQlNfTVRfU0xPVCAwCisgICBBQlNfTVRfUE9TSVRJT05fWCB4WzBdCisgICBTWU5fUkVQT1JUCisKK0hlcmUgaXMgdGhlIHNlcXVlbmNlIGFmdGVyIGxpZnRpbmcgdGhlIGNvbnRhY3QgaW4gc2xvdCAwOgorCisgICBBQlNfTVRfVFJBQ0tJTkdfSUQgLTEKKyAgIFNZTl9SRVBPUlQKKworVGhlIHNsb3QgYmVpbmcgbW9kaWZpZWQgaXMgYWxyZWFkeSAwLCBzbyB0aGUgQUJTX01UX1NMT1QgaXMgb21pdHRlZC4gIFRoZQorbWVzc2FnZSByZW1vdmVzIHRoZSBhc3NvY2lhdGlvbiBvZiBzbG90IDAgd2l0aCBjb250YWN0IDQ1LCB0aGVyZWJ5CitkZXN0cm95aW5nIGNvbnRhY3QgNDUgYW5kIGZyZWVpbmcgc2xvdCAwIHRvIGJlIHJldXNlZCBmb3IgYW5vdGhlciBjb250YWN0LgorCitGaW5hbGx5LCBoZXJlIGlzIHRoZSBzZXF1ZW5jZSBhZnRlciBsaWZ0aW5nIHRoZSBzZWNvbmQgY29udGFjdDoKKworICAgQUJTX01UX1NMT1QgMQorICAgQUJTX01UX1RSQUNLSU5HX0lEIC0xCisgICBTWU5fUkVQT1JUCisKKworRXZlbnQgVXNhZ2UKKy0tLS0tLS0tLS0tCiAKIEEgc2V0IG9mIEFCU19NVCBldmVudHMgd2l0aCB0aGUgZGVzaXJlZCBwcm9wZXJ0aWVzIGlzIGRlZmluZWQuIFRoZSBldmVudHMKIGFyZSBkaXZpZGVkIGludG8gY2F0ZWdvcmllcywgdG8gYWxsb3cgZm9yIHBhcnRpYWwgaW1wbGVtZW50YXRpb24uICBUaGUKIG1pbmltdW0gc2V0IGNvbnNpc3RzIG9mIEFCU19NVF9QT1NJVElPTl9YIGFuZCBBQlNfTVRfUE9TSVRJT05fWSwgd2hpY2gKLWFsbG93cyBmb3IgbXVsdGlwbGUgZmluZ2VycyB0byBiZSB0cmFja2VkLiAgSWYgdGhlIGRldmljZSBzdXBwb3J0cyBpdCwgdGhlCithbGxvd3MgZm9yIG11bHRpcGxlIGNvbnRhY3RzIHRvIGJlIHRyYWNrZWQuICBJZiB0aGUgZGV2aWNlIHN1cHBvcnRzIGl0LCB0aGUKIEFCU19NVF9UT1VDSF9NQUpPUiBhbmQgQUJTX01UX1dJRFRIX01BSk9SIG1heSBiZSB1c2VkIHRvIHByb3ZpZGUgdGhlIHNpemUKLW9mIHRoZSBjb250YWN0IGFyZWEgYW5kIGFwcHJvYWNoaW5nIGZpbmdlciwgcmVzcGVjdGl2ZWx5Lgorb2YgdGhlIGNvbnRhY3QgYXJlYSBhbmQgYXBwcm9hY2hpbmcgY29udGFjdCwgcmVzcGVjdGl2ZWx5LgogCiBUaGUgVE9VQ0ggYW5kIFdJRFRIIHBhcmFtZXRlcnMgaGF2ZSBhIGdlb21ldHJpY2FsIGludGVycHJldGF0aW9uOyBpbWFnaW5lCiBsb29raW5nIHRocm91Z2ggYSB3aW5kb3cgYXQgc29tZW9uZSBnZW50bHkgaG9sZGluZyBhIGZpbmdlciBhZ2FpbnN0IHRoZQpAQCAtNDEsNTYgKzE1OSwyNiBAQAogQUJTX01UX1dJRFRIX01BSk9SLiBOb3cgaW1hZ2luZSB0aGUgcGVyc29uIHByZXNzaW5nIHRoZSBmaW5nZXIgaGFyZGVyCiBhZ2FpbnN0IHRoZSBnbGFzcy4gVGhlIGlubmVyIHJlZ2lvbiB3aWxsIGluY3JlYXNlLCBhbmQgaW4gZ2VuZXJhbCwgdGhlCiByYXRpbyBBQlNfTVRfVE9VQ0hfTUFKT1IgLyBBQlNfTVRfV0lEVEhfTUFKT1IsIHdoaWNoIGlzIGFsd2F5cyBzbWFsbGVyIHRoYW4KLXVuaXR5LCBpcyByZWxhdGVkIHRvIHRoZSBmaW5nZXIgcHJlc3N1cmUuIEZvciBwcmVzc3VyZS1iYXNlZCBkZXZpY2VzLAordW5pdHksIGlzIHJlbGF0ZWQgdG8gdGhlIGNvbnRhY3QgcHJlc3N1cmUuIEZvciBwcmVzc3VyZS1iYXNlZCBkZXZpY2VzLAogQUJTX01UX1BSRVNTVVJFIG1heSBiZSB1c2VkIHRvIHByb3ZpZGUgdGhlIHByZXNzdXJlIG9uIHRoZSBjb250YWN0IGFyZWEKIGluc3RlYWQuCiAKLUluIGFkZGl0aW9uIHRvIHRoZSBNQUpPUiBwYXJhbWV0ZXJzLCB0aGUgb3ZhbCBzaGFwZSBvZiB0aGUgZmluZ2VyIGNhbiBiZQorSW4gYWRkaXRpb24gdG8gdGhlIE1BSk9SIHBhcmFtZXRlcnMsIHRoZSBvdmFsIHNoYXBlIG9mIHRoZSBjb250YWN0IGNhbiBiZQogZGVzY3JpYmVkIGJ5IGFkZGluZyB0aGUgTUlOT1IgcGFyYW1ldGVycywgc3VjaCB0aGF0IE1BSk9SIGFuZCBNSU5PUiBhcmUgdGhlCiBtYWpvciBhbmQgbWlub3IgYXhpcyBvZiBhbiBlbGxpcHNlLiBGaW5hbGx5LCB0aGUgb3JpZW50YXRpb24gb2YgdGhlIG92YWwKIHNoYXBlIGNhbiBiZSBkZXNjcmliZSB3aXRoIHRoZSBPUklFTlRBVElPTiBwYXJhbWV0ZXIuCiAKIFRoZSBBQlNfTVRfVE9PTF9UWVBFIG1heSBiZSB1c2VkIHRvIHNwZWNpZnkgd2hldGhlciB0aGUgdG91Y2hpbmcgdG9vbCBpcyBhCi1maW5nZXIgb3IgYSBwZW4gb3Igc29tZXRoaW5nIGVsc2UuICBEZXZpY2VzIHdpdGggbW9yZSBncmFudWxhciBpbmZvcm1hdGlvbgorY29udGFjdCBvciBhIHBlbiBvciBzb21ldGhpbmcgZWxzZS4gIERldmljZXMgd2l0aCBtb3JlIGdyYW51bGFyIGluZm9ybWF0aW9uCiBtYXkgc3BlY2lmeSBnZW5lcmFsIHNoYXBlcyBhcyBibG9icywgaS5lLiwgYXMgYSBzZXF1ZW5jZSBvZiByZWN0YW5ndWxhcgogc2hhcGVzIGdyb3VwZWQgdG9nZXRoZXIgYnkgYW4gQUJTX01UX0JMT0JfSUQuIEZpbmFsbHksIGZvciB0aGUgZmV3IGRldmljZXMKIHRoYXQgY3VycmVudGx5IHN1cHBvcnQgaXQsIHRoZSBBQlNfTVRfVFJBQ0tJTkdfSUQgZXZlbnQgbWF5IGJlIHVzZWQgdG8KLXJlcG9ydCBmaW5nZXIgdHJhY2tpbmcgZnJvbSBoYXJkd2FyZSBbNV0uCityZXBvcnQgY29udGFjdCB0cmFja2luZyBmcm9tIGhhcmR3YXJlIFs1XS4KIAotSGVyZSBpcyB3aGF0IGEgbWluaW1hbCBldmVudCBzZXF1ZW5jZSBmb3IgYSB0d28tZmluZ2VyIHRvdWNoIHdvdWxkIGxvb2sKLWxpa2U6Ci0KLSAgIEFCU19NVF9QT1NJVElPTl9YCi0gICBBQlNfTVRfUE9TSVRJT05fWQotICAgU1lOX01UX1JFUE9SVAotICAgQUJTX01UX1BPU0lUSU9OX1gKLSAgIEFCU19NVF9QT1NJVElPTl9ZCi0gICBTWU5fTVRfUkVQT1JUCi0gICBTWU5fUkVQT1JUCi0KLUhlcmUgaXMgdGhlIHNlcXVlbmNlIGFmdGVyIGxpZnRpbmcgb25lIG9mIHRoZSBmaW5nZXJzOgotCi0gICBBQlNfTVRfUE9TSVRJT05fWAotICAgQUJTX01UX1BPU0lUSU9OX1kKLSAgIFNZTl9NVF9SRVBPUlQKLSAgIFNZTl9SRVBPUlQKLQotQW5kIGhlcmUgaXMgdGhlIHNlcXVlbmNlIGFmdGVyIGxpZnRpbmcgdGhlIHJlbWFpbmluZyBmaW5nZXI6Ci0KLSAgIFNZTl9NVF9SRVBPUlQKLSAgIFNZTl9SRVBPUlQKLQotSWYgdGhlIGRyaXZlciByZXBvcnRzIG9uZSBvZiBCVE5fVE9VQ0ggb3IgQUJTX1BSRVNTVVJFIGluIGFkZGl0aW9uIHRvIHRoZQotQUJTX01UIGV2ZW50cywgdGhlIGxhc3QgU1lOX01UX1JFUE9SVCBldmVudCBtYXkgYmUgb21pdHRlZC4gT3RoZXJ3aXNlLCB0aGUKLWxhc3QgU1lOX1JFUE9SVCB3aWxsIGJlIGRyb3BwZWQgYnkgdGhlIGlucHV0IGNvcmUsIHJlc3VsdGluZyBpbiBubwotemVyby1maW5nZXIgZXZlbnQgcmVhY2hpbmcgdXNlcmxhbmQuCiAKIEV2ZW50IFNlbWFudGljcwogLS0tLS0tLS0tLS0tLS0tCiAKLVRoZSB3b3JkICJjb250YWN0IiBpcyB1c2VkIHRvIGRlc2NyaWJlIGEgdG9vbCB3aGljaCBpcyBpbiBkaXJlY3QgY29udGFjdAotd2l0aCB0aGUgc3VyZmFjZS4gQSBmaW5nZXIsIGEgcGVuIG9yIGEgcnViYmVyIGFsbCBjbGFzc2lmeSBhcyBjb250YWN0cy4KLQogQUJTX01UX1RPVUNIX01BSk9SCiAKIFRoZSBsZW5ndGggb2YgdGhlIG1ham9yIGF4aXMgb2YgdGhlIGNvbnRhY3QuIFRoZSBsZW5ndGggc2hvdWxkIGJlIGdpdmVuIGluCkBAIC0xNTcsMTUgKzI0NSwxNiBAQAogQUJTX01UX0JMT0JfSUQKIAogVGhlIEJMT0JfSUQgZ3JvdXBzIHNldmVyYWwgcGFja2V0cyB0b2dldGhlciBpbnRvIG9uZSBhcmJpdHJhcmlseSBzaGFwZWQKLWNvbnRhY3QuIFRoaXMgaXMgYSBsb3ctbGV2ZWwgYW5vbnltb3VzIGdyb3VwaW5nLCBhbmQgc2hvdWxkIG5vdCBiZSBjb25mdXNlZAotd2l0aCB0aGUgaGlnaC1sZXZlbCB0cmFja2luZ0lEIFs1XS4gTW9zdCBrZXJuZWwgZHJpdmVycyB3aWxsIG5vdCBoYXZlIGJsb2IKLWNhcGFiaWxpdHksIGFuZCBjYW4gc2FmZWx5IG9taXQgdGhlIGV2ZW50LgorY29udGFjdC4gVGhpcyBpcyBhIGxvdy1sZXZlbCBhbm9ueW1vdXMgZ3JvdXBpbmcgZm9yIHR5cGUgQSBkZXZpY2VzLCBhbmQKK3Nob3VsZCBub3QgYmUgY29uZnVzZWQgd2l0aCB0aGUgaGlnaC1sZXZlbCB0cmFja2luZ0lEIFs1XS4gTW9zdCB0eXBlIEEKK2RldmljZXMgZG8gbm90IGhhdmUgYmxvYiBjYXBhYmlsaXR5LCBzbyBkcml2ZXJzIGNhbiBzYWZlbHkgb21pdCB0aGlzIGV2ZW50LgogCiBBQlNfTVRfVFJBQ0tJTkdfSUQKIAogVGhlIFRSQUNLSU5HX0lEIGlkZW50aWZpZXMgYW4gaW5pdGlhdGVkIGNvbnRhY3QgdGhyb3VnaG91dCBpdHMgbGlmZSBjeWNsZQotWzVdLiBUaGVyZSBhcmUgY3VycmVudGx5IG9ubHkgYSBmZXcgZGV2aWNlcyB0aGF0IHN1cHBvcnQgaXQsIHNvIHRoaXMgZXZlbnQKLXNob3VsZCBub3JtYWxseSBiZSBvbWl0dGVkLgorWzVdLiBUaGlzIGV2ZW50IGlzIG1hbmRhdG9yeSBmb3IgdHlwZSBCIGRldmljZXMuIFRoZSB2YWx1ZSByYW5nZSBvZiB0aGUKK1RSQUNLSU5HX0lEIHNob3VsZCBiZSBsYXJnZSBlbm91Z2ggdG8gZW5zdXJlIHVuaXF1ZSBpZGVudGlmaWNhdGlvbiBvZiBhCitjb250YWN0IG1haW50YWluZWQgb3ZlciBhbiBleHRlbmRlZCBwZXJpb2Qgb2YgdGltZS4KIAogCiBFdmVudCBDb21wdXRhdGlvbgpAQCAtMTkyLDIwICsyODEsMTEgQEAKIEZpbmdlciBUcmFja2luZwogLS0tLS0tLS0tLS0tLS0tCiAKLVRoZSBrZXJuZWwgZHJpdmVyIHNob3VsZCBnZW5lcmF0ZSBhbiBhcmJpdHJhcnkgZW51bWVyYXRpb24gb2YgdGhlIHNldCBvZgotYW5vbnltb3VzIGNvbnRhY3RzIGN1cnJlbnRseSBvbiB0aGUgc3VyZmFjZS4gVGhlIG9yZGVyIGluIHdoaWNoIHRoZSBwYWNrZXRzCi1hcHBlYXIgaW4gdGhlIGV2ZW50IHN0cmVhbSBpcyBub3QgaW1wb3J0YW50LgotCiBUaGUgcHJvY2VzcyBvZiBmaW5nZXIgdHJhY2tpbmcsIGkuZS4sIHRvIGFzc2lnbiBhIHVuaXF1ZSB0cmFja2luZ0lEIHRvIGVhY2gKLWluaXRpYXRlZCBjb250YWN0IG9uIHRoZSBzdXJmYWNlLCBpcyBsZWZ0IHRvIHVzZXIgc3BhY2U7IHByZWZlcmFibHkgdGhlCi1tdWx0aS10b3VjaCBYIGRyaXZlciBbM10uIEluIHRoYXQgZHJpdmVyLCB0aGUgdHJhY2tpbmdJRCBzdGF5cyB0aGUgc2FtZSBhbmQKLXVuaXF1ZSB1bnRpbCB0aGUgY29udGFjdCB2YW5pc2hlcyAod2hlbiB0aGUgZmluZ2VyIGxlYXZlcyB0aGUgc3VyZmFjZSkuIFRoZQotcHJvYmxlbSBvZiBhc3NpZ25pbmcgYSBzZXQgb2YgYW5vbnltb3VzIGZpbmdlcnMgdG8gYSBzZXQgb2YgaWRlbnRpZmllZAotZmluZ2VycyBpcyBhIGV1Y2xpZGlhbiBiaXBhcnRpdGUgbWF0Y2hpbmcgcHJvYmxlbSBhdCBlYWNoIGV2ZW50IHVwZGF0ZSwgYW5kCi1yZWxpZXMgb24gYSBzdWZmaWNpZW50bHkgcmFwaWQgdXBkYXRlIHJhdGUuCi0KLVRoZXJlIGFyZSBhIGZldyBkZXZpY2VzIHRoYXQgc3VwcG9ydCB0cmFja2luZ0lEIGluIGhhcmR3YXJlLiBVc2VyIHNwYWNlIGNhbgotbWFrZSB1c2Ugb2YgdGhlc2UgbmF0aXZlIGlkZW50aWZpZXJzIHRvIHJlZHVjZSBiYW5kd2lkdGggYW5kIGNwdSB1c2FnZS4KK2luaXRpYXRlZCBjb250YWN0IG9uIHRoZSBzdXJmYWNlLCBpcyBhIEV1Y2xpZGlhbiBCaXBhcnRpdGUgTWF0Y2hpbmcKK3Byb2JsZW0uICBBdCBlYWNoIGV2ZW50IHN5bmNocm9uaXphdGlvbiwgdGhlIHNldCBvZiBhY3R1YWwgY29udGFjdHMgaXMKK21hdGNoZWQgdG8gdGhlIHNldCBvZiBjb250YWN0cyBmcm9tIHRoZSBwcmV2aW91cyBzeW5jaHJvbml6YXRpb24uIEEgZnVsbAoraW1wbGVtZW50YXRpb24gY2FuIGJlIGZvdW5kIGluIFszXS4KIAogCiBHZXN0dXJlcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9zZW50ZWxpYy50eHQgYi9Eb2N1bWVudGF0aW9uL2lucHV0L3NlbnRlbGljLnR4dAppbmRleCBiMzVhZmZkLi5iMmVmMTI1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lucHV0L3NlbnRlbGljLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2lucHV0L3NlbnRlbGljLnR4dApAQCAtMzQxLDcgKzM0MSw3IEBACiBGU1Agc3VwcG9ydHMgYmFzaWMgUFMvMiBjb21tYW5kaW5nIHNldCBhbmQgbW9kZXMsIHJlZmVyIHRvIGZvbGxvd2luZyBVUkwgZm9yCiBkZXRhaWxzIGFib3V0IFBTLzIgY29tbWFuZHM6CiAKLWh0dHA6Ly93d3cuY29tcHV0ZXItZW5naW5lZXJpbmcub3JnL2luZGV4LnBocD90aXRsZT1QUy8yX01vdXNlX0ludGVyZmFjZQoraHR0cDovL3d3dy5jb21wdXRlci1lbmdpbmVlcmluZy5vcmcvcHMybW91c2UvCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBQcm9ncmFtbWluZyBTZXF1ZW5jZSBmb3IgRGV0ZXJtaW5pbmcgUGFja2V0IFBhcnNpbmcgRmxvdwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnB1dC94cGFkLnR4dCBiL0RvY3VtZW50YXRpb24vaW5wdXQveHBhZC50eHQKaW5kZXggYWFlMGQ0MC4uN2NjOWE0MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbnB1dC94cGFkLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2lucHV0L3hwYWQudHh0CkBAIC0xNTAsNyArMTUwLDcgQEAKIAogMS4gaHR0cDovL2V1Yy5qcC9wZXJpcGhzL3hib3gtY29udHJvbGxlci5qYS5odG1sIChJVE8gVGFrYXl1a2kpCiAyLiBodHRwOi8veHBhZC54Ym94LXNjZW5lLmNvbS8KLTMuIGh0dHA6Ly93d3cueGJveGhhY2t6LmNvbS9IYWNrei1SZWZlcmVuY2UuaHRtCiszLiBodHRwOi8vd3d3Lm1hcmtvc3dlYi5jb20vd3d3L3hib3hoYWNrei5jb20vIAogCiA0LiAvcHJvYy9idXMvdXNiL2RldmljZXMgLSBkdW1wIGZyb20gSW50ZXJBY3QgUG93ZXJQYWQgUHJvIChHZXJtYW55KToKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnRlbF90eHQudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnRlbF90eHQudHh0CmluZGV4IDVkYzU5YjAuLjg0OWRlMWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW50ZWxfdHh0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ludGVsX3R4dC50eHQKQEAgLTI1LDIwICsyNSwxOCBAQAogSW50ZWwgVFhUIGhhcyBiZWVuIHByZXNlbnRlZCBhdCB2YXJpb3VzIGV2ZW50cyBvdmVyIHRoZSBwYXN0IGZldwogeWVhcnMsIHNvbWUgb2Ygd2hpY2ggYXJlOgogICAgICAgTGludXhUQUcgMjAwODoKLSAgICAgICAgICBodHRwOi8vd3d3LmxpbnV4dGFnLm9yZy8yMDA4L2VuL2NvbmYvZXZlbnRzL3ZwLWRvbm5lcnN0YWcvCi0gICAgICAgICAgZGV0YWlscy5odG1sP3RhbGtpZD0xMTAKKyAgICAgICAgICBodHRwOi8vd3d3LmxpbnV4dGFnLm9yZy8yMDA4L2VuL2NvbmYvZXZlbnRzL3ZwLWRvbm5lcnN0YWcuaHRtbAogICAgICAgVFJVU1QyMDA4OgotICAgICAgICAgIGh0dHA6Ly93d3cudHJ1c3QyMDA4LmV1L2Rvd25sb2Fkcy9LZXlub3RlLVNwZWFrZXJzLworICAgICAgICAgIGh0dHA6Ly93d3cudHJ1c3QtY29uZmVyZW5jZS5ldS9kb3dubG9hZHMvS2V5bm90ZS1TcGVha2Vycy8KICAgICAgICAgICAzX0RhdmlkLUdyYXdyb2NrX1RoZS1Gcm9udC1Eb29yLW9mLVRydXN0ZWQtQ29tcHV0aW5nLnBkZgotICAgICAgSURGIDIwMDgsIFNoYW5naGFpOgotICAgICAgICAgIGh0dHA6Ly9pbnRlbGRldmVsb3BlcmZvcnVtLmNvbS5lZGdlc3VpdGUubmV0L3NoYW5naGFpXzIwMDgvCi0gICAgICAgICAgYWVwL1BST1MwMDMvaW5kZXguaHRtbAorICAgICAgSURGLCBTaGFuZ2hhaToKKyAgICAgICAgICBodHRwOi8vd3d3LnByY2lkZi5jb20uY24vaW5kZXhfZW4uaHRtbAogICAgICAgSURGcyAyMDA2LCAyMDA3IChJJ20gbm90IHN1cmUgaWYvd2hlcmUgdGhleSBhcmUgb25saW5lKQogCiBUcnVzdGVkIEJvb3QgUHJvamVjdCBPdmVydmlldzoKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRydXN0ZWQgQm9vdCAodGJvb3QpIGlzIGFuIG9wZW4gc291cmNlLCBwcmUtIGtlcm5lbC9WTU0gbW9kdWxlIHRoYXQKK1RydXN0ZWQgQm9vdCAodGJvb3QpIGlzIGFuIG9wZW4gc291cmNlLCBwcmUta2VybmVsL1ZNTSBtb2R1bGUgdGhhdAogdXNlcyBJbnRlbCBUWFQgdG8gcGVyZm9ybSBhIG1lYXN1cmVkIGFuZCB2ZXJpZmllZCBsYXVuY2ggb2YgYW4gT1MKIGtlcm5lbC9WTU0uCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dCBiL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dAppbmRleCBkZDU4MDZmLi4yZWMzZDdkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lvY3RsL2lvY3RsLW51bWJlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pb2N0bC9pb2N0bC1udW1iZXIudHh0CkBAIC03NCw3ICs3NCw3IEBACiAweDEwCTAwLTBGCWRyaXZlcnMvY2hhci9zMzkwL3ZtY3AuaAogMHgxMglhbGwJbGludXgvZnMuaAogCQlsaW51eC9ibGtwZy5oCi0weDFiCWFsbAlJbmZpbmlCYW5kIFN1YnN5c3RlbQk8aHR0cDovL3d3dy5vcGVuaWIub3JnLz4KKzB4MWIJYWxsCUluZmluaUJhbmQgU3Vic3lzdGVtCTxodHRwOi8vaW5maW5pYmFuZC5zb3VyY2Vmb3JnZS5uZXQvPgogMHgyMAlhbGwJZHJpdmVycy9jZHJvbS9jbTIwNi5oCiAweDIyCWFsbAlzY3NpL3NnLmgKICcjJwkwMC0zRglJRUVFIDEzOTQgU3Vic3lzdGVtCUJsb2NrIGZvciB0aGUgZW50aXJlIHN1YnN5c3RlbQpAQCAtMTkwLDcgKzE5MCw3IEBACiAnWycJMDAtMDcJbGludXgvdXNiL3RtYy5oCQlVU0IgVGVzdCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlcwogCQkJCQk8bWFpbHRvOmdyZWdraEBzdXNlLmRlPgogJ2EnCWFsbAlsaW51eC9hdG0qLmgsIGxpbnV4L3NvbmV0LmgJQVRNIG9uIGxpbnV4Ci0JCQkJCTxodHRwOi8vbHJjd3d3LmVwZmwuY2gvbGludXgtYXRtL21hZ2ljLmh0bWw+CisJCQkJCTxodHRwOi8vbHJjd3d3LmVwZmwuY2gvPgogJ2InCTAwLUZGCQkJCWNvbmZsaWN0ISBiaXQzIHZtZSBob3N0IGJyaWRnZQogCQkJCQk8bWFpbHRvOm5hdGFsaWFAbmlraGVmay5uaWtoZWYubmw+CiAnYicJMDAtMEYJbWVkaWEvYnQ4MTkuaAkJY29uZmxpY3QhCkBAIC0yMjUsNyArMjI1LDcgQEAKICdrJwkwMC0wRglsaW51eC9zcGkvc3BpZGV2LmgJY29uZmxpY3QhCiAnaycJMDAtMDUJdmlkZW8va3lyby5oCQljb25mbGljdCEKICdsJwkwMC0zRglsaW51eC90Y2ZzX2ZzLmgJCXRyYW5zcGFyZW50IGNyeXB0b2dyYXBoaWMgZmlsZSBzeXN0ZW0KLQkJCQkJPGh0dHA6Ly9taWtvbm9zLmRpYS51bmlzYS5pdC90Y2ZzPgorCQkJCQk8aHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIvKi9odHRwOi8vbWlrb25vcy5kaWEudW5pc2EuaXQvdGNmcz4KICdsJwk0MC03RglsaW51eC91ZGZfZnNfaS5oCWluIGRldmVsb3BtZW50OgogCQkJCQk8aHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saW51eC11ZGYvPgogJ20nCTAwLTA5CWxpbnV4L21tdGltZXIuaAkJY29uZmxpY3QhCkBAIC0yNTIsNyArMjUyLDcgQEAKIAkJCQkJPG1haWx0bzpnaW9tZXR0aUBsaW51eC5pdD4KICdxJwkwMC0xRglsaW51eC9zZXJpby5oCiAncScJODAtRkYJbGludXgvdGVsZXBob255LmgJSW50ZXJuZXQgUGhvbmVKQUNLLCBJbnRlcm5ldCBMaW5lSkFDSwotCQlsaW51eC9peGp1c2VyLmgJCTxodHRwOi8vd3d3LnF1aWNrbmV0Lm5ldD4KKwkJbGludXgvaXhqdXNlci5oCQk8aHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIvKi9odHRwOi8vd3d3LnF1aWNrbmV0Lm5ldD4KICdyJwkwMC0xRglsaW51eC9tc2Rvc19mcy5oIGFuZCBmcy9mYXQvZGlyLmMKICdzJwlhbGwJbGludXgvY2RrLmgKICd0JwkwMC03RglsaW51eC9pZl9wcHAuaApAQCAtMjg2LDcgKzI4Niw3IEBACiAweDg5CUYwLUZGCWxpbnV4L3NvY2tpb3MuaAkJU0lPQ0RFVlBSSVZBVEUgcmFuZ2UKIDB4OEIJYWxsCWxpbnV4L3dpcmVsZXNzLmgKIDB4OEMJMDAtM0YJCQkJV2lOUkFEaU8gZHJpdmVyCi0JCQkJCTxodHRwOi8vd3d3LnByb3hpbWl0eS5jb20uYXUvfmJyaWFuL3dpbnJhZGlvLz4KKwkJCQkJPGh0dHA6Ly93d3cud2lucmFkaW8uY29tLmF1Lz4KIDB4OTAJMDAJZHJpdmVycy9jZHJvbS9zYnBjZC5oCiAweDkyCTAwLTBGCWRyaXZlcnMvdXNiL21vbi9tb25fYmluLmMKIDB4OTMJNjAtN0YJbGludXgvYXV0b19mcy5oCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lzZG4vSU5URVJGQUNFLkNBUEkgYi9Eb2N1bWVudGF0aW9uL2lzZG4vSU5URVJGQUNFLkNBUEkKaW5kZXggZjE3MjA5MS4uMzA5ZWI1ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pc2RuL0lOVEVSRkFDRS5DQVBJCisrKyBiL0RvY3VtZW50YXRpb24vaXNkbi9JTlRFUkZBQ0UuQ0FQSQpAQCAtMTEzLDEyICsxMTMsMTYgQEAKIGludCAoKmxvYWRfZmlybXdhcmUpKHN0cnVjdCBjYXBpX2N0ciAqY3RybHIsIGNhcGlsb2FkZGF0YSAqbGRhdGEpCiAJKG9wdGlvbmFsKSBwb2ludGVyIHRvIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHNlbmRpbmcgZmlybXdhcmUgYW5kCiAJY29uZmlndXJhdGlvbiBkYXRhIHRvIHRoZSBkZXZpY2UKKwlUaGUgZnVuY3Rpb24gbWF5IHJldHVybiBiZWZvcmUgdGhlIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkLgorCUNvbXBsZXRpb24gbXVzdCBiZSBzaWduYWxsZWQgYnkgYSBjYWxsIHRvIGNhcGlfY3RyX3JlYWR5KCkuCiAJUmV0dXJuIHZhbHVlOiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZXJyb3IKIAlDYWxsZWQgaW4gcHJvY2VzcyBjb250ZXh0LgogCiB2b2lkICgqcmVzZXRfY3RyKShzdHJ1Y3QgY2FwaV9jdHIgKmN0cmxyKQotCShvcHRpb25hbCkgcG9pbnRlciB0byBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBwZXJmb3JtaW5nIGEgcmVzZXQgb24KLQl0aGUgZGV2aWNlLCByZWxlYXNpbmcgYWxsIHJlZ2lzdGVyZWQgYXBwbGljYXRpb25zCisJKG9wdGlvbmFsKSBwb2ludGVyIHRvIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHN0b3BwaW5nIHRoZSBkZXZpY2UsCisJcmVsZWFzaW5nIGFsbCByZWdpc3RlcmVkIGFwcGxpY2F0aW9ucworCVRoZSBmdW5jdGlvbiBtYXkgcmV0dXJuIGJlZm9yZSB0aGUgb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQuCisJQ29tcGxldGlvbiBtdXN0IGJlIHNpZ25hbGxlZCBieSBhIGNhbGwgdG8gY2FwaV9jdHJfZG93bigpLgogCUNhbGxlZCBpbiBwcm9jZXNzIGNvbnRleHQuCiAKIHZvaWQgKCpyZWdpc3Rlcl9hcHBsKShzdHJ1Y3QgY2FwaV9jdHIgKmN0cmxyLCB1MTYgYXBwbGlkLApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRSBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUKaW5kZXggNjc4MzQzNy4uY2ZiMTg4NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRQorKysgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FCkBAIC0zNiw3ICszNiw3IEBACiAgICAgIGh0dHA6Ly93d3cubWhlc3NsZXIuZGUvaTRsZmFxLwogICBJdCBjYW4gYmUgdmlld2VkIG9ubGluZSwgb3IgZG93bmxvYWRlZCBpbiBzZ21sL3RleHQvaHRtbCBmb3JtYXQuCiAgIFRoZSBGQVEgY2FuIGFsc28gYmUgdmlld2VkIG9ubGluZSBhdAotICAgICBodHRwOi8vd3d3LmlzZG40aW51eC5kZS9mYXEvCisgICAgIGh0dHA6Ly93d3cuaXNkbjRsaW51eC5kZS9mYXEvCiAgIG9yIGRvd25sb2FkZWQgZnJvbQogICAgICBmdHA6Ly9mdHAuaXNkbjRsaW51eC5kZS9wdWIvaXNkbjRsaW51eC9GQVEvCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuSGlTYXggYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLkhpU2F4CmluZGV4IDAzMWM4ZDguLjk5ZTg3YTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuSGlTYXgKKysrIGIvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5IaVNheApAQCAtNDg2LDcgKzQ4Niw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBTZWUKLSAgIGh0dHA6Ly93d3cuc3R1ZC51bmktd3VwcGVydGFsLmRlL35lYTAxNDEvcGNtY2lhLmh0bWwKKyAgIGh0dHA6Ly93d3cubGludXgubm8vdGVsZXNfY3MudHh0IAogZm9yIGluc3RydWN0aW9ucy4KIAogQXBwZW5kaXg6IExpbnV4IGFuZCBJU0ROLWxlYXNlZCBsaW5lcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5naWdhc2V0IGIvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5naWdhc2V0CmluZGV4IGU0NzJkZjguLmVmMzM0M2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuZ2lnYXNldAorKysgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmdpZ2FzZXQKQEAgLTQ3LDkgKzQ3LDkgQEAKIAogMS4yLiBTb2Z0d2FyZQogICAgICAtLS0tLS0tLQotICAgICBUaGUgZHJpdmVyIHdvcmtzIHdpdGggSVNETjRsaW51eCBhbmQgc28gY2FuIGJlIHVzZWQgd2l0aCBhbnkgc29mdHdhcmUKLSAgICAgd2hpY2ggaXMgYWJsZSB0byB1c2UgSVNETjRsaW51eCBmb3IgSVNETiBjb25uZWN0aW9ucyAodm9pY2Ugb3IgZGF0YSkuCi0gICAgIEV4cGVyaW1lbnRhbCBLZXJuZWwgQ0FQSSBzdXBwb3J0IGlzIGF2YWlsYWJsZSBhcyBhIGNvbXBpbGF0aW9uIG9wdGlvbi4KKyAgICAgVGhlIGRyaXZlciB3b3JrcyB3aXRoIHRoZSBLZXJuZWwgQ0FQSSBzdWJzeXN0ZW0gYXMgd2VsbCBhcyB0aGUgb2xkCisgICAgIElTRE40TGludXggc3Vic3lzdGVtLCBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoIGFueSBzb2Z0d2FyZSB3aGljaCBpcyBhYmxlCisgICAgIHRvIHVzZSBDQVBJIDIuMCBvciBJU0RONExpbnV4IGZvciBJU0ROIGNvbm5lY3Rpb25zICh2b2ljZSBvciBkYXRhKS4KIAogICAgICBUaGVyZSBhcmUgc29tZSB1c2VyIHNwYWNlIHRvb2xzIGF2YWlsYWJsZSBhdAogICAgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dpZ2FzZXQzMDd4LwpAQCAtMTUyLDYxICsxNTIsNDIgQEAKICAgICAgLSBHSUdWRVJfRldCQVNFOiByZXRyaWV2ZSB0aGUgZmlybXdhcmUgdmVyc2lvbiBvZiB0aGUgYmFzZQogICAgICBVcG9uIHJldHVybiwgdmVyc2lvbltdIGlzIGZpbGxlZCB3aXRoIHRoZSByZXF1ZXN0ZWQgdmVyc2lvbiBpbmZvcm1hdGlvbi4KIAotMi4zLiBJU0RONGxpbnV4Ci0gICAgIC0tLS0tLS0tLS0KLSAgICAgVGhpcyBpcyB0aGUgIm5vcm1hbCIgbW9kZSBvZiBvcGVyYXRpb24uIEFmdGVyIGxvYWRpbmcgdGhlIG1vZHVsZSB5b3UgY2FuCi0gICAgIHNldCB1cCB0aGUgSVNETiBzeXN0ZW0ganVzdCBhcyB5b3UnZCBkbyB3aXRoIGFueSBJU0ROIGNhcmQgc3VwcG9ydGVkIGJ5Ci0gICAgIHRoZSBJU0RONExpbnV4IHN1YnN5c3RlbS4gTW9zdCBkaXN0cmlidXRpb25zIHByb3ZpZGUgc29tZSBjb25maWd1cmF0aW9uCi0gICAgIHV0aWxpdHkuIElmIG5vdCwgeW91IGNhbiB1c2Ugc29tZSBIT1dUT3MgbGlrZQotICAgICAgICAgaHR0cDovL3d3dy5saW51eGhhdmVuLmRlL2RsaHAvSE9XVE8vREUtSVNETi1IT1dUTy01Lmh0bWwKLSAgICAgSWYgdGhpcyBkb2Vzbid0IHdvcmssIGJlY2F1c2UgeW91IGhhdmUgc29tZSBkZXZpY2UgbGlrZSBTWDEwMCB3aGVyZQotICAgICBkZWJ1ZyBvdXRwdXQgKHNlZSBzZWN0aW9uIDMuMi4pIHNob3dzIHNvbWV0aGluZyBsaWtlIHRoaXMgd2hlbiBkaWFsaW5nCi0gICAgICAgICBDTUQgUmVjZWl2ZWQ6IEVSUk9SCi0gICAgICAgICBBdmFpbGFibGUgUGFyYW1zOiAwCi0gICAgICAgICBDb25uZWN0aW9uIFN0YXRlOiAwLCBSZXNwb25zZTogLTEKLSAgICAgICAgIGdpZ2FzZXRfcHJvY2Vzc19yZXNwb25zZTogcmVzcF9jb2RlIC0xIGluIENvblN0YXRlIDAgIQotICAgICAgICAgVGltZW91dCBvY2N1cnJlZAotICAgICB5b3UgcHJvYmFibHkgbmVlZCB0byB1c2UgdW5pbW9kZW0gbW9kZS4gKHNlZSBzZWN0aW9uIDIuNS4pCi0KLTIuNC4gQ0FQSQorMi4zLiBDQVBJCiAgICAgIC0tLS0KICAgICAgSWYgdGhlIGRyaXZlciBpcyBjb21waWxlZCB3aXRoIENBUEkgc3VwcG9ydCAoa2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uCi0gICAgIEdJR0FTRVRfQ0FQSSwgZXhwZXJpbWVudGFsKSBpdCBjYW4gYWxzbyBiZSB1c2VkIHdpdGggQ0FQSSAyLjAga2VybmVsIGFuZAotICAgICB1c2VyIHNwYWNlIGFwcGxpY2F0aW9ucy4gRm9yIHVzZXIgc3BhY2UgYWNjZXNzLCB0aGUgbW9kdWxlIGNhcGkua28gbXVzdAotICAgICBiZSBsb2FkZWQuIFRoZSBjYXBpaW5pdCBjb21tYW5kIChpbmNsdWRlZCBpbiB0aGUgY2FwaTRrLXV0aWxzIHBhY2thZ2UpCi0gICAgIGRvZXMgdGhpcyBmb3IgeW91LgorICAgICBHSUdBU0VUX0NBUEkpIHRoZSBkZXZpY2VzIHdpbGwgc2hvdyB1cCBhcyBDQVBJIGNvbnRyb2xsZXJzIGFzIHNvb24gYXMgdGhlCisgICAgIGNvcnJlc3BvbmRpbmcgZHJpdmVyIG1vZHVsZSBpcyBsb2FkZWQsIGFuZCBjYW4gdGhlbiBiZSB1c2VkIHdpdGggQ0FQSSAyLjAKKyAgICAga2VybmVsIGFuZCB1c2VyIHNwYWNlIGFwcGxpY2F0aW9ucy4gRm9yIHVzZXIgc3BhY2UgYWNjZXNzLCB0aGUgbW9kdWxlCisgICAgIGNhcGkua28gbXVzdCBiZSBsb2FkZWQuCiAKLSAgICAgVGhlIENBUEkgdmFyaWFudCBvZiB0aGUgZHJpdmVyIHN1cHBvcnRzIGxlZ2FjeSBJU0RONExpbnV4IGFwcGxpY2F0aW9ucwotICAgICB2aWEgdGhlIGNhcGlkcnYgY29tcGF0aWJpbGl0eSBkcml2ZXIuIFRoZSBrZXJuZWwgbW9kdWxlIGNhcGlkcnYua28gbXVzdAotICAgICBiZSBsb2FkZWQgZXhwbGljaXRseSB3aXRoIHRoZSBjb21tYW5kCisgICAgIExlZ2FjeSBJU0RONExpbnV4IGFwcGxpY2F0aW9ucyBhcmUgc3VwcG9ydGVkIHZpYSB0aGUgY2FwaWRydgorICAgICBjb21wYXRpYmlsaXR5IGRyaXZlci4gVGhlIGtlcm5lbCBtb2R1bGUgY2FwaWRydi5rbyBtdXN0IGJlIGxvYWRlZAorICAgICBleHBsaWNpdGx5IHdpdGggdGhlIGNvbW1hbmQKICAgICAgICAgbW9kcHJvYmUgY2FwaWRydgogICAgICBpZiBuZWVkZWQsIGFuZCBjYW5ub3QgYmUgdW5sb2FkZWQgYWdhaW4gd2l0aG91dCB1bmxvYWRpbmcgdGhlIGRyaXZlcgogICAgICBmaXJzdC4gKFRoZXNlIGFyZSBsaW1pdGF0aW9ucyBvZiBjYXBpZHJ2LikKIAotICAgICBUaGUgbm90ZSBhYm91dCB1bmltb2RlbSBtb2RlIGluIHRoZSBwcmVjZWRpbmcgc2VjdGlvbiBhcHBsaWVzIGhlcmUsIHRvby4KKyAgICAgTW9zdCBkaXN0cmlidXRpb25zIGhhbmRsZSBsb2FkaW5nIGFuZCB1bmxvYWRpbmcgb2YgdGhlIHZhcmlvdXMgQ0FQSQorICAgICBtb2R1bGVzIGF1dG9tYXRpY2FsbHkgdmlhIHRoZSBjb21tYW5kIGNhcGlpbml0KDEpIGZyb20gdGhlIGNhcGk0ay11dGlscworICAgICBwYWNrYWdlIG9yIGEgc2ltaWxhciBtZWNoYW5pc20uIE5vdGUgdGhhdCBjYXBpaW5pdCgxKSBjYW5ub3QgdW5sb2FkIHRoZQorICAgICBHaWdhc2V0IGRyaXZlcnMgYmVjYXVzZSBpdCBkb2Vzbid0IHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBtb2R1bGUgcGVyCisgICAgIGRyaXZlci4KKworMi40LiBJU0RONExpbnV4CisgICAgIC0tLS0tLS0tLS0KKyAgICAgSWYgdGhlIGRyaXZlciBpcyBjb21waWxlZCB3aXRob3V0IENBUEkgc3VwcG9ydCAobmF0aXZlIElTRE40TGludXgKKyAgICAgdmFyaWFudCksIGl0IHJlZ2lzdGVycyB0aGUgZGV2aWNlIHdpdGggdGhlIGxlZ2FjeSBJU0RONExpbnV4IHN1YnN5c3RlbQorICAgICBhZnRlciBsb2FkaW5nIHRoZSBtb2R1bGUuIEl0IGNhbiB0aGVuIGJlIHVzZWQgd2l0aCBJU0RONExpbnV4CisgICAgIGFwcGxpY2F0aW9ucyBvbmx5LiBNb3N0IGRpc3RyaWJ1dGlvbnMgcHJvdmlkZSBzb21lIGNvbmZpZ3VyYXRpb24gdXRpbGl0eQorICAgICBmb3Igc2V0dGluZyB1cCB0aGF0IHN1YnN5c3RlbS4gT3RoZXJ3aXNlIHlvdSBjYW4gdXNlIHNvbWUgSE9XVE9zIGxpa2UKKyAgICAgICAgIGh0dHA6Ly93d3cubGludXhoYXZlbi5kZS9kbGhwL0hPV1RPL0RFLUlTRE4tSE9XVE8tNS5odG1sCisKIAogMi41LiBVbmltb2RlbSBtb2RlCiAgICAgIC0tLS0tLS0tLS0tLS0KLSAgICAgVGhpcyBpcyBuZWVkZWQgZm9yIHNvbWUgZGV2aWNlcyBbZS5nLiBTWDEwMF0gYXMgdGhleSBoYXZlIHByb2JsZW1zIHdpdGgKLSAgICAgdGhlICJub3JtYWwiIGNvbW1hbmRzLgotCi0gICAgIElmIHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgY29tbWFuZCBsaW5lIHRvb2wgZ2lnYWNvbnRyLCB5b3UgY2FuIGVudGVyCi0gICAgIHVuaW1vZGVtIG1vZGUgdXNpbmcKLSAgICAgICAgIGdpZ2Fjb250ciAtLW1vZGUgdW5pbW9kZW0KLSAgICAgWW91IGNhbiBzd2l0Y2ggYmFjayB1c2luZwotICAgICAgICAgZ2lnYWNvbnRyIC0tbW9kZSBpc2RuCi0KLSAgICAgWW91IGNhbiBhbHNvIHB1dCB0aGUgZHJpdmVyIGRpcmVjdGx5IGludG8gVW5pbW9kZW0gbW9kZSB3aGVuIGl0J3MgbG9hZGVkLAotICAgICBieSBwYXNzaW5nIHRoZSBtb2R1bGUgcGFyYW1ldGVyIHN0YXJ0bW9kZT0wIHRvIHRoZSBoYXJkd2FyZSBzcGVjaWZpYwotICAgICBtb2R1bGUsIGUuZy4KLQltb2Rwcm9iZSB1c2JfZ2lnYXNldCBzdGFydG1vZGU9MAotICAgICBvciBieSBhZGRpbmcgYSBsaW5lIGxpa2UKLQlvcHRpb25zIHVzYl9naWdhc2V0IHN0YXJ0bW9kZT0wCi0gICAgIHRvIGFuIGFwcHJvcHJpYXRlIG1vZHVsZSBjb25maWd1cmF0aW9uIGZpbGUsIGxpa2UgL2V0Yy9tb2Rwcm9iZS5kL2dpZ2FzZXQKLSAgICAgb3IgL2V0Yy9tb2Rwcm9iZS5jb25mLmxvY2FsLgotCiAgICAgIEluIHRoaXMgbW9kZSB0aGUgZGV2aWNlIHdvcmtzIGxpa2UgYSBtb2RlbSBjb25uZWN0ZWQgdG8gYSBzZXJpYWwgcG9ydAogICAgICAodGhlIC9kZXYvdHR5R1UwLCAuLi4gbWVudGlvbmVkIGFib3ZlKSB3aGljaCB1bmRlcnN0YW5kcyB0aGUgY29tbWFuZHMKKwogICAgICAgICAgQVRaICAgICAgICAgICAgICAgICBpbml0LCByZXNldAogICAgICAgICAgICAgID0+IE9LIG9yIEVSUk9SCiAgICAgICAgICBBVEQKQEAgLTIzNCw2ICsyMTUsMzEgQEAKICAgICAgdG8gYW4gYXBwcm9wcmlhdGUgbW9kdWxlIGNvbmZpZ3VyYXRpb24gZmlsZSwgbGlrZSAvZXRjL21vZHByb2JlLmQvZ2lnYXNldAogICAgICBvciAvZXRjL21vZHByb2JlLmNvbmYubG9jYWwuCiAKKyAgICAgVW5pbW9kZW0gbW9kZSBpcyBuZWVkZWQgZm9yIG1ha2luZyBzb21lIGRldmljZXMgW2UuZy4gU1gxMDBdIHdvcmsgd2hpY2gKKyAgICAgZG8gbm90IHN1cHBvcnQgdGhlIHJlZ3VsYXIgR2lnYXNldCBjb21tYW5kIHNldC4gSWYgZGVidWcgb3V0cHV0IChzZWUKKyAgICAgc2VjdGlvbiAzLjIuKSBzaG93cyBzb21ldGhpbmcgbGlrZSB0aGlzIHdoZW4gZGlhbGluZzoKKyAgICAgICAgIENNRCBSZWNlaXZlZDogRVJST1IKKyAgICAgICAgIEF2YWlsYWJsZSBQYXJhbXM6IDAKKyAgICAgICAgIENvbm5lY3Rpb24gU3RhdGU6IDAsIFJlc3BvbnNlOiAtMQorICAgICAgICAgZ2lnYXNldF9wcm9jZXNzX3Jlc3BvbnNlOiByZXNwX2NvZGUgLTEgaW4gQ29uU3RhdGUgMCAhCisgICAgICAgICBUaW1lb3V0IG9jY3VycmVkCisgICAgIHRoZW4gc3dpdGNoaW5nIHRvIHVuaW1vZGVtIG1vZGUgbWF5IGhlbHAuCisKKyAgICAgSWYgeW91IGhhdmUgaW5zdGFsbGVkIHRoZSBjb21tYW5kIGxpbmUgdG9vbCBnaWdhY29udHIsIHlvdSBjYW4gZW50ZXIKKyAgICAgdW5pbW9kZW0gbW9kZSB1c2luZworICAgICAgICAgZ2lnYWNvbnRyIC0tbW9kZSB1bmltb2RlbQorICAgICBZb3UgY2FuIHN3aXRjaCBiYWNrIHVzaW5nCisgICAgICAgICBnaWdhY29udHIgLS1tb2RlIGlzZG4KKworICAgICBZb3UgY2FuIGFsc28gcHV0IHRoZSBkcml2ZXIgZGlyZWN0bHkgaW50byBVbmltb2RlbSBtb2RlIHdoZW4gaXQncyBsb2FkZWQsCisgICAgIGJ5IHBhc3NpbmcgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgc3RhcnRtb2RlPTAgdG8gdGhlIGhhcmR3YXJlIHNwZWNpZmljCisgICAgIG1vZHVsZSwgZS5nLgorCW1vZHByb2JlIHVzYl9naWdhc2V0IHN0YXJ0bW9kZT0wCisgICAgIG9yIGJ5IGFkZGluZyBhIGxpbmUgbGlrZQorCW9wdGlvbnMgdXNiX2dpZ2FzZXQgc3RhcnRtb2RlPTAKKyAgICAgdG8gYW4gYXBwcm9wcmlhdGUgbW9kdWxlIGNvbmZpZ3VyYXRpb24gZmlsZSwgbGlrZSAvZXRjL21vZHByb2JlLmQvZ2lnYXNldAorICAgICBvciAvZXRjL21vZHByb2JlLmNvbmYubG9jYWwuCisKIDIuNi4gQ2FsbC1JRCAoQ0lEKSBtb2RlCiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLQogICAgICBDYWxsLUlEcyBhcmUgbnVtYmVycyB1c2VkIHRvIHRhZyBjb21tYW5kcyB0bywgYW5kIHJlc3BvbnNlcyBmcm9tLCB0aGUKQEAgLTI2Myw3ICsyNjksMjIgQEAKICAgICAgY2hhbmdlIGl0cyBDSUQgbW9kZSB3aGlsZSB0aGUgZHJpdmVyIGlzIGxvYWRlZCwgZWcuCiAgICAgICAgIGVjaG8gMCA+IC9zeXMvY2xhc3MvdHR5L3R0eUdVMC9jaWRtb2RlCiAKLTIuNy4gVW5yZWdpc3RlcmVkIFdpcmVsZXNzIERldmljZXMgKE0xMDEvTTEwNSkKKzIuNy4gRGlhbGluZyBOdW1iZXJzCisgICAgIC0tLS0tLS0tLS0tLS0tLQorICAgICBUaGUgY2FsbGVkIHBhcnR5IG51bWJlciBwcm92aWRlZCBieSBhbiBhcHBsaWNhdGlvbiBmb3IgZGlhbGluZyBvdXQgbXVzdAorICAgICBiZSBhIHB1YmxpYyBuZXR3b3JrIG51bWJlciBhY2NvcmRpbmcgdG8gdGhlIGxvY2FsIGRpYWxpbmcgcGxhbiwgd2l0aG91dAorICAgICBhbnkgZGlhbCBwcmVmaXggZm9yIGdldHRpbmcgYW4gb3V0c2lkZSBsaW5lLgorCisgICAgIEludGVybmFsIGNhbGxzIGNhbiBiZSBtYWRlIGJ5IHByb3ZpZGluZyBhbiBpbnRlcm5hbCBleHRlbnNpb24gbnVtYmVyCisgICAgIHByZWZpeGVkIHdpdGggIioqIiAodHdvIGFzdGVyaXNrcykgYXMgdGhlIGNhbGxlZCBwYXJ0eSBudW1iZXIuIFNvIHRvIGRpYWwKKyAgICAgZWcuIHRoZSBmaXJzdCByZWdpc3RlcmVkIERFQ1QgaGFuZHNldCwgZ2l2ZSAiKioxMSIgYXMgdGhlIGNhbGxlZCBwYXJ0eQorICAgICBudW1iZXIuIERpYWxpbmcgIioqKiIgKHRocmVlIGFzdGVyaXNrcykgY2FsbHMgYWxsIGV4dGVuc2lvbnMKKyAgICAgc2ltdWx0YW5lb3VzbHkgKGdsb2JhbCBjYWxsKS4KKworICAgICBUaGlzIGhvbGRzIGZvciBib3RoIENBUEkgMi4wIGFuZCBJU0RONExpbnV4IGFwcGxpY2F0aW9ucy4gVW5pbW9kZW0gbW9kZQorICAgICBkb2VzIG5vdCBzdXBwb3J0IGludGVybmFsIGNhbGxzLgorCisyLjguIFVucmVnaXN0ZXJlZCBXaXJlbGVzcyBEZXZpY2VzIChNMTAxL00xMDUpCiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhlIHNlcl9naWdhc2V0IGFuZCB1c2JfZ2lnYXNldCBkcml2ZXJzIGlzIHRvIGFsbG93CiAgICAgIHRoZSBNMTAxIGFuZCBNMTA1IHdpcmVsZXNzIGRldmljZXMgdG8gYmUgdXNlZCBhcyBJU0ROIGRldmljZXMgZm9yIElTRE4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vamFfSlAvSE9XVE8gYi9Eb2N1bWVudGF0aW9uL2phX0pQL0hPV1RPCmluZGV4IDU1NDc2OTguLmI2MzMwMWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vamFfSlAvSE9XVE8KKysrIGIvRG9jdW1lbnRhdGlvbi9qYV9KUC9IT1dUTwpAQCAtMjIzLDcgKzIyMyw3IEBACiDjgYLjgarjgZ/jgYzjganjgZPjgYvjgonjgrnjgr/jg7zjg4jjgZfjgaboia/jgYTjgYvjgo/jgYvjgonjgarjgYTjgYzjgIFMaW51eCDjgqvjg7zjg43jg6vplovnmbrjgrPjg5/jg6UKIOODi+ODhuOCo+OBq+WPguWKoOOBl+OBpuS9leOBi+OBmeOCi+OBk+OBqOOCkuOBleOBjOOBl+OBpuOBhOOCi+WgtOWQiOOBq+OBr+OAgUxpbnV4IGtlcm5lbAogSmFuaXRvcidzIOODl+ODreOCuOOCp+OCr+ODiOOBq+OBhOOBkeOBsOiJr+OBhOOBp+OBl+OCh+OBhiAtCi0JaHR0cDovL2phbml0b3Iua2VybmVsbmV3Ymllcy5vcmcvCisJaHR0cDovL2tlcm5lbG5ld2JpZXMub3JnL0tlcm5lbEphbml0b3JzCiDjgZPjgZPjga/jgZ3jga7jgojjgYbjgarjgrnjgr/jg7zjg4jjgpLjgZnjgovjga7jgavjgYbjgaPjgabjgaTjgZHjga7loLTmiYDjgafjgZnjgILjgZPjgZPjgavjga/jgIEKIExpbnV4IOOCq+ODvOODjeODq+OCveODvOOCueODhOODquODvOOBruS4reOBq+WQq+OBvuOCjOOCi+OAgeOBjeOCjOOBhOOBq+OBl+OAgeS/ruato+OBl+OBquOBkeOCjOOBsOOBqgog44KJ44Gq44GE44CB5Y2Y57SU44Gq5ZWP6aGM44Gu44Oq44K544OI44GM6KiY6L+w44GV44KM44Gm44GE44G+44GZ44CC44GT44Gu44OX44Ot44K444Kn44Kv44OI44Gr6Zai44KP44KLCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2phX0pQL1N1Ym1pdHRpbmdQYXRjaGVzIGIvRG9jdW1lbnRhdGlvbi9qYV9KUC9TdWJtaXR0aW5nUGF0Y2hlcwppbmRleCBhOWRjMTI0Li5mMTA3YzgzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2phX0pQL1N1Ym1pdHRpbmdQYXRjaGVzCisrKyBiL0RvY3VtZW50YXRpb24vamFfSlAvU3VibWl0dGluZ1BhdGNoZXMKQEAgLTk3LDcgKzk3LDcgQEAKIGh0dHA6Ly9zYXZhbm5haC5ub25nbnUub3JnL3Byb2plY3RzL3F1aWx0CiAKIEFuZHJldyBNb3J0b24ncyBwYXRjaCBzY3JpcHRzOgotaHR0cDovL3d3dy56aXAuY29tLmF1L35ha3BtL2xpbnV4L3BhdGNoZXMvCitodHRwOi8vdXNlcndlYi5rZXJuZWwub3JnL35ha3BtL3N0dWZmL3RwcC50eHQKIOOBk+OBruODquODs+OCr+OBruWFiOOBruOCueOCr+ODquODl+ODiOOBruS7o+OCj+OCiuOBqOOBl+OBpuOAgXF1aWx0IOOBjOODkeODg+ODgeODnuODjeOCuOODoeODs+ODiAog44OE44O844Or44Go44GX44Gm5o6o5aWo44GV44KM44Gm44GE44G+44GZKOS4iuOBruODquODs+OCr+OCkuimi+OBpuOBj+OBoOOBleOBhCnjgIIKIApAQCAtMjEwLDcgKzIxMCw3IEBACiAg44O756e75qSN5oCn44Gu44Gq44GE44Kz44O844OJ44GL44KJ56e75qSN5oCn44Gu44GC44KL44Kz44O844OJ44G444Gu572u44GN5o+b44GIKOWwj+OBleOBhOevhOWbsuOBpwogICAg44GC44KM44Gw44Ki44O844Kt44OG44Kv44OB44Oj54m55pyJ44Gu44GT44Go44Gn44KC5LuW44Gu5Lq644GM44Kz44OU44O844Gn44GN44G+44GZKQogIOODu+S9nOiAheOChOODoeODs+ODhuODiuOBq+OCiOOCi+S/ruatoyjjgZnjgarjgo/jgaEgcGF0Y2ggbW9ua2V5IOOBruWGjei7oumAgeODouODvOODiSkKLVVSTDogPGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsL3Blb3BsZS9idW5rL3RyaXZpYWwvPgorRU1BSUw6IDx0cml2aWFsQGtlcm5lbC5vcmc+CiAKIDcpIE1JTUUg44KE44Oq44Oz44Kv44KE5Zyn57iu44OV44Kh44Kk44Or44KE5re75LuY44OV44Kh44Kk44Or44Gn44Gv44Gq44GP44OX44Os44Kk44Oz44OG44Kt44K544OI44Gu44G/CiAKQEAgLTUzNCw3ICs1MzQsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBBbmRyZXcgTW9ydG9uLCAiVGhlIHBlcmZlY3QgcGF0Y2giICh0cHApLgotICA8aHR0cDovL3d3dy56aXAuY29tLmF1L35ha3BtL2xpbnV4L3BhdGNoZXMvc3R1ZmYvdHBwLnR4dD4KKyAgPGh0dHA6Ly91c2Vyd2ViLmtlcm5lbC5vcmcvfmFrcG0vc3R1ZmYvdHBwLnR4dD4KIAogSmVmZiBHYXJ6aWssICJMaW51eCBrZXJuZWwgcGF0Y2ggc3VibWlzc2lvbiBmb3JtYXQiLgogICA8aHR0cDovL2xpbnV4Lnl5ei51cy9wYXRjaC1mb3JtYXQuaHRtbD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2J1aWxkL2tidWlsZC50eHQgYi9Eb2N1bWVudGF0aW9uL2tidWlsZC9rYnVpbGQudHh0CmluZGV4IDYzNGM2MjUuLjFlNTE2NWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2J1aWxkL2tidWlsZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rYnVpbGQva2J1aWxkLnR4dApAQCAtMjIsMTEgKzIyLDMzIEBACiAKIEtBRkxBR1MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BZGRpdGlvbmFsIG9wdGlvbnMgdG8gdGhlIGFzc2VtYmxlci4KK0FkZGl0aW9uYWwgb3B0aW9ucyB0byB0aGUgYXNzZW1ibGVyIChmb3IgYnVpbHQtaW4gYW5kIG1vZHVsZXMpLgorCitBRkxBR1NfTU9EVUxFCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQWRkdGlvbmFsIG1vZHVsZSBzcGVjaWZpYyBvcHRpb25zIHRvIHVzZSBmb3IgJChBUykuCisKK0FGTEFHU19LRVJORUwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBZGR0aW9uYWwgb3B0aW9ucyBmb3IgJChBUykgd2hlbiB1c2VkIGZvciBhc3NlbWJsZXIKK2NvZGUgZm9yIGNvZGUgdGhhdCBpcyBjb21waWxlZCBhcyBidWlsdC1pbi4KIAogS0NGTEFHUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFkZGl0aW9uYWwgb3B0aW9ucyB0byB0aGUgQyBjb21waWxlci4KK0FkZGl0aW9uYWwgb3B0aW9ucyB0byB0aGUgQyBjb21waWxlciAoZm9yIGJ1aWx0LWluIGFuZCBtb2R1bGVzKS4KKworQ0ZMQUdTX0tFUk5FTAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FkZHRpb25hbCBvcHRpb25zIGZvciAkKENDKSB3aGVuIHVzZWQgdG8gY29tcGlsZQorY29kZSB0aGF0IGlzIGNvbXBpbGVkIGFzIGJ1aWx0LWluLgorCitDRkxBR1NfTU9EVUxFCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQWRkdGlvbmFsIG1vZHVsZSBzcGVjaWZpYyBvcHRpb25zIHRvIHVzZSBmb3IgJChDQykuCisKK0xERkxBR1NfTU9EVUxFCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQWRkaXRpb25hbCBvcHRpb25zIHVzZWQgZm9yICQoTEQpIHdoZW4gbGlua2luZyBtb2R1bGVzLgogCiBLQlVJTERfVkVSQk9TRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQwLDE1ICs2MiwxNSBAQAogbW9kdWxlcy4KIFRoZSBkaXJlY3RvcnkgY2FuIGJlIHNwZWNpZmllZCBpbiBzZXZlcmFsIHdheXM6CiAxKSBVc2UgIk09Li4uIiBvbiB0aGUgY29tbWFuZCBsaW5lCi0yKSBFbnZpcm9ubW5ldCB2YXJpYWJsZSBLQlVJTERfRVhUTU9ECi0zKSBFbnZpcm9ubW5ldCB2YXJpYWJsZSBTVUJESVJTCisyKSBFbnZpcm9ubWVudCB2YXJpYWJsZSBLQlVJTERfRVhUTU9ECiszKSBFbnZpcm9ubWVudCB2YXJpYWJsZSBTVUJESVJTCiBUaGUgcG9zc2liaWxpdGllcyBhcmUgbGlzdGVkIGluIHRoZSBvcmRlciB0aGV5IHRha2UgcHJlY2VkZW5jZS4KIFVzaW5nICJNPS4uLiIgd2lsbCBhbHdheXMgb3ZlcnJpZGUgdGhlIG90aGVycy4KIAogS0JVSUxEX09VVFBVVAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNwZWNpZnkgdGhlIG91dHB1dCBkaXJlY3Rvcnkgd2hlbiBidWlsZGluZyB0aGUga2VybmVsLgotVGhlIG91dHB1dCBkaXJlY3RvcnkgY2FuIGFsc28gYmUgc3BlY2lmaWNlZCB1c2luZyAiTz0uLi4iLgorVGhlIG91dHB1dCBkaXJlY3RvcnkgY2FuIGFsc28gYmUgc3BlY2lmaWVkIHVzaW5nICJPPS4uLiIuCiBTZXR0aW5nICJPPS4uLiIgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIEtCVUlMRF9PVVRQVVQuCiAKIEFSQ0gKQEAgLTkwLDcgKzExMiw3IEBACiAgICAgJDMgLSBrZXJuZWwgbWFwIGZpbGUKICAgICAkNCAtIGRlZmF1bHQgaW5zdGFsbCBwYXRoICh1c2Ugcm9vdCBkaXJlY3RvcnkgaWYgYmxhbmspCiAKLVRoZSBpbXBsbWVudGF0aW9uIG9mICJtYWtlIGluc3RhbGwiIGlzIGFyY2hpdGVjdHVyZSBzcGVjaWZpYworVGhlIGltcGxlbWVudGF0aW9uIG9mICJtYWtlIGluc3RhbGwiIGlzIGFyY2hpdGVjdHVyZSBzcGVjaWZpYwogYW5kIGl0IG1heSBkaWZmZXIgZnJvbSB0aGUgYWJvdmUuCiAKIElOU1RBTExLRVJORUwgaXMgcHJvdmlkZWQgdG8gZW5hYmxlIHRoZSBwb3NzaWJpbGl0eSB0bwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy50eHQgYi9Eb2N1bWVudGF0aW9uL2tidWlsZC9rY29uZmlnLnR4dAppbmRleCBiMmNiMTZlLi5jY2E0NmIxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tidWlsZC9rY29uZmlnLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tidWlsZC9rY29uZmlnLnR4dApAQCAtNjUsNyArNjUsNyBAQAogZmlsZW5hbWUgdGhhdCBjb250YWlucyBjb25maWcgc3ltYm9scyB0aGF0IHRoZSB1c2VyIHJlcXVpcmVzIHRvIGJlCiBzZXQgdG8gYSBzcGVjaWZpYyB2YWx1ZS4gIElmIEtDT05GSUdfQUxMQ09ORklHIGlzIHVzZWQgd2l0aG91dCBhCiBmaWxlbmFtZSwgIm1ha2UgKmNvbmZpZyIgY2hlY2tzIGZvciBhIGZpbGUgbmFtZWQKLSJhbGx7eWVzL21vZC9uby9yYW5kb219LmNvbmZpZyIgKGNvcnJlc3BvbmRpbmcgdG8gdGhlICpjb25maWcgY29tbWFuZAorImFsbHt5ZXMvbW9kL25vL2RlZi9yYW5kb219LmNvbmZpZyIgKGNvcnJlc3BvbmRpbmcgdG8gdGhlICpjb25maWcgY29tbWFuZAogdGhhdCB3YXMgdXNlZCkgZm9yIHN5bWJvbCB2YWx1ZXMgdGhhdCBhcmUgdG8gYmUgZm9yY2VkLiAgSWYgdGhpcyBmaWxlCiBpcyBub3QgZm91bmQsIGl0IGNoZWNrcyBmb3IgYSBmaWxlIG5hbWVkICJhbGwuY29uZmlnIiB0byBjb250YWluIGZvcmNlZAogdmFsdWVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZWZpbGVzLnR4dCBiL0RvY3VtZW50YXRpb24va2J1aWxkL21ha2VmaWxlcy50eHQKaW5kZXggNzFjNjAyZC4uYzM3NTMxMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZWZpbGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tidWlsZC9tYWtlZmlsZXMudHh0CkBAIC0xNjgsNyArMTY4LDcgQEAKIAkJI2RyaXZlcnMvaXNkbi9pNGwvTWFrZWZpbGUKIAkJIyBNYWtlZmlsZSBmb3IgdGhlIGtlcm5lbCBJU0ROIHN1YnN5c3RlbSBhbmQgZGV2aWNlIGRyaXZlcnMuCiAJCSMgRWFjaCBjb25maWd1cmF0aW9uIG9wdGlvbiBlbmFibGVzIGEgbGlzdCBvZiBmaWxlcy4KLQkJb2JqLSQoQ09ORklHX0lTRE4pICAgICAgICAgICAgICs9IGlzZG4ubworCQlvYmotJChDT05GSUdfSVNETl9JNEwpICAgICAgICAgKz0gaXNkbi5vCiAJCW9iai0kKENPTkZJR19JU0ROX1BQUF9CU0RDT01QKSArPSBpc2RuX2JzZGNvbXAubwogCiAtLS0gMy4zIExvYWRhYmxlIG1vZHVsZSBnb2FscyAtIG9iai1tCkBAIC0xODcsMzQgKzE4NywzNSBAQAogCU5vdGU6IEluIHRoaXMgZXhhbXBsZSAkKENPTkZJR19JU0ROX1BQUF9CU0RDT01QKSBldmFsdWF0ZXMgdG8gJ20nCiAKIAlJZiBhIGtlcm5lbCBtb2R1bGUgaXMgYnVpbHQgZnJvbSBzZXZlcmFsIHNvdXJjZSBmaWxlcywgeW91IHNwZWNpZnkKLQl0aGF0IHlvdSB3YW50IHRvIGJ1aWxkIGEgbW9kdWxlIGluIHRoZSBzYW1lIHdheSBhcyBhYm92ZS4KLQotCUtidWlsZCBuZWVkcyB0byBrbm93IHdoaWNoIHRoZSBwYXJ0cyB0aGF0IHlvdSB3YW50IHRvIGJ1aWxkIHlvdXIKLQltb2R1bGUgZnJvbSwgc28geW91IGhhdmUgdG8gdGVsbCBpdCBieSBzZXR0aW5nIGFuCi0JJCg8bW9kdWxlX25hbWU+LW9ianMpIHZhcmlhYmxlLgorCXRoYXQgeW91IHdhbnQgdG8gYnVpbGQgYSBtb2R1bGUgaW4gdGhlIHNhbWUgd2F5IGFzIGFib3ZlOyBob3dldmVyLAorCWtidWlsZCBuZWVkcyB0byBrbm93IHdoaWNoIG9iamVjdCBmaWxlcyB5b3Ugd2FudCB0byBidWlsZCB5b3VyCisJbW9kdWxlIGZyb20sIHNvIHlvdSBoYXZlIHRvIHRlbGwgaXQgYnkgc2V0dGluZyBhICQoPG1vZHVsZV9uYW1lPi15KQorCXZhcmlhYmxlLgogCiAJRXhhbXBsZToKIAkJI2RyaXZlcnMvaXNkbi9pNGwvTWFrZWZpbGUKLQkJb2JqLSQoQ09ORklHX0lTRE4pICs9IGlzZG4ubwotCQlpc2RuLW9ianMgOj0gaXNkbl9uZXRfbGliLm8gaXNkbl92MTEwLm8gaXNkbl9jb21tb24ubworCQlvYmotJChDT05GSUdfSVNETl9JNEwpICs9IGlzZG4ubworCQlpc2RuLXkgOj0gaXNkbl9uZXRfbGliLm8gaXNkbl92MTEwLm8gaXNkbl9jb21tb24ubwogCiAJSW4gdGhpcyBleGFtcGxlLCB0aGUgbW9kdWxlIG5hbWUgd2lsbCBiZSBpc2RuLm8uIEtidWlsZCB3aWxsCi0JY29tcGlsZSB0aGUgb2JqZWN0cyBsaXN0ZWQgaW4gJChpc2RuLW9ianMpIGFuZCB0aGVuIHJ1bgorCWNvbXBpbGUgdGhlIG9iamVjdHMgbGlzdGVkIGluICQoaXNkbi15KSBhbmQgdGhlbiBydW4KIAkiJChMRCkgLXIiIG9uIHRoZSBsaXN0IG9mIHRoZXNlIGZpbGVzIHRvIGdlbmVyYXRlIGlzZG4uby4KIAotCUtidWlsZCByZWNvZ25pc2VzIG9iamVjdHMgdXNlZCBmb3IgY29tcG9zaXRlIG9iamVjdHMgYnkgdGhlIHN1ZmZpeAotCS1vYmpzLCBhbmQgdGhlIHN1ZmZpeCAteS4gVGhpcyBhbGxvd3MgdGhlIE1ha2VmaWxlcyB0byB1c2UKLQl0aGUgdmFsdWUgb2YgYSBDT05GSUdfIHN5bWJvbCB0byBkZXRlcm1pbmUgaWYgYW4gb2JqZWN0IGlzIHBhcnQKLQlvZiBhIGNvbXBvc2l0ZSBvYmplY3QuCisJRHVlIHRvIGtidWlsZCByZWNvZ25pemluZyAkKDxtb2R1bGVfbmFtZT4teSkgZm9yIGNvbXBvc2l0ZSBvYmplY3RzLAorCXlvdSBjYW4gdXNlIHRoZSB2YWx1ZSBvZiBhIENPTkZJR18gc3ltYm9sIHRvIG9wdGlvbmFsbHkgaW5jbHVkZSBhbgorCW9iamVjdCBmaWxlIGFzIHBhcnQgb2YgYSBjb21wb3NpdGUgb2JqZWN0LgogCiAJRXhhbXBsZToKIAkJI2ZzL2V4dDIvTWFrZWZpbGUKLQkgICAgICAgIG9iai0kKENPTkZJR19FWFQyX0ZTKSAgICAgICAgKz0gZXh0Mi5vCi0JCWV4dDIteSAgICAgICAgICAgICAgICAgICAgICAgOj0gYmFsbG9jLm8gYml0bWFwLm8KLQkgICAgICAgIGV4dDItJChDT05GSUdfRVhUMl9GU19YQVRUUikgKz0geGF0dHIubworCSAgICAgICAgb2JqLSQoQ09ORklHX0VYVDJfRlMpICs9IGV4dDIubworCQlleHQyLXkgOj0gYmFsbG9jLm8gZGlyLm8gZmlsZS5vIGlhbGxvYy5vIGlub2RlLm8gaW9jdGwubyBcCisJCQkgIG5hbWVpLm8gc3VwZXIubyBzeW1saW5rLm8KKwkgICAgICAgIGV4dDItJChDT05GSUdfRVhUMl9GU19YQVRUUikgKz0geGF0dHIubyB4YXR0cl91c2VyLm8gXAorCQkJCQkJeGF0dHJfdHJ1c3RlZC5vCiAKLQlJbiB0aGlzIGV4YW1wbGUsIHhhdHRyLm8gaXMgb25seSBwYXJ0IG9mIHRoZSBjb21wb3NpdGUgb2JqZWN0Ci0JZXh0Mi5vIGlmICQoQ09ORklHX0VYVDJfRlNfWEFUVFIpIGV2YWx1YXRlcyB0byAneScuCisJSW4gdGhpcyBleGFtcGxlLCB4YXR0ci5vLCB4YXR0cl91c2VyLm8gYW5kIHhhdHRyX3RydXN0ZWQubyBhcmUgb25seQorCXBhcnQgb2YgdGhlIGNvbXBvc2l0ZSBvYmplY3QgZXh0Mi5vIGlmICQoQ09ORklHX0VYVDJfRlNfWEFUVFIpCisJZXZhbHVhdGVzIHRvICd5Jy4KIAogCU5vdGU6IE9mIGNvdXJzZSwgd2hlbiB5b3UgYXJlIGJ1aWxkaW5nIG9iamVjdHMgaW50byB0aGUga2VybmVsLAogCXRoZSBzeW50YXggYWJvdmUgd2lsbCBhbHNvIHdvcmsuIFNvLCBpZiB5b3UgaGF2ZSBDT05GSUdfRVhUMl9GUz15LApAQCAtMjQ0LDEyICsyNDUsMTIgQEAKIAltYXkgY29udGFpbiBib3RoIGEgYnVpbHQtaW4ubyBhbmQgYSBsaWIuYSBmaWxlLgogCiAJRXhhbXBsZToKLQkJI2FyY2gvaTM4Ni9saWIvTWFrZWZpbGUKLQkJbGliLXkgICAgOj0gY2hlY2tzdW0ubyBkZWxheS5vCisJCSNhcmNoL3g4Ni9saWIvTWFrZWZpbGUKKwkJbGliLXkgICAgOj0gZGVsYXkubwogCi0JVGhpcyB3aWxsIGNyZWF0ZSBhIGxpYnJhcnkgbGliLmEgYmFzZWQgb24gY2hlY2tzdW0ubyBhbmQgZGVsYXkuby4KLQlGb3Iga2J1aWxkIHRvIGFjdHVhbGx5IHJlY29nbml6ZSB0aGF0IHRoZXJlIGlzIGEgbGliLmEgYmVpbmcgYnVpbHQsCi0JdGhlIGRpcmVjdG9yeSBzaGFsbCBiZSBsaXN0ZWQgaW4gbGlicy15LgorCVRoaXMgd2lsbCBjcmVhdGUgYSBsaWJyYXJ5IGxpYi5hIGJhc2VkIG9uIGRlbGF5Lm8uIEZvciBrYnVpbGQgdG8KKwlhY3R1YWxseSByZWNvZ25pemUgdGhhdCB0aGVyZSBpcyBhIGxpYi5hIGJlaW5nIGJ1aWx0LCB0aGUgZGlyZWN0b3J5CisJc2hhbGwgYmUgbGlzdGVkIGluIGxpYnMteS4KIAlTZWUgYWxzbyAiNi4zIExpc3QgZGlyZWN0b3JpZXMgdG8gdmlzaXQgd2hlbiBkZXNjZW5kaW5nIi4KIAogCVVzZSBvZiBsaWIteSBpcyBub3JtYWxseSByZXN0cmljdGVkIHRvIGxpYi8gYW5kIGFyY2gvKi9saWIuCkBAIC0yODQsNDMgKzI4NSw0MCBAQAogLS0tIDMuNyBDb21waWxhdGlvbiBmbGFncwogCiAgICAgY2NmbGFncy15LCBhc2ZsYWdzLXkgYW5kIGxkZmxhZ3MteQotCVRoZSB0aHJlZSBmbGFncyBsaXN0ZWQgYWJvdmUgYXBwbGllcyBvbmx5IHRvIHRoZSBrYnVpbGQgbWFrZWZpbGUKLQl3aGVyZSB0aGV5IGFyZSBhc3NpZ25lZC4gVGhleSBhcmUgdXNlZCBmb3IgYWxsIHRoZSBub3JtYWwKLQljYywgYXMgYW5kIGxkIGludm9jYXRpb24gaGFwcGVuaWduIGR1cmluZyBhIHJlY3Vyc2l2ZSBidWlsZC4KKwlUaGVzZSB0aHJlZSBmbGFncyBhcHBseSBvbmx5IHRvIHRoZSBrYnVpbGQgbWFrZWZpbGUgaW4gd2hpY2ggdGhleQorCWFyZSBhc3NpZ25lZC4gVGhleSBhcmUgdXNlZCBmb3IgYWxsIHRoZSBub3JtYWwgY2MsIGFzIGFuZCBsZAorCWludm9jYXRpb25zIGhhcHBlbmluZyBkdXJpbmcgYSByZWN1cnNpdmUgYnVpbGQuCiAJTm90ZTogRmxhZ3Mgd2l0aCB0aGUgc2FtZSBiZWhhdmlvdXIgd2VyZSBwcmV2aW91c2x5IG5hbWVkOgogCUVYVFJBX0NGTEFHUywgRVhUUkFfQUZMQUdTIGFuZCBFWFRSQV9MREZMQUdTLgotCVRoZXkgYXJlIHlldCBzdXBwb3J0ZWQgYnV0IHRoZWlyIHVzZSBhcmUgZGVwcmVjYXRlZC4KKwlUaGV5IGFyZSBzdGlsbCBzdXBwb3J0ZWQgYnV0IHRoZWlyIHVzYWdlIGlzIGRlcHJlY2F0ZWQuCiAKLQljY2ZsYWdzLXkgc3BlY2lmaWVzIG9wdGlvbnMgZm9yIGNvbXBpbGluZyBDIGZpbGVzIHdpdGggJChDQykuCisJY2NmbGFncy15IHNwZWNpZmllcyBvcHRpb25zIGZvciBjb21waWxpbmcgd2l0aCAkKENDKS4KIAogCUV4YW1wbGU6Ci0JCSMgZHJpdmVycy9zb3VuZC9lbXUxMGsxL01ha2VmaWxlCi0JCWNjZmxhZ3MteSArPSAtSSQob2JqKQotCQljY2ZsYWdzLSQoREVCVUcpICs9IC1ERU1VMTBLMV9ERUJVRwotCisJCSMgZHJpdmVycy9hY3BpL01ha2VmaWxlCisJCWNjZmxhZ3MteSA6PSAtT3MKKwkJY2NmbGFncy0kKENPTkZJR19BQ1BJX0RFQlVHKSArPSAtREFDUElfREVCVUdfT1VUUFVUCiAKIAlUaGlzIHZhcmlhYmxlIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSB0b3AgTWFrZWZpbGUgb3ducyB0aGUKIAl2YXJpYWJsZSAkKEtCVUlMRF9DRkxBR1MpIGFuZCB1c2VzIGl0IGZvciBjb21waWxhdGlvbiBmbGFncyBmb3IgdGhlCiAJZW50aXJlIHRyZWUuCiAKLQlhc2ZsYWdzLXkgaXMgYSBzaW1pbGFyIHN0cmluZyBmb3IgcGVyLWRpcmVjdG9yeSBvcHRpb25zCi0Jd2hlbiBjb21waWxpbmcgYXNzZW1ibHkgbGFuZ3VhZ2Ugc291cmNlLgorCWFzZmxhZ3MteSBzcGVjaWZpZXMgb3B0aW9ucyBmb3IgYXNzZW1ibGluZyB3aXRoICQoQVMpLgogCiAJRXhhbXBsZToKLQkJI2FyY2gveDg2XzY0L2tlcm5lbC9NYWtlZmlsZQotCQlhc2ZsYWdzLXkgOj0gLXRyYWRpdGlvbmFsCisJCSNhcmNoL3NwYXJjL2tlcm5lbC9NYWtlZmlsZQorCQlhc2ZsYWdzLXkgOj0gLWFuc2kKIAotCi0JbGRmbGFncy15IGlzIGEgc3RyaW5nIGZvciBwZXItZGlyZWN0b3J5IG9wdGlvbnMgdG8gJChMRCkuCisJbGRmbGFncy15IHNwZWNpZmllcyBvcHRpb25zIGZvciBsaW5raW5nIHdpdGggJChMRCkuCiAKIAlFeGFtcGxlOgotCQkjYXJjaC9tNjhrL2Zwc3AwNDAvTWFrZWZpbGUKLQkJbGRmbGFncy15IDo9IC14CisJCSNhcmNoL2NyaXMvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCisJCWxkZmxhZ3MteSArPSAtVCAkKHNyY3RyZWUpLyQoc3JjKS9kZWNvbXByZXNzXyQoYXJjaC15KS5sZHMKIAogICAgIHN1YmRpci1jY2ZsYWdzLXksIHN1YmRpci1hc2ZsYWdzLXkKLQlUaGUgdHdvIGZsYWdzIGxpc3RlZCBhYm92ZSBhcmUgc2ltaWxhciB0byBjY2ZsYWdzLXkgYW5kIGFzLWZhbGdzLXkuCi0JVGhlIGRpZmZlcmVuY2UgaXMgdGhhdCB0aGUgc3ViZGlyLSB2YXJpYW50cyBoYXMgZWZmZWN0IGZvciB0aGUga2J1aWxkCi0JZmlsZSB3aGVyZSB0ZXkgYXJlIHByZXNlbnQgYW5kIGFsbCBzdWJkaXJlY3Rvcmllcy4KKwlUaGUgdHdvIGZsYWdzIGxpc3RlZCBhYm92ZSBhcmUgc2ltaWxhciB0byBjY2ZsYWdzLXkgYW5kIGFzZmxhZ3MteS4KKwlUaGUgZGlmZmVyZW5jZSBpcyB0aGF0IHRoZSBzdWJkaXItIHZhcmlhbnRzIGhhdmUgZWZmZWN0IGZvciB0aGUga2J1aWxkCisJZmlsZSB3aGVyZSB0aGV5IGFyZSBwcmVzZW50IGFuZCBhbGwgc3ViZGlyZWN0b3JpZXMuCiAJT3B0aW9ucyBzcGVjaWZpZWQgdXNpbmcgc3ViZGlyLSogYXJlIGFkZGVkIHRvIHRoZSBjb21tYW5kbGluZSBiZWZvcmUKIAl0aGUgb3B0aW9ucyBzcGVjaWZpZWQgdXNpbmcgdGhlIG5vbi1zdWJkaXIgdmFyaWFudHMuCiAKQEAgLTM0MCwxOCArMzM4LDE4IEBACiAJCUNGTEFHU19haGExNTJ4Lm8gPSAgIC1EQUhBMTUyWF9TVEFUIC1EQVVUT0NPTkYKIAkJQ0ZMQUdTX2dkdGgubyAgICA9ICMgLURERUJVR19HRFRIPTIgLURfX1NFUklBTF9fIC1EX19DT00yX18gXAogCQkJCSAgICAgLURHRFRIX1NUQVRJU1RJQ1MKLQkJQ0ZMQUdTX3NlYWdhdGUubyA9ICAgLURBUkJJVFJBVEUgLURQQVJJVFkgLURTRUFHQVRFX1VTRV9BU00KIAotCVRoZXNlIHRocmVlIGxpbmVzIHNwZWNpZnkgY29tcGlsYXRpb24gZmxhZ3MgZm9yIGFoYTE1MngubywKLQlnZHRoLm8sIGFuZCBzZWFnYXRlLm8KKwlUaGVzZSB0d28gbGluZXMgc3BlY2lmeSBjb21waWxhdGlvbiBmbGFncyBmb3IgYWhhMTUyeC5vIGFuZCBnZHRoLm8uCiAKIAkkKEFGTEFHU18kQCkgaXMgYSBzaW1pbGFyIGZlYXR1cmUgZm9yIHNvdXJjZSBmaWxlcyBpbiBhc3NlbWJseQogCWxhbmd1YWdlcy4KIAogCUV4YW1wbGU6CiAJCSMgYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCi0JCUFGTEFHU19oZWFkLWFybXYubyA6PSAtRFRFWFRBRERSPSQoVEVYVEFERFIpIC10cmFkaXRpb25hbAotCQlBRkxBR1NfaGVhZC1hcm1vLm8gOj0gLURURVhUQUREUj0kKFRFWFRBRERSKSAtdHJhZGl0aW9uYWwKKwkJQUZMQUdTX2hlYWQubyAgICAgICAgOj0gLURURVhUX09GRlNFVD0kKFRFWFRfT0ZGU0VUKQorCQlBRkxBR1NfY3J1bmNoLWJpdHMubyA6PSAtV2EsLW1jcHU9ZXA5MzEyCisJCUFGTEFHU19pd21teHQubyAgICAgIDo9IC1XYSwtbWNwdT1pd21teHQKKwogCiAtLS0gMy45IERlcGVuZGVuY3kgdHJhY2tpbmcKIApAQCAtOTIzLDE2ICs5MjEsMzMgQEAKIAlUaGUgZmlyc3QgZXhhbXBsZSB1dGlsaXNlcyB0aGUgdHJpY2sgdGhhdCBhIGNvbmZpZyBvcHRpb24gZXhwYW5kcwogCXRvICd5JyB3aGVuIHNlbGVjdGVkLgogCi0gICAgQ0ZMQUdTX0tFUk5FTAkkKENDKSBvcHRpb25zIHNwZWNpZmljIGZvciBidWlsdC1pbgorICAgIEtCVUlMRF9BRkxBR1NfS0VSTkVMCSQoQVMpIG9wdGlvbnMgc3BlY2lmaWMgZm9yIGJ1aWx0LWluCiAKLQkkKENGTEFHU19LRVJORUwpIGNvbnRhaW5zIGV4dHJhIEMgY29tcGlsZXIgZmxhZ3MgdXNlZCB0byBjb21waWxlCisJJChLQlVJTERfQUZMQUdTX0tFUk5FTCkgY29udGFpbnMgZXh0cmEgQyBjb21waWxlciBmbGFncyB1c2VkIHRvIGNvbXBpbGUKIAlyZXNpZGVudCBrZXJuZWwgY29kZS4KIAotICAgIENGTEFHU19NT0RVTEUJJChDQykgb3B0aW9ucyBzcGVjaWZpYyBmb3IgbW9kdWxlcworICAgIEtCVUlMRF9BRkxBR1NfTU9EVUxFICAgT3B0aW9ucyBmb3IgJChBUykgd2hlbiBidWlsZGluZyBtb2R1bGVzCiAKLQkkKENGTEFHU19NT0RVTEUpIGNvbnRhaW5zIGV4dHJhIEMgY29tcGlsZXIgZmxhZ3MgdXNlZCB0byBjb21waWxlIGNvZGUKLQlmb3IgbG9hZGFibGUga2VybmVsIG1vZHVsZXMuCisJJChLQlVJTERfQUZMQUdTX01PRFVMRSkgaXMgdXNlZCB0byBhZGQgYXJjaCBzcGVjaWZpYyBvcHRpb25zIHRoYXQKKwlhcmUgdXNlZCBmb3IgJChBUykuCisJRnJvbSBjb21tYW5kbGluZSBBRkxBR1NfTU9EVUxFIHNoYWxsIGJlIHVzZWQgKHNlZSBrYnVpbGQudHh0KS4KIAorICAgIEtCVUlMRF9DRkxBR1NfS0VSTkVMCSQoQ0MpIG9wdGlvbnMgc3BlY2lmaWMgZm9yIGJ1aWx0LWluCisKKwkkKEtCVUlMRF9DRkxBR1NfS0VSTkVMKSBjb250YWlucyBleHRyYSBDIGNvbXBpbGVyIGZsYWdzIHVzZWQgdG8gY29tcGlsZQorCXJlc2lkZW50IGtlcm5lbCBjb2RlLgorCisgICAgS0JVSUxEX0NGTEFHU19NT0RVTEUgICBPcHRpb25zIGZvciAkKENDKSB3aGVuIGJ1aWxkaW5nIG1vZHVsZXMKKworCSQoS0JVSUxEX0NGTEFHU19NT0RVTEUpIGlzIHVzZWQgdG8gYWRkIGFyY2ggc3BlY2lmaWMgb3B0aW9ucyB0aGF0CisJYXJlIHVzZWQgZm9yICQoQ0MpLgorCUZyb20gY29tbWFuZGxpbmUgQ0ZMQUdTX01PRFVMRSBzaGFsbCBiZSB1c2VkIChzZWUga2J1aWxkLnR4dCkuCisKKyAgICBLQlVJTERfTERGTEFHU19NT0RVTEUgICBPcHRpb25zIGZvciAkKExEKSB3aGVuIGxpbmtpbmcgbW9kdWxlcworCisJJChLQlVJTERfTERGTEFHU19NT0RVTEUpIGlzIHVzZWQgdG8gYWRkIGFyY2ggc3BlY2lmaWMgb3B0aW9ucworCXVzZWQgd2hlbiBsaW5raW5nIG1vZHVsZXMuIFRoaXMgaXMgb2Z0ZW4gYSBsaW5rZXIgc2NyaXB0LgorCUZyb20gY29tbWFuZGxpbmUgTERGTEFHU19NT0RVTEUgc2hhbGwgYmUgdXNlZCAoc2VlIGtidWlsZC50eHQpLgogCiAtLS0gNi4yIEFkZCBwcmVyZXF1aXNpdGVzIHRvIGFyY2hwcmVwYXJlOgogCkBAIC0xMTc2LDE0ICsxMTkxLDE0IEBACiA9PT0gNyBLYnVpbGQgc3ludGF4IGZvciBleHBvcnRlZCBoZWFkZXJzCiAKIFRoZSBrZXJuZWwgaW5jbHVkZSBhIHNldCBvZiBoZWFkZXJzIHRoYXQgaXMgZXhwb3J0ZWQgdG8gdXNlcnNwYWNlLgotTWFueSBoZWFkZXJzIGNhbiBiZSBleHBvcnRlZCBhcy1pcyBidXQgb3RoZXIgaGVhZGVycyByZXF1aXJlcyAgYQorTWFueSBoZWFkZXJzIGNhbiBiZSBleHBvcnRlZCBhcy1pcyBidXQgb3RoZXIgaGVhZGVycyByZXF1aXJlIGEKIG1pbmltYWwgcHJlLXByb2Nlc3NpbmcgYmVmb3JlIHRoZXkgYXJlIHJlYWR5IGZvciB1c2VyLXNwYWNlLgogVGhlIHByZS1wcm9jZXNzaW5nIGRvZXM6CiAtIGRyb3Aga2VybmVsIHNwZWNpZmljIGFubm90YXRpb25zCiAtIGRyb3AgaW5jbHVkZSBvZiBjb21waWxlci5oCi0tIGRyb3AgYWxsIHNlY3Rpb25zIHRoYXQgaXMga2VybmVsIGludGVybmF0IChndWFyZGVkIGJ5IGlmZGVmIF9fS0VSTkVMX18pCistIGRyb3AgYWxsIHNlY3Rpb25zIHRoYXQgYXJlIGtlcm5lbCBpbnRlcm5hbCAoZ3VhcmRlZCBieSBpZmRlZiBfX0tFUk5FTF9fKQogCi1FYWNoIHJlbGV2YW50IGRpcmVjdG9yeSBjb250YWluIGEgZmlsZSBuYW1lICJLYnVpbGQiIHdoaWNoIHNwZWNpZnkgdGhlCitFYWNoIHJlbGV2YW50IGRpcmVjdG9yeSBjb250YWlucyBhIGZpbGUgbmFtZSAiS2J1aWxkIiB3aGljaCBzcGVjaWZpZXMgdGhlCiBoZWFkZXJzIHRvIGJlIGV4cG9ydGVkLgogU2VlIHN1YnNlcXVlbnQgY2hhcHRlciBmb3IgdGhlIHN5bnRheCBvZiB0aGUgS2J1aWxkIGZpbGUuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLWRvY3MudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtZG9jcy50eHQKaW5kZXggZWM4ZDMxZWUuLjcxNWVhYWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLWRvY3MudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLWRvY3MudHh0CkBAIC03NSw3ICs3NSw3IEBACiAKICAgICAgKiBUaXRsZTogIkNvbmNlcHR1YWwgQXJjaGl0ZWN0dXJlIG9mIHRoZSBMaW51eCBLZXJuZWwiCiAgICAgICAgQXV0aG9yOiBJdmFuIFQuIEJvd21hbi4KLSAgICAgICBVUkw6IGh0dHA6Ly9wbGcudXdhdGVybG9vLmNhL35pdGJvd21hbi9wYXBlcnMvQ1M3NDZHLWExLmh0bWwKKyAgICAgICBVUkw6IGh0dHA6Ly9wbGcudXdhdGVybG9vLmNhLwogICAgICAgIEtleXdvcmRzOiBjb25jZXB0dWFsIHNvZnR3YXJlIGFyY2hpdGVjdHVyZSwgZXh0cmFjdGVkIGRlc2lnbiwKICAgICAgICByZXZlcnNlIGVuZ2luZWVyaW5nLCBzeXN0ZW0gc3RydWN0dXJlLgogICAgICAgIERlc2NyaXB0aW9uOiBDb25jZXB0dWFsIHNvZnR3YXJlIGFyY2hpdGVjdHVyZSBvZiB0aGUgTGludXgga2VybmVsLApAQCAtODQsNyArODQsNyBAQAogCiAgICAgICogVGl0bGU6ICJDb25jcmV0ZSBBcmNoaXRlY3R1cmUgb2YgdGhlIExpbnV4IEtlcm5lbCIKICAgICAgICBBdXRob3I6IEl2YW4gVC4gQm93bWFuLCBTYWhlZW0gU2lkZGlxaSwgYW5kIE1leWVyIEMuIFRhbnVhbi4KLSAgICAgICBVUkw6IGh0dHA6Ly9wbGcudXdhdGVybG9vLmNhL35pdGJvd21hbi9wYXBlcnMvQ1M3NDZHLWEyLmh0bWwKKyAgICAgICBVUkw6IGh0dHA6Ly9wbGcudXdhdGVybG9vLmNhLwogICAgICAgIEtleXdvcmRzOiBjb25jcmV0ZSBhcmNoaXRlY3R1cmUsIGV4dHJhY3RlZCBkZXNpZ24sIHJldmVyc2UKICAgICAgICBlbmdpbmVlcmluZywgc3lzdGVtIHN0cnVjdHVyZSwgZGVwZW5kZW5jaWVzLgogICAgICAgIERlc2NyaXB0aW9uOiBDb25jcmV0ZSBhcmNoaXRlY3R1cmUgb2YgdGhlIExpbnV4IGtlcm5lbCwKQEAgLTk1LDcgKzk1LDcgQEAKICAgICAgKiBUaXRsZTogIkxpbnV4IGFzIGEgQ2FzZSBTdHVkeTogSXRzIEV4dHJhY3RlZCBTb2Z0d2FyZQogICAgICAgIEFyY2hpdGVjdHVyZSIKICAgICAgICBBdXRob3I6IEl2YW4gVC4gQm93bWFuLCBSaWNoYXJkIEMuIEhvbHQgYW5kIE5laWwgVi4gQnJld3N0ZXIuCi0gICAgICAgVVJMOiBodHRwOi8vcGxnLnV3YXRlcmxvby5jYS9+aXRib3dtYW4vcGFwZXJzL2xpbnV4Y2FzZS5odG1sCisgICAgICAgVVJMOiBodHRwOi8vcGxnLnV3YXRlcmxvby5jYS8KICAgICAgICBLZXl3b3Jkczogc29mdHdhcmUgYXJjaGl0ZWN0dXJlLCBhcmNoaXRlY3R1cmUgcmVjb3ZlcnksCiAgICAgICAgcmVkb2N1bWVudGF0aW9uLgogICAgICAgIERlc2NyaXB0aW9uOiBQYXBlciBhcHBlYXJlZCBhdCBJQ1NFJzk5LCBMb3MgQW5nZWxlcywgTWF5IDE2LTIyLApAQCAtMTA0LDcgKzEwNCw3IEBACiAKICAgICAgKiBUaXRsZTogIk92ZXJ2aWV3IG9mIHRoZSBWaXJ0dWFsIEZpbGUgU3lzdGVtIgogICAgICAgIEF1dGhvcjogUmljaGFyZCBHb29jaC4KLSAgICAgICBVUkw6IGh0dHA6Ly93d3cuYXRuZi5jc2lyby5hdS9+cmdvb2NoL2xpbnV4L3Zmcy50eHQKKyAgICAgICBVUkw6IGh0dHA6Ly93d3cubWptd2lyZWQubmV0L2tlcm5lbC9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy50eHQKICAgICAgICBLZXl3b3JkczogVkZTLCBGaWxlIFN5c3RlbSwgbW91bnRpbmcgZmlsZXN5c3RlbXMsIG9wZW5pbmcgZmlsZXMsCiAgICAgICAgZGVudHJpZXMsIGRjYWNoZS4KICAgICAgICBEZXNjcmlwdGlvbjogQnJpZWYgaW50cm9kdWN0aW9uIHRvIHRoZSBMaW51eCBWaXJ0dWFsIEZpbGUgU3lzdGVtLgpAQCAtMjY3LDE1ICsyNjcsMTMgQEAKICAgICAgKiBUaXRsZTogIktlcm5lbCBBUEkgY2hhbmdlcyBmcm9tIDIuMCB0byAyLjIiCiAgICAgICAgQXV0aG9yOiBSaWNoYXJkIEdvb2NoLgogICAgICAgIFVSTDoKLSAgICAgICBodHRwOi8vd3d3LmF0bmYuY3Npcm8uYXUvfnJnb29jaC9saW51eC9kb2NzL3BvcnRpbmctdG8tMi4yLmh0bWwKKyAgICAgICBodHRwOi8vd3d3LmxpbnV4aHEuY29tL2d1aWRlcy9MS01QRy9ub2RlMjguaHRtbCAKICAgICAgICBLZXl3b3JkczogMi4yLCBjaGFuZ2VzLgogICAgICAgIERlc2NyaXB0aW9uOiBLZXJuZWwgZnVuY3Rpb25zL3N0cnVjdHVyZXMvdmFyaWFibGVzIHdoaWNoIGNoYW5nZWQKICAgICAgICBmcm9tIDIuMC54IHRvIDIuMi54LgogCiAgICAgICogVGl0bGU6ICJLZXJuZWwgQVBJIGNoYW5nZXMgZnJvbSAyLjIgdG8gMi40IgogICAgICAgIEF1dGhvcjogUmljaGFyZCBHb29jaC4KLSAgICAgICBVUkw6Ci0gICAgICAgaHR0cDovL3d3dy5hdG5mLmNzaXJvLmF1L35yZ29vY2gvbGludXgvZG9jcy9wb3J0aW5nLXRvLTIuNC5odG1sCiAgICAgICAgS2V5d29yZHM6IDIuNCwgY2hhbmdlcy4KICAgICAgICBEZXNjcmlwdGlvbjogS2VybmVsIGZ1bmN0aW9ucy9zdHJ1Y3R1cmVzL3ZhcmlhYmxlcyB3aGljaCBjaGFuZ2VkCiAgICAgICAgZnJvbSAyLjIueCB0byAyLjQueC4KQEAgLTI5MCw3ICsyODgsNiBAQAogICAgICAgIAogICAgICAqIFRpdGxlOiAiSS9PIEV2ZW50IEhhbmRsaW5nIFVuZGVyIExpbnV4IgogICAgICAgIEF1dGhvcjogUmljaGFyZCBHb29jaC4KLSAgICAgICBVUkw6IGh0dHA6Ly93d3cuYXRuZi5jc2lyby5hdS9+cmdvb2NoL2xpbnV4L2RvY3MvaW8tZXZlbnRzLmh0bWwKICAgICAgICBLZXl3b3JkczogSU8sIEkvTywgc2VsZWN0KDIpLCBwb2xsKDIpLCBGRHMsIGFpb19yZWFkKDIpLCByZWFkaW5lc3MKICAgICAgICBldmVudCBxdWV1ZXMuCiAgICAgICAgRGVzY3JpcHRpb246IEZyb20gdGhlIEludHJvZHVjdGlvbjogIkkvTyBFdmVudCBoYW5kbGluZyBpcyBhYm91dApAQCAtMzg2LDY0ICszODMsNjQgQEAKIAogICAgICAqIFRpdGxlOiAiUG9ydGluZyBEZXZpY2UgRHJpdmVycyBUbyBMaW51eCAyLjI6IHBhcnQgSUkiCiAgICAgICAgQXV0aG9yOiBBbGFuIENveC4KLSAgICAgICBVUkw6IGh0dHA6Ly93d3cubGludXgtbWFnLmNvbS8xOTk5LTA2L2dlYXJfMDEuaHRtbAorICAgICAgIFVSTDogaHR0cDovL3d3dy5saW51eC1tYWcuY29tL2lkLzIzOCAKICAgICAgICBLZXl3b3JkczogcG9ydHMsIHBvcnRpbmcuCiAgICAgICAgRGVzY3JpcHRpb246IFNlY29uZCBwYXJ0IG9uIHBvcnRpbmcgZnJvbSAyLjAgdG8gMi4yIGtlcm5lbHMuCiAKICAgICAgKiBUaXRsZTogIkhvdyBUbyBNYWtlIFN1cmUgWW91ciBEcml2ZXIgV2lsbCBXb3JrIE9uIFRoZSBQb3dlcgogICAgICAgIE1hY2ludG9zaCIKICAgICAgICBBdXRob3I6IFBhdWwgTWFja2VycmFzLgotICAgICAgIFVSTDogaHR0cDovL3d3dy5saW51eC1tYWcuY29tLzE5OTktMDcvZ2Vhcl8wMS5odG1sCisgICAgICAgVVJMOiBodHRwOi8vd3d3LmxpbnV4LW1hZy5jb20vaWQvMjYxCiAgICAgICAgS2V5d29yZHM6IE1hYywgUG93ZXIgTWFjaW50b3NoLCBwb3J0aW5nLCBkcml2ZXJzLCBjb21wYXRpYmlsaXR5LgogICAgICAgIERlc2NyaXB0aW9uOiBUaGUgdGl0bGUgc2F5cyBpdCBhbGwuCiAKICAgICAgKiBUaXRsZTogIkFuIEludHJvZHVjdGlvbiB0byBTQ1NJIERyaXZlcnMiCiAgICAgICAgQXV0aG9yOiBBbGFuIENveC4KLSAgICAgICBVUkw6IGh0dHA6Ly93d3cubGludXgtbWFnLmNvbS8xOTk5LTA4L2dlYXJfMDEuaHRtbAorICAgICAgIFVSTDogaHR0cDovL3d3dy5saW51eC1tYWcuY29tL2lkLzI4NAogICAgICAgIEtleXdvcmRzOiBTQ1NJLCBkZXZpY2UsIGRyaXZlci4KICAgICAgICBEZXNjcmlwdGlvbjogVGhlIHRpdGxlIHNheXMgaXQgYWxsLgogCiAgICAgICogVGl0bGU6ICJBZHZhbmNlZCBTQ1NJIERyaXZlcnMgQW5kIE90aGVyIFRhbGVzIgogICAgICAgIEF1dGhvcjogQWxhbiBDb3guCi0gICAgICAgVVJMOiBodHRwOi8vd3d3LmxpbnV4LW1hZy5jb20vMTk5OS0wOS9nZWFyXzAxLmh0bWwKKyAgICAgICBVUkw6IGh0dHA6Ly93d3cubGludXgtbWFnLmNvbS9pZC8zMDcKICAgICAgICBLZXl3b3JkczogU0NTSSwgZGV2aWNlLCBkcml2ZXIsIGFkdmFuY2VkLgogICAgICAgIERlc2NyaXB0aW9uOiBUaGUgdGl0bGUgc2F5cyBpdCBhbGwuCiAKICAgICAgKiBUaXRsZTogIldyaXRpbmcgTGludXggTW91c2UgRHJpdmVycyIKICAgICAgICBBdXRob3I6IEFsYW4gQ294LgotICAgICAgIFVSTDogaHR0cDovL3d3dy5saW51eC1tYWcuY29tLzE5OTktMTAvZ2Vhcl8wMS5odG1sCisgICAgICAgVVJMOiBodHRwOi8vd3d3LmxpbnV4LW1hZy5jb20vaWQvMzMwCiAgICAgICAgS2V5d29yZHM6IG1vdXNlLCBkcml2ZXIsIGdwbS4KICAgICAgICBEZXNjcmlwdGlvbjogVGhlIHRpdGxlIHNheXMgaXQgYWxsLgogCiAgICAgICogVGl0bGU6ICJNb3JlIG9uIE1vdXNlIERyaXZlcnMiCiAgICAgICAgQXV0aG9yOiBBbGFuIENveC4KLSAgICAgICBVUkw6IGh0dHA6Ly93d3cubGludXgtbWFnLmNvbS8xOTk5LTExL2dlYXJfMDEuaHRtbAorICAgICAgIFVSTDogaHR0cDovL3d3dy5saW51eC1tYWcuY29tL2lkLzM1NgogICAgICAgIEtleXdvcmRzOiBtb3VzZSwgZHJpdmVyLCBncG0sIHJhY2VzLCBhc3luY2hyb25vdXMgSS9PLgogICAgICAgIERlc2NyaXB0aW9uOiBUaGUgdGl0bGUgc3RpbGwgc2F5cyBpdCBhbGwuCiAKICAgICAgKiBUaXRsZTogIldyaXRpbmcgVmlkZW80bGludXggUmFkaW8gRHJpdmVyIgogICAgICAgIEF1dGhvcjogQWxhbiBDb3guCi0gICAgICAgVVJMOiBodHRwOi8vd3d3LmxpbnV4LW1hZy5jb20vMTk5OS0xMi9nZWFyXzAxLmh0bWwKKyAgICAgICBVUkw6IGh0dHA6Ly93d3cubGludXgtbWFnLmNvbS9pZC8zODEKICAgICAgICBLZXl3b3JkczogdmlkZW80bGludXgsIGRyaXZlciwgcmFkaW8sIHJhZGlvIGRldmljZXMuCiAgICAgICAgRGVzY3JpcHRpb246IFRoZSB0aXRsZSBzYXlzIGl0IGFsbC4KIAogICAgICAqIFRpdGxlOiAiVmlkZW80bGludXggRHJpdmVycywgUGFydCAxOiBWaWRlby1DYXB0dXJlIERldmljZSIKICAgICAgICBBdXRob3I6IEFsYW4gQ294LgotICAgICAgIFVSTDogaHR0cDovL3d3dy5saW51eC1tYWcuY29tLzIwMDAtMDEvZ2Vhcl8wMS5odG1sCisgICAgICAgVVJMOiBodHRwOi8vd3d3LmxpbnV4LW1hZy5jb20vaWQvNDA2CiAgICAgICAgS2V5d29yZHM6IHZpZGVvNGxpbnV4LCBkcml2ZXIsIHZpZGVvIGNhcHR1cmUsIGNhcHR1cmUgZGV2aWNlcywKICAgICAgICBjYW1lcmEgZHJpdmVyLgogICAgICAgIERlc2NyaXB0aW9uOiBUaGUgdGl0bGUgc2F5cyBpdCBhbGwuCiAKICAgICAgKiBUaXRsZTogIlZpZGVvNGxpbnV4IERyaXZlcnMsIFBhcnQgMjogVmlkZW8tY2FwdHVyZSBEZXZpY2VzIgogICAgICAgIEF1dGhvcjogQWxhbiBDb3guCi0gICAgICAgVVJMOiBodHRwOi8vd3d3LmxpbnV4LW1hZy5jb20vMjAwMC0wMi9nZWFyXzAxLmh0bWwKKyAgICAgICBVUkw6IGh0dHA6Ly93d3cubGludXgtbWFnLmNvbS9pZC80MjkKICAgICAgICBLZXl3b3JkczogdmlkZW80bGludXgsIGRyaXZlciwgdmlkZW8gY2FwdHVyZSwgY2FwdHVyZSBkZXZpY2VzLAogICAgICAgIGNhbWVyYSBkcml2ZXIsIGNvbnRyb2wsIHF1ZXJ5IGNhcGFiaWxpdGllcywgY2FwYWJpbGl0eSwgZmFjaWxpdHkuCiAgICAgICAgRGVzY3JpcHRpb246IFRoZSB0aXRsZSBzYXlzIGl0IGFsbC4KIAogICAgICAqIFRpdGxlOiAiUENJIE1hbmFnZW1lbnQgaW4gTGludXggMi4yIgogICAgICAgIEF1dGhvcjogQWxhbiBDb3guCi0gICAgICAgVVJMOiBodHRwOi8vd3d3LmxpbnV4LW1hZy5jb20vMjAwMC0wMy9nZWFyXzAxLmh0bWwKKyAgICAgICBVUkw6IGh0dHA6Ly93d3cubGludXgtbWFnLmNvbS9pZC80NTIKICAgICAgICBLZXl3b3JkczogUENJLCBidXMsIGJ1cy1tYXN0ZXJpbmcuCiAgICAgICAgRGVzY3JpcHRpb246IFRoZSB0aXRsZSBzYXlzIGl0IGFsbC4KIApAQCAtNTAyLDcgKzQ5OSw3IEBACiAgICAgICAgCiAgICAgICogVGl0bGU6ICJBIExpbnV4IHZtIFJFQURNRSIKICAgICAgICBBdXRob3I6IEthbm9qIFNhcmNhci4KLSAgICAgICBVUkw6IGh0dHA6Ly9yZWFsaXR5LnNnaS5jb20va2Fub2pfZW5nci92bTIyOS5odG1sCisgICAgICAgVVJMOiBodHRwOi8va29zLmVuaXgub3JnL3B1Yi9saW51eC12bW0uaHRtbAogICAgICAgIEtleXdvcmRzOiB2aXJ0dWFsIG1lbW9yeSwgbW0sIHBnZCwgdm1hLCBwYWdlLCBwYWdlIGZsYWdzLCBwYWdlCiAgICAgICAgY2FjaGUsIHN3YXAgY2FjaGUsIGtzd2FwZC4KICAgICAgICBEZXNjcmlwdGlvbjogVGVsZWdyYXBoaWMsIHNob3J0IGRlc2NyaXB0aW9ucyBhbmQgZGVmaW5pdGlvbnMKQEAgLTY1OSw3ICs2NTYsNyBAQAogCiAgICAgICogTmFtZTogIkxpbnV4IEtlcm5lbCBTb3VyY2UgUmVmZXJlbmNlIgogICAgICAgIEF1dGhvcjogVGhvbWFzIEdyYWljaGVuLgotICAgICAgIFVSTDogaHR0cDovL2lubm9taW5hdGUub3JnL35ncmFpY2hlbi9wcm9qZWN0cy9sa3NyLworICAgICAgIFVSTDogaHR0cDovL21hcmMuaW5mby8/bD1saW51eC1rZXJuZWwmbT05NjQ0NjY0MDEwMjIwNSZ3PTQKICAgICAgICBLZXl3b3JkczogQ1ZTLCB3ZWIsIGN2c3dlYiwgYnJvd3Npbmcgc291cmNlIGNvZGUuCiAgICAgICAgRGVzY3JpcHRpb246IFdlYiBpbnRlcmZhY2UgdG8gYSBDVlMgc2VydmVyIHdpdGggdGhlIGtlcm5lbAogICAgICAgIHNvdXJjZXMuICJIZXJlIHlvdSBjYW4gaGF2ZSBhIGxvb2sgYXQgYW55IGZpbGUgb2YgdGhlIExpbnV4IGtlcm5lbApAQCAtNjgyLDcgKzY3OSw3IEBACiAgICAgICAgcHJvZHVjZWQgZHVyaW5nIHRoZSB3ZWVrLiBQdWJsaXNoZWQgZXZlcnkgVGh1cnNkYXkuCiAKICAgICAgKiBOYW1lOiAiS2VybmVsIFRyYWZmaWMiCi0gICAgICAgVVJMOiBodHRwOi8va3Quem9yay5uZXQva2VybmVsLXRyYWZmaWMvCisgICAgICAgVVJMOiBodHRwOi8va3QuZWFydGgubGkva2VybmVsLXRyYWZmaWMvaW5kZXguaHRtbAogICAgICAgIEtleXdvcmRzOiBsaW51eC1rZXJuZWwgbWFpbGluZyBsaXN0LCB3ZWVrbHkga2VybmVsIG5ld3MuCiAgICAgICAgRGVzY3JpcHRpb246IFdlZWtseSBuZXdzbGV0dGVyIGNvdmVyaW5nIHRoZSBtb3N0IHJlbGV2YW50CiAgICAgICAgZGlzY3Vzc2lvbnMgb2YgdGhlIGxpbnV4LWtlcm5lbCBtYWlsaW5nIGxpc3QuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IDgyZDZhZWIuLjcxZDI4NjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC03Myw3ICs3Myw2IEBACiAJTVRECU1URCAoTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlKSBzdXBwb3J0IGlzIGVuYWJsZWQuCiAJTkVUCUFwcHJvcHJpYXRlIG5ldHdvcmsgc3VwcG9ydCBpcyBlbmFibGVkLgogCU5VTUEJTlVNQSBzdXBwb3J0IGlzIGVuYWJsZWQuCi0JR0VORVJJQ19USU1FIFRoZSBnZW5lcmljIHRpbWVvZmRheSBjb2RlIGlzIGVuYWJsZWQuCiAJTkZTCUFwcHJvcHJpYXRlIE5GUyBzdXBwb3J0IGlzIGVuYWJsZWQuCiAJT1NTCU9TUyBzb3VuZCBzdXBwb3J0IGlzIGVuYWJsZWQuCiAJUFZfT1BTCUEgcGFyYXZpcnR1YWxpemVkIGtlcm5lbCBpcyBlbmFibGVkLgpAQCAtOTMsNiArOTIsNyBAQAogCQkJRG9jdW1lbnRhdGlvbi9zY3NpLy4KIAlTRUNVUklUWSBEaWZmZXJlbnQgc2VjdXJpdHkgbW9kZWxzIGFyZSBlbmFibGVkLgogCVNFTElOVVggU0VMaW51eCBzdXBwb3J0IGlzIGVuYWJsZWQuCisJQVBQQVJNT1IgQXBwQXJtb3Igc3VwcG9ydCBpcyBlbmFibGVkLgogCVNFUklBTAlTZXJpYWwgc3VwcG9ydCBpcyBlbmFibGVkLgogCVNICVN1cGVySCBhcmNoaXRlY3R1cmUgaXMgZW5hYmxlZC4KIAlTTVAJVGhlIGtlcm5lbCBpcyBhbiBTTVAga2VybmVsLgpAQCAtMTE1LDYgKzExNSw3IEBACiAJCQlNb3JlIFg4Ni02NCBib290IG9wdGlvbnMgY2FuIGJlIGZvdW5kIGluCiAJCQlEb2N1bWVudGF0aW9uL3g4Ni94ODZfNjQvYm9vdC1vcHRpb25zLnR4dCAuCiAJWDg2CUVpdGhlciAzMmJpdCBvciA2NGJpdCB4ODYgKHNhbWUgYXMgWDg2LTMyK1g4Ni02NCkKKwlYRU4JWGVuIHN1cHBvcnQgaXMgZW5hYmxlZAogCiBJbiBhZGRpdGlvbiwgdGhlIGZvbGxvd2luZyB0ZXh0IGluZGljYXRlcyB0aGF0IHRoZSBvcHRpb246CiAKQEAgLTI1NCw4ICsyNTUsOCBAQAogCQkJY29udHJvbCBtZXRob2QsIHdpdGggcmVzcGVjdCB0byBwdXR0aW5nIGRldmljZXMgaW50bwogCQkJbG93IHBvd2VyIHN0YXRlcywgdG8gYmUgZW5mb3JjZWQgKHRoZSBBQ1BJIDIuMCBvcmRlcmluZwogCQkJb2YgX1BUUyBpcyB1c2VkIGJ5IGRlZmF1bHQpLgotCQkJczRfbm9udnMgcHJldmVudHMgdGhlIGtlcm5lbCBmcm9tIHNhdmluZy9yZXN0b3JpbmcgdGhlCi0JCQlBQ1BJIE5WUyBtZW1vcnkgZHVyaW5nIGhpYmVybmF0aW9uLgorCQkJbm9udnMgcHJldmVudHMgdGhlIGtlcm5lbCBmcm9tIHNhdmluZy9yZXN0b3JpbmcgdGhlCisJCQlBQ1BJIE5WUyBtZW1vcnkgZHVyaW5nIHN1c3BlbmQvaGliZXJuYXRpb24gYW5kIHJlc3VtZS4KIAkJCXNjaV9mb3JjZV9lbmFibGUgY2F1c2VzIHRoZSBrZXJuZWwgdG8gc2V0IFNDSV9FTiBkaXJlY3RseQogCQkJb24gcmVzdW1lIGZyb20gUzEvUzMgKHdoaWNoIGlzIGFnYWluc3QgdGhlIEFDUEkgc3BlYywKIAkJCWJ1dCBzb21lIGJyb2tlbiBzeXN0ZW1zIGRvbid0IHdvcmsgd2l0aG91dCBpdCkuCkBAIC00NjgsNyArNDY5LDcgQEAKIAkJCWNsb2Nrc291cmNlIGlzIG5vdCBhdmFpbGFibGUsIGl0IGRlZmF1bHRzIHRvIFBJVC4KIAkJCUZvcm1hdDogeyBwaXQgfCB0c2MgfCBjeWNsb25lIHwgcG10bXIgfQogCi0JY2xvY2tzb3VyY2U9CVtHRU5FUklDX1RJTUVdIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGNsb2Nrc291cmNlCisJY2xvY2tzb3VyY2U9CU92ZXJyaWRlIHRoZSBkZWZhdWx0IGNsb2Nrc291cmNlCiAJCQlGb3JtYXQ6IDxzdHJpbmc+CiAJCQlPdmVycmlkZSB0aGUgZGVmYXVsdCBjbG9ja3NvdXJjZSBhbmQgdXNlIHRoZSBjbG9ja3NvdXJjZQogCQkJd2l0aCB0aGUgbmFtZSBzcGVjaWZpZWQuCkBAIC0xMTQzLDkgKzExNDQsMTIgQEAKIAlrZ2Rib2M9CQlbS0dEQixIV10ga2dkYiBvdmVyIGNvbnNvbGVzLgogCQkJUmVxdWlyZXMgYSB0dHkgZHJpdmVyIHRoYXQgc3VwcG9ydHMgY29uc29sZSBwb2xsaW5nLAogCQkJb3IgYSBzdXBwb3J0ZWQgcG9sbGluZyBrZXlib2FyZCBkcml2ZXIgKG5vbi11c2IpLgotCQkJU2VyaWFsIG9ubHkgZm9ybWF0OiA8c2VyaWFsX2RldmljZT5bLGJhdWRdCi0JCQlrZXlib2FyZCBvbmx5IGZvcm1hdDoga2JkCi0JCQlrZXlib2FyZCBhbmQgc2VyaWFsIGZvcm1hdDoga2JkLDxzZXJpYWxfZGV2aWNlPlssYmF1ZF0KKwkJCSBTZXJpYWwgb25seSBmb3JtYXQ6IDxzZXJpYWxfZGV2aWNlPlssYmF1ZF0KKwkJCSBrZXlib2FyZCBvbmx5IGZvcm1hdDoga2JkCisJCQkga2V5Ym9hcmQgYW5kIHNlcmlhbCBmb3JtYXQ6IGtiZCw8c2VyaWFsX2RldmljZT5bLGJhdWRdCisJCQlPcHRpb25hbCBLZXJuZWwgbW9kZSBzZXR0aW5nOgorCQkJIGttcywga2JkIGZvcm1hdDoga21zLGtiZAorCQkJIGttcywga2JkIGFuZCBzZXJpYWwgZm9ybWF0OiBrbXMsa2JkLDxzZXJfZGV2PlssYmF1ZF0KIAogCWtnZGJ3YWl0CVtLR0RCXSBTdG9wIGtlcm5lbCBleGVjdXRpb24gYW5kIGVudGVyIHRoZQogCQkJa2VybmVsIGRlYnVnZ2VyIGF0IHRoZSBlYXJsaWVzdCBvcHBvcnR1bml0eS4KQEAgLTEyNjUsNyArMTI2OSw3IEBACiAJCQlJZiB0aGVyZSBhcmUgbXVsdGlwbGUgbWF0Y2hpbmcgY29uZmlndXJhdGlvbnMgY2hhbmdpbmcKIAkJCXRoZSBzYW1lIGF0dHJpYnV0ZSwgdGhlIGxhc3Qgb25lIGlzIHVzZWQuCiAKLQlsbWI9ZGVidWcJW0tOTF0gRW5hYmxlIGxtYiBkZWJ1ZyBtZXNzYWdlcy4KKwltZW1ibG9jaz1kZWJ1ZwlbS05MXSBFbmFibGUgbWVtYmxvY2sgZGVidWcgbWVzc2FnZXMuCiAKIAlsb2FkX3JhbWRpc2s9CVtSQU1dIExpc3Qgb2YgcmFtZGlza3MgdG8gbG9hZCBmcm9tIGZsb3BweQogCQkJU2VlIERvY3VtZW50YXRpb24vYmxvY2tkZXYvcmFtZGlzay50eHQuCkBAIC0xNTk3LDggKzE2MDEsNyBAQAogCQkJW05FVEZJTFRFUl0gRW5hYmxlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZmxvdyBhY2NvdW50aW5nCiAJCQkwIHRvIGRpc2FibGUgYWNjb3VudGluZwogCQkJMSB0byBlbmFibGUgYWNjb3VudGluZwotCQkJRGVmYXVsdCB2YWx1ZSBkZXBlbmRzIG9uIENPTkZJR19ORl9DVF9BQ0NUIHRoYXQgaXMKLQkJCWdvaW5nIHRvIGJlIHJlbW92ZWQgaW4gMi42LjI5LgorCQkJRGVmYXVsdCB2YWx1ZSBpcyAwLgogCiAJbmZzYWRkcnM9CVtORlNdCiAJCQlTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzcm9vdC50eHQuCkBAIC0xODEyLDYgKzE4MTUsOCBAQAogCiAJbm91c2IJCVtVU0JdIERpc2FibGUgdGhlIFVTQiBzdWJzeXN0ZW0KIAorCW5vd2F0Y2hkb2cJW0tOTF0gRGlzYWJsZSB0aGUgbG9ja3VwIGRldGVjdG9yLgorCiAJbm93YgkJW0FSTV0KIAogCW5veDJhcGljCVtYODYtNjQsQVBJQ10gRG8gbm90IGVuYWJsZSB4MkFQSUMgbW9kZS4KQEAgLTE5NzAsNiArMTk3NSw4IEBACiAJCW5vcm9tCQlbWDg2XSBEbyBub3QgYXNzaWduIGFkZHJlc3Mgc3BhY2UgdG8KIAkJCQlleHBhbnNpb24gUk9NcyB0aGF0IGRvIG5vdCBhbHJlYWR5IGhhdmUKIAkJCQlCSU9TIGFzc2lnbmVkIGFkZHJlc3MgcmFuZ2VzLgorCQlub2JhcgkJW1g4Nl0gRG8gbm90IGFzc2lnbiBhZGRyZXNzIHNwYWNlIHRvIHRoZQorCQkJCUJBUnMgdGhhdCB3ZXJlbid0IGFzc2lnbmVkIGJ5IHRoZSBCSU9TLgogCQlpcnFtYXNrPTB4TU1NTQlbWDg2XSBTZXQgYSBiaXQgbWFzayBvZiBJUlFzIGFsbG93ZWQgdG8gYmUKIAkJCQlhc3NpZ25lZCBhdXRvbWF0aWNhbGx5IHRvIFBDSSBkZXZpY2VzLiBZb3UgY2FuCiAJCQkJbWFrZSB0aGUga2VybmVsIGV4Y2x1ZGUgSVJRcyBvZiB5b3VyIElTQSBjYXJkcwpAQCAtMjMxMiw2ICsyMzE5LDEzIEBACiAJCQlJZiBlbmFibGVkIGF0IGJvb3QgdGltZSwgL3NlbGludXgvZGlzYWJsZSBjYW4gYmUgdXNlZAogCQkJbGF0ZXIgdG8gZGlzYWJsZSBwcmlvciB0byBpbml0aWFsIHBvbGljeSBsb2FkLgogCisJYXBwYXJtb3I9CVtBUFBBUk1PUl0gRGlzYWJsZSBvciBlbmFibGUgQXBwQXJtb3IgYXQgYm9vdCB0aW1lCisJCQlGb3JtYXQ6IHsgIjAiIHwgIjEiIH0KKwkJCVNlZSBzZWN1cml0eS9hcHBhcm1vci9LY29uZmlnIGhlbHAgdGV4dAorCQkJMCAtLSBkaXNhYmxlLgorCQkJMSAtLSBlbmFibGUuCisJCQlEZWZhdWx0IHZhbHVlIGlzIHNldCB2aWEga2VybmVsIGNvbmZpZyBvcHRpb24uCisKIAlzZXJpYWxudW1iZXIJW0JVR1M9WDg2LTMyXQogCiAJc2hhcGVycz0JW05FVF0KQEAgLTI4NzksNiArMjg5MywxNiBAQAogCXhkPQkJW0hXLFhUXSBPcmlnaW5hbCBYVCBwcmUtSURFIChSTEwgZW5jb2RlZCkgZGlza3MuCiAJeGRfZ2VvPQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL2Jsb2NrL3hkLmMuCiAKKwl4ZW5fZW11bF91bnBsdWc9CQlbSFcsWDg2LFhFTl0KKwkJCVVucGx1ZyBYZW4gZW11bGF0ZWQgZGV2aWNlcworCQkJRm9ybWF0OiBbdW5wbHVnMCxdW3VucGx1ZzFdCisJCQlpZGUtZGlza3MgLS0gdW5wbHVnIHByaW1hcnkgbWFzdGVyIElERSBkZXZpY2VzCisJCQlhdXgtaWRlLWRpc2tzIC0tIHVucGx1ZyBub24tcHJpbWFyeS1tYXN0ZXIgSURFIGRldmljZXMKKwkJCW5pY3MgLS0gdW5wbHVnIG5ldHdvcmsgZGV2aWNlcworCQkJYWxsIC0tIHVucGx1ZyBhbGwgZW11bGF0ZWQgZGV2aWNlcyAoTklDcyBhbmQgSURFIGRpc2tzKQorCQkJaWdub3JlIC0tIGNvbnRpbnVlIGxvYWRpbmcgdGhlIFhlbiBwbGF0Zm9ybSBQQ0kgZHJpdmVyIGV2ZW4KKwkJCQlpZiB0aGUgdmVyc2lvbiBjaGVjayBmYWlsZWQKKwogCXhpcmMycHNfY3M9CVtORVQsUENNQ0lBXQogCQkJRm9ybWF0OgogCQkJPGlycT4sPGlycV9tYXNrPiw8aW8+LDxmdWxsX2R1cGxleD4sPGRvX3NvdW5kPiw8bG9ja3VwX2hhY2s+Wyw8aXJxMj5bLDxpcnEzPlssPGlycTQ+XV1dCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tvX0tSL0hPV1RPIGIvRG9jdW1lbnRhdGlvbi9rb19LUi9IT1dUTwppbmRleCAwMjlmY2E5Li5lM2E1NWI2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tvX0tSL0hPV1RPCisrKyBiL0RvY3VtZW50YXRpb24va29fS1IvSE9XVE8KQEAgLTEyMiw3ICsxMjIsNyBAQAogCiAgICAg7Jis67CU66W4IO2MqOy5mOuTpOydhCDrp4zrk5zripQg67KV7JeQIOq0gO2VnCDtm4zrpa3tlZwg64uk66W4IOusuOyEnOuTpOydtCDsnojri6QuCiAgICAgIlRoZSBQZXJmZWN0IFBhdGNoIgotICAgICAgICBodHRwOi8vd3d3LnppcC5jb20uYXUvfmFrcG0vbGludXgvcGF0Y2hlcy9zdHVmZi90cHAudHh0CisgICAgICAgIGh0dHA6Ly91c2Vyd2ViLmtlcm5lbC5vcmcvfmFrcG0vc3R1ZmYvdHBwLnR4dAogICAgICJMaW51eCBrZXJuZWwgcGF0Y2ggc3VibWlzc2lvbiBmb3JtYXQiCiAgICAgICAgIGh0dHA6Ly9saW51eC55eXoudXMvcGF0Y2gtZm9ybWF0Lmh0bWwKIApAQCAtMTkyLDcgKzE5Miw3IEBACiAKIOyXrOufrOu2hOydtCDslrTrlJTshJwg7Iuc7J6R7ZW07JW8IO2VoOynhCDrqqjrpbTsp4Drp4wg7Luk64SQIOqwnOuwnCDsu6TrrqTri4jti7Dsl5Ag7LC47Jes7ZWgIOyImAog7J6I64qUIOydvOuTpOydhCDssL7quLgg7JuQ7ZWc64uk66m0IOumrOuIheyKpCDsu6TrhJAgSmFuaXRvciDtlITroZzsoJ3tirjrpbwg7IK07Y6067SQ6528LgotICAgICAgICAgaHR0cDovL2phbml0b3Iua2VybmVsbmV3Ymllcy5vcmcvCisJaHR0cDovL2tlcm5lbG5ld2JpZXMub3JnL0tlcm5lbEphbml0b3JzCiDqt7jqs7PsnYAg7Iuc7J6R7ZWY6riw7JeQIO2bjOulre2VnCDsnqXshozsnbTri6QuIOq3uOqzs+ydgCDrpqzriIXsiqQg7Luk64SQIOyGjOyKpCDtirjrpqzrgrTsl5AKIOqwhOuLqO2eiCDsoJXrpqzrkJjqs6Ag7IiY7KCV65CgIOyImCDsnojripQg66y47KCc65Ok7JeQIOq0gO2VmOyXrCDshKTrqoXtlZzri6QuIOyXrOufrOu2hOydgCDsnbQKIO2UhOuhnOygne2KuOulvCDrjIDtkZztlZjripQg6rCc67Cc7J6Q65Ok6rO8IOydvO2VmOuptOyEnCDsnpDsi6DsnZgg7Yyo7LmY66W8IOumrOuIheyKpCDsu6TrhJAg7Yq466as7JeQCkBAIC01OTYsNyArNTk2LDcgQEAKIAog7J206rKD7J20IOustOyXh+yduOyngCDrjZQg7J6Q7IS47ZWcIOqyg+ydhCDslYzqs6Ag7Iu264uk66m0IOuLpOydjCDrrLjshJzsnZggQ2hhZ2VMb2cg7ZWt7J2EIOu0kOudvC4KICAgICJUaGUgUGVyZmVjdCBQYXRjaCIKLSAgICBodHRwOi8vd3d3LnppcC5jb20uYXUvfmFrcG0vbGludXgvcGF0Y2hlcy9zdHVmZi90cHAudHh0CisgICAgaHR0cDovL3VzZXJ3ZWIua2VybmVsLm9yZy9+YWtwbS9zdHVmZi90cHAudHh0CiAKIAogCkBAIC02MTAsNyArNjEwLDcgQEAKIAogCiAtLS0tLS0tLS0tCi0i6rCc67CcIO2UhOuhnOyEuOyKpCIoaHR0cDovL2xpbnV4LnRhci5nei9hcnRpY2xlcy8yLjYtZGV2ZWxvcG1lbnRfcHJvY2Vzcykg7IS57IWY7J2ECisi6rCc67CcIO2UhOuhnOyEuOyKpCIoaHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvOTQzODYvKSDshLnshZjsnYQKIOyekeyEse2VmOuKlOuNsCDsnojslrQg7LC46rOg7ZWgIOusuOyEnOulvCDsgqzsmqntlZjrj4TroZ0g7ZeI65297ZW07KSAIFBhb2xvIENpYXJyb2NjaGnsl5DqsowKIOqwkOyCrO2VnOuLpC4g7Jes65+s67aE65Ok7J20IOunkO2VtOyVvCDtlaAg6rKD6rO8IOunkO2VtOyEnOuKlCDslYjrkJjripQg6rKD7J2YIOuqqeuhnSDspJEg7J2867aA66W8IOygnOqzte2VtOykgAogUmFuZHkgRHVubGFw6rO8IEdlcnJpdCBIdWl6ZW5nYeyXkOqyjCDqsJDsgqztlZzri6QuIOuYkO2VnCDqsoDthqDsmYAg7J2Y6rKsIOq3uOumrOqzoApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rcHJvYmVzLnR4dCBiL0RvY3VtZW50YXRpb24va3Byb2Jlcy50eHQKaW5kZXggNjY1MzAxNy4uMTc2MmI4MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rcHJvYmVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2twcm9iZXMudHh0CkBAIC0yODUsNiArMjg1LDcgQEAKIC0gc3BhcmM2NCAoUmV0dXJuIHByb2JlcyBub3QgeWV0IGltcGxlbWVudGVkLikKIC0gYXJtCiAtIHBwYworLSBtaXBzCiAKIDMuIENvbmZpZ3VyaW5nIEtwcm9iZXMKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rdm0vYXBpLnR4dCBiL0RvY3VtZW50YXRpb24va3ZtL2FwaS50eHQKaW5kZXggYTIzNzUxOC4uNWY1YjY0OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rdm0vYXBpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2t2bS9hcGkudHh0CkBAIC0xMjYsNiArMTI2LDEwIEBACiBrdm0gYWRqdXN0cyBubXNycyB0byByZWZsZWN0IHRoZSBhY3R1YWwgbnVtYmVyIG9mIG1zcnMgYW5kIGZpbGxzIGluCiB0aGUgaW5kaWNlcyBhcnJheSB3aXRoIHRoZWlyIG51bWJlcnMuCiAKK05vdGU6IGlmIGt2bSBpbmRpY2F0ZXMgc3VwcG9ydHMgTUNFIChLVk1fQ0FQX01DRSksIHRoZW4gdGhlIE1DRSBiYW5rIE1TUnMgYXJlCitub3QgcmV0dXJuZWQgaW4gdGhlIE1TUiBsaXN0LCBhcyBkaWZmZXJlbnQgdmNwdXMgY2FuIGhhdmUgYSBkaWZmZXJlbnQgbnVtYmVyCitvZiBiYW5rcywgYXMgc2V0IHZpYSB0aGUgS1ZNX1g4Nl9TRVRVUF9NQ0UgaW9jdGwuCisKIDQuNCBLVk1fQ0hFQ0tfRVhURU5TSU9OCiAKIENhcGFiaWxpdHk6IGJhc2ljCkBAIC0xNjAsMjkgKzE2NCw3IEBACiBQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX21lbW9yeV9yZWdpb24gKGluKQogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvcgogCi1zdHJ1Y3Qga3ZtX21lbW9yeV9yZWdpb24gewotCV9fdTMyIHNsb3Q7Ci0JX191MzIgZmxhZ3M7Ci0JX191NjQgZ3Vlc3RfcGh5c19hZGRyOwotCV9fdTY0IG1lbW9yeV9zaXplOyAvKiBieXRlcyAqLwotfTsKLQotLyogZm9yIGt2bV9tZW1vcnlfcmVnaW9uOjpmbGFncyAqLwotI2RlZmluZSBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUyAgMVVMCi0KLVRoaXMgaW9jdGwgYWxsb3dzIHRoZSB1c2VyIHRvIGNyZWF0ZSBvciBtb2RpZnkgYSBndWVzdCBwaHlzaWNhbCBtZW1vcnkKLXNsb3QuICBXaGVuIGNoYW5naW5nIGFuIGV4aXN0aW5nIHNsb3QsIGl0IG1heSBiZSBtb3ZlZCBpbiB0aGUgZ3Vlc3QKLXBoeXNpY2FsIG1lbW9yeSBzcGFjZSwgb3IgaXRzIGZsYWdzIG1heSBiZSBtb2RpZmllZC4gIEl0IG1heSBub3QgYmUKLXJlc2l6ZWQuICBTbG90cyBtYXkgbm90IG92ZXJsYXAuCi0KLVRoZSBmbGFncyBmaWVsZCBzdXBwb3J0cyBqdXN0IG9uZSBmbGFnLCBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUywgd2hpY2gKLWluc3RydWN0cyBrdm0gdG8ga2VlcCB0cmFjayBvZiB3cml0ZXMgdG8gbWVtb3J5IHdpdGhpbiB0aGUgc2xvdC4gIFNlZQotdGhlIEtWTV9HRVRfRElSVFlfTE9HIGlvY3RsLgotCi1JdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OIGlvY3RsIGluc3RlYWQKLW9mIHRoaXMgQVBJLCBpZiBhdmFpbGFibGUuICBUaGlzIG5ld2VyIEFQSSBhbGxvd3MgcGxhY2luZyBndWVzdCBtZW1vcnkKLWF0IHNwZWNpZmllZCBsb2NhdGlvbnMgaW4gdGhlIGhvc3QgYWRkcmVzcyBzcGFjZSwgeWllbGRpbmcgYmV0dGVyCi1jb250cm9sIGFuZCBlYXN5IGFjY2Vzcy4KK1RoaXMgaW9jdGwgaXMgb2Jzb2xldGUgYW5kIGhhcyBiZWVuIHJlbW92ZWQuCiAKIDQuNiBLVk1fQ1JFQVRFX1ZDUFUKIApAQCAtMjI2LDE3ICsyMDgsNyBAQAogUGFyYW1ldGVyczogc3RydWN0IGt2bV9tZW1vcnlfYWxpYXMgKGluKQogUmV0dXJuczogMCAoc3VjY2VzcyksIC0xIChlcnJvcikKIAotc3RydWN0IGt2bV9tZW1vcnlfYWxpYXMgewotCV9fdTMyIHNsb3Q7ICAvKiB0aGlzIGhhcyBhIGRpZmZlcmVudCBuYW1lc3BhY2UgdGhhbiBtZW1vcnkgc2xvdHMgKi8KLQlfX3UzMiBmbGFnczsKLQlfX3U2NCBndWVzdF9waHlzX2FkZHI7Ci0JX191NjQgbWVtb3J5X3NpemU7Ci0JX191NjQgdGFyZ2V0X3BoeXNfYWRkcjsKLX07Ci0KLURlZmluZXMgYSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIHJlZ2lvbiBhcyBhbiBhbGlhcyB0byBhbm90aGVyCi1yZWdpb24uICBVc2VmdWwgZm9yIGFsaWFzZWQgYWRkcmVzcywgZm9yIGV4YW1wbGUgdGhlIFZHQSBsb3cgbWVtb3J5Ci13aW5kb3cuIFNob3VsZCBub3QgYmUgdXNlZCB3aXRoIHVzZXJzcGFjZSBtZW1vcnkuCitUaGlzIGlvY3RsIGlzIG9ic29sZXRlIGFuZCBoYXMgYmVlbiByZW1vdmVkLgogCiA0LjkgS1ZNX1JVTgogCkBAIC04OTIsNiArODY0LDE3NCBAQAogVGhpcyBpb2N0bCBpcyBvbmx5IHVzZWZ1bCBhZnRlciBLVk1fQ1JFQVRFX0lSUUNISVAuICBXaXRob3V0IGFuIGluLWtlcm5lbAogaXJxY2hpcCwgdGhlIG11bHRpcHJvY2Vzc2luZyBzdGF0ZSBtdXN0IGJlIG1haW50YWluZWQgYnkgdXNlcnNwYWNlLgogCis0LjM5IEtWTV9TRVRfSURFTlRJVFlfTUFQX0FERFIKKworQ2FwYWJpbGl0eTogS1ZNX0NBUF9TRVRfSURFTlRJVFlfTUFQX0FERFIKK0FyY2hpdGVjdHVyZXM6IHg4NgorVHlwZTogdm0gaW9jdGwKK1BhcmFtZXRlcnM6IHVuc2lnbmVkIGxvbmcgaWRlbnRpdHkgKGluKQorUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvcgorCitUaGlzIGlvY3RsIGRlZmluZXMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgYSBvbmUtcGFnZSByZWdpb24gaW4gdGhlIGd1ZXN0CitwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLiAgVGhlIHJlZ2lvbiBtdXN0IGJlIHdpdGhpbiB0aGUgZmlyc3QgNEdCIG9mIHRoZQorZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBhbmQgbXVzdCBub3QgY29uZmxpY3Qgd2l0aCBhbnkgbWVtb3J5IHNsb3QKK29yIGFueSBtbWlvIGFkZHJlc3MuICBUaGUgZ3Vlc3QgbWF5IG1hbGZ1bmN0aW9uIGlmIGl0IGFjY2Vzc2VzIHRoaXMgbWVtb3J5CityZWdpb24uCisKK1RoaXMgaW9jdGwgaXMgcmVxdWlyZWQgb24gSW50ZWwtYmFzZWQgaG9zdHMuICBUaGlzIGlzIG5lZWRlZCBvbiBJbnRlbCBoYXJkd2FyZQorYmVjYXVzZSBvZiBhIHF1aXJrIGluIHRoZSB2aXJ0dWFsaXphdGlvbiBpbXBsZW1lbnRhdGlvbiAoc2VlIHRoZSBpbnRlcm5hbHMKK2RvY3VtZW50YXRpb24gd2hlbiBpdCBwb3BzIGludG8gZXhpc3RlbmNlKS4KKworNC40MCBLVk1fU0VUX0JPT1RfQ1BVX0lECisKK0NhcGFiaWxpdHk6IEtWTV9DQVBfU0VUX0JPT1RfQ1BVX0lECitBcmNoaXRlY3R1cmVzOiB4ODYsIGlhNjQKK1R5cGU6IHZtIGlvY3RsCitQYXJhbWV0ZXJzOiB1bnNpZ25lZCBsb25nIHZjcHVfaWQKK1JldHVybnM6IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKworRGVmaW5lIHdoaWNoIHZjcHUgaXMgdGhlIEJvb3RzdHJhcCBQcm9jZXNzb3IgKEJTUCkuICBWYWx1ZXMgYXJlIHRoZSBzYW1lCithcyB0aGUgdmNwdSBpZCBpbiBLVk1fQ1JFQVRFX1ZDUFUuICBJZiB0aGlzIGlvY3RsIGlzIG5vdCBjYWxsZWQsIHRoZSBkZWZhdWx0CitpcyB2Y3B1IDAuCisKKzQuNDEgS1ZNX0dFVF9YU0FWRQorCitDYXBhYmlsaXR5OiBLVk1fQ0FQX1hTQVZFCitBcmNoaXRlY3R1cmVzOiB4ODYKK1R5cGU6IHZjcHUgaW9jdGwKK1BhcmFtZXRlcnM6IHN0cnVjdCBrdm1feHNhdmUgKG91dCkKK1JldHVybnM6IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKworc3RydWN0IGt2bV94c2F2ZSB7CisJX191MzIgcmVnaW9uWzEwMjRdOworfTsKKworVGhpcyBpb2N0bCB3b3VsZCBjb3B5IGN1cnJlbnQgdmNwdSdzIHhzYXZlIHN0cnVjdCB0byB0aGUgdXNlcnNwYWNlLgorCis0LjQyIEtWTV9TRVRfWFNBVkUKKworQ2FwYWJpbGl0eTogS1ZNX0NBUF9YU0FWRQorQXJjaGl0ZWN0dXJlczogeDg2CitUeXBlOiB2Y3B1IGlvY3RsCitQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3hzYXZlIChpbikKK1JldHVybnM6IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKworc3RydWN0IGt2bV94c2F2ZSB7CisJX191MzIgcmVnaW9uWzEwMjRdOworfTsKKworVGhpcyBpb2N0bCB3b3VsZCBjb3B5IHVzZXJzcGFjZSdzIHhzYXZlIHN0cnVjdCB0byB0aGUga2VybmVsLgorCis0LjQzIEtWTV9HRVRfWENSUworCitDYXBhYmlsaXR5OiBLVk1fQ0FQX1hDUlMKK0FyY2hpdGVjdHVyZXM6IHg4NgorVHlwZTogdmNwdSBpb2N0bAorUGFyYW1ldGVyczogc3RydWN0IGt2bV94Y3JzIChvdXQpCitSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCisKK3N0cnVjdCBrdm1feGNyIHsKKwlfX3UzMiB4Y3I7CisJX191MzIgcmVzZXJ2ZWQ7CisJX191NjQgdmFsdWU7Cit9OworCitzdHJ1Y3Qga3ZtX3hjcnMgeworCV9fdTMyIG5yX3hjcnM7CisJX191MzIgZmxhZ3M7CisJc3RydWN0IGt2bV94Y3IgeGNyc1tLVk1fTUFYX1hDUlNdOworCV9fdTY0IHBhZGRpbmdbMTZdOworfTsKKworVGhpcyBpb2N0bCB3b3VsZCBjb3B5IGN1cnJlbnQgdmNwdSdzIHhjcnMgdG8gdGhlIHVzZXJzcGFjZS4KKworNC40NCBLVk1fU0VUX1hDUlMKKworQ2FwYWJpbGl0eTogS1ZNX0NBUF9YQ1JTCitBcmNoaXRlY3R1cmVzOiB4ODYKK1R5cGU6IHZjcHUgaW9jdGwKK1BhcmFtZXRlcnM6IHN0cnVjdCBrdm1feGNycyAoaW4pCitSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCisKK3N0cnVjdCBrdm1feGNyIHsKKwlfX3UzMiB4Y3I7CisJX191MzIgcmVzZXJ2ZWQ7CisJX191NjQgdmFsdWU7Cit9OworCitzdHJ1Y3Qga3ZtX3hjcnMgeworCV9fdTMyIG5yX3hjcnM7CisJX191MzIgZmxhZ3M7CisJc3RydWN0IGt2bV94Y3IgeGNyc1tLVk1fTUFYX1hDUlNdOworCV9fdTY0IHBhZGRpbmdbMTZdOworfTsKKworVGhpcyBpb2N0bCB3b3VsZCBzZXQgdmNwdSdzIHhjciB0byB0aGUgdmFsdWUgdXNlcnNwYWNlIHNwZWNpZmllZC4KKworNC40NSBLVk1fR0VUX1NVUFBPUlRFRF9DUFVJRAorCitDYXBhYmlsaXR5OiBLVk1fQ0FQX0VYVF9DUFVJRAorQXJjaGl0ZWN0dXJlczogeDg2CitUeXBlOiBzeXN0ZW0gaW9jdGwKK1BhcmFtZXRlcnM6IHN0cnVjdCBrdm1fY3B1aWQyIChpbi9vdXQpCitSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCisKK3N0cnVjdCBrdm1fY3B1aWQyIHsKKwlfX3UzMiBuZW50OworCV9fdTMyIHBhZGRpbmc7CisJc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgZW50cmllc1swXTsKK307CisKKyNkZWZpbmUgS1ZNX0NQVUlEX0ZMQUdfU0lHTklGQ0FOVF9JTkRFWCAxCisjZGVmaW5lIEtWTV9DUFVJRF9GTEFHX1NUQVRFRlVMX0ZVTkMgICAgMgorI2RlZmluZSBLVk1fQ1BVSURfRkxBR19TVEFURV9SRUFEX05FWFQgIDQKKworc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgeworCV9fdTMyIGZ1bmN0aW9uOworCV9fdTMyIGluZGV4OworCV9fdTMyIGZsYWdzOworCV9fdTMyIGVheDsKKwlfX3UzMiBlYng7CisJX191MzIgZWN4OworCV9fdTMyIGVkeDsKKwlfX3UzMiBwYWRkaW5nWzNdOworfTsKKworVGhpcyBpb2N0bCByZXR1cm5zIHg4NiBjcHVpZCBmZWF0dXJlcyB3aGljaCBhcmUgc3VwcG9ydGVkIGJ5IGJvdGggdGhlIGhhcmR3YXJlCithbmQga3ZtLiAgVXNlcnNwYWNlIGNhbiB1c2UgdGhlIGluZm9ybWF0aW9uIHJldHVybmVkIGJ5IHRoaXMgaW9jdGwgdG8KK2NvbnN0cnVjdCBjcHVpZCBpbmZvcm1hdGlvbiAoZm9yIEtWTV9TRVRfQ1BVSUQyKSB0aGF0IGlzIGNvbnNpc3RlbnQgd2l0aAoraGFyZHdhcmUsIGtlcm5lbCwgYW5kIHVzZXJzcGFjZSBjYXBhYmlsaXRpZXMsIGFuZCB3aXRoIHVzZXIgcmVxdWlyZW1lbnRzIChmb3IKK2V4YW1wbGUsIHRoZSB1c2VyIG1heSB3aXNoIHRvIGNvbnN0cmFpbiBjcHVpZCB0byBlbXVsYXRlIG9sZGVyIGhhcmR3YXJlLAorb3IgZm9yIGZlYXR1cmUgY29uc2lzdGVuY3kgYWNyb3NzIGEgY2x1c3RlcikuCisKK1VzZXJzcGFjZSBpbnZva2VzIEtWTV9HRVRfU1VQUE9SVEVEX0NQVUlEIGJ5IHBhc3NpbmcgYSBrdm1fY3B1aWQyIHN0cnVjdHVyZQord2l0aCB0aGUgJ25lbnQnIGZpZWxkIGluZGljYXRpbmcgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSB2YXJpYWJsZS1zaXplCithcnJheSAnZW50cmllcycuICBJZiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaXMgdG9vIGxvdyB0byBkZXNjcmliZSB0aGUgY3B1CitjYXBhYmlsaXRpZXMsIGFuIGVycm9yIChFMkJJRykgaXMgcmV0dXJuZWQuICBJZiB0aGUgbnVtYmVyIGlzIHRvbyBoaWdoLAordGhlICduZW50JyBmaWVsZCBpcyBhZGp1c3RlZCBhbmQgYW4gZXJyb3IgKEVOT01FTSkgaXMgcmV0dXJuZWQuICBJZiB0aGUKK251bWJlciBpcyBqdXN0IHJpZ2h0LCB0aGUgJ25lbnQnIGZpZWxkIGlzIGFkanVzdGVkIHRvIHRoZSBudW1iZXIgb2YgdmFsaWQKK2VudHJpZXMgaW4gdGhlICdlbnRyaWVzJyBhcnJheSwgd2hpY2ggaXMgdGhlbiBmaWxsZWQuCisKK1RoZSBlbnRyaWVzIHJldHVybmVkIGFyZSB0aGUgaG9zdCBjcHVpZCBhcyByZXR1cm5lZCBieSB0aGUgY3B1aWQgaW5zdHJ1Y3Rpb24sCit3aXRoIHVua25vd24gb3IgdW5zdXBwb3J0ZWQgZmVhdHVyZXMgbWFza2VkIG91dC4gIFRoZSBmaWVsZHMgaW4gZWFjaCBlbnRyeQorYXJlIGRlZmluZWQgYXMgZm9sbG93czoKKworICBmdW5jdGlvbjogdGhlIGVheCB2YWx1ZSB1c2VkIHRvIG9idGFpbiB0aGUgZW50cnkKKyAgaW5kZXg6IHRoZSBlY3ggdmFsdWUgdXNlZCB0byBvYnRhaW4gdGhlIGVudHJ5IChmb3IgZW50cmllcyB0aGF0IGFyZQorICAgICAgICAgYWZmZWN0ZWQgYnkgZWN4KQorICBmbGFnczogYW4gT1Igb2YgemVybyBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgICAgIEtWTV9DUFVJRF9GTEFHX1NJR05JRkNBTlRfSU5ERVg6CisgICAgICAgICAgIGlmIHRoZSBpbmRleCBmaWVsZCBpcyB2YWxpZAorICAgICAgICBLVk1fQ1BVSURfRkxBR19TVEFURUZVTF9GVU5DOgorICAgICAgICAgICBpZiBjcHVpZCBmb3IgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGRpZmZlcmVudCB2YWx1ZXMgZm9yIHN1Y2Nlc3NpdmUKKyAgICAgICAgICAgaW52b2NhdGlvbnM7IHRoZXJlIHdpbGwgYmUgc2V2ZXJhbCBlbnRyaWVzIHdpdGggdGhlIHNhbWUgZnVuY3Rpb24sCisgICAgICAgICAgIGFsbCB3aXRoIHRoaXMgZmxhZyBzZXQKKyAgICAgICAgS1ZNX0NQVUlEX0ZMQUdfU1RBVEVfUkVBRF9ORVhUOgorICAgICAgICAgICBmb3IgS1ZNX0NQVUlEX0ZMQUdfU1RBVEVGVUxfRlVOQyBlbnRyaWVzLCBzZXQgaWYgdGhpcyBlbnRyeSBpcworICAgICAgICAgICB0aGUgZmlyc3QgZW50cnkgdG8gYmUgcmVhZCBieSBhIGNwdQorICAgZWF4LCBlYngsIGVjeCwgZWR4OiB0aGUgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjcHVpZCBpbnN0cnVjdGlvbiBmb3IKKyAgICAgICAgIHRoaXMgZnVuY3Rpb24vaW5kZXggY29tYmluYXRpb24KKwogNS4gVGhlIGt2bV9ydW4gc3RydWN0dXJlCiAKIEFwcGxpY2F0aW9uIGNvZGUgb2J0YWlucyBhIHBvaW50ZXIgdG8gdGhlIGt2bV9ydW4gc3RydWN0dXJlIGJ5CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2t2bS9tbXUudHh0IGIvRG9jdW1lbnRhdGlvbi9rdm0vbW11LnR4dAppbmRleCBhYWVkNmFiLi4xNDJjYzUxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2t2bS9tbXUudHh0CisrKyBiL0RvY3VtZW50YXRpb24va3ZtL21tdS50eHQKQEAgLTc3LDEwICs3NywxMCBAQAogCiBHdWVzdCBtZW1vcnkgKGdwYSkgaXMgcGFydCBvZiB0aGUgdXNlciBhZGRyZXNzIHNwYWNlIG9mIHRoZSBwcm9jZXNzIHRoYXQgaXMKIHVzaW5nIGt2bS4gIFVzZXJzcGFjZSBkZWZpbmVzIHRoZSB0cmFuc2xhdGlvbiBiZXR3ZWVuIGd1ZXN0IGFkZHJlc3NlcyBhbmQgdXNlcgotYWRkcmVzc2VzIChncGEtPmh2YSk7IG5vdGUgdGhhdCB0d28gZ3BhcyBtYXkgYWxpYXMgdG8gdGhlIHNhbWUgZ3ZhLCBidXQgbm90CithZGRyZXNzZXMgKGdwYS0+aHZhKTsgbm90ZSB0aGF0IHR3byBncGFzIG1heSBhbGlhcyB0byB0aGUgc2FtZSBodmEsIGJ1dCBub3QKIHZpY2UgdmVyc2EuCiAKLVRoZXNlIGd2YXMgbWF5IGJlIGJhY2tlZCB1c2luZyBhbnkgbWV0aG9kIGF2YWlsYWJsZSB0byB0aGUgaG9zdDogYW5vbnltb3VzCitUaGVzZSBodmFzIG1heSBiZSBiYWNrZWQgdXNpbmcgYW55IG1ldGhvZCBhdmFpbGFibGUgdG8gdGhlIGhvc3Q6IGFub255bW91cwogbWVtb3J5LCBmaWxlIGJhY2tlZCBtZW1vcnksIGFuZCBkZXZpY2UgbWVtb3J5LiAgTWVtb3J5IG1pZ2h0IGJlIHBhZ2VkIGJ5IHRoZQogaG9zdCBhdCBhbnkgdGltZS4KIApAQCAtMTYxLDcgKzE2MSw3IEBACiAgIHJvbGUuY3I0X3BhZToKICAgICBDb250YWlucyB0aGUgdmFsdWUgb2YgY3I0LnBhZSBmb3Igd2hpY2ggdGhlIHBhZ2UgaXMgdmFsaWQgKGUuZy4gd2hldGhlcgogICAgIDMyLWJpdCBvciA2NC1iaXQgZ3B0ZXMgYXJlIGluIHVzZSkuCi0gIHJvbGUuY3I0X254ZToKKyAgcm9sZS5ueGU6CiAgICAgQ29udGFpbnMgdGhlIHZhbHVlIG9mIGVmZXIubnhlIGZvciB3aGljaCB0aGUgcGFnZSBpcyB2YWxpZC4KICAgcm9sZS5jcjBfd3A6CiAgICAgQ29udGFpbnMgdGhlIHZhbHVlIG9mIGNyMC53cCBmb3Igd2hpY2ggdGhlIHBhZ2UgaXMgdmFsaWQuCkBAIC0xODAsNyArMTgwLDkgQEAKICAgICBndWVzdCBwYWdlcyBhcyBsZWF2ZXMuCiAgIGdmbnM6CiAgICAgQW4gYXJyYXkgb2YgNTEyIGd1ZXN0IGZyYW1lIG51bWJlcnMsIG9uZSBmb3IgZWFjaCBwcmVzZW50IHB0ZS4gIFVzZWQgdG8KLSAgICBwZXJmb3JtIGEgcmV2ZXJzZSBtYXAgZnJvbSBhIHB0ZSB0byBhIGdmbi4KKyAgICBwZXJmb3JtIGEgcmV2ZXJzZSBtYXAgZnJvbSBhIHB0ZSB0byBhIGdmbi4gV2hlbiByb2xlLmRpcmVjdCBpcyBzZXQsIGFueQorICAgIGVsZW1lbnQgb2YgdGhpcyBhcnJheSBjYW4gYmUgY2FsY3VsYXRlZCBmcm9tIHRoZSBnZm4gZmllbGQgd2hlbiB1c2VkLCBpbgorICAgIHRoaXMgY2FzZSwgdGhlIGFycmF5IG9mIGdmbnMgaXMgbm90IGFsbG9jYXRlZC4gU2VlIHJvbGUuZGlyZWN0IGFuZCBnZm4uCiAgIHNsb3RfYml0bWFwOgogICAgIEEgYml0bWFwIGNvbnRhaW5pbmcgb25lIGJpdCBwZXIgbWVtb3J5IHNsb3QuICBJZiB0aGUgcGFnZSBjb250YWlucyBhIHB0ZQogICAgIG1hcHBpbmcgYSBwYWdlIGZyb20gbWVtb3J5IHNsb3QgbiwgdGhlbiBiaXQgbiBvZiBzbG90X2JpdG1hcCB3aWxsIGJlIHNldApAQCAtMjk2LDYgKzI5OCw0OCBAQAogICAtIGxvb2sgdXAgYWZmZWN0ZWQgc3B0ZXMgdGhyb3VnaCByZXZlcnNlIG1hcAogICAtIGRyb3AgKG9yIHVwZGF0ZSkgdHJhbnNsYXRpb25zCiAKK0VtdWxhdGluZyBjcjAud3AKKz09PT09PT09PT09PT09PT0KKworSWYgdGRwIGlzIG5vdCBlbmFibGVkLCB0aGUgaG9zdCBtdXN0IGtlZXAgY3IwLndwPTEgc28gcGFnZSB3cml0ZSBwcm90ZWN0aW9uCit3b3JrcyBmb3IgdGhlIGd1ZXN0IGtlcm5lbCwgbm90IGd1ZXN0IGd1ZXN0IHVzZXJzcGFjZS4gIFdoZW4gdGhlIGd1ZXN0CitjcjAud3A9MSwgdGhpcyBkb2VzIG5vdCBwcmVzZW50IGEgcHJvYmxlbS4gIEhvd2V2ZXIgd2hlbiB0aGUgZ3Vlc3QgY3IwLndwPTAsCit3ZSBjYW5ub3QgbWFwIHRoZSBwZXJtaXNzaW9ucyBmb3IgZ3B0ZS51PTEsIGdwdGUudz0wIHRvIGFueSBzcHRlICh0aGUKK3NlbWFudGljcyByZXF1aXJlIGFsbG93aW5nIGFueSBndWVzdCBrZXJuZWwgYWNjZXNzIHBsdXMgdXNlciByZWFkIGFjY2VzcykuCisKK1dlIGhhbmRsZSB0aGlzIGJ5IG1hcHBpbmcgdGhlIHBlcm1pc3Npb25zIHRvIHR3byBwb3NzaWJsZSBzcHRlcywgZGVwZW5kaW5nCitvbiBmYXVsdCB0eXBlOgorCistIGtlcm5lbCB3cml0ZSBmYXVsdDogc3B0ZS51PTAsIHNwdGUudz0xIChhbGxvd3MgZnVsbCBrZXJuZWwgYWNjZXNzLAorICBkaXNhbGxvd3MgdXNlciBhY2Nlc3MpCistIHJlYWQgZmF1bHQ6IHNwdGUudT0xLCBzcHRlLnc9MCAoYWxsb3dzIGZ1bGwgcmVhZCBhY2Nlc3MsIGRpc2FsbG93cyBrZXJuZWwKKyAgd3JpdGUgYWNjZXNzKQorCisodXNlciB3cml0ZSBmYXVsdHMgZ2VuZXJhdGUgYSAjUEYpCisKK0xhcmdlIHBhZ2VzCis9PT09PT09PT09PQorCitUaGUgbW11IHN1cHBvcnRzIGFsbCBjb21iaW5hdGlvbnMgb2YgbGFyZ2UgYW5kIHNtYWxsIGd1ZXN0IGFuZCBob3N0IHBhZ2VzLgorU3VwcG9ydGVkIHBhZ2Ugc2l6ZXMgaW5jbHVkZSA0aywgMk0sIDRNLCBhbmQgMUcuICA0TSBwYWdlcyBhcmUgdHJlYXRlZCBhcwordHdvIHNlcGFyYXRlIDJNIHBhZ2VzLCBvbiBib3RoIGd1ZXN0IGFuZCBob3N0LCBzaW5jZSB0aGUgbW11IGFsd2F5cyB1c2VzIFBBRQorcGFnaW5nLgorCitUbyBpbnN0YW50aWF0ZSBhIGxhcmdlIHNwdGUsIGZvdXIgY29uc3RyYWludHMgbXVzdCBiZSBzYXRpc2ZpZWQ6CisKKy0gdGhlIHNwdGUgbXVzdCBwb2ludCB0byBhIGxhcmdlIGhvc3QgcGFnZQorLSB0aGUgZ3Vlc3QgcHRlIG11c3QgYmUgYSBsYXJnZSBwdGUgb2YgYXQgbGVhc3QgZXF1aXZhbGVudCBzaXplIChpZiB0ZHAgaXMKKyAgZW5hYmxlZCwgdGhlcmUgaXMgbm8gZ3Vlc3QgcHRlIGFuZCB0aGlzIGNvbmRpdGlvbiBpcyBzYXRpc2lmaWVkKQorLSBpZiB0aGUgc3B0ZSB3aWxsIGJlIHdyaXRlYWJsZSwgdGhlIGxhcmdlIHBhZ2UgZnJhbWUgbWF5IG5vdCBvdmVybGFwIGFueQorICB3cml0ZS1wcm90ZWN0ZWQgcGFnZXMKKy0gdGhlIGd1ZXN0IHBhZ2UgbXVzdCBiZSB3aG9sbHkgY29udGFpbmVkIGJ5IGEgc2luZ2xlIG1lbW9yeSBzbG90CisKK1RvIGNoZWNrIHRoZSBsYXN0IHR3byBjb25kaXRpb25zLCB0aGUgbW11IG1haW50YWlucyBhIC0+d3JpdGVfY291bnQgc2V0IG9mCithcnJheXMgZm9yIGVhY2ggbWVtb3J5IHNsb3QgYW5kIGxhcmdlIHBhZ2Ugc2l6ZS4gIEV2ZXJ5IHdyaXRlIHByb3RlY3RlZCBwYWdlCitjYXVzZXMgaXRzIHdyaXRlX2NvdW50IHRvIGJlIGluY3JlbWVudGVkLCB0aHVzIHByZXZlbnRpbmcgaW5zdGFudGlhdGlvbiBvZgorYSBsYXJnZSBzcHRlLiAgVGhlIGZyYW1lcyBhdCB0aGUgZW5kIG9mIGFuIHVuYWxpZ25lZCBtZW1vcnkgc2xvdCBoYXZlCithcnRpZmljaWNhbGx5IGluZmxhdGVkIC0+d3JpdGVfY291bnRzIHNvIHRoZXkgY2FuIG5ldmVyIGJlIGluc3RhbnRpYXRlZC4KKwogRnVydGhlciByZWFkaW5nCiA9PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rdm0vbXNyLnR4dCBiL0RvY3VtZW50YXRpb24va3ZtL21zci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRkY2ZlOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24va3ZtL21zci50eHQKQEAgLTAsMCArMSwxNTMgQEAKK0tWTS1zcGVjaWZpYyBNU1JzLgorR2xhdWJlciBDb3N0YSA8Z2xvbW1lckByZWRoYXQuY29tPiwgUmVkIEhhdCBJbmMsIDIwMTAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0tWTSBtYWtlcyB1c2Ugb2Ygc29tZSBjdXN0b20gTVNScyB0byBzZXJ2aWNlIHNvbWUgcmVxdWVzdHMuCitBdCBwcmVzZW50LCB0aGlzIGZhY2lsaXR5IGlzIG9ubHkgdXNlZCBieSBrdm1jbG9jay4KKworQ3VzdG9tIE1TUnMgaGF2ZSBhIHJhbmdlIHJlc2VydmVkIGZvciB0aGVtLCB0aGF0IGdvZXMgZnJvbQorMHg0YjU2NGQwMCB0byAweDRiNTY0ZGZmLiBUaGVyZSBhcmUgTVNScyBvdXRzaWRlIHRoaXMgYXJlYSwKK2J1dCB0aGV5IGFyZSBkZXByZWNhdGVkIGFuZCB0aGVpciB1c2UgaXMgZGlzY291cmFnZWQuCisKK0N1c3RvbSBNU1IgbGlzdAorLS0tLS0tLS0KKworVGhlIGN1cnJlbnQgc3VwcG9ydGVkIEN1c3RvbSBNU1IgbGlzdCBpczoKKworTVNSX0tWTV9XQUxMX0NMT0NLX05FVzogICAweDRiNTY0ZDAwCisKKwlkYXRhOiA0LWJ5dGUgYWxpZ25tZW50IHBoeXNpY2FsIGFkZHJlc3Mgb2YgYSBtZW1vcnkgYXJlYSB3aGljaCBtdXN0IGJlCisJaW4gZ3Vlc3QgUkFNLiBUaGlzIG1lbW9yeSBpcyBleHBlY3RlZCB0byBob2xkIGEgY29weSBvZiB0aGUgZm9sbG93aW5nCisJc3RydWN0dXJlOgorCisJc3RydWN0IHB2Y2xvY2tfd2FsbF9jbG9jayB7CisJCXUzMiAgIHZlcnNpb247CisJCXUzMiAgIHNlYzsKKwkJdTMyICAgbnNlYzsKKwl9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKworCXdob3NlIGRhdGEgd2lsbCBiZSBmaWxsZWQgaW4gYnkgdGhlIGh5cGVydmlzb3IuIFRoZSBoeXBlcnZpc29yIGlzIG9ubHkKKwlndWFyYW50ZWVkIHRvIHVwZGF0ZSB0aGlzIGRhdGEgYXQgdGhlIG1vbWVudCBvZiBNU1Igd3JpdGUuCisJVXNlcnMgdGhhdCB3YW50IHRvIHJlbGlhYmx5IHF1ZXJ5IHRoaXMgaW5mb3JtYXRpb24gbW9yZSB0aGFuIG9uY2UgaGF2ZQorCXRvIHdyaXRlIG1vcmUgdGhhbiBvbmNlIHRvIHRoaXMgTVNSLiBGaWVsZHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmdzOgorCisJCXZlcnNpb246IGd1ZXN0IGhhcyB0byBjaGVjayB2ZXJzaW9uIGJlZm9yZSBhbmQgYWZ0ZXIgZ3JhYmJpbmcKKwkJdGltZSBpbmZvcm1hdGlvbiBhbmQgY2hlY2sgdGhhdCB0aGV5IGFyZSBib3RoIGVxdWFsIGFuZCBldmVuLgorCQlBbiBvZGQgdmVyc2lvbiBpbmRpY2F0ZXMgYW4gaW4tcHJvZ3Jlc3MgdXBkYXRlLgorCisJCXNlYzogbnVtYmVyIG9mIHNlY29uZHMgZm9yIHdhbGxjbG9jay4KKworCQluc2VjOiBudW1iZXIgb2YgbmFub3NlY29uZHMgZm9yIHdhbGxjbG9jay4KKworCU5vdGUgdGhhdCBhbHRob3VnaCBNU1JzIGFyZSBwZXItQ1BVIGVudGl0aWVzLCB0aGUgZWZmZWN0IG9mIHRoaXMKKwlwYXJ0aWN1bGFyIE1TUiBpcyBnbG9iYWwuCisKKwlBdmFpbGFiaWxpdHkgb2YgdGhpcyBNU1IgbXVzdCBiZSBjaGVja2VkIHZpYSBiaXQgMyBpbiAweDQwMDAwMDEgY3B1aWQKKwlsZWFmIHByaW9yIHRvIHVzYWdlLgorCitNU1JfS1ZNX1NZU1RFTV9USU1FX05FVzogIDB4NGI1NjRkMDEKKworCWRhdGE6IDQtYnl0ZSBhbGlnbmVkIHBoeXNpY2FsIGFkZHJlc3Mgb2YgYSBtZW1vcnkgYXJlYSB3aGljaCBtdXN0IGJlIGluCisJZ3Vlc3QgUkFNLCBwbHVzIGFuIGVuYWJsZSBiaXQgaW4gYml0IDAuIFRoaXMgbWVtb3J5IGlzIGV4cGVjdGVkIHRvIGhvbGQKKwlhIGNvcHkgb2YgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6CisKKwlzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyB7CisJCXUzMiAgIHZlcnNpb247CisJCXUzMiAgIHBhZDA7CisJCXU2NCAgIHRzY190aW1lc3RhbXA7CisJCXU2NCAgIHN5c3RlbV90aW1lOworCQl1MzIgICB0c2NfdG9fc3lzdGVtX211bDsKKwkJczggICAgdHNjX3NoaWZ0OworCQl1OCAgICBmbGFnczsKKwkJdTggICAgcGFkWzJdOworCX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOyAvKiAzMiBieXRlcyAqLworCisJd2hvc2UgZGF0YSB3aWxsIGJlIGZpbGxlZCBpbiBieSB0aGUgaHlwZXJ2aXNvciBwZXJpb2RpY2FsbHkuIE9ubHkgb25lCisJd3JpdGUsIG9yIHJlZ2lzdHJhdGlvbiwgaXMgbmVlZGVkIGZvciBlYWNoIFZDUFUuIFRoZSBpbnRlcnZhbCBiZXR3ZWVuCisJdXBkYXRlcyBvZiB0aGlzIHN0cnVjdHVyZSBpcyBhcmJpdHJhcnkgYW5kIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudC4KKwlUaGUgaHlwZXJ2aXNvciBtYXkgdXBkYXRlIHRoaXMgc3RydWN0dXJlIGF0IGFueSB0aW1lIGl0IHNlZXMgZml0IHVudGlsCisJYW55dGhpbmcgd2l0aCBiaXQwID09IDAgaXMgd3JpdHRlbiB0byBpdC4KKworCUZpZWxkcyBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZ3M6CisKKwkJdmVyc2lvbjogZ3Vlc3QgaGFzIHRvIGNoZWNrIHZlcnNpb24gYmVmb3JlIGFuZCBhZnRlciBncmFiYmluZworCQl0aW1lIGluZm9ybWF0aW9uIGFuZCBjaGVjayB0aGF0IHRoZXkgYXJlIGJvdGggZXF1YWwgYW5kIGV2ZW4uCisJCUFuIG9kZCB2ZXJzaW9uIGluZGljYXRlcyBhbiBpbi1wcm9ncmVzcyB1cGRhdGUuCisKKwkJdHNjX3RpbWVzdGFtcDogdGhlIHRzYyB2YWx1ZSBhdCB0aGUgY3VycmVudCBWQ1BVIGF0IHRoZSB0aW1lCisJCW9mIHRoZSB1cGRhdGUgb2YgdGhpcyBzdHJ1Y3R1cmUuIEd1ZXN0cyBjYW4gc3VidHJhY3QgdGhpcyB2YWx1ZQorCQlmcm9tIGN1cnJlbnQgdHNjIHRvIGRlcml2ZSBhIG5vdGlvbiBvZiBlbGFwc2VkIHRpbWUgc2luY2UgdGhlCisJCXN0cnVjdHVyZSB1cGRhdGUuCisKKwkJc3lzdGVtX3RpbWU6IGEgaG9zdCBub3Rpb24gb2YgbW9ub3RvbmljIHRpbWUsIGluY2x1ZGluZyBzbGVlcAorCQl0aW1lIGF0IHRoZSB0aW1lIHRoaXMgc3RydWN0dXJlIHdhcyBsYXN0IHVwZGF0ZWQuIFVuaXQgaXMKKwkJbmFub3NlY29uZHMuCisKKwkJdHNjX3RvX3N5c3RlbV9tdWw6IGEgZnVuY3Rpb24gb2YgdGhlIHRzYyBmcmVxdWVuY3kuIE9uZSBoYXMKKwkJdG8gbXVsdGlwbHkgYW55IHRzYy1yZWxhdGVkIHF1YW50aXR5IGJ5IHRoaXMgdmFsdWUgdG8gZ2V0CisJCWEgdmFsdWUgaW4gbmFub3NlY29uZHMsIGJlc2lkZXMgZGl2aWRpbmcgYnkgMl50c2Nfc2hpZnQKKworCQl0c2Nfc2hpZnQ6IGN5Y2xlIHRvIG5hbm9zZWNvbmQgZGl2aWRlciwgYXMgYSBwb3dlciBvZiB0d28sIHRvCisJCWFsbG93IGZvciBzaGlmdCByaWdodHMuIE9uZSBoYXMgdG8gc2hpZnQgcmlnaHQgYW55IHRzYy1yZWxhdGVkCisJCXF1YW50aXR5IGJ5IHRoaXMgdmFsdWUgdG8gZ2V0IGEgdmFsdWUgaW4gbmFub3NlY29uZHMsIGJlc2lkZXMKKwkJbXVsdGlwbHlpbmcgYnkgdHNjX3RvX3N5c3RlbV9tdWwuCisKKwkJV2l0aCB0aGlzIGluZm9ybWF0aW9uLCBndWVzdHMgY2FuIGRlcml2ZSBwZXItQ1BVIHRpbWUgYnkKKwkJZG9pbmc6CisKKwkJCXRpbWUgPSAoY3VycmVudF90c2MgLSB0c2NfdGltZXN0YW1wKQorCQkJdGltZSA9ICh0aW1lICogdHNjX3RvX3N5c3RlbV9tdWwpID4+IHRzY19zaGlmdAorCQkJdGltZSA9IHRpbWUgKyBzeXN0ZW1fdGltZQorCisJCWZsYWdzOiBiaXRzIGluIHRoaXMgZmllbGQgaW5kaWNhdGUgZXh0ZW5kZWQgY2FwYWJpbGl0aWVzCisJCWNvb3JkaW5hdGVkIGJldHdlZW4gdGhlIGd1ZXN0IGFuZCB0aGUgaHlwZXJ2aXNvci4gQXZhaWxhYmlsaXR5CisJCW9mIHNwZWNpZmljIGZsYWdzIGhhcyB0byBiZSBjaGVja2VkIGluIDB4NDAwMDAwMDEgY3B1aWQgbGVhZi4KKwkJQ3VycmVudCBmbGFncyBhcmU6CisKKwkJIGZsYWcgYml0ICAgfCBjcHVpZCBiaXQgICAgfCBtZWFuaW5nCisJCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCSAgICB8CSAgICAgICAgICAgfCB0aW1lIG1lYXN1cmVzIHRha2VuIGFjcm9zcworCQkgICAgIDAgICAgICB8CSAgIDI0ICAgICAgfCBtdWx0aXBsZSBjcHVzIGFyZSBndWFyYW50ZWVkIHRvCisJCQkgICAgfAkJICAgfCBiZSBtb25vdG9uaWMKKwkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJQXZhaWxhYmlsaXR5IG9mIHRoaXMgTVNSIG11c3QgYmUgY2hlY2tlZCB2aWEgYml0IDMgaW4gMHg0MDAwMDAxIGNwdWlkCisJbGVhZiBwcmlvciB0byB1c2FnZS4KKworCitNU1JfS1ZNX1dBTExfQ0xPQ0s6ICAweDExCisKKwlkYXRhIGFuZCBmdW5jdGlvbmluZzogc2FtZSBhcyBNU1JfS1ZNX1dBTExfQ0xPQ0tfTkVXLiBVc2UgdGhhdCBpbnN0ZWFkLgorCisJVGhpcyBNU1IgZmFsbHMgb3V0c2lkZSB0aGUgcmVzZXJ2ZWQgS1ZNIHJhbmdlIGFuZCBtYXkgYmUgcmVtb3ZlZCBpbiB0aGUKKwlmdXR1cmUuIEl0cyB1c2FnZSBpcyBkZXByZWNhdGVkLgorCisJQXZhaWxhYmlsaXR5IG9mIHRoaXMgTVNSIG11c3QgYmUgY2hlY2tlZCB2aWEgYml0IDAgaW4gMHg0MDAwMDAxIGNwdWlkCisJbGVhZiBwcmlvciB0byB1c2FnZS4KKworTVNSX0tWTV9TWVNURU1fVElNRTogMHgxMgorCisJZGF0YSBhbmQgZnVuY3Rpb25pbmc6IHNhbWUgYXMgTVNSX0tWTV9TWVNURU1fVElNRV9ORVcuIFVzZSB0aGF0IGluc3RlYWQuCisKKwlUaGlzIE1TUiBmYWxscyBvdXRzaWRlIHRoZSByZXNlcnZlZCBLVk0gcmFuZ2UgYW5kIG1heSBiZSByZW1vdmVkIGluIHRoZQorCWZ1dHVyZS4gSXRzIHVzYWdlIGlzIGRlcHJlY2F0ZWQuCisKKwlBdmFpbGFiaWxpdHkgb2YgdGhpcyBNU1IgbXVzdCBiZSBjaGVja2VkIHZpYSBiaXQgMCBpbiAweDQwMDAwMDEgY3B1aWQKKwlsZWFmIHByaW9yIHRvIHVzYWdlLgorCisJVGhlIHN1Z2dlc3RlZCBhbGdvcml0aG0gZm9yIGRldGVjdGluZyBrdm1jbG9jayBwcmVzZW5jZSBpcyB0aGVuOgorCisJCWlmICgha3ZtX3BhcmFfYXZhaWxhYmxlKCkpICAgIC8qIHJlZmVyIHRvIGNwdWlkLnR4dCAqLworCQkJcmV0dXJuIE5PTl9QUkVTRU5UOworCisJCWZsYWdzID0gY3B1aWRfZWF4KDB4NDAwMDAwMDEpOworCQlpZiAoZmxhZ3MgJiAzKSB7CisJCQltc3Jfa3ZtX3N5c3RlbV90aW1lID0gTVNSX0tWTV9TWVNURU1fVElNRV9ORVc7CisJCQltc3Jfa3ZtX3dhbGxfY2xvY2sgPSBNU1JfS1ZNX1dBTExfQ0xPQ0tfTkVXOworCQkJcmV0dXJuIFBSRVNFTlQ7CisJCX0gZWxzZSBpZiAoZmxhZ3MgJiAwKSB7CisJCQltc3Jfa3ZtX3N5c3RlbV90aW1lID0gTVNSX0tWTV9TWVNURU1fVElNRTsKKwkJCW1zcl9rdm1fd2FsbF9jbG9jayA9IE1TUl9LVk1fV0FMTF9DTE9DSzsKKwkJCXJldHVybiBQUkVTRU5UOworCQl9IGVsc2UKKwkJCXJldHVybiBOT05fUFJFU0VOVDsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va3ZtL3Jldmlldy1jaGVja2xpc3QudHh0IGIvRG9jdW1lbnRhdGlvbi9rdm0vcmV2aWV3LWNoZWNrbGlzdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMwNDc1YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24va3ZtL3Jldmlldy1jaGVja2xpc3QudHh0CkBAIC0wLDAgKzEsMzggQEAKK1JldmlldyBjaGVja2xpc3QgZm9yIGt2bSBwYXRjaGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiAgVGhlIHBhdGNoIG11c3QgZm9sbG93IERvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUgYW5kCisgICAgRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcy4KKworMi4gIFBhdGNoZXMgc2hvdWxkIGJlIGFnYWluc3Qga3ZtLmdpdCBtYXN0ZXIgYnJhbmNoLgorCiszLiAgSWYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgYSBuZXcgdXNlcnNwYWNlIEFQSToKKyAgICAtIHRoZSBBUEkgbXVzdCBiZSBkb2N1bWVudGVkIGluIERvY3VtZW50YXRpb24va3ZtL2FwaS50eHQKKyAgICAtIHRoZSBBUEkgbXVzdCBiZSBkaXNjb3ZlcmFibGUgdXNpbmcgS1ZNX0NIRUNLX0VYVEVOU0lPTgorCis0LiAgTmV3IHN0YXRlIG11c3QgaW5jbHVkZSBzdXBwb3J0IGZvciBzYXZlL3Jlc3RvcmUuCisKKzUuICBOZXcgZmVhdHVyZXMgbXVzdCBkZWZhdWx0IHRvIG9mZiAodXNlcnNwYWNlIHNob3VsZCBleHBsaWNpdGx5IHJlcXVlc3QgdGhlbSkuCisgICAgUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIGNhbiBhbmQgc2hvdWxkIGRlZmF1bHQgdG8gb24uCisKKzYuICBOZXcgY3B1IGZlYXR1cmVzIHNob3VsZCBiZSBleHBvc2VkIHZpYSBLVk1fR0VUX1NVUFBPUlRFRF9DUFVJRDIKKworNy4gIEVtdWxhdG9yIGNoYW5nZXMgc2hvdWxkIGJlIGFjY29tcGFuaWVkIGJ5IHVuaXQgdGVzdHMgZm9yIHFlbXUta3ZtLmdpdAorICAgIGt2bS90ZXN0IGRpcmVjdG9yeS4KKworOC4gIENoYW5nZXMgc2hvdWxkIGJlIHZlbmRvciBuZXV0cmFsIHdoZW4gcG9zc2libGUuICBDaGFuZ2VzIHRvIGNvbW1vbiBjb2RlCisgICAgYXJlIGJldHRlciB0aGFuIGR1cGxpY2F0aW5nIGNoYW5nZXMgdG8gdmVuZG9yIGNvZGUuCisKKzkuICBTaW1pbGFybHksIHByZWZlciBjaGFuZ2VzIHRvIGFyY2ggaW5kZXBlbmRlbnQgY29kZSB0aGFuIHRvIGFyY2ggZGVwZW5kZW50CisgICAgY29kZS4KKworMTAuIFVzZXIva2VybmVsIGludGVyZmFjZXMgYW5kIGd1ZXN0L2hvc3QgaW50ZXJmYWNlcyBtdXN0IGJlIDY0LWJpdCBjbGVhbgorICAgIChhbGwgdmFyaWFibGVzIGFuZCBzaXplcyBuYXR1cmFsbHkgYWxpZ25lZCBvbiA2NC1iaXQ7IHVzZSBzcGVjaWZpYyB0eXBlcworICAgIG9ubHkgLSB1NjQgcmF0aGVyIHRoYW4gdWxvbmcpLgorCisxMS4gTmV3IGd1ZXN0IHZpc2libGUgZmVhdHVyZXMgbXVzdCBlaXRoZXIgYmUgZG9jdW1lbnRlZCBpbiBhIGhhcmR3YXJlIG1hbnVhbAorICAgIG9yIGJlIGFjY29tcGFuaWVkIGJ5IGRvY3VtZW50YXRpb24uCisKKzEyLiBGZWF0dXJlcyBtdXN0IGJlIHJvYnVzdCBhZ2FpbnN0IHJlc2V0IGFuZCBrZXhlYyAtIGZvciBleGFtcGxlLCBzaGFyZWQKKyAgICBob3N0L2d1ZXN0IG1lbW9yeSBtdXN0IGJlIHVuc2hhcmVkIHRvIHByZXZlbnQgdGhlIGhvc3QgZnJvbSB3cml0aW5nIHRvCisgICAgZ3Vlc3QgbWVtb3J5IHRoYXQgdGhlIGd1ZXN0IGhhcyBub3QgcmVzZXJ2ZWQgZm9yIHRoaXMgcHVycG9zZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGFwdG9wcy9hY2VyLXdtaS50eHQgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvYWNlci13bWkudHh0CmluZGV4IDA3NjhmY2MuLjRiZWFmYTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGFwdG9wcy9hY2VyLXdtaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL2FjZXItd21pLnR4dApAQCAtMTczLDcgKzE3Myw3IEBACiAqKioqKioqCiAKIE9sYWYgVGF1YmVyLCB3aG8gZGlkIHRoZSByZWFsIGhhcmQgd29yayB3aGVuIGhlIGRldmVsb3BlZCBhY2VyaGsKLWh0dHA6Ly93d3cuaW5mb3JtYXRpay5odS1iZXJsaW4uZGUvfnRhdWJlci9hY2VyaGsKK2h0dHA6Ly93d3cuY2FrZXkuZGUvYWNlcmhrLwogQWxsIHRoZSBhdXRob3JzIG9mIGxhcHRvcCBBQ1BJIG1vZHVsZXMgaW4gdGhlIGtlcm5lbCwgd2hvc2Ugd29yawogd2FzIGFuIGluc3BpcmF0aW9uIGluIHRoZSBlYXJseSBkYXlzIG9mIGFjZXJfYWNwaQogTWF0aGlldSBTZWdhdWQsIHdobyBzb2x2ZWQgdGhlIHByb2JsZW0gd2l0aCBoYXZpbmcgdG8gbW9kcHJvYmUgdGhlIGRyaXZlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL3RoaW5rcGFkLWFjcGkudHh0IGIvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL3RoaW5rcGFkLWFjcGkudHh0CmluZGV4IGZjMTU1MzguLmY2ZjgwMjUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGFwdG9wcy90aGlua3BhZC1hY3BpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvdGhpbmtwYWQtYWNwaS50eHQKQEAgLTk2MCw3MCArOTYwLDIxIEBACiAJc3Vic3lzdGVtLCBhbmQgZm9sbG93IGFsbCBvZiB0aGUgaHdtb24gZ3VpZGVsaW5lcyBhdAogCURvY3VtZW50YXRpb24vaHdtb24uCiAKK0VYUEVSSU1FTlRBTDogRW1iZWRkZWQgY29udHJvbGxlciByZWdpc3RlciBkdW1wCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FWFBFUklNRU5UQUw6IEVtYmVkZGVkIGNvbnRyb2xsZXIgcmVnaXN0ZXIgZHVtcCAtLSAvcHJvYy9hY3BpL2libS9lY2R1bXAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhpcyBmZWF0dXJlIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgdGhpbmtwYWQgZHJpdmVyIGFueW1vcmUuCitJbnN0ZWFkIHRoZSBFQyBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCAvc3lzL2tlcm5lbC9kZWJ1Zy9lYyB3aXRoCithIHVzZXJzcGFjZSB0b29sIHdoaWNoIGNhbiBiZSBmb3VuZCBoZXJlOgorZnRwOi8vZnRwLnN1c2UuY29tL3B1Yi9wZW9wbGUvdHJlbm4vc291cmNlcy9lYwogCi1UaGlzIGZlYXR1cmUgaXMgbWFya2VkIEVYUEVSSU1FTlRBTCBiZWNhdXNlIHRoZSBpbXBsZW1lbnRhdGlvbgotZGlyZWN0bHkgYWNjZXNzZXMgaGFyZHdhcmUgcmVnaXN0ZXJzIGFuZCBtYXkgbm90IHdvcmsgYXMgZXhwZWN0ZWQuIFVTRQotV0lUSCBDQVVUSU9OISBUbyB1c2UgdGhpcyBmZWF0dXJlLCB5b3UgbmVlZCB0byBzdXBwbHkgdGhlCi1leHBlcmltZW50YWw9MSBwYXJhbWV0ZXIgd2hlbiBsb2FkaW5nIHRoZSBtb2R1bGUuCi0KLVRoaXMgZmVhdHVyZSBkdW1wcyB0aGUgdmFsdWVzIG9mIDI1NiBlbWJlZGRlZCBjb250cm9sbGVyCi1yZWdpc3RlcnMuIFZhbHVlcyB3aGljaCBoYXZlIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgcmVnaXN0ZXJzCi13ZXJlIGR1bXBlZCBhcmUgbWFya2VkIHdpdGggYSBzdGFyOgotCi1bcm9vdEB4NDAgaWJtLWFjcGldIyBjYXQgL3Byb2MvYWNwaS9pYm0vZWNkdW1wCi1FQyAgICAgICArMDAgKzAxICswMiArMDMgKzA0ICswNSArMDYgKzA3ICswOCArMDkgKzBhICswYiArMGMgKzBkICswZSArMGYKLUVDIDB4MDA6ICBhNyAgNDcgIDg3ICAwMSAgZmUgIDk2ICAwMCAgMDggIDAxICAwMCAgY2IgIDAwICAwMCAgMDAgIDQwICAwMAotRUMgMHgxMDogIDAwICAwMCAgZmYgIGZmICBmNCAgM2MgIDg3ICAwOSAgMDEgIGZmICA0MiAgMDEgIGZmICBmZiAgMGQgIDAwCi1FQyAweDIwOiAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMyAgNDMgIDAwICAwMCAgODAKLUVDIDB4MzA6ICAwMSAgMDcgIDFhICAwMCAgMzAgIDA0ICAwMCAgMDAgKjg1ICAwMCAgMDAgIDEwICAwMCAgNTAgIDAwICAwMAotRUMgMHg0MDogIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDE0ICAwMSAgMDAgIDA0ICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwCi1FQyAweDUwOiAgMDAgIGMwICAwMiAgMGQgIDAwICAwMSAgMDEgIDAyICAwMiAgMDMgIDAzICAwMyAgMDMgKmJjICowMiAqYmMKLUVDIDB4NjA6ICowMiAqYmMgKjAyICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMAotRUMgMHg3MDogIDAwICAwMCAgMDAgIDAwICAwMCAgMTIgIDMwICA0MCAqMjQgKjI2ICoyYyAqMjcgKjIwICA4MCAqMWYgIDgwCi1FQyAweDgwOiAgMDAgIDAwICAwMCAgMDYgKjM3ICowZSAgMDMgIDAwICAwMCAgMDAgIDBlICAwNyAgMDAgIDAwICAwMCAgMDAKLUVDIDB4OTA6ICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMAotRUMgMHhhMDogKmZmICAwOSAgZmYgIDA5ICBmZiAgZmYgKjY0ICAwMCAqMDAgKjAwICphMiAgNDEgKmZmICpmZiAqZTAgIDAwCi1FQyAweGIwOiAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAKLUVDIDB4YzA6ICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMAotRUMgMHhkMDogIDAzICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwCi1FQyAweGUwOiAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAxMSAgMjAgIDQ5ICAwNCAgMjQgIDA2ICA1NSAgMDMKLUVDIDB4ZjA6ICAzMSAgNTUgIDQ4ICA1NCAgMzUgIDM4ICA1NyAgNTcgIDA4ICAyZiAgNDUgIDczICAwNyAgNjUgIDZjICAxYQotCi1UaGlzIGZlYXR1cmUgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSByZWdpc3RlciBob2xkaW5nIHRoZSBmYW4KK1VzZSBpdCB0byBkZXRlcm1pbmUgdGhlIHJlZ2lzdGVyIGhvbGRpbmcgdGhlIGZhbgogc3BlZWQgb24gc29tZSBtb2RlbHMuIFRvIGRvIHRoYXQsIGRvIHRoZSBmb2xsb3dpbmc6Ci0KIAktIG1ha2Ugc3VyZSB0aGUgYmF0dGVyeSBpcyBmdWxseSBjaGFyZ2VkCiAJLSBtYWtlIHN1cmUgdGhlIGZhbiBpcyBydW5uaW5nCi0JLSBydW4gJ2NhdCAvcHJvYy9hY3BpL2libS9lY2R1bXAnIHNldmVyYWwgdGltZXMsIG9uY2UgcGVyIHNlY29uZCBvciBzbworCS0gdXNlIGFib3ZlIG1lbnRpb25lZCB0b29sIHRvIHJlYWQgb3V0IHRoZSBFQwogCi1UaGUgZmlyc3Qgc3RlcCBtYWtlcyBzdXJlIHZhcmlvdXMgY2hhcmdpbmctcmVsYXRlZCB2YWx1ZXMgZG9uJ3QKLXZhcnkuIFRoZSBzZWNvbmQgZW5zdXJlcyB0aGF0IHRoZSBmYW4tcmVsYXRlZCB2YWx1ZXMgZG8gdmFyeSwgc2luY2UKLXRoZSBmYW4gc3BlZWQgZmx1Y3R1YXRlcyBhIGJpdC4gVGhlIHRoaXJkIHdpbGwgKGhvcGVmdWxseSkgbWFyayB0aGUKLWZhbiByZWdpc3RlciB3aXRoIGEgc3RhcjoKLQotW3Jvb3RAeDQwIGlibS1hY3BpXSMgY2F0IC9wcm9jL2FjcGkvaWJtL2VjZHVtcAotRUMgICAgICAgKzAwICswMSArMDIgKzAzICswNCArMDUgKzA2ICswNyArMDggKzA5ICswYSArMGIgKzBjICswZCArMGUgKzBmCi1FQyAweDAwOiAgYTcgIDQ3ICA4NyAgMDEgIGZlICA5NiAgMDAgIDA4ICAwMSAgMDAgIGNiICAwMCAgMDAgIDAwICA0MCAgMDAKLUVDIDB4MTA6ICAwMCAgMDAgIGZmICBmZiAgZjQgIDNjICA4NyAgMDkgIDAxICBmZiAgNDIgIDAxICBmZiAgZmYgIDBkICAwMAotRUMgMHgyMDogIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDMgIDQzICAwMCAgMDAgIDgwCi1FQyAweDMwOiAgMDEgIDA3ICAxYSAgMDAgIDMwICAwNCAgMDAgIDAwICA4NSAgMDAgIDAwICAxMCAgMDAgIDUwICAwMCAgMDAKLUVDIDB4NDA6ICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAxNCAgMDEgIDAwICAwNCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMAotRUMgMHg1MDogIDAwICBjMCAgMDIgIDBkICAwMCAgMDEgIDAxICAwMiAgMDIgIDAzICAwMyAgMDMgIDAzICBiYyAgMDIgIGJjCi1FQyAweDYwOiAgMDIgIGJjICAwMiAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAKLUVDIDB4NzA6ICAwMCAgMDAgIDAwICAwMCAgMDAgIDEyICAzMCAgNDAgIDI0ICAyNyAgMmMgIDI3ICAyMSAgODAgIDFmICA4MAotRUMgMHg4MDogIDAwICAwMCAgMDAgIDA2ICpiZSAgMGQgIDAzICAwMCAgMDAgIDAwICAwZSAgMDcgIDAwICAwMCAgMDAgIDAwCi1FQyAweDkwOiAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAKLUVDIDB4YTA6ICBmZiAgMDkgIGZmICAwOSAgZmYgIGZmICA2NCAgMDAgIDAwICAwMCAgYTIgIDQxICBmZiAgZmYgIGUwICAwMAotRUMgMHhiMDogIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwCi1FQyAweGMwOiAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAKLUVDIDB4ZDA6ICAwMyAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMAotRUMgMHhlMDogIDAwICAwMCAgMDAgIDAwICAwMCAgMDAgIDAwICAwMCAgMTEgIDIwICA0OSAgMDQgIDI0ICAwNiAgNTUgIDAzCi1FQyAweGYwOiAgMzEgIDU1ICA0OCAgNTQgIDM1ICAzOCAgNTcgIDU3ICAwOCAgMmYgIDQ1ICA3MyAgMDcgIDY1ICA2YyAgMWEKLQotQW5vdGhlciBzZXQgb2YgdmFsdWVzIHRoYXQgdmFyaWVzIG9mdGVuIGlzIHRoZSB0ZW1wZXJhdHVyZQorT2Z0ZW4gZmFuIGFuZCB0ZW1wZXJhdHVyZSB2YWx1ZXMgdmFyeSBiZXR3ZWVuCiByZWFkaW5ncy4gU2luY2UgdGVtcGVyYXR1cmVzIGRvbid0IGNoYW5nZSB2YXJ5IGZhc3QsIHlvdSBjYW4gdGFrZQogc2V2ZXJhbCBxdWljayBkdW1wcyB0byBlbGltaW5hdGUgdGhlbS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sZG0udHh0IGIvRG9jdW1lbnRhdGlvbi9sZG0udHh0CmluZGV4IDcxODA4NWIuLjRmODBlZGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGRtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2xkbS50eHQKQEAgLTk4LDcgKzk4LDcgQEAKIFRoZXJlIGlzIGFuIE92ZXJ2aWV3IG9mIHRoZSBMRE0gdG9nZXRoZXIgd2l0aCBjb21wbGV0ZSBUZWNobmljYWwgRG9jdW1lbnRhdGlvbi4KIEl0IGlzIGF2YWlsYWJsZSBmb3IgZG93bmxvYWQuCiAKLSAgaHR0cDovL3d3dy5saW51eC1udGZzLm9yZy9jb250ZW50L3ZpZXcvMTkvMzcvCisgIGh0dHA6Ly93d3cubGludXgtbnRmcy5vcmcvCiAKIElmIHlvdSBoYXZlIGFueSBMRE0gcXVlc3Rpb25zIHRoYXQgYXJlbid0IGFuc3dlcmVkIGluIHRoZSBkb2N1bWVudGF0aW9uLCBlbWFpbAogbWUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21kLnR4dCBiL0RvY3VtZW50YXRpb24vbWQudHh0CmluZGV4IGU0ZTg5M2UuLmE4MWM3YjQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbWQudHh0CkBAIC0xLDUgKzEsNSBAQAogVG9vbHMgdGhhdCBtYW5hZ2UgbWQgZGV2aWNlcyBjYW4gYmUgZm91bmQgYXQKLSAgIGh0dHA6Ly93d3cuPGNvdW50cnk+Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL3JhaWQvLi4uLgorICAgaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9yYWlkLyAKIAogCiBCb290IHRpbWUgYXNzZW1ibHkgb2YgUkFJRCBhcnJheXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWlzYy1kZXZpY2VzL2MycG9ydC50eHQgYi9Eb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9jMnBvcnQudHh0CmluZGV4IGQ5YmY5M2UuLmVhNzM0NDQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWlzYy1kZXZpY2VzL2MycG9ydC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9taXNjLWRldmljZXMvYzJwb3J0LnR4dApAQCAtMzIsMTAgKzMyLDEwIEBACiBTaWxpY29uIExhYm9yYXRvcmllcyBzaXRlXSwgc2VlOgogCiAtIEFOMTI3OiBGTEFTSCBQcm9ncmFtbWluZyB2aWEgdGhlIEMyIEludGVyZmFjZSBhdAotaHR0cDovL3d3dy5zaWxhYnMuY29tL3B1YmxpYy9kb2N1bWVudHMvdHB1Yl9kb2MvYW5vdGUvTWljcm9jb250cm9sbGVycy9TbWFsbF9Gb3JtX0ZhY3Rvci9lbi9hbjEyNy5wZGYsIGFuZAoraHR0cDovL3d3dy5zaWxhYnMuY29tL1N1cHBvcnQgRG9jdW1lbnRzL1RlY2huaWNhbERvY3MvYW4xMjcucGRmIAogCiAtIEMyIFNwZWNpZmljYXRpb24gYXQKLWh0dHA6Ly93d3cuc2lsYWJzLmNvbS9wdWJsaWMvZG9jdW1lbnRzL3RwdWJfZG9jL3NwZWMvTWljcm9jb250cm9sbGVycy9lbi9DMnNwZWMucGRmLAoraHR0cDovL3d3dy5zaWxhYnMuY29tL3BhZ2VzL0Rvd25sb2FkRG9jLmFzcHg/RklMRVVSTD1TdXBwb3J0JTIwRG9jdW1lbnRzL1RlY2huaWNhbERvY3MvYW4xMjcucGRmJnNyYz1TZWFyY2hSZXN1bHRzCiAKIGhvd2V2ZXIgaXQgaW1wbGVtZW50cyBhIHR3byB3aXJlIHNlcmlhbCBjb21tdW5pY2F0aW9uIHByb3RvY29sIChiaXQKIGJhbmdpbmcpIGRlc2lnbmVkIHRvIGVuYWJsZSBpbi1zeXN0ZW0gcHJvZ3JhbW1pbmcsIGRlYnVnZ2luZywgYW5kCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL210ZC9uYW5kX2VjYy50eHQgYi9Eb2N1bWVudGF0aW9uL210ZC9uYW5kX2VjYy50eHQKaW5kZXggMjc0ODIxYi4uOTkwZWZkNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tdGQvbmFuZF9lY2MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbXRkL25hbmRfZWNjLnR4dApAQCAtOTEsNyArOTEsNyBAQAogRUNDIDIgICBjcDUgICBjcDQgICBjcDMgICBjcDIgICBjcDEgICBjcDAgICAgICAxICAgICAxCiAKIEkgZGV0ZWN0ZWQgYWZ0ZXIgd3JpdGluZyB0aGlzIHRoYXQgU1QgYXBwbGljYXRpb24gbm90ZSBBTjE4MjMKLShodHRwOi8vd3d3LnN0LmNvbS9zdG9ubGluZS9ib29rcy9wZGYvZG9jcy8xMDEyMy5wZGYpIGdpdmVzIGEgbXVjaAorKGh0dHA6Ly93d3cuc3QuY29tL3N0b25saW5lLykgZ2l2ZXMgYSBtdWNoCiBuaWNlciBwaWN0dXJlLihidXQgdGhleSB1c2UgbGluZSBwYXJpdHkgYXMgdGVybSB3aGVyZSBJIHVzZSByb3cgcGFyaXR5KQogT2ggd2VsbCwgSSdtIGdyYXBoaWNhbGx5IGNoYWxsZW5nZWQsIHNvIHN1ZmZlciB3aXRoIG1lIGZvciBhIG1vbWVudCA6LSkKIEFuZCBJIGNvdWxkIG5vdCByZXVzZSB0aGUgU1QgcGljdHVyZSBhbnl3YXkgZm9yIGNvcHlyaWdodCByZWFzb25zLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzNjNTA5LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8zYzUwOS50eHQKaW5kZXggM2M0NWQ1ZC4uZGNjOWVhZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzNjNTA5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvM2M1MDkudHh0CkBAIC0zMSw3ICszMSw3IEBACiBMYXJnZSBwb3J0aW9ucyBvZiB0aGlzIGRvY3VtZW50YXRpb24gd2VyZSBoZWF2aWx5IGJvcnJvd2VkIGZyb20gdGhlIGd1aWRlCiB3cml0dGVuIHRoZSBvcmlnaW5hbCBhdXRob3Igb2YgdGhlIDNjNTA5IGRyaXZlciwgRG9uYWxkIEJlY2tlci4gVGhlIG1hc3RlcgogY29weSBvZiB0aGF0IGRvY3VtZW50LCB3aGljaCBjb250YWlucyBub3RlcyBvbiBvbGRlciB2ZXJzaW9ucyBvZiB0aGUgZHJpdmVyLAotY3VycmVudGx5IHJlc2lkZXMgb24gU2N5bGQgd2ViIHNlcnZlcjogaHR0cDovL3d3dy5zY3lsZC5jb20vbmV0d29yay8zYzUwOS5odG1sLgorY3VycmVudGx5IHJlc2lkZXMgb24gU2N5bGQgd2ViIHNlcnZlcjogaHR0cDovL3d3dy5zY3lsZC5jb20vLgogCiAKICgxKSBTcGVjaWFsIERyaXZlciBGZWF0dXJlcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5pcHcyMTAwIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5pcHcyMTAwCmluZGV4IGYzZmNhYTQuLjZmODVlMWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9SRUFETUUuaXB3MjEwMAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvUkVBRE1FLmlwdzIxMDAKQEAgLTcyLDggKzcyLDcgQEAKIHNvbHV0aW9uIGludGVuZGVkIHRvIGJlIHVzZWQgZm9yIHB1cnBvc2VzIG90aGVyIHRoYW4gZGV2ZWxvcG1lbnQsIHBsZWFzZQogb2J0YWluIGEgdGVzdGVkIGRyaXZlciBmcm9tIEludGVsIEN1c3RvbWVyIFN1cHBvcnQgYXQ6CiAKLWh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbS9zdXBwb3J0L25vdGVib29rL3NiL0NTLTAwNjQwOC5odG0KLQoraHR0cDovL3d3dy5pbnRlbC5jb20vc3VwcG9ydC93aXJlbGVzcy9zYi9DUy0wMDY0MDguaHRtCiAKIDEuIEludHJvZHVjdGlvbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9SRUFETUUuaXB3MjIwMCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9SRUFETUUuaXB3MjIwMAppbmRleCA4MGM3Mjg1Li42MTZhOGU1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvUkVBRE1FLmlwdzIyMDAKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5pcHcyMjAwCkBAIC04NSw3ICs4NSw3IEBACiBzb2x1dGlvbiBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciBwdXJwb3NlcyBvdGhlciB0aGFuIGRldmVsb3BtZW50LCBwbGVhc2UgCiBvYnRhaW4gYSB0ZXN0ZWQgZHJpdmVyIGZyb20gSW50ZWwgQ3VzdG9tZXIgU3VwcG9ydCBhdDoKIAotaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tL3N1cHBvcnQvbm90ZWJvb2svc2IvQ1MtMDA2NDA4Lmh0bQoraHR0cDovL3N1cHBvcnQuaW50ZWwuY29tCiAKIAogMS4gICBJbnRyb2R1Y3Rpb24KQEAgLTE3MSw3ICsxNzEsNyBAQAogICAKICAgbGVkCiAJQ2FuIGJlIHVzZWQgdG8gdHVybiBvbiBleHBlcmltZW50YWwgTEVEIGNvZGUuCi0JMCA9IE9mZiwgMSA9IE9uLiAgRGVmYXVsdCBpcyAwLgorCTAgPSBPZmYsIDEgPSBPbi4gIERlZmF1bHQgaXMgMS4KIAogICBtb2RlCiAJQ2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBkZWZhdWx0IG1vZGUgb2YgdGhlIGFkYXB0ZXIuICAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9SRUFETUUuc2IxMDAwIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5zYjEwMDAKaW5kZXggZjgyZDQyNS4uZjkyYzJhYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5zYjEwMDAKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5zYjEwMDAKQEAgLTI3LDggKzI3LDggQEAKICAgIGluIEZyYW5jbydzIG9yaWdpbmFsIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbiAudGFyLmd6IGZpbGUuICBTdXBwb3J0IGZvcgogICAgdGhlIHNiMTAwMCBkcml2ZXIgY2FuIGJlIGZvdW5kIGF0OgogCi0gICAgICBodHRwOi8vaG9tZS5hZGVscGhpYS5uZXQvfnNpZ2xlcmNtL3NiMTAwMC5odG1sCi0gICAgICBodHRwOi8vbGludXhwb3dlci5jeC9+Y2FibGUvCisgICAgICBodHRwOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8qL2h0dHA6Ly9ob21lLmFkZWxwaGlhLm5ldC9+c2lnbGVyY20vc2IxMDAwLmh0bWwKKyAgICAgIGh0dHA6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLyovaHR0cDovL2xpbnV4cG93ZXIuY3gvfmNhYmxlLwogCiAgICBhbG9uZyB3aXRoIHRoZXNlIHV0aWxpdGllcy4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FyY25ldC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXJjbmV0LnR4dAppbmRleCA3OTYwMTI1Li45ZmY1Nzk1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXJjbmV0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXJjbmV0LnR4dApAQCAtNjgsNyArNjgsNyBAQAogbGlzdCwgbWFpbCB0byBsaW51eC1hcmNuZXRAdGljaHkuY2gudWouZWR1LnBsLgogCiBUaGVyZSBhcmUgYXJjaGl2ZXMgb2YgdGhlIG1haWxpbmcgbGlzdCBhdDoKLQlodHRwOi8vdGljaHkuY2gudWouZWR1LnBsL2xpc3RzL2xpbnV4LWFyY25ldAorCWh0dHA6Ly9lcGlzdG9sYXJ5Lm9yZy9tYWlsbWFuL2xpc3RpbmZvLmNnaS9hcmNuZXQKIAogVGhlIHBlb3BsZSBvbiBsaW51eC1uZXRAdmdlci5rZXJuZWwub3JnIGhhdmUgYWxzbyBiZWVuIGtub3duIHRvIGJlIHZlcnkKIGhlbHBmdWwsIGVzcGVjaWFsbHkgd2hlbiB3ZSdyZSB0YWxraW5nIGFib3V0IEFMUEhBIExpbnV4IGtlcm5lbHMgdGhhdCBtYXkgb3IKQEAgLTc5LDcgKzc5LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogWW91IGNhbiB0cnkgbXkgQVJDTkVUIHBhZ2Ugb24gdGhlIFdvcmxkIFdpZGUgV2ViIGF0OgotCWh0dHA6Ly93d3cud29ybGR2aXNpb25zLmNhL35hcGVud2Fyci9hcmNuZXQvCisJaHR0cDovL3d3dy5xaXMubmV0L35qc2NobWl0ei9hcmNuZXQvCQogCiBBbHNvLCBTTUMgKG9uZSBvZiB0aGUgY29tcGFuaWVzIHRoYXQgbWFrZXMgQVJDbmV0IGNhcmRzKSBoYXMgYSBXV1cgc2l0ZSB5b3UKIG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4sIHdoaWNoIGluY2x1ZGVzIHNldmVyYWwgZHJpdmVycyBmb3IgdmFyaW91cyBjYXJkcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0CmluZGV4IDYxZjUxNmIuLmQyYjYyYjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQKQEAgLTQ5LDYgKzQ5LDcgQEAKIDMuMwlDb25maWd1cmluZyBCb25kaW5nIE1hbnVhbGx5IHdpdGggSWZlbnNsYXZlCiAzLjMuMQkJQ29uZmlndXJpbmcgTXVsdGlwbGUgQm9uZHMgTWFudWFsbHkKIDMuNAlDb25maWd1cmluZyBCb25kaW5nIE1hbnVhbGx5IHZpYSBTeXNmcworMy41CU92ZXJyaWRpbmcgQ29uZmlndXJhdGlvbiBmb3IgU3BlY2lhbCBDYXNlcwogCiA0LiBRdWVyeWluZyBCb25kaW5nIENvbmZpZ3VyYXRpb24KIDQuMQlCb25kaW5nIENvbmZpZ3VyYXRpb24KQEAgLTEzMTgsOCArMTMxOSw4NyBAQAogZWNobyArZXRoMiA+IC9zeXMvY2xhc3MvbmV0L2JvbmQxL2JvbmRpbmcvc2xhdmVzCiBlY2hvICtldGgzID4gL3N5cy9jbGFzcy9uZXQvYm9uZDEvYm9uZGluZy9zbGF2ZXMKIAorMy41IE92ZXJyaWRpbmcgQ29uZmlndXJhdGlvbiBmb3IgU3BlY2lhbCBDYXNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorV2hlbiB1c2luZyB0aGUgYm9uZGluZyBkcml2ZXIsIHRoZSBwaHlzaWNhbCBwb3J0IHdoaWNoIHRyYW5zbWl0cyBhIGZyYW1lIGlzCit0eXBpY2FsbHkgc2VsZWN0ZWQgYnkgdGhlIGJvbmRpbmcgZHJpdmVyLCBhbmQgaXMgbm90IHJlbGV2YW50IHRvIHRoZSB1c2VyIG9yCitzeXN0ZW0gYWRtaW5pc3RyYXRvci4gIFRoZSBvdXRwdXQgcG9ydCBpcyBzaW1wbHkgc2VsZWN0ZWQgdXNpbmcgdGhlIHBvbGljaWVzIG9mCit0aGUgc2VsZWN0ZWQgYm9uZGluZyBtb2RlLiAgT24gb2NjYXNpb24gaG93ZXZlciwgaXQgaXMgaGVscGZ1bCB0byBkaXJlY3QgY2VydGFpbgorY2xhc3NlcyBvZiB0cmFmZmljIHRvIGNlcnRhaW4gcGh5c2ljYWwgaW50ZXJmYWNlcyBvbiBvdXRwdXQgdG8gaW1wbGVtZW50CitzbGlnaHRseSBtb3JlIGNvbXBsZXggcG9saWNpZXMuICBGb3IgZXhhbXBsZSwgdG8gcmVhY2ggYSB3ZWIgc2VydmVyIG92ZXIgYQorYm9uZGVkIGludGVyZmFjZSBpbiB3aGljaCBldGgwIGNvbm5lY3RzIHRvIGEgcHJpdmF0ZSBuZXR3b3JrLCB3aGlsZSBldGgxCitjb25uZWN0cyB2aWEgYSBwdWJsaWMgbmV0d29yaywgaXQgbWF5IGJlIGRlc2lyb3VzIHRvIGJpYXMgdGhlIGJvbmQgdG8gc2VuZCBzYWlkCit0cmFmZmljIG92ZXIgZXRoMCBmaXJzdCwgdXNpbmcgZXRoMSBvbmx5IGFzIGEgZmFsbCBiYWNrLCB3aGlsZSBhbGwgb3RoZXIgdHJhZmZpYworY2FuIHNhZmVseSBiZSBzZW50IG92ZXIgZWl0aGVyIGludGVyZmFjZS4gIFN1Y2ggY29uZmlndXJhdGlvbnMgbWF5IGJlIGFjaGlldmVkCit1c2luZyB0aGUgdHJhZmZpYyBjb250cm9sIHV0aWxpdGllcyBpbmhlcmVudCBpbiBsaW51eC4KIAotNC4gUXVlcnlpbmcgQm9uZGluZyBDb25maWd1cmF0aW9uIAorQnkgZGVmYXVsdCB0aGUgYm9uZGluZyBkcml2ZXIgaXMgbXVsdGlxdWV1ZSBhd2FyZSBhbmQgMTYgcXVldWVzIGFyZSBjcmVhdGVkCit3aGVuIHRoZSBkcml2ZXIgaW5pdGlhbGl6ZXMgKHNlZSBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbXVsdGlxdWV1ZS50eHQKK2ZvciBkZXRhaWxzKS4gIElmIG1vcmUgb3IgbGVzcyBxdWV1ZXMgYXJlIGRlc2lyZWQgdGhlIG1vZHVsZSBwYXJhbWV0ZXIKK3R4X3F1ZXVlcyBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhpcyB2YWx1ZS4gIFRoZXJlIGlzIG5vIHN5c2ZzIHBhcmFtZXRlcgorYXZhaWxhYmxlIGFzIHRoZSBhbGxvY2F0aW9uIGlzIGRvbmUgYXQgbW9kdWxlIGluaXQgdGltZS4KKworVGhlIG91dHB1dCBvZiB0aGUgZmlsZSAvcHJvYy9uZXQvYm9uZGluZy9ib25kWCBoYXMgY2hhbmdlZCBzbyB0aGUgb3V0cHV0IFF1ZXVlCitJRCBpcyBub3cgcHJpbnRlZCBmb3IgZWFjaCBzbGF2ZToKKworQm9uZGluZyBNb2RlOiBmYXVsdC10b2xlcmFuY2UgKGFjdGl2ZS1iYWNrdXApCitQcmltYXJ5IFNsYXZlOiBOb25lCitDdXJyZW50bHkgQWN0aXZlIFNsYXZlOiBldGgwCitNSUkgU3RhdHVzOiB1cAorTUlJIFBvbGxpbmcgSW50ZXJ2YWwgKG1zKTogMAorVXAgRGVsYXkgKG1zKTogMAorRG93biBEZWxheSAobXMpOiAwCisKK1NsYXZlIEludGVyZmFjZTogZXRoMAorTUlJIFN0YXR1czogdXAKK0xpbmsgRmFpbHVyZSBDb3VudDogMAorUGVybWFuZW50IEhXIGFkZHI6IDAwOjFhOmEwOjEyOjhmOmNiCitTbGF2ZSBxdWV1ZSBJRDogMAorCitTbGF2ZSBJbnRlcmZhY2U6IGV0aDEKK01JSSBTdGF0dXM6IHVwCitMaW5rIEZhaWx1cmUgQ291bnQ6IDAKK1Blcm1hbmVudCBIVyBhZGRyOiAwMDoxYTphMDoxMjo4ZjpjYworU2xhdmUgcXVldWUgSUQ6IDIKKworVGhlIHF1ZXVlX2lkIGZvciBhIHNsYXZlIGNhbiBiZSBzZXQgdXNpbmcgdGhlIGNvbW1hbmQ6CisKKyMgZWNobyAiZXRoMToyIiA+IC9zeXMvY2xhc3MvbmV0L2JvbmQwL2JvbmRpbmcvcXVldWVfaWQKKworQW55IGludGVyZmFjZSB0aGF0IG5lZWRzIGEgcXVldWVfaWQgc2V0IHNob3VsZCBzZXQgaXQgd2l0aCBtdWx0aXBsZSBjYWxscworbGlrZSB0aGUgb25lIGFib3ZlIHVudGlsIHByb3BlciBwcmlvcml0aWVzIGFyZSBzZXQgZm9yIGFsbCBpbnRlcmZhY2VzLiAgT24KK2Rpc3RyaWJ1dGlvbnMgdGhhdCBhbGxvdyBjb25maWd1cmF0aW9uIHZpYSBpbml0c2NyaXB0cywgbXVsdGlwbGUgJ3F1ZXVlX2lkJworYXJndW1lbnRzIGNhbiBiZSBhZGRlZCB0byBCT05ESU5HX09QVFMgdG8gc2V0IGFsbCBuZWVkZWQgc2xhdmUgcXVldWVzLgorCitUaGVzZSBxdWV1ZSBpZCdzIGNhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHRjIHV0aWxpdHkgdG8gY29uZmlndXJlCithIG11bHRpcXVldWUgcWRpc2MgYW5kIGZpbHRlcnMgdG8gYmlhcyBjZXJ0YWluIHRyYWZmaWMgdG8gdHJhbnNtaXQgb24gY2VydGFpbgorc2xhdmUgZGV2aWNlcy4gIEZvciBpbnN0YW5jZSwgc2F5IHdlIHdhbnRlZCwgaW4gdGhlIGFib3ZlIGNvbmZpZ3VyYXRpb24gdG8KK2ZvcmNlIGFsbCB0cmFmZmljIGJvdW5kIHRvIDE5Mi4xNjguMS4xMDAgdG8gdXNlIGV0aDEgaW4gdGhlIGJvbmQgYXMgaXRzIG91dHB1dAorZGV2aWNlLiBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIHdvdWxkIGFjY29tcGxpc2ggdGhpczoKKworIyB0YyBxZGlzYyBhZGQgZGV2IGJvbmQwIGhhbmRsZSAxIHJvb3QgbXVsdGlxCisKKyMgdGMgZmlsdGVyIGFkZCBkZXYgYm9uZDAgcHJvdG9jb2wgaXAgcGFyZW50IDE6IHByaW8gMSB1MzIgbWF0Y2ggaXAgZHN0IFwKKwkxOTIuMTY4LjEuMTAwIGFjdGlvbiBza2JlZGl0IHF1ZXVlX21hcHBpbmcgMgorCitUaGVzZSBjb21tYW5kcyB0ZWxsIHRoZSBrZXJuZWwgdG8gYXR0YWNoIGEgbXVsdGlxdWV1ZSBxdWV1ZSBkaXNjaXBsaW5lIHRvIHRoZQorYm9uZDAgaW50ZXJmYWNlIGFuZCBmaWx0ZXIgdHJhZmZpYyBlbnF1ZXVlZCB0byBpdCwgc3VjaCB0aGF0IHBhY2tldHMgd2l0aCBhIGRzdAoraXAgb2YgMTkyLjE2OC4xLjEwMCBoYXZlIHRoZWlyIG91dHB1dCBxdWV1ZSBtYXBwaW5nIHZhbHVlIG92ZXJ3cml0dGVuIHRvIDIuCitUaGlzIHZhbHVlIGlzIHRoZW4gcGFzc2VkIGludG8gdGhlIGRyaXZlciwgY2F1c2luZyB0aGUgbm9ybWFsIG91dHB1dCBwYXRoCitzZWxlY3Rpb24gcG9saWN5IHRvIGJlIG92ZXJyaWRkZW4sIHNlbGVjdGluZyBpbnN0ZWFkIHFpZCAyLCB3aGljaCBtYXBzIHRvIGV0aDEuCisKK05vdGUgdGhhdCBxaWQgdmFsdWVzIGJlZ2luIGF0IDEuICBRaWQgMCBpcyByZXNlcnZlZCB0byBpbml0aWF0ZSB0byB0aGUgZHJpdmVyCit0aGF0IG5vcm1hbCBvdXRwdXQgcG9saWN5IHNlbGVjdGlvbiBzaG91bGQgdGFrZSBwbGFjZS4gIE9uZSBiZW5lZml0IHRvIHNpbXBseQorbGVhdmluZyB0aGUgcWlkIGZvciBhIHNsYXZlIHRvIDAgaXMgdGhlIG11bHRpcXVldWUgYXdhcmVuZXNzIGluIHRoZSBib25kaW5nCitkcml2ZXIgdGhhdCBpcyBub3cgcHJlc2VudC4gIFRoaXMgYXdhcmVuZXNzIGFsbG93cyB0YyBmaWx0ZXJzIHRvIGJlIHBsYWNlZCBvbgorc2xhdmUgZGV2aWNlcyBhcyB3ZWxsIGFzIGJvbmQgZGV2aWNlcyBhbmQgdGhlIGJvbmRpbmcgZHJpdmVyIHdpbGwgc2ltcGx5IGFjdCBhcworYSBwYXNzLXRocm91Z2ggZm9yIHNlbGVjdGluZyBvdXRwdXQgcXVldWVzIG9uIHRoZSBzbGF2ZSBkZXZpY2UgcmF0aGVyIHRoYW4gCitvdXRwdXQgcG9ydCBzZWxlY3Rpb24uCisKK1RoaXMgZmVhdHVyZSBmaXJzdCBhcHBlYXJlZCBpbiBib25kaW5nIGRyaXZlciB2ZXJzaW9uIDMuNy4wIGFuZCBzdXBwb3J0IGZvcgorb3V0cHV0IHNsYXZlIHNlbGVjdGlvbiB3YXMgbGltaXRlZCB0byByb3VuZC1yb2JpbiBhbmQgYWN0aXZlLWJhY2t1cCBtb2Rlcy4KKworNCBRdWVyeWluZyBCb25kaW5nIENvbmZpZ3VyYXRpb24KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiA0LjEgQm9uZGluZyBDb25maWd1cmF0aW9uCkBAIC0yNDMyLDcgKzI1MTIsNyBAQAogaHR0cHM6Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vYm9uZGluZy1kZXZlbAogCiBEb25hbGQgQmVja2VyJ3MgRXRoZXJuZXQgRHJpdmVycyBhbmQgZGlhZyBwcm9ncmFtcyBtYXkgYmUgZm91bmQgYXQgOgotIC0gaHR0cDovL3d3dy5zY3lsZC5jb20vbmV0d29yay8KKyAtIGh0dHA6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLyovaHR0cDovL3d3dy5zY3lsZC5jb20vbmV0d29yay8gCiAKIFlvdSB3aWxsIGFsc28gZmluZCBhIGxvdCBvZiBpbmZvcm1hdGlvbiByZWdhcmRpbmcgRXRoZXJuZXQsIE5XYXksIE1JSSwKIGV0Yy4gYXQgd3d3LnNjeWxkLmNvbS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jYWlmL3NwaV9wb3J0aW5nLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jYWlmL3NwaV9wb3J0aW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWQ3YzkyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2NhaWYvc3BpX3BvcnRpbmcudHh0CkBAIC0wLDAgKzEsMjA4IEBACistIENBSUYgU1BJIHBvcnRpbmcgLQorCistIENBSUYgU1BJIGJhc2ljczoKKworUnVubmluZyBDQUlGIG92ZXIgU1BJIG5lZWRzIHNvbWUgZXh0cmEgc2V0dXAsIG93aW5nIHRvIHRoZSBuYXR1cmUgb2YgU1BJLgorVHdvIGV4dHJhIEdQSU9zIGhhdmUgYmVlbiBhZGRlZCBpbiBvcmRlciB0byBuZWdvdGlhdGUgdGhlIHRyYW5zZmVycworIGJldHdlZW4gdGhlIG1hc3RlciBhbmQgdGhlIHNsYXZlLiBUaGUgbWluaW11bSByZXF1aXJlbWVudCBmb3IgcnVubmluZworQ0FJRiBvdmVyIFNQSSBpcyBhIFNQSSBzbGF2ZSBjaGlwIGFuZCB0d28gR1BJT3MgKG1vcmUgZGV0YWlscyBiZWxvdykuCitQbGVhc2Ugbm90ZSB0aGF0IHJ1bm5pbmcgYXMgYSBzbGF2ZSBpbXBsaWVzIHRoYXQgeW91IG5lZWQgdG8ga2VlcCB1cAord2l0aCB0aGUgbWFzdGVyIGNsb2NrLiBBbiBvdmVycnVuIG9yIHVuZGVycnVuIGV2ZW50IGlzIGZhdGFsLgorCistIENBSUYgU1BJIGZyYW1ld29yazoKKworVG8gbWFrZSBwb3J0aW5nIGFzIGVhc3kgYXMgcG9zc2libGUsIHRoZSBDQUlGIFNQSSBoYXMgYmVlbiBkaXZpZGVkIGluCit0d28gcGFydHMuIFRoZSBmaXJzdCBwYXJ0IChjYWxsZWQgdGhlIGludGVyZmFjZSBwYXJ0KSBkZWFscyB3aXRoIGFsbAorZ2VuZXJpYyBmdW5jdGlvbmFsaXR5IHN1Y2ggYXMgbGVuZ3RoIGZyYW1pbmcsIFNQSSBmcmFtZSBuZWdvdGlhdGlvbgorYW5kIFNQSSBmcmFtZSBkZWxpdmVyeSBhbmQgdHJhbnNtaXNzaW9uLiBUaGUgb3RoZXIgcGFydCBpcyB0aGUgQ0FJRgorU1BJIHNsYXZlIGRldmljZSBwYXJ0LCB3aGljaCBpcyB0aGUgbW9kdWxlIHRoYXQgeW91IGhhdmUgdG8gd3JpdGUgaWYKK3lvdSB3YW50IHRvIHJ1biBTUEkgQ0FJRiBvbiBhIG5ldyBoYXJkd2FyZS4gVGhpcyBwYXJ0IHRha2VzIGNhcmUgb2YKK3RoZSBwaHlzaWNhbCBoYXJkd2FyZSwgYm90aCB3aXRoIHJlZ2FyZCB0byBTUEkgYW5kIHRvIEdQSU9zLgorCistIEltcGxlbWVudGluZyBhIENBSUYgU1BJIGRldmljZToKKworCS0gRnVuY3Rpb25hbGl0eSBwcm92aWRlZCBieSB0aGUgQ0FJRiBTUEkgc2xhdmUgZGV2aWNlOgorCisJSW4gb3JkZXIgdG8gaW1wbGVtZW50IGEgU1BJIGRldmljZSB5b3Ugd2lsbCwgYXMgYSBtaW5pbXVtLAorCW5lZWQgdG8gaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcKKwlmdW5jdGlvbnM6CisKKwlpbnQgKCppbml0X3hmZXIpIChzdHJ1Y3QgY2ZzcGlfeGZlciAqIHhmZXIsIHN0cnVjdCBjZnNwaV9kZXYgKmRldik6CisKKwlUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgQ0FJRiBTUEkgaW50ZXJmYWNlIHRvIGdpdmUKKwl5b3UgYSBjaGFuY2UgdG8gc2V0IHVwIHlvdXIgaGFyZHdhcmUgdG8gYmUgcmVhZHkgdG8gcmVjZWl2ZQorCWEgc3RyZWFtIG9mIGRhdGEgZnJvbSB0aGUgbWFzdGVyLiBUaGUgeGZlciBzdHJ1Y3R1cmUgY29udGFpbnMKKwlib3RoIHBoeXNpY2FsIGFuZCBsb2dpY2FsIGFkcmVzc2VzLCBhcyB3ZWxsIGFzIHRoZSB0b3RhbCBsZW5ndGgKKwlvZiB0aGUgdHJhbnNmZXIgaW4gYm90aCBkaXJlY3Rpb25zLlRoZSBkZXYgcGFyYW1ldGVyIGNhbiBiZSB1c2VkCisJdG8gbWFwIHRvIGRpZmZlcmVudCBDQUlGIFNQSSBzbGF2ZSBkZXZpY2VzLgorCisJdm9pZCAoKnNpZ194ZmVyKSAoYm9vbCB4ZmVyLCBzdHJ1Y3QgY2ZzcGlfZGV2ICpkZXYpOgorCisJVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIENBSUYgU1BJIGludGVyZmFjZSB3aGVuIHRoZSBvdXRwdXQKKwkoU1BJX0lOVCkgR1BJTyBuZWVkcyB0byBjaGFuZ2Ugc3RhdGUuIFRoZSBib29sZWFuIHZhbHVlIG9mIHRoZSB4ZmVyCisJdmFyaWFibGUgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIEdQSU8gc2hvdWxkIGJlIGFzc2VydGVkIChISUdIKSBvcgorCWRlYXNzZXJ0ZWQgKExPVykuIFRoZSBkZXYgcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIG1hcCB0byBkaWZmZXJlbnQgQ0FJRgorCVNQSSBzbGF2ZSBkZXZpY2VzLgorCisJLSBGdW5jdGlvbmFsaXR5IHByb3ZpZGVkIGJ5IHRoZSBDQUlGIFNQSSBpbnRlcmZhY2U6CisKKwl2b2lkICgqc3NfY2IpIChib29sIGFzc2VydCwgc3RydWN0IGNmc3BpX2lmYyAqaWZjKTsKKworCVRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBDQUlGIFNQSSBzbGF2ZSBkZXZpY2UgaW4gb3JkZXIgdG8KKwlzaWduYWwgYSBjaGFuZ2Ugb2Ygc3RhdGUgb2YgdGhlIGlucHV0IEdQSU8gKFNTKSB0byB0aGUgaW50ZXJmYWNlLgorCU9ubHkgYWN0aXZlIGVkZ2VzIGFyZSBtYW5kYXRvcnkgdG8gYmUgcmVwb3J0ZWQuCisJVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGZyb20gSVJRIGNvbnRleHQgKHJlY29tbWVuZGVkIGluIG9yZGVyCisJbm90IHRvIGludHJvZHVjZSBsYXRlbmN5KS4gVGhlIGlmYyBwYXJhbWV0ZXIgc2hvdWxkIGJlIHRoZSBwb2ludGVyCisJcmV0dXJuZWQgZnJvbSB0aGUgcGxhdGZvcm0gcHJvYmUgZnVuY3Rpb24gaW4gdGhlIFNQSSBkZXZpY2Ugc3RydWN0dXJlLgorCisJdm9pZCAoKnhmZXJfZG9uZV9jYikgKHN0cnVjdCBjZnNwaV9pZmMgKmlmYyk7CisKKwlUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgQ0FJRiBTUEkgc2xhdmUgZGV2aWNlIGluIG9yZGVyIHRvCisJcmVwb3J0IHRoYXQgYSB0cmFuc2ZlciBpcyBjb21wbGV0ZWQuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUKKwljYWxsZWQgb25jZSBib3RoIHRoZSB0cmFuc21pc3Npb24gYW5kIHRoZSByZWNlcHRpb24gYXJlIGNvbXBsZXRlZC4KKwlUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgZnJvbSBJUlEgY29udGV4dCAocmVjb21tZW5kZWQgaW4gb3JkZXIKKwlub3QgdG8gaW50cm9kdWNlIGxhdGVuY3kpLiBUaGUgaWZjIHBhcmFtZXRlciBzaG91bGQgYmUgdGhlIHBvaW50ZXIKKwlyZXR1cm5lZCBmcm9tIHRoZSBwbGF0Zm9ybSBwcm9iZSBmdW5jdGlvbiBpbiB0aGUgU1BJIGRldmljZSBzdHJ1Y3R1cmUuCisKKwktIENvbm5lY3RpbmcgdGhlIGJpdHMgYW5kIHBpZWNlczoKKworCQktIEZpbGxpbmcgaW4gdGhlIFNQSSBzbGF2ZSBkZXZpY2Ugc3RydWN0dXJlOgorCisJCUNvbm5lY3QgdGhlIG5lY2Vzc2FyeSBjYWxsYmFjayBmdW5jdGlvbnMuCisJCUluZGljYXRlIGNsb2NrIHNwZWVkICh1c2VkIHRvIGNhbGN1bGF0ZSB0b2dnbGUgZGVsYXlzKS4KKwkJQ2hvc2UgYSBzdWl0YWJsZSBuYW1lIChoZWxwcyBkZWJ1Z2dpbmcgaWYgeW91IHVzZSBzZXZlcmFsIENBSUYKKwkJU1BJIHNsYXZlIGRldmljZXMpLgorCQlBc3NpZ24geW91ciBwcml2YXRlIGRhdGEgKGNhbiBiZSB1c2VkIHRvIG1hcCB0byB5b3VyIHN0cnVjdHVyZSkuCisKKwkJLSBGaWxsaW5nIGluIHRoZSBTUEkgc2xhdmUgcGxhdGZvcm0gZGV2aWNlIHN0cnVjdHVyZToKKwkJQWRkIG5hbWUgb2YgZHJpdmVyIHRvIGNvbm5lY3QgdG8gKCJjZnNwaV9zc3BpIikuCisJCUFzc2lnbiB0aGUgU1BJIHNsYXZlIGRldmljZSBzdHJ1Y3R1cmUgYXMgcGxhdGZvcm0gZGF0YS4KKworLSBQYWRkaW5nOgorCitJbiBvcmRlciB0byBvcHRpbWl6ZSB0aHJvdWdocHV0LCBhIG51bWJlciBvZiBTUEkgcGFkZGluZyBvcHRpb25zIGFyZSBwcm92aWRlZC4KK1BhZGRpbmcgY2FuIGJlIGVuYWJsZWQgaW5kZXBlbmRlbnRseSBmb3IgdXBsaW5rIGFuZCBkb3dubGluayB0cmFuc2ZlcnMuCitQYWRkaW5nIGNhbiBiZSBlbmFibGVkIGZvciB0aGUgaGVhZCwgdGhlIHRhaWwgYW5kIGZvciB0aGUgdG90YWwgZnJhbWUgc2l6ZS4KK1RoZSBwYWRkaW5nIG5lZWRzIHRvIGJlIGNvcnJlY3RseSBjb25maWd1cmVkIG9uIGJvdGggc2lkZXMgb2YgdGhlIGxpbmsuCitUaGUgcGFkZGluZyBjYW4gYmUgY2hhbmdlZCB2aWEgbW9kdWxlIHBhcmFtZXRlcnMgaW4gY2ZzcGlfc3NwaS5jIG9yIHZpYQordGhlIHN5c2ZzIGRpcmVjdG9yeSBvZiB0aGUgY2ZzcGlfc3NwaSBkcml2ZXIgKGJlZm9yZSBkZXZpY2UgcmVnaXN0cmF0aW9uKS4KKworLSBDQUlGIFNQSSBkZXZpY2UgdGVtcGxhdGU6CisKKy8qCisgKglDb3B5cmlnaHQgKEMpIFNULUVyaWNzc29uIEFCIDIwMTAKKyAqCUF1dGhvcjogRGFuaWVsIE1hcnRlbnNzb24gLyBEYW5pZWwuTWFydGVuc3NvbkBzdGVyaWNzc29uLmNvbQorICoJTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxuZXQvY2FpZi9jYWlmX3NwaS5oPgorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0cnVjdCBzc3BpX3N0cnVjdCB7CisJc3RydWN0IGNmc3BpX2RldiBzZGV2OworCXN0cnVjdCBjZnNwaV94ZmVyICp4ZmVyOworfTsKKworc3RhdGljIHN0cnVjdCBzc3BpX3N0cnVjdCBzbGF2ZTsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNsYXZlX2RldmljZTsKKworc3RhdGljIGlycXJldHVybl90IHNzcGlfaXJxKGludCBpcnEsIHZvaWQgKmFyZykKK3sKKwkvKiBZb3Ugb25seSBuZWVkIHRvIHRyaWdnZXIgb24gYW4gZWRnZSB0byB0aGUgYWN0aXZlIHN0YXRlIG9mIHRoZQorCSAqIFNTIHNpZ25hbC4gT25jZSBhIGVkZ2UgaXMgZGV0ZWN0ZWQsIHRoZSBzc19jYigpIGZ1bmN0aW9uIHNob3VsZCBiZQorCSAqIGNhbGxlZCB3aXRoIHRoZSBwYXJhbWV0ZXIgYXNzZXJ0IHNldCB0byB0cnVlLiBJdCBpcyBPSworCSAqIChhbmQgZXZlbiBhZHZpc2VkKSB0byBjYWxsIHRoZSBzc19jYigpIGZ1bmN0aW9uIGluIElSUSBjb250ZXh0IGluCisJICogb3JkZXIgbm90IHRvIGFkZCBhbnkgZGVsYXkuICovCisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHNzcGlfY29tcGxldGUodm9pZCAqY29udGV4dCkKK3sKKwkvKiBOb3JtYWxseSB0aGUgRE1BIG9yIHRoZSBTUEkgZnJhbWV3b3JrIHdpbGwgY2FsbCB5b3UgYmFjaworCSAqIGluIHNvbWV0aGluZyBzaW1pbGFyIHRvIHRoaXMuIFRoZSBvbmx5IHRoaW5nIHlvdSBuZWVkIHRvCisJICogZG8gaXMgdG8gY2FsbCB0aGUgeGZlcl9kb25lX2NiKCkgZnVuY3Rpb24sIHByb3ZpZGluZyB0aGUgcG9pbnRlcgorCSAqIHRvIHRoZSBDQUlGIFNQSSBpbnRlcmZhY2UuIEl0IGlzIE9LIHRvIGNhbGwgdGhpcyBmdW5jdGlvbgorCSAqIGZyb20gSVJRIGNvbnRleHQuICovCit9CisKK3N0YXRpYyBpbnQgc3NwaV9pbml0X3hmZXIoc3RydWN0IGNmc3BpX3hmZXIgKnhmZXIsIHN0cnVjdCBjZnNwaV9kZXYgKmRldikKK3sKKwkvKiBTdG9yZSB0cmFuc2ZlciBpbmZvLiBGb3IgYSBub3JtYWwgaW1wbGVtZW50YXRpb24geW91IHNob3VsZAorCSAqIHNldCB1cCB5b3VyIERNQSBoZXJlIGFuZCBtYWtlIHN1cmUgdGhhdCB5b3UgYXJlIHJlYWR5IHRvCisJICogcmVjZWl2ZSB0aGUgZGF0YSBmcm9tIHRoZSBtYXN0ZXIgU1BJLiAqLworCisJc3RydWN0IHNzcGlfc3RydWN0ICpzc3BpID0gKHN0cnVjdCBzc3BpX3N0cnVjdCAqKWRldi0+cHJpdjsKKworCXNzcGktPnhmZXIgPSB4ZmVyOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc3NwaV9zaWdfeGZlcihib29sIHhmZXIsIHN0cnVjdCBjZnNwaV9kZXYgKmRldikKK3sKKwkvKiBJZiB4ZmVyIGlzIHRydWUgdGhlbiB5b3Ugc2hvdWxkIGFzc2VydCB0aGUgU1BJX0lOVCB0byBpbmRpY2F0ZSB0bworCSAqIHRoZSBtYXN0ZXIgdGhhdCB5b3UgYXJlIHJlYWR5IHRvIHJlY2lldmUgdGhlIGRhdGEgZnJvbSB0aGUgbWFzdGVyCisJICogU1BJLiBJZiB4ZmVyIGlzIGZhbHNlIHRoZW4geW91IHNob3VsZCBkZS1hc3NlcnQgU1BJX0lOVCB0byBpbmRpY2F0ZQorCSAqIHRoYXQgdGhlIHRyYW5zZmVyIGlzIGRvbmUuCisJICovCisKKwlzdHJ1Y3Qgc3NwaV9zdHJ1Y3QgKnNzcGkgPSAoc3RydWN0IHNzcGlfc3RydWN0ICopZGV2LT5wcml2OworfQorCitzdGF0aWMgdm9pZCBzc3BpX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCS8qCisJICogSGVyZSB5b3Ugc2hvdWxkIHJlbGVhc2UgeW91ciBTUEkgZGV2aWNlIHJlc291cmNlcy4KKwkgKi8KK30KKworc3RhdGljIGludCBfX2luaXQgc3NwaV9pbml0KHZvaWQpCit7CisJLyogSGVyZSB5b3Ugc2hvdWxkIGluaXRpYWxpemUgeW91ciBTUEkgZGV2aWNlIGJ5IHByb3ZpZGluZyB0aGUKKwkgKiBuZWNlc3NhcnkgZnVuY3Rpb25zLCBjbG9jayBzcGVlZCwgbmFtZSBhbmQgcHJpdmF0ZSBkYXRhLiBPbmNlCisJICogZG9uZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIGRldmljZSB3aXRoIHRoZQorCSAqIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigpIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuCisJICogd2l0aCB0aGUgQ0FJRiBTUEkgaW50ZXJmYWNlIGluaXRpYWxpemVkLiBUaGlzIGlzIHByb2JhYmx5IGFsc28KKwkgKiB0aGUgcGxhY2Ugd2hlcmUgeW91IHNob3VsZCBzZXQgdXAgeW91ciBHUElPcywgaW50ZXJydXB0cyBhbmQgU1BJCisJICogcmVzb3VyY2VzLiAqLworCisJaW50IHJlcyA9IDA7CisKKwkvKiBJbml0aWFsaXplIHNsYXZlIGRldmljZS4gKi8KKwlzbGF2ZS5zZGV2LmluaXRfeGZlciA9IHNzcGlfaW5pdF94ZmVyOworCXNsYXZlLnNkZXYuc2lnX3hmZXIgPSBzc3BpX3NpZ194ZmVyOworCXNsYXZlLnNkZXYuY2xrX21oeiA9IDEzOworCXNsYXZlLnNkZXYucHJpdiA9ICZzbGF2ZTsKKwlzbGF2ZS5zZGV2Lm5hbWUgPSAic3BpX3NzcGkiOworCXNsYXZlX2RldmljZS5kZXYucmVsZWFzZSA9IHNzcGlfcmVsZWFzZTsKKworCS8qIEluaXRpYWxpemUgcGxhdGZvcm0gZGV2aWNlLiAqLworCXNsYXZlX2RldmljZS5uYW1lID0gImNmc3BpX3NzcGkiOworCXNsYXZlX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9ICZzbGF2ZS5zZGV2OworCisJLyogUmVnaXN0ZXIgcGxhdGZvcm0gZGV2aWNlLiAqLworCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2xhdmVfZGV2aWNlKTsKKwlpZiAocmVzKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNzcGlfaW5pdDogZmFpbGVkIHRvIHJlZ2lzdGVyIGRldi5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc3NwaV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX2RlbCgmc2xhdmVfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQoc3NwaV9pbml0KTsKK21vZHVsZV9leGl0KHNzcGlfZXhpdCk7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGVjbmV0LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZWNuZXQudHh0CmluZGV4IGQ4OTY4OTUuLmUxMmE0OTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZWNuZXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZWNuZXQudHh0CkBAIC00LDcgKzQsNyBAQAogMSkgT3RoZXIgZG9jdW1lbnRhdGlvbi4uLi4KIAogICAgbyBQcm9qZWN0IEhvbWUgUGFnZXMKLSAgICAgICBodHRwOi8vd3d3LmNoeWd3eW4uY29tL0RFQ25ldC8gICAgICAgICAgICAgICAgICAgICAgLSBLZXJuZWwgaW5mbworICAgICAgIGh0dHA6Ly93d3cuY2h5Z3d5bi5jb20vICAgICAgICAgICAgICAgICAgICAgIAkgICAgLSBLZXJuZWwgaW5mbwogICAgICAgIGh0dHA6Ly9saW51eC1kZWNuZXQuc291cmNlZm9yZ2UubmV0LyAgICAgICAgICAgICAgICAtIFVzZXJsYW5kIHRvb2xzCiAgICAgICAgaHR0cDovL3d3dy5zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGludXgtZGVjbmV0LyAgIC0gU3RhdHVzIHBhZ2UKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2ZvcmUyMDBlLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9mb3JlMjAwZS50eHQKaW5kZXggYjFmMzM3Zi4uNmUwZDJhOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2ZvcmUyMDBlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZm9yZTIwMGUudHh0CkBAIC0zOSw3ICszOSw3IEBACiBGb3JlVGhvdWdodCBDRC1ST00gc3VwcGxpZWQgd2l0aCB5b3VyIGFkYXB0ZXIgYnkgRk9SRSBTeXN0ZW1zLgogCiBZb3UgY2FuIGFsc28gZ2V0IHRoZSBsYXRlc3QgZmlybXdhcmUgaW1hZ2VzIGZyb20gRk9SRSBTeXN0ZW1zIGF0Ci1odHRwOi8vd3d3LmZvcmUuY29tLiBSZWdpc3RlciBUQUNUaWNzIE9ubGluZSBhbmQgZ28gdG8KK2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRk9SRV9TeXN0ZW1zLiBSZWdpc3RlciBUQUNUaWNzIE9ubGluZSBhbmQgZ28gdG8KIHRoZSAnc29mdHdhcmUgdXBkYXRlcycgcGFnZXMuIFRoZSBmaXJtd2FyZSBiaW5hcmllcyBhcmUgcGFydCBvZgogdGhlIHZhcmlvdXMgRm9yZVRob3VnaHQgc29mdHdhcmUgZGlzdHJpYnV0aW9ucy4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dAppbmRleCBkMDUzNmI1Li5mMzUwYzY5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dApAQCAtOTAzLDcgKzkwMyw3IEBACiBhcnBfbm90aWZ5IC0gQk9PTEVBTgogCURlZmluZSBtb2RlIGZvciBub3RpZmljYXRpb24gb2YgYWRkcmVzcyBhbmQgZGV2aWNlIGNoYW5nZXMuCiAJMCAtIChkZWZhdWx0KTogZG8gbm90aGluZwotCTEgLSBHZW5lcmF0ZSBncmF0dWl0b3VzIGFycCByZXBsaWVzIHdoZW4gZGV2aWNlIGlzIGJyb3VnaHQgdXAKKwkxIC0gR2VuZXJhdGUgZ3JhdHVpdG91cyBhcnAgcmVxdWVzdHMgd2hlbiBkZXZpY2UgaXMgYnJvdWdodCB1cAogCSAgICBvciBoYXJkd2FyZSBhZGRyZXNzIGNoYW5nZXMuCiAKIGFycF9hY2NlcHQgLSBCT09MRUFOCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXBkZHAudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwZGRwLnR4dAppbmRleCA2NjFhNTU1Li5iYTVjMjE3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXBkZHAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcGRkcC50eHQKQEAgLTM2LDExICszNiw2IEBACiBCYXNpYyBpbnN0cnVjdGlvbnMgZm9yIHVzZXIgc3BhY2UgdG9vbHMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1UbyBlbmFibGUgQXBwbGVUYWxrLUlQIGRlY2Fwc3VsYXRpb24vZW5jYXBzdWxhdGlvbiB5b3Ugd2lsbCBuZWVkIHRoZSAKLXByb3BlciB0b29scy4gWW91IGNhbiBnZXQgdGhlIHRvb2xzIGZvciBkZWNhcHN1bGF0aW9uIGZyb20KLWh0dHA6Ly9zcGFjczEuc3BhY3MuazEyLndpLnVzL35qc2NobHN0L2luZGV4Lmh0bWwgYW5kIGZvciBlbmNhcHN1bGF0aW9uCi1mcm9tIGh0dHA6Ly93d3cubWF0aHMudW5tLmVkdS9+YnJhZGZvcmQvbHRwYy5odG1sCi0KIEkgd2lsbCBicmllZmx5IGRlc2NyaWJlIHRoZSBvcGVyYXRpb24gb2YgdGhlIHRvb2xzLCBidXQgeW91IHdpbGwKIG5lZWQgdG8gY29uc3VsdCB0aGUgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uIGZvciBlYWNoIHNldCBvZiB0b29scy4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwaGFzZS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXBoYXNlLnR4dAppbmRleCA1NWVhYzRhLi42NzBiNzJmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXBoYXNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXBoYXNlLnR4dApAQCAtMjIsNyArMjIsNyBAQAogICAgIC0gQWxsIHZhcmlhbnRzIG9mIEludGVycGhhc2UgQVRNIFBDSSAoaSlDaGlwIGFkYXB0ZXIgY2FyZHMgYXJlIHN1cHBvcnRlZCwgCiAgICAgICBpbmNsdWRpbmcgeDU3NSAoT0MzLCBjb250cm9sIG1lbW9yeSAxMjhLICwgNTEySyBhbmQgcGFja2V0IG1lbW9yeSAxMjhLLCAKICAgICAgIDUxMksgYW5kIDFNKSwgeDUyNSAoVVRQMjUpIGFuZCB4NTMxIChEUzMgYW5kIEUzKS4gU2VlIAotICAgICAgaHR0cDovL3d3dy5pcGhhc2UuY29tL3NpdGUvaXBoYXNlLXdlYi8/ZXBpX21lbnVJdGVtSUQ9ZTE5NmYwNGI0YjNiNDA1MDJmMTUwODgyZTIxMDQ2YTAKKyAgICAgIGh0dHA6Ly93d3cuaXBoYXNlLmNvbS8KICAgICAgIGZvciBkZXRhaWxzLgogICAgIC0gT25seSB4ODYgcGxhdGZvcm1zIGFyZSBzdXBwb3J0ZWQuCiAgICAgLSBTTVAgaXMgc3VwcG9ydGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BhY2tldF9tbWFwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wYWNrZXRfbW1hcC50eHQKaW5kZXggOThmNzFhNS4uMDczODk0ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BhY2tldF9tbWFwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGFja2V0X21tYXAudHh0CkBAIC04LDcgKzgsNyBAQAogcmF3IGFjY2VzcyB0byBuZXR3b3JrIGludGVyZmFjZS4KIAogWW91IGNhbiBmaW5kIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50IGF0OgotICAgIGh0dHA6Ly9wdXNhLnV2LmVzL351bGlzc2VzL3BhY2tldF9tbWFwLworICAgIGh0dHA6Ly93aWtpLmlweHdhcnpvbmUuY29tL2luZGV4LnBocDU/dGl0bGU9TGludXhfcGFja2V0X21tYXAKIAogSG93dG8gY2FuIGJlIGZvdW5kIGF0OgogICAgIGh0dHA6Ly93aWtpLmdudS1sb2cubmV0IChwYWNrZXRfbW1hcCkKQEAgLTU2LDcgKzU2LDcgQEAKIAogSSdtIGF3YXJlIG9mIHR3byBpbXBsZW1lbnRhdGlvbnMgb2YgUEFDS0VUX01NQVAgaW4gbGlicGNhcDoKIAotICAgIGh0dHA6Ly9wdXNhLnV2LmVzL351bGlzc2VzL3BhY2tldF9tbWFwLyAgKGJ5IFNpbW9uIFBhdGFyaW4sIGJhc2VkIG9uIGxpYnBjYXAgMC42LjIpCisgICAgaHR0cDovL3dpa2kuaXB4d2Fyem9uZS5jb20vCQkgICAgIChieSBTaW1vbiBQYXRhcmluLCBiYXNlZCBvbiBsaWJwY2FwIDAuNi4yKQogICAgIGh0dHA6Ly9wdWJsaWMubGFubC5nb3YvY3B3LyAgICAgICAgICAgICAgKGJ5IFBoaWwgV29vZCwgYmFzZWQgb24gbGFzdGVzdCBsaWJwY2FwKQogCiBUaGUgcmVzdCBvZiB0aGlzIGRvY3VtZW50IGlzIGludGVuZGVkIGZvciBwZW9wbGUgd2hvIHdhbnQgdG8gdW5kZXJzdGFuZApAQCAtNDkzLDYgKzQ5MywzMiBAQAogICAgIHBmZC5ldmVudHMgPSBQT0xMT1VUOwogICAgIHJldHZhbCA9IHBvbGwoJnBmZCwgMSwgdGltZW91dCk7CiAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgUEFDS0VUX1RJTUVTVEFNUAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgUEFDS0VUX1RJTUVTVEFNUCBzZXR0aW5nIGRldGVybWluZXMgdGhlIHNvdXJjZSBvZiB0aGUgdGltZXN0YW1wIGluCit0aGUgcGFja2V0IG1ldGEgaW5mb3JtYXRpb24uICBJZiB5b3VyIE5JQyBpcyBjYXBhYmxlIG9mIHRpbWVzdGFtcGluZworcGFja2V0cyBpbiBoYXJkd2FyZSwgeW91IGNhbiByZXF1ZXN0IHRob3NlIGhhcmR3YXJlIHRpbWVzdGFtcHMgdG8gdXNlZC4KK05vdGU6IHlvdSBtYXkgbmVlZCB0byBlbmFibGUgdGhlIGdlbmVyYXRpb24gb2YgaGFyZHdhcmUgdGltZXN0YW1wcyB3aXRoCitTSU9DU0hXVFNUQU1QLgorCitQQUNLRVRfVElNRVNUQU1QIGFjY2VwdHMgdGhlIHNhbWUgaW50ZWdlciBiaXQgZmllbGQgYXMKK1NPX1RJTUVTVEFNUElORy4gIEhvd2V2ZXIsIG9ubHkgdGhlIFNPRl9USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFCithbmQgU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkUgdmFsdWVzIGFyZSByZWNvZ25pemVkIGJ5CitQQUNLRVRfVElNRVNUQU1QLiAgU09GX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkUgdGFrZXMgcHJlY2VkZW5jZSBvdmVyCitTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSBpZiBib3RoIGJpdHMgYXJlIHNldC4KKworICAgIGludCByZXEgPSAwOworICAgIHJlcSB8PSBTT0ZfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRTsKKyAgICBzZXRzb2Nrb3B0KGZkLCBTT0xfUEFDS0VULCBQQUNLRVRfVElNRVNUQU1QLCAodm9pZCAqKSAmcmVxLCBzaXplb2YocmVxKSkKKworSWYgUEFDS0VUX1RJTUVTVEFNUCBpcyBub3Qgc2V0LCBhIHNvZnR3YXJlIHRpbWVzdGFtcCBnZW5lcmF0ZWQgaW5zaWRlCit0aGUgbmV0d29ya2luZyBzdGFjayBpcyB1c2VkICh0aGUgYmVoYXZpb3IgYmVmb3JlIHRoaXMgc2V0dGluZyB3YXMgYWRkZWQpLgorCitTZWUgaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmggYW5kIERvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcKK2ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhhcmR3YXJlIHRpbWVzdGFtcHMuCisKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiArIFRIQU5LUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wa3RnZW4udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BrdGdlbi50eHQKaW5kZXggNjFiYjY0NS4uNzVlNGZkNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BrdGdlbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BrdGdlbi50eHQKQEAgLTE1MSw2ICsxNTEsOCBAQAogCiAgcGdzZXQgc3RvcCAgICAJICAgICAgICAgIGFib3J0cyBpbmplY3Rpb24uIEFsc28sIF5DIGFib3J0cyBnZW5lcmF0b3IuCiAKKyBwZ3NldCAicmF0ZSAzMDBNIiAgICAgICAgc2V0IHJhdGUgdG8gMzAwIE1iL3MKKyBwZ3NldCAicmF0ZXAgMTAwMDAwMCIgICAgc2V0IHJhdGUgdG8gMU1wcHMKIAogRXhhbXBsZSBzY3JpcHRzCiA9PT09PT09PT09PT09PT0KQEAgLTI0MSw2ICsyNDMsOSBAQAogZmxvd3MKIGZsb3dsZW4KIAorcmF0ZQorcmF0ZXAKKwogUmVmZXJlbmNlczoKIGZ0cDovL3JvYnVyLnNsdS5zZS9wdWIvTGludXgvbmV0LWRldmVsb3BtZW50L3BrdGdlbi10ZXN0aW5nLwogZnRwOi8vcm9idXIuc2x1LnNlL3B1Yi9MaW51eC9uZXQtZGV2ZWxvcG1lbnQvcGt0Z2VuLXRlc3RpbmcvZXhhbXBsZXMvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcmF5X2NzLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yYXlfY3MudHh0CmluZGV4IDE0NWQyN2EuLmMwYzEyMzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yYXlfY3MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yYXlfY3MudHh0CkBAIC0xMyw4ICsxMyw4IEBACiAKIEFzIG9mIGtlcm5lbCAyLjMuMTgsIHRoZSByYXlfY3MgZHJpdmVyIGlzIHBhcnQgb2YgdGhlIExpbnV4IGtlcm5lbAogc291cmNlLiAgTXkgd2ViIHBhZ2UgZm9yIHRoZSBkZXZlbG9wbWVudCBvZiByYXlfY3MgaXMgYXQKLWh0dHA6Ly93b3JsZC5zdGQuY29tL35jb3JleS9yYXlsaW5rLmh0bWwgYW5kIEkgY2FuIGJlIGVtYWlsZWQgYXQKLWNvcmV5QHdvcmxkLnN0ZC5jb20KK2h0dHA6Ly93ZWIucmFsaW5rdGVjaC5jb20vcmFsaW5rL0hvbWUvU3VwcG9ydC9MaW51eC5odG1sIAorYW5kIEkgY2FuIGJlIGVtYWlsZWQgYXQgY29yZXlAd29ybGQuc3RkLmNvbQogCiBUaGUga2VybmVsIGRyaXZlciBpcyBiYXNlZCBvbiByYXlfY3MtMS42Mi50Z3oKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3MyaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3MyaW8udHh0CmluZGV4IGMzZDZiNGQuLjlkNGUwZjQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zMmlvLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvczJpby50eHQKQEAgLTEzMyw3ICsxMzMsOCBAQAogKiogRm9yIEFNRCBvcHRlcm9uIHBsYXRmb3JtcyB3aXRoIDgxMzEgY2hpcHNldCwgTU1SQkM9MSBhbmQgTU9TVD0xIGFyZSAKIHJlY29tbWVuZGVkIGFzIHNhZmUgcGFyYW1ldGVycy4KIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgcmV2aWV3IHRoZSBBTUQ4MTMxIGVycmF0YSBhdAotaHR0cDovL3d3dy5hbWQuY29tL3VzLWVuL2Fzc2V0cy9jb250ZW50X3R5cGUvd2hpdGVfcGFwZXJzX2FuZF90ZWNoX2RvY3MvMjYzMTAucGRmCitodHRwOi8vdmlwLmFtZC5jb20vdXMtZW4vYXNzZXRzL2NvbnRlbnRfdHlwZS93aGl0ZV9wYXBlcnNfYW5kX3RlY2hfZG9jcy8KKzI2MzEwX0FNRC04MTMxX0h5cGVyVHJhbnNwb3J0X1BDSS1YX1R1bm5lbF9SZXZpc2lvbl9HdWlkZV9yZXZfM18xOC5wZGYKIAogNi4gIEF2YWlsYWJsZSBEb3dubG9hZHMKIE5ldGVyaW9uICJzMmlvIiBkcml2ZXIgaW4gUmVkIEhhdCBhbmQgU3VzZSAyLjYtYmFzZWQgZGlzdHJpYnV0aW9ucyBpcyBrZXB0IHVwIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RsYW4udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RsYW4udHh0CmluZGV4IDdlNmFhNWIuLjM0NTUwZGYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90bGFuLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGxhbi50eHQKQEAgLTIsNyArMiw3IEBACiAoQykgMTk5OCBKYW1lcyBCYW5rcwogKEMpIDE5OTktMjAwMSBUb3JiZW4gTWF0aGlhc2VuIDx0bW1AaW1hZ2UuZGssIHRvcmJlbi5tYXRoaWFzZW5AY29tcGFxLmNvbT4KIAotRm9yIGRyaXZlciBpbmZvcm1hdGlvbi91cGRhdGVzIHZpc2l0IGh0dHA6Ly9vcGVuc291cmNlLmNvbXBhcS5jb20KK0ZvciBkcml2ZXIgaW5mb3JtYXRpb24vdXBkYXRlcyB2aXNpdCBodHRwOi8vd3d3LmNvbXBhcS5jb20KIAogCiBUTEFOIGRyaXZlciBmb3IgTGludXgsIHZlcnNpb24gMS4xNGEKQEAgLTExMyw1ICsxMTMsNSBAQAogCiBUaGVyZSBpcyBhbHNvIGEgdGxhbiBtYWlsaW5nIGxpc3Qgd2hpY2ggeW91IGNhbiBqb2luIGJ5IHNlbmRpbmcgInN1YnNjcmliZSB0bGFuIgogaW4gdGhlIGJvZHkgb2YgYW4gZW1haWwgdG8gbWFqb3Jkb21vQHZ1c2VyLnZ1LnVuaW9uLmVkdS4KLVRoZXJlIGlzIGFsc28gYSB0bGFuIHdlYnNpdGUgYXQgaHR0cDovL29wZW5zb3VyY2UuY29tcGFxLmNvbQorVGhlcmUgaXMgYWxzbyBhIHRsYW4gd2Vic2l0ZSBhdCBodHRwOi8vd3d3LmNvbXBhcS5jb20KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3VkcGxpdGUudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3VkcGxpdGUudHh0CmluZGV4IDg1NWQ4ZGEuLmQ3MjdhMzggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy91ZHBsaXRlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdWRwbGl0ZS50eHQKQEAgLTExLDExICsxMSwxMyBAQAogICBUaGlzIGZpbGUgYnJpZWZseSBkZXNjcmliZXMgdGhlIGV4aXN0aW5nIGtlcm5lbCBzdXBwb3J0IGFuZCB0aGUgc29ja2V0IEFQSS4KICAgRm9yIGluLWRlcHRoIGluZm9ybWF0aW9uLCB5b3UgY2FuIGNvbnN1bHQ6CiAKLSAgIG8gVGhlIFVEUC1MaXRlIEhvbWVwYWdlOiBodHRwOi8vd3d3LmVyZy5hYmRuLmFjLnVrL3VzZXJzL2dlcnJpdC91ZHAtbGl0ZS8KKyAgIG8gVGhlIFVEUC1MaXRlIEhvbWVwYWdlOgorCWh0dHA6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLyovaHR0cDovL3d3dy5lcmcuYWJkbi5hYy51ay91c2Vycy9nZXJyaXQvdWRwLWxpdGUvIAogICAgICAgIEZyb20gaGVyZSB5b3UgY2FuIGFsc28gZG93bmxvYWQgc29tZSBleGFtcGxlIGFwcGxpY2F0aW9uIHNvdXJjZSBjb2RlLgogCiAgICBvIFRoZSBVRFAtTGl0ZSBIT1dUTyBvbgotICAgICAgIGh0dHA6Ly93d3cuZXJnLmFiZG4uYWMudWsvdXNlcnMvZ2Vycml0L3VkcC1saXRlL2ZpbGVzL1VEUC1MaXRlLUhPV1RPLnR4dAorICAgICAgIGh0dHA6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLyovaHR0cDovL3d3dy5lcmcuYWJkbi5hYy51ay91c2Vycy9nZXJyaXQvdWRwLWxpdGUvCisJZmlsZXMvVURQLUxpdGUtSE9XVE8udHh0CiAKICAgIG8gVGhlIFdpcmVzaGFyayBVRFAtTGl0ZSBXaUtpICh3aXRoIGNhcHR1cmUgZmlsZXMpOgogICAgICAgIGh0dHA6Ly93aWtpLndpcmVzaGFyay5vcmcvTGlnaHR3ZWlnaHRfVXNlcl9EYXRhZ3JhbV9Qcm90b2NvbApAQCAtMjYsMTIgKzI4LDcgQEAKICAgSSkgQVBQTElDQVRJT05TCiAKICAgU2V2ZXJhbCBhcHBsaWNhdGlvbnMgaGF2ZSBiZWVuIHBvcnRlZCBzdWNjZXNzZnVsbHkgdG8gVURQLUxpdGUuIEV0aGVyZWFsCi0gIChub3cgY2FsbGVkIHdpcmVzaGFyaykgaGFzIFVEUC1MaXRldjQvdjYgc3VwcG9ydCBieSBkZWZhdWx0LiBUaGUgdGFyYmFsbCBvbgotCi0gICBodHRwOi8vd3d3LmVyZy5hYmRuLmFjLnVrL3VzZXJzL2dlcnJpdC91ZHAtbGl0ZS9maWxlcy91ZHBsaXRlX2xpbnV4LnRhci5negotCi0gIGhhcyBzb3VyY2UgY29kZSBmb3Igc2V2ZXJhbCB2NC92NiBjbGllbnQtc2VydmVyIGFuZCBuZXR3b3JrIHRlc3RpbmcgZXhhbXBsZXMuCi0KKyAgKG5vdyBjYWxsZWQgd2lyZXNoYXJrKSBoYXMgVURQLUxpdGV2NC92NiBzdXBwb3J0IGJ5IGRlZmF1bHQuIAogICBQb3J0aW5nIGFwcGxpY2F0aW9ucyB0byBVRFAtTGl0ZSBpcyBzdHJhaWdodGZvcndhcmQ6IG9ubHkgc29ja2V0IGxldmVsIGFuZAogICBJUFBST1RPIG5lZWQgdG8gYmUgY2hhbmdlZDsgc2VuZGVycyBhZGRpdGlvbmFsbHkgc2V0IHRoZSBjaGVja3N1bSBjb3ZlcmFnZQogICBsZW5ndGggKGRlZmF1bHQgPSBoZWFkZXIgbGVuZ3RoID0gOCkuIERldGFpbHMgYXJlIGluIHRoZSBuZXh0IHNlY3Rpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2F2ZWxhbi50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2F2ZWxhbi50eHQKaW5kZXggYWZhNmU1Mi4uOTBlMGFjNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3dhdmVsYW4udHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy93YXZlbGFuLnR4dApAQCAtNTAsNyArNTAsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0KIAlvIENvbmZpZyA6CU5vdCB5ZXQgaW4ga2VybmVsCiAJbyBMb2NhdGlvbiA6CVBjbWNpYSBwYWNrYWdlIDMuMS4xMCsKLQlvIG9uLWxpbmUgZG9jIDoJaHR0cDovL3d3dy5mYXN0YS5maC1kb3J0bXVuZC5kZS91c2Vycy9hbmR5L3d2bGFuLworCW8gb24tbGluZSBkb2MgOgorCWh0dHA6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLyovaHR0cDovL3d3dy5mYXN0YS5maC1kb3J0bXVuZC5kZS91c2Vycy9hbmR5L3d2bGFuLwkKIAogCVRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIGN1cnJlbnQgZ2VuZXJhdGlvbiBvZiBXYXZlbGFuIElFRUUsCiB3aGljaCBpcyA4MDIuMTEgY29tcGF0aWJsZS4gRGVwZW5kaW5nIG9uIHZlcnNpb24sIGl0IGlzIDIgTWIvcyBvciAxMQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wYWRhdGEudHh0IGIvRG9jdW1lbnRhdGlvbi9wYWRhdGEudHh0CmluZGV4IDI2OWQ3ZDBkLi40NzNlYmYyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3BhZGF0YS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wYWRhdGEudHh0CkBAIC0xLDUgKzEsNSBAQAogVGhlIHBhZGF0YSBwYXJhbGxlbCBleGVjdXRpb24gbWVjaGFuaXNtCi1MYXN0IHVwZGF0ZWQgZm9yIDIuNi4zNAorTGFzdCB1cGRhdGVkIGZvciAyLjYuMzYKIAogUGFkYXRhIGlzIGEgbWVjaGFuaXNtIGJ5IHdoaWNoIHRoZSBrZXJuZWwgY2FuIGZhcm0gd29yayBvdXQgdG8gYmUgZG9uZSBpbgogcGFyYWxsZWwgb24gbXVsdGlwbGUgQ1BVcyB3aGlsZSByZXRhaW5pbmcgdGhlIG9yZGVyaW5nIG9mIHRhc2tzLiAgSXQgd2FzCkBAIC0xMywzMSArMTMsODYgQEAKIAogICAgICNpbmNsdWRlIDxsaW51eC9wYWRhdGEuaD4KIAotICAgIHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBhZGF0YV9hbGxvYyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKLQkJCQkgICAgICAgICBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EpOworICAgIHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBhZGF0YV9hbGxvYyhzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EsCisJCQkJCSBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqcGNwdW1hc2ssCisJCQkJCSBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY2JjcHVtYXNrKTsKIAotVGhlIGNwdW1hc2sgZGVzY3JpYmVzIHdoaWNoIHByb2Nlc3NvcnMgd2lsbCBiZSB1c2VkIHRvIGV4ZWN1dGUgd29yawotc3VibWl0dGVkIHRvIHRoaXMgaW5zdGFuY2UuICBUaGUgd29ya3F1ZXVlIHdxIGlzIHdoZXJlIHRoZSB3b3JrIHdpbGwKLWFjdHVhbGx5IGJlIGRvbmU7IGl0IHNob3VsZCBiZSBhIG11bHRpdGhyZWFkZWQgcXVldWUsIG5hdHVyYWxseS4KK1RoZSBwY3B1bWFzayBkZXNjcmliZXMgd2hpY2ggcHJvY2Vzc29ycyB3aWxsIGJlIHVzZWQgdG8gZXhlY3V0ZSB3b3JrCitzdWJtaXR0ZWQgdG8gdGhpcyBpbnN0YW5jZSBpbiBwYXJhbGxlbC4gVGhlIGNiY3B1bWFzayBkZWZpbmVzIHdoaWNoCitwcm9jZXNzb3JzIGFyZSBhbGxvd2VkIHRvIHVzZSBhcyB0aGUgc2VyaWFsaXphdGlvbiBjYWxsYmFjayBwcm9jZXNzb3IuCitUaGUgd29ya3F1ZXVlIHdxIGlzIHdoZXJlIHRoZSB3b3JrIHdpbGwgYWN0dWFsbHkgYmUgZG9uZTsgaXQgc2hvdWxkIGJlCithIG11bHRpdGhyZWFkZWQgcXVldWUsIG5hdHVyYWxseS4KKworVG8gYWxsb2NhdGUgYSBwYWRhdGEgaW5zdGFuY2Ugd2l0aCB0aGUgY3B1X3Bvc3NpYmxlX21hc2sgZm9yIGJvdGgKK2NwdW1hc2tzIHRoaXMgaGVscGVyIGZ1bmN0aW9uIGNhbiBiZSB1c2VkOgorCisgICAgc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGFkYXRhX2FsbG9jX3Bvc3NpYmxlKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSk7CisKK05vdGU6IFBhZGF0YSBtYWludGFpbnMgdHdvIGtpbmRzIG9mIGNwdW1hc2tzIGludGVybmFsbHkuIFRoZSB1c2VyIHN1cHBsaWVkCitjcHVtYXNrcywgc3VibWl0dGVkIGJ5IHBhZGF0YV9hbGxvYy9wYWRhdGFfYWxsb2NfcG9zc2libGUgYW5kIHRoZSAndXNhYmxlJworY3B1bWFza3MuIFRoZSB1c2FibGUgY3B1bWFza3MgYXJlIGFsd2F5cyB0aGUgc3Vic2V0IG9mIGFjdGl2ZSBjcHVzIGluIHRoZQordXNlciBzdXBwbGllZCBjcHVtYXNrcywgdGhlc2UgYXJlIHRoZSBjcHVtYXNrcyBwYWRhdGEgYWN0dWFsbHkgdXNlLiBTbworaXQgaXMgbGVnYWwgdG8gc3VwcGx5IGEgY3B1bWFzayB0byBwYWRhdGEgdGhhdCBjb250YWlucyBvZmZsaW5lIGNwdXMuCitPbmNlIGEgb2ZmbGluZSBjcHUgaW4gdGhlIHVzZXIgc3VwcGxpZWQgY3B1bWFzayBjb21lcyBvbmxpbmUsIHBhZGF0YQoraXMgZ29pbmcgdG8gdXNlIGl0LgogCiBUaGVyZSBhcmUgZnVuY3Rpb25zIGZvciBlbmFibGluZyBhbmQgZGlzYWJsaW5nIHRoZSBpbnN0YW5jZToKIAotICAgIHZvaWQgcGFkYXRhX3N0YXJ0KHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KTsKKyAgICBpbnQgcGFkYXRhX3N0YXJ0KHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KTsKICAgICB2b2lkIHBhZGF0YV9zdG9wKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KTsKIAotVGhlc2UgZnVuY3Rpb25zIGxpdGVyYWxseSBkbyBub3RoaW5nIGJleW9uZCBzZXR0aW5nIG9yIGNsZWFyaW5nIHRoZQotInBhZGF0YV9zdGFydCgpIHdhcyBjYWxsZWQiIGZsYWc7IGlmIHRoYXQgZmxhZyBpcyBub3Qgc2V0LCBvdGhlciBmdW5jdGlvbnMKLXdpbGwgcmVmdXNlIHRvIHdvcmsuCitUaGVzZSBmdW5jdGlvbnMgYXJlIHNldHRpbmcgb3IgY2xlYXJpbmcgdGhlICJQQURBVEFfSU5JVCIgZmxhZzsKK2lmIHRoYXQgZmxhZyBpcyBub3Qgc2V0LCBvdGhlciBmdW5jdGlvbnMgd2lsbCByZWZ1c2UgdG8gd29yay4KK3BhZGF0YV9zdGFydCByZXR1cm5zIHplcm8gb24gc3VjY2VzcyAoZmxhZyBzZXQpIG9yIC1FSU5WQUwgaWYgdGhlCitwYWRhdGEgY3B1bWFzayBjb250YWlucyBubyBhY3RpdmUgY3B1IChmbGFnIG5vdCBzZXQpLgorcGFkYXRhX3N0b3AgY2xlYXJzIHRoZSBmbGFnIGFuZCBibG9ja3MgdW50aWwgdGhlIHBhZGF0YSBpbnN0YW5jZQoraXMgdW51c2VkLgogCiBUaGUgbGlzdCBvZiBDUFVzIHRvIGJlIHVzZWQgY2FuIGJlIGFkanVzdGVkIHdpdGggdGhlc2UgZnVuY3Rpb25zOgogCi0gICAgaW50IHBhZGF0YV9zZXRfY3B1bWFzayhzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwKKyAgICBpbnQgcGFkYXRhX3NldF9jcHVtYXNrcyhzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwKKwkJCSAgICBjcHVtYXNrX3Zhcl90IHBjcHVtYXNrLAorCQkJICAgIGNwdW1hc2tfdmFyX3QgY2JjcHVtYXNrKTsKKyAgICBpbnQgcGFkYXRhX3NldF9jcHVtYXNrKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LCBpbnQgY3B1bWFza190eXBlLAogCQkJICAgY3B1bWFza192YXJfdCBjcHVtYXNrKTsKLSAgICBpbnQgcGFkYXRhX2FkZF9jcHUoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsIGludCBjcHUpOwotICAgIGludCBwYWRhdGFfcmVtb3ZlX2NwdShzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwgaW50IGNwdSk7CisgICAgaW50IHBhZGF0YV9hZGRfY3B1KHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LCBpbnQgY3B1LCBpbnQgbWFzayk7CisgICAgaW50IHBhZGF0YV9yZW1vdmVfY3B1KHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LCBpbnQgY3B1LCBpbnQgbWFzayk7CiAKLUNoYW5naW5nIHRoZSBDUFUgbWFzayBoYXMgdGhlIGxvb2sgb2YgYW4gZXhwZW5zaXZlIG9wZXJhdGlvbiwgdGhvdWdoLCBzbyBpdAotcHJvYmFibHkgc2hvdWxkIG5vdCBiZSBkb25lIHdpdGggZ3JlYXQgZnJlcXVlbmN5LgorQ2hhbmdpbmcgdGhlIENQVSBtYXNrcyBhcmUgZXhwZW5zaXZlIG9wZXJhdGlvbnMsIHRob3VnaCwgc28gaXQgc2hvdWxkIG5vdCBiZQorZG9uZSB3aXRoIGdyZWF0IGZyZXF1ZW5jeS4KKworSXQncyBwb3NzaWJsZSB0byBjaGFuZ2UgYm90aCBjcHVtYXNrcyBvZiBhIHBhZGF0YSBpbnN0YW5jZSB3aXRoCitwYWRhdGFfc2V0X2NwdW1hc2tzIGJ5IHNwZWNpZnlpbmcgdGhlIGNwdW1hc2tzIGZvciBwYXJhbGxlbCBleGVjdXRpb24gKHBjcHVtYXNrKQorYW5kIGZvciB0aGUgc2VyaWFsIGNhbGxiYWNrIGZ1bmN0aW9uIChjYmNwdW1hc2spLiBwYWRhdGFfc2V0X2NwdW1hc2sgaXMgdG8KK2NoYW5nZSBqdXN0IG9uZSBvZiB0aGUgY3B1bWFza3MuIEhlcmUgY3B1bWFza190eXBlIGlzIG9uZSBvZiBQQURBVEFfQ1BVX1NFUklBTCwKK1BBREFUQV9DUFVfUEFSQUxMRUwgYW5kIGNwdW1hc2sgc3BlY2lmaWVzIHRoZSBuZXcgY3B1bWFzayB0byB1c2UuCitUbyBzaW1wbHkgYWRkIG9yIHJlbW92ZSBvbmUgY3B1IGZyb20gYSBjZXJ0YWluIGNwdW1hc2sgdGhlIGZ1bmN0aW9ucworcGFkYXRhX2FkZF9jcHUvcGFkYXRhX3JlbW92ZV9jcHUgYXJlIHVzZWQuIGNwdSBzcGVjaWZpZXMgdGhlIGNwdSB0byBhZGQgb3IKK3JlbW92ZSBhbmQgbWFzayBpcyBvbmUgb2YgUEFEQVRBX0NQVV9TRVJJQUwsIFBBREFUQV9DUFVfUEFSQUxMRUwuCisKK0lmIGEgdXNlciBpcyBpbnRlcmVzdGVkIGluIHBhZGF0YSBjcHVtYXNrIGNoYW5nZXMsIGhlIGNhbiByZWdpc3RlciB0bwordGhlIHBhZGF0YSBjcHVtYXNrIGNoYW5nZSBub3RpZmllcjoKKworICAgIGludCBwYWRhdGFfcmVnaXN0ZXJfY3B1bWFza19ub3RpZmllcihzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwKKwkJCQkJIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmJsb2NrKTsKKworVG8gdW5yZWdpc3RlciBmcm9tIHRoYXQgbm90aWZpZXI6CisKKyAgICBpbnQgcGFkYXRhX3VucmVnaXN0ZXJfY3B1bWFza19ub3RpZmllcihzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwKKwkJCQkJICAgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYmxvY2spOworCitUaGUgcGFkYXRhIGNwdW1hc2sgY2hhbmdlIG5vdGlmaWVyIG5vdGlmaWVzIGFib3V0IGNoYW5nZXMgb2YgdGhlIHVzYWJsZQorY3B1bWFza3MsIGkuZS4gdGhlIHN1YnNldCBvZiBhY3RpdmUgY3B1cyBpbiB0aGUgdXNlciBzdXBwbGllZCBjcHVtYXNrLgorCitQYWRhdGEgY2FsbHMgdGhlIG5vdGlmaWVyIGNoYWluIHdpdGg6CisKKyAgICBibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZwaW5zdC0+Y3B1bWFza19jaGFuZ2Vfbm90aWZpZXIsCisJCQkJIG5vdGlmaWNhdGlvbl9tYXNrLAorCQkJCSAmcGRfbmV3LT5jcHVtYXNrKTsKKworSGVyZSBjcHVtYXNrX2NoYW5nZV9ub3RpZmllciBpcyByZWdpc3RlcmVkIG5vdGlmaWVyLCBub3RpZmljYXRpb25fbWFzaworaXMgb25lIG9mIFBBREFUQV9DUFVfU0VSSUFMLCBQQURBVEFfQ1BVX1BBUkFMTEVMIGFuZCBjcHVtYXNrIGlzIGEgcG9pbnRlcgordG8gYSBzdHJ1Y3QgcGFkYXRhX2NwdW1hc2sgdGhhdCBjb250YWlucyB0aGUgbmV3IGNwdW1hc2sgaW5mb3JtYXRpb25zLgogCiBBY3R1YWxseSBzdWJtaXR0aW5nIHdvcmsgdG8gdGhlIHBhZGF0YSBpbnN0YW5jZSByZXF1aXJlcyB0aGUgY3JlYXRpb24gb2YgYQogcGFkYXRhX3ByaXYgc3RydWN0dXJlOgpAQCAtNTAsNyArMTA1LDcgQEAKIAogVGhpcyBzdHJ1Y3R1cmUgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGVtYmVkZGVkIHdpdGhpbiBzb21lIGxhcmdlcgogc3RydWN0dXJlIHNwZWNpZmljIHRvIHRoZSB3b3JrIHRvIGJlIGRvbmUuICBNb3N0IGl0cyBmaWVsZHMgYXJlIHByaXZhdGUgdG8KLXBhZGF0YSwgYnV0IHRoZSBzdHJ1Y3R1cmUgc2hvdWxkIGJlIHplcm9lZCBhdCBpbml0aWFsaXphdGlvbiB0aW1lLCBhbmQgdGhlCitwYWRhdGEsIGJ1dCB0aGUgc3RydWN0dXJlIHNob3VsZCBiZSB6ZXJvZWQgYXQgaW5pdGlhbGlzYXRpb24gdGltZSwgYW5kIHRoZQogcGFyYWxsZWwoKSBhbmQgc2VyaWFsKCkgZnVuY3Rpb25zIHNob3VsZCBiZSBwcm92aWRlZC4gIFRob3NlIGZ1bmN0aW9ucyB3aWxsCiBiZSBjYWxsZWQgaW4gdGhlIHByb2Nlc3Mgb2YgZ2V0dGluZyB0aGUgd29yayBkb25lIGFzIHdlIHdpbGwgc2VlCiBtb21lbnRhcmlseS4KQEAgLTYzLDEyICsxMTgsMTAgQEAKIFRoZSBwaW5zdCBhbmQgcGFkYXRhIHN0cnVjdHVyZXMgbXVzdCBiZSBzZXQgdXAgYXMgZGVzY3JpYmVkIGFib3ZlOyBjYl9jcHUKIHNwZWNpZmllcyB3aGljaCBDUFUgd2lsbCBiZSB1c2VkIGZvciB0aGUgZmluYWwgY2FsbGJhY2sgd2hlbiB0aGUgd29yayBpcwogZG9uZTsgaXQgbXVzdCBiZSBpbiB0aGUgY3VycmVudCBpbnN0YW5jZSdzIENQVSBtYXNrLiAgVGhlIHJldHVybiB2YWx1ZSBmcm9tCi1wYWRhdGFfZG9fcGFyYWxsZWwoKSBpcyBhIGxpdHRsZSBzdHJhbmdlOyB6ZXJvIGlzIGFuIGVycm9yIHJldHVybgotaW5kaWNhdGluZyB0aGF0IHRoZSBjYWxsZXIgZm9yZ290IHRoZSBwYWRhdGFfc3RhcnQoKSBmb3JtYWxpdGllcy4gIC1FQlVTWQotbWVhbnMgdGhhdCBzb21lYm9keSwgc29tZXdoZXJlIGVsc2UgaXMgbWVzc2luZyB3aXRoIHRoZSBpbnN0YW5jZSdzIENQVQotbWFzaywgd2hpbGUgLUVJTlZBTCBpcyBhIGNvbXBsYWludCBhYm91dCBjYl9jcHUgbm90IGJlaW5nIGluIHRoYXQgQ1BVIG1hc2suCi1JZiBhbGwgZ29lcyB3ZWxsLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIC1FSU5QUk9HUkVTUywgaW5kaWNhdGluZyB0aGF0Ci10aGUgd29yayBpcyBpbiBwcm9ncmVzcy4KK3BhZGF0YV9kb19wYXJhbGxlbCgpIGlzIHplcm8gb24gc3VjY2VzcywgaW5kaWNhdGluZyB0aGF0IHRoZSB3b3JrIGlzIGluCitwcm9ncmVzcy4gLUVCVVNZIG1lYW5zIHRoYXQgc29tZWJvZHksIHNvbWV3aGVyZSBlbHNlIGlzIG1lc3Npbmcgd2l0aCB0aGUKK2luc3RhbmNlJ3MgQ1BVIG1hc2ssIHdoaWxlIC1FSU5WQUwgaXMgYSBjb21wbGFpbnQgYWJvdXQgY2JfY3B1IG5vdCBiZWluZworaW4gdGhhdCBDUFUgbWFzayBvciBhYm91dCBhIG5vdCBydW5uaW5nIGluc3RhbmNlLgogCiBFYWNoIHRhc2sgc3VibWl0dGVkIHRvIHBhZGF0YV9kb19wYXJhbGxlbCgpIHdpbGwsIGluIHR1cm4sIGJlIHBhc3NlZCB0bwogZXhhY3RseSBvbmUgY2FsbCB0byB0aGUgYWJvdmUtbWVudGlvbmVkIHBhcmFsbGVsKCkgZnVuY3Rpb24sIG9uIG9uZSBDUFUsIHNvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3BjbWNpYS9kcml2ZXItY2hhbmdlcy50eHQgYi9Eb2N1bWVudGF0aW9uL3BjbWNpYS9kcml2ZXItY2hhbmdlcy50eHQKaW5kZXggNjFiYzRlOS4uMjZjMGY5YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wY21jaWEvZHJpdmVyLWNoYW5nZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcGNtY2lhL2RyaXZlci1jaGFuZ2VzLnR4dApAQCAtMSw0ICsxLDE2IEBACiBUaGlzIGZpbGUgZGV0YWlscyBjaGFuZ2VzIGluIDIuNiB3aGljaCBhZmZlY3QgUENNQ0lBIGNhcmQgZHJpdmVyIGF1dGhvcnM6CisqIHBjbWNpYV9yZXF1ZXN0X2lvIGNoYW5nZXMgKGFzIG9mIDIuNi4zNikKKyAgIEluc3RlYWQgb2YgaW9fcmVxX3QsIGRyaXZlcnMgYXJlIG5vdyByZXF1ZXN0ZWQgdG8gZmlsbCBvdXQKKyAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldi0+cmVzb3VyY2VbMCwxXSBmb3IgdXAgdG8gdHdvIGlvcG9ydAorICAgcmFuZ2VzLiBBZnRlciBhIGNhbGwgdG8gcGNtY2lhX3JlcXVlc3RfaW8oKSwgdGhlIHBvcnRzIGZvdW5kIHRoZXJlCisgICBhcmUgcmVzZXJ2ZWQsIGFmdGVyIGNhbGxpbmcgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbigpLCB0aGV5IG1heQorICAgYmUgdXNlZC4KKworKiBObyBkZXZfaW5mb190LCBubyBjc190eXBlcy5oIChhcyBvZiAyLjYuMzYpCisgICBkZXZfaW5mb190IGFuZCBhIGZldyBvdGhlciB0eXBlZGVmcyBhcmUgcmVtb3ZlZC4gTm8gbG9uZ2VyIHVzZSB0aGVtCisgICBpbiBQQ01DSUEgZGV2aWNlIGRyaXZlcnMuIEFsc28sIGRvIG5vdCBpbmNsdWRlIHBjbWNpYS9jc190eXBlcy5oLCBhcworICAgdGhpcyBmaWxlIGlzIGdvbmUuCisKICogTm8gZGV2X25vZGVfdCAoYXMgb2YgMi42LjM1KQogICAgVGhlcmUgaXMgbm8gbW9yZSBuZWVkIHRvIGZpbGwgb3V0IGEgImRldl9ub2RlX3QiIHN0cnVjdHVyZS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9hcG0tYWNwaS50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL2FwbS1hY3BpLnR4dAppbmRleCAxYmQ3OTlkLi42Y2M0MjNkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL2FwbS1hY3BpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL2FwbS1hY3BpLnR4dApAQCAtMjgsNSArMjgsNSBAQAogR28gYWhlYWQgYW5kIHN0YXJ0IGJvdGguICBJZiBBQ1BJIG9yIEFQTSBpcyBub3QgYXZhaWxhYmxlIG9uIHlvdXIKIHN5c3RlbSB0aGUgYXNzb2NpYXRlZCBkYWVtb24gd2lsbCBleGl0IGdyYWNlZnVsbHkuCiAKLSAgYXBtZDogICBodHRwOi8vd29ybGR2aXNpb25zLmNhL35hcGVud2Fyci9hcG1kLworICBhcG1kOiAgIGh0dHA6Ly9mdHAuZGViaWFuLm9yZy9wb29sL21haW4vYS9hcG1kLwogICBhY3BpZDogIGh0dHA6Ly9hY3BpZC5zZi5uZXQvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL2Jhc2ljLXBtLWRlYnVnZ2luZy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL2Jhc2ljLXBtLWRlYnVnZ2luZy50eHQKaW5kZXggMTU1NTAwMS4uZGRkNzgxNzIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvYmFzaWMtcG0tZGVidWdnaW5nLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL2Jhc2ljLXBtLWRlYnVnZ2luZy50eHQKQEAgLTE3OSw4ICsxNzksNyBAQAogCiBUbyB2ZXJpZnkgdGhhdCB0aGUgU1RSIHdvcmtzLCBpdCBpcyBnZW5lcmFsbHkgbW9yZSBjb252ZW5pZW50IHRvIHVzZSB0aGUgczJyYW0KIHRvb2wgYXZhaWxhYmxlIGZyb20gaHR0cDovL3N1c3BlbmQuc2YubmV0IGFuZCBkb2N1bWVudGVkIGF0Ci1odHRwOi8vZW4ub3BlbnN1c2Uub3JnL3MycmFtIC4gIEhvd2V2ZXIsIGJlZm9yZSBkb2luZyB0aGF0IGl0IGlzIHJlY29tbWVuZGVkIHRvCi1jYXJyeSBvdXQgU1RSIHRlc3RpbmcgdXNpbmcgdGhlIGZhY2lsaXR5IGRlc2NyaWJlZCBpbiBzZWN0aW9uIDEuCitodHRwOi8vZW4ub3BlbnN1c2Uub3JnL1NEQjpTdXNwZW5kX3RvX1JBTS4KIAogTmFtZWx5LCBhZnRlciB3cml0aW5nICJmcmVlemVyIiwgImRldmljZXMiLCAicGxhdGZvcm0iLCAicHJvY2Vzc29ycyIsIG9yICJjb3JlIgogaW50byAvc3lzL3Bvd2VyL3BtX3Rlc3QgKGF2YWlsYWJsZSBpZiB0aGUga2VybmVsIGlzIGNvbXBpbGVkIHdpdGgKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvdHJpY2tzLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvdHJpY2tzLnR4dAppbmRleCAzYjI2YmI1Li5hMWI4ZjcyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3RyaWNrcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci90cmlja3MudHh0CkBAIC0xLDYgKzEsNiBAQAogCXN3c3VzcC9TMyB0cmlja3MKIAl+fn5+fn5+fn5+fn5+fn5+Ci1QYXZlbCBNYWNoZWsgPHBhdmVsQHN1c2UuY3o+CitQYXZlbCBNYWNoZWsgPHBhdmVsQHVjdy5jej4KIAogSWYgeW91IHdhbnQgdG8gdHJpY2sgc3dzdXNwL1MzIGludG8gd29ya2luZywgeW91IG1pZ2h0IHdhbnQgdG8gdHJ5OgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3ZpZGVvLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvdmlkZW8udHh0CmluZGV4IDJiMzU4NDkuLjNlNjI3MmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvdmlkZW8udHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvdmlkZW8udHh0CkBAIC02NywxMSArNjcsMTEgQEAKICAgUE9TVGluZyBiaW9zIHdvcmtzLiBPbGUgUm9obmUgaGFzIHBhdGNoIHRvIGRvIGp1c3QgdGhhdCBhdAogICBodHRwOi8vZGV2LmdlbnRvby5vcmcvfm1hcmluZWFtL3BhdGNoLXJhZGVvbmZiLTIuNi4xMS1yYzItbW0yLgogCi0oOCkgb24gc29tZSBzeXN0ZW1zLCB5b3UgY2FuIHVzZSB0aGUgdmlkZW9fcG9zdCB1dGlsaXR5IG1lbnRpb25lZCBoZXJlOgotICBodHRwOi8vYnVnemlsbGEua2VybmVsLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY3MC4gRG8gZWNobyAzID4gL3N5cy9wb3dlci9zdGF0ZQotICAmJiAvdXNyL3NiaW4vdmlkZW9fcG9zdCAtIHdoaWNoIHdpbGwgaW5pdGlhbGl6ZSB0aGUgZGlzcGxheSBpbiBjb25zb2xlIG1vZGUuCi0gIElmICB5b3UgYXJlIGluIFgsIHlvdSBjYW4gc3dpdGNoIHRvIGEgdmlydHVhbCB0ZXJtaW5hbCBhbmQgYmFjayB0byBYIHVzaW5nCi0gIENUUkwrQUxUK0YxIC0gQ1RSTCtBTFQrRjcgdG8gZ2V0IHRoZSBkaXNwbGF5IHdvcmtpbmcgaW4gZ3JhcGhpY2FsIG1vZGUgYWdhaW4uCisoOCkgb24gc29tZSBzeXN0ZW1zLCB5b3UgY2FuIHVzZSB0aGUgdmlkZW9fcG9zdCB1dGlsaXR5IGFuZCBvciAKKyAgZG8gZWNobyAzID4gL3N5cy9wb3dlci9zdGF0ZSAgJiYgL3Vzci9zYmluL3ZpZGVvX3Bvc3QgLSB3aGljaCB3aWxsIAorICBpbml0aWFsaXplIHRoZSBkaXNwbGF5IGluIGNvbnNvbGUgbW9kZS4gSWYgeW91IGFyZSBpbiBYLCB5b3UgY2FuIHN3aXRjaAorICB0byBhIHZpcnR1YWwgdGVybWluYWwgYW5kIGJhY2sgdG8gWCB1c2luZyAgQ1RSTCtBTFQrRjEgLSBDVFJMK0FMVCtGNyB0byBnZXQKKyAgdGhlIGRpc3BsYXkgd29ya2luZyBpbiBncmFwaGljYWwgbW9kZSBhZ2Fpbi4KIAogTm93LCBpZiB5b3UgcGFzcyBhY3BpX3NsZWVwPXNvbWV0aGluZywgYW5kIGl0IGRvZXMgbm90IHdvcmsgd2l0aCB5b3VyCiBiaW9zLCB5b3UnbGwgZ2V0IGEgaGFyZCBjcmFzaCBkdXJpbmcgcmVzdW1lLiBCZSBjYXJlZnVsLiBBbHNvIGl0IGlzCkBAIC0xNzcsNyArMTc3LDcgQEAKIEFzdXMgQTdWOFgJICAgIG5WaWRpYSBSSVZBIFROVDIgbW9kZWwgNjQJICBzM19iaW9zLHMzX21vZGUgKDQpCiAKIAotKCopIGZyb20gaHR0cDovL3d3dy51YnVudHVsaW51eC5vcmcvd2lraS9Ib2FyeVBNUmVzdWx0cywgbm90IHN1cmUKKygqKSBmcm9tIGh0dHBzOi8vd2lraS51YnVudHUuY29tL0hvYXJ5UE1SZXN1bHRzLCBub3Qgc3VyZQogICAgIHdoaWNoIG9wdGlvbnMgdG8gdXNlLiBJZiB5b3Uga25vdywgcGxlYXNlIHRlbGwgbWUuCiAKICgqKiopIFRvIGJlIHRlc3RlZCB3aXRoIGEgbmV3ZXIga2VybmVsLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2Jvb3Rpbmctd2l0aG91dC1vZi50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvYm9vdGluZy13aXRob3V0LW9mLnR4dAppbmRleCA0NmQyMjEwLi41NjhmYTA4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvYm9vdGluZy13aXRob3V0LW9mLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvYm9vdGluZy13aXRob3V0LW9mLnR4dApAQCAtMTA0OCw3ICsxMDQ4LDcgQEAKIAogCiBkdGMgc291cmNlIGNvZGUgY2FuIGJlIGZvdW5kIGF0Ci08aHR0cDovL296bGFicy5vcmcvfmRnaWJzb24vZHRjL2R0Yy50YXIuZ3o+Cis8aHR0cDovL2dpdC5qZGwuY29tL2dpdHdlYi8/cD1kdGMuZ2l0PgogCiBXQVJOSU5HOiBUaGlzIHZlcnNpb24gaXMgc3RpbGwgaW4gZWFybHkgZGV2ZWxvcG1lbnQgc3RhZ2U7IHRoZQogcmVzdWx0aW5nIGRldmljZS10cmVlICJibG9icyIgaGF2ZSBub3QgeWV0IGJlZW4gdmFsaWRhdGVkIHdpdGggdGhlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9kaXUudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZGl1LnR4dAppbmRleCBkZWIzNWRlLi5iNjZjYjZkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9kaXUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2RpdS50eHQKQEAgLTQsMTAgKzQsMTcgQEAKIGRyaXZlIERWSSBtb25pdG9ycy4KIAogUmVxdWlyZWQgcHJvcGVydGllczoKLS0gY29tcGF0aWJsZSA6IHNob3VsZCBiZSAiZnNsLWRpdSIuCistIGNvbXBhdGlibGUgOiBzaG91bGQgYmUgImZzbCxkaXUiIG9yICJmc2wsbXBjNTEyMS1kaXUiLgogLSByZWcgOiBzaG91bGQgY29udGFpbiBhdCBsZWFzdCBhZGRyZXNzIGFuZCBsZW5ndGggb2YgdGhlIERJVSByZWdpc3RlcgogICBzZXQuCi0tIEludGVycnVwdHMgOiBvbmUgRElVIGludGVycnVwdCBzaG91bGQgYmUgZGVzY3JpYmUgaGVyZS4KKy0gaW50ZXJydXB0cyA6IG9uZSBESVUgaW50ZXJydXB0IHNob3VsZCBiZSBkZXNjcmliZWQgaGVyZS4KKy0gaW50ZXJydXB0LXBhcmVudCA6IHRoZSBwaGFuZGxlIGZvciB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgdGhhdAorICBzZXJ2aWNlcyBpbnRlcnJ1cHRzIGZvciB0aGlzIGRldmljZS4KKworT3B0aW9uYWwgcHJvcGVydGllczoKKy0gZWRpZCA6IHZlcmJhdGltIEVESUQgZGF0YSBibG9jayBkZXNjcmliaW5nIGF0dGFjaGVkIGRpc3BsYXkuCisgIERhdGEgZnJvbSB0aGUgZGV0YWlsZWQgdGltaW5nIGRlc2NyaXB0b3Igd2lsbCBiZSB1c2VkIHRvCisgIHByb2dyYW0gdGhlIGRpc3BsYXkgY29udHJvbGxlci4KIAogRXhhbXBsZSAoTVBDODYxMEhQQ0QpOgogCWRpc3BsYXlAMmMwMDAgewpAQCAtMTYsMyArMjMsMTIgQEAKIAkJaW50ZXJydXB0cyA9IDw3MiAyPjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJfTsKKworRXhhbXBsZSBmb3IgTVBDNTEyMToKKwlkaXNwbGF5QDIxMDAgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWRpdSI7CisJCXJlZyA9IDwweDIxMDAgMHgxMDA+OworCQlpbnRlcnJ1cHRzID0gPDY0IDB4OD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQllZGlkID0gW2VkaWQtZGF0YV07CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2kyYy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9pMmMudHh0CmluZGV4IDUwZGEyMDMuLjFlYWNkNmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2kyYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvaTJjLnR4dApAQCAtMjAsNiArMjAsNyBAQAogIC0gZnNsLHByZXNlcnZlLWNsb2NraW5nIDogYm9vbGVhbjsgaWYgZGVmaW5lZCwgdGhlIGNsb2NrIHNldHRpbmdzCiAgICBmcm9tIHRoZSBib290bG9hZGVyIGFyZSBwcmVzZXJ2ZWQgKG5vdCB0b3VjaGVkKS4KICAtIGNsb2NrLWZyZXF1ZW5jeSA6IGRlc2lyZWQgSTJDIGJ1cyBjbG9jayBmcmVxdWVuY3kgaW4gSHouCisgLSBmc2wsdGltZW91dCA6IEkyQyBidXMgdGltZW91dCBpbiBtaWNyb3NlY29uZHMuCiAKIEV4YW1wbGVzIDoKIApAQCAtNTksNCArNjAsNSBAQAogCQlpbnRlcnJ1cHRzID0gPDQzIDI+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CisJCWZzbCx0aW1lb3V0ID0gPDEwMDAwPjsKIAl9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ydC1tdXRleC1kZXNpZ24udHh0IGIvRG9jdW1lbnRhdGlvbi9ydC1tdXRleC1kZXNpZ24udHh0CmluZGV4IDhkZjBiNzguLjMzZWQ4MDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcnQtbXV0ZXgtZGVzaWduLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3J0LW11dGV4LWRlc2lnbi50eHQKQEAgLTM2NCw3ICszNjQsNyBAQAogCiBUaGUgZnVuY3Rpb25zIGltcGxlbWVudGluZyB0aGUgdGFzayBhZGp1c3RtZW50cyBhcmUgcnRfbXV0ZXhfYWRqdXN0X3ByaW8sCiBfX3J0X211dGV4X2FkanVzdF9wcmlvIChzYW1lIGFzIHRoZSBmb3JtZXIsIGJ1dCBleHBlY3RzIHRoZSB0YXNrIHBpX2xvY2sKLXRvIGFscmVhZHkgYmUgdGFrZW4pLCBydF9tdXRleF9nZXRfcHJpbywgYW5kIHJ0X211dGV4X3NldHByaW8uCit0byBhbHJlYWR5IGJlIHRha2VuKSwgcnRfbXV0ZXhfZ2V0cHJpbywgYW5kIHJ0X211dGV4X3NldHByaW8uCiAKIHJ0X211dGV4X2dldHByaW8gYW5kIHJ0X211dGV4X3NldHByaW8gYXJlIG9ubHkgdXNlZCBpbiBfX3J0X211dGV4X2FkanVzdF9wcmlvLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvRGVidWdnaW5nMzkwLnR4dCBiL0RvY3VtZW50YXRpb24vczM5MC9EZWJ1Z2dpbmczOTAudHh0CmluZGV4IDFlYjU3NmEuLjg2ZjlmNzQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vczM5MC9EZWJ1Z2dpbmczOTAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vczM5MC9EZWJ1Z2dpbmczOTAudHh0CkBAIC0yNTMxLDUgKzI1MzEsNSBAQAogPT09PT09PT09PT09PT0KIFNwZWNpYWwgdGhhbmtzIHRvIE5lYWxlIEZlcmd1c29uIHdobyBtYWludGFpbnMgYSBtdWNoCiBwcmV0dGllciBIVE1MIHZlcnNpb24gb2YgdGhpcyBwYWdlIGF0Ci1odHRwOi8vcGVuZ3VpbnZtLnByaW5jZXRvbi5lZHUvbm90ZXMuaHRtbCNEZWJ1ZzM5MAoraHR0cDovL2xpbnV4dm0ub3JnL3Blbmd1aW52bS8KIEJvYiBHcmFpbmdlciBTdGVmYW4gQmFkZXIgJiBvdGhlcnMgZm9yIHJlcG9ydGluZyBidWdzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvQnVzTG9naWMudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL0J1c0xvZ2ljLnR4dAppbmRleCA5ODAyM2JhLi5kN2ZiYzk0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvQnVzTG9naWMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9CdXNMb2dpYy50eHQKQEAgLTQ3LDcgKzQ3LDcgQEAKIFRoZSBsYXRlc3QgaW5mb3JtYXRpb24gb24gTGludXggc3VwcG9ydCBmb3IgQnVzTG9naWMgU0NTSSBIb3N0IEFkYXB0ZXJzLCBhcwogd2VsbCBhcyB0aGUgbW9zdCByZWNlbnQgcmVsZWFzZSBvZiB0aGlzIGRyaXZlciBhbmQgdGhlIGxhdGVzdCBmaXJtd2FyZSBmb3IgdGhlCiBCVC05NDgvOTU4Lzk1OEQsIHdpbGwgYWx3YXlzIGJlIGF2YWlsYWJsZSBmcm9tIG15IExpbnV4IEhvbWUgUGFnZSBhdCBVUkwKLSJodHRwOi8vd3d3LmRhbmRlbGlvbi5jb20vTGludXgvIi4KKyJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2RhbmRlbGlvbi8iLgogCiBCdWcgcmVwb3J0cyBzaG91bGQgYmUgc2VudCB2aWEgZWxlY3Ryb25pYyBtYWlsIHRvICJsbnpAZGFuZGVsaW9uLmNvbSIuICBQbGVhc2UKIGluY2x1ZGUgd2l0aCB0aGUgYnVnIHJlcG9ydCB0aGUgY29tcGxldGUgY29uZmlndXJhdGlvbiBtZXNzYWdlcyByZXBvcnRlZCBieSB0aGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubHBmYyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubHBmYwppbmRleCBlNzU5ZTkyLi4zMzdjOTI0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLmxwZmMKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5scGZjCkBAIC04MDcsNyArODA3LDcgQEAKIAkgIGxwZmNfZGlzY19kb25lL2xwZmNfZG9fZHBjIGNsZWFudXAgLSBscGZjX2Rpc2NfZG9uZSBjYW4gcmV0dXJuCiAJICB2b2lkIC0gbW92ZSBscGZjX2RvX2RwYyBhbmQgbHBmY19kaXNjX2RvbmUgdG8gbHBmY19oYmFkaXNjLmMgLQogCSAgcmVtb3ZlIGNoZWNraW5nIG9mIGxpc3QgZW1wdGluZXNzIGJlZm9yZSBjYWxsaW5nIGxwZmNfZGlzY19kb25lLAotCSAgaXQgaGFuZGxlcyB0aGUgZW10cHkgbGlzdCBjYXNlIGp1c3QgZmluZSBhbmQgdGhlIGFkZGl0aW9uYWwKKwkgIGl0IGhhbmRsZXMgdGhlIGVtcHR5IGxpc3QgY2FzZSBqdXN0IGZpbmUgYW5kIHRoZSBhZGRpdGlvbmFsCiAJICBpbnN0cnVjdGlvbnMgY29zdCBsZXNzIHRoZW4gdGhlIGJ1c3Rsb2NrZWQgc3BpbmxvY2sgb3BlcmF0aW9ucy4KIAkqIEludGVncmF0ZWQgcGF0Y2ggZnJvbSBDaHJpc3RvcGggSGVsbHdpZzogVGhpcyBhZGRzIGEgbmV3IDY0Yml0CiAJICBjb3VudGVyIGluc3RlYWQsIGJyZF9ubyBpc24ndCByZXVzZWQgYW55bW9yZS4gIEFsc28gc29tZSB0aW55CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5tZWdhcmFpZAppbmRleCAzOGU5ZTdjLi41ZTA3ZDMyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWQKQEAgLTIxNSw3ICsyMTUsNyBAQAogCiAzLglDb252ZXJ0IHBjaV9tb2R1bGVfaW5pdCB0byBwY2lfcmVnaXN0ZXJfZHJpdmVyCiAJQ29udmVydCBmcm9tIHBjaV9tb2R1bGVfaW5pdCB0byBwY2lfcmVnaXN0ZXJfZHJpdmVyCi0JKGZyb206aHR0cDovL2tlcm5lbGphbml0b3JzLm9yZy9UT0RPKQorCShmcm9tOmh0dHA6Ly9rZXJuZWxuZXdiaWVzLm9yZy9LZXJuZWxKYW5pdG9ycy9UT0RPKQogCQktIFNpZ25lZC1vZmYtYnk6IERvbWVuIFB1bmNlciA8ZG9tZW5AY29kZXJvY2sub3JnPgogCiA0LglVc2UgdGhlIHByZSBkZWZpbmVkIERNQSBtYXNrIGNvbnN0YW50cyBmcm9tIGRtYS1tYXBwaW5nLmgKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9GbGFzaFBvaW50LnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9GbGFzaFBvaW50LnR4dAppbmRleCAxNTQwYTkyLi41YjVmMjljIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvRmxhc2hQb2ludC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0ZsYXNoUG9pbnQudHh0CkBAIC0xMyw3ICsxMyw3IEBACiBob3N0IGFkYXB0ZXJzLiAgQWxsIG9mIEJ1c0xvZ2ljJ3Mgb3RoZXIgU0NTSSBob3N0IGFkYXB0ZXJzLCBpbmNsdWRpbmcgdGhlCiBNdWx0aU1hc3RlciBsaW5lLCBjdXJyZW50bHkgc3VwcG9ydCB0aGUgTGludXggb3BlcmF0aW5nIHN5c3RlbS4gIExpbnV4CiBkcml2ZXJzIGFuZCBpbmZvcm1hdGlvbiB3aWxsIGJlIGF2YWlsYWJsZSBvbiBPY3RvYmVyIDE1dGggYXQKLWh0dHA6Ly93d3cuZGFuZGVsaW9uLmNvbS9MaW51eC8uCitodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2RhbmRlbGlvbi8uCiAKICJNeWxleCBpcyBjb21taXR0ZWQgdG8gc3VwcG9ydGluZyB0aGUgTGludXggY29tbXVuaXR5LCIgc2F5cyBQZXRlciBTaGFtYm9yYSwKIHZpY2UgcHJlc2lkZW50IG9mIG1hcmtldGluZyBmb3IgTXlsZXguICAiV2UgaGF2ZSBzdXBwb3J0ZWQgTGludXggZHJpdmVyCkBAIC0yNyw3ICsyNyw3IEBACiBTUEFSQywgU0dJIE1JUFMsIE1vdG9yb2xhIDY4aywgRGlnaXRhbCBBbHBoYSBBWFAgYW5kIE1vdG9yb2xhIFBvd2VyUEMKIG1hY2hpbmVzLiAgSXQgc3VwcG9ydHMgYSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlLCBpbmNsdWRpbmcgdGhlIFggV2luZG93CiBTeXN0ZW0sIEVtYWNzLCBhbmQgVENQL0lQIG5ldHdvcmtpbmcuICBGdXJ0aGVyIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBhdAotaHR0cDovL3d3dy5saW51eC5vcmcgYW5kIGh0dHA6Ly93d3cuc3NjLmNvbS9saW51eC4KK2h0dHA6Ly93d3cubGludXgub3JnIGFuZCBodHRwOi8vd3d3LnNzYy5jb20vLgogCiBGbGFzaFBvaW50IEhvc3QgQWRhcHRlcnMKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL015bGV4LnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9NeWxleC50eHQKaW5kZXggY2RmNjkyOS4uMzc5N2YzZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL015bGV4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvTXlsZXgudHh0CkBAIC0yLDQgKzIsNCBAQAogTXlsZXggKGZvcm1lcmx5IEJ1c0xvZ2ljKSBNdWx0aU1hc3RlciBhbmQgRmxhc2hQb2ludCBTQ1NJIEhvc3QgQWRhcHRlcnMuCiAKIFRoZSBNeWxleCBEQUM5NjAgUENJIFJBSUQgQ29udHJvbGxlcnMgYXJlIG5vdyBzdXBwb3J0ZWQuICBQbGVhc2UgY29uc3VsdAotaHR0cDovL3d3dy5kYW5kZWxpb24uY29tL0xpbnV4LyBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiBvbiB0aGUgREFDOTYwIGRyaXZlci4KK2h0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZGFuZGVsaW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uIHRoZSBEQUM5NjAgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL05pbmphU0NTSS50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvTmluamFTQ1NJLnR4dAppbmRleCAzMjI5YjY0Li5hYzhkYjhjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvTmluamFTQ1NJLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvTmluamFTQ1NJLnR4dApAQCAtMyw4ICszLDYgQEAKIAogMS4gQ29tbWVudAogIFRoaXMgaXMgV29ya2JpdCBjb3JwLidzKGh0dHA6Ly93d3cud29ya2JpdC5jby5qcC8pIE5pbmphU0NTSS0zCi0oaHR0cDovL3d3dy53b3JrYml0LmNvLmpwL3RzL3pfbmozci5odG1sKSBhbmQgTmluamFTQ1NJLTMyQmkKLShodHRwOi8vd3d3LndvcmtiaXQuY28uanAvdHMvel9uanNjMzJiaS5odG1sKSBQQ01DSUEgY2FyZCBkcml2ZXIgbW9kdWxlCiBmb3IgTGludXguCiAKIDIuIE15IExpbnV4IGVudmlyb25tZW50CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvYWljNzl4eC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvYWljNzl4eC50eHQKaW5kZXggYzAxNGVjYy4uMTZlMDU0YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL2FpYzc5eHgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9haWM3OXh4LnR4dApAQCAtNDQ3LDcgKzQ0Nyw3IEBACiAgICAgICBodHRwOi8vd3d3LmFkYXB0ZWMuY29tL2J1eS1jYWJsZXMvLgogCiAgICBFdXJvcGUKLSAgICAtIFZpc2l0IG91ciBXZWIgc2l0ZSBhdCBodHRwOi8vd3d3LmFkYXB0ZWMtZXVyb3BlLmNvbS8uCisgICAgLSBWaXNpdCBvdXIgV2ViIHNpdGUgYXQgaHR0cDovL3d3dy5hZGFwdGVjLmNvbS9lbi1VUy9fY29tbW9uL3dvcmxkX2luZGV4LgogICAgIC0gVG8gc3BlYWsgd2l0aCBhIFRlY2huaWNhbCBTdXBwb3J0IFNwZWNpYWxpc3QsIGNhbGwsIG9yIGVtYWlsLAogICAgICAgKiBHZXJtYW46ICArNDkgODkgNDM2NiA1NTIyLCBNb25kYXktRnJpZGF5LCA5OjAwLTE3OjAwIENFVCwKICAgICAgICAgaHR0cDovL2Fzay1kZS5hZGFwdGVjLmNvbS8uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvYWljN3h4eC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvYWljN3h4eC50eHQKaW5kZXggYjdlMjM4Yy4uMThmOGQxOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL2FpYzd4eHgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9haWM3eHh4LnR4dApAQCAtMzQ0LDcgKzM0NCw3IEBACiAgICAgICBodHRwOi8vd3d3LmFkYXB0ZWMuY29tL2J1eS1jYWJsZXMvLgogCiAgICBFdXJvcGUKLSAgICAtIFZpc2l0IG91ciBXZWIgc2l0ZSBhdCBodHRwOi8vd3d3LmFkYXB0ZWMtZXVyb3BlLmNvbS8uCisgICAgLSBWaXNpdCBvdXIgV2ViIHNpdGUgYXQgaHR0cDovL3d3dy5hZGFwdGVjLmNvbS9lbi1VUy9fY29tbW9uL3dvcmxkX2luZGV4LgogICAgIC0gVG8gc3BlYWsgd2l0aCBhIFRlY2huaWNhbCBTdXBwb3J0IFNwZWNpYWxpc3QsIGNhbGwsIG9yIGVtYWlsLAogICAgICAgKiBHZXJtYW46ICArNDkgODkgNDM2NiA1NTIyLCBNb25kYXktRnJpZGF5LCA5OjAwLTE3OjAwIENFVCwKICAgICAgICAgaHR0cDovL2Fzay1kZS5hZGFwdGVjLmNvbS8uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvaHBzYS50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvaHBzYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNhNjU4MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9ocHNhLnR4dApAQCAtMCwwICsxLDEwNyBAQAorCitIUFNBIC0gSGV3bGV0dCBQYWNrYXJkIFNtYXJ0IEFycmF5IGRyaXZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgaHBzYSBTQ1NJIGRyaXZlciBmb3IgSFAgU21hcnQgQXJyYXkgY29udHJvbGxlcnMuCitUaGUgaHBzYSBkcml2ZXIgaXMgaW50ZW5kZWQgdG8gc3VwcGxhbnQgdGhlIGNjaXNzIGRyaXZlciBmb3IgbmV3ZXIKK1NtYXJ0IEFycmF5IGNvbnRyb2xsZXJzLiAgVGhlIGhwc2EgZHJpdmVyIGlzIGEgU0NTSSBkcml2ZXIsIHdoaWxlIHRoZQorY2Npc3MgZHJpdmVyIGlzIGEgImJsb2NrIiBkcml2ZXIuICBBY3R1YWxseSBjY2lzcyBpcyBib3RoIGEgYmxvY2sKK2RyaXZlciAoZm9yIGxvZ2ljYWwgZHJpdmVzKSBBTkQgYSBTQ1NJIGRyaXZlciAoZm9yIHRhcGUgZHJpdmVzKS4gVGhpcworInNwbGl0LWJyYWluZWQiIGRlc2lnbiBvZiB0aGUgY2Npc3MgZHJpdmVyIGlzIGEgc291cmNlIG9mIGV4Y2VzcworY29tcGxleGl0eSBhbmQgZWxpbWluYXRpbmcgdGhhdCBjb21wbGV4aXR5IGlzIG9uZSBvZiB0aGUgcmVhc29ucworZm9yIGhwc2EgdG8gZXhpc3QuCisKK1N1cHBvcnRlZCBkZXZpY2VzOgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NtYXJ0IEFycmF5IFAyMTIKK1NtYXJ0IEFycmF5IFA0MTAKK1NtYXJ0IEFycmF5IFA0MTBpCitTbWFydCBBcnJheSBQNDExCitTbWFydCBBcnJheSBQODEyCitTbWFydCBBcnJheSBQNzEybQorU21hcnQgQXJyYXkgUDcxMW0KK1N0b3JhZ2VXb3JrcyBQMTIxMG0KKworQWRkaXRpb25hbGx5LCBvbGRlciBTbWFydCBBcnJheXMgbWF5IHdvcmsgd2l0aCB0aGUgaHBzYSBkcml2ZXIgaWYgdGhlIGtlcm5lbAorYm9vdCBwYXJhbWV0ZXIgImhwc2FfYWxsb3dfYW55PTEiIGlzIHNwZWNpZmllZCwgaG93ZXZlciB0aGVzZSBhcmUgbm90IHRlc3RlZAorbm9yIHN1cHBvcnRlZCBieSBIUCB3aXRoIHRoaXMgZHJpdmVyLiAgRm9yIG9sZGVyIFNtYXJ0IEFycmF5cywgdGhlIGNjaXNzCitkcml2ZXIgc2hvdWxkIHN0aWxsIGJlIHVzZWQuCisKK0hQU0Egc3BlY2lmaWMgZW50cmllcyBpbiAvc3lzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIEluIGFkZGl0aW9uIHRvIHRoZSBnZW5lcmljIFNDU0kgYXR0cmlidXRlcyBhdmFpbGFibGUgaW4gL3N5cywgaHBzYSBzdXBwb3J0cworICB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CisKKyAgSFBTQSBzcGVjaWZpYyBob3N0IGF0dHJpYnV0ZXM6CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIC9zeXMvY2xhc3Mvc2NzaV9ob3N0L2hvc3QqL3Jlc2NhbgorICAvc3lzL2NsYXNzL3Njc2lfaG9zdC9ob3N0Ki9maXJtd2FyZV9yZXZpc2lvbgorCisgIHRoZSBob3N0ICJyZXNjYW4iIGF0dHJpYnV0ZSBpcyBhIHdyaXRlIG9ubHkgYXR0cmlidXRlLiAgV3JpdGluZyB0byB0aGlzCisgIGF0dHJpYnV0ZSB3aWxsIGNhdXNlIHRoZSBkcml2ZXIgdG8gc2NhbiBmb3IgbmV3LCBjaGFuZ2VkLCBvciByZW1vdmVkIGRldmljZXMKKyAgKGUuZy4gaG90LXBsdWdnZWQgdGFwZSBkcml2ZXMsIG9yIG5ld2x5IGNvbmZpZ3VyZWQgb3IgZGVsZXRlZCBsb2dpY2FsIGRyaXZlcywKKyAgZXRjLikgYW5kIG5vdGlmeSB0aGUgU0NTSSBtaWRsYXllciBvZiBhbnkgY2hhbmdlcyBkZXRlY3RlZC4gIE5vcm1hbGx5IHRoaXMgaXMKKyAgdHJpZ2dlcmVkIGF1dG9tYXRpY2FsbHkgYnkgSFAncyBBcnJheSBDb25maWd1cmF0aW9uIFV0aWxpdHkgKGVpdGhlciB0aGUgR1VJIG9yCisgIGNvbW1hbmQgbGluZSB2YXJpZXR5KSBzbyBmb3IgbG9naWNhbCBkcml2ZSBjaGFuZ2VzLCB0aGUgdXNlciBzaG91bGQgbm90CisgIG5vcm1hbGx5IGhhdmUgdG8gdXNlIHRoaXMuICBJdCBtYXkgYmUgdXNlZnVsIHdoZW4gaG90IHBsdWdnaW5nIGRldmljZXMgbGlrZQorICB0YXBlIGRyaXZlcywgb3IgZW50aXJlIHN0b3JhZ2UgYm94ZXMgY29udGFpbmluZyBwcmUtY29uZmlndXJlZCBsb2dpY2FsIGRyaXZlcy4KKworICBUaGUgImZpcm13YXJlX3JldmlzaW9uIiBhdHRyaWJ1dGUgY29udGFpbnMgdGhlIGZpcm13YXJlIHZlcnNpb24gb2YgdGhlIFNtYXJ0IEFycmF5LgorICBGb3IgZXhhbXBsZToKKworCXJvb3RAaG9zdDovc3lzL2NsYXNzL3Njc2lfaG9zdC9ob3N0NCMgY2F0IGZpcm13YXJlX3JldmlzaW9uCisJNy4xNAorCisgIEhQU0Egc3BlY2lmaWMgZGlzayBhdHRyaWJ1dGVzOgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAvc3lzL2NsYXNzL3Njc2lfZGlzay9jOmI6dDpsL2RldmljZS91bmlxdWVfaWQKKyAgL3N5cy9jbGFzcy9zY3NpX2Rpc2svYzpiOnQ6bC9kZXZpY2UvcmFpZF9sZXZlbAorICAvc3lzL2NsYXNzL3Njc2lfZGlzay9jOmI6dDpsL2RldmljZS9sdW5pZAorCisgICh3aGVyZSBjOmI6dDpsIGFyZSB0aGUgY29udHJvbGxlciwgYnVzLCB0YXJnZXQgYW5kIGx1biBvZiB0aGUgZGV2aWNlKQorCisgIEZvciBleGFtcGxlOgorCisJcm9vdEBob3N0Oi9zeXMvY2xhc3Mvc2NzaV9kaXNrLzQ6MDowOjAvZGV2aWNlIyBjYXQgdW5pcXVlX2lkCisJNjAwNTA4QjEwMDEwNDQzOTUzNTUzMjMwMzc1NzBGNzcKKwlyb290QGhvc3Q6L3N5cy9jbGFzcy9zY3NpX2Rpc2svNDowOjA6MC9kZXZpY2UjIGNhdCBsdW5pZAorCTB4MDAwMDAwNDAwMDAwMDAwMAorCXJvb3RAaG9zdDovc3lzL2NsYXNzL3Njc2lfZGlzay80OjA6MDowL2RldmljZSMgY2F0IHJhaWRfbGV2ZWwKKwlSQUlEIDAKKworSFBTQSBzcGVjaWZpYyBpb2N0bHM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIGFwcGxpY2F0aW9ucyB3cml0dGVuIGZvciB0aGUgY2Npc3MgZHJpdmVyLCBtYW55LCBidXQKKyAgbm90IGFsbCBvZiB0aGUgaW9jdGxzIHN1cHBvcnRlZCBieSB0aGUgY2Npc3MgZHJpdmVyIGFyZSBhbHNvIHN1cHBvcnRlZCBieSB0aGUKKyAgaHBzYSBkcml2ZXIuICBUaGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgYnkgdGhlc2UgYXJlIGRlc2NyaWJlZCBpbgorICBpbmNsdWRlL2xpbnV4L2NjaXNzX2lvY3RsLmgKKworICBDQ0lTU19ERVJFR0RJU0sKKyAgQ0NJU1NfUkVHTkVXRElTSworICBDQ0lTU19SRUdORVdECisKKyAgVGhlIGFib3ZlIHRocmVlIGlvY3RscyBhbGwgZG8gZXhhY3RseSB0aGUgc2FtZSB0aGluZywgd2hpY2ggaXMgdG8gY2F1c2UgdGhlIGRyaXZlcgorICB0byByZXNjYW4gZm9yIG5ldyBkZXZpY2VzLiAgVGhpcyBkb2VzIGV4YWN0bHkgdGhlIHNhbWUgdGhpbmcgYXMgd3JpdGluZyB0byB0aGUKKyAgaHBzYSBzcGVjaWZpYyBob3N0ICJyZXNjYW4iIGF0dHJpYnV0ZS4KKworICBDQ0lTU19HRVRQQ0lJTkZPCisKKwlSZXR1cm5zIFBDSSBkb21haW4sIGJ1cywgZGV2aWNlIGFuZCBmdW5jdGlvbiBhbmQgImJvYXJkIElEIiAoUENJIHN1YnN5c3RlbSBJRCkuCisKKyAgQ0NJU1NfR0VURFJJVlZFUgorCisJUmV0dXJucyBkcml2ZXIgdmVyc2lvbiBpbiB0aHJlZSBieXRlcyBlbmNvZGVkIGFzOgorCQkobWFqb3JfdmVyc2lvbiA8PCAxNikgfCAobWlub3JfdmVyc2lvbiA8PCA4KSB8IChzdWJtaW5vcl92ZXJzaW9uKQorCisgIENDSVNTX1BBU1NUSFJVCisgIENDSVNTX0JJR19QQVNTVEhSVQorCisJQWxsb3dzICJCTUlDIiBhbmQgIkNJU1MiIGNvbW1hbmRzIHRvIGJlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBTbWFydCBBcnJheS4KKwlUaGVzZSBhcmUgdXNlZCBleHRlbnNpdmVseSBieSB0aGUgSFAgQXJyYXkgQ29uZmlndXJhdGlvbiBVdGlsaXR5LCBTTk1QIHN0b3JhZ2UKKwlhZ2VudHMsIGV0Yy4gIFNlZSBjY2lzc192b2xfc3RhdHVzIGF0IGh0dHA6Ly9jY2lzcy5zZi5uZXQgZm9yIHNvbWUgZXhhbXBsZXMuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9pYm1tY2EudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL2libW1jYS50eHQKaW5kZXggMzkyMGYyOC4uNDVkNjFhZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL2libW1jYS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2libW1jYS50eHQKQEAgLTExMDksNyArMTEwOSw3IEBACiAgICAgIFE6IFdoZXJlIGNhbiBJIGZpbmQgdGhlIGxhdGVzdCBpbmZvIGFib3V0IHRoaXMgZHJpdmVyPwogICAgICBBOiBTZWUgdGhlIGZpbGUgTUFJTlRBSU5FUlMgZm9yIHRoZSBjdXJyZW50IFdXVy1hZGRyZXNzLCB3aGljaCBvZmZlcnMKICAgICAgICAgdXBkYXRlcywgaW5mbyBhbmQgUS9BIGxpc3RzLiBBdCB0aGlzIGZpbGUncyBvcmlnaW4sIHRoZSB3ZWJhZGRyZXNzCi0Jd2FzOiBodHRwOi8vd3d3LnVuaS1tYWluei5kZS9+bGFuZ20wMDAvbGludXguaHRtbAorCXdhczogaHR0cDovL3d3dy5zdGFmZi51bmktbWFpbnouZGUvbWxhbmcvbGludXguaHRtbAogICAgICBROiBNeSBTQ1NJLWFkYXB0ZXIgaXMgbm90IHJlY29nbml6ZWQgYnkgdGhlIGRyaXZlciwgd2hhdCBjYW4gSSBkbz8KICAgICAgQTogSnVzdCBmb3JjZSBpdCB0byBiZSByZWNvZ25pemVkIGJ5IGtlcm5lbCBwYXJhbWV0ZXJzLiBTZWUgc2VjdGlvbiA1LjEuCiAgICAgICAgIElmIHRoaXMgcmVhbGx5IGhhcHBlbnMsIGRvIGFsc28gc2VuZCBlLW1haWwgdG8gdGhlIG1haW50YWluZXIsIGFzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvb3NzdC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvb3NzdC50eHQKaW5kZXggMmIyMTg5MC4uYWQ4NmM2ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL29zc3QudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9vc3N0LnR4dApAQCAtMTM1LDcgKzEzNSw3IEBACiBhIENWUyByZXBvc2l0b3J5IGFuZCBzb21lIHdlYiBwYWdlcy4gCiBUaGUgdGVzdGVyJ3MgcGFnZXMgd2hpY2ggY29udGFpbiByZWNlbnQgbmV3cyBhbmQgdXBkYXRlZCBkcml2ZXJzIHRvIGRvd25sb2FkCiBjYW4gYmUgZm91bmQgb24KLWh0dHA6Ly9saW51eDEub25zdHJlYW0ubmwvdGVzdC8KK2h0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvb3NzdC8KIAogSWYgeW91IGZpbmQgYW55IHByb2JsZW1zLCBwbGVhc2UgaGF2ZSBhIGxvb2sgYXQgdGhlIHRlc3RlcidzIHBhZ2UgaW4gb3JkZXIKIHRvIHNlZSB3aGV0aGVyIHRoZSBwcm9ibGVtIGlzIGFscmVhZHkga25vd24gYW5kIHNvbHZlZC4gT3RoZXJ3aXNlLCBwbGVhc2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9wcGEudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3BwYS50eHQKaW5kZXggMDY3YWMzOS4uMDVmZjQ3ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL3BwYS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3BwYS50eHQKQEAgLTEsMTMgKzEsMTMgQEAKIC0tLS0tLS0tIFRlcnNlIHdoZXJlIHRvIGdldCBaSVAgRHJpdmUgaGVscCBpbmZvIC0tLS0tLS0tCiAKIEdlbmVyYWwgSW9tZWdhIFpJUCBkcml2ZSBwYWdlIGZvciBMaW51eDoKLWh0dHA6Ly93d3cudG9ycXVlLm5ldC9+Y2FtcGJlbGwvCitodHRwOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8qL2h0dHA6Ly93d3cudG9ycXVlLm5ldC9+Y2FtcGJlbGwvCiAKIERyaXZlciBhcmNoaXZlIGZvciBvbGQgZHJpdmVyczoKLWh0dHA6Ly93d3cudG9ycXVlLm5ldC9+Y2FtcGJlbGwvcHBhLworaHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIvKi9odHRwOi8vd3d3LnRvcnF1ZS5uZXQvfmNhbXBiZWxsL3BwYQogCiBMaW51eCBQYXJwb3J0IHBhZ2UgKHBhcmFsbGVsIHBvcnQpCi1odHRwOi8vd3d3LnRvcnF1ZS5uZXQvcGFycG9ydC8KK2h0dHA6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLyovaHR0cDovL3d3dy50b3JxdWUubmV0L3BhcnBvcnQvCiAKIEVtYWlsIGxpc3QgZm9yIExpbnV4IFBhcnBvcnQKIGxpbnV4LXBhcnBvcnRAdG9ycXVlLm5ldApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2ktZ2VuZXJpYy50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaS1nZW5lcmljLnR4dAppbmRleCBjMzhlMmIzLi4wYTIyYWI4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaS1nZW5lcmljLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaS1nZW5lcmljLnR4dApAQCAtMzQsMTEgKzM0LDExIEBACiBUaGlzIGRlc2NyaWJlcyB0aGUgc2cgdmVyc2lvbiAzIGRyaXZlciBmb3VuZCBpbiB0aGUgbGsgMi40IHNlcmllcy4KIFRoZSBMRFAgcmVuZGVycyBkb2N1bWVudHMgaW4gc2luZ2xlIGFuZCBtdWx0aXBsZSBwYWdlIEhUTUwsIHBvc3RzY3JpcHQKIGFuZCBwZGYuIFRoaXMgZG9jdW1lbnQgY2FuIGFsc28gYmUgZm91bmQgYXQ6Ci1odHRwOi8vd3d3LnRvcnF1ZS5uZXQvc2cvcC9zZ192M19oby5odG1sCitodHRwOi8vc2cuZGFubnkuY3ovc2cvcC9zZ192M19oby5odG1sCiAKIERvY3VtZW50YXRpb24gZm9yIHRoZSB2ZXJzaW9uIDIgc2cgZHJpdmVyIGZvdW5kIGluIHRoZSBsayAyLjIgc2VyaWVzIGNhbgotYmUgZm91bmQgYXQgaHR0cDovL3d3dy50b3JxdWUubmV0L3NnL3Avc2NzaS1nZW5lcmljLnR4dCAuIEEgbGFyZ2VyIHZlcnNpb24KLWlzIGF0OiAgaHR0cDovL3d3dy50b3JxdWUubmV0L3NnL3Avc2NzaS1nZW5lcmljX2xvbmcudHh0IC4KK2JlIGZvdW5kIGF0IGh0dHA6Ly9zZy5kYW5ueS5jei9zZy8uIEEgbGFyZ2VyIHZlcnNpb24KK2lzIGF0OiBodHRwOi8vc2cuZGFubnkuY3ovc2cvcC9zY3NpLWdlbmVyaWNfbG9uZy50eHQuCiAKIFRoZSBvcmlnaW5hbCBkb2N1bWVudGF0aW9uIGZvciB0aGUgc2cgZHJpdmVyIChwcmlvciB0byBsayAyLjIuNikgY2FuIGJlCiBmb3VuZCBhdCBodHRwOi8vd3d3LnRvcnF1ZS5uZXQvc2cvcC9vcmlnaW5hbC9TQ1NJLVByb2dyYW1taW5nLUhPV1RPLnR4dApAQCAtNjEsNyArNjEsNyBAQAogICAtIHNnX3V0aWxzICAgIGZvciB0aGUgc2cgdmVyc2lvbiAyIChhbmQgb3JpZ2luYWwpIGRyaXZlciBmb3VuZCBpbiBsayAyLjIKICAgICAgICAgICAgICAgICBhbmQgZWFybGllcgogQm90aCBwYWNrYWdlcyB3aWxsIHdvcmsgaW4gdGhlIGxrIDIuNCBzZXJpZXMgaG93ZXZlciBzZzNfdXRpbHMgb2ZmZXJzIG1vcmUKLWNhcGFiaWxpdGllcy4gVGhleSBjYW4gYmUgZm91bmQgYXQ6IGh0dHA6Ly93d3cudG9ycXVlLm5ldC9zZyBhbmQgCitjYXBhYmlsaXRpZXMuIFRoZXkgY2FuIGJlIGZvdW5kIGF0OiBodHRwOi8vc2cuZGFubnkuY3ovc2cvc2czX3V0aWxzLmh0bWwgYW5kIAogZnJlc2htZWF0Lm5ldAogCiBBbm90aGVyIGFwcHJvYWNoIGlzIHRvIGxvb2sgYXQgdGhlIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSB0aGUgc2cgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2kudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2kudHh0CmluZGV4IGRkMWJiZjQuLjNkOTlkMzggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaS50eHQKQEAgLTQsOCArNCw4IEBACiB0aGUgU0NTSSBzdWJzeXN0ZW0gaW4gdGhlIExpbnV4IGtlcm5lbCAobGspIDIuNCBzZXJpZXMuIFNlZToKIGh0dHA6Ly93d3cudGxkcC5vcmcvSE9XVE8vU0NTSS0yLjQtSE9XVE8gLiBUaGUgTERQIGhhcyBzaW5nbGUKIGFuZCBtdWx0aXBsZSBwYWdlIEhUTUwgcmVuZGVyaW5ncyBhcyB3ZWxsIGFzIHBvc3RzY3JpcHQgYW5kIHBkZi4KLUl0IGNhbiBhbHNvIGJlIGZvdW5kIGF0IGh0dHA6Ly93d3cudG9ycXVlLm5ldC9zY3NpL1NDU0ktMi40LUhPV1RPIC4KLQorSXQgY2FuIGFsc28gYmUgZm91bmQgYXQ6CitodHRwOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8qL2h0dHA6Ly93d3cudG9ycXVlLm5ldC9zY3NpL1NDU0ktMi40LUhPV1RPCiAKIE5vdGVzIG9uIHVzaW5nIG1vZHVsZXMgaW4gdGhlIFNDU0kgc3Vic3lzdGVtCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfbWlkX2xvd19hcGkudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfbWlkX2xvd19hcGkudHh0CmluZGV4IGRlNjcyMjkuLjU3MGVmMmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX21pZF9sb3dfYXBpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9taWRfbG93X2FwaS50eHQKQEAgLTQzLDcgKzQzLDcgQEAKIHR5cGljYWxseSBEb2N1bWVudGF0aW9uL3Njc2kgLiBNb3N0IGRvY3VtZW50cyBhcmUgaW4gcGxhaW4KIChpLmUuIEFTQ0lJKSB0ZXh0LiBUaGlzIGZpbGUgaXMgbmFtZWQgc2NzaV9taWRfbG93X2FwaS50eHQgYW5kIGNhbiBiZSAKIGZvdW5kIGluIHRoYXQgZGlyZWN0b3J5LiBBIG1vcmUgcmVjZW50IGNvcHkgb2YgdGhpcyBkb2N1bWVudCBtYXkgYmUgZm91bmQKLWF0IGh0dHA6Ly93d3cudG9ycXVlLm5ldC9zY3NpL3Njc2lfbWlkX2xvd19hcGkudHh0Lmd6IC4gCithdCBodHRwOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDA3MDEwNzE4MzM1N3JuXzEvc2cudG9ycXVlLm5ldC9zY3NpLy4gCiBNYW55IExMRHMgYXJlIGRvY3VtZW50ZWQgdGhlcmUgKGUuZy4gYWljN3h4eC50eHQpLiBUaGUgU0NTSSBtaWQtbGV2ZWwgaXMKIGJyaWVmbHkgZGVzY3JpYmVkIGluIHNjc2kudHh0IHdoaWNoIGNvbnRhaW5zIGEgdXJsIHRvIGEgZG9jdW1lbnQgCiBkZXNjcmliaW5nIHRoZSBTQ1NJIHN1YnN5c3RlbSBpbiB0aGUgbGsgMi40IHNlcmllcy4gVHdvIHVwcGVyIGxldmVsIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zZXJpYWwvbW94YS1zbWFydGlvIGIvRG9jdW1lbnRhdGlvbi9zZXJpYWwvbW94YS1zbWFydGlvCmluZGV4IDUzMzdlODAuLmQxMDQ0MzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2VyaWFsL21veGEtc21hcnRpbworKysgYi9Eb2N1bWVudGF0aW9uL3NlcmlhbC9tb3hhLXNtYXJ0aW8KQEAgLTc2LDcgKzc2LDcgQEAKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluIHRoaXMgdmVyc2lvbi4gUGxlYXNlIHJlZmVyIHRvIEdOVSBHZW5lcmFsCiAgICBQdWJsaWMgTGljZW5zZSBhbm5vdW5jZW1lbnQgaW4gZWFjaCBzb3VyY2UgY29kZSBmaWxlIGZvciBtb3JlIGRldGFpbC4KIAotICAgSW4gTW94YSdzIFdlYiBzaXRlcywgeW91IG1heSBhbHdheXMgZmluZCBsYXRlc3QgZHJpdmVyIGF0IGh0dHA6Ly93ZWIubW94YS5jb20uCisgICBJbiBNb3hhJ3MgV2ViIHNpdGVzLCB5b3UgbWF5IGFsd2F5cyBmaW5kIGxhdGVzdCBkcml2ZXIgYXQgaHR0cDovL3d3dy5tb3hhLmNvbS8uCiAKICAgIFRoaXMgdmVyc2lvbiBvZiBkcml2ZXIgY2FuIGJlIGluc3RhbGxlZCBhcyBMb2FkYWJsZSBNb2R1bGUgKE1vZHVsZSBkcml2ZXIpCiAgICBvciBidWlsdC1pbiBpbnRvIGtlcm5lbCAoU3RhdGljIGRyaXZlcikuIFlvdSBtYXkgcmVmZXIgdG8gZm9sbG93aW5nCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CmluZGV4IDIwNzViYmIuLjdmNGRjZWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CkBAIC0xMjg1LDcgKzEyODUsNyBAQAogICAgIGFib3V0IHRoaXMgZHJpdmVyLiAgTm90ZSB0aGF0IGl0IGhhcyBiZWVuIGRpc2NvbnRpbnVlZCwgYnV0IHRoZSAKICAgICBWb3lldHJhIFR1cnRsZSBCZWFjaCBrbm93bGVkZ2UgYmFzZSBlbnRyeSBmb3IgaXQgaXMgc3RpbGwgYXZhaWxhYmxlCiAgICAgYXQKLQlodHRwOi8vd3d3LnR1cnRsZWJlYWNoLmNvbS9zaXRlL2tiX2Z0cC83OTAuYXNwCisJaHR0cDovL3d3dy50dXJ0bGViZWFjaC5jb20KIAogICBNb2R1bGUgc25kLW1zbmQtcGlubmFjbGUKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLnR4dAppbmRleCBiZGFmZGJkLi4yNzhjYzIxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8udHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby50eHQKQEAgLTU2Miw3ICs1NjIsNyBAQAogU2VuZCBhIGJ1ZyByZXBvcnQgZWl0aGVyIHRoZSBmb2xsb3dpbmdzOgogCiBrZXJuZWwtYnVnemlsbGE6OgotICBodHRwOi8vYnVnbWUubGludXgtZm91bmRhdGlvbi5vcmcvCisgIGh0dHBzOi8vYnVnemlsbGEua2VybmVsLm9yZy8KIGFsc2EtZGV2ZWwgTUw6OgogICBhbHNhLWRldmVsQGFsc2EtcHJvamVjdC5vcmcKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NvYy9EQUkudHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NvYy9EQUkudHh0CmluZGV4IDBlYmQ3ZWEuLmM5Njc5MjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9zb2MvREFJLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc29jL0RBSS50eHQKQEAgLTEzLDcgKzEzLDcgQEAKIGZyYW1lIGlzIDIxdVMgbG9uZyBhbmQgaXMgZGl2aWRlZCBpbnRvIDEzIHRpbWUgc2xvdHMuCiAKIFRoZSBBQzk3IHNwZWNpZmljYXRpb24gY2FuIGJlIGZvdW5kIGF0IDotCi1odHRwOi8vd3d3LmludGVsLmNvbS9kZXNpZ24vY2hpcHNldHMvYXVkaW8vYWM5N19yMjMucGRmCitodHRwOi8vd3d3LmludGVsLmNvbS9wL2VuX1VTL2J1c2luZXNzL2Rlc2lnbgogCiAKIEkyUwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NvYy9jb2RlYy50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc29jL2NvZGVjLnR4dAppbmRleCAxZTk1MzQyLi4zN2JhM2E3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc29jL2NvZGVjLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc29jL2NvZGVjLnR4dApAQCAtMTQzLDcgKzE0Myw3IEBACiB9OwogCiBQbGVhc2UgcmVmZXIgdG8gdGhlIEFMU0EgZHJpdmVyIFBDTSBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgotaHR0cDovL3d3dy5hbHNhLXByb2plY3Qub3JnL35pd2FpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIvYzQzNi5odG0KK2h0dHA6Ly93d3cuYWxzYS1wcm9qZWN0Lm9yZy9+aXdhaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLwogCiAKIDUgLSBEQVBNIGRlc2NyaXB0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NvYy9wbGF0Zm9ybS50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc29jL3BsYXRmb3JtLnR4dAppbmRleCBiNjgxZDE3Li4wNmQ4MzU5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc29jL3BsYXRmb3JtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc29jL3BsYXRmb3JtLnR4dApAQCAtMzksNyArMzksNyBAQAogfTsKIAogUGxlYXNlIHJlZmVyIHRvIHRoZSBBTFNBIGRyaXZlciBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzIG9mIGF1ZGlvIERNQS4KLWh0dHA6Ly93d3cuYWxzYS1wcm9qZWN0Lm9yZy9+aXdhaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyL2M0MzYuaHRtCitodHRwOi8vd3d3LmFsc2EtcHJvamVjdC5vcmcvfml3YWkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci8KIAogQW4gZXhhbXBsZSBETUEgZHJpdmVyIGlzIHNvYy9weGEvcHhhMnh4LXBjbS5jCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1JFQURNRS5PU1MgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9SRUFETUUuT1NTCmluZGV4IGZkNDJiMDUuLmM2MTVkZWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1JFQURNRS5PU1MKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUkVBRE1FLk9TUwpAQCAtMzYsNyArMzYsNyBAQAogCiBQYWNrYWdlcyAic25kLXV0aWwtMy44LnRhci5neiIgYW5kICJzbmQtZGF0YS0wLjEudGFyLloiCiBjb250YWluIHVzZWZ1bCB1dGlsaXRpZXMgdG8gYmUgdXNlZCB3aXRoIHRoaXMgZHJpdmVyLgotU2VlIGh0dHA6Ly93d3cub3BlbnNvdW5kLmNvbS9vc3NmcmVlL2dldHRpbmcuaHRtbCBmb3IKK1NlZSBodHRwOi8vd3d3Lm9wZW5zb3VuZC5jb20vb3NzZnJlZS8gZm9yCiBkb3dubG9hZCBpbnN0cnVjdGlvbnMuCiAKIElmIHlvdSBhcmUgbG9va2luZyBmb3IgdGhlIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMsIHBsZWFzZQpAQCAtMTQzOCw3ICsxNDM4LDcgQEAKIFRoZXJlIGFyZSBzb21lIGNvbW1vbiBhdWRpbyBjaGlwc2V0cyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIHlldC4gRm9yIGV4YW1wbGUKIFNpZXJyYSBBcmlhIGFuZCBJQk0gTXdhdmUuIEl0J3MgcG9zc2libGUgdGhhdCB0aGVzZSBhcmNoaXRlY3R1cmVzCiBnZXQgc29tZSBzdXBwb3J0IGluIGZ1dHVyZSBidXQgSSBjYW4ndCBtYWtlIGFueSBwcm9taXNlcy4gSnVzdCBsb29rCi1hdCB0aGUgaG9tZSBwYWdlIChodHRwOi8vd3d3Lm9wZW5zb3VuZC5jb20vb3NzZnJlZS9uZXdfY2FyZHMuaHRtbCkKK2F0IHRoZSBob21lIHBhZ2UgKGh0dHA6Ly93d3cub3BlbnNvdW5kLmNvbS9vc3NmcmVlLykKIGZvciBsYXRlc3QgaW5mby4KIAogSW5mb3JtYXRpb24gYWJvdXQgdW5zdXBwb3J0ZWQgc291bmQgY2FyZHMgYW5kIGNoaXBzZXRzIGlzIHdlbGNvbWUgYXMgd2VsbApAQCAtMTQ0OSw3ICsxNDQ5LDYgQEAKIEhhbm51IFNhdm9sYWluZW4KIGhhbm51QG9wZW5zb3VuZC5jb20KIAotUGVyc29uYWwgaG9tZSBwYWdlOgkgICBodHRwOi8vd3d3LmNvbXB1c29uaWMuZmkvfmhhbm51CiBob21lIHBhZ2Ugb2YgT1NTL0ZyZWU6IGh0dHA6Ly93d3cub3BlbnNvdW5kLmNvbS9vc3NmcmVlCiAKIGhvbWUgcGFnZSBvZiBjb21tZXJjaWFsIE9TUwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zcGFyc2UudHh0IGIvRG9jdW1lbnRhdGlvbi9zcGFyc2UudHh0CmluZGV4IDliNjU5YzcuLjQ5MDlkNDEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc3BhcnNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NwYXJzZS50eHQKQEAgLTEsNSArMSw1IEBACiBDb3B5cmlnaHQgMjAwNCBMaW51cyBUb3J2YWxkcwotQ29weXJpZ2h0IDIwMDQgUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PgorQ29weXJpZ2h0IDIwMDQgUGF2ZWwgTWFjaGVrIDxwYXZlbEB1Y3cuY3o+CiBDb3B5cmlnaHQgMjAwNiBCb2IgQ29wZWxhbmQgPG1lQGJvYmNvcGVsYW5kLmNvbT4KIAogVXNpbmcgc3BhcnNlIGZvciB0eXBlY2hlY2tpbmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzY3RsL3ZtLnR4dCBiL0RvY3VtZW50YXRpb24vc3lzY3RsL3ZtLnR4dAppbmRleCA1ZmRiYjYxLi44MmIyZGExIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC92bS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwvdm0udHh0CkBAIC0xOTYsNyArMTk2LDcgQEAKIAogbGVnYWN5X3ZhX2xheW91dAogCi1JZiBub24temVybywgdGhpcyBzeXNjdGwgZGlzYWJsZXMgdGhlIG5ldyAzMi1iaXQgbW1hcCBtbWFwIGxheW91dCAtIHRoZSBrZXJuZWwKK0lmIG5vbi16ZXJvLCB0aGlzIHN5c2N0bCBkaXNhYmxlcyB0aGUgbmV3IDMyLWJpdCBtbWFwIGxheW91dCAtIHRoZSBrZXJuZWwKIHdpbGwgdXNlIHRoZSBsZWdhY3kgKDIuNCkgbGF5b3V0IGZvciBhbGwgcHJvY2Vzc2VzLgogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWxlcGhvbnkvaXhqLnR4dCBiL0RvY3VtZW50YXRpb24vdGVsZXBob255L2l4ai50eHQKaW5kZXggNDRkMTI0MDAuLjRmYjMxNGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVsZXBob255L2l4ai50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWxlcGhvbnkvaXhqLnR4dApAQCAtMTA4LDE0ICsxMDgsOSBAQAogCiAxLjQgIFdoZXJlIHRvIGdldCB0aGluZ3MKIAotWW91IGNhbiBkb3dubG9hZCB0aGUgbGF0ZXN0IHZlcnNpb25zIG9mIHRoZSBkcml2ZXIgZnJvbToKK0luZm8gb24gbGF0ZXN0IHZlcnNpb25zIG9mIHRoZSBkcml2ZXIgYXJlIGhlcmU6CiAKLWh0dHA6Ly93d3cucXVpY2tuZXQubmV0L2RldmVsb3AuaHRtCi0KLVlvdSBjYW4gZG93bmxvYWQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQgZnJvbToKLQotaHR0cDovL3d3dy5xdWlja25ldC5uZXQvZGV2ZWxvcC5odG0KLQoraHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIvKi9odHRwOi8vd3d3LnF1aWNrbmV0Lm5ldC9kZXZlbG9wLmh0bQogCiAxLjUgIE1haWxpbmcgTGlzdAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RpbWVycy90aW1lcnMtaG93dG8udHh0IGIvRG9jdW1lbnRhdGlvbi90aW1lcnMvdGltZXJzLWhvd3RvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWVmMjlkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90aW1lcnMvdGltZXJzLWhvd3RvLnR4dApAQCAtMCwwICsxLDEwNSBAQAorZGVsYXlzIC0gSW5mb3JtYXRpb24gb24gdGhlIHZhcmlvdXMga2VybmVsIGRlbGF5IC8gc2xlZXAgbWVjaGFuaXNtcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRvY3VtZW50IHNlZWtzIHRvIGFuc3dlciB0aGUgY29tbW9uIHF1ZXN0aW9uOiAiV2hhdCBpcyB0aGUKK1JpZ2h0V2F5IChUTSkgdG8gaW5zZXJ0IGEgZGVsYXk/IgorCitUaGlzIHF1ZXN0aW9uIGlzIG1vc3Qgb2Z0ZW4gZmFjZWQgYnkgZHJpdmVyIHdyaXRlcnMgd2hvIGhhdmUgdG8KK2RlYWwgd2l0aCBoYXJkd2FyZSBkZWxheXMgYW5kIHdobyBtYXkgbm90IGJlIHRoZSBtb3N0IGludGltYXRlbHkKK2ZhbWlsaWFyIHdpdGggdGhlIGlubmVyIHdvcmtpbmdzIG9mIHRoZSBMaW51eCBLZXJuZWwuCisKKworSW5zZXJ0aW5nIERlbGF5cworLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZmlyc3QsIGFuZCBtb3N0IGltcG9ydGFudCwgcXVlc3Rpb24geW91IG5lZWQgdG8gYXNrIGlzICJJcyBteQorY29kZSBpbiBhbiBhdG9taWMgY29udGV4dD8iICBUaGlzIHNob3VsZCBiZSBmb2xsb3dlZCBjbG9zZWx5IGJ5ICJEb2VzCitpdCByZWFsbHkgbmVlZCB0byBkZWxheSBpbiBhdG9taWMgY29udGV4dD8iIElmIHNvLi4uCisKK0FUT01JQyBDT05URVhUOgorCVlvdSBtdXN0IHVzZSB0aGUgKmRlbGF5IGZhbWlseSBvZiBmdW5jdGlvbnMuIFRoZXNlCisJZnVuY3Rpb25zIHVzZSB0aGUgamlmZmllIGVzdGltYXRpb24gb2YgY2xvY2sgc3BlZWQKKwlhbmQgd2lsbCBidXN5IHdhaXQgZm9yIGVub3VnaCBsb29wIGN5Y2xlcyB0byBhY2hpZXZlCisJdGhlIGRlc2lyZWQgZGVsYXk6CisKKwluZGVsYXkodW5zaWduZWQgbG9uZyBuc2VjcykKKwl1ZGVsYXkodW5zaWduZWQgbG9uZyB1c2VjcykKKwltZGVsYXkodW5zZ2luZWQgbG9uZyBtc2VjcykKKworCXVkZWxheSBpcyB0aGUgZ2VuZXJhbGx5IHByZWZlcnJlZCBBUEk7IG5kZWxheS1sZXZlbAorCXByZWNpc2lvbiBtYXkgbm90IGFjdHVhbGx5IGV4aXN0IG9uIG1hbnkgbm9uLVBDIGRldmljZXMuCisKKwltZGVsYXkgaXMgbWFjcm8gd3JhcHBlciBhcm91bmQgdWRlbGF5LCB0byBhY2NvdW50IGZvcgorCXBvc3NpYmxlIG92ZXJmbG93IHdoZW4gcGFzc2luZyBsYXJnZSBhcmd1bWVudHMgdG8gdWRlbGF5LgorCUluIGdlbmVyYWwsIHVzZSBvZiBtZGVsYXkgaXMgZGlzY291cmFnZWQgYW5kIGNvZGUgc2hvdWxkCisJYmUgcmVmYWN0b3JlZCB0byBhbGxvdyBmb3IgdGhlIHVzZSBvZiBtc2xlZXAuCisKK05PTi1BVE9NSUMgQ09OVEVYVDoKKwlZb3Ugc2hvdWxkIHVzZSB0aGUgKnNsZWVwW19yYW5nZV0gZmFtaWx5IG9mIGZ1bmN0aW9ucy4KKwlUaGVyZSBhcmUgYSBmZXcgbW9yZSBvcHRpb25zIGhlcmUsIHdoaWxlIGFueSBvZiB0aGVtIG1heQorCXdvcmsgY29ycmVjdGx5LCB1c2luZyB0aGUgInJpZ2h0IiBzbGVlcCBmdW5jdGlvbiB3aWxsCisJaGVscCB0aGUgc2NoZWR1bGVyLCBwb3dlciBtYW5hZ2VtZW50LCBhbmQganVzdCBtYWtlIHlvdXIKKwlkcml2ZXIgYmV0dGVyIDopCisKKwktLSBCYWNrZWQgYnkgYnVzeS13YWl0IGxvb3A6CisJCXVkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKQorCS0tIEJhY2tlZCBieSBocnRpbWVyczoKKwkJdXNsZWVwX3JhbmdlKHVuc2lnbmVkIGxvbmcgbWluLCB1bnNpZ25lZCBsb25nIG1heCkKKwktLSBCYWNrZWQgYnkgamlmZmllcyAvIGxlZ2FjeV90aW1lcnMKKwkJbXNsZWVwKHVuc2lnbmVkIGxvbmcgbXNlY3MpCisJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKHVuc2lnbmVkIGxvbmcgbXNlY3MpCisKKwlVbmxpa2UgdGhlICpkZWxheSBmYW1pbHksIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbQorCWRyaXZpbmcgZWFjaCBvZiB0aGVzZSBjYWxscyB2YXJpZXMsIHRodXMgdGhlcmUgYXJlCisJcXVpcmtzIHlvdSBzaG91bGQgYmUgYXdhcmUgb2YuCisKKworCVNMRUVQSU5HIEZPUiAiQSBGRVciIFVTRUNTICggPCB+MTB1cz8gKToKKwkJKiBVc2UgdWRlbGF5CisKKwkJLSBXaHkgbm90IHVzbGVlcD8KKwkJCU9uIHNsb3dlciBzeXN0ZW1zLCAoZW1iZWRkZWQsIE9SIHBlcmhhcHMgYSBzcGVlZC0KKwkJCXN0ZXBwZWQgUEMhKSB0aGUgb3ZlcmhlYWQgb2Ygc2V0dGluZyB1cCB0aGUgaHJ0aW1lcnMKKwkJCWZvciB1c2xlZXAgKm1heSogbm90IGJlIHdvcnRoIGl0LiBTdWNoIGFuIGV2YWx1YXRpb24KKwkJCXdpbGwgb2J2aW91c2x5IGRlcGVuZCBvbiB5b3VyIHNwZWNpZmljIHNpdHVhdGlvbiwgYnV0CisJCQlpdCBpcyBzb21ldGhpbmcgdG8gYmUgYXdhcmUgb2YuCisKKwlTTEVFUElORyBGT1IgflVTRUNTIE9SIFNNQUxMIE1TRUNTICggMTB1cyAtIDIwbXMpOgorCQkqIFVzZSB1c2xlZXBfcmFuZ2UKKworCQktIFdoeSBub3QgbXNsZWVwIGZvciAoMW1zIC0gMjBtcyk/CisJCQlFeHBsYWluZWQgb3JpZ2luYWxseSBoZXJlOgorCQkJCWh0dHA6Ly9sa21sLm9yZy9sa21sLzIwMDcvOC8zLzI1MAorCQkJbXNsZWVwKDF+MjApIG1heSBub3QgZG8gd2hhdCB0aGUgY2FsbGVyIGludGVuZHMsIGFuZAorCQkJd2lsbCBvZnRlbiBzbGVlcCBsb25nZXIgKH4yMCBtcyBhY3R1YWwgc2xlZXAgZm9yIGFueQorCQkJdmFsdWUgZ2l2ZW4gaW4gdGhlIDF+MjBtcyByYW5nZSkuIEluIG1hbnkgY2FzZXMgdGhpcworCQkJaXMgbm90IHRoZSBkZXNpcmVkIGJlaGF2aW9yLgorCisJCS0gV2h5IGlzIHRoZXJlIG5vICJ1c2xlZXAiIC8gV2hhdCBpcyBhIGdvb2QgcmFuZ2U/CisJCQlTaW5jZSB1c2xlZXBfcmFuZ2UgaXMgYnVpbHQgb24gdG9wIG9mIGhydGltZXJzLCB0aGUKKwkJCXdha2V1cCB3aWxsIGJlIHZlcnkgcHJlY2lzZSAoaXNoKSwgdGh1cyBhIHNpbXBsZQorCQkJdXNsZWVwIGZ1bmN0aW9uIHdvdWxkIGxpa2VseSBpbnRyb2R1Y2UgYSBsYXJnZSBudW1iZXIKKwkJCW9mIHVuZGVzaXJlZCBpbnRlcnJ1cHRzLgorCisJCQlXaXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSByYW5nZSwgdGhlIHNjaGVkdWxlciBpcworCQkJZnJlZSB0byBjb2FsZXNjZSB5b3VyIHdha2V1cCB3aXRoIGFueSBvdGhlciB3YWtldXAKKwkJCXRoYXQgbWF5IGhhdmUgaGFwcGVuZWQgZm9yIG90aGVyIHJlYXNvbnMsIG9yIGF0IHRoZQorCQkJd29yc3QgY2FzZSwgZmlyZSBhbiBpbnRlcnJ1cHQgZm9yIHlvdXIgdXBwZXIgYm91bmQuCisKKwkJCVRoZSBsYXJnZXIgYSByYW5nZSB5b3Ugc3VwcGx5LCB0aGUgZ3JlYXRlciBhIGNoYW5jZQorCQkJdGhhdCB5b3Ugd2lsbCBub3QgdHJpZ2dlciBhbiBpbnRlcnJ1cHQ7IHRoaXMgc2hvdWxkCisJCQliZSBiYWxhbmNlZCB3aXRoIHdoYXQgaXMgYW4gYWNjZXB0YWJsZSB1cHBlciBib3VuZCBvbgorCQkJZGVsYXkgLyBwZXJmb3JtYW5jZSBmb3IgeW91ciBzcGVjaWZpYyBjb2RlIHBhdGguIEV4YWN0CisJCQl0b2xlcmFuY2VzIGhlcmUgYXJlIHZlcnkgc2l0dWF0aW9uIHNwZWNpZmljLCB0aHVzIGl0CisJCQlpcyBsZWZ0IHRvIHRoZSBjYWxsZXIgdG8gZGV0ZXJtaW5lIGEgcmVhc29uYWJsZSByYW5nZS4KKworCVNMRUVQSU5HIEZPUiBMQVJHRVIgTVNFQ1MgKCAxMG1zKyApCisJCSogVXNlIG1zbGVlcCBvciBwb3NzaWJseSBtc2xlZXBfaW50ZXJydXB0aWJsZQorCisJCS0gV2hhdCdzIHRoZSBkaWZmZXJlbmNlPworCQkJbXNsZWVwIHNldHMgdGhlIGN1cnJlbnQgdGFzayB0byBUQVNLX1VOSU5URVJSVVBUSUJMRQorCQkJd2hlcmVhcyBtc2xlZXBfaW50ZXJydXB0aWJsZSBzZXRzIHRoZSBjdXJyZW50IHRhc2sgdG8KKwkJCVRBU0tfSU5URVJSVVBUSUJMRSBiZWZvcmUgc2NoZWR1bGluZyB0aGUgc2xlZXAuIEluCisJCQlzaG9ydCwgdGhlIGRpZmZlcmVuY2UgaXMgd2hldGhlciB0aGUgc2xlZXAgY2FuIGJlIGVuZGVkCisJCQllYXJseSBieSBhIHNpZ25hbC4gSW4gZ2VuZXJhbCwganVzdCB1c2UgbXNsZWVwIHVubGVzcworCQkJeW91IGtub3cgeW91IGhhdmUgYSBuZWVkIGZvciB0aGUgaW50ZXJydXB0aWJsZSB2YXJpYW50LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90b21veW8udHh0IGIvRG9jdW1lbnRhdGlvbi90b21veW8udHh0CmluZGV4IGIzYTIzMmMuLjIwMGEyZDMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdG9tb3lvLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RvbW95by50eHQKQEAgLTMsOCArMyw4IEBACiBUT01PWU8gaXMgYSBuYW1lLWJhc2VkIE1BQyBleHRlbnNpb24gKExTTSBtb2R1bGUpIGZvciB0aGUgTGludXgga2VybmVsLgogCiBMaXZlQ0QtYmFzZWQgdHV0b3JpYWxzIGFyZSBhdmFpbGFibGUgYXQKLWh0dHA6Ly90b21veW8uc291cmNlZm9yZ2UuanAvZW4vMS42LngvMXN0LXN0ZXAvdWJ1bnR1OC4wNC1saXZlLwotaHR0cDovL3RvbW95by5zb3VyY2Vmb3JnZS5qcC9lbi8xLjYueC8xc3Qtc3RlcC9jZW50b3M1LWxpdmUvIC4KK2h0dHA6Ly90b21veW8uc291cmNlZm9yZ2UuanAvMS43LzFzdC1zdGVwL3VidW50dTEwLjA0LWxpdmUvCitodHRwOi8vdG9tb3lvLnNvdXJjZWZvcmdlLmpwLzEuNy8xc3Qtc3RlcC9jZW50b3M1LWxpdmUvIC4KIFRob3VnaCB0aGVzZSB0dXRvcmlhbHMgdXNlIG5vbi1MU00gdmVyc2lvbiBvZiBUT01PWU8sIHRoZXkgYXJlIHVzZWZ1bCBmb3IgeW91CiB0byBrbm93IHdoYXQgVE9NT1lPIGlzLgogCkBAIC0xMywxMiArMTMsMTIgQEAKIEJ1aWxkIHRoZSBrZXJuZWwgd2l0aCBDT05GSUdfU0VDVVJJVFlfVE9NT1lPPXkgYW5kIHBhc3MgInNlY3VyaXR5PXRvbW95byIgb24KIGtlcm5lbCdzIGNvbW1hbmQgbGluZS4KIAotUGxlYXNlIHNlZSBodHRwOi8vdG9tb3lvLnNvdXJjZWZvcmdlLmpwL2VuLzIuMi54LyBmb3IgZGV0YWlscy4KK1BsZWFzZSBzZWUgaHR0cDovL3RvbW95by5zb3VyY2Vmb3JnZS5qcC8yLjMvIGZvciBkZXRhaWxzLgogCiAtLS0gV2hlcmUgaXMgZG9jdW1lbnRhdGlvbj8gLS0tCiAKIFVzZXIgPC0+IEtlcm5lbCBpbnRlcmZhY2UgZG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgYXQKLWh0dHA6Ly90b21veW8uc291cmNlZm9yZ2UuanAvZW4vMi4yLngvcG9saWN5LXJlZmVyZW5jZS5odG1sIC4KK2h0dHA6Ly90b21veW8uc291cmNlZm9yZ2UuanAvMi4zL3BvbGljeS1yZWZlcmVuY2UuaHRtbCAuCiAKIE1hdGVyaWFscyB3ZSBwcmVwYXJlZCBmb3Igc2VtaW5hcnMgYW5kIHN5bXBvc2l1bXMgYXJlIGF2YWlsYWJsZSBhdAogaHR0cDovL3NvdXJjZWZvcmdlLmpwL3Byb2plY3RzL3RvbW95by9kb2NzLz9jYXRlZ29yeV9pZD01MzImbGFuZ3VhZ2VfaWQ9MSAuCkBAIC01MCw2ICs1MCw2IEBACiBTRUxpbnV4L1NNQUNLL0FwcEFybW9yIGV0Yy4gd2hlbiB5b3Ugd2FudCB0byB1c2UgVE9NT1lPLgogCiBXZSBob3BlIHRoYXQgTFNNIGJlY29tZXMgc3RhY2thYmxlIGluIGZ1dHVyZS4gTWVhbndoaWxlLCB5b3UgY2FuIHVzZSBub24tTFNNCi12ZXJzaW9uIG9mIFRPTU9ZTywgYXZhaWxhYmxlIGF0IGh0dHA6Ly90b21veW8uc291cmNlZm9yZ2UuanAvZW4vMS42LngvIC4KK3ZlcnNpb24gb2YgVE9NT1lPLCBhdmFpbGFibGUgYXQgaHR0cDovL3RvbW95by5zb3VyY2Vmb3JnZS5qcC8xLjcvIC4KIExTTSB2ZXJzaW9uIG9mIFRPTU9ZTyBpcyBhIHN1YnNldCBvZiBub24tTFNNIHZlcnNpb24gb2YgVE9NT1lPLiBXZSBhcmUgcGxhbm5pbmcKIHRvIHBvcnQgbm9uLUxTTSB2ZXJzaW9uJ3MgZnVuY3Rpb25hbGl0aWVzIHRvIExTTSB2ZXJzaW9ucy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLWRlc2lnbi50eHQgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS1kZXNpZ24udHh0CmluZGV4IGYxZjgxYWYuLmRjNTJiZDQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLWRlc2lnbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UtZGVzaWduLnR4dApAQCAtMTMsNiArMTMsOSBAQAogd2FudCBtb3JlIGV4cGxhbmF0aW9uIG9mIGEgZmVhdHVyZSBpbiB0ZXJtcyBvZiBjb21tb24gY29kZSwgcmV2aWV3IHRoZSBjb21tb24KIGZ0cmFjZS50eHQgZmlsZS4KIAorSWRlYWxseSwgZXZlcnlvbmUgd2hvIHdpc2hlcyB0byByZXRhaW4gcGVyZm9ybWFuY2Ugd2hpbGUgc3VwcG9ydGluZyB0cmFjaW5nIGluCit0aGVpciBrZXJuZWwgc2hvdWxkIG1ha2UgaXQgYWxsIHRoZSB3YXkgdG8gZHluYW1pYyBmdHJhY2Ugc3VwcG9ydC4KKwogCiBQcmVyZXF1aXNpdGVzCiAtLS0tLS0tLS0tLS0tCkBAIC0yMTUsNyArMjE4LDcgQEAKIGV4aXRpbmcgb2YgYSBmdW5jdGlvbi4gIE9uIGV4aXQsIHRoZSB2YWx1ZSBpcyBjb21wYXJlZCBhbmQgaWYgaXQgZG9lcyBub3QKIG1hdGNoLCB0aGVuIGl0IHdpbGwgcGFuaWMgdGhlIGtlcm5lbC4gIFRoaXMgaXMgbGFyZ2VseSBhIHNhbml0eSBjaGVjayBmb3IgYmFkCiBjb2RlIGdlbmVyYXRpb24gd2l0aCBnY2MuICBJZiBnY2MgZm9yIHlvdXIgcG9ydCBzYW5lbHkgdXBkYXRlcyB0aGUgZnJhbWUKLXBvaW50ZXIgdW5kZXIgZGlmZmVyZW50IG9waXRtaXphdGlvbiBsZXZlbHMsIHRoZW4gaWdub3JlIHRoaXMgb3B0aW9uLgorcG9pbnRlciB1bmRlciBkaWZmZXJlbnQgb3B0aW1pemF0aW9uIGxldmVscywgdGhlbiBpZ25vcmUgdGhpcyBvcHRpb24uCiAKIEhvd2V2ZXIsIGFkZGluZyBzdXBwb3J0IGZvciBpdCBpc24ndCB0ZXJyaWJseSBkaWZmaWN1bHQuICBJbiB5b3VyIGFzc2VtYmx5IGNvZGUKIHRoYXQgY2FsbHMgcHJlcGFyZV9mdHJhY2VfcmV0dXJuKCksIHBhc3MgdGhlIGZyYW1lIHBvaW50ZXIgYXMgdGhlIDNyZCBhcmd1bWVudC4KQEAgLTIzNCw3ICsyMzcsNyBAQAogCiAKIEhBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogWW91IG5lZWQgdmVyeSBmZXcgdGhpbmdzIHRvIGdldCB0aGUgc3lzY2FsbHMgdHJhY2luZyBpbiBhbiBhcmNoLgogCkBAIC0yNTAsMTIgKzI1MywxNTIgQEAKIEhBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotU2VlIHNjcmlwdHMvcmVjb3JkbWNvdW50LnBsIGZvciBtb3JlIGluZm8uCi0KLTxkZXRhaWxzIHRvIGJlIGZpbGxlZD4KK1NlZSBzY3JpcHRzL3JlY29yZG1jb3VudC5wbCBmb3IgbW9yZSBpbmZvLiAgSnVzdCBmaWxsIGluIHRoZSBhcmNoLXNwZWNpZmljCitkZXRhaWxzIGZvciBob3cgdG8gbG9jYXRlIHRoZSBhZGRyZXNzZXMgb2YgbWNvdW50IGNhbGwgc2l0ZXMgdmlhIG9iamR1bXAuCitUaGlzIG9wdGlvbiBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZSB3aXRob3V0IGFsc28gaW1wbGVtZW50aW5nIGR5bmFtaWMgZnRyYWNlLgogCiAKIEhBVkVfRFlOQU1JQ19GVFJBQ0UKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3Ugd2lsbCBmaXJzdCBuZWVkIEhBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQgYW5kIEhBVkVfRlVOQ1RJT05fVFJBQ0VSLCBzbworc2Nyb2xsIHlvdXIgcmVhZGVyIGJhY2sgdXAgaWYgeW91IGdvdCBvdmVyIGVhZ2VyLgorCitPbmNlIHRob3NlIGFyZSBvdXQgb2YgdGhlIHdheSwgeW91IHdpbGwgbmVlZCB0byBpbXBsZW1lbnQ6CisJLSBhc20vZnRyYWNlLmg6CisJCS0gTUNPVU5UX0FERFIKKwkJLSBmdHJhY2VfY2FsbF9hZGp1c3QoKQorCQktIHN0cnVjdCBkeW5fYXJjaF9mdHJhY2V7fQorCS0gYXNtIGNvZGU6CisJCS0gbWNvdW50KCkgKG5ldyBzdHViKQorCQktIGZ0cmFjZV9jYWxsZXIoKQorCQktIGZ0cmFjZV9jYWxsKCkKKwkJLSBmdHJhY2Vfc3R1YigpCisJLSBDIGNvZGU6CisJCS0gZnRyYWNlX2R5bl9hcmNoX2luaXQoKQorCQktIGZ0cmFjZV9tYWtlX25vcCgpCisJCS0gZnRyYWNlX21ha2VfY2FsbCgpCisJCS0gZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYygpCisKK0ZpcnN0IHlvdSB3aWxsIG5lZWQgdG8gZmlsbCBvdXQgc29tZSBhcmNoIGRldGFpbHMgaW4geW91ciBhc20vZnRyYWNlLmguCisKK0RlZmluZSBNQ09VTlRfQUREUiBhcyB0aGUgYWRkcmVzcyBvZiB5b3VyIG1jb3VudCBzeW1ib2wgc2ltaWxhciB0bzoKKwkjZGVmaW5lIE1DT1VOVF9BRERSICgodW5zaWduZWQgbG9uZyltY291bnQpCitTaW5jZSBubyBvbmUgZWxzZSB3aWxsIGhhdmUgYSBkZWNsIGZvciB0aGF0IGZ1bmN0aW9uLCB5b3Ugd2lsbCBuZWVkIHRvOgorCWV4dGVybiB2b2lkIG1jb3VudCh2b2lkKTsKKworWW91IHdpbGwgYWxzbyBuZWVkIHRoZSBoZWxwZXIgZnVuY3Rpb24gZnRyYWNlX2NhbGxfYWRqdXN0KCkuICBNb3N0IHBlb3BsZQord2lsbCBiZSBhYmxlIHRvIHN0dWIgaXQgb3V0IGxpa2Ugc286CisJc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZ0cmFjZV9jYWxsX2FkanVzdCh1bnNpZ25lZCBsb25nIGFkZHIpCisJeworCQlyZXR1cm4gYWRkcjsKKwl9Cis8ZGV0YWlscyB0byBiZSBmaWxsZWQ+CisKK0xhc3RseSB5b3Ugd2lsbCBuZWVkIHRoZSBjdXN0b20gZHluX2FyY2hfZnRyYWNlIHN0cnVjdHVyZS4gIElmIHlvdSBuZWVkCitzb21lIGV4dHJhIHN0YXRlIHdoZW4gcnVudGltZSBwYXRjaGluZyBhcmJpdHJhcnkgY2FsbCBzaXRlcywgdGhpcyBpcyB0aGUKK3BsYWNlLiAgRm9yIG5vdyB0aG91Z2gsIGNyZWF0ZSBhbiBlbXB0eSBzdHJ1Y3Q6CisJc3RydWN0IGR5bl9hcmNoX2Z0cmFjZSB7CisJCS8qIE5vIGV4dHJhIGRhdGEgbmVlZGVkICovCisJfTsKKworV2l0aCB0aGUgaGVhZGVyIG91dCBvZiB0aGUgd2F5LCB3ZSBjYW4gZmlsbCBvdXQgdGhlIGFzc2VtYmx5IGNvZGUuICBXaGlsZSB3ZQorZGlkIGFscmVhZHkgY3JlYXRlIGEgbWNvdW50KCkgZnVuY3Rpb24gZWFybGllciwgZHluYW1pYyBmdHJhY2Ugb25seSB3YW50cyBhCitzdHViIGZ1bmN0aW9uLiAgVGhpcyBpcyBiZWNhdXNlIHRoZSBtY291bnQoKSB3aWxsIG9ubHkgYmUgdXNlZCBkdXJpbmcgYm9vdAorYW5kIHRoZW4gYWxsIHJlZmVyZW5jZXMgdG8gaXQgd2lsbCBiZSBwYXRjaGVkIG91dCBuZXZlciB0byByZXR1cm4uICBJbnN0ZWFkLAordGhlIGd1dHMgb2YgdGhlIG9sZCBtY291bnQoKSB3aWxsIGJlIHVzZWQgdG8gY3JlYXRlIGEgbmV3IGZ0cmFjZV9jYWxsZXIoKQorZnVuY3Rpb24uICBCZWNhdXNlIHRoZSB0d28gYXJlIGhhcmQgdG8gbWVyZ2UsIGl0IHdpbGwgbW9zdCBsaWtlbHkgYmUgYSBsb3QKK2Vhc2llciB0byBoYXZlIHR3byBzZXBhcmF0ZSBkZWZpbml0aW9ucyBzcGxpdCB1cCBieSAjaWZkZWZzLiAgU2FtZSBnb2VzIGZvcgordGhlIGZ0cmFjZV9zdHViKCkgYXMgdGhhdCB3aWxsIG5vdyBiZSBpbmxpbmVkIGluIGZ0cmFjZV9jYWxsZXIoKS4KKworQmVmb3JlIHdlIGdldCBjb25mdXNlZCBhbnltb3JlLCBsZXQncyBjaGVjayBvdXQgc29tZSBwc2V1ZG8gY29kZSBzbyB5b3UgY2FuCitpbXBsZW1lbnQgeW91ciBvd24gc3R1ZmYgaW4gYXNzZW1ibHk6CisKK3ZvaWQgbWNvdW50KHZvaWQpCit7CisJcmV0dXJuOworfQorCit2b2lkIGZ0cmFjZV9jYWxsZXIodm9pZCkKK3sKKwkvKiBpbXBsZW1lbnQgSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVCBpZiB5b3UgZGVzaXJlICovCisKKwkvKiBzYXZlIGFsbCBzdGF0ZSBuZWVkZWQgYnkgdGhlIEFCSSAoc2VlIHBhcmFncmFwaCBhYm92ZSkgKi8KKworCXVuc2lnbmVkIGxvbmcgZnJvbXBjID0gLi4uOworCXVuc2lnbmVkIGxvbmcgc2VsZnBjID0gPHJldHVybiBhZGRyZXNzPiAtIE1DT1VOVF9JTlNOX1NJWkU7CisKK2Z0cmFjZV9jYWxsOgorCWZ0cmFjZV9zdHViKGZyb21wYywgc2VsZnBjKTsKKworCS8qIHJlc3RvcmUgYWxsIHN0YXRlIG5lZWRlZCBieSB0aGUgQUJJICovCisKK2Z0cmFjZV9zdHViOgorCXJldHVybjsKK30KKworVGhpcyBtaWdodCBsb29rIGEgbGl0dGxlIG9kZCBhdCBmaXJzdCwgYnV0IGtlZXAgaW4gbWluZCB0aGF0IHdlIHdpbGwgYmUgcnVudGltZQorcGF0Y2hpbmcgbXVsdGlwbGUgdGhpbmdzLiAgRmlyc3QsIG9ubHkgZnVuY3Rpb25zIHRoYXQgd2UgYWN0dWFsbHkgd2FudCB0byB0cmFjZQord2lsbCBiZSBwYXRjaGVkIHRvIGNhbGwgZnRyYWNlX2NhbGxlcigpLiAgU2Vjb25kLCBzaW5jZSB3ZSBvbmx5IGhhdmUgb25lIHRyYWNlcgorYWN0aXZlIGF0IGEgdGltZSwgd2Ugd2lsbCBwYXRjaCB0aGUgZnRyYWNlX2NhbGxlcigpIGZ1bmN0aW9uIGl0c2VsZiB0byBjYWxsIHRoZQorc3BlY2lmaWMgdHJhY2VyIGluIHF1ZXN0aW9uLiAgVGhhdCBpcyB0aGUgcG9pbnQgb2YgdGhlIGZ0cmFjZV9jYWxsIGxhYmVsLgorCitXaXRoIHRoYXQgaW4gbWluZCwgbGV0J3MgbW92ZSBvbiB0byB0aGUgQyBjb2RlIHRoYXQgd2lsbCBhY3R1YWxseSBiZSBkb2luZyB0aGUKK3J1bnRpbWUgcGF0Y2hpbmcuICBZb3UnbGwgbmVlZCBhIGxpdHRsZSBrbm93bGVkZ2Ugb2YgeW91ciBhcmNoJ3Mgb3Bjb2RlcyBpbgorb3JkZXIgdG8gbWFrZSBpdCB0aHJvdWdoIHRoZSBuZXh0IHNlY3Rpb24uCisKK0V2ZXJ5IGFyY2ggaGFzIGFuIGluaXQgY2FsbGJhY2sgZnVuY3Rpb24uICBJZiB5b3UgbmVlZCB0byBkbyBzb21ldGhpbmcgZWFybHkgb24KK3RvIGluaXRpYWxpemUgc29tZSBzdGF0ZSwgdGhpcyBpcyB0aGUgdGltZSB0byBkbyB0aGF0LiAgT3RoZXJ3aXNlLCB0aGlzIHNpbXBsZQorZnVuY3Rpb24gYmVsb3cgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIG1vc3QgcGVvcGxlOgorCitpbnQgX19pbml0IGZ0cmFjZV9keW5fYXJjaF9pbml0KHZvaWQgKmRhdGEpCit7CisJLyogcmV0dXJuIHZhbHVlIGlzIGRvbmUgaW5kaXJlY3RseSB2aWEgZGF0YSAqLworCSoodW5zaWduZWQgbG9uZyAqKWRhdGEgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK1RoZXJlIGFyZSB0d28gZnVuY3Rpb25zIHRoYXQgYXJlIHVzZWQgdG8gZG8gcnVudGltZSBwYXRjaGluZyBvZiBhcmJpdHJhcnkKK2Z1bmN0aW9ucy4gIFRoZSBmaXJzdCBpcyB1c2VkIHRvIHR1cm4gdGhlIG1jb3VudCBjYWxsIHNpdGUgaW50byBhIG5vcCAod2hpY2gKK2lzIHdoYXQgaGVscHMgdXMgcmV0YWluIHJ1bnRpbWUgcGVyZm9ybWFuY2Ugd2hlbiBub3QgdHJhY2luZykuICBUaGUgc2Vjb25kIGlzCit1c2VkIHRvIHR1cm4gdGhlIG1jb3VudCBjYWxsIHNpdGUgaW50byBhIGNhbGwgdG8gYW4gYXJiaXRyYXJ5IGxvY2F0aW9uIChidXQKK3R5cGljYWxseSB0aGF0IGlzIGZ0cmFjZXJfY2FsbGVyKCkpLiAgU2VlIHRoZSBnZW5lcmFsIGZ1bmN0aW9uIGRlZmluaXRpb24gaW4KK2xpbnV4L2Z0cmFjZS5oIGZvciB0aGUgZnVuY3Rpb25zOgorCWZ0cmFjZV9tYWtlX25vcCgpCisJZnRyYWNlX21ha2VfY2FsbCgpCitUaGUgcmVjLT5pcCB2YWx1ZSBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgbWNvdW50IGNhbGwgc2l0ZSB0aGF0IHdhcyBjb2xsZWN0ZWQKK2J5IHRoZSBzY3JpcHRzL3JlY29yZG1jb3VudC5wbCBkdXJpbmcgYnVpbGQgdGltZS4KKworVGhlIGxhc3QgZnVuY3Rpb24gaXMgdXNlZCB0byBkbyBydW50aW1lIHBhdGNoaW5nIG9mIHRoZSBhY3RpdmUgdHJhY2VyLiAgVGhpcword2lsbCBiZSBtb2RpZnlpbmcgdGhlIGFzc2VtYmx5IGNvZGUgYXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBmdHJhY2VfY2FsbCBzeW1ib2wKK2luc2lkZSBvZiB0aGUgZnRyYWNlX2NhbGxlcigpIGZ1bmN0aW9uLiAgU28geW91IHNob3VsZCBoYXZlIHN1ZmZpY2llbnQgcGFkZGluZworYXQgdGhhdCBsb2NhdGlvbiB0byBzdXBwb3J0IHRoZSBuZXcgZnVuY3Rpb24gY2FsbHMgeW91J2xsIGJlIGluc2VydGluZy4gIFNvbWUKK3Blb3BsZSB3aWxsIGJlIHVzaW5nIGEgImNhbGwiIHR5cGUgaW5zdHJ1Y3Rpb24gd2hpbGUgb3RoZXJzIHdpbGwgYmUgdXNpbmcgYQorImJyYW5jaCIgdHlwZSBpbnN0cnVjdGlvbi4gIFNwZWNpZmljYWxseSwgdGhlIGZ1bmN0aW9uIGlzOgorCWZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoKQorCisKK0hBVkVfRFlOQU1JQ19GVFJBQ0UgKyBIQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmdW5jdGlvbiBncmFwaGVyIG5lZWRzIGEgZmV3IHR3ZWFrcyBpbiBvcmRlciB0byB3b3JrIHdpdGggZHluYW1pYyBmdHJhY2UuCitCYXNpY2FsbHksIHlvdSB3aWxsIG5lZWQgdG86CisJLSB1cGRhdGU6CisJCS0gZnRyYWNlX2NhbGxlcigpCisJCS0gZnRyYWNlX2dyYXBoX2NhbGwoKQorCQktIGZ0cmFjZV9ncmFwaF9jYWxsZXIoKQorCS0gaW1wbGVtZW50OgorCQktIGZ0cmFjZV9lbmFibGVfZnRyYWNlX2dyYXBoX2NhbGxlcigpCisJCS0gZnRyYWNlX2Rpc2FibGVfZnRyYWNlX2dyYXBoX2NhbGxlcigpCiAKIDxkZXRhaWxzIHRvIGJlIGZpbGxlZD4KK1F1aWNrIG5vdGVzOgorCS0gYWRkIGEgbm9wIHN0dWIgYWZ0ZXIgdGhlIGZ0cmFjZV9jYWxsIGxvY2F0aW9uIG5hbWVkIGZ0cmFjZV9ncmFwaF9jYWxsOworCSAgc3R1YiBuZWVkcyB0byBiZSBsYXJnZSBlbm91Z2ggdG8gc3VwcG9ydCBhIGNhbGwgdG8gZnRyYWNlX2dyYXBoX2NhbGxlcigpCisJLSB1cGRhdGUgZnRyYWNlX2dyYXBoX2NhbGxlcigpIHRvIHdvcmsgd2l0aCBiZWluZyBjYWxsZWQgYnkgdGhlIG5ldworCSAgZnRyYWNlX2NhbGxlcigpIHNpbmNlIHNvbWUgc2VtYW50aWNzIG1heSBoYXZlIGNoYW5nZWQKKwktIGZ0cmFjZV9lbmFibGVfZnRyYWNlX2dyYXBoX2NhbGxlcigpIHdpbGwgcnVudGltZSBwYXRjaCB0aGUKKwkgIGZ0cmFjZV9ncmFwaF9jYWxsIGxvY2F0aW9uIHdpdGggYSBjYWxsIHRvIGZ0cmFjZV9ncmFwaF9jYWxsZXIoKQorCS0gZnRyYWNlX2Rpc2FibGVfZnRyYWNlX2dyYXBoX2NhbGxlcigpIHdpbGwgcnVudGltZSBwYXRjaCB0aGUKKwkgIGZ0cmFjZV9ncmFwaF9jYWxsIGxvY2F0aW9uIHdpdGggbm9wcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9rbWVtdHJhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZS9rbWVtdHJhY2UudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzA4NzM1Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdHJhY2Uva21lbXRyYWNlLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0JCQlrbWVtdHJhY2UgLSBLZXJuZWwgTWVtb3J5IFRyYWNlcgotCi0JCQkgIGJ5IEVkdWFyZCAtIEdhYnJpZWwgTXVudGVhbnUKLQkJCSAgICAgPGVkdWFyZC5tdW50ZWFudUBsaW51eDM2MC5ybz4KLQotSS4gSW50cm9kdWN0aW9uCi09PT09PT09PT09PT09PT0KLQota21lbXRyYWNlIGhlbHBzIGtlcm5lbCBkZXZlbG9wZXJzIGZpZ3VyZSBvdXQgdHdvIHRoaW5nczoKLTEpIGhvdyBkaWZmZXJlbnQgYWxsb2NhdG9ycyAoU0xBQiwgU0xVQiBldGMuKSBwZXJmb3JtCi0yKSBob3cga2VybmVsIGNvZGUgYWxsb2NhdGVzIG1lbW9yeSBhbmQgaG93IG11Y2gKLQotVG8gZG8gdGhpcywgd2UgdHJhY2UgZXZlcnkgYWxsb2NhdGlvbiBhbmQgZXhwb3J0IGluZm9ybWF0aW9uIHRvIHRoZSB1c2Vyc3BhY2UKLXRocm91Z2ggdGhlIHJlbGF5IGludGVyZmFjZS4gV2UgZXhwb3J0IHRoaW5ncyBzdWNoIGFzIHRoZSBudW1iZXIgb2YgcmVxdWVzdGVkCi1ieXRlcywgdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSBhbGxvY2F0ZWQgKGkuZS4gaW5jbHVkaW5nIGludGVybmFsCi1mcmFnbWVudGF0aW9uKSwgd2hldGhlciB0aGlzIGlzIGEgc2xhYiBhbGxvY2F0aW9uIG9yIGEgcGxhaW4ga21hbGxvYygpIGFuZCBzbwotb24uCi0KLVRoZSBhY3R1YWwgYW5hbHlzaXMgaXMgcGVyZm9ybWVkIGJ5IGEgdXNlcnNwYWNlIHRvb2wgKHNlZSBzZWN0aW9uIElJSSBmb3IKLWRldGFpbHMgb24gd2hlcmUgdG8gZ2V0IGl0IGZyb20pLiBJdCBsb2dzIHRoZSBkYXRhIGV4cG9ydGVkIGJ5IHRoZSBrZXJuZWwsCi1wcm9jZXNzZXMgaXQgYW5kIChhcyBvZiB3cml0aW5nIHRoaXMpIGNhbiBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246Ci0tIHRoZSB0b3RhbCBhbW91bnQgb2YgbWVtb3J5IGFsbG9jYXRlZCBhbmQgZnJhZ21lbnRhdGlvbiBwZXIgY2FsbC1zaXRlCi0tIHRoZSBhbW91bnQgb2YgbWVtb3J5IGFsbG9jYXRlZCBhbmQgZnJhZ21lbnRhdGlvbiBwZXIgYWxsb2NhdGlvbgotLSB0b3RhbCBtZW1vcnkgYWxsb2NhdGVkIGFuZCBmcmFnbWVudGF0aW9uIGluIHRoZSBjb2xsZWN0ZWQgZGF0YXNldAotLSBudW1iZXIgb2YgY3Jvc3MtQ1BVIGFsbG9jYXRpb24gYW5kIGZyZWVzIChtYWtlcyBzZW5zZSBpbiBOVU1BIGVudmlyb25tZW50cykKLQotTW9yZW92ZXIsIGl0IGNhbiBwb3RlbnRpYWxseSBmaW5kIGluY29uc2lzdGVudCBhbmQgZXJyb25lb3VzIGJlaGF2aW9yIGluCi1rZXJuZWwgY29kZSwgc3VjaCBhcyB1c2luZyBzbGFiIGZyZWUgZnVuY3Rpb25zIG9uIGttYWxsb2MnZWQgbWVtb3J5IG9yCi1hbGxvY2F0aW5nIGxlc3MgbWVtb3J5IHRoYW4gcmVxdWVzdGVkIChidXQgbm90IHRydWx5IGZhaWxlZCBhbGxvY2F0aW9ucykuCi0KLWttZW10cmFjZSBhbHNvIG1ha2VzIHByb3Zpc2lvbnMgZm9yIHRyYWNpbmcgb24gc29tZSBhcmNoIGFuZCBhbmFseXNpbmcgdGhlCi1kYXRhIG9uIGFub3RoZXIuCi0KLUlJLiBEZXNpZ24gYW5kIGdvYWxzCi09PT09PT09PT09PT09PT09PT09PQotCi1rbWVtdHJhY2Ugd2FzIGRlc2lnbmVkIHRvIGhhbmRsZSByYXRoZXIgbGFyZ2UgYW1vdW50cyBvZiBkYXRhLiBUaHVzLCBpdCB1c2VzCi10aGUgcmVsYXkgaW50ZXJmYWNlIHRvIGV4cG9ydCB3aGF0ZXZlciBpcyBsb2dnZWQgdG8gdXNlcnNwYWNlLCB3aGljaCB0aGVuCi1zdG9yZXMgaXQuIEFuYWx5c2lzIGFuZCByZXBvcnRpbmcgaXMgZG9uZSBhc3luY2hyb25vdXNseSwgdGhhdCBpcywgYWZ0ZXIgdGhlCi1kYXRhIGlzIGNvbGxlY3RlZCBhbmQgc3RvcmVkLiBCeSBkZXNpZ24sIGl0IGFsbG93cyBvbmUgdG8gbG9nIGFuZCBhbmFseXNlCi1vbiBkaWZmZXJlbnQgbWFjaGluZXMgYW5kIGRpZmZlcmVudCBhcmNoZXMuCi0KLUFzIG9mIHdyaXRpbmcgdGhpcywgdGhlIEFCSSBpcyBub3QgY29uc2lkZXJlZCBzdGFibGUsIHRob3VnaCBpdCBtaWdodCBub3QKLWNoYW5nZSBtdWNoLiBIb3dldmVyLCBubyBndWFyYW50ZWVzIGFyZSBtYWRlIGFib3V0IGNvbXBhdGliaWxpdHkgeWV0LiBXaGVuCi1kZWVtZWQgc3RhYmxlLCB0aGUgQUJJIHNob3VsZCBzdGlsbCBhbGxvdyBlYXN5IGV4dGVuc2lvbiB3aGlsZSBtYWludGFpbmluZwotYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gVGhpcyBpcyBkZXNjcmliZWQgZnVydGhlciBpbiBEb2N1bWVudGF0aW9uL0FCSS4KLQotU3VtbWFyeSBvZiBkZXNpZ24gZ29hbHM6Ci0JLSBhbGxvdyBsb2dnaW5nIGFuZCBhbmFseXNpcyB0byBiZSBkb25lIGFjcm9zcyBkaWZmZXJlbnQgbWFjaGluZXMKLQktIGJlIGZhc3QgYW5kIGFudGljaXBhdGUgdXNhZ2UgaW4gaGlnaC1sb2FkIGVudmlyb25tZW50cyAoKikKLQktIGJlIHJlYXNvbmFibHkgZXh0ZW5zaWJsZQotCS0gbWFrZSBpdCBwb3NzaWJsZSBmb3IgR05VL0xpbnV4IGRpc3RyaWJ1dGlvbnMgdG8gaGF2ZSBrbWVtdHJhY2UKLQlpbmNsdWRlZCBpbiB0aGVpciByZXBvc2l0b3JpZXMKLQotKCopIC0gb25lIG9mIHRoZSByZWFzb25zIFBla2thIEVuYmVyZydzIG9yaWdpbmFsIHVzZXJzcGFjZSBkYXRhIGFuYWx5c2lzCi0gICAgdG9vbCdzIGNvZGUgd2FzIHJld3JpdHRlbiBmcm9tIFBlcmwgdG8gQyAoYWx0aG91Z2ggdGhpcyBpcyBtb3JlIHRoYW4gYQotICAgIHNpbXBsZSBjb252ZXJzaW9uKQotCi0KLUlJSS4gUXVpY2sgdXNhZ2UgZ3VpZGUKLT09PT09PT09PT09PT09PT09PT09PT0KLQotMSkgR2V0IGEga2VybmVsIHRoYXQgc3VwcG9ydHMga21lbXRyYWNlIGFuZCBidWlsZCBpdCBhY2NvcmRpbmdseSAoaS5lLiBlbmFibGUKLUNPTkZJR19LTUVNVFJBQ0UpLgotCi0yKSBHZXQgdGhlIHVzZXJzcGFjZSB0b29sIGFuZCBidWlsZCBpdDoKLSQgZ2l0IGNsb25lIGdpdDovL3JlcG8ub3IuY3ova21lbXRyYWNlLXVzZXIuZ2l0CQkjIGN1cnJlbnQgcmVwb3NpdG9yeQotJCBjZCBrbWVtdHJhY2UtdXNlci8KLSQgLi9hdXRvZ2VuLnNoCi0kIC4vY29uZmlndXJlCi0kIG1ha2UKLQotMykgQm9vdCB0aGUga21lbXRyYWNlLWVuYWJsZWQga2VybmVsIGlmIHlvdSBoYXZlbid0LCBwcmVmZXJhYmx5IGluIHRoZQotJ3NpbmdsZScgcnVubGV2ZWwgKHNvIHRoYXQgcmVsYXkgYnVmZmVycyBkb24ndCBmaWxsIHVwIGVhc2lseSksIGFuZCBydW4KLWttZW10cmFjZToKLSMgJyQnIGRvZXMgbm90IG1lYW4gdXNlciwgYnV0IHJvb3QgaGVyZS4KLSQgbW91bnQgLXQgZGVidWdmcyBub25lIC9zeXMva2VybmVsL2RlYnVnCi0kIG1vdW50IC10IHByb2Mgbm9uZSAvcHJvYwotJCBjZCBwYXRoL3RvL2ttZW10cmFjZS11c2VyLwotJCAuL2ttZW10cmFjZWQKLVdhaXQgYSBiaXQsIHRoZW4gc3RvcCBpdCB3aXRoIENUUkwrQy4KLSQgY2F0IC9zeXMva2VybmVsL2RlYnVnL2ttZW10cmFjZS90b3RhbF9vdmVycnVucwkjIENoZWNrIGlmIHdlIGRpZG4ndAotCQkJCQkJCSMgb3ZlcnJ1biwgc2hvdWxkCi0JCQkJCQkJIyBiZSB6ZXJvLgotJCAoT3B0aW9uYWxseSkgW1J1biBrbWVtdHJhY2VfY2hlY2sgc2VwYXJhdGVseSBvbiBlYWNoIGNwdVswLTldKi5vdXQgZmlsZSB0bwotCQljaGVjayBpdHMgY29ycmVjdG5lc3NdCi0kIC4va21lbXRyYWNlLXJlcG9ydAotCi1Ob3cgeW91IHNob3VsZCBoYXZlIGEgbmljZSBhbmQgc2hvcnQgc3VtbWFyeSBvZiBob3cgdGhlIGFsbG9jYXRvciBwZXJmb3Jtcy4KLQotSVYuIEZBUSBhbmQga25vd24gaXNzdWVzCi09PT09PT09PT09PT09PT09PT09PT09PT0KLQotUTogJ2NhdCAvc3lzL2tlcm5lbC9kZWJ1Zy9rbWVtdHJhY2UvdG90YWxfb3ZlcnJ1bnMnIGlzIG5vbi16ZXJvLCBob3cgZG8gSSBmaXgKLXRoaXM/IFNob3VsZCBJIHdvcnJ5PwotQTogSWYgaXQncyBub24temVybywgdGhpcyBhZmZlY3RzIGttZW10cmFjZSdzIGFjY3VyYWN5LCBkZXBlbmRpbmcgb24gaG93Ci1sYXJnZSB0aGUgbnVtYmVyIGlzLiBZb3UgY2FuIGZpeCBpdCBieSBzdXBwbHlpbmcgYSBoaWdoZXIKLSdrbWVtdHJhY2Uuc3ViYnVmcz1OJyBrZXJuZWwgcGFyYW1ldGVyLgotLS0tCi0KLVE6IGttZW10cmFjZV9jaGVjayByZXBvcnRzIGVycm9ycywgaG93IGRvIEkgZml4IHRoaXM/IFNob3VsZCBJIHdvcnJ5PwotQTogVGhpcyBpcyBhIGJ1ZyBhbmQgc2hvdWxkIGJlIHJlcG9ydGVkLiBJdCBjYW4gb2NjdXIgZm9yIGEgdmFyaWV0eSBvZgotcmVhc29uczoKLQktIHBvc3NpYmxlIGJ1Z3MgaW4gcmVsYXkgY29kZQotCS0gcG9zc2libGUgbWlzdXNlIG9mIHJlbGF5IGJ5IGttZW10cmFjZQotCS0gdGltZXN0YW1wcyBiZWluZyBjb2xsZWN0ZWQgdW5vcmRlcmx5Ci1PciB5b3UgbWF5IGZpeCBpdCB5b3Vyc2VsZiBhbmQgc2VuZCB1cyBhIHBhdGNoLgotLS0tCi0KLVE6IGttZW10cmFjZV9yZXBvcnQgc2hvd3MgbWFueSBlcnJvcnMsIGhvdyBkbyBJIGZpeCB0aGlzPyBTaG91bGQgSSB3b3JyeT8KLUE6IFRoaXMgaXMgYSBrbm93biBpc3N1ZSBhbmQgSSdtIHdvcmtpbmcgb24gaXQuIFRoZXNlIG1pZ2h0IGJlIHRydWUgZXJyb3JzCi1pbiBrZXJuZWwgY29kZSwgd2hpY2ggbWF5IGhhdmUgaW5jb25zaXN0ZW50IGJlaGF2aW9yIChlLmcuIGFsbG9jYXRpbmcgbWVtb3J5Ci13aXRoIGttZW1fY2FjaGVfYWxsb2MoKSBhbmQgZnJlZWluZyBpdCB3aXRoIGtmcmVlKCkpLiBQZWtrYSBFbmJlcmcgcG9pbnRlZAotb3V0IHRoaXMgYmVoYXZpb3IgbWF5IHdvcmsgd2l0aCBTTEFCLCBidXQgbWF5IGZhaWwgd2l0aCBvdGhlciBhbGxvY2F0b3JzLgotCi1JdCBtYXkgYWxzbyBiZSBkdWUgdG8gbGFjayBvZiB0cmFjaW5nIGluIHNvbWUgdW51c3VhbCBhbGxvY2F0b3IgZnVuY3Rpb25zLgotCi1XZSBkb24ndCB3YW50IGJ1ZyByZXBvcnRzIHJlZ2FyZGluZyB0aGlzIGlzc3VlIHlldC4KLS0tLQotCi1WLiBTZWUgYWxzbwotPT09PT09PT09PT0KLQotRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKLURvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvZGVidWdmcy1rbWVtdHJhY2UKLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9rcHJvYmV0cmFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2twcm9iZXRyYWNlLnR4dAppbmRleCBlYzk0NzQ4Li41Zjc3ZDk0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RyYWNlL2twcm9iZXRyYWNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2twcm9iZXRyYWNlLnR4dApAQCAtNDIsNyArNDIsNyBAQAogICArfC1vZmZzKEZFVENIQVJHKSA6IEZldGNoIG1lbW9yeSBhdCBGRVRDSEFSRyArfC0gb2ZmcyBhZGRyZXNzLigqKikKICAgTkFNRT1GRVRDSEFSRyA6IFNldCBOQU1FIGFzIHRoZSBhcmd1bWVudCBuYW1lIG9mIEZFVENIQVJHLgogICBGRVRDSEFSRzpUWVBFIDogU2V0IFRZUEUgYXMgdGhlIHR5cGUgb2YgRkVUQ0hBUkcuIEN1cnJlbnRseSwgYmFzaWMgdHlwZXMKLQkJICAodTgvdTE2L3UzMi91NjQvczgvczE2L3MzMi9zNjQpIGFyZSBzdXBwb3J0ZWQuCisJCSAgKHU4L3UxNi91MzIvdTY0L3M4L3MxNi9zMzIvczY0KSBhbmQgc3RyaW5nIGFyZSBzdXBwb3J0ZWQuCiAKICAgKCopIG9ubHkgZm9yIHJldHVybiBwcm9iZS4KICAgKCoqKSB0aGlzIGlzIHVzZWZ1bCBmb3IgZmV0Y2hpbmcgYSBmaWVsZCBvZiBkYXRhIHN0cnVjdHVyZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VtbC9Vc2VyTW9kZUxpbnV4LUhPV1RPLnR4dCBiL0RvY3VtZW50YXRpb24vdW1sL1VzZXJNb2RlTGludXgtSE9XVE8udHh0CmluZGV4IDYyODAxM2YuLjliN2UxOTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdW1sL1VzZXJNb2RlTGludXgtSE9XVE8udHh0CisrKyBiL0RvY3VtZW50YXRpb24vdW1sL1VzZXJNb2RlTGludXgtSE9XVE8udHh0CkBAIC04LDYyICs4LDYgQEAKIAogICBUYWJsZSBvZiBDb250ZW50cwogCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQogICAxLiBJbnRyb2R1Y3Rpb24KIAogICAgICAxLjEgSG93IGlzIFVzZXIgTW9kZSBMaW51eCBEaWZmZXJlbnQ/CkBAIC0yNzcsOCArMjIxLDcgQEAKIAogICAxLiBEb3dubG9hZCB0aGUgbGF0ZXN0IFVNTCBwYXRjaCBmcm9tCiAKLSAgICAgdGhlIGRvd25sb2FkIHBhZ2UgPGh0dHA6Ly91c2VyLW1vZGUtbGludXguc291cmNlZm9yZ2UubmV0L2RsLQotICAgICBzZi5odG1sPgorICAgICB0aGUgZG93bmxvYWQgcGFnZSA8aHR0cDovL3VzZXItbW9kZS1saW51eC5zb3VyY2Vmb3JnZS5uZXQvCiAKICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgZmlsZSBpcyB1bWwtcGF0Y2gtMi40LjAtcHJlcmVsZWFzZS5iejIuCiAKQEAgLTQzOCw3ICszODEsNyBAQAogICBhcyBtb2R1bGVzLCBlc3BlY2lhbGx5IGZpbGVzeXN0ZW1zIGFuZCBuZXR3b3JrIHByb3RvY29scyBhbmQgZmlsdGVycywKICAgc28gbW9zdCBzeW1ib2xzIHdoaWNoIG5lZWQgdG8gYmUgZXhwb3J0ZWQgcHJvYmFibHkgYWxyZWFkeSBhcmUuCiAgIEhvd2V2ZXIsIGlmIHlvdSBkbyBmaW5kIHN5bWJvbHMgdGhhdCBuZWVkIGV4cG9ydGluZywgbGV0ICB1cwotICA8aHR0cDovL3VzZXItbW9kZS1saW51eC5zb3VyY2Vmb3JnZS5uZXQvY29udGFjdHMuaHRtbD4gIGtub3csIGFuZAorICA8aHR0cDovL3VzZXItbW9kZS1saW51eC5zb3VyY2Vmb3JnZS5uZXQvPiAga25vdywgYW5kCiAgIHRoZXknbGwgYmUgInRha2VuIGNhcmUgb2YiLgogCiAKQEAgLTQ5OCw4ICs0NDEsOCBAQAogCiAgIFlvdSB3aWxsIG5lZWQgYSBmaWxlc3lzdGVtIHRvIGJvb3QgVU1MIGZyb20uICBUaGVyZSBhcmUgYSBudW1iZXIKICAgYXZhaWxhYmxlIGZvciBkb3dubG9hZCBmcm9tICBoZXJlICA8aHR0cDovL3VzZXItbW9kZS0KLSAgbGludXguc291cmNlZm9yZ2UubmV0L2RsLXNmLmh0bWw+IC4gIFRoZXJlIGFyZSBhbHNvICBzZXZlcmFsIHRvb2xzCi0gIDxodHRwOi8vdXNlci1tb2RlLWxpbnV4LnNvdXJjZWZvcmdlLm5ldC9mc19tYWtpbmcuaHRtbD4gIHdoaWNoIGNhbiBiZQorICBsaW51eC5zb3VyY2Vmb3JnZS5uZXQvPiAuICBUaGVyZSBhcmUgYWxzbyAgc2V2ZXJhbCB0b29scworICA8aHR0cDovL3VzZXItbW9kZS1saW51eC5zb3VyY2Vmb3JnZS5uZXQvPiAgd2hpY2ggY2FuIGJlCiAgIHVzZWQgdG8gZ2VuZXJhdGUgVU1MLWNvbXBhdGlibGUgZmlsZXN5c3RlbSBpbWFnZXMgZnJvbSBtZWRpYS4KICAgVGhlIGtlcm5lbCB3aWxsIGJvb3QgdXAgYW5kIHByZXNlbnQgeW91IHdpdGggYSBsb2dpbiBwcm9tcHQuCiAKQEAgLTEyMzYsNyArMTE3OSw3IEBACiAKIAogICBIYXJhbGQncyBvcmlnaW5hbCBSRUFETUUgaXMgaGVyZSA8aHR0cDovL3VzZXItbW9kZS1saW51eC5zb3VyY2UtCi0gIGZvcmdlLm5ldC90ZXh0L21jYXN0LnR4dD4gIGFuZCBleHBsYWlucyB0aGVzZSBpbiBkZXRhaWwsIGFzIHdlbGwgYXMKKyAgZm9yZ2UubmV0Lz4gIGFuZCBleHBsYWlucyB0aGVzZSBpbiBkZXRhaWwsIGFzIHdlbGwgYXMKICAgc29tZSBvdGhlciBpc3N1ZXMuCiAKIApAQCAtMTMxMSw3ICsxMjU0LDcgQEAKICAga2VybmVsLgogCiAgIFRoZXNlIHdlcmUgcG9pbnRlZCBvdXQgYnkgVGltIFJvYmluc29uIDx0aW1ybyBhdCB0cmtyIGRvdCBuZXQ+IGluCi0gIDxodHRwOi8vd3d3Lmdlb2NyYXdsZXIuY29tL2xpc3RzLzMvU291cmNlRm9yZ2UvNTk3LzAvPiBuYW1lPSJ0aGlzIHVtbC0KKyAgPGh0dHA6Ly93d3cuZ2VvY3Jhd2xlci5jb20vPiBuYW1lPSJ0aGlzIHVtbC0KICAgdXNlciBwb3N0Ij4gLgogCiAKQEAgLTIwMzgsNyArMTk4MSw3IEBACiAKICAgdW1sX21vbyBpcyBpbnN0YWxsZWQgd2l0aCB0aGUgVU1MIGRlYiBhbmQgUlBNLiAgSWYgeW91IGRpZG4ndCBpbnN0YWxsCiAgIFVNTCBmcm9tIG9uZSBvZiB0aG9zZSBwYWNrYWdlcywgeW91IGNhbiBhbHNvIGdldCBpdCBmcm9tIHRoZSBVTUwKLSAgdXRpbGl0aWVzIDxodHRwOi8vdXNlci1tb2RlLWxpbnV4LnNvdXJjZWZvcmdlLm5ldC9kbC1zZi5odG1sI1VNTAorICB1dGlsaXRpZXMgPGh0dHA6Ly91c2VyLW1vZGUtbGludXguc291cmNlZm9yZ2UubmV0LwogICB1dGlsaXRpZXM+ICB0YXIgZmlsZSBpbiB0b29scy9tb28uCiAKIApAQCAtNDU5OSw3ICs0NTQyLDcgQEAKIAogICBNaWNoYWVsIEplbm5pbmdzIDxtaWtlamVuIGF0IGhldmFuZXQuY29tPiAgc2VudCBpbiBzb21lIG1hdGVyaWFsIHdoaWNoCiAgIGlzIG5vdyBncmFjaW5nIHRoZSB0b3Agb2YgdGhlICBpbmRleCAgcGFnZSA8aHR0cDovL3VzZXItbW9kZS0KLSAgbGludXguc291cmNlZm9yZ2UubmV0L2luZGV4Lmh0bWw+ICBvZiB0aGlzIHNpdGUuCisgIGxpbnV4LnNvdXJjZWZvcmdlLm5ldC8+ICBvZiB0aGlzIHNpdGUuCiAKICAgU0dJIDxodHRwOi8vd3d3LnNnaS5jb20+ICAoYW5kIG1vcmUgc3BlY2lmaWNhbGx5IFJhbGYgQmFlY2hsZSA8cmFsZiBhdAogICB1bmkta29ibGVuei5kZT4gKSBnYXZlIG1lIGFuIGFjY291bnQgb24gb3NzLnNnaS5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL2xpbnV4LmluZiBiL0RvY3VtZW50YXRpb24vdXNiL2xpbnV4LmluZgppbmRleCAyZjcyMTdkLi5hZjcxZDg3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzYi9saW51eC5pbmYKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvbGludXguaW5mCkBAIC05LDcgKzksNyBAQAogOwogOyBNaWNyb3NvZnQgb25seSBkaXJlY3RseSBzdXBwb3J0cyBSTkRJUyBkcml2ZXJzLCBhbmQgYnVuZGxlZCB0aGVtIGludG8gWFAuCiA7IFRoZSBNaWNyb3NvZnQgIlJlbW90ZSBORElTIFVTQiBEcml2ZXIgS2l0IiBpcyBjdXJyZW50bHkgZm91bmQgYXQ6Ci07ICAgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3doZGMvaHdkZXYvcmVzb3VyY2VzL0hXc2VydmljZXMvcm5kaXMubXNweAorOyAgIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS93aGRjL2RldmljZS9uZXR3b3JrL25kaXMvcm1uZGlzLm1zcHgKIAogCiBbVmVyc2lvbl0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL210b3VjaHVzYi50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9tdG91Y2h1c2IudHh0CmluZGV4IGU0M2NmZmYuLjg2MzAyY2QgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNiL210b3VjaHVzYi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvbXRvdWNodXNiLnR4dApAQCAtNTQsMTAgKzU0LDYgQEAKIHJlcXVlc3RlZCBmcm9tIHRoZSB1c2Vyc3BhY2UgKEFuZCB0aGUgZHJpdmVycyB3b3VsZCBoYW5kbGUgdGhlIHZlbmRvciBzcGVjaWZpYwogdGFza3MpLgogCi1BRERJVElPTkFMIElORk9STUFUSU9OL1VQREFURVMvWCBDT05GSUdVUkFUSU9OIEVYQU1QTEU6Ci0KLWh0dHA6Ly9ncm9vbWxha2VsYWJzLmNvbS9ncmFuZGFtcC9jb2RlL21pY3JvdG91Y2gvCi0KIFRPRE86CiAKIEltcGxlbWVudCBhIGNvbnRyb2wgdXJiIGFnYWluIHRvIGhhbmRsZSByZXF1ZXN0cyB0byBhbmQgZnJvbSB0aGUgZGV2aWNlCkBAIC02OCw3ICs2NCw3IEBACiBJIGFtIG5vdCBhIE1pY3JvVG91Y2gvM00gZW1wbG95ZWUsIG5vciBoYXZlIEkgZXZlciBiZWVuLiAgM00gZG9lcyBub3Qgc3VwcG9ydCAKIHRoaXMgZHJpdmVyISAgSWYgeW91IHdhbnQgdG91Y2ggZHJpdmVycyBvbmx5IHN1cHBvcnRlZCB3aXRoaW4gWCwgcGxlYXNlIGdvIHRvOgogCi1odHRwOi8vd3d3LjNtLmNvbS8zTVRvdWNoU3lzdGVtcy9kb3dubG9hZHMvCitodHRwOi8vd3d3LjNtLmNvbS8zTVRvdWNoU3lzdGVtcy8KIAogVEhBTktTOgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0CmluZGV4IGY0ZDIxNDUuLjViZDc5MjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0CkBAIC04Myw3ICs4Myw3IEBACiAgIHBhcmFtZXRlcnMuICBlLmcuIG1vZHByb2JlIHZpc29yIHZlbmRvcj0weDU0YyBwcm9kdWN0PTB4NjYKICAgCiAgIFRoZXJlIGlzIGEgd2VicGFnZSBhbmQgbWFpbGluZyBsaXN0cyBmb3IgdGhpcyBwb3J0aW9uIG9mIHRoZSBkcml2ZXIgYXQ6Ci0gIGh0dHA6Ly91c2J2aXNvci5zb3VyY2Vmb3JnZS5uZXQvCisgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvdXNidmlzb3IvCiAKICAgRm9yIGFueSBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgcGxlYXNlIGNvbnRhY3QgR3JlZwogICBLcm9haC1IYXJ0bWFuIGF0IGdyZWdAa3JvYWguY29tCkBAIC0xODQsNyArMTg0LDcgQEAKICAgICBmdW5jdGlvbmFsaXR5LgogICAKICAgTW9yZSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgYXQ6Ci0gICAgICAgIGh0dHA6Ly9taXNjLm51L2h1Z2gva2V5c3Bhbi5odG1sCisgICAgICAgIGh0dHA6Ly93d3cuY2FybmF0aW9uc29mdHdhcmUuY29tL2Nhcm5hdGlvbi9LZXlzcGFuLmh0bWwKICAgIAogICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdCBIdWdoCiAgIEJsZW1pbmdzIGF0IGh1Z2hAbWlzYy5udQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWwKaW5kZXggZDc0OWQ0MS4uZDcyZmQyYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgICA8L3RyPgogICAgPHRyPgogICAgIDx0ZD4KLSAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5saW51eHR2Lm9yZy9kb3dubG9hZHMvdmlkZW80bGludXgvQVBJL1Y0TDJfQVBJIj5WNEwyIEFQSTwvYT4KKyAgICAgPGEgaHJlZj0iaHR0cDovL3Y0bDJzcGVjLmJ5dGVzZXgub3JnL3NwZWMtc2luZ2xlL3Y0bDIuaHRtbCI+VjRMMiBBUEk8L2E+CiAgICAgPC90ZD4KICAgICA8dGQ+U2hvdWxkIGJlIHVzZWQgZm9yIG5ldyBwcm9qZWN0cwogICAgIDwvdGQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4MjM4ODUgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4MjM4ODUKaW5kZXggMTZjYTAzMC4uODdjNDYzNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDIzODg1CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3gyMzg4NQpAQCAtMTcsOSArMTcsOSBAQAogIDE2IC0+IERWQldvcmxkIERWQi1TMiAyMDA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDAwMToyMDA1XQogIDE3IC0+IE5ldFVQIER1YWwgRFZCLVMyIENJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMWI1NToyYTJjXQogIDE4IC0+IEhhdXBwYXVnZSBXaW5UVi1IVlIxMjcwICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDA3MDoyMjExXQotIDE5IC0+IEhhdXBwYXVnZSBXaW5UVi1IVlIxMjc1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDA3MDoyMjE1XQotIDIwIC0+IEhhdXBwYXVnZSBXaW5UVi1IVlIxMjU1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDA3MDoyMjUxXQotIDIxIC0+IEhhdXBwYXVnZSBXaW5UVi1IVlIxMjEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDA3MDoyMjkxLDAwNzA6MjI5NV0KKyAxOSAtPiBIYXVwcGF1Z2UgV2luVFYtSFZSMTI3NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6MjIxNSwwMDcwOjIyMWQsMDA3MDoyMmYyXQorIDIwIC0+IEhhdXBwYXVnZSBXaW5UVi1IVlIxMjU1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDA3MDoyMjUxLDAwNzA6MjI1OSwwMDcwOjIyZjFdCisgMjEgLT4gSGF1cHBhdWdlIFdpblRWLUhWUjEyMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswMDcwOjIyOTEsMDA3MDoyMjk1LDAwNzA6MjI5OSwwMDcwOjIyOWQsMDA3MDoyMmYwLDAwNzA6MjJmMywwMDcwOjIyZjQsMDA3MDoyMmY1XQogIDIyIC0+IE15Z2ljYSBYODUwNiBETUItVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTRmMTo4NjUxXQogIDIzIC0+IE1hZ2ljLVBybyBQcm9IRFRWIEV4dHJlbWUgMiAgICAgICAgICAgICAgICAgICAgICAgICBbMTRmMTo4NjU3XQogIDI0IC0+IEhhdXBwYXVnZSBXaW5UVi1IVlIxODUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDA3MDo4NTQxXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5lbTI4eHggYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eAppbmRleCAzYTYyM2FhLi41YzU2ODc1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eApAQCAtNzIsMyArNzIsNCBAQAogIDczIC0+IFJlZGRvIERWQi1DIFVTQiBUViBCb3ggICAgICAgICAgICAgICAgICAgKGVtMjg3MCkKICA3NCAtPiBBY3Rpb25tYXN0ZXIvTGluWGNlbC9EaWdpdHVzIFZDMjExQSAgICAgIChlbTI4MDApCiAgNzUgLT4gRGlrb20gREszMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW0yODgyKQorIDc2IC0+IEtXb3JsZCBQbHVzVFYgMzQwVSBvciBVQjQzNS1RIChBVFNDKSAgICAgKGVtMjg3MCkgICAgICAgIFsxYjgwOmEzNDBdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKaW5kZXggMTM4N2E2OS4uNDAwMGMyOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNApAQCAtMTc4LDQgKzE3OCw1IEBACiAxNzcgLT4gSGF3ZWxsIEhXLTQwNE03CiAxNzggLT4gQmVob2xkZXIgQmVob2xkVFYgSDcgICAgICAgICAgICAgICAgICAgICBbNWFjZTo3MTkwXQogMTc5IC0+IEJlaG9sZGVyIEJlaG9sZFRWIEE3ICAgICAgICAgICAgICAgICAgICAgWzVhY2U6NzA5MF0KLTE4MCAtPiBBdmVybWVkaWEgTTczM0EgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNDYxOjQxNTUsMTQ2MTo0MjU1XQorMTgwIC0+IEF2ZXJtZWRpYSBQQ0kgTTczM0EgICAgICAgICAgICAgICAgICAgICAgWzE0NjE6NDE1NSwxNDYxOjQyNTVdCisxODEgLT4gVGVjaG9UcmVuZCBUVC1idWRnZXQgVC0zMDAwICAgICAgICAgICAgICBbMTNjMjoyODA0XQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lciBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIKaW5kZXggOWIyZTBkZC4uZTY3YzFkYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lcgorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyCkBAIC04MiwzICs4Miw0IEBACiB0dW5lcj04MiAtIFBoaWxpcHMgQ1UxMjE2TAogdHVuZXI9ODMgLSBOWFAgVERBMTgyNzEKIHR1bmVyPTg0IC0gU29ueSBCVEYtUHhuMDFaCit0dW5lcj04NSAtIFBoaWxpcHMgRlExMjM2IE1LNQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DUWNhbS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NRY2FtLnR4dAppbmRleCBkMjMwODc4ZS4uODk3N2U3YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DUWNhbS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DUWNhbS50eHQKQEAgLTIwMywxMSArMjAzLDExIEBACiAgIGh0dHA6Ly92NGwyc3BlYy5ieXRlc2V4Lm9yZy8KIAogU29tZSB3ZWIgcGFnZXMgYWJvdXQgdGhlIHF1aWNrY2FtczoKLSAgIGh0dHA6Ly93d3cuZGtmei1oZWlkZWxiZXJnLmRlL01hY3JvbW9sL3dlZGVtYW5uL21pbmktSE9XVE8tY3FjYW0uaHRtbAorICAgaHR0cDovL3d3dy5waW5nb3Vpbi1sYW5kLmNvbS9ob3d0by9RdWlja0NhbS1IT1dUTy5odG1sCiAKICAgIGh0dHA6Ly93d3cuY3J5bndyLmNvbS9xY3BjLyAgICAgICAgICAgIFF1aWNrQ2FtIFRoaXJkLVBhcnR5IERyaXZlcnMKICAgIGh0dHA6Ly93d3cuY3J5bndyLmNvbS9xY3BjL3JlLmh0bWwgICAgIFNvbWUgUmV2ZXJzZSBFbmdpbmVlcmluZwotICAgaHR0cDovL2NzZS51bmwuZWR1L35jbHVlbmluZy9ncWNhbS8gICAgdjRsIGNsaWVudAorICAgaHR0cDovL3d3dy53aXJlbGVzc2NvdWNoLm5ldC9zb2Z0d2FyZS9ncWNhbS8gICB2NGwgY2xpZW50CiAgICBodHRwOi8vcGhvYm9zLmlsbHRlbC5kZW52ZXIuY28udXMvcHViL3FjcmVhZC8gZG9lc24ndCB1c2UgdjRsCiAgICBmdHA6Ly9mdHAuY3MudW5tLmVkdS9wdWIvY2hyaXMvcXVpY2tjYW0vICAgSGFzIGxvdHMgb2YgZHJpdmVycwogICAgaHR0cDovL3d3dy5jcy5kdWtlLmVkdS9+cmV5bm9sZHMvcXVpY2tjYW0vIEhhcyBsb3RzIG9mIGluZm9ybWF0aW9uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5jcGlhIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUuY3BpYQppbmRleCAxOWNkM2JmLi44YTc0N2ZlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5jcGlhCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLmNwaWEKQEAgLTE4NSw3ICsxODUsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBSRUZFUkVOQ0VTCiAKLSAgIDEuIGh0dHA6Ly93d3cucmlzYy51bmktbGluei5hYy5hdC9wZW9wbGUvcHByZWdsZXIKKyAgIDEuIGh0dHA6Ly93d3cucmlzYy51bmktbGluei5hYy5hdC8KICAgICAgIG1haWx0bzpQZXRlcl9QcmVnbGVyQGVtYWlsLmNvbQogICAgMi4gc2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIHRvcCBkaXJlY3Rvcnkgb2YgdGhlIGtlcm5lbCB0cmVlCiAgICAzLiBodHRwOi8vd2ViY2FtLnNvdXJjZWZvcmdlLm5ldC8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLml2dHYgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5pdnR2CmluZGV4IDczZGYyMmMuLjQyYjA2NjggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLml2dHYKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUuaXZ0dgpAQCAtMTAsNyArMTAsNyBAQAogTk9URTogdGhpcyBkcml2ZXIgcmVxdWlyZXMgdGhlIGxhdGVzdCBlbmNvZGVyIGZpcm13YXJlICh2ZXJzaW9uIDIuMDYuMDM5LCBzaXplCiAzNzY4MzYgYnl0ZXMpLiBHZXQgdGhlIGZpcm13YXJlIGZyb20gaGVyZToKIAotaHR0cDovL2RsLml2dHZkcml2ZXIub3JnL2l2dHYvZmlybXdhcmUvZmlybXdhcmUudGFyLmd6CitodHRwOi8vZGwuaXZ0dmRyaXZlci5vcmcvaXZ0di9maXJtd2FyZS8KIAogTk9URTogJ25vcm1hbCcgVFYgYXBwbGljYXRpb25zIGRvIG5vdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIsIHlvdSBuZWVkCiBhbiBhcHBsaWNhdGlvbiB0aGF0IGNhbiBoYW5kbGUgTVBFRyBpbnB1dCBzdWNoIGFzIG1wbGF5ZXIsIHhpbmUsIE15dGhUViwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvWm9yYW4gYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1pvcmFuCmluZGV4IDBlODllNzYuLjAwZTNmOTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvWm9yYW4KKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9ab3JhbgpAQCAtMTc0LDcgKzE3NCw3IEBACiBXZSBkbyBub3QgdGFsayBhYm91dCBob3cgdGhlIGF1ZGlvIGlzIGJyb2FkY2FzdCAhCiAKIEEgcmF0aGVyIGdvb2Qgc2l0ZXMgYWJvdXQgdGhlIFRWIHN0YW5kYXJkcyBhcmU6Ci1odHRwOi8vd3d3LnNvbnkuanAvU2VydmljZUFyZWEvVm9sdGFnZV9tYXAvCitodHRwOi8vd3d3LnNvbnkuanAvc3VwcG9ydC8KIGh0dHA6Ly9pbmZvLmVsZWN0cm9uaWN3ZXJrc3RhdHQuZGUvYmVyZWljaGUvZmVybnNlaHRlY2huaWsvZnJlcXVlbnplbl91bmRfbm9ybWVuL0Zlcm5zZWhub3JtZW4vCiBhbmQgaHR0cDovL3d3dy5jYWJsLmNvbS9yZXN0YXVyYW50L2NoYW5uZWwuaHRtbAogCkBAIC0zMzAsNyArMzMwLDcgQEAKIGRldGFpbHMgKHN0cnVjdHMvaW9jdGxzKS4KIAogSW5mb3JtYXRpb24gLSB2aWRlbzRsaW51eDoKLWh0dHA6Ly9yb2FkcnVubmVyLnN3YW5zZWEubGludXgub3JnLnVrL3Y0bGFwaS5zaHRtbAoraHR0cDovL2xpbnV4LmJ5dGVzZXgub3JnL3Y0bDIvQVBJLmh0bWwKIERvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWwKIC91c3IvaW5jbHVkZS9saW51eC92aWRlb2Rldi5oCiAKQEAgLTM5MCw3ICszOTAsNyBAQAogR2V0IHRoZSBzdGF0dXMgb2YgdGhlIGlucHV0IGxpbmVzICh2aWRlbyBzb3VyY2UgY29ubmVjdGVkL25vcm0pLgogCiBGb3IgcHJvZ3JhbW1pbmcgZXhhbXBsZSwgcGxlYXNlLCBsb29rIGF0IGxhdnJlYy5jIGFuZCBsYXZwbGF5LmMgY29kZSBpbgotbGF2dG9vbHMtMS4ycDIgcGFja2FnZSAoVVJMOiBodHRwOi8vd3d3LmNpY2VzZS5teC9+bWlyc2V2L0RDMTBwbHVzLykKK2xhdnRvb2xzLTEuMnAyIHBhY2thZ2UgKFVSTDogaHR0cDovL3d3dy5jaWNlc2UubXgvKQogYW5kIHRoZSAnZXhhbXBsZXMnIGRpcmVjdG9yeSBpbiB0aGUgb3JpZ2luYWwgQnV6IGRyaXZlciBkaXN0cmlidXRpb24uCiAKIEFkZGl0aW9uYWwgbm90ZXMgZm9yIHNvZnR3YXJlIGRldmVsb3BlcnM6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvQ2FyZHMgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvQ2FyZHMKaW5kZXggZDMzODk2NS4uMTIyMTdmYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L0NhcmRzCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9DYXJkcwpAQCAtODAyLDcgKzgwMiw3IEBACiAKIAogCi1KVFQvIEp1c3R5IENvcnAuaHR0cDovL3d3dy5qdXN0eS5jby5qcC8gKHd3dy5qdHQuY29tLmpwIHdlYnNpdGUgZG93bikKK0pUVC8gSnVzdHkgQ29ycC4oaHR0cDovL3d3dy5qdHQubmUuanAvKQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBKVFQtMDIgKEpUVCBUVikgIlRWIHdhdGNobWF0ZSBwcm8iIChidDg0OCkKIApAQCAtODI4LDcgKzgyOCw3IEBACiAgICBFbGluZSBWaXNpb24gVFZNYXN0ZXIgLyBUVk1hc3RlciBGTSAoRUxWLVRWTS8gRUxWLVRWTS1GTSkgPSBMUjI2ICAoYnQ4NzgpCiAgICBFbGluZSBWaXNpb24gVFZNYXN0ZXItMjAwMCAoRUxWLVRWTS0yMDAwLCBFTFYtVFZNLTIwMDAtRk0pPSBMUjEzOCAoc2FhNzEzeCkKIAotU3Bpcml0IGh0dHA6Ly93d3cuc3Bpcml0bW9kZW1zLmNvbS5hdS8KK1NwaXJpdCAKIC0tLS0tLQogICAgU3Bpcml0IFRWIFR1bmVyL1ZpZGVvIENhcHR1cmUgQ2FyZCAoYnQ4NDgpCiAKQEAgLTk1OSw2ICs5NTksNiBAQAogCiBIb29udGVjaAogLS0tLS0tLS0KLWh0dHA6Ly93d3cuaG9vbnRlY2guY29tL2tvcmVhbi9kb3dubG9hZC9kb3duX2RyaXZlcl9saXN0MDMuaHRtbAoraHR0cDovL3d3dy5ob29udGVjaC5kZS8KICAgIEhBUlQgVmlzaW9uIDg0OCAoSC1BUlQgVmlzaW9uIDg0OCkKICAgIEhBUlQgVmlzaW9uIDg3OCAoSC1BcnQgVmlzaW9uIDg3OCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9NQUtFREVWIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L01BS0VERVYKaW5kZXggNmMyOWJhNC4uOWQxMTJmNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L01BS0VERVYKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L01BS0VERVYKQEAgLTE0LDcgKzE0LDcgQEAKIAlsbiAtcyAvZGV2LyR7MX0wIC9kZXYvJDEKIH0KIAotIyBzZWUgaHR0cDovL3JvYWRydW5uZXIuc3dhbnNlYS51ay5saW51eC5vcmcvdjRsYXBpLnNodG1sCisjIHNlZSBodHRwOi8vbGludXguYnl0ZXNleC5vcmcvdjRsMi9BUEkuaHRtbAogCiBlY2hvICIqKiogbmV3IGRldmljZSBuYW1lcyAqKioiCiBtYWtlZGV2IHZpZGVvIDAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9TcGVjcyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9TcGVjcwppbmRleCA3OWI5ZTU3Li5mMzI0NjZjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvU3BlY3MKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1NwZWNzCkBAIC0xLDMgKzEsMyBAQAogUGhpbGlwcwkJaHR0cDovL3d3dy5TZW1pY29uZHVjdG9ycy5DT00vcGlwLwotQ29uZXhhbnQJaHR0cDovL3d3dy5jb25leGFudC5jb20vdGVjaGluZm8vZGVmYXVsdC5hc3AKLU1pY3JvbmFzCWh0dHA6Ly93d3cubWljcm9uYXMuZGUvcGFnZXMvcHJvZHVjdF9kb2N1bWVudGF0aW9uL2luZGV4Lmh0bWwKK0NvbmV4YW50CWh0dHA6Ly93d3cuY29uZXhhbnQuY29tLworTWljcm9uYXMJaHR0cDovL3d3dy5taWNyb25hcy5jb20vZW4vaG9tZS9pbmRleC5odG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4ODgvaGF1cHBhdWdlLXdpbnR2LWN4ODgtaXIudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9jeDg4L2hhdXBwYXVnZS13aW50di1jeDg4LWlyLnR4dAppbmRleCBmYWNjZWU2Li5mNDMyOWEzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4ODgvaGF1cHBhdWdlLXdpbnR2LWN4ODgtaXIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvY3g4OC9oYXVwcGF1Z2Utd2ludHYtY3g4OC1pci50eHQKQEAgLTQ0LDcgKzQ0LDcgQEAKIFRoaXMgZGF0YSBzaGVldCAoZ29vZ2xlIHNlYXJjaCkgc2VlbXMgdG8gaGF2ZSBhIGxvdmVseSBkZXNjcmlwdGlvbiBvZiB0aGUKIFJDNSBiYXNpY3MKIAotaHR0cDovL3VzZXJzLnBhbmRvcmEuYmUvbmVueWEvZWxlY3Ryb25pY3MvcmM1LyAgYW5kIG1vcmUgZGF0YQoraHR0cDovL3d3dy5uZW55YS5iZS9iZW9yL2VsZWN0cm9uaWNzL3JjNS5odG0gIGFuZCBtb3JlIGRhdGEKIAogaHR0cDovL3d3dy5lZS53YXNoaW5ndG9uLmVkdS9jaXJjdWl0X2FyY2hpdmUvdGV4dC9pcl9kZWNvZGUudHh0CiBhbmQgZXZlbiBhIHJlZmVyZW5jZSB0byBob3cgdG8gZGVjb2RlIGEgYmktcGhhc2UgZGF0YSBzdHJlYW0uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2dzcGNhLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0CmluZGV4IGYxM2ViMDMuLjU2YmE3YmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0CkBAIC0yOSw4ICsyOSwxMiBAQAogemMzeHgJCTA0MWU6NDAzNAlDcmVhdGl2ZSBJbnN0YW50IFAwNjIwCiB6YzN4eAkJMDQxZTo0MDM1CUNyZWF0aXZlIEluc3RhbnQgUDA2MjBECiB6YzN4eAkJMDQxZTo0MDM2CUNyZWF0aXZlIExpdmUgIQorc3E5MzB4CQkwNDFlOjQwMzgJQ3JlYXRpdmUgSm95LUlUCiB6YzN4eAkJMDQxZTo0MDNhCUNyZWF0aXZlIE54IFBybyAyCiBzcGNhNTYxCQkwNDFlOjQwM2IJQ3JlYXRpdmUgV2ViY2FtIFZpc3RhIChWRjAwMTApCitzcTkzMHgJCTA0MWU6NDAzYwlDcmVhdGl2ZSBMaXZlISBVbHRyYQorc3E5MzB4CQkwNDFlOjQwM2QJQ3JlYXRpdmUgTGl2ZSEgVWx0cmEgZm9yIE5vdGVib29rcworc3E5MzB4CQkwNDFlOjQwNDEJQ3JlYXRpdmUgTGl2ZSEgTW90aW9uCiB6YzN4eAkJMDQxZTo0MDUxCUNyZWF0aXZlIExpdmUhQ2FtIE5vdGVib29rIFBybyAoVkYwMjUwKQogb3Y1MTkJCTA0MWU6NDA1MglDcmVhdGl2ZSBMaXZlISBWSVNUQSBJTQogemMzeHgJCTA0MWU6NDA1MwlDcmVhdGl2ZSBMaXZlIUNhbSBWaWRlbyBJTQpAQCAtMTM4LDYgKzE0Miw3IEBACiBmaW5lcGl4CQkwNGNiOjAxM2YJRnVqaWZpbG0gRmluZVBpeCBGNDIwCiBzdW5wbHVzCQkwNGYxOjEwMDEJSlZDIEdDIEE1MAogc3BjYTU2MQkJMDRmYzowNTYxCUZsZXhjYW0gMTAwCitzcGNhMTUyOAkwNGZjOjE1MjgJU3VucGx1cyBNRDgwIGNsb25lCiBzdW5wbHVzCQkwNGZjOjUwMGMJU3VucGx1cyBDQTUwMEMKIHN1bnBsdXMJCTA0ZmM6NTA0YQlBaXB0ZWsgTWluaSBQZW5DYW0gMS4zCiBzdW5wbHVzCQkwNGZjOjUwNGIJTWF4ZWxsIE1heFBvY2tldCBMRSAxLjMKQEAgLTI1Myw2ICsyNTgsNyBAQAogcGFjNzMwMgkJMDkzYToyNjIxCVBBQzczMXgKIHBhYzczMDIJCTA5M2E6MjYyMglHZW5pdXMgRXllIDMxMgogcGFjNzMwMgkJMDkzYToyNjI0CVBBQzczMDIKK3BhYzczMDIJCTA5M2E6MjYyNQlHZW5pdXMgaVNsaW0gMzEwCiBwYWM3MzAyCQkwOTNhOjI2MjYJTGFidGVjIDIyMDAKIHBhYzczMDIJCTA5M2E6MjYyOAlHZW5pdXMgaUxvb2sgMzAwCiBwYWM3MzAyCQkwOTNhOjI2MjkJR2VuaW91cyBpU2xpbSAzMDAKQEAgLTM2Miw2ICszNjgsOCBAQAogc3E5MDVjCQkyNzcwOjkwNWMJQWxsIDExIGtub3duIGNhbWVyYXMgd2l0aCB0aGlzIElECiBzcTkwNQkJMjc3MDo5MTIwCUFsbCAyNCBrbm93biBjYW1lcmFzIHdpdGggdGhpcyBJRAogc3E5MDVjCQkyNzcwOjkxM2QJQWxsIDQga25vd24gY2FtZXJhcyB3aXRoIHRoaXMgSUQKK3NxOTMweAkJMjc3MDo5MzBiCVN3ZWV4IE1vdGlvbiBUcmFja2luZyAvIEktVGVjIGlDYW0gVHJhY2VyCitzcTkzMHgJCTI3NzA6OTMwYwlUcnVzdCBXQi0zNTAwVCAvIE5TRyBSb2JiaWUgMi4wCiBzcGNhNTAwCQkyODk5OjAxMmMJVG9wdHJvIEluZHVzdHJpYWwKIG92NTE5CQk4MDIwOmVmMDQJb3Y1MTkKIHNwY2E1MDgJCTgwODY6MDExMAlJbnRlbCBFYXN5IFBDIENhbWVyYQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9oYXVwcGF1Z2Utd2ludHYtY3g4OC1pci50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2hhdXBwYXVnZS13aW50di1jeDg4LWlyLnR4dAppbmRleCBmYWNjZWU2Li5hMmZkMzYzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2hhdXBwYXVnZS13aW50di1jeDg4LWlyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2hhdXBwYXVnZS13aW50di1jeDg4LWlyLnR4dApAQCAtNDQsNyArNDQsNyBAQAogVGhpcyBkYXRhIHNoZWV0IChnb29nbGUgc2VhcmNoKSBzZWVtcyB0byBoYXZlIGEgbG92ZWx5IGRlc2NyaXB0aW9uIG9mIHRoZQogUkM1IGJhc2ljcwogCi1odHRwOi8vdXNlcnMucGFuZG9yYS5iZS9uZW55YS9lbGVjdHJvbmljcy9yYzUvICBhbmQgbW9yZSBkYXRhCitodHRwOi8vd3d3Lm5lbnlhLmJlL2Jlb3IvZWxlY3Ryb25pY3MvcmM1Lmh0bSBhbmQgbW9yZSBkYXRhCiAKIGh0dHA6Ly93d3cuZWUud2FzaGluZ3Rvbi5lZHUvY2lyY3VpdF9hcmNoaXZlL3RleHQvaXJfZGVjb2RlLnR4dAogYW5kIGV2ZW4gYSByZWZlcmVuY2UgdG8gaG93IHRvIGRlY29kZSBhIGJpLXBoYXNlIGRhdGEgc3RyZWFtLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9pYm1jYW0udHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9pYm1jYW0udHh0CmluZGV4IDM5N2E5NGUuLmE1MTA1NTIxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2libWNhbS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9pYm1jYW0udHh0CkBAIC0yNyw5ICsyNyw4IEBACiAKIFhpcmxpbmsgIkMtSXQiIGNhbWVyYSwgYWxzbyBrbm93biBhcyAiSUJNIFBDIENhbWVyYSIuCiBUaGUgZGV2aWNlIHVzZXMgcHJvcHJpZXRhcnkgQVNJQyAoYW5kIGNvbXByZXNzaW9uIG1ldGhvZCk7Ci1pdCBpcyBtYW51ZmFjdHVyZWQgYnkgWGlybGluay4gU2VlIGh0dHA6Ly93d3cueGlybGluay5jb20vCi0ocmVuYW1lZCB0byBodHRwOi8vd3d3LnZlby5jb20pLCBodHRwOi8vd3d3LmlibXBjY2FtZXJhLmNvbSwKLW9yIGh0dHA6Ly93d3cuYy1pdG5vdy5jb20vIGZvciBkZXRhaWxzIGFuZCBwaWN0dXJlcy4KK2l0IGlzIG1hbnVmYWN0dXJlZCBieSBYaXJsaW5rLiBTZWUgaHR0cDovL3hpcmxpbmt3ZWJjYW0uc291cmNlZm9yZ2UubmV0LCAKK2h0dHA6Ly93d3cuaWJtcGNjYW1lcmEuY29tLCBvciBodHRwOi8vd3d3LmMtaXRub3cuY29tLyBmb3IgZGV0YWlscyBhbmQgcGljdHVyZXMuCiAKIFRoaXMgdmVyeSBjaGlwc2V0ICgiWCBDaGlwIiwgYXMgbWFya2VkIGF0IHRoZSBmYWN0b3J5KQogaXMgdXNlZCBpbiBzZXZlcmFsIG90aGVyIGNhbWVyYXMsIGFuZCB0aGV5IGFyZSBzdXBwb3J0ZWQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvc2U0MDEudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zZTQwMS50eHQKaW5kZXggN2I5ZDFjOS4uYmQ2NTI2ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zZTQwMS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zZTQwMS50eHQKQEAgLTQ5LDYgKzQ5LDYgQEAKIEhFTFA6CiAKIFRoZSBsYXRlc3QgaW5mbyBvbiB0aGlzIGRyaXZlciBjYW4gYmUgZm91bmQgYXQ6Ci1odHRwOi8vd3d3LmNoZWxsby5ubC9+ai52cmVla2VuL3NlNDAxLworaHR0cDovL21lbWJlcnMuY2hlbGxvLm5sL35qLnZyZWVrZW4vc2U0MDEvCiBBbmQgcXVlc3Rpb25zIHRvIG1lIGNhbiBiZSBzZW5kIHRvOgogcGUxcnhxQGFtc2F0Lm9yZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC93OTk2Ni50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3c5OTY2LnR4dAppbmRleCA3OGE2NTEyLi44NTUwMjQ1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3c5OTY2LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3c5OTY2LnR4dApAQCAtMjQsNyArMjQsNyBAQAogaXMgY2FsbGVkIFZJREVPX1BBTEVUVEVfWVVWNDIyICgxNiBicHApLgogCiBBIG1pbmltYWwgdGVzdCBhcHBsaWNhdGlvbiAod2l0aCBzb3VyY2UpIGlzIGF2YWlsYWJsZSBmcm9tOgotICBodHRwOi8vaGVtLmZ5cmlzdG9yZy5jb20vbW9ndWwvdzk5NjYuaHRtbAorICBodHRwOi8vd3d3LnNsYWNrd2FyZXN1cHBvcnQuY29tL2hvd3Rvcy9XZWJjYW0tSE9XVE8KIAogVGhlIHNsb3cgZnJhbWVyYXRlIGlzIGR1ZSB0byBtaXNzaW5nIERNQSBFQ1AgcmVhZCBzdXBwb3J0IGluIHRoZQogcGFycG9ydCBkcml2ZXJzLiBJIG1pZ2h0IGFkZCB3b3JraW5nIEVQUCBzdXBwb3J0IGxhdGVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9wYWdlLXR5cGVzLmMgYi9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2UtdHlwZXMuYwppbmRleCA2NmU5MzU4Li5jY2Q5NTFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2UtdHlwZXMuYworKysgYi9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2UtdHlwZXMuYwpAQCAtNjk0LDcgKzY5NCw3IEBACiAjZW5kaWYKICIgICAgICAgICAgICAtbHwtLWxpc3QgICAgICAgICAgICAgICAgICBTaG93IHBhZ2UgZGV0YWlscyBpbiByYW5nZXNcbiIKICIgICAgICAgICAgICAtTHwtLWxpc3QtZWFjaCAgICAgICAgICAgICBTaG93IHBhZ2UgZGV0YWlscyBvbmUgYnkgb25lXG4iCi0iICAgICAgICAgICAgLU58LS1uby1zdW1tYXJ5ICAgICAgICAgICAgRG9uJ3Qgc2hvdyBzdW1tYXkgaW5mb1xuIgorIiAgICAgICAgICAgIC1OfC0tbm8tc3VtbWFyeSAgICAgICAgICAgIERvbid0IHNob3cgc3VtbWFyeSBpbmZvXG4iCiAiICAgICAgICAgICAgLVh8LS1od3BvaXNvbiAgICAgICAgICAgICAgaHdwb2lzb24gcGFnZXNcbiIKICIgICAgICAgICAgICAteHwtLXVucG9pc29uICAgICAgICAgICAgICB1bnBvaXNvbiBwYWdlc1xuIgogIiAgICAgICAgICAgIC1ofC0taGVscCAgICAgICAgICAgICAgICAgIFNob3cgdGhpcyB1c2FnZSBtZXNzYWdlXG4iCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3cxL21hc3RlcnMvZHMyNDgyIGIvRG9jdW1lbnRhdGlvbi93MS9tYXN0ZXJzL2RzMjQ4MgppbmRleCAyOTliOTFjLi41NmY4ZWRhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3cxL21hc3RlcnMvZHMyNDgyCisrKyBiL0RvY3VtZW50YXRpb24vdzEvbWFzdGVycy9kczI0ODIKQEAgLTYsOCArNiw4IEBACiAgICAgUHJlZml4OiAnZHMyNDgyJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBOb25lCiAgICAgRGF0YXNoZWV0czoKLSAgICAgICAgaHR0cDovL3BkZnNlcnYubWF4aW0taWMuY29tL2VuL2RzL0RTMjQ4Mi0xMDAtRFMyNDgyUy0xMDAucGRmCi0gICAgICAgIGh0dHA6Ly9wZGZzZXJ2Lm1heGltLWljLmNvbS9lbi9kcy9EUzI0ODItODAwLURTMjQ4MlMtODAwLnBkZgorICAgICAgICBodHRwOi8vZGF0YXNoZWV0cy5tYXhpbS1pYy5jb20vZW4vZHMvRFMyNDgyLTEwMC5wZGYKKyAgICAgICAgaHR0cDovL2RhdGFzaGVldHMubWF4aW0taWMuY29tL2VuL2RzL0RTMjQ4Mi04MDAucGRmCiAKIEF1dGhvcjogQmVuIEdhcmRuZXIgPGJnYXJkbmVyQHdhYnRlYy5jb20+CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdzEvbWFzdGVycy9teGMtdzEgYi9Eb2N1bWVudGF0aW9uL3cxL21hc3RlcnMvbXhjLXcxCmluZGV4IDk3ZjYxOTkuLjM4YmUxYWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdzEvbWFzdGVycy9teGMtdzEKKysrIGIvRG9jdW1lbnRhdGlvbi93MS9tYXN0ZXJzL214Yy13MQpAQCAtNSw3ICs1LDggQEAKICAgKiBGcmVlc2NhbGUgTVgyNywgTVgzMSBhbmQgcHJvYmFibHkgb3RoZXIgaS5NWCBTb0NzCiAgICAgRGF0YXNoZWV0czoKICAgICAgICAgaHR0cDovL3d3dy5mcmVlc2NhbGUuY29tL2ZpbGVzLzMyYml0L2RvYy9kYXRhX3NoZWV0L01DSU1YMzEucGRmP2Zwc3A9MQotCWh0dHA6Ly93d3cuZnJlZXNjYWxlLmNvbS9maWxlcy9kc3AvTUNJTVgyNy5wZGY/ZnBzcD0xCisJaHR0cDovL2NhY2hlLmZyZWVzY2FsZS5jb20vZmlsZXMvZHNwL2RvYy9hcmNoaXZlL01DSU1YMjcucGRmP2ZzcmNoPTEmV1RfVFlQRT0KKwlEYXRhJTIwU2hlZXRzJldUX1ZFTkRPUj1GUkVFU0NBTEUmV1RfRklMRV9GT1JNQVQ9cGRmJldUX0FTU0VUPURvY3VtZW50YXRpb24KIAogQXV0aG9yOiBPcmlnaW5hbGx5IGJhc2VkIG9uIEZyZWVzY2FsZSBjb2RlLCBwcmVwYXJlZCBmb3IgbWFpbmxpbmUgYnkKIAlTYXNjaGEgSGF1ZXIgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3cxL21hc3RlcnMvb21hcC1oZHEgYi9Eb2N1bWVudGF0aW9uL3cxL21hc3RlcnMvb21hcC1oZHEKaW5kZXggY2E3MjJlMC4uODg0ZGMyOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi93MS9tYXN0ZXJzL29tYXAtaGRxCisrKyBiL0RvY3VtZW50YXRpb24vdzEvbWFzdGVycy9vbWFwLWhkcQpAQCAtNyw3ICs3LDcgQEAKIAogQSB1c2VmdWwgbGluayBhYm91dCBIRFEgYmFzaWNzOgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotaHR0cDovL2ZvY3VzLnRpLmNvbS9saXQvYW4vc2x1YTQwOC9zbHVhNDA4LnBkZgoraHR0cDovL2ZvY3VzLnRpLmNvbS9saXQvYW4vc2x1YTQwOGEvc2x1YTQwOGEucGRmCiAKIERlc2NyaXB0aW9uOgogPT09PT09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3poX0NOL0hPV1RPIGIvRG9jdW1lbnRhdGlvbi96aF9DTi9IT1dUTwppbmRleCAzZDgwZThhLi42OTE2MDc3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3poX0NOL0hPV1RPCisrKyBiL0RvY3VtZW50YXRpb24vemhfQ04vSE9XVE8KQEAgLTExMiw3ICsxMTIsNyBAQAogCiAgICAg5YW25LuW5YWz5LqO5aaC5L2V5q2j56Gu5Zyw55Sf5oiQ6KGl5LiB55qE5LyY56eA5paH5qGj5YyF5ous77yaCiAgICAgIlRoZSBQZXJmZWN0IFBhdGNoIgotICAgICAgICBodHRwOi8vd3d3LnppcC5jb20uYXUvfmFrcG0vbGludXgvcGF0Y2hlcy9zdHVmZi90cHAudHh0CisgICAgICAgIGh0dHA6Ly91c2Vyd2ViLmtlcm5lbC5vcmcvfmFrcG0vc3R1ZmYvdHBwLnR4dAogICAgICJMaW51eCBrZXJuZWwgcGF0Y2ggc3VibWlzc2lvbiBmb3JtYXQiCiAgICAgICAgIGh0dHA6Ly9saW51eC55eXoudXMvcGF0Y2gtZm9ybWF0Lmh0bWwKIApAQCAtMTY4LDcgKzE2OCw3IEBACiAKIOWmguaenOS9oOaDs+WKoOWFpeWGheaguOW8gOWPkeekvuWMuuW5tuWNj+WKqeWujOaIkOS4gOS6m+S7u+WKoe+8jOWNtOaJvuS4jeWIsOS7juWTqumHjOW8gOWni++8jOWPr+S7peiuv+mXrgog4oCcTGludXjlhoXmoLjmiL/nrqHlkZjigJ3orqHliJLvvJoKLQlodHRwOi8vamFuaXRvci5rZXJuZWxuZXdiaWVzLm9yZy8KKwlodHRwOi8va2VybmVsbmV3Ymllcy5vcmcvS2VybmVsSmFuaXRvcnMKIOi/meaYr+aegeS9s+eahOi1t+eCueOAguWug+aPkOS+m+S4gOS4quebuOWvueeugOWNleeahOS7u+WKoeWIl+ihqO+8jOWIl+WHuuWGheaguOS7o+eggeS4remcgOimgeiiq+mHjeaWsAog5pW055CG5oiW6ICF5pS55q2j55qE5Zyw5pa544CC6YCa6L+H5ZKM6LSf6LSj6L+Z5Liq6K6h5YiS55qE5byA5Y+R6ICF5Lus5LiA5ZCM5bel5L2c77yM5L2g5Lya5a2m5Yiw5bCG6KGl5LiBCiDpm4bmiJDov5vlhoXmoLjnmoTln7rmnKzljp/nkIbjgILlpoLmnpzov5jmsqHmnInlhrPlrprkuIvkuIDmraXopoHlgZrku4DkuYjnmoTor53vvIzkvaDov5jlj6/og73kvJrlvpfliLDmlrkKQEAgLTUxNSw3ICs1MTUsNyBAQAogCiDmg7Pkuobop6PlroPlhbfkvZPlupTor6XnnIvotbfmnaXlg4/ku4DkuYjvvIzor7fmn6XpmIXku6XkuIvmlofmoaPkuK3nmoTigJxDaGFuZ2VMb2figJ3nq6DoioLvvJoKICAg4oCcVGhlIFBlcmZlY3QgUGF0Y2jigJ0KLSAgICAgIGh0dHA6Ly93d3cuemlwLmNvbS5hdS9+YWtwbS9saW51eC9wYXRjaGVzL3N0dWZmL3RwcC50eHQKKyAgCSBodHRwOi8vdXNlcndlYi5rZXJuZWwub3JnL35ha3BtL3N0dWZmL3RwcC50eHQKIAogCiDov5nkupvkuovmg4XmnInml7blgJnlgZrotbfmnaXlvojpmr7jgILopoHlnKjku7vkvZXmlrnpnaLpg73lgZrliLDlroznvo7lj6/og73pnIDopoHlpb3lh6DlubTml7bpl7TjgILov5nmmK8KQEAgLTUyNSw3ICs1MjUsNyBAQAogCiAtLS0tLS0tLS0tLS0tLS0KIOaEn+iwolBhb2xvIENpYXJyb2NjaGnlhYHorrjigJzlvIDlj5HmtYHnqIvigJ3pg6jliIbln7rkuo7ku5bmiYDlhpnnmoTmlofnq6AKLShodHRwOi8vbGludXgudGFyLmJ6L2FydGljbGVzLzIuNi1kZXZlbG9wbWVudF9wcm9jZXNzKe+8jOaEn+iwolJhbmR5CisoaHR0cDovL3d3dy5rZXJuZWx0cmF2ZWwubmV0L25ld2JpZS8yLjYtZGV2ZWxvcG1lbnRfcHJvY2VzcynvvIzmhJ/osKJSYW5keQogRHVubGFw5ZKMR2Vycml0IEh1aXplbmdh5a6M5ZaE5LqG5bqU6K+l6K+05ZKM5LiN6K+l6K+055qE5YiX6KGo44CC5oSf6LCiUGF0IE1vY2hlbCwgSGFubmEKIExpbmRlciwgUmFuZHkgRHVubGFwLCBLYXkgU2lldmVycywgVm9qdGVjaCBQYXZsaWssIEphbiBLYXJhLCBKb3NoIEJveWVyLAogS2VlcyBDb29rLCBBbmRyZXcgTW9ydG9uLCBBbmRpIEtsZWVuLCBWYWRpbSBMb2Jhbm92LCBKZXNwZXIgSnVobCwgQWRyaWFuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3poX0NOL1N1Ym1pdHRpbmdEcml2ZXJzIGIvRG9jdW1lbnRhdGlvbi96aF9DTi9TdWJtaXR0aW5nRHJpdmVycwppbmRleCA1ZjQ4MTVjLi5jMjdiMGY2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3poX0NOL1N1Ym1pdHRpbmdEcml2ZXJzCisrKyBiL0RvY3VtZW50YXRpb24vemhfQ04vU3VibWl0dGluZ0RyaXZlcnMKQEAgLTE2NSw0ICsxNjUsNCBAQAogCWh0dHA6Ly93d3cuZmVucnVzLm9yZy9ob3ctdG8tbm90LXdyaXRlLWEtZGV2aWNlLWRyaXZlci1wYXBlci5wZGYKIAog5YaF5qC45riF5rSB5belIChLZXJuZWwgSmFuaXRvcik6Ci0JaHR0cDovL2phbml0b3Iua2VybmVsbmV3Ymllcy5vcmcvCisJaHR0cDovL2tlcm5lbG5ld2JpZXMub3JnL0tlcm5lbEphbml0b3JzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3poX0NOL1N1Ym1pdHRpbmdQYXRjaGVzIGIvRG9jdW1lbnRhdGlvbi96aF9DTi9TdWJtaXR0aW5nUGF0Y2hlcwppbmRleCA5ODVjOTJlLi45YTFhNmUxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3poX0NOL1N1Ym1pdHRpbmdQYXRjaGVzCisrKyBiL0RvY3VtZW50YXRpb24vemhfQ04vU3VibWl0dGluZ1BhdGNoZXMKQEAgLTgzLDcgKzgzLDcgQEAKIGh0dHA6Ly9zYXZhbm5haC5ub25nbnUub3JnL3Byb2plY3RzL3F1aWx0CiAKIEFuZHJldyBNb3J0b24g55qE6KGl5LiB6ISa5pysOgotaHR0cDovL3d3dy56aXAuY29tLmF1L35ha3BtL2xpbnV4L3BhdGNoZXMvCitodHRwOi8vdXNlcndlYi5rZXJuZWwub3JnL35ha3BtL3N0dWZmL3BhdGNoLXNjcmlwdHMudGFyLmd6CiDkvZzkuLrov5nkupvohJrmnKznmoTmm7/ku6PvvIxxdWlsdCDmmK/lgLzlvpfmjqjojZDnmoTooaXkuIHnrqHnkIblt6Xlhbco55yL5LiK6Z2i55qE6ZO+5o6lKeOAggogCiAyKeaPj+i/sOS9oOeahOaUueWKqOOAggpAQCAtMTY2LDcgKzE2Niw3IEBACiAgIOS6uuaLt+i0ne+8jOWPquimgeWug+aYr+eQkOeijueahO+8iQogICDku7vkvZXmlofku7bnmoTkvZzogIUv57u05oqk6ICF5a+56K+l5paH5Lu255qE5pS55Yqo77yI5L6L5aaCIHBhdGNoIG1vbmtleSDlnKjph43kvKDmqKHlvI/kuIvvvIkKIAotVVJMOiA8aHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC9rZXJuZWwvcGVvcGxlL2J1bmsvdHJpdmlhbC8+CitFTUFJTDogdHJpdmlhbEBrZXJuZWwub3JnCiAKICjor5Hms6jvvIzlhbPkuo7igJznkJDnoo7ooaXkuIHigJ3nmoTkuIDkupvor7TmmI7vvJrlm6DkuLrljp/mlofnmoTov5nkuIDpg6jliIblhpnlvpfmr5TovoPnroDljZXvvIzmiYDku6XkuI3lvpfkuI0KIOi/neS+i+WGmeS4gOS4i+ivkeazqOOAgiJ0cml2aWFsIui/meS4quiLseaWh+WNleivjeeahOacrOaEj+aYr+KAnOeQkOeijueahO+8jOS4jemHjeimgeeahOOAguKAneS9huaYr+WcqOi/memHjApAQCAtMzk0LDcgKzM5NCw3IEBACiAtLS0tLS0tLS0tLS0tLS0tCiAKIEFuZHJldyBNb3J0b24sICJUaGUgcGVyZmVjdCBwYXRjaCIgKHRwcCkuCi0gIDxodHRwOi8vd3d3LnppcC5jb20uYXUvfmFrcG0vbGludXgvcGF0Y2hlcy9zdHVmZi90cHAudHh0PgorICA8aHR0cDovL3VzZXJ3ZWIua2VybmVsLm9yZy9+YWtwbS9zdHVmZi90cHAudHh0PgogCiBKZWZmIEdhcnppaywgIkxpbnV4IGtlcm5lbCBwYXRjaCBzdWJtaXNzaW9uIGZvcm1hdCIuCiAgIDxodHRwOi8vbGludXgueXl6LnVzL3BhdGNoLWZvcm1hdC5odG1sPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi96aF9DTi9zcGFyc2UudHh0IGIvRG9jdW1lbnRhdGlvbi96aF9DTi9zcGFyc2UudHh0CmluZGV4IDc1OTkyYTYuLmNjMTQ0ZTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vemhfQ04vc3BhcnNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3poX0NOL3NwYXJzZS50eHQKQEAgLTIyLDcgKzIyLDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBDb3B5cmlnaHQgMjAwNCBMaW51cyBUb3J2YWxkcwotQ29weXJpZ2h0IDIwMDQgUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PgorQ29weXJpZ2h0IDIwMDQgUGF2ZWwgTWFjaGVrIDxwYXZlbEB1Y3cuY3o+CiBDb3B5cmlnaHQgMjAwNiBCb2IgQ29wZWxhbmQgPG1lQGJvYmNvcGVsYW5kLmNvbT4KIAog5L2/55SoIHNwYXJzZSDlt6XlhbflgZrnsbvlnovmo4Dmn6UKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggYTA3YTQ5ZC4uMTAwYTNmNSAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTMxMywxMSArMzEzLDkgQEAKIEY6CWRyaXZlcnMvaHdtb24vYWRtMTAyOS5jCiAKIEFETTgyMTEgV0lSRUxFU1MgRFJJVkVSCi1NOglNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4KIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2xpbnV4d2lyZWxlc3Mub3JnLwotVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9td3UvbWFjODAyMTEtZHJpdmVycy5naXQKLVM6CU1haW50YWluZWQKK1M6CU9ycGhhbgogRjoJZHJpdmVycy9uZXQvd2lyZWxlc3MvYWRtODIxMS4qCiAKIEFEVDc0NlggRkFOIERSSVZFUgpAQCAtMTM2OSw3ICsxMzY3LDcgQEAKIE06CUVpbG9uIEdyZWVuc3RlaW4gPGVpbG9uZ0Bicm9hZGNvbS5jb20+CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBTOglTdXBwb3J0ZWQKLUY6CWRyaXZlcnMvbmV0L2JueDJ4KgorRjoJZHJpdmVycy9uZXQvYm54MngvCiAKIEJST0FEQ09NIFRHMyBHSUdBQklUIEVUSEVSTkVUIERSSVZFUgogTToJTWF0dCBDYXJsc29uIDxtY2FybHNvbkBicm9hZGNvbS5jb20+CkBAIC0xNTcxLDYgKzE1NjksMTYgQEAKIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvY2xhc3NtYXRlLWxhcHRvcC5jCiAKK0NPQ0NJTkVMTEUvU2VtYW50aWMgUGF0Y2hlcyAoU21QTCkKK006CUp1bGlhIExhd2FsbCA8anVsaWFAZGlrdS5kaz4KK006CUdpbGxlcyBNdWxsZXIgPEdpbGxlcy5NdWxsZXJAbGlwNi5mcj4KK006CU5pY29sYXMgUGFsaXggPG5wYWxpeEBkaWt1LmRrPgorTDoJY29jY2lAZGlrdS5kayAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCitXOglodHRwOi8vY29jY2luZWxsZS5saXA2LmZyLworUzoJU3VwcG9ydGVkCitGOglzY3JpcHRzL2NvY2NpbmVsbGUvCitGOglzY3JpcHRzL2NvY2NpY2hlY2sKKwogQ09EQSBGSUxFIFNZU1RFTQogTToJSmFuIEhhcmtlcyA8amFoYXJrZXNAY3MuY211LmVkdT4KIE06CWNvZGFAY3MuY211LmVkdQpAQCAtMTc3MSw2ICsxNzc5LDEzIEBACiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC8KIAorQ1hHQjRWRiBFVEhFUk5FVCBEUklWRVIgKENYR0I0VkYpCitNOglDYXNleSBMZWVkb20gPGxlZWRvbUBjaGVsc2lvLmNvbT4KK0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKK1c6CWh0dHA6Ly93d3cuY2hlbHNpby5jb20KK1M6CVN1cHBvcnRlZAorRjoJZHJpdmVycy9uZXQvY3hnYjR2Zi8KKwogQ1lCRVJQUk8gRkIgRFJJVkVSCiBNOglSdXNzZWxsIEtpbmcgPGxpbnV4QGFybS5saW51eC5vcmcudWs+CiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQpAQCAtMjEyMSw3ICsyMTM2LDkgQEAKIEw6CWxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnCiBXOglibHVlc21va2Uuc291cmNlZm9yZ2UubmV0CiBTOglNYWludGFpbmVkCi1GOglkcml2ZXJzL2VkYWMvaTdjb3JlX2VkYWMuYyBsaW51eC9lZGFjX21jZS5oIGRyaXZlcnMvZWRhYy9lZGFjX21jZS5jCitGOglkcml2ZXJzL2VkYWMvaTdjb3JlX2VkYWMuYworRjoJZHJpdmVycy9lZGFjL2VkYWNfbWNlLmMKK0Y6CWluY2x1ZGUvbGludXgvZWRhY19tY2UuaAogCiBFREFDLUk4Mjk3NVgKIE06CVJhbmdhbmF0aGFuIERlc2lrYW4gPHJhdmlAamV0enRlY2hub2xvZ2llcy5jb20+CkBAIC0yNjE4LDYgKzI2MzUsMTQgQEAKIEY6CURvY3VtZW50YXRpb24vYmxvY2tkZXYvY3BxYXJyYXkudHh0CiBGOglkcml2ZXJzL2Jsb2NrL2NwcWFycmF5LioKIAorSEVXTEVUVC1QQUNLQVJEIFNNQVJUIEFSUkFZIFJBSUQgRFJJVkVSIChocHNhKQorTToJU3RlcGhlbiBNLiBDYW1lcm9uIDxzY2FtZXJvbkBiZWFyZG9nLmNjZS5ocC5jb20+CitMOglpc3Nfc3RvcmFnZWRldkBocC5jb20KK1M6CVN1cHBvcnRlZAorRjoJRG9jdW1lbnRhdGlvbi9zY3NpL2hwc2EudHh0CitGOglkcml2ZXJzL3Njc2kvaHBzYSouW2NoXQorRjoJaW5jbHVkZS9saW51eC9jY2lzcyouaAorCiBIRVdMRVRULVBBQ0tBUkQgU01BUlQgQ0lTUyBSQUlEIERSSVZFUiAoY2Npc3MpCiBNOglNaWtlIE1pbGxlciA8bWlrZS5taWxsZXJAaHAuY29tPgogTDoJaXNzX3N0b3JhZ2VkZXZAaHAuY29tCkBAIC0zMjUxLDggKzMyNzYsOCBAQAogCiBLRVJORUwgQlVJTEQgKyBmaWxlcyBiZWxvdyBzY3JpcHRzLyAodW5sZXNzIG1haW50YWluZWQgZWxzZXdoZXJlKQogTToJTWljaGFsIE1hcmVrIDxtbWFyZWtAc3VzZS5jej4KLVQ6CWdpdCBnaXQ6Ly9yZXBvLm9yLmN6L2xpbnV4LWtidWlsZC5naXQgZm9yLW5leHQKLVQ6CWdpdCBnaXQ6Ly9yZXBvLm9yLmN6L2xpbnV4LWtidWlsZC5naXQgZm9yLWxpbnVzCitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L21tYXJlay9rYnVpbGQtMi42LmdpdCBmb3ItbmV4dAorVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9tbWFyZWsva2J1aWxkLTIuNi5naXQgcmMtZml4ZXMKIEw6CWxpbnV4LWtidWlsZEB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24va2J1aWxkLwpAQCAtMzM3OCwxMyArMzQwMyw2IEBACiBGOgltbS9rbWVtbGVhay5jCiBGOgltbS9rbWVtbGVhay10ZXN0LmMKIAotS01FTVRSQUNFCi1NOglFZHVhcmQgLSBHYWJyaWVsIE11bnRlYW51IDxlZHVhcmQubXVudGVhbnVAbGludXgzNjAucm8+Ci1TOglNYWludGFpbmVkCi1GOglEb2N1bWVudGF0aW9uL3RyYWNlL2ttZW10cmFjZS50eHQKLUY6CWluY2x1ZGUvbGludXgva21lbXRyYWNlLmgKLUY6CWtlcm5lbC90cmFjZS9rbWVtdHJhY2UuYwotCiBLUFJPQkVTCiBNOglBbmFudGggTiBNYXZpbmFrYXlhbmFoYWxsaSA8YW5hbnRoQGluLmlibS5jb20+CiBNOglBbmlsIFMgS2VzaGF2YW11cnRoeSA8YW5pbC5zLmtlc2hhdmFtdXJ0aHlAaW50ZWwuY29tPgpAQCAtMzY4NCw3ICszNzAyLDcgQEAKIE1BUlZFTEwgTVdMOEsgV0lSRUxFU1MgRFJJVkVSCiBNOglMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEB3YW50c3RvZmx5Lm9yZz4KIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwotUzoJTWFpbnRhaW5lZAorUzoJT2RkIEZpeGVzCiBGOglkcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jCiAKIE1BUlZFTEwgU09DIE1NQy9TRC9TRElPIENPTlRST0xMRVIgRFJJVkVSCkBAIC0zOTEzLDE3ICszOTMxLDE5IEBACiBTOglNYWludGFpbmVkCiBGOgluZXQvc2NoZWQvc2NoX25ldGVtLmMKIAotTkVURVJJT04gKFMySU8pIDEwR2JFIERSSVZFUiAoeGZyYW1lL3Z4Z2UpCi1NOglSYW1rcmlzaG5hIFZlcGEgPHJhbS52ZXBhQG5ldGVyaW9uLmNvbT4KLU06CVJhc3RhcHVyIFNhbnRvc2ggPHNhbnRvc2gucmFzdGFwdXJAbmV0ZXJpb24uY29tPgotTToJU2l2YWt1bWFyIFN1YnJhbWFuaSA8c2l2YWt1bWFyLnN1YnJhbWFuaUBuZXRlcmlvbi5jb20+Ci1NOglTcmVlbml2YXNhIEhvbm51ciA8c3JlZW5pdmFzYS5ob25udXJAbmV0ZXJpb24uY29tPgorTkVURVJJT04gMTBHYkUgRFJJVkVSUyAoczJpby92eGdlKQorTToJUmFta3Jpc2huYSBWZXBhIDxyYW1rcmlzaG5hLnZlcGFAZXhhci5jb20+CitNOglTaXZha3VtYXIgU3VicmFtYW5pIDxzaXZha3VtYXIuc3VicmFtYW5pQGV4YXIuY29tPgorTToJU3JlZW5pdmFzYSBIb25udXIgPHNyZWVuaXZhc2EuaG9ubnVyQGV4YXIuY29tPgorTToJSm9uIE1hc29uIDxqb24ubWFzb25AZXhhci5jb20+CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vdHJhYy5uZXRlcmlvbi5jb20vY2dpLWJpbi90cmFjLmNnaS93aWtpL0xpbnV4P0Fub255bW91cwogVzoJaHR0cDovL3RyYWMubmV0ZXJpb24uY29tL2NnaS1iaW4vdHJhYy5jZ2kvd2lraS9YMzEwMExpbnV4P0Fub255bW91cwogUzoJU3VwcG9ydGVkCiBGOglEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvczJpby50eHQKIEY6CWRyaXZlcnMvbmV0L3MyaW8qCitGOglEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdnhnZS50eHQKK0Y6CWRyaXZlcnMvbmV0L3Z4Z2UvCiAKIE5FVEZJTFRFUi9JUFRBQkxFUy9JUENIQUlOUwogUDoJUnVzdHkgUnVzc2VsbApAQCAtNDI3MCwxMCArNDI5MCw5IEBACiBGOglmcy9leG9mcy8KIAogUDU0IFdJUkVMRVNTIERSSVZFUgotTToJTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+CitNOglDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUBnb29nbGVtYWlsLmNvbT4KIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwotVzoJaHR0cDovL3ByaXNtNTQub3JnCi1UOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L213dS9tYWM4MDIxMS1kcml2ZXJzLmdpdAorVzoJaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vdXNlcnMvRHJpdmVycy9wNTQKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC8KIApAQCAtNDUzNSw3ICs0NTU0LDcgQEAKIE06CSJMdWlzIFIuIFJvZHJpZ3VleiIgPG1jZ3JvZkBnbWFpbC5jb20+CiBMOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9wcmlzbTU0Lm9yZwotUzoJTWFpbnRhaW5lZAorUzoJT2Jzb2xldGUKIEY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvCiAKIFBST01JU0UgREM0MDMwIENBQ0hJTkcgRElTSyBDT05UUk9MTEVSIERSSVZFUgpAQCAtNDcxNSw3ICs0NzM0LDcgQEAKIEY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC8KIAogUkFNRElTSyBSQU0gQkxPQ0sgREVWSUNFIERSSVZFUgotTToJTmljayBQaWdnaW4gPG5waWdnaW5Ac3VzZS5kZT4KK006CU5pY2sgUGlnZ2luIDxucGlnZ2luQGtlcm5lbC5kaz4KIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vYmxvY2tkZXYvcmFtZGlzay50eHQKIEY6CWRyaXZlcnMvYmxvY2svYnJkLmMKQEAgLTQ3MzEsOSArNDc1MCw4IEBACiBGOglkcml2ZXJzL3JhcGlkaW8vCiAKIFJBWUxJTksvV0VCR0VBUiA4MDIuMTEgV0lSRUxFU1MgTEFOIERSSVZFUgotTToJQ29yZXkgVGhvbWFzIDxjb3JleXRob21hc0BjaGFydGVyLm5ldD4KIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwotUzoJTWFpbnRhaW5lZAorUzoJT3JwaGFuCiBGOglkcml2ZXJzL25ldC93aXJlbGVzcy9yYXkqCiAKIFJDVVRPUlRVUkUgTU9EVUxFCkBAIC01MDU5LDYgKzUwNzcsMTQgQEAKIEY6CWluY2x1ZGUvbGludXgvc2VsaW51eCoKIEY6CXNlY3VyaXR5L3NlbGludXgvCiAKK0FQUEFSTU9SIFNFQ1VSSVRZIE1PRFVMRQorTToJSm9obiBKb2hhbnNlbiA8am9obi5qb2hhbnNlbkBjYW5vbmljYWwuY29tPgorTDoJYXBwYXJtb3JAbGlzdHMudWJ1bnR1LmNvbSAoc3Vic2NyaWJlcnMtb25seSwgZ2VuZXJhbCBkaXNjdXNzaW9uKQorVzoJYXBwYXJtb3Iud2lraS5rZXJuZWwub3JnCitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2pqL2FwcGFybW9yLWRldi5naXQKK1M6CVN1cHBvcnRlZAorRjoJc2VjdXJpdHkvYXBwYXJtb3IvCisKIFNFTlNBQkxFIFBIQU5UT00KIE06CUppcmkgU2xhYnkgPGppcmlzbGFieUBnbWFpbC5jb20+CiBTOglNYWludGFpbmVkCkBAIC01MzM0LDYgKzUzNjAsNyBAQAogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9kYXZlbS9zcGFyYy1uZXh0LTIuNi5naXQKIFM6CU1haW50YWluZWQKIEY6CWFyY2gvc3BhcmMvCitGOglkcml2ZXJzL3NidXMvCiAKIFNQQVJDIFNFUklBTCBEUklWRVJTCiBNOgkiRGF2aWQgUy4gTWlsbGVyIiA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KQEAgLTU2MDIsNyArNTYyOSw3IEBACiBMOgl0b21veW8tZGV2QGxpc3RzLnNvdXJjZWZvcmdlLmpwIChzdWJzY3JpYmVycy1vbmx5LCBmb3IgZGV2ZWxvcGVycyBpbiBKYXBhbmVzZSkKIEw6CXRvbW95by11c2Vyc0BsaXN0cy5zb3VyY2Vmb3JnZS5qcCAoc3Vic2NyaWJlcnMtb25seSwgZm9yIHVzZXJzIGluIEphcGFuZXNlKQogVzoJaHR0cDovL3RvbW95by5zb3VyY2Vmb3JnZS5qcC8KLVQ6CXF1aWx0IGh0dHA6Ly9zdm4uc291cmNlZm9yZ2UuanAvc3Zucm9vdC90b21veW8vdHJ1bmsvMi4yLngvdG9tb3lvLWxzbS9wYXRjaGVzLworVDoJcXVpbHQgaHR0cDovL3N2bi5zb3VyY2Vmb3JnZS5qcC9zdm5yb290L3RvbW95by90cnVuay8yLjMueC90b21veW8tbHNtL3BhdGNoZXMvCiBTOglNYWludGFpbmVkCiBGOglzZWN1cml0eS90b21veW8vCiAKQEAgLTU2NTEsNyArNTY3OCw3IEBACiBNOglTdGV2ZW4gUm9zdGVkdCA8cm9zdGVkdEBnb29kbWlzLm9yZz4KIE06CUZyZWRlcmljIFdlaXNiZWNrZXIgPGZ3ZWlzYmVjQGdtYWlsLmNvbT4KIE06CUluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgotVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90aXAvbGludXgtMi42LXRpcC5naXQgdHJhY2luZy9jb3JlCitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RpcC9saW51eC0yLjYtdGlwLmdpdCBwZXJmL2NvcmUKIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dAogRjoJYXJjaC8qLyovKi9mdHJhY2UuaApAQCAtNjA1NywxMCArNjA4NCw5IEBACiBGOglkcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS8KIAogVVNCIFpEMTIwMSBEUklWRVIKLU06CUplcm9lbiBWcmVla2VuIDxwZTFyeHFAYW1zYXQub3JnPgotTDoJbGludXgtdXNiQHZnZXIua2VybmVsLm9yZworTDoJbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vbGludXgtbGMxMDAwMjAuc291cmNlZm9yZ2UubmV0Ci1TOglNYWludGFpbmVkCitTOglPcnBoYW4KIEY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIwMS4qCiAKIFVTQiBaUjM2NFhYIERSSVZFUgpAQCAtNjI0MCwyMCArNjI2NiwxNCBAQAogCiBXQVRDSERPRyBERVZJQ0UgRFJJVkVSUwogTToJV2ltIFZhbiBTZWJyb2VjayA8d2ltQGlndWFuYS5iZT4KK0w6CWxpbnV4LXdhdGNoZG9nQHZnZXIua2VybmVsLm9yZworVzoJaHR0cDovL3d3dy5saW51eC13YXRjaGRvZy5vcmcvCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3dpbS9saW51eC0yLjYtd2F0Y2hkb2cuZ2l0CiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL3dhdGNoZG9nLwogRjoJZHJpdmVycy93YXRjaGRvZy8KIEY6CWluY2x1ZGUvbGludXgvd2F0Y2hkb2cuaAogCi1XQVZFTEFOIE5FVFdPUksgRFJJVkVSICYgV0lSRUxFU1MgRVhURU5TSU9OUwotTToJSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgotTDoJbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnCi1XOglodHRwOi8vd3d3LmhwbC5ocC5jb20vcGVyc29uYWwvSmVhbl9Ub3VycmlsaGVzL0xpbnV4LwotUzoJTWFpbnRhaW5lZAotRjoJRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3dhdmVsYW4udHh0Ci1GOglkcml2ZXJzL3N0YWdpbmcvd2F2ZWxhbi8KLQogV0Q3MDAwIFNDU0kgRFJJVkVSCiBNOglNaXJvc2xhdiBaYWdvcmFjIDx6YWdhQGZseS5jYy5mZXIuaHI+CiBMOglsaW51eC1zY3NpQHZnZXIua2VybmVsLm9yZwpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCBmOTgzNWM4Li43NDMxYzI4IDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKIFZFUlNJT04gPSAyCiBQQVRDSExFVkVMID0gNgogU1VCTEVWRUwgPSAzNQotRVhUUkFWRVJTSU9OID0gLXJjNAorRVhUUkFWRVJTSU9OID0KIE5BTUUgPSBTaGVlcCBvbiBNZXRoCiAKICMgKkRPQ1VNRU5UQVRJT04qCkBAIC0zMzIsMTAgKzMzMiw5IEBACiAKIENIRUNLRkxBR1MgICAgIDo9IC1EX19saW51eF9fIC1EbGludXggLURfX1NURENfXyAtRHVuaXggLURfX3VuaXhfXyBcCiAJCSAgLVdiaXR3aXNlIC1Xbm8tcmV0dXJuLXZvaWQgJChDRikKLU1PREZMQUdTCT0gLURNT0RVTEUKLUNGTEFHU19NT0RVTEUgICA9ICQoTU9ERkxBR1MpCi1BRkxBR1NfTU9EVUxFICAgPSAkKE1PREZMQUdTKQotTERGTEFHU19NT0RVTEUgID0gLVQgJChzcmN0cmVlKS9zY3JpcHRzL21vZHVsZS1jb21tb24ubGRzCitDRkxBR1NfTU9EVUxFICAgPQorQUZMQUdTX01PRFVMRSAgID0KK0xERkxBR1NfTU9EVUxFICA9CiBDRkxBR1NfS0VSTkVMCT0KIEFGTEFHU19LRVJORUwJPQogQ0ZMQUdTX0dDT1YJPSAtZnByb2ZpbGUtYXJjcyAtZnRlc3QtY292ZXJhZ2UKQEAgLTM1NCw3ICszNTMsMTIgQEAKIAkJICAgLVdlcnJvci1pbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbiBcCiAJCSAgIC1Xbm8tZm9ybWF0LXNlY3VyaXR5IFwKIAkJICAgLWZuby1kZWxldGUtbnVsbC1wb2ludGVyLWNoZWNrcworS0JVSUxEX0FGTEFHU19LRVJORUwgOj0KK0tCVUlMRF9DRkxBR1NfS0VSTkVMIDo9CiBLQlVJTERfQUZMQUdTICAgOj0gLURfX0FTU0VNQkxZX18KK0tCVUlMRF9BRkxBR1NfTU9EVUxFICA6PSAtRE1PRFVMRQorS0JVSUxEX0NGTEFHU19NT0RVTEUgIDo9IC1ETU9EVUxFCitLQlVJTERfTERGTEFHU19NT0RVTEUgOj0gLVQgJChzcmN0cmVlKS9zY3JpcHRzL21vZHVsZS1jb21tb24ubGRzCiAKICMgUmVhZCBLRVJORUxSRUxFQVNFIGZyb20gaW5jbHVkZS9jb25maWcva2VybmVsLnJlbGVhc2UgKGlmIGl0IGV4aXN0cykKIEtFUk5FTFJFTEVBU0UgPSAkKHNoZWxsIGNhdCBpbmNsdWRlL2NvbmZpZy9rZXJuZWwucmVsZWFzZSAyPiAvZGV2L251bGwpCkBAIC0zNjksNiArMzczLDggQEAKIGV4cG9ydCBLQlVJTERfQ1BQRkxBR1MgTk9TVERJTkNfRkxBR1MgTElOVVhJTkNMVURFIE9CSkNPUFlGTEFHUyBMREZMQUdTCiBleHBvcnQgS0JVSUxEX0NGTEFHUyBDRkxBR1NfS0VSTkVMIENGTEFHU19NT0RVTEUgQ0ZMQUdTX0dDT1YKIGV4cG9ydCBLQlVJTERfQUZMQUdTIEFGTEFHU19LRVJORUwgQUZMQUdTX01PRFVMRQorZXhwb3J0IEtCVUlMRF9BRkxBR1NfTU9EVUxFIEtCVUlMRF9DRkxBR1NfTU9EVUxFIEtCVUlMRF9MREZMQUdTX01PRFVMRQorZXhwb3J0IEtCVUlMRF9BRkxBR1NfS0VSTkVMIEtCVUlMRF9DRkxBR1NfS0VSTkVMCiAKICMgV2hlbiBjb21waWxpbmcgb3V0LW9mLXRyZWUgbW9kdWxlcywgcHV0IE1PRFZFUkRJUiBpbiB0aGUgbW9kdWxlCiAjIHRyZWUgcmF0aGVyIHRoYW4gaW4gdGhlIGtlcm5lbCB0cmVlLiBUaGUga2VybmVsIHRyZWUgbWlnaHQKQEAgLTQxMiw5ICs0MTgsOSBAQAogIyBvZiBtYWtlIHNvIC5jb25maWcgaXMgbm90IGluY2x1ZGVkIGluIHRoaXMgY2FzZSBlaXRoZXIgKGZvciAqY29uZmlnKS4KIAogbm8tZG90LWNvbmZpZy10YXJnZXRzIDo9IGNsZWFuIG1ycHJvcGVyIGRpc3RjbGVhbiBcCi0JCQkgY3Njb3BlIFRBR1MgdGFncyBoZWxwICVkb2NzIGNoZWNrJSBcCisJCQkgY3Njb3BlIFRBR1MgdGFncyBoZWxwICVkb2NzIGNoZWNrJSBjb2NjaWNoZWNrIFwKIAkJCSBpbmNsdWRlL2xpbnV4L3ZlcnNpb24uaCBoZWFkZXJzXyUgXAotCQkJIGtlcm5lbHJlbGVhc2Uga2VybmVsdmVyc2lvbgorCQkJIGtlcm5lbHZlcnNpb24gJXNyYy1wa2cKIAogY29uZmlnLXRhcmdldHMgOj0gMAogbWl4ZWQtdGFyZ2V0cyAgOj0gMApAQCAtNTI2LDcgKzUzMiw3IEBACiAjIFRoZSBhbGw6IHRhcmdldCBpcyB0aGUgZGVmYXVsdCB3aGVuIG5vIHRhcmdldCBpcyBnaXZlbiBvbiB0aGUKICMgY29tbWFuZCBsaW5lLgogIyBUaGlzIGFsbG93IGEgdXNlciB0byBpc3N1ZSBvbmx5ICdtYWtlJyB0byBidWlsZCBhIGtlcm5lbCBpbmNsdWRpbmcgbW9kdWxlcwotIyBEZWZhdWx0cyB2bWxpbnV4IGJ1dCBpdCBpcyB1c3VhbGx5IG92ZXJyaWRkZW4gaW4gdGhlIGFyY2ggbWFrZWZpbGUKKyMgRGVmYXVsdHMgdG8gdm1saW51eCwgYnV0IHRoZSBhcmNoIG1ha2VmaWxlIHVzdWFsbHkgYWRkcyBmdXJ0aGVyIHRhcmdldHMKIGFsbDogdm1saW51eAogCiBpZmRlZiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUKQEAgLTU1Nyw2ICs1NjMsMTAgQEAKIEtCVUlMRF9BRkxBR1MJKz0gLWdkd2FyZi0yCiBlbmRpZgogCitpZmRlZiBDT05GSUdfREVCVUdfSU5GT19SRURVQ0VECitLQlVJTERfQ0ZMQUdTIAkrPSAkKGNhbGwgY2Mtb3B0aW9uLCAtZmVtaXQtc3RydWN0LWRlYnVnLWJhc2Vvbmx5KQorZW5kaWYKKwogaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgogS0JVSUxEX0NGTEFHUwkrPSAtcGcKIGVuZGlmCkBAIC02MDMsNyArNjEzLDcgQEAKICMgVXNlIC0tYnVpbGQtaWQgd2hlbiBhdmFpbGFibGUuCiBMREZMQUdTX0JVSUxEX0lEID0gJChwYXRzdWJzdCAtV2wkKGNvbW1hKSUsJSxcCiAJCQkgICAgICAkKGNhbGwgY2MtbGRvcHRpb24sIC1XbCQoY29tbWEpLS1idWlsZC1pZCwpKQotTERGTEFHU19NT0RVTEUgKz0gJChMREZMQUdTX0JVSUxEX0lEKQorS0JVSUxEX0xERkxBR1NfTU9EVUxFICs9ICQoTERGTEFHU19CVUlMRF9JRCkKIExERkxBR1Nfdm1saW51eCArPSAkKExERkxBR1NfQlVJTERfSUQpCiAKIGlmZXEgKCQoQ09ORklHX1NUUklQX0FTTV9TWU1TKSx5KQpAQCAtMTE1OCw2ICsxMTY4LDggQEAKICMgcnBtIHRhcmdldCBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CiBwYWNrYWdlLWRpcgk6PSAkKHNyY3RyZWUpL3NjcmlwdHMvcGFja2FnZQogCislc3JjLXBrZzogRk9SQ0UKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKHBhY2thZ2UtZGlyKSAkQAogJXBrZzogaW5jbHVkZS9jb25maWcva2VybmVsLnJlbGVhc2UgRk9SQ0UKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKHBhY2thZ2UtZGlyKSAkQAogcnBtOiBpbmNsdWRlL2NvbmZpZy9rZXJuZWwucmVsZWFzZSBGT1JDRQpAQCAtMTIwOSw4ICsxMjIxLDkgQEAKIAlAZWNobyAgJyAgaW5jbHVkZWNoZWNrICAgIC0gQ2hlY2sgZm9yIGR1cGxpY2F0ZSBpbmNsdWRlZCBoZWFkZXIgZmlsZXMnCiAJQGVjaG8gICcgIGV4cG9ydF9yZXBvcnQgICAtIExpc3QgdGhlIHVzYWdlcyBvZiBhbGwgZXhwb3J0ZWQgc3ltYm9scycKIAlAZWNobyAgJyAgaGVhZGVyc19jaGVjayAgIC0gU2FuaXR5IGNoZWNrIG9uIGV4cG9ydGVkIGhlYWRlcnMnCi0JQGVjaG8gICcgIGhlYWRlcmRlcCAgICAgICAtIERldGVjdCBpbmNsdXNpb24gY3ljbGVzIGluIGhlYWRlcnMnOyBcCi0JIGVjaG8gICcnCisJQGVjaG8gICcgIGhlYWRlcmRlcCAgICAgICAtIERldGVjdCBpbmNsdXNpb24gY3ljbGVzIGluIGhlYWRlcnMnCisJQCQoTUFLRSkgLWYgJChzcmN0cmVlKS9zY3JpcHRzL01ha2VmaWxlLmhlbHAgY2hlY2tlci1oZWxwCisJQGVjaG8gICcnCiAJQGVjaG8gICdLZXJuZWwgcGFja2FnaW5nOicKIAlAJChNQUtFKSAkKGJ1aWxkKT0kKHBhY2thZ2UtZGlyKSBoZWxwCiAJQGVjaG8gICcnCkBAIC0xMzY5LDYgKzEzODIsOSBAQAogCQktbmFtZSAnKi5baGNTXScgLXR5cGUgZiAtcHJpbnQgfCBzb3J0IFwKIAkJfCB4YXJncyAkKFBFUkwpIC13ICQoc3JjdHJlZSkvc2NyaXB0cy9jaGVja3ZlcnNpb24ucGwKIAorY29jY2ljaGVjazoKKwkkKFEpJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy8kQAorCiBuYW1lc3BhY2VjaGVjazoKIAkkKFBFUkwpICQoc3JjdHJlZSkvc2NyaXB0cy9uYW1lc3BhY2UucGwKIApAQCAtMTM5Myw5ICsxNDA5LDkgQEAKIAkkKE9CSkRVTVApIC1kIHZtbGludXggJCQoZmluZCAuIC1uYW1lICcqLmtvJykgfCBcCiAJJChQRVJMKSAkKHNyYykvc2NyaXB0cy9jaGVja3N0YWNrLnBsICQoQ0hFQ0tTVEFDS19BUkNIKQogCi1rZXJuZWxyZWxlYXNlOgotCSQoaWYgJCh3aWxkY2FyZCBpbmNsdWRlL2NvbmZpZy9rZXJuZWwucmVsZWFzZSksICQoUSllY2hvICQoS0VSTkVMUkVMRUFTRSksIFwKLQkkKGVycm9yIGtlcm5lbHJlbGVhc2Ugbm90IHZhbGlkIC0gcnVuICdtYWtlIHByZXBhcmUnIHRvIHVwZGF0ZSBpdCkpCitrZXJuZWxyZWxlYXNlOiBpbmNsdWRlL2NvbmZpZy9rZXJuZWwucmVsZWFzZQorCUBlY2hvICQoS0VSTkVMUkVMRUFTRSkKKwoga2VybmVsdmVyc2lvbjoKIAlAZWNobyAkKEtFUk5FTFZFUlNJT04pCiAKQEAgLTE0NzIsNiArMTQ4OCw3IEBACiAgICAgICAgICAgICAgICAgICAkKGlmICQoS0JVSUxEX01PRFVMRVMpLDsgcm0gLWYgJChNT0RWRVJESVIpLyopCiAKIGFfZmxhZ3MgPSAtV3AsLU1ELCQoZGVwZmlsZSkgJChLQlVJTERfQUZMQUdTKSAkKEFGTEFHU19LRVJORUwpIFwKKwkgICQoS0JVSUxEX0FGTEFHU19LRVJORUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCSAgJChOT1NURElOQ19GTEFHUykgJChMSU5VWElOQ0xVREUpICQoS0JVSUxEX0NQUEZMQUdTKSBcCiAJICAkKG1vZGtlcm5fYWZsYWdzKSAkKEVYVFJBX0FGTEFHUykgJChBRkxBR1NfJChiYXNldGFyZ2V0KS5vKQogCmRpZmYgLS1naXQgYS9hcmNoL0tjb25maWcgYi9hcmNoL0tjb25maWcKaW5kZXggYWNkYTUxMi4uNDg3N2E4YyAxMDA2NDQKLS0tIGEvYXJjaC9LY29uZmlnCisrKyBiL2FyY2gvS2NvbmZpZwpAQCAtMTUxLDQgKzE1MSwxMSBAQAogY29uZmlnIEhBVkVfVVNFUl9SRVRVUk5fTk9USUZJRVIKIAlib29sCiAKK2NvbmZpZyBIQVZFX1BFUkZfRVZFTlRTX05NSQorCWJvb2wKKwloZWxwCisJICBTeXN0ZW0gaGFyZHdhcmUgY2FuIGdlbmVyYXRlIGFuIE5NSSB1c2luZyB0aGUgcGVyZiBldmVudAorCSAgc3Vic3lzdGVtLiAgQWxzbyBoYXMgc3VwcG9ydCBmb3IgY2FsY3VsYXRpbmcgQ1BVIGN5Y2xlIGV2ZW50cworCSAgdG8gZGV0ZXJtaW5lIGhvdyBtYW55IGNsb2NrIGN5Y2xlcyBpbiBhIGdpdmVuIHBlcmlvZC4KKwogc291cmNlICJrZXJuZWwvZ2Nvdi9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9LY29uZmlnIGIvYXJjaC9hbHBoYS9LY29uZmlnCmluZGV4IDNlMmU1NDAuLmI5NjQ3YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvS2NvbmZpZworKysgYi9hcmNoL2FscGhhL0tjb25maWcKQEAgLTQ3LDEwICs0Nyw2IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCi1jb25maWcgR0VORVJJQ19USU1FCi0JYm9vbAotCWRlZmF1bHQgeQotCiBjb25maWcgR0VORVJJQ19DTU9TX1VQREFURQogICAgICAgICBkZWZfYm9vbCB5CiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vbG9jYWw2NC5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9sb2NhbDY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjOTNiNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vbG9jYWw2NC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9sb2NhbDY0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnIGIvYXJjaC9hcm0vS2NvbmZpZwppbmRleCA5ODkyMmY3Li45ZTEwODgyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL0tjb25maWcKQEAgLTEwLDYgKzEwLDcgQEAKIAlkZWZhdWx0IHkKIAlzZWxlY3QgSEFWRV9BT1VUCiAJc2VsZWN0IEhBVkVfSURFCisJc2VsZWN0IEhBVkVfTUVNQkxPQ0sKIAlzZWxlY3QgUlRDX0xJQgogCXNlbGVjdCBTWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTgogCXNlbGVjdCBHRU5FUklDX0FUT01JQzY0IGlmICghQ1BVXzMydjZLKQpAQCAtMjQsNiArMjUsNyBAQAogCXNlbGVjdCBIQVZFX0tFUk5FTF9MWk1BCiAJc2VsZWN0IEhBVkVfUEVSRl9FVkVOVFMKIAlzZWxlY3QgUEVSRl9VU0VfVk1BTExPQworCXNlbGVjdCBIQVZFX1JFR1NfQU5EX1NUQUNLX0FDQ0VTU19BUEkKIAloZWxwCiAJICBUaGUgQVJNIHNlcmllcyBpcyBhIGxpbmUgb2YgbG93LXBvd2VyLWNvbnN1bXB0aW9uIFJJU0MgY2hpcCBkZXNpZ25zCiAJICBsaWNlbnNlZCBieSBBUk0gTHRkIGFuZCB0YXJnZXRlZCBhdCBlbWJlZGRlZCBhcHBsaWNhdGlvbnMgYW5kCkBAIC00MSwxMCArNDMsNiBAQAogY29uZmlnIEdFTkVSSUNfR1BJTwogCWJvb2wKIAotY29uZmlnIEdFTkVSSUNfVElNRQotCWJvb2wKLQlkZWZhdWx0IHkKLQogY29uZmlnIEFSQ0hfVVNFU19HRVRUSU1FT0ZGU0VUCiAJYm9vbAogCWRlZmF1bHQgbgpAQCAtNTUsNyArNTMsNyBAQAogY29uZmlnIEdFTkVSSUNfQ0xPQ0tFVkVOVFNfQlJPQURDQVNUCiAJYm9vbAogCWRlcGVuZHMgb24gR0VORVJJQ19DTE9DS0VWRU5UUwotCWRlZmF1bHQgeSBpZiBTTVAgJiYgIUxPQ0FMX1RJTUVSUworCWRlZmF1bHQgeSBpZiBTTVAKIAogY29uZmlnIEhBVkVfVENNCiAJYm9vbApAQCAtMzAxLDYgKzI5OSw3IEBACiAJc2VsZWN0IENQVV9WNgogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJc2VsZWN0IEFSTV9HSUMKKwlzZWxlY3QgUENJX0RPTUFJTlMgaWYgUENJCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgQ2F2aXVtIE5ldHdvcmtzIENOUzNYWFggcGxhdGZvcm0uCiAKQEAgLTQzOSwyMSArNDM4LDYgQEAKIAloZWxwCiAJICBTdXBwb3J0IGZvciBJbnRlbCdzIElYUDRYWCAoWFNjYWxlKSBmYW1pbHkgb2YgcHJvY2Vzc29ycy4KIAotY29uZmlnIEFSQ0hfTDcyMDAKLQlib29sICJMaW5rVXAtTDcyMDAiCi0Jc2VsZWN0IENQVV9BUk03MjBUCi0Jc2VsZWN0IEZJUQotCXNlbGVjdCBBUkNIX1VTRVNfR0VUVElNRU9GRlNFVAotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYSBMaW5rVXAgU3lzdGVtcwotCSAgTDcyMDAgU29mdHdhcmUgRGV2ZWxvcG1lbnQgQm9hcmQgd2hpY2ggdXNlcyBhbiBBUk03MjBUIHByb2Nlc3Nvci4KLQkgIEluZm9ybWF0aW9uIG9uIHRoaXMgYm9hcmQgY2FuIGJlIG9idGFpbmVkIGF0OgotCi0JICA8aHR0cDovL3d3dy5saW5rdXBzeXMuY29tLz4KLQotCSAgSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBjb21tZW50cyBhYm91dCB0aGUgTGludXgga2VybmVsIHBvcnQKLQkgIHRvIHRoaXMgYm9hcmQsIHNlbmQgZS1tYWlsIHRvIDxzamhpbGxAY290dy5jb20+LgotCiBjb25maWcgQVJDSF9ET1ZFCiAJYm9vbCAiTWFydmVsbCBEb3ZlIgogCXNlbGVjdCBQQ0kKQEAgLTQ4Miw2ICs0NjYsMTkgQEAKIAloZWxwCiAJICBTdXBwb3J0IGZvciB0aGUgTWFydmVsbCBMb2tpICg4OFJDODQ4MCkgU29DLgogCitjb25maWcgQVJDSF9MUEMzMlhYCisJYm9vbCAiTlhQIExQQzMyWFgiCisJc2VsZWN0IENQVV9BUk05MjZUCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCisJc2VsZWN0IEhBVkVfSURFCisJc2VsZWN0IEFSTV9BTUJBCisJc2VsZWN0IFVTQl9BUkNIX0hBU19PSENJCisJc2VsZWN0IENPTU1PTl9DTEtERVYKKwlzZWxlY3QgR0VORVJJQ19USU1FCisJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwloZWxwCisJICBTdXBwb3J0IGZvciB0aGUgTlhQIExQQzMyWFggZmFtaWx5IG9mIHByb2Nlc3NvcnMKKwogY29uZmlnIEFSQ0hfTVY3OFhYMAogCWJvb2wgIk1hcnZlbGwgTVY3OHh4MCIKIAlzZWxlY3QgQ1BVX0ZFUk9DRU9OCkBAIC01ODYsNiArNTgzLDcgQEAKIAlib29sICJRdWFsY29tbSBNU00iCiAJc2VsZWN0IEhBVkVfQ0xLCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAloZWxwCiAJICBTdXBwb3J0IGZvciBRdWFsY29tbSBNU00vUVNEIGJhc2VkIHN5c3RlbXMuICBUaGlzIHJ1bnMgb24gdGhlCiAJICBhcHBzIHByb2Nlc3NvciBvZiB0aGUgTVNNL1FTRCBhbmQgZGVwZW5kcyBvbiBhIHNoYXJlZCBtZW1vcnkKQEAgLTcxOSw3ICs3MTcsNiBAQAogY29uZmlnIEFSQ0hfTEg3QTQwWAogCWJvb2wgIlNoYXJwIExIN0E0MFgiCiAJc2VsZWN0IENQVV9BUk05MjJUCi0Jc2VsZWN0IEFSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpZiAhTEg3QTQwWF9DT05USUdNRU0KIAlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFIGlmICFMSDdBNDBYX0NPTlRJR01FTQogCXNlbGVjdCBBUkNIX1VTRVNfR0VUVElNRU9GRlNFVAogCWhlbHAKQEAgLTg0NSw2ICs4NDIsOCBAQAogCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtbG9raS9LY29uZmlnIgogCitzb3VyY2UgImFyY2gvYXJtL21hY2gtbHBjMzJ4eC9LY29uZmlnIgorCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtbXNtL0tjb25maWciCiAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1tdjc4eHgwL0tjb25maWciCkBAIC0xMDMxLDExICsxMDMwLDYgQEAKIAogc291cmNlICJhcmNoL2FybS9jb21tb24vS2NvbmZpZyIKIAotY29uZmlnIEZPUkNFX01BWF9aT05FT1JERVIKLQlpbnQKLQlkZXBlbmRzIG9uIFNBMTExMQotCWRlZmF1bHQgIjkiCi0KIG1lbnUgIkJ1cyBzdXBwb3J0IgogCiBjb25maWcgQVJNX0FNQkEKQEAgLTEwNjAsNyArMTA1NCw3IEBACiAJYm9vbAogCiBjb25maWcgUENJCi0JYm9vbCAiUENJIHN1cHBvcnQiIGlmIEFSQ0hfSU5URUdSQVRPUl9BUCB8fCBBUkNIX1ZFUlNBVElMRV9QQiB8fCBBUkNIX0lYUDRYWCB8fCBBUkNIX0tTODY5NSB8fCBNQUNIX0FSTUNPUkUKKwlib29sICJQQ0kgc3VwcG9ydCIgaWYgQVJDSF9JTlRFR1JBVE9SX0FQIHx8IEFSQ0hfVkVSU0FUSUxFX1BCIHx8IEFSQ0hfSVhQNFhYIHx8IEFSQ0hfS1M4Njk1IHx8IE1BQ0hfQVJNQ09SRSB8fCBBUkNIX0NOUzNYWFgKIAloZWxwCiAJICBGaW5kIG91dCB3aGV0aGVyIHlvdSBoYXZlIGEgUENJIG1vdGhlcmJvYXJkLiBQQ0kgaXMgdGhlIG5hbWUgb2YgYQogCSAgYnVzIHN5c3RlbSwgaS5lLiB0aGUgd2F5IHRoZSBDUFUgdGFsa3MgdG8gdGhlIG90aGVyIHN0dWZmIGluc2lkZQpAQCAtMTE3Miw5ICsxMTY2LDEwIEBACiBjb25maWcgTE9DQUxfVElNRVJTCiAJYm9vbCAiVXNlIGxvY2FsIHRpbWVyIGludGVycnVwdHMiCiAJZGVwZW5kcyBvbiBTTVAgJiYgKFJFQUxWSUVXX0VCX0FSTTExTVAgfHwgTUFDSF9SRUFMVklFV19QQjExTVAgfHwgXAotCQlSRUFMVklFV19FQl9BOU1QIHx8IE1BQ0hfUkVBTFZJRVdfUEJYIHx8IEFSQ0hfT01BUDQgfHwgQVJDSF9VODUwMCkKKwkJUkVBTFZJRVdfRUJfQTlNUCB8fCBNQUNIX1JFQUxWSUVXX1BCWCB8fCBBUkNIX09NQVA0IHx8IFwKKwkJQVJDSF9VODUwMCB8fCBBUkNIX1ZFWFBSRVNTX0NBOVg0KQogCWRlZmF1bHQgeQotCXNlbGVjdCBIQVZFX0FSTV9UV0QgaWYgKEFSQ0hfUkVBTFZJRVcgfHwgQVJDSF9PTUFQNCB8fCBBUkNIX1U4NTAwKQorCXNlbGVjdCBIQVZFX0FSTV9UV0QgaWYgKEFSQ0hfUkVBTFZJRVcgfHwgQVJDSF9WRVhQUkVTUyB8fCBBUkNIX09NQVA0IHx8IEFSQ0hfVTg1MDApCiAJaGVscAogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIGxvY2FsIHRpbWVycyBvbiBTTVAgcGxhdGZvcm1zLCByYXRoZXIgdGhlbiB0aGUKIAkgIGxlZ2FjeSBJUEkgYnJvYWRjYXN0IG1ldGhvZC4gIExvY2FsIHRpbWVycyBhbGxvd3MgdGhlIHN5c3RlbQpAQCAtMTE4NSwxMCArMTE4MCwxMCBAQAogCiBjb25maWcgSFoKIAlpbnQKLQlkZWZhdWx0IDEyOCBpZiBBUkNIX0w3MjAwCiAJZGVmYXVsdCAyMDAgaWYgQVJDSF9FQlNBMTEwIHx8IEFSQ0hfUzNDMjQxMCB8fCBBUkNIX1M1UDY0NDAgfHwgQVJDSF9TNVA2NDQyIHx8IEFSQ0hfUzVQVjIxMAogCWRlZmF1bHQgT01BUF8zMktfVElNRVJfSFogaWYgQVJDSF9PTUFQICYmIE9NQVBfMzJLX1RJTUVSCiAJZGVmYXVsdCBBVDkxX1RJTUVSX0haIGlmIEFSQ0hfQVQ5MQorCWRlZmF1bHQgU0hNT0JJTEVfVElNRVJfSFogaWYgQVJDSF9TSE1PQklMRQogCWRlZmF1bHQgMTAwCiAKIGNvbmZpZyBUSFVNQjJfS0VSTkVMCkBAIC0xMjQxLDEwICsxMjM2LDYgQEAKIGNvbmZpZyBBUkNIX0hBU19IT0xFU19NRU1PUllNT0RFTAogCWJvb2wKIAotIyBEaXNjb250aWdtZW0gaXMgZGVwcmVjYXRlZAotY29uZmlnIEFSQ0hfRElTQ09OVElHTUVNX0VOQUJMRQotCWJvb2wKLQogY29uZmlnIEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQogCWJvb2wKIApAQCAtMTI1MiwxMyArMTI0Myw3IEBACiAJZGVmX2Jvb2wgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCiAKIGNvbmZpZyBBUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwKLQlkZWZfYm9vbCBBUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgJiYgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCi0KLWNvbmZpZyBOT0RFU19TSElGVAotCWludAotCWRlZmF1bHQgIjQiIGlmIEFSQ0hfTEg3QTQwWAotCWRlZmF1bHQgIjIiCi0JZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCisJZGVmX2Jvb2wgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCiAKIGNvbmZpZyBISUdITUVNCiAJYm9vbCAiSGlnaCBNZW1vcnkgU3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKQEAgLTEyOTAsOCArMTI3NSwzMyBAQAogCSAgRW5hYmxlIGhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXIgc3VwcG9ydCBmb3IgcGVyZiBldmVudHMuIElmCiAJICBkaXNhYmxlZCwgcGVyZiBldmVudHMgd2lsbCB1c2Ugc29mdHdhcmUgZXZlbnRzIG9ubHkuCiAKK2NvbmZpZyBTUEFSU0VfSVJRCisJZGVmX2Jvb2wgbgorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzcGFyc2UgaXJxcy4gVGhpcyBpcyB1c2VmdWwgaW4gZ2VuZXJhbAorCSAgYXMgbW9zdCBDUFVzIGhhdmUgYSBmYWlybHkgc3BhcnNlIGFycmF5IG9mIElSUSB2ZWN0b3JzLCB3aGljaAorCSAgdGhlIGlycV9kZXNjIHRoZW4gbWFwcyBkaXJlY3RseSBvbiB0by4gU3lzdGVtcyB3aXRoIGEgaGlnaAorCSAgbnVtYmVyIG9mIG9mZi1jaGlwIElSUXMgd2lsbCB3YW50IHRvIHRyZWF0IHRoaXMgYXMKKwkgIGV4cGVyaW1lbnRhbCB1bnRpbCB0aGV5IGhhdmUgYmVlbiBpbmRlcGVuZGVudGx5IHZlcmlmaWVkLgorCiBzb3VyY2UgIm1tL0tjb25maWciCiAKK2NvbmZpZyBGT1JDRV9NQVhfWk9ORU9SREVSCisJaW50ICJNYXhpbXVtIHpvbmUgb3JkZXIiIGlmIEFSQ0hfU0hNT0JJTEUKKwlyYW5nZSAxMSA2NCBpZiBBUkNIX1NITU9CSUxFCisJZGVmYXVsdCAiOSIgaWYgU0ExMTExCisJZGVmYXVsdCAiMTEiCisJaGVscAorCSAgVGhlIGtlcm5lbCBtZW1vcnkgYWxsb2NhdG9yIGRpdmlkZXMgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeQorCSAgYmxvY2tzIGludG8gInpvbmVzIiwgd2hlcmUgZWFjaCB6b25lIGlzIGEgcG93ZXIgb2YgdHdvIG51bWJlciBvZgorCSAgcGFnZXMuICBUaGlzIG9wdGlvbiBzZWxlY3RzIHRoZSBsYXJnZXN0IHBvd2VyIG9mIHR3byB0aGF0IHRoZSBrZXJuZWwKKwkgIGtlZXBzIGluIHRoZSBtZW1vcnkgYWxsb2NhdG9yLiAgSWYgeW91IG5lZWQgdG8gYWxsb2NhdGUgdmVyeSBsYXJnZQorCSAgYmxvY2tzIG9mIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnksIHRoZW4geW91IG1heSBuZWVkIHRvCisJICBpbmNyZWFzZSB0aGlzIHZhbHVlLgorCisJICBUaGlzIGNvbmZpZyBvcHRpb24gaXMgYWN0dWFsbHkgbWF4aW11bSBvcmRlciBwbHVzIG9uZS4gRm9yIGV4YW1wbGUsCisJICBhIHZhbHVlIG9mIDExIG1lYW5zIHRoYXQgdGhlIGxhcmdlc3QgZnJlZSBtZW1vcnkgYmxvY2sgaXMgMl4xMCBwYWdlcy4KKwogY29uZmlnIExFRFMKIAlib29sICJUaW1lciBhbmQgQ1BVIHVzYWdlIExFRHMiCiAJZGVwZW5kcyBvbiBBUkNIX0NEQjg5NzEyIHx8IEFSQ0hfRUJTQTExMCB8fCBcCkBAIC0xMzc1LDYgKzEzODUsMjQgQEAKIAkgIEhvd2V2ZXIsIGlmIHRoZSBDUFUgZGF0YSBjYWNoZSBpcyB1c2luZyBhIHdyaXRlLWFsbG9jYXRlIG1vZGUsCiAJICB0aGlzIG9wdGlvbiBpcyB1bmxpa2VseSB0byBwcm92aWRlIGFueSBwZXJmb3JtYW5jZSBnYWluLgogCitjb25maWcgQ0NfU1RBQ0tQUk9URUNUT1IKKwlib29sICJFbmFibGUgLWZzdGFjay1wcm90ZWN0b3IgYnVmZmVyIG92ZXJmbG93IGRldGVjdGlvbiAoRVhQRVJJTUVOVEFMKSIKKwloZWxwCisJICBUaGlzIG9wdGlvbiB0dXJucyBvbiB0aGUgLWZzdGFjay1wcm90ZWN0b3IgR0NDIGZlYXR1cmUuIFRoaXMKKwkgIGZlYXR1cmUgcHV0cywgYXQgdGhlIGJlZ2lubmluZyBvZiBmdW5jdGlvbnMsIGEgY2FuYXJ5IHZhbHVlIG9uCisJICB0aGUgc3RhY2sganVzdCBiZWZvcmUgdGhlIHJldHVybiBhZGRyZXNzLCBhbmQgdmFsaWRhdGVzCisJICB0aGUgdmFsdWUganVzdCBiZWZvcmUgYWN0dWFsbHkgcmV0dXJuaW5nLiAgU3RhY2sgYmFzZWQgYnVmZmVyCisJICBvdmVyZmxvd3MgKHRoYXQgbmVlZCB0byBvdmVyd3JpdGUgdGhpcyByZXR1cm4gYWRkcmVzcykgbm93IGFsc28KKwkgIG92ZXJ3cml0ZSB0aGUgY2FuYXJ5LCB3aGljaCBnZXRzIGRldGVjdGVkIGFuZCB0aGUgYXR0YWNrIGlzIHRoZW4KKwkgIG5ldXRyYWxpemVkIHZpYSBhIGtlcm5lbCBwYW5pYy4KKwkgIFRoaXMgZmVhdHVyZSByZXF1aXJlcyBnY2MgdmVyc2lvbiA0LjIgb3IgYWJvdmUuCisKK2NvbmZpZyBERVBSRUNBVEVEX1BBUkFNX1NUUlVDVAorCWJvb2wgIlByb3ZpZGUgb2xkIHdheSB0byBwYXNzIGtlcm5lbCBwYXJhbWV0ZXJzIgorCWhlbHAKKwkgIFRoaXMgd2FzIGRlcHJlY2F0ZWQgaW4gMjAwMSBhbmQgYW5ub3VuY2VkIHRvIGxpdmUgb24gZm9yIDUgeWVhcnMuCisJICBTb21lIG9sZCBib290IGxvYWRlcnMgc3RpbGwgdXNlIHRoaXMgd2F5LgorCiBlbmRtZW51CiAKIG1lbnUgIkJvb3Qgb3B0aW9ucyIKQEAgLTE0ODUsNiArMTUxMywxMDUgQEAKIAkgIFNob3VsZCB0aGUgYXRhZ3MgdXNlZCB0byBib290IHRoZSBrZXJuZWwgYmUgZXhwb3J0ZWQgaW4gYW4gImF0YWdzIgogCSAgZmlsZSBpbiBwcm9jZnMuIFVzZWZ1bCB3aXRoIGtleGVjLgogCitjb25maWcgQVVUT19aUkVMQUREUgorCWJvb2wgIkF1dG8gY2FsY3VsYXRpb24gb2YgdGhlIGRlY29tcHJlc3NlZCBrZXJuZWwgaW1hZ2UgYWRkcmVzcyIKKwlkZXBlbmRzIG9uICFaQk9PVF9ST00gJiYgIUFSQ0hfVTMwMAorCWhlbHAKKwkgIFpSRUxBRERSIGlzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHdoZXJlIHRoZSBkZWNvbXByZXNzZWQga2VybmVsCisJICBpbWFnZSB3aWxsIGJlIHBsYWNlZC4gSWYgQVVUT19aUkVMQUREUiBpcyBzZWxlY3RlZCwgdGhlIGFkZHJlc3MKKwkgIHdpbGwgYmUgZGV0ZXJtaW5lZCBhdCBydW4tdGltZSBieSBtYXNraW5nIHRoZSBjdXJyZW50IElQIHdpdGgKKwkgIDB4ZjgwMDAwMDAuIFRoaXMgYXNzdW1lcyB0aGUgekltYWdlIGJlaW5nIHBsYWNlZCBpbiB0aGUgZmlyc3QgMTI4TUIKKwkgIGZyb20gc3RhcnQgb2YgbWVtb3J5LgorCitjb25maWcgWlJFTEFERFIKKwloZXggIlBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGRlY29tcHJlc3NlZCBrZXJuZWwgaW1hZ2UiCisJZGVwZW5kcyBvbiAhQVVUT19aUkVMQUREUgorCWRlZmF1bHQgMHgwMDAwODAwMCBpZiBBUkNIX0JDTVJJTkcgfHxcCisJCUFSQ0hfQ05TM1hYWCB8fFwKKwkJQVJDSF9ET1ZFIHx8XAorCQlBUkNIX0VCU0ExMTAgfHxcCisJCUFSQ0hfRk9PVEJSSURHRSB8fFwKKwkJQVJDSF9JTlRFR1JBVE9SIHx8XAorCQlBUkNIX0lPUDEzWFggfHxcCisJCUFSQ0hfSU9QMzNYIHx8XAorCQlBUkNIX0lYUDIwMDAgfHxcCisJCUFSQ0hfSVhQMjNYWCB8fFwKKwkJQVJDSF9JWFA0WFggfHxcCisJCUFSQ0hfS0lSS1dPT0QgfHxcCisJCUFSQ0hfS1M4Njk1IHx8XAorCQlBUkNIX0xPS0kgfHxcCisJCUFSQ0hfTU1QIHx8XAorCQlBUkNIX01WNzhYWDAgfHxcCisJCUFSQ0hfTk9NQURJSyB8fFwKKwkJQVJDSF9OVUM5M1ggfHxcCisJCUFSQ0hfTlM5WFhYIHx8XAorCQlBUkNIX09SSU9ONVggfHxcCisJCUFSQ0hfU1BFQVIzWFggfHxcCisJCUFSQ0hfU1BFQVI2WFggfHxcCisJCUFSQ0hfVTg1MDAgfHxcCisJCUFSQ0hfVkVSU0FUSUxFIHx8XAorCQlBUkNIX1c5MFg5MDAKKwlkZWZhdWx0IDB4MDgwMDgwMDAgaWYgQVJDSF9NWDEgfHxcCisJCUFSQ0hfU0hBUksKKwlkZWZhdWx0IDB4MTAwMDgwMDAgaWYgQVJDSF9NU00gfHxcCisJCUFSQ0hfT01BUDEgfHxcCisJCUFSQ0hfUlBDCisJZGVmYXVsdCAweDIwMDA4MDAwIGlmIEFSQ0hfUzVQNjQ0MCB8fFwKKwkJQVJDSF9TNVA2NDQyIHx8XAorCQlBUkNIX1M1UEMxMDAgfHxcCisJCUFSQ0hfUzVQVjIxMAorCWRlZmF1bHQgMHgzMDAwODAwMCBpZiBBUkNIX1MzQzI0MTAgfHxcCisJCUFSQ0hfUzNDMjQwMCB8fFwKKwkJQVJDSF9TM0MyNDEyIHx8XAorCQlBUkNIX1MzQzI0MTYgfHxcCisJCUFSQ0hfUzNDMjQ0MCB8fFwKKwkJQVJDSF9TM0MyNDQzCisJZGVmYXVsdCAweDQwMDA4MDAwIGlmIEFSQ0hfU1RNUDM3OFggfHxcCisJCUFSQ0hfU1RNUDM3WFggfHxcCisJCUFSQ0hfU0g3MzcyIHx8XAorCQlBUkNIX1NINzM3NworCWRlZmF1bHQgMHg1MDAwODAwMCBpZiBBUkNIX1MzQzY0WFggfHxcCisJCUFSQ0hfU0g3MzY3CisJZGVmYXVsdCAweDYwMDA4MDAwIGlmIEFSQ0hfVkVYUFJFU1MKKwlkZWZhdWx0IDB4ODAwMDgwMDAgaWYgQVJDSF9NWDI1IHx8XAorCQlBUkNIX01YMyB8fFwKKwkJQVJDSF9ORVRYIHx8XAorCQlBUkNIX09NQVAyUExVUyB8fFwKKwkJQVJDSF9QTlg0MDA4CisJZGVmYXVsdCAweDkwMDA4MDAwIGlmIEFSQ0hfTVg1IHx8XAorCQlBUkNIX01YOTEyMzEKKwlkZWZhdWx0IDB4YTAwMDgwMDAgaWYgQVJDSF9JT1AzMlggfHxcCisJCUFSQ0hfUFhBIHx8XAorCQlNQUNIX01YMjcKKwlkZWZhdWx0IDB4YzAwMDgwMDAgaWYgQVJDSF9MSDdBNDBYIHx8XAorCQlNQUNIX01YMjEKKwlkZWZhdWx0IDB4ZjAwMDgwMDAgaWYgQVJDSF9BQUVDMjAwMCB8fFwKKwkJQVJDSF9MNzIwMAorCWRlZmF1bHQgMHhjMDAyODAwMCBpZiBBUkNIX0NMUFM3MTFYCisJZGVmYXVsdCAweDcwMDA4MDAwIGlmIEFSQ0hfQVQ5MSAmJiAoQVJDSF9BVDkxQ0FQOSB8fCBBUkNIX0FUOTFTQU05RzQ1KQorCWRlZmF1bHQgMHgyMDAwODAwMCBpZiBBUkNIX0FUOTEgJiYgIShBUkNIX0FUOTFDQVA5IHx8IEFSQ0hfQVQ5MVNBTTlHNDUpCisJZGVmYXVsdCAweGMwMDA4MDAwIGlmIEFSQ0hfREFWSU5DSSAmJiBBUkNIX0RBVklOQ0lfREE4WFgKKwlkZWZhdWx0IDB4ODAwMDgwMDAgaWYgQVJDSF9EQVZJTkNJICYmICFBUkNIX0RBVklOQ0lfREE4WFgKKwlkZWZhdWx0IDB4MDAwMDgwMDAgaWYgQVJDSF9FUDkzWFggJiYgRVA5M1hYX1NEQ0UzX1NZTkNfUEhZU19PRkZTRVQKKwlkZWZhdWx0IDB4YzAwMDgwMDAgaWYgQVJDSF9FUDkzWFggJiYgRVA5M1hYX1NEQ0UwX1BIWVNfT0ZGU0VUCisJZGVmYXVsdCAweGQwMDA4MDAwIGlmIEFSQ0hfRVA5M1hYICYmIEVQOTNYWF9TRENFMV9QSFlTX09GRlNFVAorCWRlZmF1bHQgMHhlMDAwODAwMCBpZiBBUkNIX0VQOTNYWCAmJiBFUDkzWFhfU0RDRTJfUEhZU19PRkZTRVQKKwlkZWZhdWx0IDB4ZjAwMDgwMDAgaWYgQVJDSF9FUDkzWFggJiYgRVA5M1hYX1NEQ0UzX0FTWU5DX1BIWVNfT0ZGU0VUCisJZGVmYXVsdCAweDAwMDA4MDAwIGlmIEFSQ0hfR0VNSU5JICYmIEdFTUlOSV9NRU1fU1dBUAorCWRlZmF1bHQgMHgxMDAwODAwMCBpZiBBUkNIX0dFTUlOSSAmJiAhR0VNSU5JX01FTV9TV0FQCisJZGVmYXVsdCAweDcwMDA4MDAwIGlmIEFSQ0hfUkVBTFZJRVcgJiYgUkVBTFZJRVdfSElHSF9QSFlTX09GRlNFVAorCWRlZmF1bHQgMHgwMDAwODAwMCBpZiBBUkNIX1JFQUxWSUVXICYmICFSRUFMVklFV19ISUdIX1BIWVNfT0ZGU0VUCisJZGVmYXVsdCAweGMwMjA4MDAwIGlmIEFSQ0hfU0ExMTAwICYmIFNBMTExMQorCWRlZmF1bHQgMHhjMDAwODAwMCBpZiBBUkNIX1NBMTEwMCAmJiAhU0ExMTExCisJZGVmYXVsdCAweDMwMTA4MDAwIGlmIEFSQ0hfUzNDMjQxMCAmJiBQTV9IMTk0MAorCWRlZmF1bHQgMHgyOEUwODAwMCBpZiBBUkNIX1UzMDAgJiYgTUFDSF9VMzAwX1NJTkdMRV9SQU0KKwlkZWZhdWx0IDB4NDgwMDgwMDAgaWYgQVJDSF9VMzAwICYmICFNQUNIX1UzMDBfU0lOR0xFX1JBTQorCWhlbHAKKwkgIFpSRUxBRERSIGlzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHdoZXJlIHRoZSBkZWNvbXByZXNzZWQga2VybmVsCisJICBpbWFnZSB3aWxsIGJlIHBsYWNlZC4gWlJFTEFERFIgaGFzIHRvIGJlIHNwZWNpZmllZCB3aGVuIHRoZQorCSAgYXNzdW1wdGlvbiBvZiBBVVRPX1pSRUxBRERSIGlzIG5vdCB2YWxpZCwgb3Igd2hlbiBaQk9PVF9ST00gaXMKKwkgIHNlbGVjdGVkLgorCiBlbmRtZW51CiAKIG1lbnUgIkNQVSBQb3dlciBNYW5hZ2VtZW50IgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vTWFrZWZpbGUgYi9hcmNoL2FybS9NYWtlZmlsZQppbmRleCA2NGJhMzEzLi42M2Q5OThlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9NYWtlZmlsZQpAQCAtMzQsNiArMzQsMTAgQEAKIEtCVUlMRF9DRkxBR1MJKz0tZm5vLW9taXQtZnJhbWUtcG9pbnRlciAtbWFwY3MgLW1uby1zY2hlZC1wcm9sb2cKIGVuZGlmCiAKK2lmZXEgKCQoQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SKSx5KQorS0JVSUxEX0NGTEFHUwkrPS1mc3RhY2stcHJvdGVjdG9yCitlbmRpZgorCiBpZmVxICgkKENPTkZJR19DUFVfQklHX0VORElBTikseSkKIEtCVUlMRF9DUFBGTEFHUwkrPSAtbWJpZy1lbmRpYW4KIEFTCQkrPSAtRUIKQEAgLTEzOSwxNCArMTQzLDE0IEBACiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfSVhQNFhYKQkJOj0gaXhwNHh4CiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfS0lSS1dPT0QpCQk6PSBraXJrd29vZAogbWFjaGluZS0kKENPTkZJR19BUkNIX0tTODY5NSkJCTo9IGtzODY5NQotbWFjaGluZS0kKENPTkZJR19BUkNIX0w3MjAwKQkJOj0gbDcyMDAKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9MSDdBNDBYKQkJOj0gbGg3YTQweAogbWFjaGluZS0kKENPTkZJR19BUkNIX0xPS0kpIAkJOj0gbG9raQorbWFjaGluZS0kKENPTkZJR19BUkNIX0xQQzMyWFgpCQk6PSBscGMzMnh4CiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTU1QKQkJOj0gbW1wCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTVNNKQkJOj0gbXNtCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTVY3OFhYMCkJCTo9IG12Nzh4eDAKLW1hY2hpbmUtJChDT05GSUdfQVJDSF9NWDEpCQk6PSBteDEKLW1hY2hpbmUtJChDT05GSUdfQVJDSF9NWDIpCQk6PSBteDIKK21hY2hpbmUtJChDT05GSUdfQVJDSF9NWDEpCQk6PSBpbXgKK21hY2hpbmUtJChDT05GSUdfQVJDSF9NWDIpCQk6PSBpbXgKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9NWDI1KQkJOj0gbXgyNQogbWFjaGluZS0kKENPTkZJR19BUkNIX01YMykJCTo9IG14MwogbWFjaGluZS0kKENPTkZJR19BUkNIX01YNSkJCTo9IG14NQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9NYWtlZmlsZSBiL2FyY2gvYXJtL2Jvb3QvTWFrZWZpbGUKaW5kZXggNGE1OTBmNC4uZjcwNTIxMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9ib290L01ha2VmaWxlCkBAIC0xNCwxOCArMTQsMTYgQEAKIE1LSU1BR0UgICAgICAgICA6PSAkKHNyY3RyZWUpL3NjcmlwdHMvbWt1Ym9vdC5zaAogCiBpZm5lcSAoJChNQUNISU5FKSwpCi1pbmNsdWRlICQoc3JjdHJlZSkvJChNQUNISU5FKS9NYWtlZmlsZS5ib290CistaW5jbHVkZSAkKHNyY3RyZWUpLyQoTUFDSElORSkvTWFrZWZpbGUuYm9vdAogZW5kaWYKIAogIyBOb3RlOiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgbXVzdCBhbHdheXMgYmUgdHJ1ZToKLSMgICBaUkVMQUREUiA9PSB2aXJ0X3RvX3BoeXMoUEFHRV9PRkZTRVQgKyBURVhUX09GRlNFVCkKICMgICBQQVJBTVNfUEhZUyBtdXN0IGJlIHdpdGhpbiA0TUIgb2YgWlJFTEFERFIKICMgICBJTklUUkRfUEhZUyBtdXN0IGJlIGluIFJBTQotWlJFTEFERFIgICAgOj0gJCh6cmVsYWRkci15KQogUEFSQU1TX1BIWVMgOj0gJChwYXJhbXNfcGh5cy15KQogSU5JVFJEX1BIWVMgOj0gJChpbml0cmRfcGh5cy15KQogCi1leHBvcnQgWlJFTEFERFIgSU5JVFJEX1BIWVMgUEFSQU1TX1BIWVMKK2V4cG9ydCBJTklUUkRfUEhZUyBQQVJBTVNfUEhZUwogCiB0YXJnZXRzIDo9IEltYWdlIHpJbWFnZSB4aXBJbWFnZSBib290cEltYWdlIHVJbWFnZQogCkBAIC02Nyw3ICs2NSw3IEBACiBpZmVxICgkKENPTkZJR19aQk9PVF9ST00pLHkpCiAkKG9iaikvdUltYWdlOiBMT0FEQUREUj0kKENPTkZJR19aQk9PVF9ST01fVEVYVCkKIGVsc2UKLSQob2JqKS91SW1hZ2U6IExPQURBRERSPSQoWlJFTEFERFIpCiskKG9iaikvdUltYWdlOiBMT0FEQUREUj0kKENPTkZJR19aUkVMQUREUikKIGVuZGlmCiAKIGlmZXEgKCQoQ09ORklHX1RIVU1CMl9LRVJORUwpLHkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKaW5kZXggNTNmYWE5MC4uNzYzNmM5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtNCw2ICs0LDcgQEAKICMgY3JlYXRlIGEgY29tcHJlc3NlZCB2bWxpbnV6IGltYWdlIGZyb20gdGhlIG9yaWdpbmFsIHZtbGludXgKICMKIAorQUZMQUdTX2hlYWQubyArPSAtRFRFWFRfT0ZGU0VUPSQoVEVYVF9PRkZTRVQpCiBIRUFECT0gaGVhZC5vCiBPQkpTCT0gbWlzYy5vIGRlY29tcHJlc3MubwogRk9OVEMJPSAkKHNyY3RyZWUpL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mb250X2Fjb3JuXzh4OC5jCkBAIC0xOSwxMCArMjAsNiBAQAogT0JKUwkJKz0gaGVhZC1zaGFyay5vIG9mdy1zaGFyay5vCiBlbmRpZgogCi1pZmVxICgkKENPTkZJR19BUkNIX0w3MjAwKSx5KQotT0JKUwkJKz0gaGVhZC1sNzIwMC5vCi1lbmRpZgotCiBpZmVxICgkKENPTkZJR19BUkNIX1A3MjBUKSx5KQogIyBCb3Jyb3cgdGhpcyBjb2RlIGZyb20gU0ExMTAwCiBPQkpTCQkrPSBoZWFkLXNhMTEwMC5vCkBAIC03MSw2ICs2OCw5IEBACiAJCSBwaWdneS4kKHN1ZmZpeF95KSBwaWdneS4kKHN1ZmZpeF95KS5vIFwKIAkJIGZvbnQubyBmb250LmMgaGVhZC5vIG1pc2MubyAkKE9CSlMpCiAKKyMgTWFrZSBzdXJlIGZpbGVzIGFyZSByZW1vdmVkIGR1cmluZyBjbGVhbgorZXh0cmEteSAgICAgICArPSBwaWdneS5nemlwIHBpZ2d5Lmx6byBwaWdneS5sem1hIGxpYjFmdW5jcy5TCisKIGlmZXEgKCQoQ09ORklHX0ZVTkNUSU9OX1RSQUNFUikseSkKIE9SSUdfQ0ZMQUdTIDo9ICQoS0JVSUxEX0NGTEFHUykKIEtCVUlMRF9DRkxBR1MgPSAkKHN1YnN0IC1wZywgLCAkKE9SSUdfQ0ZMQUdTKSkKQEAgLTc5LDE5ICs3OSw5IEBACiBFWFRSQV9DRkxBR1MgIDo9IC1mcGljIC1mbm8tYnVpbHRpbgogRVhUUkFfQUZMQUdTICA6PSAtV2EsLW1hcmNoPWFsbAogCi0jIFN1cHBseSBaUkVMQUREUiwgSU5JVFJEX1BIWVMgYW5kIFBBUkFNU19QSFlTIHRvIHRoZSBkZWNvbXByZXNzb3IgdmlhCi0jIGxpbmtlciBzeW1ib2xzLiAgV2Ugb25seSBkZWZpbmUgaW5pdHJkX3BoeXMgYW5kIHBhcmFtc19waHlzIGlmIHRoZQotIyBtYWNoaW5lIGNsYXNzIGRlZmluZWQgdGhlIGNvcnJlc3BvbmRpbmcgbWFrZWZpbGUgdmFyaWFibGUuCi1MREZMQUdTX3ZtbGludXggOj0gLS1kZWZzeW0genJlbGFkZHI9JChaUkVMQUREUikKIGlmZXEgKCQoQ09ORklHX0NQVV9FTkRJQU5fQkU4KSx5KQogTERGTEFHU192bWxpbnV4ICs9IC0tYmU4CiBlbmRpZgotaWZuZXEgKCQoSU5JVFJEX1BIWVMpLCkKLUxERkxBR1Nfdm1saW51eCArPSAtLWRlZnN5bSBpbml0cmRfcGh5cz0kKElOSVRSRF9QSFlTKQotZW5kaWYKLWlmbmVxICgkKFBBUkFNU19QSFlTKSwpCi1MREZMQUdTX3ZtbGludXggKz0gLS1kZWZzeW0gcGFyYW1zX3BoeXM9JChQQVJBTVNfUEhZUykKLWVuZGlmCiAjID8KIExERkxBR1Nfdm1saW51eCArPSAtcAogIyBSZXBvcnQgdW5yZXNvbHZlZCBzeW1ib2wgcmVmZXJlbmNlcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlLmRlYnVnIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlLmRlYnVnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTFhMDM3Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZS5kZWJ1ZworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSMKLSMgbGludXgvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCi0jCi0jIGNyZWF0ZSBhIGNvbXByZXNzZWQgdm1saW51eCBpbWFnZSBmcm9tIHRoZSBvcmlnaW5hbCB2bWxpbnV4Ci0jCi0KLUNPTVBSRVNTRURfRVhUUkE9Li4vLi4vbGliL2xsX2NoYXJfd3IubwotT0JKRUNUUz1taXNjLWRlYnVnLm8gbGxfY2hhcl93ci5hb3V0Lm8KLQotQ0ZMQUdTPS1EX19LRVJORUxfXyAtTzIgLURTVERDX0hFQURFUlMgLURTVEFOREFMT05FX0RFQlVHIC1XYWxsIC1JLi4vLi4vLi4vLi4vaW5jbHVkZSAtYwotCi10ZXN0LWd6aXA6IHBpZ2d5LmFvdXQubyAkKE9CSkVDVFMpCi0JJChDQykgLW8gJEAgJChPQkpFQ1RTKSBwaWdneS5hb3V0Lm8KLQotbWlzYy1kZWJ1Zy5vOiBtaXNjLmMKLQkkKENDKSAkKENGTEFHUykgLW8gJEAgbWlzYy5jCi0KLXBpZ2d5LmFvdXQubzogcGlnZ3kubwotCWFybS1saW51eGVsZi1vYmpjb3B5IC0tY2hhbmdlLWxlYWRpbmctY2hhciAtSSBlbGYzMi1hcm0gLU8gYXJtLWFvdXQzMi1saW51eCBwaWdneS5vIHBpZ2d5LmFvdXQubwotCi1sbF9jaGFyX3dyLmFvdXQubzogJChDT01QUkVTU0VEX0VYVFJBKQotCWFybS1saW51eGVsZi1vYmpjb3B5IC0tY2hhbmdlLWxlYWRpbmctY2hhciAtSSBlbGYzMi1hcm0gLU8gYXJtLWFvdXQzMi1saW51eCAkKENPTVBSRVNTRURfRVhUUkEpIGxsX2NoYXJfd3IuYW91dC5vCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLWw3MjAwLlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC1sNzIwMC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGUzYjIwLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLWw3MjAwLlMKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKiAKLSAqIGxpbnV4L2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLWw3MjAwLlMKLSAqIAotICogQ29weXJpZ2h0IChDKSAyMDAwIFN0ZXZlIEhpbGwgPHNqaGlsbEBjb3R3LmNvbT4KLSAqIAotICogU29tZSBjb2RlIGJvcnJvd2VkIGZyb20gTmljb2xhcyBQaXRyZSdzICdoZWFkLXNhMTEwMC5TJyBmaWxlLiBUaGlzCi0gKiBpcyBtZXJnZWQgd2l0aCBoZWFkLlMgYnkgdGhlIGxpbmtlci4KLSAqLwotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLQotI2lmbmRlZiBDT05GSUdfQVJDSF9MNzIwMAotI2Vycm9yIFdoYXQgYW0gSSBkb2luZyBoZXJlLi4uCi0jZW5kaWYKLQotCQkuc2VjdGlvbiAgICAgICAgIi5zdGFydCIsICJheCIKLQotX19MNzIwMF9zdGFydDoKLQkJbW92CXIwLCAjMHgwMDEwMDAwMAkJQCBGTEFTSCBhZGRyZXNzIG9mIGluaXRyZAotCQltb3YJcjIsICMweGYxMDAwMDAwCQlAIFJBTSBhZGRyZXNzIG9mIGluaXRyZAotCQlhZGQJcjMsIHIyLCAjMHgwMDcwMDAwMAlAIFNpemUgb2YgaW5pdHJkIAotMToKLQkJbGRtaWEgICByMCEsIHtyNCwgcjUsIHI2LCByN30KLQkJc3RtaWEgICByMiEsIHtyNCwgcjUsIHI2LCByN30KLQkJY21wCXIyLCByMwotCQlibGUJMWIKLQotCQltb3YJcjgsICMwCQkJQCBaZXJvIGl0IG91dAotCQltb3YJcjcsICNNQUNIX1RZUEVfTDcyMDAJQCBTZXQgYXJjaGl0ZWN0dXJlIElECmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUwppbmRleCBjNTE5MWIxLi5hYmY0ZDY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKQEAgLTE3MCw5ICsxNzAsMTYgQEAKIAogCQkudGV4dAogCQlhZHIJcjAsIExDMAotIEFSTSgJCWxkbWlhCXIwLCB7cjEsIHIyLCByMywgcjQsIHI1LCByNiwgcjExLCBpcCwgc3B9KQotIFRIVU1CKAkJbGRtaWEJcjAsIHtyMSwgcjIsIHIzLCByNCwgcjUsIHI2LCByMTEsIGlwfQkpCisgQVJNKAkJbGRtaWEJcjAsIHtyMSwgcjIsIHIzLCByNSwgcjYsIHIxMSwgaXAsIHNwfSkKKyBUSFVNQigJCWxkbWlhCXIwLCB7cjEsIHIyLCByMywgcjUsIHI2LCByMTEsIGlwfQkpCiAgVEhVTUIoCQlsZHIJc3AsIFtyMCwgIzMyXQkJCQkpCisjaWZkZWYgQ09ORklHX0FVVE9fWlJFTEFERFIKKwkJQCBkZXRlcm1pbmUgZmluYWwga2VybmVsIGltYWdlIGFkZHJlc3MKKwkJYW5kCXI0LCBwYywgIzB4ZjgwMDAwMDAKKwkJYWRkCXI0LCByNCwgI1RFWFRfT0ZGU0VUCisjZWxzZQorCQlsZHIJcjQsID1DT05GSUdfWlJFTEFERFIKKyNlbmRpZgogCQlzdWJzCXIwLCByMCwgcjEJCUAgY2FsY3VsYXRlIHRoZSBkZWx0YSBvZmZzZXQKIAogCQkJCQkJQCBpZiBkZWx0YSBpcyB6ZXJvLCB3ZSBhcmUKQEAgLTMxMCwxOCArMzE3LDE3IEBACiBMQzA6CQkud29yZAlMQzAJCQlAIHIxCiAJCS53b3JkCV9fYnNzX3N0YXJ0CQlAIHIyCiAJCS53b3JkCV9lbmQJCQlAIHIzCi0JCS53b3JkCXpyZWxhZGRyCQlAIHI0CiAJCS53b3JkCV9zdGFydAkJCUAgcjUKIAkJLndvcmQJX2ltYWdlX3NpemUJCUAgcjYKIAkJLndvcmQJX2dvdF9zdGFydAkJQCByMTEKIAkJLndvcmQJX2dvdF9lbmQJCUAgaXAKLQkJLndvcmQJdXNlcl9zdGFjays0MDk2CQlAIHNwCisJCS53b3JkCXVzZXJfc3RhY2tfZW5kCQlAIHNwCiBMQzE6CQkud29yZAlyZWxvY19lbmQgLSByZWxvY19zdGFydAogCQkuc2l6ZQlMQzAsIC4gLSBMQzAKIAogI2lmZGVmIENPTkZJR19BUkNIX1JQQwogCQkuZ2xvYmwJcGFyYW1zCi1wYXJhbXM6CQlsZHIJcjAsID1wYXJhbXNfcGh5cworcGFyYW1zOgkJbGRyCXIwLCA9MHgxMDAwMDEwMAkJQCBwYXJhbXNfcGh5cyBmb3IgUlBDCiAJCW1vdglwYywgbHIKIAkJLmx0b3JnCiAJCS5hbGlnbgpAQCAtMzM5LDkgKzM0NSw4IEBACiAgKiAgcjQgPSBrZXJuZWwgZXhlY3V0aW9uIGFkZHJlc3MKICAqICByNyA9IGFyY2hpdGVjdHVyZSBudW1iZXIKICAqICByOCA9IGF0YWdzIHBvaW50ZXIKLSAqICByOSA9IHJ1bi10aW1lIGFkZHJlc3Mgb2YgInN0YXJ0IiAgKD8/PykKICAqIE9uIGV4aXQsCi0gKiAgcjEsIHIyLCByMywgcjksIHIxMCwgcjEyIGNvcnJ1cHRlZAorICogIHIwLCByMSwgcjIsIHIzLCByOSwgcjEwLCByMTIgY29ycnVwdGVkCiAgKiBUaGlzIHJvdXRpbmUgbXVzdCBwcmVzZXJ2ZToKICAqICByNCwgcjUsIHI2LCByNywgcjgKICAqLwpAQCAtMzk2LDEyICs0MDEsMTggQEAKIAogCQltb3YJcjAsICMwCiAJCW1jcglwMTUsIDAsIHIwLCBjNywgYzAsIDAJQCBpbnZhbGlkYXRlIHdob2xlIGNhY2hlIHYzCisJCS8qCisJCSAqID8/IEFSTXYzIE1NVSBkb2VzIG5vdCBhbGxvdyByZWFkaW5nIHRoZSBjb250cm9sIHJlZ2lzdGVyLAorCQkgKiBkb2VzIHRoaXMgcmVhbGx5IHdvcmsgb24gQVJNdjMgTVBVPworCQkgKi8KIAkJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAlAIHJlYWQgY29udHJvbCByZWcKIAkJCQkJCUAgLi4uLiAuLi4uIC4uLi4gV0MuTQogCQlvcnIJcjAsIHIwLCAjMHgwMDBkCQlAIC4uLi4gLi4uLiAuLi4uIDExLjEKKwkJLyogPz8gdGhpcyBvdmVyd3JpdGVzIHRoZSB2YWx1ZSBjb25zdHJ1Y3RlZCBhYm92ZT8gKi8KIAkJbW92CXIwLCAjMAogCQltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCUAgd3JpdGUgY29udHJvbCByZWcKIAorCQkvKiA/PyBpbnZhbGlkYXRlIGZvciB0aGUgc2Vjb25kIHRpbWU/ICovCiAJCW1jcglwMTUsIDAsIHIwLCBjNywgYzAsIDAJQCBpbnZhbGlkYXRlIHdob2xlIGNhY2hlIHYzCiAJCW1vdglwYywgbHIKIApAQCAtNzcxLDggKzc4MiwxMCBAQAogICogVHVybiBvZmYgdGhlIENhY2hlIGFuZCBNTVUuICBBUk12MyBkb2VzIG5vdCBzdXBwb3J0CiAgKiByZWFkaW5nIHRoZSBjb250cm9sIHJlZ2lzdGVyLCBidXQgQVJNdjQgZG9lcy4KICAqCi0gKiBPbiBleGl0LCByMCwgcjEsIHIyLCByMywgcjksIHIxMiBjb3JydXB0ZWQKLSAqIFRoaXMgcm91dGluZSBtdXN0IHByZXNlcnZlOiByNCwgcjYsIHI3CisgKiBPbiBleGl0LAorICogIHIwLCByMSwgcjIsIHIzLCByOSwgcjEyIGNvcnJ1cHRlZAorICogVGhpcyByb3V0aW5lIG11c3QgcHJlc2VydmU6CisgKiAgcjQsIHI2LCByNwogICovCiAJCS5hbGlnbgk1CiBjYWNoZV9vZmY6CW1vdglyMywgIzEyCQkJQCBjYWNoZV9vZmYgZnVuY3Rpb24KQEAgLTg0NSw3ICs4NTgsNyBAQAogICogQ2xlYW4gYW5kIGZsdXNoIHRoZSBjYWNoZSB0byBtYWludGFpbiBjb25zaXN0ZW5jeS4KICAqCiAgKiBPbiBleGl0LAotICogIHIxLCByMiwgcjMsIHI5LCByMTEsIHIxMiBjb3JydXB0ZWQKKyAqICByMSwgcjIsIHIzLCByOSwgcjEwLCByMTEsIHIxMiBjb3JydXB0ZWQKICAqIFRoaXMgcm91dGluZSBtdXN0IHByZXNlcnZlOgogICogIHIwLCByNCwgcjUsIHI2LCByNwogICovCkBAIC05ODgsNyArMTAwMSw3IEBACiBfX2FybXYzX21tdV9jYWNoZV9mbHVzaDoKIF9fYXJtdjNfbXB1X2NhY2hlX2ZsdXNoOgogCQltb3YJcjEsICMwCi0JCW1jcglwMTUsIDAsIHIwLCBjNywgYzAsIDAJQCBpbnZhbGlkYXRlIHdob2xlIGNhY2hlIHYzCisJCW1jcglwMTUsIDAsIHIxLCBjNywgYzAsIDAJQCBpbnZhbGlkYXRlIHdob2xlIGNhY2hlIHYzCiAJCW1vdglwYywgbHIKIAogLyoKQEAgLTEwMDEsNiArMTAxNCw3IEBACiBwaGV4YnVmOgkuc3BhY2UJMTIKIAkJLnNpemUJcGhleGJ1ZiwgLiAtIHBoZXhidWYKIAorQCBwaGV4IGNvcnJ1cHRzIHtyMCwgcjEsIHIyLCByM30KIHBoZXg6CQlhZHIJcjMsIHBoZXhidWYKIAkJbW92CXIyLCAjMAogCQlzdHJiCXIyLCBbcjMsIHIxXQpAQCAtMTAxNSw2ICsxMDI5LDcgQEAKIAkJc3RyYglyMiwgW3IzLCByMV0KIAkJYgkxYgogCitAIHB1dHMgY29ycnVwdHMge3IwLCByMSwgcjIsIHIzfQogcHV0czoJCWxvYWRzcAlyMywgcjEKIDE6CQlsZHJiCXIyLCBbcjBdLCAjMQogCQl0ZXEJcjIsICMwCkBAIC0xMDI5LDEyICsxMDQ0LDE0IEBACiAJCXRlcQlyMCwgIzAKIAkJYm5lCTFiCiAJCW1vdglwYywgbHIKK0AgcHV0YyBjb3JydXB0cyB7cjAsIHIxLCByMiwgcjN9CiBwdXRjOgogCQltb3YJcjIsIHIwCiAJCW1vdglyMCwgIzAKIAkJbG9hZHNwCXIzLCByMQogCQliCTJiCiAKK0AgbWVtZHVtcCBjb3JydXB0cyB7cjAsIHIxLCByMiwgcjMsIHIxMCwgcjExLCByMTIsIGxyfQogbWVtZHVtcDoJbW92CXIxMiwgcjAKIAkJbW92CXIxMCwgbHIKIAkJbW92CXIxMSwgIzAKQEAgLTEwNzAsMyArMTA4Nyw0IEBACiAJCS5hbGlnbgogCQkuc2VjdGlvbiAiLnN0YWNrIiwgInciCiB1c2VyX3N0YWNrOgkuc3BhY2UJNDA5NgordXNlcl9zdGFja19lbmQ6CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCBkMmIyZWY0Li5lNjUzYTZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbWlzYy5jCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTI4LDkgKzI4LDYgQEAKIAogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAotI2lmZGVmIFNUQU5EQUxPTkVfREVCVUcKLSNkZWZpbmUgcHV0c3RyIHByaW50ZgotI2Vsc2UKIAogc3RhdGljIHZvaWQgcHV0c3RyKGNvbnN0IGNoYXIgKnB0cik7CiBleHRlcm4gdm9pZCBlcnJvcihjaGFyICp4KTsKQEAgLTExNiw3ICsxMTMsNiBAQAogCWZsdXNoKCk7CiB9CiAKLSNlbmRpZgogCiB2b2lkICptZW1jcHkodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQogewpAQCAtMTg2LDcgKzE4Miw2IEBACiAKIGV4dGVybiB2b2lkIGRvX2RlY29tcHJlc3ModTggKmlucHV0LCBpbnQgbGVuLCB1OCAqb3V0cHV0LCB2b2lkICgqZXJyb3IpKGNoYXIgKngpKTsKIAotI2lmbmRlZiBTVEFOREFMT05FX0RFQlVHCiAKIHVuc2lnbmVkIGxvbmcKIGRlY29tcHJlc3Nfa2VybmVsKHVuc2lnbmVkIGxvbmcgb3V0cHV0X3N0YXJ0LCB1bnNpZ25lZCBsb25nIGZyZWVfbWVtX3B0cl9wLApAQCAtMjExLDE4ICsyMDYsMyBAQAogCXB1dHN0cigiIGRvbmUsIGJvb3RpbmcgdGhlIGtlcm5lbC5cbiIpOwogCXJldHVybiBvdXRwdXRfcHRyOwogfQotI2Vsc2UKLQotY2hhciBvdXRwdXRfYnVmZmVyWzE1MDAqMTAyNF07Ci0KLWludCBtYWluKCkKLXsKLQlvdXRwdXRfZGF0YSA9IG91dHB1dF9idWZmZXI7Ci0KLQlwdXRzdHIoIlVuY29tcHJlc3NpbmcgTGludXguLi4iKTsKLQlkZWNvbXByZXNzKGlucHV0X2RhdGEsIGlucHV0X2RhdGFfZW5kIC0gaW5wdXRfZGF0YSwKLQkJCU5VTEwsIE5VTEwsIG91dHB1dF9kYXRhLCBOVUxMLCBlcnJvcik7Ci0JcHV0c3RyKCJkb25lLlxuIik7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9naWMuYyBiL2FyY2gvYXJtL2NvbW1vbi9naWMuYwppbmRleCAzMzc3NDFmLi43ZGZhOWE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vZ2ljLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL2dpYy5jCkBAIC0xMDgsNiArMTA4LDUxIEBACiAJc3Bpbl91bmxvY2soJmlycV9jb250cm9sbGVyX2xvY2spOwogfQogCitzdGF0aWMgaW50IGdpY19zZXRfdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBnaWNfZGlzdF9iYXNlKGlycSk7CisJdW5zaWduZWQgaW50IGdpY2lycSA9IGdpY19pcnEoaXJxKTsKKwl1MzIgZW5hYmxlbWFzayA9IDEgPDwgKGdpY2lycSAlIDMyKTsKKwl1MzIgZW5hYmxlb2ZmID0gKGdpY2lycSAvIDMyKSAqIDQ7CisJdTMyIGNvbmZtYXNrID0gMHgyIDw8ICgoZ2ljaXJxICUgMTYpICogMik7CisJdTMyIGNvbmZvZmYgPSAoZ2ljaXJxIC8gMTYpICogNDsKKwlib29sIGVuYWJsZWQgPSBmYWxzZTsKKwl1MzIgdmFsOworCisJLyogSW50ZXJydXB0IGNvbmZpZ3VyYXRpb24gZm9yIFNHSXMgY2FuJ3QgYmUgY2hhbmdlZCAqLworCWlmIChnaWNpcnEgPCAxNikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodHlwZSAhPSBJUlFfVFlQRV9MRVZFTF9ISUdIICYmIHR5cGUgIT0gSVJRX1RZUEVfRURHRV9SSVNJTkcpCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrKCZpcnFfY29udHJvbGxlcl9sb2NrKTsKKworCXZhbCA9IHJlYWRsKGJhc2UgKyBHSUNfRElTVF9DT05GSUcgKyBjb25mb2ZmKTsKKwlpZiAodHlwZSA9PSBJUlFfVFlQRV9MRVZFTF9ISUdIKQorCQl2YWwgJj0gfmNvbmZtYXNrOworCWVsc2UgaWYgKHR5cGUgPT0gSVJRX1RZUEVfRURHRV9SSVNJTkcpCisJCXZhbCB8PSBjb25mbWFzazsKKworCS8qCisJICogQXMgcmVjb21tZW5kZWQgYnkgdGhlIHNwZWMsIGRpc2FibGUgdGhlIGludGVycnVwdCBiZWZvcmUgY2hhbmdpbmcKKwkgKiB0aGUgY29uZmlndXJhdGlvbgorCSAqLworCWlmIChyZWFkbChiYXNlICsgR0lDX0RJU1RfRU5BQkxFX1NFVCArIGVuYWJsZW9mZikgJiBlbmFibGVtYXNrKSB7CisJCXdyaXRlbChlbmFibGVtYXNrLCBiYXNlICsgR0lDX0RJU1RfRU5BQkxFX0NMRUFSICsgZW5hYmxlb2ZmKTsKKwkJZW5hYmxlZCA9IHRydWU7CisJfQorCisJd3JpdGVsKHZhbCwgYmFzZSArIEdJQ19ESVNUX0NPTkZJRyArIGNvbmZvZmYpOworCisJaWYgKGVuYWJsZWQpCisJCXdyaXRlbChlbmFibGVtYXNrLCBiYXNlICsgR0lDX0RJU1RfRU5BQkxFX1NFVCArIGVuYWJsZW9mZik7CisKKwlzcGluX3VubG9jaygmaXJxX2NvbnRyb2xsZXJfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKwogI2lmZGVmIENPTkZJR19TTVAKIHN0YXRpYyBpbnQgZ2ljX3NldF9jcHUodW5zaWduZWQgaW50IGlycSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2tfdmFsKQogewpAQCAtMTYxLDYgKzIwNiw3IEBACiAJLmFjawkJPSBnaWNfYWNrX2lycSwKIAkubWFzawkJPSBnaWNfbWFza19pcnEsCiAJLnVubWFzawkJPSBnaWNfdW5tYXNrX2lycSwKKwkuc2V0X3R5cGUJPSBnaWNfc2V0X3R5cGUsCiAjaWZkZWYgQ09ORklHX1NNUAogCS5zZXRfYWZmaW5pdHkJPSBnaWNfc2V0X2NwdSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jIGIvYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jCmluZGV4IDZmODA2NjUuLjUxN2Q1MGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9zYTExMTEuYworKysgYi9hcmNoL2FybS9jb21tb24vc2ExMTExLmMKQEAgLTE4NSwxMyArMTg1LDEwIEBACiAJfSwKIH07CiAKLXZvaWQgX19pbml0IHNhMTExMV9hZGp1c3Rfem9uZXMoaW50IG5vZGUsIHVuc2lnbmVkIGxvbmcgKnNpemUsIHVuc2lnbmVkIGxvbmcgKmhvbGVzKQordm9pZCBfX2luaXQgc2ExMTExX2FkanVzdF96b25lcyh1bnNpZ25lZCBsb25nICpzaXplLCB1bnNpZ25lZCBsb25nICpob2xlcykKIHsKIAl1bnNpZ25lZCBpbnQgc3ogPSBTWl8xTSA+PiBQQUdFX1NISUZUOwogCi0JaWYgKG5vZGUgIT0gMCkKLQkJc3ogPSAwOwotCiAJc2l6ZVsxXSA9IHNpemVbMF0gLSBzejsKIAlzaXplWzBdID0gc3o7CiB9CkBAIC0xMDI4LDEzICsxMDI1LDEyIEBACiAJc3RydWN0IHNhMTExMSAqc2FjaGlwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAlpZiAoc2FjaGlwKSB7Ci0JCV9fc2ExMTExX3JlbW92ZShzYWNoaXApOwotCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLQogI2lmZGVmIENPTkZJR19QTQogCQlrZnJlZShzYWNoaXAtPnNhdmVkX3N0YXRlKTsKIAkJc2FjaGlwLT5zYXZlZF9zdGF0ZSA9IE5VTEw7CiAjZW5kaWYKKwkJX19zYTExMTFfcmVtb3ZlKHNhY2hpcCk7CisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hY3M1a19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2FjczVrX2RlZmNvbmZpZwppbmRleCA2ZTMyYTg1Li45MmIwZjkwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2FjczVrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2FjczVrX2RlZmNvbmZpZwpAQCAtMSwxMjMyICsxLDg2IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctc2ltdGVjLW1pY3JlbDEKLSMgVHVlIERlYyAxNiAxMzozMTozNCAyMDA4Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLSMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVCBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0NMSyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9LUzg2OTU9eQotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNN1gwMEEgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBLZW5kaW4vTWljcmVsIEtTODY5NSBJbXBsZW1lbnRhdGlvbnMKLSMKIENPTkZJR19NQUNIX0tTODY5NT15CiBDT05GSUdfTUFDSF9EU00zMjA9eQogQ09ORklHX01BQ0hfQUNTNUs9eQotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX0FSTTkyMlQ9eQotQ09ORklHX0NQVV8zMnY0VD15Ci1DT05GSUdfQ1BVX0FCUlRfRVY0VD15Ci1DT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y0V1Q9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKICMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotQ09ORklHX1BDSV9MRUdBQ1k9eQogQ09ORklHX1BDSV9ERUJVRz15CiBDT05GSUdfUENDQVJEPXkKLSMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUENNQ0lBPXkKLUNPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQotQ09ORklHX1BDTUNJQV9JT0NUTD15Ci1DT05GSUdfQ0FSREJVUz15Ci0KLSMKLSMgUEMtY2FyZCBicmlkZ2VzCi0jCiBDT05GSUdfWUVOVEE9eQotQ09ORklHX1lFTlRBX08yPXkKLUNPTkZJR19ZRU5UQV9SSUNPSD15Ci1DT05GSUdfWUVOVEFfVEk9eQotQ09ORklHX1lFTlRBX0VORV9UVU5FPXkKLUNPTkZJR19ZRU5UQV9UT1NISUJBPXkKLSMgQ09ORklHX1BENjcyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JODIwOTIgaXMgbm90IHNldAotQ09ORklHX1BDQ0FSRF9OT05TVEFUSUM9eQotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0xFRFMgaXMgbm90IHNldAotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9Im1lbT0zMk0gY29uc29sZT10dHlTMCwxMTUyMDAgaW5pdHJkPTB4MjA0MTAwMDAsMzE0NTcyOCByb290PS9kZXYvcmFtMCBydyIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotIyBDT05GSUdfRlBFX05XRlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKLSMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKLUNPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfSkVERUNQUk9CRT15Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15CiBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15Ci1DT05GSUdfTVREX0NGSV9OT1NXQVA9eQotIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9HRU9NRVRSWSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDgwMDAwMDAKLUNPTkZJR19NVERfUEhZU01BUF9MRU49MAotQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD00Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0lNUEE3IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCi0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15CiBDT05GSUdfQVJNX0tTODY5NV9FVEhFUj15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOXzgwMjExPXkKLSMgQ09ORklHX1BDTUNJQV9SQVlDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFcyMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVzIyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTElCRVJUQVMgaXMgbm90IHNldAotIyBDT05GSUdfSEVSTUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FJUk9fQ1MgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1dMMzUwMSBpcyBub3Qgc2V0CiBDT05GSUdfUFJJU001ND1tCi0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKIENPTkZJR19TRVJJQUxfS1M4Njk1PXkKIENPTkZJR19TRVJJQUxfS1M4Njk1X0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPW0KLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAotIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQotQ09ORklHX0FDUzVLQ0FOPXkKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotQ09ORklHX0kyQ19BTEdPQklUPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCiBDT05GSUdfSTJDX0dQSU89eQotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dQSU9fU1lTRlM9eQotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CiBDT05GSUdfR1BJT19QQ0E5NTNYPXkKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfS1M4Njk1X1dBVENIRE9HPXkKLSMgQ09ORklHX0FMSU03MTAxX1dEVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLUNPTkZJR19ISURfREVCVUc9eQotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKLSMKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX1BDRjg1NjM9eQotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVm9sdGFnZSBhbmQgQ3VycmVudCByZWd1bGF0b3JzCi0jCi0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9TVU1NQVJZPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQogQ09ORklHX0pGRlMyX1JVQklOPXkKLSMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKLSMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVFJBQ0U9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15Ci0jIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYWNzNWtfdGlueV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2FjczVrX3RpbnlfZGVmY29uZmlnCmluZGV4IGIzNGIxZWEuLjJhMjdhMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYWNzNWtfdGlueV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hY3M1a190aW55X2RlZmNvbmZpZwpAQCAtMSw5NDAgKzEsODAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNy1zaW10ZWMtbWljcmVsMQotIyBUdWUgSmFuICA2IDEzOjIzOjA3IDIwMDkKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotIyBDT05GSUdfR0VORVJJQ19USU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFMgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX05BTUVTUEFDRVM9eQotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVCBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0NMSyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9LUzg2OTU9eQotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNN1gwMEEgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBLZW5kaW4vTWljcmVsIEtTODY5NSBJbXBsZW1lbnRhdGlvbnMKLSMKLSMgQ09ORklHX01BQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfRFNNMzIwIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX0FDUzVLPXkKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9BUk05MjJUPXkKLUNPTkZJR19DUFVfMzJ2NFQ9eQotQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQotQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQotQ09ORklHX0NQVV9DQUNIRV9WNFdUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXQj15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCiAjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0xFRFMgaXMgbm90IHNldAotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5QU0wLDExNTIwMCBpbml0PS9iaW4vc2giCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9KRURFQ1BST0JFPXkKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKLUNPTkZJR19NVERfQ0ZJX05PU1dBUD15Ci0jIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVA9eQotQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4ODAwMDAwMAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0wCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTQKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQogQ09ORklHX0FSTV9LUzg2OTVfRVRIRVI9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotQ09ORklHX1dMQU5fODAyMTE9eQotIyBDT05GSUdfTElCRVJUQVMgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9LUzg2OTU9eQogQ09ORklHX1NFUklBTF9LUzg2OTVfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19BQ1M1S0NBTj15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLUNPTkZJR19JMkNfQUxHT0JJVD15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCiBDT05GSUdfSTJDX0dQSU89eQotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR1BJT19TWVNGUz15Ci0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKIENPTkZJR19HUElPX1BDQTk1M1g9eQotIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX0tTODY5NV9XQVRDSERPRz15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfUENGODU2Mz15Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBWb2x0YWdlIGFuZCBDdXJyZW50IHJlZ3VsYXRvcnMKLSMKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX1NVTU1BUlk9eQotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15CiBDT05GSUdfSkZGUzJfUlVCSU49eQotIyBDT05GSUdfSkZGUzJfQ01PREVfTk9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQotIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8gaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKIENPTkZJR19TUVVBU0hGUz15Ci0jIENPTkZJR19TUVVBU0hGU19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCi0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQotIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hZmViOTI2MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2FmZWI5MjYwX2RlZmNvbmZpZwppbmRleCA2NGZlN2YxLi4yYWZkZjY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2FmZWI5MjYwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2FmZWI5MjYwX2RlZmNvbmZpZwpAQCAtMSwxMjU4ICsxLDEwNyBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3LXJjMgotIyBUdWUgQXVnIDEyIDIyOjMwOjE2IDIwMDgKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfTkFNRVNQQUNFUz15Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci0jIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0NMSz15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfQVQ5MT15Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNN1gwMEEgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBBdG1lbCBBVDkxIFN5c3RlbS1vbi1DaGlwCi0jCi0jIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjA9eQotIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05MjYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTlSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05RzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MUNBUDkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxWDQwIGlzIG5vdCBzZXQKLUNPTkZJR19BVDkxX1BNQ19VTklUPXkKLQotIwotIyBBVDkxU0FNOTI2MCBWYXJpYW50cwotIwotIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MF9TQU05WEUgaXMgbm90IHNldAotCi0jCi0jIEFUOTFTQU05MjYwIC8gQVQ5MVNBTTlYRSBCb2FyZCBUeXBlCi0jCi0jIENPTkZJR19NQUNIX0FUOTFTQU05MjYwRUsgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DQU02MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1NBTTlfTDkyNjAgaXMgbm90IHNldAogQ09ORklHX01BQ0hfQUZFQjkyNjA9eQotIyBDT05GSUdfTUFDSF9VU0JfQTkyNjAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9RSUxfQTkyNjAgaXMgbm90IHNldAotCi0jCi0jIEFUOTEgQm9hcmQgT3B0aW9ucwotIwotCi0jCi0jIEFUOTEgRmVhdHVyZSBTZWxlY3Rpb25zCi0jCiBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTPXkKLUNPTkZJR19BVDkxX1RJTUVSX0haPTEwMAotQ09ORklHX0FUOTFfRUFSTFlfREJHVT15Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUNSBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTI2VD15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXQj15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0xFRFMgaXMgbm90IHNldAotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9Im1lbT02NE0gY29uc29sZT10dHlTMCwxMTUyMDAgaW5pdHJkPTB4MjExMDAwMDAsMzE0NTcyOCByb290PS9kZXYvcmFtMCBydyIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0RBVEFGTEFTSD15Ci0jIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkQ9eQotIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfSURTPXkKLSMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX0FUTUVMPXkKLSMgQ09ORklHX01URF9OQU5EX0FUTUVMX0VDQ19IVyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfQVRNRUxfRUNDX1NPRlQ9eQotIyBDT05GSUdfTVREX05BTkRfQVRNRUxfRUNDX05PTkUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19BVE1FTF9QV00gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUxfVENMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19BVE1FTF9TU0M9eQotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX0VFUFJPTV9BVDI0PXkKIENPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiBDT05GSUdfU0NTSV9NVUxUSV9MVU49eQotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQogQ09ORklHX01BQ0I9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKIENPTkZJR19TRVJJQUxfQVRNRUw9eQogQ09ORklHX1NFUklBTF9BVE1FTF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQVRNRUxfUERDPXkKLSMgQ09ORklHX1NFUklBTF9BVE1FTF9UVFlBVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotQ09ORklHX0kyQ19BTEdPQklUPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKIENPTkZJR19JMkNfR1BJTz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotQ09ORklHX0VFUFJPTV9BVDI0PXkKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogQ09ORklHX1NQST15CiBDT05GSUdfU1BJX0RFQlVHPXkKLUNPTkZJR19TUElfTUFTVEVSPXkKLQotIwotIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwotIwogQ09ORklHX1NQSV9BVE1FTD15Ci0jIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFByb3RvY29sIE1hc3RlcnMKLSMKLSMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKIENPTkZJR19TUElfU1BJREVWPXkKLSMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwogIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0hDRD15Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCi0jCi1DT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKK0NPTkZJR19VU0JfU1RPUkFHRT15CiBDT05GSUdfVVNCX0dBREdFVD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVRfQVQ5MT15Ci1DT05GSUdfVVNCX0FUOTE9eQotIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAogQ09ORklHX1VTQl9aRVJPPW0KLSMgQ09ORklHX1VTQl9FVEggaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRGUz1tCiBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRT1tCi0jIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX1VTQl9HX1NFUklBTD1tCi0jIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKIENPTkZJR19SVENfREVCVUc9eQotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfRk0zMTMwPXkKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9BVDkxU0FNOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBWb2x0YWdlIGFuZCBDdXJyZW50IHJlZ3VsYXRvcnMKLSMKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfUFJFRU1QVD15Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19VU0VSPXkKLSMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTEw9eQotIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkNfVDEwRElGPXkKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYW0yMDBlcGRraXRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hbTIwMGVwZGtpdF9kZWZjb25maWcKaW5kZXggMzA5MjdjYS4uNTUzNmM0OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hbTIwMGVwZGtpdF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hbTIwMGVwZGtpdF9kZWZjb25maWcKQEAgLTEsMTE0OCArMSwxMDggQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNQotIyBTdW4gQXByIDIwIDAwOjI5OjQ5IDIwMDgKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfQVJDSF9NVERfWElQPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSJndW0iCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE3Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci0jIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQogIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX1RJTllfU0hNRU09eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX05PT1A9eQotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9QWEE9eQotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU003WDAwQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKLSMKIENPTkZJR19BUkNIX0dVTVNUSVg9eQotIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NQUlOU1RPTkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfSURQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBX0VTRVJJRVMgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9UUklaRVBTNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0VNX1gyNzAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DT0xJQlJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfWllMT05JVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9MSVRUTEVUT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9BUk1DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTUFHSUNJQU4gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9QQ00wMjcgaXMgbm90IHNldAotQ09ORklHX01BQ0hfR1VNU1RJWF9GPXkKLUNPTkZJR19QWEEyNXg9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9YU0NBTEU9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV01NWFQgaXMgbm90IHNldAotQ09ORklHX1hTQ0FMRV9QTVU9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfUENDQVJEPXkKLSMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUENNQ0lBPXkKLUNPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQotIyBDT05GSUdfUENNQ0lBX0lPQ1RMIGlzIG5vdCBzZXQKLQotIwotIyBQQy1jYXJkIGJyaWRnZXMKLSMKLUNPTkZJR19QQ01DSUFfUFhBMlhYPXkKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15CiAjIENPTkZJR19PQUJJX0NPTVBBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxMTUyMDBuOCByb290PTFmMDEgcm9vdGZzdHlwZT1qZmZzMiIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBGcmVxdWVuY3kgc2NhbGluZwotIwotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPW0KLUNPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiBDT05GSUdfQlQ9bQogQ09ORklHX0JUX0wyQ0FQPW0KIENPTkZJR19CVF9TQ089bQogQ09ORklHX0JUX1JGQ09NTT1tCiBDT05GSUdfQlRfUkZDT01NX1RUWT15CiBDT05GSUdfQlRfQk5FUD1tCi0jIENPTkZJR19CVF9CTkVQX01DX0ZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9ISURQIGlzIG5vdCBzZXQKLQotIwotIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0JUX0hDSUJUU0RJTyBpcyBub3Qgc2V0CiBDT05GSUdfQlRfSENJVUFSVD1tCiBDT05GSUdfQlRfSENJVUFSVF9IND15Ci0jIENPTkZJR19CVF9IQ0lVQVJUX0JDU1AgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJVUFSVF9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lEVEwxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJUM0MgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQkxVRUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQlRVQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSVZIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQogQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQotQ09ORklHX01URF9DRklfTk9TV0FQPXkKLSMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKICMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CiAjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKICMgQ09ORklHX01URF9DRklfSTIgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwogQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUFhBMlhYPXkKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0hBUlBfU0wgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD1tCi0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPW0KLUNPTkZJR19JREVfTUFYX0hXSUZTPTIKLUNPTkZJR19CTEtfREVWX0lERT1tCi0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPW0KLSMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDUz1tCi0jIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX1BST0NfRlM9eQotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRF9PTkxZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9bQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfU01DOTFYPW0KLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFPXkKLUNPTkZJR19NT1VTRV9QUzI9eQotQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKLUNPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKLUNPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKLUNPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQotQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKLSMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9QWEE9eQogQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAotIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9HUElPX0xJQj15Ci0KLSMKLSMgR1BJTyBTdXBwb3J0Ci0jCi0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NBMTEwMF9XQVRDSERPRz1tCi0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogQ09ORklHX0ZCPXkKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9TWVNfRklMTFJFQ1Q9bQotQ09ORklHX0ZCX1NZU19DT1BZQVJFQT1tCi1DT05GSUdfRkJfU1lTX0lNQUdFQkxJVD1tCi1DT05GSUdfRkJfU1lTX0ZPUFM9bQotQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQogQ09ORklHX0ZCX1RJTEVCTElUVElORz15Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9QWEE9eQogQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTPXkKIENPTkZJR19GQl9NQlg9bQotIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKIENPTkZJR19GQl9WSVJUVUFMPW0KLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKIENPTkZJR19TT1VORD1tCi0KLSMKLSMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCi0jCiBDT05GSUdfU05EPW0KLUNPTkZJR19TTkRfVElNRVI9bQotQ09ORklHX1NORF9QQ009bQotIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX09TU0VNVUw9eQogQ09ORklHX1NORF9NSVhFUl9PU1M9bQogQ09ORklHX1NORF9QQ01fT1NTPW0KLUNPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKLSMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBHZW5lcmljIGRldmljZXMKLSMKLUNPTkZJR19TTkRfQUM5N19DT0RFQz1tCi0jIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAotCi0jCi0jIEFMU0EgQVJNIGRldmljZXMKLSMKLUNPTkZJR19TTkRfUFhBMlhYX1BDTT1tCiBDT05GSUdfU05EX1BYQTJYWF9BQzk3PW0KLQotIwotIyBQQ01DSUEgZGV2aWNlcwotIwotIyBDT05GSUdfU05EX1ZYUE9DS0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9QREFVRElPQ0YgaXMgbm90IHNldAotCi0jCi0jIFN5c3RlbSBvbiBDaGlwIGF1ZGlvIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAotCi0jCi0jIFNvQyBBdWRpbyBzdXBwb3J0IGZvciBTdXBlckgKLSMKLQotIwotIyBBTFNBIFNvQyBhdWRpbyBmb3IgRnJlZXNjYWxlIFNPQ3MKLSMKLQotIwotIyBPcGVuIFNvdW5kIFN5c3RlbQotIwotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotQ09ORklHX0FDOTdfQlVTPW0KLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwogQ09ORklHX1VTQl9HQURHRVQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYPXkKLUNPTkZJR19VU0JfUFhBMlhYPXkKLSMgQ09ORklHX1VTQl9QWEEyWFhfU01BTEwgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VUSD15Ci1DT05GSUdfVVNCX0VUSF9STkRJUz15Ci0jIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAorQ09ORklHX1VTQl9FVEg9bQogQ09ORklHX01NQz15Ci0jIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQotIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKIENPTkZJR19NTUNfUFhBPXkKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi0jIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15CiBDT05GSUdfSkZGUzJfUlVCSU49eQotIyBDT05GSUdfSkZGUzJfQ01PREVfTk9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQotIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8gaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BSRUVNUFQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9bQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUFOQUdFUj1tCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0VDQj1tCiBDT05GSUdfQ1JZUFRPX0NCQz1tCitDT05GSUdfQ1JZUFRPX0VDQj1tCiBDT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FSQzQ9bQotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2FtMzUxN19ldm1fZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hbTM1MTdfZXZtX2RlZmNvbmZpZwppbmRleCBlNGY0ZmI1Li5hZDJiYzUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2FtMzUxN19ldm1fZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYW0zNTE3X2V2bV9kZWZjb25maWcKQEAgLTEsMTM3NyArMSwxMjcgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKLSMgV2VkIE9jdCAyOCAxNTo0Nzo0NyAyMDA5Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfQVJDSF9IQVNfQ1BVRlJFUT15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLSMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotQ09ORklHX01NVT15Ci0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05PTUFESUsgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1M1UEMxWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQPXkKLSMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgT01BUCBJbXBsZW1lbnRhdGlvbnMKLSMKLUNPTkZJR19BUkNIX09NQVBfT1RHPXkKLSMgQ09ORklHX0FSQ0hfT01BUDEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQMiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQMz15Ci0jIENPTkZJR19BUkNIX09NQVA0IGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucwotIwotIyBDT05GSUdfT01BUF9ERUJVR19QT1dFUkRPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0RFQlVHX0NMT0NLRE9NQUlOIGlzIG5vdCBzZXQKIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUz15Ci1DT05GSUdfT01BUF9NVVg9eQogIyBDT05GSUdfT01BUF9NQ0JTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX01CT1hfRldLIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTVBVX1RJTUVSIGlzIG5vdCBzZXQKIENPTkZJR19PTUFQXzMyS19USU1FUj15Ci1DT05GSUdfT01BUF8zMktfVElNRVJfSFo9MTI4CiBDT05GSUdfT01BUF9ETV9USU1FUj15Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIgaXMgbm90IHNldAotQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDM9eQotIyBDT05GSUdfT01BUF9QTV9OT05FIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX1BNX05PT1A9eQotQ09ORklHX0FSQ0hfT01BUDM0WFg9eQogQ09ORklHX0FSQ0hfT01BUDM0MzA9eQotCi0jCi0jIE9NQVAgQm9hcmQgVHlwZQotIwotIyBDT05GSUdfTUFDSF9PTUFQM19CRUFHTEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX0xEUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09WRVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUDNFVk0gaXMgbm90IHNldAogQ09ORklHX01BQ0hfT01BUDM1MTdFVk09eQotIyBDT05GSUdfTUFDSF9PTUFQM19QQU5ET1JBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF8zNDMwU0RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTk9LSUFfUlg1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfWk9PTTIgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DTV9UMzUgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVXzMydjZLPXkKLUNPTkZJR19DUFVfVjc9eQotQ09ORklHX0NQVV8zMnY3PXkKLUNPTkZJR19DUFVfQUJSVF9FVjc9eQotQ09ORklHX0NQVV9QQUJSVF9WNz15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y3PXkKLUNPTkZJR19DUFVfQ0FDSEVfVklQVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjY9eQotQ09ORklHX0NQVV9UTEJfVjc9eQotQ09ORklHX0NQVV9IQVNfQVNJRD15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0FSTV9USFVNQkVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAotQ09ORklHX0hBU19UTFNfUkVHPXkKLUNPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NgotIyBDT05GSUdfQVJNX0VSUkFUQV80MzA5NzMgaXMgbm90IHNldAotIyBDT05GSUdfQVJNX0VSUkFUQV80NTg2OTMgaXMgbm90IHNldAotIyBDT05GSUdfQVJNX0VSUkFUQV80NjAwNzUgaXMgbm90IHNldAotQ09ORklHX0NPTU1PTl9DTEtERVY9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTI4Ci0jIENPTkZJR19USFVNQjJfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19BRUFCST15Ci1DT05GSUdfT0FCSV9DT01QQVQ9eQotIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci0jIENPTkZJR19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0jIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9uZnMgbmZzcm9vdD0xOTIuMTY4LjAuMTovaG9tZS91c2VyL2J1aWxkcm9vdCBpcD0xOTIuMTY4LjAuMjoxOTIuMTY4LjAuMToxOTIuMTY4LjAuMToyNTUuMjU1LjI1NS4wOnRndDpldGgwOm9mZiBydyBjb25zb2xlPXR0eVMyLDExNTIwMG44IgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKIENPTkZJR19WRlA9eQotQ09ORklHX1ZGUHYzPXkKIENPTkZJR19ORU9OPXkKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9NSVNDPXkKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0tFWT15Ci0jIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15CiBDT05GSUdfSVBfUE5QX1JBUlA9eQotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiBDT05GSUdfQ0FOPXkKIENPTkZJR19DQU5fUkFXPXkKIENPTkZJR19DQU5fQkNNPXkKLQotIwotIyBDQU4gRGV2aWNlIERyaXZlcnMKLSMKIENPTkZJR19DQU5fVkNBTj15CiBDT05GSUdfQ0FOX0RFVj15CiBDT05GSUdfQ0FOX0NBTENfQklUVElNSU5HPXkKIENPTkZJR19DQU5fVElfSEVDQz15Ci0jIENPTkZJR19DQU5fU0pBMTAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0FOIFVTQiBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19DQU5fRU1TX1VTQiBpcyBub3Qgc2V0CiBDT05GSUdfQ0FOX0RFQlVHX0RFVklDRVM9eQotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKIENPTkZJR19USV9EQVZJTkNJX0VNQUM9eQotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTMyCi1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQogQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQogQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CiBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15CiBDT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX09NQVA9eQotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEFDOTcgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9EREMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9BUk1DTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9PTUFQX0JPT1RMT0FERVJfSU5JVCBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUDJfVlJBTT15Ci1DT05GSUdfT01BUDJfVlJGQj15CiBDT05GSUdfT01BUDJfRFNTPXkKIENPTkZJR19PTUFQMl9WUkFNX1NJWkU9NAotQ09ORklHX09NQVAyX0RTU19ERUJVR19TVVBQT1JUPXkKLSMgQ09ORklHX09NQVAyX0RTU19SRkJJIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQMl9EU1NfVkVOQz15Ci0jIENPTkZJR19PTUFQMl9EU1NfU0RJIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVAyX0RTU19EU0kgaXMgbm90IHNldAotIyBDT05GSUdfT01BUDJfRFNTX0ZBS0VfVlNZTkMgaXMgbm90IHNldAogQ09ORklHX09NQVAyX0RTU19NSU5fRkNLX1BFUl9QQ0s9NAogQ09ORklHX0ZCX09NQVAyPXkKLUNPTkZJR19GQl9PTUFQMl9ERUJVR19TVVBQT1JUPXkKLSMgQ09ORklHX0ZCX09NQVAyX0ZPUkNFX0FVVE9fVVBEQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9PTUFQMl9OVU1fRkJTPTMKLQotIwotIyBPTUFQMi8zIERpc3BsYXkgRGV2aWNlIERyaXZlcnMKLSMKIENPTkZJR19QQU5FTF9HRU5FUklDPXkKLSMgQ09ORklHX1BBTkVMX1NIQVJQX0xTMDM3VjdEVzAxIGlzIG5vdCBzZXQKIENPTkZJR19QQU5FTF9TSEFSUF9MUTA0M1QxREcwMT15Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLSMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCi0jIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLQotIwotIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwotIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15CiBDT05GSUdfUVVPVEE9eQotIyBDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0UgaXMgbm90IHNldAotQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkc9eQotQ09ORklHX1FVT1RBX1RSRUU9eQotIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0CiBDT05GSUdfUUZNVF9WMj15Ci1DT05GSUdfUVVPVEFDVEw9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCiAjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAotIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotQ09ORklHX0ZUUkFDRT15Ci0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQotIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJNX1VOV0lORD15Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTEw9eQotIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj1tCi0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz15Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPXkKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKIENPTkZJR19MSUJDUkMzMkM9eQotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2Ftc19kZWx0YV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2Ftc19kZWx0YV9kZWZjb25maWcKaW5kZXggNmQ4YTBjOC4uNzVkZTQ1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hbXNfZGVsdGFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYW1zX2RlbHRhX2RlZmNvbmZpZwpAQCAtMSw5MDYgKzEsODIgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMi1yYzEtb21hcDEKLSMgVGh1IEp1biAgNyAwNDoyODozMiAyMDA3Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIwotQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCREFGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVA9eQotCi0jCi0jIFRJIE9NQVAgSW1wbGVtZW50YXRpb25zCi0jCiBDT05GSUdfQVJDSF9PTUFQMT15Ci0jIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucwotIwotIyBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9CT09UX1RBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0dQSU9fU1dJVENIIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX01VWD15Ci0jIENPTkZJR19PTUFQX01VWF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9NVVhfV0FSTklOR1M9eQotQ09ORklHX09NQVBfTUNCU1A9eQotQ09ORklHX09NQVBfTU1VX0ZXSz15CiBDT05GSUdfT01BUF9NQk9YX0ZXSz1tCi1DT05GSUdfT01BUF9NUFVfVElNRVI9eQotIyBDT05GSUdfT01BUF8zMktfVElNRVIgaXMgbm90IHNldAotQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDE9eQotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTExfREVCVUdfTENEIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX1NFUklBTF9XQUtFPXkKLUNPTkZJR19PTUFQX0RTUD1tCi0jIENPTkZJR19PTUFQX0RTUF9NQkNNRF9WRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfRFNQX1RBU0tfTVVMVElPUEVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfRFNQX0ZCRVhQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIENvcmUgVHlwZQotIwotIyBDT05GSUdfQVJDSF9PTUFQNzMwIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX09NQVAxNVhYPXkKLSMgQ09ORklHX0FSQ0hfT01BUDE2WFggaXMgbm90IHNldAotCi0jCi0jIE9NQVAgQm9hcmQgVHlwZQotIwotIyBDT05GSUdfTUFDSF9PTUFQX0lOTk9WQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1ZPSUNFQkxVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfUEFMTVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9QQUxNWjcxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9QQUxNVFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9TWDEgaXMgbm90IHNldAogQ09ORklHX01BQ0hfQU1TX0RFTFRBPXkKLSMgQ09ORklHX01BQ0hfT01BUF9HRU5FUklDIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIENQVSBTcGVlZAotIwotIyBDT05GSUdfT01BUF9DTE9DS1NfU0VUX0JZX0JPT1RMT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9BUk1fMTY4TUhaIGlzIG5vdCBzZXQKIENPTkZJR19PTUFQX0FSTV8xNTBNSFo9eQotIyBDT05GSUdfT01BUF9BUk1fMTIwTUhaIGlzIG5vdCBzZXQKICMgQ09ORklHX09NQVBfQVJNXzYwTUhaIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfQVJNXzMwTUhaIGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9BUk05MjVUPXkKLUNPTkZJR19DUFVfMzJ2NFQ9eQotQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQotQ09ORklHX0NQVV9DQUNIRV9WNFdUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXQj15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIPXkKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLSMgQ09ORklHX0xFRFMgaXMgbm90IHNldAotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9Im1lbT0zMk0gY29uc29sZT10dHlTMCwxMTUyMDBuOCByb290PS9kZXYvcmFtMCBpbml0cmQ9MHgxMWMwMDAwMCw0TSIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBGcmVxdWVuY3kgc2NhbGluZwotIwotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15CiAjIENPTkZJR19TVVNQRU5EIGlzIG5vdCBzZXQKIENPTkZJR19QTV9SVU5USU1FPXkKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2PXkKLSMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD15Ci0jIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAotQ09ORklHX0lQVjZfU0lUPXkKLSMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX0FNU19ERUxUQT15Ci1DT05GSUdfTVREX05BTkRfSURTPXkKLSMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLQotIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotIyBDT05GSUdfUE5QQUNQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCi0jCi0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VTUF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKIENPTkZJR19VU0JfQ0FUQz15CiBDT05GSUdfVVNCX0tBV0VUSD15CiBDT05GSUdfVVNCX1BFR0FTVVM9eQogQ09ORklHX1VTQl9SVEw4MTUwPXkKLUNPTkZJR19VU0JfVVNCTkVUX01JST15CiBDT05GSUdfVVNCX1VTQk5FVD15Ci1DT05GSUdfVVNCX05FVF9BWDg4MTdYPXkKLUNPTkZJR19VU0JfTkVUX0NEQ0VUSEVSPXkKLSMgQ09ORklHX1VTQl9ORVRfRE05NjAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfR0w2MjBBIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTkVUX05FVDEwODA9eQotIyBDT05GSUdfVVNCX05FVF9QTFVTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX01DUzc4MzAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9STkRJU19IT1NUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVQ9eQotIyBDT05GSUdfVVNCX0FMSV9NNTYzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU4yNzIwIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfQkVMS0lOPXkKLUNPTkZJR19VU0JfQVJNTElOVVg9eQotIyBDT05GSUdfVVNCX0VQU09OMjg4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0MyMTkwIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTkVUX1pBVVJVUz15Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAogQ09ORklHX1BQUD15CiBDT05GSUdfUFBQX01VTFRJTElOSz15Ci0jIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9BU1lOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAotIyBDT05GSUdfUFBQT0UgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz15Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCi0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQotQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX09NQVA9eQotIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotQ09ORklHX1NFUklPX0FNU19ERUxUQT15Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSVBNSQotIwotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi1DT05GSUdfSTJDX0FMR09CSVQ9eQotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX09NQVA9eQotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RMVjMyMEFJQzIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogQ09ORklHX0dQSU9fU1lTRlM9eQotCi0jCi0jIERhbGxhcydzIDEtd2lyZSBidXMKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjIGRldmljZXMKLSMKLSMgQ09ORklHX0JMSU5LIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotCi0jCi0jIExFRCBkZXZpY2VzCi0jCi1DT05GSUdfTkVXX0xFRFM9eQotQ09ORklHX0xFRFNfQ0xBU1M9eQotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi1DT05GSUdfTEVEU19BTVNfREVMVEE9eQotIyBDT05GSUdfTEVEU19PTUFQX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfT01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCi1DT05GSUdfTEVEU19UUklHR0VSUz15Ci1DT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKLUNPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKLUNPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj15Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15Ci0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi1DT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKLUNPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX0ZCPXkKIENPTkZJR19GSVJNV0FSRV9FRElEPXkKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9ERUZFUlJFRF9JTz15Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogQ09ORklHX0ZCX09NQVA9eQotIyBDT05GSUdfRkJfT01BUF9MQ0RDX0VYVEVSTkFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX09NQVBfTENEX01JUElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX09NQVBfQk9PVExPQURFUl9JTklUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9PTUFQX0NPTlNJU1RFTlRfRE1BX1NJWkU9MgotIyBDT05GSUdfRkJfT01BUF9ETUFfVFVORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKK0NPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQorQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVFM9eQotIyBDT05GSUdfRk9OVF84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF84eDE2IGlzIG5vdCBzZXQKIENPTkZJR19GT05UXzZ4MTE9eQotIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfTUlOSV80eDYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9DTEVBTl80eDYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9DTEVBTl81eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HTz15CiAjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAogIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLQotIwotIyBTb3VuZAotIwogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9NSVhFUl9PU1M9eQpAQCAtOTA4LDQxOCArODQsMzggQEAKIENPTkZJR19TTkRfU09DPXkKIENPTkZJR19TTkRfT01BUF9TT0M9eQogQ09ORklHX1NORF9PTUFQX1NPQ19BTVNfREVMVEE9eQotCi0jCi0jIEhJRCBEZXZpY2VzCi0jCi1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0hDRD15Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwotQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIFJlYWwgVGltZSBDbG9jawotIwotQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1VTQl9PSENJX0hDRD15CitDT05GSUdfVVNCX1NUT1JBR0U9eQorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKK0NPTkZJR19MRURTX0FNU19ERUxUQT15CitDT05GSUdfTEVEU19UUklHR0VSUz15CitDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCiBDT05GSUdfUlRDX0RSVl9PTUFQPXkKLQotIwotIyBDQlVTIHN1cHBvcnQKLSMKLSMgQ09ORklHX0NCVVMgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19BVVRPRlNfRlM9eQogQ09ORklHX0FVVE9GUzRfRlM9eQotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQogQ09ORklHX0pGRlMyX1NVTU1BUlk9eQotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCiBDT05GSUdfTkZTX0ZTPXkKLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAogQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQogQ09ORklHX05MU19DT0RFUEFHRV84NTI9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQogQ09ORklHX05MU19JU084ODU5XzI9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hcDRldmJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hcDRldmJfZGVmY29uZmlnCmluZGV4IGUxNDIyOWIuLjJlZWY4NWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXA0ZXZiX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2FwNGV2Yl9kZWZjb25maWcKQEAgLTEsNzc5ICsxLDU3IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmM3Ci0jIE1vbiBGZWIgIDggMTI6MjU6MzYgMjAxMAotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQotQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15Ci1DT05GSUdfS0VSTkVMX0daSVA9eQotIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKLUNPTkZJR19HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci0jIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci1DT05GSUdfUkRfQlpJUDI9eQotQ09ORklHX1JEX0xaTUE9eQotQ09ORklHX1JEX0xaTz15Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTk9PUD15Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi1DT05GSUdfTU1VPXkKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRE9WRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU0hNT0JJTEU9eQotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1M1UEMxWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVTg1MDAgaXMgbm90IHNldAotCi0jCi0jIFNILU1vYmlsZSBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9TSDczNjcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSDczNzcgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU0g3MzcyPXkKLQotIwotIyBTSC1Nb2JpbGUgQm9hcmQgVHlwZQotIwogQ09ORklHX01BQ0hfQVA0RVZCPXkKLQotIwotIyBTSC1Nb2JpbGUgU3lzdGVtIENvbmZpZ3VyYXRpb24KLSMKLQotIwotIyBNZW1vcnkgY29uZmlndXJhdGlvbgotIwotQ09ORklHX01FTU9SWV9TVEFSVD0weDQwMDAwMDAwCi1DT05GSUdfTUVNT1JZX1NJWkU9MHgxMDAwMDAwMAotCi0jCi0jIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCi0jCi1DT05GSUdfU0hfVElNRVJfQ01UPXkKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV8zMnY2Sz15Ci1DT05GSUdfQ1BVX1Y3PXkKLUNPTkZJR19DUFVfMzJ2Nz15Ci1DT05GSUdfQ1BVX0FCUlRfRVY3PXkKLUNPTkZJR19DUFVfUEFCUlRfVjc9eQotQ09ORklHX0NQVV9DQUNIRV9WNz15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQotQ09ORklHX0NQVV9DT1BZX1Y2PXkKLUNPTkZJR19DUFVfVExCX1Y3PXkKLUNPTkZJR19DUFVfSEFTX0FTSUQ9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19BUk1fVEhVTUJFRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVNfVExTX1JFRz15Ci1DT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTUKLSMgQ09ORklHX0FSTV9FUlJBVEFfNDMwOTczIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSTV9FUlJBVEFfNDU4NjkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSTV9FUlJBVEFfNDYwMDc1IGlzIG5vdCBzZXQKLUNPTkZJR19DT01NT05fQ0xLREVWPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCi0jIENPTkZJR19USFVNQjJfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19BRUFCST15CiAjIENPTkZJR19PQUJJX0NPTVBBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTAKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAgZWFybHlwcmludGs9c2gtc2NpLjAsMTE1MjAwIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfS0VYRUM9eQotQ09ORklHX0FUQUdTX1BST0M9eQotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCi0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi0jIENPTkZJR19WRlAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCiBDT05GSUdfUE09eQotIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU1VTUEVORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19ORVQgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQogIyBDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVA9eQotIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVYgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKIENPTkZJR19TRVJJQUxfU0hfU0NJPXkKIENPTkZJR19TRVJJQUxfU0hfU0NJX05SX1VBUlRTPTgKIENPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotIyBDT05GSUdfRlNOT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOT1RJRllfVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLIGlzIG5vdCBzZXQKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotQ09ORklHX0FSTV9VTldJTkQ9eQotIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAotIyBDT05GSUdfT0NfRVRNIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMzIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfTFpPX0RFQ09NUFJFU1M9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfREVDT01QUkVTU19CWklQMj15Ci1DT05GSUdfREVDT01QUkVTU19MWk1BPXkKLUNPTkZJR19ERUNPTVBSRVNTX0xaTz15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXNzYWJldF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2Fzc2FiZXRfZGVmY29uZmlnCmluZGV4IGRhYTc1YmMuLjU1OGVjZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXNzYWJldF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hc3NhYmV0X2RlZmNvbmZpZwpAQCAtMSw5MDQgKzEsNjAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMQotIyBXZWQgTWFyICA5IDEzOjEzOjMwIDIwMDUKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX01NVT15Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0lPTUFQPXkKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCi0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIworQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNT0QgaXMgbm90IHNldAotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TQTExMDA9eQotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLQotIwotIyBTQTExeDAgSW1wbGVtZW50YXRpb25zCi0jCiBDT05GSUdfU0ExMTAwX0FTU0FCRVQ9eQotIyBDT05GSUdfQVNTQUJFVF9ORVBPTlNFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfQ0VSRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfQ09MTElFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9IMzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSDM2MDAgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0JBREdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSk9STkFEQTcyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSEFDS0tJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfTEFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfUExFQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfU0hBTk5PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfU0lNUEFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9TU1AgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX1NBMTEwMD15Ci1DT05GSUdfQ1BVXzMydjQ9eQotQ09ORklHX0NQVV9BQlJUX0VWND15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y0V0I9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfVExCX1Y0V0I9eQotQ09ORklHX0NQVV9NSU5JQ0FDSEU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi1DT05GSUdfSVNBPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCiBDT05GSUdfUENDQVJEPXkKLSMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUENNQ0lBPXkKLQotIwotIyBQQy1jYXJkIGJyaWRnZXMKLSMKLSMgQ09ORklHX0k4MjM2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0lDIGlzIG5vdCBzZXQKIENPTkZJR19QQ01DSUFfU0ExMTAwPXkKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0RJU0NPTlRJR01FTT15CiBDT05GSUdfTEVEUz15Ci1DT05GSUdfTEVEU19USU1FUj15CiBDT05GSUdfTEVEU19DUFU9eQotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9Im1lbT0zMk0gY29uc29sZT10dHlTQTAsMzg0MDBuOCBpbml0cmQ9MHhjMDgwMDAwMCwzTSByb290PS9kZXYvcmFtIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVE9eQotIyBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0UgaXMgbm90IHNldAotQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRT15Ci0jIENPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT15Ci0jIENPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAotQ09ORklHX0NQVV9GUkVRX1NBMTExMD15Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwogQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUE0gaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCitDT05GSUdfTkVUPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorQ09ORklHX0lSREE9bQorQ09ORklHX0lSTEFOPW0KK0NPTkZJR19TQTExMDBfRklSPW0KIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15Ci1DT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCi0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15CiBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15Ci1DT05GSUdfTVREX0NGSV9OT1NXQVA9eQotIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfR0VPTUVUUlk9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ0ZJX0kxIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci0jIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAogQ09ORklHX01URF9TQTExMDA9eQotIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotIyBDT05GSUdfUE5QIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfWEQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9bQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCiBDT05GSUdfSURFPXkKLUNPTkZJR19CTEtfREVWX0lERT15Ci0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCi0jCi0jIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQotIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFQ1MgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLUNPTkZJR19JREVfR0VORVJJQz15Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9DSElQU0VUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29ya2luZyBzdXBwb3J0Ci0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLSMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVENQRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotQ09ORklHX0lSREE9bQotCi0jCi0jIElyREEgcHJvdG9jb2xzCi0jCi1DT05GSUdfSVJMQU49bQotIyBDT05GSUdfSVJDT01NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREFfVUxUUkEgaXMgbm90IHNldAotCi0jCi0jIElyREEgb3B0aW9ucwotIwotIyBDT05GSUdfSVJEQV9DQUNIRV9MQVNUX0xTQVAgaXMgbm90IHNldAotIyBDT05GSUdfSVJEQV9GQVNUX1JSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREFfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIEluZnJhcmVkLXBvcnQgZGV2aWNlIGRyaXZlcnMKLSMKLQotIwotIyBTSVIgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0lSVFRZX1NJUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRG9uZ2xlIHN1cHBvcnQKLSMKLQotIwotIyBPbGQgU0lSIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19JUlBPUlRfU0lSIGlzIG5vdCBzZXQKLQotIwotIyBPbGQgU2VyaWFsIGRvbmdsZSBzdXBwb3J0Ci0jCi0KLSMKLSMgRklSIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19OU0NfRklSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTkJPTkRfRklSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQ19JUkNDX0ZJUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTElfRklSIGlzIG5vdCBzZXQKLUNPTkZJR19TQTExMDBfRklSPW0KLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTEFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9TTUMgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAotIyBDT05GSUdfQVQxNzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JU0EgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX05FVF9QQ01DSUE9eQotIyBDT05GSUdfUENNQ0lBXzNDNTg5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV8zQzU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfRk1WSjE4WCBpcyBub3Qgc2V0CiBDT05GSUdfUENNQ0lBX1BDTkVUPXkKLSMgQ09ORklHX1BDTUNJQV9OTUNMQU4gaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1NNQzkxQzkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9YSVJDMlBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9BWE5FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfVFNERVY9eQotQ09ORklHX0lOUFVUX1RTREVWX1NDUkVFTl9YPTI0MAotQ09ORklHX0lOUFVUX1RTREVWX1NDUkVFTl9ZPTMyMAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBJL08gZHJpdmVycwotIwotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTA9bQotIyBDT05GSUdfU0VSSUFMXzgyNTBfQ1MgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX1NBMTEwMD15CiBDT05GSUdfU0VSSUFMX1NBMTEwMF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCi0jCi0jIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCiBDT05GSUdfRkI9eQotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CiBDT05GSUdfRkJfU0ExMTAwPXkKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTURBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTG9nbyBjb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKIENPTkZJR19TT1VORD15Ci0KLSMKLSMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCi0jCi0jIENPTkZJR19TTkQgaXMgbm90IHNldAotCi0jCi0jIE9wZW4gU291bmQgU3lzdGVtCi0jCi0jIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCi0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCi0jIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFhGUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotIyBDT05GSUdfSkZGUzJfRlNfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19OT1JfRUNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwogQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKIENPTkZJR19ERUJVR19VU0VSPXkKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQ1JDX0NDSVRUPW0KLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ1NzJkOTQwaGZla19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2F0NTcyZDk0MGhmZWtfZGVmY29uZmlnCmluZGV4IDc2ZDcyNGIuLjY5NWUzMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ1NzJkOTQwaGZla19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdDU3MmQ5NDBoZmVrX2RlZmNvbmZpZwpAQCAtMSw0NTIgKzEsNjggQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC1yYzcKLSMgRnJpIERlYyAgNSAxMDo1ODo0NyAyMDA4Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049Ii1BVDU3MkQ5NDBIRiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKIENPTkZJR19UQVNLU1RBVFM9eQotIyBDT05GSUdfVEFTS19ERUxBWV9BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19UQVNLX1hBQ0NUPXkKIENPTkZJR19UQVNLX0lPX0FDQ09VTlRJTkc9eQogQ09ORklHX0FVRElUPXkKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE3CiBDT05GSUdfQ0dST1VQUz15Ci0jIENPTkZJR19DR1JPVVBfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUF9GUkVFWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUF9ERVZJQ0UgaXMgbm90IHNldAotQ09ORklHX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLUNPTkZJR19SVF9HUk9VUF9TQ0hFRD15Ci0jIENPTkZJR19VU0VSX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19DR1JPVVBfU0NIRUQ9eQogQ09ORklHX0NHUk9VUF9DUFVBQ0NUPXkKLSMgQ09ORklHX1JFU09VUkNFX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19DR1JPVVBfU0NIRUQ9eQorQ09ORklHX1JUX0dST1VQX1NDSEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKIENPTkZJR19SRUxBWT15Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15Ci1DT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9bQotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0tQUk9CRVM9eQotQ09ORklHX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSU9fVFJBQ0U9eQotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfQVQ5MT15Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCi0KLSMKLSMgQXRtZWwgQVQ5MSBTeXN0ZW0tb24tQ2hpcAotIwotIyBDT05GSUdfQVJDSF9BVDkxUk05MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05MjYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTlSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05RzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MUNBUDkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxWDQwIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0FUNTcyRDk0MEhGPXkKLUNPTkZJR19BVDkxX1BNQ19VTklUPXkKLQotIwotIyBBVDU3MkQ5NDBIRiBCb2FyZCBUeXBlCi0jCiBDT05GSUdfTUFDSF9BVDU3MkQ5NDBIRkVCPXkKLQotIwotIyBBVDkxIEJvYXJkIE9wdGlvbnMKLSMKLSMgQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0FUTUVMX0JVU1dJRFRIXzE2IGlzIG5vdCBzZXQKLUNPTkZJR19OVU1fU0VSSUFMPTMKLQotIwotIyBBVDkxIEZlYXR1cmUgU2VsZWN0aW9ucwotIwogQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUz15Ci1DT05GSUdfQVQ5MV9USU1FUl9IWj0xMDAKLUNPTkZJR19BVDkxX0VBUkxZX0RCR1U9eQotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDAgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDEgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDIgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDMgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDQgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDUgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVXzMyPXkKLUNPTkZJR19DUFVfQVJNOTI2VD15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXQj15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotQ09ORklHX1ZNU1BMSVRfM0c9eQotIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCiBDT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfSFo9MTAwCi0jIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTAKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKLSMgQ09ORklHX0xFRFMgaXMgbm90IHNldAotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0wCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0wCiBDT05GSUdfQ01ETElORT0ibWVtPTQ4TSBjb25zb2xlPXR0eVMwIGluaXRyZD0weDIxMTAwMDAwLDMxNDU3Mjggcm9vdD0vZGV2L3JhbTAgcncgaXA9MTcyLjE2LjEuMTgxIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfS0VYRUM9eQotQ09ORklHX0FUQUdTX1BST0M9eQotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCi0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKIENPTkZJR19GUEVfTldGUEVfWFA9eQotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPW0KLUNPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfU0NUUD1tCi0jIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAotIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCiBDT05GSUdfTkVUX1BLVEdFTj1tCiBDT05GSUdfTkVUX1RDUFBST0JFPW0KLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKIENPTkZJR19DQU49bQogQ09ORklHX0NBTl9SQVc9bQogQ09ORklHX0NBTl9CQ009bQotCi0jCi0jIENBTiBEZXZpY2UgRHJpdmVycwotIwogQ09ORklHX0NBTl9WQ0FOPW0KIENPTkZJR19DQU5fREVCVUdfREVWSUNFUz15Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQotQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCi0jIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfVEtJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ09OTkVDVE9SPW0KIENPTkZJR19NVEQ9bQogQ09ORklHX01URF9ERUJVRz15CiBDT05GSUdfTVREX0RFQlVHX1ZFUkJPU0U9MQogQ09ORklHX01URF9DT05DQVQ9bQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj1tCi1DT05GSUdfTVREX0JMS0RFVlM9bQogQ09ORklHX01URF9CTE9DSz1tCiBDT05GSUdfTVREX0JMT0NLX1JPPW0KIENPTkZJR19GVEw9bQpAQCAtNDU2LDE2MiArNzIsNTIgQEAKIENPTkZJR19SRkRfRlRMPW0KIENPTkZJR19TU0ZEQz1tCiBDT05GSUdfTVREX09PUFM9bQotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST1tCiBDT05GSUdfTVREX0pFREVDUFJPQkU9bQotQ09ORklHX01URF9HRU5fUFJPQkU9bQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD1tCiBDT05GSUdfTVREX0NGSV9BTURTVEQ9bQogQ09ORklHX01URF9DRklfU1RBQT1tCi1DT05GSUdfTVREX0NGSV9VVElMPW0KLUNPTkZJR19NVERfUkFNPW0KIENPTkZJR19NVERfUk9NPW0KIENPTkZJR19NVERfQUJTRU5UPW0KLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCiBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQogQ09ORklHX01URF9QSFlTTUFQPW0KLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDgwMDAwMDAKLUNPTkZJR19NVERfUEhZU01BUF9MRU49MHg0MDAwMDAwCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTIKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldAogQ09ORklHX01URF9QTEFUUkFNPW0KLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKIENPTkZJR19NVERfREFUQUZMQVNIPW0KLSMgQ09ORklHX01URF9EQVRBRkxBU0hfV1JJVEVfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9EQVRBRkxBU0hfT1RQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTTI1UDgwPW0KLUNPTkZJR19NMjVQWFhfVVNFX0ZBU1RfUkVBRD15CiBDT05GSUdfTVREX1NMUkFNPW0KIENPTkZJR19NVERfUEhSQU09bQogQ09ORklHX01URF9NVERSQU09bQotQ09ORklHX01URFJBTV9UT1RBTF9TSVpFPTQwOTYKLUNPTkZJR19NVERSQU1fRVJBU0VfU0laRT0xMjgKIENPTkZJR19NVERfQkxPQ0syTVREPW0KLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkQ9bQogQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURT15Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfR1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfSURTPW0KIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQPW0KLSMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVBfUFJPQkVfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVBfUFJPQkVfQUREUkVTUz0wCi0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQX0JCVFdSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0FUTUVMIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORF9OQU5EU0lNPW0KIENPTkZJR19NVERfTkFORF9QTEFURk9STT1tCiBDT05GSUdfTVREX0FMQVVEQT1tCi0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCiBDT05GSUdfTVREX1VCST1tCi1DT05GSUdfTVREX1VCSV9XTF9USFJFU0hPTEQ9NDA5NgotQ09ORklHX01URF9VQklfQkVCX1JFU0VSVkU9MQotQ09ORklHX01URF9VQklfR0xVRUJJPXkKLQotIwotIyBVQkkgZGVidWdnaW5nIG9wdGlvbnMKLSMKLSMgQ09ORklHX01URF9VQklfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX01URF9VQklfR0xVRUJJPW0KIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCiBDT05GSUdfQkxLX0RFVl9OQkQ9bQotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT02NTUzNgotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15CiBDT05GSUdfQVRNRUxfVENMSUI9eQotQ09ORklHX0FUTUVMX1RDQl9DTEtTUkM9eQotQ09ORklHX0FUTUVMX1RDQl9DTEtTUkNfQkxPQ0s9MAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAogQ09ORklHX0FUTUVMX1NTQz1tCi0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKK0NPTkZJR19TRU5TT1JTX1RTTDI1NTA9bQorQ09ORklHX0RTMTY4Mj1tCiBDT05GSUdfUkFJRF9BVFRSUz1tCiBDT05GSUdfU0NTST1tCi1DT05GSUdfU0NTSV9ETUE9eQogQ09ORklHX1NDU0lfVEdUPW0KLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD1tCi0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9TUj1tCi0jIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz1tCiBDT05GSUdfQ0hSX0RFVl9TQ0g9bQotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiBDT05GSUdfU0NTSV9MT0dHSU5HPXkKIENPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfSVNDU0lfQVRUUlM9bQotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19EVU1NWT1tCiBDT05GSUdfQk9ORElORz1tCkBAIC02MjAsMTAgKzEyNiw2IEBACiBDT05GSUdfVFVOPW0KIENPTkZJR19WRVRIPW0KIENPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKIENPTkZJR19NQVJWRUxMX1BIWT1tCiBDT05GSUdfREFWSUNPTV9QSFk9bQogQ09ORklHX1FTRU1JX1BIWT1tCkBAIC02MzMsODA5ICsxMzUsMTk4IEBACiBDT05GSUdfU01TQ19QSFk9bQogQ09ORklHX0JST0FEQ09NX1BIWT1tCiBDT05GSUdfSUNQTFVTX1BIWT1tCi0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogQ09ORklHX01ESU9fQklUQkFORz1tCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9bQotQ09ORklHX01BQ0I9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLUNPTkZJR19XTEFOX1BSRTgwMjExPXkKLUNPTkZJR19TVFJJUD1tCi1DT05GSUdfV0xBTl84MDIxMT15Ci1DT05GSUdfTElCRVJUQVM9bQotQ09ORklHX0xJQkVSVEFTX1VTQj1tCi1DT05GSUdfTElCRVJUQVNfU0RJTz1tCi0jIENPTkZJR19MSUJFUlRBU19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1pEMTIwMT1tCi0jIENPTkZJR19VU0JfTkVUX1JORElTX1dMQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKIENPTkZJR19IT1NUQVA9bQogQ09ORklHX0hPU1RBUF9GSVJNV0FSRT15CiBDT05GSUdfSE9TVEFQX0ZJUk1XQVJFX05WUkFNPXkKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwogQ09ORklHX1VTQl9DQVRDPW0KIENPTkZJR19VU0JfS0FXRVRIPW0KIENPTkZJR19VU0JfUEVHQVNVUz1tCiBDT05GSUdfVVNCX1JUTDgxNTA9bQogQ09ORklHX1VTQl9VU0JORVQ9bQotQ09ORklHX1VTQl9ORVRfQVg4ODE3WD1tCi1DT05GSUdfVVNCX05FVF9DRENFVEhFUj1tCiBDT05GSUdfVVNCX05FVF9ETTk2MDE9bQotIyBDT05GSUdfVVNCX05FVF9TTVNDOTVYWCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX05FVF9HTDYyMEE9bQotQ09ORklHX1VTQl9ORVRfTkVUMTA4MD1tCiBDT05GSUdfVVNCX05FVF9QTFVTQj1tCiBDT05GSUdfVVNCX05FVF9NQ1M3ODMwPW0KIENPTkZJR19VU0JfTkVUX1JORElTX0hPU1Q9bQotQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVD1tCiBDT05GSUdfVVNCX0FMSV9NNTYzMj15CiBDT05GSUdfVVNCX0FOMjcyMD15Ci1DT05GSUdfVVNCX0JFTEtJTj15Ci1DT05GSUdfVVNCX0FSTUxJTlVYPXkKIENPTkZJR19VU0JfRVBTT04yODg4PXkKIENPTkZJR19VU0JfS0MyMTkwPXkKICMgQ09ORklHX1VTQl9ORVRfWkFVUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX1BPTExERVY9bQotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKIENPTkZJR19JTlBVVF9NT1VTRURFVj1tCi1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9bQogQ09ORklHX0lOUFVUX0VWQlVHPW0KLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci1DT05GSUdfS0VZQk9BUkRfU1VOS0JEPW0KIENPTkZJR19LRVlCT0FSRF9MS0tCRD1tCi1DT05GSUdfS0VZQk9BUkRfWFRLQkQ9bQorQ09ORklHX0tFWUJPQVJEX0dQSU89bQogQ09ORklHX0tFWUJPQVJEX05FV1RPTj1tCiBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVk9bQotQ09ORklHX0tFWUJPQVJEX0dQSU89bQotQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19LRVlCT0FSRF9TVU5LQkQ9bQorQ09ORklHX0tFWUJPQVJEX1hUS0JEPW0KIENPTkZJR19NT1VTRV9QUzI9bQotQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKLUNPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKLUNPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKLUNPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQotQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKLSMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogQ09ORklHX01PVVNFX1NFUklBTD1tCiBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSD1tCi0jIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKIENPTkZJR19NT1VTRV9WU1hYWEFBPW0KIENPTkZJR19NT1VTRV9HUElPPW0KLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTUlTQz15Ci0jIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0NNMTA5IGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9VSU5QVVQ9bQotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKIENPTkZJR19TRVJJT19TRVJQT1JUPW0KLUNPTkZJR19TRVJJT19MSUJQUzI9eQogQ09ORklHX1NFUklPX1JBVz1tCi0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQogQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15Ci1DT05GSUdfREVWS01FTT15CiBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEPXkKIENPTkZJR19OX0hETEM9bQotIyBDT05GSUdfUklTQ09NOCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFQ0lBTElYPW0KLUNPTkZJR19SSU89bQotIyBDT05GSUdfUklPX09MRFBDSSBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTERSVj15Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX0FUTUVMPXkKIENPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0FUTUVMX1BEQz15Ci0jIENPTkZJR19TRVJJQUxfQVRNRUxfVFRZQVQgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiBDT05GSUdfSVBNSV9IQU5ETEVSPW0KLSMgQ09ORklHX0lQTUlfUEFOSUNfRVZFTlQgaXMgbm90IHNldAogQ09ORklHX0lQTUlfREVWSUNFX0lOVEVSRkFDRT1tCiBDT05GSUdfSVBNSV9TST1tCiBDT05GSUdfSVBNSV9XQVRDSERPRz1tCiBDT05GSUdfSVBNSV9QT1dFUk9GRj1tCiBDT05GSUdfSFdfUkFORE9NPXkKLUNPTkZJR19OVlJBTT1tCiBDT05GSUdfUjM5NjQ9bQogQ09ORklHX1JBV19EUklWRVI9bQotQ09ORklHX01BWF9SQVdfREVWUz0yNTYKIENPTkZJR19UQ0dfVFBNPW0KIENPTkZJR19UQ0dfTlNDPW0KIENPTkZJR19UQ0dfQVRNRUw9bQogQ09ORklHX0kyQz1tCi1DT05GSUdfSTJDX0JPQVJESU5GTz15CiBDT05GSUdfSTJDX0NIQVJERVY9bQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi1DT05GSUdfRFMxNjgyPW0KLSMgQ09ORklHX0FUMjQgaXMgbm90IHNldAotQ09ORklHX1NFTlNPUlNfRUVQUk9NPW0KLUNPTkZJR19TRU5TT1JTX1BDRjg1NzQ9bQotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotQ09ORklHX1NFTlNPUlNfUENGODU5MT1tCi1DT05GSUdfU0VOU09SU19NQVg2ODc1PW0KLUNPTkZJR19TRU5TT1JTX1RTTDI1NTA9bQotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfU1BJPXkKLUNPTkZJR19TUElfTUFTVEVSPXkKLQotIwotIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwotIwogQ09ORklHX1NQSV9BVE1FTD15CiBDT05GSUdfU1BJX0JJVEJBTkc9bQotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCi1DT05GSUdfU1BJX0FUMjU9bQogQ09ORklHX1NQSV9TUElERVY9bQotIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfU09VTkQ9bQotQ09ORklHX1NPVU5EX09TU19DT1JFPXkKIENPTkZJR19TTkQ9bQotQ09ORklHX1NORF9USU1FUj1tCi1DT05GSUdfU05EX1BDTT1tCi1DT05GSUdfU05EX0hXREVQPW0KLUNPTkZJR19TTkRfUkFXTUlEST1tCiBDT05GSUdfU05EX1NFUVVFTkNFUj1tCiBDT05GSUdfU05EX1NFUV9EVU1NWT1tCi1DT05GSUdfU05EX09TU0VNVUw9eQogQ09ORklHX1NORF9NSVhFUl9PU1M9bQogQ09ORklHX1NORF9QQ01fT1NTPW0KICMgQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlMgaXMgbm90IHNldAogQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlM9eQotQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQogIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NORF9EUklWRVJTPXkKIENPTkZJR19TTkRfRFVNTVk9bQogQ09ORklHX1NORF9WSVJNSURJPW0KLSMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfQVJNPXkKLUNPTkZJR19TTkRfU1BJPXkKLSMgQ09ORklHX1NORF9BVDczQzIxMyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1VTQj15CiBDT05GSUdfU05EX1VTQl9BVURJTz1tCiBDT05GSUdfU05EX1VTQl9DQUlBUT1tCiBDT05GSUdfU05EX1VTQl9DQUlBUV9JTlBVVD15Ci0jIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPW0KLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSElEUkFXPXkKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwogQ09ORklHX1VTQl9ISUQ9bQotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0hJRERFVj15Ci0KLSMKLSMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKLSMKIENPTkZJR19VU0JfS0JEPW0KIENPTkZJR19VU0JfTU9VU0U9bQotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLUNPTkZJR19ISURfQ09NUEFUPXkKIENPTkZJR19ISURfQTRURUNIPW0KIENPTkZJR19ISURfQVBQTEU9bQogQ09ORklHX0hJRF9CRUxLSU49bQotQ09ORklHX0hJRF9CUklHSFQ9bQogQ09ORklHX0hJRF9DSEVSUlk9bQogQ09ORklHX0hJRF9DSElDT05ZPW0KIENPTkZJR19ISURfQ1lQUkVTUz1tCi1DT05GSUdfSElEX0RFTEw9bQogQ09ORklHX0hJRF9FWktFWT1tCiBDT05GSUdfSElEX0dZUkFUSU9OPW0KIENPTkZJR19ISURfTE9HSVRFQ0g9bQotIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAotIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9NSUNST1NPRlQ9bQogQ09ORklHX0hJRF9NT05URVJFWT1tCiBDT05GSUdfSElEX1BBTlRIRVJMT1JEPW0KLSMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfUEVUQUxZTlg9bQogQ09ORklHX0hJRF9TQU1TVU5HPW0KIENPTkZJR19ISURfU09OWT1tCiBDT05GSUdfSElEX1NVTlBMVVM9bQotIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1pFUk9QTFVTX0ZGIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAogQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUz15Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15Ci0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7Ci0jCi0KLSMKLSMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKIENPTkZJR19VU0JfU1RPUkFHRT1tCi0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQj15Ci1DT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTT15Ci1DT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwPXkKLUNPTkZJR19VU0JfU1RPUkFHRV9EUENNPXkKLUNPTkZJR19VU0JfU1RPUkFHRV9VU0JBVD15Ci1DT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5PXkKLUNPTkZJR19VU0JfU1RPUkFHRV9TRERSNTU9eQotQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UPXkKLUNPTkZJR19VU0JfU1RPUkFHRV9BTEFVREE9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAotQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUI9bQorQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT009bQorQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMD1tCitDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQ9bQorQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOT1tCitDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1PW0KK0NPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVD1tCitDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBPW0KK0NPTkZJR19VU0JfU1RPUkFHRV9LQVJNQT1tCiBDT05GSUdfVVNCX0xJQlVTVUFMPXkKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwogQ09ORklHX1VTQl9TRVJJQUw9bQogQ09ORklHX1VTQl9FWlVTQj15CiBDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDPXkKLSMgQ09ORklHX1VTQl9TRVJJQUxfQUlSQ0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQ0gzNDEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9DUDIxMDEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRU1QRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0ZVTlNPRlQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9WSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lQQVEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9JUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlRfVEkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9HQVJNSU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9JUFcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9JVVUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1BEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LTFNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3NzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzg0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX01PVE9ST0xBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTkFWTUFOIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX1BMMjMwMz1tCi0jIENPTkZJR19VU0JfU0VSSUFMX09USTY4NTggaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfU1BDUDhYNT1tCi0jIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9USSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1hJUkNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX09QVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfREVCVUc9bQotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKIENPTkZJR19VU0JfRU1JNjI9bQogQ09ORklHX1VTQl9FTUkyNj1tCiBDT05GSUdfVVNCX0FEVVRVWD1tCi0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1RFU1Q9bQotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVQ9bQogQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVM9eQogQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRlM9eQotQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTIKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLUNPTkZJR19VU0JfR0FER0VUX0FUOTE9eQotQ09ORklHX1VTQl9BVDkxPW0KLSMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfWkVSTz1tCiBDT05GSUdfVVNCX0VUSD1tCi1DT05GSUdfVVNCX0VUSF9STkRJUz15CiBDT05GSUdfVVNCX0dBREdFVEZTPW0KIENPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KLSMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dfU0VSSUFMPW0KIENPTkZJR19VU0JfTUlESV9HQURHRVQ9bQotIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKIENPTkZJR19TRElPX1VBUlQ9bQotIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAotQ09ORklHX01NQ19BVDkxPXkKK0NPTkZJR19NTUNfQVQ5MT1tCiBDT05GSUdfTU1DX1NQST1tCi0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CiBDT05GSUdfTEVEU19DTEFTUz1tCi0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLSMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19HUElPPW0KLSMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCiBDT05GSUdfTEVEU19UUklHR0VSUz15CiBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPW0KIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPW0KLSMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT04gaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUw9eQotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX0RTMTMwNz1tCi0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX0RTMTMwNT15Ci0jIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTkgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQyX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUMl9GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15CiBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQogQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKIENPTkZJR19KQkRfREVCVUc9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQogQ09ORklHX1JFSVNFUkZTX0ZTPW0KIENPTkZJR19SRUlTRVJGU19DSEVDSz15CiBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPPXkKIENPTkZJR19SRUlTRVJGU19GU19YQVRUUj15CiBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWT15Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GVVNFX0ZTPW0KLUNPTkZJR19HRU5FUklDX0FDTD15Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPW0KIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKIENPTkZJR19OVEZTX0ZTPW0KLSMgQ09ORklHX05URlNfREVCVUcgaXMgbm90IHNldAogQ09ORklHX05URlNfUlc9eQotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19DT05GSUdGU19GUz1tCi0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9bQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKLUNPTkZJR19KRkZTMl9aTElCPXkKIENPTkZJR19KRkZTMl9MWk89eQotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPPXkKLSMgQ09ORklHX1VCSUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9bQotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9bQogQ09ORklHX05GU19WMz15CiBDT05GSUdfTkZTX1YzX0FDTD15CiBDT05GSUdfTkZTX1Y0PXkKIENPTkZJR19ORlNEPW0KLUNPTkZJR19ORlNEX1YyX0FDTD15Ci1DT05GSUdfTkZTRF9WMz15CiBDT05GSUdfTkZTRF9WM19BQ0w9eQogQ09ORklHX05GU0RfVjQ9eQotQ09ORklHX0xPQ0tEPW0KLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfRVhQT1JURlM9bQotQ09ORklHX05GU19BQ0xfU1VQUE9SVD1tCi1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPW0KLUNPTkZJR19TVU5SUENfR1NTPW0KLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PW0KLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DSUZTPW0KLSMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAogQ09ORklHX0NJRlNfV0VBS19QV19IQVNIPXkKLSMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfTUFDX1BBUlRJVElPTj15Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKIENPTkZJR19CU0RfRElTS0xBQkVMPXkKIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT049eQogQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTj15CkBAIC0xNDQzLDE5OCArMzM0LDI1IEBACiBDT05GSUdfTERNX1BBUlRJVElPTj15CiBDT05GSUdfTERNX0RFQlVHPXkKIENPTkZJR19TR0lfUEFSVElUSU9OPXkKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAogQ09ORklHX1NVTl9QQVJUSVRJT049eQotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iY3A0MzciCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAogQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQVNDSUk9eQogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogQ09ORklHX05MU19VVEY4PW0KIENPTkZJR19ETE09bQotIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwogQ09ORklHX1BSSU5US19USU1FPXkKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX1VOVVNFRF9TWU1CT0xTPXkKIENPTkZJR19ERUJVR19GUz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLQotIwotIyBUcmFjZXJzCi0jCi0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNVUklUWUZTPXkKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BRUFEPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX1JORz15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCi0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0NCQz1tCi0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fU0hBMT1tCi0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FSQzQ9bQotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPW0KLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQogQ09ORklHX0NSQzE2PW0KLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotQ09ORklHX0NSQ19JVFVfVD1tCi1DT05GSUdfQ1JDMzI9eQotQ09ORklHX0NSQzc9bQotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfQVVESVRfR0VORVJJQz15Ci1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX0xaT19DT01QUkVTUz1tCi1DT05GSUdfTFpPX0RFQ09NUFJFU1M9bQotQ09ORklHX1JFRURfU09MT01PTj1tCi1DT05GSUdfUkVFRF9TT0xPTU9OX0RFQzE2PXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MWNhcDlhZGtfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxY2FwOWFka19kZWZjb25maWcKaW5kZXggYjFhYjUwYi4uZmZiMWVkZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxY2FwOWFka19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxY2FwOWFka19kZWZjb25maWcKQEAgLTEsMTIxOCArMSwxMTUgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzgKLSMgV2VkIEphbiAyMyAyMjo1NTo1NyAyMDA4Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLSMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9BVDkxPXkKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBBdG1lbCBBVDkxIFN5c3RlbS1vbi1DaGlwCi0jCi0jIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05MjYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxU0FNOVJMIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0FUOTFDQVA5PXkKLSMgQ09ORklHX0FSQ0hfQVQ5MVg0MCBpcyBub3Qgc2V0Ci1DT05GSUdfQVQ5MV9QTUNfVU5JVD15Ci0KLSMKLSMgQVQ5MUNBUDkgQm9hcmQgVHlwZQotIwogQ09ORklHX01BQ0hfQVQ5MUNBUDlBREs9eQotCi0jCi0jIEFUOTEgQm9hcmQgT3B0aW9ucwotIwogQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJEPXkKLSMgQ09ORklHX01URF9OQU5EX0FUTUVMX0JVU1dJRFRIXzE2IGlzIG5vdCBzZXQKLQotIwotIyBBVDkxIEZlYXR1cmUgU2VsZWN0aW9ucwotIwogQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUz15Ci1DT05GSUdfQVQ5MV9USU1FUl9IWj0xMDAKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9BUk05MjZUPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKICMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19MRURTPXkKLUNPTkZJR19MRURTX1RJTUVSPXkKIENPTkZJR19MRURTX0NQVT15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxMTUyMDAgcm9vdD0vZGV2L3JhbTAgcnciCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKIENPTkZJR19JUF9QTlBfUkFSUD15Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDAKLUNPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTAKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwogQ09ORklHX01URF9EQVRBRkxBU0g9eQotIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORF9BVE1FTD15Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogQ09ORklHX0FUTUVMX1NTQz15Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQogQ09ORklHX01BQ0I9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKIENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2PXkKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1VDQjE0MDAgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9BVE1FTD15CiBDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwogQ09ORklHX1NQST15Ci0jIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NQSV9NQVNURVI9eQotCi0jCi0jIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCi0jCiBDT05GSUdfU1BJX0FUTUVMPXkKLSMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUHJvdG9jb2wgTWFzdGVycwotIwotIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKIENPTkZJR19XQVRDSERPR19OT1dBWU9VVD15Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQVRNRUw9eQotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19MT0dPPXkKICMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HT19MSU5VWF9WR0ExNj15CiAjIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci1DT05GSUdfSElEX0RFQlVHPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKICMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCi0jCi1DT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIworQ09ORklHX1VTQl9PSENJX0hDRD15CitDT05GSUdfVVNCX1NUT1JBR0U9eQogQ09ORklHX1VTQl9HQURHRVQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBPXkKLUNPTkZJR19VU0JfQVRNRUxfVVNCQT15Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15Ci0jIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VUSD1tCi1DT05GSUdfVVNCX0VUSF9STkRJUz15Ci0jIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAogQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAogQ09ORklHX01NQz15Ci0jIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQotIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQVQ5MT15Ci0jIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKK0NPTkZJR19NTUNfQVQ5MT1tCiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCiBDT05GSUdfUlRDX0RSVl9BVDkxU0FNOT15Ci1DT05GSUdfUlRDX0RSVl9BVDkxU0FNOV9SVFQ9MAotQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTlfR1BCUj0wCi0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAogQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotQ09ORklHX0lOU1RSVU1FTlRBVElPTj15Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15Ci0jIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwZGtfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwZGtfZGVmY29uZmlnCmluZGV4IDFmZmZlYzguLjQ0MzhlNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMGRrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBka19kZWZjb25maWcKQEAgLTEsMTAwOSArMSw3MiBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE1Ci0jIE1vbiBKYW4gIDkgMjA6NTQ6MzAgMjAwNgotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCi0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9BVDkxPXkKLUNPTkZJR19BUkNIX0FUOTFSTTkyMDA9eQotCi0jCi0jIEFUOTFSTTkyMDAgSW1wbGVtZW50YXRpb25zCi0jCi0KLSMKLSMgQVQ5MVJNOTIwMCBCb2FyZCBUeXBlCi0jCiBDT05GSUdfQVJDSF9BVDkxUk05MjAwREs9eQotIyBDT05GSUdfTUFDSF9BVDkxUk05MjAwRUsgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DU0IzMzcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DU0I2MzcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DQVJNRVZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfS0I5MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQVRFQjkyMDAgaXMgbm90IHNldAogQ09ORklHX01BQ0hfRUNPOTIwPXkKLQotIwotIyBBVDkxUk05MjAwIEZlYXR1cmUgU2VsZWN0aW9ucwotIwogQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUz15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTIwVD15Ci1DT05GSUdfQ1BVXzMydjQ9eQotQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQotQ09ORklHX0NQVV9DQUNIRV9WNFdUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXQj15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCiAjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwogQ09ORklHX1BDQ0FSRD15Ci0jIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQT15Ci1DT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKLUNPTkZJR19QQ01DSUFfSU9DVEw9eQotCi0jCi0jIFBDLWNhcmQgYnJpZGdlcwotIwogQ09ORklHX0FUOTFfQ0Y9eQotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgogQ09ORklHX0xFRFM9eQotQ09ORklHX0xFRFNfVElNRVI9eQotIyBDT05GSUdfTEVEU19DUFUgaXMgbm90IHNldAotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9Im1lbT0zMk0gY29uc29sZT10dHlTMCwxMTUyMDAgaW5pdHJkPTB4MjA0MTAwMDAsMzE0NTcyOCByb290PS9kZXYvcmFtMCBydyIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci1DT05GSUdfTVREX0NGSV9BTURTVERfUkVUUlk9MAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0wCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTAKLUNPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MAotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9JTVBBNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0FUOTFfREFUQUZMQVNIPXkKLSMgQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJEIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIwotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCi0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQogQ09ORklHX0FSTV9BVDkxX0VUSEVSPXkKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9BVE1FTD15CiBDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLUNPTkZJR19XQVRDSERPRz15Ci1DT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19BVDkxUk05MjAwX1dBVENIRE9HPXkKLQotIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19EUlZfQVQ5MVJNOTIwMD15Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLQotIwotIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAotQ09ORklHX0FUOTFfU1BJPXkKLUNPTkZJR19BVDkxX1NQSURFVj15Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotQ09ORklHX0kyQ19BTEdPQklUPXkKLSMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKIENPTkZJR19JMkNfR1BJTz15Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX1gxMjA1X0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKLSMKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCitDT05GSUdfV0FUQ0hET0c9eQorQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKK0NPTkZJR19BVDkxUk05MjAwX1dBVENIRE9HPXkKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfREVCVUc9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0hDRD15Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKLSMgQ09ORklHX1VTQl9TVE9SQUdFIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BSVBURUsgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dBQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VHQUxBWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIFZpZGVvNExpbnV4IHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTXVsdGltZWRpYSBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVEtJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERTTCBtb2RlbSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCitDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfR0FER0VUPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX0FUOTE9eQotQ09ORklHX1VTQl9BVDkxPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTU1DX0JMT0NLPXkKLSMgQ09ORklHX01NQ19XQlNEIGlzIG5vdCBzZXQKLUNPTkZJR19NTUNfQVQ5MVJNOTIwMD15Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfRFJWX0FUOTFSTTkyMDA9eQogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci0jIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwotIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15Ci0jIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCi0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBla19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBla19kZWZjb25maWcKaW5kZXggYzg0NmE3OS4uY2NkNTE3YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwZWtfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMGVrX2RlZmNvbmZpZwpAQCAtMSw5OTcgKzEsNzMgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNQotIyBNb24gSmFuICA5IDIwOjU3OjMxIDIwMDYKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX01NVT15Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCi0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9BVDkxPXkKLUNPTkZJR19BUkNIX0FUOTFSTTkyMDA9eQotCi0jCi0jIEFUOTFSTTkyMDAgSW1wbGVtZW50YXRpb25zCi0jCi0KLSMKLSMgQVQ5MVJNOTIwMCBCb2FyZCBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FUOTFSTTkyMDBESyBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9BVDkxUk05MjAwRUs9eQotIyBDT05GSUdfTUFDSF9DU0IzMzcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DU0I2MzcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DQVJNRVZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfS0I5MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQVRFQjkyMDAgaXMgbm90IHNldAotCi0jCi0jIEFUOTFSTTkyMDAgRmVhdHVyZSBTZWxlY3Rpb25zCi0jCiBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTPXkKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9BUk05MjBUPXkKLUNPTkZJR19DUFVfMzJ2ND15Ci1DT05GSUdfQ1BVX0FCUlRfRVY0VD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y0V1Q9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKICMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgogQ09ORklHX0xFRFM9eQotQ09ORklHX0xFRFNfVElNRVI9eQogQ09ORklHX0xFRFNfQ1BVPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJtZW09MzJNIGNvbnNvbGU9dHR5UzAsMTE1MjAwIGluaXRyZD0weDIwNDEwMDAwLDMxNDU3Mjggcm9vdD0vZGV2L3JhbTAgcnciCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci1DT05GSUdfTVREX0NGSV9BTURTVERfUkVUUlk9MAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0wCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTAKLUNPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MAotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9JTVBBNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0FUOTFfREFUQUZMQVNIPXkKLSMgQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJEIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIwogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKIENPTkZJR19BUk1fQVQ5MV9FVEhFUj15Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9BVE1FTD15CiBDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLUNPTkZJR19XQVRDSERPRz15Ci1DT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19BVDkxUk05MjAwX1dBVENIRE9HPXkKLQotIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19EUlZfQVQ5MVJNOTIwMD15Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKLUNPTkZJR19BVDkxX1NQST15Ci1DT05GSUdfQVQ5MV9TUElERVY9eQotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLUNPTkZJR19JMkNfQUxHT0JJVD15Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCiBDT05GSUdfSTJDX0dQSU89eQotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19YMTIwNV9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCi1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BU0IxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIworQ09ORklHX1dBVENIRE9HPXkKK0NPTkZJR19XQVRDSERPR19OT1dBWU9VVD15CitDT05GSUdfQVQ5MVJNOTIwMF9XQVRDSERPRz15CiBDT05GSUdfRkI9eQotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAogQ09ORklHX0ZCX1MxRDEzWFhYPXkKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTG9nbyBjb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIwotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAogQ09ORklHX1VTQj15CiBDT05GSUdfVVNCX0RFQlVHPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLSMgQ09ORklHX1VTQl9CQU5EV0lEVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCi0jCi0jIENPTkZJR19VU0JfU1RPUkFHRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLSMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XQUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lUTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FR0FMQVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKLQotIwotIyBWaWRlbzRMaW51eCBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE11bHRpbWVkaWEgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVRLSVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVRTRVJWTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIworQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX0dBREdFVD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9BVDkxPXkKLUNPTkZJR19VU0JfQVQ5MT15Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwogQ09ORklHX01NQz15Ci0jIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX01NQ19CTE9DSz15Ci0jIENPTkZJR19NTUNfV0JTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1DX0FUOTFSTTkyMDA9eQotCi0jCi0jIEZpbGUgc3lzdGVtcwotIworQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0RSVl9BVDkxUk05MjAwPXkKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKLSMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQotIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MGVrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjBla19kZWZjb25maWcKaW5kZXggNDcyZWExMS4uZjhhOTIyNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MGVrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYwZWtfZGVmY29uZmlnCkBAIC0xLDEwMzkgKzEsODMgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzcKLSMgVHVlIEphbiAgOCAyMjoyMDo1MCAyMDA4Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLSMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9BVDkxPXkKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBBdG1lbCBBVDkxIFN5c3RlbS1vbi1DaGlwCi0jCi0jIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjA9eQotIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05MjYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTlSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFYNDAgaXMgbm90IHNldAotQ09ORklHX0FUOTFfUE1DX1VOSVQ9eQotCi0jCi0jIEFUOTFTQU05MjYwIFZhcmlhbnRzCi0jCi0jIENPTkZJR19BUkNIX0FUOTFTQU05MjYwX1NBTTlYRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQVQ5MVNBTTkyNjAgLyBBVDkxU0FNOVhFIEJvYXJkIFR5cGUKLSMKIENPTkZJR19NQUNIX0FUOTFTQU05MjYwRUs9eQotIyBDT05GSUdfTUFDSF9DQU02MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1NBTTlfTDkyNjAgaXMgbm90IHNldAotCi0jCi0jIEFUOTEgQm9hcmQgT3B0aW9ucwotIwotIyBDT05GSUdfTVREX0FUOTFfREFUQUZMQVNIX0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfQVRNRUxfQlVTV0lEVEhfMTYgaXMgbm90IHNldAotCi0jCi0jIEFUOTEgRmVhdHVyZSBTZWxlY3Rpb25zCi0jCiBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTPXkKLSMgQ09ORklHX0FUTUVMX1RDTElCIGlzIG5vdCBzZXQKLUNPTkZJR19BVDkxX1RJTUVSX0haPTEwMAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX0FSTTkyNlQ9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUSj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwogIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMDAKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0xFRFMgaXMgbm90IHNldAotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9Im1lbT02NE0gY29uc29sZT10dHlTMCwxMTUyMDAgaW5pdHJkPTB4MjExMDAwMDAsMzE0NTcyOCByb290PS9kZXYvcmFtMCBydyIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19BVE1FTF9TU0M9eQotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKIENPTkZJR19TQ1NJX01VTFRJX0xVTj15Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKIENPTkZJR19NQUNCPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9BVE1FTD15CiBDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi1DT05GSUdfSTJDX0FMR09CSVQ9eQotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwogQ09ORklHX0kyQ19HUElPPXkKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQ0EgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0c9eQotCi0jCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKICMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9eQogQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKIENPTkZJR19VU0JfR0FER0VUPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9BVDkxPXkKLUNPTkZJR19VU0JfQVQ5MT15Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1pFUk89bQotIyBDT05GSUdfVVNCX0VUSCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVEZTPW0KIENPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KLSMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dfU0VSSUFMPW0KLSMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCiBDT05GSUdfUlRDX0RSVl9BVDkxU0FNOT15Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5TVFJVTUVOVEFUSU9OPXkKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15Ci0jIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MWVrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjFla19kZWZjb25maWcKaW5kZXggNGVjZGU0Mi4uYjQ2MDI1YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MWVrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYxZWtfZGVmY29uZmlnCkBAIC0xLDExNzggKzEsOTUgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzcKLSMgVHVlIEphbiAgOCAyMjoyMTo0OSAyMDA4Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLSMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9BVDkxPXkKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBBdG1lbCBBVDkxIFN5c3RlbS1vbi1DaGlwCi0jCi0jIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MT15Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05MjYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTlSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFYNDAgaXMgbm90IHNldAotQ09ORklHX0FUOTFfUE1DX1VOSVQ9eQotCi0jCi0jIEFUOTFTQU05MjYxIEJvYXJkIFR5cGUKLSMKIENPTkZJR19NQUNIX0FUOTFTQU05MjYxRUs9eQotCi0jCi0jIEFUOTEgQm9hcmQgT3B0aW9ucwotIwotIyBDT05GSUdfTVREX0FUOTFfREFUQUZMQVNIX0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfQVRNRUxfQlVTV0lEVEhfMTYgaXMgbm90IHNldAotCi0jCi0jIEFUOTEgRmVhdHVyZSBTZWxlY3Rpb25zCi0jCiBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTPXkKLSMgQ09ORklHX0FUTUVMX1RDTElCIGlzIG5vdCBzZXQKLUNPTkZJR19BVDkxX1RJTUVSX0haPTEwMAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX0FSTTkyNlQ9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUSj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwogIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMDAKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0xFRFMgaXMgbm90IHNldAotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9Im1lbT02NE0gY29uc29sZT10dHlTMCwxMTUyMDAgaW5pdHJkPTB4MjExMDAwMDAsMzE0NTcyOCByb290PS9kZXYvcmFtMCBydyIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwotIyBDT05GSUdfTVREX0NIQVIgaXMgbm90IHNldAotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAotIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORF9BVE1FTD15Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19BVE1FTF9TU0M9eQotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKIENPTkZJR19TQ1NJX01VTFRJX0xVTj15Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKIENPTkZJR19ETTkwMDA9eQotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0dQSU89eQogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CiBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9VQ0IxNDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9BVE1FTD15CiBDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotQ09ORklHX0kyQ19BTEdPQklUPXkKLSMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKIENPTkZJR19JMkNfR1BJTz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUENBIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKIENPTkZJR19TUEk9eQotIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TUElfTUFTVEVSPXkKLQotIwotIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwotIwogQ09ORklHX1NQSV9BVE1FTD15Ci0jIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFByb3RvY29sIE1hc3RlcnMKLSMKLSMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0c9eQotCi0jCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9TMUQxNTYwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQVRNRUw9eQotIyBDT05GSUdfRkJfSU5UU1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BVE1FTF9TVE4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR08gaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwogIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKIENPTkZJR19VU0JfU1RPUkFHRT15CiBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUc9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049eQotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwogQ09ORklHX1VTQl9HQURHRVQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX0FUOTE9eQotQ09ORklHX1VTQl9BVDkxPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfWkVSTz1tCi0jIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VURlM9bQogQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR19TRVJJQUw9bQotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKLSMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0FUOTE9eQotIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CitDT05GSUdfTU1DX0FUOTE9bQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX0FUOTFTQU05PXkKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15Ci0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLUNPTkZJR19JTlNUUlVNRU5UQVRJT049eQotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19VU0VSPXkKLSMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTEw9eQotIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYzZWtfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2M2VrX2RlZmNvbmZpZwppbmRleCA5Yjc5MmI2Li44YTA0ZDZmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYzZWtfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjNla19kZWZjb25maWcKQEAgLTEsMTIwNyArMSwxMDYgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzcKLSMgVHVlIEphbiAgOCAyMjoxMjoyMCAyMDA4Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLSMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9BVDkxPXkKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBBdG1lbCBBVDkxIFN5c3RlbS1vbi1DaGlwCi0jCi0jIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05MjYxIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0FUOTFTQU05MjYzPXkKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTlSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFYNDAgaXMgbm90IHNldAotQ09ORklHX0FUOTFfUE1DX1VOSVQ9eQotCi0jCi0jIEFUOTFTQU05MjYzIEJvYXJkIFR5cGUKLSMKIENPTkZJR19NQUNIX0FUOTFTQU05MjYzRUs9eQotCi0jCi0jIEFUOTEgQm9hcmQgT3B0aW9ucwotIwogQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJEPXkKLSMgQ09ORklHX01URF9OQU5EX0FUTUVMX0JVU1dJRFRIXzE2IGlzIG5vdCBzZXQKLQotIwotIyBBVDkxIEZlYXR1cmUgU2VsZWN0aW9ucwotIwotIyBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMX1RDTElCIGlzIG5vdCBzZXQKLUNPTkZJR19BVDkxX1RJTUVSX0haPTEwMAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX0FSTTkyNlQ9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUSj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwogIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMDAKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0xFRFMgaXMgbm90IHNldAotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9Im1lbT02NE0gY29uc29sZT10dHlTMCwxMTUyMDAgaW5pdHJkPTB4MjExMDAwMDAsMzE0NTcyOCByb290PS9kZXYvcmFtMCBydyIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKIENPTkZJR19JUF9QTlBfUkFSUD15Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0RBVEFGTEFTSD15Ci0jIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkQ9eQotIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfSURTPXkKLSMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX0FUTUVMPXkKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfQVRNRUxfU1NDPXkKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiBDT05GSUdfU0NTSV9NVUxUSV9MVU49eQotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01JST15CiBDT05GSUdfTUFDQj15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0dQSU89eQogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CiBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9VQ0IxNDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKIENPTkZJR19TRVJJQUxfQVRNRUw9eQogQ09ORklHX1NFUklBTF9BVE1FTF9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9BVE1FTF9UVFlBVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLUNPTkZJR19JMkNfQUxHT0JJVD15Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCiBDT05GSUdfSTJDX0dQSU89eQotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCiBDT05GSUdfU1BJPXkKLSMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKIENPTkZJR19TUElfQVRNRUw9eQotIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCi0jIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HPXkKLQotIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9EREMgaXMgbm90IHNldAotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9ERUZFUlJFRF9JTz15Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfUzFEMTU2MDUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogQ09ORklHX0ZCX0FUTUVMPXkKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKICMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCi0jCi1DT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIworQ09ORklHX1VTQl9PSENJX0hDRD15CitDT05GSUdfVVNCX1NUT1JBR0U9eQogQ09ORklHX1VTQl9HQURHRVQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX0FUOTE9eQotQ09ORklHX1VTQl9BVDkxPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfWkVSTz1tCi0jIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VURlM9bQogQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR19TRVJJQUw9bQotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKLSMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCiBDT05GSUdfTU1DX0FUOTE9bQotIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwogQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTk9eQotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLUNPTkZJR19JTlNUUlVNRU5UQVRJT049eQotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19VU0VSPXkKLSMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTEw9eQotIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTlnMjBla19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05ZzIwZWtfZGVmY29uZmlnCmluZGV4IDY0Y2UxMDYuLmYxYmFjNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTlnMjBla19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOWcyMGVrX2RlZmNvbmZpZwpAQCAtMSwxMTY3ICsxLDEyMiBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0Ci0jIFR1ZSBKdW4gMTAgMTU6NTE6NTIgMjAwOAotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0FUOTE9eQotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIwotCi0jCi0jIEF0bWVsIEFUOTEgU3lzdGVtLW9uLUNoaXAKLSMKLSMgQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05MjYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05UkwgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfQVQ5MVNBTTlHMjA9eQotIyBDT05GSUdfQVJDSF9BVDkxQ0FQOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFYNDAgaXMgbm90IHNldAotQ09ORklHX0FUOTFfUE1DX1VOSVQ9eQotCi0jCi0jIEFUOTFTQU05RzIwIEJvYXJkIFR5cGUKLSMKIENPTkZJR19NQUNIX0FUOTFTQU05RzIwRUs9eQotCi0jCi0jIEFUOTEgQm9hcmQgT3B0aW9ucwotIwotIyBDT05GSUdfTVREX0FUOTFfREFUQUZMQVNIX0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfQVRNRUxfQlVTV0lEVEhfMTYgaXMgbm90IHNldAotCi0jCi0jIEFUOTEgRmVhdHVyZSBTZWxlY3Rpb25zCi0jCiBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTPXkKLSMgQ09ORklHX0FUOTFfU0xPV19DTE9DSyBpcyBub3Qgc2V0Ci1DT05GSUdfQVQ5MV9USU1FUl9IWj0xMDAKLUNPTkZJR19BVDkxX0VBUkxZX0RCR1U9eQotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDAgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDEgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDIgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDMgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDQgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDUgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX0FSTTkyNlQ9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUSj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwogIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19MRURTPXkKIENPTkZJR19MRURTX0NQVT15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eVMwLDExNTIwMCBpbml0cmQ9MHgyMTEwMDAwMCwzMTQ1NzI4IHJvb3Q9L2Rldi9yYW0wIHJ3IgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRlAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwogQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotQ09ORklHX1NVU1BFTkQ9eQotIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKIENPTkZJR19NVERfREFUQUZMQVNIPXkKLSMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORD15Ci0jIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfQVRNRUw9eQotQ09ORklHX01URF9OQU5EX0FUTUVMX0VDQ19TT0ZUPXkKLSMgQ09ORklHX01URF9OQU5EX0FUTUVMX0VDQ19IVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9BVE1FTF9FQ0NfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci1DT05GSUdfQVRNRUxfUFdNPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfQVRNRUxfU1NDPXkKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiBDT05GSUdfU0NTSV9NVUxUSV9MVU49eQotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKIENPTkZJR19NQUNCPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0zMjAKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT0yNDAKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfR1BJTz15CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9BVE1FTD15CiBDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTE2Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwogQ09ORklHX1NQST15Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKIENPTkZJR19TUElfQVRNRUw9eQotIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCi0jIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0CiBDT05GSUdfU1BJX1NQSURFVj15Ci0jIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0KLSMKLSMgU291bmQKLSMKIENPTkZJR19TT1VORD15Ci0KLSMKLSMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCi0jCiBDT05GSUdfU05EPXkKLUNPTkZJR19TTkRfVElNRVI9eQotQ09ORklHX1NORF9QQ009eQogQ09ORklHX1NORF9TRVFVRU5DRVI9eQotIyBDT05GSUdfU05EX1NFUV9EVU1NWSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX09TU0VNVUw9eQogQ09ORklHX1NORF9NSVhFUl9PU1M9eQogQ09ORklHX1NORF9QQ01fT1NTPXkKLUNPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKIENPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15Ci0jIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQogIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIEdlbmVyaWMgZGV2aWNlcwotIwotIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WSVJNSURJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKLQotIwotIyBBTFNBIEFSTSBkZXZpY2VzCi0jCi0jIENPTkZJR19TTkRfQVQ5MV9BQzk3IGlzIG5vdCBzZXQKLQotIwotIyBTUEkgZGV2aWNlcwotIwogQ09ORklHX1NORF9BVDczQzIxMz15Ci1DT05GSUdfU05EX0FUNzNDMjEzX1RBUkdFVF9CSVRSQVRFPTQ4MDAwCi0KLSMKLSMgVVNCIGRldmljZXMKLSMKLSMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1VTQl9DQUlBUSBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIG9uIENoaXAgYXVkaW8gc3VwcG9ydAotIwotIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29DIEF1ZGlvIHN1cHBvcnQgZm9yIFN1cGVySAotIwotCi0jCi0jIE9wZW4gU291bmQgU3lzdGVtCi0jCi0jIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRkYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRVJTSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKLUNPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERTTCBtb2RlbSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCitDT05GSUdfVVNCX09IQ0lfSENEPXkKK0NPTkZJR19VU0JfU1RPUkFHRT15CiBDT05GSUdfVVNCX0dBREdFVD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX0FUOTE9eQotQ09ORklHX1VTQl9BVDkxPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfWkVSTz1tCi0jIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VURlM9bQogQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR19TRVJJQUw9bQotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKLSMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0FUOTE9eQotIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfTU1DX0FUOTE9bQogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKLQotIwotIyBMRUQgZHJpdmVycwotIwotQ09ORklHX0xFRFNfQVRNRUxfUFdNPXkKIENPTkZJR19MRURTX0dQSU89eQotCi0jCi0jIExFRCBUcmlnZ2VycwotIwogQ09ORklHX0xFRFNfVFJJR0dFUlM9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCiBDT05GSUdfUlRDX0RSVl9BVDkxU0FNOT15Ci1DT05GSUdfUlRDX0RSVl9BVDkxU0FNOV9SVFQ9MAotQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTlfR1BCUj0wCi0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfU1VNTUFSWT15Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAogQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xNT15Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogQ09ORklHX05MU19VVEY4PXkKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlNUUlVNRU5UQVRJT04gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOXJsZWtfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOXJsZWtfZGVmY29uZmlnCmluZGV4IDkwZTQ4YmYuLjc1NjIxZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTlybGVrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05cmxla19kZWZjb25maWcKQEAgLTEsOTQ2ICsxLDg0IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM3Ci0jIFR1ZSBKYW4gIDggMjI6MjQ6MTQgMjAwOAotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci0jIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUyBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfQVQ5MT15Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCi0KLSMKLSMgQXRtZWwgQVQ5MSBTeXN0ZW0tb24tQ2hpcAotIwotIyBDT05GSUdfQVJDSF9BVDkxUk05MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05MjYzIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0FUOTFTQU05Ukw9eQotIyBDT05GSUdfQVJDSF9BVDkxWDQwIGlzIG5vdCBzZXQKLUNPTkZJR19BVDkxX1BNQ19VTklUPXkKLQotIwotIyBBVDkxU0FNOVJMIEJvYXJkIFR5cGUKLSMKIENPTkZJR19NQUNIX0FUOTFTQU05UkxFSz15Ci0KLSMKLSMgQVQ5MSBCb2FyZCBPcHRpb25zCi0jCi0KLSMKLSMgQVQ5MSBGZWF0dXJlIFNlbGVjdGlvbnMKLSMKIENPTkZJR19BVDkxX1BST0dSQU1NQUJMRV9DTE9DS1M9eQotIyBDT05GSUdfQVRNRUxfVENMSUIgaXMgbm90IHNldAotQ09ORklHX0FUOTFfVElNRVJfSFo9MTAwCi0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTI2VD15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXQj15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCiAjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4gaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEwMAotIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eVMwLDExNTIwMCBpbml0cmQ9MHgyMTEwMDAwMCwxNzEwNTM2MyByb290PS9kZXYvcmFtMCBydyIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi0jIENPTkZJR19QQUNLRVQgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKIENPTkZJR19NVERfREFUQUZMQVNIPXkKLSMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORD15Ci0jIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfQVRNRUw9eQotIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9NAogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MjQ1NzYKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogQ09ORklHX0FUTUVMX1NTQz15Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0zMjAKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT0yNDAKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAogQ09ORklHX1RPVUNIU0NSRUVOX0FUTUVMX1RTQURDQz15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9VQ0IxNDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKIENPTkZJR19TRVJJQUxfQVRNRUw9eQogQ09ORklHX1NFUklBTF9BVE1FTF9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9BVE1FTF9UVFlBVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotQ09ORklHX0kyQ19BTEdPQklUPXkKLSMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKIENPTkZJR19JMkNfR1BJTz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQ0EgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwogQ09ORklHX1NQST15Ci0jIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NQSV9NQVNURVI9eQotCi0jCi0jIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCi0jCiBDT05GSUdfU1BJX0FUTUVMPXkKLSMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUHJvdG9jb2wgTWFzdGVycwotIwotIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKIENPTkZJR19XQVRDSERPR19OT1dBWU9VVD15Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX0FUOTFTQU05WF9XQVRDSERPRz15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9TMUQxNTYwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQVRNRUw9eQotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR08gaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKLSMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0FUOTE9eQotIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CitDT05GSUdfTU1DX0FUOTE9bQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX0FUOTFTQU05PXkKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMTU9eQotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfVVRGOD15Ci1DT05GSUdfSU5TVFJVTUVOVEFUSU9OPXkKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQotIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXRlYjkyMDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdGViOTIwMF9kZWZjb25maWcKaW5kZXggNjMxNTUzNC4uMWIwZTlhMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdGViOTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdGViOTIwMF9kZWZjb25maWcKQEAgLTEsMTMxMSArMSwxMzEgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzMKLSMgU3VuIE1heSAgNyAxNjo1MzoxOCAyMDA2Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0hNRU09eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIworQ09ORklHX1BST0ZJTElORz15CitDT05GSUdfT1BST0ZJTEU9bQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCi0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0FUOTE9eQotQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMD15Ci0KLSMKLSMgQVQ5MVJNOTIwMCBJbXBsZW1lbnRhdGlvbnMKLSMKLQotIwotIyBBVDkxUk05MjAwIEJvYXJkIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMERLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQVQ5MVJNOTIwMEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ1NCMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ1NCNjM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ0FSTUVWQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0tCOTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9BVEVCOTIwMD15Ci0jIENPTkZJR19NQUNIX0tBRkEgaXMgbm90IHNldAotCi0jCi0jIEFUOTEgRmVhdHVyZSBTZWxlY3Rpb25zCi0jCi0jIENPTkZJR19BVDkxX1BST0dSQU1NQUJMRV9DTE9DS1MgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX0FSTTkyMFQ9eQotQ09ORklHX0NQVV8zMnY0PXkKLUNPTkZJR19DUFVfQUJSVF9FVjRUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVjRXVD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKIENPTkZJR19QQ0NBUkQ9bQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUE9bQotQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15Ci1DT05GSUdfUENNQ0lBX0lPQ1RMPXkKLQotIwotIyBQQy1jYXJkIGJyaWRnZXMKLSMKIENPTkZJR19BVDkxX0NGPW0KLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMDAKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSIiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCiBDT05GSUdfUE09eQotIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi0jIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0tFWT15CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKIENPTkZJR19CUklER0U9bQogQ09ORklHX1ZMQU5fODAyMVE9bQotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19MTEM9bQotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9bQotIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCi0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLSMgQ09ORklHX01URF9CTE9DSyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0JMT0NLX1JPPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQVQ5MV9EQVRBRkxBU0g9eQotIyBDT05GSUdfTVREX0FUOTFfREFUQUZMQVNIX0NBUkQgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD1tCi0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTkJEPW0KLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST1tCi1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9bQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfU1I9bQogQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKIENPTkZJR19DSFJfREVWX1NHPW0KLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKIENPTkZJR19TQ1NJX01VTFRJX0xVTj15Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwotIwotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgU0NTSSBhZGFwdGVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDTUNJQV9BSEExNTJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9GRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9OSU5KQV9TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9RTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1NZTTUzQzUwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CiBDT05GSUdfRFVNTVk9bQotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogQ09ORklHX1RVTj1tCi0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfREFWSUNPTV9QSFk9eQotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQogQ09ORklHX0FSTV9BVDkxX0VUSEVSPXkKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi1DT05GSUdfTkVUX1JBRElPPXkKLSMgQ09ORklHX05FVF9XSVJFTEVTU19SVE5FVExJTksgaXMgbm90IHNldAotCi0jCi0jIE9ic29sZXRlIFdpcmVsZXNzIGNhcmRzIHN1cHBvcnQgKHByZS04MDIuMTEpCi0jCi0jIENPTkZJR19TVFJJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfV0FWRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfTkVUV0FWRSBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgODAyLjExIEZyZXF1ZW5jeSBIb3BwaW5nIGNhcmRzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDTUNJQV9SQVlDUyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgODAyLjExYiBJU0EvUENJIGNhcmRzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0hFUk1FUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgODAyLjExYiBQY21jaWEvQ2FyZGJ1cyBjYXJkcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BSVJPX0NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9XTDM1MDEgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfV0lSRUxFU1M9eQotCi0jCi0jIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfVVNCTkVUPXkKK0NPTkZJR19VU0JfTkVUX0dMNjIwQT15CitDT05GSUdfVVNCX05FVF9QTFVTQj15CitDT05GSUdfVVNCX05FVF9STkRJU19IT1NUPXkKK0NPTkZJR19VU0JfQUxJX001NjMyPXkKK0NPTkZJR19VU0JfQU4yNzIwPXkKK0NPTkZJR19VU0JfRVBTT04yODg4PXkKIENPTkZJR19QUFA9bQotIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKIENPTkZJR19QUFBfQVNZTkM9bQogQ09ORklHX1BQUF9TWU5DX1RUWT1tCiBDT05GSUdfUFBQX0RFRkxBVEU9bQogQ09ORklHX1BQUF9CU0RDT01QPW0KLSMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKIENPTkZJR19QUFBPRT1tCi0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci1DT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQotQ09ORklHX01PVVNFX1BTMj15Ci0jIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci1DT05GSUdfU0VSSU9fTElCUFMyPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9BVE1FTD15CiBDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwotCi0jCi0jIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAotIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0Ci1DT05GSUdfQVQ5MV9TUEk9eQotQ09ORklHX0FUOTFfU1BJREVWPXkKLQotIwotIyBJMkMgc3VwcG9ydAotIwogQ09ORklHX0kyQz1tCiBDT05GSUdfSTJDX0NIQVJERVY9bQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi1DT05GSUdfSTJDX0FMR09CSVQ9bQotQ09ORklHX0kyQ19BTEdPUENGPW0KLUNPTkZJR19JMkNfQUxHT1BDQT1tCi0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCiBDT05GSUdfSTJDX0dQSU89bQotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCi0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCi1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BU0IxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GU0NIRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GU0NQT1MgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIExFRCBkZXZpY2VzCi0jCi0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLQotIwotIyBTb3VuZAotIwogQ09ORklHX1NPVU5EPXkKLQotIwotIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKLSMKLSMgQ09ORklHX1NORCBpcyBub3Qgc2V0Ci0KLSMKLSMgT3BlbiBTb3VuZCBTeXN0ZW0KLSMKLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIwotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSElEPW0KK0NPTkZJR19ISURfUElEPXkKK0NPTkZJR19VU0JfSElEREVWPXkKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLSMgQ09ORklHX1VTQl9CQU5EV0lEVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKIENPTkZJR19VU0JfQUNNPW0KIENPTkZJR19VU0JfUFJJTlRFUj1tCi0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKIENPTkZJR19VU0JfU1RPUkFHRT1tCi0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQj15Ci1DT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTT15Ci1DT05GSUdfVVNCX1NUT1JBR0VfRFBDTT15Ci1DT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQ9eQotQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOT15Ci1DT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1PXkKLUNPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVD15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9bQotQ09ORklHX1VTQl9ISURJTlBVVD15Ci0jIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfRkY9eQotQ09ORklHX0hJRF9QSUQ9eQotQ09ORklHX0xPR0lURUNIX0ZGPXkKLUNPTkZJR19USFJVU1RNQVNURVJfRkY9eQotQ09ORklHX1VTQl9ISURERVY9eQotCi0jCi0jIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XQUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotQ09ORklHX1VTQl9VU0JORVQ9eQotQ09ORklHX1VTQl9ORVRfQVg4ODE3WD15Ci1DT05GSUdfVVNCX05FVF9DRENFVEhFUj15Ci1DT05GSUdfVVNCX05FVF9HTDYyMEE9eQotQ09ORklHX1VTQl9ORVRfTkVUMTA4MD15Ci1DT05GSUdfVVNCX05FVF9QTFVTQj15Ci1DT05GSUdfVVNCX05FVF9STkRJU19IT1NUPXkKLUNPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVQ9eQotQ09ORklHX1VTQl9BTElfTTU2MzI9eQotQ09ORklHX1VTQl9BTjI3MjA9eQotQ09ORklHX1VTQl9CRUxLSU49eQotQ09ORklHX1VTQl9BUk1MSU5VWD15Ci1DT05GSUdfVVNCX0VQU09OMjg4OD15Ci1DT05GSUdfVVNCX05FVF9aQVVSVVM9eQotIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj15Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKK0NPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCPW0KK0NPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NPW0KK0NPTkZJR19VU0JfU1RPUkFHRV9VU0JBVD1tCitDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5PW0KK0NPTkZJR19VU0JfU1RPUkFHRV9TRERSNTU9bQorQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UPW0KIENPTkZJR19VU0JfU0VSSUFMPW0KIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUM9eQotIyBDT05GSUdfVVNCX1NFUklBTF9BSVJQUklNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0FOWURBVEEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQgaXMgbm90IHNldAotQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTAxPW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0VNUEVHIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPPW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfRlVOU09GVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSVBBUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9USSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lQVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tMU0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX05BVk1BTiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDM9bQotIyBDT05GSUdfVVNCX1NFUklBTF9IUDRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU0FGRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1RJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVRLSVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVRTRVJWTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwogQ09ORklHX1VTQl9HQURHRVQ9bQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15Ci0jIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVRfQVQ5MT15Ci1DT05GSUdfVVNCX0FUOTE9bQotIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAogQ09ORklHX1VTQl9FVEg9bQotQ09ORklHX1VTQl9FVEhfUk5ESVM9eQogQ09ORklHX1VTQl9HQURHRVRGUz1tCiBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRT1tCi0jIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX1VTQl9HX1NFUklBTD1tCi0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwogQ09ORklHX01NQz1tCiBDT05GSUdfTU1DX0RFQlVHPXkKLUNPTkZJR19NTUNfQkxPQ0s9bQotQ09ORklHX01NQ19BVDkxUk05MjAwPW0KLQotIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQogIyBDT05GSUdfUlRDX0hDVE9TWVMgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0KLSMKLSMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9BVDkxUk05MjAwPXkKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz1tCi0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPW0KLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotQ09ORklHX0pCRD1tCi0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9bQogQ09ORklHX1JFSVNFUkZTX0ZTPW0KLSMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwogQ09ORklHX0lTTzk2NjBfRlM9bQogQ09ORklHX0pPTElFVD15CiBDT05GSUdfWklTT0ZTPXkKLUNPTkZJR19aSVNPRlNfRlM9bQogQ09ORklHX1VERl9GUz1tCi1DT05GSUdfVURGX05MUz15Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz1tCiBDT05GSUdfTVNET1NfRlM9bQogQ09ORklHX1ZGQVRfRlM9bQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgogQ09ORklHX05URlNfRlM9bQotIyBDT05GSUdfTlRGU19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTlRGU19SVz15Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCiBDT05GSUdfTkZTX0ZTPW0KIENPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WM19BQ0w9eQogQ09ORklHX05GU19WND15Ci1DT05GSUdfTkZTX0RJUkVDVElPPXkKIENPTkZJR19ORlNEPW0KLUNPTkZJR19ORlNEX1YzPXkKLSMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNEX1Y0PXkKLUNPTkZJR19ORlNEX1RDUD15Ci1DT05GSUdfTE9DS0Q9bQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19FWFBPUlRGUz1tCi1DT05GSUdfTkZTX0FDTF9TVVBQT1JUPW0KLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9bQotQ09ORklHX1NVTlJQQ19HU1M9bQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT1tCi0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAogQ09ORklHX01BQ19QQVJUSVRJT049eQotQ09ORklHX01TRE9TX1BBUlRJVElPTj15CiBDT05GSUdfQlNEX0RJU0tMQUJFTD15CiBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OPXkKIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT049eQogQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTD15Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz1tCi1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0FTQ0lJPW0KLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfVVRGOD1tCi0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLUNPTkZJR19QUk9GSUxJTkc9eQotQ09ORklHX09QUk9GSUxFPW0KLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotQ09ORklHX0NSWVBUTz15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz1tCi0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BRVM9bQotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQVJDND1tCi0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KIENPTkZJR19DUkMxNj1tCi1DT05GSUdfQ1JDMzI9eQogQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9bQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9iYWRnZTRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9iYWRnZTRfZGVmY29uZmlnCmluZGV4IGIxNzViNmIuLjNhMWFkMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYmFkZ2U0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2JhZGdlNF9kZWZjb25maWcKQEAgLTEsMTI0MiArMSwxMjIgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzYtZ2l0MwotIyBUaHUgSnVuICA5IDE5OjAwOjUwIDIwMDUKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX01NVT15Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0lPTUFQPXkKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19TV0FQPXkKLSMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TQTExMDA9eQotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLQotIwotIyBTQTExeDAgSW1wbGVtZW50YXRpb25zCi0jCi0jIENPTkZJR19TQTExMDBfQVNTQUJFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfQ0VSRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfQ09MTElFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9IMzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSDM2MDAgaXMgbm90IHNldAogQ09ORklHX1NBMTEwMF9CQURHRTQ9eQotIyBDT05GSUdfU0ExMTAwX0pPUk5BREE3MjAgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0hBQ0tLSVQgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0xBUlQgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX1BMRUIgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX1NIQU5OT04gaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX1NJTVBBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfU1NQIGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9TQTExMDA9eQotQ09ORklHX0NQVV8zMnY0PXkKLUNPTkZJR19DUFVfQUJSVF9FVjQ9eQotQ09ORklHX0NQVV9DQUNIRV9WNFdCPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19TQTExMTE9eQotQ09ORklHX0RNQUJPVU5DRT15Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj05Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLUNPTkZJR19JU0E9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0RJU0NPTlRJR01FTT15Ci0jIENPTkZJR19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJpbml0PS9saW51eHJjIHJvb3Q9L2Rldi9tdGRibG9jazMiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKLSMKLUNPTkZJR19DUFVfRlJFUT15Ci1DT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQotIyBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0NQVV9GUkVRX1NUQVQ9eQotIyBDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0U9eQogQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRT15Ci0jIENPTkZJR19DUFVfRlJFUV9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPXkKLSMgQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9TQTExMDA9eQotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQogQ09ORklHX0JJTkZNVF9BT1VUPW0KIENPTkZJR19CSU5GTVRfTUlTQz1tCiBDT05GSUdfQVJUSFVSPW0KLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKLUNPTkZJR19NVEQ9eQotQ09ORklHX01URF9ERUJVRz15Ci1DT05GSUdfTVREX0RFQlVHX1ZFUkJPU0U9MAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQotQ09ORklHX01URF9DRklfTk9TV0FQPXkKLSMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotIyBDT05GSUdfTVREX0NGSV9JMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotQ09ORklHX01URF9SQU09eQotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1NBMTEwMD15Ci0jIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1BBUlBPUlQ9bQotIyBDT05GSUdfUEFSUE9SVF9QQyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFSUE9SVF9OT1RfUEM9eQotIyBDT05GSUdfUEFSUE9SVF9BUkMgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVF9HU0MgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVF8xMjg0IGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUCBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0RFVl9YRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJJREUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX05CRD1tCi0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIwotQ09ORklHX0lERT1tCi1DT05GSUdfQkxLX0RFVl9JREU9bQotCi0jCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPW0KLSMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVDRD1tCi0jIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRkxPUFBZPW0KLUNPTkZJR19CTEtfREVWX0lERVNDU0k9bQotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLUNPTkZJR19JREVfR0VORVJJQz1tCi0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9DSElQU0VUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwotQ09ORklHX0JMS19ERVZfU0Q9eQotQ09ORklHX0NIUl9ERVZfU1Q9bQotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1NSPW0KLSMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKLUNPTkZJR19DSFJfREVWX1NHPXkKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TQ1NJXzcwMDBGQVNTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FIQTE1MlggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSEExNTQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTjIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EVEMzMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0VORVJJQ19OQ1I1MzgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0VORVJJQ19OQ1I1MzgwX01NSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QUEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTU0gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OQ1I1M0M0MDZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUEFTMTYgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QU0kyNDBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDX0ZBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzQxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1QxMjggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9VMTRfMzRGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCi0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBOZXR3b3JraW5nIHN1cHBvcnQKLSMKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lQX1RDUERJQUc9eQotIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKIENPTkZJR19JUkRBPXkKLQotIwotIyBJckRBIHByb3RvY29scwotIwogQ09ORklHX0lSTEFOPXkKIENPTkZJR19JUkNPTU09eQogQ09ORklHX0lSREFfVUxUUkE9eQotCi0jCi0jIElyREEgb3B0aW9ucwotIwotIyBDT05GSUdfSVJEQV9DQUNIRV9MQVNUX0xTQVAgaXMgbm90IHNldAotIyBDT05GSUdfSVJEQV9GQVNUX1JSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREFfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIEluZnJhcmVkLXBvcnQgZGV2aWNlIGRyaXZlcnMKLSMKLQotIwotIyBTSVIgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0lSVFRZX1NJUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRG9uZ2xlIHN1cHBvcnQKLSMKLQotIwotIyBPbGQgU0lSIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19JUlBPUlRfU0lSIGlzIG5vdCBzZXQKLQotIwotIyBPbGQgU2VyaWFsIGRvbmdsZSBzdXBwb3J0Ci0jCi0KLSMKLSMgRklSIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUdNQVRFTF9GSVIgaXMgbm90IHNldAotIyBDT05GSUdfTlNDX0ZJUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU5CT05EX0ZJUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUNfSVJDQ19GSVIgaXMgbm90IHNldAotIyBDT05GSUdfQUxJX0ZJUiBpcyBub3Qgc2V0CiBDT05GSUdfU0ExMTAwX0ZJUj15Ci0jIENPTkZJR19WSUFfRklSIGlzIG5vdCBzZXQKIENPTkZJR19CVD1tCiBDT05GSUdfQlRfTDJDQVA9bQotIyBDT05GSUdfQlRfU0NPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX1JGQ09NTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9CTkVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hJRFAgaXMgbm90IHNldAotCi0jCi0jIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycwotIwotQ09ORklHX0JUX0hDSVVTQj1tCi0jIENPTkZJR19CVF9IQ0lVU0JfU0NPIGlzIG5vdCBzZXQKIENPTkZJR19CVF9IQ0lVQVJUPW0KLSMgQ09ORklHX0JUX0hDSVVBUlRfSDQgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJVUFSVF9CQ1NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJDTTIwM1ggaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQlBBMTBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJGVVNCIGlzIG5vdCBzZXQKIENPTkZJR19CVF9IQ0lWSENJPW0KKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKK0NPTkZJR19NVERfREVCVUc9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMT0NLPXkKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKK0NPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKKyMgQ09ORklHX01URF9DRklfSTIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorQ09ORklHX01URF9SQU09eQorQ09ORklHX01URF9TQTExMDA9eQorQ09ORklHX1BBUlBPUlQ9bQorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9OQkQ9bQorQ09ORklHX0lERT1tCitDT05GSUdfQkxLX0RFVl9JREVDRD1tCitDT05GSUdfU0NTST15CitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD1tCitDT05GSUdfQkxLX0RFVl9TUj1tCitDT05GSUdfQ0hSX0RFVl9TRz15CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIEFSQ25ldCBkZXZpY2VzCi0jCi0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIwotIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19NSUk9bQotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi1DT05GSUdfTkVUX1JBRElPPXkKLQotIwotIyBPYnNvbGV0ZSBXaXJlbGVzcyBjYXJkcyBzdXBwb3J0IChwcmUtODAyLjExKQotIwotIyBDT05GSUdfU1RSSVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJMQU4gaXMgbm90IHNldAotIyBDT05GSUdfV0FWRUxBTiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgODAyLjExYiBJU0EvUENJIGNhcmRzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfV0lSRUxFU1M9eQotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUExJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX1NBMTEwMD15Ci1DT05GSUdfU0VSSUFMX1NBMTEwMF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBBUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVBNSQotIwotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX1NPRlRfV0FUQ0hET0c9bQotQ09ORklHX1NBMTEwMF9XQVRDSERPRz1tCi0KLSMKLSMgSVNBLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19QQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JWENPTVdEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19SVEM9bQotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCi0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLQotIwotIyBJMkMgc3VwcG9ydAotIwotQ09ORklHX0kyQz1tCi1DT05GSUdfSTJDX0NIQVJERVY9bQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi1DT05GSUdfSTJDX0FMR09CSVQ9bQotQ09ORklHX0kyQ19BTEdPUENGPW0KLSMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLUNPTkZJR19JMkNfRUxFS1RPUj1tCi0jIENPTkZJR19JMkNfUEFSUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgU2Vuc29ycyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQ19TRU5TT1IgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotQ09ORklHX1ZJREVPX0RFVj15Ci0KLSMKLSMgVmlkZW8gRm9yIExpbnV4Ci0jCi0KLSMKLSMgVmlkZW8gQWRhcHRlcnMKLSMKLSMgQ09ORklHX1ZJREVPX1BNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19CV1FDQU0gaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fQ1FDQU0gaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fQ1BJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19TQUE1MjQ2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19TQUE1MjQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTkVSXzMwMzYgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1ZDQU1DSElQIGlzIG5vdCBzZXQKLQotIwotIyBSYWRpbyBBZGFwdGVycwotIwotIyBDT05GSUdfUkFESU9fQ0FERVQgaXMgbm90IHNldAotIyBDT05GSUdfUkFESU9fUlRSQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX1JUUkFDSzIgaXMgbm90IHNldAotIyBDT05GSUdfUkFESU9fQVpURUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX0dFTVRFSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQURJT19NQUVTVFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX1NGMTZGTUkgaXMgbm90IHNldAotIyBDT05GSUdfUkFESU9fU0YxNkZNUjIgaXMgbm90IHNldAotIyBDT05GSUdfUkFESU9fVEVSUkFURUMgaXMgbm90IHNldAotIyBDT05GSUdfUkFESU9fVFJVU1QgaXMgbm90IHNldAotIyBDT05GSUdfUkFESU9fVFlQSE9PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQURJT19aT0xUUklYIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotQ09ORklHX1NPVU5EPXkKLQotIwotIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKLSMKLSMgQ09ORklHX1NORCBpcyBub3Qgc2V0Ci0KLSMKLSMgT3BlbiBTb3VuZCBTeXN0ZW0KLSMKLUNPTkZJR19TT1VORF9QUklNRT15Ci0jIENPTkZJR19TT1VORF9CVDg3OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9GVVNJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfQ1M0MjgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1NPTklDVklCRVMgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9NU05EQ0xBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9NU05EUElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9UVk1JWEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0FEMTk4MCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVCVUc9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKLUNPTkZJR19VU0JfREVWSUNFRlM9eQotIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi1DT05GSUdfVVNCX0FVRElPPXkKLQotIwotIyBVU0IgQmx1ZXRvb3RoIFRUWSBjYW4gb25seSBiZSB1c2VkIHdpdGggZGlzYWJsZWQgQmx1ZXRvb3RoIHN1YnN5c3RlbQotIwotIyBDT05GSUdfVVNCX01JREkgaXMgbm90IHNldAotQ09ORklHX1VTQl9BQ009bQotQ09ORklHX1VTQl9QUklOVEVSPW0KLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKLUNPTkZJR19VU0JfU1RPUkFHRT15Ci1DT05GSUdfVVNCX1NUT1JBR0VfREVCVUc9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwotIwotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLUNPTkZJR19VU0JfTURDODAwPW0KLUNPTkZJR19VU0JfTUlDUk9URUs9bQotCi0jCi0jIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKLSMKLUNPTkZJR19VU0JfREFCVVNCPW0KLUNPTkZJR19VU0JfVklDQU09bQotQ09ORklHX1VTQl9EU0JSPW0KLUNPTkZJR19VU0JfSUJNQ0FNPW0KLUNPTkZJR19VU0JfS09OSUNBV0M9bQotQ09ORklHX1VTQl9PVjUxMT1tCi1DT05GSUdfVVNCX1NFNDAxPW0KLSMgQ09ORklHX1VTQl9TTjlDMTAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVFY2ODAgaXMgbm90IHNldAotQ09ORklHX1VTQl9QV0M9bQotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCiBDT05GSUdfVVNCX0NBVEM9bQogQ09ORklHX1VTQl9LQVdFVEg9bQogQ09ORklHX1VTQl9QRUdBU1VTPW0KLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfVVNCTkVUPW0KLQotIwotIyBVU0IgSG9zdC10by1Ib3N0IENhYmxlcwotIwogQ09ORklHX1VTQl9BTElfTTU2MzI9eQogQ09ORklHX1VTQl9BTjI3MjA9eQotQ09ORklHX1VTQl9CRUxLSU49eQotQ09ORklHX1VTQl9HRU5FU1lTPXkKLUNPTkZJR19VU0JfTkVUMTA4MD15Ci1DT05GSUdfVVNCX1BMMjMwMT15Ci1DT05GSUdfVVNCX0tDMjE5MD15Ci0KLSMKLSMgSW50ZWxsaWdlbnQgVVNCIERldmljZXMvR2FkZ2V0cwotIwotQ09ORklHX1VTQl9BUk1MSU5VWD15CiBDT05GSUdfVVNCX0VQU09OMjg4OD15Ci1DT05GSUdfVVNCX1pBVVJVUz15Ci1DT05GSUdfVVNCX0NEQ0VUSEVSPXkKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0tDMjE5MD15CisjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19WVCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX1NBMTEwMD15CitDT05GSUdfU0VSSUFMX1NBMTEwMF9DT05TT0xFPXkKK0NPTkZJR19JMkM9bQorQ09ORklHX0kyQ19DSEFSREVWPW0KK0NPTkZJR19JMkNfRUxFS1RPUj1tCitDT05GSUdfV0FUQ0hET0c9eQorQ09ORklHX1NPRlRfV0FUQ0hET0c9bQorQ09ORklHX1NBMTEwMF9XQVRDSERPRz1tCitDT05GSUdfU09VTkQ9eQorQ09ORklHX1NPVU5EX1BSSU1FPXkKK0NPTkZJR19VU0I9eQorQ09ORklHX1VTQl9ERUJVRz15CitDT05GSUdfVVNCX0RFVklDRUZTPXkKIENPTkZJR19VU0JfTU9OPXkKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCitDT05GSUdfVVNCX0FDTT1tCitDT05GSUdfVVNCX1BSSU5URVI9bQorQ09ORklHX1VTQl9TVE9SQUdFPXkKK0NPTkZJR19VU0JfU1RPUkFHRV9ERUJVRz15CitDT05GSUdfVVNCX01EQzgwMD1tCitDT05GSUdfVVNCX01JQ1JPVEVLPW0KIENPTkZJR19VU0JfVVNTNzIwPW0KLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCiBDT05GSUdfVVNCX1NFUklBTD1tCiBDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDPXkKLSMgQ09ORklHX1VTQl9TRVJJQUxfQUlSUFJJTUUgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOPW0KIENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVD1tCiBDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQ9bQotIyBDT05GSUdfVVNCX1NFUklBTF9DUDIxMDEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004IGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0VNUEVHPW0KIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPPW0KIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SPW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfSVBBUSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9JUj1tCiBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVD1tCi0jIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUX1RJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfR0FSTUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSVBXIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBPW0KIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU49bQotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX01QUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjhYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjhYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE4WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTlXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOVFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOVFJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0E0OVcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTQ5V0xDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0xTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tPQklMX1NDVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMj1tCiBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDM9bQotIyBDT05GSUdfVVNCX1NFUklBTF9IUDRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU0FGRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1RJIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSz1tCiBDT05GSUdfVVNCX1NFUklBTF9YSVJDT009bQogQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVD1tCi1DT05GSUdfVVNCX0VaVVNCPXkKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAogQ09ORklHX1VTQl9SSU81MDA9bQotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVRLSVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVRTRVJWTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEFUTS9EU0wgZHJpdmVycwotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPW0KLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9bQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPW0KLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT1tCi0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFhGUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JTklYX0ZTPW0KLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9bQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfU1lTRlM9eQotQ09ORklHX0RFVkZTX0ZTPXkKLUNPTkZJR19ERVZGU19NT1VOVD15Ci0jIENPTkZJR19ERVZGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLSMgQ09ORklHX0pGRlMyX0ZTX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfTk9SX0VDQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPW0KLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTUlOSVhfRlM9bQogQ09ORklHX05GU19GUz1tCiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9bQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19TVU5SUEM9bQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogQ09ORklHX1NNQl9GUz1tCi0jIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogQ09ORklHX0RFQlVHX1VTRVI9eQogQ09ORklHX0RFQlVHX0VSUk9SUz15CiBDT05GSUdfREVCVUdfTEw9eQotIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQ1JDX0NDSVRUPXkKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYmNtcmluZ19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2JjbXJpbmdfZGVmY29uZmlnCmluZGV4IDZhYzY2OTMuLjc1OTg0Y2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYmNtcmluZ19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9iY21yaW5nX2RlZmNvbmZpZwpAQCAtMSw4MDAgKzEsNzkgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC1yYzIKLSMgTW9uIE1hciAyOSAxMjowMTo0MSAyMDEwCi0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19IQVZFX1BST0NfQ1BVPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX05FRURfRE1BX01BUF9TVEFURT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKLUNPTkZJR19IQVZFX0tFUk5FTF9MWk89eQotQ09ORklHX0tFUk5FTF9HWklQPXkKLSMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVJORUxfTFpPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE3Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiAjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUdOQUxGRCBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUkZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0VWRU5URkQgaXMgbm90IHNldAotQ09ORklHX1NITUVNPXkKICMgQ09ORklHX0FJTyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci1DT05GSUdfUEVSRl9VU0VfVk1BTExPQz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLUNPTkZJR19QRVJGX0VWRU5UUz15CiBDT05GSUdfUEVSRl9DT1VOVEVSUz15CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTk9PUD15Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi1DT05GSUdfTU1VPXkKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0JDTVJJTkc9eQotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RPVkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OVUM5M1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hNT0JJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1M1UDY0NDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVA2NDQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1M1UFYyMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVTg1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GUEdBMTExMDcgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfQkNNMTExMDc9eQotCi0jCi0jIEJDTVJJTkcgT3B0aW9ucwotIwogQ09ORklHX0JDTV9aUkVMQUREUj0weDgwMDAKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9WNj15CiBDT05GSUdfQ1BVXzMydjZLPXkKLUNPTkZJR19DUFVfMzJ2Nj15Ci1DT05GSUdfQ1BVX0FCUlRfRVY2PXkKLUNPTkZJR19DUFVfUEFCUlRfVjY9eQotQ09ORklHX0NQVV9DQUNIRV9WNj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQotQ09ORklHX0NQVV9DT1BZX1Y2PXkKLUNPTkZJR19DUFVfVExCX1Y2PXkKLUNPTkZJR19DUFVfSEFTX0FTSUQ9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQotQ09ORklHX0NQVV9IQVNfUE1VPXkKLSMgQ09ORklHX0FSTV9FUlJBVEFfNDExOTIwIGlzIG5vdCBzZXQKLUNPTkZJR19DT01NT05fQ0xLREVWPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotQ09ORklHX0FSTV9BTUJBPXkKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLSMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQogIyBDT05GSUdfT0FCSV9DT01QQVQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUEVSRl9FVkVOVFM9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15CiBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWT15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwZTAwMDAwMAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwZWEwMDAwMAogQ09ORklHX1pCT09UX1JPTT15Ci1DT05GSUdfQ01ETElORT0iIgotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCi0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi0jIENPTkZJR19WRlAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotQ09ORklHX0hBVkVfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotIyBDT05GSUdfUEFDS0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVggaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQogQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQotQ09ORklHX01URF9DRklfTk9TV0FQPXkKLSMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQogIyBDT05GSUdfTVREX0NGSV9JMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORD15CiBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFPXkKLSMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfSURTPXkKIENPTkZJR19NVERfTkFORF9CQ01fVU1JPXkKIENPTkZJR19NVERfTkFORF9CQ01fVU1JX0hXQ1M9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0lfTU9EPXkKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQogIyBDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlMgaXMgbm90IHNldAotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9BTUJBX1BMMDEwIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMT15CiBDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTFfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTY0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GSUxFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRlNOT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOT1RJRllfVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKICMgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9TVU1NQVJZPXkKIENPTkZJR19KRkZTMl9GU19YQVRUUj15Ci1DT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX0pGRlMyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19IRUFERVJTX0NIRUNLPXkKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JVSUxEX0RPQ1NSQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19BUk1fVU5XSU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfT0NfRVRNIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jYW02MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NhbTYwX2RlZmNvbmZpZwppbmRleCBlZWYzM2RlLi5jZWRjOTJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NhbTYwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NhbTYwX2RlZmNvbmZpZwpAQCAtMSw1NTQgKzEsNzQgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNAotIyBUaHUgTWFyICA2IDEwOjA3OjI2IDIwMDgKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVD15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci1DT05GSUdfUkVMQVk9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFZFUlNJT05TPXkKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEPXkKLUNPTkZJR19CTEtfREVWX0lPX1RSQUNFPXkKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0FUOTE9eQotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIwotCi0jCi0jIEF0bWVsIEFUOTEgU3lzdGVtLW9uLUNoaXAKLSMKLSMgQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MD15Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05MjYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxU0FNOVJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MUNBUDkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxWDQwIGlzIG5vdCBzZXQKLUNPTkZJR19BVDkxX1BNQ19VTklUPXkKLQotIwotIyBBVDkxU0FNOTI2MCBWYXJpYW50cwotIwotIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MF9TQU05WEUgaXMgbm90IHNldAotCi0jCi0jIEFUOTFTQU05MjYwIC8gQVQ5MVNBTTlYRSBCb2FyZCBUeXBlCi0jCi0jIENPTkZJR19NQUNIX0FUOTFTQU05MjYwRUsgaXMgbm90IHNldAogQ09ORklHX01BQ0hfQ0FNNjA9eQotIyBDT05GSUdfTUFDSF9TQU05X0w5MjYwIGlzIG5vdCBzZXQKLQotIwotIyBBVDkxIEJvYXJkIE9wdGlvbnMKLSMKLQotIwotIyBBVDkxIEZlYXR1cmUgU2VsZWN0aW9ucwotIwotIyBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTIGlzIG5vdCBzZXQKLUNPTkZJR19BVDkxX1RJTUVSX0haPTEwMAotQ09ORklHX0FUOTFfRUFSTFlfREJHVT15Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUNSBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTI2VD15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXQj15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCi0jIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgyMDAwNDAwMAotIyBDT05GSUdfWkJPT1RfUk9NIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMCBub2luaXRyZCByb290PS9kZXYvbXRkYmxvY2swIHJvb3Rmc3R5cGU9amZmczIgbWVtPTY0TSIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKIENPTkZJR19CSU5GTVRfQU9VVD15CiBDT05GSUdfQklORk1UX01JU0M9eQotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19TRUNNQVJLPXkKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1NDSF9GSUZPPXkKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKIENPTkZJR19DRkc4MDIxMT1tCi1DT05GSUdfTkw4MDIxMT15Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19NQUM4MDIxMT1tCi1DT05GSUdfTUFDODAyMTFfUkNTSU1QTEU9eQotIyBDT05GSUdfTUFDODAyMTFfREVCVUdGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KLUNPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCi0jIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUkFNPW0KLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwogQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BMQVRSQU09bQotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwogQ09ORklHX01URF9EQVRBRkxBU0g9eQotIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEU9eQotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfQVRNRUw9eQotIyBDT05GSUdfTVREX05BTkRfQVRNRUxfRUNDX1NPRlQgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0FUTUVMX0VDQ19IVz15Ci0jIENPTkZJR19NVERfTkFORF9BVE1FTF9FQ0NfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15CiBDT05GSUdfU0NTSV9UR1Q9eQotQ09ORklHX1NDU0lfTkVUTElOSz15Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz15CiBDT05GSUdfQ0hSX0RFVl9TQ0g9eQotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPR0dJTkc9eQogQ09ORklHX1NDU0lfU0NBTl9BU1lOQz15Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwogQ09ORklHX1NDU0lfU1BJX0FUVFJTPW0KIENPTkZJR19TQ1NJX0ZDX0FUVFJTPW0KLSMgQ09ORklHX1NDU0lfRkNfVEdUX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTPW0KLUNPTkZJR19TQ1NJX1NBU19BVFRSUz1tCiBDT05GSUdfU0NTSV9TQVNfTElCU0FTPW0KICMgQ09ORklHX1NDU0lfU0FTX0xJQlNBU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCiBDT05GSUdfTUFSVkVMTF9QSFk9bQogQ09ORklHX0RBVklDT01fUEhZPW0KIENPTkZJR19RU0VNSV9QSFk9bQpAQCAtNTU3LDY3MSArNzcsOTggQEAKIENPTkZJR19WSVRFU1NFX1BIWT1tCiBDT05GSUdfU01TQ19QSFk9bQogQ09ORklHX0JST0FEQ09NX1BIWT1tCi0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLUNPTkZJR19GSVhFRF9QSFk9bQotIyBDT05GSUdfRklYRURfTUlJXzEwX0ZEWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9NSUlfMTAwX0ZEWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9NSUlfMTAwMF9GRFggaXMgbm90IHNldAotQ09ORklHX0ZJWEVEX01JSV9BTU5UPTEKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQogQ09ORklHX01BQ0I9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci1DT05GSUdfS0VZQk9BUkRfU1VOS0JEPW0KIENPTkZJR19LRVlCT0FSRF9MS0tCRD1tCi1DT05GSUdfS0VZQk9BUkRfWFRLQkQ9bQogQ09ORklHX0tFWUJPQVJEX05FV1RPTj1tCiBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVk9bQotIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQotQ09ORklHX01PVVNFX1BTMj15Ci1DT05GSUdfTU9VU0VfUFMyX0FMUFM9eQotQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQotQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQotQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSz15Ci1DT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQotIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9TVU5LQkQ9bQorQ09ORklHX0tFWUJPQVJEX1hUS0JEPW0KIENPTkZJR19NT1VTRV9TRVJJQUw9bQogQ09ORklHX01PVVNFX0FQUExFVE9VQ0g9bQogQ09ORklHX01PVVNFX1ZTWFhYQUE9bQotIyBDT05GSUdfTU9VU0VfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQogIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fTElCUFMyPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15CiBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQ9eQotIyBDT05GSUdfTU9YQV9TTUFSVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05fSERMQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SSVNDT004IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQRUNJQUxJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SSU8gaXMgbm90IHNldAotIyBDT05GSUdfU1RBTERSViBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX0FUTUVMPXkKIENPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfQVRNRUxfVFRZQVQgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi1DT05GSUdfSTJDX0FMR09CSVQ9eQotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCiBDT05GSUdfU1BJPXkKLSMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKIENPTkZJR19TUElfQVRNRUw9eQotIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCi0jIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci1DT05GSUdfVVNCX0RFVklDRV9DTEFTUz15Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0xJQlVTVUFMPXkKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15CiBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMPXkKIENPTkZJR19SVENfRFJWX1RFU1Q9bQotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX0FUOTFTQU05PXkKLUNPTkZJR19SVENfRFJWX0FUOTFTQU05X1JUVD0wCi1DT05GSUdfUlRDX0RSVl9BVDkxU0FNOV9HUEJSPTAKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQyX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKIENPTkZJR19RVU9UQT15Ci0jIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15Ci0jIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FGTVRfVjIgaXMgbm90IHNldAotQ09ORklHX1FVT1RBQ1RMPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19BVVRPRlNfRlM9eQogQ09ORklHX0FVVE9GUzRfRlM9eQotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfQ09ORklHRlNfRlM9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotQ09ORklHX1lBRkZTX0ZTPXkKLUNPTkZJR19ZQUZGU19ZQUZGUzE9eQotIyBDT05GSUdfWUFGRlNfOUJZVEVfVEFHUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZQUZGU19ET0VTX0VDQyBpcyBub3Qgc2V0Ci1DT05GSUdfWUFGRlNfWUFGRlMyPXkKLUNPTkZJR19ZQUZGU19BVVRPX1lBRkZTMj15Ci0jIENPTkZJR19ZQUZGU19ESVNBQkxFX0xBWllfTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZQUZGU19ESVNBQkxFX1dJREVfVE5PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lBRkZTX0FMV0FZU19DSEVDS19DSFVOS19FUkFTRUQgaXMgbm90IHNldAotQ09ORklHX1lBRkZTX1NIT1JUX05BTUVTX0lOX1JBTT15Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci1DT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iY3A0MzciCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAogQ09ORklHX05MU19BU0NJST15CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX1VURjg9eQotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOU1RSVU1FTlRBVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKIENPTkZJR19QUklOVEtfVElNRT15Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX1VOVVNFRF9TWU1CT0xTPXkKLUNPTkZJR19ERUJVR19GUz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19GT1JDRURfSU5MSU5JTkcgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JT19UUkFDRT15CiBDT05GSUdfREVCVUdfTEw9eQotIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BQkxLQ0lQSEVSPW0KLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19OVUxMPW0KK0NPTkZJR19DUllQVE9fQ1JZUFREPW0KK0NPTkZJR19DUllQVE9fVEVTVD1tCitDT05GSUdfQ1JZUFRPX0NCQz1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCitDT05GSUdfQ1JZUFRPX1BDQkM9bQogQ09ORklHX0NSWVBUT19ITUFDPXkKIENPTkZJR19DUllQVE9fWENCQz1tCi1DT05GSUdfQ1JZUFRPX05VTEw9bQotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KIENPTkZJR19DUllQVE9fU0hBMT15CiBDT05GSUdfQ1JZUFRPX1NIQTI1Nj15CiBDT05GSUdfQ1JZUFRPX1NIQTUxMj15Ci1DT05GSUdfQ1JZUFRPX1dQNTEyPW0KIENPTkZJR19DUllQVE9fVEdSMTkyPW0KLUNPTkZJR19DUllQVE9fR0YxMjhNVUw9bQotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9bQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLUNPTkZJR19DUllQVE9fTFJXPW0KLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19DUllQVEQ9bQotQ09ORklHX0NSWVBUT19ERVM9eQotQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQorQ09ORklHX0NSWVBUT19XUDUxMj1tCitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KLUNPTkZJR19DUllQVE9fU0VSUEVOVD1tCi1DT05GSUdfQ1JZUFRPX0FFUz1tCitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KIENPTkZJR19DUllQVE9fQ0FTVDU9bQogQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX1RFQT1tCi1DT05GSUdfQ1JZUFRPX0FSQzQ9bQorQ09ORklHX0NSWVBUT19ERVM9eQorQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQogQ09ORklHX0NSWVBUT19LSEFaQUQ9bQotQ09ORklHX0NSWVBUT19BTlVCSVM9bQotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCi1DT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KLUNPTkZJR19DUllQVE9fVEVTVD1tCi0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPW0KLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPW0KLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfQVVESVRfR0VORVJJQz15Ci1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jYXJtZXZhX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY2FybWV2YV9kZWZjb25maWcKaW5kZXggYjZhNzA2My4uYWM2NGRiZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jYXJtZXZhX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2Nhcm1ldmFfZGVmY29uZmlnCkBAIC0xLDcyMyArMSw0NyBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjNAotIyBUdWUgSnVuIDE0IDEyOjA1OjI0IDIwMDUKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX01NVT15Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0lPTUFQPXkKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19TV0FQPXkKLSMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfU1lTQ1RMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCi0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIworIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9BVDkxPXkKLUNPTkZJR19BUkNIX0FUOTFSTTkyMDA9eQotCi0jCi0jIEFUOTFSTTkyMDAgSW1wbGVtZW50YXRpb25zCi0jCi0jIENPTkZJR19BUkNIX0FUOTFSTTkyMDBESyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0FUOTFSTTkyMDBFSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NTQjMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NTQjYzNyBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9DQVJNRVZBPXkKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9BUk05MjBUPXkKLUNPTkZJR19DUFVfMzJ2ND15Ci1DT05GSUdfQ1BVX0FCUlRfRVY0VD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y0V1Q9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RJU0NPTlRJR01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSIiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKLUNPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwotQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0FUOTFfREFUQUZMQVNIPXkKLSMgQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJEIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29ya2luZyBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLSMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9UQ1BESUFHPXkKLSMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTE9DSz15CitDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15CiBDT05GSUdfQVJNX0FUOTFfRVRIRVI9eQotQ09ORklHX0FSTV9BVDkxX0VUSEVSX1JNSUk9eQotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiBDT05GSUdfU0VSSU89bQotQ09ORklHX1NFUklPX1NFUlBPUlQ9bQotIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfR0FNRVBPUlQ9eQotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKIENPTkZJR19TRVJJQUxfQVRNRUw9eQogQ09ORklHX1NFUklBTF9BVE1FTF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxUk05MjAwX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwotQ09ORklHX0FUOTFfU1BJPXkKLUNPTkZJR19BVDkxX1NQSURFVj15Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfRkIgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwogQ09ORklHX01NQz1tCiBDT05GSUdfTU1DX0RFQlVHPXkKLUNPTkZJR19NTUNfQkxPQ0s9bQotQ09ORklHX01NQ19BVDkxUk05MjAwPW0KLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBYRlMgc3VwcG9ydAotIwotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQVFNfRlNfWEFUVFI9eQotQ09ORklHX0RFVlBUU19GU19TRUNVUklUWT15Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTX0ZTPXkKLUNPTkZJR19KRkZTX0ZTX1ZFUkJPU0U9MAotQ09ORklHX0pGRlNfUFJPQ19GUz15CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19OQU5EPXkKLSMgQ09ORklHX0pGRlMyX0ZTX05PUl9FQ0MgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQotQ09ORklHX0pGRlMyX1pMSUI9eQotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKLSMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotQ09ORklHX05GU0Q9eQotIyBDT05GSUdfTkZTRF9WMyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTRF9UQ1A9eQogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX0VYUE9SVEZTPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLUNPTkZJR19DUllQVE89eQotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX05GU0Q9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jZXJmY3ViZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NlcmZjdWJlX2RlZmNvbmZpZwppbmRleCBkNjYyY2FiLi5kY2U5MTJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NlcmZjdWJlX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NlcmZjdWJlX2RlZmNvbmZpZwpAQCAtMSw5MDIgKzEsNzUgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCi0jIFN1biBNYXIgMjcgMTQ6MTk6NDAgMjAwNQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSU9NQVA9eQotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU0ExMTAwPXkKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0ExMXgwIEltcGxlbWVudGF0aW9ucwotIwotIyBDT05GSUdfU0ExMTAwX0FTU0FCRVQgaXMgbm90IHNldAogQ09ORklHX1NBMTEwMF9DRVJGPXkKLSMgQ09ORklHX1NBMTEwMF9DRVJGX0ZMQVNIXzhNQiBpcyBub3Qgc2V0CiBDT05GSUdfU0ExMTAwX0NFUkZfRkxBU0hfMTZNQj15Ci0jIENPTkZJR19TQTExMDBfQ0VSRl9GTEFTSF8zMk1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9DT0xMSUUgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0gzMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9IMzYwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfQkFER0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9KT1JOQURBNzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9IQUNLS0lUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9MQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9QTEVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9TSEFOTk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9TSU1QQUQgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX1NTUCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfU0ExMTAwPXkKLUNPTkZJR19DUFVfMzJ2ND15Ci1DT05GSUdfQ1BVX0FCUlRfRVY0PXkKLUNPTkZJR19DUFVfQ0FDSEVfVjRXQj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9UTEJfVjRXQj15Ci1DT05GSUdfQ1BVX01JTklDQUNIRT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLUNPTkZJR19JU0E9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKIENPTkZJR19QQ0NBUkQ9bQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUE9bQotCi0jCi0jIFBDLWNhcmQgYnJpZGdlcwotIwotIyBDT05GSUdfSTgyMzY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDSUMgaXMgbm90IHNldAogQ09ORklHX1BDTUNJQV9TQTExMDA9bQotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfRElTQ09OVElHTUVNPXkKIENPTkZJR19MRURTPXkKLUNPTkZJR19MRURTX1RJTUVSPXkKIENPTkZJR19MRURTX0NQVT15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQTAsMzg0MDAgcm9vdD0vZGV2L210ZGJsb2NrMyByb290ZnN0eXBlPWpmZnMyIHJ3IG1lbT0zMk0gaW5pdD0vbGludXhyYyIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotCi0jCi0jIENQVSBGcmVxdWVuY3kgc2NhbGluZwotIwotQ09ORklHX0NQVV9GUkVRPXkKLUNPTkZJR19DUFVfRlJFUV9UQUJMRT15Ci0jIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfU1RBVD15Ci0jIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFMgaXMgbm90IHNldAogQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFPXkKLSMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfR09WX1BFUkZPUk1BTkNFPXkKLSMgQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAogQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9bQotIyBDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9TQTExMTA9eQotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotIyBDT05GSUdfRlBFX05XRlBFIGlzIG5vdCBzZXQKIENPTkZJR19GUEVfRkFTVEZQRT15Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwogQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUE0gaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwotQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1BBUlRJVElPTlM9eQotQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKLUNPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwotQ09ORklHX01URF9DSEFSPW0KLUNPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi1DT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1NBMTEwMD15Ci0jIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QTlAgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9YRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD1tCi0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPW0KLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIwotQ09ORklHX0lERT15Ci1DT05GSUdfQkxLX0RFVl9JREU9eQotCi0jCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPW0KLSMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLQotIwotIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCi0jCi1DT05GSUdfSURFX0dFTkVSSUM9eQotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfQ0hJUFNFVFMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKIENPTkZJR19JUF9QTlBfUkFSUD15Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9UQ1BESUFHPXkKLSMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKK0NPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorQ09ORklHX01URF9DSEFSPW0KK0NPTkZJR19NVERfQkxPQ0s9eQorQ09ORklHX01URF9DRkk9eQorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorQ09ORklHX01URF9TQTExMDA9eQorQ09ORklHX0JMS19ERVZfTE9PUD1tCitDT05GSUdfQkxLX0RFVl9SQU09bQorQ09ORklHX0lERT15CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIEFSQ25ldCBkZXZpY2VzCi0jCi0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIwogQ09ORklHX05FVF9FVEhFUk5FVD15Ci0jIENPTkZJR19NSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBTkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX1JBQ0FMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUMTcwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVBDQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVNBIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKLSMgQ09ORklHX0FDMzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFJJQ09UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NTODl4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX1NBMTEwMD15CiBDT05GSUdfU0VSSUFMX1NBMTEwMF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKIENPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NBMTEwMF9XQVRDSERPRz1tCi0KLSMKLSMgSVNBLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19QQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JWENPTVdEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCi0jIENPTkZJR19EUk0gaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPW0KLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9bQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPW0KLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT1tCi0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfUk9NRlNfRlM9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPW0KIENPTkZJR19NU0RPU19GUz1tCiBDT05GSUdfVkZBVF9GUz1tCi1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19TWVNGUz15Ci0jIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLSMgQ09ORklHX0pGRlMyX0ZTX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfTk9SX0VDQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKK0NPTkZJR19ST01GU19GUz15CiBDT05GSUdfTkZTX0ZTPW0KIENPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAogQ09ORklHX05GU0Q9bQotQ09ORklHX05GU0RfVjM9eQogQ09ORklHX05GU0RfVjQ9eQotQ09ORklHX05GU0RfVENQPXkKLUNPTkZJR19MT0NLRD1tCi1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX0VYUE9SVEZTPW0KLUNPTkZJR19TVU5SUEM9bQotQ09ORklHX1NVTlJQQ19HU1M9bQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT1tCi0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKIENPTkZJR19TTUJfRlM9bQotIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCiBDT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT1tCi0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFQlVHX1VTRVI9eQogQ09ORklHX0RFQlVHX0VSUk9SUz15CiBDT05GSUdfREVCVUdfTEw9eQotIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLUNPTkZJR19DUllQVE89eQotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT1tCi0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9bQotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jbV90MzVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jbV90MzVfZGVmY29uZmlnCmluZGV4IDAzMmI0OWJhLi44YmIwNjMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NtX3QzNV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jbV90MzVfZGVmY29uZmlnCkBAIC0xLDE3MzIgKzEsMTU3IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM0Ci0jIFR1ZSBPY3QgMTMgMTc6MTA6NDAgMjAwOQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0FSQ0hfSEFTX0NQVUZSRVE9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE3Ci1DT05GSUdfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfVUlEMTY9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9DTEs9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RWRVJTSU9OUz15Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0ZSRUVaRVI9eQotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi1DT05GSUdfTU1VPXkKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVA9eQotIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKLQotIwotIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucwotIwotQ09ORklHX0FSQ0hfT01BUF9PVEc9eQotIyBDT05GSUdfQVJDSF9PTUFQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVAzPXkKLSMgQ09ORklHX0FSQ0hfT01BUDQgaXMgbm90IHNldAotCi0jCi0jIE9NQVAgRmVhdHVyZSBTZWxlY3Rpb25zCi0jCi0jIENPTkZJR19PTUFQX0RFQlVHX1BPV0VSRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfREVCVUdfQ0xPQ0tET01BSU4gaXMgbm90IHNldAogQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTPXkKLUNPTkZJR19PTUFQX01VWD15Ci0jIENPTkZJR19PTUFQX01VWF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9NVVhfV0FSTklOR1M9eQotQ09ORklHX09NQVBfTUNCU1A9eQotIyBDT05GSUdfT01BUF9NQk9YX0ZXSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX01QVV9USU1FUiBpcyBub3Qgc2V0CiBDT05GSUdfT01BUF8zMktfVElNRVI9eQotQ09ORklHX09NQVBfMzJLX1RJTUVSX0haPTEyOAogQ09ORklHX09NQVBfRE1fVElNRVI9eQotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzPXkKLSMgQ09ORklHX09NQVBfUE1fTk9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9QTV9OT09QPXkKLUNPTkZJR19BUkNIX09NQVAzNFhYPXkKIENPTkZJR19BUkNIX09NQVAzNDMwPXkKLQotIwotIyBPTUFQIEJvYXJkIFR5cGUKLSMKLSMgQ09ORklHX01BQ0hfT01BUDNfQkVBR0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9MRFAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PVkVSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVAzRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUDNfUEFORE9SQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfMzQzMFNEUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX05PS0lBX1JYNTEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX1pPT00yIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX0NNX1QzNT15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfMzJ2Nks9eQotQ09ORklHX0NQVV9WNz15Ci1DT05GSUdfQ1BVXzMydjc9eQotQ09ORklHX0NQVV9BQlJUX0VWNz15Ci1DT05GSUdfQ1BVX1BBQlJUX1Y3PXkKLUNPTkZJR19DUFVfQ0FDSEVfVjc9eQotQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKLUNPTkZJR19DUFVfQ09QWV9WNj15Ci1DT05GSUdfQ1BVX1RMQl9WNz15Ci1DT05GSUdfQ1BVX0hBU19BU0lEPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQVJNX1RIVU1CRUUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFTX1RMU19SRUc9eQotQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD02Ci0jIENPTkZJR19BUk1fRVJSQVRBXzQzMDk3MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUk1fRVJSQVRBXzQ1ODY5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUk1fRVJSQVRBXzQ2MDA3NSBpcyBub3Qgc2V0Ci1DT05GSUdfQ09NTU9OX0NMS0RFVj15Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMjgKLSMgQ09ORklHX1RIVU1CMl9LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTAKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLSMgQ09ORklHX0xFRFMgaXMgbm90IHNldAotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLSMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0iIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKIENPTkZJR19WRlA9eQotQ09ORklHX1ZGUHYzPXkKIENPTkZJR19ORU9OPXkKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9NSVNDPXkKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkQ9eQotQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15Ci0jIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19QTV9SVU5USU1FPXkKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0tFWT15Ci0jIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15CiBDT05GSUdfSVBfUE5QX1JBUlA9eQotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15Ci1DT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKIENPTkZJR19MSUI4MDIxMT1tCi0jIENPTkZJR19MSUI4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9bQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci0jIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTUFQX05PUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfT01BUDI9eQotQ09ORklHX01URF9OQU5EX09NQVBfUFJFRkVUQ0g9eQotIyBDT05GSUdfTVREX05BTkRfT01BUF9QUkVGRVRDSF9ETUEgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogQ09ORklHX1NNU0M5MTFYPXkKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOXzgwMjExPXkKLUNPTkZJR19MSUJFUlRBUz1tCi0jIENPTkZJR19MSUJFUlRBU19VU0IgaXMgbm90IHNldAotQ09ORklHX0xJQkVSVEFTX1NESU89bQotIyBDT05GSUdfTElCRVJUQVNfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkVSVEFTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0Ci1DT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xNODMyMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9UV0w0MDMwPW0KLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQogQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDY9bQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NQ1M1MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0zMgotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKIENPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQogQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQogQ09ORklHX1NFUklBTF84MjUwX1JTQT15Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogQ09ORklHX0kyQ19PTUFQPXkKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogQ09ORklHX1NQST15Ci0jIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NQSV9NQVNURVI9eQotCi0jCi0jIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfU1BJX09NQVAyNFhYPXkKLQotIwotIyBTUEkgUHJvdG9jb2wgTWFzdGVycwotIwotIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR1BJT19TWVNGUz15Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CiBDT05GSUdfR1BJT19UV0w0MDMwPXkKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKLQotIwotIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKIENPTkZJR19XQVRDSERPR19OT1dBWU9VVD15Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX09NQVBfV0FUQ0hET0c9eQotIyBDT05GSUdfVFdMNDAzMF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKIENPTkZJR19UV0w0MDMwX0NPUkU9eQotIyBDT05GSUdfVFdMNDAzMF9QT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogQ09ORklHX1JFR1VMQVRPUj15Ci0jIENPTkZJR19SRUdVTEFUT1JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfTUFYMTU4NiBpcyBub3Qgc2V0CiBDT05GSUdfUkVHVUxBVE9SX1RXTDQwMzA9eQotIyBDT05GSUdfUkVHVUxBVE9SX0xQMzk3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwMjMgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfTU9OVEVSRVkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9QQU5USEVSTE9SRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUEVUQUxZTlggaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVNQRU5EPXkKLUNPTkZJR19VU0JfT1RHPXkKICMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15Ci0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTVVTQl9IRFJDPXkKLUNPTkZJR19VU0JfTVVTQl9TT0M9eQotCi0jCi0jIE9NQVAgMzQzeCBoaWdoIHNwZWVkIFVTQiBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfTVVTQl9IT1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX1BFUklQSEVSQUwgaXMgbm90IHNldAogQ09ORklHX1VTQl9NVVNCX09URz15CiBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkM9eQotQ09ORklHX1VTQl9NVVNCX0hEUkNfSENEPXkKLSMgQ09ORklHX01VU0JfUElPX09OTFkgaXMgbm90IHNldAotQ09ORklHX1VTQl9JTlZFTlRSQV9ETUE9eQotIyBDT05GSUdfVVNCX1RJX0NQUElfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0KLSMKLSMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KLSMKIENPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogQ09ORklHX1VTQl9URVNUPXkKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCi1DT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQotIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfRVRIPXkKLUNPTkZJR19VU0JfRVRIX1JORElTPXkKLSMgQ09ORklHX1VTQl9FVEhfRUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi1DT05GSUdfVVNCX09UR19VVElMUz15Ci0jIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTUDEzMDFfT01BUCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VUSD1tCiBDT05GSUdfVFdMNDAzMF9VU0I9eQotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKLSMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfT01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX09NQVBfSFM9eQotIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKLQotIwotIyBMRUQgZHJpdmVycwotIwotIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX0dQSU89eQotQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15Ci0jIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKIENPTkZJR19MRURTX1RSSUdHRVJTPXkKLSMgQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUiBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKLQotIwotIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCi0jCi0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9UV0w0MDMwPXkKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0JVUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19DQlVTIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQotIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKIENPTkZJR19RVU9UQT15Ci0jIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15Ci1DT05GSUdfUVVPVEFfVFJFRT15Ci0jIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKIENPTkZJR19RRk1UX1YyPXkKLUNPTkZJR19RVU9UQUNUTD15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCiBDT05GSUdfTlRGU19GUz1tCi0jIENPTkZJR19OVEZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfUlcgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfU1VNTUFSWT15Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKLSMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfVVRGOD1tCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKICMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotQ09ORklHX0FSTV9VTldJTkQ9eQotIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotQ09ORklHX0NSWVBUT19DUkMzMkM9eQotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD15Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiBDT05GSUdfTElCQ1JDMzJDPXkKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NtX3gyeHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jbV94Mnh4X2RlZmNvbmZpZwppbmRleCA0N2QyMmQwLi5kY2ZiY2YzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NtX3gyeHhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY21feDJ4eF9kZWZjb25maWcKQEAgLTEsMTM2OSArMSwxMzIgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzIKLSMgU3VuIEZlYiAgMSAxNjozMTozNiAyMDA5Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfQVJDSF9NVERfWElQPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci0jIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX1FVSVJLUz15CiAjIENPTkZJR19TTFVCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX0ZSRUVaRVI9eQotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9QWEE9eQotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKLSMKLSMgQ09ORklHX0FSQ0hfR1VNU1RJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0lOVEVMTU9URTIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NQUlOU1RPTkUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NUDkwMEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfSURQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVklQRVIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfRVNFUklFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUklaRVBTX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0g1MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfRU1fWDI3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0VYRURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ09MSUJSSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1pZTE9OSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTElUVExFVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVEFWT1JFVkIgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9TQUFSIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX0FSTUNPUkU9eQotIyBDT05GSUdfTUFDSF9DTV9YMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTUFHSUNJQU4gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NSU9BNzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfUENNMDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBX1BBTE0gaXMgbm90IHNldAotIyBDT05GSUdfUFhBX0VaWCBpcyBub3Qgc2V0Ci1DT05GSUdfUFhBMjV4PXkKLUNPTkZJR19QWEEyN3g9eQotQ09ORklHX1BYQV9TU1A9eQotIyBDT05GSUdfUFhBX1BXTSBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfWFNDQUxFPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VD15Ci1DT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0lXTU1YVD15Ci1DT05GSUdfWFNDQUxFX1BNVT15Ci1DT05GSUdfRE1BQk9VTkNFPXkKLUNPTkZJR19DT01NT05fQ0xLREVWPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotQ09ORklHX1BDSV9IT1NUX0lURTgxNTI9eQotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotQ09ORklHX1BDSV9MRUdBQ1k9eQotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKIENPTkZJR19QQ0NBUkQ9bQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUE9bQotQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15Ci1DT05GSUdfUENNQ0lBX0lPQ1RMPXkKLUNPTkZJR19DQVJEQlVTPXkKLQotIwotIyBQQy1jYXJkIGJyaWRnZXMKLSMKIENPTkZJR19ZRU5UQT1tCiAjIENPTkZJR19ZRU5UQV9PMiBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRU5UQV9SSUNPSCBpcyBub3Qgc2V0Ci1DT05GSUdfWUVOVEFfVEk9eQogIyBDT05GSUdfWUVOVEFfRU5FX1RVTkUgaXMgbm90IHNldAogIyBDT05GSUdfWUVOVEFfVE9TSElCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRDY3MjkgaXMgbm90IHNldAotIyBDT05GSUdfSTgyMDkyIGlzIG5vdCBzZXQKIENPTkZJR19QQ01DSUFfUFhBMlhYPW0KLUNPTkZJR19QQ0NBUkRfTk9OU1RBVElDPW0KLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJyb290PTFmMDMgbWVtPTMyTSIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkQ9eQotQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CiBDT05GSUdfQVBNX0VNVUxBVElPTj1tCi1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAogQ09ORklHX0JUPW0KIENPTkZJR19CVF9MMkNBUD1tCiBDT05GSUdfQlRfU0NPPW0KIENPTkZJR19CVF9SRkNPTU09bQotIyBDT05GSUdfQlRfUkZDT01NX1RUWSBpcyBub3Qgc2V0CiBDT05GSUdfQlRfQk5FUD1tCi0jIENPTkZJR19CVF9CTkVQX01DX0ZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUiBpcyBub3Qgc2V0CiBDT05GSUdfQlRfSElEUD1tCi0KLSMKLSMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19CVF9IQ0lCVFVTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCVFNESU8gaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJVUFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCQ00yMDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJQQTEwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCRlVTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lEVEwxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJUM0MgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQkxVRUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQlRVQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSVZIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQotQ09ORklHX1dJUkVMRVNTX0VYVD15Ci1DT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKIENPTkZJR19MSUI4MDIxMT1tCi0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPW0KLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9KRURFQ1BST0JFPXkKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKLUNPTkZJR19NVERfQ0ZJX05PU1dBUD15Ci0jIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKIENPTkZJR19NVERfQ0ZJX1NUQUE9eQotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVA9eQotIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUFhBMlhYPXkKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NIQVJQX1NMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORD15Ci0jIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0gxOTAwIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORF9HUElPPW0KLUNPTkZJR19NVERfTkFORF9JRFM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9TSEFSUFNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0NBRkUgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX0NNX1gyNzA9eQotIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfUExBVEZPUk09eQotIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPW0KLSMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1BNUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX1NGRj15Ci0jIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAotIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogQ09ORklHX1BBVEFfUENNQ0lBPW0KLSMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZwotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiBDT05GSUdfRE05MDAwPXkKIENPTkZJR19ETTkwMDBfREVCVUdMRVZFTD0xCi0jIENPTkZJR19ETTkwMDBfRk9SQ0VfU0lNUExFX1BIWV9QT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogQ09ORklHX05FVF9QQ0k9eQotIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAotIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRUFMTlggaXMgbm90IHNldAotIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAogQ09ORklHXzgxMzlUT089bQogIyBDT05GSUdfODEzOVRPT19QSU8gaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPT184MTI5IGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlfT0xEX1JYX1JFU0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTl84MDIxMT15Ci0jIENPTkZJR19QQ01DSUFfUkFZQ1MgaXMgbm90IHNldAotQ09ORklHX0xJQkVSVEFTPW0KLSMgQ09ORklHX0xJQkVSVEFTX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJFUlRBU19DUyBpcyBub3Qgc2V0Ci1DT05GSUdfTElCRVJUQVNfU0RJTz1tCi0jIENPTkZJR19MSUJFUlRBU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRVJNRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfQUlST19DUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfV0wzNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX1JORElTX1dMQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVBXMjEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFcyMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAogQ09ORklHX1BQUD1tCiBDT05GSUdfUFBQX01VTFRJTElOSz15CiBDT05GSUdfUFBQX0ZJTFRFUj15CiBDT05GSUdfUFBQX0FTWU5DPW0KLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0CiBDT05GSUdfUFBQX0RFRkxBVEU9bQogQ09ORklHX1BQUF9CU0RDT01QPW0KLSMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9bQotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0FQTVBPV0VSIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9QWEEyN3g9bQotIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKIENPTkZJR19UT1VDSFNDUkVFTl9VQ0IxNDAwPW0KLSMgQ09ORklHX1RPVUNIU0NSRUVOX1dNOTdYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15CiAjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fTElCUFMyPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9QWEE9eQogQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAotIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj1tCi1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfUFhBPXkKLSMgQ09ORklHX0kyQ19QWEFfU0xBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfU1BJPXkKLSMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19TUElfUFhBMlhYPW0KLQotIwotIyBTUEkgUHJvdG9jb2wgTWFzdGVycwotIwotIyBDT05GSUdfU1BJX0FUMjUgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKIENPTkZJR19VQ0IxNDAwX0NPUkU9bQotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi1DT05GSUdfVklERU9fREVWPW0KLUNPTkZJR19WSURFT19WNEwyX0NPTU1PTj1tCi0jIENPTkZJR19WSURFT19BTExPV19WNEwxIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19WNEwxX0NPTVBBVD15Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fTUVESUE9bQotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfTUVESUFfQVRUQUNIIGlzIG5vdCBzZXQKLUNPTkZJR19NRURJQV9UVU5FUj1tCi1DT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVpFPXkKLSMgQ09ORklHX01FRElBX1RVTkVSX1NJTVBMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9UVU5FUl9UREE4MjkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1RVTkVSX1REQTgyN1ggaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfVFVORVJfVERBMTgyNzEgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfVFVORVJfVERBOTg4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9UVU5FUl9URUE1NzYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjcgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfVFVORVJfTVQyMFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1RVTkVSX01UMjA2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9UVU5FUl9NVDIyNjYgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfVFVORVJfTVQyMTMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1RVTkVSX1FUMTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9UVU5FUl9YQzIwMjggaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfVFVORVJfWEM1MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1RVTkVSX01YTDUwMDVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1RVTkVSX01YTDUwMDdUIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19WNEwyPW0KLUNPTkZJR19WSURFT0JVRl9HRU49bQotQ09ORklHX1ZJREVPQlVGX0RNQV9TRz1tCi1DT05GSUdfVklERU9fQ0FQVFVSRV9EUklWRVJTPXkKLSMgQ09ORklHX1ZJREVPX0FEVl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19GSVhFRF9NSU5PUl9SQU5HRVMgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fSEVMUEVSX0NISVBTX0FVVE8gaXMgbm90IHNldAotCi0jCi0jIEVuY29kZXJzL2RlY29kZXJzIGFuZCBvdGhlciBoZWxwZXIgY2hpcHMKLSMKLQotIwotIyBBdWRpbyBkZWNvZGVycwotIwotIyBDT05GSUdfVklERU9fVFZBVURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19UREE3NDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1REQTk4NDAgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fVERBOTg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19URUE2NDE1QyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19URUE2NDIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01TUDM0MDAgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fQ1M1MzQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0NTNTNMMzJBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX001Mjc5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19UTFYzMjBBSUMyM0IgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fV004Nzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1dNODczOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19WUDI3U01QWCBpcyBub3Qgc2V0Ci0KLSMKLSMgVmlkZW8gZGVjb2RlcnMKLSMKLSMgQ09ORklHX1ZJREVPX09WNzY3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19UQ004MjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1NBQTcxMVggaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fU0FBNzE3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19UVlA1MTRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1RWUDUxNTAgaXMgbm90IHNldAotCi0jCi0jIFZpZGVvIGFuZCBhdWRpbyBkZWNvZGVycwotIwotIyBDT05GSUdfVklERU9fQ1gyNTg0MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTVBFRyB2aWRlbyBlbmNvZGVycwotIwotIyBDT05GSUdfVklERU9fQ1gyMzQxWCBpcyBub3Qgc2V0Ci0KLSMKLSMgVmlkZW8gZW5jb2RlcnMKLSMKLSMgQ09ORklHX1ZJREVPX1NBQTcxMjcgaXMgbm90IHNldAotCi0jCi0jIFZpZGVvIGltcHJvdmVtZW50IGNoaXBzCi0jCi0jIENPTkZJR19WSURFT19VUEQ2NDAzMUEgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fVVBENjQwODMgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19CVDg0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19TQUE1MjQ2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19TQUE1MjQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1NBQTcxMzQgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fSEVYSVVNX09SSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0hFWElVTV9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fQ1g4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19JVlRWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0NBRkVfQ0NJQyBpcyBub3Qgc2V0Ci1DT05GSUdfU09DX0NBTUVSQT1tCi0jIENPTkZJR19TT0NfQ0FNRVJBX01UOU0wMDEgaXMgbm90IHNldAotQ09ORklHX1NPQ19DQU1FUkFfTVQ5TTExMT1tCi0jIENPTkZJR19TT0NfQ0FNRVJBX01UOVQwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU09DX0NBTUVSQV9NVDlWMDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPQ19DQU1FUkFfVFc5OTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPQ19DQU1FUkFfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfU09DX0NBTUVSQV9PVjc3MlggaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1BYQTI3eD1tCi0jIENPTkZJR19WSURFT19TSF9NT0JJTEVfQ0VVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1Y0TF9VU0JfRFJJVkVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQURJT19BREFQVEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9EREMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAotIyBDT05GSUdfRkJfUkFERU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKIENPTkZJR19GQl9QWEE9eQotIyBDT05GSUdfRkJfUFhBX09WRVJMQVkgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUFhBX1NNQVJUUEFORUwgaXMgbm90IHNldAogQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTPXkKIENPTkZJR19GQl9NQlg9bQotIyBDT05GSUdfRkJfVzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogIyBDT05GSUdfTENEX0NMQVNTX0RFVklDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19GT05UXzh4OD15Ci1DT05GSUdfRk9OVF84eDE2PXkKIENPTkZJR19MT0dPPXkKLUNPTkZJR19MT0dPX0xJTlVYX01PTk89eQotQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CiBDT05GSUdfU09VTkQ9bQotQ09ORklHX1NPVU5EX09TU19DT1JFPXkKIENPTkZJR19TTkQ9bQotQ09ORklHX1NORF9USU1FUj1tCi1DT05GSUdfU05EX1BDTT1tCi0jIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfT1NTRU1VTD15CiBDT05GSUdfU05EX01JWEVSX09TUz1tCiBDT05GSUdfU05EX1BDTV9PU1M9bQotQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1ZNQVNURVI9eQotQ09ORklHX1NORF9BQzk3X0NPREVDPW0KICMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9QQ0kgaXMgbm90IHNldAotQ09ORklHX1NORF9BUk09eQotQ09ORklHX1NORF9QWEEyWFhfUENNPW0KLUNPTkZJR19TTkRfUFhBMlhYX0xJQj1tCi1DT05GSUdfU05EX1BYQTJYWF9MSUJfQUM5Nz15CiBDT05GSUdfU05EX1BYQTJYWF9BQzk3PW0KICMgQ09ORklHX1NORF9TUEkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1VTQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUENNQ0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotQ09ORklHX0FDOTdfQlVTPW0KLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLUNPTkZJR19ISURfREVCVUc9eQotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi1DT05GSUdfSElEX0NPTVBBVD15CiBDT05GSUdfSElEX0E0VEVDSD15CiBDT05GSUdfSElEX0FQUExFPXkKIENPTkZJR19ISURfQkVMS0lOPXkKQEAgLTEzNzMsNTg5ICsxMzYsNTQgQEAKIENPTkZJR19ISURfRVpLRVk9eQogQ09ORklHX0hJRF9HWVJBVElPTj15CiBDT05GSUdfSElEX0xPR0lURUNIPXkKLSMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTUlDUk9TT0ZUPXkKIENPTkZJR19ISURfTU9OVEVSRVk9eQotIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKIENPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQotIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9QRVRBTFlOWD15CiBDT05GSUdfSElEX1NBTVNVTkc9eQogQ09ORklHX0hJRF9TT05ZPXkKIENPTkZJR19ISURfU1VOUExVUz15Ci0jIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAotIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1pFUk9QTFVTX0ZGIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15CiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15Ci0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7Ci0jCi0KLSMKLSMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKIENPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VV0IgaXMgbm90IHNldAogQ09ORklHX01NQz1tCi0jIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz1tCi1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15Ci0jIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCiBDT05GSUdfTU1DX1BYQT1tCi0jIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1RJRk1fU0QgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfU0RSSUNPSF9DUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CiBDT05GSUdfTEVEU19DTEFTUz15Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLSMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19HUElPPW0KLSMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCiBDT05GSUdfTEVEU19UUklHR0VSUz15Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVIgaXMgbm90IHNldAogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQotIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX1YzMDIwPXkKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX1NBMTEwMD15Ci0jIENPTkZJR19SVENfRFJWX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz1tCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfVkZBVF9GUz1tCi1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15CiAjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfU1VNTUFSWT15Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogQ09ORklHX0NJRlM9bQotIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9bQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPW0KLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfVVRGOD1tCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotQ09ORklHX0NSQ19DQ0lUVD1tCi0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY21feDMwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NtX3gzMDBfZGVmY29uZmlnCmluZGV4IGEzMzQwNjkuLjkyMWU1NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY21feDMwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jbV94MzAwX2RlZmNvbmZpZwpAQCAtMSw0NDYgKzEsNDQgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzQKLSMgVHVlIE9jdCAxMyAxOTowMzoxMyAyMDA5Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfQVJDSF9IQVNfQ1BVRlJFUT15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfQVJDSF9NVERfWElQPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSItY20teDMwMCIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTgKLUNPTkZJR19HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci0jIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfTkFNRVNQQUNFUz15Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLUNPTkZJR19SRF9CWklQMj15Ci1DT05GSUdfUkRfTFpNQT15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9DTEs9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotQ09ORklHX1NMT1dfV09SSz15Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLUNPTkZJR19GUkVFWkVSPXkKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotQ09ORklHX01NVT15Ci0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05PTUFESUsgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUFhBPXkKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKLSMKLQotIwotIyBTdXBwb3J0ZWQgUFhBM3h4IFByb2Nlc3NvciBWYXJpYW50cwotIwotQ09ORklHX0NQVV9QWEEzMDA9eQotQ09ORklHX0NQVV9QWEEzMTA9eQotIyBDT05GSUdfQ1BVX1BYQTMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUFhBOTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9QWEE5MzUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1BYQTk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0dVTVNUSVggaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9JTlRFTE1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfU1RBUkdBVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTVA5MDBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQkFMTE9PTjMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfSURQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVklQRVIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfRVNFUklFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUklaRVBTX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0g1MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfRU1fWDI3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0VYRURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ09MSUJSSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NPTElCUkkzMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DT0xJQlJJMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfWllMT05JVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9MSVRUTEVUT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9UQVZPUkVWQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1NBQVIgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9BUk1DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX0NNX1gzMDA9eQotIyBDT05GSUdfTUFDSF9INDcwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01BR0lDSUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfSElNQUxBWUEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NSU9BNzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfUENNMDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBX1BBTE0gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DU0I3MjYgaXMgbm90IHNldAotIyBDT05GSUdfUFhBX0VaWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1hDRVAgaXMgbm90IHNldAotQ09ORklHX1BYQTN4eD15Ci1DT05GSUdfUExBVF9QWEE9eQotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX1hTQzM9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUPXkKLUNPTkZJR19DUFVfUEFCUlRfTEVHQUNZPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci1DT05GSUdfSU9fMzY9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAotQ09ORklHX09VVEVSX0NBQ0hFPXkKLUNPTkZJR19DQUNIRV9YU0MzTDI9eQotQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD01Ci1DT05GSUdfSVdNTVhUPXkKLUNPTkZJR19DT01NT05fQ0xLREVWPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLSMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKIENPTkZJR19ISUdITUVNPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTAKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLSMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L210ZGJsb2NrNSByb290ZnN0eXBlPXViaWZzIGNvbnNvbGU9dHR5UzIsMzg0MDAiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwogQ09ORklHX0NQVV9GUkVRPXkKLUNPTkZJR19DUFVfRlJFUV9UQUJMRT15Ci0jIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfU1RBVD15Ci0jIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFMgaXMgbm90IHNldAotQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFPXkKLSMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQotIyBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT15Ci0jIENPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkQ9eQotQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CiBDT05GSUdfQVBNX0VNVUxBVElPTj15Ci0jIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15CiBDT05GSUdfSVBfUE5QX1JBUlA9eQotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKIENPTkZJR19CVD1tCiBDT05GSUdfQlRfTDJDQVA9bQogQ09ORklHX0JUX1NDTz1tCkBAIC00NTAsMTMwNCArNDgsMTQxIEBACiBDT05GSUdfQlRfQk5FUF9NQ19GSUxURVI9eQogQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSPXkKIENPTkZJR19CVF9ISURQPW0KLQotIwotIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKLSMKIENPTkZJR19CVF9IQ0lCVFVTQj1tCi0jIENPTkZJR19CVF9IQ0lCVFNESU8gaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJVUFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCQ00yMDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJQQTEwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCRlVTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lWSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX01SVkwgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQotQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CiBDT05GSUdfTElCODAyMTE9bQotIyBDT05GSUdfTElCODAyMTFfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfSDE5MDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfR1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfSURTPXkKLSMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfU0hBUlBTTCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfUFhBM3h4PXkKLSMgQ09ORklHX01URF9OQU5EX1BYQTN4eF9CVUlMVElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCiBDT05GSUdfTVREX1VCST15Ci1DT05GSUdfTVREX1VCSV9XTF9USFJFU0hPTEQ9NDA5NgotQ09ORklHX01URF9VQklfQkVCX1JFU0VSVkU9MQotIyBDT05GSUdfTVREX1VCSV9HTFVFQkkgaXMgbm90IHNldAotCi0jCi0jIFVCSSBkZWJ1Z2dpbmcgb3B0aW9ucwotIwotIyBDT05GSUdfTVREX1VCSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKIENPTkZJR19ETTkwMDA9eQogQ09ORklHX0RNOTAwMF9ERUJVR0xFVkVMPTAKIENPTkZJR19ETTkwMDBfRk9SQ0VfU0lNUExFX1BIWV9QT0xMPXkKLSMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotQ09ORklHX1dMQU5fODAyMTE9eQotQ09ORklHX0xJQkVSVEFTPW0KLSMgQ09ORklHX0xJQkVSVEFTX1VTQiBpcyBub3Qgc2V0Ci1DT05GSUdfTElCRVJUQVNfU0RJTz1tCi0jIENPTkZJR19MSUJFUlRBU19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfTElCRVJUQVNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLSMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xNODMyMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX1BYQTI3eD1tCi0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9TUEkgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0RBOTAzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FRVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01DUzUwMDAgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKIENPTkZJR19UT1VDSFNDUkVFTl9XTTk3WFg9bQogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV005NzA1IGlzIG5vdCBzZXQKLUNPTkZJR19UT1VDSFNDUkVFTl9XTTk3MTI9eQogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV005NzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1dNOTdYWF9NQUlOU1RPTkUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVzkwWDkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfUFhBPXkKIENPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQotIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfUFhBPXkKLSMgQ09ORklHX0kyQ19QWEFfU0xBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfU1BJPXkKLSMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKLUNPTkZJR19TUElfQklUQkFORz15CiBDT05GSUdfU1BJX0dQSU89eQotIyBDT05GSUdfU1BJX1BYQTJYWCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFByb3RvY29sIE1hc3RlcnMKLSMKLSMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dQSU9fU1lTRlM9eQotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKIENPTkZJR19HUElPX1BDQTk1M1g9eQotIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKLQotIwotIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVUNCMTQwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKIENPTkZJR19QTUlDX0RBOTAzWD15Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKIENPTkZJR19SRUdVTEFUT1I9eQotIyBDT05GSUdfUkVHVUxBVE9SX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9VU0VSU1BBQ0VfQ09OU1VNRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX01BWDE1ODYgaXMgbm90IHNldAogQ09ORklHX1JFR1VMQVRPUl9EQTkwM1g9eQotIyBDT05GSUdfUkVHVUxBVE9SX0xQMzk3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwMjMgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9QWEE9eQotIyBDT05GSUdfRkJfUFhBX09WRVJMQVkgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUFhBX1NNQVJUUEFORUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUFhBX1BBUkFNRVRFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1cxMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQotIyBDT05GSUdfTENEX0xNUzI4M0dGMDUgaXMgbm90IHNldAotIyBDT05GSUdfTENEX0xUVjM1MFFWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKIENPTkZJR19MQ0RfVERPMjRNPXkKLSMgQ09ORklHX0xDRF9WR0cyNDMyQTQgaXMgbm90IHNldAotIyBDT05GSUdfTENEX1BMQVRGT1JNIGlzIG5vdCBzZXQKLUNPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPW0KICMgQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfREE5MDNYPW0KLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlk9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVFM9eQotIyBDT05GSUdfRk9OVF84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF84eDE2IGlzIG5vdCBzZXQKIENPTkZJR19GT05UXzZ4MTE9eQotIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfTUlOSV80eDYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HTz15Ci1DT05GSUdfTE9HT19MSU5VWF9NT05PPXkKLUNPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKLUNPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQogQ09ORklHX1NPVU5EPW0KLUNPTkZJR19TT1VORF9PU1NfQ09SRT15Ci1DT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD1tCi1DT05GSUdfU05EX1RJTUVSPW0KLUNPTkZJR19TTkRfUENNPW0KLUNPTkZJR19TTkRfSkFDSz15Ci0jIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfT1NTRU1VTD15CiBDT05GSUdfU05EX01JWEVSX09TUz1tCiBDT05GSUdfU05EX1BDTV9PU1M9bQotQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1ZNQVNURVI9eQotIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0FDOTdfQ09ERUM9bQogIyBDT05GSUdfU05EX0RSSVZFUlMgaXMgbm90IHNldAotQ09ORklHX1NORF9BUk09eQotQ09ORklHX1NORF9QWEEyWFhfTElCPW0KLUNPTkZJR19TTkRfUFhBMlhYX0xJQl9BQzk3PXkKLSMgQ09ORklHX1NORF9QWEEyWFhfQUM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfU1BJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9VU0IgaXMgbm90IHNldAogQ09ORklHX1NORF9TT0M9bQotQ09ORklHX1NORF9TT0NfQUM5N19CVVM9eQogQ09ORklHX1NORF9QWEEyWFhfU09DPW0KLUNPTkZJR19TTkRfUFhBMlhYX1NPQ19BQzk3PW0KIENPTkZJR19TTkRfUFhBMlhYX1NPQ19FTV9YMjcwPW0KLUNPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPW0KLSMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1NPQ19XTTk3MTI9bQotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotQ09ORklHX0FDOTdfQlVTPW0KLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotQ09ORklHX0hJRF9BNFRFQ0g9eQotQ09ORklHX0hJRF9BUFBMRT15Ci1DT05GSUdfSElEX0JFTEtJTj15Ci1DT05GSUdfSElEX0NIRVJSWT15Ci1DT05GSUdfSElEX0NISUNPTlk9eQotQ09ORklHX0hJRF9DWVBSRVNTPXkKIENPTkZJR19ISURfRFJBR09OUklTRT15Ci0jIENPTkZJR19EUkFHT05SSVNFX0ZGIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfRVpLRVk9eQotQ09ORklHX0hJRF9LWUU9eQogQ09ORklHX0hJRF9HWVJBVElPTj15CiBDT05GSUdfSElEX1RXSU5IQU49eQotQ09ORklHX0hJRF9LRU5TSU5HVE9OPXkKLUNPTkZJR19ISURfTE9HSVRFQ0g9eQotIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAotIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAotQ09ORklHX0hJRF9NSUNST1NPRlQ9eQotQ09ORklHX0hJRF9NT05URVJFWT15CiBDT05GSUdfSElEX05UUklHPXkKIENPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQotIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9QRVRBTFlOWD15CiBDT05GSUdfSElEX1NBTVNVTkc9eQogQ09ORklHX0hJRF9TT05ZPXkKIENPTkZJR19ISURfU1VOUExVUz15CiBDT05GSUdfSElEX0dSRUVOQVNJQT15Ci0jIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9TTUFSVEpPWVBMVVM9eQotIyBDT05GSUdfU01BUlRKT1lQTFVTX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfVE9QU0VFRD15CiBDT05GSUdfSElEX1RIUlVTVE1BU1RFUj15Ci0jIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9XQUNPTT1tCiBDT05GSUdfSElEX1pFUk9QTFVTPXkKLSMgQ09ORklHX1pFUk9QTFVTX0ZGIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotCi0jCi0jIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPW0KLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPW0KLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKLSMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKIENPTkZJR19NTUNfUFhBPW0KLSMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKLQotIwotIyBMRUQgZHJpdmVycwotIwotIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX0dQSU89eQotQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15Ci0jIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19EQTkwM1ggaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKIENPTkZJR19MRURTX1RSSUdHRVJTPXkKLSMgQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUiBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKLQotIwotIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCi0jCi0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX1YzMDIwPXkKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfU0ExMTAwIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX1BYQT15Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKLSMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz1tCiBDT05GSUdfTVNET1NfRlM9bQogQ09ORklHX1ZGQVRfRlM9bQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9TVU1NQVJZPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiBDT05GSUdfVUJJRlNfRlM9eQotIyBDT05GSUdfVUJJRlNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfVUJJRlNfRlNfQURWQU5DRURfQ09NUFIgaXMgbm90IHNldAotQ09ORklHX1VCSUZTX0ZTX0xaTz15Ci1DT05GSUdfVUJJRlNfRlNfWkxJQj15Ci0jIENPTkZJR19VQklGU19GU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiBDT05GSUdfTkZTX1YzX0FDTD15CiBDT05GSUdfTkZTX1Y0PXkKLSMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19BQ0xfU1VQUE9SVD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiBDT05GSUdfU01CX0ZTPW0KLSMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CiBDT05GSUdfQ0lGUz1tCi0jIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSD15Ci0jIENPTkZJR19DSUZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPW0KLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVEVDVF9IVU5HX1RBU0sgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJNX1VOV0lORD15CiBDT05GSUdfREVCVUdfVVNFUj15Ci0jIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKIENPTkZJR19DUllQVE9fQUVTPW0KLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BUkM0PW0KLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLUNPTkZJR19DUllQVE9fREVGTEFURT15Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0xaTz15Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotQ09ORklHX0NSQzE2PXkKIENPTkZJR19DUkNfVDEwRElGPXkKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19MWk9fQ09NUFJFU1M9eQotQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQotQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jbnMzNDIwdmJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jbnMzNDIwdmJfZGVmY29uZmlnCmluZGV4IGQ1YzA4ODEuLjMxMzYyN2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY25zMzQyMHZiX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NuczM0MjB2Yl9kZWZjb25maWcKQEAgLTEsODMxICsxLDcyIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzQtcmM2Ci0jIFN1biBNYXkgIDIgMjE6NTg6MDggMjAxMAotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfSEFWRV9QUk9DX0NQVT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEU9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfT1BST0ZJTEVfQVJNVjY9eQotQ09ORklHX09QUk9GSUxFX0FSTTExX0NPUkU9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LRVJORUxfR1pJUD15Ci1DT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKLUNPTkZJR19LRVJORUxfR1pJUD15Ci0jIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAotIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ0dST1VQUz15Ci0jIENPTkZJR19DR1JPVVBfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUF9GUkVFWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUF9ERVZJQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVU0VUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBfQ1BVQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRVNPVVJDRV9DT1VOVEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogQ09ORklHX1JFTEFZPXkKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci1DT05GSUdfUkRfQlpJUDI9eQotQ09ORklHX1JEX0xaTUE9eQotQ09ORklHX1JEX0xaTz15Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCiAjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfT1BST0ZJTEU9bQotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotQ09ORklHX1NMT1dfV09SSz15Ci0jIENPTkZJR19TTE9XX1dPUktfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKIENPTkZJR19NT0RWRVJTSU9OUz15Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9bQotIyBDT05GSUdfQ0ZRX0dST1VQX0lPU0NIRUQgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi1DT05GSUdfTU1VPXkKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0NOUzNYWFg9eQotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ET1ZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlVDOTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NITU9CSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVA2NDQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQNjQ0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1M1UEMxWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVBWMjEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1U4NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLQotIwotIyBDTlMzWFhYIHBsYXRmb3JtIHR5cGUKLSMKIENPTkZJR19NQUNIX0NOUzM0MjBWQj15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfVjY9eQotIyBDT05GSUdfQ1BVXzMydjZLIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfMzJ2Nj15Ci1DT05GSUdfQ1BVX0FCUlRfRVY2PXkKLUNPTkZJR19DUFVfUEFCUlRfVjY9eQotQ09ORklHX0NQVV9DQUNIRV9WNj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQotQ09ORklHX0NQVV9DT1BZX1Y2PXkKLUNPTkZJR19DUFVfVExCX1Y2PXkKLUNPTkZJR19DUFVfSEFTX0FTSUQ9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQotQ09ORklHX0NQVV9IQVNfUE1VPXkKLSMgQ09ORklHX0FSTV9FUlJBVEFfNDExOTIwIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fR0lDPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLSMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0jIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAsMzg0MDAgbWVtPTEyOE0gcm9vdD0vZGV2L21tY2JsazBwMSBybyByb290d2FpdCIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCi0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi0jIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19ORVQgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQogIyBDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci0jIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0yMDAwMAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0lfTU9EPXkKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKLSMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogIyBDT05GSUdfU0FUQV9QTVAgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX1NGRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKLSMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKIENPTkZJR19NTUNfU0RIQ0k9eQogQ09ORklHX01NQ19TREhDSV9QTFRGTT15Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUMl9GU19YQVRUUj15Ci0jIENPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQVVUT0ZTNF9GUz15Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKIENPTkZJR19GU0NBQ0hFPXkKLSMgQ09ORklHX0ZTQ0FDSEVfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfRlNDQUNIRV9ISVNUT0dSQU0gaXMgbm90IHNldAotIyBDT05GSUdfRlNDQUNIRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0NBQ0hFX09CSkVDVF9MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBQ0hFRklMRVMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19SSU5HX0JVRkZFUj15Ci1DT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0FSTV9VTldJTkQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ19FVE0gaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQotQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15Ci1DT05GSUdfREVDT01QUkVTU19MWk89eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMjcwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29saWJyaV9weGEyNzBfZGVmY29uZmlnCmluZGV4IGM5NjI4NzAuLmY1MmM2NGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY29saWJyaV9weGEyNzBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29saWJyaV9weGEyNzBfZGVmY29uZmlnCkBAIC0xLDQ0MyArMSw0OSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjOAotIyBGcmkgTWFyIDEzIDE2OjE4OjE3IDIwMDkKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0FSQ0hfTVREX1hJUD15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCRD15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfRlJFRVpFUj15Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1BYQT15Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLQotIwotIyBJbnRlbCBQWEEyeHgvUFhBM3h4IEltcGxlbWVudGF0aW9ucwotIwotIyBDT05GSUdfQVJDSF9HVU1TVElYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfSU5URUxNT1RFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xVQkJPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9MT0dJQ1BEX1BYQTI3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01BSU5TVE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01QOTAwQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQV9JRFAgaXMgbm90IHNldAotIyBDT05GSUdfUFhBX1NIQVJQU0wgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WSVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQV9FU0VSSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSSVpFUFNfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfSDUwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9FTV9YMjcwIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX0NPTElCUkk9eQotIyBDT05GSUdfTUFDSF9DT0xJQlJJMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfWllMT05JVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9MSVRUTEVUT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9SQVVNRkVMRF9QUk9UTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1RBVk9SRVZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfU0FBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0FSTUNPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DTV9YMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTUFHSUNJQU4gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NSU9BNzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfUENNMDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBX1BBTE0gaXMgbm90IHNldAotIyBDT05GSUdfUFhBX0VaWCBpcyBub3Qgc2V0Ci1DT05GSUdfUFhBMjd4PXkKLSMgQ09ORklHX1BYQV9QV00gaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX1hTQ0FMRT15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQotQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLUNPTkZJR19JV01NWFQ9eQotQ09ORklHX1hTQ0FMRV9QTVU9eQotQ09ORklHX0NPTU1PTl9DTEtERVY9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1RJQ0tfT05FU0hPVD15Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotQ09ORklHX1ZNU1BMSVRfM0c9eQotIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCiBDT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKLSMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTAKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MAotQ09ORklHX0NNRExJTkU9IiIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkQ9eQotQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15Ci0jIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX05FVF9LRVk9eQotIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTkZfREVGUkFHX0lQVjQgaXMgbm90IHNldAogQ09ORklHX0lQX05GX1FVRVVFPW0KLSMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogQ09ORklHX1ZMQU5fODAyMVE9bQotIyBDT05GSUdfVkxBTl84MDIxUV9HVlJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKIENPTkZJR19JUkRBPW0KLQotIwotIyBJckRBIHByb3RvY29scwotIwogQ09ORklHX0lSTEFOPW0KIENPTkZJR19JUkNPTU09bQogQ09ORklHX0lSREFfVUxUUkE9eQotCi0jCi0jIElyREEgb3B0aW9ucwotIwogQ09ORklHX0lSREFfQ0FDSEVfTEFTVF9MU0FQPXkKIENPTkZJR19JUkRBX0ZBU1RfUlI9eQotIyBDT05GSUdfSVJEQV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5mcmFyZWQtcG9ydCBkZXZpY2UgZHJpdmVycwotIwotCi0jCi0jIFNJUiBkZXZpY2UgZHJpdmVycwotIwogQ09ORklHX0lSVFRZX1NJUj1tCi0KLSMKLSMgRG9uZ2xlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RPTkdMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LSU5HU1VOX0RPTkdMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LU0RBWlpMRV9ET05HTEUgaXMgbm90IHNldAotIyBDT05GSUdfS1M5NTlfRE9OR0xFIGlzIG5vdCBzZXQKLQotIwotIyBGSVIgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJR01BVEVMX0ZJUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QWEFfRklDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQ1NfRklSIGlzIG5vdCBzZXQKIENPTkZJR19CVD1tCiBDT05GSUdfQlRfTDJDQVA9bQogQ09ORklHX0JUX1NDTz1tCkBAIC00NDcsMTI5MCArNTMsMTI4IEBACiBDT05GSUdfQlRfQk5FUF9NQ19GSUxURVI9eQogQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSPXkKIENPTkZJR19CVF9ISURQPW0KLQotIwotIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0JUX0hDSUJUVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJUU0RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lVQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJDTTIwM1ggaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQlBBMTBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJGVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSVZIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15CiBDT05GSUdfQ0ZHODAyMTE9eQotIyBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19OTDgwMjExPXkKLUNPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKLUNPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQotQ09ORklHX0xJQjgwMjExPXkKLUNPTkZJR19MSUI4MDIxMV9DUllQVF9XRVA9eQotQ09ORklHX0xJQjgwMjExX0NSWVBUX0NDTVA9eQotQ09ORklHX0xJQjgwMjExX0NSWVBUX1RLSVA9eQotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ09OTkVDVE9SPXkKLUNPTkZJR19QUk9DX0VWRU5UUz15CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15Ci1DT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9KRURFQ1BST0JFPXkKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKLSMgQ09ORklHX01URF9DRklfTk9TV0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUD15CiBDT05GSUdfTVREX0NGSV9HRU9NRVRSWT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCiBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQogQ09ORklHX01URF9QSFlTTUFQPXkKLSMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BYQTJYWD15Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0lNUEE3IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TSEFSUF9TTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAogQ09ORklHX01URF9CTE9DSzJNVEQ9eQotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORD15Ci0jIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0gxOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0dQSU8gaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15CiBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUD15CiBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUF9QUk9CRV9BRFZBTkNFRD15CiBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUF9QUk9CRV9BRERSRVNTPTB4NDAwMDAwMAogQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVBfUFJPQkVfSElHSD15CiBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUF9CQlRXUklURT15Ci0jIENPTkZJR19NVERfTkFORF9TSEFSUFNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX09ORU5BTkQ9eQotIyBDT05GSUdfTVREX09ORU5BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkRfT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EXzJYX1BST0dSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkRfU0lNIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KIENPTkZJR19CTEtfREVWX05CRD15Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9OAotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX0dEPXkKLUNPTkZJR19JREVfR0RfQVRBPXkKLSMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX1BST0NfRlM9eQotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogQ09ORklHX0RNOTAwMD15Ci1DT05GSUdfRE05MDAwX0RFQlVHTEVWRUw9NAotIyBDT05GSUdfRE05MDAwX0ZPUkNFX1NJTVBMRV9QSFlfUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOXzgwMjExPXkKLSMgQ09ORklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9STkRJU19XTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9TVEFQPXkKIENPTkZJR19IT1NUQVBfRklSTVdBUkU9eQogQ09ORklHX0hPU1RBUF9GSVJNV0FSRV9OVlJBTT15Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD02NDAKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT00ODAKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQogQ09ORklHX0tFWUJPQVJEX0FUS0JEPW0KLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfUFhBMjd4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFPXkKICMgQ09ORklHX01PVVNFX1BTMiBpcyBub3Qgc2V0CiBDT05GSUdfTU9VU0VfU0VSSUFMPW0KLSMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01JU0M9eQotIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9DTTEwOSBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVUlOUFVUPW0KLSMgQ09ORklHX0lOUFVUX0dQSU9fUk9UQVJZX0VOQ09ERVIgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKIENPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKIENPTkZJR19TRVJJQUxfUFhBPXkKIENPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotQ09ORklHX0RBQj15Ci0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQogQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfVVZFU0EgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogQ09ORklHX0ZCX1BYQT15Ci0jIENPTkZJR19GQl9QWEFfT1ZFUkxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9QWEFfU01BUlRQQU5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9QWEFfUEFSQU1FVEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQlggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQotIyBDT05GSUdfTENEX0lMSTkzMjAgaXMgbm90IHNldAotIyBDT05GSUdfTENEX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLUNPTkZJR19CQUNLTElHSFRfR0VORVJJQz15Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT049eQogQ09ORklHX0ZPTlRTPXkKIENPTkZJR19GT05UXzh4OD15CiBDT05GSUdfRk9OVF84eDE2PXkKLSMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9NSU5JXzR4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKIENPTkZJR19MT0dPPXkKLUNPTkZJR19MT0dPX0xJTlVYX01PTk89eQotQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwogIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLUNPTkZJR19ISURfQ09NUEFUPXkKLSMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15CiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOwotIwotCi0jCi0jIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCi0jCi0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKIENPTkZJR19VU0JfU0VSSUFMPW0KLSMgQ09ORklHX1VTQl9FWlVTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9DSDM0MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9FTVBFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRlVOU09GVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSVBBUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9USSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lQVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lVVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tMU0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTU9UT1JPTEEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9PVEk2ODU4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU1BDUDhYNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU0lFTUVOU19NUEkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1RJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX09QVElDT04gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUPW0KLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCi1DT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRD15Ci1DT05GSUdfVVNCX0RVTU1ZX0hDRD1tCi1DT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQotIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKLSMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX01NQ19QWEEgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKLSMgQ09ORklHX0xFRFNfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCi1DT05GSUdfTEVEU19UUklHR0VSUz15Ci1DT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKLSMgQ09ORklHX0xFRFNfVFJJR0dFUl9JREVfRElTSyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQogIyBDT05GSUdfUlRDX0hDVE9TWVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzPW0KLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQVVUT0ZTNF9GUz15Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz1tCiBDT05GSUdfTVNET1NfRlM9bQogQ09ORklHX1ZGQVRfRlM9bQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwogQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xNSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX0NPTkZJR0ZTX0ZTPXkKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15CiBDT05GSUdfSkZGUzJfRlNfREVCVUc9MQotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWT15Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19ORlNEPXkKLUNPTkZJR19ORlNEX1YzPXkKLSMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNEX1Y0PXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX0VYUE9SVEZTPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMTUiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAogQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQVNDSUk9eQogQ09ORklHX05MU19JU084ODU5XzE9bQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfVVRGOD1tCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCiBDT05GSUdfUFJJTlRLX1RJTUU9eQotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19QUkVFTVBUPXkKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKIENPTkZJR19LRVlTPXkKIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CiBDT05GSUdfU0VDVVJJVFk9eQotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9ORVRXT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX1BBVEggaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfUk9PVFBMVUcgaXMgbm90IHNldAotQ09ORklHX1NFQ1VSSVRZX0RFRkFVTFRfTU1BUF9NSU5fQUREUj0wCi1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0VDQj15Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz15Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9eQotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1NIQTE9bQogQ09ORklHX0NSWVBUT19TSEEyNTY9bQogQ09ORklHX0NSWVBUT19TSEE1MTI9bQotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLUNPTkZJR19DUllQVE9fQUVTPXkKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BUkM0PXkKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKIENPTkZJR19DUllQVE9fREVGTEFURT1tCi0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD15CiBDT05GSUdfQ1JDMTY9eQotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogQ09ORklHX0xJQkNSQzMyQz15Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1JFRURfU09MT01PTj15Ci1DT05GSUdfUkVFRF9TT0xPTU9OX0RFQzE2PXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY29saWJyaV9weGEzMDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jb2xpYnJpX3B4YTMwMF9kZWZjb25maWcKaW5kZXggMTFmZGI1YS4uYjk4NTMzNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jb2xpYnJpX3B4YTMwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jb2xpYnJpX3B4YTMwMF9kZWZjb25maWcKQEAgLTEsMTE1NSArMSw3MyBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjOAotIyBGcmkgTWFyIDEzIDE2OjEzOjIwIDIwMDkKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0FSQ0hfTVREX1hJUD15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15Ci0jIENPTkZJR19TWVNWSVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE3Ci0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX05BTUVTUEFDRVM9eQotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUFhBPXkKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAotCi0jCi0jIEludGVsIFBYQTJ4eC9QWEEzeHggSW1wbGVtZW50YXRpb25zCi0jCi0KLSMKLSMgU3VwcG9ydGVkIFBYQTN4eCBQcm9jZXNzb3IgVmFyaWFudHMKLSMKLUNPTkZJR19DUFVfUFhBMzAwPXkKLSMgQ09ORklHX0NQVV9QWEEzMTAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1BYQTMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUFhBOTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9QWEE5MzUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HVU1TVElYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfSU5URUxNT1RFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xVQkJPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9MT0dJQ1BEX1BYQTI3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01BSU5TVE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01QOTAwQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQV9JRFAgaXMgbm90IHNldAotIyBDT05GSUdfUFhBX1NIQVJQU0wgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WSVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQV9FU0VSSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSSVpFUFNfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfSDUwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9FTV9YMjcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ09MSUJSSSBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9DT0xJQlJJMzAwPXkKLSMgQ09ORklHX01BQ0hfWllMT05JVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9MSVRUTEVUT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9SQVVNRkVMRF9QUk9UTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1RBVk9SRVZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfU0FBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0FSTUNPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DTV9YMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTUFHSUNJQU4gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NSU9BNzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfUENNMDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBX1BBTE0gaXMgbm90IHNldAotIyBDT05GSUdfUFhBX0VaWCBpcyBub3Qgc2V0Ci1DT05GSUdfUFhBM3h4PXkKLSMgQ09ORklHX1BYQV9QV00gaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX1hTQzM9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUPXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci1DT05GSUdfSU9fMzY9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAotQ09ORklHX09VVEVSX0NBQ0hFPXkKLUNPTkZJR19DQUNIRV9YU0MzTDI9eQotQ09ORklHX0lXTU1YVD15Ci1DT05GSUdfQ09NTU9OX0NMS0RFVj15Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotQ09ORklHX1pCT09UX1JPTV9URVhUPTAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTAKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMCBydyIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0lETEU9eQotQ09ORklHX0NQVV9JRExFX0dPVl9MQURERVI9eQotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15Ci0jIENPTkZJR19QQUNLRVQgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNj15Ci0jIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9eQotIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2X1NJVD15Ci1DT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15Ci0jIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKIENPTkZJR19BWDg4Nzk2PXkKLSMgQ09ORklHX0FYODg3OTZfOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01JU0M9eQotIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9DTTEwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9VSU5QVVQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0dQSU9fUk9UQVJZX0VOQ09ERVI9eQotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX1BYQT15CiBDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQogQ09ORklHX0RFQlVHX0dQSU89eQotIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9QWEE9eQotIyBDT05GSUdfRkJfUFhBX09WRVJMQVkgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUFhBX1NNQVJUUEFORUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUFhBX1BBUkFNRVRFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1cxMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKICMgQ09ORklHX0xDRF9DTEFTU19ERVZJQ0UgaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQogIyBDT05GSUdfQkFDS0xJR0hUX0dFTkVSSUMgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQogQ09ORklHX0xPR089eQotQ09ORklHX0xPR09fTElOVVhfTU9OTz15Ci1DT05GSUdfTE9HT19MSU5VWF9WR0ExNj15Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQj15CiBDT05GSUdfVVNCX0RFQlVHPXkKIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7Ci0jCi0KLSMKLSMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKIENPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKICMgQ09ORklHX01NQ19CTE9DS19CT1VOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwogQ09ORklHX01NQ19QWEE9eQotIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKIENPTkZJR19QUklOVEtfVElNRT15Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKIENPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9eQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKIENPTkZJR19DUllQVE9fQUVTPXkKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BUkM0PXkKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jb2xsaWVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jb2xsaWVfZGVmY29uZmlnCmluZGV4IDI2ZTQ1OGQuLjMxMGY5YTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY29sbGllX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NvbGxpZV9kZWZjb25maWcKQEAgLTEsOTU5ICsxLDk0IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMxCi0jIEZyaSBBcHIgMTQgMTk6MDk6NTIgMjAwNgotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19BUkNIX01URF9YSVA9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfVUlEMTY9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19GVVRFWD15CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0Ci1DT05GSUdfU0hNRU09eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfRE9VQkxFRkFVTFQ9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0xCiBDT05GSUdfU0xPQj15Ci1DT05GSUdfT0JTT0xFVEVfSU5URVJNT0RVTEU9eQotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBsYXllcgotIwotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NBMTEwMD15Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0ExMXgwIEltcGxlbWVudGF0aW9ucwotIwotIyBDT05GSUdfU0ExMTAwX0FTU0FCRVQgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0NFUkYgaXMgbm90IHNldAogQ09ORklHX1NBMTEwMF9DT0xMSUU9eQotIyBDT05GSUdfU0ExMTAwX0gzMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9IMzYwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfQkFER0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9KT1JOQURBNzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9IQUNLS0lUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9MQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9QTEVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9TSEFOTk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9TSU1QQUQgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX1NTUCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfU0ExMTAwPXkKLUNPTkZJR19DUFVfMzJ2ND15Ci1DT05GSUdfQ1BVX0FCUlRfRVY0PXkKLUNPTkZJR19DUFVfQ0FDSEVfVjRXQj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9UTEJfVjRXQj15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfU0hBUlBfTE9DT01PPXkKLUNPTkZJR19TSEFSUF9QQVJBTT15Ci1DT05GSUdfU0hBUlBfU0NPT1A9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi1DT05GSUdfSVNBPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCiBDT05GSUdfUENDQVJEPXkKLUNPTkZJR19QQ01DSUFfREVCVUc9eQotQ09ORklHX1BDTUNJQT15Ci1DT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKLUNPTkZJR19QQ01DSUFfSU9DVEw9eQotCi0jCi0jIFBDLWNhcmQgYnJpZGdlcwotIwotIyBDT05GSUdfSTgyMzY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDSUMgaXMgbm90IHNldAogQ09ORklHX1BDTUNJQV9TQTExMDA9eQotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCi0jIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFPXkKLUNPTkZJR19OT0RFU19TSElGVD0yCi1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci0jIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRElTQ09OVElHTUVNX01BTlVBTD15Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19ESVNDT05USUdNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19ORUVEX01VTFRJUExFX05PREVTPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX0xFRFMgaXMgbm90IHNldAotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKK0NPTkZJR19QQ01DSUFfREVCVUc9eQogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0ibm9pbml0cmQgcm9vdD0vZGV2L210ZGJsb2NrMiByb290ZnN0eXBlPWpmZnMyIGZiY29uPXJvdGF0ZToxIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCi0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwogQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQVBNPXkKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfSkVERUNQUk9CRT15Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15CiBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15Ci1DT05GSUdfTVREX0NGSV9OT1NXQVA9eQotIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfR0VPTUVUUlk9eQogIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzIgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NGSV9JMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ0ZJX0kyIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0k0PXkKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci0jIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1NIQVJQPXkKLSMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1NBMTEwMD15Ci0jIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QTlAgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMDI0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKIENPTkZJR19JREU9eQotQ09ORklHX0JMS19ERVZfSURFPXkKLQotIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci1DT05GSUdfSURFRElTS19NVUxUSV9NT0RFPXkKIENPTkZJR19CTEtfREVWX0lERUNTPXkKLSMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLQotIwotIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCi0jCi1DT05GSUdfSURFX0dFTkVSSUM9eQotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfQ0hJUFNFVFMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX05FVERFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKLSMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLUNPTkZJR19QUFA9eQotIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfQVNZTkM9eQotIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9UU0RFVj15Ci1DT05GSUdfSU5QVVRfVFNERVZfU0NSRUVOX1g9MjQwCi1DT05GSUdfSU5QVVRfVFNERVZfU0NSRUVOX1k9MzIwCiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9MT0NPTU89eQotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKICMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfQ1M9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9TQTExMDA9eQogQ09ORklHX1NFUklBTF9TQTExMDBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLQotIwotIyBJUE1JCi0jCi0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLQotIwotIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cwotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIwogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLUNPTkZJR19NQ1A9eQogQ09ORklHX01DUF9TQTExWDA9eQogQ09ORklHX01DUF9VQ0IxMjAwPXkKIENPTkZJR19NQ1BfVUNCMTIwMF9UUz15Ci0KLSMKLSMgTEVEIGRldmljZXMKLSMKLUNPTkZJR19ORVdfTEVEUz15Ci1DT05GSUdfTEVEU19DTEFTUz15Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLUNPTkZJR19MRURTX0xPQ09NTz15Ci0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCi1DT05GSUdfTEVEU19UUklHR0VSUz15Ci1DT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKLUNPTkZJR19MRURTX1RSSUdHRVJfSURFX0RJU0s9eQotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKIENPTkZJR19GQj15Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CiBDT05GSUdfRkJfU0ExMTAwPXkKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIworQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NREFfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTj15CiBDT05GSUdfRk9OVFM9eQotIyBDT05GSUdfRk9OVF84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF84eDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAogQ09ORklHX0ZPTlRfTUlOSV80eDY9eQotIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0Ci0KLSMKLSMgTG9nbyBjb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKLUNPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQotQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQotQ09ORklHX0JBQ0tMSUdIVF9ERVZJQ0U9eQotQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQotQ09ORklHX0xDRF9ERVZJQ0U9eQotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi0jIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotQ09ORklHX1JPTUZTX0ZTPXkKLSMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKK0NPTkZJR19MRURTX0xPQ09NTz15CitDT05GSUdfTEVEU19UUklHR0VSUz15CitDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfSURFX0RJU0s9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15Ci0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCi0jIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPXkKK0NPTkZJR19ST01GU19GUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9ImNwNDM3IgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKIENPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19FUlJPUlM9eQotIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKIENPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jb3JnaV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NvcmdpX2RlZmNvbmZpZwppbmRleCA1ZTQwNjlmLi40YTFmYTgxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NvcmdpX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NvcmdpX2RlZmNvbmZpZwpAQCAtMSw1NDIgKzEsNzMgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNwotIyBNb24gT2N0IDIwIDEwOjEyOjIzIDIwMDgKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0FSQ0hfTVREX1hJUD15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX09QUk9GSUxFPW0KLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9QWEE9eQotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU003WDAwQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKLSMKLSMgQ09ORklHX0FSQ0hfR1VNU1RJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xVQkJPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9MT0dJQ1BEX1BYQTI3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01BSU5TVE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01QOTAwQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQV9JRFAgaXMgbm90IHNldAogQ09ORklHX1BYQV9TSEFSUFNMPXkKIENPTkZJR19NQUNIX1BPT0RMRT15CiBDT05GSUdfTUFDSF9DT1JHST15CiBDT05GSUdfTUFDSF9TSEVQSEVSRD15CiBDT05GSUdfTUFDSF9IVVNLWT15Ci0jIENPTkZJR19NQUNIX0FLSVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfU1BJVFogaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9CT1JaT0kgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9UT1NBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVklQRVIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfRVNFUklFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUklaRVBTX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0VNX1gyNzAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DT0xJQlJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfWllMT05JVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9MSVRUTEVUT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9UQVZPUkVWQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1NBQVIgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9BUk1DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ01fWDMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01BR0lDSUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTUlPQTcwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1BDTTAyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQV9QQUxNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BYQV9FWlggaXMgbm90IHNldAotQ09ORklHX1BYQTI1eD15Ci1DT05GSUdfUFhBX1NIQVJQX0M3eHg9eQotQ09ORklHX1BYQV9TU1A9eQotIyBDT05GSUdfUFhBX1BXTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NBX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19QWEFfSEFWRV9CT0FSRF9JUlFTPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCi0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfWFNDQUxFPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VD15Ci1DT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAotIyBDT05GSUdfSVdNTVhUIGlzIG5vdCBzZXQKLUNPTkZJR19YU0NBTEVfUE1VPXkKLUNPTkZJR19TSEFSUF9MT0NPTU89eQotQ09ORklHX1NIQVJQX1BBUkFNPXkKLUNPTkZJR19TSEFSUFNMX1BNPXkKLUNPTkZJR19TSEFSUF9TQ09PUD15Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0NBUkQ9eQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUE9eQotQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15Ci1DT05GSUdfUENNQ0lBX0lPQ1RMPXkKLQotIwotIyBQQy1jYXJkIGJyaWRnZXMKLSMKIENPTkZJR19QQ01DSUFfUFhBMlhYPXkKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAogQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0haPTEwMAotIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQotIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTAKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxMTUyMDBuOCBjb25zb2xlPXR0eTEgbm9pbml0cmQgcm9vdD0vZGV2L210ZGJsb2NrMiByb290ZnN0eXBlPWpmZnMyICAgZGVidWciCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotQ09ORklHX0hBVkVfQU9VVD15CiBDT05GSUdfQklORk1UX0FPVVQ9bQogQ09ORklHX0JJTkZNVF9NSVNDPW0KLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCiBDT05GSUdfUE09eQotIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BNX1NMRUVQPXkKLUNPTkZJR19TVVNQRU5EPXkKLUNPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQotQ09ORklHX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotQ09ORklHX1hGUk1fSVBDT01QPW0KLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2PW0KLSMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAogQ09ORklHX0lORVQ2X0FIPW0KIENPTkZJR19JTkVUNl9FU1A9bQogQ09ORklHX0lORVQ2X0lQQ09NUD1tCi0jIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAotQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPW0KLUNPTkZJR19JTkVUNl9UVU5ORUw9bQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KLSMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNl9TSVQ9bQotQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQogQ09ORklHX0lQVjZfVFVOTkVMPW0KLSMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE0gaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX05GX0RFRlJBR19JUFY0IGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9RVUVVRT1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KLSMgQ09ORklHX0lQX05GX01BVENIX0FIIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQogQ09ORklHX0lQX05GX01BVENIX1RUTD1tCiBDT05GSUdfSVBfTkZfRklMVEVSPW0KLSMgQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1QgaXMgbm90IHNldAogQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQogQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KIENPTkZJR19JUF9ORl9NQU5HTEU9bQotIyBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9SQVc9bQogQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KIENPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KLQotIwotIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwogQ09ORklHX0lQNl9ORl9RVUVVRT1tCiBDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KLSMgQ09ORklHX0lQNl9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCiBDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCiBDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQotIyBDT05GSUdfSVA2X05GX01BVENIX01IIGlzIG5vdCBzZXQKIENPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQotIyBDT05GSUdfSVA2X05GX1RBUkdFVF9MT0cgaXMgbm90IHNldAogQ09ORklHX0lQNl9ORl9GSUxURVI9bQotIyBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1QgaXMgbm90IHNldAogQ09ORklHX0lQNl9ORl9NQU5HTEU9bQotIyBDT05GSUdfSVA2X05GX1RBUkdFVF9ITCBpcyBub3Qgc2V0CiBDT05GSUdfSVA2X05GX1JBVz1tCi0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKIENPTkZJR19JUkRBPW0KLQotIwotIyBJckRBIHByb3RvY29scwotIwogQ09ORklHX0lSTEFOPW0KIENPTkZJR19JUk5FVD1tCiBDT05GSUdfSVJDT01NPW0KLSMgQ09ORklHX0lSREFfVUxUUkEgaXMgbm90IHNldAotCi0jCi0jIElyREEgb3B0aW9ucwotIwotIyBDT05GSUdfSVJEQV9DQUNIRV9MQVNUX0xTQVAgaXMgbm90IHNldAotIyBDT05GSUdfSVJEQV9GQVNUX1JSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREFfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIEluZnJhcmVkLXBvcnQgZGV2aWNlIGRyaXZlcnMKLSMKLQotIwotIyBTSVIgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0lSVFRZX1NJUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRG9uZ2xlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0tJTkdTVU5fRE9OR0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTREFaWkxFX0RPTkdMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzk1OV9ET05HTEUgaXMgbm90IHNldAotCi0jCi0jIEZJUiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfU0lHTUFURUxfRklSIGlzIG5vdCBzZXQKIENPTkZJR19QWEFfRklDUD1tCi0jIENPTkZJR19NQ1NfRklSIGlzIG5vdCBzZXQKIENPTkZJR19CVD1tCiBDT05GSUdfQlRfTDJDQVA9bQogQ09ORklHX0JUX1NDTz1tCkBAIC01NDYsMTggKzc3LDkgQEAKIENPTkZJR19CVF9CTkVQX01DX0ZJTFRFUj15CiBDT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVI9eQogQ09ORklHX0JUX0hJRFA9bQotCi0jCi0jIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycwotIwotQ09ORklHX0JUX0hDSVVTQj1tCi0jIENPTkZJR19CVF9IQ0lVU0JfU0NPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJUVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJUU0RJTyBpcyBub3Qgc2V0CiBDT05GSUdfQlRfSENJVUFSVD1tCiBDT05GSUdfQlRfSENJVUFSVF9IND15CiBDT05GSUdfQlRfSENJVUFSVF9CQ1NQPXkKLSMgQ09ORklHX0JUX0hDSVVBUlRfTEwgaXMgbm90IHNldAogQ09ORklHX0JUX0hDSUJDTTIwM1g9bQogQ09ORklHX0JUX0hDSUJQQTEwWD1tCiBDT05GSUdfQlRfSENJQkZVU0I9bQpAQCAtNTY2LDg0OCArODgsMTA3IEBACiBDT05GSUdfQlRfSENJQkxVRUNBUkQ9bQogQ09ORklHX0JUX0hDSUJUVUFSVD1tCiBDT05GSUdfQlRfSENJVkhDST1tCi0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCi0jIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfVEtJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogQ09ORklHX01URF9ST009eQotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwogQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfU0hBUlBfU0w9eQotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkQ9eQogQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURT15Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfSDE5MDAgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORF9TSEFSUFNMPXkKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKLQotIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCi0jCi0jIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQogQ09ORklHX0JMS19ERVZfSURFQ1M9eQotIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfUFJPQ19GUz15Ci0KLSMKLSMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwotIwotIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST1tCi1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD1tCiBDT05GSUdfQ0hSX0RFVl9TVD1tCiBDT05GSUdfQ0hSX0RFVl9PU1NUPW0KIENPTkZJR19CTEtfREVWX1NSPW0KLSMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPW0KLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKIENPTkZJR19TQ1NJX01VTFRJX0xVTj15Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9XTEVWRUxfUENNQ0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST1tCi0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwogQ09ORklHX1VTQl9DQVRDPW0KIENPTkZJR19VU0JfS0FXRVRIPW0KIENPTkZJR19VU0JfUEVHQVNVUz1tCiBDT05GSUdfVVNCX1JUTDgxNTA9bQogQ09ORklHX1VTQl9VU0JORVQ9bQotQ09ORklHX1VTQl9ORVRfQVg4ODE3WD1tCi1DT05GSUdfVVNCX05FVF9DRENFVEhFUj1tCi0jIENPTkZJR19VU0JfTkVUX0RNOTYwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX1NNU0M5NVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfR0w2MjBBIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTkVUX05FVDEwODA9bQotIyBDT05GSUdfVVNCX05FVF9QTFVTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX01DUzc4MzAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9STkRJU19IT1NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX05FVF9aQVVSVVM9bQogQ09ORklHX05FVF9QQ01DSUE9eQotIyBDT05GSUdfUENNQ0lBXzNDNTg5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV8zQzU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfRk1WSjE4WCBpcyBub3Qgc2V0CiBDT05GSUdfUENNQ0lBX1BDTkVUPW0KLSMgQ09ORklHX1BDTUNJQV9OTUNMQU4gaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1NNQzkxQzkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9YSVJDMlBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9BWE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAogQ09ORklHX1BQUD1tCi0jIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAogQ09ORklHX1BQUF9BU1lOQz1tCi0jIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX0RFRkxBVEUgaXMgbm90IHNldAogQ09ORklHX1BQUF9CU0RDT01QPW0KLSMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9bQotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15CiBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCi0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0FQTVBPV0VSIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MT0NPTU8gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLUNPTkZJR19LRVlCT0FSRF9DT1JHST15Ci1DT05GSUdfS0VZQk9BUkRfU1BJVFo9eQotQ09ORklHX0tFWUJPQVJEX1RPU0E9eQotIyBDT05GSUdfS0VZQk9BUkRfVE9TQV9VU0VfRVhUX0tFWUNPREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CiBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9DT1JHSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NSVNDPXkKLSMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URTIgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1lFQUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfQ00xMDkgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1VJTlBVVD1tCi0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD1tCiBDT05GSUdfU0VSSUFMXzgyNTBfQ1M9bQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX1BYQT15CiBDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009bQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAotIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLSMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX1BYQT15Ci0jIENPTkZJR19JMkNfUFhBX1NMQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfU1BJPXkKLSMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19TUElfUFhBMlhYPXkKLQotIwotIyBTUEkgUHJvdG9jb2wgTWFzdGVycwotIwotIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19NQVgxMTExPXkKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VDQjE0MDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi1DT05GSUdfVklERU9fREVWPW0KLUNPTkZJR19WSURFT19WNEwyX0NPTU1PTj1tCi1DT05GSUdfVklERU9fQUxMT1dfVjRMMT15Ci1DT05GSUdfVklERU9fVjRMMV9DT01QQVQ9eQotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX01FRElBPW0KLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX01FRElBX0FUVEFDSCBpcyBub3Qgc2V0Ci1DT05GSUdfTUVESUFfVFVORVI9bQotIyBDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19NRURJQV9UVU5FUl9TSU1QTEU9bQotQ09ORklHX01FRElBX1RVTkVSX1REQTgyOTA9bQotQ09ORklHX01FRElBX1RVTkVSX1REQTk4ODc9bQotQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjE9bQotQ09ORklHX01FRElBX1RVTkVSX1RFQTU3Njc9bQotQ09ORklHX01FRElBX1RVTkVSX01UMjBYWD1tCi1DT05GSUdfTUVESUFfVFVORVJfWEMyMDI4PW0KLUNPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9bQotQ09ORklHX1ZJREVPX1Y0TDI9bQotQ09ORklHX1ZJREVPX1Y0TDE9bQotQ09ORklHX1ZJREVPX0NBUFRVUkVfRFJJVkVSUz15Ci0jIENPTkZJR19WSURFT19BRFZfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fRklYRURfTUlOT1JfUkFOR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19IRUxQRVJfQ0hJUFNfQVVUTz15Ci0jIENPTkZJR19WSURFT19WSVZJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0NQSUEgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fQ1BJQTIgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fU0FBNTI0NkEgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fU0FBNTI0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0NfQ0FNRVJBIGlzIG5vdCBzZXQKLUNPTkZJR19WNExfVVNCX0RSSVZFUlM9eQotIyBDT05GSUdfVVNCX1ZJREVPX0NMQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR1NQQ0E9bQotIyBDT05GSUdfVVNCX001NjAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9DT05FWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfRVRPTVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX0ZJTkVQSVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX01BUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX09WNTE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9QQUMyMDcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1BBQzczMTEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NPTklYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU09OSVhKIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TVEswMTQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NVTlBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1Q2MTMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1RWODUzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfVkMwMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9aQzNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19QVlJVU0IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0VNMjhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19VU0JWSVNJT04gaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1VTQlZJREVPPW0KLUNPTkZJR19VU0JfVklDQU09bQotQ09ORklHX1VTQl9JQk1DQU09bQotQ09ORklHX1VTQl9LT05JQ0FXQz1tCi0jIENPTkZJR19VU0JfUVVJQ0tDQU1fTUVTU0VOR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FVDYxWDI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVkNBTUNISVAgaXMgbm90IHNldAotQ09ORklHX1VTQl9PVjUxMT1tCi1DT05GSUdfVVNCX1NFNDAxPW0KLUNPTkZJR19VU0JfU045QzEwMj1tCi1DT05GSUdfVVNCX1NUVjY4MD1tCi0jIENPTkZJR19VU0JfWkMwMzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QV0MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pSMzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUS1dFQkNBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUzIyNTUgaXMgbm90IHNldAotQ09ORklHX1JBRElPX0FEQVBURVJTPXkKLUNPTkZJR19VU0JfRFNCUj1tCi0jIENPTkZJR19VU0JfU0k0NzBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NUjgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQlggaXMgbm90IHNldAogQ09ORklHX0ZCX1cxMDA9eQotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiBDT05GSUdfTENEX0NMQVNTX0RFVklDRT15CiBDT05GSUdfTENEX0NPUkdJPXkKLSMgQ09ORklHX0xDRF9MVFYzNTBRViBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQ0RfVERPMjRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xDRF9WR0cyNDMyQTQgaXMgbm90IHNldAotIyBDT05GSUdfTENEX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9DT1JHSSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFDS0xJR0hUX0xPQ09NTz15Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVFM9eQogQ09ORklHX0ZPTlRfOHg4PXkKIENPTkZJR19GT05UXzh4MTY9eQotIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAotIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkQ9eQotQ09ORklHX1NPVU5EX09TU19DT1JFPXkKLSMgQ09ORklHX1NORCBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkRfUFJJTUU9eQotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPW0KLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKLSMKIENPTkZJR19VU0JfS0JEPW0KIENPTkZJR19VU0JfTU9VU0U9bQotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLUNPTkZJR19ISURfQ09NUEFUPXkKIENPTkZJR19ISURfQTRURUNIPW0KIENPTkZJR19ISURfQVBQTEU9bQogQ09ORklHX0hJRF9CRUxLSU49bQotQ09ORklHX0hJRF9CUklHSFQ9bQogQ09ORklHX0hJRF9DSEVSUlk9bQogQ09ORklHX0hJRF9DSElDT05ZPW0KIENPTkZJR19ISURfQ1lQUkVTUz1tCi1DT05GSUdfSElEX0RFTEw9bQogQ09ORklHX0hJRF9FWktFWT1tCiBDT05GSUdfSElEX0dZUkFUSU9OPW0KIENPTkZJR19ISURfTE9HSVRFQ0g9bQotIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAotIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9NSUNST1NPRlQ9bQogQ09ORklHX0hJRF9NT05URVJFWT1tCiBDT05GSUdfSElEX1BBTlRIRVJMT1JEPW0KLSMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfUEVUQUxZTlg9bQogQ09ORklHX0hJRF9TQU1TVU5HPW0KIENPTkZJR19ISURfU09OWT1tCiBDT05GSUdfSElEX1NVTlBMVVM9bQotQ09ORklHX1RIUlVTVE1BU1RFUl9GRj1tCi1DT05GSUdfWkVST1BMVVNfRkY9bQotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9bQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci1DT05GSUdfVVNCX0RFVklDRV9DTEFTUz15Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049eQotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj1tCiBDT05GSUdfVVNCX1NMODExX0hDRD1tCiBDT05GSUdfVVNCX1NMODExX0NTPW0KLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCiBDT05GSUdfVVNCX0FDTT1tCiBDT05GSUdfVVNCX1BSSU5URVI9bQotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwogQ09ORklHX1VTQl9TVE9SQUdFPW0KLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwogQ09ORklHX1VTQl9NREM4MDA9bQogQ09ORklHX1VTQl9NSUNST1RFSz1tCi0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwogQ09ORklHX1VTQl9TRVJJQUw9bQotQ09ORklHX1VTQl9FWlVTQj15CiBDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDPXkKLSMgQ09ORklHX1VTQl9TRVJJQUxfQUlSQ0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2IGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0JFTEtJTj1tCi0jIENPTkZJR19VU0JfU0VSSUFMX0NIMzQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfV0hJVEVIRUFUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVD1tCi0jIENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004PW0KIENPTkZJR19VU0JfU0VSSUFMX0VNUEVHPW0KIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPPW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfRlVOU09GVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9WSVNPUj1tCiBDT05GSUdfVVNCX1NFUklBTF9JUEFRPW0KIENPTkZJR19VU0JfU0VSSUFMX0lSPW0KQEAgLTE0MTUsNDc5ICsxOTYsNzkgQEAKIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUX1RJPW0KIENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTj1tCiBDT05GSUdfVVNCX1NFUklBTF9JUFc9bQotIyBDT05GSUdfVVNCX1NFUklBTF9JVVUgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9QREE9bQogQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTj1tCi0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fTVBSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0EyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0EyOFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0EyOFhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMThYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOVcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE5UVcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE5UUkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTQ5VyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBNDlXTEMgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfS0xTST1tCiBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1Q9bQogQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzI9bQotIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3NzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzg0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX01PVE9ST0xBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTkFWTUFOIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX1BMMjMwMz1tCi0jIENPTkZJR19VU0JfU0VSSUFMX09USTY4NTggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TUENQOFg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSFA0WCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9TQUZFPW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfU0FGRV9QQURERUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9UST1tCiBDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0s9bQogQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NPW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQ9bQotIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwogQ09ORklHX1VTQl9FTUk2Mj1tCiBDT05GSUdfVVNCX0VNSTI2PW0KLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1JJTzUwMD1tCiBDT05GSUdfVVNCX0xFR09UT1dFUj1tCiBDT05GSUdfVVNCX0xDRD1tCi0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTEVEPW0KLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0NZVEhFUk09bQotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogQ09ORklHX1VTQl9JRE1PVVNFPW0KLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCi1DT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9QWEEyNVg9eQotQ09ORklHX1VTQl9QWEEyNVg9eQotIyBDT05GSUdfVVNCX1BYQTI1WF9TTUFMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAogQ09ORklHX1VTQl9aRVJPPW0KIENPTkZJR19VU0JfRVRIPW0KLUNPTkZJR19VU0JfRVRIX1JORElTPXkKIENPTkZJR19VU0JfR0FER0VURlM9bQogQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR19TRVJJQUw9bQotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAogQ09ORklHX01NQz15Ci0jIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz15Ci1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15Ci0jIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCiBDT05GSUdfTU1DX1BYQT15Ci0jIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBWb2x0YWdlIGFuZCBDdXJyZW50IHJlZ3VsYXRvcnMKLSMKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9TVU1NQVJZPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQogQ09ORklHX0pGRlMyX1JVQklOPXkKLSMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKLSMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9bQotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9bQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9bQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9bQotQ09ORklHX1NVTlJQQ19HU1M9bQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9bQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiBDT05GSUdfU01CX0ZTPW0KIENPTkZJR19TTUJfTkxTX0RFRkFVTFQ9eQotQ09ORklHX1NNQl9OTFNfUkVNT1RFPSJjcDQzNyIKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9ImNwNDM3IgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX1VURjg9eQotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVFJBQ0U9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19FUlJPUlM9eQotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BRUFEPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX1JORz15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTlVMTD1tCi0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQVVUSEVOQz1tCiBDT05GSUdfQ1JZUFRPX1RFU1Q9bQotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj1tCi0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKIENPTkZJR19DUllQVE9fSE1BQz15Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCiBDT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT1tCiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19TSEExPW0KIENPTkZJR19DUllQVE9fU0hBMjU2PW0KIENPTkZJR19DUllQVE9fU0hBNTEyPW0KLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19XUDUxMj1tCi0KLSMKLSMgQ2lwaGVycwotIwogQ09ORklHX0NSWVBUT19BRVM9bQogQ09ORklHX0NSWVBUT19BTlVCSVM9bQogQ09ORklHX0NSWVBUT19BUkM0PW0KIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQ0FTVDU9bQogQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX0RFUz1tCi0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fS0hBWkFEPW0KLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fU0VSUEVOVD1tCiBDT05GSUdfQ1JZUFRPX1RFQT1tCiBDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCi0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jcHU5MjYwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY3B1OTI2MF9kZWZjb25maWcKaW5kZXggYzkxMzdhYS4uYmJmNzI5ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jcHU5MjYwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NwdTkyNjBfZGVmY29uZmlnCkBAIC0xLDEzMzcgKzEsMTE2IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmMzCi0jIFR1ZSBKdWwgMTQgMTQ6NTc6NTUgMjAwOQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci0KLSMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKLSMKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfQVQ5MT15Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLQotIwotIyBBdG1lbCBBVDkxIFN5c3RlbS1vbi1DaGlwCi0jCi0jIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjA9eQotIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05MjYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTlSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05RzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MUNBUDkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxWDQwIGlzIG5vdCBzZXQKLUNPTkZJR19BVDkxX1BNQ19VTklUPXkKLQotIwotIyBBVDkxU0FNOTI2MCBWYXJpYW50cwotIwotIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MF9TQU05WEUgaXMgbm90IHNldAotCi0jCi0jIEFUOTFTQU05MjYwIC8gQVQ5MVNBTTlYRSBCb2FyZCBUeXBlCi0jCi0jIENPTkZJR19NQUNIX0FUOTFTQU05MjYwRUsgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DQU02MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1NBTTlfTDkyNjAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9BRkVCOTI2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1VTQl9BOTI2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1FJTF9BOTI2MCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9DUFU5MjYwPXkKLQotIwotIyBBVDkxIEJvYXJkIE9wdGlvbnMKLSMKLQotIwotIyBBVDkxIEZlYXR1cmUgU2VsZWN0aW9ucwotIwotIyBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTIGlzIG5vdCBzZXQKLUNPTkZJR19BVDkxX1RJTUVSX0haPTEwMAotQ09ORklHX0FUOTFfRUFSTFlfREJHVT15Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUNSBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTI2VD15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXQj15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCiAjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4gaXMgbm90IHNldAotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAogQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTAKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSIiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwotIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotIyBDT05GSUdfRlBFX05XRlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9MUk89eQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotQ09ORklHX01URF9SQU09eQotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVA9eQotIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BMQVRSQU09eQotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORD15Ci0jIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0dQSU8gaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORF9BVE1FTD15Ci1DT05GSUdfTVREX05BTkRfQVRNRUxfRUNDX0hXPXkKLSMgQ09ORklHX01URF9OQU5EX0FUTUVMX0VDQ19TT0ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0FUTUVMX0VDQ19OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX05CRD15Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX01VTFRJX0xVTj15Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfU01TQ19QSFk9eQotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKIENPTkZJR19NQUNCPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPXkKLSMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQX0FTWU5DPXkKLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0CiBDT05GSUdfUFBQX0RFRkxBVEU9eQogQ09ORklHX1BQUF9CU0RDT01QPXkKLSMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9eQotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9HUElPPXkKLSMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MTTgzMjMgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX0FUTUVMPXkKIENPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0FUTUVMX1BEQz15Ci0jIENPTkZJR19TRVJJQUxfQVRNRUxfVFRZQVQgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0zMgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci1DT05GSUdfSTJDX0FMR09CSVQ9eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogQ09ORklHX0kyQ19HUElPPXkKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15CiBDT05GSUdfR1BJT19TWVNGUz15Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKIENPTkZJR19XQVRDSERPR19OT1dBWU9VVD15Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX0FUOTFTQU05WF9XQVRDSERPRz15Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCi0jIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotCi0jCi0jIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCi1DT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15Ci1DT05GSUdfVVNCX0dBREdFVF9BVDkxPXkKLUNPTkZJR19VU0JfQVQ5MT15Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9FVEg9eQotQ09ORklHX1VTQl9FVEhfUk5ESVM9eQotIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VUSD1tCiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKLSMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0Ci1DT05GSUdfTU1DX0FUOTE9eQotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfTU1DX0FUOTE9bQogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKLQotIwotIyBMRUQgZHJpdmVycwotIwotIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX0dQSU89eQotQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15Ci0jIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19CRDI4MDIgaXMgbm90IHNldAotCi0jCi0jIExFRCBUcmlnZ2VycwotIwogQ09ORklHX0xFRFNfVFJJR0dFUlM9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX1RSSUdHRVJfR1BJTz15CiBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049eQotCi0jCi0jIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKLSMKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQogIyBDT05GSUdfUlRDX0hDVE9TWVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCiBDT05GSUdfUlRDX0RSVl9EUzEzMDc9eQotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9BVDkxU0FNOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQotIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9eQotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9TVU1NQVJZPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogQ09ORklHX01JTklYX0ZTPXkKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogQ09ORklHX05MU19VVEY4PXkKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0jIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotQ09ORklHX0FSTV9VTldJTkQ9eQotIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLUNPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jcHU5ZzIwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY3B1OWcyMF9kZWZjb25maWcKaW5kZXggZDIzNDQ3OS4uZTdkNzk0MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jcHU5ZzIwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NwdTlnMjBfZGVmY29uZmlnCkBAIC0xLDEzMjcgKzEsMTE2IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmMzCi0jIFR1ZSBKdWwgMTQgMTU6MDM6NDMgMjAwOQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci0KLSMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKLSMKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfQVQ5MT15Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLQotIwotIyBBdG1lbCBBVDkxIFN5c3RlbS1vbi1DaGlwCi0jCi0jIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05MjYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxU0FNOVJMIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0FUOTFTQU05RzIwPXkKLSMgQ09ORklHX0FSQ0hfQVQ5MUNBUDkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxWDQwIGlzIG5vdCBzZXQKLUNPTkZJR19BVDkxX1BNQ19VTklUPXkKLQotIwotIyBBVDkxU0FNOUcyMCBCb2FyZCBUeXBlCi0jCi0jIENPTkZJR19NQUNIX0FUOTFTQU05RzIwRUsgaXMgbm90IHNldAogQ09ORklHX01BQ0hfQ1BVOUcyMD15Ci0KLSMKLSMgQVQ5MSBCb2FyZCBPcHRpb25zCi0jCi0KLSMKLSMgQVQ5MSBGZWF0dXJlIFNlbGVjdGlvbnMKLSMKLSMgQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVQ5MV9USU1FUl9IWj0xMDAKLUNPTkZJR19BVDkxX0VBUkxZX0RCR1U9eQotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDAgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDEgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDIgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDMgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDQgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDUgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX0FSTTkyNlQ9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUSj15Ci1DT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwogIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15Ci1DT05GSUdfT0FCSV9DT01QQVQ9eQotIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLSMgQ09ORklHX0xFRFMgaXMgbm90IHNldAotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLSMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0iIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKLSMgQ09ORklHX0ZQRV9OV0ZQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRlAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAotQ09ORklHX0lORVRfTFJPPXkKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLUNPTkZJR19NVERfUkFNPXkKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLSMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAogQ09ORklHX01URF9QTEFUUkFNPXkKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkQ9eQotIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9HUElPIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfQVRNRUw9eQotIyBDT05GSUdfTVREX05BTkRfQVRNRUxfRUNDX0hXIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9BVE1FTF9FQ0NfU09GVD15Ci0jIENPTkZJR19NVERfTkFORF9BVE1FTF9FQ0NfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9OQkQ9eQotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9NVUxUSV9MVU49eQotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAogQ09ORklHX1NNU0NfUEhZPXkKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01JST15CiBDT05GSUdfTUFDQj15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAogQ09ORklHX1BQUD15Ci0jIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAogQ09ORklHX1BQUF9BU1lOQz15Ci0jIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAogQ09ORklHX1BQUF9ERUZMQVRFPXkKIENPTkZJR19QUFBfQlNEQ09NUD15Ci0jIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLUNPTkZJR19TTEhDPXkKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfR1BJTz15Ci0jIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTE04MzIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9BVE1FTD15CiBDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9BVE1FTF9QREM9eQotIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MzIKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotQ09ORklHX0kyQ19BTEdPQklUPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfR1BJTz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQogQ09ORklHX0dQSU9fU1lTRlM9eQotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0c9eQotCi0jCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwotIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLQotIwotIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwotIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgotQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQotQ09ORklHX1VTQl9HQURHRVRfQVQ5MT15Ci1DT05GSUdfVVNCX0FUOTE9eQotIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEFOR1dFTEwgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfRVRIPXkKLUNPTkZJR19VU0JfRVRIX1JORElTPXkKLSMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorQ09ORklHX1VTQl9FVEg9bQogQ09ORklHX01NQz15Ci0jIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz15Ci1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15Ci0jIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAotQ09ORklHX01NQ19BVDkxPXkKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX01NQ19BVDkxPW0KIENPTkZJR19ORVdfTEVEUz15CiBDT05GSUdfTEVEU19DTEFTUz15Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLSMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19HUElPPXkKLUNPTkZJR19MRURTX0dQSU9fUExBVEZPUk09eQotIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKIENPTkZJR19MRURTX1RSSUdHRVJTPXkKIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQotIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19UUklHR0VSX0dQSU89eQogQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPXkKLQotIwotIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCi0jCi1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKICMgQ09ORklHX1JUQ19IQ1RPU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwogQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTkgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKLSMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlM0X0ZTPXkKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfU1VNTUFSWT15Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19NSU5JWF9GUz15Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfVVRGOD15Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLUNPTkZJR19BUk1fVU5XSU5EPXkKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci1DT05GSUdfQ1JDX0NDSVRUPXkKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY3B1YXQ5MV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NwdWF0OTFfZGVmY29uZmlnCmluZGV4IDFmOGRkYTYuLjAyMmFlYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY3B1YXQ5MV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jcHVhdDkxX2RlZmNvbmZpZwpAQCAtMSwxMzE1ICsxLDExMiBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjMwotIyBUdWUgSnVsIDE0IDE0OjQ1OjAxIDIwMDkKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfTkFNRVNQQUNFUz15Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotCi0jCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCi0jCi1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0RFQURMSU5FPXkKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0FUOTE9eQotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXRtZWwgQVQ5MSBTeXN0ZW0tb24tQ2hpcAotIwotQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMD15Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05MjYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05UkwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxU0FNOUcyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFDQVA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVg0MCBpcyBub3Qgc2V0Ci1DT05GSUdfQVQ5MV9QTUNfVU5JVD15Ci0KLSMKLSMgQVQ5MVJNOTIwMCBCb2FyZCBUeXBlCi0jCi0jIENPTkZJR19NQUNIX09ORUFSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFSTTkyMDBESyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0FUOTFSTTkyMDBFSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NTQjMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NTQjYzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NBUk1FVkEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9BVEVCOTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0tCOTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1BJQ09UVVgyWFggaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9LQUZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfRUNCQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1lMOTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9DUFVBVDkxPXkKLQotIwotIyBBVDkxIEJvYXJkIE9wdGlvbnMKLSMKLQotIwotIyBBVDkxIEZlYXR1cmUgU2VsZWN0aW9ucwotIwotIyBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTIGlzIG5vdCBzZXQKIENPTkZJR19BVDkxX1RJTUVSX0haPTEwMAotQ09ORklHX0FUOTFfRUFSTFlfREJHVT15Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUNSBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTIwVD15Ci1DT05GSUdfQ1BVXzMydjRUPXkKLUNPTkZJR19DUFVfQUJSVF9FVjRUPXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKLUNPTkZJR19DUFVfQ0FDSEVfVjRXVD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwogIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAogQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0haPTEwMAotIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLSMgQ09ORklHX0xFRFMgaXMgbm90IHNldAotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLSMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0iIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKLSMgQ09ORklHX0ZQRV9OV0ZQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAotQ09ORklHX0lORVRfTFJPPXkKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLUNPTkZJR19NVERfUkFNPXkKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLSMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAogQ09ORklHX01URF9QTEFUUkFNPXkKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX05CRD15Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX01VTFRJX0xVTj15Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQogQ09ORklHX0FSTV9BVDkxX0VUSEVSPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPXkKLSMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQX0FTWU5DPXkKLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0CiBDT05GSUdfUFBQX0RFRkxBVEU9eQogQ09ORklHX1BQUF9CU0RDT01QPXkKLSMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9eQotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9BVE1FTD15CiBDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9BVE1FTF9QREM9eQotIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MzIKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotQ09ORklHX0kyQ19BTEdPQklUPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfR1BJTz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQogQ09ORklHX0dQSU9fU1lTRlM9eQotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19BVDkxUk05MjAwX1dBVENIRE9HPXkKLQotIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKLSMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0KLSMKLSMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KLSMKIENPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTIKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLUNPTkZJR19VU0JfR0FER0VUX0FUOTE9eQotQ09ORklHX1VTQl9BVDkxPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9TM0NfSFNPVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xBTkdXRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VUSD15Ci1DT05GSUdfVVNCX0VUSF9STkRJUz15Ci0jIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRVRIPW0KIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQotIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKLUNPTkZJR19NTUNfQVQ5MT15Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfQVQ5MT1tCiBDT05GSUdfTkVXX0xFRFM9eQogQ09ORklHX0xFRFNfQ0xBU1M9eQotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0jIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAogQ09ORklHX0xFRFNfR1BJTz15Ci1DT05GSUdfTEVEU19HUElPX1BMQVRGT1JNPXkKLSMgQ09ORklHX0xFRFNfTFAzOTQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCiBDT05GSUdfTEVEU19UUklHR0VSUz15CiBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKLSMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAogQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPPXkKIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj15Ci0KLSMKLSMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQotIwotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15CiAjIENPTkZJR19SVENfSENUT1NZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX0RTMTMwNz15Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX1BDRjg1NjM9eQotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9BVDkxUk05MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQVVUT0ZTNF9GUz15Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX1NVTU1BUlk9eQotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfTUlOSVhfRlM9eQotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX1VURjg9eQotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci1DT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotQ09ORklHX0NSQ19DQ0lUVD15Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NzYjMzN19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NzYjMzN19kZWZjb25maWcKaW5kZXggZjA5NTA0MC4uYTI0YzQ0OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jc2IzMzdfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY3NiMzM3X2RlZmNvbmZpZwpAQCAtMSw4NjMgKzEsNzUgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzcKLSMgV2VkIEphbiAgOSAyMjoxOToyNCAyMDA4Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0FUOTE9eQotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIwotCi0jCi0jIEF0bWVsIEFUOTEgU3lzdGVtLW9uLUNoaXAKLSMKLUNPTkZJR19BUkNIX0FUOTFSTTkyMDA9eQotIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05MjYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxU0FNOVJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVg0MCBpcyBub3Qgc2V0Ci1DT05GSUdfQVQ5MV9QTUNfVU5JVD15Ci0KLSMKLSMgQVQ5MVJNOTIwMCBCb2FyZCBUeXBlCi0jCi0jIENPTkZJR19NQUNIX09ORUFSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFSTTkyMDBESyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0FUOTFSTTkyMDBFSyBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9DU0IzMzc9eQotIyBDT05GSUdfTUFDSF9DU0I2MzcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DQVJNRVZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQVRFQjkyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9LQjkyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9QSUNPVFVYMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfS0FGQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NIVUIgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9IT01FTUFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9FQ0JBVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfU1dFREFUTVMgaXMgbm90IHNldAotCi0jCi0jIEFUOTEgQm9hcmQgT3B0aW9ucwotIwotCi0jCi0jIEFUOTEgRmVhdHVyZSBTZWxlY3Rpb25zCi0jCiBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTPXkKLSMgQ09ORklHX0FUTUVMX1RDTElCIGlzIG5vdCBzZXQKLUNPTkZJR19BVDkxX1RJTUVSX0haPTEyOAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX0FSTTkyMFQ9eQotQ09ORklHX0NQVV8zMnY0VD15Ci1DT05GSUdfQ1BVX0FCUlRfRVY0VD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y0V1Q9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKICMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX1BDQ0FSRD15Ci0jIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQT15Ci1DT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKLUNPTkZJR19QQ01DSUFfSU9DVEw9eQotCi0jCi0jIFBDLWNhcmQgYnJpZGdlcwotIwogQ09ORklHX0FUOTFfQ0Y9eQotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMjgKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19MRURTPXkKIENPTkZJR19MRURTX0NQVT15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0ibWVtPTMyTSBjb25zb2xlPXR0eVMwLDM4NDAwIGluaXRyZD0weDIwNDEwMDAwLDMxNDU3Mjggcm9vdD0vZGV2L3JhbTAgcnciCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgwCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MAotQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0wCi0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfQVRNRUxfU1NDPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCi0jIENPTkZJR19CTEtfREVWX1NEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9XTEVWRUxfUENNQ0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKIENPTkZJR19BUk1fQVQ5MV9FVEhFUj15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9BVE1FTD15CiBDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCi0jCi0jIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfQVQ5MV9TUEk9eQotQ09ORklHX0FUOTFfU1BJREVWPXkKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotQ09ORklHX0kyQ19BTEdPQklUPXkKLSMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKIENPTkZJR19JMkNfR1BJTz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUENBIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfQVQ5MVJNOTIwMF9XQVRDSERPRz15Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci1DT05GSUdfSElEX0RFQlVHPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKICMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQogQ09ORklHX1VTQl9ERUJVRz15Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci1DT05GSUdfVVNCX0RFVklDRV9DTEFTUz15Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0hDRD15Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwotQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIworQ09ORklHX1VTQl9PSENJX0hDRD15CitDT05GSUdfVVNCX1NUT1JBR0U9eQogQ09ORklHX1VTQl9TRVJJQUw9eQogQ09ORklHX1VTQl9TRVJJQUxfQ09OU09MRT15CiBDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDPXkKLSMgQ09ORklHX1VTQl9TRVJJQUxfQUlSQ0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9BSVJQUklNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9DSDM0MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9FTVBFRyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTz15Ci0jIENPTkZJR19VU0JfU0VSSUFMX0ZVTlNPRlQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9WSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lQQVEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9JUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlRfVEkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9HQVJNSU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9JUFcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1BEQSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOPXkKIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fTVBSPXkKIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjg9eQpAQCAtODcxLDM0NSArODMsMjIgQEAKIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTlRST15CiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTQ5Vz15CiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTQ5V0xDPXkKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0xTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tPQklMX1NDVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMj15Ci0jIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTkFWTUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfT1RJNjg1OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9USSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1hJUkNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX09QVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VaVVNCPXkKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwogQ09ORklHX1VTQl9HQURHRVQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX0FUOTE9eQotQ09ORklHX1VTQl9BVDkxPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz15Ci1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15Ci0jIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQogQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMSIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKICMgQ09ORklHX1JUQ19JTlRGX1NZU0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCiBDT05GSUdfUlRDX0RSVl9EUzEzMDc9eQotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCiBDT05GSUdfUlRDX0RSVl9BVDkxUk05MjAwPXkKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5TVFJVTUVOVEFUSU9OPXkKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15Ci0jIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jc2I2MzdfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jc2I2MzdfZGVmY29uZmlnCmluZGV4IDUwNzE1NDAuLjk4NTUyYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY3NiNjM3X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NzYjYzN19kZWZjb25maWcKQEAgLTEsOTM3ICsxLDcxIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM4Ci0jIEZyaSBBcHIgIDQgMjI6MDY6MTUgMjAwOAotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLSMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfTkFNRVNQQUNFUz15Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9BVDkxPXkKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTTdYMDBBIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCi0KLSMKLSMgQXRtZWwgQVQ5MSBTeXN0ZW0tb24tQ2hpcAotIwotQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMD15Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05MjYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05UkwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxQ0FQOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFYNDAgaXMgbm90IHNldAotQ09ORklHX0FUOTFfUE1DX1VOSVQ9eQotCi0jCi0jIEFUOTFSTTkyMDAgQm9hcmQgVHlwZQotIwotIyBDT05GSUdfTUFDSF9PTkVBUk0gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxUk05MjAwREsgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9BVDkxUk05MjAwRUsgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DU0IzMzcgaXMgbm90IHNldAogQ09ORklHX01BQ0hfQ1NCNjM3PXkKLSMgQ09ORklHX01BQ0hfQ0FSTUVWQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0FURUI5MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfS0I5MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfUElDT1RVWDJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0tBRkEgaXMgbm90IHNldAotCi0jCi0jIEFUOTEgQm9hcmQgT3B0aW9ucwotIwotCi0jCi0jIEFUOTEgRmVhdHVyZSBTZWxlY3Rpb25zCi0jCiBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTPXkKLUNPTkZJR19BVDkxX1RJTUVSX0haPTEyOAotQ09ORklHX0FUOTFfRUFSTFlfREJHVT15Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUNSBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTIwVD15Ci1DT05GSUdfQ1BVXzMydjRUPXkKLUNPTkZJR19DUFVfQUJSVF9FVjRUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVjRXVD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwogIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfUENDQVJEPXkKLSMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUENNQ0lBPXkKLUNPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQotQ09ORklHX1BDTUNJQV9JT0NUTD15Ci0KLSMKLSMgUEMtY2FyZCBicmlkZ2VzCi0jCiBDT05GSUdfQVQ5MV9DRj15Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEyOAotIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0xFRFM9eQogQ09ORklHX0xFRFNfQ1BVPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJtZW09MzJNIGNvbnNvbGU9dHR5UzAsMzg0MDAgaW5pdHJkPTB4MjA0MTAwMDAsMzE0NTcyOCByb290PS9kZXYvcmFtMCBydyIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgwCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MAotQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0wCi0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0FUTUVMX1BXTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUxfU1NDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKLSMgQ09ORklHX0JMS19ERVZfU0QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQogQ09ORklHX0FSTV9BVDkxX0VUSEVSPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NTODl4MCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9BVE1FTD15CiBDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9BVE1FTF9QREM9eQotIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009bQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAotIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLSMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfQVQ5MVJNOTIwMF9XQVRDSERPRz15Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotQ09ORklHX0hJRF9ERUJVRz15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCiAjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfREVCVUc9eQotIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCi0jCi1DT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorQ09ORklHX1VTQl9TVE9SQUdFPXkKIENPTkZJR19VU0JfU0VSSUFMPXkKIENPTkZJR19VU0JfU0VSSUFMX0NPTlNPTEU9eQotQ09ORklHX1VTQl9FWlVTQj15CiBDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDPXkKLSMgQ09ORklHX1VTQl9TRVJJQUxfQUlSQ0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9BSVJQUklNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9DSDM0MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9FTVBFRyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTz15Ci0jIENPTkZJR19VU0JfU0VSSUFMX0ZVTlNPRlQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9WSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lQQVEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9JUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlRfVEkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9HQVJNSU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9JUFcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9JVVUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1BEQSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOPXkKIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fTVBSPXkKIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjg9eQpAQCAtOTQ1LDI3NiArNzksMjAgQEAKIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTlRST15CiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTQ5Vz15CiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTQ5V0xDPXkKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0xTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tPQklMX1NDVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMj15Ci0jIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTkFWTUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfT1RJNjg1OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9USSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1hJUkNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX09QVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CiBDT05GSUdfTEVEU19DTEFTUz15Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKIENPTkZJR19MRURTX0dQSU89eQotCi0jCi0jIExFRCBUcmlnZ2VycwotIwogQ09ORklHX0xFRFNfVFJJR0dFUlM9eQotIyBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIEkvTwotIwotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15Ci0jIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9kYTh4eF9vbWFwbF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2RhOHh4X29tYXBsX2RlZmNvbmZpZwppbmRleCBlMTRjOTljLi5iYTY2NzA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2RhOHh4X29tYXBsX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2RhOHh4X29tYXBsX2RlZmNvbmZpZwpAQCAtMSwxMzMxICsxLDEyNiBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQotIyBUaHUgT2N0IDIyIDEyOjE5OjE5IDIwMDkKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLUNPTkZJR19BUkNIX0hBU19DUFVGUkVRPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKLUNPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKIENPTkZJR19NT0RWRVJTSU9OUz15Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi1DT05GSUdfTU1VPXkKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfREFWSU5DST15Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUF9JTlRDPXkKLQotIwotIyBUSSBEYVZpbmNpIEltcGxlbWVudGF0aW9ucwotIwotCi0jCi0jIERhVmluY2kgQ29yZSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0RBVklOQ0lfRE02NDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSV9ETTM1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0lfRE02NDZ4IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0RBVklOQ0lfREE4MzA9eQogQ09ORklHX0FSQ0hfREFWSU5DSV9EQTg1MD15Ci1DT05GSUdfQVJDSF9EQVZJTkNJX0RBOFhYPXkKLSMgQ09ORklHX0FSQ0hfREFWSU5DSV9ETTM2NSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGFWaW5jaSBCb2FyZCBUeXBlCi0jCi1DT05GSUdfTUFDSF9EQVZJTkNJX0RBODMwX0VWTT15Ci1DT05GSUdfREE4MzBfVUk9eQotQ09ORklHX0RBODMwX1VJX0xDRD15Ci0jIENPTkZJR19EQTgzMF9VSV9OQU5EIGlzIG5vdCBzZXQKLUNPTkZJR19NQUNIX0RBVklOQ0lfREE4NTBfRVZNPXkKLUNPTkZJR19EQTg1MF9VSV9FWFA9eQotQ09ORklHX0RBODUwX1VJX05PTkU9eQotIyBDT05GSUdfREE4NTBfVUlfUk1JSSBpcyBub3Qgc2V0Ci1DT05GSUdfREFWSU5DSV9NVVg9eQotIyBDT05GSUdfREFWSU5DSV9NVVhfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfREFWSU5DSV9NVVhfV0FSTklOR1MgaXMgbm90IHNldAogQ09ORklHX0RBVklOQ0lfUkVTRVRfQ0xPQ0tTPXkKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9BUk05MjZUPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQotQ09ORklHX0NQVV9QQUJSVF9MRUdBQ1k9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0g9eQotIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQotQ09ORklHX0NPTU1PTl9DTEtERVY9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLSMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQogIyBDT05GSUdfT0FCSV9DT01QQVQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19MRURTPXkKLSMgQ09ORklHX0xFRFNfQ1BVIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0jIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9IiIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCiBDT05GSUdfQ1BVX0ZSRVE9eQotQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKLSMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9TVEFUPXkKLSMgQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAogQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRT15Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAogQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRT1tCiBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRT1tCi1DT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT15CiBDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EPW0KLSMgQ09ORklHX0NQVV9GUkVRX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAogQ09ORklHX0NQVV9JRExFPXkKLUNPTkZJR19DUFVfSURMRV9HT1ZfTEFEREVSPXkKLUNPTkZJR19DUFVfSURMRV9HT1ZfTUVOVT15Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi0jIENPTkZJR19WRlAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15Ci0jIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNj1tCi0jIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQotIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2X1NJVD1tCi1DT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15Ci0jIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19ORl9ERUZSQUdfSVBWNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUDZfTkZfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfSVA2X05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD1tCi0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xCiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKIENPTkZJR19FRVBST01fQVQyND15Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPW0KLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPW0KLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogQ09ORklHX1RVTj1tCi0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfTFhUX1BIWT15Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKIENPTkZJR19MU0lfRVQxMDExQ19QSFk9eQotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogQ09ORklHX1RJX0RBVklOQ0lfRU1BQz15Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUQ09OU09MRT15Ci0jIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgbm90IHNldAotQ09ORklHX05FVFBPTEw9eQogQ09ORklHX05FVFBPTExfVFJBUD15Ci1DT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwogQ09ORklHX0lOUFVUX01PVVNFREVWPW0KLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj1tCiBDT05GSUdfSU5QVVRfRVZCVUc9bQotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfQVRLQkQ9bQotIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9HUElPPXkKLSMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9YVEtCRD1tCiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VFVEkgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUNTNTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1c5MFg5MDAgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQogQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKICMgQ09ORklHX1ZUX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MwotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MwotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT1tCi0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCiBDT05GSUdfSTJDX0RBVklOQ0k9eQotIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKLUNPTkZJR19HUElPX1BDQTk1M1g9eQotQ09ORklHX0dQSU9fUENGODU3WD15Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJTkNJX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogQ09ORklHX1JFR1VMQVRPUj15Ci0jIENPTkZJR19SRUdVTEFUT1JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfTUFYMTU4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfTFAzOTcxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9UUFM2NTAyMyBpcyBub3Qgc2V0CiBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDdYPXkKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfREE4WFg9eQotIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQogQ09ORklHX0xPR089eQotQ09ORklHX0xPR09fTElOVVhfTU9OTz15Ci1DT05GSUdfTE9HT19MSU5VWF9WR0ExNj15Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKIENPTkZJR19TT1VORD1tCi0jIENPTkZJR19TT1VORF9PU1NfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfU05EPW0KLUNPTkZJR19TTkRfVElNRVI9bQotQ09ORklHX1NORF9QQ009bQotQ09ORklHX1NORF9KQUNLPXkKLSMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQotQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15Ci0jIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9SQVdNSURJX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAotQ09ORklHX1NORF9EUklWRVJTPXkKLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0FSTT15CiBDT05GSUdfU05EX1NPQz1tCiBDT05GSUdfU05EX0RBVklOQ0lfU09DPW0KLSMgQ09ORklHX1NORF9EQTgzMF9TT0NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EQTg1MF9TT0NfRVZNIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPW0KLSMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogQ09ORklHX1hGU19GUz1tCi0jIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlM0X0ZTPW0KLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogQ09ORklHX01JTklYX0ZTPW0KLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkZTRD1tCiBDT05GSUdfTkZTRF9WMz15Ci0jIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX0VYUE9SVEZTPW0KLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogQ09ORklHX1NNQl9GUz1tCi0jIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQVNDSUk9bQogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogQ09ORklHX05MU19VVEY4PW0KLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiBDT05GSUdfVElNRVJfU1RBVFM9eQotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQogQ09ORklHX0RFQlVHX1JUX01VVEVYRVM9eQotQ09ORklHX0RFQlVHX1BJX0xJU1Q9eQotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotQ09ORklHX0FSTV9VTldJTkQ9eQogQ09ORklHX0RFQlVHX1VTRVI9eQogQ09ORklHX0RFQlVHX0VSUk9SUz15Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPW0KLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkNfVDEwRElGPW0KLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19HRU5FUklDX0FMTE9DQVRPUj15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9kYXZpbmNpX2FsbF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2RhdmluY2lfYWxsX2RlZmNvbmZpZwppbmRleCA2MjUwMzVmLi4yNTE5Y2M1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2RhdmluY2lfYWxsX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2RhdmluY2lfYWxsX2RlZmNvbmZpZwpAQCAtMSwxODM1ICsxLDE5NCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNAotIyBNb24gT2N0IDEyIDE0OjEzOjEyIDIwMDkKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKLUNPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKIENPTkZJR19NT0RWRVJTSU9OUz15Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi1DT05GSUdfTU1VPXkKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfREFWSU5DST15Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19BSU5UQz15Ci1DT05GSUdfQVJDSF9EQVZJTkNJX0RNeD15Ci0KLSMKLSMgVEkgRGFWaW5jaSBJbXBsZW1lbnRhdGlvbnMKLSMKLQotIwotIyBEYVZpbmNpIENvcmUgVHlwZQotIwogQ09ORklHX0FSQ0hfREFWSU5DSV9ETTY0NHg9eQogQ09ORklHX0FSQ0hfREFWSU5DSV9ETTM1NT15CiBDT05GSUdfQVJDSF9EQVZJTkNJX0RNNjQ2eD15Ci0jIENPTkZJR19BUkNIX0RBVklOQ0lfREE4MzAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJX0RBODUwIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0RBVklOQ0lfRE0zNjU9eQotCi0jCi0jIERhVmluY2kgQm9hcmQgVHlwZQotIwotQ09ORklHX01BQ0hfREFWSU5DSV9FVk09eQogQ09ORklHX01BQ0hfU0ZGU0RSPXkKIENPTkZJR19NQUNIX05FVVJPU19PU0QyPXkKLUNPTkZJR19NQUNIX0RBVklOQ0lfRE0zNTVfRVZNPXkKIENPTkZJR19NQUNIX0RNMzU1X0xFT1BBUkQ9eQotQ09ORklHX01BQ0hfREFWSU5DSV9ETTY0NjdfRVZNPXkKLUNPTkZJR19NQUNIX0RBVklOQ0lfRE0zNjVfRVZNPXkKLUNPTkZJR19EQVZJTkNJX01VWD15CiBDT05GSUdfREFWSU5DSV9NVVhfREVCVUc9eQogQ09ORklHX0RBVklOQ0lfTVVYX1dBUk5JTkdTPXkKIENPTkZJR19EQVZJTkNJX1JFU0VUX0NMT0NLUz15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTI2VD15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKLUNPTkZJR19DUFVfUEFCUlRfTEVHQUNZPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXQj15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQotQ09ORklHX0NPTU1PTl9DTEtERVY9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLSMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQogIyBDT05GSUdfT0FCSV9DT01QQVQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19MRURTPXkKLSMgQ09ORklHX0xFRFNfQ1BVIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0jIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9IiIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCi0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi0jIENPTkZJR19WRlAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15Ci0jIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNj1tCi0jIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQotIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2X1NJVD1tCi1DT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15Ci0jIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19ORl9ERUZSQUdfSVBWNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUDZfTkZfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfSVA2X05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPW0KLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPW0KLUNPTkZJR19NVERfQkxLREVWUz1tCiBDT05GSUdfTVREX0JMT0NLPW0KLSMgQ09ORklHX01URF9CTE9DS19STyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9bQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9bQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD1tCiBDT05GSUdfTVREX0NGSV9BTURTVEQ9bQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9bQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD1tCi0jIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkQ9bQotIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9HUElPIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9bQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX0RBVklOQ0k9bQotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPW0KLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MQogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCiBDT05GSUdfRUVQUk9NX0FUMjQ9eQotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9bQotCi0jCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKLSMKLUNPTkZJR19JREVfWEZFUl9NT0RFPXkKLUNPTkZJR19JREVfVElNSU5HUz15Ci0jIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfR0Q9bQotQ09ORklHX0lERV9HRF9BVEE9eQotIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfUFJPQ19GUz15Ci0KLSMKLSMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwotIwotIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKIENPTkZJR19CTEtfREVWX1BBTE1DSElQX0JLMzcxMD1tCi1DT05GSUdfQkxLX0RFVl9JREVETUE9eQotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9bQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9bQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiBDT05GSUdfVFVOPW0KLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKIENPTkZJR19MWFRfUEhZPXkKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAogQ09ORklHX0xTSV9FVDEwMTFDX1BIWT15Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiBDT05GSUdfVElfREFWSU5DSV9FTUFDPXkKIENPTkZJR19ETTkwMDA9eQotQ09ORklHX0RNOTAwMF9ERUJVR0xFVkVMPTQKLSMgQ09ORklHX0RNOTAwMF9GT1JDRV9TSU1QTEVfUEhZX1BPTEwgaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KLSMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQX0FTWU5DPW0KIENPTkZJR19QUFBfU1lOQ19UVFk9bQogQ09ORklHX1BQUF9ERUZMQVRFPW0KLSMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9bQogQ09ORklHX05FVENPTlNPTEU9eQotIyBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRQT0xMPXkKIENPTkZJR19ORVRQT0xMX1RSQVA9eQotQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9bQogQ09ORklHX0lOUFVUX0VWQlVHPW0KLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLSMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0FUS0JEPW0KLSMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfR1BJTz15Ci0jIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTE04MzIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX1hUS0JEPW0KICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NQ1M1MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9XOTBYOTAwIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NSVNDPXkKLSMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URTIgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1lFQUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfQ00xMDkgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVUlOUFVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0dQSU9fUk9UQVJZX0VOQ09ERVIgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0RNMzU1RVZNPW0KLUNPTkZJR19JTlBVVF9ETTM2NUVWTT1tCi0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQogQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKICMgQ09ORklHX1ZUX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MwotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MwotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKIENPTkZJR19JMkNfREFWSU5DST15Ci0jIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CiBDT05GSUdfR1BJT19QQ0Y4NTdYPXkKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEFDOTcgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgZHJpdmVycwotIwotIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05NTI0MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0hUMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX0RBVklOQ0lfV0FUQ0hET0c9bQotCi0jCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CiBDT05GSUdfTUZEX0RNMzU1RVZNX01TUD15Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQogQ09ORklHX0ZCPXkKIENPTkZJR19GSVJNV0FSRV9FRElEPXkKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9EQVZJTkNJPXkKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQogQ09ORklHX0xPR089eQotQ09ORklHX0xPR09fTElOVVhfTU9OTz15Ci1DT05GSUdfTE9HT19MSU5VWF9WR0ExNj15Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKIENPTkZJR19TT1VORD1tCi0jIENPTkZJR19TT1VORF9PU1NfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfU05EPW0KLUNPTkZJR19TTkRfVElNRVI9bQotQ09ORklHX1NORF9QQ009bQotQ09ORklHX1NORF9KQUNLPXkKLSMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQotQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15Ci0jIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9SQVdNSURJX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAotQ09ORklHX1NORF9EUklWRVJTPXkKLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0FSTT15Ci1DT05GSUdfU05EX1VTQj15Ci0jIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAogQ09ORklHX1NORF9TT0M9bQogQ09ORklHX1NORF9EQVZJTkNJX1NPQz1tCi1DT05GSUdfU05EX0RBVklOQ0lfU09DX0kyUz1tCi1DT05GSUdfU05EX0RBVklOQ0lfU09DX01DQVNQPW0KIENPTkZJR19TTkRfREFWSU5DSV9TT0NfRVZNPW0KIENPTkZJR19TTkRfRE02NDY3X1NPQ19FVk09bQotIyBDT05GSUdfU05EX0RBVklOQ0lfU09DX1NGRlNEUiBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1NPQ19JMkNfQU5EX1NQST1tCi0jIENPTkZJR19TTkRfU09DX0FMTF9DT0RFQ1MgaXMgbm90IHNldAotQ09ORklHX1NORF9TT0NfU1BESUY9bQotQ09ORklHX1NORF9TT0NfVExWMzIwQUlDM1g9bQotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9bQotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9bQotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKIENPTkZJR19ISURfQTRURUNIPW0KIENPTkZJR19ISURfQVBQTEU9bQogQ09ORklHX0hJRF9CRUxLSU49bQogQ09ORklHX0hJRF9DSEVSUlk9bQogQ09ORklHX0hJRF9DSElDT05ZPW0KIENPTkZJR19ISURfQ1lQUkVTUz1tCi0jIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0VaS0VZPW0KLSMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj1tCi0jIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPW0KLSMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTUlDUk9TT0ZUPW0KIENPTkZJR19ISURfTU9OVEVSRVk9bQotIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKIENPTkZJR19ISURfUEFOVEhFUkxPUkQ9bQotIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9QRVRBTFlOWD1tCiBDT05GSUdfSElEX1NBTVNVTkc9bQogQ09ORklHX0hJRF9TT05ZPW0KIENPTkZJR19ISURfU1VOUExVUz1tCi0jIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9bQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci1DT05GSUdfVVNCX0RFVklDRV9DTEFTUz15Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049bQotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01VU0JfSERSQz1tCi1DT05GSUdfVVNCX01VU0JfU09DPXkKLQotIwotIyBEYVZpbmNpIDM1eCBhbmQgNjQ0eCBVU0Igc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX01VU0JfSE9TVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01VU0JfUEVSSVBIRVJBTD15Ci0jIENPTkZJR19VU0JfTVVTQl9PVEcgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDPXkKIENPTkZJR19NVVNCX1BJT19PTkxZPXkKLSMgQ09ORklHX1VTQl9NVVNCX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0KLSMKLSMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KLSMKIENPTkZJR19VU0JfU1RPUkFHRT1tCi0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogQ09ORklHX1VTQl9URVNUPW0KLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUPW0KLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVM9eQogQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRlM9eQotQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTIKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUjhBNjY1OTcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9TM0NfSFNPVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xBTkdXRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15CiBDT05GSUdfVVNCX1pFUk89bQotIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRVRIPW0KLUNPTkZJR19VU0JfRVRIX1JORElTPXkKLSMgQ09ORklHX1VTQl9FVEhfRUVNIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VURlM9bQogQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR19TRVJJQUw9bQotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR19QUklOVEVSPW0KIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURT1tCi0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi1DT05GSUdfVVNCX09UR19VVElMUz15Ci0jIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19OT1BfVVNCX1hDRUlWPW0KIENPTkZJR19NTUM9bQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQkxPQ0s9bQogIyBDT05GSUdfTU1DX0JMT0NLX0JPVU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfREFWSU5DST1tCi0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVXX0xFRFM9eQogQ09ORklHX0xFRFNfQ0xBU1M9bQotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0jIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAogQ09ORklHX0xFRFNfR1BJTz1tCi1DT05GSUdfTEVEU19HUElPX1BMQVRGT1JNPXkKLSMgQ09ORklHX0xFRFNfTFAzOTQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCiBDT05GSUdfTEVEU19UUklHR0VSUz15CiBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPW0KLSMgQ09ORklHX0xFRFNfVFJJR0dFUl9JREVfRElTSyBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD1tCi0jIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKLQotIwotIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCi0jCi0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9bQotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RNMzU1RVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogQ09ORklHX1hGU19GUz1tCi0jIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlM0X0ZTPW0KLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9bQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogQ09ORklHX01JTklYX0ZTPW0KLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkZTRD1tCiBDT05GSUdfTkZTRF9WMz15Ci0jIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX0VYUE9SVEZTPW0KLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogQ09ORklHX1NNQl9GUz1tCi0jIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQVNDSUk9bQogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogQ09ORklHX05MU19VVEY4PW0KLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiBDT05GSUdfVElNRVJfU1RBVFM9eQotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQogQ09ORklHX0RFQlVHX1JUX01VVEVYRVM9eQotQ09ORklHX0RFQlVHX1BJX0xJU1Q9eQotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAogIyBDT05GSUdfQVJNX1VOV0lORCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi0jIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLUNPTkZJR19DUkNfQ0NJVFQ9bQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQ19UMTBESUY9bQotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfR0VORVJJQ19BTExPQ0FUT1I9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZGV2a2l0ODAwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2RldmtpdDgwMDBfZGVmY29uZmlnCmluZGV4IGM3YTY4MjAuLjc4NmNiZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZGV2a2l0ODAwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9kZXZraXQ4MDAwX2RlZmNvbmZpZwpAQCAtMSwxOTE0ICsxLDE4NCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjMgotIyBXZWQgTWFyIDI0IDEzOjI3OjI1IDIwMTAKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfSEFWRV9QUk9DX0NQVT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLUNPTkZJR19BUkNIX0hBU19DUFVGUkVRPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEU9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUXzY9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQotQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15Ci1DT05GSUdfS0VSTkVMX0daSVA9eQotIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15CiBDT05GSUdfUkRfQlpJUDI9eQogQ09ORklHX1JEX0xaTUE9eQotIyBDT05GSUdfUkRfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLUNPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9DTEs9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQ9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVkVSU0lPTlM9eQotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotQ09ORklHX0ZSRUVaRVI9eQotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi1DT05GSUdfTU1VPXkKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRE9WRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05VQzkzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSE1PQklMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQNjQ0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1M1UDY0NDIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQVjIxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VODUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05PTUFESUsgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVA9eQotCi0jCi0jIFRJIE9NQVAgSW1wbGVtZW50YXRpb25zCi0jCi1DT05GSUdfQVJDSF9PTUFQX09URz15Ci0jIENPTkZJR19BUkNIX09NQVAxIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX09NQVAyUExVUz15Ci0jIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVAzPXkKLSMgQ09ORklHX0FSQ0hfT01BUDQgaXMgbm90IHNldAotCi0jCi0jIE9NQVAgRmVhdHVyZSBTZWxlY3Rpb25zCi0jCi0jIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUyBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9NVVg9eQotIyBDT05GSUdfT01BUF9NVVhfREVCVUcgaXMgbm90IHNldAotQ09ORklHX09NQVBfTVVYX1dBUk5JTkdTPXkKLUNPTkZJR19PTUFQX01DQlNQPXkKLSMgQ09ORklHX09NQVBfTUJPWF9GV0sgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9NUFVfVElNRVIgaXMgbm90IHNldAogQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKLSMgQ09ORklHX09NQVAzX0wyX0FVWF9TRUNVUkVfU0FWRV9SRVNUT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQXzMyS19USU1FUl9IWj0xMjgKIENPTkZJR19PTUFQX0RNX1RJTUVSPXkKLSMgQ09ORklHX09NQVBfUE1fTk9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9QTV9OT09QPXkKIENPTkZJR19BUkNIX09NQVAzNDMwPXkKLUNPTkZJR19PTUFQX1BBQ0tBR0VfQ1VTPXkKLQotIwotIyBPTUFQIEJvYXJkIFR5cGUKLSMKLSMgQ09ORklHX01BQ0hfT01BUDNfQkVBR0xFIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX0RFVktJVDgwMDA9eQotIyBDT05GSUdfTUFDSF9PTUFQX0xEUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09WRVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUDNFVk0gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQMzUxN0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVAzX1BBTkRPUkEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQM19UT1VDSEJPT0sgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQXzM0MzBTRFAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9OT0tJQV9SWDUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9aT09NMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfWk9PTTMgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DTV9UMzUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9JR0VQMDAyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfMzYzMFNEUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQM19FTVUgaXMgbm90IHNldAotIyBDT05GSUdfT01BUDNfU0RSQ19BQ19USU1JTkcgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVXzMydjZLPXkKLUNPTkZJR19DUFVfVjc9eQotQ09ORklHX0NQVV8zMnY3PXkKLUNPTkZJR19DUFVfQUJSVF9FVjc9eQotQ09ORklHX0NQVV9QQUJSVF9WNz15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y3PXkKLUNPTkZJR19DUFVfQ0FDSEVfVklQVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjY9eQotQ09ORklHX0NQVV9UTEJfVjc9eQotQ09ORklHX0NQVV9IQVNfQVNJRD15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0FSTV9USFVNQkVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAotQ09ORklHX0hBU19UTFNfUkVHPXkKLUNPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NgotQ09ORklHX0NQVV9IQVNfUE1VPXkKLSMgQ09ORklHX0FSTV9FUlJBVEFfNDMwOTczIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSTV9FUlJBVEFfNDU4NjkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSTV9FUlJBVEFfNDYwMDc1IGlzIG5vdCBzZXQKLUNPTkZJR19DT01NT05fQ0xLREVWPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotQ09ORklHX1ZNU1BMSVRfM0c9eQotIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEyOAotIyBDT05GSUdfVEhVTUIyX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLUNPTkZJR19BUkNIX0hBU19IT0xFU19NRU1PUllNT0RFTD15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTAKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci0jIENPTkZJR19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0jIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzIsMTE1MjAwbjggcm9vdD0vZGV2L25mcyBuZnNyb290PTE5Mi4xNjguMS4xOmhvbWUvbmZzcm9vdC9jdXJyZW50LGhvbWUvbmZzcm9vdC9jdXJyZW50IGlwPWRoY3Agcncgbm9pbml0cmQgcm9vdCAgZGVsYXk9MyIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CiBDT05GSUdfVkZQPXkKLUNPTkZJR19WRlB2Mz15CiBDT05GSUdfTkVPTj15Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkQ9eQotQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15Ci0jIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAotQ09ORklHX1BNX09QUz15Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX05FVF9LRVk9eQotIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKIENPTkZJR19JUF9QTlBfUkFSUD15Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAogQ09ORklHX0lSREE9eQotCi0jCi0jIElyREEgcHJvdG9jb2xzCi0jCi0jIENPTkZJR19JUkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkNPTU0gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQV9VTFRSQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSXJEQSBvcHRpb25zCi0jCi0jIENPTkZJR19JUkRBX0NBQ0hFX0xBU1RfTFNBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBX0ZBU1RfUlIgaXMgbm90IHNldAotIyBDT05GSUdfSVJEQV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5mcmFyZWQtcG9ydCBkZXZpY2UgZHJpdmVycwotIwotCi0jCi0jIFNJUiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfSVJUVFlfU0lSIGlzIG5vdCBzZXQKLQotIwotIyBEb25nbGUgc3VwcG9ydAotIwotIyBDT05GSUdfS0lOR1NVTl9ET05HTEUgaXMgbm90IHNldAotIyBDT05GSUdfS1NEQVpaTEVfRE9OR0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTOTU5X0RPTkdMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRklSIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUdNQVRFTF9GSVIgaXMgbm90IHNldAotIyBDT05GSUdfTUNTX0ZJUiBpcyBub3Qgc2V0CiBDT05GSUdfQlQ9eQotIyBDT05GSUdfQlRfTDJDQVAgaXMgbm90IHNldAotIyBDT05GSUdfQlRfU0NPIGlzIG5vdCBzZXQKLQotIwotIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0JUX0hDSUJUVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJUU0RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lVQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJDTTIwM1ggaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQlBBMTBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJGVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSVZIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQlRfTVJWTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15CiAjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKIENPTkZJR19NVERfUkFNPXkKIENPTkZJR19NVERfUk9NPXkKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAotIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkQ9eQotIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORF9PTUFQMj15Ci1DT05GSUdfTVREX05BTkRfT01BUF9QUkVGRVRDSD15Ci0jIENPTkZJR19NVERfTkFORF9PTUFQX1BSRUZFVENIX0RNQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfSURTPXkKLSMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKIENPTkZJR19NVERfVUJJPXkKLUNPTkZJR19NVERfVUJJX1dMX1RIUkVTSE9MRD00MDk2Ci1DT05GSUdfTVREX1VCSV9CRUJfUkVTRVJWRT0xCi0jIENPTkZJR19NVERfVUJJX0dMVUVCSSBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIGRlYnVnZ2luZyBvcHRpb25zCi0jCi0jIENPTkZJR19NVERfVUJJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYwCi0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfU0NTSV9NT0Q9eQotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfVElfREFWSU5DSV9FTUFDIGlzIG5vdCBzZXQKIENPTkZJR19ETTkwMDA9eQotQ09ORklHX0RNOTAwMF9ERUJVR0xFVkVMPTQKIENPTkZJR19ETTkwMDBfRk9SQ0VfU0lNUExFX1BIWV9QT0xMPXkKLSMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU4gaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLSMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAotQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9NQVRSSVg9eQotIyBDT05GSUdfS0VZQk9BUkRfTE04MzIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX1RXTDQwMzA9eQotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CiBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9EWU5BUFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VFVEkgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUNTNTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVzkwWDkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci1DT05GSUdfU0VSSU9fTElCUFMyPXkKIENPTkZJR19TRVJJT19SQVc9eQotIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CiBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CiBDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKIENPTkZJR19TRVJJQUxfODI1MF9SU0E9eQotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiBDT05GSUdfUkFXX0RSSVZFUj15Ci1DT05GSUdfTUFYX1JBV19ERVZTPTI1NgotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogQ09ORklHX0kyQ19PTUFQPXkKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1hJTElOWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogQ09ORklHX1NQST15Ci0jIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NQSV9NQVNURVI9eQotCi0jCi0jIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfU1BJX09NQVAyNFhYPXkKLSMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAotIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCi0jIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX0lUODc2MUUgaXMgbm90IHNldAotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CiBDT05GSUdfR1BJT19UV0w0MDMwPXkKLSMgQ09ORklHX0dQSU9fQURQNTU4OCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0Ci0KLSMKLSMgQUM5NyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi1DT05GSUdfTUZEX0NPUkU9eQotIyBDT05GSUdfTUZEXzg4UE04NjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0kyQ1BMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiBDT05GSUdfVFdMNDAzMF9DT1JFPXkKIENPTkZJR19UV0w0MDMwX1BPV0VSPXkKLUNPTkZJR19UV0w0MDMwX0NPREVDPXkKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9NQVg4OTI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004OTk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfUkVHVUxBVE9SPXkKLSMgQ09ORklHX1JFR1VMQVRPUl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfTUFYMTU4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfTUFYODY0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfTUFYODY2MCBpcyBub3Qgc2V0CiBDT05GSUdfUkVHVUxBVE9SX1RXTDQwMzA9eQotIyBDT05GSUdfUkVHVUxBVE9SX0xQMzk3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwMjMgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAogQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOPXkKLUNPTkZJR19GQl9CT1RIX0VORElBTj15Ci0jIENPTkZJR19GQl9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0xJVFRMRV9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9PTUFQX0JPT1RMT0FERVJfSU5JVD15Ci1DT05GSUdfT01BUDJfVlJBTT15Ci1DT05GSUdfT01BUDJfVlJGQj15CiBDT05GSUdfT01BUDJfRFNTPXkKLUNPTkZJR19PTUFQMl9WUkFNX1NJWkU9MAotQ09ORklHX09NQVAyX0RTU19ERUJVR19TVVBQT1JUPXkKLSMgQ09ORklHX09NQVAyX0RTU19DT0xMRUNUX0lSUV9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQMl9EU1NfUkZCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUDJfRFNTX1ZFTkM9eQotIyBDT05GSUdfT01BUDJfRFNTX1NESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQMl9EU1NfRFNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVAyX0RTU19GQUtFX1ZTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQMl9EU1NfTUlOX0ZDS19QRVJfUENLPTAKIENPTkZJR19GQl9PTUFQMj15Ci1DT05GSUdfRkJfT01BUDJfREVCVUdfU1VQUE9SVD15Ci1DT05GSUdfRkJfT01BUDJfTlVNX0ZCUz0zCi0KLSMKLSMgT01BUDIvMyBEaXNwbGF5IERldmljZSBEcml2ZXJzCi0jCiBDT05GSUdfUEFORUxfR0VORVJJQz15Ci0jIENPTkZJR19QQU5FTF9TSEFSUF9MUzAzN1Y3RFcwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQU5FTF9TSEFSUF9MUTA0M1QxREcwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQU5FTF9UT1BQT0xZX1RETzM1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQU5FTF9UUE9fVEQwNDNNVEVBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ESVNQTEFZX1NVUFBPUlQ9eQotCi0jCi0jIERpc3BsYXkgaGFyZHdhcmUgZHJpdmVycwotIwotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlk9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9OVF84eDg9eQotQ09ORklHX0ZPTlRfOHgxNj15CiBDT05GSUdfTE9HTz15CiAjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAogIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKIENPTkZJR19TT1VORD15Ci0jIENPTkZJR19TT1VORF9PU1NfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfU05EPXkKLUNPTkZJR19TTkRfVElNRVI9eQotQ09ORklHX1NORF9QQ009eQotQ09ORklHX1NORF9KQUNLPXkKLSMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQotQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15Ci0jIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9SQVdNSURJX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAotQ09ORklHX1NORF9EUklWRVJTPXkKLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0FSTT15Ci1DT05GSUdfU05EX1NQST15Ci1DT05GSUdfU05EX1VTQj15Ci0jIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9VU0JfVUExMDEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1VTQl9DQUlBUSBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1NPQz15CiBDT05GSUdfU05EX09NQVBfU09DPXkKLUNPTkZJR19TTkRfT01BUF9TT0NfTUNCU1A9eQogQ09ORklHX1NORF9PTUFQX1NPQ19PTUFQM19CRUFHTEU9eQotQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9eQotIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU09DX1RXTDQwMzA9eQotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi0jIENPTkZJR19ISURfM01fUENUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX01PU0FSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfTU9OVEVSRVkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9PUlRFSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9RVUFOVEEgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NUQU5UVU0gaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQogQ09ORklHX1VTQl9ERUJVRz15CiBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCi0jIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotQ09ORklHX1VTQl9PVEc9eQogIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRD15CiBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTVVTQl9IRFJDPXkKLUNPTkZJR19VU0JfTVVTQl9TT0M9eQotCi0jCi0jIE9NQVAgMzQzeCBoaWdoIHNwZWVkIFVTQiBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfTVVTQl9IT1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX1BFUklQSEVSQUwgaXMgbm90IHNldAogQ09ORklHX1VTQl9NVVNCX09URz15CiBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkM9eQotQ09ORklHX1VTQl9NVVNCX0hEUkNfSENEPXkKLSMgQ09ORklHX01VU0JfUElPX09OTFkgaXMgbm90IHNldAotQ09ORklHX1VTQl9JTlZFTlRSQV9ETUE9eQotIyBDT05GSUdfVVNCX1RJX0NQUElfRE1BIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTVVTQl9ERUJVRz15Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotCi0jCi0jIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9bQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVQ9eQogQ09ORklHX1VTQl9HQURHRVRfREVCVUc9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgotQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9SOEE2NjU5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEFOR1dFTEwgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKLSMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VUSD15CitDT05GSUdfVVNCX0VUSD1tCiAjIENPTkZJR19VU0JfRVRIX1JORElTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FVEhfRUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NQVNTX1NUT1JBR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX05PS0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX01VTFRJIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLUNPTkZJR19VU0JfT1RHX1VUSUxTPXkKLSMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAotIyBDT05GSUdfSVNQMTMwMV9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VTFBJIGlzIG5vdCBzZXQKIENPTkZJR19UV0w0MDMwX1VTQj15Ci0jIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQotIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwogQ09ORklHX01NQ19TREhDST15CiBDT05GSUdfTU1DX1NESENJX1BMVEZNPW0KLSMgQ09ORklHX01NQ19PTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfT01BUF9IUz15CiBDT05GSUdfTU1DX1NQST1tCi0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVXX0xFRFM9eQogQ09ORklHX0xFRFNfQ0xBU1M9eQotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0jIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAogQ09ORklHX0xFRFNfR1BJTz15Ci1DT05GSUdfTEVEU19HUElPX1BMQVRGT1JNPXkKLSMgQ09ORklHX0xFRFNfTFAzOTQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX0RBQzEyNFMwODUgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19CRDI4MDIgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19MVDM1OTMgaXMgbm90IHNldAogQ09ORklHX0xFRFNfVFJJR0dFUlM9eQotCi0jCi0jIExFRCBUcmlnZ2VycwotIwotIyBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKLSMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19UUklHR0VSX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT04gaXMgbm90IHNldAotCi0jCi0jIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKLSMKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfVFdMNDAzMD15Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBDQlVTIHN1cHBvcnQKLSMKLSMgQ09ORklHX0NCVVMgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15CiBDT05GSUdfUVVPVEE9eQotIyBDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0UgaXMgbm90IHNldAotQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkc9eQotQ09ORklHX1FVT1RBX1RSRUU9eQotIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0CiBDT05GSUdfUUZNVF9WMj15Ci1DT05GSUdfUVVPVEFDVEw9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKIENPTkZJR19VQklGU19GUz15Ci0jIENPTkZJR19VQklGU19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQklGU19GU19BRFZBTkNFRF9DT01QUiBpcyBub3Qgc2V0Ci1DT05GSUdfVUJJRlNfRlNfTFpPPXkKLUNPTkZJR19VQklGU19GU19aTElCPXkKLSMgQ09ORklHX1VCSUZTX0ZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0VQSF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKIENPTkZJR19QUklOVEtfVElNRT15Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDPXkKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTEKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fVU5XSU5EPXkKIENPTkZJR19ERUJVR19VU0VSPXkKIENPTkZJR19ERUJVR19FUlJPUlM9eQotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAotIyBDT05GSUdfT0NfRVRNIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLUNPTkZJR19DUllQVE9fQ1JDMzJDPXkKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLUNPTkZJR19DUllQVE9fREVGTEFURT15Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0xaTz15Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotQ09ORklHX0NSQ19DQ0lUVD15Ci1DT05GSUdfQ1JDMTY9eQogQ09ORklHX0NSQ19UMTBESUY9bQotQ09ORklHX0NSQ19JVFVfVD1tCi1DT05GSUdfQ1JDMzI9eQotQ09ORklHX0NSQzc9bQogQ09ORklHX0xJQkNSQzMyQz15Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0xaT19DT01QUkVTUz15Ci1DT05GSUdfTFpPX0RFQ09NUFJFU1M9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfREVDT01QUkVTU19CWklQMj15Ci1DT05GSUdfREVDT01QUkVTU19MWk1BPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2RvdmVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9kb3ZlX2RlZmNvbmZpZwppbmRleCBiN2IyYWIwLi45MzU5ZTFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2RvdmVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZG92ZV9kZWZjb25maWcKQEAgLTEsMTYxOSArMSwxMzcgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzYKLSMgVHVlIE5vdiAyNCAxMzo1MzozNyAyMDA5Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi1DT05GSUdfTU1VPXkKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0RPVkU9eQotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFydmVsbCBEb3ZlIEltcGxlbWVudGF0aW9ucwotIwogQ09ORklHX01BQ0hfRE9WRV9EQj15Ci1DT05GSUdfUExBVF9PUklPTj15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKIENPTkZJR19DUFVfVjY9eQogQ09ORklHX0NQVV8zMnY2Sz15Ci1DT05GSUdfQ1BVXzMydjY9eQotQ09ORklHX0NQVV9BQlJUX0VWNj15Ci1DT05GSUdfQ1BVX1BBQlJUX1Y2PXkKLUNPTkZJR19DUFVfQ0FDSEVfVjY9eQotQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKLUNPTkZJR19DUFVfQ09QWV9WNj15Ci1DT05GSUdfQ1BVX1RMQl9WNj15Ci1DT05GSUdfQ1BVX0hBU19BU0lEPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfT1VURVJfQ0FDSEU9eQotQ09ORklHX0NBQ0hFX1RBVVJPUzI9eQotQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD01Ci0jIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15Ci1DT05GSUdfT0FCSV9DT01QQVQ9eQotIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSIiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwotIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotIyBDT05GSUdfRlBFX05XRlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKIENPTkZJR19WRlA9eQotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQotQ09ORklHX0lORVRfTFJPPXkKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQotQ09ORklHX01URF9HRU5fUFJPQkU9eQogQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQotQ09ORklHX01URF9DRklfTk9TV0FQPXkKLSMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQogIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci0jIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9TVEFBPXkKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci0jIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9JTVBBNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX00yNVA4MD15Ci1DT05GSUdfTTI1UFhYX1VTRV9GQVNUX1JFQUQ9eQotIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwogQ09ORklHX01URF9VQkk9eQotQ09ORklHX01URF9VQklfV0xfVEhSRVNIT0xEPTQwOTYKLUNPTkZJR19NVERfVUJJX0JFQl9SRVNFUlZFPTEKLSMgQ09ORklHX01URF9VQklfR0xVRUJJIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgZGVidWdnaW5nIG9wdGlvbnMKLSMKLSMgQ09ORklHX01URF9VQklfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xCi1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKLSMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQotQ09ORklHX1NBVEFfUE1QPXkKLSMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfU0ZGPXkKLSMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX01WPXkKLSMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAotIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogQ09ORklHX01WNjQzWFhfRVRIPXkKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfUE9MTERFVj15Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci0jIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRT15CiAjIENPTkZJR19NT1VTRV9QUzIgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVY2NFhYWD15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKIENPTkZJR19TUEk9eQotIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TUElfTUFTVEVSPXkKLQotIwotIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAogQ09ORklHX1NQSV9PUklPTj15Ci0KLSMKLSMgU1BJIFByb3RvY29sIE1hc3RlcnMKLSMKLSMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNldAotCi0jCi0jIEFDOTcgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLUNPTkZJR19WR0FfQVJCPXkKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLSMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRD15CiBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQogQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKLSMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLQotIwotIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwotIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0Ci0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX01WPXkKIENPTkZJR19ETUFERVZJQ0VTPXkKLQotIwotIyBETUEgRGV2aWNlcwotIwogQ09ORklHX01WX1hPUj15Ci1DT05GSUdfRE1BX0VOR0lORT15Ci0KLSMKLSMgRE1BIENsaWVudHMKLSMKLSMgQ09ORklHX05FVF9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfQVNZTkNfVFhfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQotIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwogQ09ORklHX0lTTzk2NjBfRlM9eQogQ09ORklHX0pPTElFVD15Ci0jIENPTkZJR19aSVNPRlMgaXMgbm90IHNldAogQ09ORklHX1VERl9GUz1tCi1DT05GSUdfVURGX05MUz15Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VCSUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQogQ09ORklHX05MU19JU084ODU5XzI9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfVVRGOD15Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKICMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogQ09ORklHX1RJTUVSX1NUQVRTPXkKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotQ09ORklHX0ZUUkFDRT15Ci0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQotIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fVU5XSU5EPXkKIENPTkZJR19ERUJVR19VU0VSPXkKIENPTkZJR19ERUJVR19FUlJPUlM9eQotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19OVUxMPXkKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKIENPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj1tCi0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotQ09ORklHX0NSWVBUT19DUkMzMkM9eQotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ0PXkKIENPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fU0hBMT15CiBDT05GSUdfQ1JZUFRPX1NIQTI1Nj15CiBDT05GSUdfQ1JZUFRPX1NIQTUxMj15Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwogQ09ORklHX0NSWVBUT19BRVM9eQotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPXkKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1RFQT15CiBDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9eQotQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj15Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKIENPTkZJR19DUllQVE9fREVGTEFURT15Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0xaTz15Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0NSWVBUT19ERVZfTVZfQ0VTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQogQ09ORklHX0NSQzE2PXkKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotQ09ORklHX0NSQ19JVFVfVD1tCi1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiBDT05GSUdfTElCQ1JDMzJDPXkKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfTFpPX0NPTVBSRVNTPXkKLUNPTkZJR19MWk9fREVDT01QUkVTUz15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9lYnNhMTEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZWJzYTExMF9kZWZjb25maWcKaW5kZXggZDVlODI3OS4uYzMxOTQxOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9lYnNhMTEwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2Vic2ExMTBfZGVmY29uZmlnCkBAIC0xLDc0NyArMSw3NSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazIKLSMgU3VuIE1hciAyNyAxODoyOTo0OCAyMDA1Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19JT01BUD15Ci0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VCU0ExMTA9eQotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX1NBMTEwPXkKLUNPTkZJR19DUFVfMzJ2ND15Ci1DT05GSUdfQ1BVX0FCUlRfRVY0PXkKLUNPTkZJR19DUFVfQ0FDSEVfVjRXQj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQj15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLUNPTkZJR19JU0E9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKIENPTkZJR19QQ0NBUkQ9bQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUE9bQotCi0jCi0jIFBDLWNhcmQgYnJpZGdlcwotIwogQ09ORklHX0k4MjM2NT1tCi0jIENPTkZJR19UQ0lDIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUFfUFJPQkU9eQotQ09ORklHX1BDQ0FSRF9OT05TVEFUSUM9bQotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiBDT05GSUdfTEVEUz15Ci1DT05GSUdfTEVEU19USU1FUj15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJyb290PS9kZXYvbmZzIHJ3IG1lbT0xNk0gY29uc29sZT10dHlTMSwzODQwMG44IgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CiBDT05GSUdfRlBFX0ZBU1RGUEU9eQotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQogQ09ORklHX0JJTkZNVF9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1BBUlBPUlQ9eQotQ09ORklHX1BBUlBPUlRfUEM9eQotQ09ORklHX1BBUlBPUlRfUENfRklGTz15Ci0jIENPTkZJR19QQVJQT1JUX1BDX1NVUEVSSU8gaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVF9QQ19QQ01DSUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVF9BUkMgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVF9HU0MgaXMgbm90IHNldAotQ09ORklHX1BBUlBPUlRfMTI4ND15Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QTlAgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9YRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJJREUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29ya2luZyBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKLSMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKIENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVM9eQotQ09ORklHX0lQX1JPVVRFX0ZXTUFSSz15Ci0jIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEggaXMgbm90IHNldAogQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfVENQRElBRz15Ci1DT05GSUdfSVBfVENQRElBR19JUFY2PXkKLQotIwotIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogQ09ORklHX0lQVjY9eQotIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0s9eQotIyBDT05GSUdfSVBfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9DVF9QUk9UT19TQ1RQIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9GVFA9eQotQ09ORklHX0lQX05GX0lSQz15Ci0jIENPTkZJR19JUF9ORl9URlRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0FNQU5EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9eQotQ09ORklHX0lQX05GX01BVENIX0xJTUlUPXkKLUNPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPXkKLUNPTkZJR19JUF9ORl9NQVRDSF9NQUM9eQotQ09ORklHX0lQX05GX01BVENIX1BLVFRZUEU9eQotQ09ORklHX0lQX05GX01BVENIX01BUks9eQotQ09ORklHX0lQX05GX01BVENIX01VTFRJUE9SVD15Ci1DT05GSUdfSVBfTkZfTUFUQ0hfVE9TPXkKLUNPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9eQogQ09ORklHX0lQX05GX01BVENIX0VDTj15Ci1DT05GSUdfSVBfTkZfTUFUQ0hfRFNDUD15Ci1DT05GSUdfSVBfTkZfTUFUQ0hfQUhfRVNQPXkKLUNPTkZJR19JUF9ORl9NQVRDSF9MRU5HVEg9eQogQ09ORklHX0lQX05GX01BVENIX1RUTD15Ci1DT05GSUdfSVBfTkZfTUFUQ0hfVENQTVNTPXkKLUNPTkZJR19JUF9ORl9NQVRDSF9IRUxQRVI9eQotQ09ORklHX0lQX05GX01BVENIX1NUQVRFPXkKLUNPTkZJR19JUF9ORl9NQVRDSF9DT05OVFJBQ0s9eQotIyBDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFUQ0hfUkVBTE0gaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfRklMVEVSPXkKIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPXkKIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HPXkKLSMgQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9UQVJHRVRfVENQTVNTPXkKLUNPTkZJR19JUF9ORl9OQVQ9eQotQ09ORklHX0lQX05GX05BVF9ORUVERUQ9eQotQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPXkKLUNPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9eQotQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9eQotQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FPXkKLSMgQ09ORklHX0lQX05GX05BVF9TTk1QX0JBU0lDIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9OQVRfSVJDPXkKLUNPTkZJR19JUF9ORl9OQVRfRlRQPXkKIENPTkZJR19JUF9ORl9NQU5HTEU9eQotQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9eQogQ09ORklHX0lQX05GX1RBUkdFVF9FQ049eQotQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQPXkKLUNPTkZJR19JUF9ORl9UQVJHRVRfTUFSSz15Ci1DT05GSUdfSVBfTkZfVEFSR0VUX0NMQVNTSUZZPXkKLSMgQ09ORklHX0lQX05GX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUDZfTkZfUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0lQNl9ORl9JUFRBQkxFUz15Ci1DT05GSUdfSVA2X05GX01BVENIX0xJTUlUPXkKLUNPTkZJR19JUDZfTkZfTUFUQ0hfTUFDPXkKLUNPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9eQotQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPXkKIENPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz15CitDT05GSUdfSVA2X05GX01BVENIX09QVFM9eQogQ09ORklHX0lQNl9ORl9NQVRDSF9ITD15Ci1DT05GSUdfSVA2X05GX01BVENIX01VTFRJUE9SVD15Ci0jIENPTkZJR19JUDZfTkZfTUFUQ0hfT1dORVIgaXMgbm90IHNldAotQ09ORklHX0lQNl9ORl9NQVRDSF9NQVJLPXkKLSMgQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUDZfTkZfTUFUQ0hfQUhFU1A9eQotQ09ORklHX0lQNl9ORl9NQVRDSF9MRU5HVEg9eQotIyBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0IGlzIG5vdCBzZXQKK0NPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9eQogQ09ORklHX0lQNl9ORl9GSUxURVI9eQotIyBDT05GSUdfSVA2X05GX1RBUkdFVF9MT0cgaXMgbm90IHNldAogQ09ORklHX0lQNl9ORl9NQU5HTEU9eQotQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFSSz15Ci0jIENPTkZJR19JUDZfTkZfUkFXIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX0ZXX0xPQURFUj1tCitDT05GSUdfUEFSUE9SVD15CitDT05GSUdfUEFSUE9SVF9QQz15CitDT05GSUdfUEFSUE9SVF9QQ19GSUZPPXkKK0NPTkZJR19QQVJQT1JUXzEyODQ9eQorQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0CiBDT05GSUdfQVJNX0FNNzlDOTYxQT15Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTEFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9TTUMgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAotIyBDT05GSUdfQVQxNzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JU0EgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX05FVF9QQ01DSUE9eQotIyBDT05GSUdfUENNQ0lBXzNDNTg5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV8zQzU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfRk1WSjE4WCBpcyBub3Qgc2V0CiBDT05GSUdfUENNQ0lBX1BDTkVUPW0KLSMgQ09ORklHX1BDTUNJQV9OTUNMQU4gaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1NNQzkxQzkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9YSVJDMlBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9BWE5FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTElQIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9bQotIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKIENPTkZJR19QUFBfQVNZTkM9bQotIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKIENPTkZJR19QUFBfREVGTEFURT1tCiBDT05GSUdfUFBQX0JTRENPTVA9bQotIyBDT05GSUdfUFBQT0UgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfR0FNRVBPUlQ9eQotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF84MjUwX0NTPW0KLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiBDT05GSUdfUFJJTlRFUj1tCi0jIENPTkZJR19MUF9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEFSIGlzIG5vdCBzZXQKLQotIwotIyBJUE1JCi0jCi0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCiBDT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCiBDT05GSUdfU09GVF9XQVRDSERPRz15Ci0KLSMKLSMgSVNBLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19QQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JWENPTVdEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCi0jIENPTkZJR19EUk0gaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBYRlMgc3VwcG9ydAotIwotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSU5JWF9GUz15Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9eQotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX01JTklYX0ZTPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTVNET1NfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQ1JDX0NDSVRUPW0KLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT1tCi1DT05GSUdfWkxJQl9ERUZMQVRFPW0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZWNiYXQ5MV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2VjYmF0OTFfZGVmY29uZmlnCmluZGV4IDI1ZGQ1M2IuLjZiYjZhYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZWNiYXQ5MV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9lY2JhdDkxX2RlZmNvbmZpZwpAQCAtMSwxMzEzICsxLDk5IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjItcmM0Ci0jIFNhdCBKdW4gIDkgMDE6MzA6MTggMjAwNwotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci0jIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUyBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIwotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9BVDkxPXkKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotCi0jCi0jIEF0bWVsIEFUOTEgU3lzdGVtLW9uLUNoaXAKLSMKLUNPTkZJR19BUkNIX0FUOTFSTTkyMDA9eQotIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05MjYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxU0FNOVJMIGlzIG5vdCBzZXQKLQotIwotIyBBVDkxUk05MjAwIEJvYXJkIFR5cGUKLSMKLSMgQ09ORklHX01BQ0hfT05FQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMERLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQVQ5MVJNOTIwMEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ1NCMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ1NCNjM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ0FSTUVWQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0FURUI5MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfS0I5MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfUElDT1RVWDJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0tBRkEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DSFVCIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX0VDQkFUOTE9eQotCi0jCi0jIEFUOTEgQm9hcmQgT3B0aW9ucwotIwotIyBDT05GSUdfTVREX0FUOTFfREFUQUZMQVNIX0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEFUOTEgRmVhdHVyZSBTZWxlY3Rpb25zCi0jCiBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTPXkKLSMgQ09ORklHX0FUTUVMX1RDTElCIGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9BUk05MjBUPXkKLUNPTkZJR19DUFVfMzJ2NFQ9eQotQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQotQ09ORklHX0NQVV9DQUNIRV9WNFdUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXQj15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwogQ09ORklHX1BDQ0FSRD15Ci0jIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQT15Ci1DT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKLUNPTkZJR19QQ01DSUFfSU9DVEw9eQotCi0jCi0jIFBDLWNhcmQgYnJpZGdlcwotIwogQ09ORklHX0FUOTFfQ0Y9eQotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMDAKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0xFRFM9eQotQ09ORklHX0xFRFNfVElNRVI9eQogQ09ORklHX0xFRFNfQ1BVPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJyb290ZnN0eXBlPXJlaXNlcmZzIHJvb3Q9L2Rldi9tbWNibGswcDEgY29uc29sZT10dHlTMCwxMTUyMDBuOCByb290ZGVsYXk9MSIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15Ci0jIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX05FVF9TQ0hfRklGTz15Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCiBDT05GSUdfQ0ZHODAyMTE9eQotQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfTUFDODAyMTE9eQotIyBDT05GSUdfTUFDODAyMTFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMT15Ci0jIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9eQotIyBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVAgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVAgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPXkKLUNPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRz15Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKLUNPTkZJR19GV19MT0FERVI9eQotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9BRlNfUEFSVFM9eQotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKIENPTkZJR19NVERfREFUQUZMQVNIPXkKLSMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QTlBBQ1BJIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgU0NTSSBhZGFwdGVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDTUNJQV9BSEExNTJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9GRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9OSU5KQV9TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9RTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1NZTTUzQzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCi0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQogQ09ORklHX0FSTV9BVDkxX0VUSEVSPXkKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVF9NSUkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPXkKIENPTkZJR19QUFBfTVVMVElMSU5LPXkKIENPTkZJR19QUFBfRklMVEVSPXkKIENPTkZJR19QUFBfQVNZTkM9eQotIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9eQotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9BVE1FTD15CiBDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19TUEk9eQorQ09ORklHX1NQSV9CSVRCQU5HPXkKIENPTkZJR19XQVRDSERPRz15CiBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUOTFSTTkyMDBfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9TUEkgaXMgbm90IHNldAotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NIQVJERVY9eQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi1DT05GSUdfSTJDX0FMR09CSVQ9eQotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotQ09ORklHX0kyQ19HUElPPXkKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotQ09ORklHX1NQST15Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1NQSV9BVE1FTCBpcyBub3Qgc2V0Ci1DT05GSUdfU1BJX0JJVEJBTkc9eQotQ09ORklHX1NQSV9BVDkxPXkKLQotIwotIyBTUEkgUHJvdG9jb2wgTWFzdGVycwotIwotIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cwotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjIGRldmljZXMKLSMKLSMgQ09ORklHX0JMSU5LIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotCi0jCi0jIExFRCBkZXZpY2VzCi0jCi1DT05GSUdfTkVXX0xFRFM9eQotQ09ORklHX0xFRFNfQ0xBU1M9eQotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCi0jIENPTkZJR19MRURTX1RSSUdHRVJTIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIEhJRCBEZXZpY2VzCi0jCi1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKICMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15CiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUFJJTlRFUj15Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKIENPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwogQ09ORklHX1VTQl9HQURHRVQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9BVDkxPXkKLUNPTkZJR19VU0JfQVQ5MT15Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAogQ09ORklHX01NQz15CiBDT05GSUdfTU1DX0RFQlVHPXkKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLQotIwotIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQVQ5MT15Ci0KLSMKLSMgUmVhbCBUaW1lIENsb2NrCi0jCi1DT05GSUdfUlRDX0xJQj15CitDT05GSUdfTU1DX0FUOTE9bQorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKIENPTkZJR19SVENfQ0xBU1M9eQogIyBDT05GSUdfUlRDX0hDVE9TWVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX0FUOTFSTTkyMDA9eQotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQogQ09ORklHX1JFSVNFUkZTX0ZTPXkKLSMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQogQ09ORklHX0NPTkZJR0ZTX0ZTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiBDT05GSUdfTkZTX1YzX0FDTD15CiBDT05GSUdfTkZTX1Y0PXkKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogQ09ORklHX0RFQlVHX1VTRVI9eQotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX1NIQTE9eQotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0VDQj15Ci1DT05GSUdfQ1JZUFRPX0NCQz15CiBDT05GSUdfQ1JZUFRPX1BDQkM9eQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQUVTPXkKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FSQzQ9eQotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfQ1JDX0NDSVRUPXkKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0NSWVBUT19TSEExPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZWRiNzIxMV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2VkYjcyMTFfZGVmY29uZmlnCmluZGV4IGUzYTZjZDMuLjdiNjJiZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZWRiNzIxMV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9lZGI3MjExX2RlZmNvbmZpZwpAQCAtMSw1NzMgKzEsMjcgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCi0jIFN1biBNYXIgMjcgMjE6NDg6MTIgMjAwNQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSU9NQVA9eQotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCi0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwotIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9DTFBTNzExWD15Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0xQUzcxMVgvRVA3MjFYIEltcGxlbWVudGF0aW9ucwotIwotIyBDT05GSUdfQVJDSF9BVVRDUFUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NEQjg5NzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0VJVkEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTEVQNzMxMiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FREI3MjExPXkKLSMgQ09ORklHX0FSQ0hfUDcyMFQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT1JUVU5FVCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FUDcyMTE9eQotIyBDT05GSUdfRVA3MlhYX1JPTV9CT09UIGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9BUk03MjBUPXkKLUNPTkZJR19DUFVfMzJ2ND15Ci1DT05GSUdfQ1BVX0FCUlRfTFY0VD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y0PXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdUPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi1DT05GSUdfSVNBPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfRElTQ09OVElHTUVNPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSIiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKLSMgQ09ORklHX0ZQRV9OV0ZQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCi0jIENPTkZJR19NVEQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QTlAgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9YRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29ya2luZyBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1RDUERJQUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCi0jIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCi0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKIENPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19TT1VORF9HQU1FUE9SVD15Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX0NMUFM3MTFYPXkKIENPTkZJR19TRVJJQUxfQ0xQUzcxMVhfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCi0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCi0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBYRlMgc3VwcG9ydAotIwotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19NSU5JWF9GUz15Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfU1lTRlM9eQotIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCi0jIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTVNET1NfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15CiBDT05GSUdfREVCVUdfVVNFUj15Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCi0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9lbV94MjcwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZW1feDI3MF9kZWZjb25maWcKaW5kZXggMmJlZTkzMi4uZDdkYjM0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9lbV94MjcwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2VtX3gyNzBfZGVmY29uZmlnCkBAIC0xLDExNDAgKzEsMTMyIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmMyCi0jIFN1biBGZWIgIDEgMTY6NDM6MzEgMjAwOQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfQVJDSF9NVERfWElQPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci0jIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX0ZSRUVaRVI9eQotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9QWEE9eQotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKLSMKLSMgQ09ORklHX0FSQ0hfR1VNU1RJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0lOVEVMTU9URTIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NQUlOU1RPTkUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NUDkwMEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfSURQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVklQRVIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfRVNFUklFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUklaRVBTX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0g1MDAwIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX0VNX1gyNzA9eQogQ09ORklHX01BQ0hfRVhFREE9eQotIyBDT05GSUdfTUFDSF9DT0xJQlJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfWllMT05JVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9MSVRUTEVUT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9UQVZPUkVWQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1NBQVIgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9BUk1DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ01fWDMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01BR0lDSUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTUlPQTcwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1BDTTAyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQV9QQUxNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BYQV9FWlggaXMgbm90IHNldAotQ09ORklHX1BYQTI3eD15Ci1DT05GSUdfUFhBX1NTUD15Ci0jIENPTkZJR19QWEFfUFdNIGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9YU0NBTEU9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUPXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci1DT05GSUdfSVdNTVhUPXkKLUNPTkZJR19YU0NBTEVfUE1VPXkKLUNPTkZJR19DT01NT05fQ0xLREVWPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0icm9vdD0xZjAzIG1lbT0zMk0iCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwogQ09ORklHX0NQVV9GUkVRPXkKLUNPTkZJR19DUFVfRlJFUV9UQUJMRT15Ci0jIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfU1RBVD15Ci0jIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFMgaXMgbm90IHNldAotQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFPXkKLSMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQotIyBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT1tCi0jIENPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkQ9eQotQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CiBDT05GSUdfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAogQ09ORklHX0JUPW0KIENPTkZJR19CVF9MMkNBUD1tCiBDT05GSUdfQlRfU0NPPW0KIENPTkZJR19CVF9SRkNPTU09bQotIyBDT05GSUdfQlRfUkZDT01NX1RUWSBpcyBub3Qgc2V0CiBDT05GSUdfQlRfQk5FUD1tCi0jIENPTkZJR19CVF9CTkVQX01DX0ZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUiBpcyBub3Qgc2V0CiBDT05GSUdfQlRfSElEUD1tCi0KLSMKLSMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCi0jCiBDT05GSUdfQlRfSENJQlRVU0I9bQotIyBDT05GSUdfQlRfSENJQlRTRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSVVBUlQgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQkNNMjAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCUEExMFggaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQkZVU0IgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJVkhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKLUNPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogQ09ORklHX0xJQjgwMjExPW0KLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9bQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQotQ09ORklHX01URF9HRU5fUFJPQkU9eQogQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQotQ09ORklHX01URF9DRklfTk9TV0FQPXkKLSMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfR0VPTUVUUlkgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQogQ09ORklHX01URF9DRklfU1RBQT15Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci0jIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QWEEyWFg9eQotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9JTVBBNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0hBUlBfU0wgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkQ9eQotIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9IMTkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9HUElPIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9TSEFSUFNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX1BMQVRGT1JNPXkKLSMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1FJTkZPX1BST0JFIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiBDT05GSUdfRE05MDAwPXkKIENPTkZJR19ETTkwMDBfREVCVUdMRVZFTD0xCi0jIENPTkZJR19ETTkwMDBfRk9SQ0VfU0lNUExFX1BIWV9QT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotQ09ORklHX1dMQU5fODAyMTE9eQotQ09ORklHX0xJQkVSVEFTPW0KLSMgQ09ORklHX0xJQkVSVEFTX1VTQiBpcyBub3Qgc2V0Ci1DT05GSUdfTElCRVJUQVNfU0RJTz1tCi0jIENPTkZJR19MSUJFUlRBU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAogQ09ORklHX1BQUD1tCiBDT05GSUdfUFBQX01VTFRJTElOSz15CiBDT05GSUdfUFBQX0ZJTFRFUj15CiBDT05GSUdfUFBQX0FTWU5DPW0KLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0CiBDT05GSUdfUFBQX0RFRkxBVEU9bQogQ09ORklHX1BQUF9CU0RDT01QPW0KLSMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9bQotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0FQTVBPV0VSPXkKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLUNPTkZJR19LRVlCT0FSRF9QWEEyN3g9eQogQ09ORklHX0tFWUJPQVJEX0dQSU89eQorQ09ORklHX0tFWUJPQVJEX1BYQTI3eD15CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fREE5MDM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CiBDT05GSUdfVE9VQ0hTQ1JFRU5fV005N1hYPW0KICMgQ09ORklHX1RPVUNIU0NSRUVOX1dNOTcwNSBpcyBub3Qgc2V0Ci1DT05GSUdfVE9VQ0hTQ1JFRU5fV005NzEyPXkKICMgQ09ORklHX1RPVUNIU0NSRUVOX1dNOTcxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9XTTk3WFhfTUFJTlNUT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKICMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9QWEE9eQogQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTE2Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj1tCi1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogQ09ORklHX0kyQ19QWEE9eQotIyBDT05GSUdfSTJDX1BYQV9TTEFWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogQ09ORklHX1NQST15Ci0jIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NQSV9NQVNURVI9eQotCi0jCi0jIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfU1BJX1BYQTJYWD15Ci0KLSMKLSMgU1BJIFByb3RvY29sIE1hc3RlcnMKLSMKLSMgQ09ORklHX1NQSV9BVDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIENPTkZJR19QT1dFUl9TVVBQTFk9eQotIyBDT05GSUdfUE9XRVJfU1VQUExZX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQV9QT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUE1fUE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkFUVEVSWV9EUzI3NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkFUVEVSWV9CUTI3eDAwIGlzIG5vdCBzZXQKIENPTkZJR19CQVRURVJZX0RBOTAzMD15CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVUNCMTQwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKIENPTkZJR19QTUlDX0RBOTAzWD15Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLUNPTkZJR19WSURFT19ERVY9bQotQ09ORklHX1ZJREVPX1Y0TDJfQ09NTU9OPW0KLSMgQ09ORklHX1ZJREVPX0FMTE9XX1Y0TDEgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUPXkKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19NRURJQT1tCi0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRURJQV9BVFRBQ0ggaXMgbm90IHNldAotQ09ORklHX01FRElBX1RVTkVSPW0KLUNPTkZJR19NRURJQV9UVU5FUl9DVVNUT01JWkU9eQotIyBDT05GSUdfTUVESUFfVFVORVJfU0lNUExFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1RVTkVSX1REQTgyOTAgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfVFVORVJfVERBODI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9UVU5FUl9UREExODI3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9UVU5FUl9UREE5ODg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjEgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfVFVORVJfVEVBNTc2NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9UVU5FUl9NVDIwWFggaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfVFVORVJfTVQyMDYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1RVTkVSX01UMjI2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9UVU5FUl9NVDIxMzEgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfVFVORVJfUVQxMDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1RVTkVSX1hDMjAyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9UVU5FUl9YQzUwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfVFVORVJfTVhMNTAwNVMgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfVFVORVJfTVhMNTAwN1QgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9bQotQ09ORklHX1ZJREVPQlVGX0dFTj1tCi1DT05GSUdfVklERU9CVUZfRE1BX1NHPW0KLUNPTkZJR19WSURFT19DQVBUVVJFX0RSSVZFUlM9eQotIyBDT05GSUdfVklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19IRUxQRVJfQ0hJUFNfQVVUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5jb2RlcnMvZGVjb2RlcnMgYW5kIG90aGVyIGhlbHBlciBjaGlwcwotIwotCi0jCi0jIEF1ZGlvIGRlY29kZXJzCi0jCi0jIENPTkZJR19WSURFT19UVkFVRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1REQTc0MzIgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fVERBOTg0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19UREE5ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1RFQTY0MTVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1RFQTY0MjAgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTVNQMzQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19DUzUzNDUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fQ1M1M0wzMkEgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTTUyNzkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1RMVjMyMEFJQzIzQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19XTTg3NzUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fV004NzM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1ZQMjdTTVBYIGlzIG5vdCBzZXQKLQotIwotIyBWaWRlbyBkZWNvZGVycwotIwotIyBDT05GSUdfVklERU9fT1Y3NjcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1RDTTgyNVggaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fU0FBNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19TQUE3MTdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1RWUDUxNFggaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fVFZQNTE1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgVmlkZW8gYW5kIGF1ZGlvIGRlY29kZXJzCi0jCi0jIENPTkZJR19WSURFT19DWDI1ODQwIGlzIG5vdCBzZXQKLQotIwotIyBNUEVHIHZpZGVvIGVuY29kZXJzCi0jCi0jIENPTkZJR19WSURFT19DWDIzNDFYIGlzIG5vdCBzZXQKLQotIwotIyBWaWRlbyBlbmNvZGVycwotIwotIyBDT05GSUdfVklERU9fU0FBNzEyNyBpcyBub3Qgc2V0Ci0KLSMKLSMgVmlkZW8gaW1wcm92ZW1lbnQgY2hpcHMKLSMKLSMgQ09ORklHX1ZJREVPX1VQRDY0MDMxQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19VUEQ2NDA4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19WSVZJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldAotQ09ORklHX1NPQ19DQU1FUkE9bQotIyBDT05GSUdfU09DX0NBTUVSQV9NVDlNMDAxIGlzIG5vdCBzZXQKLUNPTkZJR19TT0NfQ0FNRVJBX01UOU0xMTE9bQotIyBDT05GSUdfU09DX0NBTUVSQV9NVDlUMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5VjAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0NfQ0FNRVJBX1RXOTkxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0NfQ0FNRVJBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPQ19DQU1FUkFfT1Y3NzJYIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19QWEEyN3g9bQotIyBDT05GSUdfVklERU9fU0hfTU9CSUxFX0NFVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WNExfVVNCX0RSSVZFUlMgaXMgbm90IHNldAotIyBDT05GSUdfUkFESU9fQURBUFRFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SPXkKK0NPTkZJR19SRUdVTEFUT1JfREE5MDNYPXkKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9QWEE9eQotIyBDT05GSUdfRkJfUFhBX09WRVJMQVkgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUFhBX1NNQVJUUEFORUwgaXMgbm90IHNldAogQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTPXkKIENPTkZJR19GQl9NQlg9bQotIyBDT05GSUdfRkJfTUJYX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1cxMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKLSMgQ09ORklHX0xDRF9MVFYzNTBRViBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CiBDT05GSUdfTENEX1RETzI0TT15Ci0jIENPTkZJR19MQ0RfVkdHMjQzMkE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xDRF9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT1tCiAjIENPTkZJR19CQUNLTElHSFRfR0VORVJJQyBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0RBOTAzWD1tCi0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9OVF84eDg9eQotQ09ORklHX0ZPTlRfOHgxNj15CiBDT05GSUdfTE9HTz15Ci1DT05GSUdfTE9HT19MSU5VWF9NT05PPXkKLUNPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKLUNPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQogQ09ORklHX1NPVU5EPW0KLUNPTkZJR19TT1VORF9PU1NfQ09SRT15CiBDT05GSUdfU05EPW0KLUNPTkZJR19TTkRfVElNRVI9bQotQ09ORklHX1NORF9QQ009bQotIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX09TU0VNVUw9eQogQ09ORklHX1NORF9NSVhFUl9PU1M9bQogQ09ORklHX1NORF9QQ01fT1NTPW0KLUNPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKLSMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15Ci1DT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NORF9WTUFTVEVSPXkKLUNPTkZJR19TTkRfQUM5N19DT0RFQz1tCiAjIENPTkZJR19TTkRfRFJJVkVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0FSTT15Ci1DT05GSUdfU05EX1BYQTJYWF9MSUI9bQotQ09ORklHX1NORF9QWEEyWFhfTElCX0FDOTc9eQotIyBDT05GSUdfU05EX1BYQTJYWF9BQzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9TUEkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1VTQiBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1NPQz1tCi1DT05GSUdfU05EX1NPQ19BQzk3X0JVUz15CiBDT05GSUdfU05EX1BYQTJYWF9TT0M9bQotQ09ORklHX1NORF9QWEEyWFhfU09DX0FDOTc9bQogQ09ORklHX1NORF9QWEEyWFhfU09DX0VNX1gyNzA9bQotQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9bQotIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU09DX1dNOTcxMj1tCi0jIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0Ci1DT05GSUdfQUM5N19CVVM9bQotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotQ09ORklHX0hJRF9ERUJVRz15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLUNPTkZJR19ISURfQ09NUEFUPXkKIENPTkZJR19ISURfQTRURUNIPXkKIENPTkZJR19ISURfQVBQTEU9eQogQ09ORklHX0hJRF9CRUxLSU49eQpAQCAtMTE0NCw1OTcgKzEzNiw1OSBAQAogQ09ORklHX0hJRF9FWktFWT15CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKIENPTkZJR19ISURfTE9HSVRFQ0g9eQotIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAotIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9NSUNST1NPRlQ9eQogQ09ORklHX0hJRF9NT05URVJFWT15Ci0jIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAogQ09ORklHX0hJRF9QQU5USEVSTE9SRD15Ci0jIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1BFVEFMWU5YPXkKIENPTkZJR19ISURfU0FNU1VORz15CiBDT05GSUdfSElEX1NPTlk9eQogQ09ORklHX0hJRF9TVU5QTFVTPXkKLSMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAotIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7Ci0jCi0KLSMKLSMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKIENPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPW0KLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPW0KLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKLSMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKIENPTkZJR19NTUNfUFhBPW0KLSMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKLQotIwotIyBMRUQgZHJpdmVycwotIwotIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAogQ09ORklHX0xFRFNfREE5MDNYPXkKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKIENPTkZJR19MRURTX1RSSUdHRVJTPXkKLSMgQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUiBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfVjMwMjA9eQotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwogQ09ORklHX1JUQ19EUlZfU0ExMTAwPXkKLSMgQ09ORklHX1JUQ19EUlZfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotQ09ORklHX1JFR1VMQVRPUj15Ci0jIENPTkZJR19SRUdVTEFUT1JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAotQ09ORklHX1JFR1VMQVRPUl9EQTkwM1g9eQotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPW0KLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19WRkFUX0ZTPW0KLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKICMgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9TVU1NQVJZPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ0lGUz1tCi0jIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz1tCi1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9bQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogQ09ORklHX05MU19VVEY4PW0KLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0wCi0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQUxHQVBJPW0KLUNPTkZJR19DUllQVE9fQUxHQVBJMj1tCi1DT05GSUdfQ1JZUFRPX0FFQUQyPW0KLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj1tCi1DT05GSUdfQ1JZUFRPX0hBU0g9bQotQ09ORklHX0NSWVBUT19IQVNIMj1tCi1DT05GSUdfQ1JZUFRPX1JORzI9bQotQ09ORklHX0NSWVBUT19NQU5BR0VSPW0KLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9bQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwogQ09ORklHX0NSWVBUT19BRVM9bQotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FSQzQ9bQotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci1DT05GSUdfQ1JDX0NDSVRUPW0KLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9lcDkzeHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9lcDkzeHhfZGVmY29uZmlnCmluZGV4IDM1ZDczNWUuLjZkNjY4OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZXA5M3h4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2VwOTN4eF9kZWZjb25maWcKQEAgLTEsMTQ2NCArMSwxMjQgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMC1yYzMKLSMgVHVlIE1heSAxOSAxMjoyNjo0OSAyMDA5Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLSMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9DTEs9eQotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VQOTNYWD15Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLQotIwotIyBDaXJydXMgRVA5M3h4IEltcGxlbWVudGF0aW9uIE9wdGlvbnMKLSMKIENPTkZJR19DUlVOQ0g9eQotCi0jCi0jIEVQOTN4eCBQbGF0Zm9ybXMKLSMKLSMgQ09ORklHX0VQOTNYWF9TRENFMF9QSFlTX09GRlNFVCBpcyBub3Qgc2V0Ci1DT05GSUdfRVA5M1hYX1NEQ0UzX1NZTkNfUEhZU19PRkZTRVQ9eQogQ09ORklHX01BQ0hfQURTU1BIRVJFPXkKLUNPTkZJR19NQUNIX0VEQjkzWFg9eQogQ09ORklHX01BQ0hfRURCOTMwMT15CiBDT05GSUdfTUFDSF9FREI5MzAyPXkKIENPTkZJR19NQUNIX0VEQjkzMDc9eQogQ09ORklHX01BQ0hfRURCOTMxMj15CiBDT05GSUdfTUFDSF9FREI5MzE1PXkKIENPTkZJR19NQUNIX0dFU0JDOTMxMj15Ci1DT05GSUdfTUFDSF9NSUNSTzk9eQogQ09ORklHX01BQ0hfTUlDUk85SD15Ci1DT05GSUdfTUFDSF9NSUNSTzlNPXkKIENPTkZJR19NQUNIX01JQ1JPOUw9eQogQ09ORklHX01BQ0hfVFM3MlhYPXkKLUNPTkZJR19FUDkzWFhfRUFSTFlfVUFSVDE9eQotIyBDT05GSUdfRVA5M1hYX0VBUkxZX1VBUlQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VQOTNYWF9FQVJMWV9VQVJUMyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTIwVD15Ci1DT05GSUdfQ1BVXzMydjRUPXkKLUNPTkZJR19DUFVfQUJSVF9FVjRUPXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKLUNPTkZJR19DUFVfQ0FDSEVfVjRXVD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fVklDPXkKLUNPTkZJR19DT01NT05fQ0xLREVWPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotQ09ORklHX0FSTV9BTUJBPXkKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTAKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5QU0wLDExNTIwMCByb290PS9kZXYvbmZzIGlwPWJvb3RwIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQogQ09ORklHX0ZQRV9OV0ZQRV9YUD15Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX05FVF9LRVk9eQotIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNj15Ci0jIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfU0lUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQotQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfUkVBRE9OTFkgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQogQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQotQ09ORklHX01URF9DRklfTk9TV0FQPXkKLSMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfR0VPTUVUUlkgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQogQ09ORklHX01URF9DRklfU1RBQT15Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogQ09ORklHX01URF9ST009eQotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLSMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORD15CiBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFPXkKLSMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1RTNzI1MCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfSURTPXkKLSMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX05CRD15Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAogQ09ORklHX0VFUFJPTV9MRUdBQ1k9eQotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15CiBDT05GSUdfRVA5M1hYX0VUSD15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUlRMODE1MD15Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9BTUJBX1BMMDEwPXkKIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMF9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9BTUJBX1BMMDExIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0RFQlVHX0NPUkU9eQogQ09ORklHX0kyQ19ERUJVR19BTEdPPXkKIENPTkZJR19JMkNfREVCVUdfQlVTPXkKLUNPTkZJR19JMkNfREVCVUdfQ0hJUD15Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NIVDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfRVA5M1hYX1dBVENIRE9HPXkKLQotIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQogQ09ORklHX1VTQl9ERUJVRz15Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQogQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUz15Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotCi0jCi0jIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKIENPTkZJR19VU0JfU0VSSUFMPXkKIENPTkZJR19VU0JfU0VSSUFMX0NPTlNPTEU9eQotIyBDT05GSUdfVVNCX0VaVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0FJUkNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQVJLMzExNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0JFTEtJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NIMzQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfV0hJVEVIRUFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0VNUEVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU8gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9GVU5TT0ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9JUEFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUX1RJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfR0FSTUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSVBXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSVVVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9QREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0xTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tPQklMX1NDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX01DVF9VMjMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzcyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX01PUzc4NDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9NT1RPUk9MQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX05BVk1BTiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDM9eQotIyBDT05GSUdfVVNCX1NFUklBTF9PVEk2ODU4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfUVVBTENPTU0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TUENQOFg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSFA0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1NBRkUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TSUVNRU5TX01QSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1NJRVJSQVdJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU1lNQk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfVEkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9YSVJDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9PUFRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9PTU5JTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSUNPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwogQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9NNDhUODY9eQotIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCiBDT05GSUdfUlRDX0RSVl9FUDkzWFg9eQotIyBDT05GSUdfUlRDX0RSVl9QTDAzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BMMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NMQUI9eQotIyBDT05GSUdfREVCVUdfU0xBQl9MRUFLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TUElOTE9DSz15CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJNX1VOV0lORD15CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci0jIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz15Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogQ09ORklHX0xJQkNSQzMyQz15Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZXNlcmllc19weGFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9lc2VyaWVzX3B4YV9kZWZjb25maWcKaW5kZXggNzRiYWY1Ny4uMTY5MWRlYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9lc2VyaWVzX3B4YV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9lc2VyaWVzX3B4YV9kZWZjb25maWcKQEAgLTEsMTI0NiArMSwxMTggQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC1yYzgKLSMgV2VkIERlYyAyNCAyMzozNTo0NSAyMDA4Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19BUkNIX01URF9YSVA9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLUNPTkZJR19GUkVFWkVSPXkKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUFhBPXkKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKLSMKLSMgQ09ORklHX0FSQ0hfR1VNU1RJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xVQkJPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9MT0dJQ1BEX1BYQTI3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01BSU5TVE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01QOTAwQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQV9JRFAgaXMgbm90IHNldAotIyBDT05GSUdfUFhBX1NIQVJQU0wgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WSVBFUiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9QWEFfRVNFUklFUz15Ci1DT05GSUdfTUFDSF9FMzMwPXkKLUNPTkZJR19NQUNIX0UzNTA9eQotQ09ORklHX01BQ0hfRTc0MD15Ci1DT05GSUdfTUFDSF9FNzUwPXkKLUNPTkZJR19NQUNIX0U0MDA9eQotQ09ORklHX01BQ0hfRTgwMD15Ci0jIENPTkZJR19UUklaRVBTX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0g1MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfRU1fWDI3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NPTElCUkkgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9aWUxPTklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0xJVFRMRVRPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1RBVk9SRVZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfU0FBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0FSTUNPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DTV9YMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTUFHSUNJQU4gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NSU9BNzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfUENNMDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBX1BBTE0gaXMgbm90IHNldAotIyBDT05GSUdfUFhBX0VaWCBpcyBub3Qgc2V0Ci1DT05GSUdfUFhBMjV4PXkKLSMgQ09ORklHX1BYQV9QV00gaXMgbm90IHNldAotQ09ORklHX1BYQV9IQVZFX0JPQVJEX0lSUVM9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9YU0NBTEU9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUPXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCiAjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKIENPTkZJR19JV01NWFQ9eQotQ09ORklHX1hTQ0FMRV9QTVU9eQotQ09ORklHX0NPTU1PTl9DTEtERVY9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfUENDQVJEPXkKLSMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUENNQ0lBPW0KLUNPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQotQ09ORklHX1BDTUNJQV9JT0NUTD15Ci0KLSMKLSMgUEMtY2FyZCBicmlkZ2VzCi0jCiBDT05GSUdfUENNQ0lBX1BYQTJYWD1tCi0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9IiIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0tFWEVDPXkKLUNPTkZJR19BVEFHU19QUk9DPXkKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX01JU0M9eQotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwogQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QTV9TTEVFUD15Ci1DT05GSUdfU1VTUEVORD15Ci1DT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKLSMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLSMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKIENPTkZJR19JUkRBPXkKLQotIwotIyBJckRBIHByb3RvY29scwotIwogQ09ORklHX0lSTEFOPW0KIENPTkZJR19JUkNPTU09bQogQ09ORklHX0lSREFfVUxUUkE9eQotCi0jCi0jIElyREEgb3B0aW9ucwotIwogQ09ORklHX0lSREFfQ0FDSEVfTEFTVF9MU0FQPXkKIENPTkZJR19JUkRBX0ZBU1RfUlI9eQotIyBDT05GSUdfSVJEQV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5mcmFyZWQtcG9ydCBkZXZpY2UgZHJpdmVycwotIwotCi0jCi0jIFNJUiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfSVJUVFlfU0lSIGlzIG5vdCBzZXQKLQotIwotIyBEb25nbGUgc3VwcG9ydAotIwotCi0jCi0jIEZJUiBkZXZpY2UgZHJpdmVycwotIwogQ09ORklHX1BYQV9GSUNQPXkKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQogQ09ORklHX0NGRzgwMjExPW0KLUNPTkZJR19OTDgwMjExPXkKLUNPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKLUNPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogQ09ORklHX01BQzgwMjExPW0KLQotIwotIyBSYXRlIGNvbnRyb2wgYWxnb3JpdGhtIHNlbGVjdGlvbgotIwogQ09ORklHX01BQzgwMjExX1JDX1BJRD15CiAjIENPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTCBpcyBub3Qgc2V0Ci1DT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9QSUQ9eQotIyBDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTCBpcyBub3Qgc2V0Ci1DT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVD0icGlkIgotIyBDT05GSUdfTUFDODAyMTFfTUVTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMV9MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExX0RFQlVHX01FTlUgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMT1tCi0jIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfVEtJUD1tCi0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiAjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPW0KLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QQVJUSVRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwotIyBDT05GSUdfTVREX0NIQVIgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS0RFVlMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DS19STyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NIQVJQX1NMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkQ9bQotIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9HUElPIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9bQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9TSEFSUFNMIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORF9UTUlPPW0KLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD1tCi0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPW0KLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9bQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9bQotIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfUE1QIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfU0ZGPXkKLSMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAogQ09ORklHX1BBVEFfUENNQ0lBPW0KLSMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotQ09ORklHX1dMQU5fODAyMTE9eQotIyBDT05GSUdfUENNQ0lBX1JBWUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkVSVEFTX1RISU5GSVJNIGlzIG5vdCBzZXQKIENPTkZJR19IRVJNRVM9bQogQ09ORklHX1BDTUNJQV9IRVJNRVM9bQotIyBDT05GSUdfUENNQ0lBX1NQRUNUUlVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FJUk9fQ1MgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1dMMzUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMV9IV1NJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QNTRfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotIyBDT05GSUdfQjQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0M0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVDJYMDAgaXMgbm90IHNldAogQ09ORklHX05FVF9QQ01DSUE9eQotIyBDT05GSUdfUENNQ0lBXzNDNTg5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV8zQzU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfRk1WSjE4WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfUENORVQgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX05NQ0xBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfU01DOTFDOTIgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1hJUkMyUFMgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX0FYTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj1tCi0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9HUElPPW0KICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKIENPTkZJR19UT1VDSFNDUkVFTl9XTTk3WFg9bQotQ09ORklHX1RPVUNIU0NSRUVOX1dNOTcwNT15Ci1DT05GSUdfVE9VQ0hTQ1JFRU5fV005NzEyPXkKLUNPTkZJR19UT1VDSFNDUkVFTl9XTTk3MTM9eQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV005N1hYX01BSU5TVE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9QWEE9eQotIyBDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCi0jCi0jIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi1DT05GSUdfTUZEX0NPUkU9eQotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0IxNDAwX0NPUkUgaXMgbm90IHNldAotQ09ORklHX01GRF9UTUlPPXkKIENPTkZJR19NRkRfVDdMNjZYQj15CiBDT05GSUdfTUZEX1RDNjM4N1hCPXkKIENPTkZJR19NRkRfVEM2MzkzWEI9eQotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9EREMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfUFhBPXkKLSMgQ09ORklHX0ZCX1BYQV9TTUFSVFBBTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01CWCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfVzEwMD15Ci0jIENPTkZJR19GQl9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiBDT05GSUdfTENEX0NMQVNTX0RFVklDRT15Ci0jIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQ0RfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQotQ09ORklHX0JBQ0tMSUdIVF9DT1JHST15Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVFM9eQotIyBDT05GSUdfRk9OVF84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF84eDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAogQ09ORklHX0ZPTlRfTUlOSV80eDY9eQotIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORD15Ci1DT05GSUdfU09VTkRfT1NTX0NPUkU9eQogQ09ORklHX1NORD1tCi1DT05GSUdfU05EX1RJTUVSPW0KLUNPTkZJR19TTkRfUENNPW0KLSMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAotQ09ORklHX1NORF9PU1NFTVVMPXkKIENPTkZJR19TTkRfTUlYRVJfT1NTPW0KIENPTkZJR19TTkRfUENNX09TUz1tCi1DT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CiBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTPXkKLUNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQogQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USz15Ci0jIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NORF9WTUFTVEVSPXkKLUNPTkZJR19TTkRfQUM5N19DT0RFQz1tCi1DT05GSUdfU05EX0RSSVZFUlM9eQotIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkUgaXMgbm90IHNldAotQ09ORklHX1NORF9BUk09eQotQ09ORklHX1NORF9QWEEyWFhfTElCPW0KLUNPTkZJR19TTkRfUFhBMlhYX0xJQl9BQzk3PXkKLSMgQ09ORklHX1NORF9QWEEyWFhfQUM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUENNQ0lBIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfU09DPW0KLUNPTkZJR19TTkRfU09DX0FDOTdfQlVTPXkKIENPTkZJR19TTkRfUFhBMlhYX1NPQz1tCi1DT05GSUdfU05EX1BYQTJYWF9TT0NfQUM5Nz1tCiBDT05GSUdfU05EX1BYQTJYWF9TT0NfRTgwMD1tCi1DT05GSUdfU05EX1NPQ19XTTk3MTI9bQotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotQ09ORklHX0FDOTdfQlVTPW0KLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotQ09ORklHX0hJRF9DT01QQVQ9eQogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX01NQz15Ci0jIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FPXkKLQotIwotIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQotIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfTU1DX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAogQ09ORklHX01NQ19UTUlPPXkKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPW0KLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPW0KLUNPTkZJR19GU19NQkNBQ0hFPW0KLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15Ci0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotCi0jCi0jIFRyYWNlcnMKLSMKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQUxHQVBJPW0KLUNPTkZJR19DUllQVE9fQUxHQVBJMj1tCi1DT05GSUdfQ1JZUFRPX0FFQUQyPW0KLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj1tCi1DT05GSUdfQ1JZUFRPX0hBU0gyPW0KLUNPTkZJR19DUllQVE9fUk5HMj1tCi1DT05GSUdfQ1JZUFRPX01BTkFHRVI9bQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj1tCi0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwogQ09ORklHX0NSWVBUT19DQkM9bQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fRUNCPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLUNPTkZJR19DUllQVE9fQUVTPW0KLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BUkM0PW0KLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfQ1JDX0NDSVRUPXkKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2V6eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2V6eF9kZWZjb25maWcKaW5kZXggOWU5MDU3Yy4uYzRlZWI2ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9lenhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZXp4X2RlZmNvbmZpZwpAQCAtMSw0NTEgKzEsNzAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKLSMgTW9uIE5vdiAgMiAxMzoxODo1MCAyMDA5Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19IQVZFX1BXTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0FSQ0hfSEFTX0NQVUZSRVE9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0FSQ0hfTVREX1hJUD15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049Ii1lengyMDA5MTAzMTIzMTUiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci0jIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQogQ09ORklHX1JEX0JaSVAyPXkKIENPTkZJR19SRF9MWk1BPXkKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotQ09ORklHX0tBTExTWU1TX0FMTD15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19TTE9XX1dPUks9eQotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKIENPTkZJR19NT0RWRVJTSU9OUz15Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCREFGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9ERUFETElORT15Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCi1DT05GSUdfRlJFRVpFUj15Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1BYQT15Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAotCi0jCi0jIEludGVsIFBYQTJ4eC9QWEEzeHggSW1wbGVtZW50YXRpb25zCi0jCi0jIENPTkZJR19BUkNIX0dVTVNUSVggaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9JTlRFTE1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfU1RBUkdBVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTVA5MDBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQkFMTE9PTjMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfSURQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVklQRVIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfRVNFUklFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUklaRVBTX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0g1MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfRU1fWDI3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0VYRURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ09MSUJSSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NPTElCUkkzMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DT0xJQlJJMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfWllMT05JVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9MSVRUTEVUT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9UQVZPUkVWQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1NBQVIgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9BUk1DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ01fWDMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0g0NzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTUFHSUNJQU4gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9ISU1BTEFZQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01JT0E3MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9QQ00wMjcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfUEFMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NTQjcyNiBpcyBub3Qgc2V0CiBDT05GSUdfUFhBX0VaWD15Ci1DT05GSUdfTUFDSF9FWlhfQTc4MD15Ci1DT05GSUdfTUFDSF9FWlhfRTY4MD15Ci1DT05GSUdfTUFDSF9FWlhfQTEyMDA9eQotQ09ORklHX01BQ0hfRVpYX0E5MTA9eQotQ09ORklHX01BQ0hfRVpYX0U2PXkKLUNPTkZJR19NQUNIX0VaWF9FMj15Ci0jIENPTkZJR19NQUNIX1hDRVAgaXMgbm90IHNldAotQ09ORklHX1BYQTI3eD15Ci1DT05GSUdfUFhBX1NTUD15Ci1DT05GSUdfUFhBX0hBVkVfQk9BUkRfSVJRUz15Ci1DT05GSUdfUExBVF9QWEE9eQotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX1hTQ0FMRT15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQotQ09ORklHX0NQVV9QQUJSVF9MRUdBQ1k9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQotQ09ORklHX0lXTU1YVD15Ci1DT05GSUdfWFNDQUxFX1BNVT15Ci1DT05GSUdfQ09NTU9OX0NMS0RFVj15Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAotIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15Ci1DT05GSUdfT0FCSV9DT01QQVQ9eQotIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eTEgcm9vdD0vZGV2L21tY2JsazBwMiByb290ZnN0eXBlPWV4dDIgcm9vdGRlbGF5PTMgaXA9MTkyLjE2OC4wLjIwMjoxOTIuMTY4LjAuMjAwOjE5Mi4xNjguMC4yMDA6MjU1LjI1NS4yNTUuMCBkZWJ1ZyIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0tFWEVDPXkKLUNPTkZJR19BVEFHU19QUk9DPXkKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwogQ09ORklHX0NQVV9GUkVRPXkKLUNPTkZJR19DUFVfRlJFUV9UQUJMRT15CiBDT05GSUdfQ1BVX0ZSRVFfREVCVUc9eQotQ09ORklHX0NQVV9GUkVRX1NUQVQ9eQotIyBDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRT15Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfR09WX1BFUkZPUk1BTkNFPXkKIENPTkZJR19DUFVfRlJFUV9HT1ZfUE9XRVJTQVZFPW0KIENPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPW0KIENPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQ9bQogQ09ORklHX0NQVV9GUkVRX0dPVl9DT05TRVJWQVRJVkU9bQogQ09ORklHX0NQVV9JRExFPXkKLUNPTkZJR19DUFVfSURMRV9HT1ZfTEFEREVSPXkKLUNPTkZJR19DUFVfSURMRV9HT1ZfTUVOVT15Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKIENPTkZJR19CSU5GTVRfQU9VVD1tCiBDT05GSUdfQklORk1UX01JU0M9bQotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwogQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QTV9TTEVFUD15Ci1DT05GSUdfU1VTUEVORD15Ci1DT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKIENPTkZJR19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19QTV9SVU5USU1FPXkKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotQ09ORklHX1hGUk1fSVBDT01QPW0KLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15CiBDT05GSUdfSVBfUE5QX1JBUlA9eQotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9bQogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNj1tCi0jIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUNl9BSD1tCiBDT05GSUdfSU5FVDZfRVNQPW0KIENPTkZJR19JTkVUNl9JUENPTVA9bQogQ09ORklHX0lQVjZfTUlQNj1tCi1DT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQotQ09ORklHX0lORVQ2X1RVTk5FTD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQotIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2X1NJVD1tCi1DT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CiBDT05GSUdfSVBWNl9UVU5ORUw9bQogQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTPXkKIENPTkZJR19JUFY2X1NVQlRSRUVTPXkKLSMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKLUNPTkZJR19CUklER0VfTkVURklMVEVSPXkKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkVURklMVEVSX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQogQ09ORklHX05GX0NPTk5UUkFDSz1tCi1DT05GSUdfTkZfQ1RfQUNDVD15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQogQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQotIyBDT05GSUdfTkZfQ1RfUFJPVE9fRENDUCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KIENPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KIENPTkZJR19ORl9DVF9QUk9UT19VRFBMSVRFPW0KIENPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KQEAgLTQ1OCwyMiArNzcsMTIgQEAKIENPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KIENPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCiBDT05GSUdfTkZfQ1RfTkVUTElOSz1tCi0jIENPTkZJR19ORVRGSUxURVJfVFBST1hZIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5NQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITD1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9MRUQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTk9UUkFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ0xVU1RFUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVQ9bQpAQCAtNDg0LDIxICs5MywxNSBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITD1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVIgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BIWVNERVYgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1QgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KQEAgLTUwNiwxNSArMTA5LDcgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMj1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1NGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORl9ERUZSQUdfSVBWND1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCkBAIC01MjYsMjEgKzEyMSwxMCBAQAogQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQogQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KIENPTkZJR19ORl9OQVQ9bQotQ09ORklHX05GX05BVF9ORUVERUQ9eQogQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQogQ09ORklHX05GX05BVF9TTk1QX0JBU0lDPW0KLUNPTkZJR19ORl9OQVRfUFJPVE9fR1JFPW0KLUNPTkZJR19ORl9OQVRfUFJPVE9fVURQTElURT1tCi1DT05GSUdfTkZfTkFUX1BST1RPX1NDVFA9bQotQ09ORklHX05GX05BVF9GVFA9bQotQ09ORklHX05GX05BVF9JUkM9bQotQ09ORklHX05GX05BVF9URlRQPW0KLUNPTkZJR19ORl9OQVRfQU1BTkRBPW0KLUNPTkZJR19ORl9OQVRfUFBUUD1tCi1DT05GSUdfTkZfTkFUX0gzMjM9bQotQ09ORklHX05GX05BVF9TSVA9bQogQ09ORklHX0lQX05GX01BTkdMRT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCkBAIC01NDksMTAgKzEzMyw2IEBACiBDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9BUlBGSUxURVI9bQogQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQotCi0jCi0jIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCiBDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjY9bQogQ09ORklHX0lQNl9ORl9RVUVVRT1tCiBDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KQEAgLTU3MCwzOCArMTUwLDcgQEAKIENPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVA2X05GX01BTkdMRT1tCiBDT05GSUdfSVA2X05GX1JBVz1tCi0jIENPTkZJR19CUklER0VfTkZfRUJUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1RQPW0KIENPTkZJR19CUklER0U9bQotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfTExDPW0KLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0NMU19ST1VURT15Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiBDT05GSUdfQlQ9eQogQ09ORklHX0JUX0wyQ0FQPXkKIENPTkZJR19CVF9TQ089eQpAQCAtNjExLDE5MiArMTYwLDQyIEBACiBDT05GSUdfQlRfQk5FUF9NQ19GSUxURVI9eQogQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSPXkKIENPTkZJR19CVF9ISURQPXkKLQotIwotIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKLSMKIENPTkZJR19CVF9IQ0lCVFVTQj1tCiBDT05GSUdfQlRfSENJQlRTRElPPW0KIENPTkZJR19CVF9IQ0lVQVJUPXkKIENPTkZJR19CVF9IQ0lVQVJUX0g0PXkKLSMgQ09ORklHX0JUX0hDSVVBUlRfQkNTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lVQVJUX0xMIGlzIG5vdCBzZXQKIENPTkZJR19CVF9IQ0lCQ00yMDNYPW0KIENPTkZJR19CVF9IQ0lCUEExMFg9bQogQ09ORklHX0JUX0hDSUJGVVNCPW0KIENPTkZJR19CVF9IQ0lWSENJPW0KIENPTkZJR19CVF9NUlZMPW0KIENPTkZJR19CVF9NUlZMX1NESU89bQotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX0ZJQl9SVUxFUz15CiAjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPW0KLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIENPTkZJR19DT05ORUNUT1I9bQogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfSEFWRV9NVERfT1RQPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15CiBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15Ci1DT05GSUdfTVREX0NGSV9OT1NXQVA9eQotIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfR0VPTUVUUlk9eQogIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzEgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKICMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQogIyBDT05GSUdfTVREX0NGSV9JMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAogQ09ORklHX01URF9PVFA9eQogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QWEEyWFg9eQotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAotIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9bQogQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCiBDT05GSUdfQkxLX0RFVl9OQkQ9bQotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CiBDT05GSUdfRFVNTVk9eQotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU4gaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KIENPTkZJR19QUFBfTVVMVElMSU5LPXkKIENPTkZJR19QUFBfRklMVEVSPXkKQEAgLTgwNCwyODkgKzIwMywzOCBAQAogQ09ORklHX1BQUF9TWU5DX1RUWT1tCiBDT05GSUdfUFBQX0RFRkxBVEU9bQogQ09ORklHX1BQUF9CU0RDT01QPW0KLSMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9bQotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfQVBNUE9XRVIgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0dQSU89eQotIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xNODMyMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX1BYQTI3eD15Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9TUEkgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VFVEkgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUNTNTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVzkwWDkwMCBpcyBub3Qgc2V0CiBDT05GSUdfVE9VQ0hTQ1JFRU5fUENBUD15CiBDT05GSUdfSU5QVVRfTUlTQz15Ci0jIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0NNMTA5IGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9VSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfR1BJT19ST1RBUllfRU5DT0RFUiBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfUENBUD15Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX1BYQT15CiBDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9OAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfUFhBPXkKLSMgQ09ORklHX0kyQ19QWEFfU0xBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfU1BJPXkKLSMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19TUElfUFhBMlhYPXkKLQotIwotIyBTUEkgUHJvdG9jb2wgTWFzdGVycwotIwotIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR1BJT19TWVNGUz15Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0Ci0KLSMKLSMgQUM5NyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIENPTkZJR19QT1dFUl9TVVBQTFk9eQotIyBDT05GSUdfUE9XRVJfU1VQUExZX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQV9QT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUE1fUE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkFUVEVSWV9EUzI3NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkFUVEVSWV9EUzI3ODIgaXMgbm90IHNldAotIyBDT05GSUdfQkFUVEVSWV9CUTI3eDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBVFRFUllfTUFYMTcwNDAgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19FWlhfUENBUD15CiBDT05GSUdfUkVHVUxBVE9SPXkKIENPTkZJR19SRUdVTEFUT1JfREVCVUc9eQotIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAogQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSPXkKIENPTkZJR19SRUdVTEFUT1JfVVNFUlNQQUNFX0NPTlNVTUVSPXkKLSMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9NQVgxNTg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9MUDM5NzEgaXMgbm90IHNldAogQ09ORklHX1JFR1VMQVRPUl9QQ0FQPXkKLSMgQ09ORklHX1JFR1VMQVRPUl9UUFM2NTAyMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwN1ggaXMgbm90IHNldAogQ09ORklHX01FRElBX1NVUFBPUlQ9eQotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCiBDT05GSUdfVklERU9fREVWPXkKLUNPTkZJR19WSURFT19WNEwyX0NPTU1PTj15Ci1DT05GSUdfVklERU9fQUxMT1dfVjRMMT15Ci1DT05GSUdfVklERU9fVjRMMV9DT01QQVQ9eQotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX01FRElBPXkKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX01FRElBX0FUVEFDSCBpcyBub3Qgc2V0Ci1DT05GSUdfTUVESUFfVFVORVI9eQogQ09ORklHX01FRElBX1RVTkVSX0NVU1RPTUlTRT15CiAjIENPTkZJR19NRURJQV9UVU5FUl9TSU1QTEUgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfVFVORVJfVERBODI5MCBpcyBub3Qgc2V0CkBAIC0xMTA1LDY1MCArMjUzLDk2IEBACiAjIENPTkZJR19NRURJQV9UVU5FUl9NWEw1MDA1UyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9UVU5FUl9NWEw1MDA3VCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9UVU5FUl9NQzQ0UzgwMyBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15Ci1DT05GSUdfVklERU9fVjRMMT15Ci1DT05GSUdfVklERU9CVUZfR0VOPXkKLUNPTkZJR19WSURFT0JVRl9ETUFfU0c9eQotQ09ORklHX1ZJREVPX0NBUFRVUkVfRFJJVkVSUz15Ci0jIENPTkZJR19WSURFT19BRFZfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fRklYRURfTUlOT1JfUkFOR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX0hFTFBFUl9DSElQU19BVVRPIGlzIG5vdCBzZXQKLQotIwotIyBFbmNvZGVycy9kZWNvZGVycyBhbmQgb3RoZXIgaGVscGVyIGNoaXBzCi0jCi0KLSMKLSMgQXVkaW8gZGVjb2RlcnMKLSMKLSMgQ09ORklHX1ZJREVPX1RWQVVESU8gaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fVERBNzQzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19UREE5ODQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1REQTk4NzUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fVEVBNjQxNUMgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fVEVBNjQyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NU1AzNDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0NTNTM0NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19DUzUzTDMyQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NNTI3OTAgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fVExWMzIwQUlDMjNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1dNODc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19XTTg3MzkgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fVlAyN1NNUFggaXMgbm90IHNldAotCi0jCi0jIFJEUyBkZWNvZGVycwotIwotIyBDT05GSUdfVklERU9fU0FBNjU4OCBpcyBub3Qgc2V0Ci0KLSMKLSMgVmlkZW8gZGVjb2RlcnMKLSMKLSMgQ09ORklHX1ZJREVPX0FEVjcxODAgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fQlQ4MTkgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fQlQ4NTYgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fQlQ4NjYgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fS1MwMTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09WNzY3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NVDlWMDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1RDTTgyNVggaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fU0FBNzExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19TQUE3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1NBQTcxN1ggaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fU0FBNzE5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19UVlA1MTRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1RWUDUxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fVlBYMzIyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgVmlkZW8gYW5kIGF1ZGlvIGRlY29kZXJzCi0jCi0jIENPTkZJR19WSURFT19DWDI1ODQwIGlzIG5vdCBzZXQKLQotIwotIyBNUEVHIHZpZGVvIGVuY29kZXJzCi0jCi0jIENPTkZJR19WSURFT19DWDIzNDFYIGlzIG5vdCBzZXQKLQotIwotIyBWaWRlbyBlbmNvZGVycwotIwotIyBDT05GSUdfVklERU9fU0FBNzEyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19TQUE3MTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0FEVjcxNzAgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fQURWNzE3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19USFM3MzAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0FEVjczNDMgaXMgbm90IHNldAotCi0jCi0jIFZpZGVvIGltcHJvdmVtZW50IGNoaXBzCi0jCi0jIENPTkZJR19WSURFT19VUEQ2NDAzMUEgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fVVBENjQwODMgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19DUElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0NQSUEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldAogQ09ORklHX1NPQ19DQU1FUkE9eQotIyBDT05GSUdfU09DX0NBTUVSQV9NVDlNMDAxIGlzIG5vdCBzZXQKIENPTkZJR19TT0NfQ0FNRVJBX01UOU0xMTE9eQotIyBDT05GSUdfU09DX0NBTUVSQV9NVDlUMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5VjAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0NfQ0FNRVJBX1RXOTkxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0NfQ0FNRVJBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPQ19DQU1FUkFfT1Y3NzJYIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19QWEEyN3g9eQotIyBDT05GSUdfVklERU9fU0hfTU9CSUxFX0NFVSBpcyBub3Qgc2V0CiAjIENPTkZJR19WNExfVVNCX0RSSVZFUlMgaXMgbm90IHNldAotQ09ORklHX1JBRElPX0FEQVBURVJTPXkKLSMgQ09ORklHX0kyQ19TSTQ3MTMgaXMgbm90IHNldAotIyBDT05GSUdfUkFESU9fU0k0NzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EU0JSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX1NJNDcwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVI4MDAgaXMgbm90IHNldAogQ09ORklHX1JBRElPX1RFQTU3NjQ9eQotQ09ORklHX1JBRElPX1RFQTU3NjRfWFRBTD15Ci0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1VWRVNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9QWEE9eQogQ09ORklHX0ZCX1BYQV9PVkVSTEFZPXkKLSMgQ09ORklHX0ZCX1BYQV9TTUFSVFBBTkVMIGlzIG5vdCBzZXQKIENPTkZJR19GQl9QWEFfUEFSQU1FVEVSUz15Ci0jIENPTkZJR19GQl9NQlggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiAjIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLUNPTkZJR19CQUNLTElHSFRfR0VORVJJQz15CiBDT05GSUdfQkFDS0xJR0hUX1BXTT15Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVFM9eQotIyBDT05GSUdfRk9OVF84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF84eDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAogQ09ORklHX0ZPTlRfTUlOSV80eDY9eQotIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORD15Ci1DT05GSUdfU09VTkRfT1NTX0NPUkU9eQotQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKIENPTkZJR19TTkQ9eQotQ09ORklHX1NORF9USU1FUj15Ci1DT05GSUdfU05EX1BDTT15Ci1DT05GSUdfU05EX0pBQ0s9eQotIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX09TU0VNVUw9eQogQ09ORklHX1NORF9NSVhFUl9PU1M9eQogQ09ORklHX1NORF9QQ01fT1NTPXkKLUNPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKLSMgQ09ORklHX1NORF9IUlRJTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15Ci1DT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRFJJVkVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVJNIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfUFhBMlhYX0xJQj15CiAjIENPTkZJR19TTkRfU1BJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9VU0IgaXMgbm90IHNldAogQ09ORklHX1NORF9TT0M9eQogQ09ORklHX1NORF9QWEEyWFhfU09DPXkKLUNPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPXkKLSMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCiAjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwogQ09ORklHX0hJRF9BUFBMRT1tCi0jIENPTkZJR19ISURfV0FDT00gaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKLSMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLQotIwotIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwotIwotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRlMgaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTIKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUjhBNjY1OTcgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYPXkKLUNPTkZJR19VU0JfUFhBMjdYPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9FVEg9eQorQ09ORklHX1VTQl9FVEg9bQogIyBDT05GSUdfVVNCX0VUSF9STkRJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRVRIX0VFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotQ09ORklHX1VTQl9PVEdfVVRJTFM9eQotIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRT15Ci0KLSMKLSMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKIENPTkZJR19TRElPX1VBUlQ9bQotIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCiBDT05GSUdfTU1DX1BYQT15Ci0jIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfU1BJPXkKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CiBDT05GSUdfTEVEU19DTEFTUz15Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLSMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0xFRFNfTFAzOTQ0PXkKLSMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX0RBQzEyNFMwODUgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19QV00gaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19CRDI4MDIgaXMgbm90IHNldAotCi0jCi0jIExFRCBUcmlnZ2VycwotIwogQ09ORklHX0xFRFNfVFJJR0dFUlM9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CiBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVD15CiBDT05GSUdfTEVEU19UUklHR0VSX0dQSU89eQogQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPXkKLQotIwotIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCi0jCi0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QWEEgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfUENBUD15Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPW0KLSMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD1tCi0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9bQogQ09ORklHX1JFSVNFUkZTX0ZTPW0KLSMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQogQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQogQ09ORklHX1hGU19GUz1tCi0jIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlNfRlM9eQogQ09ORklHX0FVVE9GUzRfRlM9eQogQ09ORklHX0ZVU0VfRlM9bQogQ09ORklHX0NVU0U9bQotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwogQ09ORklHX0lTTzk2NjBfRlM9bQogQ09ORklHX0pPTElFVD15CiBDT05GSUdfWklTT0ZTPXkKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz1tCiBDT05GSUdfTVNET1NfRlM9bQogQ09ORklHX1ZGQVRfRlM9bQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz1tCi1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQotQ09ORklHX0pGRlMyX1pMSUI9eQogQ09ORklHX0pGRlMyX0xaTz15Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQogQ09ORklHX0pGRlMyX1JVQklOPXkKLSMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKLSMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9bQogQ09ORklHX1NRVUFTSEZTPW0KLSMgQ09ORklHX1NRVUFTSEZTX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19TUVVBU0hGU19GUkFHTUVOVF9DQUNIRV9TSVpFPTMKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfUk9NRlNfRlM9bQotQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9CTE9DSz15Ci0jIENPTkZJR19ST01GU19CQUNLRURfQllfTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9CT1RIIGlzIG5vdCBzZXQKLUNPTkZJR19ST01GU19PTl9CTE9DSz15Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WM19BQ0w9eQotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPT1RfTkZTIGlzIG5vdCBzZXQKIENPTkZJR19ORlNEPW0KLUNPTkZJR19ORlNEX1YyX0FDTD15CiBDT05GSUdfTkZTRF9WMz15CiBDT05GSUdfTkZTRF9WM19BQ0w9eQotIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19FWFBPUlRGUz1tCi1DT05GSUdfTkZTX0FDTF9TVVBQT1JUPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogQ09ORklHX1NNQl9GUz1tCi0jIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAogQ09ORklHX0NJRlM9bQogQ09ORklHX0NJRlNfU1RBVFM9eQotIyBDT05GSUdfQ0lGU19TVEFUUzIgaXMgbm90IHNldAogQ09ORklHX0NJRlNfV0VBS19QV19IQVNIPXkKIENPTkZJR19DSUZTX1hBVFRSPXkKIENPTkZJR19DSUZTX1BPU0lYPXkKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQogQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQogQ09ORklHX05MU19DT0RFUEFHRV83NzU9bQpAQCAtMTc4NywyMTQgKzM4MSw0MCBAQAogQ09ORklHX05MU19LT0k4X1I9bQogQ09ORklHX05MU19LT0k4X1U9bQogQ09ORklHX05MU19VVEY4PW0KLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKIENPTkZJR19QUklOVEtfVElNRT15Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAogIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQogQ09ORklHX0RFQlVHX1JUX01VVEVYRVM9eQotQ09ORklHX0RFQlVHX1BJX0xJU1Q9eQotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19TUElOTE9DSz15Ci1DT05GSUdfREVCVUdfTVVURVhFUz15Ci1DT05GSUdfREVCVUdfTE9DS19BTExPQz15CiBDT05GSUdfUFJPVkVfTE9DS0lORz15Ci1DT05GSUdfTE9DS0RFUD15Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0RFUCBpcyBub3Qgc2V0Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1M9eQotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFDS1RSQUNFPXkKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fVU5XSU5EPXkKIENPTkZJR19ERUJVR19VU0VSPXkKIENPTkZJR19ERUJVR19FUlJPUlM9eQotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLUNPTkZJR19DUllQVE9fQUxHQVBJPW0KLUNPTkZJR19DUllQVE9fQUxHQVBJMj1tCi1DT05GSUdfQ1JZUFRPX0FFQUQ9bQotQ09ORklHX0NSWVBUT19BRUFEMj1tCi1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCi1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9bQotQ09ORklHX0NSWVBUT19IQVNIPW0KLUNPTkZJR19DUllQVE9fSEFTSDI9bQotQ09ORklHX0NSWVBUT19STkcyPW0KLUNPTkZJR19DUllQVE9fUENPTVA9bQotQ09ORklHX0NSWVBUT19NQU5BR0VSPW0KLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9bQotQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCiBDT05GSUdfQ1JZUFRPX05VTEw9bQotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9bQogQ09ORklHX0NSWVBUT19DUllQVEQ9bQotQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KIENPTkZJR19DUllQVE9fVEVTVD1tCi0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotQ09ORklHX0NSWVBUT19DQkM9bQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPW0KIENPTkZJR19DUllQVE9fTFJXPW0KIENPTkZJR19DUllQVE9fUENCQz1tCiBDT05GSUdfQ1JZUFRPX1hUUz1tCi0KLSMKLSMgSGFzaCBtb2RlcwotIwotQ09ORklHX0NSWVBUT19ITUFDPW0KIENPTkZJR19DUllQVE9fWENCQz1tCiBDT05GSUdfQ1JZUFRPX1ZNQUM9bQotCi0jCi0jIERpZ2VzdAotIwotQ09ORklHX0NSWVBUT19DUkMzMkM9bQogQ09ORklHX0NSWVBUT19HSEFTSD1tCiBDT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT1tCiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19TSEExPW0KIENPTkZJR19DUllQVE9fU0hBMjU2PW0KIENPTkZJR19DUllQVE9fU0hBNTEyPW0KIENPTkZJR19DUllQVE9fVEdSMTkyPW0KLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwogQ09ORklHX0NSWVBUT19BRVM9bQotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FSQzQ9bQogQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19DQVNUNT1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KLUNPTkZJR19DUllQVE9fREVTPW0KIENPTkZJR19DUllQVE9fRkNSWVBUPW0KIENPTkZJR19DUllQVE9fS0hBWkFEPW0KLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fU0VFRD1tCiBDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQogQ09ORklHX0NSWVBUT19URUE9bQogQ09ORklHX0NSWVBUT19UV09GSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQotCi0jCi0jIENvbXByZXNzaW9uCi0jCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotQ09ORklHX0NSQ19DQ0lUVD1tCi1DT05GSUdfQ1JDMTY9eQotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDX0lUVV9UPXkKLUNPTkZJR19DUkMzMj15Ci1DT05GSUdfQ1JDNz15Ci1DT05GSUdfTElCQ1JDMzJDPW0KLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT1tCi1DT05GSUdfTFpPX0NPTVBSRVNTPW0KLUNPTkZJR19MWk9fREVDT01QUkVTUz1tCi1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKLUNPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQotQ09ORklHX1RFWFRTRUFSQ0g9eQotQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KLUNPTkZJR19URVhUU0VBUkNIX0JNPW0KLUNPTkZJR19URVhUU0VBUkNIX0ZTTT1tCi1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9mb290YnJpZGdlX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZm9vdGJyaWRnZV9kZWZjb25maWcKaW5kZXggMDRkOTc5My4uNGY5MjVlYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9mb290YnJpZGdlX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2Zvb3RicmlkZ2VfZGVmY29uZmlnCkBAIC0xLDIzNCArMSw2MSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazIKLSMgU3VuIE1hciAyNyAyMzowMjoyNCAyMDA1Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19JT01BUD15Ci0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0ZPT1RCUklER0U9eQotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRm9vdGJyaWRnZSBJbXBsZW1lbnRhdGlvbnMKLSMKIENPTkZJR19BUkNIX0NBVFM9eQogQ09ORklHX0FSQ0hfUEVSU09OQUxfU0VSVkVSPXkKLSMgQ09ORklHX0FSQ0hfRUJTQTI4NV9BRERJTiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FQlNBMjg1X0hPU1Q9eQogQ09ORklHX0FSQ0hfTkVUV0lOREVSPXkKLUNPTkZJR19GT09UQlJJREdFPXkKLUNPTkZJR19GT09UQlJJREdFX0hPU1Q9eQotQ09ORklHX0FSQ0hfRUJTQTI4NT15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfU0ExMTA9eQotQ09ORklHX0NQVV8zMnY0PXkKLUNPTkZJR19DUFVfQUJSVF9FVjQ9eQotQ09ORklHX0NQVV9DQUNIRV9WNFdCPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXQj15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLQotIwotIyBCdXMgc3VwcG9ydAotIwotQ09ORklHX0lTQT15Ci1DT05GSUdfSVNBX0RNQT15Ci1DT05GSUdfUENJPXkKLSMgQ09ORklHX1BDSV9MRUdBQ1lfUFJPQyBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX05BTUVTPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiBDT05GSUdfTEVEUz15CiBDT05GSUdfTEVEU19USU1FUj15Ci0jIENPTkZJR19MRURTX0NQVSBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0iIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKIENPTkZJR19GUEVfTldGUEVfWFA9eQotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQogQ09ORklHX0JJTkZNVF9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCitDT05GSUdfTkVUPXkKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorQ09ORklHX0FUTT15CitDT05GSUdfSVJEQT1tCitDT05GSUdfSVJMQU49bQorQ09ORklHX0lSTkVUPW0KK0NPTkZJR19JUkNPTU09bQorQ09ORklHX0lSREFfVUxUUkE9eQorQ09ORklHX0lSREFfQ0FDSEVfTEFTVF9MU0FQPXkKK0NPTkZJR19JUkRBX0ZBU1RfUlI9eQorQ09ORklHX0lSREFfREVCVUc9eQorQ09ORklHX1dJTkJPTkRfRklSPW0KIENPTkZJR19QQVJQT1JUPXkKIENPTkZJR19QQVJQT1JUX1BDPXkKIENPTkZJR19QQVJQT1JUX1BDX0ZJRk89eQotIyBDT05GSUdfUEFSUE9SVF9QQ19TVVBFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlRfQVJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlRfR1NDIGlzIG5vdCBzZXQKIENPTkZJR19QQVJQT1JUXzEyODQ9eQotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwogQ09ORklHX1BOUD15Ci0jIENPTkZJR19QTlBfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFByb3RvY29scwotIwogQ09ORklHX0lTQVBOUD15Ci0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1hEIGlzIG5vdCBzZXQKIENPTkZJR19QQVJJREU9bQotQ09ORklHX1BBUklERV9QQVJQT1JUPXkKLQotIwotIyBQYXJhbGxlbCBJREUgaGlnaC1sZXZlbCBkcml2ZXJzCi0jCiBDT05GSUdfUEFSSURFX1BEPW0KIENPTkZJR19QQVJJREVfUENEPW0KIENPTkZJR19QQVJJREVfUEY9bQogQ09ORklHX1BBUklERV9QVD1tCiBDT05GSUdfUEFSSURFX1BHPW0KLQotIwotIyBQYXJhbGxlbCBJREUgcHJvdG9jb2wgbW9kdWxlcwotIwogQ09ORklHX1BBUklERV9BVEVOPW0KIENPTkZJR19QQVJJREVfQlBDSz1tCi0jIENPTkZJR19QQVJJREVfQlBDSzYgaXMgbm90IHNldAogQ09ORklHX1BBUklERV9DT01NPW0KIENPTkZJR19QQVJJREVfRFNUUj1tCiBDT05GSUdfUEFSSURFX0ZJVDI9bQogQ09ORklHX1BBUklERV9GSVQzPW0KIENPTkZJR19QQVJJREVfRVBBVD1tCi0jIENPTkZJR19QQVJJREVfRVBBVEM4IGlzIG5vdCBzZXQKIENPTkZJR19QQVJJREVfRVBJQT1tCiBDT05GSUdfUEFSSURFX0ZSSVE9bQogQ09ORklHX1BBUklERV9GUlBXPW0KQEAgLTIzNiwxMDE5ICs2Myw2NSBAQAogQ09ORklHX1BBUklERV9LVFRJPW0KIENPTkZJR19QQVJJREVfT04yMD1tCiBDT05GSUdfUEFSSURFX09OMjY9bQotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPW0KLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9OQkQ9bQotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIwogQ09ORklHX0lERT15Ci1DT05GSUdfQkxLX0RFVl9JREU9eQotCi0jCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPXkKLUNPTkZJR19JREVESVNLX01VTFRJX01PREU9eQotIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLUNPTkZJR19JREVfR0VORVJJQz15Ci0jIENPTkZJR19CTEtfREVWX0lERVBOUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVBDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9DSElQU0VUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMk8gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15Ci0jIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVENQRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRNPXkKLSMgQ09ORklHX0FUTV9DTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9MQU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9CUjI2ODQgaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotQ09ORklHX0lSREE9bQotCi0jCi0jIElyREEgcHJvdG9jb2xzCi0jCi1DT05GSUdfSVJMQU49bQotQ09ORklHX0lSTkVUPW0KLUNPTkZJR19JUkNPTU09bQotQ09ORklHX0lSREFfVUxUUkE9eQotCi0jCi0jIElyREEgb3B0aW9ucwotIwotQ09ORklHX0lSREFfQ0FDSEVfTEFTVF9MU0FQPXkKLUNPTkZJR19JUkRBX0ZBU1RfUlI9eQotQ09ORklHX0lSREFfREVCVUc9eQotCi0jCi0jIEluZnJhcmVkLXBvcnQgZGV2aWNlIGRyaXZlcnMKLSMKLQotIwotIyBTSVIgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0lSVFRZX1NJUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRG9uZ2xlIHN1cHBvcnQKLSMKLQotIwotIyBPbGQgU0lSIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19JUlBPUlRfU0lSIGlzIG5vdCBzZXQKLQotIwotIyBPbGQgU2VyaWFsIGRvbmdsZSBzdXBwb3J0Ci0jCi0KLSMKLSMgRklSIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUdNQVRFTF9GSVIgaXMgbm90IHNldAotIyBDT05GSUdfTlNDX0ZJUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0lOQk9ORF9GSVI9bQotIyBDT05GSUdfVE9TSElCQV9GSVIgaXMgbm90IHNldAotIyBDT05GSUdfU01DX0lSQ0NfRklSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FMSV9GSVIgaXMgbm90IHNldAotIyBDT05GSUdfVkxTSV9GSVIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX0ZJUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NCMTAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NPXkKLSMgQ09ORklHX0VMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTDIgaXMgbm90IHNldAotIyBDT05GSUdfRUxQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VMMTYgaXMgbm90IHNldAotIyBDT05GSUdfRUwzIGlzIG5vdCBzZXQKLSMgQ09ORklHXzNDNTE1IGlzIG5vdCBzZXQKIENPTkZJR19WT1JURVg9eQotIyBDT05GSUdfVFlQSE9PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9SQUNBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDE3MDAgaXMgbm90IHNldAotIyBDT05GSUdfREVQQ0EgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lTQSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15Ci0jIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfQUMzMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUklDT1QgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUzg5eDAgaXMgbm90IHNldAotIyBDT05GSUdfREdSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKIENPTkZJR19ORTJLX1BDST15Ci0jIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAotIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRNIGRyaXZlcnMKLSMKLSMgQ09ORklHX0FUTV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfQVRNX0xBTkFJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9FTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVRNX0ZJUkVTVFJFQU0gaXMgbm90IHNldAotIyBDT05GSUdfQVRNX1pBVE0gaXMgbm90IHNldAotIyBDT05GSUdfQVRNX05JQ1NUQVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRNX0lEVDc3MjUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9BTUJBU1NBRE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9IT1JJWk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9JQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fRk9SRTIwMEVfTUFZQkUgaXMgbm90IHNldAotIyBDT05GSUdfQVRNX0hFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUExJUCBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KLSMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQX0FTWU5DPW0KLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0CiBDT05GSUdfUFBQX0RFRkxBVEU9bQogQ09ORklHX1BQUF9CU0RDT01QPW0KIENPTkZJR19QUFBPRT1tCi0jIENPTkZJR19QUFBPQVRNIGlzIG5vdCBzZXQKIENPTkZJR19TTElQPW0KIENPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQogQ09ORklHX1NMSVBfU01BUlQ9eQogQ09ORklHX1NMSVBfTU9ERV9TTElQNj15Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci1DT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQotQ09ORklHX01PVVNFX1BTMj15Ci0jIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfSU5QT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0xPR0lCTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9QQzExMFBBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19JODA0Mj15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19QQVJLQkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19TT1VORF9HQU1FUE9SVD15Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEPXkKLSMgQ09ORklHX0NPTVBVVE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST0NLRVRQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NZQ0xBREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RJR0lFUENBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VTUFNFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1hBX0lOVEVMTElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PWEFfU01BUlRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0kgaXMgbm90IHNldAotIyBDT05GSUdfU1lOQ0xJTksgaXMgbm90IHNldAotIyBDT05GSUdfU1lOQ0xJTktNUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OX0hETEMgaXMgbm90IHNldAotIyBDT05GSUdfUklTQ09NOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEVDSUFMSVggaXMgbm90IHNldAotIyBDT05GSUdfU1ggaXMgbm90IHNldAotIyBDT05GSUdfUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUxEUlYgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF8yMTI4NT15CiBDT05GSUdfU0VSSUFMXzIxMjg1X0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiBDT05GSUdfUFJJTlRFUj1tCi0jIENPTkZJR19MUF9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEFSIGlzIG5vdCBzZXQKLQotIwotIyBJUE1JCi0jCi0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi1DT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfU09GVF9XQVRDSERPRz15Ci1DT05GSUdfMjEyODVfV0FUQ0hET0c9bQotQ09ORklHXzk3N19XQVRDSERPRz1tCi0KLSMKLSMgSVNBLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19QQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JWENPTVdEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19EUzE2MjA9eQogQ09ORklHX05XQlVUVE9OPXkKIENPTkZJR19OV0JVVFRPTl9SRUJPT1Q9eQogQ09ORklHX05XRkxBU0g9bQotQ09ORklHX05WUkFNPW0KLUNPTkZJR19SVEM9eQotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCi0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCiBDT05GSUdfSTJDPW0KLSMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfRUxFS1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ3gyMDBfQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIFNlbnNvcnMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkNfU0VOU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi1DT05GSUdfVklERU9fREVWPW0KLQotIwotIyBWaWRlbyBGb3IgTGludXgKLSMKLQotIwotIyBWaWRlbyBBZGFwdGVycwotIwotIyBDT05GSUdfVklERU9fQlQ4NDggaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fUE1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0JXUUNBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19DUUNBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19XOTk2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19DUElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldAotIyBDT05GSUdfVFVORVJfMzAzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19TVFJBRElTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1NBQTcxMzQgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTVhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0RQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19IRVhJVU1fT1JJT04gaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fSEVYSVVNX0dFTUlOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19DWDg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09WQ0FNQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFkaW8gQWRhcHRlcnMKLSMKLSMgQ09ORklHX1JBRElPX0NBREVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX1JUUkFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQURJT19SVFJBQ0syIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX0FaVEVDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQURJT19HRU1URUsgaXMgbm90IHNldAotIyBDT05GSUdfUkFESU9fR0VNVEVLX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQURJT19NQVhJUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfUkFESU9fTUFFU1RSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQURJT19TRjE2Rk1JIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX1NGMTZGTVIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX1RFUlJBVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX1RSVVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX1RZUEhPT04gaXMgbm90IHNldAotIyBDT05GSUdfUkFESU9fWk9MVFJJWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCitDT05GSUdfV0FUQ0hET0c9eQorQ09ORklHX1NPRlRfV0FUQ0hET0c9eQorQ09ORklHXzIxMjg1X1dBVENIRE9HPW0KK0NPTkZJR185NzdfV0FUQ0hET0c9bQogQ09ORklHX0ZCPXkKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci1DT05GSUdfRkJfU09GVF9DVVJTT1I9eQotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKIENPTkZJR19GQl9DWUJFUjIwMDA9eQotIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1JBREVPTl9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUkFERU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwotQ09ORklHX1ZHQV9DT05TT0xFPXkKLSMgQ09ORklHX01EQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUgaXMgbm90IHNldAotCi0jCi0jIExvZ28gY29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCiBDT05GSUdfU09VTkQ9bQotCi0jCi0jIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQotIwotIyBDT05GSUdfU05EIGlzIG5vdCBzZXQKLQotIwotIyBPcGVuIFNvdW5kIFN5c3RlbQotIwotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPW0KIENPTkZJR19VU0JfREVCVUc9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRUhDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLUNPTkZJR19VU0JfQVVESU89bQotIyBDT05GSUdfVVNCX0JMVUVUT09USF9UVFkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JREkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1BSSU5URVI9bQotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwotIyBDT05GSUdfVVNCX1NUT1JBR0UgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FJUFRFSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0FDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUdBTEFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9WSUNBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFNCUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSUJNQ0FNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LT05JQ0FXQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1Y1MTEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTjlDMTAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVFY2ODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BXQyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj1tCi0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1VTUzcyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVRLSVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVRTRVJWTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEFUTS9EU0wgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1BFRURUT1VDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCi0jIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIworQ09ORklHX1VTQl9QUklOVEVSPW0KIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBYRlMgc3VwcG9ydAotIwotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQVVUT0ZTNF9GUz15Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwogQ09ORklHX0lTTzk2NjBfRlM9bQogQ09ORklHX0pPTElFVD15Ci0jIENPTkZJR19aSVNPRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPW0KIENPTkZJR19NU0RPU19GUz1tCiBDT05GSUdfVkZBVF9GUz1tCi1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19TWVNGUz15Ci0jIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwogQ09ORklHX0FERlNfRlM9bQotIyBDT05GSUdfQURGU19GU19SVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKIENPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotQ09ORklHX05GU0Q9bQotIyBDT05GSUdfTkZTRF9WMyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTRF9UQ1A9eQogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfRVhQT1JURlM9bQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIworQ09ORklHX05GU0Q9bQogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CiBDT05GSUdfQUNPUk5fUEFSVElUSU9OPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTl9DVU1BTkEgaXMgbm90IHNldAotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OX0VFU09YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTl9JQ1MgaXMgbm90IHNldAogQ09ORklHX0FDT1JOX1BBUlRJVElPTl9BREZTPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTl9QT1dFUlRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT05fUklTQ0lYIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCiBDT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KIENPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPW0KIENPTkZJR19OTFNfSVNPODg1OV8yPW0KLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xNT1tCi0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogQ09ORklHX0RFQlVHX1VTRVI9eQotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19DUkNfQ0NJVFQ9bQotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9mb3J0dW5ldF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2ZvcnR1bmV0X2RlZmNvbmZpZwppbmRleCBkNTgxNDJiLi5lMTFjN2VhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2ZvcnR1bmV0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2ZvcnR1bmV0X2RlZmNvbmZpZwpAQCAtMSw1NTYgKzEsMjggQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCi0jIFN1biBNYXIgMjcgMjM6NTE6MTAgMjAwNQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSU9NQVA9eQotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCi0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwotIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9DTFBTNzExWD15Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0xQUzcxMVgvRVA3MjFYIEltcGxlbWVudGF0aW9ucwotIwotIyBDT05GSUdfQVJDSF9BVVRDUFUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NEQjg5NzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0VJVkEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTEVQNzMxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VEQjcyMTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QNzIwVCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9GT1JUVU5FVD15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNNzIwVD15Ci1DT05GSUdfQ1BVXzMydjQ9eQotQ09ORklHX0NQVV9BQlJUX0xWNFQ9eQotQ09ORklHX0NQVV9DQUNIRV9WND15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V1Q9eQotQ09ORklHX0NQVV9UTEJfVjRXVD15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCiAjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9IiIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotIyBDT05GSUdfRlBFX05XRlBFIGlzIG5vdCBzZXQKIENPTkZJR19GUEVfRkFTVEZQRT15Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15CiBDT05GSUdfQklORk1UX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIworQ09ORklHX05FVD15CitDT05GSUdfVU5JWD15CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QQVJUSVRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29ya2luZyBzdXBwb3J0Ci0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLSMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCi0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKIENPTkZJR19TRVJJQUxfQ0xQUzcxMVg9eQogQ09ORklHX1NFUklBTF9DTFBTNzExWF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIwotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfU1lTRlM9eQotIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0pGRlNfRlM9eQotQ09ORklHX0pGRlNfRlNfVkVSQk9TRT0wCi0jIENPTkZJR19KRkZTX1BST0NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCi0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15CiBDT05GSUdfREVCVUdfVVNFUj15Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCi0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9nM2V2bV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2czZXZtX2RlZmNvbmZpZwppbmRleCAzYzE5MDMxLi40YTMzNmFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2czZXZtX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2czZXZtX2RlZmNvbmZpZwpAQCAtMSw3NzQgKzEsNTcgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzcKLSMgTW9uIEZlYiAgOCAxMjoyMDowMSAyMDEwCi0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfSEFWRV9LRVJORUxfR1pJUD15Ci1DT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKLUNPTkZJR19LRVJORUxfR1pJUD15Ci0jIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAotIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNgotQ09ORklHX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLSMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX05BTUVTUEFDRVM9eQotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLUNPTkZJR19SRF9CWklQMj15Ci1DT05GSUdfUkRfTFpNQT15Ci1DT05GSUdfUkRfTFpPPXkKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9OT09QPXkKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ET1ZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TSE1PQklMRT15Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VODUwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0gtTW9iaWxlIFN5c3RlbSBUeXBlCi0jCiBDT05GSUdfQVJDSF9TSDczNjc9eQotIyBDT05GSUdfQVJDSF9TSDczNzcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSDczNzIgaXMgbm90IHNldAotCi0jCi0jIFNILU1vYmlsZSBCb2FyZCBUeXBlCi0jCiBDT05GSUdfTUFDSF9HM0VWTT15Ci0KLSMKLSMgU0gtTW9iaWxlIFN5c3RlbSBDb25maWd1cmF0aW9uCi0jCi0KLSMKLSMgTWVtb3J5IGNvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19NRU1PUllfU1RBUlQ9MHg1MDAwMDAwMAotQ09ORklHX01FTU9SWV9TSVpFPTB4MDgwMDAwMDAKLQotIwotIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgotIwotQ09ORklHX1NIX1RJTUVSX0NNVD15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfVjY9eQotIyBDT05GSUdfQ1BVXzMydjZLIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfMzJ2Nj15Ci1DT05GSUdfQ1BVX0FCUlRfRVY2PXkKLUNPTkZJR19DUFVfUEFCUlRfVjY9eQotQ09ORklHX0NQVV9DQUNIRV9WNj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQotQ09ORklHX0NQVV9DT1BZX1Y2PXkKLUNPTkZJR19DUFVfVExCX1Y2PXkKLUNPTkZJR19DUFVfSEFTX0FTSUQ9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQotIyBDT05GSUdfQVJNX0VSUkFUQV80MTE5MjAgaXMgbm90IHNldAotQ09ORklHX0NPTU1PTl9DTEtERVY9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15CiAjIENPTkZJR19PQUJJX0NPTVBBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTAKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwxMTUyMDAgZWFybHlwcmludGs9c2gtc2NpLjEsMTE1MjAwIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfS0VYRUM9eQotQ09ORklHX0FUQUdTX1BST0M9eQotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCi0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi0jIENPTkZJR19WRlAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCiBDT05GSUdfUE09eQotIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU1VTUEVORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19ORVQgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQogIyBDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVA9eQotIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVYgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKIENPTkZJR19TRVJJQUxfU0hfU0NJPXkKIENPTkZJR19TRVJJQUxfU0hfU0NJX05SX1VBUlRTPTgKIENPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotIyBDT05GSUdfRlNOT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOT1RJRllfVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLIGlzIG5vdCBzZXQKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotQ09ORklHX0FSTV9VTldJTkQ9eQotIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAotIyBDT05GSUdfT0NfRVRNIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMzIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfTFpPX0RFQ09NUFJFU1M9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfREVDT01QUkVTU19CWklQMj15Ci1DT05GSUdfREVDT01QUkVTU19MWk1BPXkKLUNPTkZJR19ERUNPTVBSRVNTX0xaTz15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZzRldm1fZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9nNGV2bV9kZWZjb25maWcKaW5kZXggOGVlNzlhNS4uMjFjNmQwMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9nNGV2bV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9nNGV2bV9kZWZjb25maWcKQEAgLTEsNzc5ICsxLDU3IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmM3Ci0jIE1vbiBGZWIgIDggMTI6MjE6MzUgMjAxMAotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQotQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15Ci1DT05GSUdfS0VSTkVMX0daSVA9eQotIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKLUNPTkZJR19HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci0jIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci1DT05GSUdfUkRfQlpJUDI9eQotQ09ORklHX1JEX0xaTUE9eQotQ09ORklHX1JEX0xaTz15Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTk9PUD15Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi1DT05GSUdfTU1VPXkKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRE9WRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU0hNT0JJTEU9eQotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1M1UEMxWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVTg1MDAgaXMgbm90IHNldAotCi0jCi0jIFNILU1vYmlsZSBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9TSDczNjcgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU0g3Mzc3PXkKLSMgQ09ORklHX0FSQ0hfU0g3MzcyIGlzIG5vdCBzZXQKLQotIwotIyBTSC1Nb2JpbGUgQm9hcmQgVHlwZQotIwogQ09ORklHX01BQ0hfRzRFVk09eQotCi0jCi0jIFNILU1vYmlsZSBTeXN0ZW0gQ29uZmlndXJhdGlvbgotIwotCi0jCi0jIE1lbW9yeSBjb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTUVNT1JZX1NUQVJUPTB4NDAwMDAwMDAKLUNPTkZJR19NRU1PUllfU0laRT0weDA4MDAwMDAwCi0KLSMKLSMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19TSF9USU1FUl9DTVQ9eQotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVXzMydjZLPXkKLUNPTkZJR19DUFVfVjc9eQotQ09ORklHX0NQVV8zMnY3PXkKLUNPTkZJR19DUFVfQUJSVF9FVjc9eQotQ09ORklHX0NQVV9QQUJSVF9WNz15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y3PXkKLUNPTkZJR19DUFVfQ0FDSEVfVklQVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjY9eQotQ09ORklHX0NQVV9UTEJfVjc9eQotQ09ORklHX0NQVV9IQVNfQVNJRD15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0FSTV9USFVNQkVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAotQ09ORklHX0hBU19UTFNfUkVHPXkKLUNPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQotIyBDT05GSUdfQVJNX0VSUkFUQV80MzA5NzMgaXMgbm90IHNldAotIyBDT05GSUdfQVJNX0VSUkFUQV80NTg2OTMgaXMgbm90IHNldAotIyBDT05GSUdfQVJNX0VSUkFUQV80NjAwNzUgaXMgbm90IHNldAotQ09ORklHX0NPTU1PTl9DTEtERVY9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMDAKLSMgQ09ORklHX1RIVU1CMl9LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0FFQUJJPXkKICMgQ09ORklHX09BQklfQ09NUEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0jIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0M0LDExNTIwMCBlYXJseXByaW50az1zaC1zY2kuNCwxMTUyMDAiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19LRVhFQz15Ci1DT05GSUdfQVRBR1NfUFJPQz15Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKLSMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVVNQRU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLSMgQ09ORklHX05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15CiAjIENPTkZJR19GSVJNV0FSRV9JTl9LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci0jIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkQ9eQotIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfSURTPXkKLSMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9TSF9TQ0k9eQogQ09ORklHX1NFUklBTF9TSF9TQ0lfTlJfVUFSVFM9OAogQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci0jIENPTkZJR19GU05PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfSU5PVElGWV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVEVDVF9IVU5HX1RBU0sgaXMgbm90IHNldAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJNX1VOV0lORD15Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ19FVE0gaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19MWk9fREVDT01QUkVTUz15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKLUNPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQotQ09ORklHX0RFQ09NUFJFU1NfTFpPPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9oMzYwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZwppbmRleCBhOGFkOGZiLi4zMTc5NjBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZwpAQCAtMSwxMTYzICsxLDc5IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1Ci0jIFNhdCBPY3QgMjQgMDA6MDk6MzAgMjAwOQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0FSQ0hfSEFTX0NQVUZSRVE9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0FSQ0hfTVREX1hJUD15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotQ09ORklHX1JEX0JaSVAyPXkKLUNPTkZJR19SRF9MWk1BPXkKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkRBRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX05PT1A9eQotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKLUNPTkZJR19GUkVFWkVSPXkKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotQ09ORklHX01NVT15Ci0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05PTUFESUsgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU0ExMTAwPXkKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0ExMXgwIEltcGxlbWVudGF0aW9ucwotIwotIyBDT05GSUdfU0ExMTAwX0FTU0FCRVQgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0NFUkYgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0NPTExJRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSDMxMDAgaXMgbm90IHNldAogQ09ORklHX1NBMTEwMF9IMzYwMD15Ci0jIENPTkZJR19TQTExMDBfQkFER0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9KT1JOQURBNzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9IQUNLS0lUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9MQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9QTEVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9TSEFOTk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9TSU1QQUQgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX1NTUCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfU0ExMTAwPXkKLUNPTkZJR19DUFVfMzJ2ND15Ci1DT05GSUdfQ1BVX0FCUlRfRVY0PXkKLUNPTkZJR19DUFVfUEFCUlRfTEVHQUNZPXkKLUNPTkZJR19DUFVfQ0FDSEVfVjRXQj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9UTEJfVjRXQj15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi1DT05GSUdfSVNBPXkKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0NBUkQ9eQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUE9eQotQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15Ci1DT05GSUdfUENNQ0lBX0lPQ1RMPXkKLQotIwotIyBQQy1jYXJkIGJyaWRnZXMKLSMKLSMgQ09ORklHX0k4MjM2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0lDIGlzIG5vdCBzZXQKIENPTkZJR19QQ01DSUFfU0ExMTAwPXkKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMDAKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQ9eQotIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfU1BBUlNFTUVNX01BTlVBTD15Ci1DT05GSUdfU1BBUlNFTUVNPXkKLUNPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKLUNPTkZJR19TUEFSU0VNRU1fRVhUUkVNRT15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSIiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwotQ09ORklHX0NQVV9GUkVRPXkKLSMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9GUkVRX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0U9eQotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPXkKLSMgQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9TQTExMDA9eQotIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwogQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QTV9TTEVFUD15Ci1DT05GSUdfU1VTUEVORD15Ci1DT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKLSMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotIyBDT05GSUdfUEFDS0VUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLUNPTkZJR19JTkVUX0xSTz15Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAogQ09ORklHX0lSREE9bQotCi0jCi0jIElyREEgcHJvdG9jb2xzCi0jCiBDT05GSUdfSVJMQU49bQogQ09ORklHX0lSTkVUPW0KIENPTkZJR19JUkNPTU09bQotIyBDT05GSUdfSVJEQV9VTFRSQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSXJEQSBvcHRpb25zCi0jCi0jIENPTkZJR19JUkRBX0NBQ0hFX0xBU1RfTFNBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBX0ZBU1RfUlIgaXMgbm90IHNldAotIyBDT05GSUdfSVJEQV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5mcmFyZWQtcG9ydCBkZXZpY2UgZHJpdmVycwotIwotCi0jCi0jIFNJUiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfSVJUVFlfU0lSIGlzIG5vdCBzZXQKLQotIwotIyBEb25nbGUgc3VwcG9ydAotIwotCi0jCi0jIEZJUiBkZXZpY2UgZHJpdmVycwotIwogQ09ORklHX1NBMTEwMF9GSVI9bQotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQotQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfUkVBRE9OTFkgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15CiBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15Ci1DT05GSUdfTVREX0NGSV9OT1NXQVA9eQotIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfR0VPTUVUUlk9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ0ZJX0kxIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1NBMTEwMD15Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BOUCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD1tCi0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQotCi0jCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0lERV9HRD15Ci1DT05GSUdfSURFX0dEX0FUQT15Ci0jIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFQ1M9eQotIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAotQ09ORklHX0lERV9QUk9DX0ZTPXkKLQotIwotIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCi0jCi0jIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU4gaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKIENPTkZJR19ORVRfUENNQ0lBPXkKLSMgQ09ORklHX1BDTUNJQV8zQzU4OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfM0M1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX0ZNVkoxOFggaXMgbm90IHNldAogQ09ORklHX1BDTUNJQV9QQ05FVD15Ci0jIENPTkZJR19QQ01DSUFfTk1DTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9TTUM5MUM5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfWElSQzJQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfQVhORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9bQotIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKIENPTkZJR19QUFBfQVNZTkM9bQotIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKIENPTkZJR19QUFBfREVGTEFURT1tCiBDT05GSUdfUFBQX0JTRENPTVA9bQotIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAotIyBDT05GSUdfUFBQT0UgaXMgbm90IHNldAotIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9HUElPPXkKLSMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX1NBMTEwMD15CiBDT05GSUdfU0VSSUFMX1NBMTEwMF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAotIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEFDOTcgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci1DT05GSUdfSFRDX0VHUElPPXkKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19NQ1BfU0ExMVgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9EREMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCiBDT05GSUdfRkJfU0ExMTAwPXkKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NREFfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR08gaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz1tCiBDT05GSUdfTVNET1NfRlM9bQogQ09ORklHX1ZGQVRfRlM9bQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPW0KLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX05GU0Q9bQotIyBDT05GSUdfTkZTRF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfRVhQT1JURlM9bQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiBDT05GSUdfU01CX0ZTPW0KLSMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15CiBDT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci1DT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST1tCi1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9bQotQ09ORklHX0NSWVBUT19STkc9bQotQ09ORklHX0NSWVBUT19STkcyPW0KLSMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLUNPTkZJR19DUllQVE9fQUVTPW0KLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKLUNPTkZJR19DUllQVE9fQU5TSV9DUFJORz1tCi1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotQ09ORklHX0NSQ19DQ0lUVD1tCi0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQotQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9oNTAwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2g1MDAwX2RlZmNvbmZpZwppbmRleCA1YmI3MzcyLi5hYzMzNmYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2g1MDAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2g1MDAwX2RlZmNvbmZpZwpAQCAtMSw5OTUgKzEsODIgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNy1yYzYKLSMgVHVlIFNlcCAxNiAxNjoxMzo0OCAyMDA4Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19BUkNIX01URF9YSVA9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLSMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQogIyBDT05GSUdfVUlEMTYgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVCBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9DTEs9eQotIyBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9QWEE9eQotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU003WDAwQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKLSMKLSMgQ09ORklHX0FSQ0hfR1VNU1RJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xVQkJPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9MT0dJQ1BEX1BYQTI3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01BSU5TVE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQV9JRFAgaXMgbm90IHNldAotIyBDT05GSUdfUFhBX1NIQVJQU0wgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfRVNFUklFUyBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9INTAwMD15Ci0jIENPTkZJR19NQUNIX1RSSVpFUFM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfRU1fWDI3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NPTElCUkkgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9aWUxPTklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0xJVFRMRVRPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1RBVk9SRVZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfU0FBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0FSTUNPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NQUdJQ0lBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1BDTTAyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQV9QQUxNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BYQV9FWlggaXMgbm90IHNldAotQ09ORklHX1BYQTI1eD15Ci0jIENPTkZJR19QWEFfUFdNIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCi0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfWFNDQUxFPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VD15Ci1DT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAotIyBDT05GSUdfSVdNTVhUIGlzIG5vdCBzZXQKLUNPTkZJR19YU0NBTEVfUE1VPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJrZWVwaW5pdHJkIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfS0VYRUM9eQotQ09ORklHX0FUQUdTX1BST0M9eQotCi0jCi0jIENQVSBGcmVxdWVuY3kgc2NhbGluZwotIwotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwogQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QTV9TTEVFUD15Ci1DT05GSUdfU1VTUEVORD15Ci1DT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKIENPTkZJR19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKLSMgQ09ORklHX01URF9DSEFSIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15CiBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15Ci1DT05GSUdfTVREX0NGSV9OT1NXQVA9eQotIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfR0VPTUVUUlk9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci0jIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVA9eQotQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4ODAwMDAwMAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDAKLUNPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MgotIyBDT05GSUdfTVREX1BYQTJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NIQVJQX1NMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0FQTVBPV0VSIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9QWEE9eQogQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0zMgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCiBDT05GSUdfVVNCX0dBREdFVD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9QWEEyNVg9eQotQ09ORklHX1VTQl9QWEEyNVg9eQotQ09ORklHX1VTQl9QWEEyNVhfU01BTEw9eQotIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VUSD15CitDT05GSUdfVVNCX0VUSD1tCiAjIENPTkZJR19VU0JfRVRIX1JORElTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX1NBMTEwMD15Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBWb2x0YWdlIGFuZCBDdXJyZW50IHJlZ3VsYXRvcnMKLSMKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQorIyBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgaXMgbm90IHNldAogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKLSMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwogQ09ORklHX1BSSU5US19USU1FPXkKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCiAjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19IQVZFX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKIENPTkZJR19DUllQVE9fSE1BQz15Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19TSEExPXkKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKIENPTkZJR19DUllQVE9fREVGTEFURT15Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQgaXMgbm90IHNldAogQ09ORklHX0NSQ19DQ0lUVD15Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaDcyMDFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9oNzIwMV9kZWZjb25maWcKaW5kZXggMDlhNmM2YS4uYmVlOTRkMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9oNzIwMV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9oNzIwMV9kZWZjb25maWcKQEAgLTEsNTY1ICsxLDI3IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmMxLWJrMgotIyBNb24gTWFyIDI4IDAwOjExOjMzIDIwMDUKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX01NVT15Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0lPTUFQPXkKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCi0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIworQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSDcyMFg9eQotCi0jCi0jIGg3MjB4IEltcGxlbWVudGF0aW9ucwotIwogQ09ORklHX0FSQ0hfSDcyMDE9eQotIyBDT05GSUdfQVJDSF9INzIwMiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0g3MjAxPXkKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9BUk03MjBUPXkKLUNPTkZJR19DUFVfMzJ2ND15Ci1DT05GSUdfQ1BVX0FCUlRfTFY0VD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y0PXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdUPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9IiIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwogQ09ORklHX01URD15CiBDT05GSUdfTVREX0RFQlVHPXkKLUNPTkZJR19NVERfREVCVUdfVkVSQk9TRT0wCi0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15CiBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15Ci1DT05GSUdfTVREX0NGSV9OT1NXQVA9eQotIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9HRU9NRVRSWSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci0jIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0g3MjBYIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0KLSMKLSMgU291bmQKLSMKIENPTkZJR19TT1VORD1tCi0KLSMKLSMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCi0jCi0jIENPTkZJR19TTkQgaXMgbm90IHNldAotCi0jCi0jIE9wZW4gU291bmQgU3lzdGVtCi0jCi0jIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCi0jIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFhGUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi0jIENPTkZJR19KRkZTMl9GU19OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX05PUl9FQ0MgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi0jIENPTkZJR19OTFMgaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKIENPTkZJR19ERUJVR19VU0VSPXkKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9oNzIwMl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2g3MjAyX2RlZmNvbmZpZwppbmRleCBmZWRjNTJiLi42OTQwNWE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2g3MjAyX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2g3MjAyX2RlZmNvbmZpZwpAQCAtMSw3MjkgKzEsNDggQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCi0jIE1vbiBNYXIgMjggMDA6MTU6NDUgMjAwNQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSU9NQVA9eQotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSDcyMFg9eQotCi0jCi0jIGg3MjB4IEltcGxlbWVudGF0aW9ucwotIwotIyBDT05GSUdfQVJDSF9INzIwMSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9INzIwMj15Ci1DT05GSUdfQ1BVX0g3MjAyPXkKLSMgQ09ORklHX0g3MjAyX1NFUklBTDIzIGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9BUk03MjBUPXkKLUNPTkZJR19DUFVfMzJ2ND15Ci1DT05GSUdfQ1BVX0FCUlRfTFY0VD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y0PXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdUPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKICMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxOTIwMCIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15CiBDT05GSUdfRlBFX05XRlBFX1hQPXkKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCitDT05GSUdfTkVUPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0g3MjBYPXkKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29ya2luZyBzdXBwb3J0Ci0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLSMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVENQRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIwogQ09ORklHX05FVF9FVEhFUk5FVD15Ci0jIENPTkZJR19NSUkgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRT15Ci1DT05GSUdfTU9VU0VfUFMyPXkKLSMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19TT1VORF9HQU1FUE9SVD15Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCi0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCi0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKIENPTkZJR19GQj15Ci0jIENPTkZJR19GQl9DRkJfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU09GVF9DVVJTT1IgaXMgbm90IHNldAogQ09ORklHX0ZCX01PREVfSEVMUEVSUz15Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKLQotIwotIyBMb2dvIGNvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX0xPR08gaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwogQ09ORklHX1VTQl9HQURHRVQ9bQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAogQ09ORklHX1VTQl9aRVJPPW0KLSMgQ09ORklHX1VTQl9FVEggaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRGUz1tCiBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRT1tCiBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUPXkKIENPTkZJR19VU0JfR19TRVJJQUw9bQotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfU1lTRlM9eQotQ09ORklHX0RFVkZTX0ZTPXkKLUNPTkZJR19ERVZGU19NT1VOVD15Ci0jIENPTkZJR19ERVZGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLSMgQ09ORklHX0pGRlMyX0ZTX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfTk9SX0VDQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotIyBDT05GSUdfUk9PVF9ORlMgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CitDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKIENPTkZJR19ERUJVR19VU0VSPXkKLSMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCi0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaGFja2tpdF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2hhY2traXRfZGVmY29uZmlnCmluZGV4IDJkYTFhY2YuLmJlZDgwNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaGFja2tpdF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9oYWNra2l0X2RlZmNvbmZpZwpAQCAtMSw3NjYgKzEsNDkgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzYtZ2l0MwotIyBUaHUgSnVuICA5IDIwOjU4OjU4IDIwMDUKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX01NVT15Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0lPTUFQPXkKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCi0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIworQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NBMTEwMD15Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotCi0jCi0jIFNBMTF4MCBJbXBsZW1lbnRhdGlvbnMKLSMKLSMgQ09ORklHX1NBMTEwMF9BU1NBQkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9DRVJGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9DT0xMSUUgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0gzMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9IMzYwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfQkFER0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9KT1JOQURBNzIwIGlzIG5vdCBzZXQKIENPTkZJR19TQTExMDBfSEFDS0tJVD15Ci0jIENPTkZJR19TQTExMDBfTEFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfUExFQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfU0hBTk5PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfU0lNUEFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9TU1AgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX1NBMTEwMD15Ci1DT05GSUdfQ1BVXzMydjQ9eQotQ09ORklHX0NQVV9BQlJUX0VWND15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y0V0I9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfVExCX1Y0V0I9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi1DT05GSUdfSVNBPXkKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19ESVNDT05USUdNRU09eQogQ09ORklHX0xFRFM9eQotQ09ORklHX0xFRFNfVElNRVI9eQogQ09ORklHX0xFRFNfQ1BVPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNBMCwxMTUyMDAgcm9vdD0vZGV2L3JhbTAgaW5pdHJkPTB4YzA0MDAwMDAsOE0gaW5pdD0vcm9vdHNoZWxsIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCi0jCi1DT05GSUdfQ1BVX0ZSRVE9eQotQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKLSMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9TVEFUPXkKLSMgQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFPXkKIENPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQotIyBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT15Ci0jIENPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfU0ExMTAwPXkKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKIENPTkZJR19CSU5GTVRfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIworQ09ORklHX05FVD15CitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogQ09ORklHX01URF9ERUJVRz15CiBDT05GSUdfTVREX0RFQlVHX1ZFUkJPU0U9MwotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEFSVElUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci0jIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotIyBDT05GSUdfUE5QIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfREVWX1hEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVENQRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CiBDT05GSUdfRFVNTVk9eQotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBBUkNuZXQgZGV2aWNlcwotIwotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKLSMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLUNPTkZJR19ORVRfUkFESU89eQotCi0jCi0jIE9ic29sZXRlIFdpcmVsZXNzIGNhcmRzIHN1cHBvcnQgKHByZS04MDIuMTEpCi0jCi0jIENPTkZJR19TVFJJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVZFTEFOIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyA4MDIuMTFiIElTQS9QQ0kgY2FyZHMgc3VwcG9ydAotIwotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotQ09ORklHX05FVF9XSVJFTEVTUz15Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9TQTExMDA9eQogQ09ORklHX1NFUklBTF9TQTExMDBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCi0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCi0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLQotIwotIyBJMkMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NREFfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIwotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKLSMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19TTEFCPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2h0Y2hlcmFsZF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2h0Y2hlcmFsZF9kZWZjb25maWcKaW5kZXggZTBlZjBkMS4uZWRmYTFjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9odGNoZXJhbGRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaHRjaGVyYWxkX2RlZmNvbmZpZwpAQCAtMSwxMTQ0ICsxLDczIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM4Ci0jIFNhdCBEZWMgIDUgMTI6MTY6MjQgMjAwOQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0FSQ0hfSEFTX0NQVUZSRVE9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX05BTUVTUEFDRVM9eQotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci1DT05GSUdfUkRfQlpJUDI9eQotQ09ORklHX1JEX0xaTUE9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotQ09ORklHX0ZSRUVaRVI9eQotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi1DT05GSUdfTU1VPXkKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVA9eQotIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKLQotIwotIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucwotIwotQ09ORklHX0FSQ0hfT01BUF9PVEc9eQogQ09ORklHX0FSQ0hfT01BUDE9eQotIyBDT05GSUdfQVJDSF9PTUFQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUDQgaXMgbm90IHNldAotCi0jCi0jIE9NQVAgRmVhdHVyZSBTZWxlY3Rpb25zCi0jCi0jIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUyBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9NVVg9eQotIyBDT05GSUdfT01BUF9NVVhfREVCVUcgaXMgbm90IHNldAotQ09ORklHX09NQVBfTVVYX1dBUk5JTkdTPXkKLUNPTkZJR19PTUFQX01DQlNQPXkKLSMgQ09ORklHX09NQVBfTUJPWF9GV0sgaXMgbm90IHNldAotQ09ORklHX09NQVBfTVBVX1RJTUVSPXkKLSMgQ09ORklHX09NQVBfMzJLX1RJTUVSIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQxPXkKLSMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX05PTkUgaXMgbm90IHNldAotQ09ORklHX09NQVBfU0VSSUFMX1dBS0U9eQotIyBDT05GSUdfT01BUF9QTV9OT05FIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX1BNX05PT1A9eQotCi0jCi0jIE9NQVAgQ29yZSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX09NQVA3MzAgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT01BUDg1MD15CiAjIENPTkZJR19BUkNIX09NQVAxNVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUDE2WFggaXMgbm90IHNldAotCi0jCi0jIE9NQVAgQm9hcmQgVHlwZQotIwotIyBDT05GSUdfTUFDSF9PTUFQX0hUQ1dJWkFSRCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9IRVJBTEQ9eQotCi0jCi0jIE9NQVAgQ1BVIFNwZWVkCi0jCi0jIENPTkZJR19PTUFQX0NMT0NLU19TRVRfQllfQk9PVExPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfT01BUF9BUk1fMTk1TUhaPXkKLSMgQ09ORklHX09NQVBfQVJNXzE4Mk1IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0FSTV8xNjhNSFogaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9BUk1fMTIwTUhaIGlzIG5vdCBzZXQKICMgQ09ORklHX09NQVBfQVJNXzYwTUhaIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfQVJNXzMwTUhaIGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwogQ09ORklHX0NQVV9BUk05MjVUPXkKLUNPTkZJR19DUFVfQVJNOTI2VD15Ci1DT05GSUdfQ1BVXzMydjRUPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY0VD15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQotQ09ORklHX0NQVV9QQUJSVF9MRUdBQ1k9eQotQ09ORklHX0NQVV9DQUNIRV9WNFdUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXQj15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIPXkKLSMgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTUKLUNPTkZJR19DT01NT05fQ0xLREVWPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLSMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLSMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX0xFRFM9eQotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLSMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0ibWVtPTMyTSBjb25zb2xlPXR0eVMwLDExNTIwMCBpcD1kaGNwIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkQ9eQotQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15Ci0jIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQotQ09ORklHX0lORVRfTFJPPXkKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCi0jIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKIENPTkZJR19TTUM5MVg9eQotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotQ09ORklHX05FVERFVl8xMDAwMD15Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9PTUFQPXkKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9bQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX0NPUkU9bQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009bQotIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgQUM5NyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBkcml2ZXJzCi0jCi0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NIVDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQogQ09ORklHX0ZCPXkKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfT01BUD15Ci0jIENPTkZJR19GQl9PTUFQX0xDRENfRVhURVJOQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfT01BUF9CT09UTE9BREVSX0lOSVQgaXMgbm90IHNldAotQ09ORklHX0ZCX09NQVBfQ09OU0lTVEVOVF9ETUFfU0laRT0yCi0jIENPTkZJR19GQl9PTUFQX0RNQV9UVU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT049eQogQ09ORklHX0ZPTlRTPXkKLSMgQ09ORklHX0ZPTlRfOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfOHgxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKIENPTkZJR19GT05UX01JTklfNHg2PXkKLSMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAotIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwogQ09ORklHX1VTQl9HQURHRVQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgotQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9PTUFQPXkKLUNPTkZJR19VU0JfT01BUD15Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9FVEg9eQorQ09ORklHX1VTQl9FVEg9bQogIyBDT05GSUdfVVNCX0VUSF9STkRJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRVRIX0VFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotQ09ORklHX1VTQl9PVEdfVVRJTFM9eQotIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQotIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwogQ09ORklHX01NQ19TREhDST15CiBDT05GSUdfTU1DX1NESENJX1BMVEZNPXkKIENPTkZJR19NTUNfT01BUD15Ci0jIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci1DT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci1DT05GSUdfQVJNX1VOV0lORD15Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci0jIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQogQ09ORklHX0NSWVBUT19aTElCPXkKIENPTkZJR19DUllQVE9fTFpPPXkKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfTFpPX0NPTVBSRVNTPXkKLUNPTkZJR19MWk9fREVDT01QUkVTUz15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKLUNPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaWdlcDAwMjBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9pZ2VwMDAyMF9kZWZjb25maWcKaW5kZXggZTc5NDBhOS4uZmNkYTA1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9pZ2VwMDAyMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9pZ2VwMDAyMF9kZWZjb25maWcKQEAgLTEsNDYwICsxLDQ3IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMzCi0jIFRodSBKYW4gIDcgMTY6MTQ6NTUgMjAxMAotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0FSQ0hfSEFTX0NQVUZSRVE9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNwotQ09ORklHX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLSMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfVUlEMTY9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9DTEs9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi1DT05GSUdfTU1VPXkKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRE9WRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1M1UEMxWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQPXkKLSMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1U4NTAwIGlzIG5vdCBzZXQKLQotIwotIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucwotIwotQ09ORklHX0FSQ0hfT01BUF9PVEc9eQotIyBDT05GSUdfQVJDSF9PTUFQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVAzPXkKLSMgQ09ORklHX0FSQ0hfT01BUDQgaXMgbm90IHNldAotCi0jCi0jIE9NQVAgRmVhdHVyZSBTZWxlY3Rpb25zCi0jCiBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1M9eQogIyBDT05GSUdfT01BUF9NVVggaXMgbm90IHNldAotQ09ORklHX09NQVBfTUNCU1A9eQotIyBDT05GSUdfT01BUF9NQk9YX0ZXSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX01QVV9USU1FUiBpcyBub3Qgc2V0CiBDT05GSUdfT01BUF8zMktfVElNRVI9eQotQ09ORklHX09NQVBfMzJLX1RJTUVSX0haPTEyOAogQ09ORklHX09NQVBfRE1fVElNRVI9eQotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzPXkKLSMgQ09ORklHX09NQVBfTExfREVCVUdfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX1BNX05PTkUgaXMgbm90IHNldAotQ09ORklHX09NQVBfUE1fTk9PUD15Ci1DT05GSUdfQVJDSF9PTUFQMzRYWD15CiBDT05GSUdfQVJDSF9PTUFQMzQzMD15Ci1DT05GSUdfT01BUF9QQUNLQUdFX0NCQj15Ci0KLSMKLSMgT01BUCBCb2FyZCBUeXBlCi0jCi0jIENPTkZJR19NQUNIX09NQVAzX0JFQUdMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfTERQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT1ZFUk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQM0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVAzNTE3RVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUDNfUEFORE9SQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVAzX1RPVUNIQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfMzQzMFNEUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX05PS0lBX1JYNTEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX1pPT00yIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9aT09NMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NNX1QzNSBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9JR0VQMDAyMD15Ci0jIENPTkZJR19NQUNIX09NQVBfMzYzMFNEUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQM19FTVUgaXMgbm90IHNldAotIyBDT05GSUdfT01BUDNfU0RSQ19BQ19USU1JTkcgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVXzMydjZLPXkKLUNPTkZJR19DUFVfVjc9eQotQ09ORklHX0NQVV8zMnY3PXkKLUNPTkZJR19DUFVfQUJSVF9FVjc9eQotQ09ORklHX0NQVV9QQUJSVF9WNz15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y3PXkKLUNPTkZJR19DUFVfQ0FDSEVfVklQVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjY9eQotQ09ORklHX0NQVV9UTEJfVjc9eQotQ09ORklHX0NQVV9IQVNfQVNJRD15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKIENPTkZJR19BUk1fVEhVTUJFRT15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVNfVExTX1JFRz15Ci1DT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTYKLSMgQ09ORklHX0FSTV9FUlJBVEFfNDMwOTczIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSTV9FUlJBVEFfNDU4NjkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSTV9FUlJBVEFfNDYwMDc1IGlzIG5vdCBzZXQKLUNPTkZJR19DT01NT05fQ0xLREVWPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotQ09ORklHX1ZNU1BMSVRfM0c9eQotIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEyOAotIyBDT05GSUdfVEhVTUIyX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfQUVBQkk9eQogIyBDT05GSUdfT0FCSV9DT01QQVQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSIiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX1ZGUD15Ci1DT05GSUdfVkZQdjM9eQogQ09ORklHX05FT049eQotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX01JU0M9eQotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj15Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotQ09ORklHX1hGUk1fTUlHUkFURT15Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX05FVF9LRVk9eQogQ09ORklHX05FVF9LRVlfTUlHUkFURT15CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15CiBDT05GSUdfSVBfUE5QX1JBUlA9eQotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAogQ09ORklHX0JUPW0KIENPTkZJR19CVF9MMkNBUD1tCiBDT05GSUdfQlRfU0NPPW0KQEAgLTQ2NCwxMTgzICs1MSwxMjkgQEAKIENPTkZJR19CVF9CTkVQX01DX0ZJTFRFUj15CiBDT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVI9eQogQ09ORklHX0JUX0hJRFA9bQotCi0jCi0jIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfQlRfSENJQlRVU0IgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQlRTRElPIGlzIG5vdCBzZXQKIENPTkZJR19CVF9IQ0lVQVJUPW0KIENPTkZJR19CVF9IQ0lVQVJUX0g0PXkKIENPTkZJR19CVF9IQ0lVQVJUX0JDU1A9eQogQ09ORklHX0JUX0hDSVVBUlRfTEw9eQotIyBDT05GSUdfQlRfSENJQkNNMjAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCUEExMFggaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQkZVU0IgaXMgbm90IHNldAogQ09ORklHX0JUX0hDSVZIQ0k9bQogQ09ORklHX0JUX01SVkw9bQogQ09ORklHX0JUX01SVkxfU0RJTz1tCi0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotQ09ORklHX1dJUkVMRVNTX0VYVD15Ci1DT05GSUdfV0VYVF9DT1JFPXkKLUNPTkZJR19XRVhUX1BST0M9eQotQ09ORklHX1dFWFRfU1BZPXkKIENPTkZJR19DRkc4MDIxMT15Ci0jIENPTkZJR19OTDgwMjExX1RFU1RNT0RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFM9eQotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX1dFWFQ9eQotQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15Ci1DT05GSUdfTElCODAyMTE9eQotIyBDT05GSUdfTElCODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01BQzgwMjExPXkKLSMgQ09ORklHX01BQzgwMjExX1JDX1BJRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUFDODAyMTFfUkNfTUlOU1RSRUw9eQotIyBDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9QSUQgaXMgbm90IHNldAotQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUw9eQotQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQ9Im1pbnN0cmVsIgotIyBDT05GSUdfTUFDODAyMTFfTUVTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMV9MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExX0RFQlVHX01FTlUgaXMgbm90IHNldAotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIENPTkZJR19DT05ORUNUT1I9eQotQ09ORklHX1BST0NfRVZFTlRTPXkKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAogQ09ORklHX01URF9PTkVOQU5EPXkKLSMgQ09ORklHX01URF9PTkVOQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORF9HRU5FUklDIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT05FTkFORF9PTUFQMj15Ci0jIENPTkZJR19NVERfT05FTkFORF9PVFAgaXMgbm90IHNldAogQ09ORklHX01URF9PTkVOQU5EXzJYX1BST0dSQU09eQotIyBDT05GSUdfTVREX09ORU5BTkRfU0lNIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiBDT05GSUdfU01TQzkxMVg9eQotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0xJQkVSVEFTX1RISU5GSVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUNzZDNTBYX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEw4MTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExX0hXU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUSF9DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQjQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0M0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotIyBDT05GSUdfSVdNIGlzIG5vdCBzZXQKIENPTkZJR19MSUJFUlRBUz15Ci0jIENPTkZJR19MSUJFUlRBU19VU0IgaXMgbm90IHNldAogQ09ORklHX0xJQkVSVEFTX1NESU89eQotIyBDT05GSUdfTElCRVJUQVNfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkVSVEFTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1A1NF9DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfUlQyWDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMMTJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19aRDEyMTFSVyBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CiBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CiBDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKIENPTkZJR19TRVJJQUxfODI1MF9SU0E9eQotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfT01BUD15Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogQ09ORklHX1NQST15Ci0jIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NQSV9NQVNURVI9eQotCi0jCi0jIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfU1BJX09NQVAyNFhYPXkKLSMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAotIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCi0jIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HUElPX1NZU0ZTPXkKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKIENPTkZJR19HUElPX1RXTDQwMzA9eQotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNldAotCi0jCi0jIEFDOTcgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0CiBDT05GSUdfUE9XRVJfU1VQUExZPXkKLSMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QREFfUE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkFUVEVSWV9EUzI3NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkFUVEVSWV9EUzI3ODIgaXMgbm90IHNldAotIyBDT05GSUdfQkFUVEVSWV9CUTI3eDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBVFRFUllfTUFYMTcwNDAgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKIENPTkZJR19TU0I9bQotQ09ORklHX1NTQl9TRElPSE9TVF9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0JfU0RJT0hPU1QgaXMgbm90IHNldAotIyBDT05GSUdfU1NCX1NJTEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0JfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLUNPTkZJR19NRkRfQ09SRT15Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKIENPTkZJR19UV0w0MDMwX0NPUkU9eQotIyBDT05GSUdfVFdMNDAzMF9QT1dFUiBpcyBub3Qgc2V0Ci1DT05GSUdfVFdMNDAzMF9DT0RFQz15Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfUkVHVUxBVE9SPXkKLSMgQ09ORklHX1JFR1VMQVRPUl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVVNFUlNQQUNFX0NPTlNVTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9NQVgxNTg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9NQVg4NjYwIGlzIG5vdCBzZXQKIENPTkZJR19SRUdVTEFUT1JfVFdMNDAzMD15Ci0jIENPTkZJR19SRUdVTEFUT1JfTFAzOTcxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9UUFM2NTAyMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwN1ggaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogQ09ORklHX0ZCPXkKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1VWRVNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX09NQVBfQk9PVExPQURFUl9JTklUIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQMl9WUkFNPXkKLUNPTkZJR19PTUFQMl9WUkZCPXkKIENPTkZJR19PTUFQMl9EU1M9eQogQ09ORklHX09NQVAyX1ZSQU1fU0laRT0xNAogIyBDT05GSUdfT01BUDJfRFNTX0RFQlVHX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfT01BUDJfRFNTX1JGQkkgaXMgbm90IHNldAogIyBDT05GSUdfT01BUDJfRFNTX1ZFTkMgaXMgbm90IHNldAotIyBDT05GSUdfT01BUDJfRFNTX1NESSBpcyBub3Qgc2V0CiBDT05GSUdfT01BUDJfRFNTX0RTST15CiBDT05GSUdfT01BUDJfRFNTX1VTRV9EU0lfUExMPXkKLSMgQ09ORklHX09NQVAyX0RTU19GQUtFX1ZTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQMl9EU1NfTUlOX0ZDS19QRVJfUENLPTAKIENPTkZJR19GQl9PTUFQMj15CiAjIENPTkZJR19GQl9PTUFQMl9ERUJVR19TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX09NQVAyX0ZPUkNFX0FVVE9fVVBEQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9PTUFQMl9OVU1fRkJTPTMKLQotIwotIyBPTUFQMi8zIERpc3BsYXkgRGV2aWNlIERyaXZlcnMKLSMKIENPTkZJR19QQU5FTF9HRU5FUklDPXkKLSMgQ09ORklHX1BBTkVMX1NIQVJQX0xTMDM3VjdEVzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBTkVMX1RBQUwgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfRElTUExBWV9TVVBQT1JUPXkKLQotIwotIyBEaXNwbGF5IGhhcmR3YXJlIGRyaXZlcnMKLSMKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9OVF84eDg9eQotQ09ORklHX0ZPTlRfOHgxNj15CiBDT05GSUdfTE9HTz15CiAjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAogIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKIENPTkZJR19TT1VORD15Ci0jIENPTkZJR19TT1VORF9PU1NfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfU05EPXkKLUNPTkZJR19TTkRfVElNRVI9eQotQ09ORklHX1NORF9QQ009eQotQ09ORklHX1NORF9KQUNLPXkKLSMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfRFJJVkVSUz15Ci0jIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAotQ09ORklHX1NORF9BUk09eQotQ09ORklHX1NORF9TUEk9eQotQ09ORklHX1NORF9VU0I9eQotIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfU09DPXkKIENPTkZJR19TTkRfT01BUF9TT0M9eQotQ09ORklHX1NORF9PTUFQX1NPQ19NQ0JTUD15CiBDT05GSUdfU05EX09NQVBfU09DX0lHRVAwMDIwPXkKLUNPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPXkKLSMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1NPQ19UV0w0MDMwPXkKLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19ISUQ9bQotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwotIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRD15CiBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLQotIwotIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwotIwotIyBDT05GSUdfVVNCX1NUT1JBR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi1DT05GSUdfVVNCX09UR19VVElMUz15Ci0jIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTUDEzMDFfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVUxQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQogQ09ORklHX01NQ19ERUJVRz15Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKLSMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKIENPTkZJR19NTUNfU0RIQ0k9eQotIyBDT05GSUdfTU1DX1NESENJX1BMVEZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19PTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfT01BUF9IUz15Ci0jIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0JVUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19DQlVTIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQotIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKIENPTkZJR19RVU9UQT15Ci0jIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15Ci1DT05GSUdfUVVPVEFfVFJFRT15Ci0jIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKIENPTkZJR19RRk1UX1YyPXkKLUNPTkZJR19RVU9UQUNUTD15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WM19BQ0w9eQogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwogQ09ORklHX1BSSU5US19USU1FPXkKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLUNPTkZJR19GVFJBQ0U9eQotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotQ09ORklHX0FSTV9VTldJTkQ9eQotIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotIyBDT05GSUdfT0NfRVRNIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fRUNCPXkKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLUNPTkZJR19DUllQVE9fQ1JDMzJDPXkKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLUNPTkZJR19DUllQVE9fQUVTPXkKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BUkM0PXkKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQotQ09ORklHX0NSQzE2PW0KIENPTkZJR19DUkNfVDEwRElGPXkKIENPTkZJR19DUkNfSVRVX1Q9bQotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogQ09ORklHX0xJQkNSQzMyQz15Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaW1vdGUyX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW1vdGUyX2RlZmNvbmZpZwppbmRleCAyMWYyYmZmLi5hZGU1NWM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2ltb3RlMl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9pbW90ZTJfZGVmY29uZmlnCkBAIC0xLDQ5MSArMSw2MiBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjMgotIyBUaHUgQXByICA4IDE0OjQ5OjA4IDIwMTAKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfSEFWRV9QUk9DX0NQVT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLUNPTkZJR19BUkNIX0hBU19DUFVGUkVRPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEU9eQotQ09ORklHX0FSQ0hfTVREX1hJUD15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKLUNPTkZJR19IQVZFX0tFUk5FTF9MWk89eQotQ09ORklHX0tFUk5FTF9HWklQPXkKLSMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVJORUxfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQogQ09ORklHX1JEX0JaSVAyPXkKIENPTkZJR19SRF9MWk1BPXkKLSMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLUNPTkZJR19LQUxMU1lNU19BTEw9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19TTE9XX1dPUks9eQotIyBDT05GSUdfU0xPV19XT1JLX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkRBRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9ERUFETElORT15Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotQ09ORklHX0ZSRUVaRVI9eQotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi1DT05GSUdfTU1VPXkKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRE9WRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05VQzkzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUFhBPXkKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hNT0JJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1M1UDY0NDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVA2NDQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1M1UFYyMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVTg1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotCi0jCi0jIEludGVsIFBYQTJ4eC9QWEEzeHggSW1wbGVtZW50YXRpb25zCi0jCi0KLSMKLSMgSW50ZWwvTWFydmVsbCBEZXYgUGxhdGZvcm1zIChzb3J0ZWQgYnkgaGFyZHdhcmUgcmVsZWFzZSB0aW1lKQotIwotIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfWllMT05JVEUzMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9aWUxPTklURTMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0xJVFRMRVRPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1RBVk9SRVZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfU0FBUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVGhpcmQgUGFydHkgRGV2IFBsYXRmb3JtcyAoc29ydGVkIGJ5IHZlbmRvciBuYW1lKQotIwotIyBDT05GSUdfQVJDSF9QWEFfSURQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVklQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9BUkNPTV9aRVVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQkFMTE9PTjMgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DU0I3MjYgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9BUk1DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfRU1fWDI3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0VYRURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ01fWDMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NBUEM3MTE3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR1VNU1RJWCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9JTlRFTE1PVEUyPXkKLSMgQ09ORklHX01BQ0hfU1RBUkdBVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfWENFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUklaRVBTX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfUENNMDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ09MSUJSSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NPTElCUkkzMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DT0xJQlJJMzIwIGlzIG5vdCBzZXQKLQotIwotIyBFbmQtdXNlciBQcm9kdWN0cyAoc29ydGVkIGJ5IHZlbmRvciBuYW1lKQotIwotIyBDT05GSUdfTUFDSF9INDcwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0g1MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfSElNQUxBWUEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NQUdJQ0lBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01JT0E3MDEgaXMgbm90IHNldAotIyBDT05GSUdfUFhBX0VaWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01QOTAwQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQV9QQUxNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfUkFVTUZFTERfUkMgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9SQVVNRkVMRF9DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9SQVVNRkVMRF9TUEVBS0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfSUNPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfRVNFUklFUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFhBMjd4PXkKLUNPTkZJR19QWEFfU1NQPXkKLUNPTkZJR19QWEFfSEFWRV9CT0FSRF9JUlFTPXkKLUNPTkZJR19QTEFUX1BYQT15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfWFNDQUxFPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VD15Ci1DT05GSUdfQ1BVX1BBQlJUX0xFR0FDWT15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD01Ci1DT05GSUdfSVdNTVhUPXkKLUNPTkZJR19YU0NBTEVfUE1VPXkKLUNPTkZJR19DUFVfSEFTX1BNVT15Ci1DT05GSUdfQ09NTU9OX0NMS0RFVj15Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAotIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15Ci1DT05GSUdfT0FCSV9DT01QQVQ9eQotIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz05OTk5OTkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTAKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJyb290PS9kZXYvbXRkYmxvY2syIHJvb3Rmc3R5cGU9amZmczIgY29uc29sZT10dHlTMiwxMTUyMDAgbWVtPTMyTSIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0tFWEVDPXkKLUNPTkZJR19BVEFHU19QUk9DPXkKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQU9VVD15CiBDT05GSUdfQklORk1UX0FPVVQ9bQogQ09ORklHX0JJTkZNVF9NSVNDPW0KLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkQ9eQotQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CiBDT05GSUdfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfUE1fUlVOVElNRT15Ci1DT05GSUdfUE1fT1BTPXkKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci1DT05GSUdfWEZSTV9JUENPTVA9bQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKIENPTkZJR19JUF9QTlBfUkFSUD15Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD1tCiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2PW0KLSMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAogQ09ORklHX0lORVQ2X0FIPW0KIENPTkZJR19JTkVUNl9FU1A9bQogQ09ORklHX0lORVQ2X0lQQ09NUD1tCiBDT05GSUdfSVBWNl9NSVA2PW0KLUNPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCi1DT05GSUdfSU5FVDZfVFVOTkVMPW0KLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCi0jIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAotQ09ORklHX0lQVjZfU0lUPW0KLSMgQ09ORklHX0lQVjZfU0lUXzZSRCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CiBDT05GSUdfSVBWNl9UVU5ORUw9bQogQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTPXkKIENPTkZJR19JUFY2X1NVQlRSRUVTPXkKLSMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKLUNPTkZJR19CUklER0VfTkVURklMVEVSPXkKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkVURklMVEVSX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQogQ09ORklHX05GX0NPTk5UUkFDSz1tCi1DT05GSUdfTkZfQ1RfQUNDVD15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQogQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQotIyBDT05GSUdfTkZfQ1RfUFJPVE9fRENDUCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KIENPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KIENPTkZJR19ORl9DVF9QUk9UT19VRFBMSVRFPW0KIENPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KQEAgLTQ5OCwyMyArNjksMTIgQEAKIENPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KIENPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCiBDT05GSUdfTkZfQ1RfTkVUTElOSz1tCi0jIENPTkZJR19ORVRGSUxURVJfVFBST1hZIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5NQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ1QgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hMPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xFRD1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DTFVTVEVSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVD1tCkBAIC01MjUsMjEgKzg1LDE1IEBACiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hMPW0KLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlQgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQpAQCAtNTQ3LDE1ICsxMDEsNyBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyPW0KLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PU0YgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05GX0RFRlJBR19JUFY0PW0KIENPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKIENPTkZJR19JUF9ORl9RVUVVRT1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KQEAgLTU2NywyMSArMTEzLDEwIEBACiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQogQ09ORklHX05GX05BVD1tCi1DT05GSUdfTkZfTkFUX05FRURFRD15CiBDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCiBDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUM9bQotQ09ORklHX05GX05BVF9QUk9UT19HUkU9bQotQ09ORklHX05GX05BVF9QUk9UT19VRFBMSVRFPW0KLUNPTkZJR19ORl9OQVRfUFJPVE9fU0NUUD1tCi1DT05GSUdfTkZfTkFUX0ZUUD1tCi1DT05GSUdfTkZfTkFUX0lSQz1tCi1DT05GSUdfTkZfTkFUX1RGVFA9bQotQ09ORklHX05GX05BVF9BTUFOREE9bQotQ09ORklHX05GX05BVF9QUFRQPW0KLUNPTkZJR19ORl9OQVRfSDMyMz1tCi1DT05GSUdfTkZfTkFUX1NJUD1tCiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KQEAgLTU5MCwxMCArMTI1LDYgQEAKIENPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQogQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCiBDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCi0KLSMKLSMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKIENPTkZJR19ORl9DT05OVFJBQ0tfSVBWNj1tCiBDT05GSUdfSVA2X05GX1FVRVVFPW0KIENPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQpAQCAtNjExLDIxNSArMTQyLDQwIEBACiBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQogQ09ORklHX0lQNl9ORl9NQU5HTEU9bQogQ09ORklHX0lQNl9ORl9SQVc9bQotIyBDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotQ09ORklHX1NUUD1tCiBDT05GSUdfQlJJREdFPW0KICMgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotQ09ORklHX0xMQz1tCi0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxNTQ9eQotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19GSUJfUlVMRVM9eQogIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogQ09ORklHX0RFVlRNUEZTPXkKIENPTkZJR19ERVZUTVBGU19NT1VOVD15Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPW0KLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIENPTkZJR19DT05ORUNUT1I9bQogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiBDT05GSUdfTVREX0FGU19QQVJUUz15CiBDT05GSUdfTVREX0FSN19QQVJUUz15Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfSEFWRV9NVERfT1RQPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15CiBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15Ci1DT05GSUdfTVREX0NGSV9OT1NXQVA9eQotIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfR0VPTUVUUlk9eQogIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzEgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKICMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQogIyBDT05GSUdfTVREX0NGSV9JMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAogQ09ORklHX01URF9PVFA9eQogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QWEEyWFg9eQotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAotIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9bQogQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCi0jIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTkJEPW0KLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0lfTU9EPXkKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19EVU1NWT15Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTU0X0RSSVZFUlM9eQotIyBDT05GSUdfSUVFRTgwMjE1NF9GQUtFSEFSRCBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KIENPTkZJR19QUFBfTVVMVElMSU5LPXkKIENPTkZJR19QUFBfRklMVEVSPXkKQEAgLTgyNywzMDIgKzE4MywzNiBAQAogQ09ORklHX1BQUF9TWU5DX1RUWT1tCiBDT05GSUdfUFBQX0RFRkxBVEU9bQogQ09ORklHX1BQUF9CU0RDT01QPW0KLSMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9bQotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9BUE1QT1dFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci0jIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfR1BJTz15Ci0jIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTE04MzIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfUFhBMjd4PXkKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkgaXMgbm90IHNldAotQ09ORklHX1RPVUNIU0NSRUVOX0RBOTAzND15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9EWU5BUFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VFVEkgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUNTNTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVzkwWDkwMCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTUlTQz15Ci0jIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0NNMTA5IGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9VSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfR1BJT19ST1RBUllfRU5DT0RFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX1BYQT15CiBDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9OAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfUFhBPXkKLSMgQ09ORklHX0kyQ19QWEFfU0xBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfU1BJPXkKLSMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19TUElfUFhBMlhYPXkKLSMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAotIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCi0jIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HUElPX1NZU0ZTPXkKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19JVDg3NjFFIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMDAgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19BRFA1NTg4IGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKLQotIwotIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAogQ09ORklHX1BPV0VSX1NVUFBMWT15Ci0jIENPTkZJR19QT1dFUl9TVVBQTFlfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUERBX1BPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQTV9QT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVRURVJZX0RTMjc2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVRURVJZX0RTMjc4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVRURVJZX0JRMjd4MDAgaXMgbm90IHNldAotIyBDT05GSUdfQkFUVEVSWV9EQTkwMzAgaXMgbm90IHNldAotIyBDT05GSUdfQkFUVEVSWV9NQVgxNzA0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfODhQTTg2MFggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfSTJDUExEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKIENPTkZJR19QTUlDX0RBOTAzWD15Ci0jIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01BWDg5MjUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg5OTQgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCNDUwMF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19SRUdVTEFUT1I9eQogQ09ORklHX1JFR1VMQVRPUl9ERUJVRz15Ci0jIENPTkZJR19SRUdVTEFUT1JfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAogQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSPXkKIENPTkZJR19SRUdVTEFUT1JfVVNFUlNQQUNFX0NPTlNVTUVSPXkKLSMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9NQVgxNTg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9NQVg4NjQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9NQVg4NjYwIGlzIG5vdCBzZXQKIENPTkZJR19SRUdVTEFUT1JfREE5MDNYPXkKLSMgQ09ORklHX1JFR1VMQVRPUl9MUDM5NzEgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9UUFM2NTA3WCBpcyBub3Qgc2V0CiBDT05GSUdfTUVESUFfU1VQUE9SVD15Ci0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKIENPTkZJR19WSURFT19ERVY9eQotQ09ORklHX1ZJREVPX1Y0TDJfQ09NTU9OPXkKLUNPTkZJR19WSURFT19BTExPV19WNEwxPXkKLUNPTkZJR19WSURFT19WNEwxX0NPTVBBVD15Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fTUVESUE9eQotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotQ09ORklHX0lSX0NPUkU9eQotQ09ORklHX1ZJREVPX0lSPXkKLSMgQ09ORklHX01FRElBX0FUVEFDSCBpcyBub3Qgc2V0Ci1DT05GSUdfTUVESUFfVFVORVI9eQogQ09ORklHX01FRElBX1RVTkVSX0NVU1RPTUlTRT15CiAjIENPTkZJR19NRURJQV9UVU5FUl9TSU1QTEUgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfVFVORVJfVERBODI5MCBpcyBub3Qgc2V0CkBAIC0xMTQxLDY0NSArMjMxLDg5IEBACiAjIENPTkZJR19NRURJQV9UVU5FUl9NWEw1MDA1UyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9UVU5FUl9NWEw1MDA3VCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9UVU5FUl9NQzQ0UzgwMyBpcyBub3Qgc2V0Ci1DT05GSUdfTUVESUFfVFVORVJfTUFYMjE2NT1tCi1DT05GSUdfVklERU9fVjRMMj15Ci1DT05GSUdfVklERU9fVjRMMT15Ci1DT05GSUdfVklERU9CVUZfR0VOPXkKLUNPTkZJR19WSURFT0JVRl9ETUFfU0c9eQotQ09ORklHX1ZJREVPX0NBUFRVUkVfRFJJVkVSUz15Ci0jIENPTkZJR19WSURFT19BRFZfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fRklYRURfTUlOT1JfUkFOR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX0hFTFBFUl9DSElQU19BVVRPIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19JUl9JMkM9eQotCi0jCi0jIEVuY29kZXJzL2RlY29kZXJzIGFuZCBvdGhlciBoZWxwZXIgY2hpcHMKLSMKLQotIwotIyBBdWRpbyBkZWNvZGVycwotIwotIyBDT05GSUdfVklERU9fVFZBVURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19UREE3NDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1REQTk4NDAgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fVERBOTg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19URUE2NDE1QyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19URUE2NDIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01TUDM0MDAgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fQ1M1MzQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0NTNTNMMzJBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX001Mjc5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19UTFYzMjBBSUMyM0IgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fV004Nzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1dNODczOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19WUDI3U01QWCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkRTIGRlY29kZXJzCi0jCi0jIENPTkZJR19WSURFT19TQUE2NTg4IGlzIG5vdCBzZXQKLQotIwotIyBWaWRlbyBkZWNvZGVycwotIwotIyBDT05GSUdfVklERU9fQURWNzE4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19CVDgxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19CVDg1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19CVDg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19LUzAxMjcgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1Y3NjcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01UOVYwMTEgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fVENNODI1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19TQUE3MTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1NBQTcxMVggaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fU0FBNzE3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19TQUE3MTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1RWUDUxNFggaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fVFZQNTE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19UVlA3MDAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1ZQWDMyMjAgaXMgbm90IHNldAotCi0jCi0jIFZpZGVvIGFuZCBhdWRpbyBkZWNvZGVycwotIwotIyBDT05GSUdfVklERU9fQ1gyNTg0MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTVBFRyB2aWRlbyBlbmNvZGVycwotIwotIyBDT05GSUdfVklERU9fQ1gyMzQxWCBpcyBub3Qgc2V0Ci0KLSMKLSMgVmlkZW8gZW5jb2RlcnMKLSMKLSMgQ09ORklHX1ZJREVPX1NBQTcxMjcgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fU0FBNzE4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19BRFY3MTcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0FEVjcxNzUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fVEhTNzMwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19BRFY3MzQzIGlzIG5vdCBzZXQKLQotIwotIyBWaWRlbyBpbXByb3ZlbWVudCBjaGlwcwotIwotIyBDT05GSUdfVklERU9fVVBENjQwMzFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1VQRDY0MDgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1ZJVkkgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fQ1BJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19DUElBMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19TQUE1MjQ2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19TQUE1MjQ5IGlzIG5vdCBzZXQKIENPTkZJR19TT0NfQ0FNRVJBPXkKLSMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5TTAwMSBpcyBub3Qgc2V0CiBDT05GSUdfU09DX0NBTUVSQV9NVDlNMTExPXkKLSMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5VDAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0NfQ0FNRVJBX01UOVQxMTIgaXMgbm90IHNldAotIyBDT05GSUdfU09DX0NBTUVSQV9NVDlWMDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPQ19DQU1FUkFfUko1NE4xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPQ19DQU1FUkFfVFc5OTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPQ19DQU1FUkFfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfU09DX0NBTUVSQV9PVjc3MlggaXMgbm90IHNldAotIyBDT05GSUdfU09DX0NBTUVSQV9PVjk2NDAgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX1BYQTI3eD15Ci0jIENPTkZJR19WSURFT19TSF9NT0JJTEVfQ0VVIGlzIG5vdCBzZXQKICMgQ09ORklHX1Y0TF9VU0JfRFJJVkVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQURJT19BREFQVEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1VWRVNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9QWEE9eQogQ09ORklHX0ZCX1BYQV9PVkVSTEFZPXkKLSMgQ09ORklHX0ZCX1BYQV9TTUFSVFBBTkVMIGlzIG5vdCBzZXQKIENPTkZJR19GQl9QWEFfUEFSQU1FVEVSUz15Ci0jIENPTkZJR19GQl9NQlggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiAjIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLUNPTkZJR19CQUNLTElHSFRfR0VORVJJQz15Ci0jIENPTkZJR19CQUNLTElHSFRfREE5MDNYIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19GT05UUz15Ci0jIENPTkZJR19GT05UXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzh4MTYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVF9NSU5JXzR4Nj15Ci0jIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR08gaXMgbm90IHNldAogQ09ORklHX1NPVU5EPXkKLUNPTkZJR19TT1VORF9PU1NfQ09SRT15Ci1DT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD15Ci1DT05GSUdfU05EX1RJTUVSPXkKLUNPTkZJR19TTkRfUENNPXkKLUNPTkZJR19TTkRfSkFDSz15Ci0jIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfT1NTRU1VTD15CiBDT05GSUdfU05EX01JWEVSX09TUz15CiBDT05GSUdfU05EX1BDTV9PU1M9eQotQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQotIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BUk0gaXMgbm90IHNldAotQ09ORklHX1NORF9QWEEyWFhfTElCPXkKICMgQ09ORklHX1NORF9TUEkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1VTQiBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1NPQz15CiBDT05GSUdfU05EX1BYQTJYWF9TT0M9eQotIyBDT05GSUdfU05EX1BYQTJYWF9TT0NfSU1PVEUyIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPXkKLSMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCiAjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKLSMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLQotIwotIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwotIwotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgotQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9SOEE2NjU5NyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1g9eQotQ09ORklHX1VTQl9QWEEyN1g9eQotIyBDT05GSUdfVVNCX0dBREdFVF9TM0NfSFNPVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xBTkdXRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VUSD15CitDT05GSUdfVVNCX0VUSD1tCiAjIENPTkZJR19VU0JfRVRIX1JORElTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FVEhfRUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NQVNTX1NUT1JBR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX05PS0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX01VTFRJIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLUNPTkZJR19VU0JfT1RHX1VUSUxTPXkKLSMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VMUEkgaXMgbm90IHNldAotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUU9eQotCi0jCi0jIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz15Ci1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CiBDT05GSUdfU0RJT19VQVJUPW0KLSMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwogQ09ORklHX01NQ19QWEE9eQotIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfU1BJPXkKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CiBDT05GSUdfTEVEU19DTEFTUz15Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLSMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0xFRFNfTFAzOTQ0PXkKLSMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX0RBQzEyNFMwODUgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19CRDI4MDIgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19MVDM1OTMgaXMgbm90IHNldAogQ09ORklHX0xFRFNfVFJJR0dFUlM9eQotCi0jCi0jIExFRCBUcmlnZ2VycwotIwogQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CiBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVD15CiBDT05GSUdfTEVEU19UUklHR0VSX0dQSU89eQogQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPXkKLQotIwotIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCi0jCi0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9TQTExMDAgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfUFhBPXkKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9bQotIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPW0KLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT1tCi0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX0FVVE9GU19GUz15CiBDT05GSUdfQVVUT0ZTNF9GUz15CiBDT05GSUdfRlVTRV9GUz1tCiBDT05GSUdfQ1VTRT1tCi0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz1tCiBDT05GSUdfTVNET1NfRlM9bQogQ09ORklHX1ZGQVRfRlM9bQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWT15CiBDT05GSUdfSkZGUzJfU1VNTUFSWT15CiBDT05GSUdfSkZGUzJfRlNfWEFUVFI9eQotQ09ORklHX0pGRlMyX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfSkZGUzJfRlNfU0VDVVJJVFk9eQogQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQotQ09ORklHX0pGRlMyX1pMSUI9eQogQ09ORklHX0pGRlMyX0xaTz15Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQogQ09ORklHX0pGRlMyX1JVQklOPXkKLSMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKLSMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9bQogQ09ORklHX1NRVUFTSEZTPW0KLSMgQ09ORklHX1NRVUFTSEZTX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19TUVVBU0hGU19GUkFHTUVOVF9DQUNIRV9TSVpFPTMKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfUk9NRlNfRlM9bQotQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9CTE9DSz15Ci0jIENPTkZJR19ST01GU19CQUNLRURfQllfTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9CT1RIIGlzIG5vdCBzZXQKLUNPTkZJR19ST01GU19PTl9CTE9DSz15Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WM19BQ0w9eQotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPT1RfTkZTIGlzIG5vdCBzZXQKIENPTkZJR19ORlNEPW0KLUNPTkZJR19ORlNEX1YyX0FDTD15CiBDT05GSUdfTkZTRF9WMz15CiBDT05GSUdfTkZTRF9WM19BQ0w9eQotIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19FWFBPUlRGUz1tCi1DT05GSUdfTkZTX0FDTF9TVVBQT1JUPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogQ09ORklHX1NNQl9GUz1tCi0jIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQ0VQSF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ0lGUz1tCiBDT05GSUdfQ0lGU19TVEFUUz15Ci0jIENPTkZJR19DSUZTX1NUQVRTMiBpcyBub3Qgc2V0CiBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0g9eQogQ09ORklHX0NJRlNfWEFUVFI9eQogQ09ORklHX0NJRlNfUE9TSVg9eQotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCiBDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCiBDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCkBAIC0xODE4LDIyMiArMzUyLDQxIEBACiBDT05GSUdfTkxTX0tPSThfUj1tCiBDT05GSUdfTkxTX0tPSThfVT1tCiBDT05GSUdfTkxTX1VURjg9bQotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwogQ09ORklHX1BSSU5US19USU1FPXkKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCiAjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfUFJFRU1QVD15CiBDT05GSUdfREVCVUdfUlRfTVVURVhFUz15Ci1DT05GSUdfREVCVUdfUElfTElTVD15Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKLUNPTkZJR19ERUJVR19NVVRFWEVTPXkKLUNPTkZJR19ERUJVR19MT0NLX0FMTE9DPXkKIENPTkZJR19QUk9WRV9MT0NLSU5HPXkKLSMgQ09ORklHX1BST1ZFX1JDVSBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0RFUD15Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0RFUCBpcyBub3Qgc2V0Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1M9eQotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFDS1RSQUNFPXkKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fVU5XSU5EPXkKIENPTkZJR19ERUJVR19VU0VSPXkKIENPTkZJR19ERUJVR19FUlJPUlM9eQotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAotIyBDT05GSUdfT0NfRVRNIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLUNPTkZJR19DUllQVE9fQUxHQVBJPW0KLUNPTkZJR19DUllQVE9fQUxHQVBJMj1tCi1DT05GSUdfQ1JZUFRPX0FFQUQ9bQotQ09ORklHX0NSWVBUT19BRUFEMj1tCi1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCi1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9bQotQ09ORklHX0NSWVBUT19IQVNIPW0KLUNPTkZJR19DUllQVE9fSEFTSDI9bQotQ09ORklHX0NSWVBUT19STkcyPW0KLUNPTkZJR19DUllQVE9fUENPTVA9bQotQ09ORklHX0NSWVBUT19NQU5BR0VSPW0KLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9bQotQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCiBDT05GSUdfQ1JZUFRPX05VTEw9bQotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9bQogQ09ORklHX0NSWVBUT19DUllQVEQ9bQotQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KIENPTkZJR19DUllQVE9fVEVTVD1tCi0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotQ09ORklHX0NSWVBUT19DQkM9bQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPW0KIENPTkZJR19DUllQVE9fTFJXPW0KIENPTkZJR19DUllQVE9fUENCQz1tCiBDT05GSUdfQ1JZUFRPX1hUUz1tCi0KLSMKLSMgSGFzaCBtb2RlcwotIwotQ09ORklHX0NSWVBUT19ITUFDPW0KIENPTkZJR19DUllQVE9fWENCQz1tCiBDT05GSUdfQ1JZUFRPX1ZNQUM9bQotCi0jCi0jIERpZ2VzdAotIwotQ09ORklHX0NSWVBUT19DUkMzMkM9bQogQ09ORklHX0NSWVBUT19HSEFTSD1tCiBDT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT1tCiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19TSEExPW0KIENPTkZJR19DUllQVE9fU0hBMjU2PW0KIENPTkZJR19DUllQVE9fU0hBNTEyPW0KIENPTkZJR19DUllQVE9fVEdSMTkyPW0KLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwogQ09ORklHX0NSWVBUT19BRVM9bQotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FSQzQ9bQogQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19DQVNUNT1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KLUNPTkZJR19DUllQVE9fREVTPW0KIENPTkZJR19DUllQVE9fRkNSWVBUPW0KIENPTkZJR19DUllQVE9fS0hBWkFEPW0KLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fU0VFRD1tCiBDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQogQ09ORklHX0NSWVBUT19URUE9bQogQ09ORklHX0NSWVBUT19UV09GSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQotCi0jCi0jIENvbXByZXNzaW9uCi0jCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotQ09ORklHX0NSQ19DQ0lUVD1tCiBDT05GSUdfQ1JDMTY9eQotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDX0lUVV9UPXkKLUNPTkZJR19DUkMzMj15Ci1DT05GSUdfQ1JDNz15Ci1DT05GSUdfTElCQ1JDMzJDPW0KLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfTFpPX0NPTVBSRVNTPXkKLUNPTkZJR19MWk9fREVDT01QUkVTUz15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKLUNPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQotQ09ORklHX1RFWFRTRUFSQ0g9eQotQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KLUNPTkZJR19URVhUU0VBUkNIX0JNPW0KLUNPTkZJR19URVhUU0VBUkNIX0ZTTT1tCi1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19OTEFUVFI9eQotQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9pbnRlZ3JhdG9yX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW50ZWdyYXRvcl9kZWZjb25maWcKaW5kZXggNmIwZDA0My4uNzE5NmFkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9pbnRlZ3JhdG9yX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2ludGVncmF0b3JfZGVmY29uZmlnCkBAIC0xLDg2MiArMSw3MSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazIKLSMgU3VuIE1hciAyNyAyMToxNDo1MSAyMDA1Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19JT01BUD15Ci0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0lOVEVHUkFUT1I9eQotIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLQotIwotIyBJbnRlZ3JhdG9yIE9wdGlvbnMKLSMKIENPTkZJR19BUkNIX0lOVEVHUkFUT1JfQVA9eQotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SX0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOVEVHUkFUT1JfSU1QRDEgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCiBDT05GSUdfQ1BVX0FSTTcyMFQ9eQogQ09ORklHX0NQVV9BUk05MjBUPXkKLSMgQ09ORklHX0NQVV9BUk05MjJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9BUk05MjZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9BUk0xMDIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9BUk0xMDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9BUk0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9WNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVXzMydjQ9eQotQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQotQ09ORklHX0NQVV9BQlJUX0xWNFQ9eQotQ09ORklHX0NQVV9DQUNIRV9WND15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y0V1Q9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V1Q9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLUNPTkZJR19JQ1NUNTI1PXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotQ09ORklHX0FSTV9BTUJBPXkKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15Ci1DT05GSUdfUENJX05BTUVTPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiBDT05GSUdfTEVEUz15Ci1DT05GSUdfTEVEU19USU1FUj15CiBDT05GSUdfTEVEU19DUFU9eQotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5QU0wLDM4NDAwbjggcm9vdD0vZGV2L25mcyBpcD1ib290cCBtZW09MzJNIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCi0jCiBDT05GSUdfQ1BVX0ZSRVE9eQotQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKLSMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9TVEFUPXkKLSMgQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0U9eQotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQogQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkU9eQogQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9eQogQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD15Ci1DT05GSUdfQ1BVX0ZSRVFfSU5URUdSQVRPUj15Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwogQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUE0gaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwotQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfQUZTX1BBUlRTPXkKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwotQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi1DT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci1DT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15Ci1DT05GSUdfTVREX0NGSV9OT1NXQVA9eQotIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9HRU9NRVRSWSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci0jIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMk8gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15Ci0jIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lQX1RDUERJQUc9eQotIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX01URD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKK0NPTkZJR19NVERfQUZTX1BBUlRTPXkKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMT0NLPXkKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLQotIwotIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKLSMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAotIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RHUlMgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAogQ09ORklHX0UxMDA9eQotIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAotIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAotIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCi0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQotQ09ORklHX01PVVNFX1BTMj15Ci0jIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15CiAjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX0FNQkFLTUkgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19TT1VORF9HQU1FUE9SVD15Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9BTUJBX1BMMDEwPXkKIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMF9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9BTUJBX1BMMDExIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwogQ09ORklHX0ZCPXkKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci1DT05GSUdfRkJfU09GVF9DVVJTT1I9eQogQ09ORklHX0ZCX01PREVfSEVMUEVSUz15Ci1DT05GSUdfRkJfVElMRUJMSVRUSU5HPXkKLSMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVJNQ0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAogQ09ORklHX0ZCX01BVFJPWD15CiBDT05GSUdfRkJfTUFUUk9YX01JTExFTklVTT15CiBDT05GSUdfRkJfTUFUUk9YX01ZU1RJUVVFPXkKLSMgQ09ORklHX0ZCX01BVFJPWF9HIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9NQVRST1hfTVVMVElIRUFEPXkKLSMgQ09ORklHX0ZCX1JBREVPTl9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUkFERU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwotQ09ORklHX1ZHQV9DT05TT0xFPXkKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUgaXMgbm90IHNldAotCi0jCi0jIExvZ28gY29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBYRlMgc3VwcG9ydAotIwotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19TWVNGUz15Ci0jIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLSMgQ09ORklHX0pGRlMyX0ZTX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfTk9SX0VDQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9eQogQ09ORklHX05GU0RfVjM9eQotIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfRVhQT1JURlM9eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKLSMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9pb3AxM3h4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMTN4eF9kZWZjb25maWcKaW5kZXggM2MwNDBjYy4uNGZhOTRhMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9pb3AxM3h4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2lvcDEzeHhfZGVmY29uZmlnCkBAIC0xLDExNTkgKzEsMTI0IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM1Ci0jIFdlZCBEZWMgMTIgMTY6MTE6MDMgMjAwNwotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVkVSU0lPTlM9eQotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0RFQURMSU5FPXkKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9JT1AxM1hYPXkKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotCi0jCi0jIElPUDEzWFggSW1wbGVtZW50YXRpb24gT3B0aW9ucwotIwotCi0jCi0jIElPUDEzWFggUGxhdGZvcm0gU3VwcG9ydAotIwogQ09ORklHX01BQ0hfSVE4MTM0MFNDPXkKIENPTkZJR19NQUNIX0lRODEzNDBNQz15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIwotQ09ORklHX1BMQVRfSU9QPXkKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9YU0MzPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotQ09ORklHX0lPXzM2PXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTU1YVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCi0jIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0iaXA9Ym9vdHAgcm9vdD1uZnMgY29uc29sZT10dHlTMCwxMTUyMDAgbmZzcm9vdD0sdGNwLHYzLHdzaXplPTgxOTIscnNpemU9ODE5MiIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQogQ09ORklHX0JJTkZNVF9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0tFWT15Ci0jIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2PXkKLSMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9TSVQgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKLUNPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRD15CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfUkVBRE9OTFk9eQotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKLSMgQ09ORklHX01URF9DSEFSIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15CiBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15Ci1DT05GSUdfTVREX0NGSV9OT1NXQVA9eQotIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9HRU9NRVRSWSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVA9eQotQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4ZmEwMDAwMDAKLUNPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTIKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTIKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz15Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9DT05TVEFOVFM9eQotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUz15Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKIENPTkZJR19NRD15CiBDT05GSUdfQkxLX0RFVl9NRD15Ci0jIENPTkZJR19NRF9MSU5FQVIgaXMgbm90IHNldAogQ09ORklHX01EX1JBSUQwPXkKIENPTkZJR19NRF9SQUlEMT15CiBDT05GSUdfTURfUkFJRDEwPXkKIENPTkZJR19NRF9SQUlENDU2PXkKLSMgQ09ORklHX01EX1JBSUQ1X1JFU0hBUEUgaXMgbm90IHNldAotIyBDT05GSUdfTURfTVVMVElQQVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9ETT15Ci0jIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9DUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9TTkFQU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9NSVJST1IgaXMgbm90IHNldAotIyBDT05GSUdfRE1fWkVSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9NVUxUSVBBVEggaXMgbm90IHNldAotIyBDT05GSUdfRE1fREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfRE1fVUVWRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMDA9eQotQ09ORklHX0UxMDAwX05BUEk9eQotIyBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCi1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCi0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLSMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotQ09ORklHX0kyQ19BTEdPQklUPW0KLUNPTkZJR19JMkNfQUxHT1BDRj1tCi1DT05GSUdfSTJDX0FMR09QQ0E9bQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAogQ09ORklHX0kyQ19JT1AzWFg9eQotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogQ09ORklHX0RNQURFVklDRVM9eQotCi0jCi0jIERNQSBEZXZpY2VzCi0jCiBDT05GSUdfSU5URUxfSU9QX0FETUE9eQotQ09ORklHX0RNQV9FTkdJTkU9eQotCi0jCi0jIERNQSBDbGllbnRzCi0jCi0jIENPTkZJR19ORVRfRE1BIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19FQ1JZUFRfRlM9eQotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkZTRD15CiBDT05GSUdfTkZTRF9WMz15Ci0jIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEX1RDUD15Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfRVhQT1JURlM9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKIENPTkZJR19TTUJfRlM9bQotIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKIENPTkZJR19DSUZTPW0KLSMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLUNPTkZJR19JTlNUUlVNRU5UQVRJT049eQotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwogQ09ORklHX0tFWVM9eQogQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19YT1JfQkxPQ0tTPXkKLUNPTkZJR19BU1lOQ19DT1JFPXkKLUNPTkZJR19BU1lOQ19NRU1DUFk9eQotQ09ORklHX0FTWU5DX1hPUj15Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19OVUxMPXkKK0NPTkZJR19DUllQVE9fTFJXPXkKK0NPTkZJR19DUllQVE9fUENCQz1tCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogQ09ORklHX0NSWVBUT19YQ0JDPXkKLUNPTkZJR19DUllQVE9fTlVMTD15CiBDT05GSUdfQ1JZUFRPX01END15Ci1DT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPXkKIENPTkZJR19DUllQVE9fU0hBMT15CiBDT05GSUdfQ1JZUFRPX1NIQTI1Nj15CiBDT05GSUdfQ1JZUFRPX1NIQTUxMj15Ci1DT05GSUdfQ1JZUFRPX1dQNTEyPXkKIENPTkZJR19DUllQVE9fVEdSMTkyPXkKLUNPTkZJR19DUllQVE9fR0YxMjhNVUw9eQotQ09ORklHX0NSWVBUT19FQ0I9eQotQ09ORklHX0NSWVBUT19DQkM9eQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLUNPTkZJR19DUllQVE9fTFJXPXkKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9eQotQ09ORklHX0NSWVBUT19UV09GSVNIPXkKLUNPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049eQotQ09ORklHX0NSWVBUT19TRVJQRU5UPXkKK0NPTkZJR19DUllQVE9fV1A1MTI9eQogQ09ORklHX0NSWVBUT19BRVM9eQorQ09ORklHX0NSWVBUT19BTlVCSVM9eQorQ09ORklHX0NSWVBUT19BUkM0PXkKK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9eQogQ09ORklHX0NSWVBUT19DQVNUNT15CiBDT05GSUdfQ1JZUFRPX0NBU1Q2PXkKLUNPTkZJR19DUllQVE9fVEVBPXkKLUNPTkZJR19DUllQVE9fQVJDND15CitDT05GSUdfQ1JZUFRPX0RFUz15CiBDT05GSUdfQ1JZUFRPX0tIQVpBRD15Ci1DT05GSUdfQ1JZUFRPX0FOVUJJUz15Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9eQorQ09ORklHX0NSWVBUT19URUE9eQorQ09ORklHX0NSWVBUT19UV09GSVNIPXkKIENPTkZJR19DUllQVE9fREVGTEFURT15Ci1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPXkKLUNPTkZJR19DUllQVE9fQ1JDMzJDPXkKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15CiBDT05GSUdfQ1JDX0NDSVRUPXkKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiBDT05GSUdfTElCQ1JDMzJDPXkKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2lvcDMyeF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2lvcDMyeF9kZWZjb25maWcKaW5kZXggNjJhODU0OS4uNGYyZWMzYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9pb3AzMnhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMzJ4X2RlZmNvbmZpZwpAQCAtMSwxMzg5ICsxLDEzNSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjNQotIyBXZWQgRGVjIDEyIDE1OjQ5OjA4IDIwMDcKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLSMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUyBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9JT1AzMlg9eQotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgSU9QMzJ4IEltcGxlbWVudGF0aW9uIE9wdGlvbnMKLSMKLQotIwotIyBJT1AzMnggUGxhdGZvcm0gVHlwZXMKLSMKLUNPTkZJR19NQUNIX0VQODAyMTk9eQogQ09ORklHX01BQ0hfR0xBTlRBTks9eQogQ09ORklHX0FSQ0hfSVE4MDMyMT15CiBDT05GSUdfQVJDSF9JUTMxMjQ0PXkKIENPTkZJR19NQUNIX04yMTAwPXkKLUNPTkZJR19JT1AzWFhfQVRVPXkKLSMgQ09ORklHX01BQ0hfRU03MjEwIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCi1DT05GSUdfUExBVF9JT1A9eQotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX1hTQ0FMRT15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKICMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAotIyBDT05GSUdfSVdNTVhUIGlzIG5vdCBzZXQKLUNPTkZJR19YU0NBTEVfUE1VPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotQ09ORklHX1BDSV9MRUdBQ1k9eQotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCi0jIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxMTUyMDAgcm9vdD0vZGV2L25mcyBpcD1ib290cCBjYWNoZXBvbGljeT13cml0ZWFsbG9jIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15CiBDT05GSUdfQklORk1UX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2PXkKLSMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9TSVQgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQotQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQogQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEPXkKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWT15Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVA9eQotQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDAKLUNPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MQotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTkJEPXkKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz15Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQotIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAotIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAogQ09ORklHX1NBVEFfU0lMPXkKLSMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAogQ09ORklHX1NBVEFfVklURVNTRT15Ci0jIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKIENPTkZJR19NRD15CiBDT05GSUdfQkxLX0RFVl9NRD15Ci0jIENPTkZJR19NRF9MSU5FQVIgaXMgbm90IHNldAogQ09ORklHX01EX1JBSUQwPXkKIENPTkZJR19NRF9SQUlEMT15CiBDT05GSUdfTURfUkFJRDEwPXkKIENPTkZJR19NRF9SQUlENDU2PXkKLSMgQ09ORklHX01EX1JBSUQ1X1JFU0hBUEUgaXMgbm90IHNldAotIyBDT05GSUdfTURfTVVMVElQQVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9ETT15Ci0jIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9DUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9TTkFQU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9NSVJST1IgaXMgbm90IHNldAotIyBDT05GSUdfRE1fWkVSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9NVUxUSVBBVEggaXMgbm90IHNldAotIyBDT05GSUdfRE1fREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfRE1fVUVWRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKLSMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAotIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwPXkKLSMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwMD15Ci1DT05GSUdfRTEwMDBfTkFQST15Ci0jIENPTkZJR19FMTAwMF9ESVNBQkxFX1BBQ0tFVF9TUExJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CiBDT05GSUdfUjgxNjk9eQotIyBDT05GSUdfUjgxNjlfTkFQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSVUgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAogQ09ORklHX0kyQ19JT1AzWFg9eQotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCiAjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKLSMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0RFVklDRV9DTEFTUz15Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCitDT05GSUdfVVNCX01PTj15CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKLUNPTkZJR19VU0JfRUhDSV9TUExJVF9JU089eQogQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRD15Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfVUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049eQotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERTTCBtb2RlbSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfUlM1QzM3Mj15Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCiBDT05GSUdfRE1BREVWSUNFUz15Ci0KLSMKLSMgRE1BIERldmljZXMKLSMKIENPTkZJR19JTlRFTF9JT1BfQURNQT15Ci1DT05GSUdfRE1BX0VOR0lORT15Ci0KLSMKLSMgRE1BIENsaWVudHMKLSMKIENPTkZJR19ORVRfRE1BPXkKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19FQ1JZUFRfRlM9eQotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkZTRD15CiBDT05GSUdfTkZTRF9WMz15Ci0jIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEX1RDUD15Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfRVhQT1JURlM9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotQ09ORklHX0lOU1RSVU1FTlRBVElPTj15Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfRk9SQ0VEX0lOTElOSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQotIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKIENPTkZJR19LRVlTPXkKIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfWE9SX0JMT0NLUz15Ci1DT05GSUdfQVNZTkNfQ09SRT15Ci1DT05GSUdfQVNZTkNfTUVNQ1BZPXkKLUNPTkZJR19BU1lOQ19YT1I9eQotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTlVMTD15CitDT05GSUdfQ1JZUFRPX0xSVz15CitDT05GSUdfQ1JZUFRPX1BDQkM9bQogQ09ORklHX0NSWVBUT19ITUFDPXkKIENPTkZJR19DUllQVE9fWENCQz15Ci1DT05GSUdfQ1JZUFRPX05VTEw9eQogQ09ORklHX0NSWVBUT19NRDQ9eQotQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz15CiBDT05GSUdfQ1JZUFRPX1NIQTE9eQogQ09ORklHX0NSWVBUT19TSEEyNTY9eQogQ09ORklHX0NSWVBUT19TSEE1MTI9eQotQ09ORklHX0NSWVBUT19XUDUxMj15CiBDT05GSUdfQ1JZUFRPX1RHUjE5Mj15Ci1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPXkKLUNPTkZJR19DUllQVE9fRUNCPXkKLUNPTkZJR19DUllQVE9fQ0JDPXkKLUNPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfQ1JZUFRPX0xSVz15Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPXkKLUNPTkZJR19DUllQVE9fVFdPRklTSD15Ci1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPXkKLUNPTkZJR19DUllQVE9fU0VSUEVOVD15CitDT05GSUdfQ1JZUFRPX1dQNTEyPXkKIENPTkZJR19DUllQVE9fQUVTPXkKK0NPTkZJR19DUllQVE9fQU5VQklTPXkKK0NPTkZJR19DUllQVE9fQVJDND15CitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPXkKIENPTkZJR19DUllQVE9fQ0FTVDU9eQogQ09ORklHX0NSWVBUT19DQVNUNj15Ci1DT05GSUdfQ1JZUFRPX1RFQT15Ci1DT05GSUdfQ1JZUFRPX0FSQzQ9eQorQ09ORklHX0NSWVBUT19ERVM9eQogQ09ORklHX0NSWVBUT19LSEFaQUQ9eQotQ09ORklHX0NSWVBUT19BTlVCSVM9eQotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TRVJQRU5UPXkKK0NPTkZJR19DUllQVE9fVEVBPXkKK0NPTkZJR19DUllQVE9fVFdPRklTSD15CiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz15Ci1DT05GSUdfQ1JZUFRPX0NSQzMyQz15Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiBDT05GSUdfTElCQ1JDMzJDPXkKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2lvcDMzeF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2lvcDMzeF9kZWZjb25maWcKaW5kZXggMGJjMjNlYy4uYWEzNjEyOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9pb3AzM3hfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMzN4X2RlZmNvbmZpZwpAQCAtMSwxMzkxICsxLDkxIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM2Ci0jIFR1ZSBBdWcgMTggMTM6NDE6NDEgMjAwOQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi0jIENPTkZJR19DTEFTU0lDX1JDVSBpcyBub3Qgc2V0Ci1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX05BTUVTUEFDRVM9eQotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci1DT05GSUdfUkRfQlpJUDI9eQotQ09ORklHX1JEX0xaTUE9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotCi0jCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCi0jCi1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9JT1AzM1g9eQotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLQotIwotIyBJT1AzM3ggSW1wbGVtZW50YXRpb24gT3B0aW9ucwotIwotCi0jCi0jIElPUDMzeCBQbGF0Zm9ybSBUeXBlcwotIwogQ09ORklHX0FSQ0hfSVE4MDMzMT15CiBDT05GSUdfTUFDSF9JUTgwMzMyPXkKLUNPTkZJR19QTEFUX0lPUD15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfWFNDQUxFPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VD15Ci1DT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwogIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV01NWFQgaXMgbm90IHNldAotQ09ORklHX1hTQ0FMRV9QTVU9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX0xFR0FDWT15Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1ZNU1BMSVRfM0c9eQotIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCi0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMDAKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMCByb290PS9kZXYvbmZzIGlwPWJvb3RwIGNhY2hlcG9saWN5PXdyaXRlYWxsb2MgaW9wM3h4X2luaXRfYXR1PXkiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwotIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQU9VVD15CiBDT05GSUdfQklORk1UX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogQ09ORklHX0lQVjY9eQotIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2X1NJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQotQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQogQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEPXkKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWT15Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKLUNPTkZJR19NVERfQ0ZJX05PU1dBUD15Ci0jIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci0jIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX05CRD15Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9eQotQ09ORklHX01EX0FVVE9ERVRFQ1Q9eQogQ09ORklHX01EX0xJTkVBUj15CiBDT05GSUdfTURfUkFJRDA9eQogQ09ORklHX01EX1JBSUQxPXkKLSMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CiBDT05GSUdfTURfUkFJRDQ1Nj15Ci1DT05GSUdfTURfUkFJRDZfUFE9eQotIyBDT05GSUdfTURfTVVMVElQQVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9ETT15Ci0jIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9DUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9TTkFQU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9NSVJST1IgaXMgbm90IHNldAotIyBDT05GSUdfRE1fWkVSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9NVUxUSVBBVEggaXMgbm90IHNldAotIyBDT05GSUdfRE1fREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfRE1fVUVWRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAogQ09ORklHX0UxMDAwPXkKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAotIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRkMgaXMgbm90IHNldAotIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSU9QM1hYPXkKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSFQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCi0jCi0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKIENPTkZJR19ETUFERVZJQ0VTPXkKLQotIwotIyBETUEgRGV2aWNlcwotIwogQ09ORklHX0lOVEVMX0lPUF9BRE1BPXkKLUNPTkZJR19ETUFfRU5HSU5FPXkKLQotIwotIyBETUEgQ2xpZW50cwotIwogQ09ORklHX05FVF9ETUE9eQotIyBDT05GSUdfQVNZTkNfVFhfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19ORlNEPXkKIENPTkZJR19ORlNEX1YzPXkKLSMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfRVhQT1JURlM9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19VU0VSPXkKLSMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTEw9eQotIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX1hPUl9CTE9DS1M9eQotQ09ORklHX0FTWU5DX0NPUkU9eQotQ09ORklHX0FTWU5DX01FTUNQWT15Ci1DT05GSUdfQVNZTkNfWE9SPXkKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMzIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKLUNPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjAwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2l4cDIwMDBfZGVmY29uZmlnCmluZGV4IDhiNWI1NzYuLjkwODMyNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjAwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9peHAyMDAwX2RlZmNvbmZpZwpAQCAtMSwxMTEzICsxLDk5IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAtcmMxCi0jIFNhdCBEZWMgMTYgMDY6MDU6MzkgMjAwNgotIwotQ09ORklHX0FSTT15Ci0jIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0hNRU09eQogQ09ORklHX1NMQUI9eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIwotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9JWFAyMDAwPXkKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0JJR19FTkRJQU49eQotCi0jCi0jIEludGVsIElYUDI0MDAvMjgwMCBJbXBsZW1lbnRhdGlvbiBPcHRpb25zCi0jCi0KLSMKLSMgSVhQMjQwMC8yODAwIFBsYXRmb3JtcwotIwogQ09ORklHX0FSQ0hfRU5QMjYxMT15CiBDT05GSUdfQVJDSF9JWERQMjQwMD15CiBDT05GSUdfQVJDSF9JWERQMjgwMD15Ci1DT05GSUdfQVJDSF9JWERQMlgwMD15CiBDT05GSUdfQVJDSF9JWERQMjQwMT15CiBDT05GSUdfQVJDSF9JWERQMjgwMT15Ci1DT05GSUdfTUFDSF9JWERQMjhYNT15Ci1DT05GSUdfQVJDSF9JWERQMlgwMT15CiAjIENPTkZJR19JWFAyMDAwX1NVUFBPUlRfQlJPS0VOX1BDSV9JTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfWFNDQUxFPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwogIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfQklHX0VORElBTj15Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfSVdNTVhUIGlzIG5vdCBzZXQKLUNPTkZJR19YU0NBTEVfUE1VPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotQ09ORklHX1BDST15Ci0jIENPTkZJR19QQ0lfTVVMVElUSFJFQURfUFJPQkUgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMDAKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAsNTc2MDAgcm9vdD0vZGV2L25mcyBpcD1ib290cCBtZW09NjRNQDB4MCIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15CiBDT05GSUdfRlBFX05XRlBFX1hQPXkKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNj15Ci0jIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2X1NJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQogIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKLUNPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRD15CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfUkVBRE9OTFk9eQotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwogQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0lYUDIwMDA9eQotIyBDT05GSUdfTVREX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotCi0jCi0jIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTkJEPXkKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKLSMKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIworQ09ORklHX0VFUFJPTV9MRUdBQ1k9eQogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX0RVTU1ZPXkKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIwogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15Ci0jIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0CiBDT05GSUdfQ1M4OXgwPXkKLSMgQ09ORklHX0RHUlMgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAogQ09ORklHX0UxMDA9eQotIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAotIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAotIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfRU5QMjYxMV9NU0ZfTkVUPXkKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwogQ09ORklHX1dBTj15Ci0jIENPTkZJR19MQU5NRURJQSBpcyBub3Qgc2V0CiBDT05GSUdfSERMQz15CiBDT05GSUdfSERMQ19SQVc9eQotIyBDT05GSUdfSERMQ19SQVdfRVRIIGlzIG5vdCBzZXQKIENPTkZJR19IRExDX0NJU0NPPXkKIENPTkZJR19IRExDX0ZSPXkKIENPTkZJR19IRExDX1BQUD15Ci0KLSMKLSMgWC4yNS9MQVBCIHN1cHBvcnQgaXMgZGlzYWJsZWQKLSMKLSMgQ09ORklHX1BDSTIwMFNZTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5YTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVJTWU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTQ0M0IGlzIG5vdCBzZXQKIENPTkZJR19ETENJPXkKLUNPTkZJR19ETENJX0NPVU5UPTI0Ci1DT05GSUdfRExDSV9NQVg9OAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCi0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MwotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MwotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIwotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVhQMjAwMF9XQVRDSERPRz15Ci0KLSMKLSMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLUNPTkZJR19JMkNfQUxHT0JJVD15Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0lYUDIwMDA9eQotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotQ09ORklHX0VFUFJPTV9MRUdBQ1k9eQotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cwotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIwotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZGV2aWNlcwotIwotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0KLSMKLSMgSElEIERldmljZXMKLSMKLUNPTkZJR19ISUQ9eQotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCitDT05GSUdfV0FUQ0hET0c9eQorQ09ORklHX0lYUDIwMDBfV0FUQ0hET0c9eQogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDJfRlNfWEFUVFI9eQogQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX1JXU0VNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19VU0VSPXkKIENPTkZJR19ERUJVR19FUlJPUlM9eQogQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0lPTUFQX0NPUFk9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9peHAyM3h4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjN4eF9kZWZjb25maWcKaW5kZXggNTljMTFjOS4uN2ZjMDU2YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9peHAyM3h4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2l4cDIzeHhfZGVmY29uZmlnCkBAIC0xLDE0MDggKzEsMTA1IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAtcmMxCi0jIFNhdCBEZWMgMTYgMDY6MDU6NDUgMjAwNgotIwotQ09ORklHX0FSTT15Ci0jIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NITUVNPXkKIENPTkZJR19TTEFCPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0lYUDIzWFg9eQotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19CSUdfRU5ESUFOPXkKLQotIwotIyBJbnRlbCBJWFAyM3h4IEltcGxlbWVudGF0aW9uIE9wdGlvbnMKLSMKLQotIwotIyBJWFAyM3h4IFBsYXRmb3JtcwotIwogQ09ORklHX01BQ0hfRVNQUkVTU089eQogQ09ORklHX01BQ0hfSVhEUDIzNTE9eQogQ09ORklHX01BQ0hfUk9BRFJVTk5FUj15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfWFNDMz15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLUNPTkZJR19JT18zNj15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCiAjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAogQ09ORklHX0NQVV9CSUdfRU5ESUFOPXkKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV01NWFQgaXMgbm90IHNldAotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi1DT05GSUdfUENJPXkKLSMgQ09ORklHX1BDSV9NVUxUSVRIUkVBRF9QUk9CRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMDAKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMCByb290PS9kZXYvbmZzIGlwPWJvb3RwIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKIENPTkZJR19GUEVfTldGUEVfWFA9eQotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi0jIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2PXkKLSMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfU0lUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15CiAjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKLUNPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRD15CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfUkVBRE9OTFk9eQotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwogQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKIENPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgwCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MAotQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0xCi0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotCi0jCi0jIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTkJEPXkKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKK0NPTkZJR19FRVBST01fTEVHQUNZPXkKIENPTkZJR19JREU9eQotQ09ORklHX0lERV9NQVhfSFdJRlM9NAotQ09ORklHX0JMS19ERVZfSURFPXkKLQotIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci0jIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLQotIwotIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCi0jCi1DT05GSUdfSURFX0dFTkVSSUM9eQotQ09ORklHX0JMS19ERVZfSURFUENJPXkKLSMgQ09ORklHX0lERVBDSV9TSEFSRV9JUlEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQotIyBDT05GSUdfQkxLX0RFVl9JREVETUFfRk9SQ0VEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9QQ0lfQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DWTgyQzY5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1NJSU1BR0U9eQotIyBDT05GSUdfQkxLX0RFVl9TTDgyQzEwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRE1BPXkKLSMgQ09ORklHX0lERURNQV9JVkIgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCi0jCi0jIENPTkZJR19BVEEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCi0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9TUEkgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9TQVMgaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX0RVTU1ZPXkKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIwogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15Ci0jIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUzg5eDAgaXMgbm90IHNldAotIyBDT05GSUdfREdSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMD15Ci0jIENPTkZJR19GRUFMTlggaXMgbm90IHNldAotIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAotIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwMD15Ci1DT05GSUdfRTEwMDBfTkFQST15Ci0jIENPTkZJR19FMTAwMF9ESVNBQkxFX1BBQ0tFVF9TUExJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKIENPTkZJR19XQU49eQotIyBDT05GSUdfTEFOTUVESUEgaXMgbm90IHNldAogQ09ORklHX0hETEM9eQogQ09ORklHX0hETENfUkFXPXkKLSMgQ09ORklHX0hETENfUkFXX0VUSCBpcyBub3Qgc2V0CiBDT05GSUdfSERMQ19DSVNDTz15CiBDT05GSUdfSERMQ19GUj15CiBDT05GSUdfSERMQ19QUFA9eQotCi0jCi0jIFguMjUvTEFQQiBzdXBwb3J0IGlzIGRpc2FibGVkCi0jCi0jIENPTkZJR19QQ0kyMDBTWU4gaXMgbm90IHNldAotIyBDT05GSUdfV0FOWEwgaXMgbm90IHNldAotIyBDT05GSUdfUEMzMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkFSU1lOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EU0NDNCBpcyBub3Qgc2V0CiBDT05GSUdfRExDST15Ci1DT05GSUdfRExDSV9DT1VOVD0yNAotQ09ORklHX0RMQ0lfTUFYPTgKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCi0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi1DT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKLQotIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi1DT05GSUdfSTJDX0FMR09CSVQ9eQotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotQ09ORklHX0VFUFJPTV9MRUdBQ1k9eQotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cwotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIwotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZGV2aWNlcwotIwotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLQotIwotIyBISUQgRGV2aWNlcwotIwotQ09ORklHX0hJRD15Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKLSMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkFORFdJRFRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVMVElUSFJFQURfUFJPQkUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi1DT05GSUdfVVNCX0VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0hDRD15Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLUNPTkZJR19VU0JfVUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwotQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCitDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BSVBURUsgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dBQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQogQ09ORklHX1VTQl9NT049eQotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmVhbCBUaW1lIENsb2NrCi0jCi1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIworQ09ORklHX1VTQl9FSENJX0hDRD15CitDT05GSUdfVVNCX09IQ0lfSENEPXkKK0NPTkZJR19VU0JfVUhDSV9IQ0Q9eQorQ09ORklHX1VTQl9TVE9SQUdFPXkKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQyX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9eQotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgotIwotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfUldTRU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQogQ09ORklHX0RFQlVHX0VSUk9SUz15CiBDT05GSUdfREVCVUdfTEw9eQotIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSU9NQVBfQ09QWT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2l4cDR4eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2l4cDR4eF9kZWZjb25maWcKaW5kZXggYTkwN2FkNS4uNWM1MDIzOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9peHA0eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhwNHh4X2RlZmNvbmZpZwpAQCAtMSwxNTUgKzEsMTMgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNAotIyBTdW4gSmFuIDI3IDA3OjMzOjM4IDIwMDgKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFZFUlNJT05TPXkKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSVhQNFhYPXkKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0JJR19FTkRJQU49eQotCi0jCi0jIEludGVsIElYUDR4eCBJbXBsZW1lbnRhdGlvbiBPcHRpb25zCi0jCi0KLSMKLSMgSVhQNHh4IFBsYXRmb3JtcwotIwogQ09ORklHX01BQ0hfTlNMVTI9eQogQ09ORklHX01BQ0hfQVZJTEE9eQogQ09ORklHX01BQ0hfTE9GVD15CkBAIC0xNjAsMTkwICsxOCw0MyBAQAogQ09ORklHX01BQ0hfSVhEUEc0MjU9eQogQ09ORklHX01BQ0hfSVhEUDQ2NT15CiBDT05GSUdfTUFDSF9LSVhSUDQzNT15Ci1DT05GSUdfQVJDSF9JWENEUDExMDA9eQogQ09ORklHX0FSQ0hfUFJQTUMxMTAwPXkKIENPTkZJR19NQUNIX05BUzEwMEQ9eQogQ09ORklHX01BQ0hfRFNNRzYwMD15Ci1DT05GSUdfQVJDSF9JWERQNFhYPXkKIENPTkZJR19NQUNIX0ZTRz15Ci1DT05GSUdfQ1BVX0lYUDQ2WD15Ci1DT05GSUdfQ1BVX0lYUDQzWD15CiBDT05GSUdfTUFDSF9HVFdYNTcxNT15Ci0KLSMKLSMgSVhQNHh4IE9wdGlvbnMKLSMKLUNPTkZJR19ETUFCT1VOQ0U9eQotIyBDT05GSUdfSVhQNFhYX0lORElSRUNUX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfSVhQNFhYX1FNR1I9eQogQ09ORklHX0lYUDRYWF9OUEU9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9YU0NBTEU9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCiAjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAogQ09ORklHX0NQVV9CSUdfRU5ESUFOPXkKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV01NWFQgaXMgbm90IHNldAotQ09ORklHX1hTQ0FMRV9QTVU9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX0xFR0FDWT15Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMCBpcD1ib290cCByb290PS9kZXYvbmZzIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15Ci1DT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQogQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0lQR1JFPW0KIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKIENPTkZJR19JUF9NUk9VVEU9eQogQ09ORklHX0lQX1BJTVNNX1YxPXkKIENPTkZJR19JUF9QSU1TTV9WMj15Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSPXkKIENPTkZJR19JUF9WUz1tCiBDT05GSUdfSVBfVlNfREVCVUc9eQotQ09ORklHX0lQX1ZTX1RBQl9CSVRTPTEyCi0KLSMKLSMgSVBWUyB0cmFuc3BvcnQgcHJvdG9jb2wgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfSVBfVlNfUFJPVE9fVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTX1BST1RPX1VEUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9WU19QUk9UT19FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlNfUFJPVE9fQUggaXMgbm90IHNldAotCi0jCi0jIElQVlMgc2NoZWR1bGVyCi0jCiBDT05GSUdfSVBfVlNfUlI9bQogQ09ORklHX0lQX1ZTX1dSUj1tCiBDT05GSUdfSVBfVlNfTEM9bQpAQCAtMzUyLDEwMiArNjMsMjQgQEAKIENPTkZJR19JUF9WU19MQkxDUj1tCiBDT05GSUdfSVBfVlNfREg9bQogQ09ORklHX0lQX1ZTX1NIPW0KLSMgQ09ORklHX0lQX1ZTX1NFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9WU19OUSBpcyBub3Qgc2V0Ci0KLSMKLSMgSVBWUyBhcHBsaWNhdGlvbiBoZWxwZXIKLSMKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQlJJREdFX05FVEZJTFRFUj15Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0cgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1AgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KLSMgQ09ORklHX0lQX05GX01BVENIX0lQUkFOR0UgaXMgbm90IHNldAotQ09ORklHX0lQX05GX01BVENIX1RPUz1tCi0jIENPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX0FIIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQotQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KLSMgQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9GSUxURVI9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQogQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQogQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KIENPTkZJR19JUF9ORl9NQU5HTEU9bQotQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQotIyBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX1JBVyBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9BUlBGSUxURVI9bQotIyBDT05GSUdfSVBfTkZfQVJQX01BTkdMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQnJpZGdlOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKIENPTkZJR19BVE09eQogQ09ORklHX0FUTV9DTElQPXkKLSMgQ09ORklHX0FUTV9DTElQX05PX0lDTVAgaXMgbm90IHNldAogQ09ORklHX0FUTV9MQU5FPW0KIENPTkZJR19BVE1fTVBPQT1tCiBDT05GSUdfQVRNX0JSMjY4ND1tCi0jIENPTkZJR19BVE1fQlIyNjg0X0lQRklMVEVSIGlzIG5vdCBzZXQKIENPTkZJR19CUklER0U9bQogQ09ORklHX1ZMQU5fODAyMVE9bQotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19MTEM9bQotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CiBDT05GSUdfSVBYPW0KLSMgQ09ORklHX0lQWF9JTlRFUk4gaXMgbm90IHNldAogQ09ORklHX0FUQUxLPW0KIENPTkZJR19ERVZfQVBQTEVUQUxLPW0KIENPTkZJR19JUEREUD1tCkBAIC00NjAsMTEzMiArOTMsMTEzIEBACiBDT05GSUdfRUNPTkVUX05BVElWRT15CiBDT05GSUdfV0FOX1JPVVRFUj1tCiBDT05GSUdfTkVUX1NDSEVEPXkKLQotIwotIyBRdWV1ZWluZy9TY2hlZHVsaW5nCi0jCiBDT05GSUdfTkVUX1NDSF9DQlE9bQogQ09ORklHX05FVF9TQ0hfSFRCPW0KLSMgQ09ORklHX05FVF9TQ0hfSEZTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIX0FUTSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1NDSF9QUklPPW0KLSMgQ09ORklHX05FVF9TQ0hfUlIgaXMgbm90IHNldAogQ09ORklHX05FVF9TQ0hfUkVEPW0KIENPTkZJR19ORVRfU0NIX1NGUT1tCiBDT05GSUdfTkVUX1NDSF9URVFMPW0KIENPTkZJR19ORVRfU0NIX1RCRj1tCiBDT05GSUdfTkVUX1NDSF9HUkVEPW0KIENPTkZJR19ORVRfU0NIX0RTTUFSSz1tCi0jIENPTkZJR19ORVRfU0NIX05FVEVNIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfU0NIX0lOR1JFU1M9bQotCi0jCi0jIENsYXNzaWZpY2F0aW9uCi0jCi1DT05GSUdfTkVUX0NMUz15Ci0jIENPTkZJR19ORVRfQ0xTX0JBU0lDIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfQ0xTX1RDSU5ERVg9bQogQ09ORklHX05FVF9DTFNfUk9VVEU0PW0KLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKIENPTkZJR19ORVRfQ0xTX0ZXPW0KIENPTkZJR19ORVRfQ0xTX1UzMj1tCi0jIENPTkZJR19DTFNfVTMyX1BFUkYgaXMgbm90IHNldAotIyBDT05GSUdfQ0xTX1UzMl9NQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfQ0xTX1JTVlA9bQogQ09ORklHX05FVF9DTFNfUlNWUDY9bQotIyBDT05GSUdfTkVUX0VNQVRDSCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0NMU19BQ1Q9eQogQ09ORklHX05FVF9BQ1RfUE9MSUNFPXkKLSMgQ09ORklHX05FVF9BQ1RfR0FDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQUNUX01JUlJFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQUNUX0lQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQUNUX05BVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQUNUX1BFRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9BQ1RfU0lNUCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0NMU19QT0xJQ0U9eQotIyBDT05GSUdfTkVUX0NMU19JTkQgaXMgbm90IHNldAotQ09ORklHX05FVF9TQ0hfRklGTz15Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCiBDT05GSUdfTkVUX1BLVEdFTj1tCi0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19GSUJfUlVMRVM9eQotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKLUNPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAogQ09ORklHX01URF9JWFA0WFg9eQotIyBDT05GSUdfTVREX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORD1tCi0jIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9bQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0VFUFJPTV9MRUdBQ1k9eQogQ09ORklHX0lERT15Ci1DT05GSUdfSURFX01BWF9IV0lGUz00Ci1DT05GSUdfQkxLX0RFVl9JREU9eQotCi0jCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPXkKLSMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAotQ09ORklHX0lERV9QUk9DX0ZTPXkKLQotIwotIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCi0jCi1DT05GSUdfSURFX0dFTkVSSUM9eQotIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0Ci0jCi1DT05GSUdfQkxLX0RFVl9JREVQQ0k9eQotIyBDT05GSUdfSURFUENJX1NIQVJFX0lSUSBpcyBub3Qgc2V0Ci1DT05GSUdfSURFUENJX1BDSUJVU19PUkRFUj15Ci0jIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15Ci0jIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0NNRDY0WD15Ci0jIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DWTgyQzY5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9IUFQzNjY9eQotIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXPXkKLSMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0w4MkMxMDUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRE1BPXkKLUNPTkZJR19JREVfQVJDSF9PQlNPTEVURV9JTklUPXkKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQotIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAotIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9WSUE9eQotIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogQ09ORklHX1BBVEFfQVJUT1A9eQotIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX1BBVEFfSVhQNFhYX0NGPXkKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRkIgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZPXkKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQogQ09ORklHX0lYUDRYWF9FVEg9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15Ci0jIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0Ci1DT05GSUdfRUVQUk8xMDA9eQotIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRUFMTlggaXMgbm90IHNldAotIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAotIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKIENPTkZJR19XQU49eQotIyBDT05GSUdfTEFOTUVESUEgaXMgbm90IHNldAogQ09ORklHX0hETEM9bQogQ09ORklHX0hETENfUkFXPW0KLSMgQ09ORklHX0hETENfUkFXX0VUSCBpcyBub3Qgc2V0CiBDT05GSUdfSERMQ19DSVNDTz1tCiBDT05GSUdfSERMQ19GUj1tCiBDT05GSUdfSERMQ19QUFA9bQogQ09ORklHX0hETENfWDI1PW0KLSMgQ09ORklHX1BDSTIwMFNZTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5YTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQzMwMFRPTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVJTWU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTQ0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYUDRYWF9IU1MgaXMgbm90IHNldAogQ09ORklHX0RMQ0k9bQotQ09ORklHX0RMQ0lfTUFYPTgKIENPTkZJR19XQU5fUk9VVEVSX0RSSVZFUlM9bQotIyBDT05GSUdfQ1lDTEFERVNfU1lOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCRVRIRVIgaXMgbm90IHNldAotIyBDT05GSUdfWDI1X0FTWSBpcyBub3Qgc2V0Ci1DT05GSUdfQVRNX0RSSVZFUlM9eQotIyBDT05GSUdfQVRNX0RVTU1ZIGlzIG5vdCBzZXQKIENPTkZJR19BVE1fVENQPW0KLSMgQ09ORklHX0FUTV9MQU5BSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fRU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9GSVJFU1RSRUFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9aQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9OSUNTVEFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9JRFQ3NzI1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fQU1CQVNTQURPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fSE9SSVpPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fSUEgaXMgbm90IHNldAotIyBDT05GSUdfQVRNX0ZPUkUyMDBFX01BWUJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9IRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTUlTQz15CiBDT05GSUdfSU5QVVRfSVhQNFhYX0JFRVBFUj15Ci0jIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1VJTlBVVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCi1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCi0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPW0KLUNPTkZJR19IV19SQU5ET01fSVhQNFhYPW0KLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLUNPTkZJR19JMkNfQUxHT0JJVD15Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSU9QM1hYIGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfSVhQNFhYPXkKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotQ09ORklHX0VFUFJPTV9MRUdBQ1k9eQotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfVzgzNzgxRD15Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19JWFA0WFhfV0FUQ0hET0c9eQotCi0jCi0jIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAotCi0jCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwogQ09ORklHX1VTQl9FSENJX0hDRD15Ci0jIENPTkZJR19VU0JfRUhDSV9TUExJVF9JU08gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CiBDT05GSUdfVVNCX1VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERTTCBtb2RlbSBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfQVRNIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CiBDT05GSUdfTEVEU19DTEFTUz15Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLUNPTkZJR19MRURTX0dQSU89eQogQ09ORklHX0xFRFNfRlNHPXkKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKK0NPTkZJR19MRURTX0dQSU89eQogQ09ORklHX0xFRFNfVFJJR0dFUlM9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15CiBDT05GSUdfTEVEU19UUklHR0VSX0lERV9ESVNLPXkKIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfSVNMMTIwOD15CiBDT05GSUdfUlRDX0RSVl9YMTIwNT15CiBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzPXkKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDJfRlNfWEFUVFI9eQogQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5TVFJVTUVOVEFUSU9OPXkKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRVJST1JTPXkKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9qb3JuYWRhNzIwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvam9ybmFkYTcyMF9kZWZjb25maWcKaW5kZXggZDFmMTY0Ni4uZWE4MGU3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9qb3JuYWRhNzIwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2pvcm5hZGE3MjBfZGVmY29uZmlnCkBAIC0xLDk2MCArMSw3MSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNgotIyBGcmkgQXVnIDIxIDE1OjQxOjM5IDIwMDkKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19BUkNIX01URF9YSVA9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX05BTUVTUEFDRVM9eQotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci0KLSMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKLSMKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotQ09ORklHX0ZSRUVaRVI9eQotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TQTExMDA9eQotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0ExMXgwIEltcGxlbWVudGF0aW9ucwotIwotIyBDT05GSUdfU0ExMTAwX0FTU0FCRVQgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0NFUkYgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0NPTExJRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSDMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0gzNjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9CQURHRTQgaXMgbm90IHNldAogQ09ORklHX1NBMTEwMF9KT1JOQURBNzIwPXkKIENPTkZJR19TQTExMDBfSk9STkFEQTcyMF9TU1A9eQotIyBDT05GSUdfU0ExMTAwX0hBQ0tLSVQgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0xBUlQgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX1BMRUIgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX1NIQU5OT04gaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX1NJTVBBRCBpcyBub3Qgc2V0Ci1DT05GSUdfU0ExMTAwX1NTUD15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfU0ExMTAwPXkKLUNPTkZJR19DUFVfMzJ2ND15Ci1DT05GSUdfQ1BVX0FCUlRfRVY0PXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKLUNPTkZJR19DUFVfQ0FDSEVfVjRXQj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9UTEJfVjRXQj15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TQTExMTE9eQotQ09ORklHX0RNQUJPVU5DRT15Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj05Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLUNPTkZJR19JU0E9eQotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX1BDQ0FSRD15Ci0jIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQT15Ci1DT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKLUNPTkZJR19QQ01DSUFfSU9DVEw9eQotCi0jCi0jIFBDLWNhcmQgYnJpZGdlcwotIwotIyBDT05GSUdfSTgyMzY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDSUMgaXMgbm90IHNldAogQ09ORklHX1BDTUNJQV9TQTExMDA9eQotIyBDT05GSUdfUENNQ0lBX1NBMTExMSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEwMAotIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVD15Ci0jIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci0jIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXkKLUNPTkZJR19TUEFSU0VNRU09eQotQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQotQ09ORklHX1NQQVJTRU1FTV9FWFRSRU1FPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci0jIENPTkZJR19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0jIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9IiIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKIENPTkZJR19CSU5GTVRfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwogQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QTV9TTEVFUD15Ci1DT05GSUdfU1VTUEVORD15Ci1DT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKLSMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX05GX0RFRlJBR19JUFY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiBDT05GSUdfSVJEQT1tCi0KLSMKLSMgSXJEQSBwcm90b2NvbHMKLSMKIENPTkZJR19JUkxBTj1tCiBDT05GSUdfSVJDT01NPW0KLSMgQ09ORklHX0lSREFfVUxUUkEgaXMgbm90IHNldAotCi0jCi0jIElyREEgb3B0aW9ucwotIwotIyBDT05GSUdfSVJEQV9DQUNIRV9MQVNUX0xTQVAgaXMgbm90IHNldAotIyBDT05GSUdfSVJEQV9GQVNUX1JSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREFfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIEluZnJhcmVkLXBvcnQgZGV2aWNlIGRyaXZlcnMKLSMKLQotIwotIyBTSVIgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0lSVFRZX1NJUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRG9uZ2xlIHN1cHBvcnQKLSMKLQotIwotIyBGSVIgZGV2aWNlIGRyaXZlcnMKLSMKIENPTkZJR19TQTExMDBfRklSPW0KLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTlAgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX05CRD15Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX0dEPXkKLUNPTkZJR19JREVfR0RfQVRBPXkKLSMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDUz15Ci0jIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX1BST0NfRlM9eQotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19EVU1NWT15Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci0jIENPTkZJR19NSUkgaXMgbm90IHNldAotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9TTUMgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDE3MDAgaXMgbm90IHNldAotIyBDT05GSUdfREVQQ0EgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NTODl4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotQ09ORklHX1dMQU5fODAyMTE9eQotIyBDT05GSUdfUENNQ0lBX1JBWUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FJUk9fQ1MgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1dMMzUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotIyBDT05GSUdfSEVSTUVTIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCiBDT05GSUdfTkVUX1BDTUNJQT15Ci0jIENPTkZJR19QQ01DSUFfM0M1ODkgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBXzNDNTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9GTVZKMThYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9QQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfTk1DTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9TTUM5MUM5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfWElSQzJQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfQVhORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD02NDAKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT0yNDAKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfSFA3WFg9eQotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKIENPTkZJR19UT1VDSFNDUkVFTl9IUDdYWD15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9IVENQRU4gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1c5MFg5MDAgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fU0ExMTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX1NBMTEwMD15CiBDT05GSUdfU0VSSUFMX1NBMTEwMF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MzIKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPW0KLSMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAotIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfTUNQX1NBMTFYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9EREMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9TQTExMDAgaXMgbm90IHNldAogQ09ORklHX0ZCX1MxRDEzWFhYPXkKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKLSMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xDRF9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfTENEX0hQNzAwPXkKIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKICMgQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDIGlzIG5vdCBzZXQKLUNPTkZJR19CQUNLTElHSFRfSFA3MDA9eQotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NREFfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19GT05UXzh4OD15Ci1DT05GSUdfRk9OVF84eDE2PXkKLSMgQ09ORklHX0xPR08gaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX1NBMTEwMD15Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KQEAgLTk5MywxODIgKzEwNCw5IEBACiBDT05GSUdfTkxTX0tPSThfUj1tCiBDT05GSUdfTkxTX0tPSThfVT1tCiBDT05GSUdfTkxTX1VURjg9bQotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRVJST1JTPXkKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotQ09ORklHX0NSQ19DQ0lUVD1tCi0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mva2FmYV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2thZmFfZGVmY29uZmlnCmluZGV4IGY2NjFlNzYuLjg5NmRiZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mva2FmYV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9rYWZhX2RlZmNvbmZpZwpAQCAtMSw4ODMgKzEsNjEgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzMKLSMgU3VuIE1heSAgNyAxNjo1NDo1MyAyMDA2Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfVUlEMTY9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSE1FTT15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0RFQURMSU5FPXkKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfQVQ5MT15Ci1DT05GSUdfQVJDSF9BVDkxUk05MjAwPXkKLQotIwotIyBBVDkxUk05MjAwIEltcGxlbWVudGF0aW9ucwotIwotCi0jCi0jIEFUOTFSTTkyMDAgQm9hcmQgVHlwZQotIwotIyBDT05GSUdfQVJDSF9BVDkxUk05MjAwREsgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9BVDkxUk05MjAwRUsgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DU0IzMzcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DU0I2MzcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DQVJNRVZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfS0I5MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQVRFQjkyMDAgaXMgbm90IHNldAogQ09ORklHX01BQ0hfS0FGQT15Ci0KLSMKLSMgQVQ5MSBGZWF0dXJlIFNlbGVjdGlvbnMKLSMKLSMgQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTIwVD15Ci1DT05GSUdfQ1BVXzMydjQ9eQotQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQotQ09ORklHX0NQVV9DQUNIRV9WNFdUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXQj15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCiAjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwogQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0haPTEwMAotIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKIENPTkZJR19MRURTPXkKLSMgQ09ORklHX0xFRFNfVElNRVIgaXMgbm90IHNldAogQ09ORklHX0xFRFNfQ1BVPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJtZW09MzJNIGNvbnNvbGU9dHR5UzAsMTE1MjAwIGluaXRyZD0weDIwODAwMDAwLDEwTSByb290PS9kZXYvcmFtMCBydyIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9NSVNDPXkKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci0jIENPTkZJR19NVERfQkxPQ0sgaXMgbm90IHNldAogQ09ORklHX01URF9CTE9DS19STz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0FUOTFfREFUQUZMQVNIPXkKLSMgQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJEIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfREFWSUNPTV9QSFk9eQotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQogQ09ORklHX0FSTV9BVDkxX0VUSEVSPXkKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX0FUTUVMPXkKIENPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfQVRNRUxfVFRZQVQgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MzIKLQotIwotIyBJUE1JCi0jCi0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi1DT05GSUdfV0FUQ0hET0c9eQotQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfQVQ5MVJNOTIwMF9XQVRDSERPRz15Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKLUNPTkZJR19BVDkxX1NQST15Ci1DT05GSUdfQVQ5MV9TUElERVY9eQotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLUNPTkZJR19JMkNfQUxHT0JJVD15Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCiBDT05GSUdfSTJDX0dQSU89eQotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCi0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIExFRCBkZXZpY2VzCi0jCi0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCitDT05GSUdfV0FUQ0hET0c9eQorQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKK0NPTkZJR19BVDkxUk05MjAwX1dBVENIRE9HPXkKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCi0jIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIFJlYWwgVGltZSBDbG9jawotIwotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15CiAjIENPTkZJR19SVENfSENUT1NZUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLQotIwotIyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX0FUOTFSTTkyMDA9eQotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwogQ09ORklHX05GU19GUz1tCiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD1tCi1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz1tCi0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi0jIENPTkZJR19OTFMgaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotQ09ORklHX0NSWVBUTz15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9rYjkyMDJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9rYjkyMDJfZGVmY29uZmlnCmluZGV4IDY2OGJhNTkuLjlmOTA2YTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mva2I5MjAyX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2tiOTIwMl9kZWZjb25maWcKQEAgLTEsMTMwNCArMSwxMjcgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMC1yYzgKLSMgV2VkIEp1biAgMyAxMzo1MjozMyAyMDA5Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKLUNPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVD15Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNwotIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotQ09ORklHX1JEX0JaSVAyPXkKLUNPTkZJR19SRF9MWk1BPXkKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9DTEs9eQotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9BVDkxPXkKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAotCi0jCi0jIEF0bWVsIEFUOTEgU3lzdGVtLW9uLUNoaXAKLSMKLUNPTkZJR19BUkNIX0FUOTFSTTkyMDA9eQotIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05MjYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxU0FNOVJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTlHMjAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxQ0FQOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFYNDAgaXMgbm90IHNldAotQ09ORklHX0FUOTFfUE1DX1VOSVQ9eQotCi0jCi0jIEFUOTFSTTkyMDAgQm9hcmQgVHlwZQotIwotIyBDT05GSUdfTUFDSF9PTkVBUk0gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxUk05MjAwREsgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9BVDkxUk05MjAwRUsgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DU0IzMzcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DU0I2MzcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DQVJNRVZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQVRFQjkyMDAgaXMgbm90IHNldAogQ09ORklHX01BQ0hfS0I5MjAwPXkKLSMgQ09ORklHX01BQ0hfUElDT1RVWDJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0tBRkEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9FQ0JBVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfWUw5MjAwIGlzIG5vdCBzZXQKLQotIwotIyBBVDkxIEJvYXJkIE9wdGlvbnMKLSMKLQotIwotIyBBVDkxIEZlYXR1cmUgU2VsZWN0aW9ucwotIwogQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUz15Ci1DT05GSUdfQVQ5MV9USU1FUl9IWj0xMjgKLUNPTkZJR19BVDkxX0VBUkxZX0RCR1U9eQotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDAgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDEgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDIgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDMgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDQgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDUgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX0FSTTkyMFQ9eQotQ09ORklHX0NQVV8zMnY0VD15Ci1DT05GSUdfQ1BVX0FCUlRfRVY0VD15Ci1DT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y0V1Q9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAogQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0haPTEyOAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci0jIENPTkZJR19BUkNIX0hBU19IT0xFU19NRU1PUllNT0RFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTAKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQotIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MTAwMDAwMDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MjAwNDAwMDAKLSMgQ09ORklHX1pCT09UX1JPTSBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0ibm9pbml0cmQgcm9vdD0vZGV2L210ZGJsb2NrMCByb290ZnN0eXBlPWpmZnMyIG1lbT02NE0iCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19LRVhFQz15Ci1DT05GSUdfQVRBR1NfUFJPQz15Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9NSVNDPXkKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKICMgQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci0jIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwogQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKIENPTkZJR19NVERfUEhZU01BUD15Ci0jIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkQ9eQotIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9HUElPIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfQVRNRUw9eQotIyBDT05GSUdfTVREX05BTkRfQVRNRUxfRUNDX0hXIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9BVE1FTF9FQ0NfU09GVD15Ci0jIENPTkZJR19NVERfTkFORF9BVE1FTF9FQ0NfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwogQ09ORklHX01URF9VQkk9eQotQ09ORklHX01URF9VQklfV0xfVEhSRVNIT0xEPTQwOTYKLUNPTkZJR19NVERfVUJJX0JFQl9SRVNFUlZFPTEKIENPTkZJR19NVERfVUJJX0dMVUVCST15Ci0KLSMKLSMgVUJJIGRlYnVnZ2luZyBvcHRpb25zCi0jCi0jIENPTkZJR19NVERfVUJJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQogQ09ORklHX0FUTUVMX1RDTElCPXkKLUNPTkZJR19BVE1FTF9UQ0JfQ0xLU1JDPXkKLUNPTkZJR19BVE1FTF9UQ0JfQ0xLU1JDX0JMT0NLPTAKIENPTkZJR19BVE1FTF9TU0M9eQotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiBDT05GSUdfU0NTSV9MT0dHSU5HPXkKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwogQ09ORklHX1NDU0lfU1BJX0FUVFJTPW0KLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQogQ09ORklHX0FSTV9BVDkxX0VUSEVSPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKIENPTkZJR19TRVJJQUxfQVRNRUw9eQogQ09ORklHX1NFUklBTF9BVE1FTF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQVRNRUxfUERDPXkKLSMgQ09ORklHX1NFUklBTF9BVE1FTF9UVFlBVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19BVDkxUk05MjAwX1dBVENIRE9HPXkKLQotIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAogQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CiBDT05GSUdfRkJfVElMRUJMSVRUSU5HPXkKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogIyBDT05GSUdfTENEX0NMQVNTX0RFVklDRSBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15CiAjIENPTkZJR19CQUNLTElHSFRfR0VORVJJQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVFM9eQotIyBDT05GSUdfRk9OVF84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF84eDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAogQ09ORklHX0ZPTlRfTUlOSV80eDY9eQotIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0KLSMKLSMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KLSMKIENPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAogQ09ORklHX1VTQl9MSUJVU1VBTD15Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKLSMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0Ci1DT05GSUdfTU1DX0FUOTE9eQotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CitDT05GSUdfTU1DX0FUOTE9bQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX0FUOTFSTTkyMDA9eQotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKLSMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15Ci0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19DT05GSUdGU19GUz15Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VCSUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogQ09ORklHX05MU19VVEY4PXkKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAogIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCi0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVkVOVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotQ09ORklHX0FSTV9VTldJTkQ9eQotIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9HRU5FUklDPXkKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKLUNPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mva2lya3dvb2RfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9raXJrd29vZF9kZWZjb25maWcKaW5kZXggNDYxMWQzYy4uY2NjOWM5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9raXJrd29vZF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9raXJrd29vZF9kZWZjb25maWcKQEAgLTEsMTg3NiArMSwxODQgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzYKLSMgVGh1IEZlYiAgNCAyMzowODo1NCAyMDEwCi0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfSEFWRV9LRVJORUxfR1pJUD15Ci1DT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKLUNPTkZJR19LRVJORUxfR1pJUD15Ci0jIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAotIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTkKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfTkFNRVNQQUNFUz15Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKLUNPTkZJR19UUkFDRVBPSU5UUz15CiBDT05GSUdfT1BST0ZJTEU9eQotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0tQUk9CRVM9eQotQ09ORklHX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotQ09ORklHX01NVT15Ci0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05PTUFESUsgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RPVkUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfS0lSS1dPT0Q9eQotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VODUwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFydmVsbCBLaXJrd29vZCBJbXBsZW1lbnRhdGlvbnMKLSMKIENPTkZJR19NQUNIX0RCODhGNjI4MV9CUD15CiBDT05GSUdfTUFDSF9SRDg4RjYxOTJfTkFTPXkKIENPTkZJR19NQUNIX1JEODhGNjI4MT15CiBDT05GSUdfTUFDSF9NVjg4RjYyODFHVFdfR0U9eQogQ09ORklHX01BQ0hfU0hFRVZBUExVRz15CitDT05GSUdfTUFDSF9FU0FUQV9TSEVFVkFQTFVHPXkKK0NPTkZJR19NQUNIX0dVUlVQTFVHPXkKIENPTkZJR19NQUNIX1RTMjE5PXkKIENPTkZJR19NQUNIX1RTNDFYPXkKLUNPTkZJR19NQUNIX09QRU5SRD15CiBDT05GSUdfTUFDSF9PUEVOUkRfQkFTRT15CiBDT05GSUdfTUFDSF9PUEVOUkRfQ0xJRU5UPXkKK0NPTkZJR19NQUNIX09QRU5SRF9VTFRJTUFURT15CiBDT05GSUdfTUFDSF9ORVRTUEFDRV9WMj15Ci1DT05GSUdfUExBVF9PUklPTj15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfRkVST0NFT049eQorQ09ORklHX01BQ0hfSU5FVFNQQUNFX1YyPXkKK0NPTkZJR19NQUNIX05FVFNQQUNFX01BWF9WMj15CitDT05GSUdfTUFDSF9ORVQyQklHX1YyPXkKK0NPTkZJR19NQUNIX05FVDVCSUdfVjI9eQorQ09ORklHX01BQ0hfVDUzMjU9eQogIyBDT05GSUdfQ1BVX0ZFUk9DRU9OX09MRF9JRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQotQ09ORklHX0NQVV9QQUJSVF9MRUdBQ1k9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9GRVJPQ0VPTj15Ci1DT05GSUdfQ1BVX1RMQl9GRVJPQ0VPTj15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotQ09ORklHX09VVEVSX0NBQ0hFPXkKLUNPTkZJR19DQUNIRV9GRVJPQ0VPTl9MMj15Ci0jIENPTkZJR19DQUNIRV9GRVJPQ0VPTl9MMl9XUklURVRIUk9VR0ggaXMgbm90IHNldAotQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD01Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAotIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15CiAjIENPTkZJR19PQUJJX0NPTVBBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTk5OTk5OQotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci1DT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWT15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSIiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwogQ09ORklHX0NQVV9JRExFPXkKLUNPTkZJR19DUFVfSURMRV9HT1ZfTEFEREVSPXkKLUNPTkZJR19DUFVfSURMRV9HT1ZfTUVOVT15Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi0jIENPTkZJR19WRlAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQotQ09ORklHX0lORVRfTFJPPXkKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRFNBPXkKLSMgQ09ORklHX05FVF9EU0FfVEFHX0RTQSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0RTQV9UQUdfRURTQT15Ci0jIENPTkZJR19ORVRfRFNBX1RBR19UUkFJTEVSIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRFNBX01WODhFNlhYWD15Ci0jIENPTkZJR19ORVRfRFNBX01WODhFNjA2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBX01WODhFNlhYWF9ORUVEX1BQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBX01WODhFNjEzMSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0RTQV9NVjg4RTYxMjNfNjFfNjU9eQotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCiBDT05GSUdfTkVUX1BLVEdFTj1tCi0jIENPTkZJR19ORVRfVENQUFJPQkUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotQ09ORklHX1dJUkVMRVNTX0VYVD15Ci1DT05GSUdfV0VYVF9DT1JFPXkKLUNPTkZJR19XRVhUX1BST0M9eQotQ09ORklHX1dFWFRfU1BZPXkKIENPTkZJR19DRkc4MDIxMT15Ci0jIENPTkZJR19OTDgwMjExX1RFU1RNT0RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFM9eQotIyBDT05GSUdfQ0ZHODAyMTFfREVCVUdGUyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQotQ09ORklHX0NGRzgwMjExX1dFWFQ9eQotQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15Ci1DT05GSUdfTElCODAyMTE9eQotIyBDT05GSUdfTElCODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01BQzgwMjExPXkKLUNPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTD15Ci0jIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTD15Ci1DT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVD0ibWluc3RyZWwiCi0jIENPTkZJR19NQUM4MDIxMV9NRVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTFfREVCVUdGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMV9ERUJVR19NRU5VIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQotQ09ORklHX01URF9HRU5fUFJPQkU9eQogQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQotQ09ORklHX01URF9DRklfTk9TV0FQPXkKLSMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQogIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci0jIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9TVEFBPXkKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci0jIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9JTVBBNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX00yNVA4MD15Ci1DT05GSUdfTTI1UFhYX1VTRV9GQVNUX1JFQUQ9eQotIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfR1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfSURTPXkKLSMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX09SSU9OPXkKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9TUj1tCi0jIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz1tCi0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BNODAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKLSMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQotQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19TQVRBX0FIQ0k9eQotIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX1NGRj15Ci0jIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9NVj15Ci0jIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RPU0hJQkEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKIENPTkZJR19NQVJWRUxMX1BIWT15Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01JST15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogQ09ORklHX05FVF9QQ0k9eQotIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAotIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRUFMTlggaXMgbm90IHNldAotIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAotIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDOTQyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogQ09ORklHX01WNjQzWFhfRVRIPXkKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0xJQkVSVEFTX1RISU5GSVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUNzZDNTBYX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9STkRJU19XTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUTDgxODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRMODE4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRE04MjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExX0hXU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01XTDhLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUSF9DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQjQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0M0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotIyBDT05GSUdfSVBXMjEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFcyMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRkkgaXMgbm90IHNldAotIyBDT05GSUdfSVdNIGlzIG5vdCBzZXQKIENPTkZJR19MSUJFUlRBUz15Ci0jIENPTkZJR19MSUJFUlRBU19VU0IgaXMgbm90IHNldAogQ09ORklHX0xJQkVSVEFTX1NESU89eQotIyBDT05GSUdfTElCRVJUQVNfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkVSVEFTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFUk1FUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QNTRfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUMlgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTDEyWFggaXMgbm90IHNldAotIyBDT05GSUdfWkQxMjExUlcgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0Ci1DT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9HUElPPXkKLSMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MTTgzMjMgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0xNgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15CiAjIENPTkZJR19JMkNfQ09NUEFUIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX01WNjRYWFg9eQotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogQ09ORklHX1NQST15Ci0jIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NQSV9NQVNURVI9eQotCi0jCi0jIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfU1BJX09SSU9OPXkKLSMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAotIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCi0jIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HUElPX1NZU0ZTPXkKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fQURQNTU4OCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19DUzU1MzUgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNldAotCi0jCi0jIEFDOTcgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotQ09ORklHX1ZHQV9BUkI9eQotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotQ09ORklHX0hJRF9BNFRFQ0g9eQotQ09ORklHX0hJRF9BUFBMRT15Ci1DT05GSUdfSElEX0JFTEtJTj15Ci1DT05GSUdfSElEX0NIRVJSWT15Ci1DT05GSUdfSElEX0NISUNPTlk9eQotQ09ORklHX0hJRF9DWVBSRVNTPXkKIENPTkZJR19ISURfRFJBR09OUklTRT15Ci0jIENPTkZJR19EUkFHT05SSVNFX0ZGIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfRVpLRVk9eQotQ09ORklHX0hJRF9LWUU9eQogQ09ORklHX0hJRF9HWVJBVElPTj15CiBDT05GSUdfSElEX1RXSU5IQU49eQotQ09ORklHX0hJRF9LRU5TSU5HVE9OPXkKLUNPTkZJR19ISURfTE9HSVRFQ0g9eQotIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAotIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAotQ09ORklHX0hJRF9NSUNST1NPRlQ9eQotQ09ORklHX0hJRF9NT05URVJFWT15CiBDT05GSUdfSElEX05UUklHPXkKIENPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQotIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9QRVRBTFlOWD15CiBDT05GSUdfSElEX1NBTVNVTkc9eQogQ09ORklHX0hJRF9TT05ZPXkKIENPTkZJR19ISURfU1VOUExVUz15CiBDT05GSUdfSElEX0dSRUVOQVNJQT15Ci0jIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9TTUFSVEpPWVBMVVM9eQotIyBDT05GSUdfU01BUlRKT1lQTFVTX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfVE9QU0VFRD15CiBDT05GSUdfSElEX1RIUlVTVE1BU1RFUj15Ci0jIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9aRVJPUExVUz15Ci0jIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CiBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQ9eQotIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUFJJTlRFUj1tCi0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLQotIwotIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwotIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCPXkKIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5PXkKIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTU9eQogQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVUxQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKIENPTkZJR19TRElPX1VBUlQ9eQotIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19USUZNX1NEIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfTVZTRElPPXkKLSMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX0NCNzEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19WSUFfU0RNTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKLQotIwotIyBMRUQgZHJpdmVycwotIwotIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX0dQSU89eQotQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15Ci0jIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfTFQzNTkzIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKIENPTkZJR19MRURTX1RSSUdHRVJTPXkKIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQotIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049eQotCi0jCi0jIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKLSMKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9TMzUzOTBBPXkKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCiBDT05GSUdfUlRDX0RSVl9NVj15CiBDT05GSUdfRE1BREVWSUNFUz15Ci0KLSMKLSMgRE1BIERldmljZXMKLSMKIENPTkZJR19NVl9YT1I9eQotQ09ORklHX0RNQV9FTkdJTkU9eQotCi0jCi0jIERNQSBDbGllbnRzCi0jCi0jIENPTkZJR19ORVRfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FTWU5DX1RYX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKLSMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKIENPTkZJR19JU085NjYwX0ZTPW0KIENPTkZJR19KT0xJRVQ9eQotIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKIENPTkZJR19VREZfRlM9bQotQ09ORklHX1VERl9OTFM9eQotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQogQ09ORklHX05MU19JU084ODU5XzI9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfVVRGOD15Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKICMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFDS1RSQUNFPXkKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tQUk9CRVNfU0FOSVRZX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAotIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLSMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19OT1BfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfUklOR19CVUZGRVI9eQotQ09ORklHX0VWRU5UX1RSQUNJTkc9eQotQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15Ci1DT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15Ci1DT05GSUdfVFJBQ0lORz15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotQ09ORklHX0FSTV9VTldJTkQ9eQogQ09ORklHX0RFQlVHX1VTRVI9eQogQ09ORklHX0RFQlVHX0VSUk9SUz15Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTEw9eQotIyBDT05GSUdfRUFSTFlfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ19FVE0gaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCiBDT05GSUdfQ1JZUFRPX0NCQz1tCi0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9eQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotQ09ORklHX0NSWVBUT19DUkMzMkM9eQotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLUNPTkZJR19DUllQVE9fQUVTPXkKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BUkM0PXkKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKIENPTkZJR19DUllQVE9fREVWX01WX0NFU0E9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotQ09ORklHX0JJTkFSWV9QUklOVEY9eQotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD15CiBDT05GSUdfQ1JDMTY9eQotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDX0lUVV9UPW0KLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKIENPTkZJR19MSUJDUkMzMkM9eQotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2tzODY5NV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2tzODY5NV9kZWZjb25maWcKaW5kZXggZTZmMjI3Ni4uNDdjNDg4MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9rczg2OTVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mva3M4Njk1X2RlZmNvbmZpZwpAQCAtMSwxMDIxICsxLDc1IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctc2ltdGVjLW1pY3JlbDEKLSMgRnJpIERlYyAgNSAxMDozMDoyNyAyMDA4Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLSMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX05BTUVTUEFDRVM9eQotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci0jIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQ0xLIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0tTODY5NT15Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU003WDAwQSBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIwotCi0jCi0jIEtlbmRpbi9NaWNyZWwgS1M4Njk1IEltcGxlbWVudGF0aW9ucwotIwogQ09ORklHX01BQ0hfS1M4Njk1PXkKIENPTkZJR19NQUNIX0RTTTMyMD15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTIyVD15Ci1DT05GSUdfQ1BVXzMydjRUPXkKLUNPTkZJR19DUFVfQUJSVF9FVjRUPXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKLUNPTkZJR19DUFVfQ0FDSEVfVjRXVD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwogIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX0xFR0FDWT15CiBDT05GSUdfUENJX0RFQlVHPXkKIENPTkZJR19QQ0NBUkQ9eQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUE9eQotQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15Ci1DT05GSUdfUENNQ0lBX0lPQ1RMPXkKLUNPTkZJR19DQVJEQlVTPXkKLQotIwotIyBQQy1jYXJkIGJyaWRnZXMKLSMKIENPTkZJR19ZRU5UQT15Ci1DT05GSUdfWUVOVEFfTzI9eQotQ09ORklHX1lFTlRBX1JJQ09IPXkKLUNPTkZJR19ZRU5UQV9UST15Ci1DT05GSUdfWUVOVEFfRU5FX1RVTkU9eQotQ09ORklHX1lFTlRBX1RPU0hJQkE9eQotIyBDT05GSUdfUEQ2NzI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX0k4MjA5MiBpcyBub3Qgc2V0Ci1DT05GSUdfUENDQVJEX05PTlNUQVRJQz15Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0ibWVtPTMyTSBjb25zb2xlPXR0eVMwLDExNTIwMCBpbml0cmQ9MHgyMDQxMDAwMCwzMTQ1NzI4IHJvb3Q9L2Rldi9yYW0wIHJ3IgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi0jIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQotQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKLUNPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfSkVERUNQUk9CRT15Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVA9eQotQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4ODAwMDAwMAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0wCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTQKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotQ09ORklHX1dMQU5fODAyMTE9eQotIyBDT05GSUdfUENNQ0lBX1JBWUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVzIxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSVBXMjIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJFUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRVJNRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfQUlST19DUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfV0wzNTAxIGlzIG5vdCBzZXQKIENPTkZJR19QUklTTTU0PW0KLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9LUzg2OTU9eQogQ09ORklHX1NFUklBTF9LUzg2OTVfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009bQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAotIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLUNPTkZJR19ISURfREVCVUc9eQotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKLSMKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVm9sdGFnZSBhbmQgQ3VycmVudCByZWd1bGF0b3JzCi0jCi0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9TVU1NQVJZPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQogQ09ORklHX0pGRlMyX1JVQklOPXkKLSMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKLSMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVFJBQ0U9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15Ci0jIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbGFydF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2xhcnRfZGVmY29uZmlnCmluZGV4IGFmNzU5NTEuLmZhYTI4NjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbGFydF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9sYXJ0X2RlZmNvbmZpZwpAQCAtMSw4NzUgKzEsNzUgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCi0jIFN1biBNYXIgMjcgMjM6NTM6MjQgMjAwNQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSU9NQVA9eQotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCi0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIworQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NBMTEwMD15Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotCi0jCi0jIFNBMTF4MCBJbXBsZW1lbnRhdGlvbnMKLSMKLSMgQ09ORklHX1NBMTEwMF9BU1NBQkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9DRVJGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9DT0xMSUUgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0gzMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9IMzYwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfQkFER0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9KT1JOQURBNzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9IQUNLS0lUIGlzIG5vdCBzZXQKIENPTkZJR19TQTExMDBfTEFSVD15Ci0jIENPTkZJR19TQTExMDBfUExFQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfU0hBTk5PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfU0lNUEFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9TU1AgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX1NBMTEwMD15Ci1DT05GSUdfQ1BVXzMydjQ9eQotQ09ORklHX0NQVV9BQlJUX0VWND15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y0V0I9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfVExCX1Y0V0I9eQotQ09ORklHX0NQVV9NSU5JQ0FDSEU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi1DT05GSUdfSVNBPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfRElTQ09OVElHTUVNPXkKIENPTkZJR19MRURTPXkKLSMgQ09ORklHX0xFRFNfVElNRVIgaXMgbm90IHNldAogQ09ORklHX0xFRFNfQ1BVPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNBMCw5NjAwIHJvb3Q9L2Rldi9yYW0iCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKLSMKLUNPTkZJR19DUFVfRlJFUT15Ci1DT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQotIyBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0NQVV9GUkVRX1NUQVQ9eQotIyBDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRT15Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAotQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRT15Ci0jIENPTkZJR19DUFVfRlJFUV9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPXkKLSMgQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfU0ExMTAwPXkKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKIENPTkZJR19CSU5GTVRfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwogQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0Ci1DT05GSUdfQVBNPW0KLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwotQ09ORklHX01URD15Ci1DT05GSUdfTVREX0RFQlVHPXkKLUNPTkZJR19NVERfREVCVUdfVkVSQk9TRT0xCi0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwotQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTEFSVD15Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotIyBDT05GSUdfUE5QIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfWEQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIwotQ09ORklHX0lERT1tCi1DT05GSUdfQkxLX0RFVl9JREU9bQotCi0jCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPW0KLSMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVDRD1tCi0jIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLUNPTkZJR19JREVfR0VORVJJQz1tCi0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9DSElQU0VUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29ya2luZyBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9bQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfVENQRElBRz15Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogQ09ORklHX0lSREE9bQotCi0jCi0jIElyREEgcHJvdG9jb2xzCi0jCiBDT05GSUdfSVJMQU49bQogQ09ORklHX0lSTkVUPW0KIENPTkZJR19JUkNPTU09bQotIyBDT05GSUdfSVJEQV9VTFRSQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSXJEQSBvcHRpb25zCi0jCiBDT05GSUdfSVJEQV9DQUNIRV9MQVNUX0xTQVA9eQotIyBDT05GSUdfSVJEQV9GQVNUX1JSIGlzIG5vdCBzZXQKIENPTkZJR19JUkRBX0RFQlVHPXkKLQotIwotIyBJbmZyYXJlZC1wb3J0IGRldmljZSBkcml2ZXJzCi0jCi0KLSMKLSMgU0lSIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19JUlRUWV9TSVIgaXMgbm90IHNldAotCi0jCi0jIERvbmdsZSBzdXBwb3J0Ci0jCi0KLSMKLSMgT2xkIFNJUiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfSVJQT1JUX1NJUiBpcyBub3Qgc2V0Ci0KLSMKLSMgT2xkIFNlcmlhbCBkb25nbGUgc3VwcG9ydAotIwotCi0jCi0jIEZJUiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTlNDX0ZJUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU5CT05EX0ZJUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUNfSVJDQ19GSVIgaXMgbm90IHNldAotIyBDT05GSUdfQUxJX0ZJUiBpcyBub3Qgc2V0CiBDT05GSUdfU0ExMTAwX0ZJUj1tCi0jIENPTkZJR19CVCBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKK0NPTkZJR19NVERfREVCVUc9eQorQ09ORklHX01URF9ERUJVR19WRVJCT1NFPTEKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTE9DSz15CitDT05GSUdfTVREX0xBUlQ9eQorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19JREU9bQorQ09ORklHX0JMS19ERVZfSURFQ0Q9bQogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX0RVTU1ZPW0KLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTEFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9TTUMgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAotIyBDT05GSUdfQVQxNzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JU0EgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9bQotIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKIENPTkZJR19QUFBfQVNZTkM9bQotIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKIENPTkZJR19QUFBfREVGTEFURT1tCiBDT05GSUdfUFBQX0JTRENPTVA9bQotIyBDT05GSUdfUFBQT0UgaXMgbm90IHNldAogQ09ORklHX1NMSVA9bQogQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15Ci0jIENPTkZJR19TTElQX1NNQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVBfTU9ERV9TTElQNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci1DT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQotQ09ORklHX01PVVNFX1BTMj15Ci0jIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfSU5QT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0xPR0lCTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9QQzExMFBBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19TT1VORF9HQU1FUE9SVD15Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9TQTExMDA9eQogQ09ORklHX1NFUklBTF9TQTExMDBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCi0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCi0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLQotIwotIyBTb3VuZAotIwogQ09ORklHX1NPVU5EPW0KLQotIwotIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKLSMKLSMgQ09ORklHX1NORCBpcyBub3Qgc2V0Ci0KLSMKLSMgT3BlbiBTb3VuZCBTeXN0ZW0KLSMKLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIwotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPW0KLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotQ09ORklHX0pCRD1tCi0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQogQ09ORklHX1JFSVNFUkZTX0ZTPW0KLSMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFhGUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKIENPTkZJR19JU085NjYwX0ZTPW0KIENPTkZJR19KT0xJRVQ9eQotIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKIENPTkZJR19VREZfRlM9bQotQ09ORklHX1VERl9OTFM9eQotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfU1lTRlM9eQotIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPW0KIENPTkZJR19KRkZTMl9GU19ERUJVRz0xCi0jIENPTkZJR19KRkZTMl9GU19OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX05PUl9FQ0MgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz1tCi0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwogQ09ORklHX05GU19GUz1tCiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAogQ09ORklHX05GU0Q9bQogQ09ORklHX05GU0RfVjM9eQotIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9bQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19FWFBPUlRGUz1tCi1DT05GSUdfU1VOUlBDPW0KLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKIENPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAogQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT1tCi0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xNT1tCi0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogQ09ORklHX05MU19VVEY4PW0KLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15CiBDT05GSUdfREVCVUdfVVNFUj15Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCi0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0NSQ19DQ0lUVD1tCiBDT05GSUdfQ1JDMzI9bQotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9bQotQ09ORklHX1pMSUJfREVGTEFURT1tCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2xva2lfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9sb2tpX2RlZmNvbmZpZwppbmRleCA2ZGY3YjE0Li5lMWVhZmY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2xva2lfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbG9raV9kZWZjb25maWcKQEAgLTEsMTE0NiArMSwxMjAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNi1yYzUKLSMgRnJpIEp1biAxMyAwMzowNzo0OSAyMDA4Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci0jIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci0jIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9MT0tJPXkKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNN1gwMEEgaXMgbm90IHNldAotCi0jCi0jIE1hcnZlbGwgTG9raSAoODhSQzg0ODApIEltcGxlbWVudGF0aW9ucwotIwogQ09ORklHX01BQ0hfTEI4OFJDODQ4MD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIwotQ09ORklHX1BMQVRfT1JJT049eQotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX0ZFUk9DRU9OPXkKICMgQ09ORklHX0NQVV9GRVJPQ0VPTl9PTERfSUQgaXMgbm90IHNldAotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUPXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfRkVST0NFT049eQotQ09ORklHX0NQVV9UTEJfRkVST0NFT049eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSIiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKLSMgQ09ORklHX0ZQRV9OV0ZQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRlAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci0jIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCiBDT05GSUdfTkVUX1BLVEdFTj1tCi0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX0ZUTD15CiBDT05GSUdfTkZUTD15Ci0jIENPTkZJR19ORlRMX1JXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQotQ09ORklHX01URF9HRU5fUFJPQkU9eQogQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQotQ09ORklHX01URF9DRklfTk9TV0FQPXkKLSMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQogQ09ORklHX01URF9DRklfSTQ9eQotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15CiBDT05GSUdfTVREX0NGSV9TVEFBPXkKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgwCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MAotQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0wCi0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0lNUEE3IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogQ09ORklHX01URF9NMjVQODA9eQotQ09ORklHX00yNVBYWF9VU0VfRkFTVF9SRUFEPXkKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkQ9eQogQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURT15Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfT1JJT049eQotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfU1I9bQotIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9bQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKLSMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci1DT05GSUdfU0FUQV9QTVA9eQotQ09ORklHX0FUQV9TRkY9eQogQ09ORklHX1NBVEFfTVY9eQotIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVY2NDNYWF9FVEg9eQogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCi0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPW0KLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVY2NFhYWD15Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKIENPTkZJR19TUEk9eQotQ09ORklHX1NQSV9NQVNURVI9eQotCi0jCi0jIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFByb3RvY29sIE1hc3RlcnMKLSMKLSMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAogQ09ORklHX1VTQl9QUklOVEVSPXkKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUI9eQogQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT009eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1RPUkFHRV9EUENNPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDk9eQogQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NT15CiBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1Q9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15Ci0jIENPTkZJR19MRURTX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZHJpdmVycwotIwotCi0jCi0jIExFRCBUcmlnZ2VycwotIwotIyBDT05GSUdfTEVEU19UUklHR0VSUyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfWEZTX0ZTPXkKLSMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCiBDT05GSUdfSVNPOTY2MF9GUz15Ci0jIENPTkZJR19KT0xJRVQgaXMgbm90IHNldAotIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKIENPTkZJR19VREZfRlM9bQotQ09ORklHX1VERl9OTFM9eQotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKIENPTkZJR19CU0RfRElTS0xBQkVMPXkKIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT049eQogQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTj15CiBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMPXkKIENPTkZJR19MRE1fUEFSVElUSU9OPXkKIENPTkZJR19MRE1fREVCVUc9eQotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19TVU5fUEFSVElUSU9OPXkKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKIENPTkZJR19OTFNfSVNPODg1OV8yPXkKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiBDT05GSUdfREVCVUdfVVNFUj15Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLUNPTkZJR19DUllQVE9fQUxHQVBJPW0KLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KLUNPTkZJR19DUllQVE9fTUFOQUdFUj1tCi0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwogQ09ORklHX0NSWVBUT19DQkM9bQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQgaXMgbm90IHNldAogQ09ORklHX0NSQ19DQ0lUVD15CiBDT05GSUdfQ1JDMTY9eQotQ09ORklHX0NSQ19JVFVfVD1tCi1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiBDT05GSUdfTElCQ1JDMzJDPXkKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2xwZDI3MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2xwZDI3MF9kZWZjb25maWcKaW5kZXggYWViNzY4Ni4uMWM4YzllZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9scGQyNzBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHBkMjcwX2RlZmNvbmZpZwpAQCAtMSwxMDMxICsxLDY1IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAtcmMxCi0jIFNhdCBEZWMgMTYgMDY6MDU6NTEgMjAwNgotIwotQ09ORklHX0FSTT15Ci0jIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19BUkNIX01URF9YSVA9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0hNRU09eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19TTEFCPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBsYXllcgotIwotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1BYQT15Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLQotIwotIyBJbnRlbCBQWEEyeHggSW1wbGVtZW50YXRpb25zCi0jCi0jIENPTkZJR19BUkNIX0xVQkJPQ0sgaXMgbm90IHNldAogQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzA9eQotIyBDT05GSUdfTUFDSF9NQUlOU1RPTkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfSURQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVFJJWkVQUzQgaXMgbm90IHNldAotQ09ORklHX1BYQTI3eD15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfWFNDQUxFPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwogIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfSVdNTVhUPXkKLUNPTkZJR19YU0NBTEVfUE1VPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMDAKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9uZnMgaXA9Ym9vdHAgY29uc29sZT10dHlTMCwxMTUyMDAgbWVtPTY0TSIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi0jIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUNLRVQgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogQ09ORklHX0lQVjY9eQotIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9TSVQgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKLUNPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQogQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQotQ09ORklHX01URF9DRklfTk9TV0FQPXkKLSMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NGSV9JMSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci0jIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TSEFSUF9TTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX05CRD15Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIwogQ09ORklHX0lERT15Ci1DT05GSUdfQkxLX0RFVl9JREU9eQotCi0jCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPXkKLSMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0Ci0KLSMKLSMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwotIwotIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKLSMKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15CiBDT05GSUdfU01DOTFYPXkKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci1DT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15CiAjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9QWEE9eQogQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCi0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCi0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCi1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotCi0jCi0jIExFRCBkZXZpY2VzCi0jCi0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogQ09ORklHX0ZCX1BYQT15Ci0jIENPTkZJR19GQl9QWEFfUEFSQU1FVEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQlggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19GT05UXzh4OD15Ci1DT05GSUdfRk9OVF84eDE2PXkKLQotIwotIyBMb2dvIGNvbmZpZ3VyYXRpb24KLSMKIENPTkZJR19MT0dPPXkKLUNPTkZJR19MT0dPX0xJTlVYX01PTk89eQotQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCiBDT05GSUdfU09VTkQ9eQotCi0jCi0jIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQotIwogQ09ORklHX1NORD15Ci1DT05GSUdfU05EX1RJTUVSPXkKLUNPTkZJR19TTkRfUENNPXkKLSMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIEdlbmVyaWMgZGV2aWNlcwotIwotQ09ORklHX1NORF9BQzk3X0NPREVDPXkKLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQUxTQSBBUk0gZGV2aWNlcwotIwotQ09ORklHX1NORF9QWEEyWFhfUENNPXkKIENPTkZJR19TTkRfUFhBMlhYX0FDOTc9eQotCi0jCi0jIE9wZW4gU291bmQgU3lzdGVtCi0jCi0jIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0Ci1DT05GSUdfQUM5N19CVVM9eQotCi0jCi0jIEhJRCBEZXZpY2VzCi0jCi1DT05GSUdfSElEPXkKLQotIwotIyBVU0Igc3VwcG9ydAotIwotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwogQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUldTRU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKIENPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19VU0VSPXkKIENPTkZJR19ERUJVR19FUlJPUlM9eQogQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0lPTUFQX0NPUFk9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9scGQ3YTQwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2xwZDdhNDAwX2RlZmNvbmZpZwppbmRleCA2MTE2ZmVlLi4yMGNhYWFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2xwZDdhNDAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2xwZDdhNDAwX2RlZmNvbmZpZwpAQCAtMSw4NzcgKzEsNjggQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMgotIyBUaHUgTm92ICAzIDE0OjE1OjMyIDIwMDUKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX01NVT15Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0lPTUFQPXkKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogQ09ORklHX0lLQ09ORklHPXkKLSMgQ09ORklHX0lLQ09ORklHX1BST0MgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCi0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwotIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3OTUyWCBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0xIN0E0MFg9eQotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotCi0jCi0jIExIN0E0MFggSW1wbGVtZW50YXRpb25zCi0jCi0jIENPTkZJR19NQUNIX0tFVjdBNDAwIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX0xQRDdBNDAwPXkKLSMgQ09ORklHX01BQ0hfTFBEN0E0MDQgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfTEg3QTQwMD15Ci1DT05GSUdfTFBEN0E0MFhfQ1BMRF9TU1A9eQotIyBDT05GSUdfTEg3QTQwWF9DT05USUdNRU0gaXMgbm90IHNldAotIyBDT05GSUdfTEg3QTQwWF9PTkVfQkFOS19QRVJfTk9ERSBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTIyVD15Ci1DT05GSUdfQ1BVXzMydjQ9eQotQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQotQ09ORklHX0NQVV9DQUNIRV9WNFdUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXQj15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi1DT05GSUdfQVJNX0FNQkE9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19ESVNDT05USUdNRU09eQotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9IiIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKLUNPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwotQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi1DT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDA0MDAwMDAwCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTQKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKLUNPTkZJR19JREU9eQotQ09ORklHX0JMS19ERVZfSURFPXkKLQotIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci0jIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfUE9MTD15Ci0KLSMKLSMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwotIwotQ09ORklHX0lERV9HRU5FUklDPXkKLUNPTkZJR19JREVfQVJNPXkKLSMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJPXkKLSMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKLSMgQ09ORklHX0JMS19ERVZfU0QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKIENPTkZJR19JUF9QTlBfUkFSUD15Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1RDUERJQUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX01URD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMT0NLPXkKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKK0NPTkZJR19NVERfUEhZU01BUD15CitDT05GSUdfQkxLX0RFVl9MT09QPXkKK0NPTkZJR19JREU9eQorQ09ORklHX1NDU0k9eQorIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQogQ09ORklHX1NNQzkxWD15Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0Ci1DT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0M19MSDc9eQotQ09ORklHX0hBU19UT1VDSFNDUkVFTl9BRFM3ODQzX0xINz15Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9MSDdBNDBYPXkKIENPTkZJR19TRVJJQUxfTEg3QTQwWF9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIwotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotQ09ORklHX1JUQz15Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKIENPTkZJR19GQj15Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotQ09ORklHX0ZCX1NPRlRfQ1VSU09SPXkKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotQ09ORklHX0ZCX0FSTUNMQ0Q9eQotQ09ORklHX0ZCX0FSTUNMQ0RfU0hBUlBfTFEwMzVRN0RCMDJfSFJURlQ9eQotIyBDT05GSUdfRkJfQVJNQ0xDRF9TSEFSUF9MUTA1N1EzREMwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BUk1DTENEX1NIQVJQX0xRNjREMzQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FSTUNMQ0RfU0hBUlBfTFExMEQzNjggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVJNQ0xDRF9TSEFSUF9MUTEyMVMxREc0MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUgaXMgbm90IHNldAotCi0jCi0jIExvZ28gY29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCiBDT05GSUdfU09VTkQ9eQotCi0jCi0jIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQotIwogQ09ORklHX1NORD15Ci1DT05GSUdfU05EX1RJTUVSPXkKLUNPTkZJR19TTkRfUENNPXkKLSMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAotQ09ORklHX1NORF9PU1NFTVVMPXkKIENPTkZJR19TTkRfTUlYRVJfT1NTPXkKIENPTkZJR19TTkRfUENNX09TUz15Ci0jIENPTkZJR19TTkRfUlRDVElNRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgR2VuZXJpYyBkZXZpY2VzCi0jCi0jIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAotQ09ORklHX1NORF9BQzk3X0NPREVDPXkKLQotIwotIyBBTFNBIEFSTSBkZXZpY2VzCi0jCi1DT05GSUdfU05EX0xIN0E0MFhfQUM5Nz15Ci0KLSMKLSMgT3BlbiBTb3VuZCBTeXN0ZW0KLSMKLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIwotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBYRlMgc3VwcG9ydAotIwotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15Ci0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19TWVNGUz15Ci0jIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLSMgQ09ORklHX0pGRlMyX0ZTX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfTk9SX0VDQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19QUkVFTVBUPXkKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKLSMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9scGQ3YTQwNF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2xwZDdhNDA0X2RlZmNvbmZpZwppbmRleCAxNDJjY2NkLi4xZWZjY2U5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2xwZDdhNDA0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2xwZDdhNDA0X2RlZmNvbmZpZwpAQCAtMSwxMTI3ICsxLDgxIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYKLSMgVGh1IE1hciAyMyAxNzo1MDozMSAyMDA2Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15Ci0jIENPTkZJR19JS0NPTkZJR19QUk9DIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfVUlEMTY9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE2CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9JTlRFUk1PRFVMRT15Ci0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKLSMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGxheWVyCi0jCi0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDc5NTJYIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0xIN0E0MFg9eQotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgTEg3QTQwWCBJbXBsZW1lbnRhdGlvbnMKLSMKLSMgQ09ORklHX01BQ0hfS0VWN0E0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9MUEQ3QTQwMCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9MUEQ3QTQwND15Ci1DT05GSUdfQVJDSF9MSDdBNDA0PXkKLSMgQ09ORklHX0xIN0E0MFhfQ09OVElHTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xIN0E0MFhfT05FX0JBTktfUEVSX05PREUgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX0FSTTkyMlQ9eQotQ09ORklHX0NQVV8zMnY0PXkKLUNPTkZJR19DUFVfQUJSVF9FVjRUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVjRXVD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotQ09ORklHX0FSTV9BTUJBPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwogQ09ORklHX1BSRUVNUFQ9eQotIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRT15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci0jIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTD15Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19ESVNDT05USUdNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19ORUVEX01VTFRJUExFX05PREVTPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSIiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQogQ09ORklHX0lQX1BOUF9SQVJQPXkKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCi0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVA9eQotQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19NVERfUEhZU01BUF9MRU49MHgwNDAwMDAwMAotQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD00Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCiBDT05GSUdfSURFPXkKLUNPTkZJR19CTEtfREVWX0lERT15Ci0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCi0jCi0jIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQotIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX1BPTEw9eQotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLUNPTkZJR19JREVfR0VORVJJQz15Ci1DT05GSUdfSURFX0FSTT15Ci0jIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKICMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKLSMgQ09ORklHX0JMS19ERVZfU0QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCi0jCi0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCi0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQogQ09ORklHX1NNQzkxWD15Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAotQ09ORklHX1RPVUNIU0NSRUVOX0FEQ19MSDc9eQotQ09ORklHX0hBU19UT1VDSFNDUkVFTl9BRENfTEg3PXkKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9BTUJBX1BMMDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9BTUJBX1BMMDExIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX0xIN0E0MFg9eQogQ09ORklHX1NFUklBTF9MSDdBNDBYX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCi0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDPXkKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cwotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIwotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwogQ09ORklHX0ZCPXkKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9BUk1DTENEPXkKLUNPTkZJR19GQl9BUk1DTENEX1NIQVJQX0xRMDM1UTdEQjAyX0hSVEZUPXkKLSMgQ09ORklHX0ZCX0FSTUNMQ0RfU0hBUlBfTFEwNTdRM0RDMDIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVJNQ0xDRF9TSEFSUF9MUTY0RDM0MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BUk1DTENEX1NIQVJQX0xRMTBEMzY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FSTUNMQ0RfU0hBUlBfTFExMjFTMURHNDEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVJNQ0xDRF9BVU9fQTA3MFZXMDFfV0lERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BUk1DTENEX0hJVEFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKLQotIwotIyBMb2dvIGNvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX0xPR08gaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwogQ09ORklHX1NPVU5EPXkKLQotIwotIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKLSMKIENPTkZJR19TTkQ9eQotQ09ORklHX1NORF9USU1FUj15Ci1DT05GSUdfU05EX1BDTT15Ci0jIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfT1NTRU1VTD15CiBDT05GSUdfU05EX01JWEVSX09TUz15CiBDT05GSUdfU05EX1BDTV9PU1M9eQotIyBDT05GSUdfU05EX1JUQ1RJTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15Ci0jIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBHZW5lcmljIGRldmljZXMKLSMKLUNPTkZJR19TTkRfQUM5N19DT0RFQz15Ci1DT05GSUdfU05EX0FDOTdfQlVTPXkKLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQUxTQSBBUk0gZGV2aWNlcwotIwotIyBDT05GSUdfU05EX0FSTUFBQ0kgaXMgbm90IHNldAotQ09ORklHX1NORF9MSDdBNDBYX0FDOTc9eQotCi0jCi0jIFVTQiBkZXZpY2VzCi0jCi0jIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKLQotIwotIyBPcGVuIFNvdW5kIFN5c3RlbQotIwotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQogQ09ORklHX1VTQl9PSENJX0hDRD15Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfT0JTT0xFVEVfT1NTX1VTQl9EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKIENPTkZJR19VU0JfU1RPUkFHRT15CiBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUc9eQogQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUI9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci1DT05GSUdfVVNCX0hJRElOUFVUPXkKLSMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FJUFRFSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0FDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JVE1UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUdBTEFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKLQotIwotIyBWaWRlbzRMaW51eCBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE11bHRpbWVkaWEgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVRLSVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVRTRVJWTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwogQ09ORklHX1VTQl9HQURHRVQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15Ci0jIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9MSDc9eQotQ09ORklHX1VTQl9MSDc9eQotIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfWkVSTz15Ci0jIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15Ci0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci0jIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNgotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfUFJFRU1QVD15CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKIENPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKLSMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9sdWJib2NrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHViYm9ja19kZWZjb25maWcKaW5kZXggNzVjNjI5My4uYzRiYTI3NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9sdWJib2NrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2x1YmJvY2tfZGVmY29uZmlnCkBAIC0xLDgwMCArMSw1NiBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazIKLSMgTW9uIE1hciAyOCAwMDoxODoxMyAyMDA1Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19JT01BUD15Ci0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUFhBPXkKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0KLSMKLSMgSW50ZWwgUFhBMnh4IEltcGxlbWVudGF0aW9ucwotIwogQ09ORklHX0FSQ0hfTFVCQk9DSz15Ci0jIENPTkZJR19NQUNIX01BSU5TVE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQV9JRFAgaXMgbm90IHNldAotIyBDT05GSUdfUFhBX1NIQVJQU0wgaXMgbm90IHNldAotQ09ORklHX1BYQTI1eD15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfWFNDQUxFPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9NSU5JQ0FDSEU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwogIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLUNPTkZJR19YU0NBTEVfUE1VPXkKLUNPTkZJR19TQTExMTE9eQotQ09ORklHX0RNQUJPVU5DRT15Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj05Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCiBDT05GSUdfUENDQVJEPXkKLSMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUENNQ0lBPXkKLQotIwotIyBQQy1jYXJkIGJyaWRnZXMKLSMKLSMgQ09ORklHX1RDSUMgaXMgbm90IHNldAogQ09ORklHX1BDTUNJQV9QWEEyWFg9eQotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiBDT05GSUdfTEVEUz15Ci1DT05GSUdfTEVEU19USU1FUj15CiBDT05GSUdfTEVEU19DUFU9eQotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9uZnMgaXA9Ym9vdHAgY29uc29sZT10dHlTMCwxMTUyMDAgbWVtPTY0TSIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKK0NPTkZJR19ORVQ9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKLUNPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKLUNPTkZJR19NVERfQ0ZJX05PU1dBUD15Ci0jIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9HRU9NRVRSWT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DRklfSTEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTFVCQk9DSz15Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NIQVJQX1NMIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCi0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCi0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBOZXR3b3JraW5nIHN1cHBvcnQKLSMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotIyBDT05GSUdfUEFDS0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQogQ09ORklHX1NNQzkxWD15Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ORVRfUENNQ0lBPXkKLSMgQ09ORklHX1BDTUNJQV8zQzU4OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfM0M1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX0ZNVkoxOFggaXMgbm90IHNldAogQ09ORklHX1BDTUNJQV9QQ05FVD15Ci0jIENPTkZJR19QQ01DSUFfTk1DTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9TTUM5MUM5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfWElSQzJQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfQVhORVQgaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCi0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRT15Ci1DT05GSUdfTU9VU0VfUFMyPXkKLSMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKICMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAogQ09ORklHX1NFUklPX1NBMTExMT15Ci1DT05GSUdfU0VSSU9fTElCUFMyPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfR0FNRVBPUlQ9eQotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKIENPTkZJR19TRVJJQUxfUFhBPXkKIENPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIwotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIwotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCiBDT05GSUdfVVNCX0dBREdFVD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9QWEEyWFg9eQotQ09ORklHX1VTQl9QWEEyWFg9eQotQ09ORklHX1VTQl9QWEEyWFhfU01BTEw9eQotIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dfU0VSSUFMPXkKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCi0jIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIworQ09ORklHX1VTQl9HX1NFUklBTD1tCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfU1lTRlM9eQotIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLSMgQ09ORklHX0pGRlMyX0ZTX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfTk9SX0VDQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKIENPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CitDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKIENPTkZJR19ERUJVR19VU0VSPXkKIENPTkZJR19ERUJVR19FUlJPUlM9eQogQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCi0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbHVzbDcyMDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9sdXNsNzIwMF9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxYTFmYjAuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9sdXNsNzIwMF9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw0NTMgKzAsMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazIKLSMgTW9uIE1hciAyOCAwMDoyNDozOCAyMDA1Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19JT01BUD15Ci1DT05GSUdfRklRPXkKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCi0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwotQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfTDcyMDA9eQotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9BUk03MjBUPXkKLUNPTkZJR19DUFVfMzJ2ND15Ci1DT05GSUdfQ1BVX0FCUlRfTFY0VD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y0PXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdUPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLSMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MDAwMTAwMDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4ZjAzZTAwMDAKLUNPTkZJR19aQk9PVF9ST009eQotQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5MCBjb25zb2xlPXR0eUxVMSwxMTUyMDAgcm9vdD0vZGV2L3JhbSBpbml0cmQ9MHhmMTAwMDAwMCwweDAwNWRhYzdiIG1lbT0zMk0iCi0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi0jIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotQ09ORklHX0JJTkZNVF9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIwotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29ya2luZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19ORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19TT1VORF9HQU1FUE9SVD15Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQ9eQotIyBDT05GSUdfQ09NUFVUT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPQ0tFVFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1lDTEFERVMgaXMgbm90IHNldAotIyBDT05GSUdfRElHSUVQQ0EgaXMgbm90IHNldAotIyBDT05GSUdfTU9YQV9JTlRFTExJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1hBX1NNQVJUSU8gaXMgbm90IHNldAotIyBDT05GSUdfSVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTkNMSU5LTVAgaXMgbm90IHNldAotIyBDT05GSUdfTl9IRExDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JJU0NPTTggaXMgbm90IHNldAotIyBDT05GSUdfU1BFQ0lBTElYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFMRFJWIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIwotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLUNPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBYRlMgc3VwcG9ydAotIwotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19TWVNGUz15Ci0jIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfREVCVUdfVVNFUj15Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCi0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL21hZ2ljaWFuX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbWFnaWNpYW5fZGVmY29uZmlnCmluZGV4IDhlOWE3MjMuLmFmODA1ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbWFnaWNpYW5fZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbWFnaWNpYW5fZGVmY29uZmlnCkBAIC0xLDQzMiArMSw1MiBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMwotIyBGcmkgSmFuIDMwIDEyOjQyOjAzIDIwMDkKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX0hBVkVfUFdNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19BUkNIX01URF9YSVA9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1VJRDE2IGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9DTEs9eQotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX05PT1A9eQotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKLUNPTkZJR19GUkVFWkVSPXkKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUFhBPXkKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAotCi0jCi0jIEludGVsIFBYQTJ4eC9QWEEzeHggSW1wbGVtZW50YXRpb25zCi0jCi0jIENPTkZJR19BUkNIX0dVTVNUSVggaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9JTlRFTE1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTVA5MDBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QWEFfU0hBUlBTTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZJUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBX0VTRVJJRVMgaXMgbm90IHNldAotIyBDT05GSUdfVFJJWkVQU19QWEEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9INTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0VNX1gyNzAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DT0xJQlJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfWllMT05JVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9MSVRUTEVUT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9UQVZPUkVWQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1NBQVIgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9BUk1DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ01fWDMwMCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9INDcwMD15CiBDT05GSUdfTUFDSF9NQUdJQ0lBTj15Ci0jIENPTkZJR19NQUNIX01JT0E3MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9QQ00wMjcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfUEFMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QWEFfRVpYIGlzIG5vdCBzZXQKLUNPTkZJR19QWEEyN3g9eQotQ09ORklHX1BYQV9TU1A9eQotQ09ORklHX1BYQV9QV009eQotQ09ORklHX1BYQV9IQVZFX0JPQVJEX0lSUVM9eQotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX1hTQ0FMRT15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQotQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLUNPTkZJR19JV01NWFQ9eQotQ09ORklHX1hTQ0FMRV9QTVU9eQotQ09ORklHX0NPTU1PTl9DTEtERVY9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAogQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0ia2VlcGluaXRyZCIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0tFWEVDPXkKLUNPTkZJR19BVEFHU19QUk9DPXkKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwogQ09ORklHX0NQVV9GUkVRPXkKLUNPTkZJR19DUFVfRlJFUV9UQUJMRT15Ci0jIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfU1RBVD15Ci0jIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFMgaXMgbm90IHNldAotQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFPXkKLSMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQotIyBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQ9eQotIyBDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkQ9eQotQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15Ci0jIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAogQ09ORklHX0lSREE9bQotCi0jCi0jIElyREEgcHJvdG9jb2xzCi0jCiBDT05GSUdfSVJMQU49bQotIyBDT05GSUdfSVJORVQgaXMgbm90IHNldAogQ09ORklHX0lSQ09NTT1tCiBDT05GSUdfSVJEQV9VTFRSQT15Ci0KLSMKLSMgSXJEQSBvcHRpb25zCi0jCiBDT05GSUdfSVJEQV9DQUNIRV9MQVNUX0xTQVA9eQogQ09ORklHX0lSREFfRkFTVF9SUj15CiBDT05GSUdfSVJEQV9ERUJVRz15Ci0KLSMKLSMgSW5mcmFyZWQtcG9ydCBkZXZpY2UgZHJpdmVycwotIwotCi0jCi0jIFNJUiBkZXZpY2UgZHJpdmVycwotIwogQ09ORklHX0lSVFRZX1NJUj1tCi0KLSMKLSMgRG9uZ2xlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RPTkdMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LSU5HU1VOX0RPTkdMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LU0RBWlpMRV9ET05HTEUgaXMgbm90IHNldAotIyBDT05GSUdfS1M5NTlfRE9OR0xFIGlzIG5vdCBzZXQKLQotIwotIyBGSVIgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJR01BVEVMX0ZJUiBpcyBub3Qgc2V0CiBDT05GSUdfUFhBX0ZJQ1A9bQotIyBDT05GSUdfTUNTX0ZJUiBpcyBub3Qgc2V0CiBDT05GSUdfQlQ9bQogQ09ORklHX0JUX0wyQ0FQPW0KIENPTkZJR19CVF9TQ089bQpAQCAtNDM2LDExMDEgKzU2LDEyNyBAQAogQ09ORklHX0JUX0JORVBfTUNfRklMVEVSPXkKIENPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUj15CiBDT05GSUdfQlRfSElEUD1tCi0KLSMKLSMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCi0jCiBDT05GSUdfQlRfSENJQlRVU0I9bQotIyBDT05GSUdfQlRfSENJQlRTRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSVVBUlQgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQkNNMjAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCUEExMFggaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQkZVU0IgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJVkhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15CiAjIENPTkZJR19GSVJNV0FSRV9JTl9LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci0jIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVA9eQotIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QWEEyWFggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TSEFSUF9TTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1FJTkZPX1BST0JFIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAogQ09ORklHX1BQUD1tCi0jIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAogQ09ORklHX1BQUF9BU1lOQz1tCi0jIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAogQ09ORklHX1BQUF9ERUZMQVRFPW0KIENPTkZJR19QUFBfQlNEQ09NUD1tCiBDT05GSUdfUFBQX01QUEU9bQotIyBDT05GSUdfUFBQT0UgaXMgbm90IHNldAotIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1BYQTI3eCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfR1BJTz15CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTUlTQz15Ci0jIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0NNMTA5IGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9VSU5QVVQ9bQotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX1BYQT15Ci0jIENPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQogQ09ORklHX0kyQ19DSEFSREVWPW0KLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX1BYQT15Ci0jIENPTkZJR19JMkNfUFhBX1NMQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotQ09ORklHX1cxPXkKLQotIwotIyAxLXdpcmUgQnVzIE1hc3RlcnMKLSMKLSMgQ09ORklHX1cxX01BU1RFUl9EUzI0OTAgaXMgbm90IHNldAotIyBDT05GSUdfVzFfTUFTVEVSX0RTMjQ4MiBpcyBub3Qgc2V0CiBDT05GSUdfVzFfTUFTVEVSX0RTMVdNPXkKLSMgQ09ORklHX1cxX01BU1RFUl9HUElPIGlzIG5vdCBzZXQKLQotIwotIyAxLXdpcmUgU2xhdmVzCi0jCi0jIENPTkZJR19XMV9TTEFWRV9USEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMV9TTEFWRV9TTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxX1NMQVZFX0RTMjQzMyBpcyBub3Qgc2V0Ci1DT05GSUdfVzFfU0xBVkVfRFMyNzYwPXkKLSMgQ09ORklHX1cxX1NMQVZFX0JRMjcwMDAgaXMgbm90IHNldAogQ09ORklHX1BPV0VSX1NVUFBMWT15Ci0jIENPTkZJR19QT1dFUl9TVVBQTFlfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BEQV9QT1dFUj15CiBDT05GSUdfQkFUVEVSWV9EUzI3NjA9eQotIyBDT05GSUdfQkFUVEVSWV9CUTI3eDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKIENPTkZJR19NRkRfQVNJQzM9eQogQ09ORklHX0hUQ19FR1BJTz15CiBDT05GSUdfSFRDX1BBU0lDMz15Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19SRUdVTEFUT1I9eQorQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyPXkKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9QWEE9eQogQ09ORklHX0ZCX1BYQV9PVkVSTEFZPXkKLSMgQ09ORklHX0ZCX1BYQV9TTUFSVFBBTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01CWCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfVzEwMD15Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQotIyBDT05GSUdfTENEX0lMSTkzMjAgaXMgbm90IHNldAotIyBDT05GSUdfTENEX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKICMgQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfUFdNPXkKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfRElTUExBWV9TVVBQT1JUPXkKLQotIwotIyBEaXNwbGF5IGhhcmR3YXJlIGRyaXZlcnMKLSMKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT049eQogQ09ORklHX0ZPTlRTPXkKLSMgQ09ORklHX0ZPTlRfOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfOHgxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKIENPTkZJR19GT05UX01JTklfNHg2PXkKLSMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAotIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkQ9eQotQ09ORklHX1NPVU5EX09TU19DT1JFPXkKIENPTkZJR19TTkQ9bQotQ09ORklHX1NORF9USU1FUj1tCi1DT05GSUdfU05EX1BDTT1tCi0jIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfT1NTRU1VTD15CiBDT05GSUdfU05EX01JWEVSX09TUz1tCiBDT05GSUdfU05EX1BDTV9PU1M9bQotQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0RSSVZFUlM9eQotIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BUk0gaXMgbm90IHNldAotQ09ORklHX1NORF9QWEEyWFhfTElCPW0KICMgQ09ORklHX1NORF9VU0IgaXMgbm90IHNldAogQ09ORklHX1NORF9TT0M9bQogQ09ORklHX1NORF9QWEEyWFhfU09DPW0KLUNPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPW0KLSMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEPW0KLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCi0jIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049bQotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7Ci0jCi0KLSMKLSMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9NTAwCi1DT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1g9eQotQ09ORklHX1VTQl9QWEEyN1g9eQotIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VUSD1tCiAjIENPTkZJR19VU0JfRVRIX1JORElTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VURlM9bQogQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR19TRVJJQUw9bQotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAogQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFPW0KLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLUNPTkZJR19VU0JfT1RHX1VUSUxTPXkKIENPTkZJR19VU0JfR1BJT19WQlVTPXkKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQogQ09ORklHX1NESU9fVUFSVD1tCi0jIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKIENPTkZJR19NTUNfUFhBPXkKLSMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CiBDT05GSUdfTEVEU19DTEFTUz15Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLSMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19HUElPPXkKLSMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCiBDT05GSUdfTEVEU19UUklHR0VSUz15Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVIgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVCBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVD15Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgogQ09ORklHX1JUQ19ERUJVRz15Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwogQ09ORklHX1JUQ19EUlZfU0ExMTAwPXkKLSMgQ09ORklHX1JUQ19EUlZfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotQ09ORklHX1JFR1VMQVRPUj15Ci0jIENPTkZJR19SRUdVTEFUT1JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAotQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyPXkKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz1tCiBDT05GSUdfTVNET1NfRlM9bQogQ09ORklHX1ZGQVRfRlM9bQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQotQ09ORklHX0pGRlMyX1pMSUI9eQogQ09ORklHX0pGRlMyX0xaTz15Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ01PREVfTk9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQotIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8gaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9InV0ZjgiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAogQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX1VURjg9eQotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwogQ09ORklHX1BSSU5US19USU1FPXkKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCiAjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19USU1FUl9TVEFUUz15Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQUxHQVBJPW0KLUNPTkZJR19DUllQVE9fQUxHQVBJMj1tCi1DT05GSUdfQ1JZUFRPX0FFQUQyPW0KLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj1tCi1DT05GSUdfQ1JZUFRPX0hBU0g9bQotQ09ORklHX0NSWVBUT19IQVNIMj1tCi1DT05GSUdfQ1JZUFRPX1JORzI9bQotQ09ORklHX0NSWVBUT19NQU5BR0VSPW0KLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9bQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fRUNCPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19TSEExPW0KLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQVJDND1tCi0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfTFpPX0NPTVBSRVNTPXkKLUNPTkZJR19MWk9fREVDT01QUkVTUz15Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL21haW5zdG9uZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL21haW5zdG9uZV9kZWZjb25maWcKaW5kZXggMWNkZGI2MS4uMDRlZmExYjNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL21haW5zdG9uZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9tYWluc3RvbmVfZGVmY29uZmlnCkBAIC0xLDc5NCArMSw1NSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazIKLSMgU2F0IE1hciAyNiAyMDowMDo0NSAyMDA1Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19JT01BUD15Ci0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUFhBPXkKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0KLSMKLSMgSW50ZWwgUFhBMnh4IEltcGxlbWVudGF0aW9ucwotIwotIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX01BSU5TVE9ORT15Ci0jIENPTkZJR19BUkNIX1BYQV9JRFAgaXMgbm90IHNldAotIyBDT05GSUdfUFhBX1NIQVJQU0wgaXMgbm90IHNldAotQ09ORklHX1BYQTI3eD15Ci1DT05GSUdfSVdNTVhUPXkKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9YU0NBTEU9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX01JTklDQUNIRT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCiAjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotQ09ORklHX1hTQ0FMRV9QTVU9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogQ09ORklHX0xFRFM9eQotQ09ORklHX0xFRFNfVElNRVI9eQogQ09ORklHX0xFRFNfQ1BVPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJyb290PS9kZXYvbmZzIGlwPWJvb3RwIGNvbnNvbGU9dHR5UzAsMTE1MjAwIG1lbT02NE0iCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCitDT05GSUdfTkVUPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15Ci1DT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCi0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15CiBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15Ci1DT05GSUdfTVREX0NGSV9OT1NXQVA9eQotIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfR0VPTUVUUlk9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ0ZJX0kxIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci0jIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NIQVJQX1NMIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCiBDT05GSUdfSURFPXkKLUNPTkZJR19CTEtfREVWX0lERT15Ci0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCi0jCi0jIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQotIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLQotIwotIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCi0jCi0jIENPTkZJR19JREVfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCi0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBOZXR3b3JraW5nIHN1cHBvcnQKLSMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotIyBDT05GSUdfUEFDS0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfVENQRElBRz15Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIwogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKIENPTkZJR19TTUM5MVg9eQotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCi0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKICMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX1BYQT15CiBDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwogQ09ORklHX0ZCPXkKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci1DT05GSUdfRkJfU09GVF9DVVJTT1I9eQotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CiBDT05GSUdfRkJfUFhBPXkKLSMgQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQotCi0jCi0jIExvZ28gY29uZmlndXJhdGlvbgotIwogQ09ORklHX0xPR089eQotQ09ORklHX0xPR09fTElOVVhfTU9OTz15Ci1DT05GSUdfTE9HT19MSU5VWF9WR0ExNj15Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIwotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCi0jIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFhGUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi0jIENPTkZJR19KRkZTMl9GU19OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX05PUl9FQ0MgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCiBDT05GSUdfTkZTX0ZTPXkKLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL21pbmkyNDQwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbWluaTI0NDBfZGVmY29uZmlnCmluZGV4IGZmNDRiZDEuLjI0NzJhOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbWluaTI0NDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbWluaTI0NDBfZGVmY29uZmlnCkBAIC0xLDM4MyArMSwzOCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjNgotIyBXZWQgTWF5IDIwIDEyOjI5OjUxIDIwMDkKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX0hBVkVfUFdNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLSMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotQ09ORklHX05PX0lPUE9SVD15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15Ci1DT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE3Ci0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAogQ09ORklHX1JFTEFZPXkKLUNPTkZJR19OQU1FU1BBQ0VTPXkKIENPTkZJR19VVFNfTlM9eQogQ09ORklHX0lQQ19OUz15Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci1DT05GSUdfUkRfQlpJUDI9eQotQ09ORklHX1JEX0xaTUE9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19TVFJJUF9BU01fU1lNUz15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRD15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5URUdSSVRZPXkKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfRlJFRVpFUj15Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1MzQzI0MTA9eQotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLUNPTkZJR19QTEFUX1MzQzI0WFg9eQotQ09ORklHX1MzQzI0MTBfQ0xPQ0s9eQotQ09ORklHX0NQVV9TM0MyNDRYPXkKLUNPTkZJR19TM0MyNFhYX1BXTT15Ci1DT05GSUdfUzNDMjRYWF9HUElPX0VYVFJBPTAKLUNPTkZJR19TM0MyNDEwX0RNQT15Ci0jIENPTkZJR19TM0MyNDEwX0RNQV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUzNDX0FEQz15Ci1DT05GSUdfUExBVF9TM0M9eQotQ09ORklHX0NQVV9MTFNFUklBTF9TM0MyNDQwX09OTFk9eQotQ09ORklHX0NQVV9MTFNFUklBTF9TM0MyNDQwPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLSMgQ09ORklHX1MzQ19CT09UX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MzQ19CT09UX0VSUk9SX1JFU0VUIGlzIG5vdCBzZXQKLUNPTkZJR19TM0NfQk9PVF9VQVJUX0ZPUkNFX0ZJRk89eQotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX1NBTVNVTkdfUE1fREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNU1VOR19QTV9DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfUzNDX0xPV0xFVkVMX1VBUlRfUE9SVD0wCi1DT05GSUdfUzNDX0dQSU9fU1BBQ0U9MAotCi0jCi0jIFMzQzI0MDAgTWFjaGluZXMKLSMKLUNPTkZJR19TM0MyNDEwX1BNPXkKLUNPTkZJR19TM0MyNDEwX0dQSU89eQotCi0jCi0jIFMzQzI0MTAgTWFjaGluZXMKLSMKLSMgQ09ORklHX0FSQ0hfU01ESzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IMTk0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX04zMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0JBU1QgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQU1MX001OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVENUX0hBTU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1ZSMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1FUMjQxMCBpcyBub3Qgc2V0Ci0KLSMKLSMgUzNDMjQxMiBNYWNoaW5lcwotIwotIyBDT05GSUdfTUFDSF9KSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfU01ESzI0MTMgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9TTURLMjQxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1ZTVE1TIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfUzNDMjQ0MD15Ci1DT05GSUdfUzNDMjQ0MF9ETUE9eQotCi0jCi0jIFMzQzI0NDAgTWFjaGluZXMKLSMKLSMgQ09ORklHX01BQ0hfQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT1NJUklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfUlgzNzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQ0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX05FWENPREVSXzI0NDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9BVDI0NDBFVkIgaXMgbm90IHNldAorQ09ORklHX1MzQzI0WFhfUFdNPXkKIENPTkZJR19NQUNIX01JTkkyNDQwPXkKLQotIwotIyBTM0MyNDQyIE1hY2hpbmVzCi0jCi0KLSMKLSMgUzNDMjQ0MyBNYWNoaW5lcwotIwotIyBDT05GSUdfTUFDSF9TTURLMjQ0MyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTIwVD15Ci1DT05GSUdfQ1BVXzMydjRUPXkKLUNPTkZJR19DUFVfQUJSVF9FVjRUPXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKLUNPTkZJR19DUFVfQ0FDSEVfVjRXVD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjAwCiBDT05GSUdfQUVBQkk9eQogIyBDT05GSUdfT0FCSV9DT01QQVQgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQotIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MAotQ09ORklHX0NNRExJTkU9IiIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0tFWEVDPXkKLUNPTkZJR19BVEFHU19QUk9DPXkKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwogQ09ORklHX0NQVV9JRExFPXkKLUNPTkZJR19DUFVfSURMRV9HT1ZfTEFEREVSPXkKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FPVVQ9eQogQ09ORklHX0JJTkZNVF9BT1VUPW0KIENPTkZJR19CSU5GTVRfTUlTQz1tCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCiBDT05GSUdfUE09eQotIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BNX1NMRUVQPXkKLUNPTkZJR19TVVNQRU5EPXkKLUNPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQogQ09ORklHX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX05FVF9LRVk9bQotIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15Ci1DT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQogQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQpAQCAtMzg1LDgyICs0MCwyMSBAQAogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQogQ09ORklHX0lQX1BOUF9SQVJQPXkKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTVJPVVRFPXkKIENPTkZJR19JUF9QSU1TTV9WMT15CiBDT05GSUdfSVBfUElNU01fVjI9eQotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPW0KLUNPTkZJR19JTkVUX1RDUF9ESUFHPW0KLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQotQ09ORklHX0JSSURHRV9ORVRGSUxURVI9eQotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTkZfREVGUkFHX0lQVjQgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotQ09ORklHX1NUUD1tCi1DT05GSUdfR0FSUD1tCiBDT05GSUdfQlJJREdFPW0KLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogQ09ORklHX1ZMQU5fODAyMVE9bQogQ09ORklHX1ZMQU5fODAyMVFfR1ZSUD15Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotQ09ORklHX0xMQz1tCi0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCiBDT05GSUdfTkVUX1BLVEdFTj1tCi0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiBDT05GSUdfQlQ9bQogQ09ORklHX0JUX0wyQ0FQPW0KIENPTkZJR19CVF9TQ089bQpAQCAtNDcwLDEwICs2NCw2IEBACiBDT05GSUdfQlRfQk5FUF9NQ19GSUxURVI9eQogQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSPXkKIENPTkZJR19CVF9ISURQPW0KLQotIwotIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKLSMKIENPTkZJR19CVF9IQ0lCVFVTQj1tCiBDT05GSUdfQlRfSENJQlRTRElPPW0KIENPTkZJR19CVF9IQ0lVQVJUPW0KQEAgLTQ4NCwyOTggKzc0LDYwIEBACiBDT05GSUdfQlRfSENJQlBBMTBYPW0KIENPTkZJR19CVF9IQ0lCRlVTQj1tCiBDT05GSUdfQlRfSENJVkhDST1tCi0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfRklCX1JVTEVTPXkKLUNPTkZJR19XSVJFTEVTUz15CiBDT05GSUdfQ0ZHODAyMTE9bQogQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRz15Ci1DT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQotQ09ORklHX1dJUkVMRVNTX0VYVD15Ci1DT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKLUNPTkZJR19MSUI4MDIxMT1tCi1DT05GSUdfTElCODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19MSUI4MDIxMV9DUllQVF9DQ01QPW0KLUNPTkZJR19MSUI4MDIxMV9DUllQVF9US0lQPW0KLSMgQ09ORklHX0xJQjgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NQUM4MDIxMT1tCi0KLSMKLSMgUmF0ZSBjb250cm9sIGFsZ29yaXRobSBzZWxlY3Rpb24KLSMKLUNPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTD15Ci0jIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTD15Ci1DT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVD0ibWluc3RyZWwiCiBDT05GSUdfTUFDODAyMTFfTUVTSD15CiBDT05GSUdfTUFDODAyMTFfTEVEUz15Ci0jIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExX0RFQlVHX01FTlUgaXMgbm90IHNldAotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15CiAjIENPTkZJR19GSVJNV0FSRV9JTl9LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIENPTkZJR19DT05ORUNUT1I9bQogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKIENPTkZJR19GVEw9eQogQ09ORklHX05GVEw9eQogQ09ORklHX05GVExfUlc9eQogQ09ORklHX0lORlRMPXkKIENPTkZJR19SRkRfRlRMPXkKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9KRURFQ1BST0JFPXkKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQogQ09ORklHX01URF9DRklfU1RBQT15Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKIENPTkZJR19NVERfUkFNPXkKIENPTkZJR19NVERfUk9NPXkKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkQ9eQogQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURT15Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfR1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfSURTPXkKIENPTkZJR19NVERfTkFORF9TM0MyNDEwPXkKLSMgQ09ORklHX01URF9OQU5EX1MzQzI0MTBfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUzNDMjQxMF9IV0VDQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9TM0MyNDEwX0NMS1NUT1AgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORF9QTEFURk9STT15Ci0jIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwogQ09ORklHX01URF9MUEREUj15Ci1DT05GSUdfTVREX1FJTkZPX1BST0JFPXkKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD1tCi0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTkJEPW0KLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NjU1MzYKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKIENPTkZJR19DRFJPTV9QS1RDRFZEPW0KLUNPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotQ09ORklHX0VFUFJPTV9BVDI0PXkKLSMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfVFNMMjU1MD1tCiBDT05GSUdfU0NTST1tCi1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPW0KLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9bQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogQ09ORklHX1RVTj1tCi0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogQ09ORklHX0RNOTAwMD15Ci1DT05GSUdfRE05MDAwX0RFQlVHTEVWRUw9NAotIyBDT05GSUdfRE05MDAwX0ZPUkNFX1NJTVBMRV9QSFlfUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotQ09ORklHX1dMQU5fODAyMTE9eQotQ09ORklHX0xJQkVSVEFTPW0KLSMgQ09ORklHX0xJQkVSVEFTX1VTQiBpcyBub3Qgc2V0Ci1DT05GSUdfTElCRVJUQVNfU0RJTz1tCi0jIENPTkZJR19MSUJFUlRBU19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfTElCRVJUQVNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTElCRVJUQVNfVEhJTkZJUk0gaXMgbm90IHNldAotIyBDT05GSUdfQVQ3NkM1MFhfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9STkRJU19XTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUTDgxODcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTFfSFdTSU0gaXMgbm90IHNldAotIyBDT05GSUdfUDU0X0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUjkxNzBfVVNCIGlzIG5vdCBzZXQKIENPTkZJR19IT1NUQVA9bQogQ09ORklHX0hPU1RBUF9GSVJNV0FSRT15CiBDT05GSUdfSE9TVEFQX0ZJUk1XQVJFX05WUkFNPXkKLSMgQ09ORklHX0I0MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDNMRUdBQ1kgaXMgbm90IHNldAorQ09ORklHX0xJQkVSVEFTPW0KK0NPTkZJR19MSUJFUlRBU19TRElPPW0KIENPTkZJR19aRDEyMTFSVz1tCiBDT05GSUdfWkQxMjExUldfREVCVUc9eQotIyBDT05GSUdfUlQyWDAwIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAogQ09ORklHX1BQUD1tCiBDT05GSUdfUFBQX01VTFRJTElOSz15CiBDT05GSUdfUFBQX0ZJTFRFUj15CkBAIC03ODQsMTA2NSArMTM2LDE1OSBAQAogQ09ORklHX1BQUF9ERUZMQVRFPW0KIENPTkZJR19QUFBfQlNEQ09NUD1tCiBDT05GSUdfUFBQX01QUEU9bQotIyBDT05GSUdfUFBQT0UgaXMgbm90IHNldAotIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTPXkKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQogQ09ORklHX0lOUFVUX0VWQlVHPW0KLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0dQSU89eQotQ09ORklHX0lOUFVUX01PVVNFPXkKLUNPTkZJR19NT1VTRV9QUzI9eQotQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKLUNPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKLUNPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKLUNPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15Ci0jIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotQ09ORklHX1NFUklPX0xJQlBTMj15CiBDT05GSUdfU0VSSU9fUkFXPXkKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15CiBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX1NBTVNVTkc9eQotQ09ORklHX1NFUklBTF9TQU1TVU5HX1VBUlRTPTMKIENPTkZJR19TRVJJQUxfU0FNU1VOR19DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfUzNDMjQ0MD15Ci0jIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTEyOAogQ09ORklHX0lQTUlfSEFORExFUj1tCi0jIENPTkZJR19JUE1JX1BBTklDX0VWRU5UIGlzIG5vdCBzZXQKIENPTkZJR19JUE1JX0RFVklDRV9JTlRFUkZBQ0U9bQogQ09ORklHX0lQTUlfU0k9bQogQ09ORklHX0lQTUlfV0FUQ0hET0c9bQogQ09ORklHX0lQTUlfUE9XRVJPRkY9bQogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci1DT05GSUdfSTJDX0FMR09CSVQ9eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX1MzQzI0MTA9eQogQ09ORklHX0kyQ19TSU1URUM9eQotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19UU0wyNTUwPW0KLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogQ09ORklHX1NQST15Ci0jIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NQSV9NQVNURVI9eQotCi0jCi0jIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCi0jCi1DT05GSUdfU1BJX0JJVEJBTkc9eQotIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAogQ09ORklHX1NQSV9TM0MyNFhYPXkKLSMgQ09ORklHX1NQSV9TM0MyNFhYX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCiBDT05GSUdfU1BJX1NQSURFVj15Ci0jIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR1BJT19TWVNGUz15Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lCTUFFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lCTVBFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0CiBDT05GSUdfU0VOU09SU19MTTc1PXkKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0hUMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xJUzNfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogQ09ORklHX1RIRVJNQUw9bQotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TM0MyNDEwX1dBVENIRE9HPXkKLQotIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi1DT05GSUdfVklERU9fREVWPW0KLUNPTkZJR19WSURFT19WNEwyX0NPTU1PTj1tCi1DT05GSUdfVklERU9fQUxMT1dfVjRMMT15Ci1DT05GSUdfVklERU9fVjRMMV9DT01QQVQ9eQotQ09ORklHX0RWQl9DT1JFPW0KLUNPTkZJR19WSURFT19NRURJQT1tCi0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRURJQV9BVFRBQ0ggaXMgbm90IHNldAotQ09ORklHX01FRElBX1RVTkVSPW0KLSMgQ09ORklHX01FRElBX1RVTkVSX0NVU1RPTUlTRSBpcyBub3Qgc2V0Ci1DT05GSUdfTUVESUFfVFVORVJfU0lNUExFPW0KLUNPTkZJR19NRURJQV9UVU5FUl9UREE4MjkwPW0KLUNPTkZJR19NRURJQV9UVU5FUl9UREE5ODg3PW0KLUNPTkZJR19NRURJQV9UVU5FUl9URUE1NzYxPW0KLUNPTkZJR19NRURJQV9UVU5FUl9URUE1NzY3PW0KLUNPTkZJR19NRURJQV9UVU5FUl9NVDIwWFg9bQotQ09ORklHX01FRElBX1RVTkVSX1hDMjAyOD1tCi1DT05GSUdfTUVESUFfVFVORVJfWEM1MDAwPW0KLUNPTkZJR19NRURJQV9UVU5FUl9NQzQ0UzgwMz1tCi1DT05GSUdfVklERU9fVjRMMj1tCi1DT05GSUdfVklERU9fVjRMMT1tCi1DT05GSUdfVklERU9CVUZfR0VOPW0KLUNPTkZJR19WSURFT19DQVBUVVJFX0RSSVZFUlM9eQotIyBDT05GSUdfVklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fSEVMUEVSX0NISVBTX0FVVE89eQotIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19DUElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0NQSUEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fQVUwODI4IGlzIG5vdCBzZXQKLUNPTkZJR19TT0NfQ0FNRVJBPW0KLSMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5TTAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0NfQ0FNRVJBX01UOU0xMTEgaXMgbm90IHNldAotIyBDT05GSUdfU09DX0NBTUVSQV9NVDlUMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5VjAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0NfQ0FNRVJBX1RXOTkxMCBpcyBub3Qgc2V0Ci1DT05GSUdfU09DX0NBTUVSQV9QTEFURk9STT1tCi0jIENPTkZJR19TT0NfQ0FNRVJBX09WNzcyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19TSF9NT0JJTEVfQ0VVIGlzIG5vdCBzZXQKLUNPTkZJR19WNExfVVNCX0RSSVZFUlM9eQotIyBDT05GSUdfVVNCX1ZJREVPX0NMQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfVklERU9fQ0xBU1NfSU5QVVRfRVZERVY9eQotQ09ORklHX1VTQl9HU1BDQT1tCi0jIENPTkZJR19VU0JfTTU2MDIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUVjA2WFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX0NPTkVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9FVE9NUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfRklORVBJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfTUFSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfTVI5NzMxMEEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX09WNTE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9PVjUzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfUEFDMjA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9QQUM3MzExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TT05JWEIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NPTklYSiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTU2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1E5MDUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NROTA1QyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1RLMDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TVU5QTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9UNjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9UVjg1MzIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1ZDMDMyWCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dTUENBX1pDM1hYPW0KLSMgQ09ORklHX1ZJREVPX1BWUlVTQjIgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fSERQVlIgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fRU0yOFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0NYMjMxWFggaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fVVNCVklTSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9WSUNBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSUJNQ0FNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LT05JQ0FXQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUVVJQ0tDQU1fTUVTU0VOR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FVDYxWDI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVkNBTUNISVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09WNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRTQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU045QzEwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RWNjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9aQzAzMDEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BXQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFdDX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9aUjM2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVEtXRUJDQU0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1MyMjU1IGlzIG5vdCBzZXQKLUNPTkZJR19SQURJT19BREFQVEVSUz15Ci0jIENPTkZJR19VU0JfRFNCUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0k0NzBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NUjgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQURJT19URUE1NzY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci1DT05GSUdfRFZCX0NBUFRVUkVfRFJJVkVSUz15Ci0jIENPTkZJR19UVFBDSV9FRVBST00gaXMgbm90IHNldAotCi0jCi0jIFN1cHBvcnRlZCBVU0IgQWRhcHRlcnMKLSMKLSMgQ09ORklHX0RWQl9VU0IgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1NJQU5PX1NNUzFYWFggaXMgbm90IHNldAotCi0jCi0jIFN1cHBvcnRlZCBGbGV4Q29wSUkgKEIyQzIpIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19EVkJfQjJDMl9GTEVYQ09QIGlzIG5vdCBzZXQKLQotIwotIyBTdXBwb3J0ZWQgRFZCIEZyb250ZW5kcwotIwotIyBDT05GSUdfRFZCX0ZFX0NVU1RPTUlTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CiBDT05GSUdfRkI9eQogQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKIENPTkZJR19GQl9USUxFQkxJVFRJTkc9eQotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9VVkVTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfUzNDMjQxMD15Ci0jIENPTkZJR19GQl9TM0MyNDEwX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKLSMgQ09ORklHX0xDRF9MVFYzNTBRViBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQ0RfVERPMjRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xDRF9WR0cyNDMyQTQgaXMgbm90IHNldAogQ09ORklHX0xDRF9QTEFURk9STT15CiBDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15CiAjIENPTkZJR19CQUNLTElHSFRfR0VORVJJQyBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX1BXTT15Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX0RJU1BMQVlfU1VQUE9SVD15Ci0KLSMKLSMgRGlzcGxheSBoYXJkd2FyZSBkcml2ZXJzCi0jCi0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTj15CiBDT05GSUdfRk9OVFM9eQogQ09ORklHX0ZPTlRfOHg4PXkKLSMgQ09ORklHX0ZPTlRfOHgxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKIENPTkZJR19GT05UX01JTklfNHg2PXkKLSMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAogQ09ORklHX0xPR089eQogIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CiBDT05GSUdfU09VTkQ9eQotQ09ORklHX1NPVU5EX09TU19DT1JFPXkKIENPTkZJR19TTkQ9eQotQ09ORklHX1NORF9USU1FUj15Ci1DT05GSUdfU05EX1BDTT15Ci1DT05GSUdfU05EX0hXREVQPW0KLUNPTkZJR19TTkRfUkFXTUlEST1tCi1DT05GSUdfU05EX0pBQ0s9eQogQ09ORklHX1NORF9TRVFVRU5DRVI9bQogQ09ORklHX1NORF9TRVFfRFVNTVk9bQotQ09ORklHX1NORF9PU1NFTVVMPXkKIENPTkZJR19TTkRfTUlYRVJfT1NTPW0KIENPTkZJR19TTkRfUENNX09TUz1tCi1DT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CiBDT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQogQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUz15Ci1DT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15Ci1DT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RSSVZFUlMgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfU1BJIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfVVNCPXkKIENPTkZJR19TTkRfVVNCX0FVRElPPW0KIENPTkZJR19TTkRfVVNCX0NBSUFRPW0KIENPTkZJR19TTkRfVVNCX0NBSUFRX0lOUFVUPXkKIENPTkZJR19TTkRfU09DPXkKIENPTkZJR19TTkRfUzNDMjRYWF9TT0M9eQotQ09ORklHX1NORF9TM0MyNFhYX1NPQ19JMlM9eQotIyBDT05GSUdfU05EX1MzQzI0WFhfU09DX0xOMjQ0MFNCQ19BTEM2NTAgaXMgbm90IHNldAotQ09ORklHX1NORF9TM0MyNFhYX1NPQ19TM0MyNFhYX1VEQTEzNFg9eQotQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9eQotIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU09DX0wzPXkKLUNPTkZJR19TTkRfU09DX1VEQTEzNFg9eQotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19ISURSQVc9eQotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15CiBDT05GSUdfSElEX1BJRD15CiBDT05GSUdfVVNCX0hJRERFVj15Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotQ09ORklHX0hJRF9BNFRFQ0g9eQotQ09ORklHX0hJRF9BUFBMRT15Ci1DT05GSUdfSElEX0JFTEtJTj15Ci1DT05GSUdfSElEX0NIRVJSWT15Ci1DT05GSUdfSElEX0NISUNPTlk9eQotQ09ORklHX0hJRF9DWVBSRVNTPXkKLSMgQ09ORklHX0RSQUdPTlJJU0VfRkYgaXMgbm90IHNldAotQ09ORklHX0hJRF9FWktFWT15Ci1DT05GSUdfSElEX0tZRT15CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKLUNPTkZJR19ISURfS0VOU0lOR1RPTj15Ci1DT05GSUdfSElEX0xPR0lURUNIPXkKLSMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfTUlDUk9TT0ZUPXkKLUNPTkZJR19ISURfTU9OVEVSRVk9eQogQ09ORklHX0hJRF9OVFJJRz15CiBDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKLSMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfUEVUQUxZTlg9eQogQ09ORklHX0hJRF9TQU1TVU5HPXkKIENPTkZJR19ISURfU09OWT15CiBDT05GSUdfSElEX1NVTlBMVVM9eQotIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfVE9QU0VFRD15Ci0jIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAotIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCiBDT05GSUdfVVNCX0FDTT1tCi0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1dETT1tCi0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0KLSMKLSMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KLSMKIENPTkZJR19VU0JfU1RPUkFHRT1tCi0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQj1tCi0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDA9bQogQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUPW0KIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDk9bQogQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NT1tCiBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1Q9bQogQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQT1tCi0jIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTElCVVNVQUw9eQotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCiBDT05GSUdfVVNCX1NFUklBTD1tCi0jIENPTkZJR19VU0JfRVpVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQUlSQ0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQ0gzNDEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTBYPW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0VNUEVHIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPPW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfRlVOU09GVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSVBBUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9USSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lQVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lVVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tMU0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTU9UT1JPTEEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9PVEk2ODU4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfUVVBTENPTU0gaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfU1BDUDhYNT1tCi0jIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU0lFTUVOU19NUEkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1NZTUJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1RJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX09QVElDT04gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCi1DT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwPXkKLUNPTkZJR19VU0JfUzNDMjQxMD15Ci0jIENPTkZJR19VU0JfUzNDMjQxMF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAogQ09ORklHX1VTQl9aRVJPPW0KIENPTkZJR19VU0JfRVRIPW0KLUNPTkZJR19VU0JfRVRIX1JORElTPXkKIENPTkZJR19VU0JfR0FER0VURlM9bQogQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR19TRVJJQUw9bQotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAogQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFPW0KLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKIENPTkZJR19TRElPX1VBUlQ9eQotIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCiBDT05GSUdfTU1DX1NESENJPXkKIENPTkZJR19NTUNfU1BJPXkKIENPTkZJR19NTUNfUzNDPXkKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKLQotIwotIyBMRUQgZHJpdmVycwotIwogQ09ORklHX0xFRFNfUzNDMjRYWD15Ci0jIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAogQ09ORklHX0xFRFNfR1BJTz15Ci1DT05GSUdfTEVEU19HUElPX1BMQVRGT1JNPXkKLSMgQ09ORklHX0xFRFNfTFA1NTIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX0RBQzEyNFMwODUgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19QV00gaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19CRDI4MDIgaXMgbm90IHNldAotCi0jCi0jIExFRCBUcmlnZ2VycwotIwotQ09ORklHX0xFRFNfVFJJR0dFUlM9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15Ci1DT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVD15CiBDT05GSUdfTEVEU19UUklHR0VSX0dQSU89eQogQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPXkKLQotIwotIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCi0jCi1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQogQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTD15Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX1MzQz15CiBDT05GSUdfRE1BREVWSUNFUz15Ci0KLSMKLSMgRE1BIERldmljZXMKLSMKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPW0KIENPTkZJR19FWFQyX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUMl9GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlNfRlM9eQogQ09ORklHX0FVVE9GUzRfRlM9eQotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19BQ0w9eQotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19DT05GSUdGU19GUz1tCi1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfUk9NRlNfRlM9eQotIyBDT05GSUdfUk9NRlNfQkFDS0VEX0JZX0JMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9NVEQgaXMgbm90IHNldAogQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9CT1RIPXkKLUNPTkZJR19ST01GU19PTl9CTE9DSz15Ci1DT05GSUdfUk9NRlNfT05fTVREPXkKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WM19BQ0w9eQogQ09ORklHX05GU19WND15CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQogQ09ORklHX0JTRF9ESVNLTEFCRUw9eQogQ09ORklHX01JTklYX1NVQlBBUlRJVElPTj15CiBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OPXkKIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUw9eQogQ09ORklHX0xETV9QQVJUSVRJT049eQotIyBDT05GSUdfTERNX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfRUZJX1BBUlRJVElPTj15Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJjcDQzNyIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KQEAgLTE4ODIsMTY1ICszMjgsNDEgQEAKIENPTkZJR19OTFNfS09JOF9SPW0KIENPTkZJR19OTFNfS09JOF9VPW0KIENPTkZJR19OTFNfVVRGOD1tCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19TVFJJUF9BU01fU1lNUz15CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCiAjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJNX1VOV0lORD15CiBDT05GSUdfREVCVUdfVVNFUj15Ci0jIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1MzQ19VQVJUPTAKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCiBDT05GSUdfS0VZUz15Ci0jIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUz15Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKIENPTkZJR19DUllQVE9fRklQUz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEPW0KLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HPW0KLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLUNPTkZJR19DUllQVE9fR0YxMjhNVUw9bQogQ09ORklHX0NSWVBUT19OVUxMPW0KLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKIENPTkZJR19DUllQVE9fQ1JZUFREPW0KIENPTkZJR19DUllQVE9fQVVUSEVOQz1tCiBDT05GSUdfQ1JZUFRPX1RFU1Q9bQotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwogQ09ORklHX0NSWVBUT19DQ009bQogQ09ORklHX0NSWVBUT19HQ009bQotQ09ORklHX0NSWVBUT19TRVFJVj1tCi0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLUNPTkZJR19DUllQVE9fQ1RSPW0KIENPTkZJR19DUllQVE9fQ1RTPW0KIENPTkZJR19DUllQVE9fRUNCPXkKIENPTkZJR19DUllQVE9fTFJXPW0KIENPTkZJR19DUllQVE9fUENCQz1tCiBDT05GSUdfQ1JZUFRPX1hUUz1tCi0KLSMKLSMgSGFzaCBtb2RlcwotIwogQ09ORklHX0NSWVBUT19ITUFDPXkKIENPTkZJR19DUllQVE9fWENCQz1tCi0KLSMKLSMgRGlnZXN0Ci0jCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCiBDT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15CiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPXkKIENPTkZJR19DUllQVE9fUk1EMTI4PW0KIENPTkZJR19DUllQVE9fUk1EMTYwPW0KIENPTkZJR19DUllQVE9fUk1EMjU2PW0KIENPTkZJR19DUllQVE9fUk1EMzIwPW0KLUNPTkZJR19DUllQVE9fU0hBMT1tCiBDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCiBDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCiBDT05GSUdfQ1JZUFRPX1dQNTEyPW0KLQotIwotIyBDaXBoZXJzCi0jCiBDT05GSUdfQ1JZUFRPX0FFUz15CiBDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCiBDT05GSUdfQ1JZUFRPX0FSQzQ9eQpAQCAtMjA0OCw3ICszNzAsNiBAQAogQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KIENPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19ERVM9eQogQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQogQ09ORklHX0NSWVBUT19LSEFaQUQ9bQogQ09ORklHX0NSWVBUT19TQUxTQTIwPW0KQEAgLTIwNTYsNDEgKzM3Nyw4IEBACiBDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQogQ09ORklHX0NSWVBUT19URUE9bQogQ09ORklHX0NSWVBUT19UV09GSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQotCi0jCi0jIENvbXByZXNzaW9uCi0jCiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQogQ09ORklHX0NSWVBUT19aTElCPW0KIENPTkZJR19DUllQVE9fTFpPPW0KLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKLUNPTkZJR19DUllQVE9fQU5TSV9DUFJORz1tCi1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotQ09ORklHX0NSQ19DQ0lUVD1tCi1DT05GSUdfQ1JDMTY9bQogQ09ORklHX0NSQ19UMTBESUY9eQotQ09ORklHX0NSQ19JVFVfVD15Ci1DT05GSUdfQ1JDMzI9eQotQ09ORklHX0NSQzc9eQogQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0xaT19DT01QUkVTUz1tCi1DT05GSUdfTFpPX0RFQ09NUFJFU1M9bQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfREVDT01QUkVTU19CWklQMj15Ci1DT05GSUdfREVDT01QUkVTU19MWk1BPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL21tcDJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9tbXAyX2RlZmNvbmZpZwppbmRleCA0YjU1ZGNiLi40N2FkM2IxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL21tcDJfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbW1wMl9kZWZjb25maWcKQEAgLTEsMTIyMyArMSw4OCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjNQotIyBXZWQgQXByIDI4IDExOjIzOjE5IDIwMTAKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfSEFWRV9QUk9DX0NQVT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEU9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQotQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15Ci1DT05GSUdfS0VSTkVMX0daSVA9eQotIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi1DT05GSUdfTU1VPXkKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRE9WRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX01NUD15Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OVUM5M1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hNT0JJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1M1UDY0NDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVA2NDQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1M1UFYyMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVTg1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9UQVZPUkVWQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFydmVsbCBQWEExNjgvOTEwL01NUDIgSW1wbG1lbnRhdGlvbnMKLSMKLSMgQ09ORklHX01BQ0hfQVNQRU5JVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9aWUxPTklURTIgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9BVkVOR0VSU19MSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVFRDX0RLQiBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9GTElOVD15CiBDT05GSUdfTUFDSF9NQVJWRUxMX0pBU1BFUj15Ci1DT05GSUdfQ1BVX01NUDI9eQotQ09ORklHX1BMQVRfUFhBPXkKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9WNj15Ci1DT05GSUdfQ1BVXzMydjZLPXkKLUNPTkZJR19DUFVfMzJ2Nj15Ci1DT05GSUdfQ1BVX0FCUlRfRVY2PXkKLUNPTkZJR19DUFVfUEFCUlRfVjY9eQotQ09ORklHX0NQVV9DQUNIRV9WNj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQotQ09ORklHX0NQVV9DT1BZX1Y2PXkKLUNPTkZJR19DUFVfVExCX1Y2PXkKLUNPTkZJR19DUFVfSEFTX0FTSUQ9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19PVVRFUl9DQUNIRT15Ci1DT05GSUdfQ0FDSEVfVEFVUk9TMj15Ci1DT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTUKLUNPTkZJR19DUFVfSEFTX1BNVT15Ci0jIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMCBpcyBub3Qgc2V0Ci1DT05GSUdfQ09NTU9OX0NMS0RFVj15Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotQ09ORklHX1ZNU1BMSVRfM0c9eQotIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCi0jIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTAKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJyb290PS9kZXYvbmZzIHJvb3Rmc3R5cGU9bmZzIG5mc3Jvb3Q9MTkyLjE2OC4xLjEwMDovbmZzcm9vdC8gaXA9MTkyLjE2OC4xLjEwMToxOTIuMTY4LjEuMTAwOjoyNTUuMjU1LjI1NS4wOjpldGgwOm9uIGNvbnNvbGU9dHR5UzIsMzg0MDAgbWVtPTEyOE0gdXNlcl9kZWJ1Zz0yNTUiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwotIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotIyBDT05GSUdfRlBFX05XRlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKIENPTkZJR19WRlA9eQotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwotIyBDT05GSUdfTVREX0NIQVIgaXMgbm90IHNldAotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkQ9eQotIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9HUElPIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9QWEEzeHggaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX09ORU5BTkQ9eQotIyBDT05GSUdfTVREX09ORU5BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT05FTkFORF9HRU5FUklDPXkKLSMgQ09ORklHX01URF9PTkVOQU5EX09UUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORF8yWF9QUk9HUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EX1NJTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0lfTU9EPXkKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKIENPTkZJR19TTUM5MVg9eQotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX1BYQT15CiBDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKLSMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX1BYQT15Ci0jIENPTkZJR19JMkNfUFhBX1NMQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1hJTElOWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fSVQ4NzYxRSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fQURQNTU4OCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLUNPTkZJR19NRkRfQ09SRT15Ci0jIENPTkZJR19NRkRfODhQTTg2MFggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfSTJDUExEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CiBDT05GSUdfTUZEX01BWDg5MjU9eQotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg5OTQgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19SRUdVTEFUT1I9eQotIyBDT05GSUdfUkVHVUxBVE9SX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVVNFUlNQQUNFX0NPTlNVTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9NQVgxNTg2IGlzIG5vdCBzZXQKIENPTkZJR19SRUdVTEFUT1JfTUFYODY0OT15Ci0jIENPTkZJR19SRUdVTEFUT1JfTUFYODY2MCBpcyBub3Qgc2V0CiBDT05GSUdfUkVHVUxBVE9SX01BWDg5MjU9eQotIyBDT05GSUdfUkVHVUxBVE9SX0xQMzk3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwMjMgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQotIyBDT05GSUdfTENEX0lMSTkzMjAgaXMgbm90IHNldAotIyBDT05GSUdfTENEX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLUNPTkZJR19CQUNLTElHSFRfR0VORVJJQz15CiBDT05GSUdfQkFDS0xJR0hUX01BWDg5MjU9eQotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfTUFYODkyNT15Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19BQ0w9eQotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WM19BQ0w9eQogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NFUEhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKIENPTkZJR19QUklOVEtfVElNRT15Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAotIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotQ09ORklHX0ZUUkFDRT15Ci0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQotIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0RZTkFNSUNfREVCVUc9eQotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJNX1VOV0lORD15CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DX0VUTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPXkKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXNtX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXNtX2RlZmNvbmZpZwppbmRleCBmZTI1ZTNiLi4yYjhmN2FmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL21zbV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9tc21fZGVmY29uZmlnCkBAIC0xLDg5NCArMSw3MiBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIzCi0jIFdlZCBOb3YgIDcgMDE6MzY6NDUgMjAwNwotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfR1BJT1M9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX1BBTklDX1RJTUVPVVQ9MAotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0dPTERGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX01TTT15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIwotCi0jCi0jIE1TTTcyMDAgQm9hcmQgVHlwZQotIwogQ09ORklHX01BQ0hfSEFMSUJVVD15Ci1DT05GSUdfU0VSSUFMX01TTT15Ci1DT05GSUdfU0VSSUFMX01TTV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9NU01fTk9JTklUIGlzIG5vdCBzZXQKLUNPTkZJR19NU01fU01EPXkKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9WNj15Ci0jIENPTkZJR19DUFVfMzJ2NksgaXMgbm90IHNldAotQ09ORklHX0NQVV8zMnY2PXkKLUNPTkZJR19DUFVfQUJSVF9FVjY9eQotQ09ORklHX0NQVV9DQUNIRV9WNj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQotQ09ORklHX0NQVV9DT1BZX1Y2PXkKLUNPTkZJR19DUFVfVExCX1Y2PXkKLUNPTkZJR19DUFVfSEFTX0FTSUQ9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15CiAjIENPTkZJR19PQUJJX0NPTVBBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX1JFU09VUkNFU182NEJJVD15Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eU1TTSwxMTUyMDBuOCIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi0jIENPTkZJR19QQUNLRVQgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotQ09ORklHX01URF9NU01fTkFORD15Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0dPTERGSVNIX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVk9eQotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKIENPTkZJR19TTUM5MVg9eQotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAogQ09ORklHX1BQUD15Ci0jIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAogQ09ORklHX1BQUF9BU1lOQz15Ci0jIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAogQ09ORklHX1BQUF9ERUZMQVRFPXkKIENPTkZJR19QUFBfQlNEQ09NUD15Ci0jIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLUNPTkZJR19TTEhDPXkKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19NU01fUk1ORVQ9eQotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9HT0xERklTSF9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fU1lOQVBUSUNTX0kyQ19NRVAgaXMgbm90IHNldAotQ09ORklHX1RPVUNIU0NSRUVOX1NZTkFQVElDU19JMkNfUk1JPXkKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVUNCMTQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NSVNDPXkKLSMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URTIgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1lFQUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVUlOUFVUIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9HUElPPXkKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX1NFUklBTF9NU009eQorQ09ORklHX1NFUklBTF9NU01fQ09OU09MRT15CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfRENDX1RUWT15Ci0jIENPTkZJR19HT0xERklTSF9UVFkgaXMgbm90IHNldAotQ09ORklHX0JJTkRFUj15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLSMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotQ09ORklHX0kyQ19NU009eQotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLUNPTkZJR19TRU5TT1JTX1BDQTk2MzM9eQotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19BS004OTc2PXkKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotQ09ORklHX0xPV19NRU1PUllfS0lMTEVSPXkKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotQ09ORklHX05FV19MRURTPXkKLUNPTkZJR19MRURTX0NMQVNTPXkKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQogQ09ORklHX0ZCPXkKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQogQ09ORklHX0ZCX1RJTEVCTElUVElORz15Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9NU009eQotIyBDT05GSUdfRkJfR09MREZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQotIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRnVuY3Rpb24gU3VwcG9ydAotIwotQ09ORklHX1VTQl9GVU5DVElPTj15Ci1DT05GSUdfVVNCX0ZVTkNUSU9OX01TTV9IU1VTQj15Ci0jIENPTkZJR19VU0JfRlVOQ1RJT05fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlVOQ1RJT05fWkVSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlVOQ1RJT05fTE9PUEJBQ0sgaXMgbm90IHNldAotQ09ORklHX1VTQl9GVU5DVElPTl9BREI9eQotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKLQotIwotIyBETUEgQ2xpZW50cwotIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0KLSMKLSMgQW5kcm9pZAotIwotIyBDT05GSUdfQU5EUk9JRF9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfQU5EUk9JRF9SQU1fQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfQU5EUk9JRF9MT0dHRVI9eQotQ09ORklHX0FORFJPSURfVklCUkFUT1I9eQotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ZQUZGU19GUz15Ci1DT05GSUdfWUFGRlNfWUFGRlMxPXkKLSMgQ09ORklHX1lBRkZTXzlCWVRFX1RBR1MgaXMgbm90IHNldAotIyBDT05GSUdfWUFGRlNfRE9FU19FQ0MgaXMgbm90IHNldAotQ09ORklHX1lBRkZTX1lBRkZTMj15Ci1DT05GSUdfWUFGRlNfQVVUT19ZQUZGUzI9eQotIyBDT05GSUdfWUFGRlNfRElTQUJMRV9MQVpZX0xPQUQgaXMgbm90IHNldAotQ09ORklHX1lBRkZTX0NIRUNLUE9JTlRfUkVTRVJWRURfQkxPQ0tTPTEwCi0jIENPTkZJR19ZQUZGU19ESVNBQkxFX1dJREVfVE5PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lBRkZTX0FMV0FZU19DSEVDS19DSFVOS19FUkFTRUQgaXMgbm90IHNldAotQ09ORklHX1lBRkZTX1NIT1JUX05BTUVTX0lOX1JBTT15Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKLSMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotQ09ORklHX1NDSEVEX0RFQlVHPXkKIENPTkZJR19TQ0hFRFNUQVRTPXkKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19GT1JDRURfSU5MSU5JTkcgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfQ1JDX0NDSVRUPXkKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXY3OHh4MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL212Nzh4eDBfZGVmY29uZmlnCmluZGV4IGRhNDcxMGQuLmIwZDA4MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXY3OHh4MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9tdjc4eHgwX2RlZmNvbmZpZwpAQCAtMSwxNjg3ICsxLDE0MCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjNAotIyBNb24gTWF5ICA0IDE0OjIyOjEyIDIwMDkKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQogIyBDT05GSUdfU0xVQl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15Ci1DT05GSUdfVFJBQ0VQT0lOVFM9eQotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfT1BST0ZJTEU9eQotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0tQUk9CRVM9eQotQ09ORklHX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTVY3OFhYMD15Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAotCi0jCi0jIE1hcnZlbGwgTVY3OHh4MCBJbXBsZW1lbnRhdGlvbnMKLSMKIENPTkZJR19NQUNIX0RCNzhYMDBfQlA9eQogQ09ORklHX01BQ0hfUkQ3OFgwMF9NQVNBPXkKIENPTkZJR19NQUNIX1RFUkFTVEFUSU9OX1dYTD15Ci1DT05GSUdfUExBVF9PUklPTj15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfRkVST0NFT049eQotQ09ORklHX0NQVV9GRVJPQ0VPTl9PTERfSUQ9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUPXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfRkVST0NFT049eQotQ09ORklHX0NQVV9UTEJfRkVST0NFT049eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19PVVRFUl9DQUNIRT15Ci1DT05GSUdfQ0FDSEVfRkVST0NFT05fTDI9eQotIyBDT05GSUdfQ0FDSEVfRkVST0NFT05fTDJfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotQ09ORklHX1BDSV9MRUdBQ1k9eQotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotQ09ORklHX1ZNU1BMSVRfM0c9eQotIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCiBDT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKLSMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKIENPTkZJR19ISUdITUVNPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTAKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0iIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKIENPTkZJR19WRlA9eQotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQotQ09ORklHX0lORVRfTFJPPXkKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCiBDT05GSUdfTkVUX1BLVEdFTj1tCi0jIENPTkZJR19ORVRfVENQUFJPQkUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKICMgQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQotQ09ORklHX01URF9HRU5fUFJPQkU9eQogQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQotQ09ORklHX01URF9DRklfTk9TV0FQPXkKLSMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVA9eQotIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkQ9eQogQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURT15Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfR1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfSURTPXkKLSMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX09SSU9OPXkKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1NSPW0KLSMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPW0KLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQotIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19TQVRBX1BNUD15Ci0jIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX1NGRj15Ci0jIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9NVj15Ci0jIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZwotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwogQ09ORklHX01BUlZFTExfUEhZPXkKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15Ci0jIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0IgaXMgbm90IHNldAotIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CiBDT05GSUdfTVY2NDNYWF9FVEg9eQotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCi0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTE2Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX01WNjRYWFg9eQotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05NTI0MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0hUMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSQUdPTlJJU0VfRkYgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9NT05URVJFWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BBTlRIRVJMT1JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9QRVRBTFlOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU0FNU1VORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU09OWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU1VOUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAotIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1pFUk9QTFVTX0ZGIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci1DT05GSUdfVVNCX0RFVklDRV9DTEFTUz15Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQogQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRD15Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAogQ09ORklHX1VTQl9QUklOVEVSPXkKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotCi0jCi0jIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUI9eQogQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT009eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDk9eQogQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NT15CiBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1Q9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CiBDT05GSUdfTEVEU19DTEFTUz15Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLSMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19MUDU1MjEgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKIENPTkZJR19MRURTX1RSSUdHRVJTPXkKIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQotIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0Ci0KLSMKLSMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQotIwotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwogQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9SUzVDMzcyPXkKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfTTQxVDgwPXkKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwX1dEVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfRVhUNF9GUz1tCi0jIENPTkZJR19FWFQ0REVWX0NPTVBBVCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUNF9GU19YQVRUUj15Ci0jIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQyPW0KLSMgQ09ORklHX0pCRDJfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9bQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwogQ09ORklHX0lTTzk2NjBfRlM9bQogQ09ORklHX0pPTElFVD15Ci0jIENPTkZJR19aSVNPRlMgaXMgbm90IHNldAogQ09ORklHX1VERl9GUz1tCi1DT05GSUdfVURGX05MUz15Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKIENPTkZJR19CU0RfRElTS0xBQkVMPXkKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQogQ09ORklHX05MU19JU084ODU5XzI9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKIENPTkZJR19TQ0hFRFNUQVRTPXkKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBQ0tUUkFDRT15Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0hJR0hNRU0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUFJPQkVTX1NBTklUWV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLSMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19OT1BfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfUklOR19CVUZGRVI9eQotQ09ORklHX1RSQUNJTkc9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotQ09ORklHX0FSTV9VTldJTkQ9eQogQ09ORklHX0RFQlVHX1VTRVI9eQogQ09ORklHX0RFQlVHX0VSUk9SUz15Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTEw9eQotIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST1tCi1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9bQotQ09ORklHX0NSWVBUT19BRUFEMj1tCi1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCi1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9bQotQ09ORklHX0NSWVBUT19IQVNIMj1tCi1DT05GSUdfQ1JZUFRPX1JORzI9bQotQ09ORklHX0NSWVBUT19QQ09NUD1tCi1DT05GSUdfQ1JZUFRPX01BTkFHRVI9bQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj1tCi0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9bQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwogQ09ORklHX0NSWVBUT19DQkM9bQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5BUllfUFJJTlRGPXkKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMTY9bQotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDX0lUVV9UPW0KLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXgxX2RlZmNvbmZpZwppbmRleCBmNTc1MDcwLi4yZjM4ZDk3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL214MV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9teDFfZGVmY29uZmlnCkBAIC0xLDExMDQgKzEsOTAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMC1yYzEKLSMgV2VkIEFwciAgOCAxMToxMTozMyAyMDA5Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19BUkNIX01URF9YSVA9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci0jIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKIENPTkZJR19NT0RWRVJTSU9OUz15Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotQ09ORklHX0ZSRUVaRVI9eQotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTVhDPXkKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9NWDFBRFM9eQotCi0jCi0jIEZyZWVzY2FsZSBNWEMgSW1wbGVtZW50YXRpb25zCi0jCiBDT05GSUdfQVJDSF9NWDE9eQotIyBDT05GSUdfQVJDSF9NWDIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWDMgaXMgbm90IHNldAotCi0jCi0jIE1YMSBwbGF0Zm9ybXM6Ci0jCi1DT05GSUdfTUFDSF9NWExBRFM9eQorQ09ORklHX0FSQ0hfTVgxQURTPXkKIENPTkZJR19NQUNIX1NDQjkzMjg9eQogQ09ORklHX01YQ19JUlFfUFJJT1I9eQotIyBDT05GSUdfTVhDX1BXTSBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTIwVD15Ci1DT05GSUdfQ1BVXzMydjRUPXkKLUNPTkZJR19DUFVfQUJSVF9FVjRUPXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKLUNPTkZJR19DUFVfQ0FDSEVfVjRXVD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotQ09ORklHX1ZNU1BMSVRfM0c9eQotIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCiBDT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKLSMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0ibm9pbml0cmQgY29uc29sZT10dHlteGMwLDExNTIwMCByb290PS9kZXYvbXRkYmxvY2syIHJ3IGlwPW9mZiIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCi0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi0jIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCiBDT05GSUdfUE09eQogQ09ORklHX1BNX0RFQlVHPXkKLSMgQ09ORklHX1BNX1ZFUkJPU0UgaXMgbm90IHNldAotQ09ORklHX0NBTl9QTV9UUkFDRT15Ci1DT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkQ9eQotQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15Ci0jIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPW0KLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLSMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfU01TQ19QSFk9eQotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKIENPTkZJR19ETTkwMDA9eQotQ09ORklHX0RNOTAwMF9ERUJVR0xFVkVMPTQKLSMgQ09ORklHX0RNOTAwMF9GT1JDRV9TSU1QTEVfUEhZX1BPTEwgaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9JTVg9eQogQ09ORklHX1NFUklBTF9JTVhfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0lNWD15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKIENPTkZJR19XMT15Ci0KLSMKLSMgMS13aXJlIEJ1cyBNYXN0ZXJzCi0jCi0jIENPTkZJR19XMV9NQVNURVJfRFMyNDgyIGlzIG5vdCBzZXQKIENPTkZJR19XMV9NQVNURVJfTVhDPXkKLSMgQ09ORklHX1cxX01BU1RFUl9HUElPIGlzIG5vdCBzZXQKLQotIwotIyAxLXdpcmUgU2xhdmVzCi0jCiBDT05GSUdfVzFfU0xBVkVfVEhFUk09eQotIyBDT05GSUdfVzFfU0xBVkVfU01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMV9TTEFWRV9EUzI0MzEgaXMgbm90IHNldAotIyBDT05GSUdfVzFfU0xBVkVfRFMyNDMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxX1NMQVZFX0RTMjc2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMV9TTEFWRV9CUTI3MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCiBDT05GSUdfVVNCX0dBREdFVD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCi1DT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfSU1YPXkKLUNPTkZJR19VU0JfSU1YPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VUSD15Ci1DT05GSUdfVVNCX0VUSF9STkRJUz15Ci0jIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRVRIPW0KIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQotIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfTVhDPXkKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLUNPTkZJR19BUk1fVU5XSU5EPXkKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgyMV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL214MjFfZGVmY29uZmlnCmluZGV4IDFlY2Q2MjcuLjY0NTRlMTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgyMV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9teDIxX2RlZmNvbmZpZwpAQCAtMSwxMTY5ICsxLDk3IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAtcmMxCi0jIFR1ZSBBcHIgMTQgMTY6NTg6MDkgMjAwOQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfSEFWRV9QV009eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0FSQ0hfTVREX1hJUD15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTk9PUD15Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9NWEM9eQotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLQotIwotIyBGcmVlc2NhbGUgTVhDIEltcGxlbWVudGF0aW9ucwotIwotIyBDT05GSUdfQVJDSF9NWDEgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTVgyPXkKLSMgQ09ORklHX0FSQ0hfTVgzIGlzIG5vdCBzZXQKLUNPTkZJR19NQUNIX01YMjE9eQotIyBDT05GSUdfTUFDSF9NWDI3IGlzIG5vdCBzZXQKLQotIwotIyBNWDIgcGxhdGZvcm1zOgotIwogQ09ORklHX01BQ0hfTVgyMUFEUz15Ci0jIENPTkZJR19NWENfSVJRX1BSSU9SIGlzIG5vdCBzZXQKIENPTkZJR19NWENfUFdNPXkKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9BUk05MjZUPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQotQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4gaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0NPTU1PTl9DTEtERVY9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15Ci1DT05GSUdfT0FCSV9DT01QQVQ9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQotIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSIiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwotIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotIyBDT05GSUdfRlBFX05XRlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi0jIENPTkZJR19QQUNLRVQgaXMgbm90IHNldAotIyBDT05GSUdfVU5JWCBpcyBub3Qgc2V0Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogQ09ORklHX01URF9ERUJVRz15CiBDT05GSUdfTVREX0RFQlVHX1ZFUkJPU0U9MwotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15Ci1DT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCi0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15CiBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15Ci1DT05GSUdfTVREX0NGSV9OT1NXQVA9eQotIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfR0VPTUVUUlk9eQogIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzEgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci0jIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAotIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfR1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfSURTPXkKLSMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfTVhDPXkKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1M4OXgwPXkKLUNPTkZJR19DUzg5eDBfTk9OSVNBX0lSUT15CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKICMgQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTEKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTEKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX0lNWD15CiBDT05GSUdfU0VSSUFMX0lNWF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSU1YPXkKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogQ09ORklHX1NQST15Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUHJvdG9jb2wgTWFzdGVycwotIwotIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKIENPTkZJR19GQl9JTVg9eQotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVFM9eQogQ09ORklHX0ZPTlRfOHg4PXkKLSMgQ09ORklHX0ZPTlRfOHgxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfTUlOSV80eDYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HTz15Ci1DT05GSUdfTE9HT19MSU5VWF9NT05PPXkKLUNPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKLUNPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX01NQz15Ci0jIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz15Ci1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15Ci0jIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAogQ09ORklHX01NQ19NWEM9eQotIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCi0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVkVOVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci1DT05GSUdfQVJNX1VOV0lORD15Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL214MjdfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9teDI3X2RlZmNvbmZpZwppbmRleCBiNGMxMzY2Li5iMjAzOGIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL214MjdfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXgyN19kZWZjb25maWcKQEAgLTEsMTI3MyArMSwxMjEgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgRnJpIEp1bCAyNCAxNjowODowNiAyMDA5Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19IQVZFX1BXTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfQVJDSF9NVERfWElQPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQotQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLUNPTkZJR19SVF9HUk9VUF9TQ0hFRD15Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci0KLSMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKLSMKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKLUNPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9eQotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0tQUk9CRVM9eQotQ09ORklHX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9OT09QPXkKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCi1DT05GSUdfRlJFRVpFUj15Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9NWEM9eQotIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLQotIwotIyBGcmVlc2NhbGUgTVhDIEltcGxlbWVudGF0aW9ucwotIwotIyBDT05GSUdfQVJDSF9NWDEgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTVgyPXkKLSMgQ09ORklHX0FSQ0hfTVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTVgyMSBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9NWDI3PXkKLQotIwotIyBNWDIgcGxhdGZvcm1zOgotIwogQ09ORklHX01BQ0hfTVgyN0FEUz15CiBDT05GSUdfTUFDSF9QQ00wMzg9eQotQ09ORklHX01BQ0hfUENNOTcwX0JBU0VCT0FSRD15CiBDT05GSUdfTUFDSF9NWDI3XzNEUz15CiBDT05GSUdfTUFDSF9JTVgyN0xJVEU9eQogQ09ORklHX01YQ19JUlFfUFJJT1I9eQogQ09ORklHX01YQ19QV009eQotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX0FSTTkyNlQ9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUSj15Ci1DT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTiBpcyBub3Qgc2V0Ci1DT05GSUdfQ09NTU9OX0NMS0RFVj15Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAogQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTAKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLSMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0iIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQogQ09ORklHX0ZQRV9OV0ZQRV9YUD15Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRlAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCiBDT05GSUdfUE09eQogQ09ORklHX1BNX0RFQlVHPXkKLSMgQ09ORklHX1BNX1ZFUkJPU0UgaXMgbm90IHNldAotQ09ORklHX0NBTl9QTV9UUkFDRT15Ci1DT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkQ9eQotIyBDT05GSUdfUE1fVEVTVF9TVVNQRU5EIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQotIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVENQUFJPQkUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKLUNPTkZJR19NVERfQ0ZJX05PU1dBUD15Ci0jIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9HRU9NRVRSWT15CiAjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQogIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15CiAjIENPTkZJR19NVERfQ0ZJX0kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci0jIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAotIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfR1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfSURTPXkKLSMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfTVhDPXkKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKIENPTkZJR19NVERfVUJJPXkKLUNPTkZJR19NVERfVUJJX1dMX1RIUkVTSE9MRD00MDk2Ci1DT05GSUdfTVREX1VCSV9CRUJfUkVTRVJWRT0xCi0jIENPTkZJR19NVERfVUJJX0dMVUVCSSBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIGRlYnVnZ2luZyBvcHRpb25zCi0jCi0jIENPTkZJR19NVERfVUJJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwogQ09ORklHX0VFUFJPTV9BVDI0PXkKLSMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CiBDT05GSUdfRkVDPXkKLSMgQ09ORklHX0ZFQzIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9TUEkgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VFVEkgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9JTVg9eQogQ09ORklHX1NFUklBTF9JTVhfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0lNWD15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogQ09ORklHX1NQST15Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKIENPTkZJR19TUElfQklUQkFORz15Ci0jIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFByb3RvY29sIE1hc3RlcnMKLSMKLSMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CiBDT05GSUdfVzE9eQotCi0jCi0jIDEtd2lyZSBCdXMgTWFzdGVycwotIwotIyBDT05GSUdfVzFfTUFTVEVSX0RTMjQ4MiBpcyBub3Qgc2V0CiBDT05GSUdfVzFfTUFTVEVSX01YQz15Ci0jIENPTkZJR19XMV9NQVNURVJfRFMxV00gaXMgbm90IHNldAotIyBDT05GSUdfVzFfTUFTVEVSX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIDEtd2lyZSBTbGF2ZXMKLSMKIENPTkZJR19XMV9TTEFWRV9USEVSTT15Ci0jIENPTkZJR19XMV9TTEFWRV9TTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxX1NMQVZFX0RTMjQzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMV9TTEFWRV9EUzI0MzMgaXMgbm90IHNldAotIyBDT05GSUdfVzFfU0xBVkVfRFMyNzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxX1NMQVZFX0JRMjcwMDAgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9EREMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCiBDT05GSUdfRkJfSU1YPXkKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAogQ09ORklHX0ZPTlRTPXkKIENPTkZJR19GT05UXzh4OD15Ci0jIENPTkZJR19GT05UXzh4MTYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAotIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKLSMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX01YQz15Ci0jIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzPXkKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15CiAjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiBDT05GSUdfVUJJRlNfRlM9eQotIyBDT05GSUdfVUJJRlNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfVUJJRlNfRlNfQURWQU5DRURfQ09NUFIgaXMgbm90IHNldAotQ09ORklHX1VCSUZTX0ZTX0xaTz15Ci1DT05GSUdfVUJJRlNfRlNfWkxJQj15Ci0jIENPTkZJR19VQklGU19GU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15CiBDT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX1NUQUNLVFJBQ0U9eQotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19OT1BfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfUklOR19CVUZGRVI9eQotQ09ORklHX0VWRU5UX1RSQUNJTkc9eQotQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15Ci1DT05GSUdfVFJBQ0lORz15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLUNPTkZJR19BUk1fVU5XSU5EPXkKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci0jIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLUNPTkZJR19DUllQVE9fREVGTEFURT15Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0xaTz15Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLUNPTkZJR19CSU5BUllfUFJJTlRGPXkKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfUkFUSU9OQUw9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotQ09ORklHX0NSQzE2PXkKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0xaT19DT01QUkVTUz15Ci1DT05GSUdfTFpPX0RFQ09NUFJFU1M9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgzMXBka19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL214MzFwZGtfZGVmY29uZmlnCmluZGV4IGQ0MDk1MzcuLjJkMjkzMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgzMXBka19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9teDMxcGRrX2RlZmNvbmZpZwpAQCAtMSw3NzIgKzEsNDQgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC1yYzIKLSMgU3VuIE9jdCAyNiAxNTo1NToyOSAyMDA4Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19BUkNIX01URF9YSVA9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotIyBDT05GSUdfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNwotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX05PT1A9eQotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTVhDPXkKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBGcmVlc2NhbGUgTVhDIEltcGxlbWVudGF0aW9ucwotIwotIyBDT05GSUdfQVJDSF9NWDIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfTVgzPXkKLQotIwotIyBNWDMgT3B0aW9ucwotIwogIyBDT05GSUdfTUFDSF9NWDMxQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfUENNMDM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTVgzMUxJVEUgaXMgbm90IHNldAogQ09ORklHX01BQ0hfTVgzMV8zRFM9eQotIyBDT05GSUdfTVhDX0lSUV9QUklPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfVjY9eQotIyBDT05GSUdfQ1BVXzMydjZLIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfMzJ2Nj15Ci1DT05GSUdfQ1BVX0FCUlRfRVY2PXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKLUNPTkZJR19DUFVfQ0FDSEVfVjY9eQotQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKLUNPTkZJR19DUFVfQ09QWV9WNj15Ci1DT05GSUdfQ1BVX1RMQl9WNj15Ci1DT05GSUdfQ1BVX0hBU19BU0lEPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotQ09ORklHX1ZNU1BMSVRfM0c9eQotIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCi1DT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQotIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfVU5FVklDVEFCTEVfTFJVIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MAotQ09ORklHX0NNRExJTkU9IiIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCi0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi0jIENPTkZJR19WRlAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAogQ09ORklHX05FVF9LRVk9eQogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi1DT05GSUdfSVBWNj15Ci0jIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9eQotQ09ORklHX0lQVjZfU0lUPXkKLUNPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKLSMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQogIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0Ci1DT05GSUdfRldfTE9BREVSPXkKICMgQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci0jIENPTkZJR19NSUkgaXMgbm90IHNldAotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9JTVg9eQogQ09ORklHX1NFUklBTF9JTVhfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBWb2x0YWdlIGFuZCBDdXJyZW50IHJlZ3VsYXRvcnMKLSMKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci1DT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19OT1BfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgzX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXgzX2RlZmNvbmZpZwppbmRleCA4YTA2YmM2Li4xNjFmOTA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL214M19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9teDNfZGVmY29uZmlnCkBAIC0xLDIwMyArMSwxNyBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQotIyBTdW4gTm92ICAxIDIyOjU2OjI0IDIwMDkKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX0hBVkVfUFdNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfQVJDSF9NVERfWElQPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci0jIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9DTEs9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLUNPTkZJR19GUkVFWkVSPXkKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotQ09ORklHX01NVT15Ci0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTVhDPXkKLSMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJlZXNjYWxlIE1YQyBJbXBsZW1lbnRhdGlvbnMKLSMKLSMgQ09ORklHX0FSQ0hfTVgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVgyNSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9NWDM9eQotIyBDT05GSUdfQVJDSF9NWEM5MTIzMSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9NWDMxPXkKLUNPTkZJR19BUkNIX01YMzU9eQotCi0jCi0jIE1YMyBwbGF0Zm9ybXM6Ci0jCi1DT05GSUdfTUFDSF9NWDMxQURTPXkKIENPTkZJR19NQUNIX01YMzFBRFNfV00xMTMzX0VWMT15CiBDT05GSUdfTUFDSF9QQ00wMzc9eQogQ09ORklHX01BQ0hfUENNMDM3X0VFVD15CkBAIC0yMTIsMTAwMSArMjYsOTggQEAKIENPTkZJR19NQUNIX0taTV9BUk0xMV8wMT15CiBDT05GSUdfTVhDX0lSUV9QUklPUj15CiBDT05GSUdfTVhDX1BXTT15Ci1DT05GSUdfQVJDSF9IQVNfUk5HQT15Ci1DT05GSUdfQVJDSF9NWENfSU9NVVhfVjM9eQotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX1Y2PXkKLSMgQ09ORklHX0NQVV8zMnY2SyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVXzMydjY9eQotQ09ORklHX0NQVV9BQlJUX0VWNj15Ci1DT05GSUdfQ1BVX1BBQlJUX1Y2PXkKLUNPTkZJR19DUFVfQ0FDSEVfVjY9eQotQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKLUNPTkZJR19DUFVfQ09QWV9WNj15Ci1DT05GSUdfQ1BVX1RMQl9WNj15Ci1DT05GSUdfQ1BVX0hBU19BU0lEPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfT1VURVJfQ0FDSEU9eQotQ09ORklHX0NBQ0hFX0wyWDA9eQotQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD01Ci0jIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMCBpcyBub3Qgc2V0Ci1DT05GSUdfQ09NTU9OX0NMS0RFVj15Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAotIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15Ci1DT05GSUdfT0FCSV9DT01QQVQ9eQotIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJub2luaXRyZCBjb25zb2xlPXR0eW14YzAsMTE1MjAwIHJvb3Q9L2Rldi9tdGRibG9jazIgcncgaXA9b2ZmIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKLSMgQ09ORklHX0ZQRV9OV0ZQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CiBDT05GSUdfVkZQPXkKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwogQ09ORklHX1BNPXkKIENPTkZJR19QTV9ERUJVRz15Ci0jIENPTkZJR19QTV9WRVJCT1NFIGlzIG5vdCBzZXQKLUNPTkZJR19DQU5fUE1fVFJBQ0U9eQotQ09ORklHX1BNX1NMRUVQPXkKLUNPTkZJR19TVVNQRU5EPXkKLUNPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQotIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPW0KLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLSMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORD15Ci0jIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0dQSU8gaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX01YQz15Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCiBDT05GSUdfTVREX1VCST15Ci1DT05GSUdfTVREX1VCSV9XTF9USFJFU0hPTEQ9NDA5NgotQ09ORklHX01URF9VQklfQkVCX1JFU0VSVkU9MQotIyBDT05GSUdfTVREX1VCSV9HTFVFQkkgaXMgbm90IHNldAotCi0jCi0jIFVCSSBkZWJ1Z2dpbmcgb3B0aW9ucwotIwotIyBDT05GSUdfTVREX1VCSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVYgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCiBDT05GSUdfRUVQUk9NX0FUMjQ9eQotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKIENPTkZJR19TTVNDX1BIWT15Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogQ09ORklHX1NNU0M5MTFYPXkKIENPTkZJR19ETkVUPXkKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NTODl4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiBDT05GSUdfRkVDPXkKLSMgQ09ORklHX0ZFQzIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD1tCi1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFMgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9JTVg9eQogQ09ORklHX1NFUklBTF9JTVhfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0lNWD15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgQUM5NyBHUElPIGV4cGFuZGVyczoKLSMKIENPTkZJR19XMT15Ci0KLSMKLSMgMS13aXJlIEJ1cyBNYXN0ZXJzCi0jCi0jIENPTkZJR19XMV9NQVNURVJfRFMyNDgyIGlzIG5vdCBzZXQKIENPTkZJR19XMV9NQVNURVJfTVhDPXkKLSMgQ09ORklHX1cxX01BU1RFUl9EUzFXTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMV9NQVNURVJfR1BJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgMS13aXJlIFNsYXZlcwotIwogQ09ORklHX1cxX1NMQVZFX1RIRVJNPXkKLSMgQ09ORklHX1cxX1NMQVZFX1NNRU0gaXMgbm90IHNldAotIyBDT05GSUdfVzFfU0xBVkVfRFMyNDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxX1NMQVZFX0RTMjQzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMV9TTEFWRV9EUzI3NjAgaXMgbm90IHNldAotIyBDT05GSUdfVzFfU0xBVkVfQlEyNzAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotQ09ORklHX01GRF9XTTgzNTA9eQotQ09ORklHX01GRF9XTTgzNTBfQ09ORklHX01PREVfMD15Ci1DT05GSUdfTUZEX1dNODM1Ml9DT05GSUdfTU9ERV8wPXkKIENPTkZJR19NRkRfV004MzUwX0kyQz15Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogQ09ORklHX1JFR1VMQVRPUj15Ci0jIENPTkZJR19SRUdVTEFUT1JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfTUFYMTU4NiBpcyBub3Qgc2V0CiBDT05GSUdfUkVHVUxBVE9SX1dNODM1MD15Ci0jIENPTkZJR19SRUdVTEFUT1JfTFAzOTcxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9UUFM2NTAyMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwN1ggaXMgbm90IHNldAogQ09ORklHX01FRElBX1NVUFBPUlQ9eQotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCiBDT05GSUdfVklERU9fREVWPXkKLUNPTkZJR19WSURFT19WNEwyX0NPTU1PTj15CiAjIENPTkZJR19WSURFT19BTExPV19WNEwxIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19WNEwxX0NPTVBBVD15Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fTUVESUE9eQotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfTUVESUFfQVRUQUNIIGlzIG5vdCBzZXQKLUNPTkZJR19NRURJQV9UVU5FUj15Ci0jIENPTkZJR19NRURJQV9UVU5FUl9DVVNUT01JU0UgaXMgbm90IHNldAotQ09ORklHX01FRElBX1RVTkVSX1NJTVBMRT15Ci1DT05GSUdfTUVESUFfVFVORVJfVERBODI5MD15Ci1DT05GSUdfTUVESUFfVFVORVJfVERBOTg4Nz15Ci1DT05GSUdfTUVESUFfVFVORVJfVEVBNTc2MT15Ci1DT05GSUdfTUVESUFfVFVORVJfVEVBNTc2Nz15Ci1DT05GSUdfTUVESUFfVFVORVJfTVQyMFhYPXkKLUNPTkZJR19NRURJQV9UVU5FUl9YQzIwMjg9eQotQ09ORklHX01FRElBX1RVTkVSX1hDNTAwMD15Ci1DT05GSUdfTUVESUFfVFVORVJfTUM0NFM4MDM9eQotQ09ORklHX1ZJREVPX1Y0TDI9eQotQ09ORklHX1ZJREVPQlVGX0dFTj15Ci1DT05GSUdfVklERU9CVUZfRE1BX0NPTlRJRz15Ci1DT05GSUdfVklERU9fQ0FQVFVSRV9EUklWRVJTPXkKLSMgQ09ORklHX1ZJREVPX0FEVl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19GSVhFRF9NSU5PUl9SQU5HRVMgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX0hFTFBFUl9DSElQU19BVVRPPXkKLSMgQ09ORklHX1ZJREVPX1ZJVkkgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fU0FBNTI0NkEgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fU0FBNTI0OSBpcyBub3Qgc2V0CiBDT05GSUdfU09DX0NBTUVSQT15CiBDT05GSUdfU09DX0NBTUVSQV9NVDlNMDAxPXkKIENPTkZJR19TT0NfQ0FNRVJBX01UOU0xMTE9eQogQ09ORklHX1NPQ19DQU1FUkFfTVQ5VDAzMT15CiBDT05GSUdfU09DX0NBTUVSQV9NVDlWMDIyPXkKIENPTkZJR19TT0NfQ0FNRVJBX1RXOTkxMD15Ci0jIENPTkZJR19TT0NfQ0FNRVJBX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19TT0NfQ0FNRVJBX09WNzcyWD15Ci1DT05GSUdfTVgzX1ZJREVPPXkKIENPTkZJR19WSURFT19NWDM9eQotIyBDT05GSUdfVklERU9fU0hfTU9CSUxFX0NFVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQURJT19BREFQVEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAotQ09ORklHX0ZCX01YMz15Ci0jIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR08gaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX01NQz15Ci0jIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz15Ci1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15Ci0jIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfTVhDPXkKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKIENPTkZJR19ETUFERVZJQ0VTPXkKLQotIwotIyBETUEgRGV2aWNlcwotIwotQ09ORklHX01YM19JUFU9eQotQ09ORklHX01YM19JUFVfSVJRUz00Ci1DT05GSUdfRE1BX0VOR0lORT15Ci0KLSMKLSMgRE1BIENsaWVudHMKLSMKLSMgQ09ORklHX05FVF9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfQVNZTkNfVFhfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiBDT05GSUdfVUJJRlNfRlM9eQotIyBDT05GSUdfVUJJRlNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfVUJJRlNfRlNfQURWQU5DRURfQ09NUFIgaXMgbm90IHNldAotQ09ORklHX1VCSUZTX0ZTX0xaTz15Ci1DT05GSUdfVUJJRlNfRlNfWkxJQj15Ci0jIENPTkZJR19VQklGU19GU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci1DT05GSUdfQVJNX1VOV0lORD15Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19MWk89eQotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfUkFUSU9OQUw9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotQ09ORklHX0NSQzE2PXkKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0xaT19DT01QUkVTUz15Ci1DT05GSUdfTFpPX0RFQ09NUFJFU1M9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXg1MV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL214NTFfZGVmY29uZmlnCmluZGV4IGE3MDhmZDYuLmE2NjVlY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXg1MV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9teDUxX2RlZmNvbmZpZwpAQCAtMSw1MjggKzEsNjEgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzYKLSMgVHVlIEZlYiAgMiAxNToyMDo0OCAyMDEwCi0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfQVJDSF9NVERfWElQPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LRVJORUxfR1pJUD15Ci1DT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKLUNPTkZJR19LRVJORUxfR1pJUD15Ci0jIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAotIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTgKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiBDT05GSUdfUkVMQVk9eQotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiAjIENPTkZJR19TTFVCX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9DTEs9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCREFGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLUNPTkZJR19GUkVFWkVSPXkKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotQ09ORklHX01NVT15Ci0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTVhDPXkKLSMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ET1ZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VODUwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJlZXNjYWxlIE1YQyBJbXBsZW1lbnRhdGlvbnMKLSMKLSMgQ09ORklHX0FSQ0hfTVgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVgyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQzkxMjMxIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX01YNT15Ci1DT05GSUdfQVJDSF9NWDUxPXkKLQotIwotIyBNWDUgcGxhdGZvcm1zOgotIwogQ09ORklHX01BQ0hfTVg1MV9CQUJCQUdFPXkKLSMgQ09ORklHX01YQ19JUlFfUFJJT1IgaXMgbm90IHNldAotQ09ORklHX01YQ19UWklDPXkKLSMgQ09ORklHX01YQ19QV00gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfTVhDX0lPTVVYX1YzPXkKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV8zMnY2Sz15Ci1DT05GSUdfQ1BVX1Y3PXkKLUNPTkZJR19DUFVfMzJ2Nz15Ci1DT05GSUdfQ1BVX0FCUlRfRVY3PXkKLUNPTkZJR19DUFVfUEFCUlRfVjc9eQotQ09ORklHX0NQVV9DQUNIRV9WNz15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQotQ09ORklHX0NQVV9DT1BZX1Y2PXkKLUNPTkZJR19DUFVfVExCX1Y3PXkKLUNPTkZJR19DUFVfSEFTX0FTSUQ9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19BUk1fVEhVTUJFRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVNfVExTX1JFRz15Ci1DT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTUKLSMgQ09ORklHX0FSTV9FUlJBVEFfNDMwOTczIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSTV9FUlJBVEFfNDU4NjkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSTV9FUlJBVEFfNDYwMDc1IGlzIG5vdCBzZXQKLUNPTkZJR19DT01NT05fQ0xLREVWPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotQ09ORklHX1ZNU1BMSVRfM0c9eQotIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCi0jIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPXkKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEwMAotIyBDT05GSUdfVEhVTUIyX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfQUVBQkk9eQogIyBDT05GSUdfT0FCSV9DT01QQVQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9MzI3NjgKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0jIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0wCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0wCiBDT05GSUdfQ01ETElORT0ibm9pbml0cmQgY29uc29sZT10dHlteGMwLDExNTIwMCByb290PS9kZXYvbmZzIG5mc3Jvb3Q9MTkyLjE2OC4wLjEwMTovc2hhcmVkL25mcyBpcD1kaGNwIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19WRlA9eQotQ09ORklHX1ZGUHYzPXkKIENPTkZJR19ORU9OPXkKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9NSVNDPW0KLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15CiBDT05GSUdfUE1fREVCVUc9eQotIyBDT05GSUdfUE1fVkVSQk9TRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0FOX1BNX1RSQUNFPXkKLUNPTkZJR19QTV9TTEVFUD15Ci1DT05GSUdfU1VTUEVORD15CiBDT05GSUdfUE1fVEVTVF9TVVNQRU5EPXkKLUNPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQotIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKLSMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iIgogIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIENPTkZJR19DT05ORUNUT1I9eQotQ09ORklHX1BST0NfRVZFTlRTPXkKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NjU1MzYKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiBDT05GSUdfU0NTSV9MT0dHSU5HPXkKIENPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPW0KLSMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQotQ09ORklHX1NBVEFfUE1QPXkKLUNPTkZJR19BVEFfU0ZGPXkKLSMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKIENPTkZJR19NQVJWRUxMX1BIWT15CiBDT05GSUdfREFWSUNPTV9QSFk9eQogQ09ORklHX1FTRU1JX1BIWT15CkBAIC01NDEsNzYxICs3NCw5OCBAQAogQ09ORklHX01ESU9fR1BJTz15CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9bQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiBDT05GSUdfRkVDPXkKLSMgQ09ORklHX0ZFQzIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU4gaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKIENPTkZJR19JTlBVVF9FVkJVRz1tCi0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci0jIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTE04MzIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFPXkKIENPTkZJR19NT1VTRV9QUzI9bQotQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKLUNPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKLUNPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKLUNPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CiBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIPXkKLSMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15CiBDT05GSUdfU0VSSU9fU0VSUE9SVD1tCi1DT05GSUdfU0VSSU9fTElCUFMyPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19BTFRFUkFfUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15CiBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKICMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKIENPTkZJR19TRVJJQUxfSU1YPXkKIENPTkZJR19TRVJJQUxfSU1YX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKICMgQ09ORklHX0kyQ19DT01QQVQgaXMgbm90IHNldAogQ09ORklHX0kyQ19DSEFSREVWPW0KICMgQ09ORklHX0kyQ19IRUxQRVJfQVVUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKIENPTkZJR19JMkNfQUxHT0JJVD1tCiBDT05GSUdfSTJDX0FMR09QQ0Y9bQogQ09ORklHX0kyQ19BTEdPUENBPW0KLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JTVggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dQSU9fU1lTRlM9eQotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19BRFA1NTg4IGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEFDOTcgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKLUNPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15Ci0jIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfTVhDPXkKLQotCiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCi0jCiBDT05GSUdfTU1DX0JMT0NLPW0KLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKLSMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKIENPTkZJR19NTUNfU0RIQ0k9bQotIyBDT05GSUdfTU1DX1NESENJX1BMVEZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CiBDT05GSUdfTEVEU19DTEFTUz1tCi0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLSMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfTFQzNTkzIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLSMgQ09ORklHX0xFRFNfVFJJR0dFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQogQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTD15Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19NWEMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUMl9GU19YQVRUUj15CiBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQogQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRD15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15CiBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQogQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQogQ09ORklHX0VYVDRfRlM9eQotQ09ORklHX0VYVDRfRlNfWEFUVFI9eQogQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0pCRDI9eQotIyBDT05GSUdfSkJEMl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQogQ09ORklHX1FVT1RBPXkKIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRT15CiAjIENPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAotIyBDT05GSUdfUUZNVF9WMiBpcyBub3Qgc2V0Ci1DT05GSUdfUVVPVEFDVEw9eQogQ09ORklHX0FVVE9GU19GUz15CiBDT05GSUdfQVVUT0ZTNF9GUz15CiBDT05GSUdfRlVTRV9GUz15Ci0jIENPTkZJR19DVVNFIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKIENPTkZJR19JU085NjYwX0ZTPW0KIENPTkZJR19KT0xJRVQ9eQogQ09ORklHX1pJU09GUz15CiBDT05GSUdfVURGX0ZTPW0KLUNPTkZJR19VREZfTkxTPXkKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz1tCiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfQ09ORklHRlNfRlM9bQotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WM19BQ0w9eQogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLUNPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJjcDQzNyIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0FTQ0lJPXkKIENPTkZJR19OTFNfSVNPODg1OV8xPW0KLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE1PW0KLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX1VURjg9eQotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVEVDVF9IVU5HX1RBU0sgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUk1fVU5XSU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ19FVE0gaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKIENPTkZJR19LRVlTPXkKLSMgQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKIENPTkZJR19TRUNVUklUWUZTPXkKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwogQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTFpPPXkKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfUkFUSU9OQUw9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPW0KLUNPTkZJR19DUkMxNj15CiBDT05GSUdfQ1JDX1QxMERJRj15Ci1DT05GSUdfQ1JDX0lUVV9UPW0KLUNPTkZJR19DUkMzMj15CiBDT05GSUdfQ1JDNz1tCiBDT05GSUdfTElCQ1JDMzJDPW0KLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfTFpPX0NPTVBSRVNTPXkKLUNPTkZJR19MWk9fREVDT01QUkVTUz15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9uNzcwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvbjc3MF9kZWZjb25maWcKaW5kZXggZGUwYzI4YS4uOTkzZTk0ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9uNzcwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL243NzBfZGVmY29uZmlnCkBAIC0xLDE0MjEgKzEsMTM4IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM4LW9tYXAxCi0jIEZyaSBKYW4gMTggMTA6MjE6MDYgMjAwOAotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNT0QgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVA9eQotCi0jCi0jIFRJIE9NQVAgSW1wbGVtZW50YXRpb25zCi0jCi1DT05GSUdfQVJDSF9PTUFQX09URz15CiBDT05GSUdfQVJDSF9PTUFQMT15Ci0jIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUDMgaXMgbm90IHNldAotCi0jCi0jIE9NQVAgRmVhdHVyZSBTZWxlY3Rpb25zCi0jCi1DT05GSUdfT01BUF9ERUJVR19TUkFNX1BBVENIPXkKIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUz15Ci1DT05GSUdfT01BUF9CT09UX1RBRz15Ci1DT05GSUdfT01BUF9CT09UX1JFQVNPTj15Ci1DT05GSUdfT01BUF9DT01QT05FTlRfVkVSU0lPTj15Ci1DT05GSUdfT01BUF9HUElPX1NXSVRDSD15CiAjIENPTkZJR19PTUFQX01VWCBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9TVEk9eQotQ09ORklHX09NQVBfU1RJX0NPTlNPTEU9eQotQ09ORklHX09NQVBfTUNCU1A9eQotQ09ORklHX09NQVBfTU1VX0ZXSz15CiBDT05GSUdfT01BUF9NQk9YX0ZXSz15Ci0jIENPTkZJR19PTUFQX01QVV9USU1FUiBpcyBub3Qgc2V0CiBDT05GSUdfT01BUF8zMktfVElNRVI9eQotQ09ORklHX09NQVBfMzJLX1RJTUVSX0haPTEyOAogQ09ORklHX09NQVBfRE1fVElNRVI9eQotQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDE9eQotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIENvcmUgVHlwZQotIwotIyBDT05GSUdfQVJDSF9PTUFQNzMwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT01BUDE1WFggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT01BUDE2WFg9eQotCi0jCi0jIE9NQVAgQm9hcmQgVHlwZQotIwotIyBDT05GSUdfTUFDSF9PTUFQX0lOTk9WQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfSDIgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX0gzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9PU0sgaXMgbm90IHNldAogQ09ORklHX01BQ0hfTk9LSUE3NzA9eQotIyBDT05GSUdfTUFDSF9PTUFQX0dFTkVSSUMgaXMgbm90IHNldAotCi0jCi0jIE9NQVAgQ1BVIFNwZWVkCi0jCiBDT05GSUdfT01BUF9DTE9DS1NfU0VUX0JZX0JPT1RMT0FERVI9eQogQ09ORklHX09NQVBfQVJNXzIxNk1IWj15Ci0jIENPTkZJR19PTUFQX0FSTV8xOTJNSFogaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9BUk1fMTY4TUhaIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfQVJNXzEyME1IWiBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUFQX0FSTV82ME1IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0FSTV8zME1IWiBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIwotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX0FSTTkyNlQ9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUSj15Ci1DT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEyOAotIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0icm9vdD0xZjAzIHJvb3Rmc3R5cGU9amZmczIgdGltZSIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBGcmVxdWVuY3kgc2NhbGluZwotIwotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCiBDT05GSUdfUE09eQotIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QTV9TTEVFUD15Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci1DT05GSUdfU1VTUEVORD15Ci0jIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19QTV9SVU5USU1FPXkKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkVURklMVEVSX05FVExJTks9eQotIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKIENPTkZJR19CVD15CiBDT05GSUdfQlRfTDJDQVA9eQogQ09ORklHX0JUX1NDTz15CiBDT05GSUdfQlRfUkZDT01NPXkKIENPTkZJR19CVF9SRkNPTU1fVFRZPXkKIENPTkZJR19CVF9CTkVQPXkKLSMgQ09ORklHX0JUX0JORVBfTUNfRklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSIGlzIG5vdCBzZXQKIENPTkZJR19CVF9ISURQPXkKLQotIwotIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0JUX0hDSVVTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCVFVTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCVFNESU8gaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJVUFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCQ00yMDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJQQTEwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCRlVTQiBpcyBub3Qgc2V0Ci1DT05GSUdfQlRfSENJQlJGNjE1MD15Ci0jIENPTkZJR19CVF9IQ0lINFAgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJVkhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIENPTkZJR19DT05ORUNUT1I9eQogIyBDT05GSUdfUFJPQ19FVkVOVFMgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAotIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX09NQVBfSFc9eQotQ09ORklHX01URF9OQU5EX0lEUz15Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogQ09ORklHX1RVTj15Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1VTQk5FVD15CiAjIENPTkZJR19VU0JfTkVUX0FYODgxN1ggaXMgbm90IHNldAotQ09ORklHX1VTQl9ORVRfQ0RDRVRIRVI9eQotIyBDT05GSUdfVVNCX05FVF9ETTk2MDEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9HTDYyMEEgaXMgbm90IHNldAotQ09ORklHX1VTQl9ORVRfTkVUMTA4MD15Ci0jIENPTkZJR19VU0JfTkVUX1BMVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfTUNTNzgzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX1JORElTX0hPU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX05FVF9DRENfU1VCU0VUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTkVUX1pBVVJVUz15Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAogQ09ORklHX1BQUD15Ci0jIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKIENPTkZJR19QUFBfRklMVEVSPXkKIENPTkZJR19QUFBfQVNZTkM9eQotIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKIENPTkZJR19QUFBfREVGTEFURT15CiBDT05GSUdfUFBQX0JTRENPTVA9eQotIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAotIyBDT05GSUdfUFBQT0UgaXMgbm90IHNldAotIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz15Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9PTUFQPXkKLSMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CiBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9VQ0IxNDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIxMDIgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjEwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT1tCi1DT05GSUdfSFdfUkFORE9NX09NQVA9bQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi0jIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfT01BUD15Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfSVNQMTMwMV9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKLUNPTkZJR19TRU5TT1JTX1RMVjMyMEFJQzIzPXkKLSMgQ09ORklHX0dQSU9FWFBBTkRFUl9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKIENPTkZJR19TUEk9eQotIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TUElfTUFTVEVSPXkKLQotIwotIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwotIwotQ09ORklHX1NQSV9CSVRCQU5HPXkKIENPTkZJR19TUElfT01BUF9VV0lSRT15Ci0KLSMKLSMgU1BJIFByb3RvY29sIE1hc3RlcnMKLSMKLSMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UU0MyMTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UU0MyMTAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UU0MyMTBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UU0MyMzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19PTUFQX1dBVENIRE9HPXkKLQotIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15Ci0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9EREMgaXMgbm90IHNldAotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9ERUZFUlJFRF9JTz15Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfVVZFU0EgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfT01BUD15CiBDT05GSUdfRkJfT01BUF9MQ0RDX0VYVEVSTkFMPXkKIENPTkZJR19GQl9PTUFQX0xDRENfSFdBNzQyPXkKLSMgQ09ORklHX0ZCX09NQVBfTENEQ19CTElaWkFSRCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfT01BUF9NQU5VQUxfVVBEQVRFPXkKIENPTkZJR19GQl9PTUFQX0xDRF9NSVBJRD15Ci0jIENPTkZJR19GQl9PTUFQX0JPT1RMT0FERVJfSU5JVCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfT01BUF9DT05TSVNURU5UX0RNQV9TSVpFPTIKLSMgQ09ORklHX0ZCX09NQVBfRE1BX1RVTkUgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwogQ09ORklHX1NPVU5EPXkKLQotIwotIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKLSMKIENPTkZJR19TTkQ9eQotQ09ORklHX1NORF9USU1FUj15Ci1DT05GSUdfU05EX1BDTT15Ci1DT05GSUdfU05EX0hXREVQPXkKLUNPTkZJR19TTkRfUkFXTUlEST15Ci0jIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAotQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15Ci0jIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBHZW5lcmljIGRldmljZXMKLSMKIENPTkZJR19TTkRfRFVNTVk9eQotIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAotCi0jCi0jIEFMU0EgQVJNIGRldmljZXMKLSMKLUNPTkZJR19TTkRfT01BUF9BSUMyMz15Ci0jIENPTkZJR19TTkRfT01BUF9UU0MyMTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TWDEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09NQVBfVFNDMjEwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT01BUDI0WFhfRUFDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgZGV2aWNlcwotIwotCi0jCi0jIFVTQiBkZXZpY2VzCi0jCiBDT05GSUdfU05EX1VTQl9BVURJTz15Ci0jIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gb24gQ2hpcCBhdWRpbyBzdXBwb3J0Ci0jCi0jIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKLQotIwotIyBTb0MgQXVkaW8gc3VwcG9ydCBmb3IgU3VwZXJICi0jCi0KLSMKLSMgT3BlbiBTb3VuZCBTeXN0ZW0KLSMKLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLUNPTkZJR19ISURfREVCVUc9eQotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRkYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NVU1BFTkQ9eQotIyBDT05GSUdfVVNCX1BFUlNJU1QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PVEc9eQogIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKIENPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIwogQ09ORklHX1VTQl9TRVJJQUw9eQogQ09ORklHX1VTQl9TRVJJQUxfQ09OU09MRT15Ci0jIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0FJUlBSSU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQVJLMzExNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0JFTEtJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NIMzQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfV0hJVEVIRUFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0VNUEVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU8gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9GVU5TT0ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9JUEFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUX1RJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfR0FSTUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSVBXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9QREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0xTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tPQklMX1NDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX01DVF9VMjMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzcyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX01PUzc4NDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzPXkKLSMgQ09ORklHX1VTQl9TRVJJQUxfT1RJNjg1OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9USSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1hJUkNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX09QVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKIENPTkZJR19VU0JfR0FER0VUPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVRfT01BUD15Ci1DT05GSUdfVVNCX09NQVA9eQotIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VUSD1tCi1DT05GSUdfVVNCX0VUSF9STkRJUz15Ci0jIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAogQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQogQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVD15Ci0jIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKLSMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCiBDT05GSUdfTU1DX09NQVA9eQotIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIENCVVMgc3VwcG9ydAotIwotQ09ORklHX0NCVVM9eQotQ09ORklHX0NCVVNfVEFIVk89eQotQ09ORklHX0NCVVNfVEFIVk9fVVNFUj15Ci1DT05GSUdfQ0JVU19UQUhWT19VU0I9eQotIyBDT05GSUdfQ0JVU19UQUhWT19VU0JfSE9TVF9CWV9ERUZBVUxUIGlzIG5vdCBzZXQKLUNPTkZJR19DQlVTX1JFVFU9eQotQ09ORklHX0NCVVNfUkVUVV9VU0VSPXkKLUNPTkZJR19DQlVTX1JFVFVfUE9XRVJCVVRUT049eQotQ09ORklHX0NCVVNfUkVUVV9SVEM9eQotQ09ORklHX0NCVVNfUkVUVV9XRFQ9eQotIyBDT05GSUdfQ0JVU19SRVRVX0hFQURTRVQgaXMgbm90IHNldAotQ09ORklHX09NQVBfRFNQPXkKLSMgQ09ORklHX09NQVBfRFNQX01CQ01EX1ZFUkJPU0UgaXMgbm90IHNldAotQ09ORklHX09NQVBfRFNQX0ZCRVhQT1JUPXkKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX1NVTU1BUlk9eQotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15Ci0jIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotIyBDT05GSUdfUk9PVF9ORlMgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQ09ERVBBR0VfODUyPXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE1PXkKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX1VURjg9eQotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLUNPTkZJR19JTlNUUlVNRU5UQVRJT049eQotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRVJST1JTPXkKLSMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKIENPTkZJR19TRUNVUklUWT15Ci0jIENPTkZJR19TRUNVUklUWV9ORVRXT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9ST09UUExVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9MT1dNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfQ1JDX0NDSVRUPXkKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvbjh4MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL244eDBfZGVmY29uZmlnCmluZGV4IDk0MDVlMzIuLjU2YWViYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvbjh4MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9uOHgwX2RlZmNvbmZpZwpAQCAtMSwxMjI2ICsxLDk0IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM1Ci0jIFRodSBBdWcgIDYgMjI6MTc6MjMgMjAwOQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0NMQVNTSUNfUkNVIGlzIG5vdCBzZXQKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfTkFNRVNQQUNFUz15Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLUNPTkZJR19SRF9CWklQMj15Ci1DT05GSUdfUkRfTFpNQT15Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLQotIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycwotIwotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLUNPTkZJR19DT01QQVRfQlJLPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9DTEs9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVA9eQotCi0jCi0jIFRJIE9NQVAgSW1wbGVtZW50YXRpb25zCi0jCi1DT05GSUdfQVJDSF9PTUFQX09URz15Ci0jIENPTkZJR19BUkNIX09NQVAxIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX09NQVAyUExVUz15CiBDT05GSUdfQVJDSF9PTUFQMj15Ci0jIENPTkZJR19BUkNIX09NQVAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUDQgaXMgbm90IHNldAotCi0jCi0jIE9NQVAgRmVhdHVyZSBTZWxlY3Rpb25zCi0jCiBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1M9eQogIyBDT05GSUdfT01BUF9NVVggaXMgbm90IHNldAogIyBDT05GSUdfT01BUF9NQ0JTUCBpcyBub3Qgc2V0CiBDT05GSUdfT01BUF9NQk9YX0ZXSz15Ci0jIENPTkZJR19PTUFQX01QVV9USU1FUiBpcyBub3Qgc2V0CiBDT05GSUdfT01BUF8zMktfVElNRVI9eQotQ09ORklHX09NQVBfMzJLX1RJTUVSX0haPTEyOAotQ09ORklHX09NQVBfRE1fVElNRVI9eQotIyBDT05GSUdfT01BUF9QTV9OT05FIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX1BNX05PT1A9eQotIyBDT05GSUdfTUFDSF9PTUFQX0dFTkVSSUMgaXMgbm90IHNldAotCi0jCi0jIE9NQVAgQ29yZSBUeXBlCi0jCiBDT05GSUdfQVJDSF9PTUFQMjQyMD15Ci0jIENPTkZJR19BUkNIX09NQVAyNDMwIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIEJvYXJkIFR5cGUKLSMKLUNPTkZJR19NQUNIX09NQVAyX1RVU0I2MDEwPXkKLSMgQ09ORklHX01BQ0hfT01BUF9INCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfQVBPTExPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfMjQzMFNEUCBpcyBub3Qgc2V0Ci1DT05GSUdfTUFDSF9OT0tJQV9OODAwPXkKLUNPTkZJR19NQUNIX05PS0lBX044MTA9eQotQ09ORklHX01BQ0hfTk9LSUFfTjgxMF9XSU1BWD15CiBDT05GSUdfTUFDSF9OT0tJQV9OOFgwPXkKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9WNj15Ci0jIENPTkZJR19DUFVfMzJ2NksgaXMgbm90IHNldAotQ09ORklHX0NQVV8zMnY2PXkKLUNPTkZJR19DUFVfQUJSVF9FVjY9eQotQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQotQ09ORklHX0NQVV9DQUNIRV9WNj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQotQ09ORklHX0NQVV9DT1BZX1Y2PXkKLUNPTkZJR19DUFVfVExCX1Y2PXkKLUNPTkZJR19DUFVfSEFTX0FTSUQ9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSTV9FUlJBVEFfNDExOTIwIGlzIG5vdCBzZXQKLUNPTkZJR19DT01NT05fQ0xLREVWPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEyOAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTAKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX0xFRFM9eQotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLSMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MTBDMDgwMDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MTAyMDAwMDAKLSMgQ09ORklHX1pCT09UX1JPTSBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L21tY2JsazBwMiBjb25zb2xlPXR0eVMyLDExNTIwMG44IGRlYnVnIGVhcmx5cHJpbnRrIHJvb3R3YWl0IgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKIENPTkZJR19WRlA9eQotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCiBDT05GSUdfUE09eQotIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BNX1NMRUVQPXkKLUNPTkZJR19TVVNQRU5EPXkKLUNPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQotIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfUE1fUlVOVElNRT15Ci1DT05GSUdfUE1fT1BTPXkKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi0jIENPTkZJR19QQUNLRVQgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKLSMgQ09ORklHX01URF9DSEFSIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX01URF9PVFA9eQotIyBDT05GSUdfTVREX0JMS0RFVlMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DS19STyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX09ORU5BTkQ9eQotIyBDT05GSUdfTVREX09ORU5BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EX0dFTkVSSUMgaXMgbm90IHNldAogQ09ORklHX01URF9PTkVOQU5EX09NQVAyPXkKIENPTkZJR19NVERfT05FTkFORF9PVFA9eQotIyBDT05GSUdfTVREX09ORU5BTkRfMlhfUFJPR1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORF9TSU0gaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15CiAjIENPTkZJR19JMkNfQ09NUEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19IRUxQRVJfQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU01CVVMgaXMgbm90IHNldAotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi0jIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfT01BUD15Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19YSUxJTlggaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfU1BJPXkKLSMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19TUElfT01BUDI0WFg9eQotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCi0jIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfODhQTTg2MFggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfSTJDUExEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKIENPTkZJR19NRU5FTEFVUz15Ci0jIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01BWDg5MjUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg5OTQgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCNDUwMF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19SRUdVTEFUT1I9eQotIyBDT05GSUdfUkVHVUxBVE9SX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVVNFUlNQQUNFX0NPTlNVTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9NQVgxNTg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9NQVg4NjQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9NQVg4NjYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9MUDM5NzEgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9UUFM2NTA3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQogQ09ORklHX1VTQl9ERUJVRz15CiBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NVU1BFTkQ9eQotQ09ORklHX1VTQl9PVEc9eQogIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01VU0JfSERSQz15Ci1DT05GSUdfVVNCX1RVU0I2MDEwPXkKLSMgQ09ORklHX1VTQl9NVVNCX0hPU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfUEVSSVBIRVJBTCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01VU0JfT1RHPXkKIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQz15Ci1DT05GSUdfVVNCX01VU0JfSERSQ19IQ0Q9eQogIyBDT05GSUdfTVVTQl9QSU9fT05MWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU5WRU5UUkFfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9USV9DUFBJX0RNQSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1RVU0JfT01BUF9ETUE9eQogQ09ORklHX1VTQl9NVVNCX0RFQlVHPXkKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0KLSMKLSMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KLSMKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVQ9eQogQ09ORklHX1VTQl9HQURHRVRfREVCVUc9eQogQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVM9eQotQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTIKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQotIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfRVRIPXkKLUNPTkZJR19VU0JfRVRIX1JORElTPXkKK0NPTkZJR19VU0JfRVRIPW0KIENPTkZJR19VU0JfRVRIX0VFTT15Ci0jIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUFTU19TVE9SQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19OT0tJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19NVUxUSSBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi1DT05GSUdfVVNCX09UR19VVElMUz15Ci0jIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTUDEzMDFfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVUxQSSBpcyBub3Qgc2V0Ci1DT05GSUdfTk9QX1VTQl9YQ0VJVj15CiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKLSMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX09NQVA9eQotIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi0jIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKLSMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfU1VNTUFSWT15Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15Ci1DT05GSUdfSkZGUzJfWkxJQj15CiBDT05GSUdfSkZGUzJfTFpPPXkKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15Ci0jIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwogQ09ORklHX1BSSU5US19USU1FPXkKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fVU5XSU5EPXkKIENPTkZJR19ERUJVR19VU0VSPXkKIENPTkZJR19ERUJVR19FUlJPUlM9eQotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPXkKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0xaT19DT01QUkVTUz15Ci1DT05GSUdfTFpPX0RFQ09NUFJFU1M9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfREVDT01QUkVTU19CWklQMj15Ci1DT05GSUdfREVDT01QUkVTU19MWk1BPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL25lb2NvcmU5MjZfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uZW9jb3JlOTI2X2RlZmNvbmZpZwppbmRleCBkMTY1Yzc1Li40NjJkZDE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL25lb2NvcmU5MjZfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmVvY29yZTkyNl9kZWZjb25maWcKQEAgLTEsMTMwMSArMSwxMDQgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNy1yYzEKLSMgVHVlIEp1bCAyOSAxMDo0Njo1NCAyMDA4Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE3Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX05BTUVTUEFDRVM9eQotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLSMgQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0sgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTk9PUD15Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9BVDkxPXkKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU003WDAwQSBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIwotCi0jCi0jIEF0bWVsIEFUOTEgU3lzdGVtLW9uLUNoaXAKLSMKLSMgQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05MjYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjEgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjM9eQotIyBDT05GSUdfQVJDSF9BVDkxU0FNOVJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTlHMjAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxQ0FQOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFYNDAgaXMgbm90IHNldAotQ09ORklHX0FUOTFfUE1DX1VOSVQ9eQotCi0jCi0jIEFUOTFTQU05MjYzIEJvYXJkIFR5cGUKLSMKLSMgQ09ORklHX01BQ0hfQVQ5MVNBTTkyNjNFSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1VTQl9BOTI2MyBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9ORU9DT1JFOTI2PXkKLQotIwotIyBBVDkxIEJvYXJkIE9wdGlvbnMKLSMKIENPTkZJR19NVERfQVQ5MV9EQVRBRkxBU0hfQ0FSRD15Ci0KLSMKLSMgQVQ5MSBGZWF0dXJlIFNlbGVjdGlvbnMKLSMKLSMgQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVQ5MV9USU1FUl9IWj0xMDAKLUNPTkZJR19BVDkxX0VBUkxZX0RCR1U9eQotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDAgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDEgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDIgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDMgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDQgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDUgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX0FSTTkyNlQ9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUSj15Ci1DT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEwMAotIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSIiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0tFWT15Ci0jIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15CiBDT05GSUdfSVBfUE5QX1JBUlA9eQogQ09ORklHX05FVF9JUElQPXkKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogQ09ORklHX0lQVjY9eQotIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPXkKLSMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNl9TSVQ9eQotQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQotIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15CiAjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKIENPTkZJR19ORlRMPXkKIENPTkZJR19ORlRMX1JXPXkKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQkxPQ0syTVREPXkKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkQ9eQotQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURT15CiBDT05GSUdfTVREX05BTkRfRUNDX1NNQz15Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFPXkKIENPTkZJR19NVERfTkFORF9BVE1FTD15Ci1DT05GSUdfTVREX05BTkRfQVRNRUxfRUNDX0hXPXkKLSMgQ09ORklHX01URF9OQU5EX0FUTUVMX0VDQ19TT0ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0FUTUVMX0VDQ19OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX1BMQVRGT1JNPXkKLSMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9OQkQ9eQotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKIENPTkZJR19BVE1FTF9QV009eQogQ09ORklHX0FUTUVMX1RDTElCPXkKLUNPTkZJR19BVE1FTF9UQ0JfQ0xLU1JDPXkKLUNPTkZJR19BVE1FTF9UQ0JfQ0xLU1JDX0JMT0NLPTAKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1FTF9TU0MgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwotIyBDT05GSUdfQkxLX0RFVl9TRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKIENPTkZJR19TTVNDX1BIWT15Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKIENPTkZJR19NQUNCPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFPXkKLUNPTkZJR19NT1VTRV9QUzI9eQotQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKLUNPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKLUNPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKLUNPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQotQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKLSMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CiBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVUNCMTQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQogIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEPXkKLSMgQ09ORklHX05fSERMQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SSVNDT004IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQRUNJQUxJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SSU8gaXMgbm90IHNldAotIyBDT05GSUdfU1RBTERSViBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX0FUTUVMPXkKIENPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfQVRNRUxfUERDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9BVE1FTF9UVFlBVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKIENPTkZJR19TUEk9eQotQ09ORklHX1NQSV9NQVNURVI9eQotCi0jCi0jIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCi0jCiBDT05GSUdfU1BJX0FUTUVMPXkKLSMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUHJvdG9jb2wgTWFzdGVycwotIwotIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9BVE1FTD15Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQotIyBDT05GSUdfTENEX0xUVjM1MFFWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xDRF9WR0cyNDMyQTQgaXMgbm90IHNldAotIyBDT05GSUdfTENEX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKIENPTkZJR19CQUNLTElHSFRfQVRNRUxfTENEQz15Ci0jIENPTkZJR19CQUNLTElHSFRfQVRNRUxfUFdNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9DT1JHSSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQogQ09ORklHX0xPR089eQotQ09ORklHX0xPR09fTElOVVhfTU9OTz15Ci1DT05GSUdfTE9HT19MSU5VWF9WR0ExNj15Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLUNPTkZJR19ISURfREVCVUc9eQotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRkYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci1DT05GSUdfVVNCX0RFVklDRV9DTEFTUz15Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwotQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKK0NPTkZJR19VU0JfU1RPUkFHRT15CiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz15Ci1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CiBDT05GSUdfU0RJT19VQVJUPXkKLSMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0Ci1DT05GSUdfTU1DX0FUOTE9eQotIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIworQ09ORklHX01NQ19BVDkxPW0KIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfQVVUT0ZTX0ZTPXkKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWT15Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci0jIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9uZXBvbnNldF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL25lcG9uc2V0X2RlZmNvbmZpZwppbmRleCAxNzEyNjVlLi5kN2RjOTkyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL25lcG9uc2V0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL25lcG9uc2V0X2RlZmNvbmZpZwpAQCAtMSwxMTQxICsxLDkwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTEKLSMgV2VkIE1hciAgOSAxNDoyODoyNiAyMDA1Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19JT01BUD15Ci0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NBMTEwMD15Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotCi0jCi0jIFNBMTF4MCBJbXBsZW1lbnRhdGlvbnMKLSMKIENPTkZJR19TQTExMDBfQVNTQUJFVD15CiBDT05GSUdfQVNTQUJFVF9ORVBPTlNFVD15Ci0jIENPTkZJR19TQTExMDBfQ0VSRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfQ09MTElFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9IMzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSDM2MDAgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0JBREdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSk9STkFEQTcyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSEFDS0tJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfTEFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfUExFQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfU0hBTk5PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfU0lNUEFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9TU1AgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX1NBMTEwMD15Ci1DT05GSUdfQ1BVXzMydjQ9eQotQ09ORklHX0NQVV9BQlJUX0VWND15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y0V0I9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfVExCX1Y0V0I9eQotQ09ORklHX0NQVV9NSU5JQ0FDSEU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX1NBMTExMT15Ci1DT05GSUdfRE1BQk9VTkNFPXkKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotQ09ORklHX0lTQT15Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwogQ09ORklHX1BDQ0FSRD15Ci0jIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQT15Ci0KLSMKLSMgUEMtY2FyZCBicmlkZ2VzCi0jCi0jIENPTkZJR19JODIzNjUgaXMgbm90IHNldAotIyBDT05GSUdfVENJQyBpcyBub3Qgc2V0CiBDT05GSUdfUENNQ0lBX1NBMTEwMD15CiBDT05GSUdfUENNQ0lBX1NBMTExMT15Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19ESVNDT05USUdNRU09eQogQ09ORklHX0xFRFM9eQotQ09ORklHX0xFRFNfVElNRVI9eQogQ09ORklHX0xFRFNfQ1BVPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHg4MDAwMAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHhjMTAwMDAwMAogQ09ORklHX1pCT09UX1JPTT15CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQTAsMzg0MDBuOCBjcHVmcmVxPTIyMTIwMCBydyByb290PS9kZXYvbXRkYmxvY2syIG10ZHBhcnRzPXNhMTEwMDo1MTJLKGJvb3QpLDFNKGtlcm5lbCksMjU2MEsoaW5pdHJkKSw0TShyb290KSBsb2FkX3JhbWRpc2s9MSBwcm9tcHRfcmFtZGlzaz0wIG1lbT0zMk0gbm9pbml0cmQgaW5pdHJkPTB4YzA4MDAwMDAsM00iCi1DT05GSUdfQ1BVX0ZSRVE9eQotIyBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0UgaXMgbm90IHNldAotQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRT15Ci0jIENPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT15Ci0jIENPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAotQ09ORklHX0NQVV9GUkVRX1NBMTExMD15Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15CiBDT05GSUdfQklORk1UX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAotQ09ORklHX0FQTT15Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCi1DT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1BBUlRJVElPTlM9eQotQ09ORklHX01URF9DT05DQVQ9eQotQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKLUNPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwotIyBDT05GSUdfTVREX0NIQVIgaXMgbm90IHNldAotQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLUNPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLUNPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKLUNPTkZJR19NVERfQ0ZJX05PU1dBUD15Ci0jIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLUNPTkZJR19NVERfUkFNPXkKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotQ09ORklHX01URF9TQTExMDA9eQotIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotIyBDT05GSUdfUE5QIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfWEQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCi0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJPW0KLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCi1DT05GSUdfQkxLX0RFVl9TRD1tCi0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NDU0lfNzAwMEZBU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUhBMTUyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FIQTE1NDIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RUQzMyODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQV9QSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dFTkVSSUNfTkNSNTM4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dFTkVSSUNfTkNSNTM4MF9NTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkNSNTNDNDA2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BBUzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUFNJMjQwSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ19GQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M0MTYgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9UMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfVTE0XzM0RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgU0NTSSBhZGFwdGVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDTUNJQV9BSEExNTJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9GRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9OSU5KQV9TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9RTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1NZTTUzQzUwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15Ci0jIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVENQRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CitDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorQ09ORklHX01URF9DRkk9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorQ09ORklHX01URF9SQU09eQorQ09ORklHX01URF9TQTExMDA9eQorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKK0NPTkZJR19TQ1NJPW0KK0NPTkZJR19CTEtfREVWX1NEPW0KIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBTkNFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfVkVORE9SX1NNQz15Ci0jIENPTkZJR19XRDgweDMgaXMgbm90IHNldAotIyBDT05GSUdfVUxUUkEgaXMgbm90IHNldAotQ09ORklHX1NNQzkxWD15CiBDT05GSUdfU01DOTE5ND15Ci0jIENPTkZJR19ORVRfVkVORE9SX1JBQ0FMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUMTcwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVBDQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPQ0tFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKK0NPTkZJR19TTUM5MVg9eQogQ09ORklHX05FVF9QQ01DSUE9eQotIyBDT05GSUdfUENNQ0lBXzNDNTg5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV8zQzU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfRk1WSjE4WCBpcyBub3Qgc2V0CiBDT05GSUdfUENNQ0lBX1BDTkVUPXkKLSMgQ09ORklHX1BDTUNJQV9OTUNMQU4gaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1NNQzkxQzkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9YSVJDMlBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9BWE5FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfVFNERVY9eQotQ09ORklHX0lOUFVUX1RTREVWX1NDUkVFTl9YPTI0MAotQ09ORklHX0lOUFVUX1RTREVWX1NDUkVFTl9ZPTMyMAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IEkvTyBkcml2ZXJzCi0jCi0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfR0FNRVBPUlQ9eQotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPW0KLSMgQ09ORklHX1NFUklPX0NUODJDNzEwIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TQTExMTE9eQotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQotQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9bQorQ09ORklHX1NFUklPX1NBMTExMT15CiBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEPXkKLSMgQ09ORklHX0NPTVBVVE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST0NLRVRQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NZQ0xBREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RJR0lFUENBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RJR0kgaXMgbm90IHNldAotIyBDT05GSUdfRVNQU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PWEFfSU5URUxMSU8gaXMgbm90IHNldAotIyBDT05GSUdfTU9YQV9TTUFSVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5DTElOS01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX05fSERMQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SSVNDT004IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQRUNJQUxJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SSU8gaXMgbm90IHNldAotIyBDT05GSUdfU1RBTERSViBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9DUz15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKIENPTkZJR19TRVJJQUxfU0ExMTAwPXkKIENPTkZJR19TRVJJQUxfU0ExMTAwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9NjQKLQotIwotIyBJUE1JCi0jCi0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi1DT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TQTExMDBfV0FUQ0hET0c9bQotCi0jCi0jIElTQS1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVhDT01XRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XRFQgaXMgbm90IHNldAotCi0jCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCi0jIENPTkZJR19EUk0gaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotQ09ORklHX0kyQ19BTEdPQklUPXkKLSMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQ19FTEVLVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBTZW5zb3JzIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDX1NFTlNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BU0IxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GU0NIRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GU0NQT1MgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCitDT05GSUdfV0FUQ0hET0c9eQorQ09ORklHX1NBMTEwMF9XQVRDSERPRz1tCiBDT05GSUdfRkI9eQotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CiBDT05GSUdfRkJfU0ExMTAwPXkKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTURBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQotCi0jCi0jIExvZ28gY29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCiBDT05GSUdfU09VTkQ9eQotCi0jCi0jIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQotIwotIyBDT05GSUdfU05EIGlzIG5vdCBzZXQKLQotIwotIyBPcGVuIFNvdW5kIFN5c3RlbQotIwogQ09ORklHX1NPVU5EX1BSSU1FPXkKLSMgQ09ORklHX1NPVU5EX0JUODc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0ZVU0lPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9DUzQyODEgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX01TTkRDTEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX01TTkRQSU4gaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfT1NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1RWTUlYRVIgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfQUQxOTgwIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIworIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPW0KIENPTkZJR19VU0JfREVCVUc9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotQ09ORklHX1VTQl9PSENJX0hDRD1tCi0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CTFVFVE9PVEhfVFRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSURJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwotQ09ORklHX1VTQl9TVE9SQUdFPW0KLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1JXX0RFVEVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT1VTRT1tCi0jIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XQUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FR0FMQVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKLQotIwotIyBWaWRlbzRMaW51eCBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE11bHRpbWVkaWEgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPW0KLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVRLSVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVRTRVJWTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEFUTS9EU0wgZHJpdmVycwotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9bQorQ09ORklHX1VTQl9TVE9SQUdFPW0KIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBYRlMgc3VwcG9ydAotIwotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz1tCiBDT05GSUdfTVNET1NfRlM9bQogQ09ORklHX1ZGQVRfRlM9bQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfU1lTRlM9eQotIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLSMgQ09ORklHX0pGRlMyX0ZTX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfTk9SX0VDQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKIENPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTVNET1NfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKIENPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPW0KLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfU0xBQj15Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL25ldHdpbmRlcl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL25ldHdpbmRlcl9kZWZjb25maWcKaW5kZXggNzhmNThhOS4uMjVlZDc3MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9uZXR3aW5kZXJfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmV0d2luZGVyX2RlZmNvbmZpZwpAQCAtMSwxMDQzICsxLDg3IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmMxLWJrMgotIyBTdW4gTWFyIDI3IDE1OjE4OjQyIDIwMDUKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX01NVT15Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0lPTUFQPXkKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQVJDSF9GT09UQlJJREdFPXkKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotCi0jCi0jIEZvb3RicmlkZ2UgSW1wbGVtZW50YXRpb25zCi0jCi0jIENPTkZJR19BUkNIX0NBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QRVJTT05BTF9TRVJWRVIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMjg1X0FERElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTI4NV9IT1NUIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05FVFdJTkRFUj15Ci1DT05GSUdfRk9PVEJSSURHRT15Ci1DT05GSUdfRk9PVEJSSURHRV9IT1NUPXkKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9TQTExMD15Ci1DT05GSUdfQ1BVXzMydjQ9eQotQ09ORklHX0NQVV9BQlJUX0VWND15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y0V0I9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0I9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi1DT05GSUdfSVNBPXkKLUNPTkZJR19JU0FfRE1BPXkKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15Ci1DT05GSUdfUENJX05BTUVTPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiBDT05GSUdfTEVEUz15Ci0jIENPTkZJR19MRURTX1RJTUVSIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX0NQVT15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0icm9vdD0weDMwMSIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQogQ09ORklHX0JJTkZNVF9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCi0jIENPTkZJR19NVEQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1BBUlBPUlQ9eQotQ09ORklHX1BBUlBPUlRfUEM9eQotIyBDT05GSUdfUEFSUE9SVF9TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVF9QQ19GSUZPIGlzIG5vdCBzZXQKLUNPTkZJR19QQVJQT1JUX1BDX1NVUEVSSU89eQotIyBDT05GSUdfUEFSUE9SVF9BUkMgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVF9HU0MgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVF8xMjg0IGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUCBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1hEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUklERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIwotQ09ORklHX0lERT15Ci1DT05GSUdfQkxLX0RFVl9JREU9eQotCi0jCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPXkKLUNPTkZJR19JREVESVNLX01VTFRJX01PREU9eQotIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLUNPTkZJR19JREVfR0VORVJJQz15Ci1DT05GSUdfQkxLX0RFVl9JREVQQ0k9eQotIyBDT05GSUdfSURFUENJX1NIQVJFX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfU0w4MkMxMDU9eQotQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15Ci0jIENPTkZJR19CTEtfREVWX0lERURNQV9GT1JDRUQgaXMgbm90IHNldAotQ09ORklHX0lERURNQV9QQ0lfQVVUTz15Ci0jIENPTkZJR19JREVETUFfT05MWURJU0sgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1k4MkM2OTMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IUFQzNFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAotIyBDT05GSUdfSURFX0NISVBTRVRTIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQT15Ci0jIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKLUNPTkZJR19JREVETUFfQVVUTz15Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMk8gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRMSU5LX0RFVj15CiBDT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15CiBDT05GSUdfSVBfUE5QX1JBUlA9eQotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfVENQRElBRz15Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAotCi0jCi0jIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0s9eQotIyBDT05GSUdfSVBfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9DVF9QUk9UT19TQ1RQIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9GVFA9eQotIyBDT05GSUdfSVBfTkZfSVJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX1RGVFAgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQU1BTkRBIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9RVUVVRT15CiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9eQotIyBDT05GSUdfSVBfTkZfTUFUQ0hfTElNSVQgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9NQUMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFUQ0hfUEtUVFlQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9NQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX01VTFRJUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9UT1MgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX0VDTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9EU0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX0FIX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9MRU5HVEggaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX1RDUE1TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFUQ0hfU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTlRSQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX1JFQUxNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFUQ0hfQ09NTUVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfRklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX1RBUkdFVF9MT0cgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0cgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9OQVQgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFOR0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0CitDT05GSUdfUEFSUE9SVD15CitDT05GSUdfUEFSUE9SVF9QQz15CitDT05GSUdfUEFSUE9SVF9QQ19TVVBFUklPPXkKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorQ09ORklHX0lERT15CitDT05GSUdfQkxLX0RFVl9TTDgyQzEwNT15CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfRVRIRVJUQVAgaXMgbm90IHNldAotCi0jCi0jIEFSQ25ldCBkZXZpY2VzCi0jCi0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIwogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBTkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX1JBQ0FMIGlzIG5vdCBzZXQKLQotIwotIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX05FVF9UVUxJUD15Ci0jIENPTkZJR19ERTIxMDRYIGlzIG5vdCBzZXQKIENPTkZJR19UVUxJUD15Ci0jIENPTkZJR19UVUxJUF9NV0kgaXMgbm90IHNldAogQ09ORklHX1RVTElQX01NSU89eQotIyBDT05GSUdfVFVMSVBfTkFQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERTRYNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU5CT05EXzg0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETTkxMDIgaXMgbm90IHNldAotIyBDT05GSUdfQVQxNzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JU0EgaXMgbm90IHNldAogQ09ORklHX05FVF9QQ0k9eQotIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDMzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFJJQ09UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAotIyBDT05GSUdfQ1M4OXgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RHUlMgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRUFMTlggaXMgbm90IHNldAotIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CiBDT05GSUdfTkUyS19QQ0k9eQotIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAotIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPQ0tFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRT15Ci1DT05GSUdfTU9VU0VfUFMyPXkKIENPTkZJR19NT1VTRV9TRVJJQUw9eQotIyBDT05GSUdfTU9VU0VfSU5QT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0xPR0lCTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9QQzExMFBBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NSVNDPXkKIENPTkZJR19JTlBVVF9VSU5QVVQ9eQotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19JODA0Mj15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19QQVJLQkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19TT1VORF9HQU1FUE9SVD15Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfMjEyODUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiBDT05GSUdfUFJJTlRFUj15Ci0jIENPTkZJR19MUF9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEFSIGlzIG5vdCBzZXQKLQotIwotIyBJUE1JCi0jCi0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi1DT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHXzIxMjg1X1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR185NzdfV0FUQ0hET0c9eQotCi0jCi0jIElTQS1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVhDT01XRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XRFQgaXMgbm90IHNldAotCi0jCi0jIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAogQ09ORklHX0RTMTYyMD15CiBDT05GSUdfTldCVVRUT049eQogQ09ORklHX05XQlVUVE9OX1JFQk9PVD15CiBDT05GSUdfTldGTEFTSD15Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDPXkKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCitDT05GSUdfV0FUQ0hET0c9eQorQ09ORklHXzk3N19XQVRDSERPRz15CiBDT05GSUdfRkI9eQotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLUNPTkZJR19GQl9TT0ZUX0NVUlNPUj15Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAogQ09ORklHX0ZCX0NZQkVSMjAwMD15Ci0jIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAotIyBDT05GSUdfRkJfUkFERU9OX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9SQURFT04gaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAotIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi1DT05GSUdfVkdBX0NPTlNPTEU9eQotIyBDT05GSUdfTURBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQogQ09ORklHX0ZPTlRTPXkKIENPTkZJR19GT05UXzh4OD15CiBDT05GSUdfRk9OVF84eDE2PXkKLSMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKLQotIwotIyBMb2dvIGNvbmZpZ3VyYXRpb24KLSMKIENPTkZJR19MT0dPPXkKLUNPTkZJR19MT0dPX0xJTlVYX01PTk89eQotQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCiBDT05GSUdfU09VTkQ9eQotCi0jCi0jIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQotIwotIyBDT05GSUdfU05EIGlzIG5vdCBzZXQKLQotIwotIyBPcGVuIFNvdW5kIFN5c3RlbQotIwogQ09ORklHX1NPVU5EX1BSSU1FPXkKLSMgQ09ORklHX1NPVU5EX0JUODc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0NNUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0VNVTEwSzEgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfRlVTSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0NTNDI4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9FUzEzNzAgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfRVMxMzcxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0VTU1NPTE8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX01BRVNUUk8gaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfTUFFU1RSTzMgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfSUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1NPTklDVklCRVMgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9WSUE4MkNYWFggaXMgbm90IHNldAogQ09ORklHX1NPVU5EX09TUz15CiBDT05GSUdfU09VTkRfVFJBQ0VJTklUPXkKIENPTkZJR19TT1VORF9ETUFQPXkKLSMgQ09ORklHX1NPVU5EX0FEMTgxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9BRDE4ODkgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfU0dBTEFYWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9BRExJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9BQ0lfTUlYRVIgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfQ1M0MjMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1NTQ0FQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9HVVMgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfVk1JREkgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfVFJJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9NU1MgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfTVBVNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX05NMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX01BRDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1BBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9QU1MgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfU0IgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfQVdFMzJfU1lOVEggaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfTUFVSSBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkRfWU0zODEyPXkKLSMgQ09ORklHX1NPVU5EX09QTDNTQTEgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfT1BMM1NBMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9ZTUZQQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfVUFSVDY4NTAgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfQUVEU1AxNiBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkRfV0FWRUFSVElTVD15Ci0jIENPTkZJR19TT1VORF9BTEk1NDU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0ZPUlRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1JNRTk2WFggaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfQUQxOTgwIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIwotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCi0jIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFhGUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0FVVE9GU19GUz15Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCiBDT05GSUdfSVNPOTY2MF9GUz15CiBDT05GSUdfSk9MSUVUPXkKLSMgQ09ORklHX1pJU09GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfU1lTRlM9eQotIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkZTRD15CiBDT05GSUdfTkZTRF9WMz15Ci0jIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0RfVENQIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19FWFBPUlRGUz15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiBDT05GSUdfU01CX0ZTPXkKLSMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CiBDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15CiBDT05GSUdfTkxTX0lTTzg4NTlfMj15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMTU9eQotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfVVRGOD15Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFQlVHX1VTRVI9eQotIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLUNPTkZJR19DUllQVE89eQotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL25ldHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uZXR4X2RlZmNvbmZpZwppbmRleCAyYTk3ZTM2Li4zMTZhZjU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL25ldHhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmV0eF9kZWZjb25maWcKQEAgLTEsOTIzICsxLDg2IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmM2Ci0jIFR1ZSBKdW4gIDYgMTU6MjY6NTMgMjAwNgotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX0lOVEVSTU9EVUxFPXkKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIwotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTkVUWD15Ci0KLSMKLSMgTmV0WCBJbXBsZW1lbnRhdGlvbnMKLSMKIENPTkZJR19NQUNIX05YREtOPXkKIENPTkZJR19NQUNIX05YREI1MDA9eQogQ09ORklHX01BQ0hfTlhFQjUwMEhNST15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTI2VD15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXQj15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fVklDPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotQ09ORklHX0FSTV9BTUJBPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwogQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0haPTEwMAotIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNNWDAsMTE1MjAwIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi0jIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj1tCiBDT05GSUdfTkVUX0tFWT15CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfSVBHUkU9bQotIyBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQogQ09ORklHX0lORVRfQUg9eQogQ09ORklHX0lORVRfRVNQPXkKIENPTkZJR19JTkVUX0lQQ09NUD15Ci1DT05GSUdfSU5FVF9YRlJNX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9UVU5ORUw9eQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKLQotIwotIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAotQ09ORklHX0lQVjY9bQotIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAogQ09ORklHX0lORVQ2X0FIPW0KIENPTkZJR19JTkVUNl9FU1A9bQogQ09ORklHX0lORVQ2X0lQQ09NUD1tCi1DT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQotQ09ORklHX0lORVQ2X1RVTk5FTD1tCi0jIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX0lQX05GX0NPTk5UUkFDSz1tCi0jIENPTkZJR19JUF9ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfRlRQPW0KLUNPTkZJR19JUF9ORl9JUkM9bQotIyBDT05GSUdfSVBfTkZfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfVEZUUD1tCi1DT05GSUdfSVBfTkZfQU1BTkRBPW0KLSMgQ09ORklHX0lQX05GX1BQVFAgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfSDMyMyBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfUVVFVUU9bQotCi0jCi0jIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUDZfTkZfUVVFVUUgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCiBDT05GSUdfTkVUX1BLVEdFTj1tCi0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLUNPTkZJR19NVERfUkFNPXkKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BMQVRSQU09eQotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9bQogQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIwogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX05FVFg9eQotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fQU1CQUtNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9BTUJBX1BMMDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9BTUJBX1BMMDExIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX05FVFg9eQogQ09ORklHX1NFUklBTF9ORVRYX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCi0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfTlZSQU09bQotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCi0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCi0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIExFRCBkZXZpY2VzCi0jCi0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCiBDT05GSUdfRkI9eQotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9GSVJNV0FSRV9FRElEPXkKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAogQ09ORklHX0ZCX0FSTUNMQ0Q9eQotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19GT05UXzh4OD15Ci1DT05GSUdfRk9OVF84eDE2PXkKLQotIwotIyBMb2dvIGNvbmZpZ3VyYXRpb24KLSMKIENPTkZJR19MT0dPPXkKLUNPTkZJR19MT0dPX0xJTlVYX01PTk89eQotQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9bQotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0KLSMKLSMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLUNPTkZJR19SVENfRFJWX05FVFg9bQotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKLUNPTkZJR19ORlNfRElSRUNUSU89eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi0jIENPTkZJR19OTFMgaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNwotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfUFJFRU1QVD15Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRVJST1JTPXkKLSMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19ITUFDPXkKIENPTkZJR19DUllQVE9fTlVMTD1tCiBDT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX1NIQTE9eQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCiBDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCi0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15CitDT05GSUdfQ1JZUFRPX0FSQzQ9bQogQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KLUNPTkZJR19DUllQVE9fQUVTPW0KIENPTkZJR19DUllQVE9fQ0FTVDU9bQogQ09ORklHX0NSWVBUT19DQVNUNj1tCi0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQVJDND1tCi0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCi0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIworQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCiBDT05GSUdfQ1JDX0NDSVRUPW0KLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15CiBDT05GSUdfTElCQ1JDMzJDPW0KLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL25oazg4MTVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uaGs4ODE1X2RlZmNvbmZpZwppbmRleCA5MmQ5MDg2Li4wZTJkYzI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL25oazg4MTVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmhrODgxNV9kZWZjb25maWcKQEAgLTEsMzg4ICsxLDQyIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVHVlIEp1biAyMyAyMjo1NzoxNiAyMDA5Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci0KLSMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKLSMKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0ZSRUVaRVI9eQotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT01BRElLPXkKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotCi0jCi0jIE5vbWFkaWsgYm9hcmRzCi0jCiBDT05GSUdfTUFDSF9OT01BRElLXzg4MTVOSEs9eQotQ09ORklHX05PTUFESUtfODgxNT15Ci1DT05GSUdfSTJDX0JJVEJBTkdfODgxNU5ISz15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTI2VD15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXQj15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKLUNPTkZJR19PVVRFUl9DQUNIRT15Ci1DT05GSUdfQ0FDSEVfTDJYMD15Ci1DT05GSUdfQVJNX1ZJQz15Ci1DT05GSUdfQVJNX1ZJQ19OUj0yCi1DT05GSUdfQ09NTU9OX0NMS0RFVj15Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLUNPTkZJR19BUk1fQU1CQT15Ci0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAogQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTAKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLSMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0iIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkQ9eQotQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15Ci0jIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0tFWT15Ci0jIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKLUNPTkZJR19BU0tfSVBfRklCX0hBU0g9eQotIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEggaXMgbm90IHNldAotIyBDT05GSUdfSVBfUk9VVEVfVkVSQk9TRSBpcyBub3Qgc2V0CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfSVBJUD15CiBDT05GSUdfTkVUX0lQR1JFPXkKIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKIENPTkZJR19JUF9NUk9VVEU9eQotIyBDT05GSUdfSVBfUElNU01fVjEgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUElNU01fVjIgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKIENPTkZJR19CVD1tCiBDT05GSUdfQlRfTDJDQVA9bQogQ09ORklHX0JUX1NDTz1tCkBAIC0zOTIsOTI0ICs0Niw4NyBAQAogQ09ORklHX0JUX0JORVBfTUNfRklMVEVSPXkKIENPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUj15CiBDT05GSUdfQlRfSElEUD1tCi0KLSMKLSMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCi0jCiBDT05GSUdfQlRfSENJVUFSVD1tCiBDT05GSUdfQlRfSENJVUFSVF9IND15CiBDT05GSUdfQlRfSENJVUFSVF9CQ1NQPXkKLSMgQ09ORklHX0JUX0hDSVVBUlRfTEwgaXMgbm90IHNldAogQ09ORklHX0JUX0hDSVZIQ0k9bQotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEFSVElUSU9OUz15CiBDT05GSUdfTVREX1RFU1RTPW0KLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORD15Ci1DT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFPXkKIENPTkZJR19NVERfTkFORF9FQ0NfU01DPXkKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfR1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfSURTPXkKLSMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFPXkKIENPTkZJR19NVERfTkFORF9OT01BRElLPXkKIENPTkZJR19NVERfT05FTkFORD15CiBDT05GSUdfTVREX09ORU5BTkRfVkVSSUZZX1dSSVRFPXkKIENPTkZJR19NVERfT05FTkFORF9HRU5FUklDPXkKLSMgQ09ORklHX01URF9PTkVOQU5EX09UUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORF8yWF9QUk9HUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EX1NJTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX01VTFRJX0xVTj15CiBDT05GSUdfU0NTSV9DT05TVEFOVFM9eQogQ09ORklHX1NDU0lfTE9HR0lORz15CiBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DPXkKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogQ09ORklHX1RVTj15Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfU01DOTFYPXkKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9bQotIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKIENPTkZJR19QUFBfQVNZTkM9bQogQ09ORklHX1BQUF9TWU5DX1RUWT1tCiBDT05GSUdfUFBQX0RFRkxBVEU9bQogQ09ORklHX1BQUF9CU0RDT01QPW0KIENPTkZJR19QUFBfTVBQRT1tCiBDT05GSUdfUFBQT0U9bQotIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCiBDT05GSUdfTkVUQ09OU09MRT1tCi0jIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgbm90IHNldAotQ09ORklHX05FVFBPTEw9eQotIyBDT05GSUdfTkVUUE9MTF9UUkFQIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQogIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1NZTkFQVElDU19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTAgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9BTUJBX1BMMDExPXkKIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMV9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLUNPTkZJR19JMkNfQUxHT0JJVD15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCiBDT05GSUdfSTJDX0dQSU89eQotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQogQ09ORklHX0RFQlVHX0dQSU89eQotIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fUEwwNjEgaXMgbm90IHNldAotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLSMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfV0FDT00gaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCi0jCi0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX1BMMDMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUEwwMzEgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKLSMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GVVNFX0ZTPXkKLSMgQ09ORklHX0NVU0UgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WM19BQ0w9eQotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19BQ0xfU1VQUE9SVD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKIENPTkZJR19TTUJfRlM9bQotIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKIENPTkZJR19DSUZTPW0KLSMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAogQ09ORklHX0NJRlNfV0VBS19QV19IQVNIPXkKLSMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAogQ09ORklHX05MU19BU0NJST15CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xNT15Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCiAjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotQ09ORklHX0ZUUkFDRT15Ci0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQotIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJNX1VOV0lORD15Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19TSEExPXkKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQVJDND1tCi0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci1DT05GSUdfQ1JDX0NDSVRUPW0KLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9uczl4eHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uczl4eHhfZGVmY29uZmlnCmluZGV4IDdkYzE1ODAuLjFmNTI4YTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbnM5eHh4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL25zOXh4eF9kZWZjb25maWcKQEAgLTMsMjYgKzMsMTEgQEAKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTlM5WFhYPXkKLUNPTkZJR19NQUNIX0E5TTkzNjA9eQotQ09ORklHX01BQ0hfQTlNOTc1MD15Ci1DT05GSUdfTUFDSF9DQzdVQ0FNUlk9eQotQ09ORklHX01BQ0hfQ0M5Qz15Ci1DT05GSUdfTUFDSF9DQzlQOTIxMD15Ci1DT05GSUdfTUFDSF9DQzlQOTIxMEpTPXkKLUNPTkZJR19NQUNIX0NDOVA5MjE1PXkKLUNPTkZJR19NQUNIX0NDOVA5MjE1SlM9eQogQ09ORklHX01BQ0hfQ0M5UDkzNjBERVY9eQogQ09ORklHX01BQ0hfQ0M5UDkzNjBKUz15Ci1DT05GSUdfTUFDSF9DQzlQOTM2MFZBTD15Ci1DT05GSUdfTUFDSF9DQzlQOTc1MERFVj15Ci1DT05GSUdfTUFDSF9DQzlQOTc1MFZBTD15Ci1DT05GSUdfTUFDSF9DQ1c5Qz15Ci1DT05GSUdfTUFDSF9JTkMyME9UVEVSPXkKLUNPTkZJR19NQUNIX09UVEVSPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19GUEVfTldGUEU9eQpAQCAtMzksMjQgKzI0LDE4IEBACiBDT05GSUdfTVREX0pFREVDUFJPQkU9bQogQ09ORklHX01URF9DRklfQU1EU1REPW0KIENPTkZJR19NVERfUEhZU01BUD1tCi1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgwCiBDT05GSUdfQkxLX0RFVl9MT09QPW0KIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX05TOVhYWF9FVEg9eQogIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9OUzkyMVg9eQotQ09ORklHX1NFUklBTF9OUzkyMVhfQ09OU09MRT15CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotQ09ORklHX0FEQ19OUzkyMTU9bQogQ09ORklHX0kyQz1tCiBDT05GSUdfSTJDX0dQSU89bQogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CiBDT05GSUdfTEVEU19DTEFTUz1tCkBAIC02NSw3ICs0NCw2IEBACiBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPW0KIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPW0KIENPTkZJR19SVENfQ0xBU1M9bQotQ09ORklHX1JUQ19EUlZfTlM5MjE1PW0KIENPTkZJR19FWFQyX0ZTPW0KIENPTkZJR19UTVBGUz15CiBDT05GSUdfSkZGUzJfRlM9bQpAQCAtNzMsNyArNTEsNiBAQAogQ09ORklHX1JPT1RfTkZTPXkKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX0lORk89eQogQ09ORklHX0RFQlVHX1VTRVI9eQogQ09ORklHX0RFQlVHX0VSUk9SUz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL251YzkxMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL251YzkxMF9kZWZjb25maWcKaW5kZXggZjgwODQ4YS4uMTAxODBjZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9udWM5MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbnVjOTEwX2RlZmNvbmZpZwpAQCAtMSw5MDQgKzEsNjAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBXZWQgSnVuIDEwIDIyOjA5OjI1IDIwMDkKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotIyBDT05GSUdfR0VORVJJQ19USU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFMgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogQ09ORklHX1JFTEFZPXkKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogQ09ORklHX1VTRVJfTlM9eQotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotQ09ORklHX1JEX0JaSVAyPXkKLUNPTkZJR19SRF9MWk1BPXkKLSMgQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9HWklQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fTFpNQSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19UUkFDRVBPSU5UUz15Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkQ9eQotQ09ORklHX0JMS19ERVZfQlNHPXkKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1c5MFg5MDA9eQotQ09ORklHX0NQVV9XOTBQOTEwPXkKLQotIwotIyBXOTBQOTEwIE1hY2hpbmVzCi0jCi1DT05GSUdfTUFDSF9XOTBQOTEwRVZCPXkKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9BUk05MjZUPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQotQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4gaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0NPTU1PTl9DTEtERVY9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1ZNU1BMSVRfM0c9eQotIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCiBDT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0hPTEVTX01FTU9SWU1PREVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotQ09ORklHX1pCT09UX1JPTV9URVhUPTAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTAKIENPTkZJR19DTURMSU5FPSJyb290PS9kZXYvcmFtMCBjb25zb2xlPXR0eVMwLDExNTIwMG44IHJkaW5pdD0vc2Jpbi9pbml0IG1lbT02NE0iCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19LRVhFQz15Ci1DT05GSUdfQVRBR1NfUFJPQz15Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotIyBDT05GSUdfTkVUIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVA9eQotIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xNjM4NAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0xCi1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0xCi0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKLSMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0RFVklDRV9DTEFTUz15Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15Ci0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLQotIwotIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwotIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19BQ0w9eQotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ST01GU19GUz15Ci1DT05GSUdfUk9NRlNfQkFDS0VEX0JZX0JMT0NLPXkKLSMgQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9NVEQgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfQkFDS0VEX0JZX0JPVEggaXMgbm90IHNldAotQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX1NUQUNLVFJBQ0U9eQotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfTk9QX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1JJTkdfQlVGRkVSPXkKLUNPTkZJR19UUkFDSU5HPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JT19UUkFDRT15Ci0jIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotQ09ORklHX0FSTV9VTldJTkQ9eQotIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci1DT05GSUdfQklOQVJZX1BSSU5URj15Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMzIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKLUNPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL251Yzk1MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL251Yzk1MF9kZWZjb25maWcKaW5kZXggNTFjYzJhMi4uMjdhYTg3MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9udWM5NTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbnVjOTUwX2RlZmNvbmZpZwpAQCAtMSw5NzIgKzEsNzYgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzcKLSMgVHVlIE5vdiAxNyAxMjozMTozMyAyMDA5Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogQ09ORklHX1JFTEFZPXkKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogQ09ORklHX1VTRVJfTlM9eQotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotQ09ORklHX1JEX0JaSVAyPXkKLUNPTkZJR19SRF9MWk1BPXkKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKLUNPTkZJR19CTEtfREVWX0JTRz15Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XOTBYOTAwPXkKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAotQ09ORklHX0NQVV9OVUM5NTA9eQotCi0jCi0jIFc5MFA5MTAgTWFjaGluZXMKLSMKICMgQ09ORklHX01BQ0hfVzkwUDkxMEVWQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTlVDOTUwIE1hY2hpbmVzCi0jCiBDT05GSUdfTUFDSF9XOTBQOTUwRVZCPXkKLQotIwotIyBOVUM5NjAgTWFjaGluZXMKLSMKLSMgQ09ORklHX01BQ0hfVzkwTjk2MEVWQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTlVDOTMyIE1hY2hpbmVzCi0jCi0jIENPTkZJR19NQUNIX05VQzkzMkVWQiBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTI2VD15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKLUNPTkZJR19DUFVfUEFCUlRfTEVHQUNZPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXQj15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQotQ09ORklHX0NPTU1PTl9DTEtERVY9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLSMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLSMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLSMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotQ09ORklHX1pCT09UX1JPTV9URVhUPTAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTAKIENPTkZJR19DTURMSU5FPSJyb290PS9kZXYvcmFtMCBjb25zb2xlPXR0eVMwLDExNTIwMG44IHJkaW5pdD0vc2Jpbi9pbml0IG1lbT02NE0iCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19LRVhFQz15Ci1DT05GSUdfQVRBR1NfUFJPQz15Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKIENPTkZJR19CSU5GTVRfQU9VVD15CiBDT05GSUdfQklORk1UX01JU0M9eQotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19ORVQgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci0jIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTE2Mzg0Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MQotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MQotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEFDOTcgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0ZCPXkKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogQ09ORklHX0ZCX05VQzkwMD15CiBDT05GSUdfR1BNMTA0MEEwXzMyMFgyNDA9eQogQ09ORklHX0ZCX05VQzkwMF9ERUJVRz15Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotCi0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAogQ09ORklHX0ZPTlRTPXkKLSMgQ09ORklHX0ZPTlRfOHg4IGlzIG5vdCBzZXQKIENPTkZJR19GT05UXzh4MTY9eQotIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAogQ09ORklHX0xPR089eQogIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0KLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwotIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0KLSMKLSMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KLSMKIENPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi0jIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19BQ0w9eQotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ST01GU19GUz15Ci1DT05GSUdfUk9NRlNfQkFDS0VEX0JZX0JMT0NLPXkKLSMgQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9NVEQgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfQkFDS0VEX0JZX0JPVEggaXMgbm90IHNldAotQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci1DT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLUNPTkZJR19BUk1fVU5XSU5EPXkKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMzIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKLUNPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL251Yzk2MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL251Yzk2MF9kZWZjb25maWcKaW5kZXggYWE3ZTEyOC4uNTZmZDdhZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9udWM5NjBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbnVjOTYwX2RlZmNvbmZpZwpAQCAtMSw5MjEgKzEsNjYgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzcKLSMgVHVlIE5vdiAxNyAxMjoyMDoxMSAyMDA5Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogQ09ORklHX1JFTEFZPXkKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogQ09ORklHX1VTRVJfTlM9eQotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotQ09ORklHX1JEX0JaSVAyPXkKLUNPTkZJR19SRF9MWk1BPXkKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKLUNPTkZJR19CTEtfREVWX0JTRz15Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XOTBYOTAwPXkKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAotQ09ORklHX0NQVV9OVUM5NjA9eQotCi0jCi0jIFc5MFA5MTAgTWFjaGluZXMKLSMKICMgQ09ORklHX01BQ0hfVzkwUDkxMEVWQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTlVDOTUwIE1hY2hpbmVzCi0jCi0jIENPTkZJR19NQUNIX1c5MFA5NTBFVkIgaXMgbm90IHNldAotCi0jCi0jIE5VQzk2MCBNYWNoaW5lcwotIwogQ09ORklHX01BQ0hfVzkwTjk2MEVWQj15Ci0KLSMKLSMgTlVDOTMyIE1hY2hpbmVzCi0jCi0jIENPTkZJR19NQUNIX05VQzkzMkVWQiBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTI2VD15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKLUNPTkZJR19DUFVfUEFCUlRfTEVHQUNZPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXQj15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQotQ09ORklHX0NPTU1PTl9DTEtERVY9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLSMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLSMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLSMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotQ09ORklHX1pCT09UX1JPTV9URVhUPTAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTAKIENPTkZJR19DTURMSU5FPSJyb290PS9kZXYvcmFtMCBjb25zb2xlPXR0eVMwLDExNTIwMG44IHJkaW5pdD0vc2Jpbi9pbml0IG1lbT02NE0iCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19LRVhFQz15Ci1DT05GSUdfQVRBR1NfUFJPQz15Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKIENPTkZJR19CSU5GTVRfQU9VVD15CiBDT05GSUdfQklORk1UX01JU0M9eQotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19ORVQgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci0jIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTE2Mzg0Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MQotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MQotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEFDOTcgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKLSMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0RFVklDRV9DTEFTUz15Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15Ci0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotCi0jCi0jIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQUNMPXkKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfUk9NRlNfRlM9eQotQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9CTE9DSz15Ci0jIENPTkZJR19ST01GU19CQUNLRURfQllfTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9CT1RIIGlzIG5vdCBzZXQKLUNPTkZJR19ST01GU19PTl9CTE9DSz15Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0jIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci1DT05GSUdfQVJNX1VOV0lORD15Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfREVDT01QUkVTU19CWklQMj15Ci1DT05GSUdfREVDT01QUkVTU19MWk1BPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19iZWFnbGVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19iZWFnbGVfZGVmY29uZmlnCmluZGV4IDVhOWU5NWYuLmFhMjQxNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX2JlYWdsZV9kZWZjb25maWcKQEAgLTEsMTM4OCArMSwxMzQgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNy1yYzgKLSMgV2VkIE9jdCAgMSAxNzoxNDoyMiAyMDA4Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLSMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLSMgQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0sgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci1DT05GSUdfRlJFRVpFUj15Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQPXkKLSMgQ09ORklHX0FSQ0hfTVNNN1gwMEEgaXMgbm90IHNldAotCi0jCi0jIFRJIE9NQVAgSW1wbGVtZW50YXRpb25zCi0jCi1DT05GSUdfQVJDSF9PTUFQX09URz15Ci0jIENPTkZJR19BUkNIX09NQVAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUDIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT01BUDM9eQotCi0jCi0jIE9NQVAgRmVhdHVyZSBTZWxlY3Rpb25zCi0jCi0jIENPTkZJR19PTUFQX0RFQlVHX1BPV0VSRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfREVCVUdfQ0xPQ0tET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MgaXMgbm90IHNldAogIyBDT05GSUdfT01BUF9NVVggaXMgbm90IHNldAogIyBDT05GSUdfT01BUF9NQ0JTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX01QVV9USU1FUiBpcyBub3Qgc2V0CiBDT05GSUdfT01BUF8zMktfVElNRVI9eQotQ09ORklHX09NQVBfMzJLX1RJTUVSX0haPTEyOAogQ09ORklHX09NQVBfRE1fVElNRVI9eQotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzPXkKLUNPTkZJR19BUkNIX09NQVAzNFhYPXkKIENPTkZJR19BUkNIX09NQVAzNDMwPXkKLQotIwotIyBPTUFQIEJvYXJkIFR5cGUKLSMKIENPTkZJR19NQUNIX09NQVAzX0JFQUdMRT15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIwotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVXzMydjZLPXkKLUNPTkZJR19DUFVfVjc9eQotQ09ORklHX0NQVV8zMnY3PXkKLUNPTkZJR19DUFVfQUJSVF9FVjc9eQotQ09ORklHX0NQVV9QQUJSVF9JRkFSPXkKLUNPTkZJR19DUFVfQ0FDSEVfVjc9eQotQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKLUNPTkZJR19DUFVfQ09QWV9WNj15Ci1DT05GSUdfQ1BVX1RMQl9WNz15Ci1DT05GSUdfQ1BVX0hBU19BU0lEPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQVJNX1RIVU1CRUUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFTX1RMU19SRUc9eQotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0NPTU1PTl9DTEtERVY9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEyOAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0xFRFMgaXMgbm90IHNldAotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9uZnMgbmZzcm9vdD0xOTIuMTY4LjAuMTovaG9tZS91c2VyL2J1aWxkcm9vdCBpcD0xOTIuMTY4LjAuMjoxOTIuMTY4LjAuMToxOTIuMTY4LjAuMToyNTUuMjU1LjI1NS4wOnRndDpldGgwOm9mZiBydyBjb25zb2xlPXR0eVMyLDExNTIwMG44IgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKIENPTkZJR19WRlA9eQotQ09ORklHX1ZGUHYzPXkKLSMgQ09ORklHX05FT04gaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9NSVNDPXkKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkQ9eQotQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15Ci0jIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19QTV9SVU5USU1FPXkKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0tFWT15Ci0jIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15CiBDT05GSUdfSVBfUE5QX1JBUlA9eQotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTMyCi1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQogQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQogQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CiBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15CiBDT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogQ09ORklHX0kyQ19PTUFQPXkKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTUDEzMDFfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKIENPTkZJR19HUElPX1RXTDQwMzA9eQotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogQ09ORklHX1RXTDQwMzBfQ09SRT15Ci0jIENPTkZJR19VQ0IxNDAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi1DT05GSUdfREFCPXkKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19SRUdVTEFUT1I9eQorQ09ORklHX1JFR1VMQVRPUl9UV0w0MDMwPXkKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogQ09ORklHX0ZCX09NQVA9eQotIyBDT05GSUdfRkJfT01BUF9MQ0RDX0VYVEVSTkFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX09NQVBfQk9PVExPQURFUl9JTklUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9PTUFQX0NPTlNJU1RFTlRfRE1BX1NJWkU9MgotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTj15CiBDT05GSUdfRk9OVFM9eQogQ09ORklHX0ZPTlRfOHg4PXkKIENPTkZJR19GT05UXzh4MTY9eQotIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAotIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci1DT05GSUdfVVNCX0RFVklDRV9DTEFTUz15Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVNQRU5EPXkKLUNPTkZJR19VU0JfT1RHPXkKICMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15Ci0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9NVVNCX0hEUkM9eQotQ09ORklHX1VTQl9NVVNCX1NPQz15Ci0KLSMKLSMgT01BUCAzNDN4IGhpZ2ggc3BlZWQgVVNCIHN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9NVVNCX0hPU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfUEVSSVBIRVJBTCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01VU0JfT1RHPXkKIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQz15Ci1DT05GSUdfVVNCX01VU0JfSERSQ19IQ0Q9eQotIyBDT05GSUdfTVVTQl9QSU9fT05MWSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0lOVkVOVFJBX0RNQT15Ci0jIENPTkZJR19VU0JfVElfQ1BQSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwotIyBDT05GSUdfVVNCX1NUT1JBR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX002NjU5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15Ci0jIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VUSD1tCi1DT05GSUdfVVNCX0VUSF9STkRJUz15Ci0jIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotQ09ORklHX1VTQl9PVEdfVVRJTFM9eQotIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CiBDT05GSUdfVFdMNDAzMF9VU0I9eQotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz15Ci1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15Ci0jIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19PTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfT01BUF9IUz15Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIFZvbHRhZ2UgYW5kIEN1cnJlbnQgcmVndWxhdG9ycwotIwotQ09ORklHX1JFR1VMQVRPUj15Ci0jIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci1DT05GSUdfUkVHVUxBVE9SX1RXTDQwMzA9eQotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15CiBDT05GSUdfUVVPVEE9eQotIyBDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0UgaXMgbm90IHNldAotQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkc9eQotIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0CiBDT05GSUdfUUZNVF9WMj15Ci1DT05GSUdfUVVPVEFDVEw9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVFJBQ0U9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUIGlzIG5vdCBzZXQKIENPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogQ09ORklHX0xJQkNSQzMyQz15Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX2RlZmNvbmZpZwppbmRleCA5NGRmY2YwYS4uNWRiOWE2YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19kZWZjb25maWcKQEAgLTEsMjg3ICsxLDM2IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzQtcmM3Ci0jIFRodSBNYXkgMTMgMTA6NTQ6NDMgMjAxMAotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19IQVZFX1BST0NfQ1BVPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0FSQ0hfSEFTX0NQVUZSRVE9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX05FRURfRE1BX01BUF9TVEFURT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlRfNj15Ci1DT05GSUdfT1BST0ZJTEVfQVJNVjY9eQotQ09ORklHX09QUk9GSUxFX0FSTTExX0NPUkU9eQotQ09ORklHX09QUk9GSUxFX0FSTVY3PXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKLUNPTkZJR19IQVZFX0tFUk5FTF9MWk89eQotQ09ORklHX0tFUk5FTF9HWklQPXkKLSMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVJORUxfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKLUNPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE2Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNUz15Ci1DT05GSUdfS0FMTFNZTVNfQUxMPXkKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci1DT05GSUdfUEVSRl9VU0VfVk1BTExPQz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLUNPTkZJR19QRVJGX0VWRU5UUz15Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BFUkZfVVNFX1ZNQUxMT0MgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19PUFJPRklMRT15Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfS1BST0JFUz15Ci1DT05GSUdfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotQ09ORklHX0ZSRUVaRVI9eQotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi1DT05GSUdfTU1VPXkKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRE9WRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05VQzkzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSE1PQklMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQNjQ0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1M1UDY0NDIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQVjIxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VODUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05PTUFESUsgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVA9eQotCi0jCi0jIFRJIE9NQVAgSW1wbGVtZW50YXRpb25zCi0jCi1DT05GSUdfQVJDSF9PTUFQX09URz15Ci0jIENPTkZJR19BUkNIX09NQVAxIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX09NQVAyUExVUz15CiBDT05GSUdfQVJDSF9PTUFQMj15CiBDT05GSUdfQVJDSF9PTUFQMz15CiBDT05GSUdfQVJDSF9PTUFQND15Ci0KLSMKLSMgT01BUCBGZWF0dXJlIFNlbGVjdGlvbnMKLSMKLUNPTkZJR19PTUFQX0RFQlVHX0RFVklDRVM9eQotQ09ORklHX09NQVBfREVCVUdfTEVEUz15CiBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1M9eQotQ09ORklHX09NQVBfTVVYPXkKIENPTkZJR19PTUFQX01VWF9ERUJVRz15Ci1DT05GSUdfT01BUF9NVVhfV0FSTklOR1M9eQotQ09ORklHX09NQVBfTUNCU1A9eQotIyBDT05GSUdfT01BUF9NQk9YX0ZXSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX01QVV9USU1FUiBpcyBub3Qgc2V0CiBDT05GSUdfT01BUF8zMktfVElNRVI9eQotIyBDT05GSUdfT01BUDNfTDJfQVVYX1NFQ1VSRV9TQVZFX1JFU1RPUkUgaXMgbm90IHNldAotQ09ORklHX09NQVBfMzJLX1RJTUVSX0haPTEyOAotQ09ORklHX09NQVBfRE1fVElNRVI9eQotIyBDT05GSUdfT01BUF9QTV9OT05FIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX1BNX05PT1A9eQogQ09ORklHX01BQ0hfT01BUF9HRU5FUklDPXkKLQotIwotIyBPTUFQIENvcmUgVHlwZQotIwogQ09ORklHX0FSQ0hfT01BUDI0MjA9eQogQ09ORklHX0FSQ0hfT01BUDI0MzA9eQogQ09ORklHX0FSQ0hfT01BUDM0MzA9eQotQ09ORklHX09NQVBfUEFDS0FHRV9DQkI9eQotQ09ORklHX09NQVBfUEFDS0FHRV9DVVM9eQotQ09ORklHX09NQVBfUEFDS0FHRV9DQlA9eQotCi0jCi0jIE9NQVAgQm9hcmQgVHlwZQotIwotQ09ORklHX01BQ0hfT01BUDJfVFVTQjYwMTA9eQogQ09ORklHX01BQ0hfT01BUF9IND15CiBDT05GSUdfTUFDSF9PTUFQX0FQT0xMT049eQogQ09ORklHX01BQ0hfT01BUF8yNDMwU0RQPXkKQEAgLTI5NCw5ICs0Myw2IEBACiBDT05GSUdfTUFDSF9PTUFQM19QQU5ET1JBPXkKIENPTkZJR19NQUNIX09NQVAzX1RPVUNIQk9PSz15CiBDT05GSUdfTUFDSF9PTUFQXzM0MzBTRFA9eQotQ09ORklHX01BQ0hfTk9LSUFfTjgwMD15Ci1DT05GSUdfTUFDSF9OT0tJQV9OODEwPXkKLUNPTkZJR19NQUNIX05PS0lBX044MTBfV0lNQVg9eQogQ09ORklHX01BQ0hfTk9LSUFfTjhYMD15CiBDT05GSUdfTUFDSF9OT0tJQV9SWDUxPXkKIENPTkZJR19NQUNIX09NQVBfWk9PTTI9eQpAQCAtMzA2LDI2NCArNTIsNDEgQEAKIENPTkZJR19NQUNIX1NCQzM1MzA9eQogQ09ORklHX01BQ0hfT01BUF8zNjMwU0RQPXkKIENPTkZJR19NQUNIX09NQVBfNDQzMFNEUD15Ci0jIENPTkZJR19PTUFQM19FTVUgaXMgbm90IHNldAotIyBDT05GSUdfT01BUDNfU0RSQ19BQ19USU1JTkcgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX1Y2PXkKLSMgQ09ORklHX0NQVV8zMnY2SyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX1Y3PXkKLUNPTkZJR19DUFVfMzJ2Nj15Ci1DT05GSUdfQ1BVXzMydjc9eQotQ09ORklHX0NQVV9BQlJUX0VWNj15Ci1DT05GSUdfQ1BVX0FCUlRfRVY3PXkKLUNPTkZJR19DUFVfUEFCUlRfVjY9eQotQ09ORklHX0NQVV9QQUJSVF9WNz15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y2PXkKLUNPTkZJR19DUFVfQ0FDSEVfVjc9eQotQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKLUNPTkZJR19DUFVfQ09QWV9WNj15Ci1DT05GSUdfQ1BVX1RMQl9WNj15Ci1DT05GSUdfQ1BVX1RMQl9WNz15Ci1DT05GSUdfQ1BVX0hBU19BU0lEPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQogQ09ORklHX0FSTV9USFVNQkVFPXkKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAotQ09ORklHX0hBU19UTFNfUkVHPXkKLUNPTkZJR19PVVRFUl9DQUNIRT15Ci1DT05GSUdfT1VURVJfQ0FDSEVfU1lOQz15Ci1DT05GSUdfQ0FDSEVfTDJYMD15Ci1DT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTYKLUNPTkZJR19DUFVfSEFTX1BNVT15Ci0jIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUk1fRVJSQVRBXzQzMDk3MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUk1fRVJSQVRBXzQ1ODY5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUk1fRVJSQVRBXzQ2MDA3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTDMxMF9FUlJBVEFfNTg4MzY5IGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fR0lDPXkKLUNPTkZJR19DT01NT05fQ0xLREVWPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMjgKLSMgQ09ORklHX1RIVU1CMl9LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci1DT05GSUdfQVJDSF9IQVNfSE9MRVNfTUVNT1JZTU9ERUw9eQotIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUEVSRl9FVkVOVFM9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9OTk5OTk5Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX0xFRFM9eQotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLSMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L21tY2JsazBwMiByb290d2FpdCBjb25zb2xlPXR0eVMyLDExNTIwMCIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0tFWEVDPXkKLUNPTkZJR19BVEFHU19QUk9DPXkKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwogQ09ORklHX0NQVV9GUkVRPXkKLUNPTkZJR19DUFVfRlJFUV9UQUJMRT15Ci0jIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfU1RBVD15CiBDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTPXkKLUNPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRT15Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfR09WX1BFUkZPUk1BTkNFPXkKLSMgQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAogQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9eQogQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD15Ci0jIENPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKIENPTkZJR19WRlA9eQotQ09ORklHX1ZGUHYzPXkKIENPTkZJR19ORU9OPXkKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9NSVNDPXkKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15CiBDT05GSUdfUE1fREVCVUc9eQotIyBDT05GSUdfUE1fQURWQU5DRURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUE1fVkVSQk9TRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0FOX1BNX1RSQUNFPXkKLUNPTkZJR19QTV9TTEVFUD15Ci1DT05GSUdfU1VTUEVORD15Ci0jIENPTkZJR19QTV9URVNUX1NVU1BFTkQgaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15Ci0jIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19QTV9SVU5USU1FPXkKLUNPTkZJR19QTV9PUFM9eQotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj15Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotQ09ORklHX1hGUk1fTUlHUkFURT15Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX05FVF9LRVk9eQogQ09ORklHX05FVF9LRVlfTUlHUkFURT15CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15CiBDT05GSUdfSVBfUE5QX1JBUlA9eQotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVExBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX05GX0RFRlJBR19JUFY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVENQUFJPQkUgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAogQ09ORklHX0JUPXkKIENPTkZJR19CVF9MMkNBUD15CiBDT05GSUdfQlRfU0NPPXkKQEAgLTU3MywxNjg5ICs5NiwxOTcgQEAKIENPTkZJR19CVF9CTkVQX01DX0ZJTFRFUj15CiBDT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVI9eQogQ09ORklHX0JUX0hJRFA9eQotCi0jCi0jIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfQlRfSENJQlRVU0IgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQlRTRElPIGlzIG5vdCBzZXQKIENPTkZJR19CVF9IQ0lVQVJUPXkKIENPTkZJR19CVF9IQ0lVQVJUX0g0PXkKIENPTkZJR19CVF9IQ0lVQVJUX0JDU1A9eQogQ09ORklHX0JUX0hDSVVBUlRfTEw9eQogQ09ORklHX0JUX0hDSUJDTTIwM1g9eQogQ09ORklHX0JUX0hDSUJQQTEwWD15Ci0jIENPTkZJR19CVF9IQ0lCRlVTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lWSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX01SVkwgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQotQ09ORklHX1dFWFRfQ09SRT15Ci1DT05GSUdfV0VYVF9QUk9DPXkKLUNPTkZJR19XRVhUX1NQWT15CiBDT05GSUdfQ0ZHODAyMTE9eQotIyBDT05GSUdfTkw4MDIxMV9URVNUTU9ERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1MgaXMgbm90IHNldAotIyBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTPXkKLSMgQ09ORklHX0NGRzgwMjExX0RFQlVHRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0ZHODAyMTFfSU5URVJOQUxfUkVHREIgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX1dFWFQ9eQotQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15Ci1DT05GSUdfTElCODAyMTE9eQotIyBDT05GSUdfTElCODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01BQzgwMjExPXkKIENPTkZJR19NQUM4MDIxMV9SQ19QSUQ9eQotQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMPXkKIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRD15Ci0jIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMIGlzIG5vdCBzZXQKLUNPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUPSJwaWQiCi0jIENPTkZJR19NQUM4MDIxMV9NRVNIIGlzIG5vdCBzZXQKIENPTkZJR19NQUM4MDIxMV9MRURTPXkKLSMgQ09ORklHX01BQzgwMjExX0RFQlVHRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTFfREVCVUdfTUVOVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIENPTkZJR19DT05ORUNUT1I9eQotQ09ORklHX1BST0NfRVZFTlRTPXkKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15Ci1DT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT09QUz15Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfT01BUDI9eQotQ09ORklHX01URF9OQU5EX09NQVBfUFJFRkVUQ0g9eQotIyBDT05GSUdfTVREX05BTkRfT01BUF9QUkVGRVRDSF9ETUEgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX09ORU5BTkQ9eQogQ09ORklHX01URF9PTkVOQU5EX1ZFUklGWV9XUklURT15Ci0jIENPTkZJR19NVERfT05FTkFORF9HRU5FUklDIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT05FTkFORF9PTUFQMj15Ci0jIENPTkZJR19NVERfT05FTkFORF9PVFAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkRfMlhfUFJPR1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORF9TSU0gaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwogQ09ORklHX01URF9VQkk9eQotQ09ORklHX01URF9VQklfV0xfVEhSRVNIT0xEPTQwOTYKLUNPTkZJR19NVERfVUJJX0JFQl9SRVNFUlZFPTEKLSMgQ09ORklHX01URF9VQklfR0xVRUJJIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgZGVidWdnaW5nIG9wdGlvbnMKLSMKLSMgQ09ORklHX01URF9VQklfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJX0RBQzc1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAogQ09ORklHX0VFUFJPTV9MRUdBQ1k9eQotIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTUMzMjAwVE9QIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9NVUxUSV9MVU49eQotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAogQ09ORklHX01EPXkKLSMgQ09ORklHX0JMS19ERVZfTUQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9ETSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAogQ09ORklHX1NNU0NfUEhZPXkKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSUNSRUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogQ09ORklHX1NNQzkxWD15Ci0jIENPTkZJR19USV9EQVZJTkNJX0VNQUMgaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogQ09ORklHX1NNU0M5MTFYPXkKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0xJQkVSVEFTX1RISU5GSVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUNzZDNTBYX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEw4MTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExX0hXU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUSF9DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQjQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0M0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotIyBDT05GSUdfSVdNIGlzIG5vdCBzZXQKIENPTkZJR19MSUJFUlRBUz15CiBDT05GSUdfTElCRVJUQVNfVVNCPXkKIENPTkZJR19MSUJFUlRBU19TRElPPXkKLSMgQ09ORklHX0xJQkVSVEFTX1NQSSBpcyBub3Qgc2V0CiBDT05GSUdfTElCRVJUQVNfREVCVUc9eQotIyBDT05GSUdfTElCRVJUQVNfTUVTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QNTRfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUMlgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTDEyWFggaXMgbm90IHNldAotIyBDT05GSUdfWkQxMjExUlcgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1VTQk5FVD15Ci1DT05GSUdfVVNCX05FVF9BWDg4MTdYPXkKLUNPTkZJR19VU0JfTkVUX0NEQ0VUSEVSPXkKLSMgQ09ORklHX1VTQl9ORVRfQ0RDX0VFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX0RNOTYwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX1NNU0M3NVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfU01TQzk1WFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9HTDYyMEEgaXMgbm90IHNldAotQ09ORklHX1VTQl9ORVRfTkVUMTA4MD15Ci0jIENPTkZJR19VU0JfTkVUX1BMVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfTUNTNzgzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX1JORElTX0hPU1QgaXMgbm90IHNldAotQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVD15CiBDT05GSUdfVVNCX0FMSV9NNTYzMj15CiBDT05GSUdfVVNCX0FOMjcyMD15Ci1DT05GSUdfVVNCX0JFTEtJTj15Ci1DT05GSUdfVVNCX0FSTUxJTlVYPXkKIENPTkZJR19VU0JfRVBTT04yODg4PXkKIENPTkZJR19VU0JfS0MyMTkwPXkKLUNPTkZJR19VU0JfTkVUX1pBVVJVUz15Ci0jIENPTkZJR19VU0JfTkVUX0lOVDUxWDEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lQSEVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lFUlJBX05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogQ09ORklHX0lOUFVUX0pPWURFVj15CiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0Ci1DT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9HUElPPXkKLSMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MTTgzMjMgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9PTUFQIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9UV0w0MDMwPXkKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRT15Ci1DT05GSUdfTU9VU0VfUFMyPXkKLUNPTkZJR19NT1VTRV9QUzJfQUxQUz15Ci1DT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15Ci1DT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15Ci1DT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQotIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKIENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2PXkKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9TUEkgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0RZTkFQUk8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NQ1M1MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9XOTBYOTAwIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NSVNDPXkKLSMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URTIgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1lFQUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfQ00xMDkgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RXTDQwMzBfUFdSQlVUVE9OPXkKLSMgQ09ORklHX0lOUFVUX1RXTDQwMzBfVklCUkEgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVUlOUFVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0dQSU9fUk9UQVJZX0VOQ09ERVIgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0zMgotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKIENPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQogQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQogQ09ORklHX1NFUklBTF84MjUwX1JTQT15Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET01fT01BUD15Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfT01BUD15Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19YSUxJTlggaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKIENPTkZJR19TUEk9eQotIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TUElfTUFTVEVSPXkKLQotIwotIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAogQ09ORklHX1NQSV9PTUFQMjRYWD15Ci0jIENPTkZJR19TUElfWElMSU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9ERVNJR05XQVJFIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUHJvdG9jb2wgTWFzdGVycwotIwotIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQogQ09ORklHX0RFQlVHX0dQSU89eQogQ09ORklHX0dQSU9fU1lTRlM9eQotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX0lUODc2MUUgaXMgbm90IHNldAotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CiBDT05GSUdfR1BJT19UV0w0MDMwPXkKLSMgQ09ORklHX0dQSU9fQURQNTU4OCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0Ci0KLSMKLSMgQUM5NyBHUElPIGV4cGFuZGVyczoKLSMKIENPTkZJR19XMT15Ci1DT05GSUdfVzFfQ09OPXkKLQotIwotIyAxLXdpcmUgQnVzIE1hc3RlcnMKLSMKLSMgQ09ORklHX1cxX01BU1RFUl9EUzI0OTAgaXMgbm90IHNldAotIyBDT05GSUdfVzFfTUFTVEVSX0RTMjQ4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMV9NQVNURVJfRFMxV00gaXMgbm90IHNldAotIyBDT05GSUdfVzFfTUFTVEVSX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSERRX01BU1RFUl9PTUFQIGlzIG5vdCBzZXQKLQotIwotIyAxLXdpcmUgU2xhdmVzCi0jCi0jIENPTkZJR19XMV9TTEFWRV9USEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMV9TTEFWRV9TTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxX1NMQVZFX0RTMjQzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMV9TTEFWRV9EUzI0MzMgaXMgbm90IHNldAotIyBDT05GSUdfVzFfU0xBVkVfRFMyNzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxX1NMQVZFX0JRMjcwMDAgaXMgbm90IHNldAogQ09ORklHX1BPV0VSX1NVUFBMWT15Ci0jIENPTkZJR19QT1dFUl9TVVBQTFlfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUERBX1BPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBVFRFUllfRFMyNzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBVFRFUllfRFMyNzgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBVFRFUllfQlEyN3gwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVRURVJZX01BWDE3MDQwIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNDNzYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTczIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05NTI0MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDExMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NIVDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQU1DNjgyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MSVMzX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX09NQVBfV0FUQ0hET0c9eQogQ09ORklHX1RXTDQwMzBfV0FUQ0hET0c9eQotIyBDT05GSUdfTUFYNjNYWF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi1DT05GSUdfTUZEX0NPUkU9eQotIyBDT05GSUdfTUZEXzg4UE04NjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0kyQ1BMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiBDT05GSUdfTUVORUxBVVM9eQogQ09ORklHX1RXTDQwMzBfQ09SRT15CiBDT05GSUdfVFdMNDAzMF9QT1dFUj15Ci1DT05GSUdfVFdMNDAzMF9DT0RFQz15Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUFYODkyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAotIyBDT05GSUdfQUI0NTAwX0NPUkUgaXMgbm90IHNldAogQ09ORklHX1JFR1VMQVRPUj15Ci0jIENPTkZJR19SRUdVTEFUT1JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9VU0VSU1BBQ0VfQ09OU1VNRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX01BWDE1ODYgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX01BWDg2NDkgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX01BWDg2NjAgaXMgbm90IHNldAogQ09ORklHX1JFR1VMQVRPUl9UV0w0MDMwPXkKLSMgQ09ORklHX1JFR1VMQVRPUl9MUDM5NzEgaXMgbm90IHNldAogQ09ORklHX1JFR1VMQVRPUl9UUFM2NTAyMz15CiBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDdYPXkKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15CiBDT05GSUdfRklSTVdBUkVfRURJRD15Ci0jIENPTkZJR19GQl9EREMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQogQ09ORklHX0ZCX1RJTEVCTElUVElORz15Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1VWRVNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX09NQVAgaXMgbm90IHNldAogQ09ORklHX0ZCX09NQVBfTENEX1ZHQT15Ci0jIENPTkZJR19PTUFQMl9EU1MgaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiBDT05GSUdfTENEX0NMQVNTX0RFVklDRT15Ci0jIENPTkZJR19MQ0RfTDRGMDAyNDJUMDMgaXMgbm90IHNldAotIyBDT05GSUdfTENEX0xNUzI4M0dGMDUgaXMgbm90IHNldAotIyBDT05GSUdfTENEX0xUVjM1MFFWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xDRF9URE8yNE0gaXMgbm90IHNldAotIyBDT05GSUdfTENEX1ZHRzI0MzJBNCBpcyBub3Qgc2V0CiBDT05GSUdfTENEX1BMQVRGT1JNPXkKLUNPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLUNPTkZJR19CQUNLTElHSFRfR0VORVJJQz15Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX0RJU1BMQVlfU1VQUE9SVD15Ci0KLSMKLSMgRGlzcGxheSBoYXJkd2FyZSBkcml2ZXJzCi0jCi0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OPXkKIENPTkZJR19GT05UUz15CiBDT05GSUdfRk9OVF84eDg9eQogQ09ORklHX0ZPTlRfOHgxNj15Ci0jIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfTUlOSV80eDYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HTz15Ci1DT05GSUdfTE9HT19MSU5VWF9NT05PPXkKLUNPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKLUNPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQogQ09ORklHX1NPVU5EPXkKLUNPTkZJR19TT1VORF9PU1NfQ09SRT15Ci1DT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD15Ci1DT05GSUdfU05EX1RJTUVSPXkKLUNPTkZJR19TTkRfUENNPXkKLUNPTkZJR19TTkRfSFdERVA9eQotQ09ORklHX1NORF9SQVdNSURJPXkKLUNPTkZJR19TTkRfSkFDSz15Ci0jIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfT1NTRU1VTD15CiBDT05GSUdfU05EX01JWEVSX09TUz15CiBDT05GSUdfU05EX1BDTV9PU1M9eQotQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQotIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQogQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USz15CiBDT05GSUdfU05EX0RFQlVHPXkKLSMgQ09ORklHX1NORF9ERUJVR19WRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9QQ01fWFJVTl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfRFJJVkVSUz15Ci0jIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAotQ09ORklHX1NORF9BUk09eQotQ09ORklHX1NORF9TUEk9eQotQ09ORklHX1NORF9VU0I9eQogQ09ORklHX1NORF9VU0JfQVVESU89eQotIyBDT05GSUdfU05EX1VTQl9VQTEwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfU09DPXkKIENPTkZJR19TTkRfT01BUF9TT0M9eQotQ09ORklHX1NORF9PTUFQX1NPQ19NQ0JTUD15Ci0jIENPTkZJR19TTkRfT01BUF9TT0NfTjgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT01BUF9TT0NfT1ZFUk8gaXMgbm90IHNldAotIyBDT05GSUdfU05EX09NQVBfU09DX09NQVAzRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PTUFQX1NPQ19BTTM1MTdFVk0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX09NQVBfU09DX1NEUDM0MzAgaXMgbm90IHNldAogQ09ORklHX1NORF9PTUFQX1NPQ19PTUFQM19QQU5ET1JBPXkKLSMgQ09ORklHX1NORF9PTUFQX1NPQ19PTUFQM19CRUFHTEUgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09NQVBfU09DX1pPT00yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PTUFQX1NPQ19JR0VQMDAyMCBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1NPQ19JMkNfQU5EX1NQST15Ci0jIENPTkZJR19TTkRfU09DX0FMTF9DT0RFQ1MgaXMgbm90IHNldAotQ09ORklHX1NORF9TT0NfVFdMNDAzMD15Ci0jIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLSMgQ09ORklHX0hJRF8zTV9QQ1QgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSElEX01BR0lDTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfTU9TQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9NT05URVJFWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX09SVEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9QQU5USEVSTE9SRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUEVUQUxZTlggaXMgbm90IHNldAotIyBDT05GSUdfSElEX1FVQU5UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU0FNU1VORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU09OWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU1RBTlRVTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU1VOUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfV0FDT00gaXMgbm90IHNldAotIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQogQ09ORklHX1VTQl9ERUJVRz15CiBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NVU1BFTkQ9eQotQ09ORklHX1VTQl9PVEc9eQogIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01VU0JfSERSQz15Ci1DT05GSUdfVVNCX01VU0JfU09DPXkKLQotIwotIyBPTUFQIDI0M3ggaGlnaCBzcGVlZCBVU0Igc3VwcG9ydAotIwotCi0jCi0jIE9NQVAgMzQzeCBoaWdoIHNwZWVkIFVTQiBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfTVVTQl9IT1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX1BFUklQSEVSQUwgaXMgbm90IHNldAogQ09ORklHX1VTQl9NVVNCX09URz15CiBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkM9eQotQ09ORklHX1VTQl9NVVNCX0hEUkNfSENEPXkKLSMgQ09ORklHX01VU0JfUElPX09OTFkgaXMgbm90IHNldAotQ09ORklHX1VTQl9JTlZFTlRSQV9ETUE9eQotIyBDT05GSUdfVVNCX1RJX0NQUElfRE1BIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTVVTQl9ERUJVRz15Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfV0RNPXkKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLQotIwotIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwotIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0xJQlVTVUFMPXkKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfVEVTVD15Ci0jIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVQ9eQogQ09ORklHX1VTQl9HQURHRVRfREVCVUc9eQogQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVM9eQogQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRlM9eQotQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTIKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUjhBNjY1OTcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9TM0NfSFNPVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xBTkdXRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15CiBDT05GSUdfVVNCX1pFUk89bQotIyBDT05GSUdfVVNCX1pFUk9fSE5QVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUFTU19TVE9SQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19OT0tJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19NVUxUSSBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi1DT05GSUdfVVNCX09UR19VVElMUz15Ci0jIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTUDEzMDFfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVUxQSSBpcyBub3Qgc2V0Ci1DT05GSUdfVFdMNDAzMF9VU0I9eQotQ09ORklHX05PUF9VU0JfWENFSVY9eQogQ09ORklHX01NQz15Ci0jIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FPXkKLQotIwotIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQogQ09ORklHX1NESU9fVUFSVD15Ci0jIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX09NQVA9eQogQ09ORklHX01NQ19PTUFQX0hTPXkKLSMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKLQotIwotIyBMRUQgZHJpdmVycwotIwotIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX0dQSU89eQotQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15Ci0jIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfTFQzNTkzIGlzIG5vdCBzZXQKLUNPTkZJR19MRURTX1RSSUdHRVJTPXkKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQotIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049eQotCi0jCi0jIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKLSMKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfVFdMOTIzMzA9eQogQ09ORklHX1JUQ19EUlZfVFdMNDAzMD15Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBDQlVTIHN1cHBvcnQKLSMKLSMgQ09ORklHX0NCVVMgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKIENPTkZJR19RVU9UQT15Ci0jIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15Ci0jIENPTkZJR19RVU9UQV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUVVPVEFfVFJFRT15Ci0jIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKIENPTkZJR19RRk1UX1YyPXkKLUNPTkZJR19RVU9UQUNUTD15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX1NVTU1BUlk9eQogQ09ORklHX0pGRlMyX0ZTX1hBVFRSPXkKLUNPTkZJR19KRkZTMl9GU19QT1NJWF9BQ0w9eQotQ09ORklHX0pGRlMyX0ZTX1NFQ1VSSVRZPXkKIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKLUNPTkZJR19KRkZTMl9aTElCPXkKIENPTkZJR19KRkZTMl9MWk89eQotQ09ORklHX0pGRlMyX1JUSU1FPXkKIENPTkZJR19KRkZTMl9SVUJJTj15Ci0jIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15Ci0jIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CiBDT05GSUdfVUJJRlNfRlM9eQotIyBDT05GSUdfVUJJRlNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfVUJJRlNfRlNfQURWQU5DRURfQ09NUFIgaXMgbm90IHNldAotQ09ORklHX1VCSUZTX0ZTX0xaTz15Ci1DT05GSUdfVUJJRlNfRlNfWkxJQj15Ci0jIENPTkZJR19VQklGU19GU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WM19BQ0w9eQogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NFUEhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCiBDT05GSUdfUFJJTlRLX1RJTUU9eQotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQogQ09ORklHX1NDSEVEU1RBVFM9eQogQ09ORklHX1RJTUVSX1NUQVRTPXkKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfU1BJTkxPQ0s9eQotQ09ORklHX0RFQlVHX01VVEVYRVM9eQotQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0M9eQogQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQotIyBDT05GSUdfUFJPVkVfUkNVIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLREVQPXkKIENPTkZJR19MT0NLX1NUQVQ9eQotIyBDT05GSUdfREVCVUdfTE9DS0RFUCBpcyBub3Qgc2V0Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1M9eQogQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBQ0tUUkFDRT15Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1JJTkdfQlVGRkVSPXkKLUNPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotQ09ORklHX0ZUUkFDRT15Ci0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQotIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJNX1VOV0lORD15Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTEw9eQotIyBDT05GSUdfRUFSTFlfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ19FVE0gaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogQ09ORklHX1NFQ1VSSVRZPXkKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9QQVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9eQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz15Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15CiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPXkKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi1DT05GSUdfQ1JZUFRPX0FFUz15Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQVJDND15Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19MWk89eQotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQotQ09ORklHX0NSQzE2PXkKIENPTkZJR19DUkNfVDEwRElGPXkKIENPTkZJR19DUkNfSVRVX1Q9eQotQ09ORklHX0NSQzMyPXkKIENPTkZJR19DUkM3PXkKIENPTkZJR19MSUJDUkMzMkM9eQotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19MWk9fQ09NUFJFU1M9eQotQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfZXZtX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfZXZtX2RlZmNvbmZpZwppbmRleCBiMDJlMzcxLi4zYjA3MmU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXAzX2V2bV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19ldm1fZGVmY29uZmlnCkBAIC0xLDE1ODUgKzEsMTYwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAtcmM1Ci0jIE1vbiBNYXkgMTggMTQ6MDE6NTIgMjAwOQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci0jIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfRlJFRVpFUj15Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVA9eQotIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLQotIwotIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucwotIwotQ09ORklHX0FSQ0hfT01BUF9PVEc9eQotIyBDT05GSUdfQVJDSF9PTUFQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVAzPXkKLQotIwotIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucwotIwotQ09ORklHX09NQVBfU01BUlRSRUZMRVg9eQotIyBDT05GSUdfT01BUF9TTUFSVFJFRkxFWF9URVNUSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfREVCVUdfUE9XRVJET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9ERUJVR19DTE9DS0RPTUFJTiBpcyBub3Qgc2V0CiBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1M9eQotQ09ORklHX09NQVBfTVVYPXkKLSMgQ09ORklHX09NQVBfTVVYX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX01VWF9XQVJOSU5HUz15CiAjIENPTkZJR19PTUFQX01DQlNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTUJPWF9GV0sgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9NUFVfVElNRVIgaXMgbm90IHNldAogQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKLUNPTkZJR19PTUFQXzMyS19USU1FUl9IWj0xMjgKIENPTkZJR19PTUFQX0RNX1RJTUVSPXkKLUNPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQxPXkKLSMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMyBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9TRVJJQUxfV0FLRT15Ci1DT05GSUdfQVJDSF9PTUFQMzRYWD15CiBDT05GSUdfQVJDSF9PTUFQMzQzMD15Ci0KLSMKLSMgT01BUCBCb2FyZCBUeXBlCi0jCi0jIENPTkZJR19NQUNIX09NQVAzX0JFQUdMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfTERQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT1ZFUk8gaXMgbm90IHNldAogQ09ORklHX01BQ0hfT01BUDNFVk09eQotIyBDT05GSUdfTUFDSF9PTUFQM19QQU5ET1JBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF8zNDMwU0RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTk9LSUFfUlg1MSBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfMzJ2Nks9eQotQ09ORklHX0NQVV9WNz15Ci1DT05GSUdfQ1BVXzMydjc9eQotQ09ORklHX0NQVV9BQlJUX0VWNz15Ci1DT05GSUdfQ1BVX1BBQlJUX0lGQVI9eQotQ09ORklHX0NQVV9DQUNIRV9WNz15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQotQ09ORklHX0NQVV9DT1BZX1Y2PXkKLUNPTkZJR19DUFVfVExCX1Y3PXkKLUNPTkZJR19DUFVfSEFTX0FTSUQ9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19BUk1fVEhVTUJFRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVNfVExTX1JFRz15Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUk1fRVJSQVRBXzQzMDk3MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUk1fRVJSQVRBXzQ1ODY5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUk1fRVJSQVRBXzQ2MDA3NSBpcyBub3Qgc2V0Ci1DT05GSUdfQ09NTU9OX0NMS0RFVj15Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTI4CiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKLSMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15Ci0jIENPTkZJR19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJyb290PS9kZXYvbmZzIG5mc3Jvb3Q9MTkyLjE2OC4wLjE6L2hvbWUvdXNlci9idWlsZHJvb3QgaXA9MTkyLjE2OC4wLjI6MTkyLjE2OC4wLjE6MTkyLjE2OC4wLjE6MjU1LjI1NS4yNTUuMDp0Z3Q6ZXRoMDpvZmYgcncgY29uc29sZT10dHlTMiwxMTUyMDBuOCIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CiBDT05GSUdfVkZQPXkKLUNPTkZJR19WRlB2Mz15CiBDT05GSUdfTkVPTj15Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz15Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCiBDT05GSUdfUE09eQogQ09ORklHX1BNX0RFQlVHPXkKLUNPTkZJR19QTV9TTEVFUD15Ci1DT05GSUdfU1VTUEVORD15Ci1DT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKLSMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAogQ09ORklHX1BNX1JVTlRJTUU9eQotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPXkKLSMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKIENPTkZJR19JUF9QTlBfUkFSUD15Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci0jIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTUFQX05PUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORD15Ci0jIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0dQSU8gaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX09ORU5BTkQ9eQogQ09ORklHX01URF9PTkVOQU5EX1ZFUklGWV9XUklURT15Ci0jIENPTkZJR19NVERfT05FTkFORF9HRU5FUklDIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT05FTkFORF9PTUFQMj15Ci0jIENPTkZJR19NVERfT05FTkFORF9PVFAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkRfMlhfUFJPR1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORF9TSU0gaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTE2Mzg0Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiBDT05GSUdfU01TQzkxMVg9eQotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfVFdMNDAzMD15Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKIENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2PXkKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9TUEkgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0zMgotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKIENPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQogQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQogQ09ORklHX1NFUklBTF84MjUwX1JTQT15Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogQ09ORklHX0kyQ19PTUFQPXkKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfU1BJPXkKLSMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19TUElfT01BUDI0WFg9eQotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCi0jIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAogQ09ORklHX0dQSU9fVFdMNDAzMD15Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKIENPTkZJR19XQVRDSERPR19OT1dBWU9VVD15Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX09NQVBfV0FUQ0hET0c9eQotCi0jCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiBDT05GSUdfVFdMNDAzMF9DT1JFPXkKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotQ09ORklHX0RBQj15Ci0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SPXkKK0NPTkZJR19SRUdVTEFUT1JfVFdMNDAzMD15CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQogQ09ORklHX0ZCPXkKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX09NQVBfQk9PVExPQURFUl9JTklUIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQMl9WUkFNPXkKLUNPTkZJR19PTUFQMl9WUkZCPXkKIENPTkZJR19PTUFQMl9EU1M9eQogQ09ORklHX09NQVAyX1ZSQU1fU0laRT00CiAjIENPTkZJR19PTUFQMl9EU1NfREVCVUdfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQMl9EU1NfUkZCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUDJfRFNTX1ZFTkM9eQotIyBDT05GSUdfT01BUDJfRFNTX1NESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQMl9EU1NfRFNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVAyX0RTU19GQUtFX1ZTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19PTUFQMl9EU1NfTUlOX0ZDS19QRVJfUENLPTQKIENPTkZJR19GQl9PTUFQMj15CiAjIENPTkZJR19GQl9PTUFQMl9ERUJVR19TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX09NQVAyX0ZPUkNFX0FVVE9fVVBEQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9PTUFQMl9OVU1fRkJTPTMKLQotIwotIyBPTUFQMi8zIERpc3BsYXkgRGV2aWNlIERyaXZlcnMKLSMKIENPTkZJR19QQU5FTF9HRU5FUklDPXkKLSMgQ09ORklHX1BBTkVMX1NBTVNVTkdfTFRFNDMwV1FfRjBDIGlzIG5vdCBzZXQKIENPTkZJR19QQU5FTF9TSEFSUF9MUzAzN1Y3RFcwMT15Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi0jIENPTkZJR19ISURfQTRURUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQkVMS0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9DSEVSUlkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0NZUFJFU1MgaXMgbm90IHNldAotIyBDT05GSUdfRFJBR09OUklTRV9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAotIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1VTUEVORD15Ci1DT05GSUdfVVNCX09URz15CiAjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01VU0JfSERSQz15Ci1DT05GSUdfVVNCX01VU0JfU09DPXkKLQotIwotIyBPTUFQIDM0M3ggaGlnaCBzcGVlZCBVU0Igc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX01VU0JfSE9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVTQl9QRVJJUEhFUkFMIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTVVTQl9PVEc9eQogQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDPXkKLUNPTkZJR19VU0JfTVVTQl9IRFJDX0hDRD15Ci0jIENPTkZJR19NVVNCX1BJT19PTkxZIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfSU5WRU5UUkFfRE1BPXkKLSMgQ09ORklHX1VTQl9USV9DUFBJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVTQl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotCi0jCi0jIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1RFU1Q9eQotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCi1DT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15CiBDT05GSUdfVVNCX1pFUk89bQotIyBDT05GSUdfVVNCX1pFUk9fSE5QVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi1DT05GSUdfVVNCX09UR19VVElMUz15Ci0jIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTUDEzMDFfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQotIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19PTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfT01BUF9IUz15Ci0jIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci1DT05GSUdfUkVHVUxBVE9SPXkKLSMgQ09ORklHX1JFR1VMQVRPUl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci1DT05GSUdfUkVHVUxBVE9SX1RXTDQwMzA9eQotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKIENPTkZJR19RVU9UQT15Ci0jIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15Ci1DT05GSUdfUVVPVEFfVFJFRT15Ci0jIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKIENPTkZJR19RRk1UX1YyPXkKLUNPTkZJR19RVU9UQUNUTD15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKLSMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKICMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCi0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVkVOVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fVU5XSU5EPXkKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLUNPTkZJR19DUllQVE9fQ1JDMzJDPXkKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD15Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiBDT05GSUdfTElCQ1JDMzJDPXkKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXAzX3BhbmRvcmFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19wYW5kb3JhX2RlZmNvbmZpZwppbmRleCA1ZDA4ZTBiLi5kNWE2MjI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXAzX3BhbmRvcmFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfcGFuZG9yYV9kZWZjb25maWcKQEAgLTEsMTc5NiArMSwxNTggQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzYKLSMgU2F0IEZlYiAgNiAyMDoyNTo0MSAyMDEwCi0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0hBVkVfUFJPQ19DUFU9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfQVJDSF9IQVNfQ1BVRlJFUT15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0NST1NTX0NPTVBJTEU9IiIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfSEFWRV9LRVJORUxfR1pJUD15Ci1DT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKLUNPTkZJR19LRVJORUxfR1pJUD15Ci0jIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAotIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLUNPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9DTEs9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotQ09ORklHX1NMT1dfV09SSz15Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi1DT05GSUdfTU1VPXkKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRE9WRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05VQzkzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1M1UDY0NDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT01BUD15Ci0jIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VODUwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgT01BUCBJbXBsZW1lbnRhdGlvbnMKLSMKLUNPTkZJR19BUkNIX09NQVBfT1RHPXkKLSMgQ09ORklHX0FSQ0hfT01BUDEgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfT01BUDJQTFVTPXkKLSMgQ09ORklHX0FSQ0hfT01BUDIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT01BUDM9eQotIyBDT05GSUdfQVJDSF9PTUFQNCBpcyBub3Qgc2V0Ci0KLSMKLSMgT01BUCBGZWF0dXJlIFNlbGVjdGlvbnMKLSMKLSMgQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NQVBfTVVYIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX01DQlNQPXkKLSMgQ09ORklHX09NQVBfTUJPWF9GV0sgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9NUFVfVElNRVIgaXMgbm90IHNldAogQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKLUNPTkZJR19PTUFQXzMyS19USU1FUl9IWj0xMjgKIENPTkZJR19PTUFQX0RNX1RJTUVSPXkKLSMgQ09ORklHX09NQVBfUE1fTk9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9QTV9OT09QPXkKIENPTkZJR19BUkNIX09NQVAzNDMwPXkKLUNPTkZJR19PTUFQX1BBQ0tBR0VfQ0JCPXkKLQotIwotIyBPTUFQIEJvYXJkIFR5cGUKLSMKLSMgQ09ORklHX01BQ0hfT01BUDNfQkVBR0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9MRFAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PVkVSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVAzRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUDM1MTdFVk0gaXMgbm90IHNldAogQ09ORklHX01BQ0hfT01BUDNfUEFORE9SQT15Ci0jIENPTkZJR19NQUNIX09NQVAzX1RPVUNIQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfMzQzMFNEUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX05PS0lBX1JYNTEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX1pPT00yIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9aT09NMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NNX1QzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0lHRVAwMDIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF8zNjMwU0RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVAzX0VNVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQM19TRFJDX0FDX1RJTUlORyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfMzJ2Nks9eQotQ09ORklHX0NQVV9WNz15Ci1DT05GSUdfQ1BVXzMydjc9eQotQ09ORklHX0NQVV9BQlJUX0VWNz15Ci1DT05GSUdfQ1BVX1BBQlJUX1Y3PXkKLUNPTkZJR19DUFVfQ0FDSEVfVjc9eQotQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKLUNPTkZJR19DUFVfQ09QWV9WNj15Ci1DT05GSUdfQ1BVX1RMQl9WNz15Ci1DT05GSUdfQ1BVX0hBU19BU0lEPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQogQ09ORklHX0FSTV9USFVNQkVFPXkKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAotQ09ORklHX0hBU19UTFNfUkVHPXkKLUNPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NgotQ09ORklHX0NQVV9IQVNfUE1VPXkKLSMgQ09ORklHX0FSTV9FUlJBVEFfNDMwOTczIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSTV9FUlJBVEFfNDU4NjkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSTV9FUlJBVEFfNDYwMDc1IGlzIG5vdCBzZXQKLUNPTkZJR19DT01NT05fQ0xLREVWPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotQ09ORklHX1ZNU1BMSVRfM0c9eQotIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCi0jIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPXkKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEyOAotIyBDT05GSUdfVEhVTUIyX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLSMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLSMgQ09ORklHX0xFRFMgaXMgbm90IHNldAotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLSMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0iIGRlYnVnICIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CiBDT05GSUdfVkZQPXkKLUNPTkZJR19WRlB2Mz15CiBDT05GSUdfTkVPTj15Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz15Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX05FVF9LRVk9eQotIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQogQ09ORklHX0lQX1BOUF9SQVJQPXkKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogQ09ORklHX0RFVlRNUEZTPXkKIENPTkZJR19ERVZUTVBGU19NT1VOVD15Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORD15Ci0jIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0dQSU8gaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX09NQVAyPXkKLUNPTkZJR19NVERfTkFORF9PTUFQX1BSRUZFVENIPXkKLSMgQ09ORklHX01URF9OQU5EX09NQVBfUFJFRkVUQ0hfRE1BIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAotIwotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xNjM4NAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USV9EQUM3NTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTUMzMjAwVE9QIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9ODAwCiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NDgwCiBDT05GSUdfSU5QVVRfSk9ZREVWPXkKIENPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci0jIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfR1BJTz15Ci0jIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTE04MzIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX1RXTDQwMzA9eQotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFPXkKICMgQ09ORklHX01PVVNFX1BTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQogQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDY9eQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRFlOQVBSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FRVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01DUzUwMDAgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1c5MFg5MDAgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01JU0M9eQotIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9DTTEwOSBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVFdMNDAzMF9QV1JCVVRUT049eQotIyBDT05GSUdfSU5QVVRfVUlOUFVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0dQSU9fUk9UQVJZX0VOQ09ERVIgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTMyCi1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQogQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQogQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CiBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15CiBDT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX09NQVA9eQotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfU1BJPXkKLSMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19TUElfT01BUDI0WFg9eQotIyBDT05GSUdfU1BJX1hJTElOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfREVTSUdOV0FSRSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFByb3RvY29sIE1hc3RlcnMKLSMKLSMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CiBDT05GSUdfR1BJT19UV0w0MDMwPXkKLSMgQ09ORklHX0dQSU9fQURQNTU4OCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0Ci0KLSMKLSMgQUM5NyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTFMgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotQ09ORklHX01GRF9DT1JFPXkKLSMgQ09ORklHX01GRF84OFBNODYwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19JMkNQTEQgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogQ09ORklHX1RXTDQwMzBfQ09SRT15CiBDT05GSUdfVFdMNDAzMF9QT1dFUj15Ci1DT05GSUdfVFdMNDAzMF9DT0RFQz15Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUFYODkyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAotIyBDT05GSUdfQUI0NTAwX0NPUkUgaXMgbm90IHNldAogQ09ORklHX1JFR1VMQVRPUj15CiBDT05GSUdfUkVHVUxBVE9SX0RFQlVHPXkKLSMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9VU0VSU1BBQ0VfQ09OU1VNRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX01BWDE1ODYgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX01BWDg2NDkgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX01BWDg2NjAgaXMgbm90IHNldAogQ09ORklHX1JFR1VMQVRPUl9UV0w0MDMwPXkKLSMgQ09ORklHX1JFR1VMQVRPUl9MUDM5NzEgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9UUFM2NTA3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQogQ09ORklHX0ZCPXkKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfT01BUF9CT09UTE9BREVSX0lOSVQgaXMgbm90IHNldAotQ09ORklHX09NQVAyX1ZSQU09eQotQ09ORklHX09NQVAyX1ZSRkI9eQogQ09ORklHX09NQVAyX0RTUz15Ci1DT05GSUdfT01BUDJfVlJBTV9TSVpFPTAKLUNPTkZJR19PTUFQMl9EU1NfREVCVUdfU1VQUE9SVD15Ci0jIENPTkZJR19PTUFQMl9EU1NfQ09MTEVDVF9JUlFfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfT01BUDJfRFNTX1JGQkkgaXMgbm90IHNldAotQ09ORklHX09NQVAyX0RTU19WRU5DPXkKLSMgQ09ORklHX09NQVAyX0RTU19TREkgaXMgbm90IHNldAotIyBDT05GSUdfT01BUDJfRFNTX0RTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQMl9EU1NfRkFLRV9WU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUDJfRFNTX01JTl9GQ0tfUEVSX1BDSz0wCiBDT05GSUdfRkJfT01BUDI9eQotQ09ORklHX0ZCX09NQVAyX0RFQlVHX1NVUFBPUlQ9eQotIyBDT05GSUdfRkJfT01BUDJfRk9SQ0VfQVVUT19VUERBVEUgaXMgbm90IHNldAotQ09ORklHX0ZCX09NQVAyX05VTV9GQlM9MwotCi0jCi0jIE9NQVAyLzMgRGlzcGxheSBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfUEFORUxfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQU5FTF9TSEFSUF9MUzAzN1Y3RFcwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQU5FTF9TSEFSUF9MUTA0M1QxREcwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQU5FTF9UT1BQT0xZX1RETzM1UyBpcyBub3Qgc2V0CiBDT05GSUdfUEFORUxfVFBPX1REMDQzTVRFQTE9eQogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiAjIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLUNPTkZJR19CQUNLTElHSFRfR0VORVJJQz15Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9OVF84eDg9eQotQ09ORklHX0ZPTlRfOHgxNj15CiBDT05GSUdfTE9HTz15Ci1DT05GSUdfTE9HT19MSU5VWF9NT05PPXkKLUNPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKLUNPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQogQ09ORklHX1NPVU5EPXkKLUNPTkZJR19TT1VORF9PU1NfQ09SRT15Ci1DT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD15Ci1DT05GSUdfU05EX1RJTUVSPXkKLUNPTkZJR19TTkRfUENNPXkKLUNPTkZJR19TTkRfSkFDSz15Ci0jIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfT1NTRU1VTD15CiBDT05GSUdfU05EX01JWEVSX09TUz15CiBDT05GSUdfU05EX1BDTV9PU1M9eQotQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQotIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQogQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USz15Ci0jIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0RSSVZFUlM9eQotIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfQVJNPXkKLUNPTkZJR19TTkRfU1BJPXkKLUNPTkZJR19TTkRfVVNCPXkKLSMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1VTQl9VQTEwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfU09DPXkKIENPTkZJR19TTkRfT01BUF9TT0M9eQotQ09ORklHX1NORF9PTUFQX1NPQ19NQ0JTUD15CiBDT05GSUdfU05EX09NQVBfU09DX09NQVAzX1BBTkRPUkE9eQotQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9eQotIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU09DX1RXTDQwMzA9eQotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi0jIENPTkZJR19ISURfM01fUENUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfT1JURUsgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BBTlRIRVJMT1JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9QRVRBTFlOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUVVBTlRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TVEFOVFVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01VU0JfSERSQz15Ci1DT05GSUdfVVNCX01VU0JfU09DPXkKLQotIwotIyBPTUFQIDM0M3ggaGlnaCBzcGVlZCBVU0Igc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX01VU0JfSE9TVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01VU0JfUEVSSVBIRVJBTD15Ci0jIENPTkZJR19VU0JfTVVTQl9PVEcgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDPXkKLSMgQ09ORklHX01VU0JfUElPX09OTFkgaXMgbm90IHNldAotQ09ORklHX1VTQl9JTlZFTlRSQV9ETUE9eQotIyBDT05GSUdfVVNCX1RJX0NQUElfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0KLSMKLSMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KLSMKLSMgQ09ORklHX1VTQl9TVE9SQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTIKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUjhBNjY1OTcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9TM0NfSFNPVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xBTkdXRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15Ci0jIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9FVEg9eQotQ09ORklHX1VTQl9FVEhfUk5ESVM9eQotIyBDT05GSUdfVVNCX0VUSF9FRU0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01BU1NfU1RPUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfTk9LSUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfTVVMVEkgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotQ09ORklHX1VTQl9PVEdfVVRJTFM9eQotIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU1AxMzAxX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VMUEkgaXMgbm90IHNldAorQ09ORklHX1VTQl9FVEg9bQogQ09ORklHX1RXTDQwMzBfVVNCPXkKLSMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogQ09ORklHX01NQz15Ci0jIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz15Ci1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15Ci0jIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX09NQVAgaXMgbm90IHNldAogQ09ORklHX01NQ19PTUFQX0hTPXkKLSMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CiBDT05GSUdfTEVEU19DTEFTUz15Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLSMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19HUElPPXkKLUNPTkZJR19MRURTX0dQSU9fUExBVEZPUk09eQotIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfREFDMTI0UzA4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX0xUMzU5MyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCiBDT05GSUdfTEVEU19UUklHR0VSUz15Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVIgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj15Ci0KLSMKLSMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQotIwotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9UV0w0MDMwPXkKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci1DT05GSUdfRkFOT1RJRlk9eQogQ09ORklHX1FVT1RBPXkKLSMgQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HPXkKLUNPTkZJR19RVU9UQV9UUkVFPXkKLSMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAogQ09ORklHX1FGTVRfVjI9eQotQ09ORklHX1FVT1RBQ1RMPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRVBIX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DSUZTPXkKLSMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fVU5XSU5EPXkKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DX0VUTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwogQ09ORklHX0NSWVBUT19DUkMzMkM9eQotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD15Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX05MQVRUUj15Ci0jIENPTkZJR19TSE1fU0lHTkFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPUSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXAzX3N0YWxrZXJfbGtzX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfc3RhbGtlcl9sa3NfZGVmY29uZmlnCmluZGV4IDgzMzY1ZjAuLjFkMWFiMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfc3RhbGtlcl9sa3NfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfc3RhbGtlcl9sa3NfZGVmY29uZmlnCkBAIC0xLDE2OTEgKzEsMTUwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzQtcmM3Ci0jIE1vbiBNYXkgMTcgMTY6NTc6MjggMjAxMAotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19IQVZFX1BST0NfQ1BVPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0FSQ0hfSEFTX0NQVUZSRVE9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX05FRURfRE1BX01BUF9TVEFURT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlRfNj15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfSEFWRV9LRVJORUxfR1pJUD15Ci1DT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKLUNPTkZJR19LRVJORUxfR1pJUD15Ci0jIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAotIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfVUlEMTY9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0Ci1DT05GSUdfRlJFRVpFUj15Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ET1ZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlVDOTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NITU9CSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVA2NDQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQNjQ0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1M1UEMxWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVBWMjEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1U4NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT01BUD15Ci0KLSMKLSMgVEkgT01BUCBJbXBsZW1lbnRhdGlvbnMKLSMKLUNPTkZJR19BUkNIX09NQVBfT1RHPXkKLSMgQ09ORklHX0FSQ0hfT01BUDEgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfT01BUDJQTFVTPXkKLSMgQ09ORklHX0FSQ0hfT01BUDIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT01BUDM9eQotIyBDT05GSUdfQVJDSF9PTUFQNCBpcyBub3Qgc2V0Ci0KLSMKLSMgT01BUCBGZWF0dXJlIFNlbGVjdGlvbnMKLSMKIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUz15Ci1DT05GSUdfT01BUF9NVVg9eQotIyBDT05GSUdfT01BUF9NVVhfREVCVUcgaXMgbm90IHNldAotQ09ORklHX09NQVBfTVVYX1dBUk5JTkdTPXkKICMgQ09ORklHX09NQVBfTUNCU1AgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9NQk9YX0ZXSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX01QVV9USU1FUiBpcyBub3Qgc2V0CiBDT05GSUdfT01BUF8zMktfVElNRVI9eQotIyBDT05GSUdfT01BUDNfTDJfQVVYX1NFQ1VSRV9TQVZFX1JFU1RPUkUgaXMgbm90IHNldAotQ09ORklHX09NQVBfMzJLX1RJTUVSX0haPTEyOAogQ09ORklHX09NQVBfRE1fVElNRVI9eQotIyBDT05GSUdfT01BUF9QTV9OT05FIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX1BNX05PT1A9eQogQ09ORklHX0FSQ0hfT01BUDM0MzA9eQotQ09ORklHX09NQVBfUEFDS0FHRV9DVVM9eQotCi0jCi0jIE9NQVAgQm9hcmQgVHlwZQotIwotIyBDT05GSUdfTUFDSF9PTUFQM19CRUFHTEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9ERVZLSVQ4MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9MRFAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PVkVSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVAzRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUDM1MTdFVk0gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQM19QQU5ET1JBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUDNfVE9VQ0hCT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF8zNDMwU0RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTk9LSUFfUlg1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfWk9PTTIgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX1pPT00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ01fVDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfSUdFUDAwMjAgaXMgbm90IHNldAogQ09ORklHX01BQ0hfU0JDMzUzMD15Ci0jIENPTkZJR19NQUNIX09NQVBfMzYzMFNEUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQM19FTVUgaXMgbm90IHNldAotIyBDT05GSUdfT01BUDNfU0RSQ19BQ19USU1JTkcgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVXzMydjZLPXkKLUNPTkZJR19DUFVfVjc9eQotQ09ORklHX0NQVV8zMnY3PXkKLUNPTkZJR19DUFVfQUJSVF9FVjc9eQotQ09ORklHX0NQVV9QQUJSVF9WNz15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y3PXkKLUNPTkZJR19DUFVfQ0FDSEVfVklQVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjY9eQotQ09ORklHX0NQVV9UTEJfVjc9eQotQ09ORklHX0NQVV9IQVNfQVNJRD15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0FSTV9USFVNQkVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAotQ09ORklHX0hBU19UTFNfUkVHPXkKLUNPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NgotQ09ORklHX0NQVV9IQVNfUE1VPXkKLSMgQ09ORklHX0FSTV9FUlJBVEFfNDMwOTczIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSTV9FUlJBVEFfNDU4NjkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSTV9FUlJBVEFfNDYwMDc1IGlzIG5vdCBzZXQKLUNPTkZJR19DT01NT05fQ0xLREVWPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotQ09ORklHX1ZNU1BMSVRfM0c9eQotIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEyOAotIyBDT05GSUdfVEhVTUIyX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLUNPTkZJR19BUkNIX0hBU19IT0xFU19NRU1PUllNT0RFTD15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTAKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci0jIENPTkZJR19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0jIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9uZnMgbmZzcm9vdD0xOTIuMTY4LjAuMTovaG9tZS91c2VyL2J1aWxkcm9vdCBpcD0xOTIuMTY4LjAuMjoxOTIuMTY4LjAuMToxOTIuMTY4LjAuMToyNTUuMjU1LjI1NS4wOnRndDpldGgwOm9mZiBydyBjb25zb2xlPXR0eVMyLDExNTIwMG44IgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKIENPTkZJR19WRlA9eQotQ09ORklHX1ZGUHYzPXkKIENPTkZJR19ORU9OPXkKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9NSVNDPXkKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15CiBDT05GSUdfUE1fREVCVUc9eQotIyBDT05GSUdfUE1fQURWQU5DRURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUE1fVkVSQk9TRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0FOX1BNX1RSQUNFPXkKLUNPTkZJR19QTV9TTEVFUD15Ci1DT05GSUdfU1VTUEVORD15Ci1DT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKLSMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fT1BTPXkKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0tFWT15Ci0jIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15CiBDT05GSUdfSVBfUE5QX1JBUlA9eQotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORD15Ci0jIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfT01BUDIgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX09ORU5BTkQ9eQogQ09ORklHX01URF9PTkVOQU5EX1ZFUklGWV9XUklURT15Ci0jIENPTkZJR19NVERfT05FTkFORF9HRU5FUklDIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT05FTkFORF9PTUFQMj15Ci0jIENPTkZJR19NVERfT05FTkFORF9PVFAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkRfMlhfUFJPR1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORF9TSU0gaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAotIwotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xNjM4NAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0lfTU9EPXkKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSUNSRUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJX0RBVklOQ0lfRU1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiBDT05GSUdfU01TQzkxMVg9eQotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVBIRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLSMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX1RXTDQwMzA9eQotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CiBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9EWU5BUFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VFVEkgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUNTNTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVzkwWDkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0zMgotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKIENPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQogQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQogQ09ORklHX1NFUklBTF84MjUwX1JTQT15Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogQ09ORklHX0kyQ19PTUFQPXkKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1hJTElOWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogQ09ORklHX1NQST15Ci0jIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NQSV9NQVNURVI9eQotCi0jCi0jIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfU1BJX09NQVAyNFhYPXkKLSMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAotIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCi0jIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX0lUODc2MUUgaXMgbm90IHNldAotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CiBDT05GSUdfR1BJT19UV0w0MDMwPXkKLSMgQ09ORklHX0dQSU9fQURQNTU4OCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0Ci0KLSMKLSMgQUM5NyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19PTUFQX1dBVENIRE9HPXkKLSMgQ09ORklHX1RXTDQwMzBfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfTUFYNjNYWF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfODhQTTg2MFggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfSTJDUExEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKIENPTkZJR19UV0w0MDMwX0NPUkU9eQotIyBDT05GSUdfVFdMNDAzMF9QT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX0NPREVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9NQVg4OTI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004OTk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfUkVHVUxBVE9SPXkKLSMgQ09ORklHX1JFR1VMQVRPUl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfTUFYMTU4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfTUFYODY0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfTUFYODY2MCBpcyBub3Qgc2V0CiBDT05GSUdfUkVHVUxBVE9SX1RXTDQwMzA9eQotIyBDT05GSUdfUkVHVUxBVE9SX0xQMzk3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwMjMgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQMl9EU1MgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi0jIENPTkZJR19ISURfM01fUENUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX01PU0FSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfTU9OVEVSRVkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9PUlRFSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9RVUFOVEEgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NUQU5UVU0gaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotQ09ORklHX1VTQl9PVEc9eQogIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01VU0JfSERSQz15Ci1DT05GSUdfVVNCX01VU0JfU09DPXkKLQotIwotIyBPTUFQIDM0M3ggaGlnaCBzcGVlZCBVU0Igc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX01VU0JfSE9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVTQl9QRVJJUEhFUkFMIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTVVTQl9PVEc9eQogQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDPXkKLUNPTkZJR19VU0JfTVVTQl9IRFJDX0hDRD15Ci0jIENPTkZJR19NVVNCX1BJT19PTkxZIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfSU5WRU5UUkFfRE1BPXkKLSMgQ09ORklHX1VTQl9USV9DUFBJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVTQl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotCi0jCi0jIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1RFU1Q9eQotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCi1DT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQogQ09ORklHX1VTQl9aRVJPPW0KLSMgQ09ORklHX1VTQl9aRVJPX0hOUFRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01BU1NfU1RPUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfTk9LSUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfTVVMVEkgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotQ09ORklHX1VTQl9PVEdfVVRJTFM9eQotIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU1AxMzAxX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VMUEkgaXMgbm90IHNldAogQ09ORklHX1RXTDQwMzBfVVNCPXkKLSMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogQ09ORklHX01NQz15Ci0jIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz15Ci1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15Ci0jIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX09NQVAgaXMgbm90IHNldAogQ09ORklHX01NQ19PTUFQX0hTPXkKLSMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQogQ09ORklHX1FVT1RBPXkKLSMgQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HPXkKLSMgQ09ORklHX1FVT1RBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19RVU9UQV9UUkVFPXkKLSMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAogQ09ORklHX1FGTVRfVjI9eQotQ09ORklHX1FVT1RBQ1RMPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ01PREVfTk9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQotIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8gaXMgbm90IHNldAotIyBDT05GSUdfTE9HRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKLSMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NFUEhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKICMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotQ09ORklHX0FSTV9VTldJTkQ9eQotIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotIyBDT05GSUdfT0NfRVRNIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLUNPTkZJR19DUllQVE9fQ1JDMzJDPXkKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogQ09ORklHX0xJQkNSQzMyQz15Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM190b3VjaGJvb2tfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM190b3VjaGJvb2tfZGVmY29uZmlnCmluZGV4IDk2OGZiYWEuLmU5ODhlY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfdG91Y2hib29rX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX3RvdWNoYm9va19kZWZjb25maWcKQEAgLTEsNDc1ICsxLDkxIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM4Ci0jIEZyaSBEZWMgIDQgMTY6MDI6MTcgMjAwOQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0FSQ0hfSEFTX0NQVUZSRVE9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfT1BST0ZJTEVfQVJNVjc9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKIENPTkZJR19UQVNLU1RBVFM9eQogQ09ORklHX1RBU0tfREVMQVlfQUNDVD15CiBDT05GSUdfVEFTS19YQUNDVD15CiBDT05GSUdfVEFTS19JT19BQ0NPVU5USU5HPXkKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE1Ci1DT05GSUdfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19VSUQxNj15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15Ci1DT05GSUdfVFJBQ0VQT0lOVFM9eQogQ09ORklHX09QUk9GSUxFPXkKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xPV19XT1JLPXkKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQ9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotQ09ORklHX0ZSRUVaRVI9eQotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi1DT05GSUdfTU1VPXkKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVA9eQotIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKLQotIwotIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucwotIwotQ09ORklHX0FSQ0hfT01BUF9PVEc9eQotIyBDT05GSUdfQVJDSF9PTUFQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVAzPXkKLSMgQ09ORklHX0FSQ0hfT01BUDQgaXMgbm90IHNldAotCi0jCi0jIE9NQVAgRmVhdHVyZSBTZWxlY3Rpb25zCi0jCi0jIENPTkZJR19PTUFQX0RFQlVHX1BPV0VSRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfREVCVUdfQ0xPQ0tET01BSU4gaXMgbm90IHNldAogQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTPXkKICMgQ09ORklHX09NQVBfTVVYIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX01DQlNQPXkKLSMgQ09ORklHX09NQVBfTUJPWF9GV0sgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9NUFVfVElNRVIgaXMgbm90IHNldAogQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKLUNPTkZJR19PTUFQXzMyS19USU1FUl9IWj0xMjgKIENPTkZJR19PTUFQX0RNX1RJTUVSPXkKLSMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDEgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMiBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMz15Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX05PTkUgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9QTV9OT05FIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX1BNX05PT1A9eQotQ09ORklHX0FSQ0hfT01BUDM0WFg9eQogQ09ORklHX0FSQ0hfT01BUDM0MzA9eQotCi0jCi0jIE9NQVAgQm9hcmQgVHlwZQotIwotIyBDT05GSUdfTUFDSF9PTUFQM19CRUFHTEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX0xEUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09WRVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUDNFVk0gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQMzUxN0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVAzX1BBTkRPUkEgaXMgbm90IHNldAogQ09ORklHX01BQ0hfT01BUDNfVE9VQ0hCT09LPXkKLSMgQ09ORklHX01BQ0hfT01BUF8zNDMwU0RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTk9LSUFfUlg1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfWk9PTTIgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX1pPT00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ01fVDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfSUdFUDAwMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQXzM2MzBTRFAgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVXzMydjZLPXkKLUNPTkZJR19DUFVfVjc9eQotQ09ORklHX0NQVV8zMnY3PXkKLUNPTkZJR19DUFVfQUJSVF9FVjc9eQotQ09ORklHX0NQVV9QQUJSVF9WNz15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y3PXkKLUNPTkZJR19DUFVfQ0FDSEVfVklQVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjY9eQotQ09ORklHX0NQVV9UTEJfVjc9eQotQ09ORklHX0NQVV9IQVNfQVNJRD15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKIENPTkZJR19BUk1fVEhVTUJFRT15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVNfVExTX1JFRz15Ci1DT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTYKLSMgQ09ORklHX0FSTV9FUlJBVEFfNDMwOTczIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSTV9FUlJBVEFfNDU4NjkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSTV9FUlJBVEFfNDYwMDc1IGlzIG5vdCBzZXQKLUNPTkZJR19DT01NT05fQ0xLREVWPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotQ09ORklHX1ZNU1BMSVRfM0c9eQotIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCi0jIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0haPTEyOAotIyBDT05GSUdfVEhVTUIyX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfQUVBQkk9eQogIyBDT05GSUdfT0FCSV9DT01QQVQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfTEVEUz15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSIgZGVidWcgIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfS0VYRUM9eQotQ09ORklHX0FUQUdTX1BST0M9eQotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfVkZQPXkKLUNPTkZJR19WRlB2Mz15CiBDT05GSUdfTkVPTj15Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci1DT05GSUdfSEFWRV9BT1VUPXkKIENPTkZJR19CSU5GTVRfQU9VVD1tCiBDT05GSUdfQklORk1UX01JU0M9eQotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwogQ09ORklHX1BNPXkKIENPTkZJR19QTV9ERUJVRz15Ci0jIENPTkZJR19QTV9WRVJCT1NFIGlzIG5vdCBzZXQKLUNPTkZJR19DQU5fUE1fVFJBQ0U9eQotQ09ORklHX1BNX1NMRUVQPXkKLUNPTkZJR19TVVNQRU5EPXkKLSMgQ09ORklHX1BNX1RFU1RfU1VTUEVORCBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKLSMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAogQ09ORklHX1BNX1JVTlRJTUU9eQotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci1DT05GSUdfWEZSTV9JUENPTVA9bQogQ09ORklHX05FVF9LRVk9eQotIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQogQ09ORklHX0lQX1BOUF9SQVJQPXkKIENPTkZJR19ORVRfSVBJUD1tCiBDT05GSUdfTkVUX0lQR1JFPW0KLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAogQ09ORklHX0lORVRfQUg9bQogQ09ORklHX0lORVRfRVNQPW0KIENPTkZJR19JTkVUX0lQQ09NUD1tCi1DT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9UVU5ORUw9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLUNPTkZJR19JTkVUX0xSTz15CiBDT05GSUdfSU5FVF9ESUFHPW0KLUNPTkZJR19JTkVUX1RDUF9ESUFHPW0KIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRD15Ci1DT05GSUdfVENQX0NPTkdfQklDPW0KLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfVENQX0NPTkdfV0VTVFdPT0Q9bQotQ09ORklHX1RDUF9DT05HX0hUQ1A9bQogQ09ORklHX1RDUF9DT05HX0hTVENQPW0KIENPTkZJR19UQ1BfQ09OR19IWUJMQT1tCi1DT05GSUdfVENQX0NPTkdfVkVHQVM9bQogQ09ORklHX1RDUF9DT05HX1NDQUxBQkxFPW0KIENPTkZJR19UQ1BfQ09OR19MUD1tCiBDT05GSUdfVENQX0NPTkdfVkVOTz1tCiBDT05GSUdfVENQX0NPTkdfWUVBSD1tCiBDT05GSUdfVENQX0NPTkdfSUxMSU5PSVM9bQotIyBDT05GSUdfREVGQVVMVF9CSUMgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ1VCSUM9eQotIyBDT05GSUdfREVGQVVMVF9IVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfVkVHQVMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9XRVNUV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1JFTk8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNj1tCi0jIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUNl9BSD1tCiBDT05GSUdfSU5FVDZfRVNQPW0KIENPTkZJR19JTkVUNl9JUENPTVA9bQogQ09ORklHX0lQVjZfTUlQNj1tCi1DT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQotQ09ORklHX0lORVQ2X1RVTk5FTD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQogQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTj1tCi1DT05GSUdfSVBWNl9TSVQ9bQotQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQogQ09ORklHX0lQVjZfVFVOTkVMPW0KIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUz15CiBDT05GSUdfSVBWNl9TVUJUUkVFUz15CiBDT05GSUdfSVBWNl9NUk9VVEU9eQotIyBDT05GSUdfSVBWNl9QSU1TTV9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15Ci1DT05GSUdfQlJJREdFX05FVEZJTFRFUj15Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KIENPTkZJR19ORl9DT05OVFJBQ0s9bQotQ09ORklHX05GX0NUX0FDQ1Q9eQotQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKIENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTPXkKLUNPTkZJR19ORl9DVF9QUk9UT19EQ0NQPW0KLUNPTkZJR19ORl9DVF9QUk9UT19HUkU9bQotQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQogQ09ORklHX05GX0NUX1BST1RPX1VEUExJVEU9bQogQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQogQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQpAQCAtNDgxLDMzICs5NywyMSBAQAogQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQogQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KIENPTkZJR19ORl9DVF9ORVRMSU5LPW0KLSMgQ09ORklHX05FVEZJTFRFUl9UUFJPWFkgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5NQVJLPW0KLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITD1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xFRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1Q9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ0xVU1RFUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEw9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQpAQCAtNTE2LDM4ICsxMjAsMjQgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVI9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BIWVNERVYgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlQ9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVF9QUk9DX0NPTVBBVCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RJTUU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9VMzI9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09TRiBpcyBub3Qgc2V0CiBDT05GSUdfSVBfVlM9bQogQ09ORklHX0lQX1ZTX0lQVjY9eQogQ09ORklHX0lQX1ZTX0RFQlVHPXkKLUNPTkZJR19JUF9WU19UQUJfQklUUz0xMgotCi0jCi0jIElQVlMgdHJhbnNwb3J0IHByb3RvY29sIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnQKLSMKIENPTkZJR19JUF9WU19QUk9UT19UQ1A9eQogQ09ORklHX0lQX1ZTX1BST1RPX1VEUD15Ci1DT05GSUdfSVBfVlNfUFJPVE9fQUhfRVNQPXkKIENPTkZJR19JUF9WU19QUk9UT19FU1A9eQogQ09ORklHX0lQX1ZTX1BST1RPX0FIPXkKLQotIwotIyBJUFZTIHNjaGVkdWxlcgotIwogQ09ORklHX0lQX1ZTX1JSPW0KIENPTkZJR19JUF9WU19XUlI9bQogQ09ORklHX0lQX1ZTX0xDPW0KQEAgLTU1OCwxOCArMTQ4LDggQEAKIENPTkZJR19JUF9WU19TSD1tCiBDT05GSUdfSVBfVlNfU0VEPW0KIENPTkZJR19JUF9WU19OUT1tCi0KLSMKLSMgSVBWUyBhcHBsaWNhdGlvbiBoZWxwZXIKLSMKIENPTkZJR19JUF9WU19GVFA9bQotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05GX0RFRlJBR19JUFY0PW0KIENPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKIENPTkZJR19JUF9ORl9RVUVVRT1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KQEAgLTU4MSwyMiArMTYxLDEwIEBACiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQogQ09ORklHX05GX05BVD1tCi1DT05GSUdfTkZfTkFUX05FRURFRD15CiBDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCiBDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUM9bQotQ09ORklHX05GX05BVF9QUk9UT19EQ0NQPW0KLUNPTkZJR19ORl9OQVRfUFJPVE9fR1JFPW0KLUNPTkZJR19ORl9OQVRfUFJPVE9fVURQTElURT1tCi1DT05GSUdfTkZfTkFUX1BST1RPX1NDVFA9bQotQ09ORklHX05GX05BVF9GVFA9bQotQ09ORklHX05GX05BVF9JUkM9bQotQ09ORklHX05GX05BVF9URlRQPW0KLUNPTkZJR19ORl9OQVRfQU1BTkRBPW0KLUNPTkZJR19ORl9OQVRfUFBUUD1tCi1DT05GSUdfTkZfTkFUX0gzMjM9bQotQ09ORklHX05GX05BVF9TSVA9bQogQ09ORklHX0lQX05GX01BTkdMRT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCkBAIC02MDUsMTAgKzE3Myw2IEBACiBDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9BUlBGSUxURVI9bQogQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQotCi0jCi0jIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCiBDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjY9bQogQ09ORklHX0lQNl9ORl9RVUVVRT1tCiBDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KQEAgLTYyNiw2MiArMTkwLDE5IEBACiBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQogQ09ORklHX0lQNl9ORl9NQU5HTEU9bQogQ09ORklHX0lQNl9ORl9SQVc9bQotIyBDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTIGlzIG5vdCBzZXQKIENPTkZJR19JUF9EQ0NQPW0KLUNPTkZJR19JTkVUX0RDQ1BfRElBRz1tCi0KLSMKLSMgRENDUCBDQ0lEcyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9EQ0NQX0NDSUQyX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9EQ0NQX0NDSUQzPXkKLSMgQ09ORklHX0lQX0RDQ1BfQ0NJRDNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lQX0RDQ1BfQ0NJRDNfUlRPPTEwMAotQ09ORklHX0lQX0RDQ1BfVEZSQ19MSUI9eQotCi0jCi0jIERDQ1AgS2VybmVsIEhhY2tpbmcKLSMKLSMgQ09ORklHX0lQX0RDQ1BfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lQX1NDVFA9bQotIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0Ci1DT05GSUdfU0NUUF9ITUFDX01ENT15Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAogQ09ORklHX1RJUEM9bQotIyBDT05GSUdfVElQQ19BRFZBTkNFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19BVE09bQogQ09ORklHX0FUTV9DTElQPW0KLSMgQ09ORklHX0FUTV9DTElQX05PX0lDTVAgaXMgbm90IHNldAogQ09ORklHX0FUTV9MQU5FPW0KIENPTkZJR19BVE1fTVBPQT1tCiBDT05GSUdfQVRNX0JSMjY4ND1tCi0jIENPTkZJR19BVE1fQlIyNjg0X0lQRklMVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19TVFA9bQotQ09ORklHX0dBUlA9bQogQ09ORklHX0JSSURHRT1tCi0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKIENPTkZJR19WTEFOXzgwMjFRPW0KIENPTkZJR19WTEFOXzgwMjFRX0dWUlA9eQotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19MTEM9bQotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19XQU5fUk9VVEVSPW0KLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKIENPTkZJR19ORVRfU0NIRUQ9eQotCi0jCi0jIFF1ZXVlaW5nL1NjaGVkdWxpbmcKLSMKIENPTkZJR19ORVRfU0NIX0NCUT1tCiBDT05GSUdfTkVUX1NDSF9IVEI9bQogQ09ORklHX05FVF9TQ0hfSEZTQz1tCkBAIC02OTYsMTUgKzIxNyw5IEBACiBDT05GSUdfTkVUX1NDSF9EU01BUks9bQogQ09ORklHX05FVF9TQ0hfTkVURU09bQogQ09ORklHX05FVF9TQ0hfRFJSPW0KLQotIwotIyBDbGFzc2lmaWNhdGlvbgotIwotQ09ORklHX05FVF9DTFM9eQogQ09ORklHX05FVF9DTFNfQkFTSUM9bQogQ09ORklHX05FVF9DTFNfVENJTkRFWD1tCiBDT05GSUdfTkVUX0NMU19ST1VURTQ9bQotQ09ORklHX05FVF9DTFNfUk9VVEU9eQogQ09ORklHX05FVF9DTFNfRlc9bQogQ09ORklHX05FVF9DTFNfVTMyPW0KIENPTkZJR19DTFNfVTMyX1BFUkY9eQpAQCAtNzEyLDIwICsyMjcsNyBAQAogQ09ORklHX05FVF9DTFNfUlNWUD1tCiBDT05GSUdfTkVUX0NMU19SU1ZQNj1tCiBDT05GSUdfTkVUX0NMU19GTE9XPW0KLSMgQ09ORklHX05FVF9FTUFUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19BQ1QgaXMgbm90IHNldAogQ09ORklHX05FVF9DTFNfSU5EPXkKLUNPTkZJR19ORVRfU0NIX0ZJRk89eQotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiBDT05GSUdfQlQ9eQogQ09ORklHX0JUX0wyQ0FQPXkKIENPTkZJR19CVF9TQ089eQpAQCAtNzM1LDEwICsyMzcsNiBAQAogQ09ORklHX0JUX0JORVBfTUNfRklMVEVSPXkKIENPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUj15CiBDT05GSUdfQlRfSElEUD15Ci0KLSMKLSMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCi0jCiBDT05GSUdfQlRfSENJQlRVU0I9eQogQ09ORklHX0JUX0hDSUJUU0RJTz15CiBDT05GSUdfQlRfSENJVUFSVD15CkBAIC03NDgsMjMwICsyNDYsMzggQEAKIENPTkZJR19CVF9IQ0lCQ00yMDNYPXkKIENPTkZJR19CVF9IQ0lCUEExMFg9eQogQ09ORklHX0JUX0hDSUJGVVNCPXkKLSMgQ09ORklHX0JUX0hDSVZIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQlRfTVJWTCBpcyBub3Qgc2V0CiBDT05GSUdfQUZfUlhSUEM9bQotIyBDT05GSUdfQUZfUlhSUENfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUlhLQUQgaXMgbm90IHNldAotQ09ORklHX0ZJQl9SVUxFUz15Ci1DT05GSUdfV0lSRUxFU1M9eQogQ09ORklHX0NGRzgwMjExPW0KLSMgQ09ORklHX05MODAyMTFfVEVTVE1PREUgaXMgbm90IHNldAotIyBDT05GSUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QUz15Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0xCi0jIENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQotQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CiBDT05GSUdfTElCODAyMTE9eQotIyBDT05GSUdfTElCODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01BQzgwMjExPW0KIENPTkZJR19NQUM4MDIxMV9SQ19QSUQ9eQogIyBDT05GSUdfTUFDODAyMTFfUkNfTUlOU1RSRUwgaXMgbm90IHNldAotQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfUElEPXkKLSMgQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUwgaXMgbm90IHNldAotQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQ9InBpZCIKLSMgQ09ORklHX01BQzgwMjExX01FU0ggaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTFfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExX0RFQlVHX01FTlUgaXMgbm90IHNldAogQ09ORklHX1dJTUFYPW0KLUNPTkZJR19XSU1BWF9ERUJVR19MRVZFTD04Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORD15Ci0jIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0dQSU8gaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX09NQVAyPXkKLUNPTkZJR19NVERfTkFORF9PTUFQX1BSRUZFVENIPXkKLSMgQ09ORklHX01URF9OQU5EX09NQVBfUFJFRkVUQ0hfRE1BIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORF9QTEFURk9STT15Ci0jIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKIENPTkZJR19NVERfVUJJPXkKLUNPTkZJR19NVERfVUJJX1dMX1RIUkVTSE9MRD00MDk2Ci1DT05GSUdfTVREX1VCSV9CRUJfUkVTRVJWRT0xCi0jIENPTkZJR19NVERfVUJJX0dMVUVCSSBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIGRlYnVnZ2luZyBvcHRpb25zCi0jCi0jIENPTkZJR19NVERfVUJJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTE2Mzg0Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfQ0RST01fUEtUQ0RWRD1tCi1DT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKLSMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CiBDT05GSUdfRUVQUk9NXzkzQ1g2PXkKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19SQUlEX0FUVFJTPW0KIENPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1NSPXkKIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CiBDT05GSUdfQ0hSX0RFVl9TRz15CiBDT05GSUdfQ0hSX0RFVl9TQ0g9bQogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfSVNDU0lfQVRUUlM9bQotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKIENPTkZJR19JU0NTSV9UQ1A9bQotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9bQogQ09ORklHX01EX0xJTkVBUj1tCkBAIC05NzksMjIgKzI4NSwxNSBAQAogQ09ORklHX01EX1JBSUQxPW0KIENPTkZJR19NRF9SQUlEMTA9bQogQ09ORklHX01EX1JBSUQ0NTY9bQotQ09ORklHX01EX1JBSUQ2X1BRPW0KLSMgQ09ORklHX0FTWU5DX1JBSUQ2X1RFU1QgaXMgbm90IHNldAogQ09ORklHX01EX01VTFRJUEFUSD1tCiBDT05GSUdfTURfRkFVTFRZPW0KIENPTkZJR19CTEtfREVWX0RNPW0KLSMgQ09ORklHX0RNX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19ETV9DUllQVD1tCiBDT05GSUdfRE1fU05BUFNIT1Q9bQogQ09ORklHX0RNX01JUlJPUj1tCi0jIENPTkZJR19ETV9MT0dfVVNFUlNQQUNFIGlzIG5vdCBzZXQKIENPTkZJR19ETV9aRVJPPW0KIENPTkZJR19ETV9NVUxUSVBBVEg9bQotIyBDT05GSUdfRE1fTVVMVElQQVRIX1FMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNX01VTFRJUEFUSF9TVCBpcyBub3Qgc2V0CiBDT05GSUdfRE1fREVMQVk9bQotIyBDT05GSUdfRE1fVUVWRU5UIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19EVU1NWT1tCiBDT05GSUdfQk9ORElORz1tCkBAIC0xMDAyLDQ0ICszMDEsOCBAQAogQ09ORklHX0VRVUFMSVpFUj1tCiBDT05GSUdfVFVOPW0KIENPTkZJR19WRVRIPW0KLSMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTl84MDIxMT15Ci0jIENPTkZJR19MSUJFUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJFUlRBU19USElORklSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDc2QzUwWF9VU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX1JORElTX1dMQU4gaXMgbm90IHNldAotIyBDT05GSUdfUlRMODE4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMV9IV1NJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QNTRfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUSF9DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDNMRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWkQxMjExUlcgaXMgbm90IHNldAotIyBDT05GSUdfUlQyWDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMMTJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV00gaXMgbm90IHNldAotCi0jCi0jIFdpTUFYIFdpcmVsZXNzIEJyb2FkYmFuZCBkZXZpY2VzCi0jCi0jIENPTkZJR19XSU1BWF9JMjQwME1fVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTUFYX0kyNDAwTV9TRElPIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE1fRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KIENPTkZJR19QUFBfTVVMVElMSU5LPXkKQEAgLTEwNTAsNjIwICszMTMsODEgQEAKIENPTkZJR19QUFBfQlNEQ09NUD1tCiBDT05GSUdfUFBQX01QUEU9bQogQ09ORklHX1BQUE9FPW0KLSMgQ09ORklHX1BQUE9BVE0gaXMgbm90IHNldAotQ09ORklHX1BQUE9MMlRQPW0KLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9bQogQ09ORklHX05FVENPTlNPTEU9bQogQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQz15Ci1DT05GSUdfTkVUUE9MTD15CiBDT05GSUdfTkVUUE9MTF9UUkFQPXkKLUNPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQogQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9eQotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci0jIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfR1BJTz15Ci0jIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTE04MzIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfVFdMNDAzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQotQ09ORklHX01PVVNFX1BTMj15Ci1DT05GSUdfTU9VU0VfUFMyX0FMUFM9eQotQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQotQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQotQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKLSMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1NZTkFQVElDU19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CiBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FRVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01DUzUwMDAgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1c5MFg5MDAgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01JU0M9eQotIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9DTTEwOSBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVFdMNDAzMF9QV1JCVVRUT049eQogQ09ORklHX0lOUFVUX1VJTlBVVD15Ci0jIENPTkZJR19JTlBVVF9HUElPX1JPVEFSWV9FTkNPREVSIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci1DT05GSUdfU0VSSU9fTElCUFMyPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQogQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTMyCi1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQogQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQogQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CiBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15CiBDT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX09NQVA9eQotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfU1BJPXkKLSMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19TUElfT01BUDI0WFg9eQotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCiBDT05GSUdfU1BJX1NQSURFVj15Ci0jIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR1BJT19TWVNGUz15Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CiBDT05GSUdfR1BJT19UV0w0MDMwPXkKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKLQotIwotIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAogQ09ORklHX1BPV0VSX1NVUFBMWT15Ci0jIENPTkZJR19QT1dFUl9TVVBQTFlfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUERBX1BPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBVFRFUllfRFMyNzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBVFRFUllfRFMyNzgyIGlzIG5vdCBzZXQKIENPTkZJR19CQVRURVJZX0JRMjd4MDA9eQotIyBDT05GSUdfQkFUVEVSWV9NQVgxNzA0MCBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBkcml2ZXJzCi0jCi0jIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0hUMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xJUzNfU1BJIGlzIG5vdCBzZXQKIENPTkZJR19USEVSTUFMPXkKIENPTkZJR19USEVSTUFMX0hXTU9OPXkKIENPTkZJR19XQVRDSERPRz15CiBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19PTUFQX1dBVENIRE9HPXkKLSMgQ09ORklHX1RXTDQwMzBfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiBDT05GSUdfVFdMNDAzMF9DT1JFPXkKLSMgQ09ORklHX1RXTDQwMzBfUE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT0RFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogQ09ORklHX1JFR1VMQVRPUj15Ci0jIENPTkZJR19SRUdVTEFUT1JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfTUFYMTU4NiBpcyBub3Qgc2V0CiBDT05GSUdfUkVHVUxBVE9SX1RXTDQwMzA9eQotIyBDT05GSUdfUkVHVUxBVE9SX0xQMzk3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwMjMgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15Ci1DT05GSUdfQkFDS0xJR0hUX0dFTkVSSUM9eQotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ESVNQTEFZX1NVUFBPUlQ9eQotCi0jCi0jIERpc3BsYXkgaGFyZHdhcmUgZHJpdmVycwotIwotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTj15Ci0jIENPTkZJR19GT05UUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9OVF84eDg9eQotQ09ORklHX0ZPTlRfOHgxNj15CiBDT05GSUdfTE9HTz15Ci1DT05GSUdfTE9HT19MSU5VWF9NT05PPXkKLUNPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKLUNPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQogQ09ORklHX1NPVU5EPXkKLUNPTkZJR19TT1VORF9PU1NfQ09SRT15Ci1DT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD15Ci1DT05GSUdfU05EX1RJTUVSPXkKLUNPTkZJR19TTkRfUENNPXkKLUNPTkZJR19TTkRfSFdERVA9eQotQ09ORklHX1NORF9SQVdNSURJPXkKLUNPTkZJR19TTkRfSkFDSz15CiBDT05GSUdfU05EX1NFUVVFTkNFUj1tCi0jIENPTkZJR19TTkRfU0VRX0RVTU1ZIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfT1NTRU1VTD15CiBDT05GSUdfU05EX01JWEVSX09TUz15CiBDT05GSUdfU05EX1BDTV9PU1M9eQotQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQogQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKIENPTkZJR19TTkRfSFJUSU1FUj1tCi1DT05GSUdfU05EX1NFUV9IUlRJTUVSX0RFRkFVTFQ9eQotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1JBV01JRElfU0VRPW0KLSMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0RSSVZFUlM9eQotIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WSVJNSURJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BUk0gaXMgbm90IHNldAotQ09ORklHX1NORF9TUEk9eQotQ09ORklHX1NORF9VU0I9eQogQ09ORklHX1NORF9VU0JfQVVESU89eQogQ09ORklHX1NORF9VU0JfQ0FJQVE9bQogQ09ORklHX1NORF9VU0JfQ0FJQVFfSU5QVVQ9eQogQ09ORklHX1NORF9TT0M9eQogQ09ORklHX1NORF9PTUFQX1NPQz15Ci1DT05GSUdfU05EX1NPQ19JMkNfQU5EX1NQST15Ci0jIENPTkZJR19TTkRfU09DX0FMTF9DT0RFQ1MgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi0jIENPTkZJR19ISURfQTRURUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQkVMS0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9DSEVSUlkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0NZUFJFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9NT05URVJFWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BBTlRIRVJMT1JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9QRVRBTFlOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU0FNU1VORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU09OWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU1VOUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfV0FDT00gaXMgbm90IHNldAotIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NVU1BFTkQ9eQotQ09ORklHX1VTQl9PVEc9eQogIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0Q9eQotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01VU0JfSERSQz15Ci1DT05GSUdfVVNCX01VU0JfU09DPXkKLQotIwotIyBPTUFQIDM0M3ggaGlnaCBzcGVlZCBVU0Igc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX01VU0JfSE9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVTQl9QRVJJUEhFUkFMIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTVVTQl9PVEc9eQogQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDPXkKLUNPTkZJR19VU0JfTVVTQl9IRFJDX0hDRD15Ci0jIENPTkZJR19NVVNCX1BJT19PTkxZIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfSU5WRU5UUkFfRE1BPXkKLSMgQ09ORklHX1VTQl9USV9DUFBJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVTQl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCiBDT05GSUdfVVNCX0FDTT1tCiBDT05GSUdfVVNCX1BSSU5URVI9bQogQ09ORklHX1VTQl9XRE09bQogQ09ORklHX1VTQl9UTUM9bQotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLQotIwotIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwotIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCiBDT05GSUdfVVNCX1NFUklBTD1tCi1DT05GSUdfVVNCX0VaVVNCPXkKIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUM9eQogQ09ORklHX1VTQl9TRVJJQUxfQUlSQ0FCTEU9bQogQ09ORklHX1VTQl9TRVJJQUxfQVJLMzExNj1tCkBAIC0xNjcxLDcgKzM5NSw2IEBACiBDT05GSUdfVVNCX1NFUklBTF9DSDM0MT1tCiBDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQ9bQogQ09ORklHX1VTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUPW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTBYIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTg9bQogQ09ORklHX1VTQl9TRVJJQUxfRU1QRUc9bQogQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU89bQpAQCAtMTcwNywxNCArNDMwLDExIEBACiBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU49bQogQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzPW0KIENPTkZJR19VU0JfU0VSSUFMX09USTY4NTg9bQotIyBDT05GSUdfVVNCX1NFUklBTF9RVUFMQ09NTSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9TUENQOFg1PW0KIENPTkZJR19VU0JfU0VSSUFMX0hQNFg9bQogQ09ORklHX1VTQl9TRVJJQUxfU0FGRT1tCi0jIENPTkZJR19VU0JfU0VSSUFMX1NBRkVfUEFEREVEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX1NJRU1FTlNfTVBJPW0KIENPTkZJR19VU0JfU0VSSUFMX1NJRVJSQVdJUkVMRVNTPW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfU1lNQk9MIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX1RJPW0KIENPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSz1tCiBDT05GSUdfVVNCX1NFUklBTF9YSVJDT009bQpAQCAtMTcyMiw0NDEgKzQ0Miw5NSBAQAogQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVD1tCiBDT05GSUdfVVNCX1NFUklBTF9PUFRJQ09OPW0KIENPTkZJR19VU0JfU0VSSUFMX0RFQlVHPW0KLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCiBDT05GSUdfVVNCX0VNSTYyPW0KIENPTkZJR19VU0JfRU1JMjY9bQotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0lTVVNCVkdBPW0KIENPTkZJR19VU0JfU0lTVVNCVkdBX0NPTj15Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogQ09ORklHX1VTQl9URVNUPW0KLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVE0gaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVQ9bQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZTPXkKLUNPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCi1DT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQogQ09ORklHX1VTQl9aRVJPPW0KIENPTkZJR19VU0JfWkVST19ITlBURVNUPXkKLSMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VUSD1tCi1DT05GSUdfVVNCX0VUSF9STkRJUz15Ci0jIENPTkZJR19VU0JfRVRIX0VFTSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVEZTPW0KIENPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KLSMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dfU0VSSUFMPW0KIENPTkZJR19VU0JfTUlESV9HQURHRVQ9bQogQ09ORklHX1VTQl9HX1BSSU5URVI9bQogQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFPW0KLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLUNPTkZJR19VU0JfT1RHX1VUSUxTPXkKIENPTkZJR19VU0JfR1BJT19WQlVTPXkKLSMgQ09ORklHX0lTUDEzMDFfT01BUCBpcyBub3Qgc2V0CiBDT05GSUdfVFdMNDAzMF9VU0I9eQotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUU9eQotCi0jCi0jIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz15Ci1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CiBDT05GSUdfU0RJT19VQVJUPXkKLSMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19PTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfT01BUF9IUz15Ci0jIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAogQ09ORklHX01NQ19TUEk9bQotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKLQotIwotIyBMRUQgZHJpdmVycwotIwotIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX0dQSU89eQotQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15Ci0jIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKIENPTkZJR19MRURTX1RSSUdHRVJTPXkKIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9bQogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQ9bQotIyBDT05GSUdfTEVEU19UUklHR0VSX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPW0KLQotIwotIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCi0jCi0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9UV0w0MDMwPXkKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogQ09ORklHX1VJTz1tCiBDT05GSUdfVUlPX1BEUlY9bQogQ09ORklHX1VJT19QRFJWX0dFTklSUT1tCi0jIENPTkZJR19VSU9fU01YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJT19TRVJDT1MzIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwogQ09ORklHX1NUQUdJTkc9eQogIyBDT05GSUdfU1RBR0lOR19FWENMVURFX0JVSUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JUF9DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfVzM1VU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNMl9VU0IgaXMgbm90IHNldAotIyBDT05GSUdfRUNITyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTUVESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BU1VTX09MRUQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlNSU8gaXMgbm90IHNldAotIyBDT05GSUdfVFJBTlpQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBBbmRyb2lkCi0jCi0KLSMKLSMgUXVhbGNvbW0gTVNNIENhbWVyYSBBbmQgVmlkZW8KLSMKLQotIwotIyBDYW1lcmEgU2Vuc29yIFNlbGVjdGlvbgotIwotIyBDT05GSUdfSU5QVVRfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EU1QgaXMgbm90IHNldAotIyBDT05GSUdfUE9ITUVMRlMgaXMgbm90IHNldAotIyBDT05GSUdfUExBTjlBVVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJTkU2X1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1FVQVRFQ0gyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfUVVBVEVDSF9VU0IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZUNjY1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9VREwgaXMgbm90IHNldAotCi0jCi0jIFJBUiBSZWdpc3RlciBEcml2ZXIKLSMKLSMgQ09ORklHX1JBUl9SRUdJU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfRVhUNF9GUz1tCi1DT05GSUdfRVhUNF9GU19YQVRUUj15Ci0jIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0pCRDI9bQotIyBDT05GSUdfSkJEMl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT1tCiBDT05GSUdfUkVJU0VSRlNfRlM9bQotIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTz15CiBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQotIyBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKIENPTkZJR19KRlNfRlM9bQotIyBDT05GSUdfSkZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQogQ09ORklHX1hGU19GUz1tCi0jIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQogQ09ORklHX1FVT1RBPXkKLSMgQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HPXkKLUNPTkZJR19RVU9UQV9UUkVFPXkKLSMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAogQ09ORklHX1FGTVRfVjI9eQotQ09ORklHX1FVT1RBQ1RMPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQVVUT0ZTNF9GUz1tCiBDT05GSUdfRlVTRV9GUz15Ci0jIENPTkZJR19DVVNFIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKIENPTkZJR19JU085NjYwX0ZTPW0KIENPTkZJR19KT0xJRVQ9eQogQ09ORklHX1pJU09GUz15CiBDT05GSUdfVURGX0ZTPW0KLUNPTkZJR19VREZfTkxTPXkKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCiBDT05GSUdfTlRGU19GUz1tCi0jIENPTkZJR19OVEZTX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19OVEZTX1JXPXkKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19DT05GSUdGU19GUz1tCi1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfU1VNTUFSWT15CiBDT05GSUdfSkZGUzJfRlNfWEFUVFI9eQotQ09ORklHX0pGRlMyX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfSkZGUzJfRlNfU0VDVVJJVFk9eQogQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQotQ09ORklHX0pGRlMyX1pMSUI9eQogQ09ORklHX0pGRlMyX0xaTz15Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQogQ09ORklHX0pGRlMyX1JVQklOPXkKLSMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPPXkKIENPTkZJR19VQklGU19GUz15CiBDT05GSUdfVUJJRlNfRlNfWEFUVFI9eQogQ09ORklHX1VCSUZTX0ZTX0FEVkFOQ0VEX0NPTVBSPXkKLUNPTkZJR19VQklGU19GU19MWk89eQotQ09ORklHX1VCSUZTX0ZTX1pMSUI9eQotIyBDT05GSUdfVUJJRlNfRlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKIENPTkZJR19TUVVBU0hGUz15Ci0jIENPTkZJR19TUVVBU0hGU19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCi0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9bQotQ09ORklHX05GU0RfVjJfQUNMPXkKLUNPTkZJR19ORlNEX1YzPXkKIENPTkZJR19ORlNEX1YzX0FDTD15CiBDT05GSUdfTkZTRF9WND15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19FWFBPUlRGUz1tCi1DT05GSUdfTkZTX0FDTF9TVVBQT1JUPW0KLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ0lGUz1tCiBDT05GSUdfQ0lGU19TVEFUUz15CiBDT05GSUdfQ0lGU19TVEFUUzI9eQotIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19VUENBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0RGU19VUENBTEwgaXMgbm90IHNldAogQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMPXkKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKIENPTkZJR19CU0RfRElTS0xBQkVMPXkKIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT049eQogQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTj15CiBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMPXkKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19FRklfUEFSVElUSU9OPXkKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KQEAgLTIxOTUsMTgzICs1NjksMzcgQEAKIENPTkZJR19OTFNfS09JOF9SPW0KIENPTkZJR19OTFNfS09JOF9VPW0KIENPTkZJR19OTFNfVVRGOD15Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCiBDT05GSUdfUFJJTlRLX1RJTUU9eQotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQogQ09ORklHX1NDSEVEU1RBVFM9eQogQ09ORklHX1RJTUVSX1NUQVRTPXkKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfUFJFRU1QVD15Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBQ0tUUkFDRT15Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfTk9QX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1JJTkdfQlVGRkVSPXkKLUNPTkZJR19FVkVOVF9UUkFDSU5HPXkKLUNPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQotQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQotQ09ORklHX1RSQUNJTkc9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SSU5HX0JVRkZFUl9CRU5DSE1BUksgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fVU5XSU5EPXkKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi1DT05GSUdfS0VZUz15Ci0jIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19YT1JfQkxPQ0tTPW0KLUNPTkZJR19BU1lOQ19DT1JFPW0KLUNPTkZJR19BU1lOQ19NRU1DUFk9bQotQ09ORklHX0FTWU5DX1hPUj1tCi1DT05GSUdfQVNZTkNfUFE9bQotQ09ORklHX0FTWU5DX1JBSUQ2X1JFQ09WPW0KLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwogQ09ORklHX0NSWVBUT19GSVBTPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci1DT05GSUdfQ1JZUFRPX0FFQUQ9bQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkc9bQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCiBDT05GSUdfQ1JZUFRPX05VTEw9bQotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQogQ09ORklHX0NSWVBUT19DUllQVEQ9bQotQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KIENPTkZJR19DUllQVE9fVEVTVD1tCi0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCiBDT05GSUdfQ1JZUFRPX0NDTT1tCiBDT05GSUdfQ1JZUFRPX0dDTT1tCi1DT05GSUdfQ1JZUFRPX1NFUUlWPW0KLQotIwotIyBCbG9jayBtb2RlcwotIwotQ09ORklHX0NSWVBUT19DQkM9eQotQ09ORklHX0NSWVBUT19DVFI9bQogQ09ORklHX0NSWVBUT19DVFM9bQogQ09ORklHX0NSWVBUT19FQ0I9eQogQ09ORklHX0NSWVBUT19MUlc9bQogQ09ORklHX0NSWVBUT19QQ0JDPW0KIENPTkZJR19DUllQVE9fWFRTPW0KLQotIwotIyBIYXNoIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0hNQUM9bQogQ09ORklHX0NSWVBUT19YQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLUNPTkZJR19DUllQVE9fQ1JDMzJDPXkKLUNPTkZJR19DUllQVE9fR0hBU0g9bQogQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9eQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz15CiBDT05GSUdfQ1JZUFRPX1JNRDEyOD1tCiBDT05GSUdfQ1JZUFRPX1JNRDE2MD1tCiBDT05GSUdfQ1JZUFRPX1JNRDI1Nj1tCiBDT05GSUdfQ1JZUFRPX1JNRDMyMD1tCi1DT05GSUdfQ1JZUFRPX1NIQTE9bQogQ09ORklHX0NSWVBUT19TSEEyNTY9bQogQ09ORklHX0NSWVBUT19TSEE1MTI9bQogQ09ORklHX0NSWVBUT19UR1IxOTI9bQogQ09ORklHX0NSWVBUT19XUDUxMj1tCi0KLSMKLSMgQ2lwaGVycwotIwogQ09ORklHX0NSWVBUT19BRVM9eQogQ09ORklHX0NSWVBUT19BTlVCSVM9bQogQ09ORklHX0NSWVBUT19BUkM0PXkKQEAgLTIzNzksNyArNjA3LDYgQEAKIENPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQogQ09ORklHX0NSWVBUT19DQVNUNT1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KLUNPTkZJR19DUllQVE9fREVTPXkKIENPTkZJR19DUllQVE9fRkNSWVBUPW0KIENPTkZJR19DUllQVE9fS0hBWkFEPW0KIENPTkZJR19DUllQVE9fU0FMU0EyMD1tCkBAIC0yMzg3LDQ0ICs2MTQsOCBAQAogQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KIENPTkZJR19DUllQVE9fVEVBPW0KIENPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KLQotIwotIyBDb21wcmVzc2lvbgotIwotQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTFpPPXkKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKLUNPTkZJR19DUllQVE9fQU5TSV9DUFJORz1tCi1DT05GSUdfQ1JZUFRPX0hXPXkKLUNPTkZJR19CSU5BUllfUFJJTlRGPXkKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQotQ09ORklHX0NSQzE2PXkKIENPTkZJR19DUkNfVDEwRElGPXkKIENPTkZJR19DUkNfSVRVX1Q9eQotQ09ORklHX0NSQzMyPXkKIENPTkZJR19DUkM3PXkKIENPTkZJR19MSUJDUkMzMkM9eQotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19MWk9fQ09NUFJFU1M9eQotQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX1RFWFRTRUFSQ0g9eQotQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KLUNPTkZJR19URVhUU0VBUkNIX0JNPW0KLUNPTkZJR19URVhUU0VBUkNIX0ZTTT1tCi1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwXzI0MzBzZHBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwXzI0MzBzZHBfZGVmY29uZmlnCmluZGV4IDQ1YjRlYmEuLjBjZjQxNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8yNDMwc2RwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfMjQzMHNkcF9kZWZjb25maWcKQEAgLTEsMTMwMyArMSwxMzYgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMy1yYzYtb21hcDEKLSMgVHVlIFNlcCAxOCAxMTo0NzozNyAyMDA3Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfVUlEMTY9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQPXkKLQotIwotIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucwotIwotIyBDT05GSUdfQVJDSF9PTUFQMSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQMj15Ci0jIENPTkZJR19BUkNIX09NQVAzIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucwotIwotIyBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MgaXMgbm90IHNldAotQ09ORklHX09NQVBfQk9PVF9UQUc9eQotIyBDT05GSUdfT01BUF9CT09UX1JFQVNPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0NPTVBPTkVOVF9WRVJTSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfR1BJT19TV0lUQ0ggaXMgbm90IHNldAotQ09ORklHX09NQVBfTVVYPXkKLSMgQ09ORklHX09NQVBfTVVYX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX09NQVBfTVVYX1dBUk5JTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfU1RJIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX01DQlNQPXkKLSMgQ09ORklHX09NQVBfTU1VX0ZXSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX01CT1hfRldLIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX01QVV9USU1FUj15Ci0jIENPTkZJR19PTUFQXzMyS19USU1FUiBpcyBub3Qgc2V0CiBDT05GSUdfT01BUF9ETV9USU1FUj15Ci1DT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMT15Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDMgaXMgbm90IHNldAotQ09ORklHX09NQVBfU0VSSUFMX1dBS0U9eQotIyBDT05GSUdfT01BUF9EU1AgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX0dFTkVSSUMgaXMgbm90IHNldAotCi0jCi0jIE9NQVAgQ29yZSBUeXBlCi0jCi1DT05GSUdfQVJDSF9PTUFQMjRYWD15Ci0jIENPTkZJR19BUkNIX09NQVAyNDIwIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVAyNDMwPXkKLQotIwotIyBPTUFQIEJvYXJkIFR5cGUKLSMKLSMgQ09ORklHX01BQ0hfTk9LSUFfTjgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfSDQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX0FQT0xMT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX0FQT0xMT05fUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9PTUFQXzI0MzBTRFA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9WNj15Ci0jIENPTkZJR19DUFVfMzJ2NksgaXMgbm90IHNldAotQ09ORklHX0NQVV8zMnY2PXkKLUNPTkZJR19DUFVfQUJSVF9FVjY9eQotQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQotQ09ORklHX0NQVV9DQUNIRV9WNj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQotQ09ORklHX0NQVV9DT1BZX1Y2PXkKLUNPTkZJR19DUFVfVExCX1Y2PXkKLUNPTkZJR19DUFVfSEFTX0FTSUQ9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15Ci1DT05GSUdfT0FCSV9DT01QQVQ9eQotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJyb290PS9kZXYvcmFtMCBydyBjb25zb2xlPXR0eVMwLDExNTIwMG44IGluaXRyZD0weDgwNjAwMDAwLDhNIHJhbWRpc2tfc2l6ZT04MTkyIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCi0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRlAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9NSVNDPXkKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BNX1NMRUVQPXkKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19TVVNQRU5EPXkKLSMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0tFWT15Ci0jIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotQ09ORklHX01URF9PTUFQX05PUj15Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT05FTkFORD15CiBDT05GSUdfTVREX09ORU5BTkRfVkVSSUZZX1dSSVRFPXkKLSMgQ09ORklHX01URF9PTkVOQU5EX0dFTkVSSUMgaXMgbm90IHNldAogQ09ORklHX01URF9PTkVOQU5EX09NQVAyPXkKLSMgQ09ORklHX01URF9PTkVOQU5EX09UUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9bQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9bQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz1tCi0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKIENPTkZJR19TTUM5MVg9eQotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVF9NSUkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfT01BUCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfVFdMNDAzMD15Ci0jIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQogQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDY9eQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVUNCMTQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMTAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIxMFggaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTMyCi1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQogQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQogQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CiBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15CiBDT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfT01BUD15CitDT05GSUdfU1BJPXkKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19PTUFQX1dBVENIRE9HPXkKLQotIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci1DT05GSUdfSFdfUkFORE9NX09NQVA9eQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX09NQVA9eQotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVExWMzIwQUlDMjMgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT0VYUEFOREVSX09NQVAgaXMgbm90IHNldAogQ09ORklHX1RXTDQwMzBfQ09SRT15Ci1DT05GSUdfVFdMNDAzMF9HUElPPXkKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfTUVORUxBVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLUNPTkZJR19TUEk9eQotIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TUElfTUFTVEVSPXkKLQotIwotIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX09NQVAyNFhYIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUHJvdG9jb2wgTWFzdGVycwotIwotIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1RTQzIxMDEgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1RTQzIxMDIgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1RTQzIxMFggaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1RTQzIzMDEgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCiBDT05GSUdfRkI9eQogQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfT01BUD15Ci0jIENPTkZJR19GQl9PTUFQX0xDRENfRVhURVJOQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfT01BUF9CT09UTE9BREVSX0lOSVQgaXMgbm90IHNldAotQ09ORklHX0ZCX09NQVBfQ09OU0lTVEVOVF9ETUFfU0laRT0yCi0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9OVF84eDg9eQotQ09ORklHX0ZPTlRfOHgxNj15CiBDT05GSUdfTE9HTz15CiAjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAogIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9bQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRkYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQj1tCi0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKLSMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVU1BFTkQ9eQotIyBDT05GSUdfVVNCX1BFUlNJU1QgaXMgbm90IHNldAotQ09ORklHX1VTQl9PVEc9eQotQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUPXkKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj1tCiBDT05GSUdfVVNCX01VU0JfSERSQz1tCi1DT05GSUdfVVNCX01VU0JfU09DPXkKLQotIwotIyBPTUFQIDI0M3ggaGlnaCBzcGVlZCBVU0Igc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX01VU0JfSE9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVTQl9QRVJJUEhFUkFMIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTVVTQl9PVEc9eQogQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDPXkKLUNPTkZJR19VU0JfTVVTQl9IRFJDX0hDRD15Ci0jIENPTkZJR19NVVNCX1BJT19PTkxZIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfSU5WRU5UUkFfRE1BPXkKLSMgQ09ORklHX1VTQl9USV9DUFBJX0RNQSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01VU0JfTE9HTEVWRUw9MAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKIENPTkZJR19VU0JfU1RPUkFHRT1tCi0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKIENPTkZJR19VU0JfR0FER0VUPW0KLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVM9eQotQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKIENPTkZJR19VU0JfWkVSTz1tCi0jIENPTkZJR19VU0JfWkVST19ITlBURVNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRVRIPW0KLUNPTkZJR19VU0JfRVRIX1JORElTPXkKIENPTkZJR19VU0JfR0FER0VURlM9bQogQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR19TRVJJQUw9bQotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKLQotIwotIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKIENPTkZJR19NTUNfT01BUF9IUz15Ci1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIERNQSBFbmdpbmUgc3VwcG9ydAotIwotIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIENsaWVudHMKLSMKLQotIwotIyBETUEgRGV2aWNlcwotIwotCi0jCi0jIENCVVMgc3VwcG9ydAotIwotIyBDT05GSUdfQ0JVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQogQ09ORklHX1FVT1RBPXkKLSMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAogQ09ORklHX1FGTVRfVjI9eQotQ09ORklHX1FVT1RBQ1RMPXkKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQotQ09ORklHX0pGRlMyX1pMSUI9eQotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKLSMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogQ09ORklHX1RJTUVSX1NUQVRTPXkKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0VDQj1tCiBDT05GSUdfQ1JZUFRPX0NCQz15CitDT05GSUdfQ1JZUFRPX0VDQj1tCiBDT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0NSQ19DQ0lUVD15Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogQ09ORklHX0xJQkNSQzMyQz15Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwXzM0MzBzZHBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwXzM0MzBzZHBfZGVmY29uZmlnCmluZGV4IGRkZGU0MjkuLjVkYmU1OTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNDMwc2RwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfMzQzMHNkcF9kZWZjb25maWcKQEAgLTEsMTcyNyArMSwxNzggQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzktb21hcDEKLSMgVHVlIFNlcCAxNSAxNjo0ODozNCAyMDA5Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLSMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfVUlEMTY9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci0KLSMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKLSMKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfRlJFRVpFUj15Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQPXkKLQotIwotIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucwotIwotQ09ORklHX0FSQ0hfT01BUF9PVEc9eQotIyBDT05GSUdfQVJDSF9PTUFQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVAzPXkKLSMgQ09ORklHX0FSQ0hfT01BUDQgaXMgbm90IHNldAotCi0jCi0jIE9NQVAgRmVhdHVyZSBTZWxlY3Rpb25zCi0jCi0jIENPTkZJR19PTUFQX0RFQlVHX1BPV0VSRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfREVCVUdfQ0xPQ0tET01BSU4gaXMgbm90IHNldAogQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTPXkKLUNPTkZJR19PTUFQX01VWD15CiBDT05GSUdfT01BUF9NVVhfREVCVUc9eQotQ09ORklHX09NQVBfTVVYX1dBUk5JTkdTPXkKLUNPTkZJR19PTUFQX01DQlNQPXkKLSMgQ09ORklHX09NQVBfTUJPWF9GV0sgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9NUFVfVElNRVIgaXMgbm90IHNldAogQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKLUNPTkZJR19PTUFQXzMyS19USU1FUl9IWj0xMjgKIENPTkZJR19PTUFQX0RNX1RJTUVSPXkKLUNPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQxPXkKLSMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX1BNX05PTkUgaXMgbm90IHNldAotQ09ORklHX09NQVBfUE1fTk9PUD15Ci1DT05GSUdfQVJDSF9PTUFQMzRYWD15CiBDT05GSUdfQVJDSF9PTUFQMzQzMD15Ci0KLSMKLSMgT01BUCBCb2FyZCBUeXBlCi0jCi0jIENPTkZJR19NQUNIX09NQVAzX0JFQUdMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfTERQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT1ZFUk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQM0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVAzX1BBTkRPUkEgaXMgbm90IHNldAogQ09ORklHX01BQ0hfT01BUF8zNDMwU0RQPXkKLSMgQ09ORklHX01BQ0hfTk9LSUFfUlg1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfWk9PTTIgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVXzMydjZLPXkKLUNPTkZJR19DUFVfVjc9eQotQ09ORklHX0NQVV8zMnY3PXkKLUNPTkZJR19DUFVfQUJSVF9FVjc9eQotQ09ORklHX0NQVV9QQUJSVF9JRkFSPXkKLUNPTkZJR19DUFVfQ0FDSEVfVjc9eQotQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKLUNPTkZJR19DUFVfQ09QWV9WNj15Ci1DT05GSUdfQ1BVX1RMQl9WNz15Ci1DT05GSUdfQ1BVX0hBU19BU0lEPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQVJNX1RIVU1CRUUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFTX1RMU19SRUc9eQotIyBDT05GSUdfQVJNX0VSUkFUQV80MzA5NzMgaXMgbm90IHNldAotIyBDT05GSUdfQVJNX0VSUkFUQV80NTg2OTMgaXMgbm90IHNldAotIyBDT05GSUdfQVJNX0VSUkFUQV80NjAwNzUgaXMgbm90IHNldAotQ09ORklHX0NPTU1PTl9DTEtERVY9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEyOAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTAKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMyLDExNTIwMCByb290PS9kZXYvbW1jYmxrMHAzIHJvb3R3YWl0IGRlYnVnIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKIENPTkZJR19DUFVfRlJFUT15Ci1DT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQotIyBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0NQVV9GUkVRX1NUQVQ9eQogQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUz15Ci1DT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0U9eQotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAotQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRT15Ci0jIENPTkZJR19DUFVfRlJFUV9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPXkKIENPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQ9eQotIyBDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CiBDT05GSUdfVkZQPXkKLUNPTkZJR19WRlB2Mz15CiBDT05GSUdfTkVPTj15Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz15Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCiBDT05GSUdfUE09eQotIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BNX1NMRUVQPXkKLUNPTkZJR19TVVNQRU5EPXkKLUNPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQotIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfUE1fUlVOVElNRT15Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX05FVF9LRVk9eQotIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQogQ09ORklHX0lQX1BOUF9SQVJQPXkKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotQ09ORklHX01URF9PTUFQX05PUj15Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORD15Ci0jIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfT01BUDIgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfU1RJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9NVUxUSV9MVU49eQotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKIENPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogQ09ORklHX1NNQzkxWD15Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTE04MzIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CiBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FRVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQogIyBDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlMgaXMgbm90IHNldAotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CiBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CiBDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKIENPTkZJR19TRVJJQUxfODI1MF9SU0E9eQotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfT01BUD15Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfU1BJPXkKLSMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19TUElfT01BUDI0WFg9eQotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCi0jIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HUElPX1NZU0ZTPXkKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKIENPTkZJR19HUElPX1RXTDQwMzA9eQotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19PTUFQX1dBVENIRE9HPXkKIENPTkZJR19UV0w0MDMwX1dBVENIRE9HPXkKLQotIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogQ09ORklHX1RXTDQwMzBfQ09SRT15Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19SRUdVTEFUT1I9eQorQ09ORklHX1JFR1VMQVRPUl9UV0w0MDMwPXkKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9PTUFQX0xDRF9WR0EgaXMgbm90IHNldAotIyBDT05GSUdfRkJfT01BUF9CT09UTE9BREVSX0lOSVQgaXMgbm90IHNldAotQ09ORklHX09NQVAyX1ZSQU09eQotQ09ORklHX09NQVAyX1ZSRkI9eQogQ09ORklHX09NQVAyX0RTUz15CiBDT05GSUdfT01BUDJfVlJBTV9TSVpFPTQKLUNPTkZJR19PTUFQMl9EU1NfREVCVUdfU1VQUE9SVD15Ci0jIENPTkZJR19PTUFQMl9EU1NfUkZCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUDJfRFNTX1ZFTkM9eQotIyBDT05GSUdfT01BUDJfRFNTX1NESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQMl9EU1NfRFNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVAyX0RTU19GQUtFX1ZTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQMl9EU1NfTUlOX0ZDS19QRVJfUENLPTAKIENPTkZJR19GQl9PTUFQMj15Ci1DT05GSUdfRkJfT01BUDJfREVCVUdfU1VQUE9SVD15Ci0jIENPTkZJR19GQl9PTUFQMl9GT1JDRV9BVVRPX1VQREFURSBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfT01BUDJfTlVNX0ZCUz0zCi0KLSMKLSMgT01BUDIvMyBEaXNwbGF5IERldmljZSBEcml2ZXJzCi0jCiBDT05GSUdfUEFORUxfR0VORVJJQz15CiBDT05GSUdfUEFORUxfU0hBUlBfTFMwMzdWN0RXMDE9eQotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfRElTUExBWV9TVVBQT1JUPXkKLQotIwotIyBEaXNwbGF5IGhhcmR3YXJlIGRyaXZlcnMKLSMKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9OVF84eDg9eQotQ09ORklHX0ZPTlRfOHgxNj15CiBDT05GSUdfTE9HTz15Ci1DT05GSUdfTE9HT19MSU5VWF9NT05PPXkKLUNPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKLUNPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfTU9OVEVSRVkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9QQU5USEVSTE9SRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUEVUQUxZTlggaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQogQ09ORklHX1VTQl9ERUJVRz15CiBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCi0jIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVNQRU5EPXkKLUNPTkZJR19VU0JfT1RHPXkKICMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15Ci0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9bQotIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9NVVNCX0hEUkM9eQotQ09ORklHX1VTQl9NVVNCX1NPQz15Ci0KLSMKLSMgT01BUCAzNDN4IGhpZ2ggc3BlZWQgVVNCIHN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9NVVNCX0hPU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfUEVSSVBIRVJBTCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01VU0JfT1RHPXkKIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQz15Ci1DT05GSUdfVVNCX01VU0JfSERSQ19IQ0Q9eQotIyBDT05GSUdfTVVTQl9QSU9fT05MWSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0lOVkVOVFJBX0RNQT15Ci0jIENPTkZJR19VU0JfVElfQ1BQSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLQotIwotIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwotIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1RFU1Q9eQotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRlMgaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTIKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQotIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRVRIPW0KLUNPTkZJR19VU0JfRVRIX1JORElTPXkKIENPTkZJR19VU0JfR0FER0VURlM9bQogQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR19TRVJJQUw9bQotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAogQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFPW0KLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLUNPTkZJR19VU0JfT1RHX1VUSUxTPXkKLSMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAotIyBDT05GSUdfSVNQMTMwMV9PTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19UV0w0MDMwX1VTQj15Ci0jIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRT15Ci0KLSMKLSMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKIENPTkZJR19TRElPX1VBUlQ9eQotIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAogQ09ORklHX01NQ19PTUFQX0hTPXkKLSMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiBDT05GSUdfTkVXX0xFRFM9eQogQ09ORklHX0xFRFNfQ0xBU1M9eQotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0jIENPTkZJR19MRURTX09NQVBfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfT01BUF9QV00gaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX0dQSU89eQotQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15Ci0jIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKIENPTkZJR19MRURTX1RSSUdHRVJTPXkKIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQotIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0Ci0KLSMKLSMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQotIwotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX1RXTDQwMzA9eQotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19SRUdVTEFUT1I9eQotIyBDT05GSUdfUkVHVUxBVE9SX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9VU0VSU1BBQ0VfQ09OU1VNRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX01BWDE1ODYgaXMgbm90IHNldAotQ09ORklHX1JFR1VMQVRPUl9UV0w0MDMwPXkKLSMgQ09ORklHX1JFR1VMQVRPUl9MUDM5NzEgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIENCVVMgc3VwcG9ydAotIwotIyBDT05GSUdfQ0JVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKLSMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKIENPTkZJR19RVU9UQT15Ci0jIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15Ci1DT05GSUdfUVVPVEFfVFJFRT15Ci0jIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKIENPTkZJR19RRk1UX1YyPXkKLUNPTkZJR19RVU9UQUNUTD15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKLSMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSTV9VTldJTkQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotQ09ORklHX0NSWVBUT19DUkMzMkM9eQotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPXkKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKIENPTkZJR19MSUJDUkMzMkM9eQotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNjMwc2RwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNjMwc2RwX2RlZmNvbmZpZwppbmRleCA2MDlmMzQ4Li44ZThmNGU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfMzYzMHNkcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwXzM2MzBzZHBfZGVmY29uZmlnCkBAIC0xLDE2MTAgKzEsMTU0IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM2Ci0jIFRodSBOb3YgMTIgMTI6MjE6MzcgMjAwOQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0FSQ0hfSEFTX0NQVUZSRVE9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci0jIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfRlJFRVpFUj15Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT01BUD15Ci0jIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAotCi0jCi0jIFRJIE9NQVAgSW1wbGVtZW50YXRpb25zCi0jCi1DT05GSUdfQVJDSF9PTUFQX09URz15Ci0jIENPTkZJR19BUkNIX09NQVAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUDIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT01BUDM9eQotIyBDT05GSUdfQVJDSF9PTUFQNCBpcyBub3Qgc2V0Ci0KLSMKLSMgT01BUCBGZWF0dXJlIFNlbGVjdGlvbnMKLSMKLSMgQ09ORklHX09NQVBfREVCVUdfUE9XRVJET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9ERUJVR19DTE9DS0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUyBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9NVVg9eQogQ09ORklHX09NQVBfTVVYX0RFQlVHPXkKLUNPTkZJR19PTUFQX01VWF9XQVJOSU5HUz15Ci1DT05GSUdfT01BUF9NQ0JTUD15Ci0jIENPTkZJR19PTUFQX01CT1hfRldLIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTVBVX1RJTUVSIGlzIG5vdCBzZXQKIENPTkZJR19PTUFQXzMyS19USU1FUj15Ci1DT05GSUdfT01BUF8zMktfVElNRVJfSFo9MTI4CiBDT05GSUdfT01BUF9ETV9USU1FUj15Ci1DT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMT15Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDMgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9MTF9ERUJVR19OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfUE1fTk9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9QTV9OT09QPXkKLUNPTkZJR19BUkNIX09NQVAzNFhYPXkKIENPTkZJR19BUkNIX09NQVAzNDMwPXkKLQotIwotIyBPTUFQIEJvYXJkIFR5cGUKLSMKLSMgQ09ORklHX01BQ0hfT01BUDNfQkVBR0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9MRFAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PVkVSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVAzRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUDNfUEFORE9SQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfMzQzMFNEUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX05PS0lBX1JYNTEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX1pPT00yIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ01fVDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9aT09NMyBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9PTUFQXzM2MzBTRFA9eQotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVXzMydjZLPXkKLUNPTkZJR19DUFVfVjc9eQotQ09ORklHX0NQVV8zMnY3PXkKLUNPTkZJR19DUFVfQUJSVF9FVjc9eQotQ09ORklHX0NQVV9QQUJSVF9WNz15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y3PXkKLUNPTkZJR19DUFVfQ0FDSEVfVklQVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjY9eQotQ09ORklHX0NQVV9UTEJfVjc9eQotQ09ORklHX0NQVV9IQVNfQVNJRD15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0FSTV9USFVNQkVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAotQ09ORklHX0hBU19UTFNfUkVHPXkKLUNPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NgotIyBDT05GSUdfQVJNX0VSUkFUQV80MzA5NzMgaXMgbm90IHNldAotIyBDT05GSUdfQVJNX0VSUkFUQV80NTg2OTMgaXMgbm90IHNldAotIyBDT05GSUdfQVJNX0VSUkFUQV80NjAwNzUgaXMgbm90IHNldAotQ09ORklHX0NPTU1PTl9DTEtERVY9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTI4Ci0jIENPTkZJR19USFVNQjJfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19BRUFCST15Ci1DT05GSUdfT0FCSV9DT01QQVQ9eQotIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci0jIENPTkZJR19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0jIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9uZnMgbmZzcm9vdD0xOTIuMTY4LjAuMTovaG9tZS91c2VyL2J1aWxkcm9vdCBpcD0xOTIuMTY4LjAuMjoxOTIuMTY4LjAuMToxOTIuMTY4LjAuMToyNTUuMjU1LjI1NS4wOnRndDpldGgwOm9mZiBydyBjb25zb2xlPXR0eVMyLDExNTIwMG44IgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKIENPTkZJR19WRlA9eQotQ09ORklHX1ZGUHYzPXkKLSMgQ09ORklHX05FT04gaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX01JU0M9eQotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwogQ09ORklHX1BNPXkKIENPTkZJR19QTV9ERUJVRz15CiBDT05GSUdfUE1fVkVSQk9TRT15Ci1DT05GSUdfQ0FOX1BNX1RSQUNFPXkKLUNPTkZJR19QTV9TTEVFUD15Ci1DT05GSUdfU1VTUEVORD15Ci0jIENPTkZJR19QTV9URVNUX1NVU1BFTkQgaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15Ci0jIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19QTV9SVU5USU1FPXkKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9eQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLUNPTkZJR19YRlJNX01JR1JBVEU9eQotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPXkKIENPTkZJR19ORVRfS0VZX01JR1JBVEU9eQogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQogQ09ORklHX0lQX1BOUF9SQVJQPXkKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIENPTkZJR19DT05ORUNUT1I9eQotQ09ORklHX1BST0NfRVZFTlRTPXkKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTE2Mzg0Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKIENPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAogQ09ORklHX1NNU0NfUEhZPXkKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKIENPTkZJR19TTUM5MVg9eQotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKIENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2PXkKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9TUEkgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VFVEkgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUNTNTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVzkwWDkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0zMgotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKIENPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQogQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQogQ09ORklHX1NFUklBTF84MjUwX1JTQT15Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogQ09ORklHX0kyQ19PTUFQPXkKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogQ09ORklHX1NQST15Ci0jIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NQSV9NQVNURVI9eQotCi0jCi0jIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfU1BJX09NQVAyNFhYPXkKLQotIwotIyBTUEkgUHJvdG9jb2wgTWFzdGVycwotIwotIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKIENPTkZJR19HUElPX1RXTDQwMzA9eQotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNldAotCi0jCi0jIEFDOTcgR1BJTyBleHBhbmRlcnM6Ci0jCiBDT05GSUdfVzE9eQotQ09ORklHX1cxX0NPTj15Ci0KLSMKLSMgMS13aXJlIEJ1cyBNYXN0ZXJzCi0jCi0jIENPTkZJR19XMV9NQVNURVJfRFMyNDkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxX01BU1RFUl9EUzI0ODIgaXMgbm90IHNldAotIyBDT05GSUdfVzFfTUFTVEVSX0RTMVdNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxX01BU1RFUl9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hEUV9NQVNURVJfT01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgMS13aXJlIFNsYXZlcwotIwotIyBDT05GSUdfVzFfU0xBVkVfVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVzFfU0xBVkVfU01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMV9TTEFWRV9EUzI0MzEgaXMgbm90IHNldAotIyBDT05GSUdfVzFfU0xBVkVfRFMyNDMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxX1NMQVZFX0RTMjc2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMV9TTEFWRV9CUTI3MDAwIGlzIG5vdCBzZXQKIENPTkZJR19QT1dFUl9TVVBQTFk9eQotIyBDT05GSUdfUE9XRVJfU1VQUExZX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQV9QT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVRURVJZX0RTMjc2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVRURVJZX0RTMjc4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVRURVJZX0JRMjd4MDAgaXMgbm90IHNldAotIyBDT05GSUdfQkFUVEVSWV9NQVgxNzA0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKIENPTkZJR19UV0w0MDMwX0NPUkU9eQotIyBDT05GSUdfVFdMNDAzMF9QT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogQ09ORklHX1JFR1VMQVRPUj15Ci0jIENPTkZJR19SRUdVTEFUT1JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfTUFYMTU4NiBpcyBub3Qgc2V0CiBDT05GSUdfUkVHVUxBVE9SX1RXTDQwMzA9eQotIyBDT05GSUdfUkVHVUxBVE9SX0xQMzk3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwMjMgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfU09VTkQ9eQotIyBDT05GSUdfU09VTkRfT1NTX0NPUkUgaXMgbm90IHNldAogQ09ORklHX1NORD15Ci1DT05GSUdfU05EX1RJTUVSPW0KLUNPTkZJR19TTkRfUENNPW0KLSMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQotQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15Ci0jIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9SQVdNSURJX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAotQ09ORklHX1NORF9EUklWRVJTPXkKLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0FSTT15Ci1DT05GSUdfU05EX1NQST15Ci1DT05GSUdfU05EX1VTQj15Ci0jIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLSMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfREVCVUc9eQogQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15CiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NVU1BFTkQ9eQotQ09ORklHX1VTQl9PVEc9eQogIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01VU0JfSERSQz15Ci1DT05GSUdfVVNCX01VU0JfU09DPXkKLQotIwotIyBPTUFQIDM0M3ggaGlnaCBzcGVlZCBVU0Igc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX01VU0JfSE9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVTQl9QRVJJUEhFUkFMIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTVVTQl9PVEc9eQogQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDPXkKLUNPTkZJR19VU0JfTVVTQl9IRFJDX0hDRD15Ci0jIENPTkZJR19NVVNCX1BJT19PTkxZIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfSU5WRU5UUkFfRE1BPXkKLSMgQ09ORklHX1VTQl9USV9DUFBJX0RNQSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01VU0JfREVCVUc9eQotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLQotIwotIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwotIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1RFU1Q9bQotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVQ9bQogQ09ORklHX1VTQl9HQURHRVRfREVCVUc9eQogQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVM9eQotQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTIKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUjhBNjY1OTcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9TM0NfSFNPVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xBTkdXRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15CiBDT05GSUdfVVNCX1pFUk89bQotIyBDT05GSUdfVVNCX1pFUk9fSE5QVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0FVRElPPW0KIENPTkZJR19VU0JfRVRIPW0KLUNPTkZJR19VU0JfRVRIX1JORElTPXkKLSMgQ09ORklHX1VTQl9FVEhfRUVNIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VURlM9bQogQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR19TRVJJQUw9bQotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAogQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFPW0KLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLUNPTkZJR19VU0JfT1RHX1VUSUxTPXkKLSMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAotIyBDT05GSUdfSVNQMTMwMV9PTUFQIGlzIG5vdCBzZXQKIENPTkZJR19UV0w0MDMwX1VTQj15Ci0jIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQotIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19PTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfT01BUF9IUz15Ci0jIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RXTDQwMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBDQlVTIHN1cHBvcnQKLSMKLSMgQ09ORklHX0NCVVMgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQogQ09ORklHX1FVT1RBPXkKLSMgQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HPXkKLUNPTkZJR19RVU9UQV9UUkVFPXkKLSMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAogQ09ORklHX1FGTVRfVjI9eQotQ09ORklHX1FVT1RBQ1RMPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiBDT05GSUdfTkZTX1YzX0FDTD15CiBDT05GSUdfTkZTX1Y0PXkKLSMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19BQ0xfU1VQUE9SVD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fVU5XSU5EPXkKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLUNPTkZJR19DUllQVE9fQ1JDMzJDPXkKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQ19UMTBESUY9eQotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKIENPTkZJR19MSUJDUkMzMkM9eQotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfNDQzMHNkcF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfNDQzMHNkcF9kZWZjb25maWcKaW5kZXggMWZiMDQ1Ni4uNjNlMGMyZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwXzQ0MzBzZHBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF80NDMwc2RwX2RlZmNvbmZpZwpAQCAtMSwxMjc5ICsxLDEyMiBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjNwotIyBXZWQgTWF5IDEyIDEyOjI2OjA1IDIwMTAKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CUk9BRENBU1Q9eQotQ09ORklHX0hBVkVfUFJPQ19DUFU9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19HRU5FUklDX0xPQ0tCUkVBSz15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfQVJDSF9IQVNfQ1BVRlJFUT15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfTkVFRF9ETUFfTUFQX1NUQVRFPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKLUNPTkZJR19IQVZFX0tFUk5FTF9MWk89eQotQ09ORklHX0tFUk5FTF9HWklQPXkKLSMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVJORUxfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19VSUQxNj15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15Ci1DT05GSUdfSEFWRV9DTEs9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19TVE9QX01BQ0hJTkU9eQotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVI9eQotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ET1ZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlVDOTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NITU9CSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVA2NDQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQNjQ0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1M1UEMxWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVBWMjEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1U4NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT01BUD15Ci0KLSMKLSMgVEkgT01BUCBJbXBsZW1lbnRhdGlvbnMKLSMKLSMgQ09ORklHX0FSQ0hfT01BUDEgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfT01BUDJQTFVTPXkKLSMgQ09ORklHX0FSQ0hfT01BUDIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQMyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQND15Ci0KLSMKLSMgT01BUCBGZWF0dXJlIFNlbGVjdGlvbnMKLSMKLSMgQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NQVBfTVVYIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX01DQlNQPXkKLSMgQ09ORklHX09NQVBfTUJPWF9GV0sgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9NUFVfVElNRVIgaXMgbm90IHNldAogQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKLUNPTkZJR19PTUFQXzMyS19USU1FUl9IWj0xMjgKIENPTkZJR19PTUFQX0RNX1RJTUVSPXkKLSMgQ09ORklHX09NQVBfUE1fTk9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9QTV9OT09QPXkKLQotIwotIyBPTUFQIEJvYXJkIFR5cGUKLSMKIENPTkZJR19NQUNIX09NQVBfNDQzMFNEUD15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfMzJ2Nks9eQotQ09ORklHX0NQVV9WNz15Ci1DT05GSUdfQ1BVXzMydjc9eQotQ09ORklHX0NQVV9BQlJUX0VWNz15Ci1DT05GSUdfQ1BVX1BBQlJUX1Y3PXkKLUNPTkZJR19DUFVfQ0FDSEVfVjc9eQotQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKLUNPTkZJR19DUFVfQ09QWV9WNj15Ci1DT05GSUdfQ1BVX1RMQl9WNz15Ci1DT05GSUdfQ1BVX0hBU19BU0lEPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKICMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUk1fVEhVTUJFRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVNfVExTX1JFRz15Ci1DT05GSUdfT1VURVJfQ0FDSEU9eQotQ09ORklHX09VVEVSX0NBQ0hFX1NZTkM9eQotQ09ORklHX0NBQ0hFX0wyWDA9eQotQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD01Ci1DT05GSUdfQ1BVX0hBU19QTVU9eQotIyBDT05GSUdfQVJNX0VSUkFUQV80MzA5NzMgaXMgbm90IHNldAotIyBDT05GSUdfQVJNX0VSUkFUQV80NTg2OTMgaXMgbm90IHNldAotIyBDT05GSUdfQVJNX0VSUkFUQV80NjAwNzUgaXMgbm90IHNldAogQ09ORklHX1BMMzEwX0VSUkFUQV81ODgzNjk9eQotQ09ORklHX0FSTV9HSUM9eQotQ09ORklHX0NPTU1PTl9DTEtERVY9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKIENPTkZJR19TTVA9eQotQ09ORklHX0hBVkVfQVJNX1NDVT15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKIENPTkZJR19OUl9DUFVTPTIKLSMgQ09ORklHX0hPVFBMVUdfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0xPQ0FMX1RJTUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0haPTEyOAotIyBDT05GSUdfVEhVTUIyX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLUNPTkZJR19BUkNIX0hBU19IT0xFU19NRU1PUllNT0RFTD15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTAKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci0jIENPTkZJR19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0jIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9yYW0wIHJ3IG1lbT0xMjhNIGNvbnNvbGU9dHR5UzIsMTE1MjAwbjggaW5pdHJkPTB4ODE2MDAwMDAsMjBNIHJhbWRpc2tfc2l6ZT0yMDQ4MCIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi0jIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAogQ09ORklHX1ZGUD15Ci1DT05GSUdfVkZQdjM9eQogQ09ORklHX05FT049eQotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotQ09ORklHX0hBVkVfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX01JU0M9eQotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfVU5JWCBpcyBub3Qgc2V0Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKIENPTkZJR19JUF9QTlBfUkFSUD15Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLUNPTkZJR19JTkVUX0xSTz15Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xNjM4NAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0lfTU9EPXkKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiBDT05GSUdfS1M4ODUxPXkKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU4gaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTMyCi1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQogQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQogQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CiBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15CiBDT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX09NQVA9eQotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKIENPTkZJR19TUEk9eQotIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TUElfTUFTVEVSPXkKLQotIwotIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAogQ09ORklHX1NQSV9PTUFQMjRYWD15Ci0jIENPTkZJR19TUElfWElMSU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9ERVNJR05XQVJFIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUHJvdG9jb2wgTWFzdGVycwotIwotIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19JVDg3NjFFIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMDAgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19UV0w0MDMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fQURQNTU4OCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0Ci0KLSMKLSMgQUM5NyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX09NQVBfV0FUQ0hET0c9eQotIyBDT05GSUdfVFdMNDAzMF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVg2M1hYX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfODhQTTg2MFggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfSTJDUExEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKIENPTkZJR19UV0w0MDMwX0NPUkU9eQotIyBDT05GSUdfVFdMNDAzMF9QT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX0NPREVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9NQVg4OTI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004OTk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfUkVHVUxBVE9SPXkKLSMgQ09ORklHX1JFR1VMQVRPUl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfTUFYMTU4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfTUFYODY0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfTUFYODY2MCBpcyBub3Qgc2V0CiBDT05GSUdfUkVHVUxBVE9SX1RXTDQwMzA9eQotIyBDT05GSUdfUkVHVUxBVE9SX0xQMzk3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwMjMgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQotIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19PTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfT01BUF9IUz15Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX1RXTDQwMzA9eQotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKLSMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15CiBDT05GSUdfUVVPVEE9eQotIyBDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0UgaXMgbm90IHNldAotQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkc9eQotIyBDT05GSUdfUVVPVEFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1FVT1RBX1RSRUU9eQotIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0CiBDT05GSUdfUUZNVF9WMj15Ci1DT05GSUdfUVVPVEFDVEw9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjNfQUNMPXkKIENPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0FDTF9TVVBQT1JUPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRVBIX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQIGlzIG5vdCBzZXQKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAogIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUk1fVU5XSU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DX0VUTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19QQ1JZUFQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLUNPTkZJR19DUllQVE9fQ1JDMzJDPXkKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQ19UMTBESUY9eQotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKIENPTkZJR19MSUJDUkMzMkM9eQotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfYXBvbGxvbl8yNDIwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9hcG9sbG9uXzI0MjBfZGVmY29uZmlnCmluZGV4IGNjODYzNDIuLjBiMjQ4NTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9hcG9sbG9uXzI0MjBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9hcG9sbG9uXzI0MjBfZGVmY29uZmlnCkBAIC0xLDk2MSArMSw5MiBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIzLXJjNi1vbWFwMQotIyBUdWUgU2VwIDE4IDEyOjA3OjI5IDIwMDcKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQPXkKLQotIwotIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucwotIwotQ09ORklHX0FSQ0hfT01BUF9PVEc9eQotIyBDT05GSUdfQVJDSF9PTUFQMSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQMj15Ci0jIENPTkZJR19BUkNIX09NQVAzIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucwotIwotIyBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9CT09UX1RBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0dQSU9fU1dJVENIIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX01VWD15Ci0jIENPTkZJR19PTUFQX01VWF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9NVVhfV0FSTklOR1M9eQotIyBDT05GSUdfT01BUF9TVEkgaXMgbm90IHNldAogIyBDT05GSUdfT01BUF9NQ0JTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX01NVV9GV0sgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9NQk9YX0ZXSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX01QVV9USU1FUiBpcyBub3Qgc2V0CiBDT05GSUdfT01BUF8zMktfVElNRVI9eQotQ09ORklHX09NQVBfMzJLX1RJTUVSX0haPTEyOAotQ09ORklHX09NQVBfRE1fVElNRVI9eQotQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDE9eQotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX1NFUklBTF9XQUtFPXkKLSMgQ09ORklHX09NQVBfRFNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9HRU5FUklDIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIENvcmUgVHlwZQotIwotQ09ORklHX0FSQ0hfT01BUDI0WFg9eQogQ09ORklHX0FSQ0hfT01BUDI0MjA9eQotIyBDT05GSUdfQVJDSF9PTUFQMjQzMCBpcyBub3Qgc2V0Ci0KLSMKLSMgT01BUCBCb2FyZCBUeXBlCi0jCi0jIENPTkZJR19NQUNIX05PS0lBX044MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX0g0IGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX09NQVBfQVBPTExPTj15Ci0jIENPTkZJR19NQUNIX09NQVBfQVBPTExPTl9QTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF8yNDMwU0RQIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCi0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfVjY9eQotIyBDT05GSUdfQ1BVXzMydjZLIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfMzJ2Nj15Ci1DT05GSUdfQ1BVX0FCUlRfRVY2PXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKLUNPTkZJR19DUFVfQ0FDSEVfVjY9eQotQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKLUNPTkZJR19DUFVfQ09QWV9WNj15Ci1DT05GSUdfQ1BVX1RMQl9WNj15Ci1DT05GSUdfQ1BVX0hBU19BU0lEPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKICMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMjgKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L3JhbTAgcncgbWVtPTEyOE0gY29uc29sZT10dHlTMCwxMTUyMDBuOCBpbml0cmQ9MHg4MDYwMDAwMCw4TSByYW1kaXNrX3NpemU9ODE5MiIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBGcmVxdWVuY3kgc2NhbGluZwotIwotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotIyBDT05GSUdfRlBFX05XRlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKIENPTkZJR19WRlA9eQotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT05FTkFORD15Ci0jIENPTkZJR19NVERfT05FTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAogQ09ORklHX01URF9PTkVOQU5EX0dFTkVSSUM9eQotIyBDT05GSUdfTVREX09ORU5BTkRfT01BUDIgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkRfT1RQIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogQ09ORklHX1NNQzkxWD15Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CiBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CiBDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKIENPTkZJR19TRVJJQUxfODI1MF9SU0E9eQotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX09NQVBfV0FUQ0hET0c9eQogQ09ORklHX0hXX1JBTkRPTT15Ci1DT05GSUdfSFdfUkFORE9NX09NQVA9eQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKIENPTkZJR19TUEk9eQotIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TUElfTUFTVEVSPXkKLQotIwotIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX1NQSV9PTUFQMjRYWD15Ci0KLSMKLSMgU1BJIFByb3RvY29sIE1hc3RlcnMKLSMKLSMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UU0MyMTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UU0MyMTAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UU0MyMTBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UU0MyMzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HPXkKK0NPTkZJR19PTUFQX1dBVENIRE9HPXkKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCiBDT05GSUdfRkI9eQogQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfT01BUD15Ci0jIENPTkZJR19GQl9PTUFQX0xDRENfRVhURVJOQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfT01BUF9CT09UTE9BREVSX0lOSVQgaXMgbm90IHNldAotQ09ORklHX0ZCX09NQVBfQ09OU0lTVEVOVF9ETUFfU0laRT0yCi0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVFM9eQogQ09ORklHX0ZPTlRfOHg4PXkKIENPTkZJR19GT05UXzh4MTY9eQotIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAogQ09ORklHX0xPR089eQogIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15CiAjIENPTkZJR19ISUQgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwogQ09ORklHX1VTQl9HQURHRVQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX09NQVA9eQotQ09ORklHX1VTQl9PTUFQPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAogQ09ORklHX1VTQl9FVEg9bQotQ09ORklHX1VTQl9FVEhfUk5ESVM9eQotIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KLSMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKLQotIwotIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKIENPTkZJR19NTUNfT01BUD15Ci1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIERNQSBFbmdpbmUgc3VwcG9ydAotIwotIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIENsaWVudHMKLSMKLQotIwotIyBETUEgRGV2aWNlcwotIwotCi0jCi0jIENCVVMgc3VwcG9ydAotIwotIyBDT05GSUdfQ0JVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlM0X0ZTPXkKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19QUkVFTVBUPXkKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TUElOTE9DSz15CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUD15Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKIENPTkZJR19MSUJDUkMzMkM9eQotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9nZW5lcmljXzE1MTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMTUxMF9kZWZjb25maWcKaW5kZXggNjE3NDRlNS4uMGU0MmJhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMTUxMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMTUxMF9kZWZjb25maWcKQEAgLTEsMTE3MSArMSw4NCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIzLXJjNi1vbWFwMQotIyBUdWUgU2VwIDE4IDEyOjIwOjE5IDIwMDcKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQPXkKLQotIwotIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucwotIwogQ09ORklHX0FSQ0hfT01BUDE9eQotIyBDT05GSUdfQVJDSF9PTUFQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAzIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucwotIwotIyBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9CT09UX1RBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0dQSU9fU1dJVENIIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX01VWD15Ci0jIENPTkZJR19PTUFQX01VWF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9NVVhfV0FSTklOR1M9eQotQ09ORklHX09NQVBfTUNCU1A9eQotIyBDT05GSUdfT01BUF9NTVVfRldLIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTUJPWF9GV0sgaXMgbm90IHNldAotQ09ORklHX09NQVBfTVBVX1RJTUVSPXkKLSMgQ09ORklHX09NQVBfMzJLX1RJTUVSIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQxPXkKLSMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMyBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9TRVJJQUxfV0FLRT15Ci0jIENPTkZJR19PTUFQX0RTUCBpcyBub3Qgc2V0Ci0KLSMKLSMgT01BUCBDb3JlIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfT01BUDczMCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9PTUFQMTVYWD15Ci0jIENPTkZJR19BUkNIX09NQVAxNlhYIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIEJvYXJkIFR5cGUKLSMKLSMgQ09ORklHX01BQ0hfT01BUF9JTk5PVkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9WT0lDRUJMVUUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX1BBTE1URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfUEFMTVo3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfUEFMTVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfU1gxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQU1TX0RFTFRBIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX09NQVBfR0VORVJJQz15Ci0KLSMKLSMgT01BUCBDUFUgU3BlZWQKLSMKLSMgQ09ORklHX09NQVBfQ0xPQ0tTX1NFVF9CWV9CT09UTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR19PTUFQX0FSTV8xNjhNSFo9eQotIyBDT05GSUdfT01BUF9BUk1fMTUwTUhaIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfQVJNXzEyME1IWiBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUFQX0FSTV82ME1IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0FSTV8zME1IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfQVBPTExPTl9QTFVTIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCi0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTI1VD15Ci1DT05GSUdfQ1BVXzMydjRUPXkKLUNPTkZJR19DUFVfQUJSVF9FVjRUPXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKLUNPTkZJR19DUFVfQ0FDSEVfVjRXVD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwogIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIPXkKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMDAKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eVMyLDExNTIwMCByb290PTA4MDMgcm8gaW5pdD0vYmluL3NoIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCi0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwogQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotQ09ORklHX1NVU1BFTkQ9eQotIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9TUj15Ci0jIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz15Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiBDT05GSUdfU0NTSV9NVUxUSV9MVU49eQotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAogQ09ORklHX1VTQl9SVEw4MTUwPXkKLUNPTkZJR19VU0JfVVNCTkVUX01JST15CiBDT05GSUdfVVNCX1VTQk5FVD15Ci1DT05GSUdfVVNCX05FVF9BWDg4MTdYPXkKLUNPTkZJR19VU0JfTkVUX0NEQ0VUSEVSPXkKLSMgQ09ORklHX1VTQl9ORVRfRE05NjAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfR0w2MjBBIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTkVUX05FVDEwODA9eQotIyBDT05GSUdfVVNCX05FVF9QTFVTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX01DUzc4MzAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9STkRJU19IT1NUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVQ9eQotIyBDT05GSUdfVVNCX0FMSV9NNTYzMiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0FOMjcyMD15Ci1DT05GSUdfVVNCX0JFTEtJTj15Ci1DT05GSUdfVVNCX0FSTUxJTlVYPXkKIENPTkZJR19VU0JfRVBTT04yODg4PXkKLSMgQ09ORklHX1VTQl9LQzIxOTAgaXMgbm90IHNldAotQ09ORklHX1VTQl9ORVRfWkFVUlVTPXkKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPXkKIENPTkZJR19QUFBfTVVMVElMSU5LPXkKLSMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX0FTWU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBfREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBfQlNEQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLUNPTkZJR19TTEhDPXkKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9PTUFQPXkKLSMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPW0KLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLUNPTkZJR19JMkNfQUxHT0JJVD15Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfREVCVUc9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFUlNJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQogQ09ORklHX1VTQl9PSENJX0hDRD15Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUI9eQogQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT009eQotQ09ORklHX1VTQl9TVE9SQUdFX0RQQ009eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOT15CiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1PXkKIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVD15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj15Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERTTCBtb2RlbSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKLQotIwotIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKIENPTkZJR19NTUNfT01BUD15Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX09NQVA9eQotCi0jCi0jIERNQSBFbmdpbmUgc3VwcG9ydAotIwotIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIENsaWVudHMKLSMKLQotIwotIyBETUEgRGV2aWNlcwotIwotCi0jCi0jIENCVVMgc3VwcG9ydAotIwotIyBDT05GSUdfQ0JVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0FVVE9GU19GUz15CiBDT05GSUdfQVVUT0ZTNF9GUz15Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCiBDT05GSUdfSVNPOTY2MF9GUz15CiBDT05GSUdfSk9MSUVUPXkKLSMgQ09ORklHX1pJU09GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9bQogQ09ORklHX01TRE9TX0ZTPW0KIENPTkZJR19WRkFUX0ZTPW0KLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwogQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPT1RfTkZTIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgotIwotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMTYxMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfZ2VuZXJpY18xNjEwX2RlZmNvbmZpZwppbmRleCBkNzczODU3Li41ZTUzNmNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfZ2VuZXJpY18xNjEwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfZ2VuZXJpY18xNjEwX2RlZmNvbmZpZwpAQCAtMSwxMTc3ICsxLDg3IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjMtcmM2LW9tYXAxCi0jIFR1ZSBTZXAgMTggMTM6MDE6MjcgMjAwNwotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVA9eQotCi0jCi0jIFRJIE9NQVAgSW1wbGVtZW50YXRpb25zCi0jCi1DT05GSUdfQVJDSF9PTUFQX09URz15CiBDT05GSUdfQVJDSF9PTUFQMT15Ci0jIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUDMgaXMgbm90IHNldAotCi0jCi0jIE9NQVAgRmVhdHVyZSBTZWxlY3Rpb25zCi0jCi0jIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0JPT1RfVEFHIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfR1BJT19TV0lUQ0ggaXMgbm90IHNldAotQ09ORklHX09NQVBfTVVYPXkKLSMgQ09ORklHX09NQVBfTVVYX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX01VWF9XQVJOSU5HUz15Ci0jIENPTkZJR19PTUFQX1NUSSBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9NQ0JTUD15Ci0jIENPTkZJR19PTUFQX01NVV9GV0sgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9NQk9YX0ZXSyBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9NUFVfVElNRVI9eQotIyBDT05GSUdfT01BUF8zMktfVElNRVIgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9ETV9USU1FUiBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMT15Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDMgaXMgbm90IHNldAotQ09ORklHX09NQVBfU0VSSUFMX1dBS0U9eQotIyBDT05GSUdfT01BUF9EU1AgaXMgbm90IHNldAotCi0jCi0jIE9NQVAgQ29yZSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX09NQVA3MzAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQMTVYWCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQMTZYWD15Ci0KLSMKLSMgT01BUCBCb2FyZCBUeXBlCi0jCi0jIENPTkZJR19NQUNIX09NQVBfSU5OT1ZBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9IMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfSDMgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX09TSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX05PS0lBNzcwIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX09NQVBfR0VORVJJQz15Ci0KLSMKLSMgT01BUCBDUFUgU3BlZWQKLSMKLSMgQ09ORklHX09NQVBfQ0xPQ0tTX1NFVF9CWV9CT09UTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfQVJNXzIxNk1IWiBpcyBub3Qgc2V0CiBDT05GSUdfT01BUF9BUk1fMTkyTUhaPXkKLSMgQ09ORklHX09NQVBfQVJNXzE2OE1IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0FSTV8xMjBNSFogaXMgbm90IHNldAogIyBDT05GSUdfT01BUF9BUk1fNjBNSFogaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9BUk1fMzBNSFogaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX0FQT0xMT05fUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIwotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX0FSTTkyNlQ9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUSj15Ci1DT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwogIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMDAKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eVMyLDExNTIwMCByb290PTA4MDMgcm8gaW5pdD0vYmluL3NoIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCi0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRlAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BNX1NMRUVQPXkKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19TVVNQRU5EPXkKLSMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfU1I9eQotIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUlRMODE1MD15Ci1DT05GSUdfVVNCX1VTQk5FVF9NSUk9eQogQ09ORklHX1VTQl9VU0JORVQ9eQotQ09ORklHX1VTQl9ORVRfQVg4ODE3WD15Ci1DT05GSUdfVVNCX05FVF9DRENFVEhFUj15Ci0jIENPTkZJR19VU0JfTkVUX0RNOTYwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX0dMNjIwQSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX05FVF9ORVQxMDgwPXkKLSMgQ09ORklHX1VTQl9ORVRfUExVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9NQ1M3ODMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfUk5ESVNfSE9TVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX05FVF9DRENfU1VCU0VUPXkKIENPTkZJR19VU0JfQUxJX001NjMyPXkKIENPTkZJR19VU0JfQU4yNzIwPXkKLUNPTkZJR19VU0JfQkVMS0lOPXkKLUNPTkZJR19VU0JfQVJNTElOVVg9eQogQ09ORklHX1VTQl9FUFNPTjI4ODg9eQotIyBDT05GSUdfVVNCX0tDMjE5MCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX05FVF9aQVVSVVM9eQotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9eQogQ09ORklHX1BQUF9NVUxUSUxJTks9eQotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBfQVNZTkMgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9eQotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQotQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX09NQVA9eQotIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009bQotQ09ORklHX0hXX1JBTkRPTV9PTUFQPW0KLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLUNPTkZJR19JMkNfQUxHT0JJVD15Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU1AxMzAxX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT0VYUEFOREVSX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BU0IxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GU0NIRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GU0NQT1MgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15Ci0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQotIyBDT05GSUdfRkIgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQj15CiBDT05GSUdfVVNCX0RFQlVHPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRVJTSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCPXkKIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NPXkKLUNPTkZJR19VU0JfU1RPUkFHRV9EUENNPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDk9eQogQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NT15CiBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1Q9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049eQotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz15Ci1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15Ci0KLSMKLSMgTU1DL1NEIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCiBDT05GSUdfTU1DX09NQVA9eQotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCiBDT05GSUdfUlRDX0RSVl9PTUFQPXkKLQotIwotIyBETUEgRW5naW5lIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAotCi0jCi0jIERNQSBDbGllbnRzCi0jCi0KLSMKLSMgRE1BIERldmljZXMKLSMKLQotIwotIyBDQlVTIHN1cHBvcnQKLSMKLSMgQ09ORklHX0NCVVMgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19BVVRPRlNfRlM9eQogQ09ORklHX0FVVE9GUzRfRlM9eQotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwogQ09ORklHX0lTTzk2NjBfRlM9eQogQ09ORklHX0pPTElFVD15Ci0jIENPTkZJR19aSVNPRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPW0KIENPTkZJR19NU0RPU19GUz1tCiBDT05GSUdfVkZBVF9GUz1tCi1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKIENPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST09UX05GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19QUkVFTVBUPXkKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9nZW5lcmljXzE3MTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMTcxMF9kZWZjb25maWcKaW5kZXggNmVjNDg3ZS4uYzA4NjdiMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMTcxMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMTcxMF9kZWZjb25maWcKQEAgLTEsMTA4NyArMSw3NSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIzLXJjNi1vbWFwMQotIyBUdWUgU2VwIDE4IDEzOjAyOjA4IDIwMDcKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQPXkKLQotIwotIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucwotIwotQ09ORklHX0FSQ0hfT01BUF9PVEc9eQogQ09ORklHX0FSQ0hfT01BUDE9eQotIyBDT05GSUdfQVJDSF9PTUFQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAzIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucwotIwotIyBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MgaXMgbm90IHNldAotQ09ORklHX09NQVBfQk9PVF9UQUc9eQotIyBDT05GSUdfT01BUF9CT09UX1JFQVNPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0NPTVBPTkVOVF9WRVJTSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfR1BJT19TV0lUQ0ggaXMgbm90IHNldAogIyBDT05GSUdfT01BUF9NVVggaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9TVEkgaXMgbm90IHNldAotQ09ORklHX09NQVBfTUNCU1A9eQotIyBDT05GSUdfT01BUF9NTVVfRldLIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTUJPWF9GV0sgaXMgbm90IHNldAotQ09ORklHX09NQVBfTVBVX1RJTUVSPXkKLSMgQ09ORklHX09NQVBfMzJLX1RJTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfRE1fVElNRVIgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzPXkKLSMgQ09ORklHX09NQVBfRFNQIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIENvcmUgVHlwZQotIwotIyBDT05GSUdfQVJDSF9PTUFQNzMwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT01BUDE1WFggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT01BUDE2WFg9eQotCi0jCi0jIE9NQVAgQm9hcmQgVHlwZQotIwotIyBDT05GSUdfTUFDSF9PTUFQX0lOTk9WQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfSDIgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX0gzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9PU0sgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9OT0tJQTc3MCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9PTUFQX0dFTkVSSUM9eQotCi0jCi0jIE9NQVAgQ1BVIFNwZWVkCi0jCi0jIENPTkZJR19PTUFQX0NMT0NLU19TRVRfQllfQk9PVExPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0FSTV8yMTZNSFogaXMgbm90IHNldAogQ09ORklHX09NQVBfQVJNXzE5Mk1IWj15Ci0jIENPTkZJR19PTUFQX0FSTV8xNjhNSFogaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9BUk1fMTIwTUhaIGlzIG5vdCBzZXQKICMgQ09ORklHX09NQVBfQVJNXzYwTUhaIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfQVJNXzMwTUhaIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9BUE9MTE9OX1BMVVMgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9BUk05MjZUPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQotQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKICMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMDAKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eTAgY29uc29sZT10dHlTMiwxMTUyMDAgcm9vdD0wODAxIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCi0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRlAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX0FSVEhVUj15Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCiBDT05GSUdfUE09eQotIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QTV9TTEVFUD15Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci1DT05GSUdfU1VTUEVORD15Ci0jIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVExBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfVVNCTkVUX01JST15CiBDT05GSUdfVVNCX1VTQk5FVD15Ci1DT05GSUdfVVNCX05FVF9BWDg4MTdYPXkKLUNPTkZJR19VU0JfTkVUX0NEQ0VUSEVSPXkKLSMgQ09ORklHX1VTQl9ORVRfRE05NjAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfR0w2MjBBIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTkVUX05FVDEwODA9eQotIyBDT05GSUdfVVNCX05FVF9QTFVTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX01DUzc4MzAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9STkRJU19IT1NUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVQ9eQogQ09ORklHX1VTQl9BTElfTTU2MzI9eQotIyBDT05GSUdfVVNCX0FOMjcyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQkVMS0lOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUk1MSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRVBTT04yODg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQzIxOTAgaXMgbm90IHNldAotQ09ORklHX1VTQl9ORVRfWkFVUlVTPXkKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPXkKLSMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBfQVNZTkMgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9eQotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9PTUFQPXkKLSMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKLUNPTkZJR19IV19SQU5ET01fT01BUD15Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLUNPTkZJR19ISURfREVCVUc9eQotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQj15CiBDT05GSUdfVVNCX0RFQlVHPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVSU0lTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKLUNPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CitDT05GSUdfVVNCX1NUT1JBR0U9eQogQ09ORklHX01NQz15Ci0jIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQotCi0jCi0jIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwogQ09ORklHX01NQ19PTUFQPXkKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKLQotIwotIyBETUEgQ2xpZW50cwotIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0KLSMKLSMgQ0JVUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19DQlVTIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST09UX05GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAogQ09ORklHX05MU19DT0RFUEFHRV84NTI9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMTU9eQotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TUElOTE9DSz15Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0VSUk9SUz15Ci0jIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VDVVJJVFk9eQotIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDVVJJVFlfQ0FQQUJJTElUSUVTPXkKLSMgQ09ORklHX1NFQ1VSSVRZX1JPT1RQTFVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0xPV01FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9eQotQ09ORklHX0NSWVBUT19DQkM9eQogQ09ORklHX0NSWVBUT19QQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9nZW5lcmljXzI0MjBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMjQyMF9kZWZjb25maWcKaW5kZXggNzIxOGI5Ni4uYWMwOGU1MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMjQyMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMjQyMF9kZWZjb25maWcKQEAgLTEsNjU0ICsxLDM3IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjMtcmM2LW9tYXAxCi0jIFR1ZSBTZXAgMTggMTE6NDQ6NDggMjAwNwotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQPXkKLQotIwotIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucwotIwotQ09ORklHX0FSQ0hfT01BUF9PVEc9eQotIyBDT05GSUdfQVJDSF9PTUFQMSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQMj15Ci0jIENPTkZJR19BUkNIX09NQVAzIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucwotIwotIyBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MgaXMgbm90IHNldAotQ09ORklHX09NQVBfQk9PVF9UQUc9eQotIyBDT05GSUdfT01BUF9CT09UX1JFQVNPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0NPTVBPTkVOVF9WRVJTSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfR1BJT19TV0lUQ0ggaXMgbm90IHNldAogIyBDT05GSUdfT01BUF9NVVggaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9TVEkgaXMgbm90IHNldAotQ09ORklHX09NQVBfTUNCU1A9eQotIyBDT05GSUdfT01BUF9NTVVfRldLIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTUJPWF9GV0sgaXMgbm90IHNldAotQ09ORklHX09NQVBfTVBVX1RJTUVSPXkKLSMgQ09ORklHX09NQVBfMzJLX1RJTUVSIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX0RNX1RJTUVSPXkKLSMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDEgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMiBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMz15Ci0jIENPTkZJR19PTUFQX0RTUCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9PTUFQX0dFTkVSSUM9eQotCi0jCi0jIE9NQVAgQ29yZSBUeXBlCi0jCi1DT05GSUdfQVJDSF9PTUFQMjRYWD15CiBDT05GSUdfQVJDSF9PTUFQMjQyMD15Ci0jIENPTkZJR19BUkNIX09NQVAyNDMwIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIEJvYXJkIFR5cGUKLSMKLSMgQ09ORklHX01BQ0hfTk9LSUFfTjgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfSDQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX0FQT0xMT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX0FQT0xMT05fUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfMjQzMFNEUCBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIwotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX1Y2PXkKLSMgQ09ORklHX0NQVV8zMnY2SyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVXzMydjY9eQotQ09ORklHX0NQVV9BQlJUX0VWNj15Ci1DT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y2PXkKLUNPTkZJR19DUFVfQ0FDSEVfVklQVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjY9eQotQ09ORklHX0NQVV9UTEJfVjY9eQotQ09ORklHX0NQVV9IQVNfQVNJRD15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCi0jIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19MRURTPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgxMEMwODAwMAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgxMDIwMDAwMAotIyBDT05GSUdfWkJPT1RfUk9NIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FPSIiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKLSMKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotCi0jCi0jIE5ldHdvcmtpbmcKLSMKLSMgQ09ORklHX05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT1tCi1DT05GSUdfSFdfUkFORE9NX09NQVA9bQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BQklUVUdVUlUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BQklUVUdVUlUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX0RBQj15Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotQ09ORklHX0hJRF9ERUJVRz15Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKLSMKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIERNQSBFbmdpbmUgc3VwcG9ydAotIwotIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIENsaWVudHMKLSMKLQotIwotIyBETUEgRGV2aWNlcwotIwotCi0jCi0jIENCVVMgc3VwcG9ydAotIwotIyBDT05GSUdfQ0JVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUMl9GU19YQVRUUj15Ci0jIENPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ST01GU19GUz15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX1JPTUZTX0ZTPXkKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKIENPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15CiBDT05GSUdfQ1JDX0NDSVRUPXkKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2gyXzE2MTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2gyXzE2MTBfZGVmY29uZmlnCmluZGV4IDkxZWYyZWQuLmUyZGUyYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oMl8xNjEwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfaDJfMTYxMF9kZWZjb25maWcKQEAgLTEsMTMzOSArMSwxMDkgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzItb21hcDEKLSMgV2VkIEZlYiAyMCAxNzoxMjozNiAyMDA4Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLSMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfTkFNRVNQQUNFUz15Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNT0QgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT01BUD15Ci0jIENPTkZJR19BUkNIX01TTTdYMDBBIGlzIG5vdCBzZXQKLQotIwotIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucwotIwotQ09ORklHX0FSQ0hfT01BUF9PVEc9eQogQ09ORklHX0FSQ0hfT01BUDE9eQotIyBDT05GSUdfQVJDSF9PTUFQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAzIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucwotIwotQ09ORklHX09NQVBfREVCVUdfU1JBTV9QQVRDSD15Ci0jIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUyBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9CT09UX1RBRz15Ci0jIENPTkZJR19PTUFQX0JPT1RfUkVBU09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfQ09NUE9ORU5UX1ZFUlNJT04gaXMgbm90IHNldAotQ09ORklHX09NQVBfR1BJT19TV0lUQ0g9eQotQ09ORklHX09NQVBfTVVYPXkKIENPTkZJR19PTUFQX01VWF9ERUJVRz15Ci1DT05GSUdfT01BUF9NVVhfV0FSTklOR1M9eQotIyBDT05GSUdfT01BUF9TVEkgaXMgbm90IHNldAotQ09ORklHX09NQVBfTUNCU1A9eQotIyBDT05GSUdfT01BUF9NTVVfRldLIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTUJPWF9GV0sgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9NUFVfVElNRVIgaXMgbm90IHNldAogQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKLUNPTkZJR19PTUFQXzMyS19USU1FUl9IWj0xMjgKIENPTkZJR19PTUFQX0RNX1RJTUVSPXkKLUNPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQxPXkKLSMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMyBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9TRVJJQUxfV0FLRT15Ci0KLSMKLSMgT01BUCBDb3JlIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfT01BUDczMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX09NQVAxNVhYIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVAxNlhYPXkKLQotIwotIyBPTUFQIEJvYXJkIFR5cGUKLSMKLSMgQ09ORklHX01BQ0hfT01BUF9JTk5PVkFUT1IgaXMgbm90IHNldAogQ09ORklHX01BQ0hfT01BUF9IMj15Ci0jIENPTkZJR19NQUNIX09NQVBfSDMgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX09TSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX05PS0lBNzcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9HRU5FUklDIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIENQVSBTcGVlZAotIwotIyBDT05GSUdfT01BUF9DTE9DS1NfU0VUX0JZX0JPT1RMT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9BUk1fMjE2TUhaIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfQVJNXzE5Mk1IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0FSTV8xNjhNSFogaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9BUk1fMTIwTUhaIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX0FSTV82ME1IWj15Ci0jIENPTkZJR19PTUFQX0FSTV8zME1IWiBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIwotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX0FSTTkyNlQ9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUSj15Ci1DT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEyOAotIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0xFRFM9eQotIyBDT05GSUdfTEVEU19DUFUgaXMgbm90IHNldAotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9Im1lbT0zMk0gY29uc29sZT10dHlTMCwxMTUyMDBuOCByb290PS9kZXYvcmFtMCBydyBpbml0cmQ9MHgxMDYwMDAwMCw4TSByYW1kaXNrX3NpemU9ODE5MiIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotIyBDT05GSUdfQVRBR1NfUFJPQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCi0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRlAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BNX1NMRUVQPXkKLUNPTkZJR19TVVNQRU5EPXkKLUNPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQotIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfUE1fUlVOVElNRT15Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0RSSVZFUj15Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogQ09ORklHX01URF9ERUJVRz15CiBDT05GSUdfTVREX0RFQlVHX1ZFUkJPU0U9MwotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT01BUF9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogQ09ORklHX1NNQzkxWD15Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9eQotIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9BU1lOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAotIyBDT05GSUdfUFBQT0UgaXMgbm90IHNldAotIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAogQ09ORklHX1NMSVA9eQogQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15Ci1DT05GSUdfU0xIQz15Ci0jIENPTkZJR19TTElQX1NNQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVBfTU9ERV9TTElQNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15CiBDT05GSUdfSU5QVVRfRVZCVUc9eQotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01JU0M9eQotIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVUlOUFVUPXkKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009bQotQ09ORklHX0hXX1JBTkRPTV9PTUFQPW0KLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLSMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX09NQVA9eQotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci1DT05GSUdfSVNQMTMwMV9PTUFQPXkKLUNPTkZJR19UUFM2NTAxMD15Ci0jIENPTkZJR19TRU5TT1JTX1RMVjMyMEFJQzIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9FWFBBTkRFUl9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKIENPTkZJR19TUEk9eQotIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TUElfTUFTVEVSPXkKLQotIwotIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwotIwotQ09ORklHX1NQSV9CSVRCQU5HPXkKIENPTkZJR19TUElfT01BUF9VV0lSRT15Ci0KLSMKLSMgU1BJIFByb3RvY29sIE1hc3RlcnMKLSMKLSMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKLUNPTkZJR19TUElfVFNDMjEwMT15Ci0jIENPTkZJR19TUElfVFNDMjEwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfVFNDMjEwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfVFNDMjMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTQzIxMFggaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KIENPTkZJR19GQj15CiBDT05GSUdfRklSTVdBUkVfRURJRD15Ci0jIENPTkZJR19GQl9EREMgaXMgbm90IHNldAotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9ERUZFUlJFRF9JTz15Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogQ09ORklHX0ZCX09NQVA9eQotIyBDT05GSUdfRkJfT01BUF9MQ0RDX0VYVEVSTkFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX09NQVBfQk9PVExPQURFUl9JTklUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9PTUFQX0NPTlNJU1RFTlRfRE1BX1NJWkU9MgotIyBDT05GSUdfRkJfT01BUF9ETUFfVFVORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQogQ09ORklHX0xPR089eQogIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCiAjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVNQRU5EPXkKLSMgQ09ORklHX1VTQl9QRVJTSVNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT1RHPXkKLUNPTkZJR19VU0JfT1RHX1dISVRFTElTVD15Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX1RFU1Q9eQogQ09ORklHX1VTQl9HQURHRVQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9PTUFQPXkKLUNPTkZJR19VU0JfT01BUD15Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfRVRIPXkKLUNPTkZJR19VU0JfRVRIX1JORElTPXkKLSMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VUSD1tCiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz15Ci1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15Ci0jIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwogQ09ORklHX01NQ19PTUFQPXkKLSMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwogQ09ORklHX1JUQ19EUlZfT01BUD15Ci0KLSMKLSMgQ0JVUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19DQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfRFNQIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAogQ09ORklHX1JPTUZTX0ZTPXkKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQogQ09ORklHX0RFQlVHX0VSUk9SUz15Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oNF8yNDIwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oNF8yNDIwX2RlZmNvbmZpZwppbmRleCBiMTJiNDA2Li44NThmOTNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfaDRfMjQyMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2g0XzI0MjBfZGVmY29uZmlnCkBAIC0xLDExMTkgKzEsMTA3IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjMtcmM2LW9tYXAxCi0jIFR1ZSBTZXAgMTggMTE6NDQ6NTggMjAwNwotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotQ09ORklHX0tNT0Q9eQotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT01BUD15Ci0KLSMKLSMgVEkgT01BUCBJbXBsZW1lbnRhdGlvbnMKLSMKLUNPTkZJR19BUkNIX09NQVBfT1RHPXkKLSMgQ09ORklHX0FSQ0hfT01BUDEgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT01BUDI9eQotIyBDT05GSUdfQVJDSF9PTUFQMyBpcyBub3Qgc2V0Ci0KLSMKLSMgT01BUCBGZWF0dXJlIFNlbGVjdGlvbnMKLSMKLUNPTkZJR19PTUFQX0RFQlVHX0RFVklDRVM9eQotIyBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MgaXMgbm90IHNldAotQ09ORklHX09NQVBfQk9PVF9UQUc9eQotIyBDT05GSUdfT01BUF9CT09UX1JFQVNPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0NPTVBPTkVOVF9WRVJTSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfR1BJT19TV0lUQ0ggaXMgbm90IHNldAotQ09ORklHX09NQVBfTVVYPXkKIENPTkZJR19PTUFQX01VWF9ERUJVRz15Ci1DT05GSUdfT01BUF9NVVhfV0FSTklOR1M9eQotIyBDT05GSUdfT01BUF9TVEkgaXMgbm90IHNldAotQ09ORklHX09NQVBfTUNCU1A9eQotIyBDT05GSUdfT01BUF9NTVVfRldLIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTUJPWF9GV0sgaXMgbm90IHNldAotQ09ORklHX09NQVBfTVBVX1RJTUVSPXkKLSMgQ09ORklHX09NQVBfMzJLX1RJTUVSIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX0RNX1RJTUVSPXkKLUNPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQxPXkKLSMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMyBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9TRVJJQUxfV0FLRT15Ci0jIENPTkZJR19PTUFQX0RTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfR0VORVJJQyBpcyBub3Qgc2V0Ci0KLSMKLSMgT01BUCBDb3JlIFR5cGUKLSMKLUNPTkZJR19BUkNIX09NQVAyNFhYPXkKIENPTkZJR19BUkNIX09NQVAyNDIwPXkKLSMgQ09ORklHX0FSQ0hfT01BUDI0MzAgaXMgbm90IHNldAotCi0jCi0jIE9NQVAgQm9hcmQgVHlwZQotIwotIyBDT05GSUdfTUFDSF9OT0tJQV9OODAwIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX09NQVBfSDQ9eQotIyBDT05GSUdfTUFDSF9PTUFQX0g0X1RVU0IgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX0g0X09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVAyX0g0X1VTQjEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX0FQT0xMT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX0FQT0xMT05fUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfMjQzMFNEUCBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIwotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX1Y2PXkKLSMgQ09ORklHX0NQVV8zMnY2SyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVXzMydjY9eQotQ09ORklHX0NQVV9BQlJUX0VWNj15Ci1DT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y2PXkKLUNPTkZJR19DUFVfQ0FDSEVfVklQVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjY9eQotQ09ORklHX0NQVV9UTEJfVjY9eQotQ09ORklHX0NQVV9IQVNfQVNJRD15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L3JhbTAgcncgY29uc29sZT10dHlTMCwxMTUyMDBuOCBpbml0cmQ9MHg4MDYwMDAwMCw4TSByYW1kaXNrX3NpemU9ODE5MiIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBGcmVxdWVuY3kgc2NhbGluZwotIwotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz15Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPXkKLSMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15Ci0jIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiBDT05GSUdfSVJEQT15Ci0KLSMKLSMgSXJEQSBwcm90b2NvbHMKLSMKIENPTkZJR19JUkxBTj15CiBDT05GSUdfSVJDT01NPXkKLSMgQ09ORklHX0lSREFfVUxUUkEgaXMgbm90IHNldAotCi0jCi0jIElyREEgb3B0aW9ucwotIwotIyBDT05GSUdfSVJEQV9DQUNIRV9MQVNUX0xTQVAgaXMgbm90IHNldAotIyBDT05GSUdfSVJEQV9GQVNUX1JSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREFfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIEluZnJhcmVkLXBvcnQgZGV2aWNlIGRyaXZlcnMKLSMKLQotIwotIyBTSVIgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0lSVFRZX1NJUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRG9uZ2xlIHN1cHBvcnQKLSMKLQotIwotIyBPbGQgU0lSIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19JUlBPUlRfU0lSIGlzIG5vdCBzZXQKLQotIwotIyBPbGQgU2VyaWFsIGRvbmdsZSBzdXBwb3J0Ci0jCi0KLSMKLSMgRklSIGRldmljZSBkcml2ZXJzCi0jCi1DT05GSUdfT01BUF9JUj15Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotQ09ORklHX01URF9PTUFQX05PUj15Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xNjM4NAotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfU01DOTFYPXkKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9PTUFQPXkKLSMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CiBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CiBDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKIENPTkZJR19TRVJJQUxfODI1MF9SU0E9eQotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19PTUFQPXkKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19PTUFQX1dBVENIRE9HPXkKLUNPTkZJR19IV19SQU5ET009bQotQ09ORklHX0hXX1JBTkRPTV9PTUFQPW0KLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLSMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX09NQVA9eQotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfSVNQMTMwMV9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVExWMzIwQUlDMjMgaXMgbm90IHNldAotQ09ORklHX0dQSU9FWFBBTkRFUl9PTUFQPXkKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKIENPTkZJR19NRU5FTEFVUz15Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KIENPTkZJR19GQj15CiBDT05GSUdfRklSTVdBUkVfRURJRD15Ci0jIENPTkZJR19GQl9EREMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfREVGRVJSRURfSU89eQotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9PTUFQPXkKLSMgQ09ORklHX0ZCX09NQVBfTENEQ19FWFRFUk5BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9PTUFQX0JPT1RMT0FERVJfSU5JVCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfT01BUF9DT05TSVNURU5UX0RNQV9TSVpFPTIKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19GT05UXzh4OD15Ci1DT05GSUdfRk9OVF84eDE2PXkKIENPTkZJR19MT0dPPXkKICMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0CiAjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKLUNPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCi0jCi0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz15Ci1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15Ci0KLSMKLSMgTU1DL1NEIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCiBDT05GSUdfTU1DX09NQVA9eQotQ09ORklHX1JUQ19MSUI9eQotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBETUEgRW5naW5lIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAotCi0jCi0jIERNQSBDbGllbnRzCi0jCi0KLSMKLSMgRE1BIERldmljZXMKLSMKLQotIwotIyBDQlVTIHN1cHBvcnQKLSMKLSMgQ09ORklHX0NCVVMgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKIENPTkZJR19RVU9UQT15Ci0jIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKIENPTkZJR19RRk1UX1YyPXkKLUNPTkZJR19RVU9UQUNUTD15Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9eQogQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKIENPTkZJR19MSUJDUkMzMkM9eQotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9pbm5vdmF0b3JfMTUxMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfaW5ub3ZhdG9yXzE1MTBfZGVmY29uZmlnCmluZGV4IGU5YzE0MDguLjI2NWFmMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9pbm5vdmF0b3JfMTUxMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2lubm92YXRvcl8xNTEwX2RlZmNvbmZpZwpAQCAtMSwxMjUyICsxLDEwMiBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIzLXJjNi1vbWFwMQotIyBUdWUgU2VwIDE4IDExOjQ1OjAyIDIwMDcKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVA9eQotCi0jCi0jIFRJIE9NQVAgSW1wbGVtZW50YXRpb25zCi0jCiBDT05GSUdfQVJDSF9PTUFQMT15Ci0jIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUDMgaXMgbm90IHNldAotCi0jCi0jIE9NQVAgRmVhdHVyZSBTZWxlY3Rpb25zCi0jCi0jIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0JPT1RfVEFHIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfR1BJT19TV0lUQ0ggaXMgbm90IHNldAotQ09ORklHX09NQVBfTVVYPXkKLSMgQ09ORklHX09NQVBfTVVYX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX01VWF9XQVJOSU5HUz15Ci1DT05GSUdfT01BUF9NQ0JTUD15Ci0jIENPTkZJR19PTUFQX01NVV9GV0sgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9NQk9YX0ZXSyBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9NUFVfVElNRVI9eQotIyBDT05GSUdfT01BUF8zMktfVElNRVIgaXMgbm90IHNldAotQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDE9eQotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX1NFUklBTF9XQUtFPXkKLSMgQ09ORklHX09NQVBfRFNQIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIENvcmUgVHlwZQotIwotIyBDT05GSUdfQVJDSF9PTUFQNzMwIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX09NQVAxNVhYPXkKLSMgQ09ORklHX0FSQ0hfT01BUDE2WFggaXMgbm90IHNldAotCi0jCi0jIE9NQVAgQm9hcmQgVHlwZQotIwogQ09ORklHX01BQ0hfT01BUF9JTk5PVkFUT1I9eQotIyBDT05GSUdfTUFDSF9WT0lDRUJMVUUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX1BBTE1URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfUEFMTVo3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfUEFMTVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfU1gxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQU1TX0RFTFRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9HRU5FUklDIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIENQVSBTcGVlZAotIwotIyBDT05GSUdfT01BUF9DTE9DS1NfU0VUX0JZX0JPT1RMT0FERVIgaXMgbm90IHNldAogQ09ORklHX09NQVBfQVJNXzE2OE1IWj15Ci0jIENPTkZJR19PTUFQX0FSTV8xNTBNSFogaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9BUk1fMTIwTUhaIGlzIG5vdCBzZXQKICMgQ09ORklHX09NQVBfQVJNXzYwTUhaIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfQVJNXzMwTUhaIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9BUE9MTE9OX1BMVVMgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9BUk05MjVUPXkKLUNPTkZJR19DUFVfMzJ2NFQ9eQotQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQotQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQotQ09ORklHX0NQVV9DQUNIRV9WNFdUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXQj15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIPXkKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMDAKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0xFRFM9eQotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAsMTE1MjAwbjggcm9vdD0vZGV2L25mcyBpcD1ib290cCBub2luaXRyZCIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBGcmVxdWVuY3kgc2NhbGluZwotIwotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BNX1NMRUVQPXkKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19TVVNQRU5EPXkKLSMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQogQ09ORklHX0NIUl9ERVZfU1Q9eQotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1NSPXkKLSMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKIENPTkZJR19TQ1NJX01VTFRJX0xVTj15Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKIENPTkZJR19TTUM5MVg9eQotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAogQ09ORklHX1VTQl9SVEw4MTUwPXkKLUNPTkZJR19VU0JfVVNCTkVUX01JST15CiBDT05GSUdfVVNCX1VTQk5FVD15Ci1DT05GSUdfVVNCX05FVF9BWDg4MTdYPXkKLUNPTkZJR19VU0JfTkVUX0NEQ0VUSEVSPXkKLSMgQ09ORklHX1VTQl9ORVRfRE05NjAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfR0w2MjBBIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTkVUX05FVDEwODA9eQotIyBDT05GSUdfVVNCX05FVF9QTFVTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX01DUzc4MzAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9STkRJU19IT1NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX05FVF9aQVVSVVM9eQotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9eQogQ09ORklHX1BQUF9NVUxUSUxJTks9eQotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQX0FTWU5DPXkKLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0CiBDT05GSUdfUFBQX0RFRkxBVEU9eQogQ09ORklHX1BQUF9CU0RDT01QPXkKLSMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9eQotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0yNDAKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT0zMjAKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9PTUFQPXkKLUNPTkZJR19PTUFQX1BTMj1tCi0jIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009bQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi0jIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCiBDT05GSUdfRkI9eQotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9EREMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfREVGRVJSRURfSU89eQotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9PTUFQPXkKLSMgQ09ORklHX0ZCX09NQVBfTENEQ19FWFRFUk5BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9PTUFQX0JPT1RMT0FERVJfSU5JVCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfT01BUF9DT05TSVNURU5UX0RNQV9TSVpFPTIKLSMgQ09ORklHX0ZCX09NQVBfRE1BX1RVTkUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAogQ09ORklHX0ZPTlRTPXkKIENPTkZJR19GT05UXzh4OD15CiBDT05GSUdfRk9OVF84eDE2PXkKLSMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9NSU5JXzR4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKIENPTkZJR19MT0dPPXkKLUNPTkZJR19MT0dPX0xJTlVYX01PTk89eQotQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfREVCVUc9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVNQRU5EPXkKLSMgQ09ORklHX1VTQl9QRVJTSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCPXkKIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NPXkKLUNPTkZJR19VU0JfU1RPUkFHRV9EUENNPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDk9eQogQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NT15CiBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1Q9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049eQotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz15Ci1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15Ci0KLSMKLSMgTU1DL1NEIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCiBDT05GSUdfTU1DX09NQVA9eQotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCiBDT05GSUdfUlRDX0RSVl9PTUFQPXkKLQotIwotIyBETUEgRW5naW5lIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAotCi0jCi0jIERNQSBDbGllbnRzCi0jCi0KLSMKLSMgRE1BIERldmljZXMKLSMKLQotIwotIyBDQlVTIHN1cHBvcnQKLSMKLSMgQ09ORklHX0NCVVMgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19BVVRPRlNfRlM9eQogQ09ORklHX0FVVE9GUzRfRlM9eQotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwogQ09ORklHX0lTTzk2NjBfRlM9eQogQ09ORklHX0pPTElFVD15Ci0jIENPTkZJR19aSVNPRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPW0KIENPTkZJR19NU0RPU19GUz1tCiBDT05GSUdfVkZBVF9GUz1tCi1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19QUkVFTVBUPXkKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9eQogQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2lubm92YXRvcl8xNjEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9pbm5vdmF0b3JfMTYxMF9kZWZjb25maWcKaW5kZXggZmVhOTMxOS4uY2M3ZmJmOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2lubm92YXRvcl8xNjEwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfaW5ub3ZhdG9yXzE2MTBfZGVmY29uZmlnCkBAIC0xLDgzOCArMSw1OCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIzLXJjNi1vbWFwMQotIyBUdWUgU2VwIDE4IDExOjQ1OjA1IDIwMDcKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQPXkKLQotIwotIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucwotIwotQ09ORklHX0FSQ0hfT01BUF9PVEc9eQogQ09ORklHX0FSQ0hfT01BUDE9eQotIyBDT05GSUdfQVJDSF9PTUFQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAzIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucwotIwotIyBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9CT09UX1RBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0dQSU9fU1dJVENIIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX01VWD15Ci0jIENPTkZJR19PTUFQX01VWF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9NVVhfV0FSTklOR1M9eQotIyBDT05GSUdfT01BUF9TVEkgaXMgbm90IHNldAotQ09ORklHX09NQVBfTUNCU1A9eQotIyBDT05GSUdfT01BUF9NTVVfRldLIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTUJPWF9GV0sgaXMgbm90IHNldAotQ09ORklHX09NQVBfTVBVX1RJTUVSPXkKLSMgQ09ORklHX09NQVBfMzJLX1RJTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfRE1fVElNRVIgaXMgbm90IHNldAotQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDE9eQotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX1NFUklBTF9XQUtFPXkKLSMgQ09ORklHX09NQVBfRFNQIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIENvcmUgVHlwZQotIwotIyBDT05GSUdfQVJDSF9PTUFQNzMwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT01BUDE1WFggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT01BUDE2WFg9eQotCi0jCi0jIE9NQVAgQm9hcmQgVHlwZQotIwogQ09ORklHX01BQ0hfT01BUF9JTk5PVkFUT1I9eQotIyBDT05GSUdfTUFDSF9PTUFQX0gyIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9IMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfT1NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTk9LSUE3NzAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX0dFTkVSSUMgaXMgbm90IHNldAotCi0jCi0jIE9NQVAgQ1BVIFNwZWVkCi0jCi0jIENPTkZJR19PTUFQX0NMT0NLU19TRVRfQllfQk9PVExPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0FSTV8yMTZNSFogaXMgbm90IHNldAogQ09ORklHX09NQVBfQVJNXzE5Mk1IWj15Ci0jIENPTkZJR19PTUFQX0FSTV8xNjhNSFogaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9BUk1fMTIwTUhaIGlzIG5vdCBzZXQKICMgQ09ORklHX09NQVBfQVJNXzYwTUhaIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfQVJNXzMwTUhaIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9BUE9MTE9OX1BMVVMgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9BUk05MjZUPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQotQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKICMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSD15Ci0jIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4gaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCi0jIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0xFRFMgaXMgbm90IHNldAotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9Im1lbT0zMk0gY29uc29sZT10dHkwIGNvbnNvbGU9dHR5UzAsMTE1MjAwIGluaXRyZD0weDEwMjAwMDAwLDhNIHJvb3Q9L2Rldi9yYW0wIHJ3IgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCi0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRlAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9bQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogQ09ORklHX1NNQzkxWD15Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPXkKIENPTkZJR19QUFBfTVVMVElMSU5LPXkKLSMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX0FTWU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBfREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBfQlNEQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLUNPTkZJR19TTEhDPXkKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX09NQVA9eQotIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPW0KLUNPTkZJR19IV19SQU5ET01fT01BUD1tCi0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQogQ09ORklHX0ZCPXkKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogQ09ORklHX0ZCX09NQVA9eQotIyBDT05GSUdfRkJfT01BUF9MQ0RDX0VYVEVSTkFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX09NQVBfQk9PVExPQURFUl9JTklUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9PTUFQX0NPTlNJU1RFTlRfRE1BX1NJWkU9MgotIyBDT05GSUdfRkJfT01BUF9ETUFfVFVORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVFM9eQogQ09ORklHX0ZPTlRfOHg4PXkKIENPTkZJR19GT05UXzh4MTY9eQotIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAogQ09ORklHX0xPR089eQotQ09ORklHX0xPR09fTElOVVhfTU9OTz15Ci1DT05GSUdfTE9HT19MSU5VWF9WR0ExNj15Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotQ09ORklHX0hJRF9ERUJVRz15Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKLSMKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIERNQSBFbmdpbmUgc3VwcG9ydAotIwotIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIENsaWVudHMKLSMKLQotIwotIyBETUEgRGV2aWNlcwotIwotCi0jCi0jIENCVVMgc3VwcG9ydAotIwotIyBDT05GSUdfQ0JVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0FVVE9GU19GUz15CiBDT05GSUdfQVVUT0ZTNF9GUz15Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST09UX05GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi0jIENPTkZJR19OTFMgaXMgbm90IHNldAotCi0jCi0jIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgotIwotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9sZHBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2xkcF9kZWZjb25maWcKaW5kZXggMGVmYjRiMC4uYzdiYjU1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2xkcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2xkcF9kZWZjb25maWcKQEAgLTEsMTI1OSArMSwxMzUgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNy1yYzUKLSMgRnJpIE9jdCAxMCAxMTo0OTo0MSAyMDA4Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci0jIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19VSUQxNj15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci0jIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0NMSz15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT01BUD15Ci0jIENPTkZJR19BUkNIX01TTTdYMDBBIGlzIG5vdCBzZXQKLQotIwotIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucwotIwotQ09ORklHX0FSQ0hfT01BUF9PVEc9eQotIyBDT05GSUdfQVJDSF9PTUFQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVAzPXkKLQotIwotIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucwotIwotIyBDT05GSUdfT01BUF9ERUJVR19QT1dFUkRPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0RFQlVHX0NMT0NLRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX01VWD15CiBDT05GSUdfT01BUF9NVVhfREVCVUc9eQotQ09ORklHX09NQVBfTVVYX1dBUk5JTkdTPXkKLUNPTkZJR19PTUFQX01DQlNQPXkKLSMgQ09ORklHX09NQVBfTVBVX1RJTUVSIGlzIG5vdCBzZXQKIENPTkZJR19PTUFQXzMyS19USU1FUj15Ci1DT05GSUdfT01BUF8zMktfVElNRVJfSFo9MTI4CiBDT05GSUdfT01BUF9ETV9USU1FUj15Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIgaXMgbm90IHNldAotQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDM9eQotQ09ORklHX09NQVBfU0VSSUFMX1dBS0U9eQotQ09ORklHX0FSQ0hfT01BUDM0WFg9eQogQ09ORklHX0FSQ0hfT01BUDM0MzA9eQotCi0jCi0jIE9NQVAgQm9hcmQgVHlwZQotIwotIyBDT05GSUdfTUFDSF9PTUFQM19CRUFHTEUgaXMgbm90IHNldAogQ09ORklHX01BQ0hfT01BUF9MRFA9eQotIyBDT05GSUdfTUFDSF9PVkVSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIwotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVXzMydjZLPXkKLUNPTkZJR19DUFVfVjc9eQotQ09ORklHX0NQVV8zMnY3PXkKLUNPTkZJR19DUFVfQUJSVF9FVjc9eQotQ09ORklHX0NQVV9QQUJSVF9JRkFSPXkKLUNPTkZJR19DUFVfQ0FDSEVfVjc9eQotQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKLUNPTkZJR19DUFVfQ09QWV9WNj15Ci1DT05GSUdfQ1BVX1RMQl9WNz15Ci1DT05GSUdfQ1BVX0hBU19BU0lEPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQVJNX1RIVU1CRUUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFTX1RMU19SRUc9eQotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMjgKIENPTkZJR19BRUFCST15Ci1DT05GSUdfT0FCSV9DT01QQVQ9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJyb290PS9kZXYvbmZzIG5mc3Jvb3Q9MTkyLjE2OC4wLjE6L2hvbWUvdXNlci9idWlsZHJvb3QgaXA9MTkyLjE2OC4wLjI6MTkyLjE2OC4wLjE6MTkyLjE2OC4wLjE6MjU1LjI1NS4yNTUuMDp0Z3Q6ZXRoMDpvZmYgcncgY29uc29sZT10dHlTMiwxMTUyMDBuOCIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBGcmVxdWVuY3kgc2NhbGluZwotIwotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAogQ09ORklHX1ZGUD15Ci1DT05GSUdfVkZQdjM9eQotIyBDT05GSUdfTkVPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX01JU0M9eQotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj15Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotQ09ORklHX1hGUk1fTUlHUkFURT15Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX05FVF9LRVk9eQogQ09ORklHX05FVF9LRVlfTUlHUkFURT15CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15CiBDT05GSUdfSVBfUE5QX1JBUlA9eQotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ09OTkVDVE9SPXkKLUNPTkZJR19QUk9DX0VWRU5UUz15Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKIENPTkZJR19TTVNDX1BIWT15Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogQ09ORklHX1NNU0M5MTFYPXkKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CiBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVUNCMTQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTMyCi1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQogQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQogQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CiBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15CiBDT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogQ09ORklHX0kyQ19PTUFQPXkKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfSVNQMTMwMV9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfU1BJPXkKLSMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19TUElfT01BUDI0WFg9eQotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCi0jIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKIENPTkZJR19HUElPX1RXTDQwMzA9eQotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CiBDT05GSUdfVzE9eQotCi0jCi0jIDEtd2lyZSBCdXMgTWFzdGVycwotIwotIyBDT05GSUdfVzFfTUFTVEVSX0RTMjQ4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMV9NQVNURVJfRFMxV00gaXMgbm90IHNldAotIyBDT05GSUdfVzFfTUFTVEVSX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIDEtd2lyZSBTbGF2ZXMKLSMKLSMgQ09ORklHX1cxX1NMQVZFX1RIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxX1NMQVZFX1NNRU0gaXMgbm90IHNldAotIyBDT05GSUdfVzFfU0xBVkVfRFMyNDMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxX1NMQVZFX0RTMjc2MCBpcyBub3Qgc2V0CiBDT05GSUdfUE9XRVJfU1VQUExZPXkKLSMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QREFfUE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkFUVEVSWV9EUzI3NjAgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKIENPTkZJR19XQVRDSERPR19OT1dBWU9VVD15Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiBDT05GSUdfVFdMNDAzMF9DT1JFPXkKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotQ09ORklHX0RBQj15Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KIENPTkZJR19GQj15CiBDT05GSUdfRklSTVdBUkVfRURJRD15Ci0jIENPTkZJR19GQl9EREMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQogQ09ORklHX0ZCX1RJTEVCTElUVElORz15Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKIENPTkZJR19GQl9PTUFQPXkKIENPTkZJR19GQl9PTUFQX0xDRF9WR0E9eQotIyBDT05GSUdfRkJfT01BUF9MQ0RDX0VYVEVSTkFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX09NQVBfQk9PVExPQURFUl9JTklUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9PTUFQX0NPTlNJU1RFTlRfRE1BX1NJWkU9NAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiBDT05GSUdfTENEX0NMQVNTX0RFVklDRT15Ci0jIENPTkZJR19MQ0RfTFRWMzUwUVYgaXMgbm90IHNldAotIyBDT05GSUdfTENEX0lMSTkzMjAgaXMgbm90IHNldAotIyBDT05GSUdfTENEX1RETzI0TSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQ0RfVkdHMjQzMkE0IGlzIG5vdCBzZXQKIENPTkZJR19MQ0RfUExBVEZPUk09eQogQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQotIyBDT05GSUdfQkFDS0xJR0hUX0NPUkdJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19GT05UXzh4OD15Ci1DT05GSUdfRk9OVF84eDE2PXkKIENPTkZJR19MT0dPPXkKLUNPTkZJR19MT0dPX0xJTlVYX01PTk89eQotQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NORD15Ci0jIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0RSSVZFUlM9eQotIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfQVJNPXkKLUNPTkZJR19TTkRfU1BJPXkKLSMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz15Ci1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15Ci0jIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIFZvbHRhZ2UgYW5kIEN1cnJlbnQgcmVndWxhdG9ycwotIwotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQogQ09ORklHX1FVT1RBPXkKLUNPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HPXkKLSMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAogQ09ORklHX1FGTVRfVjI9eQotQ09ORklHX1FVT1RBQ1RMPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WM19BQ0w9eQogQ09ORklHX05GU19WND15CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUIGlzIG5vdCBzZXQKIENPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQ19UMTBESUY9eQotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKIENPTkZJR19MSUJDUkMzMkM9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX29za181OTEyX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9vc2tfNTkxMl9kZWZjb25maWcKaW5kZXggNTU2ZmNjYS4uOTEwNWRlNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX29za181OTEyX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfb3NrXzU5MTJfZGVmY29uZmlnCkBAIC0xLDEwOTAgKzEsODcgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzMtb21hcDEKLSMgRnJpIE5vdiAyMyAxMjoyNDoxMiAyMDA3Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQPXkKLQotIwotIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucwotIwotQ09ORklHX0FSQ0hfT01BUF9PVEc9eQogQ09ORklHX0FSQ0hfT01BUDE9eQotIyBDT05GSUdfQVJDSF9PTUFQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAzIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucwotIwotQ09ORklHX09NQVBfREVCVUdfU1JBTV9QQVRDSD15CiBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1M9eQotIyBDT05GSUdfT01BUF9CT09UX1RBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0dQSU9fU1dJVENIIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX01VWD15Ci0jIENPTkZJR19PTUFQX01VWF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9NVVhfV0FSTklOR1M9eQotIyBDT05GSUdfT01BUF9TVEkgaXMgbm90IHNldAotQ09ORklHX09NQVBfTUNCU1A9eQotIyBDT05GSUdfT01BUF9NTVVfRldLIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTUJPWF9GV0sgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9NUFVfVElNRVIgaXMgbm90IHNldAogQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKLUNPTkZJR19PTUFQXzMyS19USU1FUl9IWj0xMjgKLSMgQ09ORklHX09NQVBfRE1fVElNRVIgaXMgbm90IHNldAotQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDE9eQotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX1NFUklBTF9XQUtFPXkKLSMgQ09ORklHX09NQVBfRFNQIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIENvcmUgVHlwZQotIwotIyBDT05GSUdfQVJDSF9PTUFQNzMwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT01BUDE1WFggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT01BUDE2WFg9eQotCi0jCi0jIE9NQVAgQm9hcmQgVHlwZQotIwotIyBDT05GSUdfTUFDSF9PTUFQX0lOTk9WQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfSDIgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX0gzIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX09NQVBfT1NLPXkKLSMgQ09ORklHX09NQVBfT1NLX01JU1RSQUwgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9OT0tJQTc3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfR0VORVJJQyBpcyBub3Qgc2V0Ci0KLSMKLSMgT01BUCBDUFUgU3BlZWQKLSMKLSMgQ09ORklHX09NQVBfQ0xPQ0tTX1NFVF9CWV9CT09UTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfQVJNXzIxNk1IWiBpcyBub3Qgc2V0CiBDT05GSUdfT01BUF9BUk1fMTkyTUhaPXkKLSMgQ09ORklHX09NQVBfQVJNXzE2OE1IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0FSTV8xMjBNSFogaXMgbm90IHNldAogIyBDT05GSUdfT01BUF9BUk1fNjBNSFogaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9BUk1fMzBNSFogaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9BUk05MjZUPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQotQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKICMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0NBUkQ9eQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUE9eQotQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15Ci1DT05GSUdfUENNQ0lBX0lPQ1RMPXkKLQotIwotIyBQQy1jYXJkIGJyaWRnZXMKLSMKIENPTkZJR19PTUFQX0NGPXkKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMjgKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0xFRFMgaXMgbm90IHNldAotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9Im1lbT0zMk0gY29uc29sZT10dHlTMCwxMTUyMDAgaW5pdHJkPTB4MTA0MDAwMDAsOE0gcm9vdD0vZGV2L3JhbTAgcnciCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKLSMKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwogQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotQ09ORklHX1NVU1BFTkQ9eQotIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPW0KLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX09NQVBfTk9SPXkKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogQ09ORklHX0lERT1tCi1DT05GSUdfQkxLX0RFVl9JREU9bQotCi0jCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPW0KLSMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDUz1tCi0jIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX1BST0NfRlM9eQotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLSMgQ09ORklHX0lERV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX0FSQ0hfT0JTT0xFVEVfSU5JVD15Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogQ09ORklHX1NNQzkxWD15Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAogQ09ORklHX1BQUD15CiBDT05GSUdfUFBQX01VTFRJTElOSz15Ci0jIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9BU1lOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAotIyBDT05GSUdfUFBQT0UgaXMgbm90IHNldAotIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz15Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9PTUFQPXkKLSMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9VQ0IxNDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0NTIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT1tCi1DT05GSUdfSFdfUkFORE9NX09NQVA9bQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAotIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi0jIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfT01BUD15Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU1AxMzAxX09NQVAgaXMgbm90IHNldAotQ09ORklHX1RQUzY1MDEwPXkKLSMgQ09ORklHX1NFTlNPUlNfVExWMzIwQUlDMjMgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT0VYUEFOREVSX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCiBDT05GSUdfRkI9eQotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9EREMgaXMgbm90IHNldAotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9ERUZFUlJFRF9JTz15Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogQ09ORklHX0ZCX09NQVA9eQotIyBDT05GSUdfRkJfT01BUF9MQ0RDX0VYVEVSTkFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX09NQVBfQk9PVExPQURFUl9JTklUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9PTUFQX0NPTlNJU1RFTlRfRE1BX1NJWkU9MgotIyBDT05GSUdfRkJfT01BUF9ETUFfVFVORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAogQ09ORklHX0ZPTlRTPXkKIENPTkZJR19GT05UXzh4OD15Ci0jIENPTkZJR19GT05UXzh4MTYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAogQ09ORklHX0xPR089eQogIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLUNPTkZJR19ISURfREVCVUc9eQotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucwotIwotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0JVUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19DQlVTIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfQVVUT0ZTX0ZTPXkKIENPTkZJR19BVVRPRlM0X0ZTPXkKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPW0KIENPTkZJR19NU0RPU19GUz1tCiBDT05GSUdfVkZBVF9GUz1tCi1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLUNPTkZJR19OTFM9bQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPW0KLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5TVFJVTUVOVEFUSU9OPXkKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9wZXJzZXVzMl83MzBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX3BlcnNldXMyXzczMF9kZWZjb25maWcKaW5kZXggOWExNWQ1ZC4uYWE3NzdlNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX3BlcnNldXMyXzczMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX3BlcnNldXMyXzczMF9kZWZjb25maWcKQEAgLTEsOTI3ICsxLDY1IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjMtcmM2LW9tYXAxCi0jIFR1ZSBTZXAgMTggMTE6NDU6MTIgMjAwNwotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQPXkKLQotIwotIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucwotIwotQ09ORklHX0FSQ0hfT01BUF9PVEc9eQogQ09ORklHX0FSQ0hfT01BUDE9eQotIyBDT05GSUdfQVJDSF9PTUFQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAzIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucwotIwotIyBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9CT09UX1RBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0dQSU9fU1dJVENIIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX01VWD15Ci0jIENPTkZJR19PTUFQX01VWF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9NVVhfV0FSTklOR1M9eQotQ09ORklHX09NQVBfTUNCU1A9eQotIyBDT05GSUdfT01BUF9NTVVfRldLIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTUJPWF9GV0sgaXMgbm90IHNldAotQ09ORklHX09NQVBfTVBVX1RJTUVSPXkKLSMgQ09ORklHX09NQVBfMzJLX1RJTUVSIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQxPXkKLSMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMyBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9TRVJJQUxfV0FLRT15Ci0KLSMKLSMgT01BUCBDb3JlIFR5cGUKLSMKIENPTkZJR19BUkNIX09NQVA3MzA9eQogIyBDT05GSUdfQVJDSF9PTUFQMTVYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAxNlhYIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIEJvYXJkIFR5cGUKLSMKIENPTkZJR19NQUNIX09NQVBfUEVSU0VVUzI9eQotIyBDT05GSUdfTUFDSF9PTUFQX0ZTQU1QTEUgaXMgbm90IHNldAotCi0jCi0jIE9NQVAgQ1BVIFNwZWVkCi0jCi0jIENPTkZJR19PTUFQX0NMT0NLU19TRVRfQllfQk9PVExPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0FSTV8xOTVNSFogaXMgbm90IHNldAogQ09ORklHX09NQVBfQVJNXzE4Mk1IWj15Ci0jIENPTkZJR19PTUFQX0FSTV8xNjhNSFogaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9BUk1fMTIwTUhaIGlzIG5vdCBzZXQKICMgQ09ORklHX09NQVBfQVJNXzYwTUhaIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfQVJNXzMwTUhaIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9BUE9MTE9OX1BMVVMgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9BUk05MjZUPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQotQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKICMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfSFo9MTAwCi0jIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19MRURTPXkKIENPTkZJR19MRURTX0NQVT15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0ibWVtPTMyTSBjb25zb2xlPXR0eVMwLDExNTIwMCBpcD1kaGNwIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCi0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRlAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BNX1NMRUVQPXkKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19TVVNQRU5EPXkKLSMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci0jIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfT01BUF9OT1I9eQotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORD15Ci0jIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9PTUFQPXkKLUNPTkZJR19NVERfTkFORF9JRFM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfU01DOTFYPXkKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX09NQVA9eQotIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPW0KLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCiBDT05GSUdfRkI9eQotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9EREMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfSU1BR0VCTElUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9TWVNfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX1NZU19DT1BZQVJFQT15Ci1DT05GSUdfRkJfU1lTX0lNQUdFQkxJVD15Ci1DT05GSUdfRkJfU1lTX0ZPUFM9eQotQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfT01BUCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfVklSVFVBTD15Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR08gaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCi0jCi0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX09NQVA9eQotCi0jCi0jIERNQSBFbmdpbmUgc3VwcG9ydAotIwotIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIENsaWVudHMKLSMKLQotIwotIyBETUEgRGV2aWNlcwotIwotCi0jCi0jIENCVVMgc3VwcG9ydAotIwotIyBDT05GSUdfQ0JVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKIENPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi0jIENPTkZJR19OTFMgaXMgbm90IHNldAotCi0jCi0jIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgotIwotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX3pvb20yX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF96b29tMl9kZWZjb25maWcKaW5kZXggODgxZmFlYS4uMGE3ZWQ0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX3pvb20yX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfem9vbTJfZGVmY29uZmlnCkBAIC0xLDY2MyArMSw2OSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLW9tYXAxCi0jIEZyaSBKdW4gMTIgMTc6MjU6NDYgMjAwOQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci0jIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfRlJFRVpFUj15Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVA9eQotIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLQotIwotIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucwotIwotQ09ORklHX0FSQ0hfT01BUF9PVEc9eQotIyBDT05GSUdfQVJDSF9PTUFQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVAzPXkKLSMgQ09ORklHX0FSQ0hfT01BUDQgaXMgbm90IHNldAotCi0jCi0jIE9NQVAgRmVhdHVyZSBTZWxlY3Rpb25zCi0jCi0jIENPTkZJR19PTUFQX0RFQlVHX1BPV0VSRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfREVCVUdfQ0xPQ0tET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MgaXMgbm90IHNldAotQ09ORklHX09NQVBfTVVYPXkKIENPTkZJR19PTUFQX01VWF9ERUJVRz15Ci1DT05GSUdfT01BUF9NVVhfV0FSTklOR1M9eQotQ09ORklHX09NQVBfTUNCU1A9eQotIyBDT05GSUdfT01BUF9NQk9YX0ZXSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX01QVV9USU1FUiBpcyBub3Qgc2V0CiBDT05GSUdfT01BUF8zMktfVElNRVI9eQotQ09ORklHX09NQVBfMzJLX1RJTUVSX0haPTEyOAogQ09ORklHX09NQVBfRE1fVElNRVI9eQotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDMgaXMgbm90IHNldAotQ09ORklHX09NQVBfTExfREVCVUdfTk9ORT15Ci1DT05GSUdfQVJDSF9PTUFQMzRYWD15CiBDT05GSUdfQVJDSF9PTUFQMzQzMD15Ci0KLSMKLSMgT01BUCBCb2FyZCBUeXBlCi0jCi0jIENPTkZJR19NQUNIX05PS0lBX1JYNTEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX0xEUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfMzQzMFNEUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVAzRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUDNfQkVBR0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT1ZFUk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQM19QQU5ET1JBIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX09NQVBfWk9PTTI9eQotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVXzMydjZLPXkKLUNPTkZJR19DUFVfVjc9eQotQ09ORklHX0NQVV8zMnY3PXkKLUNPTkZJR19DUFVfQUJSVF9FVjc9eQotQ09ORklHX0NQVV9QQUJSVF9JRkFSPXkKLUNPTkZJR19DUFVfQ0FDSEVfVjc9eQotQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKLUNPTkZJR19DUFVfQ09QWV9WNj15Ci1DT05GSUdfQ1BVX1RMQl9WNz15Ci1DT05GSUdfQ1BVX0hBU19BU0lEPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQVJNX1RIVU1CRUUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFTX1RMU19SRUc9eQotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJNX0VSUkFUQV80MzA5NzMgaXMgbm90IHNldAotIyBDT05GSUdfQVJNX0VSUkFUQV80NTg2OTMgaXMgbm90IHNldAotIyBDT05GSUdfQVJNX0VSUkFUQV80NjAwNzUgaXMgbm90IHNldAotQ09ORklHX0NPTU1PTl9DTEtERVY9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEyOAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci0jIENPTkZJR19BUkNIX0hBU19IT0xFU19NRU1PUllNT0RFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTAKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQotIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L25mcyBuZnNyb290PTE5Mi4xNjguMC4xOi9ob21lL3VzZXIvYnVpbGRyb290IGlwPTE5Mi4xNjguMC4yOjE5Mi4xNjguMC4xOjE5Mi4xNjguMC4xOjI1NS4yNTUuMjU1LjA6dGd0OmV0aDA6b2ZmIHJ3IGNvbnNvbGU9dHR5UzIsMTE1MjAwbjgiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAogQ09ORklHX1ZGUD15Ci1DT05GSUdfVkZQdjM9eQotIyBDT05GSUdfTkVPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz15Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCiBDT05GSUdfUE09eQogQ09ORklHX1BNX0RFQlVHPXkKIENPTkZJR19QTV9WRVJCT1NFPXkKLUNPTkZJR19DQU5fUE1fVFJBQ0U9eQotQ09ORklHX1BNX1NMRUVQPXkKLUNPTkZJR19TVVNQRU5EPXkKLSMgQ09ORklHX1BNX1RFU1RfU1VTUEVORCBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKLSMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAogQ09ORklHX1BNX1JVTlRJTUU9eQotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj15Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotQ09ORklHX1hGUk1fTUlHUkFURT15Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX05FVF9LRVk9eQogQ09ORklHX05FVF9LRVlfTUlHUkFURT15CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15CiBDT05GSUdfSVBfUE5QX1JBUlA9eQotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogQ09ORklHX0NPTk5FQ1RPUj15Ci1DT05GSUdfUFJPQ19FVkVOVFM9eQotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX1NUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfU01TQ19QSFk9eQotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKIENPTkZJR19TTVNDOTExWD15Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKIENPTkZJR19LRVlCT0FSRF9UV0w0MDMwPXkKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQogQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDY9eQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjEwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0zMgpAQCAtNjY3LDg3OSArNzMsNzEgQEAKIENPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQogQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQogQ09ORklHX1NFUklBTF84MjUwX1JTQT15Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogQ09ORklHX0kyQ19PTUFQPXkKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfTUFEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX1BPV0VST0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfU1BJPXkKLSMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19TUElfT01BUDI0WFg9eQotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCi0jIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAogQ09ORklHX0dQSU9fVFdMNDAzMD15Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKIENPTkZJR19XMT15Ci1DT05GSUdfVzFfQ09OPXkKLQotIwotIyAxLXdpcmUgQnVzIE1hc3RlcnMKLSMKLSMgQ09ORklHX1cxX01BU1RFUl9EUzI0OTAgaXMgbm90IHNldAotIyBDT05GSUdfVzFfTUFTVEVSX0RTMjQ4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMV9NQVNURVJfRFMxV00gaXMgbm90IHNldAotIyBDT05GSUdfVzFfTUFTVEVSX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSERRX01BU1RFUl9PTUFQIGlzIG5vdCBzZXQKLQotIwotIyAxLXdpcmUgU2xhdmVzCi0jCi0jIENPTkZJR19XMV9TTEFWRV9USEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMV9TTEFWRV9TTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxX1NMQVZFX0RTMjQzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMV9TTEFWRV9EUzI0MzMgaXMgbm90IHNldAotIyBDT05GSUdfVzFfU0xBVkVfRFMyNzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxX1NMQVZFX0JRMjcwMDAgaXMgbm90IHNldAogQ09ORklHX1BPV0VSX1NVUFBMWT15Ci0jIENPTkZJR19QT1dFUl9TVVBQTFlfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUERBX1BPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBVFRFUllfRFMyNzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBVFRFUllfQlEyN3gwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKIENPTkZJR19XQVRDSERPR19OT1dBWU9VVD15Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKIENPTkZJR19UV0w0MDMwX0NPUkU9eQotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi1DT05GSUdfREFCPXkKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19SRUdVTEFUT1I9eQorQ09ORklHX1JFR1VMQVRPUl9UV0w0MDMwPXkKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfU09VTkQ9eQotIyBDT05GSUdfU09VTkRfT1NTX0NPUkUgaXMgbm90IHNldAogQ09ORklHX1NORD15Ci0jIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0RSSVZFUlM9eQotIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfQVJNPXkKLUNPTkZJR19TTkRfU1BJPXkKLUNPTkZJR19TTkRfVVNCPXkKLSMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1VTQl9DQUlBUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLSMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUkFHT05SSVNFX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfTU9OVEVSRVkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9QQU5USEVSTE9SRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUEVUQUxZTlggaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfREVCVUc9eQogQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwotIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NVU1BFTkQ9eQotQ09ORklHX1VTQl9PVEc9eQogIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTVVTQl9IRFJDPXkKLUNPTkZJR19VU0JfTVVTQl9TT0M9eQotCi0jCi0jIE9NQVAgMzQzeCBoaWdoIHNwZWVkIFVTQiBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfTVVTQl9IT1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX1BFUklQSEVSQUwgaXMgbm90IHNldAogQ09ORklHX1VTQl9NVVNCX09URz15CiBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkM9eQotQ09ORklHX1VTQl9NVVNCX0hEUkNfSENEPXkKLSMgQ09ORklHX01VU0JfUElPX09OTFkgaXMgbm90IHNldAotQ09ORklHX1VTQl9JTlZFTlRSQV9ETUE9eQotIyBDT05GSUdfVVNCX1RJX0NQUElfRE1BIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTVVTQl9ERUJVRz15Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotCi0jCi0jIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCi0jCi0jIENPTkZJR19VU0JfU1RPUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVQ9eQogQ09ORklHX1VTQl9HQURHRVRfREVCVUc9eQogQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVM9eQotQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTIKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKLUNPTkZJR19VU0JfWkVSTz15Ci0jIENPTkZJR19VU0JfWkVST19ITlBURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLUNPTkZJR19VU0JfT1RHX1VUSUxTPXkKLSMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAotIyBDT05GSUdfSVNQMTMwMV9PTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfWkVSTz1tCiBDT05GSUdfVFdMNDAzMF9VU0I9eQotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKLSMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX09NQVBfSFM9eQotIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RXTDQwMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19SRUdVTEFUT1I9eQotIyBDT05GSUdfUkVHVUxBVE9SX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKLUNPTkZJR19SRUdVTEFUT1JfVFdMNDAzMD15Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0JVUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19DQlVTIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQotIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQogQ09ORklHX1FVT1RBPXkKLSMgQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HPXkKLUNPTkZJR19RVU9UQV9UUkVFPXkKLSMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAogQ09ORklHX1FGTVRfVjI9eQotQ09ORklHX1FVT1RBQ1RMPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WM19BQ0w9eQogQ09ORklHX05GU19WND15CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJNX1VOV0lORD15Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTEw9eQotIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj1tCi0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz15Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQ19UMTBESUY9eQotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKIENPTkZJR19MSUJDUkMzMkM9eQotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfem9vbTNfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX3pvb20zX2RlZmNvbmZpZwppbmRleCA1ZTU1YjU1Li5mODA4NWIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfem9vbTNfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF96b29tM19kZWZjb25maWcKQEAgLTEsNjgyICsxLDY5IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM2Ci0jIFRodSBOb3YgMTIgMTM6MDQ6MDcgMjAwOQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0FSQ0hfSEFTX0NQVUZSRVE9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci0jIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfRlJFRVpFUj15Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT01BUD15Ci0jIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAotCi0jCi0jIFRJIE9NQVAgSW1wbGVtZW50YXRpb25zCi0jCi1DT05GSUdfQVJDSF9PTUFQX09URz15Ci0jIENPTkZJR19BUkNIX09NQVAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUDIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT01BUDM9eQotIyBDT05GSUdfQVJDSF9PTUFQNCBpcyBub3Qgc2V0Ci0KLSMKLSMgT01BUCBGZWF0dXJlIFNlbGVjdGlvbnMKLSMKLSMgQ09ORklHX09NQVBfREVCVUdfUE9XRVJET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9ERUJVR19DTE9DS0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUyBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9NVVg9eQogQ09ORklHX09NQVBfTVVYX0RFQlVHPXkKLUNPTkZJR19PTUFQX01VWF9XQVJOSU5HUz15Ci1DT05GSUdfT01BUF9NQ0JTUD15Ci0jIENPTkZJR19PTUFQX01CT1hfRldLIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTVBVX1RJTUVSIGlzIG5vdCBzZXQKIENPTkZJR19PTUFQXzMyS19USU1FUj15Ci1DT05GSUdfT01BUF8zMktfVElNRVJfSFo9MTI4CiBDT05GSUdfT01BUF9ETV9USU1FUj15Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMyBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9MTF9ERUJVR19OT05FPXkKLSMgQ09ORklHX09NQVBfUE1fTk9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9QTV9OT09QPXkKLUNPTkZJR19BUkNIX09NQVAzNFhYPXkKIENPTkZJR19BUkNIX09NQVAzNDMwPXkKLQotIwotIyBPTUFQIEJvYXJkIFR5cGUKLSMKLSMgQ09ORklHX01BQ0hfT01BUDNfQkVBR0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9MRFAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PVkVSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVAzRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUDNfUEFORE9SQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfMzQzMFNEUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX05PS0lBX1JYNTEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX1pPT00yIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ01fVDM1IGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX09NQVBfWk9PTTM9eQotIyBDT05GSUdfTUFDSF9PTUFQXzM2MzBTRFAgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVXzMydjZLPXkKLUNPTkZJR19DUFVfVjc9eQotQ09ORklHX0NQVV8zMnY3PXkKLUNPTkZJR19DUFVfQUJSVF9FVjc9eQotQ09ORklHX0NQVV9QQUJSVF9WNz15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y3PXkKLUNPTkZJR19DUFVfQ0FDSEVfVklQVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjY9eQotQ09ORklHX0NQVV9UTEJfVjc9eQotQ09ORklHX0NQVV9IQVNfQVNJRD15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0FSTV9USFVNQkVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAotQ09ORklHX0hBU19UTFNfUkVHPXkKLUNPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NgotIyBDT05GSUdfQVJNX0VSUkFUQV80MzA5NzMgaXMgbm90IHNldAotIyBDT05GSUdfQVJNX0VSUkFUQV80NTg2OTMgaXMgbm90IHNldAotIyBDT05GSUdfQVJNX0VSUkFUQV80NjAwNzUgaXMgbm90IHNldAotQ09ORklHX0NPTU1PTl9DTEtERVY9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTI4Ci0jIENPTkZJR19USFVNQjJfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19BRUFCST15Ci1DT05GSUdfT0FCSV9DT01QQVQ9eQotIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci0jIENPTkZJR19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0jIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9uZnMgbmZzcm9vdD0xOTIuMTY4LjAuMTovaG9tZS91c2VyL2J1aWxkcm9vdCBpcD0xOTIuMTY4LjAuMjoxOTIuMTY4LjAuMToxOTIuMTY4LjAuMToyNTUuMjU1LjI1NS4wOnRndDpldGgwOm9mZiBydyBjb25zb2xlPXR0eVMyLDExNTIwMG44IgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKIENPTkZJR19WRlA9eQotQ09ORklHX1ZGUHYzPXkKLSMgQ09ORklHX05FT04gaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX01JU0M9eQotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwogQ09ORklHX1BNPXkKIENPTkZJR19QTV9ERUJVRz15CiBDT05GSUdfUE1fVkVSQk9TRT15Ci1DT05GSUdfQ0FOX1BNX1RSQUNFPXkKLUNPTkZJR19QTV9TTEVFUD15Ci1DT05GSUdfU1VTUEVORD15Ci0jIENPTkZJR19QTV9URVNUX1NVU1BFTkQgaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15Ci0jIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19QTV9SVU5USU1FPXkKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9eQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLUNPTkZJR19YRlJNX01JR1JBVEU9eQotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPXkKIENPTkZJR19ORVRfS0VZX01JR1JBVEU9eQogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQogQ09ORklHX0lQX1BOUF9SQVJQPXkKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIENPTkZJR19DT05ORUNUT1I9eQotQ09ORklHX1BST0NfRVZFTlRTPXkKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTE2Mzg0Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAogQ09ORklHX1NNU0NfUEhZPXkKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiBDT05GSUdfU01TQzkxMVg9eQotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQogQ09ORklHX0tFWUJPQVJEX1RXTDQwMzA9eQogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CiBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FRVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01DUzUwMDAgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1c5MFg5MDAgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKQEAgLTY4Niw5MjUgKzczLDgzIEBACiBDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKIENPTkZJR19TRVJJQUxfODI1MF9SU0E9eQotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfT01BUD15Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKIENPTkZJR19TUEk9eQotIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TUElfTUFTVEVSPXkKLQotIwotIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAogQ09ORklHX1NQSV9PTUFQMjRYWD15Ci0KLSMKLSMgU1BJIFByb3RvY29sIE1hc3RlcnMKLSMKLSMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CiBDT05GSUdfR1BJT19UV0w0MDMwPXkKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKLQotIwotIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgotIwogQ09ORklHX1cxPXkKLUNPTkZJR19XMV9DT049eQotCi0jCi0jIDEtd2lyZSBCdXMgTWFzdGVycwotIwotIyBDT05GSUdfVzFfTUFTVEVSX0RTMjQ5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMV9NQVNURVJfRFMyNDgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxX01BU1RFUl9EUzFXTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMV9NQVNURVJfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRFFfTUFTVEVSX09NQVAgaXMgbm90IHNldAotCi0jCi0jIDEtd2lyZSBTbGF2ZXMKLSMKLSMgQ09ORklHX1cxX1NMQVZFX1RIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxX1NMQVZFX1NNRU0gaXMgbm90IHNldAotIyBDT05GSUdfVzFfU0xBVkVfRFMyNDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxX1NMQVZFX0RTMjQzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMV9TTEFWRV9EUzI3NjAgaXMgbm90IHNldAotIyBDT05GSUdfVzFfU0xBVkVfQlEyNzAwMCBpcyBub3Qgc2V0CiBDT05GSUdfUE9XRVJfU1VQUExZPXkKLSMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QREFfUE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkFUVEVSWV9EUzI3NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkFUVEVSWV9EUzI3ODIgaXMgbm90IHNldAotIyBDT05GSUdfQkFUVEVSWV9CUTI3eDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBVFRFUllfTUFYMTcwNDAgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiBDT05GSUdfVFdMNDAzMF9DT1JFPXkKLSMgQ09ORklHX1RXTDQwMzBfUE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKIENPTkZJR19SRUdVTEFUT1I9eQotIyBDT05GSUdfUkVHVUxBVE9SX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9VU0VSU1BBQ0VfQ09OU1VNRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX01BWDE1ODYgaXMgbm90IHNldAogQ09ORklHX1JFR1VMQVRPUl9UV0w0MDMwPXkKLSMgQ09ORklHX1JFR1VMQVRPUl9MUDM5NzEgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9UUFM2NTA3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX1NPVU5EPXkKLSMgQ09ORklHX1NPVU5EX09TU19DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19TTkQ9eQotQ09ORklHX1NORF9USU1FUj1tCi1DT05GSUdfU05EX1BDTT1tCi0jIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfRFJJVkVSUz15Ci0jIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAotQ09ORklHX1NORF9BUk09eQotQ09ORklHX1NORF9TUEk9eQotQ09ORklHX1NORF9VU0I9eQotIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi0jIENPTkZJR19ISURfQTRURUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQkVMS0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9DSEVSUlkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0NZUFJFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9NT05URVJFWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BBTlRIRVJMT1JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9QRVRBTFlOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU0FNU1VORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU09OWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU1VOUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15CiBDT05GSUdfVVNCX0RFQlVHPXkKIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVNQRU5EPXkKLUNPTkZJR19VU0JfT1RHPXkKICMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15Ci0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9NVVNCX0hEUkM9eQotQ09ORklHX1VTQl9NVVNCX1NPQz15Ci0KLSMKLSMgT01BUCAzNDN4IGhpZ2ggc3BlZWQgVVNCIHN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9NVVNCX0hPU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfUEVSSVBIRVJBTCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01VU0JfT1RHPXkKIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQz15Ci1DT05GSUdfVVNCX01VU0JfSERSQ19IQ0Q9eQotIyBDT05GSUdfTVVTQl9QSU9fT05MWSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0lOVkVOVFJBX0RNQT15Ci0jIENPTkZJR19VU0JfVElfQ1BQSV9ETUEgaXMgbm90IHNldAogQ09ORklHX1VTQl9NVVNCX0RFQlVHPXkKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0KLSMKLSMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KLSMKIENPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogQ09ORklHX1VTQl9URVNUPW0KLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUPW0KIENPTkZJR19VU0JfR0FER0VUX0RFQlVHPXkKIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTPXkKLUNPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCi1DT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQogQ09ORklHX1VTQl9aRVJPPW0KLSMgQ09ORklHX1VTQl9aRVJPX0hOUFRFU1QgaXMgbm90IHNldAogQ09ORklHX1VTQl9BVURJTz1tCiBDT05GSUdfVVNCX0VUSD1tCi1DT05GSUdfVVNCX0VUSF9STkRJUz15Ci0jIENPTkZJR19VU0JfRVRIX0VFTSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVEZTPW0KIENPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KLSMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dfU0VSSUFMPW0KLSMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURT1tCi0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi1DT05GSUdfVVNCX09UR19VVElMUz15Ci0jIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTUDEzMDFfT01BUCBpcyBub3Qgc2V0CiBDT05GSUdfVFdMNDAzMF9VU0I9eQotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUU9eQotCi0jCi0jIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz15Ci1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15Ci0jIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX09NQVAgaXMgbm90IHNldAogQ09ORklHX01NQ19PTUFQX0hTPXkKLSMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX1RXTDQwMzA9eQotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBDQlVTIHN1cHBvcnQKLSMKLSMgQ09ORklHX0NCVVMgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQogQ09ORklHX1FVT1RBPXkKLSMgQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HPXkKLUNPTkZJR19RVU9UQV9UUkVFPXkKLSMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAogQ09ORklHX1FGTVRfVjI9eQotQ09ORklHX1FVT1RBQ1RMPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiBDT05GSUdfTkZTX1YzX0FDTD15CiBDT05GSUdfTkZTX1Y0PXkKLSMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19BQ0xfU1VQUE9SVD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAotIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotQ09ORklHX0ZUUkFDRT15Ci0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQotIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJNX1VOV0lORD15Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotQ09ORklHX0NSWVBUT19DUkMzMkM9eQotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD15Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDX1QxMERJRj15Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogQ09ORklHX0xJQkNSQzMyQz15Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb25lYXJtX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb25lYXJtX2RlZmNvbmZpZwppbmRleCAxOWI5MWRlLi4xNTc5ODU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29uZWFybV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbmVhcm1fZGVmY29uZmlnCkBAIC0xLDExMzMgKzEsODAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMC1yYzEKLSMgU2F0IERlYyAxNiAwNjowNToxOCAyMDA2Ci0jCi1DT05GSUdfQVJNPXkKLSMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCi1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0FUOTE9eQotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLQotIwotIyBBdG1lbCBBVDkxIFN5c3RlbS1vbi1DaGlwCi0jCi1DT05GSUdfQVJDSF9BVDkxUk05MjAwPXkKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSBpcyBub3Qgc2V0Ci0KLSMKLSMgQVQ5MVJNOTIwMCBCb2FyZCBUeXBlCi0jCiBDT05GSUdfTUFDSF9PTkVBUk09eQotIyBDT05GSUdfQVJDSF9BVDkxUk05MjAwREsgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9BVDkxUk05MjAwRUsgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DU0IzMzcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DU0I2MzcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DQVJNRVZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQVRFQjkyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9LQjkyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9LQUZBIGlzIG5vdCBzZXQKLQotIwotIyBBVDkxIEJvYXJkIE9wdGlvbnMKLSMKLQotIwotIyBBVDkxIEZlYXR1cmUgU2VsZWN0aW9ucwotIwogQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUz15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTIwVD15Ci1DT05GSUdfQ1BVXzMydjRUPXkKLUNPTkZJR19DUFVfQUJSVF9FVjRUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVjRXVD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwogIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwogQ09ORklHX1BDQ0FSRD15Ci0jIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQT15Ci1DT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKLUNPTkZJR19QQ01DSUFfSU9DVEw9eQotCi0jCi0jIFBDLWNhcmQgYnJpZGdlcwotIwogQ09ORklHX0FUOTFfQ0Y9eQotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCi0jIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19MRURTPXkKLUNPTkZJR19MRURTX1RJTUVSPXkKLSMgQ09ORklHX0xFRFNfQ1BVIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMCByb290PS9kZXYvbmZzIGlwPWJvb3RwIG1lbT02NE0iCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNj15Ci0jIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2X1NJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9KRURFQ1BST0JFPXkKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVA9eQotQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDAKLUNPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MAotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9JTVBBNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX05CRD15Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCi0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwotIwotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIwogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKIENPTkZJR19BUk1fQVQ5MV9FVEhFUj15Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCi0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX0FUTUVMPXkKIENPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfQVRNRUxfVFRZQVQgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIwotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotQ09ORklHX1dBVENIRE9HPXkKLUNPTkZJR19XQVRDSERPR19OT1dBWU9VVD15Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX0FUOTFSTTkyMDBfV0FUQ0hET0c9eQotCi0jCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCi0jCi0jIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi0jIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkNfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cwotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIwotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjIGRldmljZXMKLSMKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRldmljZXMKLSMKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZHJpdmVycwotIwotCi0jCi0jIExFRCBUcmlnZ2VycwotIwotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0KLSMKLSMgSElEIERldmljZXMKLSMKLUNPTkZJR19ISUQ9eQotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HPXkKK0NPTkZJR19XQVRDSERPR19OT1dBWU9VVD15CitDT05GSUdfQVQ5MVJNOTIwMF9XQVRDSERPRz15CisjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQogQ09ORklHX1VTQl9ERUJVRz15Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci0jIENPTkZJR19VU0JfQkFORFdJRFRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVMVElUSFJFQURfUFJPQkUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0hDRD15Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLSMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XQUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIworQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX0dBREdFVD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9BVDkxPXkKLUNPTkZJR19VU0JfQVQ5MT15Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19NTUNfQkxPQ0s9eQotIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1RJRk1fU0QgaXMgbm90IHNldAotCi0jCi0jIFJlYWwgVGltZSBDbG9jawotIwotQ09ORklHX1JUQ19MSUI9eQotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiBDT05GSUdfTkZTX1YzX0FDTD15Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19BQ0xfU1VQUE9SVD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUldTRU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQotIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSU9NQVBfQ09QWT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29yaW9uNXhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vcmlvbjV4X2RlZmNvbmZpZwppbmRleCBlZTFlYmQ4Li40MzkzMjNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29yaW9uNXhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb3Jpb241eF9kZWZjb25maWcKQEAgLTEsMjI1ICsxLDE2IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmM2Ci0jIFRodSBGZWIgIDQgMjM6MzA6MDAgMjAxMAotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQotQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15Ci1DT05GSUdfS0VSTkVMX0daSVA9eQotIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci1DT05GSUdfS0FMTFNZTVNfQUxMPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKICMgQ09ORklHX1NMVUJfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQotQ09ORklHX1RSQUNFUE9JTlRTPXkKIENPTkZJR19PUFJPRklMRT15Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfS1BST0JFUz15Ci1DT05GSUdfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ET1ZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PUklPTjVYPXkKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1M1UEMxWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVTg1MDAgaXMgbm90IHNldAotCi0jCi0jIE9yaW9uIEltcGxlbWVudGF0aW9ucwotIwogQ09ORklHX01BQ0hfREI4OEY1MjgxPXkKIENPTkZJR19NQUNIX1JEODhGNTE4Mj15CiBDT05GSUdfTUFDSF9LVVJPQk9YX1BSTz15CkBAIC0yNDIsMTYzMSArMzMsMTQ3IEBACiBDT05GSUdfTUFDSF9SRDg4RjUxODFMX0dFPXkKIENPTkZJR19NQUNIX1JEODhGNTE4MUxfRlhPPXkKIENPTkZJR19NQUNIX1JEODhGNjE4M0FQX0dFPXkKLUNPTkZJR19QTEFUX09SSU9OPXkKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9GRVJPQ0VPTj15Ci1DT05GSUdfQ1BVX0ZFUk9DRU9OX09MRF9JRD15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQotQ09ORklHX0NQVV9QQUJSVF9MRUdBQ1k9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9GRVJPQ0VPTj15Ci1DT05GSUdfQ1BVX1RMQl9GRVJPQ0VPTj15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD01Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAotIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15Ci1DT05GSUdfT0FCSV9DT01QQVQ9eQotIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz05OTk5OTkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTAKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfTEVEUz15CiBDT05GSUdfTEVEU19DUFU9eQotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLUNPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9IiIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCi0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CiBDT05GSUdfVkZQPXkKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVU1BFTkQgaXMgbm90IHNldAotIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci1DT05GSUdfSU5FVF9MUk89eQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAogQ09ORklHX05FVF9EU0E9eQotQ09ORklHX05FVF9EU0FfVEFHX0RTQT15Ci1DT05GSUdfTkVUX0RTQV9UQUdfRURTQT15Ci0jIENPTkZJR19ORVRfRFNBX1RBR19UUkFJTEVSIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRFNBX01WODhFNlhYWD15Ci0jIENPTkZJR19ORVRfRFNBX01WODhFNjA2MCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0RTQV9NVjg4RTZYWFhfTkVFRF9QUFU9eQogQ09ORklHX05FVF9EU0FfTVY4OEU2MTMxPXkKIENPTkZJR19ORVRfRFNBX01WODhFNjEyM182MV82NT15Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKIENPTkZJR19ORVRfUEtUR0VOPW0KLSMgQ09ORklHX05FVF9UQ1BQUk9CRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQogIyBDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfSkVERUNQUk9CRT15Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15CiBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15Ci1DT05GSUdfTVREX0NGSV9OT1NXQVA9eQotIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfR0VPTUVUUlk9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci0jIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9JTVBBNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORD15CiBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFPXkKLSMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9HUElPIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX1BMQVRGT1JNPXkKLSMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX09SSU9OPXkKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1NSPW0KLSMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPW0KLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUE04MDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQotIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15Ci1DT05GSUdfU0FUQV9QTVA9eQotIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAotQ09ORklHX0FUQV9TRkY9eQotIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAogQ09ORklHX1NBVEFfTVY9eQotIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9UT1NISUJBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKIENPTkZJR19NQVJWRUxMX1BIWT15Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01JST15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogQ09ORklHX05FVF9QQ0k9eQotIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAotIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRUFMTlggaXMgbm90IHNldAotIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAotIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDOTQyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiBDT05GSUdfTVY2NDNYWF9FVEg9eQotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci0jIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfR1BJTz15Ci0jIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTE04MzIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0xNgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009bQogQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNPW0KLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKICMgQ09ORklHX0kyQ19DT01QQVQgaXMgbm90IHNldAogQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVY2NFhYWD15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dQSU9fU1lTRlM9eQotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19BRFA1NTg4IGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX0NTNTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTczIGlzIG5vdCBzZXQKIENPTkZJR19TRU5TT1JTX0xNNzU9eQotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NIVDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FNQzY4MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MSVMzX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEXzg4UE04NjA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQVJCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLSMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRD15CiBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQogQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKLSMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1BSSU5URVI9eQotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0KLSMKLSMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KLSMKIENPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQj15CiBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOT15CiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1PXkKIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVD15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VMUEkgaXMgbm90IHNldAotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0Ci0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CiBDT05GSUdfTEVEU19DTEFTUz15Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLSMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19HUElPPXkKLUNPTkZJR19MRURTX0dQSU9fUExBVEZPUk09eQotIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfTFQzNTkzIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKIENPTkZJR19MRURTX1RSSUdHRVJTPXkKIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQotIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049eQotCi0jCi0jIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKLSMKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCiBDT05GSUdfUlRDX0RSVl9EUzEzMDc9eQotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX1JTNUMzNzI9eQotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfUENGODU2Mz15Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfTTQxVDgwPXkKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwX1dEVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX1MzNTM5MEE9eQotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9NNDhUODY9eQotIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwogQ09ORklHX0RNQURFVklDRVM9eQotCi0jCi0jIERNQSBEZXZpY2VzCi0jCiBDT05GSUdfTVZfWE9SPXkKLUNPTkZJR19ETUFfRU5HSU5FPXkKLQotIwotIyBETUEgQ2xpZW50cwotIwotIyBDT05GSUdfTkVUX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BU1lOQ19UWF9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfRE1BVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfRVhUNF9GUz1tCi1DT05GSUdfRVhUNF9GU19YQVRUUj15Ci0jIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0pCRDI9bQotIyBDT05GSUdfSkJEMl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT1tCi0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwogQ09ORklHX0lTTzk2NjBfRlM9bQogQ09ORklHX0pPTElFVD15Ci0jIENPTkZJR19aSVNPRlMgaXMgbm90IHNldAogQ09ORklHX1VERl9GUz1tCi1DT05GSUdfVURGX05MUz15Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQogQ09ORklHX0JTRF9ESVNLTEFCRUw9eQotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAogQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15CiBDT05GSUdfTkxTX0lTTzg4NTlfMj15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotQ09ORklHX1NDSEVEU1RBVFM9eQotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfUFJFRU1QVD15Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFDS1RSQUNFPXkKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUFJPQkVTX1NBTklUWV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfTEFURU5DWVRPUD15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAotQ09ORklHX05PUF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19SSU5HX0JVRkZFUj15Ci1DT05GSUdfRVZFTlRfVFJBQ0lORz15Ci1DT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKLUNPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKLUNPTkZJR19UUkFDSU5HPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJNX1VOV0lORD15CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DX0VUTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCi1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9bQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwogQ09ORklHX0NSWVBUT19DQkM9bQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLUNPTkZJR19DUllQVE9fQUVTPXkKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQogQ09ORklHX0NSWVBUT19ERVZfTVZfQ0VTQT15Ci0jIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci1DT05GSUdfQklOQVJZX1BSSU5URj15Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotQ09ORklHX0NSQzE2PW0KIENPTkZJR19DUkNfVDEwRElGPXkKLUNPTkZJR19DUkNfSVRVX1Q9bQotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vdmVyb19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL292ZXJvX2RlZmNvbmZpZwppbmRleCBiZjA2ZDM2Li42ZmExYjE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL292ZXJvX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL292ZXJvX2RlZmNvbmZpZwpAQCAtMSw0MjYgKzEsNTcgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNy1yYzgKLSMgRnJpIE9jdCAgMyAxMTo1MDozNCAyMDA4Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX09QUk9GSUxFX0FSTVY3PXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfVUlEMTY9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfT1BST0ZJTEU9eQotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci0jIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0NMSz15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotQ09ORklHX0tNT0Q9eQotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkQ9eQotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfTFNGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT01BUD15Ci0jIENPTkZJR19BUkNIX01TTTdYMDBBIGlzIG5vdCBzZXQKLQotIwotIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucwotIwotQ09ORklHX0FSQ0hfT01BUF9PVEc9eQotIyBDT05GSUdfQVJDSF9PTUFQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVAzPXkKLQotIwotIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucwotIwotIyBDT05GSUdfT01BUF9ERUJVR19QT1dFUkRPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0RFQlVHX0NMT0NLRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NQVBfTVVYIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX01DQlNQPXkKLSMgQ09ORklHX09NQVBfTVBVX1RJTUVSIGlzIG5vdCBzZXQKIENPTkZJR19PTUFQXzMyS19USU1FUj15Ci1DT05GSUdfT01BUF8zMktfVElNRVJfSFo9MTI4CiBDT05GSUdfT01BUF9ETV9USU1FUj15Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIgaXMgbm90IHNldAotQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDM9eQotQ09ORklHX0FSQ0hfT01BUDM0WFg9eQogQ09ORklHX0FSQ0hfT01BUDM0MzA9eQotCi0jCi0jIE9NQVAgQm9hcmQgVHlwZQotIwotIyBDT05GSUdfTUFDSF9PTUFQM19CRUFHTEUgaXMgbm90IHNldAogQ09ORklHX01BQ0hfT1ZFUk89eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV8zMnY2Sz15Ci1DT05GSUdfQ1BVX1Y3PXkKLUNPTkZJR19DUFVfMzJ2Nz15Ci1DT05GSUdfQ1BVX0FCUlRfRVY3PXkKLUNPTkZJR19DUFVfUEFCUlRfSUZBUj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y3PXkKLUNPTkZJR19DUFVfQ0FDSEVfVklQVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjY9eQotQ09ORklHX0NQVV9UTEJfVjc9eQotQ09ORklHX0NQVV9IQVNfQVNJRD15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKIENPTkZJR19BUk1fVEhVTUJFRT15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVNfVExTX1JFRz15Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTI4CiBDT05GSUdfQUVBQkk9eQogIyBDT05GSUdfT0FCSV9DT01QQVQgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfTEVEUz15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0iIGRlYnVnICIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0tFWEVDPXkKLUNPTkZJR19BVEFHU19QUk9DPXkKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwogQ09ORklHX0NQVV9GUkVRPXkKLUNPTkZJR19DUFVfRlJFUV9UQUJMRT15Ci0jIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfU1RBVD15CiBDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTPXkKLUNPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRT15Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfR09WX1BFUkZPUk1BTkNFPXkKLSMgQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAogQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9eQogQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD15Ci0jIENPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19WRlA9eQotQ09ORklHX1ZGUHYzPXkKIENPTkZJR19ORU9OPXkKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKIENPTkZJR19CSU5GTVRfQU9VVD1tCiBDT05GSUdfQklORk1UX01JU0M9eQotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0tFWT15Ci0jIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15CiBDT05GSUdfSVBfUE5QX1JBUlA9eQotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNj1tCi0jIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQotIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2X1NJVD1tCi1DT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15Ci0jIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAogQ09ORklHX0JUPXkKIENPTkZJR19CVF9MMkNBUD15CiBDT05GSUdfQlRfU0NPPXkKQEAgLTQzMCwyMDkgKzYxLDM0IEBACiBDT05GSUdfQlRfQk5FUF9NQ19GSUxURVI9eQogQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSPXkKIENPTkZJR19CVF9ISURQPXkKLQotIwotIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKLSMKLUNPTkZJR19CVF9IQ0lVU0I9bQotQ09ORklHX0JUX0hDSVVTQl9TQ089eQotIyBDT05GSUdfQlRfSENJQlRVU0IgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQlRTRElPIGlzIG5vdCBzZXQKIENPTkZJR19CVF9IQ0lVQVJUPXkKIENPTkZJR19CVF9IQ0lVQVJUX0g0PXkKIENPTkZJR19CVF9IQ0lVQVJUX0JDU1A9eQotIyBDT05GSUdfQlRfSENJVUFSVF9MTCBpcyBub3Qgc2V0CiBDT05GSUdfQlRfSENJQkNNMjAzWD15CiBDT05GSUdfQlRfSENJQlBBMTBYPXkKLSMgQ09ORklHX0JUX0hDSUJGVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSVZIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCiBDT05GSUdfQ0ZHODAyMTE9eQotQ09ORklHX05MODAyMTE9eQotQ09ORklHX1dJUkVMRVNTX0VYVD15Ci1DT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKIENPTkZJR19NQUM4MDIxMT15Ci0KLSMKLSMgUmF0ZSBjb250cm9sIGFsZ29yaXRobSBzZWxlY3Rpb24KLSMKIENPTkZJR19NQUM4MDIxMV9SQ19QSUQ9eQogQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfUElEPXkKLUNPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUPSJwaWQiCi0jIENPTkZJR19NQUM4MDIxMV9NRVNIIGlzIG5vdCBzZXQKIENPTkZJR19NQUM4MDIxMV9MRURTPXkKLSMgQ09ORklHX01BQzgwMjExX0RFQlVHRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTFfREVCVUdfTUVOVSBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExPXkKLSMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD15Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9eQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPXkKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAotIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTE2Mzg0Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfQ0RST01fUEtUQ0RWRD1tCi1DT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKLSMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLUNPTkZJR19FRVBST01fOTNDWDY9bQotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKK0NPTkZJR19FRVBST01fTEVHQUNZPXkKIENPTkZJR19SQUlEX0FUVFJTPW0KIENPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9bQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAogQ09ORklHX01EPXkKIENPTkZJR19CTEtfREVWX01EPW0KIENPTkZJR19NRF9MSU5FQVI9bQpAQCAtNjQwLDY0ICs5NiwzNiBAQAogQ09ORklHX01EX1JBSUQxPW0KIENPTkZJR19NRF9SQUlEMTA9bQogQ09ORklHX01EX1JBSUQ0NTY9bQotQ09ORklHX01EX1JBSUQ1X1JFU0hBUEU9eQogQ09ORklHX01EX01VTFRJUEFUSD1tCiBDT05GSUdfTURfRkFVTFRZPW0KIENPTkZJR19CTEtfREVWX0RNPW0KLSMgQ09ORklHX0RNX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19ETV9DUllQVD1tCiBDT05GSUdfRE1fU05BUFNIT1Q9bQogQ09ORklHX0RNX01JUlJPUj1tCiBDT05GSUdfRE1fWkVSTz1tCiBDT05GSUdfRE1fTVVMVElQQVRIPW0KIENPTkZJR19ETV9ERUxBWT1tCi0jIENPTkZJR19ETV9VRVZFTlQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX0RVTU1ZPW0KLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogQ09ORklHX1RVTj1tCi0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlJPXkKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOXzgwMjExPXkKK0NPTkZJR19VU0JfWkQxMjAxPW0KK0NPTkZJR19SVEw4MTg3PW0KK0NPTkZJR19IT1NUQVA9bQorQ09ORklHX0hPU1RBUF9GSVJNV0FSRT15CitDT05GSUdfSE9TVEFQX0ZJUk1XQVJFX05WUkFNPXkKIENPTkZJR19MSUJFUlRBUz15CiBDT05GSUdfTElCRVJUQVNfVVNCPXkKIENPTkZJR19MSUJFUlRBU19TRElPPXkKIENPTkZJR19MSUJFUlRBU19ERUJVRz15Ci1DT05GSUdfVVNCX1pEMTIwMT1tCi0jIENPTkZJR19VU0JfTkVUX1JORElTX1dMQU4gaXMgbm90IHNldAotQ09ORklHX1JUTDgxODc9bQotIyBDT05GSUdfTUFDODAyMTFfSFdTSU0gaXMgbm90IHNldAogQ09ORklHX1A1NF9DT01NT049bQogQ09ORklHX1A1NF9VU0I9bQotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1NUQVA9bQotQ09ORklHX0hPU1RBUF9GSVJNV0FSRT15Ci1DT05GSUdfSE9TVEFQX0ZJUk1XQVJFX05WUkFNPXkKLSMgQ09ORklHX0I0MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDNMRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWkQxMjExUlcgaXMgbm90IHNldAotIyBDT05GSUdfUlQyWDAwIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwogQ09ORklHX1VTQl9DQVRDPW0KIENPTkZJR19VU0JfS0FXRVRIPW0KIENPTkZJR19VU0JfUEVHQVNVUz1tCiBDT05GSUdfVVNCX1JUTDgxNTA9bQogQ09ORklHX1VTQl9VU0JORVQ9eQotQ09ORklHX1VTQl9ORVRfQVg4ODE3WD15Ci1DT05GSUdfVVNCX05FVF9DRENFVEhFUj15CiBDT05GSUdfVVNCX05FVF9ETTk2MDE9bQogQ09ORklHX1VTQl9ORVRfR0w2MjBBPW0KIENPTkZJR19VU0JfTkVUX05FVDEwODA9bQpAQCAtNzA3LDExNzggKzEzNSwxNDEgQEAKIENPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVQ9bQogQ09ORklHX1VTQl9BTElfTTU2MzI9eQogQ09ORklHX1VTQl9BTjI3MjA9eQotQ09ORklHX1VTQl9CRUxLSU49eQotQ09ORklHX1VTQl9BUk1MSU5VWD15CiBDT05GSUdfVVNCX0VQU09OMjg4OD15CiBDT05GSUdfVVNCX0tDMjE5MD15CiBDT05GSUdfVVNCX05FVF9aQVVSVVM9bQotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9bQotIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKIENPTkZJR19QUFBfQVNZTkM9bQogQ09ORklHX1BQUF9TWU5DX1RUWT1tCiBDT05GSUdfUFBQX0RFRkxBVEU9bQogQ09ORklHX1BQUF9CU0RDT01QPW0KIENPTkZJR19QUFBfTVBQRT1tCiBDT05GSUdfUFBQT0U9bQotIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFPXkKLUNPTkZJR19NT1VTRV9QUzI9eQotQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKLUNPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKLUNPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKLUNPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQotQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKLSMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0zMgotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKIENPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQogQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQogQ09ORklHX1NFUklBTF84MjUwX1JTQT15Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfT01BUD15Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLUNPTkZJR19FRVBST01fTEVHQUNZPXkKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfSVNQMTMwMV9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfU1BJPXkKLSMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19TUElfT01BUDI0WFg9eQotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCi0jIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15CiBDT05GSUdfREVCVUdfR1BJTz15CiBDT05GSUdfR1BJT19TWVNGUz15Ci0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0CiBDT05GSUdfUE9XRVJfU1VQUExZPW0KLSMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QREFfUE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkFUVEVSWV9EUzI3NjAgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0IxNDAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLUNPTkZJR19WSURFT19ERVY9bQotQ09ORklHX1ZJREVPX1Y0TDJfQ09NTU9OPW0KLUNPTkZJR19WSURFT19BTExPV19WNEwxPXkKLUNPTkZJR19WSURFT19WNEwxX0NPTVBBVD15Ci1DT05GSUdfRFZCX0NPUkU9bQotQ09ORklHX1ZJREVPX01FRElBPW0KLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLUNPTkZJR19NRURJQV9BVFRBQ0g9eQotQ09ORklHX01FRElBX1RVTkVSPW0KLSMgQ09ORklHX01FRElBX1RVTkVSX0NVU1RPTUlaRSBpcyBub3Qgc2V0Ci1DT05GSUdfTUVESUFfVFVORVJfU0lNUExFPW0KLUNPTkZJR19NRURJQV9UVU5FUl9UREE4MjkwPW0KLUNPTkZJR19NRURJQV9UVU5FUl9UREE4MjdYPW0KLUNPTkZJR19NRURJQV9UVU5FUl9UREExODI3MT1tCi1DT05GSUdfTUVESUFfVFVORVJfVERBOTg4Nz1tCi1DT05GSUdfTUVESUFfVFVORVJfVEVBNTc2MT1tCi1DT05GSUdfTUVESUFfVFVORVJfVEVBNTc2Nz1tCi1DT05GSUdfTUVESUFfVFVORVJfTVQyMFhYPW0KLUNPTkZJR19NRURJQV9UVU5FUl9NVDIwNjA9bQotQ09ORklHX01FRElBX1RVTkVSX01UMjI2Nj1tCi1DT05GSUdfTUVESUFfVFVORVJfUVQxMDEwPW0KLUNPTkZJR19NRURJQV9UVU5FUl9YQzIwMjg9bQotQ09ORklHX01FRElBX1RVTkVSX1hDNTAwMD1tCi1DT05GSUdfTUVESUFfVFVORVJfTVhMNTAwNVM9bQotQ09ORklHX1ZJREVPX1Y0TDI9bQotQ09ORklHX1ZJREVPX1Y0TDE9bQotQ09ORklHX1ZJREVPX1RWRUVQUk9NPW0KLUNPTkZJR19WSURFT19UVU5FUj1tCi1DT05GSUdfVklERU9fQ0FQVFVSRV9EUklWRVJTPXkKLSMgQ09ORklHX1ZJREVPX0FEVl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fSEVMUEVSX0NISVBTX0FVVE89eQotQ09ORklHX1ZJREVPX01TUDM0MDA9bQotQ09ORklHX1ZJREVPX0NTNTNMMzJBPW0KLUNPTkZJR19WSURFT19XTTg3NzU9bQotQ09ORklHX1ZJREVPX1NBQTcxMVg9bQotQ09ORklHX1ZJREVPX0NYMjU4NDA9bQotQ09ORklHX1ZJREVPX0NYMjM0MVg9bQotIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19DUElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0NQSUEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldAotIyBDT05GSUdfVFVORVJfMzAzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19BVTA4MjggaXMgbm90IHNldAotQ09ORklHX1Y0TF9VU0JfRFJJVkVSUz15Ci1DT05GSUdfVVNCX1ZJREVPX0NMQVNTPW0KLUNPTkZJR19VU0JfVklERU9fQ0xBU1NfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfVVNCX0dTUENBIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19QVlJVU0IyPW0KLUNPTkZJR19WSURFT19QVlJVU0IyX1NZU0ZTPXkKLUNPTkZJR19WSURFT19QVlJVU0IyX0RWQj15Ci0jIENPTkZJR19WSURFT19QVlJVU0IyX0RFQlVHSUZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0VNMjhYWCBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVVNCVklTSU9OPW0KLUNPTkZJR19WSURFT19VU0JWSURFTz1tCi1DT05GSUdfVVNCX1ZJQ0FNPW0KLUNPTkZJR19VU0JfSUJNQ0FNPW0KLUNPTkZJR19VU0JfS09OSUNBV0M9bQotQ09ORklHX1VTQl9RVUlDS0NBTV9NRVNTRU5HRVI9bQotIyBDT05GSUdfVVNCX0VUNjFYMjUxIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19PVkNBTUNISVA9bQotQ09ORklHX1VTQl9XOTk2OENGPW0KLUNPTkZJR19VU0JfT1Y1MTE9bQotQ09ORklHX1VTQl9TRTQwMT1tCi1DT05GSUdfVVNCX1NOOUMxMDI9bQotQ09ORklHX1VTQl9TVFY2ODA9bQotIyBDT05GSUdfVVNCX1pDMDMwMSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1BXQz1tCi0jIENPTkZJR19VU0JfUFdDX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfWlIzNjRYWD1tCi0jIENPTkZJR19VU0JfU1RLV0VCQ0FNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TMjI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0NfQ0FNRVJBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1NIX01PQklMRV9DRVUgaXMgbm90IHNldAotQ09ORklHX1JBRElPX0FEQVBURVJTPXkKLSMgQ09ORklHX1VTQl9EU0JSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TSTQ3MFggaXMgbm90IHNldAotQ09ORklHX0RWQl9DQVBUVVJFX0RSSVZFUlM9eQotIyBDT05GSUdfVFRQQ0lfRUVQUk9NIGlzIG5vdCBzZXQKLQotIwotIyBTdXBwb3J0ZWQgVVNCIEFkYXB0ZXJzCi0jCi1DT05GSUdfRFZCX1VTQj1tCi0jIENPTkZJR19EVkJfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19EVkJfVVNCX0E4MDA9bQotQ09ORklHX0RWQl9VU0JfRElCVVNCX01CPW0KLSMgQ09ORklHX0RWQl9VU0JfRElCVVNCX01CX0ZBVUxUWSBpcyBub3Qgc2V0Ci1DT05GSUdfRFZCX1VTQl9ESUJVU0JfTUM9bQotQ09ORklHX0RWQl9VU0JfRElCMDcwMD1tCi1DT05GSUdfRFZCX1VTQl9VTVRfMDEwPW0KLUNPTkZJR19EVkJfVVNCX0NYVVNCPW0KLUNPTkZJR19EVkJfVVNCX005MjBYPW0KLUNPTkZJR19EVkJfVVNCX0dMODYxPW0KLUNPTkZJR19EVkJfVVNCX0FVNjYxMD1tCi1DT05GSUdfRFZCX1VTQl9ESUdJVFY9bQotQ09ORklHX0RWQl9VU0JfVlA3MDQ1PW0KLUNPTkZJR19EVkJfVVNCX1ZQNzAyWD1tCi1DT05GSUdfRFZCX1VTQl9HUDhQU0s9bQotQ09ORklHX0RWQl9VU0JfTk9WQV9UX1VTQjI9bQotQ09ORklHX0RWQl9VU0JfVFRVU0IyPW0KLUNPTkZJR19EVkJfVVNCX0RUVDIwMFU9bQotQ09ORklHX0RWQl9VU0JfT1BFUkExPW0KLUNPTkZJR19EVkJfVVNCX0FGOTAwNT1tCi1DT05GSUdfRFZCX1VTQl9BRjkwMDVfUkVNT1RFPW0KLSMgQ09ORklHX0RWQl9VU0JfRFcyMTAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9VU0JfQU5ZU0VFIGlzIG5vdCBzZXQKLUNPTkZJR19EVkJfVFRVU0JfQlVER0VUPW0KLUNPTkZJR19EVkJfVFRVU0JfREVDPW0KLUNPTkZJR19EVkJfQ0lORVJHWVQyPW0KLSMgQ09ORklHX0RWQl9DSU5FUkdZVDJfVFVOSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9TSUFOT19TTVMxWFhYIGlzIG5vdCBzZXQKLQotIwotIyBTdXBwb3J0ZWQgRmxleENvcElJIChCMkMyKSBBZGFwdGVycwotIwotIyBDT05GSUdfRFZCX0IyQzJfRkxFWENPUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU3VwcG9ydGVkIERWQiBGcm9udGVuZHMKLSMKLQotIwotIyBDdXN0b21pc2UgRFZCIEZyb250ZW5kcwotIwotIyBDT05GSUdfRFZCX0ZFX0NVU1RPTUlTRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRFZCLVMgKHNhdGVsbGl0ZSkgZnJvbnRlbmRzCi0jCi1DT05GSUdfRFZCX0NYMjQxMTA9bQotQ09ORklHX0RWQl9DWDI0MTIzPW0KLUNPTkZJR19EVkJfTVQzMTI9bQotQ09ORklHX0RWQl9TNUgxNDIwPW0KLUNPTkZJR19EVkJfU1RWMDI5OT1tCi1DT05GSUdfRFZCX1REQTgwODM9bQotQ09ORklHX0RWQl9UREExMDA4Nj1tCi1DT05GSUdfRFZCX1ZFUzFYOTM9bQotQ09ORklHX0RWQl9UVU5FUl9JVEQxMDAwPW0KLUNPTkZJR19EVkJfVERBODI2WD1tCi1DT05GSUdfRFZCX1RVQTYxMDA9bQotCi0jCi0jIERWQi1UICh0ZXJyZXN0cmlhbCkgZnJvbnRlbmRzCi0jCi1DT05GSUdfRFZCX1NQODg3MD1tCi1DT05GSUdfRFZCX1NQODg3WD1tCi1DT05GSUdfRFZCX0NYMjI3MDA9bQotQ09ORklHX0RWQl9DWDIyNzAyPW0KLSMgQ09ORklHX0RWQl9EUlgzOTdYRCBpcyBub3Qgc2V0Ci1DT05GSUdfRFZCX0w2NDc4MT1tCi1DT05GSUdfRFZCX1REQTEwMDRYPW0KLUNPTkZJR19EVkJfTlhUNjAwMD1tCi1DT05GSUdfRFZCX01UMzUyPW0KLUNPTkZJR19EVkJfWkwxMDM1Mz1tCi1DT05GSUdfRFZCX0RJQjMwMDBNQj1tCi1DT05GSUdfRFZCX0RJQjMwMDBNQz1tCi1DT05GSUdfRFZCX0RJQjcwMDBNPW0KLUNPTkZJR19EVkJfRElCNzAwMFA9bQotQ09ORklHX0RWQl9UREExMDA0OD1tCi0KLSMKLSMgRFZCLUMgKGNhYmxlKSBmcm9udGVuZHMKLSMKLUNPTkZJR19EVkJfVkVTMTgyMD1tCi1DT05GSUdfRFZCX1REQTEwMDIxPW0KLUNPTkZJR19EVkJfVERBMTAwMjM9bQotQ09ORklHX0RWQl9TVFYwMjk3PW0KLQotIwotIyBBVFNDIChOb3J0aCBBbWVyaWNhbi9Lb3JlYW4gVGVycmVzdHJpYWwvQ2FibGUgRFRWKSBmcm9udGVuZHMKLSMKLUNPTkZJR19EVkJfTlhUMjAwWD1tCi0jIENPTkZJR19EVkJfT1I1MTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfT1I1MTEzMiBpcyBub3Qgc2V0Ci1DT05GSUdfRFZCX0JDTTM1MTA9bQotQ09ORklHX0RWQl9MR0RUMzMwWD1tCi1DT05GSUdfRFZCX1M1SDE0MDk9bQotQ09ORklHX0RWQl9BVTg1MjI9bQotQ09ORklHX0RWQl9TNUgxNDExPW0KLQotIwotIyBEaWdpdGFsIHRlcnJlc3RyaWFsIG9ubHkgdHVuZXJzL1BMTAotIwotQ09ORklHX0RWQl9QTEw9bQotQ09ORklHX0RWQl9UVU5FUl9ESUIwMDcwPW0KLQotIwotIyBTRUMgY29udHJvbCBkZXZpY2VzIGZvciBEVkItUwotIwotQ09ORklHX0RWQl9MTkJQMjE9bQotIyBDT05GSUdfRFZCX0lTTDY0MDUgaXMgbm90IHNldAotQ09ORklHX0RWQl9JU0w2NDIxPW0KLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfRElTUExBWV9TVVBQT1JUPXkKLQotIwotIyBEaXNwbGF5IGhhcmR3YXJlIGRyaXZlcnMKLSMKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19TT1VORD15CiBDT05GSUdfU05EPXkKLUNPTkZJR19TTkRfVElNRVI9eQotQ09ORklHX1NORF9QQ009eQotQ09ORklHX1NORF9IV0RFUD15Ci1DT05GSUdfU05EX1JBV01JREk9eQogQ09ORklHX1NORF9TRVFVRU5DRVI9bQotIyBDT05GSUdfU05EX1NFUV9EVU1NWSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX09TU0VNVUw9eQogQ09ORklHX1NORF9NSVhFUl9PU1M9eQogQ09ORklHX1NORF9QQ01fT1NTPXkKLUNPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKIENPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15Ci0jIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQotQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CiBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLPXkKIENPTkZJR19TTkRfREVCVUc9eQotIyBDT05GSUdfU05EX0RFQlVHX1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BDTV9YUlVOX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfRFJJVkVSUz15Ci0jIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJUk1JREkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAotQ09ORklHX1NORF9BUk09eQotQ09ORklHX1NORF9TUEk9eQotQ09ORklHX1NORF9VU0I9eQogQ09ORklHX1NORF9VU0JfQVVESU89eQogQ09ORklHX1NORF9VU0JfQ0FJQVE9bQogQ09ORklHX1NORF9VU0JfQ0FJQVFfSU5QVVQ9eQogQ09ORklHX1NORF9TT0M9eQogQ09ORklHX1NORF9PTUFQX1NPQz15Ci0jIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci1DT05GSUdfSElEX0RFQlVHPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfREVCVUc9eQogQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci1DT05GSUdfVVNCX0RFVklDRV9DTEFTUz15Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTVVTQl9IRFJDPXkKLUNPTkZJR19VU0JfTVVTQl9TT0M9eQotCi0jCi0jIE9NQVAgMzQzeCBoaWdoIHNwZWVkIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX01VU0JfSE9TVD15Ci0jIENPTkZJR19VU0JfTVVTQl9QRVJJUEhFUkFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX09URyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01VU0JfSERSQ19IQ0Q9eQogQ09ORklHX01VU0JfUElPX09OTFk9eQotIyBDT05GSUdfVVNCX01VU0JfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwogQ09ORklHX1VTQl9BQ009bQogQ09ORklHX1VTQl9QUklOVEVSPW0KIENPTkZJR19VU0JfV0RNPXkKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKIENPTkZJR19VU0JfU0VSSUFMPW0KLSMgQ09ORklHX1VTQl9FWlVTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9DSDM0MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9FTVBFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRlVOU09GVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSVBBUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9USSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lQVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lVVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tMU0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTU9UT1JPTEEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9PVEk2ODU4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU1BDUDhYNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9USSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1hJUkNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX09QVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwogQ09ORklHX1VTQl9FTUk2Mj1tCiBDT05GSUdfVVNCX0VNSTI2PW0KLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0xFR09UT1dFUj1tCiBDT05GSUdfVVNCX0xDRD1tCi0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTEVEPW0KLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRT15Ci0KLSMKLSMgTU1DL1NEIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz15Ci1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CiBDT05GSUdfU0RJT19VQVJUPXkKLSMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKLQotIwotIyBMRUQgZHJpdmVycwotIwotIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX0dQSU89eQotIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLUNPTkZJR19MRURTX1RSSUdHRVJTPXkKIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQotIyBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT04gaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIFZvbHRhZ2UgYW5kIEN1cnJlbnQgcmVndWxhdG9ycwotIwotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfWEZTX0ZTPW0KLSMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKIENPTkZJR19RVU9UQT15Ci0jIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15Ci0jIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKIENPTkZJR19RRk1UX1YyPXkKLUNPTkZJR19RVU9UQUNUTD15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlVTRV9GUz1tCi0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwogQ09ORklHX0lTTzk2NjBfRlM9bQogQ09ORklHX0pPTElFVD15CiBDT05GSUdfWklTT0ZTPXkKIENPTkZJR19VREZfRlM9bQotQ09ORklHX1VERl9OTFM9eQotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfU1VNTUFSWT15CiBDT05GSUdfSkZGUzJfRlNfWEFUVFI9eQotQ09ORklHX0pGRlMyX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfSkZGUzJfRlNfU0VDVVJJVFk9eQogQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQotQ09ORklHX0pGRlMyX1pMSUI9eQogQ09ORklHX0pGRlMyX0xaTz15Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQogQ09ORklHX0pGRlMyX1JVQklOPXkKLSMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKLSMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15CiBDT05GSUdfU0NIRURTVEFUUz15CiBDT05GSUdfVElNRVJfU1RBVFM9eQotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVFJBQ0U9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfWE9SX0JMT0NLUz1tCi1DT05GSUdfQVNZTkNfQ09SRT1tCi1DT05GSUdfQVNZTkNfTUVNQ1BZPW0KLUNPTkZJR19BU1lOQ19YT1I9bQotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FFQUQ9bQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19IQVNIPW0KLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KIENPTkZJR19DUllQVE9fTlVMTD1tCiBDT05GSUdfQ1JZUFRPX0NSWVBURD1tCi0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1RFU1Q9bQotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0VDQj15CiBDT05GSUdfQ1JZUFRPX0xSVz1tCiBDT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwogQ09ORklHX0NSWVBUT19ITUFDPW0KIENPTkZJR19DUllQVE9fWENCQz1tCi0KLSMKLSMgRGlnZXN0Ci0jCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCiBDT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15CiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPXkKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19TSEExPW0KIENPTkZJR19DUllQVE9fU0hBMjU2PW0KIENPTkZJR19DUllQVE9fU0hBNTEyPW0KIENPTkZJR19DUllQVE9fVEdSMTkyPW0KIENPTkZJR19DUllQVE9fV1A1MTI9bQotCi0jCi0jIENpcGhlcnMKLSMKLUNPTkZJR19DUllQVE9fQUVTPXkKIENPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fQVJDND15CiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KIENPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQogQ09ORklHX0NSWVBUT19DQVNUNT1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KLUNPTkZJR19DUllQVE9fREVTPXkKIENPTkZJR19DUllQVE9fRkNSWVBUPW0KIENPTkZJR19DUllQVE9fS0hBWkFEPW0KLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fU0VSUEVOVD1tCiBDT05GSUdfQ1JZUFRPX1RFQT1tCiBDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCi0KLSMKLSMgQ29tcHJlc3Npb24KLSMKIENPTkZJR19DUllQVE9fREVGTEFURT1tCi0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUIGlzIG5vdCBzZXQKIENPTkZJR19DUkNfQ0NJVFQ9eQotQ09ORklHX0NSQzE2PW0KIENPTkZJR19DUkNfVDEwRElGPXkKIENPTkZJR19DUkNfSVRVX1Q9eQotQ09ORklHX0NSQzMyPXkKIENPTkZJR19DUkM3PXkKIENPTkZJR19MSUJDUkMzMkM9eQotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19MWk9fQ09NUFJFU1M9eQotQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcGFsbXRlX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGFsbXRlX2RlZmNvbmZpZwppbmRleCBmZWZmYWEyLi44MjhkN2NiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3BhbG10ZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9wYWxtdGVfZGVmY29uZmlnCkBAIC0xLDc2MCArMSw0OCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIyLXJjMS1vbWFwMQotIyBTYXQgTWF5IDE5IDExOjA0OjI3IDIwMDcKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBsYXllcgotIwotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVA9eQotCi0jCi0jIFRJIE9NQVAgSW1wbGVtZW50YXRpb25zCi0jCiBDT05GSUdfQVJDSF9PTUFQMT15Ci0jIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucwotIwotIyBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9CT09UX1RBRyBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9HUElPX1NXSVRDSD15Ci1DT05GSUdfT01BUF9NVVg9eQotIyBDT05GSUdfT01BUF9NVVhfREVCVUcgaXMgbm90IHNldAotQ09ORklHX09NQVBfTVVYX1dBUk5JTkdTPXkKLUNPTkZJR19PTUFQX01DQlNQPXkKLSMgQ09ORklHX09NQVBfTU1VX0ZXSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX01CT1hfRldLIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX01QVV9USU1FUj15Ci0jIENPTkZJR19PTUFQXzMyS19USU1FUiBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMT15Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDMgaXMgbm90IHNldAotQ09ORklHX09NQVBfU0VSSUFMX1dBS0U9eQotIyBDT05GSUdfT01BUF9EU1AgaXMgbm90IHNldAotCi0jCi0jIE9NQVAgQ29yZSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX09NQVA3MzAgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfT01BUDE1WFg9eQotIyBDT05GSUdfQVJDSF9PTUFQMTZYWCBpcyBub3Qgc2V0Ci0KLSMKLSMgT01BUCBCb2FyZCBUeXBlCi0jCi0jIENPTkZJR19NQUNIX09NQVBfSU5OT1ZBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVk9JQ0VCTFVFIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX09NQVBfUEFMTVRFPXkKLSMgQ09ORklHX01BQ0hfT01BUF9QQUxNWjcxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9QQUxNVFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9TWDEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9BTVNfREVMVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX0dFTkVSSUMgaXMgbm90IHNldAotCi0jCi0jIE9NQVAgQ1BVIFNwZWVkCi0jCiBDT05GSUdfT01BUF9DTE9DS1NfU0VUX0JZX0JPT1RMT0FERVI9eQotIyBDT05GSUdfT01BUF9BUk1fMTY4TUhaIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfQVJNXzE1ME1IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0FSTV8xMjBNSFogaXMgbm90IHNldAogIyBDT05GSUdfT01BUF9BUk1fNjBNSFogaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9BUk1fMzBNSFogaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX0FSTTkyNVQ9eQotQ09ORklHX0NQVV8zMnY0VD15Ci1DT05GSUdfQ1BVX0FCUlRfRVY0VD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y0V1Q9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKICMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEwMAotIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi0jIENPTkZJR19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSIiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKLSMKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwotIyBDT05GSUdfTkVUIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKICMgQ09ORklHX1NUQU5EQUxPTkUgaXMgbm90IHNldAogIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCi0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MzIwCiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9MzIwCi0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSVBNSQotIwotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotQ09ORklHX09NQVBfUlRDPXkKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCi0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0jIENPTkZJR19CTElOSyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZGV2aWNlcwotIwotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX0RBQj15Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX0ZCPXkKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfT01BUD15Ci0jIENPTkZJR19GQl9PTUFQX0xDRENfRVhURVJOQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfT01BUF9MQ0RfTUlQSUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfT01BUF9CT09UTE9BREVSX0lOSVQgaXMgbm90IHNldAotQ09ORklHX0ZCX09NQVBfQ09OU0lTVEVOVF9ETUFfU0laRT0yCi0jIENPTkZJR19GQl9PTUFQX0RNQV9UVU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9OVF84eDg9eQotQ09ORklHX0ZPTlRfOHgxNj15CiBDT05GSUdfTE9HTz15CiAjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAogIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIEhJRCBEZXZpY2VzCi0jCi1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwogQ09ORklHX1VTQl9HQURHRVQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX09NQVA9eQotQ09ORklHX1VTQl9PTUFQPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1pFUk89eQotIyBDT05GSUdfVVNCX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLQotIwotIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKIENPTkZJR19NTUNfT01BUD15Ci0KLSMKLSMgUmVhbCBUaW1lIENsb2NrCi0jCi1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIENCVVMgc3VwcG9ydAotIwotIyBDT05GSUdfQ0JVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKIENPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT04NTAKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAogQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0NSQ19DQ0lUVD15Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcGFsbXR0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGFsbXR0X2RlZmNvbmZpZwppbmRleCA1NWQ1YjdkLi4zMWQwMmM0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3BhbG10dF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9wYWxtdHRfZGVmY29uZmlnCkBAIC0xLDg0MyArMSw1NiBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE5LXJjMy1vbWFwMQotIyBTdW4gT2N0IDI5IDAwOjM2OjEyIDIwMDYKLSMKLUNPTkZJR19BUk09eQotIyBDT05GSUdfR0VORVJJQ19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NITUVNPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfU0xBQj15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwotIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTk9PUD15Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVA9eQotCi0jCi0jIFRJIE9NQVAgSW1wbGVtZW50YXRpb25zCi0jCiBDT05GSUdfQVJDSF9PTUFQMT15Ci0jIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucwotIwotIyBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9CT09UX1RBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0dQSU9fU1dJVENIIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX01VWD15Ci0jIENPTkZJR19PTUFQX01VWF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9NVVhfV0FSTklOR1M9eQotQ09ORklHX09NQVBfTUNCU1A9eQotQ09ORklHX09NQVBfTVBVX1RJTUVSPXkKLSMgQ09ORklHX09NQVBfMzJLX1RJTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDEgaXMgbm90IHNldAotQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDI9eQotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMyBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9TRVJJQUxfV0FLRT15Ci1DT05GSUdfT01BUF9EU1A9eQotIyBDT05GSUdfT01BUF9EU1BfTUJDTURfVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0RTUF9UQVNLX01VTFRJT1BFTiBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9EU1BfRkJFWFBPUlQ9eQotCi0jCi0jIE9NQVAgQ29yZSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX09NQVA3MzAgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfT01BUDE1WFg9eQotIyBDT05GSUdfQVJDSF9PTUFQMTZYWCBpcyBub3Qgc2V0Ci0KLSMKLSMgT01BUCBCb2FyZCBUeXBlCi0jCi0jIENPTkZJR19NQUNIX09NQVBfSU5OT1ZBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVk9JQ0VCTFVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9QQUxNVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX1BBTE1aNzEgaXMgbm90IHNldAogQ09ORklHX01BQ0hfT01BUF9QQUxNVFQ9eQotIyBDT05GSUdfTUFDSF9BTVNfREVMVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX0dFTkVSSUMgaXMgbm90IHNldAotCi0jCi0jIE9NQVAgQ1BVIFNwZWVkCi0jCiBDT05GSUdfT01BUF9DTE9DS1NfU0VUX0JZX0JPT1RMT0FERVI9eQotIyBDT05GSUdfT01BUF9BUk1fMTY4TUhaIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfQVJNXzE1ME1IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0FSTV8xMjBNSFogaXMgbm90IHNldAogIyBDT05GSUdfT01BUF9BUk1fNjBNSFogaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9BUk1fMzBNSFogaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX0FSTTkyNVQ9eQotQ09ORklHX0NQVV8zMnY0VD15Ci1DT05GSUdfQ1BVX0FCUlRfRVY0VD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y0V1Q9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19JRExFX0haIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMDAKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L21tY2JsazBwMiBydyBpbml0PS9pbml0IgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCi0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotIyBDT05GSUdfQVBNIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0tFWT15CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLQotIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCi0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfTkVUREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCi0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTMyMAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTMyMAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9UU0RFVj15Ci1DT05GSUdfSU5QVVRfVFNERVZfU0NSRUVOX1g9MzIwCi1DT05GSUdfSU5QVVRfVFNERVZfU0NSRUVOX1k9MzIwCiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQogQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDY9eQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIxMDIgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIwotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwogQ09ORklHX1NQST15Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKLUNPTkZJR19TUElfQklUQkFORz15CiBDT05GSUdfU1BJX09NQVBfVVdJUkU9eQotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCi0jIENPTkZJR19UU0MyMTAyIGlzIG5vdCBzZXQKLQotIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCi0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCi1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotCi0jCi0jIExFRCBkZXZpY2VzCi0jCitDT05GSUdfRkI9eQorQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQorQ09ORklHX0ZCX09NQVA9eQorQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CiBDT05GSUdfTkVXX0xFRFM9eQogQ09ORklHX0xFRFNfQ0xBU1M9eQotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi1DT05GSUdfTEVEU19PTUFQPXkKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKIENPTkZJR19MRURTX1RSSUdHRVJTPXkKIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLUNPTkZJR19GSVJNV0FSRV9FRElEPXkKLUNPTkZJR19GQj15Ci0jIENPTkZJR19GQl9DRkJfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfT01BUD15Ci0jIENPTkZJR19GQl9PTUFQX0xDRENfRVhURVJOQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfT01BUF9MQ0RfTUlQSUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfT01BUF9CT09UTE9BREVSX0lOSVQgaXMgbm90IHNldAotQ09ORklHX0ZCX09NQVBfQ09OU0lTVEVOVF9ETUFfU0laRT0yCi0jIENPTkZJR19GQl9PTUFQX0RNQV9UVU5FIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQotCi0jCi0jIExvZ28gY29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0Ci1DT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKLUNPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLUNPTkZJR19CQUNLTElHSFRfREVWSUNFPXkKLUNPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKLUNPTkZJR19MQ0RfREVWSUNFPXkKLUNPTkZJR19CQUNLTElHSFRfT01BUD15Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIwotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKLSMKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCi0jIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIFJlYWwgVGltZSBDbG9jawotIwotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX09NQVA9eQotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgU3luY2hyb25vdXMgU2VyaWFsIEludGVyZmFjZXMgKFNTSSkKLSMKLSMgQ09ORklHX09NQVBfVVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9UU0MyMTAxIGlzIG5vdCBzZXQKLQotIwotIyBDQlVTIHN1cHBvcnQKLSMKLSMgQ09ORklHX0NCVVMgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwotIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCiBDT05GSUdfQ1JDX0NDSVRUPXkKIENPTkZJR19DUkMxNj15Ci1DT05GSUdfQ1JDMzI9eQogQ09ORklHX0xJQkNSQzMyQz15Ci1DT05GSUdfUExJU1Q9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9wYWxtejcxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGFsbXo3MV9kZWZjb25maWcKaW5kZXggNmVmYzc0Ni4uYzQ3OGRiNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9wYWxtejcxX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3BhbG16NzFfZGVmY29uZmlnCkBAIC0xLDg5MCArMSw1MyBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIyLXJjMS1vbWFwMQotIyBUaHUgSnVuICA3IDA1OjEzOjAwIDIwMDcKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0xPQ0FMVkVSU0lPTj0iLXo3MSIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwotIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9OT09QPXkKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCi0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQPXkKLQotIwotIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucwotIwogQ09ORklHX0FSQ0hfT01BUDE9eQotIyBDT05GSUdfQVJDSF9PTUFQMiBpcyBub3Qgc2V0Ci0KLSMKLSMgT01BUCBGZWF0dXJlIFNlbGVjdGlvbnMKLSMKLSMgQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfQk9PVF9UQUcgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9HUElPX1NXSVRDSCBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9NVVg9eQotIyBDT05GSUdfT01BUF9NVVhfREVCVUcgaXMgbm90IHNldAotQ09ORklHX09NQVBfTVVYX1dBUk5JTkdTPXkKLUNPTkZJR19PTUFQX01DQlNQPXkKLSMgQ09ORklHX09NQVBfTU1VX0ZXSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX01CT1hfRldLIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX01QVV9USU1FUj15Ci0jIENPTkZJR19PTUFQXzMyS19USU1FUiBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMT15Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDMgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9MTF9ERUJVR19MQ0QgaXMgbm90IHNldAotQ09ORklHX09NQVBfU0VSSUFMX1dBS0U9eQotIyBDT05GSUdfT01BUF9EU1AgaXMgbm90IHNldAotCi0jCi0jIE9NQVAgQ29yZSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX09NQVA3MzAgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfT01BUDE1WFg9eQotIyBDT05GSUdfQVJDSF9PTUFQMTZYWCBpcyBub3Qgc2V0Ci0KLSMKLSMgT01BUCBCb2FyZCBUeXBlCi0jCi0jIENPTkZJR19NQUNIX09NQVBfSU5OT1ZBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVk9JQ0VCTFVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9QQUxNVEUgaXMgbm90IHNldAogQ09ORklHX01BQ0hfT01BUF9QQUxNWjcxPXkKLSMgQ09ORklHX01BQ0hfT01BUF9QQUxNVFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9TWDEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9BTVNfREVMVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX0dFTkVSSUMgaXMgbm90IHNldAotCi0jCi0jIE9NQVAgQ1BVIFNwZWVkCi0jCiBDT05GSUdfT01BUF9DTE9DS1NfU0VUX0JZX0JPT1RMT0FERVI9eQotIyBDT05GSUdfT01BUF9BUk1fMTY4TUhaIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfQVJNXzE1ME1IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0FSTV8xMjBNSFogaXMgbm90IHNldAogIyBDT05GSUdfT01BUF9BUk1fNjBNSFogaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9BUk1fMzBNSFogaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX0FSTTkyNVQ9eQotQ09ORklHX0NQVV8zMnY0VD15Ci1DT05GSUdfQ1BVX0FCUlRfRVY0VD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y0V1Q9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKICMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEwMAotIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi0jIENPTkZJR19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSIiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKLSMKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPXkKLSMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCi0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLQotIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotIyBDT05GSUdfUE5QQUNQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCi0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfTkVUREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCi0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTMyMAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTMyMAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9UU0RFVj15Ci1DT05GSUdfSU5QVVRfVFNERVZfU0NSRUVOX1g9MzIwCi1DT05GSUdfSU5QVVRfVFNERVZfU0NSRUVOX1k9MzIwCi0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQogQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDY9eQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1VDQjE0MDAgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjEwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDQ2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MTYKLQotIwotIyBJUE1JCi0jCi0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCiBDT05GSUdfU1BJPXkKLUNPTkZJR19TUElfTUFTVEVSPXkKLQotIwotIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwotIwotQ09ORklHX1NQSV9CSVRCQU5HPXkKIENPTkZJR19TUElfT01BUF9VV0lSRT15Ci0KLSMKLSMgU1BJIFByb3RvY29sIE1hc3RlcnMKLSMKLSMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UU0MyMTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UU0MyMTAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UU0MyMTBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UU0MyMzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAotCi0jCi0jIERhbGxhcydzIDEtd2lyZSBidXMKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BQklUVUdVUlUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTQzIxMFggaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0jIENPTkZJR19CTElOSyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZGV2aWNlcwotIwotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15Ci1DT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15Ci1DT05GSUdfTENEX0NMQVNTX0RFVklDRT15Ci1DT05GSUdfQkFDS0xJR0hUX09NQVA9eQotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQogQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfT01BUD15Ci0jIENPTkZJR19GQl9PTUFQX0xDRENfRVhURVJOQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfT01BUF9MQ0RfTUlQSUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfT01BUF9CT09UTE9BREVSX0lOSVQgaXMgbm90IHNldAotQ09ORklHX0ZCX09NQVBfQ09OU0lTVEVOVF9ETUFfU0laRT0yCi0jIENPTkZJR19GQl9PTUFQX0RNQV9UVU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIworQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19GT05UXzh4OD15Ci1DT05GSUdfRk9OVF84eDE2PXkKLSMgQ09ORklHX0xPR08gaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0KLSMKLSMgSElEIERldmljZXMKLSMKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIwotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKLSMKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLQotIwotIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKIENPTkZJR19NTUNfT01BUD15Ci0KLSMKLSMgUmVhbCBUaW1lIENsb2NrCi0jCi1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwogQ09ORklHX1JUQ19EUlZfT01BUD15Ci0KLSMKLSMgQ0JVUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19DQlVTIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKLSMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQogQ09ORklHX0NSQzE2PXkKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQogQ09ORklHX0xJQkNSQzMyQz15Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3BhbG16NzJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9wYWxtejcyX2RlZmNvbmZpZwppbmRleCA2ZDE2MmIxLi40YmFhODNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3BhbG16NzJfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGFsbXo3Ml9kZWZjb25maWcKQEAgLTEsOTUwICsxLDg1IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctcmM0Ci0jIFN1biBBdWcgMjQgMDI6Mjk6MjcgMjAwOAotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfSEFWRV9QV009eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX0FSQ0hfTVREX1hJUD15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci0jIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0NMSz15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUFhBPXkKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNN1gwMEEgaXMgbm90IHNldAotCi0jCi0jIEludGVsIFBYQTJ4eC9QWEEzeHggSW1wbGVtZW50YXRpb25zCi0jCi0jIENPTkZJR19BUkNIX0dVTVNUSVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NQUlOU1RPTkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfSURQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBX0VTRVJJRVMgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9UUklaRVBTNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0VNX1gyNzAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DT0xJQlJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfWllMT05JVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9MSVRUTEVUT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9UQVZPUkVWQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1NBQVIgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9BUk1DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTUFHSUNJQU4gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9QQ00wMjcgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUFhBX1BBTE09eQogIyBDT05GSUdfTUFDSF9QQUxNVFggaXMgbm90IHNldAotQ09ORklHX01BQ0hfUEFMTVo3Mj15Ci0jIENPTkZJR19QWEFfRVpYIGlzIG5vdCBzZXQKLUNPTkZJR19QWEEyN3g9eQotQ09ORklHX1BYQV9QV009eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9YU0NBTEU9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUPXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci1DT05GSUdfSVdNTVhUPXkKLUNPTkZJR19YU0NBTEVfUE1VPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15Ci1DT05GSUdfT0FCSV9DT01QQVQ9eQotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0ibWVtPTMyTSBjb25zb2xlPXR0eSByb290PS9kZXYvbW1jYmxrMCIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBGcmVxdWVuY3kgc2NhbGluZwotIwotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwogQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QTV9TTEVFUD15Ci1DT05GSUdfU1VTUEVORD15Ci1DT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKIENPTkZJR19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX1BYQTI3eD15Ci0jIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfUFhBIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLSMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX1BYQT15Ci0jIENPTkZJR19JMkNfUFhBX1NMQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKIENPTkZJR19TUEk9eQotQ09ORklHX1NQSV9NQVNURVI9eQotCi0jCi0jIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfUFhBMlhYIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUHJvdG9jb2wgTWFzdGVycwotIwotIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAogQ09ORklHX1NQSV9TUElERVY9eQotIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKIENPTkZJR19HUElPX1NZU0ZTPXkKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIENPTkZJR19QT1dFUl9TVVBQTFk9eQotIyBDT05GSUdfUE9XRVJfU1VQUExZX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QREFfUE9XRVI9eQotIyBDT05GSUdfQVBNX1BPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBVFRFUllfRFMyNzYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9QWEE9eQotIyBDT05GSUdfRkJfUFhBX1NNQVJUUEFORUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUFhBX1BBUkFNRVRFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1cxMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQU0yMDBFUEQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKICMgQ09ORklHX0xDRF9DTEFTU19ERVZJQ0UgaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQotIyBDT05GSUdfQkFDS0xJR0hUX0NPUkdJIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfUFdNPXkKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfRElTUExBWV9TVVBQT1JUPXkKLQotIwotIyBEaXNwbGF5IGhhcmR3YXJlIGRyaXZlcnMKLSMKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVFM9eQogQ09ORklHX0ZPTlRfOHg4PXkKLSMgQ09ORklHX0ZPTlRfOHgxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfTUlOSV80eDYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQogQ09ORklHX01NQ19ERUJVRz15Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz15Ci1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15Ci0jIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwogQ09ORklHX01NQ19QWEE9eQotIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX1NBMTEwMD15Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBWb2x0YWdlIGFuZCBDdXJyZW50IHJlZ3VsYXRvcnMKLSMKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKIENPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT04NjYKIENPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9InV0ZjgiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLUNPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJ1dGY4IgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfVVRGOD15Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19IQVZFX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci0jIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiBDT05GSUdfREVCVUdfVVNFUj15Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDX1QxMERJRj15Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcGNtMDI3X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGNtMDI3X2RlZmNvbmZpZwppbmRleCBmYTE1M2YyLi41ODNhMDYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3BjbTAyN19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9wY20wMjdfZGVmY29uZmlnCkBAIC0xLDEwOTUgKzEsMTAyIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM2Ci0jIEZyaSBEZWMgMjEgMTA6NTI6MDkgMjAwNwotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfQVJDSF9NVERfWElQPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTk9PUD15Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1BYQT15Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKLSMKLSMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QWEFfU0hBUlBTTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1RSSVpFUFM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfRU1fWDI3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1pZTE9OSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQVJNQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9QQ00wMjc9eQogQ09ORklHX01BQ0hfUENNOTkwX0JBU0VCT0FSRD15Ci1DT05GSUdfUFhBMjd4PXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCi0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfWFNDQUxFPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0lXTU1YVD15Ci1DT05GSUdfWFNDQUxFX1BNVT15Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15CiAjIENPTkZJR19PQUJJX0NPTVBBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0iIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci0jIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVA9eQotQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTAKLSMgQ09ORklHX01URF9QWEEyWFggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TSEFSUF9TTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVYgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogQ09ORklHX1NNQzkxWD15Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKIENPTkZJR19TRVJJQUxfUFhBPXkKIENPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLSMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfUFhBPXkKLSMgQ09ORklHX0kyQ19QWEFfU0xBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLUNPTkZJR19FRVBST01fTEVHQUNZPXkKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLQotIwotIyBTb3VuZAotIwogQ09ORklHX1NPVU5EPXkKLQotIwotIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKLSMKIENPTkZJR19TTkQ9eQotQ09ORklHX1NORF9USU1FUj15Ci1DT05GSUdfU05EX1BDTT15Ci0jIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfT1NTRU1VTD15CiBDT05GSUdfU05EX01JWEVSX09TUz15CiBDT05GSUdfU05EX1BDTV9PU1M9eQotQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgR2VuZXJpYyBkZXZpY2VzCi0jCi1DT05GSUdfU05EX0FDOTdfQ09ERUM9eQotIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKLQotIwotIyBBTFNBIEFSTSBkZXZpY2VzCi0jCi1DT05GSUdfU05EX1BYQTJYWF9QQ009eQogQ09ORklHX1NORF9QWEEyWFhfQUM5Nz15Ci0KLSMKLSMgVVNCIGRldmljZXMKLSMKLSMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1VTQl9DQUlBUSBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIG9uIENoaXAgYXVkaW8gc3VwcG9ydAotIwotIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29DIEF1ZGlvIHN1cHBvcnQgZm9yIFN1cGVySAotIwotCi0jCi0jIE9wZW4gU291bmQgU3lzdGVtCi0jCi0jIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0Ci1DT05GSUdfQUM5N19CVVM9eQogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci1DT05GSUdfVVNCX0RFVklDRV9DTEFTUz15Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz15Ci1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15Ci0jIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwogQ09ORklHX01NQ19QWEE9eQotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzPW0KLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwogQ09ORklHX1JUQ19EUlZfU0ExMTAwPW0KLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPW0KLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9bQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9bQotQ09ORklHX0ZTX01CQ0FDSEU9bQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9bQotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAogQ09ORklHX1ZGQVRfRlM9bQogQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTg1MAogQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xNSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotQ09ORklHX05GU19ESVJFQ1RJTz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xNSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xNT15Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOU1RSVU1FTlRBVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9waWNvdHV4MjAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGljb3R1eDIwMF9kZWZjb25maWcKaW5kZXggNmU3MTU1Yy4uNGM5YWZhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9waWNvdHV4MjAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3BpY290dXgyMDBfZGVmY29uZmlnCkBAIC0xLDM1NSArMSw1MSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIxLXJjNAotIyBXZWQgTWFyIDI4IDE2OjE5OjUwIDIwMDcKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotIyBDT05GSUdfR0VORVJJQ19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPW0KIENPTkZJR19JS0NPTkZJR19QUk9DPXkKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCi1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTk9PUD15Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0FUOTE9eQotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLQotIwotIyBBdG1lbCBBVDkxIFN5c3RlbS1vbi1DaGlwCi0jCi1DT05GSUdfQVJDSF9BVDkxUk05MjAwPXkKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05MjYzIGlzIG5vdCBzZXQKLQotIwotIyBBVDkxUk05MjAwIEJvYXJkIFR5cGUKLSMKLSMgQ09ORklHX01BQ0hfT05FQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMERLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQVQ5MVJNOTIwMEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ1NCMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ1NCNjM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ0FSTUVWQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0FURUI5MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfS0I5MjAwIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX1BJQ09UVVgyWFg9eQotIyBDT05GSUdfTUFDSF9LQUZBIGlzIG5vdCBzZXQKLQotIwotIyBBVDkxIEJvYXJkIE9wdGlvbnMKLSMKLQotIwotIyBBVDkxIEZlYXR1cmUgU2VsZWN0aW9ucwotIwogQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUz15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTIwVD15Ci1DT05GSUdfQ1BVXzMydjRUPXkKLUNPTkZJR19DUFVfQUJSVF9FVjRUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVjRXVD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15Ci1DT05GSUdfT0FCSV9DT01QQVQ9eQotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi0jIENPTkZJR19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSIiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19LRVhFQz15Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX01JU0M9bQotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD1tCi1DT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj1tCi0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfSVBJUD1tCiBDT05GSUdfTkVUX0lQR1JFPW0KLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAogQ09ORklHX0lORVRfQUg9bQogQ09ORklHX0lORVRfRVNQPW0KIENPTkZJR19JTkVUX0lQQ09NUD1tCi1DT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9UVU5ORUw9bQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KIENPTkZJR19JTkVUX0RJQUc9bQotQ09ORklHX0lORVRfVENQX0RJQUc9bQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotQ09ORklHX0lQVjY9bQogQ09ORklHX0lQVjZfUFJJVkFDWT15CiBDT05GSUdfSVBWNl9ST1VURVJfUFJFRj15CiBDT05GSUdfSVBWNl9ST1VURV9JTkZPPXkKIENPTkZJR19JTkVUNl9BSD1tCiBDT05GSUdfSU5FVDZfRVNQPW0KIENPTkZJR19JTkVUNl9JUENPTVA9bQotQ09ORklHX0lQVjZfTUlQNj15Ci1DT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQotQ09ORklHX0lORVQ2X1RVTk5FTD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQorQ09ORklHX0lQVjZfTUlQNj1tCiBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OPW0KLUNPTkZJR19JUFY2X1NJVD1tCiBDT05GSUdfSVBWNl9UVU5ORUw9bQotIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAogQ09ORklHX0JSSURHRT1tCiBDT05GSUdfVkxBTl84MDIxUT1tCi0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotQ09ORklHX0xMQz1tCi0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKIENPTkZJR19CVD1tCiBDT05GSUdfQlRfTDJDQVA9bQogQ09ORklHX0JUX1NDTz1tCkBAIC0zNTksNDI5ICs1NSw3MCBAQAogQ09ORklHX0JUX0JORVBfTUNfRklMVEVSPXkKIENPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUj15CiBDT05GSUdfQlRfSElEUD1tCi0KLSMKLSMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCi0jCi1DT05GSUdfQlRfSENJVVNCPW0KLUNPTkZJR19CVF9IQ0lVU0JfU0NPPXkKLSMgQ09ORklHX0JUX0hDSVVBUlQgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQkNNMjAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCUEExMFggaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQkZVU0IgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJVkhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj1tCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCi0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDgwMDAwMDAKLUNPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTIKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPW0KLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19FRVBST01fTEVHQUNZPW0KIENPTkZJR19TQ1NJPW0KLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9bQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfU1I9bQogQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKIENPTkZJR19DSFJfREVWX1NHPW0KLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwotIwotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwotIwotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKIENPTkZJR19UVU49bQotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15CiBDT05GSUdfQVJNX0FUOTFfRVRIRVI9eQotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0NBVEM9bQorQ09ORklHX1VTQl9LQVdFVEg9bQorQ09ORklHX1VTQl9QRUdBU1VTPW0KK0NPTkZJR19VU0JfUlRMODE1MD1tCitDT05GSUdfVVNCX1VTQk5FVD1tCitDT05GSUdfVVNCX05FVF9ETTk2MDE9bQorQ09ORklHX1VTQl9ORVRfR0w2MjBBPW0KK0NPTkZJR19VU0JfTkVUX1BMVVNCPW0KK0NPTkZJR19VU0JfTkVUX01DUzc4MzA9bQorQ09ORklHX1VTQl9ORVRfUk5ESVNfSE9TVD1tCitDT05GSUdfVVNCX0FMSV9NNTYzMj15CitDT05GSUdfVVNCX0FOMjcyMD15CitDT05GSUdfVVNCX0VQU09OMjg4OD15CitDT05GSUdfVVNCX0tDMjE5MD15CiBDT05GSUdfUFBQPW0KLSMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAogQ09ORklHX1BQUF9GSUxURVI9eQogQ09ORklHX1BQUF9BU1lOQz1tCi0jIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAogQ09ORklHX1BQUF9ERUZMQVRFPW0KIENPTkZJR19QUFBfQlNEQ09NUD1tCiBDT05GSUdfUFBQX01QUEU9bQogQ09ORklHX1BQUE9FPW0KIENPTkZJR19TTElQPW0KIENPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQotQ09ORklHX1NMSEM9bQogQ09ORklHX1NMSVBfU01BUlQ9eQogQ09ORklHX1NMSVBfTU9ERV9TTElQNj15Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCi0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9BVE1FTD15CiBDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotCi0jCi0jIElQTUkKLSMKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLUNPTkZJR19XQVRDSERPRz15Ci1DT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19BVDkxUk05MjAwX1dBVENIRE9HPW0KLQotIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT1tCi0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwogQ09ORklHX0kyQz1tCiBDT05GSUdfSTJDX0NIQVJERVY9bQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi1DT05GSUdfSTJDX0FMR09CSVQ9bQotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwogQ09ORklHX0kyQ19HUElPPW0KLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotQ09ORklHX1NFTlNPUlNfRFMxMzM3PW0KLUNPTkZJR19TRU5TT1JTX0RTMTM3ND1tCi1DT05GSUdfRUVQUk9NX0xFR0FDWT1tCi1DT05GSUdfU0VOU09SU19QQ0Y4NTc0PW0KLUNPTkZJR19TRU5TT1JTX1BDQTk1Mzk9bQotQ09ORklHX1NFTlNPUlNfUENGODU5MT1tCi0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCi0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCiBDT05GSUdfSFdNT049bQotQ09ORklHX0hXTU9OX1ZJRD1tCi0jIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVSBpcyBub3Qgc2V0CiBDT05GSUdfU0VOU09SU19BRE0xMDIxPW0KIENPTkZJR19TRU5TT1JTX0FETTEwMjU9bQogQ09ORklHX1NFTlNPUlNfQURNMTAyNj1tCiBDT05GSUdfU0VOU09SU19BRE0xMDI5PW0KIENPTkZJR19TRU5TT1JTX0FETTEwMzE9bQogQ09ORklHX1NFTlNPUlNfQURNOTI0MD1tCi0jIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKIENPTkZJR19TRU5TT1JTX0RTMTYyMT1tCi0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GU0NIRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GU0NQT1MgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfR0w1MThTTT1tCiBDT05GSUdfU0VOU09SU19HTDUyMFNNPW0KIENPTkZJR19TRU5TT1JTX0lUODc9bQpAQCAtNzk2LDQ0MCArMTMzLDQ5IEBACiBDT05GSUdfU0VOU09SU19MTTkwPW0KIENPTkZJR19TRU5TT1JTX0xNOTI9bQogQ09ORklHX1NFTlNPUlNfTUFYMTYxOT1tCi0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX1BDRjg1OTE9bQogQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5Nz1tCi0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiBDT05GSUdfU0VOU09SU19XODM3ODFEPW0KIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQ9bQogQ09ORklHX1NFTlNPUlNfVzgzNzkyRD1tCiBDT05GSUdfU0VOU09SU19XODM3OTM9bQogQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTPW0KLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZGV2aWNlcwotIwotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0KLSMKLSMgSElEIERldmljZXMKLSMKK0NPTkZJR19XQVRDSERPRz15CitDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQorQ09ORklHX0FUOTFSTTkyMDBfV0FUQ0hET0c9bQogQ09ORklHX0hJRD1tCi0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQj1tCi0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9bQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKIENPTkZJR19VU0JfQUNNPW0KIENPTkZJR19VU0JfUFJJTlRFUj1tCi0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKIENPTkZJR19VU0JfU1RPUkFHRT1tCi0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD1tCi0jIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FJUFRFSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0FDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1RDTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi1DT05GSUdfVVNCX0NBVEM9bQotQ09ORklHX1VTQl9LQVdFVEg9bQotQ09ORklHX1VTQl9QRUdBU1VTPW0KLUNPTkZJR19VU0JfUlRMODE1MD1tCi1DT05GSUdfVVNCX1VTQk5FVF9NSUk9bQotQ09ORklHX1VTQl9VU0JORVQ9bQotQ09ORklHX1VTQl9ORVRfQVg4ODE3WD1tCi1DT05GSUdfVVNCX05FVF9DRENFVEhFUj1tCi1DT05GSUdfVVNCX05FVF9ETTk2MDE9bQotQ09ORklHX1VTQl9ORVRfR0w2MjBBPW0KLUNPTkZJR19VU0JfTkVUX05FVDEwODA9bQotQ09ORklHX1VTQl9ORVRfUExVU0I9bQotQ09ORklHX1VTQl9ORVRfTUNTNzgzMD1tCi1DT05GSUdfVVNCX05FVF9STkRJU19IT1NUPW0KLUNPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVQ9bQotQ09ORklHX1VTQl9BTElfTTU2MzI9eQotQ09ORklHX1VTQl9BTjI3MjA9eQotQ09ORklHX1VTQl9CRUxLSU49eQotQ09ORklHX1VTQl9BUk1MSU5VWD15Ci1DT05GSUdfVVNCX0VQU09OMjg4OD15Ci1DT05GSUdfVVNCX0tDMjE5MD15Ci1DT05GSUdfVVNCX05FVF9aQVVSVVM9bQotIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKIENPTkZJR19VU0JfU0VSSUFMPW0KIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUM9eQotIyBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0FJUlBSSU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQVJLMzExNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0JFTEtJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9FTVBFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRlVOU09GVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSVBBUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9USSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lQVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tMU0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTkFWTUFOIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX1BMMjMwMz1tCi0jIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9USSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1hJUkNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX09QVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKIENPTkZJR19NTUM9bQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19NTUNfQkxPQ0s9bQogQ09ORklHX01NQ19BVDkxPW0KLQotIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9bQotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotCi0jCi0jIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9BVDkxUk05MjAwPW0KLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPW0KLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9bQogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9bQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCiBDT05GSUdfSVNPOTY2MF9GUz1tCiBDT05GSUdfSk9MSUVUPXkKLSMgQ09ORklHX1pJU09GUyBpcyBub3Qgc2V0CiBDT05GSUdfVURGX0ZTPW0KLUNPTkZJR19VREZfTkxTPXkKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPW0KIENPTkZJR19NU0RPU19GUz1tCiBDT05GSUdfVkZBVF9GUz1tCi1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCiBDT05GSUdfTlRGU19GUz1tCi0jIENPTkZJR19OVEZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfUlcgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQogQ09ORklHX0pGRlMyX1NVTU1BUlk9eQotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQotQ09ORklHX0pGRlMyX1pMSUI9eQotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKLSMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCiBDT05GSUdfTkZTX0ZTPW0KLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPW0KLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9bQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogQ09ORklHX1NNQl9GUz1tCi0jIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAogQ09ORklHX0NJRlM9bQotIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19BTUlHQV9QQVJUSVRJT049eQotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPW0KIENPTkZJR19OTFNfREVGQVVMVD0idXRmLTgiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCiBDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCkBAIC0xMjY5LDExNSArMjE1LDI4IEBACiBDT05GSUdfTkxTX0tPSThfUj1tCiBDT05GSUdfTkxTX0tPSThfVT1tCiBDT05GSUdfTkxTX1VURjg9bQotCi0jCi0jIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgotIwotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0ZPUkNFRF9JTkxJTklORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTEw9eQotIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9bQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotQ09ORklHX0NSWVBUT19IQVNIPW0KLUNPTkZJR19DUllQVE9fTUFOQUdFUj1tCi1DT05GSUdfQ1JZUFRPX0hNQUM9bQotQ09ORklHX0NSWVBUT19YQ0JDPW0KIENPTkZJR19DUllQVE9fTlVMTD1tCitDT05GSUdfQ1JZUFRPX1RFU1Q9bQorQ09ORklHX0NSWVBUT19MUlc9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KK0NPTkZJR19DUllQVE9fWENCQz1tCiBDT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT1tCi1DT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCiBDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCi1DT05GSUdfQ1JZUFRPX1dQNTEyPW0KIENPTkZJR19DUllQVE9fVEdSMTkyPW0KLUNPTkZJR19DUllQVE9fR0YxMjhNVUw9bQotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9bQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLUNPTkZJR19DUllQVE9fTFJXPW0KLUNPTkZJR19DUllQVE9fREVTPW0KLUNPTkZJR19DUllQVE9fRkNSWVBUPW0KK0NPTkZJR19DUllQVE9fV1A1MTI9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQogQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCi1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQotQ09ORklHX0NSWVBUT19BRVM9bQorQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KIENPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KIENPTkZJR19DUllQVE9fS0hBWkFEPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLUNPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQotQ09ORklHX0NSWVBUT19URVNUPW0KLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19DUkNfQ0NJVFQ9bQotQ09ORklHX0NSQzE2PW0KLUNPTkZJR19DUkMzMj15CitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KIENPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcGxlYl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3BsZWJfZGVmY29uZmlnCmluZGV4IGRiZmFiYjUuLmQxZWZiZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcGxlYl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9wbGViX2RlZmNvbmZpZwpAQCAtMSw3NDUgKzEsNTcgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCi0jIFN1biBNYXIgMjcgMjI6MDM6MDIgMjAwNQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSU9NQVA9eQotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAotIyBDT05GSUdfS09CSkVDVF9VRVZFTlQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCi1DT05GSUdfVElOWV9TSE1FTT15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TQTExMDA9eQotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLQotIwotIyBTQTExeDAgSW1wbGVtZW50YXRpb25zCi0jCi0jIENPTkZJR19TQTExMDBfQVNTQUJFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfQ0VSRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfQ09MTElFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9IMzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSDM2MDAgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0JBREdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSk9STkFEQTcyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSEFDS0tJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfTEFSVCBpcyBub3Qgc2V0CiBDT05GSUdfU0ExMTAwX1BMRUI9eQotIyBDT05GSUdfU0ExMTAwX1NIQU5OT04gaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX1NJTVBBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfU1NQIGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9TQTExMDA9eQotQ09ORklHX0NQVV8zMnY0PXkKLUNPTkZJR19DUFVfQUJSVF9FVjQ9eQotQ09ORklHX0NQVV9DQUNIRV9WNFdCPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCPXkKLUNPTkZJR19DUFVfTUlOSUNBQ0hFPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLQotIwotIyBCdXMgc3VwcG9ydAotIwotQ09ORklHX0lTQT15Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0RJU0NPTlRJR01FTT15Ci0jIENPTkZJR19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNBMCw5NjAwIG1lbT0xNk1AMHhjMDAwMDAwMCBtZW09MTZNQDB4YzgwMDAwMDAgcm9vdD0vZGV2L3JhbSBpbml0cmQ9MHhjMDQwMDAwMCw0TSIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotCi0jCi0jIENQVSBGcmVxdWVuY3kgc2NhbGluZwotIwotQ09ORklHX0NQVV9GUkVRPXkKLUNPTkZJR19DUFVfRlJFUV9UQUJMRT15Ci0jIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfU1RBVD15Ci0jIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFMgaXMgbm90IHNldAogQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFPXkKLSMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfR09WX1BFUkZPUk1BTkNFPXkKLSMgQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EPXkKLUNPTkZJR19DUFVfRlJFUV9TQTExMDA9eQotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKK0NPTkZJR19ORVQ9eQorQ09ORklHX1BBQ0tFVD15CitDT05GSUdfVU5JWD15CitDT05GSUdfSU5FVD15CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQotQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQogQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1NBMTEwMD15Ci0jIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QTlAgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9YRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAotIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVENQRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIEFSQ25ldCBkZXZpY2VzCi0jCi0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIwogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX1NNQyBpcyBub3Qgc2V0CiBDT05GSUdfU01DOTFYPXkKLSMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAotIyBDT05GSUdfQVQxNzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JU0EgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19TT1VORF9HQU1FUE9SVD15Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX1NBMTEwMD15CiBDT05GSUdfU0VSSUFMX1NBMTEwMF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfRkIgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCi0jIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz1tCiBDT05GSUdfTVNET1NfRlM9bQogQ09ORklHX1ZGQVRfRlM9bQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfU1lTRlM9eQotIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCiBDT05GSUdfTkZTX0ZTPW0KIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLUNPTkZJR19ORlNfRElSRUNUSU89eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9bQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19TVU5SUEM9bQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwogQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9wbng0MDA4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcG54NDAwOF9kZWZjb25maWcKaW5kZXggMmY3YjljZS4uYmQ0ODFmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9wbng0MDA4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3BueDQwMDhfZGVmY29uZmlnCkBAIC0xLDI3MiArMSw1NSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjNgotIyBNb24gU2VwIDExIDEzOjU5OjI0IDIwMDYKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CiBDT05GSUdfQVVESVQ9eQotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCi0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1BOWDQwMDg9eQotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTI2VD15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXQj15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCiBDT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfSFo9MTAwCi0jIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJtZW09NjRNIGNvbnNvbGU9dHR5UzAsMTE1MjAwIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRlAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQogQ09ORklHX0JJTkZNVF9BT1VUPW0KIENPTkZJR19CSU5GTVRfTUlTQz1tCi0jIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwogQ09ORklHX1BNPXkKLUNPTkZJR19QTV9MRUdBQ1k9eQotIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQVBNIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15Ci1DT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKLUNPTkZJR19JUF9ST1VURV9GV01BUks9eQogQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15Ci0jIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhfQ0FDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKIENPTkZJR19JUF9NUk9VVEU9eQogQ09ORklHX0lQX1BJTVNNX1YxPXkKIENPTkZJR19JUF9QSU1TTV9WMj15Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15CiBDT05GSUdfSU5FVF9BSD1tCiBDT05GSUdfSU5FVF9FU1A9bQogQ09ORklHX0lORVRfSVBDT01QPW0KLUNPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KLUNPTkZJR19JTkVUX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKLQotIwotIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgotIworQ09ORklHX0lQVjZfUFJJVkFDWT15CitDT05GSUdfSU5FVDZfQUg9bQorQ09ORklHX0lORVQ2X0VTUD1tCitDT05GSUdfSU5FVDZfSVBDT01QPW0KK0NPTkZJR19JUFY2X1RVTk5FTD1tCitDT05GSUdfTkVURklMVEVSPXkKIENPTkZJR19JUF9WUz1tCi0jIENPTkZJR19JUF9WU19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfVlNfVEFCX0JJVFM9MTIKLQotIwotIyBJUFZTIHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0Ci0jCiBDT05GSUdfSVBfVlNfUFJPVE9fVENQPXkKIENPTkZJR19JUF9WU19QUk9UT19VRFA9eQogQ09ORklHX0lQX1ZTX1BST1RPX0VTUD15CiBDT05GSUdfSVBfVlNfUFJPVE9fQUg9eQotCi0jCi0jIElQVlMgc2NoZWR1bGVyCi0jCiBDT05GSUdfSVBfVlNfUlI9bQogQ09ORklHX0lQX1ZTX1dSUj1tCiBDT05GSUdfSVBfVlNfTEM9bQpAQCAtMjc3LDY0ICs2MCwxMCBAQAogQ09ORklHX0lQX1ZTX1NIPW0KIENPTkZJR19JUF9WU19TRUQ9bQogQ09ORklHX0lQX1ZTX05RPW0KLQotIwotIyBJUFZTIGFwcGxpY2F0aW9uIGhlbHBlcgotIwogQ09ORklHX0lQX1ZTX0ZUUD1tCi1DT05GSUdfSVBWNj1tCi1DT05GSUdfSVBWNl9QUklWQUNZPXkKLSMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAotQ09ORklHX0lORVQ2X0FIPW0KLUNPTkZJR19JTkVUNl9FU1A9bQotQ09ORklHX0lORVQ2X0lQQ09NUD1tCi1DT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQotQ09ORklHX0lORVQ2X1RVTk5FTD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCi1DT05GSUdfSVBWNl9UVU5ORUw9bQotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19CUklER0VfTkVURklMVEVSPXkKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfSVBfTkZfQ09OTlRSQUNLPW0KLUNPTkZJR19JUF9ORl9DVF9BQ0NUPXkKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSz15Ci0jIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfRVZFTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9DVF9QUk9UT19TQ1RQPW0KLUNPTkZJR19JUF9ORl9GVFA9bQotQ09ORklHX0lQX05GX0lSQz1tCi0jIENPTkZJR19JUF9ORl9ORVRCSU9TX05TIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9URlRQPW0KLUNPTkZJR19JUF9ORl9BTUFOREE9bQotIyBDT05GSUdfSVBfTkZfUFBUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9IMzIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX1NJUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfUVVFVUU9bQotCi0jCi0jIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCiBDT05GSUdfSVA2X05GX1FVRVVFPW0KLQotIwotIyBERUNuZXQ6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCiBDT05GSUdfREVDTkVUX05GX0dSQUJVTEFUT1I9bQotCi0jCi0jIEJyaWRnZTogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKIENPTkZJR19CUklER0VfTkZfRUJUQUJMRVM9bQogQ09ORklHX0JSSURHRV9FQlRfQlJPVVRFPW0KIENPTkZJR19CUklER0VfRUJUX1RfRklMVEVSPW0KQEAgLTM1NCw0MiArODMsMTcgQEAKIENPTkZJR19CUklER0VfRUJUX1JFRElSRUNUPW0KIENPTkZJR19CUklER0VfRUJUX1NOQVQ9bQogQ09ORklHX0JSSURHRV9FQlRfTE9HPW0KLSMgQ09ORklHX0JSSURHRV9FQlRfVUxPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKIENPTkZJR19JUF9TQ1RQPW0KLSMgQ09ORklHX1NDVFBfREJHX01TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0RCR19PQkpDTlQgaXMgbm90IHNldAotIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAotQ09ORklHX1NDVFBfSE1BQ19NRDU9eQotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiBDT05GSUdfQVRNPXkKIENPTkZJR19BVE1fQ0xJUD15Ci0jIENPTkZJR19BVE1fQ0xJUF9OT19JQ01QIGlzIG5vdCBzZXQKIENPTkZJR19BVE1fTEFORT1tCiBDT05GSUdfQVRNX01QT0E9bQogQ09ORklHX0FUTV9CUjI2ODQ9bQotIyBDT05GSUdfQVRNX0JSMjY4NF9JUEZJTFRFUiBpcyBub3Qgc2V0CiBDT05GSUdfQlJJREdFPW0KIENPTkZJR19WTEFOXzgwMjFRPW0KIENPTkZJR19ERUNORVQ9bQotIyBDT05GSUdfREVDTkVUX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfTExDPW0KIENPTkZJR19MTEMyPW0KIENPTkZJR19JUFg9bQotIyBDT05GSUdfSVBYX0lOVEVSTiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBTEs9bQogQ09ORklHX0RFVl9BUFBMRVRBTEs9bQogQ09ORklHX0lQRERQPW0KQEAgLTM5NywyMyArMTAxLDExIEBACiBDT05GSUdfSVBERFBfREVDQVA9eQogQ09ORklHX1gyNT1tCiBDT05GSUdfTEFQQj1tCi0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKIENPTkZJR19FQ09ORVQ9bQogQ09ORklHX0VDT05FVF9BVU5VRFA9eQogQ09ORklHX0VDT05FVF9OQVRJVkU9eQogQ09ORklHX1dBTl9ST1VURVI9bQotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwogQ09ORklHX05FVF9TQ0hFRD15Ci1DT05GSUdfTkVUX1NDSF9DTEtfSklGRklFUz15Ci0jIENPTkZJR19ORVRfU0NIX0NMS19HRVRUSU1FT0ZEQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSF9DTEtfQ1BVIGlzIG5vdCBzZXQKLQotIwotIyBRdWV1ZWluZy9TY2hlZHVsaW5nCi0jCiBDT05GSUdfTkVUX1NDSF9DQlE9bQogQ09ORklHX05FVF9TQ0hfSFRCPW0KIENPTkZJR19ORVRfU0NIX0hGU0M9bQpAQCAtNDI2LDMwMyArMTE4LDcxIEBACiBDT05GSUdfTkVUX1NDSF9HUkVEPW0KIENPTkZJR19ORVRfU0NIX0RTTUFSSz1tCiBDT05GSUdfTkVUX1NDSF9ORVRFTT1tCi1DT05GSUdfTkVUX1NDSF9JTkdSRVNTPW0KLQotIwotIyBDbGFzc2lmaWNhdGlvbgotIwotQ09ORklHX05FVF9DTFM9eQotIyBDT05GSUdfTkVUX0NMU19CQVNJQyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0NMU19UQ0lOREVYPW0KIENPTkZJR19ORVRfQ0xTX1JPVVRFND1tCi1DT05GSUdfTkVUX0NMU19ST1VURT15CiBDT05GSUdfTkVUX0NMU19GVz1tCiBDT05GSUdfTkVUX0NMU19VMzI9bQotIyBDT05GSUdfQ0xTX1UzMl9QRVJGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NMU19VMzJfTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0NMU19SU1ZQPW0KIENPTkZJR19ORVRfQ0xTX1JTVlA2PW0KLSMgQ09ORklHX05FVF9FTUFUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19BQ1QgaXMgbm90IHNldAotQ09ORklHX05FVF9DTFNfUE9MSUNFPXkKLSMgQ09ORklHX05FVF9DTFNfSU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRVNUSU1BVE9SPXkKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKIENPTkZJR19ORVRfUEtUR0VOPW0KLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMT1tCi0jIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUCBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15Ci1DT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCi0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAogQ09ORklHX01URF9TTFJBTT1tCiBDT05GSUdfTVREX1BIUkFNPW0KIENPTkZJR19NVERfTVREUkFNPW0KLUNPTkZJR19NVERSQU1fVE9UQUxfU0laRT00MDk2Ci1DT05GSUdfTVREUkFNX0VSQVNFX1NJWkU9MTI4Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKIENPTkZJR19NVERfRE9DMjAwMD1tCiBDT05GSUdfTVREX0RPQzIwMDE9bQogQ09ORklHX01URF9ET0MyMDAxUExVUz1tCi1DT05GSUdfTVREX0RPQ1BST0JFPW0KLUNPTkZJR19NVERfRE9DRUNDPW0KLSMgQ09ORklHX01URF9ET0NQUk9CRV9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0RPQ1BST0JFX0FERFJFU1M9MAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKIENPTkZJR19NVERfTkFORD15Ci0jIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfSURTPXkKLSMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX05BTkRTSU09bQotCi0jCi0jIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9eQogQ09ORklHX0JMS19ERVZfTkJEPXkKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0NEUk9NX1BLVENEVkQ9bQotQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX0VFUFJPTV9MRUdBQ1k9bQogQ09ORklHX1NDU0k9bQotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPW0KIENPTkZJR19DSFJfREVWX1NUPW0KIENPTkZJR19DSFJfREVWX09TU1Q9bQogQ09ORklHX0JMS19ERVZfU1I9bQotIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9bQogQ09ORklHX0NIUl9ERVZfU0NIPW0KLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKIENPTkZJR19TQ1NJX01VTFRJX0xVTj15CiBDT05GSUdfU0NTSV9DT05TVEFOVFM9eQogQ09ORklHX1NDU0lfTE9HR0lORz15Ci0KLSMKLSMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcwotIwogQ09ORklHX1NDU0lfU1BJX0FUVFJTPW0KIENPTkZJR19TQ1NJX0ZDX0FUVFJTPW0KLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9TQVRBPW0KIENPTkZJR19TQ1NJX0RFQlVHPW0KLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19EVU1NWT1tCiBDT05GSUdfQk9ORElORz1tCiBDT05GSUdfRVFVQUxJWkVSPW0KIENPTkZJR19UVU49bQotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST1tCi0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotQ09ORklHX05FVF9SQURJTz15Ci0jIENPTkZJR19ORVRfV0lSRUxFU1NfUlRORVRMSU5LIGlzIG5vdCBzZXQKLQotIwotIyBPYnNvbGV0ZSBXaXJlbGVzcyBjYXJkcyBzdXBwb3J0IChwcmUtODAyLjExKQotIwotQ09ORklHX1NUUklQPW0KLSMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIworQ09ORklHX1VTQl9DQVRDPW0KK0NPTkZJR19VU0JfS0FXRVRIPW0KK0NPTkZJR19VU0JfUEVHQVNVUz1tCitDT05GSUdfVVNCX1JUTDgxNTA9bQorQ09ORklHX1VTQl9VU0JORVQ9bQorIyBDT05GSUdfVVNCX05FVF9DRENfU1VCU0VUIGlzIG5vdCBzZXQKIENPTkZJR19XQU49eQogQ09ORklHX0hETEM9bQotQ09ORklHX0hETENfUkFXPXkKLUNPTkZJR19IRExDX1JBV19FVEg9eQotQ09ORklHX0hETENfQ0lTQ089eQotQ09ORklHX0hETENfRlI9eQotQ09ORklHX0hETENfUFBQPXkKLUNPTkZJR19IRExDX1gyNT15CitDT05GSUdfSERMQ19SQVc9bQorQ09ORklHX0hETENfUkFXX0VUSD1tCitDT05GSUdfSERMQ19DSVNDTz1tCitDT05GSUdfSERMQ19GUj1tCitDT05GSUdfSERMQ19QUFA9bQorQ09ORklHX0hETENfWDI1PW0KIENPTkZJR19ETENJPW0KLUNPTkZJR19ETENJX0NPVU5UPTI0Ci1DT05GSUdfRExDSV9NQVg9OAotQ09ORklHX1dBTl9ST1VURVJfRFJJVkVSUz15CitDT05GSUdfV0FOX1JPVVRFUl9EUklWRVJTPW0KIENPTkZJR19MQVBCRVRIRVI9bQogQ09ORklHX1gyNV9BU1k9bQotCi0jCi0jIEFUTSBkcml2ZXJzCi0jCi0jIENPTkZJR19BVE1fRFVNTVkgaXMgbm90IHNldAogQ09ORklHX0FUTV9UQ1A9bQogQ09ORklHX1BQUD1tCiBDT05GSUdfUFBQX01VTFRJTElOSz15CkBAIC03MzgsNDQgKzE5OCwxNSBAQAogQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15CiBDT05GSUdfU0xJUF9TTUFSVD15CiBDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKLUNPTkZJR19TSEFQRVI9bQogQ09ORklHX05FVENPTlNPTEU9bQotQ09ORklHX05FVFBPTEw9eQotIyBDT05GSUdfTkVUUE9MTF9SWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMX1RSQVAgaXMgbm90IHNldAotQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCi0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfSk9ZREVWPW0KLUNPTkZJR19JTlBVVF9UU0RFVj1tCi1DT05GSUdfSU5QVVRfVFNERVZfU0NSRUVOX1g9MjQwCi1DT05GSUdfSU5QVVRfVFNERVZfU0NSRUVOX1k9MzIwCiBDT05GSUdfSU5QVVRfRVZERVY9bQogQ09ORklHX0lOUFVUX0VWQlVHPW0KLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci1DT05GSUdfS0VZQk9BUkRfU1VOS0JEPW0KIENPTkZJR19LRVlCT0FSRF9MS0tCRD1tCi1DT05GSUdfS0VZQk9BUkRfWFRLQkQ9bQogQ09ORklHX0tFWUJPQVJEX05FV1RPTj1tCi1DT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX0tFWUJPQVJEX1NVTktCRD1tCitDT05GSUdfS0VZQk9BUkRfWFRLQkQ9bQogQ09ORklHX01PVVNFX1BTMj1tCiBDT05GSUdfTU9VU0VfU0VSSUFMPW0KIENPTkZJR19NT1VTRV9WU1hYWEFBPW0KQEAgLTc5OSw3MzYgKzIzMCwxODcgQEAKIENPTkZJR19KT1lTVElDS19TUEFDRU9SQj1tCiBDT05GSUdfSk9ZU1RJQ0tfU1BBQ0VCQUxMPW0KIENPTkZJR19KT1lTVElDS19TVElOR0VSPW0KLSMgQ09ORklHX0pPWVNUSUNLX1RXSURKT1kgaXMgbm90IHNldAogQ09ORklHX0pPWVNUSUNLX0pPWURVTVA9bQogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYgaXMgbm90IHNldAogQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFPW0KLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01JU0M9eQogQ09ORklHX0lOUFVUX1VJTlBVVD1tCi0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQogQ09ORklHX1NFUklPX1NFUlBPUlQ9bQotQ09ORklHX1NFUklPX0xJQlBTMj15CiBDT05GSUdfU0VSSU9fUkFXPW0KLUNPTkZJR19HQU1FUE9SVD1tCiBDT05GSUdfR0FNRVBPUlRfTlM1NTg9bQogQ09ORklHX0dBTUVQT1JUX0w0PW0KLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CiBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CiBDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX1JTQT15Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIwotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX1NPRlRfV0FUQ0hET0c9bQotCi0jCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotQ09ORklHX1VTQlBDV0FUQ0hET0c9bQogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi1DT05GSUdfSTJDX0FMR09CSVQ9bQotQ09ORklHX0kyQ19BTEdPUENGPW0KLUNPTkZJR19JMkNfQUxHT1BDQT1tCi0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKLUNPTkZJR19FRVBST01fTEVHQUNZPW0KLUNPTkZJR19TRU5TT1JTX1BDRjg1NzQ9bQotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLUNPTkZJR19TRU5TT1JTX1BDRjg1OTE9bQotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCiBDT05GSUdfU1BJPXkKLSMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKIENPTkZJR19TUElfQklUQkFORz15Ci0KLSMKLSMgU1BJIFByb3RvY29sIE1hc3RlcnMKLSMKLQotIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCi0jCi0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIExFRCBkZXZpY2VzCi0jCi0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotQ09ORklHX0RWQj15Ci1DT05GSUdfRFZCX0NPUkU9bQotCi0jCi0jIFN1cHBvcnRlZCBVU0IgQWRhcHRlcnMKLSMKLSMgQ09ORklHX0RWQl9VU0IgaXMgbm90IHNldAotQ09ORklHX0RWQl9UVFVTQl9CVURHRVQ9bQotQ09ORklHX0RWQl9UVFVTQl9ERUM9bQotQ09ORklHX0RWQl9DSU5FUkdZVDI9bQotQ09ORklHX0RWQl9DSU5FUkdZVDJfVFVOSU5HPXkKLUNPTkZJR19EVkJfQ0lORVJHWVQyX1NUUkVBTV9VUkJfQ09VTlQ9MzIKLUNPTkZJR19EVkJfQ0lORVJHWVQyX1NUUkVBTV9CVUZfU0laRT01MTIKLUNPTkZJR19EVkJfQ0lORVJHWVQyX1FVRVJZX0lOVEVSVkFMPTI1MAotQ09ORklHX0RWQl9DSU5FUkdZVDJfRU5BQkxFX1JDX0lOUFVUX0RFVklDRT15Ci1DT05GSUdfRFZCX0NJTkVSR1lUMl9SQ19RVUVSWV9JTlRFUlZBTD0xMDAKLQotIwotIyBTdXBwb3J0ZWQgRmxleENvcElJIChCMkMyKSBBZGFwdGVycwotIwotIyBDT05GSUdfRFZCX0IyQzJfRkxFWENPUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU3VwcG9ydGVkIERWQiBGcm9udGVuZHMKLSMKLQotIwotIyBDdXN0b21pc2UgRFZCIEZyb250ZW5kcwotIwotCi0jCi0jIERWQi1TIChzYXRlbGxpdGUpIGZyb250ZW5kcwotIwotQ09ORklHX0RWQl9TVFYwMjk5PW0KLUNPTkZJR19EVkJfQ1gyNDExMD1tCi0jIENPTkZJR19EVkJfQ1gyNDEyMyBpcyBub3Qgc2V0Ci1DT05GSUdfRFZCX1REQTgwODM9bQotQ09ORklHX0RWQl9NVDMxMj1tCi1DT05GSUdfRFZCX1ZFUzFYOTM9bQotIyBDT05GSUdfRFZCX1M1SDE0MjAgaXMgbm90IHNldAotCi0jCi0jIERWQi1UICh0ZXJyZXN0cmlhbCkgZnJvbnRlbmRzCi0jCi1DT05GSUdfRFZCX1NQODg3MD1tCi1DT05GSUdfRFZCX1NQODg3WD1tCi1DT05GSUdfRFZCX0NYMjI3MDA9bQotQ09ORklHX0RWQl9DWDIyNzAyPW0KLUNPTkZJR19EVkJfTDY0NzgxPW0KLUNPTkZJR19EVkJfVERBMTAwNFg9bQotQ09ORklHX0RWQl9OWFQ2MDAwPW0KLUNPTkZJR19EVkJfTVQzNTI9bQotIyBDT05GSUdfRFZCX1pMMTAzNTMgaXMgbm90IHNldAotQ09ORklHX0RWQl9ESUIzMDAwTUI9bQotQ09ORklHX0RWQl9ESUIzMDAwTUM9bQotCi0jCi0jIERWQi1DIChjYWJsZSkgZnJvbnRlbmRzCi0jCi1DT05GSUdfRFZCX1ZFUzE4MjA9bQotQ09ORklHX0RWQl9UREExMDAyMT1tCi1DT05GSUdfRFZCX1NUVjAyOTc9bQotCi0jCi0jIEFUU0MgKE5vcnRoIEFtZXJpY2FuL0tvcmVhbiBUZXJyZXN0cmlhbC9DYWJsZSBEVFYpIGZyb250ZW5kcwotIwotIyBDT05GSUdfRFZCX05YVDIwMFggaXMgbm90IHNldAotIyBDT05GSUdfRFZCX09SNTEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX09SNTExMzIgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0JDTTM1MTAgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0xHRFQzMzBYIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGRldmljZXMKLSMKLUNPTkZJR19EVkJfTE5CUDIxPW0KLSMgQ09ORklHX0RWQl9JU0w2NDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLUNPTkZJR19GSVJNV0FSRV9FRElEPXkKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKK0NPTkZJR19XQVRDSERPRz15CitDT05GSUdfU09GVF9XQVRDSERPRz1tCitDT05GSUdfVVNCUENXQVRDSERPRz1tCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCiBDT05GSUdfU09VTkQ9bQotCi0jCi0jIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQotIwogQ09ORklHX1NORD1tCi1DT05GSUdfU05EX1RJTUVSPW0KLUNPTkZJR19TTkRfUENNPW0KLUNPTkZJR19TTkRfSFdERVA9bQotQ09ORklHX1NORF9SQVdNSURJPW0KIENPTkZJR19TTkRfU0VRVUVOQ0VSPW0KIENPTkZJR19TTkRfU0VRX0RVTU1ZPW0KLUNPTkZJR19TTkRfT1NTRU1VTD15CiBDT05GSUdfU05EX01JWEVSX09TUz1tCiBDT05GSUdfU05EX1BDTV9PU1M9bQotQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQogQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKLSMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15Ci1DT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIEdlbmVyaWMgZGV2aWNlcwotIwotQ09ORklHX1NORF9NUFU0MDFfVUFSVD1tCiBDT05GSUdfU05EX0RVTU1ZPW0KIENPTkZJR19TTkRfVklSTUlEST1tCiBDT05GSUdfU05EX01UUEFWPW0KIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MD1tCiBDT05GSUdfU05EX01QVTQwMT1tCi0KLSMKLSMgQUxTQSBBUk0gZGV2aWNlcwotIwotCi0jCi0jIFVTQiBkZXZpY2VzCi0jCiBDT05GSUdfU05EX1VTQl9BVURJTz1tCi0KLSMKLSMgT3BlbiBTb3VuZCBTeXN0ZW0KLSMKIENPTkZJR19TT1VORF9QUklNRT1tCi0jIENPTkZJR19PU1NfT0JTT0xFVEVfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX01TTkRDTEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX01TTkRQSU4gaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwotQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci1DT05GSUdfVVNCX0JBTkRXSURUSD15Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotQ09ORklHX1VTQl9TTDgxMV9IQ0Q9bQotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotQ09ORklHX1VTQl9BQ009bQotQ09ORklHX1VTQl9QUklOVEVSPW0KLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwotQ09ORklHX1VTQl9TVE9SQUdFPW0KLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCPXkKLUNPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NPXkKLUNPTkZJR19VU0JfU1RPUkFHRV9EUENNPXkKLUNPTkZJR19VU0JfU1RPUkFHRV9VU0JBVD15Ci1DT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5PXkKLUNPTkZJR19VU0JfU1RPUkFHRV9TRERSNTU9eQotQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCiBDT05GSUdfVVNCX0hJRD1tCi1DT05GSUdfVVNCX0hJRElOUFVUPXkKLSMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfSElEREVWPXkKLQotIwotIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwotIwogQ09ORklHX1VTQl9LQkQ9bQogQ09ORklHX1VTQl9NT1VTRT1tCi1DT05GSUdfVVNCX0FJUFRFSz1tCi1DT05GSUdfVVNCX1dBQ09NPW0KLSMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAotQ09ORklHX1VTQl9LQlRBQj1tCi1DT05GSUdfVVNCX1BPV0VSTUFURT1tCi0jIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAotQ09ORklHX1VTQl9YUEFEPW0KLUNPTkZJR19VU0JfQVRJX1JFTU9URT1tCi0jIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCitDT05GSUdfVVNCPXkKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorQ09ORklHX1VTQl9NT049eQorQ09ORklHX1VTQl9TTDgxMV9IQ0Q9bQorQ09ORklHX1VTQl9BQ009bQorQ09ORklHX1VTQl9QUklOVEVSPW0KK0NPTkZJR19VU0JfU1RPUkFHRT1tCitDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQj1tCitDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTT1tCitDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQ9bQorQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOT1tCitDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1PW0KK0NPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVD1tCiBDT05GSUdfVVNCX01EQzgwMD1tCiBDT05GSUdfVVNCX01JQ1JPVEVLPW0KLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotQ09ORklHX1VTQl9DQVRDPW0KLUNPTkZJR19VU0JfS0FXRVRIPW0KLUNPTkZJR19VU0JfUEVHQVNVUz1tCi1DT05GSUdfVVNCX1JUTDgxNTA9bQotQ09ORklHX1VTQl9VU0JORVQ9bQotQ09ORklHX1VTQl9ORVRfQVg4ODE3WD1tCi1DT05GSUdfVVNCX05FVF9DRENFVEhFUj1tCi0jIENPTkZJR19VU0JfTkVUX0dMNjIwQSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX05FVF9ORVQxMDgwPW0KLSMgQ09ORklHX1VTQl9ORVRfUExVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9STkRJU19IT1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX05FVF9aQVVSVVM9bQotQ09ORklHX1VTQl9NT049eQotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCiBDT05GSUdfVVNCX1NFUklBTD1tCiBDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDPXkKLSMgQ09ORklHX1VTQl9TRVJJQUxfQUlSUFJJTUUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2IGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0JFTEtJTj1tCiBDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQ9bQogQ09ORklHX1VTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUPW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTAxIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTg9bQogQ09ORklHX1VTQl9TRVJJQUxfRU1QRUc9bQogQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU89bQotIyBDT05GSUdfVVNCX1NFUklBTF9GVU5TT0ZUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SPW0KIENPTkZJR19VU0JfU0VSSUFMX0lQQVE9bQogQ09ORklHX1VTQl9TRVJJQUxfSVI9bQogQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQ9bQogQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlRfVEk9bQotIyBDT05GSUdfVVNCX1NFUklBTF9HQVJNSU4gaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfSVBXPW0KIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBPW0KIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU49bQotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX01QUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjhYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjhYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE4WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTlXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOVFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOVFJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0E0OVcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTQ5V0xDIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0tMU0k9bQogQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUPW0KIENPTkZJR19VU0JfU0VSSUFMX01DVF9VMjMyPW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfTkFWTUFOIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX1BMMjMwMz1tCi0jIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfU0FGRT1tCi0jIENPTkZJR19VU0JfU0VSSUFMX1NBRkVfUEFEREVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9USSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0s9bQogQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NPW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQ9bQotQ09ORklHX1VTQl9FWlVTQj15Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0FVRVJTV0FMRD1tCiBDT05GSUdfVVNCX1JJTzUwMD1tCiBDT05GSUdfVVNCX0xFR09UT1dFUj1tCiBDT05GSUdfVVNCX0xDRD1tCiBDT05GSUdfVVNCX0xFRD1tCi0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogQ09ORklHX1VTQl9DWVRIRVJNPW0KLUNPTkZJR19VU0JfUEhJREdFVEtJVD1tCi1DT05GSUdfVVNCX1BISURHRVRTRVJWTz1tCi0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1RFU1Q9bQotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwogQ09ORklHX1VTQl9BVE09bQogQ09ORklHX1VTQl9TUEVFRFRPVUNIPW0KLSMgQ09ORklHX1VTQl9DWEFDUlUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VFQUdMRUFUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWFVTQkFUTSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCiBDT05GSUdfVVNCX0dBREdFVD1tCi0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEPXkKLUNPTkZJR19VU0JfRFVNTVlfSENEPW0KLUNPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15CiBDT05GSUdfVVNCX1pFUk89bQogQ09ORklHX1VTQl9FVEg9bQotQ09ORklHX1VTQl9FVEhfUk5ESVM9eQogQ09ORklHX1VTQl9HQURHRVRGUz1tCiBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRT1tCi0jIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX1VTQl9HX1NFUklBTD1tCi0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwogQ09ORklHX01NQz1tCi0jIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX01NQ19CTE9DSz1tCi0KLSMKLSMgUmVhbCBUaW1lIENsb2NrCi0jCi1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDJfRlNfWEFUVFI9eQogQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPW0KLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci1DT05GSUdfSkJEPW0KLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15CiBDT05GSUdfUkVJU0VSRlNfRlM9bQotIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19SRUlTRVJGU19GU19YQVRUUj15CiBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWT15CiBDT05GSUdfSkZTX0ZTPW0KIENPTkZJR19KRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0pGU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0pGU19TVEFUSVNUSUNTPXkKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQogQ09ORklHX1hGU19GUz1tCiBDT05GSUdfWEZTX1FVT1RBPXkKLUNPTkZJR19YRlNfU0VDVVJJVFk9eQogQ09ORklHX1hGU19QT1NJWF9BQ0w9eQogQ09ORklHX1hGU19SVD15Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlOSVhfRlM9bQotQ09ORklHX1JPTUZTX0ZTPW0KIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQogQ09ORklHX1FVT1RBPXkKIENPTkZJR19RRk1UX1YxPW0KIENPTkZJR19RRk1UX1YyPW0KLUNPTkZJR19RVU9UQUNUTD15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfQVVUT0ZTX0ZTPW0KIENPTkZJR19BVVRPRlM0X0ZTPW0KLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKIENPTkZJR19JU085NjYwX0ZTPW0KIENPTkZJR19KT0xJRVQ9eQogQ09ORklHX1pJU09GUz15Ci1DT05GSUdfWklTT0ZTX0ZTPW0KIENPTkZJR19VREZfRlM9bQotQ09ORklHX1VERl9OTFM9eQotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9bQogQ09ORklHX01TRE9TX0ZTPW0KIENPTkZJR19WRkFUX0ZTPW0KLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKIENPTkZJR19OVEZTX0ZTPW0KLSMgQ09ORklHX05URlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19SVyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKIENPTkZJR19BREZTX0ZTPW0KLSMgQ09ORklHX0FERlNfRlNfUlcgaXMgbm90IHNldAogQ09ORklHX0FGRlNfRlM9bQogQ09ORklHX0hGU19GUz1tCiBDT05GSUdfSEZTUExVU19GUz1tCiBDT05GSUdfQkVGU19GUz1tCi0jIENPTkZJR19CRUZTX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19CRlNfRlM9bQogQ09ORklHX0VGU19GUz1tCi1DT05GSUdfSkZGU19GUz1tCi1DT05GSUdfSkZGU19GU19WRVJCT1NFPTAKLUNPTkZJR19KRkZTX1BST0NfRlM9eQogQ09ORklHX0pGRlMyX0ZTPW0KLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKIENPTkZJR19WWEZTX0ZTPW0KK0NPTkZJR19NSU5JWF9GUz1tCiBDT05GSUdfSFBGU19GUz1tCiBDT05GSUdfUU5YNEZTX0ZTPW0KK0NPTkZJR19ST01GU19GUz1tCiBDT05GSUdfU1lTVl9GUz1tCiBDT05GSUdfVUZTX0ZTPW0KLSMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKLUNPTkZJR19ORlNfRElSRUNUSU89eQotQ09ORklHX05GU0Q9bQotQ09ORklHX05GU0RfVjM9eQotIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAotQ09ORklHX05GU0RfVjQ9eQotQ09ORklHX05GU0RfVENQPXkKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19FWFBPUlRGUz1tCi1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorQ09ORklHX05GU0Q9bQorQ09ORklHX05GU0RfVjQ9eQogQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTM9bQogQ09ORklHX1NNQl9GUz1tCi0jIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAogQ09ORklHX0NJRlM9bQotIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKIENPTkZJR19OQ1BfRlM9bQogQ09ORklHX05DUEZTX1BBQ0tFVF9TSUdOSU5HPXkKIENPTkZJR19OQ1BGU19JT0NUTF9MT0NLSU5HPXkKIENPTkZJR19OQ1BGU19TVFJPTkc9eQogQ09ORklHX05DUEZTX05GU19OUz15CiBDT05GSUdfTkNQRlNfT1MyX05TPXkKLSMgQ09ORklHX05DUEZTX1NNQUxMRE9TIGlzIG5vdCBzZXQKIENPTkZJR19OQ1BGU19OTFM9eQogQ09ORklHX05DUEZTX0VYVFJBUz15CiBDT05GSUdfQ09EQV9GUz1tCi0jIENPTkZJR19DT0RBX0ZTX09MRF9BUEkgaXMgbm90IHNldAogQ09ORklHX0FGU19GUz1tCi1DT05GSUdfUlhSUEM9bQotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CiBDT05GSUdfQUNPUk5fUEFSVElUSU9OPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTl9DVU1BTkEgaXMgbm90IHNldAotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OX0VFU09YIGlzIG5vdCBzZXQKIENPTkZJR19BQ09STl9QQVJUSVRJT05fSUNTPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTl9BREZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTl9QT1dFUlRFQyBpcyBub3Qgc2V0CiBDT05GSUdfQUNPUk5fUEFSVElUSU9OX1JJU0NJWD15CiBDT05GSUdfT1NGX1BBUlRJVElPTj15CiBDT05GSUdfQU1JR0FfUEFSVElUSU9OPXkKIENPTkZJR19BVEFSSV9QQVJUSVRJT049eQogQ09ORklHX01BQ19QQVJUSVRJT049eQotQ09ORklHX01TRE9TX1BBUlRJVElPTj15CiBDT05GSUdfQlNEX0RJU0tMQUJFTD15CiBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OPXkKIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT049eQogQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTD15CiBDT05GSUdfTERNX1BBUlRJVElPTj15Ci0jIENPTkZJR19MRE1fREVCVUcgaXMgbm90IHNldAogQ09ORklHX1NHSV9QQVJUSVRJT049eQogQ09ORklHX1VMVFJJWF9QQVJUSVRJT049eQogQ09ORklHX1NVTl9QQVJUSVRJT049eQotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPW0KIENPTkZJR19OTFNfREVGQVVMVD0iY3A0MzciCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCiBDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCkBAIC0xNTY3LDk2ICs0NDksMjQgQEAKIENPTkZJR19OTFNfSVNPODg1OV8xNT1tCiBDT05GSUdfTkxTX0tPSThfUj1tCiBDT05GSUdfTkxTX0tPSThfVT1tCi1DT05GSUdfTkxTX1VURjg9bQotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19SV1NFTVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VDVVJJVFk9eQotIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDVVJJVFlfQ0FQQUJJTElUSUVTPW0KLUNPTkZJR19TRUNVUklUWV9ST09UUExVRz1tCi1DT05GSUdfU0VDVVJJVFlfU0VDTFZMPW0KLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19ITUFDPXkKIENPTkZJR19DUllQVE9fTlVMTD1tCitDT05GSUdfQ1JZUFRPX1RFU1Q9bQorQ09ORklHX0NSWVBUT19ITUFDPXkKIENPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PXkKLUNPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KIENPTkZJR19DUllQVE9fU0hBMjU2PW0KIENPTkZJR19DUllQVE9fU0hBNTEyPW0KIENPTkZJR19DUllQVE9fV1A1MTI9bQotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQotQ09ORklHX0NSWVBUT19BRVM9bQotQ09ORklHX0NSWVBUT19DQVNUNT1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q2PW0KLUNPTkZJR19DUllQVE9fVEVBPW0KLUNPTkZJR19DUllQVE9fQVJDND1tCi1DT05GSUdfQ1JZUFRPX0tIQVpBRD1tCiBDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCi1DT05GSUdfQ1JZUFRPX1RFU1Q9bQotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCi0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQorQ09ORklHX0NSWVBUT19LSEFaQUQ9bQorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCiBDT05GSUdfQ1JDMTY9bQotQ09ORklHX0NSQzMyPXkKLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPW0KLUNPTkZJR19URVhUU0VBUkNIPXkKLUNPTkZJR19URVhUU0VBUkNIX0tNUD1tCi1DT05GSUdfUExJU1Q9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9weGExNjhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9weGExNjhfZGVmY29uZmlnCmluZGV4IDExMzUxMWYuLjc0ZDdlMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcHhhMTY4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3B4YTE2OF9kZWZjb25maWcKQEAgLTEsOTczICsxLDcwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMzCi0jIFR1ZSBKYW4gMTIgMDg6NTc6MTAgMjAxMAotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQotQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15Ci1DT05GSUdfS0VSTkVMX0daSVA9eQotIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9DTEs9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotQ09ORklHX01NVT15Ci0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05PTUFESUsgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RPVkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9NTVA9eQotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VODUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1RBVk9SRVZCIGlzIG5vdCBzZXQKLQotIwotIyBNYXJ2ZWxsIFBYQTE2OC85MTAgSW1wbG1lbnRhdGlvbnMKLSMKIENPTkZJR19NQUNIX0FTUEVOSVRFPXkKIENPTkZJR19NQUNIX1pZTE9OSVRFMj15CiBDT05GSUdfTUFDSF9BVkVOR0VSU19MSVRFPXkKLSMgQ09ORklHX01BQ0hfVFRDX0RLQiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX1BYQTE2OD15Ci1DT05GSUdfUExBVF9QWEE9eQotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX01PSEFXSz15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQotQ09ORklHX0NQVV9QQUJSVF9MRUdBQ1k9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTUKLUNPTkZJR19JV01NWFQ9eQotQ09ORklHX0NPTU1PTl9DTEtERVY9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLSMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLSMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9OTk5OTk5Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLSMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L25mcyByb290ZnN0eXBlPW5mcyBuZnNyb290PTE5Mi4xNjguMi4xMDA6L25mc3Jvb3QvIGlwPTE5Mi4xNjguMi4xMDE6MTkyLjE2OC4yLjEwMDo6MjU1LjI1NS4yNTUuMDo6ZXRoMDpvbiBjb25zb2xlPXR0eVMwLDExNTIwMCBtZW09MTI4TSIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCi0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVYgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKIENPTkZJR19TTUM5MVg9eQotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX1BYQT15CiBDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgQUM5NyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi0jIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0FDTD15Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiBDT05GSUdfTkZTX1YzX0FDTD15CiBDT05GSUdfTkZTX1Y0PXkKLSMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19BQ0xfU1VQUE9SVD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKIENPTkZJR19QUklOVEtfVElNRT15Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BSRUVNUFQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKIENPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fVU5XSU5EPXkKIENPTkZJR19ERUJVR19VU0VSPXkKIENPTkZJR19ERUJVR19FUlJPUlM9eQotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotIyBDT05GSUdfT0NfRVRNIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcHhhMjU1LWlkcF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3B4YTI1NS1pZHBfZGVmY29uZmlnCmluZGV4IDMzNjVjNWQuLjkxN2EwNzBiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3B4YTI1NS1pZHBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcHhhMjU1LWlkcF9kZWZjb25maWcKQEAgLTEsNzk2ICsxLDU5IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmMxLWJrMgotIyBTdW4gTWFyIDI3IDIyOjIwOjE3IDIwMDUKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX01NVT15Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0lPTUFQPXkKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCi0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIworQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNT0QgaXMgbm90IHNldAotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9QWEE9eQotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLQotIwotIyBJbnRlbCBQWEEyeHggSW1wbGVtZW50YXRpb25zCi0jCi0jIENPTkZJR19BUkNIX0xVQkJPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NQUlOU1RPTkUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUFhBX0lEUD15Ci0jIENPTkZJR19QWEFfU0hBUlBTTCBpcyBub3Qgc2V0Ci1DT05GSUdfUFhBMjV4PXkKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9YU0NBTEU9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX01JTklDQUNIRT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCiAjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotQ09ORklHX1hTQ0FMRV9QTVU9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogQ09ORklHX0xFRFM9eQotQ09ORklHX0xFRFNfVElNRVI9eQogQ09ORklHX0xFRFNfQ1BVPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJyb290PS9kZXYvbmZzIGlwPWRoY3AgY29uc29sZT10dHlTMCwxMTUyMDAgbWVtPTY0TSIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKK0NPTkZJR19ORVQ9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15CiBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15Ci1DT05GSUdfTVREX0NGSV9OT1NXQVA9eQotIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfR0VPTUVUUlk9eQogIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzIgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NGSV9JMSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9FREI3MzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TSEFSUF9TTCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIwogQ09ORklHX0lERT15Ci1DT05GSUdfQkxLX0RFVl9JREU9eQotCi0jCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPXkKLSMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0Ci0KLSMKLSMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwotIwotIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29ya2luZyBzdXBwb3J0Ci0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLSMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lQX1RDUERJQUc9eQotIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15CiBDT05GSUdfU01DOTFYPXkKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci1DT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15CiAjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19TT1VORF9HQU1FUE9SVD15Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9QWEE9eQogQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCi0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCi0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKIENPTkZJR19GQj15Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotQ09ORklHX0ZCX1NPRlRfQ1VSU09SPXkKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAogQ09ORklHX0ZCX1BYQT15Ci0jIENPTkZJR19GQl9QWEFfUEFSQU1FVEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKIENPTkZJR19GT05UUz15CiBDT05GSUdfRk9OVF84eDg9eQogQ09ORklHX0ZPTlRfOHgxNj15Ci0jIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9NSU5JXzR4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0Ci0KLSMKLSMgTG9nbyBjb25maWd1cmF0aW9uCi0jCiBDT05GSUdfTE9HTz15Ci1DT05GSUdfTE9HT19MSU5VWF9NT05PPXkKLUNPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKLUNPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBYRlMgc3VwcG9ydAotIwotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9eQotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19TWVNGUz15Ci0jIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotIyBDT05GSUdfSkZGUzJfRlNfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19OT1JfRUNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwogQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogQ09ORklHX0RFQlVHX1VTRVI9eQogQ09ORklHX0RFQlVHX0VSUk9SUz15CiBDT05GSUdfREVCVUdfTEw9eQotIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9weGEzeHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9weGEzeHhfZGVmY29uZmlnCmluZGV4IDgyY2E2YzguLjE2NzdhMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcHhhM3h4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3B4YTN4eF9kZWZjb25maWcKQEAgLTEsMTMzMSArMSwxMzQgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzEKLSMgTW9uIEp1bCAxMyAyMjo0ODo0OSAyMDA5Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19IQVZFX1BXTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfQVJDSF9NVERfWElQPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0NMQVNTSUNfUkNVIGlzIG5vdCBzZXQKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTgKLUNPTkZJR19HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci0jIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfTkFNRVNQQUNFUz15Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLQotIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycwotIwotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9DTEs9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUFhBPXkKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotCi0jCi0jIEludGVsIFBYQTJ4eC9QWEEzeHggSW1wbGVtZW50YXRpb25zCi0jCi0KLSMKLSMgU3VwcG9ydGVkIFBYQTN4eCBQcm9jZXNzb3IgVmFyaWFudHMKLSMKLUNPTkZJR19DUFVfUFhBMzAwPXkKLUNPTkZJR19DUFVfUFhBMzEwPXkKLUNPTkZJR19DUFVfUFhBMzIwPXkKLUNPTkZJR19DUFVfUFhBOTMwPXkKLUNPTkZJR19DUFVfUFhBOTM1PXkKLSMgQ09ORklHX0FSQ0hfR1VNU1RJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0lOVEVMTU9URTIgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9TVEFSR0FURTIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NQUlOU1RPTkUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NUDkwMEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfSURQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVklQRVIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfRVNFUklFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUklaRVBTX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0g1MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfRU1fWDI3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0VYRURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ09MSUJSSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NPTElCUkkzMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DT0xJQlJJMzIwIGlzIG5vdCBzZXQKLUNPTkZJR19NQUNIX1pZTE9OSVRFPXkKIENPTkZJR19NQUNIX0xJVFRMRVRPTj15CiBDT05GSUdfTUFDSF9UQVZPUkVWQj15CiBDT05GSUdfTUFDSF9TQUFSPXkKLSMgQ09ORklHX01BQ0hfQVJNQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NNX1gzMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9INDcwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01BR0lDSUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfSElNQUxBWUEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NSU9BNzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfUENNMDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBX1BBTE0gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DU0I3MjYgaXMgbm90IHNldAotIyBDT05GSUdfUFhBX0VaWCBpcyBub3Qgc2V0Ci1DT05GSUdfUFhBM3h4PXkKLUNPTkZJR19QWEFfU1NQPXkKLUNPTkZJR19QWEFfSEFWRV9CT0FSRF9JUlFTPXkKLUNPTkZJR19QTEFUX1BYQT15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfWFNDMz15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQotQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLUNPTkZJR19JT18zNj15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfT1VURVJfQ0FDSEU9eQotQ09ORklHX0NBQ0hFX1hTQzNMMj15Ci1DT05GSUdfSVdNTVhUPXkKLUNPTkZJR19DT01NT05fQ0xLREVWPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAogQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTAKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLSMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L25mcyByb290ZnN0eXBlPW5mcyBuZnNyb290PTE5Mi4xNjguMS4xMDA6L25mc3Jvb3QvIGlwPTE5Mi4xNjguMS4xMDE6MTkyLjE2OC4xLjEwMDo6MjU1LjI1NS4yNTUuMDo6ZXRoMDpvbiBjb25zb2xlPXR0eVMwLDExNTIwMCBtZW09NjRNIGRlYnVnIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiAjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAotIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEU9eQotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0gxOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0dQSU8gaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1NIQVJQU0wgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX1BYQTN4eD15CiBDT05GSUdfTVREX05BTkRfUFhBM3h4X0JVSUxUSU49eQotIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX09ORU5BTkQ9eQogQ09ORklHX01URF9PTkVOQU5EX1ZFUklGWV9XUklURT15CiBDT05GSUdfTVREX09ORU5BTkRfR0VORVJJQz15Ci0jIENPTkZJR19NVERfT05FTkFORF9PVFAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkRfMlhfUFJPR1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORF9TSU0gaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfU01DOTFYPXkKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MTTgzMjMgaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX0dQSU89eQogQ09ORklHX0tFWUJPQVJEX1BYQTI3eD15CiBDT05GSUdfS0VZQk9BUkRfUFhBOTMwX1JPVEFSWT15Ci1DT05GSUdfS0VZQk9BUkRfR1BJTz15Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQotQ09ORklHX01PVVNFX1BTMj15Ci1DT05GSUdfTU9VU0VfUFMyX0FMUFM9eQotQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQotQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQotQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKLSMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfTU9VU0VfUFhBOTMwX1RSS0JBTEw9eQotIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkgaXMgbm90IHNldAotQ09ORklHX1RPVUNIU0NSRUVOX0RBOTAzND15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FRVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVzkwWDkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci1DT05GSUdfU0VSSU9fTElCUFMyPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX1BYQT15CiBDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLSMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19IRUxQRVJfQVVUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLSMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogQ09ORklHX0kyQ19QWEE9eQotIyBDT05GSUdfSTJDX1BYQV9TTEFWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogQ09ORklHX1NQST15Ci0jIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NQSV9NQVNURVI9eQotCi0jCi0jIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfU1BJX1BYQTJYWD15Ci0KLSMKLSMgU1BJIFByb3RvY29sIE1hc3RlcnMKLSMKLSMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCiBDT05GSUdfR1BJT19NQVg3MzJYPXkKIENPTkZJR19HUElPX1BDQTk1M1g9eQogQ09ORklHX0dQSU9fUENGODU3WD15Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKIENPTkZJR19HUElPX01BWDczMDE9eQotIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0CiBDT05GSUdfUE9XRVJfU1VQUExZPXkKIENPTkZJR19QT1dFUl9TVVBQTFlfREVCVUc9eQogQ09ORklHX1BEQV9QT1dFUj15Ci0jIENPTkZJR19CQVRURVJZX0RTMjc2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVRURVJZX0JRMjd4MDAgaXMgbm90IHNldAogQ09ORklHX0JBVFRFUllfREE5MDMwPXkKLSMgQ09ORklHX0JBVFRFUllfTUFYMTcwNDAgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKIENPTkZJR19QTUlDX0RBOTAzWD15Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SPXkKK0NPTkZJR19SRUdVTEFUT1JfREVCVUc9eQorQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSPXkKK0NPTkZJR19SRUdVTEFUT1JfREE5MDNYPXkKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9QWEE9eQotIyBDT05GSUdfRkJfUFhBX09WRVJMQVkgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUFhBX1NNQVJUUEFORUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUFhBX1BBUkFNRVRFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1cxMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQotIyBDT05GSUdfTENEX0xUVjM1MFFWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKIENPTkZJR19MQ0RfVERPMjRNPXkKLSMgQ09ORklHX0xDRF9WR0cyNDMyQTQgaXMgbm90IHNldAotIyBDT05GSUdfTENEX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKICMgQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDIGlzIG5vdCBzZXQKLUNPTkZJR19CQUNLTElHSFRfUFdNPXkKIENPTkZJR19CQUNLTElHSFRfREE5MDNYPXkKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlk9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVFM9eQotIyBDT05GSUdfRk9OVF84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF84eDE2IGlzIG5vdCBzZXQKIENPTkZJR19GT05UXzZ4MTE9eQotIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfTUlOSV80eDYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HTz15Ci1DT05GSUdfTE9HT19MSU5VWF9NT05PPXkKLUNPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKLUNPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX01NQz15Ci0jIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz15Ci1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15Ci0jIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCiBDT05GSUdfTU1DX1BYQT15Ci0jIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CiBDT05GSUdfTEVEU19DTEFTUz1tCi0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLSMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19HUElPPW0KLUNPTkZJR19MRURTX0dQSU9fUExBVEZPUk09eQotIyBDT05GSUdfTEVEU19MUDU1MjEgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX0RBOTAzWD1tCi0jIENPTkZJR19MRURTX0RBQzEyNFMwODUgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19QV00gaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19CRDI4MDIgaXMgbm90IHNldAotCi0jCi0jIExFRCBUcmlnZ2VycwotIwogQ09ORklHX0xFRFNfVFJJR0dFUlM9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj1tCiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD1tCiBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVD1tCiBDT05GSUdfTEVEU19UUklHR0VSX0dQSU89bQogQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPW0KLQotIwotIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCi0jCi1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19SRUdVTEFUT1I9eQotQ09ORklHX1JFR1VMQVRPUl9ERUJVRz15Ci0jIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVI9eQotIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfTUFYMTU4NiBpcyBub3Qgc2V0Ci1DT05GSUdfUkVHVUxBVE9SX0RBOTAzWD15Ci0jIENPTkZJR19SRUdVTEFUT1JfTFAzOTcxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQogQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZPXkKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQotQ09ORklHX0pGRlMyX1pMSUI9eQogQ09ORklHX0pGRlMyX0xaTz15Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQogQ09ORklHX0pGRlMyX1JVQklOPXkKLSMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKLSMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiBDT05GSUdfTkZTX1YzX0FDTD15CiBDT05GSUdfTkZTX1Y0PXkKLSMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19BQ0xfU1VQUE9SVD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQogQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKIENPTkZJR19QUklOVEtfVElNRT15Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfREVCVUdfU0hJUlE9eQotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQz15Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MQotQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCiAjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfUFJFRU1QVD15Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1BJTkxPQ0s9eQotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUD15Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJNX1VOV0lORD15CiBDT05GSUdfREVCVUdfVVNFUj15Ci0jIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfTFpPX0NPTVBSRVNTPXkKLUNPTkZJR19MWk9fREVDT01QUkVTUz15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9weGE5MTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9weGE5MTBfZGVmY29uZmlnCmluZGV4IDk0ZTIwZmUuLjFjZDM4MWUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3B4YTkxMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9weGE5MTBfZGVmY29uZmlnCkBAIC0xLDg5MCArMSw3MCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMwotIyBGcmkgTWFyIDIwIDEzOjQ1OjEyIDIwMDkKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfTkFNRVNQQUNFUz15Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTU1QPXkKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAogQ09ORklHX01BQ0hfVEFWT1JFVkI9eQotCi0jCi0jIE1hcnZlbGwgUFhBMTY4LzkxMCBJbXBsbWVudGF0aW9ucwotIwotIyBDT05GSUdfTUFDSF9BU1BFTklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1pZTE9OSVRFMiBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9UVENfREtCPXkKLUNPTkZJR19DUFVfUFhBOTEwPXkKLUNPTkZJR19QTEFUX1BYQT15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfTU9IQVdLPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VD15Ci1DT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLUNPTkZJR19JV01NWFQ9eQotQ09ORklHX0NPTU1PTl9DTEtERVY9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15Ci1DT05GSUdfT0FCSV9DT01QQVQ9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQotIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9uZnMgcm9vdGZzdHlwZT1uZnMgbmZzcm9vdD0xOTIuMTY4LjIuMTAwOi9uZnNyb290LyBpcD0xOTIuMTY4LjIuMTAxOjE5Mi4xNjguMi4xMDA6OjI1NS4yNTUuMjU1LjA6OmV0aDA6b24gY29uc29sZT10dHlTMCwxMTUyMDAgbWVtPTEyOE0iCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwotIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVYgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKIENPTkZJR19TTUM5MVg9eQotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX1BYQT15CiBDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0FDTD15Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WM19BQ0w9eQogQ09ORklHX05GU19WND15CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwogQ09ORklHX1BSSU5US19USU1FPXkKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BSRUVNUFQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKIENPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJNX1VOV0lORD15CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPXkKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcWlsLWE5MjYwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcWlsLWE5MjYwX2RlZmNvbmZpZwppbmRleCAxMmQwZDY0Li45MTYwZjNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3FpbC1hOTI2MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9xaWwtYTkyNjBfZGVmY29uZmlnCkBAIC0xLDEyNTUgKzEsMTE1IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQKLSMgVHVlIEFwciAxNSAxMjoyODozOCAyMDA4Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0ZBSVJfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfQVQ5MT15Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCi0KLSMKLSMgQXRtZWwgQVQ5MSBTeXN0ZW0tb24tQ2hpcAotIwotIyBDT05GSUdfQVJDSF9BVDkxUk05MjAwIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0FUOTFTQU05MjYwPXkKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05UkwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxQ0FQOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFYNDAgaXMgbm90IHNldAotQ09ORklHX0FUOTFfUE1DX1VOSVQ9eQotCi0jCi0jIEFUOTFTQU05MjYwIFZhcmlhbnRzCi0jCi0jIENPTkZJR19BUkNIX0FUOTFTQU05MjYwX1NBTTlYRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQVQ5MVNBTTkyNjAgLyBBVDkxU0FNOVhFIEJvYXJkIFR5cGUKLSMKLSMgQ09ORklHX01BQ0hfQVQ5MVNBTTkyNjBFSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NBTTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfU0FNOV9MOTI2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1VTQl9BOTI2MCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9RSUxfQTkyNjA9eQotCi0jCi0jIEFUOTEgQm9hcmQgT3B0aW9ucwotIwotCi0jCi0jIEFUOTEgRmVhdHVyZSBTZWxlY3Rpb25zCi0jCi0jIENPTkZJR19BVDkxX1BST0dSQU1NQUJMRV9DTE9DS1MgaXMgbm90IHNldAogQ09ORklHX0FUOTFfU0xPV19DTE9DSz15Ci1DT05GSUdfQVQ5MV9USU1FUl9IWj0xMDAKLSMgQ09ORklHX0FUOTFfRUFSTFlfREJHVSBpcyBub3Qgc2V0CiBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDA9eQotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDEgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDIgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDMgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDQgaXMgbm90IHNldAotIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDUgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX0FSTTkyNlQ9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUSj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwogIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0xFRFMgaXMgbm90IHNldAotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9Im1lbT02NE0gY29uc29sZT10dHlTMSwxMTUyMDAiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCiBDT05GSUdfUE09eQotIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QTV9TTEVFUD15Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci1DT05GSUdfU1VTUEVORD15Ci0jIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQotQ09ORklHX0FTS19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotIyBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKIENPTkZJR19JUF9QTlBfQk9PVFA9eQogQ09ORklHX0lQX1BOUF9SQVJQPXkKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTVJPVVRFPXkKIENPTkZJR19JUF9QSU1TTV9WMT15CiBDT05GSUdfSVBfUElNU01fVjI9eQotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0RBVEFGTEFTSD15Ci0jIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkQ9eQotIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfSURTPXkKLSMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX0FUTUVMPXkKIENPTkZJR19NVERfTkFORF9BVE1FTF9FQ0NfU09GVD15Ci0jIENPTkZJR19NVERfTkFORF9BVE1FTF9FQ0NfSFcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfQVRNRUxfRUNDX05PTkUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKIENPTkZJR19TQ1NJX01VTFRJX0xVTj15Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKIENPTkZJR19NQUNCPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQogQ09ORklHX0lOUFVUX0VWQlVHPXkKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0dQSU89eQogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX0FUTUVMPXkKIENPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfQVRNRUxfVFRZQVQgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi0jIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUENBIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKIENPTkZJR19TUEk9eQotIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TUElfTUFTVEVSPXkKLQotIwotIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwotIwogQ09ORklHX1NQSV9BVE1FTD15Ci0jIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFByb3RvY29sIE1hc3RlcnMKLSMKLSMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUOTFTQU05WF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwogIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRVJTSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKLUNPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERTTCBtb2RlbSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCitDT05GSUdfVVNCX09IQ0lfSENEPXkKK0NPTkZJR19VU0JfU1RPUkFHRT15CiBDT05GSUdfVVNCX0dBREdFVD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVRfQVQ5MT15Ci1DT05GSUdfVVNCX0FUOTE9eQotIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAotQ09ORklHX1VTQl9FVEg9eQotQ09ORklHX1VTQl9FVEhfUk5ESVM9eQotIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VUSD1tCiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz15Ci1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15Ci0jIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotQ09ORklHX01NQ19BVDkxPXkKLSMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAorQ09ORklHX01NQ19BVDkxPW0KIENPTkZJR19ORVdfTEVEUz15CiBDT05GSUdfTEVEU19DTEFTUz15Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKIENPTkZJR19MRURTX0dQSU89eQotCi0jCi0jIExFRCBUcmlnZ2VycwotIwogQ09ORklHX0xFRFNfVFJJR0dFUlM9eQotIyBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX000MVQ5ND15Ci0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9BVDkxU0FNOSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GVVNFX0ZTPW0KLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15Ci0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjNfQUNMPXkKIENPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19BQ0xfU1VQUE9SVD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOU1RSVU1FTlRBVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQotIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3JhdW1mZWxkX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcmF1bWZlbGRfZGVmY29uZmlnCmluZGV4IGFjYjFhOGYuLmY3Y2FhOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcmF1bWZlbGRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcmF1bWZlbGRfZGVmY29uZmlnCkBAIC0xLDE2NTUgKzEsMTY0IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1Ci0jIFN1biBOb3YgIDEgMjE6NTc6MzIgMjAwOQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfSEFWRV9QV009eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLUNPTkZJR19BUkNIX0hBU19DUFVGUkVRPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19BUkNIX01URF9YSVA9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNwotIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi1DT05GSUdfU0xPV19XT1JLPXkKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLUNPTkZJR19GUkVFWkVSPXkKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotQ09ORklHX01NVT15Ci0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05PTUFESUsgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUFhBPXkKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKLSMKLQotIwotIyBTdXBwb3J0ZWQgUFhBM3h4IFByb2Nlc3NvciBWYXJpYW50cwotIwotQ09ORklHX0NQVV9QWEEzMDA9eQotIyBDT05GSUdfQ1BVX1BYQTMxMCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX1BYQTMyMD15Ci0jIENPTkZJR19DUFVfUFhBOTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9QWEE5MzUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1BYQTk1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgSW50ZWwvTWFydmVsbCBEZXYgUGxhdGZvcm1zIChzb3J0ZWQgYnkgaGFyZHdhcmUgcmVsZWFzZSB0aW1lKQotIwotIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfWllMT05JVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9MSVRUTEVUT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9UQVZPUkVWQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1NBQVIgaXMgbm90IHNldAotCi0jCi0jIFRoaXJkIFBhcnR5IERldiBQbGF0Zm9ybXMgKHNvcnRlZCBieSB2ZW5kb3IgbmFtZSkKLSMKLSMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZJUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQkFMTE9PTjMgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DU0I3MjYgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9BUk1DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfRU1fWDI3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0VYRURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ01fWDMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0dVTVNUSVggaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9JTlRFTE1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfU1RBUkdBVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfWENFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUklaRVBTX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfUENNMDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ09MSUJSSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NPTElCUkkzMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DT0xJQlJJMzIwIGlzIG5vdCBzZXQKLQotIwotIyBFbmQtdXNlciBQcm9kdWN0cyAoc29ydGVkIGJ5IHZlbmRvciBuYW1lKQotIwotIyBDT05GSUdfTUFDSF9INDcwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0g1MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfSElNQUxBWUEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NQUdJQ0lBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01JT0E3MDEgaXMgbm90IHNldAotIyBDT05GSUdfUFhBX0VaWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01QOTAwQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQV9QQUxNIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX1JBVU1GRUxEX1JDPXkKIENPTkZJR19NQUNIX1JBVU1GRUxEX0NPTk5FQ1RPUj15Ci1DT05GSUdfTUFDSF9SQVVNRkVMRF9QUk9UTz15CiBDT05GSUdfTUFDSF9SQVVNRkVMRF9TUEVBS0VSPXkKLSMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBX0VTRVJJRVMgaXMgbm90IHNldAotQ09ORklHX1BYQTN4eD15Ci1DT05GSUdfUFhBX1NTUD15Ci1DT05GSUdfUExBVF9QWEE9eQotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVXzMyPXkKLUNPTkZJR19DUFVfWFNDMz15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQotQ09ORklHX0NQVV9QQUJSVF9MRUdBQ1k9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLUNPTkZJR19JT18zNj15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfT1VURVJfQ0FDSEU9eQotQ09ORklHX0NBQ0hFX1hTQzNMMj15Ci1DT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTUKLUNPTkZJR19JV01NWFQ9eQotQ09ORklHX0NPTU1PTl9DTEtERVY9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15CiAjIENPTkZJR19PQUJJX0NPTVBBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTAKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0jIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0wCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0wCiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxMTUyMDAgcnciCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwogQ09ORklHX0NQVV9GUkVRPXkKLUNPTkZJR19DUFVfRlJFUV9UQUJMRT15Ci0jIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfU1RBVD15Ci0jIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFMgaXMgbm90IHNldAotQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFPXkKLSMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQotIyBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSURMRT15Ci1DT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15Ci1DT05GSUdfQ1BVX0lETEVfR09WX01FTlU9eQotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCiBDT05GSUdfUE09eQotIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BNX1NMRUVQPXkKLUNPTkZJR19TVVNQRU5EPXkKLUNPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQogQ09ORklHX0FQTV9FTVVMQVRJT049eQotIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNj15Ci0jIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9eQotIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2X1NJVD15Ci1DT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15Ci0jIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15CiBDT05GSUdfQ0ZHODAyMTE9eQotIyBDT05GSUdfTkw4MDIxMV9URVNUTU9ERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1MgaXMgbm90IHNldAogQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRz15Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QUz15Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0xCi1DT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQotQ09ORklHX1dJUkVMRVNTX0VYVD15Ci1DT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKLUNPTkZJR19MSUI4MDIxMT15Ci0jIENPTkZJR19MSUI4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTUFDODAyMTE9eQotQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMPXkKLSMgQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfUElEIGlzIG5vdCBzZXQKLUNPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMPXkKLUNPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUPSJtaW5zdHJlbCIKLSMgQ09ORklHX01BQzgwMjExX01FU0ggaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTFfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMV9ERUJVR19NRU5VIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZUTD15CiBDT05GSUdfTkZUTF9SVz15Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQkxPQ0syTVREPXkKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkQ9eQotIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9IMTkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9HUElPIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9TSEFSUFNMIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORF9QWEEzeHg9eQotIyBDT05GSUdfTVREX05BTkRfUFhBM3h4X0JVSUxUSU4gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKIENPTkZJR19NVERfVUJJPXkKLUNPTkZJR19NVERfVUJJX1dMX1RIUkVTSE9MRD00MDk2Ci1DT05GSUdfTVREX1VCSV9CRUJfUkVTRVJWRT0xCi0jIENPTkZJR19NVERfVUJJX0dMVUVCSSBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIGRlYnVnZ2luZyBvcHRpb25zCi0jCi0jIENPTkZJR19NVERfVUJJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19JU0wyOTAwMz15CiBDT05GSUdfVElfREFDNzUxMj15Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKIENPTkZJR19TTVNDOTExWD15Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTl84MDIxMT15CiBDT05GSUdfTElCRVJUQVM9eQotIyBDT05GSUdfTElCRVJUQVNfVVNCIGlzIG5vdCBzZXQKIENPTkZJR19MSUJFUlRBU19TRElPPW0KLSMgQ09ORklHX0xJQkVSVEFTX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJFUlRBU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJFUlRBU19USElORklSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDc2QzUwWF9VU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX1JORElTX1dMQU4gaXMgbm90IHNldAotIyBDT05GSUdfUlRMODE4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMV9IV1NJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QNTRfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUSF9DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDNMRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWkQxMjExUlcgaXMgbm90IHNldAotIyBDT05GSUdfUlQyWDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMMTJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV00gaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1VTQk5FVD15CiAjIENPTkZJR19VU0JfTkVUX0FYODgxN1ggaXMgbm90IHNldAotQ09ORklHX1VTQl9ORVRfQ0RDRVRIRVI9eQotIyBDT05GSUdfVVNCX05FVF9DRENfRUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfRE05NjAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfU01TQzk1WFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9HTDYyMEEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX05FVF9ORVQxMDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfUExVU0IgaXMgbm90IHNldAogQ09ORklHX1VTQl9ORVRfTUNTNzgzMD15Ci0jIENPTkZJR19VU0JfTkVUX1JORElTX0hPU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX05FVF9DRENfU1VCU0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ORVRfWkFVUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfSU5UNTFYMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9QT0xMREVWPXkKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLSMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAotQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfR1BJTz15Ci0jIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTE04MzIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9QWEEyN3ggaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OSBpcyBub3Qgc2V0CiBDT05GSUdfVE9VQ0hTQ1JFRU5fRUVUST1tCi0jIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NQ1M1MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9XOTBYOTAwIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NSVNDPXkKLSMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URTIgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1lFQUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfQ00xMDkgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVUlOUFVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9HUElPX1JPVEFSWV9FTkNPREVSPXkKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci1DT05GSUdfU0VSSU9fTElCUFMyPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX1BYQT15CiBDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfUFhBPXkKLSMgQ09ORklHX0kyQ19QWEFfU0xBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfU1BJPXkKIENPTkZJR19TUElfREVCVUc9eQotQ09ORklHX1NQSV9NQVNURVI9eQotCi0jCi0jIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCi0jCi1DT05GSUdfU1BJX0JJVEJBTkc9eQogQ09ORklHX1NQSV9HUElPPXkKLSMgQ09ORklHX1NQSV9QWEEyWFggaXMgbm90IHNldAotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCiBDT05GSUdfU1BJX1NQSURFVj15Ci0jIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQogQ09ORklHX0RFQlVHX0dQSU89eQotIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0Ci0KLSMKLSMgQUM5NyBHUElPIGV4cGFuZGVyczoKLSMKLUNPTkZJR19XMT1tCi0KLSMKLSMgMS13aXJlIEJ1cyBNYXN0ZXJzCi0jCi0jIENPTkZJR19XMV9NQVNURVJfRFMyNDkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxX01BU1RFUl9EUzI0ODIgaXMgbm90IHNldAotIyBDT05GSUdfVzFfTUFTVEVSX0RTMVdNIGlzIG5vdCBzZXQKIENPTkZJR19XMV9NQVNURVJfR1BJTz1tCi0KLSMKLSMgMS13aXJlIFNsYXZlcwotIwotIyBDT05GSUdfVzFfU0xBVkVfVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVzFfU0xBVkVfU01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMV9TTEFWRV9EUzI0MzEgaXMgbm90IHNldAotIyBDT05GSUdfVzFfU0xBVkVfRFMyNDMzIGlzIG5vdCBzZXQKLUNPTkZJR19XMV9TTEFWRV9EUzI3NjA9bQotIyBDT05GSUdfVzFfU0xBVkVfQlEyNzAwMCBpcyBub3Qgc2V0CiBDT05GSUdfUE9XRVJfU1VQUExZPXkKLSMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUERBX1BPV0VSPXkKLSMgQ09ORklHX0FQTV9QT1dFUiBpcyBub3Qgc2V0CiBDT05GSUdfQkFUVEVSWV9EUzI3NjA9bQotIyBDT05GSUdfQkFUVEVSWV9EUzI3ODIgaXMgbm90IHNldAotIyBDT05GSUdfQkFUVEVSWV9CUTI3eDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBVFRFUllfTUFYMTcwNDAgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgZHJpdmVycwotIwotIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05NTI0MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDExMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NIVDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfTElTM19TUEk9eQotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKIENPTkZJR19SRUdVTEFUT1I9eQogQ09ORklHX1JFR1VMQVRPUl9ERUJVRz15CiBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0U9eQotIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfTUFYMTU4NiBpcyBub3Qgc2V0CiBDT05GSUdfUkVHVUxBVE9SX01BWDg2NjA9eQotIyBDT05GSUdfUkVHVUxBVE9SX0xQMzk3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwMjMgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9QWEE9eQotIyBDT05GSUdfRkJfUFhBX09WRVJMQVkgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUFhBX1NNQVJUUEFORUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUFhBX1BBUkFNRVRFUlMgaXMgbm90IHNldAotQ09ORklHX1BYQTNYWF9HQ1U9eQotIyBDT05GSUdfRkJfTUJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1cxMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogIyBDT05GSUdfTENEX0NMQVNTX0RFVklDRSBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15CiAjIENPTkZJR19CQUNLTElHSFRfR0VORVJJQyBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX1BXTT15Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9OVF84eDg9eQotQ09ORklHX0ZPTlRfOHgxNj15CiBDT05GSUdfTE9HTz15CiAjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAogIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CiAjIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQgaXMgbm90IHNldAotQ09ORklHX0xPR09fUkFVTUZFTERfQ0xVVDIyND15CiBDT05GSUdfU09VTkQ9eQotIyBDT05GSUdfU09VTkRfT1NTX0NPUkUgaXMgbm90IHNldAogQ09ORklHX1NORD15Ci1DT05GSUdfU05EX1RJTUVSPXkKLUNPTkZJR19TTkRfUENNPXkKLUNPTkZJR19TTkRfSkFDSz15Ci0jIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfQVJNPXkKLUNPTkZJR19TTkRfUFhBMlhYX0xJQj15Ci0jIENPTkZJR19TTkRfUFhBMlhYX0FDOTcgaXMgbm90IHNldAotQ09ORklHX1NORF9TUEk9eQogIyBDT05GSUdfU05EX1VTQiBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1NPQz15CiBDT05GSUdfU05EX1BYQTJYWF9TT0M9eQotQ09ORklHX1NORF9QWEFfU09DX1NTUD15CiBDT05GSUdfU05EX1NPQ19SQVVNRkVMRD15Ci1DT05GSUdfU05EX1NPQ19JMkNfQU5EX1NQST15Ci0jIENPTkZJR19TTkRfU09DX0FMTF9DT0RFQ1MgaXMgbm90IHNldAotQ09ORklHX1NORF9TT0NfQUs0MTA0PXkKLUNPTkZJR19TTkRfU09DX0NTNDI3MD15Ci0jIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLUNPTkZJR19ISURfQTRURUNIPXkKLUNPTkZJR19ISURfQVBQTEU9eQotQ09ORklHX0hJRF9CRUxLSU49eQotQ09ORklHX0hJRF9DSEVSUlk9eQotQ09ORklHX0hJRF9DSElDT05ZPXkKLUNPTkZJR19ISURfQ1lQUkVTUz15CiBDT05GSUdfSElEX0RSQUdPTlJJU0U9eQotIyBDT05GSUdfRFJBR09OUklTRV9GRiBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX0VaS0VZPXkKLUNPTkZJR19ISURfS1lFPXkKIENPTkZJR19ISURfR1lSQVRJT049eQogQ09ORklHX0hJRF9UV0lOSEFOPXkKLUNPTkZJR19ISURfS0VOU0lOR1RPTj15Ci1DT05GSUdfSElEX0xPR0lURUNIPXkKLSMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfTUlDUk9TT0ZUPXkKLUNPTkZJR19ISURfTU9OVEVSRVk9eQogQ09ORklHX0hJRF9OVFJJRz15CiBDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKLSMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfUEVUQUxZTlg9eQogQ09ORklHX0hJRF9TQU1TVU5HPXkKIENPTkZJR19ISURfU09OWT15CiBDT05GSUdfSElEX1NVTlBMVVM9eQogQ09ORklHX0hJRF9HUkVFTkFTSUE9eQotIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU01BUlRKT1lQTFVTPXkKLSMgQ09ORklHX1NNQVJUSk9ZUExVU19GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1RPUFNFRUQ9eQogQ09ORklHX0hJRF9USFJVU1RNQVNURVI9eQotIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfWkVST1BMVVM9eQotIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfREVCVUc9eQogQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwotIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLQotIwotIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwotIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT009eQogQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMD15CiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQ9eQogQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOT15CiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1PXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKLSMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKIENPTkZJR19NTUNfUFhBPW0KLSMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVXX0xFRFM9eQogQ09ORklHX0xFRFNfQ0xBU1M9eQotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0jIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAogQ09ORklHX0xFRFNfR1BJTz15Ci1DT05GSUdfTEVEU19HUElPX1BMQVRGT1JNPXkKLSMgQ09ORklHX0xFRFNfTFAzOTQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX0RBQzEyNFMwODUgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19QV00gaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19CRDI4MDIgaXMgbm90IHNldAogQ09ORklHX0xFRFNfTFQzNTkzPXkKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKIENPTkZJR19MRURTX1RSSUdHRVJTPXkKLSMgQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUPXkKLSMgQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKLQotIwotIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCi0jCi0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9TQTExMDAgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfUFhBPXkKIENPTkZJR19ETUFERVZJQ0VTPXkKLQotIwotIyBETUEgRGV2aWNlcwotIwotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiBDT05GSUdfVUlPPXkKLSMgQ09ORklHX1VJT19QRFJWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJT19QRFJWX0dFTklSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU9fU01YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJT19TRVJDT1MzIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19FWFQyX0ZTX1hJUD15CiBDT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19YSVA9eQotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKIENPTkZJR19GU0NBQ0hFPXkKIENPTkZJR19GU0NBQ0hFX1NUQVRTPXkKLSMgQ09ORklHX0ZTQ0FDSEVfSElTVE9HUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTQ0FDSEVfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFRklMRVM9eQotIyBDT05GSUdfQ0FDSEVGSUxFU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQUNIRUZJTEVTX0hJU1RPR1JBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfVUJJRlNfRlM9eQotIyBDT05GSUdfVUJJRlNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfVUJJRlNfRlNfQURWQU5DRURfQ09NUFIgaXMgbm90IHNldAotQ09ORklHX1VCSUZTX0ZTX0xaTz15Ci1DT05GSUdfVUJJRlNfRlNfWkxJQj15Ci0jIENPTkZJR19VQklGU19GU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU19GU0NBQ0hFPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQogQ09ORklHX05MU19DT0RFUEFHRV83Mzc9eQogQ09ORklHX05MU19DT0RFUEFHRV83NzU9eQpAQCAtMTY4OCwyMTEgKzE5NywxMiBAQAogQ09ORklHX05MU19LT0k4X1I9eQogQ09ORklHX05MU19LT0k4X1U9eQogQ09ORklHX05MU19VVEY4PXkKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKIENPTkZJR19QUklOVEtfVElNRT15Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLUNPTkZJR19GVFJBQ0U9eQotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotQ09ORklHX0FSTV9VTldJTkQ9eQogQ09ORklHX0RFQlVHX1VTRVI9eQogQ09ORklHX0RFQlVHX0VSUk9SUz15Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTEw9eQotIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9eQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi1DT05GSUdfQ1JZUFRPX0FFUz15Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQVJDND15Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLUNPTkZJR19DUllQVE9fREVGTEFURT15Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0xaTz15Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotQ09ORklHX0NSQzE2PXkKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0xaT19DT01QUkVTUz15Ci1DT05GSUdfTFpPX0RFQ09NUFJFU1M9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcmVhbHZpZXctc21wX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcmVhbHZpZXctc21wX2RlZmNvbmZpZwppbmRleCAxMjM3MDE3Li45MzEyZWY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3LXNtcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlldy1zbXBfZGVmY29uZmlnCkBAIC0xLDEwOTUgKzEsOTAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC1yYzIKLSMgTW9uIE5vdiAxMCAxNDo0MTo0NyAyMDA4Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci0jIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15Ci1DT05GSUdfSEFWRV9DTEs9eQotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX1NUT1BfTUFDSElORT15Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9ERUFETElORT15Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1JFQUxWSUVXPXkKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCi0KLSMKLSMgUmVhbFZpZXcgcGxhdGZvcm0gdHlwZQotIwogQ09ORklHX01BQ0hfUkVBTFZJRVdfRUI9eQotIyBDT05GSUdfUkVBTFZJRVdfRUJfQTlNUCBpcyBub3Qgc2V0CiBDT05GSUdfUkVBTFZJRVdfRUJfQVJNMTFNUD15Ci0jIENPTkZJR19SRUFMVklFV19FQl9BUk0xMU1QX1JFVkIgaXMgbm90IHNldAogQ09ORklHX01BQ0hfUkVBTFZJRVdfUEIxMU1QPXkKLSMgQ09ORklHX01BQ0hfUkVBTFZJRVdfUEIxMTc2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfUkVBTFZJRVdfUEJBOCBpcyBub3Qgc2V0Ci1DT05GSUdfUkVBTFZJRVdfSElHSF9QSFlTX09GRlNFVD15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLSMgQ09ORklHX0NQVV9BUk05MjZUIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfVjY9eQotQ09ORklHX0NQVV8zMnY2Sz15Ci0jIENPTkZJR19DUFVfVjcgaXMgbm90IHNldAotQ09ORklHX0NQVV8zMnY2PXkKLUNPTkZJR19DUFVfQUJSVF9FVjY9eQotQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQotQ09ORklHX0NQVV9DQUNIRV9WNj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQotQ09ORklHX0NQVV9DT1BZX1Y2PXkKLUNPTkZJR19DUFVfVExCX1Y2PXkKLUNPTkZJR19DUFVfSEFTX0FTSUQ9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVNfVExTX1JFRz15Ci1DT05GSUdfT1VURVJfQ0FDSEU9eQotQ09ORklHX0NBQ0hFX0wyWDA9eQotQ09ORklHX0FSTV9HSUM9eQotQ09ORklHX0lDU1QzMDc9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi1DT05GSUdfQVJNX0FNQkE9eQotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiBDT05GSUdfU01QPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAotQ09ORklHX05SX0NQVVM9NAogQ09ORklHX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19MT0NBTF9USU1FUlM9eQotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKLSMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L25mcyBuZnNyb290PTEwLjEuNjkuMzovd29yay9uZnNyb290IGlwPWRoY3AgY29uc29sZT10dHlBTUEwIG1lbT0xMjhNIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKLSMgQ09ORklHX0ZQRV9OV0ZQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CiBDT05GSUdfVkZQPXkKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SPXkKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKIENPTkZJR19TTVNDX1BIWT15Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfU01DOTFYPXkKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKIENPTkZJR19TTVNDOTExWD15Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci1DT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQotQ09ORklHX01PVVNFX1BTMj15Ci1DT05GSUdfTU9VU0VfUFMyX0FMUFM9eQotQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQotQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQotQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSz15Ci1DT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQotIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15CiAjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJT19BTUJBS01JPXkKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9BTUJBX1BMMDEwIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMT15CiBDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTFfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0xNgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKIENPTkZJR19GQl9BUk1DTENEPXkKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9OVF84eDg9eQotQ09ORklHX0ZPTlRfOHgxNj15CiBDT05GSUdfTE9HTz15CiAjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAogIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKIENPTkZJR19TT1VORD15Ci1DT05GSUdfU09VTkRfT1NTX0NPUkU9eQogQ09ORklHX1NORD15Ci1DT05GSUdfU05EX1RJTUVSPXkKLUNPTkZJR19TTkRfUENNPXkKLSMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAotQ09ORklHX1NORF9PU1NFTVVMPXkKIENPTkZJR19TTkRfTUlYRVJfT1NTPXkKIENPTkZJR19TTkRfUENNX09TUz15Ci1DT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15Ci0jIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQotQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15Ci0jIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfVk1BU1RFUj15Ci1DT05GSUdfU05EX0FDOTdfQ09ERUM9eQogIyBDT05GSUdfU05EX0RSSVZFUlMgaXMgbm90IHNldAotQ09ORklHX1NORF9BUk09eQogQ09ORklHX1NORF9BUk1BQUNJPXkKLSMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotQ09ORklHX0FDOTdfQlVTPXkKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQotIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwogQ09ORklHX01NQ19BUk1NTUNJPXkKLSMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBWb2x0YWdlIGFuZCBDdXJyZW50IHJlZ3VsYXRvcnMKLSMKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX05PUF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19VU0VSPXkKIENPTkZJR19ERUJVR19FUlJPUlM9eQotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcmVhbHZpZXdfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlld19kZWZjb25maWcKaW5kZXggYTUwOWE1ZS4uZmI3NTE5MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlld19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlld19kZWZjb25maWcKQEAgLTEsMTA5MCArMSw4OSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4LXJjMgotIyBNb24gTm92IDEwIDE0OjM5OjQ4IDIwMDgKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLSMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX05BTUVTUEFDRVM9eQotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0RFQURMSU5FPXkKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUkVBTFZJRVc9eQotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBSZWFsVmlldyBwbGF0Zm9ybSB0eXBlCi0jCiBDT05GSUdfTUFDSF9SRUFMVklFV19FQj15Ci0jIENPTkZJR19SRUFMVklFV19FQl9BOU1QIGlzIG5vdCBzZXQKIENPTkZJR19SRUFMVklFV19FQl9BUk0xMU1QPXkKLSMgQ09ORklHX1JFQUxWSUVXX0VCX0FSTTExTVBfUkVWQiBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9SRUFMVklFV19QQjExTVA9eQogQ09ORklHX01BQ0hfUkVBTFZJRVdfUEIxMTc2PXkKLSMgQ09ORklHX01BQ0hfUkVBTFZJRVdfUEJBOCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLSMgQ09ORklHX0NQVV9BUk05MjZUIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfVjY9eQotIyBDT05GSUdfQ1BVXzMydjZLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9WNyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVXzMydjY9eQotQ09ORklHX0NQVV9BQlJUX0VWNj15Ci1DT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y2PXkKLUNPTkZJR19DUFVfQ0FDSEVfVklQVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjY9eQotQ09ORklHX0NQVV9UTEJfVjY9eQotQ09ORklHX0NQVV9IQVNfQVNJRD15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAotQ09ORklHX09VVEVSX0NBQ0hFPXkKLUNPTkZJR19DQUNIRV9MMlgwPXkKLUNPTkZJR19BUk1fR0lDPXkKLUNPTkZJR19JQ1NUMzA3PXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotQ09ORklHX0FSTV9BTUJBPXkKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKLSMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L25mcyBuZnNyb290PTEwLjEuNjkuMzovd29yay9uZnNyb290IGlwPWRoY3AgY29uc29sZT10dHlBTUEwIG1lbT0xMjhNIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKLSMgQ09ORklHX0ZQRV9OV0ZQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CiBDT05GSUdfVkZQPXkKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SPXkKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKIENPTkZJR19TTVNDX1BIWT15Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfU01DOTFYPXkKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKIENPTkZJR19TTVNDOTExWD15Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci1DT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQotQ09ORklHX01PVVNFX1BTMj15Ci1DT05GSUdfTU9VU0VfUFMyX0FMUFM9eQotQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQotQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQotQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSz15Ci1DT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQotIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15CiAjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJT19BTUJBS01JPXkKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9BTUJBX1BMMDEwIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMT15CiBDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTFfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0xNgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKIENPTkZJR19GQl9BUk1DTENEPXkKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9OVF84eDg9eQotQ09ORklHX0ZPTlRfOHgxNj15CiBDT05GSUdfTE9HTz15CiAjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAogIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKIENPTkZJR19TT1VORD15Ci1DT05GSUdfU09VTkRfT1NTX0NPUkU9eQogQ09ORklHX1NORD15Ci1DT05GSUdfU05EX1RJTUVSPXkKLUNPTkZJR19TTkRfUENNPXkKLSMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAotQ09ORklHX1NORF9PU1NFTVVMPXkKIENPTkZJR19TTkRfTUlYRVJfT1NTPXkKIENPTkZJR19TTkRfUENNX09TUz15Ci1DT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15Ci0jIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQotQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15Ci0jIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfVk1BU1RFUj15Ci1DT05GSUdfU05EX0FDOTdfQ09ERUM9eQogIyBDT05GSUdfU05EX0RSSVZFUlMgaXMgbm90IHNldAotQ09ORklHX1NORF9BUk09eQogQ09ORklHX1NORF9BUk1BQUNJPXkKLSMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotQ09ORklHX0FDOTdfQlVTPXkKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQotIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwogQ09ORklHX01NQ19BUk1NTUNJPXkKLSMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBWb2x0YWdlIGFuZCBDdXJyZW50IHJlZ3VsYXRvcnMKLSMKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfTk9QX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVFJBQ0U9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQogQ09ORklHX0RFQlVHX0VSUk9SUz15Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9ycGNfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9ycGNfZGVmY29uZmlnCmluZGV4IGU5MTI0YTAuLmFmMjc4ZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcnBjX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3JwY19kZWZjb25maWcKQEAgLTEsOTEwICsxLDEwNiBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIzLXJjMgotIyBNb24gQXVnICA2IDE2OjQ3OjI0IDIwMDcKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLSMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUyBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19OT19JT1BPUlQ9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfRklRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1JQQz15Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIwotQ09ORklHX0FSQ0hfQUNPUk49eQotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCiBDT05GSUdfQ1BVX0FSTTYxMD15CiBDT05GSUdfQ1BVX0FSTTcxMD15CiBDT05GSUdfQ1BVX1NBMTEwPXkKLUNPTkZJR19DUFVfMzJ2Mz15Ci1DT05GSUdfQ1BVX0FCUlRfRVY0PXkKLUNPTkZJR19DUFVfQ0FDSEVfVjM9eQotQ09ORklHX0NQVV9DQUNIRV9WNFdCPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjM9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjM9eQotQ09ORklHX0NQVV9UTEJfVjRXQj15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX1RJTUVSX0FDT1JOPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotQ09ORklHX0lTQV9ETUFfQVBJPXkKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEwMAotIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0iIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15CiBDT05GSUdfQklORk1UX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD1tCiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNj1tCi0jIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2X1NJVD1tCi0jIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKIENPTkZJR19QQVJQT1JUPXkKIENPTkZJR19QQVJQT1JUX1BDPXkKIENPTkZJR19QQVJQT1JUX1BDX0ZJRk89eQotIyBDT05GSUdfUEFSUE9SVF9QQ19TVVBFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlRfR1NDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlRfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUXzEyODQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQogQ09ORklHX0JMS19ERVZfRkQ9eQotIyBDT05GSUdfUEFSSURFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPW0KLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15CiBDT05GSUdfQ0hSX0RFVl9TVD1tCi0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfU1I9eQogQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKIENPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiBDT05GSUdfU0NTSV9MT0dHSU5HPXkKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotQ09ORklHX1NDU0lfU1BJX0FUVFJTPW0KLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUFBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU1NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVpJUF9FUFAxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0laSVBfU0xPV19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9BUlhFU0NTST1tCiBDT05GSUdfU0NTSV9DVU1BTkFfMj1tCiBDT05GSUdfU0NTSV9FRVNPWFNDU0k9bQogQ09ORklHX1NDU0lfUE9XRVJURUNTQ1NJPXkKLQotIwotIyBUaGUgZm9sbG93aW5nIGRyaXZlcnMgYXJlIG5vdCBmdWxseSBzdXBwb3J0ZWQKLSMKIENPTkZJR19TQ1NJX0NVTUFOQV8xPW0KIENPTkZJR19TQ1NJX09BSzE9bQogQ09ORklHX0FUQT15Ci0jIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotQ09ORklHX1BBVEFfUExBVEZPUk09eQogQ09ORklHX1BBVEFfSUNTSURFPXkKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19QQVRBX1BMQVRGT1JNPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci0jIENPTkZJR19NSUkgaXMgbm90IHNldAogQ09ORklHX0FSTV9FVEhFUjE9eQogQ09ORklHX0FSTV9FVEhFUjM9eQogQ09ORklHX0FSTV9FVEhFUkg9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0NLRVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUExJUCBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KLSMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBfQVNZTkMgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKIENPTkZJR19QUFBPRT1tCi0jIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLUNPTkZJR19TTEhDPW0KLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci1DT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQogIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CiBDT05GSUdfTU9VU0VfUklTQ1BDPXkKLSMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKICMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fUEFSS0JEIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19SUENLQkQ9eQotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MTYKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTgKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9BQ09STj15Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9NjQKIENPTkZJR19QUklOVEVSPW0KLSMgQ09ORklHX0xQX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfUFBERVYgaXMgbm90IHNldAotIyBDT05GSUdfVElQQVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi1DT05GSUdfSTJDX0FMR09CSVQ9eQotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX0FDT1JOPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogQ09ORklHX0ZCPXkKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCiBDT05GSUdfRkJfQUNPUk49eQotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAogQ09ORklHX0ZPTlRTPXkKLSMgQ09ORklHX0ZPTlRfOHg4IGlzIG5vdCBzZXQKIENPTkZJR19GT05UXzh4MTY9eQotIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVF9BQ09STl84eDg9eQotIyBDT05GSUdfRk9OVF9NSU5JXzR4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKIENPTkZJR19MT0dPPXkKLUNPTkZJR19MT0dPX0xJTlVYX01PTk89eQotQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0KLSMKLSMgU291bmQKLSMKIENPTkZJR19TT1VORD1tCi0KLSMKLSMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCi0jCi0jIENPTkZJR19TTkQgaXMgbm90IHNldAotCi0jCi0jIE9wZW4gU291bmQgU3lzdGVtCi0jCiBDT05GSUdfU09VTkRfUFJJTUU9bQotIyBDT05GSUdfU09VTkRfTVNORENMQVMgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfTVNORFBJTiBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkRfT1NTPW0KLSMgQ09ORklHX1NPVU5EX1RSQUNFSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9ETUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1NTQ0FQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9WTUlESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9UUklYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX01TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9NUFU0MDEgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfUEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1BTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9TQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9ZTTM4MTIgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfVUFSVDY4NTAgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfQUVEU1AxNiBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkRfVklEQz1tCiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfUENGODU4Mz15Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotCi0jCi0jIERNQSBFbmdpbmUgc3VwcG9ydAotIwotIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIENsaWVudHMKLSMKLQotIwotIyBETUEgRGV2aWNlcwotIwotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQVVUT0ZTNF9GUz1tCi0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCiBDT05GSUdfSVNPOTY2MF9GUz15CiBDT05GSUdfSk9MSUVUPXkKLSMgQ09ORklHX1pJU09GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9bQogQ09ORklHX01TRE9TX0ZTPW0KIENPTkZJR19WRkFUX0ZTPW0KLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCiBDT05GSUdfQURGU19GUz15Ci0jIENPTkZJR19BREZTX0ZTX1JXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwogQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotQ09ORklHX0FDT1JOX1BBUlRJVElPTj15CiAjIENPTkZJR19BQ09STl9QQVJUSVRJT05fQ1VNQU5BIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDT1JOX1BBUlRJVElPTl9FRVNPWCBpcyBub3Qgc2V0Ci1DT05GSUdfQUNPUk5fUEFSVElUSU9OX0lDUz15Ci1DT05GSUdfQUNPUk5fUEFSVElUSU9OX0FERlM9eQotQ09ORklHX0FDT1JOX1BBUlRJVElPTl9QT1dFUlRFQz15Ci1DT05GSUdfQUNPUk5fUEFSVElUSU9OX1JJU0NJWD15Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKIENPTkZJR19CU0RfRElTS0xBQkVMPXkKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCiBDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCiBDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCkBAIC05MjAsMTQgKzExNiw4IEBACiBDT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCiBDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCiBDT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KIENPTkZJR19OTFNfSVNPODg1OV84PW0KLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQVNDSUk9eQogQ09ORklHX05MU19JU084ODU5XzE9bQogQ09ORklHX05MU19JU084ODU5XzI9bQpAQCAtOTM3LDc5ICsxMjcsOSBAQAogQ09ORklHX05MU19JU084ODU5XzY9bQogQ09ORklHX05MU19JU084ODU5Xzc9bQogQ09ORklHX05MU19JU084ODU5Xzk9bQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAogQ09ORklHX05MU19LT0k4X1I9bQotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQogQ09ORklHX0RFQlVHX0VSUk9SUz15CiBDT05GSUdfREVCVUdfTEw9eQotIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9yeDUxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvcng1MV9kZWZjb25maWcKaW5kZXggNTZkNDkyOC4uZmZhZWY0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9yeDUxX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3J4NTFfZGVmY29uZmlnCkBAIC0xLDQ2MiArMSw1NyBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjOAotIyBGcmkgTWFyIDEzIDE1OjI4OjU2IDIwMDkKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNwotQ09ORklHX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLSMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19VSUQxNj15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS0FMTFNZTVM9eQotQ09ORklHX0tBTExTWU1TX0FMTD15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0tQUk9CRVM9eQotQ09ORklHX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLUNPTkZJR19GUkVFWkVSPXkKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT01BUD15Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAotCi0jCi0jIFRJIE9NQVAgSW1wbGVtZW50YXRpb25zCi0jCi1DT05GSUdfQVJDSF9PTUFQX09URz15Ci0jIENPTkZJR19BUkNIX09NQVAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUDIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT01BUDM9eQotCi0jCi0jIE9NQVAgRmVhdHVyZSBTZWxlY3Rpb25zCi0jCi0jIENPTkZJR19PTUFQX0RFQlVHX1BPV0VSRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfREVCVUdfQ0xPQ0tET01BSU4gaXMgbm90IHNldAogQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTPXkKLUNPTkZJR19PTUFQX01VWD15CiBDT05GSUdfT01BUF9NVVhfREVCVUc9eQotQ09ORklHX09NQVBfTVVYX1dBUk5JTkdTPXkKLUNPTkZJR19PTUFQX01DQlNQPXkKLSMgQ09ORklHX09NQVBfTVBVX1RJTUVSIGlzIG5vdCBzZXQKIENPTkZJR19PTUFQXzMyS19USU1FUj15Ci1DT05GSUdfT01BUF8zMktfVElNRVJfSFo9MTI4CiBDT05GSUdfT01BUF9ETV9USU1FUj15Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIgaXMgbm90IHNldAotQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDM9eQotQ09ORklHX09NQVBfU0VSSUFMX1dBS0U9eQotQ09ORklHX0FSQ0hfT01BUDM0WFg9eQogQ09ORklHX0FSQ0hfT01BUDM0MzA9eQotCi0jCi0jIE9NQVAgQm9hcmQgVHlwZQotIwotIyBDT05GSUdfTUFDSF9PTUFQM19CRUFHTEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX0xEUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09WRVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUDNfUEFORE9SQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfMzQzMFNEUCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9OT0tJQV9SWDUxPXkKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV8zMnY2Sz15Ci1DT05GSUdfQ1BVX1Y3PXkKLUNPTkZJR19DUFVfMzJ2Nz15Ci1DT05GSUdfQ1BVX0FCUlRfRVY3PXkKLUNPTkZJR19DUFVfUEFCUlRfSUZBUj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y3PXkKLUNPTkZJR19DUFVfQ0FDSEVfVklQVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjY9eQotQ09ORklHX0NQVV9UTEJfVjc9eQotQ09ORklHX0NQVV9IQVNfQVNJRD15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0FSTV9USFVNQkVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAotQ09ORklHX0hBU19UTFNfUkVHPXkKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotQ09ORklHX1ZNU1BMSVRfM0c9eQotIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCi0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMjgKIENPTkZJR19BRUFCST15CiAjIENPTkZJR19PQUJJX0NPTVBBVCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15Ci0jIENPTkZJR19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJpbml0PS9zYmluL3ByZWluaXQgdWJpLm10ZD1yb290ZnMgcm9vdD11YmkwOnJvb3RmcyByb290ZnN0eXBlPXViaWZzIHJvb3RmbGFncz1idWxrX3JlYWQsbm9fY2hrX2RhdGFfY3JjIHJ3IGNvbnNvbGU9dHR5TVRELGxvZyBjb25zb2xlPXR0eTAgY29uc29sZT10dHlTMiwxMTUyMDBuOCIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfVkZQPXkKLUNPTkZJR19WRlB2Mz15CiBDT05GSUdfTkVPTj15Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz15Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCiBDT05GSUdfUE09eQogQ09ORklHX1BNX0RFQlVHPXkKLSMgQ09ORklHX1BNX1ZFUkJPU0UgaXMgbm90IHNldAotQ09ORklHX0NBTl9QTV9UUkFDRT15Ci1DT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkQ9eQotQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15Ci0jIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19QTV9SVU5USU1FPXkKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPXkKLSMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKIENPTkZJR19JUF9QTlBfUkFSUD15Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTkZfREVGUkFHX0lQVjQgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KLSMgQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX0VDTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9UVEwgaXMgbm90IHNldAogQ09ORklHX0lQX05GX0ZJTFRFUj1tCi0jIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX1RBUkdFVF9MT0cgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0cgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFOR0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19QSE9ORVQ9eQotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RDUFBST0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKIENPTkZJR19CVD1tCiBDT05GSUdfQlRfTDJDQVA9bQogQ09ORklHX0JUX1NDTz1tCkBAIC00NjYsNzUzICs2MSw4MCBAQAogQ09ORklHX0JUX0JORVBfTUNfRklMVEVSPXkKIENPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUj15CiBDT05GSUdfQlRfSElEUD1tCi0KLSMKLSMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19CVF9IQ0lCVFVTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCVFNESU8gaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJVUFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCQ00yMDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJQQTEwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCRlVTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lWSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15CiBDT05GSUdfQ0ZHODAyMTE9eQotIyBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19OTDgwMjExPXkKLUNPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKLUNPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogQ09ORklHX01BQzgwMjExPW0KLQotIwotIyBSYXRlIGNvbnRyb2wgYWxnb3JpdGhtIHNlbGVjdGlvbgotIwogQ09ORklHX01BQzgwMjExX1JDX1BJRD15CiAjIENPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTCBpcyBub3Qgc2V0Ci1DT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9QSUQ9eQotIyBDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTCBpcyBub3Qgc2V0Ci1DT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVD0icGlkIgotIyBDT05GSUdfTUFDODAyMTFfTUVTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMV9MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExX0RFQlVHRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTFfREVCVUdfTUVOVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15Ci1DT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX09PUFM9eQotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09NQVBfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAotIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAogQ09ORklHX01URF9PTkVOQU5EPXkKLSMgQ09ORklHX01URF9PTkVOQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORF9HRU5FUklDIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT05FTkFORF9PTUFQMj15Ci0jIENPTkZJR19NVERfT05FTkFORF9PVFAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkRfMlhfUFJPR1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORF9TSU0gaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwogQ09ORklHX01URF9VQkk9eQotQ09ORklHX01URF9VQklfV0xfVEhSRVNIT0xEPTQwOTYKLUNPTkZJR19NVERfVUJJX0JFQl9SRVNFUlZFPTEKLSMgQ09ORklHX01URF9VQklfR0xVRUJJIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgZGVidWdnaW5nIG9wdGlvbnMKLSMKLSMgQ09ORklHX01URF9VQklfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9bQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9bQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKIENPTkZJR19TQ1NJX01VTFRJX0xVTj15Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAogQ09ORklHX1NDU0lfU0NBTl9BU1lOQz15Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKIENPTkZJR19UVU49bQotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPW0KLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogQ09ORklHX1NNQzkxWD1tCi0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTl84MDIxMT15Ci0jIENPTkZJR19MSUJFUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJFUlRBU19USElORklSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEw4MTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExX0hXU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1A1NF9DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDMgaXMgbm90IHNldAotIyBDT05GSUdfQjQzTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1pEMTIxMVJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUMlgwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0dQSU89bQogQ09ORklHX0tFWUJPQVJEX1RXTDQwMzA9eQogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTUlTQz15Ci0jIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0NNMTA5IGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UV0w0MDMwX1BXUkJVVFRPTj15CiBDT05GSUdfSU5QVVRfVUlOUFVUPW0KLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPW0KLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogQ09ORklHX0kyQ19PTUFQPXkKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogQ09ORklHX1NQST15Ci0jIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NQSV9NQVNURVI9eQotCi0jCi0jIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfU1BJX09NQVAyNFhYPXkKLQotIwotIyBTUEkgUHJvdG9jb2wgTWFzdGVycwotIwotIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR1BJT19TWVNGUz15Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CiBDT05GSUdfR1BJT19UV0w0MDMwPXkKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19PTUFQX1dBVENIRE9HPW0KIENPTkZJR19UV0w0MDMwX1dBVENIRE9HPW0KLQotIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogQ09ORklHX1RXTDQwMzBfQ09SRT15Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotQ09ORklHX1ZJREVPX0RFVj1tCi1DT05GSUdfVklERU9fVjRMMl9DT01NT049bQotQ09ORklHX1ZJREVPX0FMTE9XX1Y0TDE9eQotQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUPXkKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19NRURJQT1tCi0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRURJQV9BVFRBQ0ggaXMgbm90IHNldAotQ09ORklHX01FRElBX1RVTkVSPW0KLSMgQ09ORklHX01FRElBX1RVTkVSX0NVU1RPTUlaRSBpcyBub3Qgc2V0Ci1DT05GSUdfTUVESUFfVFVORVJfU0lNUExFPW0KLUNPTkZJR19NRURJQV9UVU5FUl9UREE4MjkwPW0KLUNPTkZJR19NRURJQV9UVU5FUl9UREE5ODg3PW0KLUNPTkZJR19NRURJQV9UVU5FUl9URUE1NzYxPW0KLUNPTkZJR19NRURJQV9UVU5FUl9URUE1NzY3PW0KLUNPTkZJR19NRURJQV9UVU5FUl9NVDIwWFg9bQotQ09ORklHX01FRElBX1RVTkVSX1hDMjAyOD1tCi1DT05GSUdfTUVESUFfVFVORVJfWEM1MDAwPW0KLUNPTkZJR19WSURFT19WNEwyPW0KLUNPTkZJR19WSURFT19WNEwxPW0KLUNPTkZJR19WSURFT19DQVBUVVJFX0RSSVZFUlM9eQotIyBDT05GSUdfVklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fSEVMUEVSX0NISVBTX0FVVE89eQotIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19DUElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0NQSUEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldAotIyBDT05GSUdfU09DX0NBTUVSQSBpcyBub3Qgc2V0Ci1DT05GSUdfVjRMX1VTQl9EUklWRVJTPXkKLSMgQ09ORklHX1VTQl9WSURFT19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0EgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fUFZSVVNCMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19FTTI4WFggaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fVVNCVklTSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9WSUNBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSUJNQ0FNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LT05JQ0FXQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUVVJQ0tDQU1fTUVTU0VOR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FVDYxWDI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVkNBTUNISVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09WNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRTQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU045QzEwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RWNjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9aQzAzMDEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BXQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWlIzNjRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RLV0VCQ0FNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TMjI1NSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFESU9fQURBUFRFUlM9eQotIyBDT05GSUdfVVNCX0RTQlIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJNDcwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVI4MDAgaXMgbm90IHNldAotIyBDT05GSUdfUkFESU9fVEVBNTc2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19SRUdVTEFUT1I9eQorQ09ORklHX1JFR1VMQVRPUl9UV0w0MDMwPXkKIENPTkZJR19GQj15Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi1DT05GSUdfT01BUDJfVlJBTT15Ci1DT05GSUdfT01BUDJfVlJGQj15CiBDT05GSUdfT01BUDJfRFNTPXkKLUNPTkZJR19PTUFQMl9WUkFNX1NJWkU9MAogIyBDT05GSUdfT01BUDJfRFNTX0RFQlVHX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfT01BUDJfRFNTX0NPTExFQ1RfSVJRX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NQVAyX0RTU19EUEkgaXMgbm90IHNldAotIyBDT05GSUdfT01BUDJfRFNTX1JGQkkgaXMgbm90IHNldAogIyBDT05GSUdfT01BUDJfRFNTX1ZFTkMgaXMgbm90IHNldAogQ09ORklHX09NQVAyX0RTU19TREk9eQotIyBDT05GSUdfT01BUDJfRFNTX0RTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQMl9EU1NfRkFLRV9WU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUDJfRFNTX01JTl9GQ0tfUEVSX1BDSz0wCiBDT05GSUdfRkJfT01BUDI9eQotQ09ORklHX0ZCX09NQVAyX0RFQlVHX1NVUFBPUlQ9eQotQ09ORklHX0ZCX09NQVAyX05VTV9GQlM9MwotCi0jCi0jIE9NQVAyLzMgRGlzcGxheSBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfUEFORUxfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQU5FTF9TSEFSUF9MUzAzN1Y3RFcwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQU5FTF9TSEFSUF9MUTA0M1QxREcwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQU5FTF9UT1BQT0xZX1RETzM1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQU5FTF9UUE9fVEQwNDNNVEVBMSBpcyBub3Qgc2V0CiBDT05GSUdfUEFORUxfQUNYNTY1QUtNPXkKLQotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfRElTUExBWV9TVVBQT1JUPXkKLQotIwotIyBEaXNwbGF5IGhhcmR3YXJlIGRyaXZlcnMKLSMKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKIENPTkZJR19MT0dPPXkKIENPTkZJR19TT1VORD15Ci0jIENPTkZJR19TT1VORF9PU1NfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfU05EPXkKLUNPTkZJR19TTkRfVElNRVI9eQotQ09ORklHX1NORF9QQ009eQotIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlYRVJfT1NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9QQ01fT1NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IUlRJTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15Ci1DT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NORF9EUklWRVJTPXkKLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0FSTT15Ci1DT05GSUdfU05EX1NQST15CiAjIENPTkZJR19TTkRfVVNCIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfU09DPXkKIENPTkZJR19TTkRfT01BUF9TT0M9eQotQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9eQotIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPW0KLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCiBDT05GSUdfVVNCX0hJRD1tCi0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotQ09ORklHX0hJRF9DT01QQVQ9eQogQ09ORklHX0hJRF9BNFRFQ0g9bQogQ09ORklHX0hJRF9BUFBMRT1tCiBDT05GSUdfSElEX0JFTEtJTj1tCkBAIC0xMjIyLDY0NSArMTQ0LDc5IEBACiBDT05GSUdfSElEX0VaS0VZPW0KIENPTkZJR19ISURfR1lSQVRJT049bQogQ09ORklHX0hJRF9MT0dJVEVDSD1tCi0jIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX01JQ1JPU09GVD1tCiBDT05GSUdfSElEX01PTlRFUkVZPW0KLSMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1BBTlRIRVJMT1JEPW0KLSMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfUEVUQUxZTlg9bQogQ09ORklHX0hJRF9TQU1TVU5HPW0KIENPTkZJR19ISURfU09OWT1tCiBDT05GSUdfSElEX1NVTlBMVVM9bQotIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQogQ09ORklHX1VTQl9ERUJVRz15CiBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NVU1BFTkQ9eQotQ09ORklHX1VTQl9PVEc9eQotQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUPXkKIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUI9eQogQ09ORklHX1VTQl9NT049eQotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTVVTQl9IRFJDPXkKLUNPTkZJR19VU0JfTVVTQl9TT0M9eQotCi0jCi0jIE9NQVAgMzQzeCBoaWdoIHNwZWVkIFVTQiBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfTVVTQl9IT1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX1BFUklQSEVSQUwgaXMgbm90IHNldAogQ09ORklHX1VTQl9NVVNCX09URz15CiBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkM9eQotQ09ORklHX1VTQl9NVVNCX0hEUkNfSENEPXkKLSMgQ09ORklHX01VU0JfUElPX09OTFkgaXMgbm90IHNldAotQ09ORklHX1VTQl9JTlZFTlRSQV9ETUE9eQotIyBDT05GSUdfVVNCX1RJX0NQUElfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOwotIwotCi0jCi0jIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9bQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTElCVVNVQUw9eQotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogQ09ORklHX1VTQl9URVNUPW0KLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUPW0KIENPTkZJR19VU0JfR0FER0VUX0RFQlVHPXkKIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTPXkKIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZTPXkKLUNPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCi1DT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQogQ09ORklHX1VTQl9aRVJPPW0KLSMgQ09ORklHX1VTQl9aRVJPX0hOUFRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KLSMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUFTU19TVE9SQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dfTk9LSUE9bQotIyBDT05GSUdfVVNCX0dfTVVMVEkgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotQ09ORklHX1VTQl9PVEdfVVRJTFM9eQotIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU1AxMzAxX09NQVAgaXMgbm90IHNldAogQ09ORklHX1RXTDQwMzBfVVNCPXkKIENPTkZJR19NTUM9bQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQkxPQ0s9bQogIyBDT05GSUdfTU1DX0JMT0NLX0JPVU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX09NQVAgaXMgbm90IHNldAogQ09ORklHX01NQ19PTUFQX0hTPW0KLSMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiBDT05GSUdfTkVXX0xFRFM9eQogQ09ORklHX0xFRFNfQ0xBU1M9bQotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0jIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCi0jIENPTkZJR19MRURTX1RSSUdHRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9bQotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9UV0w0MDMwPW0KLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotQ09ORklHX1JFR1VMQVRPUj15Ci1DT05GSUdfUkVHVUxBVE9SX1RXTDQwMzA9eQotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9bQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz1tCiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD1tCi0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKIENPTkZJR19RVU9UQT15Ci0jIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15Ci1DT05GSUdfUVVPVEFfVFJFRT15Ci0jIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKIENPTkZJR19RRk1UX1YyPXkKLUNPTkZJR19RVU9UQUNUTD15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlVTRV9GUz1tCi0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9bQogQ09ORklHX01TRE9TX0ZTPW0KIENPTkZJR19WRkFUX0ZTPW0KLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfVUJJRlNfRlM9eQotIyBDT05GSUdfVUJJRlNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfVUJJRlNfRlNfQURWQU5DRURfQ09NUFIgaXMgbm90IHNldAotQ09ORklHX1VCSUZTX0ZTX0xaTz15Ci1DT05GSUdfVUJJRlNfRlNfWkxJQj15Ci0jIENPTkZJR19VQklGU19GU19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPW0KIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPW0KLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPW0KLUNPTkZJR19TVU5SUENfR1NTPW0KLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PW0KLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwogQ09ORklHX1BSSU5US19USU1FPXkKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19USU1FUl9TVEFUUz15Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKLUNPTkZJR19ERUJVR19NVVRFWEVTPXkKLUNPTkZJR19ERUJVR19MT0NLX0FMTE9DPXkKIENPTkZJR19QUk9WRV9MT0NLSU5HPXkKLUNPTkZJR19MT0NLREVQPXkKIENPTkZJR19MT0NLX1NUQVQ9eQotIyBDT05GSUdfREVCVUdfTE9DS0RFUCBpcyBub3Qgc2V0Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1M9eQogQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBQ0tUUkFDRT15Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VDVVJJVFk9eQotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9ORVRXT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX1BBVEggaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfUk9PVFBMVUcgaXMgbm90IHNldAotQ09ORklHX1NFQ1VSSVRZX0RFRkFVTFRfTU1BUF9NSU5fQUREUj0wCi1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKIENPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj15Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz15Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwogQ09ORklHX0NSWVBUT19BRVM9eQotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FSQzQ9eQotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKLUNPTkZJR19DUllQVE9fTFpPPXkKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD15Ci1DT05GSUdfQ1JDMTY9eQotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKIENPTkZJR19DUkM3PW0KIENPTkZJR19MSUJDUkMzMkM9eQotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19MWk9fQ09NUFJFU1M9eQotQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvczNjMjQxMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3MzYzI0MTBfZGVmY29uZmlnCmluZGV4IDQ0Y2VhMmQuLmY5MDk2YzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvczNjMjQxMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zM2MyNDEwX2RlZmNvbmZpZwpAQCAtMSwzNDcgKzEsMzEgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNAotIyBGcmkgTWF5IDI4IDE5OjE1OjQ4IDIwMTAKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX0hBVkVfUFdNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0FSQ0hfVVNFU19HRVRUSU1FT0ZGU0VUPXkKLUNPTkZJR19IQVZFX1BST0NfQ1BVPXkKLUNPTkZJR19OT19JT1BPUlQ9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfQVJDSF9IQVNfQ1BVRlJFUT15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfTkVFRF9ETUFfTUFQX1NUQVRFPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQotQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQotQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15Ci1DT05GSUdfS0VSTkVMX0daSVA9eQotIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz1tCiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNgotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfTkFNRVNQQUNFUz15Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLUNPTkZJR19SRF9CWklQMj15Ci1DT05GSUdfUkRfTFpNQT15Ci1DT05GSUdfUkRfTFpPPXkKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi1DT05GSUdfU0xPV19XT1JLPXkKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLUNPTkZJR19GUkVFWkVSPXkKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotQ09ORklHX01NVT15Ci0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVYUFJFU1MgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ05TM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RPVkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OVUM5M1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hNT0JJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUzNDMjQxMD15Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVA2NDQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQNjQ0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1M1UEMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVBWMjEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1U4NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BMQVRfU1BFQVIgaXMgbm90IHNldAotQ09ORklHX1BMQVRfU0FNU1VORz15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0jIENPTkZJR19TM0NfQk9PVF9XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfUzNDX0JPT1RfRVJST1JfUkVTRVQ9eQotQ09ORklHX1MzQ19CT09UX1VBUlRfRk9SQ0VfRklGTz15Ci1DT05GSUdfUzNDX0xPV0xFVkVMX1VBUlRfUE9SVD0wCi1DT05GSUdfU0FNU1VOR19DTEtTUkM9eQotQ09ORklHX1MzQ19HUElPX0NGR19TM0MyNFhYPXkKLUNPTkZJR19TM0NfR1BJT19QVUxMX1VQRE9XTj15Ci1DT05GSUdfUzNDX0dQSU9fUFVMTF9VUD15Ci1DT05GSUdfU0FNU1VOR19HUElPX0VYVFJBPTAKLUNPTkZJR19TM0NfR1BJT19TUEFDRT0wCiBDT05GSUdfUzNDX0FEQz15Ci1DT05GSUdfUzNDX0RFVl9IU01NQz15Ci1DT05GSUdfUzNDX0RFVl9IU01NQzE9eQotQ09ORklHX1MzQ19ERVZfSFdNT049eQotQ09ORklHX1MzQ19ERVZfRkI9eQotQ09ORklHX1MzQ19ERVZfVVNCX0hPU1Q9eQotQ09ORklHX1MzQ19ERVZfV0RUPXkKLUNPTkZJR19TM0NfREVWX05BTkQ9eQotQ09ORklHX1MzQ19ETUE9eQotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX1NBTVNVTkdfUE1fREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNU1VOR19QTV9DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfUExBVF9TM0MyNFhYPXkKLUNPTkZJR19DUFVfTExTRVJJQUxfUzNDMjQxMD15Ci1DT05GSUdfQ1BVX0xMU0VSSUFMX1MzQzI0NDA9eQotQ09ORklHX1MzQzI0MTBfQ0xPQ0s9eQotQ09ORklHX1MzQzI0NDNfQ0xPQ0s9eQotQ09ORklHX1MzQzI0WFhfRENMSz15CiBDT05GSUdfUzNDMjRYWF9QV009eQotQ09ORklHX1MzQzI0WFhfR1BJT19FWFRSQT0xMjgKLUNPTkZJR19TM0MyNFhYX0dQSU9fRVhUUkE2ND15Ci1DT05GSUdfUzNDMjRYWF9HUElPX0VYVFJBMTI4PXkKLUNPTkZJR19QTV9TSU1URUM9eQotQ09ORklHX1MzQzI0MTBfRE1BPXkKLSMgQ09ORklHX1MzQzI0MTBfRE1BX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19NQUNIX1NNREs9eQotQ09ORklHX1MzQzI0WFhfU0lNVEVDX0FVRElPPXkKLUNPTkZJR19TM0MyNDEwX1NFVFVQX1RTPXkKLQotIwotIyBTM0MyNDAwIE1hY2hpbmVzCi0jCi1DT05GSUdfQ1BVX1MzQzI0MTA9eQotQ09ORklHX0NQVV9TM0MyNDEwX0RNQT15Ci1DT05GSUdfUzNDMjQxMF9QTT15Ci1DT05GSUdfUzNDMjQxMF9HUElPPXkKLUNPTkZJR19TSU1URUNfTk9SPXkKLUNPTkZJR19NQUNIX0JBU1RfSURFPXkKLQotIwotIyBTM0MyNDEwIE1hY2hpbmVzCi0jCiBDT05GSUdfQVJDSF9TTURLMjQxMD15CiBDT05GSUdfQVJDSF9IMTk0MD15Ci0jIENPTkZJR19IMTk0MEJUIGlzIG5vdCBzZXQKLUNPTkZJR19QTV9IMTk0MD15CiBDT05GSUdfTUFDSF9OMzA9eQotQ09ORklHX01BQ0hfTjM1PXkKIENPTkZJR19BUkNIX0JBU1Q9eQogQ09ORklHX01BQ0hfT1RPTT15CiBDT05GSUdfTUFDSF9BTUxfTTU5MDA9eQotQ09ORklHX0JBU1RfUEMxMDRfSVJRPXkKIENPTkZJR19NQUNIX1RDVF9IQU1NRVI9eQogQ09ORklHX01BQ0hfVlIxMDAwPXkKIENPTkZJR19NQUNIX1FUMjQxMD15Ci1DT05GSUdfQ1BVX1MzQzI0MTI9eQotQ09ORklHX1MzQzI0MTJfRE1BPXkKLUNPTkZJR19TM0MyNDEyX1BNPXkKLQotIwotIyBTM0MyNDEyIE1hY2hpbmVzCi0jCiBDT05GSUdfTUFDSF9KSVZFPXkKLSMgQ09ORklHX01BQ0hfSklWRV9TSE9XX0JPT1RMT0FERVIgaXMgbm90IHNldAotQ09ORklHX01BQ0hfU01ESzI0MTM9eQotQ09ORklHX01BQ0hfUzNDMjQxMz15CiBDT05GSUdfTUFDSF9TTURLMjQxMj15CiBDT05GSUdfTUFDSF9WU1RNUz15Ci1DT05GSUdfQ1BVX1MzQzI0MTY9eQotQ09ORklHX1MzQzI0MTZfRE1BPXkKLQotIwotIyBTM0MyNDE2IE1hY2hpbmVzCi0jCiBDT05GSUdfTUFDSF9TTURLMjQxNj15Ci1DT05GSUdfQ1BVX1MzQzI0NDA9eQotQ09ORklHX0NQVV9TM0MyNDQyPXkKLUNPTkZJR19DUFVfUzNDMjQ0WD15Ci1DT05GSUdfUzNDMjQ0MF9YVEFMXzEyMDAwMDAwPXkKLUNPTkZJR19TM0MyNDQwX1hUQUxfMTY5MzQ0MDA9eQotQ09ORklHX1MzQzI0NDBfRE1BPXkKLQotIwotIyBTM0MyNDQwIGFuZCBTM0MyNDQyIE1hY2hpbmVzCi0jCiBDT05GSUdfTUFDSF9BTlVCSVM9eQogQ09ORklHX01BQ0hfTkVPMTk3M19HVEEwMj15CiBDT05GSUdfTUFDSF9PU0lSSVM9eQpAQCAtMzQ5LDIzNiArMzMsNTcgQEAKIENPTkZJR19NQUNIX1JYMzcxNT15CiBDT05GSUdfQVJDSF9TM0MyNDQwPXkKIENPTkZJR19NQUNIX05FWENPREVSXzI0NDA9eQotQ09ORklHX1NNREsyNDQwX0NQVTI0NDA9eQogQ09ORklHX1NNREsyNDQwX0NQVTI0NDI9eQogQ09ORklHX01BQ0hfQVQyNDQwRVZCPXkKIENPTkZJR19NQUNIX01JTkkyNDQwPXkKIENPTkZJR19NQUNIX1JYMTk1MD15Ci1DT05GSUdfQ1BVX1MzQzI0NDM9eQotQ09ORklHX1MzQzI0NDNfRE1BPXkKLQotIwotIyBTM0MyNDQzIE1hY2hpbmVzCi0jCiBDT05GSUdfTUFDSF9TTURLMjQ0Mz15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTIwVD15Ci1DT05GSUdfQ1BVX0FSTTkyNlQ9eQotQ09ORklHX0NQVV8zMnY0VD15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQotQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKLUNPTkZJR19DUFVfUEFCUlRfTEVHQUNZPXkKLUNPTkZJR19DUFVfQ0FDSEVfVjRXVD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwogIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi1DT05GSUdfSVNBPXkKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjAwCi0jIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTk5OTk5OQotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0jIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9oZGExIHJvIGluaXQ9L2Jpbi9iYXNoIGNvbnNvbGU9dHR5U0FDMCIKLSMgQ09ORklHX0NNRExJTkVfRk9SQ0UgaXMgbm90IHNldAotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQogQ09ORklHX0ZQRV9OV0ZQRV9YUD15Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRlAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQU9VVD15CiBDT05GSUdfQklORk1UX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkQ9eQotQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CiBDT05GSUdfQVBNX0VNVUxBVElPTj1tCi0jIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19QTV9PUFM9eQotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj1tCi0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci1DT05GSUdfWEZSTV9JUENPTVA9bQogQ09ORklHX05FVF9LRVk9bQotIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfSVBJUD1tCiBDT05GSUdfTkVUX0lQR1JFPW0KLSMgQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAogQ09ORklHX0lORVRfQUg9bQogQ09ORklHX0lORVRfRVNQPW0KIENPTkZJR19JTkVUX0lQQ09NUD1tCi1DT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9UVU5ORUw9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQogQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEPXkKLUNPTkZJR19UQ1BfQ09OR19CSUM9bQotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19UQ1BfQ09OR19XRVNUV09PRD1tCi1DT05GSUdfVENQX0NPTkdfSFRDUD1tCiBDT05GSUdfVENQX0NPTkdfSFNUQ1A9bQogQ09ORklHX1RDUF9DT05HX0hZQkxBPW0KLUNPTkZJR19UQ1BfQ09OR19WRUdBUz1tCiBDT05GSUdfVENQX0NPTkdfU0NBTEFCTEU9bQogQ09ORklHX1RDUF9DT05HX0xQPW0KIENPTkZJR19UQ1BfQ09OR19WRU5PPW0KIENPTkZJR19UQ1BfQ09OR19ZRUFIPW0KIENPTkZJR19UQ1BfQ09OR19JTExJTk9JUz1tCi0jIENPTkZJR19ERUZBVUxUX0JJQyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DVUJJQz15Ci0jIENPTkZJR19ERUZBVUxUX0hUQ1AgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9IWUJMQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1ZFR0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfVkVOTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1dFU1RXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfUkVOTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2PW0KIENPTkZJR19JUFY2X1BSSVZBQ1k9eQogQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eQotIyBDT05GSUdfSVBWNl9ST1VURV9JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAogQ09ORklHX0lORVQ2X0FIPW0KIENPTkZJR19JTkVUNl9FU1A9bQogQ09ORklHX0lORVQ2X0lQQ09NUD1tCiBDT05GSUdfSVBWNl9NSVA2PW0KLUNPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCi1DT05GSUdfSU5FVDZfVFVOTkVMPW0KLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCiBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OPW0KLUNPTkZJR19JUFY2X1NJVD1tCi0jIENPTkZJR19JUFY2X1NJVF82UkQgaXMgbm90IHNldAotQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQogQ09ORklHX0lQVjZfVFVOTkVMPW0KLSMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkVURklMVEVSX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQogQ09ORklHX05GX0NPTk5UUkFDSz1tCi1DT05GSUdfTkZfQ1RfQUNDVD15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQogQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQogQ09ORklHX05GX0NUX1BST1RPX0RDQ1A9bQotQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCiBDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD1tCiBDT05GSUdfTkZfQ1RfUFJPVE9fVURQTElURT1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQT1tCkBAIC01OTEsMzcgKzk2LDEzIEBACiBDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQogQ09ORklHX05GX0NUX05FVExJTks9bQotIyBDT05GSUdfTkVURklMVEVSX1RQUk9YWSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotCi0jCi0jIFh0YWJsZXMgY29tYmluZWQgbW9kdWxlcwotIwotQ09ORklHX05FVEZJTFRFUl9YVF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfQ09OTk1BUks9bQotCi0jCi0jIFh0YWJsZXMgdGFyZ2V0cwotIwogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTk1BUks9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1AgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSEw9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTEVEPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05PVFJBQ0sgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVD1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RFRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQIGlzIG5vdCBzZXQKLQotIwotIyBYdGFibGVzIG1hdGNoZXMKLSMKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ0xVU1RFUj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQpAQCAtNjMzLDE0ICsxMTQsMTIgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEw9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PU0YgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQpAQCAtNjU2LDQzICsxMzUsNyBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyPW0KIENPTkZJR19JUF9WUz1tCi0jIENPTkZJR19JUF9WU19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9WU19UQUJfQklUUz0xMgotCi0jCi0jIElQVlMgdHJhbnNwb3J0IHByb3RvY29sIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lQX1ZTX1BST1RPX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9WU19QUk9UT19VRFAgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlNfUFJPVE9fRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTX1BST1RPX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTX1BST1RPX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIElQVlMgc2NoZWR1bGVyCi0jCi0jIENPTkZJR19JUF9WU19SUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9WU19XUlIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlNfTEMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlNfV0xDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTX0xCTEMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlNfTEJMQ1IgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlNfREggaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlNfU0ggaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlNfU0VEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTX05RIGlzIG5vdCBzZXQKLQotIwotIyBJUFZTIGFwcGxpY2F0aW9uIGhlbHBlcgotIwotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05GX0RFRlJBR19JUFY0PW0KIENPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKIENPTkZJR19JUF9ORl9RVUVVRT1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KQEAgLTcwNCwyMiArMTQ3LDEwIEBACiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQogQ09ORklHX05GX05BVD1tCi1DT05GSUdfTkZfTkFUX05FRURFRD15CiBDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCiBDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUM9bQotQ09ORklHX05GX05BVF9QUk9UT19EQ0NQPW0KLUNPTkZJR19ORl9OQVRfUFJPVE9fR1JFPW0KLUNPTkZJR19ORl9OQVRfUFJPVE9fVURQTElURT1tCi1DT05GSUdfTkZfTkFUX1BST1RPX1NDVFA9bQotQ09ORklHX05GX05BVF9GVFA9bQotQ09ORklHX05GX05BVF9JUkM9bQotQ09ORklHX05GX05BVF9URlRQPW0KLUNPTkZJR19ORl9OQVRfQU1BTkRBPW0KLUNPTkZJR19ORl9OQVRfUFBUUD1tCi1DT05GSUdfTkZfTkFUX0gzMjM9bQotQ09ORklHX05GX05BVF9TSVA9bQogQ09ORklHX0lQX05GX01BTkdMRT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCkBAIC03MjgsMTAgKzE1OSw2IEBACiBDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9BUlBGSUxURVI9bQogQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQotCi0jCi0jIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCiBDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjY9bQogQ09ORklHX0lQNl9ORl9RVUVVRT1tCiBDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KQEAgLTc0OSwzOSArMTc2LDggQEAKIENPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVA2X05GX01BTkdMRT1tCiBDT05GSUdfSVA2X05GX1JBVz1tCi0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0wyVFAgaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKIENPTkZJR19CVD1tCiBDT05GSUdfQlRfTDJDQVA9bQotIyBDT05GSUdfQlRfTDJDQVBfRVhUX0ZFQVRVUkVTIGlzIG5vdCBzZXQKIENPTkZJR19CVF9TQ089bQogQ09ORklHX0JUX1JGQ09NTT1tCiBDT05GSUdfQlRfUkZDT01NX1RUWT15CkBAIC03ODksMTIgKzE4NSw2IEBACiBDT05GSUdfQlRfQk5FUF9NQ19GSUxURVI9eQogQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSPXkKIENPTkZJR19CVF9ISURQPW0KLQotIwotIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0JUX0hDSUJUVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJUU0RJTyBpcyBub3Qgc2V0CiBDT05GSUdfQlRfSENJVUFSVD1tCiBDT05GSUdfQlRfSENJVUFSVF9IND15CiBDT05GSUdfQlRfSENJVUFSVF9CQ1NQPXkKQEAgLTgwMyw0MjggKzE5Myw1OCBAQAogQ09ORklHX0JUX0hDSUJQQTEwWD1tCiBDT05GSUdfQlRfSENJQkZVU0I9bQogQ09ORklHX0JUX0hDSVZIQ0k9bQotIyBDT05GSUdfQlRfTVJWTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotQ09ORklHX1dFWFRfQ09SRT15Ci1DT05GSUdfV0VYVF9QUk9DPXkKIENPTkZJR19DRkc4MDIxMT1tCi0jIENPTkZJR19OTDgwMjExX1RFU1RNT0RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFM9eQotIyBDT05GSUdfQ0ZHODAyMTFfSU5URVJOQUxfUkVHREIgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX1dFWFQ9eQotQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiBDT05GSUdfTUFDODAyMTE9bQotQ09ORklHX01BQzgwMjExX0hBU19SQz15Ci1DT05GSUdfTUFDODAyMTFfUkNfTUlOU1RSRUw9eQotIyBDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9QSUQgaXMgbm90IHNldAotQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUw9eQotQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQ9Im1pbnN0cmVsIgogQ09ORklHX01BQzgwMjExX01FU0g9eQogQ09ORklHX01BQzgwMjExX0xFRFM9eQotIyBDT05GSUdfTUFDODAyMTFfREVCVUdfTUVOVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBSUYgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQotQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQogQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTV9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1JPTT15Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0lNUEE3IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAotIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkQ9eQotQ09ORklHX01URF9OQU5EX0VDQz15Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU01fQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0RFTkFMSV9TQ1JBVENIX1JFR19BRERSPTB4RkYxMDgwMTgKLSMgQ09ORklHX01URF9OQU5EX0dQSU8gaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15CiBDT05GSUdfTVREX05BTkRfUzNDMjQxMD15Ci0jIENPTkZJR19NVERfTkFORF9TM0MyNDEwX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1MzQzI0MTBfSFdFQ0MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUzNDMjQxMF9DTEtTVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogQ09ORklHX1BBUlBPUlQ9eQogQ09ORklHX1BBUlBPUlRfUEM9bQotIyBDT05GSUdfUEFSUE9SVF9QQ19GSUZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlRfUENfU1VQRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUX0dTQyBpcyBub3Qgc2V0CiBDT05GSUdfUEFSUE9SVF9BWDg4Nzk2PW0KIENPTkZJR19QQVJQT1JUXzEyODQ9eQotQ09ORklHX1BBUlBPUlRfTk9UX1BDPXkKLSMgQ09ORklHX1BOUCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19QQVJJREUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCiBDT05GSUdfQkxLX0RFVl9OQkQ9bQogQ09ORklHX0JMS19ERVZfVUI9bQogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiBDT05GSUdfQVRBX09WRVJfRVRIPW0KLSMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJX0RBQzc1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotQ09ORklHX0VFUFJPTV9BVDI0PXkKIENPTkZJR19FRVBST01fQVQyNT1tCiBDT05GSUdfRUVQUk9NX0xFR0FDWT1tCi0jIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CiBDT05GSUdfRUVQUk9NXzkzQ1g2PW0KLSMgQ09ORklHX0lXTUMzMjAwVE9QIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKLQotIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCi0jCi1DT05GSUdfSURFX0FUQVBJPXkKLSMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0lERV9HRD15Ci1DT05GSUdfSURFX0dEX0FUQT15Ci0jIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFQ0Q9eQotQ09ORklHX0JMS19ERVZfSURFQ0RfVkVSQk9TRV9FUlJPUlM9eQogQ09ORklHX0JMS19ERVZfSURFVEFQRT1tCi0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX1BST0NfRlM9eQotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKIENPTkZJR19CTEtfREVWX1BMQVRGT1JNPXkKLSMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfU0NTSV9NT0Q9eQotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQogQ09ORklHX1NDU0lfVEdUPW0KLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQogQ09ORklHX0NIUl9ERVZfU1Q9bQotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1NSPW0KIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CiBDT05GSUdfQ0hSX0RFVl9TRz15CiBDT05GSUdfQ0hSX0RFVl9TQ0g9bQogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAogQ09ORklHX1NDU0lfU0NBTl9BU1lOQz15Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSEExNTJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRFRDMzI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRU5FUklDX05DUjUzODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRU5FUklDX05DUjUzODBfTU1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BQQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lNTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05DUjUzQzQwNkEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QQVMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ19GQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M0MTYgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9UMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX1BBVEFfUExBVEZPUk09eQotIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogQ09ORklHX0RNOTAwMD15Ci1DT05GSUdfRE05MDAwX0RFQlVHTEVWRUw9NAotIyBDT05GSUdfRE05MDAwX0ZPUkNFX1NJTVBMRV9QSFlfUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDE3MDAgaXMgbm90IHNldAotIyBDT05GSUdfREVQQ0EgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NTODl4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPQ0tFVCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19MSUJFUlRBU19USElORklSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDc2QzUwWF9VU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX1JORElTX1dMQU4gaXMgbm90IHNldAotIyBDT05GSUdfUlRMODE4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMV9IV1NJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEhfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDNMRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJFUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QNTRfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUMlgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTDEyWFggaXMgbm90IHNldAotIyBDT05GSUdfWkQxMjExUlcgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JUEhFVEggaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BMSVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci1DT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCi0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0Ci1DT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfVENBNjQxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTE04MzIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFPXkKLUNPTkZJR19NT1VTRV9QUzI9eQotQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKLUNPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKLUNPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKLUNPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15Ci0jIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAogQ09ORklHX01PVVNFX0FQUExFVE9VQ0g9bQogQ09ORklHX01PVVNFX0JDTTU5NzQ9bQotIyBDT05GSUdfTU9VU0VfSU5QT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0xPR0lCTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9QQzExMFBBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQyBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfSk9ZU1RJQ0s9eQogQ09ORklHX0pPWVNUSUNLX0FOQUxPRz1tCiBDT05GSUdfSk9ZU1RJQ0tfQTNEPW0KQEAgLTEyMzgsOSArMjU4LDYgQEAKIENPTkZJR19KT1lTVElDS19TSURFV0lOREVSPW0KIENPTkZJR19KT1lTVElDS19UTURDPW0KIENPTkZJR19KT1lTVElDS19JRk9SQ0U9bQotIyBDT05GSUdfSk9ZU1RJQ0tfSUZPUkNFX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19JRk9SQ0VfMjMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX1dBUlJJT1IgaXMgbm90IHNldAogQ09ORklHX0pPWVNUSUNLX01BR0VMTEFOPW0KIENPTkZJR19KT1lTVElDS19TUEFDRU9SQj1tCiBDT05GSUdfSk9ZU1RJQ0tfU1BBQ0VCQUxMPW0KQEAgLTEyNTQsNTIgKzI3MSw5IEBACiBDT05GSUdfSk9ZU1RJQ0tfWFBBRD1tCiBDT05GSUdfSk9ZU1RJQ0tfWFBBRF9GRj15CiBDT05GSUdfSk9ZU1RJQ0tfWFBBRF9MRURTPXkKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9EWU5BUFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0hBTVBTSElSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FRVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUNTNTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0hUQ1BFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1dNOTdYWCBpcyBub3Qgc2V0CiBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURT1tCi1DT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0VHQUxBWD15Ci1DT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX1BBTkpJVD15Ci1DT05GSUdfVE9VQ0hTQ1JFRU5fVVNCXzNNPXkKLUNPTkZJR19UT1VDSFNDUkVFTl9VU0JfSVRNPXkKLUNPTkZJR19UT1VDSFNDUkVFTl9VU0JfRVRVUkJPPXkKLUNPTkZJR19UT1VDSFNDUkVFTl9VU0JfR1VOWkU9eQotQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9ETUNfVFNDMTA9eQotQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9JUlRPVUNIPXkKLUNPTkZJR19UT1VDSFNDUkVFTl9VU0JfSURFQUxURUs9eQotQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9HRU5FUkFMX1RPVUNIPXkKLUNPTkZJR19UT1VDSFNDUkVFTl9VU0JfR09UT1A9eQotQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9KQVNURUM9eQotQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9FMkk9eQotQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9aWVRST05JQz15Ci1DT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0VUVF9UQzVVSD15Ci1DT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX05FWElPPXkKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9XOTBYOTAwIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NSVNDPXkKLSMgQ09ORklHX0lOUFVUX0FENzE0WCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfQVRJX1JFTU9URT1tCiBDT05GSUdfSU5QVVRfQVRJX1JFTU9URTI9bQogQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFPW0KQEAgLTEzMDcsNTM3ICsyODEsNjggQEAKIENPTkZJR19JTlBVVF9ZRUFMSU5LPW0KIENPTkZJR19JTlBVVF9DTTEwOT1tCiBDT05GSUdfSU5QVVRfVUlOUFVUPW0KLSMgQ09ORklHX0lOUFVUX1BDRjUwNjMzX1BNVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QQ0Y4NTc0IGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9HUElPX1JPVEFSWV9FTkNPREVSPW0KLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19QQVJLQkQgaXMgbm90IHNldAotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0Ci1DT05GSUdfR0FNRVBPUlQ9bQotIyBDT05GSUdfR0FNRVBPUlRfTlM1NTggaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlRfTDQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15CiBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEPXkKLSMgQ09ORklHX0NPTVBVVE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST0NLRVRQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NZQ0xBREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RJR0lFUENBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PWEFfSU5URUxMSU8gaXMgbm90IHNldAotIyBDT05GSUdfTU9YQV9TTUFSVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05fSERMQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OX0dTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SSVNDT004IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQRUNJQUxJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFMRFJWIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz04Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQogQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfRk9VUlBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfQUNDRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF84MjUwX0JPQ0EgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhBUl9TVDE2QzU1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfODI1MF9IVUI2IGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKIENPTkZJR19TRVJJQUxfU0FNU1VORz15Ci1DT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFNfND15Ci1DT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMX1NBTVNVTkdfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9TQU1TVU5HX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9TM0MyNDEwPXkKLUNPTkZJR19TRVJJQUxfUzNDMjQxMj15Ci1DT05GSUdfU0VSSUFMX1MzQzI0NDA9eQotIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9BTFRFUkFfSlRBR1VBUlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0FMVEVSQV9VQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKIENPTkZJR19QUklOVEVSPXkKLSMgQ09ORklHX0xQX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX1BQREVWPXkKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPW0KLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotQ09ORklHX0kyQ19BTEdPQklUPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogQ09ORklHX0kyQ19TM0MyNDEwPXkKIENPTkZJR19JMkNfU0lNVEVDPXkKLSMgQ09ORklHX0kyQ19YSUxJTlggaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0VMRUtUT1IgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKIENPTkZJR19TUEk9eQotIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TUElfTUFTVEVSPXkKLQotIwotIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwotIwotQ09ORklHX1NQSV9CSVRCQU5HPW0KLSMgQ09ORklHX1NQSV9CVVRURVJGTFkgaXMgbm90IHNldAogQ09ORklHX1NQSV9HUElPPW0KLSMgQ09ORklHX1NQSV9MTTcwX0xMUCBpcyBub3Qgc2V0CiBDT05GSUdfU1BJX1MzQzI0WFg9bQotIyBDT05GSUdfU1BJX1MzQzI0WFhfRklRIGlzIG5vdCBzZXQKIENPTkZJR19TUElfUzNDMjRYWF9HUElPPW0KLSMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAotIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCiBDT05GSUdfU1BJX1NQSURFVj1tCiBDT05GSUdfU1BJX1RMRTYyWDA9bQotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fSVQ4NzYxRSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fQURQNTU4OCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0Ci0KLSMKLSMgQUM5NyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLUNPTkZJR19QT1dFUl9TVVBQTFk9eQotIyBDT05GSUdfUE9XRVJfU1VQUExZX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQV9QT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUE1fUE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVEVTVF9QT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVRURVJZX0RTMjc2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVRURVJZX0RTMjc4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVRURVJZX0JRMjd4MDAgaXMgbm90IHNldAotIyBDT05GSUdfQkFUVEVSWV9NQVgxNzA0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSEFSR0VSX1BDRjUwNjMzIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci1DT05GSUdfSFdNT05fVklEPW0KLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBkcml2ZXJzCi0jCi0jIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FTQzc2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0CiBDT05GSUdfU0VOU09SU19MTTc1PW0KLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CiBDT05GSUdfU0VOU09SU19MTTc4PW0KLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfTE04NT1tCi0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSFQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1MzQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEUzc4NzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BTUM2ODIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xJUzNfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfUzNDMjQxMF9XQVRDSERPRz15Ci0jIENPTkZJR19NQVg2M1hYX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBJU0EtYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1BDV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfTUlYQ09NV0QgaXMgbm90IHNldAotIyBDT05GSUdfV0RUIGlzIG5vdCBzZXQKLQotIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF84OFBNODYwWCBpcyBub3Qgc2V0CiBDT05GSUdfTUZEX1NNNTAxPXkKLSMgQ09ORklHX01GRF9TTTUwMV9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfSTJDUExEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VDQjE0MDBfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfVFBTNjUwMTA9bQotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9NQVg4OTI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004OTk0IGlzIG5vdCBzZXQKLUNPTkZJR19NRkRfUENGNTA2MzM9eQotIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAotIyBDT05GSUdfUENGNTA2MzNfQURDIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0Y1MDYzM19HUElPPXkKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCNDUwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQogQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9TM0MyNDEwPXkKLSMgQ09ORklHX0ZCX1MzQzI0MTBfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZCX1NNNTAxPXkKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKLUNPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPW0KLSMgQ09ORklHX0xDRF9MNEYwMDI0MlQwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQ0RfTE1TMjgzR0YwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQ0RfTFRWMzUwUVYgaXMgbm90IHNldAotIyBDT05GSUdfTENEX0lMSTkzMjAgaXMgbm90IHNldAotIyBDT05GSUdfTENEX1RETzI0TSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQ0RfVkdHMjQzMkE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xDRF9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT1tCi1DT05GSUdfQkFDS0xJR0hUX0dFTkVSSUM9bQogQ09ORklHX0JBQ0tMSUdIVF9QV009bQotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NREFfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQotIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkQ9eQotQ09ORklHX1NPVU5EX09TU19DT1JFPXkKLUNPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiBDT05GSUdfU05EPXkKLUNPTkZJR19TTkRfVElNRVI9eQotQ09ORklHX1NORF9QQ009eQotQ09ORklHX1NORF9IV0RFUD1tCi1DT05GSUdfU05EX1JBV01JREk9bQotQ09ORklHX1NORF9KQUNLPXkKIENPTkZJR19TTkRfU0VRVUVOQ0VSPW0KLSMgQ09ORklHX1NORF9TRVFfRFVNTVkgaXMgbm90IHNldAotQ09ORklHX1NORF9PU1NFTVVMPXkKIENPTkZJR19TTkRfTUlYRVJfT1NTPW0KIENPTkZJR19TTkRfUENNX09TUz1tCi1DT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CiBDT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQogQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USz15Ci0jIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NORF9WTUFTVEVSPXkKLUNPTkZJR19TTkRfUkFXTUlESV9TRVE9bQotIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfQUM5N19DT0RFQz1tCiAjIENPTkZJR19TTkRfRFJJVkVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9TUEkgaXMgbm90IHNldAotQ09ORklHX1NORF9VU0I9eQogQ09ORklHX1NORF9VU0JfQVVESU89bQotIyBDT05GSUdfU05EX1VTQl9VQTEwMSBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1VTQl9DQUlBUT1tCi0jIENPTkZJR19TTkRfVVNCX0NBSUFRX0lOUFVUIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfU09DPXkKLUNPTkZJR19TTkRfU09DX0FDOTdfQlVTPXkKIENPTkZJR19TTkRfUzNDMjRYWF9TT0M9eQotQ09ORklHX1NORF9TM0MyNFhYX1NPQ19JMlM9eQotQ09ORklHX1NORF9TM0NfSTJTVjJfU09DPW0KLUNPTkZJR19TTkRfUzNDMjQxMl9TT0NfSTJTPW0KLUNPTkZJR19TTkRfUzNDX1NPQ19BQzk3PW0KLSMgQ09ORklHX1NORF9TM0MyNFhYX1NPQ19ORU8xOTczX0dUQTAyX1dNODc1MyBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1MzQzI0WFhfU09DX0pJVkVfV004NzUwPW0KIENPTkZJR19TTkRfUzNDMjRYWF9TT0NfU01ESzI0NDNfV005NzEwPW0KIENPTkZJR19TTkRfUzNDMjRYWF9TT0NfTE4yNDQwU0JDX0FMQzY1MD1tCi1DT05GSUdfU05EX1MzQzI0WFhfU09DX1MzQzI0WFhfVURBMTM0WD15Ci0jIENPTkZJR19TTkRfUzNDMjRYWF9TT0NfU0lNVEVDX1RMVjMyMEFJQzIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TM0MyNFhYX1NPQ19TSU1URUNfSEVSTUVTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPXkKLSMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1NPQ19BQzk3X0NPREVDPW0KLUNPTkZJR19TTkRfU09DX0wzPXkKLUNPTkZJR19TTkRfU09DX1VEQTEzNFg9eQotQ09ORklHX1NORF9TT0NfV004NzUwPW0KLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKLUNPTkZJR19BQzk3X0JVUz15Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCiAjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLUNPTkZJR19ISURfQVBQTEU9bQotIyBDT05GSUdfSElEX01BR0lDTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1dBQ09NIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15Ci0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9VMTMyX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCiBDT05GSUdfVVNCX0FDTT1tCiBDT05GSUdfVVNCX1BSSU5URVI9bQogQ09ORklHX1VTQl9XRE09bQotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotCi0jCi0jIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9bQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUI9bQogQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT009bQogQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMD1tCkBAIC0xODUwLDczICszNTUsMTUgQEAKIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQT1tCiBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQj1tCiBDT05GSUdfVVNCX0xJQlVTVUFMPXkKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCiBDT05GSUdfVVNCX01EQzgwMD1tCiBDT05GSUdfVVNCX01JQ1JPVEVLPW0KLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCiBDT05GSUdfVVNCX1VTUzcyMD1tCiBDT05GSUdfVVNCX1NFUklBTD15Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VaVVNCIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUM9eQotIyBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9DSDM0MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NQMjEwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9FTVBFRyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTz15Ci0jIENPTkZJR19VU0JfU0VSSUFMX0ZVTlNPRlQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9WSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lQQVEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9JUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlRfVEkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9HQVJNSU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9JUFcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9JVVUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1BEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LTFNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3NzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzg0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX01PVE9ST0xBIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX05BVk1BTj1tCiBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDM9eQotIyBDT05GSUdfVVNCX1NFUklBTF9PVEk2ODU4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfUUNBVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9RVUFMQ09NTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1NQQ1A4WDUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9IUDRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU0FGRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1NJRU1FTlNfTVBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TWU1CT0wgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9USSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1hJUkNPTSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NFUklBTF9XV0FOPW0KIENPTkZJR19VU0JfU0VSSUFMX09QVElPTj1tCi0jIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9PUFRJQ09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfVklWT1BBWV9TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9aSU8gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwogQ09ORklHX1VTQl9FTUk2Mj1tCiBDT05GSUdfVVNCX0VNSTI2PW0KIENPTkZJR19VU0JfQURVVFVYPW0KQEAgLTE5MzQsMzE1ICszODEsNjQgQEAKIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1I9bQogQ09ORklHX1VTQl9JT1dBUlJJT1I9bQogQ09ORklHX1VTQl9URVNUPW0KLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VMUEkgaXMgbm90IHNldAotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKIENPTkZJR19TRElPX1VBUlQ9bQogQ09ORklHX01NQ19URVNUPW0KLQotIwotIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwogQ09ORklHX01NQ19TREhDST1tCi0jIENPTkZJR19NTUNfU0RIQ0lfUExURk0gaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1NESENJX1MzQyBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX1NQST1tCiBDT05GSUdfTU1DX1MzQz15Ci0jIENPTkZJR19NTUNfUzNDX0hXX1NESU9fSVJRIGlzIG5vdCBzZXQKLUNPTkZJR19NTUNfUzNDX1BJTz15Ci0jIENPTkZJR19NTUNfUzNDX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfUzNDX1BJT0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVXX0xFRFM9eQogQ09ORklHX0xFRFNfQ0xBU1M9bQotCi0jCi0jIExFRCBkcml2ZXJzCi0jCiBDT05GSUdfTEVEU19TM0MyNFhYPW0KIENPTkZJR19MRURTX0gxOTQwPW0KIENPTkZJR19MRURTX1BDQTk1MzI9bQogQ09ORklHX0xFRFNfR1BJTz1tCi1DT05GSUdfTEVEU19HUElPX1BMQVRGT1JNPXkKLSMgQ09ORklHX0xFRFNfTFAzOTQ0IGlzIG5vdCBzZXQKIENPTkZJR19MRURTX1BDQTk1NVg9bQogQ09ORklHX0xFRFNfREFDMTI0UzA4NT1tCiBDT05GSUdfTEVEU19QV009bQogQ09ORklHX0xFRFNfQkQyODAyPW0KLSMgQ09ORklHX0xFRFNfTFQzNTkzIGlzIG5vdCBzZXQKLUNPTkZJR19MRURTX1RSSUdHRVJTPXkKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9bQotIyBDT05GSUdfTEVEU19UUklHR0VSX0lERV9ESVNLIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPW0KLUNPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUPXkKIENPTkZJR19MRURTX1RSSUdHRVJfR1BJTz1tCiBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049bQotCi0jCi0jIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKLSMKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjUwNjMzIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX1MzQz15Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDJfRlNfWEFUVFI9eQogQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKLSMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15CiBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CiBDT05GSUdfRVhUNF9GUz1tCi1DT05GSUdfRVhUNF9GU19YQVRUUj15CiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfRVhUNF9GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0pCRDI9bQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX0FVVE9GU19GUz1tCiBDT05GSUdfQVVUT0ZTNF9GUz1tCiBDT05GSUdfRlVTRV9GUz1tCi0jIENPTkZJR19DVVNFIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0FDTD15Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCiBDT05GSUdfSVNPOTY2MF9GUz15CiBDT05GSUdfSk9MSUVUPXkKLSMgQ09ORklHX1pJU09GUyBpcyBub3Qgc2V0CiBDT05GSUdfVURGX0ZTPW0KLUNPTkZJR19VREZfTkxTPXkKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCiBDT05GSUdfTlRGU19GUz1tCi0jIENPTkZJR19OVEZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfUlcgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19DT05GSUdGU19GUz1tCi1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9TVU1NQVJZPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKIENPTkZJR19TUVVBU0hGUz1tCi0jIENPTkZJR19TUVVBU0hGU19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCi0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAogQ09ORklHX1JPTUZTX0ZTPXkKLUNPTkZJR19ST01GU19CQUNLRURfQllfQkxPQ0s9eQotIyBDT05GSUdfUk9NRlNfQkFDS0VEX0JZX01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19CQUNLRURfQllfQk9USCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9NRlNfT05fQkxPQ0s9eQotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjNfQUNMPXkKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9bQotQ09ORklHX05GU0RfVjJfQUNMPXkKLUNPTkZJR19ORlNEX1YzPXkKIENPTkZJR19ORlNEX1YzX0FDTD15CiBDT05GSUdfTkZTRF9WND15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19FWFBPUlRGUz1tCi1DT05GSUdfTkZTX0FDTF9TVVBQT1JUPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9bQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT1tCi0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRVBIX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DSUZTPW0KLSMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15CiBDT05GSUdfQlNEX0RJU0tMQUJFTD15Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAogQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTj15Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CiBDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCiBDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCkBAIC0yMjgxLDIyNyArNDc3LDEzIEBACiBDT05GSUdfTkxTX0tPSThfUj1tCiBDT05GSUdfTkxTX0tPSThfVT1tCiBDT05GSUdfTkxTX1VURjg9bQotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKIENPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotQ09ORklHX0ZUUkFDRT15Ci0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQotIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQVRPTUlDNjRfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DX0VUTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfUzNDX1VBUlQ9MAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9bQotQ09ORklHX0NSWVBUT19BTEdBUEkyPW0KLUNPTkZJR19DUllQVE9fQUVBRD1tCi1DT05GSUdfQ1JZUFRPX0FFQUQyPW0KLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj1tCi1DT05GSUdfQ1JZUFRPX0hBU0g9bQotQ09ORklHX0NSWVBUT19IQVNIMj1tCi1DT05GSUdfQ1JZUFRPX1JORzI9bQotQ09ORklHX0NSWVBUT19QQ09NUD1tCi1DT05GSUdfQ1JZUFRPX01BTkFHRVI9bQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj1tCi0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9bQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0VDQj1tCi0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fSE1BQz1tCi0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCi0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT1tCi0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi1DT05GSUdfQ1JZUFRPX0FFUz1tCi0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQVJDND1tCi0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9bQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMxNj1tCi0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLUNPTkZJR19DUkNfSVRVX1Q9bQotQ09ORklHX0NSQzMyPXkKLUNPTkZJR19DUkM3PW0KLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19MWk9fREVDT01QUkVTUz15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKLUNPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQotQ09ORklHX0RFQ09NUFJFU1NfTFpPPXkKLUNPTkZJR19URVhUU0VBUkNIPXkKLUNPTkZJR19URVhUU0VBUkNIX0tNUD1tCi1DT05GSUdfVEVYVFNFQVJDSF9CTT1tCi1DT05GSUdfVEVYVFNFQVJDSF9GU009bQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvczNjNjQwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3MzYzY0MDBfZGVmY29uZmlnCmluZGV4IDJiNjQyMzguLmJhNmE1MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvczNjNjQwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zM2M2NDAwX2RlZmNvbmZpZwpAQCAtMSwxNTM4ICsxLDkzIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzQKLSMgRnJpIE1heSAyOCAxOTowNTozOSAyMDEwCi0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19IQVZFX1BXTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19BUkNIX1VTRVNfR0VUVElNRU9GRlNFVD15Ci1DT05GSUdfSEFWRV9QUk9DX0NQVT15Ci1DT05GSUdfTk9fSU9QT1JUPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0FSQ0hfSEFTX0NQVUZSRVE9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX05FRURfRE1BX01BUF9TVEFURT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKLUNPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKLUNPTkZJR19IQVZFX0tFUk5FTF9MWk89eQotQ09ORklHX0tFUk5FTF9HWklQPXkKLSMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVJORUxfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19TV0FQPXkKLSMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE3Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLUNPTkZJR19SRF9CWklQMj15Ci1DT05GSUdfUkRfTFpNQT15Ci1DT05GSUdfUkRfTFpPPXkKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLUNPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9DTEs9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLUNPTkZJR19GUkVFWkVSPXkKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotQ09ORklHX01NVT15Ci0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVYUFJFU1MgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ05TM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RPVkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OVUM5M1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hNT0JJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1MzQzY0WFg9eQotIyBDT05GSUdfQVJDSF9TNVA2NDQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQNjQ0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1M1UEMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVBWMjEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1U4NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BMQVRfU1BFQVIgaXMgbm90IHNldAotQ09ORklHX1BMQVRfU0FNU1VORz15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfUzNDX0JPT1RfRVJST1JfUkVTRVQ9eQotQ09ORklHX1MzQ19CT09UX1VBUlRfRk9SQ0VfRklGTz15Ci1DT05GSUdfUzNDX0xPV0xFVkVMX1VBUlRfUE9SVD0wCi1DT05GSUdfU0FNU1VOR19DTEtTUkM9eQotQ09ORklHX1NBTVNVTkdfSVJRX1ZJQ19USU1FUj15Ci1DT05GSUdfU0FNU1VOR19JUlFfVUFSVD15Ci1DT05GSUdfU0FNU1VOR19HUElPTElCXzRCSVQ9eQotQ09ORklHX1MzQ19HUElPX0NGR19TM0MyNFhYPXkKLUNPTkZJR19TM0NfR1BJT19DRkdfUzNDNjRYWD15Ci1DT05GSUdfUzNDX0dQSU9fUFVMTF9VUERPV049eQotQ09ORklHX1NBTVNVTkdfR1BJT19FWFRSQT0wCi1DT05GSUdfUzNDX0dQSU9fU1BBQ0U9MAotQ09ORklHX1MzQ19HUElPX1RSQUNLPXkKLSMgQ09ORklHX1MzQ19BREMgaXMgbm90IHNldAotQ09ORklHX1MzQ19ERVZfSFNNTUM9eQotQ09ORklHX1MzQ19ERVZfSFNNTUMxPXkKLUNPTkZJR19TM0NfREVWX0hTTU1DMj15Ci1DT05GSUdfUzNDX0RFVl9IV01PTj15Ci1DT05GSUdfUzNDX0RFVl9JMkMxPXkKLUNPTkZJR19TM0NfREVWX0ZCPXkKLUNPTkZJR19TM0NfREVWX1VTQl9IT1NUPXkKLUNPTkZJR19TM0NfREVWX1VTQl9IU09URz15Ci1DT05GSUdfUzNDX0RFVl9XRFQ9eQotQ09ORklHX1MzQ19ERVZfTkFORD15Ci1DT05GSUdfUzNDX0RFVl9SVEM9eQotQ09ORklHX1NBTVNVTkdfREVWX0FEQz15Ci1DT05GSUdfU0FNU1VOR19ERVZfVFM9eQotQ09ORklHX1MzQ19ETUE9eQotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX1NBTVNVTkdfUE1fREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUzNDX1BNX0RFQlVHX0xFRF9TTURLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVNVTkdfUE1fQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX1NBTVNVTkdfV0FLRU1BU0s9eQotQ09ORklHX1BMQVRfUzNDNjRYWD15Ci1DT05GSUdfQ1BVX1MzQzY0MDA9eQotQ09ORklHX0NQVV9TM0M2NDEwPXkKLUNPTkZJR19TM0M2NFhYX0RNQT15Ci1DT05GSUdfUzNDNjRYWF9TRVRVUF9TREhDST15Ci1DT05GSUdfUzNDNjRYWF9TRVRVUF9JMkMwPXkKLUNPTkZJR19TM0M2NFhYX1NFVFVQX0kyQzE9eQotQ09ORklHX1MzQzY0WFhfU0VUVVBfRkJfMjRCUFA9eQotQ09ORklHX1MzQzY0WFhfU0VUVVBfU0RIQ0lfR1BJTz15CiBDT05GSUdfTUFDSF9TTURLNjQwMD15CiBDT05GSUdfTUFDSF9BTlc2NDEwPXkKIENPTkZJR19NQUNIX1NNREs2NDEwPXkKLUNPTkZJR19TTURLNjQxMF9TRF9DSDA9eQotIyBDT05GSUdfU01ESzY0MTBfU0RfQ0gxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNREs2NDEwX1dNMTE5MF9FVjEgaXMgbm90IHNldAotIyBDT05GSUdfU01ESzY0MTBfV00xMTkyX0VWMSBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9OQ1A9eQogQ09ORklHX01BQ0hfSE1UPXkKLUNPTkZJR19NQUNIX1NNQVJUUT15CiBDT05GSUdfTUFDSF9TTUFSVFE1PXkKIENPTkZJR19NQUNIX1NNQVJUUTc9eQotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX1Y2PXkKIENPTkZJR19DUFVfMzJ2Nks9eQotQ09ORklHX0NQVV8zMnY2PXkKLUNPTkZJR19DUFVfQUJSVF9FVjY9eQotQ09ORklHX0NQVV9QQUJSVF9WNj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y2PXkKLUNPTkZJR19DUFVfQ0FDSEVfVklQVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjY9eQotQ09ORklHX0NQVV9UTEJfVjY9eQotQ09ORklHX0NQVV9IQVNfQVNJRD15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAotQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD01Ci1DT05GSUdfQVJNX0RNQV9NRU1fQlVGRkVSQUJMRT15Ci1DT05GSUdfQ1BVX0hBU19QTVU9eQotIyBDT05GSUdfQVJNX0VSUkFUQV80MTE5MjAgaXMgbm90IHNldAotQ09ORklHX0FSTV9WSUM9eQotQ09ORklHX0FSTV9WSUNfTlI9MgotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1ZNU1BMSVRfM0c9eQotIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTk5OTk5OQotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0jIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0wCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0wCiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQUMwLDExNTIwMCByb290PS9kZXYvcmFtIGluaXQ9L2xpbnV4cmMgaW5pdHJkPTB4NTEwMDAwMDAsNk0gcmFtZGlza19zaXplPTYxNDQiCi0jIENPTkZJR19DTURMSU5FX0ZPUkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi0jIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAogQ09ORklHX1ZGUD15Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkQ9eQotQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15Ci0jIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAotQ09ORklHX1BNX09QUz15Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLSMgQ09ORklHX05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEFSVElUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKLSMgQ09ORklHX01URF9DSEFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTEtERVZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0tfUk8gaXMgbm90IHNldAotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTV9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKLUNPTkZJR19NVERfTkFORF9FQ0M9eQotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NNX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9ERU5BTElfU0NSQVRDSF9SRUdfQUREUj0weEZGMTA4MDE4Ci0jIENPTkZJR19NVERfTkFORF9HUElPIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQogQ09ORklHX01URF9OQU5EX1MzQzI0MTA9eQotIyBDT05GSUdfTVREX05BTkRfUzNDMjQxMF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9TM0MyNDEwX0hXRUNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1MzQzI0MTBfQ0xLU1RPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAotIwotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJX0RBQzc1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwogQ09ORklHX0VFUFJPTV9BVDI0PXkKLSMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTUMzMjAwVE9QIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLSMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAotQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1RDQTY0MTYgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFPXkKLUNPTkZJR19NT1VTRV9QUzI9eQotQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKLUNPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKLUNPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKLUNPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15Ci0jIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci1DT05GSUdfU0VSSU9fTElCUFMyPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19BTFRFUkFfUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX1NBTVNVTkc9eQotQ09ORklHX1NFUklBTF9TQU1TVU5HX1VBUlRTXzQ9eQotQ09ORklHX1NFUklBTF9TQU1TVU5HX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF9TQU1TVU5HX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfU0FNU1VOR19DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfUzNDNjQwMD15Ci0jIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0FMVEVSQV9KVEFHVUFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfQUxURVJBX1VBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX1MzQzI0MTA9eQotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfU1BJPXkKLSMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKLUNPTkZJR19TUElfQklUQkFORz1tCiBDT05GSUdfU1BJX0dQSU89bQogQ09ORklHX1NQSV9TM0M2NFhYPW0KLSMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAotIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCi0jIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX0lUODc2MUUgaXMgbm90IHNldAotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX0FEUDU1ODggaXMgbm90IHNldAotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNldAotCi0jCi0jIEFDOTcgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgZHJpdmVycwotIwotIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0MTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BU0M3NjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0hUMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODcxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQU1DNjgyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MSVMzX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX1MzQzI0MTBfV0FUQ0hET0c9eQotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF84OFBNODYwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19JMkNQTEQgaXMgbm90IHNldAotIyBDT05GSUdfVUNCMTQwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUFYODkyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAotIyBDT05GSUdfQUI0NTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9TM0M9eQotIyBDT05GSUdfRkJfUzNDX0RFQlVHX1JFR1dSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKLSMgQ09ORklHX0xDRF9MNEYwMDI0MlQwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQ0RfTE1TMjgzR0YwNSBpcyBub3Qgc2V0CiBDT05GSUdfTENEX0xUVjM1MFFWPXkKLSMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xDRF9URE8yNE0gaXMgbm90IHNldAotIyBDT05GSUdfTENEX1ZHRzI0MzJBNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQ0RfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQotQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDPXkKIENPTkZJR19CQUNLTElHSFRfUFdNPXkKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORD15Ci1DT05GSUdfU09VTkRfT1NTX0NPUkU9eQotQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKIENPTkZJR19TTkQ9bQotQ09ORklHX1NORF9USU1FUj1tCi1DT05GSUdfU05EX1BDTT1tCi1DT05GSUdfU05EX0pBQ0s9eQotIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX09TU0VNVUw9eQogQ09ORklHX1NORF9NSVhFUl9PU1M9bQogQ09ORklHX1NORF9QQ01fT1NTPW0KLUNPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKLSMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15Ci1DT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0RSSVZFUlM9eQotIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfQVJNPXkKLUNPTkZJR19TTkRfU1BJPXkKLUNPTkZJR19TTkRfVVNCPXkKLSMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1VTQl9VQTEwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfU09DPW0KLUNPTkZJR19TTkRfU09DX0FDOTdfQlVTPXkKIENPTkZJR19TTkRfUzNDMjRYWF9TT0M9bQotQ09ORklHX1NORF9TM0NfU09DX0FDOTc9bQotIyBDT05GSUdfU05EX1MzQzY0WFhfU09DX1dNODU4MCBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1NPQ19TTURLX1dNOTcxMz1tCi1DT05GSUdfU05EX1NPQ19JMkNfQU5EX1NQST1tCi0jIENPTkZJR19TTkRfU09DX0FMTF9DT0RFQ1MgaXMgbm90IHNldAotQ09ORklHX1NORF9TT0NfV005NzEzPW0KLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKLUNPTkZJR19BQzk3X0JVUz1tCi1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLSMgQ09ORklHX0hJRF8zTV9QQ1QgaXMgbm90IHNldAotQ09ORklHX0hJRF9BNFRFQ0g9eQotQ09ORklHX0hJRF9BUFBMRT15Ci1DT05GSUdfSElEX0JFTEtJTj15Ci0jIENPTkZJR19ISURfQ0FORE8gaXMgbm90IHNldAotQ09ORklHX0hJRF9DSEVSUlk9eQotQ09ORklHX0hJRF9DSElDT05ZPXkKLSMgQ09ORklHX0hJRF9QUk9ESUtFWVMgaXMgbm90IHNldAotQ09ORklHX0hJRF9DWVBSRVNTPXkKLSMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9FR0FMQVggaXMgbm90IHNldAotQ09ORklHX0hJRF9FWktFWT15Ci1DT05GSUdfSElEX0tZRT15Ci0jIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAotQ09ORklHX0hJRF9LRU5TSU5HVE9OPXkKLUNPTkZJR19ISURfTE9HSVRFQ0g9eQotIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAotIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAotIyBDT05GSUdfTE9HSUc5NDBfRkYgaXMgbm90IHNldAotQ09ORklHX0hJRF9NSUNST1NPRlQ9eQotIyBDT05GSUdfSElEX01PU0FSVCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX01PTlRFUkVZPXkKLSMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfT1JURUsgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BBTlRIRVJMT1JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9QRVRBTFlOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUElDT0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUVVBTlRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9ST0NDQVRfS09ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU0FNU1VORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU09OWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU1RBTlRVTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU1VOUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1pZREFDUk9OIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci1DT05GSUdfVVNCX0RFVklDRV9DTEFTUz15Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKIENPTkZJR19VU0JfQUNNPW0KIENPTkZJR19VU0JfUFJJTlRFUj1tCi0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLQotIwotIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwotIwotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCiBDT05GSUdfVVNCX1NFUklBTD1tCi0jIENPTkZJR19VU0JfRVpVU0IgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQz15Ci0jIENPTkZJR19VU0JfU0VSSUFMX0FJUkNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQVJLMzExNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0JFTEtJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NIMzQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfV0hJVEVIRUFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9FTVBFRz1tCiBDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTz1tCi0jIENPTkZJR19VU0JfU0VSSUFMX0ZVTlNPRlQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9WSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lQQVEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9JUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlRfVEkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9HQVJNSU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9JUFcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9JVVUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1BEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LTFNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3NzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzg0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX01PVE9ST0xBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTkFWTUFOIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX1BMMjMwMz1tCi0jIENPTkZJR19VU0JfU0VSSUFMX09USTY4NTggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9RQ0FVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1FVQUxDT01NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU1BDUDhYNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU0lFTUVOU19NUEkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1NZTUJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1RJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX09QVElDT04gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9WSVZPUEFZX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1pJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VMUEkgaXMgbm90IHNldAotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKIENPTkZJR19NTUNfREVCVUc9eQogQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FPXkKLQotIwotIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQogQ09ORklHX1NESU9fVUFSVD15Ci0jIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKIENPTkZJR19NTUNfU0RIQ0k9eQotIyBDT05GSUdfTU1DX1NESENJX1BMVEZNIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfU0RIQ0lfUzNDPXkKLSMgQ09ORklHX01NQ19TREhDSV9TM0NfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX1MzQz15Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0FDTD15Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ST01GU19GUz15Ci1DT05GSUdfUk9NRlNfQkFDS0VEX0JZX0JMT0NLPXkKLSMgQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9NVEQgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfQkFDS0VEX0JZX0JPVEggaXMgbm90IHNldAotQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfUlRfTVVURVhFUz15Ci1DT05GSUdfREVCVUdfUElfTElTVD15Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKIENPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotQ09ORklHX0ZUUkFDRT15Ci0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQotIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQVRPTUlDNjRfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJNX1VOV0lORD15CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DX0VUTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfUzNDX1VBUlQ9MAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfTFpPX0RFQ09NUFJFU1M9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfREVDT01QUkVTU19CWklQMj15Ci1DT05GSUdfREVDT01QUkVTU19MWk1BPXkKLUNPTkZJR19ERUNPTVBSRVNTX0xaTz15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvczVwNjQ0MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3M1cDY0NDBfZGVmY29uZmlnCmluZGV4IDUzMmU5ODcuLjBiMDI2NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvczVwNjQ0MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zNXA2NDQwX2RlZmNvbmZpZwpAQCAtMSwxMDEyICsxLDY1IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzQKLSMgV2VkIE1heSAyNiAxOTowNDozMiAyMDEwCi0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0FSQ0hfVVNFU19HRVRUSU1FT0ZGU0VUPXkKLUNPTkZJR19IQVZFX1BST0NfQ1BVPXkKLUNPTkZJR19OT19JT1BPUlQ9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfTkVFRF9ETUFfTUFQX1NUQVRFPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQotQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQotQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15Ci1DT05GSUdfS0VSTkVMX0daSVA9eQotIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAotQ09ORklHX1NXQVA9eQotIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX05BTUVTUEFDRVM9eQotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotQ09ORklHX1JEX0JaSVAyPXkKLUNPTkZJR19SRF9MWk1BPXkKLUNPTkZJR19SRF9MWk89eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFWFBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NOUzNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ET1ZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlVDOTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NITU9CSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUzVQNjQ0MD15Ci0jIENPTkZJR19BUkNIX1M1UDY0NDIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVBDMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQVjIxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VODUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05PTUFESUsgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTEFUX1NQRUFSIGlzIG5vdCBzZXQKLUNPTkZJR19QTEFUX1NBTVNVTkc9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1MzQ19CT09UX0VSUk9SX1JFU0VUPXkKLUNPTkZJR19TM0NfQk9PVF9VQVJUX0ZPUkNFX0ZJRk89eQogQ09ORklHX1MzQ19MT1dMRVZFTF9VQVJUX1BPUlQ9MQotQ09ORklHX1NBTVNVTkdfQ0xLU1JDPXkKLUNPTkZJR19TQU1TVU5HX0lSUV9WSUNfVElNRVI9eQotQ09ORklHX1NBTVNVTkdfSVJRX1VBUlQ9eQotQ09ORklHX1NBTVNVTkdfR1BJT0xJQl80QklUPXkKLUNPTkZJR19TM0NfR1BJT19DRkdfUzNDMjRYWD15Ci1DT05GSUdfUzNDX0dQSU9fQ0ZHX1MzQzY0WFg9eQotQ09ORklHX1MzQ19HUElPX1BVTExfVVBET1dOPXkKLUNPTkZJR19TNVBfR1BJT19EUlZTVFI9eQotQ09ORklHX1NBTVNVTkdfR1BJT19FWFRSQT0wCi1DT05GSUdfUzNDX0dQSU9fU1BBQ0U9MAotQ09ORklHX1MzQ19HUElPX1RSQUNLPXkKLSMgQ09ORklHX1MzQ19BREMgaXMgbm90IHNldAotQ09ORklHX1MzQ19ERVZfV0RUPXkKLUNPTkZJR19TQU1TVU5HX0RFVl9BREM9eQotQ09ORklHX1NBTVNVTkdfREVWX1RTPXkKLUNPTkZJR19TM0NfUEwzMzBfRE1BPXkKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCi1DT05GSUdfUExBVF9TNVA9eQotQ09ORklHX0NQVV9TNVA2NDQwPXkKIENPTkZJR19NQUNIX1NNREs2NDQwPXkKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9WNj15CiBDT05GSUdfQ1BVXzMydjZLPXkKLUNPTkZJR19DUFVfMzJ2Nj15Ci1DT05GSUdfQ1BVX0FCUlRfRVY2PXkKLUNPTkZJR19DUFVfUEFCUlRfVjY9eQotQ09ORklHX0NQVV9DQUNIRV9WNj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQotQ09ORklHX0NQVV9DT1BZX1Y2PXkKLUNPTkZJR19DUFVfVExCX1Y2PXkKLUNPTkZJR19DUFVfSEFTX0FTSUQ9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQotQ09ORklHX0FSTV9ETUFfTUVNX0JVRkZFUkFCTEU9eQotQ09ORklHX0NQVV9IQVNfUE1VPXkKLSMgQ09ORklHX0FSTV9FUlJBVEFfNDExOTIwIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fVklDPXkKLUNPTkZJR19BUk1fVklDX05SPTIKLUNPTkZJR19QTDMzMD15Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjAwCiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLSMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9OTk5OTk5Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLSMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotQ09ORklHX1pCT09UX1JPTV9URVhUPTAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTAKIENPTkZJR19DTURMSU5FPSJyb290PS9kZXYvcmFtMCBydyByYW1kaXNrPTgxOTIgaW5pdHJkPTB4MjA4MDAwMDAsOE0gY29uc29sZT10dHlTQUMxLDExNTIwMCBpbml0PS9saW51eHJjIgotIyBDT05GSUdfQ01ETElORV9GT1JDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwotIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19ORVQgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKICMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci1DT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFPXkKLUNPTkZJR19NT1VTRV9QUzI9eQotQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKLUNPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKLUNPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKLUNPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15Ci0jIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0RZTkFQUk8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSEFNUFNISVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVzkwWDkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci1DT05GSUdfU0VSSU9fTElCUFMyPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19BTFRFUkFfUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTMKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTMKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX1NBTVNVTkc9eQotQ09ORklHX1NFUklBTF9TQU1TVU5HX1VBUlRTXzQ9eQotQ09ORklHX1NFUklBTF9TQU1TVU5HX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF9TQU1TVU5HX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfU0FNU1VOR19DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfUzNDNjQwMD15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0FMVEVSQV9KVEFHVUFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfQUxURVJBX1VBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fSVQ4NzYxRSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgQUM5NyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX1MzQzI0MTBfV0FUQ0hET0c9eQotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfRElTUExBWV9TVVBQT1JUPXkKLQotIwotIyBEaXNwbGF5IGhhcmR3YXJlIGRyaXZlcnMKLSMKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0FDTD15Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfUk9NRlNfRlM9eQotQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9CTE9DSz15Ci0jIENPTkZJR19ST01GU19CQUNLRURfQllfTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9CT1RIIGlzIG5vdCBzZXQKLUNPTkZJR19ST01GU19PTl9CTE9DSz15Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQVNDSUk9eQogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1JUX01VVEVYRVM9eQotQ09ORklHX0RFQlVHX1BJX0xJU1Q9eQotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TUElOTE9DSz15CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUD15Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLSMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLUNPTkZJR19GVFJBQ0U9eQotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUT01JQzY0X1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotQ09ORklHX0FSTV9VTldJTkQ9eQogQ09ORklHX0RFQlVHX1VTRVI9eQogQ09ORklHX0RFQlVHX0VSUk9SUz15Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTEw9eQotIyBDT05GSUdfRUFSTFlfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ19FVE0gaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1MzQ19VQVJUPTEKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQotQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15Ci1DT05GSUdfREVDT01QUkVTU19MWk89eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3M1cDY0NDJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zNXA2NDQyX2RlZmNvbmZpZwppbmRleCAwNjgyMTliLi4wZTkyYTc4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3M1cDY0NDJfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvczVwNjQ0Ml9kZWZjb25maWcKQEAgLTEsOTA3ICsxLDY1IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzQKLSMgV2VkIE1heSAyNiAxOTowNDozNCAyMDEwCi0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0FSQ0hfVVNFU19HRVRUSU1FT0ZGU0VUPXkKLUNPTkZJR19IQVZFX1BST0NfQ1BVPXkKLUNPTkZJR19OT19JT1BPUlQ9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfTkVFRF9ETUFfTUFQX1NUQVRFPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQotQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQotQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15Ci1DT05GSUdfS0VSTkVMX0daSVA9eQotIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAotQ09ORklHX1NXQVA9eQotIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX05BTUVTUEFDRVM9eQotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotQ09ORklHX1JEX0JaSVAyPXkKLUNPTkZJR19SRF9MWk1BPXkKLUNPTkZJR19SRF9MWk89eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFWFBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NOUzNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ET1ZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlVDOTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NITU9CSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVA2NDQwIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1M1UDY0NDI9eQotIyBDT05GSUdfQVJDSF9TNVBDMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQVjIxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VODUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05PTUFESUsgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTEFUX1NQRUFSIGlzIG5vdCBzZXQKLUNPTkZJR19QTEFUX1NBTVNVTkc9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotIyBDT05GSUdfUzNDX0JPT1RfRVJST1JfUkVTRVQgaXMgbm90IHNldAotQ09ORklHX1MzQ19CT09UX1VBUlRfRk9SQ0VfRklGTz15CiBDT05GSUdfUzNDX0xPV0xFVkVMX1VBUlRfUE9SVD0xCi1DT05GSUdfU0FNU1VOR19DTEtTUkM9eQotQ09ORklHX1NBTVNVTkdfSVJRX1ZJQ19USU1FUj15Ci1DT05GSUdfU0FNU1VOR19JUlFfVUFSVD15Ci1DT05GSUdfU0FNU1VOR19HUElPTElCXzRCSVQ9eQotQ09ORklHX1MzQ19HUElPX0NGR19TM0MyNFhYPXkKLUNPTkZJR19TM0NfR1BJT19DRkdfUzNDNjRYWD15Ci1DT05GSUdfUzNDX0dQSU9fUFVMTF9VUERPV049eQotQ09ORklHX1M1UF9HUElPX0RSVlNUUj15Ci1DT05GSUdfU0FNU1VOR19HUElPX0VYVFJBPTAKLUNPTkZJR19TM0NfR1BJT19TUEFDRT0wCi1DT05GSUdfUzNDX0dQSU9fVFJBQ0s9eQotIyBDT05GSUdfUzNDX0FEQyBpcyBub3Qgc2V0Ci1DT05GSUdfUzNDX1BMMzMwX0RNQT15Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIwotQ09ORklHX1BMQVRfUzVQPXkKLUNPTkZJR19DUFVfUzVQNjQ0Mj15CiBDT05GSUdfTUFDSF9TTURLNjQ0Mj15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfVjY9eQogQ09ORklHX0NQVV8zMnY2Sz15Ci1DT05GSUdfQ1BVXzMydjY9eQotQ09ORklHX0NQVV9BQlJUX0VWNj15Ci1DT05GSUdfQ1BVX1BBQlJUX1Y2PXkKLUNPTkZJR19DUFVfQ0FDSEVfVjY9eQotQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKLUNPTkZJR19DUFVfQ09QWV9WNj15Ci1DT05GSUdfQ1BVX1RMQl9WNj15Ci1DT05GSUdfQ1BVX0hBU19BU0lEPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTUKLUNPTkZJR19BUk1fRE1BX01FTV9CVUZGRVJBQkxFPXkKLUNPTkZJR19DUFVfSEFTX1BNVT15Ci0jIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJNX1ZJQz15Ci1DT05GSUdfQVJNX1ZJQ19OUj0yCi1DT05GSUdfUEwzMzA9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1ZNU1BMSVRfM0c9eQotIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTIwMAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTk5OTk5OQotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0jIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0wCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0wCiBDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L3JhbTAgcncgcmFtZGlzaz04MTkyIGluaXRyZD0weDIwODAwMDAwLDhNIGNvbnNvbGU9dHR5U0FDMSwxMTUyMDAgaW5pdD0vbGludXhyYyIKLSMgQ09ORklHX0NNRExJTkVfRk9SQ0UgaXMgbm90IHNldAotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotIyBDT05GSUdfTkVUIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15CiAjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0RZTkFQUk8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSEFNUFNISVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1c5MFg5MDAgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MwotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MwotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKIENPTkZJR19TRVJJQUxfU0FNU1VORz15Ci1DT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFM9MwotIyBDT05GSUdfU0VSSUFMX1NBTVNVTkdfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9TQU1TVU5HX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9TNVBWMjEwPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfQUxURVJBX0pUQUdVQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9BTFRFUkFfVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19JVDg3NjFFIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0FDTD15Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfUk9NRlNfRlM9eQotQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9CTE9DSz15Ci0jIENPTkZJR19ST01GU19CQUNLRURfQllfTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9CT1RIIGlzIG5vdCBzZXQKLUNPTkZJR19ST01GU19PTl9CTE9DSz15Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKIENPTkZJR19CU0RfRElTS0xBQkVMPXkKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OPXkKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0FTQ0lJPXkKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19SVF9NVVRFWEVTPXkKLUNPTkZJR19ERUJVR19QSV9MSVNUPXkKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1BJTkxPQ0s9eQogQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE9NSUM2NF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSTV9VTldJTkQgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQogQ09ORklHX0RFQlVHX0VSUk9SUz15Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTEw9eQotIyBDT05GSUdfRUFSTFlfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ19FVE0gaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1MzQ19VQVJUPTEKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPXkKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19MWk9fREVDT01QUkVTUz15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKLUNPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQotQ09ORklHX0RFQ09NUFJFU1NfTFpPPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zNXBjMTAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvczVwYzEwMF9kZWZjb25maWcKaW5kZXggZWJjNjI0NS4uNDFiYWZjOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zNXBjMTAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3M1cGMxMDBfZGVmY29uZmlnCkBAIC0xLDEwMjYgKzEsNDkgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNAotIyBXZWQgTWF5IDI2IDE5OjA0OjM1IDIwMTAKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfQVJDSF9VU0VTX0dFVFRJTUVPRkZTRVQ9eQotQ09ORklHX0hBVkVfUFJPQ19DUFU9eQotQ09ORklHX05PX0lPUE9SVD15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEU9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUXzY9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQotQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQotQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15Ci1DT05GSUdfS0VSTkVMX0daSVA9eQotIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAotQ09ORklHX1NXQVA9eQotIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX05BTUVTUEFDRVM9eQotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotQ09ORklHX1JEX0JaSVAyPXkKLUNPTkZJR19SRF9MWk1BPXkKLUNPTkZJR19SRF9MWk89eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFWFBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NOUzNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ET1ZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlVDOTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NITU9CSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVA2NDQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQNjQ0MiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TNVBDMTAwPXkKLSMgQ09ORklHX0FSQ0hfUzVQVjIxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VODUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05PTUFESUsgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTEFUX1NQRUFSIGlzIG5vdCBzZXQKLUNPTkZJR19QTEFUX1NBTVNVTkc9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotIyBDT05GSUdfUzNDX0JPT1RfRVJST1JfUkVTRVQgaXMgbm90IHNldAotQ09ORklHX1MzQ19CT09UX1VBUlRfRk9SQ0VfRklGTz15Ci1DT05GSUdfUzNDX0xPV0xFVkVMX1VBUlRfUE9SVD0wCi1DT05GSUdfU0FNU1VOR19DTEtTUkM9eQotQ09ORklHX1NBTVNVTkdfSVJRX1ZJQ19USU1FUj15Ci1DT05GSUdfU0FNU1VOR19JUlFfVUFSVD15Ci1DT05GSUdfU0FNU1VOR19HUElPTElCXzRCSVQ9eQotQ09ORklHX1MzQ19HUElPX0NGR19TM0MyNFhYPXkKLUNPTkZJR19TM0NfR1BJT19DRkdfUzNDNjRYWD15Ci1DT05GSUdfUzNDX0dQSU9fUFVMTF9VUERPV049eQotQ09ORklHX1M1UF9HUElPX0RSVlNUUj15Ci1DT05GSUdfU0FNU1VOR19HUElPX0VYVFJBPTAKLUNPTkZJR19TM0NfR1BJT19TUEFDRT0wCi1DT05GSUdfUzNDX0dQSU9fVFJBQ0s9eQotIyBDT05GSUdfUzNDX0FEQyBpcyBub3Qgc2V0Ci1DT05GSUdfUzNDX0RFVl9IU01NQz15Ci1DT05GSUdfUzNDX0RFVl9IU01NQzE9eQotQ09ORklHX1MzQ19ERVZfSFNNTUMyPXkKLUNPTkZJR19TM0NfREVWX0kyQzE9eQotQ09ORklHX1MzQ19ERVZfRkI9eQotQ09ORklHX1MzQ19QTDMzMF9ETUE9eQotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLUNPTkZJR19QTEFUX1M1UD15Ci1DT05GSUdfUzVQX0VYVF9JTlQ9eQotQ09ORklHX0NQVV9TNVBDMTAwPXkKLUNPTkZJR19TNVBDMTAwX1NFVFVQX0ZCXzI0QlBQPXkKLUNPTkZJR19TNVBDMTAwX1NFVFVQX0kyQzE9eQotQ09ORklHX1M1UEMxMDBfU0VUVVBfU0RIQ0k9eQotQ09ORklHX1M1UEMxMDBfU0VUVVBfU0RIQ0lfR1BJTz15CiBDT05GSUdfTUFDSF9TTURLQzEwMD15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfMzJ2Nks9eQotQ09ORklHX0NQVV9WNz15Ci1DT05GSUdfQ1BVXzMydjc9eQotQ09ORklHX0NQVV9BQlJUX0VWNz15Ci1DT05GSUdfQ1BVX1BBQlJUX1Y3PXkKLUNPTkZJR19DUFVfQ0FDSEVfVjc9eQotQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKLUNPTkZJR19DUFVfQ09QWV9WNj15Ci1DT05GSUdfQ1BVX1RMQl9WNz15Ci1DT05GSUdfQ1BVX0hBU19BU0lEPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQVJNX1RIVU1CRUUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFTX1RMU19SRUc9eQotQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD02Ci1DT05GSUdfQVJNX0RNQV9NRU1fQlVGRkVSQUJMRT15Ci1DT05GSUdfQ1BVX0hBU19QTVU9eQotIyBDT05GSUdfQVJNX0VSUkFUQV80MzA5NzMgaXMgbm90IHNldAotIyBDT05GSUdfQVJNX0VSUkFUQV80NTg2OTMgaXMgbm90IHNldAotIyBDT05GSUdfQVJNX0VSUkFUQV80NjAwNzUgaXMgbm90IHNldAotQ09ORklHX0FSTV9WSUM9eQotQ09ORklHX0FSTV9WSUNfTlI9MgotQ09ORklHX1BMMzMwPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMDAKLSMgQ09ORklHX1RIVU1CMl9LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTk5OTk5OQotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0jIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0wCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0wCiBDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L210ZGJsb2NrMiByb290ZnN0eXBlPWNyYW1mcyBpbml0PS9saW51eHJjIGNvbnNvbGU9dHR5U0FDMiwxMTUyMDAgbWVtPTEyOE0iCi0jIENPTkZJR19DTURMSU5FX0ZPUkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCi0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi0jIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19ORVQgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKIENPTkZJR19FRVBST01fQVQyND15Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV01DMzIwMFRPUCBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfU0NTSV9NT0Q9eQotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci0jIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9UQ0E2NDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRT15Ci1DT05GSUdfTU9VU0VfUFMyPXkKLUNPTkZJR19NT1VTRV9QUzJfQUxQUz15Ci1DT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15Ci1DT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15Ci1DT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQotIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9TQU1TVU5HPXkKLUNPTkZJR19TRVJJQUxfU0FNU1VOR19VQVJUU180PXkKLUNPTkZJR19TRVJJQUxfU0FNU1VOR19VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfU0FNU1VOR19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX1NBTVNVTkdfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX1MzQzY0MDA9eQotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9BTFRFUkFfSlRBR1VBUlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0FMVEVSQV9VQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19JVDg3NjFFIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMDAgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19BRFA1NTg4IGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEFDOTcgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgZHJpdmVycwotIwotIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNDNzYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSFQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FNQzY4MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xJUzNfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF84OFBNODYwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19JMkNQTEQgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9NQVg4OTI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004OTk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCi0jCi0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCiBDT05GSUdfTU1DPXkKIENPTkZJR19NTUNfREVCVUc9eQogQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FPXkKLQotIwotIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQogQ09ORklHX1NESU9fVUFSVD15Ci0jIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKIENPTkZJR19NTUNfU0RIQ0k9eQotIyBDT05GSUdfTU1DX1NESENJX1BMVEZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKLSMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15CiBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQogQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQUNMPXkKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTE9HRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAogQ09ORklHX1JPTUZTX0ZTPXkKLUNPTkZJR19ST01GU19CQUNLRURfQllfQkxPQ0s9eQotIyBDT05GSUdfUk9NRlNfQkFDS0VEX0JZX01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19CQUNLRURfQllfQk9USCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9NRlNfT05fQkxPQ0s9eQotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19SVF9NVVRFWEVTPXkKLUNPTkZJR19ERUJVR19QSV9MSVNUPXkKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1BJTkxPQ0s9eQogQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE9NSUM2NF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fVU5XSU5EPXkKIENPTkZJR19ERUJVR19VU0VSPXkKIENPTkZJR19ERUJVR19FUlJPUlM9eQotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotIyBDT05GSUdfT0NfRVRNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19TM0NfVUFSVD0wCi0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19MWk9fREVDT01QUkVTUz15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKLUNPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQotQ09ORklHX0RFQ09NUFJFU1NfTFpPPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zNXBjMTEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvczVwYzExMF9kZWZjb25maWcKaW5kZXggYzRkZTM2MC4uMjJjMmQxNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zNXBjMTEwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3M1cGMxMTBfZGVmY29uZmlnCkBAIC0xLDkyNCArMSw2NiBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0Ci0jIFdlZCBNYXkgMjYgMTk6MDQ6MzcgMjAxMAotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19BUkNIX1VTRVNfR0VUVElNRU9GRlNFVD15Ci1DT05GSUdfSEFWRV9QUk9DX0NQVT15Ci1DT05GSUdfTk9fSU9QT1JUPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX05FRURfRE1BX01BUF9TVEFURT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlRfNj15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQotQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQotQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15Ci1DT05GSUdfS0VSTkVMX0daSVA9eQotIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAotQ09ORklHX1NXQVA9eQotIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX05BTUVTUEFDRVM9eQotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotQ09ORklHX1JEX0JaSVAyPXkKLUNPTkZJR19SRF9MWk1BPXkKLUNPTkZJR19SRF9MWk89eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFWFBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NOUzNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ET1ZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlVDOTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NITU9CSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVA2NDQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQNjQ0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1M1UEMxMDAgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUzVQVjIxMD15Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VODUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05PTUFESUsgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTEFUX1NQRUFSIGlzIG5vdCBzZXQKLUNPTkZJR19QTEFUX1NBTVNVTkc9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotIyBDT05GSUdfUzNDX0JPT1RfRVJST1JfUkVTRVQgaXMgbm90IHNldAotQ09ORklHX1MzQ19CT09UX1VBUlRfRk9SQ0VfRklGTz15CiBDT05GSUdfUzNDX0xPV0xFVkVMX1VBUlRfUE9SVD0xCi1DT05GSUdfU0FNU1VOR19DTEtTUkM9eQotQ09ORklHX1NBTVNVTkdfSVJRX1ZJQ19USU1FUj15Ci1DT05GSUdfU0FNU1VOR19JUlFfVUFSVD15Ci1DT05GSUdfU0FNU1VOR19HUElPTElCXzRCSVQ9eQotQ09ORklHX1MzQ19HUElPX0NGR19TM0MyNFhYPXkKLUNPTkZJR19TM0NfR1BJT19DRkdfUzNDNjRYWD15Ci1DT05GSUdfUzNDX0dQSU9fUFVMTF9VUERPV049eQotQ09ORklHX1M1UF9HUElPX0RSVlNUUj15Ci1DT05GSUdfU0FNU1VOR19HUElPX0VYVFJBPTAKLUNPTkZJR19TM0NfR1BJT19TUEFDRT0wCi1DT05GSUdfUzNDX0dQSU9fVFJBQ0s9eQotIyBDT05GSUdfUzNDX0FEQyBpcyBub3Qgc2V0Ci1DT05GSUdfUzNDX0RFVl9XRFQ9eQotQ09ORklHX1MzQ19QTDMzMF9ETUE9eQotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLUNPTkZJR19QTEFUX1M1UD15Ci1DT05GSUdfUzVQX0VYVF9JTlQ9eQotQ09ORklHX0NQVV9TNVBWMjEwPXkKLSMgQ09ORklHX01BQ0hfQVFVSUxBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfR09OSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1NNREtWMjEwIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX1NNREtDMTEwPXkKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV8zMnY2Sz15Ci1DT05GSUdfQ1BVX1Y3PXkKLUNPTkZJR19DUFVfMzJ2Nz15Ci1DT05GSUdfQ1BVX0FCUlRfRVY3PXkKLUNPTkZJR19DUFVfUEFCUlRfVjc9eQotQ09ORklHX0NQVV9DQUNIRV9WNz15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQotQ09ORklHX0NQVV9DT1BZX1Y2PXkKLUNPTkZJR19DUFVfVExCX1Y3PXkKLUNPTkZJR19DUFVfSEFTX0FTSUQ9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19BUk1fVEhVTUJFRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVNfVExTX1JFRz15Ci1DT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTYKLUNPTkZJR19BUk1fRE1BX01FTV9CVUZGRVJBQkxFPXkKLUNPTkZJR19DUFVfSEFTX1BNVT15Ci0jIENPTkZJR19BUk1fRVJSQVRBXzQzMDk3MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUk1fRVJSQVRBXzQ1ODY5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUk1fRVJSQVRBXzQ2MDA3NSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJNX1ZJQz15Ci1DT05GSUdfQVJNX1ZJQ19OUj0yCi1DT05GSUdfUEwzMzA9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfVk1TUExJVF8zRyBpcyBub3Qgc2V0CiBDT05GSUdfVk1TUExJVF8yRz15Ci0jIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCi0jIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0haPTIwMAotIyBDT05GSUdfVEhVTUIyX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLUNPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQ9eQotIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfU1BBUlNFTUVNX01BTlVBTD15Ci1DT05GSUdfU1BBUlNFTUVNPXkKLUNPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKLUNPTkZJR19TUEFSU0VNRU1fRVhUUkVNRT15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9OTk5OTk5Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLSMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotQ09ORklHX1pCT09UX1JPTV9URVhUPTAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTAKIENPTkZJR19DTURMSU5FPSJyb290PS9kZXYvcmFtMCBydyByYW1kaXNrPTgxOTIgaW5pdHJkPTB4MjA4MDAwMDAsOE0gY29uc29sZT10dHlTQUMxLDExNTIwMCBpbml0PS9saW51eHJjIgotIyBDT05GSUdfQ01ETElORV9GT1JDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwotIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotIyBDT05GSUdfRlBFX05XRlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKIENPTkZJR19WRlA9eQotQ09ORklHX1ZGUHYzPXkKIENPTkZJR19ORU9OPXkKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19ORVQgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0RZTkFQUk8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSEFNUFNISVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1c5MFg5MDAgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKIENPTkZJR19TRVJJQUxfU0FNU1VORz15Ci1DT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFNfND15Ci1DT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMX1NBTVNVTkdfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9TQU1TVU5HX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9TNVBWMjEwPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfQUxURVJBX0pUQUdVQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9BTFRFUkFfVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19JVDg3NjFFIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX0hBVkVfUzNDMjQxMF9XQVRDSERPRz15Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQUNMPXkKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ST01GU19GUz15Ci1DT05GSUdfUk9NRlNfQkFDS0VEX0JZX0JMT0NLPXkKLSMgQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9NVEQgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfQkFDS0VEX0JZX0JPVEggaXMgbm90IHNldAotQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQogQ09ORklHX0JTRF9ESVNLTEFCRUw9eQotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT049eQotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQVNDSUk9eQogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUFJFRU1QVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfUlRfTVVURVhFUz15Ci1DT05GSUdfREVCVUdfUElfTElTVD15Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKIENPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotQ09ORklHX0ZUUkFDRT15Ci0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQotIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQVRPTUlDNjRfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJNX1VOV0lORD15CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ19FVE0gaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1MzQ19VQVJUPTEKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPXkKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19MWk9fREVDT01QUkVTUz15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKLUNPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQotQ09ORklHX0RFQ09NUFJFU1NfTFpPPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zNXB2MjEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvczVwdjIxMF9kZWZjb25maWcKaW5kZXggZTJmNWJjZS4uMTc1MzgzNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zNXB2MjEwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3M1cHYyMTBfZGVmY29uZmlnCkBAIC0xLDkyNyArMSw2NiBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0Ci0jIFdlZCBNYXkgMjYgMTk6MDQ6MzkgMjAxMAotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19BUkNIX1VTRVNfR0VUVElNRU9GRlNFVD15Ci1DT05GSUdfSEFWRV9QUk9DX0NQVT15Ci1DT05GSUdfTk9fSU9QT1JUPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX05FRURfRE1BX01BUF9TVEFURT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlRfNj15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQotQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQotQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15Ci1DT05GSUdfS0VSTkVMX0daSVA9eQotIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAotQ09ORklHX1NXQVA9eQotIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX05BTUVTUEFDRVM9eQotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotQ09ORklHX1JEX0JaSVAyPXkKLUNPTkZJR19SRF9MWk1BPXkKLUNPTkZJR19SRF9MWk89eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFWFBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NOUzNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ET1ZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlVDOTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NITU9CSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVA2NDQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQNjQ0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1M1UEMxMDAgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUzVQVjIxMD15Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VODUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05PTUFESUsgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTEFUX1NQRUFSIGlzIG5vdCBzZXQKLUNPTkZJR19QTEFUX1NBTVNVTkc9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotIyBDT05GSUdfUzNDX0JPT1RfRVJST1JfUkVTRVQgaXMgbm90IHNldAotQ09ORklHX1MzQ19CT09UX1VBUlRfRk9SQ0VfRklGTz15CiBDT05GSUdfUzNDX0xPV0xFVkVMX1VBUlRfUE9SVD0xCi1DT05GSUdfU0FNU1VOR19DTEtTUkM9eQotQ09ORklHX1NBTVNVTkdfSVJRX1ZJQ19USU1FUj15Ci1DT05GSUdfU0FNU1VOR19JUlFfVUFSVD15Ci1DT05GSUdfU0FNU1VOR19HUElPTElCXzRCSVQ9eQotQ09ORklHX1MzQ19HUElPX0NGR19TM0MyNFhYPXkKLUNPTkZJR19TM0NfR1BJT19DRkdfUzNDNjRYWD15Ci1DT05GSUdfUzNDX0dQSU9fUFVMTF9VUERPV049eQotQ09ORklHX1M1UF9HUElPX0RSVlNUUj15Ci1DT05GSUdfU0FNU1VOR19HUElPX0VYVFJBPTAKLUNPTkZJR19TM0NfR1BJT19TUEFDRT0wCi1DT05GSUdfUzNDX0dQSU9fVFJBQ0s9eQotIyBDT05GSUdfUzNDX0FEQyBpcyBub3Qgc2V0Ci1DT05GSUdfUzNDX0RFVl9XRFQ9eQotQ09ORklHX1NBTVNVTkdfREVWX0FEQz15Ci1DT05GSUdfU0FNU1VOR19ERVZfVFM9eQotQ09ORklHX1MzQ19QTDMzMF9ETUE9eQotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLUNPTkZJR19QTEFUX1M1UD15Ci1DT05GSUdfUzVQX0VYVF9JTlQ9eQotQ09ORklHX0NQVV9TNVBWMjEwPXkKLSMgQ09ORklHX01BQ0hfQVFVSUxBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfR09OSSBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9TTURLVjIxMD15Ci0jIENPTkZJR19NQUNIX1NNREtDMTEwIGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV8zMnY2Sz15Ci1DT05GSUdfQ1BVX1Y3PXkKLUNPTkZJR19DUFVfMzJ2Nz15Ci1DT05GSUdfQ1BVX0FCUlRfRVY3PXkKLUNPTkZJR19DUFVfUEFCUlRfVjc9eQotQ09ORklHX0NQVV9DQUNIRV9WNz15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQotQ09ORklHX0NQVV9DT1BZX1Y2PXkKLUNPTkZJR19DUFVfVExCX1Y3PXkKLUNPTkZJR19DUFVfSEFTX0FTSUQ9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19BUk1fVEhVTUJFRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVNfVExTX1JFRz15Ci1DT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTYKLUNPTkZJR19BUk1fRE1BX01FTV9CVUZGRVJBQkxFPXkKLUNPTkZJR19DUFVfSEFTX1BNVT15Ci0jIENPTkZJR19BUk1fRVJSQVRBXzQzMDk3MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUk1fRVJSQVRBXzQ1ODY5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUk1fRVJSQVRBXzQ2MDA3NSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJNX1ZJQz15Ci1DT05GSUdfQVJNX1ZJQ19OUj0yCi1DT05GSUdfUEwzMzA9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfVk1TUExJVF8zRyBpcyBub3Qgc2V0CiBDT05GSUdfVk1TUExJVF8yRz15Ci0jIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCi0jIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0haPTIwMAotIyBDT05GSUdfVEhVTUIyX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLUNPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQ9eQotIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfU1BBUlNFTUVNX01BTlVBTD15Ci1DT05GSUdfU1BBUlNFTUVNPXkKLUNPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKLUNPTkZJR19TUEFSU0VNRU1fRVhUUkVNRT15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9OTk5OTk5Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLSMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotQ09ORklHX1pCT09UX1JPTV9URVhUPTAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTAKIENPTkZJR19DTURMSU5FPSJyb290PS9kZXYvcmFtMCBydyByYW1kaXNrPTgxOTIgaW5pdHJkPTB4MjA4MDAwMDAsOE0gY29uc29sZT10dHlTQUMxLDExNTIwMCBpbml0PS9saW51eHJjIgotIyBDT05GSUdfQ01ETElORV9GT1JDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwotIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotIyBDT05GSUdfRlBFX05XRlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKIENPTkZJR19WRlA9eQotQ09ORklHX1ZGUHYzPXkKIENPTkZJR19ORU9OPXkKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19ORVQgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0RZTkFQUk8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSEFNUFNISVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVzkwWDkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9TQU1TVU5HPXkKLUNPTkZJR19TRVJJQUxfU0FNU1VOR19VQVJUU180PXkKLUNPTkZJR19TRVJJQUxfU0FNU1VOR19VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfU0FNU1VOR19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX1NBTVNVTkdfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX1M1UFYyMTA9eQotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9BTFRFUkFfSlRBR1VBUlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0FMVEVSQV9VQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX0lUODc2MUUgaXMgbm90IHNldAotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEFDOTcgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9TM0MyNDEwX1dBVENIRE9HPXkKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19BQ0w9eQotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTE9HRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAogQ09ORklHX1JPTUZTX0ZTPXkKLUNPTkZJR19ST01GU19CQUNLRURfQllfQkxPQ0s9eQotIyBDT05GSUdfUk9NRlNfQkFDS0VEX0JZX01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19CQUNLRURfQllfQk9USCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9NRlNfT05fQkxPQ0s9eQotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15CiBDT05GSUdfQlNEX0RJU0tMQUJFTD15Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAogQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTj15Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAogQ09ORklHX05MU19BU0NJST15CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19SVF9NVVRFWEVTPXkKLUNPTkZJR19ERUJVR19QSV9MSVNUPXkKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1BJTkxPQ0s9eQogQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE9NSUM2NF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fVU5XSU5EPXkKIENPTkZJR19ERUJVR19VU0VSPXkKIENPTkZJR19ERUJVR19FUlJPUlM9eQotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKIENPTkZJR19FQVJMWV9QUklOVEs9eQotIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DX0VUTSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfUzNDX1VBUlQ9MQotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQotQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15Ci1DT05GSUdfREVDT01QUkVTU19MWk89eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3NhbTlfbDkyNjBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zYW05X2w5MjYwX2RlZmNvbmZpZwppbmRleCA4MWIyOTBhLi5lY2YyNTMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3NhbTlfbDkyNjBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2FtOV9sOTI2MF9kZWZjb25maWcKQEAgLTEsOTg3ICsxLDEwOCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIzCi0jIFN1biBPY3QgMTQgMDI6MDE6MDcgMjAwNwotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci0jIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUyBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVD15Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCRD15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19MU0Y9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9BVDkxPXkKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBBdG1lbCBBVDkxIFN5c3RlbS1vbi1DaGlwCi0jCi0jIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjA9eQotIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05MjYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTlSTCBpcyBub3Qgc2V0Ci0KLSMKLSMgQVQ5MVNBTTkyNjAgVmFyaWFudHMKLSMKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjBfU0FNOVhFIGlzIG5vdCBzZXQKLQotIwotIyBBVDkxU0FNOTI2MCAvIEFUOTFTQU05WEUgQm9hcmQgVHlwZQotIwotIyBDT05GSUdfTUFDSF9BVDkxU0FNOTI2MEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ0FNNjAgaXMgbm90IHNldAogQ09ORklHX01BQ0hfU0FNOV9MOTI2MD15Ci0KLSMKLSMgQVQ5MSBCb2FyZCBPcHRpb25zCi0jCiBDT05GSUdfTVREX0FUOTFfREFUQUZMQVNIX0NBUkQ9eQotCi0jCi0jIEFUOTEgRmVhdHVyZSBTZWxlY3Rpb25zCi0jCi0jIENPTkZJR19BVDkxX1BST0dSQU1NQUJMRV9DTE9DS1MgaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUxfVENMSUIgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX0FSTTkyNlQ9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUSj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMDAKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0xFRFM9eQotQ09ORklHX0xFRFNfVElNRVI9eQogQ09ORklHX0xFRFNfQ1BVPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMCBtZW09NjRNIGluaXRyZD0weDIxMTAwMDAwLDQxOTQzMDQgcm9vdD0vZGV2L3JhbTAgcnciCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj15Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPXkKLSMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQkxPQ0syTVREPXkKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkQ9eQotIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfSURTPXkKLSMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX0FUTUVMPXkKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX1BMQVRGT1JNPXkKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKIENPTkZJR19NVERfVUJJPXkKLUNPTkZJR19NVERfVUJJX1dMX1RIUkVTSE9MRD00MDk2CiBDT05GSUdfTVREX1VCSV9CRUJfUkVTRVJWRT0zCiBDT05GSUdfTVREX1VCSV9HTFVFQkk9eQotCi0jCi0jIFVCSSBkZWJ1Z2dpbmcgb3B0aW9ucwotIwotIyBDT05GSUdfTVREX1VCSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfUkFJRF9BVFRSUz15CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKIENPTkZJR19TQ1NJX01VTFRJX0xVTj15CiBDT05GSUdfU0NTSV9DT05TVEFOVFM9eQogQ09ORklHX1NDU0lfTE9HR0lORz15Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKIENPTkZJR19NQUNCPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX0FUTUVMPXkKIENPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfQVRNRUxfVFRZQVQgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX09IQ0lfSENEPXkKK0NPTkZJR19VU0JfU1RPUkFHRT15CitDT05GSUdfVVNCX0xJQlVTVUFMPXkKK0NPTkZJR19VU0JfR0FER0VUPXkKK0NPTkZJR19NTUM9eQorQ09ORklHX01NQ19ERUJVRz15CiBDT05GSUdfTkVXX0xFRFM9eQogQ09ORklHX0xFRFNfQ0xBU1M9eQotCi0jCi0jIExFRCBkcml2ZXJzCi0jCiBDT05GSUdfTEVEU19HUElPPXkKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKIENPTkZJR19MRURTX1RSSUdHRVJTPXkKIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKLUNPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCi1DT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCi0jCi1DT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotQ09ORklHX1VTQl9MSUJVU1VBTD15Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERTTCBtb2RlbSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0dBREdFVD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9BVDkxPXkKLUNPTkZJR19VU0JfQVQ5MT15Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VUSD15Ci1DT05GSUdfVVNCX0VUSF9STkRJUz15Ci0jIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKLUNPTkZJR19NTUM9eQotQ09ORklHX01NQ19ERUJVRz15Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz15Ci1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15Ci0KLSMKLSMgTU1DL1NEIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0FUOTE9eQotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfRFMxNTUzPXkKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfRFMxNzQyPXkKIENPTkZJR19SVENfRFJWX000OFQ4Nj15Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9WMzAyMD15Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKLQotIwotIyBETUEgQ2xpZW50cwotIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUMl9GU19YQVRUUj15CiBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQogQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLUNPTkZJR19ORlNfRElSRUNUSU89eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQogQ09ORklHX05MU19DT0RFUEFHRV83Mzc9eQogQ09ORklHX05MU19DT0RFUEFHRV83NzU9eQpAQCAtMTAyMCw3NyArMTQxLDggQEAKIENPTkZJR19OTFNfS09JOF9SPXkKIENPTkZJR19OTFNfS09JOF9VPXkKIENPTkZJR19OTFNfVVRGOD15Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19VTlVTRURfU1lNQk9MUz15CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19QUkVFTVBUPXkKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9HRU5FUklDPXkKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3NoYW5ub25fZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zaGFubm9uX2RlZmNvbmZpZwppbmRleCA3YzQ5YmMzLi5iMGI5Njk0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3NoYW5ub25fZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhbm5vbl9kZWZjb25maWcKQEAgLTEsODY5ICsxLDQ4IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmMxLWJrMgotIyBTdW4gTWFyIDI3IDIzOjI2OjQ2IDIwMDUKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX01NVT15Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0lPTUFQPXkKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNT0QgaXMgbm90IHNldAotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TQTExMDA9eQotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLQotIwotIyBTQTExeDAgSW1wbGVtZW50YXRpb25zCi0jCi0jIENPTkZJR19TQTExMDBfQVNTQUJFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfQ0VSRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfQ09MTElFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9IMzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSDM2MDAgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0JBREdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSk9STkFEQTcyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSEFDS0tJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfTEFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfUExFQiBpcyBub3Qgc2V0CiBDT05GSUdfU0ExMTAwX1NIQU5OT049eQotIyBDT05GSUdfU0ExMTAwX1NJTVBBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfU1NQIGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9TQTExMDA9eQotQ09ORklHX0NQVV8zMnY0PXkKLUNPTkZJR19DUFVfQUJSVF9FVjQ9eQotQ09ORklHX0NQVV9DQUNIRV9WNFdCPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCPXkKLUNPTkZJR19DUFVfTUlOSUNBQ0hFPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLQotIwotIyBCdXMgc3VwcG9ydAotIwotQ09ORklHX0lTQT15Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwogQ09ORklHX1BDQ0FSRD15Ci0jIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQT15Ci0KLSMKLSMgUEMtY2FyZCBicmlkZ2VzCi0jCi0jIENPTkZJR19JODIzNjUgaXMgbm90IHNldAotIyBDT05GSUdfVENJQyBpcyBub3Qgc2V0CiBDT05GSUdfUENNQ0lBX1NBMTEwMD15Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19ESVNDT05USUdNRU09eQotIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQTAsOTYwMCBjb25zb2xlPXR0eTEgcm9vdD0vZGV2L210ZGJsb2NrMiBpbml0PS9saW51eHJjIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCi0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCitDT05GSUdfTkVUPXkKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfQU1EU1REPXkKLUNPTkZJR19NVERfQ0ZJX0FNRFNURF9SRVRSWT0wCi0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVERfU0ExMTAwPXkKLSMgQ09ORklHX01URF9FREI3MzEyIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUCBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1hEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKIENPTkZJR19JREU9bQotQ09ORklHX0JMS19ERVZfSURFPW0KLQotIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVESVNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLQotIwotIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCi0jCi1DT05GSUdfSURFX0dFTkVSSUM9bQotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfQ0hJUFNFVFMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15Ci0jIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVENQRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIEFSQ25ldCBkZXZpY2VzCi0jCi0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIwogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9SQUNBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDE3MDAgaXMgbm90IHNldAotIyBDT05GSUdfREVQQ0EgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0NLRVQgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUX1BDTUNJQT15Ci0jIENPTkZJR19QQ01DSUFfM0M1ODkgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBXzNDNTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9GTVZKMThYIGlzIG5vdCBzZXQKIENPTkZJR19QQ01DSUFfUENORVQ9eQotIyBDT05GSUdfUENNQ0lBX05NQ0xBTiBpcyBub3Qgc2V0CiBDT05GSUdfUENNQ0lBX1NNQzkxQzkyPXkKLSMgQ09ORklHX1BDTUNJQV9YSVJDMlBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9BWE5FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci1DT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQotQ09ORklHX01PVVNFX1BTMj15Ci0jIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfSU5QT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0xPR0lCTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9QQzExMFBBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19TT1VORF9HQU1FUE9SVD15Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9TQTExMDA9eQogQ09ORklHX1NFUklBTF9TQTExMDBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCi0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCiBDT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TQTExMDBfV0FUQ0hET0c9eQotCi0jCi0jIElTQS1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVhDT01XRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XRFQgaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCiBDT05GSUdfRkI9eQotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLUNPTkZJR19GQl9TT0ZUX0NVUlNPUj15Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKIENPTkZJR19GQl9TQTExMDA9eQotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NREFfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKLQotIwotIyBMb2dvIGNvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX0xPR08gaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwogQ09ORklHX1NPVU5EPXkKLQotIwotIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKLSMKLSMgQ09ORklHX1NORCBpcyBub3Qgc2V0Ci0KLSMKLSMgT3BlbiBTb3VuZCBTeXN0ZW0KLSMKLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIwotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi0jIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlOSVhfRlM9eQotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19TWVNGUz15Ci0jIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotIyBDT05GSUdfSkZGUzJfRlNfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19OT1JfRUNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX01JTklYX0ZTPXkKIENPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogQ09ORklHX0RFQlVHX1VTRVI9eQotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3NoYXJrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhcmtfZGVmY29uZmlnCmluZGV4IDQ2ZGUxMjQuLmNhYTA3ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhcmtfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhcmtfZGVmY29uZmlnCkBAIC0xLDEyNDggKzEsODEgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC1naXQ2Ci0jIFRodSBKYW4gIDggMTc6MTQ6NDcgMjAwOQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci0jIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX05BTUVTUEFDRVM9eQotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TSEFSSz15Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX1NBMTEwPXkKLUNPTkZJR19DUFVfMzJ2ND15Ci1DT05GSUdfQ1BVX0FCUlRfRVY0PXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKLUNPTkZJR19DUFVfQ0FDSEVfVjRXQj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQj15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotQ09ORklHX0lTQT15Ci1DT05GSUdfSVNBX0RNQT15Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotQ09ORklHX1BDSV9IT1NUX1ZJQTgyQzUwNT15Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX0xFR0FDWT15Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCi0jIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiBDT05GSUdfTEVEUz15CiBDT05GSUdfTEVEU19USU1FUj15Ci0jIENPTkZJR19MRURTX0NQVSBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0iIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi0jIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiAjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQogIyBDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKIENPTkZJR19QQVJQT1JUPW0KIENPTkZJR19QQVJQT1JUX1BDPW0KLSMgQ09ORklHX1BBUlBPUlRfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlRfUENfRklGTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUX1BDX1NVUEVSSU8gaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVF9HU0MgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVF9BWDg4Nzk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlRfMTI4NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTlAgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9YRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJJREUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKLQotIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCi0jCi1DT05GSUdfSURFX0FUQVBJPXkKLSMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0lERV9HRD15Ci1DT05GSUdfSURFX0dEX0FUQT15Ci0jIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFQ0Q9bQotQ09ORklHX0JMS19ERVZfSURFQ0RfVkVSQk9TRV9FUlJPUlM9eQotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfUFJPQ19GUz15Ci0KLSMKLSMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwotIwotIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19CTEtfREVWX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0w4MkMxMDUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfQVJNPXkKLSMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPW0KLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPW0KIENPTkZJR19DSFJfREVWX1NUPW0KLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9TUj1tCi0jIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz1tCi0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzcwMDBGQVNTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUhBMTUyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FIQTE1NDIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTjIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EVEMzMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0VORVJJQ19OQ1I1MzgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0VORVJJQ19OQ1I1MzgwX01NSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUFBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU1NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OQ1I1M0M0MDZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUEFTMTYgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfRkFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDNDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfVDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1UxNF8zNEYgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZwotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTEFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9TTUMgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUMTcwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVBDQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogQ09ORklHX05FVF9QQ0k9eQotIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDMzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFJJQ09UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAogQ09ORklHX0NTODl4MD15Ci1DT05GSUdfQ1M4OXgwX05PRUVQUk9NPXkKLSMgQ09ORklHX0UxMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAotIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAotIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU01TQzk0MjAgaXMgbm90IHNldAotIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pNRSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BMSVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQotQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFPXkKLUNPTkZJR19NT1VTRV9QUzI9eQotQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKLUNPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKLUNPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKLUNPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQotQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKLSMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9JTlBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfTE9HSUJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1BDMTEwUEFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19JODA0Mj15CiAjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1BBUktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiBDT05GSUdfUFJJTlRFUj1tCi0jIENPTkZJR19MUF9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPW0KLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogQ09ORklHX0ZCPXkKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ1lCRVIyMDAwPXkKLSMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9SQURFT04gaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WVDg2MjMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BUksgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NREFfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQogQ09ORklHX0xPR089eQogIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CiBDT05GSUdfU09VTkQ9bQotQ09ORklHX1NPVU5EX09TU19DT1JFPXkKLSMgQ09ORklHX1NORCBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkRfUFJJTUU9bQotIyBDT05GSUdfU09VTkRfTVNORENMQVMgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfTVNORFBJTiBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkRfT1NTPW0KLSMgQ09ORklHX1NPVU5EX1RSQUNFSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9ETUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1NTQ0FQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9WTUlESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9UUklYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX01TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9NUFU0MDEgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfUEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1BTUyBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkRfU0I9bQotIyBDT05GSUdfU09VTkRfWU0zODEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1VBUlQ2ODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0FFRFNQMTYgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfS0FITFVBIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotQ09ORklHX0hJRF9DT01QQVQ9eQotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucwotIwotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX0NNT1M9eQotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKIENPTkZJR19JU085NjYwX0ZTPW0KIENPTkZJR19KT0xJRVQ9eQotIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz1tCiBDT05GSUdfTVNET1NfRlM9bQogQ09ORklHX1ZGQVRfRlM9bQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX05GU0Q9bQotIyBDT05GSUdfTkZTRF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX0VYUE9SVEZTPW0KLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9bQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAogQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT1tCi0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKICMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15Ci0jIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3NpbXBhZF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3NpbXBhZF9kZWZjb25maWcKaW5kZXggZWUyNWU2My4uYWYzYjEyZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zaW1wYWRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2ltcGFkX2RlZmNvbmZpZwpAQCAtMSw0NTEgKzEsMzYgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCi0jIE1vbiBNYXIgMjggMDA6MTA6MzYgMjAwNQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSU9NQVA9eQotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19MT0NBTFZFUlNJT049Im9lMSIKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU0ExMTAwPXkKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0ExMXgwIEltcGxlbWVudGF0aW9ucwotIwotIyBDT05GSUdfU0ExMTAwX0FTU0FCRVQgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0NFUkYgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0NPTExJRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSDMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0gzNjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9CQURHRTQgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0pPUk5BREE3MjAgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0hBQ0tLSVQgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0xBUlQgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX1BMRUIgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX1NIQU5OT04gaXMgbm90IHNldAogQ09ORklHX1NBMTEwMF9TSU1QQUQ9eQotIyBDT05GSUdfU0ExMTAwX1NTUCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfU0ExMTAwPXkKLUNPTkZJR19DUFVfMzJ2ND15Ci1DT05GSUdfQ1BVX0FCUlRfRVY0PXkKLUNPTkZJR19DUFVfQ0FDSEVfVjRXQj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9UTEJfVjRXQj15Ci1DT05GSUdfQ1BVX01JTklDQUNIRT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLUNPTkZJR19JU0E9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKIENPTkZJR19QQ0NBUkQ9eQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUE9eQotCi0jCi0jIFBDLWNhcmQgYnJpZGdlcwotIwotIyBDT05GSUdfSTgyMzY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDSUMgaXMgbm90IHNldAogQ09ORklHX1BDTUNJQV9TQTExMDA9eQotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwogQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0RJU0NPTlRJR01FTT15CiBDT05GSUdfTEVEUz15Ci1DT05GSUdfTEVEU19USU1FUj15Ci0jIENPTkZJR19MRURTX0NQVSBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0ibXRkcGFydHM9c2ExMTAwOjUxMmsoYm9vdCksMW0oa2VybmVsKSwtKHJvb3QpIGNvbnNvbGU9dHR5U0EwIHJvb3Q9MWYwMiBub2luaXRyZCBtZW09NjRNIGpmZnMyX29ycGhhbmVkX2lub2Rlcz1kZWxldGUgcm9vdGZzdHlwZT1qZmZzMiIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotCi0jCi0jIENQVSBGcmVxdWVuY3kgc2NhbGluZwotIwotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9NSVNDPW0KLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCiBDT05GSUdfUE09eQotIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKLUNPTkZJR19BUE09eQotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj1tCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKLUNPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ09OQ0FUPXkKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotQ09ORklHX01URF9DRkk9eQotQ09ORklHX01URF9KRURFQ1BST0JFPXkKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLUNPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKLUNPTkZJR19NVERfQ0ZJX05PU1dBUD15Ci0jIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9HRU9NRVRSWT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLSMgQ09ORklHX01URF9DRklfSTIgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLUNPTkZJR19NVERfUkFNPXkKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotQ09ORklHX01URF9TQTExMDA9eQotIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0lNUEE3IGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUCBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1hEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPW0KLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09bQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCi0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCi0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBOZXR3b3JraW5nIHN1cHBvcnQKLSMKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQotIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiBDT05GSUdfSVJEQT1tCi0KLSMKLSMgSXJEQSBwcm90b2NvbHMKLSMKIENPTkZJR19JUkxBTj1tCiBDT05GSUdfSVJORVQ9bQogQ09ORklHX0lSQ09NTT1tCi0jIENPTkZJR19JUkRBX1VMVFJBIGlzIG5vdCBzZXQKLQotIwotIyBJckRBIG9wdGlvbnMKLSMKLSMgQ09ORklHX0lSREFfQ0FDSEVfTEFTVF9MU0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREFfRkFTVF9SUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbmZyYXJlZC1wb3J0IGRldmljZSBkcml2ZXJzCi0jCi0KLSMKLSMgU0lSIGRldmljZSBkcml2ZXJzCi0jCiBDT05GSUdfSVJUVFlfU0lSPW0KLQotIwotIyBEb25nbGUgc3VwcG9ydAotIwotIyBDT05GSUdfRE9OR0xFIGlzIG5vdCBzZXQKLQotIwotIyBPbGQgU0lSIGRldmljZSBkcml2ZXJzCi0jCi1DT05GSUdfSVJQT1JUX1NJUj1tCi0KLSMKLSMgT2xkIFNlcmlhbCBkb25nbGUgc3VwcG9ydAotIwotIyBDT05GSUdfRE9OR0xFX09MRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRklSIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19OU0NfRklSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTkJPTkRfRklSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQ19JUkNDX0ZJUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTElfRklSIGlzIG5vdCBzZXQKIENPTkZJR19TQTExMDBfRklSPW0KIENPTkZJR19CVD1tCiBDT05GSUdfQlRfTDJDQVA9bQpAQCAtNDU1LDExMCArNDAsMzMgQEAKIENPTkZJR19CVF9CTkVQPW0KIENPTkZJR19CVF9CTkVQX01DX0ZJTFRFUj15CiBDT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVI9eQotIyBDT05GSUdfQlRfSElEUCBpcyBub3Qgc2V0Ci0KLSMKLSMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19CVF9IQ0lVQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSURUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQlQzQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCTFVFQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCVFVBUlQgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJVkhDSSBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorQ09ORklHX01URF9DRkk9eQorQ09ORklHX01URF9KRURFQ1BST0JFPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKK0NPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKKyMgQ09ORklHX01URF9DRklfSTIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorQ09ORklHX01URF9SQU09eQorQ09ORklHX01URF9TQTExMDA9eQorQ09ORklHX0JMS19ERVZfTE9PUD1tCitDT05GSUdfQkxLX0RFVl9SQU09bQorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX0RVTU1ZPXkKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9bQotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBTkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX1JBQ0FMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUMTcwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVBDQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVNBIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKLSMgQ09ORklHX0FDMzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFJJQ09UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NTODl4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotQ09ORklHX05FVF9SQURJTz15Ci0KLSMKLSMgT2Jzb2xldGUgV2lyZWxlc3MgY2FyZHMgc3VwcG9ydCAocHJlLTgwMi4xMSkKLSMKLSMgQ09ORklHX1NUUklQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVkVMQU4gaXMgbm90IHNldAotQ09ORklHX1BDTUNJQV9XQVZFTEFOPW0KLSMgQ09ORklHX1BDTUNJQV9ORVRXQVZFIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyA4MDIuMTEgRnJlcXVlbmN5IEhvcHBpbmcgY2FyZHMgc3VwcG9ydAotIwotIyBDT05GSUdfUENNQ0lBX1JBWUNTIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyA4MDIuMTFiIElTQS9QQ0kgY2FyZHMgc3VwcG9ydAotIwotIyBDT05GSUdfSEVSTUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyA4MDIuMTFiIFBjbWNpYS9DYXJkYnVzIGNhcmRzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FJUk9fQ1MgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1dMMzUwMSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1dJUkVMRVNTPXkKLQotIwotIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX05FVF9QQ01DSUE9eQogQ09ORklHX1BDTUNJQV8zQzU4OT1tCiBDT05GSUdfUENNQ0lBXzNDNTc0PW0KLSMgQ09ORklHX1BDTUNJQV9GTVZKMThYIGlzIG5vdCBzZXQKIENPTkZJR19QQ01DSUFfUENORVQ9bQotIyBDT05GSUdfUENNQ0lBX05NQ0xBTiBpcyBub3Qgc2V0CiBDT05GSUdfUENNQ0lBX1NNQzkxQzkyPW0KIENPTkZJR19QQ01DSUFfWElSQzJQUz1tCi0jIENPTkZJR19QQ01DSUFfQVhORVQgaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAogQ09ORklHX1BQUD1tCiBDT05GSUdfUFBQX01VTFRJTElOSz15CiBDT05GSUdfUFBQX0ZJTFRFUj15CkBAIC01NjcsMzk1ICs3NSwzNyBAQAogQ09ORklHX1BQUF9ERUZMQVRFPW0KIENPTkZJR19QUFBfQlNEQ09NUD1tCiBDT05GSUdfUFBQT0U9bQotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTgwMAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTYwMAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9UU0RFVj15Ci1DT05GSUdfSU5QVVRfVFNERVZfU0NSRUVOX1g9ODAwCi1DT05GSUdfSU5QVVRfVFNERVZfU0NSRUVOX1k9NjAwCiBDT05GSUdfSU5QVVRfRVZERVY9bQogQ09ORklHX0lOUFVUX0VWQlVHPXkKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiBDT05GSUdfU0VSSU89bQotQ09ORklHX1NFUklPX1NFUlBPUlQ9bQotIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfR0FNRVBPUlQ9eQotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKIENPTkZJR19TRVJJQUxfU0ExMTAwPXkKIENPTkZJR19TRVJJQUxfU0ExMTAwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIwotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCiBDT05GSUdfRkI9eQotIyBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NPRlRfQ1VSU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTURBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQotCi0jCi0jIExvZ28gY29uZmlndXJhdGlvbgotIwogQ09ORklHX0xPR089eQotQ09ORklHX0xPR09fTElOVVhfTU9OTz15Ci1DT05GSUdfTE9HT19MSU5VWF9WR0ExNj15Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKIENPTkZJR19TT1VORD15Ci0KLSMKLSMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCi0jCi0jIENPTkZJR19TTkQgaXMgbm90IHNldAotCi0jCi0jIE9wZW4gU291bmQgU3lzdGVtCi0jCi0jIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCi0jIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9bQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz1tCi1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9bQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPW0KIENPTkZJR19SRUlTRVJGU19GUz1tCi0jIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9bQogQ09ORklHX01TRE9TX0ZTPW0KIENPTkZJR19WRkFUX0ZTPW0KLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19ERVZGU19GUz15Ci1DT05GSUdfREVWRlNfTU9VTlQ9eQotIyBDT05GSUdfREVWRlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0pGRlNfRlM9bQotQ09ORklHX0pGRlNfRlNfVkVSQk9TRT0wCi0jIENPTkZJR19KRkZTX1BST0NfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi0jIENPTkZJR19KRkZTMl9GU19OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX05PUl9FQ0MgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz1tCi0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST09UX05GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogQ09ORklHX1NNQl9GUz1tCi0jIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCiBDT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMTU9eQotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19QUkVFTVBUPXkKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19DUkNfQ0NJVFQ9bQotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zcGVhcjMwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3NwZWFyMzAwX2RlZmNvbmZpZwppbmRleCAzNWU2NGQxLi5jZjI5ZjNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3NwZWFyMzAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3NwZWFyMzAwX2RlZmNvbmZpZwpAQCAtMSw3NzMgKzEsNTEgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMgotIyBUdWUgTWFyIDIzIDE0OjM2OjIzIDIwMTAKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNwotIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci1DT05GSUdfUkRfQlpJUDI9eQotQ09ORklHX1JEX0xaTUE9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9DTEs9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RWRVJTSU9OUz15Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15Ci1DT05GSUdfQkxLX0RFVl9CU0c9eQotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi1DT05GSUdfTU1VPXkKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAogQ09ORklHX1BMQVRfU1BFQVI9eQotQ09ORklHX0FSQ0hfU1BFQVIzWFg9eQotIyBDT05GSUdfQVJDSF9TUEVBUjZYWCBpcyBub3Qgc2V0Ci1DT05GSUdfTUFDSF9TUEVBUjMwMD15Ci0jIENPTkZJR19NQUNIX1NQRUFSMzEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfU1BFQVIzMjAgaXMgbm90IHNldAotQ09ORklHX0JPQVJEX1NQRUFSMzAwX0VWQj15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfMzI9eQotQ09ORklHX0NQVV9BUk05MjZUPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQotQ09ORklHX0NQVV9QQUJSVF9MRUdBQ1k9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4gaXMgbm90IHNldAotQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD01Ci1DT05GSUdfQVJNX1ZJQz15Ci1DT05GSUdfQVJNX1ZJQ19OUj0yCi1DT05GSUdfQ09NTU9OX0NMS0RFVj15Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLUNPTkZJR19BUk1fQU1CQT15Ci0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMDAKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLSMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotQ09ORklHX1pCT09UX1JPTV9URVhUPTAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTAKLUNPTkZJR19DTURMSU5FPSIiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwotIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotIyBDT05GSUdfRlBFX05XRlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz15Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLSMgQ09ORklHX05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTE2Mzg0Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15CiBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz15Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19BTUJBS01JIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTE9eQogQ09ORklHX1NFUklBTF9BTUJBX1BMMDExX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogQ09ORklHX1JBV19EUklWRVI9eQogQ09ORklHX01BWF9SQVdfREVWUz04MTkyCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dQSU9fU1lTRlM9eQotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCiBDT05GSUdfR1BJT19QTDA2MT15Ci0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgQUM5NyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUMl9GU19YQVRUUj15Ci0jIENPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUMl9GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlM0X0ZTPW0KLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9bQogQ09ORklHX01TRE9TX0ZTPW0KIENPTkZJR19WRkFUX0ZTPW0KLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKIENPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9ImFzY2lpIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJ1dGY4IgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQVNDSUk9bQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUj15Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMzIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKLUNPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3NwZWFyMzEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc3BlYXIzMTBfZGVmY29uZmlnCmluZGV4IGNiYmZkMjkuLjgyNGU0NDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc3BlYXIzMTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc3BlYXIzMTBfZGVmY29uZmlnCkBAIC0xLDc3NSArMSw1MiBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyCi0jIFR1ZSBNYXIgMjMgMTQ6Mzc6MDEgMjAxMAotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE3Ci0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX05BTUVTUEFDRVM9eQotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLUNPTkZJR19SRF9CWklQMj15Ci1DT05GSUdfUkRfTFpNQT15Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFZFUlNJT05TPXkKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKLUNPTkZJR19CTEtfREVWX0JTRz15Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0CiBDT05GSUdfUExBVF9TUEVBUj15Ci1DT05GSUdfQVJDSF9TUEVBUjNYWD15Ci0jIENPTkZJR19BUkNIX1NQRUFSNlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfU1BFQVIzMDAgaXMgbm90IHNldAogQ09ORklHX01BQ0hfU1BFQVIzMTA9eQotIyBDT05GSUdfTUFDSF9TUEVBUjMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT0FSRF9TUEVBUjMwMF9FVkIgaXMgbm90IHNldAotQ09ORklHX0JPQVJEX1NQRUFSMzEwX0VWQj15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfMzI9eQotQ09ORklHX0NQVV9BUk05MjZUPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQotQ09ORklHX0NQVV9QQUJSVF9MRUdBQ1k9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4gaXMgbm90IHNldAotQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD01Ci1DT05GSUdfQVJNX1ZJQz15Ci1DT05GSUdfQVJNX1ZJQ19OUj0yCi1DT05GSUdfQ09NTU9OX0NMS0RFVj15Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLUNPTkZJR19BUk1fQU1CQT15Ci0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMDAKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLSMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotQ09ORklHX1pCT09UX1JPTV9URVhUPTAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTAKLUNPTkZJR19DTURMSU5FPSIiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwotIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotIyBDT05GSUdfRlBFX05XRlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz15Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLSMgQ09ORklHX05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTE2Mzg0Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTPXkKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX0FNQkFLTUkgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9BTUJBX1BMMDEwIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMT15CiBDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTFfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiBDT05GSUdfUkFXX0RSSVZFUj15CiBDT05GSUdfTUFYX1JBV19ERVZTPTgxOTIKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR1BJT19TWVNGUz15Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKIENPTkZJR19HUElPX1BMMDYxPXkKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKLSMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9bQotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz1tCiBDT05GSUdfTVNET1NfRlM9bQogQ09ORklHX1ZGQVRfRlM9bQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwogQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iYXNjaWkiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAogQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9InV0ZjgiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAogQ09ORklHX05MU19BU0NJST1tCi0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1BJTkxPQ0s9eQotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUD15Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SPXkKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLUNPTkZJR19GVFJBQ0U9eQotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQotQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc3BlYXIzMjBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zcGVhcjMyMF9kZWZjb25maWcKaW5kZXggMmFlM2MxMS4uODQyZjdmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zcGVhcjMyMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zcGVhcjMyMF9kZWZjb25maWcKQEAgLTEsNzc1ICsxLDUyIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzIKLSMgVHVlIE1hciAyMyAxNDozNzoxMiAyMDEwCi0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfTkFNRVNQQUNFUz15Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotQ09ORklHX1JEX0JaSVAyPXkKLUNPTkZJR19SRF9MWk1BPXkKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVkVSU0lPTlM9eQotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQotQ09ORklHX0JMS19ERVZfQlNHPXkKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotQ09ORklHX01NVT15Ci0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05PTUFESUsgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1M1UEMxWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKIENPTkZJR19QTEFUX1NQRUFSPXkKLUNPTkZJR19BUkNIX1NQRUFSM1hYPXkKLSMgQ09ORklHX0FSQ0hfU1BFQVI2WFggaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9TUEVBUjMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1NQRUFSMzEwIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX1NQRUFSMzIwPXkKLSMgQ09ORklHX0JPQVJEX1NQRUFSMzAwX0VWQiBpcyBub3Qgc2V0Ci1DT05GSUdfQk9BUkRfU1BFQVIzMjBfRVZCPXkKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV8zMj15Ci1DT05GSUdfQ1BVX0FSTTkyNlQ9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUSj15Ci1DT05GSUdfQ1BVX1BBQlJUX0xFR0FDWT15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTUKLUNPTkZJR19BUk1fVklDPXkKLUNPTkZJR19BUk1fVklDX05SPTIKLUNPTkZJR19DT01NT05fQ0xLREVWPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotQ09ORklHX0FSTV9BTUJBPXkKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotQ09ORklHX1ZNU1BMSVRfM0c9eQotIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEwMAotIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MAotQ09ORklHX0NNRExJTkU9IiIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCi0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi0jIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9NSVNDPXkKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotIyBDT05GSUdfTkVUIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQogQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9eQotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fQU1CQUtNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTAgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9BTUJBX1BMMDExPXkKIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMV9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKIENPTkZJR19SQVdfRFJJVkVSPXkKIENPTkZJR19NQVhfUkFXX0RFVlM9ODE5MgotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HUElPX1NZU0ZTPXkKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwogQ09ORklHX0dQSU9fUEwwNjE9eQotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEFDOTcgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDJfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQotIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQVVUT0ZTNF9GUz1tCi0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPW0KIENPTkZJR19NU0RPU19GUz1tCiBDT05GSUdfVkZBVF9GUz1tCi1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CiBDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJhc2NpaSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0idXRmOCIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0FTQ0lJPW0KLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TUElOTE9DSz15Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKIENPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1I9eQotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotQ09ORklHX0ZUUkFDRT15Ci0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQotIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfREVDT01QUkVTU19CWklQMj15Ci1DT05GSUdfREVDT01QUkVTU19MWk1BPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zcGVhcjYwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3NwZWFyNjAwX2RlZmNvbmZpZwppbmRleCBjODVhMDI5Li42Nzc3YzExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3NwZWFyNjAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3NwZWFyNjAwX2RlZmNvbmZpZwpAQCAtMSw3NjAgKzEsNDkgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMgotIyBUdWUgTWFyIDIzIDE0OjM3OjI2IDIwMTAKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNwotIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci1DT05GSUdfUkRfQlpJUDI9eQotQ09ORklHX1JEX0xaTUE9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9DTEs9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RWRVJTSU9OUz15Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15Ci1DT05GSUdfQkxLX0RFVl9CU0c9eQotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi1DT05GSUdfTU1VPXkKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAogQ09ORklHX1BMQVRfU1BFQVI9eQotIyBDT05GSUdfQVJDSF9TUEVBUjNYWCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TUEVBUjZYWD15Ci0jIENPTkZJR19NQUNIX1NQRUFSMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfU1BFQVIzMTAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9TUEVBUjMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT0FSRF9TUEVBUjMwMF9FVkIgaXMgbm90IHNldAotQ09ORklHX01BQ0hfU1BFQVI2MDA9eQotQ09ORklHX0JPQVJEX1NQRUFSNjAwX0VWQj15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfMzI9eQotQ09ORklHX0NQVV9BUk05MjZUPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQotQ09ORklHX0NQVV9QQUJSVF9MRUdBQ1k9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4gaXMgbm90IHNldAotQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD01Ci1DT05GSUdfQVJNX1ZJQz15Ci1DT05GSUdfQVJNX1ZJQ19OUj0yCi1DT05GSUdfQ09NTU9OX0NMS0RFVj15Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLUNPTkZJR19BUk1fQU1CQT15Ci0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMDAKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLSMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotQ09ORklHX1pCT09UX1JPTV9URVhUPTAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTAKLUNPTkZJR19DTURMSU5FPSIiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwotIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotIyBDT05GSUdfRlBFX05XRlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz15Ci0jIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19ORVQgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xNjM4NAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQogQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9eQotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX0FNQkFLTUkgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9BTUJBX1BMMDEwIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMT15CiBDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTFfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogQ09ORklHX1JBV19EUklWRVI9eQogQ09ORklHX01BWF9SQVdfREVWUz04MTkyCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dQSU9fU1lTRlM9eQotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCiBDT05GSUdfR1BJT19QTDA2MT15Ci0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgQUM5NyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUMl9GU19YQVRUUj15Ci0jIENPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUMl9GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlM0X0ZTPW0KLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9bQogQ09ORklHX01TRE9TX0ZTPW0KIENPTkZJR19WRkFUX0ZTPW0KLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKIENPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9ImFzY2lpIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJ1dGY4IgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQVNDSUk9bQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUj15Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMzIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKLUNPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3NwaXR6X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc3BpdHpfZGVmY29uZmlnCmluZGV4IDdkODk0ODkuLmFlYmQ0YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc3BpdHpfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc3BpdHpfZGVmY29uZmlnCkBAIC0xLDUzOSArMSw3MCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3Ci0jIE1vbiBPY3QgMjAgMTA6MjU6MzcgMjAwOAotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfQVJDSF9NVERfWElQPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfT1BST0ZJTEU9bQotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1BYQT15Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTTdYMDBBIGlzIG5vdCBzZXQKLQotIwotIyBJbnRlbCBQWEEyeHgvUFhBM3h4IEltcGxlbWVudGF0aW9ucwotIwotIyBDT05GSUdfQVJDSF9HVU1TVElYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTVA5MDBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0CiBDT05GSUdfUFhBX1NIQVJQU0w9eQotIyBDT05GSUdfTUFDSF9QT09ETEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DT1JHSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1NIRVBIRVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfSFVTS1kgaXMgbm90IHNldAogQ09ORklHX01BQ0hfQUtJVEE9eQotQ09ORklHX01BQ0hfU1BJVFo9eQogQ09ORklHX01BQ0hfQk9SWk9JPXkKLSMgQ09ORklHX01BQ0hfVE9TQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZJUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBX0VTRVJJRVMgaXMgbm90IHNldAotIyBDT05GSUdfVFJJWkVQU19QWEEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9FTV9YMjcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ09MSUJSSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1pZTE9OSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTElUVExFVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVEFWT1JFVkIgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9TQUFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQVJNQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NNX1gzMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NQUdJQ0lBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01JT0E3MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9QQ00wMjcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfUEFMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QWEFfRVpYIGlzIG5vdCBzZXQKLUNPTkZJR19QWEEyN3g9eQotQ09ORklHX1BYQV9TSEFSUF9DeHgwMD15Ci1DT05GSUdfUFhBX1NTUD15Ci0jIENPTkZJR19QWEFfUFdNIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCi0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfWFNDQUxFPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VD15Ci1DT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0lXTU1YVD15Ci1DT05GSUdfWFNDQUxFX1BNVT15Ci1DT05GSUdfU0hBUlBfUEFSQU09eQotQ09ORklHX1NIQVJQU0xfUE09eQotQ09ORklHX1NIQVJQX1NDT09QPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX1BDQ0FSRD15Ci0jIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQT15Ci1DT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKLUNPTkZJR19QQ01DSUFfSU9DVEw9eQotCi0jCi0jIFBDLWNhcmQgYnJpZGdlcwotIwogQ09ORklHX1BDTUNJQV9QWEEyWFg9eQotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1RJQ0tfT05FU0hPVD15Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotQ09ORklHX1ZNU1BMSVRfM0c9eQotIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCiBDT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfSFo9MTAwCi0jIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMG44IGNvbnNvbGU9dHR5MSBub2luaXRyZCByb290PS9kZXYvbXRkYmxvY2syIHJvb3Rmc3R5cGU9amZmczIgICBkZWJ1ZyIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci1DT05GSUdfSEFWRV9BT1VUPXkKIENPTkZJR19CSU5GTVRfQU9VVD1tCiBDT05GSUdfQklORk1UX01JU0M9bQotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkQ9eQotQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15Ci1DT05GSUdfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLUNPTkZJR19YRlJNX0lQQ09NUD1tCi0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNj1tCi0jIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUNl9BSD1tCiBDT05GSUdfSU5FVDZfRVNQPW0KIENPTkZJR19JTkVUNl9JUENPTVA9bQotIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCi1DT05GSUdfSU5FVDZfVFVOTkVMPW0KLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCi0jIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAotQ09ORklHX0lQVjZfU0lUPW0KLUNPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKIENPTkZJR19JUFY2X1RVTk5FTD1tCi0jIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1AgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0cgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1AgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEggaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RJTUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19ORl9ERUZSQUdfSVBWNCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCi0jIENPTkZJR19JUF9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KIENPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCi0jIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KLSMgQ09ORklHX0lQX05GX1RBUkdFVF9FQ04gaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfUkFXPW0KIENPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQogQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCiBDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCi0KLSMKLSMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKIENPTkZJR19JUDZfTkZfUVVFVUU9bQogQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCi0jIENPTkZJR19JUDZfTkZfTUFUQ0hfQUggaXMgbm90IHNldAogQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCiBDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KLSMgQ09ORklHX0lQNl9ORl9NQVRDSF9NSCBpcyBub3Qgc2V0CiBDT05GSUdfSVA2X05GX01BVENIX1JUPW0KLSMgQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HIGlzIG5vdCBzZXQKIENPTkZJR19JUDZfTkZfRklMVEVSPW0KLSMgQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19JUDZfTkZfTUFOR0xFPW0KLSMgQ09ORklHX0lQNl9ORl9UQVJHRVRfSEwgaXMgbm90IHNldAogQ09ORklHX0lQNl9ORl9SQVc9bQotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiBDT05GSUdfSVJEQT1tCi0KLSMKLSMgSXJEQSBwcm90b2NvbHMKLSMKIENPTkZJR19JUkxBTj1tCiBDT05GSUdfSVJORVQ9bQogQ09ORklHX0lSQ09NTT1tCi0jIENPTkZJR19JUkRBX1VMVFJBIGlzIG5vdCBzZXQKLQotIwotIyBJckRBIG9wdGlvbnMKLSMKLSMgQ09ORklHX0lSREFfQ0FDSEVfTEFTVF9MU0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREFfRkFTVF9SUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbmZyYXJlZC1wb3J0IGRldmljZSBkcml2ZXJzCi0jCi0KLSMKLSMgU0lSIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19JUlRUWV9TSVIgaXMgbm90IHNldAotCi0jCi0jIERvbmdsZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19LSU5HU1VOX0RPTkdMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LU0RBWlpMRV9ET05HTEUgaXMgbm90IHNldAotIyBDT05GSUdfS1M5NTlfRE9OR0xFIGlzIG5vdCBzZXQKLQotIwotIyBGSVIgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJR01BVEVMX0ZJUiBpcyBub3Qgc2V0CiBDT05GSUdfUFhBX0ZJQ1A9bQotIyBDT05GSUdfTUNTX0ZJUiBpcyBub3Qgc2V0CiBDT05GSUdfQlQ9bQogQ09ORklHX0JUX0wyQ0FQPW0KIENPTkZJR19CVF9TQ089bQpAQCAtNTQzLDE4ICs3NCw5IEBACiBDT05GSUdfQlRfQk5FUF9NQ19GSUxURVI9eQogQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSPXkKIENPTkZJR19CVF9ISURQPW0KLQotIwotIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKLSMKLUNPTkZJR19CVF9IQ0lVU0I9bQotIyBDT05GSUdfQlRfSENJVVNCX1NDTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCVFVTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCVFNESU8gaXMgbm90IHNldAogQ09ORklHX0JUX0hDSVVBUlQ9bQogQ09ORklHX0JUX0hDSVVBUlRfSDQ9eQogQ09ORklHX0JUX0hDSVVBUlRfQkNTUD15Ci0jIENPTkZJR19CVF9IQ0lVQVJUX0xMIGlzIG5vdCBzZXQKIENPTkZJR19CVF9IQ0lCQ00yMDNYPW0KIENPTkZJR19CVF9IQ0lCUEExMFg9bQogQ09ORklHX0JUX0hDSUJGVVNCPW0KQEAgLTU2Myw3NzQgKzg1LDEwNSBAQAogQ09ORklHX0JUX0hDSUJMVUVDQVJEPW0KIENPTkZJR19CVF9IQ0lCVFVBUlQ9bQogQ09ORklHX0JUX0hDSVZIQ0k9bQotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMT1tCi0jIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQotIyBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVAgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVAgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUk9NPXkKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1NIQVJQX1NMPXkKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAotIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEU9eQotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0gxOTAwIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfU0hBUlBTTD15Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPXkKIENPTkZJR19CTEtfREVWX0lERUNTPXkKLSMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX1BST0NfRlM9eQotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9bQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9bQogQ09ORklHX0NIUl9ERVZfU1Q9bQogQ09ORklHX0NIUl9ERVZfT1NTVD1tCiBDT05GSUdfQkxLX0RFVl9TUj1tCi0jIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz1tCi0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiBDT05GSUdfU0NTSV9NVUxUSV9MVU49eQotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9bQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKIENPTkZJR19VU0JfQ0FUQz1tCiBDT05GSUdfVVNCX0tBV0VUSD1tCiBDT05GSUdfVVNCX1BFR0FTVVM9bQogQ09ORklHX1VTQl9SVEw4MTUwPW0KIENPTkZJR19VU0JfVVNCTkVUPW0KLUNPTkZJR19VU0JfTkVUX0FYODgxN1g9bQotQ09ORklHX1VTQl9ORVRfQ0RDRVRIRVI9bQotIyBDT05GSUdfVVNCX05FVF9ETTk2MDEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9TTVNDOTVYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX0dMNjIwQSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX05FVF9ORVQxMDgwPW0KLSMgQ09ORklHX1VTQl9ORVRfUExVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9NQ1M3ODMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfUk5ESVNfSE9TVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVQgaXMgbm90IHNldAotQ09ORklHX1VTQl9ORVRfWkFVUlVTPW0KIENPTkZJR19ORVRfUENNQ0lBPXkKLSMgQ09ORklHX1BDTUNJQV8zQzU4OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfM0M1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX0ZNVkoxOFggaXMgbm90IHNldAogQ09ORklHX1BDTUNJQV9QQ05FVD1tCi0jIENPTkZJR19QQ01DSUFfTk1DTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9TTUM5MUM5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfWElSQzJQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfQVhORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9bQotIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKIENPTkZJR19QUFBfQVNZTkM9bQotIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9ERUZMQVRFIGlzIG5vdCBzZXQKIENPTkZJR19QUFBfQlNEQ09NUD1tCi0jIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLUNPTkZJR19TTEhDPW0KLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQogQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9BUE1QT1dFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0NPUkdJIGlzIG5vdCBzZXQKLUNPTkZJR19LRVlCT0FSRF9TUElUWj15Ci0jIENPTkZJR19LRVlCT0FSRF9QWEEyN3ggaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKIENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2PXkKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0NPUkdJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01JU0M9eQotIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9DTTEwOSBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVUlOUFVUPW0KLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPW0KIENPTkZJR19TRVJJQUxfODI1MF9DUz1tCi1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKIENPTkZJR19TRVJJQUxfUFhBPXkKIENPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT1tCi0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCi0jCi0jIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfUFhBPXkKLSMgQ09ORklHX0kyQ19QWEFfU0xBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKIENPTkZJR19TUEk9eQotIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TUElfTUFTVEVSPXkKLQotIwotIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX1NQSV9QWEEyWFg9eQotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCi0jIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLUNPTkZJR19TRU5TT1JTX01BWDExMTE9eQotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVUNCMTQwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9QWEE9eQotIyBDT05GSUdfRkJfUFhBX1NNQVJUUEFORUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUFhBX1BBUkFNRVRFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1cxMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiBDT05GSUdfTENEX0NMQVNTX0RFVklDRT15CiBDT05GSUdfTENEX0NPUkdJPXkKLSMgQ09ORklHX0xDRF9MVFYzNTBRViBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQ0RfVERPMjRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xDRF9WR0cyNDMyQTQgaXMgbm90IHNldAotIyBDT05GSUdfTENEX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9DT1JHSSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT049eQogQ09ORklHX0ZPTlRTPXkKIENPTkZJR19GT05UXzh4OD15CiBDT05GSUdfRk9OVF84eDE2PXkKLSMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9NSU5JXzR4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR08gaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPW0KLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKLSMKIENPTkZJR19VU0JfS0JEPW0KIENPTkZJR19VU0JfTU9VU0U9bQotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLUNPTkZJR19ISURfQ09NUEFUPXkKIENPTkZJR19ISURfQTRURUNIPW0KIENPTkZJR19ISURfQVBQTEU9bQogQ09ORklHX0hJRF9CRUxLSU49bQotQ09ORklHX0hJRF9CUklHSFQ9bQogQ09ORklHX0hJRF9DSEVSUlk9bQogQ09ORklHX0hJRF9DSElDT05ZPW0KIENPTkZJR19ISURfQ1lQUkVTUz1tCi1DT05GSUdfSElEX0RFTEw9bQogQ09ORklHX0hJRF9FWktFWT1tCiBDT05GSUdfSElEX0dZUkFUSU9OPW0KIENPTkZJR19ISURfTE9HSVRFQ0g9bQotIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAotIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9NSUNST1NPRlQ9bQogQ09ORklHX0hJRF9NT05URVJFWT1tCiBDT05GSUdfSElEX1BBTlRIRVJMT1JEPW0KLSMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfUEVUQUxZTlg9bQogQ09ORklHX0hJRF9TQU1TVU5HPW0KIENPTkZJR19ISURfU09OWT1tCiBDT05GSUdfSElEX1NVTlBMVVM9bQotQ09ORklHX1RIUlVTVE1BU1RFUl9GRj1tCi1DT05GSUdfWkVST1BMVVNfRkY9bQotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPW0KLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049bQogQ09ORklHX1VTQl9PSENJX0hDRD1tCi0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKIENPTkZJR19VU0JfU0w4MTFfSENEPW0KIENPTkZJR19VU0JfU0w4MTFfQ1M9bQotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKIENPTkZJR19VU0JfQUNNPW0KIENPTkZJR19VU0JfUFJJTlRFUj1tCi0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9bQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCiBDT05GSUdfVVNCX01EQzgwMD1tCiBDT05GSUdfVVNCX01JQ1JPVEVLPW0KLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCiBDT05GSUdfVVNCX1NFUklBTD1tCi1DT05GSUdfVVNCX0VaVVNCPXkKIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUM9eQotIyBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOPW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfQ0gzNDEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUPW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTAxIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTg9bQogQ09ORklHX1VTQl9TRVJJQUxfRU1QRUc9bQogQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU89bQotIyBDT05GSUdfVVNCX1NFUklBTF9GVU5TT0ZUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SPW0KIENPTkZJR19VU0JfU0VSSUFMX0lQQVE9bQogQ09ORklHX1VTQl9TRVJJQUxfSVI9bQpAQCAtMTMzOCw0ODMgKzE5MSw4NSBAQAogQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlRfVEk9bQogQ09ORklHX1VTQl9TRVJJQUxfR0FSTUlOPW0KIENPTkZJR19VU0JfU0VSSUFMX0lQVz1tCi0jIENPTkZJR19VU0JfU0VSSUFMX0lVVSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1BEQT1tCiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOPW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9NUFIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0EyOFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4WEEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4WEIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE5VyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTlRVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTlRSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBNDlXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0E0OVdMQyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9LTFNJPW0KIENPTkZJR19VU0JfU0VSSUFMX0tPQklMX1NDVD1tCiBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMj1tCi0jIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTU9UT1JPTEEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzPW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfT1RJNjg1OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1NQQ1A4WDUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9IUDRYIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX1NBRkU9bQotIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFX1BBRERFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1NJRVJSQVdJUkVMRVNTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX1RJPW0KIENPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSz1tCiBDT05GSUdfVVNCX1NFUklBTF9YSVJDT009bQotIyBDT05GSUdfVVNCX1NFUklBTF9PUFRJT04gaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVD1tCi0jIENPTkZJR19VU0JfU0VSSUFMX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCiBDT05GSUdfVVNCX0VNSTYyPW0KIENPTkZJR19VU0JfRU1JMjY9bQotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUklPNTAwPW0KIENPTkZJR19VU0JfTEVHT1RPV0VSPW0KIENPTkZJR19VU0JfTENEPW0KLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAogQ09ORklHX1VTQl9MRUQ9bQotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfQ1lUSEVSTT1tCi0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0lETU9VU0U9bQotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVD1tCi0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTIKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0Q9eQotQ09ORklHX1VTQl9EVU1NWV9IQ0Q9bQotQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKIENPTkZJR19VU0JfWkVSTz1tCiBDT05GSUdfVVNCX0VUSD1tCi1DT05GSUdfVVNCX0VUSF9STkRJUz15CiBDT05GSUdfVVNCX0dBREdFVEZTPW0KIENPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KLSMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dfU0VSSUFMPW0KLSMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQotIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwogQ09ORklHX01NQ19QWEE9eQotIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVm9sdGFnZSBhbmQgQ3VycmVudCByZWd1bGF0b3JzCi0jCi0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQyX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUMl9GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9TVU1NQVJZPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQogQ09ORklHX0pGRlMyX1JVQklOPXkKLSMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKLSMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9bQotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9bQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9bQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9bQotQ09ORklHX1NVTlJQQ19HU1M9bQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9bQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiBDT05GSUdfU01CX0ZTPW0KIENPTkZJR19TTUJfTkxTX0RFRkFVTFQ9eQotQ09ORklHX1NNQl9OTFNfUkVNT1RFPSJjcDQzNyIKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9ImNwNDM3IgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX1VURjg9eQotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVFJBQ0U9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19FUlJPUlM9eQotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BRUFEPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX1JORz15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTlVMTD1tCi0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQVVUSEVOQz1tCiBDT05GSUdfQ1JZUFRPX1RFU1Q9bQotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj1tCi0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKIENPTkZJR19DUllQVE9fSE1BQz15Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCiBDT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT1tCiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19TSEExPW0KIENPTkZJR19DUllQVE9fU0hBMjU2PW0KIENPTkZJR19DUllQVE9fU0hBNTEyPW0KLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19XUDUxMj1tCi0KLSMKLSMgQ2lwaGVycwotIwogQ09ORklHX0NSWVBUT19BRVM9bQogQ09ORklHX0NSWVBUT19BTlVCSVM9bQogQ09ORklHX0NSWVBUT19BUkM0PW0KIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQ0FTVDU9bQogQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX0RFUz1tCi0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fS0hBWkFEPW0KLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fU0VSUEVOVD1tCiBDT05GSUdfQ1JZUFRPX1RFQT1tCiBDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCi0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zdGFtcDlnMjBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zdGFtcDlnMjBfZGVmY29uZmlnCmluZGV4IDA2YTgyOTMuLmQ1ZTI2MGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc3RhbXA5ZzIwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3N0YW1wOWcyMF9kZWZjb25maWcKQEAgLTEsMTQ1NiArMSwxMjkgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC1yYzEKLSMgV2VkIE1hciAxNyAxNjozODowMyAyMDEwCi0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0hBVkVfUFJPQ19DUFU9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKLUNPTkZJR19IQVZFX0tFUk5FTF9MWk89eQotQ09ORklHX0tFUk5FTF9HWklQPXkKLSMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVJORUxfTFpPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAogQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX05BTUVTUEFDRVM9eQotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci1DT05GSUdfUkRfQlpJUDI9eQotQ09ORklHX1JEX0xaTUE9eQotQ09ORklHX1JEX0xaTz15Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkRBRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLUNPTkZJR19GUkVFWkVSPXkKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotQ09ORklHX01NVT15Ci0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0FUOTE9eQotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ET1ZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlVDOTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VODUwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BVDkxX1VTQVJUMz15Ci1DT05GSUdfSEFWRV9BVDkxX1VTQVJUND15Ci1DT05GSUdfSEFWRV9BVDkxX1VTQVJUNT15Ci0KLSMKLSMgQXRtZWwgQVQ5MSBTeXN0ZW0tb24tQ2hpcAotIwotIyBDT05GSUdfQVJDSF9BVDkxUk05MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05RzEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxU0FNOVJMIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0FUOTFTQU05RzIwPXkKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTlHNDUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxQ0FQOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUNTcyRDk0MEhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVg0MCBpcyBub3Qgc2V0Ci1DT05GSUdfQVQ5MV9QTUNfVU5JVD15Ci0KLSMKLSMgQVQ5MVNBTTlHMjAgQm9hcmQgVHlwZQotIwotIyBDT05GSUdfTUFDSF9BVDkxU0FNOUcyMEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQVQ5MVNBTTlHMjBFS18yTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ1BVOUcyMCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9QT1JUVVhHMjA9eQogQ09ORklHX01BQ0hfU1RBTVA5RzIwPXkKLQotIwotIyBBVDkxIEJvYXJkIE9wdGlvbnMKLSMKLQotIwotIyBBVDkxIEZlYXR1cmUgU2VsZWN0aW9ucwotIwogQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUz15CiBDT05GSUdfQVQ5MV9TTE9XX0NMT0NLPXkKLUNPTkZJR19BVDkxX1RJTUVSX0haPTEwMAotQ09ORklHX0FUOTFfRUFSTFlfREJHVT15Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUNSBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTI2VD15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKLUNPTkZJR19DUFVfUEFCUlRfTEVHQUNZPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXQj15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLSMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQogIyBDT05GSUdfT0FCSV9DT01QQVQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz05OTk5OTkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTAKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci0jIENPTkZJR19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0jIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9Im1lbT02NE0gY29uc29sZT10dHlTMCwxMTUyMDAgaW5pdHJkPTB4MjExMDAwMDAsMzE0NTcyOCByb290PS9kZXYvcmFtMCBydyIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0tFWEVDPXkKLUNPTkZJR19BVEFHU19QUk9DPXkKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwogQ09ORklHX0NQVV9JRExFPXkKLUNPTkZJR19DUFVfSURMRV9HT1ZfTEFEREVSPXkKLUNPTkZJR19DUFVfSURMRV9HT1ZfTUVOVT15Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi0jIENPTkZJR19WRlAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCiBDT05GSUdfUE09eQotIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BNX1NMRUVQPXkKLUNPTkZJR19TVVNQRU5EPXkKLUNPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQotIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19QTV9PUFM9eQotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0RBVEFGTEFTSD15Ci0jIENPTkZJR19NVERfREFUQUZMQVNIX1dSSVRFX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfREFUQUZMQVNIX09UUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORD15Ci0jIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0dQSU8gaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORF9BVE1FTD15Ci0jIENPTkZJR19NVERfTkFORF9BVE1FTF9FQ0NfSFcgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0FUTUVMX0VDQ19TT0ZUPXkKLSMgQ09ORklHX01URF9OQU5EX0FUTUVMX0VDQ19OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX01VTFRJX0xVTj15Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0CiBDT05GSUdfTUFDQj15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MzIwCiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9MjQwCi0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX0FUTUVMPXkKIENPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0FUTUVMX1BEQz15Ci0jIENPTkZJR19TRVJJQUxfQVRNRUxfVFRZQVQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotQ09ORklHX0kyQ19BTEdPQklUPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfR1BJTz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1hJTElOWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKIENPTkZJR19TUEk9eQotQ09ORklHX1NQSV9NQVNURVI9eQotCi0jCi0jIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCi0jCiBDT05GSUdfU1BJX0FUTUVMPXkKLSMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAotIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCiBDT05GSUdfU1BJX1NQSURFVj15Ci0jIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQogQ09ORklHX0dQSU9fU1lTRlM9eQotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX0lUODc2MUUgaXMgbm90IHNldAotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX0FEUDU1ODggaXMgbm90IHNldAotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNldAotCi0jCi0jIEFDOTcgR1BJTyBleHBhbmRlcnM6Ci0jCiBDT05GSUdfVzE9eQotCi0jCi0jIDEtd2lyZSBCdXMgTWFzdGVycwotIwotIyBDT05GSUdfVzFfTUFTVEVSX0RTMjQ5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMV9NQVNURVJfRFMyNDgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxX01BU1RFUl9EUzFXTSBpcyBub3Qgc2V0CiBDT05GSUdfVzFfTUFTVEVSX0dQSU89eQotCi0jCi0jIDEtd2lyZSBTbGF2ZXMKLSMKIENPTkZJR19XMV9TTEFWRV9USEVSTT15Ci0jIENPTkZJR19XMV9TTEFWRV9TTUVNIGlzIG5vdCBzZXQKIENPTkZJR19XMV9TTEFWRV9EUzI0MzE9eQotIyBDT05GSUdfVzFfU0xBVkVfRFMyNDMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxX1NMQVZFX0RTMjc2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMV9TTEFWRV9CUTI3MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfTUFYNjNYWF9XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HPXkKLQotIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF84OFBNODYwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19JMkNQTEQgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9NQVg4OTI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004OTk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15Ci0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0KLSMKLSMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KLSMKIENPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVQ9bQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgotQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQotQ09ORklHX1VTQl9HQURHRVRfQVQ5MT15Ci1DT05GSUdfVVNCX0FUOTE9bQotIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1pFUk89bQotIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRVRIPW0KLUNPTkZJR19VU0JfRVRIX1JORElTPXkKLSMgQ09ORklHX1VTQl9FVEhfRUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRT1tCi0jIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01BU1NfU1RPUkFHRSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dfU0VSSUFMPW0KLSMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX05PS0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX01VTFRJIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VMUEkgaXMgbm90IHNldAotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKLSMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX0FUTUVMTUNJPXkKLSMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKLQotIwotIyBMRUQgZHJpdmVycwotIwotIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX0dQSU89eQotQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15Ci0jIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfTFQzNTkzIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKIENPTkZJR19MRURTX1RSSUdHRVJTPXkKIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQotIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049eQotCi0jCi0jIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKLSMKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCiBDT05GSUdfUlRDX0RSVl9BVDkxU0FNOT15Ci1DT05GSUdfUlRDX0RSVl9BVDkxU0FNOV9SVFQ9MAotQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTlfR1BCUj0wCi0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKLSMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfU1VNTUFSWT15Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotIyBDT05GSUdfTE9HRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAogQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xNT15Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogQ09ORklHX05MU19VVEY4PXkKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci1DT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19BUk1fVU5XSU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfT0NfRVRNIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfTFpPX0RFQ09NUFJFU1M9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfREVDT01QUkVTU19CWklQMj15Ci1DT05GSUdfREVDT01QUkVTU19MWk1BPXkKLUNPTkZJR19ERUNPTVBSRVNTX0xaTz15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19OTEFUVFI9eQotQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zdG1wMzc4eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3N0bXAzNzh4X2RlZmNvbmZpZwppbmRleCBiMWEzYTk3Li45NGEyZDkwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3N0bXAzNzh4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3N0bXAzNzh4X2RlZmNvbmZpZwpAQCAtMSwxMTQwICsxLDEyOCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjMgotIyBUaHUgQXByIDIzIDAyOjQ0OjEzIDIwMDkKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iLWRlZmF1bHQiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQotQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNwotIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfUkVMQVk9eQotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19JTklUUkFNRlNfUk9PVF9VSUQ9MAotQ09ORklHX0lOSVRSQU1GU19ST09UX0dJRD0wCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9OT05FIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fR1pJUD15Ci0jIENPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0xaTUEgaXMgbm90IHNldAotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci1DT05GSUdfS0FMTFNZTVNfQUxMPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX1NUUklQX0FTTV9TWU1TPXkKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NUTVAzWFhYPXkKLQotIwotIyBGcmVlc2NhbGUgU1RNUDN4eHggaW1wbGVtZW50YXRpb25zCi0jCi0jIENPTkZJR19BUkNIX1NUTVAzN1hYIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NUTVAzNzhYPXkKLSMgQ09ORklHX01BQ0hfU1RNUDM3WFggaXMgbm90IHNldAotQ09ORklHX01BQ0hfU1RNUDM3OFg9eQotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX0FSTTkyNlQ9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUSj15Ci1DT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ09NTU9OX0NMS0RFVj15Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAogQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CiBDT05GSUdfSElHSE1FTT15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0RCRzAsMTE1MjAwIG1lbT0zMk0iCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwotIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotIyBDT05GSUdfRlBFX05XRlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQotQ09ORklHX0FTS19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15CiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKIENPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKIENPTkZJR19JUF9NUk9VVEU9eQogQ09ORklHX0lQX1BJTVNNX1YxPXkKIENPTkZJR19JUF9QSU1TTV9WMj15Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX05FVF9TQ0hFRD15Ci0KLSMKLSMgUXVldWVpbmcvU2NoZWR1bGluZwotIwotIyBDT05GSUdfTkVUX1NDSF9DQlEgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSF9IVEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSF9IRlNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hfUFJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIX01VTFRJUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIX1JFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIX1NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIX1RFUUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSF9UQkYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSF9HUkVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hfRFNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hfTkVURU0gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSF9EUlIgaXMgbm90IHNldAotCi0jCi0jIENsYXNzaWZpY2F0aW9uCi0jCi0jIENPTkZJR19ORVRfQ0xTX0JBU0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfVENJTkRFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX0ZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfUlNWUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JTVlA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRU1BVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfQUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfU0NIX0ZJRk89eQotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfRklCX1JVTEVTPXkKICMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKICMgQ09ORklHX1NUQU5EQUxPTkUgaXMgbm90IHNldAotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEFSVElUSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotIyBDT05GSUdfTVREX0JMS0RFVlMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DS19STyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORD15Ci0jIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0dQSU8gaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKIENPTkZJR19NVERfVUJJPXkKLUNPTkZJR19NVERfVUJJX1dMX1RIUkVTSE9MRD00MDk2Ci1DT05GSUdfTVREX1VCSV9CRUJfUkVTRVJWRT0xCiBDT05GSUdfTVREX1VCSV9HTFVFQkk9eQotCi0jCi0jIFVCSSBkZWJ1Z2dpbmcgb3B0aW9ucwotIwotIyBDT05GSUdfTVREX1VCSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD00CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT02MTQ0Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1BPTExERVY9eQotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTMyMAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTI0MAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01JU0M9eQotIyBDT05GSUdfSU5QVVRfVUlOUFVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0dQSU9fUk9UQVJZX0VOQ09ERVIgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKICMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQogQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKIENPTkZJR19ERUJVR19HUElPPXkKIENPTkZJR19HUElPX1NZU0ZTPXkKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotQ09ORklHX1ZJREVPX0RFVj15Ci1DT05GSUdfVklERU9fVjRMMl9DT01NT049eQotIyBDT05GSUdfVklERU9fQUxMT1dfVjRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19WNEwxX0NPTVBBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fTUVESUE9eQotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfTUVESUFfQVRUQUNIIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19WNEwyPXkKLUNPTkZJR19WSURFT19DQVBUVVJFX0RSSVZFUlM9eQotIyBDT05GSUdfVklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19IRUxQRVJfQ0hJUFNfQVVUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5jb2RlcnMvZGVjb2RlcnMgYW5kIG90aGVyIGhlbHBlciBjaGlwcwotIwotCi0jCi0jIEF1ZGlvIGRlY29kZXJzCi0jCi0KLSMKLSMgUkRTIGRlY29kZXJzCi0jCi0KLSMKLSMgVmlkZW8gZGVjb2RlcnMKLSMKLQotIwotIyBWaWRlbyBhbmQgYXVkaW8gZGVjb2RlcnMKLSMKLQotIwotIyBNUEVHIHZpZGVvIGVuY29kZXJzCi0jCi0jIENPTkZJR19WSURFT19DWDIzNDFYIGlzIG5vdCBzZXQKLQotIwotIyBWaWRlbyBlbmNvZGVycwotIwotCi0jCi0jIFZpZGVvIGltcHJvdmVtZW50IGNoaXBzCi0jCi0jIENPTkZJR19WSURFT19WSVZJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPQ19DQU1FUkEgaXMgbm90IHNldAotIyBDT05GSUdfUkFESU9fQURBUFRFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9EREMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiBDT05GSUdfTENEX0NMQVNTX0RFVklDRT15Ci0jIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQ0RfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQotQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDPXkKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19GT05UXzh4OD15Ci1DT05GSUdfRk9OVF84eDE2PXkKIENPTkZJR19MT0dPPXkKLUNPTkZJR19MT0dPX0xJTlVYX01PTk89eQotQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX0NPTkZJR0ZTX0ZTPW0KICMgQ09ORklHX01JU0NfRklMRVNZU1RFTVMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0ZTPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX1NUUklQX0FTTV9TWU1TPXkKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFQlVHX1NISVJRPXkKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCiAjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19PQkpFQ1RTPXkKIENPTkZJR19ERUJVR19PQkpFQ1RTX1NFTEZURVNUPXkKIENPTkZJR19ERUJVR19PQkpFQ1RTX0ZSRUU9eQogQ09ORklHX0RFQlVHX09CSkVDVFNfVElNRVJTPXkKLUNPTkZJR19ERUJVR19PQkpFQ1RTX0VOQUJMRV9ERUZBVUxUPTEKIENPTkZJR19ERUJVR19TTEFCPXkKIENPTkZJR19ERUJVR19TTEFCX0xFQUs9eQotQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQogQ09ORklHX0RFQlVHX1JUX01VVEVYRVM9eQotQ09ORklHX0RFQlVHX1BJX0xJU1Q9eQotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19TUElOTE9DSz15Ci1DT05GSUdfREVCVUdfTVVURVhFUz15Ci1DT05GSUdfREVCVUdfTE9DS19BTExPQz15CiBDT05GSUdfUFJPVkVfTE9DS0lORz15Ci1DT05GSUdfTE9DS0RFUD15Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0RFUCBpcyBub3Qgc2V0Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1M9eQogQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBQ0tUUkFDRT15CiBDT05GSUdfREVCVUdfS09CSkVDVD15Ci0jIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAotQ09ORklHX05PUF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19SSU5HX0JVRkZFUj15Ci1DT05GSUdfVFJBQ0lORz15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCi1DT05GSUdfRlVOQ1RJT05fVFJBQ0VSPXkKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0CiBDT05GSUdfQk9PVF9UUkFDRVI9eQotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBQ0tfVFJBQ0VSPXkKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lPX1RSQUNFPXkKLSMgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fVU5XSU5EPXkKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCiBDT05GSUdfS0VZUz15CiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQogQ09ORklHX1NFQ1VSSVRZPXkKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9QQVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNVUklUWV9ERUZBVUxUX01NQVBfTUlOX0FERFI9MAotIyBDT05GSUdfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fVEVTVD1tCi0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPXkKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwogQ09ORklHX0NSWVBUT19ITUFDPXkKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1NIQTE9bQotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCiBDT05GSUdfQ1JZUFRPX0FFUz1tCi0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKIENPTkZJR19DUllQVE9fREVGTEFURT15Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0xaTz15Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLUNPTkZJR19CSU5BUllfUFJJTlRGPXkKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQogQ09ORklHX0NSQzE2PXkKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0xaT19DT01QUkVTUz15Ci1DT05GSUdfTFpPX0RFQ09NUFJFU1M9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zdG1wMzd4eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3N0bXAzN3h4X2RlZmNvbmZpZwppbmRleCBhMzc1MWM5Li5kOGVlNThjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3N0bXAzN3h4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3N0bXAzN3h4X2RlZmNvbmZpZwpAQCAtMSwxMDAxICsxLDEwOCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LjEKLSMgTW9uIEFwciAyMCAwNDo0MToyNiAyMDA5Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049Ii1kZWZhdWx0IgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX1JFTEFZPXkKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfSU5JVFJBTUZTX1JPT1RfVUlEPTAKLUNPTkZJR19JTklUUkFNRlNfUk9PVF9HSUQ9MAotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkQ9eQotQ09ORklHX0JMS19ERVZfSU9fVFJBQ0U9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NUTVAzWFhYPXkKLQotIwotIyBGcmVlc2NhbGUgU1RNUDN4eHggaW1wbGVtZW50YXRpb25zCi0jCi1DT05GSUdfQVJDSF9TVE1QMzdYWD15Ci0jIENPTkZJR19BUkNIX1NUTVAzNzhYIGlzIG5vdCBzZXQKLUNPTkZJR19NQUNIX1NUTVAzN1hYPXkKLSMgQ09ORklHX01BQ0hfU1RNUDM3OFggaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX0FSTTkyNlQ9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUSj15Ci1DT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ09NTU9OX0NMS0RFVj15Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAogQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTREJHMCwxMTUyMDAgbWVtPTMyTSBsY2RfcGFuZWw9bG1zMzUwIHJkaW5pdD0vYmluL3NoIGlnbm9yZV9sb2dsZXZlbCIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCi0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi0jIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKLUNPTkZJR19BU0tfSVBfRklCX0hBU0g9eQotIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVM9eQogQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15CiBDT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTVJPVVRFPXkKIENPTkZJR19JUF9QSU1TTV9WMT15CiBDT05GSUdfSVBfUElNU01fVjI9eQotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogQ09ORklHX05FVF9TQ0hFRD15Ci0KLSMKLSMgUXVldWVpbmcvU2NoZWR1bGluZwotIwotIyBDT05GSUdfTkVUX1NDSF9DQlEgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSF9IVEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSF9IRlNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hfUFJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIX01VTFRJUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIX1JFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIX1NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIX1RFUUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSF9UQkYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSF9HUkVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hfRFNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hfTkVURU0gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSF9EUlIgaXMgbm90IHNldAotCi0jCi0jIENsYXNzaWZpY2F0aW9uCi0jCi0jIENPTkZJR19ORVRfQ0xTX0JBU0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfVENJTkRFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX0ZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfUlNWUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JTVlA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRU1BVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfQUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfU0NIX0ZJRk89eQotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19GSUJfUlVMRVM9eQogIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9NAogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NjE0NAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz15Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1BPTExERVY9eQotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTMyMAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTI0MAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTUlTQz15Ci0jIENPTkZJR19JTlBVVF9VSU5QVVQgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKICMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQogQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1NUTVBfREJHIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15CiBDT05GSUdfREVCVUdfR1BJTz15CiBDT05GSUdfR1BJT19TWVNGUz15Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLUNPTkZJR19WSURFT19ERVY9eQotQ09ORklHX1ZJREVPX1Y0TDJfQ09NTU9OPXkKLSMgQ09ORklHX1ZJREVPX0FMTE9XX1Y0TDEgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fVjRMMV9DT01QQVQgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX01FRElBPXkKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX01FRElBX0FUVEFDSCBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15Ci1DT05GSUdfVklERU9fQ0FQVFVSRV9EUklWRVJTPXkKLSMgQ09ORklHX1ZJREVPX0FEVl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19GSVhFRF9NSU5PUl9SQU5HRVMgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fSEVMUEVSX0NISVBTX0FVVE8gaXMgbm90IHNldAotCi0jCi0jIEVuY29kZXJzL2RlY29kZXJzIGFuZCBvdGhlciBoZWxwZXIgY2hpcHMKLSMKLQotIwotIyBBdWRpbyBkZWNvZGVycwotIwotCi0jCi0jIFZpZGVvIGRlY29kZXJzCi0jCi0KLSMKLSMgVmlkZW8gYW5kIGF1ZGlvIGRlY29kZXJzCi0jCi0KLSMKLSMgTVBFRyB2aWRlbyBlbmNvZGVycwotIwotIyBDT05GSUdfVklERU9fQ1gyMzQxWCBpcyBub3Qgc2V0Ci0KLSMKLSMgVmlkZW8gZW5jb2RlcnMKLSMKLQotIwotIyBWaWRlbyBpbXByb3ZlbWVudCBjaGlwcwotIwotIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0NfQ0FNRVJBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX0FEQVBURVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogQ09ORklHX0ZCPXkKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKLSMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xDRF9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15Ci1DT05GSUdfQkFDS0xJR0hUX0dFTkVSSUM9eQotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQogQ09ORklHX0xPR089eQotQ09ORklHX0xPR09fTElOVVhfTU9OTz15Ci1DT05GSUdfTE9HT19MSU5VWF9WR0ExNj15Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19DT05GSUdGU19GUz1tCiAjIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19GUz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19TRUNUSU9OX01JU01BVENIPXkKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBQ0tUUkFDRT15Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci1DT05GSUdfTk9QX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1JJTkdfQlVGRkVSPXkKLUNPTkZJR19UUkFDSU5HPXkKLQotIwotIyBUcmFjZXJzCi0jCi1DT05GSUdfRlVOQ1RJT05fVFJBQ0VSPXkKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKIENPTkZJR19CT09UX1RSQUNFUj15Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKIENPTkZJR19TVEFDS19UUkFDRVI9eQotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JT19UUkFDRT15CiBDT05GSUdfREVCVUdfTEw9eQotIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCiBDT05GSUdfS0VZUz15CiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQogQ09ORklHX1NFQ1VSSVRZPXkKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9QQVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNVUklUWV9ERUZBVUxUX01NQVBfTUlOX0FERFI9MAotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fVEVTVD1tCi0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPXkKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwogQ09ORklHX0NSWVBUT19ITUFDPXkKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1NIQTE9bQotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCiBDT05GSUdfQ1JZUFRPX0FFUz1tCi0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKIENPTkZJR19DUllQVE9fREVGTEFURT15CiBDT05GSUdfQ1JZUFRPX0xaTz15Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQogQ09ORklHX0NSQzE2PXkKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0xaT19DT01QUkVTUz15Ci1DT05GSUdfTFpPX0RFQ09NUFJFU1M9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zeDFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zeDFfZGVmY29uZmlnCmluZGV4IDhhOWU3ZTYuLjIwYTg2MTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc3gxX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3N4MV9kZWZjb25maWcKQEAgLTEsMTExNyArMSwxMTAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMi1yYzEtb21hcDEKLSMgVGh1IEp1biAgNyAwNToxNjoxMCAyMDA3Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQotIyBDT05GSUdfSUtDT05GSUdfUFJPQyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQogIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKIENPTkZJR19TTE9CPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19USU5ZX1NITUVNPXkKLUNPTkZJR19CQVNFX1NNQUxMPTEKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIworQ09ORklHX1BST0ZJTElORz15CitDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCi1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9ERUFETElORT15Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCi0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQPXkKLQotIwotIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucwotIwogQ09ORklHX0FSQ0hfT01BUDE9eQotIyBDT05GSUdfQVJDSF9PTUFQMiBpcyBub3Qgc2V0Ci0KLSMKLSMgT01BUCBGZWF0dXJlIFNlbGVjdGlvbnMKLSMKLSMgQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX0JPT1RfVEFHPXkKLSMgQ09ORklHX09NQVBfQk9PVF9SRUFTT04gaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9DT01QT05FTlRfVkVSU0lPTiBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9HUElPX1NXSVRDSD15Ci1DT05GSUdfT01BUF9NVVg9eQotIyBDT05GSUdfT01BUF9NVVhfREVCVUcgaXMgbm90IHNldAotQ09ORklHX09NQVBfTVVYX1dBUk5JTkdTPXkKLUNPTkZJR19PTUFQX01DQlNQPXkKLUNPTkZJR19PTUFQX01NVV9GV0s9eQogQ09ORklHX09NQVBfTUJPWF9GV0s9eQotQ09ORklHX09NQVBfTVBVX1RJTUVSPXkKLSMgQ09ORklHX09NQVBfMzJLX1RJTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDEgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMiBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMz15Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX0xDRCBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9TRVJJQUxfV0FLRT15Ci1DT05GSUdfT01BUF9EU1A9eQotIyBDT05GSUdfT01BUF9EU1BfTUJDTURfVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0RTUF9UQVNLX01VTFRJT1BFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0RTUF9GQkVYUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT01BUCBDb3JlIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfT01BUDczMCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9PTUFQMTVYWD15Ci0jIENPTkZJR19BUkNIX09NQVAxNlhYIGlzIG5vdCBzZXQKLQotIwotIyBPTUFQIEJvYXJkIFR5cGUKLSMKLSMgQ09ORklHX01BQ0hfT01BUF9JTk5PVkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9WT0lDRUJMVUUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQX1BBTE1URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfUEFMTVo3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfUEFMTVRUIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX1NYMT15Ci0jIENPTkZJR19NQUNIX0FNU19ERUxUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfR0VORVJJQyBpcyBub3Qgc2V0Ci0KLSMKLSMgT01BUCBDUFUgU3BlZWQKLSMKLSMgQ09ORklHX09NQVBfQ0xPQ0tTX1NFVF9CWV9CT09UTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR19PTUFQX0FSTV8xNjhNSFo9eQotIyBDT05GSUdfT01BUF9BUk1fMTUwTUhaIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfQVJNXzEyME1IWiBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUFQX0FSTV82ME1IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0FSTV8zME1IWiBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTI1VD15Ci1DT05GSUdfQ1BVXzMydjRUPXkKLUNPTkZJR19DUFVfQUJSVF9FVjRUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVjRXVD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMDAKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0iIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCi0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX01JU0M9eQotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwogQ09ORklHX0NPTk5FQ1RPUj15CiAjIENPTkZJR19QUk9DX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QTlBBQ1BJIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD1tCi0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPW0KIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0yCi1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAogQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01JST15Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX09NQVA9eQotIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTMKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTMKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLQotIwotIyBJUE1JCi0jCi0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX09NQVA9eQotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVExWMzIwQUlDMjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cwotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotIyBDT05GSUdfQkxJTksgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRldmljZXMKLSMKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZHJpdmVycwotIwotCi0jCi0jIExFRCBUcmlnZ2VycwotIwotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9ERUZFUlJFRF9JTz15Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogQ09ORklHX0ZCX09NQVA9eQotIyBDT05GSUdfRkJfT01BUF9MQ0RDX0VYVEVSTkFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX09NQVBfTENEX01JUElEIGlzIG5vdCBzZXQKIENPTkZJR19GQl9PTUFQX0JPT1RMT0FERVJfSU5JVD15Ci1DT05GSUdfRkJfT01BUF9DT05TSVNURU5UX0RNQV9TSVpFPTIKLSMgQ09ORklHX0ZCX09NQVBfRE1BX1RVTkUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19GT05UUz15Ci0jIENPTkZJR19GT05UXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzh4MTYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVF9NSU5JXzR4Nj15Ci0jIENPTkZJR19GT05UX0NMRUFOXzR4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX0NMRUFOXzV4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKIENPTkZJR19MT0dPPXkKICMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0CiAjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKLUNPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQotCi0jCi0jIFNvdW5kCi0jCiBDT05GSUdfU09VTkQ9eQotCi0jCi0jIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQotIwogQ09ORklHX1NORD15Ci1DT05GSUdfU05EX1RJTUVSPXkKLUNPTkZJR19TTkRfUENNPXkKLSMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAotQ09ORklHX1NORF9PU1NFTVVMPXkKIENPTkZJR19TTkRfTUlYRVJfT1NTPXkKIENPTkZJR19TTkRfUENNX09TUz15Ci1DT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15Ci0jIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgR2VuZXJpYyBkZXZpY2VzCi0jCi0jIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAotCi0jCi0jIEFMU0EgQVJNIGRldmljZXMKLSMKLSMgQ09ORklHX1NORF9PTUFQX0FJQzIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PTUFQX1RTQzIxMDEgaXMgbm90IHNldAotQ09ORklHX1NORF9TWDE9eQotIyBDT05GSUdfU05EX09NQVBfVFNDMjEwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT01BUDI0WFhfRUFDIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gb24gQ2hpcCBhdWRpbyBzdXBwb3J0Ci0jCi0jIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKLQotIwotIyBPcGVuIFNvdW5kIFN5c3RlbQotIwotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotCi0jCi0jIEhJRCBEZXZpY2VzCi0jCi1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwogQ09ORklHX1VTQl9HQURHRVQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX09NQVA9eQotQ09ORklHX1VTQl9PTUFQPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VUSD15Ci1DT05GSUdfVVNCX0VUSF9STkRJUz15Ci0jIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRVRIPW0KIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLQotIwotIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKIENPTkZJR19NTUNfT01BUD15Ci0KLSMKLSMgUmVhbCBUaW1lIENsb2NrCi0jCi1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCiBDT05GSUdfUlRDX0RSVl9PTUFQPXkKLQotIwotIyBDQlVTIHN1cHBvcnQKLSMKLSMgQ09ORklHX0NCVVMgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQorQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKIENPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT04NjYKIENPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9ImtvaTgtciIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwogQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQ09ERVBBR0VfODY2PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAogQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPXkKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfNT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0tPSThfUj15Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfVVRGOD15Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi1DT05GSUdfUFJPRklMSU5HPXkKLUNPTkZJR19PUFJPRklMRT15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19QUkVFTVBUPXkKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15CiBDT05GSUdfQ1JDX0NDSVRUPXkKIENPTkZJR19DUkMxNj15Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKIENPTkZJR19MSUJDUkMzMkM9eQotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3RjdF9oYW1tZXJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy90Y3RfaGFtbWVyX2RlZmNvbmZpZwppbmRleCBkY2NmMTRiLi5lODljYTE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3RjdF9oYW1tZXJfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvdGN0X2hhbW1lcl9kZWZjb25maWcKQEAgLTEsODgzICsxLDcwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM3LWhhbW1lcgotIyBUaHUgTWFyIDI3IDE2OjM5OjQ4IDIwMDgKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotIyBDT05GSUdfR0VORVJJQ19USU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFMgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfTk9fSU9QT1JUPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKICMgQ09ORklHX0JVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15CiAjIENPTkZJR19TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKIENPTkZJR19TTE9CPXkKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX1RJTllfU0hNRU09eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUzNDMjQxMD15Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNN1gwMEEgaXMgbm90IHNldAotQ09ORklHX1BMQVRfUzNDMjRYWD15Ci0jIENPTkZJR19TM0MyNDEwX0RNQSBpcyBub3Qgc2V0Ci1DT05GSUdfUExBVF9TM0M9eQotQ09ORklHX0NQVV9MTFNFUklBTF9TM0MyNDEwX09OTFk9eQotQ09ORklHX0NQVV9MTFNFUklBTF9TM0MyNDEwPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLSMgQ09ORklHX1MzQ19CT09UX0VSUk9SX1JFU0VUIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCi1DT05GSUdfUzNDX0xPV0xFVkVMX1VBUlRfUE9SVD0wCi0KLSMKLSMgUzNDMjQwMCBNYWNoaW5lcwotIwotQ09ORklHX0NQVV9TM0MyNDEwPXkKLUNPTkZJR19TM0MyNDEwX0dQSU89eQotQ09ORklHX1MzQzI0MTBfQ0xPQ0s9eQotCi0jCi0jIFMzQzI0MTAgTWFjaGluZXMKLSMKLSMgQ09ORklHX0FSQ0hfU01ESzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IMTk0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX04zMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0JBU1QgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQU1MX001OTAwIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX1RDVF9IQU1NRVI9eQotIyBDT05GSUdfTUFDSF9WUjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9RVDI0MTAgaXMgbm90IHNldAotCi0jCi0jIFMzQzI0MTIgTWFjaGluZXMKLSMKLSMgQ09ORklHX01BQ0hfU01ESzI0MTMgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9TTURLMjQxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1ZTVE1TIGlzIG5vdCBzZXQKLQotIwotIyBTM0MyNDQwIE1hY2hpbmVzCi0jCi0jIENPTkZJR19NQUNIX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09TSVJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1JYMzcxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0NDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9ORVhDT0RFUl8yNDQwIGlzIG5vdCBzZXQKLQotIwotIyBTM0MyNDQyIE1hY2hpbmVzCi0jCi0KLSMKLSMgUzNDMjQ0MyBNYWNoaW5lcwotIwotIyBDT05GSUdfTUFDSF9TTURLMjQ0MyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTIwVD15Ci1DT05GSUdfQ1BVXzMydjRUPXkKLUNPTkZJR19DUFVfQUJSVF9FVjRUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVjRXVD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yMDAKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJtZW09NjRNIHJvb3Q9L2Rldi9yYW0wIGluaXQ9L2xpbnV4cmMgcnciCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15CiAjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKLUNPTkZJR19GV19MT0FERVI9eQotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQogQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQotQ09ORklHX01URF9DRklfTk9TV0FQPXkKLSMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDAKLUNPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MgotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEwMjQwCi0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQogIyBDT05GSUdfVlRfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfUzNDMjQxMD15Ci1DT05GSUdfU0VSSUFMX1MzQzI0MTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQj15CiBDT05GSUdfVVNCX0RFQlVHPXkKLSMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwotIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9HQURHRVQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMD15Ci1DT05GSUdfVVNCX1MzQzI0MTA9eQotIyBDT05GSUdfVVNCX1MzQzI0MTBfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfRVRIPXkKLUNPTkZJR19VU0JfRVRIX1JORElTPXkKLSMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKK0NPTkZJR19VU0JfRVRIPW0KIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKICMgQ09ORklHX1BST0NfU1lTQ1RMIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGUz15Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRVJST1JTPXkKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1MzQ19VQVJUPTAKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0NSQ19DQ0lUVD15Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3RyaXplcHM0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvdHJpemVwczRfZGVmY29uZmlnCmluZGV4IDFlOGY1YTIuLjM3ZjQ4MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvdHJpemVwczRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvdHJpemVwczRfZGVmY29uZmlnCkBAIC0xLDQwOSArMSw1MyBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIxCi0jIE1vbiBBcHIgMzAgMjE6MjM6MjAgMjAwNwotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19BUkNIX01URF9YSVA9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCi1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCRD15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19MU0Y9eQotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9QWEE9eQotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgSW50ZWwgUFhBMnh4IEltcGxlbWVudGF0aW9ucwotIwotIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NQUlOU1RPTkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfSURQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKIENPTkZJR19UUklaRVBTX1BYQT15CiBDT05GSUdfTUFDSF9UUklaRVBTND15Ci1DT05GSUdfTUFDSF9UUklaRVBTNF9DT05YUz15Ci0jIENPTkZJR19NQUNIX1RSSVpFUFM0X0FOWSBpcyBub3Qgc2V0Ci1DT05GSUdfUFhBMjd4PXkKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9YU0NBTEU9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci1DT05GSUdfSVdNTVhUPXkKLUNPTkZJR19YU0NBTEVfUE1VPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKIENPTkZJR19QQ0NBUkQ9eQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUE9eQogIyBDT05GSUdfUENNQ0lBX0xPQURfQ0lTIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUFfSU9DVEw9eQotCi0jCi0jIFBDLWNhcmQgYnJpZGdlcwotIwogQ09ORklHX1BDTUNJQV9QWEEyWFg9eQotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwogQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19MRURTPXkKLUNPTkZJR19MRURTX1RJTUVSPXkKLUNPTkZJR19MRURTX0NQVT15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotQ09ORklHX1pCT09UX1JPTV9URVhUPTAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTAKIENPTkZJR19DTURMSU5FPSJyb290PWZlMDEgY29uc29sZT10dHlTMCwzODQwMG44IGxvZ2xldmVsPTUiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQogQ09ORklHX0ZQRV9OV0ZQRV9YUD15Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCiBDT05GSUdfUE09eQotIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAotIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15CiBDT05GSUdfWEZSTV9VU0VSPW0KLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX05FVF9LRVk9eQotIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLQotIwotIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwogQ09ORklHX0lQX05GX1FVRVVFPW0KLSMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKIENPTkZJR19WTEFOXzgwMjFRPW0KLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiBDT05GSUdfSVJEQT1tCi0KLSMKLSMgSXJEQSBwcm90b2NvbHMKLSMKIENPTkZJR19JUkxBTj1tCiBDT05GSUdfSVJORVQ9bQogQ09ORklHX0lSQ09NTT1tCiBDT05GSUdfSVJEQV9VTFRSQT15Ci0KLSMKLSMgSXJEQSBvcHRpb25zCi0jCiBDT05GSUdfSVJEQV9DQUNIRV9MQVNUX0xTQVA9eQogQ09ORklHX0lSREFfRkFTVF9SUj15Ci0jIENPTkZJR19JUkRBX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbmZyYXJlZC1wb3J0IGRldmljZSBkcml2ZXJzCi0jCi0KLSMKLSMgU0lSIGRldmljZSBkcml2ZXJzCi0jCiBDT05GSUdfSVJUVFlfU0lSPW0KLQotIwotIyBEb25nbGUgc3VwcG9ydAotIwotIyBDT05GSUdfRE9OR0xFIGlzIG5vdCBzZXQKLQotIwotIyBPbGQgU0lSIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19JUlBPUlRfU0lSIGlzIG5vdCBzZXQKLQotIwotIyBPbGQgU2VyaWFsIGRvbmdsZSBzdXBwb3J0Ci0jCi0KLSMKLSMgRklSIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUdNQVRFTF9GSVIgaXMgbm90IHNldAotIyBDT05GSUdfUFhBX0ZJQ1AgaXMgbm90IHNldAotIyBDT05GSUdfTUNTX0ZJUiBpcyBub3Qgc2V0CiBDT05GSUdfQlQ9bQogQ09ORklHX0JUX0wyQ0FQPW0KIENPTkZJR19CVF9TQ089bQpAQCAtNDEzLDM3MCArNTcsNjMgQEAKIENPTkZJR19CVF9CTkVQX01DX0ZJTFRFUj15CiBDT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVI9eQogQ09ORklHX0JUX0hJRFA9bQotCi0jCi0jIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfQlRfSENJVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSVVBUlQgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQkNNMjAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCUEExMFggaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQkZVU0IgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJRFRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCVDNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJMVUVDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJUVUFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lWSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwogQ09ORklHX0NGRzgwMjExPXkKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQotQ09ORklHX0lFRUU4MDIxMT15Ci0jIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9eQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfVEtJUD1tCi1DT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQotIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwogQ09ORklHX0NPTk5FQ1RPUj15Ci1DT05GSUdfUFJPQ19FVkVOVFM9eQogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQotQ09ORklHX01URF9QQVJUSVRJT05TPXkKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15Ci1DT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQ9eQogQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZPXkKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfSkVERUNQUk9CRT15Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15CiBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15Ci0jIENPTkZJR19NVERfQ0ZJX05PU1dBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVA9eQogQ09ORklHX01URF9DRklfR0VPTUVUUlk9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CiBDT05GSUdfTVREX1BIWVNNQVA9eQotQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDAKLUNPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MgotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9JTVBBNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0hBUlBfU0wgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQkxPQ0syTVREPXkKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKIENPTkZJR19NVERfRE9DMjAwMD15CiBDT05GSUdfTVREX0RPQzIwMDE9eQogQ09ORklHX01URF9ET0MyMDAxUExVUz15Ci1DT05GSUdfTVREX0RPQ1BST0JFPXkKLUNPTkZJR19NVERfRE9DRUNDPXkKIENPTkZJR19NVERfRE9DUFJPQkVfQURWQU5DRUQ9eQogQ09ORklHX01URF9ET0NQUk9CRV9BRERSRVNTPTB4NDAwMDAwMAogQ09ORklHX01URF9ET0NQUk9CRV9ISUdIPXkKLSMgQ09ORklHX01URF9ET0NQUk9CRV81NUFBIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORD15Ci0jIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0gxOTAwIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQogQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVA9eQogQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVBfUFJPQkVfQURWQU5DRUQ9eQogQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVBfUFJPQkVfQUREUkVTUz0weDQwMDAwMDAKIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQX1BST0JFX0hJR0g9eQogQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVBfQkJUV1JJVEU9eQotIyBDT05GSUdfTVREX05BTkRfU0hBUlBTTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT05FTkFORD15Ci0jIENPTkZJR19NVERfT05FTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkRfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORF9PVFAgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQogQ09ORklHX0JMS19ERVZfTkJEPXkKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD04Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCiBDT05GSUdfSURFPXkKLUNPTkZJR19JREVfTUFYX0hXSUZTPTQKLUNPTkZJR19CTEtfREVWX0lERT15Ci0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCi0jCi0jIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQotQ09ORklHX0lERURJU0tfTVVMVElfTU9ERT15CiBDT05GSUdfQkxLX0RFVl9JREVDUz1tCi0jIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLUNPTkZJR19JREVfR0VORVJJQz15Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKIENPTkZJR19TQ1NJX01VTFRJX0xVTj15Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRVNQX0NPUkUgaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBTQ1NJIGFkYXB0ZXIgc3VwcG9ydAotIwotIyBDT05GSUdfUENNQ0lBX0FIQTE1MlggaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX0ZET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX05JTkpBX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1FMT0dJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfU1lNNTNDNTAwIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKLSMKIENPTkZJR19BVEE9bQotIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIENPTkZJR19QQVRBX1BDTUNJQT1tCiBDT05GSUdfUEFUQV9QTEFURk9STT1tCi0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogQ09ORklHX0RNOTAwMD15Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTl84MDIxMT15Ci0jIENPTkZJR19QQ01DSUFfUkFZQ1MgaXMgbm90IHNldAotQ09ORklHX0hFUk1FUz15Ci0jIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0Ci1DT05GSUdfUENNQ0lBX0hFUk1FUz15Ci1DT05GSUdfUENNQ0lBX1NQRUNUUlVNPXkKLSMgQ09ORklHX0FJUk9fQ1MgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1dMMzUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKIENPTkZJR19IT1NUQVA9eQogQ09ORklHX0hPU1RBUF9GSVJNV0FSRT15CiBDT05GSUdfSE9TVEFQX0ZJUk1XQVJFX05WUkFNPXkKIENPTkZJR19IT1NUQVBfQ1M9eQotIyBDT05GSUdfWkQxMjExUlcgaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19IRVJNRVM9eQorQ09ORklHX1BDTUNJQV9IRVJNRVM9eQorQ09ORklHX1BDTUNJQV9TUEVDVFJVTT15CiBDT05GSUdfUFBQPW0KIENPTkZJR19QUFBfTVVMVElMSU5LPXkKIENPTkZJR19QUFBfRklMVEVSPXkKQEAgLTc4NSw5MjAgKzEyMiwxMDUgQEAKIENPTkZJR19QUFBfREVGTEFURT1tCiBDT05GSUdfUFBQX0JTRENPTVA9bQogQ09ORklHX1BQUF9NUFBFPW0KLSMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9bQotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD02NDAKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT00ODAKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfVFNERVY9eQotQ09ORklHX0lOUFVUX1RTREVWX1NDUkVFTl9YPTY0MAotQ09ORklHX0lOUFVUX1RTREVWX1NDUkVFTl9ZPTQ4MAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKIENPTkZJR19LRVlCT0FSRF9BVEtCRD1tCi0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFPXkKICMgQ09ORklHX01PVVNFX1BTMiBpcyBub3Qgc2V0CiBDT05GSUdfTU9VU0VfU0VSSUFMPW0KLSMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0Ci1DT05GSUdfVE9VQ0hTQ1JFRU5fVUNCMTQwMD15CiBDT05GSUdfSU5QVVRfTUlTQz15CiBDT05GSUdfSU5QVVRfVUlOUFVUPW0KLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15CiBDT05GSUdfU0VSSU9fTElCUFMyPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKIENPTkZJR19TRVJJQUxfUFhBPXkKIENPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIwotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU0ExMTAwX1dBVENIRE9HPXkKLQotIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLSMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKIENPTkZJR19JMkNfUFhBPXkKIENPTkZJR19JMkNfUFhBX1NMQVZFPXkKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCi0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCi1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotCi0jCi0jIExFRCBkZXZpY2VzCi0jCi1DT05GSUdfTkVXX0xFRFM9eQotIyBDT05GSUdfTEVEU19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLUNPTkZJR19MRURTX1RSSUdHRVJTPXkKLUNPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQotIyBDT05GSUdfTEVEU19UUklHR0VSX0lERV9ESVNLIGlzIG5vdCBzZXQKLUNPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLUNPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQotQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQotQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQorQ09ORklHX1dBVENIRE9HPXkKK0NPTkZJR19TQTExMDBfV0FUQ0hET0c9eQogQ09ORklHX0ZCPXkKIENPTkZJR19GSVJNV0FSRV9FRElEPXkKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9QWEE9eQotIyBDT05GSUdfRkJfUFhBX1BBUkFNRVRFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIworQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CitDT05GSUdfTENEX0NMQVNTX0RFVklDRT15CitDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15CiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTj15CiBDT05GSUdfRk9OVFM9eQogQ09ORklHX0ZPTlRfOHg4PXkKIENPTkZJR19GT05UXzh4MTY9eQotIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAotCi0jCi0jIExvZ28gY29uZmlndXJhdGlvbgotIwogQ09ORklHX0xPR089eQotQ09ORklHX0xPR09fTElOVVhfTU9OTz15Ci1DT05GSUdfTE9HT19MSU5VWF9WR0ExNj15Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLQotIwotIyBTb3VuZAotIwogQ09ORklHX1NPVU5EPXkKLQotIwotIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKLSMKIENPTkZJR19TTkQ9eQotQ09ORklHX1NORF9USU1FUj15Ci1DT05GSUdfU05EX1BDTT15Ci1DT05GSUdfU05EX0hXREVQPW0KLUNPTkZJR19TTkRfUkFXTUlEST1tCiBDT05GSUdfU05EX1NFUVVFTkNFUj15Ci0jIENPTkZJR19TTkRfU0VRX0RVTU1ZIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfT1NTRU1VTD15CiBDT05GSUdfU05EX01JWEVSX09TUz15CiBDT05GSUdfU05EX1BDTV9PU1M9eQotQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQotIyBDT05GSUdfU05EX1NFUVVFTkNFUl9PU1MgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQogQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USz15CiBDT05GSUdfU05EX0RFQlVHPXkKLUNPTkZJR19TTkRfREVCVUdfREVURUNUPXkKLSMgQ09ORklHX1NORF9QQ01fWFJVTl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgR2VuZXJpYyBkZXZpY2VzCi0jCi1DT05GSUdfU05EX0FDOTdfQ09ERUM9eQotIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WSVJNSURJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKLQotIwotIyBBTFNBIEFSTSBkZXZpY2VzCi0jCi1DT05GSUdfU05EX1BYQTJYWF9QQ009eQogQ09ORklHX1NORF9QWEEyWFhfQUM5Nz15Ci0KLSMKLSMgVVNCIGRldmljZXMKLSMKIENPTkZJR19TTkRfVVNCX0FVRElPPW0KLQotIwotIyBQQ01DSUEgZGV2aWNlcwotIwotIyBDT05GSUdfU05EX1ZYUE9DS0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9QREFVRElPQ0YgaXMgbm90IHNldAotCi0jCi0jIFNvQyBhdWRpbyBzdXBwb3J0Ci0jCi0jIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKLQotIwotIyBPcGVuIFNvdW5kIFN5c3RlbQotIwotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotQ09ORklHX0FDOTdfQlVTPXkKLQotIwotIyBISUQgRGV2aWNlcwotIwotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCiAjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKIENPTkZJR19VU0JfU1RPUkFHRT1tCi0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotIyBDT05GSUdfVVNCX0FJUFRFSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0FDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1RDTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVRfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKIENPTkZJR19VU0JfU0VSSUFMPW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0FJUkNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQUlSUFJJTUUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfV0hJVEVIRUFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0VNUEVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU8gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9GVU5TT0ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9JUEFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUX1RJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfR0FSTUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSVBXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9QREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0xTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tPQklMX1NDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX01DVF9VMjMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzcyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX01PUzc4NDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9IUDRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU0FGRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1NJRVJSQVdJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfVEkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9YSVJDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9PUFRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9PTU5JTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERTTCBtb2RlbSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCiBDT05GSUdfVVNCX0dBREdFVD1tCi0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0Q9eQotQ09ORklHX1VTQl9EVU1NWV9IQ0Q9bQotQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKLSMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwogQ09ORklHX01NQz15Ci0jIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX01NQ19CTE9DSz15CiBDT05GSUdfTU1DX1BYQT15Ci0KLSMKLSMgUmVhbCBUaW1lIENsb2NrCi0jCi1DT05GSUdfUlRDX0xJQj15CitDT05GSUdfTkVXX0xFRFM9eQogQ09ORklHX1JUQ19DTEFTUz15CiAjIENPTkZJR19SVENfSENUT1NZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotCi0jCi0jIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX1BDRjg1ODM9bQotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX1NBMTEwMD15Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUMl9GU19YQVRUUj15CiBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQogQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9eQotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9bQogQ09ORklHX01TRE9TX0ZTPW0KIENPTkZJR19WRkFUX0ZTPW0KLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKIENPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMTUiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKLUNPTkZJR19KRkZTMl9aTElCPXkKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15Ci0jIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotQ09ORklHX05GU0Q9eQotQ09ORklHX05GU0RfVjM9eQotIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAotQ09ORklHX05GU0RfVjQ9eQotQ09ORklHX05GU0RfVENQPXkKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19FWFBPUlRGUz15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CitDT05GSUdfTkZTRD15CitDT05GSUdfTkZTRF9WND15CiBDT05GSUdfU01CX0ZTPW0KLSMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CiBDT05GSUdfQ0lGUz1tCi0jIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CiBDT05GSUdfTERNX1BBUlRJVElPTj15Ci0jIENPTkZJR19MRE1fREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xNSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAogQ09ORklHX05MU19BU0NJST15CiBDT05GSUdfTkxTX0lTTzg4NTlfMT1tCi0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xNT1tCi0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogQ09ORklHX05MU19VVEY4PW0KLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKIENPTkZJR19ERUJVR19VU0VSPXkKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCiBDT05GSUdfS0VZUz15CiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQogQ09ORklHX1NFQ1VSSVRZPXkKLSMgQ09ORklHX1NFQ1VSSVRZX05FVFdPUksgaXMgbm90IHNldAotQ09ORklHX1NFQ1VSSVRZX0NBUEFCSUxJVElFUz15Ci0jIENPTkZJR19TRUNVUklUWV9ST09UUExVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLUNPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1BDQkM9bQogQ09ORklHX0NSWVBUT19TSEEyNTY9bQogQ09ORklHX0NSWVBUT19TSEE1MTI9bQotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fRUNCPXkKLUNPTkZJR19DUllQVE9fQ0JDPXkKLUNPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQUVTPW0KLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FSQzQ9eQotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVGTEFURT1tCi1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLUNPTkZJR19DUllQVE9fQ1JDMzJDPXkKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15CiBDT05GSUdfQ1JDX0NDSVRUPXkKIENPTkZJR19DUkMxNj15Ci1DT05GSUdfQ1JDMzI9eQogQ09ORklHX0xJQkNSQzMyQz15Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1JFRURfU09MT01PTj15Ci1DT05GSUdfUkVFRF9TT0xPTU9OX0RFQzE2PXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvdTMwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3UzMDBfZGVmY29uZmlnCmluZGV4IDkxNTUxOTYuLjQ2ZTVlMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvdTMwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy91MzAwX2RlZmNvbmZpZwpAQCAtMSwxMjI1ICsxLDEwNyBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgotIyBXZWQgSmFuICA2IDAwOjAxOjM2IDIwMTAKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfSEFWRV9UQ009eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQogIyBDT05GSUdfQUlPIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9DTEs9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi1DT05GSUdfTU1VPXkKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRE9WRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1M1UEMxWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfVTMwMD15Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1U4NTAwIGlzIG5vdCBzZXQKLQotIwotIyBTVC1Fcmljc3NvbiBBQiBVMzAwL1UzMzAvVTMzNS9VMzY1IFBsYXRmb3JtCi0jCi0KLSMKLSMgU1QtRXJpY3Nzb24gTW9iaWxlIFBsYXRmb3JtIFByb2R1Y3RzCi0jCiBDT05GSUdfTUFDSF9VMzAwPXkKLQotIwotIyBTVC1Fcmljc3NvbiBVMzAwL1UzMzAvVTMzNS9VMzY1IEZlYXR1cmUgU2VsZWN0aW9ucwotIwotIyBDT05GSUdfTUFDSF9VMzAwX0JTMlggaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9VMzAwX0JTMzMwIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX1UzMDBfQlMzMzU9eQotIyBDT05GSUdfTUFDSF9VMzAwX0JTMzY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVTMwMF9TSU5HTEVfUkFNIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX1UzMDBfRFVBTF9SQU09eQogQ09ORklHX1UzMDBfREVCVUc9eQotIyBDT05GSUdfTUFDSF9VMzAwX1NFTUlfSVNfU0hBUkVEIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX1UzMDBfU1BJRFVNTVk9eQotCi0jCi0jIEFsbCB0aGUgc2V0dGluZ3MgYmVsb3cgbXVzdCBtYXRjaCB0aGUgYm9vdGxvYWRlcidzIHNldHRpbmdzCi0jCi0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTI2VD15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKLUNPTkZJR19DUFVfUEFCUlRfTEVHQUNZPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXQj15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQotQ09ORklHX0FSTV9WSUM9eQotQ09ORklHX0FSTV9WSUNfTlI9MgotQ09ORklHX0NPTU1PTl9DTEtERVY9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi1DT05GSUdfQVJNX0FNQkE9eQotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotQ09ORklHX1ZNU1BMSVRfM0c9eQotIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCi0jIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTk5OTk5OQotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0jIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9yYW0wIHJ3IHJvb3Rmc3R5cGU9cm9vdGZzIGNvbnNvbGU9dHR5QU1BMCwxMTUyMDBuOCBscGo9NTE1MDcyIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKIENPTkZJR19DUFVfSURMRT15Ci1DT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15Ci1DT05GSUdfQ1BVX0lETEVfR09WX01FTlU9eQotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwogQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVU1BFTkQgaXMgbm90IHNldAotIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15CiAjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfRUNDX1NNQz15Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0dQSU8gaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotCi0jCi0jIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKLSMKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJX0RBQzc1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfSVdNQzMyMDBUT1AgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLSMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xNODMyMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9BTUJBX1BMMDEwIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMT15CiBDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTFfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTE2Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKLSMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfU1RVMzAwPXkKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU1BJPXkKLSMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKLUNPTkZJR19TUElfUEwwMjI9eQotIyBDT05GSUdfU1BJX1hJTElOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfREVTSUdOV0FSRSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFByb3RvY29sIE1hc3RlcnMKLSMKLSMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAogQ09ORklHX1BPV0VSX1NVUFBMWT15Ci0jIENPTkZJR19QT1dFUl9TVVBQTFlfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUERBX1BPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBVFRFUllfRFMyNzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBVFRFUllfRFMyNzgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBVFRFUllfQlEyN3gwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVRURVJZX01BWDE3MDQwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfQ09IOTAxMzI3X1dBVENIRE9HPXkKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKLUNPTkZJR19BQjMxMDBfQ09SRT15Ci1DT05GSUdfQUIzMTAwX09UUD15Ci0jIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAotIyBDT05GSUdfQUI0NTAwX0NPUkUgaXMgbm90IHNldAogQ09ORklHX1JFR1VMQVRPUj15Ci0jIENPTkZJR19SRUdVTEFUT1JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfTUFYMTU4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfTUFYODY2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfTFAzOTcxIGlzIG5vdCBzZXQKLUNPTkZJR19SRUdVTEFUT1JfQUIzMTAwPXkKLSMgQ09ORklHX1JFR1VMQVRPUl9UUFM2NTAyMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwN1ggaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogQ09ORklHX0ZCPXkKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfQVJNQ0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiAjIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLUNPTkZJR19CQUNLTElHSFRfR0VORVJJQz15Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkQ9eQotIyBDT05GSUdfU09VTkRfT1NTX0NPUkUgaXMgbm90IHNldAogQ09ORklHX1NORD15Ci1DT05GSUdfU05EX1RJTUVSPXkKLUNPTkZJR19TTkRfUENNPXkKLUNPTkZJR19TTkRfSkFDSz15Ci0jIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRFJJVkVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9TUEkgaXMgbm90IHNldAogQ09ORklHX1NORF9TT0M9eQotQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9eQotIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQogQ09ORklHX01NQ19ERUJVRz15Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKLSMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKIENPTkZJR19NTUNfQVJNTU1DST15Ci0jIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKLQotIwotIyBMRUQgZHJpdmVycwotIwotIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfTFQzNTkzIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKIENPTkZJR19MRURTX1RSSUdHRVJTPXkKLSMgQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUPXkKLSMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKLQotIwotIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCi0jCi0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQogIyBDT05GSUdfUlRDX0hDVE9TWVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfRFJWX0FCMzEwMD15Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX1BMMDMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUEwwMzEgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfQ09IOTAxMzMxPXkKIENPTkZJR19ETUFERVZJQ0VTPXkKLQotIwotIyBETUEgRGV2aWNlcwotIwogQ09ORklHX0NPSDkwMTMxOD15Ci1DT05GSUdfRE1BX0VOR0lORT15Ci0KLSMKLSMgRE1BIENsaWVudHMKLSMKLSMgQ09ORklHX05FVF9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfQVNZTkNfVFhfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlVTRV9GUz15Ci0jIENPTkZJR19DVVNFIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwogQ09ORklHX1BSSU5US19USU1FPXkKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAotIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19USU1FUl9TVEFUUz15Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fVU5XSU5EPXkKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DX0VUTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0FMTE9DQVRPUj15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy91ODUwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3U4NTAwX2RlZmNvbmZpZwppbmRleCA3MjdhZmY5Li5iZTgwZjAzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3U4NTAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3U4NTAwX2RlZmNvbmZpZwpAQCAtMSw2NzkgKzEsNTggQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzgKLSMgTW9uIE5vdiAzMCAxMToxMToyOSAyMDA5Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfR0VORVJJQ19MT0NLQlJFQUs9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE3Ci1DT05GSUdfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX1JUX0dST1VQX1NDSEVEPXkKLUNPTkZJR19VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci1DT05GSUdfUkRfQlpJUDI9eQotQ09ORklHX1JEX0xaTUE9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfU1RPUF9NQUNISU5FPXkKLUNPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkRBRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9VODUwMD15Ci1DT05GSUdfUExBVF9OT01BRElLPXkKLUNPTkZJR19IQVNfTVRVPXkKLQotIwotIyBTVC1Fcmljc3NvbiBwbGF0Zm9ybSB0eXBlCi0jCi0KLSMKLSMgU1QtRXJpY3Nzb24gTXVsdGljb3JlIE1vYmlsZSBQbGF0Zm9ybXMKLSMKLUNPTkZJR19NQUNIX1U4NTAwX01PUD15Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfMzJ2Nks9eQotQ09ORklHX0NQVV9WNz15Ci1DT05GSUdfQ1BVXzMydjc9eQotQ09ORklHX0NQVV9BQlJUX0VWNz15Ci1DT05GSUdfQ1BVX1BBQlJUX1Y3PXkKLUNPTkZJR19DUFVfQ0FDSEVfVjc9eQotQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKLUNPTkZJR19DUFVfQ09QWV9WNj15Ci1DT05GSUdfQ1BVX1RMQl9WNz15Ci1DT05GSUdfQ1BVX0hBU19BU0lEPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQVJNX1RIVU1CRUUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFTX1RMU19SRUc9eQotQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD01Ci0jIENPTkZJR19BUk1fRVJSQVRBXzQzMDk3MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUk1fRVJSQVRBXzQ1ODY5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUk1fRVJSQVRBXzQ2MDA3NSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJNX0dJQz15Ci1DT05GSUdfQ09NTU9OX0NMS0RFVj15Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLUNPTkZJR19BUk1fQU1CQT15Ci0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKIENPTkZJR19TTVA9eQotQ09ORklHX0hBVkVfQVJNX1NDVT15Ci1DT05GSUdfSEFWRV9BUk1fVFdEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAogQ09ORklHX05SX0NQVVM9MgotIyBDT05GSUdfSE9UUExVR19DUFUgaXMgbm90IHNldAotQ09ORklHX0xPQ0FMX1RJTUVSUz15Ci0jIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0haPTEwMAotIyBDT05GSUdfVEhVTUIyX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLSMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLSMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotQ09ORklHX1pCT09UX1JPTV9URVhUPTAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTAKIENPTkZJR19DTURMSU5FPSJyb290PS9kZXYvcmFtMCBjb25zb2xlPXR0eUFNQTIsMTE1MjAwbjgiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwotIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotIyBDT05GSUdfRlBFX05XRlBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKIENPTkZJR19WRlA9eQotQ09ORklHX1ZGUHYzPXkKIENPTkZJR19ORU9OPXkKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19ORVQgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT02NTUzNgotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQogQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTAgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9BTUJBX1BMMDExPXkKIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAogQ09ORklHX1NQST15Ci0jIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NQSV9NQVNURVI9eQotCi0jCi0jIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfU1BJX1BMMDIyPXkKLQotIwotIyBTUEkgUHJvdG9jb2wgTWFzdGVycwotIwotIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAotIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUMl9GU19YQVRUUj15CiBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQogQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0FDTD15Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfQ09ORklHRlNfRlM9bQogIyBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAogIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fVU5XSU5EPXkKIENPTkZJR19ERUJVR19VU0VSPXkKIENPTkZJR19ERUJVR19FUlJPUlM9eQotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQ19UMTBESUY9bQotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfREVDT01QUkVTU19CWklQMj15Ci1DT05GSUdfREVDT01QUkVTU19MWk1BPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy91c2ItYTkyNjBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy91c2ItYTkyNjBfZGVmY29uZmlnCmluZGV4IDg3YjcwMGUuLjJlMzlmMzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvdXNiLWE5MjYwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3VzYi1hOTI2MF9kZWZjb25maWcKQEAgLTEsMTE0MSArMSwxMDYgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNAotIyBUdWUgQXByIDE1IDExOjM5OjM1IDIwMDgKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9BVDkxPXkKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBBdG1lbCBBVDkxIFN5c3RlbS1vbi1DaGlwCi0jCi0jIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjA9eQotIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05MjYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTlSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFDQVA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVg0MCBpcyBub3Qgc2V0Ci1DT05GSUdfQVQ5MV9QTUNfVU5JVD15Ci0KLSMKLSMgQVQ5MVNBTTkyNjAgVmFyaWFudHMKLSMKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjBfU0FNOVhFIGlzIG5vdCBzZXQKLQotIwotIyBBVDkxU0FNOTI2MCAvIEFUOTFTQU05WEUgQm9hcmQgVHlwZQotIwotIyBDT05GSUdfTUFDSF9BVDkxU0FNOTI2MEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ0FNNjAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9TQU05X0w5MjYwIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX1VTQl9BOTI2MD15Ci0jIENPTkZJR19NQUNIX1FJTF9BOTI2MCBpcyBub3Qgc2V0Ci0KLSMKLSMgQVQ5MSBCb2FyZCBPcHRpb25zCi0jCi0KLSMKLSMgQVQ5MSBGZWF0dXJlIFNlbGVjdGlvbnMKLSMKLSMgQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUyBpcyBub3Qgc2V0CiBDT05GSUdfQVQ5MV9TTE9XX0NMT0NLPXkKLUNPTkZJR19BVDkxX1RJTUVSX0haPTEwMAotQ09ORklHX0FUOTFfRUFSTFlfREJHVT15Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUNSBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfQVJNOTI2VD15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXQj15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCiAjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4gaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15Ci1DT05GSUdfT0FCSV9DT01QQVQ9eQotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eVMwLDExNTIwMCIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BNX1NMRUVQPXkKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19TVVNQRU5EPXkKLSMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15Ci1DT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKIENPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAogQ09ORklHX0lQX1BOUF9CT09UUD15CiBDT05GSUdfSVBfUE5QX1JBUlA9eQotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKIENPTkZJR19JUF9NUk9VVEU9eQogQ09ORklHX0lQX1BJTVNNX1YxPXkKIENPTkZJR19JUF9QSU1TTV9WMj15Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKIENPTkZJR19NVERfREFUQUZMQVNIPXkKLSMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORD15Ci0jIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfQVRNRUw9eQogQ09ORklHX01URF9OQU5EX0FUTUVMX0VDQ19TT0ZUPXkKLSMgQ09ORklHX01URF9OQU5EX0FUTUVMX0VDQ19IVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9BVE1FTF9FQ0NfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQogQ09ORklHX01BQ0I9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15CiBDT05GSUdfSU5QVVRfRVZCVUc9eQotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfR1BJTz15CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKIENPTkZJR19TRVJJQUxfQVRNRUw9eQogQ09ORklHX1NFUklBTF9BVE1FTF9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9BVE1FTF9UVFlBVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCiBDT05GSUdfU1BJPXkKLSMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKIENPTkZJR19TUElfQVRNRUw9eQotIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCi0jIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKICMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVSU0lTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCi0jCi1DT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIworQ09ORklHX1VTQl9PSENJX0hDRD15CitDT05GSUdfVVNCX1NUT1JBR0U9eQogQ09ORklHX1VTQl9HQURHRVQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX0FUOTE9eQotQ09ORklHX1VTQl9BVDkxPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfRVRIPXkKLUNPTkZJR19VU0JfRVRIX1JORElTPXkKLSMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRVRIPW0KIENPTkZJR19ORVdfTEVEUz15CiBDT05GSUdfTEVEU19DTEFTUz15Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKIENPTkZJR19MRURTX0dQSU89eQotCi0jCi0jIExFRCBUcmlnZ2VycwotIwogQ09ORklHX0xFRFNfVFJJR0dFUlM9eQotIyBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GVVNFX0ZTPW0KLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15Ci0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjNfQUNMPXkKIENPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19BQ0xfU1VQUE9SVD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOU1RSVU1FTlRBVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQotIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3VzYi1hOTI2M19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3VzYi1hOTI2M19kZWZjb25maWcKaW5kZXggN2YwMThlZC4uZWU4MmQwOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy91c2ItYTkyNjNfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvdXNiLWE5MjYzX2RlZmNvbmZpZwpAQCAtMSwxMTMzICsxLDEwNiBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0Ci0jIFR1ZSBBcHIgMTUgMTE6MTU6MTkgMjAwOAotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0FUOTE9eQotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIwotCi0jCi0jIEF0bWVsIEFUOTEgU3lzdGVtLW9uLUNoaXAKLSMKLSMgQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05MjYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjEgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjM9eQotIyBDT05GSUdfQVJDSF9BVDkxU0FNOVJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MUNBUDkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxWDQwIGlzIG5vdCBzZXQKLUNPTkZJR19BVDkxX1BNQ19VTklUPXkKLQotIwotIyBBVDkxU0FNOTI2MyBCb2FyZCBUeXBlCi0jCi0jIENPTkZJR19NQUNIX0FUOTFTQU05MjYzRUsgaXMgbm90IHNldAogQ09ORklHX01BQ0hfVVNCX0E5MjYzPXkKLQotIwotIyBBVDkxIEJvYXJkIE9wdGlvbnMKLSMKLQotIwotIyBBVDkxIEZlYXR1cmUgU2VsZWN0aW9ucwotIwotIyBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTIGlzIG5vdCBzZXQKIENPTkZJR19BVDkxX1NMT1dfQ0xPQ0s9eQotQ09ORklHX0FUOTFfVElNRVJfSFo9MTAwCi1DT05GSUdfQVQ5MV9FQVJMWV9EQkdVPXkKLSMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQ1IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9BUk05MjZUPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKICMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJtZW09NjRNIGNvbnNvbGU9dHR5UzAsMTE1MjAwIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRlAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwogQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotQ09ORklHX1NVU1BFTkQ9eQotIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKLUNPTkZJR19BU0tfSVBfRklCX0hBU0g9eQotIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEggaXMgbm90IHNldAogQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKIENPTkZJR19JUF9QTlBfUkFSUD15Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAogQ09ORklHX0lQX01ST1VURT15CiBDT05GSUdfSVBfUElNU01fVjE9eQogQ09ORklHX0lQX1BJTVNNX1YyPXkKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwogQ09ORklHX01URF9EQVRBRkxBU0g9eQotIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORF9BVE1FTD15CiBDT05GSUdfTVREX05BTkRfQVRNRUxfRUNDX1NPRlQ9eQotIyBDT05GSUdfTVREX05BTkRfQVRNRUxfRUNDX0hXIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0FUTUVMX0VDQ19OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiBDT05GSUdfU0NTSV9NVUxUSV9MVU49eQotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01JST15CiBDT05GSUdfTUFDQj15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKIENPTkZJR19JTlBVVF9FVkJVRz15Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9HUElPPXkKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9BVE1FTD15CiBDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKIENPTkZJR19TUEk9eQotIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TUElfTUFTVEVSPXkKLQotIwotIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwotIwogQ09ORklHX1NQSV9BVE1FTD15Ci0jIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFByb3RvY29sIE1hc3RlcnMKLSMKLSMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwogIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRVJTSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKLUNPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERTTCBtb2RlbSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCitDT05GSUdfVVNCX09IQ0lfSENEPXkKK0NPTkZJR19VU0JfU1RPUkFHRT15CiBDT05GSUdfVVNCX0dBREdFVD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVRfQVQ5MT15Ci1DT05GSUdfVVNCX0FUOTE9eQotIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAotQ09ORklHX1VTQl9FVEg9eQotQ09ORklHX1VTQl9FVEhfUk5ESVM9eQotIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAorQ09ORklHX1VTQl9FVEg9bQogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKLQotIwotIyBMRUQgZHJpdmVycwotIwogQ09ORklHX0xFRFNfR1BJTz15Ci0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCiBDT05GSUdfTEVEU19UUklHR0VSUz15Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVIgaXMgbm90IHNldAogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQotQ09ORklHX1JUQ19MSUI9eQotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogQ09ORklHX0ZVU0VfRlM9bQotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WM19BQ0w9eQogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0FDTF9TVVBQT1JUPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAogQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfSU5TVFJVTUVOVEFUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15Ci0jIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvdmVyc2F0aWxlX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvdmVyc2F0aWxlX2RlZmNvbmZpZwppbmRleCBhMWFmMGI5Li4wY2U3MTBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3ZlcnNhdGlsZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy92ZXJzYXRpbGVfZGVmY29uZmlnCkBAIC0xLDEwMDAgKzEsODQgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzMKLSMgTW9uIE1heSAgOCAyMDoxNTo1NyAyMDA2Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfVUlEMTY9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0hNRU09eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX0lOVEVSTU9EVUxFPXkKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCi0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1ZFUlNBVElMRT15Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgaXMgbm90IHNldAotCi0jCi0jIFZlcnNhdGlsZSBwbGF0Zm9ybSB0eXBlCi0jCi1DT05GSUdfQVJDSF9WRVJTQVRJTEVfUEI9eQogQ09ORklHX01BQ0hfVkVSU0FUSUxFX0FCPXkKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9BUk05MjZUPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4gaXMgbm90IHNldAotQ09ORklHX0FSTV9WSUM9eQotQ09ORklHX0lDU1QzMDc9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi1DT05GSUdfQVJNX0FNQkE9eQotIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCi0jIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgogQ09ORklHX0xFRFM9eQotQ09ORklHX0xFRFNfVElNRVI9eQogQ09ORklHX0xFRFNfQ1BVPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJyb290PTFmMDMgbWVtPTMyTSIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAogQ09ORklHX1ZGUD15Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwogQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCi0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKLUNPTkZJR19NVERfQ0ZJX05PU1dBUD15Ci0jIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SPXkKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotCi0jCi0jIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCi0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIworQ09ORklHX0VFUFJPTV9MRUdBQ1k9bQogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQogQ09ORklHX1NNQzkxWD15Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRT15Ci1DT05GSUdfTU9VU0VfUFMyPXkKLSMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKICMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAogQ09ORklHX1NFUklPX0FNQkFLTUk9eQotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPW0KLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQogQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQogQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9SU0E9eQotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMT15CiBDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTFfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0xNgotCi0jCi0jIElQTUkKLSMKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQ0hBUkRFVj1tCi0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLUNPTkZJR19JMkNfQUxHT0JJVD15Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci1DT05GSUdfRUVQUk9NX0xFR0FDWT1tCi0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCi0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIExFRCBkZXZpY2VzCi0jCi0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCiBDT05GSUdfRkI9eQotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQVJNQ0xDRD15Ci0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAogQ09ORklHX0ZPTlRTPXkKLSMgQ09ORklHX0ZPTlRfOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfOHgxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKIENPTkZJR19GT05UX0FDT1JOXzh4OD15Ci0jIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAotCi0jCi0jIExvZ28gY29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCiBDT05GSUdfU09VTkQ9eQotCi0jCi0jIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQotIwogQ09ORklHX1NORD1tCi1DT05GSUdfU05EX1RJTUVSPW0KLUNPTkZJR19TTkRfUENNPW0KLSMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAotQ09ORklHX1NORF9PU1NFTVVMPXkKIENPTkZJR19TTkRfTUlYRVJfT1NTPW0KIENPTkZJR19TTkRfUENNX09TUz1tCi1DT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15Ci0jIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQotQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15Ci0jIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBHZW5lcmljIGRldmljZXMKLSMKLUNPTkZJR19TTkRfQUM5N19DT0RFQz1tCi1DT05GSUdfU05EX0FDOTdfQlVTPW0KLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQUxTQSBBUk0gZGV2aWNlcwotIwogQ09ORklHX1NORF9BUk1BQUNJPW0KLQotIwotIyBPcGVuIFNvdW5kIFN5c3RlbQotIwotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19NTUNfQkxPQ0s9eQogQ09ORklHX01NQ19BUk1NTUNJPW0KLQotIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19DUkFNRlM9eQogQ09ORklHX01JTklYX0ZTPXkKIENPTkZJR19ST01GU19GUz15Ci0jIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPW0KLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19WRkFUX0ZTPW0KLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19ORlNEPXkKIENPTkZJR19ORlNEX1YzPXkKLSMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRF9UQ1AgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX0VYUE9SVEZTPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz1tCi1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9bQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQogQ09ORklHX0RFQlVHX0VSUk9SUz15CiBDT05GSUdfREVCVUdfTEw9eQotIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy92aXBlcl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3ZpcGVyX2RlZmNvbmZpZwppbmRleCA5MDk4ODdhLi45ZDdiZjVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3ZpcGVyX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3ZpcGVyX2RlZmNvbmZpZwpAQCAtMSwxNjc2ICsxLDE3NCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3LXJjNAotIyBUaHUgQXVnIDIxIDE3OjEyOjA3IDIwMDgKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX0hBVkVfUFdNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19BUkNIX01URF9YSVA9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTEzCi0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15CiAjIENPTkZJR19TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVCBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9DTEs9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfVElOWV9TSE1FTT15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9ERUFETElORT15Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1BYQT15Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTTdYMDBBIGlzIG5vdCBzZXQKLQotIwotIyBJbnRlbCBQWEEyeHgvUFhBM3h4IEltcGxlbWVudGF0aW9ucwotIwotIyBDT05GSUdfQVJDSF9HVU1TVElYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QWEFfU0hBUlBTTCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9WSVBFUj15Ci0jIENPTkZJR19BUkNIX1BYQV9FU0VSSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVFJJWkVQUzQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9FTV9YMjcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ09MSUJSSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1pZTE9OSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTElUVExFVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVEFWT1JFVkIgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9TQUFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQVJNQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01BR0lDSUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfUENNMDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBX1BBTE0gaXMgbm90IHNldAotIyBDT05GSUdfUFhBX0VaWCBpcyBub3Qgc2V0Ci1DT05GSUdfUFhBMjV4PXkKLUNPTkZJR19QWEFfUFdNPW0KLUNPTkZJR19QWEFfSEFWRV9JU0FfSVJRUz15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIwotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX1hTQ0FMRT15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQotQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKIENPTkZJR19JV01NWFQ9eQotQ09ORklHX1hTQ0FMRV9QTVU9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi1DT05GSUdfSVNBPXkKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0NBUkQ9bQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUE9bQotQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15Ci1DT05GSUdfUENNQ0lBX0lPQ1RMPXkKLQotIwotIyBQQy1jYXJkIGJyaWRnZXMKLSMKLSMgQ09ORklHX0k4MjM2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0lDIGlzIG5vdCBzZXQKIENPTkZJR19QQ01DSUFfUFhBMlhYPW0KLUNPTkZJR19QQ01DSUFfUFJPQkU9eQotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1RJQ0tfT05FU0hPVD15Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9InJvb3Q9MzE6MDIgcm9vdGZzdHlwZT1qZmZzMiBybyBjb25zb2xlPXR0eVMwLDExNTIwMCIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBGcmVxdWVuY3kgc2NhbGluZwotIwogQ09ORklHX0NQVV9GUkVRPXkKLUNPTkZJR19DUFVfRlJFUV9UQUJMRT15Ci0jIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfU1RBVD15Ci0jIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFMgaXMgbm90IHNldAotQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFPXkKLSMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQogQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkU9bQogQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9bQogQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD1tCiBDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRT1tCi0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi0jIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAogQ09ORklHX0ZQRV9GQVNURlBFPXkKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkQ9eQotQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15Ci0jIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKLSMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKIENPTkZJR19CVD1tCiBDT05GSUdfQlRfTDJDQVA9bQotIyBDT05GSUdfQlRfU0NPIGlzIG5vdCBzZXQKIENPTkZJR19CVF9SRkNPTU09bQogQ09ORklHX0JUX1JGQ09NTV9UVFk9eQogQ09ORklHX0JUX0JORVA9bQotIyBDT05GSUdfQlRfQk5FUF9NQ19GSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSElEUCBpcyBub3Qgc2V0Ci0KLSMKLSMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCi0jCi1DT05GSUdfQlRfSENJVVNCPW0KLSMgQ09ORklHX0JUX0hDSVVTQl9TQ08gaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQlRVU0IgaXMgbm90IHNldAogQ09ORklHX0JUX0hDSVVBUlQ9bQogQ09ORklHX0JUX0hDSVVBUlRfSDQ9eQogQ09ORklHX0JUX0hDSVVBUlRfQkNTUD15Ci0jIENPTkZJR19CVF9IQ0lVQVJUX0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJDTTIwM1ggaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQlBBMTBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJGVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSURUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQlQzQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCTFVFQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCVFVBUlQgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJVkhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCi0jIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfVEtJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPW0KLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEFSVElUSU9OUz15CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQogQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0wCi0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9bQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfSkVERUNQUk9CRT15Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15CiBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15Ci1DT05GSUdfTVREX0NGSV9OT1NXQVA9eQotIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfR0VPTUVUUlk9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CiAjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKICMgQ09ORklHX01URF9DRklfSTIgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKIENPTkZJR19NVERfUkFNPXkKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCiBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDgwMDAwMDAKLUNPTkZJR19NVERfUEhZU01BUF9MRU49MAotQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0yCiBDT05GSUdfTVREX1BYQTJYWD15Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0lNUEE3IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TSEFSUF9TTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1NQQVJTRV9SQU09eQotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTlAgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9bQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9bQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD1tCi0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSEExNTJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RUQzMyODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0VORVJJQ19OQ1I1MzgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0VORVJJQ19OQ1I1MzgwX01NSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OQ1I1M0M0MDZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUEFTMTYgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfRkFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDNDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfVDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9XTEVWRUxfUENNQ0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogQ09ORklHX0FUQT1tCi0jIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9QTVAgaXMgbm90IHNldAotQ09ORklHX0FUQV9TRkY9eQotIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0xFR0FDWSBpcyBub3Qgc2V0CiBDT05GSUdfUEFUQV9QQ01DSUE9bQotIyBDT05GSUdfUEFUQV9RREkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9XSU5CT05EX1ZMQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9TTUMgaXMgbm90IHNldAogQ09ORklHX1NNQzkxWD15Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX1JBQ0FMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUMTcwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVBDQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAogQ09ORklHX1VTQl9QRUdBU1VTPW0KLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfVVNCTkVUPW0KLUNPTkZJR19VU0JfTkVUX0FYODgxN1g9bQotQ09ORklHX1VTQl9ORVRfQ0RDRVRIRVI9bQotIyBDT05GSUdfVVNCX05FVF9ETTk2MDEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9HTDYyMEEgaXMgbm90IHNldAotQ09ORklHX1VTQl9ORVRfTkVUMTA4MD1tCi0jIENPTkZJR19VU0JfTkVUX1BMVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfTUNTNzgzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX1JORElTX0hPU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX05FVF9DRENfU1VCU0VUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTkVUX1pBVVJVUz1tCiBDT05GSUdfTkVUX1BDTUNJQT15Ci0jIENPTkZJR19QQ01DSUFfM0M1ODkgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBXzNDNTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9GTVZKMThYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9QQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfTk1DTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9TTUM5MUM5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfWElSQzJQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfQVhORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9bQotIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKIENPTkZJR19QUFBfQVNZTkM9bQotIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKIENPTkZJR19QUFBfREVGTEFURT1tCiBDT05GSUdfUFBQX0JTRENPTVA9bQotIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAotIyBDT05GSUdfUFBQT0UgaXMgbm90IHNldAotIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwogQ09ORklHX0lOUFVUX01PVVNFREVWPW0KICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPW0KLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CiBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVT1tCi0jIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CiBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPPW0KIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0g9bQogQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTz1tCi0jIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0CiBDT05GSUdfVE9VQ0hTQ1JFRU5fSFRDUEVOPW0KIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVD1tCiBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVD1tCiBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU49bQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVUNCMTQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9XTTk3WFggaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0CiBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMz1tCiBDT05GSUdfSU5QVVRfTUlTQz15Ci0jIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9VSU5QVVQ9bQotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQogIyBDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlMgaXMgbm90IHNldAogIyBDT05GSUdfVlRfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPW0KLSMgQ09ORklHX1NFUklBTF84MjUwX0NTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz01CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz01Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9QWEE9eQogQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPW0KLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAotIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiAjIENPTkZJR19JMkNfSEVMUEVSX0FVVE8gaXMgbm90IHNldAotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi1DT05GSUdfSTJDX0FMR09CSVQ9eQotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotQ09ORklHX0kyQ19HUElPPXkKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogQ09ORklHX0kyQ19QWEE9eQotIyBDT05GSUdfSTJDX1BYQV9TTEFWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19FTEVLVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HUElPX1NZU0ZTPXkKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBJU0EtYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1BDV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfTUlYQ09NV0QgaXMgbm90IHNldAotIyBDT05GSUdfV0RUIGlzIG5vdCBzZXQKLQotIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogQ09ORklHX0ZCPXkKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9bQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT1tCi1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD1tCi0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogQ09ORklHX0ZCX1BYQT1tCi0jIENPTkZJR19GQl9QWEFfU01BUlRQQU5FTCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfUFhBX1BBUkFNRVRFUlM9eQotIyBDT05GSUdfRkJfTUJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1cxMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQU0yMDBFUEQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKLUNPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPW0KLSMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xDRF9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT1tCi0jIENPTkZJR19CQUNLTElHSFRfQ09SR0kgaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9QV009bQotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NREFfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT1tCi0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQogQ09ORklHX0xPR089eQotQ09ORklHX0xPR09fTElOVVhfTU9OTz15Ci1DT05GSUdfTE9HT19MSU5VWF9WR0ExNj15Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKIENPTkZJR19TT1VORD1tCiBDT05GSUdfU05EPW0KLUNPTkZJR19TTkRfVElNRVI9bQotQ09ORklHX1NORF9QQ009bQotIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX09TU0VNVUw9eQogQ09ORklHX1NORF9NSVhFUl9PU1M9bQogQ09ORklHX1NORF9QQ01fT1NTPW0KLUNPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKLSMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15Ci1DT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NORF9WTUFTVEVSPXkKLUNPTkZJR19TTkRfQUM5N19DT0RFQz1tCi1DT05GSUdfU05EX0RSSVZFUlM9eQotIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkUgaXMgbm90IHNldAotQ09ORklHX1NORF9BUk09eQotQ09ORklHX1NORF9QWEEyWFhfUENNPW0KIENPTkZJR19TTkRfUFhBMlhYX0FDOTc9bQotQ09ORklHX1NORF9VU0I9eQotIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfUENNQ0lBPXkKLSMgQ09ORklHX1NORF9WWFBPQ0tFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUERBVURJT0NGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotQ09ORklHX0FDOTdfQlVTPW0KLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD1tCi0jIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9bQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci1DT05GSUdfVVNCX0RFVklDRV9DTEFTUz15Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVNQRU5EPXkKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9JU1AxMTZYX0hDRD1tCi0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9TTDgxMV9IQ0Q9bQotIyBDT05GSUdfVVNCX1NMODExX0NTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUjhBNjY1OTdfSENEPW0KLSMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwogQ09ORklHX1VTQl9BQ009bQotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKIENPTkZJR19VU0JfU1RPUkFHRT1tCi0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0lFUlJBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwogQ09ORklHX1VTQl9TRVJJQUw9bQotIyBDT05GSUdfVVNCX0VaVVNCIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUM9eQotIyBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9DSDM0MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9FTVBFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRlVOU09GVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSVBBUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9USSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lQVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lVVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tMU0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzI9bQotIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3NzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzg0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX01PVE9ST0xBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTkFWTUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfT1RJNjg1OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1NQQ1A4WDUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9IUDRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU0FGRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1NJRVJSQVdJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfVEkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9YSVJDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9PUFRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9PTU5JTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUPW0KLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1BYQTI1WD15Ci1DT05GSUdfVVNCX1BYQTI1WD1tCi0jIENPTkZJR19VU0JfUFhBMjVYX1NNQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAogQ09ORklHX1VTQl9FVEg9bQotQ09ORklHX1VTQl9FVEhfUk5ESVM9eQogQ09ORklHX1VTQl9HQURHRVRGUz1tCiBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRT1tCi0jIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX1VTQl9HX1NFUklBTD1tCi0jIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAogQ09ORklHX1VTQl9HX1BSSU5URVI9bQotIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9bQotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX0RTMTMwNz1tCi0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCiBDT05GSUdfUlRDX0RSVl9TQTExMDA9bQotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVm9sdGFnZSBhbmQgQ3VycmVudCByZWd1bGF0b3JzCi0jCi0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPW0KLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9bQogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9bQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPW0KLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19WRkFUX0ZTPW0KLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9bQogQ09ORklHX05GU0RfVjM9eQotIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19FWFBPUlRGUz1tCi1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9bQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAogQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT1tCi0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xNT1tCi0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogQ09ORklHX05MU19VVEY4PW0KLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci1DT05GSUdfSEFWRV9GVFJBQ0U9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19FUlJPUlM9eQotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST1tCi1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCi1DT05GSUdfQ1JZUFRPX01BTkFHRVI9bQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BUkM0PW0KLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDX0NDSVRUPW0KLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkNfVDEwRElGPW0KLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MveGNlcF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3hjZXBfZGVmY29uZmlnCmluZGV4IDg0YTcyYWMuLjcwZDQ3ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MveGNlcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy94Y2VwX2RlZmNvbmZpZwpAQCAtMSwxMTI4ICsxLDk5IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM2Ci0jIFRodSBBdWcgMjAgMDk6MDI6MzcgMjAwOQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfQVJDSF9NVERfWElQPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIueGNlcC1pdGVjaCIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15CiAjIENPTkZJR19TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQUlPPXkKLQotIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycwotIwogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1NUUklQX0FTTV9TWU1TPXkKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKIENPTkZJR19TTE9CPXkKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0tQUk9CRVM9eQotQ09ORklHX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiAjIENPTkZJR19CTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUFhBPXkKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotCi0jCi0jIEludGVsIFBYQTJ4eC9QWEEzeHggSW1wbGVtZW50YXRpb25zCi0jCi0jIENPTkZJR19BUkNIX0dVTVNUSVggaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9JTlRFTE1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfU1RBUkdBVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTVA5MDBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QWEFfU0hBUlBTTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZJUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBX0VTRVJJRVMgaXMgbm90IHNldAotIyBDT05GSUdfVFJJWkVQU19QWEEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9INTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0VNX1gyNzAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9FWEVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NPTElCUkkgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DT0xJQlJJMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ09MSUJSSTMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1pZTE9OSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTElUVExFVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVEFWT1JFVkIgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9TQUFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQVJNQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NNX1gzMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9INDcwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01BR0lDSUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfSElNQUxBWUEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NSU9BNzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfUENNMDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBX1BBTE0gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DU0I3MjYgaXMgbm90IHNldAotIyBDT05GSUdfUFhBX0VaWCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9YQ0VQPXkKLUNPTkZJR19QWEEyNXg9eQotQ09ORklHX1BYQV9TU1A9eQotQ09ORklHX1BMQVRfUFhBPXkKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV9YU0NBTEU9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUPXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfSVdNTVhUPXkKLUNPTkZJR19YU0NBTEVfUE1VPXkKLUNPTkZJR19DT01NT05fQ0xLREVWPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotQ09ORklHX1ZNU1BMSVRfM0c9eQotIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCi0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15Ci1DT05GSUdfT0FCSV9DT01QQVQ9eQotIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0wCi1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0jIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9InJvb3Q9bXRkNCByb290ZnN0eXBlPWpmZnMyIHJvIGNvbnNvbGU9dHR5UzAsMTE1MjAwIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9bQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0tFWT15Ci0jIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAotQ09ORklHX0lORVRfTFJPPXkKICMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVENQUFJPQkUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15CiAjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15Ci1DT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKLUNPTkZJR19NVERfQ0hBUj15Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLUNPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwogQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKLUNPTkZJR19NVERfUEhZU01BUD15Ci0jIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QWEEyWFg9eQotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci1DT05GSUdfU01DOTFYPXkKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX1BYQT15CiBDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz1tCi1DT05GSUdfSTJDX0JPQVJESU5GTz15CiBDT05GSUdfSTJDX0NIQVJERVY9bQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfUFhBPW0KLSMgQ09ORklHX0kyQ19QWEFfU0xBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049bQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKIENPTkZJR19TRU5TT1JTX0FETTEwMjE9bQotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CiBDT05GSUdfU0VOU09SU19NQVg2NjUwPW0KLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0hUMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPW0KLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCiBDT05GSUdfUlRDX0RSVl9TQTExMDA9bQotIyBDT05GSUdfUlRDX0RSVl9QWEEgaXMgbm90IHNldAogQ09ORklHX0RNQURFVklDRVM9eQotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi1DT05GSUdfRklMRV9MT0NLSU5HPXkKLSMgQ09ORklHX0ZTTk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTk9USUZZX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWT15Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPW0KIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9bQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9bQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19OTFM9bQogQ09ORklHX05MU19ERUZBVUxUPSJ1dGY4IgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogQ09ORklHX05MU19VVEY4PW0KLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKIENPTkZJR19QUklOVEtfVElNRT15Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfU1RSSVBfQVNNX1NZTVM9eQogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAogIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUk1fVU5XSU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST1tCi1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9bQotQ09ORklHX0NSWVBUT19IQVNIPW0KLUNPTkZJR19DUllQVE9fSEFTSDI9bQotIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy95bDkyMDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy95bDkyMDBfZGVmY29uZmlnCmluZGV4IDNiNjI3YWEuLjMwYzUzN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MveWw5MjAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3lsOTIwMF9kZWZjb25maWcKQEAgLTEsMTIxNSArMSwxMzcgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzYKLSMgRnJpIEphbiAxMSAwOTo1Mzo1OSAyMDA4Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi0jIENPTkZJR19FWFBFUklNRU5UQUwgaXMgbm90IHNldAotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTk9PUD15Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0FUOTE9eQotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIwotCi0jCi0jIEF0bWVsIEFUOTEgU3lzdGVtLW9uLUNoaXAKLSMKLUNPTkZJR19BUkNIX0FUOTFSTTkyMDA9eQotIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFTQU05MjYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxU0FNOVJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MVg0MCBpcyBub3Qgc2V0Ci1DT05GSUdfQVQ5MV9QTUNfVU5JVD15Ci0KLSMKLSMgQVQ5MVJNOTIwMCBCb2FyZCBUeXBlCi0jCi0jIENPTkZJR19NQUNIX09ORUFSTSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9BVDkxUk05MjAwREs9eQotIyBDT05GSUdfTUFDSF9BVDkxUk05MjAwRUsgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DU0IzMzcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DU0I2MzcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DQVJNRVZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQVRFQjkyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9LQjkyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9QSUNPVFVYMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfS0FGQSBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9ZTDkyMDA9eQotCi0jCi0jIEFUOTEgQm9hcmQgT3B0aW9ucwotIwotIyBDT05GSUdfTVREX0FUOTFfREFUQUZMQVNIX0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEFUOTEgRmVhdHVyZSBTZWxlY3Rpb25zCi0jCi0jIENPTkZJR19BVDkxX1BST0dSQU1NQUJMRV9DTE9DS1MgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX0FSTTkyMFQ9eQotQ09ORklHX0NQVV8zMnY0VD15Ci1DT05GSUdfQ1BVX0FCUlRfRVY0VD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1Y0V1Q9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKICMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotQ09ORklHX0haPTEwMAotIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0xFRFMgaXMgbm90IHNldAotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9Im1lbT0zMk0gY29uc29sZT10dHlTMCwxMTUyMDAgaW5pdHJkPTB4MjA0MTAwMDAsMzE0NTcyOCByb290PS9kZXYvcmFtMCBydyIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwogQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15Ci0jIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci0jIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci1DT05GSUdfTVREX1JBTT15Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CiBDT05GSUdfTVREX1BIWVNNQVA9eQotQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MDAwMDAwMAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0wCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTIKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldAogQ09ORklHX01URF9QTEFUUkFNPXkKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkQ9eQotIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfSURTPXkKIENPTkZJR19NVERfTkFORF9BVE1FTD15Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORF9QTEFURk9STT15Ci0jIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTMKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQotIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CiBDT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfREFWSUNPTV9QSFk9eQotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15CiBDT05GSUdfQVJNX0FUOTFfRVRIRVI9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTY0MAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTQ4MAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9HUElPPXkKLUNPTkZJR19JTlBVVF9NT1VTRT15Ci1DT05GSUdfTU9VU0VfUFMyPXkKLUNPTkZJR19NT1VTRV9QUzJfQUxQUz15Ci1DT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15Ci1DT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15Ci1DT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKLUNPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15Ci0jIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQogQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDY9eQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVUNCMTQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKICMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX0FUTUVMPXkKIENPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfQVRNRUxfVFRZQVQgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci0jIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLSMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCiBDT05GSUdfU1BJPXkKIENPTkZJR19TUElfREVCVUc9eQotQ09ORklHX1NQSV9NQVNURVI9eQotCi0jCi0jIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCi0jCiBDT05GSUdfU1BJX0FUTUVMPXkKLQotIwotIyBTUEkgUHJvdG9jb2wgTWFzdGVycwotIwotIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfUzFEMTM1WFg9eQotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKLSMgQ09ORklHX0xDRF9MVFYzNTBRViBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15Ci0jIENPTkZJR19CQUNLTElHSFRfQ09SR0kgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ESVNQTEFZX1NVUFBPUlQ9eQotCi0jCi0jIERpc3BsYXkgaGFyZHdhcmUgZHJpdmVycwotIwotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfTE9HTz15CiAjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAogIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotQ09ORklHX0hJRF9ERUJVRz15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfREVCVUc9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0hDRD15Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwotQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorQ09ORklHX1VTQl9TVE9SQUdFPXkKIENPTkZJR19VU0JfR0FER0VUPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUX002NjU5Mj15Ci1DT05GSUdfVVNCX002NjU5Mj15Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15Ci0jIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0ZJTEVfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRT1tCiBDT05GSUdfTU1DPXkKIENPTkZJR19NTUNfREVCVUc9eQotIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQkxPQ0s9eQogIyBDT05GSUdfTU1DX0JMT0NLX0JPVU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotQ09ORklHX01NQ19BVDkxPXkKK0NPTkZJR19NTUNfQVQ5MT1tCiBDT05GSUdfTkVXX0xFRFM9eQogQ09ORklHX0xFRFNfQ0xBU1M9eQotCi0jCi0jIExFRCBkcml2ZXJzCi0jCiBDT05GSUdfTEVEU19HUElPPXkKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKIENPTkZJR19MRURTX1RSSUdHRVJTPXkKIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX0FUOTFSTTkyMDA9eQotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDJfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKIENPTkZJR19SRUlTRVJGU19GUz15Ci0jIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCiBDT05GSUdfSVNPOTY2MF9GUz15CiBDT05GSUdfSk9MSUVUPXkKIENPTkZJR19aSVNPRlM9eQogQ09ORklHX1VERl9GUz15Ci1DT05GSUdfVURGX05MUz15Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15CiBDT05GSUdfSkZGUzJfRlNfREVCVUc9MQotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQogQ09ORklHX0pGRlMyX1JVQklOPXkKLSMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKLSMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAogQ09ORklHX01BQ19QQVJUSVRJT049eQotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5TVFJVTUVOVEFUSU9OPXkKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogQ09ORklHX1NMVUJfREVCVUdfT049eQotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS09CSkVDVD15Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTElTVD15Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQogQ09ORklHX0RFQlVHX0VSUk9SUz15CiBDT05GSUdfREVCVUdfTEw9eQotIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvemV1c19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3pldXNfZGVmY29uZmlnCmluZGV4IGZjYTVmZjYuLjk2MGY2NTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvemV1c19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy96ZXVzX2RlZmNvbmZpZwpAQCAtMSwyMDMxICsxLDE4OSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyCi0jIFR1ZSBEZWMgIDggMjA6Mjc6MDUgMjAwOQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0FSQ0hfSEFTX0NQVUZSRVE9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0FSQ0hfTVREX1hJUD15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAogQ09ORklHX1RJTllfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTEzCi0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX05BTUVTUEFDRVM9eQotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLUNPTkZJR19GUkVFWkVSPXkKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotQ09ORklHX01NVT15Ci0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05PTUFESUsgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RPVkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1BYQT15Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9VODUwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKLSMKLQotIwotIyBJbnRlbC9NYXJ2ZWxsIERldiBQbGF0Zm9ybXMgKHNvcnRlZCBieSBoYXJkd2FyZSByZWxlYXNlIHRpbWUpCi0jCi0jIENPTkZJR19BUkNIX0xVQkJPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NQUlOU1RPTkUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9aWUxPTklURTMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1pZTE9OSVRFMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTElUVExFVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVEFWT1JFVkIgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9TQUFSIGlzIG5vdCBzZXQKLQotIwotIyBUaGlyZCBQYXJ0eSBEZXYgUGxhdGZvcm1zIChzb3J0ZWQgYnkgdmVuZG9yIG5hbWUpCi0jCi0jIENPTkZJR19BUkNIX1BYQV9JRFAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WSVBFUiBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9BUkNPTV9aRVVTPXkKLSMgQ09ORklHX01BQ0hfQkFMTE9PTjMgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DU0I3MjYgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9BUk1DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfRU1fWDI3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0VYRURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ01fWDMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0dVTVNUSVggaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9JTlRFTE1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfU1RBUkdBVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfWENFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUklaRVBTX1BYQSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDT01fUENNQ0lBPXkKLSMgQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9QQ00wMjcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9DT0xJQlJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfQ09MSUJSSTMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NPTElCUkkzMjAgaXMgbm90IHNldAotCi0jCi0jIEVuZC11c2VyIFByb2R1Y3RzIChzb3J0ZWQgYnkgdmVuZG9yIG5hbWUpCi0jCi0jIENPTkZJR19NQUNIX0g0NzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfSDUwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9ISU1BTEFZQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01BR0lDSUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTUlPQTcwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QWEFfRVpYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTVA5MDBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBX1BBTE0gaXMgbm90IHNldAotIyBDT05GSUdfUFhBX1NIQVJQU0wgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfRVNFUklFUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFhBMjd4PXkKLUNPTkZJR19QWEFfU1NQPXkKLUNPTkZJR19QWEFfSEFWRV9CT0FSRF9JUlFTPXkKLUNPTkZJR19QWEFfSEFWRV9JU0FfSVJRUz15Ci1DT05GSUdfUExBVF9QWEE9eQotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX1hTQ0FMRT15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQotQ09ORklHX0NQVV9QQUJSVF9MRUdBQ1k9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQotQ09ORklHX0lXTU1YVD15Ci1DT05GSUdfWFNDQUxFX1BNVT15Ci1DT05GSUdfQ09NTU9OX0NMS0RFVj15Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLUNPTkZJR19JU0E9eQotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX1BDQ0FSRD1tCi1DT05GSUdfUENNQ0lBPW0KLUNPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQotQ09ORklHX1BDTUNJQV9JT0NUTD15Ci0KLSMKLSMgUEMtY2FyZCBicmlkZ2VzCi0jCi0jIENPTkZJR19JODIzNjUgaXMgbm90IHNldAotIyBDT05GSUdfVENJQyBpcyBub3Qgc2V0Ci1DT05GSUdfUENNQ0lBX1NPQ19DT01NT049bQogQ09ORklHX1BDTUNJQV9QWEEyWFg9bQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUFfUFJPQkU9eQotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1RJQ0tfT05FU0hPVD15Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotQ09ORklHX1ZNU1BMSVRfM0c9eQotIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTAKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0jIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9InJvb3Q9MzE6MDIgcm9vdGZzdHlwZT1qZmZzMiBybyBjb25zb2xlPXR0eVMwLDExNTIwMCIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBQb3dlciBNYW5hZ2VtZW50Ci0jCiBDT05GSUdfQ1BVX0ZSRVE9eQotQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKLSMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9TVEFUPXkKLSMgQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0U9eQotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAotQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRT15CiBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRT1tCiBDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT1tCiBDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EPW0KIENPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFPW0KLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKIENPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FPVVQ9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwogQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QTV9TTEVFUD15Ci1DT05GSUdfU1VTUEVORD15Ci1DT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKIENPTkZJR19BUE1fRU1VTEFUSU9OPXkKLSMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKIENPTkZJR19CVD1tCiBDT05GSUdfQlRfTDJDQVA9bQotIyBDT05GSUdfQlRfU0NPIGlzIG5vdCBzZXQKIENPTkZJR19CVF9SRkNPTU09bQogQ09ORklHX0JUX1JGQ09NTV9UVFk9eQogQ09ORklHX0JUX0JORVA9bQotIyBDT05GSUdfQlRfQk5FUF9NQ19GSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSElEUCBpcyBub3Qgc2V0Ci0KLSMKLSMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19CVF9IQ0lCVFVTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCVFNESU8gaXMgbm90IHNldAogQ09ORklHX0JUX0hDSVVBUlQ9bQogQ09ORklHX0JUX0hDSVVBUlRfSDQ9eQogQ09ORklHX0JUX0hDSVVBUlRfQkNTUD15Ci0jIENPTkZJR19CVF9IQ0lVQVJUX0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJDTTIwM1ggaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQlBBMTBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJGVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSURUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQlQzQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCTFVFQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCVFVBUlQgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJVkhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9NUlZMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKLUNPTkZJR19XRVhUX0NPUkU9eQotQ09ORklHX1dFWFRfUFJPQz15Ci1DT05GSUdfV0VYVF9TUFk9eQotQ09ORklHX1dFWFRfUFJJVj15CiBDT05GSUdfQ0ZHODAyMTE9bQotIyBDT05GSUdfTkw4MDIxMV9URVNUTU9ERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1MgaXMgbm90IHNldAotIyBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTPXkKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9XRVhUPXkKLUNPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogQ09ORklHX0xJQjgwMjExPW0KLSMgQ09ORklHX0xJQjgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NQUM4MDIxMT1tCi1DT05GSUdfTUFDODAyMTFfUkNfTUlOU1RSRUw9eQotIyBDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9QSUQgaXMgbm90IHNldAotQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUw9eQotQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQ9Im1pbnN0cmVsIgotIyBDT05GSUdfTUFDODAyMTFfTUVTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMV9MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExX0RFQlVHX01FTlUgaXMgbm90IHNldAotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAotQ09ORklHX01URF9QQVJUSVRJT05TPXkKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15Ci1DT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCi0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfUkVBRE9OTFk9eQotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPW0KLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQotQ09ORklHX01URF9HRU5fUFJPQkU9eQogQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQotQ09ORklHX01URF9DRklfTk9TV0FQPXkKLSMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQogIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15CiAjIENPTkZJR19NVERfQ0ZJX0kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15CiBDT05GSUdfTVREX1JBTT15Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwogQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKIENPTkZJR19NVERfUEhZU01BUD15Ci0jIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QWEEyWFg9eQotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9JTVBBNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfR1BJT19BRERSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAotIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfUE5QIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPW0KLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAotIwotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKIENPTkZJR19FRVBST01fQVQyND1tCi0jIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV01DMzIwMFRPUCBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPW0KLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9bQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUhBMTUyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTjIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RUQzMyODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0VORVJJQ19OQ1I1MzgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0VORVJJQ19OQ1I1MzgwX01NSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OQ1I1M0M0MDZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUEFTMTYgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfRkFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDNDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfVDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9XTEVWRUxfUENNQ0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9bQotIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiAjIENPTkZJR19TQVRBX1BNUCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX1NGRj15Ci0jIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTEVHQUNZIGlzIG5vdCBzZXQKIENPTkZJR19QQVRBX1BDTUNJQT1tCi0jIENPTkZJR19QQVRBX1FESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1dJTkJPTkRfVkxCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9TTUMgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKIENPTkZJR19ETTkwMDA9eQotQ09ORklHX0RNOTAwMF9ERUJVR0xFVkVMPTQKLSMgQ09ORklHX0RNOTAwMF9GT1JDRV9TSU1QTEVfUEhZX1BPTEwgaXMgbm90IHNldAotIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX1JBQ0FMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfQVQxNzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JU0EgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUzg5eDAgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19QQ01DSUFfUkFZQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTElCRVJUQVNfVEhJTkZJUk0gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfQVQ3NkM1MFhfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FJUk9fQ1MgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1dMMzUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEw4MTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExX0hXU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUSF9DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQjQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0M0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotIyBDT05GSUdfSVdNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKIENPTkZJR19IRVJNRVM9bQotQ09ORklHX0hFUk1FU19DQUNIRV9GV19PTl9JTklUPXkKIENPTkZJR19QQ01DSUFfSEVSTUVTPW0KLSMgQ09ORklHX1BDTUNJQV9TUEVDVFJVTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QNTRfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19SVDJYMDA9bQotIyBDT05GSUdfUlQyNTAwVVNCIGlzIG5vdCBzZXQKIENPTkZJR19SVDczVVNCPW0KLSMgQ09ORklHX1JUMjgwMFVTQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlQyWDAwX0xJQl9VU0I9bQotQ09ORklHX1JUMlgwMF9MSUI9bQotQ09ORklHX1JUMlgwMF9MSUJfRklSTVdBUkU9eQotQ09ORklHX1JUMlgwMF9MSUJfQ1JZUFRPPXkKLUNPTkZJR19SVDJYMDBfTElCX0xFRFM9eQotIyBDT05GSUdfUlQyWDAwX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMMTJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19aRDEyMTFSVyBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogQ09ORklHX05FVF9QQ01DSUE9eQotIyBDT05GSUdfUENNQ0lBXzNDNTg5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV8zQzU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfRk1WSjE4WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfUENORVQgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX05NQ0xBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfU01DOTFDOTIgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1hJUkMyUFMgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX0FYTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KLSMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQX0FTWU5DPW0KLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0CiBDT05GSUdfUFBQX0RFRkxBVEU9bQogQ09ORklHX1BQUF9CU0RDT01QPW0KLSMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9bQotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj1tCi0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FRVRJIGlzIG5vdCBzZXQKIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVPW0KLSMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKIENPTkZJR19UT1VDSFNDUkVFTl9FTE89bQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUNTNTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIPW0KIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU89bQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAogQ09ORklHX1RPVUNIU0NSRUVOX0hUQ1BFTj1tCiBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQ9bQogQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQ9bQogQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOPW0KLSMgQ09ORklHX1RPVUNIU0NSRUVOX1dNOTdYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzPW0KLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVzkwWDkwMCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTUlTQz15Ci0jIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0NNMTA5IGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9VSU5QVVQ9bQotIyBDT05GSUdfSU5QVVRfR1BJT19ST1RBUllfRU5DT0RFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0NTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz03CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz03Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX1BYQSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009bQotIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCi0jCi0jIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKICMgQ09ORklHX0kyQ19IRUxQRVJfQVVUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLUNPTkZJR19JMkNfQUxHT0JJVD15Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0dQSU89eQotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX1BYQT15Ci0jIENPTkZJR19JMkNfUFhBX1NMQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0VMRUtUT1IgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfU1BJPXkKLSMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19TUElfUFhBMlhYPXkKLQotIwotIyBTUEkgUHJvdG9jb2wgTWFzdGVycwotIwotIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR1BJT19TWVNGUz15Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAogQ09ORklHX0dQSU9fUENBOTUzWD15Ci0jIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNldAotCi0jCi0jIEFDOTcgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgZHJpdmVycwotIwotIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTcwIGlzIG5vdCBzZXQKIENPTkZJR19TRU5TT1JTX0xNNzU9bQotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSFQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNBLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19QQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JWENPTVdEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VDQjE0MDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9EREMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD1tCi1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPW0KLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPW0KLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfUFhBPW0KLSMgQ09ORklHX0ZCX1BYQV9PVkVSTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BYQV9TTUFSVFBBTkVMIGlzIG5vdCBzZXQKIENPTkZJR19GQl9QWEFfUEFSQU1FVEVSUz15Ci0jIENPTkZJR19GQl9NQlggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15Ci1DT05GSUdfTENEX0NMQVNTX0RFVklDRT1tCi0jIENPTkZJR19MQ0RfTE1TMjgzR0YwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQ0RfTFRWMzUwUVYgaXMgbm90IHNldAotIyBDT05GSUdfTENEX0lMSTkzMjAgaXMgbm90IHNldAotIyBDT05GSUdfTENEX1RETzI0TSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQ0RfVkdHMjQzMkE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xDRF9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT1tCi1DT05GSUdfQkFDS0xJR0hUX0dFTkVSSUM9bQotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NREFfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT1tCi0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQogQ09ORklHX0xPR089eQotQ09ORklHX0xPR09fTElOVVhfTU9OTz15Ci1DT05GSUdfTE9HT19MSU5VWF9WR0ExNj15Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKIENPTkZJR19TT1VORD1tCi1DT05GSUdfU09VTkRfT1NTX0NPUkU9eQotQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKIENPTkZJR19TTkQ9bQotQ09ORklHX1NORF9USU1FUj1tCi1DT05GSUdfU05EX1BDTT1tCi1DT05GSUdfU05EX0pBQ0s9eQotIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX09TU0VNVUw9eQogQ09ORklHX1NORF9NSVhFUl9PU1M9bQogQ09ORklHX1NORF9QQ01fT1NTPW0KLUNPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKLSMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1ZNQVNURVI9eQotIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0FDOTdfQ09ERUM9bQotQ09ORklHX1NORF9EUklWRVJTPXkKLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUM5N19QT1dFUl9TQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfQVJNPXkKLUNPTkZJR19TTkRfUFhBMlhYX1BDTT1tCi1DT05GSUdfU05EX1BYQTJYWF9MSUI9bQotQ09ORklHX1NORF9QWEEyWFhfTElCX0FDOTc9eQogQ09ORklHX1NORF9QWEEyWFhfQUM5Nz1tCiAjIENPTkZJR19TTkRfU1BJIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfVVNCPXkKLSMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1VTQl9DQUlBUSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUENNQ0lBIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfU09DPW0KIENPTkZJR19TTkRfUFhBMlhYX1NPQz1tCi1DT05GSUdfU05EX1NPQ19JMkNfQU5EX1NQST1tCi0jIENPTkZJR19TTkRfU09DX0FMTF9DT0RFQ1MgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotQ09ORklHX0FDOTdfQlVTPW0KICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQj1tCi0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVU1BFTkQ9eQotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPW0KLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwogQ09ORklHX1VTQl9BQ009bQotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0KLSMKLSMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KLSMKIENPTkZJR19VU0JfU1RPUkFHRT1tCi0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwogQ09ORklHX1VTQl9TRVJJQUw9bQotIyBDT05GSUdfVVNCX0VaVVNCIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUM9eQotIyBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9DSDM0MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NQMjEwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9FTVBFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRlVOU09GVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSVBBUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9USSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lQVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lVVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tMU0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzI9bQotIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3NzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzg0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX01PVE9ST0xBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTkFWTUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfT1RJNjg1OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1FVQUxDT01NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU1BDUDhYNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU0lFTUVOU19NUEkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1NZTUJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1RJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX09QVElDT04gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUPW0KLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgotQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9SOEE2NjU5NyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1g9eQotQ09ORklHX1VTQl9QWEEyN1g9bQotIyBDT05GSUdfVVNCX0dBREdFVF9TM0NfSFNPVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xBTkdXRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VUSD1tCi1DT05GSUdfVVNCX0VUSF9STkRJUz15Ci0jIENPTkZJR19VU0JfRVRIX0VFTSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVEZTPW0KIENPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KLSMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dfU0VSSUFMPW0KLSMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dfUFJJTlRFUj1tCi0jIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi1DT05GSUdfVVNCX09UR19VVElMUz15Ci0jIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogQ09ORklHX01NQz15Ci0jIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz15CiAjIENPTkZJR19NTUNfQkxPQ0tfQk9VTkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKIENPTkZJR19NTUNfUFhBPXkKLSMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVXX0xFRFM9eQogQ09ORklHX0xFRFNfQ0xBU1M9bQotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0jIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAogQ09ORklHX0xFRFNfR1BJTz1tCi1DT05GSUdfTEVEU19HUElPX1BMQVRGT1JNPXkKLSMgQ09ORklHX0xFRFNfTFAzOTQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX0RBQzEyNFMwODUgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19CRDI4MDIgaXMgbm90IHNldAotCi0jCi0jIExFRCBUcmlnZ2VycwotIwogQ09ORklHX0xFRFNfVFJJR0dFUlM9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj1tCiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD1tCiBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVD1tCiBDT05GSUdfTEVEU19UUklHR0VSX0dQSU89bQogQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPW0KLQotIwotIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCi0jCi0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9bQotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfSVNMMTIwOD1tCi0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX1NBMTEwMCBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9QWEE9bQotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9bQotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAogQ09ORklHX1ZGQVRfRlM9bQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkZTRD1tCiBDT05GSUdfTkZTRF9WMz15Ci0jIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX0VYUE9SVEZTPW0KLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz1tCi1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPW0KLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE1PW0KLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX1VURjg9bQotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLUNPTkZJR19BUk1fVU5XSU5EPXkKLSMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0VSUk9SUz15Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ19FVE0gaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9bQotQ09ORklHX0NSWVBUT19BTEdBUEkyPW0KLUNPTkZJR19DUllQVE9fQUVBRDI9bQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPW0KLUNPTkZJR19DUllQVE9fSEFTSD1tCi1DT05GSUdfQ1JZUFRPX0hBU0gyPW0KLUNPTkZJR19DUllQVE9fUk5HMj1tCi1DT05GSUdfQ1JZUFRPX1BDT01QPW0KLUNPTkZJR19DUllQVE9fTUFOQUdFUj1tCi1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPW0KLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT1tCi0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0VDQj1tCi0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi1DT05GSUdfQ1JZUFRPX0FFUz1tCi0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQVJDND1tCi0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLUNPTkZJR19DUkNfQ0NJVFQ9bQotQ09ORklHX0NSQzE2PW0KIENPTkZJR19DUkNfVDEwRElGPW0KLUNPTkZJR19DUkNfSVRVX1Q9bQotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXRvbWljLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCBhMDE2MmZhLi43ZTc5NTAzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hdG9taWMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hdG9taWMuaApAQCAtNDAsMTIgKzQwLDEyIEBACiAJaW50IHJlc3VsdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKCJAIGF0b21pY19hZGRcbiIKLSIxOglsZHJleAklMCwgWyUyXVxuIgotIglhZGQJJTAsICUwLCAlM1xuIgotIglzdHJleAklMSwgJTAsIFslMl1cbiIKKyIxOglsZHJleAklMCwgWyUzXVxuIgorIglhZGQJJTAsICUwLCAlNFxuIgorIglzdHJleAklMSwgJTAsIFslM11cbiIKICIJdGVxCSUxLCAjMFxuIgogIglibmUJMWIiCi0JOiAiPSZyIiAocmVzdWx0KSwgIj0mciIgKHRtcCkKKwk6ICI9JnIiIChyZXN1bHQpLCAiPSZyIiAodG1wKSwgIitRbyIgKHYtPmNvdW50ZXIpCiAJOiAiciIgKCZ2LT5jb3VudGVyKSwgIklyIiAoaSkKIAk6ICJjYyIpOwogfQpAQCAtNTgsMTIgKzU4LDEyIEBACiAJc21wX21iKCk7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygiQCBhdG9taWNfYWRkX3JldHVyblxuIgotIjE6CWxkcmV4CSUwLCBbJTJdXG4iCi0iCWFkZAklMCwgJTAsICUzXG4iCi0iCXN0cmV4CSUxLCAlMCwgWyUyXVxuIgorIjE6CWxkcmV4CSUwLCBbJTNdXG4iCisiCWFkZAklMCwgJTAsICU0XG4iCisiCXN0cmV4CSUxLCAlMCwgWyUzXVxuIgogIgl0ZXEJJTEsICMwXG4iCiAiCWJuZQkxYiIKLQk6ICI9JnIiIChyZXN1bHQpLCAiPSZyIiAodG1wKQorCTogIj0mciIgKHJlc3VsdCksICI9JnIiICh0bXApLCAiK1FvIiAodi0+Y291bnRlcikKIAk6ICJyIiAoJnYtPmNvdW50ZXIpLCAiSXIiIChpKQogCTogImNjIik7CiAKQEAgLTc4LDEyICs3OCwxMiBAQAogCWludCByZXN1bHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygiQCBhdG9taWNfc3ViXG4iCi0iMToJbGRyZXgJJTAsIFslMl1cbiIKLSIJc3ViCSUwLCAlMCwgJTNcbiIKLSIJc3RyZXgJJTEsICUwLCBbJTJdXG4iCisiMToJbGRyZXgJJTAsIFslM11cbiIKKyIJc3ViCSUwLCAlMCwgJTRcbiIKKyIJc3RyZXgJJTEsICUwLCBbJTNdXG4iCiAiCXRlcQklMSwgIzBcbiIKICIJYm5lCTFiIgotCTogIj0mciIgKHJlc3VsdCksICI9JnIiICh0bXApCisJOiAiPSZyIiAocmVzdWx0KSwgIj0mciIgKHRtcCksICIrUW8iICh2LT5jb3VudGVyKQogCTogInIiICgmdi0+Y291bnRlciksICJJciIgKGkpCiAJOiAiY2MiKTsKIH0KQEAgLTk2LDEyICs5NiwxMiBAQAogCXNtcF9tYigpOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oIkAgYXRvbWljX3N1Yl9yZXR1cm5cbiIKLSIxOglsZHJleAklMCwgWyUyXVxuIgotIglzdWIJJTAsICUwLCAlM1xuIgotIglzdHJleAklMSwgJTAsIFslMl1cbiIKKyIxOglsZHJleAklMCwgWyUzXVxuIgorIglzdWIJJTAsICUwLCAlNFxuIgorIglzdHJleAklMSwgJTAsIFslM11cbiIKICIJdGVxCSUxLCAjMFxuIgogIglibmUJMWIiCi0JOiAiPSZyIiAocmVzdWx0KSwgIj0mciIgKHRtcCkKKwk6ICI9JnIiIChyZXN1bHQpLCAiPSZyIiAodG1wKSwgIitRbyIgKHYtPmNvdW50ZXIpCiAJOiAiciIgKCZ2LT5jb3VudGVyKSwgIklyIiAoaSkKIAk6ICJjYyIpOwogCkBAIC0xMTgsMTEgKzExOCwxMSBAQAogCiAJZG8gewogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiQCBhdG9taWNfY21weGNoZ1xuIgotCQkibGRyZXgJJTEsIFslMl1cbiIKKwkJImxkcmV4CSUxLCBbJTNdXG4iCiAJCSJtb3YJJTAsICMwXG4iCi0JCSJ0ZXEJJTEsICUzXG4iCi0JCSJzdHJleGVxICUwLCAlNCwgWyUyXVxuIgotCQkgICAgOiAiPSZyIiAocmVzKSwgIj0mciIgKG9sZHZhbCkKKwkJInRlcQklMSwgJTRcbiIKKwkJInN0cmV4ZXEgJTAsICU1LCBbJTNdXG4iCisJCSAgICA6ICI9JnIiIChyZXMpLCAiPSZyIiAob2xkdmFsKSwgIitRbyIgKHB0ci0+Y291bnRlcikKIAkJICAgIDogInIiICgmcHRyLT5jb3VudGVyKSwgIklyIiAob2xkKSwgInIiIChuZXcpCiAJCSAgICA6ICJjYyIpOwogCX0gd2hpbGUgKHJlcyk7CkBAIC0xMzcsMTIgKzEzNywxMiBAQAogCXVuc2lnbmVkIGxvbmcgdG1wLCB0bXAyOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oIkAgYXRvbWljX2NsZWFyX21hc2tcbiIKLSIxOglsZHJleAklMCwgWyUyXVxuIgotIgliaWMJJTAsICUwLCAlM1xuIgotIglzdHJleAklMSwgJTAsIFslMl1cbiIKKyIxOglsZHJleAklMCwgWyUzXVxuIgorIgliaWMJJTAsICUwLCAlNFxuIgorIglzdHJleAklMSwgJTAsIFslM11cbiIKICIJdGVxCSUxLCAjMFxuIgogIglibmUJMWIiCi0JOiAiPSZyIiAodG1wKSwgIj0mciIgKHRtcDIpCisJOiAiPSZyIiAodG1wKSwgIj0mciIgKHRtcDIpLCAiK1FvIiAoKmFkZHIpCiAJOiAiciIgKGFkZHIpLCAiSXIiIChtYXNrKQogCTogImNjIik7CiB9CkBAIC0yNDksNyArMjQ5LDcgQEAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygiQCBhdG9taWM2NF9yZWFkXG4iCiAiCWxkcmV4ZAklMCwgJUgwLCBbJTFdIgogCTogIj0mciIgKHJlc3VsdCkKLQk6ICJyIiAoJnYtPmNvdW50ZXIpCisJOiAiciIgKCZ2LT5jb3VudGVyKSwgIlFvIiAodi0+Y291bnRlcikKIAkpOwogCiAJcmV0dXJuIHJlc3VsdDsKQEAgLTI2MCwxMSArMjYwLDExIEBACiAJdTY0IHRtcDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKCJAIGF0b21pYzY0X3NldFxuIgotIjE6CWxkcmV4ZAklMCwgJUgwLCBbJTFdXG4iCi0iCXN0cmV4ZAklMCwgJTIsICVIMiwgWyUxXVxuIgorIjE6CWxkcmV4ZAklMCwgJUgwLCBbJTJdXG4iCisiCXN0cmV4ZAklMCwgJTMsICVIMywgWyUyXVxuIgogIgl0ZXEJJTAsICMwXG4iCiAiCWJuZQkxYiIKLQk6ICI9JnIiICh0bXApCisJOiAiPSZyIiAodG1wKSwgIj1RbyIgKHYtPmNvdW50ZXIpCiAJOiAiciIgKCZ2LT5jb3VudGVyKSwgInIiIChpKQogCTogImNjIik7CiB9CkBAIC0yNzUsMTMgKzI3NSwxMyBAQAogCXVuc2lnbmVkIGxvbmcgdG1wOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oIkAgYXRvbWljNjRfYWRkXG4iCi0iMToJbGRyZXhkCSUwLCAlSDAsIFslMl1cbiIKLSIJYWRkcwklMCwgJTAsICUzXG4iCi0iCWFkYwklSDAsICVIMCwgJUgzXG4iCi0iCXN0cmV4ZAklMSwgJTAsICVIMCwgWyUyXVxuIgorIjE6CWxkcmV4ZAklMCwgJUgwLCBbJTNdXG4iCisiCWFkZHMJJTAsICUwLCAlNFxuIgorIglhZGMJJUgwLCAlSDAsICVINFxuIgorIglzdHJleGQJJTEsICUwLCAlSDAsIFslM11cbiIKICIJdGVxCSUxLCAjMFxuIgogIglibmUJMWIiCi0JOiAiPSZyIiAocmVzdWx0KSwgIj0mciIgKHRtcCkKKwk6ICI9JnIiIChyZXN1bHQpLCAiPSZyIiAodG1wKSwgIitRbyIgKHYtPmNvdW50ZXIpCiAJOiAiciIgKCZ2LT5jb3VudGVyKSwgInIiIChpKQogCTogImNjIik7CiB9CkBAIC0yOTQsMTMgKzI5NCwxMyBAQAogCXNtcF9tYigpOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oIkAgYXRvbWljNjRfYWRkX3JldHVyblxuIgotIjE6CWxkcmV4ZAklMCwgJUgwLCBbJTJdXG4iCi0iCWFkZHMJJTAsICUwLCAlM1xuIgotIglhZGMJJUgwLCAlSDAsICVIM1xuIgotIglzdHJleGQJJTEsICUwLCAlSDAsIFslMl1cbiIKKyIxOglsZHJleGQJJTAsICVIMCwgWyUzXVxuIgorIglhZGRzCSUwLCAlMCwgJTRcbiIKKyIJYWRjCSVIMCwgJUgwLCAlSDRcbiIKKyIJc3RyZXhkCSUxLCAlMCwgJUgwLCBbJTNdXG4iCiAiCXRlcQklMSwgIzBcbiIKICIJYm5lCTFiIgotCTogIj0mciIgKHJlc3VsdCksICI9JnIiICh0bXApCisJOiAiPSZyIiAocmVzdWx0KSwgIj0mciIgKHRtcCksICIrUW8iICh2LT5jb3VudGVyKQogCTogInIiICgmdi0+Y291bnRlciksICJyIiAoaSkKIAk6ICJjYyIpOwogCkBAIC0zMTUsMTMgKzMxNSwxMyBAQAogCXVuc2lnbmVkIGxvbmcgdG1wOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oIkAgYXRvbWljNjRfc3ViXG4iCi0iMToJbGRyZXhkCSUwLCAlSDAsIFslMl1cbiIKLSIJc3VicwklMCwgJTAsICUzXG4iCi0iCXNiYwklSDAsICVIMCwgJUgzXG4iCi0iCXN0cmV4ZAklMSwgJTAsICVIMCwgWyUyXVxuIgorIjE6CWxkcmV4ZAklMCwgJUgwLCBbJTNdXG4iCisiCXN1YnMJJTAsICUwLCAlNFxuIgorIglzYmMJJUgwLCAlSDAsICVINFxuIgorIglzdHJleGQJJTEsICUwLCAlSDAsIFslM11cbiIKICIJdGVxCSUxLCAjMFxuIgogIglibmUJMWIiCi0JOiAiPSZyIiAocmVzdWx0KSwgIj0mciIgKHRtcCkKKwk6ICI9JnIiIChyZXN1bHQpLCAiPSZyIiAodG1wKSwgIitRbyIgKHYtPmNvdW50ZXIpCiAJOiAiciIgKCZ2LT5jb3VudGVyKSwgInIiIChpKQogCTogImNjIik7CiB9CkBAIC0zMzQsMTMgKzMzNCwxMyBAQAogCXNtcF9tYigpOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oIkAgYXRvbWljNjRfc3ViX3JldHVyblxuIgotIjE6CWxkcmV4ZAklMCwgJUgwLCBbJTJdXG4iCi0iCXN1YnMJJTAsICUwLCAlM1xuIgotIglzYmMJJUgwLCAlSDAsICVIM1xuIgotIglzdHJleGQJJTEsICUwLCAlSDAsIFslMl1cbiIKKyIxOglsZHJleGQJJTAsICVIMCwgWyUzXVxuIgorIglzdWJzCSUwLCAlMCwgJTRcbiIKKyIJc2JjCSVIMCwgJUgwLCAlSDRcbiIKKyIJc3RyZXhkCSUxLCAlMCwgJUgwLCBbJTNdXG4iCiAiCXRlcQklMSwgIzBcbiIKICIJYm5lCTFiIgotCTogIj0mciIgKHJlc3VsdCksICI9JnIiICh0bXApCisJOiAiPSZyIiAocmVzdWx0KSwgIj0mciIgKHRtcCksICIrUW8iICh2LT5jb3VudGVyKQogCTogInIiICgmdi0+Y291bnRlciksICJyIiAoaSkKIAk6ICJjYyIpOwogCkBAIC0zNTgsMTIgKzM1OCwxMiBAQAogCiAJZG8gewogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiQCBhdG9taWM2NF9jbXB4Y2hnXG4iCi0JCSJsZHJleGQJCSUxLCAlSDEsIFslMl1cbiIKKwkJImxkcmV4ZAkJJTEsICVIMSwgWyUzXVxuIgogCQkibW92CQklMCwgIzBcbiIKLQkJInRlcQkJJTEsICUzXG4iCi0JCSJ0ZXFlcQkJJUgxLCAlSDNcbiIKLQkJInN0cmV4ZGVxCSUwLCAlNCwgJUg0LCBbJTJdIgotCQk6ICI9JnIiIChyZXMpLCAiPSZyIiAob2xkdmFsKQorCQkidGVxCQklMSwgJTRcbiIKKwkJInRlcWVxCQklSDEsICVINFxuIgorCQkic3RyZXhkZXEJJTAsICU1LCAlSDUsIFslM10iCisJCTogIj0mciIgKHJlcyksICI9JnIiIChvbGR2YWwpLCAiK1FvIiAocHRyLT5jb3VudGVyKQogCQk6ICJyIiAoJnB0ci0+Y291bnRlciksICJyIiAob2xkKSwgInIiIChuZXcpCiAJCTogImNjIik7CiAJfSB3aGlsZSAocmVzKTsKQEAgLTM4MSwxMSArMzgxLDExIEBACiAJc21wX21iKCk7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygiQCBhdG9taWM2NF94Y2hnXG4iCi0iMToJbGRyZXhkCSUwLCAlSDAsIFslMl1cbiIKLSIJc3RyZXhkCSUxLCAlMywgJUgzLCBbJTJdXG4iCisiMToJbGRyZXhkCSUwLCAlSDAsIFslM11cbiIKKyIJc3RyZXhkCSUxLCAlNCwgJUg0LCBbJTNdXG4iCiAiCXRlcQklMSwgIzBcbiIKICIJYm5lCTFiIgotCTogIj0mciIgKHJlc3VsdCksICI9JnIiICh0bXApCisJOiAiPSZyIiAocmVzdWx0KSwgIj0mciIgKHRtcCksICIrUW8iIChwdHItPmNvdW50ZXIpCiAJOiAiciIgKCZwdHItPmNvdW50ZXIpLCAiciIgKG5ldykKIAk6ICJjYyIpOwogCkBAIC00MDIsMTYgKzQwMiwxNiBAQAogCXNtcF9tYigpOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oIkAgYXRvbWljNjRfZGVjX2lmX3Bvc2l0aXZlXG4iCi0iMToJbGRyZXhkCSUwLCAlSDAsIFslMl1cbiIKKyIxOglsZHJleGQJJTAsICVIMCwgWyUzXVxuIgogIglzdWJzCSUwLCAlMCwgIzFcbiIKICIJc2JjCSVIMCwgJUgwLCAjMFxuIgogIgl0ZXEJJUgwLCAjMFxuIgogIglibWkJMmZcbiIKLSIJc3RyZXhkCSUxLCAlMCwgJUgwLCBbJTJdXG4iCisiCXN0cmV4ZAklMSwgJTAsICVIMCwgWyUzXVxuIgogIgl0ZXEJJTEsICMwXG4iCiAiCWJuZQkxYlxuIgogIjI6IgotCTogIj0mciIgKHJlc3VsdCksICI9JnIiICh0bXApCisJOiAiPSZyIiAocmVzdWx0KSwgIj0mciIgKHRtcCksICIrUW8iICh2LT5jb3VudGVyKQogCTogInIiICgmdi0+Y291bnRlcikKIAk6ICJjYyIpOwogCkBAIC00MjksMTggKzQyOSwxOCBAQAogCXNtcF9tYigpOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oIkAgYXRvbWljNjRfYWRkX3VubGVzc1xuIgotIjE6CWxkcmV4ZAklMCwgJUgwLCBbJTNdXG4iCi0iCXRlcQklMCwgJTRcbiIKLSIJdGVxZXEJJUgwLCAlSDRcbiIKKyIxOglsZHJleGQJJTAsICVIMCwgWyU0XVxuIgorIgl0ZXEJJTAsICU1XG4iCisiCXRlcWVxCSVIMCwgJUg1XG4iCiAiCW1vdmVxCSUxLCAjMFxuIgogIgliZXEJMmZcbiIKLSIJYWRkcwklMCwgJTAsICU1XG4iCi0iCWFkYwklSDAsICVIMCwgJUg1XG4iCi0iCXN0cmV4ZAklMiwgJTAsICVIMCwgWyUzXVxuIgorIglhZGRzCSUwLCAlMCwgJTZcbiIKKyIJYWRjCSVIMCwgJUgwLCAlSDZcbiIKKyIJc3RyZXhkCSUyLCAlMCwgJUgwLCBbJTRdXG4iCiAiCXRlcQklMiwgIzBcbiIKICIJYm5lCTFiXG4iCiAiMjoiCi0JOiAiPSZyIiAodmFsKSwgIj0mciIgKHJldCksICI9JnIiICh0bXApCisJOiAiPSZyIiAodmFsKSwgIityIiAocmV0KSwgIj0mciIgKHRtcCksICIrUW8iICh2LT5jb3VudGVyKQogCTogInIiICgmdi0+Y291bnRlciksICJyIiAodSksICJyIiAoYSkKIAk6ICJjYyIpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IDUxNjYyZmUuLjY3NTBiOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0xMjEsNCArMTIxLDggQEAKIGV4dGVybiB2b2lkIGVsZl9zZXRfcGVyc29uYWxpdHkoY29uc3Qgc3RydWN0IGVsZjMyX2hkciAqKTsKICNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KQllbGZfc2V0X3BlcnNvbmFsaXR5KCYoZXgpKQogCitzdHJ1Y3QgbW1fc3RydWN0OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXJjaF9yYW5kb21pemVfYnJrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKKyNkZWZpbmUgYXJjaF9yYW5kb21pemVfYnJrIGFyY2hfcmFuZG9taXplX2JyaworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2h3Y2FwLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9od2NhcC5oCmluZGV4IGY3YmQ1MmIuLmMxMDYyYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2h3Y2FwLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaHdjYXAuaApAQCAtMTksNiArMTksNyBAQAogI2RlZmluZSBIV0NBUF9ORU9OCTQwOTYKICNkZWZpbmUgSFdDQVBfVkZQdjMJODE5MgogI2RlZmluZSBIV0NBUF9WRlB2M0QxNgkxNjM4NAorI2RlZmluZSBIV0NBUF9UTFMJMzI3NjgKIAogI2lmIGRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoX19BU1NFTUJMWV9fKQogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9pby5oCmluZGV4IGM5ODAxNTYuLjEyNjFiMWY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiAvKgogICogSVNBIEkvTyBidXMgbWVtb3J5IGFkZHJlc3NlcyBhcmUgMToxIHdpdGggdGhlIHBoeXNpY2FsIGFkZHJlc3MuCkBAIC0xNzksMjUgKzE4MCwzOCBAQAogICogSU8gcG9ydCBwcmltaXRpdmVzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICovCiAjaWZkZWYgX19tZW1fcGNpCi0jZGVmaW5lIHJlYWRiKGMpICh7IF9fdTggIF9fdiA9IF9fcmF3X3JlYWRiKF9fbWVtX3BjaShjKSk7IF9fdjsgfSkKLSNkZWZpbmUgcmVhZHcoYykgKHsgX191MTYgX192ID0gbGUxNl90b19jcHUoKF9fZm9yY2UgX19sZTE2KSBcCisjZGVmaW5lIHJlYWRiX3JlbGF4ZWQoYykgKHsgdTggIF9fdiA9IF9fcmF3X3JlYWRiKF9fbWVtX3BjaShjKSk7IF9fdjsgfSkKKyNkZWZpbmUgcmVhZHdfcmVsYXhlZChjKSAoeyB1MTYgX192ID0gbGUxNl90b19jcHUoKF9fZm9yY2UgX19sZTE2KSBcCiAJCQkJCV9fcmF3X3JlYWR3KF9fbWVtX3BjaShjKSkpOyBfX3Y7IH0pCi0jZGVmaW5lIHJlYWRsKGMpICh7IF9fdTMyIF9fdiA9IGxlMzJfdG9fY3B1KChfX2ZvcmNlIF9fbGUzMikgXAorI2RlZmluZSByZWFkbF9yZWxheGVkKGMpICh7IHUzMiBfX3YgPSBsZTMyX3RvX2NwdSgoX19mb3JjZSBfX2xlMzIpIFwKIAkJCQkJX19yYXdfcmVhZGwoX19tZW1fcGNpKGMpKSk7IF9fdjsgfSkKLSNkZWZpbmUgcmVhZGJfcmVsYXhlZChhZGRyKSByZWFkYihhZGRyKQotI2RlZmluZSByZWFkd19yZWxheGVkKGFkZHIpIHJlYWR3KGFkZHIpCi0jZGVmaW5lIHJlYWRsX3JlbGF4ZWQoYWRkcikgcmVhZGwoYWRkcikKKworI2RlZmluZSB3cml0ZWJfcmVsYXhlZCh2LGMpCSgodm9pZClfX3Jhd193cml0ZWIodixfX21lbV9wY2koYykpKQorI2RlZmluZSB3cml0ZXdfcmVsYXhlZCh2LGMpCSgodm9pZClfX3Jhd193cml0ZXcoKF9fZm9yY2UgdTE2KSBcCisJCQkJCWNwdV90b19sZTE2KHYpLF9fbWVtX3BjaShjKSkpCisjZGVmaW5lIHdyaXRlbF9yZWxheGVkKHYsYykJKCh2b2lkKV9fcmF3X3dyaXRlbCgoX19mb3JjZSB1MzIpIFwKKwkJCQkJY3B1X3RvX2xlMzIodiksX19tZW1fcGNpKGMpKSkKKworI2lmZGVmIENPTkZJR19BUk1fRE1BX01FTV9CVUZGRVJBQkxFCisjZGVmaW5lIF9faW9ybWIoKQkJcm1iKCkKKyNkZWZpbmUgX19pb3dtYigpCQl3bWIoKQorI2Vsc2UKKyNkZWZpbmUgX19pb3JtYigpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9faW93bWIoKQkJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNkZWZpbmUgcmVhZGIoYykJCSh7IHU4ICBfX3YgPSByZWFkYl9yZWxheGVkKGMpOyBfX2lvcm1iKCk7IF9fdjsgfSkKKyNkZWZpbmUgcmVhZHcoYykJCSh7IHUxNiBfX3YgPSByZWFkd19yZWxheGVkKGMpOyBfX2lvcm1iKCk7IF9fdjsgfSkKKyNkZWZpbmUgcmVhZGwoYykJCSh7IHUzMiBfX3YgPSByZWFkbF9yZWxheGVkKGMpOyBfX2lvcm1iKCk7IF9fdjsgfSkKKworI2RlZmluZSB3cml0ZWIodixjKQkJKHsgX19pb3dtYigpOyB3cml0ZWJfcmVsYXhlZCh2LGMpOyB9KQorI2RlZmluZSB3cml0ZXcodixjKQkJKHsgX19pb3dtYigpOyB3cml0ZXdfcmVsYXhlZCh2LGMpOyB9KQorI2RlZmluZSB3cml0ZWwodixjKQkJKHsgX19pb3dtYigpOyB3cml0ZWxfcmVsYXhlZCh2LGMpOyB9KQogCiAjZGVmaW5lIHJlYWRzYihwLGQsbCkJCV9fcmF3X3JlYWRzYihfX21lbV9wY2kocCksZCxsKQogI2RlZmluZSByZWFkc3cocCxkLGwpCQlfX3Jhd19yZWFkc3coX19tZW1fcGNpKHApLGQsbCkKICNkZWZpbmUgcmVhZHNsKHAsZCxsKQkJX19yYXdfcmVhZHNsKF9fbWVtX3BjaShwKSxkLGwpCiAKLSNkZWZpbmUgd3JpdGViKHYsYykJCV9fcmF3X3dyaXRlYih2LF9fbWVtX3BjaShjKSkKLSNkZWZpbmUgd3JpdGV3KHYsYykJCV9fcmF3X3dyaXRldygoX19mb3JjZSBfX3UxNikgXAotCQkJCQljcHVfdG9fbGUxNih2KSxfX21lbV9wY2koYykpCi0jZGVmaW5lIHdyaXRlbCh2LGMpCQlfX3Jhd193cml0ZWwoKF9fZm9yY2UgX191MzIpIFwKLQkJCQkJY3B1X3RvX2xlMzIodiksX19tZW1fcGNpKGMpKQotCiAjZGVmaW5lIHdyaXRlc2IocCxkLGwpCQlfX3Jhd193cml0ZXNiKF9fbWVtX3BjaShwKSxkLGwpCiAjZGVmaW5lIHdyaXRlc3cocCxkLGwpCQlfX3Jhd193cml0ZXN3KF9fbWVtX3BjaShwKSxkLGwpCiAjZGVmaW5lIHdyaXRlc2wocCxkLGwpCQlfX3Jhd193cml0ZXNsKF9fbWVtX3BjaShwKSxkLGwpCkBAIC0yNDQsMTMgKzI1OCwxMyBAQAogICogaW97cmVhZCx3cml0ZX17OCwxNiwzMn0gbWFjcm9zCiAgKi8KICNpZm5kZWYgaW9yZWFkOAotI2RlZmluZSBpb3JlYWQ4KHApCSh7IHVuc2lnbmVkIGludCBfX3YgPSBfX3Jhd19yZWFkYihwKTsgX192OyB9KQotI2RlZmluZSBpb3JlYWQxNihwKQkoeyB1bnNpZ25lZCBpbnQgX192ID0gbGUxNl90b19jcHUoKF9fZm9yY2UgX19sZTE2KV9fcmF3X3JlYWR3KHApKTsgX192OyB9KQotI2RlZmluZSBpb3JlYWQzMihwKQkoeyB1bnNpZ25lZCBpbnQgX192ID0gbGUzMl90b19jcHUoKF9fZm9yY2UgX19sZTMyKV9fcmF3X3JlYWRsKHApKTsgX192OyB9KQorI2RlZmluZSBpb3JlYWQ4KHApCSh7IHVuc2lnbmVkIGludCBfX3YgPSBfX3Jhd19yZWFkYihwKTsgX19pb3JtYigpOyBfX3Y7IH0pCisjZGVmaW5lIGlvcmVhZDE2KHApCSh7IHVuc2lnbmVkIGludCBfX3YgPSBsZTE2X3RvX2NwdSgoX19mb3JjZSBfX2xlMTYpX19yYXdfcmVhZHcocCkpOyBfX2lvcm1iKCk7IF9fdjsgfSkKKyNkZWZpbmUgaW9yZWFkMzIocCkJKHsgdW5zaWduZWQgaW50IF9fdiA9IGxlMzJfdG9fY3B1KChfX2ZvcmNlIF9fbGUzMilfX3Jhd19yZWFkbChwKSk7IF9faW9ybWIoKTsgX192OyB9KQogCi0jZGVmaW5lIGlvd3JpdGU4KHYscCkJX19yYXdfd3JpdGViKHYsIHApCi0jZGVmaW5lIGlvd3JpdGUxNih2LHApCV9fcmF3X3dyaXRldygoX19mb3JjZSBfX3UxNiljcHVfdG9fbGUxNih2KSwgcCkKLSNkZWZpbmUgaW93cml0ZTMyKHYscCkJX19yYXdfd3JpdGVsKChfX2ZvcmNlIF9fdTMyKWNwdV90b19sZTMyKHYpLCBwKQorI2RlZmluZSBpb3dyaXRlOCh2LHApCSh7IF9faW93bWIoKTsgKHZvaWQpX19yYXdfd3JpdGViKHYsIHApOyB9KQorI2RlZmluZSBpb3dyaXRlMTYodixwKQkoeyBfX2lvd21iKCk7ICh2b2lkKV9fcmF3X3dyaXRldygoX19mb3JjZSBfX3UxNiljcHVfdG9fbGUxNih2KSwgcCk7IH0pCisjZGVmaW5lIGlvd3JpdGUzMih2LHApCSh7IF9faW93bWIoKTsgKHZvaWQpX19yYXdfd3JpdGVsKChfX2ZvcmNlIF9fdTMyKWNwdV90b19sZTMyKHYpLCBwKTsgfSkKIAogI2RlZmluZSBpb3JlYWQ4X3JlcChwLGQsYykJX19yYXdfcmVhZHNiKHAsZCxjKQogI2RlZmluZSBpb3JlYWQxNl9yZXAocCxkLGMpCV9fcmF3X3JlYWRzdyhwLGQsYykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2lycS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaXJxLmgKaW5kZXggMjM3MjgyZi4uMjcyMWE1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaXJxLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaXJxLmgKQEAgLTcsNiArNyw4IEBACiAjZGVmaW5lIGlycV9jYW5vbmljYWxpemUoaSkJKGkpCiAjZW5kaWYKIAorI2RlZmluZSBOUl9JUlFTX0xFR0FDWQkxNgorCiAvKgogICogVXNlIHRoaXMgdmFsdWUgdG8gaW5kaWNhdGUgbGFjayBvZiBpbnRlcnJ1cHQKICAqIGNhcGFiaWxpdHkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2tleGVjLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9rZXhlYy5oCmluZGV4IGRmMTVhMGQuLjhlYzllZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2tleGVjLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20va2V4ZWMuaApAQCAtMTksMTAgKzE5LDI2IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLXN0cnVjdCBraW1hZ2U7Ci0vKiBQcm92aWRlIGEgZHVtbXkgZGVmaW5pdGlvbiB0byBhdm9pZCBidWlsZCBmYWlsdXJlcy4gKi8KKy8qKgorICogY3Jhc2hfc2V0dXBfcmVncygpIC0gc2F2ZSByZWdpc3RlcnMgZm9yIHRoZSBwYW5pYyBrZXJuZWwKKyAqIEBuZXdyZWdzOiByZWdpc3RlcnMgYXJlIHNhdmVkIGhlcmUKKyAqIEBvbGRyZWdzOiByZWdpc3RlcnMgdG8gYmUgc2F2ZWQgKG1heSBiZSAlTlVMTCkKKyAqCisgKiBGdW5jdGlvbiBjb3BpZXMgbWFjaGluZSByZWdpc3RlcnMgZnJvbSBAb2xkcmVncyB0byBAbmV3cmVncy4gSWYgQG9sZHJlZ3MgaXMKKyAqICVOVUxMIHRoZW4gY3VycmVudCByZWdpc3RlcnMgYXJlIHN0b3JlZCB0aGVyZS4KKyAqLwogc3RhdGljIGlubGluZSB2b2lkIGNyYXNoX3NldHVwX3JlZ3Moc3RydWN0IHB0X3JlZ3MgKm5ld3JlZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHB0X3JlZ3MgKm9sZHJlZ3MpIHsgfQorCQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqb2xkcmVncykKK3sKKwlpZiAob2xkcmVncykgeworCQltZW1jcHkobmV3cmVncywgb2xkcmVncywgc2l6ZW9mKCpuZXdyZWdzKSk7CisJfSBlbHNlIHsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdG1pYSAlMCwge3IwIC0gcjE1fSIKKwkJCQkgICAgICA6IDogInIiICgmbmV3cmVncy0+QVJNX3IwKSk7CisJCV9fYXNtX18gX192b2xhdGlsZV9fICgibXJzICUwLCBjcHNyIgorCQkJCSAgICAgIDogIj1yIiAobmV3cmVncy0+QVJNX2Nwc3IpKTsKKwl9Cit9CiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20va2dkYi5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20va2dkYi5oCmluZGV4IDY3YWY0YjguLjA4MjY1OTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2tnZGIuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9rZ2RiLmgKQEAgLTcwLDExICs3MCwxMSBAQAogI2RlZmluZSBfR1BfUkVHUwkJMTYKICNkZWZpbmUgX0ZQX1JFR1MJCTgKICNkZWZpbmUgX0VYVFJBX1JFR1MJCTIKLSNkZWZpbmUgR0RCX01BWF9SRUdTCQkoX0dQX1JFR1MgKyAoX0ZQX1JFR1MgKiAzKSArIF9FWFRSQV9SRUdTKQorI2RlZmluZSBEQkdfTUFYX1JFR19OVU0JCShfR1BfUkVHUyArIChfRlBfUkVHUyAqIDMpICsgX0VYVFJBX1JFR1MpCiAKICNkZWZpbmUgS0dEQl9NQVhfTk9fQ1BVUwkxCiAjZGVmaW5lIEJVRk1BWAkJCTQwMAotI2RlZmluZSBOVU1SRUdCWVRFUwkJKEdEQl9NQVhfUkVHUyA8PCAyKQorI2RlZmluZSBOVU1SRUdCWVRFUwkJKERCR19NQVhfUkVHX05VTSA8PCAyKQogI2RlZmluZSBOVU1DUklUUkVHQllURVMJCSgzMiA8PCAyKQogCiAjZGVmaW5lIF9SMAkJCTAKQEAgLTkzLDcgKzkzLDcgQEAKICNkZWZpbmUgX1NQVAkJCTEzCiAjZGVmaW5lIF9MUgkJCTE0CiAjZGVmaW5lIF9QQwkJCTE1Ci0jZGVmaW5lIF9DUFNSCQkJKEdEQl9NQVhfUkVHUyAtIDEpCisjZGVmaW5lIF9DUFNSCQkJKERCR19NQVhfUkVHX05VTSAtIDEpCiAKIC8qCiAgKiBTbyB0aGF0IHdlIGNhbiBkZW5vdGUgdGhlIGVuZCBvZiBhIGZyYW1lIGZvciB0cmFjaW5nLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbG9jYWw2NC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbG9jYWw2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YzkzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9sb2NhbDY0LmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsNjQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvYXJjaC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9hcmNoLmgKaW5kZXggYzU5ODQyZC4uOGEwZGQxOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9hcmNoLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9hcmNoLmgKQEAgLTIwLDYgKzIwLDcgQEAKIAkgKiBieSBhc3NlbWJsZXIgY29kZSBpbiBoZWFkLlMsIGhlYWQtY29tbW9uLlMKIAkgKi8KIAl1bnNpZ25lZCBpbnQJCW5yOwkJLyogYXJjaGl0ZWN0dXJlIG51bWJlcgkqLworCXVuc2lnbmVkIGludAkJbnJfaXJxczsJLyogbnVtYmVyIG9mIElSUXMgKi8KIAl1bnNpZ25lZCBpbnQJCXBoeXNfaW87CS8qIHN0YXJ0IG9mIHBoeXNpY2FsIGlvCSovCiAJdW5zaWduZWQgaW50CQlpb19wZ19vZmZzdDsJLyogYnl0ZSBvZmZzZXQgZm9yIGlvIAogCQkJCQkJICogcGFnZSB0YWJlIGVudHJ5CSovCkBAIC0zNyw2ICszOCw3IEBACiAJdm9pZAkJCSgqZml4dXApKHN0cnVjdCBtYWNoaW5lX2Rlc2MgKiwKIAkJCQkJIHN0cnVjdCB0YWcgKiwgY2hhciAqKiwKIAkJCQkJIHN0cnVjdCBtZW1pbmZvICopOworCXZvaWQJCQkoKnJlc2VydmUpKHZvaWQpOy8qIHJlc2VydmUgbWVtIGJsb2NrcwkqLwogCXZvaWQJCQkoKm1hcF9pbykodm9pZCk7LyogSU8gbWFwcGluZyBmdW5jdGlvbgkqLwogCXZvaWQJCQkoKmluaXRfaXJxKSh2b2lkKTsKIAlzdHJ1Y3Qgc3lzX3RpbWVyCSp0aW1lcjsJCS8qIHN5c3RlbSB0aWNrIHRpbWVyCSovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL2lycS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9pcnEuaAppbmRleCA4OTIwYjJkNi4uY2UzZWVlOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvaXJxLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9pcnEuaApAQCAtMTcsNiArMTcsNyBAQAogLyoKICAqIFRoaXMgaXMgaW50ZXJuYWwuICBEbyBub3QgdXNlIGl0LgogICovCitleHRlcm4gdW5zaWduZWQgaW50IGFyY2hfbnJfaXJxczsKIGV4dGVybiB2b2lkICgqaW5pdF9hcmNoX2lycSkodm9pZCk7CiBleHRlcm4gdm9pZCBpbml0X0ZJUSh2b2lkKTsKIGV4dGVybiBpbnQgc2hvd19maXFfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKiwgdm9pZCAqKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvbWFwLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL21hcC5oCmluZGV4IDc0MmMyYWFlYi4uZDJmZWRiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9tYXAuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL21hcC5oCkBAIC0yNyw2ICsyNyw4IEBACiAjZGVmaW5lIE1UX01FTU9SWQkJOQogI2RlZmluZSBNVF9ST00JCQkxMAogI2RlZmluZSBNVF9NRU1PUllfTk9OQ0FDSEVECTExCisjZGVmaW5lIE1UX01FTU9SWV9EVENNCQkxMgorI2RlZmluZSBNVF9NRU1PUllfSVRDTQkJMTMKIAogI2lmZGVmIENPTkZJR19NTVUKIGV4dGVybiB2b2lkIGlvdGFibGVfaW5pdChzdHJ1Y3QgbWFwX2Rlc2MgKiwgaW50KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvcGNpLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL3BjaS5oCmluZGV4IDUyZjBkYTEuLjE2MzMwYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvcGNpLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9wY2kuaApAQCAtNDYsNiArNDYsNyBAQAogCQkJCQkvKiBJUlEgbWFwcGluZwkJCQkqLwogCWludAkJKCptYXBfaXJxKShzdHJ1Y3QgcGNpX2RldiAqLCB1OCwgdTgpOwogCXN0cnVjdCBod19wY2kJKmh3OworCXZvaWQJCSpwcml2YXRlX2RhdGE7CS8qIHBsYXRmb3JtIGNvbnRyb2xsZXIgcHJpdmF0ZSBkYXRhCSovCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWVtYmxvY2suaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbWJsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRiYzQzYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbWJsb2NrLmgKQEAgLTAsMCArMSwxNiBAQAorI2lmbmRlZiBfQVNNX0FSTV9NRU1CTE9DS19ICisjZGVmaW5lIF9BU01fQVJNX01FTUJMT0NLX0gKKworI2lmZGVmIENPTkZJR19NTVUKK2V4dGVybiBwaHlzX2FkZHJfdCBsb3dtZW1fZW5kX2FkZHI7CisjZGVmaW5lIE1FTUJMT0NLX1JFQUxfTElNSVQJbG93bWVtX2VuZF9hZGRyCisjZWxzZQorI2RlZmluZSBNRU1CTE9DS19SRUFMX0xJTUlUCTAKKyNlbmRpZgorCitzdHJ1Y3QgbWVtaW5mbzsKK3N0cnVjdCBtYWNoaW5lX2Rlc2M7CisKK2V4dGVybiB2b2lkIGFybV9tZW1ibG9ja19pbml0KHN0cnVjdCBtZW1pbmZvICosIHN0cnVjdCBtYWNoaW5lX2Rlc2MgKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWVtb3J5LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tZW1vcnkuaAppbmRleCA0MzEyZWU1Li4yM2MyZThlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tZW1vcnkuaApAQCAtMTI0LDYgKzEyNCwxNSBAQAogI2VuZGlmIC8qICFDT05GSUdfTU1VICovCiAKIC8qCisgKiBXZSBmaXggdGhlIFRDTSBtZW1vcmllcyBtYXggMzIgS2lCIElUQ00gcmVzcCBEVENNIGF0IHRoZXNlCisgKiBsb2NhdGlvbnMKKyAqLworI2lmZGVmIENPTkZJR19IQVZFX1RDTQorI2RlZmluZSBJVENNX09GRlNFVAlVTCgweGZmZmUwMDAwKQorI2RlZmluZSBEVENNX09GRlNFVAlVTCgweGZmZmU4MDAwKQorI2VuZGlmCisKKy8qCiAgKiBQaHlzaWNhbCB2cyB2aXJ0dWFsIFJBTSBhZGRyZXNzIHNwYWNlIGNvbnZlcnNpb24uICBUaGVzZSBhcmUKICAqIHByaXZhdGUgZGVmaW5pdGlvbnMgd2hpY2ggc2hvdWxkIE5PVCBiZSB1c2VkIG91dHNpZGUgbWVtb3J5LmgKICAqIGZpbGVzLiAgVXNlIHZpcnRfdG9fcGh5cy9waHlzX3RvX3ZpcnQvX19wYS9fX3ZhIGluc3RlYWQuCkBAIC0xNTgsNyArMTY3LDcgQEAKICNlbmRpZgogCiAjaWZuZGVmIGFyY2hfYWRqdXN0X3pvbmVzCi0jZGVmaW5lIGFyY2hfYWRqdXN0X3pvbmVzKG5vZGUsc2l6ZSxob2xlcykgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBhcmNoX2FkanVzdF96b25lcyhzaXplLGhvbGVzKSBkbyB7IH0gd2hpbGUgKDApCiAjZWxpZiAhZGVmaW5lZChDT05GSUdfWk9ORV9ETUEpCiAjZXJyb3IgImN1c3RvbSBhcmNoX2FkanVzdF96b25lcygpIHJlcXVpcmVzIENPTkZJR19aT05FX0RNQSIKICNlbmRpZgpAQCAtMjM0LDc2ICsyNDMsMTEgQEAKICAqICB2aXJ0X3RvX3BhZ2UoaykJY29udmVydCBhIF92YWxpZF8gdmlydHVhbCBhZGRyZXNzIHRvIHN0cnVjdCBwYWdlICoKICAqICB2aXJ0X2FkZHJfdmFsaWQoaykJaW5kaWNhdGVzIHdoZXRoZXIgYSB2aXJ0dWFsIGFkZHJlc3MgaXMgdmFsaWQKICAqLwotI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCi0KICNkZWZpbmUgQVJDSF9QRk5fT0ZGU0VUCQlQSFlTX1BGTl9PRkZTRVQKIAogI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCXBmbl90b19wYWdlKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCiAjZGVmaW5lIHZpcnRfYWRkcl92YWxpZChrYWRkcikJKCh1bnNpZ25lZCBsb25nKShrYWRkcikgPj0gUEFHRV9PRkZTRVQgJiYgKHVuc2lnbmVkIGxvbmcpKGthZGRyKSA8ICh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5KQogCi0jZGVmaW5lIFBIWVNfVE9fTklEKGFkZHIpCSgwKQotCi0jZWxzZSAvKiBDT05GSUdfRElTQ09OVElHTUVNICovCi0KLS8qCi0gKiBUaGlzIGlzIG1vcmUgY29tcGxleC4gIFdlIGhhdmUgYSBzZXQgb2YgbWVtX21hcCBhcnJheXMgc3ByZWFkCi0gKiBhcm91bmQgaW4gbWVtb3J5LgotICovCi0jaW5jbHVkZSA8bGludXgvbnVtYS5oPgotCi0jZGVmaW5lIGFyY2hfcGZuX3RvX25pZChwZm4pCVBGTl9UT19OSUQocGZuKQotI2RlZmluZSBhcmNoX2xvY2FsX3BhZ2Vfb2Zmc2V0KHBmbiwgbmlkKSBMT0NBTF9NQVBfTlIoKHBmbikgPDwgUEFHRV9TSElGVCkKLQotI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCQkJCQlcCi0JKEFERFJfVE9fTUFQQkFTRShrYWRkcikgKyBMT0NBTF9NQVBfTlIoa2FkZHIpKQotCi0jZGVmaW5lIHZpcnRfYWRkcl92YWxpZChrYWRkcikJKEtWQUREUl9UT19OSUQoa2FkZHIpIDwgTUFYX05VTU5PREVTKQotCi0vKgotICogQ29tbW9uIGRpc2NvbnRpZ21lbSBzdHVmZi4KLSAqICBQSFlTX1RPX05JRCBpcyB1c2VkIGJ5IHRoZSBBUk0ga2VybmVsL3NldHVwLmMKLSAqLwotI2RlZmluZSBQSFlTX1RPX05JRChhZGRyKQlQRk5fVE9fTklEKChhZGRyKSA+PiBQQUdFX1NISUZUKQotCi0vKgotICogR2l2ZW4gYSBrYWRkciwgQUREUl9UT19NQVBCQVNFIGZpbmRzIHRoZSBvd25pbmcgbm9kZSBvZiB0aGUgbWVtb3J5Ci0gKiBhbmQgcmV0dXJucyB0aGUgbWVtX21hcCBvZiB0aGF0IG5vZGUuCi0gKi8KLSNkZWZpbmUgQUREUl9UT19NQVBCQVNFKGthZGRyKQlOT0RFX01FTV9NQVAoS1ZBRERSX1RPX05JRChrYWRkcikpCi0KLS8qCi0gKiBHaXZlbiBhIHBhZ2UgZnJhbWUgbnVtYmVyLCBmaW5kIHRoZSBvd25pbmcgbm9kZSBvZiB0aGUgbWVtb3J5Ci0gKiBhbmQgcmV0dXJucyB0aGUgbWVtX21hcCBvZiB0aGF0IG5vZGUuCi0gKi8KLSNkZWZpbmUgUEZOX1RPX01BUEJBU0UocGZuKQlOT0RFX01FTV9NQVAoUEZOX1RPX05JRChwZm4pKQotCi0jaWZkZWYgTk9ERV9NRU1fU0laRV9CSVRTCi0jZGVmaW5lIE5PREVfTUVNX1NJWkVfTUFTSwkoKDEgPDwgTk9ERV9NRU1fU0laRV9CSVRTKSAtIDEpCi0KLS8qCi0gKiBHaXZlbiBhIGtlcm5lbCBhZGRyZXNzLCBmaW5kIHRoZSBob21lIG5vZGUgb2YgdGhlIHVuZGVybHlpbmcgbWVtb3J5LgotICovCi0jZGVmaW5lIEtWQUREUl9UT19OSUQoYWRkcikgXAotCSgoKHVuc2lnbmVkIGxvbmcpKGFkZHIpIC0gUEFHRV9PRkZTRVQpID4+IE5PREVfTUVNX1NJWkVfQklUUykKLQotLyoKLSAqIEdpdmVuIGEgcGFnZSBmcmFtZSBudW1iZXIsIGNvbnZlcnQgaXQgdG8gYSBub2RlIGlkLgotICovCi0jZGVmaW5lIFBGTl9UT19OSUQocGZuKSBcCi0JKCgocGZuKSAtIFBIWVNfUEZOX09GRlNFVCkgPj4gKE5PREVfTUVNX1NJWkVfQklUUyAtIFBBR0VfU0hJRlQpKQotCi0vKgotICogR2l2ZW4gYSBrYWRkciwgTE9DQUxfTUVNX01BUCBmaW5kcyB0aGUgb3duaW5nIG5vZGUgb2YgdGhlIG1lbW9yeQotICogYW5kIHJldHVybnMgdGhlIGluZGV4IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFwcHJvcHJpYXRlIHBhZ2UgaW4gdGhlCi0gKiBub2RlJ3MgbWVtX21hcC4KLSAqLwotI2RlZmluZSBMT0NBTF9NQVBfTlIoYWRkcikgXAotCSgoKHVuc2lnbmVkIGxvbmcpKGFkZHIpICYgTk9ERV9NRU1fU0laRV9NQVNLKSA+PiBQQUdFX1NISUZUKQotCi0jZW5kaWYgLyogTk9ERV9NRU1fU0laRV9CSVRTICovCi0KLSNlbmRpZiAvKiAhQ09ORklHX0RJU0NPTlRJR01FTSAqLwotCiAvKgogICogT3B0aW9uYWwgY29oZXJlbmN5IHN1cHBvcnQuICBDdXJyZW50bHkgdXNlZCBvbmx5IGJ5IHNlbGVjdGVkCiAgKiBJbnRlbCBYU0MzLWJhc2VkIHN5c3RlbXMuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tbXpvbmUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21tem9uZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTYzYTRmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21tem9uZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoKLSAqICBhcmNoL2FybS9pbmNsdWRlL2FzbS9tbXpvbmUuaAotICoKLSAqICAxOTk5LTEyLTI5CU5pY29sYXMgUGl0cmUJCUNyZWF0ZWQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0jaWZuZGVmIF9fQVNNX01NWk9ORV9ICi0jZGVmaW5lIF9fQVNNX01NWk9ORV9ICi0KLS8qCi0gKiBDdXJyZW50bHkgZGVmaW5lZCBpbiBhcmNoL2FybS9tbS9kaXNjb250aWcuYwotICovCi1leHRlcm4gcGdfZGF0YV90IGRpc2NvbnRpZ19ub2RlX2RhdGFbXTsKLQotLyoKLSAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG5vZGUgZGF0YSBmb3Igbm9kZSBuLgotICovCi0jZGVmaW5lIE5PREVfREFUQShuaWQpCQkoJmRpc2NvbnRpZ19ub2RlX2RhdGFbbmlkXSkKLQotLyoKLSAqIE5PREVfTUVNX01BUCBnaXZlcyB0aGUga2FkZHIgZm9yIHRoZSBtZW1fbWFwIG9mIHRoZSBub2RlLgotICovCi0jZGVmaW5lIE5PREVfTUVNX01BUChuaWQpCShOT0RFX0RBVEEobmlkKS0+bm9kZV9tZW1fbWFwKQotCi0jaW5jbHVkZSA8bWFjaC9tZW1vcnkuaD4KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IDlkY2IxMWUuLmM5NzRiZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0xODQsNiArMTg0LDQyIEBACiAjZGVmaW5lIHByZWRpY2F0ZSh4KQkJKCh4KSAmIDB4ZjAwMDAwMDApCiAjZGVmaW5lIFBSRURJQ0FURV9BTFdBWVMJMHhlMDAwMDAwMAogCisvKgorICoga3Byb2JlLWJhc2VkIGV2ZW50IHRyYWNlciBzdXBwb3J0CisgKi8KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2RlZmluZSBNQVhfUkVHX09GRlNFVCAob2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIEFSTV9PUklHX3IwKSkKKworZXh0ZXJuIGludCByZWdzX3F1ZXJ5X3JlZ2lzdGVyX29mZnNldChjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBjb25zdCBjaGFyICpyZWdzX3F1ZXJ5X3JlZ2lzdGVyX25hbWUodW5zaWduZWQgaW50IG9mZnNldCk7CitleHRlcm4gYm9vbCByZWdzX3dpdGhpbl9rZXJuZWxfc3RhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcik7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZWdzX2dldF9rZXJuZWxfc3RhY2tfbnRoKHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IG4pOworCisvKioKKyAqIHJlZ3NfZ2V0X3JlZ2lzdGVyKCkgLSBnZXQgcmVnaXN0ZXIgdmFsdWUgZnJvbSBpdHMgb2Zmc2V0CisgKiBAcmVnczoJICAgcHRfcmVncyBmcm9tIHdoaWNoIHJlZ2lzdGVyIHZhbHVlIGlzIGdvdHRlbgorICogQG9mZnNldDogICAgb2Zmc2V0IG51bWJlciBvZiB0aGUgcmVnaXN0ZXIuCisgKgorICogcmVnc19nZXRfcmVnaXN0ZXIgcmV0dXJucyB0aGUgdmFsdWUgb2YgYSByZWdpc3RlciB3aG9zZSBvZmZzZXQgZnJvbSBAcmVncy4KKyAqIFRoZSBAb2Zmc2V0IGlzIHRoZSBvZmZzZXQgb2YgdGhlIHJlZ2lzdGVyIGluIHN0cnVjdCBwdF9yZWdzLgorICogSWYgQG9mZnNldCBpcyBiaWdnZXIgdGhhbiBNQVhfUkVHX09GRlNFVCwgdGhpcyByZXR1cm5zIDAuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZWdzX2dldF9yZWdpc3RlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkJICAgICAgdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKwlpZiAodW5saWtlbHkob2Zmc2V0ID4gTUFYX1JFR19PRkZTRVQpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gKih1bnNpZ25lZCBsb25nICopKCh1bnNpZ25lZCBsb25nKXJlZ3MgKyBvZmZzZXQpOworfQorCisvKiBWYWxpZCBvbmx5IGZvciBLZXJuZWwgbW9kZSB0cmFwcy4gKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBrZXJuZWxfc3RhY2tfcG9pbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZXR1cm4gcmVncy0+QVJNX3NwOworfQorCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zZXR1cC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc2V0dXAuaAppbmRleCBmMzkyZmI0Li5mMWU1YTliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zZXR1cC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmgKQEAgLTIwMSw4ICsyMDEsNyBAQAogc3RydWN0IG1lbWJhbmsgewogCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBzaXplOwotCXVuc2lnbmVkIHNob3J0IG5vZGU7Ci0JdW5zaWduZWQgc2hvcnQgaGlnaG1lbTsKKwl1bnNpZ25lZCBpbnQgaGlnaG1lbTsKIH07CiAKIHN0cnVjdCBtZW1pbmZvIHsKQEAgLTIxMiw5ICsyMTEsOCBAQAogCiBleHRlcm4gc3RydWN0IG1lbWluZm8gbWVtaW5mbzsKIAotI2RlZmluZSBmb3JfZWFjaF9ub2RlYmFuayhpdGVyLG1pLG5vKQkJCVwKLQlmb3IgKGl0ZXIgPSAwOyBpdGVyIDwgKG1pKS0+bnJfYmFua3M7IGl0ZXIrKykJXAotCQlpZiAoKG1pKS0+YmFua1tpdGVyXS5ub2RlID09IG5vKQorI2RlZmluZSBmb3JfZWFjaF9iYW5rKGl0ZXIsbWkpCQkJCVwKKwlmb3IgKGl0ZXIgPSAwOyBpdGVyIDwgKG1pKS0+bnJfYmFua3M7IGl0ZXIrKykKIAogI2RlZmluZSBiYW5rX3Bmbl9zdGFydChiYW5rKQlfX3BoeXNfdG9fcGZuKChiYW5rKS0+c3RhcnQpCiAjZGVmaW5lIGJhbmtfcGZuX2VuZChiYW5rKQlfX3BoeXNfdG9fcGZuKChiYW5rKS0+c3RhcnQgKyAoYmFuayktPnNpemUpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zdGFja3Byb3RlY3Rvci5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3RhY2twcm90ZWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTAwMzMyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3RhY2twcm90ZWN0b3IuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogR0NDIHN0YWNrIHByb3RlY3RvciBzdXBwb3J0LgorICoKKyAqIFN0YWNrIHByb3RlY3RvciB3b3JrcyBieSBwdXR0aW5nIHByZWRlZmluZWQgcGF0dGVybiBhdCB0aGUgc3RhcnQgb2YKKyAqIHRoZSBzdGFjayBmcmFtZSBhbmQgdmVyaWZ5aW5nIHRoYXQgaXQgaGFzbid0IGJlZW4gb3ZlcndyaXR0ZW4gd2hlbgorICogcmV0dXJuaW5nIGZyb20gdGhlIGZ1bmN0aW9uLiAgVGhlIHBhdHRlcm4gaXMgY2FsbGVkIHN0YWNrIGNhbmFyeQorICogYW5kIGdjYyBleHBlY3RzIGl0IHRvIGJlIGRlZmluZWQgYnkgYSBnbG9iYWwgdmFyaWFibGUgY2FsbGVkCisgKiAiX19zdGFja19jaGtfZ3VhcmQiIG9uIEFSTS4gIFRoaXMgdW5mb3J0dW5hdGVseSBtZWFucyB0aGF0IG9uIFNNUAorICogd2UgY2Fubm90IGhhdmUgYSBkaWZmZXJlbnQgY2FuYXJ5IHZhbHVlIHBlciB0YXNrLgorICovCisKKyNpZm5kZWYgX0FTTV9TVEFDS1BST1RFQ1RPUl9ICisjZGVmaW5lIF9BU01fU1RBQ0tQUk9URUNUT1JfSCAxCisKKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fc3RhY2tfY2hrX2d1YXJkOworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgc3RhY2twcm90ZWN0b3IgY2FuYXJ5IHZhbHVlLgorICoKKyAqIE5PVEU6IHRoaXMgbXVzdCBvbmx5IGJlIGNhbGxlZCBmcm9tIGZ1bmN0aW9ucyB0aGF0IG5ldmVyIHJldHVybiwKKyAqIGFuZCBpdCBtdXN0IGFsd2F5cyBiZSBpbmxpbmVkLgorICovCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYm9vdF9pbml0X3N0YWNrX2NhbmFyeSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgY2FuYXJ5OworCisJLyogVHJ5IHRvIGdldCBhIHNlbWkgcmFuZG9tIGluaXRpYWwgdmFsdWUuICovCisJZ2V0X3JhbmRvbV9ieXRlcygmY2FuYXJ5LCBzaXplb2YoY2FuYXJ5KSk7CisJY2FuYXJ5IF49IExJTlVYX1ZFUlNJT05fQ09ERTsKKworCWN1cnJlbnQtPnN0YWNrX2NhbmFyeSA9IGNhbmFyeTsKKwlfX3N0YWNrX2Noa19ndWFyZCA9IGN1cnJlbnQtPnN0YWNrX2NhbmFyeTsKK30KKworI2VuZGlmCS8qIF9BU01fU1RBQ0tQUk9URUNUT1JfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3lzdGVtLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCA1ZjRmNDgwLi44YmExY2NmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zeXN0ZW0uaApAQCAtODMsNyArODMsNyBAQAogCiB2b2lkIGhvb2tfZmF1bHRfY29kZShpbnQgbnIsIGludCAoKmZuKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBpbnQsCiAJCQkJICAgICAgIHN0cnVjdCBwdF9yZWdzICopLAotCQkgICAgIGludCBzaWcsIGNvbnN0IGNoYXIgKm5hbWUpOworCQkgICAgIGludCBzaWcsIGludCBjb2RlLCBjb25zdCBjaGFyICpuYW1lKTsKIAogI2RlZmluZSB4Y2hnKHB0cix4KSBcCiAJKChfX3R5cGVvZl9fKCoocHRyKSkpX194Y2hnKCh1bnNpZ25lZCBsb25nKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS90bHMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Rscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MWQ2ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90bHMuaApAQCAtMCwwICsxLDQ2IEBACisjaWZuZGVmIF9fQVNNQVJNX1RMU19ICisjZGVmaW5lIF9fQVNNQVJNX1RMU19ICisKKyNpZmRlZiBfX0FTU0VNQkxZX18KKwkubWFjcm8gc2V0X3Rsc19ub25lLCB0cCwgdG1wMSwgdG1wMgorCS5lbmRtCisKKwkubWFjcm8gc2V0X3Rsc192NmssIHRwLCB0bXAxLCB0bXAyCisJbWNyCXAxNSwgMCwgXHRwLCBjMTMsIGMwLCAzCQlAIHNldCBUTFMgcmVnaXN0ZXIKKwkuZW5kbQorCisJLm1hY3JvIHNldF90bHNfdjYsIHRwLCB0bXAxLCB0bXAyCisJbGRyCVx0bXAxLCA9ZWxmX2h3Y2FwCisJbGRyCVx0bXAxLCBbXHRtcDEsICMwXQorCW1vdglcdG1wMiwgIzB4ZmZmZjBmZmYKKwl0c3QJXHRtcDEsICNIV0NBUF9UTFMJCUAgaGFyZHdhcmUgVExTIGF2YWlsYWJsZT8KKwltY3JuZQlwMTUsIDAsIFx0cCwgYzEzLCBjMCwgMwkJQCB5ZXMsIHNldCBUTFMgcmVnaXN0ZXIKKwlzdHJlcQlcdHAsIFtcdG1wMiwgIy0xNV0JCUAgc2V0IFRMUyB2YWx1ZSBhdCAweGZmZmYwZmYwCisJLmVuZG0KKworCS5tYWNybyBzZXRfdGxzX3NvZnR3YXJlLCB0cCwgdG1wMSwgdG1wMgorCW1vdglcdG1wMSwgIzB4ZmZmZjBmZmYKKwlzdHIJXHRwLCBbXHRtcDEsICMtMTVdCQlAIHNldCBUTFMgdmFsdWUgYXQgMHhmZmZmMGZmMAorCS5lbmRtCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19UTFNfUkVHX0VNVUwKKyNkZWZpbmUgdGxzX2VtdQkJMQorI2RlZmluZSBoYXNfdGxzX3JlZwkJMQorI2RlZmluZSBzZXRfdGxzCQlzZXRfdGxzX25vbmUKKyNlbGlmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA3IHx8CQkJCQlcCisJKF9fTElOVVhfQVJNX0FSQ0hfXyA9PSA2ICYmIGRlZmluZWQoQ09ORklHX0NQVV8zMnY2SykpCisjZGVmaW5lIHRsc19lbXUJCTAKKyNkZWZpbmUgaGFzX3Rsc19yZWcJCTEKKyNkZWZpbmUgc2V0X3RscwkJc2V0X3Rsc192NmsKKyNlbGlmIF9fTElOVVhfQVJNX0FSQ0hfXyA9PSA2CisjZGVmaW5lIHRsc19lbXUJCTAKKyNkZWZpbmUgaGFzX3Rsc19yZWcJCShlbGZfaHdjYXAgJiBIV0NBUF9UTFMpCisjZGVmaW5lIHNldF90bHMJCXNldF90bHNfdjYKKyNlbHNlCisjZGVmaW5lIHRsc19lbXUJCTAKKyNkZWZpbmUgaGFzX3Rsc19yZWcJCTAKKyNkZWZpbmUgc2V0X3RscwkJc2V0X3Rsc19zb2Z0d2FyZQorI2VuZGlmCisKKyNlbmRpZgkvKiBfX0FTTUFSTV9UTFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdmZwbWFjcm9zLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS92ZnBtYWNyb3MuaAppbmRleCA0MjJmM2NjLi4zZDVmYzQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS92ZnBtYWNyb3MuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS92ZnBtYWNyb3MuaApAQCAtMyw2ICszLDggQEAKICAqCiAgKiBBc3NlbWJsZXItb25seSBmaWxlIGNvbnRhaW5pbmcgVkZQIG1hY3JvcyBhbmQgcmVnaXN0ZXIgZGVmaW5pdGlvbnMuCiAgKi8KKyNpbmNsdWRlIDxhc20vaHdjYXAuaD4KKwogI2luY2x1ZGUgInZmcC5oIgogCiBAIE1hY3JvcyB0byBhbGxvdyBidWlsZGluZyB3aXRoIG9sZCB0b29sa2l0cyAod2l0aCBubyBWRlAgc3VwcG9ydCkKQEAgLTIyLDEyICsyNCwyMCBAQAogCUxEQwlwMTEsIGNyMCwgW1xiYXNlXSwjMzIqNAkJICAgIEAgRkxETUlBRCBcYmFzZSEsIHtkMC1kMTV9CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfVkZQdjMKKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPD0gNgorCWxkcglcdG1wLCA9ZWxmX2h3Y2FwCQkgICAgQCBtYXkgbm90IGhhdmUgTVZGUiByZWdzCisJbGRyCVx0bXAsIFtcdG1wLCAjMF0KKwl0c3QJXHRtcCwgI0hXQ0FQX1ZGUHYzRDE2CisJbGRjZXEJcDExLCBjcjAsIFtcYmFzZV0sIzMyKjQJCSAgICBAIEZMRE1JQUQgXGJhc2UhLCB7ZDE2LWQzMX0KKwlhZGRuZQlcYmFzZSwgXGJhc2UsICMzMio0CQkgICAgQCBzdGVwIG92ZXIgdW51c2VkIHJlZ2lzdGVyIHNwYWNlCisjZWxzZQogCVZGUEZNUlgJXHRtcCwgTVZGUjAJCQkgICAgQCBNZWRpYSBhbmQgVkZQIEZlYXR1cmUgUmVnaXN0ZXIgMAogCWFuZAlcdG1wLCBcdG1wLCAjTVZGUjBfQV9TSU1EX01BU0sJICAgIEAgQV9TSU1EIGZpZWxkCiAJY21wCVx0bXAsICMyCQkJICAgIEAgMzIgeCA2NGJpdCByZWdpc3RlcnM/CiAJbGRjZXFsCXAxMSwgY3IwLCBbXGJhc2VdLCMzMio0CQkgICAgQCBGTERNSUFEIFxiYXNlISwge2QxNi1kMzF9CiAJYWRkbmUJXGJhc2UsIFxiYXNlLCAjMzIqNAkJICAgIEAgc3RlcCBvdmVyIHVudXNlZCByZWdpc3RlciBzcGFjZQogI2VuZGlmCisjZW5kaWYKIAkuZW5kbQogCiAJQCB3cml0ZSBhbGwgdGhlIHdvcmtpbmcgcmVnaXN0ZXJzIG91dCBvZiB0aGUgVkZQCkBAIC0zOCwxMCArNDgsMTggQEAKIAlTVEMJcDExLCBjcjAsIFtcYmFzZV0sIzMyKjQJCSAgICBAIEZTVE1JQUQgXGJhc2UhLCB7ZDAtZDE1fQogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1ZGUHYzCisjaWYgX19MSU5VWF9BUk1fQVJDSF9fIDw9IDYKKwlsZHIJXHRtcCwgPWVsZl9od2NhcAkJICAgIEAgbWF5IG5vdCBoYXZlIE1WRlIgcmVncworCWxkcglcdG1wLCBbXHRtcCwgIzBdCisJdHN0CVx0bXAsICNIV0NBUF9WRlB2M0QxNgorCXN0Y2VxCXAxMSwgY3IwLCBbXGJhc2VdLCMzMio0CQkgICAgQCBGU1RNSUFEIFxiYXNlISwge2QxNi1kMzF9CisJYWRkbmUJXGJhc2UsIFxiYXNlLCAjMzIqNAkJICAgIEAgc3RlcCBvdmVyIHVudXNlZCByZWdpc3RlciBzcGFjZQorI2Vsc2UKIAlWRlBGTVJYCVx0bXAsIE1WRlIwCQkJICAgIEAgTWVkaWEgYW5kIFZGUCBGZWF0dXJlIFJlZ2lzdGVyIDAKIAlhbmQJXHRtcCwgXHRtcCwgI01WRlIwX0FfU0lNRF9NQVNLCSAgICBAIEFfU0lNRCBmaWVsZAogCWNtcAlcdG1wLCAjMgkJCSAgICBAIDMyIHggNjRiaXQgcmVnaXN0ZXJzPwogCXN0Y2VxbAlwMTEsIGNyMCwgW1xiYXNlXSwjMzIqNAkJICAgIEAgRlNUTUlBRCBcYmFzZSEsIHtkMTYtZDMxfQogCWFkZG5lCVxiYXNlLCBcYmFzZSwgIzMyKjQJCSAgICBAIHN0ZXAgb3ZlciB1bnVzZWQgcmVnaXN0ZXIgc3BhY2UKICNlbmRpZgorI2VuZGlmCiAJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQppbmRleCAyNmQzMDJjLi45ODBiNzhlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCkBAIC0xMywxMCArMTMsMTIgQEAKIAogIyBPYmplY3QgZmlsZSBsaXN0cy4KIAotb2JqLXkJCTo9IGNvbXBhdC5vIGVsZi5vIGVudHJ5LWFybXYubyBlbnRyeS1jb21tb24ubyBpcnEubyBcCitvYmoteQkJOj0gZWxmLm8gZW50cnktYXJtdi5vIGVudHJ5LWNvbW1vbi5vIGlycS5vIFwKIAkJICAgcHJvY2Vzcy5vIHB0cmFjZS5vIHJldHVybl9hZGRyZXNzLm8gc2V0dXAubyBzaWduYWwubyBcCiAJCSAgIHN5c19hcm0ubyBzdGFja3RyYWNlLm8gdGltZS5vIHRyYXBzLm8KIAorb2JqLSQoQ09ORklHX0RFUFJFQ0FURURfUEFSQU1fU1RSVUNUKSArPSBjb21wYXQubworCiBvYmotJChDT05GSUdfTEVEUykJCSs9IGxlZHMubwogb2JqLSQoQ09ORklHX09DX0VUTSkJCSs9IGV0bS5vCiAKQEAgLTM5LDYgKzQxLDcgQEAKIG9iai0kKENPTkZJR19LR0RCKQkJKz0ga2dkYi5vCiBvYmotJChDT05GSUdfQVJNX1VOV0lORCkJKz0gdW53aW5kLm8KIG9iai0kKENPTkZJR19IQVZFX1RDTSkJCSs9IHRjbS5vCitvYmotJChDT05GSUdfQ1JBU0hfRFVNUCkJKz0gY3Jhc2hfZHVtcC5vCiAKIG9iai0kKENPTkZJR19DUlVOQ0gpCQkrPSBjcnVuY2gubyBjcnVuY2gtYml0cy5vCiBBRkxBR1NfY3J1bmNoLWJpdHMubwkJOj0gLVdhLC1tY3B1PWVwOTMxMgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL2FybS9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCA4ODM1MTE1Li44NWYyYTAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL2FybS9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtNDAsNiArNDAsOSBAQAogaW50IG1haW4odm9pZCkKIHsKICAgREVGSU5FKFRTS19BQ1RJVkVfTU0sCQlvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIGFjdGl2ZV9tbSkpOworI2lmZGVmIENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUgorICBERUZJTkUoVFNLX1NUQUNLX0NBTkFSWSwJb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBzdGFja19jYW5hcnkpKTsKKyNlbmRpZgogICBCTEFOSygpOwogICBERUZJTkUoVElfRkxBR1MsCQlvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIGZsYWdzKSk7CiAgIERFRklORShUSV9QUkVFTVBULAkJb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBwcmVlbXB0X2NvdW50KSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvY29tcGF0LmMgYi9hcmNoL2FybS9rZXJuZWwvY29tcGF0LmMKaW5kZXggMGExMzg1NC4uOTI1NjUyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2NvbXBhdC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9jb21wYXQuYwpAQCAtMjE3LDEwICsyMTcsMyBAQAogCXN0cnVjdCBwYXJhbV9zdHJ1Y3QgKnBhcmFtcyA9IChzdHJ1Y3QgcGFyYW1fc3RydWN0ICopdGFnczsKIAlidWlsZF90YWdfbGlzdChwYXJhbXMsICZwYXJhbXMtPnUyKTsKIH0KLQotdm9pZCBfX2luaXQgc3F1YXNoX21lbV90YWdzKHN0cnVjdCB0YWcgKnRhZykKLXsKLQlmb3IgKDsgdGFnLT5oZHIuc2l6ZTsgdGFnID0gdGFnX25leHQodGFnKSkKLQkJaWYgKHRhZy0+aGRyLnRhZyA9PSBBVEFHX01FTSkKLQkJCXRhZy0+aGRyLnRhZyA9IEFUQUdfTk9ORTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9jb21wYXQuaCBiL2FyY2gvYXJtL2tlcm5lbC9jb21wYXQuaAppbmRleCAyN2U2MWE2Li4zOTI2NGFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvY29tcGF0LmgKKysrIGIvYXJjaC9hcm0va2VybmVsL2NvbXBhdC5oCkBAIC05LDUgKzksMyBAQAogKi8KIAogZXh0ZXJuIHZvaWQgY29udmVydF90b190YWdfbGlzdChzdHJ1Y3QgdGFnICp0YWdzKTsKLQotZXh0ZXJuIHZvaWQgc3F1YXNoX21lbV90YWdzKHN0cnVjdCB0YWcgKnRhZyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvY3Jhc2hfZHVtcC5jIGIvYXJjaC9hcm0va2VybmVsL2NyYXNoX2R1bXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDNiODUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL2NyYXNoX2R1bXAuYwpAQCAtMCwwICsxLDYwIEBACisvKgorICogYXJjaC9hcm0va2VybmVsL2NyYXNoX2R1bXAuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbi4KKyAqIEF1dGhvcjogTWlrYSBXZXN0ZXJiZXJnCisgKgorICogVGhpcyBjb2RlIGlzIHRha2VuIGZyb20gYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfNjQuYworICogICBDcmVhdGVkIGJ5OiBIYXJpcHJhc2FkIE5lbGxpdGhlZXJ0aGEgKGhhcmlAaW4uaWJtLmNvbSkKKyAqICAgQ29weXJpZ2h0IChDKSBJQk0gQ29ycG9yYXRpb24sIDIwMDQuIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYXNoX2R1bXAuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworLyogc3RvcmVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGVsZiBoZWFkZXIgb2YgY3Jhc2ggaW1hZ2UgKi8KK3Vuc2lnbmVkIGxvbmcgbG9uZyBlbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfTUFYOworCisvKioKKyAqIGNvcHlfb2xkbWVtX3BhZ2UoKSAtIGNvcHkgb25lIHBhZ2UgZnJvbSBvbGQga2VybmVsIG1lbW9yeQorICogQHBmbjogcGFnZSBmcmFtZSBudW1iZXIgdG8gYmUgY29waWVkCisgKiBAYnVmOiBidWZmZXIgd2hlcmUgdGhlIGNvcGllZCBwYWdlIGlzIHBsYWNlZAorICogQGNzaXplOiBudW1iZXIgb2YgYnl0ZXMgdG8gY29weQorICogQG9mZnNldDogb2Zmc2V0IGluIGJ5dGVzIGludG8gdGhlIHBhZ2UKKyAqIEB1c2VyYnVmOiBpZiBzZXQsIEBidWYgaXMgaW50IGhlIHVzZXIgYWRkcmVzcyBzcGFjZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIG9uZSBwYWdlIGZyb20gb2xkIGtlcm5lbCBtZW1vcnkgaW50byBidWZmZXIgcG9pbnRlZCBieQorICogQGJ1Zi4gSWYgQGJ1ZiBpcyBpbiB1c2Vyc3BhY2UsIHNldCBAdXNlcmJ1ZiB0byAlMS4gUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMKKyAqIGNvcGllZCBvciBuZWdhdGl2ZSBlcnJvciBpbiBjYXNlIG9mIGZhaWx1cmUuCisgKi8KK3NzaXplX3QgY29weV9vbGRtZW1fcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgY2hhciAqYnVmLAorCQkJIHNpemVfdCBjc2l6ZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkgaW50IHVzZXJidWYpCit7CisJdm9pZCAqdmFkZHI7CisKKwlpZiAoIWNzaXplKQorCQlyZXR1cm4gMDsKKworCXZhZGRyID0gaW9yZW1hcChwZm4gPDwgUEFHRV9TSElGVCwgUEFHRV9TSVpFKTsKKwlpZiAoIXZhZGRyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICh1c2VyYnVmKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCB2YWRkciArIG9mZnNldCwgY3NpemUpKSB7CisJCQlpb3VubWFwKHZhZGRyKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJfSBlbHNlIHsKKwkJbWVtY3B5KGJ1ZiwgdmFkZHIgKyBvZmZzZXQsIGNzaXplKTsKKwl9CisKKwlpb3VubWFwKHZhZGRyKTsKKwlyZXR1cm4gY3NpemU7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUwppbmRleCA3ZWU0OGU3Li5iYjhlOTNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxhc20vdGhyZWFkX25vdGlmeS5oPgogI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8YXNtL3Rscy5oPgogCiAjaW5jbHVkZSAiZW50cnktaGVhZGVyLlMiCiAKQEAgLTE2Miw4ICsxNjMsNiBAQAogCUAgIHI0IC0gb3JpZ19yMCAoc2VlIHB0X3JlZ3MgZGVmaW5pdGlvbiBpbiBwdHJhY2UuaCkKIAlACiAJc3RtaWEJcjUsIHtyMCAtIHI0fQotCi0JYXNtX3RyYWNlX2hhcmRpcnFzX29mZgogCS5lbmRtCiAKIAkuYWxpZ24JNQpAQCAtMjA0LDcgKzIwMyw3IEBACiAJQAogCUAgSVJRcyBvZmYgYWdhaW4gYmVmb3JlIHB1bGxpbmcgcHJlc2VydmVkIGRhdGEgb2ZmIHRoZSBzdGFjawogCUAKLQlkaXNhYmxlX2lycQorCWRpc2FibGVfaXJxX25vdHJhY2UKIAogCUAKIAlAIHJlc3RvcmUgU1BTUiBhbmQgcmVzdGFydCB0aGUgaW5zdHJ1Y3Rpb24KQEAgLTIxOCw2ICsyMTcsOSBAQAogX19pcnFfc3ZjOgogCXN2Y19lbnRyeQogCisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCisJYmwJdHJhY2VfaGFyZGlycXNfb2ZmCisjZW5kaWYKICNpZmRlZiBDT05GSUdfUFJFRU1QVAogCWdldF90aHJlYWRfaW5mbyB0c2sKIAlsZHIJcjgsIFt0c2ssICNUSV9QUkVFTVBUXQkJQCBnZXQgcHJlZW1wdCBjb3VudApAQCAtMjkxLDcgKzI5Myw3IEBACiAJQAogCUAgSVJRcyBvZmYgYWdhaW4gYmVmb3JlIHB1bGxpbmcgcHJlc2VydmVkIGRhdGEgb2ZmIHRoZSBzdGFjawogCUAKLTE6CWRpc2FibGVfaXJxCisxOglkaXNhYmxlX2lycV9ub3RyYWNlCiAKIAlACiAJQCByZXN0b3JlIFNQU1IgYW5kIHJlc3RhcnQgdGhlIGluc3RydWN0aW9uCkBAIC0zMjcsNyArMzI5LDcgQEAKIAlACiAJQCBJUlFzIG9mZiBhZ2FpbiBiZWZvcmUgcHVsbGluZyBwcmVzZXJ2ZWQgZGF0YSBvZmYgdGhlIHN0YWNrCiAJQAotCWRpc2FibGVfaXJxCisJZGlzYWJsZV9pcnFfbm90cmFjZQogCiAJQAogCUAgcmVzdG9yZSBTUFNSIGFuZCByZXN0YXJ0IHRoZSBpbnN0cnVjdGlvbgpAQCAtMzkzLDggKzM5NSw2IEBACiAJQCBDbGVhciBGUCB0byBtYXJrIHRoZSBmaXJzdCBzdGFjayBmcmFtZQogCUAKIAl6ZXJvX2ZwCi0KLQlhc21fdHJhY2VfaGFyZGlycXNfb2ZmCiAJLmVuZG0KIAogCS5tYWNybwlrdXNlcl9jbXB4Y2hnX2NoZWNrCkBAIC00NjUsOSArNDY1LDYgQEAKICBUSFVNQigJbW92bmUJcjAsICMwCQkpCiAgVEhVTUIoCXN0cm5lCXIwLCBbcjBdCSkKICNlbmRpZgotI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUwotCWJsCXRyYWNlX2hhcmRpcnFzX29uCi0jZW5kaWYKIAogCW1vdgl3aHksICMwCiAJYglyZXRfdG9fdXNlcgpAQCAtNzM5LDExICs3MzYsMTEgQEAKICNpZmRlZiBDT05GSUdfTU1VCiAJbGRyCXI2LCBbcjIsICNUSV9DUFVfRE9NQUlOXQogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfSEFTX1RMU19SRUcpCi0JbWNyCXAxNSwgMCwgcjMsIGMxMywgYzAsIDMJCUAgc2V0IFRMUyByZWdpc3RlcgotI2VsaWYgIWRlZmluZWQoQ09ORklHX1RMU19SRUdfRU1VTCkKLQltb3YJcjQsICMweGZmZmYwZmZmCi0Jc3RyCXIzLCBbcjQsICMtMTVdCQkJQCBUTFMgdmFsIGF0IDB4ZmZmZjBmZjAKKwlzZXRfdGxzCXIzLCByNCwgcjUKKyNpZiBkZWZpbmVkKENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUikgJiYgIWRlZmluZWQoQ09ORklHX1NNUCkKKwlsZHIJcjcsIFtyMiwgI1RJX1RBU0tdCisJbGRyCXI4LCA9X19zdGFja19jaGtfZ3VhcmQKKwlsZHIJcjcsIFtyNywgI1RTS19TVEFDS19DQU5BUlldCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTU1VCiAJbWNyCXAxNSwgMCwgcjYsIGMzLCBjMCwgMAkJQCBTZXQgZG9tYWluIHJlZ2lzdGVyCkBAIC03NTMsNiArNzUwLDkgQEAKIAlsZHIJcjAsID10aHJlYWRfbm90aWZ5X2hlYWQKIAltb3YJcjEsICNUSFJFQURfTk9USUZZX1NXSVRDSAogCWJsCWF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluCisjaWYgZGVmaW5lZChDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1IpICYmICFkZWZpbmVkKENPTkZJR19TTVApCisJc3RyCXI3LCBbcjhdCisjZW5kaWYKICBUSFVNQigJbW92CWlwLCByNAkJCSAgICkKIAltb3YJcjAsIHI1CiAgQVJNKAlsZG1pYQlyNCwge3I0IC0gc2wsIGZwLCBzcCwgcGN9ICApCUAgTG9hZCBhbGwgcmVncyBzYXZlZCBwcmV2aW91c2x5CkBAIC0xMDA5LDE3ICsxMDA5LDEyIEBACiAgKi8KIAogX19rdXNlcl9nZXRfdGxzOgkJCQlAIDB4ZmZmZjBmZTAKLQotI2lmICFkZWZpbmVkKENPTkZJR19IQVNfVExTX1JFRykgJiYgIWRlZmluZWQoQ09ORklHX1RMU19SRUdfRU1VTCkKLQlsZHIJcjAsIFtwYywgIygxNiAtIDgpXQkJQCBUTFMgc3RvcmVkIGF0IDB4ZmZmZjBmZjAKLSNlbHNlCi0JbXJjCXAxNSwgMCwgcjAsIGMxMywgYzAsIDMJCUAgcmVhZCBUTFMgcmVnaXN0ZXIKLSNlbmRpZgorCWxkcglyMCwgW3BjLCAjKDE2IC0gOCldCUAgcmVhZCBUTFMsIHNldCBpbiBrdXNlcl9nZXRfdGxzX2luaXQKIAl1c3JfcmV0CWxyCi0KLQkucmVwCTUKLQkud29yZAkwCQkJQCBwYWQgdXAgdG8gX19rdXNlcl9oZWxwZXJfdmVyc2lvbgotCS5lbmRyCisJbXJjCXAxNSwgMCwgcjAsIGMxMywgYzAsIDMJQCAweGZmZmYwZmU4IGhhcmR3YXJlIFRMUyBjb2RlCisJLnJlcAk0CisJLndvcmQJMAkJCUAgMHhmZmZmMGZmMCBzb2Z0d2FyZSBUTFMgdmFsdWUsIHRoZW4KKwkuZW5kcgkJCQlAIHBhZCB1cCB0byBfX2t1c2VyX2hlbHBlcl92ZXJzaW9uCiAKIC8qCiAgKiBSZWZlcmVuY2UgZGVjbGFyYXRpb246CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaXJxLmMgYi9hcmNoL2FybS9rZXJuZWwvaXJxLmMKaW5kZXggM2IzZDJjOC4uYzBkNWMzYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2lycS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9pcnEuYwpAQCAtNDcsMTIgKzQ3LDE0IEBACiAjZGVmaW5lIGlycV9maW5pc2goaXJxKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAordW5zaWduZWQgaW50IGFyY2hfbnJfaXJxczsKIHZvaWQgKCppbml0X2FyY2hfaXJxKSh2b2lkKSBfX2luaXRkYXRhID0gTlVMTDsKIHVuc2lnbmVkIGxvbmcgaXJxX2Vycl9jb3VudDsKIAogaW50IHNob3dfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpCiB7CiAJaW50IGkgPSAqKGxvZmZfdCAqKSB2LCBjcHU7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCXN0cnVjdCBpcnFhY3Rpb24gKiBhY3Rpb247CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtNjcsMjQgKzY5LDI1IEBACiAJCXNlcV9wdXRjKHAsICdcbicpOwogCX0KIAotCWlmIChpIDwgTlJfSVJRUykgewotCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKLQkJYWN0aW9uID0gaXJxX2Rlc2NbaV0uYWN0aW9uOworCWlmIChpIDwgbnJfaXJxcykgeworCQlkZXNjID0gaXJxX3RvX2Rlc2MoaSk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCQlhY3Rpb24gPSBkZXNjLT5hY3Rpb247CiAJCWlmICghYWN0aW9uKQogCQkJZ290byB1bmxvY2s7CiAKIAkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLCBpKTsKIAkJZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KQogCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBjcHUpKTsKLQkJc2VxX3ByaW50ZihwLCAiICUxMHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lID8gOiAiLSIpOworCQlzZXFfcHJpbnRmKHAsICIgJTEwcyIsIGRlc2MtPmNoaXAtPm5hbWUgPyA6ICItIik7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwogCQlmb3IgKGFjdGlvbiA9IGFjdGlvbi0+bmV4dDsgYWN0aW9uOyBhY3Rpb24gPSBhY3Rpb24tPm5leHQpCiAJCQlzZXFfcHJpbnRmKHAsICIsICVzIiwgYWN0aW9uLT5uYW1lKTsKIAogCQlzZXFfcHV0YyhwLCAnXG4nKTsKIHVubG9jazoKLQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKLQl9IGVsc2UgaWYgKGkgPT0gTlJfSVJRUykgeworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCX0gZWxzZSBpZiAoaSA9PSBucl9pcnFzKSB7CiAjaWZkZWYgQ09ORklHX0ZJUQogCQlzaG93X2ZpcV9saXN0KHAsIHYpOwogI2VuZGlmCkBAIC0xMTIsNyArMTE1LDcgQEAKIAkgKiBTb21lIGhhcmR3YXJlIGdpdmVzIHJhbmRvbWx5IHdyb25nIGludGVycnVwdHMuICBSYXRoZXIKIAkgKiB0aGFuIGNyYXNoaW5nLCBkbyBzb21ldGhpbmcgc2Vuc2libGUuCiAJICovCi0JaWYgKHVubGlrZWx5KGlycSA+PSBOUl9JUlFTKSkgeworCWlmICh1bmxpa2VseShpcnEgPj0gbnJfaXJxcykpIHsKIAkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkJhZCBJUlEldVxuIiwgaXJxKTsKIAkJYWNrX2JhZF9pcnEoaXJxKTsKQEAgLTEzMiwxMiArMTM1LDEyIEBACiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoaXJxID49IE5SX0lSUVMpIHsKKwlpZiAoaXJxID49IG5yX2lycXMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJUcnlpbmcgdG8gc2V0IGlycSBmbGFncyBmb3IgSVJRJWRcbiIsIGlycSk7CiAJCXJldHVybjsKIAl9CiAKLQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJZGVzYy0+c3RhdHVzIHw9IElSUV9OT1JFUVVFU1QgfCBJUlFfTk9QUk9CRSB8IElSUV9OT0FVVE9FTjsKIAlpZiAoaWZsYWdzICYgSVJRRl9WQUxJRCkKQEAgLTE1MSwxNCArMTU0LDI1IEBACiAKIHZvaWQgX19pbml0IGluaXRfSVJRKHZvaWQpCiB7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCWludCBpcnE7CiAKLQlmb3IgKGlycSA9IDA7IGlycSA8IE5SX0lSUVM7IGlycSsrKQotCQlpcnFfZGVzY1tpcnFdLnN0YXR1cyB8PSBJUlFfTk9SRVFVRVNUIHwgSVJRX05PUFJPQkU7CisJZm9yIChpcnEgPSAwOyBpcnEgPCBucl9pcnFzOyBpcnErKykgeworCQlkZXNjID0gaXJxX3RvX2Rlc2NfYWxsb2Nfbm9kZShpcnEsIDApOworCQlkZXNjLT5zdGF0dXMgfD0gSVJRX05PUkVRVUVTVCB8IElSUV9OT1BST0JFOworCX0KIAogCWluaXRfYXJjaF9pcnEoKTsKIH0KIAorI2lmZGVmIENPTkZJR19TUEFSU0VfSVJRCitpbnQgX19pbml0IGFyY2hfcHJvYmVfbnJfaXJxcyh2b2lkKQoreworCW5yX2lycXMgPSBhcmNoX25yX2lycXMgPyBhcmNoX25yX2lycXMgOiBOUl9JUlFTOworCXJldHVybiAwOworfQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAogc3RhdGljIHZvaWQgcm91dGVfaXJxKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgdW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGNwdSkKQEAgLTE3OCwxMCArMTkyLDkgQEAKIHZvaWQgbWlncmF0ZV9pcnFzKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGksIGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKSB7Ci0JCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaTsKLQorCWZvcl9lYWNoX2lycV9kZXNjKGksIGRlc2MpIHsKIAkJaWYgKGRlc2MtPm5vZGUgPT0gY3B1KSB7CiAJCQl1bnNpZ25lZCBpbnQgbmV3Y3B1ID0gY3B1bWFza19hbnlfYW5kKGRlc2MtPmFmZmluaXR5LAogCQkJCQkJCSAgICAgIGNwdV9vbmxpbmVfbWFzayk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwva2dkYi5jIGIvYXJjaC9hcm0va2VybmVsL2tnZGIuYwppbmRleCBjODY4YTg4Li43NzhjMmY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwva2dkYi5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9rZ2RiLmMKQEAgLTEwLDU3ICsxMCw2MiBAQAogICogICAgICAgICAgIERlZXBhayBTYXhlbmEgPGRzYXhlbmFAcGxleGl0eS5uZXQ+CiAgKi8KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZ2RiLmg+CiAjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CiAKLS8qIE1ha2UgYSBsb2NhbCBjb3B5IG9mIHRoZSByZWdpc3RlcnMgcGFzc2VkIGludG8gdGhlIGhhbmRsZXIgKGJsZXRjaCkgKi8KLXZvaWQgcHRfcmVnc190b19nZGJfcmVncyh1bnNpZ25lZCBsb25nICpnZGJfcmVncywgc3RydWN0IHB0X3JlZ3MgKmtlcm5lbF9yZWdzKQorc3RydWN0IGRiZ19yZWdfZGVmX3QgZGJnX3JlZ19kZWZbREJHX01BWF9SRUdfTlVNXSA9CiB7Ci0JaW50IHJlZ25vOworCXsgInIwIiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIEFSTV9yMCl9LAorCXsgInIxIiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIEFSTV9yMSl9LAorCXsgInIyIiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIEFSTV9yMil9LAorCXsgInIzIiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIEFSTV9yMyl9LAorCXsgInI0IiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIEFSTV9yNCl9LAorCXsgInI1IiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIEFSTV9yNSl9LAorCXsgInI2IiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIEFSTV9yNil9LAorCXsgInI3IiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIEFSTV9yNyl9LAorCXsgInI4IiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIEFSTV9yOCl9LAorCXsgInI5IiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIEFSTV9yOSl9LAorCXsgInIxMCIsIDQsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBBUk1fcjEwKX0sCisJeyAiZnAiLCA0LCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgQVJNX2ZwKX0sCisJeyAiaXAiLCA0LCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgQVJNX2lwKX0sCisJeyAic3AiLCA0LCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgQVJNX3NwKX0sCisJeyAibHIiLCA0LCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgQVJNX2xyKX0sCisJeyAicGMiLCA0LCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgQVJNX3BjKX0sCisJeyAiZjAiLCAxMiwgLTEgfSwKKwl7ICJmMSIsIDEyLCAtMSB9LAorCXsgImYyIiwgMTIsIC0xIH0sCisJeyAiZjMiLCAxMiwgLTEgfSwKKwl7ICJmNCIsIDEyLCAtMSB9LAorCXsgImY1IiwgMTIsIC0xIH0sCisJeyAiZjYiLCAxMiwgLTEgfSwKKwl7ICJmNyIsIDEyLCAtMSB9LAorCXsgImZwcyIsIDQsIC0xIH0sCisJeyAiY3BzciIsIDQsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBBUk1fY3Bzcil9LAorfTsKIAotCS8qIEluaXRpYWxpemUgYWxsIHRvIHplcm8uICovCi0JZm9yIChyZWdubyA9IDA7IHJlZ25vIDwgR0RCX01BWF9SRUdTOyByZWdubysrKQotCQlnZGJfcmVnc1tyZWdub10gPSAwOworY2hhciAqZGJnX2dldF9yZWcoaW50IHJlZ25vLCB2b2lkICptZW0sIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWlmIChyZWdubyA+PSBEQkdfTUFYX1JFR19OVU0gfHwgcmVnbm8gPCAwKQorCQlyZXR1cm4gTlVMTDsKIAotCWdkYl9yZWdzW19SMF0JCT0ga2VybmVsX3JlZ3MtPkFSTV9yMDsKLQlnZGJfcmVnc1tfUjFdCQk9IGtlcm5lbF9yZWdzLT5BUk1fcjE7Ci0JZ2RiX3JlZ3NbX1IyXQkJPSBrZXJuZWxfcmVncy0+QVJNX3IyOwotCWdkYl9yZWdzW19SM10JCT0ga2VybmVsX3JlZ3MtPkFSTV9yMzsKLQlnZGJfcmVnc1tfUjRdCQk9IGtlcm5lbF9yZWdzLT5BUk1fcjQ7Ci0JZ2RiX3JlZ3NbX1I1XQkJPSBrZXJuZWxfcmVncy0+QVJNX3I1OwotCWdkYl9yZWdzW19SNl0JCT0ga2VybmVsX3JlZ3MtPkFSTV9yNjsKLQlnZGJfcmVnc1tfUjddCQk9IGtlcm5lbF9yZWdzLT5BUk1fcjc7Ci0JZ2RiX3JlZ3NbX1I4XQkJPSBrZXJuZWxfcmVncy0+QVJNX3I4OwotCWdkYl9yZWdzW19SOV0JCT0ga2VybmVsX3JlZ3MtPkFSTV9yOTsKLQlnZGJfcmVnc1tfUjEwXQkJPSBrZXJuZWxfcmVncy0+QVJNX3IxMDsKLQlnZGJfcmVnc1tfRlBdCQk9IGtlcm5lbF9yZWdzLT5BUk1fZnA7Ci0JZ2RiX3JlZ3NbX0lQXQkJPSBrZXJuZWxfcmVncy0+QVJNX2lwOwotCWdkYl9yZWdzW19TUFRdCQk9IGtlcm5lbF9yZWdzLT5BUk1fc3A7Ci0JZ2RiX3JlZ3NbX0xSXQkJPSBrZXJuZWxfcmVncy0+QVJNX2xyOwotCWdkYl9yZWdzW19QQ10JCT0ga2VybmVsX3JlZ3MtPkFSTV9wYzsKLQlnZGJfcmVnc1tfQ1BTUl0JCT0ga2VybmVsX3JlZ3MtPkFSTV9jcHNyOworCWlmIChkYmdfcmVnX2RlZltyZWdub10ub2Zmc2V0ICE9IC0xKQorCQltZW1jcHkobWVtLCAodm9pZCAqKXJlZ3MgKyBkYmdfcmVnX2RlZltyZWdub10ub2Zmc2V0LAorCQkgICAgICAgZGJnX3JlZ19kZWZbcmVnbm9dLnNpemUpOworCWVsc2UKKwkJbWVtc2V0KG1lbSwgMCwgZGJnX3JlZ19kZWZbcmVnbm9dLnNpemUpOworCXJldHVybiBkYmdfcmVnX2RlZltyZWdub10ubmFtZTsKIH0KIAotLyogQ29weSBsb2NhbCBnZGIgcmVnaXN0ZXJzIGJhY2sgdG8ga2dkYiByZWdzLCBmb3IgbGF0ZXIgY29weSB0byBrZXJuZWwgKi8KLXZvaWQgZ2RiX3JlZ3NfdG9fcHRfcmVncyh1bnNpZ25lZCBsb25nICpnZGJfcmVncywgc3RydWN0IHB0X3JlZ3MgKmtlcm5lbF9yZWdzKQoraW50IGRiZ19zZXRfcmVnKGludCByZWdubywgdm9pZCAqbWVtLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlrZXJuZWxfcmVncy0+QVJNX3IwCT0gZ2RiX3JlZ3NbX1IwXTsKLQlrZXJuZWxfcmVncy0+QVJNX3IxCT0gZ2RiX3JlZ3NbX1IxXTsKLQlrZXJuZWxfcmVncy0+QVJNX3IyCT0gZ2RiX3JlZ3NbX1IyXTsKLQlrZXJuZWxfcmVncy0+QVJNX3IzCT0gZ2RiX3JlZ3NbX1IzXTsKLQlrZXJuZWxfcmVncy0+QVJNX3I0CT0gZ2RiX3JlZ3NbX1I0XTsKLQlrZXJuZWxfcmVncy0+QVJNX3I1CT0gZ2RiX3JlZ3NbX1I1XTsKLQlrZXJuZWxfcmVncy0+QVJNX3I2CT0gZ2RiX3JlZ3NbX1I2XTsKLQlrZXJuZWxfcmVncy0+QVJNX3I3CT0gZ2RiX3JlZ3NbX1I3XTsKLQlrZXJuZWxfcmVncy0+QVJNX3I4CT0gZ2RiX3JlZ3NbX1I4XTsKLQlrZXJuZWxfcmVncy0+QVJNX3I5CT0gZ2RiX3JlZ3NbX1I5XTsKLQlrZXJuZWxfcmVncy0+QVJNX3IxMAk9IGdkYl9yZWdzW19SMTBdOwotCWtlcm5lbF9yZWdzLT5BUk1fZnAJPSBnZGJfcmVnc1tfRlBdOwotCWtlcm5lbF9yZWdzLT5BUk1faXAJPSBnZGJfcmVnc1tfSVBdOwotCWtlcm5lbF9yZWdzLT5BUk1fc3AJPSBnZGJfcmVnc1tfU1BUXTsKLQlrZXJuZWxfcmVncy0+QVJNX2xyCT0gZ2RiX3JlZ3NbX0xSXTsKLQlrZXJuZWxfcmVncy0+QVJNX3BjCT0gZ2RiX3JlZ3NbX1BDXTsKLQlrZXJuZWxfcmVncy0+QVJNX2Nwc3IJPSBnZGJfcmVnc1tfQ1BTUl07CisJaWYgKHJlZ25vID49IERCR19NQVhfUkVHX05VTSB8fCByZWdubyA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRiZ19yZWdfZGVmW3JlZ25vXS5vZmZzZXQgIT0gLTEpCisJCW1lbWNweSgodm9pZCAqKXJlZ3MgKyBkYmdfcmVnX2RlZltyZWdub10ub2Zmc2V0LCBtZW0sCisJCSAgICAgICBkYmdfcmVnX2RlZltyZWdub10uc2l6ZSk7CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQKQEAgLTE3Niw2ICsxODEsMzMgQEAKICAgICAgICBsb2NhbF9pcnFfZGlzYWJsZSgpOwogfQogCitzdGF0aWMgaW50IF9fa2dkYl9ub3RpZnkoc3RydWN0IGRpZV9hcmdzICphcmdzLCB1bnNpZ25lZCBsb25nIGNtZCkKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGFyZ3MtPnJlZ3M7CisKKwlpZiAoa2dkYl9oYW5kbGVfZXhjZXB0aW9uKDEsIGFyZ3MtPnNpZ25yLCBjbWQsIHJlZ3MpKQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisJcmV0dXJuIE5PVElGWV9TVE9QOworfQorc3RhdGljIGludAora2dkYl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqcHRyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyZXQgPSBfX2tnZGJfbm90aWZ5KHB0ciwgY21kKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGtnZGJfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwJPSBrZ2RiX25vdGlmeSwKKwkucHJpb3JpdHkJPSAtSU5UX01BWCwKK307CisKKwogLyoqCiAgKglrZ2RiX2FyY2hfaW5pdCAtIFBlcmZvcm0gYW55IGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBpbml0YWxpemF0aW9uLgogICoKQEAgLTE4NCw2ICsyMTYsMTEgQEAKICAqLwogaW50IGtnZGJfYXJjaF9pbml0KHZvaWQpCiB7CisJaW50IHJldCA9IHJlZ2lzdGVyX2RpZV9ub3RpZmllcigma2dkYl9ub3RpZmllcik7CisKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKIAlyZWdpc3Rlcl91bmRlZl9ob29rKCZrZ2RiX2Jya3B0X2hvb2spOwogCXJlZ2lzdGVyX3VuZGVmX2hvb2soJmtnZGJfY29tcGlsZWRfYnJrcHRfaG9vayk7CiAKQEAgLTIwMCw2ICsyMzcsNyBAQAogewogCXVucmVnaXN0ZXJfdW5kZWZfaG9vaygma2dkYl9icmtwdF9ob29rKTsKIAl1bnJlZ2lzdGVyX3VuZGVmX2hvb2soJmtnZGJfY29tcGlsZWRfYnJrcHRfaG9vayk7CisJdW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIoJmtnZGJfbm90aWZpZXIpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2twcm9iZXMtZGVjb2RlLmMgYi9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy1kZWNvZGUuYwppbmRleCBkYTFmOTQ5Li44YmNjYmZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy1kZWNvZGUuYworKysgYi9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy1kZWNvZGUuYwpAQCAtNTgzLDEzICs1ODMsMTQgQEAKIHsKIAlpbnNuX2xscmV0XzNhcmdfZm5fdCAqaV9mbiA9IChpbnNuX2xscmV0XzNhcmdfZm5fdCAqKSZwLT5haW5zbi5pbnNuWzBdOwogCWtwcm9iZV9vcGNvZGVfdCBpbnNuID0gcC0+b3Bjb2RlOworCWxvbmcgcHBjID0gKGxvbmcpcC0+YWRkciArIDg7CiAJdW5pb24gcmVnX3BhaXIgZm5yOwogCWludCByZCA9IChpbnNuID4+IDEyKSAmIDB4ZjsKIAlpbnQgcm4gPSAoaW5zbiA+PiAxNikgJiAweGY7CiAJaW50IHJtID0gaW5zbiAmIDB4ZjsKIAlsb25nIHJkdjsKLQlsb25nIHJudiAgPSByZWdzLT51cmVnc1tybl07Ci0JbG9uZyBybXYgID0gcmVncy0+dXJlZ3Nbcm1dOyAvKiBybS9ybXYgbWF5IGJlIGludmFsaWQsIGRvbid0IGNhcmUuICovCisJbG9uZyBybnYgPSAocm4gPT0gMTUpID8gcHBjIDogcmVncy0+dXJlZ3Nbcm5dOworCWxvbmcgcm12ID0gKHJtID09IDE1KSA/IHBwYyA6IHJlZ3MtPnVyZWdzW3JtXTsKIAlsb25nIGNwc3IgPSByZWdzLT5BUk1fY3BzcjsKIAogCWZuci5kciA9IGluc25zbG90X2xscmV0XzNhcmdfcmZsYWdzKHJudiwgMCwgcm12LCBjcHNyLCBpX2ZuKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMgYi9hcmNoL2FybS9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCmluZGV4IDU5OGNhNjEuLjFmYzc0Y2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL21hY2hpbmVfa2V4ZWMuYwpAQCAtMzcsMTIgKzM3LDEyIEBACiB7CiB9CiAKLXZvaWQgbWFjaGluZV9zaHV0ZG93bih2b2lkKQotewotfQotCiB2b2lkIG1hY2hpbmVfY3Jhc2hfc2h1dGRvd24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwljcmFzaF9zYXZlX2NwdShyZWdzLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiTG9hZGluZyBjcmFzaGR1bXAga2VybmVsLi4uXG4iKTsKIH0KIAogdm9pZCBtYWNoaW5lX2tleGVjKHN0cnVjdCBraW1hZ2UgKmltYWdlKQpAQCAtNzQsNyArNzQsMTEgQEAKIAkJCSAgICh1bnNpZ25lZCBsb25nKSByZWJvb3RfY29kZV9idWZmZXIgKyBLRVhFQ19DT05UUk9MX1BBR0VfU0laRSk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiQnllIVxuIik7CiAKLQljcHVfcHJvY19maW4oKTsKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWxvY2FsX2ZpcV9kaXNhYmxlKCk7CiAJc2V0dXBfbW1fZm9yX3JlYm9vdCgwKTsgLyogbW9kZSBpcyBub3QgdXNlZCwgc28ganVzdCBwYXNzIDAqLworCWZsdXNoX2NhY2hlX2FsbCgpOworCWNwdV9wcm9jX2ZpbigpOworCWZsdXNoX2NhY2hlX2FsbCgpOwogCWNwdV9yZXNldChyZWJvb3RfY29kZV9idWZmZXJfcGh5cyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jIGIvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCBkZTEyNTM2Li40MTdjMzkyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTE2NCwyMCArMTY0LDIwIEBACiAJCQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLAogCQkJaW50IGlkeCkKIHsKLQlzNjQgbGVmdCA9IGF0b21pYzY0X3JlYWQoJmh3Yy0+cGVyaW9kX2xlZnQpOworCXM2NCBsZWZ0ID0gbG9jYWw2NF9yZWFkKCZod2MtPnBlcmlvZF9sZWZ0KTsKIAlzNjQgcGVyaW9kID0gaHdjLT5zYW1wbGVfcGVyaW9kOwogCWludCByZXQgPSAwOwogCiAJaWYgKHVubGlrZWx5KGxlZnQgPD0gLXBlcmlvZCkpIHsKIAkJbGVmdCA9IHBlcmlvZDsKLQkJYXRvbWljNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCBsZWZ0KTsKKwkJbG9jYWw2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGxlZnQpOwogCQlod2MtPmxhc3RfcGVyaW9kID0gcGVyaW9kOwogCQlyZXQgPSAxOwogCX0KIAogCWlmICh1bmxpa2VseShsZWZ0IDw9IDApKSB7CiAJCWxlZnQgKz0gcGVyaW9kOwotCQlhdG9taWM2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGxlZnQpOworCQlsb2NhbDY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgbGVmdCk7CiAJCWh3Yy0+bGFzdF9wZXJpb2QgPSBwZXJpb2Q7CiAJCXJldCA9IDE7CiAJfQpAQCAtMTg1LDcgKzE4NSw3IEBACiAJaWYgKGxlZnQgPiAoczY0KWFybXBtdS0+bWF4X3BlcmlvZCkKIAkJbGVmdCA9IGFybXBtdS0+bWF4X3BlcmlvZDsKIAotCWF0b21pYzY0X3NldCgmaHdjLT5wcmV2X2NvdW50LCAodTY0KS1sZWZ0KTsKKwlsb2NhbDY0X3NldCgmaHdjLT5wcmV2X2NvdW50LCAodTY0KS1sZWZ0KTsKIAogCWFybXBtdS0+d3JpdGVfY291bnRlcihpZHgsICh1NjQpKC1sZWZ0KSAmIDB4ZmZmZmZmZmYpOwogCkBAIC0yMDQsMTggKzIwNCwxOCBAQAogCXU2NCBkZWx0YTsKIAogYWdhaW46Ci0JcHJldl9yYXdfY291bnQgPSBhdG9taWM2NF9yZWFkKCZod2MtPnByZXZfY291bnQpOworCXByZXZfcmF3X2NvdW50ID0gbG9jYWw2NF9yZWFkKCZod2MtPnByZXZfY291bnQpOwogCW5ld19yYXdfY291bnQgPSBhcm1wbXUtPnJlYWRfY291bnRlcihpZHgpOwogCi0JaWYgKGF0b21pYzY0X2NtcHhjaGcoJmh3Yy0+cHJldl9jb3VudCwgcHJldl9yYXdfY291bnQsCisJaWYgKGxvY2FsNjRfY21weGNoZygmaHdjLT5wcmV2X2NvdW50LCBwcmV2X3Jhd19jb3VudCwKIAkJCSAgICAgbmV3X3Jhd19jb3VudCkgIT0gcHJldl9yYXdfY291bnQpCiAJCWdvdG8gYWdhaW47CiAKIAlkZWx0YSA9IChuZXdfcmF3X2NvdW50IDw8IHNoaWZ0KSAtIChwcmV2X3Jhd19jb3VudCA8PCBzaGlmdCk7CiAJZGVsdGEgPj49IHNoaWZ0OwogCi0JYXRvbWljNjRfYWRkKGRlbHRhLCAmZXZlbnQtPmNvdW50KTsKLQlhdG9taWM2NF9zdWIoZGVsdGEsICZod2MtPnBlcmlvZF9sZWZ0KTsKKwlsb2NhbDY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7CisJbG9jYWw2NF9zdWIoZGVsdGEsICZod2MtPnBlcmlvZF9sZWZ0KTsKIAogCXJldHVybiBuZXdfcmF3X2NvdW50OwogfQpAQCAtNDc4LDcgKzQ3OCw3IEBACiAJaWYgKCFod2MtPnNhbXBsZV9wZXJpb2QpIHsKIAkJaHdjLT5zYW1wbGVfcGVyaW9kICA9IGFybXBtdS0+bWF4X3BlcmlvZDsKIAkJaHdjLT5sYXN0X3BlcmlvZCAgICA9IGh3Yy0+c2FtcGxlX3BlcmlvZDsKLQkJYXRvbWljNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCBod2MtPnNhbXBsZV9wZXJpb2QpOworCQlsb2NhbDY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgaHdjLT5zYW1wbGVfcGVyaW9kKTsKIAl9CiAKIAllcnIgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggYWNmNWU2Zi4uNDAxZTM4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0yOCw3ICsyOCw5IEBACiAjaW5jbHVkZSA8bGludXgvdGljay5oPgogI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9sZWRzLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTM2LDYgKzM4LDEyIEBACiAjaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKKyNpZmRlZiBDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1IKKyNpbmNsdWRlIDxsaW51eC9zdGFja3Byb3RlY3Rvci5oPgordW5zaWduZWQgbG9uZyBfX3N0YWNrX2Noa19ndWFyZCBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTChfX3N0YWNrX2Noa19ndWFyZCk7CisjZW5kaWYKKwogc3RhdGljIGNvbnN0IGNoYXIgKnByb2Nlc3Nvcl9tb2Rlc1tdID0gewogICAiVVNFUl8yNiIsICJGSVFfMjYiICwgIklSUV8yNiIgLCAiU1ZDXzI2IiAsICJVSzRfMjYiICwgIlVLNV8yNiIgLCAiVUs2XzI2IiAsICJVSzdfMjYiICwKICAgIlVLOF8yNiIgLCAiVUs5XzI2IiAsICJVSzEwXzI2IiwgIlVLMTFfMjYiLCAiVUsxMl8yNiIsICJVSzEzXzI2IiwgIlVLMTRfMjYiLCAiVUsxNV8yNiIsCkBAIC04NCwxMCArOTIsOSBAQAogCiB2b2lkIGFybV9tYWNoaW5lX3Jlc3RhcnQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7Ci0JLyoKLQkgKiBDbGVhbiBhbmQgZGlzYWJsZSBjYWNoZSwgYW5kIHR1cm4gb2ZmIGludGVycnVwdHMKLQkgKi8KLQljcHVfcHJvY19maW4oKTsKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgZmlyc3QgKi8KKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWxvY2FsX2ZpcV9kaXNhYmxlKCk7CiAKIAkvKgogCSAqIFRlbGwgdGhlIG1tIHN5c3RlbSB0aGF0IHdlIGFyZSBnb2luZyB0byByZWJvb3QgLQpAQCAtOTYsNiArMTAzLDE1IEBACiAJICovCiAJc2V0dXBfbW1fZm9yX3JlYm9vdChtb2RlKTsKIAorCS8qIENsZWFuIGFuZCBpbnZhbGlkYXRlIGNhY2hlcyAqLworCWZsdXNoX2NhY2hlX2FsbCgpOworCisJLyogVHVybiBvZmYgY2FjaGluZyAqLworCWNwdV9wcm9jX2ZpbigpOworCisJLyogUHVzaCBvdXQgYW55IGZ1cnRoZXIgZGlydHkgZGF0YSwgYW5kIGVuc3VyZSBjYWNoZSBpcyBlbXB0eSAqLworCWZsdXNoX2NhY2hlX2FsbCgpOworCiAJLyoKIAkgKiBOb3cgY2FsbCB0aGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHJlYm9vdCBjb2RlLgogCSAqLwpAQCAtMTg5LDE5ICsyMDUsMjkgQEAKIAogX19zZXR1cCgicmVib290PSIsIHJlYm9vdF9zZXR1cCk7CiAKLXZvaWQgbWFjaGluZV9oYWx0KHZvaWQpCit2b2lkIG1hY2hpbmVfc2h1dGRvd24odm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfU01QCisJc21wX3NlbmRfc3RvcCgpOworI2VuZGlmCiB9CiAKK3ZvaWQgbWFjaGluZV9oYWx0KHZvaWQpCit7CisJbWFjaGluZV9zaHV0ZG93bigpOworCXdoaWxlICgxKTsKK30KIAogdm9pZCBtYWNoaW5lX3Bvd2VyX29mZih2b2lkKQogeworCW1hY2hpbmVfc2h1dGRvd24oKTsKIAlpZiAocG1fcG93ZXJfb2ZmKQogCQlwbV9wb3dlcl9vZmYoKTsKIH0KIAogdm9pZCBtYWNoaW5lX3Jlc3RhcnQoY2hhciAqY21kKQogeworCW1hY2hpbmVfc2h1dGRvd24oKTsKIAlhcm1fcG1fcmVzdGFydChyZWJvb3RfbW9kZSwgY21kKTsKIH0KIApAQCAtMzUxLDE3ICszNzcsMjEgQEAKIAogLyoKICAqIFNodWZmbGUgdGhlIGFyZ3VtZW50IGludG8gdGhlIGNvcnJlY3QgcmVnaXN0ZXIgYmVmb3JlIGNhbGxpbmcgdGhlCi0gKiB0aHJlYWQgZnVuY3Rpb24uICByMSBpcyB0aGUgdGhyZWFkIGFyZ3VtZW50LCByMiBpcyB0aGUgcG9pbnRlciB0bwotICogdGhlIHRocmVhZCBmdW5jdGlvbiwgYW5kIHIzIHBvaW50cyB0byB0aGUgZXhpdCBmdW5jdGlvbi4KKyAqIHRocmVhZCBmdW5jdGlvbi4gIHI0IGlzIHRoZSB0aHJlYWQgYXJndW1lbnQsIHI1IGlzIHRoZSBwb2ludGVyIHRvCisgKiB0aGUgdGhyZWFkIGZ1bmN0aW9uLCBhbmQgcjYgcG9pbnRzIHRvIHRoZSBleGl0IGZ1bmN0aW9uLgogICovCiBleHRlcm4gdm9pZCBrZXJuZWxfdGhyZWFkX2hlbHBlcih2b2lkKTsKIGFzbSgJIi5wdXNoc2VjdGlvbiAudGV4dFxuIgogIgkuYWxpZ25cbiIKICIJLnR5cGUJa2VybmVsX3RocmVhZF9oZWxwZXIsICNmdW5jdGlvblxuIgogImtlcm5lbF90aHJlYWRfaGVscGVyOlxuIgotIgltb3YJcjAsIHIxXG4iCi0iCW1vdglsciwgcjNcbiIKLSIJbW92CXBjLCByMlxuIgorI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUworIglibAl0cmFjZV9oYXJkaXJxc19vblxuIgorI2VuZGlmCisiCW1zcgljcHNyX2MsIHI3XG4iCisiCW1vdglyMCwgcjRcbiIKKyIJbW92CWxyLCByNlxuIgorIgltb3YJcGMsIHI1XG4iCiAiCS5zaXplCWtlcm5lbF90aHJlYWRfaGVscGVyLCAuIC0ga2VybmVsX3RocmVhZF9oZWxwZXJcbiIKICIJLnBvcHNlY3Rpb24iKTsKIApAQCAtMzkxLDExICs0MjEsMTIgQEAKIAogCW1lbXNldCgmcmVncywgMCwgc2l6ZW9mKHJlZ3MpKTsKIAotCXJlZ3MuQVJNX3IxID0gKHVuc2lnbmVkIGxvbmcpYXJnOwotCXJlZ3MuQVJNX3IyID0gKHVuc2lnbmVkIGxvbmcpZm47Ci0JcmVncy5BUk1fcjMgPSAodW5zaWduZWQgbG9uZylrZXJuZWxfdGhyZWFkX2V4aXQ7CisJcmVncy5BUk1fcjQgPSAodW5zaWduZWQgbG9uZylhcmc7CisJcmVncy5BUk1fcjUgPSAodW5zaWduZWQgbG9uZylmbjsKKwlyZWdzLkFSTV9yNiA9ICh1bnNpZ25lZCBsb25nKWtlcm5lbF90aHJlYWRfZXhpdDsKKwlyZWdzLkFSTV9yNyA9IFNWQ19NT0RFIHwgUFNSX0VORFNUQVRFIHwgUFNSX0lTRVRTVEFURTsKIAlyZWdzLkFSTV9wYyA9ICh1bnNpZ25lZCBsb25nKWtlcm5lbF90aHJlYWRfaGVscGVyOwotCXJlZ3MuQVJNX2Nwc3IgPSBTVkNfTU9ERSB8IFBTUl9FTkRTVEFURSB8IFBTUl9JU0VUU1RBVEU7CisJcmVncy5BUk1fY3BzciA9IHJlZ3MuQVJNX3I3IHwgUFNSX0lfQklUOwogCiAJcmV0dXJuIGRvX2ZvcmsoZmxhZ3N8Q0xPTkVfVk18Q0xPTkVfVU5UUkFDRUQsIDAsICZyZWdzLCAwLCBOVUxMLCBOVUxMKTsKIH0KQEAgLTQyMSwzICs0NTIsOSBAQAogCX0gd2hpbGUgKGNvdW50ICsrIDwgMTYpOwogCXJldHVybiAwOwogfQorCit1bnNpZ25lZCBsb25nIGFyY2hfcmFuZG9taXplX2JyayhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwl1bnNpZ25lZCBsb25nIHJhbmdlX2VuZCA9IG1tLT5icmsgKyAweDAyMDAwMDAwOworCXJldHVybiByYW5kb21pemVfcmFuZ2UobW0tPmJyaywgcmFuZ2VfZW5kLCAwKSA/IDogbW0tPmJyazsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYwppbmRleCAzZjU2MmE3Li5mOTlkNDg5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCkBAIC01Miw2ICs1MiwxMDIgQEAKICNkZWZpbmUgQlJFQUtJTlNUX1RIVU1CCTB4ZGUwMQogI2VuZGlmCiAKK3N0cnVjdCBwdF9yZWdzX29mZnNldCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgb2Zmc2V0OworfTsKKworI2RlZmluZSBSRUdfT0ZGU0VUX05BTUUocikgXAorCXsubmFtZSA9ICNyLCAub2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIEFSTV8jI3IpfQorI2RlZmluZSBSRUdfT0ZGU0VUX0VORCB7Lm5hbWUgPSBOVUxMLCAub2Zmc2V0ID0gMH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwdF9yZWdzX29mZnNldCByZWdvZmZzZXRfdGFibGVbXSA9IHsKKwlSRUdfT0ZGU0VUX05BTUUocjApLAorCVJFR19PRkZTRVRfTkFNRShyMSksCisJUkVHX09GRlNFVF9OQU1FKHIyKSwKKwlSRUdfT0ZGU0VUX05BTUUocjMpLAorCVJFR19PRkZTRVRfTkFNRShyNCksCisJUkVHX09GRlNFVF9OQU1FKHI1KSwKKwlSRUdfT0ZGU0VUX05BTUUocjYpLAorCVJFR19PRkZTRVRfTkFNRShyNyksCisJUkVHX09GRlNFVF9OQU1FKHI4KSwKKwlSRUdfT0ZGU0VUX05BTUUocjkpLAorCVJFR19PRkZTRVRfTkFNRShyMTApLAorCVJFR19PRkZTRVRfTkFNRShmcCksCisJUkVHX09GRlNFVF9OQU1FKGlwKSwKKwlSRUdfT0ZGU0VUX05BTUUoc3ApLAorCVJFR19PRkZTRVRfTkFNRShsciksCisJUkVHX09GRlNFVF9OQU1FKHBjKSwKKwlSRUdfT0ZGU0VUX05BTUUoY3BzciksCisJUkVHX09GRlNFVF9OQU1FKE9SSUdfcjApLAorCVJFR19PRkZTRVRfRU5ELAorfTsKKworLyoqCisgKiByZWdzX3F1ZXJ5X3JlZ2lzdGVyX29mZnNldCgpIC0gcXVlcnkgcmVnaXN0ZXIgb2Zmc2V0IGZyb20gaXRzIG5hbWUKKyAqIEBuYW1lOgl0aGUgbmFtZSBvZiBhIHJlZ2lzdGVyCisgKgorICogcmVnc19xdWVyeV9yZWdpc3Rlcl9vZmZzZXQoKSByZXR1cm5zIHRoZSBvZmZzZXQgb2YgYSByZWdpc3RlciBpbiBzdHJ1Y3QKKyAqIHB0X3JlZ3MgZnJvbSBpdHMgbmFtZS4gSWYgdGhlIG5hbWUgaXMgaW52YWxpZCwgdGhpcyByZXR1cm5zIC1FSU5WQUw7CisgKi8KK2ludCByZWdzX3F1ZXJ5X3JlZ2lzdGVyX29mZnNldChjb25zdCBjaGFyICpuYW1lKQoreworCWNvbnN0IHN0cnVjdCBwdF9yZWdzX29mZnNldCAqcm9mZjsKKwlmb3IgKHJvZmYgPSByZWdvZmZzZXRfdGFibGU7IHJvZmYtPm5hbWUgIT0gTlVMTDsgcm9mZisrKQorCQlpZiAoIXN0cmNtcChyb2ZmLT5uYW1lLCBuYW1lKSkKKwkJCXJldHVybiByb2ZmLT5vZmZzZXQ7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qKgorICogcmVnc19xdWVyeV9yZWdpc3Rlcl9uYW1lKCkgLSBxdWVyeSByZWdpc3RlciBuYW1lIGZyb20gaXRzIG9mZnNldAorICogQG9mZnNldDoJdGhlIG9mZnNldCBvZiBhIHJlZ2lzdGVyIGluIHN0cnVjdCBwdF9yZWdzLgorICoKKyAqIHJlZ3NfcXVlcnlfcmVnaXN0ZXJfbmFtZSgpIHJldHVybnMgdGhlIG5hbWUgb2YgYSByZWdpc3RlciBmcm9tIGl0cworICogb2Zmc2V0IGluIHN0cnVjdCBwdF9yZWdzLiBJZiB0aGUgQG9mZnNldCBpcyBpbnZhbGlkLCB0aGlzIHJldHVybnMgTlVMTDsKKyAqLworY29uc3QgY2hhciAqcmVnc19xdWVyeV9yZWdpc3Rlcl9uYW1lKHVuc2lnbmVkIGludCBvZmZzZXQpCit7CisJY29uc3Qgc3RydWN0IHB0X3JlZ3Nfb2Zmc2V0ICpyb2ZmOworCWZvciAocm9mZiA9IHJlZ29mZnNldF90YWJsZTsgcm9mZi0+bmFtZSAhPSBOVUxMOyByb2ZmKyspCisJCWlmIChyb2ZmLT5vZmZzZXQgPT0gb2Zmc2V0KQorCQkJcmV0dXJuIHJvZmYtPm5hbWU7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogcmVnc193aXRoaW5fa2VybmVsX3N0YWNrKCkgLSBjaGVjayB0aGUgYWRkcmVzcyBpbiB0aGUgc3RhY2sKKyAqIEByZWdzOiAgICAgIHB0X3JlZ3Mgd2hpY2ggY29udGFpbnMga2VybmVsIHN0YWNrIHBvaW50ZXIuCisgKiBAYWRkcjogICAgICBhZGRyZXNzIHdoaWNoIGlzIGNoZWNrZWQuCisgKgorICogcmVnc193aXRoaW5fa2VybmVsX3N0YWNrKCkgY2hlY2tzIEBhZGRyIGlzIHdpdGhpbiB0aGUga2VybmVsIHN0YWNrIHBhZ2UocykuCisgKiBJZiBAYWRkciBpcyB3aXRoaW4gdGhlIGtlcm5lbCBzdGFjaywgaXQgcmV0dXJucyB0cnVlLiBJZiBub3QsIHJldHVybnMgZmFsc2UuCisgKi8KK2Jvb2wgcmVnc193aXRoaW5fa2VybmVsX3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuICgoYWRkciAmIH4oVEhSRUFEX1NJWkUgLSAxKSkgID09CisJCShrZXJuZWxfc3RhY2tfcG9pbnRlcihyZWdzKSAmIH4oVEhSRUFEX1NJWkUgLSAxKSkpOworfQorCisvKioKKyAqIHJlZ3NfZ2V0X2tlcm5lbF9zdGFja19udGgoKSAtIGdldCBOdGggZW50cnkgb2YgdGhlIHN0YWNrCisgKiBAcmVnczoJcHRfcmVncyB3aGljaCBjb250YWlucyBrZXJuZWwgc3RhY2sgcG9pbnRlci4KKyAqIEBuOgkJc3RhY2sgZW50cnkgbnVtYmVyLgorICoKKyAqIHJlZ3NfZ2V0X2tlcm5lbF9zdGFja19udGgoKSByZXR1cm5zIEBuIHRoIGVudHJ5IG9mIHRoZSBrZXJuZWwgc3RhY2sgd2hpY2gKKyAqIGlzIHNwZWNpZmllZCBieSBAcmVncy4gSWYgdGhlIEBuIHRoIGVudHJ5IGlzIE5PVCBpbiB0aGUga2VybmVsIHN0YWNrLAorICogdGhpcyByZXR1cm5zIDAuCisgKi8KK3Vuc2lnbmVkIGxvbmcgcmVnc19nZXRfa2VybmVsX3N0YWNrX250aChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IG4pCit7CisJdW5zaWduZWQgbG9uZyAqYWRkciA9ICh1bnNpZ25lZCBsb25nICopa2VybmVsX3N0YWNrX3BvaW50ZXIocmVncyk7CisJYWRkciArPSBuOworCWlmIChyZWdzX3dpdGhpbl9rZXJuZWxfc3RhY2socmVncywgKHVuc2lnbmVkIGxvbmcpYWRkcikpCisJCXJldHVybiAqYWRkcjsKKwllbHNlCisJCXJldHVybiAwOworfQorCiAvKgogICogdGhpcyByb3V0aW5lIHdpbGwgZ2V0IGEgd29yZCBvZmYgb2YgdGhlIHByb2Nlc3NlcyBwcml2aWxlZ2VkIHN0YWNrLgogICogdGhlIG9mZnNldCBpcyBob3cgZmFyIGZyb20gdGhlIGJhc2UgYWRkciBhcyBzdG9yZWQgaW4gdGhlIFRIUkVBRC4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUyBiL2FyY2gvYXJtL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUwppbmRleCA2MTkzMGViMC4uZmQyNmY4ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3JlbG9jYXRlX2tlcm5lbC5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUwpAQCAtMTAsNiArMTAsMTIgQEAKIAlsZHIJcjAsa2V4ZWNfaW5kaXJlY3Rpb25fcGFnZQogCWxkcglyMSxrZXhlY19zdGFydF9hZGRyZXNzCiAKKwkvKgorCSAqIElmIHRoZXJlIGlzIG5vIGluZGlyZWN0aW9uIHBhZ2UgKHdlIGFyZSBkb2luZyBjcmFzaGR1bXBzKQorCSAqIHNraXAgYW55IHJlbG9jYXRpb24uCisJICovCisJY21wCXIwLCAjMAorCWJlcQkyZgogCiAwOgkvKiB0b3AsIHJlYWQgYW5vdGhlciB3b3JkIGZvciB0aGUgaW5kaXJlY3Rpb24gcGFnZSAqLwogCWxkcglyMywgW3IwXSwjNApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NldHVwLmMgYi9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYwppbmRleCAxMjJkOTk5Li5kNTIzMWFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYwpAQCAtMTksMTIgKzE5LDE1IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY3JlZW5faW5mby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYXNoX2R1bXAuaD4KICNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CiAKICNpbmNsdWRlIDxhc20vdW5pZmllZC5oPgogI2luY2x1ZGUgPGFzbS9jcHUuaD4KQEAgLTQ0LDcgKzQ3LDkgQEAKICNpbmNsdWRlIDxhc20vdHJhcHMuaD4KICNpbmNsdWRlIDxhc20vdW53aW5kLmg+CiAKKyNpZiBkZWZpbmVkKENPTkZJR19ERVBSRUNBVEVEX1BBUkFNX1NUUlVDVCkKICNpbmNsdWRlICJjb21wYXQuaCIKKyNlbmRpZgogI2luY2x1ZGUgImF0YWdzLmgiCiAjaW5jbHVkZSAidGNtLmgiCiAKQEAgLTI2OSw2ICsyNzQsMjEgQEAKIGV4dGVybiBzdHJ1Y3QgcHJvY19pbmZvX2xpc3QgKmxvb2t1cF9wcm9jZXNzb3JfdHlwZSh1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHN0cnVjdCBtYWNoaW5lX2Rlc2MgKmxvb2t1cF9tYWNoaW5lX3R5cGUodW5zaWduZWQgaW50KTsKIAorc3RhdGljIHZvaWQgX19pbml0IGZlYXRfdjZfZml4dXAodm9pZCkKK3sKKwlpbnQgaWQgPSByZWFkX2NwdWlkX2lkKCk7CisKKwlpZiAoKGlkICYgMHhmZjBmMDAwMCkgIT0gMHg0MTA3MDAwMCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBIV0NBUF9UTFMgaXMgYXZhaWxhYmxlIG9ubHkgb24gMTEzNiByMXAwIGFuZCBsYXRlciwKKwkgKiBzZWUgYWxzbyBrdXNlcl9nZXRfdGxzX2luaXQuCisJICovCisJaWYgKCgoKGlkID4+IDQpICYgMHhmZmYpID09IDB4YjM2KSAmJiAoKChpZCA+PiAyMCkgJiAzKSA9PSAwKSkKKwkJZWxmX2h3Y2FwICY9IH5IV0NBUF9UTFM7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9wcm9jZXNzb3Iodm9pZCkKIHsKIAlzdHJ1Y3QgcHJvY19pbmZvX2xpc3QgKmxpc3Q7CkBAIC0zMTEsNiArMzMxLDggQEAKIAllbGZfaHdjYXAgJj0gfkhXQ0FQX1RIVU1COwogI2VuZGlmCiAKKwlmZWF0X3Y2X2ZpeHVwKCk7CisKIAljYWNoZWlkX2luaXQoKTsKIAljcHVfcHJvY19pbml0KCk7CiB9CkBAIC00MDIsMTMgKzQyNCwxMiBAQAogCXNpemUgLT0gc3RhcnQgJiB+UEFHRV9NQVNLOwogCWJhbmstPnN0YXJ0ID0gUEFHRV9BTElHTihzdGFydCk7CiAJYmFuay0+c2l6ZSAgPSBzaXplICYgUEFHRV9NQVNLOwotCWJhbmstPm5vZGUgID0gUEhZU19UT19OSUQoc3RhcnQpOwogCiAJLyoKIAkgKiBDaGVjayB3aGV0aGVyIHRoaXMgbWVtb3J5IHJlZ2lvbiBoYXMgbm9uLXplcm8gc2l6ZSBvcgogCSAqIGludmFsaWQgbm9kZSBudW1iZXIuCiAJICovCi0JaWYgKGJhbmstPnNpemUgPT0gMCB8fCBiYW5rLT5ub2RlID49IE1BWF9OVU1OT0RFUykKKwlpZiAoYmFuay0+c2l6ZSA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW1lbWluZm8ubnJfYmFua3MrKzsKQEAgLTY2Myw2ICs2ODQsODYgQEAKIH0KIGFyY2hfaW5pdGNhbGwoY3VzdG9taXplX21hY2hpbmUpOwogCisjaWZkZWYgQ09ORklHX0tFWEVDCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBnZXRfdG90YWxfbWVtKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB0b3RhbDsKKworCXRvdGFsID0gbWF4X2xvd19wZm4gLSBtaW5fbG93X3BmbjsKKwlyZXR1cm4gdG90YWwgPDwgUEFHRV9TSElGVDsKK30KKworLyoqCisgKiByZXNlcnZlX2NyYXNoa2VybmVsKCkgLSByZXNlcnZlcyBtZW1vcnkgYXJlIGZvciBjcmFzaCBrZXJuZWwKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlc2VydmVzIG1lbW9yeSBhcmVhIGdpdmVuIGluICJjcmFzaGtlcm5lbD0iIGtlcm5lbCBjb21tYW5kCisgKiBsaW5lIHBhcmFtZXRlci4gVGhlIG1lbW9yeSByZXNlcnZlZCBpcyB1c2VkIGJ5IGEgZHVtcCBjYXB0dXJlIGtlcm5lbCB3aGVuCisgKiBwcmltYXJ5IGtlcm5lbCBpcyBjcmFzaGluZy4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHJlc2VydmVfY3Jhc2hrZXJuZWwodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgY3Jhc2hfc2l6ZSwgY3Jhc2hfYmFzZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxfbWVtOworCWludCByZXQ7CisKKwl0b3RhbF9tZW0gPSBnZXRfdG90YWxfbWVtKCk7CisJcmV0ID0gcGFyc2VfY3Jhc2hrZXJuZWwoYm9vdF9jb21tYW5kX2xpbmUsIHRvdGFsX21lbSwKKwkJCQkmY3Jhc2hfc2l6ZSwgJmNyYXNoX2Jhc2UpOworCWlmIChyZXQpCisJCXJldHVybjsKKworCXJldCA9IHJlc2VydmVfYm9vdG1lbShjcmFzaF9iYXNlLCBjcmFzaF9zaXplLCBCT09UTUVNX0VYQ0xVU0lWRSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3Jhc2hrZXJuZWwgcmVzZXJ2YXRpb24gZmFpbGVkIC0gIgorCQkgICAgICAgIm1lbW9yeSBpcyBpbiB1c2UgKDB4JWx4KVxuIiwgKHVuc2lnbmVkIGxvbmcpY3Jhc2hfYmFzZSk7CisJCXJldHVybjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJSZXNlcnZpbmcgJWxkTUIgb2YgbWVtb3J5IGF0ICVsZE1CICIKKwkgICAgICAgImZvciBjcmFzaGtlcm5lbCAoU3lzdGVtIFJBTTogJWxkTUIpXG4iLAorCSAgICAgICAodW5zaWduZWQgbG9uZykoY3Jhc2hfc2l6ZSA+PiAyMCksCisJICAgICAgICh1bnNpZ25lZCBsb25nKShjcmFzaF9iYXNlID4+IDIwKSwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcpKHRvdGFsX21lbSA+PiAyMCkpOworCisJY3Jhc2hrX3Jlcy5zdGFydCA9IGNyYXNoX2Jhc2U7CisJY3Jhc2hrX3Jlcy5lbmQgPSBjcmFzaF9iYXNlICsgY3Jhc2hfc2l6ZSAtIDE7CisJaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmNyYXNoa19yZXMpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCByZXNlcnZlX2NyYXNoa2VybmVsKHZvaWQpIHt9CisjZW5kaWYgLyogQ09ORklHX0tFWEVDICovCisKKy8qCisgKiBOb3RlOiBlbGZjb3JlaGRyX2FkZHIgaXMgbm90IGp1c3QgbGltaXRlZCB0byB2bWNvcmUuIEl0IGlzIGFsc28gdXNlZCBieQorICogaXNfa2R1bXBfa2VybmVsKCkgdG8gZGV0ZXJtaW5lIGlmIHdlIGFyZSBib290aW5nIGFmdGVyIGEgcGFuaWMuIEhlbmNlCisgKiBpZmRlZiBpdCB1bmRlciBDT05GSUdfQ1JBU0hfRFVNUCBhbmQgbm90IENPTkZJR19QUk9DX1ZNQ09SRS4KKyAqLworCisjaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKKy8qCisgKiBlbGZjb3JlaGRyPSBzcGVjaWZpZXMgdGhlIGxvY2F0aW9uIG9mIGVsZiBjb3JlIGhlYWRlciBzdG9yZWQgYnkgdGhlIGNyYXNoZWQKKyAqIGtlcm5lbC4gVGhpcyBvcHRpb24gd2lsbCBiZSBwYXNzZWQgYnkga2V4ZWMgbG9hZGVyIHRvIHRoZSBjYXB0dXJlIGtlcm5lbC4KKyAqLworc3RhdGljIGludCBfX2luaXQgc2V0dXBfZWxmY29yZWhkcihjaGFyICphcmcpCit7CisJY2hhciAqZW5kOworCisJaWYgKCFhcmcpCisJCXJldHVybiAtRUlOVkFMOworCisJZWxmY29yZWhkcl9hZGRyID0gbWVtcGFyc2UoYXJnLCAmZW5kKTsKKwlyZXR1cm4gZW5kID4gYXJnID8gMCA6IC1FSU5WQUw7Cit9CitlYXJseV9wYXJhbSgiZWxmY29yZWhkciIsIHNldHVwX2VsZmNvcmVoZHIpOworI2VuZGlmIC8qIENPTkZJR19DUkFTSF9EVU1QICovCisKK3N0YXRpYyB2b2lkIF9faW5pdCBzcXVhc2hfbWVtX3RhZ3Moc3RydWN0IHRhZyAqdGFnKQoreworCWZvciAoOyB0YWctPmhkci5zaXplOyB0YWcgPSB0YWdfbmV4dCh0YWcpKQorCQlpZiAodGFnLT5oZHIudGFnID09IEFUQUdfTUVNKQorCQkJdGFnLT5oZHIudGFnID0gQVRBR19OT05FOworfQorCiB2b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApCiB7CiAJc3RydWN0IHRhZyAqdGFncyA9IChzdHJ1Y3QgdGFnICopJmluaXRfdGFnczsKQEAgLTY4MywxMiArNzg0LDE0IEBACiAJZWxzZSBpZiAobWRlc2MtPmJvb3RfcGFyYW1zKQogCQl0YWdzID0gcGh5c190b192aXJ0KG1kZXNjLT5ib290X3BhcmFtcyk7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19ERVBSRUNBVEVEX1BBUkFNX1NUUlVDVCkKIAkvKgogCSAqIElmIHdlIGhhdmUgdGhlIG9sZCBzdHlsZSBwYXJhbWV0ZXJzLCBjb252ZXJ0IHRoZW0gdG8KIAkgKiBhIHRhZyBsaXN0LgogCSAqLwogCWlmICh0YWdzLT5oZHIudGFnICE9IEFUQUdfQ09SRSkKIAkJY29udmVydF90b190YWdfbGlzdCh0YWdzKTsKKyNlbmRpZgogCWlmICh0YWdzLT5oZHIudGFnICE9IEFUQUdfQ09SRSkKIAkJdGFncyA9IChzdHJ1Y3QgdGFnICopJmluaXRfdGFnczsKIApAQCAtNzE2LDEyICs4MTksMTUgQEAKIAogCXBhcnNlX2Vhcmx5X3BhcmFtKCk7CiAKKwlhcm1fbWVtYmxvY2tfaW5pdCgmbWVtaW5mbywgbWRlc2MpOworCiAJcGFnaW5nX2luaXQobWRlc2MpOwogCXJlcXVlc3Rfc3RhbmRhcmRfcmVzb3VyY2VzKCZtZW1pbmZvLCBtZGVzYyk7CiAKICNpZmRlZiBDT05GSUdfU01QCiAJc21wX2luaXRfY3B1cygpOwogI2VuZGlmCisJcmVzZXJ2ZV9jcmFzaGtlcm5lbCgpOwogCiAJY3B1X2luaXQoKTsKIAl0Y21faW5pdCgpOwpAQCAtNzI5LDYgKzgzNSw3IEBACiAJLyoKIAkgKiBTZXQgdXAgdmFyaW91cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcG9pbnRlcnMKIAkgKi8KKwlhcmNoX25yX2lycXMgPSBtZGVzYy0+bnJfaXJxczsKIAlpbml0X2FyY2hfaXJxID0gbWRlc2MtPmluaXRfaXJxOwogCXN5c3RlbV90aW1lciA9IG1kZXNjLT50aW1lcjsKIAlpbml0X21hY2hpbmUgPSBtZGVzYy0+aW5pdF9tYWNoaW5lOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NtcC5jIGIvYXJjaC9hcm0va2VybmVsL3NtcC5jCmluZGV4IGI4YzNkMGYuLjQwZGM3NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc21wLmMKQEAgLTQyOSw3ICs0MjksMTEgQEAKIHsKIAlzZW5kX2lwaV9tZXNzYWdlKG1hc2ssIElQSV9USU1FUik7CiB9CisjZWxzZQorI2RlZmluZSBzbXBfdGltZXJfYnJvYWRjYXN0CU5VTEwKKyNlbmRpZgogCisjaWZuZGVmIENPTkZJR19MT0NBTF9USU1FUlMKIHN0YXRpYyB2b2lkIGJyb2FkY2FzdF90aW1lcl9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCiB7CkBAIC00NDQsNyArNDQ4LDYgQEAKIAlldnQtPnJhdGluZwk9IDQwMDsKIAlldnQtPm11bHQJPSAxOwogCWV2dC0+c2V0X21vZGUJPSBicm9hZGNhc3RfdGltZXJfc2V0X21vZGU7Ci0JZXZ0LT5icm9hZGNhc3QJPSBzbXBfdGltZXJfYnJvYWRjYXN0OwogCiAJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGV2dCk7CiB9CkBAIC00NTYsNiArNDU5LDcgQEAKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSAmcGVyX2NwdShwZXJjcHVfY2xvY2tldmVudCwgY3B1KTsKIAogCWV2dC0+Y3B1bWFzayA9IGNwdW1hc2tfb2YoY3B1KTsKKwlldnQtPmJyb2FkY2FzdCA9IHNtcF90aW1lcl9icm9hZGNhc3Q7CiAKIAlsb2NhbF90aW1lcl9zZXR1cChldnQpOwogfQpAQCAtNDY3LDEwICs0NzEsMTMgQEAKICAqLwogc3RhdGljIHZvaWQgaXBpX2NwdV9zdG9wKHVuc2lnbmVkIGludCBjcHUpCiB7Ci0Jc3Bpbl9sb2NrKCZzdG9wX2xvY2spOwotCXByaW50ayhLRVJOX0NSSVQgIkNQVSV1OiBzdG9wcGluZ1xuIiwgY3B1KTsKLQlkdW1wX3N0YWNrKCk7Ci0Jc3Bpbl91bmxvY2soJnN0b3BfbG9jayk7CisJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORyB8fAorCSAgICBzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1JVTk5JTkcpIHsKKwkJc3Bpbl9sb2NrKCZzdG9wX2xvY2spOworCQlwcmludGsoS0VSTl9DUklUICJDUFUldTogc3RvcHBpbmdcbiIsIGNwdSk7CisJCWR1bXBfc3RhY2soKTsKKwkJc3Bpbl91bmxvY2soJnN0b3BfbG9jayk7CisJfQogCiAJc2V0X2NwdV9vbmxpbmUoY3B1LCBmYWxzZSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfdHdkLmMgYi9hcmNoL2FybS9rZXJuZWwvc21wX3R3ZC5jCmluZGV4IDdjNWYwYzAuLjM1ODgyZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfdHdkLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NtcF90d2QuYwpAQCAtMTMyLDcgKzEzMiw4IEBACiAJdHdkX2NhbGlicmF0ZV9yYXRlKCk7CiAKIAljbGstPm5hbWUgPSAibG9jYWxfdGltZXIiOwotCWNsay0+ZmVhdHVyZXMgPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1Q7CisJY2xrLT5mZWF0dXJlcyA9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDIHwgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCB8CisJCQlDTE9DS19FVlRfRkVBVF9DM1NUT1A7CiAJY2xrLT5yYXRpbmcgPSAzNTA7CiAJY2xrLT5zZXRfbW9kZSA9IHR3ZF9zZXRfbW9kZTsKIAljbGstPnNldF9uZXh0X2V2ZW50ID0gdHdkX3NldF9uZXh0X2V2ZW50OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RjbS5jIGIvYXJjaC9hcm0va2VybmVsL3RjbS5jCmluZGV4IGU1MDMwMzguLjI2Njg1YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC90Y20uYworKysgYi9hcmNoL2FybS9rZXJuZWwvdGNtLmMKQEAgLTEzLDM4ICsxMywzNSBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2dlbmFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+IC8qIG1lbWNweSAqLwotI2luY2x1ZGUgPGFzbS9wYWdlLmg+IC8qIFBBR0VfU0hJRlQgKi8KICNpbmNsdWRlIDxhc20vY3B1dHlwZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPG1hY2gvbWVtb3J5Lmg+CiAjaW5jbHVkZSAidGNtLmgiCiAKLS8qIFNjcmVhbSBhbmQgd2FybiBhYm91dCBtaXN1c2UgKi8KLSNpZiAhZGVmaW5lZChJVENNX09GRlNFVCkgfHwgIWRlZmluZWQoSVRDTV9FTkQpIHx8IFwKLSAgICAhZGVmaW5lZChEVENNX09GRlNFVCkgfHwgIWRlZmluZWQoRFRDTV9FTkQpCi0jZXJyb3IgIlRDTSBzdXBwb3J0IHNlbGVjdGVkIGJ1dCBvZmZzZXRzIG5vdCBkZWZpbmVkISIKLSNlbmRpZgotCiBzdGF0aWMgc3RydWN0IGdlbl9wb29sICp0Y21fcG9vbDsKIAogLyogVENNIHNlY3Rpb24gZGVmaW5pdGlvbnMgZnJvbSB0aGUgbGlua2VyICovCiBleHRlcm4gY2hhciBfX2l0Y21fc3RhcnQsIF9fc2l0Y21fdGV4dCwgX19laXRjbV90ZXh0OwogZXh0ZXJuIGNoYXIgX19kdGNtX3N0YXJ0LCBfX3NkdGNtX2RhdGEsIF9fZWR0Y21fZGF0YTsKIAorLyogVGhlc2Ugd2lsbCBiZSBpbmNyZWFzZWQgYXMgd2UgcnVuICovCit1MzIgZHRjbV9lbmQgPSBEVENNX09GRlNFVDsKK3UzMiBpdGNtX2VuZCA9IElUQ01fT0ZGU0VUOworCiAvKgogICogVENNIG1lbW9yeSByZXNvdXJjZXMKICAqLwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkdGNtX3JlcyA9IHsKIAkubmFtZSA9ICJEVENNIFJBTSIsCiAJLnN0YXJ0ID0gRFRDTV9PRkZTRVQsCi0JLmVuZCA9IERUQ01fRU5ELAorCS5lbmQgPSBEVENNX09GRlNFVCwKIAkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTQogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpdGNtX3JlcyA9IHsKIAkubmFtZSA9ICJJVENNIFJBTSIsCiAJLnN0YXJ0ID0gSVRDTV9PRkZTRVQsCi0JLmVuZCA9IElUQ01fRU5ELAorCS5lbmQgPSBJVENNX09GRlNFVCwKIAkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTQogfTsKIApAQCAtNTIsOCArNDksOCBAQAogCXsKIAkJLnZpcnR1YWwJPSBEVENNX09GRlNFVCwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKERUQ01fT0ZGU0VUKSwKLQkJLmxlbmd0aAkJPSAoRFRDTV9FTkQgLSBEVENNX09GRlNFVCArIDEpLAotCQkudHlwZQkJPSBNVF9VTkNBQ0hFRAorCQkubGVuZ3RoCQk9IDAsCisJCS50eXBlCQk9IE1UX01FTU9SWV9EVENNCiAJfQogfTsKIApAQCAtNjEsOCArNTgsOCBAQAogCXsKIAkJLnZpcnR1YWwJPSBJVENNX09GRlNFVCwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKElUQ01fT0ZGU0VUKSwKLQkJLmxlbmd0aAkJPSAoSVRDTV9FTkQgLSBJVENNX09GRlNFVCArIDEpLAotCQkudHlwZQkJPSBNVF9VTkNBQ0hFRAorCQkubGVuZ3RoCQk9IDAsCisJCS50eXBlCQk9IE1UX01FTU9SWV9JVENNCiAJfQogfTsKIApAQCAtOTMsMTQgKzkwLDI0IEBACiB9CiBFWFBPUlRfU1lNQk9MKHRjbV9mcmVlKTsKIAotCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfdGNtX2JhbmsodTggdHlwZSwgdTMyIG9mZnNldCwgdTMyIGV4cGVjdGVkX3NpemUpCitzdGF0aWMgaW50IF9faW5pdCBzZXR1cF90Y21fYmFuayh1OCB0eXBlLCB1OCBiYW5rLCB1OCBiYW5rcywKKwkJCQkgIHUzMiAqb2Zmc2V0KQogewogCWNvbnN0IGludCB0Y21fc2l6ZXNbMTZdID0geyAwLCAtMSwgLTEsIDQsIDgsIDE2LCAzMiwgNjQsIDEyOCwKIAkJCQkgICAgMjU2LCA1MTIsIDEwMjQsIC0xLCAtMSwgLTEsIC0xIH07CiAJdTMyIHRjbV9yZWdpb247CiAJaW50IHRjbV9zaXplOwogCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBUQ00gYmFuayBvZiB0aGlzIHR5cGUsCisJICogc2VsZWN0IHRoZSBUQ00gYmFuayB0byBvcGVyYXRlIG9uIGluIHRoZSBUQ00gc2VsZWN0aW9uCisJICogcmVnaXN0ZXIuCisJICovCisJaWYgKGJhbmtzID4gMSkKKwkJYXNtKCJtY3IJcDE1LCAwLCAlMCwgYzksIGMyLCAwIgorCQkgICAgOiAvKiBObyBvdXRwdXQgb3BlcmFuZHMgKi8KKwkJICAgIDogInIiIChiYW5rKSk7CisKIAkvKiBSZWFkIHRoZSBzcGVjaWFsIFRDTSByZWdpb24gcmVnaXN0ZXIgYzksIDAgKi8KIAlpZiAoIXR5cGUpCiAJCWFzbSgibXJjCXAxNSwgMCwgJTAsIGM5LCBjMSwgMCIKQEAgLTExMSwyNiArMTE4LDI0IEBACiAKIAl0Y21fc2l6ZSA9IHRjbV9zaXplc1sodGNtX3JlZ2lvbiA+PiAyKSAmIDB4MGZdOwogCWlmICh0Y21fc2l6ZSA8IDApIHsKLQkJcHJfZXJyKCJDUFU6ICVzVENNIG9mIHVua25vd24gc2l6ZSFcbiIsCi0JCQl0eXBlID8gIkkiIDogIkQiKTsKKwkJcHJfZXJyKCJDUFU6ICVzVENNJWQgb2YgdW5rbm93biBzaXplXG4iLAorCQkgICAgICAgdHlwZSA/ICJJIiA6ICJEIiwgYmFuayk7CisJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSBpZiAodGNtX3NpemUgPiAzMikgeworCQlwcl9lcnIoIkNQVTogJXNUQ00lZCBsYXJnZXIgdGhhbiAzMmsgZm91bmRcbiIsCisJCSAgICAgICB0eXBlID8gIkkiIDogIkQiLCBiYW5rKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfSBlbHNlIHsKLQkJcHJfaW5mbygiQ1BVOiBmb3VuZCAlc1RDTSAlZGsgQCAlMDh4LCAlc2VuYWJsZWRcbiIsCisJCXByX2luZm8oIkNQVTogZm91bmQgJXNUQ00lZCAlZGsgQCAlMDh4LCAlc2VuYWJsZWRcbiIsCiAJCQl0eXBlID8gIkkiIDogIkQiLAorCQkJYmFuaywKIAkJCXRjbV9zaXplLAogCQkJKHRjbV9yZWdpb24gJiAweGZmZmZmMDAwVSksCiAJCQkodGNtX3JlZ2lvbiAmIDEpID8gIiIgOiAibm90ICIpOwogCX0KIAotCWlmICh0Y21fc2l6ZSAhPSBleHBlY3RlZF9zaXplKSB7Ci0JCXByX2NyaXQoIkNQVTogJXNUQ00gd2FzIGRldGVjdGVkICVkayBidXQgZXhwZWN0ZWQgJWRrIVxuIiwKLQkJICAgICAgIHR5cGUgPyAiSSIgOiAiRCIsCi0JCSAgICAgICB0Y21fc2l6ZSwKLQkJICAgICAgIGV4cGVjdGVkX3NpemUpOwotCQkvKiBBZGp1c3QgdG8gdGhlIGV4cGVjdGVkIHNpemU/IHdoYXQgY2FuIHdlIGRvLi4uICovCi0JfQotCiAJLyogRm9yY2UgbW92ZSB0aGUgVENNIGJhbmsgdG8gd2hlcmUgd2Ugd2FudCBpdCwgZW5hYmxlICovCi0JdGNtX3JlZ2lvbiA9IG9mZnNldCB8ICh0Y21fcmVnaW9uICYgMHgwMDAwMGZmZVUpIHwgMTsKKwl0Y21fcmVnaW9uID0gKm9mZnNldCB8ICh0Y21fcmVnaW9uICYgMHgwMDAwMGZmZVUpIHwgMTsKIAogCWlmICghdHlwZSkKIAkJYXNtKCJtY3IJcDE1LCAwLCAlMCwgYzksIGMxLCAwIgpAQCAtMTQxLDEwICsxNDYsMTUgQEAKIAkJICAgIDogLyogTm8gb3V0cHV0IG9wZXJhbmRzICovCiAJCSAgICA6ICJyIiAodGNtX3JlZ2lvbikpOwogCi0JcHJfZGVidWcoIkNQVTogbW92ZWQgJXNUQ00gJWRrIHRvICUwOHgsIGVuYWJsZWRcbiIsCi0JCSB0eXBlID8gIkkiIDogIkQiLAotCQkgdGNtX3NpemUsCi0JCSAodGNtX3JlZ2lvbiAmIDB4ZmZmZmYwMDBVKSk7CisJLyogSW5jcmVhc2Ugb2Zmc2V0ICovCisJKm9mZnNldCArPSAodGNtX3NpemUgPDwgMTApOworCisJcHJfaW5mbygiQ1BVOiBtb3ZlZCAlc1RDTSVkICVkayB0byAlMDh4LCBlbmFibGVkXG4iLAorCQl0eXBlID8gIkkiIDogIkQiLAorCQliYW5rLAorCQl0Y21fc2l6ZSwKKwkJKHRjbV9yZWdpb24gJiAweGZmZmZmMDAwVSkpOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtMTUzLDM0ICsxNjMsNTIgQEAKIHZvaWQgX19pbml0IHRjbV9pbml0KHZvaWQpCiB7CiAJdTMyIHRjbV9zdGF0dXMgPSByZWFkX2NwdWlkX3RjbXN0YXR1cygpOworCXU4IGR0Y21fYmFua3MgPSAodGNtX3N0YXR1cyA+PiAxNikgJiAweDAzOworCXU4IGl0Y21fYmFua3MgPSAodGNtX3N0YXR1cyAmIDB4MDMpOwogCWNoYXIgKnN0YXJ0OwogCWNoYXIgKmVuZDsKIAljaGFyICpyYW07CisJaW50IHJldDsKKwlpbnQgaTsKIAogCS8qIFNldHVwIERUQ00gaWYgcHJlc2VudCAqLwotCWlmICh0Y21fc3RhdHVzICYgKDEgPDwgMTYpKSB7Ci0JCXNldHVwX3RjbV9iYW5rKDAsIERUQ01fT0ZGU0VULAotCQkJICAgICAgIChEVENNX0VORCAtIERUQ01fT0ZGU0VUICsgMSkgPj4gMTApOworCWlmIChkdGNtX2JhbmtzID4gMCkgeworCQlmb3IgKGkgPSAwOyBpIDwgZHRjbV9iYW5rczsgaSsrKSB7CisJCQlyZXQgPSBzZXR1cF90Y21fYmFuaygwLCBpLCBkdGNtX2JhbmtzLCAmZHRjbV9lbmQpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm47CisJCX0KKwkJZHRjbV9yZXMuZW5kID0gZHRjbV9lbmQgLSAxOwogCQlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmR0Y21fcmVzKTsKKwkJZHRjbV9pb21hcFswXS5sZW5ndGggPSBkdGNtX2VuZCAtIERUQ01fT0ZGU0VUOwogCQlpb3RhYmxlX2luaXQoZHRjbV9pb21hcCwgMSk7CiAJCS8qIENvcHkgZGF0YSBmcm9tIFJBTSB0byBEVENNICovCiAJCXN0YXJ0ID0gJl9fc2R0Y21fZGF0YTsKIAkJZW5kICAgPSAmX19lZHRjbV9kYXRhOwogCQlyYW0gICA9ICZfX2R0Y21fc3RhcnQ7CisJCS8qIFRoaXMgbWVhbnMgeW91IGNvbXBpbGVkIG1vcmUgY29kZSB0aGFuIGZpdHMgaW50byBEVENNICovCisJCUJVR19PTigoZW5kIC0gc3RhcnQpID4gKGR0Y21fZW5kIC0gRFRDTV9PRkZTRVQpKTsKIAkJbWVtY3B5KHN0YXJ0LCByYW0sIChlbmQtc3RhcnQpKTsKIAkJcHJfZGVidWcoIkNQVSBEVENNOiBjb3BpZWQgZGF0YSBmcm9tICVwIC0gJXBcbiIsIHN0YXJ0LCBlbmQpOwogCX0KIAogCS8qIFNldHVwIElUQ00gaWYgcHJlc2VudCAqLwotCWlmICh0Y21fc3RhdHVzICYgMSkgewotCQlzZXR1cF90Y21fYmFuaygxLCBJVENNX09GRlNFVCwKLQkJCSAgICAgICAoSVRDTV9FTkQgLSBJVENNX09GRlNFVCArIDEpID4+IDEwKTsKKwlpZiAoaXRjbV9iYW5rcyA+IDApIHsKKwkJZm9yIChpID0gMDsgaSA8IGl0Y21fYmFua3M7IGkrKykgeworCQkJcmV0ID0gc2V0dXBfdGNtX2JhbmsoMSwgaSwgaXRjbV9iYW5rcywgJml0Y21fZW5kKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuOworCQl9CisJCWl0Y21fcmVzLmVuZCA9IGl0Y21fZW5kIC0gMTsKIAkJcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZpdGNtX3Jlcyk7CisJCWl0Y21faW9tYXBbMF0ubGVuZ3RoID0gaXRjbV9lbmQgLSBJVENNX09GRlNFVDsKIAkJaW90YWJsZV9pbml0KGl0Y21faW9tYXAsIDEpOwogCQkvKiBDb3B5IGNvZGUgZnJvbSBSQU0gdG8gSVRDTSAqLwogCQlzdGFydCA9ICZfX3NpdGNtX3RleHQ7CiAJCWVuZCAgID0gJl9fZWl0Y21fdGV4dDsKIAkJcmFtICAgPSAmX19pdGNtX3N0YXJ0OworCQkvKiBUaGlzIG1lYW5zIHlvdSBjb21waWxlZCBtb3JlIGNvZGUgdGhhbiBmaXRzIGludG8gSVRDTSAqLworCQlCVUdfT04oKGVuZCAtIHN0YXJ0KSA+IChpdGNtX2VuZCAtIElUQ01fT0ZGU0VUKSk7CiAJCW1lbWNweShzdGFydCwgcmFtLCAoZW5kLXN0YXJ0KSk7CiAJCXByX2RlYnVnKCJDUFUgSVRDTTogY29waWVkIGNvZGUgZnJvbSAlcCAtICVwXG4iLCBzdGFydCwgZW5kKTsKIAl9CkBAIC0yMDgsMTAgKzIzNiwxMCBAQAogCXByX2RlYnVnKCJTZXR0aW5nIHVwIFRDTSBtZW1vcnkgcG9vbFxuIik7CiAKIAkvKiBBZGQgdGhlIHJlc3Qgb2YgRFRDTSB0byB0aGUgVENNIHBvb2wgKi8KLQlpZiAodGNtX3N0YXR1cyAmICgxIDw8IDE2KSkgewotCQlpZiAoZHRjbV9wb29sX3N0YXJ0IDwgRFRDTV9FTkQpIHsKKwlpZiAodGNtX3N0YXR1cyAmICgweDAzIDw8IDE2KSkgeworCQlpZiAoZHRjbV9wb29sX3N0YXJ0IDwgZHRjbV9lbmQpIHsKIAkJCXJldCA9IGdlbl9wb29sX2FkZCh0Y21fcG9vbCwgZHRjbV9wb29sX3N0YXJ0LAotCQkJCQkgICBEVENNX0VORCAtIGR0Y21fcG9vbF9zdGFydCArIDEsIC0xKTsKKwkJCQkJICAgZHRjbV9lbmQgLSBkdGNtX3Bvb2xfc3RhcnQsIC0xKTsKIAkJCWlmIChyZXQpIHsKIAkJCQlwcl9lcnIoIkNQVSBEVENNOiBjb3VsZCBub3QgYWRkIERUQ00gIiBcCiAJCQkJICAgICAgICJyZW1haW5kZXIgdG8gcG9vbCFcbiIpOwpAQCAtMjE5LDE2ICsyNDcsMTYgQEAKIAkJCX0KIAkJCXByX2RlYnVnKCJDUFUgRFRDTTogQWRkZWQgJTA4eCBieXRlcyBAICUwOHggdG8gIiBcCiAJCQkJICJ0aGUgVENNIG1lbW9yeSBwb29sXG4iLAotCQkJCSBEVENNX0VORCAtIGR0Y21fcG9vbF9zdGFydCArIDEsCisJCQkJIGR0Y21fZW5kIC0gZHRjbV9wb29sX3N0YXJ0LAogCQkJCSBkdGNtX3Bvb2xfc3RhcnQpOwogCQl9CiAJfQogCiAJLyogQWRkIHRoZSByZXN0IG9mIElUQ00gdG8gdGhlIFRDTSBwb29sICovCi0JaWYgKHRjbV9zdGF0dXMgJiAxKSB7Ci0JCWlmIChpdGNtX3Bvb2xfc3RhcnQgPCBJVENNX0VORCkgeworCWlmICh0Y21fc3RhdHVzICYgMHgwMykgeworCQlpZiAoaXRjbV9wb29sX3N0YXJ0IDwgaXRjbV9lbmQpIHsKIAkJCXJldCA9IGdlbl9wb29sX2FkZCh0Y21fcG9vbCwgaXRjbV9wb29sX3N0YXJ0LAotCQkJCQkgICBJVENNX0VORCAtIGl0Y21fcG9vbF9zdGFydCArIDEsIC0xKTsKKwkJCQkJICAgaXRjbV9lbmQgLSBpdGNtX3Bvb2xfc3RhcnQsIC0xKTsKIAkJCWlmIChyZXQpIHsKIAkJCQlwcl9lcnIoIkNQVSBJVENNOiBjb3VsZCBub3QgYWRkIElUQ00gIiBcCiAJCQkJICAgICAgICJyZW1haW5kZXIgdG8gcG9vbCFcbiIpOwpAQCAtMjM2LDcgKzI2NCw3IEBACiAJCQl9CiAJCQlwcl9kZWJ1ZygiQ1BVIElUQ006IEFkZGVkICUwOHggYnl0ZXMgQCAlMDh4IHRvICIgXAogCQkJCSAidGhlIFRDTSBtZW1vcnkgcG9vbFxuIiwKLQkJCQkgSVRDTV9FTkQgLSBpdGNtX3Bvb2xfc3RhcnQgKyAxLAorCQkJCSBpdGNtX2VuZCAtIGl0Y21fcG9vbF9zdGFydCwKIAkJCQkgaXRjbV9wb29sX3N0YXJ0KTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKaW5kZXggMTYyMWU1My4uY2RhNzhkNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CiAjaW5jbHVkZSA8YXNtL3Vud2luZC5oPgorI2luY2x1ZGUgPGFzbS90bHMuaD4KIAogI2luY2x1ZGUgInB0cmFjZS5oIgogI2luY2x1ZGUgInNpZ25hbC5oIgpAQCAtNTE4LDE3ICs1MTksMjAgQEAKIAogCWNhc2UgTlIoc2V0X3Rscyk6CiAJCXRocmVhZC0+dHBfdmFsdWUgPSByZWdzLT5BUk1fcjA7Ci0jaWYgZGVmaW5lZChDT05GSUdfSEFTX1RMU19SRUcpCi0JCWFzbSAoIm1jciBwMTUsIDAsICUwLCBjMTMsIGMwLCAzIiA6IDogInIiIChyZWdzLT5BUk1fcjApICk7Ci0jZWxpZiAhZGVmaW5lZChDT05GSUdfVExTX1JFR19FTVVMKQotCQkvKgotCQkgKiBVc2VyIHNwYWNlIG11c3QgbmV2ZXIgdHJ5IHRvIGFjY2VzcyB0aGlzIGRpcmVjdGx5LgotCQkgKiBFeHBlY3QgeW91ciBhcHAgdG8gYnJlYWsgZXZlbnR1YWxseSBpZiB5b3UgZG8gc28uCi0JCSAqIFRoZSB1c2VyIGhlbHBlciBhdCAweGZmZmYwZmUwIG11c3QgYmUgdXNlZCBpbnN0ZWFkLgotCQkgKiAoc2VlIGVudHJ5LWFybXYuUyBmb3IgZGV0YWlscykKLQkJICovCi0JCSooKHVuc2lnbmVkIGludCAqKTB4ZmZmZjBmZjApID0gcmVncy0+QVJNX3IwOwotI2VuZGlmCisJCWlmICh0bHNfZW11KQorCQkJcmV0dXJuIDA7CisJCWlmIChoYXNfdGxzX3JlZykgeworCQkJYXNtICgibWNyIHAxNSwgMCwgJTAsIGMxMywgYzAsIDMiCisJCQkJOiA6ICJyIiAocmVncy0+QVJNX3IwKSk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogVXNlciBzcGFjZSBtdXN0IG5ldmVyIHRyeSB0byBhY2Nlc3MgdGhpcyBkaXJlY3RseS4KKwkJCSAqIEV4cGVjdCB5b3VyIGFwcCB0byBicmVhayBldmVudHVhbGx5IGlmIHlvdSBkbyBzby4KKwkJCSAqIFRoZSB1c2VyIGhlbHBlciBhdCAweGZmZmYwZmUwIG11c3QgYmUgdXNlZCBpbnN0ZWFkLgorCQkJICogKHNlZSBlbnRyeS1hcm12LlMgZm9yIGRldGFpbHMpCisJCQkgKi8KKwkJCSooKHVuc2lnbmVkIGludCAqKTB4ZmZmZjBmZjApID0gcmVncy0+QVJNX3IwOworCQl9CiAJCXJldHVybiAwOwogCiAjaWZkZWYgQ09ORklHX05FRURTX1NZU0NBTExfRk9SX0NNUFhDSEcKQEAgLTc0Myw2ICs3NDcsMTYgQEAKIAlyZXR1cm47CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBrdXNlcl9nZXRfdGxzX2luaXQodW5zaWduZWQgbG9uZyB2ZWN0b3JzKQoreworCS8qCisJICogdmVjdG9ycyArIDB4ZmUwID0gX19rdXNlcl9nZXRfdGxzCisJICogdmVjdG9ycyArIDB4ZmU4ID0gaGFyZHdhcmUgVExTIGluc3RydWN0aW9uIGF0IDB4ZmZmZjBmZTgKKwkgKi8KKwlpZiAodGxzX2VtdSB8fCBoYXNfdGxzX3JlZykKKwkJbWVtY3B5KCh2b2lkICopdmVjdG9ycyArIDB4ZmUwLCAodm9pZCAqKXZlY3RvcnMgKyAweGZlOCwgNCk7Cit9CisKIHZvaWQgX19pbml0IGVhcmx5X3RyYXBfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgdmVjdG9ycyA9IENPTkZJR19WRUNUT1JTX0JBU0U7CkBAIC03NjEsNiArNzc1LDExIEBACiAJbWVtY3B5KCh2b2lkICopdmVjdG9ycyArIDB4MTAwMCAtIGt1c2VyX3N6LCBfX2t1c2VyX2hlbHBlcl9zdGFydCwga3VzZXJfc3opOwogCiAJLyoKKwkgKiBEbyBwcm9jZXNzb3Igc3BlY2lmaWMgZml4dXBzIGZvciB0aGUga3VzZXIgaGVscGVycworCSAqLworCWt1c2VyX2dldF90bHNfaW5pdCh2ZWN0b3JzKTsKKworCS8qCiAJICogQ29weSBzaWduYWwgcmV0dXJuIGhhbmRsZXJzIGludG8gdGhlIHZlY3RvciBwYWdlLCBhbmQKIAkgKiBzZXQgc2lncmV0dXJuIHRvIGJlIGEgcG9pbnRlciB0byB0aGVzZS4KIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9NYWtlZmlsZSBiL2FyY2gvYXJtL2xpYi9NYWtlZmlsZQppbmRleCAwMzBiYTcyLi41OWZmNDJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbGliL01ha2VmaWxlCkBAIC00MSw3ICs0MSw2IEBACiBlbmRpZgogCiBsaWItJChDT05GSUdfQVJDSF9SUEMpCQkrPSBlY2FyZC5vIGlvLWFjb3JuLm8gZmxvcHB5ZG1hLm8KLWxpYi0kKENPTkZJR19BUkNIX0w3MjAwKQkrPSBpby1hY29ybi5vCiBsaWItJChDT05GSUdfQVJDSF9TSEFSSykJKz0gaW8tc2hhcmsubwogCiAkKG9iaikvY3N1bXBhcnRpYWxjb3B5Lm86CSQob2JqKS9jc3VtcGFydGlhbGNvcHlnZW5lcmljLlMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9jc3VtcGFydGlhbGNvcHl1c2VyLlMgYi9hcmNoL2FybS9saWIvY3N1bXBhcnRpYWxjb3B5dXNlci5TCmluZGV4IDU5ZmY2ZmQuLjdkMDhiNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi9jc3VtcGFydGlhbGNvcHl1c2VyLlMKKysrIGIvYXJjaC9hcm0vbGliL2NzdW1wYXJ0aWFsY29weXVzZXIuUwpAQCAtNzEsNyArNzEsNyBAQAogCQkucHVzaHNlY3Rpb24gLmZpeHVwLCJheCIKIAkJLmFsaWduCTQKIDkwMDE6CQltb3YJcjQsICMtRUZBVUxUCi0JCWxkcglyNSwgW2ZwLCAjNF0JCUAgKmVycl9wdHIKKwkJbGRyCXI1LCBbc3AsICM4KjRdCQlAICplcnJfcHRyCiAJCXN0cglyNCwgW3I1XQogCQlsZG1pYQlzcCwge3IxLCByMn0JCUAgcmV0cmlldmUgZHN0LCBsZW4KIAkJYWRkCXIyLCByMiwgcjEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1hYWVjMjAwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggYzAwODIyNS4uNGY5M2M1NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hYWVjMjAwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hYWVjMjAwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTE0LDE0ICsxNCw0IEBACiAKICNkZWZpbmUgUEhZU19PRkZTRVQJVUwoMHhmMDAwMDAwMCkKIAotLyoKLSAqIFRoZSBub2RlcyBhcmUgdGhlIGZvbGxvd2luZ3M6Ci0gKgotICogICBub2RlIDA6IDB4ZjAwMC4wMDAwIC0gMHhmM2ZmLmZmZmYKLSAqICAgbm9kZSAxOiAweGY0MDAuMDAwMCAtIDB4ZjdmZi5mZmZmCi0gKiAgIG5vZGUgMjogMHhmODAwLjAwMDAgLSAweGZiZmYuZmZmZgotICogICBub2RlIDM6IDB4ZmMwMC4wMDAwIC0gMHhmZmZmLmZmZmYKLSAqLwotI2RlZmluZSBOT0RFX01FTV9TSVpFX0JJVFMJMjYKLQogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTUVNT1JZX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcKaW5kZXggODQxZWFmOC4uOTM5YmNjZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcKQEAgLTM2Niw2ICszNjYsMTcgQEAKIAogZW5kaWYKIAoraWYgKEFSQ0hfQVQ5MVNBTTkyNjAgfHwgQVJDSF9BVDkxU0FNOUcyMCkKK2NvbW1lbnQgIkFUOTFTQU05MjYwL0FUOTFTQU05RzIwIGJvYXJkcyIKKworY29uZmlnIE1BQ0hfU05BUFBFUl85MjYwCisgICAgICAgIGJvb2wgIkJsdWV3YXRlciBTeXN0ZW1zIFNuYXBwZXIgOTI2MC85RzIwIG1vZHVsZSIKKyAgICAgICAgaGVscAorICAgICAgICAgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEJsdWV3YXRlciBTeXN0ZW1zIFNuYXBwZXIgOTI2MCBvcgorICAgICAgICAgIFNuYXBwZXIgOUcyMCBtb2R1bGVzLgorICAgICAgICAgIDxodHRwOi8vd3d3LmJsdWV3YXRlcnN5cy5jb20vPgorZW5kaWYKKwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGlmIEFSQ0hfQVQ5MVNBTTlHNDUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZQppbmRleCBjMWY4MjFlLi5jYTJhYzAwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL01ha2VmaWxlCkBAIC02Niw2ICs2Niw5IEBACiBvYmotJChDT05GSUdfTUFDSF9TVEFNUDlHMjApCSs9IGJvYXJkLXN0YW1wOWcyMC5vCiBvYmotJChDT05GSUdfTUFDSF9QT1JUVVhHMjApCSs9IGJvYXJkLXN0YW1wOWcyMC5vCiAKKyMgQVQ5MVNBTTkyNjAvQVQ5MVNBTTlHMjAgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAorb2JqLSQoQ09ORklHX01BQ0hfU05BUFBFUl85MjYwKQkrPSBib2FyZC1zbmFwcGVyOTI2MC5vCisKICMgQVQ5MVNBTTlHNDUgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAogb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVNBTTlHNDVFS0VTKSArPSBib2FyZC1zYW05bTEwZzQ1ZWsubwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDUuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NS5jCmluZGV4IDg1MTY2YjcuLjc1M2MwZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NS5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bWFjaC9hdDkxX3BtYy5oPgogI2luY2x1ZGUgPG1hY2gvYXQ5MV9yc3RjLmg+CiAjaW5jbHVkZSA8bWFjaC9hdDkxX3NoZHdjLmg+CisjaW5jbHVkZSA8bWFjaC9jcHUuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJjbG9jay5oIgpAQCAtMTc2LDYgKzE3NywxMyBAQAogCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCiB9OwogCisvKiBWaWRlbyBkZWNvZGVyIGNsb2NrIC0gT25seSBmb3Igc2FtOW0xMC9zYW05bTExICovCitzdGF0aWMgc3RydWN0IGNsayB2ZGVjX2NsayA9IHsKKwkubmFtZQkJPSAidmRlY19jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfVkRFQywKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKKwogLyogT25lIGFkZGl0aW9uYWwgZmFrZSBjbG9jayBmb3Igb2hjaSAqLwogc3RhdGljIHN0cnVjdCBjbGsgb2hjaV9jbGsgPSB7CiAJLm5hbWUJCT0gIm9oY2lfY2xrIiwKQEAgLTIzOSw2ICsyNDcsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBlcmlwaF9jbG9ja3MpOyBpKyspCiAJCWNsa19yZWdpc3RlcihwZXJpcGhfY2xvY2tzW2ldKTsKIAorCWlmIChjcHVfaXNfYXQ5MXNhbTltMTAoKSB8fCBjcHVfaXNfYXQ5MXNhbTltMTEoKSkKKwkJY2xrX3JlZ2lzdGVyKCZ2ZGVjX2Nsayk7CisKIAljbGtfcmVnaXN0ZXIoJnBjazApOwogCWNsa19yZWdpc3RlcigmcGNrMSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLTJzbG90LW1tYy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay0yc2xvdC1tbWMuYwppbmRleCBhNDEwMmQ3Li5jNDlmNWMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLTJzbG90LW1tYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05ZzIwZWstMnNsb3QtbW1jLmMKQEAgLTI2LDYgKzI2LDkgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2F0NzNjMjEzLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZml4ZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTIzNSw2ICsyMzgsNDYgQEAKIAl9CiB9OwogCisjaWYgZGVmaW5lZChDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UpIHx8IGRlZmluZWQoQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBla19hdWRpb19jb25zdW1lcl9zdXBwbGllc1tdID0geworCVJFR1VMQVRPUl9TVVBQTFkoIkFWREQiLCAiMC0wMDFiIiksCisJUkVHVUxBVE9SX1NVUFBMWSgiSFBWREQiLCAiMC0wMDFiIiksCisJUkVHVUxBVE9SX1NVUFBMWSgiREJWREQiLCAiMC0wMDFiIiksCisJUkVHVUxBVE9SX1NVUFBMWSgiRENWREQiLCAiMC0wMDFiIiksCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgZWtfYXZkZF9yZWdfaW5pdF9kYXRhID0geworCS5jb25zdHJhaW50cwk9IHsKKwkJLm5hbWUJPSAiM1YzIiwKKwkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkuY29uc3VtZXJfc3VwcGxpZXMgPSBla19hdWRpb19jb25zdW1lcl9zdXBwbGllcywKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gQVJSQVlfU0laRShla19hdWRpb19jb25zdW1lcl9zdXBwbGllcyksCit9OworCitzdGF0aWMgc3RydWN0IGZpeGVkX3ZvbHRhZ2VfY29uZmlnIGVrX3ZkZF9wZGF0YSA9IHsKKwkuc3VwcGx5X25hbWUJPSAiYm9hcmQtM1YzIiwKKwkubWljcm92b2x0cwk9IDMzMDAwMDAsCisJLmdwaW8JCT0gLUVJTlZBTCwKKwkuZW5hYmxlZF9hdF9ib290ID0gMCwKKwkuaW5pdF9kYXRhCT0gJmVrX2F2ZGRfcmVnX2luaXRfZGF0YSwKK307CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBla192b2x0YWdlX3JlZ3VsYXRvciA9IHsKKwkubmFtZQkJPSAicmVnLWZpeGVkLXZvbHRhZ2UiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmVrX3ZkZF9wZGF0YSwKKwl9LAorfTsKK3N0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfcmVndWxhdG9ycyh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZWtfdm9sdGFnZV9yZWd1bGF0b3IpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfcmVndWxhdG9ycyh2b2lkKSB7fQorI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBla19pMmNfZGV2aWNlc1tdID0gewogCXsKIAkJSTJDX0JPQVJEX0lORk8oIjI0YzUxMiIsIDB4NTApLApAQCAtMjU2LDYgKzI5OSw4IEBACiAJZWtfYWRkX2RldmljZV9uYW5kKCk7CiAJLyogRXRoZXJuZXQgKi8KIAlhdDkxX2FkZF9kZXZpY2VfZXRoKCZla19tYWNiX2RhdGEpOworCS8qIFJlZ3VsYXRvcnMgKi8KKwlla19hZGRfcmVndWxhdG9ycygpOwogCS8qIE1NQyAqLwogI2lmIGRlZmluZWQoQ09ORklHX01NQ19BVE1FTE1DSSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX0FUTUVMTUNJX01PRFVMRSkKIAlhdDkxX2FkZF9kZXZpY2VfbWNpKDAsICZla19tbWNfZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLmMKaW5kZXggYzExZmQ0Ny4uNmVhOTgwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05ZzIwZWsuYwpAQCAtMjcsNiArMjcsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZml4ZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTI2OSw2ICsyNzIsNDYgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkge30KICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UpIHx8IGRlZmluZWQoQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBla19hdWRpb19jb25zdW1lcl9zdXBwbGllc1tdID0geworCVJFR1VMQVRPUl9TVVBQTFkoIkFWREQiLCAiMC0wMDFiIiksCisJUkVHVUxBVE9SX1NVUFBMWSgiSFBWREQiLCAiMC0wMDFiIiksCisJUkVHVUxBVE9SX1NVUFBMWSgiREJWREQiLCAiMC0wMDFiIiksCisJUkVHVUxBVE9SX1NVUFBMWSgiRENWREQiLCAiMC0wMDFiIiksCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgZWtfYXZkZF9yZWdfaW5pdF9kYXRhID0geworCS5jb25zdHJhaW50cwk9IHsKKwkJLm5hbWUJPSAiM1YzIiwKKwkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkuY29uc3VtZXJfc3VwcGxpZXMgPSBla19hdWRpb19jb25zdW1lcl9zdXBwbGllcywKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gQVJSQVlfU0laRShla19hdWRpb19jb25zdW1lcl9zdXBwbGllcyksCit9OworCitzdGF0aWMgc3RydWN0IGZpeGVkX3ZvbHRhZ2VfY29uZmlnIGVrX3ZkZF9wZGF0YSA9IHsKKwkuc3VwcGx5X25hbWUJPSAiYm9hcmQtM1YzIiwKKwkubWljcm92b2x0cwk9IDMzMDAwMDAsCisJLmdwaW8JCT0gLUVJTlZBTCwKKwkuZW5hYmxlZF9hdF9ib290ID0gMCwKKwkuaW5pdF9kYXRhCT0gJmVrX2F2ZGRfcmVnX2luaXRfZGF0YSwKK307CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBla192b2x0YWdlX3JlZ3VsYXRvciA9IHsKKwkubmFtZQkJPSAicmVnLWZpeGVkLXZvbHRhZ2UiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmVrX3ZkZF9wZGF0YSwKKwl9LAorfTsKK3N0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfcmVndWxhdG9ycyh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZWtfdm9sdGFnZV9yZWd1bGF0b3IpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfcmVndWxhdG9ycyh2b2lkKSB7fQorI2VuZGlmCisKIAogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGVrX2kyY19kZXZpY2VzW10gPSB7CiAgICAgICAgIHsKQEAgLTI5NCw2ICszMzcsOCBAQAogCWVrX2FkZF9kZXZpY2VfbmFuZCgpOwogCS8qIEV0aGVybmV0ICovCiAJYXQ5MV9hZGRfZGV2aWNlX2V0aCgmZWtfbWFjYl9kYXRhKTsKKwkvKiBSZWd1bGF0b3JzICovCisJZWtfYWRkX3JlZ3VsYXRvcnMoKTsKIAkvKiBNTUMgKi8KIAlhdDkxX2FkZF9kZXZpY2VfbW1jKDAsICZla19tbWNfZGF0YSk7CiAJLyogSTJDICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc25hcHBlcjkyNjAuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zbmFwcGVyOTI2MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMDhhZTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc25hcHBlcjkyNjAuYwpAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zbmFwcGVyOTI2MC5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBCbHVld2F0ZXIgU3lzdGVtIEx0ZAorICoKKyAqIEF1dGhvcjogQW5kcmUgUmVuYXVkIDxhbmRyZUBibHVld2F0ZXJzeXMuY29tPgorICogQXV0aG9yOiBSeWFuIE1hbGxvbiAgPHJ5YW5AYmx1ZXdhdGVyc3lzLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcGNhOTUzeC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+CisKKyNpbmNsdWRlICJzYW05X3NtYy5oIgorI2luY2x1ZGUgImdlbmVyaWMuaCIKKworI2RlZmluZSBTTkFQUEVSOTI2MF9JT19FWFBfR1BJTyh4KQkoTlJfQlVJTFRJTl9HUElPICsgKHgpKQorCitzdGF0aWMgdm9pZCBfX2luaXQgc25hcHBlcjkyNjBfbWFwX2lvKHZvaWQpCit7CisJYXQ5MXNhbTkyNjBfaW5pdGlhbGl6ZSgxODQzMjAwMCk7CisKKwkvKiBEZWJ1ZyBvbiB0dHlTMCAqLworCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKKwlhdDkxX3NldF9zZXJpYWxfY29uc29sZSgwKTsKKworCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzAsIDEsCisJCQkgICBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKKwlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMxLCAyLAorCQkJICAgQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUyk7CisJYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMiwgMywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzbmFwcGVyOTI2MF9pbml0X2lycSh2b2lkKQoreworCWF0OTFzYW05MjYwX2luaXRfaW50ZXJydXB0cyhOVUxMKTsKK30KKworc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIHNuYXBwZXI5MjYwX3VzYmhfZGF0YSA9IHsKKwkucG9ydHMJCT0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIHNuYXBwZXI5MjYwX3VkY19kYXRhID0geworCS52YnVzX3BpbgkJPSBTTkFQUEVSOTI2MF9JT19FWFBfR1BJTyg1KSwKKwkudmJ1c19hY3RpdmVfbG93CT0gMSwKKwkudmJ1c19wb2xsZWQJCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSBzbmFwcGVyOTI2MF9tYWNiX2RhdGEgPSB7CisJLmlzX3JtaWkJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIF9faW5pdGRhdGEgc25hcHBlcjkyNjBfbmFuZF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQk9ICJQcmVib290IiwKKwkJLm9mZnNldAk9IDAsCisJCS5zaXplCT0gU1pfMTI4SywKKwl9LAorCXsKKwkJLm5hbWUJPSAiQm9vdGxvYWRlciIsCisJCS5vZmZzZXQJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCT0gU1pfMjU2SywKKwl9LAorCXsKKwkJLm5hbWUJPSAiRW52aXJvbm1lbnQiLAorCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQk9IFNaXzEyOEssCisJfSwKKwl7CisJCS5uYW1lCT0gIktlcm5lbCIsCisJCS5vZmZzZXQJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCT0gU1pfNE0sCisJfSwKKwl7CisJCS5uYW1lCT0gIkZpbGVzeXN0ZW0iLAorCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqIF9faW5pdAorc25hcHBlcjkyNjBfbmFuZF9wYXJ0aXRpb25faW5mbyhpbnQgc2l6ZSwgaW50ICpudW1fcGFydGl0aW9ucykKK3sKKwkqbnVtX3BhcnRpdGlvbnMgPSBBUlJBWV9TSVpFKHNuYXBwZXI5MjYwX25hbmRfcGFydGl0aW9ucyk7CisJcmV0dXJuIHNuYXBwZXI5MjYwX25hbmRfcGFydGl0aW9uczsKK30KKworc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgX19pbml0ZGF0YSBzbmFwcGVyOTI2MF9uYW5kX2RhdGEgPSB7CisJLmFsZQkJPSAyMSwKKwkuY2xlCQk9IDIyLAorCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEMxMywKKwkucGFydGl0aW9uX2luZm8JPSBzbmFwcGVyOTI2MF9uYW5kX3BhcnRpdGlvbl9pbmZvLAorCS5idXNfd2lkdGhfMTYJPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBzbmFwcGVyOTI2MF9uYW5kX3NtY19jb25maWcgPSB7CisJLm5jc19yZWFkX3NldHVwCQk9IDAsCisJLm5yZF9zZXR1cAkJPSAwLAorCS5uY3Nfd3JpdGVfc2V0dXAJPSAwLAorCS5ud2Vfc2V0dXAJCT0gMCwKKworCS5uY3NfcmVhZF9wdWxzZQkJPSA1LAorCS5ucmRfcHVsc2UJCT0gMiwKKwkubmNzX3dyaXRlX3B1bHNlCT0gNSwKKwkubndlX3B1bHNlCQk9IDIsCisKKwkucmVhZF9jeWNsZQkJPSA3LAorCS53cml0ZV9jeWNsZQkJPSA3LAorCisJLm1vZGUJCQk9IChBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERSB8CisJCQkJICAgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSksCisJLnRkZl9jeWNsZXMJCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNhOTUzeF9wbGF0Zm9ybV9kYXRhIHNuYXBwZXI5MjYwX2lvX2V4cGFuZGVyX2RhdGEgPSB7CisJLmdwaW9fYmFzZQkJPSBTTkFQUEVSOTI2MF9JT19FWFBfR1BJTygwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBzbmFwcGVyOTI2MF9pMmNfZGV2aWNlc1tdID0geworCXsKKwkJLyogSU8gZXhwYW5kZXIgKi8KKwkJSTJDX0JPQVJEX0lORk8oIm1heDczMTIiLCAweDI4KSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc25hcHBlcjkyNjBfaW9fZXhwYW5kZXJfZGF0YSwKKwl9LAorCXsKKwkJLyogQXVkaW8gY29kZWMgKi8KKwkJSTJDX0JPQVJEX0lORk8oInRsdjMyMGFpYzIzIiwgMHgxYSksCisJfSwKKwl7CisJCS8qIFJUQyAqLworCQlJMkNfQk9BUkRfSU5GTygiaXNsMTIwOCIsIDB4NmYpLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgc25hcHBlcjkyNjBfYWRkX2RldmljZV9uYW5kKHZvaWQpCit7CisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxNCwgMCk7CisJc2FtOV9zbWNfY29uZmlndXJlKDMsICZzbmFwcGVyOTI2MF9uYW5kX3NtY19jb25maWcpOworCWF0OTFfYWRkX2RldmljZV9uYW5kKCZzbmFwcGVyOTI2MF9uYW5kX2RhdGEpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgc25hcHBlcjkyNjBfYm9hcmRfaW5pdCh2b2lkKQoreworCWF0OTFfYWRkX2RldmljZV9pMmMoc25hcHBlcjkyNjBfaTJjX2RldmljZXMsCisJCQkgICAgQVJSQVlfU0laRShzbmFwcGVyOTI2MF9pMmNfZGV2aWNlcykpOworCWF0OTFfYWRkX2RldmljZV9zZXJpYWwoKTsKKwlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmc25hcHBlcjkyNjBfdXNiaF9kYXRhKTsKKwlhdDkxX2FkZF9kZXZpY2VfdWRjKCZzbmFwcGVyOTI2MF91ZGNfZGF0YSk7CisJYXQ5MV9hZGRfZGV2aWNlX2V0aCgmc25hcHBlcjkyNjBfbWFjYl9kYXRhKTsKKwlhdDkxX2FkZF9kZXZpY2Vfc3NjKEFUOTFTQU05MjYwX0lEX1NTQywgKEFUTUVMX1NTQ19URiB8IEFUTUVMX1NTQ19USyB8CisJCQkJCQkgQVRNRUxfU1NDX1REIHwgQVRNRUxfU1NDX1JEKSk7CisJc25hcHBlcjkyNjBfYWRkX2RldmljZV9uYW5kKCk7Cit9CisKK01BQ0hJTkVfU1RBUlQoU05BUFBFUl85MjYwLCAiQmx1ZXdhdGVyIFN5c3RlbXMgU25hcHBlciA5MjYwLzlHMjAgbW9kdWxlIikKKwkucGh5c19pbwk9IEFUOTFfQkFTRV9TWVMsCisJLmlvX3BnX29mZnN0CT0gKEFUOTFfVkFfQkFTRV9TWVMgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IEFUOTFfU0RSQU1fQkFTRSArIDB4MTAwLAorCS50aW1lcgkJPSAmYXQ5MXNhbTkyNnhfdGltZXIsCisJLm1hcF9pbwkJPSBzbmFwcGVyOTI2MF9tYXBfaW8sCisJLmluaXRfaXJxCT0gc25hcHBlcjkyNjBfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IHNuYXBwZXI5MjYwX2JvYXJkX2luaXQsCitNQUNISU5FX0VORAorCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MWNhcDkuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MWNhcDkuaAppbmRleCBkOGMxZWRlLi45YzZhZjk3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFjYXA5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxY2FwOS5oCkBAIC04NCw3ICs4NCw3IEBACiAgKi8KICNkZWZpbmUgQVQ5MV9FQ0MJKDB4ZmZmZmUyMDAgLSBBVDkxX0JBU0VfU1lTKQogI2RlZmluZSBBVDkxX0JDUkFNQwkoMHhmZmZmZTQwMCAtIEFUOTFfQkFTRV9TWVMpCi0jZGVmaW5lIEFUOTFfRERSU0RSQwkoMHhmZmZmZTYwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfRERSU0RSQzAJKDB4ZmZmZmU2MDAgLSBBVDkxX0JBU0VfU1lTKQogI2RlZmluZSBBVDkxX1NNQwkoMHhmZmZmZTgwMCAtIEFUOTFfQkFTRV9TWVMpCiAjZGVmaW5lIEFUOTFfTUFUUklYCSgweGZmZmZlYTAwIC0gQVQ5MV9CQVNFX1NZUykKICNkZWZpbmUgQVQ5MV9DQ0ZHCSgweGZmZmZlYjEwIC0gQVQ5MV9CQVNFX1NZUykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MWNhcDlfZGRyc2RyLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFjYXA5X2RkcnNkci5oCmluZGV4IDE0OTliMWMuLjk3NmY0YTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MWNhcDlfZGRyc2RyLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxY2FwOV9kZHJzZHIuaApAQCAtMTUsNyArMTUsNyBAQAogI2lmbmRlZiBBVDkxQ0FQOV9ERFJTRFJfSAogI2RlZmluZSBBVDkxQ0FQOV9ERFJTRFJfSAogCi0jZGVmaW5lIEFUOTFfRERSU0RSQ19NUgkJKEFUOTFfRERSU0RSQyArIDB4MDApCS8qIE1vZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9ERFJTRFJDX01SCQkweDAwCS8qIE1vZGUgUmVnaXN0ZXIgKi8KICNkZWZpbmUJCUFUOTFfRERSU0RSQ19NT0RFCSgweGYgPDwgMCkJCS8qIENvbW1hbmQgTW9kZSAqLwogI2RlZmluZQkJCUFUOTFfRERSU0RSQ19NT0RFX05PUk1BTAkJMAogI2RlZmluZQkJCUFUOTFfRERSU0RSQ19NT0RFX05PUAkJMQpAQCAtMjUsMTAgKzI1LDEwIEBACiAjZGVmaW5lCQkJQVQ5MV9ERFJTRFJDX01PREVfRVhUX0xNUgk1CiAjZGVmaW5lCQkJQVQ5MV9ERFJTRFJDX01PREVfREVFUAkJNgogCi0jZGVmaW5lIEFUOTFfRERSU0RSQ19SVFIJKEFUOTFfRERSU0RSQyArIDB4MDQpCS8qIFJlZnJlc2ggVGltZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9ERFJTRFJDX1JUUgkweDA0CS8qIFJlZnJlc2ggVGltZXIgUmVnaXN0ZXIgKi8KICNkZWZpbmUJCUFUOTFfRERSU0RSQ19DT1VOVAkoMHhmZmYgPDwgMCkJCS8qIFJlZnJlc2ggVGltZXIgQ291bnRlciAqLwogCi0jZGVmaW5lIEFUOTFfRERSU0RSQ19DUgkJKEFUOTFfRERSU0RSQyArIDB4MDgpCS8qIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9ERFJTRFJDX0NSCQkweDA4CS8qIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KICNkZWZpbmUJCUFUOTFfRERSU0RSQ19OQwkJKDMgPDwgMCkJCS8qIE51bWJlciBvZiBDb2x1bW4gQml0cyAqLwogI2RlZmluZQkJCUFUOTFfRERSU0RSQ19OQ19TRFI4CSgwIDw8IDApCiAjZGVmaW5lCQkJQVQ5MV9ERFJTRFJDX05DX1NEUjkJKDEgPDwgMCkKQEAgLTQ5LDcgKzQ5LDcgQEAKICNkZWZpbmUJCUFUOTFfRERSU0RSQ19ETEwJKDEgPDwgNykJCS8qIFJlc2V0IERMTCAqLwogI2RlZmluZQkJQVQ5MV9ERFJTRFJDX0RJQ0RTCSgxIDw8IDgpCQkvKiBPdXRwdXQgaW1wZWRhbmNlIGNvbnRyb2wgKi8KIAotI2RlZmluZSBBVDkxX0REUlNEUkNfVDBQUgkoQVQ5MV9ERFJTRFJDICsgMHgwQykJLyogVGltaW5nIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9ERFJTRFJDX1QwUFIJMHgwQwkvKiBUaW1pbmcgMCBSZWdpc3RlciAqLwogI2RlZmluZQkJQVQ5MV9ERFJTRFJDX1RSQVMJKDB4ZiA8PCAgMCkJCS8qIEFjdGl2ZSB0byBQcmVjaGFyZ2UgZGVsYXkgKi8KICNkZWZpbmUJCUFUOTFfRERSU0RSQ19UUkNECSgweGYgPDwgIDQpCQkvKiBSb3cgdG8gQ29sdW1uIGRlbGF5ICovCiAjZGVmaW5lCQlBVDkxX0REUlNEUkNfVFdSCSgweGYgPDwgIDgpCQkvKiBXcml0ZSByZWNvdmVyeSBkZWxheSAqLwpAQCAtNTksMTMgKzU5LDEzIEBACiAjZGVmaW5lCQlBVDkxX0REUlNEUkNfVFdUUgkoMSAgIDw8IDI0KQkJLyogSW50ZXJuYWwgV3JpdGUgdG8gUmVhZCBkZWxheSAqLwogI2RlZmluZQkJQVQ5MV9ERFJTRFJDX1RNUkQJKDB4ZiA8PCAyOCkJCS8qIExvYWQgbW9kZSB0byBhY3RpdmUvcmVmcmVzaCBkZWxheSAqLwogCi0jZGVmaW5lIEFUOTFfRERSU0RSQ19UMVBSCShBVDkxX0REUlNEUkMgKyAweDEwKQkvKiBUaW1pbmcgMSBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX0REUlNEUkNfVDFQUgkweDEwCS8qIFRpbWluZyAxIFJlZ2lzdGVyICovCiAjZGVmaW5lCQlBVDkxX0REUlNEUkNfVFJGQwkoMHgxZiA8PCAwKQkJLyogUm93IEN5Y2xlIERlbGF5ICovCiAjZGVmaW5lCQlBVDkxX0REUlNEUkNfVFhTTlIJKDB4ZmYgPDwgOCkJCS8qIEV4aXQgc2VsZi1yZWZyZXNoIHRvIG5vbi1yZWFkICovCiAjZGVmaW5lCQlBVDkxX0REUlNEUkNfVFhTUkQJKDB4ZmYgPDwgMTYpCQkvKiBFeGl0IHNlbGYtcmVmcmVzaCB0byByZWFkICovCiAjZGVmaW5lCQlBVDkxX0REUlNEUkNfVFhQCSgweGYgIDw8IDI0KQkJLyogRXhpdCBwb3dlci1kb3duIGRlbGF5ICovCiAKLSNkZWZpbmUgQVQ5MV9ERFJTRFJDX0xQUgkoQVQ5MV9ERFJTRFJDICsgMHgxOCkJLyogTG93IFBvd2VyIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfRERSU0RSQ19MUFIJMHgxOAkvKiBMb3cgUG93ZXIgUmVnaXN0ZXIgKi8KICNkZWZpbmUJCUFUOTFfRERSU0RSQ19MUENCCQkoMyA8PCAwKQkvKiBMb3ctcG93ZXIgQ29uZmlndXJhdGlvbnMgKi8KICNkZWZpbmUJCQlBVDkxX0REUlNEUkNfTFBDQl9ESVNBQkxFCQkwCiAjZGVmaW5lCQkJQVQ5MV9ERFJTRFJDX0xQQ0JfU0VMRl9SRUZSRVNICQkxCkBAIC04MCwxNCArODAsMTQgQEAKICNkZWZpbmUJCQlBVDkxX0REUlNEUkNfVElNRU9VVF82NF9DTEtfQ1lDTEVTCSgxIDw8IDEyKQogI2RlZmluZQkJCUFUOTFfRERSU0RSQ19USU1FT1VUXzEyOF9DTEtfQ1lDTEVTCSgyIDw8IDEyKQogCi0jZGVmaW5lIEFUOTFfRERSU0RSQ19NRFIJKEFUOTFfRERSU0RSQyArIDB4MUMpCS8qIE1lbW9yeSBEZXZpY2UgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9ERFJTRFJDX01EUgkweDFDCS8qIE1lbW9yeSBEZXZpY2UgUmVnaXN0ZXIgKi8KICNkZWZpbmUJCUFUOTFfRERSU0RSQ19NRAkJKDMgPDwgMCkJCS8qIE1lbW9yeSBEZXZpY2UgVHlwZSAqLwogI2RlZmluZQkJCUFUOTFfRERSU0RSQ19NRF9TRFIJCTAKICNkZWZpbmUJCQlBVDkxX0REUlNEUkNfTURfTE9XX1BPV0VSX1NEUgkxCiAjZGVmaW5lCQkJQVQ5MV9ERFJTRFJDX01EX0REUgkJMgogI2RlZmluZQkJCUFUOTFfRERSU0RSQ19NRF9MT1dfUE9XRVJfRERSCTMKIAotI2RlZmluZSBBVDkxX0REUlNEUkNfRExMUgkoQVQ5MV9ERFJTRFJDICsgMHgyMCkJLyogRExMIEluZm9ybWF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfRERSU0RSQ19ETExSCTB4MjAJLyogRExMIEluZm9ybWF0aW9uIFJlZ2lzdGVyICovCiAjZGVmaW5lCQlBVDkxX0REUlNEUkNfTURJTkMJKDEgPDwgMCkJCS8qIE1hc3RlciBEZWxheSBpbmNyZW1lbnQgKi8KICNkZWZpbmUJCUFUOTFfRERSU0RSQ19NRERFQwkoMSA8PCAxKQkJLyogTWFzdGVyIERlbGF5IGRlY3JlbWVudCAqLwogI2RlZmluZQkJQVQ5MV9ERFJTRFJDX01ET1ZGCSgxIDw8IDIpCQkvKiBNYXN0ZXIgRGVsYXkgT3ZlcmZsb3cgKi8KQEAgLTk4LDUgKzk4LDExIEBACiAjZGVmaW5lCQlBVDkxX0REUlNEUkNfU0RWQUwJKDB4ZmYgPDwgMTYpCQkvKiBTbGF2ZSBEZWxheSB2YWx1ZSAqLwogI2RlZmluZQkJQVQ5MV9ERFJTRFJDX1NEQ1ZBTAkoMHhmZiA8PCAyNCkJCS8qIFNsYXZlIERlbGF5IENvcnJlY3Rpb24gdmFsdWUgKi8KIAorLyogUmVnaXN0ZXIgYWNjZXNzIG1hY3JvcyAqLworI2RlZmluZSBhdDkxX3JhbWNfcmVhZChudW0sIHJlZykgXAorCWF0OTFfc3lzX3JlYWQoQVQ5MV9ERFJTRFJDIyNudW0gKyByZWcpCisjZGVmaW5lIGF0OTFfcmFtY193cml0ZShudW0sIHJlZywgdmFsdWUpIFwKKwlhdDkxX3N5c193cml0ZShBVDkxX0REUlNEUkMjI251bSArIHJlZywgdmFsdWUpCisKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFzYW05MjYwLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFzYW05MjYwLmgKaW5kZXggNDNjMzk2Yi4uNGU3OTAzNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxc2FtOTI2MC5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MXNhbTkyNjAuaApAQCAtODQsNyArODQsNyBAQAogICogU3lzdGVtIFBlcmlwaGVyYWxzIChvZmZzZXQgZnJvbSBBVDkxX0JBU0VfU1lTKQogICovCiAjZGVmaW5lIEFUOTFfRUNDCSgweGZmZmZlODAwIC0gQVQ5MV9CQVNFX1NZUykKLSNkZWZpbmUgQVQ5MV9TRFJBTUMJKDB4ZmZmZmVhMDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1NEUkFNQzAJKDB4ZmZmZmVhMDAgLSBBVDkxX0JBU0VfU1lTKQogI2RlZmluZSBBVDkxX1NNQwkoMHhmZmZmZWMwMCAtIEFUOTFfQkFTRV9TWVMpCiAjZGVmaW5lIEFUOTFfTUFUUklYCSgweGZmZmZlZTAwIC0gQVQ5MV9CQVNFX1NZUykKICNkZWZpbmUgQVQ5MV9DQ0ZHCSgweGZmZmZlZjEwIC0gQVQ5MV9CQVNFX1NZUykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MXNhbTkyNjEuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MXNhbTkyNjEuaAppbmRleCA4N2RlOGJlLi4yYjU2MTg1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFzYW05MjYxLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxc2FtOTI2MS5oCkBAIC02OCw3ICs2OCw3IEBACiAvKgogICogU3lzdGVtIFBlcmlwaGVyYWxzIChvZmZzZXQgZnJvbSBBVDkxX0JBU0VfU1lTKQogICovCi0jZGVmaW5lIEFUOTFfU0RSQU1DCSgweGZmZmZlYTAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9TRFJBTUMwCSgweGZmZmZlYTAwIC0gQVQ5MV9CQVNFX1NZUykKICNkZWZpbmUgQVQ5MV9TTUMJKDB4ZmZmZmVjMDAgLSBBVDkxX0JBU0VfU1lTKQogI2RlZmluZSBBVDkxX01BVFJJWAkoMHhmZmZmZWUwMCAtIEFUOTFfQkFTRV9TWVMpCiAjZGVmaW5lIEFUOTFfQUlDCSgweGZmZmZmMDAwIC0gQVQ5MV9CQVNFX1NZUykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MXNhbTlfZGRyc2RyLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFzYW05X2RkcnNkci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyN2IxNWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFzYW05X2RkcnNkci5oCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogSGVhZGVyIGZpbGUgZm9yIHRoZSBBdG1lbCBERFIvU0RSIFNEUkFNIENvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXRtZWwgQ29ycG9yYXRpb24KKyAqCU5pY29sYXMgRmVycmUgPG5pY29sYXMuZmVycmVAYXRtZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgQVQ5MVNBTTlfRERSU0RSX0gKKyNkZWZpbmUgQVQ5MVNBTTlfRERSU0RSX0gKKworI2RlZmluZSBBVDkxX0REUlNEUkNfTVIJCTB4MDAJLyogTW9kZSBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9ERFJTRFJDX01PREUJKDB4NyA8PCAwKQkJLyogQ29tbWFuZCBNb2RlICovCisjZGVmaW5lCQkJQVQ5MV9ERFJTRFJDX01PREVfTk9STUFMCTAKKyNkZWZpbmUJCQlBVDkxX0REUlNEUkNfTU9ERV9OT1AJCTEKKyNkZWZpbmUJCQlBVDkxX0REUlNEUkNfTU9ERV9QUkVDSEFSR0UJMgorI2RlZmluZQkJCUFUOTFfRERSU0RSQ19NT0RFX0xNUgkJMworI2RlZmluZQkJCUFUOTFfRERSU0RSQ19NT0RFX1JFRlJFU0gJNAorI2RlZmluZQkJCUFUOTFfRERSU0RSQ19NT0RFX0VYVF9MTVIJNQorI2RlZmluZQkJCUFUOTFfRERSU0RSQ19NT0RFX0RFRVAJCTYKKworI2RlZmluZSBBVDkxX0REUlNEUkNfUlRSCTB4MDQJLyogUmVmcmVzaCBUaW1lciBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9ERFJTRFJDX0NPVU5UCSgweGZmZiA8PCAwKQkJLyogUmVmcmVzaCBUaW1lciBDb3VudGVyICovCisKKyNkZWZpbmUgQVQ5MV9ERFJTRFJDX0NSCQkweDA4CS8qIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19OQwkJKDMgPDwgMCkJCS8qIE51bWJlciBvZiBDb2x1bW4gQml0cyAqLworI2RlZmluZQkJCUFUOTFfRERSU0RSQ19OQ19TRFI4CSgwIDw8IDApCisjZGVmaW5lCQkJQVQ5MV9ERFJTRFJDX05DX1NEUjkJKDEgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX0REUlNEUkNfTkNfU0RSMTAJKDIgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX0REUlNEUkNfTkNfU0RSMTEJKDMgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX0REUlNEUkNfTkNfRERSOQkoMCA8PCAwKQorI2RlZmluZQkJCUFUOTFfRERSU0RSQ19OQ19ERFIxMAkoMSA8PCAwKQorI2RlZmluZQkJCUFUOTFfRERSU0RSQ19OQ19ERFIxMQkoMiA8PCAwKQorI2RlZmluZQkJCUFUOTFfRERSU0RSQ19OQ19ERFIxMgkoMyA8PCAwKQorI2RlZmluZQkJQVQ5MV9ERFJTRFJDX05SCQkoMyA8PCAyKQkJLyogTnVtYmVyIG9mIFJvdyBCaXRzICovCisjZGVmaW5lCQkJQVQ5MV9ERFJTRFJDX05SXzExCSgwIDw8IDIpCisjZGVmaW5lCQkJQVQ5MV9ERFJTRFJDX05SXzEyCSgxIDw8IDIpCisjZGVmaW5lCQkJQVQ5MV9ERFJTRFJDX05SXzEzCSgyIDw8IDIpCisjZGVmaW5lCQkJQVQ5MV9ERFJTRFJDX05SXzE0CSgzIDw8IDIpCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfQ0FTCSg3IDw8IDQpCQkvKiBDQVMgTGF0ZW5jeSAqLworI2RlZmluZQkJCUFUOTFfRERSU0RSQ19DQVNfMgkoMiA8PCA0KQorI2RlZmluZQkJCUFUOTFfRERSU0RSQ19DQVNfMwkoMyA8PCA0KQorI2RlZmluZQkJCUFUOTFfRERSU0RSQ19DQVNfMjUJKDYgPDwgNCkKKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19SU1RfRExMCSgxIDw8IDcpCQkvKiBSZXNldCBETEwgKi8KKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19ESUNEUwkoMSA8PCA4KQkJLyogT3V0cHV0IGltcGVkYW5jZSBjb250cm9sICovCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfRElTX0RMTAkoMSA8PCA5KQkJLyogRGlzYWJsZSBETEwgKi8KKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19PQ0QJKDEgPDwgMTIpCQkvKiBPZmYtQ2hpcCBEcml2ZXIgKi8KKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19EUU1TCSgxIDw8IDE2KQkJLyogTWFzayBEYXRhIGlzIFNoYXJlZCAqLworI2RlZmluZQkJQVQ5MV9ERFJTRFJDX0FDVEJTVAkoMSA8PCAxOCkJCS8qIEFjdGl2ZSBCYW5rIFggdG8gQnVyc3QgU3RvcCBSZWFkIEFjY2VzcyBCYW5rIFkgKi8KKworI2RlZmluZSBBVDkxX0REUlNEUkNfVDBQUgkweDBDCS8qIFRpbWluZyAwIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfVFJBUwkoMHhmIDw8ICAwKQkJLyogQWN0aXZlIHRvIFByZWNoYXJnZSBkZWxheSAqLworI2RlZmluZQkJQVQ5MV9ERFJTRFJDX1RSQ0QJKDB4ZiA8PCAgNCkJCS8qIFJvdyB0byBDb2x1bW4gZGVsYXkgKi8KKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19UV1IJKDB4ZiA8PCAgOCkJCS8qIFdyaXRlIHJlY292ZXJ5IGRlbGF5ICovCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfVFJDCSgweGYgPDwgMTIpCQkvKiBSb3cgY3ljbGUgZGVsYXkgKi8KKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19UUlAJKDB4ZiA8PCAxNikJCS8qIFJvdyBwcmVjaGFyZ2UgZGVsYXkgKi8KKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19UUlJECSgweGYgPDwgMjApCQkvKiBBY3RpdmUgQmFua0EgdG8gQmFua0IgKi8KKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19UV1RSCSgweDcgPDwgMjQpCQkvKiBJbnRlcm5hbCBXcml0ZSB0byBSZWFkIGRlbGF5ICovCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfUkVEX1dSUkQJKDB4MSA8PCAyNykJCS8qIFJlZHVjZSBXcml0ZSB0byBSZWFkIERlbGF5ICovCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfVE1SRAkoMHhmIDw8IDI4KQkJLyogTG9hZCBtb2RlIHRvIGFjdGl2ZS9yZWZyZXNoIGRlbGF5ICovCisKKyNkZWZpbmUgQVQ5MV9ERFJTRFJDX1QxUFIJMHgxMAkvKiBUaW1pbmcgMSBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9ERFJTRFJDX1RSRkMJKDB4MWYgPDwgMCkJCS8qIFJvdyBDeWNsZSBEZWxheSAqLworI2RlZmluZQkJQVQ5MV9ERFJTRFJDX1RYU05SCSgweGZmIDw8IDgpCQkvKiBFeGl0IHNlbGYtcmVmcmVzaCB0byBub24tcmVhZCAqLworI2RlZmluZQkJQVQ5MV9ERFJTRFJDX1RYU1JECSgweGZmIDw8IDE2KQkJLyogRXhpdCBzZWxmLXJlZnJlc2ggdG8gcmVhZCAqLworI2RlZmluZQkJQVQ5MV9ERFJTRFJDX1RYUAkoMHhmICA8PCAyNCkJCS8qIEV4aXQgcG93ZXItZG93biBkZWxheSAqLworCisjZGVmaW5lIEFUOTFfRERSU0RSQ19UMlBSCTB4MTQJLyogVGltaW5nIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19UWEFSRAkoMHhmICA8PCAwKQkJLyogRXhpdCBhY3RpdmUgcG93ZXIgZG93biBkZWxheSB0byByZWFkIGNvbW1hbmQgaW4gbW9kZSAiRmFzdCBFeGl0IiAqLworI2RlZmluZQkJQVQ5MV9ERFJTRFJDX1RYQVJEUwkoMHhmICA8PCA0KQkJLyogRXhpdCBhY3RpdmUgcG93ZXIgZG93biBkZWxheSB0byByZWFkIGNvbW1hbmQgaW4gbW9kZSAiU2xvdyBFeGl0IiAqLworI2RlZmluZQkJQVQ5MV9ERFJTRFJDX1RSUEEJKDB4ZiAgPDwgOCkJCS8qIFJvdyBQcmVjaGFyZ2UgQWxsIGRlbGF5ICovCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfVFJUUAkoMHg3ICA8PCAxMikJCS8qIFJlYWQgdG8gUHJlY2hhcmdlIGRlbGF5ICovCisKKyNkZWZpbmUgQVQ5MV9ERFJTRFJDX0xQUgkweDFDCS8qIExvdyBQb3dlciBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9ERFJTRFJDX0xQQ0IJKDMgPDwgMCkJCS8qIExvdy1wb3dlciBDb25maWd1cmF0aW9ucyAqLworI2RlZmluZQkJCUFUOTFfRERSU0RSQ19MUENCX0RJU0FCTEUJCTAKKyNkZWZpbmUJCQlBVDkxX0REUlNEUkNfTFBDQl9TRUxGX1JFRlJFU0gJCTEKKyNkZWZpbmUJCQlBVDkxX0REUlNEUkNfTFBDQl9QT1dFUl9ET1dOCQkyCisjZGVmaW5lCQkJQVQ5MV9ERFJTRFJDX0xQQ0JfREVFUF9QT1dFUl9ET1dOCTMKKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19DTEtGUgkoMSA8PCAyKQkvKiBDbG9jayBGcm96ZW4gKi8KKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19QQVNSCSg3IDw8IDQpCS8qIFBhcnRpYWwgQXJyYXkgU2VsZiBSZWZyZXNoICovCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfVENTUgkoMyA8PCA4KQkvKiBUZW1wZXJhdHVyZSBDb21wZW5zYXRlZCBTZWxmIFJlZnJlc2ggKi8KKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19EUwkJKDMgPDwgMTApCS8qIERyaXZlIFN0cmVuZ3RoICovCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfVElNRU9VVAkoMyA8PCAxMikJLyogVGltZSB0byBkZWZpbmUgd2hlbiBMb3cgUG93ZXIgTW9kZSBpcyBlbmFibGVkICovCisjZGVmaW5lCQkJQVQ5MV9ERFJTRFJDX1RJTUVPVVRfMF9DTEtfQ1lDTEVTCSgwIDw8IDEyKQorI2RlZmluZQkJCUFUOTFfRERSU0RSQ19USU1FT1VUXzY0X0NMS19DWUNMRVMJKDEgPDwgMTIpCisjZGVmaW5lCQkJQVQ5MV9ERFJTRFJDX1RJTUVPVVRfMTI4X0NMS19DWUNMRVMJKDIgPDwgMTIpCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfQVBERQkoMSA8PCAxNikJIC8qIEFjdGl2ZSBwb3dlciBkb3duIGV4aXQgdGltZSAqLworI2RlZmluZQkJQVQ5MV9ERFJTRFJDX1VQRF9NUgkoMyA8PCAyMCkJIC8qIFVwZGF0ZSBsb2FkIG1vZGUgcmVnaXN0ZXIgYW5kIGV4dGVuZGVkIG1vZGUgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBBVDkxX0REUlNEUkNfTURSCTB4MjAJLyogTWVtb3J5IERldmljZSBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9ERFJTRFJDX01ECQkoMyA8PCAwKQkJLyogTWVtb3J5IERldmljZSBUeXBlICovCisjZGVmaW5lCQkJQVQ5MV9ERFJTRFJDX01EX1NEUgkJMAorI2RlZmluZQkJCUFUOTFfRERSU0RSQ19NRF9MT1dfUE9XRVJfU0RSCTEKKyNkZWZpbmUJCQlBVDkxX0REUlNEUkNfTURfTE9XX1BPV0VSX0REUgkzCisjZGVmaW5lCQkJQVQ5MV9ERFJTRFJDX01EX0REUjIJCTYKKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19EQlcJKDEgPDwgNCkJCS8qIERhdGEgQnVzIFdpZHRoICovCisjZGVmaW5lCQkJQVQ5MV9ERFJTRFJDX0RCV18zMkJJVFMJCSgwIDw8ICA0KQorI2RlZmluZQkJCUFUOTFfRERSU0RSQ19EQldfMTZCSVRTCQkoMSA8PCAgNCkKKworI2RlZmluZSBBVDkxX0REUlNEUkNfRExMCTB4MjQJLyogRExMIEluZm9ybWF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfTURJTkMJKDEgPDwgMCkJCS8qIE1hc3RlciBEZWxheSBpbmNyZW1lbnQgKi8KKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19NRERFQwkoMSA8PCAxKQkJLyogTWFzdGVyIERlbGF5IGRlY3JlbWVudCAqLworI2RlZmluZQkJQVQ5MV9ERFJTRFJDX01ET1ZGCSgxIDw8IDIpCQkvKiBNYXN0ZXIgRGVsYXkgT3ZlcmZsb3cgKi8KKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19NRFZBTAkoMHhmZiA8PCAgOCkJCS8qIE1hc3RlciBEZWxheSB2YWx1ZSAqLworCisjZGVmaW5lIEFUOTFfRERSU0RSQ19IUwkJMHgyQwkvKiBIaWdoIFNwZWVkIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfRElTX0FUQ1BfUkQJKDEgPDwgMikJLyogQW50aWNpcCByZWFkIGFjY2VzcyBpcyBkaXNhYmxlZCAqLworCisjZGVmaW5lIEFUOTFfRERSU0RSQ19ERUxBWShuKQkoMHgzMCArICgweDQgKiAobikpKQkvKiBEZWxheSBJL08gUmVnaXN0ZXIgbiAqLworCisjZGVmaW5lIEFUOTFfRERSU0RSQ19XUE1SCTB4RTQJLyogV3JpdGUgUHJvdGVjdCBNb2RlIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfV1AJCSgxIDw8IDApCQkvKiBXcml0ZSBwcm90ZWN0IGVuYWJsZSAqLworI2RlZmluZQkJQVQ5MV9ERFJTRFJDX1dQS0VZCSgweGZmZmZmZiA8PCA4KQkJLyogV3JpdGUgcHJvdGVjdCBrZXkgKi8KKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19LRVkJKDB4NDQ0NDUyIDw8IDgpCQkvKiBXcml0ZSBwcm90ZWN0IGtleSA9ICJERFIiICovCisKKyNkZWZpbmUgQVQ5MV9ERFJTRFJDX1dQU1IJMHhFOAkvKiBXcml0ZSBQcm90ZWN0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9ERFJTRFJDX1dQVlMJKDEgPDwgMCkJCS8qIFdyaXRlIHByb3RlY3QgdmlvbGF0aW9uIHN0YXR1cyAqLworI2RlZmluZQkJQVQ5MV9ERFJTRFJDX1dQVlNSQwkoMHhmZmZmIDw8IDgpCQkvKiBXcml0ZSBwcm90ZWN0IHZpb2xhdGlvbiBzb3VyY2UgKi8KKworLyogUmVnaXN0ZXIgYWNjZXNzIG1hY3JvcyAqLworI2RlZmluZSBhdDkxX3JhbWNfcmVhZChudW0sIHJlZykgXAorCWF0OTFfc3lzX3JlYWQoQVQ5MV9ERFJTRFJDIyNudW0gKyByZWcpCisjZGVmaW5lIGF0OTFfcmFtY193cml0ZShudW0sIHJlZywgdmFsdWUpIFwKKwlhdDkxX3N5c193cml0ZShBVDkxX0REUlNEUkMjI251bSArIHJlZywgdmFsdWUpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxc2FtOV9zZHJhbWMuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MXNhbTlfc2RyYW1jLmgKaW5kZXggYjcyNjAzOC4uMTAwZjVhNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxc2FtOV9zZHJhbWMuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFzYW05X3NkcmFtYy5oCkBAIC0xNyw3ICsxNyw3IEBACiAjZGVmaW5lIEFUOTFTQU05X1NEUkFNQ19ICiAKIC8qIFNEUkFNIENvbnRyb2xsZXIgKFNEUkFNQykgcmVnaXN0ZXJzICovCi0jZGVmaW5lIEFUOTFfU0RSQU1DX01SCQkoQVQ5MV9TRFJBTUMgKyAweDAwKQkvKiBTRFJBTSBDb250cm9sbGVyIE1vZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9TRFJBTUNfTVIJCTB4MDAJLyogU0RSQU0gQ29udHJvbGxlciBNb2RlIFJlZ2lzdGVyICovCiAjZGVmaW5lCQlBVDkxX1NEUkFNQ19NT0RFCSgweGYgPDwgMCkJCS8qIENvbW1hbmQgTW9kZSAqLwogI2RlZmluZQkJCUFUOTFfU0RSQU1DX01PREVfTk9STUFMCQkwCiAjZGVmaW5lCQkJQVQ5MV9TRFJBTUNfTU9ERV9OT1AJCTEKQEAgLTI3LDEwICsyNywxMCBAQAogI2RlZmluZQkJCUFUOTFfU0RSQU1DX01PREVfRVhUX0xNUgk1CiAjZGVmaW5lCQkJQVQ5MV9TRFJBTUNfTU9ERV9ERUVQCQk2CiAKLSNkZWZpbmUgQVQ5MV9TRFJBTUNfVFIJCShBVDkxX1NEUkFNQyArIDB4MDQpCS8qIFNEUkFNIENvbnRyb2xsZXIgUmVmcmVzaCBUaW1lciBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX1NEUkFNQ19UUgkJMHgwNAkvKiBTRFJBTSBDb250cm9sbGVyIFJlZnJlc2ggVGltZXIgUmVnaXN0ZXIgKi8KICNkZWZpbmUJCUFUOTFfU0RSQU1DX0NPVU5UCSgweGZmZiA8PCAwKQkJLyogUmVmcmVzaCBUaW1lciBDb3VudGVyICovCiAKLSNkZWZpbmUgQVQ5MV9TRFJBTUNfQ1IJCShBVDkxX1NEUkFNQyArIDB4MDgpCS8qIFNEUkFNIENvbnRyb2xsZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX1NEUkFNQ19DUgkJMHgwOAkvKiBTRFJBTSBDb250cm9sbGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KICNkZWZpbmUJCUFUOTFfU0RSQU1DX05DCQkoMyA8PCAwKQkJLyogTnVtYmVyIG9mIENvbHVtbiBCaXRzICovCiAjZGVmaW5lCQkJQVQ5MV9TRFJBTUNfTkNfOAkoMCA8PCAwKQogI2RlZmluZQkJCUFUOTFfU0RSQU1DX05DXzkJKDEgPDwgMCkKQEAgLTU3LDcgKzU3LDcgQEAKICNkZWZpbmUJCUFUOTFfU0RSQU1DX1RSQVMJKDB4ZiA8PCAyNCkJCS8qIEFjdGl2ZSB0byBQcmVjaGFyZ2UgRGVsYXkgKi8KICNkZWZpbmUJCUFUOTFfU0RSQU1DX1RYU1IJKDB4ZiA8PCAyOCkJCS8qIEV4aXQgU2VsZiBSZWZyZXNoIHRvIEFjdGl2ZSBEZWxheSAqLwogCi0jZGVmaW5lIEFUOTFfU0RSQU1DX0xQUgkJKEFUOTFfU0RSQU1DICsgMHgxMCkJLyogU0RSQU0gQ29udHJvbGxlciBMb3cgUG93ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9TRFJBTUNfTFBSCQkweDEwCS8qIFNEUkFNIENvbnRyb2xsZXIgTG93IFBvd2VyIFJlZ2lzdGVyICovCiAjZGVmaW5lCQlBVDkxX1NEUkFNQ19MUENCCQkoMyA8PCAwKQkvKiBMb3ctcG93ZXIgQ29uZmlndXJhdGlvbnMgKi8KICNkZWZpbmUJCQlBVDkxX1NEUkFNQ19MUENCX0RJU0FCTEUJCTAKICNkZWZpbmUJCQlBVDkxX1NEUkFNQ19MUENCX1NFTEZfUkVGUkVTSAkJMQpAQCAtNzEsMTYgKzcxLDIxIEBACiAjZGVmaW5lCQkJQVQ5MV9TRFJBTUNfVElNRU9VVF82NF9DTEtfQ1lDTEVTCSgxIDw8IDEyKQogI2RlZmluZQkJCUFUOTFfU0RSQU1DX1RJTUVPVVRfMTI4X0NMS19DWUNMRVMJKDIgPDwgMTIpCiAKLSNkZWZpbmUgQVQ5MV9TRFJBTUNfSUVSCQkoQVQ5MV9TRFJBTUMgKyAweDE0KQkvKiBTRFJBTSBDb250cm9sbGVyIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MV9TRFJBTUNfSURSCQkoQVQ5MV9TRFJBTUMgKyAweDE4KQkvKiBTRFJBTSBDb250cm9sbGVyIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfU0RSQU1DX0lNUgkJKEFUOTFfU0RSQU1DICsgMHgxQykJLyogU0RSQU0gQ29udHJvbGxlciBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxX1NEUkFNQ19JU1IJCShBVDkxX1NEUkFNQyArIDB4MjApCS8qIFNEUkFNIENvbnRyb2xsZXIgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX1NEUkFNQ19JRVIJCTB4MTQJLyogU0RSQU0gQ29udHJvbGxlciBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfU0RSQU1DX0lEUgkJMHgxOAkvKiBTRFJBTSBDb250cm9sbGVyIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfU0RSQU1DX0lNUgkJMHgxQwkvKiBTRFJBTSBDb250cm9sbGVyIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfU0RSQU1DX0lTUgkJMHgyMAkvKiBTRFJBTSBDb250cm9sbGVyIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KICNkZWZpbmUJCUFUOTFfU0RSQU1DX1JFUwkJKDEgPDwgMCkJCS8qIFJlZnJlc2ggRXJyb3IgU3RhdHVzICovCiAKLSNkZWZpbmUgQVQ5MV9TRFJBTUNfTURSCQkoQVQ5MV9TRFJBTUMgKyAweDI0KQkvKiBTRFJBTSBNZW1vcnkgRGV2aWNlIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfU0RSQU1DX01EUgkJMHgyNAkvKiBTRFJBTSBNZW1vcnkgRGV2aWNlIFJlZ2lzdGVyICovCiAjZGVmaW5lCQlBVDkxX1NEUkFNQ19NRAkJKDMgPDwgMCkJCS8qIE1lbW9yeSBEZXZpY2UgVHlwZSAqLwogI2RlZmluZQkJCUFUOTFfU0RSQU1DX01EX1NEUkFNCQkwCiAjZGVmaW5lCQkJQVQ5MV9TRFJBTUNfTURfTE9XX1BPV0VSX1NEUkFNCTEKIAorLyogUmVnaXN0ZXIgYWNjZXNzIG1hY3JvcyAqLworI2RlZmluZSBhdDkxX3JhbWNfcmVhZChudW0sIHJlZykgXAorCWF0OTFfc3lzX3JlYWQoQVQ5MV9TRFJBTUMjI251bSArIHJlZykKKyNkZWZpbmUgYXQ5MV9yYW1jX3dyaXRlKG51bSwgcmVnLCB2YWx1ZSkgXAorCWF0OTFfc3lzX3dyaXRlKEFUOTFfU0RSQU1DIyNudW0gKyByZWcsIHZhbHVlKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MXNhbTlybC5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxc2FtOXJsLmgKaW5kZXggZmMyZGU2Yy4uODdiYTg1MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxc2FtOXJsLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxc2FtOXJsLmgKQEAgLTc0LDcgKzc0LDcgQEAKICAqLwogI2RlZmluZSBBVDkxX0RNQQkoMHhmZmZmZTYwMCAtIEFUOTFfQkFTRV9TWVMpCiAjZGVmaW5lIEFUOTFfRUNDCSgweGZmZmZlODAwIC0gQVQ5MV9CQVNFX1NZUykKLSNkZWZpbmUgQVQ5MV9TRFJBTUMJKDB4ZmZmZmVhMDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1NEUkFNQzAJKDB4ZmZmZmVhMDAgLSBBVDkxX0JBU0VfU1lTKQogI2RlZmluZSBBVDkxX1NNQwkoMHhmZmZmZWMwMCAtIEFUOTFfQkFTRV9TWVMpCiAjZGVmaW5lIEFUOTFfTUFUUklYCSgweGZmZmZlZTAwIC0gQVQ5MV9CQVNFX1NZUykKICNkZWZpbmUgQVQ5MV9DQ0ZHCSgweGZmZmZlZjEwIC0gQVQ5MV9CQVNFX1NZUykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYm9hcmQuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYm9hcmQuaAppbmRleCBkZjJlZDg0Li41ODUyOGFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2JvYXJkLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9ib2FyZC5oCkBAIC00NCw2ICs0NCw4IEBACiAgLyogVVNCIERldmljZSAqLwogc3RydWN0IGF0OTFfdWRjX2RhdGEgewogCXU4CXZidXNfcGluOwkJLyogaGlnaCA9PSBob3N0IHBvd2VyaW5nIHVzICovCisJdTgJdmJ1c19hY3RpdmVfbG93OwkvKiB2YnVzIHBvbGFyaXR5ICovCisJdTgJdmJ1c19wb2xsZWQ7CQkvKiBVc2UgcG9sbGluZywgbm90IGludGVycnVwdCAqLwogCXU4CXB1bGx1cF9waW47CQkvKiBhY3RpdmUgPT0gRCsgcHVsbGVkIHVwICovCiAJdTgJcHVsbHVwX2FjdGl2ZV9sb3c7CS8qIHRydWUgPT0gcHVsbHVwX3BpbiBpcyBhY3RpdmUgbG93ICovCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9jcHUuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmgKaW5kZXggODMzNjU5ZC4uM2JlZjkzMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9jcHUuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oCkBAIC01Miw2ICs1Miw3IEBACiAKICNkZWZpbmUgQVJDSF9FWElEX0FUOTFTQU05TTExCTB4MDAwMDAwMDEKICNkZWZpbmUgQVJDSF9FWElEX0FUOTFTQU05TTEwCTB4MDAwMDAwMDIKKyNkZWZpbmUgQVJDSF9FWElEX0FUOTFTQU05RzQ2CTB4MDAwMDAwMDMKICNkZWZpbmUgQVJDSF9FWElEX0FUOTFTQU05RzQ1CTB4MDAwMDAwMDQKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGF0OTFfZXhpZF9pZGVudGlmeSh2b2lkKQpAQCAtMTI4LDkgKzEyOSwxOCBAQAogI2lmZGVmIENPTkZJR19BUkNIX0FUOTFTQU05RzQ1CiAjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWc0NSgpCShhdDkxX2NwdV9pZGVudGlmeSgpID09IEFSQ0hfSURfQVQ5MVNBTTlHNDUpCiAjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWc0NWVzKCkJKGF0OTFfY3B1X2Z1bGx5X2lkZW50aWZ5KCkgPT0gQVJDSF9JRF9BVDkxU0FNOUc0NUVTKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTltMTAoKSAgICAoY3B1X2lzX2F0OTFzYW05ZzQ1KCkgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXQ5MV9leGlkX2lkZW50aWZ5KCkgPT0gQVJDSF9FWElEX0FUOTFTQU05TTEwKSkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05bTQ2KCkgICAgKGNwdV9pc19hdDkxc2FtOWc0NSgpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGF0OTFfZXhpZF9pZGVudGlmeSgpID09IEFSQ0hfRVhJRF9BVDkxU0FNOUc0NikpCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOW0xMSgpICAgIChjcHVfaXNfYXQ5MXNhbTlnNDUoKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhdDkxX2V4aWRfaWRlbnRpZnkoKSA9PSBBUkNIX0VYSURfQVQ5MVNBTTlNMTEpKQogI2Vsc2UKICNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzQ1KCkJKDApCiAjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWc0NWVzKCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOW0xMCgpCSgwKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnNDYoKQkoMCkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05bTExKCkJKDApCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19BUkNIX0FUOTFDQVA5CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDA0YzkxZTMuLmJmZGQ4YWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0xOSw2ICsxOSw3IEBACiAjZGVmaW5lIFBJTl9CQVNFCQlOUl9BSUNfSVJRUwogCiAjZGVmaW5lIE1BWF9HUElPX0JBTktTCQk1CisjZGVmaW5lIE5SX0JVSUxUSU5fR1BJTwkJKFBJTl9CQVNFICsgKE1BWF9HUElPX0JBTktTICogMzIpKQogCiAvKiB0aGVzZSBwaW4gbnVtYmVycyBkb3VibGUgYXMgSVJRIG51bWJlcnMsIGxpa2UgQVQ5MXh4eF9JRF8qIHZhbHVlcyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvcG0uaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9wbS5oCmluZGV4IDA4MzIyYzQuLjhjODdkMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9wbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9wbS5oCkBAIC0zMCwxNCArMzAsNTAgQEAKIHsKIAl1MzIgc2F2ZWRfbHByLCBscHI7CiAKLQlzYXZlZF9scHIgPSBhdDkxX3N5c19yZWFkKEFUOTFfRERSU0RSQ19MUFIpOworCXNhdmVkX2xwciA9IGF0OTFfcmFtY19yZWFkKDAsIEFUOTFfRERSU0RSQ19MUFIpOwogCiAJbHByID0gc2F2ZWRfbHByICYgfkFUOTFfRERSU0RSQ19MUENCOwotCWF0OTFfc3lzX3dyaXRlKEFUOTFfRERSU0RSQ19MUFIsIGxwciB8IEFUOTFfRERSU0RSQ19MUENCX1NFTEZfUkVGUkVTSCk7CisJYXQ5MV9yYW1jX3dyaXRlKDAsIEFUOTFfRERSU0RSQ19MUFIsIGxwciB8IEFUOTFfRERSU0RSQ19MUENCX1NFTEZfUkVGUkVTSCk7CiAJcmV0dXJuIHNhdmVkX2xwcjsKIH0KIAotI2RlZmluZSBzZHJhbV9zZWxmcmVmcmVzaF9kaXNhYmxlKHNhdmVkX2xwcikJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9ERFJTRFJDX0xQUiwgc2F2ZWRfbHByKQorI2RlZmluZSBzZHJhbV9zZWxmcmVmcmVzaF9kaXNhYmxlKHNhdmVkX2xwcikJYXQ5MV9yYW1jX3dyaXRlKDAsIEFUOTFfRERSU0RSQ19MUFIsIHNhdmVkX2xwcikKKworI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOUc0NSkKKyNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X2RkcnNkci5oPgorCisvKiBXZSBtYW5hZ2UgYm90aCBERFJBTS9TRFJBTSBjb250cm9sbGVycywgd2UgbmVlZCBtb3JlIHRoYW4gb25lIHZhbHVlIHRvCisgKiByZW1lbWJlci4KKyAqLworc3RhdGljIHUzMiBzYXZlZF9scHIxOworCitzdGF0aWMgaW5saW5lIHUzMiBzZHJhbV9zZWxmcmVmcmVzaF9lbmFibGUodm9pZCkKK3sKKwkvKiBUaG9zZSB0b3cgdmFsdWVzIGFsbG93IHVzIHRvIGRlbGF5IHNlbGYtcmVmcmVzaCBhY3RpdmF0aW9uCisJICogdG8gdGhlIG1heGltdW0uICovCisJdTMyIGxwcjAsIGxwcjE7CisJdTMyIHNhdmVkX2xwcjA7CisKKwlzYXZlZF9scHIxID0gYXQ5MV9yYW1jX3JlYWQoMSwgQVQ5MV9ERFJTRFJDX0xQUik7CisJbHByMSA9IHNhdmVkX2xwcjEgJiB+QVQ5MV9ERFJTRFJDX0xQQ0I7CisJbHByMSB8PSBBVDkxX0REUlNEUkNfTFBDQl9TRUxGX1JFRlJFU0g7CisKKwlzYXZlZF9scHIwID0gYXQ5MV9yYW1jX3JlYWQoMCwgQVQ5MV9ERFJTRFJDX0xQUik7CisJbHByMCA9IHNhdmVkX2xwcjAgJiB+QVQ5MV9ERFJTRFJDX0xQQ0I7CisJbHByMCB8PSBBVDkxX0REUlNEUkNfTFBDQl9TRUxGX1JFRlJFU0g7CisKKwkvKiBzZWxmLXJlZnJlc2ggbW9kZSBub3cgKi8KKwlhdDkxX3JhbWNfd3JpdGUoMCwgQVQ5MV9ERFJTRFJDX0xQUiwgbHByMCk7CisJYXQ5MV9yYW1jX3dyaXRlKDEsIEFUOTFfRERSU0RSQ19MUFIsIGxwcjEpOworCisJcmV0dXJuIHNhdmVkX2xwcjA7Cit9CisKKyNkZWZpbmUgc2RyYW1fc2VsZnJlZnJlc2hfZGlzYWJsZShzYXZlZF9scHIwKQlcCisJZG8geyBcCisJCWF0OTFfcmFtY193cml0ZSgwLCBBVDkxX0REUlNEUkNfTFBSLCBzYXZlZF9scHIwKTsgXAorCQlhdDkxX3JhbWNfd3JpdGUoMSwgQVQ5MV9ERFJTRFJDX0xQUiwgc2F2ZWRfbHByMSk7IFwKKwl9IHdoaWxlICgwKQogCiAjZWxzZQogI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc2RyYW1jLmg+CkBAIC00Nyw3ICs4Myw2IEBACiAgKiBGSVhNRSBlaXRoZXIgb3IgYm90aCB0aGUgU0RSQU0gY29udHJvbGxlcnMgKEVCMCwgRUIxKSBtaWdodCBiZSBpbiB1c2U7CiAgKiBoYW5kbGUgdGhvc2UgY2FzZXMgYm90aCBoZXJlIGFuZCBpbiB0aGUgU3VzcGVuZC1Uby1SQU0gc3VwcG9ydC4KICAqLwotI2RlZmluZQlBVDkxX1NEUkFNQwlBVDkxX1NEUkFNQzAKICN3YXJuaW5nIEFzc3VtaW5nIEVCMSBTRFJBTSBjb250cm9sbGVyIGlzICpOT1QqIHVzZWQKICNlbmRpZgogCkBAIC01NSwxMyArOTAsMTMgQEAKIHsKIAl1MzIgc2F2ZWRfbHByLCBscHI7CiAKLQlzYXZlZF9scHIgPSBhdDkxX3N5c19yZWFkKEFUOTFfU0RSQU1DX0xQUik7CisJc2F2ZWRfbHByID0gYXQ5MV9yYW1jX3JlYWQoMCwgQVQ5MV9TRFJBTUNfTFBSKTsKIAogCWxwciA9IHNhdmVkX2xwciAmIH5BVDkxX1NEUkFNQ19MUENCOwotCWF0OTFfc3lzX3dyaXRlKEFUOTFfU0RSQU1DX0xQUiwgbHByIHwgQVQ5MV9TRFJBTUNfTFBDQl9TRUxGX1JFRlJFU0gpOworCWF0OTFfcmFtY193cml0ZSgwLCBBVDkxX1NEUkFNQ19MUFIsIGxwciB8IEFUOTFfU0RSQU1DX0xQQ0JfU0VMRl9SRUZSRVNIKTsKIAlyZXR1cm4gc2F2ZWRfbHByOwogfQogCi0jZGVmaW5lIHNkcmFtX3NlbGZyZWZyZXNoX2Rpc2FibGUoc2F2ZWRfbHByKQlhdDkxX3N5c193cml0ZShBVDkxX1NEUkFNQ19MUFIsIHNhdmVkX2xwcikKKyNkZWZpbmUgc2RyYW1fc2VsZnJlZnJlc2hfZGlzYWJsZShzYXZlZF9scHIpCWF0OTFfcmFtY193cml0ZSgwLCBBVDkxX1NEUkFNQ19MUFIsIHNhdmVkX2xwcikKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvcG1fc2xvd2Nsb2NrLlMgYi9hcmNoL2FybS9tYWNoLWF0OTEvcG1fc2xvd2Nsb2NrLlMKaW5kZXggOWM1YjQ4ZS4uYjZiMDBhMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL3BtX3Nsb3djbG9jay5TCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9wbV9zbG93Y2xvY2suUwpAQCAtMTYsMTAgKzE2LDEyIEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvYXQ5MV9wbWMuaD4KIAotI2lmZGVmIENPTkZJR19BUkNIX0FUOTFSTTkyMDAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFSTTkyMDApCiAjaW5jbHVkZSA8bWFjaC9hdDkxcm05MjAwX21jLmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFDQVA5KQogI2luY2x1ZGUgPG1hY2gvYXQ5MWNhcDlfZGRyc2RyLmg+CisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFTQU05RzQ1KQorI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfZGRyc2RyLmg+CiAjZWxzZQogI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc2RyYW1jLmg+CiAjZW5kaWYKQEAgLTMwLDcgKzMyLDYgQEAKICAqIEZJWE1FIGVpdGhlciBvciBib3RoIHRoZSBTRFJBTSBjb250cm9sbGVycyAoRUIwLCBFQjEpIG1pZ2h0IGJlIGluIHVzZTsKICAqIGhhbmRsZSB0aG9zZSBjYXNlcyBib3RoIGhlcmUgYW5kIGluIHRoZSBTdXNwZW5kLVRvLVJBTSBzdXBwb3J0LgogICovCi0jZGVmaW5lIEFUOTFfU0RSQU1DCUFUOTFfU0RSQU1DMAogI3dhcm5pbmcgQXNzdW1pbmcgRUIxIFNEUkFNIGNvbnRyb2xsZXIgaXMgKk5PVCogdXNlZAogI2VuZGlmCiAKQEAgLTExMywxMiArMTE0LDE0IEBACiAJLyoKIAkgKiBSZWdpc3RlciB1c2FnZToKIAkgKiAgUjEgPSBCYXNlIGFkZHJlc3Mgb2YgQVQ5MV9QTUMKLQkgKiAgUjIgPSBCYXNlIGFkZHJlc3Mgb2YgQVQ5MV9TRFJBTUMgKG9yIEFUOTFfU1lTIG9uIEFUOTFSTTkyMDApCisJICogIFIyID0gQmFzZSBhZGRyZXNzIG9mIFJBTSBDb250cm9sbGVyIChTRFJBTSwgRERSU0RSLCBvciBBVDkxX1NZUykKIAkgKiAgUjMgPSB0ZW1wb3JhcnkgcmVnaXN0ZXIKIAkgKiAgUjQgPSB0ZW1wb3JhcnkgcmVnaXN0ZXIKKwkgKiAgUjUgPSBCYXNlIGFkZHJlc3Mgb2Ygc2Vjb25kIFJBTSBDb250cm9sbGVyIG9yIDAgaWYgbm90IHByZXNlbnQKIAkgKi8KIAlsZHIJcjEsIC5hdDkxX3ZhX2Jhc2VfcG1jCiAJbGRyCXIyLCAuYXQ5MV92YV9iYXNlX3NkcmFtYworCWxkcglyNSwgLmF0OTFfdmFfYmFzZV9yYW1jMQogCiAJLyogRHJhaW4gd3JpdGUgYnVmZmVyICovCiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQKQEAgLTEyNywyMCArMTMwLDMzIEBACiAJLyogUHV0IFNEUkFNIGluIHNlbGYtcmVmcmVzaCBtb2RlICovCiAJbW92CXIzLCAjMQogCXN0cglyMywgW3IyLCAjQVQ5MV9TRFJBTUNfU1JSXQotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxQ0FQOSkKLQkvKiBFbmFibGUgU0RSQU0gc2VsZi1yZWZyZXNoIG1vZGUgKi8KLQlsZHIJcjMsIFtyMiwgI0FUOTFfRERSU0RSQ19MUFIgLSBBVDkxX0REUlNEUkNdCi0Jc3RyCXIzLCAuc2F2ZWRfc2FtOV9scHIKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MUNBUDkpIFwKKwl8fCBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFTQU05RzQ1KQogCi0JbW92CXIzLCAjQVQ5MV9ERFJTRFJDX0xQQ0JfU0VMRl9SRUZSRVNICi0Jc3RyCXIzLCBbcjIsICNBVDkxX0REUlNEUkNfTFBSIC0gQVQ5MV9ERFJTRFJDXQorCS8qIHByZXBhcmUgZm9yIEREUkFNIHNlbGYtcmVmcmVzaCBtb2RlICovCisJbGRyCXIzLCBbcjIsICNBVDkxX0REUlNEUkNfTFBSXQorCXN0cglyMywgLnNhdmVkX3NhbTlfbHByCisJYmljCXIzLCAjQVQ5MV9ERFJTRFJDX0xQQ0IKKwlvcnIJcjMsICNBVDkxX0REUlNEUkNfTFBDQl9TRUxGX1JFRlJFU0gKKworCS8qIGZpZ3VyZSBvdXQgaWYgd2UgdXNlIHRoZSBzZWNvbmQgcmFtIGNvbnRyb2xsZXIgKi8KKwljbXAJcjUsICMwCisJbGRybmUJcjQsIFtyNSwgI0FUOTFfRERSU0RSQ19MUFJdCisJc3RybmUJcjQsIC5zYXZlZF9zYW05X2xwcjEKKwliaWNuZQlyNCwgI0FUOTFfRERSU0RSQ19MUENCCisJb3JybmUJcjQsICNBVDkxX0REUlNEUkNfTFBDQl9TRUxGX1JFRlJFU0gKKworCS8qIEVuYWJsZSBERFJBTSBzZWxmLXJlZnJlc2ggbW9kZSAqLworCXN0cglyMywgW3IyLCAjQVQ5MV9ERFJTRFJDX0xQUl0KKwlzdHJuZQlyNCwgW3I1LCAjQVQ5MV9ERFJTRFJDX0xQUl0KICNlbHNlCiAJLyogRW5hYmxlIFNEUkFNIHNlbGYtcmVmcmVzaCBtb2RlICovCi0JbGRyCXIzLCBbcjIsICNBVDkxX1NEUkFNQ19MUFIgLSBBVDkxX1NEUkFNQ10KKwlsZHIJcjMsIFtyMiwgI0FUOTFfU0RSQU1DX0xQUl0KIAlzdHIJcjMsIC5zYXZlZF9zYW05X2xwcgogCi0JbW92CXIzLCAjQVQ5MV9TRFJBTUNfTFBDQl9TRUxGX1JFRlJFU0gKLQlzdHIJcjMsIFtyMiwgI0FUOTFfU0RSQU1DX0xQUiAtIEFUOTFfU0RSQU1DXQorCWJpYwlyMywgI0FUOTFfU0RSQU1DX0xQQ0IKKwlvcnIJcjMsICNBVDkxX1NEUkFNQ19MUENCX1NFTEZfUkVGUkVTSAorCXN0cglyMywgW3IyLCAjQVQ5MV9TRFJBTUNfTFBSXQogI2VuZGlmCiAKIAkvKiBTYXZlIE1hc3RlciBjbG9jayBzZXR0aW5nICovCkBAIC0yNDcsMTQgKzI2MywyMSBAQAogCiAjaWZkZWYgQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMAogCS8qIERvIG5vdGhpbmcgLSBzZWxmLXJlZnJlc2ggaXMgYXV0b21hdGljYWxseSBkaXNhYmxlZC4gKi8KLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MUNBUDkpCi0JLyogUmVzdG9yZSBMUFIgb24gQVQ5MUNBUDkgKi8KKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MUNBUDkpIFwKKwl8fCBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFTQU05RzQ1KQorCS8qIFJlc3RvcmUgTFBSIG9uIEFUOTEgd2l0aCBERFJBTSAqLwogCWxkcglyMywgLnNhdmVkX3NhbTlfbHByCi0Jc3RyCXIzLCBbcjIsICNBVDkxX0REUlNEUkNfTFBSIC0gQVQ5MV9ERFJTRFJDXQorCXN0cglyMywgW3IyLCAjQVQ5MV9ERFJTRFJDX0xQUl0KKworCS8qIGlmIHdlIHVzZSB0aGUgc2Vjb25kIHJhbSBjb250cm9sbGVyICovCisJY21wCXI1LCAjMAorCWxkcm5lCXI0LCAuc2F2ZWRfc2FtOV9scHIxCisJc3RybmUJcjQsIFtyNSwgI0FUOTFfRERSU0RSQ19MUFJdCisKICNlbHNlCi0JLyogUmVzdG9yZSBMUFIgb24gQVQ5MVNBTTkgKi8KKwkvKiBSZXN0b3JlIExQUiBvbiBBVDkxIHdpdGggU0RSQU0gKi8KIAlsZHIJcjMsIC5zYXZlZF9zYW05X2xwcgotCXN0cglyMywgW3IyLCAjQVQ5MV9TRFJBTUNfTFBSIC0gQVQ5MV9TRFJBTUNdCisJc3RyCXIzLCBbcjIsICNBVDkxX1NEUkFNQ19MUFJdCiAjZW5kaWYKIAogCS8qIFJlc3RvcmUgcmVnaXN0ZXJzLCBhbmQgcmV0dXJuICovCkBAIC0yNzMsMTggKzI5NiwyOSBAQAogLnNhdmVkX3NhbTlfbHByOgogCS53b3JkIDAKIAorLnNhdmVkX3NhbTlfbHByMToKKwkud29yZCAwCisKIC5hdDkxX3ZhX2Jhc2VfcG1jOgogCS53b3JkIEFUOTFfVkFfQkFTRV9TWVMgKyBBVDkxX1BNQwogCiAjaWZkZWYgQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMAogLmF0OTFfdmFfYmFzZV9zZHJhbWM6CiAJLndvcmQgQVQ5MV9WQV9CQVNFX1NZUwotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxQ0FQOSkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MUNBUDkpIFwKKwl8fCBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFTQU05RzQ1KQogLmF0OTFfdmFfYmFzZV9zZHJhbWM6Ci0JLndvcmQgQVQ5MV9WQV9CQVNFX1NZUyArIEFUOTFfRERSU0RSQworCS53b3JkIEFUOTFfVkFfQkFTRV9TWVMgKyBBVDkxX0REUlNEUkMwCiAjZWxzZQogLmF0OTFfdmFfYmFzZV9zZHJhbWM6Ci0JLndvcmQgQVQ5MV9WQV9CQVNFX1NZUyArIEFUOTFfU0RSQU1DCisJLndvcmQgQVQ5MV9WQV9CQVNFX1NZUyArIEFUOTFfU0RSQU1DMAorI2VuZGlmCisKKy5hdDkxX3ZhX2Jhc2VfcmFtYzE6CisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOUc0NSkKKwkud29yZCBBVDkxX1ZBX0JBU0VfU1lTICsgQVQ5MV9ERFJTRFJDMQorI2Vsc2UKKwkud29yZCAwCiAjZW5kaWYKIAogRU5UUlkoYXQ5MV9zbG93X2Nsb2NrX3N6KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jb3JlLmMKaW5kZXggNzJlNDA1ZC4uZDNmOTU5ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY29yZS5jCkBAIC05MSwxNCArOTEsMjMgQEAKIAkucGFyZW50ID0gJnBsbDFfY2xrLAogfTsKIAorc3RhdGljIHN0cnVjdCBjbGsgZHVtbXlfYXBiX3BjbGsgPSB7CisJLm5hbWUgPSAiQlVTQ0xLIiwKKwkudHlwZSA9IENMS19UWVBFX1BSSU1BUlksCisJLm1vZGUgPSBDTEtfTU9ERV9YVEFMLAorfTsKKwogc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKLQl7CQkJLyogVUFSVDAgKi8KLQkgLmRldl9pZCA9ICJ1YXJ0YSIsCi0JIC5jbGsgPSAmdWFydF9jbGssCi0JIH0sIHsJCQkvKiBVQVJUMSAqLwotCSAgICAgLmRldl9pZCA9ICJ1YXJ0YiIsCi0JICAgICAuY2xrID0gJnVhcnRfY2xrLAotCSAgICAgfQorCXsJCQkvKiBCdXMgY2xvY2sgKi8KKwkJLmNvbl9pZCA9ICJhcGJfcGNsayIsCisJCS5jbGsgPSAmZHVtbXlfYXBiX3BjbGssCisJfSwgewkJCS8qIFVBUlQwICovCisJCS5kZXZfaWQgPSAidWFydGEiLAorCQkuY2xrID0gJnVhcnRfY2xrLAorCX0sIHsJCQkvKiBVQVJUMSAqLworCQkuZGV2X2lkID0gInVhcnRiIiwKKwkJLmNsayA9ICZ1YXJ0X2NsaywKKwl9CiB9OwogCiBzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlICphbWJhX2RldnNbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9LY29uZmlnCmluZGV4IGRiYWFlNWYuLmViMzRiZDEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWNscHM3MTF4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9LY29uZmlnCkBAIC0zMCw3ICszMCw2IEBACiBjb25maWcgQVJDSF9FREI3MjExCiAJYm9vbCAiRURCNzIxMSIKIAlzZWxlY3QgSVNBCi0Jc2VsZWN0IEFSQ0hfRElTQ09OVElHTUVNX0VOQUJMRQogCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKIAlzZWxlY3QgQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMCiAJaGVscApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9jbGVwNzMxMi5jIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9jbGVwNzMxMi5jCmluZGV4IDA5ZmI1N2UuLjNjM2JmNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvY2xlcDczMTIuYworKysgYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2NsZXA3MzEyLmMKQEAgLTMyLDcgKzMyLDYgQEAKIAltaS0+bnJfYmFua3M9MTsKIAltaS0+YmFua1swXS5zdGFydCA9IDB4YzAwMDAwMDA7CiAJbWktPmJhbmtbMF0uc2l6ZSA9IDB4MDEwMDAwMDA7Ci0JbWktPmJhbmtbMF0ubm9kZSA9IDA7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9lZGI3MjExLWFyY2guYyBiL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvZWRiNzIxMS1hcmNoLmMKaW5kZXggZGM4MWNjNi4uNGE3YTIzMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9lZGI3MjExLWFyY2guYworKysgYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2VkYjcyMTEtYXJjaC5jCkBAIC0xOCw2ICsxOCw3IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogCkBAIC0yOSw2ICszMCwxMiBAQAogCiBleHRlcm4gdm9pZCBlZGI3MjExX21hcF9pbyh2b2lkKTsKIAorLyogUmVzZXJ2ZSBzY3JlZW4gbWVtb3J5IHJlZ2lvbiBhdCB0aGUgc3RhcnQgb2YgbWFpbiBzeXN0ZW0gbWVtb3J5LiAqLworc3RhdGljIHZvaWQgX19pbml0IGVkYjcyMTFfcmVzZXJ2ZSh2b2lkKQoreworCW1lbWJsb2NrX3Jlc2VydmUoUEhZU19PRkZTRVQsIDB4MDAwMjAwMDApOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQKIGZpeHVwX2VkYjcyMTEoc3RydWN0IG1hY2hpbmVfZGVzYyAqZGVzYywgc3RydWN0IHRhZyAqdGFncywKIAkgICAgICBjaGFyICoqY21kbGluZSwgc3RydWN0IG1lbWluZm8gKm1pKQpAQCAtNDMsMTAgKzUwLDggQEAKIAkgKi8KIAltaS0+YmFua1swXS5zdGFydCA9IDB4YzAwMDAwMDA7CiAJbWktPmJhbmtbMF0uc2l6ZSA9IDgqMTAyNCoxMDI0OwotCW1pLT5iYW5rWzBdLm5vZGUgPSAwOwogCW1pLT5iYW5rWzFdLnN0YXJ0ID0gMHhjMTAwMDAwMDsKIAltaS0+YmFua1sxXS5zaXplID0gOCoxMDI0KjEwMjQ7Ci0JbWktPmJhbmtbMV0ubm9kZSA9IDE7CiAJbWktPm5yX2JhbmtzID0gMjsKIH0KIApAQCAtNTcsNiArNjIsNyBAQAogCS5ib290X3BhcmFtcwk9IDB4YzAwMjAxMDAsCS8qIDB4YzAwMDAwMDAgLSAweGMwMDFmZmZmIGNhbiBiZSB2aWRlbyBSQU0gKi8KIAkuZml4dXAJCT0gZml4dXBfZWRiNzIxMSwKIAkubWFwX2lvCQk9IGVkYjcyMTFfbWFwX2lvLAorCS5yZXNlcnZlCT0gZWRiNzIxMV9yZXNlcnZlLAogCS5pbml0X2lycQk9IGNscHM3MTF4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmY2xwczcxMXhfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9mb3J0dW5ldC5jIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9mb3J0dW5ldC5jCmluZGV4IDc0MzBlNDAuLmE2OTYwOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvZm9ydHVuZXQuYworKysgYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2ZvcnR1bmV0LmMKQEAgLTM5LDcgKzM5LDYgQEAKIAkJewogCQkJLnN0YXJ0CT0gMHhDMDAwMDAwMCwKIAkJCS5zaXplCT0gMHgwMTAwMDAwMCwKLQkJCS5ub2RlCT0gMAogCQl9LAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggZmVkZDgwNy4uMDcyY2M2YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMSw2ICsxMSw3IEBACiAgKgogKi8KIAorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2xwczcxMTEuaD4KIAogCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggZjcwZDUyYi4uZjQ1YzhlOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTIwLDcgKzIwLDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAogI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICiAKLQogLyoKICAqIFBoeXNpY2FsIERSQU0gb2Zmc2V0LgogICovCkBAIC03Miw3ICs3MSw2IEBACiAgKiAJbm9kZSAyOiAgMHhkMDAwMDAwMCAtIDB4ZDdmZmZmZmYKICAqIAlub2RlIDM6ICAweGQ4MDAwMDAwIC0gMHhkZmZmZmZmZgogICovCi0jZGVmaW5lIE5PREVfTUVNX1NJWkVfQklUUwkyNAogI2RlZmluZSBTRUNUSU9OX1NJWkVfQklUUwkyNAogI2RlZmluZSBNQVhfUEhZU01FTV9CSVRTCTMyCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY25zM3h4eC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtY25zM3h4eC9NYWtlZmlsZQppbmRleCA0Mjc1MDdhLi4xMTAzM2YxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWNuczN4eHgvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L01ha2VmaWxlCkBAIC0xLDIgKzEsMyBAQAotb2JqLSQoQ09ORklHX0FSQ0hfQ05TM1hYWCkJCSs9IGNvcmUubyBwbS5vCitvYmotJChDT05GSUdfQVJDSF9DTlMzWFhYKQkJKz0gY29yZS5vIHBtLm8gZGV2aWNlcy5vCitvYmotJChDT05GSUdfUENJKQkJCSs9IHBjaWUubwogb2JqLSQoQ09ORklHX01BQ0hfQ05TMzQyMFZCKQkJKz0gY25zMzQyMHZiLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY25zM3h4eC9jbnMzNDIwdmIuYyBiL2FyY2gvYXJtL21hY2gtY25zM3h4eC9jbnMzNDIwdmIuYwppbmRleCAyZTMwYzgyLi45ZGY4MzkxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWNuczN4eHgvY25zMzQyMHZiLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L2NuczM0MjB2Yi5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bWFjaC9jbnMzeHh4Lmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSAiY29yZS5oIgorI2luY2x1ZGUgImRldmljZXMuaCIKIAogLyoKICAqIE5PUiBGbGFzaApAQCAtMTE3LDYgKzExOCw5IEBACiB7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMoY25zMzQyMF9wZGV2cywgQVJSQVlfU0laRShjbnMzNDIwX3BkZXZzKSk7CiAKKwljbnMzeHh4X2FoY2lfaW5pdCgpOworCWNuczN4eHhfc2RoY2lfaW5pdCgpOworCiAJcG1fcG93ZXJfb2ZmID0gY25zM3h4eF9wb3dlcl9vZmY7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY25zM3h4eC9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWNuczN4eHgvZGV2aWNlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYjRkMzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWNuczN4eHgvZGV2aWNlcy5jCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ05TM3h4eCBjb21tb24gZGV2aWNlcworICoKKyAqIENvcHlyaWdodCAyMDA4IENhdml1bSBOZXR3b3JrcworICoJCSAgU2NvdHQgU2h1CisgKiBDb3B5cmlnaHQgMjAxMCBNb250YVZpc3RhIFNvZnR3YXJlLCBMTEMuCisgKgkJICBBbnRvbiBWb3JvbnRzb3YgPGF2b3JvbnRzb3ZAbXZpc3RhLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxtYWNoL2NuczN4eHguaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKyNpbmNsdWRlICJjb3JlLmgiCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCisvKgorICogQUhDSQorICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNuczN4eHhfYWhjaV9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQ05TM1hYWF9TQVRBMl9CQVNFLAorCQkuZW5kCT0gQ05TM1hYWF9TQVRBMl9CQVNFICsgQ05TM1hYWF9TQVRBMl9TSVpFIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9DTlMzWFhYX1NBVEEsCisJCS5lbmQJPSBJUlFfQ05TM1hYWF9TQVRBLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHU2NCBjbnMzeHh4X2FoY2lfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNuczN4eHhfYWhjaV9wZGV2ID0geworCS5uYW1lCQk9ICJhaGNpIiwKKwkuaWQJCT0gMCwKKwkucmVzb3VyY2UJPSBjbnMzeHh4X2FoY2lfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNuczN4eHhfYWhjaV9yZXNvdXJjZSksCisJLmRldgkJPSB7CisJCS5kbWFfbWFzawkJPSAmY25zM3h4eF9haGNpX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJfSwKK307CisKK3ZvaWQgX19pbml0IGNuczN4eHhfYWhjaV9pbml0KHZvaWQpCit7CisJdTMyIHRtcDsKKworCXRtcCA9IF9fcmF3X3JlYWRsKE1JU0NfU0FUQV9QT1dFUl9NT0RFKTsKKwl0bXAgfD0gMHgxIDw8IDE2OyAvKiBEaXNhYmxlIFNBVEEgUEhZIDAgZnJvbSBTTFVNQkVSIE1vZGUgKi8KKwl0bXAgfD0gMHgxIDw8IDE3OyAvKiBEaXNhYmxlIFNBVEEgUEhZIDEgZnJvbSBTTFVNQkVSIE1vZGUgKi8KKwlfX3Jhd193cml0ZWwodG1wLCBNSVNDX1NBVEFfUE9XRVJfTU9ERSk7CisKKwkvKiBFbmFibGUgU0FUQSBQSFkgKi8KKwljbnMzeHh4X3B3cl9wb3dlcl91cCgweDEgPDwgUE1fUExMX0hNX1BEX0NUUkxfUkVHX09GRlNFVF9TQVRBX1BIWTApOworCWNuczN4eHhfcHdyX3Bvd2VyX3VwKDB4MSA8PCBQTV9QTExfSE1fUERfQ1RSTF9SRUdfT0ZGU0VUX1NBVEFfUEhZMSk7CisKKwkvKiBFbmFibGUgU0FUQSBDbG9jayAqLworCWNuczN4eHhfcHdyX2Nsa19lbigweDEgPDwgUE1fQ0xLX0dBVEVfUkVHX09GRlNFVF9TQVRBKTsKKworCS8qIERlLUFzc2NlciBTQVRBIFJlc2V0ICovCisJY25zM3h4eF9wd3Jfc29mdF9yc3QoQ05TM1hYWF9QV1JfU09GVFdBUkVfUlNUKFNBVEEpKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY25zM3h4eF9haGNpX3BkZXYpOworfQorCisvKgorICogU0RIQ0kKKyAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjbnMzeHh4X3NkaGNpX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gQ05TM1hYWF9TRElPX0JBU0UsCisJCS5lbmQgICA9IENOUzNYWFhfU0RJT19CQVNFICsgU1pfNEsgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX0NOUzNYWFhfU0RJTywKKwkJLmVuZCAgID0gSVJRX0NOUzNYWFhfU0RJTywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNuczN4eHhfc2RoY2lfcGRldiA9IHsKKwkubmFtZQkJPSAic2RoY2ktY25zM3h4eCIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNuczN4eHhfc2RoY2lfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBjbnMzeHh4X3NkaGNpX3Jlc291cmNlcywKK307CisKK3ZvaWQgX19pbml0IGNuczN4eHhfc2RoY2lfaW5pdCh2b2lkKQoreworCXUzMiBfX2lvbWVtICpncGlvYSA9IF9faW8oQ05TM1hYWF9NSVNDX0JBU0VfVklSVCArIDB4MDAxNCk7CisJdTMyIGdwaW9hX3BpbnMgPSBfX3Jhd19yZWFkbChncGlvYSk7CisKKwkvKiBNTUMvU0QgcGlucyBzaGFyZSB3aXRoIEdQSU9BICovCisJZ3Bpb2FfcGlucyB8PSAweDFmZmYwMDA0OworCV9fcmF3X3dyaXRlbChncGlvYV9waW5zLCBncGlvYSk7CisKKwljbnMzeHh4X3B3cl9jbGtfZW4oQ05TM1hYWF9QV1JfQ0xLX0VOKFNESU8pKTsKKwljbnMzeHh4X3B3cl9zb2Z0X3JzdChDTlMzWFhYX1BXUl9TT0ZUV0FSRV9SU1QoU0RJTykpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZjbnMzeHh4X3NkaGNpX3BkZXYpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtY25zM3h4eC9kZXZpY2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdlMTVhMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtY25zM3h4eC9kZXZpY2VzLmgKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIENOUzN4eHggY29tbW9uIGRldmljZXMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBDYXZpdW0gTmV0d29ya3MKKyAqCQkgIFNjb3R0IFNodQorICogQ29weXJpZ2h0IDIwMTAgTW9udGFWaXN0YSBTb2Z0d2FyZSwgTExDLgorICoJCSAgQW50b24gVm9yb250c292IDxhdm9yb250c292QG12aXN0YS5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19DTlMzWFhYX0RFVklDRVNfSF8KKyNkZWZpbmUgX19DTlMzWFhYX0RFVklDRVNfSF8KKwordm9pZCBfX2luaXQgY25zM3h4eF9haGNpX2luaXQodm9pZCk7Cit2b2lkIF9faW5pdCBjbnMzeHh4X3NkaGNpX2luaXQodm9pZCk7CisKKyNlbmRpZiAvKiBfX0NOUzNYWFhfREVWSUNFU19IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L2luY2x1ZGUvbWFjaC9jbnMzeHh4LmggYi9hcmNoL2FybS9tYWNoLWNuczN4eHgvaW5jbHVkZS9tYWNoL2NuczN4eHguaAppbmRleCA4YTJmNWEyLi42ZGJjZTEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWNuczN4eHgvaW5jbHVkZS9tYWNoL2NuczN4eHguaAorKysgYi9hcmNoL2FybS9tYWNoLWNuczN4eHgvaW5jbHVkZS9tYWNoL2NuczN4eHguaApAQCAtMjQ3LDM3ICsyNDcsMzYgQEAKICAqIE1pc2MgYmxvY2sKICAqLwogI2RlZmluZSBNSVNDX01FTV9NQVAob2ZmcykgKHZvaWQgX19pb21lbSAqKShDTlMzWFhYX01JU0NfQkFTRV9WSVJUICsgKG9mZnMpKQotI2RlZmluZSBNSVNDX01FTV9NQVBfVkFMVUUob2Zmc2V0KSAoKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKENOUzNYWFhfTUlTQ19CQVNFX1ZJUlQgKyAob2Zmc2V0KSkpKQogCi0jZGVmaW5lIE1JU0NfTUVNT1JZX1JFTUFQX1JFRwkJCU1JU0NfTUVNX01BUF9WQUxVRSgweDAwKQotI2RlZmluZSBNSVNDX0NISVBfQ09ORklHX1JFRwkJCU1JU0NfTUVNX01BUF9WQUxVRSgweDA0KQotI2RlZmluZSBNSVNDX0RFQlVHX1BST0JFX0RBVEFfUkVHCQlNSVNDX01FTV9NQVBfVkFMVUUoMHgwOCkKLSNkZWZpbmUgTUlTQ19ERUJVR19QUk9CRV9TRUxFQ1RJT05fUkVHCQlNSVNDX01FTV9NQVBfVkFMVUUoMHgwQykKLSNkZWZpbmUgTUlTQ19JT19QSU5fRlVOQ19TRUxFQ1RJT05fUkVHCQlNSVNDX01FTV9NQVBfVkFMVUUoMHgxMCkKLSNkZWZpbmUgTUlTQ19HUElPQV9QSU5fRU5BQkxFX1JFRwkJTUlTQ19NRU1fTUFQX1ZBTFVFKDB4MTQpCi0jZGVmaW5lIE1JU0NfR1BJT0JfUElOX0VOQUJMRV9SRUcJCU1JU0NfTUVNX01BUF9WQUxVRSgweDE4KQotI2RlZmluZSBNSVNDX0lPX1BBRF9EUklWRV9TVFJFTkdUSF9DVFJMX0EJTUlTQ19NRU1fTUFQX1ZBTFVFKDB4MUMpCi0jZGVmaW5lIE1JU0NfSU9fUEFEX0RSSVZFX1NUUkVOR1RIX0NUUkxfQglNSVNDX01FTV9NQVBfVkFMVUUoMHgyMCkKLSNkZWZpbmUgTUlTQ19HUElPQV8xNV8wX1BVTExfQ1RSTF9SRUcJCU1JU0NfTUVNX01BUF9WQUxVRSgweDI0KQotI2RlZmluZSBNSVNDX0dQSU9BXzE2XzMxX1BVTExfQ1RSTF9SRUcJCU1JU0NfTUVNX01BUF9WQUxVRSgweDI4KQotI2RlZmluZSBNSVNDX0dQSU9CXzE1XzBfUFVMTF9DVFJMX1JFRwkJTUlTQ19NRU1fTUFQX1ZBTFVFKDB4MkMpCi0jZGVmaW5lIE1JU0NfR1BJT0JfMTZfMzFfUFVMTF9DVFJMX1JFRwkJTUlTQ19NRU1fTUFQX1ZBTFVFKDB4MzApCi0jZGVmaW5lIE1JU0NfSU9fUFVMTF9DVFJMX1JFRwkJCU1JU0NfTUVNX01BUF9WQUxVRSgweDM0KQotI2RlZmluZSBNSVNDX0VfRlVTRV8zMV8wX1JFRwkJCU1JU0NfTUVNX01BUF9WQUxVRSgweDQwKQotI2RlZmluZSBNSVNDX0VfRlVTRV82M18zMl9SRUcJCQlNSVNDX01FTV9NQVBfVkFMVUUoMHg0NCkKLSNkZWZpbmUgTUlTQ19FX0ZVU0VfOTVfNjRfUkVHCQkJTUlTQ19NRU1fTUFQX1ZBTFVFKDB4NDgpCi0jZGVmaW5lIE1JU0NfRV9GVVNFXzEyN185Nl9SRUcJCQlNSVNDX01FTV9NQVBfVkFMVUUoMHg0QykKLSNkZWZpbmUgTUlTQ19TT0ZUV0FSRV9URVNUXzFfUkVHCQlNSVNDX01FTV9NQVBfVkFMVUUoMHg1MCkKLSNkZWZpbmUgTUlTQ19TT0ZUV0FSRV9URVNUXzJfUkVHCQlNSVNDX01FTV9NQVBfVkFMVUUoMHg1NCkKKyNkZWZpbmUgTUlTQ19NRU1PUllfUkVNQVBfUkVHCQkJTUlTQ19NRU1fTUFQKDB4MDApCisjZGVmaW5lIE1JU0NfQ0hJUF9DT05GSUdfUkVHCQkJTUlTQ19NRU1fTUFQKDB4MDQpCisjZGVmaW5lIE1JU0NfREVCVUdfUFJPQkVfREFUQV9SRUcJCU1JU0NfTUVNX01BUCgweDA4KQorI2RlZmluZSBNSVNDX0RFQlVHX1BST0JFX1NFTEVDVElPTl9SRUcJCU1JU0NfTUVNX01BUCgweDBDKQorI2RlZmluZSBNSVNDX0lPX1BJTl9GVU5DX1NFTEVDVElPTl9SRUcJCU1JU0NfTUVNX01BUCgweDEwKQorI2RlZmluZSBNSVNDX0dQSU9BX1BJTl9FTkFCTEVfUkVHCQlNSVNDX01FTV9NQVAoMHgxNCkKKyNkZWZpbmUgTUlTQ19HUElPQl9QSU5fRU5BQkxFX1JFRwkJTUlTQ19NRU1fTUFQKDB4MTgpCisjZGVmaW5lIE1JU0NfSU9fUEFEX0RSSVZFX1NUUkVOR1RIX0NUUkxfQQlNSVNDX01FTV9NQVAoMHgxQykKKyNkZWZpbmUgTUlTQ19JT19QQURfRFJJVkVfU1RSRU5HVEhfQ1RSTF9CCU1JU0NfTUVNX01BUCgweDIwKQorI2RlZmluZSBNSVNDX0dQSU9BXzE1XzBfUFVMTF9DVFJMX1JFRwkJTUlTQ19NRU1fTUFQKDB4MjQpCisjZGVmaW5lIE1JU0NfR1BJT0FfMTZfMzFfUFVMTF9DVFJMX1JFRwkJTUlTQ19NRU1fTUFQKDB4MjgpCisjZGVmaW5lIE1JU0NfR1BJT0JfMTVfMF9QVUxMX0NUUkxfUkVHCQlNSVNDX01FTV9NQVAoMHgyQykKKyNkZWZpbmUgTUlTQ19HUElPQl8xNl8zMV9QVUxMX0NUUkxfUkVHCQlNSVNDX01FTV9NQVAoMHgzMCkKKyNkZWZpbmUgTUlTQ19JT19QVUxMX0NUUkxfUkVHCQkJTUlTQ19NRU1fTUFQKDB4MzQpCisjZGVmaW5lIE1JU0NfRV9GVVNFXzMxXzBfUkVHCQkJTUlTQ19NRU1fTUFQKDB4NDApCisjZGVmaW5lIE1JU0NfRV9GVVNFXzYzXzMyX1JFRwkJCU1JU0NfTUVNX01BUCgweDQ0KQorI2RlZmluZSBNSVNDX0VfRlVTRV85NV82NF9SRUcJCQlNSVNDX01FTV9NQVAoMHg0OCkKKyNkZWZpbmUgTUlTQ19FX0ZVU0VfMTI3Xzk2X1JFRwkJCU1JU0NfTUVNX01BUCgweDRDKQorI2RlZmluZSBNSVNDX1NPRlRXQVJFX1RFU1RfMV9SRUcJCU1JU0NfTUVNX01BUCgweDUwKQorI2RlZmluZSBNSVNDX1NPRlRXQVJFX1RFU1RfMl9SRUcJCU1JU0NfTUVNX01BUCgweDU0KQogCi0jZGVmaW5lIE1JU0NfU0FUQV9QT1dFUl9NT0RFCQkJTUlTQ19NRU1fTUFQX1ZBTFVFKDB4MzEwKQorI2RlZmluZSBNSVNDX1NBVEFfUE9XRVJfTU9ERQkJCU1JU0NfTUVNX01BUCgweDMxMCkKIAotI2RlZmluZSBNSVNDX1VTQl9DRkdfUkVHCQkJTUlTQ19NRU1fTUFQX1ZBTFVFKDB4ODAwKQotI2RlZmluZSBNSVNDX1VTQl9TVFNfUkVHCQkJTUlTQ19NRU1fTUFQX1ZBTFVFKDB4ODA0KQotI2RlZmluZSBNSVNDX1VTQlBIWTAwX0NGR19SRUcJCQlNSVNDX01FTV9NQVBfVkFMVUUoMHg4MDgpCi0jZGVmaW5lIE1JU0NfVVNCUEhZMDFfQ0ZHX1JFRwkJCU1JU0NfTUVNX01BUF9WQUxVRSgweDgwYykKLSNkZWZpbmUgTUlTQ19VU0JQSFkxMF9DRkdfUkVHCQkJTUlTQ19NRU1fTUFQX1ZBTFVFKDB4ODEwKQotI2RlZmluZSBNSVNDX1VTQlBIWTExX0NGR19SRUcJCQlNSVNDX01FTV9NQVBfVkFMVUUoMHg4MTQpCisjZGVmaW5lIE1JU0NfVVNCX0NGR19SRUcJCQlNSVNDX01FTV9NQVAoMHg4MDApCisjZGVmaW5lIE1JU0NfVVNCX1NUU19SRUcJCQlNSVNDX01FTV9NQVAoMHg4MDQpCisjZGVmaW5lIE1JU0NfVVNCUEhZMDBfQ0ZHX1JFRwkJCU1JU0NfTUVNX01BUCgweDgwOCkKKyNkZWZpbmUgTUlTQ19VU0JQSFkwMV9DRkdfUkVHCQkJTUlTQ19NRU1fTUFQKDB4ODBjKQorI2RlZmluZSBNSVNDX1VTQlBIWTEwX0NGR19SRUcJCQlNSVNDX01FTV9NQVAoMHg4MTApCisjZGVmaW5lIE1JU0NfVVNCUEhZMTFfQ0ZHX1JFRwkJCU1JU0NfTUVNX01BUCgweDgxNCkKIAogI2RlZmluZSBNSVNDX1BDSUVQSFlfQ01DVEwoeCkJCQlNSVNDX01FTV9NQVAoMHg5MDAgKyAoeCkgKiAweDAwNCkKICNkZWZpbmUgTUlTQ19QQ0lFUEhZX0NUTCh4KQkJCU1JU0NfTUVNX01BUCgweDk0MCArICh4KSAqIDB4MTAwKQpAQCAtMzAwLDIxICsyOTksMjEgQEAKIC8qCiAgKiBQb3dlciBtYW5hZ2VtZW50IGFuZCBjbG9jayBjb250cm9sCiAgKi8KLSNkZWZpbmUgUE1VX1JFR19WQUxVRShvZmZzZXQpICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikoQ05TM1hYWF9QTV9CQVNFX1ZJUlQgKyAob2Zmc2V0KSkpKQorI2RlZmluZSBQTVVfTUVNX01BUChvZmZzKSAodm9pZCBfX2lvbWVtICopKENOUzNYWFhfUE1fQkFTRV9WSVJUICsgKG9mZnMpKQogCi0jZGVmaW5lIFBNX0NMS19HQVRFX1JFRwkJCQkJUE1VX1JFR19WQUxVRSgweDAwMCkKLSNkZWZpbmUgUE1fU09GVF9SU1RfUkVHCQkJCQlQTVVfUkVHX1ZBTFVFKDB4MDA0KQotI2RlZmluZSBQTV9IU19DRkdfUkVHCQkJCQlQTVVfUkVHX1ZBTFVFKDB4MDA4KQotI2RlZmluZSBQTV9DQUNUSVZFX1NUQV9SRUcJCQkJUE1VX1JFR19WQUxVRSgweDAwQykKLSNkZWZpbmUgUE1fUFdSX1NUQV9SRUcJCQkJCVBNVV9SRUdfVkFMVUUoMHgwMTApCi0jZGVmaW5lIFBNX0NMS19DVFJMX1JFRwkJCQkJUE1VX1JFR19WQUxVRSgweDAxNCkKLSNkZWZpbmUgUE1fUExMX0xDRF9JMlNfQ1RSTF9SRUcJCQkJUE1VX1JFR19WQUxVRSgweDAxOCkKLSNkZWZpbmUgUE1fUExMX0hNX1BEX0NUUkxfUkVHCQkJCVBNVV9SRUdfVkFMVUUoMHgwMUMpCi0jZGVmaW5lIFBNX1JFR1VMQVRfQ1RSTF9SRUcJCQkJUE1VX1JFR19WQUxVRSgweDAyMCkKLSNkZWZpbmUgUE1fV0RUX0NUUkxfUkVHCQkJCQlQTVVfUkVHX1ZBTFVFKDB4MDI0KQotI2RlZmluZSBQTV9XVV9DVFJMMF9SRUcJCQkJCVBNVV9SRUdfVkFMVUUoMHgwMjgpCi0jZGVmaW5lIFBNX1dVX0NUUkwxX1JFRwkJCQkJUE1VX1JFR19WQUxVRSgweDAyQykKLSNkZWZpbmUgUE1fQ1NSX1JFRwkJCQkJUE1VX1JFR19WQUxVRSgweDAzMCkKKyNkZWZpbmUgUE1fQ0xLX0dBVEVfUkVHCQkJCQlQTVVfTUVNX01BUCgweDAwMCkKKyNkZWZpbmUgUE1fU09GVF9SU1RfUkVHCQkJCQlQTVVfTUVNX01BUCgweDAwNCkKKyNkZWZpbmUgUE1fSFNfQ0ZHX1JFRwkJCQkJUE1VX01FTV9NQVAoMHgwMDgpCisjZGVmaW5lIFBNX0NBQ1RJVkVfU1RBX1JFRwkJCQlQTVVfTUVNX01BUCgweDAwQykKKyNkZWZpbmUgUE1fUFdSX1NUQV9SRUcJCQkJCVBNVV9NRU1fTUFQKDB4MDEwKQorI2RlZmluZSBQTV9DTEtfQ1RSTF9SRUcJCQkJCVBNVV9NRU1fTUFQKDB4MDE0KQorI2RlZmluZSBQTV9QTExfTENEX0kyU19DVFJMX1JFRwkJCQlQTVVfTUVNX01BUCgweDAxOCkKKyNkZWZpbmUgUE1fUExMX0hNX1BEX0NUUkxfUkVHCQkJCVBNVV9NRU1fTUFQKDB4MDFDKQorI2RlZmluZSBQTV9SRUdVTEFUX0NUUkxfUkVHCQkJCVBNVV9NRU1fTUFQKDB4MDIwKQorI2RlZmluZSBQTV9XRFRfQ1RSTF9SRUcJCQkJCVBNVV9NRU1fTUFQKDB4MDI0KQorI2RlZmluZSBQTV9XVV9DVFJMMF9SRUcJCQkJCVBNVV9NRU1fTUFQKDB4MDI4KQorI2RlZmluZSBQTV9XVV9DVFJMMV9SRUcJCQkJCVBNVV9NRU1fTUFQKDB4MDJDKQorI2RlZmluZSBQTV9DU1JfUkVHCQkJCQlQTVVfTUVNX01BUCgweDAzMCkKIAogLyogUE1fQ0xLX0dBVEVfUkVHICovCiAjZGVmaW5lIFBNX0NMS19HQVRFX1JFR19PRkZTRVRfU0RJTwkJCSgyNSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY25zM3h4eC9wY2llLmMgYi9hcmNoL2FybS9tYWNoLWNuczN4eHgvcGNpZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MDg4YzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWNuczN4eHgvcGNpZS5jCkBAIC0wLDAgKzEsMzg5IEBACisvKgorICogUENJLUUgc3VwcG9ydCBmb3IgQ05TM3h4eAorICoKKyAqIENvcHlyaWdodCAyMDA4IENhdml1bSBOZXR3b3JrcworICoJCSAgUmljaGFyZCBMaXUgPHJpY2hhcmQubGl1QGNhdml1bW5ldHdvcmtzLmNvbT4KKyAqIENvcHlyaWdodCAyMDEwIE1vbnRhVmlzdGEgU29mdHdhcmUsIExMQy4KKyAqCQkgIEFudG9uIFZvcm9udHNvdiA8YXZvcm9udHNvdkBtdmlzdGEuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9jbnMzeHh4Lmg+CisjaW5jbHVkZSAiY29yZS5oIgorCitlbnVtIGNuczN4eHhfYWNjZXNzX3R5cGUgeworCUNOUzNYWFhfSE9TVF9UWVBFID0gMCwKKwlDTlMzWFhYX0NGRzBfVFlQRSwKKwlDTlMzWFhYX0NGRzFfVFlQRSwKKwlDTlMzWFhYX05VTV9BQ0NFU1NfVFlQRVMsCit9OworCitzdHJ1Y3QgY25zM3h4eF9wY2llIHsKKwlzdHJ1Y3QgbWFwX2Rlc2MgY2ZnX2Jhc2VzW0NOUzNYWFhfTlVNX0FDQ0VTU19UWVBFU107CisJdW5zaWduZWQgaW50IGlycXNbMl07CisJc3RydWN0IHJlc291cmNlIHJlc19pbzsKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzX21lbTsKKwlzdHJ1Y3QgaHdfcGNpIGh3X3BjaTsKKworCWJvb2wgbGlua2VkOworfTsKKworc3RhdGljIHN0cnVjdCBjbnMzeHh4X3BjaWUgY25zM3h4eF9wY2llW107IC8qIGZvcndhcmQgZGVjbC4gKi8KKworc3RhdGljIHN0cnVjdCBjbnMzeHh4X3BjaWUgKnN5c2RhdGFfdG9fY25zcGNpKHZvaWQgKnN5c2RhdGEpCit7CisJc3RydWN0IHBjaV9zeXNfZGF0YSAqcm9vdCA9IHN5c2RhdGE7CisKKwlyZXR1cm4gJmNuczN4eHhfcGNpZVtyb290LT5kb21haW5dOworfQorCitzdGF0aWMgc3RydWN0IGNuczN4eHhfcGNpZSAqcGRldl90b19jbnNwY2koc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlyZXR1cm4gc3lzZGF0YV90b19jbnNwY2koZGV2LT5zeXNkYXRhKTsKK30KKworc3RhdGljIHN0cnVjdCBjbnMzeHh4X3BjaWUgKnBidXNfdG9fY25zcGNpKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJcmV0dXJuIHN5c2RhdGFfdG9fY25zcGNpKGJ1cy0+c3lzZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmNuczN4eHhfcGNpX2NmZ19iYXNlKHN0cnVjdCBwY2lfYnVzICpidXMsCisJCQkJICB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSkKK3sKKwlzdHJ1Y3QgY25zM3h4eF9wY2llICpjbnNwY2kgPSBwYnVzX3RvX2Nuc3BjaShidXMpOworCWludCBidXNubyA9IGJ1cy0+bnVtYmVyOworCWludCBzbG90ID0gUENJX1NMT1QoZGV2Zm4pOworCWludCBvZmZzZXQ7CisJZW51bSBjbnMzeHh4X2FjY2Vzc190eXBlIHR5cGU7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCisJLyogSWYgdGhlcmUgaXMgbm8gbGluaywganVzdCBzaG93IHRoZSBDTlMgUENJIGJyaWRnZS4gKi8KKwlpZiAoIWNuc3BjaS0+bGlua2VkICYmIChidXNubyA+IDAgfHwgc2xvdCA+IDApKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogVGhlIENOUyBQQ0kgYnJpZGdlIGRvZXNuJ3QgZml0IGludG8gdGhlIFBDSSBoaWVyYXJjaHksIHRob3VnaAorCSAqIHdlIHN0aWxsIHdhbnQgdG8gYWNjZXNzIGl0LiBGb3IgdGhpcyB0byB3b3JrLCB3ZSBtdXN0IHBsYWNlCisJICogdGhlIGZpcnN0IGRldmljZSBvbiB0aGUgc2FtZSBidXMgYXMgdGhlIENOUyBQQ0kgYnJpZGdlLgorCSAqLworCWlmIChidXNubyA9PSAwKSB7CisJCWlmIChzbG90ID4gMSkKKwkJCXJldHVybiBOVUxMOworCQl0eXBlID0gc2xvdDsKKwl9IGVsc2UgeworCQl0eXBlID0gQ05TM1hYWF9DRkcxX1RZUEU7CisJfQorCisJYmFzZSA9ICh2b2lkIF9faW9tZW0gKiljbnNwY2ktPmNmZ19iYXNlc1t0eXBlXS52aXJ0dWFsOworCW9mZnNldCA9ICgoYnVzbm8gJiAweGYpIDw8IDIwKSB8IChkZXZmbiA8PCAxMikgfCAod2hlcmUgJiAweGZmYyk7CisKKwlyZXR1cm4gYmFzZSArIG9mZnNldDsKK30KKworc3RhdGljIGludCBjbnMzeHh4X3BjaV9yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCQkJICAgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWwpCit7CisJdTMyIHY7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCXUzMiBtYXNrID0gKDB4MXVsbCA8PCAoc2l6ZSAqIDgpKSAtIDE7CisJaW50IHNoaWZ0ID0gKHdoZXJlICUgNCkgKiA4OworCisJYmFzZSA9IGNuczN4eHhfcGNpX2NmZ19iYXNlKGJ1cywgZGV2Zm4sIHdoZXJlKTsKKwlpZiAoIWJhc2UpIHsKKwkJKnZhbCA9IDB4ZmZmZmZmZmY7CisJCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7CisJfQorCisJdiA9IF9fcmF3X3JlYWRsKGJhc2UpOworCisJaWYgKGJ1cy0+bnVtYmVyID09IDAgJiYgZGV2Zm4gPT0gMCAmJgorCQkJKHdoZXJlICYgMHhmZmMpID09IFBDSV9DTEFTU19SRVZJU0lPTikgeworCQkvKgorCQkgKiBSQydzIGNsYXNzIGlzIDB4YiwgYnV0IExpbnV4IFBDSSBkcml2ZXIgbmVlZHMgMHg2MDQKKwkJICogZm9yIGEgUENJZSBicmlkZ2UuIFNvIHdlIG11c3QgZml4dXAgdGhlIGNsYXNzIGNvZGUKKwkJICogdG8gMHg2MDQgaGVyZS4KKwkJICovCisJCXYgJj0gMHhmZjsKKwkJdiB8PSAweDYwNCA8PCAxNjsKKwl9CisKKwkqdmFsID0gKHYgPj4gc2hpZnQpICYgbWFzazsKKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKK3N0YXRpYyBpbnQgY25zM3h4eF9wY2lfd3JpdGVfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCQkgICAgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbCkKK3sKKwl1MzIgdjsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJdTMyIG1hc2sgPSAoMHgxdWxsIDw8IChzaXplICogOCkpIC0gMTsKKwlpbnQgc2hpZnQgPSAod2hlcmUgJSA0KSAqIDg7CisKKwliYXNlID0gY25zM3h4eF9wY2lfY2ZnX2Jhc2UoYnVzLCBkZXZmbiwgd2hlcmUpOworCWlmICghYmFzZSkKKwkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKKworCXYgPSBfX3Jhd19yZWFkbChiYXNlKTsKKworCXYgJj0gfihtYXNrIDw8IHNoaWZ0KTsKKwl2IHw9ICh2YWwgJiBtYXNrKSA8PCBzaGlmdDsKKworCV9fcmF3X3dyaXRlbCh2LCBiYXNlKTsKKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKK3N0YXRpYyBpbnQgY25zM3h4eF9wY2lfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCit7CisJc3RydWN0IGNuczN4eHhfcGNpZSAqY25zcGNpID0gc3lzZGF0YV90b19jbnNwY2koc3lzKTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlc19pbyA9ICZjbnNwY2ktPnJlc19pbzsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlc19tZW0gPSAmY25zcGNpLT5yZXNfbWVtOworCXN0cnVjdCByZXNvdXJjZSAqKnN5c3JlcyA9IHN5cy0+cmVzb3VyY2U7CisKKwlCVUdfT04ocmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsIHJlc19pbykgfHwKKwkgICAgICAgcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsIHJlc19tZW0pKTsKKworCXN5c3Jlc1swXSA9IHJlc19pbzsKKwlzeXNyZXNbMV0gPSByZXNfbWVtOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX29wcyBjbnMzeHh4X3BjaWVfb3BzID0geworCS5yZWFkID0gY25zM3h4eF9wY2lfcmVhZF9jb25maWcsCisJLndyaXRlID0gY25zM3h4eF9wY2lfd3JpdGVfY29uZmlnLAorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfYnVzICpjbnMzeHh4X3BjaV9zY2FuX2J1cyhpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKK3sKKwlyZXR1cm4gcGNpX3NjYW5fYnVzKHN5cy0+YnVzbnIsICZjbnMzeHh4X3BjaWVfb3BzLCBzeXMpOworfQorCitzdGF0aWMgaW50IGNuczN4eHhfcGNpZV9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3sKKwlzdHJ1Y3QgY25zM3h4eF9wY2llICpjbnNwY2kgPSBwZGV2X3RvX2Nuc3BjaShkZXYpOworCWludCBpcnEgPSBjbnNwY2ktPmlycXNbc2xvdF07CisKKwlwcl9pbmZvKCJQQ0llIG1hcCBpcnE6ICUwNGQ6JTAyeDolMDJ4LiUwMnggc2xvdCAlZCwgcGluICVkLCBpcnE6ICVkXG4iLAorCQlwY2lfZG9tYWluX25yKGRldi0+YnVzKSwgZGV2LT5idXMtPm51bWJlciwgUENJX1NMT1QoZGV2LT5kZXZmbiksCisJCVBDSV9GVU5DKGRldi0+ZGV2Zm4pLCBzbG90LCBwaW4sIGlycSk7CisKKwlyZXR1cm4gaXJxOworfQorCitzdGF0aWMgc3RydWN0IGNuczN4eHhfcGNpZSBjbnMzeHh4X3BjaWVbXSA9IHsKKwlbMF0gPSB7CisJCS5jZmdfYmFzZXMgPSB7CisJCQlbQ05TM1hYWF9IT1NUX1RZUEVdID0geworCQkJCS52aXJ0dWFsID0gQ05TM1hYWF9QQ0lFMF9IT1NUX0JBU0VfVklSVCwKKwkJCQkucGZuID0gX19waHlzX3RvX3BmbihDTlMzWFhYX1BDSUUwX0hPU1RfQkFTRSksCisJCQkJLmxlbmd0aCA9IFNaXzE2TSwKKwkJCQkudHlwZSA9IE1UX0RFVklDRSwKKwkJCX0sCisJCQlbQ05TM1hYWF9DRkcwX1RZUEVdID0geworCQkJCS52aXJ0dWFsID0gQ05TM1hYWF9QQ0lFMF9DRkcwX0JBU0VfVklSVCwKKwkJCQkucGZuID0gX19waHlzX3RvX3BmbihDTlMzWFhYX1BDSUUwX0NGRzBfQkFTRSksCisJCQkJLmxlbmd0aCA9IFNaXzE2TSwKKwkJCQkudHlwZSA9IE1UX0RFVklDRSwKKwkJCX0sCisJCQlbQ05TM1hYWF9DRkcxX1RZUEVdID0geworCQkJCS52aXJ0dWFsID0gQ05TM1hYWF9QQ0lFMF9DRkcxX0JBU0VfVklSVCwKKwkJCQkucGZuID0gX19waHlzX3RvX3BmbihDTlMzWFhYX1BDSUUwX0NGRzFfQkFTRSksCisJCQkJLmxlbmd0aCA9IFNaXzE2TSwKKwkJCQkudHlwZSA9IE1UX0RFVklDRSwKKwkJCX0sCisJCX0sCisJCS5yZXNfaW8gPSB7CisJCQkubmFtZSA9ICJQQ0llMCBJL08gc3BhY2UiLAorCQkJLnN0YXJ0ID0gQ05TM1hYWF9QQ0lFMF9JT19CQVNFLAorCQkJLmVuZCA9IENOUzNYWFhfUENJRTBfSU9fQkFTRSArIFNaXzE2TSAtIDEsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lPLAorCQl9LAorCQkucmVzX21lbSA9IHsKKwkJCS5uYW1lID0gIlBDSWUwIG5vbi1wcmVmZXRjaGFibGUiLAorCQkJLnN0YXJ0ID0gQ05TM1hYWF9QQ0lFMF9NRU1fQkFTRSwKKwkJCS5lbmQgPSBDTlMzWFhYX1BDSUUwX01FTV9CQVNFICsgU1pfMTZNIC0gMSwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQl9LAorCQkuaXJxcyA9IHsgSVJRX0NOUzNYWFhfUENJRTBfUkMsIElSUV9DTlMzWFhYX1BDSUUwX0RFVklDRSwgfSwKKwkJLmh3X3BjaSA9IHsKKwkJCS5kb21haW4gPSAwLAorCQkJLnN3aXp6bGUgPSBwY2lfc3RkX3N3aXp6bGUsCisJCQkubnJfY29udHJvbGxlcnMgPSAxLAorCQkJLnNldHVwID0gY25zM3h4eF9wY2lfc2V0dXAsCisJCQkuc2NhbiA9IGNuczN4eHhfcGNpX3NjYW5fYnVzLAorCQkJLm1hcF9pcnEgPSBjbnMzeHh4X3BjaWVfbWFwX2lycSwKKwkJfSwKKwl9LAorCVsxXSA9IHsKKwkJLmNmZ19iYXNlcyA9IHsKKwkJCVtDTlMzWFhYX0hPU1RfVFlQRV0gPSB7CisJCQkJLnZpcnR1YWwgPSBDTlMzWFhYX1BDSUUxX0hPU1RfQkFTRV9WSVJULAorCQkJCS5wZm4gPSBfX3BoeXNfdG9fcGZuKENOUzNYWFhfUENJRTFfSE9TVF9CQVNFKSwKKwkJCQkubGVuZ3RoID0gU1pfMTZNLAorCQkJCS50eXBlID0gTVRfREVWSUNFLAorCQkJfSwKKwkJCVtDTlMzWFhYX0NGRzBfVFlQRV0gPSB7CisJCQkJLnZpcnR1YWwgPSBDTlMzWFhYX1BDSUUxX0NGRzBfQkFTRV9WSVJULAorCQkJCS5wZm4gPSBfX3BoeXNfdG9fcGZuKENOUzNYWFhfUENJRTFfQ0ZHMF9CQVNFKSwKKwkJCQkubGVuZ3RoID0gU1pfMTZNLAorCQkJCS50eXBlID0gTVRfREVWSUNFLAorCQkJfSwKKwkJCVtDTlMzWFhYX0NGRzFfVFlQRV0gPSB7CisJCQkJLnZpcnR1YWwgPSBDTlMzWFhYX1BDSUUxX0NGRzFfQkFTRV9WSVJULAorCQkJCS5wZm4gPSBfX3BoeXNfdG9fcGZuKENOUzNYWFhfUENJRTFfQ0ZHMV9CQVNFKSwKKwkJCQkubGVuZ3RoID0gU1pfMTZNLAorCQkJCS50eXBlID0gTVRfREVWSUNFLAorCQkJfSwKKwkJfSwKKwkJLnJlc19pbyA9IHsKKwkJCS5uYW1lID0gIlBDSWUxIEkvTyBzcGFjZSIsCisJCQkuc3RhcnQgPSBDTlMzWFhYX1BDSUUxX0lPX0JBU0UsCisJCQkuZW5kID0gQ05TM1hYWF9QQ0lFMV9JT19CQVNFICsgU1pfMTZNIC0gMSwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSU8sCisJCX0sCisJCS5yZXNfbWVtID0geworCQkJLm5hbWUgPSAiUENJZTEgbm9uLXByZWZldGNoYWJsZSIsCisJCQkuc3RhcnQgPSBDTlMzWFhYX1BDSUUxX01FTV9CQVNFLAorCQkJLmVuZCA9IENOUzNYWFhfUENJRTFfTUVNX0JBU0UgKyBTWl8xNk0gLSAxLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCX0sCisJCS5pcnFzID0geyBJUlFfQ05TM1hYWF9QQ0lFMV9SQywgSVJRX0NOUzNYWFhfUENJRTFfREVWSUNFLCB9LAorCQkuaHdfcGNpID0geworCQkJLmRvbWFpbiA9IDEsCisJCQkuc3dpenpsZSA9IHBjaV9zdGRfc3dpenpsZSwKKwkJCS5ucl9jb250cm9sbGVycyA9IDEsCisJCQkuc2V0dXAgPSBjbnMzeHh4X3BjaV9zZXR1cCwKKwkJCS5zY2FuID0gY25zM3h4eF9wY2lfc2Nhbl9idXMsCisJCQkubWFwX2lycSA9IGNuczN4eHhfcGNpZV9tYXBfaXJxLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgY25zM3h4eF9wY2llX2NoZWNrX2xpbmsoc3RydWN0IGNuczN4eHhfcGNpZSAqY25zcGNpKQoreworCWludCBwb3J0ID0gY25zcGNpLT5od19wY2kuZG9tYWluOworCXUzMiByZWc7CisJdW5zaWduZWQgbG9uZyB0aW1lOworCisJcmVnID0gX19yYXdfcmVhZGwoTUlTQ19QQ0lFX0NUUkwocG9ydCkpOworCS8qCisJICogRW5hYmxlIEFwcGxpY2F0aW9uIFJlcXVlc3QgdG8gMSwgaXQgd2lsbCBleGl0IEwxIGF1dG9tYXRpY2FsbHksCisJICogYnV0IHdoZW4gY2hpcCBiYWNrLCBpdCB3aWxsIHVzZSBhbm90aGVyIGNsb2NrLCBzdGlsbCBjYW4gdXNlIDB4MS4KKwkgKi8KKwlyZWcgfD0gMHgzOworCV9fcmF3X3dyaXRlbChyZWcsIE1JU0NfUENJRV9DVFJMKHBvcnQpKTsKKworCXByX2luZm8oIlBDSWU6IFBvcnRbJWRdIEVuYWJsZSBQQ0llIExUU1NNXG4iLCBwb3J0KTsKKwlwcl9pbmZvKCJQQ0llOiBQb3J0WyVkXSBDaGVjayBkYXRhIGxpbmsgbGF5ZXIuLi4iLCBwb3J0KTsKKworCXRpbWUgPSBqaWZmaWVzOworCXdoaWxlICgxKSB7CisJCXJlZyA9IF9fcmF3X3JlYWRsKE1JU0NfUENJRV9QTV9ERUJVRyhwb3J0KSk7CisJCWlmIChyZWcgJiAweDEpIHsKKwkJCXByX2luZm8oIkxpbmsgdXAuXG4iKTsKKwkJCWNuc3BjaS0+bGlua2VkID0gMTsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZSArIDUwKSkgeworCQkJcHJfaW5mbygiRGV2aWNlIG5vdCBmb3VuZC5cbiIpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjbnMzeHh4X3BjaWVfaHdfaW5pdChzdHJ1Y3QgY25zM3h4eF9wY2llICpjbnNwY2kpCit7CisJaW50IHBvcnQgPSBjbnNwY2ktPmh3X3BjaS5kb21haW47CisJc3RydWN0IHBjaV9zeXNfZGF0YSBzZCA9IHsKKwkJLmRvbWFpbiA9IHBvcnQsCisJfTsKKwlzdHJ1Y3QgcGNpX2J1cyBidXMgPSB7CisJCS5udW1iZXIgPSAwLAorCQkub3BzID0gJmNuczN4eHhfcGNpZV9vcHMsCisJCS5zeXNkYXRhID0gJnNkLAorCX07CisJdTMyIGlvX2Jhc2UgPSBjbnNwY2ktPnJlc19pby5zdGFydCA+PiAxNjsKKwl1MzIgbWVtX2Jhc2UgPSBjbnNwY2ktPnJlc19tZW0uc3RhcnQgPj4gMTY7CisJdTMyIGhvc3RfYmFzZSA9IGNuc3BjaS0+Y2ZnX2Jhc2VzW0NOUzNYWFhfSE9TVF9UWVBFXS5wZm47CisJdTMyIGNmZzBfYmFzZSA9IGNuc3BjaS0+Y2ZnX2Jhc2VzW0NOUzNYWFhfQ0ZHMF9UWVBFXS5wZm47CisJdTMyIGRldmZuID0gMDsKKwl1OCB0bXA4OworCXUxNiBwb3M7CisJdTE2IGRjOworCisJaG9zdF9iYXNlID0gKF9fcGZuX3RvX3BoeXMoaG9zdF9iYXNlKSAtIDEpID4+IDE2OworCWNmZzBfYmFzZSA9IChfX3Bmbl90b19waHlzKGNmZzBfYmFzZSkgLSAxKSA+PiAxNjsKKworCXBjaV9idXNfd3JpdGVfY29uZmlnX2J5dGUoJmJ1cywgZGV2Zm4sIFBDSV9QUklNQVJZX0JVUywgMCk7CisJcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZSgmYnVzLCBkZXZmbiwgUENJX1NFQ09OREFSWV9CVVMsIDEpOworCXBjaV9idXNfd3JpdGVfY29uZmlnX2J5dGUoJmJ1cywgZGV2Zm4sIFBDSV9TVUJPUkRJTkFURV9CVVMsIDEpOworCisJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKCZidXMsIGRldmZuLCBQQ0lfUFJJTUFSWV9CVVMsICZ0bXA4KTsKKwlwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUoJmJ1cywgZGV2Zm4sIFBDSV9TRUNPTkRBUllfQlVTLCAmdG1wOCk7CisJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKCZidXMsIGRldmZuLCBQQ0lfU1VCT1JESU5BVEVfQlVTLCAmdG1wOCk7CisKKwlwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKCZidXMsIGRldmZuLCBQQ0lfTUVNT1JZX0JBU0UsIG1lbV9iYXNlKTsKKwlwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKCZidXMsIGRldmZuLCBQQ0lfTUVNT1JZX0xJTUlULCBob3N0X2Jhc2UpOworCXBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQoJmJ1cywgZGV2Zm4sIFBDSV9JT19CQVNFX1VQUEVSMTYsIGlvX2Jhc2UpOworCXBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQoJmJ1cywgZGV2Zm4sIFBDSV9JT19MSU1JVF9VUFBFUjE2LCBjZmcwX2Jhc2UpOworCisJaWYgKCFjbnNwY2ktPmxpbmtlZCkKKwkJcmV0dXJuOworCisJLyogU2V0IERldmljZSBNYXhfUmVhZF9SZXF1ZXN0X1NpemUgdG8gMTI4IGJ5dGUgKi8KKwlkZXZmbiA9IFBDSV9ERVZGTigxLCAwKTsKKwlwb3MgPSBwY2lfYnVzX2ZpbmRfY2FwYWJpbGl0eSgmYnVzLCBkZXZmbiwgUENJX0NBUF9JRF9FWFApOworCXBjaV9idXNfcmVhZF9jb25maWdfd29yZCgmYnVzLCBkZXZmbiwgcG9zICsgUENJX0VYUF9ERVZDVEwsICZkYyk7CisJZGMgJj0gfigweDMgPDwgMTIpOwkvKiBDbGVhciBEZXZpY2UgQ29udHJvbCBSZWdpc3RlciBbMTQ6MTJdICovCisJcGNpX2J1c193cml0ZV9jb25maWdfd29yZCgmYnVzLCBkZXZmbiwgcG9zICsgUENJX0VYUF9ERVZDVEwsIGRjKTsKKwlwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQoJmJ1cywgZGV2Zm4sIHBvcyArIFBDSV9FWFBfREVWQ1RMLCAmZGMpOworCWlmICghKGRjICYgKDB4MyA8PCAxMikpKQorCQlwcl9pbmZvKCJQQ0llOiBTZXQgRGV2aWNlIE1heF9SZWFkX1JlcXVlc3RfU2l6ZSB0byAxMjggYnl0ZVxuIik7CisKKwkvKiBEaXNhYmxlIFBDSWUwIEludGVycnVwdCBNYXNrIElOVEEgdG8gSU5URCAqLworCV9fcmF3X3dyaXRlbCh+MHgzRkZGLCBNSVNDX1BDSUVfSU5UX01BU0socG9ydCkpOworfQorCitzdGF0aWMgaW50IGNuczN4eHhfcGNpZV9hYm9ydF9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwKKwkJCQkgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpZiAoZnNyICYgKDEgPDwgMTApKQorCQlyZWdzLT5BUk1fcGMgKz0gNDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgY25zM3h4eF9wY2llX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWhvb2tfZmF1bHRfY29kZSgxNiArIDYsIGNuczN4eHhfcGNpZV9hYm9ydF9oYW5kbGVyLCBTSUdCVVMsCisJCQkiaW1wcmVjaXNlIGV4dGVybmFsIGFib3J0Iik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjbnMzeHh4X3BjaWUpOyBpKyspIHsKKwkJaW90YWJsZV9pbml0KGNuczN4eHhfcGNpZVtpXS5jZmdfYmFzZXMsCisJCQkgICAgIEFSUkFZX1NJWkUoY25zM3h4eF9wY2llW2ldLmNmZ19iYXNlcykpOworCQljbnMzeHh4X3B3cl9jbGtfZW4oMHgxIDw8IFBNX0NMS19HQVRFX1JFR19PRkZTRVRfUENJRShpKSk7CisJCWNuczN4eHhfcHdyX3NvZnRfcnN0KDB4MSA8PCBQTV9TT0ZUX1JTVF9SRUdfT0ZGU1RfUENJRShpKSk7CisJCWNuczN4eHhfcGNpZV9jaGVja19saW5rKCZjbnMzeHh4X3BjaWVbaV0pOworCQljbnMzeHh4X3BjaWVfaHdfaW5pdCgmY25zM3h4eF9wY2llW2ldKTsKKwkJcGNpX2NvbW1vbl9pbml0KCZjbnMzeHh4X3BjaWVbaV0uaHdfcGNpKTsKKwl9CisKKwlwY2lfYXNzaWduX3VuYXNzaWduZWRfcmVzb3VyY2VzKCk7CisKKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChjbnMzeHh4X3BjaWVfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNuczN4eHgvcG0uYyBiL2FyY2gvYXJtL21hY2gtY25zM3h4eC9wbS5jCmluZGV4IDcyNWUxYTQuLjM4ZTQ0NzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtY25zM3h4eC9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtY25zM3h4eC9wbS5jCkBAIC02LDE4ICs2LDI1IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPG1hY2gvc3lzdGVtLmg+CiAjaW5jbHVkZSA8bWFjaC9jbnMzeHh4Lmg+CiAKIHZvaWQgY25zM3h4eF9wd3JfY2xrX2VuKHVuc2lnbmVkIGludCBibG9jaykKIHsKLQlQTV9DTEtfR0FURV9SRUcgfD0gKGJsb2NrICYgUE1fQ0xLX0dBVEVfUkVHX01BU0spOworCXUzMiByZWcgPSBfX3Jhd19yZWFkbChQTV9DTEtfR0FURV9SRUcpOworCisJcmVnIHw9IChibG9jayAmIFBNX0NMS19HQVRFX1JFR19NQVNLKTsKKwlfX3Jhd193cml0ZWwocmVnLCBQTV9DTEtfR0FURV9SRUcpOwogfQogCiB2b2lkIGNuczN4eHhfcHdyX3Bvd2VyX3VwKHVuc2lnbmVkIGludCBibG9jaykKIHsKLQlQTV9QTExfSE1fUERfQ1RSTF9SRUcgJj0gfihibG9jayAmIENOUzNYWFhfUFdSX1BMTF9BTEwpOworCXUzMiByZWcgPSBfX3Jhd19yZWFkbChQTV9QTExfSE1fUERfQ1RSTF9SRUcpOworCisJcmVnICY9IH4oYmxvY2sgJiBDTlMzWFhYX1BXUl9QTExfQUxMKTsKKwlfX3Jhd193cml0ZWwocmVnLCBQTV9QTExfSE1fUERfQ1RSTF9SRUcpOwogCiAJLyogV2FpdCBmb3IgMzAwdXMgZm9yIHRoZSBQTEwgb3V0cHV0IGNsb2NrIGxvY2tlZC4gKi8KIAl1ZGVsYXkoMzAwKTsKQEAgLTI1LDIyICszMiwyOSBAQAogCiB2b2lkIGNuczN4eHhfcHdyX3Bvd2VyX2Rvd24odW5zaWduZWQgaW50IGJsb2NrKQogeworCXUzMiByZWcgPSBfX3Jhd19yZWFkbChQTV9QTExfSE1fUERfQ1RSTF9SRUcpOworCiAJLyogd3JpdGUgJzEnIHRvIHBvd2VyIGRvd24gKi8KLQlQTV9QTExfSE1fUERfQ1RSTF9SRUcgfD0gKGJsb2NrICYgQ05TM1hYWF9QV1JfUExMX0FMTCk7CisJcmVnIHw9IChibG9jayAmIENOUzNYWFhfUFdSX1BMTF9BTEwpOworCV9fcmF3X3dyaXRlbChyZWcsIFBNX1BMTF9ITV9QRF9DVFJMX1JFRyk7CiB9OwogCiBzdGF0aWMgdm9pZCBjbnMzeHh4X3B3cl9zb2Z0X3JzdF9mb3JjZSh1bnNpZ25lZCBpbnQgYmxvY2spCiB7CisJdTMyIHJlZyA9IF9fcmF3X3JlYWRsKFBNX1NPRlRfUlNUX1JFRyk7CisKIAkvKgogCSAqIGJpdCAwLCAyOCwgMjkgPT4gcHJvZ3JhbSBsb3cgdG8gcmVzZXQsCiAJICogdGhlIG90aGVyIGVsc2UgcHJvZ3JhbSBsb3cgYW5kIHRoZW4gaGlnaAogCSAqLwogCWlmIChibG9jayAmIDB4MzAwMDAwMDEpIHsKLQkJUE1fU09GVF9SU1RfUkVHICY9IH4oYmxvY2sgJiBQTV9TT0ZUX1JTVF9SRUdfTUFTSyk7CisJCXJlZyAmPSB+KGJsb2NrICYgUE1fU09GVF9SU1RfUkVHX01BU0spOwogCX0gZWxzZSB7Ci0JCVBNX1NPRlRfUlNUX1JFRyAmPSB+KGJsb2NrICYgUE1fU09GVF9SU1RfUkVHX01BU0spOwotCQlQTV9TT0ZUX1JTVF9SRUcgfD0gKGJsb2NrICYgUE1fU09GVF9SU1RfUkVHX01BU0spOworCQlyZWcgJj0gfihibG9jayAmIFBNX1NPRlRfUlNUX1JFR19NQVNLKTsKKwkJcmVnIHw9IChibG9jayAmIFBNX1NPRlRfUlNUX1JFR19NQVNLKTsKIAl9CisKKwlfX3Jhd193cml0ZWwocmVnLCBQTV9TT0ZUX1JTVF9SRUcpOwogfQogCiB2b2lkIGNuczN4eHhfcHdyX3NvZnRfcnN0KHVuc2lnbmVkIGludCBibG9jaykKQEAgLTczLDEyICs4NywxMyBAQAogICovCiBpbnQgY25zM3h4eF9jcHVfY2xvY2sodm9pZCkKIHsKKwl1MzIgcmVnID0gX19yYXdfcmVhZGwoUE1fQ0xLX0NUUkxfUkVHKTsKIAlpbnQgY3B1OwogCWludCBjcHVfc2VsOwogCWludCBkaXZfc2VsOwogCi0JY3B1X3NlbCA9IChQTV9DTEtfQ1RSTF9SRUcgPj4gUE1fQ0xLX0NUUkxfUkVHX09GRlNFVF9QTExfQ1BVX1NFTCkgJiAweGY7Ci0JZGl2X3NlbCA9IChQTV9DTEtfQ1RSTF9SRUcgPj4gUE1fQ0xLX0NUUkxfUkVHX09GRlNFVF9DUFVfQ0xLX0RJVikgJiAweDM7CisJY3B1X3NlbCA9IChyZWcgPj4gUE1fQ0xLX0NUUkxfUkVHX09GRlNFVF9QTExfQ1BVX1NFTCkgJiAweGY7CisJZGl2X3NlbCA9IChyZWcgPj4gUE1fQ0xLX0NUUkxfUkVHX09GRlNFVF9DUFVfQ0xLX0RJVikgJiAweDM7CiAKIAljcHUgPSAoMzAwICsgKChjcHVfc2VsIC8gMykgKiAxMDApICsgKChjcHVfc2VsICUgMykgKiAzMykpID4+IGRpdl9zZWw7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kYTg1MC1ldm0uYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kYTg1MC1ldm0uYwppbmRleCAyZWMzMDk1Li5iMjgwZWZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZGE4NTAtZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRhODUwLWV2bS5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL3RwczY1MDd4Lmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3RwczY1MDd4Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQvdHBzNjUwN3gtdHMuaD4KIApAQCAtNDY5LDYgKzQ3MCwxMSBAQAogCX0sCiB9OwogCisvKiBXZSB0YWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IGJvdGggZGVmZGNkY3syLDN9IGFyZSB0aWVkIGhpZ2ggKi8KK3N0YXRpYyBzdHJ1Y3QgdHBzNjUwN3hfcmVnX3BsYXRmb3JtX2RhdGEgdHBzNjUwN3hfcGxhdGZvcm1fZGF0YSA9IHsKKwkuZGVmZGNkY19kZWZhdWx0ID0gdHJ1ZSwKK307CisKIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHRwczY1MDcwX3JlZ3VsYXRvcl9kYXRhW10gPSB7CiAJLyogZGNkYzEgKi8KIAl7CkBAIC00OTQsNiArNTAwLDcgQEAKIAkJfSwKIAkJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUodHBzNjUwNzBfZGNkYzJfY29uc3VtZXJzKSwKIAkJLmNvbnN1bWVyX3N1cHBsaWVzID0gdHBzNjUwNzBfZGNkYzJfY29uc3VtZXJzLAorCQkuZHJpdmVyX2RhdGEgPSAmdHBzNjUwN3hfcGxhdGZvcm1fZGF0YSwKIAl9LAogCiAJLyogZGNkYzMgKi8KQEAgLTUwNyw2ICs1MTQsNyBAQAogCQl9LAogCQkubnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gQVJSQVlfU0laRSh0cHM2NTA3MF9kY2RjM19jb25zdW1lcnMpLAogCQkuY29uc3VtZXJfc3VwcGxpZXMgPSB0cHM2NTA3MF9kY2RjM19jb25zdW1lcnMsCisJCS5kcml2ZXJfZGF0YSA9ICZ0cHM2NTA3eF9wbGF0Zm9ybV9kYXRhLAogCX0sCiAKIAkvKiBsZG8xICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCBhOTFlZGZiLi4yMmViOTdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTQ4LDE5ICs0OCwxNiBAQAogICogYmVsb3cgMTI4TQogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLV9fYXJjaF9hZGp1c3Rfem9uZXMoaW50IG5vZGUsIHVuc2lnbmVkIGxvbmcgKnNpemUsIHVuc2lnbmVkIGxvbmcgKmhvbGVzKQorX19hcmNoX2FkanVzdF96b25lcyh1bnNpZ25lZCBsb25nICpzaXplLCB1bnNpZ25lZCBsb25nICpob2xlcykKIHsKIAl1bnNpZ25lZCBpbnQgc3ogPSAoMTI4PDwyMCkgPj4gUEFHRV9TSElGVDsKIAotCWlmIChub2RlICE9IDApCi0JCXN6ID0gMDsKLQogCXNpemVbMV0gPSBzaXplWzBdIC0gc3o7CiAJc2l6ZVswXSA9IHN6OwogfQogCi0jZGVmaW5lIGFyY2hfYWRqdXN0X3pvbmVzKG5vZGUsIHpvbmVfc2l6ZSwgaG9sZXMpIFwKLSAgICAgICAgaWYgKChtZW1pbmZvLmJhbmtbMF0uc2l6ZSA+PiAyMCkgPiAxMjgpIF9fYXJjaF9hZGp1c3Rfem9uZXMobm9kZSwgem9uZV9zaXplLCBob2xlcykKKyNkZWZpbmUgYXJjaF9hZGp1c3Rfem9uZXMoem9uZV9zaXplLCBob2xlcykgXAorICAgICAgICBpZiAoKG1lbWluZm8uYmFua1swXS5zaXplID4+IDIwKSA+IDEyOCkgX19hcmNoX2FkanVzdF96b25lcyh6b25lX3NpemUsIGhvbGVzKQogCiAjZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xECShQSFlTX09GRlNFVCArICgxMjg8PDIwKSAtIDEpCiAjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJKFBBR0VfT0ZGU0VUICsgKDEyODw8MjApKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kb3ZlL2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1kb3ZlL2NvbW1vbi5jCmluZGV4IDVkYTJjZjQuLmY3YTEyNTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZG92ZS9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLWRvdmUvY29tbW9uLmMKQEAgLTc1Miw2ICs3NTIsNjcgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRvdmVfeG9yMTFfY2hhbm5lbCk7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU0RJTworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdTY0IHNkaW9fZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZG92ZV9zZGlvMF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IERPVkVfU0RJTzBfUEhZU19CQVNFLAorCQkuZW5kCT0gRE9WRV9TRElPMF9QSFlTX0JBU0UgKyAweGZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydAk9IElSUV9ET1ZFX1NESU8wLAorCQkuZW5kCT0gSVJRX0RPVkVfU0RJTzAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkb3ZlX3NkaW8wID0geworCS5uYW1lCQk9ICJzZGhjaS1tdiIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5kbWFfbWFzawkJPSAmc2Rpb19kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCX0sCisJLnJlc291cmNlCT0gZG92ZV9zZGlvMF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGRvdmVfc2RpbzBfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGRvdmVfc2RpbzBfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG92ZV9zZGlvMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZG92ZV9zZGlvMV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IERPVkVfU0RJTzFfUEhZU19CQVNFLAorCQkuZW5kCT0gRE9WRV9TRElPMV9QSFlTX0JBU0UgKyAweGZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydAk9IElSUV9ET1ZFX1NESU8xLAorCQkuZW5kCT0gSVJRX0RPVkVfU0RJTzEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkb3ZlX3NkaW8xID0geworCS5uYW1lCQk9ICJzZGhjaS1tdiIsCisJLmlkCQk9IDEsCisJLmRldgkJPSB7CisJCS5kbWFfbWFzawkJPSAmc2Rpb19kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCX0sCisJLnJlc291cmNlCT0gZG92ZV9zZGlvMV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGRvdmVfc2RpbzFfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGRvdmVfc2RpbzFfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG92ZV9zZGlvMSk7Cit9CisKIHZvaWQgX19pbml0IGRvdmVfaW5pdCh2b2lkKQogewogCWludCB0Y2xrOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kb3ZlL2NvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1kb3ZlL2NvbW1vbi5oCmluZGV4IGIyOWU4OTMuLmE1MTUxN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZG92ZS9jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLWRvdmUvY29tbW9uLmgKQEAgLTM2LDUgKzM2LDcgQEAKIHZvaWQgZG92ZV9zcGkwX2luaXQodm9pZCk7CiB2b2lkIGRvdmVfc3BpMV9pbml0KHZvaWQpOwogdm9pZCBkb3ZlX2kyY19pbml0KHZvaWQpOwordm9pZCBkb3ZlX3NkaW8wX2luaXQodm9pZCk7Cit2b2lkIGRvdmVfc2RpbzFfaW5pdCh2b2lkKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRvdmUvZG92ZS1kYi1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1kb3ZlL2RvdmUtZGItc2V0dXAuYwppbmRleCBmMjk3MWI3Li5iZWY3MDQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRvdmUvZG92ZS1kYi1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZG92ZS9kb3ZlLWRiLXNldHVwLmMKQEAgLTgyLDYgKzgyLDggQEAKIAlkb3ZlX2VoY2kwX2luaXQoKTsKIAlkb3ZlX2VoY2kxX2luaXQoKTsKIAlkb3ZlX3NhdGFfaW5pdCgmZG92ZV9kYl9zYXRhX2RhdGEpOworCWRvdmVfc2RpbzBfaW5pdCgpOworCWRvdmVfc2RpbzFfaW5pdCgpOwogCWRvdmVfc3BpMF9pbml0KCk7CiAJZG92ZV9zcGkxX2luaXQoKTsKIAlkb3ZlX3VhcnQwX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Fkc3NwaGVyZS5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvYWRzc3BoZXJlLmMKaW5kZXggM2ExYTg1NS4uZjc0NGY2NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvYWRzc3BoZXJlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvYWRzc3BoZXJlLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIApAQCAtMjEsMjYgKzIwLDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAKIAotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgYWRzc3BoZXJlX2ZsYXNoX2RhdGEgPSB7Ci0JLndpZHRoCQk9IDQsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGFkc3NwaGVyZV9mbGFzaF9yZXNvdXJjZSA9IHsKLQkuc3RhcnQJCT0gRVA5M1hYX0NTNl9QSFlTX0JBU0UsCi0JLmVuZAkJPSBFUDkzWFhfQ1M2X1BIWVNfQkFTRSArIFNaXzMyTSAtIDEsCi0JLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYWRzc3BoZXJlX2ZsYXNoID0gewotCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmYWRzc3BoZXJlX2ZsYXNoX2RhdGEsCi0JfSwKLQkubnVtX3Jlc291cmNlcwk9IDEsCi0JLnJlc291cmNlCT0gJmFkc3NwaGVyZV9mbGFzaF9yZXNvdXJjZSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgZXA5M3h4X2V0aF9kYXRhIF9faW5pdGRhdGEgYWRzc3BoZXJlX2V0aF9kYXRhID0gewogCS5waHlfaWQJCT0gMSwKIH07CkBAIC00OCw4ICsyNyw3IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgYWRzc3BoZXJlX2luaXRfbWFjaGluZSh2b2lkKQogewogCWVwOTN4eF9pbml0X2RldmljZXMoKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmFkc3NwaGVyZV9mbGFzaCk7Ci0KKwllcDkzeHhfcmVnaXN0ZXJfZmxhc2goNCwgRVA5M1hYX0NTNl9QSFlTX0JBU0UsIFNaXzMyTSk7CiAJZXA5M3h4X3JlZ2lzdGVyX2V0aCgmYWRzc3BoZXJlX2V0aF9kYXRhLCAxKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKaW5kZXggZTI5YmRlZi4uN2YzMDM5NzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJSU5JVF9DSyhOVUxMLAkJCSJwbGwxIiwJCSZjbGtfcGxsMSksCiAJSU5JVF9DSyhOVUxMLAkJCSJmY2xrIiwJCSZjbGtfZiksCiAJSU5JVF9DSyhOVUxMLAkJCSJoY2xrIiwJCSZjbGtfaCksCi0JSU5JVF9DSyhOVUxMLAkJCSJwY2xrIiwJCSZjbGtfcCksCisJSU5JVF9DSyhOVUxMLAkJCSJhcGJfcGNsayIsCSZjbGtfcCksCiAJSU5JVF9DSyhOVUxMLAkJCSJwbGwyIiwJCSZjbGtfcGxsMiksCiAJSU5JVF9DSygiZXA5M3h4LW9oY2kiLAkJTlVMTCwJCSZjbGtfdXNiX2hvc3QpLAogCUlOSVRfQ0soImVwOTN4eC1rZXlwYWQiLAlOVUxMLAkJJmNsa19rZXlwYWQpLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCmluZGV4IDkwOTI2NzcuLjhlMzdhMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC90ZXJtaW9zLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWdwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CkBAIC0yMTUsOCArMjE2LDggQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3lzY29uX3N3bG9jaywgZmxhZ3MpOwogCiAJdmFsID0gX19yYXdfcmVhZGwoRVA5M1hYX1NZU0NPTl9ERVZDRkcpOwotCXZhbCB8PSBzZXRfYml0czsKIAl2YWwgJj0gfmNsZWFyX2JpdHM7CisJdmFsIHw9IHNldF9iaXRzOwogCV9fcmF3X3dyaXRlbCgweGFhLCBFUDkzWFhfU1lTQ09OX1NXTE9DSyk7CiAJX19yYXdfd3JpdGVsKHZhbCwgRVA5M1hYX1NZU0NPTl9ERVZDRkcpOwogCkBAIC0zNDgsNiArMzQ5LDQzIEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVQOTN4eCBwaHlzbWFwJ2VkIGZsYXNoCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGVwOTN4eF9mbGFzaF9kYXRhOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGVwOTN4eF9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlcDkzeHhfZmxhc2ggPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZlcDkzeHhfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmZXA5M3h4X2ZsYXNoX3Jlc291cmNlLAorfTsKKworLyoqCisgKiBlcDkzeHhfcmVnaXN0ZXJfZmxhc2goKSAtIFJlZ2lzdGVyIHRoZSBleHRlcm5hbCBmbGFzaCBkZXZpY2UuCisgKiBAd2lkdGg6CWJhbmsgd2lkdGggaW4gb2N0ZXRzCisgKiBAc3RhcnQ6CXJlc291cmNlIHN0YXJ0IGFkZHJlc3MKKyAqIEBzaXplOglyZXNvdXJjZSBzaXplCisgKi8KK3ZvaWQgX19pbml0IGVwOTN4eF9yZWdpc3Rlcl9mbGFzaCh1bnNpZ25lZCBpbnQgd2lkdGgsCisJCQkJICByZXNvdXJjZV9zaXplX3Qgc3RhcnQsIHJlc291cmNlX3NpemVfdCBzaXplKQoreworCWVwOTN4eF9mbGFzaF9kYXRhLndpZHRoCQk9IHdpZHRoOworCisJZXA5M3h4X2ZsYXNoX3Jlc291cmNlLnN0YXJ0CT0gc3RhcnQ7CisJZXA5M3h4X2ZsYXNoX3Jlc291cmNlLmVuZAk9IHN0YXJ0ICsgc2l6ZSAtIDE7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVwOTN4eF9mbGFzaCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEVQOTN4eCBldGhlcm5ldCBwZXJpcGhlcmFsIGhhbmRsaW5nCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBzdHJ1Y3QgZXA5M3h4X2V0aF9kYXRhIGVwOTN4eF9ldGhfZGF0YTsKQEAgLTYyMCw2ICs2NTgsMTEgQEAKIAkucmVzb3VyY2UJCT0gZXA5M3h4X2ZiX3Jlc291cmNlLAogfTsKIAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXA5M3h4X2JsX2RldmljZSA9IHsKKwkubmFtZQkJPSAiZXA5M3h4LWJsIiwKKwkuaWQJCT0gLTEsCit9OworCiAvKioKICAqIGVwOTN4eF9yZWdpc3Rlcl9mYiAtIFJlZ2lzdGVyIHRoZSBmcmFtZWJ1ZmZlciBwbGF0Zm9ybSBkZXZpY2UuCiAgKiBAZGF0YToJcGxhdGZvcm0gc3BlY2lmaWMgZnJhbWVidWZmZXIgY29uZmlndXJhdGlvbiAoX19pbml0ZGF0YSkKQEAgLTYyOCw2ICs2NzEsNyBAQAogewogCWVwOTN4eGZiX2RhdGEgPSAqZGF0YTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVwOTN4eF9mYl9kZXZpY2UpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZXA5M3h4X2JsX2RldmljZSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTN4eC5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTN4eC5jCmluZGV4IDM4ODQxODIuLmMyY2U5MDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzeHguYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5M3h4LmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWdwaW8uaD4KQEAgLTM4LDM5ICszNywxMyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KIAogCi1zdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBlZGI5M3h4X2ZsYXNoX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZWRiOTN4eF9mbGFzaF9yZXNvdXJjZSA9IHsKLQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlZGI5M3h4X2ZsYXNoID0gewotCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmZWRiOTN4eF9mbGFzaF9kYXRhLAotCX0sCi0JLm51bV9yZXNvdXJjZXMJPSAxLAotCS5yZXNvdXJjZQk9ICZlZGI5M3h4X2ZsYXNoX3Jlc291cmNlLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IF9fZWRiOTN4eF9yZWdpc3Rlcl9mbGFzaCh1bnNpZ25lZCBpbnQgd2lkdGgsCi0JCQlyZXNvdXJjZV9zaXplX3Qgc3RhcnQsIHJlc291cmNlX3NpemVfdCBzaXplKQotewotCWVkYjkzeHhfZmxhc2hfZGF0YS53aWR0aAk9IHdpZHRoOwotCWVkYjkzeHhfZmxhc2hfcmVzb3VyY2Uuc3RhcnQJPSBzdGFydDsKLQllZGI5M3h4X2ZsYXNoX3Jlc291cmNlLmVuZAk9IHN0YXJ0ICsgc2l6ZSAtIDE7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVkYjkzeHhfZmxhc2gpOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgZWRiOTN4eF9yZWdpc3Rlcl9mbGFzaCh2b2lkKQogewogCWlmIChtYWNoaW5lX2lzX2VkYjkzMDcoKSB8fCBtYWNoaW5lX2lzX2VkYjkzMTIoKSB8fAogCSAgICBtYWNoaW5lX2lzX2VkYjkzMTUoKSkgewotCQlfX2VkYjkzeHhfcmVnaXN0ZXJfZmxhc2goNCwgRVA5M1hYX0NTNl9QSFlTX0JBU0UsIFNaXzMyTSk7CisJCWVwOTN4eF9yZWdpc3Rlcl9mbGFzaCg0LCBFUDkzWFhfQ1M2X1BIWVNfQkFTRSwgU1pfMzJNKTsKIAl9IGVsc2UgewotCQlfX2VkYjkzeHhfcmVnaXN0ZXJfZmxhc2goMiwgRVA5M1hYX0NTNl9QSFlTX0JBU0UsIFNaXzE2TSk7CisJCWVwOTN4eF9yZWdpc3Rlcl9mbGFzaCgyLCBFUDkzWFhfQ1M2X1BIWVNfQkFTRSwgU1pfMTZNKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dlc2JjOTMxMi5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZ2VzYmM5MzEyLmMKaW5kZXggYTgwOTYxOC4uZDk3MTY4YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZ2VzYmM5MzEyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZ2VzYmM5MzEyLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIApAQCAtMjEsMjYgKzIwLDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAKIAotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZ2VzYmM5MzEyX2ZsYXNoX2RhdGEgPSB7Ci0JLndpZHRoCQk9IDQsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGdlc2JjOTMxMl9mbGFzaF9yZXNvdXJjZSA9IHsKLQkuc3RhcnQJCT0gRVA5M1hYX0NTNl9QSFlTX0JBU0UsCi0JLmVuZAkJPSBFUDkzWFhfQ1M2X1BIWVNfQkFTRSArIFNaXzhNIC0gMSwKLQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBnZXNiYzkzMTJfZmxhc2ggPSB7Ci0JLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZnZXNiYzkzMTJfZmxhc2hfZGF0YSwKLQl9LAotCS5udW1fcmVzb3VyY2VzCT0gMSwKLQkucmVzb3VyY2UJPSAmZ2VzYmM5MzEyX2ZsYXNoX3Jlc291cmNlLAotfTsKLQogc3RhdGljIHN0cnVjdCBlcDkzeHhfZXRoX2RhdGEgX19pbml0ZGF0YSBnZXNiYzkzMTJfZXRoX2RhdGEgPSB7CiAJLnBoeV9pZAkJPSAxLAogfTsKQEAgLTQ4LDggKzI3LDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBnZXNiYzkzMTJfaW5pdF9tYWNoaW5lKHZvaWQpCiB7CiAJZXA5M3h4X2luaXRfZGV2aWNlcygpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZ2VzYmM5MzEyX2ZsYXNoKTsKLQorCWVwOTN4eF9yZWdpc3Rlcl9mbGFzaCg0LCBFUDkzWFhfQ1M2X1BIWVNfQkFTRSwgU1pfOE0pOwogCWVwOTN4eF9yZWdpc3Rlcl9ldGgoJmdlc2JjOTMxMl9ldGhfZGF0YSwgMCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKaW5kZXggOWE0NDEzZC4uYTZjMDkxNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKQEAgLTQzLDYgKzQzLDkgQEAKIAogdW5zaWduZWQgaW50IGVwOTN4eF9jaGlwX3JldmlzaW9uKHZvaWQpOwogCit2b2lkIGVwOTN4eF9yZWdpc3Rlcl9mbGFzaCh1bnNpZ25lZCBpbnQgd2lkdGgsCisJCQkgICByZXNvdXJjZV9zaXplX3Qgc3RhcnQsIHJlc291cmNlX3NpemVfdCBzaXplKTsKKwogdm9pZCBlcDkzeHhfcmVnaXN0ZXJfZXRoKHN0cnVjdCBlcDkzeHhfZXRoX2RhdGEgKmRhdGEsIGludCBjb3B5X2FkZHIpOwogdm9pZCBlcDkzeHhfcmVnaXN0ZXJfaTJjKHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhICpkYXRhLAogCQkJIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG51bSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L21pY3JvOS5jCmluZGV4IDFjYzkxMWIuLjJiYTc3NjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L21pY3JvOS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L21pY3JvOS5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTMxLDMxICszMCw2IEBACiAgKiBNaWNybzktTGl0ZSB1c2VzIGEgc2VwYXJhdGUgTVREIG1hcCBkcml2ZXIgZm9yIGZsYXNoIHN1cHBvcnQKICAqIE1pY3JvOS1TbGltIGhhcyB1cCB0byA2NE1CIG9mIGVpdGhlciAzMi1iaXQgb3IgMTYtYml0IGZsYXNoIG9uIENTMQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBtaWNybzlfZmxhc2hfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtaWNybzlfZmxhc2hfcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0CQk9IEVQOTNYWF9DUzFfUEhZU19CQVNFLAotCS5lbmQJCT0gRVA5M1hYX0NTMV9QSFlTX0JBU0UgKyBTWl82NE0gLSAxLAotCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1pY3JvOV9mbGFzaCA9IHsKLQkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJm1pY3JvOV9mbGFzaF9kYXRhLAotCX0sCi0JLm51bV9yZXNvdXJjZXMJPSAxLAotCS5yZXNvdXJjZQk9ICZtaWNybzlfZmxhc2hfcmVzb3VyY2UsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgX19taWNybzlfcmVnaXN0ZXJfZmxhc2godW5zaWduZWQgaW50IHdpZHRoKQotewotCW1pY3JvOV9mbGFzaF9kYXRhLndpZHRoID0gd2lkdGg7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm1pY3JvOV9mbGFzaCk7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IG1pY3JvOV9kZXRlY3RfYm9vdHdpZHRoKHZvaWQpCiB7CiAJdTMyIHY7CkBAIC03MCwxMCArNDQsMTcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG1pY3JvOV9yZWdpc3Rlcl9mbGFzaCh2b2lkKQogeworCXVuc2lnbmVkIGludCB3aWR0aDsKKwogCWlmIChtYWNoaW5lX2lzX21pY3JvOSgpKQotCQlfX21pY3JvOV9yZWdpc3Rlcl9mbGFzaCg0KTsKKwkJd2lkdGggPSA0OwogCWVsc2UgaWYgKG1hY2hpbmVfaXNfbWljcm85bSgpIHx8IG1hY2hpbmVfaXNfbWljcm85cygpKQotCQlfX21pY3JvOV9yZWdpc3Rlcl9mbGFzaChtaWNybzlfZGV0ZWN0X2Jvb3R3aWR0aCgpKTsKKwkJd2lkdGggPSBtaWNybzlfZGV0ZWN0X2Jvb3R3aWR0aCgpOworCWVsc2UKKwkJd2lkdGggPSAwOworCisJaWYgKHdpZHRoKQorCQllcDkzeHhfcmVnaXN0ZXJfZmxhc2god2lkdGgsIEVQOTNYWF9DUzFfUEhZU19CQVNFLCBTWl82NE0pOwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L3NpbW9uZS5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvc2ltb25lLmMKaW5kZXggMzg4YWVjOS4uNWRkZWQ1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvc2ltb25lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvc2ltb25lLmMKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWdwaW8uaD4KQEAgLTI5LDI2ICsyOCw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHNpbW9uZV9mbGFzaF9kYXRhID0gewotCS53aWR0aAkJPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaW1vbmVfZmxhc2hfcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0CQk9IEVQOTNYWF9DUzZfUEhZU19CQVNFLAotCS5lbmQJCT0gRVA5M1hYX0NTNl9QSFlTX0JBU0UgKyBTWl84TSAtIDEsCi0JLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2ltb25lX2ZsYXNoID0gewotCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKLQkuaWQJCT0gMCwKLQkubnVtX3Jlc291cmNlcwk9IDEsCi0JLnJlc291cmNlCT0gJnNpbW9uZV9mbGFzaF9yZXNvdXJjZSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZzaW1vbmVfZmxhc2hfZGF0YSwKLQl9LAotfTsKLQogc3RhdGljIHN0cnVjdCBlcDkzeHhfZXRoX2RhdGEgX19pbml0ZGF0YSBzaW1vbmVfZXRoX2RhdGEgPSB7CiAJLnBoeV9pZAkJPSAxLAogfTsKQEAgLTc3LDggKzU2LDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBzaW1vbmVfaW5pdF9tYWNoaW5lKHZvaWQpCiB7CiAJZXA5M3h4X2luaXRfZGV2aWNlcygpOwotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzaW1vbmVfZmxhc2gpOworCWVwOTN4eF9yZWdpc3Rlcl9mbGFzaCgyLCBFUDkzWFhfQ1M2X1BIWVNfQkFTRSwgU1pfOE0pOwogCWVwOTN4eF9yZWdpc3Rlcl9ldGgoJnNpbW9uZV9ldGhfZGF0YSwgMSk7CiAJZXA5M3h4X3JlZ2lzdGVyX2ZiKCZzaW1vbmVfZmJfaW5mbyk7CiAJZXA5M3h4X3JlZ2lzdGVyX2kyYygmc2ltb25lX2kyY19ncGlvX2RhdGEsIHNpbW9uZV9pMmNfYm9hcmRfaW5mbywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L3RzNzJ4eC5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvdHM3Mnh4LmMKaW5kZXggYWU3MzE5ZS4uOTNhZWFiOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvdHM3Mnh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvdHM3Mnh4LmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L200OHQ4Ni5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogCkBAIC0xNzMsMzEgKzE3MiwxMyBAQAogfTsKIAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogTk9SIGZsYXNoIChUUy03MjAwIG9ubHkpCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHRzNzJ4eF9ub3JfZGF0YSA9IHsKLQkud2lkdGgJCT0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdHM3Mnh4X25vcl9yZXNvdXJjZSA9IHsKLQkuc3RhcnQJCT0gRVA5M1hYX0NTNl9QSFlTX0JBU0UsCi0JLmVuZAkJPSBFUDkzWFhfQ1M2X1BIWVNfQkFTRSArIFNaXzE2TSAtIDEsCi0JLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdHM3Mnh4X25vcl9mbGFzaCA9IHsKLQkubmFtZQkJCT0gInBoeXNtYXAtZmxhc2giLAotCS5pZAkJCT0gMCwKLQkuZGV2LnBsYXRmb3JtX2RhdGEJPSAmdHM3Mnh4X25vcl9kYXRhLAotCS5yZXNvdXJjZQkJPSAmdHM3Mnh4X25vcl9yZXNvdXJjZSwKLQkubnVtX3Jlc291cmNlcwkJPSAxLAotfTsKLQogc3RhdGljIHZvaWQgX19pbml0IHRzNzJ4eF9yZWdpc3Rlcl9mbGFzaCh2b2lkKQogeworCS8qCisJICogVFM3MjAwIGhhcyBOT1IgZmxhc2ggYWxsIG90aGVyIFRTNzJ4eCBib2FyZCBoYXZlIE5BTkQgZmxhc2guCisJICovCiAJaWYgKGJvYXJkX2lzX3RzNzIwMCgpKSB7Ci0JCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdHM3Mnh4X25vcl9mbGFzaCk7CisJCWVwOTN4eF9yZWdpc3Rlcl9mbGFzaCgyLCBFUDkzWFhfQ1M2X1BIWVNfQkFTRSwgU1pfMTZNKTsKIAl9IGVsc2UgewogCQlyZXNvdXJjZV9zaXplX3Qgc3RhcnQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9jb21tb24uYwppbmRleCBlM2JjM2Y2Li44OGIzZGQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2NvbW1vbi5jCkBAIC0yMzIsNyArMjMyLDcgQEAKIAogdW5zaWduZWQgbG9uZyBfX3Bmbl90b19idXModW5zaWduZWQgbG9uZyBwZm4pCiB7Ci0JcmV0dXJuIF9fcGZuX3RvX3BoeXMocGZuKSArIChmYl9idXNfc2RyYW1fb2Zmc2V0KCkgLSBQSFlTX09GRlNFVCkpOworCXJldHVybiBfX3Bmbl90b19waHlzKHBmbikgKyAoZmJfYnVzX3NkcmFtX29mZnNldCgpIC0gUEhZU19PRkZTRVQpOwogfQogRVhQT1JUX1NZTUJPTChfX3Bmbl90b19idXMpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWg3MjB4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1oNzIweC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCBhOWVlOGYwLi4yN2NhZmQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWg3MjB4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtaDcyMHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTExLDggKzExLDEwIEBACiAgKgogKi8KIAotCQkuZXF1ICAgIGlvX3ZpcnQsIElPX0JBU0UKLQkJLmVxdSAgICBpb19waHlzLCBJT19TVEFSVAorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworCQkuZXF1ICAgIGlvX3ZpcnQsIElPX1ZJUlQKKwkJLmVxdSAgICBpb19waHlzLCBJT19QSFlTCiAKIAkJLm1hY3JvICBhZGRydWFydCwgcngsIHRtcAogCQltcmMgICAgIHAxNSwgMCwgXHJ4LCBjMSwgYzAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWlteC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YzAzNjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9LY29uZmlnCkBAIC0wLDAgKzEsMTkzIEBACitjb25maWcgSU1YX0hBVkVfRE1BX1YxCisJYm9vbAorCitpZiBBUkNIX01YMQorCitjb25maWcgU09DX0lNWDEKKwlzZWxlY3QgQ1BVX0FSTTkyMFQKKwlzZWxlY3QgSU1YX0hBVkVfRE1BX1YxCisJc2VsZWN0IElNWF9IQVZFX0lPTVVYX1YxCisJYm9vbAorCitjb21tZW50ICJNWDEgcGxhdGZvcm1zOiIKK2NvbmZpZyBNQUNIX01YTEFEUworCWJvb2wKKworY29uZmlnIEFSQ0hfTVgxQURTCisJYm9vbCAiTVgxQURTIHBsYXRmb3JtIgorCXNlbGVjdCBNQUNIX01YTEFEUworCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfSTJDCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9VQVJUCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIE1vdG9yb2xhIE1YMUFEUy9NWExBRFMgYm9hcmRzCisKK2NvbmZpZyBNQUNIX1NDQjkzMjgKKwlib29sICJTeW5lcnRyb25peHggc2NiOTMyOCIKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgYSBTeW5lcnRyb25peHggc2NiOTMyOCBib2FyZAorCitlbmRpZgorCitpZiBBUkNIX01YMgorCitjb25maWcgU09DX0lNWDIxCisJc2VsZWN0IENQVV9BUk05MjZUCisJc2VsZWN0IEFSQ0hfTVhDX0FVRE1VWF9WMQorCXNlbGVjdCBJTVhfSEFWRV9ETUFfVjEKKwlzZWxlY3QgSU1YX0hBVkVfSU9NVVhfVjEKKwlib29sCisKK2NvbmZpZyBTT0NfSU1YMjcKKwlzZWxlY3QgQ1BVX0FSTTkyNlQKKwlzZWxlY3QgQVJDSF9NWENfQVVETVVYX1YxCisJc2VsZWN0IElNWF9IQVZFX0RNQV9WMQorCXNlbGVjdCBJTVhfSEFWRV9JT01VWF9WMQorCWJvb2wKKworY2hvaWNlCisJcHJvbXB0ICJDUFVzOiIKKwlkZWZhdWx0IE1BQ0hfTVgyMQorCitjb25maWcgTUFDSF9NWDIxCisJYm9vbCAiaS5NWDIxIHN1cHBvcnQiCisJc2VsZWN0IFNPQ19JTVgyMQorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBGcmVlc2NhbGUncyBNWDIgYmFzZWQgaS5NWDIxIHByb2Nlc3Nvci4KKworY29uZmlnIE1BQ0hfTVgyNworCWJvb2wgImkuTVgyNyBzdXBwb3J0IgorCXNlbGVjdCBTT0NfSU1YMjcKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgRnJlZXNjYWxlJ3MgTVgyIGJhc2VkIGkuTVgyNyBwcm9jZXNzb3IuCisKK2VuZGNob2ljZQorCitlbmRpZgorCitpZiBNQUNIX01YMjEKKworY29tbWVudCAiTVgyMSBwbGF0Zm9ybXM6IgorCitjb25maWcgTUFDSF9NWDIxQURTCisJYm9vbCAiTVgyMUFEUyBwbGF0Zm9ybSIKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX05BTkQKKwloZWxwCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIE1YMjFBRFMgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMgc3BlY2lmaWMKKwkgIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYm9hcmQgYW5kIGl0cyBwZXJpcGhlcmFscy4KKworZW5kaWYKKworaWYgTUFDSF9NWDI3CisKK2NvbW1lbnQgIk1YMjcgcGxhdGZvcm1zOiIKKworY29uZmlnIE1BQ0hfTVgyN0FEUworCWJvb2wgIk1YMjdBRFMgcGxhdGZvcm0iCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9JMkMKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX05BTkQKKwloZWxwCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIE1YMjdBRFMgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMgc3BlY2lmaWMKKwkgIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYm9hcmQgYW5kIGl0cyBwZXJpcGhlcmFscy4KKworY29uZmlnIE1BQ0hfUENNMDM4CisJYm9vbCAiUGh5dGVjIHBoeUNPUkUtaS5NWDI3IENQVSBtb2R1bGUgKHBjbTAzOCkiCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9JMkMKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX05BTkQKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fU1BJX0lNWAorCXNlbGVjdCBNWENfVUxQSSBpZiBVU0JfVUxQSQorCWhlbHAKKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgcGh5Q09SRS1pLk1YMjcgKGFrYSBwY20wMzgpIHBsYXRmb3JtLiBUaGlzCisJICBpbmNsdWRlcyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBmb3IgdGhlIG1vZHVsZSBhbmQgaXRzIHBlcmlwaGVyYWxzLgorCitjaG9pY2UKKwlwcm9tcHQgIkJhc2Vib2FyZCIKKwlkZXBlbmRzIG9uIE1BQ0hfUENNMDM4CisJZGVmYXVsdCBNQUNIX1BDTTk3MF9CQVNFQk9BUkQKKworY29uZmlnIE1BQ0hfUENNOTcwX0JBU0VCT0FSRAorCXByb21wdCAiUEhZVEVDIFBDTTk3MCBkZXZlbG9wbWVudCBib2FyZCIKKwlib29sCisJaGVscAorCSAgVGhpcyBhZGRzIGJvYXJkIHNwZWNpZmljIGRldmljZXMgdGhhdCBjYW4gYmUgZm91bmQgb24gUGh5dGVjJ3MKKwkgIFBDTTk3MCBldmFsdWF0aW9uIGJvYXJkLgorCitlbmRjaG9pY2UKKworY29uZmlnIE1BQ0hfQ1BVSU1YMjcKKwlib29sICJFdWtyZWEgQ1BVSU1YMjcgbW9kdWxlIgorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfSTJDCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9VQVJUCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX01YQ19OQU5ECisJaGVscAorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBFdWtyZWEgQ1BVSU1YMjcgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMKKwkgIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgbW9kdWxlIGFuZCBpdHMgcGVyaXBoZXJhbHMuCisKK2NvbmZpZyBNQUNIX0VVS1JFQV9DUFVJTVgyN19VU0VTREhDMgorCWJvb2wgIkNQVUlNWDI3IGludGVncmF0ZXMgU0RIQzIgbW9kdWxlIgorCWRlcGVuZHMgb24gTUFDSF9DUFVJTVgyNworCWhlbHAKKwkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgaW50ZXJuYWwgU0RIQzIgdXNlZCBvbiBDUFVJTVgyNworCSAgZm9yIHdpZmkgb3IgZU1NQy4KKworY29uZmlnIE1BQ0hfRVVLUkVBX0NQVUlNWDI3X1VTRVVBUlQ0CisJYm9vbCAiQ1BVSU1YMjcgaW50ZWdyYXRlcyBVQVJUNCBtb2R1bGUiCisJZGVwZW5kcyBvbiBNQUNIX0NQVUlNWDI3CisJaGVscAorCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHRoZSBpbnRlcm5hbCBVQVJUNCB1c2VkIG9uIENQVUlNWDI3CisJICBmb3IgYmx1ZXRvb3RoLgorCitjaG9pY2UKKwlwcm9tcHQgIkJhc2Vib2FyZCIKKwlkZXBlbmRzIG9uIE1BQ0hfQ1BVSU1YMjcKKwlkZWZhdWx0IE1BQ0hfRVVLUkVBX01CSU1YMjdfQkFTRUJPQVJECisKK2NvbmZpZyBNQUNIX0VVS1JFQV9NQklNWDI3X0JBU0VCT0FSRAorCXByb21wdCAiRXVrcmVhIE1CSU1YMjcgZGV2ZWxvcG1lbnQgYm9hcmQiCisJYm9vbAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfVUFSVAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9TUElfSU1YCisJaGVscAorCSAgVGhpcyBhZGRzIGJvYXJkIHNwZWNpZmljIGRldmljZXMgdGhhdCBjYW4gYmUgZm91bmQgb24gRXVrcmVhJ3MKKwkgIE1CSU1YMjcgZXZhbHVhdGlvbiBib2FyZC4KKworZW5kY2hvaWNlCisKK2NvbmZpZyBNQUNIX01YMjdfM0RTCisJYm9vbCAiTVgyN1BESyBwbGF0Zm9ybSIKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKKwloZWxwCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIE1YMjdQREsgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMgc3BlY2lmaWMKKwkgIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYm9hcmQgYW5kIGl0cyBwZXJpcGhlcmFscy4KKworY29uZmlnIE1BQ0hfSU1YMjdMSVRFCisJYm9vbCAiTG9naWNQRCBNWDI3IExJVEVLSVQgcGxhdGZvcm0iCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9VQVJUCisJaGVscAorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBNWDI3IExJVEVLSVQgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMgc3BlY2lmaWMKKwkgIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYm9hcmQgYW5kIGl0cyBwZXJpcGhlcmFscy4KKworY29uZmlnIE1BQ0hfUENBMTAwCisJYm9vbCAiUGh5dGVjIHBoeUNBUkQtcyAocGNhMTAwKSIKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX0kyQworCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfVUFSVAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfTkFORAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9TUElfSU1YCisJc2VsZWN0IE1YQ19VTFBJIGlmIFVTQl9VTFBJCisJaGVscAorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBwaHlDQVJELXMgKGFrYSBwY2ExMDApIHBsYXRmb3JtLiBUaGlzCisJICBpbmNsdWRlcyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBmb3IgdGhlIG1vZHVsZSBhbmQgaXRzIHBlcmlwaGVyYWxzLgorCitjb25maWcgTUFDSF9NWFRfVEQ2MAorCWJvb2wgIk1heHRyYWNrIGktTVhUIFRENjAiCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9JMkMKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX05BTkQKKwloZWxwCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIGktTVhUIChha2EgdGQ2MCkgcGxhdGZvcm0uIFRoaXMKKwkgIGluY2x1ZGVzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgbW9kdWxlIGFuZCBpdHMgcGVyaXBoZXJhbHMuCisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtaW14L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YTlmZGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9NYWtlZmlsZQpAQCAtMCwwICsxLDMzIEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgorIworCisjIE9iamVjdCBmaWxlIGxpc3RzLgorCitvYmoteQk6PSAgZGV2aWNlcy5vCisKK29iai0kKENPTkZJR19JTVhfSEFWRV9ETUFfVjEpICs9IGRtYS12MS5vCisKK29iai0kKENPTkZJR19BUkNIX01YMSkgKz0gY2xvY2staW14MS5vIG1tLWlteDEubworb2JqLSQoQ09ORklHX01BQ0hfTVgyMSkgKz0gY2xvY2staW14MjEubyBtbS1pbXgyMS5vCisKK29iai0kKENPTkZJR19NQUNIX01YMjcpICs9IGNwdS1pbXgyNy5vIHBtLWlteDI3Lm8KK29iai0kKENPTkZJR19NQUNIX01YMjcpICs9IGNsb2NrLWlteDI3Lm8gbW0taW14MjcubworCisjIFN1cHBvcnQgZm9yIENNT1Mgc2Vuc29yIGludGVyZmFjZQorb2JqLSQoQ09ORklHX01YMV9WSURFTykJKz0gbXgxLWNhbWVyYS1maXEubyBteDEtY2FtZXJhLWZpcS1rc3ltLm8KKworb2JqLSQoQ09ORklHX0FSQ0hfTVgxQURTKSArPSBtYWNoLW14MWFkcy5vCitvYmotJChDT05GSUdfTUFDSF9TQ0I5MzI4KSArPSBtYWNoLXNjYjkzMjgubworCitvYmotJChDT05GSUdfTUFDSF9NWDIxQURTKSArPSBtYWNoLW14MjFhZHMubworCitvYmotJChDT05GSUdfTUFDSF9NWDI3QURTKSArPSBtYWNoLW14MjdhZHMubworb2JqLSQoQ09ORklHX01BQ0hfUENNMDM4KSArPSBtYWNoLXBjbTAzOC5vCitvYmotJChDT05GSUdfTUFDSF9QQ005NzBfQkFTRUJPQVJEKSArPSBwY205NzAtYmFzZWJvYXJkLm8KK29iai0kKENPTkZJR19NQUNIX01YMjdfM0RTKSArPSBtYWNoLW14MjdfM2RzLm8KK29iai0kKENPTkZJR19NQUNIX0lNWDI3TElURSkgKz0gbWFjaC1pbXgyN2xpdGUubworb2JqLSQoQ09ORklHX01BQ0hfQ1BVSU1YMjcpICs9IG1hY2gtY3B1aW14Mjcubworb2JqLSQoQ09ORklHX01BQ0hfRVVLUkVBX01CSU1YMjdfQkFTRUJPQVJEKSArPSBldWtyZWFfbWJpbXgyNy1iYXNlYm9hcmQubworb2JqLSQoQ09ORklHX01BQ0hfUENBMTAwKSArPSBtYWNoLXBjYTEwMC5vCitvYmotJChDT05GSUdfTUFDSF9NWFRfVEQ2MCkgKz0gbWFjaC1teHRfdGQ2MC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1pbXgvTWFrZWZpbGUuYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTg4YTg1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvTWFrZWZpbGUuYm9vdApAQCAtMCwwICsxLDExIEBACit6cmVsYWRkci0kKENPTkZJR19BUkNIX01YMSkJOj0gMHgwODAwODAwMAorcGFyYW1zX3BoeXMtJChDT05GSUdfQVJDSF9NWDEpCTo9IDB4MDgwMDAxMDAKK2luaXRyZF9waHlzLSQoQ09ORklHX0FSQ0hfTVgxKQk6PSAweDA4ODAwMDAwCisKK3pyZWxhZGRyLSQoQ09ORklHX01BQ0hfTVgyMSkJOj0gMHhDMDAwODAwMAorcGFyYW1zX3BoeXMtJChDT05GSUdfTUFDSF9NWDIxKQk6PSAweEMwMDAwMTAwCitpbml0cmRfcGh5cy0kKENPTkZJR19NQUNIX01YMjEpCTo9IDB4QzA4MDAwMDAKKworenJlbGFkZHItJChDT05GSUdfTUFDSF9NWDI3KQk6PSAweEEwMDA4MDAwCitwYXJhbXNfcGh5cy0kKENPTkZJR19NQUNIX01YMjcpCTo9IDB4QTAwMDAxMDAKK2luaXRyZF9waHlzLSQoQ09ORklHX01BQ0hfTVgyNykJOj0gMHhBMDgwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xvY2staW14MS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xvY2staW14MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNTA5NmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9jbG9jay1pbXgxLmMKQEAgLTAsMCArMSw2MzYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4sIFBlbmd1dHJvbml4CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorCisjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorCisjZGVmaW5lIElPX0FERFJfQ0NNKG9mZikJKE1YMV9JT19BRERSRVNTKE1YMV9DQ01fQkFTRV9BRERSICsgKG9mZikpKQorCisvKiBDQ00gcmVnaXN0ZXIgYWRkcmVzc2VzICovCisjZGVmaW5lIENDTV9DU0NSCUlPX0FERFJfQ0NNKDB4MCkKKyNkZWZpbmUgQ0NNX01QQ1RMMAlJT19BRERSX0NDTSgweDQpCisjZGVmaW5lIENDTV9TUENUTDAJSU9fQUREUl9DQ00oMHhjKQorI2RlZmluZSBDQ01fUENEUglJT19BRERSX0NDTSgweDIwKQorCisjZGVmaW5lIENDTV9DU0NSX0NMS09fT0ZGU0VUCTI5CisjZGVmaW5lIENDTV9DU0NSX0NMS09fTUFTSwkoMHg3IDw8IDI5KQorI2RlZmluZSBDQ01fQ1NDUl9VU0JfT0ZGU0VUCTI2CisjZGVmaW5lIENDTV9DU0NSX1VTQl9NQVNLCSgweDcgPDwgMjYpCisjZGVmaW5lIENDTV9DU0NSX09TQ19FTl9TSElGVAkxNworI2RlZmluZSBDQ01fQ1NDUl9TWVNURU1fU0VMCSgxIDw8IDE2KQorI2RlZmluZSBDQ01fQ1NDUl9CQ0xLX09GRlNFVAkxMAorI2RlZmluZSBDQ01fQ1NDUl9CQ0xLX01BU0sJKDB4ZiA8PCAxMCkKKyNkZWZpbmUgQ0NNX0NTQ1JfUFJFU0MJCSgxIDw8IDE1KQorCisjZGVmaW5lIENDTV9QQ0RSX1BDTEszX09GRlNFVAkxNgorI2RlZmluZSBDQ01fUENEUl9QQ0xLM19NQVNLCSgweDdmIDw8IDE2KQorI2RlZmluZSBDQ01fUENEUl9QQ0xLMl9PRkZTRVQJNAorI2RlZmluZSBDQ01fUENEUl9QQ0xLMl9NQVNLCSgweGYgPDwgNCkKKyNkZWZpbmUgQ0NNX1BDRFJfUENMSzFfT0ZGU0VUCTAKKyNkZWZpbmUgQ0NNX1BDRFJfUENMSzFfTUFTSwkweGYKKworI2RlZmluZSBJT19BRERSX1NDTShvZmYpCShNWDFfSU9fQUREUkVTUyhNWDFfU0NNX0JBU0VfQUREUiArIChvZmYpKSkKKworLyogU0NNIHJlZ2lzdGVyIGFkZHJlc3NlcyAqLworI2RlZmluZSBTQ01fR0NDUglJT19BRERSX1NDTSgweGMpCisKKyNkZWZpbmUgU0NNX0dDQ1JfRE1BX0NMS19FTl9PRkZTRVQJMworI2RlZmluZSBTQ01fR0NDUl9DU0lfQ0xLX0VOX09GRlNFVAkyCisjZGVmaW5lIFNDTV9HQ0NSX01NQV9DTEtfRU5fT0ZGU0VUCTEKKyNkZWZpbmUgU0NNX0dDQ1JfVVNCRF9DTEtfRU5fT0ZGU0VUCTAKKworc3RhdGljIGludCBfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJcmVnIHw9IDEgPDwgY2xrLT5lbmFibGVfc2hpZnQ7CisJX19yYXdfd3JpdGVsKHJlZywgY2xrLT5lbmFibGVfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCXJlZyAmPSB+KDEgPDwgY2xrLT5lbmFibGVfc2hpZnQpOworCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7Cit9CisKK3N0YXRpYyBpbnQgX2Nsa19jYW5fdXNlX3BhcmVudChjb25zdCBzdHJ1Y3QgY2xrICpjbGtfYXJyW10sIHVuc2lnbmVkIGludCBzaXplLAorCQkJICAgICAgIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJCWlmIChwYXJlbnQgPT0gY2xrX2FycltpXSkKKwkJCXJldHVybiBpOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nCitfY2xrX3NpbXBsZV9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlLCB1bnNpZ25lZCBpbnQgbGltaXQpCit7CisJaW50IGRpdjsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJZGl2ID0gcGFyZW50X3JhdGUgLyByYXRlOworCWlmIChwYXJlbnRfcmF0ZSAlIHJhdGUpCisJCWRpdisrOworCisJaWYgKGRpdiA+IGxpbWl0KQorCQlkaXYgPSBsaW1pdDsKKworCXJldHVybiBwYXJlbnRfcmF0ZSAvIGRpdjsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19wYXJlbnRfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnJvdW5kX3JhdGUoY2xrLT5wYXJlbnQsIHJhdGUpOworfQorCitzdGF0aWMgaW50IF9jbGtfcGFyZW50X3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXJldHVybiBjbGstPnBhcmVudC0+c2V0X3JhdGUoY2xrLT5wYXJlbnQsIHJhdGUpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGsxNm1fZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiAxNjAwMDAwMDsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgY2xrMTZtID0geworCS5nZXRfcmF0ZSA9IGNsazE2bV9nZXRfcmF0ZSwKKwkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJLmVuYWJsZV9yZWcgPSBDQ01fQ1NDUiwKKwkuZW5hYmxlX3NoaWZ0ID0gQ0NNX0NTQ1JfT1NDX0VOX1NISUZULAorCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorfTsKKworLyogaW4gSHogKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsazMyX3JhdGU7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsazMyX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrMzJfcmF0ZTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgY2xrMzIgPSB7CisJLmdldF9yYXRlID0gY2xrMzJfZ2V0X3JhdGUsCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGszMl9wcmVtdWx0X2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAqIDUxMjsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgY2xrMzJfcHJlbXVsdCA9IHsKKwkucGFyZW50ID0gJmNsazMyLAorCS5nZXRfcmF0ZSA9IGNsazMyX3ByZW11bHRfZ2V0X3JhdGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsayAqcHJlbV9jbGtfY2xvY2tzW10gPSB7CisJJmNsazMyX3ByZW11bHQsCisJJmNsazE2bSwKK307CisKK3N0YXRpYyBpbnQgcHJlbV9jbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgcmVnID0gX19yYXdfcmVhZGwoQ0NNX0NTQ1IpOworCisJaSA9IF9jbGtfY2FuX3VzZV9wYXJlbnQocHJlbV9jbGtfY2xvY2tzLCBBUlJBWV9TSVpFKHByZW1fY2xrX2Nsb2NrcyksCisJCQkJcGFyZW50KTsKKworCXN3aXRjaCAoaSkgeworCWNhc2UgMDoKKwkJcmVnICY9IH5DQ01fQ1NDUl9TWVNURU1fU0VMOworCQlicmVhazsKKwljYXNlIDE6CisJCXJlZyB8PSBDQ01fQ1NDUl9TWVNURU1fU0VMOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gaTsKKwl9CisKKwlfX3Jhd193cml0ZWwocmVnLCBDQ01fQ1NDUik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgcHJlbV9jbGsgPSB7CisJLnNldF9wYXJlbnQgPSBwcmVtX2Nsa19zZXRfcGFyZW50LAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc3lzdGVtX2Nsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIG14Y19kZWNvZGVfcGxsKF9fcmF3X3JlYWRsKENDTV9TUENUTDApLAorCQkJICAgICAgY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHN5c3RlbV9jbGsgPSB7CisJLnBhcmVudCA9ICZwcmVtX2NsaywKKwkuZ2V0X3JhdGUgPSBzeXN0ZW1fY2xrX2dldF9yYXRlLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWN1X2Nsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIG14Y19kZWNvZGVfcGxsKF9fcmF3X3JlYWRsKENDTV9NUENUTDApLAorCQkJICAgICAgY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jdV9jbGsgPSB7CisJLnBhcmVudCA9ICZjbGszMl9wcmVtdWx0LAorCS5nZXRfcmF0ZSA9IG1jdV9jbGtfZ2V0X3JhdGUsCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBmY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGZjbGsgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJaWYgKF9fcmF3X3JlYWRsKENDTV9DU0NSKSAmIENDTV9DU0NSX1BSRVNDKQorCQlmY2xrIC89IDI7CisKKwlyZXR1cm4gZmNsazsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgZmNsayA9IHsKKwkucGFyZW50ID0gJm1jdV9jbGssCisJLmdldF9yYXRlID0gZmNsa19nZXRfcmF0ZSwKK307CisKKy8qCisgKiAgZ2V0IGhjbGsgKCBTRFJBTSwgQ1NJLCBNZW1vcnkgU3RpY2ssIEkyQywgRE1BICkKKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgaGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAoKChfX3Jhd19yZWFkbChDQ01fQ1NDUikgJgorCQkJQ0NNX0NTQ1JfQkNMS19NQVNLKSA+PiBDQ01fQ1NDUl9CQ0xLX09GRlNFVCkgKyAxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgaGNsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXJldHVybiBfY2xrX3NpbXBsZV9yb3VuZF9yYXRlKGNsaywgcmF0ZSwgMTYpOworfQorCitzdGF0aWMgaW50IGhjbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdW5zaWduZWQgaW50IGRpdjsKKwl1bnNpZ25lZCBpbnQgcmVnOworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CisKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlkaXYgPSBwYXJlbnRfcmF0ZSAvIHJhdGU7CisKKwlpZiAoZGl2ID4gMTYgfHwgZGl2IDwgMSB8fCAoKHBhcmVudF9yYXRlIC8gZGl2KSAhPSByYXRlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkaXYtLTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9DU0NSKTsKKwlyZWcgJj0gfkNDTV9DU0NSX0JDTEtfTUFTSzsKKwlyZWcgfD0gZGl2IDw8IENDTV9DU0NSX0JDTEtfT0ZGU0VUOworCV9fcmF3X3dyaXRlbChyZWcsIENDTV9DU0NSKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNsayBoY2xrID0geworCS5wYXJlbnQgPSAmc3lzdGVtX2NsaywKKwkuZ2V0X3JhdGUgPSBoY2xrX2dldF9yYXRlLAorCS5yb3VuZF9yYXRlID0gaGNsa19yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9IGhjbGtfc2V0X3JhdGUsCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGs0OG1fZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gKCgoX19yYXdfcmVhZGwoQ0NNX0NTQ1IpICYKKwkJCUNDTV9DU0NSX1VTQl9NQVNLKSA+PiBDQ01fQ1NDUl9VU0JfT0ZGU0VUKSArIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGs0OG1fcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlyZXR1cm4gX2Nsa19zaW1wbGVfcm91bmRfcmF0ZShjbGssIHJhdGUsIDgpOworfQorCitzdGF0aWMgaW50IGNsazQ4bV9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBpbnQgZGl2OworCXVuc2lnbmVkIGludCByZWc7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKKworCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKKworCWlmIChkaXYgPiA4IHx8IGRpdiA8IDEgfHwgKChwYXJlbnRfcmF0ZSAvIGRpdikgIT0gcmF0ZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJZGl2LS07CisKKwlyZWcgPSBfX3Jhd19yZWFkbChDQ01fQ1NDUik7CisJcmVnICY9IH5DQ01fQ1NDUl9VU0JfTUFTSzsKKwlyZWcgfD0gZGl2IDw8IENDTV9DU0NSX1VTQl9PRkZTRVQ7CisJX19yYXdfd3JpdGVsKHJlZywgQ0NNX0NTQ1IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsazQ4bSA9IHsKKwkucGFyZW50ID0gJnN5c3RlbV9jbGssCisJLmdldF9yYXRlID0gY2xrNDhtX2dldF9yYXRlLAorCS5yb3VuZF9yYXRlID0gY2xrNDhtX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gY2xrNDhtX3NldF9yYXRlLAorfTsKKworLyoKKyAqICBnZXQgcGVyaXBoZXJhbCBjbG9jayAxICggVUFSVFsxMl0sIFRpbWVyWzEyXSwgUFdNICkKKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGVyY2xrMV9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAoKChfX3Jhd19yZWFkbChDQ01fUENEUikgJgorCQkJQ0NNX1BDRFJfUENMSzFfTUFTSykgPj4gQ0NNX1BDRFJfUENMSzFfT0ZGU0VUKSArIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwZXJjbGsxX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJcmV0dXJuIF9jbGtfc2ltcGxlX3JvdW5kX3JhdGUoY2xrLCByYXRlLCAxNik7Cit9CisKK3N0YXRpYyBpbnQgcGVyY2xrMV9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBpbnQgZGl2OworCXVuc2lnbmVkIGludCByZWc7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKKworCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKKworCWlmIChkaXYgPiAxNiB8fCBkaXYgPCAxIHx8ICgocGFyZW50X3JhdGUgLyBkaXYpICE9IHJhdGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRpdi0tOworCisJcmVnID0gX19yYXdfcmVhZGwoQ0NNX1BDRFIpOworCXJlZyAmPSB+Q0NNX1BDRFJfUENMSzFfTUFTSzsKKwlyZWcgfD0gZGl2IDw8IENDTV9QQ0RSX1BDTEsxX09GRlNFVDsKKwlfX3Jhd193cml0ZWwocmVnLCBDQ01fUENEUik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICBnZXQgcGVyaXBoZXJhbCBjbG9jayAyICggTENELCBTRCwgU1BJWzEyXSApCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBlcmNsazJfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gKCgoX19yYXdfcmVhZGwoQ0NNX1BDRFIpICYKKwkJCUNDTV9QQ0RSX1BDTEsyX01BU0spID4+IENDTV9QQ0RSX1BDTEsyX09GRlNFVCkgKyAxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGVyY2xrMl9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXJldHVybiBfY2xrX3NpbXBsZV9yb3VuZF9yYXRlKGNsaywgcmF0ZSwgMTYpOworfQorCitzdGF0aWMgaW50IHBlcmNsazJfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdW5zaWduZWQgaW50IGRpdjsKKwl1bnNpZ25lZCBpbnQgcmVnOworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CisKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlkaXYgPSBwYXJlbnRfcmF0ZSAvIHJhdGU7CisKKwlpZiAoZGl2ID4gMTYgfHwgZGl2IDwgMSB8fCAoKHBhcmVudF9yYXRlIC8gZGl2KSAhPSByYXRlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkaXYtLTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9QQ0RSKTsKKwlyZWcgJj0gfkNDTV9QQ0RSX1BDTEsyX01BU0s7CisJcmVnIHw9IGRpdiA8PCBDQ01fUENEUl9QQ0xLMl9PRkZTRVQ7CisJX19yYXdfd3JpdGVsKHJlZywgQ0NNX1BDRFIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAgZ2V0IHBlcmlwaGVyYWwgY2xvY2sgMyAoIFNTSSApCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBlcmNsazNfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gKCgoX19yYXdfcmVhZGwoQ0NNX1BDRFIpICYKKwkJCUNDTV9QQ0RSX1BDTEszX01BU0spID4+IENDTV9QQ0RSX1BDTEszX09GRlNFVCkgKyAxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGVyY2xrM19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXJldHVybiBfY2xrX3NpbXBsZV9yb3VuZF9yYXRlKGNsaywgcmF0ZSwgMTI4KTsKK30KKworc3RhdGljIGludCBwZXJjbGszX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXVuc2lnbmVkIGludCBkaXY7CisJdW5zaWduZWQgaW50IHJlZzsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJZGl2ID0gcGFyZW50X3JhdGUgLyByYXRlOworCisJaWYgKGRpdiA+IDEyOCB8fCBkaXYgPCAxIHx8ICgocGFyZW50X3JhdGUgLyBkaXYpICE9IHJhdGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRpdi0tOworCisJcmVnID0gX19yYXdfcmVhZGwoQ0NNX1BDRFIpOworCXJlZyAmPSB+Q0NNX1BDRFJfUENMSzNfTUFTSzsKKwlyZWcgfD0gZGl2IDw8IENDTV9QQ0RSX1BDTEszX09GRlNFVDsKKwlfX3Jhd193cml0ZWwocmVnLCBDQ01fUENEUik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgcGVyY2xrW10gPSB7CisJeworCQkuaWQgPSAwLAorCQkucGFyZW50ID0gJnN5c3RlbV9jbGssCisJCS5nZXRfcmF0ZSA9IHBlcmNsazFfZ2V0X3JhdGUsCisJCS5yb3VuZF9yYXRlID0gcGVyY2xrMV9yb3VuZF9yYXRlLAorCQkuc2V0X3JhdGUgPSBwZXJjbGsxX3NldF9yYXRlLAorCX0sIHsKKwkJLmlkID0gMSwKKwkJLnBhcmVudCA9ICZzeXN0ZW1fY2xrLAorCQkuZ2V0X3JhdGUgPSBwZXJjbGsyX2dldF9yYXRlLAorCQkucm91bmRfcmF0ZSA9IHBlcmNsazJfcm91bmRfcmF0ZSwKKwkJLnNldF9yYXRlID0gcGVyY2xrMl9zZXRfcmF0ZSwKKwl9LCB7CisJCS5pZCA9IDIsCisJCS5wYXJlbnQgPSAmc3lzdGVtX2NsaywKKwkJLmdldF9yYXRlID0gcGVyY2xrM19nZXRfcmF0ZSwKKwkJLnJvdW5kX3JhdGUgPSBwZXJjbGszX3JvdW5kX3JhdGUsCisJCS5zZXRfcmF0ZSA9IHBlcmNsazNfc2V0X3JhdGUsCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGsgKmNsa29fY2xvY2tzW10gPSB7CisJJnBlcmNsa1swXSwKKwkmaGNsaywKKwkmY2xrNDhtLAorCSZjbGsxNm0sCisJJnByZW1fY2xrLAorCSZmY2xrLAorfTsKKworc3RhdGljIGludCBjbGtvX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJaW50IGk7CisJdW5zaWduZWQgaW50IHJlZzsKKworCWkgPSBfY2xrX2Nhbl91c2VfcGFyZW50KGNsa29fY2xvY2tzLCBBUlJBWV9TSVpFKGNsa29fY2xvY2tzKSwgcGFyZW50KTsKKwlpZiAoaSA8IDApCisJCXJldHVybiBpOworCisJcmVnID0gX19yYXdfcmVhZGwoQ0NNX0NTQ1IpICYgfkNDTV9DU0NSX0NMS09fTUFTSzsKKwlyZWcgfD0gaSA8PCBDQ01fQ1NDUl9DTEtPX09GRlNFVDsKKwlfX3Jhd193cml0ZWwocmVnLCBDQ01fQ1NDUik7CisKKwlpZiAoY2xrb19jbG9ja3NbaV0tPnNldF9yYXRlICYmIGNsa29fY2xvY2tzW2ldLT5yb3VuZF9yYXRlKSB7CisJCWNsay0+c2V0X3JhdGUgPSBfY2xrX3BhcmVudF9zZXRfcmF0ZTsKKwkJY2xrLT5yb3VuZF9yYXRlID0gX2Nsa19wYXJlbnRfcm91bmRfcmF0ZTsKKwl9IGVsc2UgeworCQljbGstPnNldF9yYXRlID0gTlVMTDsKKwkJY2xrLT5yb3VuZF9yYXRlID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgY2xrb19jbGsgPSB7CisJLnNldF9wYXJlbnQgPSBjbGtvX3NldF9wYXJlbnQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkbWFfY2xrID0geworCS5wYXJlbnQgPSAmaGNsaywKKwkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCisJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCS5lbmFibGVfcmVnID0gU0NNX0dDQ1IsCisJLmVuYWJsZV9zaGlmdCA9IFNDTV9HQ0NSX0RNQV9DTEtfRU5fT0ZGU0VULAorCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY3NpX2NsayA9IHsKKwkucGFyZW50ID0gJmhjbGssCisJLnJvdW5kX3JhdGUgPSBfY2xrX3BhcmVudF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9IF9jbGtfcGFyZW50X3NldF9yYXRlLAorCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkuZW5hYmxlX3JlZyA9IFNDTV9HQ0NSLAorCS5lbmFibGVfc2hpZnQgPSBTQ01fR0NDUl9DU0lfQ0xLX0VOX09GRlNFVCwKKwkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tYV9jbGsgPSB7CisJLnBhcmVudCA9ICZoY2xrLAorCS5yb3VuZF9yYXRlID0gX2Nsa19wYXJlbnRfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSBfY2xrX3BhcmVudF9zZXRfcmF0ZSwKKwkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJLmVuYWJsZV9yZWcgPSBTQ01fR0NDUiwKKwkuZW5hYmxlX3NoaWZ0ID0gU0NNX0dDQ1JfTU1BX0NMS19FTl9PRkZTRVQsCisJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2JkX2NsayA9IHsKKwkucGFyZW50ID0gJmNsazQ4bSwKKwkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCisJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCS5lbmFibGVfcmVnID0gU0NNX0dDQ1IsCisJLmVuYWJsZV9zaGlmdCA9IFNDTV9HQ0NSX1VTQkRfQ0xLX0VOX09GRlNFVCwKKwkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdF9jbGsgPSB7CisJLnBhcmVudCA9ICZwZXJjbGtbMF0sCisJLnJvdW5kX3JhdGUgPSBfY2xrX3BhcmVudF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9IF9jbGtfcGFyZW50X3NldF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydF9jbGsgPSB7CisJLnBhcmVudCA9ICZwZXJjbGtbMF0sCisJLnJvdW5kX3JhdGUgPSBfY2xrX3BhcmVudF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9IF9jbGtfcGFyZW50X3NldF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjX2NsayA9IHsKKwkucGFyZW50ID0gJmhjbGssCisJLnJvdW5kX3JhdGUgPSBfY2xrX3BhcmVudF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9IF9jbGtfcGFyZW50X3NldF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3BpX2NsayA9IHsKKwkucGFyZW50ID0gJnBlcmNsa1sxXSwKKwkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzZGhjX2NsayA9IHsKKwkucGFyZW50ID0gJnBlcmNsa1sxXSwKKwkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBsY2RjX2NsayA9IHsKKwkucGFyZW50ID0gJnBlcmNsa1sxXSwKKwkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtc2hjX2NsayA9IHsKKwkucGFyZW50ID0gJmhjbGssCisJLnJvdW5kX3JhdGUgPSBfY2xrX3BhcmVudF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9IF9jbGtfcGFyZW50X3NldF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3NpX2NsayA9IHsKKwkucGFyZW50ID0gJnBlcmNsa1syXSwKKwkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBydGNfY2xrID0geworCS5wYXJlbnQgPSAmY2xrMzIsCit9OworCisjZGVmaW5lIF9SRUdJU1RFUl9DTE9DSyhkLCBuLCBjKSBcCisJeyBcCisJCS5kZXZfaWQgPSBkLCBcCisJCS5jb25faWQgPSBuLCBcCisJCS5jbGsgPSAmYywgXAorCX0sCitzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdIF9faW5pdGRhdGEgPSB7CisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJkbWEiLCBkbWFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXgxLWNhbWVyYS4wIiwgTlVMTCwgY3NpX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIm1tYSIsIG1tYV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXhfdWRjLjAiLCBOVUxMLCB1c2JkX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwdCIsIGdwdF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4wIiwgTlVMTCwgdWFydF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4xIiwgTlVMTCwgdWFydF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4yIiwgTlVMTCwgdWFydF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjAiLCBOVUxMLCBpMmNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygic3BpX2lteC4wIiwgTlVMTCwgc3BpX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1tbWMuMCIsIE5VTEwsIHNkaGNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LWZiLjAiLCBOVUxMLCBsY2RjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIm1zaGMiLCBtc2hjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNzaSIsIHNzaV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGNfcnRjLjAiLCBOVUxMLCBydGNfY2xrKQorfTsKKworaW50IF9faW5pdCBteDFfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwkvKiBkaXNhYmxlIGNsb2NrcyB3ZSBhcmUgYWJsZSB0byAqLworCV9fcmF3X3dyaXRlbCgwLCBTQ01fR0NDUik7CisKKwljbGszMl9yYXRlID0gZnJlZjsKKwlyZWcgPSBfX3Jhd19yZWFkbChDQ01fQ1NDUik7CisKKwkvKiBkZXRlY3QgY2xvY2sgcmVmZXJlbmNlIGZvciBzeXN0ZW0gUExMICovCisJaWYgKHJlZyAmIENDTV9DU0NSX1NZU1RFTV9TRUwpIHsKKwkJcHJlbV9jbGsucGFyZW50ID0gJmNsazE2bTsKKwl9IGVsc2UgeworCQkvKiBlbnN1cmUgdGhhdCBvc2NpbGxhdG9yIGlzIGRpc2FibGVkICovCisJCXJlZyAmPSB+KDEgPDwgQ0NNX0NTQ1JfT1NDX0VOX1NISUZUKTsKKwkJX19yYXdfd3JpdGVsKHJlZywgQ0NNX0NTQ1IpOworCQlwcmVtX2Nsay5wYXJlbnQgPSAmY2xrMzJfcHJlbXVsdDsKKwl9CisKKwkvKiBkZXRlY3QgcmVmZXJlbmNlIGZvciBDTEtPICovCisJcmVnID0gKHJlZyAmIENDTV9DU0NSX0NMS09fTUFTSykgPj4gQ0NNX0NTQ1JfQ0xLT19PRkZTRVQ7CisJY2xrb19jbGsucGFyZW50ID0gKHN0cnVjdCBjbGsgKiljbGtvX2Nsb2Nrc1tyZWddOworCisJY2xrZGV2X2FkZF90YWJsZShsb29rdXBzLCBBUlJBWV9TSVpFKGxvb2t1cHMpKTsKKworCWNsa19lbmFibGUoJmhjbGspOworCWNsa19lbmFibGUoJmZjbGspOworCisJbXhjX3RpbWVyX2luaXQoJmdwdF9jbGssIE1YMV9JT19BRERSRVNTKE1YMV9USU0xX0JBU0VfQUREUiksCisJCQlNWDFfVElNMV9JTlQpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyMS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xvY2staW14MjEuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjEuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1pbXgvY2xvY2staW14MjEuYwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xvY2staW14MjcuYyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsb2NrLWlteDI3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWExYWExNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsb2NrLWlteDI3LmMKQEAgLTAsMCArMSw3NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOCBKdWVyZ2VuIEJlaXNlcnQsIGtlcm5lbEBwZW5ndXRyb25peC5kZQorICogQ29weXJpZ2h0IDIwMDggTWFydGluIEZ1enpleSwgbWZ1enpleUBnbWFpbC5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworI2RlZmluZSBJT19BRERSX0NDTShvZmYpCShNWDI3X0lPX0FERFJFU1MoTVgyN19DQ01fQkFTRV9BRERSICsgKG9mZikpKQorCisvKiBSZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIENDTV9DU0NSCQlJT19BRERSX0NDTSgweDApCisjZGVmaW5lIENDTV9NUENUTDAJCUlPX0FERFJfQ0NNKDB4NCkKKyNkZWZpbmUgQ0NNX01QQ1RMMQkJSU9fQUREUl9DQ00oMHg4KQorI2RlZmluZSBDQ01fU1BDVEwwCQlJT19BRERSX0NDTSgweGMpCisjZGVmaW5lIENDTV9TUENUTDEJCUlPX0FERFJfQ0NNKDB4MTApCisjZGVmaW5lIENDTV9PU0MyNk1DVEwJCUlPX0FERFJfQ0NNKDB4MTQpCisjZGVmaW5lIENDTV9QQ0RSMAkJSU9fQUREUl9DQ00oMHgxOCkKKyNkZWZpbmUgQ0NNX1BDRFIxCQlJT19BRERSX0NDTSgweDFjKQorI2RlZmluZSBDQ01fUENDUjAJCUlPX0FERFJfQ0NNKDB4MjApCisjZGVmaW5lIENDTV9QQ0NSMQkJSU9fQUREUl9DQ00oMHgyNCkKKyNkZWZpbmUgQ0NNX0NDU1IJCUlPX0FERFJfQ0NNKDB4MjgpCisjZGVmaW5lIENDTV9QTUNUTAkJSU9fQUREUl9DQ00oMHgyYykKKyNkZWZpbmUgQ0NNX1BNQ09VTlQJCUlPX0FERFJfQ0NNKDB4MzApCisjZGVmaW5lIENDTV9XS0dEQ1RMCQlJT19BRERSX0NDTSgweDM0KQorCisjZGVmaW5lIENDTV9DU0NSX1VQREFURV9ESVMJKDEgPDwgMzEpCisjZGVmaW5lIENDTV9DU0NSX1NTSTIJCSgxIDw8IDIzKQorI2RlZmluZSBDQ01fQ1NDUl9TU0kxCQkoMSA8PCAyMikKKyNkZWZpbmUgQ0NNX0NTQ1JfVlBVCQkoMSA8PCAyMSkKKyNkZWZpbmUgQ0NNX0NTQ1JfTVNIQyAgICAgICAgICAgKDEgPDwgMjApCisjZGVmaW5lIENDTV9DU0NSX1NQTExSRVMgICAgICAgICgxIDw8IDE5KQorI2RlZmluZSBDQ01fQ1NDUl9NUExMUkVTICAgICAgICAoMSA8PCAxOCkKKyNkZWZpbmUgQ0NNX0NTQ1JfU1AgICAgICAgICAgICAgKDEgPDwgMTcpCisjZGVmaW5lIENDTV9DU0NSX01DVSAgICAgICAgICAgICgxIDw8IDE2KQorI2RlZmluZSBDQ01fQ1NDUl9PU0MyNk1ESVYgICAgICAoMSA8PCA0KQorI2RlZmluZSBDQ01fQ1NDUl9PU0MyNk0gICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBDQ01fQ1NDUl9GUE0gICAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBDQ01fQ1NDUl9TUEVOICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBDQ01fQ1NDUl9NUEVOICAgICAgICAgICAoMSA8PCAwKQorCisvKiBpLk1YMjcgVE8gMisgKi8KKyNkZWZpbmUgQ0NNX0NTQ1JfQVJNX1NSQyAgICAgICAgKDEgPDwgMTUpCisKKyNkZWZpbmUgQ0NNX1NQQ1RMMV9MRiAgICAgICAgICAgKDEgPDwgMTUpCisjZGVmaW5lIENDTV9TUENUTDFfQlJNTyAgICAgICAgICgxIDw8IDYpCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1wbGxfbWFpbjFfY2xrLCBtcGxsX21haW4yX2NsazsKKworc3RhdGljIGludCBjbGtfcGNjcl9lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcmVnOworCisJaWYgKCFjbGstPmVuYWJsZV9yZWcpCisJCXJldHVybiAwOworCisJcmVnID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwlyZWcgfD0gMSA8PCBjbGstPmVuYWJsZV9zaGlmdDsKKwlfX3Jhd193cml0ZWwocmVnLCBjbGstPmVuYWJsZV9yZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNsa19wY2NyX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcmVnOworCisJaWYgKCFjbGstPmVuYWJsZV9yZWcpCisJCXJldHVybjsKKworCXJlZyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJcmVnICY9IH4oMSA8PCBjbGstPmVuYWJsZV9zaGlmdCk7CisJX19yYXdfd3JpdGVsKHJlZywgY2xrLT5lbmFibGVfcmVnKTsKK30KKworc3RhdGljIGludCBjbGtfc3BsbF9lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoQ0NNX0NTQ1IpOworCXJlZyB8PSBDQ01fQ1NDUl9TUEVOOworCV9fcmF3X3dyaXRlbChyZWcsIENDTV9DU0NSKTsKKworCXdoaWxlICghKF9fcmF3X3JlYWRsKENDTV9TUENUTDEpICYgQ0NNX1NQQ1RMMV9MRikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNsa19zcGxsX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoQ0NNX0NTQ1IpOworCXJlZyAmPSB+Q0NNX0NTQ1JfU1BFTjsKKwlfX3Jhd193cml0ZWwocmVnLCBDQ01fQ1NDUik7Cit9CisKK3N0YXRpYyBpbnQgY2xrX2NwdV9zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQoreworCWludCBjc2NyID0gX19yYXdfcmVhZGwoQ0NNX0NTQ1IpOworCisJaWYgKGNsay0+cGFyZW50ID09IHBhcmVudCkKKwkJcmV0dXJuIDA7CisKKwlpZiAobXgyN19yZXZpc2lvbigpID49IENISVBfUkVWXzJfMCkgeworCQlpZiAocGFyZW50ID09ICZtcGxsX21haW4xX2NsaykgeworCQkJY3NjciB8PSBDQ01fQ1NDUl9BUk1fU1JDOworCQl9IGVsc2UgeworCQkJaWYgKHBhcmVudCA9PSAmbXBsbF9tYWluMl9jbGspCisJCQkJY3NjciAmPSB+Q0NNX0NTQ1JfQVJNX1NSQzsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlfX3Jhd193cml0ZWwoY3NjciwgQ0NNX0NTQ1IpOworCQljbGstPnBhcmVudCA9IHBhcmVudDsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyByb3VuZF9yYXRlX2NwdShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlpbnQgZGl2OworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CisKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlkaXYgPSBwYXJlbnRfcmF0ZSAvIHJhdGU7CisJaWYgKHBhcmVudF9yYXRlICUgcmF0ZSkKKwkJZGl2Kys7CisKKwlpZiAoZGl2ID4gNCkKKwkJZGl2ID0gNDsKKworCXJldHVybiBwYXJlbnRfcmF0ZSAvIGRpdjsKK30KKworc3RhdGljIGludCBzZXRfcmF0ZV9jcHUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdW5zaWduZWQgaW50IGRpdjsKKwl1aW50MzJfdCByZWc7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKKworCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKKworCWlmIChkaXYgPiA0IHx8IGRpdiA8IDEgfHwgKChwYXJlbnRfcmF0ZSAvIGRpdikgIT0gcmF0ZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJZGl2LS07CisKKwlyZWcgPSBfX3Jhd19yZWFkbChDQ01fQ1NDUik7CisJaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApIHsKKwkJcmVnICY9IH4oMyA8PCAxMik7CisJCXJlZyB8PSBkaXYgPDwgMTI7CisJCXJlZyAmPSB+KENDTV9DU0NSX0ZQTSB8IENDTV9DU0NSX1NQRU4pOworCQlfX3Jhd193cml0ZWwocmVnIHwgQ0NNX0NTQ1JfVVBEQVRFX0RJUywgQ0NNX0NTQ1IpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3Qgc2V0IENQVSBmcmVxdWVuY3khXG4iKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcm91bmRfcmF0ZV9wZXIoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdTMyIGRpdjsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJZGl2ID0gcGFyZW50X3JhdGUgLyByYXRlOworCWlmIChwYXJlbnRfcmF0ZSAlIHJhdGUpCisJCWRpdisrOworCisJaWYgKGRpdiA+IDY0KQorCQlkaXYgPSA2NDsKKworCXJldHVybiBwYXJlbnRfcmF0ZSAvIGRpdjsKK30KKworc3RhdGljIGludCBzZXRfcmF0ZV9wZXIoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdTMyIHJlZzsKKwl1MzIgZGl2OworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CisKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlpZiAoY2xrLT5pZCA8IDAgfHwgY2xrLT5pZCA+IDMpCisJCXJldHVybiAtRUlOVkFMOworCisJZGl2ID0gcGFyZW50X3JhdGUgLyByYXRlOworCWlmIChkaXYgPiA2NCB8fCBkaXYgPCAxIHx8ICgocGFyZW50X3JhdGUgLyBkaXYpICE9IHJhdGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlkaXYtLTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9QQ0RSMSkgJiB+KDB4M2YgPDwgKGNsay0+aWQgPDwgMykpOworCXJlZyB8PSBkaXYgPDwgKGNsay0+aWQgPDwgMyk7CisJX19yYXdfd3JpdGVsKHJlZywgQ0NNX1BDRFIxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV91c2Ioc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgdXNiX3BkZjsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJdXNiX3BkZiA9IChfX3Jhd19yZWFkbChDQ01fQ1NDUikgPj4gMjgpICYgMHg3OworCisJcmV0dXJuIHBhcmVudF9yYXRlIC8gKHVzYl9wZGYgKyAxVSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX3NzaXgoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHBkZikKK3sKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApCisJCXBkZiArPSA0OyAgLyogTVgyNyBUTzIrICovCisJZWxzZQorCQlwZGYgPSAocGRmIDwgMikgPyAxMjRVTCA6IHBkZjsgIC8qIE1YMjEgJiBNWDI3IFRPMSAqLworCisJcmV0dXJuIDJVTCAqIHBhcmVudF9yYXRlIC8gcGRmOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9zc2kxKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gZ2V0X3JhdGVfc3NpeChjbGssIChfX3Jhd19yZWFkbChDQ01fUENEUjApID4+IDE2KSAmIDB4M2YpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9zc2kyKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gZ2V0X3JhdGVfc3NpeChjbGssIChfX3Jhd19yZWFkbChDQ01fUENEUjApID4+IDI2KSAmIDB4M2YpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9uZmMoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgbmZjX3BkZjsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApCisJCW5mY19wZGYgPSAoX19yYXdfcmVhZGwoQ0NNX1BDRFIwKSA+PiA2KSAmIDB4ZjsKKwllbHNlCisJCW5mY19wZGYgPSAoX19yYXdfcmVhZGwoQ0NNX1BDRFIwKSA+PiAxMikgJiAweGY7CisKKwlyZXR1cm4gcGFyZW50X3JhdGUgLyAobmZjX3BkZiArIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV92cHUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgdnB1X3BkZjsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApIHsKKwkJdnB1X3BkZiA9IChfX3Jhd19yZWFkbChDQ01fUENEUjApID4+IDEwKSAmIDB4M2Y7CisJCXZwdV9wZGYgKz0gNDsKKwl9IGVsc2UgeworCQl2cHVfcGRmID0gKF9fcmF3X3JlYWRsKENDTV9QQ0RSMCkgPj4gOCkgJiAweGY7CisJCXZwdV9wZGYgPSAodnB1X3BkZiA8IDIpID8gMTI0IDogdnB1X3BkZjsKKwl9CisKKwlyZXR1cm4gMlVMICogcGFyZW50X3JhdGUgLyB2cHVfcGRmOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyByb3VuZF9yYXRlX3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnJvdW5kX3JhdGUoY2xrLT5wYXJlbnQsIHJhdGUpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9wYXJlbnQoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworfQorCitzdGF0aWMgaW50IHNldF9yYXRlX3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnNldF9yYXRlKGNsay0+cGFyZW50LCByYXRlKTsKK30KKworLyogaW4gSHogKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGV4dGVybmFsX2hpZ2hfcmVmZXJlbmNlID0gMjYwMDAwMDA7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2hpZ2hfcmVmZXJlbmNlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gZXh0ZXJuYWxfaGlnaF9yZWZlcmVuY2U7Cit9CisKKy8qIGluIEh6ICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBleHRlcm5hbF9sb3dfcmVmZXJlbmNlID0gMzI3Njg7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2xvd19yZWZlcmVuY2Uoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBleHRlcm5hbF9sb3dfcmVmZXJlbmNlOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9mcG0oc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpICogMTAyNDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfbXBsbChzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIG14Y19kZWNvZGVfcGxsKF9fcmF3X3JlYWRsKENDTV9NUENUTDApLAorCQkJY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX21wbGxfbWFpbihzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKKworCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCS8qIGkuTVgyNyBUTzI6CisJICogY2xrLT5pZCA9PSAwOiBhcm0gY2xvY2sgc291cmNlIHBhdGggMSB3aGljaCBpcyBmcm9tIDIgKiBNUExMIC8gMgorCSAqIGNsay0+aWQgPT0gMTogYXJtIGNsb2NrIHNvdXJjZSBwYXRoIDIgd2hpY2ggaXMgZnJvbSAyICogTVBMTCAvIDMKKwkgKi8KKwlpZiAobXgyN19yZXZpc2lvbigpID49IENISVBfUkVWXzJfMCAmJiBjbGstPmlkID09IDEpCisJCXJldHVybiAyVUwgKiBwYXJlbnRfcmF0ZSAvIDNVTDsKKworCXJldHVybiBwYXJlbnRfcmF0ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfc3BsbChzdHJ1Y3QgY2xrICpjbGspCit7CisJdWludDMyX3QgcmVnOworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJcmVnID0gX19yYXdfcmVhZGwoQ0NNX1NQQ1RMMCk7CisKKwkvKiBPbiBUTzIgd2UgaGF2ZSB0byB3cml0ZSB0aGUgdmFsdWUgYmFjay4gT3RoZXJ3aXNlIHdlCisJICogcmVhZCAwIGZyb20gdGhpcyByZWdpc3RlciB0aGUgbmV4dCB0aW1lLgorCSAqLworCWlmIChteDI3X3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wKQorCQlfX3Jhd193cml0ZWwocmVnLCBDQ01fU1BDVEwwKTsKKworCXJldHVybiBteGNfZGVjb2RlX3BsbChyZWcsIHJhdGUpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9jcHUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiBkaXY7CisJdW5zaWduZWQgbG9uZyByYXRlOworCisJaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApCisJCWRpdiA9IChfX3Jhd19yZWFkbChDQ01fQ1NDUikgPj4gMTIpICYgMHgzOworCWVsc2UKKwkJZGl2ID0gKF9fcmF3X3JlYWRsKENDTV9DU0NSKSA+PiAxMykgJiAweDc7CisKKwlyYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKwlyZXR1cm4gcmF0ZSAvIChkaXYgKyAxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfYWhiKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHJhdGUsIGJjbGtfcGRmOworCisJaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApCisJCWJjbGtfcGRmID0gKF9fcmF3X3JlYWRsKENDTV9DU0NSKSA+PiA4KSAmIDB4MzsKKwllbHNlCisJCWJjbGtfcGRmID0gKF9fcmF3X3JlYWRsKENDTV9DU0NSKSA+PiA5KSAmIDB4ZjsKKworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCXJldHVybiByYXRlIC8gKGJjbGtfcGRmICsgMSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2lwZyhzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyByYXRlLCBpcGdfcGRmOworCisJaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApCisJCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCWVsc2UKKwkJaXBnX3BkZiA9IChfX3Jhd19yZWFkbChDQ01fQ1NDUikgPj4gOCkgJiAxOworCisJcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJcmV0dXJuIHJhdGUgLyAoaXBnX3BkZiArIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9wZXIoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcGVyY2xrX3BkZiwgcGFyZW50X3JhdGU7CisKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlpZiAoY2xrLT5pZCA8IDAgfHwgY2xrLT5pZCA+IDMpCisJCXJldHVybiAwOworCisJcGVyY2xrX3BkZiA9IChfX3Jhd19yZWFkbChDQ01fUENEUjEpID4+IChjbGstPmlkIDw8IDMpKSAmIDB4M2Y7CisKKwlyZXR1cm4gcGFyZW50X3JhdGUgLyAocGVyY2xrX3BkZiArIDEpOworfQorCisvKgorICogdGhlIGhpZ2ggZnJlcXVlbmN5IGV4dGVybmFsIGNsb2NrIHJlZmVyZW5jZQorICogRGVmYXVsdCBjYXNlIGlzIDI2TUh6LiBDb3VsZCBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUKKyAqIHdpdGggYSBjYWxsIHRvIGNoYW5nZV9leHRlcm5hbF9oaWdoX3JlZmVyZW5jZSgpCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGNraWhfY2xrID0geworCS5nZXRfcmF0ZQk9IGdldF9yYXRlX2hpZ2hfcmVmZXJlbmNlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbXBsbF9jbGsgPSB7CisJLnBhcmVudAkJPSAmY2tpaF9jbGssCisJLmdldF9yYXRlCT0gZ2V0X3JhdGVfbXBsbCwKK307CisKKy8qIEZvciBpLk1YMjcgVE8yLCBpdCBpcyB0aGUgTVBMTCBwYXRoIDEgb2YgQVJNIGNvcmUKKyAqIEl0IHByb3ZpZGVzIHRoZSBjbG9jayBzb3VyY2Ugd2hvc2UgcmF0ZSBpcyBzYW1lIGFzIE1QTEwKKyAqLworc3RhdGljIHN0cnVjdCBjbGsgbXBsbF9tYWluMV9jbGsgPSB7CisJLmlkCQk9IDAsCisJLnBhcmVudAkJPSAmbXBsbF9jbGssCisJLmdldF9yYXRlCT0gZ2V0X3JhdGVfbXBsbF9tYWluLAorfTsKKworLyogRm9yIGkuTVgyNyBUTzIsIGl0IGlzIHRoZSBNUExMIHBhdGggMiBvZiBBUk0gY29yZQorICogSXQgcHJvdmlkZXMgdGhlIGNsb2NrIHNvdXJjZSB3aG9zZSByYXRlIGlzIHNhbWUgTVBMTCAqIDIgLyAzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIG1wbGxfbWFpbjJfY2xrID0geworCS5pZAkJPSAxLAorCS5wYXJlbnQJCT0gJm1wbGxfY2xrLAorCS5nZXRfcmF0ZQk9IGdldF9yYXRlX21wbGxfbWFpbiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFoYl9jbGsgPSB7CisJLnBhcmVudAkJPSAmbXBsbF9tYWluMl9jbGssCisJLmdldF9yYXRlCT0gZ2V0X3JhdGVfYWhiLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaXBnX2NsayA9IHsKKwkucGFyZW50CQk9ICZhaGJfY2xrLAorCS5nZXRfcmF0ZQk9IGdldF9yYXRlX2lwZywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNwdV9jbGsgPSB7CisJLnBhcmVudCA9ICZtcGxsX21haW4yX2NsaywKKwkuc2V0X3BhcmVudCA9IGNsa19jcHVfc2V0X3BhcmVudCwKKwkucm91bmRfcmF0ZSA9IHJvdW5kX3JhdGVfY3B1LAorCS5nZXRfcmF0ZSA9IGdldF9yYXRlX2NwdSwKKwkuc2V0X3JhdGUgPSBzZXRfcmF0ZV9jcHUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzcGxsX2NsayA9IHsKKwkucGFyZW50ID0gJmNraWhfY2xrLAorCS5nZXRfcmF0ZSA9IGdldF9yYXRlX3NwbGwsCisJLmVuYWJsZSA9IGNsa19zcGxsX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGNsa19zcGxsX2Rpc2FibGUsCit9OworCisvKgorICogdGhlIGxvdyBmcmVxdWVuY3kgZXh0ZXJuYWwgY2xvY2sgcmVmZXJlbmNlCisgKiBEZWZhdWx0IGNhc2UgaXMgMzIuNzY4a0h6LgorICovCitzdGF0aWMgc3RydWN0IGNsayBja2lsX2NsayA9IHsKKwkuZ2V0X3JhdGUgPSBnZXRfcmF0ZV9sb3dfcmVmZXJlbmNlLAorfTsKKworLyogT3V0cHV0IG9mIGZyZXF1ZW5jeSBwcmUgbXVsdGlwbGllciAqLworc3RhdGljIHN0cnVjdCBjbGsgZnBtX2NsayA9IHsKKwkucGFyZW50ID0gJmNraWxfY2xrLAorCS5nZXRfcmF0ZSA9IGdldF9yYXRlX2ZwbSwKK307CisKKyNkZWZpbmUgUENDUjAgQ0NNX1BDQ1IwCisjZGVmaW5lIFBDQ1IxIENDTV9QQ0NSMQorCisjZGVmaW5lIERFRklORV9DTE9DSyhuYW1lLCBpLCBlciwgZXMsIGdyLCBzLCBwKQkJXAorCXN0YXRpYyBzdHJ1Y3QgY2xrIG5hbWUgPSB7CQkJXAorCQkuaWQJCT0gaSwJCQlcCisJCS5lbmFibGVfcmVnCT0gZXIsCQkJXAorCQkuZW5hYmxlX3NoaWZ0CT0gZXMsCQkJXAorCQkuZ2V0X3JhdGUJPSBnciwJCQlcCisJCS5lbmFibGUJCT0gY2xrX3BjY3JfZW5hYmxlLAlcCisJCS5kaXNhYmxlCT0gY2xrX3BjY3JfZGlzYWJsZSwJXAorCQkuc2Vjb25kYXJ5CT0gcywJCQlcCisJCS5wYXJlbnQJCT0gcCwJCQlcCisJfQorCisjZGVmaW5lIERFRklORV9DTE9DSzEobmFtZSwgaSwgZXIsIGVzLCBnZXRzZXRyb3VuZCwgcywgcCkJXAorCXN0YXRpYyBzdHJ1Y3QgY2xrIG5hbWUgPSB7CQkJCVwKKwkJLmlkCQk9IGksCQkJCVwKKwkJLmVuYWJsZV9yZWcJPSBlciwJCQkJXAorCQkuZW5hYmxlX3NoaWZ0CT0gZXMsCQkJCVwKKwkJLmdldF9yYXRlCT0gZ2V0X3JhdGVfIyNnZXRzZXRyb3VuZCwJXAorCQkuc2V0X3JhdGUJPSBzZXRfcmF0ZV8jI2dldHNldHJvdW5kLAlcCisJCS5yb3VuZF9yYXRlCT0gcm91bmRfcmF0ZV8jI2dldHNldHJvdW5kLAlcCisJCS5lbmFibGUJCT0gY2xrX3BjY3JfZW5hYmxlLAkJXAorCQkuZGlzYWJsZQk9IGNsa19wY2NyX2Rpc2FibGUsCQlcCisJCS5zZWNvbmRhcnkJPSBzLAkJCQlcCisJCS5wYXJlbnQJCT0gcCwJCQkJXAorCX0KKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiB0byBrZWVwIHRoZSBmb2xsb3dpbmcgbGlzdCBpbiBvcmRlciAqLworc3RhdGljIHN0cnVjdCBjbGsgc2xjZGNfY2xrMSwgc2FoYXJhMl9jbGsxLCBydGljX2NsazEsIGZlY19jbGsxLCBlbW1hX2NsazEsCisJCSAgZG1hX2NsazEsIGxjZGNfY2xrMiwgdnB1X2NsazE7CisKKy8qIEFsbCBjbG9ja3Mgd2UgY2FuIGdhdGUgdGhyb3VnaCBQQ0NSeCBpbiB0aGUgb3JkZXIgb2YgUENDUnggYml0cyAqLworREVGSU5FX0NMT0NLKHNzaTJfY2xrMSwgICAgMSwgUENDUjAsICAwLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soc3NpMV9jbGsxLCAgICAwLCBQQ0NSMCwgIDEsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhzbGNkY19jbGssICAgIDAsIFBDQ1IwLCAgMiwgTlVMTCwgJnNsY2RjX2NsazEsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhzZGhjM19jbGsxLCAgIDAsIFBDQ1IwLCAgMywgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHNkaGMyX2NsazEsICAgMCwgUENDUjAsICA0LCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soc2RoYzFfY2xrMSwgICAwLCBQQ0NSMCwgIDUsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhzY2NfY2xrLCAgICAgIDAsIFBDQ1IwLCAgNiwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHNhaGFyYTJfY2xrLCAgMCwgUENDUjAsICA3LCBOVUxMLCAmc2FoYXJhMl9jbGsxLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0socnRpY19jbGssICAgICAwLCBQQ0NSMCwgIDgsIE5VTEwsICZydGljX2NsazEsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhydGNfY2xrLCAgICAgIDAsIFBDQ1IwLCAgOSwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHB3bV9jbGsxLCAgICAgMCwgUENDUjAsIDExLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0sob3dpcmVfY2xrLCAgICAwLCBQQ0NSMCwgMTIsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhtc3RpY2tfY2xrMSwgIDAsIFBDQ1IwLCAxMywgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGxjZGNfY2xrMSwgICAgMCwgUENDUjAsIDE0LCBOVUxMLCAmbGNkY19jbGsyLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soa3BwX2NsaywgICAgICAwLCBQQ0NSMCwgMTUsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhpaW1fY2xrLCAgICAgIDAsIFBDQ1IwLCAxNiwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGkyYzJfY2xrLCAgICAgMSwgUENDUjAsIDE3LCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soaTJjMV9jbGssICAgICAwLCBQQ0NSMCwgMTgsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhncHQ2X2NsazEsICAgIDAsIFBDQ1IwLCAyOSwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGdwdDVfY2xrMSwgICAgMCwgUENDUjAsIDIwLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0NF9jbGsxLCAgICAwLCBQQ0NSMCwgMjEsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhncHQzX2NsazEsICAgIDAsIFBDQ1IwLCAyMiwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGdwdDJfY2xrMSwgICAgMCwgUENDUjAsIDIzLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0MV9jbGsxLCAgICAwLCBQQ0NSMCwgMjQsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhncGlvX2NsaywgICAgIDAsIFBDQ1IwLCAyNSwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGZlY19jbGssICAgICAgMCwgUENDUjAsIDI2LCBOVUxMLCAmZmVjX2NsazEsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhlbW1hX2NsaywgICAgIDAsIFBDQ1IwLCAyNywgTlVMTCwgJmVtbWFfY2xrMSwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKGRtYV9jbGssICAgICAgMCwgUENDUjAsIDI4LCBOVUxMLCAmZG1hX2NsazEsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhjc3BpMTNfY2xrMSwgIDAsIFBDQ1IwLCAyOSwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGNzcGkyX2NsazEsICAgMCwgUENDUjAsIDMwLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soY3NwaTFfY2xrMSwgICAwLCBQQ0NSMCwgMzEsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKKworREVGSU5FX0NMT0NLKG1zdGlja19jbGssICAgMCwgUENDUjEsICAyLCBOVUxMLCAmbXN0aWNrX2NsazEsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhuZmNfY2xrLCAgICAgIDAsIFBDQ1IxLCAgMywgZ2V0X3JhdGVfbmZjLCBOVUxMLCAmY3B1X2Nsayk7CitERUZJTkVfQ0xPQ0soc3NpMl9jbGssICAgICAxLCBQQ0NSMSwgIDQsIGdldF9yYXRlX3NzaTIsICZzc2kyX2NsazEsICZtcGxsX21haW4yX2Nsayk7CitERUZJTkVfQ0xPQ0soc3NpMV9jbGssICAgICAwLCBQQ0NSMSwgIDUsIGdldF9yYXRlX3NzaTEsICZzc2kxX2NsazEsICZtcGxsX21haW4yX2Nsayk7CitERUZJTkVfQ0xPQ0sodnB1X2NsaywgICAgICAwLCBQQ0NSMSwgIDYsIGdldF9yYXRlX3ZwdSwgJnZwdV9jbGsxLCAmbXBsbF9tYWluMl9jbGspOworREVGSU5FX0NMT0NLMShwZXI0X2NsaywgICAgMywgUENDUjEsICA3LCBwZXIsIE5VTEwsICZtcGxsX21haW4yX2Nsayk7CitERUZJTkVfQ0xPQ0sxKHBlcjNfY2xrLCAgICAyLCBQQ0NSMSwgIDgsIHBlciwgTlVMTCwgJm1wbGxfbWFpbjJfY2xrKTsKK0RFRklORV9DTE9DSzEocGVyMl9jbGssICAgIDEsIFBDQ1IxLCAgOSwgcGVyLCBOVUxMLCAmbXBsbF9tYWluMl9jbGspOworREVGSU5FX0NMT0NLMShwZXIxX2NsaywgICAgMCwgUENDUjEsIDEwLCBwZXIsIE5VTEwsICZtcGxsX21haW4yX2Nsayk7CitERUZJTkVfQ0xPQ0sodXNiX2NsazEsICAgICAwLCBQQ0NSMSwgMTEsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhzbGNkY19jbGsxLCAgIDAsIFBDQ1IxLCAxMiwgTlVMTCwgTlVMTCwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKHNhaGFyYTJfY2xrMSwgMCwgUENDUjEsIDEzLCBOVUxMLCBOVUxMLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0socnRpY19jbGsxLCAgICAwLCBQQ0NSMSwgMTQsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhsY2RjX2NsazIsICAgIDAsIFBDQ1IxLCAxNSwgTlVMTCwgTlVMTCwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKHZwdV9jbGsxLCAgICAgMCwgUENDUjEsIDE2LCBOVUxMLCBOVUxMLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0soZmVjX2NsazEsICAgICAwLCBQQ0NSMSwgMTcsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhlbW1hX2NsazEsICAgIDAsIFBDQ1IxLCAxOCwgTlVMTCwgTlVMTCwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKGVtaV9jbGssICAgICAgMCwgUENDUjEsIDE5LCBOVUxMLCBOVUxMLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0soZG1hX2NsazEsICAgICAwLCBQQ0NSMSwgMjAsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhjc2lfY2xrMSwgICAgIDAsIFBDQ1IxLCAyMSwgTlVMTCwgTlVMTCwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKGJyb21fY2xrLCAgICAgMCwgUENDUjEsIDIyLCBOVUxMLCBOVUxMLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0soYXRhX2NsaywgICAgICAwLCBQQ0NSMSwgMjMsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyh3ZG9nX2NsaywgICAgIDAsIFBDQ1IxLCAyNCwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHVzYl9jbGssICAgICAgMCwgUENDUjEsIDI1LCBnZXRfcmF0ZV91c2IsICZ1c2JfY2xrMSwgJnNwbGxfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0Nl9jbGsxLCAgIDAsIFBDQ1IxLCAyNiwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHVhcnQ1X2NsazEsICAgMCwgUENDUjEsIDI3LCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDRfY2xrMSwgICAwLCBQQ0NSMSwgMjgsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0M19jbGsxLCAgIDAsIFBDQ1IxLCAyOSwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHVhcnQyX2NsazEsICAgMCwgUENDUjEsIDMwLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDFfY2xrMSwgICAwLCBQQ0NSMSwgMzEsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKKworLyogQ2xvY2tzIHdlIGNhbm5vdCBkaXJlY3RseSBnYXRlLCBidXQgZHJpdmVycyBuZWVkIHRoZWlyIHJhdGVzICovCitERUZJTkVfQ0xPQ0soY3NwaTFfY2xrLCAgICAwLCAwLCAgICAgIDAsIE5VTEwsICZjc3BpMV9jbGsxLCAmcGVyMl9jbGspOworREVGSU5FX0NMT0NLKGNzcGkyX2NsaywgICAgMSwgMCwgICAgICAwLCBOVUxMLCAmY3NwaTJfY2xrMSwgJnBlcjJfY2xrKTsKK0RFRklORV9DTE9DSyhjc3BpM19jbGssICAgIDIsIDAsICAgICAgMCwgTlVMTCwgJmNzcGkxM19jbGsxLCAmcGVyMl9jbGspOworREVGSU5FX0NMT0NLKHNkaGMxX2NsaywgICAgMCwgMCwgICAgICAwLCBOVUxMLCAmc2RoYzFfY2xrMSwgJnBlcjJfY2xrKTsKK0RFRklORV9DTE9DSyhzZGhjMl9jbGssICAgIDEsIDAsICAgICAgMCwgTlVMTCwgJnNkaGMyX2NsazEsICZwZXIyX2Nsayk7CitERUZJTkVfQ0xPQ0soc2RoYzNfY2xrLCAgICAyLCAwLCAgICAgIDAsIE5VTEwsICZzZGhjM19jbGsxLCAmcGVyMl9jbGspOworREVGSU5FX0NMT0NLKHB3bV9jbGssICAgICAgMCwgMCwgICAgICAwLCBOVUxMLCAmcHdtX2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0MV9jbGssICAgICAwLCAwLCAgICAgIDAsIE5VTEwsICZncHQxX2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0Ml9jbGssICAgICAxLCAwLCAgICAgIDAsIE5VTEwsICZncHQyX2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0M19jbGssICAgICAyLCAwLCAgICAgIDAsIE5VTEwsICZncHQzX2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0NF9jbGssICAgICAzLCAwLCAgICAgIDAsIE5VTEwsICZncHQ0X2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0NV9jbGssICAgICA0LCAwLCAgICAgIDAsIE5VTEwsICZncHQ1X2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0Nl9jbGssICAgICA1LCAwLCAgICAgIDAsIE5VTEwsICZncHQ2X2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDFfY2xrLCAgICAwLCAwLCAgICAgIDAsIE5VTEwsICZ1YXJ0MV9jbGsxLCAmcGVyMV9jbGspOworREVGSU5FX0NMT0NLKHVhcnQyX2NsaywgICAgMSwgMCwgICAgICAwLCBOVUxMLCAmdWFydDJfY2xrMSwgJnBlcjFfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0M19jbGssICAgIDIsIDAsICAgICAgMCwgTlVMTCwgJnVhcnQzX2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDRfY2xrLCAgICAzLCAwLCAgICAgIDAsIE5VTEwsICZ1YXJ0NF9jbGsxLCAmcGVyMV9jbGspOworREVGSU5FX0NMT0NLKHVhcnQ1X2NsaywgICAgNCwgMCwgICAgICAwLCBOVUxMLCAmdWFydDVfY2xrMSwgJnBlcjFfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0Nl9jbGssICAgIDUsIDAsICAgICAgMCwgTlVMTCwgJnVhcnQ2X2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0sxKGxjZGNfY2xrLCAgICAwLCAwLCAgICAgIDAsIHBhcmVudCwgJmxjZGNfY2xrMSwgJnBlcjNfY2xrKTsKK0RFRklORV9DTE9DSzEoY3NpX2NsaywgICAgIDAsIDAsICAgICAgMCwgcGFyZW50LCAmY3NpX2NsazEsICZwZXI0X2Nsayk7CisKKyNkZWZpbmUgX1JFR0lTVEVSX0NMT0NLKGQsIG4sIGMpIFwKKwl7IFwKKwkJLmRldl9pZCA9IGQsIFwKKwkJLmNvbl9pZCA9IG4sIFwKKwkJLmNsayA9ICZjLCBcCisJfSwKKworc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjAiLCBOVUxMLCB1YXJ0MV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4xIiwgTlVMTCwgdWFydDJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMiIsIE5VTEwsIHVhcnQzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjMiLCBOVUxMLCB1YXJ0NF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC40IiwgTlVMTCwgdWFydDVfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuNSIsIE5VTEwsIHVhcnQ2X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwdDEiLCBncHQxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwdDIiLCBncHQyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwdDMiLCBncHQzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwdDQiLCBncHQ0X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwdDUiLCBncHQ1X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwdDYiLCBncHQ2X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Y19wd20uMCIsIE5VTEwsIHB3bV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtbW1jLjAiLCBOVUxMLCBzZGhjMV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtbW1jLjEiLCBOVUxMLCBzZGhjMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtbW1jLjIiLCBOVUxMLCBzZGhjM19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJzcGlfaW14LjAiLCBOVUxMLCBjc3BpMV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJzcGlfaW14LjEiLCBOVUxMLCBjc3BpMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJzcGlfaW14LjIiLCBOVUxMLCBjc3BpM19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtZmIuMCIsIE5VTEwsIGxjZGNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXgyLWNhbWVyYS4wIiwgTlVMTCwgY3NpX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImZzbC11c2IyLXVkYyIsICJ1c2IiLCB1c2JfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiZnNsLXVzYjItdWRjIiwgInVzYl9haGIiLCB1c2JfY2xrMSkKKwlfUkVHSVNURVJfQ0xPQ0soIm14Yy1laGNpLjAiLCAidXNiIiwgdXNiX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Yy1laGNpLjAiLCAidXNiX2FoYiIsIHVzYl9jbGsxKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMSIsICJ1c2IiLCB1c2JfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMSIsICJ1c2JfYWhiIiwgdXNiX2NsazEpCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4yIiwgInVzYiIsIHVzYl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4yIiwgInVzYl9haGIiLCB1c2JfY2xrMSkKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1zc2kuMCIsIE5VTEwsIHNzaTFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXNzaS4xIiwgTlVMTCwgc3NpMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGNfbmFuZC4wIiwgTlVMTCwgbmZjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInZwdSIsIHZwdV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJkbWEiLCBkbWFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicnRpYyIsIHJ0aWNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiYnJvbSIsIGJyb21fY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZW1tYSIsIGVtbWFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic2xjZGMiLCBzbGNkY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJmZWMuMCIsIE5VTEwsIGZlY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlbWkiLCBlbWlfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic2FoYXJhMiIsIHNhaGFyYTJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiYXRhIiwgYXRhX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIm1zdGljayIsIG1zdGlja19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtd2R0LjAiLCBOVUxMLCB3ZG9nX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwaW8iLCBncGlvX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMCIsIE5VTEwsIGkyYzFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4xIiwgTlVMTCwgaTJjMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJpaW0iLCBpaW1fY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAia3BwIiwga3BwX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Y193MS4wIiwgTlVMTCwgb3dpcmVfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicnRjIiwgcnRjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNjYyIsIHNjY19jbGspCit9OworCisvKiBBZGp1c3QgdGhlIGNsb2NrIHBhdGggZm9yIFRPMiBhbmQgbGF0ZXIgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCB0bzJfYWRqdXN0X2Nsb2Nrcyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgY3NjciA9IF9fcmF3X3JlYWRsKENDTV9DU0NSKTsKKworCWlmIChteDI3X3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wKSB7CisJCWlmIChjc2NyICYgQ0NNX0NTQ1JfQVJNX1NSQykKKwkJCWNwdV9jbGsucGFyZW50ID0gJm1wbGxfbWFpbjFfY2xrOworCisJCWlmICghKGNzY3IgJiBDQ01fQ1NDUl9TU0kyKSkKKwkJCXNzaTFfY2xrLnBhcmVudCA9ICZzcGxsX2NsazsKKworCQlpZiAoIShjc2NyICYgQ0NNX0NTQ1JfU1NJMSkpCisJCQlzc2kxX2Nsay5wYXJlbnQgPSAmc3BsbF9jbGs7CisKKwkJaWYgKCEoY3NjciAmIENDTV9DU0NSX1ZQVSkpCisJCQl2cHVfY2xrLnBhcmVudCA9ICZzcGxsX2NsazsKKwl9IGVsc2UgeworCQljcHVfY2xrLnBhcmVudCA9ICZtcGxsX2NsazsKKwkJY3B1X2Nsay5zZXRfcGFyZW50ID0gTlVMTDsKKwkJY3B1X2Nsay5yb3VuZF9yYXRlID0gTlVMTDsKKwkJY3B1X2Nsay5zZXRfcmF0ZSA9IE5VTEw7CisJCWFoYl9jbGsucGFyZW50ID0gJm1wbGxfY2xrOworCisJCXBlcjFfY2xrLnBhcmVudCA9ICZtcGxsX2NsazsKKwkJcGVyMl9jbGsucGFyZW50ID0gJm1wbGxfY2xrOworCQlwZXIzX2Nsay5wYXJlbnQgPSAmbXBsbF9jbGs7CisJCXBlcjRfY2xrLnBhcmVudCA9ICZtcGxsX2NsazsKKworCQlzc2kxX2Nsay5wYXJlbnQgPSAmbXBsbF9jbGs7CisJCXNzaTJfY2xrLnBhcmVudCA9ICZtcGxsX2NsazsKKworCQl2cHVfY2xrLnBhcmVudCA9ICZtcGxsX2NsazsKKwl9Cit9CisKKy8qCisgKiBtdXN0IGJlIGNhbGxlZCB2ZXJ5IGVhcmx5IHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAqIGF2YWlsYWJsZSBjbG9jayByYXRlIHdoZW4gdGhlIHRpbWVyIGZyYW1ld29yayBzdGFydHMKKyAqLworaW50IF9faW5pdCBteDI3X2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZikKK3sKKwl1MzIgY3NjciA9IF9fcmF3X3JlYWRsKENDTV9DU0NSKTsKKworCWV4dGVybmFsX2hpZ2hfcmVmZXJlbmNlID0gZnJlZjsKKworCS8qIGRldGVjdCBjbG9jayByZWZlcmVuY2UgZm9yIGJvdGggc3lzdGVtIFBMTHMgKi8KKwlpZiAoY3NjciAmIENDTV9DU0NSX01DVSkKKwkJbXBsbF9jbGsucGFyZW50ID0gJmNraWhfY2xrOworCWVsc2UKKwkJbXBsbF9jbGsucGFyZW50ID0gJmZwbV9jbGs7CisKKwlpZiAoY3NjciAmIENDTV9DU0NSX1NQKQorCQlzcGxsX2Nsay5wYXJlbnQgPSAmY2tpaF9jbGs7CisJZWxzZQorCQlzcGxsX2Nsay5wYXJlbnQgPSAmZnBtX2NsazsKKworCXRvMl9hZGp1c3RfY2xvY2tzKCk7CisKKwljbGtkZXZfYWRkX3RhYmxlKGxvb2t1cHMsIEFSUkFZX1NJWkUobG9va3VwcykpOworCisJLyogVHVybiBvZmYgYWxsIGNsb2NrcyB3ZSBkbyBub3QgbmVlZCAqLworCV9fcmF3X3dyaXRlbCgwLCBDQ01fUENDUjApOworCV9fcmF3X3dyaXRlbCgoMSA8PCAxMCkgfCAoMSA8PCAxOSksIENDTV9QQ0NSMSk7CisKKwlzcGxsX2Nsay5kaXNhYmxlKCZzcGxsX2Nsayk7CisKKwkvKiBlbmFibGUgYmFzaWMgY2xvY2tzICovCisJY2xrX2VuYWJsZSgmcGVyMV9jbGspOworCWNsa19lbmFibGUoJmdwaW9fY2xrKTsKKwljbGtfZW5hYmxlKCZlbWlfY2xrKTsKKwljbGtfZW5hYmxlKCZpaW1fY2xrKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0xMKSAmJiAhZGVmaW5lZChDT05GSUdfREVCVUdfSUNFRENDKQorCWNsa19lbmFibGUoJnVhcnQxX2Nsayk7CisjZW5kaWYKKworCW14Y190aW1lcl9pbml0KCZncHQxX2NsaywgTVgyN19JT19BRERSRVNTKE1YMjdfR1BUMV9CQVNFX0FERFIpLAorCQkJTVgyN19JTlRfR1BUMSk7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvY3B1X2lteDI3LmMgYi9hcmNoL2FybS9tYWNoLWlteC9jcHUtaW14MjcuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1teDIvY3B1X2lteDI3LmMKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtaW14L2NwdS1pbXgyNy5jCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9kZXZpY2VzLWlteDEuaCBiL2FyY2gvYXJtL21hY2gtaW14L2RldmljZXMtaW14MS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZDk0ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9kZXZpY2VzLWlteDEuaApAQCAtMCwwICsxLDE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFBlbmd1dHJvbml4CisgKiBVd2UgS2xlaW5lLUtvZW5pZyA8dS5rbGVpbmUta29lbmlnQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxtYWNoL214MS5oPgorI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy1jb21tb24uaD4KKworI2RlZmluZSBpbXgxX2FkZF9pMmNfaW14KHBkYXRhKQkJXAorCWlteF9hZGRfaW14X2kyYygwLCBNWDFfSTJDX0JBU0VfQUREUiwgU1pfNEssIE1YMV9JTlRfSTJDLCBwZGF0YSkKKworI2RlZmluZSBpbXgxX2FkZF9pbXhfdWFydDAocGRhdGEpCVwKKwlpbXhfYWRkX2lteF91YXJ0XzNpcnEoMCwgTVgxX1VBUlQxX0JBU0VfQUREUiwgMHhkMCwgTVgxX0lOVF9VQVJUMVJYLCBNWDFfSU5UX1VBUlQxVFgsIE1YMV9JTlRfVUFSVDFSVFMsIHBkYXRhKQorI2RlZmluZSBpbXgxX2FkZF9pbXhfdWFydDEocGRhdGEpCVwKKwlpbXhfYWRkX2lteF91YXJ0XzNpcnEoMCwgTVgxX1VBUlQyX0JBU0VfQUREUiwgMHhkMCwgTVgxX0lOVF9VQVJUMlJYLCBNWDFfSU5UX1VBUlQyVFgsIE1YMV9JTlRfVUFSVDJSVFMsIHBkYXRhKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvZGV2aWNlcy1pbXgyMS5oIGIvYXJjaC9hcm0vbWFjaC1pbXgvZGV2aWNlcy1pbXgyMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNzg4ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9kZXZpY2VzLWlteDIxLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBQZW5ndXRyb25peAorICogVXdlIEtsZWluZS1Lb2VuaWcgPHUua2xlaW5lLWtvZW5pZ0BwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bWFjaC9teDIxLmg+CisjaW5jbHVkZSA8bWFjaC9kZXZpY2VzLWNvbW1vbi5oPgorCisjZGVmaW5lIGlteDIxX2FkZF9pMmNfaW14KHBkYXRhKQlcCisJaW14X2FkZF9pbXhfaTJjKDAsIE1YMnhfSTJDX0JBU0VfQUREUiwgU1pfNEssIE1YMnhfSU5UX0kyQywgcGRhdGEpCisKKyNkZWZpbmUgaW14MjFfYWRkX2lteF91YXJ0MChwZGF0YSkJXAorCWlteF9hZGRfaW14X3VhcnRfMWlycSgwLCBNWDIxX1VBUlQxX0JBU0VfQUREUiwgU1pfNEssIE1YMjFfSU5UX1VBUlQxLCBwZGF0YSkKKyNkZWZpbmUgaW14MjFfYWRkX2lteF91YXJ0MShwZGF0YSkJXAorCWlteF9hZGRfaW14X3VhcnRfMWlycSgxLCBNWDIxX1VBUlQyX0JBU0VfQUREUiwgU1pfNEssIE1YMjFfSU5UX1VBUlQyLCBwZGF0YSkKKyNkZWZpbmUgaW14MjFfYWRkX2lteF91YXJ0MihwZGF0YSkJXAorCWlteF9hZGRfaW14X3VhcnRfMWlycSgyLCBNWDIxX1VBUlQzX0JBU0VfQUREUiwgU1pfNEssIE1YMjFfSU5UX1VBUlQzLCBwZGF0YSkKKyNkZWZpbmUgaW14MjFfYWRkX2lteF91YXJ0MyhwZGF0YSkJXAorCWlteF9hZGRfaW14X3VhcnRfMWlycSgzLCBNWDIxX1VBUlQ0X0JBU0VfQUREUiwgU1pfNEssIE1YMjFfSU5UX1VBUlQ0LCBwZGF0YSkKKworI2RlZmluZSBpbXgyMV9hZGRfbXhjX25hbmQocGRhdGEpCVwKKwlpbXhfYWRkX214Y19uYW5kX3YxKE1YMjFfTkZDX0JBU0VfQUREUiwgTVgyMV9JTlRfTkFOREZDLCBwZGF0YSkKKworI2RlZmluZSBpbXgyMV9hZGRfc3BpX2lteDAocGRhdGEpCVwKKwlpbXhfYWRkX3NwaV9pbXgoMCwgTVgyMV9DU1BJMV9CQVNFX0FERFIsIFNaXzRLLCBNWDIxX0lOVF9DU1BJMSwgcGRhdGEpCisjZGVmaW5lIGlteDIxX2FkZF9zcGlfaW14MShwZGF0YSkJXAorCWlteF9hZGRfc3BpX2lteCgxLCBNWDIxX0NTUEkyX0JBU0VfQUREUiwgU1pfNEssIE1YMjFfSU5UX0NTUEkyLCBwZGF0YSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2RldmljZXMtaW14MjcuaCBiL2FyY2gvYXJtL21hY2gtaW14L2RldmljZXMtaW14MjcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWU3YmI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvZGV2aWNlcy1pbXgyNy5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGVuZ3V0cm9uaXgKKyAqIFV3ZSBLbGVpbmUtS29lbmlnIDx1LmtsZWluZS1rb2VuaWdAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPG1hY2gvbXgyNy5oPgorI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy1jb21tb24uaD4KKworI2RlZmluZSBpbXgyN19hZGRfaTJjX2lteDAocGRhdGEpCVwKKwlpbXhfYWRkX2lteF9pMmMoMCwgTVgyN19JMkMxX0JBU0VfQUREUiwgU1pfNEssIE1YMjdfSU5UX0kyQzEsIHBkYXRhKQorI2RlZmluZSBpbXgyN19hZGRfaTJjX2lteDEocGRhdGEpCVwKKwlpbXhfYWRkX2lteF9pMmMoMSwgTVgyN19JMkMyX0JBU0VfQUREUiwgU1pfNEssIE1YMjdfSU5UX0kyQzIsIHBkYXRhKQorCisjZGVmaW5lIGlteDI3X2FkZF9pbXhfdWFydDAocGRhdGEpCVwKKwlpbXhfYWRkX2lteF91YXJ0XzFpcnEoMCwgTVgyN19VQVJUMV9CQVNFX0FERFIsIFNaXzRLLCBNWDI3X0lOVF9VQVJUMSwgcGRhdGEpCisjZGVmaW5lIGlteDI3X2FkZF9pbXhfdWFydDEocGRhdGEpCVwKKwlpbXhfYWRkX2lteF91YXJ0XzFpcnEoMSwgTVgyN19VQVJUMl9CQVNFX0FERFIsIFNaXzRLLCBNWDI3X0lOVF9VQVJUMiwgcGRhdGEpCisjZGVmaW5lIGlteDI3X2FkZF9pbXhfdWFydDIocGRhdGEpCVwKKwlpbXhfYWRkX2lteF91YXJ0XzFpcnEoMiwgTVgyN19VQVJUM19CQVNFX0FERFIsIFNaXzRLLCBNWDI3X0lOVF9VQVJUMywgcGRhdGEpCisjZGVmaW5lIGlteDI3X2FkZF9pbXhfdWFydDMocGRhdGEpCVwKKwlpbXhfYWRkX2lteF91YXJ0XzFpcnEoMywgTVgyN19VQVJUNF9CQVNFX0FERFIsIFNaXzRLLCBNWDI3X0lOVF9VQVJUNCwgcGRhdGEpCisjZGVmaW5lIGlteDI3X2FkZF9pbXhfdWFydDQocGRhdGEpCVwKKwlpbXhfYWRkX2lteF91YXJ0XzFpcnEoNCwgTVgyN19VQVJUNV9CQVNFX0FERFIsIFNaXzRLLCBNWDI3X0lOVF9VQVJUNSwgcGRhdGEpCisjZGVmaW5lIGlteDI3X2FkZF9pbXhfdWFydDUocGRhdGEpCVwKKwlpbXhfYWRkX2lteF91YXJ0XzFpcnEoNSwgTVgyN19VQVJUNl9CQVNFX0FERFIsIFNaXzRLLCBNWDI3X0lOVF9VQVJUNiwgcGRhdGEpCisKKyNkZWZpbmUgaW14MjdfYWRkX214Y19uYW5kKHBkYXRhKQlcCisJaW14X2FkZF9teGNfbmFuZF92MShNWDI3X05GQ19CQVNFX0FERFIsIE1YMjdfSU5UX05BTkRGQywgcGRhdGEpCisKKyNkZWZpbmUgaW14MjdfYWRkX3NwaV9pbXgwKHBkYXRhKQlcCisJaW14X2FkZF9zcGlfaW14KDAsIE1YMjdfQ1NQSTFfQkFTRV9BRERSLCBTWl80SywgTVgyN19JTlRfQ1NQSTEsIHBkYXRhKQorI2RlZmluZSBpbXgyN19hZGRfc3BpX2lteDEocGRhdGEpCVwKKwlpbXhfYWRkX3NwaV9pbXgoMSwgTVgyN19DU1BJMl9CQVNFX0FERFIsIFNaXzRLLCBNWDI3X0lOVF9DU1BJMiwgcGRhdGEpCisjZGVmaW5lIGlteDI3X2FkZF9zcGlfaW14MihwZGF0YSkJXAorCWlteF9hZGRfc3BpX2lteCgyLCBNWDI3X0NTUEkzX0JBU0VfQUREUiwgU1pfNEssIE1YMjdfSU5UX0NTUEkzLCBwZGF0YSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtaW14L2RldmljZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzI3MWE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvZGV2aWNlcy5jCkBAIC0wLDAgKzEsNjA5IEBACisvKgorICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiAgICAgICA8c291cmNlQG12aXN0YS5jb20+CisgKgorICogQmFzZWQgb24gdGhlIE9NQVAgZGV2aWNlcy5jCisgKgorICogMjAwNSAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMKKyAqIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNi0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOCBKdWVyZ2VuIEJlaXNlcnQsIGtlcm5lbEBwZW5ndXRyb25peC5kZQorICogQ29weXJpZ2h0IDIwMDggU2FzY2hhIEhhdWVyLCBrZXJuZWxAcGVuZ3V0cm9uaXguZGUKKyAqIENvcHlyaWdodCAoYykgMjAwOCBQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBEYXJpdXMgQXVndWxpcyA8ZGFyaXVzLmF1Z3VsaXNAdGVsdG9uaWthLmx0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorCisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9tbWMuaD4KKworI2luY2x1ZGUgImRldmljZXMuaCIKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfTVgxKQorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXgxX2NhbWVyYV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCAgPSAweDAwMjI0MDAwLAorCQkuZW5kICAgID0gMHgwMDIyNDAxMCwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ICA9IE1YMV9DU0lfSU5ULAorCQkuZW5kICAgID0gTVgxX0NTSV9JTlQsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHU2NCBpbXgxX2NhbWVyYV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXgxX2NhbWVyYV9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gIm14MS1jYW1lcmEiLAorCS5pZCAgICAgICAgICAgICA9IDAsIC8qIFRoaXMgaXMgdXNlZCB0byBwdXQgY2FtZXJhcyBvbiB0aGlzIGludGVyZmFjZSAqLworCS5kZXYJCT0geworCQkuZG1hX21hc2sgPSAmaW14MV9jYW1lcmFfZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKKwl9LAorCS5yZXNvdXJjZSAgICAgICA9IGlteDFfY2FtZXJhX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGlteDFfY2FtZXJhX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF9ydGNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgID0gMHgwMDIwNDAwMCwKKwkJLmVuZCAgICA9IDB4MDAyMDQwMjQsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCAgPSBNWDFfUlRDX0lOVCwKKwkJLmVuZCAgICA9IE1YMV9SVENfSU5ULAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwgeworCQkuc3RhcnQgID0gTVgxX1JUQ19TQU1JTlQsCisJCS5lbmQgICAgPSBNWDFfUlRDX1NBTUlOVCwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9ydGNfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJydGMtaW14IiwKKwkuaWQgICAgICAgICAgICAgPSAwLAorCS5yZXNvdXJjZSAgICAgICA9IGlteF9ydGNfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoaW14X3J0Y19yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfd2R0X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ICA9IDB4MDAyMDEwMDAsCisJCS5lbmQgICAgPSAweDAwMjAxMDA4LAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgID0gTVgxX1dEVF9JTlQsCisJCS5lbmQgICAgPSBNWDFfV0RUX0lOVCwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF93ZHRfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJpbXgtd2R0IiwKKwkuaWQgICAgICAgICAgICAgPSAwLAorCS5yZXNvdXJjZSAgICAgICA9IGlteF93ZHRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoaW14X3dkdF9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfdXNiX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gMHgwMDIxMjAwMCwKKwkJLmVuZAk9IDB4MDAyMTIxNDgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0CT0gTVgxX1VTQkRfSU5UMCwKKwkJLmVuZAk9IE1YMV9VU0JEX0lOVDAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sIHsKKwkJLnN0YXJ0CT0gTVgxX1VTQkRfSU5UMSwKKwkJLmVuZAk9IE1YMV9VU0JEX0lOVDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sIHsKKwkJLnN0YXJ0CT0gTVgxX1VTQkRfSU5UMiwKKwkJLmVuZAk9IE1YMV9VU0JEX0lOVDIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sIHsKKwkJLnN0YXJ0CT0gTVgxX1VTQkRfSU5UMywKKwkJLmVuZAk9IE1YMV9VU0JEX0lOVDMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sIHsKKwkJLnN0YXJ0CT0gTVgxX1VTQkRfSU5UNCwKKwkJLmVuZAk9IE1YMV9VU0JEX0lOVDQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sIHsKKwkJLnN0YXJ0CT0gTVgxX1VTQkRfSU5UNSwKKwkJLmVuZAk9IE1YMV9VU0JEX0lOVDUsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sIHsKKwkJLnN0YXJ0CT0gTVgxX1VTQkRfSU5UNiwKKwkJLmVuZAk9IE1YMV9VU0JEX0lOVDYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF91c2JfZGV2aWNlID0geworCS5uYW1lCQk9ICJpbXhfdWRjIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaW14X3VzYl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGlteF91c2JfcmVzb3VyY2VzLAorfTsKKworLyogR1BJTyBwb3J0IGRlc2NyaXB0aW9uICovCitzdGF0aWMgc3RydWN0IG14Y19ncGlvX3BvcnQgaW14X2dwaW9fcG9ydHNbXSA9IHsKKwl7CisJCS5jaGlwLmxhYmVsID0gImdwaW8tMCIsCisJCS5iYXNlID0gKHZvaWQgX19pb21lbSAqKU1YMV9JT19BRERSRVNTKE1YMV9HUElPX0JBU0VfQUREUiksCisJCS5pcnEgPSBNWDFfR1BJT19JTlRfUE9SVEEsCisJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCwKKwl9LCB7CisJCS5jaGlwLmxhYmVsID0gImdwaW8tMSIsCisJCS5iYXNlID0gKHZvaWQgX19pb21lbSAqKU1YMV9JT19BRERSRVNTKE1YMV9HUElPX0JBU0VfQUREUiArIDB4MTAwKSwKKwkJLmlycSA9IE1YMV9HUElPX0lOVF9QT1JUQiwKKwkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgMzIsCisJfSwgeworCQkuY2hpcC5sYWJlbCA9ICJncGlvLTIiLAorCQkuYmFzZSA9ICh2b2lkIF9faW9tZW0gKilNWDFfSU9fQUREUkVTUyhNWDFfR1BJT19CQVNFX0FERFIgKyAweDIwMCksCisJCS5pcnEgPSBNWDFfR1BJT19JTlRfUE9SVEMsCisJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDY0LAorCX0sIHsKKwkJLmNoaXAubGFiZWwgPSAiZ3Bpby0zIiwKKwkJLmJhc2UgPSAodm9pZCBfX2lvbWVtICopTVgxX0lPX0FERFJFU1MoTVgxX0dQSU9fQkFTRV9BRERSICsgMHgzMDApLAorCQkuaXJxID0gTVgxX0dQSU9fSU5UX1BPUlRELAorCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyA5NiwKKwl9Cit9OworCitpbnQgX19pbml0IGlteDFfcmVnaXN0ZXJfZ3Bpb3Modm9pZCkKK3sKKwlyZXR1cm4gbXhjX2dwaW9faW5pdChpbXhfZ3Bpb19wb3J0cywgQVJSQVlfU0laRShpbXhfZ3Bpb19wb3J0cykpOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19NQUNIX01YMjEpIHx8IGRlZmluZWQoQ09ORklHX01BQ0hfTVgyNykKKworI2lmZGVmIENPTkZJR19NQUNIX01YMjcKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXgyN19jYW1lcmFfcmVzb3VyY2VzW10gPSB7CisJeworCSAgICAgICAuc3RhcnQgPSBNWDI3X0NTSV9CQVNFX0FERFIsCisJICAgICAgIC5lbmQgPSBNWDI3X0NTSV9CQVNFX0FERFIgKyAweDFmLAorCSAgICAgICAuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJICAgICAgIC5zdGFydCA9IE1YMjdfRU1NQV9QUlBfQkFTRV9BRERSLAorCSAgICAgICAuZW5kID0gTVgyN19FTU1BX1BSUF9CQVNFX0FERFIgKyAweDFmLAorCSAgICAgICAuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJICAgICAgIC5zdGFydCA9IE1YMjdfSU5UX0NTSSwKKwkgICAgICAgLmVuZCA9IE1YMjdfSU5UX0NTSSwKKwkgICAgICAgLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSx7CisJICAgICAgIC5zdGFydCA9IE1YMjdfSU5UX0VNTUFQUlAsCisJICAgICAgIC5lbmQgPSBNWDI3X0lOVF9FTU1BUFJQLAorCSAgICAgICAuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXgyN19jYW1lcmFfZGV2aWNlID0geworCS5uYW1lID0gIm14Mi1jYW1lcmEiLAorCS5pZCA9IDAsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14MjdfY2FtZXJhX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gbXgyN19jYW1lcmFfcmVzb3VyY2VzLAorCS5kZXYgPSB7CisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJfSwKK307CisjZW5kaWYKKworLyoKKyAqIEdlbmVyYWwgUHVycG9zZSBUaW1lcgorICogLSBpLk1YMjE6IDMgdGltZXJzCisgKiAtIGkuTVgyNzogNiB0aW1lcnMKKyAqLworI2RlZmluZSBERUZJTkVfSU1YX0dQVF9ERVZJQ0UobiwgYmFzZWFkZHIsIGlycSkJCQkJXAorCXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdGltZXIgIyMgbiAjI19yZXNvdXJjZXNbXSA9IHsJCVwKKwkJewkJCQkJCQlcCisJCQkuc3RhcnQgPSBiYXNlYWRkciwJCQkJXAorCQkJLmVuZCA9IGJhc2VhZGRyICsgU1pfNEsgLSAxLAkJCVwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAkJCVwKKwkJfSwgewkJCQkJCQlcCisJCQkuc3RhcnQgPSBpcnEsCQkJCQlcCisJCQkuZW5kID0gaXJxLAkJCQkJXAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCQkJXAorCQl9CQkJCQkJCVwKKwl9OwkJCQkJCQkJXAorCQkJCQkJCQkJXAorCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2dwdCAjIyBuID0gewkJCQlcCisJCS5uYW1lID0gImlteF9ncHQiLAkJCQkJXAorCQkuaWQgPSBuLAkJCQkJCVwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWVyICMjIG4gIyMgX3Jlc291cmNlcyksCVwKKwkJLnJlc291cmNlID0gdGltZXIgIyMgbiAjIyBfcmVzb3VyY2VzLAkJCVwKKwl9CisKKy8qIFdlIHVzZSBncHQxIGFzIHN5c3RlbSB0aW1lciwgc28gZG8gbm90IGFkZCBhIGRldmljZSBmb3IgdGhpcyBvbmUgKi8KK0RFRklORV9JTVhfR1BUX0RFVklDRSgxLCBNWDJ4X0dQVDJfQkFTRV9BRERSLCBNWDJ4X0lOVF9HUFQyKTsKK0RFRklORV9JTVhfR1BUX0RFVklDRSgyLCBNWDJ4X0dQVDNfQkFTRV9BRERSLCBNWDJ4X0lOVF9HUFQzKTsKKworI2lmZGVmIENPTkZJR19NQUNIX01YMjcKK0RFRklORV9JTVhfR1BUX0RFVklDRSgzLCBNWDI3X0dQVDRfQkFTRV9BRERSLCBNWDI3X0lOVF9HUFQ0KTsKK0RFRklORV9JTVhfR1BUX0RFVklDRSg0LCBNWDI3X0dQVDVfQkFTRV9BRERSLCBNWDI3X0lOVF9HUFQ1KTsKK0RFRklORV9JTVhfR1BUX0RFVklDRSg1LCBNWDI3X0dQVDZfQkFTRV9BRERSLCBNWDI3X0lOVF9HUFQ2KTsKKyNlbmRpZgorCisvKiBXYXRjaGRvZzogaS5NWDEgaGFzIHNlcGVyYXRlIGRyaXZlciwgaS5NWDIxIGFuZCBpLk1YMjcgYXJlIGVxdWFsICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y193ZHRfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBNWDJ4X1dET0dfQkFTRV9BRERSLAorCQkuZW5kID0gTVgyeF9XRE9HX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3dkdCA9IHsKKwkubmFtZSA9ICJpbXgyLXdkdCIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3dkdF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y193ZHRfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfdzFfbWFzdGVyX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gTVgyeF9PV0lSRV9CQVNFX0FERFIsCisJCS5lbmQgPSBNWDJ4X09XSVJFX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3cxX21hc3Rlcl9kZXZpY2UgPSB7CisJLm5hbWUgPSAibXhjX3cxIiwKKwkuaWQgPSAwLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfdzFfbWFzdGVyX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gbXhjX3cxX21hc3Rlcl9yZXNvdXJjZXMsCit9OworCisvKgorICogbGNkYzoKKyAqIC0gaS5NWDE6IHRoZSBiYXNpYyBjb250cm9sbGVyCisgKiAtIGkuTVgyMTogdG8gYmUgY2hlY2tlZAorICogLSBpLk1YMjc6IGxpa2UgaS5NWDEsIHdpdGggc2xpZ2h0bHkgdmFyaWF0aW9ucworICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19mYltdID0geworCXsKKwkJLnN0YXJ0ID0gTVgyeF9MQ0RDX0JBU0VfQUREUiwKKwkJLmVuZCA9IE1YMnhfTENEQ19CQVNFX0FERFIgKyBTWl80SyAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gTVgyeF9JTlRfTENEQywKKwkJLmVuZCA9IE1YMnhfSU5UX0xDREMsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKKy8qIG14YyBsY2QgZHJpdmVyICovCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19mYl9kZXZpY2UgPSB7CisJLm5hbWUgPSAiaW14LWZiIiwKKwkuaWQgPSAwLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfZmIpLAorCS5yZXNvdXJjZSA9IG14Y19mYiwKKwkuZGV2ID0geworCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAorCX0sCit9OworCisjaWZkZWYgQ09ORklHX01BQ0hfTVgyNworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfZmVjX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gTVgyN19GRUNfQkFTRV9BRERSLAorCQkuZW5kID0gTVgyN19GRUNfQkFTRV9BRERSICsgU1pfNEsgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCA9IE1YMjdfSU5UX0ZFQywKKwkJLmVuZCA9IE1YMjdfSU5UX0ZFQywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2ZlY19kZXZpY2UgPSB7CisJLm5hbWUgPSAiZmVjIiwKKwkuaWQgPSAwLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfZmVjX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gbXhjX2ZlY19yZXNvdXJjZXMsCit9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3B3bV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCA9IE1YMnhfUFdNX0JBU0VfQUREUiwKKwkJLmVuZCA9IE1YMnhfUFdNX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSBNWDJ4X0lOVF9QV00sCisJCS5lbmQgPSBNWDJ4X0lOVF9QV00sCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3B3bV9kZXZpY2UgPSB7CisJLm5hbWUgPSAibXhjX3B3bSIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3B3bV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y19wd21fcmVzb3VyY2VzLAorfTsKKworI2RlZmluZSBERUZJTkVfTVhDX01NQ19ERVZJQ0UobiwgYmFzZWFkZHIsIGlycSwgZG1hcmVxKQkJCVwKKwlzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zZGhjX3Jlc291cmNlcyAjIyBuW10gPSB7CQlcCisJCXsJCQkJCQkJXAorCQkJLnN0YXJ0ID0gYmFzZWFkZHIsCQkJCVwKKwkJCS5lbmQgPSBiYXNlYWRkciArIFNaXzRLIC0gMSwJCQlcCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwJCQlcCisJCX0sIHsJCQkJCQkJXAorCQkJLnN0YXJ0ID0gaXJxLAkJCQkJXAorCQkJLmVuZCA9IGlycSwJCQkJCVwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAkJCVwKKwkJfSwgewkJCQkJCQlcCisJCQkuc3RhcnQgPSBkbWFyZXEsCQkJCVwKKwkJCS5lbmQgPSBkbWFyZXEsCQkJCQlcCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwJCQlcCisJCX0sCQkJCQkJCVwKKwl9OwkJCQkJCQkJXAorCQkJCQkJCQkJXAorCXN0YXRpYyB1NjQgbXhjX3NkaGMgIyMgbiAjIyBfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CVwKKwkJCQkJCQkJCVwKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zZGhjX2RldmljZSAjIyBuID0gewkJCVwKKwkJLm5hbWUgPSAibXhjLW1tYyIsCQkJCQlcCisJCS5pZCA9IG4sCQkJCQkJXAorCQkuZGV2ID0gewkJCQkJCVwKKwkJCS5kbWFfbWFzayA9ICZteGNfc2RoYyAjIyBuICMjIF9kbWFtYXNrLAkJXAorCQkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwJCVwKKwkJfSwJCQkJCQkJXAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3NkaGNfcmVzb3VyY2VzICMjIG4pLAlcCisJCS5yZXNvdXJjZSA9IG14Y19zZGhjX3Jlc291cmNlcyAjIyBuLAkJXAorCX0KKworREVGSU5FX01YQ19NTUNfREVWSUNFKDAsIE1YMnhfU0RIQzFfQkFTRV9BRERSLCBNWDJ4X0lOVF9TREhDMSwgTVgyeF9ETUFfUkVRX1NESEMxKTsKK0RFRklORV9NWENfTU1DX0RFVklDRSgxLCBNWDJ4X1NESEMyX0JBU0VfQUREUiwgTVgyeF9JTlRfU0RIQzIsIE1YMnhfRE1BX1JFUV9TREhDMik7CisKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDI3CitzdGF0aWMgc3RydWN0IHJlc291cmNlIG90Z19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCA9IE1YMjdfVVNCT1RHX0JBU0VfQUREUiwKKwkJLmVuZCA9IE1YMjdfVVNCT1RHX0JBU0VfQUREUiArIDB4MWZmLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCA9IE1YMjdfSU5UX1VTQjMsCisJCS5lbmQgPSBNWDI3X0lOVF9VU0IzLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHU2NCBvdGdfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKKy8qIE9URyBnYWRnZXQgZGV2aWNlICovCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19vdGdfdWRjX2RldmljZSA9IHsKKwkubmFtZQkJPSAiZnNsLXVzYjItdWRjIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5kbWFfbWFzawkJPSAmb3RnX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJfSwKKwkucmVzb3VyY2UJPSBvdGdfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShvdGdfcmVzb3VyY2VzKSwKK307CisKKy8qIE9URyBob3N0ICovCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19vdGdfaG9zdCA9IHsKKwkubmFtZSA9ICJteGMtZWhjaSIsCisJLmlkID0gMCwKKwkuZGV2ID0geworCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAorCQkuZG1hX21hc2sgPSAmb3RnX2RtYW1hc2ssCisJfSwKKwkucmVzb3VyY2UgPSBvdGdfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShvdGdfcmVzb3VyY2VzKSwKK307CisKKy8qIFVTQiBob3N0IDEgKi8KKworc3RhdGljIHU2NCB1c2JoMV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfdXNiaDFfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBNWDI3X1VTQk9UR19CQVNFX0FERFIgKyAweDIwMCwKKwkJLmVuZCA9IE1YMjdfVVNCT1RHX0JBU0VfQUREUiArIDB4M2ZmLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCA9IE1YMjdfSU5UX1VTQjEsCisJCS5lbmQgPSBNWDI3X0lOVF9VU0IxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDEgPSB7CisJLm5hbWUgPSAibXhjLWVoY2kiLAorCS5pZCA9IDEsCisJLmRldiA9IHsKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJLmRtYV9tYXNrID0gJnVzYmgxX2RtYW1hc2ssCisJfSwKKwkucmVzb3VyY2UgPSBteGNfdXNiaDFfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfdXNiaDFfcmVzb3VyY2VzKSwKK307CisKKy8qIFVTQiBob3N0IDIgKi8KK3N0YXRpYyB1NjQgdXNiaDJfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3VzYmgyX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gTVgyN19VU0JPVEdfQkFTRV9BRERSICsgMHg0MDAsCisJCS5lbmQgPSBNWDI3X1VTQk9UR19CQVNFX0FERFIgKyAweDVmZiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSBNWDI3X0lOVF9VU0IyLAorCQkuZW5kID0gTVgyN19JTlRfVVNCMiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VzYmgyID0geworCS5uYW1lID0gIm14Yy1laGNpIiwKKwkuaWQgPSAyLAorCS5kZXYgPSB7CisJCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCisJCS5kbWFfbWFzayA9ICZ1c2JoMl9kbWFtYXNrLAorCX0sCisJLnJlc291cmNlID0gbXhjX3VzYmgyX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3VzYmgyX3Jlc291cmNlcyksCit9OworI2VuZGlmCisKKyNkZWZpbmUgREVGSU5FX0lNWF9TU0lfRE1BUkVTKF9uYW1lLCBzc2luLCBzdWZmaXgpCQkJXAorCXsJCQkJCQkJCVwKKwkJLm5hbWUgPSBfbmFtZSwJCQkJCQlcCisJCS5zdGFydCA9IE1YMnhfRE1BX1JFUV9TU0kgIyMgc3NpbiAjIyBfICMjIHN1ZmZpeCwJXAorCQkuZW5kID0gTVgyeF9ETUFfUkVRX1NTSSAjIyBzc2luICMjIF8gIyMgc3VmZml4LAkJXAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwJCQkJXAorCX0KKworI2RlZmluZSBERUZJTkVfSU1YX1NTSV9ERVZJQ0Uobiwgc3NpbiwgYmFzZWFkZHIsIGlycSkJCQlcCisJc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfc3NpX3Jlc291cmNlcyAjIyBuW10gPSB7CQlcCisJCXsJCQkJCQkJXAorCQkJLnN0YXJ0ID0gTVgyeF9TU0kgIyMgc3NpbiAjIyBfQkFTRV9BRERSLAlcCisJCQkuZW5kID0gTVgyeF9TU0kgIyMgc3NpbiAjIyBfQkFTRV9BRERSICsgMHg2ZiwJXAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCQkJXAorCQl9LCB7CQkJCQkJCVwKKwkJCS5zdGFydCA9IE1YMnhfSU5UX1NTSTEsCQkJCVwKKwkJCS5lbmQgPSBNWDJ4X0lOVF9TU0kxLAkJCQlcCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwJCQlcCisJCX0sCQkJCQkJCVwKKwkJREVGSU5FX0lNWF9TU0lfRE1BUkVTKCJ0eDAiLCBzc2luLCBUWDApLAkJXAorCQlERUZJTkVfSU1YX1NTSV9ETUFSRVMoInJ4MCIsIHNzaW4sIFJYMCksCQlcCisJCURFRklORV9JTVhfU1NJX0RNQVJFUygidHgxIiwgc3NpbiwgVFgxKSwJCVwKKwkJREVGSU5FX0lNWF9TU0lfRE1BUkVTKCJyeDEiLCBzc2luLCBSWDEpLAkJXAorCX07CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3NpX2RldmljZSAjIyBuID0gewkJCVwKKwkJLm5hbWUgPSAiaW14LXNzaSIsCQkJCQlcCisJCS5pZCA9IG4sCQkJCQkJXAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoaW14X3NzaV9yZXNvdXJjZXMgIyMgbiksCVwKKwkJLnJlc291cmNlID0gaW14X3NzaV9yZXNvdXJjZXMgIyMgbiwJCQlcCisJfQorCitERUZJTkVfSU1YX1NTSV9ERVZJQ0UoMCwgMSwgTVgyeF9TU0kxX0JBU0VfQUREUiwgTVgyeF9JTlRfU1NJMSk7CitERUZJTkVfSU1YX1NTSV9ERVZJQ0UoMSwgMiwgTVgyeF9TU0kxX0JBU0VfQUREUiwgTVgyeF9JTlRfU1NJMSk7CisKKy8qIEdQSU8gcG9ydCBkZXNjcmlwdGlvbiAqLworI2RlZmluZSBERUZJTkVfTVhDX0dQSU9fUE9SVF9JUlEoU09DLCBuLCBfaXJxKQkJCQlcCisJewkJCQkJCQkJXAorCQkuY2hpcC5sYWJlbCA9ICJncGlvLSIgI24sCQkJCVwKKwkJLmlycSA9IF9pcnEsCQkJCQkJXAorCQkuYmFzZSA9IFNPQyAjIyBfSU9fQUREUkVTUyhNWDJ4X0dQSU9fQkFTRV9BRERSICsJXAorCQkJCW4gKiAweDEwMCksCQkJCVwKKwkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgbiAqIDMyLAlcCisJfQorCisjZGVmaW5lIERFRklORV9NWENfR1BJT19QT1JUKFNPQywgbikJCQkJCVwKKwl7CQkJCQkJCQlcCisJCS5jaGlwLmxhYmVsID0gImdwaW8tIiAjbiwJCQkJXAorCQkuYmFzZSA9IFNPQyAjIyBfSU9fQUREUkVTUyhNWDJ4X0dQSU9fQkFTRV9BRERSICsJXAorCQkJCW4gKiAweDEwMCksCQkJCVwKKwkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgbiAqIDMyLAlcCisJfQorCisjZGVmaW5lIERFRklORV9NWENfR1BJT19QT1JUUyhTT0MsIHBmeCkJCQkJCVwKKwlzdGF0aWMgc3RydWN0IG14Y19ncGlvX3BvcnQgcGZ4ICMjIF9ncGlvX3BvcnRzW10gPSB7CQlcCisJCURFRklORV9NWENfR1BJT19QT1JUX0lSUShTT0MsIDAsIFNPQyAjIyBfSU5UX0dQSU8pLAlcCisJCURFRklORV9NWENfR1BJT19QT1JUKFNPQywgMSksCQkJCVwKKwkJREVGSU5FX01YQ19HUElPX1BPUlQoU09DLCAyKSwJCQkJXAorCQlERUZJTkVfTVhDX0dQSU9fUE9SVChTT0MsIDMpLAkJCQlcCisJCURFRklORV9NWENfR1BJT19QT1JUKFNPQywgNCksCQkJCVwKKwkJREVGSU5FX01YQ19HUElPX1BPUlQoU09DLCA1KSwJCQkJXAorCX0KKworI2lmZGVmIENPTkZJR19NQUNIX01YMjEKK0RFRklORV9NWENfR1BJT19QT1JUUyhNWDIxLCBpbXgyMSk7CisKK2ludCBfX2luaXQgaW14MjFfcmVnaXN0ZXJfZ3Bpb3Modm9pZCkKK3sKKwlyZXR1cm4gbXhjX2dwaW9faW5pdChpbXgyMV9ncGlvX3BvcnRzLCBBUlJBWV9TSVpFKGlteDIxX2dwaW9fcG9ydHMpKTsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfTVgyNworREVGSU5FX01YQ19HUElPX1BPUlRTKE1YMjcsIGlteDI3KTsKKworaW50IF9faW5pdCBpbXgyN19yZWdpc3Rlcl9ncGlvcyh2b2lkKQoreworCXJldHVybiBteGNfZ3Bpb19pbml0KGlteDI3X2dwaW9fcG9ydHMsIEFSUkFZX1NJWkUoaW14MjdfZ3Bpb19wb3J0cykpOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDIxCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14MjFfdXNiaGNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBNWDIxX1VTQk9UR19CQVNFX0FERFIsCisJCS5lbmQJPSBNWDIxX1VTQk9UR19CQVNFX0FERFIgKyBTWl84SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gTVgyMV9JTlRfVVNCSE9TVCwKKwkJLmVuZAkJPSBNWDIxX0lOVF9VU0JIT1NULAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXgyMV91c2JoY19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImlteDIxLWhjZCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5kbWFfbWFzayA9ICZteDIxX3VzYmhjX2RldmljZS5kZXYuY29oZXJlbnRfZG1hX21hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXgyMV91c2JoY19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IG14MjFfdXNiaGNfcmVzb3VyY2VzLAorfTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF9rcHBfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgID0gTVgyeF9LUFBfQkFTRV9BRERSLAorCQkuZW5kICAgID0gTVgyeF9LUFBfQkFTRV9BRERSICsgMHhmLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0KKwl9LCB7CisJCS5zdGFydCAgPSBNWDJ4X0lOVF9LUFAsCisJCS5lbmQgICAgPSBNWDJ4X0lOVF9LUFAsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfa3BwX2RldmljZSA9IHsKKwkubmFtZSA9ICJpbXgta2V5cGFkIiwKKwkuaWQgPSAtMSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoaW14X2twcF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IGlteF9rcHBfcmVzb3VyY2VzLAorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9kZXZpY2VzLmggYi9hcmNoL2FybS9tYWNoLWlteC9kZXZpY2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZkNDUyNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2RldmljZXMuaApAQCAtMCwwICsxLDMyIEBACisjaWZkZWYgQ09ORklHX0FSQ0hfTVgxCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXgxX2NhbWVyYV9kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfcnRjX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF93ZHRfZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3VzYl9kZXZpY2U7CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfTVgyMSkgfHwgZGVmaW5lZChDT05GSUdfTUFDSF9NWDI3KQorZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2dwdDE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfZ3B0MjsKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDI3CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfZ3B0MzsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19ncHQ0OworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2dwdDU7CisjZW5kaWYKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y193ZHQ7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdzFfbWFzdGVyX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19mYl9kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfZmVjX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19wd21fZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3NkaGNfZGV2aWNlMDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zZGhjX2RldmljZTE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfb3RnX3VkY19kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDI3X2NhbWVyYV9kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfb3RnX2hvc3Q7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDIxX3VzYmhjX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9zc2lfZGV2aWNlMDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9zc2lfZGV2aWNlMTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9rcHBfZGV2aWNlOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9kbWEtdjEuYyBiL2FyY2gvYXJtL21hY2gtaW14L2RtYS12MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlOGM0N2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9kbWEtdjEuYwpAQCAtMCwwICsxLDg2MiBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9wbGF0LW14Yy9kbWEtdjEuYworICoKKyAqICBpLk1YIERNQSByZWdpc3RyYXRpb24gYW5kIElSUSBkaXNwYXRjaGluZworICoKKyAqIENvcHlyaWdodCAyMDA2IFBhdmVsIFBpc2EgPHBpc2FAY21wLmZlbGsuY3Z1dC5jej4KKyAqIENvcHlyaWdodCAyMDA4IEp1ZXJnZW4gQmVpc2VydCwgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyAqIENvcHlyaWdodCAyMDA4IFNhc2NoYSBIYXVlciwgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLXYxLmg+CisKKyNkZWZpbmUgRE1BX0RDUiAgICAgMHgwMAkJLyogQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBETUFfRElTUiAgICAweDA0CQkvKiBJbnRlcnJ1cHQgc3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIERNQV9ESU1SICAgIDB4MDgJCS8qIEludGVycnVwdCBtYXNrIFJlZ2lzdGVyICovCisjZGVmaW5lIERNQV9EQlRPU1IgIDB4MGMJCS8qIEJ1cnN0IHRpbWVvdXQgc3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIERNQV9EUlRPU1IgIDB4MTAJCS8qIFJlcXVlc3QgdGltZW91dCBSZWdpc3RlciAqLworI2RlZmluZSBETUFfRFNFU1IgICAweDE0CQkvKiBUcmFuc2ZlciBFcnJvciBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE1BX0RCT1NSICAgMHgxOAkJLyogQnVmZmVyIG92ZXJmbG93IHN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBETUFfREJUT0NSICAweDFjCQkvKiBCdXJzdCB0aW1lb3V0IGNvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE1BX1dTUkEgICAgMHg0MAkJLyogVy1TaXplIFJlZ2lzdGVyIEEgKi8KKyNkZWZpbmUgRE1BX1hTUkEgICAgMHg0NAkJLyogWC1TaXplIFJlZ2lzdGVyIEEgKi8KKyNkZWZpbmUgRE1BX1lTUkEgICAgMHg0OAkJLyogWS1TaXplIFJlZ2lzdGVyIEEgKi8KKyNkZWZpbmUgRE1BX1dTUkIgICAgMHg0YwkJLyogVy1TaXplIFJlZ2lzdGVyIEIgKi8KKyNkZWZpbmUgRE1BX1hTUkIgICAgMHg1MAkJLyogWC1TaXplIFJlZ2lzdGVyIEIgKi8KKyNkZWZpbmUgRE1BX1lTUkIgICAgMHg1NAkJLyogWS1TaXplIFJlZ2lzdGVyIEIgKi8KKyNkZWZpbmUgRE1BX1NBUih4KSAgKDB4ODAgKyAoKHgpIDw8IDYpKQkvKiBTb3VyY2UgQWRkcmVzcyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRE1BX0RBUih4KSAgKDB4ODQgKyAoKHgpIDw8IDYpKQkvKiBEZXN0aW5hdGlvbiBBZGRyZXNzIFJlZ2lzdGVycyAqLworI2RlZmluZSBETUFfQ05UUih4KSAoMHg4OCArICgoeCkgPDwgNikpCS8qIENvdW50IFJlZ2lzdGVycyAqLworI2RlZmluZSBETUFfQ0NSKHgpICAoMHg4YyArICgoeCkgPDwgNikpCS8qIENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lIERNQV9SU1NSKHgpICgweDkwICsgKCh4KSA8PCA2KSkJLyogUmVxdWVzdCBzb3VyY2Ugc2VsZWN0IFJlZ2lzdGVycyAqLworI2RlZmluZSBETUFfQkxSKHgpICAoMHg5NCArICgoeCkgPDwgNikpCS8qIEJ1cnN0IGxlbmd0aCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRE1BX1JUT1IoeCkgKDB4OTggKyAoKHgpIDw8IDYpKQkvKiBSZXF1ZXN0IHRpbWVvdXQgUmVnaXN0ZXJzICovCisjZGVmaW5lIERNQV9CVUNSKHgpICgweDk4ICsgKCh4KSA8PCA2KSkJLyogQnVzIFV0aWxpemF0aW9uIFJlZ2lzdGVycyAqLworI2RlZmluZSBETUFfQ0NOUih4KSAoMHg5QyArICgoeCkgPDwgNikpCS8qIENoYW5uZWwgY291bnRlciBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBEQ1JfRFJTVCAgICAgICAgICAgKDE8PDEpCisjZGVmaW5lIERDUl9ERU4gICAgICAgICAgICAoMTw8MCkKKyNkZWZpbmUgREJUT0NSX0VOICAgICAgICAgICgxPDwxNSkKKyNkZWZpbmUgREJUT0NSX0NOVCh4KSAgICAgICgoeCkgJiAweDdmZmYpCisjZGVmaW5lIENOVFJfQ05UKHgpICAgICAgICAoKHgpICYgMHhmZmZmZmYpCisjZGVmaW5lIENDUl9BQ1JQVCAgICAgICAgICAoMTw8MTQpCisjZGVmaW5lIENDUl9ETU9EX0xJTkVBUiAgICAoMHgwIDw8IDEyKQorI2RlZmluZSBDQ1JfRE1PRF8yRCAgICAgICAgKDB4MSA8PCAxMikKKyNkZWZpbmUgQ0NSX0RNT0RfRklGTyAgICAgICgweDIgPDwgMTIpCisjZGVmaW5lIENDUl9ETU9EX0VPQkZJRk8gICAoMHgzIDw8IDEyKQorI2RlZmluZSBDQ1JfU01PRF9MSU5FQVIgICAgKDB4MCA8PCAxMCkKKyNkZWZpbmUgQ0NSX1NNT0RfMkQgICAgICAgICgweDEgPDwgMTApCisjZGVmaW5lIENDUl9TTU9EX0ZJRk8gICAgICAoMHgyIDw8IDEwKQorI2RlZmluZSBDQ1JfU01PRF9FT0JGSUZPICAgKDB4MyA8PCAxMCkKKyNkZWZpbmUgQ0NSX01ESVJfREVDICAgICAgICgxPDw5KQorI2RlZmluZSBDQ1JfTVNFTF9CICAgICAgICAgKDE8PDgpCisjZGVmaW5lIENDUl9EU0laXzMyICAgICAgICAoMHgwIDw8IDYpCisjZGVmaW5lIENDUl9EU0laXzggICAgICAgICAoMHgxIDw8IDYpCisjZGVmaW5lIENDUl9EU0laXzE2ICAgICAgICAoMHgyIDw8IDYpCisjZGVmaW5lIENDUl9TU0laXzMyICAgICAgICAoMHgwIDw8IDQpCisjZGVmaW5lIENDUl9TU0laXzggICAgICAgICAoMHgxIDw8IDQpCisjZGVmaW5lIENDUl9TU0laXzE2ICAgICAgICAoMHgyIDw8IDQpCisjZGVmaW5lIENDUl9SRU4gICAgICAgICAgICAoMTw8MykKKyNkZWZpbmUgQ0NSX1JQVCAgICAgICAgICAgICgxPDwyKQorI2RlZmluZSBDQ1JfRlJDICAgICAgICAgICAgKDE8PDEpCisjZGVmaW5lIENDUl9DRU4gICAgICAgICAgICAoMTw8MCkKKyNkZWZpbmUgUlRPUl9FTiAgICAgICAgICAgICgxPDwxNSkKKyNkZWZpbmUgUlRPUl9DTEsgICAgICAgICAgICgxPDwxNCkKKyNkZWZpbmUgUlRPUl9QU0MgICAgICAgICAgICgxPDwxMykKKworLyoKKyAqIHN0cnVjdCBpbXhfZG1hX2NoYW5uZWwgLSBpLk1YIHNwZWNpZmljIERNQSBleHRlbnNpb24KKyAqIEBuYW1lOiBuYW1lIHNwZWNpZmllZCBieSBETUEgY2xpZW50CisgKiBAaXJxX2hhbmRsZXI6IGNsaWVudCBjYWxsYmFjayBmb3IgZW5kIG9mIHRyYW5zZmVyCisgKiBAZXJyX2hhbmRsZXI6IGNsaWVudCBjYWxsYmFjayBmb3IgZXJyb3IgY29uZGl0aW9uCisgKiBAZGF0YTogY2xpZW50cyBjb250ZXh0IGRhdGEgZm9yIGNhbGxiYWNrcworICogQGRtYV9tb2RlOiBkaXJlY3Rpb24gb2YgdGhlIHRyYW5zZmVyICVETUFfTU9ERV9SRUFEIG9yICVETUFfTU9ERV9XUklURQorICogQHNnOiBwb2ludGVyIHRvIHRoZSBhY3R1YWwgcmVhZC93cml0dGVuIGNodW5rIGZvciBzY2F0dGVyLWdhdGhlciBlbXVsYXRpb24KKyAqIEByZXNieXRlczogdG90YWwgcmVzaWR1YWwgbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyCisgKiAgICAgICAgICAgIChpdCBjYW4gYmUgbG93ZXIgb3Igc2FtZSBhcyBzdW0gb2YgU0cgbWFwcGVkIGNodW5rIHNpemVzKQorICogQHNnY291bnQ6IG51bWJlciBvZiBjaHVua3MgdG8gYmUgcmVhZC93cml0dGVuCisgKgorICogU3RydWN0dXJlIGlzIHVzZWQgZm9yIElNWCBETUEgcHJvY2Vzc2luZy4gSXQgd291bGQgYmUgcHJvYmFibHkgZ29vZAorICogQHN0cnVjdCBkbWFfc3RydWN0IGluIHRoZSBmdXR1cmUgZm9yIGV4dGVybmFsIGludGVyZmFjaW5nIGFuZCB1c2UKKyAqIEBzdHJ1Y3QgaW14X2RtYV9jaGFubmVsIG9ubHkgYXMgZXh0ZW5zaW9uIHRvIGl0LgorICovCisKK3N0cnVjdCBpbXhfZG1hX2NoYW5uZWwgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdm9pZCAoKmlycV9oYW5kbGVyKSAoaW50LCB2b2lkICopOworCXZvaWQgKCplcnJfaGFuZGxlcikgKGludCwgdm9pZCAqLCBpbnQgZXJyY29kZSk7CisJdm9pZCAoKnByb2dfaGFuZGxlcikgKGludCwgdm9pZCAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKik7CisJdm9pZCAqZGF0YTsKKwl1bnNpZ25lZCBpbnQgZG1hX21vZGU7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwl1bnNpZ25lZCBpbnQgcmVzYnl0ZXM7CisJaW50IGRtYV9udW07CisKKwlpbnQgaW5fdXNlOworCisJdTMyIGNjcl9mcm9tX2RldmljZTsKKwl1MzIgY2NyX3RvX2RldmljZTsKKworCXN0cnVjdCB0aW1lcl9saXN0IHdhdGNoZG9nOworCisJaW50IGh3X2NoYWluaW5nOworfTsKKworc3RhdGljIHZvaWQgX19pb21lbSAqaW14X2RtYXYxX2Jhc2VhZGRyOworCitzdGF0aWMgdm9pZCBpbXhfZG1hdjFfd3JpdGVsKHVuc2lnbmVkIHZhbCwgdW5zaWduZWQgb2Zmc2V0KQoreworCV9fcmF3X3dyaXRlbCh2YWwsIGlteF9kbWF2MV9iYXNlYWRkciArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbXhfZG1hdjFfcmVhZGwodW5zaWduZWQgb2Zmc2V0KQoreworCXJldHVybiBfX3Jhd19yZWFkbChpbXhfZG1hdjFfYmFzZWFkZHIgKyBvZmZzZXQpOworfQorCitzdGF0aWMgc3RydWN0IGlteF9kbWFfY2hhbm5lbCBpbXhfZG1hX2NoYW5uZWxzW0lNWF9ETUFfQ0hBTk5FTFNdOworCitzdGF0aWMgc3RydWN0IGNsayAqZG1hX2NsazsKKworc3RhdGljIGludCBpbXhfZG1hX2h3X2NoYWluKHN0cnVjdCBpbXhfZG1hX2NoYW5uZWwgKmlteGRtYSkKK3sKKwlpZiAoY3B1X2lzX214MjcoKSkKKwkJcmV0dXJuIGlteGRtYS0+aHdfY2hhaW5pbmc7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyoKKyAqIGlteF9kbWFfc2dfbmV4dCAtIHByZXBhcmUgbmV4dCBjaHVuayBmb3Igc2NhdHRlci1nYXRoZXIgRE1BIGVtdWxhdGlvbgorICovCitzdGF0aWMgaW5saW5lIGludCBpbXhfZG1hX3NnX25leHQoaW50IGNoYW5uZWwsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2cpCit7CisJc3RydWN0IGlteF9kbWFfY2hhbm5lbCAqaW14ZG1hID0gJmlteF9kbWFfY2hhbm5lbHNbY2hhbm5lbF07CisJdW5zaWduZWQgbG9uZyBub3c7CisKKwlpZiAoIWlteGRtYS0+bmFtZSkgeworCQlwcmludGsoS0VSTl9DUklUICIlczogY2FsbGVkIGZvciAgbm90IGFsbG9jYXRlZCBjaGFubmVsICVkXG4iLAorCQkgICAgICAgX19mdW5jX18sIGNoYW5uZWwpOworCQlyZXR1cm4gMDsKKwl9CisKKwlub3cgPSBtaW4oaW14ZG1hLT5yZXNieXRlcywgc2ctPmxlbmd0aCk7CisJaWYgKGlteGRtYS0+cmVzYnl0ZXMgIT0gSU1YX0RNQV9MRU5HVEhfTE9PUCkKKwkJaW14ZG1hLT5yZXNieXRlcyAtPSBub3c7CisKKwlpZiAoKGlteGRtYS0+ZG1hX21vZGUgJiBETUFfTU9ERV9NQVNLKSA9PSBETUFfTU9ERV9SRUFEKQorCQlpbXhfZG1hdjFfd3JpdGVsKHNnLT5kbWFfYWRkcmVzcywgRE1BX0RBUihjaGFubmVsKSk7CisJZWxzZQorCQlpbXhfZG1hdjFfd3JpdGVsKHNnLT5kbWFfYWRkcmVzcywgRE1BX1NBUihjaGFubmVsKSk7CisKKwlpbXhfZG1hdjFfd3JpdGVsKG5vdywgRE1BX0NOVFIoY2hhbm5lbCkpOworCisJcHJfZGVidWcoImlteGRtYSVkOiBuZXh0IHNnIGNodW5rIGRzdCAweCUwOHgsIHNyYyAweCUwOHgsICIKKwkJInNpemUgMHglMDh4XG4iLCBjaGFubmVsLAorCQkgaW14X2RtYXYxX3JlYWRsKERNQV9EQVIoY2hhbm5lbCkpLAorCQkgaW14X2RtYXYxX3JlYWRsKERNQV9TQVIoY2hhbm5lbCkpLAorCQkgaW14X2RtYXYxX3JlYWRsKERNQV9DTlRSKGNoYW5uZWwpKSk7CisKKwlyZXR1cm4gbm93OworfQorCisvKioKKyAqIGlteF9kbWFfc2V0dXBfc2luZ2xlIC0gc2V0dXAgaS5NWCBETUEgY2hhbm5lbCBmb3IgbGluZWFyIG1lbW9yeSB0by9mcm9tCisgKiBkZXZpY2UgdHJhbnNmZXIKKyAqCisgKiBAY2hhbm5lbDogaS5NWCBETUEgY2hhbm5lbCBudW1iZXIKKyAqIEBkbWFfYWRkcmVzczogdGhlIERNQS9waHlzaWNhbCBtZW1vcnkgYWRkcmVzcyBvZiB0aGUgbGluZWFyIGRhdGEgYmxvY2sKKyAqCQl0byB0cmFuc2ZlcgorICogQGRtYV9sZW5ndGg6IGxlbmd0aCBvZiB0aGUgZGF0YSBibG9jayBpbiBieXRlcworICogQGRldl9hZGRyOiBwaHlzaWNhbCBkZXZpY2UgcG9ydCBhZGRyZXNzCisgKiBAZG1hbW9kZTogRE1BIHRyYW5zZmVyIG1vZGUsICVETUFfTU9ERV9SRUFEIGZyb20gdGhlIGRldmljZSB0byB0aGUgbWVtb3J5CisgKiAgICAgICAgICAgb3IgJURNQV9NT0RFX1dSSVRFIGZyb20gbWVtb3J5IHRvIHRoZSBkZXZpY2UKKyAqCisgKiBSZXR1cm4gdmFsdWU6IGlmIGluY29ycmVjdCBwYXJhbWV0ZXJzIGFyZSBwcm92aWRlZCAtJUVJTlZBTC4KKyAqCQlaZXJvIGluZGljYXRlcyBzdWNjZXNzLgorICovCitpbnQKK2lteF9kbWFfc2V0dXBfc2luZ2xlKGludCBjaGFubmVsLCBkbWFfYWRkcl90IGRtYV9hZGRyZXNzLAorCQkgICAgIHVuc2lnbmVkIGludCBkbWFfbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZGV2X2FkZHIsCisJCSAgICAgdW5zaWduZWQgaW50IGRtYW1vZGUpCit7CisJc3RydWN0IGlteF9kbWFfY2hhbm5lbCAqaW14ZG1hID0gJmlteF9kbWFfY2hhbm5lbHNbY2hhbm5lbF07CisKKwlpbXhkbWEtPnNnID0gTlVMTDsKKwlpbXhkbWEtPmRtYV9tb2RlID0gZG1hbW9kZTsKKworCWlmICghZG1hX2FkZHJlc3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpbXhkbWElZDogaW14X2RtYV9zZXR1cF9zaW5nbGUgbnVsbCBhZGRyZXNzXG4iLAorCQkgICAgICAgY2hhbm5lbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghZG1hX2xlbmd0aCkgeworCQlwcmludGsoS0VSTl9FUlIgImlteGRtYSVkOiBpbXhfZG1hX3NldHVwX3NpbmdsZSB6ZXJvIGxlbmd0aFxuIiwKKwkJICAgICAgIGNoYW5uZWwpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoKGRtYW1vZGUgJiBETUFfTU9ERV9NQVNLKSA9PSBETUFfTU9ERV9SRUFEKSB7CisJCXByX2RlYnVnKCJpbXhkbWElZDogJXMgZG1hX2FkZHJlc3NnPTB4JTA4eCBkbWFfbGVuZ3RoPSVkICIKKwkJCSJkZXZfYWRkcj0weCUwOHggZm9yIHJlYWRcbiIsCisJCQljaGFubmVsLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGludClkbWFfYWRkcmVzcywKKwkJCWRtYV9sZW5ndGgsIGRldl9hZGRyKTsKKworCQlpbXhfZG1hdjFfd3JpdGVsKGRldl9hZGRyLCBETUFfU0FSKGNoYW5uZWwpKTsKKwkJaW14X2RtYXYxX3dyaXRlbChkbWFfYWRkcmVzcywgRE1BX0RBUihjaGFubmVsKSk7CisJCWlteF9kbWF2MV93cml0ZWwoaW14ZG1hLT5jY3JfZnJvbV9kZXZpY2UsIERNQV9DQ1IoY2hhbm5lbCkpOworCX0gZWxzZSBpZiAoKGRtYW1vZGUgJiBETUFfTU9ERV9NQVNLKSA9PSBETUFfTU9ERV9XUklURSkgeworCQlwcl9kZWJ1ZygiaW14ZG1hJWQ6ICVzIGRtYV9hZGRyZXNzZz0weCUwOHggZG1hX2xlbmd0aD0lZCAiCisJCQkiZGV2X2FkZHI9MHglMDh4IGZvciB3cml0ZVxuIiwKKwkJCWNoYW5uZWwsIF9fZnVuY19fLCAodW5zaWduZWQgaW50KWRtYV9hZGRyZXNzLAorCQkJZG1hX2xlbmd0aCwgZGV2X2FkZHIpOworCisJCWlteF9kbWF2MV93cml0ZWwoZG1hX2FkZHJlc3MsIERNQV9TQVIoY2hhbm5lbCkpOworCQlpbXhfZG1hdjFfd3JpdGVsKGRldl9hZGRyLCBETUFfREFSKGNoYW5uZWwpKTsKKwkJaW14X2RtYXYxX3dyaXRlbChpbXhkbWEtPmNjcl90b19kZXZpY2UsCisJCQkJRE1BX0NDUihjaGFubmVsKSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpbXhkbWElZDogaW14X2RtYV9zZXR1cF9zaW5nbGUgYmFkIGRtYW1vZGVcbiIsCisJCSAgICAgICBjaGFubmVsKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaW14X2RtYXYxX3dyaXRlbChkbWFfbGVuZ3RoLCBETUFfQ05UUihjaGFubmVsKSk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woaW14X2RtYV9zZXR1cF9zaW5nbGUpOworCisvKioKKyAqIGlteF9kbWFfc2V0dXBfc2cgLSBzZXR1cCBpLk1YIERNQSBjaGFubmVsIFNHIGxpc3QgdG8vZnJvbSBkZXZpY2UgdHJhbnNmZXIKKyAqIEBjaGFubmVsOiBpLk1YIERNQSBjaGFubmVsIG51bWJlcgorICogQHNnOiBwb2ludGVyIHRvIHRoZSBzY2F0dGVyLWdhdGhlciBsaXN0L3ZlY3RvcgorICogQHNnY291bnQ6IHNjYXR0ZXItZ2F0aGVyIGxpc3QgaHVuZ3MgY291bnQKKyAqIEBkbWFfbGVuZ3RoOiB0b3RhbCBsZW5ndGggb2YgdGhlIHRyYW5zZmVyIHJlcXVlc3QgaW4gYnl0ZXMKKyAqIEBkZXZfYWRkcjogcGh5c2ljYWwgZGV2aWNlIHBvcnQgYWRkcmVzcworICogQGRtYW1vZGU6IERNQSB0cmFuc2ZlciBtb2RlLCAlRE1BX01PREVfUkVBRCBmcm9tIHRoZSBkZXZpY2UgdG8gdGhlIG1lbW9yeQorICogICAgICAgICAgIG9yICVETUFfTU9ERV9XUklURSBmcm9tIG1lbW9yeSB0byB0aGUgZGV2aWNlCisgKgorICogVGhlIGZ1bmN0aW9uIHNldHMgdXAgRE1BIGNoYW5uZWwgc3RhdGUgYW5kIHJlZ2lzdGVycyB0byBiZSByZWFkeSBmb3IKKyAqIHRyYW5zZmVyIHNwZWNpZmllZCBieSBwcm92aWRlZCBwYXJhbWV0ZXJzLiBUaGUgc2NhdHRlci1nYXRoZXIgZW11bGF0aW9uCisgKiBpcyBzZXQgdXAgYWNjb3JkaW5nIHRvIHRoZSBwYXJhbWV0ZXJzLgorICoKKyAqIFRoZSBmdWxsIHByZXBhcmF0aW9uIG9mIHRoZSB0cmFuc2ZlciByZXF1aXJlcyBzZXR1cCBvZiBtb3JlIHJlZ2lzdGVyCisgKiBieSB0aGUgY2FsbGVyIGJlZm9yZSBpbXhfZG1hX2VuYWJsZSgpIGNhbiBiZSBjYWxsZWQuCisgKgorICogJUJMUihjaGFubmVsKSBob2xkcyB0cmFuc2ZlciBidXJzdCBsZW5ndGggaW4gYnl0ZXMsIDAgbWVhbnMgNjQgYnl0ZXMKKyAqCisgKiAlUlNTUihjaGFubmVsKSBoYXMgdG8gYmUgc2V0IHRvIHRoZSBETUEgcmVxdWVzdCBsaW5lIHNvdXJjZSAlRE1BX1JFUV94eHgKKyAqCisgKiAlQ0NSKGNoYW5uZWwpIGhhcyB0byBzcGVjaWZ5IHRyYW5zZmVyIHBhcmFtZXRlcnMsIHRoZSBuZXh0IHNldHRpbmdzIGlzCisgKiB0eXBpY2FsIGZvciBsaW5lYXIgb3Igc2ltcGxlIHNjYXR0ZXItZ2F0aGVyIHRyYW5zZmVycyBpZiAlRE1BX01PREVfUkVBRCBpcworICogc3BlY2lmaWVkCisgKgorICogJUNDUl9ETU9EX0xJTkVBUiB8ICVDQ1JfRFNJWl8zMiB8ICVDQ1JfU01PRF9GSUZPIHwgJUNDUl9TU0laX3gKKyAqCisgKiBUaGUgdHlwaWNhbCBzZXR1cCBmb3IgJURNQV9NT0RFX1dSSVRFIGlzIHNwZWNpZmllZCBieSBuZXh0IG9wdGlvbnMKKyAqIGNvbWJpbmF0aW9uCisgKgorICogJUNDUl9TTU9EX0xJTkVBUiB8ICVDQ1JfU1NJWl8zMiB8ICVDQ1JfRE1PRF9GSUZPIHwgJUNDUl9EU0laX3gKKyAqCisgKiBCZSBjYXJlZnVsIGhlcmUgYW5kIGRvIG5vdCBtaXN0YWtlbmx5IG1peCBzb3VyY2UgYW5kIHRhcmdldCBkZXZpY2UKKyAqIHBvcnQgc2l6ZXMgY29uc3RhbnRzLCB0aGV5IGFyZSByZWFsbHkgZGlmZmVyZW50OgorICogJUNDUl9TU0laXzgsICVDQ1JfU1NJWl8xNiwgJUNDUl9TU0laXzMyLAorICogJUNDUl9EU0laXzgsICVDQ1JfRFNJWl8xNiwgJUNDUl9EU0laXzMyCisgKgorICogUmV0dXJuIHZhbHVlOiBpZiBpbmNvcnJlY3QgcGFyYW1ldGVycyBhcmUgcHJvdmlkZWQgLSVFSU5WQUwuCisgKiBaZXJvIGluZGljYXRlcyBzdWNjZXNzLgorICovCitpbnQKK2lteF9kbWFfc2V0dXBfc2coaW50IGNoYW5uZWwsCisJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc2djb3VudCwKKwkJIHVuc2lnbmVkIGludCBkbWFfbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZGV2X2FkZHIsCisJCSB1bnNpZ25lZCBpbnQgZG1hbW9kZSkKK3sKKwlzdHJ1Y3QgaW14X2RtYV9jaGFubmVsICppbXhkbWEgPSAmaW14X2RtYV9jaGFubmVsc1tjaGFubmVsXTsKKworCWlmIChpbXhkbWEtPmluX3VzZSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlteGRtYS0+c2cgPSBzZzsKKwlpbXhkbWEtPmRtYV9tb2RlID0gZG1hbW9kZTsKKwlpbXhkbWEtPnJlc2J5dGVzID0gZG1hX2xlbmd0aDsKKworCWlmICghc2cgfHwgIXNnY291bnQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpbXhkbWElZDogaW14X2RtYV9zZXR1cF9zZyBlbXB0eSBzZyBsaXN0XG4iLAorCQkgICAgICAgY2hhbm5lbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghc2ctPmxlbmd0aCkgeworCQlwcmludGsoS0VSTl9FUlIgImlteGRtYSVkOiBpbXhfZG1hX3NldHVwX3NnIHplcm8gbGVuZ3RoXG4iLAorCQkgICAgICAgY2hhbm5lbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICgoZG1hbW9kZSAmIERNQV9NT0RFX01BU0spID09IERNQV9NT0RFX1JFQUQpIHsKKwkJcHJfZGVidWcoImlteGRtYSVkOiAlcyBzZz0lcCBzZ2NvdW50PSVkIHRvdGFsIGxlbmd0aD0lZCAiCisJCQkiZGV2X2FkZHI9MHglMDh4IGZvciByZWFkXG4iLAorCQkJY2hhbm5lbCwgX19mdW5jX18sIHNnLCBzZ2NvdW50LCBkbWFfbGVuZ3RoLCBkZXZfYWRkcik7CisKKwkJaW14X2RtYXYxX3dyaXRlbChkZXZfYWRkciwgRE1BX1NBUihjaGFubmVsKSk7CisJCWlteF9kbWF2MV93cml0ZWwoaW14ZG1hLT5jY3JfZnJvbV9kZXZpY2UsIERNQV9DQ1IoY2hhbm5lbCkpOworCX0gZWxzZSBpZiAoKGRtYW1vZGUgJiBETUFfTU9ERV9NQVNLKSA9PSBETUFfTU9ERV9XUklURSkgeworCQlwcl9kZWJ1ZygiaW14ZG1hJWQ6ICVzIHNnPSVwIHNnY291bnQ9JWQgdG90YWwgbGVuZ3RoPSVkICIKKwkJCSJkZXZfYWRkcj0weCUwOHggZm9yIHdyaXRlXG4iLAorCQkJY2hhbm5lbCwgX19mdW5jX18sIHNnLCBzZ2NvdW50LCBkbWFfbGVuZ3RoLCBkZXZfYWRkcik7CisKKwkJaW14X2RtYXYxX3dyaXRlbChkZXZfYWRkciwgRE1BX0RBUihjaGFubmVsKSk7CisJCWlteF9kbWF2MV93cml0ZWwoaW14ZG1hLT5jY3JfdG9fZGV2aWNlLCBETUFfQ0NSKGNoYW5uZWwpKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgImlteGRtYSVkOiBpbXhfZG1hX3NldHVwX3NnIGJhZCBkbWFtb2RlXG4iLAorCQkgICAgICAgY2hhbm5lbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlteF9kbWFfc2dfbmV4dChjaGFubmVsLCBzZyk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woaW14X2RtYV9zZXR1cF9zZyk7CisKK2ludAoraW14X2RtYV9jb25maWdfY2hhbm5lbChpbnQgY2hhbm5lbCwgdW5zaWduZWQgaW50IGNvbmZpZ19wb3J0LAorCXVuc2lnbmVkIGludCBjb25maWdfbWVtLCB1bnNpZ25lZCBpbnQgZG1hcmVxLCBpbnQgaHdfY2hhaW5pbmcpCit7CisJc3RydWN0IGlteF9kbWFfY2hhbm5lbCAqaW14ZG1hID0gJmlteF9kbWFfY2hhbm5lbHNbY2hhbm5lbF07CisJdTMyIGRyZXEgPSAwOworCisJaW14ZG1hLT5od19jaGFpbmluZyA9IDA7CisKKwlpZiAoaHdfY2hhaW5pbmcpIHsKKwkJaW14ZG1hLT5od19jaGFpbmluZyA9IDE7CisJCWlmICghaW14X2RtYV9od19jaGFpbihpbXhkbWEpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGRtYXJlcSkKKwkJZHJlcSA9IENDUl9SRU47CisKKwlpbXhkbWEtPmNjcl9mcm9tX2RldmljZSA9IGNvbmZpZ19wb3J0IHwgKGNvbmZpZ19tZW0gPDwgMikgfCBkcmVxOworCWlteGRtYS0+Y2NyX3RvX2RldmljZSA9IGNvbmZpZ19tZW0gfCAoY29uZmlnX3BvcnQgPDwgMikgfCBkcmVxOworCisJaW14X2RtYXYxX3dyaXRlbChkbWFyZXEsIERNQV9SU1NSKGNoYW5uZWwpKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChpbXhfZG1hX2NvbmZpZ19jaGFubmVsKTsKKwordm9pZCBpbXhfZG1hX2NvbmZpZ19idXJzdGxlbihpbnQgY2hhbm5lbCwgdW5zaWduZWQgaW50IGJ1cnN0bGVuKQoreworCWlteF9kbWF2MV93cml0ZWwoYnVyc3RsZW4sIERNQV9CTFIoY2hhbm5lbCkpOworfQorRVhQT1JUX1NZTUJPTChpbXhfZG1hX2NvbmZpZ19idXJzdGxlbik7CisKKy8qKgorICogaW14X2RtYV9zZXR1cF9oYW5kbGVycyAtIHNldHVwIGkuTVggRE1BIGNoYW5uZWwgZW5kIGFuZCBlcnJvciBub3RpZmljYXRpb24KKyAqIGhhbmRsZXJzCisgKiBAY2hhbm5lbDogaS5NWCBETUEgY2hhbm5lbCBudW1iZXIKKyAqIEBpcnFfaGFuZGxlcjogdGhlIHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIGNhbGxlZCBpZiB0aGUgdHJhbnNmZXIKKyAqCQllbmRzIHN1Y2Nlc3NmdWxseQorICogQGVycl9oYW5kbGVyOiB0aGUgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gY2FsbGVkIGlmIHRoZSBwcmVtYXR1cmUKKyAqCQllbmQgY2F1c2VkIGJ5IGVycm9yIG9jY3VycworICogQGRhdGE6IHVzZXIgc3BlY2lmaWVkIHZhbHVlIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlcnMKKyAqLworaW50CitpbXhfZG1hX3NldHVwX2hhbmRsZXJzKGludCBjaGFubmVsLAorCQkgICAgICAgdm9pZCAoKmlycV9oYW5kbGVyKSAoaW50LCB2b2lkICopLAorCQkgICAgICAgdm9pZCAoKmVycl9oYW5kbGVyKSAoaW50LCB2b2lkICosIGludCksCisJCSAgICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBpbXhfZG1hX2NoYW5uZWwgKmlteGRtYSA9ICZpbXhfZG1hX2NoYW5uZWxzW2NoYW5uZWxdOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIWlteGRtYS0+bmFtZSkgeworCQlwcmludGsoS0VSTl9DUklUICIlczogY2FsbGVkIGZvciAgbm90IGFsbG9jYXRlZCBjaGFubmVsICVkXG4iLAorCQkgICAgICAgX19mdW5jX18sIGNoYW5uZWwpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJaW14X2RtYXYxX3dyaXRlbCgxIDw8IGNoYW5uZWwsIERNQV9ESVNSKTsKKwlpbXhkbWEtPmlycV9oYW5kbGVyID0gaXJxX2hhbmRsZXI7CisJaW14ZG1hLT5lcnJfaGFuZGxlciA9IGVycl9oYW5kbGVyOworCWlteGRtYS0+ZGF0YSA9IGRhdGE7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChpbXhfZG1hX3NldHVwX2hhbmRsZXJzKTsKKworLyoqCisgKiBpbXhfZG1hX3NldHVwX3Byb2dyZXNzaW9uX2hhbmRsZXIgLSBzZXR1cCBpLk1YIERNQSBjaGFubmVsIHByb2dyZXNzaW9uCisgKiBoYW5kbGVycworICogQGNoYW5uZWw6IGkuTVggRE1BIGNoYW5uZWwgbnVtYmVyCisgKiBAcHJvZ19oYW5kbGVyOiB0aGUgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gY2FsbGVkIGlmIHRoZSB0cmFuc2ZlciBwcm9ncmVzc2VzCisgKi8KK2ludAoraW14X2RtYV9zZXR1cF9wcm9ncmVzc2lvbl9oYW5kbGVyKGludCBjaGFubmVsLAorCQkJdm9pZCAoKnByb2dfaGFuZGxlcikgKGludCwgdm9pZCosIHN0cnVjdCBzY2F0dGVybGlzdCopKQoreworCXN0cnVjdCBpbXhfZG1hX2NoYW5uZWwgKmlteGRtYSA9ICZpbXhfZG1hX2NoYW5uZWxzW2NoYW5uZWxdOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIWlteGRtYS0+bmFtZSkgeworCQlwcmludGsoS0VSTl9DUklUICIlczogY2FsbGVkIGZvciAgbm90IGFsbG9jYXRlZCBjaGFubmVsICVkXG4iLAorCQkgICAgICAgX19mdW5jX18sIGNoYW5uZWwpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJaW14ZG1hLT5wcm9nX2hhbmRsZXIgPSBwcm9nX2hhbmRsZXI7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChpbXhfZG1hX3NldHVwX3Byb2dyZXNzaW9uX2hhbmRsZXIpOworCisvKioKKyAqIGlteF9kbWFfZW5hYmxlIC0gZnVuY3Rpb24gdG8gc3RhcnQgaS5NWCBETUEgY2hhbm5lbCBvcGVyYXRpb24KKyAqIEBjaGFubmVsOiBpLk1YIERNQSBjaGFubmVsIG51bWJlcgorICoKKyAqIFRoZSBjaGFubmVsIGhhcyB0byBiZSBhbGxvY2F0ZWQgYnkgZHJpdmVyIHRocm91Z2ggaW14X2RtYV9yZXF1ZXN0KCkKKyAqIG9yIGlteF9kbWFfcmVxdWVzdF9ieV9wcmlvKCkgZnVuY3Rpb24uCisgKiBUaGUgdHJhbnNmZXIgcGFyYW1ldGVycyBoYXMgdG8gYmUgc2V0IHRvIHRoZSBjaGFubmVsIHJlZ2lzdGVycyB0aHJvdWdoCisgKiBjYWxsIG9mIHRoZSBpbXhfZG1hX3NldHVwX3NpbmdsZSgpIG9yIGlteF9kbWFfc2V0dXBfc2coKSBmdW5jdGlvbgorICogYW5kIHJlZ2lzdGVycyAlQkxSKGNoYW5uZWwpLCAlUlNTUihjaGFubmVsKSBhbmQgJUNDUihjaGFubmVsKSBoYXMgdG8KKyAqIGJlIHNldCBwcmlvciB0aGlzIGZ1bmN0aW9uIGNhbGwgYnkgdGhlIGNoYW5uZWwgdXNlci4KKyAqLwordm9pZCBpbXhfZG1hX2VuYWJsZShpbnQgY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgaW14X2RtYV9jaGFubmVsICppbXhkbWEgPSAmaW14X2RtYV9jaGFubmVsc1tjaGFubmVsXTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcHJfZGVidWcoImlteGRtYSVkOiBpbXhfZG1hX2VuYWJsZVxuIiwgY2hhbm5lbCk7CisKKwlpZiAoIWlteGRtYS0+bmFtZSkgeworCQlwcmludGsoS0VSTl9DUklUICIlczogY2FsbGVkIGZvciAgbm90IGFsbG9jYXRlZCBjaGFubmVsICVkXG4iLAorCQkgICAgICAgX19mdW5jX18sIGNoYW5uZWwpOworCQlyZXR1cm47CisJfQorCisJaWYgKGlteGRtYS0+aW5fdXNlKQorCQlyZXR1cm47CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlpbXhfZG1hdjFfd3JpdGVsKDEgPDwgY2hhbm5lbCwgRE1BX0RJU1IpOworCWlteF9kbWF2MV93cml0ZWwoaW14X2RtYXYxX3JlYWRsKERNQV9ESU1SKSAmIH4oMSA8PCBjaGFubmVsKSwgRE1BX0RJTVIpOworCWlteF9kbWF2MV93cml0ZWwoaW14X2RtYXYxX3JlYWRsKERNQV9DQ1IoY2hhbm5lbCkpIHwgQ0NSX0NFTiB8CisJCUNDUl9BQ1JQVCwgRE1BX0NDUihjaGFubmVsKSk7CisKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDIKKwlpZiAoKGNwdV9pc19teDIxKCkgfHwgY3B1X2lzX214MjcoKSkgJiYKKwkJCWlteGRtYS0+c2cgJiYgaW14X2RtYV9od19jaGFpbihpbXhkbWEpKSB7CisJCWlteGRtYS0+c2cgPSBzZ19uZXh0KGlteGRtYS0+c2cpOworCQlpZiAoaW14ZG1hLT5zZykgeworCQkJdTMyIHRtcDsKKwkJCWlteF9kbWFfc2dfbmV4dChjaGFubmVsLCBpbXhkbWEtPnNnKTsKKwkJCXRtcCA9IGlteF9kbWF2MV9yZWFkbChETUFfQ0NSKGNoYW5uZWwpKTsKKwkJCWlteF9kbWF2MV93cml0ZWwodG1wIHwgQ0NSX1JQVCB8IENDUl9BQ1JQVCwKKwkJCQlETUFfQ0NSKGNoYW5uZWwpKTsKKwkJfQorCX0KKyNlbmRpZgorCWlteGRtYS0+aW5fdXNlID0gMTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woaW14X2RtYV9lbmFibGUpOworCisvKioKKyAqIGlteF9kbWFfZGlzYWJsZSAtIHN0b3AsIGZpbmlzaCBpLk1YIERNQSBjaGFubmVsIG9wZXJhdGluCisgKiBAY2hhbm5lbDogaS5NWCBETUEgY2hhbm5lbCBudW1iZXIKKyAqLwordm9pZCBpbXhfZG1hX2Rpc2FibGUoaW50IGNoYW5uZWwpCit7CisJc3RydWN0IGlteF9kbWFfY2hhbm5lbCAqaW14ZG1hID0gJmlteF9kbWFfY2hhbm5lbHNbY2hhbm5lbF07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXByX2RlYnVnKCJpbXhkbWElZDogaW14X2RtYV9kaXNhYmxlXG4iLCBjaGFubmVsKTsKKworCWlmIChpbXhfZG1hX2h3X2NoYWluKGlteGRtYSkpCisJCWRlbF90aW1lcigmaW14ZG1hLT53YXRjaGRvZyk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJaW14X2RtYXYxX3dyaXRlbChpbXhfZG1hdjFfcmVhZGwoRE1BX0RJTVIpIHwgKDEgPDwgY2hhbm5lbCksIERNQV9ESU1SKTsKKwlpbXhfZG1hdjFfd3JpdGVsKGlteF9kbWF2MV9yZWFkbChETUFfQ0NSKGNoYW5uZWwpKSAmIH5DQ1JfQ0VOLAorCQkJRE1BX0NDUihjaGFubmVsKSk7CisJaW14X2RtYXYxX3dyaXRlbCgxIDw8IGNoYW5uZWwsIERNQV9ESVNSKTsKKwlpbXhkbWEtPmluX3VzZSA9IDA7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChpbXhfZG1hX2Rpc2FibGUpOworCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgyCitzdGF0aWMgdm9pZCBpbXhfZG1hX3dhdGNoZG9nKHVuc2lnbmVkIGxvbmcgY2hubykKK3sKKwlzdHJ1Y3QgaW14X2RtYV9jaGFubmVsICppbXhkbWEgPSAmaW14X2RtYV9jaGFubmVsc1tjaG5vXTsKKworCWlteF9kbWF2MV93cml0ZWwoMCwgRE1BX0NDUihjaG5vKSk7CisJaW14ZG1hLT5pbl91c2UgPSAwOworCWlteGRtYS0+c2cgPSBOVUxMOworCisJaWYgKGlteGRtYS0+ZXJyX2hhbmRsZXIpCisJCWlteGRtYS0+ZXJyX2hhbmRsZXIoY2hubywgaW14ZG1hLT5kYXRhLCBJTVhfRE1BX0VSUl9USU1FT1VUKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaXJxcmV0dXJuX3QgZG1hX2Vycl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlpbnQgaSwgZGlzcjsKKwlzdHJ1Y3QgaW14X2RtYV9jaGFubmVsICppbXhkbWE7CisJdW5zaWduZWQgaW50IGVycl9tYXNrOworCWludCBlcnJjb2RlOworCisJZGlzciA9IGlteF9kbWF2MV9yZWFkbChETUFfRElTUik7CisKKwllcnJfbWFzayA9IGlteF9kbWF2MV9yZWFkbChETUFfREJUT1NSKSB8CisJCSAgIGlteF9kbWF2MV9yZWFkbChETUFfRFJUT1NSKSB8CisJCSAgIGlteF9kbWF2MV9yZWFkbChETUFfRFNFU1IpICB8CisJCSAgIGlteF9kbWF2MV9yZWFkbChETUFfREJPU1IpOworCisJaWYgKCFlcnJfbWFzaykKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCisJaW14X2RtYXYxX3dyaXRlbChkaXNyICYgZXJyX21hc2ssIERNQV9ESVNSKTsKKworCWZvciAoaSA9IDA7IGkgPCBJTVhfRE1BX0NIQU5ORUxTOyBpKyspIHsKKwkJaWYgKCEoZXJyX21hc2sgJiAoMSA8PCBpKSkpCisJCQljb250aW51ZTsKKwkJaW14ZG1hID0gJmlteF9kbWFfY2hhbm5lbHNbaV07CisJCWVycmNvZGUgPSAwOworCisJCWlmIChpbXhfZG1hdjFfcmVhZGwoRE1BX0RCVE9TUikgJiAoMSA8PCBpKSkgeworCQkJaW14X2RtYXYxX3dyaXRlbCgxIDw8IGksIERNQV9EQlRPU1IpOworCQkJZXJyY29kZSB8PSBJTVhfRE1BX0VSUl9CVVJTVDsKKwkJfQorCQlpZiAoaW14X2RtYXYxX3JlYWRsKERNQV9EUlRPU1IpICYgKDEgPDwgaSkpIHsKKwkJCWlteF9kbWF2MV93cml0ZWwoMSA8PCBpLCBETUFfRFJUT1NSKTsKKwkJCWVycmNvZGUgfD0gSU1YX0RNQV9FUlJfUkVRVUVTVDsKKwkJfQorCQlpZiAoaW14X2RtYXYxX3JlYWRsKERNQV9EU0VTUikgJiAoMSA8PCBpKSkgeworCQkJaW14X2RtYXYxX3dyaXRlbCgxIDw8IGksIERNQV9EU0VTUik7CisJCQllcnJjb2RlIHw9IElNWF9ETUFfRVJSX1RSQU5TRkVSOworCQl9CisJCWlmIChpbXhfZG1hdjFfcmVhZGwoRE1BX0RCT1NSKSAmICgxIDw8IGkpKSB7CisJCQlpbXhfZG1hdjFfd3JpdGVsKDEgPDwgaSwgRE1BX0RCT1NSKTsKKwkJCWVycmNvZGUgfD0gSU1YX0RNQV9FUlJfQlVGRkVSOworCQl9CisJCWlmIChpbXhkbWEtPm5hbWUgJiYgaW14ZG1hLT5lcnJfaGFuZGxlcikgeworCQkJaW14ZG1hLT5lcnJfaGFuZGxlcihpLCBpbXhkbWEtPmRhdGEsIGVycmNvZGUpOworCQkJY29udGludWU7CisJCX0KKworCQlpbXhfZG1hX2NoYW5uZWxzW2ldLnNnID0gTlVMTDsKKworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiRE1BIHRpbWVvdXQgb24gY2hhbm5lbCAlZCAoJXMpIC0lcyVzJXMlc1xuIiwKKwkJICAgICAgIGksIGlteGRtYS0+bmFtZSwKKwkJICAgICAgIGVycmNvZGUgJiBJTVhfRE1BX0VSUl9CVVJTVCA/ICAgICIgYnVyc3QiIDogIiIsCisJCSAgICAgICBlcnJjb2RlICYgSU1YX0RNQV9FUlJfUkVRVUVTVCA/ICAiIHJlcXVlc3QiIDogIiIsCisJCSAgICAgICBlcnJjb2RlICYgSU1YX0RNQV9FUlJfVFJBTlNGRVIgPyAiIHRyYW5zZmVyIiA6ICIiLAorCQkgICAgICAgZXJyY29kZSAmIElNWF9ETUFfRVJSX0JVRkZFUiA/ICAgIiBidWZmZXIiIDogIiIpOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGRtYV9pcnFfaGFuZGxlX2NoYW5uZWwoaW50IGNobm8pCit7CisJc3RydWN0IGlteF9kbWFfY2hhbm5lbCAqaW14ZG1hID0gJmlteF9kbWFfY2hhbm5lbHNbY2hub107CisKKwlpZiAoIWlteGRtYS0+bmFtZSkgeworCQkvKgorCQkgKiBJUlEgZm9yIGFuIHVucmVnaXN0ZXJlZCBETUEgY2hhbm5lbDoKKwkJICogbGV0J3MgY2xlYXIgdGhlIGludGVycnVwdHMgYW5kIGRpc2FibGUgaXQuCisJCSAqLworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAic3B1cmlvdXMgSVJRIGZvciBETUEgY2hhbm5lbCAlZFxuIiwgY2hubyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaW14ZG1hLT5zZykgeworCQl1MzIgdG1wOworCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmN1cnJlbnRfc2cgPSBpbXhkbWEtPnNnOworCQlpbXhkbWEtPnNnID0gc2dfbmV4dChpbXhkbWEtPnNnKTsKKworCQlpZiAoaW14ZG1hLT5zZykgeworCQkJaW14X2RtYV9zZ19uZXh0KGNobm8sIGlteGRtYS0+c2cpOworCisJCQl0bXAgPSBpbXhfZG1hdjFfcmVhZGwoRE1BX0NDUihjaG5vKSk7CisKKwkJCWlmIChpbXhfZG1hX2h3X2NoYWluKGlteGRtYSkpIHsKKwkJCQkvKiBGSVhNRTogVGhlIHRpbWVvdXQgc2hvdWxkIHByb2JhYmx5IGJlCisJCQkJICogY29uZmlndXJhYmxlCisJCQkJICovCisJCQkJbW9kX3RpbWVyKCZpbXhkbWEtPndhdGNoZG9nLAorCQkJCQlqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1MDApKTsKKworCQkJCXRtcCB8PSBDQ1JfQ0VOIHwgQ0NSX1JQVCB8IENDUl9BQ1JQVDsKKwkJCQlpbXhfZG1hdjFfd3JpdGVsKHRtcCwgRE1BX0NDUihjaG5vKSk7CisJCQl9IGVsc2UgeworCQkJCWlteF9kbWF2MV93cml0ZWwodG1wICYgfkNDUl9DRU4sIERNQV9DQ1IoY2hubykpOworCQkJCXRtcCB8PSBDQ1JfQ0VOOworCQkJfQorCisJCQlpbXhfZG1hdjFfd3JpdGVsKHRtcCwgRE1BX0NDUihjaG5vKSk7CisKKwkJCWlmIChpbXhkbWEtPnByb2dfaGFuZGxlcikKKwkJCQlpbXhkbWEtPnByb2dfaGFuZGxlcihjaG5vLCBpbXhkbWEtPmRhdGEsCisJCQkJCQljdXJyZW50X3NnKTsKKworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKGlteF9kbWFfaHdfY2hhaW4oaW14ZG1hKSkgeworCQkJZGVsX3RpbWVyKCZpbXhkbWEtPndhdGNoZG9nKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWlteF9kbWF2MV93cml0ZWwoMCwgRE1BX0NDUihjaG5vKSk7CisJaW14ZG1hLT5pbl91c2UgPSAwOworCWlmIChpbXhkbWEtPmlycV9oYW5kbGVyKQorCQlpbXhkbWEtPmlycV9oYW5kbGVyKGNobm8sIGlteGRtYS0+ZGF0YSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCWludCBpLCBkaXNyOworCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgyCisJaWYgKGNwdV9pc19teDIxKCkgfHwgY3B1X2lzX214MjcoKSkKKwkJZG1hX2Vycl9oYW5kbGVyKGlycSwgZGV2X2lkKTsKKyNlbmRpZgorCisJZGlzciA9IGlteF9kbWF2MV9yZWFkbChETUFfRElTUik7CisKKwlwcl9kZWJ1ZygiaW14ZG1hOiBkbWFfaXJxX2hhbmRsZXIgY2FsbGVkLCBkaXNyPTB4JTA4eFxuIiwKKwkJICAgICBkaXNyKTsKKworCWlteF9kbWF2MV93cml0ZWwoZGlzciwgRE1BX0RJU1IpOworCWZvciAoaSA9IDA7IGkgPCBJTVhfRE1BX0NIQU5ORUxTOyBpKyspIHsKKwkJaWYgKGRpc3IgJiAoMSA8PCBpKSkKKwkJCWRtYV9pcnFfaGFuZGxlX2NoYW5uZWwoaSk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqIGlteF9kbWFfcmVxdWVzdCAtIHJlcXVlc3QvYWxsb2NhdGUgc3BlY2lmaWVkIGNoYW5uZWwgbnVtYmVyCisgKiBAY2hhbm5lbDogaS5NWCBETUEgY2hhbm5lbCBudW1iZXIKKyAqIEBuYW1lOiB0aGUgZHJpdmVyL2NhbGxlciBvd24gbm9uLSVOVUxMIGlkZW50aWZpY2F0aW9uCisgKi8KK2ludCBpbXhfZG1hX3JlcXVlc3QoaW50IGNoYW5uZWwsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGlteF9kbWFfY2hhbm5lbCAqaW14ZG1hID0gJmlteF9kbWFfY2hhbm5lbHNbY2hhbm5lbF07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCS8qIGJhc2ljIHNhbml0eSBjaGVja3MgKi8KKwlpZiAoIW5hbWUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNoYW5uZWwgPj0gSU1YX0RNQV9DSEFOTkVMUykgeworCQlwcmludGsoS0VSTl9DUklUICIlczogY2FsbGVkIGZvciAgbm9uLWV4aXN0ZWQgY2hhbm5lbCAlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBjaGFubmVsKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWlmIChpbXhkbWEtPm5hbWUpIHsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwltZW1zZXQoaW14ZG1hLCAwLCBzaXplb2YoaW14ZG1hKSk7CisJaW14ZG1hLT5uYW1lID0gbmFtZTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IC8qIHJlcXVlc3RfaXJxKCkgY2FuIGJsb2NrICovCisKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDIKKwlpZiAoY3B1X2lzX214MjEoKSB8fCBjcHVfaXNfbXgyNygpKSB7CisJCXJldCA9IHJlcXVlc3RfaXJxKE1YMnhfSU5UX0RNQUNIMCArIGNoYW5uZWwsCisJCQkJZG1hX2lycV9oYW5kbGVyLCAwLCAiRE1BIiwgTlVMTCk7CisJCWlmIChyZXQpIHsKKwkJCWlteGRtYS0+bmFtZSA9IE5VTEw7CisJCQlwcl9jcml0KCJDYW4ndCByZWdpc3RlciBJUlEgJWQgZm9yIERNQSBjaGFubmVsICVkXG4iLAorCQkJCQlNWDJ4X0lOVF9ETUFDSDAgKyBjaGFubmVsLCBjaGFubmVsKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJaW5pdF90aW1lcigmaW14ZG1hLT53YXRjaGRvZyk7CisJCWlteGRtYS0+d2F0Y2hkb2cuZnVuY3Rpb24gPSAmaW14X2RtYV93YXRjaGRvZzsKKwkJaW14ZG1hLT53YXRjaGRvZy5kYXRhID0gY2hhbm5lbDsKKwl9CisjZW5kaWYKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGlteF9kbWFfcmVxdWVzdCk7CisKKy8qKgorICogaW14X2RtYV9mcmVlIC0gcmVsZWFzZSBwcmV2aW91c2x5IGFjcXVpcmVkIGNoYW5uZWwKKyAqIEBjaGFubmVsOiBpLk1YIERNQSBjaGFubmVsIG51bWJlcgorICovCit2b2lkIGlteF9kbWFfZnJlZShpbnQgY2hhbm5lbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpbXhfZG1hX2NoYW5uZWwgKmlteGRtYSA9ICZpbXhfZG1hX2NoYW5uZWxzW2NoYW5uZWxdOworCisJaWYgKCFpbXhkbWEtPm5hbWUpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVAorCQkgICAgICAgIiVzOiB0cnlpbmcgdG8gZnJlZSBmcmVlIGNoYW5uZWwgJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgY2hhbm5lbCk7CisJCXJldHVybjsKKwl9CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCisJaW14X2RtYV9kaXNhYmxlKGNoYW5uZWwpOworCWlteGRtYS0+bmFtZSA9IE5VTEw7CisKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDIKKwlpZiAoY3B1X2lzX214MjEoKSB8fCBjcHVfaXNfbXgyNygpKQorCQlmcmVlX2lycShNWDJ4X0lOVF9ETUFDSDAgKyBjaGFubmVsLCBOVUxMKTsKKyNlbmRpZgorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChpbXhfZG1hX2ZyZWUpOworCisvKioKKyAqIGlteF9kbWFfcmVxdWVzdF9ieV9wcmlvIC0gZmluZCBhbmQgcmVxdWVzdCBzb21lIG9mIGZyZWUgY2hhbm5lbHMgYmVzdAorICogc3VpdGluZyByZXF1ZXN0ZWQgcHJpb3JpdHkKKyAqIEBjaGFubmVsOiBpLk1YIERNQSBjaGFubmVsIG51bWJlcgorICogQG5hbWU6IHRoZSBkcml2ZXIvY2FsbGVyIG93biBub24tJU5VTEwgaWRlbnRpZmljYXRpb24KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGZpbmQgYSBmcmVlIGNoYW5uZWwgaW4gdGhlIHNwZWNpZmllZCBwcmlvcml0eSBncm91cAorICogaWYgdGhlIHByaW9yaXR5IGNhbm5vdCBiZSBhY2hpZXZlZCBpdCB0cmllcyB0byBsb29rIGZvciBmcmVlIGNoYW5uZWwKKyAqIGluIHRoZSBoaWdoZXIgYW5kIHRoZW4gZXZlbiBsb3dlciBwcmlvcml0eSBncm91cHMuCisgKgorICogUmV0dXJuIHZhbHVlOiBJZiB0aGVyZSBpcyBubyBmcmVlIGNoYW5uZWwgdG8gYWxsb2NhdGUsIC0lRU5PREVWIGlzIHJldHVybmVkLgorICogICAgICAgICAgICAgICBPbiBzdWNjZXNzZnVsIGFsbG9jYXRpb24gY2hhbm5lbCBpcyByZXR1cm5lZC4KKyAqLworaW50IGlteF9kbWFfcmVxdWVzdF9ieV9wcmlvKGNvbnN0IGNoYXIgKm5hbWUsIGVudW0gaW14X2RtYV9wcmlvIHByaW8pCit7CisJaW50IGk7CisJaW50IGJlc3Q7CisKKwlzd2l0Y2ggKHByaW8pIHsKKwljYXNlIChETUFfUFJJT19ISUdIKToKKwkJYmVzdCA9IDg7CisJCWJyZWFrOworCWNhc2UgKERNQV9QUklPX01FRElVTSk6CisJCWJlc3QgPSA0OworCQlicmVhazsKKwljYXNlIChETUFfUFJJT19MT1cpOgorCWRlZmF1bHQ6CisJCWJlc3QgPSAwOworCQlicmVhazsKKwl9CisKKwlmb3IgKGkgPSBiZXN0OyBpIDwgSU1YX0RNQV9DSEFOTkVMUzsgaSsrKQorCQlpZiAoIWlteF9kbWFfcmVxdWVzdChpLCBuYW1lKSkKKwkJCXJldHVybiBpOworCisJZm9yIChpID0gYmVzdCAtIDE7IGkgPj0gMDsgaS0tKQorCQlpZiAoIWlteF9kbWFfcmVxdWVzdChpLCBuYW1lKSkKKwkJCXJldHVybiBpOworCisJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gZnJlZSBETUEgY2hhbm5lbCBmb3VuZFxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIC1FTk9ERVY7Cit9CitFWFBPUlRfU1lNQk9MKGlteF9kbWFfcmVxdWVzdF9ieV9wcmlvKTsKKworc3RhdGljIGludCBfX2luaXQgaW14X2RtYV9pbml0KHZvaWQpCit7CisJaW50IHJldCA9IDA7CisJaW50IGk7CisKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDEKKwlpZiAoY3B1X2lzX214MSgpKQorCQlpbXhfZG1hdjFfYmFzZWFkZHIgPSBNWDFfSU9fQUREUkVTUyhNWDFfRE1BX0JBU0VfQUREUik7CisJZWxzZQorI2VuZGlmCisjaWZkZWYgQ09ORklHX01BQ0hfTVgyMQorCWlmIChjcHVfaXNfbXgyMSgpKQorCQlpbXhfZG1hdjFfYmFzZWFkZHIgPSBNWDIxX0lPX0FERFJFU1MoTVgyMV9ETUFfQkFTRV9BRERSKTsKKwllbHNlCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDI3CisJaWYgKGNwdV9pc19teDI3KCkpCisJCWlteF9kbWF2MV9iYXNlYWRkciA9IE1YMjdfSU9fQUREUkVTUyhNWDI3X0RNQV9CQVNFX0FERFIpOworCWVsc2UKKyNlbmRpZgorCQlCVUcoKTsKKworCWRtYV9jbGsgPSBjbGtfZ2V0KE5VTEwsICJkbWEiKTsKKwljbGtfZW5hYmxlKGRtYV9jbGspOworCisJLyogcmVzZXQgRE1BIG1vZHVsZSAqLworCWlteF9kbWF2MV93cml0ZWwoRENSX0RSU1QsIERNQV9EQ1IpOworCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgxCisJaWYgKGNwdV9pc19teDEoKSkgeworCQlyZXQgPSByZXF1ZXN0X2lycShNWDFfRE1BX0lOVCwgZG1hX2lycV9oYW5kbGVyLCAwLCAiRE1BIiwgTlVMTCk7CisJCWlmIChyZXQpIHsKKwkJCXByX2NyaXQoIldvdyEgIENhbid0IHJlZ2lzdGVyIElSUSBmb3IgRE1BXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlyZXQgPSByZXF1ZXN0X2lycShNWDFfRE1BX0VSUiwgZG1hX2Vycl9oYW5kbGVyLCAwLCAiRE1BIiwgTlVMTCk7CisJCWlmIChyZXQpIHsKKwkJCXByX2NyaXQoIldvdyEgIENhbid0IHJlZ2lzdGVyIEVSUklSUSBmb3IgRE1BXG4iKTsKKwkJCWZyZWVfaXJxKE1YMV9ETUFfSU5ULCBOVUxMKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisjZW5kaWYKKwkvKiBlbmFibGUgRE1BIG1vZHVsZSAqLworCWlteF9kbWF2MV93cml0ZWwoRENSX0RFTiwgRE1BX0RDUik7CisKKwkvKiBjbGVhciBhbGwgaW50ZXJydXB0cyAqLworCWlteF9kbWF2MV93cml0ZWwoKDEgPDwgSU1YX0RNQV9DSEFOTkVMUykgLSAxLCBETUFfRElTUik7CisKKwkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KKwlpbXhfZG1hdjFfd3JpdGVsKCgxIDw8IElNWF9ETUFfQ0hBTk5FTFMpIC0gMSwgRE1BX0RJTVIpOworCisJZm9yIChpID0gMDsgaSA8IElNWF9ETUFfQ0hBTk5FTFM7IGkrKykgeworCQlpbXhfZG1hX2NoYW5uZWxzW2ldLnNnID0gTlVMTDsKKwkJaW14X2RtYV9jaGFubmVsc1tpXS5kbWFfbnVtID0gaTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCithcmNoX2luaXRjYWxsKGlteF9kbWFfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9ldWtyZWFfbWJpbXgyNy1iYXNlYm9hcmQuYyBiL2FyY2gvYXJtL21hY2gtaW14L2V1a3JlYV9tYmlteDI3LWJhc2Vib2FyZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZGM1ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9ldWtyZWFfbWJpbXgyNy1iYXNlYm9hcmQuYwpAQCAtMCwwICsxLDM5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEVyaWMgQmVuYXJkIC0gZXJpY0BldWtyZWEuY29tCisgKgorICogQmFzZWQgb24gcGNtOTcwLWJhc2Vib2FyZC5jIHdoaWNoIGlzIDoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBKdWVyZ2VuIEJlaXNlcnQgKGtlcm5lbEBwZW5ndXRyb25peC5kZSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgorI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgorI2luY2x1ZGUgPHZpZGVvL3BsYXRmb3JtX2xjZC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC1teDI3Lmg+CisjaW5jbHVkZSA8bWFjaC9pbXhmYi5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorI2luY2x1ZGUgPG1hY2gvc3BpLmg+CisjaW5jbHVkZSA8bWFjaC9zc2kuaD4KKyNpbmNsdWRlIDxtYWNoL2F1ZG11eC5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy1pbXgyNy5oIgorI2luY2x1ZGUgImRldmljZXMuaCIKKworc3RhdGljIGludCBldWtyZWFfbWJpbXgyN19waW5zW10gPSB7CisJLyogVUFSVDIgKi8KKwlQRTNfUEZfVUFSVDJfQ1RTLAorCVBFNF9QRl9VQVJUMl9SVFMsCisJUEU2X1BGX1VBUlQyX1RYRCwKKwlQRTdfUEZfVUFSVDJfUlhELAorCS8qIFVBUlQzICovCisJUEU4X1BGX1VBUlQzX1RYRCwKKwlQRTlfUEZfVUFSVDNfUlhELAorCVBFMTBfUEZfVUFSVDNfQ1RTLAorCVBFMTFfUEZfVUFSVDNfUlRTLAorCS8qIFVBUlQ0ICovCisjaWYgIWRlZmluZWQoTUFDSF9FVUtSRUFfQ1BVSU1YMjdfVVNFVUFSVDQpCisJUEIyNl9BRl9VQVJUNF9SVFMsCisJUEIyOF9BRl9VQVJUNF9UWEQsCisJUEIyOV9BRl9VQVJUNF9DVFMsCisJUEIzMV9BRl9VQVJUNF9SWEQsCisjZW5kaWYKKwkvKiBTREhDMSovCisJUEUxOF9QRl9TRDFfRDAsCisJUEUxOV9QRl9TRDFfRDEsCisJUEUyMF9QRl9TRDFfRDIsCisJUEUyMV9QRl9TRDFfRDMsCisJUEUyMl9QRl9TRDFfQ01ELAorCVBFMjNfUEZfU0QxX0NMSywKKwkvKiBkaXNwbGF5ICovCisJUEE1X1BGX0xTQ0xLLAorCVBBNl9QRl9MRDAsCisJUEE3X1BGX0xEMSwKKwlQQThfUEZfTEQyLAorCVBBOV9QRl9MRDMsCisJUEExMF9QRl9MRDQsCisJUEExMV9QRl9MRDUsCisJUEExMl9QRl9MRDYsCisJUEExM19QRl9MRDcsCisJUEExNF9QRl9MRDgsCisJUEExNV9QRl9MRDksCisJUEExNl9QRl9MRDEwLAorCVBBMTdfUEZfTEQxMSwKKwlQQTE4X1BGX0xEMTIsCisJUEExOV9QRl9MRDEzLAorCVBBMjBfUEZfTEQxNCwKKwlQQTIxX1BGX0xEMTUsCisJUEEyMl9QRl9MRDE2LAorCVBBMjNfUEZfTEQxNywKKwlQQTI4X1BGX0hTWU5DLAorCVBBMjlfUEZfVlNZTkMsCisJUEEzMF9QRl9DT05UUkFTVCwKKwlQQTMxX1BGX09FX0FDRCwKKwkvKiBTUEkxICovCisJUEQyOV9QRl9DU1BJMV9TQ0xLLAorCVBEMzBfUEZfQ1NQSTFfTUlTTywKKwlQRDMxX1BGX0NTUEkxX01PU0ksCisJLyogU1NJNCAqLworI2lmIGRlZmluZWQoQ09ORklHX1NORF9TT0NfRVVLUkVBX1RMVjMyMCkgXAorCXx8IGRlZmluZWQoQ09ORklHX1NORF9TT0NfRVVLUkVBX1RMVjMyMF9NT0RVTEUpCisJUEMxNl9QRl9TU0k0X0ZTLAorCVBDMTdfUEZfU1NJNF9SWEQgfCBHUElPX1BVRU4sCisJUEMxOF9QRl9TU0k0X1RYRCB8IEdQSU9fUFVFTiwKKwlQQzE5X1BGX1NTSTRfQ0xLLAorI2VuZGlmCit9OworCitzdGF0aWMgY29uc3QgdWludDMyX3QgZXVrcmVhX21iaW14Mjdfa2V5bWFwW10gPSB7CisJS0VZKDAsIDAsIEtFWV9VUCksCisJS0VZKDAsIDEsIEtFWV9ET1dOKSwKKwlLRVkoMSwgMCwgS0VZX1JJR0hUKSwKKwlLRVkoMSwgMSwgS0VZX0xFRlQpLAorfTsKKworc3RhdGljIHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgZXVrcmVhX21iaW14Mjdfa2V5bWFwX2RhdGEgPSB7CisJLmtleW1hcCAgICAgICAgID0gZXVrcmVhX21iaW14Mjdfa2V5bWFwLAorCS5rZXltYXBfc2l6ZSAgICA9IEFSUkFZX1NJWkUoZXVrcmVhX21iaW14Mjdfa2V5bWFwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZ3Bpb19sZWRzW10gPSB7CisJeworCQkubmFtZQkJCT0gImxlZDEiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJCS5ncGlvCQkJPSBHUElPX1BPUlRGIHwgMTYsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAibGVkMiIsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJCS5ncGlvCQkJPSBHUElPX1BPUlRGIHwgMTksCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBncGlvX2xlZF9pbmZvID0geworCS5sZWRzCQk9IGdwaW9fbGVkcywKKwkubnVtX2xlZHMJPSBBUlJBWV9TSVpFKGdwaW9fbGVkcyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBsZWRzX2dwaW8gPSB7CisJLm5hbWUJPSAibGVkcy1ncGlvIiwKKwkuaWQJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZncGlvX2xlZF9pbmZvLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGlteF9mYl92aWRlb21vZGUgZXVrcmVhX21iaW14MjdfbW9kZXNbXSA9IHsKKwl7CisJCS5tb2RlID0geworCQkJLm5hbWUJCT0gIkNNTy1RVkdBIiwKKwkJCS5yZWZyZXNoCT0gNjAsCisJCQkueHJlcwkJPSAzMjAsCisJCQkueXJlcwkJPSAyNDAsCisJCQkucGl4Y2xvY2sJPSAxNTYwMDAsCisJCQkuaHN5bmNfbGVuCT0gMzAsCisJCQkubGVmdF9tYXJnaW4JPSAzOCwKKwkJCS5yaWdodF9tYXJnaW4JPSAyMCwKKwkJCS52c3luY19sZW4JPSAzLAorCQkJLnVwcGVyX21hcmdpbgk9IDE1LAorCQkJLmxvd2VyX21hcmdpbgk9IDQsCisJCX0sCisJCS5wY3IJCT0gMHhGQUQwOEI4MCwKKwkJLmJwcAkJPSAxNiwKKwl9LCB7CisJCS5tb2RlID0geworCQkJLm5hbWUJCT0gIkRWSS1WR0EiLAorCQkJLnJlZnJlc2gJPSA2MCwKKwkJCS54cmVzCQk9IDY0MCwKKwkJCS55cmVzCQk9IDQ4MCwKKwkJCS5waXhjbG9jawk9IDMyMDAwLAorCQkJLmhzeW5jX2xlbgk9IDEsCisJCQkubGVmdF9tYXJnaW4JPSAzNSwKKwkJCS5yaWdodF9tYXJnaW4JPSAwLAorCQkJLnZzeW5jX2xlbgk9IDEsCisJCQkudXBwZXJfbWFyZ2luCT0gNywKKwkJCS5sb3dlcl9tYXJnaW4JPSAwLAorCQl9LAorCQkucGNyCQk9IDB4RkEyMDhCODAsCisJCS5icHAJCT0gMTYsCisJfSwgeworCQkubW9kZSA9IHsKKwkJCS5uYW1lCQk9ICJEVkktU1ZHQSIsCisJCQkucmVmcmVzaAk9IDYwLAorCQkJLnhyZXMJCT0gODAwLAorCQkJLnlyZXMJCT0gNjAwLAorCQkJLnBpeGNsb2NrCT0gMjUwMDAsCisJCQkuaHN5bmNfbGVuCT0gMSwKKwkJCS5sZWZ0X21hcmdpbgk9IDM1LAorCQkJLnJpZ2h0X21hcmdpbgk9IDAsCisJCQkudnN5bmNfbGVuCT0gMSwKKwkJCS51cHBlcl9tYXJnaW4JPSA3LAorCQkJLmxvd2VyX21hcmdpbgk9IDAsCisJCX0sCisJCS5wY3IJCT0gMHhGQTIwOEI4MCwKKwkJLmJwcAkJPSAxNiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBpbXhfZmJfcGxhdGZvcm1fZGF0YSBldWtyZWFfbWJpbXgyN19mYl9kYXRhID0geworCS5tb2RlID0gZXVrcmVhX21iaW14MjdfbW9kZXMsCisJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUoZXVrcmVhX21iaW14MjdfbW9kZXMpLAorCisJLnB3bXIJCT0gMHgwMEE5MDNGRiwKKwkubHNjcjEJCT0gMHgwMDEyMDMwMCwKKwkuZG1hY3IJCT0gMHgwMDA0MDA2MCwKK307CisKK3N0YXRpYyB2b2lkIGV1a3JlYV9tYmlteDI3X2JsX3NldF9pbnRlbnNpdHkoaW50IGludGVuc2l0eSkKK3sKKwlpZiAoaW50ZW5zaXR5KQorCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QT1JURSB8IDUsIDEpOworCWVsc2UKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUE9SVEUgfCA1LCAwKTsKK30KKworc3RhdGljIHN0cnVjdCBnZW5lcmljX2JsX2luZm8gZXVrcmVhX21iaW14MjdfYmxfaW5mbyA9IHsKKwkubmFtZQkJCT0gImV1a3JlYV9tYmlteDI3LWJsIiwKKwkubWF4X2ludGVuc2l0eQkJPSAweGZmLAorCS5kZWZhdWx0X2ludGVuc2l0eQk9IDB4ZmYsCisJLnNldF9ibF9pbnRlbnNpdHkJPSBldWtyZWFfbWJpbXgyN19ibF9zZXRfaW50ZW5zaXR5LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXVrcmVhX21iaW14MjdfYmxfZGV2ID0geworCS5uYW1lCQkJPSAiZ2VuZXJpYy1ibCIsCisJLmlkCQkJPSAxLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmV1a3JlYV9tYmlteDI3X2JsX2luZm8sCisJfSwKK307CisKK3N0YXRpYyB2b2lkIGV1a3JlYV9tYmlteDI3X2xjZF9wb3dlcl9zZXQoc3RydWN0IHBsYXRfbGNkX2RhdGEgKnBkLAorCQkJCSAgIHVuc2lnbmVkIGludCBwb3dlcikKK3sKKwlpZiAocG93ZXIpCisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BPUlRBIHwgMjUsIDEpOworCWVsc2UKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUE9SVEEgfCAyNSwgMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9sY2RfZGF0YSBldWtyZWFfbWJpbXgyN19sY2RfcG93ZXJfZGF0YSA9IHsKKwkuc2V0X3Bvd2VyCQk9IGV1a3JlYV9tYmlteDI3X2xjZF9wb3dlcl9zZXQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBldWtyZWFfbWJpbXgyN19sY2RfcG93ZXJkZXYgPSB7CisJLm5hbWUJCQk9ICJwbGF0Zm9ybS1sY2QiLAorCS5kZXYucGxhdGZvcm1fZGF0YQk9ICZldWtyZWFfbWJpbXgyN19sY2RfcG93ZXJfZGF0YSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgX19pbml0Y29uc3QgPSB7CisJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2KSBcCisJfHwgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nl9NT0RVTEUpCisKKyNkZWZpbmUgQURTNzg0Nl9QRU5ET1dOIChHUElPX1BPUlREIHwgMjUpCisKK3N0YXRpYyB2b2lkIGFkczc4NDZfZGV2X2luaXQodm9pZCkKK3sKKwlpZiAoZ3Bpb19yZXF1ZXN0KEFEUzc4NDZfUEVORE9XTiwgIkFEUzc4NDYgcGVuZG93biIpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGdldCBhZHM3NDYgcGVuIGRvd24gR1BJT1xuIik7CisJCXJldHVybjsKKwl9CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoQURTNzg0Nl9QRU5ET1dOKTsKK30KKworc3RhdGljIGludCBhZHM3ODQ2X2dldF9wZW5kb3duX3N0YXRlKHZvaWQpCit7CisJcmV0dXJuICFncGlvX2dldF92YWx1ZShBRFM3ODQ2X1BFTkRPV04pOworfQorCitzdGF0aWMgc3RydWN0IGFkczc4NDZfcGxhdGZvcm1fZGF0YSBhZHM3ODQ2X2NvbmZpZyBfX2luaXRkYXRhID0geworCS5nZXRfcGVuZG93bl9zdGF0ZQk9IGFkczc4NDZfZ2V0X3BlbmRvd25fc3RhdGUsCisJLmtlZXBfdnJlZl9vbgkJPSAxLAorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX0lNWCkgfHwgZGVmaW5lZChDT05GSUdfU1BJX0lNWF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGV1a3JlYV9tYmlteDI3X3NwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKKwlbMF0gPSB7CisJCS5tb2RhbGlhcwk9ICJhZHM3ODQ2IiwKKwkJLmJ1c19udW0JPSAwLAorCQkuY2hpcF9zZWxlY3QJPSAwLAorCQkubWF4X3NwZWVkX2h6CT0gMTUwMDAwMCwKKwkJLmlycQkJPSBJUlFfR1BJT0QoMjUpLAorCQkucGxhdGZvcm1fZGF0YQk9ICZhZHM3ODQ2X2NvbmZpZywKKwkJLm1vZGUgICAgICAgICAgID0gU1BJX01PREVfMiwKKwl9LAorfTsKKworc3RhdGljIGludCBldWtyZWFfbWJpbXgyN19zcGlfY3NbXSA9IHtHUElPX1BPUlREIHwgMjh9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9pbXhfbWFzdGVyIGV1a3JlYV9tYmlteDI3X3NwaTBfZGF0YSBfX2luaXRjb25zdCA9IHsKKwkuY2hpcHNlbGVjdAk9IGV1a3JlYV9tYmlteDI3X3NwaV9jcywKKwkubnVtX2NoaXBzZWxlY3QgPSBBUlJBWV9TSVpFKGV1a3JlYV9tYmlteDI3X3NwaV9jcyksCit9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gZXVrcmVhX21iaW14MjdfaTJjX2RldmljZXNbXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJ0bHYzMjBhaWMyMyIsIDB4MWEpLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmxlZHNfZ3BpbywKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW14bW1jX3BsYXRmb3JtX2RhdGEgc2RoY19wZGF0YSA9IHsKKwkuZGF0M19jYXJkX2RldGVjdCA9IDEsCit9OworCitzdHJ1Y3QgaW14X3NzaV9wbGF0Zm9ybV9kYXRhIGV1a3JlYV9tYmlteDI3X3NzaV9wZGF0YSA9IHsKKwkuZmxhZ3MgPSBJTVhfU1NJX0RNQSB8IElNWF9TU0lfVVNFX0kyU19TTEFWRSwKK307CisKKy8qCisgKiBzeXN0ZW0gaW5pdCBmb3IgYmFzZWJvYXJkIHVzYWdlLiBXaWxsIGJlIGNhbGxlZCBieSBjcHVpbXgyNyBpbml0LgorICoKKyAqIEFkZCBwbGF0Zm9ybSBkZXZpY2VzIHByZXNlbnQgb24gdGhpcyBiYXNlYm9hcmQgYW5kIGluaXQKKyAqIHRoZW0gZnJvbSBDUFUgc2lkZSBhcyBmYXIgYXMgcmVxdWlyZWQgdG8gdXNlIHRoZW0gbGF0ZXIgb24KKyAqLwordm9pZCBfX2luaXQgZXVrcmVhX21iaW14MjdfYmFzZWJvYXJkX2luaXQodm9pZCkKK3sKKwlteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKGV1a3JlYV9tYmlteDI3X3BpbnMsCisJCUFSUkFZX1NJWkUoZXVrcmVhX21iaW14MjdfcGlucyksICJNQklNWDI3Iik7CisKKyNpZiBkZWZpbmVkKENPTkZJR19TTkRfU09DX0VVS1JFQV9UTFYzMjApIFwKKwl8fCBkZWZpbmVkKENPTkZJR19TTkRfU09DX0VVS1JFQV9UTFYzMjBfTU9EVUxFKQorCS8qIFNTSSB1bml0IG1hc3RlciBJMlMgY29kZWMgY29ubmVjdGVkIHRvIFNTSV9QSU5TXzQqLworCW14Y19hdWRtdXhfdjFfY29uZmlndXJlX3BvcnQoTVgyN19BVURNVVhfSFBDUjFfU1NJMCwKKwkJCU1YQ19BVURNVVhfVjFfUENSX1NZTiB8CisJCQlNWENfQVVETVVYX1YxX1BDUl9URlNESVIgfAorCQkJTVhDX0FVRE1VWF9WMV9QQ1JfVENMS0RJUiB8CisJCQlNWENfQVVETVVYX1YxX1BDUl9SRlNESVIgfAorCQkJTVhDX0FVRE1VWF9WMV9QQ1JfUkNMS0RJUiB8CisJCQlNWENfQVVETVVYX1YxX1BDUl9URkNTRUwoTVgyN19BVURNVVhfSFBDUjNfU1NJX1BJTlNfNCkgfAorCQkJTVhDX0FVRE1VWF9WMV9QQ1JfUkZDU0VMKE1YMjdfQVVETVVYX0hQQ1IzX1NTSV9QSU5TXzQpIHwKKwkJCU1YQ19BVURNVVhfVjFfUENSX1JYRFNFTChNWDI3X0FVRE1VWF9IUENSM19TU0lfUElOU180KQorCSk7CisJbXhjX2F1ZG11eF92MV9jb25maWd1cmVfcG9ydChNWDI3X0FVRE1VWF9IUENSM19TU0lfUElOU180LAorCQkJTVhDX0FVRE1VWF9WMV9QQ1JfU1lOIHwKKwkJCU1YQ19BVURNVVhfVjFfUENSX1JYRFNFTChNWDI3X0FVRE1VWF9IUENSMV9TU0kwKQorCSk7CisjZW5kaWYKKworCWlteDI3X2FkZF9pbXhfdWFydDEoJnVhcnRfcGRhdGEpOworCWlteDI3X2FkZF9pbXhfdWFydDIoJnVhcnRfcGRhdGEpOworI2lmICFkZWZpbmVkKE1BQ0hfRVVLUkVBX0NQVUlNWDI3X1VTRVVBUlQ0KQorCWlteDI3X2FkZF9pbXhfdWFydDMoJnVhcnRfcGRhdGEpOworI2VuZGlmCisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfZmJfZGV2aWNlLCAmZXVrcmVhX21iaW14MjdfZmJfZGF0YSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NkaGNfZGV2aWNlMCwgJnNkaGNfcGRhdGEpOworCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZXVrcmVhX21iaW14MjdfaTJjX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShldWtyZWFfbWJpbXgyN19pMmNfZGV2aWNlcykpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmaW14X3NzaV9kZXZpY2UwLCAmZXVrcmVhX21iaW14Mjdfc3NpX3BkYXRhKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYpIFwKKwl8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2X01PRFVMRSkKKwkvKiBBRFM3ODQ2IFRvdWNoc2NyZWVuIGNvbnRyb2xsZXIgaW5pdCAqLworCW14Y19ncGlvX21vZGUoR1BJT19QT1JURCB8IDI1IHwgR1BJT19HUElPIHwgR1BJT19JTik7CisJYWRzNzg0Nl9kZXZfaW5pdCgpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfSU1YKSB8fCBkZWZpbmVkKENPTkZJR19TUElfSU1YX01PRFVMRSkKKwkvKiBTUElfQ1MwIGluaXQgKi8KKwlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEQgfCAyOCB8IEdQSU9fR1BJTyB8IEdQSU9fT1VUKTsKKwlpbXgyN19hZGRfc3BpX2lteDAoJmV1a3JlYV9tYmlteDI3X3NwaTBfZGF0YSk7CisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oZXVrcmVhX21iaW14Mjdfc3BpX2JvYXJkX2luZm8sCisJCQlBUlJBWV9TSVpFKGV1a3JlYV9tYmlteDI3X3NwaV9ib2FyZF9pbmZvKSk7CisjZW5kaWYKKworCS8qIExlZHMgY29uZmlndXJhdGlvbiAqLworCW14Y19ncGlvX21vZGUoR1BJT19QT1JURiB8IDE2IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOworCW14Y19ncGlvX21vZGUoR1BJT19QT1JURiB8IDE5IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOworCS8qIEJhY2tsaWdodCAqLworCW14Y19ncGlvX21vZGUoR1BJT19QT1JURSB8IDUgfCBHUElPX0dQSU8gfCBHUElPX09VVCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fUE9SVEUgfCA1LCAiYmFja2xpZ2h0Iik7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZldWtyZWFfbWJpbXgyN19ibF9kZXYpOworCS8qIExDRCBSZXNldCAqLworCW14Y19ncGlvX21vZGUoR1BJT19QT1JUQSB8IDI1IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOworCWdwaW9fcmVxdWVzdChHUElPX1BPUlRBIHwgMjUsICJsY2RfZW5hYmxlIik7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZldWtyZWFfbWJpbXgyN19sY2RfcG93ZXJkZXYpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmaW14X2twcF9kZXZpY2UsICZldWtyZWFfbWJpbXgyN19rZXltYXBfZGF0YSk7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZpY2VzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldmljZXMpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2luY2x1ZGUvbWFjaC9kbWEtbXgxLW14Mi5oIGIvYXJjaC9hcm0vbWFjaC1pbXgvaW5jbHVkZS9tYWNoL2RtYS1teDEtbXgyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY1ZjUyMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2luY2x1ZGUvbWFjaC9kbWEtbXgxLW14Mi5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX19NQUNIX0RNQV9NWDFfTVgyX0hfXworI2RlZmluZSBfX01BQ0hfRE1BX01YMV9NWDJfSF9fCisvKgorICogRG9uJ3QgdXNlIHRoaXMgaGVhZGVyIGluIG5ldyBjb2RlLCBpdCB3aWxsIGdvIGF3YXkgd2hlbiBhbGwgdXNlcnMgYXJlCisgKiBjb252ZXJ0ZWQgdG8gbWFjaC9kbWEtdjEuaAorICovCisKKyNpbmNsdWRlIDxtYWNoL2RtYS12MS5oPgorCisjZW5kaWYgLyogaWZuZGVmIF9fTUFDSF9ETUFfTVgxX01YMl9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2luY2x1ZGUvbWFjaC9kbWEtdjEuaCBiL2FyY2gvYXJtL21hY2gtaW14L2luY2x1ZGUvbWFjaC9kbWEtdjEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODc0MzFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvaW5jbHVkZS9tYWNoL2RtYS12MS5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtaW14L2luY2x1ZGUvbWFjaC9kbWEtdjEuaAorICoKKyAqICBpLk1YIERNQSByZWdpc3RyYXRpb24gYW5kIElSUSBkaXNwYXRjaGluZworICoKKyAqIENvcHlyaWdodCAyMDA2IFBhdmVsIFBpc2EgPHBpc2FAY21wLmZlbGsuY3Z1dC5jej4KKyAqIENvcHlyaWdodCAyMDA4IEp1ZXJnZW4gQmVpc2VydCwgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyAqIENvcHlyaWdodCAyMDA4IFNhc2NoYSBIYXVlciwgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBfX01BQ0hfRE1BX1YxX0hfXworI2RlZmluZSBfX01BQ0hfRE1BX1YxX0hfXworCisjZGVmaW5lIGlteF9oYXNfZG1hX3YxKCkJKGNwdV9pc19teDEoKSB8fCBjcHVfaXNfbXgyMSgpIHx8IGNwdV9pc19teDI3KCkpCisKKyNkZWZpbmUgSU1YX0RNQV9DSEFOTkVMUyAgMTYKKworI2RlZmluZSBETUFfTU9ERV9SRUFECQkwCisjZGVmaW5lIERNQV9NT0RFX1dSSVRFCQkxCisjZGVmaW5lIERNQV9NT0RFX01BU0sJCTEKKworI2RlZmluZSBNWDFfRE1BX1JFRyhvZmZzZXQpCU1YMV9JT19BRERSRVNTKE1YMV9ETUFfQkFTRV9BRERSICsgKG9mZnNldCkpCisKKy8qIERNQSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLworI2RlZmluZSBNWDFfRE1BX0RJTVIJCU1YMV9ETUFfUkVHKDB4MDgpCisKKy8qIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNWDFfRE1BX0NDUih4KQkJTVgxX0RNQV9SRUcoMHg4YyArICgoeCkgPDwgNikpCisKKyNkZWZpbmUgSU1YX0RNQV9NRU1TSVpFXzMyCSgwIDw8IDQpCisjZGVmaW5lIElNWF9ETUFfTUVNU0laRV84CSgxIDw8IDQpCisjZGVmaW5lIElNWF9ETUFfTUVNU0laRV8xNgkoMiA8PCA0KQorI2RlZmluZSBJTVhfRE1BX1RZUEVfTElORUFSCSgwIDw8IDEwKQorI2RlZmluZSBJTVhfRE1BX1RZUEVfMkQJCSgxIDw8IDEwKQorI2RlZmluZSBJTVhfRE1BX1RZUEVfRklGTwkoMiA8PCAxMCkKKworI2RlZmluZSBJTVhfRE1BX0VSUl9CVVJTVCAgICAgKDEgPDwgMCkKKyNkZWZpbmUgSU1YX0RNQV9FUlJfUkVRVUVTVCAgICgxIDw8IDEpCisjZGVmaW5lIElNWF9ETUFfRVJSX1RSQU5TRkVSICAoMSA8PCAyKQorI2RlZmluZSBJTVhfRE1BX0VSUl9CVUZGRVIgICAgKDEgPDwgMykKKyNkZWZpbmUgSU1YX0RNQV9FUlJfVElNRU9VVCAgICgxIDw8IDQpCisKK2ludAoraW14X2RtYV9jb25maWdfY2hhbm5lbChpbnQgY2hhbm5lbCwgdW5zaWduZWQgaW50IGNvbmZpZ19wb3J0LAorCXVuc2lnbmVkIGludCBjb25maWdfbWVtLCB1bnNpZ25lZCBpbnQgZG1hcmVxLCBpbnQgaHdfY2hhaW5pbmcpOworCit2b2lkCitpbXhfZG1hX2NvbmZpZ19idXJzdGxlbihpbnQgY2hhbm5lbCwgdW5zaWduZWQgaW50IGJ1cnN0bGVuKTsKKworaW50CitpbXhfZG1hX3NldHVwX3NpbmdsZShpbnQgY2hhbm5lbCwgZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywKKwkJdW5zaWduZWQgaW50IGRtYV9sZW5ndGgsIHVuc2lnbmVkIGludCBkZXZfYWRkciwKKwkJdW5zaWduZWQgaW50IGRtYW1vZGUpOworCisKKy8qCisgKiBVc2UgdGhpcyBmbGFnIGFzIHRoZSBkbWFfbGVuZ3RoIGFyZ3VtZW50IHRvIGlteF9kbWFfc2V0dXBfc2coKQorICogdG8gY3JlYXRlIGFuIGVuZGxlc3MgcnVubmluZyBkbWEgbG9vcC4gVGhlIGVuZCBvZiB0aGUgc2NhdHRlcmxpc3QKKyAqIG11c3QgYmUgbGlua2VkIHRvIHRoZSBiZWdpbm5pbmcgZm9yIHRoaXMgdG8gd29yay4KKyAqLworI2RlZmluZSBJTVhfRE1BX0xFTkdUSF9MT09QCSgodW5zaWduZWQgaW50KS0xKQorCitpbnQKK2lteF9kbWFfc2V0dXBfc2coaW50IGNoYW5uZWwsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCXVuc2lnbmVkIGludCBzZ2NvdW50LCB1bnNpZ25lZCBpbnQgZG1hX2xlbmd0aCwKKwkJdW5zaWduZWQgaW50IGRldl9hZGRyLCB1bnNpZ25lZCBpbnQgZG1hbW9kZSk7CisKK2ludAoraW14X2RtYV9zZXR1cF9oYW5kbGVycyhpbnQgY2hhbm5lbCwKKwkJdm9pZCAoKmlycV9oYW5kbGVyKSAoaW50LCB2b2lkICopLAorCQl2b2lkICgqZXJyX2hhbmRsZXIpIChpbnQsIHZvaWQgKiwgaW50KSwgdm9pZCAqZGF0YSk7CisKK2ludAoraW14X2RtYV9zZXR1cF9wcm9ncmVzc2lvbl9oYW5kbGVyKGludCBjaGFubmVsLAorCQl2b2lkICgqcHJvZ19oYW5kbGVyKSAoaW50LCB2b2lkKiwgc3RydWN0IHNjYXR0ZXJsaXN0KikpOworCit2b2lkIGlteF9kbWFfZW5hYmxlKGludCBjaGFubmVsKTsKKwordm9pZCBpbXhfZG1hX2Rpc2FibGUoaW50IGNoYW5uZWwpOworCitpbnQgaW14X2RtYV9yZXF1ZXN0KGludCBjaGFubmVsLCBjb25zdCBjaGFyICpuYW1lKTsKKwordm9pZCBpbXhfZG1hX2ZyZWUoaW50IGNoYW5uZWwpOworCitlbnVtIGlteF9kbWFfcHJpbyB7CisJRE1BX1BSSU9fSElHSCA9IDAsCisJRE1BX1BSSU9fTUVESVVNID0gMSwKKwlETUFfUFJJT19MT1cgPSAyCit9OworCitpbnQgaW14X2RtYV9yZXF1ZXN0X2J5X3ByaW8oY29uc3QgY2hhciAqbmFtZSwgZW51bSBpbXhfZG1hX3ByaW8gcHJpbyk7CisKKyNlbmRpZgkvKiBfX01BQ0hfRE1BX1YxX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1jcHVpbXgyNy5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1jcHVpbXgyNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NWZmMWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWNwdWlteDI3LmMKQEAgLTAsMCArMSwzMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRXJpYyBCZW5hcmQgLSBlcmljQGV1a3JlYS5jb20KKyAqCisgKiBCYXNlZCBvbiBwY20wMzguYyB3aGljaCBpcyA6CisgKiBDb3B5cmlnaHQgMjAwNyBSb2JlcnQgU2Nod2ViZWwgPHIuc2Nod2ViZWxAcGVuZ3V0cm9uaXguZGU+LCBQZW5ndXRyb25peAorICogQ29weXJpZ2h0IChDKSAyMDA4IEp1ZXJnZW4gQmVpc2VydCAoa2VybmVsQHBlbmd1dHJvbml4LmRlKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wbGF0LXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3VscGkuaD4KKyNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9ldWtyZWEtYmFzZWJvYXJkcy5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgyNy5oPgorI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KKyNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+CisjaW5jbHVkZSA8bWFjaC91bHBpLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLWlteDI3LmgiCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCitzdGF0aWMgaW50IGV1a3JlYV9jcHVpbXgyN19waW5zW10gPSB7CisJLyogVUFSVDEgKi8KKwlQRTEyX1BGX1VBUlQxX1RYRCwKKwlQRTEzX1BGX1VBUlQxX1JYRCwKKwlQRTE0X1BGX1VBUlQxX0NUUywKKwlQRTE1X1BGX1VBUlQxX1JUUywKKwkvKiBVQVJUNCAqLworI2lmIGRlZmluZWQoTUFDSF9FVUtSRUFfQ1BVSU1YMjdfVVNFVUFSVDQpCisJUEIyNl9BRl9VQVJUNF9SVFMsCisJUEIyOF9BRl9VQVJUNF9UWEQsCisJUEIyOV9BRl9VQVJUNF9DVFMsCisJUEIzMV9BRl9VQVJUNF9SWEQsCisjZW5kaWYKKwkvKiBGRUMgKi8KKwlQRDBfQUlOX0ZFQ19UWEQwLAorCVBEMV9BSU5fRkVDX1RYRDEsCisJUEQyX0FJTl9GRUNfVFhEMiwKKwlQRDNfQUlOX0ZFQ19UWEQzLAorCVBENF9BT1VUX0ZFQ19SWF9FUiwKKwlQRDVfQU9VVF9GRUNfUlhEMSwKKwlQRDZfQU9VVF9GRUNfUlhEMiwKKwlQRDdfQU9VVF9GRUNfUlhEMywKKwlQRDhfQUZfRkVDX01ESU8sCisJUEQ5X0FJTl9GRUNfTURDLAorCVBEMTBfQU9VVF9GRUNfQ1JTLAorCVBEMTFfQU9VVF9GRUNfVFhfQ0xLLAorCVBEMTJfQU9VVF9GRUNfUlhEMCwKKwlQRDEzX0FPVVRfRkVDX1JYX0RWLAorCVBEMTRfQU9VVF9GRUNfUlhfQ0xLLAorCVBEMTVfQU9VVF9GRUNfQ09MLAorCVBEMTZfQUlOX0ZFQ19UWF9FUiwKKwlQRjIzX0FJTl9GRUNfVFhfRU4sCisJLyogSTJDMSAqLworCVBEMTdfUEZfSTJDX0RBVEEsCisJUEQxOF9QRl9JMkNfQ0xLLAorCS8qIFNESEMyICovCisjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9FVUtSRUFfQ1BVSU1YMjdfVVNFU0RIQzIpCisJUEI0X1BGX1NEMl9EMCwKKwlQQjVfUEZfU0QyX0QxLAorCVBCNl9QRl9TRDJfRDIsCisJUEI3X1BGX1NEMl9EMywKKwlQQjhfUEZfU0QyX0NNRCwKKwlQQjlfUEZfU0QyX0NMSywKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF84MjUwKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MF9NT0RVTEUpCisJLyogUXVhZCBVQVJUJ3MgSVJRICovCisJR1BJT19QT1JUQiB8IDIyIHwgR1BJT19HUElPIHwgR1BJT19JTiwKKwlHUElPX1BPUlRCIHwgMjMgfCBHUElPX0dQSU8gfCBHUElPX0lOLAorCUdQSU9fUE9SVEIgfCAyNyB8IEdQSU9fR1BJTyB8IEdQSU9fSU4sCisJR1BJT19QT1JUQiB8IDMwIHwgR1BJT19HUElPIHwgR1BJT19JTiwKKyNlbmRpZgorCS8qIE9URyAqLworCVBDN19QRl9VU0JPVEdfREFUQTUsCisJUEM4X1BGX1VTQk9UR19EQVRBNiwKKwlQQzlfUEZfVVNCT1RHX0RBVEEwLAorCVBDMTBfUEZfVVNCT1RHX0RBVEEyLAorCVBDMTFfUEZfVVNCT1RHX0RBVEExLAorCVBDMTJfUEZfVVNCT1RHX0RBVEE0LAorCVBDMTNfUEZfVVNCT1RHX0RBVEEzLAorCVBFMF9QRl9VU0JPVEdfTlhULAorCVBFMV9QRl9VU0JPVEdfU1RQLAorCVBFMl9QRl9VU0JPVEdfRElSLAorCVBFMjRfUEZfVVNCT1RHX0NMSywKKwlQRTI1X1BGX1VTQk9UR19EQVRBNywKKwkvKiBVU0JIMiAqLworCVBBMF9QRl9VU0JIMl9DTEssCisJUEExX1BGX1VTQkgyX0RJUiwKKwlQQTJfUEZfVVNCSDJfREFUQTcsCisJUEEzX1BGX1VTQkgyX05YVCwKKwlQQTRfUEZfVVNCSDJfU1RQLAorCVBEMTlfQUZfVVNCSDJfREFUQTQsCisJUEQyMF9BRl9VU0JIMl9EQVRBMywKKwlQRDIxX0FGX1VTQkgyX0RBVEE2LAorCVBEMjJfQUZfVVNCSDJfREFUQTAsCisJUEQyM19BRl9VU0JIMl9EQVRBMiwKKwlQRDI0X0FGX1VTQkgyX0RBVEExLAorCVBEMjZfQUZfVVNCSDJfREFUQTUsCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBldWtyZWFfY3B1aW14MjdfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGggPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBldWtyZWFfY3B1aW14MjdfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0ID0gMHhjMDAwMDAwMCwKKwkuZW5kICAgPSAweGMzZmZmZmZmLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXVrcmVhX2NwdWlteDI3X25vcl9tdGRfZGV2aWNlID0geworCS5uYW1lID0gInBoeXNtYXAtZmxhc2giLAorCS5pZCA9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZXVrcmVhX2NwdWlteDI3X2ZsYXNoX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcyA9IDEsCisJLnJlc291cmNlID0gJmV1a3JlYV9jcHVpbXgyN19mbGFzaF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgX19pbml0Y29uc3QgPSB7CisJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YQorY3B1aW14MjdfbmFuZF9ib2FyZF9pbmZvIF9faW5pdGNvbnN0ID0geworCS53aWR0aCA9IDEsCisJLmh3X2VjYyA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmV1a3JlYV9jcHVpbXgyN19ub3JfbXRkX2RldmljZSwKKwkmbXhjX2ZlY19kZXZpY2UsCisJJm14Y193ZHQsCisJJm14Y193MV9tYXN0ZXJfZGV2aWNlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBjcHVpbXgyN19pMmMxX2RhdGEgX19pbml0Y29uc3QgPSB7CisJLmJpdHJhdGUgPSAxMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGV1a3JlYV9jcHVpbXgyN19pMmNfZGV2aWNlc1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInBjZjg1NjMiLCAweDUxKSwKKwl9LAorfTsKKworI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF84MjUwKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IHNlcmlhbF9wbGF0Zm9ybV9kYXRhW10gPSB7CisJeworCQkubWFwYmFzZSA9ICh1bnNpZ25lZCBsb25nKShNWDI3X0NTM19CQVNFX0FERFIgKyAweDIwMDAwMCksCisJCS5pcnEgPSBJUlFfR1BJT0IoMjMpLAorCQkudWFydGNsayA9IDE0NzQ1NjAwLAorCQkucmVnc2hpZnQgPSAxLAorCQkuaW90eXBlID0gVVBJT19NRU0sCisJCS5mbGFncyA9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCB8IFVQRl9JT1JFTUFQLAorCX0sIHsKKwkJLm1hcGJhc2UgPSAodW5zaWduZWQgbG9uZykoTVgyN19DUzNfQkFTRV9BRERSICsgMHg0MDAwMDApLAorCQkuaXJxID0gSVJRX0dQSU9CKDIyKSwKKwkJLnVhcnRjbGsgPSAxNDc0NTYwMCwKKwkJLnJlZ3NoaWZ0ID0gMSwKKwkJLmlvdHlwZSA9IFVQSU9fTUVNLAorCQkuZmxhZ3MgPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QgfCBVUEZfSU9SRU1BUCwKKwl9LCB7CisJCS5tYXBiYXNlID0gKHVuc2lnbmVkIGxvbmcpKE1YMjdfQ1MzX0JBU0VfQUREUiArIDB4ODAwMDAwKSwKKwkJLmlycSA9IElSUV9HUElPQigyNyksCisJCS51YXJ0Y2xrID0gMTQ3NDU2MDAsCisJCS5yZWdzaGlmdCA9IDEsCisJCS5pb3R5cGUgPSBVUElPX01FTSwKKwkJLmZsYWdzID0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUIHwgVVBGX0lPUkVNQVAsCisJfSwgeworCQkubWFwYmFzZSA9ICh1bnNpZ25lZCBsb25nKShNWDI3X0NTM19CQVNFX0FERFIgKyAweDEwMDAwMDApLAorCQkuaXJxID0gSVJRX0dQSU9CKDMwKSwKKwkJLnVhcnRjbGsgPSAxNDc0NTYwMCwKKwkJLnJlZ3NoaWZ0ID0gMSwKKwkJLmlvdHlwZSA9IFVQSU9fTUVNLAorCQkuZmxhZ3MgPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QgfCBVUEZfSU9SRU1BUCwKKwl9LCB7CisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2VyaWFsX2RldmljZSA9IHsKKwkubmFtZSA9ICJzZXJpYWw4MjUwIiwKKwkuaWQgPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gc2VyaWFsX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9VTFBJKQorc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIG90Z19wZGF0YSA9IHsKKwkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VTFBJLAorCS5mbGFncwk9IE1YQ19FSENJX0lOVEVSRkFDRV9ESUZGX1VOSSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSB1c2JoMl9wZGF0YSA9IHsKKwkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VTFBJLAorCS5mbGFncwk9IE1YQ19FSENJX0lOVEVSRkFDRV9ESUZGX1VOSSwKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIG90Z19kZXZpY2VfcGRhdGEgPSB7CisJLm9wZXJhdGluZ19tb2RlID0gRlNMX1VTQjJfRFJfREVWSUNFLAorCS5waHlfbW9kZSAgICAgICA9IEZTTF9VU0IyX1BIWV9VTFBJLAorfTsKKworc3RhdGljIGludCBvdGdfbW9kZV9ob3N0OworCitzdGF0aWMgaW50IF9faW5pdCBldWtyZWFfY3B1aW14Mjdfb3RnX21vZGUoY2hhciAqb3B0aW9ucykKK3sKKwlpZiAoIXN0cmNtcChvcHRpb25zLCAiaG9zdCIpKQorCQlvdGdfbW9kZV9ob3N0ID0gMTsKKwllbHNlIGlmICghc3RyY21wKG9wdGlvbnMsICJkZXZpY2UiKSkKKwkJb3RnX21vZGVfaG9zdCA9IDA7CisJZWxzZQorCQlwcl9pbmZvKCJvdGdfbW9kZSBuZWl0aGVyIFwiaG9zdFwiIG5vciBcImRldmljZVwiLiAiCisJCQkiRGVmYXVsdGluZyB0byBkZXZpY2VcbiIpOworCXJldHVybiAwOworfQorX19zZXR1cCgib3RnX21vZGU9IiwgZXVrcmVhX2NwdWlteDI3X290Z19tb2RlKTsKKworc3RhdGljIHZvaWQgX19pbml0IGV1a3JlYV9jcHVpbXgyN19pbml0KHZvaWQpCit7CisJbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhldWtyZWFfY3B1aW14MjdfcGlucywKKwkJQVJSQVlfU0laRShldWtyZWFfY3B1aW14MjdfcGlucyksICJDUFVJTVgyNyIpOworCisJaW14MjdfYWRkX2lteF91YXJ0MCgmdWFydF9wZGF0YSk7CisKKwlpbXgyN19hZGRfbXhjX25hbmQoJmNwdWlteDI3X25hbmRfYm9hcmRfaW5mbyk7CisKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBldWtyZWFfY3B1aW14MjdfaTJjX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShldWtyZWFfY3B1aW14MjdfaTJjX2RldmljZXMpKTsKKworCWlteDI3X2FkZF9pMmNfaW14MSgmY3B1aW14MjdfaTJjMV9kYXRhKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHBsYXRmb3JtX2RldmljZXMsIEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2aWNlcykpOworCisjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9FVUtSRUFfQ1BVSU1YMjdfVVNFU0RIQzIpCisJLyogU0RIQzIgY2FuIGJlIHVzZWQgZm9yIFdpZmkgKi8KKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc2RoY19kZXZpY2UxLCBOVUxMKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUFDSF9FVUtSRUFfQ1BVSU1YMjdfVVNFVUFSVDQpCisJLyogaW4gd2hpY2ggY2FzZSBVQVJUNCBpcyBhbHNvIHVzZWQgZm9yIEJsdWV0b290aCAqLworCWlteDI3X2FkZF9pbXhfdWFydDMoJnVhcnRfcGRhdGEpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTBfTU9EVUxFKQorCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2VyaWFsX2RldmljZSk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9VTFBJKQorCWlmIChvdGdfbW9kZV9ob3N0KSB7CisJCW90Z19wZGF0YS5vdGcgPSBvdGdfdWxwaV9jcmVhdGUoJm14Y191bHBpX2FjY2Vzc19vcHMsCisJCQkJVVNCX09UR19EUlZfVkJVUyB8IFVTQl9PVEdfRFJWX1ZCVVNfRVhUKTsKKworCQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfb3RnX2hvc3QsICZvdGdfcGRhdGEpOworCX0KKworCXVzYmgyX3BkYXRhLm90ZyA9IG90Z191bHBpX2NyZWF0ZSgmbXhjX3VscGlfYWNjZXNzX29wcywKKwkJCQlVU0JfT1RHX0RSVl9WQlVTIHwgVVNCX09UR19EUlZfVkJVU19FWFQpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VzYmgyLCAmdXNiaDJfcGRhdGEpOworI2VuZGlmCisJaWYgKCFvdGdfbW9kZV9ob3N0KQorCQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfb3RnX3VkY19kZXZpY2UsICZvdGdfZGV2aWNlX3BkYXRhKTsKKworI2lmZGVmIENPTkZJR19NQUNIX0VVS1JFQV9NQklNWDI3X0JBU0VCT0FSRAorCWV1a3JlYV9tYmlteDI3X2Jhc2Vib2FyZF9pbml0KCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgX19pbml0IGV1a3JlYV9jcHVpbXgyN190aW1lcl9pbml0KHZvaWQpCit7CisJbXgyN19jbG9ja3NfaW5pdCgyNjAwMDAwMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIGV1a3JlYV9jcHVpbXgyN190aW1lciA9IHsKKwkuaW5pdCA9IGV1a3JlYV9jcHVpbXgyN190aW1lcl9pbml0LAorfTsKKworTUFDSElORV9TVEFSVChDUFVJTVgyNywgIkVVS1JFQSBDUFVJTVgyNyIpCisJLnBoeXNfaW8gICAgICAgID0gTVgyN19BSVBJX0JBU0VfQUREUiwKKwkuaW9fcGdfb2Zmc3QgICAgPSAoKE1YMjdfQUlQSV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcyAgICA9IE1YMjdfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvICAgICAgICAgPSBteDI3X21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBteDI3X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgICA9IGV1a3JlYV9jcHVpbXgyN19pbml0LAorCS50aW1lciAgICAgICAgICA9ICZldWtyZWFfY3B1aW14MjdfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXgyN2xpdGUuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14MjdsaXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJhMmI1ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14MjdsaXRlLmMKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3IFJvYmVydCBTY2h3ZWJlbCA8ci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZT4sIFBlbmd1dHJvbml4CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSnVlcmdlbiBCZWlzZXJ0IChrZXJuZWxAcGVuZ3V0cm9uaXguZGUpCisgKiBDb3B5cmlnaHQgMjAwOSBEYW5pZWwgU2NoYWVmZmVyIChkYW5pZWwuc2NoYWVmZmVyQHRpbWVzeXMuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MjcuaD4KKworI2luY2x1ZGUgImRldmljZXMtaW14MjcuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXgyN2xpdGVfcGluc1tdID0geworCS8qIFVBUlQxICovCisJUEUxMl9QRl9VQVJUMV9UWEQsCisJUEUxM19QRl9VQVJUMV9SWEQsCisJUEUxNF9QRl9VQVJUMV9DVFMsCisJUEUxNV9QRl9VQVJUMV9SVFMsCisJLyogRkVDICovCisJUEQwX0FJTl9GRUNfVFhEMCwKKwlQRDFfQUlOX0ZFQ19UWEQxLAorCVBEMl9BSU5fRkVDX1RYRDIsCisJUEQzX0FJTl9GRUNfVFhEMywKKwlQRDRfQU9VVF9GRUNfUlhfRVIsCisJUEQ1X0FPVVRfRkVDX1JYRDEsCisJUEQ2X0FPVVRfRkVDX1JYRDIsCisJUEQ3X0FPVVRfRkVDX1JYRDMsCisJUEQ4X0FGX0ZFQ19NRElPLAorCVBEOV9BSU5fRkVDX01EQywKKwlQRDEwX0FPVVRfRkVDX0NSUywKKwlQRDExX0FPVVRfRkVDX1RYX0NMSywKKwlQRDEyX0FPVVRfRkVDX1JYRDAsCisJUEQxM19BT1VUX0ZFQ19SWF9EViwKKwlQRDE0X0FPVVRfRkVDX1JYX0NMSywKKwlQRDE1X0FPVVRfRkVDX0NPTCwKKwlQRDE2X0FJTl9GRUNfVFhfRVIsCisJUEYyM19BSU5fRkVDX1RYX0VOLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSBfX2luaXRjb25zdCA9IHsKKwkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZteGNfZmVjX2RldmljZSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBteDI3bGl0ZV9pbml0KHZvaWQpCit7CisJbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhteDI3bGl0ZV9waW5zLCBBUlJBWV9TSVpFKG14MjdsaXRlX3BpbnMpLAorCQkiaW14MjdsaXRlIik7CisJaW14MjdfYWRkX2lteF91YXJ0MCgmdWFydF9wZGF0YSk7CisJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBteDI3bGl0ZV90aW1lcl9pbml0KHZvaWQpCit7CisJbXgyN19jbG9ja3NfaW5pdCgyNjAwMDAwMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIG14MjdsaXRlX3RpbWVyID0geworCS5pbml0CT0gbXgyN2xpdGVfdGltZXJfaW5pdCwKK307CisKK01BQ0hJTkVfU1RBUlQoSU1YMjdMSVRFLCAiTG9naWNQRCBpLk1YMjdMSVRFIikKKwkucGh5c19pbyAgICAgICAgPSBNWDI3X0FJUElfQkFTRV9BRERSLAorCS5pb19wZ19vZmZzdCAgICA9ICgoTVgyN19BSVBJX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zICAgID0gTVgyN19QSFlTX09GRlNFVCArIDB4MTAwLAorCS5tYXBfaW8gICAgICAgICA9IG14MjdfbWFwX2lvLAorCS5pbml0X2lycSAgICAgICA9IG14MjdfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZSAgID0gbXgyN2xpdGVfaW5pdCwKKwkudGltZXIgICAgICAgICAgPSAmbXgyN2xpdGVfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDFhZHMuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgxYWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdhNzYwYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgxYWRzLmMKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MWFkcy5jCisgKgorICogSW5pdGlhbGx5IGJhc2VkIG9uOgorICoJbGludXgtMi42LjctaW14L2FyY2gvYXJtL21hY2gtaW14L3NjYjkzMjguYworICoJQ29weXJpZ2h0IChjKSAyMDA0IFNhc2NoYSBIYXVlciA8c2FzY2hhQHNhc2NoYWhhdWVyLmRlPgorICoKKyAqIDIwMDQgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcGNmODU3eC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorCisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9pMmMuaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MS5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy1pbXgxLmgiCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCitzdGF0aWMgaW50IG14MWFkc19waW5zW10gPSB7CisJLyogVUFSVDEgKi8KKwlQQzlfUEZfVUFSVDFfQ1RTLAorCVBDMTBfUEZfVUFSVDFfUlRTLAorCVBDMTFfUEZfVUFSVDFfVFhELAorCVBDMTJfUEZfVUFSVDFfUlhELAorCS8qIFVBUlQyICovCisJUEIyOF9QRl9VQVJUMl9DVFMsCisJUEIyOV9QRl9VQVJUMl9SVFMsCisJUEIzMF9QRl9VQVJUMl9UWEQsCisJUEIzMV9QRl9VQVJUMl9SWEQsCisJLyogSTJDICovCisJUEExNV9QRl9JMkNfU0RBLAorCVBBMTZfUEZfSTJDX1NDTCwKKwkvKiBTUEkgKi8KKwlQQzEzX1BGX1NQSTFfU1BJX1JEWSwKKwlQQzE0X1BGX1NQSTFfU0NMSywKKwlQQzE1X1BGX1NQSTFfU1MsCisJUEMxNl9QRl9TUEkxX01JU08sCisJUEMxN19QRl9TUEkxX01PU0ksCit9OworCisvKgorICogVUFSVHMgcGxhdGZvcm0gZGF0YQorICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnQwX3BkYXRhIF9faW5pdGNvbnN0ID0geworCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCit9OworICAgICAgIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydDFfcGRhdGEgX19pbml0Y29uc3QgPSB7CisJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKK307CisKKy8qCisgKiBQaHlzbWFwIGZsYXNoCisgKi8KKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbXgxYWRzX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCQk9IDQsCQkvKiBiYW5rd2lkdGggaW4gYnl0ZXMgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gTVgxX0NTMF9QSFlTLAorCS5lbmQJPSBNWDFfQ1MwX1BIWVMgKyBTWl8zMk0gLSAxLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZmxhc2hfZGV2aWNlID0geworCS5uYW1lCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAk9IDAsCisJLnJlc291cmNlID0gJmZsYXNoX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzID0gMSwKK307CisKKy8qCisgKiBJMkMKKyAqLworc3RhdGljIHN0cnVjdCBwY2Y4NTd4X3BsYXRmb3JtX2RhdGEgcGNmODU3eF9kYXRhW10gPSB7CisJeworCQkuZ3Bpb19iYXNlID0gNCAqIDMyLAorCX0sIHsKKwkJLmdwaW9fYmFzZSA9IDQgKiAzMiArIDE2LAorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14aTJjX3BsYXRmb3JtX2RhdGEgbXgxYWRzX2kyY19kYXRhIF9faW5pdGNvbnN0ID0geworCS5iaXRyYXRlID0gMTAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBteDFhZHNfaTJjX2RldmljZXNbXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTc1IiwgMHgyMiksCisJCS5wbGF0Zm9ybV9kYXRhID0gJnBjZjg1N3hfZGF0YVswXSwKKwl9LCB7CisJCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTc1IiwgMHgyNCksCisJCS5wbGF0Zm9ybV9kYXRhID0gJnBjZjg1N3hfZGF0YVsxXSwKKwl9LAorfTsKKworLyoKKyAqIEJvYXJkIGluaXQKKyAqLworc3RhdGljIHZvaWQgX19pbml0IG14MWFkc19pbml0KHZvaWQpCit7CisJbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhteDFhZHNfcGlucywKKwkJQVJSQVlfU0laRShteDFhZHNfcGlucyksICJteDFhZHMiKTsKKworCS8qIFVBUlQgKi8KKwlpbXgxX2FkZF9pbXhfdWFydDAoJnVhcnQwX3BkYXRhKTsKKwlpbXgxX2FkZF9pbXhfdWFydDEoJnVhcnQxX3BkYXRhKTsKKworCS8qIFBoeXNtYXAgZmxhc2ggKi8KKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZmbGFzaF9kZXZpY2UsICZteDFhZHNfZmxhc2hfZGF0YSk7CisKKwkvKiBJMkMgKi8KKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBteDFhZHNfaTJjX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShteDFhZHNfaTJjX2RldmljZXMpKTsKKworCWlteDFfYWRkX2kyY19pbXgoJm14MWFkc19pMmNfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBteDFhZHNfdGltZXJfaW5pdCh2b2lkKQoreworCW14MV9jbG9ja3NfaW5pdCgzMjAwMCk7Cit9CisKK3N0cnVjdCBzeXNfdGltZXIgbXgxYWRzX3RpbWVyID0geworCS5pbml0CT0gbXgxYWRzX3RpbWVyX2luaXQsCit9OworCitNQUNISU5FX1NUQVJUKE1YMUFEUywgIkZyZWVzY2FsZSBNWDFBRFMiKQorCS8qIE1haW50YWluZXI6IFNhc2NoYSBIYXVlciwgUGVuZ3V0cm9uaXggKi8KKwkucGh5c19pbwk9IE1YMV9JT19CQVNFX0FERFIsCisJLmlvX3BnX29mZnN0CT0gKE1YMV9JT19CQVNFX0FERFJfVklSVCA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gTVgxX1BIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbwkJPSBteDFfbWFwX2lvLAorCS5pbml0X2lycQk9IG14MV9pbml0X2lycSwKKwkudGltZXIJCT0gJm14MWFkc190aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gbXgxYWRzX2luaXQsCitNQUNISU5FX0VORAorCitNQUNISU5FX1NUQVJUKE1YTEFEUywgIkZyZWVzY2FsZSBNWExBRFMiKQorCS5waHlzX2lvCT0gTVgxX0lPX0JBU0VfQUREUiwKKwkuaW9fcGdfb2Zmc3QJPSAoTVgxX0lPX0JBU0VfQUREUl9WSVJUID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSBNWDFfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvCQk9IG14MV9tYXBfaW8sCisJLmluaXRfaXJxCT0gbXgxX2luaXRfaXJxLAorCS50aW1lcgkJPSAmbXgxYWRzX3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBteDFhZHNfaW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjFhZHMuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyMWFkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZDdmODEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjFhZHMuYwpAQCAtMCwwICsxLDMyNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgU2hhbmUgTmF5IChzaGFuZUBtaW5pcmwuY29tKQorICogIENvcHlyaWdodCAyMDA2LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9pbXhmYi5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgyMS5oPgorI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy1pbXgyMS5oIgorI2luY2x1ZGUgImRldmljZXMuaCIKKworLyoKKyAqIE1lbW9yeS1tYXBwZWQgSS9PIG9uIE1YMjFBRFMgYmFzZSBib2FyZAorICovCisjZGVmaW5lIE1YMjFBRFNfTU1JT19CQVNFX0FERFIgICAweGY1MDAwMDAwCisjZGVmaW5lIE1YMjFBRFNfTU1JT19TSVpFICAgICAgICBTWl8xNk0KKworI2RlZmluZSBNWDIxQURTX1JFR19BRERSKG9mZnNldCkgICAgKHZvaWQgX19mb3JjZSBfX2lvbWVtICopIFwKKwkJKE1YMjFBRFNfTU1JT19CQVNFX0FERFIgKyAob2Zmc2V0KSkKKworI2RlZmluZSBNWDIxQURTX0NTODkwMEFfSVJRICAgICAgICAgSVJRX0dQSU9FKDExKQorI2RlZmluZSBNWDIxQURTX0NTODkwMEFfSU9CQVNFX1JFRyAgTVgyMUFEU19SRUdfQUREUigweDAwMDAwMCkKKyNkZWZpbmUgTVgyMUFEU19TVDE2QzI1NV9JT0JBU0VfUkVHIE1YMjFBRFNfUkVHX0FERFIoMHgyMDAwMDApCisjZGVmaW5lIE1YMjFBRFNfVkVSU0lPTl9SRUcgICAgICAgICBNWDIxQURTX1JFR19BRERSKDB4NDAwMDAwKQorI2RlZmluZSBNWDIxQURTX0lPX1JFRyAgICAgICAgICAgICAgTVgyMUFEU19SRUdfQUREUigweDgwMDAwMCkKKworLyogTVgyMUFEU19JT19SRUcgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIE1YMjFBRFNfSU9fU0RfV1AgICAgICAgIDB4MDAwMSAvKiByZWFkICovCisjZGVmaW5lIE1YMjFBRFNfSU9fVFA2ICAgICAgICAgIDB4MDAwMSAvKiB3cml0ZSAqLworI2RlZmluZSBNWDIxQURTX0lPX1NXX1NFTCAgICAgICAweDAwMDIgLyogcmVhZCAqLworI2RlZmluZSBNWDIxQURTX0lPX1RQNyAgICAgICAgICAweDAwMDIgLyogd3JpdGUgKi8KKyNkZWZpbmUgTVgyMUFEU19JT19SRVNFVF9FX1VBUlQgMHgwMDA0CisjZGVmaW5lIE1YMjFBRFNfSU9fUkVTRVRfQkFTRSAgIDB4MDAwOAorI2RlZmluZSBNWDIxQURTX0lPX0NTSV9DVEwyICAgICAweDAwMTAKKyNkZWZpbmUgTVgyMUFEU19JT19DU0lfQ1RMMSAgICAgMHgwMDIwCisjZGVmaW5lIE1YMjFBRFNfSU9fQ1NJX0NUTDAgICAgIDB4MDA0MAorI2RlZmluZSBNWDIxQURTX0lPX1VBUlQxX0VOICAgICAweDAwODAKKyNkZWZpbmUgTVgyMUFEU19JT19VQVJUNF9FTiAgICAgMHgwMTAwCisjZGVmaW5lIE1YMjFBRFNfSU9fTENET04gICAgICAgIDB4MDIwMAorI2RlZmluZSBNWDIxQURTX0lPX0lSREFfRU4gICAgICAweDA0MDAKKyNkZWZpbmUgTVgyMUFEU19JT19JUkRBX0ZJUl9TRUwgMHgwODAwCisjZGVmaW5lIE1YMjFBRFNfSU9fSVJEQV9NRDBfQiAgIDB4MTAwMAorI2RlZmluZSBNWDIxQURTX0lPX0lSREFfTUQxICAgICAweDIwMDAKKyNkZWZpbmUgTVgyMUFEU19JT19MRUQ0X09OICAgICAgMHg0MDAwCisjZGVmaW5lIE1YMjFBRFNfSU9fTEVEM19PTiAgICAgIDB4ODAwMAorCitzdGF0aWMgdW5zaWduZWQgaW50IG14MjFhZHNfcGluc1tdID0geworCisJLyogQ1M4OTAwQSAqLworCShHUElPX1BPUlRFIHwgR1BJT19HUElPIHwgR1BJT19JTiB8IDExKSwKKworCS8qIFVBUlQxICovCisJUEUxMl9QRl9VQVJUMV9UWEQsCisJUEUxM19QRl9VQVJUMV9SWEQsCisJUEUxNF9QRl9VQVJUMV9DVFMsCisJUEUxNV9QRl9VQVJUMV9SVFMsCisKKwkvKiBVQVJUMyAoSXJEQSkgLSBvbmx5IFRYRCBhbmQgUlhEICovCisJUEU4X1BGX1VBUlQzX1RYRCwKKwlQRTlfUEZfVUFSVDNfUlhELAorCisJLyogVUFSVDQgKi8KKwlQQjI2X0FGX1VBUlQ0X1JUUywKKwlQQjI4X0FGX1VBUlQ0X1RYRCwKKwlQQjI5X0FGX1VBUlQ0X0NUUywKKwlQQjMxX0FGX1VBUlQ0X1JYRCwKKworCS8qIExDREMgKi8KKwlQQTVfUEZfTFNDTEssCisJUEE2X1BGX0xEMCwKKwlQQTdfUEZfTEQxLAorCVBBOF9QRl9MRDIsCisJUEE5X1BGX0xEMywKKwlQQTEwX1BGX0xENCwKKwlQQTExX1BGX0xENSwKKwlQQTEyX1BGX0xENiwKKwlQQTEzX1BGX0xENywKKwlQQTE0X1BGX0xEOCwKKwlQQTE1X1BGX0xEOSwKKwlQQTE2X1BGX0xEMTAsCisJUEExN19QRl9MRDExLAorCVBBMThfUEZfTEQxMiwKKwlQQTE5X1BGX0xEMTMsCisJUEEyMF9QRl9MRDE0LAorCVBBMjFfUEZfTEQxNSwKKwlQQTIyX1BGX0xEMTYsCisJUEEyNF9QRl9SRVYsICAgICAvKiBTaGFycCBwYW5lbCBkZWRpY2F0ZWQgc2lnbmFsICovCisJUEEyNV9QRl9DTFMsICAgICAvKiBTaGFycCBwYW5lbCBkZWRpY2F0ZWQgc2lnbmFsICovCisJUEEyNl9QRl9QUywgICAgICAvKiBTaGFycCBwYW5lbCBkZWRpY2F0ZWQgc2lnbmFsICovCisJUEEyN19QRl9TUExfU1BSLCAvKiBTaGFycCBwYW5lbCBkZWRpY2F0ZWQgc2lnbmFsICovCisJUEEyOF9QRl9IU1lOQywKKwlQQTI5X1BGX1ZTWU5DLAorCVBBMzBfUEZfQ09OVFJBU1QsCisJUEEzMV9QRl9PRV9BQ0QsCisKKwkvKiBNTUMvU0RIQyAqLworCVBFMThfUEZfU0QxX0QwLAorCVBFMTlfUEZfU0QxX0QxLAorCVBFMjBfUEZfU0QxX0QyLAorCVBFMjFfUEZfU0QxX0QzLAorCVBFMjJfUEZfU0QxX0NNRCwKKwlQRTIzX1BGX1NEMV9DTEssCisKKwkvKiBORkMgKi8KKwlQRjBfUEZfTlJGQiwKKwlQRjFfUEZfTkZDRSwKKwlQRjJfUEZfTkZXUCwKKwlQRjNfUEZfTkZDTEUsCisJUEY0X1BGX05GQUxFLAorCVBGNV9QRl9ORlJFLAorCVBGNl9QRl9ORldFLAorCVBGN19QRl9ORklPMCwKKwlQRjhfUEZfTkZJTzEsCisJUEY5X1BGX05GSU8yLAorCVBGMTBfUEZfTkZJTzMsCisJUEYxMV9QRl9ORklPNCwKKwlQRjEyX1BGX05GSU81LAorCVBGMTNfUEZfTkZJTzYsCisJUEYxNF9QRl9ORklPNywKK307CisKKy8qIEFEUydzIE5PUiBmbGFzaDogMnggQU0yOUJEUzEyOEhFOVZLSSBvbiAzMi1iaXQgYnVzICovCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBteDIxYWRzX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoID0gNCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXgyMWFkc19mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQgPSBNWDIxX0NTMF9CQVNFX0FERFIsCisJLmVuZCA9IE1YMjFfQ1MwX0JBU0VfQUREUiArIDB4MDIwMDAwMDAgLSAxLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXgyMWFkc19ub3JfbXRkX2RldmljZSA9IHsKKwkubmFtZSA9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQgPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJm14MjFhZHNfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzID0gMSwKKwkucmVzb3VyY2UgPSAmbXgyMWFkc19mbGFzaF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGFfcnRzIF9faW5pdGNvbnN0ID0geworCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhX25vcnRzIF9faW5pdGNvbnN0ID0geworfTsKKworc3RhdGljIGludCBteDIxYWRzX2ZiX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwl1MTYgdG1wOworCisJdG1wID0gX19yYXdfcmVhZHcoTVgyMUFEU19JT19SRUcpOworCXRtcCB8PSBNWDIxQURTX0lPX0xDRE9OOworCV9fcmF3X3dyaXRldyh0bXAsIE1YMjFBRFNfSU9fUkVHKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXgyMWFkc19mYl9leGl0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJdTE2IHRtcDsKKworCXRtcCA9IF9fcmF3X3JlYWR3KE1YMjFBRFNfSU9fUkVHKTsKKwl0bXAgJj0gfk1YMjFBRFNfSU9fTENET047CisJX19yYXdfd3JpdGV3KHRtcCwgTVgyMUFEU19JT19SRUcpOworfQorCisvKgorICogQ29ubmVjdGVkIGlzIGEgcG9ydHJhaXQgU2hhcnAtUVZHQSBkaXNwbGF5CisgKiBvZiB0eXBlOiBMUTAzNVE3REIwMgorICovCitzdGF0aWMgc3RydWN0IGlteF9mYl92aWRlb21vZGUgbXgyMWFkc19tb2Rlc1tdID0geworCXsKKwkJLm1vZGUgPSB7CisJCQkubmFtZQkJPSAiU2hhcnAtTFEwMzVRNyIsCisJCQkucmVmcmVzaAk9IDYwLAorCQkJLnhyZXMJCT0gMjQwLAorCQkJLnlyZXMJCT0gMzIwLAorCQkJLnBpeGNsb2NrCT0gMTg4Njc5LCAvKiBpbiBwcyAoNS4zTUh6KSAqLworCQkJLmhzeW5jX2xlbgk9IDIsCisJCQkubGVmdF9tYXJnaW4JPSA2LAorCQkJLnJpZ2h0X21hcmdpbgk9IDE2LAorCQkJLnZzeW5jX2xlbgk9IDEsCisJCQkudXBwZXJfbWFyZ2luCT0gOCwKKwkJCS5sb3dlcl9tYXJnaW4JPSAxMCwKKwkJfSwKKwkJLnBjcgkJPSAweGZiMTA4YmM3LAorCQkuYnBwCQk9IDE2LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGlteF9mYl9wbGF0Zm9ybV9kYXRhIG14MjFhZHNfZmJfZGF0YSA9IHsKKwkubW9kZSA9IG14MjFhZHNfbW9kZXMsCisJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobXgyMWFkc19tb2RlcyksCisKKwkucHdtcgkJPSAweDAwYTkwM2ZmLAorCS5sc2NyMQkJPSAweDAwMTIwMzAwLAorCS5kbWFjcgkJPSAweDAwMDIwMDA4LAorCisJLmluaXQgPSBteDIxYWRzX2ZiX2luaXQsCisJLmV4aXQgPSBteDIxYWRzX2ZiX2V4aXQsCit9OworCitzdGF0aWMgaW50IG14MjFhZHNfc2RoY19nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiAoX19yYXdfcmVhZHcoTVgyMUFEU19JT19SRUcpICYgTVgyMUFEU19JT19TRF9XUCkgPyAxIDogMDsKK30KKworc3RhdGljIGludCBteDIxYWRzX3NkaGNfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgZGV0ZWN0X2lycSwKKwl2b2lkICpkYXRhKQoreworCWludCByZXQ7CisKKwlyZXQgPSByZXF1ZXN0X2lycShJUlFfR1BJT0QoMjUpLCBkZXRlY3RfaXJxLAorCQlJUlFGX1RSSUdHRVJfRkFMTElORywgIm1tYy1kZXRlY3QiLCBkYXRhKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKwlyZXR1cm4gMDsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBteDIxYWRzX3NkaGNfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJZnJlZV9pcnEoSVJRX0dQSU9EKDI1KSwgZGF0YSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW14bW1jX3BsYXRmb3JtX2RhdGEgbXgyMWFkc19zZGhjX3BkYXRhID0geworCS5vY3JfYXZhaWwgPSBNTUNfVkREXzI5XzMwIHwgTU1DX1ZERF8zMF8zMSwgLyogMy4wViAqLworCS5nZXRfcm8gPSBteDIxYWRzX3NkaGNfZ2V0X3JvLAorCS5pbml0ID0gbXgyMWFkc19zZGhjX2luaXQsCisJLmV4aXQgPSBteDIxYWRzX3NkaGNfZXhpdCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YQorbXgyMWFkc19uYW5kX2JvYXJkX2luZm8gX19pbml0Y29uc3QgPSB7CisJLndpZHRoID0gMSwKKwkuaHdfZWNjID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbXgyMWFkc19pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwkvKgorCSAqIE1lbW9yeS1tYXBwZWQgSS9PIG9uIE1YMjFBRFMgQmFzZSBib2FyZDoKKwkgKiAgIC0gQ1M4OTAwQSBFdGhlcm5ldCBjb250cm9sbGVyCisJICogICAtIFNUMTZDMjU1MkNKIFVBUlQKKwkgKiAgIC0gQ1BVIGFuZCBCYXNlIGJvYXJkIHZlcnNpb24KKwkgKiAgIC0gQmFzZSBib2FyZCBJL08gcmVnaXN0ZXIKKwkgKi8KKwl7CisJCS52aXJ0dWFsID0gTVgyMUFEU19NTUlPX0JBU0VfQUREUiwKKwkJLnBmbiA9IF9fcGh5c190b19wZm4oTVgyMV9DUzFfQkFTRV9BRERSKSwKKwkJLmxlbmd0aCA9IE1YMjFBRFNfTU1JT19TSVpFLAorCQkudHlwZSA9IE1UX0RFVklDRSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG14MjFhZHNfbWFwX2lvKHZvaWQpCit7CisJbXgyMV9tYXBfaW8oKTsKKwlpb3RhYmxlX2luaXQobXgyMWFkc19pb19kZXNjLCBBUlJBWV9TSVpFKG14MjFhZHNfaW9fZGVzYykpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJm14MjFhZHNfbm9yX210ZF9kZXZpY2UsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgbXgyMWFkc19ib2FyZF9pbml0KHZvaWQpCit7CisJbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhteDIxYWRzX3BpbnMsIEFSUkFZX1NJWkUobXgyMWFkc19waW5zKSwKKwkJCSJteDIxYWRzIik7CisKKwlpbXgyMV9hZGRfaW14X3VhcnQwKCZ1YXJ0X3BkYXRhX3J0cyk7CisJaW14MjFfYWRkX2lteF91YXJ0MigmdWFydF9wZGF0YV9ub3J0cyk7CisJaW14MjFfYWRkX2lteF91YXJ0MygmdWFydF9wZGF0YV9ydHMpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19mYl9kZXZpY2UsICZteDIxYWRzX2ZiX2RhdGEpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19zZGhjX2RldmljZTAsICZteDIxYWRzX3NkaGNfcGRhdGEpOworCWlteDIxX2FkZF9teGNfbmFuZCgmbXgyMWFkc19uYW5kX2JvYXJkX2luZm8pOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBteDIxYWRzX3RpbWVyX2luaXQodm9pZCkKK3sKKwlteDIxX2Nsb2Nrc19pbml0KDMyNzY4LCAyNjAwMDAwMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIG14MjFhZHNfdGltZXIgPSB7CisJLmluaXQJPSBteDIxYWRzX3RpbWVyX2luaXQsCit9OworCitNQUNISU5FX1NUQVJUKE1YMjFBRFMsICJGcmVlc2NhbGUgaS5NWDIxQURTIikKKwkvKiBtYWludGFpbmVyOiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiAqLworCS5waHlzX2lvICAgICAgICA9IE1YMjFfQUlQSV9CQVNFX0FERFIsCisJLmlvX3BnX29mZnN0ICAgID0gKChNWDIxX0FJUElfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMgICAgPSBNWDIxX1BIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbyAgICAgICAgID0gbXgyMWFkc19tYXBfaW8sCisJLmluaXRfaXJxICAgICAgID0gbXgyMV9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lICAgPSBteDIxYWRzX2JvYXJkX2luaXQsCisJLnRpbWVyICAgICAgICAgID0gJm14MjFhZHNfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDI3XzNkcy5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDI3XzNkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NmZmYWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjdfM2RzLmMKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIEF1dGhvcjogRmFiaW8gRXN0ZXZhbSA8ZmFiaW8uZXN0ZXZhbUBmcmVlc2NhbGUuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKgorICogVGhpcyBtYWNoaW5lIGlzIGtub3duIGFzOgorICogIC0gaS5NWDI3IDMtU3RhY2sgRGV2ZWxvcG1lbnQgU3lzdGVtCisgKiAgLSBpLk1YMjcgUGxhdGZvcm0gRGV2ZWxvcG1lbnQgS2l0IChpLk1YMjcgUERLKQorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MjcuaD4KKworI2luY2x1ZGUgImRldmljZXMtaW14MjcuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXgyN3Bka19waW5zW10gPSB7CisJLyogVUFSVDEgKi8KKwlQRTEyX1BGX1VBUlQxX1RYRCwKKwlQRTEzX1BGX1VBUlQxX1JYRCwKKwlQRTE0X1BGX1VBUlQxX0NUUywKKwlQRTE1X1BGX1VBUlQxX1JUUywKKwkvKiBGRUMgKi8KKwlQRDBfQUlOX0ZFQ19UWEQwLAorCVBEMV9BSU5fRkVDX1RYRDEsCisJUEQyX0FJTl9GRUNfVFhEMiwKKwlQRDNfQUlOX0ZFQ19UWEQzLAorCVBENF9BT1VUX0ZFQ19SWF9FUiwKKwlQRDVfQU9VVF9GRUNfUlhEMSwKKwlQRDZfQU9VVF9GRUNfUlhEMiwKKwlQRDdfQU9VVF9GRUNfUlhEMywKKwlQRDhfQUZfRkVDX01ESU8sCisJUEQ5X0FJTl9GRUNfTURDLAorCVBEMTBfQU9VVF9GRUNfQ1JTLAorCVBEMTFfQU9VVF9GRUNfVFhfQ0xLLAorCVBEMTJfQU9VVF9GRUNfUlhEMCwKKwlQRDEzX0FPVVRfRkVDX1JYX0RWLAorCVBEMTRfQU9VVF9GRUNfUlhfQ0xLLAorCVBEMTVfQU9VVF9GRUNfQ09MLAorCVBEMTZfQUlOX0ZFQ19UWF9FUiwKKwlQRjIzX0FJTl9GRUNfVFhfRU4sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhIF9faW5pdGNvbnN0ID0geworCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJm14Y19mZWNfZGV2aWNlLAorfTsKKworLyoKKyAqIE1hdHJpeCBrZXlib2FyZAorICovCisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBteDI3XzNkc19rZXltYXBbXSA9IHsKKwlLRVkoMCwgMCwgS0VZX1VQKSwKKwlLRVkoMCwgMSwgS0VZX0RPV04pLAorCUtFWSgxLCAwLCBLRVlfUklHSFQpLAorCUtFWSgxLCAxLCBLRVlfTEVGVCksCisJS0VZKDEsIDIsIEtFWV9FTlRFUiksCisJS0VZKDIsIDAsIEtFWV9GNiksCisJS0VZKDIsIDEsIEtFWV9GOCksCisJS0VZKDIsIDIsIEtFWV9GOSksCisJS0VZKDIsIDMsIEtFWV9GMTApLAorfTsKKworc3RhdGljIHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgbXgyN18zZHNfa2V5bWFwX2RhdGEgPSB7CisJLmtleW1hcAkJPSBteDI3XzNkc19rZXltYXAsCisJLmtleW1hcF9zaXplCT0gQVJSQVlfU0laRShteDI3XzNkc19rZXltYXApLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG14MjdwZGtfaW5pdCh2b2lkKQoreworCW14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMobXgyN3Bka19waW5zLCBBUlJBWV9TSVpFKG14MjdwZGtfcGlucyksCisJCSJteDI3cGRrIik7CisJaW14MjdfYWRkX2lteF91YXJ0MCgmdWFydF9wZGF0YSk7CisJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmaW14X2twcF9kZXZpY2UsICZteDI3XzNkc19rZXltYXBfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBteDI3cGRrX3RpbWVyX2luaXQodm9pZCkKK3sKKwlteDI3X2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgbXgyN3Bka190aW1lciA9IHsKKwkuaW5pdAk9IG14MjdwZGtfdGltZXJfaW5pdCwKK307CisKK01BQ0hJTkVfU1RBUlQoTVgyN18zRFMsICJGcmVlc2NhbGUgTVgyN1BESyIpCisJLyogbWFpbnRhaW5lcjogRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gKi8KKwkucGh5c19pbyAgICAgICAgPSBNWDI3X0FJUElfQkFTRV9BRERSLAorCS5pb19wZ19vZmZzdCAgICA9ICgoTVgyN19BSVBJX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zICAgID0gTVgyN19QSFlTX09GRlNFVCArIDB4MTAwLAorCS5tYXBfaW8gICAgICAgICA9IG14MjdfbWFwX2lvLAorCS5pbml0X2lycSAgICAgICA9IG14MjdfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZSAgID0gbXgyN3Bka19pbml0LAorCS50aW1lciAgICAgICAgICA9ICZteDI3cGRrX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyN2Fkcy5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDI3YWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM3N2RhOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyN2Fkcy5jCkBAIC0wLDAgKzEsMzU3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAorICogIENvcHlyaWdodCAoQykgMjAwMiBTaGFuZSBOYXkgKHNoYW5lQG1pbmlybC5jb20pCisgKiAgQ29weXJpZ2h0IDIwMDYtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgyNy5oPgorI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KKyNpbmNsdWRlIDxtYWNoL2lteGZiLmg+CisjaW5jbHVkZSA8bWFjaC9tbWMuaD4KKworI2luY2x1ZGUgImRldmljZXMtaW14MjcuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKy8qCisgKiBCYXNlIGFkZHJlc3Mgb2YgUEJDIGNvbnRyb2xsZXIsIENTNAorICovCisjZGVmaW5lIFBCQ19CQVNFX0FERFJFU1MgICAgICAgIDB4ZjQzMDAwMDAKKyNkZWZpbmUgUEJDX1JFR19BRERSKG9mZnNldCkgICAgKHZvaWQgX19mb3JjZSBfX2lvbWVtICopIFwKKwkJKFBCQ19CQVNFX0FERFJFU1MgKyAob2Zmc2V0KSkKKworLyogV2hlbiB0aGUgUEJDIGFkZHJlc3MgY29ubmVjdGlvbiBpcyBmaXhlZCBpbiBoL3csIGRlZmluZWQgYXMgMSAqLworI2RlZmluZSBQQkNfQUREUl9TSCAgICAgICAgICAgICAwCisKKy8qIE9mZnNldHMgZm9yIHRoZSBQQkMgQ29udHJvbGxlciByZWdpc3RlciAqLworLyoKKyAqIFBCQyBCb2FyZCB2ZXJzaW9uIHJlZ2lzdGVyIG9mZnNldAorICovCisjZGVmaW5lIFBCQ19WRVJTSU9OX1JFRyAgICAgICAgIFBCQ19SRUdfQUREUigweDAwMDAwID4+IFBCQ19BRERSX1NIKQorLyoKKyAqIFBCQyBCb2FyZCBjb250cm9sIHJlZ2lzdGVyIDEgc2V0IGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgUEJDX0JDVFJMMV9TRVRfUkVHICAgICAgUEJDX1JFR19BRERSKDB4MDAwMDggPj4gUEJDX0FERFJfU0gpCisvKgorICogUEJDIEJvYXJkIGNvbnRyb2wgcmVnaXN0ZXIgMSBjbGVhciBhZGRyZXNzLgorICovCisjZGVmaW5lIFBCQ19CQ1RSTDFfQ0xFQVJfUkVHICAgIFBCQ19SRUdfQUREUigweDAwMDBDID4+IFBCQ19BRERSX1NIKQorCisvKiBQQkMgQm9hcmQgQ29udHJvbCBSZWdpc3RlciAxIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBQQkNfQkNUUkwxX0xDRE9OICAgICAgICAweDA4MDAJLyogRW5hYmxlIHRoZSBMQ0QgKi8KKworLyogdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGV4dGVybmFsIGNyeXN0YWwgcmVmZXJlbmNlICovCisjZGVmaW5lIENLSUhfMjdNSFpfQklUX1NFVCAgICAgICgxIDw8IDMpCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXgyN2Fkc19waW5zW10gPSB7CisJLyogVUFSVDAgKi8KKwlQRTEyX1BGX1VBUlQxX1RYRCwKKwlQRTEzX1BGX1VBUlQxX1JYRCwKKwlQRTE0X1BGX1VBUlQxX0NUUywKKwlQRTE1X1BGX1VBUlQxX1JUUywKKwkvKiBVQVJUMSAqLworCVBFM19QRl9VQVJUMl9DVFMsCisJUEU0X1BGX1VBUlQyX1JUUywKKwlQRTZfUEZfVUFSVDJfVFhELAorCVBFN19QRl9VQVJUMl9SWEQsCisJLyogVUFSVDIgKi8KKwlQRThfUEZfVUFSVDNfVFhELAorCVBFOV9QRl9VQVJUM19SWEQsCisJUEUxMF9QRl9VQVJUM19DVFMsCisJUEUxMV9QRl9VQVJUM19SVFMsCisJLyogVUFSVDMgKi8KKwlQQjI2X0FGX1VBUlQ0X1JUUywKKwlQQjI4X0FGX1VBUlQ0X1RYRCwKKwlQQjI5X0FGX1VBUlQ0X0NUUywKKwlQQjMxX0FGX1VBUlQ0X1JYRCwKKwkvKiBVQVJUNCAqLworCVBCMThfQUZfVUFSVDVfVFhELAorCVBCMTlfQUZfVUFSVDVfUlhELAorCVBCMjBfQUZfVUFSVDVfQ1RTLAorCVBCMjFfQUZfVUFSVDVfUlRTLAorCS8qIFVBUlQ1ICovCisJUEIxMF9BRl9VQVJUNl9UWEQsCisJUEIxMl9BRl9VQVJUNl9DVFMsCisJUEIxMV9BRl9VQVJUNl9SWEQsCisJUEIxM19BRl9VQVJUNl9SVFMsCisJLyogRkVDICovCisJUEQwX0FJTl9GRUNfVFhEMCwKKwlQRDFfQUlOX0ZFQ19UWEQxLAorCVBEMl9BSU5fRkVDX1RYRDIsCisJUEQzX0FJTl9GRUNfVFhEMywKKwlQRDRfQU9VVF9GRUNfUlhfRVIsCisJUEQ1X0FPVVRfRkVDX1JYRDEsCisJUEQ2X0FPVVRfRkVDX1JYRDIsCisJUEQ3X0FPVVRfRkVDX1JYRDMsCisJUEQ4X0FGX0ZFQ19NRElPLAorCVBEOV9BSU5fRkVDX01EQywKKwlQRDEwX0FPVVRfRkVDX0NSUywKKwlQRDExX0FPVVRfRkVDX1RYX0NMSywKKwlQRDEyX0FPVVRfRkVDX1JYRDAsCisJUEQxM19BT1VUX0ZFQ19SWF9EViwKKwlQRDE0X0FPVVRfRkVDX1JYX0NMSywKKwlQRDE1X0FPVVRfRkVDX0NPTCwKKwlQRDE2X0FJTl9GRUNfVFhfRVIsCisJUEYyM19BSU5fRkVDX1RYX0VOLAorCS8qIEkyQzIgKi8KKwlQQzVfUEZfSTJDMl9TREEsCisJUEM2X1BGX0kyQzJfU0NMLAorCS8qIEZCICovCisJUEE1X1BGX0xTQ0xLLAorCVBBNl9QRl9MRDAsCisJUEE3X1BGX0xEMSwKKwlQQThfUEZfTEQyLAorCVBBOV9QRl9MRDMsCisJUEExMF9QRl9MRDQsCisJUEExMV9QRl9MRDUsCisJUEExMl9QRl9MRDYsCisJUEExM19QRl9MRDcsCisJUEExNF9QRl9MRDgsCisJUEExNV9QRl9MRDksCisJUEExNl9QRl9MRDEwLAorCVBBMTdfUEZfTEQxMSwKKwlQQTE4X1BGX0xEMTIsCisJUEExOV9QRl9MRDEzLAorCVBBMjBfUEZfTEQxNCwKKwlQQTIxX1BGX0xEMTUsCisJUEEyMl9QRl9MRDE2LAorCVBBMjNfUEZfTEQxNywKKwlQQTI0X1BGX1JFViwKKwlQQTI1X1BGX0NMUywKKwlQQTI2X1BGX1BTLAorCVBBMjdfUEZfU1BMX1NQUiwKKwlQQTI4X1BGX0hTWU5DLAorCVBBMjlfUEZfVlNZTkMsCisJUEEzMF9QRl9DT05UUkFTVCwKKwlQQTMxX1BGX09FX0FDRCwKKwkvKiBPV0lSRSAqLworCVBFMTZfQUZfT1dJUkUsCisJLyogU0RIQzEqLworCVBFMThfUEZfU0QxX0QwLAorCVBFMTlfUEZfU0QxX0QxLAorCVBFMjBfUEZfU0QxX0QyLAorCVBFMjFfUEZfU0QxX0QzLAorCVBFMjJfUEZfU0QxX0NNRCwKKwlQRTIzX1BGX1NEMV9DTEssCisJLyogU0RIQzIqLworCVBCNF9QRl9TRDJfRDAsCisJUEI1X1BGX1NEMl9EMSwKKwlQQjZfUEZfU0QyX0QyLAorCVBCN19QRl9TRDJfRDMsCisJUEI4X1BGX1NEMl9DTUQsCisJUEI5X1BGX1NEMl9DTEssCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEKK214MjdhZHNfbmFuZF9ib2FyZF9pbmZvIF9faW5pdGNvbnN0ID0geworCS53aWR0aCA9IDEsCisJLmh3X2VjYyA9IDEsCit9OworCisvKiBBRFMncyBOT1IgZmxhc2ggKi8KK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIG14MjdhZHNfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGggPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteDI3YWRzX2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydCA9IDB4YzAwMDAwMDAsCisJLmVuZCA9IDB4YzAwMDAwMDAgKyAweDAyMDAwMDAwIC0gMSwKKwkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKworfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXgyN2Fkc19ub3JfbXRkX2RldmljZSA9IHsKKwkubmFtZSA9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQgPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJm14MjdhZHNfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzID0gMSwKKwkucmVzb3VyY2UgPSAmbXgyN2Fkc19mbGFzaF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14aTJjX3BsYXRmb3JtX2RhdGEgbXgyN2Fkc19pMmMxX2RhdGEgX19pbml0Y29uc3QgPSB7CisJLmJpdHJhdGUgPSAxMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIG14MjdhZHNfaTJjX2RldmljZXNbXSA9IHsKK307CisKK3ZvaWQgbGNkX3Bvd2VyKGludCBvbikKK3sKKwlpZiAob24pCisJCV9fcmF3X3dyaXRldyhQQkNfQkNUUkwxX0xDRE9OLCBQQkNfQkNUUkwxX1NFVF9SRUcpOworCWVsc2UKKwkJX19yYXdfd3JpdGV3KFBCQ19CQ1RSTDFfTENET04sIFBCQ19CQ1RSTDFfQ0xFQVJfUkVHKTsKK30KKworc3RhdGljIHN0cnVjdCBpbXhfZmJfdmlkZW9tb2RlIG14MjdhZHNfbW9kZXNbXSA9IHsKKwl7CisJCS5tb2RlID0geworCQkJLm5hbWUJCT0gIlNoYXJwLUxRMDM1UTciLAorCQkJLnJlZnJlc2gJPSA2MCwKKwkJCS54cmVzCQk9IDI0MCwKKwkJCS55cmVzCQk9IDMyMCwKKwkJCS5waXhjbG9jawk9IDE4ODY3OSwgLyogaW4gcHMgKDUuM01IeikgKi8KKwkJCS5oc3luY19sZW4JPSAxLAorCQkJLmxlZnRfbWFyZ2luCT0gOSwKKwkJCS5yaWdodF9tYXJnaW4JPSAxNiwKKwkJCS52c3luY19sZW4JPSAxLAorCQkJLnVwcGVyX21hcmdpbgk9IDcsCisJCQkubG93ZXJfbWFyZ2luCT0gOSwKKwkJfSwKKwkJLmJwcAkJPSAxNiwKKwkJLnBjcgkJPSAweEZCMDA4QkMwLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGlteF9mYl9wbGF0Zm9ybV9kYXRhIG14MjdhZHNfZmJfZGF0YSA9IHsKKwkubW9kZSA9IG14MjdhZHNfbW9kZXMsCisJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobXgyN2Fkc19tb2RlcyksCisKKwkvKgorCSAqIC0gSFNZTkMgYWN0aXZlIGhpZ2gKKwkgKiAtIFZTWU5DIGFjdGl2ZSBoaWdoCisJICogLSBjbGsgbm90ZW5hYmxlZCB3aGlsZSBpZGxlCisJICogLSBjbG9jayBpbnZlcnRlZAorCSAqIC0gZGF0YSBub3QgaW52ZXJ0ZWQKKwkgKiAtIGRhdGEgZW5hYmxlIGxvdyBhY3RpdmUKKwkgKiAtIGVuYWJsZSBzaGFycCBtb2RlCisJICovCisJLnB3bXIJCT0gMHgwMEE5MDNGRiwKKwkubHNjcjEJCT0gMHgwMDEyMDMwMCwKKwkuZG1hY3IJCT0gMHgwMDAyMDAxMCwKKworCS5sY2RfcG93ZXIJPSBsY2RfcG93ZXIsCit9OworCitzdGF0aWMgaW50IG14MjdhZHNfc2RoYzFfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgZGV0ZWN0X2lycSwKKwkJCSAgICAgIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIHJlcXVlc3RfaXJxKElSUV9HUElPRSgyMSksIGRldGVjdF9pcnEsIElSUUZfVFJJR0dFUl9SSVNJTkcsCisJCQkgICAic2RoYzEtY2FyZC1kZXRlY3QiLCBkYXRhKTsKK30KKworc3RhdGljIGludCBteDI3YWRzX3NkaGMyX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFfaGFuZGxlcl90IGRldGVjdF9pcnEsCisJCQkgICAgICB2b2lkICpkYXRhKQoreworCXJldHVybiByZXF1ZXN0X2lycShJUlFfR1BJT0IoNyksIGRldGVjdF9pcnEsIElSUUZfVFJJR0dFUl9SSVNJTkcsCisJCQkgICAic2RoYzItY2FyZC1kZXRlY3QiLCBkYXRhKTsKK30KKworc3RhdGljIHZvaWQgbXgyN2Fkc19zZGhjMV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlmcmVlX2lycShJUlFfR1BJT0UoMjEpLCBkYXRhKTsKK30KKworc3RhdGljIHZvaWQgbXgyN2Fkc19zZGhjMl9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlmcmVlX2lycShJUlFfR1BJT0IoNyksIGRhdGEpOworfQorCitzdGF0aWMgc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhIHNkaGMxX3BkYXRhID0geworCS5pbml0ID0gbXgyN2Fkc19zZGhjMV9pbml0LAorCS5leGl0ID0gbXgyN2Fkc19zZGhjMV9leGl0LAorfTsKKworc3RhdGljIHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBzZGhjMl9wZGF0YSA9IHsKKwkuaW5pdCA9IG14MjdhZHNfc2RoYzJfaW5pdCwKKwkuZXhpdCA9IG14MjdhZHNfc2RoYzJfZXhpdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmbXgyN2Fkc19ub3JfbXRkX2RldmljZSwKKwkmbXhjX2ZlY19kZXZpY2UsCisJJm14Y193MV9tYXN0ZXJfZGV2aWNlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSBfX2luaXRjb25zdCA9IHsKKwkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG14MjdhZHNfYm9hcmRfaW5pdCh2b2lkKQoreworCW14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMobXgyN2Fkc19waW5zLCBBUlJBWV9TSVpFKG14MjdhZHNfcGlucyksCisJCQkibXgyN2FkcyIpOworCisJaW14MjdfYWRkX2lteF91YXJ0MCgmdWFydF9wZGF0YSk7CisJaW14MjdfYWRkX2lteF91YXJ0MSgmdWFydF9wZGF0YSk7CisJaW14MjdfYWRkX2lteF91YXJ0MigmdWFydF9wZGF0YSk7CisJaW14MjdfYWRkX2lteF91YXJ0MygmdWFydF9wZGF0YSk7CisJaW14MjdfYWRkX2lteF91YXJ0NCgmdWFydF9wZGF0YSk7CisJaW14MjdfYWRkX2lteF91YXJ0NSgmdWFydF9wZGF0YSk7CisJaW14MjdfYWRkX214Y19uYW5kKCZteDI3YWRzX25hbmRfYm9hcmRfaW5mbyk7CisKKwkvKiBvbmx5IHRoZSBpMmMgbWFzdGVyIDEgaXMgdXNlZCBvbiB0aGlzIENQVSBjYXJkICovCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgbXgyN2Fkc19pMmNfZGV2aWNlcywKKwkJCQlBUlJBWV9TSVpFKG14MjdhZHNfaTJjX2RldmljZXMpKTsKKwlpbXgyN19hZGRfaTJjX2lteDEoJm14MjdhZHNfaTJjMV9kYXRhKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfZmJfZGV2aWNlLCAmbXgyN2Fkc19mYl9kYXRhKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc2RoY19kZXZpY2UwLCAmc2RoYzFfcGRhdGEpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19zZGhjX2RldmljZTEsICZzZGhjMl9wZGF0YSk7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZpY2VzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldmljZXMpKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG14MjdhZHNfdGltZXJfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZnJlZiA9IDI2MDAwMDAwOworCisJaWYgKChfX3Jhd19yZWFkdyhQQkNfVkVSU0lPTl9SRUcpICYgQ0tJSF8yN01IWl9CSVRfU0VUKSA9PSAwKQorCQlmcmVmID0gMjcwMDAwMDA7CisKKwlteDI3X2Nsb2Nrc19pbml0KGZyZWYpOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBteDI3YWRzX3RpbWVyID0geworCS5pbml0CT0gbXgyN2Fkc190aW1lcl9pbml0LAorfTsKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBteDI3YWRzX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwgPSBQQkNfQkFTRV9BRERSRVNTLAorCQkucGZuID0gX19waHlzX3RvX3BmbihNWDI3X0NTNF9CQVNFX0FERFIpLAorCQkubGVuZ3RoID0gU1pfMU0sCisJCS50eXBlID0gTVRfREVWSUNFLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgbXgyN2Fkc19tYXBfaW8odm9pZCkKK3sKKwlteDI3X21hcF9pbygpOworCWlvdGFibGVfaW5pdChteDI3YWRzX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXgyN2Fkc19pb19kZXNjKSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoTVgyN0FEUywgIkZyZWVzY2FsZSBpLk1YMjdBRFMiKQorCS8qIG1haW50YWluZXI6IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuICovCisJLnBoeXNfaW8gICAgICAgID0gTVgyN19BSVBJX0JBU0VfQUREUiwKKwkuaW9fcGdfb2Zmc3QgICAgPSAoKE1YMjdfQUlQSV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcyAgICA9IE1YMjdfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvICAgICAgICAgPSBteDI3YWRzX21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBteDI3X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgICA9IG14MjdhZHNfYm9hcmRfaW5pdCwKKwkudGltZXIgICAgICAgICAgPSAmbXgyN2Fkc190aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14dF90ZDYwLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14dF90ZDYwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNhMWU0NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXh0X3RkNjAuYwpAQCAtMCwwICsxLDI4NSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgU2hhbmUgTmF5IChzaGFuZUBtaW5pcmwuY29tKQorICogIENvcHlyaWdodCAyMDA2LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC1teDI3Lmg+CisjaW5jbHVkZSA8bWFjaC9teGNfbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy9wY2E5NTN4Lmg+CisjaW5jbHVkZSA8bWFjaC9pbXhmYi5oPgorI2luY2x1ZGUgPG1hY2gvbW1jLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLWlteDI3LmgiCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCitzdGF0aWMgdW5zaWduZWQgaW50IG14dF90ZDYwX3BpbnNbXSBfX2luaXRkYXRhID0geworCS8qIFVBUlQwICovCisJUEUxMl9QRl9VQVJUMV9UWEQsCisJUEUxM19QRl9VQVJUMV9SWEQsCisJUEUxNF9QRl9VQVJUMV9DVFMsCisJUEUxNV9QRl9VQVJUMV9SVFMsCisJLyogVUFSVDEgKi8KKwlQRTNfUEZfVUFSVDJfQ1RTLAorCVBFNF9QRl9VQVJUMl9SVFMsCisJUEU2X1BGX1VBUlQyX1RYRCwKKwlQRTdfUEZfVUFSVDJfUlhELAorCS8qIFVBUlQyICovCisJUEU4X1BGX1VBUlQzX1RYRCwKKwlQRTlfUEZfVUFSVDNfUlhELAorCVBFMTBfUEZfVUFSVDNfQ1RTLAorCVBFMTFfUEZfVUFSVDNfUlRTLAorCS8qIEZFQyAqLworCVBEMF9BSU5fRkVDX1RYRDAsCisJUEQxX0FJTl9GRUNfVFhEMSwKKwlQRDJfQUlOX0ZFQ19UWEQyLAorCVBEM19BSU5fRkVDX1RYRDMsCisJUEQ0X0FPVVRfRkVDX1JYX0VSLAorCVBENV9BT1VUX0ZFQ19SWEQxLAorCVBENl9BT1VUX0ZFQ19SWEQyLAorCVBEN19BT1VUX0ZFQ19SWEQzLAorCVBEOF9BRl9GRUNfTURJTywKKwlQRDlfQUlOX0ZFQ19NREMsCisJUEQxMF9BT1VUX0ZFQ19DUlMsCisJUEQxMV9BT1VUX0ZFQ19UWF9DTEssCisJUEQxMl9BT1VUX0ZFQ19SWEQwLAorCVBEMTNfQU9VVF9GRUNfUlhfRFYsCisJUEQxNF9BT1VUX0ZFQ19SWF9DTEssCisJUEQxNV9BT1VUX0ZFQ19DT0wsCisJUEQxNl9BSU5fRkVDX1RYX0VSLAorCVBGMjNfQUlOX0ZFQ19UWF9FTiwKKwkvKiBJMkMxICovCisJUEQxN19QRl9JMkNfREFUQSwKKwlQRDE4X1BGX0kyQ19DTEssCisJLyogSTJDMiAqLworCVBDNV9QRl9JMkMyX1NEQSwKKwlQQzZfUEZfSTJDMl9TQ0wsCisJLyogRkIgKi8KKwlQQTVfUEZfTFNDTEssCisJUEE2X1BGX0xEMCwKKwlQQTdfUEZfTEQxLAorCVBBOF9QRl9MRDIsCisJUEE5X1BGX0xEMywKKwlQQTEwX1BGX0xENCwKKwlQQTExX1BGX0xENSwKKwlQQTEyX1BGX0xENiwKKwlQQTEzX1BGX0xENywKKwlQQTE0X1BGX0xEOCwKKwlQQTE1X1BGX0xEOSwKKwlQQTE2X1BGX0xEMTAsCisJUEExN19QRl9MRDExLAorCVBBMThfUEZfTEQxMiwKKwlQQTE5X1BGX0xEMTMsCisJUEEyMF9QRl9MRDE0LAorCVBBMjFfUEZfTEQxNSwKKwlQQTIyX1BGX0xEMTYsCisJUEEyM19QRl9MRDE3LAorCVBBMjVfUEZfQ0xTLAorCVBBMjdfUEZfU1BMX1NQUiwKKwlQQTI4X1BGX0hTWU5DLAorCVBBMjlfUEZfVlNZTkMsCisJUEEzMF9QRl9DT05UUkFTVCwKKwlQQTMxX1BGX09FX0FDRCwKKwkvKiBPV0lSRSAqLworCVBFMTZfQUZfT1dJUkUsCisJLyogU0RIQzEqLworCVBFMThfUEZfU0QxX0QwLAorCVBFMTlfUEZfU0QxX0QxLAorCVBFMjBfUEZfU0QxX0QyLAorCVBFMjFfUEZfU0QxX0QzLAorCVBFMjJfUEZfU0QxX0NNRCwKKwlQRTIzX1BGX1NEMV9DTEssCisJUEY4X0FGX0FUQV9JT1JEWSwKKwkvKiBTREhDMiovCisJUEI0X1BGX1NEMl9EMCwKKwlQQjVfUEZfU0QyX0QxLAorCVBCNl9QRl9TRDJfRDIsCisJUEI3X1BGX1NEMl9EMywKKwlQQjhfUEZfU0QyX0NNRCwKKwlQQjlfUEZfU0QyX0NMSywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YQorbXh0X3RkNjBfbmFuZF9ib2FyZF9pbmZvIF9faW5pdGNvbnN0ID0geworCS53aWR0aCA9IDEsCisJLmh3X2VjYyA9IDEsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGlteGkyY19wbGF0Zm9ybV9kYXRhIG14dF90ZDYwX2kyYzBfZGF0YSBfX2luaXRjb25zdCA9IHsKKwkuYml0cmF0ZSA9IDEwMDAwMCwKK307CisKKy8qIFBDQTk1NTcgKi8KK3N0YXRpYyBpbnQgbXh0X3RkNjBfcGNhOTU1N19zZXR1cChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCXVuc2lnbmVkIGdwaW9fYmFzZSwgdW5zaWduZWQgbmdwaW8sCisJCQkJdm9pZCAqY29udGV4dCkKK3sKKwlzdGF0aWMgaW50IG14dF90ZDYwX2dwaW9fdmFsdWVbXSA9IHsKKwkJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDEKKwl9OworCWludCBuOworCisJZm9yIChuID0gMDsgbiA8IEFSUkFZX1NJWkUobXh0X3RkNjBfZ3Bpb192YWx1ZSk7ICsrbikgeworCQlncGlvX3JlcXVlc3QoZ3Bpb19iYXNlICsgbiwgIk1YVF9URDYwIEdQSU8gRXhwIik7CisJCWlmIChteHRfdGQ2MF9ncGlvX3ZhbHVlW25dIDwgMCkKKwkJCWdwaW9fZGlyZWN0aW9uX2lucHV0KGdwaW9fYmFzZSArIG4pOworCQllbHNlCisJCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3Bpb19iYXNlICsgbiwKKwkJCQkJCW14dF90ZDYwX2dwaW9fdmFsdWVbbl0pOworCQlncGlvX2V4cG9ydChncGlvX2Jhc2UgKyBuLCAwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwY2E5NTN4X3BsYXRmb3JtX2RhdGEgbXh0X3RkNjBfcGNhOTU1N19wZGF0YSA9IHsKKwkuZ3Bpb19iYXNlCT0gMjQwLCAvKiBwbGFjZSBQQ0E5NTU3IGFmdGVyIGFsbCBNWDI3IGdwaW8gcGlucyAqLworCS5pbnZlcnQJCT0gMCwgLyogRG8gbm90IGludmVydCAqLworCS5zZXR1cAkJPSBteHRfdGQ2MF9wY2E5NTU3X3NldHVwLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBteHRfdGQ2MF9pMmNfZGV2aWNlc1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInBjYTk1NTciLCAweDE4KSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmbXh0X3RkNjBfcGNhOTU1N19wZGF0YSwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBteHRfdGQ2MF9pMmMxX2RhdGEgX19pbml0Y29uc3QgPSB7CisJLmJpdHJhdGUgPSAxMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIG14dF90ZDYwX2kyYzJfZGV2aWNlc1tdID0geworfTsKKworc3RhdGljIHN0cnVjdCBpbXhfZmJfdmlkZW9tb2RlIG14dF90ZDYwX21vZGVzW10gPSB7CisJeworCQkubW9kZSA9IHsKKwkJCS5uYW1lCQk9ICJDaGltZWkgTFc3MDBBVDkwMDMiLAorCQkJLnJlZnJlc2gJPSA2MCwKKwkJCS54cmVzCQk9IDgwMCwKKwkJCS55cmVzCQk9IDQ4MCwKKwkJCS5waXhjbG9jawk9IDMwMzAzLAorCQkJLmhzeW5jX2xlbgk9IDY0LAorCQkJLmxlZnRfbWFyZ2luCT0gMHg2NywKKwkJCS5yaWdodF9tYXJnaW4JPSAweDY4LAorCQkJLnZzeW5jX2xlbgk9IDE2LAorCQkJLnVwcGVyX21hcmdpbgk9IDB4MGYsCisJCQkubG93ZXJfbWFyZ2luCT0gMHgwZiwKKwkJfSwKKwkJLmJwcAkJPSAxNiwKKwkJLnBjcgkJPSAweEZBMjA4QjgzLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGlteF9mYl9wbGF0Zm9ybV9kYXRhIG14dF90ZDYwX2ZiX2RhdGEgPSB7CisJLm1vZGUgPSBteHRfdGQ2MF9tb2RlcywKKwkubnVtX21vZGVzID0gQVJSQVlfU0laRShteHRfdGQ2MF9tb2RlcyksCisKKwkvKgorCSAqIC0gSFNZTkMgYWN0aXZlIGhpZ2gKKwkgKiAtIFZTWU5DIGFjdGl2ZSBoaWdoCisJICogLSBjbGsgbm90ZW5hYmxlZCB3aGlsZSBpZGxlCisJICogLSBjbG9jayBpbnZlcnRlZAorCSAqIC0gZGF0YSBub3QgaW52ZXJ0ZWQKKwkgKiAtIGRhdGEgZW5hYmxlIGxvdyBhY3RpdmUKKwkgKiAtIGVuYWJsZSBzaGFycCBtb2RlCisJICovCisJLnB3bXIJCT0gMHgwMEE5MDNGRiwKKwkubHNjcjEJCT0gMHgwMDEyMDMwMCwKKwkuZG1hY3IJCT0gMHgwMDAyMDAxMCwKK307CisKK3N0YXRpYyBpbnQgbXh0X3RkNjBfc2RoYzFfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgZGV0ZWN0X2lycSwKKwkJCQl2b2lkICpkYXRhKQoreworCXJldHVybiByZXF1ZXN0X2lycShJUlFfR1BJT0YoOCksIGRldGVjdF9pcnEsIElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJCSJzZGhjMS1jYXJkLWRldGVjdCIsIGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBteHRfdGQ2MF9zZGhjMV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlmcmVlX2lycShJUlFfR1BJT0YoOCksIGRhdGEpOworfQorCitzdGF0aWMgc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhIHNkaGMxX3BkYXRhID0geworCS5pbml0ID0gbXh0X3RkNjBfc2RoYzFfaW5pdCwKKwkuZXhpdCA9IG14dF90ZDYwX3NkaGMxX2V4aXQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJm14Y19mZWNfZGV2aWNlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSBfX2luaXRjb25zdCA9IHsKKwkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG14dF90ZDYwX2JvYXJkX2luaXQodm9pZCkKK3sKKwlteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKG14dF90ZDYwX3BpbnMsIEFSUkFZX1NJWkUobXh0X3RkNjBfcGlucyksCisJCQkiTVhUX1RENjAiKTsKKworCWlteDI3X2FkZF9pbXhfdWFydDAoJnVhcnRfcGRhdGEpOworCWlteDI3X2FkZF9pbXhfdWFydDEoJnVhcnRfcGRhdGEpOworCWlteDI3X2FkZF9pbXhfdWFydDIoJnVhcnRfcGRhdGEpOworCWlteDI3X2FkZF9teGNfbmFuZCgmbXh0X3RkNjBfbmFuZF9ib2FyZF9pbmZvKTsKKworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIG14dF90ZDYwX2kyY19kZXZpY2VzLAorCQkJCUFSUkFZX1NJWkUobXh0X3RkNjBfaTJjX2RldmljZXMpKTsKKworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIG14dF90ZDYwX2kyYzJfZGV2aWNlcywKKwkJCQlBUlJBWV9TSVpFKG14dF90ZDYwX2kyYzJfZGV2aWNlcykpOworCisJaW14MjdfYWRkX2kyY19pbXgwKCZteHRfdGQ2MF9pMmMwX2RhdGEpOworCWlteDI3X2FkZF9pMmNfaW14MSgmbXh0X3RkNjBfaTJjMV9kYXRhKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfZmJfZGV2aWNlLCAmbXh0X3RkNjBfZmJfZGF0YSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NkaGNfZGV2aWNlMCwgJnNkaGMxX3BkYXRhKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHBsYXRmb3JtX2RldmljZXMsIEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2aWNlcykpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbXh0X3RkNjBfdGltZXJfaW5pdCh2b2lkKQoreworCW14MjdfY2xvY2tzX2luaXQoMjYwMDAwMDApOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBteHRfdGQ2MF90aW1lciA9IHsKKwkuaW5pdAk9IG14dF90ZDYwX3RpbWVyX2luaXQsCit9OworCitNQUNISU5FX1NUQVJUKE1YVF9URDYwLCAiTWF4dHJhY2sgaS1NWFQgVEQ2MCIpCisJLyogbWFpbnRhaW5lcjogTWF4dHJhY2sgSW5kdXN0cmlhbCAqLworCS5waHlzX2lvCT0gTVgyN19BSVBJX0JBU0VfQUREUiwKKwkuaW9fcGdfb2Zmc3QJPSAoKE1YMjdfQUlQSV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IE1YMjdfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvCQk9IG14MjdfbWFwX2lvLAorCS5pbml0X2lycQk9IG14MjdfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IG14dF90ZDYwX2JvYXJkX2luaXQsCisJLnRpbWVyCQk9ICZteHRfdGQ2MF90aW1lciwKK01BQ0hJTkVfRU5ECisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtcGNhMTAwLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXBjYTEwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjOTJkZWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXBjYTEwMC5jCkBAIC0wLDAgKzEsNDYwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDcgUm9iZXJ0IFNjaHdlYmVsIDxyLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlPiwgUGVuZ3V0cm9uaXgKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTYXNjaGEgSGF1ZXIgKGtlcm5lbEBwZW5ndXRyb25peC5kZSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvYXQyNC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9lZXByb20uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3VscGkuaD4KKyNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC1teDI3Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPG1hY2gvYXVkbXV4Lmg+CisjaW5jbHVkZSA8bWFjaC9zc2kuaD4KKyNpbmNsdWRlIDxtYWNoL214Y19uYW5kLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9tbWMuaD4KKyNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+CisjaW5jbHVkZSA8bWFjaC91bHBpLmg+CisjaW5jbHVkZSA8bWFjaC9pbXhmYi5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy1pbXgyNy5oIgorI2luY2x1ZGUgImRldmljZXMuaCIKKworI2RlZmluZSBPVEdfUEhZX0NTX0dQSU8gKEdQSU9fUE9SVEIgKyAyMykKKyNkZWZpbmUgVVNCSDJfUEhZX0NTX0dQSU8gKEdQSU9fUE9SVEIgKyAyNCkKKyNkZWZpbmUgU1BJMV9TUzAgKEdQSU9fUE9SVEQgKyAyOCkKKyNkZWZpbmUgU1BJMV9TUzEgKEdQSU9fUE9SVEQgKyAyNykKKyNkZWZpbmUgU0QyX0NEIChHUElPX1BPUlRDICsgMjkpCisKK3N0YXRpYyBpbnQgcGNhMTAwX3BpbnNbXSA9IHsKKwkvKiBVQVJUMSAqLworCVBFMTJfUEZfVUFSVDFfVFhELAorCVBFMTNfUEZfVUFSVDFfUlhELAorCVBFMTRfUEZfVUFSVDFfQ1RTLAorCVBFMTVfUEZfVUFSVDFfUlRTLAorCS8qIFNESEMgKi8KKwlQQjRfUEZfU0QyX0QwLAorCVBCNV9QRl9TRDJfRDEsCisJUEI2X1BGX1NEMl9EMiwKKwlQQjdfUEZfU0QyX0QzLAorCVBCOF9QRl9TRDJfQ01ELAorCVBCOV9QRl9TRDJfQ0xLLAorCVNEMl9DRCB8IEdQSU9fR1BJTyB8IEdQSU9fSU4sCisJLyogRkVDICovCisJUEQwX0FJTl9GRUNfVFhEMCwKKwlQRDFfQUlOX0ZFQ19UWEQxLAorCVBEMl9BSU5fRkVDX1RYRDIsCisJUEQzX0FJTl9GRUNfVFhEMywKKwlQRDRfQU9VVF9GRUNfUlhfRVIsCisJUEQ1X0FPVVRfRkVDX1JYRDEsCisJUEQ2X0FPVVRfRkVDX1JYRDIsCisJUEQ3X0FPVVRfRkVDX1JYRDMsCisJUEQ4X0FGX0ZFQ19NRElPLAorCVBEOV9BSU5fRkVDX01EQywKKwlQRDEwX0FPVVRfRkVDX0NSUywKKwlQRDExX0FPVVRfRkVDX1RYX0NMSywKKwlQRDEyX0FPVVRfRkVDX1JYRDAsCisJUEQxM19BT1VUX0ZFQ19SWF9EViwKKwlQRDE0X0FPVVRfRkVDX1JYX0NMSywKKwlQRDE1X0FPVVRfRkVDX0NPTCwKKwlQRDE2X0FJTl9GRUNfVFhfRVIsCisJUEYyM19BSU5fRkVDX1RYX0VOLAorCS8qIFNTSTEgKi8KKwlQQzIwX1BGX1NTSTFfRlMsCisJUEMyMV9QRl9TU0kxX1JYRCwKKwlQQzIyX1BGX1NTSTFfVFhELAorCVBDMjNfUEZfU1NJMV9DTEssCisJLyogb25ib2FyZCBJMkMgKi8KKwlQQzVfUEZfSTJDMl9TREEsCisJUEM2X1BGX0kyQzJfU0NMLAorCS8qIGV4dGVybmFsIEkyQyAqLworCVBEMTdfUEZfSTJDX0RBVEEsCisJUEQxOF9QRl9JMkNfQ0xLLAorCS8qIFNQSTEgKi8KKwlQRDI1X1BGX0NTUEkxX1JEWSwKKwlQRDI5X1BGX0NTUEkxX1NDTEssCisJUEQzMF9QRl9DU1BJMV9NSVNPLAorCVBEMzFfUEZfQ1NQSTFfTU9TSSwKKwkvKiBPVEcgKi8KKwlPVEdfUEhZX0NTX0dQSU8gfCBHUElPX0dQSU8gfCBHUElPX09VVCwKKwlQQzdfUEZfVVNCT1RHX0RBVEE1LAorCVBDOF9QRl9VU0JPVEdfREFUQTYsCisJUEM5X1BGX1VTQk9UR19EQVRBMCwKKwlQQzEwX1BGX1VTQk9UR19EQVRBMiwKKwlQQzExX1BGX1VTQk9UR19EQVRBMSwKKwlQQzEyX1BGX1VTQk9UR19EQVRBNCwKKwlQQzEzX1BGX1VTQk9UR19EQVRBMywKKwlQRTBfUEZfVVNCT1RHX05YVCwKKwlQRTFfUEZfVVNCT1RHX1NUUCwKKwlQRTJfUEZfVVNCT1RHX0RJUiwKKwlQRTI0X1BGX1VTQk9UR19DTEssCisJUEUyNV9QRl9VU0JPVEdfREFUQTcsCisJLyogVVNCSDIgKi8KKwlVU0JIMl9QSFlfQ1NfR1BJTyB8IEdQSU9fR1BJTyB8IEdQSU9fT1VULAorCVBBMF9QRl9VU0JIMl9DTEssCisJUEExX1BGX1VTQkgyX0RJUiwKKwlQQTJfUEZfVVNCSDJfREFUQTcsCisJUEEzX1BGX1VTQkgyX05YVCwKKwlQQTRfUEZfVVNCSDJfU1RQLAorCVBEMTlfQUZfVVNCSDJfREFUQTQsCisJUEQyMF9BRl9VU0JIMl9EQVRBMywKKwlQRDIxX0FGX1VTQkgyX0RBVEE2LAorCVBEMjJfQUZfVVNCSDJfREFUQTAsCisJUEQyM19BRl9VU0JIMl9EQVRBMiwKKwlQRDI0X0FGX1VTQkgyX0RBVEExLAorCVBEMjZfQUZfVVNCSDJfREFUQTUsCisJLyogZGlzcGxheSAqLworCVBBNV9QRl9MU0NMSywKKwlQQTZfUEZfTEQwLAorCVBBN19QRl9MRDEsCisJUEE4X1BGX0xEMiwKKwlQQTlfUEZfTEQzLAorCVBBMTBfUEZfTEQ0LAorCVBBMTFfUEZfTEQ1LAorCVBBMTJfUEZfTEQ2LAorCVBBMTNfUEZfTEQ3LAorCVBBMTRfUEZfTEQ4LAorCVBBMTVfUEZfTEQ5LAorCVBBMTZfUEZfTEQxMCwKKwlQQTE3X1BGX0xEMTEsCisJUEExOF9QRl9MRDEyLAorCVBBMTlfUEZfTEQxMywKKwlQQTIwX1BGX0xEMTQsCisJUEEyMV9QRl9MRDE1LAorCVBBMjJfUEZfTEQxNiwKKwlQQTIzX1BGX0xEMTcsCisJUEEyNl9QRl9QUywKKwlQQTI4X1BGX0hTWU5DLAorCVBBMjlfUEZfVlNZTkMsCisJUEEzMV9QRl9PRV9BQ0QsCisJLyogZnJlZSBHUElPICovCisJR1BJT19QT1JUQyB8IDMxIHwgR1BJT19HUElPIHwgR1BJT19JTiwgLyogR1BJTzBfSVJRICovCisJR1BJT19QT1JUQyB8IDI1IHwgR1BJT19HUElPIHwgR1BJT19JTiwgLyogR1BJTzFfSVJRICovCisJR1BJT19QT1JURSB8IDUgfCBHUElPX0dQSU8gfCBHUElPX0lOLCAvKiBHUElPMl9JUlEgKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgX19pbml0Y29uc3QgPSB7CisJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YQorcGNhMTAwX25hbmRfYm9hcmRfaW5mbyBfX2luaXRjb25zdCA9IHsKKwkud2lkdGggPSAxLAorCS5od19lY2MgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZteGNfdzFfbWFzdGVyX2RldmljZSwKKwkmbXhjX2ZlY19kZXZpY2UsCisJJm14Y193ZHQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGlteGkyY19wbGF0Zm9ybV9kYXRhIHBjYTEwMF9pMmMxX2RhdGEgX19pbml0Y29uc3QgPSB7CisJLmJpdHJhdGUgPSAxMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGF0MjRfcGxhdGZvcm1fZGF0YSBib2FyZF9lZXByb20gPSB7CisJLmJ5dGVfbGVuID0gNDA5NiwKKwkucGFnZV9zaXplID0gMzIsCisJLmZsYWdzID0gQVQyNF9GTEFHX0FERFIxNiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gcGNhMTAwX2kyY19kZXZpY2VzW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygiYXQyNCIsIDB4NTIpLCAvKiBFMD0wLCBFMT0xLCBFMj0wICovCisJCS5wbGF0Zm9ybV9kYXRhID0gJmJvYXJkX2VlcHJvbSwKKwl9LCB7CisJCUkyQ19CT0FSRF9JTkZPKCJydGMtcGNmODU2MyIsIDB4NTEpLAorCQkudHlwZSA9ICJwY2Y4NTYzIgorCX0sIHsKKwkJSTJDX0JPQVJEX0lORk8oImxtNzUiLCAweDRhKSwKKwkJLnR5cGUgPSAibG03NSIKKwl9Cit9OworCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX0lNWCkgfHwgZGVmaW5lZChDT05GSUdfU1BJX0lNWF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHNwaV9lZXByb20gYXQyNTMyMCA9IHsKKwkubmFtZQkJPSAiYXQyNTMyMGFuIiwKKwkuYnl0ZV9sZW4JPSA0MDk2LAorCS5wYWdlX3NpemUJPSAzMiwKKwkuZmxhZ3MJCT0gRUVfQUREUjIsCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIHBjYTEwMF9zcGlfYm9hcmRfaW5mb1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkubW9kYWxpYXMgPSAiYXQyNSIsCisJCS5tYXhfc3BlZWRfaHogPSAzMDAwMCwKKwkJLmJ1c19udW0gPSAwLAorCQkuY2hpcF9zZWxlY3QgPSAxLAorCQkucGxhdGZvcm1fZGF0YSA9ICZhdDI1MzIwLAorCX0sCit9OworCitzdGF0aWMgaW50IHBjYTEwMF9zcGlfY3NbXSA9IHtTUEkxX1NTMCwgU1BJMV9TUzF9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9pbXhfbWFzdGVyIHBjYTEwMF9zcGkwX2RhdGEgX19pbml0Y29uc3QgPSB7CisJLmNoaXBzZWxlY3QJPSBwY2ExMDBfc3BpX2NzLAorCS5udW1fY2hpcHNlbGVjdCA9IEFSUkFZX1NJWkUocGNhMTAwX3NwaV9jcyksCit9OworI2VuZGlmCisKK3N0YXRpYyB2b2lkIHBjYTEwMF9hYzk3X3dhcm1fcmVzZXQoc3RydWN0IHNuZF9hYzk3ICphYzk3KQoreworCW14Y19ncGlvX21vZGUoR1BJT19QT1JUQyB8IDIwIHwgR1BJT19HUElPIHwgR1BJT19PVVQpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUE9SVEMgKyAyMCwgMSk7CisJdWRlbGF5KDIpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUE9SVEMgKyAyMCwgMCk7CisJbXhjX2dwaW9fbW9kZShQQzIwX1BGX1NTSTFfRlMpOworCW1zbGVlcCgyKTsKK30KKworc3RhdGljIHZvaWQgcGNhMTAwX2FjOTdfY29sZF9yZXNldChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCit7CisJbXhjX2dwaW9fbW9kZShHUElPX1BPUlRDIHwgMjAgfCBHUElPX0dQSU8gfCBHUElPX09VVCk7ICAvKiBGUyAqLworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUE9SVEMgKyAyMCwgMCk7CisJbXhjX2dwaW9fbW9kZShHUElPX1BPUlRDIHwgMjIgfCBHUElPX0dQSU8gfCBHUElPX09VVCk7ICAvKiBUWCAqLworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUE9SVEMgKyAyMiwgMCk7CisJbXhjX2dwaW9fbW9kZShHUElPX1BPUlRDIHwgMjggfCBHUElPX0dQSU8gfCBHUElPX09VVCk7ICAvKiByZXNldCAqLworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUE9SVEMgKyAyOCwgMCk7CisJdWRlbGF5KDEwKTsKKwlncGlvX3NldF92YWx1ZShHUElPX1BPUlRDICsgMjgsIDEpOworCW14Y19ncGlvX21vZGUoUEMyMF9QRl9TU0kxX0ZTKTsKKwlteGNfZ3Bpb19tb2RlKFBDMjJfUEZfU1NJMV9UWEQpOworCW1zbGVlcCgyKTsKK30KKworc3RhdGljIHN0cnVjdCBpbXhfc3NpX3BsYXRmb3JtX2RhdGEgcGNhMTAwX3NzaV9wZGF0YSA9IHsKKwkuYWM5N19yZXNldAkJPSBwY2ExMDBfYWM5N19jb2xkX3Jlc2V0LAorCS5hYzk3X3dhcm1fcmVzZXQJPSBwY2ExMDBfYWM5N193YXJtX3Jlc2V0LAorCS5mbGFncwkJCT0gSU1YX1NTSV9VU0VfQUM5NywKK307CisKK3N0YXRpYyBpbnQgcGNhMTAwX3NkaGMyX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFfaGFuZGxlcl90IGRldGVjdF9pcnEsCisJCXZvaWQgKmRhdGEpCit7CisJaW50IHJldDsKKworCXJldCA9IHJlcXVlc3RfaXJxKElSUV9HUElPQygyOSksIGRldGVjdF9pcnEsCisJCQkgIElSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKKwkJCSAgImlteC1tbWMtZGV0ZWN0IiwgZGF0YSk7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkicGNhMTAwOiBGYWlsZWQgdG8gcmV1ZXN0IGlycSBmb3Igc2QvbW1jIGRldGVjdGlvblxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwY2ExMDBfc2RoYzJfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJZnJlZV9pcnEoSVJRX0dQSU9DKDI5KSwgZGF0YSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW14bW1jX3BsYXRmb3JtX2RhdGEgc2RoY19wZGF0YSA9IHsKKwkuaW5pdCA9IHBjYTEwMF9zZGhjMl9pbml0LAorCS5leGl0ID0gcGNhMTAwX3NkaGMyX2V4aXQsCit9OworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1VMUEkpCitzdGF0aWMgaW50IG90Z19waHlfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWdwaW9fc2V0X3ZhbHVlKE9UR19QSFlfQ1NfR1BJTywgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSBvdGdfcGRhdGEgPSB7CisJLmluaXQJPSBvdGdfcGh5X2luaXQsCisJLnBvcnRzYwk9IE1YQ19FSENJX01PREVfVUxQSSwKKwkuZmxhZ3MJPSBNWENfRUhDSV9JTlRFUkZBQ0VfRElGRl9VTkksCit9OworCitzdGF0aWMgaW50IHVzYmgyX3BoeV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJZ3Bpb19zZXRfdmFsdWUoVVNCSDJfUEhZX0NTX0dQSU8sIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG14Y191c2JoX3BsYXRmb3JtX2RhdGEgdXNiaDJfcGRhdGEgPSB7CisJLmluaXQJPSB1c2JoMl9waHlfaW5pdCwKKwkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VTFBJLAorCS5mbGFncwk9IE1YQ19FSENJX0lOVEVSRkFDRV9ESUZGX1VOSSwKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIG90Z19kZXZpY2VfcGRhdGEgPSB7CisJLm9wZXJhdGluZ19tb2RlID0gRlNMX1VTQjJfRFJfREVWSUNFLAorCS5waHlfbW9kZSAgICAgICA9IEZTTF9VU0IyX1BIWV9VTFBJLAorfTsKKworc3RhdGljIGludCBvdGdfbW9kZV9ob3N0OworCitzdGF0aWMgaW50IF9faW5pdCBwY2ExMDBfb3RnX21vZGUoY2hhciAqb3B0aW9ucykKK3sKKwlpZiAoIXN0cmNtcChvcHRpb25zLCAiaG9zdCIpKQorCQlvdGdfbW9kZV9ob3N0ID0gMTsKKwllbHNlIGlmICghc3RyY21wKG9wdGlvbnMsICJkZXZpY2UiKSkKKwkJb3RnX21vZGVfaG9zdCA9IDA7CisJZWxzZQorCQlwcl9pbmZvKCJvdGdfbW9kZSBuZWl0aGVyIFwiaG9zdFwiIG5vciBcImRldmljZVwiLiAiCisJCQkiRGVmYXVsdGluZyB0byBkZXZpY2VcbiIpOworCXJldHVybiAwOworfQorX19zZXR1cCgib3RnX21vZGU9IiwgcGNhMTAwX290Z19tb2RlKTsKKworLyogZnJhbWVidWZmZXIgaW5mbyAqLworc3RhdGljIHN0cnVjdCBpbXhfZmJfdmlkZW9tb2RlIHBjYTEwMF9mYl9tb2Rlc1tdID0geworCXsKKwkJLm1vZGUgPSB7CisJCQkubmFtZQkJPSAiRU1FUkdJTkctRVRWNTcwRzBESFUiLAorCQkJLnJlZnJlc2gJPSA2MCwKKwkJCS54cmVzCQk9IDY0MCwKKwkJCS55cmVzCQk9IDQ4MCwKKwkJCS5waXhjbG9jawk9IDM5NzIyLCAvKiBpbiBwcyAoMjUuMTc1IE1IeikgKi8KKwkJCS5oc3luY19sZW4JPSAzMCwKKwkJCS5sZWZ0X21hcmdpbgk9IDExNCwKKwkJCS5yaWdodF9tYXJnaW4JPSAxNiwKKwkJCS52c3luY19sZW4JPSAzLAorCQkJLnVwcGVyX21hcmdpbgk9IDMyLAorCQkJLmxvd2VyX21hcmdpbgk9IDAsCisJCX0sCisJCS8qCisJCSAqIFRGVAorCQkgKiBQaXhlbCBwb2wgYWN0aXZlIGhpZ2gKKwkJICogSFNZTkMgYWN0aXZlIGxvdworCQkgKiBWU1lOQyBhY3RpdmUgbG93CisJCSAqIHVzZSBIU1lOQyBmb3IgQUNEIGNvdW50CisJCSAqIGxpbmUgY2xvY2sgZGlzYWJsZSB3aGlsZSBpZGxlCisJCSAqIGFsd2F5cyBlbmFibGUgbGluZSBjbG9jayBldmVuIGlmIG5vIGRhdGEKKwkJICovCisJCS5wY3IgPSAweGYwYzA4MDgwLAorCQkuYnBwID0gMTYsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgcGNhMTAwX2ZiX2RhdGEgPSB7CisJLm1vZGUgPSBwY2ExMDBfZmJfbW9kZXMsCisJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUocGNhMTAwX2ZiX21vZGVzKSwKKworCS5wd21yCQk9IDB4MDBBOTAzRkYsCisJLmxzY3IxCQk9IDB4MDAxMjAzMDAsCisJLmRtYWNyCQk9IDB4MDAwMjAwMTAsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgcGNhMTAwX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJLyogU1NJIHVuaXQgKi8KKwlteGNfYXVkbXV4X3YxX2NvbmZpZ3VyZV9wb3J0KE1YMjdfQVVETVVYX0hQQ1IxX1NTSTAsCisJCQkJICBNWENfQVVETVVYX1YxX1BDUl9TWU4gfCAvKiA0d2lyZSBtb2RlICovCisJCQkJICBNWENfQVVETVVYX1YxX1BDUl9URkNTRUwoMykgfAorCQkJCSAgTVhDX0FVRE1VWF9WMV9QQ1JfVENMS0RJUiB8IC8qIGNsb2NrIGlzIG91dHB1dCAqLworCQkJCSAgTVhDX0FVRE1VWF9WMV9QQ1JfUlhEU0VMKDMpKTsKKwlteGNfYXVkbXV4X3YxX2NvbmZpZ3VyZV9wb3J0KDMsCisJCQkJICBNWENfQVVETVVYX1YxX1BDUl9TWU4gfCAvKiA0d2lyZSBtb2RlICovCisJCQkJICBNWENfQVVETVVYX1YxX1BDUl9URkNTRUwoMCkgfAorCQkJCSAgTVhDX0FVRE1VWF9WMV9QQ1JfVEZTRElSIHwKKwkJCQkgIE1YQ19BVURNVVhfVjFfUENSX1JYRFNFTCgwKSk7CisKKwlyZXQgPSBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKHBjYTEwMF9waW5zLAorCQkJQVJSQVlfU0laRShwY2ExMDBfcGlucyksICJQQ0ExMDAiKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgInBjYTEwMDogRmFpbGVkIHRvIHNldHVwIHBpbnMgKCVkKVxuIiwgcmV0KTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJmlteF9zc2lfZGV2aWNlMCwgJnBjYTEwMF9zc2lfcGRhdGEpOworCisJaW14MjdfYWRkX2lteF91YXJ0MCgmdWFydF9wZGF0YSk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc2RoY19kZXZpY2UxLCAmc2RoY19wZGF0YSk7CisKKwlpbXgyN19hZGRfbXhjX25hbmQoJnBjYTEwMF9uYW5kX2JvYXJkX2luZm8pOworCisJLyogb25seSB0aGUgaTJjIG1hc3RlciAxIGlzIHVzZWQgb24gdGhpcyBDUFUgY2FyZCAqLworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIHBjYTEwMF9pMmNfZGV2aWNlcywKKwkJCQlBUlJBWV9TSVpFKHBjYTEwMF9pMmNfZGV2aWNlcykpOworCisJaW14MjdfYWRkX2kyY19pbXgxKCZwY2ExMDBfaTJjMV9kYXRhKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9JTVgpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9JTVhfTU9EVUxFKQorCW14Y19ncGlvX21vZGUoR1BJT19QT1JURCB8IDI4IHwgR1BJT19HUElPIHwgR1BJT19JTik7CisJbXhjX2dwaW9fbW9kZShHUElPX1BPUlREIHwgMjcgfCBHUElPX0dQSU8gfCBHUElPX0lOKTsKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhwY2ExMDBfc3BpX2JvYXJkX2luZm8sCisJCQkJQVJSQVlfU0laRShwY2ExMDBfc3BpX2JvYXJkX2luZm8pKTsKKwlpbXgyN19hZGRfc3BpX2lteDAoJnBjYTEwMF9zcGlfMF9kYXRhKTsKKyNlbmRpZgorCisJZ3Bpb19yZXF1ZXN0KE9UR19QSFlfQ1NfR1BJTywgInVzYi1vdGctY3MiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoT1RHX1BIWV9DU19HUElPLCAxKTsKKwlncGlvX3JlcXVlc3QoVVNCSDJfUEhZX0NTX0dQSU8sICJ1c2ItaG9zdDItY3MiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoVVNCSDJfUEhZX0NTX0dQSU8sIDEpOworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1VMUEkpCisJaWYgKG90Z19tb2RlX2hvc3QpIHsKKwkJb3RnX3BkYXRhLm90ZyA9IG90Z191bHBpX2NyZWF0ZSgmbXhjX3VscGlfYWNjZXNzX29wcywKKwkJCQlVU0JfT1RHX0RSVl9WQlVTIHwgVVNCX09UR19EUlZfVkJVU19FWFQpOworCisJCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19vdGdfaG9zdCwgJm90Z19wZGF0YSk7CisJfQorCisJdXNiaDJfcGRhdGEub3RnID0gb3RnX3VscGlfY3JlYXRlKCZteGNfdWxwaV9hY2Nlc3Nfb3BzLAorCQkJCVVTQl9PVEdfRFJWX1ZCVVMgfCBVU0JfT1RHX0RSVl9WQlVTX0VYVCk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdXNiaDIsICZ1c2JoMl9wZGF0YSk7CisjZW5kaWYKKwlpZiAoIW90Z19tb2RlX2hvc3QpIHsKKwkJZ3Bpb19zZXRfdmFsdWUoT1RHX1BIWV9DU19HUElPLCAwKTsKKwkJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX290Z191ZGNfZGV2aWNlLCAmb3RnX2RldmljZV9wZGF0YSk7CisJfQorCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX2ZiX2RldmljZSwgJnBjYTEwMF9mYl9kYXRhKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHBsYXRmb3JtX2RldmljZXMsIEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2aWNlcykpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcGNhMTAwX3RpbWVyX2luaXQodm9pZCkKK3sKKwlteDI3X2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgcGNhMTAwX3RpbWVyID0geworCS5pbml0ID0gcGNhMTAwX3RpbWVyX2luaXQsCit9OworCitNQUNISU5FX1NUQVJUKFBDQTEwMCwgInBoeUNBUkQtaS5NWDI3IikKKwkucGh5c19pbyAgICAgICAgPSBNWDI3X0FJUElfQkFTRV9BRERSLAorCS5pb19wZ19vZmZzdCAgICA9ICgoTVgyN19BSVBJX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zICAgID0gTVgyN19QSFlTX09GRlNFVCArIDB4MTAwLAorCS5tYXBfaW8gICAgICAgICA9IG14MjdfbWFwX2lvLAorCS5pbml0X2lycSAgICAgICA9IG14MjdfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZSAgID0gcGNhMTAwX2luaXQsCisJLnRpbWVyICAgICAgICAgID0gJnBjYTEwMF90aW1lciwKK01BQ0hJTkVfRU5ECisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtcGNtMDM4LmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXBjbTAzOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMTJlOGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXBjbTAzOC5jCkBAIC0wLDAgKzEsMzUyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDcgUm9iZXJ0IFNjaHdlYmVsIDxyLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlPiwgUGVuZ3V0cm9uaXgKKyAqIENvcHlyaWdodCAoQykgMjAwOCBKdWVyZ2VuIEJlaXNlcnQgKGtlcm5lbEBwZW5ndXRyb25peC5kZSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL2F0MjQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wbGF0LXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvbWMxMzc4My5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworI2luY2x1ZGUgPG1hY2gvYm9hcmQtcGNtMDM4Lmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC1teDI3Lmg+CisjaW5jbHVkZSA8bWFjaC9teGNfbmFuZC5oPgorI2luY2x1ZGUgPG1hY2gvbXhjX2VoY2kuaD4KKyNpbmNsdWRlIDxtYWNoL3VscGkuaD4KKworI2luY2x1ZGUgImRldmljZXMtaW14MjcuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyBpbnQgcGNtMDM4X3BpbnNbXSA9IHsKKwkvKiBVQVJUMSAqLworCVBFMTJfUEZfVUFSVDFfVFhELAorCVBFMTNfUEZfVUFSVDFfUlhELAorCVBFMTRfUEZfVUFSVDFfQ1RTLAorCVBFMTVfUEZfVUFSVDFfUlRTLAorCS8qIFVBUlQyICovCisJUEUzX1BGX1VBUlQyX0NUUywKKwlQRTRfUEZfVUFSVDJfUlRTLAorCVBFNl9QRl9VQVJUMl9UWEQsCisJUEU3X1BGX1VBUlQyX1JYRCwKKwkvKiBVQVJUMyAqLworCVBFOF9QRl9VQVJUM19UWEQsCisJUEU5X1BGX1VBUlQzX1JYRCwKKwlQRTEwX1BGX1VBUlQzX0NUUywKKwlQRTExX1BGX1VBUlQzX1JUUywKKwkvKiBGRUMgKi8KKwlQRDBfQUlOX0ZFQ19UWEQwLAorCVBEMV9BSU5fRkVDX1RYRDEsCisJUEQyX0FJTl9GRUNfVFhEMiwKKwlQRDNfQUlOX0ZFQ19UWEQzLAorCVBENF9BT1VUX0ZFQ19SWF9FUiwKKwlQRDVfQU9VVF9GRUNfUlhEMSwKKwlQRDZfQU9VVF9GRUNfUlhEMiwKKwlQRDdfQU9VVF9GRUNfUlhEMywKKwlQRDhfQUZfRkVDX01ESU8sCisJUEQ5X0FJTl9GRUNfTURDLAorCVBEMTBfQU9VVF9GRUNfQ1JTLAorCVBEMTFfQU9VVF9GRUNfVFhfQ0xLLAorCVBEMTJfQU9VVF9GRUNfUlhEMCwKKwlQRDEzX0FPVVRfRkVDX1JYX0RWLAorCVBEMTRfQU9VVF9GRUNfUlhfQ0xLLAorCVBEMTVfQU9VVF9GRUNfQ09MLAorCVBEMTZfQUlOX0ZFQ19UWF9FUiwKKwlQRjIzX0FJTl9GRUNfVFhfRU4sCisJLyogSTJDMiAqLworCVBDNV9QRl9JMkMyX1NEQSwKKwlQQzZfUEZfSTJDMl9TQ0wsCisJLyogU1BJMSAqLworCVBEMjVfUEZfQ1NQSTFfUkRZLAorCVBEMjlfUEZfQ1NQSTFfU0NMSywKKwlQRDMwX1BGX0NTUEkxX01JU08sCisJUEQzMV9QRl9DU1BJMV9NT1NJLAorCS8qIFNTSTEgKi8KKwlQQzIwX1BGX1NTSTFfRlMsCisJUEMyMV9QRl9TU0kxX1JYRCwKKwlQQzIyX1BGX1NTSTFfVFhELAorCVBDMjNfUEZfU1NJMV9DTEssCisJLyogU1NJNCAqLworCVBDMTZfUEZfU1NJNF9GUywKKwlQQzE3X1BGX1NTSTRfUlhELAorCVBDMThfUEZfU1NJNF9UWEQsCisJUEMxOV9QRl9TU0k0X0NMSywKKwkvKiBVU0IgaG9zdCAqLworCVBBMF9QRl9VU0JIMl9DTEssCisJUEExX1BGX1VTQkgyX0RJUiwKKwlQQTJfUEZfVVNCSDJfREFUQTcsCisJUEEzX1BGX1VTQkgyX05YVCwKKwlQQTRfUEZfVVNCSDJfU1RQLAorCVBEMTlfQUZfVVNCSDJfREFUQTQsCisJUEQyMF9BRl9VU0JIMl9EQVRBMywKKwlQRDIxX0FGX1VTQkgyX0RBVEE2LAorCVBEMjJfQUZfVVNCSDJfREFUQTAsCisJUEQyM19BRl9VU0JIMl9EQVRBMiwKKwlQRDI0X0FGX1VTQkgyX0RBVEExLAorCVBEMjZfQUZfVVNCSDJfREFUQTUsCit9OworCisvKgorICogUGh5dGVjJ3MgUENNMDM4IGNvbWVzIHdpdGggMk1pQiBiYXR0ZXJ5IGJ1ZmZlcmVkIFNSQU0sCisgKiAxNiBiaXQgd2lkdGgKKyAqLworCitzdGF0aWMgc3RydWN0IHBsYXRkYXRhX210ZF9yYW0gcGNtMDM4X3NyYW1fZGF0YSA9IHsKKwkuYmFua3dpZHRoID0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNtMDM4X3NyYW1fcmVzb3VyY2UgPSB7CisJLnN0YXJ0ID0gTVgyN19DUzFfQkFTRV9BRERSLAorCS5lbmQgICA9IE1YMjdfQ1MxX0JBU0VfQUREUiArIDUxMiAqIDEwMjQgLSAxLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGNtMDM4X3NyYW1fbXRkX2RldmljZSA9IHsKKwkubmFtZSA9ICJtdGQtcmFtIiwKKwkuaWQgPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnBjbTAzOF9zcmFtX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcyA9IDEsCisJLnJlc291cmNlID0gJnBjbTAzOF9zcmFtX3Jlc291cmNlLAorfTsKKworLyoKKyAqIFBoeXRlYydzIHBoeUNPUkUtaS5NWDI3IGNvbWVzIHdpdGggMzJNaUIgZmxhc2gsCisgKiAxNiBiaXQgd2lkdGgKKyAqLworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcGNtMDM4X2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoID0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNtMDM4X2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydCA9IDB4YzAwMDAwMDAsCisJLmVuZCAgID0gMHhjMWZmZmZmZiwKKwkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjbTAzOF9ub3JfbXRkX2RldmljZSA9IHsKKwkubmFtZSA9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQgPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnBjbTAzOF9mbGFzaF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMgPSAxLAorCS5yZXNvdXJjZSA9ICZwY20wMzhfZmxhc2hfcmVzb3VyY2UsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhIF9faW5pdGNvbnN0ID0geworCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEKK3BjbTAzOF9uYW5kX2JvYXJkX2luZm8gX19pbml0Y29uc3QgPSB7CisJLndpZHRoID0gMSwKKwkuaHdfZWNjID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmcGNtMDM4X25vcl9tdGRfZGV2aWNlLAorCSZteGNfdzFfbWFzdGVyX2RldmljZSwKKwkmbXhjX2ZlY19kZXZpY2UsCisJJnBjbTAzOF9zcmFtX210ZF9kZXZpY2UsCisJJm14Y193ZHQsCit9OworCisvKiBPbiBwY20wMzggdGhlcmUncyBhIHNyYW0gYXR0YWNoZWQgdG8gQ1MxLCB3ZSBlbmFibGUgdGhlIGNoaXBzZWxlY3QgaGVyZSBhbmQKKyAqIHNldHVwIG90aGVyIHN0dWZmcyB0byBhY2Nlc3MgdGhlIHNyYW0uICovCitzdGF0aWMgdm9pZCBfX2luaXQgcGNtMDM4X2luaXRfc3JhbSh2b2lkKQoreworCW14Mjdfc2V0dXBfd2VpbWNzKDEsIDB4MDAwMGQ4NDMsIDB4MjIyNTI1MjEsIDB4MjIyMjBhMDApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlteGkyY19wbGF0Zm9ybV9kYXRhIHBjbTAzOF9pMmMxX2RhdGEgX19pbml0Y29uc3QgPSB7CisJLmJpdHJhdGUgPSAxMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGF0MjRfcGxhdGZvcm1fZGF0YSBib2FyZF9lZXByb20gPSB7CisJLmJ5dGVfbGVuID0gNDA5NiwKKwkucGFnZV9zaXplID0gMzIsCisJLmZsYWdzID0gQVQyNF9GTEFHX0FERFIxNiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gcGNtMDM4X2kyY19kZXZpY2VzW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygiYXQyNCIsIDB4NTIpLCAvKiBFMD0wLCBFMT0xLCBFMj0wICovCisJCS5wbGF0Zm9ybV9kYXRhID0gJmJvYXJkX2VlcHJvbSwKKwl9LCB7CisJCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTYzIiwgMHg1MSksCisJfSwgeworCQlJMkNfQk9BUkRfSU5GTygibG03NSIsIDB4NGEpLAorCX0KK307CisKK3N0YXRpYyBpbnQgcGNtMDM4X3NwaV9jc1tdID0ge0dQSU9fUE9SVEQgKyAyOH07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgcGNtMDM4X3NwaTBfZGF0YSBfX2luaXRjb25zdCA9IHsKKwkuY2hpcHNlbGVjdCA9IHBjbTAzOF9zcGlfY3MsCisJLm51bV9jaGlwc2VsZWN0ID0gQVJSQVlfU0laRShwY20wMzhfc3BpX2NzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBzZGhjMV9jb25zdW1lcnNbXSA9IHsKKwl7CisJCS5kZXYJPSAmbXhjX3NkaGNfZGV2aWNlMS5kZXYsCisJCS5zdXBwbHkJPSAic2RoY192Y2MiLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc2RoYzFfZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYgPSAzMDAwMDAwLAorCQkubWF4X3VWID0gMzQwMDAwMCwKKwkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFIHwKKwkJCVJFR1VMQVRPUl9DSEFOR0VfTU9ERSB8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCB8CisJCQlSRUdVTEFUT1JfTU9ERV9GQVNULAorCQkuYWx3YXlzX29uID0gMCwKKwkJLmJvb3Rfb24gPSAwLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUoc2RoYzFfY29uc3VtZXJzKSwKKwkuY29uc3VtZXJfc3VwcGxpZXMgPSBzZGhjMV9jb25zdW1lcnMsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgY2FtX2NvbnN1bWVyc1tdID0geworCXsKKwkJLmRldgk9IE5VTEwsCisJCS5zdXBwbHkJPSAiaW14X2NhbV92Y2MiLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgY2FtX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWID0gMzAwMDAwMCwKKwkJLm1heF91ViA9IDM0MDAwMDAsCisJCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSB8CisJCQlSRUdVTEFUT1JfQ0hBTkdFX01PREUgfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwgfAorCQkJUkVHVUxBVE9SX01PREVfRkFTVCwKKwkJLmFsd2F5c19vbiA9IDAsCisJCS5ib290X29uID0gMCwKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKGNhbV9jb25zdW1lcnMpLAorCS5jb25zdW1lcl9zdXBwbGllcyA9IGNhbV9jb25zdW1lcnMsCit9OworCitzdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3JfaW5pdF9kYXRhIHBjbTAzOF9yZWd1bGF0b3JzW10gPSB7CisJeworCQkuaWQgPSBNQzEzNzgzX1JFR1VfVkNBTSwKKwkJLmluaXRfZGF0YSA9ICZjYW1fZGF0YSwKKwl9LCB7CisJCS5pZCA9IE1DMTM3ODNfUkVHVV9WTU1DMSwKKwkJLmluaXRfZGF0YSA9ICZzZGhjMV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG1jMTM3ODNfcGxhdGZvcm1fZGF0YSBwY20wMzhfcG1pYyA9IHsKKwkucmVndWxhdG9ycyA9IHBjbTAzOF9yZWd1bGF0b3JzLAorCS5udW1fcmVndWxhdG9ycyA9IEFSUkFZX1NJWkUocGNtMDM4X3JlZ3VsYXRvcnMpLAorCS5mbGFncyA9IE1DMTM3ODNfVVNFX0FEQyB8IE1DMTM3ODNfVVNFX1JFR1VMQVRPUiB8CisJCSBNQzEzNzgzX1VTRV9UT1VDSFNDUkVFTiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gcGNtMDM4X3NwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS5tb2RhbGlhcyA9ICJtYzEzNzgzIiwKKwkJLmlycSA9IElSUV9HUElPQigyMyksCisJCS5tYXhfc3BlZWRfaHogPSAzMDAwMDAsCisJCS5idXNfbnVtID0gMCwKKwkJLmNoaXBfc2VsZWN0ID0gMCwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcGNtMDM4X3BtaWMsCisJCS5tb2RlID0gU1BJX0NTX0hJR0gsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgyX3BkYXRhID0geworCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VMUEksCisJLmZsYWdzCT0gTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEIHwgTVhDX0VIQ0lfSU5URVJGQUNFX0RJRkZfVU5JLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHBjbTAzOF9pbml0KHZvaWQpCit7CisJbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhwY20wMzhfcGlucywgQVJSQVlfU0laRShwY20wMzhfcGlucyksCisJCQkiUENNMDM4Iik7CisKKwlwY20wMzhfaW5pdF9zcmFtKCk7CisKKwlpbXgyN19hZGRfaW14X3VhcnQwKCZ1YXJ0X3BkYXRhKTsKKwlpbXgyN19hZGRfaW14X3VhcnQxKCZ1YXJ0X3BkYXRhKTsKKwlpbXgyN19hZGRfaW14X3VhcnQyKCZ1YXJ0X3BkYXRhKTsKKworCW14Y19ncGlvX21vZGUoUEUxNl9BRl9PV0lSRSk7CisJaW14MjdfYWRkX214Y19uYW5kKCZwY20wMzhfbmFuZF9ib2FyZF9pbmZvKTsKKworCS8qIG9ubHkgdGhlIGkyYyBtYXN0ZXIgMSBpcyB1c2VkIG9uIHRoaXMgQ1BVIGNhcmQgKi8KKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBwY20wMzhfaTJjX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShwY20wMzhfaTJjX2RldmljZXMpKTsKKworCWlteDI3X2FkZF9pMmNfaW14MSgmcGNtMDM4X2kyYzFfZGF0YSk7CisKKwkvKiBQRTE4IGZvciB1c2VyLUxFRCBENDAgKi8KKwlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEUgfCAxOCB8IEdQSU9fR1BJTyB8IEdQSU9fT1VUKTsKKworCW14Y19ncGlvX21vZGUoR1BJT19QT1JURCB8IDI4IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOworCisJLyogTUMxMzc4MyBJUlEgKi8KKwlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEIgfCAyMyB8IEdQSU9fR1BJTyB8IEdQSU9fSU4pOworCisJaW14MjdfYWRkX3NwaV9pbXgwKCZwY20wMzhfc3BpMF9kYXRhKTsKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhwY20wMzhfc3BpX2JvYXJkX2luZm8sCisJCQkJQVJSQVlfU0laRShwY20wMzhfc3BpX2JvYXJkX2luZm8pKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMiwgJnVzYmgyX3BkYXRhKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHBsYXRmb3JtX2RldmljZXMsIEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2aWNlcykpOworCisjaWZkZWYgQ09ORklHX01BQ0hfUENNOTcwX0JBU0VCT0FSRAorCXBjbTk3MF9iYXNlYm9hcmRfaW5pdCgpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwY20wMzhfdGltZXJfaW5pdCh2b2lkKQoreworCW14MjdfY2xvY2tzX2luaXQoMjYwMDAwMDApOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBwY20wMzhfdGltZXIgPSB7CisJLmluaXQgPSBwY20wMzhfdGltZXJfaW5pdCwKK307CisKK01BQ0hJTkVfU1RBUlQoUENNMDM4LCAicGh5Q09SRS1pLk1YMjciKQorCS5waHlzX2lvICAgICAgICA9IE1YMjdfQUlQSV9CQVNFX0FERFIsCisJLmlvX3BnX29mZnN0ICAgID0gKChNWDI3X0FJUElfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMgICAgPSBNWDI3X1BIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbyAgICAgICAgID0gbXgyN19tYXBfaW8sCisJLmluaXRfaXJxICAgICAgID0gbXgyN19pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lICAgPSBwY20wMzhfaW5pdCwKKwkudGltZXIgICAgICAgICAgPSAmcGNtMDM4X3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtc2NiOTMyOC5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1zY2I5MzI4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhiZjBkMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtc2NiOTMyOC5jCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1teDEvbWFjaC1zY2I5MzI4LmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2FzY2hhIEhhdWVyIDxzYXNjaGFoYXVlckB3ZWIuZGU+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBKdWVyZ2VuIEJlaXNlcnQgPGpiZWlzZXJ0QG5ldHNjYXBlLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbTkwMDAuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgxLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLWlteDEuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKy8qCisgKiBUaGlzIHNjYjkzMjggaGFzIGEgMzJNaUIgZmxhc2gKKyAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBmbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJPSBNWDFfQ1MwX1BIWVMsCisJLmVuZAk9IE1YMV9DUzBfUEhZUyArICgzMiAqIDEwMjQgKiAxMDI0KSAtIDEsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBzY2JfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGggID0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjYl9mbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnNjYl9mbGFzaF9kYXRhLAorCX0sCisJLnJlc291cmNlID0gJmZsYXNoX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzID0gMSwKK307CisKKy8qCisgKiBzY2I5MzI4IGhhcyBhIERNOTAwMCBuZXR3b3JrIGNvbnRyb2xsZXIKKyAqIGNvbm5lY3RlZCB0byBDUzUsIHdpdGggMTYgYml0IGRhdGEgcGF0aAorICogYW5kIGludGVycnVwdCBjb25uZWN0ZWQgdG8gR1BJTyAzCisgKi8KKworLyoKKyAqIGludGVybmFsIGRhdGFwYXRoIGlzIGZpeGVkIDE2IGJpdAorICovCitzdGF0aWMgc3RydWN0IGRtOTAwMF9wbGF0X2RhdGEgZG05MDAwX3BsYXRkYXRhID0geworCS5mbGFncwk9IERNOTAwMF9QTEFURl8xNkJJVE9OTFksCit9OworCisvKgorICogdGhlIERNOTAwMCBkcml2ZXJzIHdhbnRzIHR3byBkZWZpbmVkIGFkZHJlc3Mgc3BhY2VzCisgKiB0byBnYWluIGFjY2VzcyB0byBhZGRyZXNzIGxhdGNoIHJlZ2lzdGVycyBhbmQgdGhlIGRhdGEgcGF0aC4KKyAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbTkwMDB4X3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUJPSAiYWRkcmVzcyBhcmVhIiwKKwkJLnN0YXJ0CT0gTVgxX0NTNV9QSFlTLAorCQkuZW5kCT0gTVgxX0NTNV9QSFlTICsgMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCS8qIGFkZHJlc3MgYWNjZXNzICovCisJfSwgeworCQkubmFtZQk9ICJkYXRhIGFyZWEiLAorCQkuc3RhcnQJPSBNWDFfQ1M1X1BIWVMgKyA0LAorCQkuZW5kCT0gTVgxX0NTNV9QSFlTICsgNSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCS8qIGRhdGEgYWNjZXNzICovCisJfSwgeworCQkuc3RhcnQJPSBJUlFfR1BJT0MoMyksCisJCS5lbmQJPSBJUlFfR1BJT0MoMyksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfTE9XTEVWRUwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtOTAwMHhfZGV2aWNlID0geworCS5uYW1lCQk9ICJkbTkwMDAiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShkbTkwMDB4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gZG05MDAweF9yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmRtOTAwMF9wbGF0ZGF0YSwKKwl9Cit9OworCitzdGF0aWMgaW50IG14Y191YXJ0MV9waW5zW10gPSB7CisJUEM5X1BGX1VBUlQxX0NUUywKKwlQQzEwX1BGX1VBUlQxX1JUUywKKwlQQzExX1BGX1VBUlQxX1RYRCwKKwlQQzEyX1BGX1VBUlQxX1JYRCwKK307CisKK3N0YXRpYyBpbnQgdWFydDFfbXhjX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhteGNfdWFydDFfcGlucywKKwkJCUFSUkFZX1NJWkUobXhjX3VhcnQxX3BpbnMpLCAiVUFSVDEiKTsKK30KKworc3RhdGljIHZvaWQgdWFydDFfbXhjX2V4aXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlteGNfZ3Bpb19yZWxlYXNlX211bHRpcGxlX3BpbnMobXhjX3VhcnQxX3BpbnMsCisJCQlBUlJBWV9TSVpFKG14Y191YXJ0MV9waW5zKSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgX19pbml0Y29uc3QgPSB7CisJLmluaXQgPSB1YXJ0MV9teGNfaW5pdCwKKwkuZXhpdCA9IHVhcnQxX214Y19leGl0LAorCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNjYl9mbGFzaF9kZXZpY2UsCisJJmRtOTAwMHhfZGV2aWNlLAorfTsKKworLyoKKyAqIHNjYjkzMjhfaW5pdCAtIEluaXQgdGhlIENQVSBjYXJkIGl0c2VsZgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgc2NiOTMyOF9pbml0KHZvaWQpCit7CisJaW14MV9hZGRfaW14X3VhcnQwKCZ1YXJ0X3BkYXRhKTsKKworCXByaW50ayhLRVJOX0lORk8iU2NiOTMyODogQWRkaW5nIGRldmljZXNcbiIpOworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgc2NiOTMyOF90aW1lcl9pbml0KHZvaWQpCit7CisJbXgxX2Nsb2Nrc19pbml0KDMyMDAwKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgc2NiOTMyOF90aW1lciA9IHsKKwkuaW5pdAk9IHNjYjkzMjhfdGltZXJfaW5pdCwKK307CisKK01BQ0hJTkVfU1RBUlQoU0NCOTMyOCwgIlN5bmVydHJvbml4eCBzY2I5MzI4IikKKyAgICAvKiBTYXNjaGEgSGF1ZXIgKi8KKwkucGh5c19pbwk9IDB4MDAyMDAwMDAsCisJLmlvX3BnX29mZnN0CT0gKCgweGUwMjAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHgwODAwMDEwMCwKKwkubWFwX2lvCQk9IG14MV9tYXBfaW8sCisJLmluaXRfaXJxCT0gbXgxX2luaXRfaXJxLAorCS50aW1lcgkJPSAmc2NiOTMyOF90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gc2NiOTMyOF9pbml0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21tLWlteDEuYyBiL2FyY2gvYXJtL21hY2gtaW14L21tLWlteDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmU5MmI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbW0taW14MS5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiAgYXV0aG9yOiBTYXNjaGEgSGF1ZXIKKyAqICBDcmVhdGVkOiBhcHJpbCAyMHRoLCAyMDA0CisgKiAgQ29weXJpZ2h0OiBTeW5lcnRyb25peHggR21iSAorICoKKyAqICBDb21tb24gY29kZSBmb3IgaS5NWDEgbWFjaGluZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgaW14X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwgPSBNWDFfSU9fQkFTRV9BRERSX1ZJUlQsCisJCS5wZm4gPSBfX3BoeXNfdG9fcGZuKE1YMV9JT19CQVNFX0FERFIpLAorCQkubGVuZ3RoID0gTVgxX0lPX1NJWkUsCisJCS50eXBlID0gTVRfREVWSUNFCisJfQorfTsKKwordm9pZCBfX2luaXQgbXgxX21hcF9pbyh2b2lkKQoreworCW14Y19zZXRfY3B1X3R5cGUoTVhDX0NQVV9NWDEpOworCW14Y19hcmNoX3Jlc2V0X2luaXQoTVgxX0lPX0FERFJFU1MoTVgxX1dEVF9CQVNFX0FERFIpKTsKKworCWlvdGFibGVfaW5pdChpbXhfaW9fZGVzYywgQVJSQVlfU0laRShpbXhfaW9fZGVzYykpOworfQorCitpbnQgaW14MV9yZWdpc3Rlcl9ncGlvcyh2b2lkKTsKKwordm9pZCBfX2luaXQgbXgxX2luaXRfaXJxKHZvaWQpCit7CisJbXhjX2luaXRfaXJxKE1YMV9JT19BRERSRVNTKE1YMV9BVklDX0JBU0VfQUREUikpOworCWlteDFfcmVnaXN0ZXJfZ3Bpb3MoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21tLWlteDIxLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tbS1pbXgyMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZmFlZWFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbW0taW14MjEuYwpAQCAtMCwwICsxLDg2IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1pbXgvbW0taW14MjEuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBKdWVyZ2VuIEJlaXNlcnQgKGtlcm5lbEBwZW5ndXRyb25peC5kZSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworLyogTVgyMSBtZW1vcnkgbWFwIGRlZmluaXRpb24gKi8KK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgaW14MjFfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJLyoKKwkgKiB0aGlzIGZpeGVkIG1hcHBpbmcgY292ZXJzOgorCSAqIC0gQUlQSTEKKwkgKiAtIEFJUEkyCisJICogLSBBSVRDCisJICogLSBST00gUGF0Y2gKKwkgKiAtIGFuZCBzb21lIHJlc2VydmVkIHNwYWNlCisJICovCisJeworCQkudmlydHVhbCA9IE1YMjFfQUlQSV9CQVNFX0FERFJfVklSVCwKKwkJLnBmbiA9IF9fcGh5c190b19wZm4oTVgyMV9BSVBJX0JBU0VfQUREUiksCisJCS5sZW5ndGggPSBNWDIxX0FJUElfU0laRSwKKwkJLnR5cGUgPSBNVF9ERVZJQ0UKKwl9LAorCS8qCisJICogdGhpcyBmaXhlZCBtYXBwaW5nIGNvdmVyczoKKwkgKiAtIENTSQorCSAqIC0gQVRBCisJICovCisJeworCQkudmlydHVhbCA9IE1YMjFfU0FIQjFfQkFTRV9BRERSX1ZJUlQsCisJCS5wZm4gPSBfX3BoeXNfdG9fcGZuKE1YMjFfU0FIQjFfQkFTRV9BRERSKSwKKwkJLmxlbmd0aCA9IE1YMjFfU0FIQjFfU0laRSwKKwkJLnR5cGUgPSBNVF9ERVZJQ0UKKwl9LAorCS8qCisJICogdGhpcyBmaXhlZCBtYXBwaW5nIGNvdmVyczoKKwkgKiAtIEVNSQorCSAqLworCXsKKwkJLnZpcnR1YWwgPSBNWDIxX1hfTUVNQ19CQVNFX0FERFJfVklSVCwKKwkJLnBmbiA9IF9fcGh5c190b19wZm4oTVgyMV9YX01FTUNfQkFTRV9BRERSKSwKKwkJLmxlbmd0aCA9IE1YMjFfWF9NRU1DX1NJWkUsCisJCS50eXBlID0gTVRfREVWSUNFCisJfSwKK307CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBtZW1vcnkgbWFwLiBJdCBpcyBjYWxsZWQgZHVyaW5nIHRoZQorICogc3lzdGVtIHN0YXJ0dXAgdG8gY3JlYXRlIHN0YXRpYyBwaHlzaWNhbCB0byB2aXJ0dWFsCisgKiBtZW1vcnkgbWFwIGZvciB0aGUgSU8gbW9kdWxlcy4KKyAqLwordm9pZCBfX2luaXQgbXgyMV9tYXBfaW8odm9pZCkKK3sKKwlteGNfc2V0X2NwdV90eXBlKE1YQ19DUFVfTVgyMSk7CisJbXhjX2FyY2hfcmVzZXRfaW5pdChNWDIxX0lPX0FERFJFU1MoTVgyMV9XRE9HX0JBU0VfQUREUikpOworCisJaW90YWJsZV9pbml0KGlteDIxX2lvX2Rlc2MsIEFSUkFZX1NJWkUoaW14MjFfaW9fZGVzYykpOworfQorCitpbnQgaW14MjFfcmVnaXN0ZXJfZ3Bpb3Modm9pZCk7CisKK3ZvaWQgX19pbml0IG14MjFfaW5pdF9pcnEodm9pZCkKK3sKKwlteGNfaW5pdF9pcnEoTVgyMV9JT19BRERSRVNTKE1YMjFfQVZJQ19CQVNFX0FERFIpKTsKKwlpbXgyMV9yZWdpc3Rlcl9ncGlvcygpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbW0taW14MjcuYyBiL2FyY2gvYXJtL21hY2gtaW14L21tLWlteDI3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI0NjIyOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21tLWlteDI3LmMKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtaW14L21tLWlteDI3LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSnVlcmdlbiBCZWlzZXJ0IChrZXJuZWxAcGVuZ3V0cm9uaXguZGUpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKy8qIE1YMjcgbWVtb3J5IG1hcCBkZWZpbml0aW9uICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGlteDI3X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCS8qCisJICogdGhpcyBmaXhlZCBtYXBwaW5nIGNvdmVyczoKKwkgKiAtIEFJUEkxCisJICogLSBBSVBJMgorCSAqIC0gQUlUQworCSAqIC0gUk9NIFBhdGNoCisJICogLSBhbmQgc29tZSByZXNlcnZlZCBzcGFjZQorCSAqLworCXsKKwkJLnZpcnR1YWwgPSBNWDI3X0FJUElfQkFTRV9BRERSX1ZJUlQsCisJCS5wZm4gPSBfX3BoeXNfdG9fcGZuKE1YMjdfQUlQSV9CQVNFX0FERFIpLAorCQkubGVuZ3RoID0gTVgyN19BSVBJX1NJWkUsCisJCS50eXBlID0gTVRfREVWSUNFCisJfSwKKwkvKgorCSAqIHRoaXMgZml4ZWQgbWFwcGluZyBjb3ZlcnM6CisJICogLSBDU0kKKwkgKiAtIEFUQQorCSAqLworCXsKKwkJLnZpcnR1YWwgPSBNWDI3X1NBSEIxX0JBU0VfQUREUl9WSVJULAorCQkucGZuID0gX19waHlzX3RvX3BmbihNWDI3X1NBSEIxX0JBU0VfQUREUiksCisJCS5sZW5ndGggPSBNWDI3X1NBSEIxX1NJWkUsCisJCS50eXBlID0gTVRfREVWSUNFCisJfSwKKwkvKgorCSAqIHRoaXMgZml4ZWQgbWFwcGluZyBjb3ZlcnM6CisJICogLSBFTUkKKwkgKi8KKwl7CisJCS52aXJ0dWFsID0gTVgyN19YX01FTUNfQkFTRV9BRERSX1ZJUlQsCisJCS5wZm4gPSBfX3BoeXNfdG9fcGZuKE1YMjdfWF9NRU1DX0JBU0VfQUREUiksCisJCS5sZW5ndGggPSBNWDI3X1hfTUVNQ19TSVpFLAorCQkudHlwZSA9IE1UX0RFVklDRQorCX0sCit9OworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgbWVtb3J5IG1hcC4gSXQgaXMgY2FsbGVkIGR1cmluZyB0aGUKKyAqIHN5c3RlbSBzdGFydHVwIHRvIGNyZWF0ZSBzdGF0aWMgcGh5c2ljYWwgdG8gdmlydHVhbAorICogbWVtb3J5IG1hcCBmb3IgdGhlIElPIG1vZHVsZXMuCisgKi8KK3ZvaWQgX19pbml0IG14MjdfbWFwX2lvKHZvaWQpCit7CisJbXhjX3NldF9jcHVfdHlwZShNWENfQ1BVX01YMjcpOworCW14Y19hcmNoX3Jlc2V0X2luaXQoTVgyN19JT19BRERSRVNTKE1YMjdfV0RPR19CQVNFX0FERFIpKTsKKworCWlvdGFibGVfaW5pdChpbXgyN19pb19kZXNjLCBBUlJBWV9TSVpFKGlteDI3X2lvX2Rlc2MpKTsKK30KKworaW50IGlteDI3X3JlZ2lzdGVyX2dwaW9zKHZvaWQpOworCit2b2lkIF9faW5pdCBteDI3X2luaXRfaXJxKHZvaWQpCit7CisJbXhjX2luaXRfaXJxKE1YMjdfSU9fQUREUkVTUyhNWDI3X0FWSUNfQkFTRV9BRERSKSk7CisJaW14MjdfcmVnaXN0ZXJfZ3Bpb3MoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgxL2tzeW1fbXgxLmMgYi9hcmNoL2FybS9tYWNoLWlteC9teDEtY2FtZXJhLWZpcS1rc3ltLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtbXgxL2tzeW1fbXgxLmMKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtaW14L214MS1jYW1lcmEtZmlxLWtzeW0uYwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDEvbXgxX2NhbWVyYV9maXEuUyBiL2FyY2gvYXJtL21hY2gtaW14L214MS1jYW1lcmEtZmlxLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtbXgxL214MV9jYW1lcmFfZmlxLlMKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtaW14L214MS1jYW1lcmEtZmlxLlMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL3BjbTk3MC1iYXNlYm9hcmQuYyBiL2FyY2gvYXJtL21hY2gtaW14L3BjbTk3MC1iYXNlYm9hcmQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1teDIvcGNtOTcwLWJhc2Vib2FyZC5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWlteC9wY205NzAtYmFzZWJvYXJkLmMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L3BtLWlteDI3LmMgYi9hcmNoL2FybS9tYWNoLWlteC9wbS1pbXgyNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYzE3Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9wbS1pbXgyNy5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBpLk1YMjcgUG93ZXIgTWFuYWdlbWVudCBSb3V0aW5lcworICoKKyAqIEJhc2VkIG9uIEZyZWVzY2FsZSdzIEJTUAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3N5c3RlbS5oPgorI2luY2x1ZGUgPG1hY2gvbXgyNy5oPgorCitzdGF0aWMgaW50IG14Mjdfc3VzcGVuZF9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJdTMyIGNzY3I7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgUE1fU1VTUEVORF9NRU06CisJCS8qIENsZWFyIE1QRU4gYW5kIFNQRU4gdG8gZGlzYWJsZSBNUExML1NQTEwgKi8KKwkJY3NjciA9IF9fcmF3X3JlYWRsKE1YMjdfSU9fQUREUkVTUyhNWDI3X0NDTV9CQVNFX0FERFIpKTsKKwkJY3NjciAmPSAweEZGRkZGRkZDOworCQlfX3Jhd193cml0ZWwoY3NjciwgTVgyN19JT19BRERSRVNTKE1YMjdfQ0NNX0JBU0VfQUREUikpOworCQkvKiBFeGVjdXRlcyBXRkkgKi8KKwkJYXJjaF9pZGxlKCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIG14Mjdfc3VzcGVuZF9vcHMgPSB7CisJLmVudGVyID0gbXgyN19zdXNwZW5kX2VudGVyLAorCS52YWxpZCA9IHN1c3BlbmRfdmFsaWRfb25seV9tZW0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBteDI3X3BtX2luaXQodm9pZCkKK3sKKwlzdXNwZW5kX3NldF9vcHMoJm14Mjdfc3VzcGVuZF9vcHMpOworCXJldHVybiAwOworfQorCitkZXZpY2VfaW5pdGNhbGwobXgyN19wbV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Zjk2ZTE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvbW1vbi5oCkBAIC0wLDAgKzEgQEAKK3ZvaWQgaW50ZWdyYXRvcl9yZXNlcnZlKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jb3JlLmMKaW5kZXggYjAyY2ZjMC4uOGY0ZmI2ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY29yZS5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvdGVybWlvcy5oPgpAQCAtMzAsNiArMzEsNyBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vbGVkcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogCiBzdGF0aWMgc3RydWN0IGFtYmFfcGwwMTBfZGF0YSBpbnRlZ3JhdG9yX3VhcnRfZGF0YTsKIApAQCAtMTE5LDggKzEyMSwxMyBAQAogCS5yYXRlCT0gMTQ3NDU2MDAsCiB9OwogCitzdGF0aWMgc3RydWN0IGNsayBkdW1teV9hcGJfcGNsazsKKwogc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKLQl7CS8qIFVBUlQwICovCisJewkvKiBCdXMgY2xvY2sgKi8KKwkJLmNvbl9pZAkJPSAiYXBiX3BjbGsiLAorCQkuY2xrCQk9ICZkdW1teV9hcGJfcGNsaywKKwl9LCB7CS8qIFVBUlQwICovCiAJCS5kZXZfaWQJCT0gIm1iOjE2IiwKIAkJLmNsawkJPSAmdWFydGNsaywKIAl9LCB7CS8qIFVBUlQxICovCkBAIC0yMTUsMyArMjIyLDEzIEBACiB9CiAKIEVYUE9SVF9TWU1CT0woY21fY29udHJvbCk7CisKKy8qCisgKiBXZSBuZWVkIHRvIHN0b3AgdGhpbmdzIGFsbG9jYXRpbmcgdGhlIGxvdyBtZW1vcnk7IGlkZWFsbHkgd2UgbmVlZCBhCisgKiBiZXR0ZXIgaW1wbGVtZW50YXRpb24gb2YgR0ZQX0RNQSB3aGljaCBkb2VzIG5vdCBhc3N1bWUgdGhhdCBETUEtYWJsZQorICogbWVtb3J5IHN0YXJ0cyBhdCB6ZXJvLgorICovCit2b2lkIF9faW5pdCBpbnRlZ3JhdG9yX3Jlc2VydmUodm9pZCkKK3sKKwltZW1ibG9ja19yZXNlcnZlKFBIWVNfT0ZGU0VULCBfX3BhKHN3YXBwZXJfcGdfZGlyKSAtIFBIWVNfT0ZGU0VUKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2FwLmMgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9hcC5jCmluZGV4IDIyN2NmNGQuLjZhYjVhMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2FwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfYXAuYwpAQCAtNDgsNiArNDgsOCBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KIAorI2luY2x1ZGUgImNvbW1vbi5oIgorCiAvKiAKICAqIEFsbCBJTyBhZGRyZXNzZXMgYXJlIG1hcHBlZCBvbnRvIFZBIDB4RkZGeC54eHh4LCB3aGVyZSB4Lnh4eHgKICAqIGlzIHRoZSAoUEEgPj4gMTIpLgpAQCAtNTAyLDYgKzUwNCw3IEBACiAJLmlvX3BnX29mZnN0CT0gKCgweGYxNjAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKIAkubWFwX2lvCQk9IGFwX21hcF9pbywKKwkucmVzZXJ2ZQk9IGludGVncmF0b3JfcmVzZXJ2ZSwKIAkuaW5pdF9pcnEJPSBhcF9pbml0X2lycSwKIAkudGltZXIJCT0gJmFwX3RpbWVyLAogCS5pbml0X21hY2hpbmUJPSBhcF9pbml0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMKaW5kZXggY2RlNTdiMi4uMDVkYjQwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jCkBAIC00Myw2ICs0Myw4IEBACiAKICNpbmNsdWRlIDxwbGF0L3RpbWVyLXNwLmg+CiAKKyNpbmNsdWRlICJjb21tb24uaCIKKwogI2RlZmluZSBJTlRDUF9QQV9GTEFTSF9CQVNFCQkweDI0MDAwMDAwCiAjZGVmaW5lIElOVENQX0ZMQVNIX1NJWkUJCVNaXzMyTQogCkBAIC02MDEsNiArNjAzLDcgQEAKIAkuaW9fcGdfb2Zmc3QJPSAoKDB4ZjE2MDAwMDApID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAogCS5tYXBfaW8JCT0gaW50Y3BfbWFwX2lvLAorCS5yZXNlcnZlCT0gaW50ZWdyYXRvcl9yZXNlcnZlLAogCS5pbml0X2lycQk9IGludGNwX2luaXRfaXJxLAogCS50aW1lcgkJPSAmY3BfdGltZXIsCiAJLmluaXRfbWFjaGluZQk9IGludGNwX2luaXQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvcGNpX3YzLmMgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvcGNpX3YzLmMKaW5kZXggOWNlZjA1OS4uNjQ2N2Q5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3BjaV92My5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9wY2lfdjMuYwpAQCAtNTA1LDEwICs1MDUsMTAgQEAKIAkvKgogCSAqIEhvb2sgaW4gb3VyIGZhdWx0IGhhbmRsZXIgZm9yIFBDSSBlcnJvcnMKIAkgKi8KLQlob29rX2ZhdWx0X2NvZGUoNCwgdjNfcGNpX2ZhdWx0LCBTSUdCVVMsICJleHRlcm5hbCBhYm9ydCBvbiBsaW5lZmV0Y2giKTsKLQlob29rX2ZhdWx0X2NvZGUoNiwgdjNfcGNpX2ZhdWx0LCBTSUdCVVMsICJleHRlcm5hbCBhYm9ydCBvbiBsaW5lZmV0Y2giKTsKLQlob29rX2ZhdWx0X2NvZGUoOCwgdjNfcGNpX2ZhdWx0LCBTSUdCVVMsICJleHRlcm5hbCBhYm9ydCBvbiBub24tbGluZWZldGNoIik7Ci0JaG9va19mYXVsdF9jb2RlKDEwLCB2M19wY2lfZmF1bHQsIFNJR0JVUywgImV4dGVybmFsIGFib3J0IG9uIG5vbi1saW5lZmV0Y2giKTsKKwlob29rX2ZhdWx0X2NvZGUoNCwgdjNfcGNpX2ZhdWx0LCBTSUdCVVMsIDAsICJleHRlcm5hbCBhYm9ydCBvbiBsaW5lZmV0Y2giKTsKKwlob29rX2ZhdWx0X2NvZGUoNiwgdjNfcGNpX2ZhdWx0LCBTSUdCVVMsIDAsICJleHRlcm5hbCBhYm9ydCBvbiBsaW5lZmV0Y2giKTsKKwlob29rX2ZhdWx0X2NvZGUoOCwgdjNfcGNpX2ZhdWx0LCBTSUdCVVMsIDAsICJleHRlcm5hbCBhYm9ydCBvbiBub24tbGluZWZldGNoIik7CisJaG9va19mYXVsdF9jb2RlKDEwLCB2M19wY2lfZmF1bHQsIFNJR0JVUywgMCwgImV4dGVybmFsIGFib3J0IG9uIG5vbi1saW5lZmV0Y2giKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ2M19sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IDI1YjFkYTkuLjc0MTVlNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtNjksNiArNjksNCBAQAogI2VuZGlmIC8qIENPTkZJR19BUkNIX0lPUDEzWFggKi8KICNlbmRpZiAvKiAhQVNTRU1CTFkgKi8KIAotI2RlZmluZSBQRk5fVE9fTklEKGFkZHIpCSgwKQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9wY2kuYyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9wY2kuYwppbmRleCA2ZDVhOTA4Li43NzNlYTBjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvcGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L3BjaS5jCkBAIC05ODcsNyArOTg3LDcgQEAKIAkJaW9wMTN4eF9hdHV4X3NldHVwKCk7CiAJfQogCi0JaG9va19mYXVsdF9jb2RlKDE2KzYsIGlvcDEzeHhfcGNpX2Fib3J0LCBTSUdCVVMsCisJaG9va19mYXVsdF9jb2RlKDE2KzYsIGlvcDEzeHhfcGNpX2Fib3J0LCBTSUdCVVMsIDAsCiAJCQkiaW1wcmVjaXNlIGV4dGVybmFsIGFib3J0Iik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9wY2kuYyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9wY2kuYwppbmRleCA5MDc3MWNhLi5mNzk3YzVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvcGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL3BjaS5jCkBAIC0yMDksNyArMjA5LDcgQEAKIAkJCSJ0aGUgbmVlZGVkIHdvcmthcm91bmQgaGFzIG5vdCBiZWVuIGNvbmZpZ3VyZWQgaW4iKTsKICNlbmRpZgogCi0JaG9va19mYXVsdF9jb2RlKDE2KzYsIGl4cDIwMDBfcGNpX2Fib3J0X2hhbmRsZXIsIFNJR0JVUywKKwlob29rX2ZhdWx0X2NvZGUoMTYrNiwgaXhwMjAwMF9wY2lfYWJvcnRfaGFuZGxlciwgU0lHQlVTLCAwLAogCQkJCSJQQ0kgY29uZmlnIGN5Y2xlIHRvIG5vbi1leGlzdGVudCBkZXZpY2UiKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyM3h4L3BjaS5jIGIvYXJjaC9hcm0vbWFjaC1peHAyM3h4L3BjaS5jCmluZGV4IDRiMGU1OTguLjU2MzgxOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDIzeHgvcGNpLmMKQEAgLTIyOSw3ICsyMjksNyBAQAogewogCWl4cDIzeHhfcGNpX2NvbW1vbl9pbml0KCk7CiAKLQlob29rX2ZhdWx0X2NvZGUoMTYrNiwgaXhwMjN4eF9wY2lfYWJvcnRfaGFuZGxlciwgU0lHQlVTLAorCWhvb2tfZmF1bHRfY29kZSgxNis2LCBpeHAyM3h4X3BjaV9hYm9ydF9oYW5kbGVyLCBTSUdCVVMsIDAsCiAJCQkiUENJIGNvbmZpZyBjeWNsZSB0byBub24tZXhpc3RlbnQgZGV2aWNlIik7CiAKIAkqSVhQMjNYWF9QQ0lfQUREUl9FWFQgPSAweDAwMDBlMDAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLXBjaS5jCmluZGV4IGUzMTgxNTMuLjYxY2Q0ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi1wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24tcGNpLmMKQEAgLTM0OCw3ICszNDgsNyBAQAogICogVGhpcyBpcyByZWFsbHkgdWdseSBhbmQgd2UgbmVlZCBhIGJldHRlciB3YXkgb2Ygc3BlY2lmeWluZwogICogRE1BLWNhcGFibGUgcmVnaW9ucyBvZiBtZW1vcnkuCiAgKi8KLXZvaWQgX19pbml0IGl4cDR4eF9hZGp1c3Rfem9uZXMoaW50IG5vZGUsIHVuc2lnbmVkIGxvbmcgKnpvbmVfc2l6ZSwKK3ZvaWQgX19pbml0IGl4cDR4eF9hZGp1c3Rfem9uZXModW5zaWduZWQgbG9uZyAqem9uZV9zaXplLAogCXVuc2lnbmVkIGxvbmcgKnpob2xlX3NpemUpCiB7CiAJdW5zaWduZWQgaW50IHN6ID0gU1pfNjRNID4+IFBBR0VfU0hJRlQ7CkBAIC0zNTYsNyArMzU2LDcgQEAKIAkvKgogCSAqIE9ubHkgYWRqdXN0IGlmID4gNjRNIG9uIGN1cnJlbnQgc3lzdGVtCiAJICovCi0JaWYgKG5vZGUgfHwgKHpvbmVfc2l6ZVswXSA8PSBzeikpCisJaWYgKHpvbmVfc2l6ZVswXSA8PSBzeikKIAkJcmV0dXJuOwogCiAJem9uZV9zaXplWzFdID0gem9uZV9zaXplWzBdIC0gc3o7CkBAIC0zODIsNyArMzgyLDggQEAKIAogCiAJLyogaG9vayBpbiBvdXIgZmF1bHQgaGFuZGxlciBmb3IgUENJIGVycm9ycyAqLwotCWhvb2tfZmF1bHRfY29kZSgxNis2LCBhYm9ydF9oYW5kbGVyLCBTSUdCVVMsICJpbXByZWNpc2UgZXh0ZXJuYWwgYWJvcnQiKTsKKwlob29rX2ZhdWx0X2NvZGUoMTYrNiwgYWJvcnRfaGFuZGxlciwgU0lHQlVTLCAwLAorCQkJImltcHJlY2lzZSBleHRlcm5hbCBhYm9ydCIpOwogCiAJcHJfZGVidWcoInNldHVwIFBDSS1BSEIoaW5ib3VuZCkgYW5kIEFIQi1QQ0kob3V0Ym91bmQpIGFkZHJlc3MgbWFwcGluZ3NcbiIpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggOThmNWU1ZS4uMDEzNmVhYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMTYsMTAgKzE2LDEwIEBACiAKICNpZiAhZGVmaW5lZChfX0FTU0VNQkxZX18pICYmIGRlZmluZWQoQ09ORklHX1BDSSkKIAotdm9pZCBpeHA0eHhfYWRqdXN0X3pvbmVzKGludCBub2RlLCB1bnNpZ25lZCBsb25nICpzaXplLCB1bnNpZ25lZCBsb25nICpob2xlcyk7Cit2b2lkIGl4cDR4eF9hZGp1c3Rfem9uZXModW5zaWduZWQgbG9uZyAqc2l6ZSwgdW5zaWduZWQgbG9uZyAqaG9sZXMpOwogCi0jZGVmaW5lIGFyY2hfYWRqdXN0X3pvbmVzKG5vZGUsIHNpemUsIGhvbGVzKSBcCi0JaXhwNHh4X2FkanVzdF96b25lcyhub2RlLCBzaXplLCBob2xlcykKKyNkZWZpbmUgYXJjaF9hZGp1c3Rfem9uZXMoc2l6ZSwgaG9sZXMpIFwKKwlpeHA0eHhfYWRqdXN0X3pvbmVzKHNpemUsIGhvbGVzKQogCiAjZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xEIChTWl82NE0gLSAxKQogI2RlZmluZSBNQVhfRE1BX0FERFJFU1MJCShQQUdFX09GRlNFVCArIFNaXzY0TSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvS2NvbmZpZwppbmRleCAyOWIyMTYzLi5jYzI1NTAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9LY29uZmlnCkBAIC03NSw2ICs3NSwxMyBAQAogCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCiAJICBNYXJ2ZWxsIE9wZW5SRCBDbGllbnQgQm9hcmQuCiAKK2NvbmZpZyBNQUNIX09QRU5SRF9VTFRJTUFURQorCWJvb2wgIk1hcnZlbGwgT3BlblJEIFVsdGltYXRlIEJvYXJkIgorCXNlbGVjdCBNQUNIX09QRU5SRAorCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQorCSAgTWFydmVsbCBPcGVuUkQgVWx0aW1hdGUgQm9hcmQuCisKIGNvbmZpZyBNQUNIX05FVFNQQUNFX1YyCiAJYm9vbCAiTGFDaWUgTmV0d29yayBTcGFjZSB2MiBOQVMgQm9hcmQiCiAJaGVscApAQCAtODcsNiArOTQsMTIgQEAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQogCSAgTGFDaWUgSW50ZXJuZXQgU3BhY2UgdjIgTkFTLgogCitjb25maWcgTUFDSF9ORVRTUEFDRV9NQVhfVjIKKwlib29sICJMYUNpZSBOZXR3b3JrIFNwYWNlIE1heCB2MiBOQVMgQm9hcmQiCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCisJICBMYUNpZSBOZXR3b3JrIFNwYWNlIE1heCB2MiBOQVMuCisKIGNvbmZpZyBNQUNIX05FVDJCSUdfVjIKIAlib29sICJMYUNpZSAyQmlnIE5ldHdvcmsgdjIgTkFTIEJvYXJkIgogCWhlbHAKQEAgLTk5LDYgKzExMiwxMiBAQAogCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCiAJICBMYUNpZSA1QmlnIE5ldHdvcmsgdjIgTkFTLgogCitjb25maWcgTUFDSF9UNTMyNQorCWJvb2wgIkhQIHQ1MzI1IFRoaW4gQ2xpZW50IgorCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQorCSAgSFAgdDUzMjUgVGhpbiBDbGllbnQuCisKIGVuZG1lbnUKIAogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL01ha2VmaWxlCmluZGV4IGMwY2Q1ZDMuLjI5NWQ3YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9NYWtlZmlsZQpAQCAtMTIsNyArMTIsOSBAQAogb2JqLSQoQ09ORklHX01BQ0hfT1BFTlJEKQkJKz0gb3BlbnJkLXNldHVwLm8KIG9iai0kKENPTkZJR19NQUNIX05FVFNQQUNFX1YyKQkJKz0gbmV0c3BhY2VfdjItc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfSU5FVFNQQUNFX1YyKQkJKz0gbmV0c3BhY2VfdjItc2V0dXAubworb2JqLSQoQ09ORklHX01BQ0hfTkVUU1BBQ0VfTUFYX1YyKQkrPSBuZXRzcGFjZV92Mi1zZXR1cC5vCiBvYmotJChDT05GSUdfTUFDSF9ORVQyQklHX1YyKQkJKz0gbmV0eGJpZ192Mi1zZXR1cC5vCiBvYmotJChDT05GSUdfTUFDSF9ORVQ1QklHX1YyKQkJKz0gbmV0eGJpZ192Mi1zZXR1cC5vCitvYmotJChDT05GSUdfTUFDSF9UNTMyNSkJCSs9IHQ1MzI1LXNldHVwLm8KIAogb2JqLSQoQ09ORklHX0NQVV9JRExFKQkJCSs9IGNwdWlkbGUubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9hZGRyLW1hcC5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9hZGRyLW1hcC5jCmluZGV4IDJlNjkxNjhmLi44ZDAzYmNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2FkZHItbWFwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9hZGRyLW1hcC5jCkBAIC0zMSw2ICszMSw4IEBACiAjZGVmaW5lIEFUVFJfREVWX0NTMAkJMHgzZQogI2RlZmluZSBBVFRSX1BDSUVfSU8JCTB4ZTAKICNkZWZpbmUgQVRUUl9QQ0lFX01FTQkJMHhlOAorI2RlZmluZSBBVFRSX1BDSUUxX0lPCQkweGQwCisjZGVmaW5lIEFUVFJfUENJRTFfTUVNCQkweGQ4CiAjZGVmaW5lIEFUVFJfU1JBTQkJMHgwMQogCiAvKgpAQCAtMTA2LDE3ICsxMDgsMjEgQEAKIAkJICAgICAgVEFSR0VUX1BDSUUsIEFUVFJfUENJRV9JTywgS0lSS1dPT0RfUENJRV9JT19CVVNfQkFTRSk7CiAJc2V0dXBfY3B1X3dpbigxLCBLSVJLV09PRF9QQ0lFX01FTV9QSFlTX0JBU0UsIEtJUktXT09EX1BDSUVfTUVNX1NJWkUsCiAJCSAgICAgIFRBUkdFVF9QQ0lFLCBBVFRSX1BDSUVfTUVNLCBLSVJLV09PRF9QQ0lFX01FTV9CVVNfQkFTRSk7CisJc2V0dXBfY3B1X3dpbigyLCBLSVJLV09PRF9QQ0lFMV9JT19QSFlTX0JBU0UsIEtJUktXT09EX1BDSUUxX0lPX1NJWkUsCisJCSAgICAgIFRBUkdFVF9QQ0lFLCBBVFRSX1BDSUUxX0lPLCBLSVJLV09PRF9QQ0lFMV9JT19CVVNfQkFTRSk7CisJc2V0dXBfY3B1X3dpbigzLCBLSVJLV09PRF9QQ0lFMV9NRU1fUEhZU19CQVNFLCBLSVJLV09PRF9QQ0lFMV9NRU1fU0laRSwKKwkJICAgICAgVEFSR0VUX1BDSUUsIEFUVFJfUENJRTFfTUVNLCBLSVJLV09PRF9QQ0lFMV9NRU1fQlVTX0JBU0UpOwogCiAJLyoKIAkgKiBTZXR1cCB3aW5kb3cgZm9yIE5BTkQgY29udHJvbGxlci4KIAkgKi8KLQlzZXR1cF9jcHVfd2luKDIsIEtJUktXT09EX05BTkRfTUVNX1BIWVNfQkFTRSwgS0lSS1dPT0RfTkFORF9NRU1fU0laRSwKKwlzZXR1cF9jcHVfd2luKDQsIEtJUktXT09EX05BTkRfTUVNX1BIWVNfQkFTRSwgS0lSS1dPT0RfTkFORF9NRU1fU0laRSwKIAkJICAgICAgVEFSR0VUX0RFVl9CVVMsIEFUVFJfREVWX05BTkQsIC0xKTsKIAogCS8qCiAJICogU2V0dXAgd2luZG93IGZvciBTUkFNLgogCSAqLwotCXNldHVwX2NwdV93aW4oMywgS0lSS1dPT0RfU1JBTV9QSFlTX0JBU0UsIEtJUktXT09EX1NSQU1fU0laRSwKKwlzZXR1cF9jcHVfd2luKDUsIEtJUktXT09EX1NSQU1fUEhZU19CQVNFLCBLSVJLV09PRF9TUkFNX1NJWkUsCiAJCSAgICAgIFRBUkdFVF9TUkFNLCBBVFRSX1NSQU0sIC0xKTsKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYwppbmRleCA2MDcyZWFhLi45ZGQ2N2M3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMKQEAgLTQ0LDYgKzQ0LDExIEBACiAJCS5sZW5ndGgJCT0gS0lSS1dPT0RfUENJRV9JT19TSVpFLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UsCiAJfSwgeworCQkudmlydHVhbAk9IEtJUktXT09EX1BDSUUxX0lPX1ZJUlRfQkFTRSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEtJUktXT09EX1BDSUUxX0lPX1BIWVNfQkFTRSksCisJCS5sZW5ndGgJCT0gS0lSS1dPT0RfUENJRTFfSU9fU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKIAkJLnZpcnR1YWwJPSBLSVJLV09PRF9SRUdTX1ZJUlRfQkFTRSwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEtJUktXT09EX1JFR1NfUEhZU19CQVNFKSwKIAkJLmxlbmd0aAkJPSBLSVJLV09PRF9SRUdTX1NJWkUsCkBAIC00MDIsNyArNDA3LDcgQEAKIAl1MzIgZGV2LCByZXY7CiAKIAlraXJrd29vZF9wY2llX2lkKCZkZXYsICZyZXYpOwotCWlmIChyZXYgPT0gMCkgIC8qIGNhdGNoIGFsbCBLaXJrd29vZCBaMCdzICovCisJaWYgKHJldiA9PSAwICYmIGRldiAhPSBNVjg4RjYyODJfREVWX0lEKSAvKiBjYXRjaCBhbGwgS2lya3dvb2QgWjAncyAqLwogCQltdnNkaW9fZGF0YS0+Y2xvY2sgPSAxMDAwMDAwMDA7CiAJZWxzZQogCQltdnNkaW9fZGF0YS0+Y2xvY2sgPSAyMDAwMDAwMDA7CkBAIC04NDcsOCArODUyLDEwIEBACiAJdTMyIGRldiwgcmV2OwogCiAJa2lya3dvb2RfcGNpZV9pZCgmZGV2LCAmcmV2KTsKLQlpZiAoZGV2ID09IE1WODhGNjI4MV9ERVZfSUQgJiYgKHJldiA9PSBNVjg4RjYyODFfUkVWX0EwIHx8Ci0JCQkJCXJldiA9PSBNVjg4RjYyODFfUkVWX0ExKSkKKworCWlmICgoZGV2ID09IE1WODhGNjI4MV9ERVZfSUQgJiYgKHJldiA9PSBNVjg4RjYyODFfUkVWX0EwIHx8CisJCQkJCXJldiA9PSBNVjg4RjYyODFfUkVWX0ExKSkgfHwKKwkgICAgKGRldiA9PSBNVjg4RjYyODJfREVWX0lEKSkKIAkJcmV0dXJuIDIwMDAwMDAwMDsKIAogCXJldHVybiAxNjY2NjY2Njc7CkBAIC04OTEsMTMgKzg5OCwyMiBAQAogCQkJcmV0dXJuICJNVjg4RjYxOTItWjAiOwogCQllbHNlIGlmIChyZXYgPT0gTVY4OEY2MTkyX1JFVl9BMCkKIAkJCXJldHVybiAiTVY4OEY2MTkyLUEwIjsKKwkJZWxzZSBpZiAocmV2ID09IE1WODhGNjE5Ml9SRVZfQTEpCisJCQlyZXR1cm4gIk1WODhGNjE5Mi1BMSI7CiAJCWVsc2UKIAkJCXJldHVybiAiTVY4OEY2MTkyLVJldi1VbnN1cHBvcnRlZCI7CiAJfSBlbHNlIGlmIChkZXYgPT0gTVY4OEY2MTgwX0RFVl9JRCkgewogCQlpZiAocmV2ID09IE1WODhGNjE4MF9SRVZfQTApCiAJCQlyZXR1cm4gIk1WODhGNjE4MC1SZXYtQTAiOworCQllbHNlIGlmIChyZXYgPT0gTVY4OEY2MTgwX1JFVl9BMSkKKwkJCXJldHVybiAiTVY4OEY2MTgwLVJldi1BMSI7CiAJCWVsc2UKIAkJCXJldHVybiAiTVY4OEY2MTgwLVJldi1VbnN1cHBvcnRlZCI7CisJfSBlbHNlIGlmIChkZXYgPT0gTVY4OEY2MjgyX0RFVl9JRCkgeworCQlpZiAocmV2ID09IE1WODhGNjI4Ml9SRVZfQTApCisJCQlyZXR1cm4gIk1WODhGNjI4Mi1SZXYtQTAiOworCQllbHNlCisJCQlyZXR1cm4gIk1WODhGNjI4Mi1SZXYtVW5zdXBwb3J0ZWQiOwogCX0gZWxzZSB7CiAJCXJldHVybiAiRGV2aWNlLVVua25vd24iOwogCX0KQEAgLTk0OSwxMiArOTY1LDE0IEBACiBzdGF0aWMgaW50IF9faW5pdCBraXJrd29vZF9jbG9ja19nYXRlKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGN1cnIgPSByZWFkbChDTE9DS19HQVRJTkdfQ1RSTCk7CisJdTMyIGRldiwgcmV2OwogCisJa2lya3dvb2RfcGNpZV9pZCgmZGV2LCAmcmV2KTsKIAlwcmludGsoS0VSTl9ERUJVRyAiR2F0aW5nIGNsb2NrIG9mIHVudXNlZCB1bml0c1xuIik7CiAJcHJpbnRrKEtFUk5fREVCVUcgImJlZm9yZTogMHglMDh4XG4iLCBjdXJyKTsKIAogCS8qIE1ha2Ugc3VyZSB0aG9zZSB1bml0cyBhcmUgYWNjZXNzaWJsZSAqLwotCXdyaXRlbChjdXJyIHwgQ0dDX1NBVEEwIHwgQ0dDX1NBVEExIHwgQ0dDX1BFWDAsIENMT0NLX0dBVElOR19DVFJMKTsKKwl3cml0ZWwoY3VyciB8IENHQ19TQVRBMCB8IENHQ19TQVRBMSB8IENHQ19QRVgwIHwgQ0dDX1BFWDEsIENMT0NLX0dBVElOR19DVFJMKTsKIAogCS8qIEZvciBTQVRBOiBmaXJzdCBzaHV0ZG93biB0aGUgcGh5ICovCiAJaWYgKCEoa2lya3dvb2RfY2xrX2N0cmwgJiBDR0NfU0FUQTApKSB7CkBAIC05NzksNiArOTk3LDE4IEBACiAJCXdyaXRlbChyZWFkbChQQ0lFX0xJTktfQ1RSTCkgJiB+MHgxMCwgUENJRV9MSU5LX0NUUkwpOwogCX0KIAorCS8qIEZvciBQQ0llIDE6IGZpcnN0IHNodXRkb3duIHRoZSBwaHkgKi8KKwlpZiAoZGV2ID09IE1WODhGNjI4Ml9ERVZfSUQpIHsKKwkJaWYgKCEoa2lya3dvb2RfY2xrX2N0cmwgJiBDR0NfUEVYMSkpIHsKKwkJCXdyaXRlbChyZWFkbChQQ0lFMV9MSU5LX0NUUkwpIHwgMHgxMCwgUENJRTFfTElOS19DVFJMKTsKKwkJCXdoaWxlICgxKQorCQkJCWlmIChyZWFkbChQQ0lFMV9TVEFUVVMpICYgMHgxKQorCQkJCQlicmVhazsKKwkJCXdyaXRlbChyZWFkbChQQ0lFMV9MSU5LX0NUUkwpICYgfjB4MTAsIFBDSUUxX0xJTktfQ1RSTCk7CisJCX0KKwl9IGVsc2UgIC8qIGtlZXAgdGhpcyBiaXQgc2V0IGZvciBkZXZpY2VzIHRoYXQgZG9uJ3QgaGF2ZSBQQ0llMSAqLworCQlraXJrd29vZF9jbGtfY3RybCB8PSBDR0NfUEVYMTsKKwogCS8qIE5vdyBnYXRlIGNsb2NrIHRoZSByZXF1aXJlZCB1bml0cyAqLwogCXdyaXRlbChraXJrd29vZF9jbGtfY3RybCwgQ0xPQ0tfR0FUSU5HX0NUUkwpOwogCXByaW50ayhLRVJOX0RFQlVHICIgYWZ0ZXI6IDB4JTA4eFxuIiwgcmVhZGwoQ0xPQ0tfR0FUSU5HX0NUUkwpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5oCmluZGV4IDA1ZThhOGEuLjViMmMxYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uaApAQCAtMTgsNiArMTgsOSBAQAogc3RydWN0IG10ZF9wYXJ0aXRpb247CiBzdHJ1Y3QgbXRkX2luZm87CiAKKyNkZWZpbmUgS1dfUENJRTAJKDEgPDwgMCkKKyNkZWZpbmUgS1dfUENJRTEJKDEgPDwgMSkKKwogLyoKICAqIEJhc2ljIEtpcmt3b29kIGluaXQgZnVuY3Rpb25zIHVzZWQgZWFybHkgYnkgbWFjaGluZS1zZXR1cC4KICAqLwpAQCAtMzQsNyArMzcsNyBAQAogdm9pZCBraXJrd29vZF9nZTAwX2luaXQoc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgKmV0aF9kYXRhKTsKIHZvaWQga2lya3dvb2RfZ2UwMV9pbml0KHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhICpldGhfZGF0YSk7CiB2b2lkIGtpcmt3b29kX2dlMDBfc3dpdGNoX2luaXQoc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhICpkLCBpbnQgaXJxKTsKLXZvaWQga2lya3dvb2RfcGNpZV9pbml0KHZvaWQpOwordm9pZCBraXJrd29vZF9wY2llX2luaXQodW5zaWduZWQgaW50IHBvcnRtYXNrKTsKIHZvaWQga2lya3dvb2Rfc2F0YV9pbml0KHN0cnVjdCBtdl9zYXRhX3BsYXRmb3JtX2RhdGEgKnNhdGFfZGF0YSk7CiB2b2lkIGtpcmt3b29kX3NkaW9faW5pdChzdHJ1Y3QgbXZzZGlvX3BsYXRmb3JtX2RhdGEgKm12c2Rpb19kYXRhKTsKIHZvaWQga2lya3dvb2Rfc3BpX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2RiODhmNjI4MS1icC1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9kYjg4ZjYyODEtYnAtc2V0dXAuYwppbmRleCAzOWJkZjRiLi4xNmY2NjkxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2RiODhmNjI4MS1icC1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvZGI4OGY2MjgxLWJwLXNldHVwLmMKQEAgLTUxLDYgKzUxLDE0IEBACiB9OwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGRiODhmNjI4MV9tcHBfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwlNUFAwX05GX0lPMiwKKwlNUFAxX05GX0lPMywKKwlNUFAyX05GX0lPNCwKKwlNUFAzX05GX0lPNSwKKwlNUFA0X05GX0lPNiwKKwlNUFA1X05GX0lPNywKKwlNUFAxOF9ORl9JTzAsCisJTVBQMTlfTkZfSU8xLAogCU1QUDM3X0dQSU8sCiAJTVBQMzhfR1BJTywKIAkwCkBAIC03NCw5ICs4MiwxNSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBkYjg4ZjYyODFfcGNpX2luaXQodm9pZCkKIHsKLQlpZiAobWFjaGluZV9pc19kYjg4ZjYyODFfYnAoKSkKLQkJa2lya3dvb2RfcGNpZV9pbml0KCk7CisJaWYgKG1hY2hpbmVfaXNfZGI4OGY2MjgxX2JwKCkpIHsKKwkJdTMyIGRldiwgcmV2OwogCisJCWtpcmt3b29kX3BjaWVfaWQoJmRldiwgJnJldik7CisJCWlmIChkZXYgPT0gTVY4OEY2MjgyX0RFVl9JRCkKKwkJCWtpcmt3b29kX3BjaWVfaW5pdChLV19QQ0lFMSB8IEtXX1BDSUUwKTsKKwkJZWxzZQorCQkJa2lya3dvb2RfcGNpZV9pbml0KEtXX1BDSUUwKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiBzdWJzeXNfaW5pdGNhbGwoZGI4OGY2MjgxX3BjaV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2JyaWRnZS1yZWdzLmggYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9icmlkZ2UtcmVncy5oCmluZGV4IDQxOGY1MDEuLmFmZjBlMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2JyaWRnZS1yZWdzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvYnJpZGdlLXJlZ3MuaApAQCAtNTksOCArNTksOSBAQAogI2RlZmluZSBDR0NfU0FUQTEJCSgxIDw8IDE1KQogI2RlZmluZSBDR0NfWE9SMQkJKDEgPDwgMTYpCiAjZGVmaW5lIENHQ19DUllQVE8JCSgxIDw8IDE3KQorI2RlZmluZSBDR0NfUEVYMQkJKDEgPDwgMTgpCiAjZGVmaW5lIENHQ19HRTEJCQkoMSA8PCAxOSkKICNkZWZpbmUgQ0dDX1RETQkJCSgxIDw8IDIwKQotI2RlZmluZSBDR0NfUkVTRVJWRUQJCSgoMSA8PCAxOCkgfCAoMHg2IDw8IDIxKSkKKyNkZWZpbmUgQ0dDX1JFU0VSVkVECQkoMHg2IDw8IDIxKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2lycXMuaAppbmRleCBmMDBhMGE0Li45ZGEyZWI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0yMyw2ICsyMyw3IEBACiAjZGVmaW5lIElSUV9LSVJLV09PRF9YT1JfMTAJNwogI2RlZmluZSBJUlFfS0lSS1dPT0RfWE9SXzExCTgKICNkZWZpbmUgSVJRX0tJUktXT09EX1BDSUUJOQorI2RlZmluZSBJUlFfS0lSS1dPT0RfUENJRTEJMTAKICNkZWZpbmUgSVJRX0tJUktXT09EX0dFMDBfU1VNCTExCiAjZGVmaW5lIElSUV9LSVJLV09PRF9HRTAxX1NVTQkxNQogI2RlZmluZSBJUlFfS0lSS1dPT0RfVVNCCTE5CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9raXJrd29vZC5oIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gva2lya3dvb2QuaAppbmRleCBhMTVjZjBlLi5kMTQxYWY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9raXJrd29vZC5oCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2tpcmt3b29kLmgKQEAgLTE2LDM2ICsxNiw0OCBAQAogICogTWFydmVsbCBLaXJrd29vZCBhZGRyZXNzIG1hcHMuCiAgKgogICogcGh5cwotICogZTAwMDAwMDAJUENJZSBNZW1vcnkgc3BhY2UKKyAqIGUwMDAwMDAwCVBDSWUgIzAgTWVtb3J5IHNwYWNlCisgKiBlODAwMDAwMAlQQ0llICMxIE1lbW9yeSBzcGFjZQogICogZjEwMDAwMDAJb24tY2hpcCBwZXJpcGhlcmFsIHJlZ2lzdGVycwotICogZjIwMDAwMDAJUENJZSBJL08gc3BhY2UKLSAqIGYzMDAwMDAwCU5BTkQgY29udHJvbGxlciBhZGRyZXNzIHdpbmRvdwotICogZjQwMDAwMDAJU2VjdXJpdHkgQWNjZWxlcmF0b3IgU1JBTQorICogZjIwMDAwMDAJUENJZSAjMCBJL08gc3BhY2UKKyAqIGYzMDAwMDAwCVBDSWUgIzEgSS9PIHNwYWNlCisgKiBmNDAwMDAwMAlOQU5EIGNvbnRyb2xsZXIgYWRkcmVzcyB3aW5kb3cKKyAqIGY1MDAwMDAwCVNlY3VyaXR5IEFjY2VsZXJhdG9yIFNSQU0KICAqCiAgKiB2aXJ0CQlwaHlzCQlzaXplCi0gKiBmZWUwMDAwMAlmMTAwMDAwMAkxTQlvbi1jaGlwIHBlcmlwaGVyYWwgcmVnaXN0ZXJzCi0gKiBmZWYwMDAwMAlmMjAwMDAwMAkxTQlQQ0llIEkvTyBzcGFjZQorICogZmVkMDAwMDAJZjEwMDAwMDAJMU0Jb24tY2hpcCBwZXJpcGhlcmFsIHJlZ2lzdGVycworICogZmVlMDAwMDAJZjIwMDAwMDAJMU0JUENJZSAjMCBJL08gc3BhY2UKKyAqIGZlZjAwMDAwCWYzMDAwMDAwCTFNCVBDSWUgIzEgSS9PIHNwYWNlCiAgKi8KIAotI2RlZmluZSBLSVJLV09PRF9TUkFNX1BIWVNfQkFTRQkJMHhmNDAwMDAwMAorI2RlZmluZSBLSVJLV09PRF9TUkFNX1BIWVNfQkFTRQkJMHhmNTAwMDAwMAogI2RlZmluZSBLSVJLV09PRF9TUkFNX1NJWkUJCVNaXzJLCiAKLSNkZWZpbmUgS0lSS1dPT0RfTkFORF9NRU1fUEhZU19CQVNFCTB4ZjMwMDAwMDAKKyNkZWZpbmUgS0lSS1dPT0RfTkFORF9NRU1fUEhZU19CQVNFCTB4ZjQwMDAwMDAKICNkZWZpbmUgS0lSS1dPT0RfTkFORF9NRU1fU0laRQkJU1pfMUsKIAorI2RlZmluZSBLSVJLV09PRF9QQ0lFMV9JT19QSFlTX0JBU0UJMHhmMzAwMDAwMAorI2RlZmluZSBLSVJLV09PRF9QQ0lFMV9JT19WSVJUX0JBU0UJMHhmZWYwMDAwMAorI2RlZmluZSBLSVJLV09PRF9QQ0lFMV9JT19CVVNfQkFTRQkweDAwMDAwMDAwCisjZGVmaW5lIEtJUktXT09EX1BDSUUxX0lPX1NJWkUJCVNaXzFNCisKICNkZWZpbmUgS0lSS1dPT0RfUENJRV9JT19QSFlTX0JBU0UJMHhmMjAwMDAwMAotI2RlZmluZSBLSVJLV09PRF9QQ0lFX0lPX1ZJUlRfQkFTRQkweGZlZjAwMDAwCisjZGVmaW5lIEtJUktXT09EX1BDSUVfSU9fVklSVF9CQVNFCTB4ZmVlMDAwMDAKICNkZWZpbmUgS0lSS1dPT0RfUENJRV9JT19CVVNfQkFTRQkweDAwMDAwMDAwCiAjZGVmaW5lIEtJUktXT09EX1BDSUVfSU9fU0laRQkJU1pfMU0KIAogI2RlZmluZSBLSVJLV09PRF9SRUdTX1BIWVNfQkFTRQkJMHhmMTAwMDAwMAotI2RlZmluZSBLSVJLV09PRF9SRUdTX1ZJUlRfQkFTRQkJMHhmZWUwMDAwMAorI2RlZmluZSBLSVJLV09PRF9SRUdTX1ZJUlRfQkFTRQkJMHhmZWQwMDAwMAogI2RlZmluZSBLSVJLV09PRF9SRUdTX1NJWkUJCVNaXzFNCiAKICNkZWZpbmUgS0lSS1dPT0RfUENJRV9NRU1fUEhZU19CQVNFCTB4ZTAwMDAwMDAKICNkZWZpbmUgS0lSS1dPT0RfUENJRV9NRU1fQlVTX0JBU0UJMHhlMDAwMDAwMAogI2RlZmluZSBLSVJLV09PRF9QQ0lFX01FTV9TSVpFCQlTWl8xMjhNCiAKKyNkZWZpbmUgS0lSS1dPT0RfUENJRTFfTUVNX1BIWVNfQkFTRQkweGU4MDAwMDAwCisjZGVmaW5lIEtJUktXT09EX1BDSUUxX01FTV9CVVNfQkFTRQkweGU4MDAwMDAwCisjZGVmaW5lIEtJUktXT09EX1BDSUUxX01FTV9TSVpFCQlTWl8xMjhNCisKIC8qCiAgKiBSZWdpc3RlciBNYXAKICAqLwpAQCAtNzIsNiArODQsOSBAQAogI2RlZmluZSBQQ0lFX1ZJUlRfQkFTRQkJKEtJUktXT09EX1JFR1NfVklSVF9CQVNFIHwgMHg0MDAwMCkKICNkZWZpbmUgUENJRV9MSU5LX0NUUkwJCShQQ0lFX1ZJUlRfQkFTRSB8IDB4NzApCiAjZGVmaW5lIFBDSUVfU1RBVFVTCQkoUENJRV9WSVJUX0JBU0UgfCAweDFhMDQpCisjZGVmaW5lIFBDSUUxX1ZJUlRfQkFTRQkJKEtJUktXT09EX1JFR1NfVklSVF9CQVNFIHwgMHg0NDAwMCkKKyNkZWZpbmUgUENJRTFfTElOS19DVFJMCQkoUENJRTFfVklSVF9CQVNFIHwgMHg3MCkKKyNkZWZpbmUgUENJRTFfU1RBVFVTCQkoUENJRTFfVklSVF9CQVNFIHwgMHgxYTA0KQogCiAjZGVmaW5lIFVTQl9QSFlTX0JBU0UJCShLSVJLV09PRF9SRUdTX1BIWVNfQkFTRSB8IDB4NTAwMDApCiAKQEAgLTEwNyw4ICsxMjIsMTIgQEAKICNkZWZpbmUgTVY4OEY2MTkyX0RFVl9JRAkweDYxOTIKICNkZWZpbmUgTVY4OEY2MTkyX1JFVl9aMAkwCiAjZGVmaW5lIE1WODhGNjE5Ml9SRVZfQTAJMgorI2RlZmluZSBNVjg4RjYxOTJfUkVWX0ExCTMKIAogI2RlZmluZSBNVjg4RjYxODBfREVWX0lECTB4NjE4MAogI2RlZmluZSBNVjg4RjYxODBfUkVWX0EwCTIKKyNkZWZpbmUgTVY4OEY2MTgwX1JFVl9BMQkzCiAKKyNkZWZpbmUgTVY4OEY2MjgyX0RFVl9JRAkweDYyODIKKyNkZWZpbmUgTVY4OEY2MjgyX1JFVl9BMAkwCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2xlZHMtbnMyLmggYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9sZWRzLW5zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMTI3MmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9sZWRzLW5zMi5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9sZWRzLW5zMi5oCisgKgorICogUGxhdGZvcm0gZGF0YSBzdHJ1Y3R1cmUgZm9yIE5ldHdvcmsgU3BhY2UgdjIgTEVEIGRyaXZlcgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgX19NQUNIX0xFRFNfTlMyX0gKKyNkZWZpbmUgX19NQUNIX0xFRFNfTlMyX0gKKworc3RydWN0IG5zMl9sZWQgeworCWNvbnN0IGNoYXIJKm5hbWU7CisJY29uc3QgY2hhcgkqZGVmYXVsdF90cmlnZ2VyOworCXVuc2lnbmVkCWNtZDsKKwl1bnNpZ25lZAlzbG93OworfTsKKworc3RydWN0IG5zMl9sZWRfcGxhdGZvcm1fZGF0YSB7CisJaW50CQludW1fbGVkczsKKwlzdHJ1Y3QgbnMyX2xlZAkqbGVkczsKK307CisKKyNlbmRpZiAvKiBfX01BQ0hfTEVEU19OUzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9tcHAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvbXBwLmMKaW5kZXggYTU5MDBmNi4uMDY1MTg3ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9tcHAuYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL21wcC5jCkBAIC0yMyw3ICsyMyw4IEBACiAKIAlraXJrd29vZF9wY2llX2lkKCZkZXYsICZyZXYpOwogCi0JaWYgKGRldiA9PSBNVjg4RjYyODFfREVWX0lEICYmIHJldiA+PSBNVjg4RjYyODFfUkVWX0EwKQorCWlmICgoZGV2ID09IE1WODhGNjI4MV9ERVZfSUQgJiYgcmV2ID49IE1WODhGNjI4MV9SRVZfQTApIHx8CisJICAgIChkZXYgPT0gTVY4OEY2MjgyX0RFVl9JRCkpCiAJCXJldHVybiBNUFBfRjYyODFfTUFTSzsKIAlpZiAoZGV2ID09IE1WODhGNjE5Ml9ERVZfSUQgJiYgcmV2ID49IE1WODhGNjE5Ml9SRVZfQTApCiAJCXJldHVybiBNUFBfRjYxOTJfTUFTSzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvbXBwLmggYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL21wcC5oCmluZGV4IGJjNzQyNzguLjliMGE5NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvbXBwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9tcHAuaApAQCAtMTEsNyArMTEsNyBAQAogI2lmbmRlZiBfX0tJUktXT09EX01QUF9ICiAjZGVmaW5lIF9fS0lSS1dPT0RfTVBQX0gKIAotI2RlZmluZSBNUFAoX251bSwgX3NlbCwgX2luLCBfb3V0LCBfRjYxODAsIF9GNjE5MCwgX0Y2MTkyLCBfRjYyODEpICggXAorI2RlZmluZSBNUFAoX251bSwgX3NlbCwgX2luLCBfb3V0LCBfRjYxODAsIF9GNjE5MCwgX0Y2MTkyLCBfRjYyODEsIF9GNjI4MikgKCBcCiAJLyogTVBQIG51bWJlciAqLwkJKChfbnVtKSAmIDB4ZmYpIHwgXAogCS8qIE1QUCBzZWxlY3QgdmFsdWUgKi8JCSgoKF9zZWwpICYgMHhmKSA8PCA4KSB8IFwKIAkvKiBtYXkgYmUgaW5wdXQgc2lnbmFsICovCSgoISEoX2luKSkgPDwgMTIpIHwgXApAQCAtMTksMjgyICsxOSwzMzIgQEAKIAkvKiBhdmFpbGFibGUgb24gRjYxODAgKi8JKCghIShfRjYxODApKSA8PCAxNCkgfCBcCiAJLyogYXZhaWxhYmxlIG9uIEY2MTkwICovCSgoISEoX0Y2MTkwKSkgPDwgMTUpIHwgXAogCS8qIGF2YWlsYWJsZSBvbiBGNjE5MiAqLwkoKCEhKF9GNjE5MikpIDw8IDE2KSB8IFwKLQkvKiBhdmFpbGFibGUgb24gRjYyODEgKi8JKCghIShfRjYyODEpKSA8PCAxNykpCisJLyogYXZhaWxhYmxlIG9uIEY2MjgxICovCSgoISEoX0Y2MjgxKSkgPDwgMTcpIHwgXAorCS8qIGF2YWlsYWJsZSBvbiBGNjI4MiAqLwkoKCEhKF9GNjI4MikpIDw8IDE4KSkKIAogI2RlZmluZSBNUFBfTlVNKHgpCSgoeCkgJiAweGZmKQogI2RlZmluZSBNUFBfU0VMKHgpCSgoKHgpID4+IDgpICYgMHhmKQogCi0JCQkJLyogICBudW0gc2VsICBpICBvICA2MTgwIDYxOTAgNjE5MiA2MjgxICovCisJCQkJLyogICBudW0gc2VsICBpICBvICA2MTgwIDYxOTAgNjE5MiA2MjgxIDYyODIgKi8KIAotI2RlZmluZSBNUFBfSU5QVVRfTUFTSwkJTVBQKCAgMCwgMHgwLCAxLCAwLCAwLCAgIDAsICAgMCwgICAwICAgICkKLSNkZWZpbmUgTVBQX09VVFBVVF9NQVNLCQlNUFAoICAwLCAweDAsIDAsIDEsIDAsICAgMCwgICAwLCAgIDAgICAgKQorI2RlZmluZSBNUFBfSU5QVVRfTUFTSwkJTVBQKCAgMCwgMHgwLCAxLCAwLCAwLCAgIDAsICAgMCwgICAwLCAgIDAgKQorI2RlZmluZSBNUFBfT1VUUFVUX01BU0sJCU1QUCggIDAsIDB4MCwgMCwgMSwgMCwgICAwLCAgIDAsICAgMCwgICAwICkKIAotI2RlZmluZSBNUFBfRjYxODBfTUFTSwkJTVBQKCAgMCwgMHgwLCAwLCAwLCAxLCAgIDAsICAgMCwgICAwICAgICkKLSNkZWZpbmUgTVBQX0Y2MTkwX01BU0sJCU1QUCggIDAsIDB4MCwgMCwgMCwgMCwgICAxLCAgIDAsICAgMCAgICApCi0jZGVmaW5lIE1QUF9GNjE5Ml9NQVNLCQlNUFAoICAwLCAweDAsIDAsIDAsIDAsICAgMCwgICAxLCAgIDAgICAgKQotI2RlZmluZSBNUFBfRjYyODFfTUFTSwkJTVBQKCAgMCwgMHgwLCAwLCAwLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQX0Y2MTgwX01BU0sJCU1QUCggIDAsIDB4MCwgMCwgMCwgMSwgICAwLCAgIDAsICAgMCwgICAwICkKKyNkZWZpbmUgTVBQX0Y2MTkwX01BU0sJCU1QUCggIDAsIDB4MCwgMCwgMCwgMCwgICAxLCAgIDAsICAgMCwgICAwICkKKyNkZWZpbmUgTVBQX0Y2MTkyX01BU0sJCU1QUCggIDAsIDB4MCwgMCwgMCwgMCwgICAwLCAgIDEsICAgMCwgICAwICkKKyNkZWZpbmUgTVBQX0Y2MjgxX01BU0sJCU1QUCggIDAsIDB4MCwgMCwgMCwgMCwgICAwLCAgIDAsICAgMSwgICAwICkKKyNkZWZpbmUgTVBQX0Y2MjgyX01BU0sJCU1QUCggIDAsIDB4MCwgMCwgMCwgMCwgICAwLCAgIDAsICAgMCwgICAxICkKIAotI2RlZmluZSBNUFAwX0dQSU8JCU1QUCggIDAsIDB4MCwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDBfTkZfSU8yCQlNUFAoICAwLCAweDEsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAwX1NQSV9TQ24JCU1QUCggIDAsIDB4MiwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDBfR1BJTwkJTVBQKCAgMCwgMHgwLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAwX05GX0lPMgkJTVBQKCAgMCwgMHgxLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAwX1NQSV9TQ24JCU1QUCggIDAsIDB4MiwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSwgICAxICkKIAotI2RlZmluZSBNUFAxX0dQTwkJTVBQKCAgMSwgMHgwLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMV9ORl9JTzMJCU1QUCggIDEsIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDFfU1BJX01PU0kJCU1QUCggIDEsIDB4MiwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDFfR1BPCQlNUFAoICAxLCAweDAsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDFfTkZfSU8zCQlNUFAoICAxLCAweDEsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDFfU1BJX01PU0kJCU1QUCggIDEsIDB4MiwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSwgICAxICkKIAotI2RlZmluZSBNUFAyX0dQTwkJTVBQKCAgMiwgMHgwLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMl9ORl9JTzQJCU1QUCggIDIsIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDJfU1BJX1NDSwkJTVBQKCAgMiwgMHgyLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMl9HUE8JCU1QUCggIDIsIDB4MCwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMl9ORl9JTzQJCU1QUCggIDIsIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMl9TUElfU0NLCQlNUFAoICAyLCAweDIsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEsICAgMSApCiAKLSNkZWZpbmUgTVBQM19HUE8JCU1QUCggIDMsIDB4MCwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDNfTkZfSU81CQlNUFAoICAzLCAweDEsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAzX1NQSV9NSVNPCQlNUFAoICAzLCAweDIsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAzX0dQTwkJTVBQKCAgMywgMHgwLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAzX05GX0lPNQkJTVBQKCAgMywgMHgxLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAzX1NQSV9NSVNPCQlNUFAoICAzLCAweDIsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEsICAgMSApCiAKLSNkZWZpbmUgTVBQNF9HUElPCQlNUFAoICA0LCAweDAsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFA0X05GX0lPNgkJTVBQKCAgNCwgMHgxLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQNF9VQVJUMF9SWEQJCU1QUCggIDQsIDB4MiwgMSwgMCwgMSwgICAxLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDRfU0FUQTFfQUNUbgkJTVBQKCAgNCwgMHg1LCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQNF9QVFBfQ0xLCQlNUFAoICA0LCAweGQsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA0X0dQSU8JCU1QUCggIDQsIDB4MCwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQNF9ORl9JTzYJCU1QUCggIDQsIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQNF9VQVJUMF9SWEQJCU1QUCggIDQsIDB4MiwgMSwgMCwgMSwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQNF9TQVRBMV9BQ1RuCQlNUFAoICA0LCAweDUsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDRfTENEX1ZHQV9IU1lOQwlNUFAoICA0LCAweGIsIDAsIDAsIDAsICAgMCwgICAwLCAgIDAsICAgMSApCisjZGVmaW5lIE1QUDRfUFRQX0NMSwkJTVBQKCAgNCwgMHhkLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxLCAgIDAgKQogCi0jZGVmaW5lIE1QUDVfR1BPCQlNUFAoICA1LCAweDAsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFA1X05GX0lPNwkJTVBQKCAgNSwgMHgxLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQNV9VQVJUMF9UWEQJCU1QUCggIDUsIDB4MiwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDVfUFRQX1RSSUdfR0VOCU1QUCggIDUsIDB4NCwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDVfU0FUQTBfQUNUbgkJTVBQKCAgNSwgMHg1LCAwLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQNV9HUE8JCU1QUCggIDUsIDB4MCwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQNV9ORl9JTzcJCU1QUCggIDUsIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQNV9VQVJUMF9UWEQJCU1QUCggIDUsIDB4MiwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQNV9QVFBfVFJJR19HRU4JTVBQKCAgNSwgMHg0LCAwLCAxLCAxLCAgIDEsICAgMSwgICAxLCAgIDAgKQorI2RlZmluZSBNUFA1X1NBVEEwX0FDVG4JCU1QUCggIDUsIDB4NSwgMCwgMSwgMCwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQNV9MQ0RfVkdBX1ZTWU5DCU1QUCggIDUsIDB4YiwgMCwgMCwgMCwgICAwLCAgIDAsICAgMCwgICAxICkKIAotI2RlZmluZSBNUFA2X1NZU1JTVF9PVVRuCU1QUCggIDYsIDB4MSwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDZfU1BJX01PU0kJCU1QUCggIDYsIDB4MiwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDZfUFRQX1RSSUdfR0VOCU1QUCggIDYsIDB4MywgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDZfU1lTUlNUX09VVG4JTVBQKCAgNiwgMHgxLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFA2X1NQSV9NT1NJCQlNUFAoICA2LCAweDIsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDZfUFRQX1RSSUdfR0VOCU1QUCggIDYsIDB4MywgMCwgMSwgMSwgICAxLCAgIDEsICAgMSwgICAwICkKIAotI2RlZmluZSBNUFA3X0dQTwkJTVBQKCAgNywgMHgwLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQN19QRVhfUlNUX09VVG4JTVBQKCAgNywgMHgxLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQN19TUElfU0NuCQlNUFAoICA3LCAweDIsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFA3X1BUUF9UUklHX0dFTglNUFAoICA3LCAweDMsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA3X0dQTwkJTVBQKCAgNywgMHgwLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFA3X1BFWF9SU1RfT1VUbglNUFAoICA3LCAweDEsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEsICAgMCApCisjZGVmaW5lIE1QUDdfU1BJX1NDbgkJTVBQKCAgNywgMHgyLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFA3X1BUUF9UUklHX0dFTglNUFAoICA3LCAweDMsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEsICAgMCApCisjZGVmaW5lIE1QUDdfTENEX1BXTQkJTVBQKCAgNywgMHhiLCAwLCAxLCAwLCAgIDAsICAgMCwgICAwLCAgIDEgKQogCi0jZGVmaW5lIE1QUDhfR1BJTwkJTVBQKCAgOCwgMHgwLCAxLCAxLCAxLCAgICAxLCAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQOF9UV19TREEJCU1QUCggIDgsIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDhfVUFSVDBfUlRTCQlNUFAoICA4LCAweDIsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFA4X1VBUlQxX1JUUwkJTVBQKCAgOCwgMHgzLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQOF9NSUkwX1JYRVJSCQlNUFAoICA4LCAweDQsIDEsIDAsIDAsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFA4X1NBVEExX1BSRVNFTlRuCU1QUCggIDgsIDB4NSwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDhfUFRQX0NMSwkJTVBQKCAgOCwgMHhjLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQOF9NSUkwX0NPTAkJTVBQKCAgOCwgMHhkLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQOF9HUElPCQlNUFAoICA4LCAweDAsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDhfVFcwX1NEQQkJTVBQKCAgOCwgMHgxLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFA4X1VBUlQwX1JUUwkJTVBQKCAgOCwgMHgyLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFA4X1VBUlQxX1JUUwkJTVBQKCAgOCwgMHgzLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFA4X01JSTBfUlhFUlIJCU1QUCggIDgsIDB4NCwgMSwgMCwgMCwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQOF9TQVRBMV9QUkVTRU5UbglNUFAoICA4LCAweDUsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDhfUFRQX0NMSwkJTVBQKCAgOCwgMHhjLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxLCAgIDAgKQorI2RlZmluZSBNUFA4X01JSTBfQ09MCQlNUFAoICA4LCAweGQsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEsICAgMSApCiAKLSNkZWZpbmUgTVBQOV9HUElPCQlNUFAoICA5LCAweDAsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFA5X1RXX1NDSwkJTVBQKCAgOSwgMHgxLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQOV9VQVJUMF9DVFMJCU1QUCggIDksIDB4MiwgMSwgMCwgMSwgICAxLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDlfVUFSVDFfQ1RTCQlNUFAoICA5LCAweDMsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFA5X1NBVEEwX1BSRVNFTlRuCU1QUCggIDksIDB4NSwgMCwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDlfUFRQX0VWRU5UX1JFUQlNUFAoICA5LCAweGMsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFA5X01JSTBfQ1JTCQlNUFAoICA5LCAweGQsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA5X0dQSU8JCU1QUCggIDksIDB4MCwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQOV9UVzBfU0NLCQlNUFAoICA5LCAweDEsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDlfVUFSVDBfQ1RTCQlNUFAoICA5LCAweDIsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDlfVUFSVDFfQ1RTCQlNUFAoICA5LCAweDMsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDlfU0FUQTBfUFJFU0VOVG4JTVBQKCAgOSwgMHg1LCAwLCAxLCAwLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFA5X1BUUF9FVkVOVF9SRVEJTVBQKCAgOSwgMHhjLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxLCAgIDAgKQorI2RlZmluZSBNUFA5X01JSTBfQ1JTCQlNUFAoICA5LCAweGQsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEsICAgMSApCiAKLSNkZWZpbmUgTVBQMTBfR1BPCQlNUFAoIDEwLCAweDAsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAxMF9TUElfU0NLCQlNUFAoIDEwLCAweDIsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAxMF9VQVJUMF9UWEQJCU1QUCggMTAsIDBYMywgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDEwX1NBVEExX0FDVG4JTVBQKCAxMCwgMHg1LCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMTBfUFRQX1RSSUdfR0VOCU1QUCggMTAsIDB4YywgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDEwX0dQTwkJTVBQKCAxMCwgMHgwLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAxMF9TUElfU0NLCQlNUFAoIDEwLCAweDIsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDEwX1VBUlQwX1RYRAkJTVBQKCAxMCwgMFgzLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAxMF9TQVRBMV9BQ1RuCU1QUCggMTAsIDB4NSwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMTBfUFRQX1RSSUdfR0VOCU1QUCggMTAsIDB4YywgMCwgMSwgMSwgICAxLCAgIDEsICAgMSwgICAwICkKIAotI2RlZmluZSBNUFAxMV9HUElPCQlNUFAoIDExLCAweDAsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAxMV9TUElfTUlTTwkJTVBQKCAxMSwgMHgyLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMTFfVUFSVDBfUlhECQlNUFAoIDExLCAweDMsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAxMV9QVFBfRVZFTlRfUkVRCU1QUCggMTEsIDB4NCwgMSwgMCwgMSwgICAxLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDExX1BUUF9UUklHX0dFTglNUFAoIDExLCAweGMsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAxMV9QVFBfQ0xLCQlNUFAoIDExLCAweGQsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAxMV9TQVRBMF9BQ1RuCU1QUCggMTEsIDB4NSwgMCwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDExX0dQSU8JCU1QUCggMTEsIDB4MCwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMTFfU1BJX01JU08JCU1QUCggMTEsIDB4MiwgMSwgMCwgMSwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMTFfVUFSVDBfUlhECQlNUFAoIDExLCAweDMsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDExX1BUUF9FVkVOVF9SRVEJTVBQKCAxMSwgMHg0LCAxLCAwLCAxLCAgIDEsICAgMSwgICAxLCAgIDAgKQorI2RlZmluZSBNUFAxMV9QVFBfVFJJR19HRU4JTVBQKCAxMSwgMHhjLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxLCAgIDAgKQorI2RlZmluZSBNUFAxMV9QVFBfQ0xLCQlNUFAoIDExLCAweGQsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEsICAgMCApCisjZGVmaW5lIE1QUDExX1NBVEEwX0FDVG4JTVBQKCAxMSwgMHg1LCAwLCAxLCAwLCAgIDEsICAgMSwgICAxLCAgIDEgKQogCi0jZGVmaW5lIE1QUDEyX0dQTwkJTVBQKCAxMiwgMHgwLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMTJfU0RfQ0xLCQlNUFAoIDEyLCAweDEsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxMl9HUE8JCU1QUCggMTIsIDB4MCwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMTJfU0RfQ0xLCQlNUFAoIDEyLCAweDEsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDEyX0FVX1NQRElGMAkJTVBQKCAxMiwgMHhhLCAwLCAxLCAwLCAgIDAsICAgMCwgICAwLCAgIDEgKQorI2RlZmluZSBNUFAxMl9TUElfTU9TSQkJTVBQKCAxMiwgMHhiLCAwLCAxLCAwLCAgIDAsICAgMCwgICAwLCAgIDEgKQorI2RlZmluZSBNUFAxMl9UVzFfU0RBCQlNUFAoIDEyLCAweGQsIDEsIDAsIDAsICAgMCwgICAwLCAgIDAsICAgMSApCiAKLSNkZWZpbmUgTVBQMTNfR1BJTwkJTVBQKCAxMywgMHgwLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMTNfU0RfQ01ECQlNUFAoIDEzLCAweDEsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAxM19VQVJUMV9UWEQJCU1QUCggMTMsIDB4MywgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDEzX0dQSU8JCU1QUCggMTMsIDB4MCwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMTNfU0RfQ01ECQlNUFAoIDEzLCAweDEsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDEzX1VBUlQxX1RYRAkJTVBQKCAxMywgMHgzLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAxM19BVV9TUERJRlJNQ0xLCU1QUCggMTMsIDB4YSwgMCwgMSwgMCwgICAwLCAgIDAsICAgMCwgICAxICkKKyNkZWZpbmUgTVBQMTNfTENEUFdNCQlNUFAoIDEzLCAweGIsIDAsIDEsIDAsICAgMCwgICAwLCAgIDAsICAgMSApCiAKLSNkZWZpbmUgTVBQMTRfR1BJTwkJTVBQKCAxNCwgMHgwLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMTRfU0RfRDAJCU1QUCggMTQsIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDE0X1VBUlQxX1JYRAkJTVBQKCAxNCwgMHgzLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMTRfU0FUQTFfUFJFU0VOVG4JTVBQKCAxNCwgMHg0LCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMTRfTUlJMF9DT0wJCU1QUCggMTQsIDB4ZCwgMSwgMCwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDE0X0dQSU8JCU1QUCggMTQsIDB4MCwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMTRfU0RfRDAJCU1QUCggMTQsIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMTRfVUFSVDFfUlhECQlNUFAoIDE0LCAweDMsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDE0X1NBVEExX1BSRVNFTlRuCU1QUCggMTQsIDB4NCwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMTRfQVVfU1BESUZJCQlNUFAoIDE0LCAweGEsIDEsIDAsIDAsICAgMCwgICAwLCAgIDAsICAgMSApCisjZGVmaW5lIE1QUDE0X0FVX0kyU0RJCQlNUFAoIDE0LCAweGIsIDEsIDAsIDAsICAgMCwgICAwLCAgIDAsICAgMSApCisjZGVmaW5lIE1QUDE0X01JSTBfQ09MCQlNUFAoIDE0LCAweGQsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEsICAgMSApCiAKLSNkZWZpbmUgTVBQMTVfR1BJTwkJTVBQKCAxNSwgMHgwLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMTVfU0RfRDEJCU1QUCggMTUsIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDE1X1VBUlQwX1JUUwkJTVBQKCAxNSwgMHgyLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMTVfVUFSVDFfVFhECQlNUFAoIDE1LCAweDMsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAxNV9TQVRBMF9BQ1RuCU1QUCggMTUsIDB4NCwgMCwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDE1X0dQSU8JCU1QUCggMTUsIDB4MCwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMTVfU0RfRDEJCU1QUCggMTUsIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMTVfVUFSVDBfUlRTCQlNUFAoIDE1LCAweDIsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDE1X1VBUlQxX1RYRAkJTVBQKCAxNSwgMHgzLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAxNV9TQVRBMF9BQ1RuCU1QUCggMTUsIDB4NCwgMCwgMSwgMCwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMTVfU1BJX0NTbgkJTVBQKCAxNSwgMHhiLCAwLCAxLCAwLCAgIDAsICAgMCwgICAwLCAgIDEgKQogCi0jZGVmaW5lIE1QUDE2X0dQSU8JCU1QUCggMTYsIDB4MCwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDE2X1NEX0QyCQlNUFAoIDE2LCAweDEsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAxNl9VQVJUMF9DVFMJCU1QUCggMTYsIDB4MiwgMSwgMCwgMSwgICAxLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDE2X1VBUlQxX1JYRAkJTVBQKCAxNiwgMHgzLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMTZfU0FUQTFfQUNUbglNUFAoIDE2LCAweDQsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAxNl9NSUkwX0NSUwkJTVBQKCAxNiwgMHhkLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTZfR1BJTwkJTVBQKCAxNiwgMHgwLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAxNl9TRF9EMgkJTVBQKCAxNiwgMHgxLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAxNl9VQVJUMF9DVFMJCU1QUCggMTYsIDB4MiwgMSwgMCwgMSwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMTZfVUFSVDFfUlhECQlNUFAoIDE2LCAweDMsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDE2X1NBVEExX0FDVG4JTVBQKCAxNiwgMHg0LCAwLCAxLCAwLCAgIDAsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAxNl9MQ0RfRVhUX1JFRl9DTEsJTVBQKCAxNiwgMHhiLCAxLCAwLCAwLCAgIDAsICAgMCwgICAwLCAgIDEgKQorI2RlZmluZSBNUFAxNl9NSUkwX0NSUwkJTVBQKCAxNiwgMHhkLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxLCAgIDEgKQogCi0jZGVmaW5lIE1QUDE3X0dQSU8JCU1QUCggMTcsIDB4MCwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDE3X1NEX0QzCQlNUFAoIDE3LCAweDEsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAxN19TQVRBMF9QUkVTRU5UbglNUFAoIDE3LCAweDQsIDAsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxN19HUElPCQlNUFAoIDE3LCAweDAsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDE3X1NEX0QzCQlNUFAoIDE3LCAweDEsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDE3X1NBVEEwX1BSRVNFTlRuCU1QUCggMTcsIDB4NCwgMCwgMSwgMCwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMTdfU0FUQTFfQUNUbglNUFAoIDE3LCAweGEsIDAsIDEsIDAsICAgMCwgICAwLCAgIDAsICAgMSApCisjZGVmaW5lIE1QUDE3X1RXMV9TQ0sJCU1QUCggMTcsIDB4ZCwgMSwgMSwgMCwgICAwLCAgIDAsICAgMCwgICAxICkKIAotI2RlZmluZSBNUFAxOF9HUE8JCU1QUCggMTgsIDB4MCwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDE4X05GX0lPMAkJTVBQKCAxOCwgMHgxLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMThfR1BPCQlNUFAoIDE4LCAweDAsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDE4X05GX0lPMAkJTVBQKCAxOCwgMHgxLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAxOF9QRVgwX0NMS1JFUQlNUFAoIDE4LCAweDIsIDAsIDEsIDAsICAgMCwgICAwLCAgIDAsICAgMSApCiAKLSNkZWZpbmUgTVBQMTlfR1BPCQlNUFAoIDE5LCAweDAsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAxOV9ORl9JTzEJCU1QUCggMTksIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDE5X0dQTwkJTVBQKCAxOSwgMHgwLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAxOV9ORl9JTzEJCU1QUCggMTksIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSwgICAxICkKIAotI2RlZmluZSBNUFAyMF9HUElPCQlNUFAoIDIwLCAweDAsIDEsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAyMF9UU01QMAkJTVBQKCAyMCwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMjBfVERNX0NIMF9UWF9RTAlNUFAoIDIwLCAweDIsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAyMF9HRTFfMAkJTVBQKCAyMCwgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMjBfQVVESU9fU1BESUZJCU1QUCggMjAsIDB4NCwgMSwgMCwgMCwgICAwLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDIwX1NBVEExX0FDVG4JTVBQKCAyMCwgMHg1LCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjBfR1BJTwkJTVBQKCAyMCwgMHgwLCAxLCAxLCAwLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAyMF9UU01QMAkJTVBQKCAyMCwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAyMF9URE1fQ0gwX1RYX1FMCU1QUCggMjAsIDB4MiwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMjBfR0UxX1RYRDAJCU1QUCggMjAsIDB4MywgMCwgMCwgMCwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMjBfQVVfU1BESUZJCQlNUFAoIDIwLCAweDQsIDEsIDAsIDAsICAgMCwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDIwX1NBVEExX0FDVG4JTVBQKCAyMCwgMHg1LCAwLCAxLCAwLCAgIDAsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAyMF9MQ0RfRDAJCU1QUCggMjAsIDB4YiwgMCwgMCwgMCwgICAwLCAgIDAsICAgMCwgICAxICkKIAotI2RlZmluZSBNUFAyMV9HUElPCQlNUFAoIDIxLCAweDAsIDEsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAyMV9UU01QMQkJTVBQKCAyMSwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMjFfVERNX0NIMF9SWF9RTAlNUFAoIDIxLCAweDIsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAyMV9HRTFfMQkJTVBQKCAyMSwgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMjFfQVVESU9fU1BESUZPCU1QUCggMjEsIDB4NCwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDIxX1NBVEEwX0FDVG4JTVBQKCAyMSwgMHg1LCAwLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjFfR1BJTwkJTVBQKCAyMSwgMHgwLCAxLCAxLCAwLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAyMV9UU01QMQkJTVBQKCAyMSwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAyMV9URE1fQ0gwX1JYX1FMCU1QUCggMjEsIDB4MiwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMjFfR0UxX1RYRDEJCU1QUCggMjEsIDB4MywgMCwgMCwgMCwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMjFfQVVfU1BESUZPCQlNUFAoIDIxLCAweDQsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDIxX1NBVEEwX0FDVG4JTVBQKCAyMSwgMHg1LCAwLCAxLCAwLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAyMV9MQ0RfRDEJCU1QUCggMjEsIDB4YiwgMCwgMCwgMCwgICAwLCAgIDAsICAgMCwgICAxICkKIAotI2RlZmluZSBNUFAyMl9HUElPCQlNUFAoIDIyLCAweDAsIDEsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAyMl9UU01QMgkJTVBQKCAyMiwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMjJfVERNX0NIMl9UWF9RTAlNUFAoIDIyLCAweDIsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAyMl9HRTFfMgkJTVBQKCAyMiwgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMjJfQVVESU9fU1BESUZSTUtDTEsJTVBQKCAyMiwgMHg0LCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMjJfU0FUQTFfUFJFU0VOVG4JTVBQKCAyMiwgMHg1LCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjJfR1BJTwkJTVBQKCAyMiwgMHgwLCAxLCAxLCAwLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAyMl9UU01QMgkJTVBQKCAyMiwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAyMl9URE1fQ0gyX1RYX1FMCU1QUCggMjIsIDB4MiwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMjJfR0UxX1RYRDIJCU1QUCggMjIsIDB4MywgMCwgMCwgMCwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMjJfQVVfU1BESUZSTUtDTEsJTVBQKCAyMiwgMHg0LCAwLCAxLCAwLCAgIDAsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAyMl9TQVRBMV9QUkVTRU5UbglNUFAoIDIyLCAweDUsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDIyX0xDRF9EMgkJTVBQKCAyMiwgMHhiLCAwLCAwLCAwLCAgIDAsICAgMCwgICAwLCAgIDEgKQogCi0jZGVmaW5lIE1QUDIzX0dQSU8JCU1QUCggMjMsIDB4MCwgMSwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDIzX1RTTVAzCQlNUFAoIDIzLCAweDEsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAyM19URE1fQ0gyX1JYX1FMCU1QUCggMjMsIDB4MiwgMSwgMCwgMCwgICAwLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDIzX0dFMV8zCQlNUFAoIDIzLCAweDMsIDAsIDAsIDAsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAyM19BVURJT19JMlNCQ0xLCU1QUCggMjMsIDB4NCwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDIzX1NBVEEwX1BSRVNFTlRuCU1QUCggMjMsIDB4NSwgMCwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDIzX0dQSU8JCU1QUCggMjMsIDB4MCwgMSwgMSwgMCwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMjNfVFNNUDMJCU1QUCggMjMsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMjNfVERNX0NIMl9SWF9RTAlNUFAoIDIzLCAweDIsIDEsIDAsIDAsICAgMCwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDIzX0dFMV9UWEQzCQlNUFAoIDIzLCAweDMsIDAsIDAsIDAsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDIzX0FVX0kyU0JDTEsJTVBQKCAyMywgMHg0LCAwLCAxLCAwLCAgIDAsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAyM19TQVRBMF9QUkVTRU5UbglNUFAoIDIzLCAweDUsIDAsIDEsIDAsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDIzX0xDRF9EMwkJTVBQKCAyMywgMHhiLCAwLCAwLCAwLCAgIDAsICAgMCwgICAwLCAgIDEgKQogCi0jZGVmaW5lIE1QUDI0X0dQSU8JCU1QUCggMjQsIDB4MCwgMSwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDI0X1RTTVA0CQlNUFAoIDI0LCAweDEsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAyNF9URE1fU1BJX0NTMAlERVYoIDI0LCAweDIsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAyNF9HRTFfNAkJTVBQKCAyNCwgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMjRfQVVESU9fSTJTRE8JTVBQKCAyNCwgMHg0LCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjRfR1BJTwkJTVBQKCAyNCwgMHgwLCAxLCAxLCAwLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAyNF9UU01QNAkJTVBQKCAyNCwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAyNF9URE1fU1BJX0NTMAlNUFAoIDI0LCAweDIsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDI0X0dFMV9SWEQwCQlNUFAoIDI0LCAweDMsIDAsIDAsIDAsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDI0X0FVX0kyU0RPCQlNUFAoIDI0LCAweDQsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDI0X0xDRF9ENAkJTVBQKCAyNCwgMHhiLCAwLCAwLCAwLCAgIDAsICAgMCwgICAwLCAgIDEgKQogCi0jZGVmaW5lIE1QUDI1X0dQSU8JCU1QUCggMjUsIDB4MCwgMSwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDI1X1RTTVA1CQlNUFAoIDI1LCAweDEsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAyNV9URE1fU1BJX1NDSwlNUFAoIDI1LCAweDIsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAyNV9HRTFfNQkJTVBQKCAyNSwgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMjVfQVVESU9fSTJTTFJDTEsJTVBQKCAyNSwgMHg0LCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjVfR1BJTwkJTVBQKCAyNSwgMHgwLCAxLCAxLCAwLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAyNV9UU01QNQkJTVBQKCAyNSwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAyNV9URE1fU1BJX1NDSwlNUFAoIDI1LCAweDIsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDI1X0dFMV9SWEQxCQlNUFAoIDI1LCAweDMsIDAsIDAsIDAsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDI1X0FVX0kyU0xSQ0xLCU1QUCggMjUsIDB4NCwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMjVfTENEX0Q1CQlNUFAoIDI1LCAweGIsIDAsIDAsIDAsICAgMCwgICAwLCAgIDAsICAgMSApCiAKLSNkZWZpbmUgTVBQMjZfR1BJTwkJTVBQKCAyNiwgMHgwLCAxLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMjZfVFNNUDYJCU1QUCggMjYsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDI2X1RETV9TUElfTUlTTwlNUFAoIDI2LCAweDIsIDEsIDAsIDAsICAgMCwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAyNl9HRTFfNgkJTVBQKCAyNiwgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMjZfQVVESU9fSTJTTUNMSwlNUFAoIDI2LCAweDQsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyNl9HUElPCQlNUFAoIDI2LCAweDAsIDEsIDEsIDAsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDI2X1RTTVA2CQlNUFAoIDI2LCAweDEsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDI2X1RETV9TUElfTUlTTwlNUFAoIDI2LCAweDIsIDEsIDAsIDAsICAgMCwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDI2X0dFMV9SWEQyCQlNUFAoIDI2LCAweDMsIDAsIDAsIDAsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDI2X0FVX0kyU01DTEsJTVBQKCAyNiwgMHg0LCAwLCAxLCAwLCAgIDAsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAyNl9MQ0RfRDYJCU1QUCggMjYsIDB4YiwgMCwgMCwgMCwgICAwLCAgIDAsICAgMCwgICAxICkKIAotI2RlZmluZSBNUFAyN19HUElPCQlNUFAoIDI3LCAweDAsIDEsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAyN19UU01QNwkJTVBQKCAyNywgMHgxLCAxLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMjdfVERNX1NQSV9NT1NJCU1QUCggMjcsIDB4MiwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDI3X0dFMV83CQlNUFAoIDI3LCAweDMsIDAsIDAsIDAsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAyN19BVURJT19JMlNESQlNUFAoIDI3LCAweDQsIDEsIDAsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyN19HUElPCQlNUFAoIDI3LCAweDAsIDEsIDEsIDAsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDI3X1RTTVA3CQlNUFAoIDI3LCAweDEsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDI3X1RETV9TUElfTU9TSQlNUFAoIDI3LCAweDIsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDI3X0dFMV9SWEQzCQlNUFAoIDI3LCAweDMsIDAsIDAsIDAsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDI3X0FVX0kyU0RJCQlNUFAoIDI3LCAweDQsIDEsIDAsIDAsICAgMCwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDI3X0xDRF9ENwkJTVBQKCAyNywgMHhiLCAwLCAwLCAwLCAgIDAsICAgMCwgICAwLCAgIDEgKQogCi0jZGVmaW5lIE1QUDI4X0dQSU8JCU1QUCggMjgsIDB4MCwgMSwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDI4X1RTTVA4CQlNUFAoIDI4LCAweDEsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAyOF9URE1fQ09ERUNfSU5UbglNUFAoIDI4LCAweDIsIDAsIDAsIDAsICAgMCwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAyOF9HRTFfOAkJTVBQKCAyOCwgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMjhfQVVESU9fRVhUQ0xLCU1QUCggMjgsIDB4NCwgMSwgMCwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDI4X0dQSU8JCU1QUCggMjgsIDB4MCwgMSwgMSwgMCwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMjhfVFNNUDgJCU1QUCggMjgsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMjhfVERNX0NPREVDX0lOVG4JTVBQKCAyOCwgMHgyLCAwLCAwLCAwLCAgIDAsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAyOF9HRTFfQ09MCQlNUFAoIDI4LCAweDMsIDAsIDAsIDAsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDI4X0FVX0VYVENMSwkJTVBQKCAyOCwgMHg0LCAxLCAwLCAwLCAgIDAsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAyOF9MQ0RfRDgJCU1QUCggMjgsIDB4YiwgMCwgMCwgMCwgICAwLCAgIDAsICAgMCwgICAxICkKIAotI2RlZmluZSBNUFAyOV9HUElPCQlNUFAoIDI5LCAweDAsIDEsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAyOV9UU01QOQkJTVBQKCAyOSwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMjlfVERNX0NPREVDX1JTVG4JTVBQKCAyOSwgMHgyLCAwLCAwLCAwLCAgIDAsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMjlfR0UxXzkJCU1QUCggMjksIDB4MywgMCwgMCwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDI5X0dQSU8JCU1QUCggMjksIDB4MCwgMSwgMSwgMCwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMjlfVFNNUDkJCU1QUCggMjksIDB4MSwgMSwgMSwgMCwgICAwLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMjlfVERNX0NPREVDX1JTVG4JTVBQKCAyOSwgMHgyLCAwLCAwLCAwLCAgIDAsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAyOV9HRTFfVENMSwkJTVBQKCAyOSwgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAyOV9MQ0RfRDkJCU1QUCggMjksIDB4YiwgMCwgMCwgMCwgICAwLCAgIDAsICAgMCwgICAxICkKIAotI2RlZmluZSBNUFAzMF9HUElPCQlNUFAoIDMwLCAweDAsIDEsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAzMF9UU01QMTAJCU1QUCggMzAsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDMwX1RETV9QQ0xLCQlNUFAoIDMwLCAweDIsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAzMF9HRTFfMTAJCU1QUCggMzAsIDB4MywgMCwgMCwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDMwX0dQSU8JCU1QUCggMzAsIDB4MCwgMSwgMSwgMCwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMzBfVFNNUDEwCQlNUFAoIDMwLCAweDEsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDMwX1RETV9QQ0xLCQlNUFAoIDMwLCAweDIsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDMwX0dFMV9SWENUTAkJTVBQKCAzMCwgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAzMF9MQ0RfRDEwCQlNUFAoIDMwLCAweGIsIDAsIDAsIDAsICAgMCwgICAwLCAgIDAsICAgMSApCiAKLSNkZWZpbmUgTVBQMzFfR1BJTwkJTVBQKCAzMSwgMHgwLCAxLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMzFfVFNNUDExCQlNUFAoIDMxLCAweDEsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAzMV9URE1fRlMJCU1QUCggMzEsIDB4MiwgMSwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDMxX0dFMV8xMQkJTVBQKCAzMSwgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMzFfR1BJTwkJTVBQKCAzMSwgMHgwLCAxLCAxLCAwLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAzMV9UU01QMTEJCU1QUCggMzEsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMzFfVERNX0ZTCQlNUFAoIDMxLCAweDIsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDMxX0dFMV9SWENMSwkJTVBQKCAzMSwgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAzMV9MQ0RfRDExCQlNUFAoIDMxLCAweGIsIDAsIDAsIDAsICAgMCwgICAwLCAgIDAsICAgMSApCiAKLSNkZWZpbmUgTVBQMzJfR1BJTwkJTVBQKCAzMiwgMHgwLCAxLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMzJfVFNNUDEyCQlNUFAoIDMyLCAweDEsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAzMl9URE1fRFJYCQlNUFAoIDMyLCAweDIsIDEsIDAsIDAsICAgMCwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAzMl9HRTFfMTIJCU1QUCggMzIsIDB4MywgMCwgMCwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDMyX0dQSU8JCU1QUCggMzIsIDB4MCwgMSwgMSwgMCwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMzJfVFNNUDEyCQlNUFAoIDMyLCAweDEsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDMyX1RETV9EUlgJCU1QUCggMzIsIDB4MiwgMSwgMCwgMCwgICAwLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMzJfR0UxX1RDTEtPVVQJTVBQKCAzMiwgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAzMl9MQ0RfRDEyCQlNUFAoIDMyLCAweGIsIDAsIDAsIDAsICAgMCwgICAwLCAgIDAsICAgMSApCiAKLSNkZWZpbmUgTVBQMzNfR1BJTwkJTVBQKCAzMywgMHgwLCAxLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMzNfVERNX0RUWAkJTVBQKCAzMywgMHgyLCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMzNfR0UxXzEzCQlNUFAoIDMzLCAweDMsIDAsIDAsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAzM19HUE8JCU1QUCggMzMsIDB4MCwgMCwgMSwgMCwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMzNfVERNX0RUWAkJTVBQKCAzMywgMHgyLCAwLCAxLCAwLCAgIDAsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAzM19HRTFfVFhDVEwJCU1QUCggMzMsIDB4MywgMCwgMCwgMCwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMzNfTENEX0QxMwkJTVBQKCAzMywgMHhiLCAwLCAwLCAwLCAgIDAsICAgMCwgICAwLCAgIDEgKQogCi0jZGVmaW5lIE1QUDM0X0dQSU8JCU1QUCggMzQsIDB4MCwgMSwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDM0X1RETV9TUElfQ1MxCU1QUCggMzQsIDB4MiwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDM0X0dFMV8xNAkJTVBQKCAzNCwgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMzRfR1BJTwkJTVBQKCAzNCwgMHgwLCAxLCAxLCAwLCAgIDEsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAzNF9URE1fU1BJX0NTMQlNUFAoIDM0LCAweDIsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDM0X0dFMV9UWEVOCQlNUFAoIDM0LCAweDMsIDAsIDAsIDAsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDM0X1NBVEExX0FDVG4JTVBQKCAzNCwgMHg1LCAwLCAxLCAwLCAgIDAsICAgMCwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAzNF9MQ0RfRDE0CQlNUFAoIDM0LCAweGIsIDAsIDAsIDAsICAgMCwgICAwLCAgIDAsICAgMSApCiAKLSNkZWZpbmUgTVBQMzVfR1BJTwkJTVBQKCAzNSwgMHgwLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMzVfVERNX0NIMF9UWF9RTAlNUFAoIDM1LCAweDIsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQotI2RlZmluZSBNUFAzNV9HRTFfMTUJCU1QUCggMzUsIDB4MywgMCwgMCwgMCwgICAxLCAgIDEsICAgMSAgICApCi0jZGVmaW5lIE1QUDM1X1NBVEEwX0FDVG4JTVBQKCAzNSwgMHg1LCAwLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKLSNkZWZpbmUgTVBQMzVfTUlJMF9SWEVSUglNUFAoIDM1LCAweGMsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAzNV9HUElPCQlNUFAoIDM1LCAweDAsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDM1X1RETV9DSDBfVFhfUUwJTVBQKCAzNSwgMHgyLCAwLCAxLCAwLCAgIDAsICAgMSwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAzNV9HRTFfUlhFUlIJCU1QUCggMzUsIDB4MywgMCwgMCwgMCwgICAxLCAgIDEsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMzVfU0FUQTBfQUNUbglNUFAoIDM1LCAweDUsIDAsIDEsIDAsICAgMSwgICAxLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDM1X0xDRF9EMTUJCU1QUCggMjIsIDB4YiwgMCwgMCwgMCwgICAwLCAgIDAsICAgMCwgICAxICkKKyNkZWZpbmUgTVBQMzVfTUlJMF9SWEVSUglNUFAoIDM1LCAweGMsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEsICAgMSApCiAKLSNkZWZpbmUgTVBQMzZfR1BJTwkJTVBQKCAzNiwgMHgwLCAxLCAxLCAxLCAgIDAsICAgMCwgICAxICAgICkKLSNkZWZpbmUgTVBQMzZfVFNNUDAJCU1QUCggMzYsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCi0jZGVmaW5lIE1QUDM2X1RETV9TUElfQ1MxCU1QUCggMzYsIDB4MiwgMCwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCi0jZGVmaW5lIE1QUDM2X0FVRElPX1NQRElGSQlNUFAoIDM2LCAweDQsIDEsIDAsIDEsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFAzNl9HUElPCQlNUFAoIDM2LCAweDAsIDEsIDEsIDEsICAgMCwgICAwLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDM2X1RTTVAwCQlNUFAoIDM2LCAweDEsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDM2X1RETV9TUElfQ1MxCU1QUCggMzYsIDB4MiwgMCwgMSwgMCwgICAwLCAgIDAsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMzZfQVVfU1BESUZJCQlNUFAoIDM2LCAweDQsIDEsIDAsIDEsICAgMCwgICAwLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDM2X1RXMV9TREEJCU1QUCggMzYsIDB4YiwgMSwgMSwgMCwgICAwLCAgIDAsICAgMCwgICAxICkKIAotI2RlZmluZSBNUFAzN19HUElPCQlNUFAoIDM3LCAweDAsIDEsIDEsIDEsICAgMCwgICAwLCAgIDEgICAgKQotI2RlZmluZSBNUFAzN19UU01QMQkJTVBQKCAzNywgMHgxLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKLSNkZWZpbmUgTVBQMzdfVERNX0NIMl9UWF9RTAlNUFAoIDM3LCAweDIsIDAsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQotI2RlZmluZSBNUFAzN19BVURJT19TUERJRk8JTVBQKCAzNywgMHg0LCAwLCAxLCAxLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQMzdfR1BJTwkJTVBQKCAzNywgMHgwLCAxLCAxLCAxLCAgIDAsICAgMCwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAzN19UU01QMQkJTVBQKCAzNywgMHgxLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAzN19URE1fQ0gyX1RYX1FMCU1QUCggMzcsIDB4MiwgMCwgMSwgMCwgICAwLCAgIDAsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMzdfQVVfU1BESUZPCQlNUFAoIDM3LCAweDQsIDAsIDEsIDEsICAgMCwgICAwLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDM3X1RXMV9TQ0sJCU1QUCggMzcsIDB4YiwgMSwgMSwgMCwgICAwLCAgIDAsICAgMCwgICAxICkKIAotI2RlZmluZSBNUFAzOF9HUElPCQlNUFAoIDM4LCAweDAsIDEsIDEsIDEsICAgMCwgICAwLCAgIDEgICAgKQotI2RlZmluZSBNUFAzOF9UU01QMgkJTVBQKCAzOCwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKLSNkZWZpbmUgTVBQMzhfVERNX0NIMl9SWF9RTAlNUFAoIDM4LCAweDIsIDAsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQotI2RlZmluZSBNUFAzOF9BVURJT19TUERJRlJNTENMSwlNUFAoIDM4LCAweDQsIDAsIDEsIDEsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFAzOF9HUElPCQlNUFAoIDM4LCAweDAsIDEsIDEsIDEsICAgMCwgICAwLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDM4X1RTTVAyCQlNUFAoIDM4LCAweDEsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDM4X1RETV9DSDJfUlhfUUwJTVBQKCAzOCwgMHgyLCAwLCAxLCAwLCAgIDAsICAgMCwgICAxLCAgIDEgKQorI2RlZmluZSBNUFAzOF9BVV9TUERJRlJNTENMSwlNUFAoIDM4LCAweDQsIDAsIDEsIDEsICAgMCwgICAwLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDM4X0xDRF9EMTgJCU1QUCggMzgsIDB4YiwgMCwgMCwgMCwgICAwLCAgIDAsICAgMCwgICAxICkKIAotI2RlZmluZSBNUFAzOV9HUElPCQlNUFAoIDM5LCAweDAsIDEsIDEsIDEsICAgMCwgICAwLCAgIDEgICAgKQotI2RlZmluZSBNUFAzOV9UU01QMwkJTVBQKCAzOSwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKLSNkZWZpbmUgTVBQMzlfVERNX1NQSV9DUzAJTVBQKCAzOSwgMHgyLCAwLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKLSNkZWZpbmUgTVBQMzlfQVVESU9fSTJTQkNMSwlNUFAoIDM5LCAweDQsIDAsIDEsIDEsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFAzOV9HUElPCQlNUFAoIDM5LCAweDAsIDEsIDEsIDEsICAgMCwgICAwLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDM5X1RTTVAzCQlNUFAoIDM5LCAweDEsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDM5X1RETV9TUElfQ1MwCU1QUCggMzksIDB4MiwgMCwgMSwgMCwgICAwLCAgIDAsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMzlfQVVfSTJTQkNMSwlNUFAoIDM5LCAweDQsIDAsIDEsIDEsICAgMCwgICAwLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDM5X0xDRF9EMTkJCU1QUCggMzksIDB4YiwgMCwgMCwgMCwgICAwLCAgIDAsICAgMCwgICAxICkKIAotI2RlZmluZSBNUFA0MF9HUElPCQlNUFAoIDQwLCAweDAsIDEsIDEsIDEsICAgMCwgICAwLCAgIDEgICAgKQotI2RlZmluZSBNUFA0MF9UU01QNAkJTVBQKCA0MCwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKLSNkZWZpbmUgTVBQNDBfVERNX1NQSV9TQ0sJTVBQKCA0MCwgMHgyLCAwLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKLSNkZWZpbmUgTVBQNDBfQVVESU9fSTJTRE8JTVBQKCA0MCwgMHg0LCAwLCAxLCAxLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDBfR1BJTwkJTVBQKCA0MCwgMHgwLCAxLCAxLCAxLCAgIDAsICAgMCwgICAxLCAgIDEgKQorI2RlZmluZSBNUFA0MF9UU01QNAkJTVBQKCA0MCwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxLCAgIDEgKQorI2RlZmluZSBNUFA0MF9URE1fU1BJX1NDSwlNUFAoIDQwLCAweDIsIDAsIDEsIDAsICAgMCwgICAwLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDQwX0FVX0kyU0RPCQlNUFAoIDQwLCAweDQsIDAsIDEsIDEsICAgMCwgICAwLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDQwX0xDRF9EMjAJCU1QUCggNDAsIDB4YiwgMCwgMCwgMCwgICAwLCAgIDAsICAgMCwgICAxICkKIAotI2RlZmluZSBNUFA0MV9HUElPCQlNUFAoIDQxLCAweDAsIDEsIDEsIDEsICAgMCwgICAwLCAgIDEgICAgKQotI2RlZmluZSBNUFA0MV9UU01QNQkJTVBQKCA0MSwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKLSNkZWZpbmUgTVBQNDFfVERNX1NQSV9NSVNPCU1QUCggNDEsIDB4MiwgMSwgMCwgMCwgICAwLCAgIDAsICAgMSAgICApCi0jZGVmaW5lIE1QUDQxX0FVRElPX0kyU0xSQwlNUFAoIDQxLCAweDQsIDAsIDEsIDEsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0MV9HUElPCQlNUFAoIDQxLCAweDAsIDEsIDEsIDEsICAgMCwgICAwLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDQxX1RTTVA1CQlNUFAoIDQxLCAweDEsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDQxX1RETV9TUElfTUlTTwlNUFAoIDQxLCAweDIsIDEsIDAsIDAsICAgMCwgICAwLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDQxX0FVX0kyU0xSQ0xLCU1QUCggNDEsIDB4NCwgMCwgMSwgMSwgICAwLCAgIDAsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQNDFfTENEX0QyMQkJTVBQKCA0MSwgMHhiLCAwLCAwLCAwLCAgIDAsICAgMCwgICAwLCAgIDEgKQogCi0jZGVmaW5lIE1QUDQyX0dQSU8JCU1QUCggNDIsIDB4MCwgMSwgMSwgMSwgICAwLCAgIDAsICAgMSAgICApCi0jZGVmaW5lIE1QUDQyX1RTTVA2CQlNUFAoIDQyLCAweDEsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQotI2RlZmluZSBNUFA0Ml9URE1fU1BJX01PU0kJTVBQKCA0MiwgMHgyLCAwLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKLSNkZWZpbmUgTVBQNDJfQVVESU9fSTJTTUNMSwlNUFAoIDQyLCAweDQsIDAsIDEsIDEsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0Ml9HUElPCQlNUFAoIDQyLCAweDAsIDEsIDEsIDEsICAgMCwgICAwLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDQyX1RTTVA2CQlNUFAoIDQyLCAweDEsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDQyX1RETV9TUElfTU9TSQlNUFAoIDQyLCAweDIsIDAsIDEsIDAsICAgMCwgICAwLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDQyX0FVX0kyU01DTEsJTVBQKCA0MiwgMHg0LCAwLCAxLCAxLCAgIDAsICAgMCwgICAxLCAgIDEgKQorI2RlZmluZSBNUFA0Ml9MQ0RfRDIyCQlNUFAoIDQyLCAweGIsIDAsIDAsIDAsICAgMCwgICAwLCAgIDAsICAgMSApCiAKLSNkZWZpbmUgTVBQNDNfR1BJTwkJTVBQKCA0MywgMHgwLCAxLCAxLCAxLCAgIDAsICAgMCwgICAxICAgICkKLSNkZWZpbmUgTVBQNDNfVFNNUDcJCU1QUCggNDMsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCi0jZGVmaW5lIE1QUDQzX1RETV9DT0RFQ19JTlRuCU1QUCggNDMsIDB4MiwgMCwgMCwgMCwgICAwLCAgIDAsICAgMSAgICApCi0jZGVmaW5lIE1QUDQzX0FVRElPX0kyU0RJCU1QUCggNDMsIDB4NCwgMSwgMCwgMSwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQzX0dQSU8JCU1QUCggNDMsIDB4MCwgMSwgMSwgMSwgICAwLCAgIDAsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQNDNfVFNNUDcJCU1QUCggNDMsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQNDNfVERNX0NPREVDX0lOVG4JTVBQKCA0MywgMHgyLCAwLCAwLCAwLCAgIDAsICAgMCwgICAxLCAgIDEgKQorI2RlZmluZSBNUFA0M19BVV9JMlNESQkJTVBQKCA0MywgMHg0LCAxLCAwLCAxLCAgIDAsICAgMCwgICAxLCAgIDEgKQorI2RlZmluZSBNUFA0M19MQ0RfRDIzCQlNUFAoIDIyLCAweGIsIDAsIDAsIDAsICAgMCwgICAwLCAgIDAsICAgMSApCiAKLSNkZWZpbmUgTVBQNDRfR1BJTwkJTVBQKCA0NCwgMHgwLCAxLCAxLCAxLCAgIDAsICAgMCwgICAxICAgICkKLSNkZWZpbmUgTVBQNDRfVFNNUDgJCU1QUCggNDQsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCi0jZGVmaW5lIE1QUDQ0X1RETV9DT0RFQ19SU1RuCU1QUCggNDQsIDB4MiwgMCwgMCwgMCwgICAwLCAgIDAsICAgMSAgICApCi0jZGVmaW5lIE1QUDQ0X0FVRElPX0VYVENMSwlNUFAoIDQ0LCAweDQsIDEsIDAsIDEsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0NF9HUElPCQlNUFAoIDQ0LCAweDAsIDEsIDEsIDEsICAgMCwgICAwLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDQ0X1RTTVA4CQlNUFAoIDQ0LCAweDEsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDQ0X1RETV9DT0RFQ19SU1RuCU1QUCggNDQsIDB4MiwgMCwgMCwgMCwgICAwLCAgIDAsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQNDRfQVVfRVhUQ0xLCQlNUFAoIDQ0LCAweDQsIDEsIDAsIDEsICAgMCwgICAwLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDQ0X0xDRF9DTEsJCU1QUCggNDQsIDB4YiwgMCwgMCwgMCwgICAwLCAgIDAsICAgMCwgICAxICkKIAotI2RlZmluZSBNUFA0NV9HUElPCQlNUFAoIDQ1LCAweDAsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQotI2RlZmluZSBNUFA0NV9UU01QOQkJTVBQKCA0NSwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKLSNkZWZpbmUgTVBQNDVfVERNX1BDTEsJCU1QUCggNDUsIDB4MiwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQ1X0dQSU8JCU1QUCggNDUsIDB4MCwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQNDVfVFNNUDkJCU1QUCggNDUsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQNDVfVERNX1BDTEsJCU1QUCggNDUsIDB4MiwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQMjQ1X0xDRF9FCQlNUFAoIDQ1LCAweGIsIDAsIDAsIDAsICAgMCwgICAwLCAgIDAsICAgMSApCiAKLSNkZWZpbmUgTVBQNDZfR1BJTwkJTVBQKCA0NiwgMHgwLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKLSNkZWZpbmUgTVBQNDZfVFNNUDEwCQlNUFAoIDQ2LCAweDEsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQotI2RlZmluZSBNUFA0Nl9URE1fRlMJCU1QUCggNDYsIDB4MiwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQ2X0dQSU8JCU1QUCggNDYsIDB4MCwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQNDZfVFNNUDEwCQlNUFAoIDQ2LCAweDEsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDQ2X1RETV9GUwkJTVBQKCA0NiwgMHgyLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxLCAgIDEgKQorI2RlZmluZSBNUFA0Nl9MQ0RfSFNZTkMJCU1QUCggNDYsIDB4YiwgMCwgMCwgMCwgICAwLCAgIDAsICAgMCwgICAxICkKIAotI2RlZmluZSBNUFA0N19HUElPCQlNUFAoIDQ3LCAweDAsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQotI2RlZmluZSBNUFA0N19UU01QMTEJCU1QUCggNDcsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCi0jZGVmaW5lIE1QUDQ3X1RETV9EUlgJCU1QUCggNDcsIDB4MiwgMSwgMCwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQ3X0dQSU8JCU1QUCggNDcsIDB4MCwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQNDdfVFNNUDExCQlNUFAoIDQ3LCAweDEsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDQ3X1RETV9EUlgJCU1QUCggNDcsIDB4MiwgMSwgMCwgMCwgICAwLCAgIDAsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQNDdfTENEX1ZTWU5DCQlNUFAoIDQ3LCAweGIsIDAsIDAsIDAsICAgMCwgICAwLCAgIDAsICAgMSApCiAKLSNkZWZpbmUgTVBQNDhfR1BJTwkJTVBQKCA0OCwgMHgwLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKLSNkZWZpbmUgTVBQNDhfVFNNUDEyCQlNUFAoIDQ4LCAweDEsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQotI2RlZmluZSBNUFA0OF9URE1fRFRYCQlNUFAoIDQ4LCAweDIsIDAsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0OF9HUElPCQlNUFAoIDQ4LCAweDAsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDQ4X1RTTVAxMgkJTVBQKCA0OCwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxLCAgIDEgKQorI2RlZmluZSBNUFA0OF9URE1fRFRYCQlNUFAoIDQ4LCAweDIsIDAsIDEsIDAsICAgMCwgICAwLCAgIDEsICAgMSApCisjZGVmaW5lIE1QUDQ4X0xDRF9EMTYJCU1QUCggMjIsIDB4YiwgMCwgMCwgMCwgICAwLCAgIDAsICAgMCwgICAxICkKIAotI2RlZmluZSBNUFA0OV9HUElPCQlNUFAoIDQ5LCAweDAsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQotI2RlZmluZSBNUFA0OV9UU01QOQkJTVBQKCA0OSwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKLSNkZWZpbmUgTVBQNDlfVERNX0NIMF9SWF9RTAlNUFAoIDQ5LCAweDIsIDAsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQotI2RlZmluZSBNUFA0OV9QVFBfQ0xLCQlNUFAoIDQ5LCAweDUsIDEsIDAsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0OV9HUElPCQlNUFAoIDQ5LCAweDAsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEsICAgMCApCisjZGVmaW5lIE1QUDQ5X0dQTwkJTVBQKCA0OSwgMHgwLCAwLCAxLCAwLCAgIDAsICAgMCwgICAwLCAgIDEgKQorI2RlZmluZSBNUFA0OV9UU01QOQkJTVBQKCA0OSwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxLCAgIDAgKQorI2RlZmluZSBNUFA0OV9URE1fQ0gwX1JYX1FMCU1QUCggNDksIDB4MiwgMCwgMSwgMCwgICAwLCAgIDAsICAgMSwgICAxICkKKyNkZWZpbmUgTVBQNDlfUFRQX0NMSwkJTVBQKCA0OSwgMHg1LCAxLCAwLCAwLCAgIDAsICAgMCwgICAxLCAgIDAgKQorI2RlZmluZSBNUFA0OV9QRVgwX0NMS1JFUQlNUFAoIDQ5LCAweGEsIDAsIDEsIDAsICAgMCwgICAwLCAgIDAsICAgMSApCisjZGVmaW5lIE1QUDQ5X0xDRF9EMTcJCU1QUCggNDksIDB4YiwgMCwgMCwgMCwgICAwLCAgIDAsICAgMCwgICAxICkKIAogI2RlZmluZSBNUFBfTUFYCQkJNDkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9tdjg4ZjYyODFndHdfZ2Utc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvbXY4OGY2MjgxZ3R3X2dlLXNldHVwLmMKaW5kZXggNWU2ZjcxMS4uYzZiOTJiNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9tdjg4ZjYyODFndHdfZ2Utc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL212ODhmNjI4MWd0d19nZS1zZXR1cC5jCkBAIC0xNTUsNyArMTU1LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IG12ODhmNjI4MWd0d19nZV9wY2lfaW5pdCh2b2lkKQogewogCWlmIChtYWNoaW5lX2lzX212ODhmNjI4MWd0d19nZSgpKQotCQlraXJrd29vZF9wY2llX2luaXQoKTsKKwkJa2lya3dvb2RfcGNpZV9pbml0KEtXX1BDSUUwKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9uZXRzcGFjZV92Mi1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9uZXRzcGFjZV92Mi1zZXR1cC5jCmluZGV4IDNhZTE1OGQuLmQyNmJmMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvbmV0c3BhY2VfdjItc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL25ldHNwYWNlX3YyLXNldHVwLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogI2luY2x1ZGUgPG1hY2gva2lya3dvb2QuaD4KKyNpbmNsdWRlIDxtYWNoL2xlZHMtbnMyLmg+CiAjaW5jbHVkZSA8cGxhdC90aW1lLmg+CiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAibXBwLmgiCkBAIC0xMjYsNiArMTI3LDE4IEBACiAJfQogCWlmIChlcnIpCiAJCXByX2VycigibmV0c3BhY2VfdjI6IGZhaWxlZCB0byBzZXR1cCBTQVRBMCBwb3dlclxuIik7CisKKwlpZiAobWFjaGluZV9pc19uZXRzcGFjZV9tYXhfdjIoKSkgeworCQllcnIgPSBncGlvX3JlcXVlc3QoTkVUU1BBQ0VfVjJfR1BJT19TQVRBMV9QT1dFUiwgIlNBVEExIHBvd2VyIik7CisJCWlmIChlcnIgPT0gMCkgeworCQkJZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KAorCQkJCQlORVRTUEFDRV9WMl9HUElPX1NBVEExX1BPV0VSLCAxKTsKKwkJCWlmIChlcnIpCisJCQkJZ3Bpb19mcmVlKE5FVFNQQUNFX1YyX0dQSU9fU0FUQTFfUE9XRVIpOworCQl9CisJCWlmIChlcnIpCisJCQlwcl9lcnIoIm5ldHNwYWNlX3YyOiBmYWlsZWQgdG8gc2V0dXAgU0FUQTEgcG93ZXJcbiIpOworCX0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNjAsMzYgKzE3MywxMiBAQAogICogR1BJTyBMRURzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyoKLSAqIFRoZSBibHVlIGZyb250IExFRCBpcyB3aXJlZCB0byBhIENQTEQgYW5kIGNhbiBibGluayBpbiByZWxhdGlvbiB3aXRoIHRoZQotICogU0FUQSBhY3Rpdml0eS4KLSAqCi0gKiBUaGUgZm9sbG93aW5nIGFycmF5IGRldGFpbCB0aGUgZGlmZmVyZW50IExFRCByZWdpc3RlcnMgYW5kIHRoZSBjb21iaW5hdGlvbgotICogb2YgdGhlaXIgcG9zc2libGUgdmFsdWVzOgotICoKLSAqICBjbWRfbGVkICAgfCAgc2xvd19sZWQgIHwgL1NBVEEgYWN0aXZlIHwgTEVEIHN0YXRlCi0gKiAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgICB8Ci0gKiAgICAgMSAgICAgIHwgICAgIDAgICAgICB8ICAgICAgeCAgICAgICB8ICBvZmYKLSAqICAgICAtICAgICAgfCAgICAgMSAgICAgIHwgICAgICB4ICAgICAgIHwgIG9uCi0gKiAgICAgMCAgICAgIHwgICAgIDAgICAgICB8ICAgICAgMSAgICAgICB8ICBvbgotICogICAgIDAgICAgICB8ICAgICAwICAgICAgfCAgICAgIDAgICAgICAgfCAgYmxpbmsgKHJhdGUgMzAwbXMpCi0gKi8KLQogI2RlZmluZSBORVRTUEFDRV9WMl9HUElPX1JFRF9MRUQJMTIKLSNkZWZpbmUgTkVUU1BBQ0VfVjJfR1BJT19CTFVFX0xFRF9TTE9XCTI5Ci0jZGVmaW5lIE5FVFNQQUNFX1YyX0dQSU9fQkxVRV9MRURfQ01ECTMwCi0KIAogc3RhdGljIHN0cnVjdCBncGlvX2xlZCBuZXRzcGFjZV92Ml9ncGlvX2xlZF9waW5zW10gPSB7CiAJewotCQkubmFtZQkJCT0gIm5zX3YyOmJsdWU6c2F0YSIsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiZGVmYXVsdC1vbiIsCi0JCS5ncGlvCQkJPSBORVRTUEFDRV9WMl9HUElPX0JMVUVfTEVEX0NNRCwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQl9LAotCXsKLQkJLm5hbWUJCQk9ICJuc192MjpyZWQ6ZmFpbCIsCi0JCS5ncGlvCQkJPSBORVRTUEFDRV9WMl9HUElPX1JFRF9MRUQsCisJCS5uYW1lCT0gIm5zX3YyOnJlZDpmYWlsIiwKKwkJLmdwaW8JPSBORVRTUEFDRV9WMl9HUElPX1JFRF9MRUQsCiAJfSwKIH07CiAKQEAgLTIwNiwyMiArMTk1LDMzIEBACiAJfSwKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBuZXRzcGFjZV92Ml9ncGlvX2xlZHNfaW5pdCh2b2lkKQotewotCWludCBlcnI7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIER1YWwtR1BJTyBDUExEIExFRHMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0JLyogQ29uZmlndXJlIHJlZ2lzdGVyIHNsb3dfbGVkIHRvIGFsbG93IFNBVEEgYWN0aXZpdHkgTEVEIGJsaW5raW5nICovCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KE5FVFNQQUNFX1YyX0dQSU9fQkxVRV9MRURfU0xPVywgImJsdWUgTEVEIHNsb3ciKTsKLQlpZiAoZXJyID09IDApIHsKLQkJZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE5FVFNQQUNFX1YyX0dQSU9fQkxVRV9MRURfU0xPVywgMCk7Ci0JCWlmIChlcnIpCi0JCQlncGlvX2ZyZWUoTkVUU1BBQ0VfVjJfR1BJT19CTFVFX0xFRF9TTE9XKTsKLQl9Ci0JaWYgKGVycikKLQkJcHJfZXJyKCJuZXRzcGFjZV92MjogZmFpbGVkIHRvIGNvbmZpZ3VyZSBibHVlIExFRCBzbG93IEdQSU9cbiIpOworI2RlZmluZSBORVRTUEFDRV9WMl9HUElPX0JMVUVfTEVEX1NMT1cJMjkKKyNkZWZpbmUgTkVUU1BBQ0VfVjJfR1BJT19CTFVFX0xFRF9DTUQJMzAKIAotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbmV0c3BhY2VfdjJfZ3Bpb19sZWRzKTsKLX0KK3N0YXRpYyBzdHJ1Y3QgbnMyX2xlZCBuZXRzcGFjZV92Ml9sZWRfcGluc1tdID0geworCXsKKwkJLm5hbWUJPSAibnNfdjI6Ymx1ZTpzYXRhIiwKKwkJLmNtZAk9IE5FVFNQQUNFX1YyX0dQSU9fQkxVRV9MRURfQ01ELAorCQkuc2xvdwk9IE5FVFNQQUNFX1YyX0dQSU9fQkxVRV9MRURfU0xPVywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBuczJfbGVkX3BsYXRmb3JtX2RhdGEgbmV0c3BhY2VfdjJfbGVkc19kYXRhID0geworCS5udW1fbGVkcwk9IEFSUkFZX1NJWkUobmV0c3BhY2VfdjJfbGVkX3BpbnMpLAorCS5sZWRzCQk9IG5ldHNwYWNlX3YyX2xlZF9waW5zLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbmV0c3BhY2VfdjJfbGVkcyA9IHsKKwkubmFtZQkJPSAibGVkcy1uczIiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbmV0c3BhY2VfdjJfbGVkc19kYXRhLAorCX0sCit9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRpbWVyCkBAIC0yNDksMTcgKzI0OSwyMSBAQAogCU1QUDRfTkZfSU82LAogCU1QUDVfTkZfSU83LAogCU1QUDZfU1lTUlNUX09VVG4sCi0JTVBQOF9UV19TREEsCi0JTVBQOV9UV19TQ0ssCisJTVBQN19HUE8sCQkvKiBGYW4gc3BlZWQgKGJpdCAxKSAqLworCU1QUDhfVFcwX1NEQSwKKwlNUFA5X1RXMF9TQ0ssCiAJTVBQMTBfVUFSVDBfVFhELAogCU1QUDExX1VBUlQwX1JYRCwKIAlNUFAxMl9HUE8sCQkvKiBSZWQgbGVkICovCiAJTVBQMTRfR1BJTywJCS8qIFVTQiBmdXNlICovCiAJTVBQMTZfR1BJTywJCS8qIFNBVEEgMCBwb3dlciAqLworCU1QUDE3X0dQSU8sCQkvKiBTQVRBIDEgcG93ZXIgKi8KIAlNUFAxOF9ORl9JTzAsCiAJTVBQMTlfTkZfSU8xLAogCU1QUDIwX1NBVEExX0FDVG4sCiAJTVBQMjFfU0FUQTBfQUNUbiwKKwlNUFAyMl9HUElPLAkJLyogRmFuIHNwZWVkIChiaXQgMCkgKi8KKwlNUFAyM19HUElPLAkJLyogRmFuIHBvd2VyICovCiAJTVBQMjRfR1BJTywJCS8qIFVTQiBtb2RlIHNlbGVjdCAqLwogCU1QUDI1X0dQSU8sCQkvKiBGYW4gcm90YXRpb24gZmFpbCAqLwogCU1QUDI2X0dQSU8sCQkvKiBVU0IgZGV2aWNlIHZidXMgKi8KQEAgLTI2OCw2ICsyNzIsNyBAQAogCU1QUDMwX0dQSU8sCQkvKiBCbHVlIGxlZCAoY29tbWFuZCByZWdpc3RlcikgKi8KIAlNUFAzMV9HUElPLAkJLyogQm9hcmQgcG93ZXIgb2ZmICovCiAJTVBQMzJfR1BJTywgCQkvKiBQb3dlciBidXR0b24gKDAgPSBSZWxlYXNlZCwgMSA9IFB1c2hlZCkgKi8KKwlNUFAzM19HUE8sCQkvKiBGYW4gc3BlZWQgKGJpdCAyKSAqLwogCTAKIH07CiAKQEAgLTI5OSw3ICszMDQsOCBAQAogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIG5ldHNwYWNlX3YyX2kyY19pbmZvLAogCQkJCUFSUkFZX1NJWkUobmV0c3BhY2VfdjJfaTJjX2luZm8pKTsKIAotCW5ldHNwYWNlX3YyX2dwaW9fbGVkc19pbml0KCk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZuZXRzcGFjZV92Ml9sZWRzKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm5ldHNwYWNlX3YyX2dwaW9fbGVkcyk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZuZXRzcGFjZV92Ml9ncGlvX2J1dHRvbnMpOwogCiAJaWYgKGdwaW9fcmVxdWVzdChORVRTUEFDRV9WMl9HUElPX1BPV0VSX09GRiwgInBvd2VyLW9mZiIpID09IDAgJiYKQEAgLTMzMiwzICszMzgsMTUgQEAKIAkudGltZXIJCT0gJm5ldHNwYWNlX3YyX3RpbWVyLAogTUFDSElORV9FTkQKICNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfTkVUU1BBQ0VfTUFYX1YyCitNQUNISU5FX1NUQVJUKE5FVFNQQUNFX01BWF9WMiwgIkxhQ2llIE5ldHdvcmsgU3BhY2UgTWF4IHYyIikKKwkucGh5c19pbwk9IEtJUktXT09EX1JFR1NfUEhZU19CQVNFLAorCS5pb19wZ19vZmZzdAk9ICgoS0lSS1dPT0RfUkVHU19WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAorCS5pbml0X21hY2hpbmUJPSBuZXRzcGFjZV92Ml9pbml0LAorCS5tYXBfaW8JCT0ga2lya3dvb2RfbWFwX2lvLAorCS5pbml0X2lycQk9IGtpcmt3b29kX2luaXRfaXJxLAorCS50aW1lcgkJPSAmbmV0c3BhY2VfdjJfdGltZXIsCitNQUNISU5FX0VORAorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL25ldHhiaWdfdjItc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvbmV0eGJpZ192Mi1zZXR1cC5jCmluZGV4IDhhMmJiMDIuLjJiZDE0YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvbmV0eGJpZ192Mi1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvbmV0eGJpZ192Mi1zZXR1cC5jCkBAIC0yNzAsOCArMjcwLDggQEAKIAlNUFAzX1NQSV9NSVNPLAogCU1QUDZfU1lTUlNUX09VVG4sCiAJTVBQN19HUE8sCQkvKiBSZXF1ZXN0IHBvd2VyLW9mZiAqLwotCU1QUDhfVFdfU0RBLAotCU1QUDlfVFdfU0NLLAorCU1QUDhfVFcwX1NEQSwKKwlNUFA5X1RXMF9TQ0ssCiAJTVBQMTBfVUFSVDBfVFhELAogCU1QUDExX1VBUlQwX1JYRCwKIAlNUFAxM19HUElPLAkJLyogUmVhciBwb3dlciBzd2l0Y2ggKG9ufGF1dG8pICovCkBAIC0zMDYsOCArMzA2LDggQEAKIAlNUFAzX1NQSV9NSVNPLAogCU1QUDZfU1lTUlNUX09VVG4sCiAJTVBQN19HUE8sCQkvKiBSZXF1ZXN0IHBvd2VyLW9mZiAqLwotCU1QUDhfVFdfU0RBLAotCU1QUDlfVFdfU0NLLAorCU1QUDhfVFcwX1NEQSwKKwlNUFA5X1RXMF9TQ0ssCiAJTVBQMTBfVUFSVDBfVFhELAogCU1QUDExX1VBUlQwX1JYRCwKIAlNUFAxM19HUElPLAkJLyogUmVhciBwb3dlciBzd2l0Y2ggKG9ufGF1dG8pICovCkBAIC0zMTUsMjAgKzMxNSwyMCBAQAogCU1QUDE1X0dQSU8sCQkvKiBSZWFyIHBvd2VyIHN3aXRjaCAoYXV0b3xvZmYpICovCiAJTVBQMTZfR1BJTywJCS8qIFNBVEEgSEREMSBwb3dlciAqLwogCU1QUDE3X0dQSU8sCQkvKiBTQVRBIEhERDIgcG93ZXIgKi8KLQlNUFAyMF9HRTFfMCwKLQlNUFAyMV9HRTFfMSwKLQlNUFAyMl9HRTFfMiwKLQlNUFAyM19HRTFfMywKLQlNUFAyNF9HRTFfNCwKLQlNUFAyNV9HRTFfNSwKLQlNUFAyNl9HRTFfNiwKLQlNUFAyN19HRTFfNywKKwlNUFAyMF9HRTFfVFhEMCwKKwlNUFAyMV9HRTFfVFhEMSwKKwlNUFAyMl9HRTFfVFhEMiwKKwlNUFAyM19HRTFfVFhEMywKKwlNUFAyNF9HRTFfUlhEMCwKKwlNUFAyNV9HRTFfUlhEMSwKKwlNUFAyNl9HRTFfUlhEMiwKKwlNUFAyN19HRTFfUlhEMywKIAlNUFAyOF9HUElPLAkJLyogVVNCIGVuYWJsZSBob3N0IHZidXMgKi8KIAlNUFAyOV9HUElPLAkJLyogQ1BMRCBleHRlbnNpb24gQUxFICovCi0JTVBQMzBfR0UxXzEwLAotCU1QUDMxX0dFMV8xMSwKLQlNUFAzMl9HRTFfMTIsCi0JTVBQMzNfR0UxXzEzLAorCU1QUDMwX0dFMV9SWENUTCwKKwlNUFAzMV9HRTFfUlhDTEssCisJTVBQMzJfR0UxX1RDTEtPVVQsCisJTVBQMzNfR0UxX1RYQ1RMLAogCU1QUDM0X0dQSU8sCQkvKiBSZWFyIFB1c2ggYnV0dG9uICovCiAJTVBQMzVfR1BJTywJCS8qIEluaGliaXQgc3dpdGNoIHBvd2VyLW9mZiAqLwogCU1QUDM2X0dQSU8sCQkvKiBTQVRBIEhERDEgcHJlc2VuY2UgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2Qvb3BlbnJkLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL29wZW5yZC1zZXR1cC5jCmluZGV4IGFkM2YxZWMuLmZkNjRjZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2Qvb3BlbnJkLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9vcGVucmQtc2V0dXAuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBhcmNoL2FybS9tYWNoLWtpcmt3b29kL29wZW5yZC1zZXR1cC5jCiAgKgotICogTWFydmVsbCBPcGVuUkQgKEJhc2V8Q2xpZW50KSBCb2FyZCBTZXR1cAorICogTWFydmVsbCBPcGVuUkQgKEJhc2V8Q2xpZW50fFVsdGltYXRlKSBCb2FyZCBTZXR1cAogICoKICAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQpAQCAtNzMsOSArNzMsMTUgQEAKIAogCWtpcmt3b29kX2VoY2lfaW5pdCgpOwogCisJaWYgKG1hY2hpbmVfaXNfb3BlbnJkX3VsdGltYXRlKCkpIHsKKwkJb3BlbnJkX2dlMDBfZGF0YS5waHlfYWRkciA9IE1WNjQzWFhfRVRIX1BIWV9BRERSKDApOworCQlvcGVucmRfZ2UwMV9kYXRhLnBoeV9hZGRyID0gTVY2NDNYWF9FVEhfUEhZX0FERFIoMSk7CisJfQorCiAJa2lya3dvb2RfZ2UwMF9pbml0KCZvcGVucmRfZ2UwMF9kYXRhKTsKLQlpZiAobWFjaGluZV9pc19vcGVucmRfY2xpZW50KCkpCisJaWYgKCFtYWNoaW5lX2lzX29wZW5yZF9iYXNlKCkpCiAJCWtpcmt3b29kX2dlMDFfaW5pdCgmb3BlbnJkX2dlMDFfZGF0YSk7CisKIAlraXJrd29vZF9zYXRhX2luaXQoJm9wZW5yZF9zYXRhX2RhdGEpOwogCWtpcmt3b29kX3NkaW9faW5pdCgmb3BlbnJkX212c2Rpb19kYXRhKTsKIApAQCAtODQsOCArOTAsMTAgQEAKIAogc3RhdGljIGludCBfX2luaXQgb3BlbnJkX3BjaV9pbml0KHZvaWQpCiB7Ci0JaWYgKG1hY2hpbmVfaXNfb3BlbnJkX2Jhc2UoKSB8fCBtYWNoaW5lX2lzX29wZW5yZF9jbGllbnQoKSkKLQkJa2lya3dvb2RfcGNpZV9pbml0KCk7CisJaWYgKG1hY2hpbmVfaXNfb3BlbnJkX2Jhc2UoKSB8fAorCSAgICBtYWNoaW5lX2lzX29wZW5yZF9jbGllbnQoKSB8fAorCSAgICBtYWNoaW5lX2lzX29wZW5yZF91bHRpbWF0ZSgpKQorCQlraXJrd29vZF9wY2llX2luaXQoS1dfUENJRTApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTYsMyArMTI0LDE2IEBACiAJLnRpbWVyCQk9ICZraXJrd29vZF90aW1lciwKIE1BQ0hJTkVfRU5ECiAjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX09QRU5SRF9VTFRJTUFURQorTUFDSElORV9TVEFSVChPUEVOUkRfVUxUSU1BVEUsICJNYXJ2ZWxsIE9wZW5SRCBVbHRpbWF0ZSBCb2FyZCIpCisJLyogTWFpbnRhaW5lcjogRGhhdmFsIFZhc2EgPGRoYXZhbC52YXNhQGVpbmZvY2hpcHMuY29tPiAqLworCS5waHlzX2lvCT0gS0lSS1dPT0RfUkVHU19QSFlTX0JBU0UsCisJLmlvX3BnX29mZnN0CT0gKChLSVJLV09PRF9SRUdTX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCisJLmluaXRfbWFjaGluZQk9IG9wZW5yZF9pbml0LAorCS5tYXBfaW8JCT0ga2lya3dvb2RfbWFwX2lvLAorCS5pbml0X2lycQk9IGtpcmt3b29kX2luaXRfaXJxLAorCS50aW1lcgkJPSAma2lya3dvb2RfdGltZXIsCitNQUNISU5FX0VORAorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3BjaWUuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcGNpZS5jCmluZGV4IGRlZTFlZmYuLjU1ZTdmMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcGNpZS5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcGNpZS5jCkBAIC0xOCwyOSArMTgsNDMgQEAKICNpbmNsdWRlIDxtYWNoL2JyaWRnZS1yZWdzLmg+CiAjaW5jbHVkZSAiY29tbW9uLmgiCiAKLQotI2RlZmluZSBQQ0lFX0JBU0UJKCh2b2lkIF9faW9tZW0gKilQQ0lFX1ZJUlRfQkFTRSkKLQogdm9pZCBfX2luaXQga2lya3dvb2RfcGNpZV9pZCh1MzIgKmRldiwgdTMyICpyZXYpCiB7Ci0JKmRldiA9IG9yaW9uX3BjaWVfZGV2X2lkKFBDSUVfQkFTRSk7Ci0JKnJldiA9IG9yaW9uX3BjaWVfcmV2KFBDSUVfQkFTRSk7CisJKmRldiA9IG9yaW9uX3BjaWVfZGV2X2lkKCh2b2lkIF9faW9tZW0gKilQQ0lFX1ZJUlRfQkFTRSk7CisJKnJldiA9IG9yaW9uX3BjaWVfcmV2KCh2b2lkIF9faW9tZW0gKilQQ0lFX1ZJUlRfQkFTRSk7CiB9CiAKLXN0YXRpYyBpbnQgcGNpZV92YWxpZF9jb25maWcoaW50IGJ1cywgaW50IGRldikKK3N0cnVjdCBwY2llX3BvcnQgeworCXU4CQkJcm9vdF9idXNfbnI7CisJdm9pZCBfX2lvbWVtCQkqYmFzZTsKKwlzcGlubG9ja190CQljb25mX2xvY2s7CisJaW50CQkJaXJxOworCXN0cnVjdCByZXNvdXJjZQkJcmVzWzJdOworfTsKKworc3RhdGljIGludCBwY2llX3BvcnRfbWFwWzJdOworc3RhdGljIGludCBudW1fcGNpZV9wb3J0czsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpZV9wb3J0ICpidXNfdG9fcG9ydChzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cyA9IGJ1cy0+c3lzZGF0YTsKKwlyZXR1cm4gc3lzLT5wcml2YXRlX2RhdGE7Cit9CisKK3N0YXRpYyBpbnQgcGNpZV92YWxpZF9jb25maWcoc3RydWN0IHBjaWVfcG9ydCAqcHAsIGludCBidXMsIGludCBkZXYpCiB7CiAJLyoKIAkgKiBEb24ndCBnbyBvdXQgd2hlbiB0cnlpbmcgdG8gYWNjZXNzIC0tCiAJICogMS4gbm9uZXhpc3RpbmcgZGV2aWNlIG9uIGxvY2FsIGJ1cwogCSAqIDIuIHdoZXJlIHRoZXJlJ3Mgbm8gZGV2aWNlIGNvbm5lY3RlZCAobm8gbGluaykKIAkgKi8KLQlpZiAoYnVzID09IDAgJiYgZGV2ID09IDApCisJaWYgKGJ1cyA9PSBwcC0+cm9vdF9idXNfbnIgJiYgZGV2ID09IDApCiAJCXJldHVybiAxOwogCi0JaWYgKCFvcmlvbl9wY2llX2xpbmtfdXAoUENJRV9CQVNFKSkKKwlpZiAoIW9yaW9uX3BjaWVfbGlua191cChwcC0+YmFzZSkpCiAJCXJldHVybiAwOwogCi0JaWYgKGJ1cyA9PSAwICYmIGRldiAhPSAxKQorCWlmIChidXMgPT0gcHAtPnJvb3RfYnVzX25yICYmIGRldiAhPSAxKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiAxOwpAQCAtNTIsMjIgKzY2LDIyIEBACiAgKiBhbmQgdGhlbiByZWFkaW5nIHRoZSBQQ0lFX0NPTkZfREFUQSByZWdpc3Rlci4gTmVlZCB0byBtYWtlIHN1cmUgdGhlc2UKICAqIHRyYW5zYWN0aW9ucyBhcmUgYXRvbWljLgogICovCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGtpcmt3b29kX3BjaWVfbG9jayk7CiAKIHN0YXRpYyBpbnQgcGNpZV9yZF9jb25mKHN0cnVjdCBwY2lfYnVzICpidXMsIHUzMiBkZXZmbiwgaW50IHdoZXJlLAogCQkJaW50IHNpemUsIHUzMiAqdmFsKQogeworCXN0cnVjdCBwY2llX3BvcnQgKnBwID0gYnVzX3RvX3BvcnQoYnVzKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAKLQlpZiAocGNpZV92YWxpZF9jb25maWcoYnVzLT5udW1iZXIsIFBDSV9TTE9UKGRldmZuKSkgPT0gMCkgeworCWlmIChwY2llX3ZhbGlkX2NvbmZpZyhwcCwgYnVzLT5udW1iZXIsIFBDSV9TTE9UKGRldmZuKSkgPT0gMCkgewogCQkqdmFsID0gMHhmZmZmZmZmZjsKIAkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgma2lya3dvb2RfcGNpZV9sb2NrLCBmbGFncyk7Ci0JcmV0ID0gb3Jpb25fcGNpZV9yZF9jb25mKFBDSUVfQkFTRSwgYnVzLCBkZXZmbiwgd2hlcmUsIHNpemUsIHZhbCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgma2lya3dvb2RfcGNpZV9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBwLT5jb25mX2xvY2ssIGZsYWdzKTsKKwlyZXQgPSBvcmlvbl9wY2llX3JkX2NvbmYocHAtPmJhc2UsIGJ1cywgZGV2Zm4sIHdoZXJlLCBzaXplLCB2YWwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBwLT5jb25mX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC03NSwxNSArODksMTYgQEAKIHN0YXRpYyBpbnQgcGNpZV93cl9jb25mKHN0cnVjdCBwY2lfYnVzICpidXMsIHUzMiBkZXZmbiwKIAkJCWludCB3aGVyZSwgaW50IHNpemUsIHUzMiB2YWwpCiB7CisJc3RydWN0IHBjaWVfcG9ydCAqcHAgPSBidXNfdG9fcG9ydChidXMpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAotCWlmIChwY2llX3ZhbGlkX2NvbmZpZyhidXMtPm51bWJlciwgUENJX1NMT1QoZGV2Zm4pKSA9PSAwKQorCWlmIChwY2llX3ZhbGlkX2NvbmZpZyhwcCwgYnVzLT5udW1iZXIsIFBDSV9TTE9UKGRldmZuKSkgPT0gMCkKIAkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZraXJrd29vZF9wY2llX2xvY2ssIGZsYWdzKTsKLQlyZXQgPSBvcmlvbl9wY2llX3dyX2NvbmYoUENJRV9CQVNFLCBidXMsIGRldmZuLCB3aGVyZSwgc2l6ZSwgdmFsKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZraXJrd29vZF9wY2llX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHAtPmNvbmZfbG9jaywgZmxhZ3MpOworCXJldCA9IG9yaW9uX3BjaWVfd3JfY29uZihwcC0+YmFzZSwgYnVzLCBkZXZmbiwgd2hlcmUsIHNpemUsIHZhbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHAtPmNvbmZfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTkzLDUwICsxMDgsOTggQEAKIAkud3JpdGUgPSBwY2llX3dyX2NvbmYsCiB9OwogCi0KLXN0YXRpYyBpbnQgX19pbml0IGtpcmt3b29kX3BjaWVfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCitzdGF0aWMgdm9pZCBfX2luaXQgcGNpZTBfaW9yZXNvdXJjZXNfaW5pdChzdHJ1Y3QgcGNpZV9wb3J0ICpwcCkKIHsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQlleHRlcm4gdW5zaWduZWQgaW50IGtpcmt3b29kX2Nsa19jdHJsOwotCi0JLyoKLQkgKiBHZW5lcmljIFBDSWUgdW5pdCBzZXR1cC4KLQkgKi8KLQlvcmlvbl9wY2llX3NldHVwKFBDSUVfQkFTRSwgJmtpcmt3b29kX21idXNfZHJhbV9pbmZvKTsKLQotCS8qCi0JICogUmVxdWVzdCByZXNvdXJjZXMuCi0JICovCi0JcmVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIDIsIEdGUF9LRVJORUwpOwotCWlmICghcmVzKQotCQlwYW5pYygicGNpZV9zZXR1cCB1bmFibGUgdG8gYWxsb2MgcmVzb3VyY2VzIik7CisJcHAtPmJhc2UgPSAodm9pZCBfX2lvbWVtICopUENJRV9WSVJUX0JBU0U7CisJcHAtPmlycQk9IElSUV9LSVJLV09PRF9QQ0lFOwogCiAJLyoKIAkgKiBJT1JFU09VUkNFX0lPCiAJICovCi0JcmVzWzBdLm5hbWUgPSAiUENJZSBJL08gU3BhY2UiOwotCXJlc1swXS5mbGFncyA9IElPUkVTT1VSQ0VfSU87Ci0JcmVzWzBdLnN0YXJ0ID0gS0lSS1dPT0RfUENJRV9JT19CVVNfQkFTRTsKLQlyZXNbMF0uZW5kID0gcmVzWzBdLnN0YXJ0ICsgS0lSS1dPT0RfUENJRV9JT19TSVpFIC0gMTsKLQlpZiAocmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCAmcmVzWzBdKSkKLQkJcGFuaWMoIlJlcXVlc3QgUENJZSBJTyByZXNvdXJjZSBmYWlsZWRcbiIpOwotCXN5cy0+cmVzb3VyY2VbMF0gPSAmcmVzWzBdOworCXBwLT5yZXNbMF0ubmFtZSA9ICJQQ0llIDAgSS9PIFNwYWNlIjsKKwlwcC0+cmVzWzBdLnN0YXJ0ID0gS0lSS1dPT0RfUENJRV9JT19QSFlTX0JBU0U7CisJcHAtPnJlc1swXS5lbmQgPSBwcC0+cmVzWzBdLnN0YXJ0ICsgS0lSS1dPT0RfUENJRV9JT19TSVpFIC0gMTsKKwlwcC0+cmVzWzBdLmZsYWdzID0gSU9SRVNPVVJDRV9JTzsKIAogCS8qCiAJICogSU9SRVNPVVJDRV9NRU0KIAkgKi8KLQlyZXNbMV0ubmFtZSA9ICJQQ0llIE1lbW9yeSBTcGFjZSI7Ci0JcmVzWzFdLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07Ci0JcmVzWzFdLnN0YXJ0ID0gS0lSS1dPT0RfUENJRV9NRU1fQlVTX0JBU0U7Ci0JcmVzWzFdLmVuZCA9IHJlc1sxXS5zdGFydCArIEtJUktXT09EX1BDSUVfTUVNX1NJWkUgLSAxOwotCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJnJlc1sxXSkpCi0JCXBhbmljKCJSZXF1ZXN0IFBDSWUgTWVtb3J5IHJlc291cmNlIGZhaWxlZFxuIik7Ci0Jc3lzLT5yZXNvdXJjZVsxXSA9ICZyZXNbMV07CisJcHAtPnJlc1sxXS5uYW1lID0gIlBDSWUgMCBNRU0iOworCXBwLT5yZXNbMV0uc3RhcnQgPSBLSVJLV09PRF9QQ0lFX01FTV9QSFlTX0JBU0U7CisJcHAtPnJlc1sxXS5lbmQgPSBwcC0+cmVzWzFdLnN0YXJ0ICsgS0lSS1dPT0RfUENJRV9NRU1fU0laRSAtIDE7CisJcHAtPnJlc1sxXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOworfQogCitzdGF0aWMgdm9pZCBfX2luaXQgcGNpZTFfaW9yZXNvdXJjZXNfaW5pdChzdHJ1Y3QgcGNpZV9wb3J0ICpwcCkKK3sKKwlwcC0+YmFzZSA9ICh2b2lkIF9faW9tZW0gKilQQ0lFMV9WSVJUX0JBU0U7CisJcHAtPmlycQk9IElSUV9LSVJLV09PRF9QQ0lFMTsKKworCS8qCisJICogSU9SRVNPVVJDRV9JTworCSAqLworCXBwLT5yZXNbMF0ubmFtZSA9ICJQQ0llIDEgSS9PIFNwYWNlIjsKKwlwcC0+cmVzWzBdLnN0YXJ0ID0gS0lSS1dPT0RfUENJRTFfSU9fUEhZU19CQVNFOworCXBwLT5yZXNbMF0uZW5kID0gcHAtPnJlc1swXS5zdGFydCArIEtJUktXT09EX1BDSUUxX0lPX1NJWkUgLSAxOworCXBwLT5yZXNbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX0lPOworCisJLyoKKwkgKiBJT1JFU09VUkNFX01FTQorCSAqLworCXBwLT5yZXNbMV0ubmFtZSA9ICJQQ0llIDEgTUVNIjsKKwlwcC0+cmVzWzFdLnN0YXJ0ID0gS0lSS1dPT0RfUENJRTFfTUVNX1BIWVNfQkFTRTsKKwlwcC0+cmVzWzFdLmVuZCA9IHBwLT5yZXNbMV0uc3RhcnQgKyBLSVJLV09PRF9QQ0lFMV9NRU1fU0laRSAtIDE7CisJcHAtPnJlc1sxXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOworfQorCitzdGF0aWMgaW50IF9faW5pdCBraXJrd29vZF9wY2llX3NldHVwKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQoreworCWV4dGVybiB1bnNpZ25lZCBpbnQga2lya3dvb2RfY2xrX2N0cmw7CisJc3RydWN0IHBjaWVfcG9ydCAqcHA7CisJaW50IGluZGV4OworCisJaWYgKG5yID49IG51bV9wY2llX3BvcnRzKQorCQlyZXR1cm4gMDsKKworCWluZGV4ID0gcGNpZV9wb3J0X21hcFtucl07CisJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBidXMlZCB1c2VzIFBDSWUgcG9ydCAlZFxuIiwgc3lzLT5idXNuciwgaW5kZXgpOworCisJcHAgPSBremFsbG9jKHNpemVvZigqcHApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBwKQorCQlwYW5pYygiUENJZTogZmFpbGVkIHRvIGFsbG9jYXRlIHBjaWVfcG9ydCBkYXRhIik7CisJc3lzLT5wcml2YXRlX2RhdGEgPSBwcDsKKwlwcC0+cm9vdF9idXNfbnIgPSBzeXMtPmJ1c25yOworCXNwaW5fbG9ja19pbml0KCZwcC0+Y29uZl9sb2NrKTsKKworCXN3aXRjaCAoaW5kZXgpIHsKKwljYXNlIDA6CisJCWtpcmt3b29kX2Nsa19jdHJsIHw9IENHQ19QRVgwOworCQlwY2llMF9pb3Jlc291cmNlc19pbml0KHBwKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlraXJrd29vZF9jbGtfY3RybCB8PSBDR0NfUEVYMTsKKwkJcGNpZTFfaW9yZXNvdXJjZXNfaW5pdChwcCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXBhbmljKCJQQ0llIHNldHVwOiBpbnZhbGlkIGNvbnRyb2xsZXIgJWQiLCBpbmRleCk7CisJfQorCisJaWYgKHJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJnBwLT5yZXNbMF0pKQorCQlwYW5pYygiUmVxdWVzdCBQQ0llJWQgSU8gcmVzb3VyY2UgZmFpbGVkXG4iLCBpbmRleCk7CisJaWYgKHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmcHAtPnJlc1sxXSkpCisJCXBhbmljKCJSZXF1ZXN0IFBDSWUlZCBNZW1vcnkgcmVzb3VyY2UgZmFpbGVkXG4iLCBpbmRleCk7CisKKwlzeXMtPnJlc291cmNlWzBdID0gJnBwLT5yZXNbMF07CisJc3lzLT5yZXNvdXJjZVsxXSA9ICZwcC0+cmVzWzFdOwogCXN5cy0+cmVzb3VyY2VbMl0gPSBOVUxMOwogCXN5cy0+aW9fb2Zmc2V0ID0gMDsKIAotCWtpcmt3b29kX2Nsa19jdHJsIHw9IENHQ19QRVgwOworCS8qCisJICogR2VuZXJpYyBQQ0llIHVuaXQgc2V0dXAuCisJICovCisJb3Jpb25fcGNpZV9zZXRfbG9jYWxfYnVzX25yKHBwLT5iYXNlLCBzeXMtPmJ1c25yKTsKKworCW9yaW9uX3BjaWVfc2V0dXAocHAtPmJhc2UsICZraXJrd29vZF9tYnVzX2RyYW1faW5mbyk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTE2Myw3ICsyMjYsNyBAQAogewogCXN0cnVjdCBwY2lfYnVzICpidXM7CiAKLQlpZiAobnIgPT0gMCkgeworCWlmIChuciA8IG51bV9wY2llX3BvcnRzKSB7CiAJCWJ1cyA9IHBjaV9zY2FuX2J1cyhzeXMtPmJ1c25yLCAmcGNpZV9vcHMsIHN5cyk7CiAJfSBlbHNlIHsKIAkJYnVzID0gTlVMTDsKQEAgLTE3NSwxOCArMjM4LDM3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGtpcmt3b29kX3BjaWVfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7Ci0JcmV0dXJuIElSUV9LSVJLV09PRF9QQ0lFOworCXN0cnVjdCBwY2llX3BvcnQgKnBwID0gYnVzX3RvX3BvcnQoZGV2LT5idXMpOworCisJcmV0dXJuIHBwLT5pcnE7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaHdfcGNpIGtpcmt3b29kX3BjaSBfX2luaXRkYXRhID0gewotCS5ucl9jb250cm9sbGVycwk9IDEsCiAJLnN3aXp6bGUJPSBwY2lfc3RkX3N3aXp6bGUsCiAJLnNldHVwCQk9IGtpcmt3b29kX3BjaWVfc2V0dXAsCiAJLnNjYW4JCT0ga2lya3dvb2RfcGNpZV9zY2FuX2J1cywKIAkubWFwX2lycQk9IGtpcmt3b29kX3BjaWVfbWFwX2lycSwKIH07CiAKLXZvaWQgX19pbml0IGtpcmt3b29kX3BjaWVfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGFkZF9wY2llX3BvcnQoaW50IGluZGV4LCB1bnNpZ25lZCBsb25nIGJhc2UpCiB7CisJcHJpbnRrKEtFUk5fSU5GTyAiS2lya3dvb2QgUENJZSBwb3J0ICVkOiAiLCBpbmRleCk7CisKKwlpZiAob3Jpb25fcGNpZV9saW5rX3VwKCh2b2lkIF9faW9tZW0gKiliYXNlKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJsaW5rIHVwXG4iKTsKKwkJcGNpZV9wb3J0X21hcFtudW1fcGNpZV9wb3J0cysrXSA9IGluZGV4OworCX0gZWxzZQorCQlwcmludGsoS0VSTl9JTkZPICJsaW5rIGRvd24sIGlnbm9yaW5nXG4iKTsKK30KKwordm9pZCBfX2luaXQga2lya3dvb2RfcGNpZV9pbml0KHVuc2lnbmVkIGludCBwb3J0bWFzaykKK3sKKwlpZiAocG9ydG1hc2sgJiBLV19QQ0lFMCkKKwkJYWRkX3BjaWVfcG9ydCgwLCBQQ0lFX1ZJUlRfQkFTRSk7CisKKwlpZiAocG9ydG1hc2sgJiBLV19QQ0lFMSkKKwkJYWRkX3BjaWVfcG9ydCgxLCBQQ0lFMV9WSVJUX0JBU0UpOworCisJa2lya3dvb2RfcGNpLm5yX2NvbnRyb2xsZXJzID0gbnVtX3BjaWVfcG9ydHM7CiAJcGNpX2NvbW1vbl9pbml0KCZraXJrd29vZF9wY2kpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9yZDg4ZjYxOTItbmFzLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjE5Mi1uYXMtc2V0dXAuYwppbmRleCAzYmY2MzA0Li5jMzQ3MThjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjE5Mi1uYXMtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjE5Mi1uYXMtc2V0dXAuYwpAQCAtNzEsNyArNzEsNyBAQAogc3RhdGljIGludCBfX2luaXQgcmQ4OGY2MTkyX3BjaV9pbml0KHZvaWQpCiB7CiAJaWYgKG1hY2hpbmVfaXNfcmQ4OGY2MTkyX25hcygpKQotCQlraXJrd29vZF9wY2llX2luaXQoKTsKKwkJa2lya3dvb2RfcGNpZV9pbml0KEtXX1BDSUUwKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9yZDg4ZjYyODEtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcmQ4OGY2MjgxLXNldHVwLmMKaW5kZXggMzE3MDhkZC4uM2QxNDc3MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9yZDg4ZjYyODEtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjI4MS1zZXR1cC5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IHJkODhmNjI4MV9wY2lfaW5pdCh2b2lkKQogewogCWlmIChtYWNoaW5lX2lzX3JkODhmNjI4MSgpKQotCQlraXJrd29vZF9wY2llX2luaXQoKTsKKwkJa2lya3dvb2RfcGNpZV9pbml0KEtXX1BDSUUwKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC90NTMyNS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC90NTMyNS1zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMWJmODkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3Q1MzI1LXNldHVwLmMKQEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKgorICogSFAgdDUzMjUgVGhpbiBDbGllbnQgc2V0dXAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgIE1hcnRpbiBNaWNobG1heXIgPHRibUBjeXJpdXMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9mbGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvb3Jpb25fc3BpLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvbXY2NDN4eF9ldGguaD4KKyNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxtYWNoL2tpcmt3b29kLmg+CisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAibXBwLmgiCisKK3N0cnVjdCBtdGRfcGFydGl0aW9uIGhwX3Q1MzI1X3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJ1LWJvb3QgZW52IiwKKwkJLnNpemUJCT0gU1pfNjRLLAorCQkub2Zmc2V0CQk9IFNaXzUxMksgKyBTWl8yNTZLLAorCX0sCisJeworCQkubmFtZQkJPSAicGVybWFuZW50IHUtYm9vdCBlbnYiLAorCQkuc2l6ZQkJPSBTWl82NEssCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJIUCBlbnYiLAorCQkuc2l6ZQkJPSBTWl82NEssCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCX0sCisJeworCQkubmFtZQkJPSAidS1ib290IiwKKwkJLnNpemUJCT0gU1pfNTEySywKKwkJLm9mZnNldAkJPSAwLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJTU0QgZmlybXdhcmUiLAorCQkuc2l6ZQkJPSBTWl8yNTZLLAorCQkub2Zmc2V0CQk9IFNaXzUxMkssCisJfSwKK307CisKK2NvbnN0IHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIGhwX3Q1MzI1X2ZsYXNoID0geworCS50eXBlCQk9ICJteDI1bDgwMDUiLAorCS5uYW1lCQk9ICJzcGlfZmxhc2giLAorCS5wYXJ0cwkJPSBocF90NTMyNV9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoaHBfdDUzMjVfcGFydGl0aW9ucyksCit9OworCitzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gX19pbml0ZGF0YSBocF90NTMyNV9zcGlfc2xhdmVfaW5mb1tdID0geworCXsKKwkJLm1vZGFsaWFzCT0gIm0yNXA4MCIsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJmhwX3Q1MzI1X2ZsYXNoLAorCQkuaXJxCQk9IC0xLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgaHBfdDUzMjVfZ2UwMF9kYXRhID0geworCS5waHlfYWRkcgk9IE1WNjQzWFhfRVRIX1BIWV9BRERSKDgpLAorfTsKKworc3RhdGljIHN0cnVjdCBtdl9zYXRhX3BsYXRmb3JtX2RhdGEgaHBfdDUzMjVfc2F0YV9kYXRhID0geworCS5uX3BvcnRzCT0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBocF90NTMyNV9idXR0b25zW10gPSB7CisJeworCQkuY29kZQkJPSBLRVlfUE9XRVIsCisJCS5ncGlvCQk9IDQ1LAorCQkuZGVzYwkJPSAiUG93ZXIiLAorCQkuYWN0aXZlX2xvdwk9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgaHBfdDUzMjVfYnV0dG9uX2RhdGEgPSB7CisJLmJ1dHRvbnMJPSBocF90NTMyNV9idXR0b25zLAorCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoaHBfdDUzMjVfYnV0dG9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBocF90NTMyNV9idXR0b25fZGV2aWNlID0geworCS5uYW1lCQk9ICJncGlvLWtleXMiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmhwX3Q1MzI1X2J1dHRvbl9kYXRhLAorCX0KK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaHBfdDUzMjVfbXBwX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJTVBQMF9ORl9JTzIsCisJTVBQMV9TUElfTU9TSSwKKwlNUFAyX1NQSV9TQ0ssCisJTVBQM19TUElfTUlTTywKKwlNUFA0X05GX0lPNiwKKwlNUFA1X05GX0lPNywKKwlNUFA2X1NZU1JTVF9PVVRuLAorCU1QUDdfU1BJX1NDbiwKKwlNUFA4X1RXMF9TREEsCisJTVBQOV9UVzBfU0NLLAorCU1QUDEwX1VBUlQwX1RYRCwKKwlNUFAxMV9VQVJUMF9SWEQsCisJTVBQMTJfU0RfQ0xLLAorCU1QUDEzX0dQSU8sCisJTVBQMTRfR1BJTywKKwlNUFAxNV9HUElPLAorCU1QUDE2X0dQSU8sCisJTVBQMTdfR1BJTywKKwlNUFAxOF9ORl9JTzAsCisJTVBQMTlfTkZfSU8xLAorCU1QUDIwX0dQSU8sCisJTVBQMjFfR1BJTywKKwlNUFAyMl9HUElPLAorCU1QUDIzX0dQSU8sCisJTVBQMzJfR1BJTywKKwlNUFAzM19HRTFfVFhDVEwsCisJTVBQMzlfQVVfSTJTQkNMSywKKwlNUFA0MF9BVV9JMlNETywKKwlNUFA0MV9BVV9JMlNMUkNMSywKKwlNUFA0Ml9BVV9JMlNNQ0xLLAorCU1QUDQ1X0dQSU8sCQkvKiBQb3dlciBidXR0b24gKi8KKwlNUFA0OF9HUElPLAkJLyogQm9hcmQgcG93ZXIgb2ZmICovCisJMAorfTsKKworI2RlZmluZSBIUF9UNTMyNV9HUElPX1BPV0VSX09GRgkJNDgKKworc3RhdGljIHZvaWQgaHBfdDUzMjVfcG93ZXJfb2ZmKHZvaWQpCit7CisJZ3Bpb19zZXRfdmFsdWUoSFBfVDUzMjVfR1BJT19QT1dFUl9PRkYsIDEpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgaHBfdDUzMjVfaW5pdCh2b2lkKQoreworCS8qCisJICogQmFzaWMgc2V0dXAuIE5lZWRzIHRvIGJlIGNhbGxlZCBlYXJseS4KKwkgKi8KKwlraXJrd29vZF9pbml0KCk7CisJa2lya3dvb2RfbXBwX2NvbmYoaHBfdDUzMjVfbXBwX2NvbmZpZyk7CisKKwlraXJrd29vZF91YXJ0MF9pbml0KCk7CisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oaHBfdDUzMjVfc3BpX3NsYXZlX2luZm8sCisJCQkJQVJSQVlfU0laRShocF90NTMyNV9zcGlfc2xhdmVfaW5mbykpOworCWtpcmt3b29kX3NwaV9pbml0KCk7CisJa2lya3dvb2RfaTJjX2luaXQoKTsKKwlraXJrd29vZF9nZTAwX2luaXQoJmhwX3Q1MzI1X2dlMDBfZGF0YSk7CisJa2lya3dvb2Rfc2F0YV9pbml0KCZocF90NTMyNV9zYXRhX2RhdGEpOworCWtpcmt3b29kX2VoY2lfaW5pdCgpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmaHBfdDUzMjVfYnV0dG9uX2RldmljZSk7CisKKwlpZiAoZ3Bpb19yZXF1ZXN0KEhQX1Q1MzI1X0dQSU9fUE9XRVJfT0ZGLCAicG93ZXItb2ZmIikgPT0gMCAmJgorCSAgICBncGlvX2RpcmVjdGlvbl9vdXRwdXQoSFBfVDUzMjVfR1BJT19QT1dFUl9PRkYsIDApID09IDApCisJCXBtX3Bvd2VyX29mZiA9IGhwX3Q1MzI1X3Bvd2VyX29mZjsKKwllbHNlCisJCXByX2VycigidDUzMjU6IGZhaWxlZCB0byBjb25maWd1cmUgcG93ZXItb2ZmIEdQSU9cbiIpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBocF90NTMyNV9wY2lfaW5pdCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX3Q1MzI1KCkpCisJCWtpcmt3b29kX3BjaWVfaW5pdChLV19QQ0lFMCk7CisKKwlyZXR1cm4gMDsKK30KK3N1YnN5c19pbml0Y2FsbChocF90NTMyNV9wY2lfaW5pdCk7CisKK01BQ0hJTkVfU1RBUlQoVDUzMjUsICJIUCB0NTMyNSBUaGluIENsaWVudCIpCisJLyogTWFpbnRhaW5lcjogTWFydGluIE1pY2hsbWF5ciA8dGJtQGN5cml1cy5jb20+ICovCisJLnBoeXNfaW8JPSBLSVJLV09PRF9SRUdTX1BIWVNfQkFTRSwKKwkuaW9fcGdfb2Zmc3QJPSAoKEtJUktXT09EX1JFR1NfVklSVF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKKwkuaW5pdF9tYWNoaW5lCT0gaHBfdDUzMjVfaW5pdCwKKwkubWFwX2lvCQk9IGtpcmt3b29kX21hcF9pbywKKwkuaW5pdF9pcnEJPSBraXJrd29vZF9pbml0X2lycSwKKwkudGltZXIJCT0gJmtpcmt3b29kX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvdHMyMTktc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvdHMyMTktc2V0dXAuYwppbmRleCAyODMwZjBmLi5hNWJkN2ZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3RzMjE5LXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC90czIxOS1zZXR1cC5jCkBAIC03NCw4ICs3NCw4IEBACiAJTVBQM19TUElfTUlTTywKIAlNUFA0X1NBVEExX0FDVG4sCiAJTVBQNV9TQVRBMF9BQ1RuLAotCU1QUDhfVFdfU0RBLAotCU1QUDlfVFdfU0NLLAorCU1QUDhfVFcwX1NEQSwKKwlNUFA5X1RXMF9TQ0ssCiAJTVBQMTBfVUFSVDBfVFhELAogCU1QUDExX1VBUlQwX1JYRCwKIAlNUFAxM19VQVJUMV9UWEQsCS8qIFBJQyBjb250cm9sbGVyICovCkBAIC04Myw2ICs4Myw3IEBACiAJTVBQMTVfR1BJTywJCS8qIFVTQiBDb3B5IGJ1dHRvbiAqLwogCU1QUDE2X0dQSU8sCQkvKiBSZXNldCBidXR0b24gKi8KIAlNUFAzNl9HUElPLAkJLyogUkFNOiAwOiAyNTYgTUIsIDE6IDUxMiBNQiAqLworCU1QUDQ0X0dQSU8sCQkvKiBCb2FyZCBJRDogMDogVFMtMTF4LCAxOiBUUy0yMXggKi8KIAkwCiB9OwogCkBAIC0xMTAsMTAgKzExMSwxMCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB0czIxOV9wY2lfaW5pdCh2b2lkKQogewotICAgaWYgKG1hY2hpbmVfaXNfdHMyMTkoKSkKLSAgICAgICAgICAga2lya3dvb2RfcGNpZV9pbml0KCk7CisJaWYgKG1hY2hpbmVfaXNfdHMyMTkoKSkKKwkJa2lya3dvb2RfcGNpZV9pbml0KEtXX1BDSUUwKTsKIAotICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiBzdWJzeXNfaW5pdGNhbGwodHMyMTlfcGNpX2luaXQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3RzNDF4LXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3RzNDF4LXNldHVwLmMKaW5kZXggZGU0OWMyZC4uMmUxNGFmZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC90czQxeC1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvdHM0MXgtc2V0dXAuYwpAQCAtMiw3ICsyLDcgQEAKICAqCiAgKiBRTkFQIFRTLTQxMCwgVFMtNDEwVSwgVFMtNDE5UCBhbmQgVFMtNDE5VSBUdXJibyBOQVMgQm9hcmQgU2V0dXAKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgIE1hcnRpbiBNaWNobG1heXIgPHRibUBjeXJpdXMuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgIE1hcnRpbiBNaWNobG1heXIgPHRibUBjeXJpdXMuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA4ICBCeXJvbiBCcmFkbGV5IDxieXJvbi5iYnJhZGxleUBnbWFpbC5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+CiAjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTI2LDYgKzI3LDggQEAKICNpbmNsdWRlICJtcHAuaCIKICNpbmNsdWRlICJ0c3gxeC1jb21tb24uaCIKIAorI2RlZmluZSBRTkFQX1RTNDFYX0pVTVBFUl9KUDEJNDUKKwogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHFuYXBfdHM0MXhfaTJjX3J0YyA9IHsKIAlJMkNfQk9BUkRfSU5GTygiczM1MzkwYSIsIDB4MzApLAogfTsKQEAgLTc4LDMxICs4MSwzMSBAQAogCU1QUDNfU1BJX01JU08sCiAJTVBQNl9TWVNSU1RfT1VUbiwKIAlNUFA3X1BFWF9SU1RfT1VUbiwKLQlNUFA4X1RXX1NEQSwKLQlNUFA5X1RXX1NDSywKKwlNUFA4X1RXMF9TREEsCisJTVBQOV9UVzBfU0NLLAogCU1QUDEwX1VBUlQwX1RYRCwKIAlNUFAxMV9VQVJUMF9SWEQsCiAJTVBQMTNfVUFSVDFfVFhELAkvKiBQSUMgY29udHJvbGxlciAqLwogCU1QUDE0X1VBUlQxX1JYRCwJLyogUElDIGNvbnRyb2xsZXIgKi8KIAlNUFAxNV9TQVRBMF9BQ1RuLAogCU1QUDE2X1NBVEExX0FDVG4sCi0JTVBQMjBfR0UxXzAsCi0JTVBQMjFfR0UxXzEsCi0JTVBQMjJfR0UxXzIsCi0JTVBQMjNfR0UxXzMsCi0JTVBQMjRfR0UxXzQsCi0JTVBQMjVfR0UxXzUsCi0JTVBQMjZfR0UxXzYsCi0JTVBQMjdfR0UxXzcsCi0JTVBQMzBfR0UxXzEwLAotCU1QUDMxX0dFMV8xMSwKLQlNUFAzMl9HRTFfMTIsCi0JTVBQMzNfR0UxXzEzLAorCU1QUDIwX0dFMV9UWEQwLAorCU1QUDIxX0dFMV9UWEQxLAorCU1QUDIyX0dFMV9UWEQyLAorCU1QUDIzX0dFMV9UWEQzLAorCU1QUDI0X0dFMV9SWEQwLAorCU1QUDI1X0dFMV9SWEQxLAorCU1QUDI2X0dFMV9SWEQyLAorCU1QUDI3X0dFMV9SWEQzLAorCU1QUDMwX0dFMV9SWENUTCwKKwlNUFAzMV9HRTFfUlhDTEssCisJTVBQMzJfR0UxX1RDTEtPVVQsCisJTVBQMzNfR0UxX1RYQ1RMLAogCU1QUDM2X0dQSU8sCQkvKiBSQU06IDA6IDI1NiBNQiwgMTogNTEyIE1CICovCiAJTVBQMzdfR1BJTywJCS8qIFJlc2V0IGJ1dHRvbiAqLwogCU1QUDQzX0dQSU8sCQkvKiBVU0IgQ29weSBidXR0b24gKi8KIAlNUFA0NF9HUElPLAkJLyogQm9hcmQgSUQ6IDA6IFRTLTQxOVUsIDE6IFRTLTQxOSAqLwotCU1QUDQ1X0dQSU8sCQkvKiBKUDE6IDA6IGNvbnNvbGUsIDE6IExDRCAqLworCU1QUDQ1X0dQSU8sCQkvKiBKUDE6IDA6IExDRCwgMTogc2VyaWFsIGNvbnNvbGUgKi8KIAlNUFA0Nl9HUElPLAkJLyogRXh0ZXJuYWwgU0FUQSBIREQxIGVycm9yIGluZGljYXRvciAqLwogCU1QUDQ3X0dQSU8sCQkvKiBFeHRlcm5hbCBTQVRBIEhERDIgZXJyb3IgaW5kaWNhdG9yICovCiAJTVBQNDhfR1BJTywJCS8qIEV4dGVybmFsIFNBVEEgSEREMyBlcnJvciBpbmRpY2F0b3IgKi8KQEAgLTEzMSwxMiArMTM0LDE0IEBACiAKIAlwbV9wb3dlcl9vZmYgPSBxbmFwX3RzeDF4X3Bvd2VyX29mZjsKIAorCWlmIChncGlvX3JlcXVlc3QoUU5BUF9UUzQxWF9KVU1QRVJfSlAxLCAiSlAxIikgPT0gMCkKKwkJZ3Bpb19leHBvcnQoUU5BUF9UUzQxWF9KVU1QRVJfSlAxLCAwKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgdHM0MXhfcGNpX2luaXQodm9pZCkKIHsKIAlpZiAobWFjaGluZV9pc190czQxeCgpKQotCQlraXJrd29vZF9wY2llX2luaXQoKTsKKwkJa2lya3dvb2RfcGNpZV9pbml0KEtXX1BDSUUwKTsKIAogICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3RzeDF4LWNvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC90c3gxeC1jb21tb24uYwppbmRleCA3MjIxYzIwLi5mNzgxMTY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3RzeDF4LWNvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvdHN4MXgtY29tbW9uLmMKQEAgLTc3LDcgKzc3LDcgQEAKIAl9LAogfTsKIAotdm9pZCBxbmFwX3RzeDF4X3JlZ2lzdGVyX2ZsYXNoKHZvaWQpCit2b2lkIF9faW5pdCBxbmFwX3RzeDF4X3JlZ2lzdGVyX2ZsYXNoKHZvaWQpCiB7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8ocW5hcF90c3gxeF9zcGlfc2xhdmVfaW5mbywKIAkJCQlBUlJBWV9TSVpFKHFuYXBfdHN4MXhfc3BpX3NsYXZlX2luZm8pKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvdHN4MXgtY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3RzeDF4LWNvbW1vbi5oCmluZGV4IDlhNTkyOTYuLjdmYTAzNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvdHN4MXgtY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC90c3gxeC1jb21tb24uaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX19BUkNIX0tJUktXT09EX1RTWDFYX0NPTU1PTl9ICiAjZGVmaW5lIF9fQVJDSF9LSVJLV09PRF9UU1gxWF9DT01NT05fSAogCi1leHRlcm4gdm9pZCBxbmFwX3RzeDF4X3JlZ2lzdGVyX2ZsYXNoKHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IHFuYXBfdHN4MXhfcmVnaXN0ZXJfZmxhc2godm9pZCk7CiBleHRlcm4gdm9pZCBxbmFwX3RzeDF4X3Bvd2VyX29mZih2b2lkKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtzODY5NS9wY2kuYyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L3BjaS5jCmluZGV4IDc4NDk5NjYuLjVmY2QwODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta3M4Njk1L3BjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L3BjaS5jCkBAIC0yNjgsOCArMjY4LDggQEAKIAlfX3Jhd193cml0ZWwoMCwgS1M4Njk1X1BDSV9WQSArIEtTODY5NV9QSU9CQUMpOwogCiAJLyogaG9vayBpbiBmYXVsdCBoYW5kbGVycyAqLwotCWhvb2tfZmF1bHRfY29kZSg4LCBrczg2OTVfcGNpX2ZhdWx0LCBTSUdCVVMsICJleHRlcm5hbCBhYm9ydCBvbiBub24tbGluZWZldGNoIik7Ci0JaG9va19mYXVsdF9jb2RlKDEwLCBrczg2OTVfcGNpX2ZhdWx0LCBTSUdCVVMsICJleHRlcm5hbCBhYm9ydCBvbiBub24tbGluZWZldGNoIik7CisJaG9va19mYXVsdF9jb2RlKDgsIGtzODY5NV9wY2lfZmF1bHQsIFNJR0JVUywgMCwgImV4dGVybmFsIGFib3J0IG9uIG5vbi1saW5lZmV0Y2giKTsKKwlob29rX2ZhdWx0X2NvZGUoMTAsIGtzODY5NV9wY2lfZmF1bHQsIFNJR0JVUywgMCwgImV4dGVybmFsIGFib3J0IG9uIG5vbi1saW5lZmV0Y2giKTsKIH0KIAogc3RhdGljIHZvaWQga3M4Njk1X3Nob3dfcGNpcmVncyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbDcyMDAvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiZDhlYmQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLSMKLSMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCi0jCi0KLSMgT2JqZWN0IGZpbGUgbGlzdHMuCi0KLW9iai15CQkJOj0gY29yZS5vCi1vYmotbQkJCTo9Ci1vYmotbgkJCTo9Ci1vYmotCQkJOj0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1sNzIwMC9NYWtlZmlsZS5ib290CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzcyZWNiLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbDcyMDAvTWFrZWZpbGUuYm9vdAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotICAgenJlbGFkZHIteQk6PSAweGYwMDA4MDAwCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbDcyMDAvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1sNzIwMC9jb3JlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwZDIzMjQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9jb3JlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoKLSAqICBsaW51eC9hcmNoL2FybS9tbS9tbS1sdXNsNzIwMC5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwMCBTdGV2ZSBIaWxsIChzamhpbGxAY290dy5jb20pCi0gKgotICogIEV4dHJhIE1NIHJvdXRpbmVzIGZvciBMNzIwMCBhcmNoaXRlY3R1cmUKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLQotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0vKgotICogSVJRIGJhc2UgcmVnaXN0ZXIKLSAqLwotI2RlZmluZQlJUlFfQkFTRQkoSU9fQkFTRV8yICsgMHgxMDAwKQotCi0vKiAKLSAqIE5vcm1hbCBJUlEgcmVnaXN0ZXJzCi0gKi8KLSNkZWZpbmUgSVJRX1NUQVRVUwkoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChJUlFfQkFTRSArIDB4MDAwKSkKLSNkZWZpbmUgSVJRX1JBV1NUQVRVUwkoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChJUlFfQkFTRSArIDB4MDA0KSkKLSNkZWZpbmUgSVJRX0VOQUJMRQkoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChJUlFfQkFTRSArIDB4MDA4KSkKLSNkZWZpbmUgSVJRX0VOQUJMRUNMRUFSCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKElSUV9CQVNFICsgMHgwMGMpKQotI2RlZmluZSBJUlFfU09GVAkoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChJUlFfQkFTRSArIDB4MDEwKSkKLSNkZWZpbmUgSVJRX1NPVVJDRVNFTAkoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChJUlFfQkFTRSArIDB4MDE4KSkKLQotLyogCi0gKiBGYXN0IElSUSByZWdpc3RlcnMKLSAqLwotI2RlZmluZSBGSVFfU1RBVFVTCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKElSUV9CQVNFICsgMHgxMDApKQotI2RlZmluZSBGSVFfUkFXU1RBVFVTCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKElSUV9CQVNFICsgMHgxMDQpKQotI2RlZmluZSBGSVFfRU5BQkxFCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKElSUV9CQVNFICsgMHgxMDgpKQotI2RlZmluZSBGSVFfRU5BQkxFQ0xFQVIJKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoSVJRX0JBU0UgKyAweDEwYykpCi0jZGVmaW5lIEZJUV9TT0ZUCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKElSUV9CQVNFICsgMHgxMTApKQotI2RlZmluZSBGSVFfU09VUkNFU0VMCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKElSUV9CQVNFICsgMHgxMTgpKQotCi1zdGF0aWMgdm9pZCBsNzIwMF9tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCUlSUV9FTkFCTEVDTEVBUiA9IDEgPDwgaXJxOwotfQotCi1zdGF0aWMgdm9pZCBsNzIwMF91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JSVJRX0VOQUJMRSA9IDEgPDwgaXJxOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGw3MjAwX2lycV9jaGlwID0gewotCS5hY2sJCT0gbDcyMDBfbWFza19pcnEsCi0JLm1hc2sJCT0gbDcyMDBfbWFza19pcnEsCi0JLnVubWFzawkJPSBsNzIwMF91bm1hc2tfaXJxCi19OwotIAotc3RhdGljIHZvaWQgX19pbml0IGw3MjAwX2luaXRfaXJxKHZvaWQpCi17Ci0JaW50IGlycTsKLQotCUlSUV9FTkFCTEVDTEVBUiA9IDB4ZmZmZmZmZmY7CS8qIGNsZWFyIGFsbCBpbnRlcnJ1cHQgZW5hYmxlcyAqLwotCUZJUV9FTkFCTEVDTEVBUiA9IDB4ZmZmZmZmZmY7CS8qIGNsZWFyIGFsbCBmYXN0IGludGVycnVwdCBlbmFibGVzICovCi0KLQlmb3IgKGlycSA9IDA7IGlycSA8IE5SX0lSUVM7IGlycSsrKSB7Ci0JCXNldF9pcnFfY2hpcChpcnEsICZsNzIwMF9pcnFfY2hpcCk7Ci0JCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEKTsKLQkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2xldmVsX2lycSk7Ci0JfQotCi0JaW5pdF9GSVEoKTsKLX0KLQotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBsNzIwMF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKLQl7IElPX0JBU0UsCUlPX1NUQVJULAlJT19TSVpFLAlNVF9ERVZJQ0UgfSwKLQl7IElPX0JBU0VfMiwJSU9fU1RBUlRfMiwJSU9fU0laRV8yLAlNVF9ERVZJQ0UgfSwKLQl7IEFVWF9CQVNFLCAgICAgQVVYX1NUQVJULCAgICAgIEFVWF9TSVpFLCAgICAgICBNVF9ERVZJQ0UgfSwKLQl7IEZMQVNIMV9CQVNFLCAgRkxBU0gxX1NUQVJULCAgIEZMQVNIMV9TSVpFLCAgICBNVF9ERVZJQ0UgfSwKLQl7IEZMQVNIMl9CQVNFLCAgRkxBU0gyX1NUQVJULCAgIEZMQVNIMl9TSVpFLCAgICBNVF9ERVZJQ0UgfQotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGw3MjAwX21hcF9pbyh2b2lkKQotewotCWlvdGFibGVfaW5pdChsNzIwMF9pb19kZXNjLCBBUlJBWV9TSVpFKGw3MjAwX2lvX2Rlc2MpKTsKLX0KLQotTUFDSElORV9TVEFSVChMNzIwMCwgIkxpbmtVcCBTeXN0ZW1zIEw3MjAwIikKLQkvKiBNYWludGFpbmVyOiBTdGV2ZSBIaWxsIC8gU2NvdHQgTWNDb25uZWxsICovCi0JLnBoeXNfaW8JPSAweDgwMDQwMDAwLAotCS5pb19wZ19vZmZzdAk9ICgoMHhkMDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAotCS5tYXBfaW8JCT0gbDcyMDBfbWFwX2lvLAotCS5pbml0X2lycQk9IGw3MjAwX2luaXRfaXJxLAotTUFDSElORV9FTkQKLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvYXV4X3JlZy5oIGIvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvYXV4X3JlZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjcxNTU4Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL2F1eF9yZWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9hdXhfcmVnLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgU3RldmUgSGlsbCAoc2poaWxsQGNvdHcuY29tKQotICoKLSAqIENoYW5nZWxvZzoKLSAqICAgMDgtMDItMjAwMAlTSkgJQ3JlYXRlZCBmaWxlCi0gKi8KLSNpZm5kZWYgX0FTTV9BUkNIX0FVWFJFR19ICi0jZGVmaW5lIF9BU01fQVJDSF9BVVhSRUdfSAotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0jZGVmaW5lIGw3MjAwYXV4X3JlZwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKEFVWF9CQVNFKSkKLQotLyoKLSAqIEF1eGlsbGFyeSByZWdpc3RlciB2YWx1ZXMKLSAqLwotI2RlZmluZSBBVVhfQ0xFQVIJCTB4MDAwMDAwMDAKLSNkZWZpbmUgQVVYX0RJQUdfTEVEX09OCQkweDAwMDAwMDAyCi0jZGVmaW5lIEFVWF9SVFNfVUFSVDEJCTB4MDAwMDAwMDQKLSNkZWZpbmUgQVVYX0RUUl9VQVJUMQkJMHgwMDAwMDAwOAotI2RlZmluZSBBVVhfS0JEX0NPTFVNTl8xMl9ISUdICTB4MDAwMDAwMTAKLSNkZWZpbmUgQVVYX0tCRF9DT0xVTU5fMTJfT0ZGCTB4MDAwMDAwMjAKLSNkZWZpbmUgQVVYX0tCRF9DT0xVTU5fMTNfSElHSAkweDAwMDAwMDQwCi0jZGVmaW5lIEFVWF9LQkRfQ09MVU1OXzEzX09GRgkweDAwMDAwMDgwCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2OWVkMzQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qIGFyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKLSAqCi0gKiBEZWJ1Z2dpbmcgbWFjcm8gaW5jbHVkZSBoZWFkZXIKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTkgUnVzc2VsbCBLaW5nCi0gKiAgTW92ZWQgZnJvbSBsaW51eC9hcmNoL2FybS9rZXJuZWwvZGVidWcuUyBieSBCZW4gRG9va3MKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSovCi0KLQkJLmVxdQlpb192aXJ0LCBJT19CQVNFCi0JCS5lcXUJaW9fcGh5cywgSU9fU1RBUlQKLQotCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKLQkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKLQkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwotCQltb3ZlcQlccngsICNpb19waHlzCQlAIHBoeXNpY2FsIGJhc2UgYWRkcmVzcwotCQltb3ZuZQlccngsICNpb192aXJ0CQlAIHZpcnR1YWwgYWRkcmVzcwotCQlhZGQJXHJ4LCBccngsICMweDAwMDQ0MDAwCUAgVUFSVDEKLUAJCWFkZAlccngsIFxyeCwgIzB4MDAwNDUwMDAJQCBVQVJUMgotCQkuZW5kbQotCi0JCS5tYWNybwlzZW5kdWFydCxyZCxyeAotCQlzdHIJXHJkLCBbXHJ4LCAjMHgwXQlAIFVBUlREUgotCQkuZW5kbQotCi0JCS5tYWNybwl3YWl0dWFydCxyZCxyeAotMTAwMToJCWxkcglccmQsIFtccngsICMweDE4XQlAIFVBUlRGTEcKLQkJdHN0CVxyZCwgIzEgPDwgNQkJQCBVQVJURkxHVVRYRkYgLSAxIHdoZW4gZnVsbAotCQlibmUJMTAwMWIKLQkJLmVuZG0KLQotCQkubWFjcm8JYnVzeXVhcnQscmQscngKLTEwMDE6CQlsZHIJXHJkLCBbXHJ4LCAjMHgxOF0JQCBVQVJURkxHCi0JCXRzdAlccmQsICMxIDw8IDMJCUAgVUFSVEZMR1VCVVNZIC0gMSB3aGVuIGJ1c3kKLQkJYm5lCTEwMDFiCi0JCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTcyNmQ5MS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKLSAqCi0gKiBMb3ctbGV2ZWwgSVJRIGhlbHBlciBtYWNyb3MgZm9yIEw3MjAwLWJhc2VkIHBsYXRmb3JtcwotICoKLSAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQotICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICovCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0JCS5lcXUJaXJxX2Jhc2VfYWRkciwJSU9fQkFTRV8yCi0KLQkJLm1hY3JvICBkaXNhYmxlX2ZpcQotCQkuZW5kbQotCi0JCS5tYWNybyAgZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKLQkJLmVuZG0KLQotCQkubWFjcm8gIGFyY2hfcmV0X3RvX3VzZXIsIHRtcDEsIHRtcDIKLQkJLmVuZG0KLQotCQkubWFjcm8gIGdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAotCQltb3YgICAgIFxpcnFzdGF0LCAjaXJxX2Jhc2VfYWRkcgkJQCBWaXJ0IGFkZHIgSVJRIHJlZ3MKLQkJYWRkCVxpcnFzdGF0LCBcaXJxc3RhdCwgIzB4MDAwMDEwMDAJCUAgU3RhdHVzIHJlZwotCQlsZHIgICAgIFxpcnFzdGF0LCBbXGlycXN0YXQsICMwXQkJQCBnZXQgaW50ZXJydXB0cwotCQltb3YgICAgIFxpcnFuciwgIzAKLTEwMDE6CQl0c3QgICAgIFxpcnFzdGF0LCAjMQotCQlhZGRlcSAgIFxpcnFuciwgXGlycW5yLCAjMQotCQltb3ZlcSAgIFxpcnFzdGF0LCBcaXJxc3RhdCwgbHNyICMxCi0JCXRzdGVxICAgXGlycW5yLCAjMzIKLQkJYmVxICAgICAxMDAxYgotCQl0ZXEgICAgIFxpcnFuciwgIzMyCi0JCS5lbmRtCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL2dwX3RpbWVycy5oIGIvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvZ3BfdGltZXJzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiNzA4NmEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvZ3BfdGltZXJzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvZ3BfdGltZXJzLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgU3RldmUgSGlsbCAoc2poaWxsQGNvdHcuY29tKQotICoKLSAqIENoYW5nZWxvZzoKLSAqICAgMDctMjgtMjAwMAlTSkgJQ3JlYXRlZCBmaWxlCi0gKiAgIDA4LTAyLTIwMDAJU0pICVVzZWQgc3RydWN0dXJlIGZvciByZWdpc3RlcnMKLSAqLwotI2lmbmRlZiBfQVNNX0FSQ0hfR1BUSU1FUlNfSAotI2RlZmluZSBfQVNNX0FSQ0hfR1BUSU1FUlNfSAotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0vKgotICogTGF5b3V0IG9mIEw3MjAwIGdlbmVyYWwgcHVycG9zZSB0aW1lciByZWdpc3RlcnMKLSAqLwotc3RydWN0IEdQVF9SZWdzIHsKLQl1bnNpZ25lZCBpbnQgVElNRVJMT0FEOwotCXVuc2lnbmVkIGludCBUSU1FUlZBTFVFOwotCXVuc2lnbmVkIGludCBUSU1FUkNPTlRST0w7Ci0JdW5zaWduZWQgaW50IFRJTUVSQ0xFQVI7Ci19OwotCi0jZGVmaW5lIEdQVF9CQVNFCQkoSU9fQkFTRV8yICsgMHgzMDAwKQotI2RlZmluZSBsNzIwMF90aW1lcjFfcmVncwkoKHZvbGF0aWxlIHN0cnVjdCBHUFRfUmVncyAqKSAoR1BUX0JBU0UpKQotI2RlZmluZSBsNzIwMF90aW1lcjJfcmVncwkoKHZvbGF0aWxlIHN0cnVjdCBHUFRfUmVncyAqKSAoR1BUX0JBU0UgKyAweDIwKSkKLQotLyoKLSAqIEdlbmVyYWwgcmVnaXN0ZXIgdmFsdWVzCi0gKi8KLSNkZWZpbmUJR1BUX1BSRVNDQUxFXzEJCTB4MDAwMDAwMDAKLSNkZWZpbmUJR1BUX1BSRVNDQUxFXzE2CQkweDAwMDAwMDA0Ci0jZGVmaW5lCUdQVF9QUkVTQ0FMRV8yNTYJMHgwMDAwMDAwOAotI2RlZmluZSBHUFRfTU9ERV9GUkVFUlVOCTB4MDAwMDAwMDAKLSNkZWZpbmUgR1BUX01PREVfUEVSSU9ESUMJMHgwMDAwMDA0MAotI2RlZmluZSBHUFRfRU5BQkxFCQkweDAwMDAwMDgwCi0jZGVmaW5lIEdQVF9CWlRPRwkJMHgwMDAwMDEwMAotI2RlZmluZSBHUFRfQlpNT0QJCTB4MDAwMDAyMDAKLSNkZWZpbmUgR1BUX0xPQURfTUFTSyAJCTB4MDAwMGZmZmYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9ncGlvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3YjBhNWQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqICAgICAgYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvZ3Bpby5oCi0gKgotICogICAgICBSZWdpc3RlcnMgYW5kICBoZWxwZXIgZnVuY3Rpb25zIGZvciB0aGUgTDcyMDAgTGluay1VcCBTeXN0ZW1zCi0gKiAgICAgIEdQSU8uCi0gKgotICogICAgICAoQykgQ29weXJpZ2h0IDIwMDAsIFMgQSBNY0Nvbm5lbGwgIChzYW1jY29ubkBjb3R3LmNvbSkKLSAqCi0gKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgotICogIG1vcmUgZGV0YWlscy4KLSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBHUElPX09GRiAgIDB4MDAwMDUwMDAgIC8qIE9mZnNldCBmcm9tIElPX1NUQVJUIHRvIHRoZSBHUElPIHJlZydzLiAqLwotCi0vKiBJT19TVEFSVCBhbmQgSU9fQkFTRSBhcmUgZGVmaW5lZCBpbiBoYXJkd2FyZS5oICovCi0KLSNkZWZpbmUgR1BJT19TVEFSVCAoSU9fU1RBUlRfMiArIEdQSU9fT0ZGKSAvKiBQaHlzaWNhbCBhZGRyIG9mIHRoZSBHUElPIHJlZy4gKi8KLSNkZWZpbmUgR1BJT19CQVNFICAoSU9fQkFTRV8yICArIEdQSU9fT0ZGKSAvKiBWaXJ0dWFsIGFkZHIgb2YgdGhlIEdQSU8gcmVnLiAqLwotCi0vKiBPZmZzZXRzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBHUElPIGZvciBhbGwgdGhlIHJlZ2lzdGVycy4gKi8KLSNkZWZpbmUgUEFEUl9PRkYgICAgIDB4MDAwCi0jZGVmaW5lIFBBRERSX09GRiAgICAweDAwNAotI2RlZmluZSBQQVNCU1JfT0ZGICAgMHgwMDgKLSNkZWZpbmUgUEFFRU5SX09GRiAgIDB4MDBjCi0jZGVmaW5lIFBBRVNOUl9PRkYgICAweDAxMAotI2RlZmluZSBQQUVTVFJfT0ZGICAgMHgwMTQKLSNkZWZpbmUgUEFJTVJfT0ZGICAgIDB4MDE4Ci0jZGVmaW5lIFBBSU5UX09GRiAgICAweDAxYwotCi0jZGVmaW5lIFBCRFJfT0ZGICAgICAweDAyMAotI2RlZmluZSBQQkREUl9PRkYgICAgMHgwMjQKLSNkZWZpbmUgUEJTQlNSX09GRiAgIDB4MDI4Ci0jZGVmaW5lIFBCSU1SX09GRiAgICAweDAzOAotI2RlZmluZSBQQklOVF9PRkYgICAgMHgwM2MKLQotI2RlZmluZSBQQ0RSX09GRiAgICAgMHgwNDAKLSNkZWZpbmUgUENERFJfT0ZGICAgIDB4MDQ0Ci0jZGVmaW5lIFBDU0JTUl9PRkYgICAweDA0OAotI2RlZmluZSBQQ0lNUl9PRkYgICAgMHgwNTgKLSNkZWZpbmUgUENJTlRfT0ZGICAgIDB4MDVjCi0KLSNkZWZpbmUgUEREUl9PRkYgICAgIDB4MDYwCi0jZGVmaW5lIFBERERSX09GRiAgICAweDA2NAotI2RlZmluZSBQRFNCU1JfT0ZGICAgMHgwNjgKLSNkZWZpbmUgUERFRU5SX09GRiAgIDB4MDZjCi0jZGVmaW5lIFBERVNOUl9PRkYgICAweDA3MAotI2RlZmluZSBQREVTVFJfT0ZGICAgMHgwNzQKLSNkZWZpbmUgUERJTVJfT0ZGICAgIDB4MDc4Ci0jZGVmaW5lIFBESU5UX09GRiAgICAweDA3YwotCi0jZGVmaW5lIFBFRFJfT0ZGICAgICAweDA4MAotI2RlZmluZSBQRUREUl9PRkYgICAgMHgwODQKLSNkZWZpbmUgUEVTQlNSX09GRiAgIDB4MDg4Ci0jZGVmaW5lIFBFRUVOUl9PRkYgICAweDA4YwotI2RlZmluZSBQRUVTTlJfT0ZGICAgMHgwOTAKLSNkZWZpbmUgUEVFU1RSX09GRiAgIDB4MDk0Ci0jZGVmaW5lIFBFSU1SX09GRiAgICAweDA5OAotI2RlZmluZSBQRUlOVF9PRkYgICAgMHgwOWMKLQotLyogRGVmaW5lIHRoZSBHUElPIHJlZ2lzdGVycyBmb3IgdXNlIGJ5IGRldmljZSBkcml2ZXJzIGFuZCB0aGUga2VybmVsLiAqLwotI2RlZmluZSBQQURSICAgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShHUElPX0JBU0UrUEFEUl9PRkYpKQotI2RlZmluZSBQQUREUiAgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShHUElPX0JBU0UrUEFERFJfT0ZGKSkKLSNkZWZpbmUgUEFTQlNSICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoR1BJT19CQVNFK1BBU0JTUl9PRkYpKQotI2RlZmluZSBQQUVFTlIgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShHUElPX0JBU0UrUEFFRU5SX09GRikpCi0jZGVmaW5lIFBBRVNOUiAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKEdQSU9fQkFTRStQQUVTTlJfT0ZGKSkKLSNkZWZpbmUgUEFFU1RSICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoR1BJT19CQVNFK1BBRVNUUl9PRkYpKQotI2RlZmluZSBQQUlNUiAgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShHUElPX0JBU0UrUEFJTVJfT0ZGKSkKLSNkZWZpbmUgUEFJTlQgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoR1BJT19CQVNFK1BBSU5UX09GRikpCi0KLSNkZWZpbmUgUEJEUiAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoR1BJT19CQVNFK1BCRFJfT0ZGKSkKLSNkZWZpbmUgUEJERFIgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoR1BJT19CQVNFK1BCRERSX09GRikpCi0jZGVmaW5lIFBCU0JTUiAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKEdQSU9fQkFTRStQQlNCU1JfT0ZGKSkKLSNkZWZpbmUgUEJJTVIgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoR1BJT19CQVNFK1BCSU1SX09GRikpCi0jZGVmaW5lIFBCSU5UICAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKEdQSU9fQkFTRStQQklOVF9PRkYpKQotCi0jZGVmaW5lIFBDRFIgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKEdQSU9fQkFTRStQQ0RSX09GRikpCi0jZGVmaW5lIFBDRERSICAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKEdQSU9fQkFTRStQQ0REUl9PRkYpKQotI2RlZmluZSBQQ1NCU1IgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShHUElPX0JBU0UrUENTQlNSX09GRikpCi0jZGVmaW5lIFBDSU1SICAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKEdQSU9fQkFTRStQQ0lNUl9PRkYpKQotI2RlZmluZSBQQ0lOVCAgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShHUElPX0JBU0UrUENJTlRfT0ZGKSkKLQotI2RlZmluZSBQRERSICAgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShHUElPX0JBU0UrUEREUl9PRkYpKQotI2RlZmluZSBQREREUiAgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShHUElPX0JBU0UrUERERFJfT0ZGKSkKLSNkZWZpbmUgUERTQlNSICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoR1BJT19CQVNFK1BEU0JTUl9PRkYpKQotI2RlZmluZSBQREVFTlIgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShHUElPX0JBU0UrUERFRU5SX09GRikpCi0jZGVmaW5lIFBERVNOUiAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKEdQSU9fQkFTRStQREVTTlJfT0ZGKSkKLSNkZWZpbmUgUERFU1RSICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoR1BJT19CQVNFK1BERVNUUl9PRkYpKQotI2RlZmluZSBQRElNUiAgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShHUElPX0JBU0UrUERJTVJfT0ZGKSkKLSNkZWZpbmUgUERJTlQgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoR1BJT19CQVNFK1BESU5UX09GRikpCi0KLSNkZWZpbmUgUEVEUiAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoR1BJT19CQVNFK1BFRFJfT0ZGKSkKLSNkZWZpbmUgUEVERFIgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoR1BJT19CQVNFK1BFRERSX09GRikpCi0jZGVmaW5lIFBFU0JTUiAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKEdQSU9fQkFTRStQRVNCU1JfT0ZGKSkKLSNkZWZpbmUgUEVFRU5SICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoR1BJT19CQVNFK1BFRUVOUl9PRkYpKQotI2RlZmluZSBQRUVTTlIgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShHUElPX0JBU0UrUEVFU05SX09GRikpCi0jZGVmaW5lIFBFRVNUUiAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKEdQSU9fQkFTRStQRUVTVFJfT0ZGKSkKLSNkZWZpbmUgUEVJTVIgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoR1BJT19CQVNFK1BFSU1SX09GRikpCi0jZGVmaW5lIFBFSU5UICAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKEdQSU9fQkFTRStQRUlOVF9PRkYpKQotCi0jZGVmaW5lIFZFRV9FTiAgICAgICAgIDB4MDIKLSNkZWZpbmUgQkFDS0xJR0hUX0VOICAgMHgwNApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzMTkwOWMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwIFJvYiBTY290dCAocnNjb3R0QG10cm9iLmZkbnMubmV0KQotICogICAgICAgICAgICAgICAgICAgIFN0ZXZlIEhpbGwgKHNqaGlsbEBjb3R3LmNvbSkKLSAqCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGhhcmR3YXJlIGRlZmluaXRpb25zIGZvciB0aGUgCi0gKiBMaW5rVXAgU3lzdGVtcyBMNzIwMCBTT0MgZGV2ZWxvcG1lbnQgYm9hcmQuCi0gKgotICogQ2hhbmdlbG9nOgotICogICAwMi0wMS0yMDAwCSBSUwlDcmVhdGVkIEw3MjAwIHZlcnNpb24sIGRlcml2ZWQgZnJvbSBycGMgY29kZQotICogICAwMy0yMS0yMDAwCVNKSAlDbGVhbmVkIHVwIGZpbGUKLSAqICAgMDQtMjEtMjAwMAkgUlMgCUNoYW5nZWQgbWFwcGluZyBvZiBJL08gaW4gdmlydHVhbCBzcGFjZQotICogICAwNC0yNS0yMDAwCVNKSAlSZW1vdmVkIHVudXNlZCBzeW1ib2xzIGFuZCBzdWNoCi0gKiAgIDA1LTA1LTIwMDAJU0pICUNvbXBsZXRlIHJld3JpdGUKLSAqICAgMDctMzEtMjAwMAlTSkgJQWRkZWQgdW5kb2N1bWVudGVkIGRlYnVnIGF1eGlsbGFyeSBwb3J0IHRvCi0gKgkJCWdldCBhdCBsYXN0IHR3byBjb2x1bW5zIGZvciBrZXlib2FyZCBkcml2ZXIKLSAqLwotI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKLSNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9ICi0KLS8qIEhhcmR3YXJlIGFkZHJlc3NlcyBvZiBtYWpvciBhcmVhcy4KLSAqICAqX1NUQVJUIGlzIHRoZSBwaHlzaWNhbCBhZGRyZXNzCi0gKiAgKl9TSVpFICBpcyB0aGUgc2l6ZSBvZiB0aGUgcmVnaW9uCi0gKiAgKl9CQVNFICBpcyB0aGUgdmlydHVhbCBhZGRyZXNzCi0gKi8KLSNkZWZpbmUgUkFNX1NUQVJUCQkweGYwMDAwMDAwCi0jZGVmaW5lIFJBTV9TSVpFCQkweDAyMDAwMDAwCi0jZGVmaW5lIFJBTV9CQVNFCQkweGMwMDAwMDAwCi0KLSNkZWZpbmUgSU9fU1RBUlQJCTB4ODAwMDAwMDAgICAgICAvKiBJL08gKi8KLSNkZWZpbmUgSU9fU0laRQkJCTB4MDEwMDAwMDAKLSNkZWZpbmUgSU9fQkFTRQkJCTB4ZDAwMDAwMDAKLQotI2RlZmluZSBJT19TVEFSVF8yCQkweDkwMDAwMDAwICAgICAgLyogSS9PICovCi0jZGVmaW5lIElPX1NJWkVfMgkJMHgwMTAwMDAwMAotI2RlZmluZSBJT19CQVNFXzIJCTB4ZDEwMDAwMDAKLQotI2RlZmluZSBBVVhfU1RBUlQJCTB4MWEwMDAwMDAgICAgICAvKiBBVVggUE9SVCAqLwotI2RlZmluZSBBVVhfU0laRSAJCTB4MDEwMDAwMDAKLSNkZWZpbmUgQVVYX0JBU0UJCTB4ZDIwMDAwMDAKLQotI2RlZmluZSBGTEFTSDFfU1RBUlQJCTB4MDAwMDAwMDAgICAgICAvKiBGTEFTSCBCQU5LIDEgKi8KLSNkZWZpbmUgRkxBU0gxX1NJWkUgCQkweDAxMDAwMDAwCi0jZGVmaW5lIEZMQVNIMV9CQVNFCQkweGQzMDAwMDAwCi0KLSNkZWZpbmUgRkxBU0gyX1NUQVJUCQkweDEwMDAwMDAwICAgICAgLyogRkxBU0ggQkFOSyAyICovCi0jZGVmaW5lIEZMQVNIMl9TSVpFIAkJMHgwMTAwMDAwMAotI2RlZmluZSBGTEFTSDJfQkFTRQkJMHhkNDAwMDAwMAotCi0jZGVmaW5lIElTQV9TVEFSVAkJMHgyMDAwMDAwMAkvKiBJU0EgKi8KLSNkZWZpbmUgSVNBX1NJWkUJCTB4MjAwMDAwMDAKLSNkZWZpbmUgSVNBX0JBU0UJCTB4ZTAwMDAwMDAKLQotI2RlZmluZSBQQ0lPX0JBU0UJCUlPX0JBU0UKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvaW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc3MGE4OS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9pby5oCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL2lvLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgU3RldmUgSGlsbCAoc2poaWxsQGNvdHcuY29tKQotICoKLSAqIENoYW5nZWxvZzoKLSAqICAwMy0yMS0yMDAwCVNKSAlDcmVhdGVkIGZyb20gYXJjaC9hcm0vbWFjaC1uZXh1c3BjaS9pbmNsdWRlL21hY2gvaW8uaAotICogIDA4LTMxLTIwMDAJU0pICUFkZGVkIGluIElPIGZ1bmN0aW9ucyBuZWNlc3NhcnkgZm9yIG5ldyBkcml2ZXJzCi0gKi8KLSNpZm5kZWYgX19BU01fQVJNX0FSQ0hfSU9fSAotI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9JT19ICi0KLSNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmZmZgotCi0vKgotICogVGhlcmUgYXJlIG5vdCByZWFsIElTQSBub3IgUENJIGJ1c2VzLCBzbyB3ZSBmYWtlIGl0LgotICovCi0jZGVmaW5lIF9faW8oYSkJCV9fdHlwZXNhZmVfaW8oYSkKLSNkZWZpbmUgX19tZW1fcGNpKGEpCShhKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL2lycXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VkZmZkNy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvaXJxcy5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwIFJvYiBTY290dCAocnNjb3R0QG10cm9iLmZkbnMubmV0KQotICogICAgICAgICAgICAgICAgICAgIFN0ZXZlIEhpbGwgKHNqaGlsbEBjb3R3LmNvbSkKLSAqCi0gKiBDaGFuZ2Vsb2c6Ci0gKiAgIDAxLTAyLTIwMDAgUlMJQ3JlYXRlIGw3MjAwIHZlcnNpb24KLSAqICAgMDMtMjgtMjAwMCBTSkgJUmVtb3ZlZCB1bnVzZWQgaW50ZXJydXB0Ci0gKiAgIDA3LTI4LTIwMDAgU0pICUFkZGVkIHBzZXVkby1rZXlib2FyZCBpbnRlcnJ1cHQKLSAqLwotCi0vKgotICogTk9URTogVGhlIHNlY29uZCB0aW1lciAoVGltZXIgMikgaXMgdXNlZCBhcyB0aGUga2V5Ym9hcmQKLSAqICAgICAgIGludGVycnVwdCB3aGVuIHRoZSBrZXlib2FyZCBkcml2ZXIgaXMgZW5hYmxlZC4KLSAqLwotCi0jZGVmaW5lIE5SX0lSUVMgICAgICAgICAgMzIKLQotI2RlZmluZSBJUlFfU1RXRE9HICAgICAgICAwICAgLyogV2F0Y2hkb2cgdGltZXIgKi8KLSNkZWZpbmUgSVJRX1BST0cgICAgICAgICAgMSAgIC8qIFByb2dyYW1tYWJsZSBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgSVJRX0RFQlVHX1JYICAgICAgMiAgIC8qIENvbW0gUnggZGVidWcgKi8KLSNkZWZpbmUgSVJRX0RFQlVHX1RYICAgICAgMyAgIC8qIENvbW0gVHggZGVidWcgKi8KLSNkZWZpbmUgSVJRX0dDVEMxICAgICAgICAgNCAgIC8qIFRpbWVyIDEgKi8KLSNkZWZpbmUgSVJRX0dDVEMyICAgICAgICAgNSAgIC8qIFRpbWVyIDIgLyBLZXlib2FyZCAqLwotI2RlZmluZSBJUlFfRE1BICAgICAgICAgICA2ICAgLyogRE1BIGNvbnRyb2xsZXIgKi8KLSNkZWZpbmUgSVJRX0NMQ0QgICAgICAgICAgNyAgIC8qIENvbG9yIExDRCBjb250cm9sbGVyICovCi0jZGVmaW5lIElSUV9TTV9SWCAgICAgICAgIDggICAvKiBTbWFydCBjYXJkICovCi0jZGVmaW5lIElSUV9TTV9UWCAgICAgICAgIDkgICAvKiBTbWFydCBjYXJ0ICovCi0jZGVmaW5lIElSUV9TTV9SU1QgICAgICAgMTAgICAvKiBTbWFydCBjYXJkICovCi0jZGVmaW5lIElSUV9TSUIgICAgICAgICAgMTEgICAvKiBTZXJpYWwgSW50ZXJmYWNlIEJ1cyAqLwotI2RlZmluZSBJUlFfTU1DICAgICAgICAgIDEyICAgLyogTXVsdGlNZWRpYUNhcmQgKi8KLSNkZWZpbmUgSVJRX1NTUDEgICAgICAgICAxMyAgIC8qIFN5bmNocm9ub3VzIFNlcmlhbCBQb3J0IDEgKi8KLSNkZWZpbmUgSVJRX1NTUDIgICAgICAgICAxNCAgIC8qIFN5bmNocm9ub3VzIFNlcmlhbCBQb3J0IDEgKi8KLSNkZWZpbmUgSVJRX1NQSSAgICAgICAgICAxNSAgIC8qIFNQSSBzbGF2ZSAqLwotI2RlZmluZSBJUlFfVUFSVF8xICAgICAgIDE2ICAgLyogVUFSVCAxICovCi0jZGVmaW5lIElSUV9VQVJUXzIgICAgICAgMTcgICAvKiBVQVJUIDIgKi8KLSNkZWZpbmUgSVJRX0lSREEgICAgICAgICAxOCAgIC8qIElSREEgKi8KLSNkZWZpbmUgSVJRX1JUQ19USUNLICAgICAxOSAgIC8qIFJlYWwgVGltZSBDbG9jayB0aWNrICovCi0jZGVmaW5lIElSUV9SVENfQUxBUk0gICAgMjAgICAvKiBSZWFsIFRpbWUgQ2xvY2sgYWxhcm0gKi8KLSNkZWZpbmUgSVJRX0dQSU8gICAgICAgICAyMSAgIC8qIEdlbmVyYWwgUHVycG9zZSBJTyAqLwotI2RlZmluZSBJUlFfR1BJT19ETUEgICAgIDIyICAgLyogR2VuZXJhbCBQdXJwb3NlIElPLCBETUEgKi8KLSNkZWZpbmUgSVJRX00yTSAgICAgICAgICAyMyAgIC8qIE1lbW9yeSB0byBtZW1vcnkgRE1BICAqLwotI2RlZmluZSBJUlFfUkVTRVJWRUQgICAgIDI0ICAgLyogUkVTRVJWRUQsIGRvbid0IHVzZSAqLwotI2RlZmluZSBJUlFfSU5URiAgICAgICAgIDI1ICAgLyogRXh0ZXJuYWwgYWN0aXZlIGxvdyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgSVJRX0lOVDAgICAgICAgICAyNiAgIC8qIEV4dGVybmFsIGFjdGl2ZSBsb3cgaW50ZXJydXB0ICovCi0jZGVmaW5lIElSUV9JTlQxICAgICAgICAgMjcgICAvKiBFeHRlcm5hbCBhY3RpdmUgbG93IGludGVycnVwdCAqLwotI2RlZmluZSBJUlFfSU5UMiAgICAgICAgIDI4ICAgLyogRXh0ZXJuYWwgYWN0aXZlIGxvdyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgSVJRX1VDQjEyMDAgICAgICAyOSAgIC8qIEludGVycnVwdCBnZW5lcmF0ZWQgYnkgVUNCMTIwMCovCi0jZGVmaW5lIElSUV9CQVRfTE8gICAgICAgMzAgICAvKiBMb3cgYmF0ZXJ5IG9yIGV4dGVybmFsIHBvd2VyICovCi0jZGVmaW5lIElSUV9NRURJQV9DSEcgICAgMzEgICAvKiBNZWRpYSBjaGFuZ2UgaW50ZXJydXB0ICovCi0KLS8qCi0gKiBUaGlzIGlzIHRoZSBvZmZzZXQgb2YgdGhlIEZJUSAiSVJRIiBudW1iZXJzCi0gKi8KLSNkZWZpbmUgRklRX1NUQVJUCTY0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmI0MGVkLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAwIFN0ZXZlIEhpbGwgKHNqaGlsbEBjb3R3LmNvbSkKLSAqIENvcHlyaWdodCAoYykgMjAwMCBSb2IgU2NvdHQgKHJzY290dEBtdHJvYi5mZG5zLm5ldCkKLSAqCi0gKiBDaGFuZ2Vsb2c6Ci0gKiAgMDMtMTMtMjAwMAlTSkgJQ3JlYXRlZAotICogIDA0LTEzLTIwMDAgIFJTICAgICAgQ2hhbmdlZCBidXMgbWFjcm9zIGZvciBuZXcgYWRkcgotICogIDA1LTAzLTIwMDAgIFNKSCAgICAgUmVtb3ZlZCBidXMgbWFjcm9zIGFuZCBmaXhlZCB2aXJ0X3RvX3BoeXMgbWFjcm8KLSAqLwotI2lmbmRlZiBfX0FTTV9BUkNIX01FTU9SWV9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfTUVNT1JZX0gKLQotLyoKLSAqIFBoeXNpY2FsIERSQU0gb2Zmc2V0IG9uIHRoZSBMNzIwMCBTREIuCi0gKi8KLSNkZWZpbmUgUEhZU19PRkZTRVQgICAgIFVMKDB4ZjAwMDAwMDApCi0KLS8qCi0gKiBDYWNoZSBmbHVzaGluZyBhcmVhIC0gUk9NCi0gKi8KLSNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDQwMDAwMDAwCi0jZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZGYwMDAwMDAKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9wbXBjb24uaCBiL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL3BtcGNvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTU5ODcxLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL3BtcGNvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogIGFyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL3BtcGNvbi5oCi0gKgotICogICBSZWdpc3RlcnMgYW5kICBoZWxwZXIgZnVuY3Rpb25zIGZvciB0aGUgTDcyMDAgTGluay1VcCBTeXN0ZW1zCi0gKiAgIERDL0RDIGNvbnZlcnRlciByZWdpc3Rlci4KLSAqCi0gKiAgIChDKSBDb3B5cmlnaHQgMjAwMCwgUyBBIE1jQ29ubmVsbCAgKHNhbWNjb25uQGNvdHcuY29tKQotICoKLSAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCi0gKiAgbW9yZSBkZXRhaWxzLgotICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIFBNUENPTl9PRkYgMHgwMDAwNjAwMCAgLyogT2Zmc2V0IGZyb20gSU9fU1RBUlRfMi4gKi8KLQotLyogSU9fU1RBUlRfMiBhbmQgSU9fQkFTRV8yIGFyZSBkZWZpbmVkIGluIGhhcmR3YXJlLmggKi8KLQotI2RlZmluZSBQTVBDT05fU1RBUlQgKElPX1NUQVJUXzIgKyBQTVBDT05fT0ZGKSAgLyogUGh5c2ljYWwgYWRkcmVzcyBvZiByZWcuICovCi0jZGVmaW5lIFBNUENPTl9CQVNFICAoSU9fQkFTRV8yICArIFBNUENPTl9PRkYpICAvKiBWaXJ0dWFsIGFkZHJlc3Mgb2YgcmVnLiAqLwotCi0KLSNkZWZpbmUgUE1QQ09OICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShQTVBDT05fQkFTRSkpCi0KLSNkZWZpbmUgUFdNMl81MENZQ0xFIDB4ODAwCi0jZGVmaW5lIENPTlRSQVNUICAgICAweDkKLQotI2RlZmluZSBQV00xSCAoQ09OVFJBU1QpCi0jZGVmaW5lIFBXTTFMIChDT05UUkFTVCA8PCA0KQotCi0jZGVmaW5lIFBNUENPTl9WQUxVRSAgKFBXTTJfNTBDWUNMRSB8IFBXTTFMIHwgUFdNMUgpIAotCQotLyogUE1QQ09OID0gMHg4MTE7ICAgLy8gdG9vIGxpZ2h0IGFuZCBmdXp6eQotICogUE1QQ09OID0gMHg4NDQ7ICAgCi0gKiBQTVBDT04gPSAweDg2NjsgICAvLyBiZXR0ZXIgY29sb3IgcG9vciBkZXB0aAotICogUE1QQ09OID0gMHg4ODg7ICAgLy8gRGFya2VyIGJ1dCBiZXR0ZXIgZGVwdGggCi0gKiBQTVBDT04gPSAweDg5OTsgICAvLyBEYXJrZXIgZXZlbiBiZXR0ZXIgZGVwdGgKLSAqIFBNUENPTiA9IDB4OGFhOyAgIC8vIHRvbyBkYXJrIGV2ZW4gYmV0dGVyIGRlcHRoCi0gKiBQTVBDT04gPSAwWDhjYzsgICAvLyBXYXkgdG9vIGRhcmsKLSAqLwotCi0vKiBBcyBDT05UUkFTVCB2YWx1ZSBpbmNyZWFzZXMgdGhlIGdyZWF0ZXIgdGhlIGRlcHRoIHBlcmNlcHRpb24gYW5kCi0gKiB0aGUgZGFya2VyIHRoZSBjb2xvcnMuCi0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL3BtdS5oIGIvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvcG11LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyZGE3YWUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvcG11LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogIGFyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL3BtdS5oCi0gKgotICogICBSZWdpc3RlcnMgYW5kICBoZWxwZXIgZnVuY3Rpb25zIGZvciB0aGUgTDcyMDAgTGluay1VcCBTeXN0ZW1zCi0gKiAgIFBvd2VyIE1hbmFnZW1lbnQgVW5pdCAoUE1VKS4KLSAqCi0gKiAgIChDKSBDb3B5cmlnaHQgMjAwMCwgUyBBIE1jQ29ubmVsbCAgKHNhbWNjb25uQGNvdHcuY29tKQotICoKLSAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCi0gKiAgbW9yZSBkZXRhaWxzLgotICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIFBNVV9PRkYgICAweDAwMDUwMDAwICAvKiBPZmZzZXQgZnJvbSBJT19TVEFSVCB0byB0aGUgUE1VIHJlZ2lzdGVycy4gKi8KLQotLyogSU9fU1RBUlQgYW5kIElPX0JBU0UgYXJlIGRlZmluZWQgaW4gaGFyZHdhcmUuaCAqLwotCi0jZGVmaW5lIFBNVV9TVEFSVCAoSU9fU1RBUlQgKyBQTVVfT0ZGKSAgLyogUGh5c2ljYWwgYWRkci4gb2YgdGhlIFBNVSByZWcuICovCi0jZGVmaW5lIFBNVV9CQVNFICAoSU9fQkFTRSAgKyBQTVVfT0ZGKSAgLyogVmlydHVhbCBhZGRyLiBvZiB0aGUgUE1VIHJlZy4gKi8KLQotCi0vKiBEZWZpbmUgdGhlIFBNVSByZWdpc3RlcnMgZm9yIHVzZSBieSBkZXZpY2UgZHJpdmVycyBhbmQgdGhlIGtlcm5lbC4gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgICB1bnNpZ25lZCBpbnQgQ1VSUkVOVDsgIC8qIEN1cnJlbnQgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLwotICAgICB1bnNpZ25lZCBpbnQgTkVYVDsgICAgIC8qIE5leHQgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLwotICAgICB1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQ7Ci0gICAgIHVuc2lnbmVkIGludCBSVU47ICAgICAgLyogUnVuIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KLSAgICAgdW5zaWduZWQgaW50IENPTU07ICAgICAvKiBDb25maWd1cmF0aW9uIGNvbW1hbmQgcmVnaXN0ZXIgKi8KLSAgICAgdW5zaWduZWQgaW50IFNEUkFNOyAgICAvKiBTRFJBTSBjb25maWd1cmF0aW9uIGJ5cGFzcyByZWdpc3RlciAqLwotfSBwbXVfaW50ZXJmYWNlOwotCi0jZGVmaW5lIFBNVSAoKHZvbGF0aWxlIHBtdV9pbnRlcmZhY2UgKikoUE1VX0JBU0UpKQotCi0KLS8qIE1hY3JvJ3MgZm9yIHJlYWRpbmcgdGhlIGNvbW1vbiByZWdpc3RlciBmaWVsZHMuICovCi0KLSNkZWZpbmUgR0VUX1RSQU5TT1AocmVnKSAgKChyZWcgPj4gMjUpICYgMHgwMykgLyogQml0cyAyNi0yNSAqLwotI2RlZmluZSBHRVRfT1NDRU4ocmVnKSAgICAoKHJlZyA+PiAxNikgJiAweDAxKQotI2RlZmluZSBHRVRfT1NDTVVYKHJlZykgICAoKHJlZyA+PiAxNSkgJiAweDAxKQotI2RlZmluZSBHRVRfUExMTVVMKHJlZykgICAoKHJlZyA+PiAgOSkgJiAweDNmKSAvKiBCaXRzIDE0LTkgKi8KLSNkZWZpbmUgR0VUX1BMTEVOKHJlZykgICAgKChyZWcgPj4gIDgpICYgMHgwMSkKLSNkZWZpbmUgR0VUX1BMTE1VWChyZWcpICAgKChyZWcgPj4gIDcpICYgMHgwMSkKLSNkZWZpbmUgR0VUX0JDTEtfRElWKHJlZykgKChyZWcgPj4gIDMpICYgMHgwMykgLyogQml0cyA0LTMgKi8KLSNkZWZpbmUgR0VUX1NEUkJfU0VMKHJlZykgKChyZWcgPj4gIDIpICYgMHgwMSkKLSNkZWZpbmUgR0VUX1NEUkZfU0VMKHJlZykgKChyZWcgPj4gIDEpICYgMHgwMSkKLSNkZWZpbmUgR0VUX0ZBU1RCVVMocmVnKSAgKHJlZyAmIDB4MSkKLQotLyogQ0ZHX05FWFQgcmVnaXN0ZXIgKi8KLQotI2RlZmluZSBDRkdfTkVYVF9DTE9DS1JFQ09WRVJZICgoUE1VLT5ORVhUID4+IDE4KSAmIDB4N2YpICAgLyogQml0cyAyNC0xOCAqLwotI2RlZmluZSBDRkdfTkVYVF9JTlRSRVQgICAgICAgICgoUE1VLT5ORVhUID4+IDE3KSAmIDB4MDEpCi0jZGVmaW5lIENGR19ORVhUX1NEUl9TVE9QICAgICAgKChQTVUtPk5FWFQgPj4gIDYpICYgMHgwMSkKLSNkZWZpbmUgQ0ZHX05FWFRfU1lTQ0xLRU4gICAgICAoKFBNVS0+TkVYVCA+PiAgNSkgJiAweDAxKQotCi0vKiBVc2VmdWwgZmllbGQgdmFsdWVzIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29uc3RydWN0IHRoZQotICogQ0ZHX05FWFQgYW5kIENGR19SVU4gcmVnaXN0ZXJzLgotICovCi0KLSNkZWZpbmUgVFJBTlNPUF9OT1AgICAgICAwPDwyNSAgLyogTk9DSEFOR0VfTk9TVEFMTCAqLwotI2RlZmluZSBOT0NIQU5HRV9TVEFMTCAgIDE8PDI1Ci0jZGVmaW5lIENIQU5HRV9OT1NUQUxMICAgMjw8MjUKLSNkZWZpbmUgQ0hBTkdFX1NUQUxMICAgICAzPDwyNQotCi0jZGVmaW5lIElOVFJFVCAgICAgICAgICAgMTw8MTcKLSNkZWZpbmUgT1NDRU4gICAgICAgICAgICAxPDwxNgotI2RlZmluZSBPU0NNVVggICAgICAgICAgIDE8PDE1Ci0KLS8qIFBMTCBmcmVxdWVuY2llcyAqLwotCi0jZGVmaW5lIFBMTE1VTF8wICAgICAgICAgMDw8OSAgICAgICAgIC8qICAzLjY4NjQgTUh6ICovCi0jZGVmaW5lIFBMTE1VTF8xICAgICAgICAgMTw8OSAgICAgICAgIC8qICA/Pz8/Pz8gTUh6ICovCi0jZGVmaW5lIFBMTE1VTF81ICAgICAgICAgNTw8OSAgICAgICAgIC8qICAxOC40MzIgTUh6ICovCi0jZGVmaW5lIFBMTE1VTF8xMCAgICAgICAxMDw8OSAgICAgICAgIC8qICAzNi44NjQgTUh6ICovCi0jZGVmaW5lIFBMTE1VTF8xOCAgICAgICAxODw8OSAgICAgICAgIC8qICA/Pz8/Pz8gTUh6ICovCi0jZGVmaW5lIFBMTE1VTF8yMCAgICAgICAyMDw8OSAgICAgICAgIC8qICA3My43MjggTUh6ICovCi0jZGVmaW5lIFBMTE1VTF8zMiAgICAgICAzMjw8OSAgICAgICAgIC8qICA/Pz8/Pz8gTUh6ICovCi0jZGVmaW5lIFBMTE1VTF8zNSAgICAgICAzNTw8OSAgICAgICAgIC8qIDEyOS4wMjQgTUh6ICovCi0jZGVmaW5lIFBMTE1VTF8zNiAgICAgICAzNjw8OSAgICAgICAgIC8qICA/Pz8/Pz8gTUh6ICovCi0jZGVmaW5lIFBMTE1VTF8zOSAgICAgICAzOTw8OSAgICAgICAgIC8qICA/Pz8/Pz8gTUh6ICovCi0jZGVmaW5lIFBMTE1VTF80MCAgICAgICA0MDw8OSAgICAgICAgIC8qIDE0Ny40NTYgTUh6ICovCi0KLS8qIENsb2NrIHJlY292ZXJ5IHRpbWVzICovCi0KLSNkZWZpbmUgQ1JDTE9DS18xICAgICAgICAxPDwxOAotI2RlZmluZSBDUkNMT0NLXzIgICAgICAgIDI8PDE4Ci0jZGVmaW5lIENSQ0xPQ0tfNCAgICAgICAgNDw8MTgKLSNkZWZpbmUgQ1JDTE9DS184ICAgICAgICA4PDwxOAotI2RlZmluZSBDUkNMT0NLXzE2ICAgICAgMTY8PDE4Ci0jZGVmaW5lIENSQ0xPQ0tfMzIgICAgICAzMjw8MTgKLSNkZWZpbmUgQ1JDTE9DS182MyAgICAgIDYzPDwxOAotI2RlZmluZSBDUkNMT0NLXzEyNyAgICAxMjc8PDE4Ci0KLSNkZWZpbmUgUExMRU4gICAgICAgICAgICAxPDw4Ci0jZGVmaW5lIFBMTE1VWCAgICAgICAgICAgMTw8NwotI2RlZmluZSBTRFJfU1RPUCAgICAgICAgIDE8PDYKLSNkZWZpbmUgU1lTQ0xLRU4gICAgICAgICAxPDw1Ci0KLSNkZWZpbmUgQkNMS19ESVZfNCAgICAgICAyPDwzCi0jZGVmaW5lIEJDTEtfRElWXzIgICAgICAgMTw8MwotI2RlZmluZSBCQ0xLX0RJVl8xICAgICAgIDA8PDMKLQotI2RlZmluZSBTRFJCX1NFTCAgICAgICAgIDE8PDIKLSNkZWZpbmUgU0RSRl9TRUwgICAgICAgICAxPDwxCi0jZGVmaW5lIEZBU1RCVVMgICAgICAgICAgMTw8MAotCi0KLS8qIENGR19TRFJBTSAqLwotCi0jZGVmaW5lIFNEUlJFRkZRICAgICAgICAgMTw8MCAgLyogT25seSBpZiBTRFJTVE9QUlEgaXMgbm90IHNldC4gKi8KLSNkZWZpbmUgU0RSUkVGQUNLICAgICAgICAxPDwxICAvKiBSZWFkLW9ubHkgKi8KLSNkZWZpbmUgU0RSU1RPUFJRICAgICAgICAxPDwyICAvKiBPbmx5IGlmIFNEUlJFRkZRIGlzIG5vdCBzZXQuICovCi0jZGVmaW5lIFNEUlNUT1BBQ0sgICAgICAgMTw8MyAgLyogUmVhZC1vbmx5ICovCi0jZGVmaW5lIFBJQ0VOICAgICAgICAgICAgMTw8NCAgLyogRW5hYmxlIENvLXByb2Nlc29yICovCi0jZGVmaW5lIFBJQ1RFU1QgICAgICAgICAgMTw8NQotCi0jZGVmaW5lIEdFVF9TRFJSRUZGUSAgICAoKFBNVS0+U0RSQU0gPj4gMCkgJiAweDAxKQotI2RlZmluZSBHRVRfU0RSUkVGQUNLICAgKChQTVUtPlNEUkFNID4+IDEpICYgMHgwMSkgLyogUmVhZC1vbmx5ICovCi0jZGVmaW5lIEdFVF9TRFJTVE9QUlEgICAoKFBNVS0+U0RSQU0gPj4gMikgJiAweDAxKQotI2RlZmluZSBHRVRfU0RSU1RPUEFDSyAgKChQTVUtPlNEUkFNID4+IDMpICYgMHgwMSkgLyogUmVhZC1vbmx5ICovCi0jZGVmaW5lIEdFVF9QSUNFTiAgICAgICAoKFBNVS0+U0RSQU0gPj4gNCkgJiAweDAxKQotI2RlZmluZSBHRVRfUElDVEVTVCAgICAgKChQTVUtPlNEUkFNID4+IDUpICYgMHgwMSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL3NlcmlhbC5oIGIvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvc2VyaWFsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkYzA1ZTUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvc2VyaWFsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvc2VyaWFsLmgKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAgUm9iIFNjb3R0IChyc2NvdHRAbXRyb2IuZmRucy5uZXQpCi0gKiAgICAgICAgICAgICAgICAgICAgU3RldmUgSGlsbCAoc2poaWxsQGNvdHcuY29tKQotICoKLSAqIENoYW5nZWxvZzoKLSAqICAwMy0yMC0yMDAwICBTSkggICAgIENyZWF0ZWQKLSAqICAwMy0yNi0yMDAwICBTSkggICAgIEFkZGVkIGZsYWdzIGZvciBzZXJpYWwgcG9ydHMKLSAqICAwMy0yNy0yMDAwICBTSkggICAgIENvcnJlY3RlZCBCQVNFX0JBVUQgdmFsdWUKLSAqICAwNC0xNC0yMDAwICBSUyAgICAgIE1hZGUgcmVnaXN0ZXIgYWRkciBkZXBlbmRlbnQgb24gSU9fQkFTRQotICogIDA1LTAzLTIwMDAgIFNKSCAgICAgQ29tcGxldGUgcmV3cml0ZQotICogIDA1LTA5LTIwMDAJU0pICVN0cmlwcGVkIG91dCBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgc2VyaWFsIHN0dWZmCi0gKiAgICAgICAgICAgICAgICAgICAgICBhbmQgcGxhY2VkIGl0IGluIGEgc2VwYXJhdGUgZmlsZQotICogIDA3LTI4LTIwMDAJU0pICU1vdmVkIGJhc2UgYmF1ZCByYXRlIHZhcmlhYmxlCi0gKi8KLSNpZm5kZWYgX19BU01fQVJDSF9TRVJJQUxfSAotI2RlZmluZSBfX0FTTV9BUkNIX1NFUklBTF9ICi0KLS8qCi0gKiBUaGlzIGFzc3VtZXMgeW91IGhhdmUgYSAzLjY4NjQgTUh6IGNsb2NrIGZvciB5b3VyIFVBUlQuCi0gKi8KLSNkZWZpbmUgQkFTRV9CQVVECTM2ODY0MDAKLQotLyoKLSAqIFN0YW5kYXJkIENPTSBmbGFncwotICovCi0jZGVmaW5lIFNURF9DT01fRkxBR1MgKEFTWU5DX0JPT1RfQVVUT0NPTkYgfCBBU1lOQ19TS0lQX1RFU1QpCi0KLSNkZWZpbmUgU1REX1NFUklBTF9QT1JUX0RFRk5TCQlcCi0JLyogTUFHSUMgVUFSVCBDTEsgICBQT1JUICAgICAgIElSUSAgICAgRkxBR1MgKi8JCQlcCi0JeyAwLCBCQVNFX0JBVUQsIFVBUlQxX0JBU0UsIElSUV9VQVJUXzEsIFNURF9DT01fRkxBR1MgfSwgIC8qIHR0eUxVMCAqLyBcCi0JeyAwLCBCQVNFX0JBVUQsIFVBUlQyX0JBU0UsIElSUV9VQVJUXzIsIFNURF9DT01fRkxBR1MgfSwgIC8qIHR0eUxVMSAqLyBcCi0KLSNkZWZpbmUgRVhUUkFfU0VSSUFMX1BPUlRfREVGTlMKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9zZXJpYWxfbDcyMDAuaCBiL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL3NlcmlhbF9sNzIwMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDVmMWM1Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL3NlcmlhbF9sNzIwMC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9zZXJpYWxfbDcyMDAuaAotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMCBTdGV2ZW4gSGlsbCAoc2poaWxsQGNvdHcuY29tKQotICoKLSAqIENoYW5nZWxvZzoKLSAqICAwNS0wOS0yMDAwCVNKSAlDcmVhdGVkCi0gKi8KLSNpZm5kZWYgX19BU01fQVJDSF9TRVJJQUxfTDcyMDBfSAotI2RlZmluZSBfX0FTTV9BUkNIX1NFUklBTF9MNzIwMF9ICi0KLSNpbmNsdWRlIDxtYWNoL21lbW9yeS5oPgotCi0vKgotICogVGhpcyBhc3N1bWVzIHlvdSBoYXZlIGEgMy42ODY0IE1IeiBjbG9jayBmb3IgeW91ciBVQVJULgotICovCi0jZGVmaW5lIEJBU0VfQkFVRCAzNjg2NDAwCi0KLS8qCi0gKiBVQVJUIGJhc2UgcmVnaXN0ZXIgYWRkcmVzc2VzCi0gKi8KLSNkZWZpbmUgVUFSVDFfQkFTRQkoSU9fQkFTRSArIDB4MDAwNDQwMDApCi0jZGVmaW5lIFVBUlQyX0JBU0UJKElPX0JBU0UgKyAweDAwMDQ1MDAwKQotCi0vKgotICogVUFSVCByZWdpc3RlciBvZmZzZXRzCi0gKi8KLSNkZWZpbmUgVUFSVERSCQkJMHgwMAkvKiBUeC9SeCBkYXRhICovCi0jZGVmaW5lIFJYU1RBVAkJCTB4MDQJLyogUnggc3RhdHVzICovCi0jZGVmaW5lIEhfVUJSTENSCQkweDA4CS8qIG1vZGUgcmVnaXN0ZXIgaGlnaCAqLwotI2RlZmluZSBNX1VCUkxDUgkJMHgwQwkvKiBtb2RlIHJlZyBtaWQgKE1TQiBvZiBiYXVkKSovCi0jZGVmaW5lIExfVUJSTENSCQkweDEwCS8qIG1vZGUgcmVnIGxvdyAoTFNCIG9mIGJhdWQpKi8KLSNkZWZpbmUgVUFSVENPTgkJCTB4MTQJLyogY29udHJvbCByZWdpc3RlciAqLwotI2RlZmluZSBVQVJURkxHCQkJMHgxOAkvKiBmbGFnIHJlZ2lzdGVyICovCi0jZGVmaW5lIFVBUlRJTlRTVEFUCQkweDFDCS8qIEZJRk8gSVJRIHN0YXR1cyByZWdpc3RlciAqLwotI2RlZmluZSBVQVJUSU5UTUFTSwkJMHgyMAkvKiBGSUZPIElSUSBtYXNrIHJlZ2lzdGVyICovCi0KLS8qCi0gKiBVQVJUIGJhdWQgcmF0ZSByZWdpc3RlciB2YWx1ZXMKLSAqLwotI2RlZmluZSBCUl8xMTAJCQkweDgyNwotI2RlZmluZSBCUl8xMjAwCQkJMHgwNmUKLSNkZWZpbmUgQlJfMjQwMAkJCTB4MDVmCi0jZGVmaW5lIEJSXzQ4MDAJCQkweDAyZgotI2RlZmluZSBCUl85NjAwCQkJMHgwMTcKLSNkZWZpbmUgQlJfMTQ0MDAJCTB4MDBmCi0jZGVmaW5lIEJSXzE5MjAwCQkweDAwYgotI2RlZmluZSBCUl8zODQwMAkJMHgwMDUKLSNkZWZpbmUgQlJfNTc2MDAJCTB4MDAzCi0jZGVmaW5lIEJSXzc2ODAwIAkJMHgwMDIKLSNkZWZpbmUgQlJfMTE1MjAwCQkweDAwMQotCi0vKgotICogUmVjZWl2ZXIgc3RhdHVzIHJlZ2lzdGVyIChSWFNUQVQpIG1hc2sgdmFsdWVzCi0gKi8KLSNkZWZpbmUgUlhTVEFUX05PX0VSUgkJMHgwMAkvKiBObyBlcnJvciAqLwotI2RlZmluZSBSWFNUQVRfRlJNX0VSUgkJMHgwMQkvKiBGcmFtaW5nIGVycm9yICovCi0jZGVmaW5lIFJYU1RBVF9QQVJfRVJSCQkweDAyCS8qIFBhcml0eSBlcnJvciAqLwotI2RlZmluZSBSWFNUQVRfT1ZSX0VSUgkJMHgwNAkvKiBPdmVycnVuIGVycm9yICovCi0KLS8qCi0gKiBIaWdoIGJ5dGUgb2YgVUFSVCBiaXQgcmF0ZSBhbmQgbGluZSBjb250cm9sIHJlZ2lzdGVyIChIX1VCUkxDUikgdmFsdWVzCi0gKi8KLSNkZWZpbmUgVUJSTENSX0JSSwkJMHgwMQkvKiBnZW5lcmF0ZSBicmVhayBvbiB0eCAqLwotI2RlZmluZSBVQlJMQ1JfUEVOCQkweDAyCS8qIGVuYWJsZSBwYXJpdHkgKi8KLSNkZWZpbmUgVUJSTENSX1BESVMJCTB4MDAJLyogZGlzYWJsZSBwYXJpdHkgKi8KLSNkZWZpbmUgVUJSTENSX0VWRU4JCTB4MDQJLyogMT0gZXZlbiBwYXJpdHksMCA9IG9kZCBwYXJpdHkgKi8KLSNkZWZpbmUgVUJSTENSX1NUUDIJCTB4MDgJLyogdHJhbnNtaXQgMiBzdG9wIGJpdHMgKi8KLSNkZWZpbmUgVUJSTENSX0ZJRk8JCTB4MTAJLyogZW5hYmxlIEZJRk8gKi8KLSNkZWZpbmUgVUJSTENSX0xFTjUJCTB4NjAJLyogd29yZCBsZW5ndGg1ICovCi0jZGVmaW5lIFVCUkxDUl9MRU42CQkweDQwCS8qIHdvcmQgbGVuZ3RoNiAqLwotI2RlZmluZSBVQlJMQ1JfTEVONwkJMHgyMAkvKiB3b3JkIGxlbmd0aDcgKi8KLSNkZWZpbmUgVUJSTENSX0xFTjgJCTB4MDAJLyogd29yZCBsZW5ndGg4ICovCi0KLS8qCi0gKiBVQVJUIGNvbnRyb2wgcmVnaXN0ZXIgKFVBUlRDT04pIHZhbHVlcwotICovCi0jZGVmaW5lIFVBUlRDT05fVUFSVEVOCQkweDAxCS8qIEVuYWJsZSBVQVJUICovCi0jZGVmaW5lIFVBUlRDT05fRE1BT05FUlIJMHgwOAkvKiBNYXNrIFJ4RG1hUnEgd2hlbiBlcnJvcnMgb2NjdXIgKi8KLQotLyoKLSAqIFVBUlQgZmxhZyByZWdpc3RlciAoVUFSVEZMRykgbWFzayB2YWx1ZXMKLSAqLwotI2RlZmluZSBVQVJURkxHX1VUWEZGCQkweDIwCS8qIFRyYW5zbWl0IEZJRk8gZnVsbCAqLwotI2RlZmluZSBVQVJURkxHX1VSWEZFCQkweDEwCS8qIFJlY2VpdmVyIEZJRk8gZW1wdHkgKi8KLSNkZWZpbmUgVUFSVEZMR19VQlVTWQkJMHgwOAkvKiBUcmFuc21pdHRlciBidXN5ICovCi0jZGVmaW5lIFVBUlRGTEdfRENECQkweDA0CS8qIERhdGEgY2FycmllciBkZXRlY3QgKi8KLSNkZWZpbmUgVUFSVEZMR19EU1IJCTB4MDIJLyogRGF0YSBzZXQgcmVhZHkgKi8KLSNkZWZpbmUgVUFSVEZMR19DVFMJCTB4MDEJLyogQ2xlYXIgdG8gc2VuZCAqLwotCi0vKgotICogVUFSVCBpbnRlcnJ1cHQgc3RhdHVzL2NsZWFyIHJlZ2lzdGVycyAoVUFSVElOVFNUQVQvQ0xSKSB2YWx1ZXMKLSAqLwotI2RlZmluZSBVQVJUX1RYSU5UCQkweDAxCS8qIFRYIGludGVycnVwdCAqLwotI2RlZmluZSBVQVJUX1JYSU5UCQkweDAyCS8qIFJYIGludGVycnVwdCAqLwotI2RlZmluZSBVQVJUX1JYRVJSSU5UCQkweDA0CS8qIFJYIGVycm9yIGludGVycnVwdCAqLwotI2RlZmluZSBVQVJUX01TSU5UCQkweDA4CS8qIE1vZGVtIFN0YXR1cyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgVUFSVF9VRElOVAkJMHgxMAkvKiBVQVJUIERpc2FibGVkIGludGVycnVwdCAqLwotI2RlZmluZSBVQVJUX0FMTElSUVMJCTB4MWYJLyogQWxsIGludGVycnVwdHMgKi8KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9zaWIuaCBiL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL3NpYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjU3Mjg3Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL3NpYi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqICBhcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9zaWIuaAotICoKLSAqICBSZWdpc3RlcnMgYW5kIGhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBTZXJpYWwgSW50ZXJmYWNlIEJ1cy4KLSAqCi0gKiAgKEMpIENvcHlyaWdodCAyMDAwLCBTIEEgTWNDb25uZWxsICAoc2FtY2Nvbm5AY290dy5jb20pCi0gKgotICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKLSAqICBtb3JlIGRldGFpbHMuCi0gKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgU0lCX09GRiAgIDB4MDAwNDAwMDAgIC8qIE9mZnNldCBmcm9tIElPX1NUQVJUIHRvIHRoZSBTSUIgcmVnJ3MuICovCi0KLS8qIElPX1NUQVJUIGFuZCBJT19CQVNFIGFyZSBkZWZpbmVkIGluIGhhcmR3YXJlLmggKi8KLQotI2RlZmluZSBTSUJfU1RBUlQgKElPX1NUQVJUICsgU0lCX09GRikgLyogUGh5c2ljYWwgYWRkciBvZiB0aGUgU0lCIHJlZy4gKi8KLSNkZWZpbmUgU0lCX0JBU0UgIChJT19CQVNFICArIFNJQl9PRkYpIC8qIFZpcnR1YWwgYWRkciBvZiB0aGUgU0lCIHJlZy4gICovCi0KLS8qIE9mZnNldHMgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIFNJQiBmb3IgYWxsIHRoZSByZWdpc3RlcnMuICovCi0KLS8qIERlZmluZSB0aGUgU0lCIHJlZ2lzdGVycyBmb3IgdXNlIGJ5IGRldmljZSBkcml2ZXJzIGFuZCB0aGUga2VybmVsLiAqLwotCi10eXBlZGVmIHN0cnVjdAotewotICAgICB1bnNpZ25lZCBpbnQgTUNDUjsgICAgLyogU0lCIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgIE9mZnNldDogMHgwMCAqLwotICAgICB1bnNpZ25lZCBpbnQgUkVTMTsgICAgLyogUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldDogMHgwNCAqLwotICAgICB1bnNpZ25lZCBpbnQgTUNEUjA7ICAgLyogU0lCIERhdGEgUmVnaXN0ZXIgMCAgICAgICAgICAgIE9mZnNldDogMHgwOCAqLwotICAgICB1bnNpZ25lZCBpbnQgTUNEUjE7ICAgLyogU0lCIERhdGEgUmVnaXN0ZXIgMSAgICAgICAgICAgIE9mZnNldDogMHgwYyAqLwotICAgICB1bnNpZ25lZCBpbnQgTUNEUjI7ICAgLyogU0lCIERhdGEgUmVnaXN0ZXIgMiAoVUNCMXgwMCkgIE9mZnNldDogMHgxMCAqLwotICAgICB1bnNpZ25lZCBpbnQgUkVTMjsgICAgLyogUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldDogMHgxNCAqLwotICAgICB1bnNpZ25lZCBpbnQgTUNTUjsgICAgLyogU0lCIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgIE9mZnNldDogMHgxOCAqLwotfSBTSUJfSW50ZXJmYWNlOwotCi0jZGVmaW5lIFNJQiAoKHZvbGF0aWxlIFNJQl9JbnRlcmZhY2UgKikgKFNJQl9CQVNFKSkKLQotLyogTUNDUiAqLwotCi0jZGVmaW5lIElOVEVSTkFMX0ZSRVEgICA5MjE2MDAwICAvKiBIZXJ0eiAqLwotI2RlZmluZSBBVURJT19GUkVRICAgICAgICAgNTAwMCAgLyogSGVydHogKi8KLSNkZWZpbmUgVEVMRUNPTV9GUkVRICAgICAgIDUwMDAgIC8qIEhlcnR6ICovCi0KLSNkZWZpbmUgQVVESU9fRElWSURFICAgIChJTlRFUk5BTF9GUkVRIC8gKDMyICogQVVESU9fRlJFUSkpCi0jZGVmaW5lIFRFTEVDT01fRElWSURFICAoSU5URVJOQUxfRlJFUSAvICgzMiAqIFRFTEVDT01fRlJFUSkpCi0KLSNkZWZpbmUgTUNDUl9BU0Q1NyAgICAgIEFVRElPX0RJVklERQotI2RlZmluZSBNQ0NSX1RTRDU3ICAgICAgKFRFTEVDT01fRElWSURFIDw8IDgpCi0jZGVmaW5lIE1DQ1JfTUNFICAgICAgICAoMSA8PCAxNikgICAgICAgICAgICAgLyogU0lCIGVuYWJsZSAqLwotI2RlZmluZSBNQ0NSX0VDUyAgICAgICAgKDEgPDwgMTcpICAgICAgICAgICAgIC8qIEV4dGVybmFsIENsb2NrIFNlbGVjdCAqLwotI2RlZmluZSBNQ0NSX0FETSAgICAgICAgKDEgPDwgMTgpICAgICAgICAgICAgIC8qIEEvRCBEYXRhIFNhbXBsaW5nICovCi0jZGVmaW5lIE1DQ1JfUE1DICAgICAgICAoMSA8PCAyNikgICAgICAgICAgICAgLyogUElOIE11bHRpcGxleGVyIENvbnRyb2wgKi8KLQotCi0jZGVmaW5lIEdFVF9BU0QgKChTSUItPk1DQ1IgPj4gIDApICYgMHgzZikgLyogQXVkaW8gU2FtcGxlIFJhdGUgRGl2LiAqLwotI2RlZmluZSBHRVRfVFNEICgoU0lCLT5NQ0NSID4+ICA4KSAmIDB4M2YpIC8qIFRlbGNvbSBTYW1wbGUgUmF0ZSBEaXYuICovCi0jZGVmaW5lIEdFVF9NQ0UgKChTSUItPk1DQ1IgPj4gMTYpICYgMHgwMSkgLyogU0lCIEVuYWJsZSAqLwotI2RlZmluZSBHRVRfRUNTICgoU0lCLT5NQ0NSID4+IDE3KSAmIDB4MDEpIC8qIEV4dGVybmFsIENsb2NrIFNlbGVjdCAqLwotI2RlZmluZSBHRVRfQURNICgoU0lCLT5NQ0NSID4+IDE4KSAmIDB4MDEpIC8qIEEvRCBEYXRhIFNhbXBsaW5nIE1vZGUgKi8KLSNkZWZpbmUgR0VUX1RUTSAoKFNJQi0+TUNDUiA+PiAxOSkgJiAweDAxKSAvKiBUZWxjbyBUcmFucy4gRklGTyBJIG1hc2sgKi8gCi0jZGVmaW5lIEdFVF9UUk0gKChTSUItPk1DQ1IgPj4gMjApICYgMHgwMSkgLyogVGVsY28gUmVjdi4gRklGTyBJIG1hc2sgKi8KLSNkZWZpbmUgR0VUX0FUTSAoKFNJQi0+TUNDUiA+PiAyMSkgJiAweDAxKSAvKiBBdWRpbyBUcmFucy4gRklGTyBJIG1hc2sgKi8gCi0jZGVmaW5lIEdFVF9BUk0gKChTSUItPk1DQ1IgPj4gMjIpICYgMHgwMSkgLyogQXVkaW8gUmVjdi4gRklGTyBJIG1hc2sgKi8KLSNkZWZpbmUgR0VUX0xCTSAoKFNJQi0+TUNDUiA+PiAyMykgJiAweDAxKSAvKiBMb29wIEJhY2sgTW9kZSAqLwotI2RlZmluZSBHRVRfRUNQICgoU0lCLT5NQ0NSID4+IDI0KSAmIDB4MDMpIC8qIEV4dGVybi4gQ2xjayBQcmVzY2FsZSBzZWwgKi8KLSNkZWZpbmUgR0VUX1BNQyAoKFNJQi0+TUNDUiA+PiAyNikgJiAweDAxKSAvKiBQSU4gTXVsdGlwbGV4ZXIgQ29udHJvbCAqLwotI2RlZmluZSBHRVRfRVJJICgoU0lCLT5NQ0NSID4+IDI3KSAmIDB4MDEpIC8qIEV4dGVybmFsIFJlYWQgSW50ZXJydXB0ICovCi0jZGVmaW5lIEdFVF9FV0kgKChTSUItPk1DQ1IgPj4gMjgpICYgMHgwMSkgLyogRXh0ZXJuYWwgV3JpdGUgSW50ZXJydXB0ICovCi0KLS8qIE1DRFIwICovCi0KLSNkZWZpbmUgQVVESU9fUkVDViAgICAgKChTSUItPk1DRFIwID4+IDQpICYgMHhmZmYpCi0jZGVmaW5lIEFVRElPX1dSSVRFKHYpICgoU0lCLT5NQ0RSMCA9ICh2ICYgMHhmZmYpIDw8IDQpKQotCi0vKiBNQ0RSMSAqLwotCi0jZGVmaW5lIFRFTEVDT01fUkVDViAgICAgKChTSUItPk1DRFIxID4+IDIpICYgMDMyZmZmKQotI2RlZmluZSBURUxFQ09NX1dSSVRFKHYpICgoU0lCLT5NQ0RSMSA9ICh2ICYgMHgzZmZmKSA8PCAyKSkKLQotCi0vKiBNQ1NSICovCi0KLSNkZWZpbmUgTUNTUl9BVFUgKDEgPDwgNCkgIC8qIEF1ZGlvIFRyYW5zbWl0IEZJRk8gVW5kZXJydW4gKi8KLSNkZWZpbmUgTUNTUl9BUk8gKDEgPDwgNSkgIC8qIEF1ZGlvIFJlY2VpdmUgIEZJRk8gVW5kZXJydW4gKi8KLSNkZWZpbmUgTUNTUl9UVFUgKDEgPDwgNikgIC8qIFRFTEVDT00gVHJhbnNtaXQgRklGTyBVbmRlcnJ1biAqLwotI2RlZmluZSBNQ1NSX1RSTyAoMSA8PCA3KSAgLyogVEVMRUNPTSBSZWNlaXZlICBGSUZPIFVuZGVycnVuICovCi0KLSNkZWZpbmUgTUNTUl9DTEVBUl9VTkRFUlVOX0JJVFMgKE1DU1JfQVRVIHwgTUNTUl9BUk8gfCBNQ1NSX1RUVSB8IE1DU1JfVFJPKQotCi0KLSNkZWZpbmUgR0VUX0FUUyAoKFNJQi0+TUNTUiA+PiAgMCkgJiAweDAxKSAvKiBBdWRpbyBUcmFuc21pdCBGSUZPIFNlcnZpY2UgUmVxKi8KLSNkZWZpbmUgR0VUX0FSUyAoKFNJQi0+TUNTUiA+PiAgMSkgJiAweDAxKSAvKiBBdWRpbyBSZWN2IEZJRk8gU2VydmljZSBSZXF1ZXN0Ki8KLSNkZWZpbmUgR0VUX1RUUyAoKFNJQi0+TUNTUiA+PiAgMikgJiAweDAxKSAvKiBURUxFQ09NIFRyYW5zbWl0IEZJRk8gIEZsYWcgKi8KLSNkZWZpbmUgR0VUX1RSUyAoKFNJQi0+TUNTUiA+PiAgMykgJiAweDAxKSAvKiBURUxFQ09NIFJlY3YgRklGTyBTZXJ2aWNlIFJlcS4gKi8KLSNkZWZpbmUgR0VUX0FUVSAoKFNJQi0+TUNTUiA+PiAgNCkgJiAweDAxKSAvKiBBdWRpbyBUcmFuc21pdCBGSUZPIFVuZGVycnVuICovCi0jZGVmaW5lIEdFVF9BUk8gKChTSUItPk1DU1IgPj4gIDUpICYgMHgwMSkgLyogQXVkaW8gUmVjZWl2ZSAgRklGTyBVbmRlcnJ1biAqLwotI2RlZmluZSBHRVRfVFRVICgoU0lCLT5NQ1NSID4+ICA2KSAmIDB4MDEpIC8qIFRFTEVDT00gVHJhbnNtaXQgRklGTyBVbmRlcnJ1biAqLwotI2RlZmluZSBHRVRfVFJPICgoU0lCLT5NQ1NSID4+ICA3KSAmIDB4MDEpIC8qIFRFTEVDT00gUmVjZWl2ZSAgRklGTyBVbmRlcnJ1biAqLwotI2RlZmluZSBHRVRfQU5GICgoU0lCLT5NQ1NSID4+ICA4KSAmIDB4MDEpIC8qIEF1ZGlvIFRyYW5zbWl0IEZJRk8gbm90IGZ1bGwgKi8KLSNkZWZpbmUgR0VUX0FORSAoKFNJQi0+TUNTUiA+PiAgOSkgJiAweDAxKSAvKiBBdWRpbyBSZWNlaXZlIEZJRk8gbm90IGVtcHR5ICovCi0jZGVmaW5lIEdFVF9UTkYgKChTSUItPk1DU1IgPj4gMTApICYgMHgwMSkgLyogVGVsZWNvbSBUcmFuc21pdCBGSUZPIG5vdCBmdWxsICovCi0jZGVmaW5lIEdFVF9UTkUgKChTSUItPk1DU1IgPj4gMTEpICYgMHgwMSkgLyogVGVsZWNvbSBSZWNlaXZlIEZJRk8gbm90IGVtcHR5ICovCi0jZGVmaW5lIEdFVF9DV0MgKChTSUItPk1DU1IgPj4gMTIpICYgMHgwMSkgLyogQ29kZWMgV3JpdGUgQ29tcGxldGUgKi8KLSNkZWZpbmUgR0VUX0NSQyAoKFNJQi0+TUNTUiA+PiAxMykgJiAweDAxKSAvKiBDb2RlYyBSZWFkIENvbXBsZXRlICovCi0jZGVmaW5lIEdFVF9BQ0UgKChTSUItPk1DU1IgPj4gMTQpICYgMHgwMSkgLyogQXVkaW8gQ29kZWMgRW5hYmxlZCAqLwotI2RlZmluZSBHRVRfVENFICgoU0lCLT5NQ1NSID4+IDE1KSAmIDB4MDEpIC8qIFRlbGVjb20gQ29kZWMgRW5hYmxlZCAqLwotCi0vKiBNQ0RSMiAqLwotCi0jZGVmaW5lIE1DRFIyX3JXICAgICAgICAgICAgICAgKDEgPDwgMTYpCi0KLSNkZWZpbmUgV1JJVEVfTUNEUjIocmVnLCBkYXRhKSAoU0lCLT5NQ0RSMiA9KChyZWc8PDE3KXxNQ0RSMl9yV3woZGF0YSYweGZmZmYpKSkKLSNkZWZpbmUgTUNEUjJfV1JJVEVfQ09NUExFVEUgICBHRVRfQ1dDCi0KLSNkZWZpbmUgSU5JVElBVEVfTUNEUjJfUkVBRChyZWcpIChTSUItPk1DRFIyID0gKHJlZyA8PCAxNykpCi0jZGVmaW5lIE1DRFIyX1JFQURfQ09NUExFVEUgICAgICBHRVRfQ1JDCi0jZGVmaW5lIE1DRFIyX1JFQUQgICAgICAgICAgICAgICAoU0lCLT5NQ0RSMiAmIDB4ZmZmZikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL3N5cy1jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvc3lzLWNsb2NrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5NzI5YTMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvc3lzLWNsb2NrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiAgYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvc3lzLWNsb2NrLmgKLSAqCi0gKiAgIFJlZ2lzdGVycyBhbmQgIGhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBMNzIwMCBMaW5rLVVwIFN5c3RlbXMKLSAqICAgU3lzdGVtIGNsb2Nrcy4KLSAqCi0gKiAgIChDKSBDb3B5cmlnaHQgMjAwMCwgUyBBIE1jQ29ubmVsbCAgKHNhbWNjb25uQGNvdHcuY29tKQotICoKLSAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCi0gKiAgbW9yZSBkZXRhaWxzLgotICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIFNZU19DTE9DS19PRkYgICAweDAwMDUwMDMwICAvKiBPZmZzZXQgZnJvbSBJT19TVEFSVC4gKi8KLQotLyogSU9fU1RBUlQgYW5kIElPX0JBU0UgYXJlIGRlZmluZWQgaW4gaGFyZHdhcmUuaCAqLwotCi0jZGVmaW5lIFNZU19DTE9DS19TVEFSVCAoSU9fU1RBUlQgKyBTWVNfQ0xPQ0tfT0ZGKSAgLyogUGh5c2ljYWwgYWRkcmVzcyAqLwotI2RlZmluZSBTWVNfQ0xPQ0tfQkFTRSAgKElPX0JBU0UgICsgU1lTX0NMT0NLX09GRikgIC8qIFZpcnR1YWwgYWRkcmVzcyAgKi8KLQotLyogRGVmaW5lIHRoZSBpbnRlcmZhY2UgdG8gdGhlIFNZU19DTE9DSyAqLwotCi10eXBlZGVmIHN0cnVjdAotewotICAgICB1bnNpZ25lZCBpbnQgRU5BQkxFOwotICAgICB1bnNpZ25lZCBpbnQgRVNZTkM7Ci0gICAgIHVuc2lnbmVkIGludCBTRUxFQ1Q7Ci19IHN5c19jbG9ja19pbnRlcmZhY2U7Ci0KLSNkZWZpbmUgU1lTX0NMT0NLICAgKCh2b2xhdGlsZSBzeXNfY2xvY2tfaW50ZXJmYWNlICopKFNZU19DTE9DS19CQVNFKSkKLQotLy8jZGVmaW5lIENMT0NLX0VOICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoUE1VX0JBU0UrQ0xPQ0tfRU5fT0ZGKSkKLS8vI2RlZmluZSBDTE9DS19FU1lOQyAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFBNVV9CQVNFK0NMT0NLX0VTWU5DX09GRikpCi0vLyNkZWZpbmUgQ0xPQ0tfU0VMICAgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShQTVVfQkFTRStDTE9DS19TRUxfT0ZGKSkKLQotLyogU1lTX0NMT0NLIC0+IEVOQUJMRSAqLwotCi0jZGVmaW5lIFNZTl9FTiAgICAgICAgICAxPDwwCi0jZGVmaW5lIEIxOE1fRU4gICAgICAgICAxPDwxCi0jZGVmaW5lIENMSzNNNl9FTiAgICAgICAxPDwyCi0jZGVmaW5lIEJVQVJUX0VOICAgICAgICAxPDwzCi0jZGVmaW5lIENMSzE4TVVfRU4gICAgICAxPDw0Ci0jZGVmaW5lIEZJUl9FTiAgICAgICAgICAxPDw1Ci0jZGVmaW5lIE1JUk5fRU4gICAgICAgICAxPDw2Ci0jZGVmaW5lIFVBUlRNX0VOICAgICAgICAxPDw3Ci0jZGVmaW5lIFNJQkFEQ19FTiAgICAgICAxPDw4Ci0jZGVmaW5lIEFMVERfRU4gICAgICAgICAxPDw5Ci0jZGVmaW5lIENMQ0xLX0VOICAgICAgICAxPDwxMAotCi0vKiBTWVNfQ0xPQ0sgLT4gU0VMRUNUICovCi0KLSNkZWZpbmUgQ0xLMThNX0RJViAgICAgIDE8PDAKLSNkZWZpbmUgTUlSX1NFTCAgICAgICAgIDE8PDEKLSNkZWZpbmUgU1NQX1NFTCAgICAgICAgIDE8PDQKLSNkZWZpbmUgTU1fRElWICAgICAgICAgIDE8PDUKLSNkZWZpbmUgTU1fU0VMICAgICAgICAgIDE8PDYKLSNkZWZpbmUgQURDX1NFTF8yICAgICAgIDA8PDcKLSNkZWZpbmUgQURDX1NFTF80ICAgICAgIDE8PDcKLSNkZWZpbmUgQURDX1NFTF84ICAgICAgIDM8PDcKLSNkZWZpbmUgQURDX1NFTF8xNiAgICAgIDc8PDcKLSNkZWZpbmUgQURDX1NFTF8zMiAgICAgIDB4MGY8PDcKLSNkZWZpbmUgQURDX1NFTF82NCAgICAgIDB4MWY8PDcKLSNkZWZpbmUgQURDX1NFTF8xMjggICAgIDB4M2Y8PDcKLSNkZWZpbmUgQUxURF9TRUwgICAgICAgIDE8PDEzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGRkM2I2Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAwIFN0ZXZlIEhpbGwgKHNqaGlsbEBjb3R3LmNvbSkKLSAqCi0gKiBDaGFuZ2Vsb2cKLSAqICAwMy0yMS0yMDAwICBTSkgJQ3JlYXRlZAotICogIDA0LTI2LTIwMDAgIFNKSAlGaXhlZCBmdW5jdGlvbnMKLSAqICAwNS0wMy0yMDAwICBTSkgJUmVtb3ZlZCB1c2FnZSBvZiBvYnNvbGV0ZSAnaW9tZC5oJwotICogIDA1LTMxLTIwMDAgIFNKSAlQcm9wZXJseSBpbXBsZW1lbnRlZCAnYXJjaF9pZGxlJwotICovCi0jaWZuZGVmIF9fQVNNX0FSQ0hfU1lTVEVNX0gKLSNkZWZpbmUgX19BU01fQVJDSF9TWVNURU1fSAotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCi17Ci0JKih1bnNpZ25lZCBsb25nICopKElPX0JBU0UgKyAweDUwMDA0KSA9IDE7CS8qIGlkbGUgbW9kZSAqLwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKLXsKLQlpZiAobW9kZSA9PSAncycpIHsKLQkJY3B1X3Jlc2V0KDApOwotCX0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC90aW1lLmggYi9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC90aW1lLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2MTc3MWMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvdGltZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL3RpbWUuaAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBSb2IgU2NvdHQgKHJzY290dEBtdHJvYi5mZG5zLm5ldCkKLSAqICAgICAgICAgICAgICAgICAgICBTdGV2ZSBIaWxsIChzamhpbGxAY290dy5jb20pCi0gKgotICogQ2hhbmdlbG9nOgotICogICAwMS0wMi0yMDAwCVJTCUNyZWF0ZWQgbDcyMDAgdmVyc2lvbiwgZGVyaXZlZCBmcm9tIHJwYyBjb2RlCi0gKiAgIDA1LTAzLTIwMDAJU0pICUNvbXBsZXRlIHJld3JpdGUKLSAqLwotI2lmbmRlZiBfQVNNX0FSQ0hfVElNRV9ICi0jZGVmaW5lIF9BU01fQVJDSF9USU1FX0gKLQotI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgotCi0vKgotICogUlRDIGJhc2UgcmVnaXN0ZXIgYWRkcmVzcwotICovCi0jZGVmaW5lIFJUQ19CQVNFCShJT19CQVNFXzIgKyAweDIwMDApCi0KLS8qCi0gKiBSVEMgcmVnaXN0ZXJzCi0gKi8KLSNkZWZpbmUgUlRDX1JUQ0RSCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKFJUQ19CQVNFICsgMHgwMDApKQotI2RlZmluZSBSVENfUlRDTVIJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoUlRDX0JBU0UgKyAweDAwNCkpCi0jZGVmaW5lIFJUQ19SVENTCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKFJUQ19CQVNFICsgMHgwMDgpKQotI2RlZmluZSBSVENfUlRDQwkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChSVENfQkFTRSArIDB4MDA4KSkKLSNkZWZpbmUgUlRDX1JUQ0RWCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKFJUQ19CQVNFICsgMHgwMGMpKQotI2RlZmluZSBSVENfUlRDQ1IJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoUlRDX0JBU0UgKyAweDAxMCkpCi0KLS8qCi0gKiBSVENDUiByZWdpc3RlciB2YWx1ZXMKLSAqLwotI2RlZmluZSBSVENfUkFURV8zMgkweDAwICAgICAgLyogMzIgSHogdGljayAqLwotI2RlZmluZSBSVENfUkFURV82NAkweDEwICAgICAgLyogNjQgSHogdGljayAqLwotI2RlZmluZSBSVENfUkFURV8xMjgJMHgyMCAgICAgIC8qIDEyOCBIeiB0aWNrICovCi0jZGVmaW5lIFJUQ19SQVRFXzI1NgkweDMwICAgICAgLyogMjU2IEh6IHRpY2sgKi8KLSNkZWZpbmUgUlRDX0VOX0FMQVJNCTB4MDEgICAgICAvKiBFbmFibGUgYWxhcm0gKi8KLSNkZWZpbmUgUlRDX0VOX1RJQwkweDA0ICAgICAgLyogRW5hYmxlIGNvdW50ZXIgKi8KLSNkZWZpbmUgUlRDX0VOX1NUV0RPRwkweDA4ICAgICAgLyogRW5hYmxlIHdhdGNoZG9nICovCi0KLS8qCi0gKiBIYW5kbGVyIGZvciBSVEMgdGltZXIgaW50ZXJydXB0Ci0gKi8KLXN0YXRpYyBpcnFyZXR1cm5fdAotdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGdldF9pcnFfcmVncygpOwotCWRvX3RpbWVyKDEpOwotI2lmbmRlZiBDT05GSUdfU01QCi0JdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKHJlZ3MpKTsKLSNlbmRpZgotCWRvX3Byb2ZpbGUocmVncyk7Ci0JUlRDX1JUQ0MgPSAwOwkJCQkvKiBDbGVhciBpbnRlcnJ1cHQgKi8KLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotLyoKLSAqIFNldCB1cCBSVEMgdGltZXIgaW50ZXJydXB0LCBhbmQgcmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgaW4gc2Vjb25kcy4KLSAqLwotdm9pZCBfX2luaXQgdGltZV9pbml0KHZvaWQpCi17Ci0JUlRDX1JUQ0MgPSAwOwkJCQkvKiBDbGVhciBpbnRlcnJ1cHQgKi8KLQotCXRpbWVyX2lycS5oYW5kbGVyID0gdGltZXJfaW50ZXJydXB0OwotCi0Jc2V0dXBfaXJxKElSUV9SVENfVElDSywgJnRpbWVyX2lycSk7Ci0KLQlSVENfUlRDQ1IgPSBSVENfUkFURV8xMjggfCBSVENfRU5fVElDOwkvKiBTZXQgcmF0ZSBhbmQgZW5hYmxlIHRpbWVyICovCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvdGltZXguaCBiL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL3RpbWV4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmYzk2YTYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvdGltZXguaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC90aW1leC5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwIFJvYiBTY290dCAocnNjb3R0QG10cm9iLmZkbnMubmV0KQotICogICAgICAgICAgICAgICAgICAgIFN0ZXZlIEhpbGwgKHNqaGlsbEBjb3R3LmNvbSkKLSAqCi0gKiAwNC0yMS0yMDAwICBSUyBDcmVhdGVkIGZpbGUKLSAqIDA1LTAzLTIwMDAgU0pIIFRpY2sgcmF0ZSB3YXMgd3JvbmcKLSAqCi0gKi8KLQotLyoKLSAqIE9uIHRoZSBBUk03MjBULCBjbG9jayB0aWNrcyBhcmUgc2V0IHRvIDEyOCBIei4KLSAqCi0gKiBOT1RFOiBUaGUgYWN0dWFsIFJUQyB2YWx1ZSBpcyBzZXQgaW4gJ3RpbWUuaCcgd2hpY2gKLSAqICAgICAgIG11c3QgYmUgY2hhbmdlZCB3aGVuIGNob29zaW5nIGEgZGlmZmVyZW50IHRpY2sKLSAqICAgICAgIHJhdGUuIFRoZSB2YWx1ZSBvZiBIWiBpbiAncGFyYW0uaCcgbXVzdCBhbHNvCi0gKiAgICAgICBiZSBjaGFuZ2VkIHRvIG1hdGNoIGJlbG93LgotICovCi0jZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJMTI4CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5MWM5NjIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBTdGV2ZSBIaWxsIChzamhpbGxAY290dy5jb20pCi0gKgotICogQ2hhbmdlbG9nOgotICogIDA1LTAxLTIwMDAJU0pICUNyZWF0ZWQKLSAqICAwNS0xMy0yMDAwCVNKSAlGaWxsZWQgaW4gZnVuY3Rpb24gYm9kaWVzCi0gKiAgMDctMjYtMjAwMAlTSkgJUmVtb3ZlZCBoYXJkIGNvZGVkIGJhdWQgcmF0ZQotICovCi0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KLSNkZWZpbmUgSU9fVUFSVCAgSU9fU1RBUlQgKyAweDAwMDQ0MDAwCi0KLSNkZWZpbmUgX19yYXdfd3JpdGViKHYscCkJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShwKSA9ICh2KSkKLSNkZWZpbmUgX19yYXdfcmVhZGIocCkJCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikocCkpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRjKGludCBjKQotewotCXdoaWxlKF9fcmF3X3JlYWRiKElPX1VBUlQgKyAweDE4KSAmIDB4MjAgfHwKLQkgICAgICBfX3Jhd19yZWFkYihJT19VQVJUICsgMHgxOCkgJiAweDA4KQotCQliYXJyaWVyKCk7Ci0KLQlfX3Jhd193cml0ZWIoYywgSU9fVUFSVCArIDB4MDApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2godm9pZCkKLXsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBhcmNoX2RlY29tcF9zZXR1cCh2b2lkKQotewotCV9fcmF3X3dyaXRlYigweDAwLCBJT19VQVJUICsgMHgwOCk7CS8qIFNldCBIU0IgKi8KLQlfX3Jhd193cml0ZWIoMHgwMCwgSU9fVUFSVCArIDB4MjApOwkvKiBEaXNhYmxlIElSUXMgKi8KLQlfX3Jhd193cml0ZWIoMHgwMSwgSU9fVUFSVCArIDB4MTQpOwkvKiBFbmFibGUgVUFSVCAqLwotfQotCi0jZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWYwYWJiLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAotICovCi0jZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgIChQQUdFX09GRlNFVCArIDB4MTAwMDAwMDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCAxODlkMjBlLi5lZGI4ZjVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTE5LDUwICsxOSw2IEBACiAgKi8KICNkZWZpbmUgUEhZU19PRkZTRVQJVUwoMHhjMDAwMDAwMCkKIAotI2lmZGVmIENPTkZJR19ESVNDT05USUdNRU0KLQotLyoKLSAqIEdpdmVuIGEga2VybmVsIGFkZHJlc3MsIGZpbmQgdGhlIGhvbWUgbm9kZSBvZiB0aGUgdW5kZXJseWluZyBtZW1vcnkuCi0gKi8KLQotIyBpZmRlZiBDT05GSUdfTEg3QTQwWF9PTkVfQkFOS19QRVJfTk9ERQotIyAgZGVmaW5lIEtWQUREUl9UT19OSUQoYWRkcikgXAotICAoICAoKCgodW5zaWduZWQgbG9uZykgKGFkZHIpIC0gUEFHRV9PRkZTRVQpID4+IDI0KSAmICAxKVwKLSAgIHwgKCgoKHVuc2lnbmVkIGxvbmcpIChhZGRyKSAtIFBBR0VfT0ZGU0VUKSA+PiAyNSkgJiB+MSkpCi0jIGVsc2UgIC8qIDIgYmFua3MgcGVyIG5vZGUgKi8KLSMgIGRlZmluZSBLVkFERFJfVE9fTklEKGFkZHIpIFwKLSAgICAgICgoKHVuc2lnbmVkIGxvbmcpIChhZGRyKSAtIFBBR0VfT0ZGU0VUKSA+PiAyNikKLSMgZW5kaWYKLQotLyoKLSAqIEdpdmVuIGEgcGFnZSBmcmFtZSBudW1iZXIsIGNvbnZlcnQgaXQgdG8gYSBub2RlIGlkLgotICovCi0KLSMgaWZkZWYgQ09ORklHX0xIN0E0MFhfT05FX0JBTktfUEVSX05PREUKLSMgIGRlZmluZSBQRk5fVE9fTklEKHBmbikgXAotICAoKCgoKHBmbikgLSBQSFlTX1BGTl9PRkZTRVQpID4+ICgyNCAtIFBBR0VfU0hJRlQpKSAmICAxKVwKLSB8ICgoKChwZm4pIC0gUEhZU19QRk5fT0ZGU0VUKSA+PiAoMjUgLSBQQUdFX1NISUZUKSkgJiB+MSkpCi0jIGVsc2UgIC8qIDIgYmFua3MgcGVyIG5vZGUgKi8KLSMgIGRlZmluZSBQRk5fVE9fTklEKHBmbikgXAotICAgICgoKHBmbikgLSBQSFlTX1BGTl9PRkZTRVQpID4+ICgyNiAtIFBBR0VfU0hJRlQpKQotI2VuZGlmCi0KLS8qCi0gKiBHaXZlbiBhIGthZGRyLCBMT0NBTF9NRU1fTUFQIGZpbmRzIHRoZSBvd25pbmcgbm9kZSBvZiB0aGUgbWVtb3J5Ci0gKiBhbmQgcmV0dXJucyB0aGUgaW5kZXggY29ycmVzcG9uZGluZyB0byB0aGUgYXBwcm9wcmlhdGUgcGFnZSBpbiB0aGUKLSAqIG5vZGUncyBtZW1fbWFwLgotICovCi0KLSMgaWZkZWYgQ09ORklHX0xIN0E0MFhfT05FX0JBTktfUEVSX05PREUKLSMgIGRlZmluZSBMT0NBTF9NQVBfTlIoYWRkcikgXAotICAgICAgICgoKHVuc2lnbmVkIGxvbmcpKGFkZHIpICYgMHgwMDNmZmZmZikgPj4gUEFHRV9TSElGVCkKLSMgZWxzZSAgLyogMiBiYW5rcyBwZXIgbm9kZSAqLwotIyAgZGVmaW5lIExPQ0FMX01BUF9OUihhZGRyKSBcCi0gICAgICAgKCgodW5zaWduZWQgbG9uZykoYWRkcikgJiAweDAxZmZmZmZmKSA+PiBQQUdFX1NISUZUKQotIyBlbmRpZgotCi0jZW5kaWYKLQogLyoKICAqIFNwYXJzZW1lbSB2ZXJzaW9uIG9mIHRoZSBhYm92ZQogICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxwYzMyeHgvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZTY2MzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWxwYzMyeHgvS2NvbmZpZwpAQCAtMCwwICsxLDMzIEBACitpZiBBUkNIX0xQQzMyWFgKKworbWVudSAiSW5kaXZpZHVhbCBVQVJUIGVuYWJsZSBzZWxlY3Rpb25zIgorCitjb25maWcgQVJDSF9MUEMzMlhYX1VBUlQzX1NFTEVDVAorCWJvb2wgIkFkZCBzdXBwb3J0IGZvciBzdGFuZGFyZCBVQVJUMyIKKwloZWxwCisJIEFkZHMgc3VwcG9ydCBmb3Igc3RhbmRhcmQgVUFSVCAzIHdoZW4gdGhlIDgyNTAgc2VyaWFsIHN1cHBvcnQKKwkgaXMgZW5hYmxlZC4KKworY29uZmlnIEFSQ0hfTFBDMzJYWF9VQVJUNF9TRUxFQ1QKKwlib29sICJBZGQgc3VwcG9ydCBmb3Igc3RhbmRhcmQgVUFSVDQiCisJaGVscAorCSBBZGRzIHN1cHBvcnQgZm9yIHN0YW5kYXJkIFVBUlQgNCB3aGVuIHRoZSA4MjUwIHNlcmlhbCBzdXBwb3J0CisJIGlzIGVuYWJsZWQuCisKK2NvbmZpZyBBUkNIX0xQQzMyWFhfVUFSVDVfU0VMRUNUCisJYm9vbCAiQWRkIHN1cHBvcnQgZm9yIHN0YW5kYXJkIFVBUlQ1IgorCWRlZmF1bHQgeQorCWhlbHAKKwkgQWRkcyBzdXBwb3J0IGZvciBzdGFuZGFyZCBVQVJUIDUgd2hlbiB0aGUgODI1MCBzZXJpYWwgc3VwcG9ydAorCSBpcyBlbmFibGVkLgorCitjb25maWcgQVJDSF9MUEMzMlhYX1VBUlQ2X1NFTEVDVAorCWJvb2wgIkFkZCBzdXBwb3J0IGZvciBzdGFuZGFyZCBVQVJUNiIKKwloZWxwCisJIEFkZHMgc3VwcG9ydCBmb3Igc3RhbmRhcmQgVUFSVCA2IHdoZW4gdGhlIDgyNTAgc2VyaWFsIHN1cHBvcnQKKwkgaXMgZW5hYmxlZC4KKworZW5kbWVudQorCitlbmRpZgorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxwYzMyeHgvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWxwYzMyeHgvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVmYzVkMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9NYWtlZmlsZQpAQCAtMCwwICsxLDggQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCisjCisKK29iai15CTo9IHRpbWVyLm8gaXJxLm8gY29tbW9uLm8gc2VyaWFsLm8gY2xvY2subworb2JqLXkJKz0gZ3Bpb2xpYi5vIHBtLm8gc3VzcGVuZC5vCitvYmoteQkrPSBwaHkzMjUwLm8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1scGMzMnh4L01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLWxwYzMyeHgvTWFrZWZpbGUuYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzk2YjQxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1scGMzMnh4L01ha2VmaWxlLmJvb3QKQEAgLTAsMCArMSw0IEBACisgICB6cmVsYWRkci15CTo9IDB4ODAwMDgwMDAKK3BhcmFtc19waHlzLXkJOj0gMHg4MDAwMDEwMAoraW5pdHJkX3BoeXMteQk6PSAweDgyMDAwMDAwCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1scGMzMnh4L2Nsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJkNjM3OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9jbG9jay5jCkBAIC0wLDAgKzEsMTEzNyBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbHBjMzJ4eC9jbG9jay5jCisgKgorICogQXV0aG9yOiBLZXZpbiBXZWxscyA8a2V2aW4ud2VsbHNAbnhwLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTlhQIFNlbWljb25kdWN0b3JzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qCisgKiBMUEMzMnh4IGNsb2NrIG1hbmFnZW1lbnQgZHJpdmVyIG92ZXJ2aWV3CisgKgorICogVGhlIExQQzMyWFggY29udGFpbnMgYSBudW1iZXIgb2YgaGlnaCBsZXZlbCBzeXN0ZW0gY2xvY2tzIHRoYXQgY2FuIGJlCisgKiBnZW5lcmF0ZWQgZnJvbSBkaWZmZXJlbnQgc291cmNlcy4gVGhlc2Ugc3lzdGVtIGNsb2NrcyBhcmUgdXNlZCB0bworICogZ2VuZXJhdGUgdGhlIENQVSBhbmQgYnVzIHJhdGVzIGFuZCB0aGUgaW5kaXZpZHVhbCBwZXJpcGhlcmFsIGNsb2NrcyBpbgorICogdGhlIHN5c3RlbS4gV2hlbiBMaW51eCBpcyBzdGFydGVkIGJ5IHRoZSBib290IGxvYWRlciwgdGhlIHN5c3RlbQorICogY2xvY2tzIGFyZSBhbHJlYWR5IHJ1bm5pbmcuIFN0b3BwaW5nIGEgc3lzdGVtIGNsb2NrIGR1cmluZyBub3JtYWwKKyAqIExpbnV4IG9wZXJhdGlvbiBzaG91bGQgbmV2ZXIgYmUgYXR0ZW1wdGVkLCBhcyBwZXJpcGhlcmFscyB0aGF0IHJlcXVpcmUKKyAqIHRob3NlIGNsb2NrcyB3aWxsIHF1aXQgd29ya2luZyAoaWUsIERSQU0pLgorICoKKyAqIFRoZSBMUEMzMnh4IGhpZ2ggbGV2ZWwgY2xvY2sgdHJlZSBsb29rcyBhcyBmb2xsb3dzLiBDbG9ja3MgbWFya2VkIHdpdGgKKyAqIGFuIGFzdGVyaXNrIGFyZSBhbHdheXMgb24gYW5kIGNhbm5vdCBiZSBkaXNhYmxlZC4gQ2xvY2tzIG1hcmtlZCB3aXRoCisgKiBhbiBhbXBlcnNhbmQgY2FuIG9ubHkgYmUgZGlzYWJsZWQgaW4gQ1BVIHN1c3BlbmQgbW9kZS4gQ2xvY2tzIG1hcmtlZAorICogd2l0aCBhIGNhcmV0IGFyZSBhbHdheXMgb24gaWYgaXQgaXMgdGhlIHNlbGVjdGVkIGNsb2NrIGZvciB0aGUgU1lTQ0xLCisgKiBzb3VyY2UuIFRoZSBjbG9jayB0aGF0IGlzbid0IHVzZWQgZm9yIFNZU0NMSyBjYW4gYmUgZW5hYmxlZCBhbmQKKyAqIGRpc2FibGVkIG5vcm1hbGx5LgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzJLSHogb3NjaWxsYXRvcioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gICAgICB8ICAgICAgXAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQyogICBQTEwzOTdeIFRPVUNICisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvCisgKiAgICAgICAgICAgICAgIE1haW4gb3NjaWxsYXRvcl4gICAgIC8KKyAqICAgICAgICAgICAgICAgICAgIHwgICAgICAgIFwgICAgICAvCisgKiAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgU1lTQ0xLJgorICogICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIFwKKyAqICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgXAorICogICAgICAgICAgICAgICAgVVNCX1BMTCAgICAgICBIQ0xLX1BMTCYKKyAqICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgfAorICogICAgICAgICAgICBVU0IgaG9zdC9kZXZpY2UgIFBDTEsmICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQZXJpcGhlcmFscworICoKKyAqIFRoZSBDUFUgYW5kIGNoaXAgYnVzIHJhdGVzIGFyZSBkZXJpdmVkIGZyb20gdGhlIEhDTEsgUExMLCB3aGljaCBjYW4KKyAqIGdlbmVyYXRlIHZhcmlvdXMgY2xvY2sgcmF0ZXMgdXAgdG8gMjY2TUh6IGFuZCBiZXlvbmQuIFRoZSBpbnRlcm5hbCBidXMKKyAqIHJhdGVzIChQQ0xLIGFuZCBIQ0xLKSBhcmUgZ2VuZXJhdGVkIGZyb20gZGl2aWRlcnMgYmFzZWQgb24gdGhlIEhDTEsKKyAqIFBMTCByYXRlLiBIQ0xLIGNhbiBiZSBhIHJhdGlvIG9mIDE6MSwgMToyLCBvciAxOjQgb3IgSENMSyBQTEwgcmF0ZSwKKyAqIHdoaWxlIFBDTEsgY2FuIGJlIDE6MSB0byAxOjMyIG9mIEhDTEsgUExMIHJhdGUuIE1vc3QgcGVyaXBoZXJhbHMgaGlnaAorICogbGV2ZWwgY2xvY2tzIGFyZSBiYXNlZCBvbiBlaXRoZXIgSENMSyBvciBQQ0xLLCBidXQgaGF2ZSB0aGVpciBvd24KKyAqIGRpdmlkZXJzIGFzIHBhcnQgb2YgdGhlIElQIGl0c2VsZi4gQmVjYXVzZSBvZiB0aGlzLCB0aGUgc3lzdGVtIGNsb2NrCisgKiByYXRlcyBzaG91bGQgbm90IGJlIGNoYW5nZWQuCisgKgorICogVGhlIEhDTEsgUExMIGlzIGNsb2NrZWQgZnJvbSBTWVNDTEssIHdoaWNoIGNhbiBiZSBkZXJpdmVkIGZyb20gdGhlCisgKiBtYWluIG9zY2lsbGF0b3Igb3IgUExMMzk3LiBQTEwzOTcgZ2VuZXJhdGVzIGEgcmF0ZSB0aGF0IGlzIDM5NyB0aW1lcworICogdGhlIDMyS0h6IG9zY2lsbGF0b3IgcmF0ZS4gVGhlIG1haW4gb3NjaWxsYXRvciBydW5zIGF0IHRoZSBzZWxlY3RlZAorICogb3NjaWxsYXRvci9jcnlzdGFsIHJhdGUgb24gdGhlIG1vc2NfaW4gcGluIG9mIHRoZSBMUEMzMnh4LiBUaGlzIHJhdGUKKyAqIGlzIG5vcm1hbGx5IDEzTUh6LCBidXQgZGVwZW5kcyBvbiB0aGUgc2VsZWN0aW9uIG9mIGV4dGVybmFsIGNyeXN0YWxzCisgKiBvciBvc2NpbGxhdG9ycy4gSWYgVVNCIG9wZXJhdGlvbiBpcyByZXF1aXJlZCwgdGhlIG1haW4gb3NjaWxsYXRvciBtdXN0CisgKiBiZSB1c2VkIGluIHRoZSBzeXN0ZW0uCisgKgorICogU3dpdGNoaW5nIFNZU0NMSyBiZXR3ZWVuIHNvdXJjZXMgZHVyaW5nIG5vcm1hbCBMaW51eCBvcGVyYXRpb24gaXMgbm90CisgKiBzdXBwb3J0ZWQuIFNZU0NMSyBpcyBwcmVzZXQgaW4gdGhlIGJvb3Rsb2FkZXIuIEJlY2F1c2Ugb2YgdGhlCisgKiBjb21wbGV4aXRpZXMgb2YgY2xvY2sgbWFuYWdlbWVudCBkdXJpbmcgY2xvY2sgZnJlcXVlbmN5IGNoYW5nZXMsCisgKiB0aGVyZSBhcmUgc29tZSBsaW1pdGF0aW9ucyB0byB0aGUgY2xvY2sgZHJpdmVyIGV4cGxhaW5lZCBiZWxvdzoKKyAqIC0gVGhlIFBMTDM5NyBhbmQgbWFpbiBvc2NpbGxhdG9yIGNhbiBiZSBlbmFibGVkIGFuZCBkaXNhYmxlZCBieSB0aGUKKyAqICAgY2xrX2VuYWJsZSgpIGFuZCBjbGtfZGlzYWJsZSgpIGZ1bmN0aW9ucyB1bmxlc3MgU1lTQ0xLIGlzIGJhc2VkCisgKiAgIG9uIHRoYXQgY2xvY2suIFRoaXMgYWxsb3dzIHRoZSBvdGhlciBvc2NpbGxhdG9yIHRoYXQgaXNuJ3QgZHJpdmluZworICogICB0aGUgSENMSyBQTEwgdG8gYmUgdXNlZCBhcyBhbm90aGVyIHN5c3RlbSBjbG9jayB0aGF0IGNhbiBiZSByb3V0ZWQKKyAqICAgdG8gYW4gZXh0ZXJuYWwgcGluLgorICogLSBUaGUgbXV4ZWQgU1lTQ0xLIGlucHV0IGFuZCBIQ0xLX1BMTCByYXRlIGNhbm5vdCBiZSBjaGFuZ2VkIHdpdGgKKyAqICAgdGhpcyBkcml2ZXIuCisgKiAtIEhDTEsgYW5kIFBDTEsgcmF0ZXMgY2Fubm90IGJlIGNoYW5nZWQgYXMgcGFydCBvZiB0aGlzIGRyaXZlci4KKyAqIC0gTW9zdCBwZXJpcGhlcmFscyBoYXZlIHRoZWlyIG93biBkaXZpZGVycyBhcmUgcGFydCBvZiB0aGUgcGVyaXBoZXJhbAorICogICBibG9jay4gQ2hhbmdpbmcgU1lTQ0xLLCBIQ0xLIFBMTCwgSENMSywgb3IgUENMSyBzb3VyY2VzIG9yIHJhdGVzCisgKiAgIHdpbGwgYWxzbyBpbXBhY3QgdGhlIGluZGl2aWR1YWwgcGVyaXBoZXJhbCByYXRlcy4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL2NsY2QuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CisjaW5jbHVkZSA8bWFjaC9jbGtkZXYuaD4KKyNpbmNsdWRlIDxtYWNoL3BsYXRmb3JtLmg+CisjaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlICJjb21tb24uaCIKKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2FybXBsbDsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa191c2JwbGw7CitzdGF0aWMgREVGSU5FX01VVEVYKGNsa21fbG9jayk7CisKKy8qCisgKiBQb3N0IGRpdmlkZXIgdmFsdWVzIGZvciBQTExzIGJhc2VkIG9uIHNlbGVjdGVkIHJlZ2lzdGVyIHZhbHVlCisgKi8KK3N0YXRpYyBjb25zdCB1MzIgcGxsX3Bvc3RkaXZzWzRdID0gezEsIDIsIDQsIDh9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb2NhbF9yZXR1cm5fcGFyZW50X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCS8qCisJICogSWYgYSBjbG9jayBoYXMgYSByYXRlIG9mIDAsIHRoZW4gaXQgaW5oZXJpdHMgaXQncyBwYXJlbnQKKwkgKiBjbG9jayByYXRlCisJICovCisJd2hpbGUgKGNsay0+cmF0ZSA9PSAwKQorCQljbGsgPSBjbGstPnBhcmVudDsKKworCXJldHVybiBjbGstPnJhdGU7Cit9CisKKy8qIDMyS0h6IGNsb2NrIGhhcyBhIGZpeGVkIHJhdGUgYW5kIGlzIG5vdCBzdG9wcGFibGUgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIG9zY18zMktIeiA9IHsKKwkucmF0ZQkJPSBMUEMzMlhYX0NMT0NLX09TQ19GUkVRLAorCS5nZXRfcmF0ZQk9IGxvY2FsX3JldHVybl9wYXJlbnRfcmF0ZSwKK307CisKK3N0YXRpYyBpbnQgbG9jYWxfcGxsMzk3X2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCit7CisJdTMyIHJlZzsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSAxICsgbXNlY3NfdG9famlmZmllcygxMCk7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChMUEMzMlhYX0NMS1BXUl9QTEwzOTdfQ1RSTCk7CisKKwlpZiAoZW5hYmxlID09IDApIHsKKwkJcmVnIHw9IExQQzMyWFhfQ0xLUFdSX1NZU0NUUkxfUExMMzk3X0RJUzsKKwkJX19yYXdfd3JpdGVsKHJlZywgTFBDMzJYWF9DTEtQV1JfUExMMzk3X0NUUkwpOworCX0gZWxzZSB7CisJCS8qIEVuYWJsZSBQTEwzOTcgKi8KKwkJcmVnICY9IH5MUEMzMlhYX0NMS1BXUl9TWVNDVFJMX1BMTDM5N19ESVM7CisJCV9fcmF3X3dyaXRlbChyZWcsIExQQzMyWFhfQ0xLUFdSX1BMTDM5N19DVFJMKTsKKworCQkvKiBXYWl0IGZvciBQTEwzOTcgbG9jayAqLworCQl3aGlsZSAoKChfX3Jhd19yZWFkbChMUEMzMlhYX0NMS1BXUl9QTEwzOTdfQ1RSTCkgJgorCQkJTFBDMzJYWF9DTEtQV1JfU1lTQ1RSTF9QTEwzOTdfU1RTKSA9PSAwKSAmJgorCQkJKHRpbWVvdXQgPiBqaWZmaWVzKSkKKwkJCWNwdV9yZWxheCgpOworCisJCWlmICgoX19yYXdfcmVhZGwoTFBDMzJYWF9DTEtQV1JfUExMMzk3X0NUUkwpICYKKwkJCUxQQzMyWFhfQ0xLUFdSX1NZU0NUUkxfUExMMzk3X1NUUykgPT0gMCkKKwkJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvY2FsX29zY21haW5fZW5hYmxlKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwl1MzIgcmVnOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDEgKyBtc2Vjc190b19qaWZmaWVzKDEwKTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKExQQzMyWFhfQ0xLUFdSX01BSU5fT1NDX0NUUkwpOworCisJaWYgKGVuYWJsZSA9PSAwKSB7CisJCXJlZyB8PSBMUEMzMlhYX0NMS1BXUl9NT1NDX0RJU0FCTEU7CisJCV9fcmF3X3dyaXRlbChyZWcsIExQQzMyWFhfQ0xLUFdSX01BSU5fT1NDX0NUUkwpOworCX0gZWxzZSB7CisJCS8qIEVuYWJsZSBtYWluIG9zY2lsbGF0b3IgKi8KKwkJcmVnICY9IH5MUEMzMlhYX0NMS1BXUl9NT1NDX0RJU0FCTEU7CisJCV9fcmF3X3dyaXRlbChyZWcsIExQQzMyWFhfQ0xLUFdSX01BSU5fT1NDX0NUUkwpOworCisJCS8qIFdhaXQgZm9yIG1haW4gb3NjaWxsYXRvciB0byBzdGFydCAqLworCQl3aGlsZSAoKChfX3Jhd19yZWFkbChMUEMzMlhYX0NMS1BXUl9NQUlOX09TQ19DVFJMKSAmCisJCQlMUEMzMlhYX0NMS1BXUl9NT1NDX0RJU0FCTEUpICE9IDApICYmCisJCQkodGltZW91dCA+IGppZmZpZXMpKQorCQkJY3B1X3JlbGF4KCk7CisKKwkJaWYgKChfX3Jhd19yZWFkbChMUEMzMlhYX0NMS1BXUl9NQUlOX09TQ19DVFJMKSAmCisJCQlMUEMzMlhYX0NMS1BXUl9NT1NDX0RJU0FCTEUpICE9IDApCisJCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgb3NjX3BsbDM5NyA9IHsKKwkucGFyZW50CQk9ICZvc2NfMzJLSHosCisJLmVuYWJsZQkJPSBsb2NhbF9wbGwzOTdfZW5hYmxlLAorCS5yYXRlCQk9IExQQzMyWFhfQ0xPQ0tfT1NDX0ZSRVEgKiAzOTcsCisJLmdldF9yYXRlCT0gbG9jYWxfcmV0dXJuX3BhcmVudF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgb3NjX21haW4gPSB7CisJLmVuYWJsZQkJPSBsb2NhbF9vc2NtYWluX2VuYWJsZSwKKwkucmF0ZQkJPSBMUEMzMlhYX01BSU5fT1NDX0ZSRVEsCisJLmdldF9yYXRlCT0gbG9jYWxfcmV0dXJuX3BhcmVudF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX3N5czsKKworLyoKKyAqIENvbnZlcnQgYSBQTEwgcmVnaXN0ZXIgdmFsdWUgdG8gYSBQTEwgb3V0cHV0IGZyZXF1ZW5jeQorICovCit1MzIgY2xrX2dldF9wbGxyYXRlX2Zyb21fcmVnKHUzMiBpbnB1dGNsaywgdTMyIHJlZ3ZhbCkKK3sKKwlzdHJ1Y3QgY2xrX3BsbF9zZXR1cCBwbGxjZmc7CisKKwlwbGxjZmcuY2NvX2J5cGFzc19iMTUgPSAwOworCXBsbGNmZy5kaXJlY3Rfb3V0cHV0X2IxNCA9IDA7CisJcGxsY2ZnLmZkYmtfZGl2X2N0cmxfYjEzID0gMDsKKwlpZiAoKHJlZ3ZhbCAmIExQQzMyWFhfQ0xLUFdSX0hDTEtQTExfQ0NPX0JZUEFTUykgIT0gMCkKKwkJcGxsY2ZnLmNjb19ieXBhc3NfYjE1ID0gMTsKKwlpZiAoKHJlZ3ZhbCAmIExQQzMyWFhfQ0xLUFdSX0hDTEtQTExfUE9TVERJVl9CWVBBU1MpICE9IDApCisJCXBsbGNmZy5kaXJlY3Rfb3V0cHV0X2IxNCA9IDE7CisJaWYgKChyZWd2YWwgJiBMUEMzMlhYX0NMS1BXUl9IQ0xLUExMX0ZEQktfU0VMX0ZDTEspICE9IDApCisJCXBsbGNmZy5mZGJrX2Rpdl9jdHJsX2IxMyA9IDE7CisJcGxsY2ZnLnBsbF9tID0gMSArICgocmVndmFsID4+IDEpICYgMHhGRik7CisJcGxsY2ZnLnBsbF9uID0gMSArICgocmVndmFsID4+IDkpICYgMHgzKTsKKwlwbGxjZmcucGxsX3AgPSBwbGxfcG9zdGRpdnNbKChyZWd2YWwgPj4gMTEpICYgMHgzKV07CisKKwlyZXR1cm4gY2xrX2NoZWNrX3BsbF9zZXR1cChpbnB1dGNsaywgJnBsbGNmZyk7Cit9CisKKy8qCisgKiBTZXR1cCB0aGUgSENMSyBQTEwgd2l0aCBhIFBMTCBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHUzMiBsb2NhbF9jbGtfcGxsX3NldHVwKHN0cnVjdCBjbGtfcGxsX3NldHVwICpQbGxTZXR1cCkKK3sKKwl1MzIgdHYsIHRtcCA9IDA7CisKKwlpZiAoUGxsU2V0dXAtPmFuYWxvZ19vbiAhPSAwKQorCQl0bXAgfD0gTFBDMzJYWF9DTEtQV1JfSENMS1BMTF9QT1dFUl9VUDsKKwlpZiAoUGxsU2V0dXAtPmNjb19ieXBhc3NfYjE1ICE9IDApCisJCXRtcCB8PSBMUEMzMlhYX0NMS1BXUl9IQ0xLUExMX0NDT19CWVBBU1M7CisJaWYgKFBsbFNldHVwLT5kaXJlY3Rfb3V0cHV0X2IxNCAhPSAwKQorCQl0bXAgfD0gTFBDMzJYWF9DTEtQV1JfSENMS1BMTF9QT1NURElWX0JZUEFTUzsKKwlpZiAoUGxsU2V0dXAtPmZkYmtfZGl2X2N0cmxfYjEzICE9IDApCisJCXRtcCB8PSBMUEMzMlhYX0NMS1BXUl9IQ0xLUExMX0ZEQktfU0VMX0ZDTEs7CisKKwl0diA9IGZmcyhQbGxTZXR1cC0+cGxsX3ApIC0gMTsKKwlpZiAoKCFpc19wb3dlcl9vZl8yKFBsbFNldHVwLT5wbGxfcCkpIHx8ICh0diA+IDMpKQorCQlyZXR1cm4gMDsKKworCXRtcCB8PSBMUEMzMlhYX0NMS1BXUl9IQ0xLUExMX1BPU1RESVZfMlBPVyh0dik7CisJdG1wIHw9IExQQzMyWFhfQ0xLUFdSX0hDTEtQTExfUFJFRElWX1BMVVMxKFBsbFNldHVwLT5wbGxfbiAtIDEpOworCXRtcCB8PSBMUEMzMlhYX0NMS1BXUl9IQ0xLUExMX1BMTE0oUGxsU2V0dXAtPnBsbF9tIC0gMSk7CisKKwlyZXR1cm4gdG1wOworfQorCisvKgorICogVXBkYXRlIHRoZSBBUk0gY29yZSBQTEwgZnJlcXVlbmN5IHJhdGUgdmFyaWFibGUgZnJvbSB0aGUgYWN0dWFsIFBMTCBzZXR0aW5nCisgKi8KK3N0YXRpYyB2b2lkIGxvY2FsX3VwZGF0ZV9hcm1wbGxfcmF0ZSh2b2lkKQoreworCXUzMiBjbGtpbiwgcGxscmVnOworCisJY2xraW4gPSBjbGtfYXJtcGxsLnBhcmVudC0+cmF0ZTsKKwlwbGxyZWcgPSBfX3Jhd19yZWFkbChMUEMzMlhYX0NMS1BXUl9IQ0xLUExMX0NUUkwpICYgMHgxRkZGRjsKKworCWNsa19hcm1wbGwucmF0ZSA9IGNsa19nZXRfcGxscmF0ZV9mcm9tX3JlZyhjbGtpbiwgcGxscmVnKTsKK30KKworLyoKKyAqIEZpbmQgYSBQTEwgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlbGVjdGVkIGlucHV0IGZyZXF1ZW5jeQorICovCitzdGF0aWMgdTMyIGxvY2FsX2Nsa19maW5kX3BsbF9jZmcodTMyIHBsbGluX2ZyZXEsIHUzMiB0YXJnZXRfZnJlcSwKKwlzdHJ1Y3QgY2xrX3BsbF9zZXR1cCAqcGxsc2V0dXApCit7CisJdTMyIGlmcmVxLCBmcmVxdG9sLCBtLCBuLCBwLCBmY2xrb3V0OworCisJLyogRGV0ZXJtaW5lIGZyZXF1ZW5jeSB0b2xlcmFuY2UgbGltaXRzICovCisJZnJlcXRvbCA9IHRhcmdldF9mcmVxIC8gMjUwOworCWlmcmVxID0gcGxsaW5fZnJlcTsKKworCS8qIElzIGRpcmVjdCBieXBhc3MgbW9kZSBwb3NzaWJsZT8gKi8KKwlpZiAoYWJzKHBsbGluX2ZyZXEgLSB0YXJnZXRfZnJlcSkgPD0gZnJlcXRvbCkgeworCQlwbGxzZXR1cC0+YW5hbG9nX29uID0gMDsKKwkJcGxsc2V0dXAtPmNjb19ieXBhc3NfYjE1ID0gMTsKKwkJcGxsc2V0dXAtPmRpcmVjdF9vdXRwdXRfYjE0ID0gMTsKKwkJcGxsc2V0dXAtPmZkYmtfZGl2X2N0cmxfYjEzID0gMTsKKwkJcGxsc2V0dXAtPnBsbF9wID0gcGxsX3Bvc3RkaXZzWzBdOworCQlwbGxzZXR1cC0+cGxsX24gPSAxOworCQlwbGxzZXR1cC0+cGxsX20gPSAxOworCQlyZXR1cm4gY2xrX2NoZWNrX3BsbF9zZXR1cChpZnJlcSwgcGxsc2V0dXApOworCX0gZWxzZSBpZiAodGFyZ2V0X2ZyZXEgPD0gaWZyZXEpIHsKKwkJcGxsc2V0dXAtPmFuYWxvZ19vbiA9IDA7CisJCXBsbHNldHVwLT5jY29fYnlwYXNzX2IxNSA9IDE7CisJCXBsbHNldHVwLT5kaXJlY3Rfb3V0cHV0X2IxNCA9IDA7CisJCXBsbHNldHVwLT5mZGJrX2Rpdl9jdHJsX2IxMyA9IDE7CisJCXBsbHNldHVwLT5wbGxfbiA9IDE7CisJCXBsbHNldHVwLT5wbGxfbSA9IDE7CisJCWZvciAocCA9IDA7IHAgPD0gMzsgcCsrKSB7CisJCQlwbGxzZXR1cC0+cGxsX3AgPSBwbGxfcG9zdGRpdnNbcF07CisJCQlmY2xrb3V0ID0gY2xrX2NoZWNrX3BsbF9zZXR1cChpZnJlcSwgcGxsc2V0dXApOworCQkJaWYgKGFicyh0YXJnZXRfZnJlcSAtIGZjbGtvdXQpIDw9IGZyZXF0b2wpCisJCQkJcmV0dXJuIGZjbGtvdXQ7CisJCX0KKwl9CisKKwkvKiBJcyBkaXJlY3QgbW9kZSBwb3NzaWJsZT8gKi8KKwlwbGxzZXR1cC0+YW5hbG9nX29uID0gMTsKKwlwbGxzZXR1cC0+Y2NvX2J5cGFzc19iMTUgPSAwOworCXBsbHNldHVwLT5kaXJlY3Rfb3V0cHV0X2IxNCA9IDE7CisJcGxsc2V0dXAtPmZkYmtfZGl2X2N0cmxfYjEzID0gMDsKKwlwbGxzZXR1cC0+cGxsX3AgPSBwbGxfcG9zdGRpdnNbMF07CisJZm9yIChtID0gMTsgbSA8PSAyNTY7IG0rKykgeworCQlmb3IgKG4gPSAxOyBuIDw9IDQ7IG4rKykgeworCQkJLyogQ29tcHV0ZSBvdXRwdXQgZnJlcXVlbmN5IGZvciB0aGlzIHZhbHVlICovCisJCQlwbGxzZXR1cC0+cGxsX24gPSBuOworCQkJcGxsc2V0dXAtPnBsbF9tID0gbTsKKwkJCWZjbGtvdXQgPSBjbGtfY2hlY2tfcGxsX3NldHVwKGlmcmVxLAorCQkJCXBsbHNldHVwKTsKKwkJCWlmIChhYnModGFyZ2V0X2ZyZXEgLSBmY2xrb3V0KSA8PQorCQkJCWZyZXF0b2wpCisJCQkJcmV0dXJuIGZjbGtvdXQ7CisJCX0KKwl9CisKKwkvKiBJcyBpbnRlZ2VyIG1vZGUgcG9zc2libGU/ICovCisJcGxsc2V0dXAtPmFuYWxvZ19vbiA9IDE7CisJcGxsc2V0dXAtPmNjb19ieXBhc3NfYjE1ID0gMDsKKwlwbGxzZXR1cC0+ZGlyZWN0X291dHB1dF9iMTQgPSAwOworCXBsbHNldHVwLT5mZGJrX2Rpdl9jdHJsX2IxMyA9IDE7CisJZm9yIChtID0gMTsgbSA8PSAyNTY7IG0rKykgeworCQlmb3IgKG4gPSAxOyBuIDw9IDQ7IG4rKykgeworCQkJZm9yIChwID0gMDsgcCA8IDQ7IHArKykgeworCQkJCS8qIENvbXB1dGUgb3V0cHV0IGZyZXF1ZW5jeSAqLworCQkJCXBsbHNldHVwLT5wbGxfcCA9IHBsbF9wb3N0ZGl2c1twXTsKKwkJCQlwbGxzZXR1cC0+cGxsX24gPSBuOworCQkJCXBsbHNldHVwLT5wbGxfbSA9IG07CisJCQkJZmNsa291dCA9IGNsa19jaGVja19wbGxfc2V0dXAoCisJCQkJCWlmcmVxLCBwbGxzZXR1cCk7CisJCQkJaWYgKGFicyh0YXJnZXRfZnJlcSAtIGZjbGtvdXQpIDw9IGZyZXF0b2wpCisJCQkJCXJldHVybiBmY2xrb3V0OworCQkJfQorCQl9CisJfQorCisJLyogVHJ5IG5vbi1pbnRlZ2VyIG1vZGUgKi8KKwlwbGxzZXR1cC0+YW5hbG9nX29uID0gMTsKKwlwbGxzZXR1cC0+Y2NvX2J5cGFzc19iMTUgPSAwOworCXBsbHNldHVwLT5kaXJlY3Rfb3V0cHV0X2IxNCA9IDA7CisJcGxsc2V0dXAtPmZkYmtfZGl2X2N0cmxfYjEzID0gMDsKKwlmb3IgKG0gPSAxOyBtIDw9IDI1NjsgbSsrKSB7CisJCWZvciAobiA9IDE7IG4gPD0gNDsgbisrKSB7CisJCQlmb3IgKHAgPSAwOyBwIDwgNDsgcCsrKSB7CisJCQkJLyogQ29tcHV0ZSBvdXRwdXQgZnJlcXVlbmN5ICovCisJCQkJcGxsc2V0dXAtPnBsbF9wID0gcGxsX3Bvc3RkaXZzW3BdOworCQkJCXBsbHNldHVwLT5wbGxfbiA9IG47CisJCQkJcGxsc2V0dXAtPnBsbF9tID0gbTsKKwkJCQlmY2xrb3V0ID0gY2xrX2NoZWNrX3BsbF9zZXR1cCgKKwkJCQkJaWZyZXEsIHBsbHNldHVwKTsKKwkJCQlpZiAoYWJzKHRhcmdldF9mcmVxIC0gZmNsa291dCkgPD0gZnJlcXRvbCkKKwkJCQkJcmV0dXJuIGZjbGtvdXQ7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2FybXBsbCA9IHsKKwkucGFyZW50CQk9ICZjbGtfc3lzLAorCS5nZXRfcmF0ZQk9IGxvY2FsX3JldHVybl9wYXJlbnRfcmF0ZSwKK307CisKKy8qCisgKiBTZXR1cCB0aGUgVVNCIFBMTCB3aXRoIGEgUExMIHN0cnVjdHVyZQorICovCitzdGF0aWMgdTMyIGxvY2FsX2Nsa191c2JwbGxfc2V0dXAoc3RydWN0IGNsa19wbGxfc2V0dXAgKnBIQ0xLUGxsU2V0dXApCit7CisJdTMyIHJlZywgdG1wID0gbG9jYWxfY2xrX3BsbF9zZXR1cChwSENMS1BsbFNldHVwKTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKExQQzMyWFhfQ0xLUFdSX1VTQl9DVFJMKSAmIH4weDFGRkZGOworCXJlZyB8PSB0bXA7CisJX19yYXdfd3JpdGVsKHJlZywgTFBDMzJYWF9DTEtQV1JfVVNCX0NUUkwpOworCisJcmV0dXJuIGNsa19jaGVja19wbGxfc2V0dXAoY2xrX3VzYnBsbC5wYXJlbnQtPnJhdGUsCisJCXBIQ0xLUGxsU2V0dXApOworfQorCitzdGF0aWMgaW50IGxvY2FsX3VzYnBsbF9lbmFibGUoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQoreworCXUzMiByZWc7CisJaW50IHJldCA9IC1FTk9ERVY7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMSArIG1zZWNzX3RvX2ppZmZpZXMoMTApOworCisJcmVnID0gX19yYXdfcmVhZGwoTFBDMzJYWF9DTEtQV1JfVVNCX0NUUkwpOworCisJaWYgKGVuYWJsZSA9PSAwKSB7CisJCXJlZyAmPSB+KExQQzMyWFhfQ0xLUFdSX1VTQkNUUkxfQ0xLX0VOMSB8CisJCQlMUEMzMlhYX0NMS1BXUl9VU0JDVFJMX0NMS19FTjIpOworCQlfX3Jhd193cml0ZWwocmVnLCBMUEMzMlhYX0NMS1BXUl9VU0JfQ1RSTCk7CisJfSBlbHNlIGlmIChyZWcgJiBMUEMzMlhYX0NMS1BXUl9VU0JDVFJMX1BMTF9QV1JVUCkgeworCQlyZWcgfD0gTFBDMzJYWF9DTEtQV1JfVVNCQ1RSTF9DTEtfRU4xOworCQlfX3Jhd193cml0ZWwocmVnLCBMUEMzMlhYX0NMS1BXUl9VU0JfQ1RSTCk7CisKKwkJLyogV2FpdCBmb3IgUExMIGxvY2sgKi8KKwkJd2hpbGUgKCh0aW1lb3V0ID4gamlmZmllcykgJiAocmV0ID09IC1FTk9ERVYpKSB7CisJCQlyZWcgPSBfX3Jhd19yZWFkbChMUEMzMlhYX0NMS1BXUl9VU0JfQ1RSTCk7CisJCQlpZiAocmVnICYgTFBDMzJYWF9DTEtQV1JfVVNCQ1RSTF9QTExfU1RTKQorCQkJCXJldCA9IDA7CisJCX0KKworCQlpZiAocmV0ID09IDApIHsKKwkJCXJlZyB8PSBMUEMzMlhYX0NMS1BXUl9VU0JDVFJMX0NMS19FTjI7CisJCQlfX3Jhd193cml0ZWwocmVnLCBMUEMzMlhYX0NMS1BXUl9VU0JfQ1RSTCk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb2NhbF91c2JwbGxfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssCisJdW5zaWduZWQgbG9uZyByYXRlKQoreworCXUzMiBjbGtpbiwgdXNiZGl2OworCXN0cnVjdCBjbGtfcGxsX3NldHVwIHBsbHNldHVwOworCisJLyoKKwkgKiBVbmxpa2Ugb3RoZXIgY2xvY2tzLCB0aGlzIGNsb2NrIGhhcyBhIEtIeiBpbnB1dCByYXRlLCBzbyBidW1wCisJICogaXQgdXAgdG8gd29yayB3aXRoIHRoZSBQTEwgZnVuY3Rpb24KKwkgKi8KKwlyYXRlID0gcmF0ZSAqIDEwMDA7CisKKwljbGtpbiA9IGNsay0+cGFyZW50LT5yYXRlOworCXVzYmRpdiA9IChfX3Jhd19yZWFkbChMUEMzMlhYX0NMS1BXUl9VU0JDTEtfUERJVikgJgorCQlMUEMzMlhYX0NMS1BXUl9VU0JQRElWX1BMTF9NQVNLKSArIDE7CisJY2xraW4gPSBjbGtpbiAvIHVzYmRpdjsKKworCS8qIFRyeSB0byBmaW5kIGEgZ29vZCByYXRlIHNldHVwICovCisJaWYgKGxvY2FsX2Nsa19maW5kX3BsbF9jZmcoY2xraW4sIHJhdGUsICZwbGxzZXR1cCkgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gY2xrX2NoZWNrX3BsbF9zZXR1cChjbGtpbiwgJnBsbHNldHVwKTsKK30KKworc3RhdGljIGludCBsb2NhbF91c2JwbGxfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdTMyIGNsa2luLCByZWcsIHVzYmRpdjsKKwlzdHJ1Y3QgY2xrX3BsbF9zZXR1cCBwbGxzZXR1cDsKKworCS8qCisJICogVW5saWtlIG90aGVyIGNsb2NrcywgdGhpcyBjbG9jayBoYXMgYSBLSHogaW5wdXQgcmF0ZSwgc28gYnVtcAorCSAqIGl0IHVwIHRvIHdvcmsgd2l0aCB0aGUgUExMIGZ1bmN0aW9uCisJICovCisJcmF0ZSA9IHJhdGUgKiAxMDAwOworCisJY2xraW4gPSBjbGstPmdldF9yYXRlKGNsayk7CisJdXNiZGl2ID0gKF9fcmF3X3JlYWRsKExQQzMyWFhfQ0xLUFdSX1VTQkNMS19QRElWKSAmCisJCUxQQzMyWFhfQ0xLUFdSX1VTQlBESVZfUExMX01BU0spICsgMTsKKwljbGtpbiA9IGNsa2luIC8gdXNiZGl2OworCisJLyogVHJ5IHRvIGZpbmQgYSBnb29kIHJhdGUgc2V0dXAgKi8KKwlpZiAobG9jYWxfY2xrX2ZpbmRfcGxsX2NmZyhjbGtpbiwgcmF0ZSwgJnBsbHNldHVwKSA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxvY2FsX3VzYnBsbF9lbmFibGUoY2xrLCAwKTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKExQQzMyWFhfQ0xLUFdSX1VTQl9DVFJMKTsKKwlyZWcgfD0gTFBDMzJYWF9DTEtQV1JfVVNCQ1RSTF9DTEtfRU4xOworCV9fcmF3X3dyaXRlbChyZWcsIExQQzMyWFhfQ0xLUFdSX1VTQl9DVFJMKTsKKworCXBsbHNldHVwLmFuYWxvZ19vbiA9IDE7CisJbG9jYWxfY2xrX3VzYnBsbF9zZXR1cCgmcGxsc2V0dXApOworCisJY2xrLT5yYXRlID0gY2xrX2NoZWNrX3BsbF9zZXR1cChjbGtpbiwgJnBsbHNldHVwKTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKExQQzMyWFhfQ0xLUFdSX1VTQl9DVFJMKTsKKwlyZWcgfD0gTFBDMzJYWF9DTEtQV1JfVVNCQ1RSTF9DTEtfRU4yOworCV9fcmF3X3dyaXRlbChyZWcsIExQQzMyWFhfQ0xLUFdSX1VTQl9DVFJMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNsayBjbGtfdXNicGxsID0geworCS5wYXJlbnQJCT0gJm9zY19tYWluLAorCS5zZXRfcmF0ZQk9IGxvY2FsX3VzYnBsbF9zZXRfcmF0ZSwKKwkuZW5hYmxlCQk9IGxvY2FsX3VzYnBsbF9lbmFibGUsCisJLnJhdGUJCT0gNDgwMDAsIC8qIEluIEtIeiAqLworCS5nZXRfcmF0ZQk9IGxvY2FsX3JldHVybl9wYXJlbnRfcmF0ZSwKKwkucm91bmRfcmF0ZQk9IGxvY2FsX3VzYnBsbF9yb3VuZF9yYXRlLAorfTsKKworc3RhdGljIHUzMiBjbGtfZ2V0X2hjbGtfZGl2KHZvaWQpCit7CisJc3RhdGljIGNvbnN0IHUzMiBoY2xrZGl2c1s0XSA9IHsxLCAyLCA0LCA0fTsKKwlyZXR1cm4gaGNsa2RpdnNbTFBDMzJYWF9DTEtQV1JfSENMS0RJVl9ESVZfMlBPVygKKwkJX19yYXdfcmVhZGwoTFBDMzJYWF9DTEtQV1JfSENMS19ESVYpKV07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19oY2xrID0geworCS5wYXJlbnQJCT0gJmNsa19hcm1wbGwsCisJLmdldF9yYXRlCT0gbG9jYWxfcmV0dXJuX3BhcmVudF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX3BjbGsgPSB7CisJLnBhcmVudAkJPSAmY2xrX2FybXBsbCwKKwkuZ2V0X3JhdGUJPSBsb2NhbF9yZXR1cm5fcGFyZW50X3JhdGUsCit9OworCitzdGF0aWMgaW50IGxvY2FsX29ub2ZmX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCit7CisJdTMyIHRtcDsKKworCXRtcCA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisKKwlpZiAoZW5hYmxlID09IDApCisJCXRtcCAmPSB+Y2xrLT5lbmFibGVfbWFzazsKKwllbHNlCisJCXRtcCB8PSBjbGstPmVuYWJsZV9tYXNrOworCisJX19yYXdfd3JpdGVsKHRtcCwgY2xrLT5lbmFibGVfcmVnKTsKKworCXJldHVybiAwOworfQorCisvKiBQZXJpcGhlcmFsIGNsb2NrIHNvdXJjZXMgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa190aW1lcjAgPSB7CisJLnBhcmVudAkJPSAmY2xrX3BjbGssCisJLmVuYWJsZQkJPSBsb2NhbF9vbm9mZl9lbmFibGUsCisJLmVuYWJsZV9yZWcJPSBMUEMzMlhYX0NMS1BXUl9USU1FUlNfUFdNU19DTEtfQ1RSTF8xLAorCS5lbmFibGVfbWFzawk9IExQQzMyWFhfQ0xLUFdSX1RNUlBXTUNMS19USU1FUjBfRU4sCisJLmdldF9yYXRlCT0gbG9jYWxfcmV0dXJuX3BhcmVudF9yYXRlLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa190aW1lcjEgPSB7CisJLnBhcmVudAkJPSAmY2xrX3BjbGssCisJLmVuYWJsZQkJPSBsb2NhbF9vbm9mZl9lbmFibGUsCisJLmVuYWJsZV9yZWcJPSBMUEMzMlhYX0NMS1BXUl9USU1FUlNfUFdNU19DTEtfQ1RSTF8xLAorCS5lbmFibGVfbWFzawk9IExQQzMyWFhfQ0xLUFdSX1RNUlBXTUNMS19USU1FUjFfRU4sCisJLmdldF9yYXRlCT0gbG9jYWxfcmV0dXJuX3BhcmVudF9yYXRlLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa190aW1lcjIgPSB7CisJLnBhcmVudAkJPSAmY2xrX3BjbGssCisJLmVuYWJsZQkJPSBsb2NhbF9vbm9mZl9lbmFibGUsCisJLmVuYWJsZV9yZWcJPSBMUEMzMlhYX0NMS1BXUl9USU1FUlNfUFdNU19DTEtfQ1RSTF8xLAorCS5lbmFibGVfbWFzawk9IExQQzMyWFhfQ0xLUFdSX1RNUlBXTUNMS19USU1FUjJfRU4sCisJLmdldF9yYXRlCT0gbG9jYWxfcmV0dXJuX3BhcmVudF9yYXRlLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa190aW1lcjMgPSB7CisJLnBhcmVudAkJPSAmY2xrX3BjbGssCisJLmVuYWJsZQkJPSBsb2NhbF9vbm9mZl9lbmFibGUsCisJLmVuYWJsZV9yZWcJPSBMUEMzMlhYX0NMS1BXUl9USU1FUlNfUFdNU19DTEtfQ1RSTF8xLAorCS5lbmFibGVfbWFzawk9IExQQzMyWFhfQ0xLUFdSX1RNUlBXTUNMS19USU1FUjNfRU4sCisJLmdldF9yYXRlCT0gbG9jYWxfcmV0dXJuX3BhcmVudF9yYXRlLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa193ZHQgPSB7CisJLnBhcmVudAkJPSAmY2xrX3BjbGssCisJLmVuYWJsZQkJPSBsb2NhbF9vbm9mZl9lbmFibGUsCisJLmVuYWJsZV9yZWcJPSBMUEMzMlhYX0NMS1BXUl9USU1FUl9DTEtfQ1RSTCwKKwkuZW5hYmxlX21hc2sJPSBMUEMzMlhYX0NMS1BXUl9QV01DTEtfV0RPR19FTiwKKwkuZ2V0X3JhdGUJPSBsb2NhbF9yZXR1cm5fcGFyZW50X3JhdGUsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgY2xrX3ZmcDkgPSB7CisJLnBhcmVudAkJPSAmY2xrX3BjbGssCisJLmVuYWJsZQkJPSBsb2NhbF9vbm9mZl9lbmFibGUsCisJLmVuYWJsZV9yZWcJPSBMUEMzMlhYX0NMS1BXUl9ERUJVR19DVFJMLAorCS5lbmFibGVfbWFzawk9IExQQzMyWFhfQ0xLUFdSX1ZGUF9DTE9DS19FTkFCTEVfQklULAorCS5nZXRfcmF0ZQk9IGxvY2FsX3JldHVybl9wYXJlbnRfcmF0ZSwKK307CitzdGF0aWMgc3RydWN0IGNsayBjbGtfZG1hID0geworCS5wYXJlbnQJCT0gJmNsa19oY2xrLAorCS5lbmFibGUJCT0gbG9jYWxfb25vZmZfZW5hYmxlLAorCS5lbmFibGVfcmVnCT0gTFBDMzJYWF9DTEtQV1JfRE1BX0NMS19DVFJMLAorCS5lbmFibGVfbWFzawk9IExQQzMyWFhfQ0xLUFdSX0RNQUNMS0NUUkxfQ0xLX0VOLAorCS5nZXRfcmF0ZQk9IGxvY2FsX3JldHVybl9wYXJlbnRfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa191YXJ0MyA9IHsKKwkucGFyZW50CQk9ICZjbGtfcGNsaywKKwkuZW5hYmxlCQk9IGxvY2FsX29ub2ZmX2VuYWJsZSwKKwkuZW5hYmxlX3JlZwk9IExQQzMyWFhfQ0xLUFdSX1VBUlRfQ0xLX0NUUkwsCisJLmVuYWJsZV9tYXNrCT0gTFBDMzJYWF9DTEtQV1JfVUFSVENMS0NUUkxfVUFSVDNfRU4sCisJLmdldF9yYXRlCT0gbG9jYWxfcmV0dXJuX3BhcmVudF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX3VhcnQ0ID0geworCS5wYXJlbnQJCT0gJmNsa19wY2xrLAorCS5lbmFibGUJCT0gbG9jYWxfb25vZmZfZW5hYmxlLAorCS5lbmFibGVfcmVnCT0gTFBDMzJYWF9DTEtQV1JfVUFSVF9DTEtfQ1RSTCwKKwkuZW5hYmxlX21hc2sJPSBMUEMzMlhYX0NMS1BXUl9VQVJUQ0xLQ1RSTF9VQVJUNF9FTiwKKwkuZ2V0X3JhdGUJPSBsb2NhbF9yZXR1cm5fcGFyZW50X3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjbGtfdWFydDUgPSB7CisJLnBhcmVudAkJPSAmY2xrX3BjbGssCisJLmVuYWJsZQkJPSBsb2NhbF9vbm9mZl9lbmFibGUsCisJLmVuYWJsZV9yZWcJPSBMUEMzMlhYX0NMS1BXUl9VQVJUX0NMS19DVFJMLAorCS5lbmFibGVfbWFzawk9IExQQzMyWFhfQ0xLUFdSX1VBUlRDTEtDVFJMX1VBUlQ1X0VOLAorCS5nZXRfcmF0ZQk9IGxvY2FsX3JldHVybl9wYXJlbnRfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa191YXJ0NiA9IHsKKwkucGFyZW50CQk9ICZjbGtfcGNsaywKKwkuZW5hYmxlCQk9IGxvY2FsX29ub2ZmX2VuYWJsZSwKKwkuZW5hYmxlX3JlZwk9IExQQzMyWFhfQ0xLUFdSX1VBUlRfQ0xLX0NUUkwsCisJLmVuYWJsZV9tYXNrCT0gTFBDMzJYWF9DTEtQV1JfVUFSVENMS0NUUkxfVUFSVDZfRU4sCisJLmdldF9yYXRlCT0gbG9jYWxfcmV0dXJuX3BhcmVudF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2kyYzAgPSB7CisJLnBhcmVudAkJPSAmY2xrX2hjbGssCisJLmVuYWJsZQkJPSBsb2NhbF9vbm9mZl9lbmFibGUsCisJLmVuYWJsZV9yZWcJPSBMUEMzMlhYX0NMS1BXUl9JMkNfQ0xLX0NUUkwsCisJLmVuYWJsZV9tYXNrCT0gTFBDMzJYWF9DTEtQV1JfSTJDQ0xLX0kyQzFDTEtfRU4sCisJLmdldF9yYXRlCT0gbG9jYWxfcmV0dXJuX3BhcmVudF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2kyYzEgPSB7CisJLnBhcmVudAkJPSAmY2xrX2hjbGssCisJLmVuYWJsZQkJPSBsb2NhbF9vbm9mZl9lbmFibGUsCisJLmVuYWJsZV9yZWcJPSBMUEMzMlhYX0NMS1BXUl9JMkNfQ0xLX0NUUkwsCisJLmVuYWJsZV9tYXNrCT0gTFBDMzJYWF9DTEtQV1JfSTJDQ0xLX0kyQzJDTEtfRU4sCisJLmdldF9yYXRlCT0gbG9jYWxfcmV0dXJuX3BhcmVudF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2kyYzIgPSB7CisJLnBhcmVudAkJPSAmY2xrX3BjbGssCisJLmVuYWJsZQkJPSBsb2NhbF9vbm9mZl9lbmFibGUsCisJLmVuYWJsZV9yZWcJPSBpb19wMnYoTFBDMzJYWF9VU0JfQkFTRSArIDB4RkY0KSwKKwkuZW5hYmxlX21hc2sJPSAweDQsCisJLmdldF9yYXRlCT0gbG9jYWxfcmV0dXJuX3BhcmVudF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX3NzcDAgPSB7CisJLnBhcmVudAkJPSAmY2xrX2hjbGssCisJLmVuYWJsZQkJPSBsb2NhbF9vbm9mZl9lbmFibGUsCisJLmVuYWJsZV9yZWcJPSBMUEMzMlhYX0NMS1BXUl9TU1BfQ0xLX0NUUkwsCisJLmVuYWJsZV9tYXNrCT0gTFBDMzJYWF9DTEtQV1JfU1NQQ1RSTF9TU1BDTEswX0VOLAorCS5nZXRfcmF0ZQk9IGxvY2FsX3JldHVybl9wYXJlbnRfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19zc3AxID0geworCS5wYXJlbnQJCT0gJmNsa19oY2xrLAorCS5lbmFibGUJCT0gbG9jYWxfb25vZmZfZW5hYmxlLAorCS5lbmFibGVfcmVnCT0gTFBDMzJYWF9DTEtQV1JfU1NQX0NMS19DVFJMLAorCS5lbmFibGVfbWFzawk9IExQQzMyWFhfQ0xLUFdSX1NTUENUUkxfU1NQQ0xLMV9FTiwKKwkuZ2V0X3JhdGUJPSBsb2NhbF9yZXR1cm5fcGFyZW50X3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjbGtfa3NjYW4gPSB7CisJLnBhcmVudAkJPSAmb3NjXzMyS0h6LAorCS5lbmFibGUJCT0gbG9jYWxfb25vZmZfZW5hYmxlLAorCS5lbmFibGVfcmVnCT0gTFBDMzJYWF9DTEtQV1JfS0VZX0NMS19DVFJMLAorCS5lbmFibGVfbWFzawk9IExQQzMyWFhfQ0xLUFdSX0tFWUNMS0NUUkxfQ0xLX0VOLAorCS5nZXRfcmF0ZQk9IGxvY2FsX3JldHVybl9wYXJlbnRfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19uYW5kID0geworCS5wYXJlbnQJCT0gJmNsa19oY2xrLAorCS5lbmFibGUJCT0gbG9jYWxfb25vZmZfZW5hYmxlLAorCS5lbmFibGVfcmVnCT0gTFBDMzJYWF9DTEtQV1JfTkFORF9DTEtfQ1RSTCwKKwkuZW5hYmxlX21hc2sJPSBMUEMzMlhYX0NMS1BXUl9OQU5EQ0xLX1NMQ0NMS19FTiwKKwkuZ2V0X3JhdGUJPSBsb2NhbF9yZXR1cm5fcGFyZW50X3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjbGtfaTJzMCA9IHsKKwkucGFyZW50CQk9ICZjbGtfaGNsaywKKwkuZW5hYmxlCQk9IGxvY2FsX29ub2ZmX2VuYWJsZSwKKwkuZW5hYmxlX3JlZwk9IExQQzMyWFhfQ0xLUFdSX0kyU19DTEtfQ1RSTCwKKwkuZW5hYmxlX21hc2sJPSBMUEMzMlhYX0NMS1BXUl9JMlNDVFJMX0kyU0NMSzBfRU4sCisJLmdldF9yYXRlCT0gbG9jYWxfcmV0dXJuX3BhcmVudF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2kyczEgPSB7CisJLnBhcmVudAkJPSAmY2xrX2hjbGssCisJLmVuYWJsZQkJPSBsb2NhbF9vbm9mZl9lbmFibGUsCisJLmVuYWJsZV9yZWcJPSBMUEMzMlhYX0NMS1BXUl9JMlNfQ0xLX0NUUkwsCisJLmVuYWJsZV9tYXNrCT0gTFBDMzJYWF9DTEtQV1JfSTJTQ1RSTF9JMlNDTEsxX0VOLAorCS5nZXRfcmF0ZQk9IGxvY2FsX3JldHVybl9wYXJlbnRfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19uZXQgPSB7CisJLnBhcmVudAkJPSAmY2xrX2hjbGssCisJLmVuYWJsZQkJPSBsb2NhbF9vbm9mZl9lbmFibGUsCisJLmVuYWJsZV9yZWcJPSBMUEMzMlhYX0NMS1BXUl9NQUNDTEtfQ1RSTCwKKwkuZW5hYmxlX21hc2sJPSAoTFBDMzJYWF9DTEtQV1JfTUFDQ1RSTF9ETUFDTEtfRU4gfAorCQlMUEMzMlhYX0NMS1BXUl9NQUNDVFJMX01NSU9DTEtfRU4gfAorCQlMUEMzMlhYX0NMS1BXUl9NQUNDVFJMX0hSQ0NMS19FTiksCisJLmdldF9yYXRlCT0gbG9jYWxfcmV0dXJuX3BhcmVudF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX3J0YyA9IHsKKwkucGFyZW50CQk9ICZvc2NfMzJLSHosCisJLnJhdGUJCT0gMSwgLyogMSBIeiAqLworCS5nZXRfcmF0ZQk9IGxvY2FsX3JldHVybl9wYXJlbnRfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa191c2JkID0geworCS5wYXJlbnQJCT0gJmNsa191c2JwbGwsCisJLmVuYWJsZQkJPSBsb2NhbF9vbm9mZl9lbmFibGUsCisJLmVuYWJsZV9yZWcJPSBMUEMzMlhYX0NMS1BXUl9VU0JfQ1RSTCwKKwkuZW5hYmxlX21hc2sJPSBMUEMzMlhYX0NMS1BXUl9VU0JDVFJMX0hDTEtfRU4sCisJLmdldF9yYXRlCT0gbG9jYWxfcmV0dXJuX3BhcmVudF9yYXRlLAorfTsKKworc3RhdGljIGludCB0c2Nfb25vZmZfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwl1MzIgdG1wOworCisJLyogTWFrZSBzdXJlIDMyS0h6IGNsb2NrIGlzIHRoZSBzZWxlY3RlZCBjbG9jayAqLworCXRtcCA9IF9fcmF3X3JlYWRsKExQQzMyWFhfQ0xLUFdSX0FEQ19DTEtfQ1RSTF8xKTsKKwl0bXAgJj0gfkxQQzMyWFhfQ0xLUFdSX0FEQ0NUUkwxX1BDTEtfU0VMOworCV9fcmF3X3dyaXRlbCh0bXAsIExQQzMyWFhfQ0xLUFdSX0FEQ19DTEtfQ1RSTF8xKTsKKworCWlmIChlbmFibGUgPT0gMCkKKwkJX19yYXdfd3JpdGVsKDAsIGNsay0+ZW5hYmxlX3JlZyk7CisJZWxzZQorCQlfX3Jhd193cml0ZWwoY2xrLT5lbmFibGVfbWFzaywgY2xrLT5lbmFibGVfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNsayBjbGtfdHNjID0geworCS5wYXJlbnQJCT0gJm9zY18zMktIeiwKKwkuZW5hYmxlCQk9IHRzY19vbm9mZl9lbmFibGUsCisJLmVuYWJsZV9yZWcJPSBMUEMzMlhYX0NMS1BXUl9BRENfQ0xLX0NUUkwsCisJLmVuYWJsZV9tYXNrCT0gTFBDMzJYWF9DTEtQV1JfQURDMzJDTEtDVFJMX0NMS19FTiwKKwkuZ2V0X3JhdGUJPSBsb2NhbF9yZXR1cm5fcGFyZW50X3JhdGUsCit9OworCitzdGF0aWMgaW50IG1tY19vbm9mZl9lbmFibGUoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQoreworCXUzMiB0bXA7CisKKwl0bXAgPSBfX3Jhd19yZWFkbChMUEMzMlhYX0NMS1BXUl9NU19DVFJMKSAmCisJCX5MUEMzMlhYX0NMS1BXUl9NU0NBUkRfU0RDQVJEX0VOOworCisJLyogSWYgcmF0ZSBpcyAwLCBkaXNhYmxlIGNsb2NrICovCisJaWYgKGVuYWJsZSAhPSAwKQorCQl0bXAgfD0gTFBDMzJYWF9DTEtQV1JfTVNDQVJEX1NEQ0FSRF9FTjsKKworCV9fcmF3X3dyaXRlbCh0bXAsIExQQzMyWFhfQ0xLUFdSX01TX0NUUkwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1tY19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIGRpdiwgcmF0ZSwgb2xkY2xrOworCisJLyogVGhlIE1NQyBjbG9jayBtdXN0IGJlIG9uIHdoZW4gYWNjZXNzaW5nIGFuIE1NQyByZWdpc3RlciAqLworCW9sZGNsayA9IF9fcmF3X3JlYWRsKExQQzMyWFhfQ0xLUFdSX01TX0NUUkwpOworCV9fcmF3X3dyaXRlbChvbGRjbGsgfCBMUEMzMlhYX0NMS1BXUl9NU0NBUkRfU0RDQVJEX0VOLAorCQlMUEMzMlhYX0NMS1BXUl9NU19DVFJMKTsKKwlkaXYgPSBfX3Jhd19yZWFkbChMUEMzMlhYX0NMS1BXUl9NU19DVFJMKTsKKwlfX3Jhd193cml0ZWwob2xkY2xrLCBMUEMzMlhYX0NMS1BXUl9NU19DVFJMKTsKKworCS8qIEdldCB0aGUgcGFyZW50IGNsb2NrIHJhdGUgKi8KKwlyYXRlID0gY2xrLT5wYXJlbnQtPmdldF9yYXRlKGNsay0+cGFyZW50KTsKKworCS8qIEdldCB0aGUgTU1DIGNvbnRyb2xsZXIgY2xvY2sgZGl2aWRlciB2YWx1ZSAqLworCWRpdiA9IGRpdiAmIExQQzMyWFhfQ0xLUFdSX01TQ0FSRF9TRENBUkRfRElWKDB4Zik7CisKKwlpZiAoIWRpdikKKwkJZGl2ID0gMTsKKworCXJldHVybiByYXRlIC8gZGl2OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtbWNfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGRpdiwgcHJhdGU7CisKKwkvKiBHZXQgdGhlIHBhcmVudCBjbG9jayByYXRlICovCisJcHJhdGUgPSBjbGstPnBhcmVudC0+Z2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJaWYgKHJhdGUgPj0gcHJhdGUpCisJCXJldHVybiBwcmF0ZTsKKworCWRpdiA9IHByYXRlIC8gcmF0ZTsKKwlpZiAoZGl2ID4gMHhmKQorCQlkaXYgPSAweGY7CisKKwlyZXR1cm4gcHJhdGUgLyBkaXY7Cit9CisKK3N0YXRpYyBpbnQgbW1jX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXUzMiBvbGRjbGssIHRtcDsKKwl1bnNpZ25lZCBsb25nIHByYXRlLCBkaXYsIGNyYXRlID0gbW1jX3JvdW5kX3JhdGUoY2xrLCByYXRlKTsKKworCXByYXRlID0gY2xrLT5wYXJlbnQtPmdldF9yYXRlKGNsay0+cGFyZW50KTsKKworCWRpdiA9IHByYXRlIC8gY3JhdGU7CisKKwkvKiBUaGUgTU1DIGNsb2NrIG11c3QgYmUgb24gd2hlbiBhY2Nlc3NpbmcgYW4gTU1DIHJlZ2lzdGVyICovCisJb2xkY2xrID0gX19yYXdfcmVhZGwoTFBDMzJYWF9DTEtQV1JfTVNfQ1RSTCk7CisJX19yYXdfd3JpdGVsKG9sZGNsayB8IExQQzMyWFhfQ0xLUFdSX01TQ0FSRF9TRENBUkRfRU4sCisJCUxQQzMyWFhfQ0xLUFdSX01TX0NUUkwpOworCXRtcCA9IF9fcmF3X3JlYWRsKExQQzMyWFhfQ0xLUFdSX01TX0NUUkwpICYKKwkJfkxQQzMyWFhfQ0xLUFdSX01TQ0FSRF9TRENBUkRfRElWKDB4Zik7CisJdG1wIHw9IExQQzMyWFhfQ0xLUFdSX01TQ0FSRF9TRENBUkRfRElWKGRpdik7CisJX19yYXdfd3JpdGVsKHRtcCwgTFBDMzJYWF9DTEtQV1JfTVNfQ1RSTCk7CisKKwlfX3Jhd193cml0ZWwob2xkY2xrLCBMUEMzMlhYX0NMS1BXUl9NU19DVFJMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNsayBjbGtfbW1jID0geworCS5wYXJlbnQJCT0gJmNsa19hcm1wbGwsCisJLnNldF9yYXRlCT0gbW1jX3NldF9yYXRlLAorCS5nZXRfcmF0ZQk9IG1tY19nZXRfcmF0ZSwKKwkucm91bmRfcmF0ZQk9IG1tY19yb3VuZF9yYXRlLAorCS5lbmFibGUJCT0gbW1jX29ub2ZmX2VuYWJsZSwKKwkuZW5hYmxlX3JlZwk9IExQQzMyWFhfQ0xLUFdSX01TX0NUUkwsCisJLmVuYWJsZV9tYXNrCT0gTFBDMzJYWF9DTEtQV1JfTVNDQVJEX1NEQ0FSRF9FTiwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsY2RfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiB0bXAsIGRpdiwgcmF0ZSwgb2xkY2xrOworCisJLyogVGhlIExDRCBjbG9jayBtdXN0IGJlIG9uIHdoZW4gYWNjZXNzaW5nIGFuIExDRCByZWdpc3RlciAqLworCW9sZGNsayA9IF9fcmF3X3JlYWRsKExQQzMyWFhfQ0xLUFdSX0xDRENMS19DVFJMKTsKKwlfX3Jhd193cml0ZWwob2xkY2xrIHwgTFBDMzJYWF9DTEtQV1JfTENEQ1RSTF9DTEtfRU4sCisJCUxQQzMyWFhfQ0xLUFdSX0xDRENMS19DVFJMKTsKKwl0bXAgPSBfX3Jhd19yZWFkbChpb19wMnYoTFBDMzJYWF9MQ0RfQkFTRSArIENMQ0RfVElNMikpOworCV9fcmF3X3dyaXRlbChvbGRjbGssIExQQzMyWFhfQ0xLUFdSX0xDRENMS19DVFJMKTsKKworCXJhdGUgPSBjbGstPnBhcmVudC0+Z2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJLyogT25seSBzdXBwb3J0cyBpbnRlcm5hbCBjbG9ja2luZyAqLworCWlmICh0bXAgJiBUSU0yX0JDRCkKKwkJcmV0dXJuIHJhdGU7CisKKwlkaXYgPSAodG1wICYgMHgxRikgfCAoKHRtcCAmIDB4RjgpID4+IDIyKTsKKwl0bXAgPSByYXRlIC8gKDIgKyBkaXYpOworCisJcmV0dXJuIHRtcDsKK30KKworc3RhdGljIGludCBjbGNkX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXUzMiB0bXAsIHByYXRlLCBkaXYsIG9sZGNsazsKKworCS8qIFRoZSBMQ0QgY2xvY2sgbXVzdCBiZSBvbiB3aGVuIGFjY2Vzc2luZyBhbiBMQ0QgcmVnaXN0ZXIgKi8KKwlvbGRjbGsgPSBfX3Jhd19yZWFkbChMUEMzMlhYX0NMS1BXUl9MQ0RDTEtfQ1RSTCk7CisJX19yYXdfd3JpdGVsKG9sZGNsayB8IExQQzMyWFhfQ0xLUFdSX0xDRENUUkxfQ0xLX0VOLAorCQlMUEMzMlhYX0NMS1BXUl9MQ0RDTEtfQ1RSTCk7CisKKwl0bXAgPSBfX3Jhd19yZWFkbChpb19wMnYoTFBDMzJYWF9MQ0RfQkFTRSArIENMQ0RfVElNMikpIHwgVElNMl9CQ0Q7CisJcHJhdGUgPSBjbGstPnBhcmVudC0+Z2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJaWYgKHJhdGUgPCBwcmF0ZSkgeworCQkvKiBGaW5kIGNsb3Nlc3QgZGl2aWRlciAqLworCQlkaXYgPSBwcmF0ZSAvIHJhdGU7CisJCWlmIChkaXYgPj0gMikgeworCQkJZGl2IC09IDI7CisJCQl0bXAgJj0gflRJTTJfQkNEOworCQl9CisKKwkJdG1wICY9IH4oMHhGODAwMDAxRik7CisJCXRtcCB8PSAoZGl2ICYgMHgxRik7CisJCXRtcCB8PSAoKChkaXYgPj4gNSkgJiAweDFGKSA8PCAyNyk7CisJfQorCisJX19yYXdfd3JpdGVsKHRtcCwgaW9fcDJ2KExQQzMyWFhfTENEX0JBU0UgKyBDTENEX1RJTTIpKTsKKwlfX3Jhd193cml0ZWwob2xkY2xrLCBMUEMzMlhYX0NMS1BXUl9MQ0RDTEtfQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xjZF9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXUzMiBwcmF0ZSwgZGl2OworCisJcHJhdGUgPSBjbGstPnBhcmVudC0+Z2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJaWYgKHJhdGUgPj0gcHJhdGUpCisJCXJhdGUgPSBwcmF0ZTsKKwllbHNlIHsKKwkJZGl2ID0gcHJhdGUgLyByYXRlOworCQlpZiAoZGl2ID4gMHgzZmYpCisJCQlkaXYgPSAweDNmZjsKKworCQlyYXRlID0gcHJhdGUgLyBkaXY7CisJfQorCisJcmV0dXJuIHJhdGU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19sY2QgPSB7CisJLnBhcmVudAkJPSAmY2xrX2hjbGssCisJLnNldF9yYXRlCT0gY2xjZF9zZXRfcmF0ZSwKKwkuZ2V0X3JhdGUJPSBjbGNkX2dldF9yYXRlLAorCS5yb3VuZF9yYXRlCT0gY2xjZF9yb3VuZF9yYXRlLAorCS5lbmFibGUJCT0gbG9jYWxfb25vZmZfZW5hYmxlLAorCS5lbmFibGVfcmVnCT0gTFBDMzJYWF9DTEtQV1JfTENEQ0xLX0NUUkwsCisJLmVuYWJsZV9tYXNrCT0gTFBDMzJYWF9DTEtQV1JfTENEQ1RSTF9DTEtfRU4sCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgY2xrX2xvY2sodm9pZCkKK3sKKwltdXRleF9sb2NrKCZjbGttX2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xrX3VubG9jayh2b2lkKQoreworCW11dGV4X3VubG9jaygmY2xrbV9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgbG9jYWxfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCVdBUk5fT04oY2xrLT51c2Vjb3VudCA9PSAwKTsKKworCS8qIERvbid0IGF0dGVtcHQgdG8gZGlzYWJsZSBjbG9jayBpZiBpdCBoYXMgbm8gdXNlcnMgKi8KKwlpZiAoY2xrLT51c2Vjb3VudCA+IDApIHsKKwkJY2xrLT51c2Vjb3VudC0tOworCisJCS8qIE9ubHkgZGlzYWJsZSBjbG9jayB3aGVuIGl0IGhhcyBubyBtb3JlIHVzZXJzICovCisJCWlmICgoY2xrLT51c2Vjb3VudCA9PSAwKSAmJiAoY2xrLT5lbmFibGUpKQorCQkJY2xrLT5lbmFibGUoY2xrLCAwKTsKKworCQkvKiBDaGVjayBwYXJlbnQgY2xvY2tzLCB0aGV5IG1heSBuZWVkIHRvIGJlIGRpc2FibGVkIHRvbyAqLworCQlpZiAoY2xrLT5wYXJlbnQpCisJCQlsb2NhbF9jbGtfZGlzYWJsZShjbGstPnBhcmVudCk7CisJfQorfQorCitzdGF0aWMgaW50IGxvY2FsX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCWludCByZXQgPSAwOworCisJLyogRW5hYmxlIHBhcmVudCBjbG9ja3MgZmlyc3QgYW5kIHVwZGF0ZSB1c2UgY291bnRzICovCisJaWYgKGNsay0+cGFyZW50KQorCQlyZXQgPSBsb2NhbF9jbGtfZW5hYmxlKGNsay0+cGFyZW50KTsKKworCWlmICghcmV0KSB7CisJCS8qIE9ubHkgZW5hYmxlIGNsb2NrIGlmIGl0J3MgY3VycmVudGx5IGRpc2FibGVkICovCisJCWlmICgoY2xrLT51c2Vjb3VudCA9PSAwKSAmJiAoY2xrLT5lbmFibGUpKQorCQkJcmV0ID0gY2xrLT5lbmFibGUoY2xrLCAxKTsKKworCQlpZiAoIXJldCkKKwkJCWNsay0+dXNlY291bnQrKzsKKwkJZWxzZSBpZiAoY2xrLT5wYXJlbnQpCisJCQlsb2NhbF9jbGtfZGlzYWJsZShjbGstPnBhcmVudCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGNsa19lbmFibGUgLSBpbmZvcm0gdGhlIHN5c3RlbSB3aGVuIHRoZSBjbG9jayBzb3VyY2Ugc2hvdWxkIGJlIHJ1bm5pbmcuCisgKi8KK2ludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgcmV0OworCisJY2xrX2xvY2soKTsKKwlyZXQgPSBsb2NhbF9jbGtfZW5hYmxlKGNsayk7CisJY2xrX3VubG9jaygpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2VuYWJsZSk7CisKKy8qCisgKiBjbGtfZGlzYWJsZSAtIGluZm9ybSB0aGUgc3lzdGVtIHdoZW4gdGhlIGNsb2NrIHNvdXJjZSBpcyBubyBsb25nZXIgcmVxdWlyZWQKKyAqLwordm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJY2xrX2xvY2soKTsKKwlsb2NhbF9jbGtfZGlzYWJsZShjbGspOworCWNsa191bmxvY2soKTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2Rpc2FibGUpOworCisvKgorICogY2xrX2dldF9yYXRlIC0gb2J0YWluIHRoZSBjdXJyZW50IGNsb2NrIHJhdGUgKGluIEh6KSBmb3IgYSBjbG9jayBzb3VyY2UKKyAqLwordW5zaWduZWQgbG9uZyBjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKworCWNsa19sb2NrKCk7CisJcmF0ZSA9IGNsay0+Z2V0X3JhdGUoY2xrKTsKKwljbGtfdW5sb2NrKCk7CisKKwlyZXR1cm4gcmF0ZTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldF9yYXRlKTsKKworLyoKKyAqIGNsa19zZXRfcmF0ZSAtIHNldCB0aGUgY2xvY2sgcmF0ZSBmb3IgYSBjbG9jayBzb3VyY2UKKyAqLworaW50IGNsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCS8qCisJICogTW9zdCBzeXN0ZW0gY2xvY2tzIGNhbiBvbmx5IGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQsIHdpdGgKKwkgKiB0aGUgYWN0dWFsIHJhdGUgc2V0IGFzIHBhcnQgb2YgdGhlIHBlcmlwaGVyYWwgZGl2aWRlcnMKKwkgKiBpbnN0ZWFkIG9mIGhpZ2ggbGV2ZWwgY2xvY2sgY29udHJvbAorCSAqLworCWlmIChjbGstPnNldF9yYXRlKSB7CisJCWNsa19sb2NrKCk7CisJCXJldCA9IGNsay0+c2V0X3JhdGUoY2xrLCByYXRlKTsKKwkJY2xrX3VubG9jaygpOworCX0KKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19zZXRfcmF0ZSk7CisKKy8qCisgKiBjbGtfcm91bmRfcmF0ZSAtIGFkanVzdCBhIHJhdGUgdG8gdGhlIGV4YWN0IHJhdGUgYSBjbG9jayBjYW4gcHJvdmlkZQorICovCitsb25nIGNsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWNsa19sb2NrKCk7CisKKwlpZiAoY2xrLT5yb3VuZF9yYXRlKQorCQlyYXRlID0gY2xrLT5yb3VuZF9yYXRlKGNsaywgcmF0ZSk7CisJZWxzZQorCQlyYXRlID0gY2xrLT5nZXRfcmF0ZShjbGspOworCisJY2xrX3VubG9jaygpOworCisJcmV0dXJuIHJhdGU7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19yb3VuZF9yYXRlKTsKKworLyoKKyAqIGNsa19zZXRfcGFyZW50IC0gc2V0IHRoZSBwYXJlbnQgY2xvY2sgc291cmNlIGZvciB0aGlzIGNsb2NrCisgKi8KK2ludCBjbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwkvKiBDbG9jayByZS1wYXJlbnRpbmcgaXMgbm90IHN1cHBvcnRlZCAqLworCXJldHVybiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTChjbGtfc2V0X3BhcmVudCk7CisKKy8qCisgKiBjbGtfZ2V0X3BhcmVudCAtIGdldCB0aGUgcGFyZW50IGNsb2NrIHNvdXJjZSBmb3IgdGhpcyBjbG9jaworICovCitzdHJ1Y3QgY2xrICpjbGtfZ2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNsay0+cGFyZW50OworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3BhcmVudCk7CisKKyNkZWZpbmUgX1JFR0lTVEVSX0NMT0NLKGQsIG4sIGMpIFwKKwl7IFwKKwkJLmRldl9pZCA9IChkKSwgXAorCQkuY29uX2lkID0gKG4pLCBcCisJCS5jbGsgPSAmKGMpLCBcCisJfSwKKworc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIm9zY18zMktIeiIsIG9zY18zMktIeikKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIm9zY19wbGwzOTciLCBvc2NfcGxsMzk3KQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAib3NjX21haW4iLCBvc2NfbWFpbikKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInN5c19jayIsIGNsa19zeXMpCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJhcm1fcGxsX2NrIiwgY2xrX2FybXBsbCkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNrX3BsbDUiLCBjbGtfdXNicGxsKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiaGNsa19jayIsIGNsa19oY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicGNsa19jayIsIGNsa19wY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAidGltZXIwX2NrIiwgY2xrX3RpbWVyMCkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInRpbWVyMV9jayIsIGNsa190aW1lcjEpCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJ0aW1lcjJfY2siLCBjbGtfdGltZXIyKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAidGltZXIzX2NrIiwgY2xrX3RpbWVyMykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInZmcDlfY2siLCBjbGtfdmZwOSkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNsa19kbWFjIiwgY2xrX2RtYSkKKwlfUkVHSVNURVJfQ0xPQ0soInBueDQwMDgtd2F0Y2hkb2ciLCBOVUxMLCBjbGtfd2R0KQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAidWFydDNfY2siLCBjbGtfdWFydDMpCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJ1YXJ0NF9jayIsIGNsa191YXJ0NCkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInVhcnQ1X2NrIiwgY2xrX3VhcnQ1KQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAidWFydDZfY2siLCBjbGtfdWFydDYpCisJX1JFR0lTVEVSX0NMT0NLKCJwbngtaTJjLjAiLCBOVUxMLCBjbGtfaTJjMCkKKwlfUkVHSVNURVJfQ0xPQ0soInBueC1pMmMuMSIsIE5VTEwsIGNsa19pMmMxKQorCV9SRUdJU1RFUl9DTE9DSygicG54LWkyYy4yIiwgTlVMTCwgY2xrX2kyYzIpCisJX1JFR0lTVEVSX0NMT0NLKCJkZXY6c3NwMCIsIE5VTEwsIGNsa19zc3AwKQorCV9SRUdJU1RFUl9DTE9DSygiZGV2OnNzcDEiLCBOVUxMLCBjbGtfc3NwMSkKKwlfUkVHSVNURVJfQ0xPQ0soImxwYzMyeHhfa2V5cy4wIiwgTlVMTCwgY2xrX2tzY2FuKQorCV9SRUdJU1RFUl9DTE9DSygibHBjMzJ4eC1uYW5kLjAiLCAibmFuZF9jayIsIGNsa19uYW5kKQorCV9SRUdJU1RFUl9DTE9DSygidGJkIiwgImkyczBfY2siLCBjbGtfaTJzMCkKKwlfUkVHSVNURVJfQ0xPQ0soInRiZCIsICJpMnMxX2NrIiwgY2xrX2kyczEpCisJX1JFR0lTVEVSX0NMT0NLKCJscGMzMnh4LXRzIiwgTlVMTCwgY2xrX3RzYykKKwlfUkVHSVNURVJfQ0xPQ0soImRldjptbWMwIiwgIk1DTEsiLCBjbGtfbW1jKQorCV9SRUdJU1RFUl9DTE9DSygibHBjLW5ldC4wIiwgTlVMTCwgY2xrX25ldCkKKwlfUkVHSVNURVJfQ0xPQ0soImRldjpjbGNkIiwgTlVMTCwgY2xrX2xjZCkKKwlfUkVHSVNURVJfQ0xPQ0soImxwYzMyeHhfdWRjIiwgImNrX3VzYmQiLCBjbGtfdXNiZCkKKwlfUkVHSVNURVJfQ0xPQ0soImxwYzMyeHhfcnRjIiwgTlVMTCwgY2xrX3J0YykKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGNsa19pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsb29rdXBzKTsgaSsrKQorCQljbGtkZXZfYWRkKCZsb29rdXBzW2ldKTsKKworCS8qCisJICogU2V0dXAgbXV4ZWQgU1lTQ0xLIGZvciBIQ0xLIFBMTCBiYXNlIC10aGlzIHNlbGVjdHMgdGhlCisJICogcGFyZW50IGNsb2NrIHVzZWQgZm9yIHRoZSBBUk0gUExMIGFuZCBpcyB1c2VkIHRvIGRlcml2ZQorCSAqIHRoZSBtYW55IHN5c3RlbSBjbG9jayByYXRlcyBpbiB0aGUgZGV2aWNlLgorCSAqLworCWlmIChjbGtfaXNfc3lzY2xrX21haW5vc2MoKSAhPSAwKQorCQljbGtfc3lzLnBhcmVudCA9ICZvc2NfbWFpbjsKKwllbHNlCisJCWNsa19zeXMucGFyZW50ID0gJm9zY19wbGwzOTc7CisKKwljbGtfc3lzLnJhdGUgPSBjbGtfc3lzLnBhcmVudC0+cmF0ZTsKKworCS8qIENvbXB1dGUgdGhlIGN1cnJlbnQgQVJNIFBMTCBhbmQgVVNCIFBMTCBmcmVxdWVuY2llcyAqLworCWxvY2FsX3VwZGF0ZV9hcm1wbGxfcmF0ZSgpOworCisJLyogQ29tcHV0ZSBIQ0xLIGFuZCBQQ0xLIGJ1cyByYXRlcyAqLworCWNsa19oY2xrLnJhdGUgPSBjbGtfaGNsay5wYXJlbnQtPnJhdGUgLyBjbGtfZ2V0X2hjbGtfZGl2KCk7CisJY2xrX3BjbGsucmF0ZSA9IGNsa19wY2xrLnBhcmVudC0+cmF0ZSAvIGNsa19nZXRfcGNsa19kaXYoKTsKKworCS8qCisJICogRW5hYmxlIHN5c3RlbSBjbG9ja3MgLSB0aGlzIHN0ZXAgaXMgc29tZXdoYXQgZm9ybWFsLCBhcyB0aGUKKwkgKiBjbG9ja3MgYXJlIGFscmVhZHkgcnVubmluZywgYnV0IGl0IGRvZXMgZ2V0IHRoZSBjbG9jayBkYXRhCisJICogaW5saW5lIHdpdGggdGhlIGFjdHVhbCBzeXN0ZW0gc3RhdGUuIE5ldmVyIGRpc2FibGUgdGhlc2UKKwkgKiBjbG9ja3MgYXMgdGhleSB3aWxsIG9ubHkgc3RvcCBpZiB0aGUgc3lzdGVtIGlzIGdvaW5nIHRvIHNsZWVwLgorCSAqIEluIHRoYXQgY2FzZSwgdGhlIGNoaXAvc3lzdGVtIHBvd2VyIG1hbmFnZW1lbnQgZnVuY3Rpb25zIHdpbGwKKwkgKiBoYW5kbGUgY2xvY2sgZ2F0aW5nLgorCSAqLworCWlmIChjbGtfZW5hYmxlKCZjbGtfaGNsaykgfHwgY2xrX2VuYWJsZSgmY2xrX3BjbGspKQorCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGVuYWJsaW5nIHN5c3RlbSBIQ0xLIGFuZCBQQ0xLXG4iKTsKKworCS8qCisJICogVGltZXJzIDAgYW5kIDEgd2VyZSBlbmFibGVkIGFuZCBhcmUgYmVpbmcgdXNlZCBieSB0aGUgaGlnaAorCSAqIHJlc29sdXRpb24gdGljayBmdW5jdGlvbiBwcmlvciB0byB0aGlzIGRyaXZlciBiZWluZyBpbml0aWFsaXplZC4KKwkgKiBUYWcgdGhlbSBub3cgYXMgdXNlZC4KKwkgKi8KKwlpZiAoY2xrX2VuYWJsZSgmY2xrX3RpbWVyMCkgfHwgY2xrX2VuYWJsZSgmY2xrX3RpbWVyMSkpCisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgZW5hYmxpbmcgdGltZXIgdGljayBjbG9ja3NcbiIpOworCisJcmV0dXJuIDA7Cit9Citjb3JlX2luaXRjYWxsKGNsa19pbml0KTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1scGMzMnh4L2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLWxwYzMyeHgvY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGE4NDM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1scGMzMnh4L2Nsb2NrLmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbHBjMzJ4eC9jbG9jay5oCisgKgorICogQXV0aG9yOiBLZXZpbiBXZWxscyA8a2V2aW4ud2VsbHNAbnhwLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTlhQIFNlbWljb25kdWN0b3JzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19MUEMzMlhYX0NMT0NLX0gKKyNkZWZpbmUgX19MUEMzMlhYX0NMT0NLX0gKKworc3RydWN0IGNsayB7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXN0cnVjdCBjbGsgKnBhcmVudDsKKwl1MzIgcmF0ZTsKKwl1MzIgdXNlY291bnQ7CisKKwlpbnQgKCpzZXRfcmF0ZSkgKHN0cnVjdCBjbGsgKiwgdW5zaWduZWQgbG9uZyk7CisJdW5zaWduZWQgbG9uZyAoKnJvdW5kX3JhdGUpIChzdHJ1Y3QgY2xrICosIHVuc2lnbmVkIGxvbmcpOworCXVuc2lnbmVkIGxvbmcgKCpnZXRfcmF0ZSkgKHN0cnVjdCBjbGsgKmNsayk7CisJaW50ICgqZW5hYmxlKSAoc3RydWN0IGNsayAqLCBpbnQpOworCisJLyogUmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0IG1hc2sgZm9yIHNpbXBsZSBjbG9ja3MgKi8KKwl2b2lkIF9faW9tZW0gKmVuYWJsZV9yZWc7CisJdTMyIGVuYWJsZV9tYXNrOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxwYzMyeHgvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLWxwYzMyeHgvY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUyNGRjMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9jb21tb24uYwpAQCAtMCwwICsxLDI3MSBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbHBjMzJ4eC9jb21tb24uYworICoKKyAqIEF1dGhvcjogS2V2aW4gV2VsbHMgPGtldmluLndlbGxzQG54cC5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5YUCBTZW1pY29uZHVjdG9ycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1wbnguaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxtYWNoL2kyYy5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3BsYXRmb3JtLmg+CisjaW5jbHVkZSAiY29tbW9uLmgiCisKKy8qCisgKiBXYXRjaGRvZyB0aW1lcgorICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHdhdGNoZG9nX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gTFBDMzJYWF9XRFRJTV9CQVNFLAorCQkuZW5kID0gTFBDMzJYWF9XRFRJTV9CQVNFICsgU1pfNEsgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBscGMzMnh4X3dhdGNoZG9nX2RldmljZSA9IHsKKwkubmFtZSA9ICJwbng0MDA4LXdhdGNoZG9nIiwKKwkuaWQgPSAtMSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUod2F0Y2hkb2dfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSB3YXRjaGRvZ19yZXNvdXJjZXMsCit9OworCisvKgorICogSTJDIGJ1c3NlcworICovCitzdGF0aWMgc3RydWN0IGkyY19wbnhfZGF0YSBpMmMwX2RhdGEgPSB7CisJLm5hbWUgPSBJMkNfQ0hJUF9OQU1FICIxIiwKKwkuYmFzZSA9IExQQzMyWFhfSTJDMV9CQVNFLAorCS5pcnEgPSBJUlFfTFBDMzJYWF9JMkNfMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX3BueF9kYXRhIGkyYzFfZGF0YSA9IHsKKwkubmFtZSA9IEkyQ19DSElQX05BTUUgIjIiLAorCS5iYXNlID0gTFBDMzJYWF9JMkMyX0JBU0UsCisJLmlycSA9IElSUV9MUEMzMlhYX0kyQ18yLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfcG54X2RhdGEgaTJjMl9kYXRhID0geworCS5uYW1lID0gIlVTQi1JMkMiLAorCS5iYXNlID0gTFBDMzJYWF9PVEdfSTJDX0JBU0UsCisJLmlycSA9IElSUV9MUEMzMlhYX1VTQl9JMkMsCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGxwYzMyeHhfaTJjMF9kZXZpY2UgPSB7CisJLm5hbWUgPSAicG54LWkyYyIsCisJLmlkID0gMCwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZpMmMwX2RhdGEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbHBjMzJ4eF9pMmMxX2RldmljZSA9IHsKKwkubmFtZSA9ICJwbngtaTJjIiwKKwkuaWQgPSAxLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmkyYzFfZGF0YSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBscGMzMnh4X2kyYzJfZGV2aWNlID0geworCS5uYW1lID0gInBueC1pMmMiLAorCS5pZCA9IDIsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaTJjMl9kYXRhLAorCX0sCit9OworCisvKgorICogUmV0dXJucyB0aGUgdW5pcXVlIElEIGZvciB0aGUgZGV2aWNlCisgKi8KK3ZvaWQgbHBjMzJ4eF9nZXRfdWlkKHUzMiBkZXZpZFs0XSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCWRldmlkW2ldID0gX19yYXdfcmVhZGwoTFBDMzJYWF9DTEtQV1JfREVWSUQoaSA8PCAyKSk7Cit9CisKKy8qCisgKiBSZXR1cm5zIFNZU0NMSyBzb3VyY2UKKyAqIDAgPSBQTEwzOTcsIDEgPSBtYWluIG9zY2lsbGF0b3IKKyAqLworaW50IGNsa19pc19zeXNjbGtfbWFpbm9zYyh2b2lkKQoreworCWlmICgoX19yYXdfcmVhZGwoTFBDMzJYWF9DTEtQV1JfU1lTQ0xLX0NUUkwpICYKKwkJTFBDMzJYWF9DTEtQV1JfU1lTQ1RSTF9TWVNDTEtNVVgpID09IDApCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTeXN0ZW0gcmVzZXQgdmlhIHRoZSB3YXRjaGRvZyB0aW1lcgorICovCit2b2lkIGxwYzMyeHhfd2F0Y2hkb2dfcmVzZXQodm9pZCkKK3sKKwkvKiBNYWtlIHN1cmUgV0RUIGNsb2NrcyBhcmUgZW5hYmxlZCAqLworCV9fcmF3X3dyaXRlbChMUEMzMlhYX0NMS1BXUl9QV01DTEtfV0RPR19FTiwKKwkJTFBDMzJYWF9DTEtQV1JfVElNRVJfQ0xLX0NUUkwpOworCisJLyogSW5zdGFudCBhc3NlcnQgb2YgUkVTRVRPVVRfTiB3aXRoIHB1bHNlIGxlbmd0aCAxbVMgKi8KKwlfX3Jhd193cml0ZWwoMTMwMDAsIGlvX3AydihMUEMzMlhYX1dEVElNX0JBU0UgKyAweDE4KSk7CisJX19yYXdfd3JpdGVsKDB4NzAsIGlvX3AydihMUEMzMlhYX1dEVElNX0JBU0UgKyAweEMpKTsKK30KKworLyoKKyAqIERldGVjdHMgYW5kIHJldHVybnMgSVJBTSBzaXplIGZvciB0aGUgZGV2aWNlIHZhcmlhdGlvbgorICovCisjZGVmaW5lIExQQzMyWFhfSVJBTV9CQU5LX1NJWkUgU1pfMTI4Sworc3RhdGljIHUzMiBpcmFtX3NpemU7Cit1MzIgbHBjMzJ4eF9yZXR1cm5faXJhbV9zaXplKHZvaWQpCit7CisJaWYgKGlyYW1fc2l6ZSA9PSAwKSB7CisJCXUzMiBzYXZlZHZhbDEsIHNhdmVkdmFsMjsKKwkJdm9pZCBfX2lvbWVtICppcmFtcHRyMSwgKmlyYW1wdHIyOworCisJCWlyYW1wdHIxID0gaW9fcDJ2KExQQzMyWFhfSVJBTV9CQVNFKTsKKwkJaXJhbXB0cjIgPSBpb19wMnYoTFBDMzJYWF9JUkFNX0JBU0UgKyBMUEMzMlhYX0lSQU1fQkFOS19TSVpFKTsKKwkJc2F2ZWR2YWwxID0gX19yYXdfcmVhZGwoaXJhbXB0cjEpOworCQlzYXZlZHZhbDIgPSBfX3Jhd19yZWFkbChpcmFtcHRyMik7CisKKwkJaWYgKHNhdmVkdmFsMSA9PSBzYXZlZHZhbDIpIHsKKwkJCV9fcmF3X3dyaXRlbChzYXZlZHZhbDIgKyAxLCBpcmFtcHRyMik7CisJCQlpZiAoX19yYXdfcmVhZGwoaXJhbXB0cjEpID09IHNhdmVkdmFsMiArIDEpCisJCQkJaXJhbV9zaXplID0gTFBDMzJYWF9JUkFNX0JBTktfU0laRTsKKwkJCWVsc2UKKwkJCQlpcmFtX3NpemUgPSBMUEMzMlhYX0lSQU1fQkFOS19TSVpFICogMjsKKwkJCV9fcmF3X3dyaXRlbChzYXZlZHZhbDIsIGlyYW1wdHIyKTsKKwkJfSBlbHNlCisJCQlpcmFtX3NpemUgPSBMUEMzMlhYX0lSQU1fQkFOS19TSVpFICogMjsKKwl9CisKKwlyZXR1cm4gaXJhbV9zaXplOworfQorCisvKgorICogQ29tcHV0ZXMgUExMIHJhdGUgZnJvbSBQTEwgcmVnaXN0ZXIgYW5kIGlucHV0IGNsb2NrCisgKi8KK3UzMiBjbGtfY2hlY2tfcGxsX3NldHVwKHUzMiBpZnJlcSwgc3RydWN0IGNsa19wbGxfc2V0dXAgKnBsbHNldHVwKQoreworCXUzMiBpbGZyZXEsIHAsIG0sIG4sIGZjY28sIGZyZWYsIGNmcmVxOworCWludCBtb2RlOworCisJLyoKKwkgKiBQTEwgcmVxdWlyZW1lbnRzCisJICogaWZyZXEgbXVzdCBiZSA+PSAxTUh6IGFuZCA8PSAyME1IegorCSAqIEZDQ08gbXVzdCBiZSA+PSAxNTZNSHogYW5kIDw9IDMyME1IegorCSAqIEZSRUYgbXVzdCBiZSA+PSAxTUh6IGFuZCA8PSAyN01IegorCSAqIEFzc3VtZSB0aGUgcGFzc2VkIGlucHV0IGRhdGEgaXMgbm90IHZhbGlkCisJICovCisKKwlpbGZyZXEgPSBpZnJlcTsKKwltID0gcGxsc2V0dXAtPnBsbF9tOworCW4gPSBwbGxzZXR1cC0+cGxsX247CisJcCA9IHBsbHNldHVwLT5wbGxfcDsKKworCW1vZGUgPSAocGxsc2V0dXAtPmNjb19ieXBhc3NfYjE1IDw8IDIpIHwKKwkJKHBsbHNldHVwLT5kaXJlY3Rfb3V0cHV0X2IxNCA8PCAxKSB8CisJcGxsc2V0dXAtPmZkYmtfZGl2X2N0cmxfYjEzOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSAweDA6IC8qIE5vbi1pbnRlZ2VyIG1vZGUgKi8KKwkJY2ZyZXEgPSAobSAqIGlsZnJlcSkgLyAoMiAqIHAgKiBuKTsKKwkJZmNjbyA9IChtICogaWxmcmVxKSAvIG47CisJCWZyZWYgPSBpbGZyZXEgLyBuOworCQlicmVhazsKKworCWNhc2UgMHgxOiAvKiBpbnRlZ2VyIG1vZGUgKi8KKwkJY2ZyZXEgPSAobSAqIGlsZnJlcSkgLyBuOworCQlmY2NvID0gKG0gKiBpbGZyZXEpIC8gKG4gKiAyICogcCk7CisJCWZyZWYgPSBpbGZyZXEgLyBuOworCQlicmVhazsKKworCWNhc2UgMHgyOgorCWNhc2UgMHgzOiAvKiBEaXJlY3QgbW9kZSAqLworCQljZnJlcSA9IChtICogaWxmcmVxKSAvIG47CisJCWZjY28gPSBjZnJlcTsKKwkJZnJlZiA9IGlsZnJlcSAvIG47CisJCWJyZWFrOworCisJY2FzZSAweDQ6CisJY2FzZSAweDU6IC8qIEJ5cGFzcyBtb2RlICovCisJCWNmcmVxID0gaWxmcmVxIC8gKDIgKiBwKTsKKwkJZmNjbyA9IDE1NjAwMDAwMDsKKwkJZnJlZiA9IDEwMDAwMDA7CisJCWJyZWFrOworCisJY2FzZSAweDY6CisJY2FzZSAweDc6IC8qIERpcmVjdCBieXBhc3MgbW9kZSAqLworCWRlZmF1bHQ6CisJCWNmcmVxID0gaWxmcmVxOworCQlmY2NvID0gMTU2MDAwMDAwOworCQlmcmVmID0gMTAwMDAwMDsKKwkJYnJlYWs7CisJfQorCisJaWYgKGZjY28gPCAxNTYwMDAwMDAgfHwgZmNjbyA+IDMyMDAwMDAwMCkKKwkJY2ZyZXEgPSAwOworCisJaWYgKGZyZWYgPCAxMDAwMDAwIHx8IGZyZWYgPiAyNzAwMDAwMCkKKwkJY2ZyZXEgPSAwOworCisJcmV0dXJuICh1MzIpIGNmcmVxOworfQorCit1MzIgY2xrX2dldF9wY2xrX2Rpdih2b2lkKQoreworCXJldHVybiAxICsgKChfX3Jhd19yZWFkbChMUEMzMlhYX0NMS1BXUl9IQ0xLX0RJVikgPj4gMikgJiAweDFGKTsKK30KKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBscGMzMnh4X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKExQQzMyWFhfQUhCMF9TVEFSVCksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihMUEMzMlhYX0FIQjBfU1RBUlQpLAorCQkubGVuZ3RoCQk9IExQQzMyWFhfQUhCMF9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKExQQzMyWFhfQUhCMV9TVEFSVCksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihMUEMzMlhYX0FIQjFfU1RBUlQpLAorCQkubGVuZ3RoCQk9IExQQzMyWFhfQUhCMV9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKExQQzMyWFhfRkFCQVBCX1NUQVJUKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKExQQzMyWFhfRkFCQVBCX1NUQVJUKSwKKwkJLmxlbmd0aAkJPSBMUEMzMlhYX0ZBQkFQQl9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKExQQzMyWFhfSVJBTV9CQVNFKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKExQQzMyWFhfSVJBTV9CQVNFKSwKKwkJLmxlbmd0aAkJPSAoTFBDMzJYWF9JUkFNX0JBTktfU0laRSAqIDIpLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorfTsKKwordm9pZCBfX2luaXQgbHBjMzJ4eF9tYXBfaW8odm9pZCkKK3sKKwlpb3RhYmxlX2luaXQobHBjMzJ4eF9pb19kZXNjLCBBUlJBWV9TSVpFKGxwYzMyeHhfaW9fZGVzYykpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1scGMzMnh4L2NvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1scGMzMnh4L2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MjIxMWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWxwYzMyeHgvY29tbW9uLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbHBjMzJ4eC9jb21tb24uaAorICoKKyAqIEF1dGhvcjogS2V2aW4gV2VsbHMgPGtldmluLndlbGxzQG54cC5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTlhQIFNlbWljb25kdWN0b3JzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19MUEMzMlhYX0NPTU1PTl9ICisjZGVmaW5lIF9fTFBDMzJYWF9DT01NT05fSAorCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKy8qCisgKiBBcmNoIHNwZWNpZmljIHBsYXRmb3JtIGRldmljZSBzdHJ1Y3R1cmVzCisgKi8KK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGxwYzMyeHhfd2F0Y2hkb2dfZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbHBjMzJ4eF9pMmMwX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGxwYzMyeHhfaTJjMV9kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBscGMzMnh4X2kyYzJfZGV2aWNlOworCisvKgorICogT3RoZXIgYXJjaCBzcGVjaWZpYyBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMKKyAqLworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgbHBjMzJ4eF90aW1lcjsKK2V4dGVybiB2b2lkIF9faW5pdCBscGMzMnh4X2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IGxwYzMyeHhfbWFwX2lvKHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IGxwYzMyeHhfc2VyaWFsX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgbHBjMzJ4eF9ncGlvX2luaXQodm9pZCk7CisKKy8qCisgKiBTdHJ1Y3R1cmUgdXNlZCBmb3Igc2V0dGluZyB1cCBhbmQgcXVlcnlpbmcgdGhlIFBMTFMKKyAqLworc3RydWN0IGNsa19wbGxfc2V0dXAgeworCWludCBhbmFsb2dfb247CisJaW50IGNjb19ieXBhc3NfYjE1OworCWludCBkaXJlY3Rfb3V0cHV0X2IxNDsKKwlpbnQgZmRia19kaXZfY3RybF9iMTM7CisJaW50IHBsbF9wOworCWludCBwbGxfbjsKKwl1MzIgcGxsX207Cit9OworCitleHRlcm4gaW50IGNsa19pc19zeXNjbGtfbWFpbm9zYyh2b2lkKTsKK2V4dGVybiB1MzIgY2xrX2NoZWNrX3BsbF9zZXR1cCh1MzIgaWZyZXEsIHN0cnVjdCBjbGtfcGxsX3NldHVwICpwbGxzZXR1cCk7CitleHRlcm4gdTMyIGNsa19nZXRfcGxscmF0ZV9mcm9tX3JlZyh1MzIgaW5wdXRjbGssIHUzMiByZWd2YWwpOworZXh0ZXJuIHUzMiBjbGtfZ2V0X3BjbGtfZGl2KHZvaWQpOworCisvKgorICogUmV0dXJucyB0aGUgTFBDMzJ4eCB1bmlxdWUgMTI4LWJpdCBjaGlwIElECisgKi8KK2V4dGVybiB2b2lkIGxwYzMyeHhfZ2V0X3VpZCh1MzIgZGV2aWRbNF0pOworCitleHRlcm4gdm9pZCBscGMzMnh4X3dhdGNoZG9nX3Jlc2V0KHZvaWQpOworZXh0ZXJuIHUzMiBscGMzMnh4X3JldHVybl9pcmFtX3NpemUodm9pZCk7CisKKy8qCisgKiBQb2ludGVycyB1c2VkIGZvciBzaXppbmcgYW5kIGNvcHlpbmcgc3VzcGVuZCBmdW5jdGlvbiBkYXRhCisgKi8KK2V4dGVybiBpbnQgbHBjMzJ4eF9zeXNfc3VzcGVuZCh2b2lkKTsKK2V4dGVybiBpbnQgbHBjMzJ4eF9zeXNfc3VzcGVuZF9zejsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxwYzMyeHgvZ3Bpb2xpYi5jIGIvYXJjaC9hcm0vbWFjaC1scGMzMnh4L2dwaW9saWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTA2MWVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1scGMzMnh4L2dwaW9saWIuYwpAQCAtMCwwICsxLDQ0NiBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbHBjMzJ4eC9ncGlvbGliLmMKKyAqCisgKiBBdXRob3I6IEtldmluIFdlbGxzIDxrZXZpbi53ZWxsc0BueHAuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOWFAgU2VtaWNvbmR1Y3RvcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcGxhdGZvcm0uaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKworI2RlZmluZSBMUEMzMlhYX0dQSU9fUDNfSU5QX1NUQVRFCQlfR1BSRUcoMHgwMDApCisjZGVmaW5lIExQQzMyWFhfR1BJT19QM19PVVRQX1NFVAkJX0dQUkVHKDB4MDA0KQorI2RlZmluZSBMUEMzMlhYX0dQSU9fUDNfT1VUUF9DTFIJCV9HUFJFRygweDAwOCkKKyNkZWZpbmUgTFBDMzJYWF9HUElPX1AzX09VVFBfU1RBVEUJCV9HUFJFRygweDAwQykKKyNkZWZpbmUgTFBDMzJYWF9HUElPX1AyX0RJUl9TRVQJCQlfR1BSRUcoMHgwMTApCisjZGVmaW5lIExQQzMyWFhfR1BJT19QMl9ESVJfQ0xSCQkJX0dQUkVHKDB4MDE0KQorI2RlZmluZSBMUEMzMlhYX0dQSU9fUDJfRElSX1NUQVRFCQlfR1BSRUcoMHgwMTgpCisjZGVmaW5lIExQQzMyWFhfR1BJT19QMl9JTlBfU1RBVEUJCV9HUFJFRygweDAxQykKKyNkZWZpbmUgTFBDMzJYWF9HUElPX1AyX09VVFBfU0VUCQlfR1BSRUcoMHgwMjApCisjZGVmaW5lIExQQzMyWFhfR1BJT19QMl9PVVRQX0NMUgkJX0dQUkVHKDB4MDI0KQorI2RlZmluZSBMUEMzMlhYX0dQSU9fUDJfTVVYX1NFVAkJCV9HUFJFRygweDAyOCkKKyNkZWZpbmUgTFBDMzJYWF9HUElPX1AyX01VWF9DTFIJCQlfR1BSRUcoMHgwMkMpCisjZGVmaW5lIExQQzMyWFhfR1BJT19QMl9NVVhfU1RBVEUJCV9HUFJFRygweDAzMCkKKyNkZWZpbmUgTFBDMzJYWF9HUElPX1AwX0lOUF9TVEFURQkJX0dQUkVHKDB4MDQwKQorI2RlZmluZSBMUEMzMlhYX0dQSU9fUDBfT1VUUF9TRVQJCV9HUFJFRygweDA0NCkKKyNkZWZpbmUgTFBDMzJYWF9HUElPX1AwX09VVFBfQ0xSCQlfR1BSRUcoMHgwNDgpCisjZGVmaW5lIExQQzMyWFhfR1BJT19QMF9PVVRQX1NUQVRFCQlfR1BSRUcoMHgwNEMpCisjZGVmaW5lIExQQzMyWFhfR1BJT19QMF9ESVJfU0VUCQkJX0dQUkVHKDB4MDUwKQorI2RlZmluZSBMUEMzMlhYX0dQSU9fUDBfRElSX0NMUgkJCV9HUFJFRygweDA1NCkKKyNkZWZpbmUgTFBDMzJYWF9HUElPX1AwX0RJUl9TVEFURQkJX0dQUkVHKDB4MDU4KQorI2RlZmluZSBMUEMzMlhYX0dQSU9fUDFfSU5QX1NUQVRFCQlfR1BSRUcoMHgwNjApCisjZGVmaW5lIExQQzMyWFhfR1BJT19QMV9PVVRQX1NFVAkJX0dQUkVHKDB4MDY0KQorI2RlZmluZSBMUEMzMlhYX0dQSU9fUDFfT1VUUF9DTFIJCV9HUFJFRygweDA2OCkKKyNkZWZpbmUgTFBDMzJYWF9HUElPX1AxX09VVFBfU1RBVEUJCV9HUFJFRygweDA2QykKKyNkZWZpbmUgTFBDMzJYWF9HUElPX1AxX0RJUl9TRVQJCQlfR1BSRUcoMHgwNzApCisjZGVmaW5lIExQQzMyWFhfR1BJT19QMV9ESVJfQ0xSCQkJX0dQUkVHKDB4MDc0KQorI2RlZmluZSBMUEMzMlhYX0dQSU9fUDFfRElSX1NUQVRFCQlfR1BSRUcoMHgwNzgpCisKKyNkZWZpbmUgR1BJTzAxMl9QSU5fVE9fQklUKHgpCQkJKDEgPDwgKHgpKQorI2RlZmluZSBHUElPM19QSU5fVE9fQklUKHgpCQkJKDEgPDwgKCh4KSArIDI1KSkKKyNkZWZpbmUgR1BPM19QSU5fVE9fQklUKHgpCQkJKDEgPDwgKHgpKQorI2RlZmluZSBHUElPMDEyX1BJTl9JTl9TRUwoeCwgeSkJCSgoKHgpID4+ICh5KSkgJiAxKQorI2RlZmluZSBHUElPM19QSU5fSU5fU0hJRlQoeCkJCQkoKHgpID09IDUgPyAyNCA6IDEwICsgKHgpKQorI2RlZmluZSBHUElPM19QSU5fSU5fU0VMKHgsIHkpCQkJKCh4KSA+PiBHUElPM19QSU5fSU5fU0hJRlQoeSkpCisjZGVmaW5lIEdQSU8zX1BJTjVfSU5fU0VMKHgpCQkJKCgoeCkgPj4gMjQpICYgMSkKKyNkZWZpbmUgR1BJM19QSU5fSU5fU0VMKHgsIHkpCQkJKCgoeCkgPj4gKHkpKSAmIDEpCisKK3N0cnVjdCBncGlvX3JlZ3MgeworCXZvaWQgX19pb21lbSAqaW5wX3N0YXRlOworCXZvaWQgX19pb21lbSAqb3V0cF9zZXQ7CisJdm9pZCBfX2lvbWVtICpvdXRwX2NscjsKKwl2b2lkIF9faW9tZW0gKmRpcl9zZXQ7CisJdm9pZCBfX2lvbWVtICpkaXJfY2xyOworfTsKKworLyoKKyAqIEdQSU8gbmFtZXMKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmdwaW9fcDBfbmFtZXNbTFBDMzJYWF9HUElPX1AwX01BWF0gPSB7CisJInAwLjAiLCAicDAuMSIsICJwMC4yIiwgInAwLjMiLAorCSJwMC40IiwgInAwLjUiLCAicDAuNiIsICJwMC43IgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmdwaW9fcDFfbmFtZXNbTFBDMzJYWF9HUElPX1AxX01BWF0gPSB7CisJInAxLjAiLCAicDEuMSIsICJwMS4yIiwgInAxLjMiLAorCSJwMS40IiwgInAxLjUiLCAicDEuNiIsICJwMS43IiwKKwkicDEuOCIsICJwMS45IiwgInAxLjEwIiwgInAxLjExIiwKKwkicDEuMTIiLCAicDEuMTMiLCAicDEuMTQiLCAicDEuMTUiLAorCSJwMS4xNiIsICJwMS4xNyIsICJwMS4xOCIsICJwMS4xOSIsCisJInAxLjIwIiwgInAxLjIxIiwgInAxLjIyIiwgInAxLjIzIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpncGlvX3AyX25hbWVzW0xQQzMyWFhfR1BJT19QMl9NQVhdID0geworCSJwMi4wIiwgInAyLjEiLCAicDIuMiIsICJwMi4zIiwKKwkicDIuNCIsICJwMi41IiwgInAyLjYiLCAicDIuNyIsCisJInAyLjgiLCAicDIuOSIsICJwMi4xMCIsICJwMi4xMSIsCisJInAyLjEyIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmdwaW9fcDNfbmFtZXNbTFBDMzJYWF9HUElPX1AzX01BWF0gPSB7CisJImdwaTAwMCIsICJncGlvMDEiLCAiZ3BpbzAyIiwgImdwaW8wMyIsCisJImdwaW8wNCIsICJncGlvMDUiCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqZ3BpX3AzX25hbWVzW0xQQzMyWFhfR1BJX1AzX01BWF0gPSB7CisJImdwaTAwIiwgImdwaTAxIiwgImdwaTAyIiwgImdwaTAzIiwKKwkiZ3BpMDQiLCAiZ3BpMDUiLCAiZ3BpMDYiLCAiZ3BpMDciLAorCSJncGkwOCIsICJncGkwOSIsICBOVUxMLCAgICBOVUxMLAorCSBOVUxMLCAgICBOVUxMLCAgICBOVUxMLCAgICJncGkxNSIsCisJImdwaTE2IiwgImdwaTE3IiwgImdwaTE4IiwgImdwaTE5IiwKKwkiZ3BpMjAiLCAiZ3BpMjEiLCAiZ3BpMjIiLCAiZ3BpMjMiLAorCSJncGkyNCIsICJncGkyNSIsICJncGkyNiIsICJncGkyNyIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpncG9fcDNfbmFtZXNbTFBDMzJYWF9HUE9fUDNfTUFYXSA9IHsKKwkiZ3BvMDAiLCAiZ3BvMDEiLCAiZ3BvMDIiLCAiZ3BvMDMiLAorCSJncG8wNCIsICJncG8wNSIsICJncG8wNiIsICJncG8wNyIsCisJImdwbzA4IiwgImdwbzA5IiwgImdwbzEwIiwgImdwbzExIiwKKwkiZ3BvMTIiLCAiZ3BvMTMiLCAiZ3BvMTQiLCAiZ3BvMTUiLAorCSJncG8xNiIsICJncG8xNyIsICJncG8xOCIsICJncG8xOSIsCisJImdwbzIwIiwgImdwbzIxIiwgImdwbzIyIiwgImdwbzIzIgorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX3JlZ3MgZ3Bpb19ncnBfcmVnc19wMCA9IHsKKwkuaW5wX3N0YXRlCT0gTFBDMzJYWF9HUElPX1AwX0lOUF9TVEFURSwKKwkub3V0cF9zZXQJPSBMUEMzMlhYX0dQSU9fUDBfT1VUUF9TRVQsCisJLm91dHBfY2xyCT0gTFBDMzJYWF9HUElPX1AwX09VVFBfQ0xSLAorCS5kaXJfc2V0CT0gTFBDMzJYWF9HUElPX1AwX0RJUl9TRVQsCisJLmRpcl9jbHIJPSBMUEMzMlhYX0dQSU9fUDBfRElSX0NMUiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19yZWdzIGdwaW9fZ3JwX3JlZ3NfcDEgPSB7CisJLmlucF9zdGF0ZQk9IExQQzMyWFhfR1BJT19QMV9JTlBfU1RBVEUsCisJLm91dHBfc2V0CT0gTFBDMzJYWF9HUElPX1AxX09VVFBfU0VULAorCS5vdXRwX2Nscgk9IExQQzMyWFhfR1BJT19QMV9PVVRQX0NMUiwKKwkuZGlyX3NldAk9IExQQzMyWFhfR1BJT19QMV9ESVJfU0VULAorCS5kaXJfY2xyCT0gTFBDMzJYWF9HUElPX1AxX0RJUl9DTFIsCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fcmVncyBncGlvX2dycF9yZWdzX3AyID0geworCS5pbnBfc3RhdGUJPSBMUEMzMlhYX0dQSU9fUDJfSU5QX1NUQVRFLAorCS5vdXRwX3NldAk9IExQQzMyWFhfR1BJT19QMl9PVVRQX1NFVCwKKwkub3V0cF9jbHIJPSBMUEMzMlhYX0dQSU9fUDJfT1VUUF9DTFIsCisJLmRpcl9zZXQJPSBMUEMzMlhYX0dQSU9fUDJfRElSX1NFVCwKKwkuZGlyX2Nscgk9IExQQzMyWFhfR1BJT19QMl9ESVJfQ0xSLAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX3JlZ3MgZ3Bpb19ncnBfcmVnc19wMyA9IHsKKwkuaW5wX3N0YXRlCT0gTFBDMzJYWF9HUElPX1AzX0lOUF9TVEFURSwKKwkub3V0cF9zZXQJPSBMUEMzMlhYX0dQSU9fUDNfT1VUUF9TRVQsCisJLm91dHBfY2xyCT0gTFBDMzJYWF9HUElPX1AzX09VVFBfQ0xSLAorCS5kaXJfc2V0CT0gTFBDMzJYWF9HUElPX1AyX0RJUl9TRVQsCisJLmRpcl9jbHIJPSBMUEMzMlhYX0dQSU9fUDJfRElSX0NMUiwKK307CisKK3N0cnVjdCBscGMzMnh4X2dwaW9fY2hpcCB7CisJc3RydWN0IGdwaW9fY2hpcAljaGlwOworCXN0cnVjdCBncGlvX3JlZ3MJKmdwaW9fZ3JwOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbHBjMzJ4eF9ncGlvX2NoaXAgKnRvX2xwYzMyeHhfZ3BpbygKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpncGMpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihncGMsIHN0cnVjdCBscGMzMnh4X2dwaW9fY2hpcCwgY2hpcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fc2V0X2dwaW9fZGlyX3AwMTIoc3RydWN0IGxwYzMyeHhfZ3Bpb19jaGlwICpncm91cCwKKwl1bnNpZ25lZCBwaW4sIGludCBpbnB1dCkKK3sKKwlpZiAoaW5wdXQpCisJCV9fcmF3X3dyaXRlbChHUElPMDEyX1BJTl9UT19CSVQocGluKSwKKwkJCWdyb3VwLT5ncGlvX2dycC0+ZGlyX2Nscik7CisJZWxzZQorCQlfX3Jhd193cml0ZWwoR1BJTzAxMl9QSU5fVE9fQklUKHBpbiksCisJCQlncm91cC0+Z3Bpb19ncnAtPmRpcl9zZXQpOworfQorCitzdGF0aWMgdm9pZCBfX3NldF9ncGlvX2Rpcl9wMyhzdHJ1Y3QgbHBjMzJ4eF9ncGlvX2NoaXAgKmdyb3VwLAorCXVuc2lnbmVkIHBpbiwgaW50IGlucHV0KQoreworCXUzMiB1ID0gR1BJTzNfUElOX1RPX0JJVChwaW4pOworCisJaWYgKGlucHV0KQorCQlfX3Jhd193cml0ZWwodSwgZ3JvdXAtPmdwaW9fZ3JwLT5kaXJfY2xyKTsKKwllbHNlCisJCV9fcmF3X3dyaXRlbCh1LCBncm91cC0+Z3Bpb19ncnAtPmRpcl9zZXQpOworfQorCitzdGF0aWMgdm9pZCBfX3NldF9ncGlvX2xldmVsX3AwMTIoc3RydWN0IGxwYzMyeHhfZ3Bpb19jaGlwICpncm91cCwKKwl1bnNpZ25lZCBwaW4sIGludCBoaWdoKQoreworCWlmIChoaWdoKQorCQlfX3Jhd193cml0ZWwoR1BJTzAxMl9QSU5fVE9fQklUKHBpbiksCisJCQlncm91cC0+Z3Bpb19ncnAtPm91dHBfc2V0KTsKKwllbHNlCisJCV9fcmF3X3dyaXRlbChHUElPMDEyX1BJTl9UT19CSVQocGluKSwKKwkJCWdyb3VwLT5ncGlvX2dycC0+b3V0cF9jbHIpOworfQorCitzdGF0aWMgdm9pZCBfX3NldF9ncGlvX2xldmVsX3AzKHN0cnVjdCBscGMzMnh4X2dwaW9fY2hpcCAqZ3JvdXAsCisJdW5zaWduZWQgcGluLCBpbnQgaGlnaCkKK3sKKwl1MzIgdSA9IEdQSU8zX1BJTl9UT19CSVQocGluKTsKKworCWlmIChoaWdoKQorCQlfX3Jhd193cml0ZWwodSwgZ3JvdXAtPmdwaW9fZ3JwLT5vdXRwX3NldCk7CisJZWxzZQorCQlfX3Jhd193cml0ZWwodSwgZ3JvdXAtPmdwaW9fZ3JwLT5vdXRwX2Nscik7Cit9CisKK3N0YXRpYyB2b2lkIF9fc2V0X2dwb19sZXZlbF9wMyhzdHJ1Y3QgbHBjMzJ4eF9ncGlvX2NoaXAgKmdyb3VwLAorCXVuc2lnbmVkIHBpbiwgaW50IGhpZ2gpCit7CisJaWYgKGhpZ2gpCisJCV9fcmF3X3dyaXRlbChHUE8zX1BJTl9UT19CSVQocGluKSwgZ3JvdXAtPmdwaW9fZ3JwLT5vdXRwX3NldCk7CisJZWxzZQorCQlfX3Jhd193cml0ZWwoR1BPM19QSU5fVE9fQklUKHBpbiksIGdyb3VwLT5ncGlvX2dycC0+b3V0cF9jbHIpOworfQorCitzdGF0aWMgaW50IF9fZ2V0X2dwaW9fc3RhdGVfcDAxMihzdHJ1Y3QgbHBjMzJ4eF9ncGlvX2NoaXAgKmdyb3VwLAorCXVuc2lnbmVkIHBpbikKK3sKKwlyZXR1cm4gR1BJTzAxMl9QSU5fSU5fU0VMKF9fcmF3X3JlYWRsKGdyb3VwLT5ncGlvX2dycC0+aW5wX3N0YXRlKSwKKwkJcGluKTsKK30KKworc3RhdGljIGludCBfX2dldF9ncGlvX3N0YXRlX3AzKHN0cnVjdCBscGMzMnh4X2dwaW9fY2hpcCAqZ3JvdXAsCisJdW5zaWduZWQgcGluKQoreworCWludCBzdGF0ZSA9IF9fcmF3X3JlYWRsKGdyb3VwLT5ncGlvX2dycC0+aW5wX3N0YXRlKTsKKworCS8qCisJICogUDMgR1BJTyBwaW4gaW5wdXQgbWFwcGluZyBpcyBub3QgY29udGlndW91cywgR1BJT1AzLTAuLjQgaXMgbWFwcGVkCisJICogdG8gYml0cyAxMC4uMTQsIHdoaWxlIEdQSU9QMy01IGlzIG1hcHBlZCB0byBiaXQgMjQuCisJICovCisJcmV0dXJuIEdQSU8zX1BJTl9JTl9TRUwoc3RhdGUsIHBpbik7Cit9CisKK3N0YXRpYyBpbnQgX19nZXRfZ3BpX3N0YXRlX3AzKHN0cnVjdCBscGMzMnh4X2dwaW9fY2hpcCAqZ3JvdXAsCisJdW5zaWduZWQgcGluKQoreworCXJldHVybiBHUEkzX1BJTl9JTl9TRUwoX19yYXdfcmVhZGwoZ3JvdXAtPmdwaW9fZ3JwLT5pbnBfc3RhdGUpLCBwaW4pOworfQorCisvKgorICogR0VORVJJQ19HUElPIHByaW1pdGl2ZXMuCisgKi8KK3N0YXRpYyBpbnQgbHBjMzJ4eF9ncGlvX2Rpcl9pbnB1dF9wMDEyKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJdW5zaWduZWQgcGluKQoreworCXN0cnVjdCBscGMzMnh4X2dwaW9fY2hpcCAqZ3JvdXAgPSB0b19scGMzMnh4X2dwaW8oY2hpcCk7CisKKwlfX3NldF9ncGlvX2Rpcl9wMDEyKGdyb3VwLCBwaW4sIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbHBjMzJ4eF9ncGlvX2Rpcl9pbnB1dF9wMyhzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCXVuc2lnbmVkIHBpbikKK3sKKwlzdHJ1Y3QgbHBjMzJ4eF9ncGlvX2NoaXAgKmdyb3VwID0gdG9fbHBjMzJ4eF9ncGlvKGNoaXApOworCisJX19zZXRfZ3Bpb19kaXJfcDMoZ3JvdXAsIHBpbiwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBscGMzMnh4X2dwaW9fZGlyX2luX2Fsd2F5cyhzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCXVuc2lnbmVkIHBpbikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBscGMzMnh4X2dwaW9fZ2V0X3ZhbHVlX3AwMTIoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgcGluKQoreworCXN0cnVjdCBscGMzMnh4X2dwaW9fY2hpcCAqZ3JvdXAgPSB0b19scGMzMnh4X2dwaW8oY2hpcCk7CisKKwlyZXR1cm4gX19nZXRfZ3Bpb19zdGF0ZV9wMDEyKGdyb3VwLCBwaW4pOworfQorCitzdGF0aWMgaW50IGxwYzMyeHhfZ3Bpb19nZXRfdmFsdWVfcDMoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgcGluKQoreworCXN0cnVjdCBscGMzMnh4X2dwaW9fY2hpcCAqZ3JvdXAgPSB0b19scGMzMnh4X2dwaW8oY2hpcCk7CisKKwlyZXR1cm4gX19nZXRfZ3Bpb19zdGF0ZV9wMyhncm91cCwgcGluKTsKK30KKworc3RhdGljIGludCBscGMzMnh4X2dwaV9nZXRfdmFsdWUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgcGluKQoreworCXN0cnVjdCBscGMzMnh4X2dwaW9fY2hpcCAqZ3JvdXAgPSB0b19scGMzMnh4X2dwaW8oY2hpcCk7CisKKwlyZXR1cm4gX19nZXRfZ3BpX3N0YXRlX3AzKGdyb3VwLCBwaW4pOworfQorCitzdGF0aWMgaW50IGxwYzMyeHhfZ3Bpb19kaXJfb3V0cHV0X3AwMTIoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgcGluLAorCWludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbHBjMzJ4eF9ncGlvX2NoaXAgKmdyb3VwID0gdG9fbHBjMzJ4eF9ncGlvKGNoaXApOworCisJX19zZXRfZ3Bpb19kaXJfcDAxMihncm91cCwgcGluLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxwYzMyeHhfZ3Bpb19kaXJfb3V0cHV0X3AzKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIHBpbiwKKwlpbnQgdmFsdWUpCit7CisJc3RydWN0IGxwYzMyeHhfZ3Bpb19jaGlwICpncm91cCA9IHRvX2xwYzMyeHhfZ3BpbyhjaGlwKTsKKworCV9fc2V0X2dwaW9fZGlyX3AzKGdyb3VwLCBwaW4sIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbHBjMzJ4eF9ncGlvX2Rpcl9vdXRfYWx3YXlzKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIHBpbiwKKwlpbnQgdmFsdWUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxwYzMyeHhfZ3Bpb19zZXRfdmFsdWVfcDAxMihzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBwaW4sCisJaW50IHZhbHVlKQoreworCXN0cnVjdCBscGMzMnh4X2dwaW9fY2hpcCAqZ3JvdXAgPSB0b19scGMzMnh4X2dwaW8oY2hpcCk7CisKKwlfX3NldF9ncGlvX2xldmVsX3AwMTIoZ3JvdXAsIHBpbiwgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBscGMzMnh4X2dwaW9fc2V0X3ZhbHVlX3AzKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIHBpbiwKKwlpbnQgdmFsdWUpCit7CisJc3RydWN0IGxwYzMyeHhfZ3Bpb19jaGlwICpncm91cCA9IHRvX2xwYzMyeHhfZ3BpbyhjaGlwKTsKKworCV9fc2V0X2dwaW9fbGV2ZWxfcDMoZ3JvdXAsIHBpbiwgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBscGMzMnh4X2dwb19zZXRfdmFsdWUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgcGluLAorCWludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbHBjMzJ4eF9ncGlvX2NoaXAgKmdyb3VwID0gdG9fbHBjMzJ4eF9ncGlvKGNoaXApOworCisJX19zZXRfZ3BvX2xldmVsX3AzKGdyb3VwLCBwaW4sIHZhbHVlKTsKK30KKworc3RhdGljIGludCBscGMzMnh4X2dwaW9fcmVxdWVzdChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBwaW4pCit7CisJaWYgKHBpbiA8IGNoaXAtPm5ncGlvKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgc3RydWN0IGxwYzMyeHhfZ3Bpb19jaGlwIGxwYzMyeHhfZ3Bpb2NoaXBbXSA9IHsKKwl7CisJCS5jaGlwID0geworCQkJLmxhYmVsCQkJPSAiZ3Bpb19wMCIsCisJCQkuZGlyZWN0aW9uX2lucHV0CT0gbHBjMzJ4eF9ncGlvX2Rpcl9pbnB1dF9wMDEyLAorCQkJLmdldAkJCT0gbHBjMzJ4eF9ncGlvX2dldF92YWx1ZV9wMDEyLAorCQkJLmRpcmVjdGlvbl9vdXRwdXQJPSBscGMzMnh4X2dwaW9fZGlyX291dHB1dF9wMDEyLAorCQkJLnNldAkJCT0gbHBjMzJ4eF9ncGlvX3NldF92YWx1ZV9wMDEyLAorCQkJLnJlcXVlc3QJCT0gbHBjMzJ4eF9ncGlvX3JlcXVlc3QsCisJCQkuYmFzZQkJCT0gTFBDMzJYWF9HUElPX1AwX0dSUCwKKwkJCS5uZ3BpbwkJCT0gTFBDMzJYWF9HUElPX1AwX01BWCwKKwkJCS5uYW1lcwkJCT0gZ3Bpb19wMF9uYW1lcywKKwkJCS5jYW5fc2xlZXAJCT0gMCwKKwkJfSwKKwkJLmdwaW9fZ3JwID0gJmdwaW9fZ3JwX3JlZ3NfcDAsCisJfSwKKwl7CisJCS5jaGlwID0geworCQkJLmxhYmVsCQkJPSAiZ3Bpb19wMSIsCisJCQkuZGlyZWN0aW9uX2lucHV0CT0gbHBjMzJ4eF9ncGlvX2Rpcl9pbnB1dF9wMDEyLAorCQkJLmdldAkJCT0gbHBjMzJ4eF9ncGlvX2dldF92YWx1ZV9wMDEyLAorCQkJLmRpcmVjdGlvbl9vdXRwdXQJPSBscGMzMnh4X2dwaW9fZGlyX291dHB1dF9wMDEyLAorCQkJLnNldAkJCT0gbHBjMzJ4eF9ncGlvX3NldF92YWx1ZV9wMDEyLAorCQkJLnJlcXVlc3QJCT0gbHBjMzJ4eF9ncGlvX3JlcXVlc3QsCisJCQkuYmFzZQkJCT0gTFBDMzJYWF9HUElPX1AxX0dSUCwKKwkJCS5uZ3BpbwkJCT0gTFBDMzJYWF9HUElPX1AxX01BWCwKKwkJCS5uYW1lcwkJCT0gZ3Bpb19wMV9uYW1lcywKKwkJCS5jYW5fc2xlZXAJCT0gMCwKKwkJfSwKKwkJLmdwaW9fZ3JwID0gJmdwaW9fZ3JwX3JlZ3NfcDEsCisJfSwKKwl7CisJCS5jaGlwID0geworCQkJLmxhYmVsCQkJPSAiZ3Bpb19wMiIsCisJCQkuZGlyZWN0aW9uX2lucHV0CT0gbHBjMzJ4eF9ncGlvX2Rpcl9pbnB1dF9wMDEyLAorCQkJLmdldAkJCT0gbHBjMzJ4eF9ncGlvX2dldF92YWx1ZV9wMDEyLAorCQkJLmRpcmVjdGlvbl9vdXRwdXQJPSBscGMzMnh4X2dwaW9fZGlyX291dHB1dF9wMDEyLAorCQkJLnNldAkJCT0gbHBjMzJ4eF9ncGlvX3NldF92YWx1ZV9wMDEyLAorCQkJLnJlcXVlc3QJCT0gbHBjMzJ4eF9ncGlvX3JlcXVlc3QsCisJCQkuYmFzZQkJCT0gTFBDMzJYWF9HUElPX1AyX0dSUCwKKwkJCS5uZ3BpbwkJCT0gTFBDMzJYWF9HUElPX1AyX01BWCwKKwkJCS5uYW1lcwkJCT0gZ3Bpb19wMl9uYW1lcywKKwkJCS5jYW5fc2xlZXAJCT0gMCwKKwkJfSwKKwkJLmdwaW9fZ3JwID0gJmdwaW9fZ3JwX3JlZ3NfcDIsCisJfSwKKwl7CisJCS5jaGlwID0geworCQkJLmxhYmVsCQkJPSAiZ3Bpb19wMyIsCisJCQkuZGlyZWN0aW9uX2lucHV0CT0gbHBjMzJ4eF9ncGlvX2Rpcl9pbnB1dF9wMywKKwkJCS5nZXQJCQk9IGxwYzMyeHhfZ3Bpb19nZXRfdmFsdWVfcDMsCisJCQkuZGlyZWN0aW9uX291dHB1dAk9IGxwYzMyeHhfZ3Bpb19kaXJfb3V0cHV0X3AzLAorCQkJLnNldAkJCT0gbHBjMzJ4eF9ncGlvX3NldF92YWx1ZV9wMywKKwkJCS5yZXF1ZXN0CQk9IGxwYzMyeHhfZ3Bpb19yZXF1ZXN0LAorCQkJLmJhc2UJCQk9IExQQzMyWFhfR1BJT19QM19HUlAsCisJCQkubmdwaW8JCQk9IExQQzMyWFhfR1BJT19QM19NQVgsCisJCQkubmFtZXMJCQk9IGdwaW9fcDNfbmFtZXMsCisJCQkuY2FuX3NsZWVwCQk9IDAsCisJCX0sCisJCS5ncGlvX2dycCA9ICZncGlvX2dycF9yZWdzX3AzLAorCX0sCisJeworCQkuY2hpcCA9IHsKKwkJCS5sYWJlbAkJCT0gImdwaV9wMyIsCisJCQkuZGlyZWN0aW9uX2lucHV0CT0gbHBjMzJ4eF9ncGlvX2Rpcl9pbl9hbHdheXMsCisJCQkuZ2V0CQkJPSBscGMzMnh4X2dwaV9nZXRfdmFsdWUsCisJCQkucmVxdWVzdAkJPSBscGMzMnh4X2dwaW9fcmVxdWVzdCwKKwkJCS5iYXNlCQkJPSBMUEMzMlhYX0dQSV9QM19HUlAsCisJCQkubmdwaW8JCQk9IExQQzMyWFhfR1BJX1AzX01BWCwKKwkJCS5uYW1lcwkJCT0gZ3BpX3AzX25hbWVzLAorCQkJLmNhbl9zbGVlcAkJPSAwLAorCQl9LAorCQkuZ3Bpb19ncnAgPSAmZ3Bpb19ncnBfcmVnc19wMywKKwl9LAorCXsKKwkJLmNoaXAgPSB7CisJCQkubGFiZWwJCQk9ICJncG9fcDMiLAorCQkJLmRpcmVjdGlvbl9vdXRwdXQJPSBscGMzMnh4X2dwaW9fZGlyX291dF9hbHdheXMsCisJCQkuc2V0CQkJPSBscGMzMnh4X2dwb19zZXRfdmFsdWUsCisJCQkucmVxdWVzdAkJPSBscGMzMnh4X2dwaW9fcmVxdWVzdCwKKwkJCS5iYXNlCQkJPSBMUEMzMlhYX0dQT19QM19HUlAsCisJCQkubmdwaW8JCQk9IExQQzMyWFhfR1BPX1AzX01BWCwKKwkJCS5uYW1lcwkJCT0gZ3BvX3AzX25hbWVzLAorCQkJLmNhbl9zbGVlcAkJPSAwLAorCQl9LAorCQkuZ3Bpb19ncnAgPSAmZ3Bpb19ncnBfcmVnc19wMywKKwl9LAorfTsKKwordm9pZCBfX2luaXQgbHBjMzJ4eF9ncGlvX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxwYzMyeHhfZ3Bpb2NoaXApOyBpKyspCisJCWdwaW9jaGlwX2FkZCgmbHBjMzJ4eF9ncGlvY2hpcFtpXS5jaGlwKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9pbmNsdWRlL21hY2gvY2xrZGV2LmggYi9hcmNoL2FybS9tYWNoLWxwYzMyeHgvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZjA2MzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWxwYzMyeHgvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWxwYzMyeHgvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCisgKgorICogQXV0aG9yOiBLZXZpbiBXZWxscyA8a2V2aW4ud2VsbHNAbnhwLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTlhQIFNlbWljb25kdWN0b3JzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9DTEtERVZfSAorI2RlZmluZSBfX0FTTV9BUkNIX0NMS0RFVl9ICisKKyNkZWZpbmUgX19jbGtfZ2V0KGNsaykgKHsgMTsgfSkKKyNkZWZpbmUgX19jbGtfcHV0KGNsaykgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjE3NDRkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1scGMzMnh4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWxwYzMyeHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKyAqCisgKiBBdXRob3I6IEtldmluIFdlbGxzIDxrZXZpbi53ZWxsc0BueHAuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOWFAgU2VtaWNvbmR1Y3RvcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoKKyAqIERlYnVnIG91dHB1dCBpcyBoYXJkY29kZWQgdG8gc3RhbmRhcmQgVUFSVCA1CisqLworCisJLm1hY3JvCWFkZHJ1YXJ0LHJ4LCB0bXAKKwltcmMJcDE1LCAwLCBccngsIGMxLCBjMAorCXRzdAlccngsICMxCQkJCUAgTU1VIGVuYWJsZWQ/CisJbGRyZXEJXHJ4LCA9MHg0MDA5MDAwMAorCWxkcm5lCVxyeCwgPTB4RjQwOTAwMDAKKwkuZW5kbQorCisjZGVmaW5lIFVBUlRfU0hJRlQJMgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9kZWJ1Zy04MjUwLlM+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxwYzMyeHgvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWxwYzMyeHgvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcwMjI3YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtMCwwICsxLDQ3IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1scGMzMnh4L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisgKgorICogQXV0aG9yOiBLZXZpbiBXZWxscyA8a2V2aW4ud2VsbHNAbnhwLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTlhQIFNlbWljb25kdWN0b3JzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9wbGF0Zm9ybS5oPgorCisjZGVmaW5lIExQQzMyWFhfSU5UQ19NQVNLRURfU1RBVFVTX09GUwkweDgKKworCS5tYWNybwlkaXNhYmxlX2ZpcQorCS5lbmRtCisKKwkubWFjcm8gIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJbGRyCVxiYXNlLCA9SU9fQUREUkVTUyhMUEMzMlhYX01JQ19CQVNFKQorCS5lbmRtCisKKwkubWFjcm8gIGFyY2hfcmV0X3RvX3VzZXIsIHRtcDEsIHRtcDIKKwkuZW5kbQorCisvKgorICogUmV0dXJuIElSUSBudW1iZXIgaW4gaXJxbnIuIEFsc28gcmV0dXJuIHByb2Nlc3NvciBaIGZsYWcgc3RhdHVzIGluIENQU1IKKyAqIGFzIHNldCBpZiBhbiBpbnRlcnJ1cHQgaXMgcGVuZGluZy4KKyAqLworCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKwlsZHIJXGlycXN0YXQsIFtcYmFzZSwgI0xQQzMyWFhfSU5UQ19NQVNLRURfU1RBVFVTX09GU10KKwljbHoJXGlycW5yLCBcaXJxc3RhdAorCXJzYglcaXJxbnIsIFxpcnFuciwgIzMxCisJdGVxCVxpcnFzdGF0LCAjMAorCS5lbmRtCisKKwkubWFjcm8JaXJxX3ByaW9fdGFibGUKKwkuZW5kbQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxwYzMyeHgvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9pbmNsdWRlL21hY2gvZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZDAzZGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWxwYzMyeHgvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMCwwICsxLDc0IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1scGMzMnh4L2luY2x1ZGUvbWFjaC9ncGlvLmgKKyAqCisgKiBBdXRob3I6IEtldmluIFdlbGxzIDxrZXZpbi53ZWxsc0BueHAuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOWFAgU2VtaWNvbmR1Y3RvcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0dQSU9fSAorI2RlZmluZSBfX0FTTV9BUkNIX0dQSU9fSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgorCisvKgorICogTm90ZSEKKyAqIE11eGVkIEdQIHBpbnMgbmVlZCB0byBiZSBzZXR1cCB0byB0aGUgR1Agc3RhdGUgaW4gdGhlIGJvYXJkIGxldmVsCisgKiBjb2RlIHByaW9yIHRvIHVzaW5nIHRoaXMgZHJpdmVyLgorICogR1BJIHBpbnMgOiAyOHhQMyBncm91cAorICogR1BPIHBpbnMgOiAyNHhQMyBncm91cAorICogR1BJTyBwaW5zOiA4eFAwIGdyb3VwLCAyNHhQMSBncm91cCwgMTN4UDIgZ3JvdXAsIDZ4UDMgZ3JvdXAKKyAqLworCisjZGVmaW5lIExQQzMyWFhfR1BJT19QMF9NQVggOAorI2RlZmluZSBMUEMzMlhYX0dQSU9fUDFfTUFYIDI0CisjZGVmaW5lIExQQzMyWFhfR1BJT19QMl9NQVggMTMKKyNkZWZpbmUgTFBDMzJYWF9HUElPX1AzX01BWCA2CisjZGVmaW5lIExQQzMyWFhfR1BJX1AzX01BWCAyOAorI2RlZmluZSBMUEMzMlhYX0dQT19QM19NQVggMjQKKworI2RlZmluZSBMUEMzMlhYX0dQSU9fUDBfR1JQIDAKKyNkZWZpbmUgTFBDMzJYWF9HUElPX1AxX0dSUCAoTFBDMzJYWF9HUElPX1AwX0dSUCArIExQQzMyWFhfR1BJT19QMF9NQVgpCisjZGVmaW5lIExQQzMyWFhfR1BJT19QMl9HUlAgKExQQzMyWFhfR1BJT19QMV9HUlAgKyBMUEMzMlhYX0dQSU9fUDFfTUFYKQorI2RlZmluZSBMUEMzMlhYX0dQSU9fUDNfR1JQIChMUEMzMlhYX0dQSU9fUDJfR1JQICsgTFBDMzJYWF9HUElPX1AyX01BWCkKKyNkZWZpbmUgTFBDMzJYWF9HUElfUDNfR1JQIChMUEMzMlhYX0dQSU9fUDNfR1JQICsgTFBDMzJYWF9HUElPX1AzX01BWCkKKyNkZWZpbmUgTFBDMzJYWF9HUE9fUDNfR1JQIChMUEMzMlhYX0dQSV9QM19HUlAgKyBMUEMzMlhYX0dQSV9QM19NQVgpCisKKy8qCisgKiBBIHNwZWNpZmljIEdQSU8gY2FuIGJlIHNlbGVjdGVkIHdpdGggdGhpcyBtYWNybworICogaWUsIEdQSU9fMDUgY2FuIGJlIHNlbGVjdGVkIHdpdGggTFBDMzJYWF9HUElPKExQQzMyWFhfR1BJT19QM19HUlAsIDUpCisgKiBTZWUgdGhlIExQQzMyeDAgVXNlcidzIGd1aWRlIGZvciBHUElPIGdyb3VwIG51bWJlcnMKKyAqLworI2RlZmluZSBMUEMzMlhYX0dQSU8oeCwgeSkgKCh4KSArICh5KSkKKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3BpbykKK3sKKwlyZXR1cm4gX19ncGlvX2dldF92YWx1ZShncGlvKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3sKKwlfX2dwaW9fc2V0X3ZhbHVlKGdwaW8sIHZhbHVlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19jYW5zbGVlcCh1bnNpZ25lZCBncGlvKQoreworCXJldHVybiBfX2dwaW9fY2Fuc2xlZXAoZ3Bpbyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCit7CisJcmV0dXJuIF9fZ3Bpb190b19pcnEoZ3Bpbyk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1scGMzMnh4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC1scGMzMnh4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZTFkZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWxwYzMyeHgvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbHBjMzJ4eC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9ICisKKy8qCisgKiBTdGFydCBvZiB2aXJ0dWFsIGFkZHJlc3NlcyBmb3IgSU8gZGV2aWNlcworICovCisjZGVmaW5lIElPX0JBU0UJCTB4RjAwMDAwMDAKKworLyoKKyAqIFRoaXMgbWFjcm8gcmVsaWVzIG9uIGZhY3QgdGhhdCBmb3IgYWxsIEhXIGkvbyBhZGRyZXNzZXMgYml0cyAyMC0yMyBhcmUgMAorICovCisjZGVmaW5lIElPX0FERFJFU1MoeCkJKCgoKCh4KSAmIDB4ZmYwMDAwMDApID4+IDQpIHwgKCh4KSAmIDB4ZmZmZmYpKSB8XAorCQkJIElPX0JBU0UpCisKKyNkZWZpbmUgaW9fcDJ2KHgpCSgodm9pZCBfX2lvbWVtICopICh1bnNpZ25lZCBsb25nKSBJT19BRERSRVNTKHgpKQorI2RlZmluZSBpb192MnAoeCkJKCgoKHgpICYgMHgwZmYwMDAwMCkgPDwgNCkgfCAoKHgpICYgMHgwMDBmZmZmZikpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1scGMzMnh4L2luY2x1ZGUvbWFjaC9pMmMuaCBiL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9pbmNsdWRlL21hY2gvaTJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM0ZGM5MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9pbmNsdWRlL21hY2gvaTJjLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIFBOWDQwMDgtc3BlY2lmaWMgdHdlYWtzIGZvciBJMkMgSVAzMjA0IGJsb2NrCisgKgorICogQXV0aG9yOiBWaXRhbHkgV29vbCA8dndvb2xAcnUubXZpc3RhLmNvbT4KKyAqCisgKiAyMDA1IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9JMkNfSAorI2RlZmluZSBfX0FTTV9BUkNIX0kyQ19ICisKK2VudW0geworCW1zdGF0dXNfdGRpID0gMHgwMDAwMDAwMSwKKwltc3RhdHVzX2FmaSA9IDB4MDAwMDAwMDIsCisJbXN0YXR1c19uYWkgPSAweDAwMDAwMDA0LAorCW1zdGF0dXNfZHJtaSA9IDB4MDAwMDAwMDgsCisJbXN0YXR1c19hY3RpdmUgPSAweDAwMDAwMDIwLAorCW1zdGF0dXNfc2NsID0gMHgwMDAwMDA0MCwKKwltc3RhdHVzX3NkYSA9IDB4MDAwMDAwODAsCisJbXN0YXR1c19yZmYgPSAweDAwMDAwMTAwLAorCW1zdGF0dXNfcmZlID0gMHgwMDAwMDIwMCwKKwltc3RhdHVzX3RmZiA9IDB4MDAwMDA0MDAsCisJbXN0YXR1c190ZmUgPSAweDAwMDAwODAwLAorfTsKKworZW51bSB7CisJbWNudHJsX3RkaWUgPSAweDAwMDAwMDAxLAorCW1jbnRybF9hZmllID0gMHgwMDAwMDAwMiwKKwltY250cmxfbmFpZSA9IDB4MDAwMDAwMDQsCisJbWNudHJsX2RybWllID0gMHgwMDAwMDAwOCwKKwltY250cmxfZGFpZSA9IDB4MDAwMDAwMjAsCisJbWNudHJsX3JmZmllID0gMHgwMDAwMDA0MCwKKwltY250cmxfdGZmaWUgPSAweDAwMDAwMDgwLAorCW1jbnRybF9yZXNldCA9IDB4MDAwMDAxMDAsCisJbWNudHJsX2NkYm1vZGUgPSAweDAwMDAwNDAwLAorfTsKKworZW51bSB7CisJcndfYml0ID0gMSA8PCAwLAorCXN0YXJ0X2JpdCA9IDEgPDwgOCwKKwlzdG9wX2JpdCA9IDEgPDwgOSwKK307CisKKyNkZWZpbmUgSTJDX1JFR19SWChhKQkoKGEpLT5pb2FkZHIpCQkvKiBSeCBGSUZPIHJlZyAoUk8pICovCisjZGVmaW5lIEkyQ19SRUdfVFgoYSkJKChhKS0+aW9hZGRyKQkJLyogVHggRklGTyByZWcgKFdPKSAqLworI2RlZmluZSBJMkNfUkVHX1NUUyhhKQkoKGEpLT5pb2FkZHIgKyAweDA0KQkvKiBTdGF0dXMgcmVnIChSTykgKi8KKyNkZWZpbmUgSTJDX1JFR19DVEwoYSkJKChhKS0+aW9hZGRyICsgMHgwOCkJLyogQ3RsIHJlZyAqLworI2RlZmluZSBJMkNfUkVHX0NLTChhKQkoKGEpLT5pb2FkZHIgKyAweDBjKQkvKiBDbG9jayBkaXZpZGVyIGxvdyAqLworI2RlZmluZSBJMkNfUkVHX0NLSChhKQkoKGEpLT5pb2FkZHIgKyAweDEwKQkvKiBDbG9jayBkaXZpZGVyIGhpZ2ggKi8KKyNkZWZpbmUgSTJDX1JFR19BRFIoYSkJKChhKS0+aW9hZGRyICsgMHgxNCkJLyogSTJDIGFkZHJlc3MgKi8KKyNkZWZpbmUgSTJDX1JFR19SRkwoYSkJKChhKS0+aW9hZGRyICsgMHgxOCkJLyogUnggRklGTyBsZXZlbCAoUk8pICovCisjZGVmaW5lIEkyQ19SRUdfVEZMKGEpCSgoYSktPmlvYWRkciArIDB4MWMpCS8qIFR4IEZJRk8gbGV2ZWwgKFJPKSAqLworI2RlZmluZSBJMkNfUkVHX1JYQihhKQkoKGEpLT5pb2FkZHIgKyAweDIwKQkvKiBOdW0gb2YgYnl0ZXMgUngtZWQgKFJPKSAqLworI2RlZmluZSBJMkNfUkVHX1RYQihhKQkoKGEpLT5pb2FkZHIgKyAweDI0KQkvKiBOdW0gb2YgYnl0ZXMgVHgtZWQgKFJPKSAqLworI2RlZmluZSBJMkNfUkVHX1RYUyhhKQkoKGEpLT5pb2FkZHIgKyAweDI4KQkvKiBUeCBzbGF2ZSBGSUZPIChSTykgKi8KKyNkZWZpbmUgSTJDX1JFR19TVEZMKGEpCSgoYSktPmlvYWRkciArIDB4MmMpCS8qIFR4IHNsYXZlIEZJRk8gbGV2ZWwgKFJPKSAqLworCisjZGVmaW5lIEkyQ19DSElQX05BTUUJCSJQTlg0MDA4LUkyQyIKKworI2VuZGlmCQkJCS8qIF9fQVNNX0FSQ0hfSTJDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9pbmNsdWRlL21hY2gvaW8uaCBiL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9pbmNsdWRlL21hY2gvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjU5YWI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1scGMzMnh4L2luY2x1ZGUvbWFjaC9pby5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWxwYzMyeHgvaW5jbHVkZS9tYWNoL2lvLmgKKyAqCisgKiBBdXRob3I6IEtldmluIFdlbGxzIDxrZXZpbi53ZWxsc0BueHAuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOWFAgU2VtaWNvbmR1Y3RvcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9JT19ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0lPX0gKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVAkweGZmZmZmZmZmCisKKyNkZWZpbmUgX19pbyhhKQkJX190eXBlc2FmZV9pbyhhKQorI2RlZmluZSBfX21lbV9wY2koYSkJKGEpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1scGMzMnh4L2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLWxwYzMyeHgvaW5jbHVkZS9tYWNoL2lycXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjY3ZjUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1scGMzMnh4L2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWxwYzMyeHgvaW5jbHVkZS9tYWNoL2lycXMuaAorICoKKyAqIEF1dGhvcjogS2V2aW4gV2VsbHMgPGtldmluLndlbGxzQG54cC5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5YUCBTZW1pY29uZHVjdG9ycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX0lSUVNfSAorI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9JUlFTX0gKKworI2RlZmluZSBMUEMzMlhYX1NJQzFfSVJRKG4pCQkoMzIgKyAobikpCisjZGVmaW5lIExQQzMyWFhfU0lDMl9JUlEobikJCSg2NCArIChuKSkKKworLyoKKyAqIE1JQyBpbnRlcnJ1cHRzCisgKi8KKyNkZWZpbmUgSVJRX0xQQzMyWFhfU1VCMUlSUQkJMAorI2RlZmluZSBJUlFfTFBDMzJYWF9TVUIySVJRCQkxCisjZGVmaW5lIElSUV9MUEMzMlhYX1BXTTMJCTMKKyNkZWZpbmUgSVJRX0xQQzMyWFhfUFdNNAkJNAorI2RlZmluZSBJUlFfTFBDMzJYWF9IU1RJTUVSCQk1CisjZGVmaW5lIElSUV9MUEMzMlhYX1dBVENICQk2CisjZGVmaW5lIElSUV9MUEMzMlhYX1VBUlRfSUlSMwkJNworI2RlZmluZSBJUlFfTFBDMzJYWF9VQVJUX0lJUjQJCTgKKyNkZWZpbmUgSVJRX0xQQzMyWFhfVUFSVF9JSVI1CQk5CisjZGVmaW5lIElSUV9MUEMzMlhYX1VBUlRfSUlSNgkJMTAKKyNkZWZpbmUgSVJRX0xQQzMyWFhfRkxBU0gJCTExCisjZGVmaW5lIElSUV9MUEMzMlhYX1NEMQkJCTEzCisjZGVmaW5lIElSUV9MUEMzMlhYX0xDRAkJCTE0CisjZGVmaW5lIElSUV9MUEMzMlhYX1NEMAkJCTE1CisjZGVmaW5lIElSUV9MUEMzMlhYX1RJTUVSMAkJMTYKKyNkZWZpbmUgSVJRX0xQQzMyWFhfVElNRVIxCQkxNworI2RlZmluZSBJUlFfTFBDMzJYWF9USU1FUjIJCTE4CisjZGVmaW5lIElSUV9MUEMzMlhYX1RJTUVSMwkJMTkKKyNkZWZpbmUgSVJRX0xQQzMyWFhfU1NQMAkJMjAKKyNkZWZpbmUgSVJRX0xQQzMyWFhfU1NQMQkJMjEKKyNkZWZpbmUgSVJRX0xQQzMyWFhfSTJTMAkJMjIKKyNkZWZpbmUgSVJRX0xQQzMyWFhfSTJTMQkJMjMKKyNkZWZpbmUgSVJRX0xQQzMyWFhfVUFSVF9JSVI3CQkyNAorI2RlZmluZSBJUlFfTFBDMzJYWF9VQVJUX0lJUjIJCTI1CisjZGVmaW5lIElSUV9MUEMzMlhYX1VBUlRfSUlSMQkJMjYKKyNkZWZpbmUgSVJRX0xQQzMyWFhfTVNUSU1FUgkJMjcKKyNkZWZpbmUgSVJRX0xQQzMyWFhfRE1BCQkJMjgKKyNkZWZpbmUgSVJRX0xQQzMyWFhfRVRIRVJORVQJCTI5CisjZGVmaW5lIElSUV9MUEMzMlhYX1NVQjFGSVEJCTMwCisjZGVmaW5lIElSUV9MUEMzMlhYX1NVQjJGSVEJCTMxCisKKy8qCisgKiBTSUMxIGludGVycnVwdHMgc3RhcnQgYXQgb2Zmc2V0IDMyCisgKi8KKyNkZWZpbmUgSVJRX0xQQzMyWFhfSlRBR19DT01NX1RYCUxQQzMyWFhfU0lDMV9JUlEoMSkKKyNkZWZpbmUgSVJRX0xQQzMyWFhfSlRBR19DT01NX1JYCUxQQzMyWFhfU0lDMV9JUlEoMikKKyNkZWZpbmUgSVJRX0xQQzMyWFhfR1BJXzExCQlMUEMzMlhYX1NJQzFfSVJRKDQpCisjZGVmaW5lIElSUV9MUEMzMlhYX1RTX1AJCUxQQzMyWFhfU0lDMV9JUlEoNikKKyNkZWZpbmUgSVJRX0xQQzMyWFhfVFNfSVJRCQlMUEMzMlhYX1NJQzFfSVJRKDcpCisjZGVmaW5lIElSUV9MUEMzMlhYX1RTX0FVWAkJTFBDMzJYWF9TSUMxX0lSUSg4KQorI2RlZmluZSBJUlFfTFBDMzJYWF9TUEkyCQlMUEMzMlhYX1NJQzFfSVJRKDEyKQorI2RlZmluZSBJUlFfTFBDMzJYWF9QTExVU0IJCUxQQzMyWFhfU0lDMV9JUlEoMTMpCisjZGVmaW5lIElSUV9MUEMzMlhYX1BMTEhDTEsJCUxQQzMyWFhfU0lDMV9JUlEoMTQpCisjZGVmaW5lIElSUV9MUEMzMlhYX1BMTDM5NwkJTFBDMzJYWF9TSUMxX0lSUSgxNykKKyNkZWZpbmUgSVJRX0xQQzMyWFhfSTJDXzIJCUxQQzMyWFhfU0lDMV9JUlEoMTgpCisjZGVmaW5lIElSUV9MUEMzMlhYX0kyQ18xCQlMUEMzMlhYX1NJQzFfSVJRKDE5KQorI2RlZmluZSBJUlFfTFBDMzJYWF9SVEMJCQlMUEMzMlhYX1NJQzFfSVJRKDIwKQorI2RlZmluZSBJUlFfTFBDMzJYWF9LRVkJCQlMUEMzMlhYX1NJQzFfSVJRKDIyKQorI2RlZmluZSBJUlFfTFBDMzJYWF9TUEkxCQlMUEMzMlhYX1NJQzFfSVJRKDIzKQorI2RlZmluZSBJUlFfTFBDMzJYWF9TVwkJCUxQQzMyWFhfU0lDMV9JUlEoMjQpCisjZGVmaW5lIElSUV9MUEMzMlhYX1VTQl9PVEdfVElNRVIJTFBDMzJYWF9TSUMxX0lSUSgyNSkKKyNkZWZpbmUgSVJRX0xQQzMyWFhfVVNCX09UR19BVFgJCUxQQzMyWFhfU0lDMV9JUlEoMjYpCisjZGVmaW5lIElSUV9MUEMzMlhYX1VTQl9IT1NUCQlMUEMzMlhYX1NJQzFfSVJRKDI3KQorI2RlZmluZSBJUlFfTFBDMzJYWF9VU0JfREVWX0RNQQkJTFBDMzJYWF9TSUMxX0lSUSgyOCkKKyNkZWZpbmUgSVJRX0xQQzMyWFhfVVNCX0RFVl9MUAkJTFBDMzJYWF9TSUMxX0lSUSgyOSkKKyNkZWZpbmUgSVJRX0xQQzMyWFhfVVNCX0RFVl9IUAkJTFBDMzJYWF9TSUMxX0lSUSgzMCkKKyNkZWZpbmUgSVJRX0xQQzMyWFhfVVNCX0kyQwkJTFBDMzJYWF9TSUMxX0lSUSgzMSkKKworLyoKKyAqIFNJQzIgaW50ZXJydXB0cyBzdGFydCBhdCBvZmZzZXQgNjQKKyAqLworI2RlZmluZSBJUlFfTFBDMzJYWF9HUElPXzAwCQlMUEMzMlhYX1NJQzJfSVJRKDApCisjZGVmaW5lIElSUV9MUEMzMlhYX0dQSU9fMDEJCUxQQzMyWFhfU0lDMl9JUlEoMSkKKyNkZWZpbmUgSVJRX0xQQzMyWFhfR1BJT18wMgkJTFBDMzJYWF9TSUMyX0lSUSgyKQorI2RlZmluZSBJUlFfTFBDMzJYWF9HUElPXzAzCQlMUEMzMlhYX1NJQzJfSVJRKDMpCisjZGVmaW5lIElSUV9MUEMzMlhYX0dQSU9fMDQJCUxQQzMyWFhfU0lDMl9JUlEoNCkKKyNkZWZpbmUgSVJRX0xQQzMyWFhfR1BJT18wNQkJTFBDMzJYWF9TSUMyX0lSUSg1KQorI2RlZmluZSBJUlFfTFBDMzJYWF9TUEkyX0RBVEFJTgkJTFBDMzJYWF9TSUMyX0lSUSg2KQorI2RlZmluZSBJUlFfTFBDMzJYWF9VMl9IQ1RTCQlMUEMzMlhYX1NJQzJfSVJRKDcpCisjZGVmaW5lIElSUV9MUEMzMlhYX1AwX1AxX0lSUQkJTFBDMzJYWF9TSUMyX0lSUSg4KQorI2RlZmluZSBJUlFfTFBDMzJYWF9HUElfMDgJCUxQQzMyWFhfU0lDMl9JUlEoOSkKKyNkZWZpbmUgSVJRX0xQQzMyWFhfR1BJXzA5CQlMUEMzMlhYX1NJQzJfSVJRKDEwKQorI2RlZmluZSBJUlFfTFBDMzJYWF9HUElfMTkJCUxQQzMyWFhfU0lDMl9JUlEoMTEpCisjZGVmaW5lIElSUV9MUEMzMlhYX1U3X0hDVFMJCUxQQzMyWFhfU0lDMl9JUlEoMTIpCisjZGVmaW5lIElSUV9MUEMzMlhYX0dQSV8wNwkJTFBDMzJYWF9TSUMyX0lSUSgxNSkKKyNkZWZpbmUgSVJRX0xQQzMyWFhfU0RJTwkJTFBDMzJYWF9TSUMyX0lSUSgxOCkKKyNkZWZpbmUgSVJRX0xQQzMyWFhfVTVfUlgJCUxQQzMyWFhfU0lDMl9JUlEoMTkpCisjZGVmaW5lIElSUV9MUEMzMlhYX1NQSTFfREFUQUlOCQlMUEMzMlhYX1NJQzJfSVJRKDIwKQorI2RlZmluZSBJUlFfTFBDMzJYWF9HUElfMDAJCUxQQzMyWFhfU0lDMl9JUlEoMjIpCisjZGVmaW5lIElSUV9MUEMzMlhYX0dQSV8wMQkJTFBDMzJYWF9TSUMyX0lSUSgyMykKKyNkZWZpbmUgSVJRX0xQQzMyWFhfR1BJXzAyCQlMUEMzMlhYX1NJQzJfSVJRKDI0KQorI2RlZmluZSBJUlFfTFBDMzJYWF9HUElfMDMJCUxQQzMyWFhfU0lDMl9JUlEoMjUpCisjZGVmaW5lIElSUV9MUEMzMlhYX0dQSV8wNAkJTFBDMzJYWF9TSUMyX0lSUSgyNikKKyNkZWZpbmUgSVJRX0xQQzMyWFhfR1BJXzA1CQlMUEMzMlhYX1NJQzJfSVJRKDI3KQorI2RlZmluZSBJUlFfTFBDMzJYWF9HUElfMDYJCUxQQzMyWFhfU0lDMl9JUlEoMjgpCisjZGVmaW5lIElSUV9MUEMzMlhYX1NZU0NMSwkJTFBDMzJYWF9TSUMyX0lSUSgzMSkKKworI2RlZmluZSBOUl9JUlFTCQkJCTk2CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1scGMzMnh4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ0ZTFhYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbHBjMzJ4eC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKyAqCisgKiBBdXRob3I6IEtldmluIFdlbGxzIDxrZXZpbi53ZWxsc0BueHAuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOWFAgU2VtaWNvbmR1Y3RvcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX01FTU9SWV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKworLyoKKyAqIFBoeXNpY2FsIERSQU0gb2Zmc2V0IG9mIGJhbmsgMAorICovCisjZGVmaW5lIFBIWVNfT0ZGU0VUCVVMKDB4ODAwMDAwMDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1scGMzMnh4L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oIGIvYXJjaC9hcm0vbWFjaC1scGMzMnh4L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZWE4ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWxwYzMyeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKQEAgLTAsMCArMSw2OTQgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWxwYzMyeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKKyAqCisgKiBBdXRob3I6IEtldmluIFdlbGxzIDxrZXZpbi53ZWxsc0BueHAuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOWFAgU2VtaWNvbmR1Y3RvcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1BMQVRGT1JNX0gKKyNkZWZpbmUgX19BU01fQVJDSF9QTEFURk9STV9ICisKKyNkZWZpbmUgX1NCRihmLCB2KQkJCQkoKHYpIDw8IChmKSkKKyNkZWZpbmUgX0JJVChuKQkJCQkJX1NCRihuLCAxKQorCisvKgorICogQUhCIDAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzZXMKKyAqLworI2RlZmluZSBMUEMzMlhYX1NMQ19CQVNFCQkJMHgyMDAyMDAwMAorI2RlZmluZSBMUEMzMlhYX1NTUDBfQkFTRQkJCTB4MjAwODQwMDAKKyNkZWZpbmUgTFBDMzJYWF9TUEkxX0JBU0UJCQkweDIwMDg4MDAwCisjZGVmaW5lIExQQzMyWFhfU1NQMV9CQVNFCQkJMHgyMDA4QzAwMAorI2RlZmluZSBMUEMzMlhYX1NQSTJfQkFTRQkJCTB4MjAwOTAwMDAKKyNkZWZpbmUgTFBDMzJYWF9JMlMwX0JBU0UJCQkweDIwMDk0MDAwCisjZGVmaW5lIExQQzMyWFhfU0RfQkFTRQkJCQkweDIwMDk4MDAwCisjZGVmaW5lIExQQzMyWFhfSTJTMV9CQVNFCQkJMHgyMDA5QzAwMAorI2RlZmluZSBMUEMzMlhYX01MQ19CQVNFCQkJMHgyMDBBODAwMAorI2RlZmluZSBMUEMzMlhYX0FIQjBfU1RBUlQJCQlMUEMzMlhYX1NMQ19CQVNFCisjZGVmaW5lIExQQzMyWFhfQUhCMF9TSVpFCQkJMHgwMDA4OTAwMAorCisvKgorICogQUhCIDEgcGh5c2ljYWwgYmFzZSBhZGRyZXNzZXMKKyAqLworI2RlZmluZSBMUEMzMlhYX0RNQV9CQVNFCQkJMHgzMTAwMDAwMAorI2RlZmluZSBMUEMzMlhYX1VTQl9CQVNFCQkJMHgzMTAyMDAwMAorI2RlZmluZSBMUEMzMlhYX1VTQkhfQkFTRQkJCTB4MzEwMjAwMDAKKyNkZWZpbmUgTFBDMzJYWF9VU0JfT1RHX0JBU0UJCQkweDMxMDIwMDAwCisjZGVmaW5lIExQQzMyWFhfT1RHX0kyQ19CQVNFCQkJMHgzMTAyMDMwMAorI2RlZmluZSBMUEMzMlhYX0xDRF9CQVNFCQkJMHgzMTA0MDAwMAorI2RlZmluZSBMUEMzMlhYX0VUSEVSTkVUX0JBU0UJCQkweDMxMDYwMDAwCisjZGVmaW5lIExQQzMyWFhfRU1DX0JBU0UJCQkweDMxMDgwMDAwCisjZGVmaW5lIExQQzMyWFhfRVRCX0NGR19CQVNFCQkJMHgzMTBDMDAwMAorI2RlZmluZSBMUEMzMlhYX0VUQl9EQVRBX0JBU0UJCQkweDMxMEUwMDAwCisjZGVmaW5lIExQQzMyWFhfQUhCMV9TVEFSVAkJCUxQQzMyWFhfRE1BX0JBU0UKKyNkZWZpbmUgTFBDMzJYWF9BSEIxX1NJWkUJCQkweDAwMEUxMDAwCisKKy8qCisgKiBGQUIgcGh5c2ljYWwgYmFzZSBhZGRyZXNzZXMKKyAqLworI2RlZmluZSBMUEMzMlhYX0NMS19QTV9CQVNFCQkJMHg0MDAwNDAwMAorI2RlZmluZSBMUEMzMlhYX01JQ19CQVNFCQkJMHg0MDAwODAwMAorI2RlZmluZSBMUEMzMlhYX1NJQzFfQkFTRQkJCTB4NDAwMEMwMDAKKyNkZWZpbmUgTFBDMzJYWF9TSUMyX0JBU0UJCQkweDQwMDEwMDAwCisjZGVmaW5lIExQQzMyWFhfSFNfVUFSVDFfQkFTRQkJCTB4NDAwMTQwMDAKKyNkZWZpbmUgTFBDMzJYWF9IU19VQVJUMl9CQVNFCQkJMHg0MDAxODAwMAorI2RlZmluZSBMUEMzMlhYX0hTX1VBUlQ3X0JBU0UJCQkweDQwMDFDMDAwCisjZGVmaW5lIExQQzMyWFhfUlRDX0JBU0UJCQkweDQwMDI0MDAwCisjZGVmaW5lIExQQzMyWFhfUlRDX1JBTV9CQVNFCQkJMHg0MDAyNDA4MAorI2RlZmluZSBMUEMzMlhYX0dQSU9fQkFTRQkJCTB4NDAwMjgwMDAKKyNkZWZpbmUgTFBDMzJYWF9QV00zX0JBU0UJCQkweDQwMDJDMDAwCisjZGVmaW5lIExQQzMyWFhfUFdNNF9CQVNFCQkJMHg0MDAzMDAwMAorI2RlZmluZSBMUEMzMlhYX01TVElNX0JBU0UJCQkweDQwMDM0MDAwCisjZGVmaW5lIExQQzMyWFhfSFNUSU1fQkFTRQkJCTB4NDAwMzgwMDAKKyNkZWZpbmUgTFBDMzJYWF9XRFRJTV9CQVNFCQkJMHg0MDAzQzAwMAorI2RlZmluZSBMUEMzMlhYX0RFQlVHX0NUUkxfQkFTRQkJCTB4NDAwNDAwMDAKKyNkZWZpbmUgTFBDMzJYWF9USU1FUjBfQkFTRQkJCTB4NDAwNDQwMDAKKyNkZWZpbmUgTFBDMzJYWF9BRENfQkFTRQkJCTB4NDAwNDgwMDAKKyNkZWZpbmUgTFBDMzJYWF9USU1FUjFfQkFTRQkJCTB4NDAwNEMwMDAKKyNkZWZpbmUgTFBDMzJYWF9LU0NBTl9CQVNFCQkJMHg0MDA1MDAwMAorI2RlZmluZSBMUEMzMlhYX1VBUlRfQ1RSTF9CQVNFCQkJMHg0MDA1NDAwMAorI2RlZmluZSBMUEMzMlhYX1RJTUVSMl9CQVNFCQkJMHg0MDA1ODAwMAorI2RlZmluZSBMUEMzMlhYX1BXTTFfQkFTRQkJCTB4NDAwNUMwMDAKKyNkZWZpbmUgTFBDMzJYWF9QV00yX0JBU0UJCQkweDQwMDVDMDA0CisjZGVmaW5lIExQQzMyWFhfVElNRVIzX0JBU0UJCQkweDQwMDYwMDAwCisKKy8qCisgKiBBUEIgcGh5c2ljYWwgYmFzZSBhZGRyZXNzZXMKKyAqLworI2RlZmluZSBMUEMzMlhYX1VBUlQzX0JBU0UJCQkweDQwMDgwMDAwCisjZGVmaW5lIExQQzMyWFhfVUFSVDRfQkFTRQkJCTB4NDAwODgwMDAKKyNkZWZpbmUgTFBDMzJYWF9VQVJUNV9CQVNFCQkJMHg0MDA5MDAwMAorI2RlZmluZSBMUEMzMlhYX1VBUlQ2X0JBU0UJCQkweDQwMDk4MDAwCisjZGVmaW5lIExQQzMyWFhfSTJDMV9CQVNFCQkJMHg0MDBBMDAwMAorI2RlZmluZSBMUEMzMlhYX0kyQzJfQkFTRQkJCTB4NDAwQTgwMDAKKworLyoKKyAqIEZBQiBhbmQgQVBCIGJhc2UgYW5kIHNpemluZworICovCisjZGVmaW5lIExQQzMyWFhfRkFCQVBCX1NUQVJUCQkJTFBDMzJYWF9DTEtfUE1fQkFTRQorI2RlZmluZSBMUEMzMlhYX0ZBQkFQQl9TSVpFCQkJMHgwMDBBNTAwMAorCisvKgorICogSW50ZXJuYWwgbWVtb3J5IGJhc2VzIGFuZCBzaXplcworICovCisjZGVmaW5lIExQQzMyWFhfSVJBTV9CQVNFCQkJMHgwODAwMDAwMAorI2RlZmluZSBMUEMzMlhYX0lST01fQkFTRQkJCTB4MEMwMDAwMDAKKworLyoKKyAqIEV4dGVybmFsIFN0YXRpYyBNZW1vcnkgQmFuayBBZGRyZXNzIFNwYWNlIEJhc2VzCisgKi8KKyNkZWZpbmUgTFBDMzJYWF9FTUNfQ1MwX0JBU0UJCQkweEUwMDAwMDAwCisjZGVmaW5lIExQQzMyWFhfRU1DX0NTMV9CQVNFCQkJMHhFMTAwMDAwMAorI2RlZmluZSBMUEMzMlhYX0VNQ19DUzJfQkFTRQkJCTB4RTIwMDAwMDAKKyNkZWZpbmUgTFBDMzJYWF9FTUNfQ1MzX0JBU0UJCQkweEUzMDAwMDAwCisKKy8qCisgKiBFeHRlcm5hbCBTRFJBTSBNZW1vcnkgQmFuayBBZGRyZXNzIFNwYWNlIEJhc2VzCisgKi8KKyNkZWZpbmUgTFBDMzJYWF9FTUNfRFlDUzBfQkFTRQkJCTB4ODAwMDAwMDAKKyNkZWZpbmUgTFBDMzJYWF9FTUNfRFlDUzFfQkFTRQkJCTB4QTAwMDAwMDAKKworLyoKKyAqIENsb2NrIGFuZCBjcnlzdGFsIGluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgTFBDMzJYWF9NQUlOX09TQ19GUkVRCQkJMTMwMDAwMDAKKyNkZWZpbmUgTFBDMzJYWF9DTE9DS19PU0NfRlJFUQkJCTMyNzY4CisKKy8qCisgKiBDbG9jayBhbmQgUG93ZXIgY29udHJvbCByZWdpc3RlciBvZmZzZXRzCisgKi8KKyNkZWZpbmUgX1BNUkVHKHgpCQkJCWlvX3AydihMUEMzMlhYX0NMS19QTV9CQVNFICtcCisJCQkJCQkoeCkpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0RFQlVHX0NUUkwJCV9QTVJFRygweDAwMCkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfQk9PVE1BUAkJCV9QTVJFRygweDAxNCkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfUDAxX0VSCQkJX1BNUkVHKDB4MDE4KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9VU0JDTEtfUERJVgkJX1BNUkVHKDB4MDFDKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9JTlRfRVIJCQlfUE1SRUcoMHgwMjApCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0lOVF9SUwkJCV9QTVJFRygweDAyNCkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfSU5UX1NSCQkJX1BNUkVHKDB4MDI4KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9JTlRfQVAJCQlfUE1SRUcoMHgwMkMpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1BJTl9FUgkJCV9QTVJFRygweDAzMCkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfUElOX1JTCQkJX1BNUkVHKDB4MDM0KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9QSU5fU1IJCQlfUE1SRUcoMHgwMzgpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1BJTl9BUAkJCV9QTVJFRygweDAzQykKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfSENMS19ESVYJCQlfUE1SRUcoMHgwNDApCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1BXUl9DVFJMCQkJX1BNUkVHKDB4MDQ0KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9QTEwzOTdfQ1RSTAkJX1BNUkVHKDB4MDQ4KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9NQUlOX09TQ19DVFJMCQlfUE1SRUcoMHgwNEMpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1NZU0NMS19DVFJMCQlfUE1SRUcoMHgwNTApCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0xDRENMS19DVFJMCQlfUE1SRUcoMHgwNTQpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0hDTEtQTExfQ1RSTAkJX1BNUkVHKDB4MDU4KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9BRENfQ0xLX0NUUkxfMQkJX1BNUkVHKDB4MDYwKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9VU0JfQ1RSTAkJCV9QTVJFRygweDA2NCkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfU0RSQU1DTEtfQ1RSTAkJX1BNUkVHKDB4MDY4KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9ERFJfTEFQX05PTQkJX1BNUkVHKDB4MDZDKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9ERFJfTEFQX0NPVU5UCQlfUE1SRUcoMHgwNzApCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0REUl9MQVBfREVMQVkJCV9QTVJFRygweDA3NCkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfU1NQX0NMS19DVFJMCQlfUE1SRUcoMHgwNzgpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0kyU19DTEtfQ1RSTAkJX1BNUkVHKDB4MDdDKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9NU19DVFJMCQkJX1BNUkVHKDB4MDgwKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9NQUNDTEtfQ1RSTAkJX1BNUkVHKDB4MDkwKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9URVNUX0NMS19TRUwJCV9QTVJFRygweDBBNCkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfU0ZXX0lOVAkJCV9QTVJFRygweDBBOCkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfSTJDX0NMS19DVFJMCQlfUE1SRUcoMHgwQUMpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0tFWV9DTEtfQ1RSTAkJX1BNUkVHKDB4MEIwKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9BRENfQ0xLX0NUUkwJCV9QTVJFRygweDBCNCkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfUFdNX0NMS19DVFJMCQlfUE1SRUcoMHgwQjgpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1RJTUVSX0NMS19DVFJMCQlfUE1SRUcoMHgwQkMpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1RJTUVSU19QV01TX0NMS19DVFJMXzEJX1BNUkVHKDB4MEMwKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9TUElfQ0xLX0NUUkwJCV9QTVJFRygweDBDNCkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfTkFORF9DTEtfQ1RSTAkJX1BNUkVHKDB4MEM4KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9VQVJUM19DTEtfQ1RSTAkJX1BNUkVHKDB4MEQwKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9VQVJUNF9DTEtfQ1RSTAkJX1BNUkVHKDB4MEQ0KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9VQVJUNV9DTEtfQ1RSTAkJX1BNUkVHKDB4MEQ4KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9VQVJUNl9DTEtfQ1RSTAkJX1BNUkVHKDB4MERDKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9JUkRBX0NMS19DVFJMCQlfUE1SRUcoMHgwRTApCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1VBUlRfQ0xLX0NUUkwJCV9QTVJFRygweDBFNCkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfRE1BX0NMS19DVFJMCQlfUE1SRUcoMHgwRTgpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0FVVE9DTE9DSwkJX1BNUkVHKDB4MEVDKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9ERVZJRCh4KQkJCV9QTVJFRygweDEzMCArICh4KSkKKworLyoKKyAqIGNsa3B3cl9kZWJ1Z19jdHJsIHJlZ2lzdGVyIGRlZmluaXRpb25zCisqLworI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9WRlBfQ0xPQ0tfRU5BQkxFX0JJVAlfQklUKDQpCisKKy8qCisgKiBjbGtwd3JfYm9vdG1hcCByZWdpc3RlciBkZWZpbml0aW9ucworICovCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0JPT1RNQVBfU0VMX0JJVAkJX0JJVCgxKQorCisvKgorICogY2xrcHdyX3N0YXJ0X2dwaW8gcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfR1BJT1NSQ19QMUlPMjNfQklUCV9CSVQoMzEpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0dQSU9TUkNfUDFJTzIyX0JJVAlfQklUKDMwKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9HUElPU1JDX1AxSU8yMV9CSVQJX0JJVCgyOSkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfR1BJT1NSQ19QMUlPMjBfQklUCV9CSVQoMjgpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0dQSU9TUkNfUDFJTzE5X0JJVAlfQklUKDI3KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9HUElPU1JDX1AxSU8xOF9CSVQJX0JJVCgyNikKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfR1BJT1NSQ19QMUlPMTdfQklUCV9CSVQoMjUpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0dQSU9TUkNfUDFJTzE2X0JJVAlfQklUKDI0KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9HUElPU1JDX1AxSU8xNV9CSVQJX0JJVCgyMykKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfR1BJT1NSQ19QMUlPMTRfQklUCV9CSVQoMjIpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0dQSU9TUkNfUDFJTzEzX0JJVAlfQklUKDIxKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9HUElPU1JDX1AxSU8xMl9CSVQJX0JJVCgyMCkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfR1BJT1NSQ19QMUlPMTFfQklUCV9CSVQoMTkpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0dQSU9TUkNfUDFJTzEwX0JJVAlfQklUKDE4KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9HUElPU1JDX1AxSU85X0JJVAlfQklUKDE3KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9HUElPU1JDX1AxSU84X0JJVAlfQklUKDE2KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9HUElPU1JDX1AxSU83X0JJVAlfQklUKDE1KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9HUElPU1JDX1AxSU82X0JJVAlfQklUKDE0KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9HUElPU1JDX1AxSU81X0JJVAlfQklUKDEzKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9HUElPU1JDX1AxSU80X0JJVAlfQklUKDEyKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9HUElPU1JDX1AxSU8zX0JJVAlfQklUKDExKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9HUElPU1JDX1AxSU8yX0JJVAlfQklUKDEwKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9HUElPU1JDX1AxSU8xX0JJVAlfQklUKDkpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0dQSU9TUkNfUDFJTzBfQklUCV9CSVQoOCkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfR1BJT1NSQ19QMElPN19CSVQJX0JJVCg3KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9HUElPU1JDX1AwSU82X0JJVAlfQklUKDYpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0dQSU9TUkNfUDBJTzVfQklUCV9CSVQoNSkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfR1BJT1NSQ19QMElPNF9CSVQJX0JJVCg0KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9HUElPU1JDX1AwSU8zX0JJVAlfQklUKDMpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0dQSU9TUkNfUDBJTzJfQklUCV9CSVQoMikKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfR1BJT1NSQ19QMElPMV9CSVQJX0JJVCgxKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9HUElPU1JDX1AwSU8wX0JJVAlfQklUKDApCisKKy8qCisgKiBjbGtwd3JfdXNiY2xrX3BkaXYgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9VU0JQRElWX1BMTF9NQVNLCQkweEYKKworLyoKKyAqIGNsa3B3cl9zdGFydF9pbnQsIGNsa3B3cl9zdGFydF9yYXdfc3RzX2ludCwgY2xrcHdyX3N0YXJ0X3N0c19pbnQsCisgKiBjbGtwd3Jfc3RhcnRfcG9sX2ludCwgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfSU5UU1JDX0FEQ19CSVQJCV9CSVQoMzEpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0lOVFNSQ19UU19QX0JJVAkJX0JJVCgzMCkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfSU5UU1JDX1RTX0FVWF9CSVQJX0JJVCgyOSkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfSU5UU1JDX1VTQkFITkVFRENMS19CSVQJX0JJVCgyNikKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfSU5UU1JDX01TVElNRVJfQklUCV9CSVQoMjUpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0lOVFNSQ19SVENfQklUCQlfQklUKDI0KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9JTlRTUkNfVVNCTkVFRENMS19CSVQJX0JJVCgyMykKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfSU5UU1JDX1VTQl9CSVQJCV9CSVQoMjIpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0lOVFNSQ19JMkNfQklUCQlfQklUKDIxKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9JTlRTUkNfVVNCT1RHVElNRVJfQklUCV9CSVQoMjApCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0lOVFNSQ19VU0JBVFhJTlRfQklUCV9CSVQoMTkpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0lOVFNSQ19LRVlfQklUCQlfQklUKDE2KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9JTlRTUkNfTUFDX0JJVAkJX0JJVCg3KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9JTlRTUkNfUDBQMV9CSVQJCV9CSVQoNikKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfSU5UU1JDX0dQSU9fMDVfQklUCV9CSVQoNSkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfSU5UU1JDX0dQSU9fMDRfQklUCV9CSVQoNCkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfSU5UU1JDX0dQSU9fMDNfQklUCV9CSVQoMykKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfSU5UU1JDX0dQSU9fMDJfQklUCV9CSVQoMikKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfSU5UU1JDX0dQSU9fMDFfQklUCV9CSVQoMSkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfSU5UU1JDX0dQSU9fMDBfQklUCV9CSVQoMCkKKworLyoKKyAqIGNsa3B3cl9zdGFydF9waW4sIGNsa3B3cl9zdGFydF9yYXdfc3RzX3BpbiwgY2xrcHdyX3N0YXJ0X3N0c19waW4sCisgKiBjbGtwd3Jfc3RhcnRfcG9sX3BpbiByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9FWFRTUkNfVTdfUlhfQklUCQlfQklUKDMxKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9FWFRTUkNfVTdfSENUU19CSVQJX0JJVCgzMCkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfRVhUU1JDX1U2X0lSUlhfQklUCV9CSVQoMjgpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0VYVFNSQ19VNV9SWF9CSVQJCV9CSVQoMjYpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0VYVFNSQ19HUElfMjhfQklUCV9CSVQoMjUpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0VYVFNSQ19VM19SWF9CSVQJCV9CSVQoMjQpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0VYVFNSQ19VMl9IQ1RTX0JJVAlfQklUKDIzKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9FWFRTUkNfVTJfUlhfQklUCQlfQklUKDIyKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9FWFRTUkNfVTFfUlhfQklUCQlfQklUKDIxKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9FWFRTUkNfTVNESU9fSU5UX0JJVAlfQklUKDE4KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9FWFRTUkNfTVNESU9fU1JUX0JJVAlfQklUKDE3KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9FWFRTUkNfR1BJXzA2X0JJVAlfQklUKDE2KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9FWFRTUkNfR1BJXzA1X0JJVAlfQklUKDE1KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9FWFRTUkNfR1BJXzA0X0JJVAlfQklUKDE0KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9FWFRTUkNfR1BJXzAzX0JJVAlfQklUKDEzKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9FWFRTUkNfR1BJXzAyX0JJVAlfQklUKDEyKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9FWFRTUkNfR1BJXzAxX0JJVAlfQklUKDExKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9FWFRTUkNfR1BJXzAwX0JJVAlfQklUKDEwKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9FWFRTUkNfU1lTQ0xLRU5fQklUCV9CSVQoOSkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfRVhUU1JDX1NQSTFfREFUSU5fQklUCV9CSVQoOCkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfRVhUU1JDX0dQSV8wN19CSVQJX0JJVCg3KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9FWFRTUkNfU1BJMl9EQVRJTl9CSVQJX0JJVCg2KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9FWFRTUkNfR1BJXzE5X0JJVAlfQklUKDUpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0VYVFNSQ19HUElfMDlfQklUCV9CSVQoNCkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfRVhUU1JDX0dQSV8wOF9CSVQJX0JJVCgzKQorCisvKgorICogY2xrcHdyX2hjbGtfZGl2IHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfSENMS0RJVl9ERFJDTEtfU1RPUAkoMHgwIDw8IDcpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0hDTEtESVZfRERSQ0xLX05PUk0JKDB4MSA8PCA3KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9IQ0xLRElWX0REUkNMS19IQUxGCSgweDIgPDwgNykKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfSENMS0RJVl9QQ0xLX0RJVihuKQkoKChuKSAmIDB4MUYpIDw8IDIpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0hDTEtESVZfRElWXzJQT1cobikJKChuKSAmIDB4MykKKworLyoKKyAqIGNsa3B3cl9wd3JfY3RybCByZWdpc3RlciBkZWZpbml0aW9ucworICovCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0NUUkxfRk9SQ0VfUENMSwkJX0JJVCgxMCkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfU0RSQU1fU0VMRl9SRlNICQlfQklUKDkpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1VQRF9TRFJBTV9TRUxGX1JGU0gJX0JJVCg4KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9BVVRPX1NEUkFNX1NFTEZfUkZTSAlfQklUKDcpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0hJR0hDT1JFX1NUQVRFX0JJVAlfQklUKDUpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1NZU0NMS0VOX1NUQVRFX0JJVAlfQklUKDQpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1NZU0NMS0VOX0dQSU9fRU4JCV9CSVQoMykKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfU0VMRUNUX1JVTl9NT0RFCQlfQklUKDIpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0hJR0hDT1JFX0dQSU9fRU4JCV9CSVQoMSkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfU1RPUF9NT0RFX0NUUkwJCV9CSVQoMCkKKworLyoKKyAqIGNsa3B3cl9wbGwzOTdfY3RybCByZWdpc3RlciBkZWZpbml0aW9ucworICovCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1BMTDM5N19NU0xPQ0tfU1RTCV9CSVQoMTApCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1BMTDM5N19CWVBBU1MJCV9CSVQoOSkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfUExMMzk3X0JJQVNfTk9STQkJMHgwMDAKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfUExMMzk3X0JJQVNfTjEyXzUJMHgwNDAKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfUExMMzk3X0JJQVNfTjI1CQkweDA4MAorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9QTEwzOTdfQklBU19OMzdfNQkweDBDMAorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9QTEwzOTdfQklBU19QMTJfNQkweDEwMAorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9QTEwzOTdfQklBU19QMjUJCTB4MTQwCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1BMTDM5N19CSUFTX1AzN181CTB4MTgwCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1BMTDM5N19CSUFTX1A1MAkJMHgxQzAKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfUExMMzk3X0JJQVNfTUFTSwkJMHgxQzAKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfU1lTQ1RSTF9QTEwzOTdfRElTCV9CSVQoMSkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfU1lTQ1RSTF9QTEwzOTdfU1RTCV9CSVQoMCkKKworLyoKKyAqIGNsa3B3cl9tYWluX29zY19jdHJsIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfTU9TQ19BRERfQ0FQKG4pCQkoKChuKSAmIDB4N0YpIDw8IDIpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX01PU0NfQ0FQX01BU0sJCSgweDdGIDw8IDIpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1RFU1RfTU9ERQkJX0JJVCgxKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9NT1NDX0RJU0FCTEUJCV9CSVQoMCkKKworLyoKKyAqIGNsa3B3cl9zeXNjbGtfY3RybCByZWdpc3RlciBkZWZpbml0aW9ucworICovCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1NZU0NUUkxfQlBfVFJJRyhuKQkoKChuKSAmIDB4M0ZGKSA8PCAyKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9TWVNDVFJMX0JQX01BU0sJCSgweDNGRiA8PCAyKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9TWVNDVFJMX1VTRVBMTDM5NwlfQklUKDEpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1NZU0NUUkxfU1lTQ0xLTVVYCV9CSVQoMCkKKworLyoKKyAqIGNsa3B3cl9sY2RjbGtfY3RybCByZWdpc3RlciBkZWZpbml0aW9ucworICovCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0xDRENUUkxfTENEVFlQRV9URlQxMgkweDAwMAorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9MQ0RDVFJMX0xDRFRZUEVfVEZUMTYJMHgwNDAKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfTENEQ1RSTF9MQ0RUWVBFX1RGVDE1CTB4MDgwCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0xDRENUUkxfTENEVFlQRV9URlQyNAkweDBDMAorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9MQ0RDVFJMX0xDRFRZUEVfU1RONE0JMHgxMDAKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfTENEQ1RSTF9MQ0RUWVBFX1NUTjhDCTB4MTQwCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0xDRENUUkxfTENEVFlQRV9EU1RONE0JMHgxODAKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfTENEQ1RSTF9MQ0RUWVBFX0RTVE44QwkweDFDMAorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9MQ0RDVFJMX0xDRFRZUEVfTVNLCTB4MDFDMAorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9MQ0RDVFJMX0NMS19FTgkJMHgwMjAKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfTENEQ1RSTF9TRVRfUFNDQUxFKG4pCSgobiAtIDEpICYgMHgxRikKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfTENEQ1RSTF9QU0NBTEVfTVNLCTB4MDAxRgorCisvKgorICogY2xrcHdyX2hjbGtwbGxfY3RybCByZWdpc3RlciBkZWZpbml0aW9ucworICovCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0hDTEtQTExfUE9XRVJfVVAJCV9CSVQoMTYpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0hDTEtQTExfQ0NPX0JZUEFTUwlfQklUKDE1KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9IQ0xLUExMX1BPU1RESVZfQllQQVNTCV9CSVQoMTQpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0hDTEtQTExfRkRCS19TRUxfRkNMSwlfQklUKDEzKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9IQ0xLUExMX1BPU1RESVZfMlBPVyhuKQkoKChuKSAmIDB4MykgPDwgMTEpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0hDTEtQTExfUFJFRElWX1BMVVMxKG4pCSgoKG4pICYgMHgzKSA8PCA5KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9IQ0xLUExMX1BMTE0obikJCSgoKG4pICYgMHhGRikgPDwgMSkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfSENMS1BMTF9QTExfU1RTCQlfQklUKDApCisKKy8qCisgKiBjbGtwd3JfYWRjX2Nsa19jdHJsXzEgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9BRENDVFJMMV9SVERJVihuKQkoKChuKSAmIDB4RkYpIDw8IDApCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0FEQ0NUUkwxX1BDTEtfU0VMCV9CSVQoOCkKKworLyoKKyAqIGNsa3B3cl91c2JfY3RybCByZWdpc3RlciBkZWZpbml0aW9ucworICovCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1VTQkNUUkxfSENMS19FTgkJX0JJVCgyNCkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfVVNCQ1RSTF9VU0JJMkNfRU4JX0JJVCgyMykKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfVVNCQ1RSTF9VU0JEVk5EX0VOCV9CSVQoMjIpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1VTQkNUUkxfVVNCSFNUTkRfRU4JX0JJVCgyMSkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfVVNCQ1RSTF9QVV9BREQJCSgweDAgPDwgMTkpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1VTQkNUUkxfQlVTX0tFRVBFUgkoMHgxIDw8IDE5KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9VU0JDVFJMX1BEX0FERAkJKDB4MyA8PCAxOSkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfVVNCQ1RSTF9DTEtfRU4yCQlfQklUKDE4KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9VU0JDVFJMX0NMS19FTjEJCV9CSVQoMTcpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1VTQkNUUkxfUExMX1BXUlVQCV9CSVQoMTYpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1VTQkNUUkxfQ0NPX0JZUEFTUwlfQklUKDE1KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9VU0JDVFJMX1BPU1RESVZfQllQQVNTCV9CSVQoMTQpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1VTQkNUUkxfRkRCS19TRUxfRkNMSwlfQklUKDEzKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9VU0JDVFJMX1BPU1RESVZfMlBPVyhuKQkoKChuKSAmIDB4MykgPDwgMTEpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1VTQkNUUkxfUFJFRElWX1BMVVMxKG4pCSgoKG4pICYgMHgzKSA8PCA5KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9VU0JDVFJMX0ZEQktfUExVUzEobikJKCgobikgJiAweEZGKSA8PCAxKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9VU0JDVFJMX1BMTF9TVFMJCV9CSVQoMCkKKworLyoKKyAqIGNsa3B3cl9zZHJhbWNsa19jdHJsIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfU0RSQ0xLX0ZBU1RTTEVXX0NMSwlfQklUKDIyKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9TRFJDTEtfRkFTVFNMRVcJCV9CSVQoMjEpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1NEUkNMS19GQVNUU0xFV19EQVQJX0JJVCgyMCkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfU0RSQ0xLX1NXX0REUl9SRVNFVAlfQklUKDE5KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9TRFJDTEtfSENMS19ETFkobikJKCgobikgJiAweDFGKSA8PCAxNCkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfU0RSQ0xLX0RMWV9BRERSX1NUUwlfQklUKDEzKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9TRFJDTEtfU0VOU19GQUNUKG4pCSgoKG4pICYgMHg3KSA8PCAxMCkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfU0RSQ0xLX1VTRV9DQUwJCV9CSVQoOSkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfU0RSQ0xLX0RPX0NBTAkJX0JJVCg4KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9TRFJDTEtfQ0FMX09OX1JUQwlfQklUKDcpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1NEUkNMS19EUVNfRExZKG4pCSgoKG4pICYgMHgxRikgPDwgMikKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfU0RSQ0xLX1VTRV9ERFIJCV9CSVQoMSkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfU0RSQ0xLX0NMS19ESVMJCV9CSVQoMCkKKworLyoKKyAqIGNsa3B3cl9zc3BfYmxrX2N0cmwgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9TU1BDVFJMX0RNQV9TU1AxUlgJX0JJVCg1KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9TU1BDVFJMX0RNQV9TU1AxVFgJX0JJVCg0KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9TU1BDVFJMX0RNQV9TU1AwUlgJX0JJVCgzKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9TU1BDVFJMX0RNQV9TU1AwVFgJX0JJVCgyKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9TU1BDVFJMX1NTUENMSzFfRU4JX0JJVCgxKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9TU1BDVFJMX1NTUENMSzBfRU4JX0JJVCgwKQorCisvKgorICogY2xrcHdyX2kyc19jbGtfY3RybCByZWdpc3RlciBkZWZpbml0aW9ucworICovCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0kyU0NUUkxfSTJTMV9SWF9GT1JfVFgJX0JJVCg2KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9JMlNDVFJMX0kyUzFfVFhfRk9SX1JYCV9CSVQoNSkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfSTJTQ1RSTF9JMlMxX1VTRV9ETUEJX0JJVCg0KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9JMlNDVFJMX0kyUzBfUlhfRk9SX1RYCV9CSVQoMykKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfSTJTQ1RSTF9JMlMwX1RYX0ZPUl9SWAlfQklUKDIpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0kyU0NUUkxfSTJTQ0xLMV9FTglfQklUKDEpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0kyU0NUUkxfSTJTQ0xLMF9FTglfQklUKDApCisKKy8qCisgKiBjbGtwd3JfbXNfY3RybCByZWdpc3RlciBkZWZpbml0aW9ucworICovCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX01TQ0FSRF9NU0RJT19QSU5fRElTCV9CSVQoMTApCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX01TQ0FSRF9NU0RJT19QVV9FTglfQklUKDkpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX01TQ0FSRF9NU0RJTzIzX0RJUwlfQklUKDgpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX01TQ0FSRF9NU0RJTzFfRElTCV9CSVQoNykKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfTVNDQVJEX01TRElPMF9ESVMJX0JJVCg2KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9NU0NBUkRfU0RDQVJEX0VOCQlfQklUKDUpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX01TQ0FSRF9TRENBUkRfRElWKG4pCSgobikgJiAweEYpCisKKy8qCisgKiBjbGtwd3JfbWFjY2xrX2N0cmwgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9NQUNDVFJMX05PX0VORVRfUElTCTB4MDAKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfTUFDQ1RSTF9VU0VfTUlJX1BJTlMJMHgwOAorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9NQUNDVFJMX1VTRV9STUlJX1BJTlMJMHgxOAorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9NQUNDVFJMX1BJTlNfTVNLCQkweDE4CisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX01BQ0NUUkxfRE1BQ0xLX0VOCV9CSVQoMikKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfTUFDQ1RSTF9NTUlPQ0xLX0VOCV9CSVQoMSkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfTUFDQ1RSTF9IUkNDTEtfRU4JX0JJVCgwKQorCisvKgorICogY2xrcHdyX3Rlc3RfY2xrX3NlbCByZWdpc3RlciBkZWZpbml0aW9ucworICovCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1RFU1RDTEsxX1NFTF9QRVJDTEsJKDB4MCA8PCA1KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9URVNUQ0xLMV9TRUxfUlRDCQkoMHgxIDw8IDUpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1RFU1RDTEsxX1NFTF9NT1NDCSgweDIgPDwgNSkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfVEVTVENMSzFfU0VMX01BU0sJKDB4MyA8PCA1KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9URVNUQ0xLX1RFU1RDTEsxX0VOCV9CSVQoNCkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfVEVTVENMSzJfU0VMX0hDTEsJKDB4MCA8PCAxKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9URVNUQ0xLMl9TRUxfUEVSQ0xLCSgweDEgPDwgMSkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfVEVTVENMSzJfU0VMX1VTQkNMSwkoMHgyIDw8IDEpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1RFU1RDTEsyX1NFTF9NT1NDCSgweDUgPDwgMSkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfVEVTVENMSzJfU0VMX1BMTDM5NwkoMHg3IDw8IDEpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1RFU1RDTEsyX1NFTF9NQVNLCSgweDcgPDwgMSkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfVEVTVENMS19URVNUQ0xLMl9FTglfQklUKDApCisKKy8qCisgKiBjbGtwd3Jfc3dfaW50IHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfU1dfSU5UKG4pCQkoX0JJVCgwKSB8ICgoKG4pICYgMHg3RikgPDwgMSkpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1NXX0dFVF9BUkcobikJCSgoKG4pICYgMHhGRSkgPj4gMSkKKworLyoKKyAqIGNsa3B3cl9pMmNfY2xrX2N0cmwgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9JMkNDTEtfVVNCSTJDSElfRFJJVkUJX0JJVCg0KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9JMkNDTEtfSTJDMkhJX0RSSVZFCV9CSVQoMykKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfSTJDQ0xLX0kyQzFISV9EUklWRQlfQklUKDIpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0kyQ0NMS19JMkMyQ0xLX0VOCV9CSVQoMSkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfSTJDQ0xLX0kyQzFDTEtfRU4JX0JJVCgwKQorCisvKgorICogY2xrcHdyX2tleV9jbGtfY3RybCByZWdpc3RlciBkZWZpbml0aW9ucworICovCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0tFWUNMS0NUUkxfQ0xLX0VOCTB4MQorCisvKgorICogY2xrcHdyX2FkY19jbGtfY3RybCByZWdpc3RlciBkZWZpbml0aW9ucworICovCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0FEQzMyQ0xLQ1RSTF9DTEtfRU4JMHgxCisKKy8qCisgKiBjbGtwd3JfcHdtX2Nsa19jdHJsIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfUFdNQ0xLX1BXTTJfRElWKG4pCSgoKG4pICYgMHhGKSA8PCA4KQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9QV01DTEtfUFdNMV9ESVYobikJKCgobikgJiAweEYpIDw8IDQpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1BXTUNMS19QV00yU0VMX1BDTEsJMHg4CisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1BXTUNMS19QV00yQ0xLX0VOCTB4NAorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9QV01DTEtfUFdNMVNFTF9QQ0xLCTB4MgorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9QV01DTEtfUFdNMUNMS19FTgkweDEKKworLyoKKyAqIGNsa3B3cl90aW1lcl9jbGtfY3RybCByZWdpc3RlciBkZWZpbml0aW9ucworICovCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1BXTUNMS19IU1RJTUVSX0VOCTB4MgorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9QV01DTEtfV0RPR19FTgkJMHgxCisKKy8qCisgKiBjbGtwd3JfdGltZXJzX3B3bXNfY2xrX2N0cmxfMSByZWdpc3RlciBkZWZpbml0aW9ucworICovCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1RNUlBXTUNMS19USU1FUjNfRU4JMHgyMAorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9UTVJQV01DTEtfVElNRVIyX0VOCTB4MTAKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfVE1SUFdNQ0xLX1RJTUVSMV9FTgkweDA4CisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1RNUlBXTUNMS19USU1FUjBfRU4JMHgwNAorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9UTVJQV01DTEtfUFdNNF9FTgkweDAyCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1RNUlBXTUNMS19QV00zX0VOCTB4MDEKKworLyoKKyAqIGNsa3B3cl9zcGlfY2xrX2N0cmwgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9TUElDTEtfU0VUX1NQSTJEQVRJTwkweDgwCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1NQSUNMS19TRVRfU1BJMkNMSwkweDQwCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1NQSUNMS19VU0VfU1BJMgkJMHgyMAorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9TUElDTEtfU1BJMkNMS19FTgkweDEwCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1NQSUNMS19TRVRfU1BJMURBVElPCTB4MDgKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfU1BJQ0xLX1NFVF9TUEkxQ0xLCTB4MDQKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfU1BJQ0xLX1VTRV9TUEkxCQkweDAyCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1NQSUNMS19TUEkxQ0xLX0VOCTB4MDEKKworLyoKKyAqIGNsa3B3cl9uYW5kX2Nsa19jdHJsIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfTkFORENMS19JTlRTRUxfTUxDCTB4MjAKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfTkFORENMS19ETUFfUk5CCQkweDEwCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX05BTkRDTEtfRE1BX0lOVAkJMHgwOAorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9OQU5EQ0xLX1NFTF9TTEMJCTB4MDQKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfTkFORENMS19NTENDTEtfRU4JMHgwMgorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9OQU5EQ0xLX1NMQ0NMS19FTgkweDAxCisKKy8qCisgKiBjbGtwd3JfdWFydDNfY2xrX2N0cmwsIGNsa3B3cl91YXJ0NF9jbGtfY3RybCwgY2xrcHdyX3VhcnQ1X2Nsa19jdHJsCisgKiBhbmQgY2xrcHdyX3VhcnQ2X2Nsa19jdHJsIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfVUFSVF9ZX0RJVih5KQkJKCh5KSAmIDB4RkYpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1VBUlRfWF9ESVYoeCkJCSgoKHgpICYgMHhGRikgPDwgOCkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfVUFSVF9VU0VfSENMSwkJX0JJVCgxNikKKworLyoKKyAqIGNsa3B3cl9pcmRhX2Nsa19jdHJsIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfSVJEQV9ZX0RJVih5KQkJKCh5KSAmIDB4RkYpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0lSREFfWF9ESVYoeCkJCSgoKHgpICYgMHhGRikgPDwgOCkKKworLyoKKyAqIGNsa3B3cl91YXJ0X2Nsa19jdHJsIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfVUFSVENMS0NUUkxfVUFSVDZfRU4JX0JJVCgzKQorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9VQVJUQ0xLQ1RSTF9VQVJUNV9FTglfQklUKDIpCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1VBUlRDTEtDVFJMX1VBUlQ0X0VOCV9CSVQoMSkKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfVUFSVENMS0NUUkxfVUFSVDNfRU4JX0JJVCgwKQorCisvKgorICogY2xrcHdyX2RtYWNsa19jdHJsIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfRE1BQ0xLQ1RSTF9DTEtfRU4JMHgxCisKKy8qCisgKiBjbGtwd3JfYXV0b2Nsb2NrIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfQVVUT0NMS19VU0JfRU4JCTB4NDAKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfQVVUT0NMS19JUkFNX0VOCQkweDAyCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX0FVVE9DTEtfSVJPTV9FTgkJMHgwMQorCisvKgorICogSW50ZXJydXB0IGNvbnRyb2xsZXIgcmVnaXN0ZXIgb2Zmc2V0cworICovCisjZGVmaW5lIExQQzMyWFhfSU5UQ19NQVNLKHgpCQkJaW9fcDJ2KCh4KSArIDB4MDApCisjZGVmaW5lIExQQzMyWFhfSU5UQ19SQVdfU1RBVCh4KQkJaW9fcDJ2KCh4KSArIDB4MDQpCisjZGVmaW5lIExQQzMyWFhfSU5UQ19TVEFUKHgpCQkJaW9fcDJ2KCh4KSArIDB4MDgpCisjZGVmaW5lIExQQzMyWFhfSU5UQ19QT0xBUih4KQkJCWlvX3AydigoeCkgKyAweDBDKQorI2RlZmluZSBMUEMzMlhYX0lOVENfQUNUX1RZUEUoeCkJCWlvX3AydigoeCkgKyAweDEwKQorI2RlZmluZSBMUEMzMlhYX0lOVENfVFlQRSh4KQkJCWlvX3AydigoeCkgKyAweDE0KQorCisvKgorICogVGltZXIvY291bnRlciByZWdpc3RlciBvZmZzZXRzCisgKi8KKyNkZWZpbmUgTENQMzJYWF9USU1FUl9JUih4KQkJCWlvX3AydigoeCkgKyAweDAwKQorI2RlZmluZSBMQ1AzMlhYX1RJTUVSX1RDUih4KQkJCWlvX3AydigoeCkgKyAweDA0KQorI2RlZmluZSBMQ1AzMlhYX1RJTUVSX1RDKHgpCQkJaW9fcDJ2KCh4KSArIDB4MDgpCisjZGVmaW5lIExDUDMyWFhfVElNRVJfUFIoeCkJCQlpb19wMnYoKHgpICsgMHgwQykKKyNkZWZpbmUgTENQMzJYWF9USU1FUl9QQyh4KQkJCWlvX3AydigoeCkgKyAweDEwKQorI2RlZmluZSBMQ1AzMlhYX1RJTUVSX01DUih4KQkJCWlvX3AydigoeCkgKyAweDE0KQorI2RlZmluZSBMQ1AzMlhYX1RJTUVSX01SMCh4KQkJCWlvX3AydigoeCkgKyAweDE4KQorI2RlZmluZSBMQ1AzMlhYX1RJTUVSX01SMSh4KQkJCWlvX3AydigoeCkgKyAweDFDKQorI2RlZmluZSBMQ1AzMlhYX1RJTUVSX01SMih4KQkJCWlvX3AydigoeCkgKyAweDIwKQorI2RlZmluZSBMQ1AzMlhYX1RJTUVSX01SMyh4KQkJCWlvX3AydigoeCkgKyAweDI0KQorI2RlZmluZSBMQ1AzMlhYX1RJTUVSX0NDUih4KQkJCWlvX3AydigoeCkgKyAweDI4KQorI2RlZmluZSBMQ1AzMlhYX1RJTUVSX0NSMCh4KQkJCWlvX3AydigoeCkgKyAweDJDKQorI2RlZmluZSBMQ1AzMlhYX1RJTUVSX0NSMSh4KQkJCWlvX3AydigoeCkgKyAweDMwKQorI2RlZmluZSBMQ1AzMlhYX1RJTUVSX0NSMih4KQkJCWlvX3AydigoeCkgKyAweDM0KQorI2RlZmluZSBMQ1AzMlhYX1RJTUVSX0NSMyh4KQkJCWlvX3AydigoeCkgKyAweDM4KQorI2RlZmluZSBMQ1AzMlhYX1RJTUVSX0VNUih4KQkJCWlvX3AydigoeCkgKyAweDNDKQorI2RlZmluZSBMQ1AzMlhYX1RJTUVSX0NUQ1IoeCkJCQlpb19wMnYoKHgpICsgMHg3MCkKKworLyoKKyAqIGlyIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgTENQMzJYWF9USU1FUl9DTlRSX01UQ0hfQklUKG4pCQkoMSA8PCAoKG4pICYgMHgzKSkKKyNkZWZpbmUgTENQMzJYWF9USU1FUl9DTlRSX0NBUFRfQklUKG4pCQkoMSA8PCAoNCArICgobikgJiAweDMpKSkKKworLyoKKyAqIHRjciByZWdpc3RlciBkZWZpbml0aW9ucworICovCisjZGVmaW5lIExDUDMyWFhfVElNRVJfQ05UUl9UQ1JfRU4JCTB4MQorI2RlZmluZSBMQ1AzMlhYX1RJTUVSX0NOVFJfVENSX1JFU0VUCQkweDIKKworLyoKKyAqIG1jciByZWdpc3RlciBkZWZpbml0aW9ucworICovCisjZGVmaW5lIExDUDMyWFhfVElNRVJfQ05UUl9NQ1JfTVRDSChuKQkJKDB4MSA8PCAoKG4pICogMykpCisjZGVmaW5lIExDUDMyWFhfVElNRVJfQ05UUl9NQ1JfUkVTRVQobikJCSgweDEgPDwgKCgobikgKiAzKSArIDEpKQorI2RlZmluZSBMQ1AzMlhYX1RJTUVSX0NOVFJfTUNSX1NUT1AobikJCSgweDEgPDwgKCgobikgKiAzKSArIDIpKQorCisvKgorICogU3RhbmRhcmQgVUFSVCByZWdpc3RlciBvZmZzZXRzCisgKi8KKyNkZWZpbmUgTFBDMzJYWF9VQVJUX0RMTF9GSUZPKHgpCQlpb19wMnYoKHgpICsgMHgwMCkKKyNkZWZpbmUgTFBDMzJYWF9VQVJUX0RMTV9JRVIoeCkJCQlpb19wMnYoKHgpICsgMHgwNCkKKyNkZWZpbmUgTFBDMzJYWF9VQVJUX0lJUl9GQ1IoeCkJCQlpb19wMnYoKHgpICsgMHgwOCkKKyNkZWZpbmUgTFBDMzJYWF9VQVJUX0xDUih4KQkJCWlvX3AydigoeCkgKyAweDBDKQorI2RlZmluZSBMUEMzMlhYX1VBUlRfTU9ERU1fQ1RSTCh4KQkJaW9fcDJ2KCh4KSArIDB4MTApCisjZGVmaW5lIExQQzMyWFhfVUFSVF9MU1IoeCkJCQlpb19wMnYoKHgpICsgMHgxNCkKKyNkZWZpbmUgTFBDMzJYWF9VQVJUX01PREVNX1NUQVRVUyh4KQkJaW9fcDJ2KCh4KSArIDB4MTgpCisjZGVmaW5lIExQQzMyWFhfVUFSVF9SWExFVih4KQkJCWlvX3AydigoeCkgKyAweDFDKQorCisvKgorICogVUFSVCBjb250cm9sIHN0cnVjdHVyZSBvZmZzZXRzCisgKi8KKyNkZWZpbmUgX1VDUkVHKHgpCQkJCWlvX3AydihcCisJCQkJCQlMUEMzMlhYX1VBUlRfQ1RSTF9CQVNFICsgKHgpKQorI2RlZmluZSBMUEMzMlhYX1VBUlRDVExfQ1RSTAkJCV9VQ1JFRygweDAwKQorI2RlZmluZSBMUEMzMlhYX1VBUlRDVExfQ0xLTU9ERQkJCV9VQ1JFRygweDA0KQorI2RlZmluZSBMUEMzMlhYX1VBUlRDVExfQ0xPT1AJCQlfVUNSRUcoMHgwOCkKKworLyoKKyAqIGN0cmwgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBMUEMzMlhYX1VBUlRfVTNfTURfQ1RSTF9FTgkJX0JJVCgxMSkKKyNkZWZpbmUgTFBDMzJYWF9VQVJUX0lSUlg2X0lOVl9FTgkJX0JJVCgxMCkKKyNkZWZpbmUgTFBDMzJYWF9VQVJUX0hEUFhfRU4JCQlfQklUKDkpCisjZGVmaW5lIExQQzMyWFhfVUFSVF9VQVJUNl9JUkRBTU9EX0JZUEFTUwlfQklUKDUpCisjZGVmaW5lIExQQzMyWFhfUlRfSVJUWDZfSU5WX0VOCQkJX0JJVCg0KQorI2RlZmluZSBMUEMzMlhYX1JUX0lSVFg2X0lOVl9NSVJfRU4JCV9CSVQoMykKKyNkZWZpbmUgTFBDMzJYWF9SVF9SWF9JUlBVTFNFXzNfMTZfMTE1SwkJX0JJVCgyKQorI2RlZmluZSBMUEMzMlhYX1JUX1RYX0lSUFVMU0VfM18xNl8xMTVLCQlfQklUKDEpCisjZGVmaW5lIExQQzMyWFhfVUFSVF9VNV9ST1VURV9UT19VU0IJCV9CSVQoMCkKKworLyoKKyAqIGNsa21vZGUgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBMUEMzMlhYX1VBUlRfRU5BQkxFRF9DTE9DS1MobikJCSgoKG4pID4+IDE2KSAmIDB4N0YpCisjZGVmaW5lIExQQzMyWFhfVUFSVF9FTkFCTEVEX0NMT0NLKG4sIHUpCSgoKG4pID4+ICgxNiArICh1KSkpICYgMHgxKQorI2RlZmluZSBMUEMzMlhYX1VBUlRfRU5BQkxFRF9DTEtTX0FOWQkJX0JJVCgxNCkKKyNkZWZpbmUgTFBDMzJYWF9VQVJUX0NMS01PREVfT0ZGCQkweDAKKyNkZWZpbmUgTFBDMzJYWF9VQVJUX0NMS01PREVfT04JCQkweDEKKyNkZWZpbmUgTFBDMzJYWF9VQVJUX0NMS01PREVfQVVUTwkJMHgyCisjZGVmaW5lIExQQzMyWFhfVUFSVF9DTEtNT0RFX01BU0sodSkJCSgweDMgPDwgKCgoKHUpIC0gMykgKiAyKSArIDQpKQorI2RlZmluZSBMUEMzMlhYX1VBUlRfQ0xLTU9ERV9MT0FEKG0sIHUpCQkoKG0pIDw8ICgoKCh1KSAtIDMpICogMikgKyA0KSkKKworLyoKKyAqIEdQSU8gTW9kdWxlIFJlZ2lzdGVyIG9mZnNldHMKKyAqLworI2RlZmluZSBfR1BSRUcoeCkJCQkJaW9fcDJ2KExQQzMyWFhfR1BJT19CQVNFICsgKHgpKQorI2RlZmluZSBMUEMzMlhYX0dQSU9fUF9NVVhfU0VUCQkJX0dQUkVHKDB4MTAwKQorI2RlZmluZSBMUEMzMlhYX0dQSU9fUF9NVVhfQ0xSCQkJX0dQUkVHKDB4MTA0KQorI2RlZmluZSBMUEMzMlhYX0dQSU9fUF9NVVhfU1RBVEUJCV9HUFJFRygweDEwOCkKKyNkZWZpbmUgTFBDMzJYWF9HUElPX1AzX01VWF9TRVQJCQlfR1BSRUcoMHgxMTApCisjZGVmaW5lIExQQzMyWFhfR1BJT19QM19NVVhfQ0xSCQkJX0dQUkVHKDB4MTE0KQorI2RlZmluZSBMUEMzMlhYX0dQSU9fUDNfTVVYX1NUQVRFCQlfR1BSRUcoMHgxMTgpCisjZGVmaW5lIExQQzMyWFhfR1BJT19QMF9NVVhfU0VUCQkJX0dQUkVHKDB4MTIwKQorI2RlZmluZSBMUEMzMlhYX0dQSU9fUDBfTVVYX0NMUgkJCV9HUFJFRygweDEyNCkKKyNkZWZpbmUgTFBDMzJYWF9HUElPX1AwX01VWF9TVEFURQkJX0dQUkVHKDB4MTI4KQorI2RlZmluZSBMUEMzMlhYX0dQSU9fUDFfTVVYX1NFVAkJCV9HUFJFRygweDEzMCkKKyNkZWZpbmUgTFBDMzJYWF9HUElPX1AxX01VWF9DTFIJCQlfR1BSRUcoMHgxMzQpCisjZGVmaW5lIExQQzMyWFhfR1BJT19QMV9NVVhfU1RBVEUJCV9HUFJFRygweDEzOCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxwYzMyeHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1scGMzMnh4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjNiMGRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1scGMzMnh4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMCwwICsxLDUyIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1scGMzMnh4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorICoKKyAqIEF1dGhvcjogS2V2aW4gV2VsbHMgPGtldmluLndlbGxzQG54cC5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5YUCBTZW1pY29uZHVjdG9ycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfU1lTVEVNX0gKKyNkZWZpbmUgX19BU01fQVJDSF9TWVNURU1fSAorCitzdGF0aWMgdm9pZCBhcmNoX2lkbGUodm9pZCkKK3sKKwljcHVfZG9faWRsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKK3sKKwlleHRlcm4gdm9pZCBscGMzMnh4X3dhdGNoZG9nX3Jlc2V0KHZvaWQpOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSAncyc6CisJY2FzZSAnaCc6CisJCXByaW50ayhLRVJOX0NSSVQgIlJFU0VUOiBSZWJvb3Rpbmcgc3lzdGVtXG4iKTsKKworCQkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KKwkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKworCQlscGMzMnh4X3dhdGNoZG9nX3Jlc2V0KCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyogRG8gbm90aGluZyAqLworCQlicmVhazsKKwl9CisKKwkvKiBXYWl0IGZvciB3YXRjaGRvZyB0byByZXNldCBzeXN0ZW0gKi8KKwl3aGlsZSAoMSkKKwkJOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9pbmNsdWRlL21hY2gvdGltZXguaCBiL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9pbmNsdWRlL21hY2gvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDQwNjZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1scGMzMnh4L2luY2x1ZGUvbWFjaC90aW1leC5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWxwYzMyeHgvaW5jbHVkZS9tYWNoL3RpbWV4LmgKKyAqCisgKiBBdXRob3I6IEtldmluIFdlbGxzIDxrZXZpbi53ZWxsc0BueHAuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOWFAgU2VtaWNvbmR1Y3RvcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1RJTUVYX0gKKyNkZWZpbmUgX19BU01fQVJDSF9USU1FWF9ICisKKy8qCisgKiBSYXRlIGluIEh6IG9mIHRoZSBtYWluIHN5c3RlbSBvc2NpbGxhdG9yLiBUaGlzIHZhbHVlIHNob3VsZCBtYXRjaAorICogdGhlIHZhbHVlICdNQUlOX09TQ19GUkVRJyBpbiBwbGF0Zm9ybS5oCisgKi8KKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCTEzMDAwMDAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1scGMzMnh4L2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9tYWNoLWxwYzMyeHgvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTQyNDg3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1scGMzMnh4L2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbHBjMzJ4eC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisgKgorICogQXV0aG9yOiBLZXZpbiBXZWxscyA8a2V2aW4ud2VsbHNAbnhwLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTlhQIFNlbWljb25kdWN0b3JzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19BU01fQVJNX0FSQ0hfVU5DT01QUkVTU19ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX1VOQ09NUFJFU1NfSAorCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3BsYXRmb3JtLmg+CisKKy8qCisgKiBVbmNvbXByZXNzIG91dHB1dCBpcyBoYXJkY29kZWQgdG8gc3RhbmRhcmQgVUFSVCA1CisgKi8KKworI2RlZmluZSBVQVJUX0ZJRk9fQ1RMX1RYX1JFU0VUCSgxIDw8IDIpCisjZGVmaW5lIFVBUlRfU1RBVFVTX1RYX01UCSgxIDw8IDYpCisKKyNkZWZpbmUgX1VBUlRSRUcoeCkJCSh2b2lkIF9faW9tZW0gKikoTFBDMzJYWF9VQVJUNV9CQVNFICsgKHgpKQorCisjZGVmaW5lIExQQzMyWFhfVUFSVF9ETExGSUZPX08JMHgwMAorI2RlZmluZSBMUEMzMlhYX1VBUlRfSUlSRkNSX08JMHgwOAorI2RlZmluZSBMUEMzMlhYX1VBUlRfTFNSX08JMHgxNAorCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0YyhpbnQgY2gpCit7CisJLyogV2FpdCBmb3IgdHJhbnNtaXQgRklGTyB0byBlbXB0eSAqLworCXdoaWxlICgoX19yYXdfcmVhZGwoX1VBUlRSRUcoTFBDMzJYWF9VQVJUX0xTUl9PKSkgJgorCQlVQVJUX1NUQVRVU19UWF9NVCkgPT0gMCkKKwkJOworCisJX19yYXdfd3JpdGVsKCh1MzIpIGNoLCBfVUFSVFJFRyhMUEMzMlhYX1VBUlRfRExMRklGT19PKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaCh2b2lkKQoreworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChfVUFSVFJFRyhMUEMzMlhYX1VBUlRfSUlSRkNSX08pKSB8CisJCVVBUlRfRklGT19DVExfVFhfUkVTRVQsIF9VQVJUUkVHKExQQzMyWFhfVUFSVF9JSVJGQ1JfTykpOworfQorCisvKiBOVUxMIGZ1bmN0aW9uczsgd2UgZG9uJ3QgcHJlc2VudGx5IG5lZWQgdGhlbSAqLworI2RlZmluZSBhcmNoX2RlY29tcF9zZXR1cCgpCisjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1scGMzMnh4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFkOTM2YzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWxwYzMyeHgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1scGMzMnh4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKyAqCisgKiBBdXRob3I6IEtldmluIFdlbGxzIDxrZXZpbi53ZWxsc0BueHAuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOWFAgU2VtaWNvbmR1Y3RvcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1ZNQUxMT0NfSAorI2RlZmluZSBfX0FTTV9BUkNIX1ZNQUxMT0NfSAorCisjZGVmaW5lIFZNQUxMT0NfRU5ECTB4RjAwMDAwMDAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxwYzMyeHgvaXJxLmMgYi9hcmNoL2FybS9tYWNoLWxwYzMyeHgvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQwZGYyNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9pcnEuYwpAQCAtMCwwICsxLDQzMiBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbHBjMzJ4eC9pcnEuYworICoKKyAqIEF1dGhvcjogS2V2aW4gV2VsbHMgPGtldmluLndlbGxzQG54cC5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5YUCBTZW1pY29uZHVjdG9ycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcGxhdGZvcm0uaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKworLyoKKyAqIERlZmF1bHQgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBBY3RpdmF0aW9uIHBvbGFyaXR5IG9mIGFsbCBpbnRlcm5hbAorICogaW50ZXJydXB0IHNvdXJjZXMKKyAqLworI2RlZmluZSBNSUNfQVBSX0RFRkFVTFQJCTB4M0ZGMEVGRTAKKyNkZWZpbmUgU0lDMV9BUFJfREVGQVVMVAkweEZCRDI3MTg2CisjZGVmaW5lIFNJQzJfQVBSX0RFRkFVTFQJMHg4MDE4MTBDMAorCisvKgorICogRGVmYXVsdCB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIEFjdGl2YXRpb24gVHlwZSBvZiBhbGwgaW50ZXJuYWwKKyAqIGludGVycnVwdCBzb3VyY2VzLiBBbGwgYXJlIGxldmVsIHNlbnNpdGl2ZS4KKyAqLworI2RlZmluZSBNSUNfQVRSX0RFRkFVTFQJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0lDMV9BVFJfREVGQVVMVAkweDAwMDI2MDAwCisjZGVmaW5lIFNJQzJfQVRSX0RFRkFVTFQJMHgwMDAwMDAwMAorCitzdHJ1Y3QgbHBjMzJ4eF9ldmVudF9ncm91cF9yZWdzIHsKKwl2b2lkIF9faW9tZW0gKmVuYWJfcmVnOworCXZvaWQgX19pb21lbSAqZWRnZV9yZWc7CisJdm9pZCBfX2lvbWVtICptYXNrc3RhdF9yZWc7CisJdm9pZCBfX2lvbWVtICpyYXdzdGF0X3JlZzsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbHBjMzJ4eF9ldmVudF9ncm91cF9yZWdzIGxwYzMyeHhfZXZlbnRfaW50X3JlZ3MgPSB7CisJLmVuYWJfcmVnID0gTFBDMzJYWF9DTEtQV1JfSU5UX0VSLAorCS5lZGdlX3JlZyA9IExQQzMyWFhfQ0xLUFdSX0lOVF9BUCwKKwkubWFza3N0YXRfcmVnID0gTFBDMzJYWF9DTEtQV1JfSU5UX1NSLAorCS5yYXdzdGF0X3JlZyA9IExQQzMyWFhfQ0xLUFdSX0lOVF9SUywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbHBjMzJ4eF9ldmVudF9ncm91cF9yZWdzIGxwYzMyeHhfZXZlbnRfcGluX3JlZ3MgPSB7CisJLmVuYWJfcmVnID0gTFBDMzJYWF9DTEtQV1JfUElOX0VSLAorCS5lZGdlX3JlZyA9IExQQzMyWFhfQ0xLUFdSX1BJTl9BUCwKKwkubWFza3N0YXRfcmVnID0gTFBDMzJYWF9DTEtQV1JfUElOX1NSLAorCS5yYXdzdGF0X3JlZyA9IExQQzMyWFhfQ0xLUFdSX1BJTl9SUywKK307CisKK3N0cnVjdCBscGMzMnh4X2V2ZW50X2luZm8geworCWNvbnN0IHN0cnVjdCBscGMzMnh4X2V2ZW50X2dyb3VwX3JlZ3MgKmV2ZW50X2dyb3VwOworCXUzMiBtYXNrOworfTsKKworLyoKKyAqIE1hcHMgYW4gSVJRIG51bWJlciB0byBhbmQgZXZlbnQgbWFzayBhbmQgcmVnaXN0ZXIKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBscGMzMnh4X2V2ZW50X2luZm8gbHBjMzJ4eF9ldmVudHNbTlJfSVJRU10gPSB7CisJW0lSUV9MUEMzMlhYX0dQSV8wOF0gPSB7CisJCS5ldmVudF9ncm91cCA9ICZscGMzMnh4X2V2ZW50X3Bpbl9yZWdzLAorCQkubWFzayA9IExQQzMyWFhfQ0xLUFdSX0VYVFNSQ19HUElfMDhfQklULAorCX0sCisJW0lSUV9MUEMzMlhYX0dQSV8wOV0gPSB7CisJCS5ldmVudF9ncm91cCA9ICZscGMzMnh4X2V2ZW50X3Bpbl9yZWdzLAorCQkubWFzayA9IExQQzMyWFhfQ0xLUFdSX0VYVFNSQ19HUElfMDlfQklULAorCX0sCisJW0lSUV9MUEMzMlhYX0dQSV8xOV0gPSB7CisJCS5ldmVudF9ncm91cCA9ICZscGMzMnh4X2V2ZW50X3Bpbl9yZWdzLAorCQkubWFzayA9IExQQzMyWFhfQ0xLUFdSX0VYVFNSQ19HUElfMTlfQklULAorCX0sCisJW0lSUV9MUEMzMlhYX0dQSV8wN10gPSB7CisJCS5ldmVudF9ncm91cCA9ICZscGMzMnh4X2V2ZW50X3Bpbl9yZWdzLAorCQkubWFzayA9IExQQzMyWFhfQ0xLUFdSX0VYVFNSQ19HUElfMDdfQklULAorCX0sCisJW0lSUV9MUEMzMlhYX0dQSV8wMF0gPSB7CisJCS5ldmVudF9ncm91cCA9ICZscGMzMnh4X2V2ZW50X3Bpbl9yZWdzLAorCQkubWFzayA9IExQQzMyWFhfQ0xLUFdSX0VYVFNSQ19HUElfMDBfQklULAorCX0sCisJW0lSUV9MUEMzMlhYX0dQSV8wMV0gPSB7CisJCS5ldmVudF9ncm91cCA9ICZscGMzMnh4X2V2ZW50X3Bpbl9yZWdzLAorCQkubWFzayA9IExQQzMyWFhfQ0xLUFdSX0VYVFNSQ19HUElfMDFfQklULAorCX0sCisJW0lSUV9MUEMzMlhYX0dQSV8wMl0gPSB7CisJCS5ldmVudF9ncm91cCA9ICZscGMzMnh4X2V2ZW50X3Bpbl9yZWdzLAorCQkubWFzayA9IExQQzMyWFhfQ0xLUFdSX0VYVFNSQ19HUElfMDJfQklULAorCX0sCisJW0lSUV9MUEMzMlhYX0dQSV8wM10gPSB7CisJCS5ldmVudF9ncm91cCA9ICZscGMzMnh4X2V2ZW50X3Bpbl9yZWdzLAorCQkubWFzayA9IExQQzMyWFhfQ0xLUFdSX0VYVFNSQ19HUElfMDNfQklULAorCX0sCisJW0lSUV9MUEMzMlhYX0dQSV8wNF0gPSB7CisJCS5ldmVudF9ncm91cCA9ICZscGMzMnh4X2V2ZW50X3Bpbl9yZWdzLAorCQkubWFzayA9IExQQzMyWFhfQ0xLUFdSX0VYVFNSQ19HUElfMDRfQklULAorCX0sCisJW0lSUV9MUEMzMlhYX0dQSV8wNV0gPSB7CisJCS5ldmVudF9ncm91cCA9ICZscGMzMnh4X2V2ZW50X3Bpbl9yZWdzLAorCQkubWFzayA9IExQQzMyWFhfQ0xLUFdSX0VYVFNSQ19HUElfMDVfQklULAorCX0sCisJW0lSUV9MUEMzMlhYX0dQSV8wNl0gPSB7CisJCS5ldmVudF9ncm91cCA9ICZscGMzMnh4X2V2ZW50X3Bpbl9yZWdzLAorCQkubWFzayA9IExQQzMyWFhfQ0xLUFdSX0VYVFNSQ19HUElfMDZfQklULAorCX0sCisJW0lSUV9MUEMzMlhYX0dQSU9fMDBdID0geworCQkuZXZlbnRfZ3JvdXAgPSAmbHBjMzJ4eF9ldmVudF9pbnRfcmVncywKKwkJLm1hc2sgPSBMUEMzMlhYX0NMS1BXUl9JTlRTUkNfR1BJT18wMF9CSVQsCisJfSwKKwlbSVJRX0xQQzMyWFhfR1BJT18wMV0gPSB7CisJCS5ldmVudF9ncm91cCA9ICZscGMzMnh4X2V2ZW50X2ludF9yZWdzLAorCQkubWFzayA9IExQQzMyWFhfQ0xLUFdSX0lOVFNSQ19HUElPXzAxX0JJVCwKKwl9LAorCVtJUlFfTFBDMzJYWF9HUElPXzAyXSA9IHsKKwkJLmV2ZW50X2dyb3VwID0gJmxwYzMyeHhfZXZlbnRfaW50X3JlZ3MsCisJCS5tYXNrID0gTFBDMzJYWF9DTEtQV1JfSU5UU1JDX0dQSU9fMDJfQklULAorCX0sCisJW0lSUV9MUEMzMlhYX0dQSU9fMDNdID0geworCQkuZXZlbnRfZ3JvdXAgPSAmbHBjMzJ4eF9ldmVudF9pbnRfcmVncywKKwkJLm1hc2sgPSBMUEMzMlhYX0NMS1BXUl9JTlRTUkNfR1BJT18wM19CSVQsCisJfSwKKwlbSVJRX0xQQzMyWFhfR1BJT18wNF0gPSB7CisJCS5ldmVudF9ncm91cCA9ICZscGMzMnh4X2V2ZW50X2ludF9yZWdzLAorCQkubWFzayA9IExQQzMyWFhfQ0xLUFdSX0lOVFNSQ19HUElPXzA0X0JJVCwKKwl9LAorCVtJUlFfTFBDMzJYWF9HUElPXzA1XSA9IHsKKwkJLmV2ZW50X2dyb3VwID0gJmxwYzMyeHhfZXZlbnRfaW50X3JlZ3MsCisJCS5tYXNrID0gTFBDMzJYWF9DTEtQV1JfSU5UU1JDX0dQSU9fMDVfQklULAorCX0sCisJW0lSUV9MUEMzMlhYX0tFWV0gPSB7CisJCS5ldmVudF9ncm91cCA9ICZscGMzMnh4X2V2ZW50X2ludF9yZWdzLAorCQkubWFzayA9IExQQzMyWFhfQ0xLUFdSX0lOVFNSQ19LRVlfQklULAorCX0sCisJW0lSUV9MUEMzMlhYX1VTQl9PVEdfQVRYXSA9IHsKKwkJLmV2ZW50X2dyb3VwID0gJmxwYzMyeHhfZXZlbnRfaW50X3JlZ3MsCisJCS5tYXNrID0gTFBDMzJYWF9DTEtQV1JfSU5UU1JDX1VTQkFUWElOVF9CSVQsCisJfSwKKwlbSVJRX0xQQzMyWFhfVVNCX0hPU1RdID0geworCQkuZXZlbnRfZ3JvdXAgPSAmbHBjMzJ4eF9ldmVudF9pbnRfcmVncywKKwkJLm1hc2sgPSBMUEMzMlhYX0NMS1BXUl9JTlRTUkNfVVNCX0JJVCwKKwl9LAorCVtJUlFfTFBDMzJYWF9SVENdID0geworCQkuZXZlbnRfZ3JvdXAgPSAmbHBjMzJ4eF9ldmVudF9pbnRfcmVncywKKwkJLm1hc2sgPSBMUEMzMlhYX0NMS1BXUl9JTlRTUkNfUlRDX0JJVCwKKwl9LAorCVtJUlFfTFBDMzJYWF9NU1RJTUVSXSA9IHsKKwkJLmV2ZW50X2dyb3VwID0gJmxwYzMyeHhfZXZlbnRfaW50X3JlZ3MsCisJCS5tYXNrID0gTFBDMzJYWF9DTEtQV1JfSU5UU1JDX01TVElNRVJfQklULAorCX0sCisJW0lSUV9MUEMzMlhYX1RTX0FVWF0gPSB7CisJCS5ldmVudF9ncm91cCA9ICZscGMzMnh4X2V2ZW50X2ludF9yZWdzLAorCQkubWFzayA9IExQQzMyWFhfQ0xLUFdSX0lOVFNSQ19UU19BVVhfQklULAorCX0sCisJW0lSUV9MUEMzMlhYX1RTX1BdID0geworCQkuZXZlbnRfZ3JvdXAgPSAmbHBjMzJ4eF9ldmVudF9pbnRfcmVncywKKwkJLm1hc2sgPSBMUEMzMlhYX0NMS1BXUl9JTlRTUkNfVFNfUF9CSVQsCisJfSwKKwlbSVJRX0xQQzMyWFhfVFNfSVJRXSA9IHsKKwkJLmV2ZW50X2dyb3VwID0gJmxwYzMyeHhfZXZlbnRfaW50X3JlZ3MsCisJCS5tYXNrID0gTFBDMzJYWF9DTEtQV1JfSU5UU1JDX0FEQ19CSVQsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIGdldF9jb250cm9sbGVyKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCAqYmFzZSwKKwl1bnNpZ25lZCBpbnQgKmlycWJpdCkKK3sKKwlpZiAoaXJxIDwgMzIpIHsKKwkJKmJhc2UgPSBMUEMzMlhYX01JQ19CQVNFOworCQkqaXJxYml0ID0gMSA8PCBpcnE7CisJfSBlbHNlIGlmIChpcnEgPCA2NCkgeworCQkqYmFzZSA9IExQQzMyWFhfU0lDMV9CQVNFOworCQkqaXJxYml0ID0gMSA8PCAoaXJxIC0gMzIpOworCX0gZWxzZSB7CisJCSpiYXNlID0gTFBDMzJYWF9TSUMyX0JBU0U7CisJCSppcnFiaXQgPSAxIDw8IChpcnEgLSA2NCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBscGMzMnh4X21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IHJlZywgY3RybCwgbWFzazsKKworCWdldF9jb250cm9sbGVyKGlycSwgJmN0cmwsICZtYXNrKTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKExQQzMyWFhfSU5UQ19NQVNLKGN0cmwpKSAmIH5tYXNrOworCV9fcmF3X3dyaXRlbChyZWcsIExQQzMyWFhfSU5UQ19NQVNLKGN0cmwpKTsKK30KKworc3RhdGljIHZvaWQgbHBjMzJ4eF91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IHJlZywgY3RybCwgbWFzazsKKworCWdldF9jb250cm9sbGVyKGlycSwgJmN0cmwsICZtYXNrKTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKExQQzMyWFhfSU5UQ19NQVNLKGN0cmwpKSB8IG1hc2s7CisJX19yYXdfd3JpdGVsKHJlZywgTFBDMzJYWF9JTlRDX01BU0soY3RybCkpOworfQorCitzdGF0aWMgdm9pZCBscGMzMnh4X2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgY3RybCwgbWFzazsKKworCWdldF9jb250cm9sbGVyKGlycSwgJmN0cmwsICZtYXNrKTsKKworCV9fcmF3X3dyaXRlbChtYXNrLCBMUEMzMlhYX0lOVENfUkFXX1NUQVQoY3RybCkpOworCisJLyogQWxzbyBuZWVkIHRvIGNsZWFyIHBlbmRpbmcgd2FrZSBldmVudCAqLworCWlmIChscGMzMnh4X2V2ZW50c1tpcnFdLm1hc2sgIT0gMCkKKwkJX19yYXdfd3JpdGVsKGxwYzMyeHhfZXZlbnRzW2lycV0ubWFzaywKKwkJCWxwYzMyeHhfZXZlbnRzW2lycV0uZXZlbnRfZ3JvdXAtPnJhd3N0YXRfcmVnKTsKK30KKworc3RhdGljIHZvaWQgX19scGMzMnh4X3NldF9pcnFfdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgdXNlX2hpZ2hfbGV2ZWwsCisJaW50IHVzZV9lZGdlKQoreworCXVuc2lnbmVkIGludCByZWcsIGN0cmwsIG1hc2s7CisKKwlnZXRfY29udHJvbGxlcihpcnEsICZjdHJsLCAmbWFzayk7CisKKwkvKiBBY3RpdmF0aW9uIGxldmVsLCBoaWdoIG9yIGxvdyAqLworCXJlZyA9IF9fcmF3X3JlYWRsKExQQzMyWFhfSU5UQ19QT0xBUihjdHJsKSk7CisJaWYgKHVzZV9oaWdoX2xldmVsKQorCQlyZWcgfD0gbWFzazsKKwllbHNlCisJCXJlZyAmPSB+bWFzazsKKwlfX3Jhd193cml0ZWwocmVnLCBMUEMzMlhYX0lOVENfUE9MQVIoY3RybCkpOworCisJLyogQWN0aXZhdGlvbiB0eXBlLCBlZGdlIG9yIGxldmVsICovCisJcmVnID0gX19yYXdfcmVhZGwoTFBDMzJYWF9JTlRDX0FDVF9UWVBFKGN0cmwpKTsKKwlpZiAodXNlX2VkZ2UpCisJCXJlZyB8PSBtYXNrOworCWVsc2UKKwkJcmVnICY9IH5tYXNrOworCV9fcmF3X3dyaXRlbChyZWcsIExQQzMyWFhfSU5UQ19BQ1RfVFlQRShjdHJsKSk7CisKKwkvKiBVc2Ugc2FtZSBwb2xhcml0eSBmb3IgdGhlIHdha2UgZXZlbnRzICovCisJaWYgKGxwYzMyeHhfZXZlbnRzW2lycV0ubWFzayAhPSAwKSB7CisJCXJlZyA9IF9fcmF3X3JlYWRsKGxwYzMyeHhfZXZlbnRzW2lycV0uZXZlbnRfZ3JvdXAtPmVkZ2VfcmVnKTsKKworCQlpZiAodXNlX2hpZ2hfbGV2ZWwpCisJCQlyZWcgfD0gbHBjMzJ4eF9ldmVudHNbaXJxXS5tYXNrOworCQllbHNlCisJCQlyZWcgJj0gfmxwYzMyeHhfZXZlbnRzW2lycV0ubWFzazsKKworCQlfX3Jhd193cml0ZWwocmVnLCBscGMzMnh4X2V2ZW50c1tpcnFdLmV2ZW50X2dyb3VwLT5lZGdlX3JlZyk7CisJfQorfQorCitzdGF0aWMgaW50IGxwYzMyeHhfc2V0X2lycV90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgSVJRX1RZUEVfRURHRV9SSVNJTkc6CisJCS8qIFJpc2luZyBlZGdlIHNlbnNpdGl2ZSAqLworCQlfX2xwYzMyeHhfc2V0X2lycV90eXBlKGlycSwgMSwgMSk7CisJCWJyZWFrOworCisJY2FzZSBJUlFfVFlQRV9FREdFX0ZBTExJTkc6CisJCS8qIEZhbGxpbmcgZWRnZSBzZW5zaXRpdmUgKi8KKwkJX19scGMzMnh4X3NldF9pcnFfdHlwZShpcnEsIDAsIDEpOworCQlicmVhazsKKworCWNhc2UgSVJRX1RZUEVfTEVWRUxfTE9XOgorCQkvKiBMb3cgbGV2ZWwgc2Vuc2l0aXZlICovCisJCV9fbHBjMzJ4eF9zZXRfaXJxX3R5cGUoaXJxLCAwLCAwKTsKKwkJYnJlYWs7CisKKwljYXNlIElSUV9UWVBFX0xFVkVMX0hJR0g6CisJCS8qIEhpZ2ggbGV2ZWwgc2Vuc2l0aXZlICovCisJCV9fbHBjMzJ4eF9zZXRfaXJxX3R5cGUoaXJxLCAxLCAwKTsKKwkJYnJlYWs7CisKKwkvKiBPdGhlciBtb2RlcyBhcmUgbm90IHN1cHBvcnRlZCAqLworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIE9rIHRvIHVzZSB0aGUgbGV2ZWwgaGFuZGxlciBmb3IgYWxsIHR5cGVzICovCisJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2xldmVsX2lycSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBscGMzMnh4X2lycV93YWtlKHVuc2lnbmVkIGludCBpcnFubywgdW5zaWduZWQgaW50IHN0YXRlKQoreworCXVuc2lnbmVkIGxvbmcgZXZlbnRyZWc7CisKKwlpZiAobHBjMzJ4eF9ldmVudHNbaXJxbm9dLm1hc2sgIT0gMCkgeworCQlldmVudHJlZyA9IF9fcmF3X3JlYWRsKGxwYzMyeHhfZXZlbnRzW2lycW5vXS4KKwkJCWV2ZW50X2dyb3VwLT5lbmFiX3JlZyk7CisKKwkJaWYgKHN0YXRlKQorCQkJZXZlbnRyZWcgfD0gbHBjMzJ4eF9ldmVudHNbaXJxbm9dLm1hc2s7CisJCWVsc2UKKwkJCWV2ZW50cmVnICY9IH5scGMzMnh4X2V2ZW50c1tpcnFub10ubWFzazsKKworCQlfX3Jhd193cml0ZWwoZXZlbnRyZWcsCisJCQlscGMzMnh4X2V2ZW50c1tpcnFub10uZXZlbnRfZ3JvdXAtPmVuYWJfcmVnKTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBDbGVhciBldmVudCAqLworCV9fcmF3X3dyaXRlbChscGMzMnh4X2V2ZW50c1tpcnFub10ubWFzaywKKwkJbHBjMzJ4eF9ldmVudHNbaXJxbm9dLmV2ZW50X2dyb3VwLT5yYXdzdGF0X3JlZyk7CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGxwYzMyeHhfc2V0X2RlZmF1bHRfbWFwcGluZ3ModW5zaWduZWQgaW50IGFwciwKKwl1bnNpZ25lZCBpbnQgYXRyLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCXVuc2lnbmVkIGludCBpOworCisJLyogU2V0IGFjdGl2YXRpb24gbGV2ZWxzIGZvciBlYWNoIGludGVycnVwdCAqLworCWkgPSAwOworCXdoaWxlIChpIDwgMzIpIHsKKwkJX19scGMzMnh4X3NldF9pcnFfdHlwZShvZmZzZXQgKyBpLCAoKGFwciA+PiBpKSAmIDB4MSksCisJCQkoKGF0ciA+PiBpKSAmIDB4MSkpOworCQlpKys7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGxwYzMyeHhfaXJxX2NoaXAgPSB7CisJLmFjayA9IGxwYzMyeHhfYWNrX2lycSwKKwkubWFzayA9IGxwYzMyeHhfbWFza19pcnEsCisJLnVubWFzayA9IGxwYzMyeHhfdW5tYXNrX2lycSwKKwkuc2V0X3R5cGUgPSBscGMzMnh4X3NldF9pcnFfdHlwZSwKKwkuc2V0X3dha2UgPSBscGMzMnh4X2lycV93YWtlCit9OworCitzdGF0aWMgdm9pZCBscGMzMnh4X3NpYzFfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJdW5zaWduZWQgbG9uZyBpbnRzID0gX19yYXdfcmVhZGwoTFBDMzJYWF9JTlRDX1NUQVQoTFBDMzJYWF9TSUMxX0JBU0UpKTsKKworCXdoaWxlIChpbnRzICE9IDApIHsKKwkJaW50IGlycW5vID0gZmxzKGludHMpIC0gMTsKKworCQlpbnRzICY9IH4oMSA8PCBpcnFubyk7CisKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKExQQzMyWFhfU0lDMV9JUlEoaXJxbm8pKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxwYzMyeHhfc2ljMl9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwl1bnNpZ25lZCBsb25nIGludHMgPSBfX3Jhd19yZWFkbChMUEMzMlhYX0lOVENfU1RBVChMUEMzMlhYX1NJQzJfQkFTRSkpOworCisJd2hpbGUgKGludHMgIT0gMCkgeworCQlpbnQgaXJxbm8gPSBmbHMoaW50cykgLSAxOworCisJCWludHMgJj0gfigxIDw8IGlycW5vKTsKKworCQlnZW5lcmljX2hhbmRsZV9pcnEoTFBDMzJYWF9TSUMyX0lSUShpcnFubykpOworCX0KK30KKwordm9pZCBfX2luaXQgbHBjMzJ4eF9pbml0X2lycSh2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCisJLyogU2V0dXAgTUlDICovCisJX19yYXdfd3JpdGVsKDAsIExQQzMyWFhfSU5UQ19NQVNLKExQQzMyWFhfTUlDX0JBU0UpKTsKKwlfX3Jhd193cml0ZWwoTUlDX0FQUl9ERUZBVUxULCBMUEMzMlhYX0lOVENfUE9MQVIoTFBDMzJYWF9NSUNfQkFTRSkpOworCV9fcmF3X3dyaXRlbChNSUNfQVRSX0RFRkFVTFQsIExQQzMyWFhfSU5UQ19BQ1RfVFlQRShMUEMzMlhYX01JQ19CQVNFKSk7CisKKwkvKiBTZXR1cCBTSUMxICovCisJX19yYXdfd3JpdGVsKDAsIExQQzMyWFhfSU5UQ19NQVNLKExQQzMyWFhfU0lDMV9CQVNFKSk7CisJX19yYXdfd3JpdGVsKE1JQ19BUFJfREVGQVVMVCwgTFBDMzJYWF9JTlRDX1BPTEFSKExQQzMyWFhfU0lDMV9CQVNFKSk7CisJX19yYXdfd3JpdGVsKE1JQ19BVFJfREVGQVVMVCwgTFBDMzJYWF9JTlRDX0FDVF9UWVBFKExQQzMyWFhfU0lDMV9CQVNFKSk7CisKKwkvKiBTZXR1cCBTSUMyICovCisJX19yYXdfd3JpdGVsKDAsIExQQzMyWFhfSU5UQ19NQVNLKExQQzMyWFhfU0lDMl9CQVNFKSk7CisJX19yYXdfd3JpdGVsKE1JQ19BUFJfREVGQVVMVCwgTFBDMzJYWF9JTlRDX1BPTEFSKExQQzMyWFhfU0lDMl9CQVNFKSk7CisJX19yYXdfd3JpdGVsKE1JQ19BVFJfREVGQVVMVCwgTFBDMzJYWF9JTlRDX0FDVF9UWVBFKExQQzMyWFhfU0lDMl9CQVNFKSk7CisKKwkvKiBDb25maWd1cmUgc3VwcG9ydGVkIElSUSdzICovCisJZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykgeworCQlzZXRfaXJxX2NoaXAoaSwgJmxwYzMyeHhfaXJxX2NoaXApOworCQlzZXRfaXJxX2hhbmRsZXIoaSwgaGFuZGxlX2xldmVsX2lycSk7CisJCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCk7CisJfQorCisJLyogU2V0IGRlZmF1bHQgbWFwcGluZ3MgKi8KKwlscGMzMnh4X3NldF9kZWZhdWx0X21hcHBpbmdzKE1JQ19BUFJfREVGQVVMVCwgTUlDX0FUUl9ERUZBVUxULCAwKTsKKwlscGMzMnh4X3NldF9kZWZhdWx0X21hcHBpbmdzKFNJQzFfQVBSX0RFRkFVTFQsIFNJQzFfQVRSX0RFRkFVTFQsIDMyKTsKKwlscGMzMnh4X3NldF9kZWZhdWx0X21hcHBpbmdzKFNJQzJfQVBSX0RFRkFVTFQsIFNJQzJfQVRSX0RFRkFVTFQsIDY0KTsKKworCS8qIG1hc2sgYWxsIGludGVycnVwdHMgZXhjZXB0IFNVQklSUSAqLworCV9fcmF3X3dyaXRlbCgwLCBMUEMzMlhYX0lOVENfTUFTSyhMUEMzMlhYX01JQ19CQVNFKSk7CisJX19yYXdfd3JpdGVsKDAsIExQQzMyWFhfSU5UQ19NQVNLKExQQzMyWFhfU0lDMV9CQVNFKSk7CisJX19yYXdfd3JpdGVsKDAsIExQQzMyWFhfSU5UQ19NQVNLKExQQzMyWFhfU0lDMl9CQVNFKSk7CisKKwkvKiBNSUMgU1VCSVJReCBpbnRlcnJ1cHRzIHdpbGwgcm91dGUgaGFuZGxpbmcgdG8gdGhlIGNoYWluIGhhbmRsZXJzICovCisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0xQQzMyWFhfU1VCMUlSUSwgbHBjMzJ4eF9zaWMxX2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9MUEMzMlhYX1NVQjJJUlEsIGxwYzMyeHhfc2ljMl9oYW5kbGVyKTsKKworCS8qIEluaXRpYWxseSBkaXNhYmxlIGFsbCB3YWtlIGV2ZW50cyAqLworCV9fcmF3X3dyaXRlbCgwLCBMUEMzMlhYX0NMS1BXUl9QMDFfRVIpOworCV9fcmF3X3dyaXRlbCgwLCBMUEMzMlhYX0NMS1BXUl9JTlRfRVIpOworCV9fcmF3X3dyaXRlbCgwLCBMUEMzMlhYX0NMS1BXUl9QSU5fRVIpOworCisJLyoKKwkgKiBEZWZhdWx0IHdha2UgYWN0aXZhdGlvbiBwb2xhcml0aWVzLCBhbGwgcGluIHNvdXJjZXMgYXJlIGxvdyBlZGdlCisJICogdHJpZ2dlcmVkCisJICovCisJX19yYXdfd3JpdGVsKExQQzMyWFhfQ0xLUFdSX0lOVFNSQ19UU19QX0JJVCB8CisJCUxQQzMyWFhfQ0xLUFdSX0lOVFNSQ19NU1RJTUVSX0JJVCB8CisJCUxQQzMyWFhfQ0xLUFdSX0lOVFNSQ19SVENfQklULAorCQlMUEMzMlhYX0NMS1BXUl9JTlRfQVApOworCV9fcmF3X3dyaXRlbCgwLCBMUEMzMlhYX0NMS1BXUl9QSU5fQVApOworCisJLyogQ2xlYXIgbGF0Y2hlZCB3YWtlIGV2ZW50IHN0YXRlcyAqLworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChMUEMzMlhYX0NMS1BXUl9QSU5fUlMpLAorCQlMUEMzMlhYX0NMS1BXUl9QSU5fUlMpOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChMUEMzMlhYX0NMS1BXUl9JTlRfUlMpLAorCQlMUEMzMlhYX0NMS1BXUl9JTlRfUlMpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1scGMzMnh4L3BoeTMyNTAuYyBiL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9waHkzMjUwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM5YTQyZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9waHkzMjUwLmMKQEAgLTAsMCArMSwzOTcgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWxwYzMyeHgvcGh5MzI1MC5jCisgKgorICogQXV0aG9yOiBLZXZpbiBXZWxscyA8a2V2aW4ud2VsbHNAbnhwLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTlhQIFNlbWljb25kdWN0b3JzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2VlcHJvbS5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL2NsY2QuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDIyLmg+CisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3BsYXRmb3JtLmg+CisjaW5jbHVkZSAiY29tbW9uLmgiCisKKy8qCisgKiBNYXBwZWQgR1BJT0xJQiBHUElPcworICovCisjZGVmaW5lIFNQSTBfQ1NfR1BJTwlMUEMzMlhYX0dQSU8oTFBDMzJYWF9HUElPX1AzX0dSUCwgNSkKKyNkZWZpbmUgTENEX1BPV0VSX0dQSU8JTFBDMzJYWF9HUElPKExQQzMyWFhfR1BPX1AzX0dSUCwgMCkKKyNkZWZpbmUgQktMX1BPV0VSX0dQSU8JTFBDMzJYWF9HUElPKExQQzMyWFhfR1BPX1AzX0dSUCwgNCkKKyNkZWZpbmUgTEVEX0dQSU8JTFBDMzJYWF9HUElPKExQQzMyWFhfR1BPX1AzX0dSUCwgMSkKKworLyoKKyAqIEFNQkEgTENEIGNvbnRyb2xsZXIKKyAqLworc3RhdGljIHN0cnVjdCBjbGNkX3BhbmVsIGNvbm5fbGNkX3BhbmVsID0geworCS5tb2RlCQk9IHsKKwkJLm5hbWUJCT0gIlFWR0EgcG9ydHJhaXQiLAorCQkucmVmcmVzaAk9IDYwLAorCQkueHJlcwkJPSAyNDAsCisJCS55cmVzCQk9IDMyMCwKKwkJLnBpeGNsb2NrCT0gMTkxODI4LAorCQkubGVmdF9tYXJnaW4JPSAyMiwKKwkJLnJpZ2h0X21hcmdpbgk9IDExLAorCQkudXBwZXJfbWFyZ2luCT0gMiwKKwkJLmxvd2VyX21hcmdpbgk9IDEsCisJCS5oc3luY19sZW4JPSA1LAorCQkudnN5bmNfbGVuCT0gMiwKKwkJLnN5bmMJCT0gMCwKKwkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCisJfSwKKwkud2lkdGgJCT0gLTEsCisJLmhlaWdodAkJPSAtMSwKKwkudGltMgkJPSAoVElNMl9JVlMgfCBUSU0yX0lIUyksCisJLmNudGwJCT0gKENOVExfQkdSIHwgQ05UTF9MQ0RURlQgfCBDTlRMX0xDRFZDT01QKDEpIHwKKwkJCQlDTlRMX0xDREJQUDE2XzU2NSksCisJLmJwcAkJPSAxNiwKK307CisjZGVmaW5lIFBBTkVMX1NJWkUgKDMgKiBTWl82NEspCisKK3N0YXRpYyBpbnQgbHBjMzJ4eF9jbGNkX3NldHVwKHN0cnVjdCBjbGNkX2ZiICpmYikKK3sKKwlkbWFfYWRkcl90IGRtYTsKKworCWZiLT5mYi5zY3JlZW5fYmFzZSA9IGRtYV9hbGxvY193cml0ZWNvbWJpbmUoJmZiLT5kZXYtPmRldiwKKwkJUEFORUxfU0laRSwgJmRtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmYi0+ZmIuc2NyZWVuX2Jhc2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDTENEOiB1bmFibGUgdG8gbWFwIGZyYW1lYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZmItPmZiLmZpeC5zbWVtX3N0YXJ0ID0gZG1hOworCWZiLT5mYi5maXguc21lbV9sZW4gPSBQQU5FTF9TSVpFOworCWZiLT5wYW5lbCA9ICZjb25uX2xjZF9wYW5lbDsKKworCWlmIChncGlvX3JlcXVlc3QoTENEX1BPV0VSX0dQSU8sICJMQ0QgcG93ZXIiKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciByZXF1ZXN0aW5nIGdwaW8gJXUiLAorCQkJTENEX1BPV0VSX0dQSU8pOworCWVsc2UgaWYgKGdwaW9fZGlyZWN0aW9uX291dHB1dChMQ0RfUE9XRVJfR1BJTywgMSkpCisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igc2V0dGluZyBncGlvICV1IHRvIG91dHB1dCIsCisJCQlMQ0RfUE9XRVJfR1BJTyk7CisKKwlpZiAoZ3Bpb19yZXF1ZXN0KEJLTF9QT1dFUl9HUElPLCAiTENEIGJhY2tsaWdodCBwb3dlciIpKQorCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHJlcXVlc3RpbmcgZ3BpbyAldSIsCisJCQlCS0xfUE9XRVJfR1BJTyk7CisJZWxzZSBpZiAoZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEJLTF9QT1dFUl9HUElPLCAxKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBzZXR0aW5nIGdwaW8gJXUgdG8gb3V0cHV0IiwKKwkJCUJLTF9QT1dFUl9HUElPKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxwYzMyeHhfY2xjZF9tbWFwKHN0cnVjdCBjbGNkX2ZiICpmYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJcmV0dXJuIGRtYV9tbWFwX3dyaXRlY29tYmluZSgmZmItPmRldi0+ZGV2LCB2bWEsCisJCWZiLT5mYi5zY3JlZW5fYmFzZSwgZmItPmZiLmZpeC5zbWVtX3N0YXJ0LAorCQlmYi0+ZmIuZml4LnNtZW1fbGVuKTsKK30KKworc3RhdGljIHZvaWQgbHBjMzJ4eF9jbGNkX3JlbW92ZShzdHJ1Y3QgY2xjZF9mYiAqZmIpCit7CisJZG1hX2ZyZWVfd3JpdGVjb21iaW5lKCZmYi0+ZGV2LT5kZXYsIGZiLT5mYi5maXguc21lbV9sZW4sCisJCWZiLT5mYi5zY3JlZW5fYmFzZSwgZmItPmZiLmZpeC5zbWVtX3N0YXJ0KTsKK30KKworLyoKKyAqIE9uIHNvbWUgZWFybHkgTENEIG1vZHVsZXMgKDEzMDcuMCksIHRoZSBiYWNrbGlnaHQgbG9naWMgaXMgaW52ZXJ0ZWQuCisgKiBGb3IgdGhvc2UgYm9hcmQgdmFyaWFudHMsIHN3YXAgdGhlIGRpc2FibGUgYW5kIGVuYWJsZSBzdGF0ZXMgZm9yCisgKiBCS0xfUE9XRVJfR1BJTy4KKyovCitzdGF0aWMgdm9pZCBjbGNkX2Rpc2FibGUoc3RydWN0IGNsY2RfZmIgKmZiKQoreworCWdwaW9fc2V0X3ZhbHVlKEJLTF9QT1dFUl9HUElPLCAwKTsKKwlncGlvX3NldF92YWx1ZShMQ0RfUE9XRVJfR1BJTywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsY2RfZW5hYmxlKHN0cnVjdCBjbGNkX2ZiICpmYikKK3sKKwlncGlvX3NldF92YWx1ZShCS0xfUE9XRVJfR1BJTywgMSk7CisJZ3Bpb19zZXRfdmFsdWUoTENEX1BPV0VSX0dQSU8sIDEpOworfQorCitzdGF0aWMgc3RydWN0IGNsY2RfYm9hcmQgbHBjMzJ4eF9jbGNkX2RhdGEgPSB7CisJLm5hbWUJCT0gIlBoeXRlYyBMQ0QiLAorCS5jaGVjawkJPSBjbGNkZmJfY2hlY2ssCisJLmRlY29kZQkJPSBjbGNkZmJfZGVjb2RlLAorCS5kaXNhYmxlCT0gY2xjZF9kaXNhYmxlLAorCS5lbmFibGUJCT0gY2xjZF9lbmFibGUsCisJLnNldHVwCQk9IGxwYzMyeHhfY2xjZF9zZXR1cCwKKwkubW1hcAkJPSBscGMzMnh4X2NsY2RfbW1hcCwKKwkucmVtb3ZlCQk9IGxwYzMyeHhfY2xjZF9yZW1vdmUsCit9OworCitzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlIGxwYzMyeHhfY2xjZF9kZXZpY2UgPSB7CisJLmRldgkJCQk9IHsKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gfjAsCisJCS5pbml0X25hbWUJCT0gImRldjpjbGNkIiwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJmxwYzMyeHhfY2xjZF9kYXRhLAorCX0sCisJLnJlcwkJCQk9IHsKKwkJLnN0YXJ0CQkJPSBMUEMzMlhYX0xDRF9CQVNFLAorCQkuZW5kCQkJPSAoTFBDMzJYWF9MQ0RfQkFTRSArIFNaXzRLIC0gMSksCisJCS5mbGFncwkJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkuZG1hX21hc2sJCQk9IH4wLAorCS5pcnEJCQkJPSB7SVJRX0xQQzMyWFhfTENELCBOT19JUlF9LAorfTsKKworLyoKKyAqIEFNQkEgU1NQIChTUEkpCisgKi8KK3N0YXRpYyB2b2lkIHBoeTMyNTBfc3BpX2NzX3NldCh1MzIgY29udHJvbCkKK3sKKwlncGlvX3NldF92YWx1ZShTUEkwX0NTX0dQSU8sIChpbnQpIGNvbnRyb2wpOworfQorCitzdGF0aWMgc3RydWN0IHBsMDIyX2NvbmZpZ19jaGlwIHNwaTBfY2hpcF9pbmZvID0geworCS5sYm0JCQk9IExPT1BCQUNLX0RJU0FCTEVELAorCS5jb21fbW9kZQkJPSBJTlRFUlJVUFRfVFJBTlNGRVIsCisJLmlmYWNlCQkJPSBTU1BfSU5URVJGQUNFX01PVE9ST0xBX1NQSSwKKwkuaGllcmFyY2h5CQk9IFNTUF9NQVNURVIsCisJLnNsYXZlX3R4X2Rpc2FibGUJPSAwLAorCS5lbmRpYW5fdHgJCT0gU1NQX1RYX0xTQiwKKwkuZW5kaWFuX3J4CQk9IFNTUF9SWF9MU0IsCisJLmRhdGFfc2l6ZQkJPSBTU1BfREFUQV9CSVRTXzgsCisJLnJ4X2xldl90cmlnCQk9IFNTUF9SWF80X09SX01PUkVfRUxFTSwKKwkudHhfbGV2X3RyaWcJCT0gU1NQX1RYXzRfT1JfTU9SRV9FTVBUWV9MT0MsCisJLmNsa19waGFzZQkJPSBTU1BfQ0xLX0ZJUlNUX0VER0UsCisJLmNsa19wb2wJCT0gU1NQX0NMS19QT0xfSURMRV9MT1csCisJLmN0cmxfbGVuCQk9IFNTUF9CSVRTXzgsCisJLndhaXRfc3RhdGUJCT0gU1NQX01XSVJFX1dBSVRfWkVSTywKKwkuZHVwbGV4CQkJPSBTU1BfTUlDUk9XSVJFX0NIQU5ORUxfRlVMTF9EVVBMRVgsCisJLmNzX2NvbnRyb2wJCT0gcGh5MzI1MF9zcGlfY3Nfc2V0LAorfTsKKworc3RhdGljIHN0cnVjdCBwbDAyMl9zc3BfY29udHJvbGxlciBscGMzMnh4X3NzcDBfZGF0YSA9IHsKKwkuYnVzX2lkCQkJPSAwLAorCS5udW1fY2hpcHNlbGVjdAkJPSAxLAorCS5lbmFibGVfZG1hCQk9IDAsCit9OworCitzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlIGxwYzMyeHhfc3NwMF9kZXZpY2UgPSB7CisJLmRldgkJCQk9IHsKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gfjAsCisJCS5pbml0X25hbWUJCT0gImRldjpzc3AwIiwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJmxwYzMyeHhfc3NwMF9kYXRhLAorCX0sCisJLnJlcwkJCQk9IHsKKwkJLnN0YXJ0CQkJPSBMUEMzMlhYX1NTUDBfQkFTRSwKKwkJLmVuZAkJCT0gKExQQzMyWFhfU1NQMF9CQVNFICsgU1pfNEsgLSAxKSwKKwkJLmZsYWdzCQkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS5kbWFfbWFzawkJCT0gfjAsCisJLmlycQkJCQk9IHtJUlFfTFBDMzJYWF9TU1AwLCBOT19JUlF9LAorfTsKKworLyogQVQyNSBkcml2ZXIgcmVnaXN0cmF0aW9uICovCitzdGF0aWMgaW50IF9faW5pdCBwaHkzMjUwX3NwaV9ib2FyZF9yZWdpc3Rlcih2b2lkKQoreworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9TUElERVYpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9TUElERVZfTU9EVUxFKQorCXN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gaW5mb1tdID0geworCQl7CisJCQkubW9kYWxpYXMgPSAic3BpZGV2IiwKKwkJCS5tYXhfc3BlZWRfaHogPSA1MDAwMDAwLAorCQkJLmJ1c19udW0gPSAwLAorCQkJLmNoaXBfc2VsZWN0ID0gMCwKKwkJCS5jb250cm9sbGVyX2RhdGEgPSAmc3BpMF9jaGlwX2luZm8sCisJCX0sCisJfTsKKworI2Vsc2UKKwlzdGF0aWMgc3RydWN0IHNwaV9lZXByb20gZWVwcm9tID0geworCQkubmFtZSA9ICJhdDI1MjU2YSIsCisJCS5ieXRlX2xlbiA9IDB4ODAwMCwKKwkJLnBhZ2Vfc2l6ZSA9IDY0LAorCQkuZmxhZ3MgPSBFRV9BRERSMiwKKwl9OworCisJc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBpbmZvW10gPSB7CisJCXsKKwkJCS5tb2RhbGlhcyA9ICJhdDI1IiwKKwkJCS5tYXhfc3BlZWRfaHogPSA1MDAwMDAwLAorCQkJLmJ1c19udW0gPSAwLAorCQkJLmNoaXBfc2VsZWN0ID0gMCwKKwkJCS5wbGF0Zm9ybV9kYXRhID0gJmVlcHJvbSwKKwkJCS5jb250cm9sbGVyX2RhdGEgPSAmc3BpMF9jaGlwX2luZm8sCisJCX0sCisJfTsKKyNlbmRpZgorCXJldHVybiBzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhpbmZvLCBBUlJBWV9TSVpFKGluZm8pKTsKK30KK2FyY2hfaW5pdGNhbGwocGh5MzI1MF9zcGlfYm9hcmRfcmVnaXN0ZXIpOworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgcGh5MzI1MF9pMmNfYm9hcmRfaW5mb1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInBjZjg1NjMiLCAweDUxKSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBwaHlfbGVkc1tdID0geworCXsKKwkJLm5hbWUJCQk9ICJsZWQwIiwKKwkJLmdwaW8JCQk9IExFRF9HUElPLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBsZWRfZGF0YSA9IHsKKwkubGVkcyA9IHBoeV9sZWRzLAorCS5udW1fbGVkcyA9IEFSUkFZX1NJWkUocGh5X2xlZHMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbHBjMzJ4eF9ncGlvX2xlZF9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJsZWRzLWdwaW8iLAorCS5pZAkJCT0gLTEsCisJLmRldi5wbGF0Zm9ybV9kYXRhCT0gJmxlZF9kYXRhLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBoeTMyNTBfZGV2c1tdIF9faW5pdGRhdGEgPSB7CisJJmxwYzMyeHhfaTJjMF9kZXZpY2UsCisJJmxwYzMyeHhfaTJjMV9kZXZpY2UsCisJJmxwYzMyeHhfaTJjMl9kZXZpY2UsCisJJmxwYzMyeHhfd2F0Y2hkb2dfZGV2aWNlLAorCSZscGMzMnh4X2dwaW9fbGVkX2RldmljZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFtYmFfZGV2c1tdIF9faW5pdGRhdGEgPSB7CisJJmxwYzMyeHhfY2xjZF9kZXZpY2UsCisJJmxwYzMyeHhfc3NwMF9kZXZpY2UsCit9OworCisvKgorICogQm9hcmQgc3BlY2lmaWMgZnVuY3Rpb25zCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBwaHkzMjUwX2JvYXJkX2luaXQodm9pZCkKK3sKKwl1MzIgdG1wOworCWludCBpOworCisJbHBjMzJ4eF9ncGlvX2luaXQoKTsKKworCS8qIFJlZ2lzdGVyIEdQSU9zIHVzZWQgb24gdGhpcyBib2FyZCAqLworCWlmIChncGlvX3JlcXVlc3QoU1BJMF9DU19HUElPLCAic3BpMCBjcyIpKQorCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHJlcXVlc3RpbmcgZ3BpbyAldSIsCisJCQlTUEkwX0NTX0dQSU8pOworCWVsc2UgaWYgKGdwaW9fZGlyZWN0aW9uX291dHB1dChTUEkwX0NTX0dQSU8sIDEpKQorCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHNldHRpbmcgZ3BpbyAldSB0byBvdXRwdXQiLAorCQkJU1BJMF9DU19HUElPKTsKKworCS8qIFNldHVwIG5ldHdvcmsgaW50ZXJmYWNlIGZvciBSTUlJIG1vZGUgKi8KKwl0bXAgPSBfX3Jhd19yZWFkbChMUEMzMlhYX0NMS1BXUl9NQUNDTEtfQ1RSTCk7CisJdG1wICY9IH5MUEMzMlhYX0NMS1BXUl9NQUNDVFJMX1BJTlNfTVNLOworCXRtcCB8PSBMUEMzMlhYX0NMS1BXUl9NQUNDVFJMX1VTRV9STUlJX1BJTlM7CisJX19yYXdfd3JpdGVsKHRtcCwgTFBDMzJYWF9DTEtQV1JfTUFDQ0xLX0NUUkwpOworCisJLyogU2V0dXAgU0xDIE5BTkQgY29udHJvbGxlciBtdXhpbmcgKi8KKwlfX3Jhd193cml0ZWwoTFBDMzJYWF9DTEtQV1JfTkFORENMS19TRUxfU0xDLAorCQlMUEMzMlhYX0NMS1BXUl9OQU5EX0NMS19DVFJMKTsKKworCS8qIFNldHVwIExDRCBtdXhpbmcgdG8gUkdCNTY1ICovCisJdG1wID0gX19yYXdfcmVhZGwoTFBDMzJYWF9DTEtQV1JfTENEQ0xLX0NUUkwpICYKKwkJfihMUEMzMlhYX0NMS1BXUl9MQ0RDVFJMX0xDRFRZUEVfTVNLIHwKKwkJTFBDMzJYWF9DTEtQV1JfTENEQ1RSTF9QU0NBTEVfTVNLKTsKKwl0bXAgfD0gTFBDMzJYWF9DTEtQV1JfTENEQ1RSTF9MQ0RUWVBFX1RGVDE2OworCV9fcmF3X3dyaXRlbCh0bXAsIExQQzMyWFhfQ0xLUFdSX0xDRENMS19DVFJMKTsKKworCS8qIFNldCB1cCBJMkMgcHVsbCBsZXZlbHMgKi8KKwl0bXAgPSBfX3Jhd19yZWFkbChMUEMzMlhYX0NMS1BXUl9JMkNfQ0xLX0NUUkwpOworCXRtcCB8PSBMUEMzMlhYX0NMS1BXUl9JMkNDTEtfVVNCSTJDSElfRFJJVkUgfAorCQlMUEMzMlhYX0NMS1BXUl9JMkNDTEtfSTJDMkhJX0RSSVZFOworCV9fcmF3X3dyaXRlbCh0bXAsIExQQzMyWFhfQ0xLUFdSX0kyQ19DTEtfQ1RSTCk7CisKKwkvKiBEaXNhYmxlIElyREEgcHVsc2luZyBzdXBwb3J0IG9uIFVBUlQ2ICovCisJdG1wID0gX19yYXdfcmVhZGwoTFBDMzJYWF9VQVJUQ1RMX0NUUkwpOworCXRtcCB8PSBMUEMzMlhYX1VBUlRfVUFSVDZfSVJEQU1PRF9CWVBBU1M7CisJX19yYXdfd3JpdGVsKHRtcCwgTFBDMzJYWF9VQVJUQ1RMX0NUUkwpOworCisJLyogRW5hYmxlIERNQSBmb3IgSTJTMSBjaGFubmVsICovCisJdG1wID0gX19yYXdfcmVhZGwoTFBDMzJYWF9DTEtQV1JfSTJTX0NMS19DVFJMKTsKKwl0bXAgPSBMUEMzMlhYX0NMS1BXUl9JMlNDVFJMX0kyUzFfVVNFX0RNQTsKKwlfX3Jhd193cml0ZWwodG1wLCBMUEMzMlhYX0NMS1BXUl9JMlNfQ0xLX0NUUkwpOworCisJbHBjMzJ4eF9zZXJpYWxfaW5pdCgpOworCisJLyoKKwkgKiBBTUJBIHBlcmlwaGVyYWwgY2xvY2tzIG5lZWQgdG8gYmUgZW5hYmxlZCBwcmlvciB0byBBTUJBIGRldmljZQorCSAqIGRldGVjdGlvbiBvciBhIGRhdGEgZmF1bHQgd2lsbCBvY2N1ciwgc28gZW5hYmxlIHRoZSBjbG9ja3MKKwkgKiBoZXJlLiBIb3dldmVyLCB3ZSBkb24ndCB3YW50IHRvIGVuYWJsZSB0aGVtIGlmIHRoZSBwZXJpcGhlcmFsCisJICogaXNuJ3QgaW5jbHVkZWQgaW4gdGhlIGltYWdlCisJICovCisjaWZkZWYgQ09ORklHX0ZCX0FSTUNMQ0QKKwl0bXAgPSBfX3Jhd19yZWFkbChMUEMzMlhYX0NMS1BXUl9MQ0RDTEtfQ1RSTCk7CisJX19yYXdfd3JpdGVsKCh0bXAgfCBMUEMzMlhYX0NMS1BXUl9MQ0RDVFJMX0NMS19FTiksCisJCUxQQzMyWFhfQ0xLUFdSX0xDRENMS19DVFJMKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TUElfUEwwMjIKKwl0bXAgPSBfX3Jhd19yZWFkbChMUEMzMlhYX0NMS1BXUl9TU1BfQ0xLX0NUUkwpOworCV9fcmF3X3dyaXRlbCgodG1wIHwgTFBDMzJYWF9DTEtQV1JfU1NQQ1RSTF9TU1BDTEswX0VOKSwKKwkJTFBDMzJYWF9DTEtQV1JfU1NQX0NMS19DVFJMKTsKKyNlbmRpZgorCisJcGxhdGZvcm1fYWRkX2RldmljZXMocGh5MzI1MF9kZXZzLCBBUlJBWV9TSVpFKHBoeTMyNTBfZGV2cykpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFtYmFfZGV2cyk7IGkrKykgeworCQlzdHJ1Y3QgYW1iYV9kZXZpY2UgKmQgPSBhbWJhX2RldnNbaV07CisJCWFtYmFfZGV2aWNlX3JlZ2lzdGVyKGQsICZpb21lbV9yZXNvdXJjZSk7CisJfQorCisJLyogVGVzdCBjbG9jayBuZWVkZWQgZm9yIFVEQTEzODAgaW5pdGlhbCBpbml0ICovCisJX19yYXdfd3JpdGVsKExQQzMyWFhfQ0xLUFdSX1RFU1RDTEsyX1NFTF9NT1NDIHwKKwkJTFBDMzJYWF9DTEtQV1JfVEVTVENMS19URVNUQ0xLMl9FTiwKKwkJTFBDMzJYWF9DTEtQV1JfVEVTVF9DTEtfU0VMKTsKKworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIHBoeTMyNTBfaTJjX2JvYXJkX2luZm8sCisJCUFSUkFZX1NJWkUocGh5MzI1MF9pMmNfYm9hcmRfaW5mbykpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBscGMzMnh4X2Rpc3BsYXlfdWlkKHZvaWQpCit7CisJdTMyIHVpZFs0XTsKKworCWxwYzMyeHhfZ2V0X3VpZCh1aWQpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiTFBDMzJYWCB1bmlxdWUgSUQ6ICUwOHglMDh4JTA4eCUwOHhcbiIsCisJCXVpZFszXSwgdWlkWzJdLCB1aWRbMV0sIHVpZFswXSk7CisKKwlyZXR1cm4gMTsKK30KK2FyY2hfaW5pdGNhbGwobHBjMzJ4eF9kaXNwbGF5X3VpZCk7CisKK01BQ0hJTkVfU1RBUlQoUEhZMzI1MCwgIlBoeXRlYyAzMjUwIGJvYXJkIHdpdGggdGhlIExQQzMyNTAgTWljcm9jb250cm9sbGVyIikKKwkvKiBNYWludGFpbmVyOiBLZXZpbiBXZWxscywgTlhQIFNlbWljb25kdWN0b3JzICovCisJLnBoeXNfaW8JPSBMUEMzMlhYX1VBUlQ1X0JBU0UsCisJLmlvX3BnX29mZnN0CT0gKChJT19BRERSRVNTKExQQzMyWFhfVUFSVDVfQkFTRSkpPj4xOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKKwkubWFwX2lvCQk9IGxwYzMyeHhfbWFwX2lvLAorCS5pbml0X2lycQk9IGxwYzMyeHhfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZscGMzMnh4X3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBwaHkzMjUwX2JvYXJkX2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1scGMzMnh4L3BtLmMgYi9hcmNoL2FybS9tYWNoLWxwYzMyeHgvcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmUyYWVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1scGMzMnh4L3BtLmMKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWxwYzMyeHgvcG0uYworICoKKyAqIE9yaWdpbmFsIGF1dGhvcnM6IFZpdGFseSBXb29sLCBEbWl0cnkgQ2hpZ2lyZXYgPHNvdXJjZUBtdmlzdGEuY29tPgorICogTW9kaWZpZWQgYnkgS2V2aW4gV2VsbHMgPGtldmluLndlbGxzQG54cC5jb20+CisgKgorICogMjAwNSAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworCisvKgorICogTFBDMzJYWCBDUFUgYW5kIHN5c3RlbSBwb3dlciBtYW5hZ2VtZW50CisgKgorICogVGhlIExDUDMyWFggaGFzIHRocmVlIENQVSBtb2RlcyBmb3IgY29udHJvbGxpbmcgc3lzdGVtIHBvd2VyOiBydW4sCisgKiBkaXJlY3QtcnVuLCBhbmQgaGFsdCBtb2Rlcy4gV2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBoYWx0IGFuZCBydW4gbW9kZXMsCisgKiB0aGUgQ1BVIHRyYW5zaXN0aW9ucyB0aHJvdWdoIGRpcmVjdC1ydW4gbW9kZS4gRm9yIExpbnV4LCBkaXJlY3QtcnVuCisgKiBtb2RlIGlzIG5vdCB1c2VkIGluIG5vcm1hbCBvcGVyYXRpb24uIEhhbHQgbW9kZSBpcyB1c2VkIHdoZW4gdGhlCisgKiBzeXN0ZW0gaXMgZnVsbHkgc3VzcGVuZGVkLgorICoKKyAqIFJ1biBtb2RlOgorICogVGhlIEFSTSBDUFUgY2xvY2sgKEhDTEtfUExMKSwgSENMSyBidXMgY2xvY2ssIGFuZCBQQ0xLIGJ1cyBjbG9ja3MgYXJlCisgKiBkZXJpdmVkIGZyb20gdGhlIEhDTEsgUExMLiBUaGUgSENMSyBhbmQgUENMSyBidXMgcmF0ZXMgYXJlIGRpdmlkZWQgZnJvbQorICogdGhlIEhDTEtfUExMIHJhdGUuIExpbnV4IHJ1bnMgaW4gdGhpcyBtb2RlLgorICoKKyAqIERpcmVjdC1ydW4gbW9kZToKKyAqIFRoZSBBUk0gQ1BVIGNsb2NrLCBIQ0xLIGJ1cyBjbG9jaywgYW5kIFBDTEsgYnVzIGNsb2NrcyBhcmUgZHJpdmVuIGZyb20KKyAqIFNZU0NMSy4gU1lTQ0xLIGlzIHVzdWFsbHkgYXJvdW5kIDEzTUh6LCBidXQgbWF5IHZhcnkgYmFzZWQgb24gU1lTQ0xLCisgKiBzb3VyY2Ugb3IgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgbWFpbiBvc2NpbGxhdG9yLiBJbiB0aGlzIG1vZGUsIHRoZQorICogSENMS19QTEwgY2FuIGJlIHNhZmVseSBlbmFibGVkLCBjaGFuZ2VkLCBvciBkaXNhYmxlZC4KKyAqCisgKiBIYWx0IG1vZGU6CisgKiBTWVNDTEsgaXMgZ2F0ZWQgb2ZmIGFuZCB0aGUgQ1BVIGFuZCBzeXN0ZW0gY2xvY2tzIGFyZSBoYWx0ZWQuCisgKiBQZXJpcGhlcmFscyBiYXNlZCBvbiB0aGUgMzJLSHogb3NjaWxsYXRvciBjbG9jayAoaWUsIFJUQywgdG91Y2gsCisgKiBrZXkgc2Nhbm5lciwgZXRjLikgc3RpbGwgb3BlcmF0ZSBpZiBlbmFibGVkLiBJbiB0aGlzIHN0YXRlLCBhbiBlbmFibGVkCisgKiBzeXN0ZW0gZXZlbnQgKGllLCBHUElPIHN0YXRlIGNoYW5nZSwgUlRDIG1hdGNoLCBrZXkgcHJlc3MsIGV0Yy4pIHdpbGwKKyAqIHdha2UgdGhlIHN5c3RlbSB1cCBiYWNrIGludG8gZGlyZWN0LXJ1biBtb2RlLgorICoKKyAqIERSQU0gcmVmcmVzaAorICogRFJBTSBjbG9ja2luZyBhbmQgcmVmcmVzaCBhcmUgc2xpZ2h0bHkgZGlmZmVyZW50IGZvciBzeXN0ZW1zIHdpdGggRERSCisgKiBEUkFNIG9yIHJlZ3VsYXIgU0RSQU0gZGV2aWNlcy4gSWYgU0RSQU0gaXMgdXNlZCBpbiB0aGUgc3lzdGVtLCB0aGUKKyAqIFNEUkFNIHdpbGwgc3RpbGwgYmUgYWNjZXNzaWJsZSBpbiBkaXJlY3QtcnVuIG1vZGUuIEluIEREUiBiYXNlZCBzeXN0ZW1zLAorICogYSB0cmFuc2lzdGlvbiB0byBkaXJlY3QtcnVuIG1vZGUgd2lsbCBzdG9wIGFsbCBERFIgYWNjZXNzZXMgKG5vIGNsb2NrcykuCisgKiBCZWNhdXNlIG9mIHRoaXMsIHRoZSBjb2RlIHRvIHN3aXRjaCBwb3dlciBtb2RlcyBhbmQgdGhlIGNvZGUgdG8gZW50ZXIKKyAqIGFuZCBleGl0IERSQU0gc2VsZi1yZWZyZXNoIG1vZGVzIG11c3Qgbm90IGJlIGV4ZWN1dGVkIGluIERSQU0uIEEgc21hbGwKKyAqIHNlY3Rpb24gb2YgSVJBTSBpcyB1c2VkIGluc3RlYWQgZm9yIHRoaXMuCisgKgorICogU3VzcGVuZCBpcyBoYW5kbGVkIHdpdGggdGhlIGZvbGxvd2luZyBsb2dpYzoKKyAqICBCYWNrdXAgYSBzbWFsbCBhcmVhIG9mIElSQU0gdXNlZCBmb3IgdGhlIHN1c3BlbmQgY29kZQorICogIENvcHkgc3VzcGVuZCBjb2RlIHRvIElSQU0KKyAqICBUcmFuc2ZlciBjb250cm9sIHRvIGNvZGUgaW4gSVJBTQorICogIFBsYWNlcyBEUkFNcyBpbiBzZWxmLXJlZnJlc2ggbW9kZQorICogIEVudGVyIGRpcmVjdC1ydW4gbW9kZQorICogIFNhdmUgc3RhdGUgb2YgSENMS19QTEwgUExMCisgKiAgRGlzYWJsZSBIQ0xLX1BMTCBQTEwKKyAqICBFbnRlciBoYWx0IG1vZGUgLSBDUFUgYW5kIGJ1c2VzIHdpbGwgc3RvcAorICogIFN5c3RlbSBlbnRlcnMgZGlyZWN0LXJ1biBtb2RlIHdoZW4gYW4gZW5hYmxlZCBldmVudCBvY2N1cnMKKyAqICBIQ0xLIFBMTCBzdGF0ZSBpcyByZXN0b3JlZAorICogIFJ1biBtb2RlIGlzIGVudGVyZWQKKyAqICBEUkFNUyBhcmUgcGxhY2VkIGJhY2sgaW50byBub3JtYWwgbW9kZQorICogIENvZGUgZXhlY3V0aW9uIHJldHVybnMgZnJvbSBJUkFNCisgKiAgSVJBTSBjb2RlIGFyZSB1c2VkIGZvciBzdXNwZW5kIGlzIHJlc3RvcmVkCisgKiAgU3VzcGVuZCBtb2RlIGlzIGV4aXRlZAorICovCisKKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcGxhdGZvcm0uaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJjbG9jay5oIgorCisjZGVmaW5lIFRFTVBfSVJBTV9BUkVBICBJT19BRERSRVNTKExQQzMyWFhfSVJBTV9CQVNFKQorCisvKgorICogQm90aCBTVEFOREJZIGFuZCBNRU0gc3VzcGVuZCBzdGF0ZXMgYXJlIGhhbmRsZWQgdGhlIHNhbWUgd2l0aCBubworICogbG9zcyBvZiBDUFUgb3IgbWVtb3J5IHN0YXRlCisgKi8KK3N0YXRpYyBpbnQgbHBjMzJ4eF9wbV9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJaW50ICgqbHBjMzJ4eF9zdXNwZW5kX3B0cikgKHZvaWQpOworCXZvaWQgKmlyYW1fc3dhcF9hcmVhOworCisJLyogQWxsb2NhdGUgc29tZSBzcGFjZSBmb3IgdGVtcG9yYXJ5IElSQU0gc3RvcmFnZSAqLworCWlyYW1fc3dhcF9hcmVhID0ga21hbGxvYyhscGMzMnh4X3N5c19zdXNwZW5kX3N6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlyYW1fc3dhcF9hcmVhKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIlBNIFN1c3BlbmQ6IGNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgdG8gc2F2ZSBwb3J0aW9uICIKKwkJCSJvZiBTUkFNXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogQmFja3VwIGEgc21hbGwgYXJlYSBvZiBJUkFNIHVzZWQgZm9yIHRoZSBzdXNwZW5kIGNvZGUgKi8KKwltZW1jcHkoaXJhbV9zd2FwX2FyZWEsICh2b2lkICopIFRFTVBfSVJBTV9BUkVBLAorCQlscGMzMnh4X3N5c19zdXNwZW5kX3N6KTsKKworCS8qCisJICogQ29weSBjb2RlIHRvIHN1c3BlbmQgc3lzdGVtIGludG8gSVJBTS4gVGhlIHN1c3BlbmQgY29kZQorCSAqIG5lZWRzIHRvIHJ1biBmcm9tIElSQU0gYXMgRFJBTSBtYXkgbm8gbG9uZ2VyIGJlIGF2YWlsYWJsZQorCSAqIHdoZW4gdGhlIFBMTCBpcyBzdG9wcGVkLgorCSAqLworCW1lbWNweSgodm9pZCAqKSBURU1QX0lSQU1fQVJFQSwgJmxwYzMyeHhfc3lzX3N1c3BlbmQsCisJCWxwYzMyeHhfc3lzX3N1c3BlbmRfc3opOworCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylURU1QX0lSQU1fQVJFQSwKKwkJKHVuc2lnbmVkIGxvbmcpKFRFTVBfSVJBTV9BUkVBKSArIGxwYzMyeHhfc3lzX3N1c3BlbmRfc3opOworCisJLyogVHJhbnNmZXIgdG8gc3VzcGVuZCBjb2RlIGluIElSQU0gKi8KKwlscGMzMnh4X3N1c3BlbmRfcHRyID0gKHZvaWQgKikgVEVNUF9JUkFNX0FSRUE7CisJZmx1c2hfY2FjaGVfYWxsKCk7CisJKHZvaWQpIGxwYzMyeHhfc3VzcGVuZF9wdHIoKTsKKworCS8qIFJlc3RvcmUgb3JpZ2luYWwgSVJBTSBjb250ZW50cyAqLworCW1lbWNweSgodm9pZCAqKSBURU1QX0lSQU1fQVJFQSwgaXJhbV9zd2FwX2FyZWEsCisJCWxwYzMyeHhfc3lzX3N1c3BlbmRfc3opOworCisJa2ZyZWUoaXJhbV9zd2FwX2FyZWEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgbHBjMzJ4eF9wbV9vcHMgPSB7CisJLnZhbGlkCT0gc3VzcGVuZF92YWxpZF9vbmx5X21lbSwKKwkuZW50ZXIJPSBscGMzMnh4X3BtX2VudGVyLAorfTsKKworI2RlZmluZSBFTUNfRFlOX01FTV9DVFJMX09GUyAweDIwCisjZGVmaW5lIEVNQ19TUk1NQyAgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgRU1DX0NUUkxfUkVHIGlvX3AydihMUEMzMlhYX0VNQ19CQVNFICsgRU1DX0RZTl9NRU1fQ1RSTF9PRlMpCitzdGF0aWMgaW50IF9faW5pdCBscGMzMnh4X3BtX2luaXQodm9pZCkKK3sKKwkvKgorCSAqIFNldHVwIFNEUkFNIHNlbGYtcmVmcmVzaCBjbG9jayB0byBhdXRvbWF0aWNhbGx5IGRpc2FibGUgbworCSAqIHN0YXJ0IG9mIHNlbGYtcmVmcmVzaC4gVGhpcyBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZS4KKwkgKi8KKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoRU1DX0NUUkxfUkVHKSB8IEVNQ19TUk1NQywgRU1DX0NUUkxfUkVHKTsKKworCXN1c3BlbmRfc2V0X29wcygmbHBjMzJ4eF9wbV9vcHMpOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKGxwYzMyeHhfcG1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxwYzMyeHgvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLWxwYzMyeHgvc2VyaWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI5Y2ZkYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9zZXJpYWwuYwpAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbHBjMzJ4eC9zZXJpYWwuYworICoKKyAqIEF1dGhvcjogS2V2aW4gV2VsbHMgPGtldmluLndlbGxzQG54cC5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5YUCBTZW1pY29uZHVjdG9ycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorCisjZGVmaW5lIExQQzMyWFhfU1VBUlRfRklGT19TSVpFCTY0CisKKy8qIFN0YW5kYXJkIDgyNTAvMTY1NTAgY29tcGF0aWJsZSBzZXJpYWwgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsX3N0ZF9wbGF0Zm9ybV9kYXRhW10gPSB7CisjaWZkZWYgQ09ORklHX0FSQ0hfTFBDMzJYWF9VQVJUNV9TRUxFQ1QKKwl7CisJCS5tZW1iYXNlICAgICAgICA9IGlvX3AydihMUEMzMlhYX1VBUlQ1X0JBU0UpLAorCQkubWFwYmFzZSAgICAgICAgPSBMUEMzMlhYX1VBUlQ1X0JBU0UsCisJCS5pcnEJCT0gSVJRX0xQQzMyWFhfVUFSVF9JSVI1LAorCQkudWFydGNsawk9IExQQzMyWFhfTUFJTl9PU0NfRlJFUSwKKwkJLnJlZ3NoaWZ0CT0gMiwKKwkJLmlvdHlwZQkJPSBVUElPX01FTTMyLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfQlVHR1lfVUFSVCB8CisJCQkJCVVQRl9TS0lQX1RFU1QsCisJfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX0xQQzMyWFhfVUFSVDNfU0VMRUNUCisJeworCQkubWVtYmFzZQk9IGlvX3AydihMUEMzMlhYX1VBUlQzX0JBU0UpLAorCQkubWFwYmFzZSAgICAgICAgPSBMUEMzMlhYX1VBUlQzX0JBU0UsCisJCS5pcnEJCT0gSVJRX0xQQzMyWFhfVUFSVF9JSVIzLAorCQkudWFydGNsawk9IExQQzMyWFhfTUFJTl9PU0NfRlJFUSwKKwkJLnJlZ3NoaWZ0CT0gMiwKKwkJLmlvdHlwZQkJPSBVUElPX01FTTMyLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfQlVHR1lfVUFSVCB8CisJCQkJCVVQRl9TS0lQX1RFU1QsCisJfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX0xQQzMyWFhfVUFSVDRfU0VMRUNUCisJeworCQkubWVtYmFzZQk9IGlvX3AydihMUEMzMlhYX1VBUlQ0X0JBU0UpLAorCQkubWFwYmFzZSAgICAgICAgPSBMUEMzMlhYX1VBUlQ0X0JBU0UsCisJCS5pcnEJCT0gSVJRX0xQQzMyWFhfVUFSVF9JSVI0LAorCQkudWFydGNsawk9IExQQzMyWFhfTUFJTl9PU0NfRlJFUSwKKwkJLnJlZ3NoaWZ0CT0gMiwKKwkJLmlvdHlwZQkJPSBVUElPX01FTTMyLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfQlVHR1lfVUFSVCB8CisJCQkJCVVQRl9TS0lQX1RFU1QsCisJfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX0xQQzMyWFhfVUFSVDZfU0VMRUNUCisJeworCQkubWVtYmFzZQk9IGlvX3AydihMUEMzMlhYX1VBUlQ2X0JBU0UpLAorCQkubWFwYmFzZSAgICAgICAgPSBMUEMzMlhYX1VBUlQ2X0JBU0UsCisJCS5pcnEJCT0gSVJRX0xQQzMyWFhfVUFSVF9JSVI2LAorCQkudWFydGNsawk9IExQQzMyWFhfTUFJTl9PU0NfRlJFUSwKKwkJLnJlZ3NoaWZ0CT0gMiwKKwkJLmlvdHlwZQkJPSBVUElPX01FTTMyLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfQlVHR1lfVUFSVCB8CisJCQkJCVVQRl9TS0lQX1RFU1QsCisJfSwKKyNlbmRpZgorCXsgfSwKK307CisKK3N0cnVjdCB1YXJ0aW5pdCB7CisJY2hhciAqdWFydF9ja19uYW1lOworCXUzMiBja19tb2RlX21hc2s7CisJdm9pZCBfX2lvbWVtICpwZGl2X2Nsa19yZWc7Cit9OworCitzdGF0aWMgc3RydWN0IHVhcnRpbml0IHVhcnRpbml0X2RhdGFbXSBfX2luaXRkYXRhID0geworI2lmZGVmIENPTkZJR19BUkNIX0xQQzMyWFhfVUFSVDVfU0VMRUNUCisJeworCQkudWFydF9ja19uYW1lID0gInVhcnQ1X2NrIiwKKwkJLmNrX21vZGVfbWFzayA9CisJCQlMUEMzMlhYX1VBUlRfQ0xLTU9ERV9MT0FEKExQQzMyWFhfVUFSVF9DTEtNT0RFX09OLCA1KSwKKwkJLnBkaXZfY2xrX3JlZyA9IExQQzMyWFhfQ0xLUFdSX1VBUlQ1X0NMS19DVFJMLAorCX0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9MUEMzMlhYX1VBUlQzX1NFTEVDVAorCXsKKwkJLnVhcnRfY2tfbmFtZSA9ICJ1YXJ0M19jayIsCisJCS5ja19tb2RlX21hc2sgPQorCQkJTFBDMzJYWF9VQVJUX0NMS01PREVfTE9BRChMUEMzMlhYX1VBUlRfQ0xLTU9ERV9PTiwgMyksCisJCS5wZGl2X2Nsa19yZWcgPSBMUEMzMlhYX0NMS1BXUl9VQVJUM19DTEtfQ1RSTCwKKwl9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfTFBDMzJYWF9VQVJUNF9TRUxFQ1QKKwl7CisJCS51YXJ0X2NrX25hbWUgPSAidWFydDRfY2siLAorCQkuY2tfbW9kZV9tYXNrID0KKwkJCUxQQzMyWFhfVUFSVF9DTEtNT0RFX0xPQUQoTFBDMzJYWF9VQVJUX0NMS01PREVfT04sIDQpLAorCQkucGRpdl9jbGtfcmVnID0gTFBDMzJYWF9DTEtQV1JfVUFSVDRfQ0xLX0NUUkwsCisJfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX0xQQzMyWFhfVUFSVDZfU0VMRUNUCisJeworCQkudWFydF9ja19uYW1lID0gInVhcnQ2X2NrIiwKKwkJLmNrX21vZGVfbWFzayA9CisJCQlMUEMzMlhYX1VBUlRfQ0xLTU9ERV9MT0FEKExQQzMyWFhfVUFSVF9DTEtNT0RFX09OLCA2KSwKKwkJLnBkaXZfY2xrX3JlZyA9IExQQzMyWFhfQ0xLUFdSX1VBUlQ2X0NMS19DVFJMLAorCX0sCisjZW5kaWYKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNlcmlhbF9zdGRfcGxhdGZvcm1fZGV2aWNlID0geworCS5uYW1lCQkJPSAic2VyaWFsODI1MCIsCisJLmlkCQkJPSAwLAorCS5kZXYJCQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSBzZXJpYWxfc3RkX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpscGMzMnh4X3NlcmlhbF9kZXZzW10gX19pbml0ZGF0YSA9IHsKKwkmc2VyaWFsX3N0ZF9wbGF0Zm9ybV9kZXZpY2UsCit9OworCit2b2lkIF9faW5pdCBscGMzMnh4X3NlcmlhbF9pbml0KHZvaWQpCit7CisJdTMyIHRtcCwgY2xrbW9kZXMgPSAwOworCXN0cnVjdCBjbGsgKmNsazsKKwl1bnNpZ25lZCBpbnQgcHVhcnQ7CisJaW50IGksIGo7CisKKwkvKiBVQVJUIGNsb2NrcyBhcmUgb2ZmLCBsZXQgY2xvY2sgZHJpdmVyIG1hbmFnZSB0aGVtICovCisJX19yYXdfd3JpdGVsKDAsIExQQzMyWFhfQ0xLUFdSX1VBUlRfQ0xLX0NUUkwpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodWFydGluaXRfZGF0YSk7IGkrKykgeworCQljbGsgPSBjbGtfZ2V0KE5VTEwsIHVhcnRpbml0X2RhdGFbaV0udWFydF9ja19uYW1lKTsKKwkJaWYgKCFJU19FUlIoY2xrKSkgeworCQkJY2xrX2VuYWJsZShjbGspOworCQkJc2VyaWFsX3N0ZF9wbGF0Zm9ybV9kYXRhW2ldLnVhcnRjbGsgPQorCQkJCWNsa19nZXRfcmF0ZShjbGspOworCQl9CisKKwkJLyogRmFsbCBiYWNrIG9uIG1haW4gb3NjIHJhdGUgaWYgY2xvY2sgcmF0ZSByZXR1cm4gZmFpbHMgKi8KKwkJaWYgKHNlcmlhbF9zdGRfcGxhdGZvcm1fZGF0YVtpXS51YXJ0Y2xrID09IDApCisJCQlzZXJpYWxfc3RkX3BsYXRmb3JtX2RhdGFbaV0udWFydGNsayA9CisJCQkJTFBDMzJYWF9NQUlOX09TQ19GUkVROworCisJCS8qIFNldHVwIFVBUlQgY2xvY2sgbW9kZXMgZm9yIGFsbCBVQVJUcywgZGlzYWJsZSBhdXRvY2xvY2sgKi8KKwkJY2xrbW9kZXMgfD0gdWFydGluaXRfZGF0YVtpXS5ja19tb2RlX21hc2s7CisKKwkJLyogcHJlLVVBUlQgY2xvY2sgZGl2aWRlciBzZXQgdG8gMSAqLworCQlfX3Jhd193cml0ZWwoMHgwMTAxLCB1YXJ0aW5pdF9kYXRhW2ldLnBkaXZfY2xrX3JlZyk7CisJfQorCisJLyogVGhpcyBuZWVkcyB0byBiZSBkb25lIGFmdGVyIGFsbCBVQVJUIGNsb2NrcyBhcmUgc2V0dXAgKi8KKwlfX3Jhd193cml0ZWwoY2xrbW9kZXMsIExQQzMyWFhfVUFSVENUTF9DTEtNT0RFKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh1YXJ0aW5pdF9kYXRhKSAtIDE7IGkrKykgeworCQkvKiBGb3JjZSBhIGZsdXNoIG9mIHRoZSBSWCBGSUZPcyB0byB3b3JrIGFyb3VuZCBhIEhXIGJ1ZyAqLworCQlwdWFydCA9IHNlcmlhbF9zdGRfcGxhdGZvcm1fZGF0YVtpXS5tYXBiYXNlOworCQlfX3Jhd193cml0ZWwoMHhDMSwgTFBDMzJYWF9VQVJUX0lJUl9GQ1IocHVhcnQpKTsKKwkJX19yYXdfd3JpdGVsKDB4MDAsIExQQzMyWFhfVUFSVF9ETExfRklGTyhwdWFydCkpOworCQlqID0gTFBDMzJYWF9TVUFSVF9GSUZPX1NJWkU7CisJCXdoaWxlIChqLS0pCisJCQl0bXAgPSBfX3Jhd19yZWFkbChMUEMzMlhYX1VBUlRfRExMX0ZJRk8ocHVhcnQpKTsKKwkJX19yYXdfd3JpdGVsKDAsIExQQzMyWFhfVUFSVF9JSVJfRkNSKHB1YXJ0KSk7CisJfQorCisJLyogRGlzYWJsZSBVQVJUNS0+VVNCIHRyYW5zcGFyZW50IG1vZGUgb3IgVVNCIHdvbid0IHdvcmsgKi8KKwl0bXAgPSBfX3Jhd19yZWFkbChMUEMzMlhYX1VBUlRDVExfQ1RSTCk7CisJdG1wICY9IH5MUEMzMlhYX1VBUlRfVTVfUk9VVEVfVE9fVVNCOworCV9fcmF3X3dyaXRlbCh0bXAsIExQQzMyWFhfVUFSVENUTF9DVFJMKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGxwYzMyeHhfc2VyaWFsX2RldnMsCisJCUFSUkFZX1NJWkUobHBjMzJ4eF9zZXJpYWxfZGV2cykpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1scGMzMnh4L3N1c3BlbmQuUyBiL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9zdXNwZW5kLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc0ZjlmMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9zdXNwZW5kLlMKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWxwYzMyeHgvc3VzcGVuZC5TCisgKgorICogT3JpZ2luYWwgYXV0aG9yczogRG1pdHJ5IENoaWdpcmV2LCBWaXRhbHkgV29vbCA8c291cmNlQG12aXN0YS5jb20+CisgKiBNb2RpZmllZCBieSBLZXZpbiBXZWxscyA8a2V2aW4ud2VsbHNAbnhwLmNvbT4KKyAqCisgKiAyMDA1IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxtYWNoL3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisvKiBVc2luZyBuYW1lZCByZWdpc3RlciBkZWZpbmVzIG1ha2VzIHRoZSBjb2RlIGVhc2llciB0byBmb2xsb3cgKi8KKyNkZWZpbmUgV09SSzFfUkVHCQkJcjAKKyNkZWZpbmUgV09SSzJfUkVHCQkJcjEKKyNkZWZpbmUgU0FWRURfSENMS19ESVZfUkVHCQlyMgorI2RlZmluZSBTQVZFRF9IQ0xLX1BMTF9SRUcJCXIzCisjZGVmaW5lIFNBVkVEX0RSQU1fQ0xLQ1RSTF9SRUcJCXI0CisjZGVmaW5lIFNBVkVEX1BXUl9DVFJMX1JFRwkJcjUKKyNkZWZpbmUgQ0xLUFdSQkFTRV9SRUcJCQlyNgorI2RlZmluZSBFTUNCQVNFX1JFRwkJCXI3CisKKyNkZWZpbmUgTFBDMzJYWF9FTUNfU1RBVFVTX09GRlMJCTB4MDQKKyNkZWZpbmUgTFBDMzJYWF9FTUNfU1RBVFVTX0JVU1kJCTB4MQorI2RlZmluZSBMUEMzMlhYX0VNQ19TVEFUVVNfU0VMRl9SRlNICTB4NAorCisjZGVmaW5lIExQQzMyWFhfQ0xLUFdSX1BXUl9DVFJMX09GRlMJMHg0NAorI2RlZmluZSBMUEMzMlhYX0NMS1BXUl9IQ0xLX0RJVl9PRkZTCTB4NDAKKyNkZWZpbmUgTFBDMzJYWF9DTEtQV1JfSENMS1BMTF9DVFJMX09GRlMgMHg1OAorCisjZGVmaW5lIENMS1BXUl9QQ0xLX0RJVl9NQVNLCQkweEZGRkZGRTdGCisKKwkudGV4dAorCitFTlRSWShscGMzMnh4X3N5c19zdXNwZW5kKQorCUAgU2F2ZSBhIGNvcHkgb2YgdGhlIHVzZWQgcmVnaXN0ZXJzIGluIElSQU0sIHIwIGlzIGNvcnJ1cHRlZAorCWFkcglyMCwgdG1wX3N0YWNrX2VuZAorCXN0bWZkCXIwISwge3IzIC0gcjcsIHNwLCBscn0KKworCUAgTG9hZCBhIGZldyBjb21tb24gcmVnaXN0ZXIgYWRkcmVzc2VzCisJYWRyCVdPUksxX1JFRywgcmVnX2Jhc2VzCisJbGRyCUNMS1BXUkJBU0VfUkVHLCBbV09SSzFfUkVHLCAjMF0KKwlsZHIJRU1DQkFTRV9SRUcsIFtXT1JLMV9SRUcsICM0XQorCisJbGRyCVNBVkVEX1BXUl9DVFJMX1JFRywgW0NMS1BXUkJBU0VfUkVHLFwKKwkJI0xQQzMyWFhfQ0xLUFdSX1BXUl9DVFJMX09GRlNdCisJb3JyCVdPUksxX1JFRywgU0FWRURfUFdSX0NUUkxfUkVHLCAjTFBDMzJYWF9DTEtQV1JfU0RSQU1fU0VMRl9SRlNICisKKwlAIFdhaXQgZm9yIFNEUkFNIGJ1c3kgc3RhdHVzIHRvIGdvIGJ1c3kgYW5kIHRoZW4gaWRsZQorCUAgVGhpcyBndWFyYW50ZWVzIGEgc21hbGwgd2luZG93cyB3aGVyZSBEUkFNIGlzbid0IGJ1c3kKKzE6CisJbGRyCVdPUksyX1JFRywgW0VNQ0JBU0VfUkVHLCAjTFBDMzJYWF9FTUNfU1RBVFVTX09GRlNdCisJYW5kCVdPUksyX1JFRywgV09SSzJfUkVHLCAjTFBDMzJYWF9FTUNfU1RBVFVTX0JVU1kKKwljbXAJV09SSzJfUkVHLCAjTFBDMzJYWF9FTUNfU1RBVFVTX0JVU1kKKwlibmUJMWIgQCBCcmFuY2ggd2hpbGUgaWRsZQorMjoKKwlsZHIJV09SSzJfUkVHLCBbRU1DQkFTRV9SRUcsICNMUEMzMlhYX0VNQ19TVEFUVVNfT0ZGU10KKwlhbmQJV09SSzJfUkVHLCBXT1JLMl9SRUcsICNMUEMzMlhYX0VNQ19TVEFUVVNfQlVTWQorCWNtcAlXT1JLMl9SRUcsICNMUEMzMlhYX0VNQ19TVEFUVVNfQlVTWQorCWJlcQkyYiBAIEJyYW5jaCB1bnRpbCBpZGxlCisKKwlAIFNldHVwIHNlbGYtcmVmcmVzaCB3aXRoIHN1cHBvcnQgZm9yIG1hbnVhbCBleGl0IG9mCisJQCBzZWxmLXJlZnJlc2ggbW9kZQorCXN0cglXT1JLMV9SRUcsIFtDTEtQV1JCQVNFX1JFRywgI0xQQzMyWFhfQ0xLUFdSX1BXUl9DVFJMX09GRlNdCisJb3JyCVdPUksyX1JFRywgV09SSzFfUkVHLCAjTFBDMzJYWF9DTEtQV1JfVVBEX1NEUkFNX1NFTEZfUkZTSAorCXN0cglXT1JLMl9SRUcsIFtDTEtQV1JCQVNFX1JFRywgI0xQQzMyWFhfQ0xLUFdSX1BXUl9DVFJMX09GRlNdCisJc3RyCVdPUksxX1JFRywgW0NMS1BXUkJBU0VfUkVHLCAjTFBDMzJYWF9DTEtQV1JfUFdSX0NUUkxfT0ZGU10KKworCUAgV2FpdCBmb3Igc2VsZi1yZWZyZXNoIGFja25vd2xlZGdlLCBjbG9ja3MgdG8gdGhlIERSQU0gZGV2aWNlCisJQCB3aWxsIGF1dG9tYXRpY2FsbHkgc3RvcCBvbiBzdGFydCBvZiBzZWxmLXJlZnJlc2gKKzM6CisJbGRyCVdPUksyX1JFRywgW0VNQ0JBU0VfUkVHLCAjTFBDMzJYWF9FTUNfU1RBVFVTX09GRlNdCisJYW5kCVdPUksyX1JFRywgV09SSzJfUkVHLCAjTFBDMzJYWF9FTUNfU1RBVFVTX1NFTEZfUkZTSAorCWNtcAlXT1JLMl9SRUcsICNMUEMzMlhYX0VNQ19TVEFUVVNfU0VMRl9SRlNICisJYm5lCTNiIEAgQnJhbmNoIHVudGlsIHNlbGYtcmVmcmVzaCBtb2RlIHN0YXJ0cworCisJQCBFbnRlciBkaXJlY3QtcnVuIG1vZGUgZnJvbSBydW4gbW9kZQorCWJpYwlXT1JLMV9SRUcsIFdPUksxX1JFRywgI0xQQzMyWFhfQ0xLUFdSX1NFTEVDVF9SVU5fTU9ERQorCXN0cglXT1JLMV9SRUcsIFtDTEtQV1JCQVNFX1JFRywgI0xQQzMyWFhfQ0xLUFdSX1BXUl9DVFJMX09GRlNdCisKKwlAIFNhZmUgZGlzYWJsZSBvZiBEUkFNIGNsb2NrIGluIEVNQyBibG9jaywgcHJldmVudHMgRERSIHN5bmMKKwlAIGlzc3VlcyBvbiByZXN0YXJ0CisJbGRyCVNBVkVEX0hDTEtfRElWX1JFRywgW0NMS1BXUkJBU0VfUkVHLFwKKwkJI0xQQzMyWFhfQ0xLUFdSX0hDTEtfRElWX09GRlNdCisJYW5kCVdPUksyX1JFRywgU0FWRURfSENMS19ESVZfUkVHLCAjQ0xLUFdSX1BDTEtfRElWX01BU0sKKwlzdHIJV09SSzJfUkVHLCBbQ0xLUFdSQkFTRV9SRUcsICNMUEMzMlhYX0NMS1BXUl9IQ0xLX0RJVl9PRkZTXQorCisJQCBTYXZlIEhDTEsgUExMIHN0YXRlIGFuZCBkaXNhYmxlIEhDTEsgUExMCisJbGRyCVNBVkVEX0hDTEtfUExMX1JFRywgW0NMS1BXUkJBU0VfUkVHLFwKKwkJI0xQQzMyWFhfQ0xLUFdSX0hDTEtQTExfQ1RSTF9PRkZTXQorCWJpYwlXT1JLMl9SRUcsIFNBVkVEX0hDTEtfUExMX1JFRywgI0xQQzMyWFhfQ0xLUFdSX0hDTEtQTExfUE9XRVJfVVAKKwlzdHIJV09SSzJfUkVHLCBbQ0xLUFdSQkFTRV9SRUcsICNMUEMzMlhYX0NMS1BXUl9IQ0xLUExMX0NUUkxfT0ZGU10KKworCUAgRW50ZXIgc3RvcCBtb2RlIHVudGlsIGFuIGVuYWJsZWQgZXZlbnQgb2NjdXJzCisJb3JyCVdPUksxX1JFRywgV09SSzFfUkVHLCAjTFBDMzJYWF9DTEtQV1JfU1RPUF9NT0RFX0NUUkwKKwlzdHIJV09SSzFfUkVHLCBbQ0xLUFdSQkFTRV9SRUcsICNMUEMzMlhYX0NMS1BXUl9QV1JfQ1RSTF9PRkZTXQorCS5yZXB0IDkKKwlub3AKKwkuZW5kcgorCisJQCBDbGVhciBzdG9wIHN0YXR1cworCWJpYwlXT1JLMV9SRUcsIFdPUksxX1JFRywgI0xQQzMyWFhfQ0xLUFdSX1NUT1BfTU9ERV9DVFJMCisKKwlAIFJlc3RvcmUgb3JpZ2luYWwgSENMSyBQTEwgdmFsdWUgYW5kIHdhaXQgZm9yIFBMTCBsb2NrCisJc3RyCVNBVkVEX0hDTEtfUExMX1JFRywgW0NMS1BXUkJBU0VfUkVHLFwKKwkJI0xQQzMyWFhfQ0xLUFdSX0hDTEtQTExfQ1RSTF9PRkZTXQorNDoKKwlsZHIJV09SSzJfUkVHLCBbQ0xLUFdSQkFTRV9SRUcsICNMUEMzMlhYX0NMS1BXUl9IQ0xLUExMX0NUUkxfT0ZGU10KKwlhbmQJV09SSzJfUkVHLCBXT1JLMl9SRUcsICNMUEMzMlhYX0NMS1BXUl9IQ0xLUExMX1BMTF9TVFMKKwlibmUJNGIKKworCUAgUmUtZW50ZXIgcnVuIG1vZGUgd2l0aCBzZWxmLXJlZnJlc2ggZmxhZyBjbGVhcmVkLCBidXQgbm8gRFJBTQorCUAgdXBkYXRlIHlldC4gRFJBTSBpcyBzdGlsbCBpbiBzZWxmLXJlZnJlc2gKKwlzdHIJU0FWRURfUFdSX0NUUkxfUkVHLCBbQ0xLUFdSQkFTRV9SRUcsXAorCQkjTFBDMzJYWF9DTEtQV1JfUFdSX0NUUkxfT0ZGU10KKworCUAgUmVzdG9yZSBvcmlnaW5hbCBEUkFNIGNsb2NrIG1vZGUgdG8gcmVzdG9yZSBEUkFNIGNsb2NrcworCXN0cglTQVZFRF9IQ0xLX0RJVl9SRUcsIFtDTEtQV1JCQVNFX1JFRyxcCisJCSNMUEMzMlhYX0NMS1BXUl9IQ0xLX0RJVl9PRkZTXQorCisJQCBDbGVhciBzZWxmLXJlZnJlc2ggbW9kZQorCW9ycglXT1JLMV9SRUcsIFNBVkVEX1BXUl9DVFJMX1JFRyxcCisJCSNMUEMzMlhYX0NMS1BXUl9VUERfU0RSQU1fU0VMRl9SRlNICisJc3RyCVdPUksxX1JFRywgW0NMS1BXUkJBU0VfUkVHLCAjTFBDMzJYWF9DTEtQV1JfUFdSX0NUUkxfT0ZGU10KKwlzdHIJU0FWRURfUFdSX0NUUkxfUkVHLCBbQ0xLUFdSQkFTRV9SRUcsXAorCQkjTFBDMzJYWF9DTEtQV1JfUFdSX0NUUkxfT0ZGU10KKworCUAgV2FpdCBmb3IgRU1DIHRvIGNsZWFyIHNlbGYtcmVmcmVzaCBtb2RlCis1OgorCWxkcglXT1JLMl9SRUcsIFtFTUNCQVNFX1JFRywgI0xQQzMyWFhfRU1DX1NUQVRVU19PRkZTXQorCWFuZAlXT1JLMl9SRUcsIFdPUksyX1JFRywgI0xQQzMyWFhfRU1DX1NUQVRVU19TRUxGX1JGU0gKKwlibmUJNWIgQCBCcmFuY2ggdW50aWwgc2VsZi1yZWZyZXNoIGhhcyBleGl0ZWQKKworCUAgcmVzdG9yZSByZWdzIGFuZCByZXR1cm4KKwlhZHIJcjAsIHRtcF9zdGFjaworCWxkbWZkCXIwISwge3IzIC0gcjcsIHNwLCBwY30KKworcmVnX2Jhc2VzOgorCS5sb25nCUlPX0FERFJFU1MoTFBDMzJYWF9DTEtfUE1fQkFTRSkKKwkubG9uZwlJT19BRERSRVNTKExQQzMyWFhfRU1DX0JBU0UpCisKK3RtcF9zdGFjazoKKwkubG9uZwkwLCAwLCAwLCAwLCAwLCAwLCAwCit0bXBfc3RhY2tfZW5kOgorCitFTlRSWShscGMzMnh4X3N5c19zdXNwZW5kX3N6KQorCS53b3JkCS4gLSBscGMzMnh4X3N5c19zdXNwZW5kCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxwYzMyeHgvdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC90aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMGRkNGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWxwYzMyeHgvdGltZXIuYwpAQCAtMCwwICsxLDE4MiBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbHBjMzJ4eC90aW1lci5jCisgKgorICogQXV0aG9yOiBLZXZpbiBXZWxscyA8a2V2aW4ud2VsbHNAbnhwLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSAyMDEwIE5YUCBTZW1pY29uZHVjdG9ycworICogQ29weXJpZ2h0IChDKSAyMDA5IEZvbnR5cyBVbml2ZXJzaXR5IG9mIEFwcGxpZWQgU2NpZW5jZXMsIEVpbmRob3ZlbgorICogICAgICAgICAgICAgICAgICAgIEVkIFNjaG91dGVuIDxlLnNjaG91dGVuQGZvbnR5cy5ubD4KKyAqICAgICAgICAgICAgICAgICAgICBMYXVyZW5zIFRpbW1lcm1hbnMgPGwudGltbWVybWFuc0Bmb250eXMubmw+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcGxhdGZvcm0uaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKworc3RhdGljIGN5Y2xlX3QgbHBjMzJ4eF9jbGtzcmNfcmVhZChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQoreworCXJldHVybiAoY3ljbGVfdClfX3Jhd19yZWFkbChMQ1AzMlhYX1RJTUVSX1RDKExQQzMyWFhfVElNRVIxX0JBU0UpKTsKK30KKworc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBscGMzMnh4X2Nsa3NyYyA9IHsKKwkubmFtZQk9ICJscGMzMnh4X2Nsa3NyYyIsCisJLnNoaWZ0CT0gMjQsCisJLnJhdGluZwk9IDMwMCwKKwkucmVhZAk9IGxwYzMyeHhfY2xrc3JjX3JlYWQsCisJLm1hc2sJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKKwkuZmxhZ3MJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKK307CisKK3N0YXRpYyBpbnQgbHBjMzJ4eF9jbGtldnRfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGRlbHRhLAorICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldikKK3sKKwlfX3Jhd193cml0ZWwoTENQMzJYWF9USU1FUl9DTlRSX1RDUl9SRVNFVCwKKwkJTENQMzJYWF9USU1FUl9UQ1IoTFBDMzJYWF9USU1FUjBfQkFTRSkpOworCV9fcmF3X3dyaXRlbChkZWx0YSwgTENQMzJYWF9USU1FUl9QUihMUEMzMlhYX1RJTUVSMF9CQVNFKSk7CisJX19yYXdfd3JpdGVsKExDUDMyWFhfVElNRVJfQ05UUl9UQ1JfRU4sCisJCUxDUDMyWFhfVElNRVJfVENSKExQQzMyWFhfVElNRVIwX0JBU0UpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBscGMzMnh4X2Nsa2V2dF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldikKK3sKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCQlXQVJOX09OKDEpOworCQlicmVhazsKKworCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgorCQkvKgorCQkgKiBEaXNhYmxlIHRoZSB0aW1lci4gV2hlbiB1c2luZyBvbmVzaG90LCB3ZSBtdXN0IGFsc28KKwkJICogZGlzYWJsZSB0aGUgdGltZXIgdG8gd2FpdCBmb3IgdGhlIGZpcnN0IGNhbGwgdG8KKwkJICogc2V0X25leHRfZXZlbnQoKS4KKwkJICovCisJCV9fcmF3X3dyaXRlbCgwLCBMQ1AzMlhYX1RJTUVSX1RDUihMUEMzMlhYX1RJTUVSMF9CQVNFKSk7CisJCWJyZWFrOworCisJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9SRVNVTUU6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgbHBjMzJ4eF9jbGtldnQgPSB7CisJLm5hbWUJCT0gImxwYzMyeHhfY2xrZXZ0IiwKKwkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9PTkVTSE9ULAorCS5zaGlmdAkJPSAzMiwKKwkucmF0aW5nCQk9IDMwMCwKKwkuc2V0X25leHRfZXZlbnQJPSBscGMzMnh4X2Nsa2V2dF9uZXh0X2V2ZW50LAorCS5zZXRfbW9kZQk9IGxwYzMyeHhfY2xrZXZ0X21vZGUsCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgbHBjMzJ4eF90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCA9ICZscGMzMnh4X2Nsa2V2dDsKKworCS8qIENsZWFyIG1hdGNoICovCisJX19yYXdfd3JpdGVsKExDUDMyWFhfVElNRVJfQ05UUl9NVENIX0JJVCgwKSwKKwkJTENQMzJYWF9USU1FUl9JUihMUEMzMlhYX1RJTUVSMF9CQVNFKSk7CisKKwlldnQtPmV2ZW50X2hhbmRsZXIoZXZ0KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gbHBjMzJ4eF90aW1lcl9pcnEgPSB7CisJLm5hbWUJCT0gIkxQQzMyWFggVGltZXIgVGljayIsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAorCS5oYW5kbGVyCT0gbHBjMzJ4eF90aW1lcl9pbnRlcnJ1cHQsCit9OworCisvKgorICogVGhlIGNsb2NrIG1hbmFnZW1lbnQgZHJpdmVyIGlzbid0IGluaXRpYWxpemVkIGF0IHRoaXMgcG9pbnQsIHNvIHRoZQorICogY2xvY2tzIG5lZWQgdG8gYmUgZW5hYmxlZCBoZXJlIG1hbnVhbGx5IGFuZCB0aGVuIHRhZ2dlZCBhcyB1c2VkIGluCisgKiB0aGUgY2xvY2sgZHJpdmVyIGluaXRpYWxpemF0aW9uCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBscGMzMnh4X3RpbWVyX2luaXQodm9pZCkKK3sKKwl1MzIgY2xrcmF0ZSwgcGxscmVnOworCisJLyogRW5hYmxlIHRpbWVyIGNsb2NrICovCisJX19yYXdfd3JpdGVsKExQQzMyWFhfQ0xLUFdSX1RNUlBXTUNMS19USU1FUjBfRU4gfAorCQlMUEMzMlhYX0NMS1BXUl9UTVJQV01DTEtfVElNRVIxX0VOLAorCQlMUEMzMlhYX0NMS1BXUl9USU1FUlNfUFdNU19DTEtfQ1RSTF8xKTsKKworCS8qCisJICogVGhlIGNsb2NrIGRyaXZlciBpc24ndCBpbml0aWFsaXplZCBhdCB0aGlzIHBvaW50LiBTbyBkZXRlcm1pbmUgaWYKKwkgKiB0aGUgU1lTQ0xLIGlzIGRyaXZlbiBmcm9tIHRoZSBQTEwzOTcgb3IgbWFpbiBvc2NpbGxhdG9yIGFuZCB0aGVuIHVzZQorCSAqIGl0IHRvIGNvbXB1dGUgdGhlIFBMTCBmcmVxdWVuY3kgYW5kIHRoZSBQQ0xLIGRpdmlkZXIgdG8gZ2V0IHRoZSBiYXNlCisJICogdGltZXIgcmF0ZXMuIFRoaXMgcmF0ZSBpcyBuZWVkZWQgdG8gY29tcHV0ZSB0aGUgdGljayByYXRlLgorCSAqLworCWlmIChjbGtfaXNfc3lzY2xrX21haW5vc2MoKSAhPSAwKQorCQljbGtyYXRlID0gTFBDMzJYWF9NQUlOX09TQ19GUkVROworCWVsc2UKKwkJY2xrcmF0ZSA9IDM5NyAqIExQQzMyWFhfQ0xPQ0tfT1NDX0ZSRVE7CisKKwkvKiBHZXQgQVJNIEhDTEtQTEwgcmVnaXN0ZXIgYW5kIGNvbnZlcnQgaXQgaW50byBhIGZyZXF1ZW5jeSAqLworCXBsbHJlZyA9IF9fcmF3X3JlYWRsKExQQzMyWFhfQ0xLUFdSX0hDTEtQTExfQ1RSTCkgJiAweDFGRkZGOworCWNsa3JhdGUgPSBjbGtfZ2V0X3BsbHJhdGVfZnJvbV9yZWcoY2xrcmF0ZSwgcGxscmVnKTsKKworCS8qIEdldCBQQ0xLIGRpdmlkZXIgYW5kIGRpdmlkZSBBUk0gUExMIGNsb2NrIGJ5IGl0IHRvIGdldCB0aW1lciByYXRlICovCisJY2xrcmF0ZSA9IGNsa3JhdGUgLyBjbGtfZ2V0X3BjbGtfZGl2KCk7CisKKwkvKiBJbml0aWFsIHRpbWVyIHNldHVwICovCisJX19yYXdfd3JpdGVsKDAsIExDUDMyWFhfVElNRVJfVENSKExQQzMyWFhfVElNRVIwX0JBU0UpKTsKKwlfX3Jhd193cml0ZWwoTENQMzJYWF9USU1FUl9DTlRSX01UQ0hfQklUKDApLAorCQlMQ1AzMlhYX1RJTUVSX0lSKExQQzMyWFhfVElNRVIwX0JBU0UpKTsKKwlfX3Jhd193cml0ZWwoMSwgTENQMzJYWF9USU1FUl9NUjAoTFBDMzJYWF9USU1FUjBfQkFTRSkpOworCV9fcmF3X3dyaXRlbChMQ1AzMlhYX1RJTUVSX0NOVFJfTUNSX01UQ0goMCkgfAorCQlMQ1AzMlhYX1RJTUVSX0NOVFJfTUNSX1NUT1AoMCkgfAorCQlMQ1AzMlhYX1RJTUVSX0NOVFJfTUNSX1JFU0VUKDApLAorCQlMQ1AzMlhYX1RJTUVSX01DUihMUEMzMlhYX1RJTUVSMF9CQVNFKSk7CisKKwkvKiBTZXR1cCB0aWNrIGludGVycnVwdCAqLworCXNldHVwX2lycShJUlFfTFBDMzJYWF9USU1FUjAsICZscGMzMnh4X3RpbWVyX2lycSk7CisKKwkvKiBTZXR1cCB0aGUgY2xvY2tldmVudCBzdHJ1Y3R1cmUuICovCisJbHBjMzJ4eF9jbGtldnQubXVsdCA9IGRpdl9zYyhjbGtyYXRlLCBOU0VDX1BFUl9TRUMsCisJCWxwYzMyeHhfY2xrZXZ0LnNoaWZ0KTsKKwlscGMzMnh4X2Nsa2V2dC5tYXhfZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKC0xLAorCQkmbHBjMzJ4eF9jbGtldnQpOworCWxwYzMyeHhfY2xrZXZ0Lm1pbl9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMSwKKwkJJmxwYzMyeHhfY2xrZXZ0KSArIDE7CisJbHBjMzJ4eF9jbGtldnQuY3B1bWFzayA9IGNwdW1hc2tfb2YoMCk7CisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZscGMzMnh4X2Nsa2V2dCk7CisKKwkvKiBVc2UgdGltZXIxIGFzIGNsb2NrIHNvdXJjZS4gKi8KKwlfX3Jhd193cml0ZWwoTENQMzJYWF9USU1FUl9DTlRSX1RDUl9SRVNFVCwKKwkJTENQMzJYWF9USU1FUl9UQ1IoTFBDMzJYWF9USU1FUjFfQkFTRSkpOworCV9fcmF3X3dyaXRlbCgwLCBMQ1AzMlhYX1RJTUVSX1BSKExQQzMyWFhfVElNRVIxX0JBU0UpKTsKKwlfX3Jhd193cml0ZWwoMCwgTENQMzJYWF9USU1FUl9NQ1IoTFBDMzJYWF9USU1FUjFfQkFTRSkpOworCV9fcmF3X3dyaXRlbChMQ1AzMlhYX1RJTUVSX0NOVFJfVENSX0VOLAorCQlMQ1AzMlhYX1RJTUVSX1RDUihMUEMzMlhYX1RJTUVSMV9CQVNFKSk7CisJbHBjMzJ4eF9jbGtzcmMubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQoY2xrcmF0ZSwKKwkJbHBjMzJ4eF9jbGtzcmMuc2hpZnQpOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZscGMzMnh4X2Nsa3NyYyk7Cit9CisKK3N0cnVjdCBzeXNfdGltZXIgbHBjMzJ4eF90aW1lciA9IHsKKwkuaW5pdAkJPSAmbHBjMzJ4eF90aW1lcl9pbml0LAorfTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW1zbS9NYWtlZmlsZQppbmRleCA2NjY3N2YwLi43ZmY4MDIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW1zbS9NYWtlZmlsZQpAQCAtMTUsNyArMTUsNyBAQAogb2JqLSQoQ09ORklHX01TTV9TTUQpICs9IHNtZC5vIHNtZF9kZWJ1Zy5vCiBvYmotJChDT05GSUdfTVNNX1NNRCkgKz0gbGFzdF9yYWRpb19sb2cubwogCi1vYmotJChDT05GSUdfTUFDSF9UUk9VVCkgKz0gYm9hcmQtdHJvdXQubyBkZXZpY2VzLW1zbTd4MDAubworb2JqLSQoQ09ORklHX01BQ0hfVFJPVVQpICs9IGJvYXJkLXRyb3V0Lm8gYm9hcmQtdHJvdXQtZ3Bpby5vIGRldmljZXMtbXNtN3gwMC5vCiBvYmotJChDT05GSUdfTUFDSF9IQUxJQlVUKSArPSBib2FyZC1oYWxpYnV0Lm8gZGV2aWNlcy1tc203eDAwLm8KIG9iai0kKENPTkZJR19BUkNIX01TTTdYMzApICs9IGJvYXJkLW1zbTd4MzAubyBkZXZpY2VzLW1zbTd4MzAubwogb2JqLSQoQ09ORklHX0FSQ0hfUVNEOFg1MCkgKz0gYm9hcmQtcXNkOHg1MC5vIGRldmljZXMtcXNkOHg1MC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9hY3B1Y2xvY2stYXJtMTEuYyBiL2FyY2gvYXJtL21hY2gtbXNtL2FjcHVjbG9jay1hcm0xMS5jCmluZGV4IGFmNWU4NWIuLmYwNjBhMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2FjcHVjbG9jay1hcm0xMS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2FjcHVjbG9jay1hcm0xMS5jCkBAIC05OCw3ICs5OCw3IEBACiAKIC8qCiAgKiBBQ1BVIHNwZWVkIHRhYmxlLiBDb21wbGV0ZSB0YWJsZSBpcyBzaG93biBidXQgY2VydGFpbiBzcGVlZHMgYXJlIGNvbW1lbnRlZAotICogb3V0IHRvIG9wdGltaXplZCBzcGVlZCBzd2l0Y2hpbmcuIEluaXRhbGl6ZSBsb29wc19wZXJfamlmZnkgdG8gMC4KKyAqIG91dCB0byBvcHRpbWl6ZWQgc3BlZWQgc3dpdGNoaW5nLiBJbml0aWFsaXplIGxvb3BzX3Blcl9qaWZmeSB0byAwLgogICoKICAqIFRhYmxlIHN0ZXBwaW5nIHVwL2Rvd24gaXMgb3B0aW1pemVkIGZvciAyNTZtaHoganVtcHMgd2hpbGUgc3RheWluZyBvbiB0aGUKICAqIHNhbWUgUExMLgpAQCAtNDk0LDcgKzQ5NCw3IEBACiAgKiBDbG9jayBkcml2ZXIgaW5pdGlhbGl6YXRpb24KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotLyogSW5pdGFsaXplIHRoZSBscGogZmllbGQgaW4gdGhlIGFjcHVfZnJlcV90YmwuICovCisvKiBJbml0aWFsaXplIHRoZSBscGogZmllbGQgaW4gdGhlIGFjcHVfZnJlcV90YmwuICovCiBzdGF0aWMgdm9pZCBfX2luaXQgbHBqX2luaXQodm9pZCkKIHsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLXRyb3V0LWdwaW8uYyBiL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLXRyb3V0LWdwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjNkMjEzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtdHJvdXQtZ3Bpby5jCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1tc20vZ3Bpby5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEhQIExhYnMKKyAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBQYXZlbCBNYWNoZWsgPHBhdmVsQHVjdy5jej4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgImJvYXJkLXRyb3V0LmgiCisKK3N0cnVjdCBtc21fZ3Bpb19jaGlwIHsKKwlzdHJ1Y3QgZ3Bpb19jaGlwCWNoaXA7CisJdm9pZCBfX2lvbWVtCQkqcmVnOwkvKiBCYXNlIG9mIHJlZ2lzdGVyIGJhbmsgKi8KKwl1OAkJCXNoYWRvdzsKK307CisKKyNkZWZpbmUgdG9fbXNtX2dwaW9fY2hpcChjKSBjb250YWluZXJfb2YoYywgc3RydWN0IG1zbV9ncGlvX2NoaXAsIGNoaXApCisKK3N0YXRpYyBpbnQgbXNtX2dwaW9saWJfZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgbXNtX2dwaW9fY2hpcCAqbXNtX2dwaW8gPSB0b19tc21fZ3Bpb19jaGlwKGNoaXApOworCXVuc2lnbmVkIG1hc2sgPSAxIDw8IG9mZnNldDsKKworCXJldHVybiAhIShyZWFkYihtc21fZ3Bpby0+cmVnKSAmIG1hc2spOworfQorCitzdGF0aWMgdm9pZCBtc21fZ3Bpb2xpYl9zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsKQoreworCXN0cnVjdCBtc21fZ3Bpb19jaGlwICptc21fZ3BpbyA9IHRvX21zbV9ncGlvX2NoaXAoY2hpcCk7CisJdW5zaWduZWQgbWFzayA9IDEgPDwgb2Zmc2V0OworCisJaWYgKHZhbCkKKwkJbXNtX2dwaW8tPnNoYWRvdyB8PSBtYXNrOworCWVsc2UKKwkJbXNtX2dwaW8tPnNoYWRvdyAmPSB+bWFzazsKKworCXdyaXRlYihtc21fZ3Bpby0+c2hhZG93LCBtc21fZ3Bpby0+cmVnKTsKK30KKworc3RhdGljIGludCBtc21fZ3Bpb2xpYl9kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkJdW5zaWduZWQgb2Zmc2V0KQoreworCW1zbV9ncGlvbGliX3NldChjaGlwLCBvZmZzZXQsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1zbV9ncGlvbGliX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkJIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbCkKK3sKKwltc21fZ3Bpb2xpYl9zZXQoY2hpcCwgb2Zmc2V0LCB2YWwpOworCXJldHVybiAwOworfQorCisjZGVmaW5lIFRST1VUX0dQSU9fQkFOSyhuYW1lLCByZWdfbnVtLCBiYXNlX2dwaW8sIHNoYWRvd192YWwpCQlcCisJewkJCQkJCQkJXAorCQkuY2hpcCA9IHsJCQkJCQlcCisJCQkubGFiZWwJCSAgPSBuYW1lLAkJCVwKKwkJCS5kaXJlY3Rpb25faW5wdXQgID0gbXNtX2dwaW9saWJfZGlyZWN0aW9uX2lucHV0LFwKKwkJCS5kaXJlY3Rpb25fb3V0cHV0ID0gbXNtX2dwaW9saWJfZGlyZWN0aW9uX291dHB1dCwgXAorCQkJLmdldAkJICA9IG1zbV9ncGlvbGliX2dldCwJCVwKKwkJCS5zZXQJCSAgPSBtc21fZ3Bpb2xpYl9zZXQsCQlcCisJCQkuYmFzZQkJICA9IGJhc2VfZ3BpbywJCQlcCisJCQkubmdwaW8JCSAgPSA4LAkJCQlcCisJCX0sCQkJCQkJCVwKKwkJLnJlZyA9ICh2b2lkICopIHJlZ19udW0gKyBUUk9VVF9DUExEX0JBU0UsCQlcCisJCS5zaGFkb3cgPSBzaGFkb3dfdmFsLAkJCQkJXAorCX0KKworc3RhdGljIHN0cnVjdCBtc21fZ3Bpb19jaGlwIG1zbV9ncGlvX2JhbmtzW10gPSB7CisjaWYgZGVmaW5lZChDT05GSUdfTVNNX0RFQlVHX1VBUlQxKQorCS8qIEgyVyBwaW5zIDwtPiBVQVJUMSAqLworCVRST1VUX0dQSU9fQkFOSygiTUlTQzIiLCAweDAwLCAgIFRST1VUX0dQSU9fTUlTQzJfQkFTRSwgMHg0MCksCisjZWxzZQorCS8qIEgyVyBwaW5zIDwtPiBVQVJUMywgQmx1ZXRvb3RoIDwtPiBVQVJUMSAqLworCVRST1VUX0dQSU9fQkFOSygiTUlTQzIiLCAweDAwLCAgIFRST1VUX0dQSU9fTUlTQzJfQkFTRSwgMHg4MCksCisjZW5kaWYKKwkvKiBJMkMgcHVsbCAqLworCVRST1VUX0dQSU9fQkFOSygiTUlTQzMiLCAweDAyLCAgIFRST1VUX0dQSU9fTUlTQzNfQkFTRSwgMHgwNCksCisJVFJPVVRfR1BJT19CQU5LKCJNSVNDNCIsIDB4MDQsICAgVFJPVVRfR1BJT19NSVNDNF9CQVNFLCAwKSwKKwkvKiBtbWRpIDMyayBlbiAqLworCVRST1VUX0dQSU9fQkFOSygiTUlTQzUiLCAweDA2LCAgIFRST1VUX0dQSU9fTUlTQzVfQkFTRSwgMHgwNCksCisJVFJPVVRfR1BJT19CQU5LKCJJTlQyIiwgMHgwOCwgICAgVFJPVVRfR1BJT19JTlQyX0JBU0UsICAwKSwKKwlUUk9VVF9HUElPX0JBTksoIk1JU0MxIiwgMHgwYSwgICBUUk9VVF9HUElPX01JU0MxX0JBU0UsIDApLAorCVRST1VUX0dQSU9fQkFOSygiVklSVFVBTCIsIDB4MTIsIFRST1VUX0dQSU9fVklSVFVBTF9CQVNFLCAwKSwKK307CisKKy8qCisgKiBDYWxsZWQgZnJvbSB0aGUgcHJvY2Vzc29yLXNwZWNpZmljIGluaXQgdG8gZW5hYmxlIEdQSU8gcGluIHN1cHBvcnQuCisgKi8KK2ludCBfX2luaXQgdHJvdXRfaW5pdF9ncGlvKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtc21fZ3Bpb19iYW5rcyk7IGkrKykKKwkJZ3Bpb2NoaXBfYWRkKCZtc21fZ3Bpb19iYW5rc1tpXS5jaGlwKTsKKworCXJldHVybiAwOworfQorCitwb3N0Y29yZV9pbml0Y2FsbCh0cm91dF9pbml0X2dwaW8pOworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC10cm91dC5jIGIvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtdHJvdXQuYwppbmRleCBkY2E1YTVmLi5lNjlhMTUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC10cm91dC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLXRyb3V0LmMKQEAgLTUwLDcgKzUwLDYgQEAKIHsKIAltaS0+bnJfYmFua3MgPSAxOwogCW1pLT5iYW5rWzBdLnN0YXJ0ID0gUEhZU19PRkZTRVQ7Ci0JbWktPmJhbmtbMF0ubm9kZSA9IFBIWVNfVE9fTklEKFBIWVNfT0ZGU0VUKTsKIAltaS0+YmFua1swXS5zaXplID0gKDEwMSoxMDI0KjEwMjQpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC10cm91dC5oIGIvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtdHJvdXQuaAppbmRleCA0ZjM0NWE1Li42NTE4NTFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC10cm91dC5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLXRyb3V0LmgKQEAgLTEsNSArMSwxNjIgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLXRyb3V0LmgKKyoqIEF1dGhvcjogQnJpYW4gU3dldGxhbmQgPHN3ZXRsYW5kQGdvb2dsZS5jb20+CisqLworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfTVNNX0JPQVJEX1RST1VUX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX01TTV9CT0FSRF9UUk9VVF9ICisKKyNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CisKKyNkZWZpbmUgTVNNX1NNSV9CQVNFCQkweDAwMDAwMDAwCisjZGVmaW5lIE1TTV9TTUlfU0laRQkJMHgwMDgwMDAwMAorCisjZGVmaW5lIE1TTV9FQklfQkFTRQkJMHgxMDAwMDAwMAorI2RlZmluZSBNU01fRUJJX1NJWkUJCTB4MDZlMDAwMDAKKworI2RlZmluZSBNU01fUE1FTV9HUFUwX0JBU0UJMHgwMDAwMDAwMAorI2RlZmluZSBNU01fUE1FTV9HUFUwX1NJWkUJMHgwMDcwMDAwMAorCisjZGVmaW5lIE1TTV9QTUVNX01EUF9CQVNFCTB4MDIwMDAwMDAKKyNkZWZpbmUgTVNNX1BNRU1fTURQX1NJWkUJMHgwMDgwMDAwMAorCisjZGVmaW5lIE1TTV9QTUVNX0FEU1BfQkFTRSAgICAgIDB4MDI4MDAwMDAKKyNkZWZpbmUgTVNNX1BNRU1fQURTUF9TSVpFCTB4MDA4MDAwMDAKKworI2RlZmluZSBNU01fUE1FTV9DQU1FUkFfQkFTRQkweDAzMDAwMDAwCisjZGVmaW5lIE1TTV9QTUVNX0NBTUVSQV9TSVpFCTB4MDA4MDAwMDAKKworI2RlZmluZSBNU01fRkJfQkFTRQkJMHgwMzgwMDAwMAorI2RlZmluZSBNU01fRkJfU0laRQkJMHgwMDEwMDAwMAorCisjZGVmaW5lIE1TTV9MSU5VWF9CQVNFCQlNU01fRUJJX0JBU0UKKyNkZWZpbmUgTVNNX0xJTlVYX1NJWkUJCTB4MDY1MDAwMDAKKworI2RlZmluZSBNU01fUE1FTV9HUFUxX1NJWkUJMHg4MDAwMDAKKyNkZWZpbmUgTVNNX1BNRU1fR1BVMV9CQVNFCShNU01fUkFNX0NPTlNPTEVfQkFTRSAtIE1TTV9QTUVNX0dQVTFfU0laRSkKKworI2RlZmluZSBNU01fUkFNX0NPTlNPTEVfQkFTRQkoTVNNX0VCSV9CQVNFICsgMHg2ZDAwMDAwKQorI2RlZmluZSBNU01fUkFNX0NPTlNPTEVfU0laRQkoMTI4ICogU1pfMUspCisKKyNpZiAoTVNNX0ZCX0JBU0UgKyBNU01fRkJfU0laRSkgPj0gKE1TTV9QTUVNX0dQVTFfQkFTRSkKKyNlcnJvciBpbnZhbGlkIG1lbW9yeSBtYXAKKyNlbmRpZgorCisjZGVmaW5lIERFQ0xBUkVfTVNNX0lPTUFQCisjaW5jbHVkZSA8bWFjaC9tc21faW9tYXAuaD4KKworI2RlZmluZSBUUk9VVF80X0JBTExfVVBfMCAgICAgMQorI2RlZmluZSBUUk9VVF80X0JBTExfTEVGVF8wICAgMTgKKyNkZWZpbmUgVFJPVVRfNF9CQUxMX0RPV05fMCAgIDU3CisjZGVmaW5lIFRST1VUXzRfQkFMTF9SSUdIVF8wICA5MQorCisjZGVmaW5lIFRST1VUXzVfQkFMTF9VUF8wICAgICA5NAorI2RlZmluZSBUUk9VVF81X0JBTExfTEVGVF8wICAgMTgKKyNkZWZpbmUgVFJPVVRfNV9CQUxMX0RPV05fMCAgIDkwCisjZGVmaW5lIFRST1VUXzVfQkFMTF9SSUdIVF8wICAxOQorCisjZGVmaW5lIFRST1VUX1BPV0VSX0tFWSAgICAgMjAKKworI2RlZmluZSBUUk9VVF80X1RQX0xTX0VOICAgIDE5CisjZGVmaW5lIFRST1VUXzVfVFBfTFNfRU4gICAgMQogCiAjZGVmaW5lIFRST1VUX0NQTERfQkFTRSAgIDB4RTgxMDAwMDAKICNkZWZpbmUgVFJPVVRfQ1BMRF9TVEFSVCAgMHg5ODAwMDAwMAogI2RlZmluZSBUUk9VVF9DUExEX1NJWkUgICBTWl80SwogCisjZGVmaW5lIFRST1VUX0dQSU9fQ0FCTEVfSU4xCQkoODMpCisjZGVmaW5lIFRST1VUX0dQSU9fQ0FCTEVfSU4yCQkoNDkpCisKKyNkZWZpbmUgVFJPVVRfR1BJT19TVEFSVCAoMTI4KQorCisjZGVmaW5lIFRST1VUX0dQSU9fSU5UX01BU0swX1JFRyAgICAgICAgICAgICgweDBjKQorI2RlZmluZSBUUk9VVF9HUElPX0lOVF9TVEFUMF9SRUcgICAgICAgICAgICAoMHgwZSkKKyNkZWZpbmUgVFJPVVRfR1BJT19JTlRfTUFTSzFfUkVHICAgICAgICAgICAgKDB4MTQpCisjZGVmaW5lIFRST1VUX0dQSU9fSU5UX1NUQVQxX1JFRyAgICAgICAgICAgICgweDEwKQorCisjZGVmaW5lIFRST1VUX0dQSU9fSEFQVElDX1BXTSAgICAgICAgICAgICAgICgyOCkKKyNkZWZpbmUgVFJPVVRfR1BJT19QU19IT0xEICAgICAgICAgICAgICAgICAgKDI1KQorCisjZGVmaW5lIFRST1VUX0dQSU9fTUlTQzJfQkFTRSAgICAgICAgICAgICAgIChUUk9VVF9HUElPX1NUQVJUICsgMHgwMCkKKyNkZWZpbmUgVFJPVVRfR1BJT19NSVNDM19CQVNFICAgICAgICAgICAgICAgKFRST1VUX0dQSU9fU1RBUlQgKyAweDA4KQorI2RlZmluZSBUUk9VVF9HUElPX01JU0M0X0JBU0UgICAgICAgICAgICAgICAoVFJPVVRfR1BJT19TVEFSVCArIDB4MTApCisjZGVmaW5lIFRST1VUX0dQSU9fTUlTQzVfQkFTRSAgICAgICAgICAgICAgIChUUk9VVF9HUElPX1NUQVJUICsgMHgxOCkKKyNkZWZpbmUgVFJPVVRfR1BJT19JTlQyX0JBU0UgICAgICAgICAgICAgICAgKFRST1VUX0dQSU9fU1RBUlQgKyAweDIwKQorI2RlZmluZSBUUk9VVF9HUElPX01JU0MxX0JBU0UgICAgICAgICAgICAgICAoVFJPVVRfR1BJT19TVEFSVCArIDB4MjgpCisjZGVmaW5lIFRST1VUX0dQSU9fVklSVFVBTF9CQVNFICAgICAgICAgICAgIChUUk9VVF9HUElPX1NUQVJUICsgMHgzMCkKKyNkZWZpbmUgVFJPVVRfR1BJT19JTlQ1X0JBU0UgICAgICAgICAgICAgICAgKFRST1VUX0dQSU9fU1RBUlQgKyAweDQ4KQorCisjZGVmaW5lIFRST1VUX0dQSU9fQ0hBUkdFUl9FTiAgICAgICAgICAgICAgIChUUk9VVF9HUElPX01JU0MyX0JBU0UgKyAwKQorI2RlZmluZSBUUk9VVF9HUElPX0lTRVQgICAgICAgICAgICAgICAgICAgICAoVFJPVVRfR1BJT19NSVNDMl9CQVNFICsgMSkKKyNkZWZpbmUgVFJPVVRfR1BJT19IMldfREFUX0RJUiAgICAgICAgICAgICAgKFRST1VUX0dQSU9fTUlTQzJfQkFTRSArIDIpCisjZGVmaW5lIFRST1VUX0dQSU9fSDJXX0NMS19ESVIgICAgICAgICAgICAgIChUUk9VVF9HUElPX01JU0MyX0JBU0UgKyAzKQorI2RlZmluZSBUUk9VVF9HUElPX0gyV19EQVRfR1BPICAgICAgICAgICAgICAoVFJPVVRfR1BJT19NSVNDMl9CQVNFICsgNCkKKyNkZWZpbmUgVFJPVVRfR1BJT19IMldfQ0xLX0dQTyAgICAgICAgICAgICAgKFRST1VUX0dQSU9fTUlTQzJfQkFTRSArIDUpCisjZGVmaW5lIFRST1VUX0dQSU9fSDJXX1NFTDAgICAgICAgICAgICAgICAgIChUUk9VVF9HUElPX01JU0MyX0JBU0UgKyA2KQorI2RlZmluZSBUUk9VVF9HUElPX0gyV19TRUwxICAgICAgICAgICAgICAgICAoVFJPVVRfR1BJT19NSVNDMl9CQVNFICsgNykKKworI2RlZmluZSBUUk9VVF9HUElPX1NQT1RMSUdIVF9FTiAgICAgICAgICAgICAoVFJPVVRfR1BJT19NSVNDM19CQVNFICsgMCkKKyNkZWZpbmUgVFJPVVRfR1BJT19GTEFTSF9FTiAgICAgICAgICAgICAgICAgKFRST1VUX0dQSU9fTUlTQzNfQkFTRSArIDEpCisjZGVmaW5lIFRST1VUX0dQSU9fSTJDX1BVTEwgICAgICAgICAgICAgICAgIChUUk9VVF9HUElPX01JU0MzX0JBU0UgKyAyKQorI2RlZmluZSBUUk9VVF9HUElPX1RQX0kyQ19QVUxMICAgICAgICAgICAgICAoVFJPVVRfR1BJT19NSVNDM19CQVNFICsgMykKKyNkZWZpbmUgVFJPVVRfR1BJT19UUF9FTiAgICAgICAgICAgICAgICAgICAgKFRST1VUX0dQSU9fTUlTQzNfQkFTRSArIDQpCisjZGVmaW5lIFRST1VUX0dQSU9fSk9HX0VOICAgICAgICAgICAgICAgICAgIChUUk9VVF9HUElPX01JU0MzX0JBU0UgKyA1KQorI2RlZmluZSBUUk9VVF9HUElPX1VJX0xFRF9FTiAgICAgICAgICAgICAgICAoVFJPVVRfR1BJT19NSVNDM19CQVNFICsgNikKKyNkZWZpbmUgVFJPVVRfR1BJT19RVEtFWV9MRURfRU4gICAgICAgICAgICAgKFRST1VUX0dQSU9fTUlTQzNfQkFTRSArIDcpCisKKyNkZWZpbmUgVFJPVVRfR1BJT19WQ01fUFdETiAgICAgICAgICAgICAgICAgKFRST1VUX0dQSU9fTUlTQzRfQkFTRSArIDApCisjZGVmaW5lIFRST1VUX0dQSU9fVVNCX0gyV19TVyAgICAgICAgICAgICAgIChUUk9VVF9HUElPX01JU0M0X0JBU0UgKyAxKQorI2RlZmluZSBUUk9VVF9HUElPX0NPTVBBU1NfUlNUX04gICAgICAgICAgICAoVFJPVVRfR1BJT19NSVNDNF9CQVNFICsgMikKKyNkZWZpbmUgVFJPVVRfR1BJT19IQVBUSUNfRU5fVVAgICAgICAgICAgICAgKFRST1VUX0dQSU9fTUlTQzRfQkFTRSArIDMpCisjZGVmaW5lIFRST1VUX0dQSU9fSEFQVElDX0VOX01BSU4gICAgICAgICAgIChUUk9VVF9HUElPX01JU0M0X0JBU0UgKyA0KQorI2RlZmluZSBUUk9VVF9HUElPX1VTQl9QSFlfUlNUX04gICAgICAgICAgICAoVFJPVVRfR1BJT19NSVNDNF9CQVNFICsgNSkKKyNkZWZpbmUgVFJPVVRfR1BJT19XSUZJX1BBX1JFU0VUWCAgICAgICAgICAgKFRST1VUX0dQSU9fTUlTQzRfQkFTRSArIDYpCisjZGVmaW5lIFRST1VUX0dQSU9fV0lGSV9FTiAgICAgICAgICAgICAgICAgIChUUk9VVF9HUElPX01JU0M0X0JBU0UgKyA3KQorCisjZGVmaW5lIFRST1VUX0dQSU9fQlRfMzJLX0VOICAgICAgICAgICAgICAgIChUUk9VVF9HUElPX01JU0M1X0JBU0UgKyAwKQorI2RlZmluZSBUUk9VVF9HUElPX01BQ18zMktfRU4gICAgICAgICAgICAgICAoVFJPVVRfR1BJT19NSVNDNV9CQVNFICsgMSkKKyNkZWZpbmUgVFJPVVRfR1BJT19NRERJXzMyS19FTiAgICAgICAgICAgICAgKFRST1VUX0dQSU9fTUlTQzVfQkFTRSArIDIpCisjZGVmaW5lIFRST1VUX0dQSU9fQ09NUEFTU18zMktfRU4gICAgICAgICAgIChUUk9VVF9HUElPX01JU0M1X0JBU0UgKyAzKQorCisjZGVmaW5lIFRST1VUX0dQSU9fTkFWSV9BQ1RfTiAgICAgICAgICAgICAgIChUUk9VVF9HUElPX0lOVDJfQkFTRSArIDApCisjZGVmaW5lIFRST1VUX0dQSU9fQ09NUEFTU19JUlEgICAgICAgICAgICAgIChUUk9VVF9HUElPX0lOVDJfQkFTRSArIDEpCisjZGVmaW5lIFRST1VUX0dQSU9fU0xJRElOR19ERVQgICAgICAgICAgICAgIChUUk9VVF9HUElPX0lOVDJfQkFTRSArIDIpCisjZGVmaW5lIFRST1VUX0dQSU9fQVVEX0hTTUlDX0RFVF9OICAgICAgICAgIChUUk9VVF9HUElPX0lOVDJfQkFTRSArIDMpCisjZGVmaW5lIFRST1VUX0dQSU9fU0RfRE9PUl9OICAgICAgICAgICAgICAgIChUUk9VVF9HUElPX0lOVDJfQkFTRSArIDQpCisjZGVmaW5lIFRST1VUX0dQSU9fQ0FNX0JUTl9TVEVQMV9OICAgICAgICAgIChUUk9VVF9HUElPX0lOVDJfQkFTRSArIDUpCisjZGVmaW5lIFRST1VUX0dQSU9fQ0FNX0JUTl9TVEVQMl9OICAgICAgICAgIChUUk9VVF9HUElPX0lOVDJfQkFTRSArIDYpCisjZGVmaW5lIFRST1VUX0dQSU9fVFBfQVRUX04gICAgICAgICAgICAgICAgIChUUk9VVF9HUElPX0lOVDJfQkFTRSArIDcpCisjZGVmaW5lIFRST1VUX0dQSU9fQkFOSzBfRklSU1RfSU5UX1NPVVJDRSAgIChUUk9VVF9HUElPX05BVklfQUNUX04pCisjZGVmaW5lIFRST1VUX0dQSU9fQkFOSzBfTEFTVF9JTlRfU09VUkNFICAgIChUUk9VVF9HUElPX1RQX0FUVF9OKQorCisjZGVmaW5lIFRST1VUX0dQSU9fSDJXX0RBVF9HUEkgICAgICAgICAgICAgIChUUk9VVF9HUElPX01JU0MxX0JBU0UgKyAwKQorI2RlZmluZSBUUk9VVF9HUElPX0gyV19DTEtfR1BJICAgICAgICAgICAgICAoVFJPVVRfR1BJT19NSVNDMV9CQVNFICsgMSkKKyNkZWZpbmUgVFJPVVRfR1BJT19DUExEMTI4X1ZFUl8wICAgICAgICAgICAgKFRST1VUX0dQSU9fTUlTQzFfQkFTRSArIDQpCisjZGVmaW5lIFRST1VUX0dQSU9fQ1BMRDEyOF9WRVJfMSAgICAgICAgICAgIChUUk9VVF9HUElPX01JU0MxX0JBU0UgKyA1KQorI2RlZmluZSBUUk9VVF9HUElPX0NQTEQxMjhfVkVSXzIgICAgICAgICAgICAoVFJPVVRfR1BJT19NSVNDMV9CQVNFICsgNikKKyNkZWZpbmUgVFJPVVRfR1BJT19DUExEMTI4X1ZFUl8zICAgICAgICAgICAgKFRST1VUX0dQSU9fTUlTQzFfQkFTRSArIDcpCisKKyNkZWZpbmUgVFJPVVRfR1BJT19TRE1DX0NEX04gICAgICAgICAgICAgICAgKFRST1VUX0dQSU9fVklSVFVBTF9CQVNFICsgMCkKKyNkZWZpbmUgVFJPVVRfR1BJT19FTkQgICAgICAgICAgICAgICAgICAgICAgKFRST1VUX0dQSU9fU0RNQ19DRF9OKQorI2RlZmluZSBUUk9VVF9HUElPX0JBTksxX0ZJUlNUX0lOVF9TT1VSQ0UgICAoVFJPVVRfR1BJT19TRE1DX0NEX04pCisjZGVmaW5lIFRST1VUX0dQSU9fQkFOSzFfTEFTVF9JTlRfU09VUkNFICAgIChUUk9VVF9HUElPX1NETUNfQ0RfTikKKworI2RlZmluZSBUUk9VVF9HUElPX1ZJUlRVQUxfVE9fUkVBTF9PRkZTRVQgXAorCShUUk9VVF9HUElPX0lOVDVfQkFTRSAtIFRST1VUX0dQSU9fVklSVFVBTF9CQVNFKQorCisjZGVmaW5lIFRST1VUX0lOVF9TVEFSVCAoTlJfTVNNX0lSUVMgKyBOUl9HUElPX0lSUVMpCisjZGVmaW5lIFRST1VUX0lOVF9CQU5LMF9DT1VOVCAoOCkKKyNkZWZpbmUgVFJPVVRfSU5UX0JBTksxX1NUQVJUIChUUk9VVF9JTlRfU1RBUlQgKyBUUk9VVF9JTlRfQkFOSzBfQ09VTlQpCisjZGVmaW5lIFRST1VUX0lOVF9CQU5LMV9DT1VOVCAoMSkKKyNkZWZpbmUgVFJPVVRfSU5UX0VORCAoVFJPVVRfSU5UX1NUQVJUICsgVFJPVVRfSU5UX0JBTkswX0NPVU5UICsgXAorCQkJVFJPVVRfSU5UX0JBTksxX0NPVU5UIC0gMSkKKyNkZWZpbmUgVFJPVVRfR1BJT19UT19JTlQobikgKCgobikgPD0gVFJPVVRfR1BJT19CQU5LMF9MQVNUX0lOVF9TT1VSQ0UpID8gXAorCShUUk9VVF9JTlRfU1RBUlQgLSBUUk9VVF9HUElPX0JBTkswX0ZJUlNUX0lOVF9TT1VSQ0UgKyAobikpIDogXAorCShUUk9VVF9JTlRfQkFOSzFfU1RBUlQgLSBUUk9VVF9HUElPX0JBTksxX0ZJUlNUX0lOVF9TT1VSQ0UgKyAobikpKQorCisjZGVmaW5lIFRST1VUX0lOVF9UT19CQU5LKG4pICgobiAtIFRST1VUX0lOVF9TVEFSVCkgLyBUUk9VVF9JTlRfQkFOSzBfQ09VTlQpCisjZGVmaW5lIFRST1VUX0lOVF9UT19NQVNLKG4pICgxVSA8PCAoKG4gLSBUUk9VVF9JTlRfU1RBUlQpICYgNykpCisjZGVmaW5lIFRST1VUX0JBTktfVE9fTUFTS19SRUcoYmFuaykgXAorCShiYW5rID8gVFJPVVRfR1BJT19JTlRfTUFTSzFfUkVHIDogVFJPVVRfR1BJT19JTlRfTUFTSzBfUkVHKQorI2RlZmluZSBUUk9VVF9CQU5LX1RPX1NUQVRfUkVHKGJhbmspIFwKKwkoYmFuayA/IFRST1VUX0dQSU9fSU5UX1NUQVQxX1JFRyA6IFRST1VUX0dQSU9fSU5UX1NUQVQwX1JFRykKKworI2VuZGlmIC8qIEdVQVJEICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCAyNjJiNDQxLi44M2U0N2MwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTE2LDYgKzE2LDEzIEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTVNNX0dQSU9fSAogI2RlZmluZSBfX0FTTV9BUkNIX01TTV9HUElPX0gKIAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4KKworI2RlZmluZSBncGlvX2dldF92YWx1ZSAgX19ncGlvX2dldF92YWx1ZQorI2RlZmluZSBncGlvX3NldF92YWx1ZSAgX19ncGlvX3NldF92YWx1ZQorI2RlZmluZSBncGlvX2NhbnNsZWVwICAgX19ncGlvX2NhbnNsZWVwCisjZGVmaW5lIGdwaW9fdG9faXJxICAgICBfX2dwaW9fdG9faXJxCisKIC8qKgogICogc3RydWN0IG1zbV9ncGlvIC0gR1BJTyBwaW4gZGVzY3JpcHRpb24KICAqIEBncGlvX2NmZyAtIGNvbmZpZ3VyYXRpb24gYml0bWFwLCBhcyBwZXIgZ3Bpb190bG1tX2NvbmZpZygpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1teDEvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI3NjYwZi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW14MS9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotaWYgQVJDSF9NWDEKLQotY29tbWVudCAiTVgxIHBsYXRmb3JtczoiCi0KLWNvbmZpZyBNQUNIX01YTEFEUwotCWJvb2wKLQotY29uZmlnIEFSQ0hfTVgxQURTCi0JYm9vbCAiTVgxQURTIHBsYXRmb3JtIgotCXNlbGVjdCBNQUNIX01YTEFEUwotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyBNb3Rvcm9sYSBNWDFBRFMvTVhMQURTIGJvYXJkcwotCi1jb25maWcgTUFDSF9TQ0I5MzI4Ci0JYm9vbCAiU3luZXJ0cm9uaXh4IHNjYjkzMjgiCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIGEgU3luZXJ0cm9uaXh4IHNjYjkzMjggYm9hcmQKLQotZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgxL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1teDEvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjMmRkZjguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDEvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jCi0jIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgotIwotCi0jIE9iamVjdCBmaWxlIGxpc3RzLgotCi1FWFRSQV9DRkxBR1MgKz0gLURJTVhfTkVFRFNfREVQUkVDQVRFRF9TWU1CT0xTCi1vYmoteQkJCSs9IGdlbmVyaWMubyBjbG9jay5vIGRldmljZXMubwotCi0jIFN1cHBvcnQgZm9yIENNT1Mgc2Vuc29yIGludGVyZmFjZQotb2JqLSQoQ09ORklHX01YMV9WSURFTykJKz0ga3N5bV9teDEubyBteDFfY2FtZXJhX2ZpcS5vCi0KLSMgU3BlY2lmaWMgYm9hcmQgc3VwcG9ydAotb2JqLSQoQ09ORklHX0FSQ0hfTVgxQURTKSArPSBtYWNoLW14MWFkcy5vCi1vYmotJChDT05GSUdfTUFDSF9TQ0I5MzI4KSArPSBtYWNoLXNjYjkzMjgubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDEvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtbXgxL01ha2VmaWxlLmJvb3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlZDE0OTIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDEvTWFrZWZpbGUuYm9vdAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotICAgenJlbGFkZHIteQk6PSAweDA4MDA4MDAwCi1wYXJhbXNfcGh5cy15CTo9IDB4MDgwMDAxMDAKLWluaXRyZF9waHlzLXkJOj0gMHgwODgwMDAwMAotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MS9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1teDEvY2xvY2suYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNmMmQ0YS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW14MS9jbG9jay5jCisrKyAvZGV2L251bGwKQEAgLTEsNjAyICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4IFNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4sIFBlbmd1dHJvbml4Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSAiY3JtX3JlZ3MuaCIKLQotc3RhdGljIGludCBfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgaW50IHJlZzsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JcmVnIHw9IDEgPDwgY2xrLT5lbmFibGVfc2hpZnQ7Ci0JX19yYXdfd3JpdGVsKHJlZywgY2xrLT5lbmFibGVfcmVnKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGludCByZWc7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCXJlZyAmPSB+KDEgPDwgY2xrLT5lbmFibGVfc2hpZnQpOwotCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7Ci19Ci0KLXN0YXRpYyBpbnQgX2Nsa19jYW5fdXNlX3BhcmVudChjb25zdCBzdHJ1Y3QgY2xrICpjbGtfYXJyW10sIHVuc2lnbmVkIGludCBzaXplLAotCQkJICAgICAgIHN0cnVjdCBjbGsgKnBhcmVudCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCi0JCWlmIChwYXJlbnQgPT0gY2xrX2FycltpXSkKLQkJCXJldHVybiBpOwotCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nCi1fY2xrX3NpbXBsZV9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlLCB1bnNpZ25lZCBpbnQgbGltaXQpCi17Ci0JaW50IGRpdjsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOwotCi0JcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCi0JZGl2ID0gcGFyZW50X3JhdGUgLyByYXRlOwotCWlmIChwYXJlbnRfcmF0ZSAlIHJhdGUpCi0JCWRpdisrOwotCi0JaWYgKGRpdiA+IGxpbWl0KQotCQlkaXYgPSBsaW1pdDsKLQotCXJldHVybiBwYXJlbnRfcmF0ZSAvIGRpdjsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19wYXJlbnRfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQlyZXR1cm4gY2xrLT5wYXJlbnQtPnJvdW5kX3JhdGUoY2xrLT5wYXJlbnQsIHJhdGUpOwotfQotCi1zdGF0aWMgaW50IF9jbGtfcGFyZW50X3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXJldHVybiBjbGstPnBhcmVudC0+c2V0X3JhdGUoY2xrLT5wYXJlbnQsIHJhdGUpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjbGsxNm1fZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiAxNjAwMDAwMDsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrMTZtID0gewotCS5nZXRfcmF0ZSA9IGNsazE2bV9nZXRfcmF0ZSwKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBDQ01fQ1NDUiwKLQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX0NTQ1JfT1NDX0VOX1NISUZULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotLyogaW4gSHogKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNsazMyX3JhdGU7Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNsazMyX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gY2xrMzJfcmF0ZTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrMzIgPSB7Ci0JLmdldF9yYXRlID0gY2xrMzJfZ2V0X3JhdGUsCi19OwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjbGszMl9wcmVtdWx0X2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAqIDUxMjsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrMzJfcHJlbXVsdCA9IHsKLQkucGFyZW50ID0gJmNsazMyLAotCS5nZXRfcmF0ZSA9IGNsazMyX3ByZW11bHRfZ2V0X3JhdGUsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsayAqcHJlbV9jbGtfY2xvY2tzW10gPSB7Ci0JJmNsazMyX3ByZW11bHQsCi0JJmNsazE2bSwKLX07Ci0KLXN0YXRpYyBpbnQgcHJlbV9jbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKLXsKLQlpbnQgaTsKLQl1bnNpZ25lZCBpbnQgcmVnID0gX19yYXdfcmVhZGwoQ0NNX0NTQ1IpOwotCi0JaSA9IF9jbGtfY2FuX3VzZV9wYXJlbnQocHJlbV9jbGtfY2xvY2tzLCBBUlJBWV9TSVpFKHByZW1fY2xrX2Nsb2NrcyksCi0JCQkJcGFyZW50KTsKLQotCXN3aXRjaCAoaSkgewotCWNhc2UgMDoKLQkJcmVnICY9IH5DQ01fQ1NDUl9TWVNURU1fU0VMOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCXJlZyB8PSBDQ01fQ1NDUl9TWVNURU1fU0VMOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gaTsKLQl9Ci0KLQlfX3Jhd193cml0ZWwocmVnLCBDQ01fQ1NDUik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgcHJlbV9jbGsgPSB7Ci0JLnNldF9wYXJlbnQgPSBwcmVtX2Nsa19zZXRfcGFyZW50LAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc3lzdGVtX2Nsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIG14Y19kZWNvZGVfcGxsKF9fcmF3X3JlYWRsKENDTV9TUENUTDApLAotCQkJICAgICAgY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHN5c3RlbV9jbGsgPSB7Ci0JLnBhcmVudCA9ICZwcmVtX2NsaywKLQkuZ2V0X3JhdGUgPSBzeXN0ZW1fY2xrX2dldF9yYXRlLAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgbWN1X2Nsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIG14Y19kZWNvZGVfcGxsKF9fcmF3X3JlYWRsKENDTV9NUENUTDApLAotCQkJICAgICAgY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jdV9jbGsgPSB7Ci0JLnBhcmVudCA9ICZjbGszMl9wcmVtdWx0LAotCS5nZXRfcmF0ZSA9IG1jdV9jbGtfZ2V0X3JhdGUsCi19OwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBmY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIGZjbGsgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCi0JaWYgKF9fcmF3X3JlYWRsKENDTV9DU0NSKSAmIENDTV9DU0NSX1BSRVNDKQotCQlmY2xrIC89IDI7Ci0KLQlyZXR1cm4gZmNsazsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgZmNsayA9IHsKLQkucGFyZW50ID0gJm1jdV9jbGssCi0JLmdldF9yYXRlID0gZmNsa19nZXRfcmF0ZSwKLX07Ci0KLS8qCi0gKiAgZ2V0IGhjbGsgKCBTRFJBTSwgQ1NJLCBNZW1vcnkgU3RpY2ssIEkyQywgRE1BICkKLSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgaGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAoKChfX3Jhd19yZWFkbChDQ01fQ1NDUikgJgotCQkJQ0NNX0NTQ1JfQkNMS19NQVNLKSA+PiBDQ01fQ1NDUl9CQ0xLX09GRlNFVCkgKyAxKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgaGNsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXJldHVybiBfY2xrX3NpbXBsZV9yb3VuZF9yYXRlKGNsaywgcmF0ZSwgMTYpOwotfQotCi1zdGF0aWMgaW50IGhjbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JdW5zaWduZWQgaW50IGRpdjsKLQl1bnNpZ25lZCBpbnQgcmVnOwotCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7Ci0KLQlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0KLQlkaXYgPSBwYXJlbnRfcmF0ZSAvIHJhdGU7Ci0KLQlpZiAoZGl2ID4gMTYgfHwgZGl2IDwgMSB8fCAoKHBhcmVudF9yYXRlIC8gZGl2KSAhPSByYXRlKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkaXYtLTsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9DU0NSKTsKLQlyZWcgJj0gfkNDTV9DU0NSX0JDTEtfTUFTSzsKLQlyZWcgfD0gZGl2IDw8IENDTV9DU0NSX0JDTEtfT0ZGU0VUOwotCV9fcmF3X3dyaXRlbChyZWcsIENDTV9DU0NSKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGNsayBoY2xrID0gewotCS5wYXJlbnQgPSAmc3lzdGVtX2NsaywKLQkuZ2V0X3JhdGUgPSBoY2xrX2dldF9yYXRlLAotCS5yb3VuZF9yYXRlID0gaGNsa19yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZSA9IGhjbGtfc2V0X3JhdGUsCi19OwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjbGs0OG1fZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gKCgoX19yYXdfcmVhZGwoQ0NNX0NTQ1IpICYKLQkJCUNDTV9DU0NSX1VTQl9NQVNLKSA+PiBDQ01fQ1NDUl9VU0JfT0ZGU0VUKSArIDEpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjbGs0OG1fcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQlyZXR1cm4gX2Nsa19zaW1wbGVfcm91bmRfcmF0ZShjbGssIHJhdGUsIDgpOwotfQotCi1zdGF0aWMgaW50IGNsazQ4bV9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1bnNpZ25lZCBpbnQgZGl2OwotCXVuc2lnbmVkIGludCByZWc7Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKLQotCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQotCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKLQotCWlmIChkaXYgPiA4IHx8IGRpdiA8IDEgfHwgKChwYXJlbnRfcmF0ZSAvIGRpdikgIT0gcmF0ZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZGl2LS07Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChDQ01fQ1NDUik7Ci0JcmVnICY9IH5DQ01fQ1NDUl9VU0JfTUFTSzsKLQlyZWcgfD0gZGl2IDw8IENDTV9DU0NSX1VTQl9PRkZTRVQ7Ci0JX19yYXdfd3JpdGVsKHJlZywgQ0NNX0NTQ1IpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsazQ4bSA9IHsKLQkucGFyZW50ID0gJnN5c3RlbV9jbGssCi0JLmdldF9yYXRlID0gY2xrNDhtX2dldF9yYXRlLAotCS5yb3VuZF9yYXRlID0gY2xrNDhtX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlID0gY2xrNDhtX3NldF9yYXRlLAotfTsKLQotLyoKLSAqICBnZXQgcGVyaXBoZXJhbCBjbG9jayAxICggVUFSVFsxMl0sIFRpbWVyWzEyXSwgUFdNICkKLSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcGVyY2xrMV9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAoKChfX3Jhd19yZWFkbChDQ01fUENEUikgJgotCQkJQ0NNX1BDRFJfUENMSzFfTUFTSykgPj4gQ0NNX1BDRFJfUENMSzFfT0ZGU0VUKSArIDEpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwZXJjbGsxX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JcmV0dXJuIF9jbGtfc2ltcGxlX3JvdW5kX3JhdGUoY2xrLCByYXRlLCAxNik7Ci19Ci0KLXN0YXRpYyBpbnQgcGVyY2xrMV9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1bnNpZ25lZCBpbnQgZGl2OwotCXVuc2lnbmVkIGludCByZWc7Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKLQotCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQotCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKLQotCWlmIChkaXYgPiAxNiB8fCBkaXYgPCAxIHx8ICgocGFyZW50X3JhdGUgLyBkaXYpICE9IHJhdGUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRpdi0tOwotCi0JcmVnID0gX19yYXdfcmVhZGwoQ0NNX1BDRFIpOwotCXJlZyAmPSB+Q0NNX1BDRFJfUENMSzFfTUFTSzsKLQlyZWcgfD0gZGl2IDw8IENDTV9QQ0RSX1BDTEsxX09GRlNFVDsKLQlfX3Jhd193cml0ZWwocmVnLCBDQ01fUENEUik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqICBnZXQgcGVyaXBoZXJhbCBjbG9jayAyICggTENELCBTRCwgU1BJWzEyXSApCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBlcmNsazJfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gKCgoX19yYXdfcmVhZGwoQ0NNX1BDRFIpICYKLQkJCUNDTV9QQ0RSX1BDTEsyX01BU0spID4+IENDTV9QQ0RSX1BDTEsyX09GRlNFVCkgKyAxKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgcGVyY2xrMl9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXJldHVybiBfY2xrX3NpbXBsZV9yb3VuZF9yYXRlKGNsaywgcmF0ZSwgMTYpOwotfQotCi1zdGF0aWMgaW50IHBlcmNsazJfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JdW5zaWduZWQgaW50IGRpdjsKLQl1bnNpZ25lZCBpbnQgcmVnOwotCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7Ci0KLQlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0KLQlkaXYgPSBwYXJlbnRfcmF0ZSAvIHJhdGU7Ci0KLQlpZiAoZGl2ID4gMTYgfHwgZGl2IDwgMSB8fCAoKHBhcmVudF9yYXRlIC8gZGl2KSAhPSByYXRlKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkaXYtLTsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9QQ0RSKTsKLQlyZWcgJj0gfkNDTV9QQ0RSX1BDTEsyX01BU0s7Ci0JcmVnIHw9IGRpdiA8PCBDQ01fUENEUl9QQ0xLMl9PRkZTRVQ7Ci0JX19yYXdfd3JpdGVsKHJlZywgQ0NNX1BDRFIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiAgZ2V0IHBlcmlwaGVyYWwgY2xvY2sgMyAoIFNTSSApCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBlcmNsazNfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gKCgoX19yYXdfcmVhZGwoQ0NNX1BDRFIpICYKLQkJCUNDTV9QQ0RSX1BDTEszX01BU0spID4+IENDTV9QQ0RSX1BDTEszX09GRlNFVCkgKyAxKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgcGVyY2xrM19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXJldHVybiBfY2xrX3NpbXBsZV9yb3VuZF9yYXRlKGNsaywgcmF0ZSwgMTI4KTsKLX0KLQotc3RhdGljIGludCBwZXJjbGszX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXVuc2lnbmVkIGludCBkaXY7Ci0JdW5zaWduZWQgaW50IHJlZzsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOwotCi0JcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCi0JZGl2ID0gcGFyZW50X3JhdGUgLyByYXRlOwotCi0JaWYgKGRpdiA+IDEyOCB8fCBkaXYgPCAxIHx8ICgocGFyZW50X3JhdGUgLyBkaXYpICE9IHJhdGUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRpdi0tOwotCi0JcmVnID0gX19yYXdfcmVhZGwoQ0NNX1BDRFIpOwotCXJlZyAmPSB+Q0NNX1BDRFJfUENMSzNfTUFTSzsKLQlyZWcgfD0gZGl2IDw8IENDTV9QQ0RSX1BDTEszX09GRlNFVDsKLQlfX3Jhd193cml0ZWwocmVnLCBDQ01fUENEUik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgcGVyY2xrW10gPSB7Ci0JewotCQkuaWQgPSAwLAotCQkucGFyZW50ID0gJnN5c3RlbV9jbGssCi0JCS5nZXRfcmF0ZSA9IHBlcmNsazFfZ2V0X3JhdGUsCi0JCS5yb3VuZF9yYXRlID0gcGVyY2xrMV9yb3VuZF9yYXRlLAotCQkuc2V0X3JhdGUgPSBwZXJjbGsxX3NldF9yYXRlLAotCX0sIHsKLQkJLmlkID0gMSwKLQkJLnBhcmVudCA9ICZzeXN0ZW1fY2xrLAotCQkuZ2V0X3JhdGUgPSBwZXJjbGsyX2dldF9yYXRlLAotCQkucm91bmRfcmF0ZSA9IHBlcmNsazJfcm91bmRfcmF0ZSwKLQkJLnNldF9yYXRlID0gcGVyY2xrMl9zZXRfcmF0ZSwKLQl9LCB7Ci0JCS5pZCA9IDIsCi0JCS5wYXJlbnQgPSAmc3lzdGVtX2NsaywKLQkJLmdldF9yYXRlID0gcGVyY2xrM19nZXRfcmF0ZSwKLQkJLnJvdW5kX3JhdGUgPSBwZXJjbGszX3JvdW5kX3JhdGUsCi0JCS5zZXRfcmF0ZSA9IHBlcmNsazNfc2V0X3JhdGUsCi0JfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGsgKmNsa29fY2xvY2tzW10gPSB7Ci0JJnBlcmNsa1swXSwKLQkmaGNsaywKLQkmY2xrNDhtLAotCSZjbGsxNm0sCi0JJnByZW1fY2xrLAotCSZmY2xrLAotfTsKLQotc3RhdGljIGludCBjbGtvX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCi17Ci0JaW50IGk7Ci0JdW5zaWduZWQgaW50IHJlZzsKLQotCWkgPSBfY2xrX2Nhbl91c2VfcGFyZW50KGNsa29fY2xvY2tzLCBBUlJBWV9TSVpFKGNsa29fY2xvY2tzKSwgcGFyZW50KTsKLQlpZiAoaSA8IDApCi0JCXJldHVybiBpOwotCi0JcmVnID0gX19yYXdfcmVhZGwoQ0NNX0NTQ1IpICYgfkNDTV9DU0NSX0NMS09fTUFTSzsKLQlyZWcgfD0gaSA8PCBDQ01fQ1NDUl9DTEtPX09GRlNFVDsKLQlfX3Jhd193cml0ZWwocmVnLCBDQ01fQ1NDUik7Ci0KLQlpZiAoY2xrb19jbG9ja3NbaV0tPnNldF9yYXRlICYmIGNsa29fY2xvY2tzW2ldLT5yb3VuZF9yYXRlKSB7Ci0JCWNsay0+c2V0X3JhdGUgPSBfY2xrX3BhcmVudF9zZXRfcmF0ZTsKLQkJY2xrLT5yb3VuZF9yYXRlID0gX2Nsa19wYXJlbnRfcm91bmRfcmF0ZTsKLQl9IGVsc2UgewotCQljbGstPnNldF9yYXRlID0gTlVMTDsKLQkJY2xrLT5yb3VuZF9yYXRlID0gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrb19jbGsgPSB7Ci0JLnNldF9wYXJlbnQgPSBjbGtvX3NldF9wYXJlbnQsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkbWFfY2xrID0gewotCS5wYXJlbnQgPSAmaGNsaywKLQkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCi0JLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCS5lbmFibGVfcmVnID0gU0NNX0dDQ1IsCi0JLmVuYWJsZV9zaGlmdCA9IFNDTV9HQ0NSX0RNQV9DTEtfRU5fT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY3NpX2NsayA9IHsKLQkucGFyZW50ID0gJmhjbGssCi0JLnJvdW5kX3JhdGUgPSBfY2xrX3BhcmVudF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZSA9IF9jbGtfcGFyZW50X3NldF9yYXRlLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IFNDTV9HQ0NSLAotCS5lbmFibGVfc2hpZnQgPSBTQ01fR0NDUl9DU0lfQ0xLX0VOX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tYV9jbGsgPSB7Ci0JLnBhcmVudCA9ICZoY2xrLAotCS5yb3VuZF9yYXRlID0gX2Nsa19wYXJlbnRfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUgPSBfY2xrX3BhcmVudF9zZXRfcmF0ZSwKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBTQ01fR0NDUiwKLQkuZW5hYmxlX3NoaWZ0ID0gU0NNX0dDQ1JfTU1BX0NMS19FTl9PRkZTRVQsCi0JLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1c2JkX2NsayA9IHsKLQkucGFyZW50ID0gJmNsazQ4bSwKLQkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCi0JLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCS5lbmFibGVfcmVnID0gU0NNX0dDQ1IsCi0JLmVuYWJsZV9zaGlmdCA9IFNDTV9HQ0NSX1VTQkRfQ0xLX0VOX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdF9jbGsgPSB7Ci0JLnBhcmVudCA9ICZwZXJjbGtbMF0sCi0JLnJvdW5kX3JhdGUgPSBfY2xrX3BhcmVudF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZSA9IF9jbGtfcGFyZW50X3NldF9yYXRlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydF9jbGsgPSB7Ci0JLnBhcmVudCA9ICZwZXJjbGtbMF0sCi0JLnJvdW5kX3JhdGUgPSBfY2xrX3BhcmVudF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZSA9IF9jbGtfcGFyZW50X3NldF9yYXRlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaTJjX2NsayA9IHsKLQkucGFyZW50ID0gJmhjbGssCi0JLnJvdW5kX3JhdGUgPSBfY2xrX3BhcmVudF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZSA9IF9jbGtfcGFyZW50X3NldF9yYXRlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc3BpX2NsayA9IHsKLQkucGFyZW50ID0gJnBlcmNsa1sxXSwKLQkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzZGhjX2NsayA9IHsKLQkucGFyZW50ID0gJnBlcmNsa1sxXSwKLQkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBsY2RjX2NsayA9IHsKLQkucGFyZW50ID0gJnBlcmNsa1sxXSwKLQkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtc2hjX2NsayA9IHsKLQkucGFyZW50ID0gJmhjbGssCi0JLnJvdW5kX3JhdGUgPSBfY2xrX3BhcmVudF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZSA9IF9jbGtfcGFyZW50X3NldF9yYXRlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc3NpX2NsayA9IHsKLQkucGFyZW50ID0gJnBlcmNsa1syXSwKLQkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBydGNfY2xrID0gewotCS5wYXJlbnQgPSAmY2xrMzIsCi19OwotCi0jZGVmaW5lIF9SRUdJU1RFUl9DTE9DSyhkLCBuLCBjKSBcCi0JeyBcCi0JCS5kZXZfaWQgPSBkLCBcCi0JCS5jb25faWQgPSBuLCBcCi0JCS5jbGsgPSAmYywgXAotCX0sCi1zdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdIF9faW5pdGRhdGEgPSB7Ci0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJkbWEiLCBkbWFfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygibXgxLWNhbWVyYS4wIiwgTlVMTCwgY3NpX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIm1tYSIsIG1tYV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJpbXhfdWRjLjAiLCBOVUxMLCB1c2JkX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwdCIsIGdwdF9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4wIiwgTlVMTCwgdWFydF9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4xIiwgTlVMTCwgdWFydF9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4yIiwgTlVMTCwgdWFydF9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjAiLCBOVUxMLCBpMmNfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygic3BpX2lteC4wIiwgTlVMTCwgc3BpX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soImlteC1tbWMuMCIsIE5VTEwsIHNkaGNfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygiaW14LWZiLjAiLCBOVUxMLCBsY2RjX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIm1zaGMiLCBtc2hjX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNzaSIsIHNzaV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJteGNfcnRjLjAiLCBOVUxMLCBydGNfY2xrKQotfTsKLQotaW50IF9faW5pdCBteDFfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKQotewotCXVuc2lnbmVkIGludCByZWc7Ci0KLQkvKiBkaXNhYmxlIGNsb2NrcyB3ZSBhcmUgYWJsZSB0byAqLwotCV9fcmF3X3dyaXRlbCgwLCBTQ01fR0NDUik7Ci0KLQljbGszMl9yYXRlID0gZnJlZjsKLQlyZWcgPSBfX3Jhd19yZWFkbChDQ01fQ1NDUik7Ci0KLQkvKiBkZXRlY3QgY2xvY2sgcmVmZXJlbmNlIGZvciBzeXN0ZW0gUExMICovCi0JaWYgKHJlZyAmIENDTV9DU0NSX1NZU1RFTV9TRUwpIHsKLQkJcHJlbV9jbGsucGFyZW50ID0gJmNsazE2bTsKLQl9IGVsc2UgewotCQkvKiBlbnN1cmUgdGhhdCBvc2NpbGxhdG9yIGlzIGRpc2FibGVkICovCi0JCXJlZyAmPSB+KDEgPDwgQ0NNX0NTQ1JfT1NDX0VOX1NISUZUKTsKLQkJX19yYXdfd3JpdGVsKHJlZywgQ0NNX0NTQ1IpOwotCQlwcmVtX2Nsay5wYXJlbnQgPSAmY2xrMzJfcHJlbXVsdDsKLQl9Ci0KLQkvKiBkZXRlY3QgcmVmZXJlbmNlIGZvciBDTEtPICovCi0JcmVnID0gKHJlZyAmIENDTV9DU0NSX0NMS09fTUFTSykgPj4gQ0NNX0NTQ1JfQ0xLT19PRkZTRVQ7Ci0JY2xrb19jbGsucGFyZW50ID0gKHN0cnVjdCBjbGsgKiljbGtvX2Nsb2Nrc1tyZWddOwotCi0JY2xrZGV2X2FkZF90YWJsZShsb29rdXBzLCBBUlJBWV9TSVpFKGxvb2t1cHMpKTsKLQotCWNsa19lbmFibGUoJmhjbGspOwotCWNsa19lbmFibGUoJmZjbGspOwotCi0JbXhjX3RpbWVyX2luaXQoJmdwdF9jbGssIElPX0FERFJFU1MoVElNMV9CQVNFX0FERFIpLCBUSU0xX0lOVCk7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgxL2NybV9yZWdzLmggYi9hcmNoL2FybS9tYWNoLW14MS9jcm1fcmVncy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmU4NjZmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbXgxL2NybV9yZWdzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDQtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgotICoKLSAqIFRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KLSAqLwotCi0jaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9NWDFfQ1JNX1JFR1NfSF9fCi0jZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9NWDFfQ1JNX1JFR1NfSF9fCi0KLSNkZWZpbmUgQ0NNX0JBU0UJSU9fQUREUkVTUyhDQ01fQkFTRV9BRERSKQotI2RlZmluZSBTQ01fQkFTRQlJT19BRERSRVNTKFNDTV9CQVNFX0FERFIpCi0KLS8qIENDTSByZWdpc3RlciBhZGRyZXNzZXMgKi8KLSNkZWZpbmUgQ0NNX0NTQ1IJKENDTV9CQVNFICsgMHgwKQotI2RlZmluZSBDQ01fTVBDVEwwCShDQ01fQkFTRSArIDB4NCkKLSNkZWZpbmUgQ0NNX01QQ1RMMQkoQ0NNX0JBU0UgKyAweDgpCi0jZGVmaW5lIENDTV9TUENUTDAJKENDTV9CQVNFICsgMHhDKQotI2RlZmluZSBDQ01fU1BDVEwxCShDQ01fQkFTRSArIDB4MTApCi0jZGVmaW5lIENDTV9QQ0RSCShDQ01fQkFTRSArIDB4MjApCi0KLSNkZWZpbmUgQ0NNX0NTQ1JfQ0xLT19PRkZTRVQJMjkKLSNkZWZpbmUgQ0NNX0NTQ1JfQ0xLT19NQVNLCSgweDcgPDwgMjkpCi0jZGVmaW5lIENDTV9DU0NSX1VTQl9PRkZTRVQJMjYKLSNkZWZpbmUgQ0NNX0NTQ1JfVVNCX01BU0sJKDB4NyA8PCAyNikKLSNkZWZpbmUgQ0NNX0NTQ1JfU1BMTF9SRVNUQVJUCSgxIDw8IDIyKQotI2RlZmluZSBDQ01fQ1NDUl9NUExMX1JFU1RBUlQJKDEgPDwgMjEpCi0jZGVmaW5lIENDTV9DU0NSX09TQ19FTl9TSElGVAkxNwotI2RlZmluZSBDQ01fQ1NDUl9TWVNURU1fU0VMCSgxIDw8IDE2KQotI2RlZmluZSBDQ01fQ1NDUl9CQ0xLX09GRlNFVAkxMAotI2RlZmluZSBDQ01fQ1NDUl9CQ0xLX01BU0sJKDB4RiA8PCAxMCkKLSNkZWZpbmUgQ0NNX0NTQ1JfUFJFU0MJCSgxIDw8IDE1KQotI2RlZmluZSBDQ01fQ1NDUl9TUEVOCQkoMSA8PCAxKQotI2RlZmluZSBDQ01fQ1NDUl9NUEVOCQkoMSA8PCAwKQotCi0jZGVmaW5lIENDTV9QQ0RSX1BDTEszX09GRlNFVAkxNgotI2RlZmluZSBDQ01fUENEUl9QQ0xLM19NQVNLCSgweDdGIDw8IDE2KQotI2RlZmluZSBDQ01fUENEUl9QQ0xLMl9PRkZTRVQJNAotI2RlZmluZSBDQ01fUENEUl9QQ0xLMl9NQVNLCSgweEYgPDwgNCkKLSNkZWZpbmUgQ0NNX1BDRFJfUENMSzFfT0ZGU0VUCTAKLSNkZWZpbmUgQ0NNX1BDRFJfUENMSzFfTUFTSwkweEYKLQotLyogU0NNIHJlZ2lzdGVyIGFkZHJlc3NlcyAqLwotI2RlZmluZSBTQ01fU0lEUgkoU0NNX0JBU0UgKyAweDApCi0jZGVmaW5lIFNDTV9GTUNSCShTQ01fQkFTRSArIDB4NCkKLSNkZWZpbmUgU0NNX0dQQ1IJKFNDTV9CQVNFICsgMHg4KQotI2RlZmluZSBTQ01fR0NDUgkoU0NNX0JBU0UgKyAweEMpCi0KLSNkZWZpbmUgU0NNX0dDQ1JfRE1BX0NMS19FTl9PRkZTRVQJMwotI2RlZmluZSBTQ01fR0NDUl9DU0lfQ0xLX0VOX09GRlNFVAkyCi0jZGVmaW5lIFNDTV9HQ0NSX01NQV9DTEtfRU5fT0ZGU0VUCTEKLSNkZWZpbmUgU0NNX0dDQ1JfVVNCRF9DTEtfRU5fT0ZGU0VUCTAKLQotI2VuZGlmIC8qIF9fQVJDSF9BUk1fTUFDSF9NWDJfQ1JNX1JFR1NfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW14MS9kZXZpY2VzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2YmUyOWQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDEvZGV2aWNlcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwNi0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgMjAwOCBTYXNjaGEgSGF1ZXIsIGtlcm5lbEBwZW5ndXRyb25peC5kZQotICogQ29weXJpZ2h0IChjKSAyMDA4IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgotICogQ29weXJpZ2h0IChjKSAyMDA4IERhcml1cyBBdWd1bGlzIDxkYXJpdXMuYXVndWxpc0B0ZWx0b25pa2EubHQ+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0gKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQotI2luY2x1ZGUgImRldmljZXMuaCIKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfY3NpX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0ICA9IDB4MDAyMjQwMDAsCi0JCS5lbmQgICAgPSAweDAwMjI0MDEwLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQgID0gQ1NJX0lOVCwKLQkJLmVuZCAgICA9IENTSV9JTlQsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHU2NCBpbXhfY3NpX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X2NzaV9kZXZpY2UgPSB7Ci0JLm5hbWUgICAgICAgICAgID0gIm14MS1jYW1lcmEiLAotCS5pZCAgICAgICAgICAgICA9IDAsIC8qIFRoaXMgaXMgdXNlZCB0byBwdXQgY2FtZXJhcyBvbiB0aGlzIGludGVyZmFjZSAqLwotCS5kZXYJCT0gewotCQkuZG1hX21hc2sgPSAmaW14X2NzaV9kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAotCX0sCi0JLnJlc291cmNlICAgICAgID0gaW14X2NzaV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShpbXhfY3NpX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF9pMmNfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQgID0gMHgwMDIxNzAwMCwKLQkJLmVuZCAgICA9IDB4MDAyMTcwMTAsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydCAgPSBJMkNfSU5ULAotCQkuZW5kICAgID0gSTJDX0lOVCwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9pMmNfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICA9ICJpbXgtaTJjIiwKLQkuaWQgICAgICAgICAgICAgPSAwLAotCS5yZXNvdXJjZSAgICAgICA9IGlteF9pMmNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoaW14X2kyY19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfdWFydDFfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBVQVJUMV9CQVNFX0FERFIsCi0JCS5lbmQJPSBVQVJUMV9CQVNFX0FERFIgKyAweEQwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydAk9IFVBUlQxX01JTlRfUlgsCi0JCS5lbmQJPSBVQVJUMV9NSU5UX1JYLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LCB7Ci0JCS5zdGFydAk9IFVBUlQxX01JTlRfVFgsCi0JCS5lbmQJPSBVQVJUMV9NSU5UX1RYLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LCB7Ci0JCS5zdGFydAk9IFVBUlQxX01JTlRfUlRTLAotCQkuZW5kCT0gVUFSVDFfTUlOVF9SVFMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF91YXJ0MV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImlteC11YXJ0IiwKLQkuaWQJCT0gMCwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaW14X3VhcnQxX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gaW14X3VhcnQxX3Jlc291cmNlcywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X3VhcnQyX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gVUFSVDJfQkFTRV9BRERSLAotCQkuZW5kCT0gVUFSVDJfQkFTRV9BRERSICsgMHhEMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQJPSBVQVJUMl9NSU5UX1JYLAotCQkuZW5kCT0gVUFSVDJfTUlOVF9SWCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwgewotCQkuc3RhcnQJPSBVQVJUMl9NSU5UX1RYLAotCQkuZW5kCT0gVUFSVDJfTUlOVF9UWCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwgewotCQkuc3RhcnQJPSBVQVJUMl9NSU5UX1JUUywKLQkJLmVuZAk9IFVBUlQyX01JTlRfUlRTLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfdWFydDJfZGV2aWNlID0gewotCS5uYW1lCQk9ICJpbXgtdWFydCIsCi0JLmlkCQk9IDEsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGlteF91YXJ0Ml9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IGlteF91YXJ0Ml9yZXNvdXJjZXMsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF9ydGNfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQgID0gMHgwMDIwNDAwMCwKLQkJLmVuZCAgICA9IDB4MDAyMDQwMjQsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydCAgPSBSVENfSU5ULAotCQkuZW5kICAgID0gUlRDX0lOVCwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAotCX0sIHsKLQkJLnN0YXJ0ICA9IFJUQ19TQU1JTlQsCi0JCS5lbmQgICAgPSBSVENfU0FNSU5ULAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3J0Y19kZXZpY2UgPSB7Ci0JLm5hbWUgICAgICAgICAgID0gInJ0Yy1pbXgiLAotCS5pZCAgICAgICAgICAgICA9IDAsCi0JLnJlc291cmNlICAgICAgID0gaW14X3J0Y19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShpbXhfcnRjX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF93ZHRfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQgID0gMHgwMDIwMTAwMCwKLQkJLmVuZCAgICA9IDB4MDAyMDEwMDgsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydCAgPSBXRFRfSU5ULAotCQkuZW5kICAgID0gV0RUX0lOVCwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF93ZHRfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICA9ICJpbXgtd2R0IiwKLQkuaWQgICAgICAgICAgICAgPSAwLAotCS5yZXNvdXJjZSAgICAgICA9IGlteF93ZHRfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoaW14X3dkdF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfdXNiX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gMHgwMDIxMjAwMCwKLQkJLmVuZAk9IDB4MDAyMTIxNDgsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0CT0gVVNCRF9JTlQwLAotCQkuZW5kCT0gVVNCRF9JTlQwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LCB7Ci0JCS5zdGFydAk9IFVTQkRfSU5UMSwKLQkJLmVuZAk9IFVTQkRfSU5UMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwgewotCQkuc3RhcnQJPSBVU0JEX0lOVDIsCi0JCS5lbmQJPSBVU0JEX0lOVDIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sIHsKLQkJLnN0YXJ0CT0gVVNCRF9JTlQzLAotCQkuZW5kCT0gVVNCRF9JTlQzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LCB7Ci0JCS5zdGFydAk9IFVTQkRfSU5UNCwKLQkJLmVuZAk9IFVTQkRfSU5UNCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwgewotCQkuc3RhcnQJPSBVU0JEX0lOVDUsCi0JCS5lbmQJPSBVU0JEX0lOVDUsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sIHsKLQkJLnN0YXJ0CT0gVVNCRF9JTlQ2LAotCQkuZW5kCT0gVVNCRF9JTlQ2LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfdXNiX2RldmljZSA9IHsKLQkubmFtZQkJPSAiaW14X3VkYyIsCi0JLmlkCQk9IDAsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGlteF91c2JfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBpbXhfdXNiX3Jlc291cmNlcywKLX07Ci0KLS8qIEdQSU8gcG9ydCBkZXNjcmlwdGlvbiAqLwotc3RhdGljIHN0cnVjdCBteGNfZ3Bpb19wb3J0IGlteF9ncGlvX3BvcnRzW10gPSB7Ci0JewotCQkuY2hpcC5sYWJlbCA9ICJncGlvLTAiLAotCQkuYmFzZSA9ICh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKEdQSU9fQkFTRV9BRERSKSwKLQkJLmlycSA9IEdQSU9fSU5UX1BPUlRBLAotCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQsCi0JfSwgewotCQkuY2hpcC5sYWJlbCA9ICJncGlvLTEiLAotCQkuYmFzZSA9ICh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKEdQSU9fQkFTRV9BRERSICsgMHgxMDApLAotCQkuaXJxID0gR1BJT19JTlRfUE9SVEIsCi0JCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDMyLAotCX0sIHsKLQkJLmNoaXAubGFiZWwgPSAiZ3Bpby0yIiwKLQkJLmJhc2UgPSAodm9pZCBfX2lvbWVtICopSU9fQUREUkVTUyhHUElPX0JBU0VfQUREUiArIDB4MjAwKSwKLQkJLmlycSA9IEdQSU9fSU5UX1BPUlRDLAotCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyA2NCwKLQl9LCB7Ci0JCS5jaGlwLmxhYmVsID0gImdwaW8tMyIsCi0JCS5iYXNlID0gKHZvaWQgX19pb21lbSAqKUlPX0FERFJFU1MoR1BJT19CQVNFX0FERFIgKyAweDMwMCksCi0JCS5pcnEgPSBHUElPX0lOVF9QT1JURCwKLQkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgOTYsCi0JfQotfTsKLQotaW50IF9faW5pdCBteGNfcmVnaXN0ZXJfZ3Bpb3Modm9pZCkKLXsKLQlyZXR1cm4gbXhjX2dwaW9faW5pdChpbXhfZ3Bpb19wb3J0cywgQVJSQVlfU0laRShpbXhfZ3Bpb19wb3J0cykpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDEvZGV2aWNlcy5oIGIvYXJjaC9hcm0vbWFjaC1teDEvZGV2aWNlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGE1ZDdjLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbXgxL2RldmljZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X2NzaV9kZXZpY2U7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfaTJjX2RldmljZTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF91YXJ0MV9kZXZpY2U7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfdWFydDJfZGV2aWNlOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3J0Y19kZXZpY2U7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfd2R0X2RldmljZTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF91c2JfZGV2aWNlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDEvZ2VuZXJpYy5jIGIvYXJjaC9hcm0vbWFjaC1teDEvZ2VuZXJpYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjlmYzEwLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbXgxL2dlbmVyaWMuYworKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiAgYXV0aG9yOiBTYXNjaGEgSGF1ZXIKLSAqICBDcmVhdGVkOiBhcHJpbCAyMHRoLCAyMDA0Ci0gKiAgQ29weXJpZ2h0OiBTeW5lcnRyb25peHggR21iSAotICoKLSAqICBDb21tb24gY29kZSBmb3IgaS5NWCBtYWNoaW5lcwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotCi0jaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgaW14X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewotCXsKLQkJLnZpcnR1YWwJPSBJTVhfSU9fQkFTRSwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKElNWF9JT19QSFlTKSwKLQkJLmxlbmd0aAkJPSBJTVhfSU9fU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFCi0JfQotfTsKLQotdm9pZCBfX2luaXQgbXgxX21hcF9pbyh2b2lkKQotewotCW14Y19zZXRfY3B1X3R5cGUoTVhDX0NQVV9NWDEpOwotCW14Y19hcmNoX3Jlc2V0X2luaXQoSU9fQUREUkVTUyhXRFRfQkFTRV9BRERSKSk7Ci0KLQlpb3RhYmxlX2luaXQoaW14X2lvX2Rlc2MsIEFSUkFZX1NJWkUoaW14X2lvX2Rlc2MpKTsKLX0KLQotdm9pZCBfX2luaXQgbXgxX2luaXRfaXJxKHZvaWQpCi17Ci0JbXhjX2luaXRfaXJxKElPX0FERFJFU1MoQVZJQ19CQVNFX0FERFIpKTsKLX0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDEvbWFjaC1teDFhZHMuYyBiL2FyY2gvYXJtL21hY2gtbXgxL21hY2gtbXgxYWRzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxZjNjZmQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDEvbWFjaC1teDFhZHMuYworKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDFhZHMuYwotICoKLSAqIEluaXRpYWxseSBiYXNlZCBvbjoKLSAqCWxpbnV4LTIuNi43LWlteC9hcmNoL2FybS9tYWNoLWlteC9zY2I5MzI4LmMKLSAqCUNvcHlyaWdodCAoYykgMjAwNCBTYXNjaGEgSGF1ZXIgPHNhc2NoYUBzYXNjaGFoYXVlci5kZT4KLSAqCi0gKiAyMDA0IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKgotICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKLSAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjL3BjZjg1N3guaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLQotI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvaTJjLmg+Ci0jaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgotI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgxLmg+Ci0jaW5jbHVkZSA8bWFjaC9pcnFzLmg+Ci0KLSNpbmNsdWRlICJkZXZpY2VzLmgiCi0KLXN0YXRpYyBpbnQgbXgxYWRzX3BpbnNbXSA9IHsKLQkvKiBVQVJUMSAqLwotCVBDOV9QRl9VQVJUMV9DVFMsCi0JUEMxMF9QRl9VQVJUMV9SVFMsCi0JUEMxMV9QRl9VQVJUMV9UWEQsCi0JUEMxMl9QRl9VQVJUMV9SWEQsCi0JLyogVUFSVDIgKi8KLQlQQjI4X1BGX1VBUlQyX0NUUywKLQlQQjI5X1BGX1VBUlQyX1JUUywKLQlQQjMwX1BGX1VBUlQyX1RYRCwKLQlQQjMxX1BGX1VBUlQyX1JYRCwKLQkvKiBJMkMgKi8KLQlQQTE1X1BGX0kyQ19TREEsCi0JUEExNl9QRl9JMkNfU0NMLAotCS8qIFNQSSAqLwotCVBDMTNfUEZfU1BJMV9TUElfUkRZLAotCVBDMTRfUEZfU1BJMV9TQ0xLLAotCVBDMTVfUEZfU1BJMV9TUywKLQlQQzE2X1BGX1NQSTFfTUlTTywKLQlQQzE3X1BGX1NQSTFfTU9TSSwKLX07Ci0KLS8qCi0gKiBVQVJUcyBwbGF0Zm9ybSBkYXRhCi0gKi8KLQotc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YVtdID0gewotCXsKLQkJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKLQl9LCB7Ci0JCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCi0JfSwKLX07Ci0KLS8qCi0gKiBQaHlzbWFwIGZsYXNoCi0gKi8KLQotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbXgxYWRzX2ZsYXNoX2RhdGEgPSB7Ci0JLndpZHRoCQk9IDQsCQkvKiBiYW5rd2lkdGggaW4gYnl0ZXMgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZmxhc2hfcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0CT0gSU1YX0NTMF9QSFlTLAotCS5lbmQJPSBJTVhfQ1MwX1BIWVMgKyBTWl8zMk0gLSAxLAotCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZmxhc2hfZGV2aWNlID0gewotCS5uYW1lCT0gInBoeXNtYXAtZmxhc2giLAotCS5pZAk9IDAsCi0JLnJlc291cmNlID0gJmZsYXNoX3Jlc291cmNlLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLX07Ci0KLS8qCi0gKiBJMkMKLSAqLwotc3RhdGljIHN0cnVjdCBwY2Y4NTd4X3BsYXRmb3JtX2RhdGEgcGNmODU3eF9kYXRhW10gPSB7Ci0JewotCQkuZ3Bpb19iYXNlID0gNCAqIDMyLAotCX0sIHsKLQkJLmdwaW9fYmFzZSA9IDQgKiAzMiArIDE2LAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaW14aTJjX3BsYXRmb3JtX2RhdGEgbXgxYWRzX2kyY19kYXRhID0gewotCS5iaXRyYXRlID0gMTAwMDAwLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBteDFhZHNfaTJjX2RldmljZXNbXSA9IHsKLQl7Ci0JCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTc1IiwgMHgyMiksCi0JCS5wbGF0Zm9ybV9kYXRhID0gJnBjZjg1N3hfZGF0YVswXSwKLQl9LCB7Ci0JCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTc1IiwgMHgyNCksCi0JCS5wbGF0Zm9ybV9kYXRhID0gJnBjZjg1N3hfZGF0YVsxXSwKLQl9LAotfTsKLQotLyoKLSAqIEJvYXJkIGluaXQKLSAqLwotc3RhdGljIHZvaWQgX19pbml0IG14MWFkc19pbml0KHZvaWQpCi17Ci0JbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhteDFhZHNfcGlucywKLQkJQVJSQVlfU0laRShteDFhZHNfcGlucyksICJteDFhZHMiKTsKLQotCS8qIFVBUlQgKi8KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZpbXhfdWFydDFfZGV2aWNlLCAmdWFydF9wZGF0YVswXSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmaW14X3VhcnQyX2RldmljZSwgJnVhcnRfcGRhdGFbMV0pOwotCi0JLyogUGh5c21hcCBmbGFzaCAqLwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJmZsYXNoX2RldmljZSwgJm14MWFkc19mbGFzaF9kYXRhKTsKLQotCS8qIEkyQyAqLwotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIG14MWFkc19pMmNfZGV2aWNlcywKLQkJCQlBUlJBWV9TSVpFKG14MWFkc19pMmNfZGV2aWNlcykpOwotCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmaW14X2kyY19kZXZpY2UsICZteDFhZHNfaTJjX2RhdGEpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgbXgxYWRzX3RpbWVyX2luaXQodm9pZCkKLXsKLQlteDFfY2xvY2tzX2luaXQoMzIwMDApOwotfQotCi1zdHJ1Y3Qgc3lzX3RpbWVyIG14MWFkc190aW1lciA9IHsKLQkuaW5pdAk9IG14MWFkc190aW1lcl9pbml0LAotfTsKLQotTUFDSElORV9TVEFSVChNWDFBRFMsICJGcmVlc2NhbGUgTVgxQURTIikKLQkvKiBNYWludGFpbmVyOiBTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4ICovCi0JLnBoeXNfaW8JPSBJTVhfSU9fUEhZUywKLQkuaW9fcGdfb2Zmc3QJPSAoSU1YX0lPX0JBU0UgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcwk9IE1YMV9QSFlTX09GRlNFVCArIDB4MTAwLAotCS5tYXBfaW8JCT0gbXgxX21hcF9pbywKLQkuaW5pdF9pcnEJPSBteDFfaW5pdF9pcnEsCi0JLnRpbWVyCQk9ICZteDFhZHNfdGltZXIsCi0JLmluaXRfbWFjaGluZQk9IG14MWFkc19pbml0LAotTUFDSElORV9FTkQKLQotTUFDSElORV9TVEFSVChNWExBRFMsICJGcmVlc2NhbGUgTVhMQURTIikKLQkucGh5c19pbwk9IElNWF9JT19QSFlTLAotCS5pb19wZ19vZmZzdAk9IChJTVhfSU9fQkFTRSA+PiAxOCkgJiAweGZmZmMsCi0JLmJvb3RfcGFyYW1zCT0gTVgxX1BIWVNfT0ZGU0VUICsgMHgxMDAsCi0JLm1hcF9pbwkJPSBteDFfbWFwX2lvLAotCS5pbml0X2lycQk9IG14MV9pbml0X2lycSwKLQkudGltZXIJCT0gJm14MWFkc190aW1lciwKLQkuaW5pdF9tYWNoaW5lCT0gbXgxYWRzX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDEvbWFjaC1zY2I5MzI4LmMgYi9hcmNoL2FybS9tYWNoLW14MS9tYWNoLXNjYjkzMjguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU4N2E3YS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW14MS9tYWNoLXNjYjkzMjguYworKysgL2Rldi9udWxsCkBAIC0xLDE1OCArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1teDEvbWFjaC1zY2I5MzI4LmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2FzY2hhIEhhdWVyIDxzYXNjaGFoYXVlckB3ZWIuZGU+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBKdWVyZ2VuIEJlaXNlcnQgPGpiZWlzZXJ0QG5ldHNjYXBlLm5ldD4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9kbTkwMDAuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLQotI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgotI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KLSNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MS5oPgotCi0jaW5jbHVkZSAiZGV2aWNlcy5oIgotCi0vKgotICogVGhpcyBzY2I5MzI4IGhhcyBhIDMyTWlCIGZsYXNoCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZmxhc2hfcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0CT0gSU1YX0NTMF9QSFlTLAotCS5lbmQJPSBJTVhfQ1MwX1BIWVMgKyAoMzIgKiAxMDI0ICogMTAyNCkgLSAxLAotCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotfTsKLQotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgc2NiX2ZsYXNoX2RhdGEgPSB7Ci0JLndpZHRoICA9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2JfZmxhc2hfZGV2aWNlID0gewotCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKLQkuaWQJCT0gMCwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzY2JfZmxhc2hfZGF0YSwKLQl9LAotCS5yZXNvdXJjZSA9ICZmbGFzaF9yZXNvdXJjZSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi19OwotCi0vKgotICogc2NiOTMyOCBoYXMgYSBETTkwMDAgbmV0d29yayBjb250cm9sbGVyCi0gKiBjb25uZWN0ZWQgdG8gQ1M1LCB3aXRoIDE2IGJpdCBkYXRhIHBhdGgKLSAqIGFuZCBpbnRlcnJ1cHQgY29ubmVjdGVkIHRvIEdQSU8gMwotICovCi0KLS8qCi0gKiBpbnRlcm5hbCBkYXRhcGF0aCBpcyBmaXhlZCAxNiBiaXQKLSAqLwotc3RhdGljIHN0cnVjdCBkbTkwMDBfcGxhdF9kYXRhIGRtOTAwMF9wbGF0ZGF0YSA9IHsKLQkuZmxhZ3MJPSBETTkwMDBfUExBVEZfMTZCSVRPTkxZLAotfTsKLQotLyoKLSAqIHRoZSBETTkwMDAgZHJpdmVycyB3YW50cyB0d28gZGVmaW5lZCBhZGRyZXNzIHNwYWNlcwotICogdG8gZ2FpbiBhY2Nlc3MgdG8gYWRkcmVzcyBsYXRjaCByZWdpc3RlcnMgYW5kIHRoZSBkYXRhIHBhdGguCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZG05MDAweF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5uYW1lCT0gImFkZHJlc3MgYXJlYSIsCi0JCS5zdGFydAk9IElNWF9DUzVfUEhZUywKLQkJLmVuZAk9IElNWF9DUzVfUEhZUyArIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAkvKiBhZGRyZXNzIGFjY2VzcyAqLwotCX0sIHsKLQkJLm5hbWUJPSAiZGF0YSBhcmVhIiwKLQkJLnN0YXJ0CT0gSU1YX0NTNV9QSFlTICsgNCwKLQkJLmVuZAk9IElNWF9DUzVfUEhZUyArIDUsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAkvKiBkYXRhIGFjY2VzcyAqLwotCX0sIHsKLQkJLnN0YXJ0CT0gSVJRX0dQSU9DKDMpLAotCQkuZW5kCT0gSVJRX0dQSU9DKDMpLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0xPV0xFVkVMLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbTkwMDB4X2RldmljZSA9IHsKLQkubmFtZQkJPSAiZG05MDAwIiwKLQkuaWQJCT0gMCwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZG05MDAweF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IGRtOTAwMHhfcmVzb3VyY2VzLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZkbTkwMDBfcGxhdGRhdGEsCi0JfQotfTsKLQotc3RhdGljIGludCBteGNfdWFydDFfcGluc1tdID0gewotCVBDOV9QRl9VQVJUMV9DVFMsCi0JUEMxMF9QRl9VQVJUMV9SVFMsCi0JUEMxMV9QRl9VQVJUMV9UWEQsCi0JUEMxMl9QRl9VQVJUMV9SWEQsCi19OwotCi1zdGF0aWMgaW50IHVhcnQxX214Y19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JcmV0dXJuIG14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMobXhjX3VhcnQxX3BpbnMsCi0JCQlBUlJBWV9TSVpFKG14Y191YXJ0MV9waW5zKSwgIlVBUlQxIik7Ci19Ci0KLXN0YXRpYyBpbnQgdWFydDFfbXhjX2V4aXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlteGNfZ3Bpb19yZWxlYXNlX211bHRpcGxlX3BpbnMobXhjX3VhcnQxX3BpbnMsCi0JCQlBUlJBWV9TSVpFKG14Y191YXJ0MV9waW5zKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgPSB7Ci0JLmluaXQgPSB1YXJ0MV9teGNfaW5pdCwKLQkuZXhpdCA9IHVhcnQxX214Y19leGl0LAotCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnNjYl9mbGFzaF9kZXZpY2UsCi0JJmRtOTAwMHhfZGV2aWNlLAotfTsKLQotLyoKLSAqIHNjYjkzMjhfaW5pdCAtIEluaXQgdGhlIENQVSBjYXJkIGl0c2VsZgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgc2NiOTMyOF9pbml0KHZvaWQpCi17Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmaW14X3VhcnQxX2RldmljZSwgJnVhcnRfcGRhdGEpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyJTY2I5MzI4OiBBZGRpbmcgZGV2aWNlc1xuIik7Ci0JcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzY2I5MzI4X3RpbWVyX2luaXQodm9pZCkKLXsKLQlteDFfY2xvY2tzX2luaXQoMzIwMDApOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c190aW1lciBzY2I5MzI4X3RpbWVyID0gewotCS5pbml0CT0gc2NiOTMyOF90aW1lcl9pbml0LAotfTsKLQotTUFDSElORV9TVEFSVChTQ0I5MzI4LCAiU3luZXJ0cm9uaXh4IHNjYjkzMjgiKQotICAgIC8qIFNhc2NoYSBIYXVlciAqLwotCS5waHlzX2lvCT0gMHgwMDIwMDAwMCwKLQkuaW9fcGdfb2Zmc3QJPSAoKDB4ZTAyMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMJPSAweDA4MDAwMTAwLAotCS5tYXBfaW8JCT0gbXgxX21hcF9pbywKLQkuaW5pdF9pcnEJPSBteDFfaW5pdF9pcnEsCi0JLnRpbWVyCQk9ICZzY2I5MzI4X3RpbWVyLAotCS5pbml0X21hY2hpbmUJPSBzY2I5MzI4X2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbXgyL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MmZkNGUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi1pZiBBUkNIX01YMgotCi1jaG9pY2UKLQlwcm9tcHQgIkNQVXM6IgotCWRlZmF1bHQgTUFDSF9NWDIxCi0KLWNvbmZpZyBNQUNIX01YMjEKLQlib29sICJpLk1YMjEgc3VwcG9ydCIKLQlzZWxlY3QgQVJDSF9NWENfQVVETVVYX1YxCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIEZyZWVzY2FsZSdzIE1YMiBiYXNlZCBpLk1YMjEgcHJvY2Vzc29yLgotCi1jb25maWcgTUFDSF9NWDI3Ci0JYm9vbCAiaS5NWDI3IHN1cHBvcnQiCi0Jc2VsZWN0IEFSQ0hfTVhDX0FVRE1VWF9WMQotCWhlbHAKLQkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBGcmVlc2NhbGUncyBNWDIgYmFzZWQgaS5NWDI3IHByb2Nlc3Nvci4KLQotZW5kY2hvaWNlCi0KLWNvbW1lbnQgIk1YMiBwbGF0Zm9ybXM6IgotCi1jb25maWcgTUFDSF9NWDIxQURTCi0JYm9vbCAiTVgyMUFEUyBwbGF0Zm9ybSIKLQlkZXBlbmRzIG9uIE1BQ0hfTVgyMQotCWhlbHAKLQkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgTVgyMUFEUyBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcyBzcGVjaWZpYwotCSAgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBib2FyZCBhbmQgaXRzIHBlcmlwaGVyYWxzLgotCi1jb25maWcgTUFDSF9NWDI3QURTCi0JYm9vbCAiTVgyN0FEUyBwbGF0Zm9ybSIKLQlkZXBlbmRzIG9uIE1BQ0hfTVgyNwotCWhlbHAKLQkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgTVgyN0FEUyBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcyBzcGVjaWZpYwotCSAgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBib2FyZCBhbmQgaXRzIHBlcmlwaGVyYWxzLgotCi1jb25maWcgTUFDSF9QQ00wMzgKLQlib29sICJQaHl0ZWMgcGh5Q09SRS1pLk1YMjcgQ1BVIG1vZHVsZSAocGNtMDM4KSIKLQlkZXBlbmRzIG9uIE1BQ0hfTVgyNwotCXNlbGVjdCBNWENfVUxQSSBpZiBVU0JfVUxQSQotCWhlbHAKLQkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgcGh5Q09SRS1pLk1YMjcgKGFrYSBwY20wMzgpIHBsYXRmb3JtLiBUaGlzCi0JICBpbmNsdWRlcyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBmb3IgdGhlIG1vZHVsZSBhbmQgaXRzIHBlcmlwaGVyYWxzLgotCi1jaG9pY2UKLQlwcm9tcHQgIkJhc2Vib2FyZCIKLQlkZXBlbmRzIG9uIE1BQ0hfUENNMDM4Ci0JZGVmYXVsdCBNQUNIX1BDTTk3MF9CQVNFQk9BUkQKLQotY29uZmlnIE1BQ0hfUENNOTcwX0JBU0VCT0FSRAotCXByb21wdCAiUEhZVEVDIFBDTTk3MCBkZXZlbG9wbWVudCBib2FyZCIKLQlib29sCi0JaGVscAotCSAgVGhpcyBhZGRzIGJvYXJkIHNwZWNpZmljIGRldmljZXMgdGhhdCBjYW4gYmUgZm91bmQgb24gUGh5dGVjJ3MKLQkgIFBDTTk3MCBldmFsdWF0aW9uIGJvYXJkLgotCi1lbmRjaG9pY2UKLQotY29uZmlnIE1BQ0hfQ1BVSU1YMjcKLQlib29sICJFdWtyZWEgQ1BVSU1YMjcgbW9kdWxlIgotCWRlcGVuZHMgb24gTUFDSF9NWDI3Ci0JaGVscAotCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBFdWtyZWEgQ1BVSU1YMjcgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMKLQkgIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgbW9kdWxlIGFuZCBpdHMgcGVyaXBoZXJhbHMuCi0KLWNvbmZpZyBNQUNIX0VVS1JFQV9DUFVJTVgyN19VU0VTREhDMgotCWJvb2wgIkNQVUlNWDI3IGludGVncmF0ZXMgU0RIQzIgbW9kdWxlIgotCWRlcGVuZHMgb24gTUFDSF9DUFVJTVgyNwotCWhlbHAKLQkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgaW50ZXJuYWwgU0RIQzIgdXNlZCBvbiBDUFVJTVgyNyB1c2VkCi0JICBmb3Igd2lmaSBvciBlTU1DLgotCi1jaG9pY2UKLQlwcm9tcHQgIkJhc2Vib2FyZCIKLQlkZXBlbmRzIG9uIE1BQ0hfQ1BVSU1YMjcKLQlkZWZhdWx0IE1BQ0hfRVVLUkVBX01CSU1YMjdfQkFTRUJPQVJECi0KLWNvbmZpZyBNQUNIX0VVS1JFQV9NQklNWDI3X0JBU0VCT0FSRAotCXByb21wdCAiRXVrcmVhIE1CSU1YMjcgZGV2ZWxvcG1lbnQgYm9hcmQiCi0JYm9vbAotCWhlbHAKLQkgIFRoaXMgYWRkcyBib2FyZCBzcGVjaWZpYyBkZXZpY2VzIHRoYXQgY2FuIGJlIGZvdW5kIG9uIEV1a3JlYSdzCi0JICBNQklNWDI3IGV2YWx1YXRpb24gYm9hcmQuCi0KLWVuZGNob2ljZQotCi1jb25maWcgTUFDSF9NWDI3XzNEUwotCWJvb2wgIk1YMjdQREsgcGxhdGZvcm0iCi0JZGVwZW5kcyBvbiBNQUNIX01YMjcKLQloZWxwCi0JICBJbmNsdWRlIHN1cHBvcnQgZm9yIE1YMjdQREsgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMgc3BlY2lmaWMKLQkgIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYm9hcmQgYW5kIGl0cyBwZXJpcGhlcmFscy4KLQotY29uZmlnIE1BQ0hfSU1YMjdMSVRFCi0JYm9vbCAiTG9naWNQRCBNWDI3IExJVEVLSVQgcGxhdGZvcm0iCi0JZGVwZW5kcyBvbiBNQUNIX01YMjcKLQloZWxwCi0JICBJbmNsdWRlIHN1cHBvcnQgZm9yIE1YMjcgTElURUtJVCBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcyBzcGVjaWZpYwotCSAgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBib2FyZCBhbmQgaXRzIHBlcmlwaGVyYWxzLgotCi1jb25maWcgTUFDSF9QQ0ExMDAKLQlib29sICJQaHl0ZWMgcGh5Q0FSRC1zIChwY2ExMDApIgotCWRlcGVuZHMgb24gTUFDSF9NWDI3Ci0Jc2VsZWN0IE1YQ19VTFBJIGlmIFVTQl9VTFBJCi0JaGVscAotCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBwaHlDQVJELXMgKGFrYSBwY2ExMDApIHBsYXRmb3JtLiBUaGlzCi0JICBpbmNsdWRlcyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBmb3IgdGhlIG1vZHVsZSBhbmQgaXRzIHBlcmlwaGVyYWxzLgotCi1jb25maWcgTUFDSF9NWFRfVEQ2MAotCWJvb2wgIk1heHRyYWNrIGktTVhUIFRENjAiCi0JZGVwZW5kcyBvbiBNQUNIX01YMjcKLQloZWxwCi0JICBJbmNsdWRlIHN1cHBvcnQgZm9yIGktTVhUIChha2EgdGQ2MCkgcGxhdGZvcm0uIFRoaXMKLQkgIGluY2x1ZGVzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgbW9kdWxlIGFuZCBpdHMgcGVyaXBoZXJhbHMuCi0KLWVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbXgyL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzI1NGZhLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotIwotIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KLSMKLQotIyBPYmplY3QgZmlsZSBsaXN0cy4KLQotb2JqLXkJOj0gIGRldmljZXMubyBzZXJpYWwubwotCi1vYmotJChDT05GSUdfTUFDSF9NWDIxKSArPSBjbG9ja19pbXgyMS5vIG1tLWlteDIxLm8KLQotb2JqLSQoQ09ORklHX01BQ0hfTVgyNykgKz0gY3B1X2lteDI3Lm8KLW9iai0kKENPTkZJR19NQUNIX01YMjcpICs9IGNsb2NrX2lteDI3Lm8gbW0taW14MjcubwotCi1vYmotJChDT05GSUdfTUFDSF9NWDIxQURTKSArPSBtYWNoLW14MjFhZHMubwotb2JqLSQoQ09ORklHX01BQ0hfTVgyN0FEUykgKz0gbWFjaC1teDI3YWRzLm8KLW9iai0kKENPTkZJR19NQUNIX1BDTTAzOCkgKz0gbWFjaC1wY20wMzgubwotb2JqLSQoQ09ORklHX01BQ0hfUENNOTcwX0JBU0VCT0FSRCkgKz0gcGNtOTcwLWJhc2Vib2FyZC5vCi1vYmotJChDT05GSUdfTUFDSF9NWDI3XzNEUykgKz0gbWFjaC1teDI3XzNkcy5vCi1vYmotJChDT05GSUdfTUFDSF9JTVgyN0xJVEUpICs9IG1hY2gtaW14MjdsaXRlLm8KLW9iai0kKENPTkZJR19NQUNIX0NQVUlNWDI3KSArPSBtYWNoLWNwdWlteDI3Lm8KLW9iai0kKENPTkZJR19NQUNIX0VVS1JFQV9NQklNWDI3X0JBU0VCT0FSRCkgKz0gZXVrcmVhX21iaW14MjctYmFzZWJvYXJkLm8KLW9iai0kKENPTkZJR19NQUNIX1BDQTEwMCkgKz0gbWFjaC1wY2ExMDAubwotb2JqLSQoQ09ORklHX01BQ0hfTVhUX1RENjApICs9IG1hY2gtbXh0X3RkNjAubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtbXgyL01ha2VmaWxlLmJvb3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NjczOTguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvTWFrZWZpbGUuYm9vdAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotenJlbGFkZHItJChDT05GSUdfTUFDSF9NWDIxKQk6PSAweEMwMDA4MDAwCi1wYXJhbXNfcGh5cy0kKENPTkZJR19NQUNIX01YMjEpCTo9IDB4QzAwMDAxMDAKLWluaXRyZF9waHlzLSQoQ09ORklHX01BQ0hfTVgyMSkJOj0gMHhDMDgwMDAwMAotCi16cmVsYWRkci0kKENPTkZJR19NQUNIX01YMjcpCTo9IDB4QTAwMDgwMDAKLXBhcmFtc19waHlzLSQoQ09ORklHX01BQ0hfTVgyNykJOj0gMHhBMDAwMDEwMAotaW5pdHJkX3BoeXMtJChDT05GSUdfTUFDSF9NWDI3KQk6PSAweEEwODAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyNy5jIGIvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGYwODIzYy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyNy5jCisrKyAvZGV2L251bGwKQEAgLTEsNzYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwNC0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgMjAwOCBKdWVyZ2VuIEJlaXNlcnQsIGtlcm5lbEBwZW5ndXRyb25peC5kZQotICogQ29weXJpZ2h0IDIwMDggTWFydGluIEZ1enpleSwgbWZ1enpleUBnbWFpbC5jb20KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKLSAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKLSAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQotI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KLSNpbmNsdWRlIDxhc20vZGl2NjQuaD4KLQotI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KLSNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQotI2RlZmluZSBJT19BRERSX0NDTShvZmYpCShNWDI3X0lPX0FERFJFU1MoTVgyN19DQ01fQkFTRV9BRERSICsgKG9mZikpKQotCi0vKiBSZWdpc3RlciBvZmZzZXRzICovCi0jZGVmaW5lIENDTV9DU0NSCQlJT19BRERSX0NDTSgweDApCi0jZGVmaW5lIENDTV9NUENUTDAJCUlPX0FERFJfQ0NNKDB4NCkKLSNkZWZpbmUgQ0NNX01QQ1RMMQkJSU9fQUREUl9DQ00oMHg4KQotI2RlZmluZSBDQ01fU1BDVEwwCQlJT19BRERSX0NDTSgweGMpCi0jZGVmaW5lIENDTV9TUENUTDEJCUlPX0FERFJfQ0NNKDB4MTApCi0jZGVmaW5lIENDTV9PU0MyNk1DVEwJCUlPX0FERFJfQ0NNKDB4MTQpCi0jZGVmaW5lIENDTV9QQ0RSMAkJSU9fQUREUl9DQ00oMHgxOCkKLSNkZWZpbmUgQ0NNX1BDRFIxCQlJT19BRERSX0NDTSgweDFjKQotI2RlZmluZSBDQ01fUENDUjAJCUlPX0FERFJfQ0NNKDB4MjApCi0jZGVmaW5lIENDTV9QQ0NSMQkJSU9fQUREUl9DQ00oMHgyNCkKLSNkZWZpbmUgQ0NNX0NDU1IJCUlPX0FERFJfQ0NNKDB4MjgpCi0jZGVmaW5lIENDTV9QTUNUTAkJSU9fQUREUl9DQ00oMHgyYykKLSNkZWZpbmUgQ0NNX1BNQ09VTlQJCUlPX0FERFJfQ0NNKDB4MzApCi0jZGVmaW5lIENDTV9XS0dEQ1RMCQlJT19BRERSX0NDTSgweDM0KQotCi0jZGVmaW5lIENDTV9DU0NSX1VQREFURV9ESVMJKDEgPDwgMzEpCi0jZGVmaW5lIENDTV9DU0NSX1NTSTIJCSgxIDw8IDIzKQotI2RlZmluZSBDQ01fQ1NDUl9TU0kxCQkoMSA8PCAyMikKLSNkZWZpbmUgQ0NNX0NTQ1JfVlBVCQkoMSA8PCAyMSkKLSNkZWZpbmUgQ0NNX0NTQ1JfTVNIQyAgICAgICAgICAgKDEgPDwgMjApCi0jZGVmaW5lIENDTV9DU0NSX1NQTExSRVMgICAgICAgICgxIDw8IDE5KQotI2RlZmluZSBDQ01fQ1NDUl9NUExMUkVTICAgICAgICAoMSA8PCAxOCkKLSNkZWZpbmUgQ0NNX0NTQ1JfU1AgICAgICAgICAgICAgKDEgPDwgMTcpCi0jZGVmaW5lIENDTV9DU0NSX01DVSAgICAgICAgICAgICgxIDw8IDE2KQotI2RlZmluZSBDQ01fQ1NDUl9PU0MyNk1ESVYgICAgICAoMSA8PCA0KQotI2RlZmluZSBDQ01fQ1NDUl9PU0MyNk0gICAgICAgICAoMSA8PCAzKQotI2RlZmluZSBDQ01fQ1NDUl9GUE0gICAgICAgICAgICAoMSA8PCAyKQotI2RlZmluZSBDQ01fQ1NDUl9TUEVOICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBDQ01fQ1NDUl9NUEVOICAgICAgICAgICAoMSA8PCAwKQotCi0vKiBpLk1YMjcgVE8gMisgKi8KLSNkZWZpbmUgQ0NNX0NTQ1JfQVJNX1NSQyAgICAgICAgKDEgPDwgMTUpCi0KLSNkZWZpbmUgQ0NNX1NQQ1RMMV9MRiAgICAgICAgICAgKDEgPDwgMTUpCi0jZGVmaW5lIENDTV9TUENUTDFfQlJNTyAgICAgICAgICgxIDw8IDYpCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1wbGxfbWFpbjFfY2xrLCBtcGxsX21haW4yX2NsazsKLQotc3RhdGljIGludCBjbGtfcGNjcl9lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgcmVnOwotCi0JaWYgKCFjbGstPmVuYWJsZV9yZWcpCi0JCXJldHVybiAwOwotCi0JcmVnID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKLQlyZWcgfD0gMSA8PCBjbGstPmVuYWJsZV9zaGlmdDsKLQlfX3Jhd193cml0ZWwocmVnLCBjbGstPmVuYWJsZV9yZWcpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsa19wY2NyX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgcmVnOwotCi0JaWYgKCFjbGstPmVuYWJsZV9yZWcpCi0JCXJldHVybjsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JcmVnICY9IH4oMSA8PCBjbGstPmVuYWJsZV9zaGlmdCk7Ci0JX19yYXdfd3JpdGVsKHJlZywgY2xrLT5lbmFibGVfcmVnKTsKLX0KLQotc3RhdGljIGludCBjbGtfc3BsbF9lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgcmVnOwotCi0JcmVnID0gX19yYXdfcmVhZGwoQ0NNX0NTQ1IpOwotCXJlZyB8PSBDQ01fQ1NDUl9TUEVOOwotCV9fcmF3X3dyaXRlbChyZWcsIENDTV9DU0NSKTsKLQotCXdoaWxlICghKF9fcmF3X3JlYWRsKENDTV9TUENUTDEpICYgQ0NNX1NQQ1RMMV9MRikpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsa19zcGxsX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgcmVnOwotCi0JcmVnID0gX19yYXdfcmVhZGwoQ0NNX0NTQ1IpOwotCXJlZyAmPSB+Q0NNX0NTQ1JfU1BFTjsKLQlfX3Jhd193cml0ZWwocmVnLCBDQ01fQ1NDUik7Ci19Ci0KLXN0YXRpYyBpbnQgY2xrX2NwdV9zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQotewotCWludCBjc2NyID0gX19yYXdfcmVhZGwoQ0NNX0NTQ1IpOwotCi0JaWYgKGNsay0+cGFyZW50ID09IHBhcmVudCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAobXgyN19yZXZpc2lvbigpID49IENISVBfUkVWXzJfMCkgewotCQlpZiAocGFyZW50ID09ICZtcGxsX21haW4xX2NsaykgewotCQkJY3NjciB8PSBDQ01fQ1NDUl9BUk1fU1JDOwotCQl9IGVsc2UgewotCQkJaWYgKHBhcmVudCA9PSAmbXBsbF9tYWluMl9jbGspCi0JCQkJY3NjciAmPSB+Q0NNX0NTQ1JfQVJNX1NSQzsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlfX3Jhd193cml0ZWwoY3NjciwgQ0NNX0NTQ1IpOwotCQljbGstPnBhcmVudCA9IHBhcmVudDsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAtRU5PREVWOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyByb3VuZF9yYXRlX2NwdShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQlpbnQgZGl2OwotCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7Ci0KLQlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0KLQlkaXYgPSBwYXJlbnRfcmF0ZSAvIHJhdGU7Ci0JaWYgKHBhcmVudF9yYXRlICUgcmF0ZSkKLQkJZGl2Kys7Ci0KLQlpZiAoZGl2ID4gNCkKLQkJZGl2ID0gNDsKLQotCXJldHVybiBwYXJlbnRfcmF0ZSAvIGRpdjsKLX0KLQotc3RhdGljIGludCBzZXRfcmF0ZV9jcHUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JdW5zaWduZWQgaW50IGRpdjsKLQl1aW50MzJfdCByZWc7Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKLQotCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQotCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKLQotCWlmIChkaXYgPiA0IHx8IGRpdiA8IDEgfHwgKChwYXJlbnRfcmF0ZSAvIGRpdikgIT0gcmF0ZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZGl2LS07Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChDQ01fQ1NDUik7Ci0JaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApIHsKLQkJcmVnICY9IH4oMyA8PCAxMik7Ci0JCXJlZyB8PSBkaXYgPDwgMTI7Ci0JCXJlZyAmPSB+KENDTV9DU0NSX0ZQTSB8IENDTV9DU0NSX1NQRU4pOwotCQlfX3Jhd193cml0ZWwocmVnIHwgQ0NNX0NTQ1JfVVBEQVRFX0RJUywgQ0NNX0NTQ1IpOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3Qgc2V0IENQVSBmcmVxdWVuY3khXG4iKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgcm91bmRfcmF0ZV9wZXIoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JdTMyIGRpdjsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOwotCi0JcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCi0JZGl2ID0gcGFyZW50X3JhdGUgLyByYXRlOwotCWlmIChwYXJlbnRfcmF0ZSAlIHJhdGUpCi0JCWRpdisrOwotCi0JaWYgKGRpdiA+IDY0KQotCQlkaXYgPSA2NDsKLQotCXJldHVybiBwYXJlbnRfcmF0ZSAvIGRpdjsKLX0KLQotc3RhdGljIGludCBzZXRfcmF0ZV9wZXIoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JdTMyIHJlZzsKLQl1MzIgZGl2OwotCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7Ci0KLQlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0KLQlpZiAoY2xrLT5pZCA8IDAgfHwgY2xrLT5pZCA+IDMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZGl2ID0gcGFyZW50X3JhdGUgLyByYXRlOwotCWlmIChkaXYgPiA2NCB8fCBkaXYgPCAxIHx8ICgocGFyZW50X3JhdGUgLyBkaXYpICE9IHJhdGUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlkaXYtLTsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9QQ0RSMSkgJiB+KDB4M2YgPDwgKGNsay0+aWQgPDwgMykpOwotCXJlZyB8PSBkaXYgPDwgKGNsay0+aWQgPDwgMyk7Ci0JX19yYXdfd3JpdGVsKHJlZywgQ0NNX1BDRFIxKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV91c2Ioc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgdXNiX3BkZjsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOwotCi0JcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCi0JdXNiX3BkZiA9IChfX3Jhd19yZWFkbChDQ01fQ1NDUikgPj4gMjgpICYgMHg3OwotCi0JcmV0dXJuIHBhcmVudF9yYXRlIC8gKHVzYl9wZGYgKyAxVSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX3NzaXgoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHBkZikKLXsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOwotCi0JcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCi0JaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApCi0JCXBkZiArPSA0OyAgLyogTVgyNyBUTzIrICovCi0JZWxzZQotCQlwZGYgPSAocGRmIDwgMikgPyAxMjRVTCA6IHBkZjsgIC8qIE1YMjEgJiBNWDI3IFRPMSAqLwotCi0JcmV0dXJuIDJVTCAqIHBhcmVudF9yYXRlIC8gcGRmOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9zc2kxKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gZ2V0X3JhdGVfc3NpeChjbGssIChfX3Jhd19yZWFkbChDQ01fUENEUjApID4+IDE2KSAmIDB4M2YpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9zc2kyKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gZ2V0X3JhdGVfc3NpeChjbGssIChfX3Jhd19yZWFkbChDQ01fUENEUjApID4+IDI2KSAmIDB4M2YpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9uZmMoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgbmZjX3BkZjsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOwotCi0JcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCi0JaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApCi0JCW5mY19wZGYgPSAoX19yYXdfcmVhZGwoQ0NNX1BDRFIwKSA+PiA2KSAmIDB4ZjsKLQllbHNlCi0JCW5mY19wZGYgPSAoX19yYXdfcmVhZGwoQ0NNX1BDRFIwKSA+PiAxMikgJiAweGY7Ci0KLQlyZXR1cm4gcGFyZW50X3JhdGUgLyAobmZjX3BkZiArIDEpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV92cHUoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgdnB1X3BkZjsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOwotCi0JcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCi0JaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApIHsKLQkJdnB1X3BkZiA9IChfX3Jhd19yZWFkbChDQ01fUENEUjApID4+IDEwKSAmIDB4M2Y7Ci0JCXZwdV9wZGYgKz0gNDsKLQl9IGVsc2UgewotCQl2cHVfcGRmID0gKF9fcmF3X3JlYWRsKENDTV9QQ0RSMCkgPj4gOCkgJiAweGY7Ci0JCXZwdV9wZGYgPSAodnB1X3BkZiA8IDIpID8gMTI0IDogdnB1X3BkZjsKLQl9Ci0KLQlyZXR1cm4gMlVMICogcGFyZW50X3JhdGUgLyB2cHVfcGRmOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyByb3VuZF9yYXRlX3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQlyZXR1cm4gY2xrLT5wYXJlbnQtPnJvdW5kX3JhdGUoY2xrLT5wYXJlbnQsIHJhdGUpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9wYXJlbnQoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotfQotCi1zdGF0aWMgaW50IHNldF9yYXRlX3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQlyZXR1cm4gY2xrLT5wYXJlbnQtPnNldF9yYXRlKGNsay0+cGFyZW50LCByYXRlKTsKLX0KLQotLyogaW4gSHogKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGV4dGVybmFsX2hpZ2hfcmVmZXJlbmNlID0gMjYwMDAwMDA7Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2hpZ2hfcmVmZXJlbmNlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gZXh0ZXJuYWxfaGlnaF9yZWZlcmVuY2U7Ci19Ci0KLS8qIGluIEh6ICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBleHRlcm5hbF9sb3dfcmVmZXJlbmNlID0gMzI3Njg7Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2xvd19yZWZlcmVuY2Uoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBleHRlcm5hbF9sb3dfcmVmZXJlbmNlOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9mcG0oc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpICogMTAyNDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfbXBsbChzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIG14Y19kZWNvZGVfcGxsKF9fcmF3X3JlYWRsKENDTV9NUENUTDApLAotCQkJY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX21wbGxfbWFpbihzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKLQotCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQotCS8qIGkuTVgyNyBUTzI6Ci0JICogY2xrLT5pZCA9PSAwOiBhcm0gY2xvY2sgc291cmNlIHBhdGggMSB3aGljaCBpcyBmcm9tIDIgKiBNUExMIC8gMgotCSAqIGNsay0+aWQgPT0gMTogYXJtIGNsb2NrIHNvdXJjZSBwYXRoIDIgd2hpY2ggaXMgZnJvbSAyICogTVBMTCAvIDMKLQkgKi8KLQlpZiAobXgyN19yZXZpc2lvbigpID49IENISVBfUkVWXzJfMCAmJiBjbGstPmlkID09IDEpCi0JCXJldHVybiAyVUwgKiBwYXJlbnRfcmF0ZSAvIDNVTDsKLQotCXJldHVybiBwYXJlbnRfcmF0ZTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfc3BsbChzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdWludDMyX3QgcmVnOwotCXVuc2lnbmVkIGxvbmcgcmF0ZTsKLQotCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCi0JcmVnID0gX19yYXdfcmVhZGwoQ0NNX1NQQ1RMMCk7Ci0KLQkvKiBPbiBUTzIgd2UgaGF2ZSB0byB3cml0ZSB0aGUgdmFsdWUgYmFjay4gT3RoZXJ3aXNlIHdlCi0JICogcmVhZCAwIGZyb20gdGhpcyByZWdpc3RlciB0aGUgbmV4dCB0aW1lLgotCSAqLwotCWlmIChteDI3X3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wKQotCQlfX3Jhd193cml0ZWwocmVnLCBDQ01fU1BDVEwwKTsKLQotCXJldHVybiBteGNfZGVjb2RlX3BsbChyZWcsIHJhdGUpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9jcHUoc3RydWN0IGNsayAqY2xrKQotewotCXUzMiBkaXY7Ci0JdW5zaWduZWQgbG9uZyByYXRlOwotCi0JaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApCi0JCWRpdiA9IChfX3Jhd19yZWFkbChDQ01fQ1NDUikgPj4gMTIpICYgMHgzOwotCWVsc2UKLQkJZGl2ID0gKF9fcmF3X3JlYWRsKENDTV9DU0NSKSA+PiAxMykgJiAweDc7Ci0KLQlyYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQlyZXR1cm4gcmF0ZSAvIChkaXYgKyAxKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfYWhiKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIHJhdGUsIGJjbGtfcGRmOwotCi0JaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApCi0JCWJjbGtfcGRmID0gKF9fcmF3X3JlYWRsKENDTV9DU0NSKSA+PiA4KSAmIDB4MzsKLQllbHNlCi0JCWJjbGtfcGRmID0gKF9fcmF3X3JlYWRsKENDTV9DU0NSKSA+PiA5KSAmIDB4ZjsKLQotCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCXJldHVybiByYXRlIC8gKGJjbGtfcGRmICsgMSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2lwZyhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyByYXRlLCBpcGdfcGRmOwotCi0JaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApCi0JCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCWVsc2UKLQkJaXBnX3BkZiA9IChfX3Jhd19yZWFkbChDQ01fQ1NDUikgPj4gOCkgJiAxOwotCi0JcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0JcmV0dXJuIHJhdGUgLyAoaXBnX3BkZiArIDEpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9wZXIoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgcGVyY2xrX3BkZiwgcGFyZW50X3JhdGU7Ci0KLQlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0KLQlpZiAoY2xrLT5pZCA8IDAgfHwgY2xrLT5pZCA+IDMpCi0JCXJldHVybiAwOwotCi0JcGVyY2xrX3BkZiA9IChfX3Jhd19yZWFkbChDQ01fUENEUjEpID4+IChjbGstPmlkIDw8IDMpKSAmIDB4M2Y7Ci0KLQlyZXR1cm4gcGFyZW50X3JhdGUgLyAocGVyY2xrX3BkZiArIDEpOwotfQotCi0vKgotICogdGhlIGhpZ2ggZnJlcXVlbmN5IGV4dGVybmFsIGNsb2NrIHJlZmVyZW5jZQotICogRGVmYXVsdCBjYXNlIGlzIDI2TUh6LiBDb3VsZCBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUKLSAqIHdpdGggYSBjYWxsIHRvIGNoYW5nZV9leHRlcm5hbF9oaWdoX3JlZmVyZW5jZSgpCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNraWhfY2xrID0gewotCS5nZXRfcmF0ZQk9IGdldF9yYXRlX2hpZ2hfcmVmZXJlbmNlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbXBsbF9jbGsgPSB7Ci0JLnBhcmVudAkJPSAmY2tpaF9jbGssCi0JLmdldF9yYXRlCT0gZ2V0X3JhdGVfbXBsbCwKLX07Ci0KLS8qIEZvciBpLk1YMjcgVE8yLCBpdCBpcyB0aGUgTVBMTCBwYXRoIDEgb2YgQVJNIGNvcmUKLSAqIEl0IHByb3ZpZGVzIHRoZSBjbG9jayBzb3VyY2Ugd2hvc2UgcmF0ZSBpcyBzYW1lIGFzIE1QTEwKLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgbXBsbF9tYWluMV9jbGsgPSB7Ci0JLmlkCQk9IDAsCi0JLnBhcmVudAkJPSAmbXBsbF9jbGssCi0JLmdldF9yYXRlCT0gZ2V0X3JhdGVfbXBsbF9tYWluLAotfTsKLQotLyogRm9yIGkuTVgyNyBUTzIsIGl0IGlzIHRoZSBNUExMIHBhdGggMiBvZiBBUk0gY29yZQotICogSXQgcHJvdmlkZXMgdGhlIGNsb2NrIHNvdXJjZSB3aG9zZSByYXRlIGlzIHNhbWUgTVBMTCAqIDIgLyAzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1wbGxfbWFpbjJfY2xrID0gewotCS5pZAkJPSAxLAotCS5wYXJlbnQJCT0gJm1wbGxfY2xrLAotCS5nZXRfcmF0ZQk9IGdldF9yYXRlX21wbGxfbWFpbiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGFoYl9jbGsgPSB7Ci0JLnBhcmVudAkJPSAmbXBsbF9tYWluMl9jbGssCi0JLmdldF9yYXRlCT0gZ2V0X3JhdGVfYWhiLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaXBnX2NsayA9IHsKLQkucGFyZW50CQk9ICZhaGJfY2xrLAotCS5nZXRfcmF0ZQk9IGdldF9yYXRlX2lwZywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNwdV9jbGsgPSB7Ci0JLnBhcmVudCA9ICZtcGxsX21haW4yX2NsaywKLQkuc2V0X3BhcmVudCA9IGNsa19jcHVfc2V0X3BhcmVudCwKLQkucm91bmRfcmF0ZSA9IHJvdW5kX3JhdGVfY3B1LAotCS5nZXRfcmF0ZSA9IGdldF9yYXRlX2NwdSwKLQkuc2V0X3JhdGUgPSBzZXRfcmF0ZV9jcHUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzcGxsX2NsayA9IHsKLQkucGFyZW50ID0gJmNraWhfY2xrLAotCS5nZXRfcmF0ZSA9IGdldF9yYXRlX3NwbGwsCi0JLmVuYWJsZSA9IGNsa19zcGxsX2VuYWJsZSwKLQkuZGlzYWJsZSA9IGNsa19zcGxsX2Rpc2FibGUsCi19OwotCi0vKgotICogdGhlIGxvdyBmcmVxdWVuY3kgZXh0ZXJuYWwgY2xvY2sgcmVmZXJlbmNlCi0gKiBEZWZhdWx0IGNhc2UgaXMgMzIuNzY4a0h6LgotICovCi1zdGF0aWMgc3RydWN0IGNsayBja2lsX2NsayA9IHsKLQkuZ2V0X3JhdGUgPSBnZXRfcmF0ZV9sb3dfcmVmZXJlbmNlLAotfTsKLQotLyogT3V0cHV0IG9mIGZyZXF1ZW5jeSBwcmUgbXVsdGlwbGllciAqLwotc3RhdGljIHN0cnVjdCBjbGsgZnBtX2NsayA9IHsKLQkucGFyZW50ID0gJmNraWxfY2xrLAotCS5nZXRfcmF0ZSA9IGdldF9yYXRlX2ZwbSwKLX07Ci0KLSNkZWZpbmUgUENDUjAgQ0NNX1BDQ1IwCi0jZGVmaW5lIFBDQ1IxIENDTV9QQ0NSMQotCi0jZGVmaW5lIERFRklORV9DTE9DSyhuYW1lLCBpLCBlciwgZXMsIGdyLCBzLCBwKQkJXAotCXN0YXRpYyBzdHJ1Y3QgY2xrIG5hbWUgPSB7CQkJXAotCQkuaWQJCT0gaSwJCQlcCi0JCS5lbmFibGVfcmVnCT0gZXIsCQkJXAotCQkuZW5hYmxlX3NoaWZ0CT0gZXMsCQkJXAotCQkuZ2V0X3JhdGUJPSBnciwJCQlcCi0JCS5lbmFibGUJCT0gY2xrX3BjY3JfZW5hYmxlLAlcCi0JCS5kaXNhYmxlCT0gY2xrX3BjY3JfZGlzYWJsZSwJXAotCQkuc2Vjb25kYXJ5CT0gcywJCQlcCi0JCS5wYXJlbnQJCT0gcCwJCQlcCi0JfQotCi0jZGVmaW5lIERFRklORV9DTE9DSzEobmFtZSwgaSwgZXIsIGVzLCBnZXRzZXRyb3VuZCwgcywgcCkJXAotCXN0YXRpYyBzdHJ1Y3QgY2xrIG5hbWUgPSB7CQkJCVwKLQkJLmlkCQk9IGksCQkJCVwKLQkJLmVuYWJsZV9yZWcJPSBlciwJCQkJXAotCQkuZW5hYmxlX3NoaWZ0CT0gZXMsCQkJCVwKLQkJLmdldF9yYXRlCT0gZ2V0X3JhdGVfIyNnZXRzZXRyb3VuZCwJXAotCQkuc2V0X3JhdGUJPSBzZXRfcmF0ZV8jI2dldHNldHJvdW5kLAlcCi0JCS5yb3VuZF9yYXRlCT0gcm91bmRfcmF0ZV8jI2dldHNldHJvdW5kLAlcCi0JCS5lbmFibGUJCT0gY2xrX3BjY3JfZW5hYmxlLAkJXAotCQkuZGlzYWJsZQk9IGNsa19wY2NyX2Rpc2FibGUsCQlcCi0JCS5zZWNvbmRhcnkJPSBzLAkJCQlcCi0JCS5wYXJlbnQJCT0gcCwJCQkJXAotCX0KLQotLyogRm9yd2FyZCBkZWNsYXJhdGlvbiB0byBrZWVwIHRoZSBmb2xsb3dpbmcgbGlzdCBpbiBvcmRlciAqLwotc3RhdGljIHN0cnVjdCBjbGsgc2xjZGNfY2xrMSwgc2FoYXJhMl9jbGsxLCBydGljX2NsazEsIGZlY19jbGsxLCBlbW1hX2NsazEsCi0JCSAgZG1hX2NsazEsIGxjZGNfY2xrMiwgdnB1X2NsazE7Ci0KLS8qIEFsbCBjbG9ja3Mgd2UgY2FuIGdhdGUgdGhyb3VnaCBQQ0NSeCBpbiB0aGUgb3JkZXIgb2YgUENDUnggYml0cyAqLwotREVGSU5FX0NMT0NLKHNzaTJfY2xrMSwgICAgMSwgUENDUjAsICAwLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soc3NpMV9jbGsxLCAgICAwLCBQQ0NSMCwgIDEsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKLURFRklORV9DTE9DSyhzbGNkY19jbGssICAgIDAsIFBDQ1IwLCAgMiwgTlVMTCwgJnNsY2RjX2NsazEsICZhaGJfY2xrKTsKLURFRklORV9DTE9DSyhzZGhjM19jbGsxLCAgIDAsIFBDQ1IwLCAgMywgTlVMTCwgTlVMTCwgJmlwZ19jbGspOwotREVGSU5FX0NMT0NLKHNkaGMyX2NsazEsICAgMCwgUENDUjAsICA0LCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soc2RoYzFfY2xrMSwgICAwLCBQQ0NSMCwgIDUsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKLURFRklORV9DTE9DSyhzY2NfY2xrLCAgICAgIDAsIFBDQ1IwLCAgNiwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOwotREVGSU5FX0NMT0NLKHNhaGFyYTJfY2xrLCAgMCwgUENDUjAsICA3LCBOVUxMLCAmc2FoYXJhMl9jbGsxLCAmYWhiX2Nsayk7Ci1ERUZJTkVfQ0xPQ0socnRpY19jbGssICAgICAwLCBQQ0NSMCwgIDgsIE5VTEwsICZydGljX2NsazEsICZhaGJfY2xrKTsKLURFRklORV9DTE9DSyhydGNfY2xrLCAgICAgIDAsIFBDQ1IwLCAgOSwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOwotREVGSU5FX0NMT0NLKHB3bV9jbGsxLCAgICAgMCwgUENDUjAsIDExLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7Ci1ERUZJTkVfQ0xPQ0sob3dpcmVfY2xrLCAgICAwLCBQQ0NSMCwgMTIsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKLURFRklORV9DTE9DSyhtc3RpY2tfY2xrMSwgIDAsIFBDQ1IwLCAxMywgTlVMTCwgTlVMTCwgJmlwZ19jbGspOwotREVGSU5FX0NMT0NLKGxjZGNfY2xrMSwgICAgMCwgUENDUjAsIDE0LCBOVUxMLCAmbGNkY19jbGsyLCAmaXBnX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soa3BwX2NsaywgICAgICAwLCBQQ0NSMCwgMTUsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKLURFRklORV9DTE9DSyhpaW1fY2xrLCAgICAgIDAsIFBDQ1IwLCAxNiwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOwotREVGSU5FX0NMT0NLKGkyYzJfY2xrLCAgICAgMSwgUENDUjAsIDE3LCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soaTJjMV9jbGssICAgICAwLCBQQ0NSMCwgMTgsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKLURFRklORV9DTE9DSyhncHQ2X2NsazEsICAgIDAsIFBDQ1IwLCAyOSwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOwotREVGSU5FX0NMT0NLKGdwdDVfY2xrMSwgICAgMCwgUENDUjAsIDIwLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soZ3B0NF9jbGsxLCAgICAwLCBQQ0NSMCwgMjEsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKLURFRklORV9DTE9DSyhncHQzX2NsazEsICAgIDAsIFBDQ1IwLCAyMiwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOwotREVGSU5FX0NMT0NLKGdwdDJfY2xrMSwgICAgMCwgUENDUjAsIDIzLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soZ3B0MV9jbGsxLCAgICAwLCBQQ0NSMCwgMjQsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKLURFRklORV9DTE9DSyhncGlvX2NsaywgICAgIDAsIFBDQ1IwLCAyNSwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOwotREVGSU5FX0NMT0NLKGZlY19jbGssICAgICAgMCwgUENDUjAsIDI2LCBOVUxMLCAmZmVjX2NsazEsICZhaGJfY2xrKTsKLURFRklORV9DTE9DSyhlbW1hX2NsaywgICAgIDAsIFBDQ1IwLCAyNywgTlVMTCwgJmVtbWFfY2xrMSwgJmFoYl9jbGspOwotREVGSU5FX0NMT0NLKGRtYV9jbGssICAgICAgMCwgUENDUjAsIDI4LCBOVUxMLCAmZG1hX2NsazEsICZhaGJfY2xrKTsKLURFRklORV9DTE9DSyhjc3BpMTNfY2xrMSwgIDAsIFBDQ1IwLCAyOSwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOwotREVGSU5FX0NMT0NLKGNzcGkyX2NsazEsICAgMCwgUENDUjAsIDMwLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soY3NwaTFfY2xrMSwgICAwLCBQQ0NSMCwgMzEsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKLQotREVGSU5FX0NMT0NLKG1zdGlja19jbGssICAgMCwgUENDUjEsICAyLCBOVUxMLCAmbXN0aWNrX2NsazEsICZpcGdfY2xrKTsKLURFRklORV9DTE9DSyhuZmNfY2xrLCAgICAgIDAsIFBDQ1IxLCAgMywgZ2V0X3JhdGVfbmZjLCBOVUxMLCAmY3B1X2Nsayk7Ci1ERUZJTkVfQ0xPQ0soc3NpMl9jbGssICAgICAxLCBQQ0NSMSwgIDQsIGdldF9yYXRlX3NzaTIsICZzc2kyX2NsazEsICZtcGxsX21haW4yX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soc3NpMV9jbGssICAgICAwLCBQQ0NSMSwgIDUsIGdldF9yYXRlX3NzaTEsICZzc2kxX2NsazEsICZtcGxsX21haW4yX2Nsayk7Ci1ERUZJTkVfQ0xPQ0sodnB1X2NsaywgICAgICAwLCBQQ0NSMSwgIDYsIGdldF9yYXRlX3ZwdSwgJnZwdV9jbGsxLCAmbXBsbF9tYWluMl9jbGspOwotREVGSU5FX0NMT0NLMShwZXI0X2NsaywgICAgMywgUENDUjEsICA3LCBwZXIsIE5VTEwsICZtcGxsX21haW4yX2Nsayk7Ci1ERUZJTkVfQ0xPQ0sxKHBlcjNfY2xrLCAgICAyLCBQQ0NSMSwgIDgsIHBlciwgTlVMTCwgJm1wbGxfbWFpbjJfY2xrKTsKLURFRklORV9DTE9DSzEocGVyMl9jbGssICAgIDEsIFBDQ1IxLCAgOSwgcGVyLCBOVUxMLCAmbXBsbF9tYWluMl9jbGspOwotREVGSU5FX0NMT0NLMShwZXIxX2NsaywgICAgMCwgUENDUjEsIDEwLCBwZXIsIE5VTEwsICZtcGxsX21haW4yX2Nsayk7Ci1ERUZJTkVfQ0xPQ0sodXNiX2NsazEsICAgICAwLCBQQ0NSMSwgMTEsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKLURFRklORV9DTE9DSyhzbGNkY19jbGsxLCAgIDAsIFBDQ1IxLCAxMiwgTlVMTCwgTlVMTCwgJmFoYl9jbGspOwotREVGSU5FX0NMT0NLKHNhaGFyYTJfY2xrMSwgMCwgUENDUjEsIDEzLCBOVUxMLCBOVUxMLCAmYWhiX2Nsayk7Ci1ERUZJTkVfQ0xPQ0socnRpY19jbGsxLCAgICAwLCBQQ0NSMSwgMTQsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKLURFRklORV9DTE9DSyhsY2RjX2NsazIsICAgIDAsIFBDQ1IxLCAxNSwgTlVMTCwgTlVMTCwgJmFoYl9jbGspOwotREVGSU5FX0NMT0NLKHZwdV9jbGsxLCAgICAgMCwgUENDUjEsIDE2LCBOVUxMLCBOVUxMLCAmYWhiX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soZmVjX2NsazEsICAgICAwLCBQQ0NSMSwgMTcsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKLURFRklORV9DTE9DSyhlbW1hX2NsazEsICAgIDAsIFBDQ1IxLCAxOCwgTlVMTCwgTlVMTCwgJmFoYl9jbGspOwotREVGSU5FX0NMT0NLKGVtaV9jbGssICAgICAgMCwgUENDUjEsIDE5LCBOVUxMLCBOVUxMLCAmYWhiX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soZG1hX2NsazEsICAgICAwLCBQQ0NSMSwgMjAsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKLURFRklORV9DTE9DSyhjc2lfY2xrMSwgICAgIDAsIFBDQ1IxLCAyMSwgTlVMTCwgTlVMTCwgJmFoYl9jbGspOwotREVGSU5FX0NMT0NLKGJyb21fY2xrLCAgICAgMCwgUENDUjEsIDIyLCBOVUxMLCBOVUxMLCAmYWhiX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soYXRhX2NsaywgICAgICAwLCBQQ0NSMSwgMjMsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKLURFRklORV9DTE9DSyh3ZG9nX2NsaywgICAgIDAsIFBDQ1IxLCAyNCwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOwotREVGSU5FX0NMT0NLKHVzYl9jbGssICAgICAgMCwgUENDUjEsIDI1LCBnZXRfcmF0ZV91c2IsICZ1c2JfY2xrMSwgJnNwbGxfY2xrKTsKLURFRklORV9DTE9DSyh1YXJ0Nl9jbGsxLCAgIDAsIFBDQ1IxLCAyNiwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOwotREVGSU5FX0NMT0NLKHVhcnQ1X2NsazEsICAgMCwgUENDUjEsIDI3LCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7Ci1ERUZJTkVfQ0xPQ0sodWFydDRfY2xrMSwgICAwLCBQQ0NSMSwgMjgsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKLURFRklORV9DTE9DSyh1YXJ0M19jbGsxLCAgIDAsIFBDQ1IxLCAyOSwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOwotREVGSU5FX0NMT0NLKHVhcnQyX2NsazEsICAgMCwgUENDUjEsIDMwLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7Ci1ERUZJTkVfQ0xPQ0sodWFydDFfY2xrMSwgICAwLCBQQ0NSMSwgMzEsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKLQotLyogQ2xvY2tzIHdlIGNhbm5vdCBkaXJlY3RseSBnYXRlLCBidXQgZHJpdmVycyBuZWVkIHRoZWlyIHJhdGVzICovCi1ERUZJTkVfQ0xPQ0soY3NwaTFfY2xrLCAgICAwLCAwLCAgICAgIDAsIE5VTEwsICZjc3BpMV9jbGsxLCAmcGVyMl9jbGspOwotREVGSU5FX0NMT0NLKGNzcGkyX2NsaywgICAgMSwgMCwgICAgICAwLCBOVUxMLCAmY3NwaTJfY2xrMSwgJnBlcjJfY2xrKTsKLURFRklORV9DTE9DSyhjc3BpM19jbGssICAgIDIsIDAsICAgICAgMCwgTlVMTCwgJmNzcGkxM19jbGsxLCAmcGVyMl9jbGspOwotREVGSU5FX0NMT0NLKHNkaGMxX2NsaywgICAgMCwgMCwgICAgICAwLCBOVUxMLCAmc2RoYzFfY2xrMSwgJnBlcjJfY2xrKTsKLURFRklORV9DTE9DSyhzZGhjMl9jbGssICAgIDEsIDAsICAgICAgMCwgTlVMTCwgJnNkaGMyX2NsazEsICZwZXIyX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soc2RoYzNfY2xrLCAgICAyLCAwLCAgICAgIDAsIE5VTEwsICZzZGhjM19jbGsxLCAmcGVyMl9jbGspOwotREVGSU5FX0NMT0NLKHB3bV9jbGssICAgICAgMCwgMCwgICAgICAwLCBOVUxMLCAmcHdtX2NsazEsICZwZXIxX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soZ3B0MV9jbGssICAgICAwLCAwLCAgICAgIDAsIE5VTEwsICZncHQxX2NsazEsICZwZXIxX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soZ3B0Ml9jbGssICAgICAxLCAwLCAgICAgIDAsIE5VTEwsICZncHQyX2NsazEsICZwZXIxX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soZ3B0M19jbGssICAgICAyLCAwLCAgICAgIDAsIE5VTEwsICZncHQzX2NsazEsICZwZXIxX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soZ3B0NF9jbGssICAgICAzLCAwLCAgICAgIDAsIE5VTEwsICZncHQ0X2NsazEsICZwZXIxX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soZ3B0NV9jbGssICAgICA0LCAwLCAgICAgIDAsIE5VTEwsICZncHQ1X2NsazEsICZwZXIxX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soZ3B0Nl9jbGssICAgICA1LCAwLCAgICAgIDAsIE5VTEwsICZncHQ2X2NsazEsICZwZXIxX2Nsayk7Ci1ERUZJTkVfQ0xPQ0sodWFydDFfY2xrLCAgICAwLCAwLCAgICAgIDAsIE5VTEwsICZ1YXJ0MV9jbGsxLCAmcGVyMV9jbGspOwotREVGSU5FX0NMT0NLKHVhcnQyX2NsaywgICAgMSwgMCwgICAgICAwLCBOVUxMLCAmdWFydDJfY2xrMSwgJnBlcjFfY2xrKTsKLURFRklORV9DTE9DSyh1YXJ0M19jbGssICAgIDIsIDAsICAgICAgMCwgTlVMTCwgJnVhcnQzX2NsazEsICZwZXIxX2Nsayk7Ci1ERUZJTkVfQ0xPQ0sodWFydDRfY2xrLCAgICAzLCAwLCAgICAgIDAsIE5VTEwsICZ1YXJ0NF9jbGsxLCAmcGVyMV9jbGspOwotREVGSU5FX0NMT0NLKHVhcnQ1X2NsaywgICAgNCwgMCwgICAgICAwLCBOVUxMLCAmdWFydDVfY2xrMSwgJnBlcjFfY2xrKTsKLURFRklORV9DTE9DSyh1YXJ0Nl9jbGssICAgIDUsIDAsICAgICAgMCwgTlVMTCwgJnVhcnQ2X2NsazEsICZwZXIxX2Nsayk7Ci1ERUZJTkVfQ0xPQ0sxKGxjZGNfY2xrLCAgICAwLCAwLCAgICAgIDAsIHBhcmVudCwgJmxjZGNfY2xrMSwgJnBlcjNfY2xrKTsKLURFRklORV9DTE9DSzEoY3NpX2NsaywgICAgIDAsIDAsICAgICAgMCwgcGFyZW50LCAmY3NpX2NsazEsICZwZXI0X2Nsayk7Ci0KLSNkZWZpbmUgX1JFR0lTVEVSX0NMT0NLKGQsIG4sIGMpIFwKLQl7IFwKLQkJLmRldl9pZCA9IGQsIFwKLQkJLmNvbl9pZCA9IG4sIFwKLQkJLmNsayA9ICZjLCBcCi0JfSwKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKLQlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjAiLCBOVUxMLCB1YXJ0MV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4xIiwgTlVMTCwgdWFydDJfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMiIsIE5VTEwsIHVhcnQzX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjMiLCBOVUxMLCB1YXJ0NF9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC40IiwgTlVMTCwgdWFydDVfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuNSIsIE5VTEwsIHVhcnQ2X2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwdDEiLCBncHQxX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwdDIiLCBncHQyX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwdDMiLCBncHQzX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwdDQiLCBncHQ0X2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwdDUiLCBncHQ1X2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwdDYiLCBncHQ2X2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soIm14Y19wd20uMCIsIE5VTEwsIHB3bV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJteGMtbW1jLjAiLCBOVUxMLCBzZGhjMV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJteGMtbW1jLjEiLCBOVUxMLCBzZGhjMl9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJteGMtbW1jLjIiLCBOVUxMLCBzZGhjM19jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJzcGlfaW14LjAiLCBOVUxMLCBjc3BpMV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJzcGlfaW14LjEiLCBOVUxMLCBjc3BpMl9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJzcGlfaW14LjIiLCBOVUxMLCBjc3BpM19jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJpbXgtZmIuMCIsIE5VTEwsIGxjZGNfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NpIiwgY3NpX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soImZzbC11c2IyLXVkYyIsICJ1c2IiLCB1c2JfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygiZnNsLXVzYjItdWRjIiwgInVzYl9haGIiLCB1c2JfY2xrMSkKLQlfUkVHSVNURVJfQ0xPQ0soIm14Yy1laGNpLjAiLCAidXNiIiwgdXNiX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soIm14Yy1laGNpLjAiLCAidXNiX2FoYiIsIHVzYl9jbGsxKQotCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMSIsICJ1c2IiLCB1c2JfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMSIsICJ1c2JfYWhiIiwgdXNiX2NsazEpCi0JX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4yIiwgInVzYiIsIHVzYl9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4yIiwgInVzYl9haGIiLCB1c2JfY2xrMSkKLQlfUkVHSVNURVJfQ0xPQ0soImlteC1zc2kuMCIsIE5VTEwsIHNzaTFfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygiaW14LXNzaS4xIiwgTlVMTCwgc3NpMl9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJteGNfbmFuZC4wIiwgTlVMTCwgbmZjX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInZwdSIsIHZwdV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJkbWEiLCBkbWFfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicnRpYyIsIHJ0aWNfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiYnJvbSIsIGJyb21fY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZW1tYSIsIGVtbWFfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic2xjZGMiLCBzbGNkY19jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJmZWMuMCIsIE5VTEwsIGZlY19jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlbWkiLCBlbWlfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic2FoYXJhMiIsIHNhaGFyYTJfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiYXRhIiwgYXRhX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIm1zdGljayIsIG1zdGlja19jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJpbXgtd2R0LjAiLCBOVUxMLCB3ZG9nX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwaW8iLCBncGlvX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMCIsIE5VTEwsIGkyYzFfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4xIiwgTlVMTCwgaTJjMl9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJpaW0iLCBpaW1fY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAia3BwIiwga3BwX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soIm14Y193MS4wIiwgTlVMTCwgb3dpcmVfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicnRjIiwgcnRjX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNjYyIsIHNjY19jbGspCi19OwotCi0vKiBBZGp1c3QgdGhlIGNsb2NrIHBhdGggZm9yIFRPMiBhbmQgbGF0ZXIgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCB0bzJfYWRqdXN0X2Nsb2Nrcyh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgY3NjciA9IF9fcmF3X3JlYWRsKENDTV9DU0NSKTsKLQotCWlmIChteDI3X3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wKSB7Ci0JCWlmIChjc2NyICYgQ0NNX0NTQ1JfQVJNX1NSQykKLQkJCWNwdV9jbGsucGFyZW50ID0gJm1wbGxfbWFpbjFfY2xrOwotCi0JCWlmICghKGNzY3IgJiBDQ01fQ1NDUl9TU0kyKSkKLQkJCXNzaTFfY2xrLnBhcmVudCA9ICZzcGxsX2NsazsKLQotCQlpZiAoIShjc2NyICYgQ0NNX0NTQ1JfU1NJMSkpCi0JCQlzc2kxX2Nsay5wYXJlbnQgPSAmc3BsbF9jbGs7Ci0KLQkJaWYgKCEoY3NjciAmIENDTV9DU0NSX1ZQVSkpCi0JCQl2cHVfY2xrLnBhcmVudCA9ICZzcGxsX2NsazsKLQl9IGVsc2UgewotCQljcHVfY2xrLnBhcmVudCA9ICZtcGxsX2NsazsKLQkJY3B1X2Nsay5zZXRfcGFyZW50ID0gTlVMTDsKLQkJY3B1X2Nsay5yb3VuZF9yYXRlID0gTlVMTDsKLQkJY3B1X2Nsay5zZXRfcmF0ZSA9IE5VTEw7Ci0JCWFoYl9jbGsucGFyZW50ID0gJm1wbGxfY2xrOwotCi0JCXBlcjFfY2xrLnBhcmVudCA9ICZtcGxsX2NsazsKLQkJcGVyMl9jbGsucGFyZW50ID0gJm1wbGxfY2xrOwotCQlwZXIzX2Nsay5wYXJlbnQgPSAmbXBsbF9jbGs7Ci0JCXBlcjRfY2xrLnBhcmVudCA9ICZtcGxsX2NsazsKLQotCQlzc2kxX2Nsay5wYXJlbnQgPSAmbXBsbF9jbGs7Ci0JCXNzaTJfY2xrLnBhcmVudCA9ICZtcGxsX2NsazsKLQotCQl2cHVfY2xrLnBhcmVudCA9ICZtcGxsX2NsazsKLQl9Ci19Ci0KLS8qCi0gKiBtdXN0IGJlIGNhbGxlZCB2ZXJ5IGVhcmx5IHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUKLSAqIGF2YWlsYWJsZSBjbG9jayByYXRlIHdoZW4gdGhlIHRpbWVyIGZyYW1ld29yayBzdGFydHMKLSAqLwotaW50IF9faW5pdCBteDI3X2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZikKLXsKLQl1MzIgY3NjciA9IF9fcmF3X3JlYWRsKENDTV9DU0NSKTsKLQotCWV4dGVybmFsX2hpZ2hfcmVmZXJlbmNlID0gZnJlZjsKLQotCS8qIGRldGVjdCBjbG9jayByZWZlcmVuY2UgZm9yIGJvdGggc3lzdGVtIFBMTHMgKi8KLQlpZiAoY3NjciAmIENDTV9DU0NSX01DVSkKLQkJbXBsbF9jbGsucGFyZW50ID0gJmNraWhfY2xrOwotCWVsc2UKLQkJbXBsbF9jbGsucGFyZW50ID0gJmZwbV9jbGs7Ci0KLQlpZiAoY3NjciAmIENDTV9DU0NSX1NQKQotCQlzcGxsX2Nsay5wYXJlbnQgPSAmY2tpaF9jbGs7Ci0JZWxzZQotCQlzcGxsX2Nsay5wYXJlbnQgPSAmZnBtX2NsazsKLQotCXRvMl9hZGp1c3RfY2xvY2tzKCk7Ci0KLQljbGtkZXZfYWRkX3RhYmxlKGxvb2t1cHMsIEFSUkFZX1NJWkUobG9va3VwcykpOwotCi0JLyogVHVybiBvZmYgYWxsIGNsb2NrcyB3ZSBkbyBub3QgbmVlZCAqLwotCV9fcmF3X3dyaXRlbCgwLCBDQ01fUENDUjApOwotCV9fcmF3X3dyaXRlbCgoMSA8PCAxMCkgfCAoMSA8PCAxOSksIENDTV9QQ0NSMSk7Ci0KLQlzcGxsX2Nsay5kaXNhYmxlKCZzcGxsX2Nsayk7Ci0KLQkvKiBlbmFibGUgYmFzaWMgY2xvY2tzICovCi0JY2xrX2VuYWJsZSgmcGVyMV9jbGspOwotCWNsa19lbmFibGUoJmdwaW9fY2xrKTsKLQljbGtfZW5hYmxlKCZlbWlfY2xrKTsKLQljbGtfZW5hYmxlKCZpaW1fY2xrKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0xMKSAmJiAhZGVmaW5lZChDT05GSUdfREVCVUdfSUNFRENDKQotCWNsa19lbmFibGUoJnVhcnQxX2Nsayk7Ci0jZW5kaWYKLQotCW14Y190aW1lcl9pbml0KCZncHQxX2NsaywgTVgyN19JT19BRERSRVNTKE1YMjdfR1BUMV9CQVNFX0FERFIpLAotCQkJTVgyN19JTlRfR1BUMSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teDIvZGV2aWNlcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGFlYjhhLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuYworKysgL2Rldi9udWxsCkBAIC0xLDUwMyArMCwwIEBACi0vKgotICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKiAgICAgICA8c291cmNlQG12aXN0YS5jb20+Ci0gKgotICogQmFzZWQgb24gdGhlIE9NQVAgZGV2aWNlcy5jCi0gKgotICogMjAwNSAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMKLSAqIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcwotICogb3IgaW1wbGllZC4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwNi0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgMjAwOCBKdWVyZ2VuIEJlaXNlcnQsIGtlcm5lbEBwZW5ndXRyb25peC5kZQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgotICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAotICogTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotCi0jaW5jbHVkZSA8bWFjaC9pcnFzLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9tbWMuaD4KLQotI2luY2x1ZGUgImRldmljZXMuaCIKLQotLyoKLSAqIFNQSSBtYXN0ZXIgY29udHJvbGxlcgotICoKLSAqIC0gaS5NWDE6IDIgY2hhbm5lbCAoc2xpZ2hseSBkaWZmZXJlbnQgcmVnaXN0ZXIgc2V0dGluZykKLSAqIC0gaS5NWDIxOiAyIGNoYW5uZWwKLSAqIC0gaS5NWDI3OiAzIGNoYW5uZWwKLSAqLwotI2RlZmluZSBERUZJTkVfSU1YX1NQSV9ERVZJQ0UobiwgYmFzZWFkZHIsIGlycSkJCQkJCVwKLQlzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zcGlfcmVzb3VyY2VzICMjIG5bXSA9IHsJCQlcCi0JCXsJCQkJCQkJCVwKLQkJCS5zdGFydCA9IGJhc2VhZGRyLAkJCQkJXAotCQkJLmVuZCA9IGJhc2VhZGRyICsgU1pfNEsgLSAxLAkJCQlcCi0JCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwJCQkJXAotCQl9LCB7CQkJCQkJCQlcCi0JCQkuc3RhcnQgPSBpcnEsCQkJCQkJXAotCQkJLmVuZCA9IGlycSwJCQkJCQlcCi0JCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwJCQkJXAotCQl9LAkJCQkJCQkJXAotCX07CQkJCQkJCQkJXAotCQkJCQkJCQkJCVwKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlICMjIG4gPSB7CQkJCVwKLQkJLm5hbWUgPSAic3BpX2lteCIsCQkJCQkJXAotCQkuaWQgPSBuLAkJCQkJCQlcCi0JCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc3BpX3Jlc291cmNlcyAjIyBuKSwJCVwKLQkJLnJlc291cmNlID0gbXhjX3NwaV9yZXNvdXJjZXMgIyMgbiwJCQkJXAotCX0KLQotREVGSU5FX0lNWF9TUElfREVWSUNFKDAsIE1YMnhfQ1NQSTFfQkFTRV9BRERSLCBNWDJ4X0lOVF9DU1BJMSk7Ci1ERUZJTkVfSU1YX1NQSV9ERVZJQ0UoMSwgTVgyeF9DU1BJMl9CQVNFX0FERFIsIE1YMnhfSU5UX0NTUEkyKTsKLQotI2lmZGVmIENPTkZJR19NQUNIX01YMjcKLURFRklORV9JTVhfU1BJX0RFVklDRSgyLCBNWDI3X0NTUEkzX0JBU0VfQUREUiwgTVgyN19JTlRfQ1NQSTMpOwotI2VuZGlmCi0KLS8qCi0gKiBHZW5lcmFsIFB1cnBvc2UgVGltZXIKLSAqIC0gaS5NWDIxOiAzIHRpbWVycwotICogLSBpLk1YMjc6IDYgdGltZXJzCi0gKi8KLSNkZWZpbmUgREVGSU5FX0lNWF9HUFRfREVWSUNFKG4sIGJhc2VhZGRyLCBpcnEpCQkJCVwKLQlzdGF0aWMgc3RydWN0IHJlc291cmNlIHRpbWVyICMjIG4gIyNfcmVzb3VyY2VzW10gPSB7CQlcCi0JCXsJCQkJCQkJXAotCQkJLnN0YXJ0ID0gYmFzZWFkZHIsCQkJCVwKLQkJCS5lbmQgPSBiYXNlYWRkciArIFNaXzRLIC0gMSwJCQlcCi0JCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwJCQlcCi0JCX0sIHsJCQkJCQkJXAotCQkJLnN0YXJ0ID0gaXJxLAkJCQkJXAotCQkJLmVuZCA9IGlycSwJCQkJCVwKLQkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAkJCVwKLQkJfQkJCQkJCQlcCi0JfTsJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19ncHQgIyMgbiA9IHsJCQkJXAotCQkubmFtZSA9ICJpbXhfZ3B0IiwJCQkJCVwKLQkJLmlkID0gbiwJCQkJCQlcCi0JCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1lciAjIyBuICMjIF9yZXNvdXJjZXMpLAlcCi0JCS5yZXNvdXJjZSA9IHRpbWVyICMjIG4gIyMgX3Jlc291cmNlcywJCQlcCi0JfQotCi0vKiBXZSB1c2UgZ3B0MSBhcyBzeXN0ZW0gdGltZXIsIHNvIGRvIG5vdCBhZGQgYSBkZXZpY2UgZm9yIHRoaXMgb25lICovCi1ERUZJTkVfSU1YX0dQVF9ERVZJQ0UoMSwgTVgyeF9HUFQyX0JBU0VfQUREUiwgTVgyeF9JTlRfR1BUMik7Ci1ERUZJTkVfSU1YX0dQVF9ERVZJQ0UoMiwgTVgyeF9HUFQzX0JBU0VfQUREUiwgTVgyeF9JTlRfR1BUMyk7Ci0KLSNpZmRlZiBDT05GSUdfTUFDSF9NWDI3Ci1ERUZJTkVfSU1YX0dQVF9ERVZJQ0UoMywgTVgyN19HUFQ0X0JBU0VfQUREUiwgTVgyN19JTlRfR1BUNCk7Ci1ERUZJTkVfSU1YX0dQVF9ERVZJQ0UoNCwgTVgyN19HUFQ1X0JBU0VfQUREUiwgTVgyN19JTlRfR1BUNSk7Ci1ERUZJTkVfSU1YX0dQVF9ERVZJQ0UoNSwgTVgyN19HUFQ2X0JBU0VfQUREUiwgTVgyN19JTlRfR1BUNik7Ci0jZW5kaWYKLQotLyogV2F0Y2hkb2c6IGkuTVgxIGhhcyBzZXBlcmF0ZSBkcml2ZXIsIGkuTVgyMSBhbmQgaS5NWDI3IGFyZSBlcXVhbCAqLwotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfd2R0X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0ID0gTVgyeF9XRE9HX0JBU0VfQUREUiwKLQkJLmVuZCA9IE1YMnhfV0RPR19CQVNFX0FERFIgKyBTWl80SyAtIDEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y193ZHQgPSB7Ci0JLm5hbWUgPSAiaW14Mi13ZHQiLAotCS5pZCA9IDAsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y193ZHRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBteGNfd2R0X3Jlc291cmNlcywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3cxX21hc3Rlcl9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydCA9IE1YMnhfT1dJUkVfQkFTRV9BRERSLAotCQkuZW5kID0gTVgyeF9PV0lSRV9CQVNFX0FERFIgKyBTWl80SyAtIDEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y193MV9tYXN0ZXJfZGV2aWNlID0gewotCS5uYW1lID0gIm14Y193MSIsCi0JLmlkID0gMCwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3cxX21hc3Rlcl9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSA9IG14Y193MV9tYXN0ZXJfcmVzb3VyY2VzLAotfTsKLQotI2RlZmluZSBERUZJTkVfTVhDX05BTkRfREVWSUNFKHBmeCwgYmFzZWFkZHIsIGlycSkJCQlcCi0Jc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwZnggIyMgX25hbmRfcmVzb3VyY2VzW10gPSB7CQlcCi0JCXsJCQkJCQkJXAotCQkJLnN0YXJ0ID0gYmFzZWFkZHIsCQkJCVwKLQkJCS5lbmQgPSBiYXNlYWRkciArIFNaXzRLIC0gMSwJCQlcCi0JCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwJCQlcCi0JCX0sIHsJCQkJCQkJXAotCQkJLnN0YXJ0ID0gaXJxLAkJCQkJXAotCQkJLmVuZCA9IGlycSwJCQkJCVwKLQkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAkJCVwKLQkJfSwJCQkJCQkJXAotCX07CQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSBwZnggIyMgX25hbmRfZGV2aWNlID0gewkJCVwKLQkJLm5hbWUgPSAibXhjX25hbmQiLAkJCQkJXAotCQkuaWQgPSAwLAkJCQkJCVwKLQkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHBmeCAjIyBfbmFuZF9yZXNvdXJjZXMpLAlcCi0JCS5yZXNvdXJjZSA9IHBmeCAjIyBfbmFuZF9yZXNvdXJjZXMsCQkJXAotCX0KLQotI2lmZGVmIENPTkZJR19NQUNIX01YMjEKLURFRklORV9NWENfTkFORF9ERVZJQ0UoaW14MjEsIE1YMjFfTkZDX0JBU0VfQUREUiwgTVgyMV9JTlRfTkFOREZDKTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01BQ0hfTVgyNwotREVGSU5FX01YQ19OQU5EX0RFVklDRShpbXgyNywgTVgyN19ORkNfQkFTRV9BRERSLCBNWDI3X0lOVF9OQU5ERkMpOwotI2VuZGlmCi0KLS8qCi0gKiBsY2RjOgotICogLSBpLk1YMTogdGhlIGJhc2ljIGNvbnRyb2xsZXIKLSAqIC0gaS5NWDIxOiB0byBiZSBjaGVja2VkCi0gKiAtIGkuTVgyNzogbGlrZSBpLk1YMSwgd2l0aCBzbGlnaHRseSB2YXJpYXRpb25zCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX2ZiW10gPSB7Ci0JewotCQkuc3RhcnQgPSBNWDJ4X0xDRENfQkFTRV9BRERSLAotCQkuZW5kID0gTVgyeF9MQ0RDX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQgPSBNWDJ4X0lOVF9MQ0RDLAotCQkuZW5kID0gTVgyeF9JTlRfTENEQywKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfQotfTsKLQotLyogbXhjIGxjZCBkcml2ZXIgKi8KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2ZiX2RldmljZSA9IHsKLQkubmFtZSA9ICJpbXgtZmIiLAotCS5pZCA9IDAsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19mYiksCi0JLnJlc291cmNlID0gbXhjX2ZiLAotCS5kZXYgPSB7Ci0JCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLX07Ci0KLSNpZmRlZiBDT05GSUdfTUFDSF9NWDI3Ci1zdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19mZWNfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQgPSBNWDI3X0ZFQ19CQVNFX0FERFIsCi0JCS5lbmQgPSBNWDI3X0ZFQ19CQVNFX0FERFIgKyBTWl80SyAtIDEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ID0gTVgyN19JTlRfRkVDLAotCQkuZW5kID0gTVgyN19JTlRfRkVDLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfZmVjX2RldmljZSA9IHsKLQkubmFtZSA9ICJmZWMiLAotCS5pZCA9IDAsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19mZWNfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBteGNfZmVjX3Jlc291cmNlcywKLX07Ci0jZW5kaWYKLQotI2RlZmluZSBERUZJTkVfSU1YX0kyQ19ERVZJQ0UobiwgYmFzZWFkZHIsIGlycSkJCQkJXAotCXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX2kyY19yZXNvdXJjZXMgIyMgbltdID0gewkJXAotCQl7CQkJCQkJCVwKLQkJCS5zdGFydCA9IGJhc2VhZGRyLAkJCQlcCi0JCQkuZW5kID0gYmFzZWFkZHIgKyBTWl80SyAtIDEsCQkJXAotCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCQkJXAotCQl9LCB7CQkJCQkJCVwKLQkJCS5zdGFydCA9IGlycSwJCQkJCVwKLQkJCS5lbmQgPSBpcnEsCQkJCQlcCi0JCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwJCQlcCi0JCX0JCQkJCQkJXAotCX07CQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZSAjIyBuID0gewkJCVwKLQkJLm5hbWUgPSAiaW14LWkyYyIsCQkJCQlcCi0JCS5pZCA9IG4sCQkJCQkJXAotCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX2kyY19yZXNvdXJjZXMgIyMgbiksCVwKLQkJLnJlc291cmNlID0gbXhjX2kyY19yZXNvdXJjZXMgIyMgbiwJCQlcCi0JfQotCi1ERUZJTkVfSU1YX0kyQ19ERVZJQ0UoMCwgTVgyeF9JMkNfQkFTRV9BRERSLCBNWDJ4X0lOVF9JMkMpOwotCi0jaWZkZWYgQ09ORklHX01BQ0hfTVgyNwotREVGSU5FX0lNWF9JMkNfREVWSUNFKDEsIE1YMjdfSTJDMl9CQVNFX0FERFIsIE1YMjdfSU5UX0kyQzIpOwotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3B3bV9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydCA9IE1YMnhfUFdNX0JBU0VfQUREUiwKLQkJLmVuZCA9IE1YMnhfUFdNX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQgPSBNWDJ4X0lOVF9QV00sCi0JCS5lbmQgPSBNWDJ4X0lOVF9QV00sCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3B3bV9kZXZpY2UgPSB7Ci0JLm5hbWUgPSAibXhjX3B3bSIsCi0JLmlkID0gMCwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3B3bV9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSA9IG14Y19wd21fcmVzb3VyY2VzLAotfTsKLQotI2RlZmluZSBERUZJTkVfTVhDX01NQ19ERVZJQ0UobiwgYmFzZWFkZHIsIGlycSwgZG1hcmVxKQkJCVwKLQlzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zZGhjX3Jlc291cmNlcyAjIyBuW10gPSB7CQlcCi0JCXsJCQkJCQkJXAotCQkJLnN0YXJ0ID0gYmFzZWFkZHIsCQkJCVwKLQkJCS5lbmQgPSBiYXNlYWRkciArIFNaXzRLIC0gMSwJCQlcCi0JCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwJCQlcCi0JCX0sIHsJCQkJCQkJXAotCQkJLnN0YXJ0ID0gaXJxLAkJCQkJXAotCQkJLmVuZCA9IGlycSwJCQkJCVwKLQkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAkJCVwKLQkJfSwgewkJCQkJCQlcCi0JCQkuc3RhcnQgPSBkbWFyZXEsCQkJCVwKLQkJCS5lbmQgPSBkbWFyZXEsCQkJCQlcCi0JCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwJCQlcCi0JCX0sCQkJCQkJCVwKLQl9OwkJCQkJCQkJXAotCQkJCQkJCQkJXAotCXN0YXRpYyB1NjQgbXhjX3NkaGMgIyMgbiAjIyBfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CVwKLQkJCQkJCQkJCVwKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zZGhjX2RldmljZSAjIyBuID0gewkJCVwKLQkJLm5hbWUgPSAibXhjLW1tYyIsCQkJCQlcCi0JCS5pZCA9IG4sCQkJCQkJXAotCQkuZGV2ID0gewkJCQkJCVwKLQkJCS5kbWFfbWFzayA9ICZteGNfc2RoYyAjIyBuICMjIF9kbWFtYXNrLAkJXAotCQkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwJCVwKLQkJfSwJCQkJCQkJXAotCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3NkaGNfcmVzb3VyY2VzICMjIG4pLAlcCi0JCS5yZXNvdXJjZSA9IG14Y19zZGhjX3Jlc291cmNlcyAjIyBuLAkJXAotCX0KLQotREVGSU5FX01YQ19NTUNfREVWSUNFKDAsIE1YMnhfU0RIQzFfQkFTRV9BRERSLCBNWDJ4X0lOVF9TREhDMSwgTVgyeF9ETUFfUkVRX1NESEMxKTsKLURFRklORV9NWENfTU1DX0RFVklDRSgxLCBNWDJ4X1NESEMyX0JBU0VfQUREUiwgTVgyeF9JTlRfU0RIQzIsIE1YMnhfRE1BX1JFUV9TREhDMik7Ci0KLSNpZmRlZiBDT05GSUdfTUFDSF9NWDI3Ci1zdGF0aWMgc3RydWN0IHJlc291cmNlIG90Z19yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydCA9IE1YMjdfVVNCT1RHX0JBU0VfQUREUiwKLQkJLmVuZCA9IE1YMjdfVVNCT1RHX0JBU0VfQUREUiArIDB4MWZmLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydCA9IE1YMjdfSU5UX1VTQjMsCi0JCS5lbmQgPSBNWDI3X0lOVF9VU0IzLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHU2NCBvdGdfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLS8qIE9URyBnYWRnZXQgZGV2aWNlICovCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19vdGdfdWRjX2RldmljZSA9IHsKLQkubmFtZQkJPSAiZnNsLXVzYjItdWRjIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCS5kbWFfbWFzawkJPSAmb3RnX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBvdGdfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShvdGdfcmVzb3VyY2VzKSwKLX07Ci0KLS8qIE9URyBob3N0ICovCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19vdGdfaG9zdCA9IHsKLQkubmFtZSA9ICJteGMtZWhjaSIsCi0JLmlkID0gMCwKLQkuZGV2ID0gewotCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAotCQkuZG1hX21hc2sgPSAmb3RnX2RtYW1hc2ssCi0JfSwKLQkucmVzb3VyY2UgPSBvdGdfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShvdGdfcmVzb3VyY2VzKSwKLX07Ci0KLS8qIFVTQiBob3N0IDEgKi8KLQotc3RhdGljIHU2NCB1c2JoMV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfdXNiaDFfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQgPSBNWDI3X1VTQk9UR19CQVNFX0FERFIgKyAweDIwMCwKLQkJLmVuZCA9IE1YMjdfVVNCT1RHX0JBU0VfQUREUiArIDB4M2ZmLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydCA9IE1YMjdfSU5UX1VTQjEsCi0JCS5lbmQgPSBNWDI3X0lOVF9VU0IxLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDEgPSB7Ci0JLm5hbWUgPSAibXhjLWVoY2kiLAotCS5pZCA9IDEsCi0JLmRldiA9IHsKLQkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJLmRtYV9tYXNrID0gJnVzYmgxX2RtYW1hc2ssCi0JfSwKLQkucmVzb3VyY2UgPSBteGNfdXNiaDFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfdXNiaDFfcmVzb3VyY2VzKSwKLX07Ci0KLS8qIFVTQiBob3N0IDIgKi8KLXN0YXRpYyB1NjQgdXNiaDJfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3VzYmgyX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0ID0gTVgyN19VU0JPVEdfQkFTRV9BRERSICsgMHg0MDAsCi0JCS5lbmQgPSBNWDI3X1VTQk9UR19CQVNFX0FERFIgKyAweDVmZiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQgPSBNWDI3X0lOVF9VU0IyLAotCQkuZW5kID0gTVgyN19JTlRfVVNCMiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VzYmgyID0gewotCS5uYW1lID0gIm14Yy1laGNpIiwKLQkuaWQgPSAyLAotCS5kZXYgPSB7Ci0JCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCi0JCS5kbWFfbWFzayA9ICZ1c2JoMl9kbWFtYXNrLAotCX0sCi0JLnJlc291cmNlID0gbXhjX3VzYmgyX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3VzYmgyX3Jlc291cmNlcyksCi19OwotI2VuZGlmCi0KLSNkZWZpbmUgREVGSU5FX0lNWF9TU0lfRE1BUkVTKF9uYW1lLCBzc2luLCBzdWZmaXgpCQkJXAotCXsJCQkJCQkJCVwKLQkJLm5hbWUgPSBfbmFtZSwJCQkJCQlcCi0JCS5zdGFydCA9IE1YMnhfRE1BX1JFUV9TU0kgIyMgc3NpbiAjIyBfICMjIHN1ZmZpeCwJXAotCQkuZW5kID0gTVgyeF9ETUFfUkVRX1NTSSAjIyBzc2luICMjIF8gIyMgc3VmZml4LAkJXAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwJCQkJXAotCX0KLQotI2RlZmluZSBERUZJTkVfSU1YX1NTSV9ERVZJQ0Uobiwgc3NpbiwgYmFzZWFkZHIsIGlycSkJCQlcCi0Jc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfc3NpX3Jlc291cmNlcyAjIyBuW10gPSB7CQlcCi0JCXsJCQkJCQkJXAotCQkJLnN0YXJ0ID0gTVgyeF9TU0kgIyMgc3NpbiAjIyBfQkFTRV9BRERSLAlcCi0JCQkuZW5kID0gTVgyeF9TU0kgIyMgc3NpbiAjIyBfQkFTRV9BRERSICsgMHg2ZiwJXAotCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCQkJXAotCQl9LCB7CQkJCQkJCVwKLQkJCS5zdGFydCA9IE1YMnhfSU5UX1NTSTEsCQkJCVwKLQkJCS5lbmQgPSBNWDJ4X0lOVF9TU0kxLAkJCQlcCi0JCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwJCQlcCi0JCX0sCQkJCQkJCVwKLQkJREVGSU5FX0lNWF9TU0lfRE1BUkVTKCJ0eDAiLCBzc2luLCBUWDApLAkJXAotCQlERUZJTkVfSU1YX1NTSV9ETUFSRVMoInJ4MCIsIHNzaW4sIFJYMCksCQlcCi0JCURFRklORV9JTVhfU1NJX0RNQVJFUygidHgxIiwgc3NpbiwgVFgxKSwJCVwKLQkJREVGSU5FX0lNWF9TU0lfRE1BUkVTKCJyeDEiLCBzc2luLCBSWDEpLAkJXAotCX07CQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3NpX2RldmljZSAjIyBuID0gewkJCVwKLQkJLm5hbWUgPSAiaW14LXNzaSIsCQkJCQlcCi0JCS5pZCA9IG4sCQkJCQkJXAotCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoaW14X3NzaV9yZXNvdXJjZXMgIyMgbiksCVwKLQkJLnJlc291cmNlID0gaW14X3NzaV9yZXNvdXJjZXMgIyMgbiwJCQlcCi0JfQotCi1ERUZJTkVfSU1YX1NTSV9ERVZJQ0UoMCwgMSwgTVgyeF9TU0kxX0JBU0VfQUREUiwgTVgyeF9JTlRfU1NJMSk7Ci1ERUZJTkVfSU1YX1NTSV9ERVZJQ0UoMSwgMiwgTVgyeF9TU0kxX0JBU0VfQUREUiwgTVgyeF9JTlRfU1NJMSk7Ci0KLS8qIEdQSU8gcG9ydCBkZXNjcmlwdGlvbiAqLwotI2RlZmluZSBERUZJTkVfTVhDX0dQSU9fUE9SVF9JUlEoU09DLCBuLCBfaXJxKQkJCQlcCi0JewkJCQkJCQkJXAotCQkuY2hpcC5sYWJlbCA9ICJncGlvLSIgI24sCQkJCVwKLQkJLmlycSA9IF9pcnEsCQkJCQkJXAotCQkuYmFzZSA9IFNPQyAjIyBfSU9fQUREUkVTUyhNWDJ4X0dQSU9fQkFTRV9BRERSICsJXAotCQkJCW4gKiAweDEwMCksCQkJCVwKLQkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgbiAqIDMyLAlcCi0JfQotCi0jZGVmaW5lIERFRklORV9NWENfR1BJT19QT1JUKFNPQywgbikJCQkJCVwKLQl7CQkJCQkJCQlcCi0JCS5jaGlwLmxhYmVsID0gImdwaW8tIiAjbiwJCQkJXAotCQkuYmFzZSA9IFNPQyAjIyBfSU9fQUREUkVTUyhNWDJ4X0dQSU9fQkFTRV9BRERSICsJXAotCQkJCW4gKiAweDEwMCksCQkJCVwKLQkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgbiAqIDMyLAlcCi0JfQotCi0jZGVmaW5lIERFRklORV9NWENfR1BJT19QT1JUUyhTT0MsIHBmeCkJCQkJCVwKLQlzdGF0aWMgc3RydWN0IG14Y19ncGlvX3BvcnQgcGZ4ICMjIF9ncGlvX3BvcnRzW10gPSB7CQlcCi0JCURFRklORV9NWENfR1BJT19QT1JUX0lSUShTT0MsIDAsIFNPQyAjIyBfSU5UX0dQSU8pLAlcCi0JCURFRklORV9NWENfR1BJT19QT1JUKFNPQywgMSksCQkJCVwKLQkJREVGSU5FX01YQ19HUElPX1BPUlQoU09DLCAyKSwJCQkJXAotCQlERUZJTkVfTVhDX0dQSU9fUE9SVChTT0MsIDMpLAkJCQlcCi0JCURFRklORV9NWENfR1BJT19QT1JUKFNPQywgNCksCQkJCVwKLQkJREVGSU5FX01YQ19HUElPX1BPUlQoU09DLCA1KSwJCQkJXAotCX0KLQotI2lmZGVmIENPTkZJR19NQUNIX01YMjEKLURFRklORV9NWENfR1BJT19QT1JUUyhNWDIxLCBpbXgyMSk7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NQUNIX01YMjcKLURFRklORV9NWENfR1BJT19QT1JUUyhNWDI3LCBpbXgyNyk7Ci0jZW5kaWYKLQotaW50IF9faW5pdCBteGNfcmVnaXN0ZXJfZ3Bpb3Modm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfTUFDSF9NWDIxCi0JaWYgKGNwdV9pc19teDIxKCkpCi0JCXJldHVybiBteGNfZ3Bpb19pbml0KGlteDIxX2dwaW9fcG9ydHMsIEFSUkFZX1NJWkUoaW14MjFfZ3Bpb19wb3J0cykpOwotCWVsc2UKLSNlbmRpZgotI2lmZGVmIENPTkZJR19NQUNIX01YMjcKLQlpZiAoY3B1X2lzX214MjcoKSkKLQkJcmV0dXJuIG14Y19ncGlvX2luaXQoaW14MjdfZ3Bpb19wb3J0cywgQVJSQVlfU0laRShpbXgyN19ncGlvX3BvcnRzKSk7Ci0JZWxzZQotI2VuZGlmCi0JCXJldHVybiAwOwotfQotCi0jaWZkZWYgQ09ORklHX01BQ0hfTVgyMQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteDIxX3VzYmhjX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gTVgyMV9VU0JPVEdfQkFTRV9BRERSLAotCQkuZW5kCT0gTVgyMV9VU0JPVEdfQkFTRV9BRERSICsgU1pfOEsgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCXsKLQkJLnN0YXJ0CQk9IE1YMjFfSU5UX1VTQkhPU1QsCi0JCS5lbmQJCT0gTVgyMV9JTlRfVVNCSE9TVCwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14MjFfdXNiaGNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJpbXgyMS1oY2QiLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkuZG1hX21hc2sgPSAmbXgyMV91c2JoY19kZXZpY2UuZGV2LmNvaGVyZW50X2RtYV9tYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG14MjFfdXNiaGNfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBteDIxX3VzYmhjX3Jlc291cmNlcywKLX07Ci0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvZGV2aWNlcy5oIGIvYXJjaC9hcm0vbWFjaC1teDIvZGV2aWNlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGVkNTEzLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19ncHQxOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2dwdDI7Ci0jaWZkZWYgQ09ORklHX01BQ0hfTVgyNwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2dwdDM7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfZ3B0NDsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19ncHQ1OwotI2VuZGlmCi1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfd2R0OwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlMDsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTE7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2UyOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlMzsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTQ7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2U1OwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3cxX21hc3Rlcl9kZXZpY2U7Ci0jaWZkZWYgQ09ORklHX01BQ0hfTVgyMQotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14MjFfbmFuZF9kZXZpY2U7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfTUFDSF9NWDI3Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXgyN19uYW5kX2RldmljZTsKLSNlbmRpZgotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2ZiX2RldmljZTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19mZWNfZGV2aWNlOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3B3bV9kZXZpY2U7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTA7Ci0jaWZkZWYgQ09ORklHX01BQ0hfTVgyNwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2kyY19kZXZpY2UxOwotI2VuZGlmCi1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc2RoY19kZXZpY2UwOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3NkaGNfZGV2aWNlMTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19vdGdfdWRjX2RldmljZTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19vdGdfaG9zdDsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191c2JoMTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191c2JoMjsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMDsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMTsKLSNpZmRlZiBDT05GSUdfTUFDSF9NWDI3Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTI7Ci0jZW5kaWYKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14MjFfdXNiaGNfZGV2aWNlOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3NzaV9kZXZpY2UwOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3NzaV9kZXZpY2UxOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvZXVrcmVhX21iaW14MjctYmFzZWJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9ldWtyZWFfbWJpbXgyNy1iYXNlYm9hcmQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNiMTY5ZC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9ldWtyZWFfbWJpbXgyNy1iYXNlYm9hcmQuYworKysgL2Rldi9udWxsCkBAIC0xLDI0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEVyaWMgQmVuYXJkIC0gZXJpY0BldWtyZWEuY29tCi0gKgotICogQmFzZWQgb24gcGNtOTcwLWJhc2Vib2FyZC5jIHdoaWNoIGlzIDoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBKdWVyZ2VuIEJlaXNlcnQgKGtlcm5lbEBwZW5ndXRyb25peC5kZSkKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKLSAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKLSAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotCi0jaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MjcuaD4KLSNpbmNsdWRlIDxtYWNoL2lteGZiLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvbW1jLmg+Ci0jaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgotCi0jaW5jbHVkZSAiZGV2aWNlcy5oIgotCi1zdGF0aWMgaW50IGV1a3JlYV9tYmlteDI3X3BpbnNbXSA9IHsKLQkvKiBVQVJUMiAqLwotCVBFM19QRl9VQVJUMl9DVFMsCi0JUEU0X1BGX1VBUlQyX1JUUywKLQlQRTZfUEZfVUFSVDJfVFhELAotCVBFN19QRl9VQVJUMl9SWEQsCi0JLyogVUFSVDMgKi8KLQlQRThfUEZfVUFSVDNfVFhELAotCVBFOV9QRl9VQVJUM19SWEQsCi0JUEUxMF9QRl9VQVJUM19DVFMsCi0JUEUxMV9QRl9VQVJUM19SVFMsCi0JLyogVUFSVDQgKi8KLQlQQjI2X0FGX1VBUlQ0X1JUUywKLQlQQjI4X0FGX1VBUlQ0X1RYRCwKLQlQQjI5X0FGX1VBUlQ0X0NUUywKLQlQQjMxX0FGX1VBUlQ0X1JYRCwKLQkvKiBTREhDMSovCi0JUEUxOF9QRl9TRDFfRDAsCi0JUEUxOV9QRl9TRDFfRDEsCi0JUEUyMF9QRl9TRDFfRDIsCi0JUEUyMV9QRl9TRDFfRDMsCi0JUEUyMl9QRl9TRDFfQ01ELAotCVBFMjNfUEZfU0QxX0NMSywKLQkvKiBkaXNwbGF5ICovCi0JUEE1X1BGX0xTQ0xLLAotCVBBNl9QRl9MRDAsCi0JUEE3X1BGX0xEMSwKLQlQQThfUEZfTEQyLAotCVBBOV9QRl9MRDMsCi0JUEExMF9QRl9MRDQsCi0JUEExMV9QRl9MRDUsCi0JUEExMl9QRl9MRDYsCi0JUEExM19QRl9MRDcsCi0JUEExNF9QRl9MRDgsCi0JUEExNV9QRl9MRDksCi0JUEExNl9QRl9MRDEwLAotCVBBMTdfUEZfTEQxMSwKLQlQQTE4X1BGX0xEMTIsCi0JUEExOV9QRl9MRDEzLAotCVBBMjBfUEZfTEQxNCwKLQlQQTIxX1BGX0xEMTUsCi0JUEEyMl9QRl9MRDE2LAotCVBBMjNfUEZfTEQxNywKLQlQQTI4X1BGX0hTWU5DLAotCVBBMjlfUEZfVlNZTkMsCi0JUEEzMF9QRl9DT05UUkFTVCwKLQlQQTMxX1BGX09FX0FDRCwKLQkvKiBTUEkxICovCi0JUEQyOF9QRl9DU1BJMV9TUzAsCi0JUEQyOV9QRl9DU1BJMV9TQ0xLLAotCVBEMzBfUEZfQ1NQSTFfTUlTTywKLQlQRDMxX1BGX0NTUEkxX01PU0ksCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIGdwaW9fbGVkc1tdID0gewotCXsKLQkJLm5hbWUJCQk9ICJsZWQxIiwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZ3BpbwkJCT0gR1BJT19QT1JURiB8IDE2LAotCX0sCi0JewotCQkubmFtZQkJCT0gImxlZDIiLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZ3BpbwkJCT0gR1BJT19QT1JURiB8IDE5LAotCX0sCi0JewotCQkubmFtZQkJCT0gImJhY2tsaWdodCIsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiYmFja2xpZ2h0IiwKLQkJLmFjdGl2ZV9sb3cJCT0gMCwKLQkJLmdwaW8JCQk9IEdQSU9fUE9SVEUgfCA1LAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgZ3Bpb19sZWRfaW5mbyA9IHsKLQkubGVkcwkJPSBncGlvX2xlZHMsCi0JLm51bV9sZWRzCT0gQVJSQVlfU0laRShncGlvX2xlZHMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbGVkc19ncGlvID0gewotCS5uYW1lCT0gImxlZHMtZ3BpbyIsCi0JLmlkCT0gLTEsCi0JLmRldgk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmZ3Bpb19sZWRfaW5mbywKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBpbXhfZmJfdmlkZW9tb2RlIGV1a3JlYV9tYmlteDI3X21vZGVzW10gPSB7Ci0JewotCQkubW9kZSA9IHsKLQkJCS5uYW1lCQk9ICJDTU8tUUdWQSIsCi0JCQkucmVmcmVzaAk9IDYwLAotCQkJLnhyZXMJCT0gMzIwLAotCQkJLnlyZXMJCT0gMjQwLAotCQkJLnBpeGNsb2NrCT0gMTU2MDAwLAotCQkJLmhzeW5jX2xlbgk9IDMwLAotCQkJLmxlZnRfbWFyZ2luCT0gMzgsCi0JCQkucmlnaHRfbWFyZ2luCT0gMjAsCi0JCQkudnN5bmNfbGVuCT0gMywKLQkJCS51cHBlcl9tYXJnaW4JPSAxNSwKLQkJCS5sb3dlcl9tYXJnaW4JPSA0LAotCQl9LAotCQkucGNyCQk9IDB4RkFEMDhCODAsCi0JCS5icHAJCT0gMTYsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgZXVrcmVhX21iaW14MjdfZmJfZGF0YSA9IHsKLQkubW9kZSA9IGV1a3JlYV9tYmlteDI3X21vZGVzLAotCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKGV1a3JlYV9tYmlteDI3X21vZGVzKSwKLQotCS5wd21yCQk9IDB4MDBBOTAzRkYsCi0JLmxzY3IxCQk9IDB4MDAxMjAzMDAsCi0JLmRtYWNyCQk9IDB4MDAwNDAwNjAsCi19OwotCi1zdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhW10gPSB7Ci0JewotCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotCX0sCi0JewotCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotCX0sCi19OwotCi0jaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NikKLQl8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2X01PRFVMRSkKLQotI2RlZmluZSBBRFM3ODQ2X1BFTkRPV04gKEdQSU9fUE9SVEQgfCAyNSkKLQotc3RhdGljIHZvaWQgYWRzNzg0Nl9kZXZfaW5pdCh2b2lkKQotewotCWlmIChncGlvX3JlcXVlc3QoQURTNzg0Nl9QRU5ET1dOLCAiQURTNzg0NiBwZW5kb3duIikgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgZ2V0IGFkczc0NiBwZW4gZG93biBHUElPXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWdwaW9fZGlyZWN0aW9uX2lucHV0KEFEUzc4NDZfUEVORE9XTik7Ci19Ci0KLXN0YXRpYyBpbnQgYWRzNzg0Nl9nZXRfcGVuZG93bl9zdGF0ZSh2b2lkKQotewotCXJldHVybiAhZ3Bpb19nZXRfdmFsdWUoQURTNzg0Nl9QRU5ET1dOKTsKLX0KLQotc3RhdGljIHN0cnVjdCBhZHM3ODQ2X3BsYXRmb3JtX2RhdGEgYWRzNzg0Nl9jb25maWcgX19pbml0ZGF0YSA9IHsKLQkuZ2V0X3BlbmRvd25fc3RhdGUJPSBhZHM3ODQ2X2dldF9wZW5kb3duX3N0YXRlLAotCS5rZWVwX3ZyZWZfb24JCT0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gZXVrcmVhX21iaW14Mjdfc3BpX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0gewotCVswXSA9IHsKLQkJLm1vZGFsaWFzCT0gImFkczc4NDYiLAotCQkuYnVzX251bQk9IDAsCi0JCS5jaGlwX3NlbGVjdAk9IDAsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNTAwMDAwLAotCQkuaXJxCQk9IElSUV9HUElPRCgyNSksCi0JCS5wbGF0Zm9ybV9kYXRhCT0gJmFkczc4NDZfY29uZmlnLAotCQkubW9kZSAgICAgICAgICAgPSBTUElfTU9ERV8yLAotCX0sCi19OwotCi1zdGF0aWMgaW50IGV1a3JlYV9tYmlteDI3X3NwaV9jc1tdID0ge0dQSU9fUE9SVEQgfCAyOH07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgZXVrcmVhX21iaW14Mjdfc3BpXzBfZGF0YSA9IHsKLQkuY2hpcHNlbGVjdAk9IGV1a3JlYV9tYmlteDI3X3NwaV9jcywKLQkubnVtX2NoaXBzZWxlY3QgPSBBUlJBWV9TSVpFKGV1a3JlYV9tYmlteDI3X3NwaV9jcyksCi19OwotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmbGVkc19ncGlvLAotfTsKLQotLyoKLSAqIHN5c3RlbSBpbml0IGZvciBiYXNlYm9hcmQgdXNhZ2UuIFdpbGwgYmUgY2FsbGVkIGJ5IGNwdWlteDI3IGluaXQuCi0gKgotICogQWRkIHBsYXRmb3JtIGRldmljZXMgcHJlc2VudCBvbiB0aGlzIGJhc2Vib2FyZCBhbmQgaW5pdAotICogdGhlbSBmcm9tIENQVSBzaWRlIGFzIGZhciBhcyByZXF1aXJlZCB0byB1c2UgdGhlbSBsYXRlciBvbgotICovCi12b2lkIF9faW5pdCBldWtyZWFfbWJpbXgyN19iYXNlYm9hcmRfaW5pdCh2b2lkKQotewotCW14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMoZXVrcmVhX21iaW14MjdfcGlucywKLQkJQVJSQVlfU0laRShldWtyZWFfbWJpbXgyN19waW5zKSwgIk1CSU1YMjciKTsKLQotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTEsICZ1YXJ0X3BkYXRhWzBdKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UyLCAmdWFydF9wZGF0YVsxXSk7Ci0KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfZmJfZGV2aWNlLCAmZXVrcmVhX21iaW14MjdfZmJfZGF0YSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NkaGNfZGV2aWNlMCwgTlVMTCk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2KQotCXx8IGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDZfTU9EVUxFKQotCS8qIFNQSSBhbmQgQURTNzg0NiBUb3VjaHNjcmVlbiBjb250cm9sZXIgaW5pdCAqLwotCW14Y19ncGlvX21vZGUoR1BJT19QT1JURCB8IDI4IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOwotCW14Y19ncGlvX21vZGUoR1BJT19QT1JURCB8IDI1IHwgR1BJT19HUElPIHwgR1BJT19JTik7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NwaV9kZXZpY2UwLCAmZXVrcmVhX21iaW14Mjdfc3BpXzBfZGF0YSk7Ci0Jc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oZXVrcmVhX21iaW14Mjdfc3BpX2JvYXJkX2luZm8sCi0JCQlBUlJBWV9TSVpFKGV1a3JlYV9tYmlteDI3X3NwaV9ib2FyZF9pbmZvKSk7Ci0JYWRzNzg0Nl9kZXZfaW5pdCgpOwotI2VuZGlmCi0KLQkvKiBMZWRzIGNvbmZpZ3VyYXRpb24gKi8KLQlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEYgfCAxNiB8IEdQSU9fR1BJTyB8IEdQSU9fT1VUKTsKLQlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEYgfCAxOSB8IEdQSU9fR1BJTyB8IEdQSU9fT1VUKTsKLQkvKiBCYWNrbGlnaHQgKi8KLQlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEUgfCA1IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOwotCi0JcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9tYWNoLWNwdWlteDI3LmMgYi9hcmNoL2FybS9tYWNoLW14Mi9tYWNoLWNwdWlteDI3LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNjE2ZGNhLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL21hY2gtY3B1aW14MjcuYworKysgL2Rldi9udWxsCkBAIC0xLDIzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEVyaWMgQmVuYXJkIC0gZXJpY0BldWtyZWEuY29tCi0gKgotICogQmFzZWQgb24gcGNtMDM4LmMgd2hpY2ggaXMgOgotICogQ29weXJpZ2h0IDIwMDcgUm9iZXJ0IFNjaHdlYmVsIDxyLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlPiwgUGVuZ3V0cm9uaXgKLSAqIENvcHlyaWdodCAoQykgMjAwOCBKdWVyZ2VuIEJlaXNlcnQgKGtlcm5lbEBwZW5ndXRyb25peC5kZSkKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKLSAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKLSAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGxhdC1yYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2JvYXJkLWV1a3JlYV9jcHVpbXgyNy5oPgotI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvaTJjLmg+Ci0jaW5jbHVkZSA8bWFjaC9pb211eC1teDI3Lmg+Ci0jaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgotI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KLQotI2luY2x1ZGUgImRldmljZXMuaCIKLQotc3RhdGljIGludCBldWtyZWFfY3B1aW14MjdfcGluc1tdID0gewotCS8qIFVBUlQxICovCi0JUEUxMl9QRl9VQVJUMV9UWEQsCi0JUEUxM19QRl9VQVJUMV9SWEQsCi0JUEUxNF9QRl9VQVJUMV9DVFMsCi0JUEUxNV9QRl9VQVJUMV9SVFMsCi0JLyogVUFSVDQgKi8KLQlQQjI2X0FGX1VBUlQ0X1JUUywKLQlQQjI4X0FGX1VBUlQ0X1RYRCwKLQlQQjI5X0FGX1VBUlQ0X0NUUywKLQlQQjMxX0FGX1VBUlQ0X1JYRCwKLQkvKiBGRUMgKi8KLQlQRDBfQUlOX0ZFQ19UWEQwLAotCVBEMV9BSU5fRkVDX1RYRDEsCi0JUEQyX0FJTl9GRUNfVFhEMiwKLQlQRDNfQUlOX0ZFQ19UWEQzLAotCVBENF9BT1VUX0ZFQ19SWF9FUiwKLQlQRDVfQU9VVF9GRUNfUlhEMSwKLQlQRDZfQU9VVF9GRUNfUlhEMiwKLQlQRDdfQU9VVF9GRUNfUlhEMywKLQlQRDhfQUZfRkVDX01ESU8sCi0JUEQ5X0FJTl9GRUNfTURDLAotCVBEMTBfQU9VVF9GRUNfQ1JTLAotCVBEMTFfQU9VVF9GRUNfVFhfQ0xLLAotCVBEMTJfQU9VVF9GRUNfUlhEMCwKLQlQRDEzX0FPVVRfRkVDX1JYX0RWLAotCVBEMTRfQU9VVF9GRUNfUlhfQ0xLLAotCVBEMTVfQU9VVF9GRUNfQ09MLAotCVBEMTZfQUlOX0ZFQ19UWF9FUiwKLQlQRjIzX0FJTl9GRUNfVFhfRU4sCi0JLyogSTJDMSAqLwotCVBEMTdfUEZfSTJDX0RBVEEsCi0JUEQxOF9QRl9JMkNfQ0xLLAotCS8qIFNESEMyICovCi0JUEI0X1BGX1NEMl9EMCwKLQlQQjVfUEZfU0QyX0QxLAotCVBCNl9QRl9TRDJfRDIsCi0JUEI3X1BGX1NEMl9EMywKLQlQQjhfUEZfU0QyX0NNRCwKLQlQQjlfUEZfU0QyX0NMSywKLSNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTBfTU9EVUxFKQotCS8qIFF1YWQgVUFSVCdzIElSUSAqLwotCUdQSU9fUE9SVEQgfCAyMiB8IEdQSU9fR1BJTyB8IEdQSU9fSU4sCi0JR1BJT19QT1JURCB8IDIzIHwgR1BJT19HUElPIHwgR1BJT19JTiwKLQlHUElPX1BPUlREIHwgMjcgfCBHUElPX0dQSU8gfCBHUElPX0lOLAotCUdQSU9fUE9SVEQgfCAzMCB8IEdQSU9fR1BJTyB8IEdQSU9fSU4sCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGV1a3JlYV9jcHVpbXgyN19mbGFzaF9kYXRhID0gewotCS53aWR0aCA9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGV1a3JlYV9jcHVpbXgyN19mbGFzaF9yZXNvdXJjZSA9IHsKLQkuc3RhcnQgPSAweGMwMDAwMDAwLAotCS5lbmQgICA9IDB4YzNmZmZmZmYsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBldWtyZWFfY3B1aW14Mjdfbm9yX210ZF9kZXZpY2UgPSB7Ci0JLm5hbWUgPSAicGh5c21hcC1mbGFzaCIsCi0JLmlkID0gMCwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZldWtyZWFfY3B1aW14MjdfZmxhc2hfZGF0YSwKLQl9LAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmZXVrcmVhX2NwdWlteDI3X2ZsYXNoX3Jlc291cmNlLAotfTsKLQotc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YVtdID0gewotCXsKLQkJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKLQl9LCB7Ci0JCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YSBldWtyZWFfY3B1aW14MjdfbmFuZF9ib2FyZF9pbmZvID0gewotCS53aWR0aCA9IDEsCi0JLmh3X2VjYyA9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJmV1a3JlYV9jcHVpbXgyN19ub3JfbXRkX2RldmljZSwKLQkmbXhjX2ZlY19kZXZpY2UsCi19OwotCi1zdGF0aWMgc3RydWN0IGlteGkyY19wbGF0Zm9ybV9kYXRhIGV1a3JlYV9jcHVpbXgyN19pMmNfMV9kYXRhID0gewotCS5iaXRyYXRlID0gMTAwMDAwLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBldWtyZWFfY3B1aW14MjdfaTJjX2RldmljZXNbXSA9IHsKLQl7Ci0JCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTYzIiwgMHg1MSksCi0JfSwKLX07Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTBfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YVtdID0gewotCXsKLQkJLm1hcGJhc2UgPSAodW5zaWduZWQgbG9uZykoTVgyN19DUzNfQkFTRV9BRERSICsgMHgyMDAwMDApLAotCQkuaXJxID0gSVJRX0dQSU9CKDIzKSwKLQkJLnVhcnRjbGsgPSAxNDc0NTYwMCwKLQkJLnJlZ3NoaWZ0ID0gMSwKLQkJLmlvdHlwZSA9IFVQSU9fTUVNLAotCQkuZmxhZ3MgPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QgfCBVUEZfSU9SRU1BUCwKLQl9LCB7Ci0JCS5tYXBiYXNlID0gKHVuc2lnbmVkIGxvbmcpKE1YMjdfQ1MzX0JBU0VfQUREUiArIDB4NDAwMDAwKSwKLQkJLmlycSA9IElSUV9HUElPQigyMiksCi0JCS51YXJ0Y2xrID0gMTQ3NDU2MDAsCi0JCS5yZWdzaGlmdCA9IDEsCi0JCS5pb3R5cGUgPSBVUElPX01FTSwKLQkJLmZsYWdzID0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUIHwgVVBGX0lPUkVNQVAsCi0JfSwgewotCQkubWFwYmFzZSA9ICh1bnNpZ25lZCBsb25nKShNWDI3X0NTM19CQVNFX0FERFIgKyAweDgwMDAwMCksCi0JCS5pcnEgPSBJUlFfR1BJT0IoMjcpLAotCQkudWFydGNsayA9IDE0NzQ1NjAwLAotCQkucmVnc2hpZnQgPSAxLAotCQkuaW90eXBlID0gVVBJT19NRU0sCi0JCS5mbGFncyA9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCB8IFVQRl9JT1JFTUFQLAotCX0sIHsKLQkJLm1hcGJhc2UgPSAodW5zaWduZWQgbG9uZykoTVgyN19DUzNfQkFTRV9BRERSICsgMHgxMDAwMDAwKSwKLQkJLmlycSA9IElSUV9HUElPQigzMCksCi0JCS51YXJ0Y2xrID0gMTQ3NDU2MDAsCi0JCS5yZWdzaGlmdCA9IDEsCi0JCS5pb3R5cGUgPSBVUElPX01FTSwKLQkJLmZsYWdzID0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUIHwgVVBGX0lPUkVNQVAsCi0JfSwgewotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNlcmlhbF9kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2VyaWFsODI1MCIsCi0JLmlkID0gMCwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9IHNlcmlhbF9wbGF0Zm9ybV9kYXRhLAotCX0sCi19OwotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBldWtyZWFfY3B1aW14MjdfaW5pdCh2b2lkKQotewotCW14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMoZXVrcmVhX2NwdWlteDI3X3BpbnMsCi0JCUFSUkFZX1NJWkUoZXVrcmVhX2NwdWlteDI3X3BpbnMpLCAiQ1BVSU1YMjciKTsKLQotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTAsICZ1YXJ0X3BkYXRhWzBdKTsKLQotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJmlteDI3X25hbmRfZGV2aWNlLAotCQkJJmV1a3JlYV9jcHVpbXgyN19uYW5kX2JvYXJkX2luZm8pOwotCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZXVrcmVhX2NwdWlteDI3X2kyY19kZXZpY2VzLAotCQkJCUFSUkFZX1NJWkUoZXVrcmVhX2NwdWlteDI3X2kyY19kZXZpY2VzKSk7Ci0KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfaTJjX2RldmljZTAsICZldWtyZWFfY3B1aW14MjdfaTJjXzFfZGF0YSk7Ci0KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZpY2VzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldmljZXMpKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfRVVLUkVBX0NQVUlNWDI3X1VTRVNESEMyKQotCS8qIFNESEMyIGNhbiBiZSB1c2VkIGZvciBXaWZpICovCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NkaGNfZGV2aWNlMSwgTlVMTCk7Ci0JLyogaW4gd2hpY2ggY2FzZSBVQVJUNCBpcyBhbHNvIHVzZWQgZm9yIEJsdWV0b290aCAqLwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTMsICZ1YXJ0X3BkYXRhWzFdKTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTApIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF84MjUwX01PRFVMRSkKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNlcmlhbF9kZXZpY2UpOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUFDSF9FVUtSRUFfTUJJTVgyN19CQVNFQk9BUkQKLQlldWtyZWFfbWJpbXgyN19iYXNlYm9hcmRfaW5pdCgpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBldWtyZWFfY3B1aW14MjdfdGltZXJfaW5pdCh2b2lkKQotewotCW14MjdfY2xvY2tzX2luaXQoMjYwMDAwMDApOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c190aW1lciBldWtyZWFfY3B1aW14MjdfdGltZXIgPSB7Ci0JLmluaXQgPSBldWtyZWFfY3B1aW14MjdfdGltZXJfaW5pdCwKLX07Ci0KLU1BQ0hJTkVfU1RBUlQoQ1BVSU1YMjcsICJFVUtSRUEgQ1BVSU1YMjciKQotCS5waHlzX2lvICAgICAgICA9IE1YMjdfQUlQSV9CQVNFX0FERFIsCi0JLmlvX3BnX29mZnN0ICAgID0gKChNWDI3X0FJUElfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMgICAgPSBNWDI3X1BIWVNfT0ZGU0VUICsgMHgxMDAsCi0JLm1hcF9pbyAgICAgICAgID0gbXgyN19tYXBfaW8sCi0JLmluaXRfaXJxICAgICAgID0gbXgyN19pbml0X2lycSwKLQkuaW5pdF9tYWNoaW5lICAgPSBldWtyZWFfY3B1aW14MjdfaW5pdCwKLQkudGltZXIgICAgICAgICAgPSAmZXVrcmVhX2NwdWlteDI3X3RpbWVyLAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL21hY2gtaW14MjdsaXRlLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9tYWNoLWlteDI3bGl0ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTcxMGJmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL21hY2gtaW14MjdsaXRlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDcgUm9iZXJ0IFNjaHdlYmVsIDxyLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlPiwgUGVuZ3V0cm9uaXgKLSAqIENvcHlyaWdodCAoQykgMjAwOCBKdWVyZ2VuIEJlaXNlcnQgKGtlcm5lbEBwZW5ndXRyb25peC5kZSkKLSAqIENvcHlyaWdodCAyMDA5IERhbmllbCBTY2hhZWZmZXIgKGRhbmllbC5zY2hhZWZmZXJAdGltZXN5cy5jb20pCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgotI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KLSNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MjcuaD4KLSNpbmNsdWRlIDxtYWNoL2JvYXJkLW14MjdsaXRlLmg+Ci0KLSNpbmNsdWRlICJkZXZpY2VzLmgiCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbXgyN2xpdGVfcGluc1tdID0gewotCS8qIFVBUlQxICovCi0JUEUxMl9QRl9VQVJUMV9UWEQsCi0JUEUxM19QRl9VQVJUMV9SWEQsCi0JUEUxNF9QRl9VQVJUMV9DVFMsCi0JUEUxNV9QRl9VQVJUMV9SVFMsCi0JLyogRkVDICovCi0JUEQwX0FJTl9GRUNfVFhEMCwKLQlQRDFfQUlOX0ZFQ19UWEQxLAotCVBEMl9BSU5fRkVDX1RYRDIsCi0JUEQzX0FJTl9GRUNfVFhEMywKLQlQRDRfQU9VVF9GRUNfUlhfRVIsCi0JUEQ1X0FPVVRfRkVDX1JYRDEsCi0JUEQ2X0FPVVRfRkVDX1JYRDIsCi0JUEQ3X0FPVVRfRkVDX1JYRDMsCi0JUEQ4X0FGX0ZFQ19NRElPLAotCVBEOV9BSU5fRkVDX01EQywKLQlQRDEwX0FPVVRfRkVDX0NSUywKLQlQRDExX0FPVVRfRkVDX1RYX0NMSywKLQlQRDEyX0FPVVRfRkVDX1JYRDAsCi0JUEQxM19BT1VUX0ZFQ19SWF9EViwKLQlQRDE0X0FPVVRfRkVDX1JYX0NMSywKLQlQRDE1X0FPVVRfRkVDX0NPTCwKLQlQRDE2X0FJTl9GRUNfVFhfRVIsCi0JUEYyM19BSU5fRkVDX1RYX0VOLAotfTsKLQotc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSA9IHsKLQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZteGNfZmVjX2RldmljZSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBteDI3bGl0ZV9pbml0KHZvaWQpCi17Ci0JbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhteDI3bGl0ZV9waW5zLCBBUlJBWV9TSVpFKG14MjdsaXRlX3BpbnMpLAotCQkiaW14MjdsaXRlIik7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOwotCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHBsYXRmb3JtX2RldmljZXMsIEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2aWNlcykpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgbXgyN2xpdGVfdGltZXJfaW5pdCh2b2lkKQotewotCW14MjdfY2xvY2tzX2luaXQoMjYwMDAwMDApOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c190aW1lciBteDI3bGl0ZV90aW1lciA9IHsKLQkuaW5pdAk9IG14MjdsaXRlX3RpbWVyX2luaXQsCi19OwotCi1NQUNISU5FX1NUQVJUKElNWDI3TElURSwgIkxvZ2ljUEQgaS5NWDI3TElURSIpCi0JLnBoeXNfaW8gICAgICAgID0gTVgyN19BSVBJX0JBU0VfQUREUiwKLQkuaW9fcGdfb2Zmc3QgICAgPSAoKE1YMjdfQUlQSV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcyAgICA9IE1YMjdfUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvICAgICAgICAgPSBteDI3X21hcF9pbywKLQkuaW5pdF9pcnEgICAgICAgPSBteDI3X2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUgICA9IG14MjdsaXRlX2luaXQsCi0JLnRpbWVyICAgICAgICAgID0gJm14MjdsaXRlX3RpbWVyLAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL21hY2gtbXgyMWFkcy5jIGIvYXJjaC9hcm0vbWFjaC1teDIvbWFjaC1teDIxYWRzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExM2U1OGQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvbWFjaC1teDIxYWRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIgU2hhbmUgTmF5IChzaGFuZUBtaW5pcmwuY29tKQotICogIENvcHlyaWdodCAyMDA2LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgotI2luY2x1ZGUgPG1hY2gvaW14ZmIuaD4KLSNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MjEuaD4KLSNpbmNsdWRlIDxtYWNoL214Y19uYW5kLmg+Ci0jaW5jbHVkZSA8bWFjaC9tbWMuaD4KLSNpbmNsdWRlIDxtYWNoL2JvYXJkLW14MjFhZHMuaD4KLQotI2luY2x1ZGUgImRldmljZXMuaCIKLQotc3RhdGljIHVuc2lnbmVkIGludCBteDIxYWRzX3BpbnNbXSA9IHsKLQotCS8qIENTODkwMEEgKi8KLQkoR1BJT19QT1JURSB8IEdQSU9fR1BJTyB8IEdQSU9fSU4gfCAxMSksCi0KLQkvKiBVQVJUMSAqLwotCVBFMTJfUEZfVUFSVDFfVFhELAotCVBFMTNfUEZfVUFSVDFfUlhELAotCVBFMTRfUEZfVUFSVDFfQ1RTLAotCVBFMTVfUEZfVUFSVDFfUlRTLAotCi0JLyogVUFSVDMgKElyREEpIC0gb25seSBUWEQgYW5kIFJYRCAqLwotCVBFOF9QRl9VQVJUM19UWEQsCi0JUEU5X1BGX1VBUlQzX1JYRCwKLQotCS8qIFVBUlQ0ICovCi0JUEIyNl9BRl9VQVJUNF9SVFMsCi0JUEIyOF9BRl9VQVJUNF9UWEQsCi0JUEIyOV9BRl9VQVJUNF9DVFMsCi0JUEIzMV9BRl9VQVJUNF9SWEQsCi0KLQkvKiBMQ0RDICovCi0JUEE1X1BGX0xTQ0xLLAotCVBBNl9QRl9MRDAsCi0JUEE3X1BGX0xEMSwKLQlQQThfUEZfTEQyLAotCVBBOV9QRl9MRDMsCi0JUEExMF9QRl9MRDQsCi0JUEExMV9QRl9MRDUsCi0JUEExMl9QRl9MRDYsCi0JUEExM19QRl9MRDcsCi0JUEExNF9QRl9MRDgsCi0JUEExNV9QRl9MRDksCi0JUEExNl9QRl9MRDEwLAotCVBBMTdfUEZfTEQxMSwKLQlQQTE4X1BGX0xEMTIsCi0JUEExOV9QRl9MRDEzLAotCVBBMjBfUEZfTEQxNCwKLQlQQTIxX1BGX0xEMTUsCi0JUEEyMl9QRl9MRDE2LAotCVBBMjRfUEZfUkVWLCAgICAgLyogU2hhcnAgcGFuZWwgZGVkaWNhdGVkIHNpZ25hbCAqLwotCVBBMjVfUEZfQ0xTLCAgICAgLyogU2hhcnAgcGFuZWwgZGVkaWNhdGVkIHNpZ25hbCAqLwotCVBBMjZfUEZfUFMsICAgICAgLyogU2hhcnAgcGFuZWwgZGVkaWNhdGVkIHNpZ25hbCAqLwotCVBBMjdfUEZfU1BMX1NQUiwgLyogU2hhcnAgcGFuZWwgZGVkaWNhdGVkIHNpZ25hbCAqLwotCVBBMjhfUEZfSFNZTkMsCi0JUEEyOV9QRl9WU1lOQywKLQlQQTMwX1BGX0NPTlRSQVNULAotCVBBMzFfUEZfT0VfQUNELAotCi0JLyogTU1DL1NESEMgKi8KLQlQRTE4X1BGX1NEMV9EMCwKLQlQRTE5X1BGX1NEMV9EMSwKLQlQRTIwX1BGX1NEMV9EMiwKLQlQRTIxX1BGX1NEMV9EMywKLQlQRTIyX1BGX1NEMV9DTUQsCi0JUEUyM19QRl9TRDFfQ0xLLAotCi0JLyogTkZDICovCi0JUEYwX1BGX05SRkIsCi0JUEYxX1BGX05GQ0UsCi0JUEYyX1BGX05GV1AsCi0JUEYzX1BGX05GQ0xFLAotCVBGNF9QRl9ORkFMRSwKLQlQRjVfUEZfTkZSRSwKLQlQRjZfUEZfTkZXRSwKLQlQRjdfUEZfTkZJTzAsCi0JUEY4X1BGX05GSU8xLAotCVBGOV9QRl9ORklPMiwKLQlQRjEwX1BGX05GSU8zLAotCVBGMTFfUEZfTkZJTzQsCi0JUEYxMl9QRl9ORklPNSwKLQlQRjEzX1BGX05GSU82LAotCVBGMTRfUEZfTkZJTzcsCi19OwotCi0vKiBBRFMncyBOT1IgZmxhc2g6IDJ4IEFNMjlCRFMxMjhIRTlWS0kgb24gMzItYml0IGJ1cyAqLwotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbXgyMWFkc19mbGFzaF9kYXRhID0gewotCS53aWR0aCA9IDQsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG14MjFhZHNfZmxhc2hfcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0ID0gTVgyMV9DUzBfQkFTRV9BRERSLAotCS5lbmQgPSBNWDIxX0NTMF9CQVNFX0FERFIgKyAweDAyMDAwMDAwIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14MjFhZHNfbm9yX210ZF9kZXZpY2UgPSB7Ci0JLm5hbWUgPSAicGh5c21hcC1mbGFzaCIsCi0JLmlkID0gMCwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZteDIxYWRzX2ZsYXNoX2RhdGEsCi0JfSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJm14MjFhZHNfZmxhc2hfcmVzb3VyY2UsCi19OwotCi1zdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0gewotCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCi19OwotCi1zdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X25vcnRzX3BkYXRhID0gewotfTsKLQotCi1zdGF0aWMgaW50IG14MjFhZHNfZmJfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXUxNiB0bXA7Ci0KLQl0bXAgPSBfX3Jhd19yZWFkdyhNWDIxQURTX0lPX1JFRyk7Ci0JdG1wIHw9IE1YMjFBRFNfSU9fTENET047Ci0JX19yYXdfd3JpdGV3KHRtcCwgTVgyMUFEU19JT19SRUcpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBteDIxYWRzX2ZiX2V4aXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQl1MTYgdG1wOwotCi0JdG1wID0gX19yYXdfcmVhZHcoTVgyMUFEU19JT19SRUcpOwotCXRtcCAmPSB+TVgyMUFEU19JT19MQ0RPTjsKLQlfX3Jhd193cml0ZXcodG1wLCBNWDIxQURTX0lPX1JFRyk7Ci19Ci0KLS8qCi0gKiBDb25uZWN0ZWQgaXMgYSBwb3J0cmFpdCBTaGFycC1RVkdBIGRpc3BsYXkKLSAqIG9mIHR5cGU6IExRMDM1UTdEQjAyCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgaW14X2ZiX3ZpZGVvbW9kZSBteDIxYWRzX21vZGVzW10gPSB7Ci0JewotCQkubW9kZSA9IHsKLQkJCS5uYW1lCQk9ICJTaGFycC1MUTAzNVE3IiwKLQkJCS5yZWZyZXNoCT0gNjAsCi0JCQkueHJlcwkJPSAyNDAsCi0JCQkueXJlcwkJPSAzMjAsCi0JCQkucGl4Y2xvY2sJPSAxODg2NzksIC8qIGluIHBzICg1LjNNSHopICovCi0JCQkuaHN5bmNfbGVuCT0gMiwKLQkJCS5sZWZ0X21hcmdpbgk9IDYsCi0JCQkucmlnaHRfbWFyZ2luCT0gMTYsCi0JCQkudnN5bmNfbGVuCT0gMSwKLQkJCS51cHBlcl9tYXJnaW4JPSA4LAotCQkJLmxvd2VyX21hcmdpbgk9IDEwLAotCQl9LAotCQkucGNyCQk9IDB4ZmIxMDhiYzcsCi0JCS5icHAJCT0gMTYsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgbXgyMWFkc19mYl9kYXRhID0gewotCS5tb2RlID0gbXgyMWFkc19tb2RlcywKLQkubnVtX21vZGVzID0gQVJSQVlfU0laRShteDIxYWRzX21vZGVzKSwKLQotCS5wd21yCQk9IDB4MDBhOTAzZmYsCi0JLmxzY3IxCQk9IDB4MDAxMjAzMDAsCi0JLmRtYWNyCQk9IDB4MDAwMjAwMDgsCi0KLQkuaW5pdCA9IG14MjFhZHNfZmJfaW5pdCwKLQkuZXhpdCA9IG14MjFhZHNfZmJfZXhpdCwKLX07Ci0KLXN0YXRpYyBpbnQgbXgyMWFkc19zZGhjX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIChfX3Jhd19yZWFkdyhNWDIxQURTX0lPX1JFRykgJiBNWDIxQURTX0lPX1NEX1dQKSA/IDEgOiAwOwotfQotCi1zdGF0aWMgaW50IG14MjFhZHNfc2RoY19pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCBkZXRlY3RfaXJxLAotCXZvaWQgKmRhdGEpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHJlcXVlc3RfaXJxKElSUV9HUElPRCgyNSksIGRldGVjdF9pcnEsCi0JCUlSUUZfVFJJR0dFUl9GQUxMSU5HLCAibW1jLWRldGVjdCIsIGRhdGEpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCXJldHVybiAwOwotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIG14MjFhZHNfc2RoY19leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlmcmVlX2lycShJUlFfR1BJT0QoMjUpLCBkYXRhKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBteDIxYWRzX3NkaGNfcGRhdGEgPSB7Ci0JLm9jcl9hdmFpbCA9IE1NQ19WRERfMjlfMzAgfCBNTUNfVkREXzMwXzMxLCAvKiAzLjBWICovCi0JLmdldF9ybyA9IG14MjFhZHNfc2RoY19nZXRfcm8sCi0JLmluaXQgPSBteDIxYWRzX3NkaGNfaW5pdCwKLQkuZXhpdCA9IG14MjFhZHNfc2RoY19leGl0LAotfTsKLQotc3RhdGljIHN0cnVjdCBteGNfbmFuZF9wbGF0Zm9ybV9kYXRhIG14MjFhZHNfbmFuZF9ib2FyZF9pbmZvID0gewotCS53aWR0aCA9IDEsCi0JLmh3X2VjYyA9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IG1hcF9kZXNjIG14MjFhZHNfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0JLyoKLQkgKiBNZW1vcnktbWFwcGVkIEkvTyBvbiBNWDIxQURTIEJhc2UgYm9hcmQ6Ci0JICogICAtIENTODkwMEEgRXRoZXJuZXQgY29udHJvbGxlcgotCSAqICAgLSBTVDE2QzI1NTJDSiBVQVJUCi0JICogICAtIENQVSBhbmQgQmFzZSBib2FyZCB2ZXJzaW9uCi0JICogICAtIEJhc2UgYm9hcmQgSS9PIHJlZ2lzdGVyCi0JICovCi0JewotCQkudmlydHVhbCA9IE1YMjFBRFNfTU1JT19CQVNFX0FERFIsCi0JCS5wZm4gPSBfX3BoeXNfdG9fcGZuKE1YMjFfQ1MxX0JBU0VfQUREUiksCi0JCS5sZW5ndGggPSBNWDIxQURTX01NSU9fU0laRSwKLQkJLnR5cGUgPSBNVF9ERVZJQ0UsCi0JfSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBteDIxYWRzX21hcF9pbyh2b2lkKQotewotCW14MjFfbWFwX2lvKCk7Ci0JaW90YWJsZV9pbml0KG14MjFhZHNfaW9fZGVzYywgQVJSQVlfU0laRShteDIxYWRzX2lvX2Rlc2MpKTsKLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZteDIxYWRzX25vcl9tdGRfZGV2aWNlLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IG14MjFhZHNfYm9hcmRfaW5pdCh2b2lkKQotewotCW14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMobXgyMWFkc19waW5zLCBBUlJBWV9TSVpFKG14MjFhZHNfcGlucyksCi0JCQkibXgyMWFkcyIpOwotCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTIsICZ1YXJ0X25vcnRzX3BkYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UzLCAmdWFydF9wZGF0YSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX2ZiX2RldmljZSwgJm14MjFhZHNfZmJfZGF0YSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NkaGNfZGV2aWNlMCwgJm14MjFhZHNfc2RoY19wZGF0YSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmaW14MjFfbmFuZF9kZXZpY2UsICZteDIxYWRzX25hbmRfYm9hcmRfaW5mbyk7Ci0KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZpY2VzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldmljZXMpKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IG14MjFhZHNfdGltZXJfaW5pdCh2b2lkKQotewotCW14MjFfY2xvY2tzX2luaXQoMzI3NjgsIDI2MDAwMDAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgbXgyMWFkc190aW1lciA9IHsKLQkuaW5pdAk9IG14MjFhZHNfdGltZXJfaW5pdCwKLX07Ci0KLU1BQ0hJTkVfU1RBUlQoTVgyMUFEUywgIkZyZWVzY2FsZSBpLk1YMjFBRFMiKQotCS8qIG1haW50YWluZXI6IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuICovCi0JLnBoeXNfaW8gICAgICAgID0gTVgyMV9BSVBJX0JBU0VfQUREUiwKLQkuaW9fcGdfb2Zmc3QgICAgPSAoKE1YMjFfQUlQSV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcyAgICA9IE1YMjFfUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvICAgICAgICAgPSBteDIxYWRzX21hcF9pbywKLQkuaW5pdF9pcnEgICAgICAgPSBteDIxX2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUgICA9IG14MjFhZHNfYm9hcmRfaW5pdCwKLQkudGltZXIgICAgICAgICAgPSAmbXgyMWFkc190aW1lciwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9tYWNoLW14MjdfM2RzLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9tYWNoLW14MjdfM2RzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyZjRlMGQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvbWFjaC1teDI3XzNkcy5jCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogQXV0aG9yOiBGYWJpbyBFc3RldmFtIDxmYWJpby5lc3RldmFtQGZyZWVzY2FsZS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgotI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KLSNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MjcuaD4KLSNpbmNsdWRlIDxtYWNoL2JvYXJkLW14MjdwZGsuaD4KLQotI2luY2x1ZGUgImRldmljZXMuaCIKLQotc3RhdGljIHVuc2lnbmVkIGludCBteDI3cGRrX3BpbnNbXSA9IHsKLQkvKiBVQVJUMSAqLwotCVBFMTJfUEZfVUFSVDFfVFhELAotCVBFMTNfUEZfVUFSVDFfUlhELAotCVBFMTRfUEZfVUFSVDFfQ1RTLAotCVBFMTVfUEZfVUFSVDFfUlRTLAotCS8qIEZFQyAqLwotCVBEMF9BSU5fRkVDX1RYRDAsCi0JUEQxX0FJTl9GRUNfVFhEMSwKLQlQRDJfQUlOX0ZFQ19UWEQyLAotCVBEM19BSU5fRkVDX1RYRDMsCi0JUEQ0X0FPVVRfRkVDX1JYX0VSLAotCVBENV9BT1VUX0ZFQ19SWEQxLAotCVBENl9BT1VUX0ZFQ19SWEQyLAotCVBEN19BT1VUX0ZFQ19SWEQzLAotCVBEOF9BRl9GRUNfTURJTywKLQlQRDlfQUlOX0ZFQ19NREMsCi0JUEQxMF9BT1VUX0ZFQ19DUlMsCi0JUEQxMV9BT1VUX0ZFQ19UWF9DTEssCi0JUEQxMl9BT1VUX0ZFQ19SWEQwLAotCVBEMTNfQU9VVF9GRUNfUlhfRFYsCi0JUEQxNF9BT1VUX0ZFQ19SWF9DTEssCi0JUEQxNV9BT1VUX0ZFQ19DT0wsCi0JUEQxNl9BSU5fRkVDX1RYX0VSLAotCVBGMjNfQUlOX0ZFQ19UWF9FTiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgPSB7Ci0JLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmbXhjX2ZlY19kZXZpY2UsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgbXgyN3Bka19pbml0KHZvaWQpCi17Ci0JbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhteDI3cGRrX3BpbnMsIEFSUkFZX1NJWkUobXgyN3Bka19waW5zKSwKLQkJIm14MjdwZGsiKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YSk7Ci0JcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBteDI3cGRrX3RpbWVyX2luaXQodm9pZCkKLXsKLQlteDI3X2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgbXgyN3Bka190aW1lciA9IHsKLQkuaW5pdAk9IG14MjdwZGtfdGltZXJfaW5pdCwKLX07Ci0KLU1BQ0hJTkVfU1RBUlQoTVgyN18zRFMsICJGcmVlc2NhbGUgTVgyN1BESyIpCi0JLyogbWFpbnRhaW5lcjogRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gKi8KLQkucGh5c19pbyAgICAgICAgPSBNWDI3X0FJUElfQkFTRV9BRERSLAotCS5pb19wZ19vZmZzdCAgICA9ICgoTVgyN19BSVBJX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCi0JLmJvb3RfcGFyYW1zICAgID0gTVgyN19QSFlTX09GRlNFVCArIDB4MTAwLAotCS5tYXBfaW8gICAgICAgICA9IG14MjdfbWFwX2lvLAotCS5pbml0X2lycSAgICAgICA9IG14MjdfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZSAgID0gbXgyN3Bka19pbml0LAotCS50aW1lciAgICAgICAgICA9ICZteDI3cGRrX3RpbWVyLAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL21hY2gtbXgyN2Fkcy5jIGIvYXJjaC9hcm0vbWFjaC1teDIvbWFjaC1teDI3YWRzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjZTMyMzYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvbWFjaC1teDI3YWRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNDUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIgU2hhbmUgTmF5IChzaGFuZUBtaW5pcmwuY29tKQotICogIENvcHlyaWdodCAyMDA2LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KLSNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9pb211eC1teDI3Lmg+Ci0jaW5jbHVkZSA8bWFjaC9ib2FyZC1teDI3YWRzLmg+Ci0jaW5jbHVkZSA8bWFjaC9teGNfbmFuZC5oPgotI2luY2x1ZGUgPG1hY2gvaTJjLmg+Ci0jaW5jbHVkZSA8bWFjaC9pbXhmYi5oPgotI2luY2x1ZGUgPG1hY2gvbW1jLmg+Ci0KLSNpbmNsdWRlICJkZXZpY2VzLmgiCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbXgyN2Fkc19waW5zW10gPSB7Ci0JLyogVUFSVDAgKi8KLQlQRTEyX1BGX1VBUlQxX1RYRCwKLQlQRTEzX1BGX1VBUlQxX1JYRCwKLQlQRTE0X1BGX1VBUlQxX0NUUywKLQlQRTE1X1BGX1VBUlQxX1JUUywKLQkvKiBVQVJUMSAqLwotCVBFM19QRl9VQVJUMl9DVFMsCi0JUEU0X1BGX1VBUlQyX1JUUywKLQlQRTZfUEZfVUFSVDJfVFhELAotCVBFN19QRl9VQVJUMl9SWEQsCi0JLyogVUFSVDIgKi8KLQlQRThfUEZfVUFSVDNfVFhELAotCVBFOV9QRl9VQVJUM19SWEQsCi0JUEUxMF9QRl9VQVJUM19DVFMsCi0JUEUxMV9QRl9VQVJUM19SVFMsCi0JLyogVUFSVDMgKi8KLQlQQjI2X0FGX1VBUlQ0X1JUUywKLQlQQjI4X0FGX1VBUlQ0X1RYRCwKLQlQQjI5X0FGX1VBUlQ0X0NUUywKLQlQQjMxX0FGX1VBUlQ0X1JYRCwKLQkvKiBVQVJUNCAqLwotCVBCMThfQUZfVUFSVDVfVFhELAotCVBCMTlfQUZfVUFSVDVfUlhELAotCVBCMjBfQUZfVUFSVDVfQ1RTLAotCVBCMjFfQUZfVUFSVDVfUlRTLAotCS8qIFVBUlQ1ICovCi0JUEIxMF9BRl9VQVJUNl9UWEQsCi0JUEIxMl9BRl9VQVJUNl9DVFMsCi0JUEIxMV9BRl9VQVJUNl9SWEQsCi0JUEIxM19BRl9VQVJUNl9SVFMsCi0JLyogRkVDICovCi0JUEQwX0FJTl9GRUNfVFhEMCwKLQlQRDFfQUlOX0ZFQ19UWEQxLAotCVBEMl9BSU5fRkVDX1RYRDIsCi0JUEQzX0FJTl9GRUNfVFhEMywKLQlQRDRfQU9VVF9GRUNfUlhfRVIsCi0JUEQ1X0FPVVRfRkVDX1JYRDEsCi0JUEQ2X0FPVVRfRkVDX1JYRDIsCi0JUEQ3X0FPVVRfRkVDX1JYRDMsCi0JUEQ4X0FGX0ZFQ19NRElPLAotCVBEOV9BSU5fRkVDX01EQywKLQlQRDEwX0FPVVRfRkVDX0NSUywKLQlQRDExX0FPVVRfRkVDX1RYX0NMSywKLQlQRDEyX0FPVVRfRkVDX1JYRDAsCi0JUEQxM19BT1VUX0ZFQ19SWF9EViwKLQlQRDE0X0FPVVRfRkVDX1JYX0NMSywKLQlQRDE1X0FPVVRfRkVDX0NPTCwKLQlQRDE2X0FJTl9GRUNfVFhfRVIsCi0JUEYyM19BSU5fRkVDX1RYX0VOLAotCS8qIEkyQzIgKi8KLQlQQzVfUEZfSTJDMl9TREEsCi0JUEM2X1BGX0kyQzJfU0NMLAotCS8qIEZCICovCi0JUEE1X1BGX0xTQ0xLLAotCVBBNl9QRl9MRDAsCi0JUEE3X1BGX0xEMSwKLQlQQThfUEZfTEQyLAotCVBBOV9QRl9MRDMsCi0JUEExMF9QRl9MRDQsCi0JUEExMV9QRl9MRDUsCi0JUEExMl9QRl9MRDYsCi0JUEExM19QRl9MRDcsCi0JUEExNF9QRl9MRDgsCi0JUEExNV9QRl9MRDksCi0JUEExNl9QRl9MRDEwLAotCVBBMTdfUEZfTEQxMSwKLQlQQTE4X1BGX0xEMTIsCi0JUEExOV9QRl9MRDEzLAotCVBBMjBfUEZfTEQxNCwKLQlQQTIxX1BGX0xEMTUsCi0JUEEyMl9QRl9MRDE2LAotCVBBMjNfUEZfTEQxNywKLQlQQTI0X1BGX1JFViwKLQlQQTI1X1BGX0NMUywKLQlQQTI2X1BGX1BTLAotCVBBMjdfUEZfU1BMX1NQUiwKLQlQQTI4X1BGX0hTWU5DLAotCVBBMjlfUEZfVlNZTkMsCi0JUEEzMF9QRl9DT05UUkFTVCwKLQlQQTMxX1BGX09FX0FDRCwKLQkvKiBPV0lSRSAqLwotCVBFMTZfQUZfT1dJUkUsCi0JLyogU0RIQzEqLwotCVBFMThfUEZfU0QxX0QwLAotCVBFMTlfUEZfU0QxX0QxLAotCVBFMjBfUEZfU0QxX0QyLAotCVBFMjFfUEZfU0QxX0QzLAotCVBFMjJfUEZfU0QxX0NNRCwKLQlQRTIzX1BGX1NEMV9DTEssCi0JLyogU0RIQzIqLwotCVBCNF9QRl9TRDJfRDAsCi0JUEI1X1BGX1NEMl9EMSwKLQlQQjZfUEZfU0QyX0QyLAotCVBCN19QRl9TRDJfRDMsCi0JUEI4X1BGX1NEMl9DTUQsCi0JUEI5X1BGX1NEMl9DTEssCi19OwotCi1zdGF0aWMgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgbXgyN2Fkc19uYW5kX2JvYXJkX2luZm8gPSB7Ci0JLndpZHRoID0gMSwKLQkuaHdfZWNjID0gMSwKLX07Ci0KLS8qIEFEUydzIE5PUiBmbGFzaCAqLwotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbXgyN2Fkc19mbGFzaF9kYXRhID0gewotCS53aWR0aCA9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG14MjdhZHNfZmxhc2hfcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0ID0gMHhjMDAwMDAwMCwKLQkuZW5kID0gMHhjMDAwMDAwMCArIDB4MDIwMDAwMDAgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDI3YWRzX25vcl9tdGRfZGV2aWNlID0gewotCS5uYW1lID0gInBoeXNtYXAtZmxhc2giLAotCS5pZCA9IDAsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmbXgyN2Fkc19mbGFzaF9kYXRhLAotCX0sCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZteDI3YWRzX2ZsYXNoX3Jlc291cmNlLAotfTsKLQotc3RhdGljIHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBteDI3YWRzX2kyY19kYXRhID0gewotCS5iaXRyYXRlID0gMTAwMDAwLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBteDI3YWRzX2kyY19kZXZpY2VzW10gPSB7Ci19OwotCi12b2lkIGxjZF9wb3dlcihpbnQgb24pCi17Ci0JaWYgKG9uKQotCQlfX3Jhd193cml0ZXcoUEJDX0JDVFJMMV9MQ0RPTiwgUEJDX0JDVFJMMV9TRVRfUkVHKTsKLQllbHNlCi0JCV9fcmF3X3dyaXRldyhQQkNfQkNUUkwxX0xDRE9OLCBQQkNfQkNUUkwxX0NMRUFSX1JFRyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaW14X2ZiX3ZpZGVvbW9kZSBteDI3YWRzX21vZGVzW10gPSB7Ci0JewotCQkubW9kZSA9IHsKLQkJCS5uYW1lCQk9ICJTaGFycC1MUTAzNVE3IiwKLQkJCS5yZWZyZXNoCT0gNjAsCi0JCQkueHJlcwkJPSAyNDAsCi0JCQkueXJlcwkJPSAzMjAsCi0JCQkucGl4Y2xvY2sJPSAxODg2NzksIC8qIGluIHBzICg1LjNNSHopICovCi0JCQkuaHN5bmNfbGVuCT0gMSwKLQkJCS5sZWZ0X21hcmdpbgk9IDksCi0JCQkucmlnaHRfbWFyZ2luCT0gMTYsCi0JCQkudnN5bmNfbGVuCT0gMSwKLQkJCS51cHBlcl9tYXJnaW4JPSA3LAotCQkJLmxvd2VyX21hcmdpbgk9IDksCi0JCX0sCi0JCS5icHAJCT0gMTYsCi0JCS5wY3IJCT0gMHhGQjAwOEJDMCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBpbXhfZmJfcGxhdGZvcm1fZGF0YSBteDI3YWRzX2ZiX2RhdGEgPSB7Ci0JLm1vZGUgPSBteDI3YWRzX21vZGVzLAotCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKG14MjdhZHNfbW9kZXMpLAotCi0JLyoKLQkgKiAtIEhTWU5DIGFjdGl2ZSBoaWdoCi0JICogLSBWU1lOQyBhY3RpdmUgaGlnaAotCSAqIC0gY2xrIG5vdGVuYWJsZWQgd2hpbGUgaWRsZQotCSAqIC0gY2xvY2sgaW52ZXJ0ZWQKLQkgKiAtIGRhdGEgbm90IGludmVydGVkCi0JICogLSBkYXRhIGVuYWJsZSBsb3cgYWN0aXZlCi0JICogLSBlbmFibGUgc2hhcnAgbW9kZQotCSAqLwotCS5wd21yCQk9IDB4MDBBOTAzRkYsCi0JLmxzY3IxCQk9IDB4MDAxMjAzMDAsCi0JLmRtYWNyCQk9IDB4MDAwMjAwMTAsCi0KLQkubGNkX3Bvd2VyCT0gbGNkX3Bvd2VyLAotfTsKLQotc3RhdGljIGludCBteDI3YWRzX3NkaGMxX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFfaGFuZGxlcl90IGRldGVjdF9pcnEsCi0JCQkgICAgICB2b2lkICpkYXRhKQotewotCXJldHVybiByZXF1ZXN0X2lycShJUlFfR1BJT0UoMjEpLCBkZXRlY3RfaXJxLCBJUlFGX1RSSUdHRVJfUklTSU5HLAotCQkJICAgInNkaGMxLWNhcmQtZGV0ZWN0IiwgZGF0YSk7Ci19Ci0KLXN0YXRpYyBpbnQgbXgyN2Fkc19zZGhjMl9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCBkZXRlY3RfaXJxLAotCQkJICAgICAgdm9pZCAqZGF0YSkKLXsKLQlyZXR1cm4gcmVxdWVzdF9pcnEoSVJRX0dQSU9CKDcpLCBkZXRlY3RfaXJxLCBJUlFGX1RSSUdHRVJfUklTSU5HLAotCQkJICAgInNkaGMyLWNhcmQtZGV0ZWN0IiwgZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIG14MjdhZHNfc2RoYzFfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0JZnJlZV9pcnEoSVJRX0dQSU9FKDIxKSwgZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIG14MjdhZHNfc2RoYzJfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0JZnJlZV9pcnEoSVJRX0dQSU9CKDcpLCBkYXRhKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBzZGhjMV9wZGF0YSA9IHsKLQkuaW5pdCA9IG14MjdhZHNfc2RoYzFfaW5pdCwKLQkuZXhpdCA9IG14MjdhZHNfc2RoYzFfZXhpdCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaW14bW1jX3BsYXRmb3JtX2RhdGEgc2RoYzJfcGRhdGEgPSB7Ci0JLmluaXQgPSBteDI3YWRzX3NkaGMyX2luaXQsCi0JLmV4aXQgPSBteDI3YWRzX3NkaGMyX2V4aXQsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJm14MjdhZHNfbm9yX210ZF9kZXZpY2UsCi0JJm14Y19mZWNfZGV2aWNlLAotCSZteGNfdzFfbWFzdGVyX2RldmljZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGFbXSA9IHsKLQl7Ci0JCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCi0JfSwgewotCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotCX0sIHsKLQkJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKLQl9LCB7Ci0JCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCi0JfSwgewotCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotCX0sIHsKLQkJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKLQl9LAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IG14MjdhZHNfYm9hcmRfaW5pdCh2b2lkKQotewotCW14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMobXgyN2Fkc19waW5zLCBBUlJBWV9TSVpFKG14MjdhZHNfcGlucyksCi0JCQkibXgyN2FkcyIpOwotCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGFbMF0pOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTEsICZ1YXJ0X3BkYXRhWzFdKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UyLCAmdWFydF9wZGF0YVsyXSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMywgJnVhcnRfcGRhdGFbM10pOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTQsICZ1YXJ0X3BkYXRhWzRdKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2U1LCAmdWFydF9wZGF0YVs1XSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmaW14MjdfbmFuZF9kZXZpY2UsICZteDI3YWRzX25hbmRfYm9hcmRfaW5mbyk7Ci0KLQkvKiBvbmx5IHRoZSBpMmMgbWFzdGVyIDEgaXMgdXNlZCBvbiB0aGlzIENQVSBjYXJkICovCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgbXgyN2Fkc19pMmNfZGV2aWNlcywKLQkJCQlBUlJBWV9TSVpFKG14MjdhZHNfaTJjX2RldmljZXMpKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfaTJjX2RldmljZTEsICZteDI3YWRzX2kyY19kYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfZmJfZGV2aWNlLCAmbXgyN2Fkc19mYl9kYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc2RoY19kZXZpY2UwLCAmc2RoYzFfcGRhdGEpOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19zZGhjX2RldmljZTEsICZzZGhjMl9wZGF0YSk7Ci0KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZpY2VzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldmljZXMpKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IG14MjdhZHNfdGltZXJfaW5pdCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZnJlZiA9IDI2MDAwMDAwOwotCi0JaWYgKChfX3Jhd19yZWFkdyhQQkNfVkVSU0lPTl9SRUcpICYgQ0tJSF8yN01IWl9CSVRfU0VUKSA9PSAwKQotCQlmcmVmID0gMjcwMDAwMDA7Ci0KLQlteDI3X2Nsb2Nrc19pbml0KGZyZWYpOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c190aW1lciBteDI3YWRzX3RpbWVyID0gewotCS5pbml0CT0gbXgyN2Fkc190aW1lcl9pbml0LAotfTsKLQotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBteDI3YWRzX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewotCXsKLQkJLnZpcnR1YWwgPSBQQkNfQkFTRV9BRERSRVNTLAotCQkucGZuID0gX19waHlzX3RvX3BmbihNWDI3X0NTNF9CQVNFX0FERFIpLAotCQkubGVuZ3RoID0gU1pfMU0sCi0JCS50eXBlID0gTVRfREVWSUNFLAotCX0sCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgbXgyN2Fkc19tYXBfaW8odm9pZCkKLXsKLQlteDI3X21hcF9pbygpOwotCWlvdGFibGVfaW5pdChteDI3YWRzX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXgyN2Fkc19pb19kZXNjKSk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoTVgyN0FEUywgIkZyZWVzY2FsZSBpLk1YMjdBRFMiKQotCS8qIG1haW50YWluZXI6IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuICovCi0JLnBoeXNfaW8gICAgICAgID0gTVgyN19BSVBJX0JBU0VfQUREUiwKLQkuaW9fcGdfb2Zmc3QgICAgPSAoKE1YMjdfQUlQSV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcyAgICA9IE1YMjdfUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvICAgICAgICAgPSBteDI3YWRzX21hcF9pbywKLQkuaW5pdF9pcnEgICAgICAgPSBteDI3X2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUgICA9IG14MjdhZHNfYm9hcmRfaW5pdCwKLQkudGltZXIgICAgICAgICAgPSAmbXgyN2Fkc190aW1lciwKLU1BQ0hJTkVfRU5ECi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL21hY2gtbXh0X3RkNjAuYyBiL2FyY2gvYXJtL21hY2gtbXgyL21hY2gtbXh0X3RkNjAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMzODU1OS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9tYWNoLW14dF90ZDYwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIgU2hhbmUgTmF5IChzaGFuZUBtaW5pcmwuY29tKQotICogIENvcHlyaWdodCAyMDA2LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgotI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgyNy5oPgotI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KLSNpbmNsdWRlIDxtYWNoL2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy9wY2E5NTN4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9pbXhmYi5oPgotI2luY2x1ZGUgPG1hY2gvbW1jLmg+Ci0KLSNpbmNsdWRlICJkZXZpY2VzLmgiCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbXh0X3RkNjBfcGluc1tdIF9faW5pdGRhdGEgPSB7Ci0JLyogVUFSVDAgKi8KLQlQRTEyX1BGX1VBUlQxX1RYRCwKLQlQRTEzX1BGX1VBUlQxX1JYRCwKLQlQRTE0X1BGX1VBUlQxX0NUUywKLQlQRTE1X1BGX1VBUlQxX1JUUywKLQkvKiBVQVJUMSAqLwotCVBFM19QRl9VQVJUMl9DVFMsCi0JUEU0X1BGX1VBUlQyX1JUUywKLQlQRTZfUEZfVUFSVDJfVFhELAotCVBFN19QRl9VQVJUMl9SWEQsCi0JLyogVUFSVDIgKi8KLQlQRThfUEZfVUFSVDNfVFhELAotCVBFOV9QRl9VQVJUM19SWEQsCi0JUEUxMF9QRl9VQVJUM19DVFMsCi0JUEUxMV9QRl9VQVJUM19SVFMsCi0JLyogRkVDICovCi0JUEQwX0FJTl9GRUNfVFhEMCwKLQlQRDFfQUlOX0ZFQ19UWEQxLAotCVBEMl9BSU5fRkVDX1RYRDIsCi0JUEQzX0FJTl9GRUNfVFhEMywKLQlQRDRfQU9VVF9GRUNfUlhfRVIsCi0JUEQ1X0FPVVRfRkVDX1JYRDEsCi0JUEQ2X0FPVVRfRkVDX1JYRDIsCi0JUEQ3X0FPVVRfRkVDX1JYRDMsCi0JUEQ4X0FGX0ZFQ19NRElPLAotCVBEOV9BSU5fRkVDX01EQywKLQlQRDEwX0FPVVRfRkVDX0NSUywKLQlQRDExX0FPVVRfRkVDX1RYX0NMSywKLQlQRDEyX0FPVVRfRkVDX1JYRDAsCi0JUEQxM19BT1VUX0ZFQ19SWF9EViwKLQlQRDE0X0FPVVRfRkVDX1JYX0NMSywKLQlQRDE1X0FPVVRfRkVDX0NPTCwKLQlQRDE2X0FJTl9GRUNfVFhfRVIsCi0JUEYyM19BSU5fRkVDX1RYX0VOLAotCS8qIEkyQzEgKi8KLQlQRDE3X1BGX0kyQ19EQVRBLAotCVBEMThfUEZfSTJDX0NMSywKLQkvKiBJMkMyICovCi0JUEM1X1BGX0kyQzJfU0RBLAotCVBDNl9QRl9JMkMyX1NDTCwKLQkvKiBGQiAqLwotCVBBNV9QRl9MU0NMSywKLQlQQTZfUEZfTEQwLAotCVBBN19QRl9MRDEsCi0JUEE4X1BGX0xEMiwKLQlQQTlfUEZfTEQzLAotCVBBMTBfUEZfTEQ0LAotCVBBMTFfUEZfTEQ1LAotCVBBMTJfUEZfTEQ2LAotCVBBMTNfUEZfTEQ3LAotCVBBMTRfUEZfTEQ4LAotCVBBMTVfUEZfTEQ5LAotCVBBMTZfUEZfTEQxMCwKLQlQQTE3X1BGX0xEMTEsCi0JUEExOF9QRl9MRDEyLAotCVBBMTlfUEZfTEQxMywKLQlQQTIwX1BGX0xEMTQsCi0JUEEyMV9QRl9MRDE1LAotCVBBMjJfUEZfTEQxNiwKLQlQQTIzX1BGX0xEMTcsCi0JUEEyNV9QRl9DTFMsCi0JUEEyN19QRl9TUExfU1BSLAotCVBBMjhfUEZfSFNZTkMsCi0JUEEyOV9QRl9WU1lOQywKLQlQQTMwX1BGX0NPTlRSQVNULAotCVBBMzFfUEZfT0VfQUNELAotCS8qIE9XSVJFICovCi0JUEUxNl9BRl9PV0lSRSwKLQkvKiBTREhDMSovCi0JUEUxOF9QRl9TRDFfRDAsCi0JUEUxOV9QRl9TRDFfRDEsCi0JUEUyMF9QRl9TRDFfRDIsCi0JUEUyMV9QRl9TRDFfRDMsCi0JUEUyMl9QRl9TRDFfQ01ELAotCVBFMjNfUEZfU0QxX0NMSywKLQlQRjhfQUZfQVRBX0lPUkRZLAotCS8qIFNESEMyKi8KLQlQQjRfUEZfU0QyX0QwLAotCVBCNV9QRl9TRDJfRDEsCi0JUEI2X1BGX1NEMl9EMiwKLQlQQjdfUEZfU0QyX0QzLAotCVBCOF9QRl9TRDJfQ01ELAotCVBCOV9QRl9TRDJfQ0xLLAotfTsKLQotc3RhdGljIHN0cnVjdCBteGNfbmFuZF9wbGF0Zm9ybV9kYXRhIG14dF90ZDYwX25hbmRfYm9hcmRfaW5mbyA9IHsKLQkud2lkdGggPSAxLAotCS5od19lY2MgPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBteHRfdGQ2MF9pMmNfZGF0YSA9IHsKLQkuYml0cmF0ZSA9IDEwMDAwMCwKLX07Ci0KLS8qIFBDQTk1NTcgKi8KLXN0YXRpYyBpbnQgbXh0X3RkNjBfcGNhOTU1N19zZXR1cChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJCXVuc2lnbmVkIGdwaW9fYmFzZSwgdW5zaWduZWQgbmdwaW8sCi0JCQkJdm9pZCAqY29udGV4dCkKLXsKLQlzdGF0aWMgaW50IG14dF90ZDYwX2dwaW9fdmFsdWVbXSA9IHsKLQkJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDEKLQl9OwotCWludCBuOwotCi0JZm9yIChuID0gMDsgbiA8IEFSUkFZX1NJWkUobXh0X3RkNjBfZ3Bpb192YWx1ZSk7ICsrbikgewotCQlncGlvX3JlcXVlc3QoZ3Bpb19iYXNlICsgbiwgIk1YVF9URDYwIEdQSU8gRXhwIik7Ci0JCWlmIChteHRfdGQ2MF9ncGlvX3ZhbHVlW25dIDwgMCkKLQkJCWdwaW9fZGlyZWN0aW9uX2lucHV0KGdwaW9fYmFzZSArIG4pOwotCQllbHNlCi0JCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3Bpb19iYXNlICsgbiwKLQkJCQkJCW14dF90ZDYwX2dwaW9fdmFsdWVbbl0pOwotCQlncGlvX2V4cG9ydChncGlvX2Jhc2UgKyBuLCAwKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwY2E5NTN4X3BsYXRmb3JtX2RhdGEgbXh0X3RkNjBfcGNhOTU1N19wZGF0YSA9IHsKLQkuZ3Bpb19iYXNlCT0gMjQwLCAvKiBwbGFjZSBQQ0E5NTU3IGFmdGVyIGFsbCBNWDI3IGdwaW8gcGlucyAqLwotCS5pbnZlcnQJCT0gMCwgLyogRG8gbm90IGludmVydCAqLwotCS5zZXR1cAkJPSBteHRfdGQ2MF9wY2E5NTU3X3NldHVwLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBteHRfdGQ2MF9pMmNfZGV2aWNlc1tdID0gewotCXsKLQkJSTJDX0JPQVJEX0lORk8oInBjYTk1NTciLCAweDE4KSwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmbXh0X3RkNjBfcGNhOTU1N19wZGF0YSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBteHRfdGQ2MF9pMmMyX2RhdGEgPSB7Ci0JLmJpdHJhdGUgPSAxMDAwMDAsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIG14dF90ZDYwX2kyYzJfZGV2aWNlc1tdID0gewotfTsKLQotc3RhdGljIHN0cnVjdCBpbXhfZmJfdmlkZW9tb2RlIG14dF90ZDYwX21vZGVzW10gPSB7Ci0JewotCQkubW9kZSA9IHsKLQkJCS5uYW1lCQk9ICJDaGltZWkgTFc3MDBBVDkwMDMiLAotCQkJLnJlZnJlc2gJPSA2MCwKLQkJCS54cmVzCQk9IDgwMCwKLQkJCS55cmVzCQk9IDQ4MCwKLQkJCS5waXhjbG9jawk9IDMwMzAzLAotCQkJLmhzeW5jX2xlbgk9IDY0LAotCQkJLmxlZnRfbWFyZ2luCT0gMHg2NywKLQkJCS5yaWdodF9tYXJnaW4JPSAweDY4LAotCQkJLnZzeW5jX2xlbgk9IDE2LAotCQkJLnVwcGVyX21hcmdpbgk9IDB4MGYsCi0JCQkubG93ZXJfbWFyZ2luCT0gMHgwZiwKLQkJfSwKLQkJLmJwcAkJPSAxNiwKLQkJLnBjcgkJPSAweEZBMjA4QjgzLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGlteF9mYl9wbGF0Zm9ybV9kYXRhIG14dF90ZDYwX2ZiX2RhdGEgPSB7Ci0JLm1vZGUgPSBteHRfdGQ2MF9tb2RlcywKLQkubnVtX21vZGVzID0gQVJSQVlfU0laRShteHRfdGQ2MF9tb2RlcyksCi0KLQkvKgotCSAqIC0gSFNZTkMgYWN0aXZlIGhpZ2gKLQkgKiAtIFZTWU5DIGFjdGl2ZSBoaWdoCi0JICogLSBjbGsgbm90ZW5hYmxlZCB3aGlsZSBpZGxlCi0JICogLSBjbG9jayBpbnZlcnRlZAotCSAqIC0gZGF0YSBub3QgaW52ZXJ0ZWQKLQkgKiAtIGRhdGEgZW5hYmxlIGxvdyBhY3RpdmUKLQkgKiAtIGVuYWJsZSBzaGFycCBtb2RlCi0JICovCi0JLnB3bXIJCT0gMHgwMEE5MDNGRiwKLQkubHNjcjEJCT0gMHgwMDEyMDMwMCwKLQkuZG1hY3IJCT0gMHgwMDAyMDAxMCwKLX07Ci0KLXN0YXRpYyBpbnQgbXh0X3RkNjBfc2RoYzFfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgZGV0ZWN0X2lycSwKLQkJCQl2b2lkICpkYXRhKQotewotCXJldHVybiByZXF1ZXN0X2lycShJUlFfR1BJT0YoOCksIGRldGVjdF9pcnEsIElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJCSJzZGhjMS1jYXJkLWRldGVjdCIsIGRhdGEpOwotfQotCi1zdGF0aWMgdm9pZCBteHRfdGQ2MF9zZGhjMV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlmcmVlX2lycShJUlFfR1BJT0YoOCksIGRhdGEpOwotfQotCi1zdGF0aWMgc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhIHNkaGMxX3BkYXRhID0gewotCS5pbml0ID0gbXh0X3RkNjBfc2RoYzFfaW5pdCwKLQkuZXhpdCA9IG14dF90ZDYwX3NkaGMxX2V4aXQsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJm14Y19mZWNfZGV2aWNlLAotfTsKLQotc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YVtdID0gewotCXsKLQkJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKLQl9LCB7Ci0JCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCi0JfSwgewotCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotCX0sCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgbXh0X3RkNjBfYm9hcmRfaW5pdCh2b2lkKQotewotCW14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMobXh0X3RkNjBfcGlucywgQVJSQVlfU0laRShteHRfdGQ2MF9waW5zKSwKLQkJCSJNWFRfVEQ2MCIpOwotCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGFbMF0pOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTEsICZ1YXJ0X3BkYXRhWzFdKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UyLCAmdWFydF9wZGF0YVsyXSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmaW14MjdfbmFuZF9kZXZpY2UsICZteHRfdGQ2MF9uYW5kX2JvYXJkX2luZm8pOwotCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgbXh0X3RkNjBfaTJjX2RldmljZXMsCi0JCQkJQVJSQVlfU0laRShteHRfdGQ2MF9pMmNfZGV2aWNlcykpOwotCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgbXh0X3RkNjBfaTJjMl9kZXZpY2VzLAotCQkJCUFSUkFZX1NJWkUobXh0X3RkNjBfaTJjMl9kZXZpY2VzKSk7Ci0KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfaTJjX2RldmljZTAsICZteHRfdGQ2MF9pMmNfZGF0YSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX2kyY19kZXZpY2UxLCAmbXh0X3RkNjBfaTJjMl9kYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfZmJfZGV2aWNlLCAmbXh0X3RkNjBfZmJfZGF0YSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NkaGNfZGV2aWNlMCwgJnNkaGMxX3BkYXRhKTsKLQotCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHBsYXRmb3JtX2RldmljZXMsIEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2aWNlcykpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgbXh0X3RkNjBfdGltZXJfaW5pdCh2b2lkKQotewotCW14MjdfY2xvY2tzX2luaXQoMjYwMDAwMDApOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c190aW1lciBteHRfdGQ2MF90aW1lciA9IHsKLQkuaW5pdAk9IG14dF90ZDYwX3RpbWVyX2luaXQsCi19OwotCi1NQUNISU5FX1NUQVJUKE1YVF9URDYwLCAiTWF4dHJhY2sgaS1NWFQgVEQ2MCIpCi0JLyogbWFpbnRhaW5lcjogTWF4dHJhY2sgSW5kdXN0cmlhbCAqLwotCS5waHlzX2lvCT0gTVgyN19BSVBJX0JBU0VfQUREUiwKLQkuaW9fcGdfb2Zmc3QJPSAoKE1YMjdfQUlQSV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcwk9IE1YMjdfUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvCQk9IG14MjdfbWFwX2lvLAotCS5pbml0X2lycQk9IG14MjdfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZQk9IG14dF90ZDYwX2JvYXJkX2luaXQsCi0JLnRpbWVyCQk9ICZteHRfdGQ2MF90aW1lciwKLU1BQ0hJTkVfRU5ECi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL21hY2gtcGNhMTAwLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9tYWNoLXBjYTEwMC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODc0MjJlLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL21hY2gtcGNhMTAwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA3IFJvYmVydCBTY2h3ZWJlbCA8ci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZT4sIFBlbmd1dHJvbml4Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgU2FzY2hhIEhhdWVyIChrZXJuZWxAcGVuZ3V0cm9uaXguZGUpCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0gKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCi0gKiBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjL2F0MjQuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvZWVwcm9tLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi91bHBpLmg+Ci0jaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgyNy5oPgotI2luY2x1ZGUgPG1hY2gvaTJjLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9JTVgpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9JTVhfTU9EVUxFKQotI2luY2x1ZGUgPG1hY2gvc3BpLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9hdWRtdXguaD4KLSNpbmNsdWRlIDxtYWNoL3NzaS5oPgotI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KLSNpbmNsdWRlIDxtYWNoL2lycXMuaD4KLSNpbmNsdWRlIDxtYWNoL21tYy5oPgotI2luY2x1ZGUgPG1hY2gvbXhjX2VoY2kuaD4KLSNpbmNsdWRlIDxtYWNoL3VscGkuaD4KLQotI2luY2x1ZGUgImRldmljZXMuaCIKLQotI2RlZmluZSBPVEdfUEhZX0NTX0dQSU8gKEdQSU9fUE9SVEIgKyAyMykKLSNkZWZpbmUgVVNCSDJfUEhZX0NTX0dQSU8gKEdQSU9fUE9SVEIgKyAyNCkKLQotc3RhdGljIGludCBwY2ExMDBfcGluc1tdID0gewotCS8qIFVBUlQxICovCi0JUEUxMl9QRl9VQVJUMV9UWEQsCi0JUEUxM19QRl9VQVJUMV9SWEQsCi0JUEUxNF9QRl9VQVJUMV9DVFMsCi0JUEUxNV9QRl9VQVJUMV9SVFMsCi0JLyogU0RIQyAqLwotCVBCNF9QRl9TRDJfRDAsCi0JUEI1X1BGX1NEMl9EMSwKLQlQQjZfUEZfU0QyX0QyLAotCVBCN19QRl9TRDJfRDMsCi0JUEI4X1BGX1NEMl9DTUQsCi0JUEI5X1BGX1NEMl9DTEssCi0JLyogRkVDICovCi0JUEQwX0FJTl9GRUNfVFhEMCwKLQlQRDFfQUlOX0ZFQ19UWEQxLAotCVBEMl9BSU5fRkVDX1RYRDIsCi0JUEQzX0FJTl9GRUNfVFhEMywKLQlQRDRfQU9VVF9GRUNfUlhfRVIsCi0JUEQ1X0FPVVRfRkVDX1JYRDEsCi0JUEQ2X0FPVVRfRkVDX1JYRDIsCi0JUEQ3X0FPVVRfRkVDX1JYRDMsCi0JUEQ4X0FGX0ZFQ19NRElPLAotCVBEOV9BSU5fRkVDX01EQywKLQlQRDEwX0FPVVRfRkVDX0NSUywKLQlQRDExX0FPVVRfRkVDX1RYX0NMSywKLQlQRDEyX0FPVVRfRkVDX1JYRDAsCi0JUEQxM19BT1VUX0ZFQ19SWF9EViwKLQlQRDE0X0FPVVRfRkVDX1JYX0NMSywKLQlQRDE1X0FPVVRfRkVDX0NPTCwKLQlQRDE2X0FJTl9GRUNfVFhfRVIsCi0JUEYyM19BSU5fRkVDX1RYX0VOLAotCS8qIFNTSTEgKi8KLQlQQzIwX1BGX1NTSTFfRlMsCi0JUEMyMV9QRl9TU0kxX1JYRCwKLQlQQzIyX1BGX1NTSTFfVFhELAotCVBDMjNfUEZfU1NJMV9DTEssCi0JLyogb25ib2FyZCBJMkMgKi8KLQlQQzVfUEZfSTJDMl9TREEsCi0JUEM2X1BGX0kyQzJfU0NMLAotCS8qIGV4dGVybmFsIEkyQyAqLwotCVBEMTdfUEZfSTJDX0RBVEEsCi0JUEQxOF9QRl9JMkNfQ0xLLAotCS8qIFNQSTEgKi8KLQlQRDI1X1BGX0NTUEkxX1JEWSwKLQlQRDI5X1BGX0NTUEkxX1NDTEssCi0JUEQzMF9QRl9DU1BJMV9NSVNPLAotCVBEMzFfUEZfQ1NQSTFfTU9TSSwKLQkvKiBPVEcgKi8KLQlPVEdfUEhZX0NTX0dQSU8gfCBHUElPX0dQSU8gfCBHUElPX09VVCwKLQlQQzdfUEZfVVNCT1RHX0RBVEE1LAotCVBDOF9QRl9VU0JPVEdfREFUQTYsCi0JUEM5X1BGX1VTQk9UR19EQVRBMCwKLQlQQzEwX1BGX1VTQk9UR19EQVRBMiwKLQlQQzExX1BGX1VTQk9UR19EQVRBMSwKLQlQQzEyX1BGX1VTQk9UR19EQVRBNCwKLQlQQzEzX1BGX1VTQk9UR19EQVRBMywKLQlQRTBfUEZfVVNCT1RHX05YVCwKLQlQRTFfUEZfVVNCT1RHX1NUUCwKLQlQRTJfUEZfVVNCT1RHX0RJUiwKLQlQRTI0X1BGX1VTQk9UR19DTEssCi0JUEUyNV9QRl9VU0JPVEdfREFUQTcsCi0JLyogVVNCSDIgKi8KLQlVU0JIMl9QSFlfQ1NfR1BJTyB8IEdQSU9fR1BJTyB8IEdQSU9fT1VULAotCVBBMF9QRl9VU0JIMl9DTEssCi0JUEExX1BGX1VTQkgyX0RJUiwKLQlQQTJfUEZfVVNCSDJfREFUQTcsCi0JUEEzX1BGX1VTQkgyX05YVCwKLQlQQTRfUEZfVVNCSDJfU1RQLAotCVBEMTlfQUZfVVNCSDJfREFUQTQsCi0JUEQyMF9BRl9VU0JIMl9EQVRBMywKLQlQRDIxX0FGX1VTQkgyX0RBVEE2LAotCVBEMjJfQUZfVVNCSDJfREFUQTAsCi0JUEQyM19BRl9VU0JIMl9EQVRBMiwKLQlQRDI0X0FGX1VTQkgyX0RBVEExLAotCVBEMjZfQUZfVVNCSDJfREFUQTUsCi19OwotCi1zdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0gewotCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCi19OwotCi1zdGF0aWMgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgcGNhMTAwX25hbmRfYm9hcmRfaW5mbyA9IHsKLQkud2lkdGggPSAxLAotCS5od19lY2MgPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZteGNfdzFfbWFzdGVyX2RldmljZSwKLQkmbXhjX2ZlY19kZXZpY2UsCi0JJm14Y193ZHQsCi19OwotCi1zdGF0aWMgc3RydWN0IGlteGkyY19wbGF0Zm9ybV9kYXRhIHBjYTEwMF9pMmNfMV9kYXRhID0gewotCS5iaXRyYXRlID0gMTAwMDAwLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDI0X3BsYXRmb3JtX2RhdGEgYm9hcmRfZWVwcm9tID0gewotCS5ieXRlX2xlbiA9IDQwOTYsCi0JLnBhZ2Vfc2l6ZSA9IDMyLAotCS5mbGFncyA9IEFUMjRfRkxBR19BRERSMTYsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIHBjYTEwMF9pMmNfZGV2aWNlc1tdID0gewotCXsKLQkJSTJDX0JPQVJEX0lORk8oImF0MjQiLCAweDUyKSwgLyogRTA9MCwgRTE9MSwgRTI9MCAqLwotCQkucGxhdGZvcm1fZGF0YSA9ICZib2FyZF9lZXByb20sCi0JfSwgewotCQlJMkNfQk9BUkRfSU5GTygicnRjLXBjZjg1NjMiLCAweDUxKSwKLQkJLnR5cGUgPSAicGNmODU2MyIKLQl9LCB7Ci0JCUkyQ19CT0FSRF9JTkZPKCJsbTc1IiwgMHg0YSksCi0JCS50eXBlID0gImxtNzUiCi0JfQotfTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9JTVgpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9JTVhfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBzcGlfZWVwcm9tIGF0MjUzMjAgPSB7Ci0JLm5hbWUJCT0gImF0MjUzMjBhbiIsCi0JLmJ5dGVfbGVuCT0gNDA5NiwKLQkucGFnZV9zaXplCT0gMzIsCi0JLmZsYWdzCQk9IEVFX0FERFIyLAotfTsKLQotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBwY2ExMDBfc3BpX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0gewotCXsKLQkJLm1vZGFsaWFzID0gImF0MjUiLAotCQkubWF4X3NwZWVkX2h6ID0gMzAwMDAsCi0JCS5idXNfbnVtID0gMCwKLQkJLmNoaXBfc2VsZWN0ID0gMSwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmYXQyNTMyMCwKLQl9LAotfTsKLQotc3RhdGljIGludCBwY2ExMDBfc3BpX2NzW10gPSB7R1BJT19QT1JURCArIDI4LCBHUElPX1BPUlREICsgMjd9OwotCi1zdGF0aWMgc3RydWN0IHNwaV9pbXhfbWFzdGVyIHBjYTEwMF9zcGlfMF9kYXRhID0gewotCS5jaGlwc2VsZWN0CT0gcGNhMTAwX3NwaV9jcywKLQkubnVtX2NoaXBzZWxlY3QgPSBBUlJBWV9TSVpFKHBjYTEwMF9zcGlfY3MpLAotfTsKLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBwY2ExMDBfYWM5N193YXJtX3Jlc2V0KHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKLXsKLQlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEMgfCAyMCB8IEdQSU9fR1BJTyB8IEdQSU9fT1VUKTsKLQlncGlvX3NldF92YWx1ZShHUElPX1BPUlRDICsgMjAsIDEpOwotCXVkZWxheSgyKTsKLQlncGlvX3NldF92YWx1ZShHUElPX1BPUlRDICsgMjAsIDApOwotCW14Y19ncGlvX21vZGUoUEMyMF9QRl9TU0kxX0ZTKTsKLQltc2xlZXAoMik7Ci19Ci0KLXN0YXRpYyB2b2lkIHBjYTEwMF9hYzk3X2NvbGRfcmVzZXQoc3RydWN0IHNuZF9hYzk3ICphYzk3KQotewotCW14Y19ncGlvX21vZGUoR1BJT19QT1JUQyB8IDIwIHwgR1BJT19HUElPIHwgR1BJT19PVVQpOyAgLyogRlMgKi8KLQlncGlvX3NldF92YWx1ZShHUElPX1BPUlRDICsgMjAsIDApOwotCW14Y19ncGlvX21vZGUoR1BJT19QT1JUQyB8IDIyIHwgR1BJT19HUElPIHwgR1BJT19PVVQpOyAgLyogVFggKi8KLQlncGlvX3NldF92YWx1ZShHUElPX1BPUlRDICsgMjIsIDApOwotCW14Y19ncGlvX21vZGUoR1BJT19QT1JUQyB8IDI4IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOyAgLyogcmVzZXQgKi8KLQlncGlvX3NldF92YWx1ZShHUElPX1BPUlRDICsgMjgsIDApOwotCXVkZWxheSgxMCk7Ci0JZ3Bpb19zZXRfdmFsdWUoR1BJT19QT1JUQyArIDI4LCAxKTsKLQlteGNfZ3Bpb19tb2RlKFBDMjBfUEZfU1NJMV9GUyk7Ci0JbXhjX2dwaW9fbW9kZShQQzIyX1BGX1NTSTFfVFhEKTsKLQltc2xlZXAoMik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaW14X3NzaV9wbGF0Zm9ybV9kYXRhIHBjYTEwMF9zc2lfcGRhdGEgPSB7Ci0JLmFjOTdfcmVzZXQJCT0gcGNhMTAwX2FjOTdfY29sZF9yZXNldCwKLQkuYWM5N193YXJtX3Jlc2V0CT0gcGNhMTAwX2FjOTdfd2FybV9yZXNldCwKLQkuZmxhZ3MJCQk9IElNWF9TU0lfVVNFX0FDOTcsCi19OwotCi1zdGF0aWMgaW50IHBjYTEwMF9zZGhjMl9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCBkZXRlY3RfaXJxLAotCQl2b2lkICpkYXRhKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSByZXF1ZXN0X2lycShJUlFfR1BJT0MoMjkpLCBkZXRlY3RfaXJxLAotCQkJICBJUlFGX0RJU0FCTEVEIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCi0JCQkgICJpbXgtbW1jLWRldGVjdCIsIGRhdGEpOwotCWlmIChyZXQpCi0JCXByaW50ayhLRVJOX0VSUgotCQkJInBjYTEwMDogRmFpbGVkIHRvIHJldWVzdCBpcnEgZm9yIHNkL21tYyBkZXRlY3Rpb25cbiIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgcGNhMTAwX3NkaGMyX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCWZyZWVfaXJxKElSUV9HUElPQygyOSksIGRhdGEpOwotfQotCi1zdGF0aWMgc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhIHNkaGNfcGRhdGEgPSB7Ci0JLmluaXQgPSBwY2ExMDBfc2RoYzJfaW5pdCwKLQkuZXhpdCA9IHBjYTEwMF9zZGhjMl9leGl0LAotfTsKLQotc3RhdGljIGludCBvdGdfcGh5X2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlncGlvX3NldF92YWx1ZShPVEdfUEhZX0NTX0dQSU8sIDApOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IG14Y191c2JoX3BsYXRmb3JtX2RhdGEgb3RnX3BkYXRhID0gewotCS5pbml0CT0gb3RnX3BoeV9pbml0LAotCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VMUEksCi0JLmZsYWdzCT0gTVhDX0VIQ0lfSU5URVJGQUNFX0RJRkZfVU5JLAotfTsKLQotc3RhdGljIGludCB1c2JoMl9waHlfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCWdwaW9fc2V0X3ZhbHVlKFVTQkgyX1BIWV9DU19HUElPLCAwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgyX3BkYXRhID0gewotCS5pbml0CT0gdXNiaDJfcGh5X2luaXQsCi0JLnBvcnRzYwk9IE1YQ19FSENJX01PREVfVUxQSSwKLQkuZmxhZ3MJPSBNWENfRUhDSV9JTlRFUkZBQ0VfRElGRl9VTkksCi19OwotCi1zdGF0aWMgc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgb3RnX2RldmljZV9wZGF0YSA9IHsKLQkub3BlcmF0aW5nX21vZGUgPSBGU0xfVVNCMl9EUl9ERVZJQ0UsCi0JLnBoeV9tb2RlICAgICAgID0gRlNMX1VTQjJfUEhZX1VMUEksCi19OwotCi1zdGF0aWMgaW50IG90Z19tb2RlX2hvc3Q7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBjYTEwMF9vdGdfbW9kZShjaGFyICpvcHRpb25zKQotewotCWlmICghc3RyY21wKG9wdGlvbnMsICJob3N0IikpCi0JCW90Z19tb2RlX2hvc3QgPSAxOwotCWVsc2UgaWYgKCFzdHJjbXAob3B0aW9ucywgImRldmljZSIpKQotCQlvdGdfbW9kZV9ob3N0ID0gMDsKLQllbHNlCi0JCXByX2luZm8oIm90Z19tb2RlIG5laXRoZXIgXCJob3N0XCIgbm9yIFwiZGV2aWNlXCIuICIKLQkJCSJEZWZhdWx0aW5nIHRvIGRldmljZVxuIik7Ci0JcmV0dXJuIDA7Ci19Ci1fX3NldHVwKCJvdGdfbW9kZT0iLCBwY2ExMDBfb3RnX21vZGUpOwotCi1zdGF0aWMgdm9pZCBfX2luaXQgcGNhMTAwX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0JLyogU1NJIHVuaXQgKi8KLQlteGNfYXVkbXV4X3YxX2NvbmZpZ3VyZV9wb3J0KE1YMjdfQVVETVVYX0hQQ1IxX1NTSTAsCi0JCQkJICBNWENfQVVETVVYX1YxX1BDUl9TWU4gfCAvKiA0d2lyZSBtb2RlICovCi0JCQkJICBNWENfQVVETVVYX1YxX1BDUl9URkNTRUwoMykgfAotCQkJCSAgTVhDX0FVRE1VWF9WMV9QQ1JfVENMS0RJUiB8IC8qIGNsb2NrIGlzIG91dHB1dCAqLwotCQkJCSAgTVhDX0FVRE1VWF9WMV9QQ1JfUlhEU0VMKDMpKTsKLQlteGNfYXVkbXV4X3YxX2NvbmZpZ3VyZV9wb3J0KDMsCi0JCQkJICBNWENfQVVETVVYX1YxX1BDUl9TWU4gfCAvKiA0d2lyZSBtb2RlICovCi0JCQkJICBNWENfQVVETVVYX1YxX1BDUl9URkNTRUwoMCkgfAotCQkJCSAgTVhDX0FVRE1VWF9WMV9QQ1JfVEZTRElSIHwKLQkJCQkgIE1YQ19BVURNVVhfVjFfUENSX1JYRFNFTCgwKSk7Ci0KLQlyZXQgPSBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKHBjYTEwMF9waW5zLAotCQkJQVJSQVlfU0laRShwY2ExMDBfcGlucyksICJQQ0ExMDAiKTsKLQlpZiAocmV0KQotCQlwcmludGsoS0VSTl9FUlIgInBjYTEwMDogRmFpbGVkIHRvIHNldHVwIHBpbnMgKCVkKVxuIiwgcmV0KTsKLQotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJmlteF9zc2lfZGV2aWNlMCwgJnBjYTEwMF9zc2lfcGRhdGEpOwotCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOwotCi0JbXhjX2dwaW9fbW9kZShHUElPX1BPUlRDIHwgMjkgfCBHUElPX0dQSU8gfCBHUElPX0lOKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc2RoY19kZXZpY2UxLCAmc2RoY19wZGF0YSk7Ci0KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZpbXgyN19uYW5kX2RldmljZSwgJnBjYTEwMF9uYW5kX2JvYXJkX2luZm8pOwotCi0JLyogb25seSB0aGUgaTJjIG1hc3RlciAxIGlzIHVzZWQgb24gdGhpcyBDUFUgY2FyZCAqLwotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIHBjYTEwMF9pMmNfZGV2aWNlcywKLQkJCQlBUlJBWV9TSVpFKHBjYTEwMF9pMmNfZGV2aWNlcykpOwotCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX2kyY19kZXZpY2UxLCAmcGNhMTAwX2kyY18xX2RhdGEpOwotCi0JbXhjX2dwaW9fbW9kZShHUElPX1BPUlREIHwgMjggfCBHUElPX0dQSU8gfCBHUElPX09VVCk7Ci0JbXhjX2dwaW9fbW9kZShHUElPX1BPUlREIHwgMjcgfCBHUElPX0dQSU8gfCBHUElPX09VVCk7Ci0KLQkvKiBHUElPMF9JUlEgKi8KLQlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEMgfCAzMSB8IEdQSU9fR1BJTyB8IEdQSU9fSU4pOwotCS8qIEdQSU8xX0lSUSAqLwotCW14Y19ncGlvX21vZGUoR1BJT19QT1JUQyB8IDI1IHwgR1BJT19HUElPIHwgR1BJT19JTik7Ci0JLyogR1BJTzJfSVJRICovCi0JbXhjX2dwaW9fbW9kZShHUElPX1BPUlRFIHwgNSB8IEdQSU9fR1BJTyB8IEdQSU9fSU4pOwotCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX0lNWCkgfHwgZGVmaW5lZChDT05GSUdfU1BJX0lNWF9NT0RVTEUpCi0Jc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8ocGNhMTAwX3NwaV9ib2FyZF9pbmZvLAotCQkJCUFSUkFZX1NJWkUocGNhMTAwX3NwaV9ib2FyZF9pbmZvKSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NwaV9kZXZpY2UwLCAmcGNhMTAwX3NwaV8wX2RhdGEpOwotI2VuZGlmCi0KLQlncGlvX3JlcXVlc3QoT1RHX1BIWV9DU19HUElPLCAidXNiLW90Zy1jcyIpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChPVEdfUEhZX0NTX0dQSU8sIDEpOwotCWdwaW9fcmVxdWVzdChVU0JIMl9QSFlfQ1NfR1BJTywgInVzYi1ob3N0Mi1jcyIpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChVU0JIMl9QSFlfQ1NfR1BJTywgMSk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfVUxQSSkKLQlpZiAob3RnX21vZGVfaG9zdCkgewotCQlvdGdfcGRhdGEub3RnID0gb3RnX3VscGlfY3JlYXRlKCZteGNfdWxwaV9hY2Nlc3Nfb3BzLAotCQkJCVVTQl9PVEdfRFJWX1ZCVVMgfCBVU0JfT1RHX0RSVl9WQlVTX0VYVCk7Ci0KLQkJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX290Z19ob3N0LCAmb3RnX3BkYXRhKTsKLQl9Ci0KLQl1c2JoMl9wZGF0YS5vdGcgPSBvdGdfdWxwaV9jcmVhdGUoJm14Y191bHBpX2FjY2Vzc19vcHMsCi0JCQkJVVNCX09UR19EUlZfVkJVUyB8IFVTQl9PVEdfRFJWX1ZCVVNfRVhUKTsKLQotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMiwgJnVzYmgyX3BkYXRhKTsKLSNlbmRpZgotCWlmICghb3RnX21vZGVfaG9zdCkgewotCQlncGlvX3NldF92YWx1ZShPVEdfUEhZX0NTX0dQSU8sIDApOwotCQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfb3RnX3VkY19kZXZpY2UsICZvdGdfZGV2aWNlX3BkYXRhKTsKLQl9Ci0KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZpY2VzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldmljZXMpKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHBjYTEwMF90aW1lcl9pbml0KHZvaWQpCi17Ci0JbXgyN19jbG9ja3NfaW5pdCgyNjAwMDAwMCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIHBjYTEwMF90aW1lciA9IHsKLQkuaW5pdCA9IHBjYTEwMF90aW1lcl9pbml0LAotfTsKLQotTUFDSElORV9TVEFSVChQQ0ExMDAsICJwaHlDQVJELWkuTVgyNyIpCi0JLnBoeXNfaW8gICAgICAgID0gTVgyN19BSVBJX0JBU0VfQUREUiwKLQkuaW9fcGdfb2Zmc3QgICAgPSAoKE1YMjdfQUlQSV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcyAgICA9IE1YMjdfUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvICAgICAgICAgPSBteDI3X21hcF9pbywKLQkuaW5pdF9pcnEgICAgICAgPSBteDI3X2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUgICA9IHBjYTEwMF9pbml0LAotCS50aW1lciAgICAgICAgICA9ICZwY2ExMDBfdGltZXIsCi1NQUNISU5FX0VORAotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9tYWNoLXBjbTAzOC5jIGIvYXJjaC9hcm0vbWFjaC1teDIvbWFjaC1wY20wMzguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZjODk0My4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9tYWNoLXBjbTAzOC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwNyBSb2JlcnQgU2Nod2ViZWwgPHIuc2Nod2ViZWxAcGVuZ3V0cm9uaXguZGU+LCBQZW5ndXRyb25peAotICogQ29weXJpZ2h0IChDKSAyMDA4IEp1ZXJnZW4gQmVpc2VydCAoa2VybmVsQHBlbmd1dHJvbml4LmRlKQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgotICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAotICogTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMvYXQyNC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BsYXQtcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgotI2luY2x1ZGUgPGxpbnV4L21mZC9tYzEzNzgzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotCi0jaW5jbHVkZSA8bWFjaC9ib2FyZC1wY20wMzguaD4KLSNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2kyYy5oPgotI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgyNy5oPgotI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KLSNpbmNsdWRlIDxtYWNoL214Y19uYW5kLmg+Ci0jaW5jbHVkZSA8bWFjaC9zcGkuaD4KLSNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+Ci0jaW5jbHVkZSA8bWFjaC91bHBpLmg+Ci0KLSNpbmNsdWRlICJkZXZpY2VzLmgiCi0KLXN0YXRpYyBpbnQgcGNtMDM4X3BpbnNbXSA9IHsKLQkvKiBVQVJUMSAqLwotCVBFMTJfUEZfVUFSVDFfVFhELAotCVBFMTNfUEZfVUFSVDFfUlhELAotCVBFMTRfUEZfVUFSVDFfQ1RTLAotCVBFMTVfUEZfVUFSVDFfUlRTLAotCS8qIFVBUlQyICovCi0JUEUzX1BGX1VBUlQyX0NUUywKLQlQRTRfUEZfVUFSVDJfUlRTLAotCVBFNl9QRl9VQVJUMl9UWEQsCi0JUEU3X1BGX1VBUlQyX1JYRCwKLQkvKiBVQVJUMyAqLwotCVBFOF9QRl9VQVJUM19UWEQsCi0JUEU5X1BGX1VBUlQzX1JYRCwKLQlQRTEwX1BGX1VBUlQzX0NUUywKLQlQRTExX1BGX1VBUlQzX1JUUywKLQkvKiBGRUMgKi8KLQlQRDBfQUlOX0ZFQ19UWEQwLAotCVBEMV9BSU5fRkVDX1RYRDEsCi0JUEQyX0FJTl9GRUNfVFhEMiwKLQlQRDNfQUlOX0ZFQ19UWEQzLAotCVBENF9BT1VUX0ZFQ19SWF9FUiwKLQlQRDVfQU9VVF9GRUNfUlhEMSwKLQlQRDZfQU9VVF9GRUNfUlhEMiwKLQlQRDdfQU9VVF9GRUNfUlhEMywKLQlQRDhfQUZfRkVDX01ESU8sCi0JUEQ5X0FJTl9GRUNfTURDLAotCVBEMTBfQU9VVF9GRUNfQ1JTLAotCVBEMTFfQU9VVF9GRUNfVFhfQ0xLLAotCVBEMTJfQU9VVF9GRUNfUlhEMCwKLQlQRDEzX0FPVVRfRkVDX1JYX0RWLAotCVBEMTRfQU9VVF9GRUNfUlhfQ0xLLAotCVBEMTVfQU9VVF9GRUNfQ09MLAotCVBEMTZfQUlOX0ZFQ19UWF9FUiwKLQlQRjIzX0FJTl9GRUNfVFhfRU4sCi0JLyogSTJDMiAqLwotCVBDNV9QRl9JMkMyX1NEQSwKLQlQQzZfUEZfSTJDMl9TQ0wsCi0JLyogU1BJMSAqLwotCVBEMjVfUEZfQ1NQSTFfUkRZLAotCVBEMjlfUEZfQ1NQSTFfU0NMSywKLQlQRDMwX1BGX0NTUEkxX01JU08sCi0JUEQzMV9QRl9DU1BJMV9NT1NJLAotCS8qIFNTSTEgKi8KLQlQQzIwX1BGX1NTSTFfRlMsCi0JUEMyMV9QRl9TU0kxX1JYRCwKLQlQQzIyX1BGX1NTSTFfVFhELAotCVBDMjNfUEZfU1NJMV9DTEssCi0JLyogU1NJNCAqLwotCVBDMTZfUEZfU1NJNF9GUywKLQlQQzE3X1BGX1NTSTRfUlhELAotCVBDMThfUEZfU1NJNF9UWEQsCi0JUEMxOV9QRl9TU0k0X0NMSywKLQkvKiBVU0IgaG9zdCAqLwotCVBBMF9QRl9VU0JIMl9DTEssCi0JUEExX1BGX1VTQkgyX0RJUiwKLQlQQTJfUEZfVVNCSDJfREFUQTcsCi0JUEEzX1BGX1VTQkgyX05YVCwKLQlQQTRfUEZfVVNCSDJfU1RQLAotCVBEMTlfQUZfVVNCSDJfREFUQTQsCi0JUEQyMF9BRl9VU0JIMl9EQVRBMywKLQlQRDIxX0FGX1VTQkgyX0RBVEE2LAotCVBEMjJfQUZfVVNCSDJfREFUQTAsCi0JUEQyM19BRl9VU0JIMl9EQVRBMiwKLQlQRDI0X0FGX1VTQkgyX0RBVEExLAotCVBEMjZfQUZfVVNCSDJfREFUQTUsCi19OwotCi0vKgotICogUGh5dGVjJ3MgUENNMDM4IGNvbWVzIHdpdGggMk1pQiBiYXR0ZXJ5IGJ1ZmZlcmVkIFNSQU0sCi0gKiAxNiBiaXQgd2lkdGgKLSAqLwotCi1zdGF0aWMgc3RydWN0IHBsYXRkYXRhX210ZF9yYW0gcGNtMDM4X3NyYW1fZGF0YSA9IHsKLQkuYmFua3dpZHRoID0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNtMDM4X3NyYW1fcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0ID0gTVgyN19DUzFfQkFTRV9BRERSLAotCS5lbmQgICA9IE1YMjdfQ1MxX0JBU0VfQUREUiArIDUxMiAqIDEwMjQgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGNtMDM4X3NyYW1fbXRkX2RldmljZSA9IHsKLQkubmFtZSA9ICJtdGQtcmFtIiwKLQkuaWQgPSAwLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJnBjbTAzOF9zcmFtX2RhdGEsCi0JfSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJnBjbTAzOF9zcmFtX3Jlc291cmNlLAotfTsKLQotLyoKLSAqIFBoeXRlYydzIHBoeUNPUkUtaS5NWDI3IGNvbWVzIHdpdGggMzJNaUIgZmxhc2gsCi0gKiAxNiBiaXQgd2lkdGgKLSAqLwotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcGNtMDM4X2ZsYXNoX2RhdGEgPSB7Ci0JLndpZHRoID0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNtMDM4X2ZsYXNoX3Jlc291cmNlID0gewotCS5zdGFydCA9IDB4YzAwMDAwMDAsCi0JLmVuZCAgID0gMHhjMWZmZmZmZiwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjbTAzOF9ub3JfbXRkX2RldmljZSA9IHsKLQkubmFtZSA9ICJwaHlzbWFwLWZsYXNoIiwKLQkuaWQgPSAwLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJnBjbTAzOF9mbGFzaF9kYXRhLAotCX0sCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZwY20wMzhfZmxhc2hfcmVzb3VyY2UsCi19OwotCi1zdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhW10gPSB7Ci0JewotCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotCX0sIHsKLQkJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKLQl9LCB7Ci0JCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YSBwY20wMzhfbmFuZF9ib2FyZF9pbmZvID0gewotCS53aWR0aCA9IDEsCi0JLmh3X2VjYyA9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnBjbTAzOF9ub3JfbXRkX2RldmljZSwKLQkmbXhjX3cxX21hc3Rlcl9kZXZpY2UsCi0JJm14Y19mZWNfZGV2aWNlLAotCSZwY20wMzhfc3JhbV9tdGRfZGV2aWNlLAotCSZteGNfd2R0LAotfTsKLQotLyogT24gcGNtMDM4IHRoZXJlJ3MgYSBzcmFtIGF0dGFjaGVkIHRvIENTMSwgd2UgZW5hYmxlIHRoZSBjaGlwc2VsZWN0IGhlcmUgYW5kCi0gKiBzZXR1cCBvdGhlciBzdHVmZnMgdG8gYWNjZXNzIHRoZSBzcmFtLiAqLwotc3RhdGljIHZvaWQgX19pbml0IHBjbTAzOF9pbml0X3NyYW0odm9pZCkKLXsKLQlteDI3X3NldHVwX3dlaW1jcygxLCAweDAwMDBkODQzLCAweDIyMjUyNTIxLCAweDIyMjIwYTAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBwY20wMzhfaTJjXzFfZGF0YSA9IHsKLQkuYml0cmF0ZSA9IDEwMDAwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQyNF9wbGF0Zm9ybV9kYXRhIGJvYXJkX2VlcHJvbSA9IHsKLQkuYnl0ZV9sZW4gPSA0MDk2LAotCS5wYWdlX3NpemUgPSAzMiwKLQkuZmxhZ3MgPSBBVDI0X0ZMQUdfQUREUjE2LAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBwY20wMzhfaTJjX2RldmljZXNbXSA9IHsKLQl7Ci0JCUkyQ19CT0FSRF9JTkZPKCJhdDI0IiwgMHg1MiksIC8qIEUwPTAsIEUxPTEsIEUyPTAgKi8KLQkJLnBsYXRmb3JtX2RhdGEgPSAmYm9hcmRfZWVwcm9tLAotCX0sIHsKLQkJSTJDX0JPQVJEX0lORk8oInBjZjg1NjMiLCAweDUxKSwKLQl9LCB7Ci0JCUkyQ19CT0FSRF9JTkZPKCJsbTc1IiwgMHg0YSksCi0JfQotfTsKLQotc3RhdGljIGludCBwY20wMzhfc3BpX2NzW10gPSB7R1BJT19QT1JURCArIDI4fTsKLQotc3RhdGljIHN0cnVjdCBzcGlfaW14X21hc3RlciBwY20wMzhfc3BpXzBfZGF0YSA9IHsKLQkuY2hpcHNlbGVjdCA9IHBjbTAzOF9zcGlfY3MsCi0JLm51bV9jaGlwc2VsZWN0ID0gQVJSQVlfU0laRShwY20wMzhfc3BpX2NzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBzZGhjMV9jb25zdW1lcnNbXSA9IHsKLQl7Ci0JCS5kZXYJPSAmbXhjX3NkaGNfZGV2aWNlMS5kZXYsCi0JCS5zdXBwbHkJPSAic2RoY192Y2MiLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc2RoYzFfZGF0YSA9IHsKLQkuY29uc3RyYWludHMgPSB7Ci0JCS5taW5fdVYgPSAzMDAwMDAwLAotCQkubWF4X3VWID0gMzQwMDAwMCwKLQkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFIHwKLQkJCVJFR1VMQVRPUl9DSEFOR0VfTU9ERSB8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAotCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCB8Ci0JCQlSRUdVTEFUT1JfTU9ERV9GQVNULAotCQkuYWx3YXlzX29uID0gMCwKLQkJLmJvb3Rfb24gPSAwLAotCX0sCi0JLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUoc2RoYzFfY29uc3VtZXJzKSwKLQkuY29uc3VtZXJfc3VwcGxpZXMgPSBzZGhjMV9jb25zdW1lcnMsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgY2FtX2NvbnN1bWVyc1tdID0gewotCXsKLQkJLmRldgk9IE5VTEwsCi0JCS5zdXBwbHkJPSAiaW14X2NhbV92Y2MiLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgY2FtX2RhdGEgPSB7Ci0JLmNvbnN0cmFpbnRzID0gewotCQkubWluX3VWID0gMzAwMDAwMCwKLQkJLm1heF91ViA9IDM0MDAwMDAsCi0JCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSB8Ci0JCQlSRUdVTEFUT1JfQ0hBTkdFX01PREUgfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKLQkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwgfAotCQkJUkVHVUxBVE9SX01PREVfRkFTVCwKLQkJLmFsd2F5c19vbiA9IDAsCi0JCS5ib290X29uID0gMCwKLQl9LAotCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKGNhbV9jb25zdW1lcnMpLAotCS5jb25zdW1lcl9zdXBwbGllcyA9IGNhbV9jb25zdW1lcnMsCi19OwotCi1zdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3JfaW5pdF9kYXRhIHBjbTAzOF9yZWd1bGF0b3JzW10gPSB7Ci0JewotCQkuaWQgPSBNQzEzNzgzX1JFR1VfVkNBTSwKLQkJLmluaXRfZGF0YSA9ICZjYW1fZGF0YSwKLQl9LCB7Ci0JCS5pZCA9IE1DMTM3ODNfUkVHVV9WTU1DMSwKLQkJLmluaXRfZGF0YSA9ICZzZGhjMV9kYXRhLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IG1jMTM3ODNfcGxhdGZvcm1fZGF0YSBwY20wMzhfcG1pYyA9IHsKLQkucmVndWxhdG9ycyA9IHBjbTAzOF9yZWd1bGF0b3JzLAotCS5udW1fcmVndWxhdG9ycyA9IEFSUkFZX1NJWkUocGNtMDM4X3JlZ3VsYXRvcnMpLAotCS5mbGFncyA9IE1DMTM3ODNfVVNFX0FEQyB8IE1DMTM3ODNfVVNFX1JFR1VMQVRPUiB8Ci0JCSBNQzEzNzgzX1VTRV9UT1VDSFNDUkVFTiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gcGNtMDM4X3NwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCS5tb2RhbGlhcyA9ICJtYzEzNzgzIiwKLQkJLmlycSA9IElSUV9HUElPQigyMyksCi0JCS5tYXhfc3BlZWRfaHogPSAzMDAwMDAsCi0JCS5idXNfbnVtID0gMCwKLQkJLmNoaXBfc2VsZWN0ID0gMCwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmcGNtMDM4X3BtaWMsCi0JCS5tb2RlID0gU1BJX0NTX0hJR0gsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgyX3BkYXRhID0gewotCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VMUEksCi0JLmZsYWdzCT0gTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEIHwgTVhDX0VIQ0lfSU5URVJGQUNFX0RJRkZfVU5JLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IHBjbTAzOF9pbml0KHZvaWQpCi17Ci0JbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhwY20wMzhfcGlucywgQVJSQVlfU0laRShwY20wMzhfcGlucyksCi0JCQkiUENNMDM4Iik7Ci0KLQlwY20wMzhfaW5pdF9zcmFtKCk7Ci0KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YVswXSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMSwgJnVhcnRfcGRhdGFbMV0pOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTIsICZ1YXJ0X3BkYXRhWzJdKTsKLQotCW14Y19ncGlvX21vZGUoUEUxNl9BRl9PV0lSRSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmaW14MjdfbmFuZF9kZXZpY2UsICZwY20wMzhfbmFuZF9ib2FyZF9pbmZvKTsKLQotCS8qIG9ubHkgdGhlIGkyYyBtYXN0ZXIgMSBpcyB1c2VkIG9uIHRoaXMgQ1BVIGNhcmQgKi8KLQlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBwY20wMzhfaTJjX2RldmljZXMsCi0JCQkJQVJSQVlfU0laRShwY20wMzhfaTJjX2RldmljZXMpKTsKLQotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19pMmNfZGV2aWNlMSwgJnBjbTAzOF9pMmNfMV9kYXRhKTsKLQotCS8qIFBFMTggZm9yIHVzZXItTEVEIEQ0MCAqLwotCW14Y19ncGlvX21vZGUoR1BJT19QT1JURSB8IDE4IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOwotCi0JbXhjX2dwaW9fbW9kZShHUElPX1BPUlREIHwgMjggfCBHUElPX0dQSU8gfCBHUElPX09VVCk7Ci0KLQkvKiBNQzEzNzgzIElSUSAqLwotCW14Y19ncGlvX21vZGUoR1BJT19QT1JUQiB8IDIzIHwgR1BJT19HUElPIHwgR1BJT19JTik7Ci0KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc3BpX2RldmljZTAsICZwY20wMzhfc3BpXzBfZGF0YSk7Ci0Jc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8ocGNtMDM4X3NwaV9ib2FyZF9pbmZvLAotCQkJCUFSUkFZX1NJWkUocGNtMDM4X3NwaV9ib2FyZF9pbmZvKSk7Ci0KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdXNiaDIsICZ1c2JoMl9wZGF0YSk7Ci0KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZpY2VzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldmljZXMpKTsKLQotI2lmZGVmIENPTkZJR19NQUNIX1BDTTk3MF9CQVNFQk9BUkQKLQlwY205NzBfYmFzZWJvYXJkX2luaXQoKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgcGNtMDM4X3RpbWVyX2luaXQodm9pZCkKLXsKLQlteDI3X2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgcGNtMDM4X3RpbWVyID0gewotCS5pbml0ID0gcGNtMDM4X3RpbWVyX2luaXQsCi19OwotCi1NQUNISU5FX1NUQVJUKFBDTTAzOCwgInBoeUNPUkUtaS5NWDI3IikKLQkucGh5c19pbyAgICAgICAgPSBNWDI3X0FJUElfQkFTRV9BRERSLAotCS5pb19wZ19vZmZzdCAgICA9ICgoTVgyN19BSVBJX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCi0JLmJvb3RfcGFyYW1zICAgID0gTVgyN19QSFlTX09GRlNFVCArIDB4MTAwLAotCS5tYXBfaW8gICAgICAgICA9IG14MjdfbWFwX2lvLAotCS5pbml0X2lycSAgICAgICA9IG14MjdfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZSAgID0gcGNtMDM4X2luaXQsCi0JLnRpbWVyICAgICAgICAgID0gJnBjbTAzOF90aW1lciwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9tbS1pbXgyMS5jIGIvYXJjaC9hcm0vbWFjaC1teDIvbW0taW14MjEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQxMzQzMS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9tbS1pbXgyMS5jCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtbXgyL21tLWlteDIxLmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggSnVlcmdlbiBCZWlzZXJ0IChrZXJuZWxAcGVuZ3V0cm9uaXguZGUpCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0gKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCi0gKiBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0KLS8qIE1YMjEgbWVtb3J5IG1hcCBkZWZpbml0aW9uICovCi1zdGF0aWMgc3RydWN0IG1hcF9kZXNjIGlteDIxX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewotCS8qCi0JICogdGhpcyBmaXhlZCBtYXBwaW5nIGNvdmVyczoKLQkgKiAtIEFJUEkxCi0JICogLSBBSVBJMgotCSAqIC0gQUlUQwotCSAqIC0gUk9NIFBhdGNoCi0JICogLSBhbmQgc29tZSByZXNlcnZlZCBzcGFjZQotCSAqLwotCXsKLQkJLnZpcnR1YWwgPSBNWDIxX0FJUElfQkFTRV9BRERSX1ZJUlQsCi0JCS5wZm4gPSBfX3BoeXNfdG9fcGZuKE1YMjFfQUlQSV9CQVNFX0FERFIpLAotCQkubGVuZ3RoID0gTVgyMV9BSVBJX1NJWkUsCi0JCS50eXBlID0gTVRfREVWSUNFCi0JfSwKLQkvKgotCSAqIHRoaXMgZml4ZWQgbWFwcGluZyBjb3ZlcnM6Ci0JICogLSBDU0kKLQkgKiAtIEFUQQotCSAqLwotCXsKLQkJLnZpcnR1YWwgPSBNWDIxX1NBSEIxX0JBU0VfQUREUl9WSVJULAotCQkucGZuID0gX19waHlzX3RvX3BmbihNWDIxX1NBSEIxX0JBU0VfQUREUiksCi0JCS5sZW5ndGggPSBNWDIxX1NBSEIxX1NJWkUsCi0JCS50eXBlID0gTVRfREVWSUNFCi0JfSwKLQkvKgotCSAqIHRoaXMgZml4ZWQgbWFwcGluZyBjb3ZlcnM6Ci0JICogLSBFTUkKLQkgKi8KLQl7Ci0JCS52aXJ0dWFsID0gTVgyMV9YX01FTUNfQkFTRV9BRERSX1ZJUlQsCi0JCS5wZm4gPSBfX3BoeXNfdG9fcGZuKE1YMjFfWF9NRU1DX0JBU0VfQUREUiksCi0JCS5sZW5ndGggPSBNWDIxX1hfTUVNQ19TSVpFLAotCQkudHlwZSA9IE1UX0RFVklDRQotCX0sCi19OwotCi0vKgotICogSW5pdGlhbGl6ZSB0aGUgbWVtb3J5IG1hcC4gSXQgaXMgY2FsbGVkIGR1cmluZyB0aGUKLSAqIHN5c3RlbSBzdGFydHVwIHRvIGNyZWF0ZSBzdGF0aWMgcGh5c2ljYWwgdG8gdmlydHVhbAotICogbWVtb3J5IG1hcCBmb3IgdGhlIElPIG1vZHVsZXMuCi0gKi8KLXZvaWQgX19pbml0IG14MjFfbWFwX2lvKHZvaWQpCi17Ci0JbXhjX3NldF9jcHVfdHlwZShNWENfQ1BVX01YMjEpOwotCW14Y19hcmNoX3Jlc2V0X2luaXQoTVgyMV9JT19BRERSRVNTKE1YMjFfV0RPR19CQVNFX0FERFIpKTsKLQotCWlvdGFibGVfaW5pdChpbXgyMV9pb19kZXNjLCBBUlJBWV9TSVpFKGlteDIxX2lvX2Rlc2MpKTsKLX0KLQotdm9pZCBfX2luaXQgbXgyMV9pbml0X2lycSh2b2lkKQotewotCW14Y19pbml0X2lycShNWDIxX0lPX0FERFJFU1MoTVgyMV9BVklDX0JBU0VfQUREUikpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvbW0taW14MjcuYyBiL2FyY2gvYXJtL21hY2gtbXgyL21tLWlteDI3LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNjZlZDQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvbW0taW14MjcuYworKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLW14Mi9tbS1pbXgyNy5jCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEp1ZXJnZW4gQmVpc2VydCAoa2VybmVsQHBlbmd1dHJvbml4LmRlKQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgotICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAotICogTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotCi0vKiBNWDI3IG1lbW9yeSBtYXAgZGVmaW5pdGlvbiAqLwotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBpbXgyN19pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKLQkvKgotCSAqIHRoaXMgZml4ZWQgbWFwcGluZyBjb3ZlcnM6Ci0JICogLSBBSVBJMQotCSAqIC0gQUlQSTIKLQkgKiAtIEFJVEMKLQkgKiAtIFJPTSBQYXRjaAotCSAqIC0gYW5kIHNvbWUgcmVzZXJ2ZWQgc3BhY2UKLQkgKi8KLQl7Ci0JCS52aXJ0dWFsID0gTVgyN19BSVBJX0JBU0VfQUREUl9WSVJULAotCQkucGZuID0gX19waHlzX3RvX3BmbihNWDI3X0FJUElfQkFTRV9BRERSKSwKLQkJLmxlbmd0aCA9IE1YMjdfQUlQSV9TSVpFLAotCQkudHlwZSA9IE1UX0RFVklDRQotCX0sCi0JLyoKLQkgKiB0aGlzIGZpeGVkIG1hcHBpbmcgY292ZXJzOgotCSAqIC0gQ1NJCi0JICogLSBBVEEKLQkgKi8KLQl7Ci0JCS52aXJ0dWFsID0gTVgyN19TQUhCMV9CQVNFX0FERFJfVklSVCwKLQkJLnBmbiA9IF9fcGh5c190b19wZm4oTVgyN19TQUhCMV9CQVNFX0FERFIpLAotCQkubGVuZ3RoID0gTVgyN19TQUhCMV9TSVpFLAotCQkudHlwZSA9IE1UX0RFVklDRQotCX0sCi0JLyoKLQkgKiB0aGlzIGZpeGVkIG1hcHBpbmcgY292ZXJzOgotCSAqIC0gRU1JCi0JICovCi0JewotCQkudmlydHVhbCA9IE1YMjdfWF9NRU1DX0JBU0VfQUREUl9WSVJULAotCQkucGZuID0gX19waHlzX3RvX3BmbihNWDI3X1hfTUVNQ19CQVNFX0FERFIpLAotCQkubGVuZ3RoID0gTVgyN19YX01FTUNfU0laRSwKLQkJLnR5cGUgPSBNVF9ERVZJQ0UKLQl9LAotfTsKLQotLyoKLSAqIEluaXRpYWxpemUgdGhlIG1lbW9yeSBtYXAuIEl0IGlzIGNhbGxlZCBkdXJpbmcgdGhlCi0gKiBzeXN0ZW0gc3RhcnR1cCB0byBjcmVhdGUgc3RhdGljIHBoeXNpY2FsIHRvIHZpcnR1YWwKLSAqIG1lbW9yeSBtYXAgZm9yIHRoZSBJTyBtb2R1bGVzLgotICovCi12b2lkIF9faW5pdCBteDI3X21hcF9pbyh2b2lkKQotewotCW14Y19zZXRfY3B1X3R5cGUoTVhDX0NQVV9NWDI3KTsKLQlteGNfYXJjaF9yZXNldF9pbml0KE1YMjdfSU9fQUREUkVTUyhNWDI3X1dET0dfQkFTRV9BRERSKSk7Ci0KLQlpb3RhYmxlX2luaXQoaW14MjdfaW9fZGVzYywgQVJSQVlfU0laRShpbXgyN19pb19kZXNjKSk7Ci19Ci0KLXZvaWQgX19pbml0IG14MjdfaW5pdF9pcnEodm9pZCkKLXsKLQlteGNfaW5pdF9pcnEoTVgyN19JT19BRERSRVNTKE1YMjdfQVZJQ19CQVNFX0FERFIpKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL3NlcmlhbC5jIGIvYXJjaC9hcm0vbWFjaC1teDIvc2VyaWFsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjMGM4MzUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvc2VyaWFsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA2LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAyMDA4IEp1ZXJnZW4gQmVpc2VydCwga2VybmVsQHBlbmd1dHJvbml4LmRlCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0gKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCi0gKiBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+Ci0jaW5jbHVkZSAiZGV2aWNlcy5oIgotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQwW10gPSB7Ci0JewotCQkuc3RhcnQgPSBNWDJ4X1VBUlQxX0JBU0VfQUREUiwKLQkJLmVuZCA9IE1YMnhfVUFSVDFfQkFTRV9BRERSICsgMHgwQjUsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ID0gTVgyeF9JTlRfVUFSVDEsCi0JCS5lbmQgPSBNWDJ4X0lOVF9VQVJUMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlMCA9IHsKLQkubmFtZSA9ICJpbXgtdWFydCIsCi0JLmlkID0gMCwKLQkucmVzb3VyY2UgPSB1YXJ0MCwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodWFydDApLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MVtdID0gewotCXsKLQkJLnN0YXJ0ID0gTVgyeF9VQVJUMl9CQVNFX0FERFIsCi0JCS5lbmQgPSBNWDJ4X1VBUlQyX0JBU0VfQUREUiArIDB4MEI1LAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydCA9IE1YMnhfSU5UX1VBUlQyLAotCQkuZW5kID0gTVgyeF9JTlRfVUFSVDIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTEgPSB7Ci0JLm5hbWUgPSAiaW14LXVhcnQiLAotCS5pZCA9IDEsCi0JLnJlc291cmNlID0gdWFydDEsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHVhcnQxKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDJbXSA9IHsKLQl7Ci0JCS5zdGFydCA9IE1YMnhfVUFSVDNfQkFTRV9BRERSLAotCQkuZW5kID0gTVgyeF9VQVJUM19CQVNFX0FERFIgKyAweDBCNSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQgPSBNWDJ4X0lOVF9VQVJUMywKLQkJLmVuZCA9IE1YMnhfSU5UX1VBUlQzLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2UyID0gewotCS5uYW1lID0gImlteC11YXJ0IiwKLQkuaWQgPSAyLAotCS5yZXNvdXJjZSA9IHVhcnQyLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh1YXJ0MiksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQzW10gPSB7Ci0JewotCQkuc3RhcnQgPSBNWDJ4X1VBUlQ0X0JBU0VfQUREUiwKLQkJLmVuZCA9IE1YMnhfVUFSVDRfQkFTRV9BRERSICsgMHgwQjUsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ID0gTVgyeF9JTlRfVUFSVDQsCi0JCS5lbmQgPSBNWDJ4X0lOVF9VQVJUNCwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlMyA9IHsKLQkubmFtZSA9ICJpbXgtdWFydCIsCi0JLmlkID0gMywKLQkucmVzb3VyY2UgPSB1YXJ0MywKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodWFydDMpLAotfTsKLQotI2lmZGVmIENPTkZJR19NQUNIX01YMjcKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDRbXSA9IHsKLQl7Ci0JCS5zdGFydCA9IE1YMjdfVUFSVDVfQkFTRV9BRERSLAotCQkuZW5kID0gTVgyN19VQVJUNV9CQVNFX0FERFIgKyAweDBCNSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQgPSBNWDI3X0lOVF9VQVJUNSwKLQkJLmVuZCA9IE1YMjdfSU5UX1VBUlQ1LAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2U0ID0gewotCS5uYW1lID0gImlteC11YXJ0IiwKLQkuaWQgPSA0LAotCS5yZXNvdXJjZSA9IHVhcnQ0LAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh1YXJ0NCksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQ1W10gPSB7Ci0JewotCQkuc3RhcnQgPSBNWDI3X1VBUlQ2X0JBU0VfQUREUiwKLQkJLmVuZCA9IE1YMjdfVUFSVDZfQkFTRV9BRERSICsgMHgwQjUsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ID0gTVgyN19JTlRfVUFSVDYsCi0JCS5lbmQgPSBNWDI3X0lOVF9VQVJUNiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlNSA9IHsKLQkubmFtZSA9ICJpbXgtdWFydCIsCi0JLmlkID0gNSwKLQkucmVzb3VyY2UgPSB1YXJ0NSwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodWFydDUpLAotfTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW14MjUvS2NvbmZpZwppbmRleCA1NGQyMTczLi5jNzFhN2JjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MjUvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW14MjUvS2NvbmZpZwpAQCAtNCw1ICs0LDI4IEBACiAKIGNvbmZpZyBNQUNIX01YMjVfM0RTCiAJYm9vbCAiU3VwcG9ydCBNWDI1UERLICgzRFMpIFBsYXRmb3JtIgorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfVUFSVAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfTkFORAorCitjb25maWcgTUFDSF9FVUtSRUFfQ1BVSU1YMjUKKwlib29sICJTdXBwb3J0IEV1a3JlYSBDUFVJTVgyNSBQbGF0Zm9ybSIKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX0kyQworCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfVUFSVAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfTkFORAorCXNlbGVjdCBNWENfVUxQSSBpZiBVU0JfVUxQSQorCitjaG9pY2UKKwlwcm9tcHQgIkJhc2Vib2FyZCIKKwlkZXBlbmRzIG9uIE1BQ0hfRVVLUkVBX0NQVUlNWDI1CisJZGVmYXVsdCBNQUNIX0VVS1JFQV9NQklNWFNEMjVfQkFTRUJPQVJECisKK2NvbmZpZyBNQUNIX0VVS1JFQV9NQklNWFNEMjVfQkFTRUJPQVJECisJcHJvbXB0ICJFdWtyZWEgTUJJTVhTRCBkZXZlbG9wbWVudCBib2FyZCIKKwlib29sCisJaGVscAorCSAgVGhpcyBhZGRzIGJvYXJkIHNwZWNpZmljIGRldmljZXMgdGhhdCBjYW4gYmUgZm91bmQgb24gRXVrcmVhJ3MKKwkgIE1CSU1YU0QgZXZhbHVhdGlvbiBib2FyZC4KKworZW5kY2hvaWNlCiAKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MjUvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW14MjUvTWFrZWZpbGUKaW5kZXggMTBjZWJjNS4uZDllNDZjZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDI1L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyNS9NYWtlZmlsZQpAQCAtMSwzICsxLDUgQEAKIG9iai15CQkJCTo9IG1tLm8gZGV2aWNlcy5vCiBvYmotJChDT05GSUdfQVJDSF9NWDI1KQkJKz0gY2xvY2subwotb2JqLSQoQ09ORklHX01BQ0hfTVgyNV8zRFMpCSs9IG1hY2gtbXgyNXBkay5vCitvYmotJChDT05GSUdfTUFDSF9NWDI1XzNEUykJKz0gbWFjaC1teDI1XzNkcy5vCitvYmotJChDT05GSUdfTUFDSF9FVUtSRUFfQ1BVSU1YMjUpCQkrPSBtYWNoLWNwdWlteDI1Lm8KK29iai0kKENPTkZJR19NQUNIX0VVS1JFQV9NQklNWFNEMjVfQkFTRUJPQVJEKQkrPSBldWtyZWFfbWJpbXhzZC1iYXNlYm9hcmQubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW14MjUvY2xvY2suYwppbmRleCAxNTUwMTQ5Li40MGM3Y2M0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MjUvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLW14MjUvY2xvY2suYwpAQCAtMTA5LDYgKzEwOSwxNiBAQAogCXJldHVybiBnZXRfcmF0ZV9wZXIoMTUpOwogfQogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9zc2kyKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gZ2V0X3JhdGVfcGVyKDE0KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfc3NpMShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGdldF9yYXRlX3BlcigxMyk7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2kyYyhzdHJ1Y3QgY2xrICpjbGspCiB7CiAJcmV0dXJuIGdldF9yYXRlX3Blcig2KTsKQEAgLTEyOSw5ICsxMzksMTcgQEAKIAlyZXR1cm4gZ2V0X3JhdGVfcGVyKDcpOwogfQogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9jc2koc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBnZXRfcmF0ZV9wZXIoMCk7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX290ZyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JcmV0dXJuIDQ4MDAwMDAwOyAvKiBGSVhNRSAqLworCXVuc2lnbmVkIGxvbmcgY2N0bCA9IHJlYWRsKENSTV9CQVNFICsgQ0NNX0NDVEwpOworCXVuc2lnbmVkIGxvbmcgcmF0ZSA9IGdldF9yYXRlX3VwbGwoKTsKKworCXJldHVybiAoY2N0bCAmICgxIDw8IDIzKSkgPyAwIDogcmF0ZSAvICgoMHgzRiAmIChjY3RsID4+IDE2KSkgKyAxKTsKIH0KIAogc3RhdGljIGludCBjbGtfY2djcl9lbmFibGUoc3RydWN0IGNsayAqY2xrKQpAQCAtMTY2LDE0ICsxODQsNDAgQEAKIAkJLnNlY29uZGFyeQk9IHMsCQkJXAogCX0KIAorLyoKKyAqIE5vdGU6IHRoZSBmb2xsb3dpbmcgSVBHIGNsb2NrIGdhdGluZyBiaXRzIGFyZSB3cm9uZ2x5IG1hcmtlZCAiUmVzZXJ2ZWQiIGluCisgKiB0aGUgaS5NWDI1IFJlZmVyZW5jZSBNYW51YWwgUmV2IDEsIHRhYmxlIDE1LTEzLiBUaGUgaW5mb3JtYXRpb24gYmVsb3cgaXMKKyAqIHRha2VuIGZyb20gdGhlIEZyZWVzY2FsZSByZWxlYXNlZCBCU1AuCisgKgorICogYml0CXJlZwlvZmZzZXQJY2xvY2sKKyAqCisgKiAwCUNHQ1IxCTAJQVVETVVYCisgKiAxMglDR0NSMQkxMglFU0FJCisgKiAxNglDR0NSMQkxNglHUElPMQorICogMTcJQ0dDUjEJMTcJR1BJTzIKKyAqIDE4CUNHQ1IxCTE4CUdQSU8zCisgKiAyMwlDR0NSMQkyMwlJMkMxCisgKiAyNAlDR0NSMQkyNAlJMkMyCisgKiAyNQlDR0NSMQkyNQlJMkMzCisgKiAyNwlDR0NSMQkyNwlJT01VWEMKKyAqIDI4CUNHQ1IxCTI4CUtQUAorICogMzAJQ0dDUjEJMzAJT1dJUkUKKyAqIDM2CUNHQ1IyCTQJUlRJQworICogNTEJQ0dDUjIJMTkJV0RPRworICovCisKIERFRklORV9DTE9DSyhncHRfY2xrLCAgICAwLCBDQ01fQ0dDUjAsICA1LCBnZXRfcmF0ZV9ncHQsIE5VTEwsIE5VTEwpOwogREVGSU5FX0NMT0NLKHVhcnRfcGVyX2NsaywgMCwgQ0NNX0NHQ1IwLCAxNSwgZ2V0X3JhdGVfdWFydCwgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0soc3NpMV9wZXJfY2xrLCAwLCBDQ01fQ0dDUjAsIDEzLCBnZXRfcmF0ZV9pcGcsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKHNzaTJfcGVyX2NsaywgMCwgQ0NNX0NHQ1IwLCAxNCwgZ2V0X3JhdGVfaXBnLCBOVUxMLCBOVUxMKTsKIERFRklORV9DTE9DSyhjc3BpMV9jbGssICAwLCBDQ01fQ0dDUjEsICA1LCBnZXRfcmF0ZV9pcGcsIE5VTEwsIE5VTEwpOwogREVGSU5FX0NMT0NLKGNzcGkyX2NsaywgIDAsIENDTV9DR0NSMSwgIDYsIGdldF9yYXRlX2lwZywgTlVMTCwgTlVMTCk7CiBERUZJTkVfQ0xPQ0soY3NwaTNfY2xrLCAgMCwgQ0NNX0NHQ1IxLCAgNywgZ2V0X3JhdGVfaXBnLCBOVUxMLCBOVUxMKTsKIERFRklORV9DTE9DSyhmZWNfYWhiX2NsaywgMCwgQ0NNX0NHQ1IwLCAyMywgTlVMTCwJIE5VTEwsIE5VTEwpOwogREVGSU5FX0NMT0NLKGxjZGNfYWhiX2NsaywgMCwgQ0NNX0NHQ1IwLCAyNCwgTlVMTCwJIE5VTEwsIE5VTEwpOwogREVGSU5FX0NMT0NLKGxjZGNfcGVyX2NsaywgMCwgQ0NNX0NHQ1IwLCAgNywgTlVMTCwJIE5VTEwsICZsY2RjX2FoYl9jbGspOworREVGSU5FX0NMT0NLKGNzaV9haGJfY2xrLCAwLCBDQ01fQ0dDUjAsIDE4LCBnZXRfcmF0ZV9jc2ksIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGNzaV9wZXJfY2xrLCAwLCBDQ01fQ0dDUjAsIDAsIGdldF9yYXRlX2NzaSwgTlVMTCwgJmNzaV9haGJfY2xrKTsKIERFRklORV9DTE9DSyh1YXJ0MV9jbGssICAwLCBDQ01fQ0dDUjIsIDE0LCBnZXRfcmF0ZV91YXJ0LCBOVUxMLCAmdWFydF9wZXJfY2xrKTsKIERFRklORV9DTE9DSyh1YXJ0Ml9jbGssICAwLCBDQ01fQ0dDUjIsIDE1LCBnZXRfcmF0ZV91YXJ0LCBOVUxMLCAmdWFydF9wZXJfY2xrKTsKIERFRklORV9DTE9DSyh1YXJ0M19jbGssICAwLCBDQ01fQ0dDUjIsIDE2LCBnZXRfcmF0ZV91YXJ0LCBOVUxMLCAmdWFydF9wZXJfY2xrKTsKQEAgLTE5MSw2ICsyMzUsMTMgQEAKIERFRklORV9DTE9DSyhmZWNfY2xrLAkgMCwgQ0NNX0NHQ1IxLCAxNSwgZ2V0X3JhdGVfaXBnLCBOVUxMLCAmZmVjX2FoYl9jbGspOwogREVGSU5FX0NMT0NLKGRyeWljZV9jbGssIDAsIENDTV9DR0NSMSwgIDgsIGdldF9yYXRlX2lwZywgTlVMTCwgTlVMTCk7CiBERUZJTkVfQ0xPQ0sobGNkY19jbGssCSAwLCBDQ01fQ0dDUjEsIDI5LCBnZXRfcmF0ZV9sY2RjLCBOVUxMLCAmbGNkY19wZXJfY2xrKTsKK0RFRklORV9DTE9DSyh3ZHRfY2xrLCAgICAwLCBDQ01fQ0dDUjIsIDE5LCBnZXRfcmF0ZV9pcGcsIE5VTEwsICBOVUxMKTsKK0RFRklORV9DTE9DSyhzc2kxX2NsaywgIDAsIENDTV9DR0NSMiwgMTEsIGdldF9yYXRlX3NzaTEsIE5VTEwsICZzc2kxX3Blcl9jbGspOworREVGSU5FX0NMT0NLKHNzaTJfY2xrLCAgMSwgQ0NNX0NHQ1IyLCAxMiwgZ2V0X3JhdGVfc3NpMiwgTlVMTCwgJnNzaTJfcGVyX2Nsayk7CitERUZJTkVfQ0xPQ0soYXVkbXV4X2NsaywgMCwgQ0NNX0NHQ1IxLCAwLCBOVUxMLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhjc2lfY2xrLCAgICAwLCBDQ01fQ0dDUjEsICA0LCBnZXRfcmF0ZV9jc2ksIE5VTEwsICAmY3NpX3Blcl9jbGspOworREVGSU5FX0NMT0NLKGNhbjFfY2xrLAkgMCwgQ0NNX0NHQ1IxLCAgMiwgZ2V0X3JhdGVfaXBnLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhjYW4yX2NsaywJIDAsIENDTV9DR0NSMSwgIDMsIGdldF9yYXRlX2lwZywgTlVMTCwgTlVMTCk7CiAKICNkZWZpbmUgX1JFR0lTVEVSX0NMT0NLKGQsIG4sIGMpCVwKIAl7CQkJCVwKQEAgLTIxNyw3ICsyNjgsNyBAQAogCV9SRUdJU1RFUl9DTE9DSygibXhjX3B3bS4xIiwgTlVMTCwgcHdtMl9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJteGNfcHdtLjIiLCBOVUxMLCBwd20zX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soIm14Y19wd20uMyIsIE5VTEwsIHB3bTRfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygibXhjLWtleXBhZCIsIE5VTEwsIGtwcF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgta2V5cGFkIiwgTlVMTCwga3BwX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soIm14MjUtYWRjIiwgTlVMTCwgdHNjX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMCIsIE5VTEwsIGkyY19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjEiLCBOVUxMLCBpMmNfY2xrKQpAQCAtMjI1LDYgKzI3NiwxMyBAQAogCV9SRUdJU1RFUl9DTE9DSygiZmVjLjAiLCBOVUxMLCBmZWNfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiaW14ZGlfcnRjLjAiLCBOVUxMLCBkcnlpY2VfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiaW14LWZiLjAiLCBOVUxMLCBsY2RjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC13ZHQuMCIsIE5VTEwsIHdkdF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtc3NpLjAiLCBOVUxMLCBzc2kxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1zc2kuMSIsIE5VTEwsIHNzaTJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXgyLWNhbWVyYS4wIiwgTlVMTCwgY3NpX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImF1ZG11eCIsIGF1ZG11eF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJmbGV4Y2FuLjAiLCBOVUxMLCBjYW4xX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImZsZXhjYW4uMSIsIE5VTEwsIGNhbjJfY2xrKQogfTsKIAogaW50IF9faW5pdCBteDI1X2Nsb2Nrc19pbml0KHZvaWQpCkBAIC0yMzgsOSArMjk2LDEzIEBACiAJX19yYXdfd3JpdGVsKCgxIDw8IDE5KSwgQ1JNX0JBU0UgKyBDQ01fQ0dDUjApOwogCV9fcmF3X3dyaXRlbCgoMHhmIDw8IDE2KSB8ICgzIDw8IDI2KSwgQ1JNX0JBU0UgKyBDQ01fQ0dDUjEpOwogCV9fcmF3X3dyaXRlbCgoMSA8PCA1KSwgQ1JNX0JBU0UgKyBDQ01fQ0dDUjIpOworI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0xMKSAmJiAhZGVmaW5lZChDT05GSUdfREVCVUdfSUNFRENDKQorCWNsa19lbmFibGUoJnVhcnQxX2Nsayk7CisjZW5kaWYKIAotCS8qIENsb2NrIHNvdXJjZSBmb3IgbGNkYyBpcyB1cGxsICovCi0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKENSTV9CQVNFKzB4NjQpIHwgKDEgPDwgNyksIENSTV9CQVNFICsgMHg2NCk7CisJLyogQ2xvY2sgc291cmNlIGZvciBsY2RjIGFuZCBjc2kgaXMgdXBsbCAqLworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChDUk1fQkFTRSsweDY0KSB8ICgxIDw8IDcpIHwgKDEgPDwgMCksCisJCQlDUk1fQkFTRSArIDB4NjQpOwogCiAJbXhjX3RpbWVyX2luaXQoJmdwdF9jbGssIE1YMjVfSU9fQUREUkVTUyhNWDI1X0dQVDFfQkFTRV9BRERSKSwgNTQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy1pbXgyNS5oIGIvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMtaW14MjUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODZhN2MzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMtaW14MjUuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFBlbmd1dHJvbml4CisgKiBVd2UgS2xlaW5lLUtvZW5pZyA8dS5rbGVpbmUta29lbmlnQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxtYWNoL214MjUuaD4KKyNpbmNsdWRlIDxtYWNoL2RldmljZXMtY29tbW9uLmg+CisKKyNkZWZpbmUgaW14MjVfYWRkX2ZsZXhjYW4wKHBkYXRhKQlcCisJaW14X2FkZF9mbGV4Y2FuKDAsIE1YMjVfQ0FOMV9CQVNFX0FERFIsIFNaXzE2SywgTVgyNV9JTlRfQ0FOMSwgcGRhdGEpCisjZGVmaW5lIGlteDI1X2FkZF9mbGV4Y2FuMShwZGF0YSkJXAorCWlteF9hZGRfZmxleGNhbigxLCBNWDI1X0NBTjJfQkFTRV9BRERSLCBTWl8xNkssIE1YMjVfSU5UX0NBTjIsIHBkYXRhKQorCisjZGVmaW5lIGlteDI1X2FkZF9pbXhfaTJjMChwZGF0YSkJXAorCWlteF9hZGRfaW14X2kyYygwLCBNWDI1X0kyQzFfQkFTRV9BRERSLCBTWl8xNkssIE1YMjVfSU5UX0kyQzEsIHBkYXRhKQorI2RlZmluZSBpbXgyNV9hZGRfaW14X2kyYzEocGRhdGEpCVwKKwlpbXhfYWRkX2lteF9pMmMoMSwgTVgyNV9JMkMyX0JBU0VfQUREUiwgU1pfMTZLLCBNWDI1X0lOVF9JMkMyLCBwZGF0YSkKKyNkZWZpbmUgaW14MjVfYWRkX2lteF9pMmMyKHBkYXRhKQlcCisJaW14X2FkZF9pbXhfaTJjKDIsIE1YMjVfSTJDM19CQVNFX0FERFIsIFNaXzE2SywgTVgyNV9JTlRfSTJDMywgcGRhdGEpCisKKyNkZWZpbmUgaW14MjVfYWRkX2lteF91YXJ0MChwZGF0YSkJXAorCWlteF9hZGRfaW14X3VhcnRfMWlycSgwLCBNWDI1X1VBUlQxX0JBU0VfQUREUiwgU1pfMTZLLCBNWDI1X0lOVF9VQVJUMSwgcGRhdGEpCisjZGVmaW5lIGlteDI1X2FkZF9pbXhfdWFydDEocGRhdGEpCVwKKwlpbXhfYWRkX2lteF91YXJ0XzFpcnEoMSwgTVgyNV9VQVJUMl9CQVNFX0FERFIsIFNaXzE2SywgTVgyNV9JTlRfVUFSVDIsIHBkYXRhKQorI2RlZmluZSBpbXgyNV9hZGRfaW14X3VhcnQyKHBkYXRhKQlcCisJaW14X2FkZF9pbXhfdWFydF8xaXJxKDIsIE1YMjVfVUFSVDNfQkFTRV9BRERSLCBTWl8xNkssIE1YMjVfSU5UX1VBUlQzLCBwZGF0YSkKKyNkZWZpbmUgaW14MjVfYWRkX2lteF91YXJ0MyhwZGF0YSkJXAorCWlteF9hZGRfaW14X3VhcnRfMWlycSgzLCBNWDI1X1VBUlQ0X0JBU0VfQUREUiwgU1pfMTZLLCBNWDI1X0lOVF9VQVJUNCwgcGRhdGEpCisjZGVmaW5lIGlteDI1X2FkZF9pbXhfdWFydDQocGRhdGEpCVwKKwlpbXhfYWRkX2lteF91YXJ0XzFpcnEoNCwgTVgyNV9VQVJUNV9CQVNFX0FERFIsIFNaXzE2SywgTVgyNV9JTlRfVUFSVDUsIHBkYXRhKQorCisjZGVmaW5lIGlteDI1X2FkZF9teGNfbmFuZChwZGF0YSkJXAorCWlteF9hZGRfbXhjX25hbmRfdjIxKE1YMjVfTkZDX0JBU0VfQUREUiwgTVgyNV9JTlRfTkFOREZDLCBwZGF0YSkKKworI2RlZmluZSBpbXgyNV9hZGRfc3BpX2lteDAocGRhdGEpCVwKKwlpbXhfYWRkX3NwaV9pbXgoMCwgTVgyNV9DU1BJMV9CQVNFX0FERFIsIFNaXzE2SywgTVgyNV9JTlRfQ1NQSTEsIHBkYXRhKQorI2RlZmluZSBpbXgyNV9hZGRfc3BpX2lteDEocGRhdGEpCVwKKwlpbXhfYWRkX3NwaV9pbXgoMSwgTVgyNV9DU1BJMl9CQVNFX0FERFIsIFNaXzE2SywgTVgyNV9JTlRfQ1NQSTIsIHBkYXRhKQorI2RlZmluZSBpbXgyNV9hZGRfc3BpX2lteDIocGRhdGEpCVwKKwlpbXhfYWRkX3NwaV9pbXgoMiwgTVgyNV9DU1BJM19CQVNFX0FERFIsIFNaXzE2SywgTVgyNV9JTlRfQ1NQSTMsIHBkYXRhKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmMKaW5kZXggM2E0MDVmYS4uMzQ2OGViMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy5jCkBAIC0yMiwxMDMgKzIyLDYgQEAKICNpbmNsdWRlIDxtYWNoL214MjUuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MFtdID0gewotCXsKLQkJLnN0YXJ0ID0gMHg0M2Y5MDAwMCwKLQkJLmVuZCA9IDB4NDNmOTNmZmYsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ID0gNDUsCi0JCS5lbmQgPSA0NSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlMCA9IHsKLQkubmFtZSA9ICJpbXgtdWFydCIsCi0JLmlkID0gMCwKLQkucmVzb3VyY2UgPSB1YXJ0MCwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodWFydDApLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MVtdID0gewotCXsKLQkJLnN0YXJ0ID0gMHg0M2Y5NDAwMCwKLQkJLmVuZCA9IDB4NDNmOTdmZmYsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ID0gMzIsCi0JCS5lbmQgPSAzMiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlMSA9IHsKLQkubmFtZSA9ICJpbXgtdWFydCIsCi0JLmlkID0gMSwKLQkucmVzb3VyY2UgPSB1YXJ0MSwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodWFydDEpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MltdID0gewotCXsKLQkJLnN0YXJ0ID0gMHg1MDAwYzAwMCwKLQkJLmVuZCA9IDB4NTAwMGZmZmYsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ID0gMTgsCi0JCS5lbmQgPSAxOCwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlMiA9IHsKLQkubmFtZSA9ICJpbXgtdWFydCIsCi0JLmlkID0gMiwKLQkucmVzb3VyY2UgPSB1YXJ0MiwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodWFydDIpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0M1tdID0gewotCXsKLQkJLnN0YXJ0ID0gMHg1MDAwODAwMCwKLQkJLmVuZCA9IDB4NTAwMGJmZmYsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ID0gNSwKLQkJLmVuZCA9IDUsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTMgPSB7Ci0JLm5hbWUgPSAiaW14LXVhcnQiLAotCS5pZCA9IDMsCi0JLnJlc291cmNlID0gdWFydDMsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHVhcnQzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDRbXSA9IHsKLQl7Ci0JCS5zdGFydCA9IDB4NTAwMmMwMDAsCi0JCS5lbmQgPSAweDUwMDJmZmZmLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydCA9IDQwLAotCQkuZW5kID0gNDAsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTQgPSB7Ci0JLm5hbWUgPSAiaW14LXVhcnQiLAotCS5pZCA9IDQsCi0JLnJlc291cmNlID0gdWFydDQsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHVhcnQ0KSwKLX07Ci0KLSNkZWZpbmUgTVgyNV9PVEdfQkFTRV9BRERSIDB4NTNGRjQwMDAKLQogc3RhdGljIHU2NCBvdGdfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX290Z19yZXNvdXJjZXNbXSA9IHsKQEAgLTE4MSw2MyArODQsNiBAQAogCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfdXNiaDJfcmVzb3VyY2VzKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3NwaV9yZXNvdXJjZXMwW10gPSB7Ci0JewotCSAgICAgICAuc3RhcnQgPSAweDQzZmE0MDAwLAotCSAgICAgICAuZW5kID0gMHg0M2ZhN2ZmZiwKLQkgICAgICAgLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCSAgICAgICAuc3RhcnQgPSAxNCwKLQkgICAgICAgLmVuZCA9IDE0LAotCSAgICAgICAuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTAgPSB7Ci0JLm5hbWUgPSAic3BpX2lteCIsCi0JLmlkID0gMCwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3NwaV9yZXNvdXJjZXMwKSwKLQkucmVzb3VyY2UgPSBteGNfc3BpX3Jlc291cmNlczAsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zcGlfcmVzb3VyY2VzMVtdID0gewotCXsKLQkgICAgICAgLnN0YXJ0ID0gMHg1MDAxMDAwMCwKLQkgICAgICAgLmVuZCA9IDB4NTAwMTNmZmYsCi0JICAgICAgIC5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkgICAgICAgLnN0YXJ0ID0gMTMsCi0JICAgICAgIC5lbmQgPSAxMywKLQkgICAgICAgLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3NwaV9kZXZpY2UxID0gewotCS5uYW1lID0gInNwaV9pbXgiLAotCS5pZCA9IDEsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19zcGlfcmVzb3VyY2VzMSksCi0JLnJlc291cmNlID0gbXhjX3NwaV9yZXNvdXJjZXMxLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfc3BpX3Jlc291cmNlczJbXSA9IHsKLQl7Ci0JICAgICAgIC5zdGFydCA9IDB4NTAwMDQwMDAsCi0JICAgICAgIC5lbmQgPSAweDUwMDA3ZmZmLAotCSAgICAgICAuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JICAgICAgIC5zdGFydCA9IDAsCi0JICAgICAgIC5lbmQgPSAwLAotCSAgICAgICAuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTIgPSB7Ci0JLm5hbWUgPSAic3BpX2lteCIsCi0JLmlkID0gMiwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3NwaV9yZXNvdXJjZXMyKSwKLQkucmVzb3VyY2UgPSBteGNfc3BpX3Jlc291cmNlczIsCi19OwotCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19wd21fcmVzb3VyY2VzMFtdID0gewogCXsKIAkJLnN0YXJ0CT0gMHg1M2ZlMDAwMCwKQEAgLTMzMyw2MyArMTc5LDYgQEAKIAkucmVzb3VyY2UgPSBteGNfcHdtX3Jlc291cmNlczMsCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19pMmNfMV9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IDB4NDNmODAwMDAsCi0JCS5lbmQJPSAweDQzZjgzZmZmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydAk9IDMsCi0JCS5lbmQJPSAzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9Ci19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19pMmNfZGV2aWNlMCA9IHsKLQkubmFtZSA9ICJpbXgtaTJjIiwKLQkuaWQgPSAwLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfaTJjXzFfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBteGNfaTJjXzFfcmVzb3VyY2VzLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfaTJjXzJfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSAweDQzZjk4MDAwLAotCQkuZW5kCT0gMHg0M2Y5YmZmZiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQJPSA0LAotCQkuZW5kCT0gNCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfQotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTEgPSB7Ci0JLm5hbWUgPSAiaW14LWkyYyIsCi0JLmlkID0gMSwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX2kyY18yX3Jlc291cmNlcyksCi0JLnJlc291cmNlID0gbXhjX2kyY18yX3Jlc291cmNlcywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX2kyY18zX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gMHg0M2Y4NDAwMCwKLQkJLmVuZAk9IDB4NDNmODdmZmYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0CT0gMTAsCi0JCS5lbmQJPSAxMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfQotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTIgPSB7Ci0JLm5hbWUgPSAiaW14LWkyYyIsCi0JLmlkID0gMiwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX2kyY18zX3Jlc291cmNlcyksCi0JLnJlc291cmNlID0gbXhjX2kyY18zX3Jlc291cmNlcywKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgbXhjX2dwaW9fcG9ydCBpbXhfZ3Bpb19wb3J0c1tdID0gewogCXsKIAkJLmNoaXAubGFiZWwgPSAiZ3Bpby0wIiwKQEAgLTQxNCw3ICsyMDMsNyBAQAogCX0KIH07CiAKLWludCBfX2luaXQgbXhjX3JlZ2lzdGVyX2dwaW9zKHZvaWQpCitpbnQgX19pbml0IGlteDI1X3JlZ2lzdGVyX2dwaW9zKHZvaWQpCiB7CiAJcmV0dXJuIG14Y19ncGlvX2luaXQoaW14X2dwaW9fcG9ydHMsIEFSUkFZX1NJWkUoaW14X2dwaW9fcG9ydHMpKTsKIH0KQEAgLTQzOSwyNiArMjI4LDYgQEAKIAkucmVzb3VyY2UJPSBteDI1X2ZlY19yZXNvdXJjZXMsCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19uYW5kX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gTVgyNV9ORkNfQkFTRV9BRERSLAotCQkuZW5kCT0gTVgyNV9ORkNfQkFTRV9BRERSICsgMHgxZmZmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCXsKLQkJLnN0YXJ0CT0gTVgyNV9JTlRfTkFOREZDLAotCQkuZW5kCT0gTVgyNV9JTlRfTkFOREZDLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfbmFuZF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm14Y19uYW5kIiwKLQkuaWQJCT0gMCwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXhjX25hbmRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBteGNfbmFuZF9yZXNvdXJjZXMsCi19OwotCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG14MjVfcnRjX3Jlc291cmNlc1tdID0gewogCXsKIAkJLnN0YXJ0CT0gTVgyNV9EUllJQ0VfQkFTRV9BRERSLApAQCAtNTE1LDMgKzI4NCw4MyBAQAogCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfd2R0X3Jlc291cmNlcyksCiAJLnJlc291cmNlID0gbXhjX3dkdF9yZXNvdXJjZXMsCiB9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14MjVfa3BwX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gTVgyNV9LUFBfQkFTRV9BRERSLAorCQkuZW5kCT0gTVgyNV9LUFBfQkFTRV9BRERSICsgMHhmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gTVgyNV9JTlRfS1BQLAorCQkuZW5kCT0gTVgyNV9JTlRfS1BQLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDI1X2twcF9kZXZpY2UgPSB7CisJLm5hbWUJPSAiaW14LWtleXBhZCIsCisJLmlkCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG14MjVfa3BwX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gbXgyNV9rcHBfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfc3NpX3Jlc291cmNlczBbXSA9IHsKKwl7CisJCS5zdGFydAk9IE1YMjVfU1NJMV9CQVNFX0FERFIsCisJCS5lbmQJPSBNWDI1X1NTSTFfQkFTRV9BRERSICsgMHgzZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydAk9IE1YMjVfSU5UX1NTSTEsCisJCS5lbmQJPSBNWDI1X0lOVF9TU0kxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfc3NpX3Jlc291cmNlczFbXSA9IHsKKwl7CisJCS5zdGFydAk9IE1YMjVfU1NJMl9CQVNFX0FERFIsCisJCS5lbmQJPSBNWDI1X1NTSTJfQkFTRV9BRERSICsgMHgzZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorCX0sIHsKKwkJLnN0YXJ0CT0gTVgyNV9JTlRfU1NJMiwKKwkJLmVuZAk9IE1YMjVfSU5UX1NTSTIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9zc2lfZGV2aWNlMCA9IHsKKwkubmFtZSA9ICJpbXgtc3NpIiwKKwkuaWQgPSAwLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpbXhfc3NpX3Jlc291cmNlczApLAorCS5yZXNvdXJjZSA9IGlteF9zc2lfcmVzb3VyY2VzMCwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3NzaV9kZXZpY2UxID0geworCS5uYW1lID0gImlteC1zc2kiLAorCS5pZCA9IDEsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGlteF9zc2lfcmVzb3VyY2VzMSksCisJLnJlc291cmNlID0gaW14X3NzaV9yZXNvdXJjZXMxLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteDI1X2NzaV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IE1YMjVfQ1NJX0JBU0VfQUREUiwKKwkJLmVuZAk9IE1YMjVfQ1NJX0JBU0VfQUREUiArIDB4ZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gTVgyNV9JTlRfQ1NJLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUQorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14MjVfY3NpX2RldmljZSA9IHsKKwkubmFtZQk9ICJteDItY2FtZXJhIiwKKwkuaWQJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShteDI1X2NzaV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IG14MjVfY3NpX3Jlc291cmNlcywKKwkuZGV2CQk9IHsKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKKwl9LAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmggYi9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy5oCmluZGV4IGNlZTEyYzAuLjRhY2ViNjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuaApAQCAtMSwyNCArMSwxNiBAQAotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlMDsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTE7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2UyOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlMzsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTQ7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfb3RnOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb3RnX3VkY19kZXZpY2U7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDI7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTA7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTE7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTI7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfcHdtX2RldmljZTA7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfcHdtX2RldmljZTE7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfcHdtX2RldmljZTI7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfcHdtX2RldmljZTM7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfa2V5cGFkX2RldmljZTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19pMmNfZGV2aWNlMDsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19pMmNfZGV2aWNlMTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19pMmNfZGV2aWNlMjsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14MjVfZmVjX2RldmljZTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19uYW5kX2RldmljZTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14MjVfcnRjX2RldmljZTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14MjVfZmJfZGV2aWNlOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3dkdDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14MjVfa3BwX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9zc2lfZGV2aWNlMDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9zc2lfZGV2aWNlMTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14MjVfY3NpX2RldmljZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyNS9ldWtyZWFfbWJpbXhzZC1iYXNlYm9hcmQuYyBiL2FyY2gvYXJtL21hY2gtbXgyNS9ldWtyZWFfbWJpbXhzZC1iYXNlYm9hcmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTkzMWRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDI1L2V1a3JlYV9tYmlteHNkLWJhc2Vib2FyZC5jCkBAIC0wLDAgKzEsMjYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEVyaWMgQmVuYXJkIC0gZXJpY0BldWtyZWEuY29tCisgKgorICogQmFzZWQgb24gcGNtOTcwLWJhc2Vib2FyZC5jIHdoaWNoIGlzIDoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBKdWVyZ2VuIEJlaXNlcnQgKGtlcm5lbEBwZW5ndXRyb25peC5kZSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPHZpZGVvL3BsYXRmb3JtX2xjZC5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgyNS5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8bWFjaC9teDI1Lmg+CisjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgorI2luY2x1ZGUgPG1hY2gvaW14ZmIuaD4KKyNpbmNsdWRlIDxtYWNoL3NzaS5oPgorI2luY2x1ZGUgPG1hY2gvYXVkbXV4Lmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLWlteDI1LmgiCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCitzdGF0aWMgc3RydWN0IHBhZF9kZXNjIGV1a3JlYV9tYmlteHNkX3BhZHNbXSA9IHsKKwkvKiBMQ0QgKi8KKwlNWDI1X1BBRF9MRDBfX0xEMCwKKwlNWDI1X1BBRF9MRDFfX0xEMSwKKwlNWDI1X1BBRF9MRDJfX0xEMiwKKwlNWDI1X1BBRF9MRDNfX0xEMywKKwlNWDI1X1BBRF9MRDRfX0xENCwKKwlNWDI1X1BBRF9MRDVfX0xENSwKKwlNWDI1X1BBRF9MRDZfX0xENiwKKwlNWDI1X1BBRF9MRDdfX0xENywKKwlNWDI1X1BBRF9MRDhfX0xEOCwKKwlNWDI1X1BBRF9MRDlfX0xEOSwKKwlNWDI1X1BBRF9MRDEwX19MRDEwLAorCU1YMjVfUEFEX0xEMTFfX0xEMTEsCisJTVgyNV9QQURfTEQxMl9fTEQxMiwKKwlNWDI1X1BBRF9MRDEzX19MRDEzLAorCU1YMjVfUEFEX0xEMTRfX0xEMTQsCisJTVgyNV9QQURfTEQxNV9fTEQxNSwKKwlNWDI1X1BBRF9HUElPX0VfX0xEMTYsCisJTVgyNV9QQURfR1BJT19GX19MRDE3LAorCU1YMjVfUEFEX0hTWU5DX19IU1lOQywKKwlNWDI1X1BBRF9WU1lOQ19fVlNZTkMsCisJTVgyNV9QQURfTFNDTEtfX0xTQ0xLLAorCU1YMjVfUEFEX09FX0FDRF9fT0VfQUNELAorCU1YMjVfUEFEX0NPTlRSQVNUX19DT05UUkFTVCwKKwkvKiBMQ0RfUFdSICovCisJTVgyNV9QQURfUFdNX19HUElPXzFfMjYsCisJLyogTEVEICovCisJTVgyNV9QQURfUE9XRVJfRkFJTF9fR1BJT18zXzE5LAorCS8qIFNXSVRDSCAqLworCU1YMjVfUEFEX1ZTVEJZX0FDS19fR1BJT18zXzE4LAorCS8qIFVBUlQyICovCisJTVgyNV9QQURfVUFSVDJfUlRTX19VQVJUMl9SVFMsCisJTVgyNV9QQURfVUFSVDJfQ1RTX19VQVJUMl9DVFMsCisJTVgyNV9QQURfVUFSVDJfVFhEX19VQVJUMl9UWEQsCisJTVgyNV9QQURfVUFSVDJfUlhEX19VQVJUMl9SWEQsCisJLyogU0QxICovCisJTVgyNV9QQURfU0QxX0NNRF9fU0QxX0NNRCwKKwlNWDI1X1BBRF9TRDFfQ0xLX19TRDFfQ0xLLAorCU1YMjVfUEFEX1NEMV9EQVRBMF9fU0QxX0RBVEEwLAorCU1YMjVfUEFEX1NEMV9EQVRBMV9fU0QxX0RBVEExLAorCU1YMjVfUEFEX1NEMV9EQVRBMl9fU0QxX0RBVEEyLAorCU1YMjVfUEFEX1NEMV9EQVRBM19fU0QxX0RBVEEzLAorCS8qIFNEMSBDRCAqLworCU1YMjVfUEFEX0RFX0JfX0dQSU9fMl8yMCwKKwkvKiBJMlMgKi8KKwlNWDI1X1BBRF9LUFBfQ09MM19fQVVENV9UWEZTLAorCU1YMjVfUEFEX0tQUF9DT0wyX19BVUQ1X1RYQywKKwlNWDI1X1BBRF9LUFBfQ09MMV9fQVVENV9SWEQsCisJTVgyNV9QQURfS1BQX0NPTDBfX0FVRDVfVFhELAorfTsKKworI2RlZmluZSBHUElPX0xFRDEJODMKKyNkZWZpbmUgR1BJT19TV0lUQ0gxCTgyCisjZGVmaW5lIEdQSU9fU0QxQ0QJNTIKKyNkZWZpbmUgR1BJT19MQ0RQV1IJMjYKKworc3RhdGljIHN0cnVjdCBpbXhfZmJfdmlkZW9tb2RlIGV1a3JlYV9teGlteHNkX21vZGVzW10gPSB7CisJeworCQkubW9kZQk9IHsKKwkJCS5uYW1lCQk9ICJDTU8tUVZHQSIsCisJCQkucmVmcmVzaAk9IDYwLAorCQkJLnhyZXMJCT0gMzIwLAorCQkJLnlyZXMJCT0gMjQwLAorCQkJLnBpeGNsb2NrCT0gS0haMlBJQ09TKDY1MDApLAorCQkJLmxlZnRfbWFyZ2luCT0gMzAsCisJCQkucmlnaHRfbWFyZ2luCT0gMzgsCisJCQkudXBwZXJfbWFyZ2luCT0gMjAsCisJCQkubG93ZXJfbWFyZ2luCT0gMywKKwkJCS5oc3luY19sZW4JPSAxNSwKKwkJCS52c3luY19sZW4JPSA0LAorCQl9LAorCQkuYnBwCT0gMTYsCisJCS5wY3IJPSAweENBRDA4QjgwLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGlteF9mYl9wbGF0Zm9ybV9kYXRhIGV1a3JlYV9teGlteHNkX2ZiX3BkYXRhID0geworCS5tb2RlCQk9IGV1a3JlYV9teGlteHNkX21vZGVzLAorCS5udW1fbW9kZXMJPSBBUlJBWV9TSVpFKGV1a3JlYV9teGlteHNkX21vZGVzKSwKKwkucHdtcgkJPSAweDAwQTkwM0ZGLAorCS5sc2NyMQkJPSAweDAwMTIwMzAwLAorCS5kbWFjcgkJPSAweDAwMDQwMDYwLAorfTsKKworc3RhdGljIHZvaWQgZXVrcmVhX21iaW14c2RfbGNkX3Bvd2VyX3NldChzdHJ1Y3QgcGxhdF9sY2RfZGF0YSAqcGQsCisJCQkJICAgdW5zaWduZWQgaW50IHBvd2VyKQoreworCWlmIChwb3dlcikKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTENEUFdSLCAxKTsKKwllbHNlCisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0xDRFBXUiwgMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9sY2RfZGF0YSBldWtyZWFfbWJpbXhzZF9sY2RfcG93ZXJfZGF0YSA9IHsKKwkuc2V0X3Bvd2VyCQk9IGV1a3JlYV9tYmlteHNkX2xjZF9wb3dlcl9zZXQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBldWtyZWFfbWJpbXhzZF9sY2RfcG93ZXJkZXYgPSB7CisJLm5hbWUJCQk9ICJwbGF0Zm9ybS1sY2QiLAorCS5kZXYucGxhdGZvcm1fZGF0YQk9ICZldWtyZWFfbWJpbXhzZF9sY2RfcG93ZXJfZGF0YSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZXVrcmVhX21iaW14c2RfbGVkc1tdID0geworCXsKKwkJLm5hbWUJCQk9ICJsZWQxIiwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkuZ3BpbwkJCT0gR1BJT19MRUQxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgZXVrcmVhX21iaW14c2RfbGVkX2luZm8gPSB7CisJLmxlZHMJCT0gZXVrcmVhX21iaW14c2RfbGVkcywKKwkubnVtX2xlZHMJPSBBUlJBWV9TSVpFKGV1a3JlYV9tYmlteHNkX2xlZHMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXVrcmVhX21iaW14c2RfbGVkc19ncGlvID0geworCS5uYW1lCT0gImxlZHMtZ3BpbyIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZXVrcmVhX21iaW14c2RfbGVkX2luZm8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBldWtyZWFfbWJpbXhzZF9ncGlvX2J1dHRvbnNbXSA9IHsKKwl7CisJCS5ncGlvCQk9IEdQSU9fU1dJVENIMSwKKwkJLmNvZGUJCT0gQlROXzAsCisJCS5kZXNjCQk9ICJCUDEiLAorCQkuYWN0aXZlX2xvdwk9IDEsCisJCS53YWtldXAJCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBldWtyZWFfbWJpbXhzZF9idXR0b25fZGF0YSA9IHsKKwkuYnV0dG9ucwk9IGV1a3JlYV9tYmlteHNkX2dwaW9fYnV0dG9ucywKKwkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKGV1a3JlYV9tYmlteHNkX2dwaW9fYnV0dG9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBldWtyZWFfbWJpbXhzZF9idXR0b25fZGV2aWNlID0geworCS5uYW1lCQk9ICJncGlvLWtleXMiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmV1a3JlYV9tYmlteHNkX2J1dHRvbl9kYXRhLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmZXVrcmVhX21iaW14c2RfbGVkc19ncGlvLAorCSZldWtyZWFfbWJpbXhzZF9idXR0b25fZGV2aWNlLAorCSZldWtyZWFfbWJpbXhzZF9sY2RfcG93ZXJkZXYsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhIF9faW5pdGNvbnN0ID0geworCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGV1a3JlYV9tYmlteHNkX2kyY19kZXZpY2VzW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygidGx2MzIwYWljMjMiLCAweDFhKSwKKwl9LAorfTsKKworc3RydWN0IGlteF9zc2lfcGxhdGZvcm1fZGF0YSBldWtyZWFfbWJpbXhzZF9zc2lfcGRhdGEgPSB7CisJLmZsYWdzID0gSU1YX1NTSV9TWU4gfCBJTVhfU1NJX05FVCB8IElNWF9TU0lfVVNFX0kyU19TTEFWRSwKK307CisKKy8qCisgKiBzeXN0ZW0gaW5pdCBmb3IgYmFzZWJvYXJkIHVzYWdlLiBXaWxsIGJlIGNhbGxlZCBieSBjcHVpbXgyNSBpbml0LgorICoKKyAqIEFkZCBwbGF0Zm9ybSBkZXZpY2VzIHByZXNlbnQgb24gdGhpcyBiYXNlYm9hcmQgYW5kIGluaXQKKyAqIHRoZW0gZnJvbSBDUFUgc2lkZSBhcyBmYXIgYXMgcmVxdWlyZWQgdG8gdXNlIHRoZW0gbGF0ZXIgb24KKyAqLwordm9pZCBfX2luaXQgZXVrcmVhX21iaW14c2RfYmFzZWJvYXJkX2luaXQodm9pZCkKK3sKKwlpZiAobXhjX2lvbXV4X3YzX3NldHVwX211bHRpcGxlX3BhZHMoZXVrcmVhX21iaW14c2RfcGFkcywKKwkJCUFSUkFZX1NJWkUoZXVrcmVhX21iaW14c2RfcGFkcykpKQorCQlwcmludGsoS0VSTl9FUlIgImVycm9yIHNldHRpbmcgbWJpbXhzZCBwYWRzICFcbiIpOworCisjaWYgZGVmaW5lZChDT05GSUdfU05EX1NPQ19FVUtSRUFfVExWMzIwKQorCS8qIFNTSSB1bml0IG1hc3RlciBJMlMgY29kZWMgY29ubmVjdGVkIHRvIFNTSV9BVUQ1Ki8KKwlteGNfYXVkbXV4X3YyX2NvbmZpZ3VyZV9wb3J0KDAsCisJCQlNWENfQVVETVVYX1YyX1BUQ1JfU1lOIHwKKwkJCU1YQ19BVURNVVhfVjJfUFRDUl9URlNESVIgfAorCQkJTVhDX0FVRE1VWF9WMl9QVENSX1RGU0VMKDQpIHwKKwkJCU1YQ19BVURNVVhfVjJfUFRDUl9UQ0xLRElSIHwKKwkJCU1YQ19BVURNVVhfVjJfUFRDUl9UQ1NFTCg0KSwKKwkJCU1YQ19BVURNVVhfVjJfUERDUl9SWERTRUwoNCkKKwkpOworCW14Y19hdWRtdXhfdjJfY29uZmlndXJlX3BvcnQoNCwKKwkJCU1YQ19BVURNVVhfVjJfUFRDUl9TWU4sCisJCQlNWENfQVVETVVYX1YyX1BEQ1JfUlhEU0VMKDApCisJKTsKKyNlbmRpZgorCisJaW14MjVfYWRkX2lteF91YXJ0MSgmdWFydF9wZGF0YSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXgyNV9mYl9kZXZpY2UsICZldWtyZWFfbXhpbXhzZF9mYl9wZGF0YSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmaW14X3NzaV9kZXZpY2UwLCAmZXVrcmVhX21iaW14c2Rfc3NpX3BkYXRhKTsKKworCWdwaW9fcmVxdWVzdChHUElPX0xFRDEsICJMRUQxIik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTEVEMSwgMSk7CisJZ3Bpb19mcmVlKEdQSU9fTEVEMSk7CisKKwlncGlvX3JlcXVlc3QoR1BJT19TV0lUQ0gxLCAiU1dJVENIMSIpOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fU1dJVENIMSk7CisJZ3Bpb19mcmVlKEdQSU9fU1dJVENIMSk7CisKKwlncGlvX3JlcXVlc3QoR1BJT19MQ0RQV1IsICJMQ0RQV1IiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19MQ0RQV1IsIDEpOworCWdwaW9fZnJlZShHUElPX1NXSVRDSDEpOworCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZXVrcmVhX21iaW14c2RfaTJjX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShldWtyZWFfbWJpbXhzZF9pMmNfZGV2aWNlcykpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MjUvbWFjaC1jcHVpbXgyNS5jIGIvYXJjaC9hcm0vbWFjaC1teDI1L21hY2gtY3B1aW14MjUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmIyZTI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDI1L21hY2gtY3B1aW14MjUuYwpAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IFNhc2NoYSBIYXVlciwgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyAqIENvcHlyaWdodCAyMDEwIEVyaWMgQsOpbmFyZCAtIEV1a3LDqWEgRWxlY3Ryb21hdGlxdWUsIDxlcmljQGV1a3JlYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9mZWMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3VscGkuaD4KKyNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgorCisjaW5jbHVkZSA8bWFjaC9ldWtyZWEtYmFzZWJvYXJkcy5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9teDI1Lmg+CisjaW5jbHVkZSA8bWFjaC9teGNfbmFuZC5oPgorI2luY2x1ZGUgPG1hY2gvaW14ZmIuaD4KKyNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+CisjaW5jbHVkZSA8bWFjaC91bHBpLmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC1teDI1Lmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLWlteDI1LmgiCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhIF9faW5pdGNvbnN0ID0geworCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCit9OworCitzdGF0aWMgc3RydWN0IHBhZF9kZXNjIGV1a3JlYV9jcHVpbXgyNV9wYWRzW10gPSB7CisJLyogRkVDIC0gUk1JSSAqLworCU1YMjVfUEFEX0ZFQ19NRENfX0ZFQ19NREMsCisJTVgyNV9QQURfRkVDX01ESU9fX0ZFQ19NRElPLAorCU1YMjVfUEFEX0ZFQ19UREFUQTBfX0ZFQ19UREFUQTAsCisJTVgyNV9QQURfRkVDX1REQVRBMV9fRkVDX1REQVRBMSwKKwlNWDI1X1BBRF9GRUNfVFhfRU5fX0ZFQ19UWF9FTiwKKwlNWDI1X1BBRF9GRUNfUkRBVEEwX19GRUNfUkRBVEEwLAorCU1YMjVfUEFEX0ZFQ19SREFUQTFfX0ZFQ19SREFUQTEsCisJTVgyNV9QQURfRkVDX1JYX0RWX19GRUNfUlhfRFYsCisJTVgyNV9QQURfRkVDX1RYX0NMS19fRkVDX1RYX0NMSywKKwkvKiBJMkMxICovCisJTVgyNV9QQURfSTJDMV9DTEtfX0kyQzFfQ0xLLAorCU1YMjVfUEFEX0kyQzFfREFUX19JMkMxX0RBVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmVjX3BsYXRmb3JtX2RhdGEgbXgyNV9mZWNfcGRhdGEgPSB7CisJLnBoeQk9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBteGNfbmFuZF9wbGF0Zm9ybV9kYXRhCitldWtyZWFfY3B1aW14MjVfbmFuZF9ib2FyZF9pbmZvIF9faW5pdGNvbnN0ID0geworCS53aWR0aAkJPSAxLAorCS5od19lY2MJCT0gMSwKKwkuZmxhc2hfYmJ0CT0gMSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14aTJjX3BsYXRmb3JtX2RhdGEKK2V1a3JlYV9jcHVpbXgyNV9pMmMwX2RhdGEgX19pbml0Y29uc3QgPSB7CisJLmJpdHJhdGUgPSAxMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGV1a3JlYV9jcHVpbXgyNV9pMmNfZGV2aWNlc1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInBjZjg1NjMiLCAweDUxKSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIG90Z19wZGF0YSA9IHsKKwkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VVE1JLAorCS5mbGFncwk9IE1YQ19FSENJX0lOVEVSRkFDRV9ESUZGX1VOSSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSB1c2JoMl9wZGF0YSA9IHsKKwkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9TRVJJQUwsCisJLmZsYWdzCT0gTVhDX0VIQ0lfSU5URVJGQUNFX1NJTkdMRV9VTkkgfCBNWENfRUhDSV9JTlRFUk5BTF9QSFkgfAorCQkgIE1YQ19FSENJX0lQUFVFX0RPV04sCit9OworCitzdGF0aWMgc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgb3RnX2RldmljZV9wZGF0YSA9IHsKKwkub3BlcmF0aW5nX21vZGUgPSBGU0xfVVNCMl9EUl9ERVZJQ0UsCisJLnBoeV9tb2RlICAgICAgID0gRlNMX1VTQjJfUEhZX1VUTUksCit9OworCitzdGF0aWMgaW50IG90Z19tb2RlX2hvc3Q7CisKK3N0YXRpYyBpbnQgX19pbml0IGV1a3JlYV9jcHVpbXgyNV9vdGdfbW9kZShjaGFyICpvcHRpb25zKQoreworCWlmICghc3RyY21wKG9wdGlvbnMsICJob3N0IikpCisJCW90Z19tb2RlX2hvc3QgPSAxOworCWVsc2UgaWYgKCFzdHJjbXAob3B0aW9ucywgImRldmljZSIpKQorCQlvdGdfbW9kZV9ob3N0ID0gMDsKKwllbHNlCisJCXByX2luZm8oIm90Z19tb2RlIG5laXRoZXIgXCJob3N0XCIgbm9yIFwiZGV2aWNlXCIuICIKKwkJCSJEZWZhdWx0aW5nIHRvIGRldmljZVxuIik7CisJcmV0dXJuIDA7Cit9CitfX3NldHVwKCJvdGdfbW9kZT0iLCBldWtyZWFfY3B1aW14MjVfb3RnX21vZGUpOworCitzdGF0aWMgdm9pZCBfX2luaXQgZXVrcmVhX2NwdWlteDI1X2luaXQodm9pZCkKK3sKKwlpZiAobXhjX2lvbXV4X3YzX3NldHVwX211bHRpcGxlX3BhZHMoZXVrcmVhX2NwdWlteDI1X3BhZHMsCisJCQlBUlJBWV9TSVpFKGV1a3JlYV9jcHVpbXgyNV9wYWRzKSkpCisJCXByaW50ayhLRVJOX0VSUiAiZXJyb3Igc2V0dGluZyBjcHVpbXgyNSBwYWRzICFcbiIpOworCisJaW14MjVfYWRkX2lteF91YXJ0MCgmdWFydF9wZGF0YSk7CisJaW14MjVfYWRkX214Y19uYW5kKCZldWtyZWFfY3B1aW14MjVfbmFuZF9ib2FyZF9pbmZvKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDI1X3J0Y19kZXZpY2UsIE5VTEwpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14MjVfZmVjX2RldmljZSwgJm14MjVfZmVjX3BkYXRhKTsKKworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGV1a3JlYV9jcHVpbXgyNV9pMmNfZGV2aWNlcywKKwkJCQlBUlJBWV9TSVpFKGV1a3JlYV9jcHVpbXgyNV9pMmNfZGV2aWNlcykpOworCWlteDI1X2FkZF9pbXhfaTJjMCgmZXVrcmVhX2NwdWlteDI1X2kyYzBfZGF0YSk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfVUxQSSkKKwlpZiAob3RnX21vZGVfaG9zdCkgeworCQlvdGdfcGRhdGEub3RnID0gb3RnX3VscGlfY3JlYXRlKCZteGNfdWxwaV9hY2Nlc3Nfb3BzLAorCQkJCVVTQl9PVEdfRFJWX1ZCVVMgfCBVU0JfT1RHX0RSVl9WQlVTX0VYVCk7CisKKwkJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX290ZywgJm90Z19wZGF0YSk7CisJfQorCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMiwgJnVzYmgyX3BkYXRhKTsKKyNlbmRpZgorCWlmICghb3RnX21vZGVfaG9zdCkKKwkJbXhjX3JlZ2lzdGVyX2RldmljZSgmb3RnX3VkY19kZXZpY2UsICZvdGdfZGV2aWNlX3BkYXRhKTsKKworI2lmZGVmIENPTkZJR19NQUNIX0VVS1JFQV9NQklNWFNEX0JBU0VCT0FSRAorCWV1a3JlYV9tYmlteHNkX2Jhc2Vib2FyZF9pbml0KCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgX19pbml0IGV1a3JlYV9jcHVpbXgyNV90aW1lcl9pbml0KHZvaWQpCit7CisJbXgyNV9jbG9ja3NfaW5pdCgpOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBldWtyZWFfY3B1aW14MjVfdGltZXIgPSB7CisJLmluaXQgICA9IGV1a3JlYV9jcHVpbXgyNV90aW1lcl9pbml0LAorfTsKKworTUFDSElORV9TVEFSVChFVUtSRUFfQ1BVSU1YMjUsICJFdWtyZWEgQ1BVSU1YMjUiKQorCS8qIE1haW50YWluZXI6IEV1a3JlYSBFbGVjdHJvbWF0aXF1ZSAqLworCS5waHlzX2lvCT0gTVgyNV9BSVBTMV9CQVNFX0FERFIsCisJLmlvX3BnX29mZnN0CT0gKChNWDI1X0FJUFMxX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zICAgID0gTVgyNV9QSFlTX09GRlNFVCArIDB4MTAwLAorCS5tYXBfaW8gICAgICAgICA9IG14MjVfbWFwX2lvLAorCS5pbml0X2lycSAgICAgICA9IG14MjVfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZSAgID0gZXVrcmVhX2NwdWlteDI1X2luaXQsCisJLnRpbWVyICAgICAgICAgID0gJmV1a3JlYV9jcHVpbXgyNV90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MjUvbWFjaC1teDI1XzNkcy5jIGIvYXJjaC9hcm0vbWFjaC1teDI1L21hY2gtbXgyNV8zZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmJjMjFmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDI1L21hY2gtbXgyNV8zZHMuYwpAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IFNhc2NoYSBIYXVlciwgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworLyoKKyAqIFRoaXMgbWFjaGluZSBpcyBrbm93biBhczoKKyAqICAtIGkuTVgyNSAzLVN0YWNrIERldmVsb3BtZW50IFN5c3RlbQorICogIC0gaS5NWDI1IFBsYXRmb3JtIERldmVsb3BtZW50IEtpdCAoaS5NWDI1IFBESykKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZmVjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL214MjUuaD4KKyNpbmNsdWRlIDxtYWNoL2lteGZiLmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC1teDI1Lmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLWlteDI1LmgiCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhIF9faW5pdGNvbnN0ID0geworCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCit9OworCitzdGF0aWMgc3RydWN0IHBhZF9kZXNjIG14MjVwZGtfcGFkc1tdID0geworCU1YMjVfUEFEX0ZFQ19NRENfX0ZFQ19NREMsCisJTVgyNV9QQURfRkVDX01ESU9fX0ZFQ19NRElPLAorCU1YMjVfUEFEX0ZFQ19UREFUQTBfX0ZFQ19UREFUQTAsCisJTVgyNV9QQURfRkVDX1REQVRBMV9fRkVDX1REQVRBMSwKKwlNWDI1X1BBRF9GRUNfVFhfRU5fX0ZFQ19UWF9FTiwKKwlNWDI1X1BBRF9GRUNfUkRBVEEwX19GRUNfUkRBVEEwLAorCU1YMjVfUEFEX0ZFQ19SREFUQTFfX0ZFQ19SREFUQTEsCisJTVgyNV9QQURfRkVDX1JYX0RWX19GRUNfUlhfRFYsCisJTVgyNV9QQURfRkVDX1RYX0NMS19fRkVDX1RYX0NMSywKKwlNWDI1X1BBRF9BMTdfX0dQSU9fMl8zLCAvKiBGRUNfRU4sIEdQSU8gMzUgKi8KKwlNWDI1X1BBRF9EMTJfX0dQSU9fNF84LCAvKiBGRUNfUkVTRVRfQiwgR1BJTyAxMDQgKi8KKworCS8qIExDRCAqLworCU1YMjVfUEFEX0xEMF9fTEQwLAorCU1YMjVfUEFEX0xEMV9fTEQxLAorCU1YMjVfUEFEX0xEMl9fTEQyLAorCU1YMjVfUEFEX0xEM19fTEQzLAorCU1YMjVfUEFEX0xENF9fTEQ0LAorCU1YMjVfUEFEX0xENV9fTEQ1LAorCU1YMjVfUEFEX0xENl9fTEQ2LAorCU1YMjVfUEFEX0xEN19fTEQ3LAorCU1YMjVfUEFEX0xEOF9fTEQ4LAorCU1YMjVfUEFEX0xEOV9fTEQ5LAorCU1YMjVfUEFEX0xEMTBfX0xEMTAsCisJTVgyNV9QQURfTEQxMV9fTEQxMSwKKwlNWDI1X1BBRF9MRDEyX19MRDEyLAorCU1YMjVfUEFEX0xEMTNfX0xEMTMsCisJTVgyNV9QQURfTEQxNF9fTEQxNCwKKwlNWDI1X1BBRF9MRDE1X19MRDE1LAorCU1YMjVfUEFEX0dQSU9fRV9fTEQxNiwKKwlNWDI1X1BBRF9HUElPX0ZfX0xEMTcsCisJTVgyNV9QQURfSFNZTkNfX0hTWU5DLAorCU1YMjVfUEFEX1ZTWU5DX19WU1lOQywKKwlNWDI1X1BBRF9MU0NMS19fTFNDTEssCisJTVgyNV9QQURfT0VfQUNEX19PRV9BQ0QsCisJTVgyNV9QQURfQ09OVFJBU1RfX0NPTlRSQVNULAorCisJLyogS2V5cGFkICovCisJTVgyNV9QQURfS1BQX1JPVzBfX0tQUF9ST1cwLAorCU1YMjVfUEFEX0tQUF9ST1cxX19LUFBfUk9XMSwKKwlNWDI1X1BBRF9LUFBfUk9XMl9fS1BQX1JPVzIsCisJTVgyNV9QQURfS1BQX1JPVzNfX0tQUF9ST1czLAorCU1YMjVfUEFEX0tQUF9DT0wwX19LUFBfQ09MMCwKKwlNWDI1X1BBRF9LUFBfQ09MMV9fS1BQX0NPTDEsCisJTVgyNV9QQURfS1BQX0NPTDJfX0tQUF9DT0wyLAorCU1YMjVfUEFEX0tQUF9DT0wzX19LUFBfQ09MMywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmVjX3BsYXRmb3JtX2RhdGEgbXgyNV9mZWNfcGRhdGEgPSB7CisgICAgICAgIC5waHkgICAgPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSwKK307CisKKyNkZWZpbmUgRkVDX0VOQUJMRV9HUElPCQkzNQorI2RlZmluZSBGRUNfUkVTRVRfQl9HUElPCTEwNAorCitzdGF0aWMgdm9pZCBfX2luaXQgbXgyNXBka19mZWNfcmVzZXQodm9pZCkKK3sKKwlncGlvX3JlcXVlc3QoRkVDX0VOQUJMRV9HUElPLCAiRkVDIFBIWSBlbmFibGUiKTsKKwlncGlvX3JlcXVlc3QoRkVDX1JFU0VUX0JfR1BJTywgIkZFQyBQSFkgcmVzZXQiKTsKKworCWdwaW9fZGlyZWN0aW9uX291dHB1dChGRUNfRU5BQkxFX0dQSU8sIDApOyAgLyogZHJvcCBQSFkgcG93ZXIgKi8KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoRkVDX1JFU0VUX0JfR1BJTywgMCk7IC8qIGFzc2VydCByZXNldCAqLworCXVkZWxheSgyKTsKKworCS8qIHR1cm4gb24gUEhZIHBvd2VyIGFuZCBsaWZ0IHJlc2V0ICovCisJZ3Bpb19zZXRfdmFsdWUoRkVDX0VOQUJMRV9HUElPLCAxKTsKKwlncGlvX3NldF92YWx1ZShGRUNfUkVTRVRfQl9HUElPLCAxKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBteGNfbmFuZF9wbGF0Zm9ybV9kYXRhCitteDI1cGRrX25hbmRfYm9hcmRfaW5mbyBfX2luaXRjb25zdCA9IHsKKwkud2lkdGgJCT0gMSwKKwkuaHdfZWNjCQk9IDEsCisJLmZsYXNoX2JidAk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IGlteF9mYl92aWRlb21vZGUgbXgyNXBka19tb2Rlc1tdID0geworCXsKKwkJLm1vZGUJPSB7CisJCQkubmFtZQkJPSAiQ1JULVZHQSIsCisJCQkucmVmcmVzaAk9IDYwLAorCQkJLnhyZXMJCT0gNjQwLAorCQkJLnlyZXMJCT0gNDgwLAorCQkJLnBpeGNsb2NrCT0gMzk2ODMsCisJCQkubGVmdF9tYXJnaW4JPSA0NSwKKwkJCS5yaWdodF9tYXJnaW4JPSAxMTQsCisJCQkudXBwZXJfbWFyZ2luCT0gMzMsCisJCQkubG93ZXJfbWFyZ2luCT0gMTEsCisJCQkuaHN5bmNfbGVuCT0gMSwKKwkJCS52c3luY19sZW4JPSAxLAorCQl9LAorCQkuYnBwCT0gMTYsCisJCS5wY3IJPSAweEZBMjA4QjgwLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGlteF9mYl9wbGF0Zm9ybV9kYXRhIG14MjVwZGtfZmJfcGRhdGEgPSB7CisJLm1vZGUJCT0gbXgyNXBka19tb2RlcywKKwkubnVtX21vZGVzCT0gQVJSQVlfU0laRShteDI1cGRrX21vZGVzKSwKKwkucHdtcgkJPSAweDAwQTkwM0ZGLAorCS5sc2NyMQkJPSAweDAwMTIwMzAwLAorCS5kbWFjcgkJPSAweDAwMDIwMDEwLAorfTsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IG14MjVwZGtfa2V5bWFwW10gPSB7CisJS0VZKDAsIDAsIEtFWV9VUCksCisJS0VZKDAsIDEsIEtFWV9ET1dOKSwKKwlLRVkoMCwgMiwgS0VZX1ZPTFVNRURPV04pLAorCUtFWSgwLCAzLCBLRVlfSE9NRSksCisJS0VZKDEsIDAsIEtFWV9SSUdIVCksCisJS0VZKDEsIDEsIEtFWV9MRUZUKSwKKwlLRVkoMSwgMiwgS0VZX0VOVEVSKSwKKwlLRVkoMSwgMywgS0VZX1ZPTFVNRVVQKSwKKwlLRVkoMiwgMCwgS0VZX0Y2KSwKKwlLRVkoMiwgMSwgS0VZX0Y4KSwKKwlLRVkoMiwgMiwgS0VZX0Y5KSwKKwlLRVkoMiwgMywgS0VZX0YxMCksCisJS0VZKDMsIDAsIEtFWV9GMSksCisJS0VZKDMsIDEsIEtFWV9GMiksCisJS0VZKDMsIDIsIEtFWV9GMyksCisJS0VZKDMsIDMsIEtFWV9QT1dFUiksCit9OworCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBteDI1cGRrX2tleW1hcF9kYXRhID0geworCS5rZXltYXAJCT0gbXgyNXBka19rZXltYXAsCisJLmtleW1hcF9zaXplCT0gQVJSQVlfU0laRShteDI1cGRrX2tleW1hcCksCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgbXgyNXBka19pbml0KHZvaWQpCit7CisJbXhjX2lvbXV4X3YzX3NldHVwX211bHRpcGxlX3BhZHMobXgyNXBka19wYWRzLAorCQkJQVJSQVlfU0laRShteDI1cGRrX3BhZHMpKTsKKworCWlteDI1X2FkZF9pbXhfdWFydDAoJnVhcnRfcGRhdGEpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMiwgTlVMTCk7CisJaW14MjVfYWRkX214Y19uYW5kKCZteDI1cGRrX25hbmRfYm9hcmRfaW5mbyk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXgyNV9ydGNfZGV2aWNlLCBOVUxMKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDI1X2ZiX2RldmljZSwgJm14MjVwZGtfZmJfcGRhdGEpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y193ZHQsIE5VTEwpOworCisJbXgyNXBka19mZWNfcmVzZXQoKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDI1X2ZlY19kZXZpY2UsICZteDI1X2ZlY19wZGF0YSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXgyNV9rcHBfZGV2aWNlLCAmbXgyNXBka19rZXltYXBfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBteDI1cGRrX3RpbWVyX2luaXQodm9pZCkKK3sKKwlteDI1X2Nsb2Nrc19pbml0KCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIG14MjVwZGtfdGltZXIgPSB7CisJLmluaXQgICA9IG14MjVwZGtfdGltZXJfaW5pdCwKK307CisKK01BQ0hJTkVfU1RBUlQoTVgyNV8zRFMsICJGcmVlc2NhbGUgTVgyNVBESyAoM0RTKSIpCisJLyogTWFpbnRhaW5lcjogRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gKi8KKwkucGh5c19pbwk9IE1YMjVfQUlQUzFfQkFTRV9BRERSLAorCS5pb19wZ19vZmZzdAk9ICgoTVgyNV9BSVBTMV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcyAgICA9IE1YMjVfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvICAgICAgICAgPSBteDI1X21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBteDI1X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgICA9IG14MjVwZGtfaW5pdCwKKwkudGltZXIgICAgICAgICAgPSAmbXgyNXBka190aW1lciwKK01BQ0hJTkVfRU5ECisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyNS9tYWNoLW14MjVwZGsuYyBiL2FyY2gvYXJtL21hY2gtbXgyNS9tYWNoLW14MjVwZGsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNkNzQxMC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW14MjUvbWFjaC1teDI1cGRrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA5IFNhc2NoYSBIYXVlciwgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKLSAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2ZlYy5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9teDI1Lmg+Ci0jaW5jbHVkZSA8bWFjaC9teGNfbmFuZC5oPgotI2luY2x1ZGUgPG1hY2gvaW14ZmIuaD4KLSNpbmNsdWRlICJkZXZpY2VzLmgiCi0jaW5jbHVkZSA8bWFjaC9pb211eC1teDI1Lmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgPSB7Ci0JLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGFkX2Rlc2MgbXgyNXBka19wYWRzW10gPSB7Ci0JTVgyNV9QQURfRkVDX01EQ19fRkVDX01EQywKLQlNWDI1X1BBRF9GRUNfTURJT19fRkVDX01ESU8sCi0JTVgyNV9QQURfRkVDX1REQVRBMF9fRkVDX1REQVRBMCwKLQlNWDI1X1BBRF9GRUNfVERBVEExX19GRUNfVERBVEExLAotCU1YMjVfUEFEX0ZFQ19UWF9FTl9fRkVDX1RYX0VOLAotCU1YMjVfUEFEX0ZFQ19SREFUQTBfX0ZFQ19SREFUQTAsCi0JTVgyNV9QQURfRkVDX1JEQVRBMV9fRkVDX1JEQVRBMSwKLQlNWDI1X1BBRF9GRUNfUlhfRFZfX0ZFQ19SWF9EViwKLQlNWDI1X1BBRF9GRUNfVFhfQ0xLX19GRUNfVFhfQ0xLLAotCU1YMjVfUEFEX0ExN19fR1BJT18yXzMsIC8qIEZFQ19FTiwgR1BJTyAzNSAqLwotCU1YMjVfUEFEX0QxMl9fR1BJT180XzgsIC8qIEZFQ19SRVNFVF9CLCBHUElPIDEwNCAqLwotCi0JLyogTENEICovCi0JTVgyNV9QQURfTEQwX19MRDAsCi0JTVgyNV9QQURfTEQxX19MRDEsCi0JTVgyNV9QQURfTEQyX19MRDIsCi0JTVgyNV9QQURfTEQzX19MRDMsCi0JTVgyNV9QQURfTEQ0X19MRDQsCi0JTVgyNV9QQURfTEQ1X19MRDUsCi0JTVgyNV9QQURfTEQ2X19MRDYsCi0JTVgyNV9QQURfTEQ3X19MRDcsCi0JTVgyNV9QQURfTEQ4X19MRDgsCi0JTVgyNV9QQURfTEQ5X19MRDksCi0JTVgyNV9QQURfTEQxMF9fTEQxMCwKLQlNWDI1X1BBRF9MRDExX19MRDExLAotCU1YMjVfUEFEX0xEMTJfX0xEMTIsCi0JTVgyNV9QQURfTEQxM19fTEQxMywKLQlNWDI1X1BBRF9MRDE0X19MRDE0LAotCU1YMjVfUEFEX0xEMTVfX0xEMTUsCi0JTVgyNV9QQURfR1BJT19FX19MRDE2LAotCU1YMjVfUEFEX0dQSU9fRl9fTEQxNywKLQlNWDI1X1BBRF9IU1lOQ19fSFNZTkMsCi0JTVgyNV9QQURfVlNZTkNfX1ZTWU5DLAotCU1YMjVfUEFEX0xTQ0xLX19MU0NMSywKLQlNWDI1X1BBRF9PRV9BQ0RfX09FX0FDRCwKLQlNWDI1X1BBRF9DT05UUkFTVF9fQ09OVFJBU1QsCi19OwotCi1zdGF0aWMgc3RydWN0IGZlY19wbGF0Zm9ybV9kYXRhIG14MjVfZmVjX3BkYXRhID0gewotICAgICAgICAucGh5ICAgID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUksCi19OwotCi0jZGVmaW5lIEZFQ19FTkFCTEVfR1BJTwkJMzUKLSNkZWZpbmUgRkVDX1JFU0VUX0JfR1BJTwkxMDQKLQotc3RhdGljIHZvaWQgX19pbml0IG14MjVwZGtfZmVjX3Jlc2V0KHZvaWQpCi17Ci0JZ3Bpb19yZXF1ZXN0KEZFQ19FTkFCTEVfR1BJTywgIkZFQyBQSFkgZW5hYmxlIik7Ci0JZ3Bpb19yZXF1ZXN0KEZFQ19SRVNFVF9CX0dQSU8sICJGRUMgUEhZIHJlc2V0Iik7Ci0KLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoRkVDX0VOQUJMRV9HUElPLCAwKTsgIC8qIGRyb3AgUEhZIHBvd2VyICovCi0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEZFQ19SRVNFVF9CX0dQSU8sIDApOyAvKiBhc3NlcnQgcmVzZXQgKi8KLQl1ZGVsYXkoMik7Ci0KLQkvKiB0dXJuIG9uIFBIWSBwb3dlciBhbmQgbGlmdCByZXNldCAqLwotCWdwaW9fc2V0X3ZhbHVlKEZFQ19FTkFCTEVfR1BJTywgMSk7Ci0JZ3Bpb19zZXRfdmFsdWUoRkVDX1JFU0VUX0JfR1BJTywgMSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YSBteDI1cGRrX25hbmRfYm9hcmRfaW5mbyA9IHsKLQkud2lkdGgJCT0gMSwKLQkuaHdfZWNjCQk9IDEsCi0JLmZsYXNoX2JidAk9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IGlteF9mYl92aWRlb21vZGUgbXgyNXBka19tb2Rlc1tdID0gewotCXsKLQkJLm1vZGUJPSB7Ci0JCQkubmFtZQkJPSAiQ1JULVZHQSIsCi0JCQkucmVmcmVzaAk9IDYwLAotCQkJLnhyZXMJCT0gNjQwLAotCQkJLnlyZXMJCT0gNDgwLAotCQkJLnBpeGNsb2NrCT0gMzk2ODMsCi0JCQkubGVmdF9tYXJnaW4JPSA0NSwKLQkJCS5yaWdodF9tYXJnaW4JPSAxMTQsCi0JCQkudXBwZXJfbWFyZ2luCT0gMzMsCi0JCQkubG93ZXJfbWFyZ2luCT0gMTEsCi0JCQkuaHN5bmNfbGVuCT0gMSwKLQkJCS52c3luY19sZW4JPSAxLAotCQl9LAotCQkuYnBwCT0gMTYsCi0JCS5wY3IJPSAweEZBMjA4QjgwLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGlteF9mYl9wbGF0Zm9ybV9kYXRhIG14MjVwZGtfZmJfcGRhdGEgPSB7Ci0JLm1vZGUJCT0gbXgyNXBka19tb2RlcywKLQkubnVtX21vZGVzCT0gQVJSQVlfU0laRShteDI1cGRrX21vZGVzKSwKLQkucHdtcgkJPSAweDAwQTkwM0ZGLAotCS5sc2NyMQkJPSAweDAwMTIwMzAwLAotCS5kbWFjcgkJPSAweDAwMDIwMDEwLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IG14MjVwZGtfaW5pdCh2b2lkKQotewotCW14Y19pb211eF92M19zZXR1cF9tdWx0aXBsZV9wYWRzKG14MjVwZGtfcGFkcywKLQkJCUFSUkFZX1NJWkUobXgyNXBka19wYWRzKSk7Ci0KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VzYmgyLCBOVUxMKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfbmFuZF9kZXZpY2UsICZteDI1cGRrX25hbmRfYm9hcmRfaW5mbyk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXgyNV9ydGNfZGV2aWNlLCBOVUxMKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDI1X2ZiX2RldmljZSwgJm14MjVwZGtfZmJfcGRhdGEpOwotCi0JbXgyNXBka19mZWNfcmVzZXQoKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDI1X2ZlY19kZXZpY2UsICZteDI1X2ZlY19wZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBteDI1cGRrX3RpbWVyX2luaXQodm9pZCkKLXsKLQlteDI1X2Nsb2Nrc19pbml0KCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIG14MjVwZGtfdGltZXIgPSB7Ci0JLmluaXQgICA9IG14MjVwZGtfdGltZXJfaW5pdCwKLX07Ci0KLU1BQ0hJTkVfU1RBUlQoTVgyNV8zRFMsICJGcmVlc2NhbGUgTVgyNVBESyAoM0RTKSIpCi0JLyogTWFpbnRhaW5lcjogRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gKi8KLQkucGh5c19pbwk9IE1YMjVfQUlQUzFfQkFTRV9BRERSLAotCS5pb19wZ19vZmZzdAk9ICgoTVgyNV9BSVBTMV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcyAgICA9IE1YMjVfUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvICAgICAgICAgPSBteDI1X21hcF9pbywKLQkuaW5pdF9pcnEgICAgICAgPSBteDI1X2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUgICA9IG14MjVwZGtfaW5pdCwKLQkudGltZXIgICAgICAgICAgPSAmbXgyNXBka190aW1lciwKLU1BQ0hJTkVfRU5ECi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyNS9tbS5jIGIvYXJjaC9hcm0vbWFjaC1teDI1L21tLmMKaW5kZXggYTdlNTg3Zi4uYmI2NzcxMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDI1L21tLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDI1L21tLmMKQEAgLTE0LDEwICsxNCw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KQEAgLTY5LDggKzY1LDExIEBACiAJaW90YWJsZV9pbml0KG14Y19pb19kZXNjLCBBUlJBWV9TSVpFKG14Y19pb19kZXNjKSk7CiB9CiAKK2ludCBpbXgyNV9yZWdpc3Rlcl9ncGlvcyh2b2lkKTsKKwogdm9pZCBfX2luaXQgbXgyNV9pbml0X2lycSh2b2lkKQogewogCW14Y19pbml0X2lycSgodm9pZCBfX2lvbWVtICopTVgyNV9BVklDX0JBU0VfQUREUl9WSVJUKTsKKwlpbXgyNV9yZWdpc3Rlcl9ncGlvcygpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1teDMvS2NvbmZpZwppbmRleCAzNDQ3NTNmLi44NWJlZWNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL0tjb25maWcKQEAgLTE1LDYgKzE1LDggQEAKIGNvbmZpZyBNQUNIX01YMzFBRFMKIAlib29sICJTdXBwb3J0IE1YMzFBRFMgcGxhdGZvcm1zIgogCXNlbGVjdCBBUkNIX01YMzEKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX0kyQworCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfVUFSVAogCWRlZmF1bHQgeQogCWhlbHAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgTVgzMUFEUyBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcyBzcGVjaWZpYwpAQCAtMzQsNiArMzYsOSBAQAogY29uZmlnIE1BQ0hfUENNMDM3CiAJYm9vbCAiU3VwcG9ydCBQaHl0ZWMgcGNtMDM3IChpLk1YMzEpIHBsYXRmb3JtcyIKIAlzZWxlY3QgQVJDSF9NWDMxCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9JMkMKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX05BTkQKIAlzZWxlY3QgTVhDX1VMUEkgaWYgVVNCX1VMUEkKIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIFBoeXRlYyBwY20wMzcgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMKQEAgLTQyLDYgKzQ3LDcgQEAKIGNvbmZpZyBNQUNIX1BDTTAzN19FRVQKIAlib29sICJTdXBwb3J0IHBjbTAzNyBFRVQgYm9hcmQgZXh0ZW5zaW9ucyIKIAlkZXBlbmRzIG9uIE1BQ0hfUENNMDM3CisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX1NQSV9JTVgKIAloZWxwCiAJICBBZGQgc3VwcG9ydCBmb3IgUENNMDM3IEVFVCBiYXNlYm9hcmQgZXh0ZW5zaW9ucy4gSWYgeW91IGFyZSB1c2luZyB0aGUKIAkgIE9MRUQgZGlzcGxheSB3aXRoIEVFVCwgdXNlICJ2aWRlbz1teDNmYjpDTUVMLU9MRUQiIGtlcm5lbApAQCAtNTEsNiArNTcsOSBAQAogCWJvb2wgIlN1cHBvcnQgTVgzMSBMSVRFS0lUIChMb2dpY1BEKSIKIAlzZWxlY3QgQVJDSF9NWDMxCiAJc2VsZWN0IE1YQ19VTFBJIGlmIFVTQl9VTFBJCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9VQVJUCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX01YQ19OQU5ECisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX1NQSV9JTVgKIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIE1YMzEgTElURUtJVCBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcyBzcGVjaWZpYwogCSAgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBib2FyZCBhbmQgaXRzIHBlcmlwaGVyYWxzLgpAQCAtNTgsNiArNjcsMTAgQEAKIGNvbmZpZyBNQUNIX01YMzFfM0RTCiAJYm9vbCAiU3VwcG9ydCBNWDMxUERLICgzRFMpIgogCXNlbGVjdCBBUkNIX01YMzEKKwlzZWxlY3QgTVhDX0RFQlVHX0JPQVJECisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9VQVJUCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX01YQ19OQU5ECisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX1NQSV9JTVgKIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIE1YMzFQREsgKDNEUykgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMgc3BlY2lmaWMKIAkgIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYm9hcmQgYW5kIGl0cyBwZXJpcGhlcmFscy4KQEAgLTc0LDYgKzg3LDkgQEAKIGNvbmZpZyBNQUNIX01YMzFNT0JPQVJECiAJYm9vbCAiU3VwcG9ydCBteDMxbW9ib2FyZCBwbGF0Zm9ybXMgKEVQRkwgTW9ib3RzIGdyb3VwKSIKIAlzZWxlY3QgQVJDSF9NWDMxCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9JMkMKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fU1BJX0lNWAogCXNlbGVjdCBNWENfVUxQSSBpZiBVU0JfVUxQSQogCWhlbHAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgbXgzMW1vYm9hcmQgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMgc3BlY2lmaWMKQEAgLTgyLDYgKzk4LDggQEAKIGNvbmZpZyBNQUNIX01YMzFMSUxMWQogCWJvb2wgIlN1cHBvcnQgTVgzMSBMSUxMWS0xMTMxIHBsYXRmb3JtcyAoSU5DTyBzdGFydGVjKSIKIAlzZWxlY3QgQVJDSF9NWDMxCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9VQVJUCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX1NQSV9JTVgKIAlzZWxlY3QgTVhDX1VMUEkgaWYgVVNCX1VMUEkKIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIG14MzEgYmFzZWQgTElMTFkxMTMxIG1vZHVsZXMuIFRoaXMgaW5jbHVkZXMKQEAgLTkwLDYgKzEwOCw3IEBACiBjb25maWcgTUFDSF9RT05HCiAJYm9vbCAiU3VwcG9ydCBEYXZlL0RFTlggUW9uZ0VWQi1MSVRFIHBsYXRmb3JtIgogCXNlbGVjdCBBUkNIX01YMzEKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIERhdmUvREVOWCBRb25nRVZCLUxJVEUgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMKIAkgIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYm9hcmQgYW5kIGl0cyBwZXJpcGhlcmFscy4KQEAgLTk3LDYgKzExNiwxMCBAQAogY29uZmlnIE1BQ0hfUENNMDQzCiAJYm9vbCAiU3VwcG9ydCBQaHl0ZWMgcGNtMDQzIChpLk1YMzUpIHBsYXRmb3JtcyIKIAlzZWxlY3QgQVJDSF9NWDM1CisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9JMkMKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX05BTkQKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fRkxFWENBTgogCXNlbGVjdCBNWENfVUxQSSBpZiBVU0JfVUxQSQogCWhlbHAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgUGh5dGVjIHBjbTA0MyBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcwpAQCAtMTA1LDYgKzEyOCw5IEBACiBjb25maWcgTUFDSF9BUk1BRElMTE81WDAKIAlib29sICJTdXBwb3J0IEF0bWFyayBBcm1hZGlsbG8tNTAwIERldmVsb3BtZW50IEJhc2UgQm9hcmQiCiAJc2VsZWN0IEFSQ0hfTVgzMQorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfSTJDCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9VQVJUCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX01YQ19OQU5ECiAJc2VsZWN0IE1YQ19VTFBJIGlmIFVTQl9VTFBJCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBBdG1hcmsgQXJtYWRpbGxvLTUwMCBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcwpAQCAtMTEzLDYgKzEzOSw3IEBACiBjb25maWcgTUFDSF9NWDM1XzNEUwogCWJvb2wgIlN1cHBvcnQgTVgzNVBESyBwbGF0Zm9ybSIKIAlzZWxlY3QgQVJDSF9NWDM1CisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9VQVJUCiAJZGVmYXVsdCBuCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBNWDM1UERLIHBsYXRmb3JtLiBUaGlzIGluY2x1ZGVzIHNwZWNpZmljCkBAIC0xMjEsOCArMTQ4LDM0IEBACiBjb25maWcgTUFDSF9LWk1fQVJNMTFfMDEKIAlib29sICJTdXBwb3J0IEtaTS1BUk0xMS0wMShLeW90byBNaWNyb2NvbXB1dGVyKSIKIAlzZWxlY3QgQVJDSF9NWDMxCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9VQVJUCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBLWk0tQVJNMTEtMDEuIFRoaXMgaW5jbHVkZXMgc3BlY2lmaWMKIAkgIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYm9hcmQgYW5kIGl0cyBwZXJpcGhlcmFscy4KIAorY29uZmlnIE1BQ0hfRVVLUkVBX0NQVUlNWDM1CisJYm9vbCAiU3VwcG9ydCBFdWtyZWEgQ1BVSU1YMzUgUGxhdGZvcm0iCisJc2VsZWN0IEFSQ0hfTVgzNQorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfVUFSVAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfSTJDCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX01YQ19OQU5ECisJc2VsZWN0IE1YQ19VTFBJIGlmIFVTQl9VTFBJCisJaGVscAorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBFdWtyZWEgQ1BVSU1YMzUgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMKKwkgIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYm9hcmQgYW5kIGl0cyBwZXJpcGhlcmFscy4KKworY2hvaWNlCisJcHJvbXB0ICJCYXNlYm9hcmQiCisJZGVwZW5kcyBvbiBNQUNIX0VVS1JFQV9DUFVJTVgzNQorCWRlZmF1bHQgTUFDSF9FVUtSRUFfTUJJTVhTRDM1X0JBU0VCT0FSRAorCitjb25maWcgTUFDSF9FVUtSRUFfTUJJTVhTRDM1X0JBU0VCT0FSRAorCXByb21wdCAiRXVrcmVhIE1CSU1YU0QgZGV2ZWxvcG1lbnQgYm9hcmQiCisJYm9vbAorCWhlbHAKKwkgIFRoaXMgYWRkcyBib2FyZCBzcGVjaWZpYyBkZXZpY2VzIHRoYXQgY2FuIGJlIGZvdW5kIG9uIEV1a3JlYSdzCisJICBNQklNWFNEIGV2YWx1YXRpb24gYm9hcmQuCisKK2VuZGNob2ljZQorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW14My9NYWtlZmlsZQppbmRleCA1ZDY1MGZkLi4yYmQ3YmVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW14My9NYWtlZmlsZQpAQCAtMjIsNSArMjIsNyBAQAogb2JqLSQoQ09ORklHX01BQ0hfUU9ORykJCSs9IG1hY2gtcW9uZy5vCiBvYmotJChDT05GSUdfTUFDSF9QQ00wNDMpCSs9IG1hY2gtcGNtMDQzLm8KIG9iai0kKENPTkZJR19NQUNIX0FSTUFESUxMTzVYMCkgKz0gbWFjaC1hcm1hZGlsbG81eDAubwotb2JqLSQoQ09ORklHX01BQ0hfTVgzNV8zRFMpCSs9IG1hY2gtbXgzNXBkay5vCitvYmotJChDT05GSUdfTUFDSF9NWDM1XzNEUykJKz0gbWFjaC1teDM1XzNkcy5vCiBvYmotJChDT05GSUdfTUFDSF9LWk1fQVJNMTFfMDEpCSs9IG1hY2gta3ptX2FybTExXzAxLm8KK29iai0kKENPTkZJR19NQUNIX0VVS1JFQV9DUFVJTVgzNSkJKz0gbWFjaC1jcHVpbXgzNS5vCitvYmotJChDT05GSUdfTUFDSF9FVUtSRUFfTUJJTVhTRDM1X0JBU0VCT0FSRCkJKz0gZXVrcmVhX21iaW14c2QtYmFzZWJvYXJkLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLWlteDM1LmMgYi9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzNS5jCmluZGV4IDlmM2U5NDNlLi5kM2FmMGZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLWlteDM1LmMKQEAgLTM1OSw3ICszNTksNyBAQAogREVGSU5FX0NMT0NLKGkyYzJfY2xrLCAgIDEsIENDTV9DR1IxLCAxMiwgZ2V0X3JhdGVfaXBnX3BlciwgTlVMTCk7CiBERUZJTkVfQ0xPQ0soaTJjM19jbGssICAgMiwgQ0NNX0NHUjEsIDE0LCBnZXRfcmF0ZV9pcGdfcGVyLCBOVUxMKTsKIERFRklORV9DTE9DSyhpb211eGNfY2xrLCAwLCBDQ01fQ0dSMSwgMTYsIE5VTEwsIE5VTEwpOwotREVGSU5FX0NMT0NLKGlwdV9jbGssICAgIDAsIENDTV9DR1IxLCAxOCwgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0soaXB1X2NsaywgICAgMCwgQ0NNX0NHUjEsIDE4LCBnZXRfcmF0ZV9haGIsIE5VTEwpOwogREVGSU5FX0NMT0NLKGtwcF9jbGssICAgIDAsIENDTV9DR1IxLCAyMCwgZ2V0X3JhdGVfaXBnLCBOVUxMKTsKIERFRklORV9DTE9DSyhtbGJfY2xrLCAgICAwLCBDQ01fQ0dSMSwgMjIsIGdldF9yYXRlX2FoYiwgTlVMTCk7CiBERUZJTkVfQ0xPQ0sobXNoY19jbGssICAgMCwgQ0NNX0NHUjEsIDI0LCBnZXRfcmF0ZV9tc2hjLCBOVUxMKTsKQEAgLTQyOCw4ICs0MjgsOCBAQAogc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImFzcmMiLCBhc3JjX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImF0YSIsIGF0YV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjYW4iLCBjYW4xX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNhbiIsIGNhbjJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiZmxleGNhbi4wIiwgTlVMTCwgY2FuMV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJmbGV4Y2FuLjEiLCBOVUxMLCBjYW4yX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMCIsIE5VTEwsIGNzcGkxX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMSIsIE5VTEwsIGNzcGkyX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImVjdCIsIGVjdF9jbGspCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLWlteDMxLmggYi9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLWlteDMxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IxYTQ0YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMtaW14MzEuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFBlbmd1dHJvbml4CisgKiBVd2UgS2xlaW5lLUtvZW5pZyA8dS5rbGVpbmUta29lbmlnQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxtYWNoL214MzEuaD4KKyNpbmNsdWRlIDxtYWNoL2RldmljZXMtY29tbW9uLmg+CisKKyNkZWZpbmUgaW14MzFfYWRkX2lteF9pMmMwKHBkYXRhKQlcCisJaW14X2FkZF9pbXhfaTJjKDAsIE1YMzFfSTJDMV9CQVNFX0FERFIsIFNaXzRLLCBNWDMxX0lOVF9JMkMxLCBwZGF0YSkKKyNkZWZpbmUgaW14MzFfYWRkX2lteF9pMmMxKHBkYXRhKQlcCisJaW14X2FkZF9pbXhfaTJjKDEsIE1YMzFfSTJDMl9CQVNFX0FERFIsIFNaXzRLLCBNWDMxX0lOVF9JMkMyLCBwZGF0YSkKKyNkZWZpbmUgaW14MzFfYWRkX2lteF9pMmMyKHBkYXRhKQlcCisJaW14X2FkZF9pbXhfaTJjKDIsIE1YMzFfSTJDM19CQVNFX0FERFIsIFNaXzRLLCBNWDMxX0lOVF9JMkMzLCBwZGF0YSkKKworI2RlZmluZSBpbXgzMV9hZGRfaW14X3VhcnQwKHBkYXRhKQlcCisJaW14X2FkZF9pbXhfdWFydF8xaXJxKDAsIE1YMzFfVUFSVDFfQkFTRV9BRERSLCBTWl8xNkssIE1YMzFfSU5UX1VBUlQxLCBwZGF0YSkKKyNkZWZpbmUgaW14MzFfYWRkX2lteF91YXJ0MShwZGF0YSkJXAorCWlteF9hZGRfaW14X3VhcnRfMWlycSgxLCBNWDMxX1VBUlQyX0JBU0VfQUREUiwgU1pfMTZLLCBNWDMxX0lOVF9VQVJUMiwgcGRhdGEpCisjZGVmaW5lIGlteDMxX2FkZF9pbXhfdWFydDIocGRhdGEpCVwKKwlpbXhfYWRkX2lteF91YXJ0XzFpcnEoMiwgTVgzMV9VQVJUM19CQVNFX0FERFIsIFNaXzE2SywgTVgzMV9JTlRfVUFSVDMsIHBkYXRhKQorI2RlZmluZSBpbXgzMV9hZGRfaW14X3VhcnQzKHBkYXRhKQlcCisJaW14X2FkZF9pbXhfdWFydF8xaXJxKDMsIE1YMzFfVUFSVDRfQkFTRV9BRERSLCBTWl8xNkssIE1YMzFfSU5UX1VBUlQ0LCBwZGF0YSkKKyNkZWZpbmUgaW14MzFfYWRkX2lteF91YXJ0NChwZGF0YSkJXAorCWlteF9hZGRfaW14X3VhcnRfMWlycSg0LCBNWDMxX1VBUlQ1X0JBU0VfQUREUiwgU1pfMTZLLCBNWDMxX0lOVF9VQVJUNSwgcGRhdGEpCisKKyNkZWZpbmUgaW14MzFfYWRkX214Y19uYW5kKHBkYXRhKQlcCisJaW14X2FkZF9teGNfbmFuZF92MShNWDMxX05GQ19CQVNFX0FERFIsIE1YMzFfSU5UX05BTkRGQywgcGRhdGEpCisKKyNkZWZpbmUgaW14MzFfYWRkX3NwaV9pbXgwKHBkYXRhKQlcCisJaW14X2FkZF9zcGlfaW14KDAsIE1YMzFfQ1NQSTFfQkFTRV9BRERSLCBTWl80SywgTVgzMV9JTlRfQ1NQSTEsIHBkYXRhKQorI2RlZmluZSBpbXgzMV9hZGRfc3BpX2lteDEocGRhdGEpCVwKKwlpbXhfYWRkX3NwaV9pbXgoMSwgTVgzMV9DU1BJMl9CQVNFX0FERFIsIFNaXzRLLCBNWDMxX0lOVF9DU1BJMiwgcGRhdGEpCisjZGVmaW5lIGlteDMxX2FkZF9zcGlfaW14MihwZGF0YSkJXAorCWlteF9hZGRfc3BpX2lteCgyLCBNWDMxX0NTUEkzX0JBU0VfQUREUiwgU1pfNEssIE1YMzFfSU5UX0NTUEkzLCBwZGF0YSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMtaW14MzUuaCBiL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMtaW14MzUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmE0MzFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy1pbXgzNS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGVuZ3V0cm9uaXgKKyAqIFV3ZSBLbGVpbmUtS29lbmlnIDx1LmtsZWluZS1rb2VuaWdAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPG1hY2gvbXgzNS5oPgorI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy1jb21tb24uaD4KKworI2RlZmluZSBpbXgzNV9hZGRfZmxleGNhbjAocGRhdGEpCVwKKwlpbXhfYWRkX2ZsZXhjYW4oMCwgTVgzNV9DQU4xX0JBU0VfQUREUiwgU1pfMTZLLCBNWDM1X0lOVF9DQU4xLCBwZGF0YSkKKyNkZWZpbmUgaW14MzVfYWRkX2ZsZXhjYW4xKHBkYXRhKQlcCisJaW14X2FkZF9mbGV4Y2FuKDEsIE1YMzVfQ0FOMl9CQVNFX0FERFIsIFNaXzE2SywgTVgzNV9JTlRfQ0FOMiwgcGRhdGEpCisKKyNkZWZpbmUgaW14MzVfYWRkX2lteF9pMmMwKHBkYXRhKQlcCisJaW14X2FkZF9pbXhfaTJjKDAsIE1YMzVfSTJDMV9CQVNFX0FERFIsIFNaXzRLLCBNWDM1X0lOVF9JMkMxLCBwZGF0YSkKKyNkZWZpbmUgaW14MzVfYWRkX2lteF9pMmMxKHBkYXRhKQlcCisJaW14X2FkZF9pbXhfaTJjKDEsIE1YMzVfSTJDMl9CQVNFX0FERFIsIFNaXzRLLCBNWDM1X0lOVF9JMkMyLCBwZGF0YSkKKyNkZWZpbmUgaW14MzVfYWRkX2lteF9pMmMyKHBkYXRhKQlcCisJaW14X2FkZF9pbXhfaTJjKDIsIE1YMzVfSTJDM19CQVNFX0FERFIsIFNaXzRLLCBNWDM1X0lOVF9JMkMzLCBwZGF0YSkKKworI2RlZmluZSBpbXgzNV9hZGRfaW14X3VhcnQwKHBkYXRhKQlcCisJaW14X2FkZF9pbXhfdWFydF8xaXJxKDAsIE1YMzVfVUFSVDFfQkFTRV9BRERSLCBTWl8xNkssIE1YMzVfSU5UX1VBUlQxLCBwZGF0YSkKKyNkZWZpbmUgaW14MzVfYWRkX2lteF91YXJ0MShwZGF0YSkJXAorCWlteF9hZGRfaW14X3VhcnRfMWlycSgxLCBNWDM1X1VBUlQyX0JBU0VfQUREUiwgU1pfMTZLLCBNWDM1X0lOVF9VQVJUMiwgcGRhdGEpCisjZGVmaW5lIGlteDM1X2FkZF9pbXhfdWFydDIocGRhdGEpCVwKKwlpbXhfYWRkX2lteF91YXJ0XzFpcnEoMiwgTVgzNV9VQVJUM19CQVNFX0FERFIsIFNaXzE2SywgTVgzNV9JTlRfVUFSVDMsIHBkYXRhKQorCisjZGVmaW5lIGlteDM1X2FkZF9teGNfbmFuZChwZGF0YSkJXAorCWlteF9hZGRfbXhjX25hbmRfdjIxKE1YMzVfTkZDX0JBU0VfQUREUiwgTVgzNV9JTlRfTkFOREZDLCBwZGF0YSkKKworI2RlZmluZSBpbXgzNV9hZGRfc3BpX2lteDAocGRhdGEpCVwKKwlpbXhfYWRkX3NwaV9pbXgoMCwgTVgzNV9DU1BJMV9CQVNFX0FERFIsIFNaXzRLLCBNWDM1X0lOVF9DU1BJMSwgcGRhdGEpCisjZGVmaW5lIGlteDM1X2FkZF9zcGlfaW14MShwZGF0YSkJXAorCWlteF9hZGRfc3BpX2lteCgxLCBNWDM1X0NTUEkyX0JBU0VfQUREUiwgU1pfNEssIE1YMzVfSU5UX0NTUEkyLCBwZGF0YSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuYwppbmRleCBkYjdhY2Q2Li5hNGZkMWEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5jCkBAIC0yNSwxMDggKzI1LDEwIEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgogI2luY2x1ZGUgPG1hY2gvbXgzX2NhbWVyYS5oPgogCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQwW10gPSB7Ci0JewotCQkuc3RhcnQgPSBVQVJUMV9CQVNFX0FERFIsCi0JCS5lbmQgPSBVQVJUMV9CQVNFX0FERFIgKyAweDBCNSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQgPSBNWENfSU5UX1VBUlQxLAotCQkuZW5kID0gTVhDX0lOVF9VQVJUMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlMCA9IHsKLQkubmFtZSA9ICJpbXgtdWFydCIsCi0JLmlkID0gMCwKLQkucmVzb3VyY2UgPSB1YXJ0MCwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodWFydDApLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MVtdID0gewotCXsKLQkJLnN0YXJ0ID0gVUFSVDJfQkFTRV9BRERSLAotCQkuZW5kID0gVUFSVDJfQkFTRV9BRERSICsgMHgwQjUsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ID0gTVhDX0lOVF9VQVJUMiwKLQkJLmVuZCA9IE1YQ19JTlRfVUFSVDIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTEgPSB7Ci0JLm5hbWUgPSAiaW14LXVhcnQiLAotCS5pZCA9IDEsCi0JLnJlc291cmNlID0gdWFydDEsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHVhcnQxKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDJbXSA9IHsKLQl7Ci0JCS5zdGFydCA9IFVBUlQzX0JBU0VfQUREUiwKLQkJLmVuZCA9IFVBUlQzX0JBU0VfQUREUiArIDB4MEI1LAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydCA9IE1YQ19JTlRfVUFSVDMsCi0JCS5lbmQgPSBNWENfSU5UX1VBUlQzLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2UyID0gewotCS5uYW1lID0gImlteC11YXJ0IiwKLQkuaWQgPSAyLAotCS5yZXNvdXJjZSA9IHVhcnQyLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh1YXJ0MiksCi19OwotCi0jaWZkZWYgQ09ORklHX0FSQ0hfTVgzMQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0M1tdID0gewotCXsKLQkJLnN0YXJ0ID0gVUFSVDRfQkFTRV9BRERSLAotCQkuZW5kID0gVUFSVDRfQkFTRV9BRERSICsgMHgwQjUsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ID0gTVhDX0lOVF9VQVJUNCwKLQkJLmVuZCA9IE1YQ19JTlRfVUFSVDQsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTMgPSB7Ci0JLm5hbWUgPSAiaW14LXVhcnQiLAotCS5pZCA9IDMsCi0JLnJlc291cmNlID0gdWFydDMsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHVhcnQzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDRbXSA9IHsKLQl7Ci0JCS5zdGFydCA9IFVBUlQ1X0JBU0VfQUREUiwKLQkJLmVuZCA9IFVBUlQ1X0JBU0VfQUREUiArIDB4MEI1LAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydCA9IE1YQ19JTlRfVUFSVDUsCi0JCS5lbmQgPSBNWENfSU5UX1VBUlQ1LAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2U0ID0gewotCS5uYW1lID0gImlteC11YXJ0IiwKLQkuaWQgPSA0LAotCS5yZXNvdXJjZSA9IHVhcnQ0LAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh1YXJ0NCksCi19OwotI2VuZGlmIC8qIENPTkZJR19BUkNIX01YMzEgKi8KLQogLyogR1BJTyBwb3J0IGRlc2NyaXB0aW9uICovCiBzdGF0aWMgc3RydWN0IG14Y19ncGlvX3BvcnQgaW14X2dwaW9fcG9ydHNbXSA9IHsKIAl7CkBAIC0xNDcsNyArNDksNyBAQAogCX0KIH07CiAKLWludCBfX2luaXQgbXhjX3JlZ2lzdGVyX2dwaW9zKHZvaWQpCitpbnQgX19pbml0IGlteDN4X3JlZ2lzdGVyX2dwaW9zKHZvaWQpCiB7CiAJcmV0dXJuIG14Y19ncGlvX2luaXQoaW14X2dwaW9fcG9ydHMsIEFSUkFZX1NJWkUoaW14X2dwaW9fcG9ydHMpKTsKIH0KQEAgLTE2Nyw4MiArNjksNiBAQAogCS5yZXNvdXJjZSA9IG14Y193MV9tYXN0ZXJfcmVzb3VyY2VzLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfbmFuZF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IDAsIC8qIHJ1bnRpbWUgZGVwZW5kZW50ICovCi0JCS5lbmQJPSAwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydAk9IE1YQ19JTlRfTkFOREZDLAotCQkuZW5kCT0gTVhDX0lOVF9OQU5ERkMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19uYW5kX2RldmljZSA9IHsKLQkubmFtZSA9ICJteGNfbmFuZCIsCi0JLmlkID0gMCwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX25hbmRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBteGNfbmFuZF9yZXNvdXJjZXMsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19pMmMwX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0ID0gSTJDX0JBU0VfQUREUiwKLQkJLmVuZCA9IEkyQ19CQVNFX0FERFIgKyBTWl80SyAtIDEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ID0gTVhDX0lOVF9JMkMsCi0JCS5lbmQgPSBNWENfSU5UX0kyQywKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2kyY19kZXZpY2UwID0gewotCS5uYW1lID0gImlteC1pMmMiLAotCS5pZCA9IDAsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19pMmMwX3Jlc291cmNlcyksCi0JLnJlc291cmNlID0gbXhjX2kyYzBfcmVzb3VyY2VzLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfaTJjMV9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydCA9IEkyQzJfQkFTRV9BRERSLAotCQkuZW5kID0gSTJDMl9CQVNFX0FERFIgKyBTWl80SyAtIDEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ID0gTVhDX0lOVF9JMkMyLAotCQkuZW5kID0gTVhDX0lOVF9JMkMyLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTEgPSB7Ci0JLm5hbWUgPSAiaW14LWkyYyIsCi0JLmlkID0gMSwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX2kyYzFfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBteGNfaTJjMV9yZXNvdXJjZXMsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19pMmMyX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0ID0gSTJDM19CQVNFX0FERFIsCi0JCS5lbmQgPSBJMkMzX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQgPSBNWENfSU5UX0kyQzMsCi0JCS5lbmQgPSBNWENfSU5UX0kyQzMsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19pMmNfZGV2aWNlMiA9IHsKLQkubmFtZSA9ICJpbXgtaTJjIiwKLQkuaWQgPSAyLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfaTJjMl9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSA9IG14Y19pMmMyX3Jlc291cmNlcywKLX07Ci0KICNpZmRlZiBDT05GSUdfQVJDSF9NWDMxCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y3NkaGMwX3Jlc291cmNlc1tdID0gewogCXsKQEAgLTQ1NSw2OCArMjgxLDcgQEAKIAkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3VzYmgyX3Jlc291cmNlcyksCiB9OwogCi0vKgotICogU1BJIG1hc3RlciBjb250cm9sbGVyCi0gKiAzIGNoYW5uZWxzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3NwaV8wX3Jlc291cmNlc1tdID0gewotCXsKLQkgICAgICAgLnN0YXJ0ID0gQ1NQSTFfQkFTRV9BRERSLAotCSAgICAgICAuZW5kID0gQ1NQSTFfQkFTRV9BRERSICsgU1pfNEsgLSAxLAotCSAgICAgICAuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JICAgICAgIC5zdGFydCA9IE1YQ19JTlRfQ1NQSTEsCi0JICAgICAgIC5lbmQgPSBNWENfSU5UX0NTUEkxLAotCSAgICAgICAuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfc3BpXzFfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQgPSBDU1BJMl9CQVNFX0FERFIsCi0JCS5lbmQgPSBDU1BJMl9CQVNFX0FERFIgKyBTWl80SyAtIDEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ID0gTVhDX0lOVF9DU1BJMiwKLQkJLmVuZCA9IE1YQ19JTlRfQ1NQSTIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zcGlfMl9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydCA9IENTUEkzX0JBU0VfQUREUiwKLQkJLmVuZCA9IENTUEkzX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQgPSBNWENfSU5UX0NTUEkzLAotCQkuZW5kID0gTVhDX0lOVF9DU1BJMywKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3NwaV9kZXZpY2UwID0gewotCS5uYW1lID0gInNwaV9pbXgiLAotCS5pZCA9IDAsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19zcGlfMF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSA9IG14Y19zcGlfMF9yZXNvdXJjZXMsCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMSA9IHsKLQkubmFtZSA9ICJzcGlfaW14IiwKLQkuaWQgPSAxLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc3BpXzFfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBteGNfc3BpXzFfcmVzb3VyY2VzLAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTIgPSB7Ci0JLm5hbWUgPSAic3BpX2lteCIsCi0JLmlkID0gMiwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3NwaV8yX3Jlc291cmNlcyksCi0JLnJlc291cmNlID0gbXhjX3NwaV8yX3Jlc291cmNlcywKLX07Ci0KLSNpZmRlZiBDT05GSUdfQVJDSF9NWDM1CisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9NWDM1KQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfZmVjX3Jlc291cmNlc1tdID0gewogCXsKIAkJLnN0YXJ0CT0gTVhDX0ZFQ19CQVNFX0FERFIsCkBAIC02MjgsMTYgKzM5MywxNSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBteDNfZGV2aWNlc19pbml0KHZvaWQpCiB7CisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9NWDMxKQogCWlmIChjcHVfaXNfbXgzMSgpKSB7Ci0JCW14Y19uYW5kX3Jlc291cmNlc1swXS5zdGFydCA9IE1YMzFfTkZDX0JBU0VfQUREUjsKLQkJbXhjX25hbmRfcmVzb3VyY2VzWzBdLmVuZCA9IE1YMzFfTkZDX0JBU0VfQUREUiArIDB4ZmZmOwogCQlpbXhfd2R0X3Jlc291cmNlc1swXS5zdGFydCA9IE1YMzFfV0RPR19CQVNFX0FERFI7CiAJCWlteF93ZHRfcmVzb3VyY2VzWzBdLmVuZCA9IE1YMzFfV0RPR19CQVNFX0FERFIgKyAweDNmZmY7CiAJCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19ybmdhX2RldmljZSwgTlVMTCk7CiAJfQorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9NWDM1KQogCWlmIChjcHVfaXNfbXgzNSgpKSB7Ci0JCW14Y19uYW5kX3Jlc291cmNlc1swXS5zdGFydCA9IE1YMzVfTkZDX0JBU0VfQUREUjsKLQkJbXhjX25hbmRfcmVzb3VyY2VzWzBdLmVuZCA9IE1YMzVfTkZDX0JBU0VfQUREUiArIDB4MWZmZjsKIAkJb3RnX3Jlc291cmNlc1swXS5zdGFydCA9IE1YMzVfT1RHX0JBU0VfQUREUjsKIAkJb3RnX3Jlc291cmNlc1swXS5lbmQgPSBNWDM1X09UR19CQVNFX0FERFIgKyAweDFmZjsKIAkJb3RnX3Jlc291cmNlc1sxXS5zdGFydCA9IE1YQ19JTlRfVVNCT1RHOwpAQCAtNjUzLDYgKzQxNyw3IEBACiAJCWlteF93ZHRfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gTVgzNV9XRE9HX0JBU0VfQUREUjsKIAkJaW14X3dkdF9yZXNvdXJjZXNbMF0uZW5kID0gTVgzNV9XRE9HX0JBU0VfQUREUiArIDB4M2ZmZjsKIAl9CisjZW5kaWYKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5oIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5oCmluZGV4IDJjM2M4NjQuLmU1NTM1MjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuaAorKysgYi9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmgKQEAgLTEsMTQgKzEsNCBAQAotCi1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2UwOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlMTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTI7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2UzOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlNDsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y193MV9tYXN0ZXJfZGV2aWNlOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX25hbmRfZGV2aWNlOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2kyY19kZXZpY2UwOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2kyY19kZXZpY2UxOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2kyY19kZXZpY2UyOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXgzX2lwdTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14M19mYjsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14M19jYW1lcmE7CkBAIC0yMCw5ICsxMCw2IEBACiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDE7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDI7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfcm5nYV9kZXZpY2U7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTA7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTE7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTI7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3NpX2RldmljZTA7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3NpX2RldmljZTE7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3NpX2RldmljZTE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9ldWtyZWFfbWJpbXhzZC1iYXNlYm9hcmQuYyBiL2FyY2gvYXJtL21hY2gtbXgzL2V1a3JlYV9tYmlteHNkLWJhc2Vib2FyZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYzUwMDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14My9ldWtyZWFfbWJpbXhzZC1iYXNlYm9hcmQuYwpAQCAtMCwwICsxLDI2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBFcmljIEJlbmFyZCAtIGVyaWNAZXVrcmVhLmNvbQorICoKKyAqIEJhc2VkIG9uIHBjbTk3MC1iYXNlYm9hcmQuYyB3aGljaCBpcyA6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSnVlcmdlbiBCZWlzZXJ0IChrZXJuZWxAcGVuZ3V0cm9uaXguZGUpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPHZpZGVvL3BsYXRmb3JtX2xjZC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgzNS5oPgorI2luY2x1ZGUgPG1hY2gvaXB1Lmg+CisjaW5jbHVkZSA8bWFjaC9teDNmYi5oPgorI2luY2x1ZGUgPG1hY2gvYXVkbXV4Lmg+CisjaW5jbHVkZSA8bWFjaC9zc2kuaD4KKworI2luY2x1ZGUgImRldmljZXMtaW14MzUuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlIGZiX21vZGVkYltdID0geworCXsKKwkJLm5hbWUJCT0gIkNNT19RVkdBIiwKKwkJLnJlZnJlc2gJPSA2MCwKKwkJLnhyZXMJCT0gMzIwLAorCQkueXJlcwkJPSAyNDAsCisJCS5waXhjbG9jawk9IEtIWjJQSUNPUyg2NTAwKSwKKwkJLmxlZnRfbWFyZ2luCT0gNjgsCisJCS5yaWdodF9tYXJnaW4JPSAyMCwKKwkJLnVwcGVyX21hcmdpbgk9IDE1LAorCQkubG93ZXJfbWFyZ2luCT0gNCwKKwkJLmhzeW5jX2xlbgk9IDMwLAorCQkudnN5bmNfbGVuCT0gMywKKwkJLnN5bmMJCT0gMCwKKwkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCisJCS5mbGFnCQk9IDAsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXB1X3BsYXRmb3JtX2RhdGEgbXgzX2lwdV9kYXRhID0geworCS5pcnFfYmFzZSA9IE1YQ19JUFVfSVJRX1NUQVJULAorfTsKKworc3RhdGljIHN0cnVjdCBteDNmYl9wbGF0Zm9ybV9kYXRhIG14M2ZiX3BkYXRhID0geworCS5kbWFfZGV2CT0gJm14M19pcHUuZGV2LAorCS5uYW1lCQk9ICJDTU9fUVZHQSIsCisJLm1vZGUJCT0gZmJfbW9kZWRiLAorCS5udW1fbW9kZXMJPSBBUlJBWV9TSVpFKGZiX21vZGVkYiksCit9OworCitzdGF0aWMgc3RydWN0IHBhZF9kZXNjIGV1a3JlYV9tYmlteHNkX3BhZHNbXSA9IHsKKwkvKiBMQ0QgKi8KKwlNWDM1X1BBRF9MRDBfX0lQVV9ESVNQQl9EQVRfMCwKKwlNWDM1X1BBRF9MRDFfX0lQVV9ESVNQQl9EQVRfMSwKKwlNWDM1X1BBRF9MRDJfX0lQVV9ESVNQQl9EQVRfMiwKKwlNWDM1X1BBRF9MRDNfX0lQVV9ESVNQQl9EQVRfMywKKwlNWDM1X1BBRF9MRDRfX0lQVV9ESVNQQl9EQVRfNCwKKwlNWDM1X1BBRF9MRDVfX0lQVV9ESVNQQl9EQVRfNSwKKwlNWDM1X1BBRF9MRDZfX0lQVV9ESVNQQl9EQVRfNiwKKwlNWDM1X1BBRF9MRDdfX0lQVV9ESVNQQl9EQVRfNywKKwlNWDM1X1BBRF9MRDhfX0lQVV9ESVNQQl9EQVRfOCwKKwlNWDM1X1BBRF9MRDlfX0lQVV9ESVNQQl9EQVRfOSwKKwlNWDM1X1BBRF9MRDEwX19JUFVfRElTUEJfREFUXzEwLAorCU1YMzVfUEFEX0xEMTFfX0lQVV9ESVNQQl9EQVRfMTEsCisJTVgzNV9QQURfTEQxMl9fSVBVX0RJU1BCX0RBVF8xMiwKKwlNWDM1X1BBRF9MRDEzX19JUFVfRElTUEJfREFUXzEzLAorCU1YMzVfUEFEX0xEMTRfX0lQVV9ESVNQQl9EQVRfMTQsCisJTVgzNV9QQURfTEQxNV9fSVBVX0RJU1BCX0RBVF8xNSwKKwlNWDM1X1BBRF9MRDE2X19JUFVfRElTUEJfREFUXzE2LAorCU1YMzVfUEFEX0xEMTdfX0lQVV9ESVNQQl9EQVRfMTcsCisJTVgzNV9QQURfRDNfSFNZTkNfX0lQVV9ESVNQQl9EM19IU1lOQywKKwlNWDM1X1BBRF9EM19GUFNISUZUX19JUFVfRElTUEJfRDNfQ0xLLAorCU1YMzVfUEFEX0QzX0RSRFlfX0lQVV9ESVNQQl9EM19EUkRZLAorCU1YMzVfUEFEX0QzX1ZTWU5DX19JUFVfRElTUEJfRDNfVlNZTkMsCisJLyogQmFja2xpZ2h0ICovCisJTVgzNV9QQURfQ09OVFJBU1RfX0lQVV9ESVNQQl9DT05UUiwKKwkvKiBMQ0RfUFdSICovCisJTVgzNV9QQURfRDNfQ0xTX19HUElPMV80LAorCS8qIExFRCAqLworCU1YMzVfUEFEX0xEMjNfX0dQSU8zXzI5LAorCS8qIFNXSVRDSCAqLworCU1YMzVfUEFEX0xEMTlfX0dQSU8zXzI1LAorCS8qIFVBUlQyICovCisJTVgzNV9QQURfQ1RTMl9fVUFSVDJfQ1RTLAorCU1YMzVfUEFEX1JUUzJfX1VBUlQyX1JUUywKKwlNWDM1X1BBRF9UWEQyX19VQVJUMl9UWERfTVVYLAorCU1YMzVfUEFEX1JYRDJfX1VBUlQyX1JYRF9NVVgsCisJLyogSTJTICovCisJTVgzNV9QQURfU1RYRlM0X19BVURNVVhfQVVENF9UWEZTLAorCU1YMzVfUEFEX1NUWEQ0X19BVURNVVhfQVVENF9UWEQsCisJTVgzNV9QQURfU1JYRDRfX0FVRE1VWF9BVUQ0X1JYRCwKKwlNWDM1X1BBRF9TQ0s0X19BVURNVVhfQVVENF9UWEMsCit9OworCisjZGVmaW5lIEdQSU9fTEVEMQkoMiAqIDMyICsgMjkpCisjZGVmaW5lIEdQSU9fU1dJVENIMQkoMiAqIDMyICsgMjUpCisjZGVmaW5lIEdQSU9fTENEUFdSCSg0KQorCitzdGF0aWMgdm9pZCBldWtyZWFfbWJpbXhzZF9sY2RfcG93ZXJfc2V0KHN0cnVjdCBwbGF0X2xjZF9kYXRhICpwZCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgcG93ZXIpCit7CisJaWYgKHBvd2VyKQorCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19MQ0RQV1IsIDEpOworCWVsc2UKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTENEUFdSLCAwKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0X2xjZF9kYXRhIGV1a3JlYV9tYmlteHNkX2xjZF9wb3dlcl9kYXRhID0geworCS5zZXRfcG93ZXIJCT0gZXVrcmVhX21iaW14c2RfbGNkX3Bvd2VyX3NldCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV1a3JlYV9tYmlteHNkX2xjZF9wb3dlcmRldiA9IHsKKwkubmFtZQkJCT0gInBsYXRmb3JtLWxjZCIsCisJLmRldi5wbGF0Zm9ybV9kYXRhCT0gJmV1a3JlYV9tYmlteHNkX2xjZF9wb3dlcl9kYXRhLAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBldWtyZWFfbWJpbXhzZF9sZWRzW10gPSB7CisJeworCQkubmFtZQkJCT0gImxlZDEiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJCS5ncGlvCQkJPSBHUElPX0xFRDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBldWtyZWFfbWJpbXhzZF9sZWRfaW5mbyA9IHsKKwkubGVkcwkJPSBldWtyZWFfbWJpbXhzZF9sZWRzLAorCS5udW1fbGVkcwk9IEFSUkFZX1NJWkUoZXVrcmVhX21iaW14c2RfbGVkcyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBldWtyZWFfbWJpbXhzZF9sZWRzX2dwaW8gPSB7CisJLm5hbWUJPSAibGVkcy1ncGlvIiwKKwkuaWQJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZldWtyZWFfbWJpbXhzZF9sZWRfaW5mbywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGV1a3JlYV9tYmlteHNkX2dwaW9fYnV0dG9uc1tdID0geworCXsKKwkJLmdwaW8JCT0gR1BJT19TV0lUQ0gxLAorCQkuY29kZQkJPSBCVE5fMCwKKwkJLmRlc2MJCT0gIkJQMSIsCisJCS5hY3RpdmVfbG93CT0gMSwKKwkJLndha2V1cAkJPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGV1a3JlYV9tYmlteHNkX2J1dHRvbl9kYXRhID0geworCS5idXR0b25zCT0gZXVrcmVhX21iaW14c2RfZ3Bpb19idXR0b25zLAorCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoZXVrcmVhX21iaW14c2RfZ3Bpb19idXR0b25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV1a3JlYV9tYmlteHNkX2J1dHRvbl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImdwaW8ta2V5cyIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZXVrcmVhX21iaW14c2RfYnV0dG9uX2RhdGEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZldWtyZWFfbWJpbXhzZF9sZWRzX2dwaW8sCisJJmV1a3JlYV9tYmlteHNkX2J1dHRvbl9kZXZpY2UsCisJJmV1a3JlYV9tYmlteHNkX2xjZF9wb3dlcmRldiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgX19pbml0Y29uc3QgPSB7CisJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gZXVrcmVhX21iaW14c2RfaTJjX2RldmljZXNbXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJ0bHYzMjBhaWMyMyIsIDB4MWEpLAorCX0sCit9OworCitzdHJ1Y3QgaW14X3NzaV9wbGF0Zm9ybV9kYXRhIGV1a3JlYV9tYmlteHNkX3NzaV9wZGF0YSA9IHsKKwkuZmxhZ3MgPSBJTVhfU1NJX1NZTiB8IElNWF9TU0lfTkVUIHwgSU1YX1NTSV9VU0VfSTJTX1NMQVZFLAorfTsKKworLyoKKyAqIHN5c3RlbSBpbml0IGZvciBiYXNlYm9hcmQgdXNhZ2UuIFdpbGwgYmUgY2FsbGVkIGJ5IGNwdWlteDM1IGluaXQuCisgKgorICogQWRkIHBsYXRmb3JtIGRldmljZXMgcHJlc2VudCBvbiB0aGlzIGJhc2Vib2FyZCBhbmQgaW5pdAorICogdGhlbSBmcm9tIENQVSBzaWRlIGFzIGZhciBhcyByZXF1aXJlZCB0byB1c2UgdGhlbSBsYXRlciBvbgorICovCit2b2lkIF9faW5pdCBldWtyZWFfbWJpbXhzZF9iYXNlYm9hcmRfaW5pdCh2b2lkKQoreworCWlmIChteGNfaW9tdXhfdjNfc2V0dXBfbXVsdGlwbGVfcGFkcyhldWtyZWFfbWJpbXhzZF9wYWRzLAorCQkJQVJSQVlfU0laRShldWtyZWFfbWJpbXhzZF9wYWRzKSkpCisJCXByaW50ayhLRVJOX0VSUiAiZXJyb3Igc2V0dGluZyBtYmlteHNkIHBhZHMgIVxuIik7CisKKyNpZiBkZWZpbmVkKENPTkZJR19TTkRfU09DX0VVS1JFQV9UTFYzMjApCisJLyogU1NJIHVuaXQgbWFzdGVyIEkyUyBjb2RlYyBjb25uZWN0ZWQgdG8gU1NJX0FVRDQgKi8KKwlteGNfYXVkbXV4X3YyX2NvbmZpZ3VyZV9wb3J0KDAsCisJCQlNWENfQVVETVVYX1YyX1BUQ1JfU1lOIHwKKwkJCU1YQ19BVURNVVhfVjJfUFRDUl9URlNESVIgfAorCQkJTVhDX0FVRE1VWF9WMl9QVENSX1RGU0VMKDMpIHwKKwkJCU1YQ19BVURNVVhfVjJfUFRDUl9UQ0xLRElSIHwKKwkJCU1YQ19BVURNVVhfVjJfUFRDUl9UQ1NFTCgzKSwKKwkJCU1YQ19BVURNVVhfVjJfUERDUl9SWERTRUwoMykKKwkpOworCW14Y19hdWRtdXhfdjJfY29uZmlndXJlX3BvcnQoMywKKwkJCU1YQ19BVURNVVhfVjJfUFRDUl9TWU4sCisJCQlNWENfQVVETVVYX1YyX1BEQ1JfUlhEU0VMKDApCisJKTsKKyNlbmRpZgorCisJaW14MzVfYWRkX2lteF91YXJ0MSgmdWFydF9wZGF0YSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXgzX2lwdSwgJm14M19pcHVfZGF0YSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXgzX2ZiLCAmbXgzZmJfcGRhdGEpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmaW14X3NzaV9kZXZpY2UwLCAmZXVrcmVhX21iaW14c2Rfc3NpX3BkYXRhKTsKKworCWdwaW9fcmVxdWVzdChHUElPX0xFRDEsICJMRUQxIik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTEVEMSwgMSk7CisJZ3Bpb19mcmVlKEdQSU9fTEVEMSk7CisKKwlncGlvX3JlcXVlc3QoR1BJT19TV0lUQ0gxLCAiU1dJVENIMSIpOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fU1dJVENIMSk7CisJZ3Bpb19mcmVlKEdQSU9fU1dJVENIMSk7CisKKwlncGlvX3JlcXVlc3QoR1BJT19MQ0RQV1IsICJMQ0RQV1IiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19MQ0RQV1IsIDEpOworCWdwaW9fZnJlZShHUElPX1NXSVRDSDEpOworCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZXVrcmVhX21iaW14c2RfaTJjX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShldWtyZWFfbWJpbXhzZF9pMmNfZGV2aWNlcykpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLWFybWFkaWxsbzV4MC5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1hcm1hZGlsbG81eDAuYwppbmRleCA1ZjcyZWM5Li45NmFhZGNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLWFybWFkaWxsbzV4MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtYXJtYWRpbGxvNXgwLmMKQEAgLTQ4LDE2ICs0OCwxNCBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CiAjaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KLSNpbmNsdWRlIDxtYWNoL2JvYXJkLWFybWFkaWxsbzV4MC5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9pcHUuaD4KICNpbmNsdWRlIDxtYWNoL214M2ZiLmg+Ci0jaW5jbHVkZSA8bWFjaC9teGNfbmFuZC5oPgogI2luY2x1ZGUgPG1hY2gvbXhjX2VoY2kuaD4KICNpbmNsdWRlIDxtYWNoL3VscGkuaD4KIAorI2luY2x1ZGUgImRldmljZXMtaW14MzEuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAjaW5jbHVkZSAiY3JtX3JlZ3MuaCIKIApAQCAtMzAxLDcgKzI5OSw4IEBACiAvKgogICogTkFORCBGbGFzaAogICovCi1zdGF0aWMgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgYXJtYWRpbGxvNXgwX25hbmRfZmxhc2hfcGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEKK2FybWFkaWxsbzV4MF9uYW5kX2JvYXJkX2luZm8gX19pbml0Y29uc3QgPSB7CiAJLndpZHRoCQk9IDEsCiAJLmh3X2VjYwkJPSAxLAogfTsKQEAgLTQ5MywxMyArNDkyLDEyIEBACiB9OwogCiAvKiBVQVJUIGRldmljZSBkYXRhICovCi1zdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSBfX2luaXRjb25zdCA9IHsKIAkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZhcm1hZGlsbG81eDBfc21jOTExeF9kZXZpY2UsCi0JJm14Y19pMmNfZGV2aWNlMSwKIAkmYXJtYWRpbGxvNXgwX2J1dHRvbl9kZXZpY2UsCiB9OwogCkBAIC01MTIsMTAgKzUxMCwxMSBAQAogCQkJQVJSQVlfU0laRShhcm1hZGlsbG81eDBfcGlucyksICJhcm1hZGlsbG81eDAiKTsKIAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworCWlteDMxX2FkZF9pbXhfaTJjMShOVUxMKTsKIAogCS8qIFJlZ2lzdGVyIFVBUlQgKi8KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMSwgJnVhcnRfcGRhdGEpOworCWlteDMxX2FkZF9pbXhfdWFydDAoJnVhcnRfcGRhdGEpOworCWlteDMxX2FkZF9pbXhfdWFydDEoJnVhcnRfcGRhdGEpOwogCiAJLyogU01TQzkxMTggSVJRIHBpbiAqLwogCWdwaW9fZGlyZWN0aW9uX2lucHV0KE1YMzFfUElOX0dQSU8xXzApOwpAQCAtNTMyLDcgKzUzMSw3IEBACiAJCQkgICAgJmFybWFkaWxsbzV4MF9ub3JfZmxhc2hfcGRhdGEpOwogCiAJLyogUmVnaXN0ZXIgTkFORCBGbGFzaCAqLwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19uYW5kX2RldmljZSwgJmFybWFkaWxsbzV4MF9uYW5kX2ZsYXNoX3BkYXRhKTsKKwlpbXgzMV9hZGRfbXhjX25hbmQoJmFybWFkaWxsbzV4MF9uYW5kX2JvYXJkX2luZm8pOwogCiAJLyogc2V0IE5BTkQgcGFnZSBzaXplIHRvIDJrIGlmIG5vdCBjb25maWd1cmVkIHZpYSBib290IG1vZGUgcGlucyAqLwogCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChNWENfQ0NNX1JDU1IpIHwgKDEgPDwgMzApLCBNWENfQ0NNX1JDU1IpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1jcHVpbXgzNS5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1jcHVpbXgzNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZjk3MGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLWNwdWlteDM1LmMKQEAgLTAsMCArMSwyMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRXJpYyBCZW5hcmQgLSBlcmljQGV1a3JlYS5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwOSBTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3RzYzIwMDcuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3VscGkuaD4KKyNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9ldWtyZWEtYmFzZWJvYXJkcy5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgzNS5oPgorI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KKyNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+CisjaW5jbHVkZSA8bWFjaC91bHBpLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLWlteDM1LmgiCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhIF9faW5pdGNvbnN0ID0geworCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGlteGkyY19wbGF0Zm9ybV9kYXRhCitldWtyZWFfY3B1aW14MzVfaTJjMF9kYXRhIF9faW5pdGNvbnN0ID0geworCS5iaXRyYXRlID0gNTAwMDAsCit9OworCisjZGVmaW5lIFRTQzIwMDdfSVJRR1BJTwkJKDIgKiAzMiArIDIpCitzdGF0aWMgaW50IHRzX2dldF9wZW5kb3duX3N0YXRlKHZvaWQpCit7CisJaW50IHZhbCA9IDA7CisJZ3Bpb19mcmVlKFRTQzIwMDdfSVJRR1BJTyk7CisJZ3Bpb19yZXF1ZXN0KFRTQzIwMDdfSVJRR1BJTywgTlVMTCk7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoVFNDMjAwN19JUlFHUElPKTsKKworCXZhbCA9IGdwaW9fZ2V0X3ZhbHVlKFRTQzIwMDdfSVJRR1BJTyk7CisKKwlncGlvX2ZyZWUoVFNDMjAwN19JUlFHUElPKTsKKwlncGlvX3JlcXVlc3QoVFNDMjAwN19JUlFHUElPLCBOVUxMKTsKKworCXJldHVybiB2YWwgPyAwIDogMTsKK30KKworc3RhdGljIGludCB0c19pbml0KHZvaWQpCit7CisJZ3Bpb19yZXF1ZXN0KFRTQzIwMDdfSVJRR1BJTywgTlVMTCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHNjMjAwN19wbGF0Zm9ybV9kYXRhIHRzYzIwMDdfaW5mbyA9IHsKKwkubW9kZWwJCQk9IDIwMDcsCisJLnhfcGxhdGVfb2htcwkJPSAxODAsCisJLmdldF9wZW5kb3duX3N0YXRlCT0gdHNfZ2V0X3BlbmRvd25fc3RhdGUsCisJLmluaXRfcGxhdGZvcm1faHcJPSB0c19pbml0LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBldWtyZWFfY3B1aW14MzVfaTJjX2RldmljZXNbXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTYzIiwgMHg1MSksCisJfSwgeworCQlJMkNfQk9BUkRfSU5GTygidHNjMjAwNyIsIDB4NDgpLAorCQkudHlwZQkJPSAidHNjMjAwNyIsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJnRzYzIwMDdfaW5mbywKKwkJLmlycQkJPSBncGlvX3RvX2lycShUU0MyMDA3X0lSUUdQSU8pLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJm14Y19mZWNfZGV2aWNlLAorCSZpbXhfd2R0X2RldmljZTAsCit9OworCitzdGF0aWMgc3RydWN0IHBhZF9kZXNjIGV1a3JlYV9jcHVpbXgzNV9wYWRzW10gPSB7CisJLyogVUFSVDEgKi8KKwlNWDM1X1BBRF9DVFMxX19VQVJUMV9DVFMsCisJTVgzNV9QQURfUlRTMV9fVUFSVDFfUlRTLAorCU1YMzVfUEFEX1RYRDFfX1VBUlQxX1RYRF9NVVgsCisJTVgzNV9QQURfUlhEMV9fVUFSVDFfUlhEX01VWCwKKwkvKiBGRUMgKi8KKwlNWDM1X1BBRF9GRUNfVFhfQ0xLX19GRUNfVFhfQ0xLLAorCU1YMzVfUEFEX0ZFQ19SWF9DTEtfX0ZFQ19SWF9DTEssCisJTVgzNV9QQURfRkVDX1JYX0RWX19GRUNfUlhfRFYsCisJTVgzNV9QQURfRkVDX0NPTF9fRkVDX0NPTCwKKwlNWDM1X1BBRF9GRUNfUkRBVEEwX19GRUNfUkRBVEFfMCwKKwlNWDM1X1BBRF9GRUNfVERBVEEwX19GRUNfVERBVEFfMCwKKwlNWDM1X1BBRF9GRUNfVFhfRU5fX0ZFQ19UWF9FTiwKKwlNWDM1X1BBRF9GRUNfTURDX19GRUNfTURDLAorCU1YMzVfUEFEX0ZFQ19NRElPX19GRUNfTURJTywKKwlNWDM1X1BBRF9GRUNfVFhfRVJSX19GRUNfVFhfRVJSLAorCU1YMzVfUEFEX0ZFQ19SWF9FUlJfX0ZFQ19SWF9FUlIsCisJTVgzNV9QQURfRkVDX0NSU19fRkVDX0NSUywKKwlNWDM1X1BBRF9GRUNfUkRBVEExX19GRUNfUkRBVEFfMSwKKwlNWDM1X1BBRF9GRUNfVERBVEExX19GRUNfVERBVEFfMSwKKwlNWDM1X1BBRF9GRUNfUkRBVEEyX19GRUNfUkRBVEFfMiwKKwlNWDM1X1BBRF9GRUNfVERBVEEyX19GRUNfVERBVEFfMiwKKwlNWDM1X1BBRF9GRUNfUkRBVEEzX19GRUNfUkRBVEFfMywKKwlNWDM1X1BBRF9GRUNfVERBVEEzX19GRUNfVERBVEFfMywKKwkvKiBJMkMxICovCisJTVgzNV9QQURfSTJDMV9DTEtfX0kyQzFfU0NMLAorCU1YMzVfUEFEX0kyQzFfREFUX19JMkMxX1NEQSwKKwkvKiBUU0MyMDA3IElSUSAqLworCU1YMzVfUEFEX0FUQV9EQTJfX0dQSU8zXzIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEKK2V1a3JlYV9jcHVpbXgzNV9uYW5kX2JvYXJkX2luZm8gX19pbml0Y29uc3QgPSB7CisJLndpZHRoCQk9IDEsCisJLmh3X2VjYwkJPSAxLAorCS5mbGFzaF9iYnQJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIG90Z19wZGF0YSA9IHsKKwkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VVE1JLAorCS5mbGFncwk9IE1YQ19FSENJX0lOVEVSRkFDRV9ESUZGX1VOSSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSB1c2JoMV9wZGF0YSA9IHsKKwkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9TRVJJQUwsCisJLmZsYWdzCT0gTVhDX0VIQ0lfSU5URVJGQUNFX1NJTkdMRV9VTkkgfCBNWENfRUhDSV9JTlRFUk5BTF9QSFkgfAorCQkgIE1YQ19FSENJX0lQUFVFX0RPV04sCit9OworCitzdGF0aWMgc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgb3RnX2RldmljZV9wZGF0YSA9IHsKKwkub3BlcmF0aW5nX21vZGUJPSBGU0xfVVNCMl9EUl9ERVZJQ0UsCisJLnBoeV9tb2RlCT0gRlNMX1VTQjJfUEhZX1VUTUksCit9OworCitzdGF0aWMgaW50IG90Z19tb2RlX2hvc3Q7CisKK3N0YXRpYyBpbnQgX19pbml0IGV1a3JlYV9jcHVpbXgzNV9vdGdfbW9kZShjaGFyICpvcHRpb25zKQoreworCWlmICghc3RyY21wKG9wdGlvbnMsICJob3N0IikpCisJCW90Z19tb2RlX2hvc3QgPSAxOworCWVsc2UgaWYgKCFzdHJjbXAob3B0aW9ucywgImRldmljZSIpKQorCQlvdGdfbW9kZV9ob3N0ID0gMDsKKwllbHNlCisJCXByX2luZm8oIm90Z19tb2RlIG5laXRoZXIgXCJob3N0XCIgbm9yIFwiZGV2aWNlXCIuICIKKwkJCSJEZWZhdWx0aW5nIHRvIGRldmljZVxuIik7CisJcmV0dXJuIDA7Cit9CitfX3NldHVwKCJvdGdfbW9kZT0iLCBldWtyZWFfY3B1aW14MzVfb3RnX21vZGUpOworCisvKgorICogQm9hcmQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBteGNfYm9hcmRfaW5pdCh2b2lkKQoreworCW14Y19pb211eF92M19zZXR1cF9tdWx0aXBsZV9wYWRzKGV1a3JlYV9jcHVpbXgzNV9wYWRzLAorCQkJQVJSQVlfU0laRShldWtyZWFfY3B1aW14MzVfcGFkcykpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CisKKwlpbXgzNV9hZGRfaW14X3VhcnQwKCZ1YXJ0X3BkYXRhKTsKKwlpbXgzNV9hZGRfbXhjX25hbmQoJmV1a3JlYV9jcHVpbXgzNV9uYW5kX2JvYXJkX2luZm8pOworCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZXVrcmVhX2NwdWlteDM1X2kyY19kZXZpY2VzLAorCQkJQVJSQVlfU0laRShldWtyZWFfY3B1aW14MzVfaTJjX2RldmljZXMpKTsKKwlpbXgzNV9hZGRfaW14X2kyYzAoJmV1a3JlYV9jcHVpbXgzNV9pMmMwX2RhdGEpOworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1VMUEkpCisJaWYgKG90Z19tb2RlX2hvc3QpIHsKKwkJb3RnX3BkYXRhLm90ZyA9IG90Z191bHBpX2NyZWF0ZSgmbXhjX3VscGlfYWNjZXNzX29wcywKKwkJCQlVU0JfT1RHX0RSVl9WQlVTIHwgVVNCX09UR19EUlZfVkJVU19FWFQpOworCisJCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19vdGdfaG9zdCwgJm90Z19wZGF0YSk7CisJfQorCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMSwgJnVzYmgxX3BkYXRhKTsKKyNlbmRpZgorCWlmICghb3RnX21vZGVfaG9zdCkKKwkJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX290Z191ZGNfZGV2aWNlLCAmb3RnX2RldmljZV9wZGF0YSk7CisKKyNpZmRlZiBDT05GSUdfTUFDSF9FVUtSRUFfTUJJTVhTRF9CQVNFQk9BUkQKKwlldWtyZWFfbWJpbXhzZF9iYXNlYm9hcmRfaW5pdCgpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBldWtyZWFfY3B1aW14MzVfdGltZXJfaW5pdCh2b2lkKQoreworCW14MzVfY2xvY2tzX2luaXQoKTsKK30KKworc3RydWN0IHN5c190aW1lciBldWtyZWFfY3B1aW14MzVfdGltZXIgPSB7CisJLmluaXQJPSBldWtyZWFfY3B1aW14MzVfdGltZXJfaW5pdCwKK307CisKK01BQ0hJTkVfU1RBUlQoRVVLUkVBX0NQVUlNWDM1LCAiRXVrcmVhIENQVUlNWDM1IikKKwkvKiBNYWludGFpbmVyOiBFdWtyZWEgRWxlY3Ryb21hdGlxdWUgKi8KKwkucGh5c19pbwk9IE1YMzVfQUlQUzFfQkFTRV9BRERSLAorCS5pb19wZ19vZmZzdAk9ICgoTVgzNV9BSVBTMV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcyAgICA9IE1YM3hfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvICAgICAgICAgPSBteDM1X21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBteDM1X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgICA9IG14Y19ib2FyZF9pbml0LAorCS50aW1lciAgICAgICAgICA9ICZldWtyZWFfY3B1aW14MzVfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1rem1fYXJtMTFfMDEuYyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gta3ptX2FybTExXzAxLmMKaW5kZXggZjA4NWQ1ZC4uNWIyM2U0MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1rem1fYXJtMTFfMDEuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLWt6bV9hcm0xMV8wMS5jCkBAIC0xNiwxMCArMTYsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KQEAgLTM3LDEzICszMywxMiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KIAotI2luY2x1ZGUgPG1hY2gvYm9hcmQta3ptYXJtMTEuaD4KICNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CiAjaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KICNpbmNsdWRlIDxtYWNoL21lbW9yeS5oPgogCisjaW5jbHVkZSAiZGV2aWNlcy1pbXgzMS5oIgogI2luY2x1ZGUgImRldmljZXMuaCIKIAogI2RlZmluZSBLWk1fQVJNMTFfSU9fQUREUkVTUyh4KSAoCQkJCQlcCkBAIC01MSw2ICs0NiwyMyBAQAogCUlNWF9JT19BRERSRVNTKHgsIE1YMzFfQ1M1KSA/OgkJCQkJXAogCU1YMzFfSU9fQUREUkVTUyh4KSkKIAorLyoKKyAqICBLWk0tQVJNMTEtMDEgQm9hcmQgQ29udHJvbCBSZWdpc3RlcnMgb24gRlBHQQorICovCisjZGVmaW5lIEtaTV9BUk0xMV9DVEwxCQkoTVgzMV9DUzRfQkFTRV9BRERSICsgMHgxMDAwKQorI2RlZmluZSBLWk1fQVJNMTFfQ1RMMgkJKE1YMzFfQ1M0X0JBU0VfQUREUiArIDB4MTAwMSkKKyNkZWZpbmUgS1pNX0FSTTExX1JTVzEJCShNWDMxX0NTNF9CQVNFX0FERFIgKyAweDEwMDIpCisjZGVmaW5lIEtaTV9BUk0xMV9CQUNLX0xJR0hUCShNWDMxX0NTNF9CQVNFX0FERFIgKyAweDEwMDQpCisjZGVmaW5lIEtaTV9BUk0xMV9GUEdBX1JFVgkoTVgzMV9DUzRfQkFTRV9BRERSICsgMHgxMDA4KQorI2RlZmluZSBLWk1fQVJNMTFfN1NFR19MRUQJKE1YMzFfQ1M0X0JBU0VfQUREUiArIDB4MTAxMCkKKyNkZWZpbmUgS1pNX0FSTTExX0xFRFMJCShNWDMxX0NTNF9CQVNFX0FERFIgKyAweDEwMjApCisjZGVmaW5lIEtaTV9BUk0xMV9ESVBTVzIJKE1YMzFfQ1M0X0JBU0VfQUREUiArIDB4MTAwMykKKworLyoKKyAqIEV4dGVybmFsIFVBUlQgZm9yIHRvdWNoIHBhbmVsIG9uIEZQR0EKKyAqLworI2RlZmluZSBLWk1fQVJNMTFfMTY1NTAJCShNWDMxX0NTNF9CQVNFX0FERFIgKyAweDEwNTApCisKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTBfTU9EVUxFKQogLyoKICAqIEtaTS1BUk0xMS0wMSBoYXMgYW4gZXh0ZXJuYWwgVUFSVCBvbiBGUEdBCkBAIC0xNzMsMTUgKzE4NSwxNCBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfSU1YKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfSU1YX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhIF9faW5pdGNvbnN0ID0gewogCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQga3ptX2luaXRfaW14X3VhcnQodm9pZCkKIHsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YSk7Ci0KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UxLCAmdWFydF9wZGF0YSk7CisJaW14MzFfYWRkX2lteF91YXJ0MCgmdWFydF9wZGF0YSk7CisJaW14MzFfYWRkX2lteF91YXJ0MSgmdWFydF9wZGF0YSk7CiB9CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIGt6bV9pbml0X2lteF91YXJ0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFfM2RzLmMgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFfM2RzLmMKaW5kZXggNThlNTcyOS4uNmZlNjllMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDMxXzNkcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMV8zZHMuYwpAQCAtMTAsMTAgKzEwLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtMjIsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9tYzEzNzgzLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgpAQCAtMzcsMTkgKzMyLDQ3IEBACiAjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9ib2FyZC1teDMxXzNkcy5oPgotI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KICNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgotI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KLSNpbmNsdWRlIDxtYWNoL3NwaS5oPgorI2luY2x1ZGUgPG1hY2gvM2RzX2RlYnVnYm9hcmQuaD4KKworI2luY2x1ZGUgImRldmljZXMtaW14MzEuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAKLS8qIQotICogQGZpbGUgbXgzMV8zZHMuYwotICoKLSAqIEBicmllZiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGJvYXJkLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLgotICoKLSAqIEBpbmdyb3VwIFN5c3RlbQorLyogRGVmaW5pdGlvbnMgZm9yIGNvbXBvbmVudHMgb24gdGhlIERlYnVnIGJvYXJkICovCisKKy8qIEJhc2UgYWRkcmVzcyBvZiBDUExEIGNvbnRyb2xsZXIgb24gdGhlIERlYnVnIGJvYXJkICovCisjZGVmaW5lIERFQlVHX0JBU0VfQUREUkVTUwkJQ1M1X0lPX0FERFJFU1MoTVgzeF9DUzVfQkFTRV9BRERSKQorCisvKiBMQU45MjE3IGV0aGVybmV0IGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBMQU45MjE3X0JBU0VfQUREUgkJTVgzeF9DUzVfQkFTRV9BRERSCisKKy8qIENQTEQgY29uZmlnIGFuZCBpbnRlcnJ1cHQgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIENQTERfQUREUgkJCShERUJVR19CQVNFX0FERFJFU1MgKyAweDIwMDAwKQorCisvKiBzdGF0dXMsIGludGVycnVwdCAqLworI2RlZmluZSBDUExEX0lOVF9TVEFUVVNfUkVHCQkoQ1BMRF9BRERSICsgMHgxMCkKKyNkZWZpbmUgQ1BMRF9JTlRfTUFTS19SRUcJCShDUExEX0FERFIgKyAweDM4KQorI2RlZmluZSBDUExEX0lOVF9SRVNFVF9SRUcJCShDUExEX0FERFIgKyAweDIwKQorLyogbWFnaWMgd29yZCBmb3IgZGVidWcgQ1BMRCAqLworI2RlZmluZSBDUExEX01BR0lDX05VTUJFUjFfUkVHCQkoQ1BMRF9BRERSICsgMHg0MCkKKyNkZWZpbmUgQ1BMRF9NQUdJQ19OVU1CRVIyX1JFRwkJKENQTERfQUREUiArIDB4NDgpCisvKiBDUExEIGNvZGUgdmVyc2lvbiAqLworI2RlZmluZSBDUExEX0NPREVfVkVSX1JFRwkJKENQTERfQUREUiArIDB4NTApCisvKiBtYWdpYyB3b3JkIGZvciBkZWJ1ZyBDUExEICovCisjZGVmaW5lIENQTERfTUFHSUNfTlVNQkVSM19SRUcJCShDUExEX0FERFIgKyAweDU4KQorCisvKiBDUExEIElSUSBsaW5lIGZvciBleHRlcm5hbCB1YXJ0LCBleHRlcm5hbCBldGhlcm5ldCBldGMgKi8KKyNkZWZpbmUgRVhQSU9fUEFSRU5UX0lOVAlJT01VWF9UT19JUlEoTVgzMV9QSU5fR1BJTzFfMSkKKworI2RlZmluZSBNWENfRVhQX0lPX0JBU0UJCShNWENfQk9BUkRfSVJRX1NUQVJUKQorI2RlZmluZSBNWENfSVJRX1RPX0VYUElPKGlycSkJKChpcnEpIC0gTVhDX0VYUF9JT19CQVNFKQorCisjZGVmaW5lIEVYUElPX0lOVF9FTkVUCQkoTVhDX0VYUF9JT19CQVNFICsgMCkKKworI2RlZmluZSBNWENfTUFYX0VYUF9JT19MSU5FUwkxNgorCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBib2FyZC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4KICAqLwogCiBzdGF0aWMgaW50IG14MzFfM2RzX3BpbnNbXSA9IHsKQEAgLTE0NSw3ICsxNjgsNyBAQAogCU1YQ19TUElfQ1MoMiksCiB9OwogCi1zdGF0aWMgc3RydWN0IHNwaV9pbXhfbWFzdGVyIHNwaTFfcGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9pbXhfbWFzdGVyIHNwaTFfcGRhdGEgX19pbml0Y29uc3QgPSB7CiAJLmNoaXBzZWxlY3QJPSBzcGkxX2ludGVybmFsX2NoaXBzZWxlY3QsCiAJLm51bV9jaGlwc2VsZWN0CT0gQVJSQVlfU0laRShzcGkxX2ludGVybmFsX2NoaXBzZWxlY3QpLAogfTsKQEAgLTE2NSw3ICsxODgsOCBAQAogLyoKICAqIE5BTkQgRmxhc2gKICAqLwotc3RhdGljIHN0cnVjdCBteGNfbmFuZF9wbGF0Zm9ybV9kYXRhIGlteDMxXzNkc19uYW5kX2ZsYXNoX3BkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBteGNfbmFuZF9wbGF0Zm9ybV9kYXRhCitteDMxXzNkc19uYW5kX2JvYXJkX2luZm8gX19pbml0Y29uc3QgPSB7CiAJLndpZHRoCQk9IDEsCiAJLmh3X2VjYwkJPSAxLAogI2lmZGVmIE1BQ0hfTVgzMV8zRFNfTVhDX05BTkRfVVNFX0JCVApAQCAtMTgyLDggKzIwNiwxMCBAQAogCiAjZGVmaW5lIFVTQk9UR19SU1RfQiBJT01VWF9UT19HUElPKE1YMzFfUElOX1VTQl9QV1IpCiAKLXN0YXRpYyB2b2lkIG14MzFfM2RzX3VzYm90Z19pbml0KHZvaWQpCitzdGF0aWMgaW50IG14MzFfM2RzX3VzYm90Z19pbml0KHZvaWQpCiB7CisJaW50IGVycjsKKwogCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1VTQk9UR19EQVRBMCwgVVNCX1BBRF9DRkcpOwogCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1VTQk9UR19EQVRBMSwgVVNCX1BBRF9DRkcpOwogCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1VTQk9UR19EQVRBMiwgVVNCX1BBRF9DRkcpOwpAQCAtMTk3LDEwICsyMjMsMjUgQEAKIAlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfTlhULCBVU0JfUEFEX0NGRyk7CiAJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX1NUUCwgVVNCX1BBRF9DRkcpOwogCi0JZ3Bpb19yZXF1ZXN0KFVTQk9UR19SU1RfQiwgIm90Z3VzYi1yZXNldCIpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChVU0JPVEdfUlNUX0IsIDApOworCWVyciA9IGdwaW9fcmVxdWVzdChVU0JPVEdfUlNUX0IsICJvdGd1c2ItcmVzZXQiKTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigiRmFpbGVkIHRvIHJlcXVlc3QgdGhlIFVTQiBPVEcgcmVzZXQgZ3Bpb1xuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFVTQk9UR19SU1RfQiwgMCk7CisJaWYgKGVycikgeworCQlwcl9lcnIoIkZhaWxlZCB0byBkcml2ZSB0aGUgVVNCIE9URyByZXNldCBncGlvXG4iKTsKKwkJZ290byB1c2JvdGdfZnJlZV9yZXNldDsKKwl9CisKIAltZGVsYXkoMSk7CiAJZ3Bpb19zZXRfdmFsdWUoVVNCT1RHX1JTVF9CLCAxKTsKKwlyZXR1cm4gMDsKKwordXNib3RnX2ZyZWVfcmVzZXQ6CisJZ3Bpb19mcmVlKFVTQk9UR19SU1RfQik7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIHVzYm90Z19wZGF0YSA9IHsKQEAgLTIwOCwxNzggKzI0OSwxNiBAQAogCS5waHlfbW9kZQk9IEZTTF9VU0IyX1BIWV9VTFBJLAogfTsKIAotc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgX19pbml0Y29uc3QgPSB7CiAJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKIH07CiAKIC8qCi0gKiBTdXBwb3J0IGZvciB0aGUgU01TQzkyMTcgb24gdGhlIERlYnVnIGJvYXJkLgotICovCi0KLXN0YXRpYyBzdHJ1Y3Qgc21zYzkxMXhfcGxhdGZvcm1fY29uZmlnIHNtc2M5MTF4X2NvbmZpZyA9IHsKLQkuaXJxX3BvbGFyaXR5CT0gU01TQzkxMVhfSVJRX1BPTEFSSVRZX0FDVElWRV9MT1csCi0JLmlycV90eXBlCT0gU01TQzkxMVhfSVJRX1RZUEVfUFVTSF9QVUxMLAotCS5mbGFncwkJPSBTTVNDOTExWF9VU0VfMTZCSVQgfCBTTVNDOTExWF9GT1JDRV9JTlRFUk5BTF9QSFksCi0JLnBoeV9pbnRlcmZhY2UJPSBQSFlfSU5URVJGQUNFX01PREVfTUlJLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbXNjOTExeF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAkJPSBMQU45MjE3X0JBU0VfQUREUiwKLQkJLmVuZAkJPSBMQU45MjE3X0JBU0VfQUREUiArIDB4ZmYsCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydAkJPSBFWFBJT19JTlRfRU5FVCwKLQkJLmVuZAkJPSBFWFBJT19JTlRfRU5FVCwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbXNjOTExeF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNtc2M5MTF4IiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtc2M5MTF4X3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gc21zYzkxMXhfcmVzb3VyY2VzLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzbXNjOTExeF9jb25maWcsCi0JfSwKLX07Ci0KLS8qCi0gKiBSb3V0aW5lcyBmb3IgdGhlIENQTEQgb24gdGhlIGRlYnVnIGJvYXJkLiBJdCBjb250YWlucyBhIENQTEQgaGFuZGxpbmcKLSAqIExFRHMsIHN3aXRjaGVzLCBpbnRlcnJ1cHRzIGZvciBFdGhlcm5ldC4KLSAqLwotCi1zdGF0aWMgdm9pZCBteDMxXzNkc19leHBpb19pcnFfaGFuZGxlcih1aW50MzJfdCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKLXsKLQl1aW50MzJfdCBpbXJfdmFsOwotCXVpbnQzMl90IGludF92YWxpZDsKLQl1aW50MzJfdCBleHBpb19pcnE7Ci0KLQlpbXJfdmFsID0gX19yYXdfcmVhZHcoQ1BMRF9JTlRfTUFTS19SRUcpOwotCWludF92YWxpZCA9IF9fcmF3X3JlYWR3KENQTERfSU5UX1NUQVRVU19SRUcpICYgfmltcl92YWw7Ci0KLQlleHBpb19pcnEgPSBNWENfRVhQX0lPX0JBU0U7Ci0JZm9yICg7IGludF92YWxpZCAhPSAwOyBpbnRfdmFsaWQgPj49IDEsIGV4cGlvX2lycSsrKSB7Ci0JCWlmICgoaW50X3ZhbGlkICYgMSkgPT0gMCkKLQkJCWNvbnRpbnVlOwotCQlnZW5lcmljX2hhbmRsZV9pcnEoZXhwaW9faXJxKTsKLQl9Ci19Ci0KLS8qCi0gKiBEaXNhYmxlIGFuIGV4cGlvIHBpbidzIGludGVycnVwdCBieSBzZXR0aW5nIHRoZSBiaXQgaW4gdGhlIGltci4KLSAqIEBwYXJhbSBpcnEgICAgICAgICAgIGFuIGV4cGlvIHZpcnR1YWwgaXJxIG51bWJlcgotICovCi1zdGF0aWMgdm9pZCBleHBpb19tYXNrX2lycSh1aW50MzJfdCBpcnEpCi17Ci0JdWludDE2X3QgcmVnOwotCXVpbnQzMl90IGV4cGlvID0gTVhDX0lSUV9UT19FWFBJTyhpcnEpOwotCi0JLyogbWFzayB0aGUgaW50ZXJydXB0ICovCi0JcmVnID0gX19yYXdfcmVhZHcoQ1BMRF9JTlRfTUFTS19SRUcpOwotCXJlZyB8PSAxIDw8IGV4cGlvOwotCV9fcmF3X3dyaXRldyhyZWcsIENQTERfSU5UX01BU0tfUkVHKTsKLX0KLQotLyoKLSAqIEFja25vd2xlZGdlIGFuIGV4cGFuZGVkIGlvIHBpbidzIGludGVycnVwdCBieSBjbGVhcmluZyB0aGUgYml0IGluIHRoZSBpc3IuCi0gKiBAcGFyYW0gaXJxICAgICAgICAgICBhbiBleHBhbmRlZCBpbyB2aXJ0dWFsIGlycSBudW1iZXIKLSAqLwotc3RhdGljIHZvaWQgZXhwaW9fYWNrX2lycSh1aW50MzJfdCBpcnEpCi17Ci0JdWludDMyX3QgZXhwaW8gPSBNWENfSVJRX1RPX0VYUElPKGlycSk7Ci0KLQkvKiBjbGVhciB0aGUgaW50ZXJydXB0IHN0YXR1cyAqLwotCV9fcmF3X3dyaXRldygxIDw8IGV4cGlvLCBDUExEX0lOVF9SRVNFVF9SRUcpOwotCV9fcmF3X3dyaXRldygwLCBDUExEX0lOVF9SRVNFVF9SRUcpOwotCS8qIG1hc2sgdGhlIGludGVycnVwdCAqLwotCWV4cGlvX21hc2tfaXJxKGlycSk7Ci19Ci0KLS8qCi0gKiBFbmFibGUgYSBleHBpbyBwaW4ncyBpbnRlcnJ1cHQgYnkgY2xlYXJpbmcgdGhlIGJpdCBpbiB0aGUgaW1yLgotICogQHBhcmFtIGlycSAgICAgICAgICAgYSBleHBpbyB2aXJ0dWFsIGlycSBudW1iZXIKLSAqLwotc3RhdGljIHZvaWQgZXhwaW9fdW5tYXNrX2lycSh1aW50MzJfdCBpcnEpCi17Ci0JdWludDE2X3QgcmVnOwotCXVpbnQzMl90IGV4cGlvID0gTVhDX0lSUV9UT19FWFBJTyhpcnEpOwotCi0JLyogdW5tYXNrIHRoZSBpbnRlcnJ1cHQgKi8KLQlyZWcgPSBfX3Jhd19yZWFkdyhDUExEX0lOVF9NQVNLX1JFRyk7Ci0JcmVnICY9IH4oMSA8PCBleHBpbyk7Ci0JX19yYXdfd3JpdGV3KHJlZywgQ1BMRF9JTlRfTUFTS19SRUcpOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGV4cGlvX2lycV9jaGlwID0gewotCS5hY2sgPSBleHBpb19hY2tfaXJxLAotCS5tYXNrID0gZXhwaW9fbWFza19pcnEsCi0JLnVubWFzayA9IGV4cGlvX3VubWFza19pcnEsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBteDMxXzNkc19pbml0X2V4cGlvKHZvaWQpCi17Ci0JaW50IGk7Ci0JaW50IHJldDsKLQotCS8qIENoZWNrIGlmIHRoZXJlJ3MgYSBkZWJ1ZyBib2FyZCBjb25uZWN0ZWQgKi8KLQlpZiAoKF9fcmF3X3JlYWR3KENQTERfTUFHSUNfTlVNQkVSMV9SRUcpICE9IDB4QUFBQSkgfHwKLQkgICAgKF9fcmF3X3JlYWR3KENQTERfTUFHSUNfTlVNQkVSMl9SRUcpICE9IDB4NTU1NSkgfHwKLQkgICAgKF9fcmF3X3JlYWR3KENQTERfTUFHSUNfTlVNQkVSM19SRUcpICE9IDB4Q0FGRSkpIHsKLQkJLyogTm8gRGVidWcgYm9hcmQgZm91bmQgKi8KLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcHJfaW5mbygiaS5NWDMxIDNEUyBEZWJ1ZyBib2FyZCBkZXRlY3RlZCwgcmV2ID0gMHglMDRYXG4iLAotCQlfX3Jhd19yZWFkdyhDUExEX0NPREVfVkVSX1JFRykpOwotCi0JLyoKLQkgKiBDb25maWd1cmUgSU5UIGxpbmUgYXMgR1BJTyBpbnB1dAotCSAqLwotCXJldCA9IGdwaW9fcmVxdWVzdChJT01VWF9UT19HUElPKE1YMzFfUElOX0dQSU8xXzEpLCAic21zOTIxNy1pcnEiKTsKLQlpZiAocmV0KQotCQlwcl93YXJuaW5nKCJjb3VsZCBub3QgZ2V0IExBTiBpcnEgZ3Bpb1xuIik7Ci0JZWxzZQotCQlncGlvX2RpcmVjdGlvbl9pbnB1dChJT01VWF9UT19HUElPKE1YMzFfUElOX0dQSU8xXzEpKTsKLQotCS8qIERpc2FibGUgdGhlIGludGVycnVwdHMgYW5kIGNsZWFyIHRoZSBzdGF0dXMgKi8KLQlfX3Jhd193cml0ZXcoMCwgQ1BMRF9JTlRfTUFTS19SRUcpOwotCV9fcmF3X3dyaXRldygweEZGRkYsIENQTERfSU5UX1JFU0VUX1JFRyk7Ci0JX19yYXdfd3JpdGV3KDAsIENQTERfSU5UX1JFU0VUX1JFRyk7Ci0JX19yYXdfd3JpdGV3KDB4MUYsIENQTERfSU5UX01BU0tfUkVHKTsKLQlmb3IgKGkgPSBNWENfRVhQX0lPX0JBU0U7Ci0JICAgICBpIDwgKE1YQ19FWFBfSU9fQkFTRSArIE1YQ19NQVhfRVhQX0lPX0xJTkVTKTsKLQkgICAgIGkrKykgewotCQlzZXRfaXJxX2NoaXAoaSwgJmV4cGlvX2lycV9jaGlwKTsKLQkJc2V0X2lycV9oYW5kbGVyKGksIGhhbmRsZV9sZXZlbF9pcnEpOwotCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQpOwotCX0KLQlzZXRfaXJxX3R5cGUoRVhQSU9fUEFSRU5UX0lOVCwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihFWFBJT19QQVJFTlRfSU5ULCBteDMxXzNkc19leHBpb19pcnFfaGFuZGxlcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgdGhlIE1YMzEgbWVtb3J5IG1hcC4KLSAqLwotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBteDMxXzNkc19pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCS52aXJ0dWFsID0gTVgzMV9DUzVfQkFTRV9BRERSX1ZJUlQsCi0JCS5wZm4gPSBfX3BoeXNfdG9fcGZuKE1YMzFfQ1M1X0JBU0VfQUREUiksCi0JCS5sZW5ndGggPSBNWDMxX0NTNV9TSVpFLAotCQkudHlwZSA9IE1UX0RFVklDRSwKLQl9LAotfTsKLQotLyoKICAqIFNldCB1cCBzdGF0aWMgdmlydHVhbCBtYXBwaW5ncy4KICAqLwogc3RhdGljIHZvaWQgX19pbml0IG14MzFfM2RzX21hcF9pbyh2b2lkKQogewogCW14MzFfbWFwX2lvKCk7Ci0JaW90YWJsZV9pbml0KG14MzFfM2RzX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXgzMV8zZHNfaW9fZGVzYykpOwogfQogCiAvKiEKQEAgLTM5MCwxMCArMjY5LDEwIEBACiAJbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnMobXgzMV8zZHNfcGlucywgQVJSQVlfU0laRShteDMxXzNkc19waW5zKSwKIAkJCQkgICAgICAibXgzMV8zZHMiKTsKIAotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTAsICZ1YXJ0X3BkYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfbmFuZF9kZXZpY2UsICZpbXgzMV8zZHNfbmFuZF9mbGFzaF9wZGF0YSk7CisJaW14MzFfYWRkX2lteF91YXJ0MCgmdWFydF9wZGF0YSk7CisJaW14MzFfYWRkX214Y19uYW5kKCZteDMxXzNkc19uYW5kX2JvYXJkX2luZm8pOwogCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NwaV9kZXZpY2UxLCAmc3BpMV9wZGF0YSk7CisJaW14MzFfYWRkX3NwaV9pbXgwKCZzcGkxX3BkYXRhKTsKIAlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhteDMxXzNkc19zcGlfZGV2cywKIAkJCQkJCUFSUkFZX1NJWkUobXgzMV8zZHNfc3BpX2RldnMpKTsKIApAQCAtNDAyLDggKzI4MSw5IEBACiAJbXgzMV8zZHNfdXNib3RnX2luaXQoKTsKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfb3RnX3VkY19kZXZpY2UsICZ1c2JvdGdfcGRhdGEpOwogCi0JaWYgKCFteDMxXzNkc19pbml0X2V4cGlvKCkpCi0JCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc21zYzkxMXhfZGV2aWNlKTsKKwlpZiAoIW14Y19leHBpb19pbml0KENTNV9CQVNFX0FERFIsIEVYUElPX1BBUkVOVF9JTlQpKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJJbml0IG9mIHRoZSBkZWJ1Z2JvYXJkIGZhaWxlZCwgYWxsICIKKwkJCQkgICAgImRldmljZXMgb24gdGhlIGJvYXJkIGFyZSB1bnVzYWJsZS5cbiIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXgzMV8zZHNfdGltZXJfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDMxYWRzLmMgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFhZHMuYwppbmRleCBiM2QxYTE4Li45NGIzZTdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFhZHMuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFhZHMuYwpAQCAtMTIsMTAgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtMzMsOCArMjksNiBAQAogI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgotI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgzMWFkcy5oPgotI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KICNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgogCiAjaWZkZWYgQ09ORklHX01BQ0hfTVgzMUFEU19XTTExMzNfRVYxCkBAIC00MywxNCArMzcsNDUgQEAKICNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL3BtaWMuaD4KICNlbmRpZgogCisjaW5jbHVkZSAiZGV2aWNlcy1pbXgzMS5oIgogI2luY2x1ZGUgImRldmljZXMuaCIKIAotLyohCi0gKiBAZmlsZSBteDMxYWRzLmMKLSAqCi0gKiBAYnJpZWYgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBib2FyZC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4KLSAqCi0gKiBAaW5ncm91cCBTeXN0ZW0KKy8qIEJhc2UgYWRkcmVzcyBvZiBQQkMgY29udHJvbGxlciAqLworI2RlZmluZSBQQkNfQkFTRV9BRERSRVNTICAgICAgICBNWDMxX0NTNF9CQVNFX0FERFJfVklSVAorLyogT2Zmc2V0cyBmb3IgdGhlIFBCQyBDb250cm9sbGVyIHJlZ2lzdGVyICovCisKKy8qIFBCQyBCb2FyZCBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIFBCQ19JTlRTVEFUVVMgICAgICAgICAgIDB4MDAwMDE2CisKKy8qIFBCQyBCb2FyZCBpbnRlcnJ1cHQgY3VycmVudCBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUEJDX0lOVENVUlJfU1RBVFVTICAgICAgMHgwMDAwMTgKKworLyogUEJDIEludGVycnVwdCBtYXNrIHJlZ2lzdGVyIHNldCBhZGRyZXNzICovCisjZGVmaW5lIFBCQ19JTlRNQVNLX1NFVCAgICAgICAgIDB4MDAwMDFBCisKKy8qIFBCQyBJbnRlcnJ1cHQgbWFzayByZWdpc3RlciBjbGVhciBhZGRyZXNzICovCisjZGVmaW5lIFBCQ19JTlRNQVNLX0NMRUFSICAgICAgIDB4MDAwMDFDCisKKy8qIEV4dGVybmFsIFVBUlQgQSAqLworI2RlZmluZSBQQkNfU0MxNkM2NTJfVUFSVEEgICAgICAweDAxMDAwMAorCisvKiBFeHRlcm5hbCBVQVJUIEIgKi8KKyNkZWZpbmUgUEJDX1NDMTZDNjUyX1VBUlRCICAgICAgMHgwMTAwMTAKKworI2RlZmluZSBQQkNfSU5UU1RBVFVTX1JFRwkoUEJDX0lOVFNUQVRVUyArIFBCQ19CQVNFX0FERFJFU1MpCisjZGVmaW5lIFBCQ19JTlRNQVNLX1NFVF9SRUcJKFBCQ19JTlRNQVNLX1NFVCArIFBCQ19CQVNFX0FERFJFU1MpCisjZGVmaW5lIFBCQ19JTlRNQVNLX0NMRUFSX1JFRwkoUEJDX0lOVE1BU0tfQ0xFQVIgKyBQQkNfQkFTRV9BRERSRVNTKQorI2RlZmluZSBFWFBJT19QQVJFTlRfSU5UCUlPTVVYX1RPX0lSUShNWDMxX1BJTl9HUElPMV80KQorCisjZGVmaW5lIE1YQ19FWFBfSU9fQkFTRQkJKE1YQ19CT0FSRF9JUlFfU1RBUlQpCisjZGVmaW5lIE1YQ19JUlFfVE9fRVhQSU8oaXJxKQkoKGlycSkgLSBNWENfRVhQX0lPX0JBU0UpCisKKyNkZWZpbmUgRVhQSU9fSU5UX1hVQVJUX0lOVEEJKE1YQ19FWFBfSU9fQkFTRSArIDEwKQorI2RlZmluZSBFWFBJT19JTlRfWFVBUlRfSU5UQgkoTVhDX0VYUF9JT19CQVNFICsgMTEpCisKKyNkZWZpbmUgTVhDX01BWF9FWFBfSU9fTElORVMJMTYKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGJvYXJkLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLgogICovCiAKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTBfTU9EVUxFKQpAQCAtOTgsNyArMTIzLDcgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0lNWCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0lNWF9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSBfX2luaXRjb25zdCA9IHsKIAkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAogfTsKIApAQCAtMTEyLDcgKzEzNyw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgbXhjX2luaXRfaW14X3VhcnQodm9pZCkKIHsKIAlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyh1YXJ0X3BpbnMsIEFSUkFZX1NJWkUodWFydF9waW5zKSwgInVhcnQtMCIpOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTAsICZ1YXJ0X3BkYXRhKTsKKwlpbXgzMV9hZGRfaW14X3VhcnQwKCZ1YXJ0X3BkYXRhKTsKIH0KICNlbHNlIC8qICFTRVJJQUxfSU1YICovCiBzdGF0aWMgaW5saW5lIHZvaWQgbXhjX2luaXRfaW14X3VhcnQodm9pZCkKQEAgLTQ3NSw3ICs1MDAsNyBAQAogCW14Y19pb211eF9tb2RlKElPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTJfTU9TSSwgSU9NVVhfQ09ORklHX0FMVDEpKTsKIAlteGNfaW9tdXhfbW9kZShJT01VWF9NT0RFKE1YMzFfUElOX0NTUEkyX01JU08sIElPTVVYX0NPTkZJR19BTFQxKSk7CiAKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfaTJjX2RldmljZTEsIE5VTEwpOworCWlteDMxX2FkZF9pbXhfaTJjMShOVUxMKTsKIH0KICNlbHNlCiBzdGF0aWMgdm9pZCBteGNfaW5pdF9pMmModm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMWxpbGx5LmMgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFsaWxseS5jCmluZGV4IGIyYzdmNTEuLjhmNjZmNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMWxpbGx5LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDMxbGlsbHkuYwpAQCAtMTgsMTAgKzE4LDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtNDYsMTAgKzQyLDEwIEBACiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgogI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgzMWxpbGx5Lmg+Ci0jaW5jbHVkZSA8bWFjaC9zcGkuaD4KICNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+CiAjaW5jbHVkZSA8bWFjaC91bHBpLmg+CiAKKyNpbmNsdWRlICJkZXZpY2VzLWlteDMxLmgiCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogCiAvKgpAQCAtMjY5LDEyICsyNjUsMTIgQEAKIAlNWENfU1BJX0NTKDIpLAogfTsKIAotc3RhdGljIHN0cnVjdCBzcGlfaW14X21hc3RlciBzcGkwX3BkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfaW14X21hc3RlciBzcGkwX3BkYXRhIF9faW5pdGNvbnN0ID0gewogCS5jaGlwc2VsZWN0ID0gc3BpX2ludGVybmFsX2NoaXBzZWxlY3QsCiAJLm51bV9jaGlwc2VsZWN0ID0gQVJSQVlfU0laRShzcGlfaW50ZXJuYWxfY2hpcHNlbGVjdCksCiB9OwogCi1zdGF0aWMgc3RydWN0IHNwaV9pbXhfbWFzdGVyIHNwaTFfcGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9pbXhfbWFzdGVyIHNwaTFfcGRhdGEgX19pbml0Y29uc3QgPSB7CiAJLmNoaXBzZWxlY3QgPSBzcGlfaW50ZXJuYWxfY2hpcHNlbGVjdCwKIAkubnVtX2NoaXBzZWxlY3QgPSBBUlJBWV9TSVpFKHNwaV9pbnRlcm5hbF9jaGlwc2VsZWN0KSwKIH07CkBAIC0yODksNiArMjg1LDcgQEAKIAkuYnVzX251bQk9IDEsCiAJLmNoaXBfc2VsZWN0CT0gMCwKIAkucGxhdGZvcm1fZGF0YQk9ICZtYzEzNzgzX3BkYXRhLAorCS5pcnEJCT0gSU9NVVhfVE9fSVJRKE1YMzFfUElOX0dQSU8xXzMpLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewpAQCAtMzMxLDggKzMyOCw4IEBACiAJbXhjX2lvbXV4X2FsbG9jX3BpbihNWDMxX1BJTl9DU1BJMl9TUzFfX1NTMSwgIlNQSTJfU1MxIik7CiAJbXhjX2lvbXV4X2FsbG9jX3BpbihNWDMxX1BJTl9DU1BJMl9TUzJfX1NTMiwgIlNQSTJfU1MyIik7CiAKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc3BpX2RldmljZTAsICZzcGkwX3BkYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc3BpX2RldmljZTEsICZzcGkxX3BkYXRhKTsKKwlpbXgzMV9hZGRfc3BpX2lteDAoJnNwaTBfcGRhdGEpOworCWlteDMxX2FkZF9zcGlfaW14MSgmc3BpMV9wZGF0YSk7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oJm1jMTM3ODNfZGV2LCAxKTsKIAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDMxbGl0ZS5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDMxbGl0ZS5jCmluZGV4IDJiNmQxMTQuLmRhMjM2YzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMWxpdGUuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFsaXRlLmMKQEAgLTEzLDEwICsxMyw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTQyLDE0ICszOCwxMiBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgzMWxpdGUuaD4KLSNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CiAjaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KLSNpbmNsdWRlIDxtYWNoL214Y19uYW5kLmg+Ci0jaW5jbHVkZSA8bWFjaC9zcGkuaD4KICNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+CiAjaW5jbHVkZSA8bWFjaC91bHBpLmg+CiAKKyNpbmNsdWRlICJkZXZpY2VzLWlteDMxLmgiCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogCiAvKgpAQCAtNjksNyArNjMsOCBAQAogCU1YMzFfUElOX0NTUEkyX1NTMl9fU1MyLAogfTsKIAotc3RhdGljIHN0cnVjdCBteGNfbmFuZF9wbGF0Zm9ybV9kYXRhIG14MzFsaXRlX25hbmRfYm9hcmRfaW5mbyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YQorbXgzMWxpdGVfbmFuZF9ib2FyZF9pbmZvIF9faW5pdGNvbnN0ICA9IHsKIAkud2lkdGggPSAxLAogCS5od19lY2MgPSAxLAogfTsKQEAgLTExMiw3ICsxMDcsNyBAQAogCU1YQ19TUElfQ1MoMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IHNwaV9pbXhfbWFzdGVyIHNwaTFfcGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9pbXhfbWFzdGVyIHNwaTFfcGRhdGEgX19pbml0Y29uc3QgPSB7CiAJLmNoaXBzZWxlY3QJPSBzcGlfaW50ZXJuYWxfY2hpcHNlbGVjdCwKIAkubnVtX2NoaXBzZWxlY3QJPSBBUlJBWV9TSVpFKHNwaV9pbnRlcm5hbF9jaGlwc2VsZWN0KSwKIH07CkBAIC0yNTMsOSArMjQ4LDkgQEAKIAogCS8qIE5PUiBhbmQgTkFORCBmbGFzaCAqLwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGh5c21hcF9mbGFzaF9kZXZpY2UpOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19uYW5kX2RldmljZSwgJm14MzFsaXRlX25hbmRfYm9hcmRfaW5mbyk7CisJaW14MzFfYWRkX214Y19uYW5kKCZteDMxbGl0ZV9uYW5kX2JvYXJkX2luZm8pOwogCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NwaV9kZXZpY2UxLCAmc3BpMV9wZGF0YSk7CisJaW14MzFfYWRkX3NwaV9pbXgxKCZzcGkxX3BkYXRhKTsKIAlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbygmbWMxMzc4M19zcGlfZGV2LCAxKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1VTQl9VTFBJKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDMxbW9ib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDMxbW9ib2FyZC5jCmluZGV4IDYyYjVlNDAuLjY3Nzc2YmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMW1vYm9hcmQuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFtb2JvYXJkLmMKQEAgLTEwLDEwICsxMCw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTQyLDE2ICszOCwxNSBAQAogI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgzMW1vYm9hcmQuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CiAjaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KICNpbmNsdWRlIDxtYWNoL2lwdS5oPgotI2luY2x1ZGUgPG1hY2gvaTJjLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+CiAjaW5jbHVkZSA8bWFjaC9teDNfY2FtZXJhLmg+CiAjaW5jbHVkZSA8bWFjaC9zcGkuaD4KICNpbmNsdWRlIDxtYWNoL3VscGkuaD4KIAorI2luY2x1ZGUgImRldmljZXMtaW14MzEuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbW9ib2FyZF9waW5zW10gPSB7CkBAIC0xMzAsMjQgKzEyNSwzNiBAQAogCiBzdGF0aWMgaW50IG1vYm9hcmRfdWFydDBfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCWdwaW9fcmVxdWVzdChJT01VWF9UT19HUElPKE1YMzFfUElOX0NUUzEpLCAidWFydDAtY3RzLWhhY2siKTsKLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9DVFMxKSwgMCk7Ci0JcmV0dXJuIDA7CisJaW50IHJldCA9IGdwaW9fcmVxdWVzdChJT01VWF9UT19HUElPKE1YMzFfUElOX0NUUzEpLCAidWFydDAtY3RzLWhhY2siKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fQ1RTMSksIDApOworCWlmIChyZXQpCisJCWdwaW9fZnJlZShJT01VWF9UT19HUElPKE1YMzFfUElOX0NUUzEpKTsKKworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnQwX3BkYXRhID0geworc3RhdGljIHZvaWQgbW9ib2FyZF91YXJ0MF9leGl0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJZ3Bpb19mcmVlKElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fQ1RTMSkpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0MF9wZGF0YSBfX2luaXRjb25zdCA9IHsKIAkuaW5pdCA9IG1vYm9hcmRfdWFydDBfaW5pdCwKKwkuZXhpdCA9IG1vYm9hcmRfdWFydDBfZXhpdCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnQ0X3BkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydDRfcGRhdGEgX19pbml0Y29uc3QgPSB7CiAJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW14aTJjX3BsYXRmb3JtX2RhdGEgbW9ib2FyZF9pMmMwX3BkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBtb2JvYXJkX2kyYzBfZGF0YSBfX2luaXRjb25zdCA9IHsKIAkuYml0cmF0ZSA9IDQwMDAwMCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW14aTJjX3BsYXRmb3JtX2RhdGEgbW9ib2FyZF9pMmMxX3BkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBtb2JvYXJkX2kyYzFfZGF0YSBfX2luaXRjb25zdCA9IHsKIAkuYml0cmF0ZSA9IDEwMDAwMCwKIH07CiAKQEAgLTE1Niw3ICsxNjMsNyBAQAogCU1YQ19TUElfQ1MoMiksCiB9OwogCi1zdGF0aWMgc3RydWN0IHNwaV9pbXhfbWFzdGVyIG1vYm9hcmRfc3BpMV9tYXN0ZXIgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9pbXhfbWFzdGVyIG1vYm9hcmRfc3BpMV9wZGF0YSBfX2luaXRjb25zdCA9IHsKIAkuY2hpcHNlbGVjdAk9IG1vYm9hcmRfc3BpMV9jcywKIAkubnVtX2NoaXBzZWxlY3QJPSBBUlJBWV9TSVpFKG1vYm9hcmRfc3BpMV9jcyksCiB9OwpAQCAtMjg2LDcgKzI5Myw3IEBACiAJTVhDX1NQSV9DUygxKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgbW9ib2FyZF9zcGkyX21hc3RlciA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgbW9ib2FyZF9zcGkyX3BkYXRhIF9faW5pdGNvbnN0ID0gewogCS5jaGlwc2VsZWN0CT0gbW9ib2FyZF9zcGkyX2NzLAogCS5udW1fY2hpcHNlbGVjdAk9IEFSUkFZX1NJWkUobW9ib2FyZF9zcGkyX2NzKSwKIH07CkBAIC00OTksMTUgKzUwNiwxNCBAQAogCiAJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CiAKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydDBfcGRhdGEpOworCWlteDMxX2FkZF9pbXhfdWFydDAoJnVhcnQwX3BkYXRhKTsKKwlpbXgzMV9hZGRfaW14X3VhcnQ0KCZ1YXJ0NF9wZGF0YSk7CiAKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2U0LCAmdWFydDRfcGRhdGEpOworCWlteDMxX2FkZF9pbXhfaTJjMCgmbW9ib2FyZF9pMmMwX2RhdGEpOworCWlteDMxX2FkZF9pbXhfaTJjMSgmbW9ib2FyZF9pMmMxX2RhdGEpOwogCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX2kyY19kZXZpY2UwLCAmbW9ib2FyZF9pMmMwX3BkYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfaTJjX2RldmljZTEsICZtb2JvYXJkX2kyYzFfcGRhdGEpOwotCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NwaV9kZXZpY2UxLCAmbW9ib2FyZF9zcGkxX21hc3Rlcik7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NwaV9kZXZpY2UyLCAmbW9ib2FyZF9zcGkyX21hc3Rlcik7CisJaW14MzFfYWRkX3NwaV9pbXgxKCZtb2JvYXJkX3NwaTFfcGRhdGEpOworCWlteDMxX2FkZF9zcGlfaW14MigmbW9ib2FyZF9zcGkyX3BkYXRhKTsKIAogCWdwaW9fcmVxdWVzdChJT01VWF9UT19HUElPKE1YMzFfUElOX0dQSU8xXzMpLCAicG1pYy1pcnEiKTsKIAlncGlvX2RpcmVjdGlvbl9pbnB1dChJT01VWF9UT19HUElPKE1YMzFfUElOX0dQSU8xXzMpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzNV8zZHMuYyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzNV8zZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzMwZDcyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDM1XzNkcy5jCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBBdXRob3I6IEZhYmlvIEVzdGV2YW0gPGZhYmlvLmVzdGV2YW1AZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoKKyAqIFRoaXMgbWFjaGluZSBpcyBrbm93biBhczoKKyAqICAtIGkuTVgzNSAzLVN0YWNrIERldmVsb3BtZW50IFN5c3RlbQorICogIC0gaS5NWDM1IFBsYXRmb3JtIERldmVsb3BtZW50IEtpdCAoaS5NWDM1IFBESykKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MzUuaD4KKworI2luY2x1ZGUgImRldmljZXMtaW14MzUuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgX19pbml0Y29uc3QgPSB7CisJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmbXhjX2ZlY19kZXZpY2UsCit9OworCitzdGF0aWMgc3RydWN0IHBhZF9kZXNjIG14MzVwZGtfcGFkc1tdID0geworCS8qIFVBUlQxICovCisJTVgzNV9QQURfQ1RTMV9fVUFSVDFfQ1RTLAorCU1YMzVfUEFEX1JUUzFfX1VBUlQxX1JUUywKKwlNWDM1X1BBRF9UWEQxX19VQVJUMV9UWERfTVVYLAorCU1YMzVfUEFEX1JYRDFfX1VBUlQxX1JYRF9NVVgsCisJLyogRkVDICovCisJTVgzNV9QQURfRkVDX1RYX0NMS19fRkVDX1RYX0NMSywKKwlNWDM1X1BBRF9GRUNfUlhfQ0xLX19GRUNfUlhfQ0xLLAorCU1YMzVfUEFEX0ZFQ19SWF9EVl9fRkVDX1JYX0RWLAorCU1YMzVfUEFEX0ZFQ19DT0xfX0ZFQ19DT0wsCisJTVgzNV9QQURfRkVDX1JEQVRBMF9fRkVDX1JEQVRBXzAsCisJTVgzNV9QQURfRkVDX1REQVRBMF9fRkVDX1REQVRBXzAsCisJTVgzNV9QQURfRkVDX1RYX0VOX19GRUNfVFhfRU4sCisJTVgzNV9QQURfRkVDX01EQ19fRkVDX01EQywKKwlNWDM1X1BBRF9GRUNfTURJT19fRkVDX01ESU8sCisJTVgzNV9QQURfRkVDX1RYX0VSUl9fRkVDX1RYX0VSUiwKKwlNWDM1X1BBRF9GRUNfUlhfRVJSX19GRUNfUlhfRVJSLAorCU1YMzVfUEFEX0ZFQ19DUlNfX0ZFQ19DUlMsCisJTVgzNV9QQURfRkVDX1JEQVRBMV9fRkVDX1JEQVRBXzEsCisJTVgzNV9QQURfRkVDX1REQVRBMV9fRkVDX1REQVRBXzEsCisJTVgzNV9QQURfRkVDX1JEQVRBMl9fRkVDX1JEQVRBXzIsCisJTVgzNV9QQURfRkVDX1REQVRBMl9fRkVDX1REQVRBXzIsCisJTVgzNV9QQURfRkVDX1JEQVRBM19fRkVDX1JEQVRBXzMsCisJTVgzNV9QQURfRkVDX1REQVRBM19fRkVDX1REQVRBXzMsCisJLyogVVNCT1RHICovCisJTVgzNV9QQURfVVNCT1RHX1BXUl9fVVNCX1RPUF9VU0JPVEdfUFdSLAorCU1YMzVfUEFEX1VTQk9UR19PQ19fVVNCX1RPUF9VU0JPVEdfT0MsCit9OworCisvKiBPVEcgY29uZmlnICovCitzdGF0aWMgc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgdXNiX3BkYXRhID0geworCS5vcGVyYXRpbmdfbW9kZQk9IEZTTF9VU0IyX0RSX0RFVklDRSwKKwkucGh5X21vZGUJPSBGU0xfVVNCMl9QSFlfVVRNSV9XSURFLAorfTsKKworLyoKKyAqIEJvYXJkIHNwZWNpZmljIGluaXRpYWxpemF0aW9uLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgbXhjX2JvYXJkX2luaXQodm9pZCkKK3sKKwlteGNfaW9tdXhfdjNfc2V0dXBfbXVsdGlwbGVfcGFkcyhteDM1cGRrX3BhZHMsIEFSUkFZX1NJWkUobXgzNXBka19wYWRzKSk7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKKworCWlteDM1X2FkZF9pbXhfdWFydDAoJnVhcnRfcGRhdGEpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX290Z191ZGNfZGV2aWNlLCAmdXNiX3BkYXRhKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG14MzVwZGtfdGltZXJfaW5pdCh2b2lkKQoreworCW14MzVfY2xvY2tzX2luaXQoKTsKK30KKworc3RydWN0IHN5c190aW1lciBteDM1cGRrX3RpbWVyID0geworCS5pbml0CT0gbXgzNXBka190aW1lcl9pbml0LAorfTsKKworTUFDSElORV9TVEFSVChNWDM1XzNEUywgIkZyZWVzY2FsZSBNWDM1UERLIikKKwkvKiBNYWludGFpbmVyOiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jICovCisJLnBoeXNfaW8JPSBNWDM1X0FJUFMxX0JBU0VfQUREUiwKKwkuaW9fcGdfb2Zmc3QJPSAoKE1YMzVfQUlQUzFfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMgICAgPSBNWDN4X1BIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbyAgICAgICAgID0gbXgzNV9tYXBfaW8sCisJLmluaXRfaXJxICAgICAgID0gbXgzNV9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lICAgPSBteGNfYm9hcmRfaW5pdCwKKwkudGltZXIgICAgICAgICAgPSAmbXgzNXBka190aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzVwZGsuYyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzNXBkay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2FjODRkLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzNXBkay5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIEF1dGhvcjogRmFiaW8gRXN0ZXZhbSA8ZmFiaW8uZXN0ZXZhbUBmcmVlc2NhbGUuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9pb211eC1teDM1Lmg+Ci0KLSNpbmNsdWRlICJkZXZpY2VzLmgiCi0KLXN0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgPSB7Ci0JLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmbXhjX2ZlY19kZXZpY2UsCi19OwotCi1zdGF0aWMgc3RydWN0IHBhZF9kZXNjIG14MzVwZGtfcGFkc1tdID0gewotCS8qIFVBUlQxICovCi0JTVgzNV9QQURfQ1RTMV9fVUFSVDFfQ1RTLAotCU1YMzVfUEFEX1JUUzFfX1VBUlQxX1JUUywKLQlNWDM1X1BBRF9UWEQxX19VQVJUMV9UWERfTVVYLAotCU1YMzVfUEFEX1JYRDFfX1VBUlQxX1JYRF9NVVgsCi0JLyogRkVDICovCi0JTVgzNV9QQURfRkVDX1RYX0NMS19fRkVDX1RYX0NMSywKLQlNWDM1X1BBRF9GRUNfUlhfQ0xLX19GRUNfUlhfQ0xLLAotCU1YMzVfUEFEX0ZFQ19SWF9EVl9fRkVDX1JYX0RWLAotCU1YMzVfUEFEX0ZFQ19DT0xfX0ZFQ19DT0wsCi0JTVgzNV9QQURfRkVDX1JEQVRBMF9fRkVDX1JEQVRBXzAsCi0JTVgzNV9QQURfRkVDX1REQVRBMF9fRkVDX1REQVRBXzAsCi0JTVgzNV9QQURfRkVDX1RYX0VOX19GRUNfVFhfRU4sCi0JTVgzNV9QQURfRkVDX01EQ19fRkVDX01EQywKLQlNWDM1X1BBRF9GRUNfTURJT19fRkVDX01ESU8sCi0JTVgzNV9QQURfRkVDX1RYX0VSUl9fRkVDX1RYX0VSUiwKLQlNWDM1X1BBRF9GRUNfUlhfRVJSX19GRUNfUlhfRVJSLAotCU1YMzVfUEFEX0ZFQ19DUlNfX0ZFQ19DUlMsCi0JTVgzNV9QQURfRkVDX1JEQVRBMV9fRkVDX1JEQVRBXzEsCi0JTVgzNV9QQURfRkVDX1REQVRBMV9fRkVDX1REQVRBXzEsCi0JTVgzNV9QQURfRkVDX1JEQVRBMl9fRkVDX1JEQVRBXzIsCi0JTVgzNV9QQURfRkVDX1REQVRBMl9fRkVDX1REQVRBXzIsCi0JTVgzNV9QQURfRkVDX1JEQVRBM19fRkVDX1JEQVRBXzMsCi0JTVgzNV9QQURfRkVDX1REQVRBM19fRkVDX1REQVRBXzMsCi0JLyogVVNCT1RHICovCi0JTVgzNV9QQURfVVNCT1RHX1BXUl9fVVNCX1RPUF9VU0JPVEdfUFdSLAotCU1YMzVfUEFEX1VTQk9UR19PQ19fVVNCX1RPUF9VU0JPVEdfT0MsCi19OwotCi0vKiBPVEcgY29uZmlnICovCi1zdGF0aWMgc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgdXNiX3BkYXRhID0gewotCS5vcGVyYXRpbmdfbW9kZQk9IEZTTF9VU0IyX0RSX0RFVklDRSwKLQkucGh5X21vZGUJPSBGU0xfVVNCMl9QSFlfVVRNSV9XSURFLAotfTsKLQotLyoKLSAqIEJvYXJkIHNwZWNpZmljIGluaXRpYWxpemF0aW9uLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgbXhjX2JvYXJkX2luaXQodm9pZCkKLXsKLQlteGNfaW9tdXhfdjNfc2V0dXBfbXVsdGlwbGVfcGFkcyhteDM1cGRrX3BhZHMsIEFSUkFZX1NJWkUobXgzNXBka19wYWRzKSk7Ci0KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKLQotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTAsICZ1YXJ0X3BkYXRhKTsKLQotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19vdGdfdWRjX2RldmljZSwgJnVzYl9wZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBteDM1cGRrX3RpbWVyX2luaXQodm9pZCkKLXsKLQlteDM1X2Nsb2Nrc19pbml0KCk7Ci19Ci0KLXN0cnVjdCBzeXNfdGltZXIgbXgzNXBka190aW1lciA9IHsKLQkuaW5pdAk9IG14MzVwZGtfdGltZXJfaW5pdCwKLX07Ci0KLU1BQ0hJTkVfU1RBUlQoTVgzNV8zRFMsICJGcmVlc2NhbGUgTVgzNVBESyIpCi0JLyogTWFpbnRhaW5lcjogRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYyAqLwotCS5waHlzX2lvCT0gTVgzNV9BSVBTMV9CQVNFX0FERFIsCi0JLmlvX3BnX29mZnN0CT0gKChNWDM1X0FJUFMxX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCi0JLmJvb3RfcGFyYW1zICAgID0gTVgzeF9QSFlTX09GRlNFVCArIDB4MTAwLAotCS5tYXBfaW8gICAgICAgICA9IG14MzVfbWFwX2lvLAotCS5pbml0X2lycSAgICAgICA9IG14MzVfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZSAgID0gbXhjX2JvYXJkX2luaXQsCi0JLnRpbWVyICAgICAgICAgID0gJm14MzVwZGtfdGltZXIsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1wY20wMzcuYyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtcGNtMDM3LmMKaW5kZXggY2NlNDEwNi4uOGEyOTJkZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1wY20wMzcuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLXBjbTAzNy5jCkBAIC0xMCwxMCArMTAsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC00MywyMCArMzksMTcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPG1hY2gvYm9hcmQtcGNtMDM3Lmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9pMmMuaD4KLSNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CiAjaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KICNpbmNsdWRlIDxtYWNoL2lwdS5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9teDNfY2FtZXJhLmg+CiAjaW5jbHVkZSA8bWFjaC9teDNmYi5oPgotI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KICNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+CiAjaW5jbHVkZSA8bWFjaC91bHBpLmg+CiAKKyNpbmNsdWRlICJkZXZpY2VzLWlteDMxLmgiCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogI2luY2x1ZGUgInBjbTAzNy5oIgogCkBAIC0yMjUsNyArMjE4LDcgQEAKIAkubnVtX3Jlc291cmNlcyA9IDEsCiB9OwogCi1zdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSBfX2luaXRjb25zdCA9IHsKIAkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAogfTsKIApAQCAtMjc5LDE2ICsyNzIsMTcgQEAKIAkucmVzb3VyY2UgPSAmcGNtMDM4X3NyYW1fcmVzb3VyY2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgcGNtMDM3X25hbmRfYm9hcmRfaW5mbyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YQorcGNtMDM3X25hbmRfYm9hcmRfaW5mbyBfX2luaXRjb25zdCA9IHsKIAkud2lkdGggPSAxLAogCS5od19lY2MgPSAxLAogfTsKIAotc3RhdGljIHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBwY20wMzdfaTJjXzFfZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14aTJjX3BsYXRmb3JtX2RhdGEgcGNtMDM3X2kyYzFfZGF0YSBfX2luaXRjb25zdCA9IHsKIAkuYml0cmF0ZSA9IDEwMDAwMCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW14aTJjX3BsYXRmb3JtX2RhdGEgcGNtMDM3X2kyY18yX2RhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlteGkyY19wbGF0Zm9ybV9kYXRhIHBjbTAzN19pMmMyX2RhdGEgX19pbml0Y29uc3QgPSB7CiAJLmJpdHJhdGUgPSAyMDAwMCwKIH07CiAKQEAgLTU0NSw2ICs1MzksNyBAQAogCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShwY205NzBfc2phMTAwMF9yZXNvdXJjZXMpLAogfTsKIAorI2lmIGRlZmluZWQoQ09ORklHX1VTQl9VTFBJKQogc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIG90Z19wZGF0YSA9IHsKIAkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VTFBJLAogCS5mbGFncwk9IE1YQ19FSENJX0lOVEVSRkFDRV9ESUZGX1VOSSwKQEAgLTU1NCw2ICs1NDksNyBAQAogCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VMUEksCiAJLmZsYWdzCT0gTVhDX0VIQ0lfSU5URVJGQUNFX0RJRkZfVU5JLAogfTsKKyNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgb3RnX2RldmljZV9wZGF0YSA9IHsKIAkub3BlcmF0aW5nX21vZGUgPSBGU0xfVVNCMl9EUl9ERVZJQ0UsCkBAIC01ODEsNyArNTc3LDYgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBteGNfYm9hcmRfaW5pdCh2b2lkKQogewogCWludCByZXQ7Ci0JdTMyIHRtcDsKIAogCW14Y19pb211eF9zZXRfZ3ByKE1VWF9QR1BfVUgyLCAxKTsKIApAQCAtNjE0LDkgKzYwOSwxMCBAQAogCiAJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CiAKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMSwgJnVhcnRfcGRhdGEpOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTIsICZ1YXJ0X3BkYXRhKTsKKwlpbXgzMV9hZGRfaW14X3VhcnQwKCZ1YXJ0X3BkYXRhKTsKKwkvKiBYWFg6IHNob3VsZCd0IHRoaXMgaGF2ZSAuZmxhZ3MgPSAwIChpLmUuIG5vIFJUU0NUUykgb24gUENNMDM3X0VFVD8gKi8KKwlpbXgzMV9hZGRfaW14X3VhcnQxKCZ1YXJ0X3BkYXRhKTsKKwlpbXgzMV9hZGRfaW14X3VhcnQyKCZ1YXJ0X3BkYXRhKTsKIAogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y193MV9tYXN0ZXJfZGV2aWNlLCBOVUxMKTsKIApAQCAtNjM0LDEwICs2MzAsMTAgQEAKIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBwY20wMzdfaTJjX2RldmljZXMsCiAJCQlBUlJBWV9TSVpFKHBjbTAzN19pMmNfZGV2aWNlcykpOwogCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX2kyY19kZXZpY2UxLCAmcGNtMDM3X2kyY18xX2RhdGEpOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19pMmNfZGV2aWNlMiwgJnBjbTAzN19pMmNfMl9kYXRhKTsKKwlpbXgzMV9hZGRfaW14X2kyYzEoJnBjbTAzN19pMmMxX2RhdGEpOworCWlteDMxX2FkZF9pbXhfaTJjMigmcGNtMDM3X2kyYzJfZGF0YSk7CiAKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfbmFuZF9kZXZpY2UsICZwY20wMzdfbmFuZF9ib2FyZF9pbmZvKTsKKwlpbXgzMV9hZGRfbXhjX25hbmQoJnBjbTAzN19uYW5kX2JvYXJkX2luZm8pOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y3NkaGNfZGV2aWNlMCwgJnNkaGNfcGRhdGEpOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14M19pcHUsICZteDNfaXB1X2RhdGEpOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14M19mYiwgJm14M2ZiX3BkYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtcGNtMDM3X2VldC5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1wY20wMzdfZWV0LmMKaW5kZXggOGQzODYwMC4uYzhiOTgyMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1wY20wMzdfZWV0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1wY20wMzdfZWV0LmMKQEAgLTEzLDkgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAKICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9JTVgpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9JTVhfTU9EVUxFKQotI2luY2x1ZGUgPG1hY2gvc3BpLmg+Ci0jZW5kaWYKICNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTY0LDcgKzYxLDcgQEAKICNpZiBkZWZpbmVkKENPTkZJR19TUElfSU1YKSB8fCBkZWZpbmVkKENPTkZJR19TUElfSU1YX01PRFVMRSkKIHN0YXRpYyBpbnQgcGNtMDM3X3NwaTFfY3NbXSA9IHtNWENfU1BJX0NTKDEpLCBJT01VWF9UT19HUElPKE1YMzFfUElOX0tFWV9DT0w3KX07CiAKLXN0cnVjdCBzcGlfaW14X21hc3RlciBwY20wMzdfc3BpMV9tYXN0ZXIgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9pbXhfbWFzdGVyIHBjbTAzN19zcGkxX3BkYXRhIF9faW5pdGNvbnN0ID0gewogCS5jaGlwc2VsZWN0ID0gcGNtMDM3X3NwaTFfY3MsCiAJLm51bV9jaGlwc2VsZWN0ID0gQVJSQVlfU0laRShwY20wMzdfc3BpMV9jcyksCiB9OwpAQCAtMTg0LDcgKzE4MSw3IEBACiAJLyogU1BJICovCiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8ocGNtMDM3X3NwaV9kZXYsIEFSUkFZX1NJWkUocGNtMDM3X3NwaV9kZXYpKTsKICNpZiBkZWZpbmVkKENPTkZJR19TUElfSU1YKSB8fCBkZWZpbmVkKENPTkZJR19TUElfSU1YX01PRFVMRSkKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc3BpX2RldmljZTAsICZwY20wMzdfc3BpMV9tYXN0ZXIpOworCWlteDM1X2FkZF9zcGlfaW14MCgmcGNtMDM3X3NwaTFfcGRhdGEpOwogI2VuZGlmCiAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBjbTAzN19ncGlvX2tleXNfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtcGNtMDQzLmMgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLXBjbTA0My5jCmluZGV4IDc4ZDkxODUuLjQ3ZjUzMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtcGNtMDQzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1wY20wNDMuYwpAQCAtMTAsMTAgKzEwLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtNDAsMTkgKzM2LDE1IEBACiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+Ci0jaWYgZGVmaW5lZCBDT05GSUdfSTJDX0lNWCB8fCBkZWZpbmVkIENPTkZJR19JMkNfSU1YX01PRFVMRQotI2luY2x1ZGUgPG1hY2gvaTJjLmg+Ci0jZW5kaWYKICNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MzUuaD4KICNpbmNsdWRlIDxtYWNoL2lwdS5oPgogI2luY2x1ZGUgPG1hY2gvbXgzZmIuaD4KLSNpbmNsdWRlIDxtYWNoL214Y19uYW5kLmg+CiAjaW5jbHVkZSA8bWFjaC9teGNfZWhjaS5oPgogI2luY2x1ZGUgPG1hY2gvdWxwaS5oPgogI2luY2x1ZGUgPG1hY2gvYXVkbXV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9zc2kuaD4KIAorI2luY2x1ZGUgImRldmljZXMtaW14MzUuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlIGZiX21vZGVkYltdID0gewpAQCAtMTIyLDEyICsxMTQsMTIgQEAKIAkubnVtX3Jlc291cmNlcyA9IDEsCiB9OwogCi1zdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSBfX2luaXRjb25zdCA9IHsKIAkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAogfTsKIAogI2lmIGRlZmluZWQgQ09ORklHX0kyQ19JTVggfHwgZGVmaW5lZCBDT05GSUdfSTJDX0lNWF9NT0RVTEUKLXN0YXRpYyBzdHJ1Y3QgaW14aTJjX3BsYXRmb3JtX2RhdGEgcGNtMDQzX2kyY18xX2RhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlteGkyY19wbGF0Zm9ybV9kYXRhIHBjbTA0M19pMmMwX2RhdGEgX19pbml0Y29uc3QgPSB7CiAJLmJpdHJhdGUgPSA1MDAwMCwKIH07CiAKQEAgLTIyMiw2ICsyMTQsOSBAQAogCU1YMzVfUEFEX1NUWEQ0X19BVURNVVhfQVVENF9UWEQsCiAJTVgzNV9QQURfU1JYRDRfX0FVRE1VWF9BVUQ0X1JYRCwKIAlNWDM1X1BBRF9TQ0s0X19BVURNVVhfQVVENF9UWEMsCisJLyogQ0FOMiAqLworCU1YMzVfUEFEX1RYNV9SWDBfX0NBTjJfVFhDQU4sCisJTVgzNV9QQURfVFg0X1JYMV9fQ0FOMl9SWENBTiwKIH07CiAKICNkZWZpbmUgQUM5N19HUElPX1RYRlMJKDEgKiAzMiArIDMxKQpAQCAtMzA0LDExICsyOTksMTMgQEAKIAkuZmxhZ3MgPSBJTVhfU1NJX1VTRV9BQzk3LAogfTsKIAotc3RhdGljIHN0cnVjdCBteGNfbmFuZF9wbGF0Zm9ybV9kYXRhIHBjbTAzN19uYW5kX2JvYXJkX2luZm8gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEKK3BjbTAzN19uYW5kX2JvYXJkX2luZm8gX19pbml0Y29uc3QgPSB7CiAJLndpZHRoID0gMSwKIAkuaHdfZWNjID0gMSwKIH07CiAKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfVUxQSSkKIHN0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSBvdGdfcGRhdGEgPSB7CiAJLnBvcnRzYwk9IE1YQ19FSENJX01PREVfVVRNSSwKIAkuZmxhZ3MJPSBNWENfRUhDSV9JTlRFUkZBQ0VfRElGRl9VTkksCkBAIC0zMTksNiArMzE2LDcgQEAKIAkuZmxhZ3MJPSBNWENfRUhDSV9JTlRFUkZBQ0VfU0lOR0xFX1VOSSB8IE1YQ19FSENJX0lOVEVSTkFMX1BIWSB8CiAJCSAgTVhDX0VIQ0lfSVBQVUVfRE9XTiwKIH07CisjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIG90Z19kZXZpY2VfcGRhdGEgPSB7CiAJLm9wZXJhdGluZ19tb2RlID0gRlNMX1VTQjJfRFJfREVWSUNFLApAQCAtMzYxLDE3ICszNTksMTcgQEAKIAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwogCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19uYW5kX2RldmljZSwgJnBjbTAzN19uYW5kX2JvYXJkX2luZm8pOworCWlteDM1X2FkZF9pbXhfdWFydDAoJnVhcnRfcGRhdGEpOworCWlteDM1X2FkZF9teGNfbmFuZCgmcGNtMDM3X25hbmRfYm9hcmRfaW5mbyk7CiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmaW14X3NzaV9kZXZpY2UwLCAmcGNtMDQzX3NzaV9wZGF0YSk7CiAKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UxLCAmdWFydF9wZGF0YSk7CisJaW14MzVfYWRkX2lteF91YXJ0MSgmdWFydF9wZGF0YSk7CiAKICNpZiBkZWZpbmVkIENPTkZJR19JMkNfSU1YIHx8IGRlZmluZWQgQ09ORklHX0kyQ19JTVhfTU9EVUxFCiAJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgcGNtMDQzX2kyY19kZXZpY2VzLAogCQkJQVJSQVlfU0laRShwY20wNDNfaTJjX2RldmljZXMpKTsKIAotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19pMmNfZGV2aWNlMCwgJnBjbTA0M19pMmNfMV9kYXRhKTsKKwlpbXgzNV9hZGRfaW14X2kyYzAoJnBjbTA0M19pMmMwX2RhdGEpOwogI2VuZGlmCiAKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDNfaXB1LCAmbXgzX2lwdV9kYXRhKTsKQEAgLTM5MCw2ICszODgsNyBAQAogCWlmICghb3RnX21vZGVfaG9zdCkKIAkJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX290Z191ZGNfZGV2aWNlLCAmb3RnX2RldmljZV9wZGF0YSk7CiAKKwlpbXgzNV9hZGRfZmxleGNhbjEoTlVMTCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwY20wNDNfdGltZXJfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1xb25nLmMgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLXFvbmcuYwppbmRleCBlNWI1YjgzLi5kNDRhYzcwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLXFvbmcuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLXFvbmcuYwpAQCAtMTAsMTAgKzEwLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtMzQsOSArMzAsOSBAQAogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxtYWNoL2JvYXJkLXFvbmcuaD4KLSNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CiAjaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KKworI2luY2x1ZGUgImRldmljZXMtaW14MzEuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAKIC8qIEZQR0EgZGVmaW5lcyAqLwpAQCAtNjIsNyArNTgsNyBAQAogICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBib2FyZC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4KICAqLwogCi1zdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSBfX2luaXRjb25zdCA9IHsKIAkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAogfTsKIApAQCAtNzMsMTEgKzY5LDExIEBACiAJTVgzMV9QSU5fUlhEMV9fUlhEMQogfTsKIAotc3RhdGljIGlubGluZSB2b2lkIG14Y19pbml0X2lteF91YXJ0KHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IG14Y19pbml0X2lteF91YXJ0KHZvaWQpCiB7CiAJbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnModWFydF9waW5zLCBBUlJBWV9TSVpFKHVhcnRfcGlucyksCiAJCQkidWFydC0wIik7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOworCWlteDMxX2FkZF9pbXhfdWFydDAoJnVhcnRfcGRhdGEpOwogfQogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGRuZXRfcmVzb3VyY2VzW10gPSB7CkBAIC0xMTYsNyArMTEyLDcgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBxb25nX2ZsYXNoX3Jlc291cmNlID0gewogCS5zdGFydCA9IE1YMzFfQ1MwX0JBU0VfQUREUiwKLQkuZW5kID0gTVgzMV9DUzBfQkFTRV9BRERSICsgUU9OR19OT1JfU0laRSAtIDEsCisJLmVuZCA9IE1YMzFfQ1MwX0JBU0VfQUREUiArIFNaXzEyOE0gLSAxLAogCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbW0uYyBiL2FyY2gvYXJtL21hY2gtbXgzL21tLmMKaW5kZXggNjg1OGE0Zi4uMjBlNDhjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbW0uYworKysgYi9hcmNoL2FybS9tYWNoLW14My9tbS5jCkBAIC0xNCwxMCArMTQsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC05Nyw5ICs5MywxMiBAQAogfQogI2VuZGlmCiAKK2ludCBpbXgzeF9yZWdpc3Rlcl9ncGlvcyh2b2lkKTsKKwogdm9pZCBfX2luaXQgbXgzMV9pbml0X2lycSh2b2lkKQogewogCW14Y19pbml0X2lycShJT19BRERSRVNTKEFWSUNfQkFTRV9BRERSKSk7CisJaW14M3hfcmVnaXN0ZXJfZ3Bpb3MoKTsKIH0KIAogdm9pZCBfX2luaXQgbXgzNV9pbml0X2lycSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWxpbGx5LWRiLmMgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbGlsbHktZGIuYwppbmRleCA3YWViZDc0Li44MjdmZDNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9teDMxbGlsbHktZGIuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbGlsbHktZGIuYwpAQCAtMTgsMTAgKzE4LDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTM2LDEzICszMiwxMyBAQAogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgogI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgzLmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC1teDMxbGlsbHkuaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvbXgzZmIuaD4KICNpbmNsdWRlIDxtYWNoL2lwdS5oPgogCisjaW5jbHVkZSAiZGV2aWNlcy1pbXgzMS5oIgogI2luY2x1ZGUgImRldmljZXMuaCIKIAogLyoKQEAgLTk2LDcgKzkyLDcgQEAKIH07CiAKIC8qIFVBUlQgKi8KLXN0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgX19pbml0Y29uc3QgPSB7CiAJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKIH07CiAKQEAgLTIxNyw5ICsyMTMsOSBAQAogCW14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKGxpbGx5X2RiX2JvYXJkX3BpbnMsCiAJCQkJCUFSUkFZX1NJWkUobGlsbHlfZGJfYm9hcmRfcGlucyksCiAJCQkJCSJkZXZlbG9wbWVudCBib2FyZCBwaW5zIik7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTEsICZ1YXJ0X3BkYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UyLCAmdWFydF9wZGF0YSk7CisJaW14MzFfYWRkX2lteF91YXJ0MCgmdWFydF9wZGF0YSk7CisJaW14MzFfYWRkX2lteF91YXJ0MSgmdWFydF9wZGF0YSk7CisJaW14MzFfYWRkX2lteF91YXJ0MigmdWFydF9wZGF0YSk7CiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjc2RoY19kZXZpY2UwLCAmbW1jX3BkYXRhKTsKIAlteDMxbGlsbHlfaW5pdF9mYigpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWxpdGUtZGIuYyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFsaXRlLWRiLmMKaW5kZXggNWYwNWJmYi4uN2IwZTc0ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWxpdGUtZGIuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbGl0ZS1kYi5jCkBAIC0xOCwxMCArMTgsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMzcsMTIgKzMzLDExIEBACiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CiAjaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLW14MzFsaXRlLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KLSNpbmNsdWRlIDxtYWNoL3NwaS5oPgogCisjaW5jbHVkZSAiZGV2aWNlcy1pbXgzMS5oIgogI2luY2x1ZGUgImRldmljZXMuaCIKIAogLyoKQEAgLTc2LDcgKzcxLDcgQEAKIH07CiAKIC8qIFVBUlQgKi8KLXN0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgX19pbml0Y29uc3QgPSB7CiAJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKIH07CiAKQEAgLTE2MSw3ICsxNTYsNyBAQAogCU1YQ19TUElfQ1MoMiksCiB9OwogCi1zdGF0aWMgc3RydWN0IHNwaV9pbXhfbWFzdGVyIHNwaTBfcGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9pbXhfbWFzdGVyIHNwaTBfcGRhdGEgX19pbml0Y29uc3QgPSB7CiAJLmNoaXBzZWxlY3QJPSBzcGlfaW50ZXJuYWxfY2hpcHNlbGVjdCwKIAkubnVtX2NoaXBzZWxlY3QJPSBBUlJBWV9TSVpFKHNwaV9pbnRlcm5hbF9jaGlwc2VsZWN0KSwKIH07CkBAIC0yMDEsOSArMTk2LDkgQEAKIAlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyhsaXRla2l0X2RiX2JvYXJkX3BpbnMsCiAJCQkJCUFSUkFZX1NJWkUobGl0ZWtpdF9kYl9ib2FyZF9waW5zKSwKIAkJCQkJImRldmVsb3BtZW50IGJvYXJkIHBpbnMiKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YSk7CisJaW14MzFfYWRkX2lteF91YXJ0MCgmdWFydF9wZGF0YSk7CiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjc2RoY19kZXZpY2UwLCAmbW1jX3BkYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc3BpX2RldmljZTAsICZzcGkwX3BkYXRhKTsKKwlpbXgzMV9hZGRfc3BpX2lteDAoJnNwaTBfcGRhdGEpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbGl0ZWtpdF9sZWRfZGV2aWNlKTsKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZpbXhfd2R0X2RldmljZTAsIE5VTEwpOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJmlteF9ydGNfZGV2aWNlMCwgTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1kZXZib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtZGV2Ym9hcmQuYwppbmRleCA1ODIyOTljLi5mYzM5NWE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1kZXZib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLWRldmJvYXJkLmMKQEAgLTEwLDEwICsxMCw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgpAQCAtMjcsMTMgKzIzLDEzIEBACiAjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgogCiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CiAjaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+CiAjaW5jbHVkZSA8bWFjaC91bHBpLmg+CiAKKyNpbmNsdWRlICJkZXZpY2VzLWlteDMxLmgiCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogCiBzdGF0aWMgdW5zaWduZWQgaW50IGRldmJvYXJkX3BpbnNbXSA9IHsKQEAgLTU2LDcgKzUyLDcgQEAKIAlNWDMxX1BJTl9SSV9EQ0UxX19HUElPMl8xMCwgTVgzMV9QSU5fRENEX0RDRTFfX0dQSU8yXzExLAogfTsKIAotc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgX19pbml0Y29uc3QgPSB7CiAJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKIH07CiAKQEAgLTIzMCw3ICsyMjYsNyBAQAogCW14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKGRldmJvYXJkX3BpbnMsIEFSUkFZX1NJWkUoZGV2Ym9hcmRfcGlucyksCiAJCSJkZXZib2FyZCIpOwogCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMSwgJnVhcnRfcGRhdGEpOworCWlteDMxX2FkZF9pbXhfdWFydDEoJnVhcnRfcGRhdGEpOwogCiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjc2RoY19kZXZpY2UxLCAmc2RoYzJfcGRhdGEpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1tYXJ4Ym90LmMgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1tYXJ4Ym90LmMKaW5kZXggNDkzMGY4Yy4uMDU1MWViMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtbWFyeGJvdC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLW1hcnhib3QuYwpAQCAtMTAsMTAgKzEwLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtc21hcnRib3QuYyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLXNtYXJ0Ym90LmMKaW5kZXggMjkzZWVhNi4uNDBjM2U3NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtc21hcnRib3QuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1zbWFydGJvdC5jCkBAIC0xMCwxMCArMTAsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC0zMCw3ICsyNiw2IEBACiAKICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CiAjaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLW14MzFtb2JvYXJkLmg+CiAjaW5jbHVkZSA8bWFjaC9teGNfZWhjaS5oPgpAQCAtMzgsNiArMzMsNyBAQAogCiAjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgogCisjaW5jbHVkZSAiZGV2aWNlcy1pbXgzMS5oIgogI2luY2x1ZGUgImRldmljZXMuaCIKIAogc3RhdGljIHVuc2lnbmVkIGludCBzbWFydGJvdF9waW5zW10gPSB7CkBAIC01OSw3ICs1NSw3IEBACiAJTVgzMV9QSU5fUklfRENFMV9fR1BJTzJfMTAsIE1YMzFfUElOX0RDRF9EQ0UxX19HUElPMl8xMSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhIF9faW5pdGNvbnN0ID0gewogCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCiB9OwogCkBAIC0xODMsOCArMTc5LDcgQEAKIAlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyhzbWFydGJvdF9waW5zLCBBUlJBWV9TSVpFKHNtYXJ0Ym90X3BpbnMpLAogCQkic21hcnRib3QiKTsKIAotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTEsICZ1YXJ0X3BkYXRhKTsKLQorCWlteDMxX2FkZF9pbXhfdWFydDEoJnVhcnRfcGRhdGEpOwogCiAJc3dpdGNoIChib2FyZCkgewogCWNhc2UgTVgzMVNNQVJUQk9UOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDUvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbXg1L0tjb25maWcKaW5kZXggMTU3NmQ1MS4uMDg0OGRiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDUvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW14NS9LY29uZmlnCkBAIC0xNSw0ICsxNSwzMSBAQAogCSAgdS1ib290LiBUaGlzIGluY2x1ZGVzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYm9hcmQgYW5kIGl0cwogCSAgcGVyaXBoZXJhbHMuCiAKK2NvbmZpZyBNQUNIX01YNTFfM0RTCisJYm9vbCAiU3VwcG9ydCBNWDUxUERLICgzRFMpIgorCXNlbGVjdCBNWENfREVCVUdfQk9BUkQKKwloZWxwCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIE1YNTFQREsgKDNEUykgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMgc3BlY2lmaWMKKwkgIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYm9hcmQgYW5kIGl0cyBwZXJpcGhlcmFscy4KKworY29uZmlnIE1BQ0hfRVVLUkVBX0NQVUlNWDUxCisJYm9vbCAiU3VwcG9ydCBFdWtyZWEgQ1BVSU1YNTEgbW9kdWxlIgorCWhlbHAKKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgRXVrcmVhIENQVUlNWDUxIHBsYXRmb3JtLiBUaGlzIGluY2x1ZGVzCisJICBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBmb3IgdGhlIG1vZHVsZSBhbmQgaXRzIHBlcmlwaGVyYWxzLgorCitjaG9pY2UKKwlwcm9tcHQgIkJhc2Vib2FyZCIKKwlkZXBlbmRzIG9uIE1BQ0hfRVVLUkVBX0NQVUlNWDUxCisJZGVmYXVsdCBNQUNIX0VVS1JFQV9NQklNWDUxX0JBU0VCT0FSRAorCitjb25maWcgTUFDSF9FVUtSRUFfTUJJTVg1MV9CQVNFQk9BUkQKKwlwcm9tcHQgIkV1a3JlYSBNQklNWDUxIGRldmVsb3BtZW50IGJvYXJkIgorCWJvb2wKKwloZWxwCisJICBUaGlzIGFkZHMgYm9hcmQgc3BlY2lmaWMgZGV2aWNlcyB0aGF0IGNhbiBiZSBmb3VuZCBvbiBFdWtyZWEncworCSAgTUJJTVg1MSBldmFsdWF0aW9uIGJvYXJkLgorCitlbmRjaG9pY2UKKwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1teDUvTWFrZWZpbGUKaW5kZXggYmYyM2Y4Ni4uODZjNjZlNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDUvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1teDUvTWFrZWZpbGUKQEAgLTYsNCArNiw2IEBACiBvYmoteSAgIDo9IGNwdS5vIG1tLm8gY2xvY2stbXg1MS5vIGRldmljZXMubwogCiBvYmotJChDT05GSUdfTUFDSF9NWDUxX0JBQkJBR0UpICs9IGJvYXJkLW14NTFfYmFiYmFnZS5vCi0KK29iai0kKENPTkZJR19NQUNIX01YNTFfM0RTKSArPSBib2FyZC1teDUxXzNkcy5vCitvYmotJChDT05GSUdfTUFDSF9FVUtSRUFfQ1BVSU1YNTEpICs9IGJvYXJkLWNwdWlteDUxLm8KK29iai0kKENPTkZJR19NQUNIX0VVS1JFQV9NQklNWDUxX0JBU0VCT0FSRCkgKz0gZXVrcmVhX21iaW14NTEtYmFzZWJvYXJkLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLWNwdWlteDUxLmMgYi9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1jcHVpbXg1MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMzYwN2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1jcHVpbXg1MS5jCkBAIC0wLDAgKzEsMjkzIEBACisvKgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBFcmljIELDqW5hcmQgPGVyaWNAZXVrcmVhLmNvbT4KKyAqCisgKiBiYXNlZCBvbiBib2FyZC1teDUxX2JhYmJhZ2UuYyB3aGljaCBpcworICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEFtaXQgS3VjaGVyaWEgPGFtaXQua3VjaGVyaWFAY2Fub25pY2FsLmNvbT4KKyAqCisgKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqCisgKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+CisKKyNpbmNsdWRlIDxtYWNoL2V1a3JlYS1iYXNlYm9hcmRzLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXg1MS5oPgorI2luY2x1ZGUgPG1hY2gvaTJjLmg+CisjaW5jbHVkZSA8bWFjaC9teGNfZWhjaS5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworI2luY2x1ZGUgImRldmljZXMuaCIKKworI2RlZmluZSBDUFVJTVg1MV9VU0JIMV9TVFAJKDAqMzIgKyAyNykKKyNkZWZpbmUgQ1BVSU1YNTFfUVVBUlRBX0dQSU8JKDIqMzIgKyAyOCkKKyNkZWZpbmUgQ1BVSU1YNTFfUVVBUlRCX0dQSU8JKDIqMzIgKyAyNSkKKyNkZWZpbmUgQ1BVSU1YNTFfUVVBUlRDX0dQSU8JKDIqMzIgKyAyNikKKyNkZWZpbmUgQ1BVSU1YNTFfUVVBUlREX0dQSU8JKDIqMzIgKyAyNykKKyNkZWZpbmUgQ1BVSU1YNTFfUVVBUlRBX0lSUQkoTVhDX0lOVEVSTkFMX0lSUVMgKyBDUFVJTVg1MV9RVUFSVEFfR1BJTykKKyNkZWZpbmUgQ1BVSU1YNTFfUVVBUlRCX0lSUQkoTVhDX0lOVEVSTkFMX0lSUVMgKyBDUFVJTVg1MV9RVUFSVEJfR1BJTykKKyNkZWZpbmUgQ1BVSU1YNTFfUVVBUlRDX0lSUQkoTVhDX0lOVEVSTkFMX0lSUVMgKyBDUFVJTVg1MV9RVUFSVENfR1BJTykKKyNkZWZpbmUgQ1BVSU1YNTFfUVVBUlREX0lSUQkoTVhDX0lOVEVSTkFMX0lSUVMgKyBDUFVJTVg1MV9RVUFSVERfR1BJTykKKyNkZWZpbmUgQ1BVSU1YNTFfUVVBUlRfWFRBTAkxNDc0NTYwMAorI2RlZmluZSBDUFVJTVg1MV9RVUFSVF9SRUdTSElGVAkxNworCisvKiBVU0JfQ1RSTF8xICovCisjZGVmaW5lIE1YNTFfVVNCX0NUUkxfMV9PRkZTRVQJCTB4MTAKKyNkZWZpbmUgTVg1MV9VU0JfQ1RSTF9VSDFfRVhUX0NMS19FTgkoMSA8PCAyNSkKKworI2RlZmluZQlNWDUxX1VTQl9QTExESVZfMTJfTUhaCQkweDAwCisjZGVmaW5lCU1YNTFfVVNCX1BMTF9ESVZfMTlfMl9NSFoJMHgwMQorI2RlZmluZQlNWDUxX1VTQl9QTExfRElWXzI0X01IWgkJMHgwMgorCisjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTApIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF84MjUwX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsX3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJCS5tYXBiYXNlID0gKHVuc2lnbmVkIGxvbmcpKE1YNTFfQ1MxX0JBU0VfQUREUiArIDB4NDAwMDAwKSwKKwkJLmlycSA9IENQVUlNWDUxX1FVQVJUQV9JUlEsCisJCS5pcnFmbGFncyA9IElSUUZfVFJJR0dFUl9ISUdILAorCQkudWFydGNsayA9IENQVUlNWDUxX1FVQVJUX1hUQUwsCisJCS5yZWdzaGlmdCA9IENQVUlNWDUxX1FVQVJUX1JFR1NISUZULAorCQkuaW90eXBlID0gVVBJT19NRU0sCisJCS5mbGFncyA9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCB8IFVQRl9JT1JFTUFQLAorCX0sIHsKKwkJLm1hcGJhc2UgPSAodW5zaWduZWQgbG9uZykoTVg1MV9DUzFfQkFTRV9BRERSICsgMHg4MDAwMDApLAorCQkuaXJxID0gQ1BVSU1YNTFfUVVBUlRCX0lSUSwKKwkJLmlycWZsYWdzID0gSVJRRl9UUklHR0VSX0hJR0gsCisJCS51YXJ0Y2xrID0gQ1BVSU1YNTFfUVVBUlRfWFRBTCwKKwkJLnJlZ3NoaWZ0ID0gQ1BVSU1YNTFfUVVBUlRfUkVHU0hJRlQsCisJCS5pb3R5cGUgPSBVUElPX01FTSwKKwkJLmZsYWdzID0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUIHwgVVBGX0lPUkVNQVAsCisJfSwgeworCQkubWFwYmFzZSA9ICh1bnNpZ25lZCBsb25nKShNWDUxX0NTMV9CQVNFX0FERFIgKyAweDEwMDAwMDApLAorCQkuaXJxID0gQ1BVSU1YNTFfUVVBUlRDX0lSUSwKKwkJLmlycWZsYWdzID0gSVJRRl9UUklHR0VSX0hJR0gsCisJCS51YXJ0Y2xrID0gQ1BVSU1YNTFfUVVBUlRfWFRBTCwKKwkJLnJlZ3NoaWZ0ID0gQ1BVSU1YNTFfUVVBUlRfUkVHU0hJRlQsCisJCS5pb3R5cGUgPSBVUElPX01FTSwKKwkJLmZsYWdzID0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUIHwgVVBGX0lPUkVNQVAsCisJfSwgeworCQkubWFwYmFzZSA9ICh1bnNpZ25lZCBsb25nKShNWDUxX0NTMV9CQVNFX0FERFIgKyAweDIwMDAwMDApLAorCQkuaXJxID0gQ1BVSU1YNTFfUVVBUlREX0lSUSwKKwkJLmlycWZsYWdzID0gSVJRRl9UUklHR0VSX0hJR0gsCisJCS51YXJ0Y2xrID0gQ1BVSU1YNTFfUVVBUlRfWFRBTCwKKwkJLnJlZ3NoaWZ0ID0gQ1BVSU1YNTFfUVVBUlRfUkVHU0hJRlQsCisJCS5pb3R5cGUgPSBVUElPX01FTSwKKwkJLmZsYWdzID0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUIHwgVVBGX0lPUkVNQVAsCisJfSwgeworCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNlcmlhbF9kZXZpY2UgPSB7CisJLm5hbWUgPSAic2VyaWFsODI1MCIsCisJLmlkID0gMCwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9IHNlcmlhbF9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmbXhjX2ZlY19kZXZpY2UsCisjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTApIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF84MjUwX01PRFVMRSkKKwkmc2VyaWFsX2RldmljZSwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBwYWRfZGVzYyBldWtyZWFfY3B1aW14NTFfcGFkc1tdID0geworCS8qIFVBUlQxICovCisJTVg1MV9QQURfVUFSVDFfUlhEX19VQVJUMV9SWEQsCisJTVg1MV9QQURfVUFSVDFfVFhEX19VQVJUMV9UWEQsCisJTVg1MV9QQURfVUFSVDFfUlRTX19VQVJUMV9SVFMsCisJTVg1MV9QQURfVUFSVDFfQ1RTX19VQVJUMV9DVFMsCisKKwkvKiBJMkMyICovCisJTVg1MV9QQURfR1BJT18xXzJfX0kyQzJfU0NMLAorCU1YNTFfUEFEX0dQSU9fMV8zX19JMkMyX1NEQSwKKwlNWDUxX1BBRF9OQU5ERl9EMTBfX0dQSU9fM18zMCwKKworCS8qIFFVQVJUIElSUSAqLworCU1YNTFfUEFEX05BTkRGX0QxNV9fR1BJT18zXzI1LAorCU1YNTFfUEFEX05BTkRGX0QxNF9fR1BJT18zXzI2LAorCU1YNTFfUEFEX05BTkRGX0QxM19fR1BJT18zXzI3LAorCU1YNTFfUEFEX05BTkRGX0QxMl9fR1BJT18zXzI4LAorCisJLyogVVNCIEhPU1QxICovCisJTVg1MV9QQURfVVNCSDFfQ0xLX19VU0JIMV9DTEssCisJTVg1MV9QQURfVVNCSDFfRElSX19VU0JIMV9ESVIsCisJTVg1MV9QQURfVVNCSDFfTlhUX19VU0JIMV9OWFQsCisJTVg1MV9QQURfVVNCSDFfREFUQTBfX1VTQkgxX0RBVEEwLAorCU1YNTFfUEFEX1VTQkgxX0RBVEExX19VU0JIMV9EQVRBMSwKKwlNWDUxX1BBRF9VU0JIMV9EQVRBMl9fVVNCSDFfREFUQTIsCisJTVg1MV9QQURfVVNCSDFfREFUQTNfX1VTQkgxX0RBVEEzLAorCU1YNTFfUEFEX1VTQkgxX0RBVEE0X19VU0JIMV9EQVRBNCwKKwlNWDUxX1BBRF9VU0JIMV9EQVRBNV9fVVNCSDFfREFUQTUsCisJTVg1MV9QQURfVVNCSDFfREFUQTZfX1VTQkgxX0RBVEE2LAorCU1YNTFfUEFEX1VTQkgxX0RBVEE3X19VU0JIMV9EQVRBNywKKwlNWDUxX1BBRF9VU0JIMV9TVFBfX1VTQkgxX1NUUCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgPSB7CisJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW14aTJjX3BsYXRmb3JtX2RhdGEgZXVrcmVhX2NwdWlteDUxX2kyY19kYXRhID0geworCS5iaXRyYXRlID0gMTAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBldWtyZWFfY3B1aW14NTFfaTJjX2RldmljZXNbXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTYzIiwgMHg1MSksCisJfSwKK307CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgYm9hcmQgc3BlY2lmaWMgYXMgdGhlIGJpdCBtYXNrIGZvciB0aGUgcGxsZGl2IHdpbGwgYWxzbworYmUgZGlmZmVyZW50IGZvciBvdGhlciBGcmVlc2NhbGUgU29DcywgdGh1cyBhIGNvbW1vbiBiaXRtYXNrIGlzIG5vdAorcG9zc2libGUgYW5kIGNhbm5vdCBnZXQgcGxhY2UgaW4gL3BsYXQtbXhjL2VoY2kuYy4qLworc3RhdGljIGludCBpbml0aWFsaXplX290Z19wb3J0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJdTMyIHY7CisJdm9pZCBfX2lvbWVtICp1c2JfYmFzZTsKKwl2b2lkIF9faW9tZW0gKnVzYm90aGVyX2Jhc2U7CisKKwl1c2JfYmFzZSA9IGlvcmVtYXAoTVg1MV9PVEdfQkFTRV9BRERSLCBTWl80Syk7CisJdXNib3RoZXJfYmFzZSA9IHVzYl9iYXNlICsgTVg1X1VTQk9USEVSX1JFR1NfT0ZGU0VUOworCisJLyogU2V0IHRoZSBQSFkgY2xvY2sgdG8gMTkuMk1IeiAqLworCXYgPSBfX3Jhd19yZWFkbCh1c2JvdGhlcl9iYXNlICsgTVhDX1VTQl9QSFlfQ1RSX0ZVTkMyX09GRlNFVCk7CisJdiAmPSB+TVg1X1VTQl9VVE1JX1BIWUNUUkwxX1BMTERJVl9NQVNLOworCXYgfD0gTVg1MV9VU0JfUExMX0RJVl8xOV8yX01IWjsKKwlfX3Jhd193cml0ZWwodiwgdXNib3RoZXJfYmFzZSArIE1YQ19VU0JfUEhZX0NUUl9GVU5DMl9PRkZTRVQpOworCWlvdW5tYXAodXNiX2Jhc2UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGluaXRpYWxpemVfdXNiaDFfcG9ydChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXUzMiB2OworCXZvaWQgX19pb21lbSAqdXNiX2Jhc2U7CisJdm9pZCBfX2lvbWVtICp1c2JvdGhlcl9iYXNlOworCisJdXNiX2Jhc2UgPSBpb3JlbWFwKE1YNTFfT1RHX0JBU0VfQUREUiwgU1pfNEspOworCXVzYm90aGVyX2Jhc2UgPSB1c2JfYmFzZSArIE1YNV9VU0JPVEhFUl9SRUdTX09GRlNFVDsKKworCS8qIFRoZSBjbG9jayBmb3IgdGhlIFVTQkgxIFVMUEkgcG9ydCB3aWxsIGNvbWUgZXh0ZXJuYWxseSBmcm9tIHRoZSBQSFkuICovCisJdiA9IF9fcmF3X3JlYWRsKHVzYm90aGVyX2Jhc2UgKyBNWDUxX1VTQl9DVFJMXzFfT0ZGU0VUKTsKKwlfX3Jhd193cml0ZWwodiB8IE1YNTFfVVNCX0NUUkxfVUgxX0VYVF9DTEtfRU4sIHVzYm90aGVyX2Jhc2UgKyBNWDUxX1VTQl9DVFJMXzFfT0ZGU0VUKTsKKwlpb3VubWFwKHVzYl9iYXNlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIGRyX3V0bWlfY29uZmlnID0geworCS5pbml0CQk9IGluaXRpYWxpemVfb3RnX3BvcnQsCisJLnBvcnRzYwk9IE1YQ19FSENJX1VUTUlfMTZCSVQsCisJLmZsYWdzCT0gTVhDX0VIQ0lfSU5URVJOQUxfUEhZLAorfTsKKworc3RhdGljIHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIHVzYl9wZGF0YSA9IHsKKwkub3BlcmF0aW5nX21vZGUJPSBGU0xfVVNCMl9EUl9ERVZJQ0UsCisJLnBoeV9tb2RlCT0gRlNMX1VTQjJfUEhZX1VUTUlfV0lERSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSB1c2JoMV9jb25maWcgPSB7CisJLmluaXQJCT0gaW5pdGlhbGl6ZV91c2JoMV9wb3J0LAorCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VMUEksCisJLmZsYWdzCT0gKE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCB8IE1YQ19FSENJX0lUQ19OT19USFJFU0hPTEQpLAorfTsKKworc3RhdGljIGludCBvdGdfbW9kZV9ob3N0OworCitzdGF0aWMgaW50IF9faW5pdCBldWtyZWFfY3B1aW14NTFfb3RnX21vZGUoY2hhciAqb3B0aW9ucykKK3sKKwlpZiAoIXN0cmNtcChvcHRpb25zLCAiaG9zdCIpKQorCQlvdGdfbW9kZV9ob3N0ID0gMTsKKwllbHNlIGlmICghc3RyY21wKG9wdGlvbnMsICJkZXZpY2UiKSkKKwkJb3RnX21vZGVfaG9zdCA9IDA7CisJZWxzZQorCQlwcl9pbmZvKCJvdGdfbW9kZSBuZWl0aGVyIFwiaG9zdFwiIG5vciBcImRldmljZVwiLiAiCisJCQkiRGVmYXVsdGluZyB0byBkZXZpY2VcbiIpOworCXJldHVybiAwOworfQorX19zZXR1cCgib3RnX21vZGU9IiwgZXVrcmVhX2NwdWlteDUxX290Z19tb2RlKTsKKworLyoKKyAqIEJvYXJkIHNwZWNpZmljIGluaXRpYWxpemF0aW9uLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgZXVrcmVhX2NwdWlteDUxX2luaXQodm9pZCkKK3sKKwlteGNfaW9tdXhfdjNfc2V0dXBfbXVsdGlwbGVfcGFkcyhldWtyZWFfY3B1aW14NTFfcGFkcywKKwkJCQkJQVJSQVlfU0laRShldWtyZWFfY3B1aW14NTFfcGFkcykpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOworCWdwaW9fcmVxdWVzdChDUFVJTVg1MV9RVUFSVEFfR1BJTywgInF1YXJ0YV9pcnEiKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChDUFVJTVg1MV9RVUFSVEFfR1BJTyk7CisJZ3Bpb19mcmVlKENQVUlNWDUxX1FVQVJUQV9HUElPKTsKKwlncGlvX3JlcXVlc3QoQ1BVSU1YNTFfUVVBUlRCX0dQSU8sICJxdWFydGJfaXJxIik7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoQ1BVSU1YNTFfUVVBUlRCX0dQSU8pOworCWdwaW9fZnJlZShDUFVJTVg1MV9RVUFSVEJfR1BJTyk7CisJZ3Bpb19yZXF1ZXN0KENQVUlNWDUxX1FVQVJUQ19HUElPLCAicXVhcnRjX2lycSIpOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KENQVUlNWDUxX1FVQVJUQ19HUElPKTsKKwlncGlvX2ZyZWUoQ1BVSU1YNTFfUVVBUlRDX0dQSU8pOworCWdwaW9fcmVxdWVzdChDUFVJTVg1MV9RVUFSVERfR1BJTywgInF1YXJ0ZF9pcnEiKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChDUFVJTVg1MV9RVUFSVERfR1BJTyk7CisJZ3Bpb19mcmVlKENQVUlNWDUxX1FVQVJURF9HUElPKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX2kyY19kZXZpY2UxLCAmZXVrcmVhX2NwdWlteDUxX2kyY19kYXRhKTsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBldWtyZWFfY3B1aW14NTFfaTJjX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShldWtyZWFfY3B1aW14NTFfaTJjX2RldmljZXMpKTsKKworCWlmIChvdGdfbW9kZV9ob3N0KQorCQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdXNiZHJfaG9zdF9kZXZpY2UsICZkcl91dG1pX2NvbmZpZyk7CisJZWxzZSB7CisJCWluaXRpYWxpemVfb3RnX3BvcnQoTlVMTCk7CisJCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2Jkcl91ZGNfZGV2aWNlLCAmdXNiX3BkYXRhKTsKKwl9CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VzYmgxX2RldmljZSwgJnVzYmgxX2NvbmZpZyk7CisKKyNpZmRlZiBDT05GSUdfTUFDSF9FVUtSRUFfTUJJTVg1MV9CQVNFQk9BUkQKKwlldWtyZWFfbWJpbXg1MV9iYXNlYm9hcmRfaW5pdCgpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBldWtyZWFfY3B1aW14NTFfdGltZXJfaW5pdCh2b2lkKQoreworCW14NTFfY2xvY2tzX2luaXQoMzI3NjgsIDI0MDAwMDAwLCAyMjU3OTIwMCwgMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIG14Y190aW1lciA9IHsKKwkuaW5pdAk9IGV1a3JlYV9jcHVpbXg1MV90aW1lcl9pbml0LAorfTsKKworTUFDSElORV9TVEFSVChFVUtSRUFfQ1BVSU1YNTEsICJFdWtyZWEgQ1BVSU1YNTEgTW9kdWxlIikKKwkvKiBNYWludGFpbmVyOiBFcmljIELDqW5hcmQgPGVyaWNAZXVrcmVhLmNvbT4gKi8KKwkucGh5c19pbyA9IE1YNTFfQUlQUzFfQkFTRV9BRERSLAorCS5pb19wZ19vZmZzdCA9ICgoTVg1MV9BSVBTMV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcyA9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbyA9IG14NTFfbWFwX2lvLAorCS5pbml0X2lycSA9IG14NTFfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZSA9IGV1a3JlYV9jcHVpbXg1MV9pbml0LAorCS50aW1lciA9ICZteGNfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtbXg1MV8zZHMuYyBiL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTFfM2RzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk1YzJmZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTFfM2RzLmMKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSmFzb24gV2FuZyA8amFzb243Ny53YW5nQGdtYWlsLmNvbT4KKyAqCisgKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqCisgKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICovCisKKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14NTEuaD4KKyNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CisjaW5jbHVkZSA8bWFjaC8zZHNfZGVidWdib2FyZC5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCisjZGVmaW5lIEVYUElPX1BBUkVOVF9JTlQJKE1YQ19JTlRFUk5BTF9JUlFTICsgR1BJT19QT1JUQSArIDYpCisKK3N0YXRpYyBzdHJ1Y3QgcGFkX2Rlc2MgbXg1MV8zZHNfcGFkc1tdID0geworCS8qIFVBUlQxICovCisJTVg1MV9QQURfVUFSVDFfUlhEX19VQVJUMV9SWEQsCisJTVg1MV9QQURfVUFSVDFfVFhEX19VQVJUMV9UWEQsCisJTVg1MV9QQURfVUFSVDFfUlRTX19VQVJUMV9SVFMsCisJTVg1MV9QQURfVUFSVDFfQ1RTX19VQVJUMV9DVFMsCisKKwkvKiBVQVJUMiAqLworCU1YNTFfUEFEX1VBUlQyX1JYRF9fVUFSVDJfUlhELAorCU1YNTFfUEFEX1VBUlQyX1RYRF9fVUFSVDJfVFhELAorCU1YNTFfUEFEX0VJTV9EMjVfX1VBUlQyX0NUUywKKwlNWDUxX1BBRF9FSU1fRDI2X19VQVJUMl9SVFMsCisKKwkvKiBVQVJUMyAqLworCU1YNTFfUEFEX1VBUlQzX1JYRF9fVUFSVDNfUlhELAorCU1YNTFfUEFEX1VBUlQzX1RYRF9fVUFSVDNfVFhELAorCU1YNTFfUEFEX0VJTV9EMjRfX1VBUlQzX0NUUywKKwlNWDUxX1BBRF9FSU1fRDI3X19VQVJUM19SVFMsCisKKwkvKiBDUExEIFBBUkVOVCBJUlEgUElOICovCisJTVg1MV9QQURfR1BJT18xXzZfX0dQSU9fMV82LAorCisJLyogS1BQICovCisJTVg1MV9QQURfS0VZX1JPVzBfX0tFWV9ST1cwLAorCU1YNTFfUEFEX0tFWV9ST1cxX19LRVlfUk9XMSwKKwlNWDUxX1BBRF9LRVlfUk9XMl9fS0VZX1JPVzIsCisJTVg1MV9QQURfS0VZX1JPVzNfX0tFWV9ST1czLAorCU1YNTFfUEFEX0tFWV9DT0wwX19LRVlfQ09MMCwKKwlNWDUxX1BBRF9LRVlfQ09MMV9fS0VZX0NPTDEsCisJTVg1MV9QQURfS0VZX0NPTDJfX0tFWV9DT0wyLAorCU1YNTFfUEFEX0tFWV9DT0wzX19LRVlfQ09MMywKKwlNWDUxX1BBRF9LRVlfQ09MNF9fS0VZX0NPTDQsCisJTVg1MV9QQURfS0VZX0NPTDVfX0tFWV9DT0w1LAorfTsKKworLyogU2VyaWFsIHBvcnRzICovCisjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0lNWCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0lNWF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0geworCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgbXhjX2luaXRfaW14X3VhcnQodm9pZCkKK3sKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMSwgJnVhcnRfcGRhdGEpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTIsICZ1YXJ0X3BkYXRhKTsKK30KKyNlbHNlIC8qICFTRVJJQUxfSU1YICovCitzdGF0aWMgaW5saW5lIHZvaWQgbXhjX2luaXRfaW14X3VhcnQodm9pZCkKK3sKK30KKyNlbmRpZiAvKiBTRVJJQUxfSU1YICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9JTVgpIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0lNWF9NT0RVTEUpCitzdGF0aWMgaW50IG14NTFfM2RzX2JvYXJkX2tleW1hcFtdID0geworCUtFWSgwLCAwLCBLRVlfMSksCisJS0VZKDAsIDEsIEtFWV8yKSwKKwlLRVkoMCwgMiwgS0VZXzMpLAorCUtFWSgwLCAzLCBLRVlfRjEpLAorCUtFWSgwLCA0LCBLRVlfVVApLAorCUtFWSgwLCA1LCBLRVlfRjIpLAorCisJS0VZKDEsIDAsIEtFWV80KSwKKwlLRVkoMSwgMSwgS0VZXzUpLAorCUtFWSgxLCAyLCBLRVlfNiksCisJS0VZKDEsIDMsIEtFWV9MRUZUKSwKKwlLRVkoMSwgNCwgS0VZX1NFTEVDVCksCisJS0VZKDEsIDUsIEtFWV9SSUdIVCksCisKKwlLRVkoMiwgMCwgS0VZXzcpLAorCUtFWSgyLCAxLCBLRVlfOCksCisJS0VZKDIsIDIsIEtFWV85KSwKKwlLRVkoMiwgMywgS0VZX0YzKSwKKwlLRVkoMiwgNCwgS0VZX0RPV04pLAorCUtFWSgyLCA1LCBLRVlfRjQpLAorCisJS0VZKDMsIDAsIEtFWV8wKSwKKwlLRVkoMywgMSwgS0VZX09LKSwKKwlLRVkoMywgMiwgS0VZX0VTQyksCisJS0VZKDMsIDMsIEtFWV9FTlRFUiksCisJS0VZKDMsIDQsIEtFWV9NRU5VKSwKKwlLRVkoMywgNSwgS0VZX0JBQ0spCit9OworCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBteDUxXzNkc19tYXBfZGF0YSA9IHsKKwkua2V5bWFwCQk9IG14NTFfM2RzX2JvYXJkX2tleW1hcCwKKwkua2V5bWFwX3NpemUJPSBBUlJBWV9TSVpFKG14NTFfM2RzX2JvYXJkX2tleW1hcCksCit9OworCitzdGF0aWMgdm9pZCBteGNfaW5pdF9rZXlwYWQodm9pZCkKK3sKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfa2V5cGFkX2RldmljZSwgJm14NTFfM2RzX21hcF9kYXRhKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgbXhjX2luaXRfa2V5cGFkKHZvaWQpCit7Cit9CisjZW5kaWYKKworLyoKKyAqIEJvYXJkIHNwZWNpZmljIGluaXRpYWxpemF0aW9uLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgbXhjX2JvYXJkX2luaXQodm9pZCkKK3sKKwlteGNfaW9tdXhfdjNfc2V0dXBfbXVsdGlwbGVfcGFkcyhteDUxXzNkc19wYWRzLAorCQkJCQlBUlJBWV9TSVpFKG14NTFfM2RzX3BhZHMpKTsKKwlteGNfaW5pdF9pbXhfdWFydCgpOworCisJaWYgKG14Y19leHBpb19pbml0KE1YNTFfQ1M1X0JBU0VfQUREUiwgRVhQSU9fUEFSRU5UX0lOVCkpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkluaXQgb2YgdGhlIGRlYnVnYm9hcmQgZmFpbGVkLCBhbGwgIgorCQkJCSAgICAiZGV2aWNlcyBvbiB0aGUgYm9hcmQgYXJlIHVudXNhYmxlLlxuIik7CisKKwlteGNfaW5pdF9rZXlwYWQoKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG14NTFfM2RzX3RpbWVyX2luaXQodm9pZCkKK3sKKwlteDUxX2Nsb2Nrc19pbml0KDMyNzY4LCAyNDAwMDAwMCwgMjI1NzkyMDAsIDApOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBteGNfdGltZXIgPSB7CisJLmluaXQJPSBteDUxXzNkc190aW1lcl9pbml0LAorfTsKKworTUFDSElORV9TVEFSVChNWDUxXzNEUywgIkZyZWVzY2FsZSBNWDUxIDMtU3RhY2sgQm9hcmQiKQorCS8qIE1haW50YWluZXI6IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuICovCisJLnBoeXNfaW8gPSBNWDUxX0FJUFMxX0JBU0VfQUREUiwKKwkuaW9fcGdfb2Zmc3QgPSAoKE1YNTFfQUlQUzFfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMgPSBQSFlTX09GRlNFVCArIDB4MTAwLAorCS5tYXBfaW8gPSBteDUxX21hcF9pbywKKwkuaW5pdF9pcnEgPSBteDUxX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgPSBteGNfYm9hcmRfaW5pdCwKKwkudGltZXIgPSAmbXhjX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTFfYmFiYmFnZS5jIGIvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtbXg1MV9iYWJiYWdlLmMKaW5kZXggZWQ4ODVmOS4uNmUzODRkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtbXg1MV9iYWJiYWdlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtbXg1MV9iYWJiYWdlLmMKQEAgLTEyLDYgKzEyLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpAQCAtMjEsNiArMjIsNyBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CiAjaW5jbHVkZSA8bWFjaC9pb211eC1teDUxLmg+CisjaW5jbHVkZSA8bWFjaC9pMmMuaD4KICNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC02NCw2ICs2NiwxOCBAQAogCU1YNTFfUEFEX0VJTV9EMjdfX1VBUlQzX1JUUywKIAlNWDUxX1BBRF9FSU1fRDI0X19VQVJUM19DVFMsCiAKKwkvKiBJMkMxICovCisJTVg1MV9QQURfRUlNX0QxNl9fSTJDMV9TREEsCisJTVg1MV9QQURfRUlNX0QxOV9fSTJDMV9TQ0wsCisKKwkvKiBJMkMyICovCisJTVg1MV9QQURfS0VZX0NPTDRfX0kyQzJfU0NMLAorCU1YNTFfUEFEX0tFWV9DT0w1X19JMkMyX1NEQSwKKworCS8qIEhTSTJDICovCisJTVg1MV9QQURfSTJDMV9DTEtfX0hTSTJDX0NMSywKKwlNWDUxX1BBRF9JMkMxX0RBVF9fSFNJMkNfREFULAorCiAJLyogVVNCIEhPU1QxICovCiAJTVg1MV9QQURfVVNCSDFfQ0xLX19VU0JIMV9DTEssCiAJTVg1MV9QQURfVVNCSDFfRElSX19VU0JIMV9ESVIsCkBAIC03OCw3ICs5Miw3IEBACiAJTVg1MV9QQURfVVNCSDFfREFUQTdfX1VTQkgxX0RBVEE3LAogCiAJLyogVVNCIEhVQiByZXNldCBsaW5lKi8KLQlNWDUxX1BBRF9HUElPXzFfN19fR1BJTzFfNywKKwlNWDUxX1BBRF9HUElPXzFfN19fR1BJT18xXzcsCiB9OwogCiAvKiBTZXJpYWwgcG9ydHMgKi8KQEAgLTk5LDYgKzExMywxNCBAQAogfQogI2VuZGlmIC8qIFNFUklBTF9JTVggKi8KIAorc3RhdGljIHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBiYWJiYWdlX2kyY19kYXRhID0geworCS5iaXRyYXRlID0gMTAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBiYWJiYWdlX2hzaTJjX2RhdGEgPSB7CisJLmJpdHJhdGUgPSA0MDAwMDAsCit9OworCiBzdGF0aWMgaW50IGdwaW9fdXNiaDFfYWN0aXZlKHZvaWQpCiB7CiAJc3RydWN0IHBhZF9kZXNjIHVzYmgxc3RwX2dwaW8gPSBNWDUxX1BBRF9VU0JIMV9TVFBfX0dQSU9fMV8yNzsKQEAgLTIzMCw2ICsyNTIsMTAgQEAKIAlteGNfaW5pdF9pbXhfdWFydCgpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwogCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX2kyY19kZXZpY2UwLCAmYmFiYmFnZV9pMmNfZGF0YSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX2kyY19kZXZpY2UxLCAmYmFiYmFnZV9pMmNfZGF0YSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX2hzaTJjX2RldmljZSwgJmJhYmJhZ2VfaHNpMmNfZGF0YSk7CisKIAlpZiAob3RnX21vZGVfaG9zdCkKIAkJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VzYmRyX2hvc3RfZGV2aWNlLCAmZHJfdXRtaV9jb25maWcpOwogCWVsc2UgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDUvY2xvY2stbXg1MS5jIGIvYXJjaC9hcm0vbWFjaC1teDUvY2xvY2stbXg1MS5jCmluZGV4IGQ5ZjYxMmQuLjZhZjY5ZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXg1L2Nsb2NrLW14NTEuYworKysgYi9hcmNoL2FybS9tYWNoLW14NS9jbG9jay1teDUxLmMKQEAgLTc1OCw2ICs3NTgsMTAgQEAKIAkucGFyZW50ID0gJmNraWxfY2xrLAogfTsKIAorc3RhdGljIHN0cnVjdCBjbGsga3BwX2NsayA9IHsKKwkuaWQgPSAwLAorfTsKKwogI2RlZmluZSBERUZJTkVfQ0xPQ0sobmFtZSwgaSwgZXIsIGVzLCBnciwgc3IsIHAsIHMpCVwKIAlzdGF0aWMgc3RydWN0IGNsayBuYW1lID0gewkJCVwKIAkJLmlkCQk9IGksCQkJXApAQCAtNzk4LDYgKzgwMiwxNCBAQAogREVGSU5FX0NMT0NLKGdwdF9pcGdfY2xrLCAwLCBNWENfQ0NNX0NDR1IyLCBNWENfQ0NNX0NDR1J4X0NHMTBfT0ZGU0VULAogCU5VTEwsICBOVUxMLCAmaXBnX2NsaywgTlVMTCk7CiAKKy8qIEkyQyAqLworREVGSU5FX0NMT0NLKGkyYzFfY2xrLCAwLCBNWENfQ0NNX0NDR1IxLCBNWENfQ0NNX0NDR1J4X0NHOV9PRkZTRVQsCisJTlVMTCwgTlVMTCwgJmlwZ19jbGssIE5VTEwpOworREVGSU5FX0NMT0NLKGkyYzJfY2xrLCAxLCBNWENfQ0NNX0NDR1IxLCBNWENfQ0NNX0NDR1J4X0NHMTBfT0ZGU0VULAorCU5VTEwsIE5VTEwsICZpcGdfY2xrLCBOVUxMKTsKK0RFRklORV9DTE9DSyhoc2kyY19jbGssIDAsIE1YQ19DQ01fQ0NHUjEsIE1YQ19DQ01fQ0NHUnhfQ0cxMV9PRkZTRVQsCisJTlVMTCwgTlVMTCwgJmlwZ19jbGssIE5VTEwpOworCiAvKiBGRUMgKi8KIERFRklORV9DTE9DSyhmZWNfY2xrLCAwLCBNWENfQ0NNX0NDR1IyLCBNWENfQ0NNX0NDR1J4X0NHMTJfT0ZGU0VULAogCU5VTEwsICBOVUxMLCAmaXBnX2NsaywgTlVMTCk7CkBAIC04MTUsMTIgKzgyNywxNiBAQAogCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMiIsIE5VTEwsIHVhcnQzX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwdCIsIGdwdF9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJmZWMuMCIsIE5VTEwsIGZlY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjAiLCBOVUxMLCBpMmMxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMSIsIE5VTEwsIGkyYzJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4yIiwgTlVMTCwgaHNpMmNfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMCIsICJ1c2IiLCB1c2JvaDNfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMCIsICJ1c2JfYWhiIiwgYWhiX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soIm14Yy1laGNpLjEiLCAidXNiIiwgdXNib2gzX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soIm14Yy1laGNpLjEiLCAidXNiX2FoYiIsIGFoYl9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJmc2wtdXNiMi11ZGMiLCAidXNiIiwgdXNib2gzX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImZzbC11c2IyLXVkYyIsICJ1c2JfYWhiIiwgYWhiX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1rZXlwYWQuMCIsIE5VTEwsIGtwcF9jbGspCiB9OwogCiBzdGF0aWMgdm9pZCBjbGtfdHJlZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW14NS9kZXZpY2VzLmMKaW5kZXggNzEzMDQ0OS4uMTkyMGZmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDUvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L2RldmljZXMuYwpAQCAtOTMsNiArOTMsNjQgQEAKIAkucmVzb3VyY2UgPSBteGNfZmVjX3Jlc291cmNlcywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX2kyYzBfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBNWDUxX0kyQzFfQkFTRV9BRERSLAorCQkuZW5kID0gTVg1MV9JMkMxX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSBNWDUxX01YQ19JTlRfSTJDMSwKKwkJLmVuZCA9IE1YNTFfTVhDX0lOVF9JMkMxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTAgPSB7CisJLm5hbWUgPSAiaW14LWkyYyIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX2kyYzBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfaTJjMF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19pMmMxX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gTVg1MV9JMkMyX0JBU0VfQUREUiwKKwkJLmVuZCA9IE1YNTFfSTJDMl9CQVNFX0FERFIgKyBTWl80SyAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gTVg1MV9NWENfSU5UX0kyQzIsCisJCS5lbmQgPSBNWDUxX01YQ19JTlRfSTJDMiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2kyY19kZXZpY2UxID0geworCS5uYW1lID0gImlteC1pMmMiLAorCS5pZCA9IDEsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19pMmMxX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gbXhjX2kyYzFfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfaHNpMmNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBNWDUxX0hTSTJDX0RNQV9CQVNFX0FERFIsCisJCS5lbmQgPSBNWDUxX0hTSTJDX0RNQV9CQVNFX0FERFIgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gTVg1MV9NWENfSU5UX0hTX0kyQywKKwkJLmVuZCA9IE1YNTFfTVhDX0lOVF9IU19JMkMsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19oc2kyY19kZXZpY2UgPSB7CisJLm5hbWUgPSAiaW14LWkyYyIsCisJLmlkID0gMiwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX2hzaTJjX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gbXhjX2hzaTJjX3Jlc291cmNlcworfTsKKwogc3RhdGljIHU2NCB1c2JfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHVzYm90Z19yZXNvdXJjZXNbXSA9IHsKQEAgLTE2OCwzNCArMjI2LDU3IEBACiAJLnJlc291cmNlID0gbXhjX3dkdF9yZXNvdXJjZXMsCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19rcHBfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBNWDUxX01YQ19JTlRfS1BQLAorCQkuZW5kID0gTVg1MV9NWENfSU5UX0tQUCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSAsIHsKKwkJLnN0YXJ0ID0gTVg1MV9LUFBfQkFTRV9BRERSLAorCQkuZW5kID0gTVg1MV9LUFBfQkFTRV9BRERSICsgMHg4IC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2tleXBhZF9kZXZpY2UgPSB7CisJLm5hbWUgPSAiaW14LWtleXBhZCIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX2twcF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y19rcHBfcmVzb3VyY2VzLAorfTsKKwogc3RhdGljIHN0cnVjdCBteGNfZ3Bpb19wb3J0IG14Y19ncGlvX3BvcnRzW10gPSB7CiAJewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTAiLAogCQkuYmFzZSA9IE1YNTFfSU9fQUREUkVTUyhNWDUxX0dQSU8xX0JBU0VfQUREUiksCiAJCS5pcnEgPSBNWDUxX01YQ19JTlRfR1BJTzFfTE9XLAorCQkuaXJxX2hpZ2ggPSBNWDUxX01YQ19JTlRfR1BJTzFfSElHSCwKIAkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUCiAJfSwKIAl7CiAJCS5jaGlwLmxhYmVsID0gImdwaW8tMSIsCiAJCS5iYXNlID0gTVg1MV9JT19BRERSRVNTKE1YNTFfR1BJTzJfQkFTRV9BRERSKSwKIAkJLmlycSA9IE1YNTFfTVhDX0lOVF9HUElPMl9MT1csCisJCS5pcnFfaGlnaCA9IE1YNTFfTVhDX0lOVF9HUElPMl9ISUdILAogCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyAzMiAqIDEKIAl9LAogCXsKIAkJLmNoaXAubGFiZWwgPSAiZ3Bpby0yIiwKIAkJLmJhc2UgPSBNWDUxX0lPX0FERFJFU1MoTVg1MV9HUElPM19CQVNFX0FERFIpLAogCQkuaXJxID0gTVg1MV9NWENfSU5UX0dQSU8zX0xPVywKKwkJLmlycV9oaWdoID0gTVg1MV9NWENfSU5UX0dQSU8zX0hJR0gsCiAJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDMyICogMgogCX0sCiAJewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTMiLAogCQkuYmFzZSA9IE1YNTFfSU9fQUREUkVTUyhNWDUxX0dQSU80X0JBU0VfQUREUiksCiAJCS5pcnEgPSBNWDUxX01YQ19JTlRfR1BJTzRfTE9XLAorCQkuaXJxX2hpZ2ggPSBNWDUxX01YQ19JTlRfR1BJTzRfSElHSCwKIAkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgMzIgKiAzCiAJfSwKIH07CiAKLWludCBfX2luaXQgbXhjX3JlZ2lzdGVyX2dwaW9zKHZvaWQpCitpbnQgX19pbml0IGlteDUxX3JlZ2lzdGVyX2dwaW9zKHZvaWQpCiB7CiAJcmV0dXJuIG14Y19ncGlvX2luaXQobXhjX2dwaW9fcG9ydHMsIEFSUkFZX1NJWkUobXhjX2dwaW9fcG9ydHMpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtbXg1L2RldmljZXMuaAppbmRleCBjODc5YWU3Li5lNTA5Y2ZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14NS9kZXZpY2VzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teDUvZGV2aWNlcy5oCkBAIC02LDMgKzYsNyBAQAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VzYmgxX2RldmljZTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191c2Jkcl91ZGNfZGV2aWNlOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3dkdDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19pMmNfZGV2aWNlMDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19pMmNfZGV2aWNlMTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19oc2kyY19kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfa2V5cGFkX2RldmljZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L2V1a3JlYV9tYmlteDUxLWJhc2Vib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1teDUvZXVrcmVhX21iaW14NTEtYmFzZWJvYXJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZhOTNkMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L2V1a3JlYV9tYmlteDUxLWJhc2Vib2FyZC5jCkBAIC0wLDAgKzEsMjAwIEBACisvKgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBFcmljIELDqW5hcmQgPGVyaWNAZXVrcmVhLmNvbT4KKyAqCisgKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqCisgKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90c2MyMDA3Lmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KKworI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14NTEuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworI2luY2x1ZGUgImRldmljZXMuaCIKKworI2RlZmluZSBNQklNWDUxX1RTQzIwMDdfR1BJTwkoMiozMiArIDMwKQorI2RlZmluZSBNQklNWDUxX1RTQzIwMDdfSVJRCShNWENfSU5URVJOQUxfSVJRUyArIE1CSU1YNTFfVFNDMjAwN19HUElPKQorI2RlZmluZSBNQklNWDUxX0xFRDAJCSgyKjMyICsgNSkKKyNkZWZpbmUgTUJJTVg1MV9MRUQxCQkoMiozMiArIDYpCisjZGVmaW5lIE1CSU1YNTFfTEVEMgkJKDIqMzIgKyA3KQorI2RlZmluZSBNQklNWDUxX0xFRDMJCSgyKjMyICsgOCkKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBtYmlteDUxX2xlZHNbXSA9IHsKKwl7CisJCS5uYW1lCQkJPSAibGVkMCIsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwkJLmdwaW8JCQk9IE1CSU1YNTFfTEVEMCwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJsZWQxIiwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJuYW5kLWRpc2siLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkuZ3BpbwkJCT0gTUJJTVg1MV9MRUQxLAorCX0sCisJeworCQkubmFtZQkJCT0gImxlZDIiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm1tYzAiLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkuZ3BpbwkJCT0gTUJJTVg1MV9MRUQyLAorCX0sCisJeworCQkubmFtZQkJCT0gImxlZDMiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gImRlZmF1bHQtb24iLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkuZ3BpbwkJCT0gTUJJTVg1MV9MRUQzLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgbWJpbXg1MV9sZWRzX2luZm8gPSB7CisJLmxlZHMJCT0gbWJpbXg1MV9sZWRzLAorCS5udW1fbGVkcwk9IEFSUkFZX1NJWkUobWJpbXg1MV9sZWRzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1iaW14NTFfbGVkc19ncGlvID0geworCS5uYW1lCT0gImxlZHMtZ3BpbyIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbWJpbXg1MV9sZWRzX2luZm8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmbWJpbXg1MV9sZWRzX2dwaW8sCit9OworCitzdGF0aWMgc3RydWN0IHBhZF9kZXNjIG1iaW14NTFfcGFkc1tdID0geworCS8qIFVBUlQyICovCisJTVg1MV9QQURfVUFSVDJfUlhEX19VQVJUMl9SWEQsCisJTVg1MV9QQURfVUFSVDJfVFhEX19VQVJUMl9UWEQsCisKKwkvKiBVQVJUMyAqLworCU1YNTFfUEFEX1VBUlQzX1JYRF9fVUFSVDNfUlhELAorCU1YNTFfUEFEX1VBUlQzX1RYRF9fVUFSVDNfVFhELAorCU1YNTFfUEFEX0tFWV9DT0w0X19VQVJUM19SVFMsCisJTVg1MV9QQURfS0VZX0NPTDVfX1VBUlQzX0NUUywKKworCS8qIFRTQzIwMDcgSVJRICovCisJTVg1MV9QQURfTkFOREZfRDEwX19HUElPXzNfMzAsCisKKwkvKiBMRURTICovCisJTVg1MV9QQURfRElTUEIyX1NFUl9ESU5fX0dQSU9fM181LAorCU1YNTFfUEFEX0RJU1BCMl9TRVJfRElPX19HUElPXzNfNiwKKwlNWDUxX1BBRF9ESVNQQjJfU0VSX0NMS19fR1BJT18zXzcsCisJTVg1MV9QQURfRElTUEIyX1NFUl9SU19fR1BJT18zXzgsCisKKwkvKiBLUFAgKi8KKwlNWDUxX1BBRF9LRVlfUk9XMF9fS0VZX1JPVzAsCisJTVg1MV9QQURfS0VZX1JPVzFfX0tFWV9ST1cxLAorCU1YNTFfUEFEX0tFWV9ST1cyX19LRVlfUk9XMiwKKwlNWDUxX1BBRF9LRVlfUk9XM19fS0VZX1JPVzMsCisJTVg1MV9QQURfS0VZX0NPTDBfX0tFWV9DT0wwLAorCU1YNTFfUEFEX0tFWV9DT0wxX19LRVlfQ09MMSwKKwlNWDUxX1BBRF9LRVlfQ09MMl9fS0VZX0NPTDIsCisJTVg1MV9QQURfS0VZX0NPTDNfX0tFWV9DT0wzLAorfTsKKworc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSA9IHsKKwkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorfTsKKworc3RhdGljIGludCBtYmlteDUxX2tleW1hcFtdID0geworCUtFWSgwLCAwLCBLRVlfMSksCisJS0VZKDAsIDEsIEtFWV8yKSwKKwlLRVkoMCwgMiwgS0VZXzMpLAorCUtFWSgwLCAzLCBLRVlfVVApLAorCisJS0VZKDEsIDAsIEtFWV80KSwKKwlLRVkoMSwgMSwgS0VZXzUpLAorCUtFWSgxLCAyLCBLRVlfNiksCisJS0VZKDEsIDMsIEtFWV9MRUZUKSwKKworCUtFWSgyLCAwLCBLRVlfNyksCisJS0VZKDIsIDEsIEtFWV84KSwKKwlLRVkoMiwgMiwgS0VZXzkpLAorCUtFWSgyLCAzLCBLRVlfUklHSFQpLAorCisJS0VZKDMsIDAsIEtFWV8wKSwKKwlLRVkoMywgMSwgS0VZX0RPV04pLAorCUtFWSgzLCAyLCBLRVlfRVNDKSwKKwlLRVkoMywgMywgS0VZX0VOVEVSKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIG1iaW14NTFfbWFwX2RhdGEgPSB7CisJLmtleW1hcAkJPSBtYmlteDUxX2tleW1hcCwKKwkua2V5bWFwX3NpemUJPSBBUlJBWV9TSVpFKG1iaW14NTFfa2V5bWFwKSwKK307CisKK3N0YXRpYyBpbnQgdHNjMjAwN19nZXRfcGVuZG93bl9zdGF0ZSh2b2lkKQoreworCXJldHVybiAhZ3Bpb19nZXRfdmFsdWUoTUJJTVg1MV9UU0MyMDA3X0dQSU8pOworfQorCitzdHJ1Y3QgdHNjMjAwN19wbGF0Zm9ybV9kYXRhIHRzYzIwMDdfZGF0YSA9IHsKKwkubW9kZWwgPSAyMDA3LAorCS54X3BsYXRlX29obXMgPSAxODAsCisJLmdldF9wZW5kb3duX3N0YXRlID0gdHNjMjAwN19nZXRfcGVuZG93bl9zdGF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gbWJpbXg1MV9pMmNfZGV2aWNlc1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInRzYzIwMDciLCAweDQ4KSwKKwkJLmlycSAgPSBNQklNWDUxX1RTQzIwMDdfSVJRLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0c2MyMDA3X2RhdGEsCisJfSwKK307CisKKy8qCisgKiBiYXNlYm9hcmQgaW5pdGlhbGl6YXRpb24uCisgKi8KK3ZvaWQgX19pbml0IGV1a3JlYV9tYmlteDUxX2Jhc2Vib2FyZF9pbml0KHZvaWQpCit7CisJbXhjX2lvbXV4X3YzX3NldHVwX211bHRpcGxlX3BhZHMobWJpbXg1MV9wYWRzLAorCQkJCQlBUlJBWV9TSVpFKG1iaW14NTFfcGFkcykpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMSwgTlVMTCk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMiwgJnVhcnRfcGRhdGEpOworCisJZ3Bpb19yZXF1ZXN0KE1CSU1YNTFfTEVEMCwgIkxFRDAiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTUJJTVg1MV9MRUQwLCAxKTsKKwlncGlvX2ZyZWUoTUJJTVg1MV9MRUQwKTsKKwlncGlvX3JlcXVlc3QoTUJJTVg1MV9MRUQxLCAiTEVEMSIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChNQklNWDUxX0xFRDEsIDEpOworCWdwaW9fZnJlZShNQklNWDUxX0xFRDEpOworCWdwaW9fcmVxdWVzdChNQklNWDUxX0xFRDIsICJMRUQyIik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE1CSU1YNTFfTEVEMiwgMSk7CisJZ3Bpb19mcmVlKE1CSU1YNTFfTEVEMik7CisJZ3Bpb19yZXF1ZXN0KE1CSU1YNTFfTEVEMywgIkxFRDMiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTUJJTVg1MV9MRUQzLCAxKTsKKwlncGlvX2ZyZWUoTUJJTVg1MV9MRUQzKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX2tleXBhZF9kZXZpY2UsICZtYmlteDUxX21hcF9kYXRhKTsKKworCWdwaW9fcmVxdWVzdChNQklNWDUxX1RTQzIwMDdfR1BJTywgInRzYzIwMDdfaXJxIik7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoTUJJTVg1MV9UU0MyMDA3X0dQSU8pOworCXNldF9pcnFfdHlwZShNQklNWDUxX1RTQzIwMDdfSVJRLCBJUlFGX1RSSUdHRVJfRkFMTElORyk7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgbWJpbXg1MV9pMmNfZGV2aWNlcywKKwkJCQlBUlJBWV9TSVpFKG1iaW14NTFfaTJjX2RldmljZXMpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L21tLmMgYi9hcmNoL2FybS9tYWNoLW14NS9tbS5jCmluZGV4IGI3Njc3ZWYuLmJjM2YzMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXg1L21tLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDUvbW0uYwpAQCAtNjUsNiArNjUsOCBAQAogCWlvdGFibGVfaW5pdChteGNfaW9fZGVzYywgQVJSQVlfU0laRShteGNfaW9fZGVzYykpOwogfQogCitpbnQgaW14NTFfcmVnaXN0ZXJfZ3Bpb3Modm9pZCk7CisKIHZvaWQgX19pbml0IG14NTFfaW5pdF9pcnEodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHR6aWNfYWRkcjsKQEAgLTgwLDQgKzgyLDUgQEAKIAkJcGFuaWMoInVuYWJsZSB0byBtYXAgVFpJQyBpbnRlcnJ1cHQgY29udHJvbGxlclxuIik7CiAKIAl0emljX2luaXRfaXJxKHR6aWNfdmlydCk7CisJaW14NTFfcmVnaXN0ZXJfZ3Bpb3MoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvY3JtX3JlZ3MuaCBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvY3JtX3JlZ3MuaAppbmRleCBjZTRmNTkwLi5iOTg5YmFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14YzkxMjMxL2NybV9yZWdzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9jcm1fcmVncy5oCkBAIC0xMSwxMSArMTEsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKgogICovCiAKICNpZm5kZWYgX0FSQ0hfQVJNX01BQ0hfTVhDOTEyMzFfQ1JNX1JFR1NfSF8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9kZXZpY2VzLmMKaW5kZXggMzUzYmQ5Ny4uMDI3YWY0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9kZXZpY2VzLmMKQEAgLTEzNSw3ICsxMzUsNyBAQAogCX0sCiB9OwogCi1pbnQgX19pbml0IG14Y19yZWdpc3Rlcl9ncGlvcyh2b2lkKQoraW50IF9faW5pdCBteGM5MTIzMV9yZWdpc3Rlcl9ncGlvcyh2b2lkKQogewogCXJldHVybiBteGNfZ3Bpb19pbml0KG14Y19ncGlvX3BvcnRzLCBBUlJBWV9TSVpFKG14Y19ncGlvX3BvcnRzKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14YzkxMjMxL21tLmMgYi9hcmNoL2FybS9tYWNoLW14YzkxMjMxL21tLmMKaW5kZXggNmJlY2RhMy4uYWVjY2ZkNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvbW0uYworKysgYi9hcmNoL2FybS9tYWNoLW14YzkxMjMxL21tLmMKQEAgLTE1LDExICsxNSw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC04OCw3ICs4MywxMCBAQAogCWlvdGFibGVfaW5pdChteGNfaW9fZGVzYywgQVJSQVlfU0laRShteGNfaW9fZGVzYykpOwogfQogCitpbnQgbXhjOTEyMzFfcmVnaXN0ZXJfZ3Bpb3Modm9pZCk7CisKIHZvaWQgX19pbml0IG14YzkxMjMxX2luaXRfaXJxKHZvaWQpCiB7CisJbXhjOTEyMzFfcmVnaXN0ZXJfZ3Bpb3MoKTsKIAlteGNfaW5pdF9pcnEoTVhDOTEyMzFfSU9fQUREUkVTUyhNWEM5MTIzMV9BVklDX0JBU0VfQUREUikpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvY2xvY2suYwppbmRleCBmMDM1ZjQxLi44OWY3OTNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5vbWFkaWsvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvY2xvY2suYwpAQCAtNTMsNiArNTMsMTAgQEAKIAl9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBsb29rdXBzW10gPSB7CisJeworCQkuY29uX2lkCQk9ICJhcGJfcGNsayIsCisJCS5jbGsJCT0gJmNsa19kZWZhdWx0LAorCX0sCiAJQ0xLKCZjbGtfMjQsICJtdHUwIiksCiAJQ0xLKCZjbGtfMjQsICJtdHUxIiksCiAJQ0xLKCZjbGtfNDgsICJ1YXJ0MCIpLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCAwODU5MzM2Li41YzkzNGJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtOCw2ICs4LDcgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgogCiAjaW5jbHVkZSA8bWFjaC9yZWdzLWJvYXJkLWE5bTk3NTBkZXYuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKaW5kZXggMWIxMmQzMi4uNzcwYTY4YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorKysgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCkBAIC0yMCw1MCArMjAsNDkgQEAKIAkvKiBub3RoaW5nICovCiB9CiAKK3N0YXRpYyBpbnQgdGltZW91dDsKKwogc3RhdGljIHZvaWQgcHV0Y19uczkzNjAoY2hhciBjLCB2b2lkIF9faW9tZW0gKmJhc2UpCiB7Ci0Jc3RhdGljIGludCB0ID0gMHgxMDAwMDsKIAlkbyB7Ci0JCWlmICh0KQotCQkJLS10OworCQlpZiAodGltZW91dCkKKwkJCS0tdGltZW91dDsKIAogCQlpZiAoX19yYXdfcmVhZGwoYmFzZSArIDgpICYgKDEgPDwgMykpIHsKIAkJCV9fcmF3X3dyaXRlYihjLCBiYXNlICsgMTYpOwotCQkJdCA9IDB4MTAwMDA7CisJCQl0aW1lb3V0ID0gMHgxMDAwMDsKIAkJCWJyZWFrOwogCQl9Ci0JfSB3aGlsZSAodCk7CisJfSB3aGlsZSAodGltZW91dCk7CiB9CiAKIHN0YXRpYyB2b2lkIHB1dGNfYTltOTc1MGRldihjaGFyIGMsIHZvaWQgX19pb21lbSAqYmFzZSkKIHsKLQlzdGF0aWMgaW50IHQgPSAweDEwMDAwOwogCWRvIHsKLQkJaWYgKHQpCi0JCQktLXQ7CisJCWlmICh0aW1lb3V0KQorCQkJLS10aW1lb3V0OwogCiAJCWlmIChfX3Jhd19yZWFkYihiYXNlICsgNSkgJiAoMSA8PCA1KSkgewogCQkJX19yYXdfd3JpdGViKGMsIGJhc2UpOwotCQkJdCA9IDB4MTAwMDA7CisJCQl0aW1lb3V0ID0gMHgxMDAwMDsKIAkJCWJyZWFrOwogCQl9Ci0JfSB3aGlsZSAodCk7CisJfSB3aGlsZSAodGltZW91dCk7CiAKIH0KIAogc3RhdGljIHZvaWQgcHV0Y19uczkyMXgoY2hhciBjLCB2b2lkIF9faW9tZW0gKmJhc2UpCiB7Ci0Jc3RhdGljIGludCB0ID0gMHgxMDAwMDsKIAlkbyB7Ci0JCWlmICh0KQotCQkJLS10OworCQlpZiAodGltZW91dCkKKwkJCS0tdGltZW91dDsKIAogCQlpZiAoIShfX3Jhd19yZWFkbChiYXNlKSAmICgxIDw8IDExKSkpIHsKIAkJCV9fcmF3X3dyaXRlYihjLCBiYXNlICsgMHgwMDI4KTsKLQkJCXQgPSAweDEwMDAwOworCQkJdGltZW91dCA9IDB4MTAwMDA7CiAJCQlicmVhazsKIAkJfQotCX0gd2hpbGUgKHQpOworCX0gd2hpbGUgKHRpbWVvdXQpOwogfQogCiAjZGVmaW5lIE1TQ1MgX19SRUcoMHhBMDkwMDE4NCkKQEAgLTg5LDYgKzg4LDcgQEAKIAogc3RhdGljIHZvaWQgYXV0b2RldGVjdCh2b2lkICgqKnB1dGMpKGNoYXIsIHZvaWQgX19pb21lbSAqKSwgdm9pZCBfX2lvbWVtICoqYmFzZSkKIHsKKwl0aW1lb3V0ID0gMHgxMDAwMDsKIAlpZiAoKChfX3Jhd19yZWFkbChNU0NTKSA+PiAxNikgJiAweGZlKSA9PSAweDAwKSB7CiAJCS8qIG5zOTM2MCBvciBuczk3NTAgKi8KIAkJaWYgKE5TOTM2MF9VQVJUX0VOQUJMRUQoTlM5MzYwX1VBUlRBKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1hbXMtZGVsdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMKaW5kZXggZmRkMWRkNS4uMGE5ZDYxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1hbXMtZGVsdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWFtcy1kZWx0YS5jCkBAIC0zMDEsNiArMzAxLDcgQEAKIAkuaW9fcGdfb2Zmc3QJPSAoKDB4ZmVmMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSAweDEwMDAwMTAwLAogCS5tYXBfaW8JCT0gYW1zX2RlbHRhX21hcF9pbywKKwkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKIAkuaW5pdF9pcnEJPSBhbXNfZGVsdGFfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IGFtc19kZWx0YV9pbml0LAogCS50aW1lcgkJPSAmb21hcF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZnNhbXBsZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1mc2FtcGxlLmMKaW5kZXggMDk2ZjJlZC4uMDU5YmFjNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1mc2FtcGxlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1mc2FtcGxlLmMKQEAgLTM3OCw2ICszNzgsNyBAQAogCS5pb19wZ19vZmZzdAk9ICgoMHhmZWYwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IDB4MTAwMDAxMDAsCiAJLm1hcF9pbwkJPSBvbWFwX2ZzYW1wbGVfbWFwX2lvLAorCS5yZXNlcnZlCT0gb21hcF9yZXNlcnZlLAogCS5pbml0X2lycQk9IG9tYXBfZnNhbXBsZV9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gb21hcF9mc2FtcGxlX2luaXQsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYwppbmRleCBlMTE5NWEzLi43YTY1Njg0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYwpAQCAtOTgsNiArOTgsNyBAQAogCS5pb19wZ19vZmZzdAk9ICgoMHhmZWYwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IDB4MTAwMDAxMDAsCiAJLm1hcF9pbwkJPSBvbWFwX2dlbmVyaWNfbWFwX2lvLAorCS5yZXNlcnZlCT0gb21hcF9yZXNlcnZlLAogCS5pbml0X2lycQk9IG9tYXBfZ2VuZXJpY19pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gb21hcF9nZW5lcmljX2luaXQsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jCmluZGV4IGQxMTAwZTQuLjY4YjJiZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMKQEAgLTQ2Nyw2ICs0NjcsNyBAQAogCS5pb19wZ19vZmZzdAk9ICgoMHhmZWYwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IDB4MTAwMDAxMDAsCiAJLm1hcF9pbwkJPSBoMl9tYXBfaW8sCisJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCiAJLmluaXRfaXJxCT0gaDJfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IGgyX2luaXQsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jCmluZGV4IGE1M2FiODIuLjBiMDgyNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMKQEAgLTQzNyw2ICs0MzcsNyBAQAogCS5pb19wZ19vZmZzdAk9ICgoMHhmZWYwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IDB4MTAwMDAxMDAsCiAJLm1hcF9pbwkJPSBoM19tYXBfaW8sCisJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCiAJLmluaXRfaXJxCT0gaDNfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IGgzX2luaXQsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1odGNoZXJhbGQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaHRjaGVyYWxkLmMKaW5kZXggOGUzMTNiNC4uZDcwYTRmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1odGNoZXJhbGQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWh0Y2hlcmFsZC5jCkBAIC0zMDQsNiArMzA0LDcgQEAKIAkuaW9fcGdfb2Zmc3QgICAgPSAoKDB4ZmVmMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMgICAgPSAweDEwMDAwMTAwLAogCS5tYXBfaW8gICAgICAgICA9IGh0Y2hlcmFsZF9tYXBfaW8sCisJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCiAJLmluaXRfaXJxICAgICAgID0gaHRjaGVyYWxkX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUgICA9IGh0Y2hlcmFsZF9pbml0LAogCS50aW1lciAgICAgICAgICA9ICZvbWFwX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKaW5kZXggNWQxMmZkMy4uOTEwNjRiMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCkBAIC00NjMsNiArNDYzLDcgQEAKIAkuaW9fcGdfb2Zmc3QJPSAoKDB4ZmVmMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSAweDEwMDAwMTAwLAogCS5tYXBfaW8JCT0gaW5ub3ZhdG9yX21hcF9pbywKKwkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKIAkuaW5pdF9pcnEJPSBpbm5vdmF0b3JfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IGlubm92YXRvcl9pbml0LAogCS50aW1lcgkJPSAmb21hcF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtbm9raWE3NzAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtbm9raWE3NzAuYwppbmRleCA3MWUxYTNmLi44YzI4YjEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW5va2lhNzcwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1ub2tpYTc3MC5jCkBAIC00MDAsNiArNDAwLDcgQEAKIAkuaW9fcGdfb2Zmc3QJPSAoKDB4ZmVmMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSAweDEwMDAwMTAwLAogCS5tYXBfaW8JCT0gb21hcF9ub2tpYTc3MF9tYXBfaW8sCisJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCiAJLmluaXRfaXJxCT0gb21hcF9ub2tpYTc3MF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gb21hcF9ub2tpYTc3MF9pbml0LAogCS50aW1lcgkJPSAmb21hcF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtb3NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jCmluZGV4IDgwZDg2MjAuLmUyYTcyYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtb3NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYwpAQCAtNTg0LDYgKzU4NCw3IEBACiAJLmlvX3BnX29mZnN0CT0gKCgweGZlZjAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gMHgxMDAwMDEwMCwKIAkubWFwX2lvCQk9IG9za19tYXBfaW8sCisJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCiAJLmluaXRfaXJxCT0gb3NrX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBvc2tfaW5pdCwKIAkudGltZXIJCT0gJm9tYXBfdGltZXIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYwppbmRleCA1NjliNGM5Li42MWEyMzIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMKQEAgLTM3Myw2ICszNzMsNyBAQAogCS5pb19wZ19vZmZzdAk9ICgoMHhmZWYwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IDB4MTAwMDAxMDAsCiAJLm1hcF9pbwkJPSBvbWFwX3BhbG10ZV9tYXBfaW8sCisJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCiAJLmluaXRfaXJxCT0gb21hcF9wYWxtdGVfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IG9tYXBfcGFsbXRlX2luaXQsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXR0LmMKaW5kZXggNmFkNDlhMi4uMjFjMDFjNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10dC5jCkBAIC0zMjEsNiArMzIxLDcgQEAKIAkuaW9fcGdfb2Zmc3QJPSAoKDB4ZmVmMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSAweDEwMDAwMTAwLAogCS5tYXBfaW8JCT0gb21hcF9wYWxtdHRfbWFwX2lvLAorCS5yZXNlcnZlCT0gb21hcF9yZXNlcnZlLAogCS5pbml0X2lycQk9IG9tYXBfcGFsbXR0X2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBvbWFwX3BhbG10dF9pbml0LAogCS50aW1lcgkJPSAmb21hcF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXo3MS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtejcxLmMKaW5kZXggNjY0MWRlOS4uZjMyNDkyNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtejcxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtejcxLmMKQEAgLTMzOCwxMCArMzM4LDEyIEBACiB9CiAKIE1BQ0hJTkVfU1RBUlQoT01BUF9QQUxNWjcxLCAiT01BUDMxMCBiYXNlZCBQYWxtIFppcmU3MSIpCi0JLnBoeXNfaW8gPSAweGZmZjAwMDAwLAotCS5pb19wZ19vZmZzdCA9ICgoMHhmZWYwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcyA9IDB4MTAwMDAxMDAsLm1hcF9pbyA9IG9tYXBfcGFsbXo3MV9tYXBfaW8sCi0JLmluaXRfaXJxID0gb21hcF9wYWxtejcxX2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUgPSBvbWFwX3BhbG16NzFfaW5pdCwKLQkudGltZXIgPSAmb21hcF90aW1lciwKKwkucGh5c19pbwk9IDB4ZmZmMDAwMDAsCisJLmlvX3BnX29mZnN0CT0gKCgweGZlZjAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHgxMDAwMDEwMCwKKwkubWFwX2lvCQk9IG9tYXBfcGFsbXo3MV9tYXBfaW8sCisJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCisJLmluaXRfaXJxCT0gb21hcF9wYWxtejcxX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUJPSBvbWFwX3BhbG16NzFfaW5pdCwKKwkudGltZXIJCT0gJm9tYXBfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wZXJzZXVzMi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wZXJzZXVzMi5jCmluZGV4IGU4NTRkNTcuLjhiNWFiMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGVyc2V1czIuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBlcnNldXMyLmMKQEAgLTMzOSw2ICszMzksNyBAQAogCS5pb19wZ19vZmZzdAk9ICgoMHhmZWYwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IDB4MTAwMDAxMDAsCiAJLm1hcF9pbwkJPSBvbWFwX3BlcnNldXMyX21hcF9pbywKKwkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKIAkuaW5pdF9pcnEJPSBvbWFwX3BlcnNldXMyX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBvbWFwX3BlcnNldXMyX2luaXQsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMKaW5kZXggMmZiMWU1Zi4uOTk1NTY2YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jCkBAIC00MjMsNyArNDIzLDggQEAKIAkuaW9fcGdfb2Zmc3QJPSAoKDB4ZmVmMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSAweDEwMDAwMTAwLAogCS5tYXBfaW8JCT0gb21hcF9zeDFfbWFwX2lvLAotCS5pbml0X2lycQkJPSBvbWFwX3N4MV9pbml0X2lycSwKKwkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKKwkuaW5pdF9pcnEJPSBvbWFwX3N4MV9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gb21hcF9zeDFfaW5pdCwKIAkudGltZXIJCT0gJm9tYXBfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKaW5kZXggODdiOTQzNi4uNGM0ODNkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jCkBAIC0yODcsNiArMjg3LDcgQEAKIAkuaW9fcGdfb2Zmc3QJPSAoKDB4ZmVmMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSAweDEwMDAwMTAwLAogCS5tYXBfaW8JCT0gdm9pY2VibHVlX21hcF9pbywKKwkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKIAkuaW5pdF9pcnEJPSB2b2ljZWJsdWVfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IHZvaWNlYmx1ZV9pbml0LAogCS50aW1lcgkJPSAmb21hcF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvaW8uYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaW8uYwppbmRleCBkOWI4ZDgyLi4wY2UzZmVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pby5jCkBAIC0yMiw3ICsyMiw2IEBACiAKIGV4dGVybiB2b2lkIG9tYXBfY2hlY2tfcmV2aXNpb24odm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwX3NyYW1faW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIG9tYXBmYl9yZXNlcnZlX3NkcmFtKHZvaWQpOwogCiAvKgogICogVGhlIG1hY2hpbmUgc3BlY2lmaWMgY29kZSBtYXkgcHJvdmlkZSB0aGUgZXh0cmEgbWFwcGluZyBiZXNpZGVzIHRoZQpAQCAtMTIyLDcgKzEyMSw2IEBACiAjZW5kaWYKIAogCW9tYXBfc3JhbV9pbml0KCk7Ci0Jb21hcGZiX3Jlc2VydmVfc2RyYW0oKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0yNDMwc2RwLmMKaW5kZXggYTExYTU3NS4uNDJmNDlmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0yNDMwc2RwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0yNDMwc2RwLmMKQEAgLTI0OCw2ICsyNDgsNyBAQAogCS5pb19wZ19vZmZzdAk9ICgoMHhmYTAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCiAJLm1hcF9pbwkJPSBvbWFwXzI0MzBzZHBfbWFwX2lvLAorCS5yZXNlcnZlCT0gb21hcF9yZXNlcnZlLAogCS5pbml0X2lycQk9IG9tYXBfMjQzMHNkcF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gb21hcF8yNDMwc2RwX2luaXQsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYwppbmRleCBmNDc0YTgwLi5kZDljMDMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYwpAQCAtODE1LDYgKzgxNSw3IEBACiAJLmlvX3BnX29mZnN0CT0gKCgweGZhMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKIAkubWFwX2lvCQk9IG9tYXBfMzQzMHNkcF9tYXBfaW8sCisJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCiAJLmluaXRfaXJxCT0gb21hcF8zNDMwc2RwX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBvbWFwXzM0MzBzZHBfaW5pdCwKIAkudGltZXIJCT0gJm9tYXBfdGltZXIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM2MzBzZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzYzMHNkcC5jCmluZGV4IDUwNGQyYmQuLjU3MjkwZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzYzMHNkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzYzMHNkcC5jCkBAIC0xMDgsNiArMTA4LDcgQEAKIAkuaW9fcGdfb2Zmc3QJPSAoKDB4ZmEwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAogCS5tYXBfaW8JCT0gb21hcF9zZHBfbWFwX2lvLAorCS5yZXNlcnZlCT0gb21hcF9yZXNlcnZlLAogCS5pbml0X2lycQk9IG9tYXBfc2RwX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBvbWFwX3NkcF9pbml0LAogCS50aW1lcgkJPSAmb21hcF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMKaW5kZXggZTRhNWQ2Ni4uNGJiMmM1ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMKQEAgLTQwMiw2ICs0MDIsNyBAQAogCS5pb19wZ19vZmZzdAk9ICgoMHhmYTAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCiAJLm1hcF9pbwkJPSBvbWFwXzQ0MzBzZHBfbWFwX2lvLAorCS5yZXNlcnZlCT0gb21hcF9yZXNlcnZlLAogCS5pbml0X2lycQk9IG9tYXBfNDQzMHNkcF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gb21hcF80NDMwc2RwX2luaXQsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hbTM1MTdldm0uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYW0zNTE3ZXZtLmMKaW5kZXggYWYzODNhOC4uN2RhOTJkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hbTM1MTdldm0uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFtMzUxN2V2bS5jCkBAIC00NzIsNiArNDcyLDcgQEAKIAkuaW9fcGdfb2Zmc3QJPSAoKDB4ZDgwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAogCS5tYXBfaW8JCT0gYW0zNTE3X2V2bV9tYXBfaW8sCisJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCiAJLmluaXRfaXJxCT0gYW0zNTE3X2V2bV9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gYW0zNTE3X2V2bV9pbml0LAogCS50aW1lcgkJPSAmb21hcF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMKaW5kZXggYWE2OWZiOS4uYmQ3NTY0MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMKQEAgLTM0Niw2ICszNDYsNyBAQAogCS5pb19wZ19vZmZzdAk9ICgoMHhmYTAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCiAJLm1hcF9pbwkJPSBvbWFwX2Fwb2xsb25fbWFwX2lvLAorCS5yZXNlcnZlCT0gb21hcF9yZXNlcnZlLAogCS5pbml0X2lycQk9IG9tYXBfYXBvbGxvbl9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gb21hcF9hcG9sbG9uX2luaXQsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1LmMKaW5kZXggZTY3OWEyYy4uYmM0YzNmOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNS5jCkBAIC04MzcsNiArODM3LDcgQEAKIAkuaW9fcGdfb2Zmc3QJPSAoKDB4ZDgwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAogCS5tYXBfaW8JCT0gY21fdDM1X21hcF9pbywKKwkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKIAkuaW5pdF9pcnEJPSBjbV90MzVfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IGNtX3QzNV9pbml0LAogCS50aW1lcgkJPSAmb21hcF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZGV2a2l0ODAwMC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKaW5kZXggNzcwMjJiNS4uOTIyYjc0NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKQEAgLTgyNSw2ICs4MjUsNyBAQAogCS5pb19wZ19vZmZzdAk9ICgoMHhkODAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCiAJLm1hcF9pbwkJPSBkZXZraXQ4MDAwX21hcF9pbywKKwkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKIAkuaW5pdF9pcnEJPSBkZXZraXQ4MDAwX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBkZXZraXQ4MDAwX2luaXQsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYwppbmRleCAxNmNjMDY4Li45MjQyOTAyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYwpAQCAtNTksNiArNTksNyBAQAogCS5pb19wZ19vZmZzdAk9ICgoMHhmYTAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCiAJLm1hcF9pbwkJPSBvbWFwX2dlbmVyaWNfbWFwX2lvLAorCS5yZXNlcnZlCT0gb21hcF9yZXNlcnZlLAogCS5pbml0X2lycQk9IG9tYXBfZ2VuZXJpY19pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gb21hcF9nZW5lcmljX2luaXQsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jCmluZGV4IDA2NjVmMmMuLjE2NzAzZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaDQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMKQEAgLTM3OCw2ICszNzgsNyBAQAogCS5pb19wZ19vZmZzdAk9ICgoMHhmYTAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCiAJLm1hcF9pbwkJPSBvbWFwX2g0X21hcF9pbywKKwkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKIAkuaW5pdF9pcnEJPSBvbWFwX2g0X2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBvbWFwX2g0X2luaXQsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1pZ2VwMDAyMC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1pZ2VwMDAyMC5jCmluZGV4IGQ1NWM1N2IuLjc1OWUzOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaWdlcDAwMjAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWlnZXAwMDIwLmMKQEAgLTU0Myw2ICs1NDMsNyBAQAogCS5pb19wZ19vZmZzdAk9ICgoMHhmYTAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCiAJLm1hcF9pbwkJPSBpZ2VwMl9tYXBfaW8sCisJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCiAJLmluaXRfaXJxCT0gaWdlcDJfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IGlnZXAyX2luaXQsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKaW5kZXggZmVmZDdlNi4uOWNkMjY2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCkBAIC00MTcsNiArNDE3LDcgQEAKIAkuaW9fcGdfb2Zmc3QJPSAoKDB4ZmEwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAogCS5tYXBfaW8JCT0gb21hcF9sZHBfbWFwX2lvLAorCS5yZXNlcnZlCT0gb21hcF9yZXNlcnZlLAogCS5pbml0X2lycQk9IG9tYXBfbGRwX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBvbWFwX2xkcF9pbml0LAogCS50aW1lcgkJPSAmb21hcF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbjh4MC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1uOHgwLmMKaW5kZXggM2NjYzM0ZS4uMjU2NWZmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1uOHgwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1uOHgwLmMKQEAgLTY2Nyw2ICs2NjcsNyBAQAogCS5pb19wZ19vZmZzdAk9ICgoMHhmYTAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCiAJLm1hcF9pbwkJPSBuOHgwX21hcF9pbywKKwkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKIAkuaW5pdF9pcnEJPSBuOHgwX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBuOHgwX2luaXRfbWFjaGluZSwKIAkudGltZXIJCT0gJm9tYXBfdGltZXIsCkBAIC02NzcsNiArNjc4LDcgQEAKIAkuaW9fcGdfb2Zmc3QJPSAoKDB4ZmEwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAogCS5tYXBfaW8JCT0gbjh4MF9tYXBfaW8sCisJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCiAJLmluaXRfaXJxCT0gbjh4MF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gbjh4MF9pbml0X21hY2hpbmUsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLApAQCAtNjg3LDYgKzY4OSw3IEBACiAJLmlvX3BnX29mZnN0CT0gKCgweGZhMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKIAkubWFwX2lvCQk9IG44eDBfbWFwX2lvLAorCS5yZXNlcnZlCT0gb21hcF9yZXNlcnZlLAogCS5pbml0X2lycQk9IG44eDBfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IG44eDBfaW5pdF9tYWNoaW5lLAogCS50aW1lcgkJPSAmb21hcF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYwppbmRleCA2OWIxNTRjLi4wYWIwYzI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCkBAIC01MTksNiArNTE5LDcgQEAKIAkuaW9fcGdfb2Zmc3QJPSAoKDB4ZmEwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAogCS5tYXBfaW8JCT0gb21hcDNfYmVhZ2xlX21hcF9pbywKKwkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKIAkuaW5pdF9pcnEJPSBvbWFwM19iZWFnbGVfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IG9tYXAzX2JlYWdsZV9pbml0LAogCS50aW1lcgkJPSAmb21hcF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNldm0uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNldm0uYwppbmRleCBiOTUyNjEwLi5hM2QyZTI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2V2bS5jCkBAIC03MjcsNiArNzI3LDcgQEAKIAkuaW9fcGdfb2Zmc3QJPSAoKDB4ZmEwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAogCS5tYXBfaW8JCT0gb21hcDNfZXZtX21hcF9pbywKKwkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKIAkuaW5pdF9pcnEJPSBvbWFwM19ldm1faW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IG9tYXAzX2V2bV9pbml0LAogCS50aW1lcgkJPSAmb21hcF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCmluZGV4IGRiMDZkYzkuLmMwZjRmMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYwpAQCAtNjAxLDYgKzYwMSw3IEBACiAJLmlvX3BnX29mZnN0CT0gKCgweGZhMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKIAkubWFwX2lvCQk9IG9tYXAzcGFuZG9yYV9tYXBfaW8sCisJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCiAJLmluaXRfaXJxCT0gb21hcDNwYW5kb3JhX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBvbWFwM3BhbmRvcmFfaW5pdCwKIAkudGltZXIJCT0gJm9tYXBfdGltZXIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzdG91Y2hib29rLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzdG91Y2hib29rLmMKaW5kZXggMmY1ZjgyMy4uZjA1Yjg2NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3RvdWNoYm9vay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDN0b3VjaGJvb2suYwpAQCAtNTcxLDYgKzU3MSw3IEBACiAJLmlvX3BnX29mZnN0CT0gKCgweGQ4MDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKIAkubWFwX2lvCQk9IG9tYXAzX3RvdWNoYm9va19tYXBfaW8sCisJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCiAJLmluaXRfaXJxCT0gb21hcDNfdG91Y2hib29rX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBvbWFwM190b3VjaGJvb2tfaW5pdCwKIAkudGltZXIJCT0gJm9tYXBfdGltZXIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW92ZXJvLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW92ZXJvLmMKaW5kZXggNzlhYzQxNC4uODdhY2IyZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYwpAQCAtNDk1LDYgKzQ5NSw3IEBACiAJLmlvX3BnX29mZnN0CT0gKCgweGZhMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKIAkubWFwX2lvCQk9IG92ZXJvX21hcF9pbywKKwkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKIAkuaW5pdF9pcnEJPSBvdmVyb19pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gb3Zlcm9faW5pdCwKIAkudGltZXIJCT0gJm9tYXBfdGltZXIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCmluZGV4IGFiZGYzMjEuLjAzNDgzOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCkBAIC0xNzUsNiArMTc1LDEwIEBACiAjZW5kaWYgLyogQ09ORklHX0tFWUJPQVJEX0dQSU8gfHwgQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFICovCiAKIHN0YXRpYyBpbnQgYm9hcmRfa2V5bWFwW10gPSB7CisJLyoKKwkgKiBOb3RlIHRoYXQgS0VZKHgsIDgsIEtFWV9YWFgpIGVudHJpZXMgcmVwcmVzZW50ICJlbnRyaXJlIHJvdworCSAqIGNvbm5lY3RlZCB0byB0aGUgZ3JvdW5kIiBtYXRyaXggc3RhdGUuCisJICovCiAJS0VZKDAsIDAsIEtFWV9RKSwKIAlLRVkoMCwgMSwgS0VZX08pLAogCUtFWSgwLCAyLCBLRVlfUCksCkBAIC0xODIsNiArMTg2LDcgQEAKIAlLRVkoMCwgNCwgS0VZX0JBQ0tTUEFDRSksCiAJS0VZKDAsIDYsIEtFWV9BKSwKIAlLRVkoMCwgNywgS0VZX1MpLAorCiAJS0VZKDEsIDAsIEtFWV9XKSwKIAlLRVkoMSwgMSwgS0VZX0QpLAogCUtFWSgxLCAyLCBLRVlfRiksCkBAIC0xOTAsNiArMTk1LDcgQEAKIAlLRVkoMSwgNSwgS0VZX0opLAogCUtFWSgxLCA2LCBLRVlfSyksCiAJS0VZKDEsIDcsIEtFWV9MKSwKKwogCUtFWSgyLCAwLCBLRVlfRSksCiAJS0VZKDIsIDEsIEtFWV9ET1QpLAogCUtFWSgyLCAyLCBLRVlfVVApLApAQCAtMTk3LDYgKzIwMyw4IEBACiAJS0VZKDIsIDUsIEtFWV9aKSwKIAlLRVkoMiwgNiwgS0VZX1gpLAogCUtFWSgyLCA3LCBLRVlfQyksCisJS0VZKDIsIDgsIEtFWV9GOSksCisKIAlLRVkoMywgMCwgS0VZX1IpLAogCUtFWSgzLCAxLCBLRVlfViksCiAJS0VZKDMsIDIsIEtFWV9CKSwKQEAgLTIwNSwyMCArMjEzLDIzIEBACiAJS0VZKDMsIDUsIEtFWV9TUEFDRSksCiAJS0VZKDMsIDYsIEtFWV9TUEFDRSksCiAJS0VZKDMsIDcsIEtFWV9MRUZUKSwKKwogCUtFWSg0LCAwLCBLRVlfVCksCiAJS0VZKDQsIDEsIEtFWV9ET1dOKSwKIAlLRVkoNCwgMiwgS0VZX1JJR0hUKSwKIAlLRVkoNCwgNCwgS0VZX0xFRlRDVFJMKSwKIAlLRVkoNCwgNSwgS0VZX1JJR0hUQUxUKSwKIAlLRVkoNCwgNiwgS0VZX0xFRlRTSElGVCksCisJS0VZKDQsIDgsIEtFWV9GMTApLAorCiAJS0VZKDUsIDAsIEtFWV9ZKSwKKwlLRVkoNSwgOCwgS0VZX0YxMSksCisKIAlLRVkoNiwgMCwgS0VZX1UpLAorCiAJS0VZKDcsIDAsIEtFWV9JKSwKIAlLRVkoNywgMSwgS0VZX0Y3KSwKIAlLRVkoNywgMiwgS0VZX0Y4KSwKLQlLRVkoMHhmZiwgMiwgS0VZX0Y5KSwKLQlLRVkoMHhmZiwgNCwgS0VZX0YxMCksCi0JS0VZKDB4ZmYsIDUsIEtFWV9GMTEpLAogfTsKIAogc3RhdGljIHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgYm9hcmRfbWFwX2RhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCmluZGV4IDFiODZiNWIuLjNiZDk1NmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCkBAIC0xNTQsNiArMTU0LDcgQEAKIAkuaW9fcGdfb2Zmc3QJPSAoKDB4ZmEwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAogCS5tYXBfaW8JCT0gcng1MV9tYXBfaW8sCisJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCiAJLmluaXRfaXJxCT0gcng1MV9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gcng1MV9pbml0LAogCS50aW1lcgkJPSAmb21hcF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTIuYwppbmRleCA4MDNlZjE0Li5mZmUxODhjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20yLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMi5jCkBAIC05NSw2ICs5NSw3IEBACiAJLmlvX3BnX29mZnN0CT0gKFpPT01fVUFSVF9WSVJUID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAogCS5tYXBfaW8JCT0gb21hcF96b29tMl9tYXBfaW8sCisJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCiAJLmluaXRfaXJxCT0gb21hcF96b29tMl9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gb21hcF96b29tMl9pbml0LAogCS50aW1lcgkJPSAmb21hcF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTMuYwppbmRleCAzMzE0NzA0Li41YjYwNWViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20zLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMy5jCkBAIC03Nyw2ICs3Nyw3IEBACiAJLmlvX3BnX29mZnN0CT0gKFpPT01fVUFSVF9WSVJUID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAogCS5tYXBfaW8JCT0gb21hcF96b29tX21hcF9pbywKKwkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKIAkuaW5pdF9pcnEJPSBvbWFwX3pvb21faW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IG9tYXBfem9vbV9pbml0LAogCS50aW1lcgkJPSAmb21hcF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szeHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szeHh4X2RhdGEuYwppbmRleCA0MWIxNTVhLi5kMzM3NDQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrM3h4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazN4eHhfZGF0YS5jCkBAIC0zMTY2LDYgKzMxNjYsMTAgQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAorc3RhdGljIHN0cnVjdCBjbGsgZHVtbXlfYXBiX3BjbGsgPSB7CisJLm5hbWUJCT0gImFwYl9wY2xrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKK307CiAKIC8qCiAgKiBjbGtkZXYKQEAgLTMxNzMsNiArMzE3Nyw3IEBACiAKIC8qIFhYWCBBdCBzb21lIHBvaW50IHdlIHNob3VsZCByZW5hbWUgdGhpcyBmaWxlIHRvIGNsb2NrM3h4eF9kYXRhLmMgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9jbGsgb21hcDN4eHhfY2xrc1tdID0geworCUNMSyhOVUxMLAkiYXBiX3BjbGsiLAkmZHVtbXlfYXBiX3BjbGssCUNLXzNYWFgpLAogCUNMSyhOVUxMLAkib21hcF8zMmtfZmNrIiwJJm9tYXBfMzJrX2ZjaywJQ0tfM1hYWCksCiAJQ0xLKE5VTEwsCSJ2aXJ0XzEybV9jayIsCSZ2aXJ0XzEybV9jaywJQ0tfM1hYWCksCiAJQ0xLKE5VTEwsCSJ2aXJ0XzEzbV9jayIsCSZ2aXJ0XzEzbV9jaywJQ0tfM1hYWCksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RwbGwzeHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RwbGwzeHh4LmMKaW5kZXggYjMyY2NkOTUuLmVkOGQzMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZHBsbDN4eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RwbGwzeHh4LmMKQEAgLTQ2Myw3ICs0NjMsNyBAQAogCX0KIAlpZiAoIXJldCkgewogCQkvKgotCQkgKiBTd2l0Y2ggdGhlIHBhcmVudCBjbG9jayBpbiB0aGUgaGVpcmFyY2h5LCBhbmQgbWFrZSBzdXJlCisJCSAqIFN3aXRjaCB0aGUgcGFyZW50IGNsb2NrIGluIHRoZSBoaWVyYXJjaHksIGFuZCBtYWtlIHN1cmUKIAkJICogdGhhdCB0aGUgbmV3IHBhcmVudCdzIHVzZWNvdW50IGlzIGNvcnJlY3QuICBOb3RlOiB3ZQogCQkgKiBlbmFibGUgdGhlIG5ldyBwYXJlbnQgYmVmb3JlIGRpc2FibGluZyB0aGUgb2xkIHRvIGF2b2lkCiAJCSAqIGFueSB1bm5lY2Vzc2FyeSBoYXJkd2FyZSBkaXNhYmxlLT5lbmFibGUgdHJhbnNpdGlvbnMuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKaW5kZXggM2NmYjQyNS4uNGUxZjUzZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgPHBsYXQvc2RyYy5oPgogI2luY2x1ZGUgPHBsYXQvZ3BtYy5oPgogI2luY2x1ZGUgPHBsYXQvc2VyaWFsLmg+Ci0jaW5jbHVkZSA8cGxhdC92cmFtLmg+CiAKICNpbmNsdWRlICJjbG9jazJ4eHguaCIKICNpbmNsdWRlICJjbG9jazN4eHguaCIKQEAgLTI0MSw4ICsyNDAsNiBAQAogCiAJb21hcDJfY2hlY2tfcmV2aXNpb24oKTsKIAlvbWFwX3NyYW1faW5pdCgpOwotCW9tYXBmYl9yZXNlcnZlX3NkcmFtKCk7Ci0Jb21hcF92cmFtX3Jlc2VydmVfc2RyYW0oKTsKIH0KIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDIwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwMzR4eC5TIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbGVlcDM0eHguUwppbmRleCBkNTIyY2Q3Li5iYTUzMTkxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwMzR4eC5TCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAzNHh4LlMKQEAgLTYwLDcgKzYwLDcgQEAKICNkZWZpbmUgU0RSQ19ETExBX0NUUkxfVglPTUFQMzRYWF9TRFJDX1JFR0FERFIoU0RSQ19ETExBX0NUUkwpCiAKICAgICAgICAgLnRleHQKLS8qIEZ1bmN0aW9uIHRvIGFxdWlyZSB0aGUgc2VtYXBob3JlIGluIHNjcmF0Y2hwYWQgKi8KKy8qIEZ1bmN0aW9uIHRvIGFjcXVpcmUgdGhlIHNlbWFwaG9yZSBpbiBzY3JhdGNocGFkICovCiBFTlRSWShsb2NrX3NjcmF0Y2hwYWRfc2VtKQogCXN0bWZkCXNwISwge2xyfQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCiB3YWl0X3NlbToKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L0tjb25maWcKaW5kZXggOTA1NzE5YS4uYzg5N2UwMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L0tjb25maWcKQEAgLTI2LDYgKzI2LDcgQEAKIGNvbmZpZyBNQUNIX0ROUzMyMwogCWJvb2wgIkQtTGluayBETlMtMzIzIgogCXNlbGVjdCBJMkNfQk9BUkRJTkZPCisJc2VsZWN0IFBIWUxJQgogCWhlbHAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQogCSAgRC1MaW5rIEROUy0zMjMgcGxhdGZvcm0uCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvZG5zMzIzLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvZG5zMzIzLXNldHVwLmMKaW5kZXggZmUwZGUxNi4uYTQ3MTAwZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2RuczMyMy1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9kbnMzMjMtc2V0dXAuYwpAQCAtMyw2ICszLDEwIEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEhlcmJlcnQgVmFsZXJpbyBSaWVkZWwgPGh2ckBnbnUub3JnPgogICoKKyAqIFN1cHBvcnQgZm9yIEhXIFJldiBDMToKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQmVuamFtaW4gSGVycmVuc2NobWlkdCA8YmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnPgorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCkBAIC0yMyw2ICsyNyw4IEBACiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9tYXJ2ZWxsX3BoeS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2dwaW8uaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC0zMSw2ICszNyw3IEBACiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAibXBwLmgiCiAKKy8qIFJldiBBMSBhbmQgQjEgKi8KICNkZWZpbmUgRE5TMzIzX0dQSU9fTEVEX1JJR0hUX0FNQkVSCTEKICNkZWZpbmUgRE5TMzIzX0dQSU9fTEVEX0xFRlRfQU1CRVIJMgogI2RlZmluZSBETlMzMjNfR1BJT19TWVNURU1fVVAJCTMKQEAgLTQyLDYgKzQ5LDIzIEBACiAjZGVmaW5lIEROUzMyM19HUElPX0tFWV9QT1dFUgkJOQogI2RlZmluZSBETlMzMjNfR1BJT19LRVlfUkVTRVQJCTEwCiAKKy8qIFJldiBDMSAqLworI2RlZmluZSBETlMzMjNDX0dQSU9fS0VZX1BPV0VSCQkxCisjZGVmaW5lIEROUzMyM0NfR1BJT19QT1dFUl9PRkYJCTIKKyNkZWZpbmUgRE5TMzIzQ19HUElPX0xFRF9SSUdIVF9BTUJFUgk4CisjZGVmaW5lIEROUzMyM0NfR1BJT19MRURfTEVGVF9BTUJFUgk5CisjZGVmaW5lIEROUzMyM0NfR1BJT19MRURfUE9XRVIJCTE3CisjZGVmaW5lIEROUzMyM0NfR1BJT19GQU5fQklUMQkJMTgKKyNkZWZpbmUgRE5TMzIzQ19HUElPX0ZBTl9CSVQwCQkxOQorCisvKiBFeHBvc2VkIHRvIHVzZXJzcGFjZSwgZG8gbm90IGNoYW5nZSAqLworZW51bSB7CisJRE5TMzIzX1JFVl9BMSwJLyogMCAqLworCUROUzMyM19SRVZfQjEsCS8qIDEgKi8KKwlETlMzMjNfUkVWX0MxLAkvKiAyICovCit9OworCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBQQ0kgc2V0dXAKICAqLwpAQCAtNjgsMjEgKzkyLDEyIEBACiAJLm1hcF9pcnEJPSBkbnMzMjNfcGNpX21hcF9pcnEsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBkbnMzMjNfZGV2X2lkKHZvaWQpCi17Ci0JdTMyIGRldiwgcmV2OwotCi0Jb3Jpb241eF9wY2llX2lkKCZkZXYsICZyZXYpOwotCi0JcmV0dXJuIGRldjsKLX0KLQogc3RhdGljIGludCBfX2luaXQgZG5zMzIzX3BjaV9pbml0KHZvaWQpCiB7Ci0JLyogVGhlIDUxODIgZG9lc24ndCByZWFsbHkgdXNlIGl0cyBQQ0kgYnVzLCBhbmQgaW5pdGlhbGlzaW5nIFBDSQorCS8qIFJldiBCMSBhbmQgQzEgZG9lc24ndCByZWFsbHkgdXNlIGl0cyBQQ0kgYnVzLCBhbmQgaW5pdGlhbGlzaW5nIFBDSQogCSAqIGdldHMgaW4gdGhlIHdheSBvZiBpbml0aWFsaXNpbmcgdGhlIFNBVEEgY29udHJvbGxlci4KIAkgKi8KLQlpZiAobWFjaGluZV9pc19kbnMzMjMoKSAmJiBkbnMzMjNfZGV2X2lkKCkgIT0gTVY4OEY1MTgyX0RFVl9JRCkKKwlpZiAobWFjaGluZV9pc19kbnMzMjMoKSAmJiBzeXN0ZW1fcmV2ID09IEROUzMyM19SRVZfQTEpCiAJCXBjaV9jb21tb25faW5pdCgmZG5zMzIzX3BjaSk7CiAKIAlyZXR1cm4gMDsKQEAgLTIyMSw3ICsyMzYsNyBAQAogCX0KIAogCWlvdW5tYXAobWFjX3BhZ2UpOwotCXByaW50aygiRE5TMzIzOiBGb3VuZCBldGhlcm5ldCBNQUMgYWRkcmVzczogIik7CisJcHJpbnRrKCJETlMtMzIzOiBGb3VuZCBldGhlcm5ldCBNQUMgYWRkcmVzczogIik7CiAJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKIAkJcHJpbnRrKCIlLjJ4JXMiLCBhZGRyW2ldLCAoaSA8IDUpID8gIjoiIDogIi5cbiIpOwogCkBAIC0yNTksMTIgKzI3NCwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIGRuczMyM19sZWRzW10gPSB7CitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGRuczMyM2FiX2xlZHNbXSA9IHsKIAl7CiAJCS5uYW1lID0gInBvd2VyOmJsdWUiLAogCQkuZ3BpbyA9IEROUzMyM19HUElPX0xFRF9QT1dFUjIsCi0JCS5kZWZhdWx0X3RyaWdnZXIgPSAidGltZXIiLAotCQkuYWN0aXZlX2xvdyA9IDEsCisJCS5kZWZhdWx0X3RyaWdnZXIgPSAiZGVmYXVsdC1vbiIsCiAJfSwgewogCQkubmFtZSA9ICJyaWdodDphbWJlciIsCiAJCS5ncGlvID0gRE5TMzIzX0dQSU9fTEVEX1JJR0hUX0FNQkVSLApAQCAtMjc2LDkgKzI5MCwzNCBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgZG5zMzIzX2xlZF9kYXRhID0gewotCS5udW1fbGVkcwk9IEFSUkFZX1NJWkUoZG5zMzIzX2xlZHMpLAotCS5sZWRzCQk9IGRuczMyM19sZWRzLAorCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGRuczMyM2NfbGVkc1tdID0geworCXsKKwkJLm5hbWUgPSAicG93ZXI6Ymx1ZSIsCisJCS5ncGlvID0gRE5TMzIzQ19HUElPX0xFRF9QT1dFUiwKKwkJLmRlZmF1bHRfdHJpZ2dlciA9ICJ0aW1lciIsCisJCS5hY3RpdmVfbG93ID0gMSwKKwl9LCB7CisJCS5uYW1lID0gInJpZ2h0OmFtYmVyIiwKKwkJLmdwaW8gPSBETlMzMjNDX0dQSU9fTEVEX1JJR0hUX0FNQkVSLAorCQkuYWN0aXZlX2xvdyA9IDEsCisJfSwgeworCQkubmFtZSA9ICJsZWZ0OmFtYmVyIiwKKwkJLmdwaW8gPSBETlMzMjNDX0dQSU9fTEVEX0xFRlRfQU1CRVIsCisJCS5hY3RpdmVfbG93ID0gMSwKKwl9LAorfTsKKworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgZG5zMzIzYWJfbGVkX2RhdGEgPSB7CisJLm51bV9sZWRzCT0gQVJSQVlfU0laRShkbnMzMjNhYl9sZWRzKSwKKwkubGVkcwkJPSBkbnMzMjNhYl9sZWRzLAorCS5ncGlvX2JsaW5rX3NldCA9IGRuczMyM19ncGlvX2JsaW5rX3NldCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBkbnMzMjNjX2xlZF9kYXRhID0geworCS5udW1fbGVkcwk9IEFSUkFZX1NJWkUoZG5zMzIzY19sZWRzKSwKKwkubGVkcwkJPSBkbnMzMjNjX2xlZHMsCiAJLmdwaW9fYmxpbmtfc2V0ID0gZG5zMzIzX2dwaW9fYmxpbmtfc2V0LAogfTsKIApAQCAtMjg2LDcgKzMyNSw3IEBACiAJLm5hbWUJCT0gImxlZHMtZ3BpbyIsCiAJLmlkCQk9IC0xLAogCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZkbnMzMjNfbGVkX2RhdGEsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJmRuczMyM2FiX2xlZF9kYXRhLAogCX0sCiB9OwogCkBAIC0yOTQsNyArMzMzLDcgQEAKICAqIEdQSU8gQXR0YWNoZWQgS2V5cwogICovCiAKLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBkbnMzMjNfYnV0dG9uc1tdID0geworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGRuczMyM2FiX2J1dHRvbnNbXSA9IHsKIAl7CiAJCS5jb2RlCQk9IEtFWV9SRVNUQVJULAogCQkuZ3BpbwkJPSBETlMzMjNfR1BJT19LRVlfUkVTRVQsCkBAIC0zMDgsOSArMzQ3LDIzIEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgZG5zMzIzX2J1dHRvbl9kYXRhID0gewotCS5idXR0b25zCT0gZG5zMzIzX2J1dHRvbnMsCi0JLm5idXR0b25zCT0gQVJSQVlfU0laRShkbnMzMjNfYnV0dG9ucyksCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGRuczMyM2FiX2J1dHRvbl9kYXRhID0geworCS5idXR0b25zCT0gZG5zMzIzYWJfYnV0dG9ucywKKwkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKGRuczMyM2FiX2J1dHRvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGRuczMyM2NfYnV0dG9uc1tdID0geworCXsKKwkJLmNvZGUJCT0gS0VZX1BPV0VSLAorCQkuZ3BpbwkJPSBETlMzMjNDX0dQSU9fS0VZX1BPV0VSLAorCQkuZGVzYwkJPSAiUG93ZXIgQnV0dG9uIiwKKwkJLmFjdGl2ZV9sb3cJPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGRuczMyM2NfYnV0dG9uX2RhdGEgPSB7CisJLmJ1dHRvbnMJPSBkbnMzMjNjX2J1dHRvbnMsCisJLm5idXR0b25zCT0gQVJSQVlfU0laRShkbnMzMjNjX2J1dHRvbnMpLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG5zMzIzX2J1dHRvbl9kZXZpY2UgPSB7CkBAIC0zMTgsNyArMzcxLDcgQEAKIAkuaWQJCT0gLTEsCiAJLm51bV9yZXNvdXJjZXMJPSAwLAogCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZkbnMzMjNfYnV0dG9uX2RhdGEsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJmRuczMyM2FiX2J1dHRvbl9kYXRhLAogCX0sCiB9OwogCkBAIC0zMzIsNyArMzg1LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBHZW5lcmFsIFNldHVwCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgb3Jpb241eF9tcHBfbW9kZSBkbnMzMjNfbXY4OGY1MTgxX21wcF9tb2Rlc1tdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IG9yaW9uNXhfbXBwX21vZGUgZG5zMzIzYV9tcHBfbW9kZXNbXSBfX2luaXRkYXRhID0gewogCXsgIDAsIE1QUF9QQ0lFX1JTVF9PVVRuIH0sCiAJeyAgMSwgTVBQX0dQSU8gfSwJCS8qIHJpZ2h0IGFtYmVyIExFRCAoc2F0YSBjaDApICovCiAJeyAgMiwgTVBQX0dQSU8gfSwJCS8qIGxlZnQgYW1iZXIgTEVEIChzYXRhIGNoMSkgKi8KQEAgLTM1Niw3ICs0MDksNyBAQAogCXsgLTEgfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb3Jpb241eF9tcHBfbW9kZSBkbnMzMjNfbXY4OGY1MTgyX21wcF9tb2Rlc1tdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IG9yaW9uNXhfbXBwX21vZGUgZG5zMzIzYl9tcHBfbW9kZXNbXSBfX2luaXRkYXRhID0gewogCXsgIDAsIE1QUF9VTlVTRUQgfSwKIAl7ICAxLCBNUFBfR1BJTyB9LAkJLyogcmlnaHQgYW1iZXIgTEVEIChzYXRhIGNoMCkgKi8KIAl7ICAyLCBNUFBfR1BJTyB9LAkJLyogbGVmdCBhbWJlciBMRUQgKHNhdGEgY2gxKSAqLwpAQCAtMzgwLDE1ICs0MzMsNTcgQEAKIAl7IC0xIH0sCiB9OwogCitzdGF0aWMgc3RydWN0IG9yaW9uNXhfbXBwX21vZGUgZG5zMzIzY19tcHBfbW9kZXNbXSBfX2luaXRkYXRhID0geworCXsgIDAsIE1QUF9HUElPIH0sCQkvKiA/IGlucHV0ICovCisJeyAgMSwgTVBQX0dQSU8gfSwJCS8qIGlucHV0IHBvd2VyIHN3aXRjaCAoMCA9IHByZXNzZWQpICovCisJeyAgMiwgTVBQX0dQSU8gfSwJCS8qIG91dHB1dCBwb3dlciBvZmYgKi8KKwl7ICAzLCBNUFBfVU5VU0VEIH0sCQkvKiA/IG91dHB1dCAqLworCXsgIDQsIE1QUF9VTlVTRUQgfSwJCS8qID8gb3V0cHV0ICovCisJeyAgNSwgTVBQX1VOVVNFRCB9LAkJLyogPyBvdXRwdXQgKi8KKwl7ICA2LCBNUFBfVU5VU0VEIH0sCQkvKiA/IG91dHB1dCAqLworCXsgIDcsIE1QUF9VTlVTRUQgfSwJCS8qID8gb3V0cHV0ICovCisJeyAgOCwgTVBQX0dQSU8gfSwJCS8qIGkvbyByaWdodCBhbWJlciBMRUQgKi8KKwl7ICA5LCBNUFBfR1BJTyB9LAkJLyogaS9vIGxlZnQgYW1iZXIgTEVEICovCisJeyAxMCwgTVBQX0dQSU8gfSwJCS8qIGlucHV0ICovCisJeyAxMSwgTVBQX1VOVVNFRCB9LAorCXsgMTIsIE1QUF9TQVRBX0xFRCB9LAorCXsgMTMsIE1QUF9TQVRBX0xFRCB9LAorCXsgMTQsIE1QUF9TQVRBX0xFRCB9LAorCXsgMTUsIE1QUF9TQVRBX0xFRCB9LAorCXsgMTYsIE1QUF9VTlVTRUQgfSwKKwl7IDE3LCBNUFBfR1BJTyB9LAkJLyogcG93ZXIgYnV0dG9uIExFRCAqLworCXsgMTgsIE1QUF9HUElPIH0sCQkvKiBmYW4gc3BlZWQgYml0IDAgKi8KKwl7IDE5LCBNUFBfR1BJTyB9LAkJLyogZmFuIHNwZWVkIGJpdCAxICovCisJeyAtMSB9LAorfTsKKworLyogUmV2IEMxIEZhbiBzcGVlZCBub3RlczoKKyAqCisgKiBUaGUgZmFuIGlzIGNvbnRyb2xsZWQgYnkgMiBHUElPcyBvbiB0aGlzIGJvYXJkLiBUaGUgc2V0dGluZ3MKKyAqIG9mIHRoZSBiaXRzIGlzIGFzIGZvbGxvdzoKKyAqCisgKiAgR1BJTyAxOCAgICBHUElPIDE5ICAgIEZhbgorICoKKyAqICAgIDAgICAgICAgICAgMCAgICAgICAgc3RvcHBlZAorICogICAgMCAgICAgICAgICAxICAgICAgICBsb3cgc3BlZWQKKyAqICAgIDEgICAgICAgICAgMCAgICAgICAgaGlnaCBzcGVlZAorICogICAgMSAgICAgICAgICAxICAgICAgICBkb24ndCBkbyB0aGF0ICgqKQorICoKKyAqICgqKSBJIHRoaW5rIHRoZSB0d28gYml0cyBjb250cm9sIHR3byBmZWVkLWluIHJlc2lzdG9ycyBpbnRvIGEgZml4ZWQKKyAqICAgICBQV04gY2lyY3VpdCwgc2V0dGluZyBib3RoIGJpdHMgd2lsbCBiYXNpY2FsbHkgZ28gYSAnYml0JyBmYXN0ZXIKKyAqICAgICB0aGFuIGhpZ2ggc3BlZWQsIGJ1dCBkLWxpbmsgZG9lc24ndCBkbyBpdCBhbmQgeW91IG1heSBnZXQgb3V0IG9mCisgKiAgICAgSFcgc3BlYyBzbyBkb24ndCBkbyBpdC4KKyAqLworCiAvKgotICogT24gdGhlIEROUy0zMjMgdGhlIGZvbGxvd2luZyBkZXZpY2VzIGFyZSBhdHRhY2hlZCB2aWEgSTJDOgorICogT24gdGhlIEROUy0zMjMgQTEgYW5kIEIxIHRoZSBmb2xsb3dpbmcgZGV2aWNlcyBhcmUgYXR0YWNoZWQgdmlhIEkyQzoKICAqCiAgKiAgaTJjIGFkZHIgfCBjaGlwICAgICAgICB8IGRlc2NyaXB0aW9uCiAgKiAgMHgzZSAgICAgfCBHTVQgRzc2MEFmICB8IGZhbiBzcGVlZCBQV00gY29udHJvbGxlcgogICogIDB4NDggICAgIHwgR01UIEc3NTEtMmYgfCB0ZW1wLiBzZW5zb3IgYW5kIHRoZXJtLiB3YXRjaGRvZyAoTE03NSBjb21wYXRpYmxlKQogICogIDB4NjggICAgIHwgU1QgTTQxVDgwICAgfCBSVEMgdy8gYWxhcm0KICAqLwotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGRuczMyM19pMmNfZGV2aWNlc1tdID0geworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGRuczMyM2FiX2kyY19kZXZpY2VzW10gPSB7CiAJewogCQlJMkNfQk9BUkRfSU5GTygiZzc2MGEiLCAweDNlKSwKIAl9LCB7CkBAIC0zOTgsMzYgKzQ5MywxNDAgQEAKIAl9LAogfTsKIAorLyoKKyAqIE9uIHRoZSBETlMtMzIzIEMxIHRoZSBmb2xsb3dpbmcgZGV2aWNlcyBhcmUgYXR0YWNoZWQgdmlhIEkyQzoKKyAqCisgKiAgaTJjIGFkZHIgfCBjaGlwICAgICAgICB8IGRlc2NyaXB0aW9uCisgKiAgMHg0OCAgICAgfCBHTVQgRzc1MS0yZiB8IHRlbXAuIHNlbnNvciBhbmQgdGhlcm0uIHdhdGNoZG9nIChMTTc1IGNvbXBhdGlibGUpCisgKiAgMHg2OCAgICAgfCBTVCBNNDFUODAgICB8IFJUQyB3LyBhbGFybQorICovCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZG5zMzIzY19pMmNfZGV2aWNlc1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oImxtNzUiLCAweDQ4KSwKKwl9LCB7CisJCUkyQ19CT0FSRF9JTkZPKCJtNDF0ODAiLCAweDY4KSwKKwl9LAorfTsKKwogLyogRE5TLTMyMyByZXYuIEEgc3BlY2lmaWMgcG93ZXIgb2ZmIG1ldGhvZCAqLwogc3RhdGljIHZvaWQgZG5zMzIzYV9wb3dlcl9vZmYodm9pZCkKIHsKLQlwcl9pbmZvKCIlczogdHJpZ2dlcmluZyBwb3dlci1vZmYuLi5cbiIsIF9fZnVuY19fKTsKKwlwcl9pbmZvKCJETlMtMzIzOiBUcmlnZ2VyaW5nIHBvd2VyLW9mZi4uLlxuIik7CiAJZ3Bpb19zZXRfdmFsdWUoRE5TMzIzX0dQSU9fUE9XRVJfT0ZGLCAxKTsKIH0KIAogLyogRE5TLTMyMyByZXYgQiBzcGVjaWZpYyBwb3dlciBvZmYgbWV0aG9kICovCiBzdGF0aWMgdm9pZCBkbnMzMjNiX3Bvd2VyX29mZih2b2lkKQogewotCXByX2luZm8oIiVzOiB0cmlnZ2VyaW5nIHBvd2VyLW9mZi4uLlxuIiwgX19mdW5jX18pOworCXByX2luZm8oIkROUy0zMjM6IFRyaWdnZXJpbmcgcG93ZXItb2ZmLi4uXG4iKTsKIAkvKiBQaW4gaGFzIHRvIGJlIGNoYW5nZWQgdG8gMSBhbmQgYmFjayB0byAwIHRvIGRvIGFjdHVhbCBwb3dlciBvZmYuICovCiAJZ3Bpb19zZXRfdmFsdWUoRE5TMzIzX0dQSU9fUE9XRVJfT0ZGLCAxKTsKIAltZGVsYXkoMTAwKTsKIAlncGlvX3NldF92YWx1ZShETlMzMjNfR1BJT19QT1dFUl9PRkYsIDApOwogfQogCisvKiBETlMtMzIzIHJldi4gQyBzcGVjaWZpYyBwb3dlciBvZmYgbWV0aG9kICovCitzdGF0aWMgdm9pZCBkbnMzMjNjX3Bvd2VyX29mZih2b2lkKQoreworCXByX2luZm8oIkROUy0zMjM6IFRyaWdnZXJpbmcgcG93ZXItb2ZmLi4uXG4iKTsKKwlncGlvX3NldF92YWx1ZShETlMzMjNDX0dQSU9fUE9XRVJfT0ZGLCAxKTsKK30KKworc3RhdGljIGludCBkbnMzMjNjX3BoeV9maXh1cChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KQoreworCXBoeS0+ZGV2X2ZsYWdzIHw9IE1BUlZFTExfUEhZX00xMTE4X0ROUzMyM19MRURTOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGRuczMyM19pZGVudGlmeV9yZXYodm9pZCkKK3sKKwl1MzIgZGV2LCByZXYsIGksIHJlZzsKKworCXByX2RlYnVnKCJETlMtMzIzOiBJZGVudGlmeWluZyBib2FyZCAuLi4gXG4iKTsKKworCS8qIFJldiBBMSBoYXMgYSA1MTgxICovCisJb3Jpb241eF9wY2llX2lkKCZkZXYsICZyZXYpOworCWlmIChkZXYgPT0gTVY4OEY1MTgxX0RFVl9JRCkgeworCQlwcl9kZWJ1ZygiRE5TLTMyMzogNTE4MSBmb3VuZCwgYm9hcmQgaXMgQTFcbiIpOworCQlyZXR1cm4gRE5TMzIzX1JFVl9BMTsKKwl9CisJcHJfZGVidWcoIkROUy0zMjM6IDUxODIgZm91bmQsIGJvYXJkIGlzIEIxIG9yIEMxLCBjaGVja2luZyBQSFkuLi5cbiIpOworCisJLyogUmV2IEIxIGFuZCBDMSBib3RoIGhhdmUgNTE4MiwgbGV0J3MgcG9rZSBhdCB0aGUgZXRoIFBIWS4gVGhpcyBpcworCSAqIGEgYml0IGdyb3NzIGJ1dCB3ZSB3YW50IHRvIGRvIHRoYXQgd2l0aG91dCBsaW5rcyBpbnRvIHRoZSBldGgKKwkgKiBkcml2ZXIgc28gbGV0J3MgcG9rZSBhdCBpdCBkaXJlY3RseS4gV2UgZGVmYXVsdCB0byByZXYgQjEgaW4KKwkgKiBjYXNlIHRoZSBhY2Nlc3NlcyBmYWlsCisJICovCisKKyNkZWZpbmUgRVRIX1NNSV9SRUcJCShPUklPTjVYX0VUSF9WSVJUX0JBU0UgKyAweDIwMDAgKyAweDAwNCkKKyNkZWZpbmUgIFNNSV9CVVNZCQkweDEwMDAwMDAwCisjZGVmaW5lICBTTUlfUkVBRF9WQUxJRAkJMHgwODAwMDAwMAorI2RlZmluZSAgU01JX09QQ09ERV9SRUFECTB4MDQwMDAwMDAKKyNkZWZpbmUgIFNNSV9PUENPREVfV1JJVEUJMHgwMDAwMDAwMAorCisJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykgeworCQlyZWcgPSByZWFkbChFVEhfU01JX1JFRyk7CisJCWlmICghKHJlZyAmIFNNSV9CVVNZKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA+PSAxMDAwKSB7CisJCXByX3dhcm5pbmcoIkROUy0zMjM6IFRpbWVvdXQgYWNjZXNzaW5nIFBIWSwgYXNzdW1pbmcgcmV2IEIxXG4iKTsKKwkJcmV0dXJuIEROUzMyM19SRVZfQjE7CisJfQorCXdyaXRlbCgoMyA8PCAyMSkJLyogcGh5IElEIHJlZyAqLyB8CisJICAgICAgICg4IDw8IDE2KQkvKiBwaHkgYWRkciAqLyB8CisJICAgICAgIFNNSV9PUENPREVfUkVBRCwgRVRIX1NNSV9SRUcpOworCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKwkJcmVnID0gcmVhZGwoRVRIX1NNSV9SRUcpOworCQlpZiAocmVnICYgU01JX1JFQURfVkFMSUQpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPj0gMTAwMCkgeworCQlwcl93YXJuaW5nKCJETlMtMzIzOiBUaW1lb3V0IHJlYWRpbmcgUEhZLCBhc3N1bWluZyByZXYgQjFcbiIpOworCQlyZXR1cm4gRE5TMzIzX1JFVl9CMTsKKwl9CisJcHJfZGVidWcoIkROUy0zMjM6IEV0aGVybmV0IFBIWSBJRCAweCV4XG4iLCByZWcgJiAweGZmZmYpOworCisJLyogTm90ZTogdGhlIE1hcnZlbGwgdG9vbHMgbWFzayB0aGUgSUQgd2l0aCAweDNmMCBiZWZvcmUgY29tcGFyaXNvbgorCSAqIGJ1dCBJIGRvbid0IHNlZSB0aGF0IG1ha2luZyBhIGRpZmZlcmVuY2UgaGVyZSwgYXQgbGVhc3Qgd2l0aAorCSAqIGFueSBrbm93biBNYXJ2ZWxsIFBIWSBJRAorCSAqLworCXN3aXRjaChyZWcgJiAweGZmZjApIHsKKwljYXNlIDB4MGNjMDogLyogTVY4OEUxMTExICovCisJCXJldHVybiBETlMzMjNfUkVWX0IxOworCWNhc2UgMHgwZTEwOiAvKiBNVjg4RTExMTggKi8KKwkJcmV0dXJuIEROUzMyM19SRVZfQzE7CisJZGVmYXVsdDoKKwkJcHJfd2FybmluZygiRE5TLTMyMzogVW5rbm93biBQSFkgSUQgMHglMDR4LCBhc3N1bWluZyByZXYgQjFcbiIsCisJCQkgICByZWcgJiAweGZmZmYpOworCX0KKwlyZXR1cm4gRE5TMzIzX1JFVl9CMTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IGRuczMyM19pbml0KHZvaWQpCiB7CiAJLyogU2V0dXAgYmFzaWMgT3Jpb24gZnVuY3Rpb25zLiBOZWVkIHRvIGJlIGNhbGxlZCBlYXJseS4gKi8KIAlvcmlvbjV4X2luaXQoKTsKIAorCS8qIElkZW50aWZ5IHJldmlzaW9uICovCisJc3lzdGVtX3JldiA9IGRuczMyM19pZGVudGlmeV9yZXYoKTsKKwlwcl9pbmZvKCJETlMtMzIzOiBJZGVudGlmaWVkIEhXIHJldmlzaW9uICVjMVxuIiwgJ0EnICsgc3lzdGVtX3Jldik7CisKIAkvKiBKdXN0IHRvIGJlIHRyaWNreSwgdGhlIDUxODIgaGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQKIAkgKiBzZXQgb2YgTVBQIG1vZGVzIHRvIHRoZSA1MTgxLgogCSAqLwotCWlmIChkbnMzMjNfZGV2X2lkKCkgPT0gTVY4OEY1MTgyX0RFVl9JRCkKLQkJb3Jpb241eF9tcHBfY29uZihkbnMzMjNfbXY4OGY1MTgyX21wcF9tb2Rlcyk7Ci0JZWxzZSB7Ci0JCW9yaW9uNXhfbXBwX2NvbmYoZG5zMzIzX212ODhmNTE4MV9tcHBfbW9kZXMpOworCXN3aXRjaChzeXN0ZW1fcmV2KSB7CisJY2FzZSBETlMzMjNfUkVWX0ExOgorCQlvcmlvbjV4X21wcF9jb25mKGRuczMyM2FfbXBwX21vZGVzKTsKIAkJd3JpdGVsKDAsIE1QUF9ERVZfQ1RSTCk7CQkvKiBERVZfRFszMToxNl0gKi8KKwkJYnJlYWs7CisJY2FzZSBETlMzMjNfUkVWX0IxOgorCQlvcmlvbjV4X21wcF9jb25mKGRuczMyM2JfbXBwX21vZGVzKTsKKwkJYnJlYWs7CisJY2FzZSBETlMzMjNfUkVWX0MxOgorCQlvcmlvbjV4X21wcF9jb25mKGRuczMyM2NfbXBwX21vZGVzKTsKKwkJYnJlYWs7CiAJfQogCiAJLyogc2V0dXAgZmxhc2ggbWFwcGluZwpAQCAtNDM2LDUzICs2MzUsOTYgQEAKIAlvcmlvbjV4X3NldHVwX2Rldl9ib290X3dpbihETlMzMjNfTk9SX0JPT1RfQkFTRSwgRE5TMzIzX05PUl9CT09UX1NJWkUpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG5zMzIzX25vcl9mbGFzaCk7CiAKLQkvKiBUaGUgNTE4MSBwb3dlciBMRUQgaXMgYWN0aXZlIGxvdyBhbmQgcmVxdWlyZXMKLQkgKiBETlMzMjNfR1BJT19MRURfUE9XRVIxIHRvIGFsc28gYmUgbG93LgotCSAqLwotCWlmIChkbnMzMjNfZGV2X2lkKCkgPT0gTVY4OEY1MTgxX0RFVl9JRCkgewotCQlkbnMzMjNfbGVkc1swXS5hY3RpdmVfbG93ID0gMTsKLQkJZ3Bpb19yZXF1ZXN0KEROUzMyM19HUElPX0xFRF9QT1dFUjEsICJQb3dlciBMZWQgRW5hYmxlIik7Ci0JCWdwaW9fZGlyZWN0aW9uX291dHB1dChETlMzMjNfR1BJT19MRURfUE9XRVIxLCAwKTsKKwkvKiBTb3J0IG91dCBMRURzLCBCdXR0b25zIGFuZCBpMmMgZGV2aWNlcyAqLworCXN3aXRjaChzeXN0ZW1fcmV2KSB7CisJY2FzZSBETlMzMjNfUkVWX0ExOgorCQkvKiBUaGUgNTE4MSBwb3dlciBMRUQgaXMgYWN0aXZlIGxvdyBhbmQgcmVxdWlyZXMKKwkJICogRE5TMzIzX0dQSU9fTEVEX1BPV0VSMSB0byBhbHNvIGJlIGxvdy4KKwkJICovCisJCSBkbnMzMjNhYl9sZWRzWzBdLmFjdGl2ZV9sb3cgPSAxOworCQkgZ3Bpb19yZXF1ZXN0KEROUzMyM19HUElPX0xFRF9QT1dFUjEsICJQb3dlciBMZWQgRW5hYmxlIik7CisJCSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoRE5TMzIzX0dQSU9fTEVEX1BPV0VSMSwgMCk7CisJCS8qIEZhbGwgdGhyb3VnaCAqLworCWNhc2UgRE5TMzIzX1JFVl9CMToKKwkJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZG5zMzIzYWJfaTJjX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShkbnMzMjNhYl9pMmNfZGV2aWNlcykpOworCQlicmVhazsKKwljYXNlIEROUzMyM19SRVZfQzE6CisJCS8qIEhvb2t1cCBMRURzICYgQnV0dG9ucyAqLworCQlkbnMzMjNfZ3Bpb19sZWRzLmRldi5wbGF0Zm9ybV9kYXRhID0gJmRuczMyM2NfbGVkX2RhdGE7CisJCWRuczMyM19idXR0b25fZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gJmRuczMyM2NfYnV0dG9uX2RhdGE7CisKKwkJLyogSG9va3VwIGkyYyBkZXZpY2VzIGFuZCBmYW4gZHJpdmVyICovCisJCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGRuczMyM2NfaTJjX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShkbnMzMjNjX2kyY19kZXZpY2VzKSk7CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImRuczMyM2MtZmFuIiwgMCwgTlVMTCwgMCk7CisKKwkJLyogUmVnaXN0ZXIgZml4dXAgZm9yIHRoZSBQSFkgTEVEcyAqLworCQlwaHlfcmVnaXN0ZXJfZml4dXBfZm9yX3VpZChNQVJWRUxMX1BIWV9JRF84OEUxMTE4LAorCQkJCQkgICBNQVJWRUxMX1BIWV9JRF9NQVNLLAorCQkJCQkgICBkbnMzMjNjX3BoeV9maXh1cCk7CiAJfQogCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbnMzMjNfZ3Bpb19sZWRzKTsKLQogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG5zMzIzX2J1dHRvbl9kZXZpY2UpOwogCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZG5zMzIzX2kyY19kZXZpY2VzLAotCQkJCUFSUkFZX1NJWkUoZG5zMzIzX2kyY19kZXZpY2VzKSk7Ci0KIAkvKgogCSAqIENvbmZpZ3VyZSBwZXJpcGhlcmFscy4KIAkgKi8KIAlpZiAoZG5zMzIzX3JlYWRfbWFjX2FkZHIoKSA8IDApCi0JCXByaW50aygiRE5TMzIzOiBGYWlsZWQgdG8gcmVhZCBNQUMgYWRkcmVzc1xuIik7Ci0KKwkJcHJpbnRrKCJETlMtMzIzOiBGYWlsZWQgdG8gcmVhZCBNQUMgYWRkcmVzc1xuIik7CiAJb3Jpb241eF9laGNpMF9pbml0KCk7CiAJb3Jpb241eF9ldGhfaW5pdCgmZG5zMzIzX2V0aF9kYXRhKTsKIAlvcmlvbjV4X2kyY19pbml0KCk7CiAJb3Jpb241eF91YXJ0MF9pbml0KCk7CiAKLQkvKiBUaGUgNTE4MiBoYXMgaXRzIFNBVEEgY29udHJvbGxlciBvbi1jaGlwLCBhbmQgbmVlZHMgaXRzIG93biBsaXR0bGUKLQkgKiBpbml0IHJvdXRpbmUuCi0JICovCi0JaWYgKGRuczMyM19kZXZfaWQoKSA9PSBNVjg4RjUxODJfREVWX0lEKQorCS8qIFJlbWFpbmluZyBHUElPcyAqLworCXN3aXRjaChzeXN0ZW1fcmV2KSB7CisJY2FzZSBETlMzMjNfUkVWX0ExOgorCQkvKiBQb3dlcm9mZiBHUElPICovCisJCWlmIChncGlvX3JlcXVlc3QoRE5TMzIzX0dQSU9fUE9XRVJfT0ZGLCAiUE9XRVJPRkYiKSAhPSAwIHx8CisJCSAgICBncGlvX2RpcmVjdGlvbl9vdXRwdXQoRE5TMzIzX0dQSU9fUE9XRVJfT0ZGLCAwKSAhPSAwKQorCQkJcHJfZXJyKCJETlMtMzIzOiBmYWlsZWQgdG8gc2V0dXAgcG93ZXItb2ZmIEdQSU9cbiIpOworCQlwbV9wb3dlcl9vZmYgPSBkbnMzMjNhX3Bvd2VyX29mZjsKKwkJYnJlYWs7CisJY2FzZSBETlMzMjNfUkVWX0IxOgorCQkvKiA1MTgyIGJ1aWx0LWluIFNBVEEgaW5pdCAqLwogCQlvcmlvbjV4X3NhdGFfaW5pdCgmZG5zMzIzX3NhdGFfZGF0YSk7CiAKLQkvKiBUaGUgNTE4MiBoYXMgZmxhZyB0byBpbmRpY2F0ZSB0aGUgc3lzdGVtIGlzIHVwLiBXaXRob3V0IHRoaXMgZmxhZwotCSAqIHNldCwgcG93ZXIgTEVEIHdpbGwgZmxhc2ggYW5kIGNhbm5vdCBiZSBjb250cm9sbGVkIHZpYSBsZWRzLWdwaW8uCi0JICovCi0JaWYgKGRuczMyM19kZXZfaWQoKSA9PSBNVjg4RjUxODJfREVWX0lEKQotCQlncGlvX3NldF92YWx1ZShETlMzMjNfR1BJT19TWVNURU1fVVAsIDEpOworCQkvKiBUaGUgRE5TMzIzIHJldiBCMSBoYXMgZmxhZyB0byBpbmRpY2F0ZSB0aGUgc3lzdGVtIGlzIHVwLgorCQkgKiBXaXRob3V0IHRoaXMgZmxhZyBzZXQsIHBvd2VyIExFRCB3aWxsIGZsYXNoIGFuZCBjYW5ub3QgYmUKKwkJICogY29udHJvbGxlZCB2aWEgbGVkcy1ncGlvLgorCQkgKi8KKwkJaWYgKGdwaW9fcmVxdWVzdChETlMzMjNfR1BJT19TWVNURU1fVVAsICJTWVNfUkVBRFkiKSA9PSAwKQorCQkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEROUzMyM19HUElPX1NZU1RFTV9VUCwgMSk7CiAKLQkvKiBSZWdpc3RlciBkbnMzMjMgc3BlY2lmaWMgcG93ZXItb2ZmIG1ldGhvZCAqLwotCWlmIChncGlvX3JlcXVlc3QoRE5TMzIzX0dQSU9fUE9XRVJfT0ZGLCAiUE9XRVJPRkYiKSAhPSAwIHx8Ci0JICAgIGdwaW9fZGlyZWN0aW9uX291dHB1dChETlMzMjNfR1BJT19QT1dFUl9PRkYsIDApICE9IDApCi0JCXByX2VycigiRE5TMzIzOiBmYWlsZWQgdG8gc2V0dXAgcG93ZXItb2ZmIEdQSU9cbiIpOwotCWlmIChkbnMzMjNfZGV2X2lkKCkgPT0gTVY4OEY1MTgyX0RFVl9JRCkKKwkJLyogUG93ZXJvZmYgR1BJTyAqLworCQlpZiAoZ3Bpb19yZXF1ZXN0KEROUzMyM19HUElPX1BPV0VSX09GRiwgIlBPV0VST0ZGIikgIT0gMCB8fAorCQkgICAgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEROUzMyM19HUElPX1BPV0VSX09GRiwgMCkgIT0gMCkKKwkJCXByX2VycigiRE5TLTMyMzogZmFpbGVkIHRvIHNldHVwIHBvd2VyLW9mZiBHUElPXG4iKTsKIAkJcG1fcG93ZXJfb2ZmID0gZG5zMzIzYl9wb3dlcl9vZmY7Ci0JZWxzZQotCQlwbV9wb3dlcl9vZmYgPSBkbnMzMjNhX3Bvd2VyX29mZjsKKwkJYnJlYWs7CisJY2FzZSBETlMzMjNfUkVWX0MxOgorCQkvKiA1MTgyIGJ1aWx0LWluIFNBVEEgaW5pdCAqLworCQlvcmlvbjV4X3NhdGFfaW5pdCgmZG5zMzIzX3NhdGFfZGF0YSk7CisKKwkJLyogUG93ZXJvZmYgR1BJTyAqLworCQlpZiAoZ3Bpb19yZXF1ZXN0KEROUzMyM0NfR1BJT19QT1dFUl9PRkYsICJQT1dFUk9GRiIpICE9IDAgfHwKKwkJICAgIGdwaW9fZGlyZWN0aW9uX291dHB1dChETlMzMjNDX0dQSU9fUE9XRVJfT0ZGLCAwKSAhPSAwKQorCQkJcHJfZXJyKCJETlMtMzIzOiBmYWlsZWQgdG8gc2V0dXAgcG93ZXItb2ZmIEdQSU9cbiIpOworCQlwbV9wb3dlcl9vZmYgPSBkbnMzMjNjX3Bvd2VyX29mZjsKKworCQkvKiBOb3csIC10aGlzLSBzaG91bGQgdGhlb3JpY2FsbHkgYmUgZG9uZSBieSB0aGUgc2F0YV9tdiBkcml2ZXIKKwkJICogb25jZSBJIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIHRoZXJlLiBNYXliZSB0aGUgYmVoYXZpb3VyCisJCSAqIG9mIHRoZSBMRURzIHNob3VsZCBiZSBzb21ld2hhdCBwYXNzZWQgdmlhIHRoZSBwbGF0Zm9ybV9kYXRhLgorCQkgKiBmb3Igbm93LCBqdXN0IHdoYWNrIHRoZSByZWdpc3RlciBhbmQgbWFrZSB0aGUgTEVEcyBoYXBweQorCQkgKgorCQkgKiBOb3RlOiBBRkFJSywgcmV2IEIxIG5lZWRzIHRoZSBzYW1lIHRyZWF0ZW1lbnQgYnV0IEknbGwgbGV0CisJCSAqIHNvbWVib2R5IGVsc2UgdGVzdCBpdC4KKwkJICovCisJCXdyaXRlbCgweDUsIE9SSU9ONVhfU0FUQV9WSVJUX0JBU0UgfCAweDJjKTsKKwkJYnJlYWs7CisJfQogfQogCiAvKiBXYXJuaW5nOiBELUxpbmsgdXNlcyBhIHdyb25nIG1hY2gtdHlwZSAoPTUyNikgaW4gdGhlaXIgYm9vdGxvYWRlciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggNjBlNzM0Yy4uYTFkNmU0NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0yNSw2ICsyNSw4IEBACiAJICovCiAJb3Jpb241eF9zZXRiaXRzKFJTVE9VVG5fTUFTSywgKDEgPDwgMikpOwogCW9yaW9uNXhfc2V0Yml0cyhDUFVfU09GVF9SRVNFVCwgMSk7CisJbWRlbGF5KDIwMCk7CisJb3Jpb241eF9jbHJiaXRzKENQVV9TT0ZUX1JFU0VULCAxKTsKIH0KIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14Mnh4LXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDJ4eC1wY2kuYwppbmRleCAxNjFmYzJkLi4wZjMxMzA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14Mnh4LXBjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyeHgtcGNpLmMKQEAgLTM1LDcgKzM1LDcgQEAKICAqIFRoaXMgaXMgcmVhbGx5IHVnbHkgYW5kIHdlIG5lZWQgYSBiZXR0ZXIgd2F5IG9mIHNwZWNpZnlpbmcKICAqIERNQS1jYXBhYmxlIHJlZ2lvbnMgb2YgbWVtb3J5LgogICovCi12b2lkIF9faW5pdCBjbXgyeHhfcGNpX2FkanVzdF96b25lcyhpbnQgbm9kZSwgdW5zaWduZWQgbG9uZyAqem9uZV9zaXplLAordm9pZCBfX2luaXQgY214Mnh4X3BjaV9hZGp1c3Rfem9uZXModW5zaWduZWQgbG9uZyAqem9uZV9zaXplLAogCXVuc2lnbmVkIGxvbmcgKnpob2xlX3NpemUpCiB7CiAJdW5zaWduZWQgaW50IHN6ID0gU1pfNjRNID4+IFBBR0VfU0hJRlQ7CkBAIC00Niw3ICs0Niw3IEBACiAJCS8qCiAJCSAqIE9ubHkgYWRqdXN0IGlmID4gNjRNIG9uIGN1cnJlbnQgc3lzdGVtCiAJCSAqLwotCQlpZiAobm9kZSB8fCAoem9uZV9zaXplWzBdIDw9IHN6KSkKKwkJaWYgKHpvbmVfc2l6ZVswXSA8PSBzeikKIAkJCXJldHVybjsKIAogCQl6b25lX3NpemVbMV0gPSB6b25lX3NpemVbMF0gLSBzejsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMwMC5jCmluZGV4IDQ1YzIzZmQuLjQwYjZhYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzMDAuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPG1hY2gvY29saWJyaS5oPgogI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KKyNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgpAQCAtMTQ1LDcgKzE0Niw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgY29saWJyaV9weGEzMDBfaW5pdF9sY2Qodm9pZCkge30KICNlbmRpZiAvKiBDT05GSUdfRkJfUFhBIHx8IENPTkZJR19GQl9QWEFfTU9EVUxFICovCiAKLSNpZiBkZWZpbmVkKFNORF9BQzk3X0NPREVDKSB8fCBkZWZpbmVkKFNORF9BQzk3X0NPREVDX01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19TTkRfQUM5N19DT0RFQykgfHwgZGVmaW5lZChDT05GSUdfU05EX0FDOTdfQ09ERUNfTU9EVUxFKQogc3RhdGljIG1mcF9jZmdfdCBjb2xpYnJpX3B4YTMxMF9hYzk3X3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0gewogCUdQSU8yNF9BQzk3X1NZU0NMSywKIAlHUElPMjNfQUM5N19uQUNSRVNFVCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jCmluZGV4IDNkMWRjYjkuLjQ2MWJhNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYwpAQCAtNDQ2LDcgKzQ0Niw3IEBACiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGNvcmdpX21jaV9wbGF0Zm9ybV9kYXRhID0gewogCS5kZXRlY3RfZGVsYXlfbXMJPSAyNTAsCiAJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKLQkuZ3Bpb19jYXJkX2RldGVjdAk9IC0xLAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gQ09SR0lfR1BJT19uU0RfREVURUNULAogCS5ncGlvX2NhcmRfcm8JCT0gQ09SR0lfR1BJT19uU0RfV1AsCiAJLmdwaW9fcG93ZXIJCT0gQ09SR0lfR1BJT19TRF9QV1IsCiB9OwpAQCAtNzE1LDcgKzcxNSw2IEBACiAJc2hhcnBzbF9zYXZlX3BhcmFtKCk7CiAJbWktPm5yX2JhbmtzPTE7CiAJbWktPmJhbmtbMF0uc3RhcnQgPSAweGEwMDAwMDAwOwotCW1pLT5iYW5rWzBdLm5vZGUgPSAwOwogCWlmIChtYWNoaW5lX2lzX2NvcmdpKCkpCiAJCW1pLT5iYW5rWzBdLnNpemUgPSAoMzIqMTAyNCoxMDI0KTsKIAllbHNlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTJ4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY3B1ZnJlcS1weGEyeHguYwppbmRleCA5ZTRkOTgxLi4yNjhhOWJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTJ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhMnh4LmMKQEAgLTI1NiwxMyArMjU2LDkgQEAKIAogc3RhdGljIHUzMiBtZHJlZnJfZHJpKHVuc2lnbmVkIGludCBmcmVxKQogewotCXUzMiBkcmkgPSAwOworCXUzMiBpbnRlcnZhbCA9IGZyZXEgKiBTRFJBTV9UUkVGIC8gc2RyYW1fcm93czsKIAotCWlmIChjcHVfaXNfcHhhMjV4KCkpCi0JCWRyaSA9ICgoZnJlcSAqIFNEUkFNX1RSRUYpIC8gKHNkcmFtX3Jvd3MgKiAzMikpOwotCWlmIChjcHVfaXNfcHhhMjd4KCkpCi0JCWRyaSA9ICgoZnJlcSAqIFNEUkFNX1RSRUYpIC8gKHNkcmFtX3Jvd3MgLSAzMSkpIC8gMzI7Ci0JcmV0dXJuIGRyaTsKKwlyZXR1cm4gKGludGVydmFsIC0gKGNwdV9pc19weGEyN3goKSA/IDMxIDogMCkpIC8gMzI7CiB9CiAKIC8qIGZpbmQgYSB2YWxpZCBmcmVxdWVuY3kgcG9pbnQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2VzZXJpZXMuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2VzZXJpZXMuYwppbmRleCA5NmVkMTMwLi5hMGFiMzA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lc2VyaWVzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZXNlcmllcy5jCkBAIC0zNCw3ICszNCw2IEBACiB7CiAJbWktPm5yX2JhbmtzPTE7CiAJbWktPmJhbmtbMF0uc3RhcnQgPSAweGEwMDAwMDAwOwotCW1pLT5iYW5rWzBdLm5vZGUgPSAwOwogCWlmIChtYWNoaW5lX2lzX2U4MDAoKSkKIAkJbWktPmJhbmtbMF0uc2l6ZSA9ICgxMjgqMTAyNCoxMDI0KTsKIAllbHNlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmggYi9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmgKaW5kZXggODkwZmI5MC4uYzYzMDVjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuaApAQCAtMjYsOCArMjYsNyBAQAogCiAjZGVmaW5lIFNFVF9CQU5LKF9fbnIsX19zdGFydCxfX3NpemUpIFwKIAltaS0+YmFua1tfX25yXS5zdGFydCA9IChfX3N0YXJ0KSwgXAotCW1pLT5iYW5rW19fbnJdLnNpemUgPSAoX19zaXplKSwgXAotCW1pLT5iYW5rW19fbnJdLm5vZGUgPSAoKCh1bnNpZ25lZCkoX19zdGFydCkgLSBQSFlTX09GRlNFVCkgPj4gMjcpCisJbWktPmJhbmtbX19ucl0uc2l6ZSA9IChfX3NpemUpCiAKICNkZWZpbmUgQVJSQVlfQU5EX1NJWkUoeCkJKHgpLCBBUlJBWV9TSVpFKHgpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCBmNjI2NzMwLi45MjM2MWE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0xNywyNCArMTcsMTEgQEAKICAqLwogI2RlZmluZSBQSFlTX09GRlNFVAlVTCgweGEwMDAwMDAwKQogCi0vKgotICogVGhlIG5vZGVzIGFyZSBtYXRjaGVkIHdpdGggdGhlIHBoeXNpY2FsIFNEUkFNIGJhbmtzIGFzIGZvbGxvd3M6Ci0gKgotICogCW5vZGUgMDogIDB4YTAwMDAwMDAtMHhhM2ZmZmZmZgktLT4gIDB4YzAwMDAwMDAtMHhjM2ZmZmZmZgotICogCW5vZGUgMTogIDB4YTQwMDAwMDAtMHhhN2ZmZmZmZgktLT4gIDB4YzQwMDAwMDAtMHhjN2ZmZmZmZgotICogCW5vZGUgMjogIDB4YTgwMDAwMDAtMHhhYmZmZmZmZgktLT4gIDB4YzgwMDAwMDAtMHhjYmZmZmZmZgotICogCW5vZGUgMzogIDB4YWMwMDAwMDAtMHhhZmZmZmZmZgktLT4gIDB4Y2MwMDAwMDAtMHhjZmZmZmZmZgotICoKLSAqIFRoaXMgbmVlZHMgYSBub2RlIG1lbSBzaXplIG9mIDI2IGJpdHMuCi0gKi8KLSNkZWZpbmUgTk9ERV9NRU1fU0laRV9CSVRTCTI2Ci0KICNpZiAhZGVmaW5lZChfX0FTU0VNQkxZX18pICYmIGRlZmluZWQoQ09ORklHX01BQ0hfQVJNQ09SRSkgJiYgZGVmaW5lZChDT05GSUdfUENJKQotdm9pZCBjbXgyeHhfcGNpX2FkanVzdF96b25lcyhpbnQgbm9kZSwgdW5zaWduZWQgbG9uZyAqc2l6ZSwKLQkJCSAgICAgdW5zaWduZWQgbG9uZyAqaG9sZXMpOwordm9pZCBjbXgyeHhfcGNpX2FkanVzdF96b25lcyh1bnNpZ25lZCBsb25nICpzaXplLCB1bnNpZ25lZCBsb25nICpob2xlcyk7CiAKLSNkZWZpbmUgYXJjaF9hZGp1c3Rfem9uZXMobm9kZSwgc2l6ZSwgaG9sZXMpIFwKLQljbXgyeHhfcGNpX2FkanVzdF96b25lcyhub2RlLCBzaXplLCBob2xlcykKKyNkZWZpbmUgYXJjaF9hZGp1c3Rfem9uZXMoc2l6ZSwgaG9sZXMpIFwKKwljbXgyeHhfcGNpX2FkanVzdF96b25lcyhzaXplLCBob2xlcykKIAogI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRAkoUEhZU19PRkZTRVQgKyBTWl82NE0gLSAxKQogI2RlZmluZSBNQVhfRE1BX0FERFJFU1MJCShQQUdFX09GRlNFVCArIFNaXzY0TSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10NS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXQ1LmMKaW5kZXggNTMwNWEzOS4uNWU5MmQ4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXQ1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXQ1LmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcGRhX3Bvd2VyLmg+CiAjaW5jbHVkZSA8bGludXgvcHdtX2JhY2tsaWdodC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KQEAgLTM5Niw2ICszOTcsMTEgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBwYWxtdDVfcmVzZXJ2ZSh2b2lkKQoreworCW1lbWJsb2NrX3Jlc2VydmUoMHhhMDIwMDAwMCwgMHgxMDAwKTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IHBhbG10NV9pbml0KHZvaWQpCiB7CiAJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUocGFsbXQ1X3Bpbl9jb25maWcpKTsKQEAgLTQyMSw2ICs0MjcsNyBAQAogCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsCiAJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5yZXNlcnZlCT0gcGFsbXQ1X3Jlc2VydmUsCiAJLmluaXRfaXJxCT0gcHhhMjd4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmcHhhX3RpbWVyLAogCS5pbml0X21hY2hpbmUJPSBwYWxtdDVfaW5pdApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRyZW8uYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10cmVvLmMKaW5kZXggZDhiNDQ2OS4uM2QwYzljYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRyZW8uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdHJlby5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3BkYV9wb3dlci5oPgogI2luY2x1ZGUgPGxpbnV4L3B3bV9iYWNrbGlnaHQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CkBAIC02MzMsNiArNjM0LDEyIEBACiAJdHJlb19sY2Rfc2NyZWVuLnB4YWZiX2xjZF9wb3dlciA9IHRyZW9fbGNkX3Bvd2VyOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgdHJlb19yZXNlcnZlKHZvaWQpCit7CisJbWVtYmxvY2tfcmVzZXJ2ZSgweGEwMDAwMDAwLCAweDEwMDApOworCW1lbWJsb2NrX3Jlc2VydmUoMHhhMjAwMDAwMCwgMHgxMDAwKTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IHRyZW9faW5pdCh2b2lkKQogewogCXB4YV9zZXRfZmZ1YXJ0X2luZm8oTlVMTCk7CkBAIC02NjgsNiArNjc1LDcgQEAKIAkuaW9fcGdfb2Zmc3QgICAgPSBpb19wMnYoMHg0MDAwMDAwMCksCiAJLmJvb3RfcGFyYW1zICAgID0gMHhhMDAwMDEwMCwKIAkubWFwX2lvICAgICAgICAgPSBweGFfbWFwX2lvLAorCS5yZXNlcnZlCT0gdHJlb19yZXNlcnZlLAogCS5pbml0X2lycSAgICAgICA9IHB4YTI3eF9pbml0X2lycSwKIAkudGltZXIgICAgICAgICAgPSAmcHhhX3RpbWVyLAogCS5pbml0X21hY2hpbmUgICA9IHRyZW82ODBfaW5pdCwKQEAgLTY5MSw2ICs2OTksNyBAQAogCS5pb19wZ19vZmZzdCAgICA9IGlvX3AydigweDQwMDAwMDAwKSwKIAkuYm9vdF9wYXJhbXMgICAgPSAweGEwMDAwMTAwLAogCS5tYXBfaW8gICAgICAgICA9IHB4YV9tYXBfaW8sCisJLnJlc2VydmUJPSB0cmVvX3Jlc2VydmUsCiAJLmluaXRfaXJxICAgICAgID0gcHhhMjd4X2luaXRfaXJxLAogCS50aW1lciAgICAgICAgICA9ICZweGFfdGltZXIsCiAgICAgICAgLmluaXRfbWFjaGluZSAgID0gY2VudHJvX2luaXQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCmluZGV4IGY0YWJkYWEuLmJjMjc1OGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCkBAIC00NjMsNyArNDYzLDYgQEAKIAlzaGFycHNsX3NhdmVfcGFyYW0oKTsKIAltaS0+bnJfYmFua3M9MTsKIAltaS0+YmFua1swXS5zdGFydCA9IDB4YTAwMDAwMDA7Ci0JbWktPmJhbmtbMF0ubm9kZSA9IDA7CiAJbWktPmJhbmtbMF0uc2l6ZSA9ICgzMioxMDI0KjEwMjQpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jCmluZGV4IDBhZjM2MTcuLmMwNTlkYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jCkBAIC00MSwxMCArNDEsMTAgQEAKIEVYUE9SVF9TWU1CT0wocHhhMjd4X2NsZWFyX290Z3BoKTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYWM5N19yZXNldF9jb25maWdbXSA9IHsKLQlHUElPOTVfQUM5N19uUkVTRVQsCi0JR1BJTzk1X0dQSU8sCi0JR1BJTzExM19BQzk3X25SRVNFVCwKIAlHUElPMTEzX0dQSU8sCisJR1BJTzExM19BQzk3X25SRVNFVCwKKwlHUElPOTVfR1BJTywKKwlHUElPOTVfQUM5N19uUkVTRVQsCiB9OwogCiB2b2lkIHB4YTI3eF9hc3NlcnRfYWM5N3Jlc2V0KGludCByZXNldF9ncGlvLCBpbnQgb24pCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwppbmRleCBjMTA0OGEzLi41MTc1NmM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKQEAgLTg0Nyw3ICs4NDcsNiBAQAogCXNoYXJwc2xfc2F2ZV9wYXJhbSgpOwogCW1pLT5ucl9iYW5rcyA9IDE7CiAJbWktPmJhbmtbMF0uc3RhcnQgPSAweGEwMDAwMDAwOwotCW1pLT5iYW5rWzBdLm5vZGUgPSAwOwogCW1pLT5iYW5rWzBdLnNpemUgPSAoNjQqMTAyNCoxMDI0KTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCmluZGV4IDc1MTJiODIuLjgzY2MzYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKQEAgLTk0OCw3ICs5NDgsNiBAQAogCXNoYXJwc2xfc2F2ZV9wYXJhbSgpOwogCW1pLT5ucl9iYW5rcz0xOwogCW1pLT5iYW5rWzBdLnN0YXJ0ID0gMHhhMDAwMDAwMDsKLQltaS0+YmFua1swXS5ub2RlID0gMDsKIAltaS0+YmFua1swXS5zaXplID0gKDY0KjEwMjQqMTAyNCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMKaW5kZXggNTk1YmUxOS4uMmZhMzhkZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMKQEAgLTYxLDEyICs2MSwxMSBAQAogLyoKICAqIEFkanVzdCB0aGUgem9uZXMgaWYgdGhlcmUgYXJlIHJlc3RyaWN0aW9ucyBmb3IgRE1BIGFjY2Vzcy4KICAqLwotdm9pZCBfX2luaXQgcmVhbHZpZXdfYWRqdXN0X3pvbmVzKGludCBub2RlLCB1bnNpZ25lZCBsb25nICpzaXplLAotCQkJCSAgdW5zaWduZWQgbG9uZyAqaG9sZSkKK3ZvaWQgX19pbml0IHJlYWx2aWV3X2FkanVzdF96b25lcyh1bnNpZ25lZCBsb25nICpzaXplLCB1bnNpZ25lZCBsb25nICpob2xlKQogewogCXVuc2lnbmVkIGxvbmcgZG1hX3NpemUgPSBTWl8yNTZNID4+IFBBR0VfU0hJRlQ7CiAKLQlpZiAoIW1hY2hpbmVfaXNfcmVhbHZpZXdfcGJ4KCkgfHwgbm9kZSB8fCAoc2l6ZVswXSA8PSBkbWFfc2l6ZSkpCisJaWYgKCFtYWNoaW5lX2lzX3JlYWx2aWV3X3BieCgpIHx8IHNpemVbMF0gPD0gZG1hX3NpemUpCiAJCXJldHVybjsKIAogCXNpemVbWk9ORV9OT1JNQUxdID0gc2l6ZVswXSAtIGRtYV9zaXplOwpAQCAtMjMyLDEyICsyMzEsMjcgQEAKIAlzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgYW1iYV9kZXZpY2UsIGRldik7CiAJdTMyIG1hc2s7CiAKKwlpZiAobWFjaGluZV9pc19yZWFsdmlld19wYjExNzYoKSkgeworCQlzdGF0aWMgYm9vbCBpbnNlcnRlZCA9IGZhbHNlOworCisJCS8qCisJCSAqIFRoZSBQQjExNzYgZG9lcyBub3QgaGF2ZSB0aGUgc3RhdHVzIHJlZ2lzdGVyLAorCQkgKiBhc3N1bWUgaXQgaXMgaW5zZXJ0ZWQgYXQgc3RhcnR1cCwgdGhlbiBpbnZlcnQKKwkJICogZm9yIGVhY2ggY2FsbCBzbyBjYXJkIGluc2VydGlvbi9yZW1vdmFsIHdpbGwKKwkJICogYmUgZGV0ZWN0ZWQgYW55d2F5LiBUaGlzIHdpbGwgbm90IGJlIGNhbGxlZCBpZgorCQkgKiBHUElPIG9uIFBMMDYxIGlzIGFjdGl2ZSwgd2hpY2ggaXMgdGhlIHByb3BlcgorCQkgKiB3YXkgdG8gZG8gdGhpcyBvbiB0aGUgUEIxMTc2LgorCQkgKi8KKwkJaW5zZXJ0ZWQgPSAhaW5zZXJ0ZWQ7CisJCXJldHVybiBpbnNlcnRlZCA/IDAgOiAxOworCX0KKwogCWlmIChhZGV2LT5yZXMuc3RhcnQgPT0gUkVBTFZJRVdfTU1DSTBfQkFTRSkKIAkJbWFzayA9IDE7CiAJZWxzZQogCQltYXNrID0gMjsKIAotCXJldHVybiAhKHJlYWRsKFJFQUxWSUVXX1NZU01DSSkgJiBtYXNrKTsKKwlyZXR1cm4gcmVhZGwoUkVBTFZJRVdfU1lTTUNJKSAmIG1hc2s7CiB9CiAKIHN0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgcmVhbHZpZXdfbW1jMF9wbGF0X2RhdGEgPSB7CkBAIC0zMDAsOCArMzE0LDEzIEBACiAJLnJhdGUJPSAyNDAwMDAwMCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrIGR1bW15X2FwYl9wY2xrOworCiBzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdID0gewotCXsJLyogVUFSVDAgKi8KKwl7CS8qIEJ1cyBjbG9jayAqLworCQkuY29uX2lkCQk9ICJhcGJfcGNsayIsCisJCS5jbGsJCT0gJmR1bW15X2FwYl9wY2xrLAorCX0sIHsJLyogVUFSVDAgKi8KIAkJLmRldl9pZAkJPSAiZGV2OnVhcnQwIiwKIAkJLmNsawkJPSAmcmVmMjRfY2xrLAogCX0sIHsJLyogVUFSVDEgKi8KQEAgLTMxMyw2ICszMzIsMTIgQEAKIAl9LCB7CS8qIFVBUlQzICovCiAJCS5kZXZfaWQJCT0gImZwZ2E6dWFydDMiLAogCQkuY2xrCQk9ICZyZWYyNF9jbGssCisJfSwgewkvKiBVQVJUMyBpcyBvbiB0aGUgZGV2IGNoaXAgaW4gUEIxMTc2ICovCisJCS5kZXZfaWQJCT0gImRldjp1YXJ0MyIsCisJCS5jbGsJCT0gJnJlZjI0X2NsaywKKwl9LCB7CS8qIFVBUlQ0IG9ubHkgZXhpc3RzIGluIFBCMTE3NiAqLworCQkuZGV2X2lkCQk9ICJmcGdhOnVhcnQ0IiwKKwkJLmNsawkJPSAmcmVmMjRfY2xrLAogCX0sIHsJLyogS01JMCAqLwogCQkuZGV2X2lkCQk9ICJmcGdhOmttaTAiLAogCQkuY2xrCQk9ICZyZWYyNF9jbGssCkBAIC0zMjIsMTIgKzM0NywxNSBAQAogCX0sIHsJLyogTU1DMCAqLwogCQkuZGV2X2lkCQk9ICJmcGdhOm1tYzAiLAogCQkuY2xrCQk9ICZyZWYyNF9jbGssCi0JfSwgewkvKiBFQjpDTENEICovCisJfSwgewkvKiBDTENEIGlzIGluIHRoZSBQQjExNzYgYW5kIEVCIERldkNoaXAgKi8KIAkJLmRldl9pZAkJPSAiZGV2OmNsY2QiLAogCQkuY2xrCQk9ICZvc2N2Y29fY2xrLAogCX0sIHsJLyogUEI6Q0xDRCAqLwogCQkuZGV2X2lkCQk9ICJpc3NwOmNsY2QiLAogCQkuY2xrCQk9ICZvc2N2Y29fY2xrLAorCX0sIHsJLyogU1NQICovCisJCS5kZXZfaWQJCT0gImRldjpzc3AwIiwKKwkJLmNsawkJPSAmcmVmMjRfY2xrLAogCX0KIH07CiAKQEAgLTM0Miw3ICszNzAsNyBAQAogCiAJcmV0dXJuIDA7CiB9Ci1hcmNoX2luaXRjYWxsKGNsa19pbml0KTsKK2NvcmVfaW5pdGNhbGwoY2xrX2luaXQpOwogCiAvKgogICogQ0xDRCBzdXBwb3J0LgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGIxMTc2LmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYjExNzYuaAppbmRleCAyZjVjY2IyLi4wMDJhYjVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYjExNzYuaAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYjExNzYuaApAQCAtMjYsNiArMjYsNyBAQAogLyoKICAqIFBlcmlwaGVyYWwgYWRkcmVzc2VzCiAgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEIxMTc2X1VBUlQ0X0JBU0UJCTB4MTAwMDkwMDAgLyogVUFSVCA0ICovCiAjZGVmaW5lIFJFQUxWSUVXX1BCMTE3Nl9TQ1RMX0JBU0UJCTB4MTAxMDAwMDAgLyogU3lzdGVtIGNvbnRyb2xsZXIgKi8KICNkZWZpbmUgUkVBTFZJRVdfUEIxMTc2X1NNQ19CQVNFCQkweDEwMTExMDAwIC8qIFNNQyAqLwogI2RlZmluZSBSRUFMVklFV19QQjExNzZfRE1DX0JBU0UJCTB4MTAxMDkwMDAgLyogRE1DIGNvbmZpZ3VyYXRpb24gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2lycXMtcGIxMTc2LmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9pcnFzLXBiMTE3Ni5oCmluZGV4IDgzMDA1NWIuLjVjM2M2MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2lycXMtcGIxMTc2LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvaXJxcy1wYjExNzYuaApAQCAtNDAsNiArNDAsNyBAQAogI2RlZmluZSBJUlFfREMxMTc2X0wyQ0MJCShJUlFfREMxMTc2X0dJQ19TVEFSVCArIDEzKQogI2RlZmluZSBJUlFfREMxMTc2X1JUQwkJKElSUV9EQzExNzZfR0lDX1NUQVJUICsgMTQpCiAjZGVmaW5lIElSUV9EQzExNzZfQ0xDRAkJKElSUV9EQzExNzZfR0lDX1NUQVJUICsgMTUpCS8qIENMQ0QgY29udHJvbGxlciAqLworI2RlZmluZSBJUlFfREMxMTc2X1NTUAkJKElSUV9EQzExNzZfR0lDX1NUQVJUICsgMTcpCS8qIFNTUCBwb3J0ICovCiAjZGVmaW5lIElSUV9EQzExNzZfVUFSVDAJKElSUV9EQzExNzZfR0lDX1NUQVJUICsgMTgpCS8qIFVBUlQgMCBvbiBkZXZlbG9wbWVudCBjaGlwICovCiAjZGVmaW5lIElSUV9EQzExNzZfVUFSVDEJKElSUV9EQzExNzZfR0lDX1NUQVJUICsgMTkpCS8qIFVBUlQgMSBvbiBkZXZlbG9wbWVudCBjaGlwICovCiAjZGVmaW5lIElSUV9EQzExNzZfVUFSVDIJKElSUV9EQzExNzZfR0lDX1NUQVJUICsgMjApCS8qIFVBUlQgMiBvbiBkZXZlbG9wbWVudCBjaGlwICovCkBAIC03Myw3ICs3NCw2IEBACiAjZGVmaW5lIElSUV9QQjExNzZfUlRDCQkoSVJRX1BCMTE3Nl9HSUNfU1RBUlQgKyAyNSkJLyogUmVhbCBUaW1lIENsb2NrICovCiAKICNkZWZpbmUgSVJRX1BCMTE3Nl9HUElPMAktMQotI2RlZmluZSBJUlFfUEIxMTc2X1NTUAkJLTEKICNkZWZpbmUgSVJRX1BCMTE3Nl9TQ1RMCQktMQogCiAjZGVmaW5lIE5SX0dJQ19QQjExNzYJCTIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggMjQxN2JiYy4uNWRhZmMxNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTMwLDEwICszMCw5IEBACiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykgJiYgZGVmaW5lZChDT05GSUdfWk9ORV9ETUEpCi1leHRlcm4gdm9pZCByZWFsdmlld19hZGp1c3Rfem9uZXMoaW50IG5vZGUsIHVuc2lnbmVkIGxvbmcgKnNpemUsCi0JCQkJICB1bnNpZ25lZCBsb25nICpob2xlKTsKLSNkZWZpbmUgYXJjaF9hZGp1c3Rfem9uZXMobm9kZSwgc2l6ZSwgaG9sZSkgXAotCXJlYWx2aWV3X2FkanVzdF96b25lcyhub2RlLCBzaXplLCBob2xlKQorZXh0ZXJuIHZvaWQgcmVhbHZpZXdfYWRqdXN0X3pvbmVzKHVuc2lnbmVkIGxvbmcgKnNpemUsIHVuc2lnbmVkIGxvbmcgKmhvbGUpOworI2RlZmluZSBhcmNoX2FkanVzdF96b25lcyhzaXplLCBob2xlKSBcCisJcmVhbHZpZXdfYWRqdXN0X3pvbmVzKHNpemUsIGhvbGUpCiAKICNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQJKFBIWVNfT0ZGU0VUICsgU1pfMjU2TSAtIDEpCiAjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJKFBBR0VfT0ZGU0VUICsgU1pfMjU2TSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYwppbmRleCA0NDI1MDE4Li45OTFjMWY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDYxLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9wbDAyMi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CkBAIC0xMjksNiArMTMwLDEyIEBACiAJLmlycV9iYXNlCT0gLTEsCiB9OwogCitzdGF0aWMgc3RydWN0IHBsMDIyX3NzcF9jb250cm9sbGVyIHNzcDBfcGxhdF9kYXRhID0geworCS5idXNfaWQgPSAwLAorCS5lbmFibGVfZG1hID0gMCwKKwkubnVtX2NoaXBzZWxlY3QgPSAxLAorfTsKKwogLyoKICAqIFJlYWxWaWV3IEVCIEFNQkEgZGV2aWNlcwogICovCkBAIC0yMTMsNyArMjIwLDcgQEAKIEFNQkFfREVWSUNFKHVhcnQwLCAiZGV2OnVhcnQwIiwgRUJfVUFSVDAsIE5VTEwpOwogQU1CQV9ERVZJQ0UodWFydDEsICJkZXY6dWFydDEiLCBFQl9VQVJUMSwgTlVMTCk7CiBBTUJBX0RFVklDRSh1YXJ0MiwgImRldjp1YXJ0MiIsIEVCX1VBUlQyLCBOVUxMKTsKLUFNQkFfREVWSUNFKHNzcDAsICAiZGV2OnNzcDAiLCAgRUJfU1NQLCAgIE5VTEwpOworQU1CQV9ERVZJQ0Uoc3NwMCwgICJkZXY6c3NwMCIsICBFQl9TU1AsICAgJnNzcDBfcGxhdF9kYXRhKTsKIAogc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSAqYW1iYV9kZXZzW10gX19pbml0ZGF0YSA9IHsKIAkmZG1hY19kZXZpY2UsCkBAIC0zMjQsNiArMzMxLDI2IEBACiAJLnJlc291cmNlCQk9IHBtdV9yZXNvdXJjZXMsCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNoYXJfbGNkX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gUkVBTFZJRVdfQ0hBUl9MQ0RfQkFTRSwKKwkJLmVuZCAgID0gKFJFQUxWSUVXX0NIQVJfTENEX0JBU0UgKyBTWl80SyAtIDEpLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSVJRX0VCX0NIQVJMQ0QsCisJCS5lbmQJPSBJUlFfRUJfQ0hBUkxDRCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNoYXJfbGNkX2RldmljZSA9IHsKKwkubmFtZQkJPQkiYXJtLWNoYXJsY2QiLAorCS5pZAkJPQktMSwKKwkubnVtX3Jlc291cmNlcwk9CUFSUkFZX1NJWkUoY2hhcl9sY2RfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPQljaGFyX2xjZF9yZXNvdXJjZXMsCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgZ2ljX2luaXRfaXJxKHZvaWQpCiB7CiAJaWYgKGNvcmVfdGlsZV9lYjExbXAoKSB8fCBjb3JlX3RpbGVfYTltcCgpKSB7CkBAIC00NDIsNiArNDY5LDcgQEAKIAogCXJlYWx2aWV3X2ZsYXNoX3JlZ2lzdGVyKCZyZWFsdmlld19lYl9mbGFzaF9yZXNvdXJjZSwgMSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWFsdmlld19pMmNfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNoYXJfbGNkX2RldmljZSk7CiAJZXRoX2RldmljZV9yZWdpc3RlcigpOwogCXJlYWx2aWV3X3VzYl9yZWdpc3RlcihyZWFsdmlld19lYl9pc3AxNzYxX3Jlc291cmNlcyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMTc2LmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTE3Ni5jCmluZGV4IDA5OWExZjEuLmQyYmUxMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMTc2LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExNzYuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9wbDA2MS5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvbW1jaS5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwMjIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtMTIzLDYgKzEyNCwxMiBAQAogCS5pcnFfYmFzZQk9IC0xLAogfTsKIAorc3RhdGljIHN0cnVjdCBwbDAyMl9zc3BfY29udHJvbGxlciBzc3AwX3BsYXRfZGF0YSA9IHsKKwkuYnVzX2lkID0gMCwKKwkuZW5hYmxlX2RtYSA9IDAsCisJLm51bV9jaGlwc2VsZWN0ID0gMSwKK307CisKIC8qCiAgKiBSZWFsVmlldyBQQjExNzYgQU1CQSBkZXZpY2VzCiAgKi8KQEAgLTE0NCw4ICsxNTEsNiBAQAogI2RlZmluZSBNUE1DX0RNQQl7IDAsIDAgfQogI2RlZmluZSBQQjExNzZfQ0xDRF9JUlEJeyBJUlFfREMxMTc2X0NMQ0QsIE5PX0lSUSB9CiAjZGVmaW5lIFBCMTE3Nl9DTENEX0RNQQl7IDAsIDAgfQotI2RlZmluZSBETUFDX0lSUQl7IElSUV9QQjExNzZfRE1BQywgTk9fSVJRIH0KLSNkZWZpbmUgRE1BQ19ETUEJeyAwLCAwIH0KICNkZWZpbmUgU0NUTF9JUlEJeyBOT19JUlEsIE5PX0lSUSB9CiAjZGVmaW5lIFNDVExfRE1BCXsgMCwgMCB9CiAjZGVmaW5lIFBCMTE3Nl9XQVRDSERPR19JUlEJeyBJUlFfREMxMTc2X1dBVENIRE9HLCBOT19JUlEgfQpAQCAtMTY2LDcgKzE3MSw5IEBACiAjZGVmaW5lIFBCMTE3Nl9VQVJUMl9ETUEJeyAxMSwgMTAgfQogI2RlZmluZSBQQjExNzZfVUFSVDNfSVJRCXsgSVJRX0RDMTE3Nl9VQVJUMywgTk9fSVJRIH0KICNkZWZpbmUgUEIxMTc2X1VBUlQzX0RNQQl7IDB4ODYsIDB4ODcgfQotI2RlZmluZSBQQjExNzZfU1NQX0lSUQkJeyBJUlFfUEIxMTc2X1NTUCwgTk9fSVJRIH0KKyNkZWZpbmUgUEIxMTc2X1VBUlQ0X0lSUQl7IElSUV9QQjExNzZfVUFSVDQsIE5PX0lSUSB9CisjZGVmaW5lIFBCMTE3Nl9VQVJUNF9ETUEJeyAwLCAwIH0KKyNkZWZpbmUgUEIxMTc2X1NTUF9JUlEJCXsgSVJRX0RDMTE3Nl9TU1AsIE5PX0lSUSB9CiAjZGVmaW5lIFBCMTE3Nl9TU1BfRE1BCQl7IDksIDggfQogCiAvKiBGUEdBIFByaW1lY2VsbHMgKi8KQEAgLTE3NCw3ICsxODEsNyBAQAogQU1CQV9ERVZJQ0UobW1jMCwJImZwZ2E6bW1jMCIsCU1NQ0kwLAkJJnJlYWx2aWV3X21tYzBfcGxhdF9kYXRhKTsKIEFNQkFfREVWSUNFKGttaTAsCSJmcGdhOmttaTAiLAlLTUkwLAkJTlVMTCk7CiBBTUJBX0RFVklDRShrbWkxLAkiZnBnYTprbWkxIiwJS01JMSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDMsCSJmcGdhOnVhcnQzIiwJUEIxMTc2X1VBUlQzLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQ0LAkiZnBnYTp1YXJ0NCIsCVBCMTE3Nl9VQVJUNCwJTlVMTCk7CiAKIC8qIERldkNoaXAgUHJpbWVjZWxscyAqLwogQU1CQV9ERVZJQ0Uoc21jLAkiZGV2OnNtYyIsCVBCMTE3Nl9TTUMsCU5VTEwpOwpAQCAtMTg4LDE4ICsxOTUsMTYgQEAKIEFNQkFfREVWSUNFKHVhcnQwLAkiZGV2OnVhcnQwIiwJUEIxMTc2X1VBUlQwLAlOVUxMKTsKIEFNQkFfREVWSUNFKHVhcnQxLAkiZGV2OnVhcnQxIiwJUEIxMTc2X1VBUlQxLAlOVUxMKTsKIEFNQkFfREVWSUNFKHVhcnQyLAkiZGV2OnVhcnQyIiwJUEIxMTc2X1VBUlQyLAlOVUxMKTsKLUFNQkFfREVWSUNFKHNzcDAsCSJkZXY6c3NwMCIsCVBCMTE3Nl9TU1AsCU5VTEwpOwotCi0vKiBQcmltZWNlbGxzIG9uIHRoZSBORUMgSVNTUCBjaGlwICovCi1BTUJBX0RFVklDRShjbGNkLAkiaXNzcDpjbGNkIiwJUEIxMTc2X0NMQ0QsCSZjbGNkX3BsYXRfZGF0YSk7Ci0vL0FNQkFfREVWSUNFKGRtYWMsCSJpc3NwOmRtYWMiLAlQQjExNzZfRE1BQywJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MywJImRldjp1YXJ0MyIsCVBCMTE3Nl9VQVJUMywJTlVMTCk7CitBTUJBX0RFVklDRShzc3AwLAkiZGV2OnNzcDAiLAlQQjExNzZfU1NQLAkmc3NwMF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoY2xjZCwJImRldjpjbGNkIiwJUEIxMTc2X0NMQ0QsCSZjbGNkX3BsYXRfZGF0YSk7CiAKIHN0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFtYmFfZGV2c1tdIF9faW5pdGRhdGEgPSB7Ci0vLwkmZG1hY19kZXZpY2UsCiAJJnVhcnQwX2RldmljZSwKIAkmdWFydDFfZGV2aWNlLAogCSZ1YXJ0Ml9kZXZpY2UsCiAJJnVhcnQzX2RldmljZSwKKwkmdWFydDRfZGV2aWNlLAogCSZzbWNfZGV2aWNlLAogCSZjbGNkX2RldmljZSwKIAkmc2N0bF9kZXZpY2UsCkBAIC0yNzYsNiArMjgxLDI2IEBACiAJLnJlc291cmNlCQk9ICZwbXVfcmVzb3VyY2UsCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNoYXJfbGNkX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gUkVBTFZJRVdfQ0hBUl9MQ0RfQkFTRSwKKwkJLmVuZCAgID0gKFJFQUxWSUVXX0NIQVJfTENEX0JBU0UgKyBTWl80SyAtIDEpLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSVJRX1BCMTE3Nl9DSEFSTENELAorCQkuZW5kCT0gSVJRX1BCMTE3Nl9DSEFSTENELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY2hhcl9sY2RfZGV2aWNlID0geworCS5uYW1lCQk9CSJhcm0tY2hhcmxjZCIsCisJLmlkCQk9CS0xLAorCS5udW1fcmVzb3VyY2VzCT0JQVJSQVlfU0laRShjaGFyX2xjZF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9CWNoYXJfbGNkX3Jlc291cmNlcywKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBnaWNfaW5pdF9pcnEodm9pZCkKIHsKIAkvKiBBUk0xMTc2IERldkNoaXAgR0lDLCBwcmltYXJ5ICovCkBAIC0zMzgsNiArMzYzLDcgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJlYWx2aWV3X2kyY19kZXZpY2UpOwogCXJlYWx2aWV3X3VzYl9yZWdpc3RlcihyZWFsdmlld19wYjExNzZfaXNwMTc2MV9yZXNvdXJjZXMpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcG11X2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZjaGFyX2xjZF9kZXZpY2UpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYW1iYV9kZXZzKTsgaSsrKSB7CiAJCXN0cnVjdCBhbWJhX2RldmljZSAqZCA9IGFtYmFfZGV2c1tpXTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTFtcC5jCmluZGV4IDBlMDdhNWMuLmQ1OTFiYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExbXAuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9wbDA2MS5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvbW1jaS5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwMjIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtMTI0LDYgKzEyNSwxMiBAQAogCS5pcnFfYmFzZQk9IC0xLAogfTsKIAorc3RhdGljIHN0cnVjdCBwbDAyMl9zc3BfY29udHJvbGxlciBzc3AwX3BsYXRfZGF0YSA9IHsKKwkuYnVzX2lkID0gMCwKKwkuZW5hYmxlX2RtYSA9IDAsCisJLm51bV9jaGlwc2VsZWN0ID0gMSwKK307CisKIC8qCiAgKiBSZWFsVmlldyBQQjExTVBDb3JlIEFNQkEgZGV2aWNlcwogICovCkBAIC0xOTAsNyArMTk3LDcgQEAKIEFNQkFfREVWSUNFKHVhcnQwLAkiZGV2OnVhcnQwIiwJUEIxMU1QX1VBUlQwLAlOVUxMKTsKIEFNQkFfREVWSUNFKHVhcnQxLAkiZGV2OnVhcnQxIiwJUEIxMU1QX1VBUlQxLAlOVUxMKTsKIEFNQkFfREVWSUNFKHVhcnQyLAkiZGV2OnVhcnQyIiwJUEIxMU1QX1VBUlQyLAlOVUxMKTsKLUFNQkFfREVWSUNFKHNzcDAsCSJkZXY6c3NwMCIsCVBCMTFNUF9TU1AsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc3NwMCwJImRldjpzc3AwIiwJUEIxMU1QX1NTUCwJJnNzcDBfcGxhdF9kYXRhKTsKIAogLyogUHJpbWVjZWxscyBvbiB0aGUgTkVDIElTU1AgY2hpcCAqLwogQU1CQV9ERVZJQ0UoY2xjZCwJImlzc3A6Y2xjZCIsCVBCMTFNUF9DTENELAkmY2xjZF9wbGF0X2RhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYmE4LmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiYTguYwppbmRleCBhYzJmMDZmLi42YzM3NjIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiYTguYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiYTguYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9wbDA2MS5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvbW1jaS5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwMjIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtMTE0LDYgKzExNSwxMiBAQAogCS5pcnFfYmFzZQk9IC0xLAogfTsKIAorc3RhdGljIHN0cnVjdCBwbDAyMl9zc3BfY29udHJvbGxlciBzc3AwX3BsYXRfZGF0YSA9IHsKKwkuYnVzX2lkID0gMCwKKwkuZW5hYmxlX2RtYSA9IDAsCisJLm51bV9jaGlwc2VsZWN0ID0gMSwKK307CisKIC8qCiAgKiBSZWFsVmlldyBQQkE4Q29yZSBBTUJBIGRldmljZXMKICAqLwpAQCAtMTgwLDcgKzE4Nyw3IEBACiBBTUJBX0RFVklDRSh1YXJ0MCwJImRldjp1YXJ0MCIsCVBCQThfVUFSVDAsCU5VTEwpOwogQU1CQV9ERVZJQ0UodWFydDEsCSJkZXY6dWFydDEiLAlQQkE4X1VBUlQxLAlOVUxMKTsKIEFNQkFfREVWSUNFKHVhcnQyLAkiZGV2OnVhcnQyIiwJUEJBOF9VQVJUMiwJTlVMTCk7Ci1BTUJBX0RFVklDRShzc3AwLAkiZGV2OnNzcDAiLAlQQkE4X1NTUCwJTlVMTCk7CitBTUJBX0RFVklDRShzc3AwLAkiZGV2OnNzcDAiLAlQQkE4X1NTUCwJJnNzcDBfcGxhdF9kYXRhKTsKIAogLyogUHJpbWVjZWxscyBvbiB0aGUgTkVDIElTU1AgY2hpcCAqLwogQU1CQV9ERVZJQ0UoY2xjZCwJImlzc3A6Y2xjZCIsCVBCQThfQ0xDRCwJJmNsY2RfcGxhdF9kYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJ4LmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BieC5jCmluZGV4IDA4ZmQ2ODMuLjk0MjhlZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJ4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYnguYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9wbDA2MS5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvbW1jaS5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwMjIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtMTM2LDYgKzEzNywxMiBAQAogCS5pcnFfYmFzZQk9IC0xLAogfTsKIAorc3RhdGljIHN0cnVjdCBwbDAyMl9zc3BfY29udHJvbGxlciBzc3AwX3BsYXRfZGF0YSA9IHsKKwkuYnVzX2lkID0gMCwKKwkuZW5hYmxlX2RtYSA9IDAsCisJLm51bV9jaGlwc2VsZWN0ID0gMSwKK307CisKIC8qCiAgKiBSZWFsVmlldyBQQlhDb3JlIEFNQkEgZGV2aWNlcwogICovCkBAIC0yMDIsNyArMjA5LDcgQEAKIEFNQkFfREVWSUNFKHVhcnQwLAkiZGV2OnVhcnQwIiwJUEJYX1VBUlQwLAlOVUxMKTsKIEFNQkFfREVWSUNFKHVhcnQxLAkiZGV2OnVhcnQxIiwJUEJYX1VBUlQxLAlOVUxMKTsKIEFNQkFfREVWSUNFKHVhcnQyLAkiZGV2OnVhcnQyIiwJUEJYX1VBUlQyLAlOVUxMKTsKLUFNQkFfREVWSUNFKHNzcDAsCSJkZXY6c3NwMCIsCVBCWF9TU1AsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc3NwMCwJImRldjpzc3AwIiwJUEJYX1NTUCwJJnNzcDBfcGxhdF9kYXRhKTsKIAogLyogUHJpbWVjZWxscyBvbiB0aGUgTkVDIElTU1AgY2hpcCAqLwogQU1CQV9ERVZJQ0UoY2xjZCwJImlzc3A6Y2xjZCIsCVBCWF9DTENELAkmY2xjZF9wbGF0X2RhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMKaW5kZXggNzc5YjQ1Yi4uM2JhM2JhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KQEAgLTMwNCw2ICszMDUsMTMgQEAKIAlzM2NfcG1faW5pdCgpOwogfQogCisvKiBIMTk0MCBhbmQgUlgzNzE1IG5lZWQgdG8gcmVzZXJ2ZSB0aGlzIGZvciBzdXNwZW5kICovCitzdGF0aWMgdm9pZCBfX2luaXQgaDE5NDBfcmVzZXJ2ZSh2b2lkKQoreworCW1lbWJsb2NrX3Jlc2VydmUoMHgzMDAwMzAwMCwgMHgxMDAwKTsKKwltZW1ibG9ja19yZXNlcnZlKDB4MzAwODEwMDAsIDB4MTAwMCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBoMTk0MF9pbml0X2lycSh2b2lkKQogewogCXMzYzI0eHhfaW5pdF9pcnEoKTsKQEAgLTM0Niw2ICszNTQsNyBAQAogCS5pb19wZ19vZmZzdAk9ICgoKHUzMilTM0MyNFhYX1ZBX1VBUlQpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBTM0MyNDEwX1NEUkFNX1BBICsgMHgxMDAsCiAJLm1hcF9pbwkJPSBoMTk0MF9tYXBfaW8sCisJLnJlc2VydmUJPSBoMTk0MF9yZXNlcnZlLAogCS5pbml0X2lycQk9IGgxOTQwX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBoMTk0MF9pbml0LAogCS50aW1lcgkJPSAmczNjMjR4eF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLXNtZGsyNDEzLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvbWFjaC1zbWRrMjQxMy5jCmluZGV4IGJhOTNhMzUuLjA1NGM5ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLXNtZGsyNDEzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtc21kazI0MTMuYwpAQCAtMTE5LDcgKzExOSw2IEBACiAJCW1pLT5ucl9iYW5rcz0xOwogCQltaS0+YmFua1swXS5zdGFydCA9IDB4MzAwMDAwMDA7CiAJCW1pLT5iYW5rWzBdLnNpemUgPSBTWl82NE07Ci0JCW1pLT5iYW5rWzBdLm5vZGUgPSAwOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtdnN0bXMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLXZzdG1zLmMKaW5kZXggM2NhOTI2NS4uZjI5MWFjMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtdnN0bXMuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvbWFjaC12c3Rtcy5jCkBAIC0xMzcsNyArMTM3LDYgQEAKIAkJbWktPm5yX2JhbmtzPTE7CiAJCW1pLT5iYW5rWzBdLnN0YXJ0ID0gMHgzMDAwMDAwMDsKIAkJbWktPmJhbmtbMF0uc2l6ZSA9IFNaXzY0TTsKLQkJbWktPmJhbmtbMF0ubm9kZSA9IDA7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1yeDE5NTAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXJ4MTk1MC5jCmluZGV4IDg2MDNiNTcuLjE0MmQxZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXJ4MTk1MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXJ4MTk1MC5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNTcwLDEyICs1NzEsMjAgQEAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhyeDE5NTBfZGV2aWNlcywgQVJSQVlfU0laRShyeDE5NTBfZGV2aWNlcykpOwogfQogCisvKiBIMTk0MCBhbmQgUlgzNzE1IG5lZWQgdG8gcmVzZXJ2ZSB0aGlzIGZvciBzdXNwZW5kICovCitzdGF0aWMgdm9pZCBfX2luaXQgcngxOTUwX3Jlc2VydmUodm9pZCkKK3sKKwltZW1ibG9ja19yZXNlcnZlKDB4MzAwMDMwMDAsIDB4MTAwMCk7CisJbWVtYmxvY2tfcmVzZXJ2ZSgweDMwMDgxMDAwLCAweDEwMDApOworfQorCiBNQUNISU5FX1NUQVJUKFJYMTk1MCwgIkhQIGlQQVEgUlgxOTUwIikKICAgICAvKiBNYWludGFpbmVyczogVmFzaWx5IEtob3J1emhpY2sgKi8KICAgICAucGh5c19pbyA9IFMzQzI0MTBfUEFfVUFSVCwKIAkuaW9fcGdfb2Zmc3QgPSAoKCh1MzIpIFMzQzI0WFhfVkFfVUFSVCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcyA9IFMzQzI0MTBfU0RSQU1fUEEgKyAweDEwMCwKIAkubWFwX2lvID0gcngxOTUwX21hcF9pbywKKwkucmVzZXJ2ZQk9IHJ4MTk1MF9yZXNlcnZlLAogCS5pbml0X2lycSA9IHMzYzI0eHhfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZSA9IHJ4MTk1MF9pbml0X21hY2hpbmUsCiAJLnRpbWVyID0gJnMzYzI0eHhfdGltZXIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1yeDM3MTUuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXJ4MzcxNS5jCmluZGV4IGQyOTQ2ZGUuLjZiYjQ0ZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXJ4MzcxNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXJ4MzcxNS5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KQEAgLTE5MSw2ICsxOTIsMTMgQEAKIAlzM2MyNHh4X2luaXRfdWFydHMocngzNzE1X3VhcnRjZmdzLCBBUlJBWV9TSVpFKHJ4MzcxNV91YXJ0Y2ZncykpOwogfQogCisvKiBIMTk0MCBhbmQgUlgzNzE1IG5lZWQgdG8gcmVzZXJ2ZSB0aGlzIGZvciBzdXNwZW5kICovCitzdGF0aWMgdm9pZCBfX2luaXQgcngzNzE1X3Jlc2VydmUodm9pZCkKK3sKKwltZW1ibG9ja19yZXNlcnZlKDB4MzAwMDMwMDAsIDB4MTAwMCk7CisJbWVtYmxvY2tfcmVzZXJ2ZSgweDMwMDgxMDAwLCAweDEwMDApOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgcngzNzE1X2luaXRfaXJxKHZvaWQpCiB7CiAJczNjMjR4eF9pbml0X2lycSgpOwpAQCAtMjE0LDYgKzIyMiw3IEBACiAJLmlvX3BnX29mZnN0CT0gKCgodTMyKVMzQzI0WFhfVkFfVUFSVCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IFMzQzI0MTBfU0RSQU1fUEEgKyAweDEwMCwKIAkubWFwX2lvCQk9IHJ4MzcxNV9tYXBfaW8sCisJLnJlc2VydmUJPSByeDM3MTVfcmVzZXJ2ZSwKIAkuaW5pdF9pcnEJPSByeDM3MTVfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IHJ4MzcxNV9pbml0X21hY2hpbmUsCiAJLnRpbWVyCQk9ICZzM2MyNHh4X3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDIvY2xvY2suYwppbmRleCAzYWFkYmY0Li4wODdlNTdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cDY0NDIvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDIvY2xvY2suYwpAQCAtMjk0LDcgKzI5NCw3IEBACiAJbXBsbCA9IHM1cF9nZXRfcGxsNDV4eCh4dGFsLCBfX3Jhd19yZWFkbChTNVBfTVBMTF9DT04pLCBwbGxfNDUwMik7CiAJZXBsbCA9IHM1cF9nZXRfcGxsNDV4eCh4dGFsLCBfX3Jhd19yZWFkbChTNVBfRVBMTF9DT04pLCBwbGxfNDUwMCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJTNVA2NDQwOiBQTEwgc2V0dGluZ3MsIEE9JWxkLCBNPSVsZCwgRT0lbGQiLAorCXByaW50ayhLRVJOX0lORk8gIlM1UDY0NDI6IFBMTCBzZXR0aW5ncywgQT0lbGQsIE09JWxkLCBFPSVsZCIsCiAJCQlhcGxsLCBtcGxsLCBlcGxsKTsKIAogCWNsa19mb3V0X2FwbGwucmF0ZSA9IGFwbGw7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9jbG9jay5jCmluZGV4IDE1NGJjYTQuLmFmOTFmZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9jbG9jay5jCkBAIC0xODMsNiArMTgzLDExIEBACiAJcmV0dXJuIHM1cF9nYXRlY3RybChTNVBfQ0xLX1NSQ19NQVNLMCwgY2xrLCBlbmFibGUpOwogfQogCitzdGF0aWMgaW50IHM1cHYyMTBfY2xrX21hc2sxX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQoreworCXJldHVybiBzNXBfZ2F0ZWN0cmwoUzVQX0NMS19TUkNfTUFTSzEsIGNsaywgZW5hYmxlKTsKK30KKwogc3RhdGljIHN0cnVjdCBjbGsgY2xrX3NjbGtfaGRtaTI3bSA9IHsKIAkubmFtZQkJPSAic2Nsa19oZG1pMjdtIiwKIAkuaWQJCT0gLTEsCkBAIC00MDYsMTQgKzQxMSwxNCBAQAogCQkuaWQJCT0gMCwKIAkJLnBhcmVudAkJPSAmY2xrX3AsCiAJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfaXAzX2N0cmwsCi0JCS5jdHJsYml0CT0gKDE8PDQpLAorCQkuY3RybGJpdAk9ICgxIDw8IDUpLAogCX0sIHsKIAkJLm5hbWUJCT0gImkyc192MzIiLAogCQkuaWQJCT0gMSwKIAkJLnBhcmVudAkJPSAmY2xrX3AsCiAJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfaXAzX2N0cmwsCi0JCS5jdHJsYml0CT0gKDE8PDQpLAotCX0KKwkJLmN0cmxiaXQJPSAoMSA8PCA2KSwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgaW5pdF9jbG9ja3NbXSA9IHsKQEAgLTQyOSwyNSArNDM0LDI1IEBACiAJCS5pZAkJPSAwLAogCQkucGFyZW50CQk9ICZjbGtfcGNsa19wc3lzLmNsaywKIAkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19pcDNfY3RybCwKLQkJLmN0cmxiaXQJPSAoMTw8NyksCisJCS5jdHJsYml0CT0gKDEgPDwgMTcpLAogCX0sIHsKIAkJLm5hbWUJCT0gInVhcnQiLAogCQkuaWQJCT0gMSwKIAkJLnBhcmVudAkJPSAmY2xrX3BjbGtfcHN5cy5jbGssCiAJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfaXAzX2N0cmwsCi0JCS5jdHJsYml0CT0gKDE8PDgpLAorCQkuY3RybGJpdAk9ICgxIDw8IDE4KSwKIAl9LCB7CiAJCS5uYW1lCQk9ICJ1YXJ0IiwKIAkJLmlkCQk9IDIsCiAJCS5wYXJlbnQJCT0gJmNsa19wY2xrX3BzeXMuY2xrLAogCQkuZW5hYmxlCQk9IHM1cHYyMTBfY2xrX2lwM19jdHJsLAotCQkuY3RybGJpdAk9ICgxPDw5KSwKKwkJLmN0cmxiaXQJPSAoMSA8PCAxOSksCiAJfSwgewogCQkubmFtZQkJPSAidWFydCIsCiAJCS5pZAkJPSAzLAogCQkucGFyZW50CQk9ICZjbGtfcGNsa19wc3lzLmNsaywKIAkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19pcDNfY3RybCwKLQkJLmN0cmxiaXQJPSAoMTw8MTApLAorCQkuY3RybGJpdAk9ICgxIDw8IDIwKSwKIAl9LAogfTsKIApAQCAtNDk3LDggKzUwMiw4IEBACiAJLmNsawkJPSB7CiAJCS5uYW1lCQk9ICJzY2xrX2RhYyIsCiAJCS5pZAkJPSAtMSwKLQkJLmN0cmxiaXQJPSAoMSA8PCAxMCksCi0JCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfaXAxX2N0cmwsCisJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfbWFzazBfY3RybCwKKwkJLmN0cmxiaXQJPSAoMSA8PCAyKSwKIAl9LAogCS5zb3VyY2VzCT0gJmNsa3NldF9zY2xrX2RhYywKIAkucmVnX3NyYwk9IHsgLnJlZyA9IFM1UF9DTEtfU1JDMSwgLnNoaWZ0ID0gOCwgLnNpemUgPSAxIH0sCkBAIC01MjcsOCArNTMyLDggQEAKIAkuY2xrCQk9IHsKIAkJLm5hbWUJCT0gInNjbGtfaGRtaSIsCiAJCS5pZAkJPSAtMSwKLQkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19pcDFfY3RybCwKLQkJLmN0cmxiaXQJPSAoMSA8PCAxMSksCisJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfbWFzazBfY3RybCwKKwkJLmN0cmxiaXQJPSAoMSA8PCAwKSwKIAl9LAogCS5zb3VyY2VzCT0gJmNsa3NldF9zY2xrX2hkbWksCiAJLnJlZ19zcmMJPSB7IC5yZWcgPSBTNVBfQ0xLX1NSQzEsIC5zaGlmdCA9IDAsIC5zaXplID0gMSB9LApAQCAtNTY1LDggKzU3MCw4IEBACiAJLmNsawkJPSB7CiAJCS5uYW1lCQk9ICJzY2xrX2F1ZGlvIiwKIAkJLmlkCQk9IDAsCi0JCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfaXAzX2N0cmwsCi0JCS5jdHJsYml0CT0gKDEgPDwgNCksCisJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfbWFzazBfY3RybCwKKwkJLmN0cmxiaXQJPSAoMSA8PCAyNCksCiAJfSwKIAkuc291cmNlcyA9ICZjbGtzZXRfc2Nsa19hdWRpbzAsCiAJLnJlZ19zcmMgPSB7IC5yZWcgPSBTNVBfQ0xLX1NSQzYsIC5zaGlmdCA9IDAsIC5zaXplID0gNCB9LApAQCAtNTk0LDggKzU5OSw4IEBACiAJLmNsawkJPSB7CiAJCS5uYW1lCQk9ICJzY2xrX2F1ZGlvIiwKIAkJLmlkCQk9IDEsCi0JCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfaXAzX2N0cmwsCi0JCS5jdHJsYml0CT0gKDEgPDwgNSksCisJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfbWFzazBfY3RybCwKKwkJLmN0cmxiaXQJPSAoMSA8PCAyNSksCiAJfSwKIAkuc291cmNlcyA9ICZjbGtzZXRfc2Nsa19hdWRpbzEsCiAJLnJlZ19zcmMgPSB7IC5yZWcgPSBTNVBfQ0xLX1NSQzYsIC5zaGlmdCA9IDQsIC5zaXplID0gNCB9LApAQCAtNjIzLDggKzYyOCw4IEBACiAJLmNsawkJPSB7CiAJCS5uYW1lCQk9ICJzY2xrX2F1ZGlvIiwKIAkJLmlkCQk9IDIsCi0JCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfaXAzX2N0cmwsCi0JCS5jdHJsYml0CT0gKDEgPDwgNiksCisJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfbWFzazBfY3RybCwKKwkJLmN0cmxiaXQJPSAoMSA8PCAyNiksCiAJfSwKIAkuc291cmNlcyA9ICZjbGtzZXRfc2Nsa19hdWRpbzIsCiAJLnJlZ19zcmMgPSB7IC5yZWcgPSBTNVBfQ0xLX1NSQzYsIC5zaGlmdCA9IDgsIC5zaXplID0gNCB9LApAQCAtNjgwLDggKzY4NSw4IEBACiAJCS5jbGsJPSB7CiAJCQkubmFtZQkJPSAidWNsazEiLAogCQkJLmlkCQk9IDAsCi0JCQkuY3RybGJpdAk9ICgxPDwxNyksCi0JCQkuZW5hYmxlCQk9IHM1cHYyMTBfY2xrX2lwM19jdHJsLAorCQkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19tYXNrMF9jdHJsLAorCQkJLmN0cmxiaXQJPSAoMSA8PCAxMiksCiAJCX0sCiAJCS5zb3VyY2VzID0gJmNsa3NldF91YXJ0LAogCQkucmVnX3NyYyA9IHsgLnJlZyA9IFM1UF9DTEtfU1JDNCwgLnNoaWZ0ID0gMTYsIC5zaXplID0gNCB9LApAQCAtNjkwLDggKzY5NSw4IEBACiAJCS5jbGsJCT0gewogCQkJLm5hbWUJCT0gInVjbGsxIiwKIAkJCS5pZAkJPSAxLAotCQkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19pcDNfY3RybCwKLQkJCS5jdHJsYml0CT0gKDEgPDwgMTgpLAorCQkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19tYXNrMF9jdHJsLAorCQkJLmN0cmxiaXQJPSAoMSA8PCAxMyksCiAJCX0sCiAJCS5zb3VyY2VzID0gJmNsa3NldF91YXJ0LAogCQkucmVnX3NyYyA9IHsgLnJlZyA9IFM1UF9DTEtfU1JDNCwgLnNoaWZ0ID0gMjAsIC5zaXplID0gNCB9LApAQCAtNzAwLDggKzcwNSw4IEBACiAJCS5jbGsJCT0gewogCQkJLm5hbWUJCT0gInVjbGsxIiwKIAkJCS5pZAkJPSAyLAotCQkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19pcDNfY3RybCwKLQkJCS5jdHJsYml0CT0gKDEgPDwgMTkpLAorCQkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19tYXNrMF9jdHJsLAorCQkJLmN0cmxiaXQJPSAoMSA8PCAxNCksCiAJCX0sCiAJCS5zb3VyY2VzID0gJmNsa3NldF91YXJ0LAogCQkucmVnX3NyYyA9IHsgLnJlZyA9IFM1UF9DTEtfU1JDNCwgLnNoaWZ0ID0gMjQsIC5zaXplID0gNCB9LApAQCAtNzEwLDggKzcxNSw4IEBACiAJCS5jbGsJCT0gewogCQkJLm5hbWUJCT0gInVjbGsxIiwKIAkJCS5pZAkJPSAzLAotCQkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19pcDNfY3RybCwKLQkJCS5jdHJsYml0CT0gKDEgPDwgMjApLAorCQkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19tYXNrMF9jdHJsLAorCQkJLmN0cmxiaXQJPSAoMSA8PCAxNSksCiAJCX0sCiAJCS5zb3VyY2VzID0gJmNsa3NldF91YXJ0LAogCQkucmVnX3NyYyA9IHsgLnJlZyA9IFM1UF9DTEtfU1JDNCwgLnNoaWZ0ID0gMjgsIC5zaXplID0gNCB9LApAQCAtNzIwLDggKzcyNSw4IEBACiAJCS5jbGsJPSB7CiAJCQkubmFtZQkJPSAic2Nsa19taXhlciIsCiAJCQkuaWQJCT0gLTEsCi0JCQkuZW5hYmxlCQk9IHM1cHYyMTBfY2xrX2lwMV9jdHJsLAotCQkJLmN0cmxiaXQJPSAoMSA8PCA5KSwKKwkJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfbWFzazBfY3RybCwKKwkJCS5jdHJsYml0CT0gKDEgPDwgMSksCiAJCX0sCiAJCS5zb3VyY2VzID0gJmNsa3NldF9zY2xrX21peGVyLAogCQkucmVnX3NyYyA9IHsgLnJlZyA9IFM1UF9DTEtfU1JDMSwgLnNoaWZ0ID0gNCwgLnNpemUgPSAxIH0sCkBAIC03MzgsOCArNzQzLDggQEAKIAkJLmNsawk9IHsKIAkJCS5uYW1lCQk9ICJzY2xrX2ZpbWMiLAogCQkJLmlkCQk9IDAsCi0JCQkuZW5hYmxlCQk9IHM1cHYyMTBfY2xrX2lwMF9jdHJsLAotCQkJLmN0cmxiaXQJPSAoMSA8PCAyNCksCisJCQkuZW5hYmxlCQk9IHM1cHYyMTBfY2xrX21hc2sxX2N0cmwsCisJCQkuY3RybGJpdAk9ICgxIDw8IDIpLAogCQl9LAogCQkuc291cmNlcyA9ICZjbGtzZXRfZ3JvdXAyLAogCQkucmVnX3NyYyA9IHsgLnJlZyA9IFM1UF9DTEtfU1JDMywgLnNoaWZ0ID0gMTIsIC5zaXplID0gNCB9LApAQCAtNzQ4LDggKzc1Myw4IEBACiAJCS5jbGsJPSB7CiAJCQkubmFtZQkJPSAic2Nsa19maW1jIiwKIAkJCS5pZAkJPSAxLAotCQkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19pcDBfY3RybCwKLQkJCS5jdHJsYml0CT0gKDEgPDwgMjUpLAorCQkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19tYXNrMV9jdHJsLAorCQkJLmN0cmxiaXQJPSAoMSA8PCAzKSwKIAkJfSwKIAkJLnNvdXJjZXMgPSAmY2xrc2V0X2dyb3VwMiwKIAkJLnJlZ19zcmMgPSB7IC5yZWcgPSBTNVBfQ0xLX1NSQzMsIC5zaGlmdCA9IDE2LCAuc2l6ZSA9IDQgfSwKQEAgLTc1OCw4ICs3NjMsOCBAQAogCQkuY2xrCT0gewogCQkJLm5hbWUJCT0gInNjbGtfZmltYyIsCiAJCQkuaWQJCT0gMiwKLQkJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfaXAwX2N0cmwsCi0JCQkuY3RybGJpdAk9ICgxIDw8IDI2KSwKKwkJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfbWFzazFfY3RybCwKKwkJCS5jdHJsYml0CT0gKDEgPDwgNCksCiAJCX0sCiAJCS5zb3VyY2VzID0gJmNsa3NldF9ncm91cDIsCiAJCS5yZWdfc3JjID0geyAucmVnID0gUzVQX0NMS19TUkMzLCAuc2hpZnQgPSAyMCwgLnNpemUgPSA0IH0sCkBAIC03NjgsNiArNzczLDggQEAKIAkJLmNsawkJPSB7CiAJCQkubmFtZQkJPSAic2Nsa19jYW0iLAogCQkJLmlkCQk9IDAsCisJCQkuZW5hYmxlCQk9IHM1cHYyMTBfY2xrX21hc2swX2N0cmwsCisJCQkuY3RybGJpdAk9ICgxIDw8IDMpLAogCQl9LAogCQkuc291cmNlcyA9ICZjbGtzZXRfZ3JvdXAyLAogCQkucmVnX3NyYyA9IHsgLnJlZyA9IFM1UF9DTEtfU1JDMSwgLnNoaWZ0ID0gMTIsIC5zaXplID0gNCB9LApAQCAtNzc2LDYgKzc4Myw4IEBACiAJCS5jbGsJCT0gewogCQkJLm5hbWUJCT0gInNjbGtfY2FtIiwKIAkJCS5pZAkJPSAxLAorCQkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19tYXNrMF9jdHJsLAorCQkJLmN0cmxiaXQJPSAoMSA8PCA0KSwKIAkJfSwKIAkJLnNvdXJjZXMgPSAmY2xrc2V0X2dyb3VwMiwKIAkJLnJlZ19zcmMgPSB7IC5yZWcgPSBTNVBfQ0xLX1NSQzEsIC5zaGlmdCA9IDE2LCAuc2l6ZSA9IDQgfSwKQEAgLTc4NCw4ICs3OTMsOCBAQAogCQkuY2xrCQk9IHsKIAkJCS5uYW1lCQk9ICJzY2xrX2ZpbWQiLAogCQkJLmlkCQk9IC0xLAotCQkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19pcDFfY3RybCwKLQkJCS5jdHJsYml0CT0gKDEgPDwgMCksCisJCQkuZW5hYmxlCQk9IHM1cHYyMTBfY2xrX21hc2swX2N0cmwsCisJCQkuY3RybGJpdAk9ICgxIDw8IDUpLAogCQl9LAogCQkuc291cmNlcyA9ICZjbGtzZXRfZ3JvdXAyLAogCQkucmVnX3NyYyA9IHsgLnJlZyA9IFM1UF9DTEtfU1JDMSwgLnNoaWZ0ID0gMjAsIC5zaXplID0gNCB9LApAQCAtNzk0LDggKzgwMyw4IEBACiAJCS5jbGsJCT0gewogCQkJLm5hbWUJCT0gInNjbGtfbW1jIiwKIAkJCS5pZAkJPSAwLAotCQkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19pcDJfY3RybCwKLQkJCS5jdHJsYml0CT0gKDEgPDwgMTYpLAorCQkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19tYXNrMF9jdHJsLAorCQkJLmN0cmxiaXQJPSAoMSA8PCA4KSwKIAkJfSwKIAkJLnNvdXJjZXMgPSAmY2xrc2V0X2dyb3VwMiwKIAkJLnJlZ19zcmMgPSB7IC5yZWcgPSBTNVBfQ0xLX1NSQzQsIC5zaGlmdCA9IDAsIC5zaXplID0gNCB9LApAQCAtODA0LDggKzgxMyw4IEBACiAJCS5jbGsJCT0gewogCQkJLm5hbWUJCT0gInNjbGtfbW1jIiwKIAkJCS5pZAkJPSAxLAotCQkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19pcDJfY3RybCwKLQkJCS5jdHJsYml0CT0gKDEgPDwgMTcpLAorCQkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19tYXNrMF9jdHJsLAorCQkJLmN0cmxiaXQJPSAoMSA8PCA5KSwKIAkJfSwKIAkJLnNvdXJjZXMgPSAmY2xrc2V0X2dyb3VwMiwKIAkJLnJlZ19zcmMgPSB7IC5yZWcgPSBTNVBfQ0xLX1NSQzQsIC5zaGlmdCA9IDQsIC5zaXplID0gNCB9LApAQCAtODE0LDggKzgyMyw4IEBACiAJCS5jbGsJCT0gewogCQkJLm5hbWUJCT0gInNjbGtfbW1jIiwKIAkJCS5pZAkJPSAyLAotCQkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19pcDJfY3RybCwKLQkJCS5jdHJsYml0CT0gKDEgPDwgMTgpLAorCQkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19tYXNrMF9jdHJsLAorCQkJLmN0cmxiaXQJPSAoMSA8PCAxMCksCiAJCX0sCiAJCS5zb3VyY2VzID0gJmNsa3NldF9ncm91cDIsCiAJCS5yZWdfc3JjID0geyAucmVnID0gUzVQX0NMS19TUkM0LCAuc2hpZnQgPSA4LCAuc2l6ZSA9IDQgfSwKQEAgLTgyNCw4ICs4MzMsOCBAQAogCQkuY2xrCQk9IHsKIAkJCS5uYW1lCQk9ICJzY2xrX21tYyIsCiAJCQkuaWQJCT0gMywKLQkJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfaXAyX2N0cmwsCi0JCQkuY3RybGJpdAk9ICgxIDw8IDE5KSwKKwkJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfbWFzazBfY3RybCwKKwkJCS5jdHJsYml0CT0gKDEgPDwgMTEpLAogCQl9LAogCQkuc291cmNlcyA9ICZjbGtzZXRfZ3JvdXAyLAogCQkucmVnX3NyYyA9IHsgLnJlZyA9IFM1UF9DTEtfU1JDNCwgLnNoaWZ0ID0gMTIsIC5zaXplID0gNCB9LApAQCAtODY0LDggKzg3Myw4IEBACiAJCS5jbGsJCT0gewogCQkJLm5hbWUJCT0gInNjbGtfY3NpcyIsCiAJCQkuaWQJCT0gLTEsCi0JCQkuZW5hYmxlCQk9IHM1cHYyMTBfY2xrX2lwMF9jdHJsLAotCQkJLmN0cmxiaXQJPSAoMSA8PCAzMSksCisJCQkuZW5hYmxlCQk9IHM1cHYyMTBfY2xrX21hc2swX2N0cmwsCisJCQkuY3RybGJpdAk9ICgxIDw8IDYpLAogCQl9LAogCQkuc291cmNlcyA9ICZjbGtzZXRfZ3JvdXAyLAogCQkucmVnX3NyYyA9IHsgLnJlZyA9IFM1UF9DTEtfU1JDMSwgLnNoaWZ0ID0gMjQsIC5zaXplID0gNCB9LApAQCAtODc0LDggKzg4Myw4IEBACiAJCS5jbGsJCT0gewogCQkJLm5hbWUJCT0gInNjbGtfc3BpIiwKIAkJCS5pZAkJPSAwLAotCQkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19pcDNfY3RybCwKLQkJCS5jdHJsYml0CT0gKDEgPDwgMTIpLAorCQkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19tYXNrMF9jdHJsLAorCQkJLmN0cmxiaXQJPSAoMSA8PCAxNiksCiAJCX0sCiAJCS5zb3VyY2VzID0gJmNsa3NldF9ncm91cDIsCiAJCS5yZWdfc3JjID0geyAucmVnID0gUzVQX0NMS19TUkM1LCAuc2hpZnQgPSAwLCAuc2l6ZSA9IDQgfSwKQEAgLTg4NCw4ICs4OTMsOCBAQAogCQkuY2xrCQk9IHsKIAkJCS5uYW1lCQk9ICJzY2xrX3NwaSIsCiAJCQkuaWQJCT0gMSwKLQkJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfaXAzX2N0cmwsCi0JCQkuY3RybGJpdAk9ICgxIDw8IDEzKSwKKwkJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfbWFzazBfY3RybCwKKwkJCS5jdHJsYml0CT0gKDEgPDwgMTcpLAogCQl9LAogCQkuc291cmNlcyA9ICZjbGtzZXRfZ3JvdXAyLAogCQkucmVnX3NyYyA9IHsgLnJlZyA9IFM1UF9DTEtfU1JDNSwgLnNoaWZ0ID0gNCwgLnNpemUgPSA0IH0sCkBAIC04OTQsOCArOTAzLDggQEAKIAkJLmNsawkJPSB7CiAJCQkubmFtZQkJPSAic2Nsa19wd2kiLAogCQkJLmlkCQk9IC0xLAotCQkJLmVuYWJsZQkJPSAmczVwdjIxMF9jbGtfaXA0X2N0cmwsCi0JCQkuY3RybGJpdAk9ICgxIDw8IDIpLAorCQkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19tYXNrMF9jdHJsLAorCQkJLmN0cmxiaXQJPSAoMSA8PCAyOSksCiAJCX0sCiAJCS5zb3VyY2VzID0gJmNsa3NldF9ncm91cDIsCiAJCS5yZWdfc3JjID0geyAucmVnID0gUzVQX0NMS19TUkM2LCAuc2hpZnQgPSAyMCwgLnNpemUgPSA0IH0sCkBAIC05MDQsOCArOTEzLDggQEAKIAkJLmNsawkJPSB7CiAJCQkubmFtZQkJPSAic2Nsa19wd20iLAogCQkJLmlkCQk9IC0xLAotCQkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19pcDNfY3RybCwKLQkJCS5jdHJsYml0CT0gKDEgPDwgMjMpLAorCQkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19tYXNrMF9jdHJsLAorCQkJLmN0cmxiaXQJPSAoMSA8PCAxOSksCiAJCX0sCiAJCS5zb3VyY2VzID0gJmNsa3NldF9ncm91cDIsCiAJCS5yZWdfc3JjID0geyAucmVnID0gUzVQX0NMS19TUkM1LCAuc2hpZnQgPSAxMiwgLnNpemUgPSA0IH0sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCmluZGV4IDVkNWYzMzAuLjE2ZTY4MmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCkBAIC0xMSw3ICsxMSw3IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAgKiBDaGFuZ2VMb2c6Ci0gKiAgMjAwNiBQYXZlbCBNYWNoZWsgPHBhdmVsQHN1c2UuY3o+CisgKiAgMjAwNiBQYXZlbCBNYWNoZWsgPHBhdmVsQHVjdy5jej4KICAqICAwMy0wNi0yMDA0IEpvaG4gTGVueiA8bGVuekBjcy53aXNjLmVkdT4KICAqICAwNi0wNC0yMDAyIENocmlzIExhcnNvbiA8a2VyZ290aEBkaWdpdGFsbmVtZXNpcy5uZXQ+CiAgKiAgMDQtMTYtMjAwMSBMaW5lbyBKYXBhbixJbmMuIC4uLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5oIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5oCmluZGV4IGVjMDNmMTguLmI3YTlhNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuaAorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmgKQEAgLTEzLDggKzEzLDcgQEAKIAogI2RlZmluZSBTRVRfQkFOSyhfX25yLF9fc3RhcnQsX19zaXplKSBcCiAJbWktPmJhbmtbX19ucl0uc3RhcnQgPSAoX19zdGFydCksIFwKLQltaS0+YmFua1tfX25yXS5zaXplID0gKF9fc2l6ZSksIFwKLQltaS0+YmFua1tfX25yXS5ub2RlID0gKCgodW5zaWduZWQpKF9fc3RhcnQpIC0gUEhZU19PRkZTRVQpID4+IDI3KQorCW1pLT5iYW5rW19fbnJdLnNpemUgPSAoX19zaXplKQogCiBleHRlcm4gdm9pZCAoKnNhMTEwMGZiX2JhY2tsaWdodF9wb3dlcikoaW50IG9uKTsKIGV4dGVybiB2b2lkICgqc2ExMTAwZmJfbGNkX3Bvd2VyKShpbnQgb24pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IGQ1Mjc3ZjkuLjEyOGExZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTE3LDEwICsxNywxMCBAQAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogI2lmZGVmIENPTkZJR19TQTExMTEKLXZvaWQgc2ExMTExX2FkanVzdF96b25lcyhpbnQgbm9kZSwgdW5zaWduZWQgbG9uZyAqc2l6ZSwgdW5zaWduZWQgbG9uZyAqaG9sZXMpOwordm9pZCBzYTExMTFfYWRqdXN0X3pvbmVzKHVuc2lnbmVkIGxvbmcgKnNpemUsIHVuc2lnbmVkIGxvbmcgKmhvbGVzKTsKIAotI2RlZmluZSBhcmNoX2FkanVzdF96b25lcyhub2RlLCBzaXplLCBob2xlcykgXAotCXNhMTExMV9hZGp1c3Rfem9uZXMobm9kZSwgc2l6ZSwgaG9sZXMpCisjZGVmaW5lIGFyY2hfYWRqdXN0X3pvbmVzKHNpemUsIGhvbGVzKSBcCisJc2ExMTExX2FkanVzdF96b25lcyhzaXplLCBob2xlcykKIAogI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRAkoUEhZU19PRkZTRVQgKyBTWl8xTSAtIDEpCiAjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJKFBBR0VfT0ZGU0VUICsgU1pfMU0pCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCA1MGYwNzFjLi41ZWEyNGQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTIwLDYgKzIwLDkgQEAKIAkJc3RyYglccmQsIFtccnhdCiAJCS5lbmRtCiAKKwkJLm1hY3JvIHdhaXR1YXJ0LHJkLHJ4CisJCS5lbmRtCisKIAkJLm1hY3JvCWJ1c3l1YXJ0LHJkLHJ4CiAJCW1vdglccmQsICMwCiAxMDAxOgkJYWRkCVxyZCwgXHJkLCAjMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCAzMDUzZTViLi5kOWM0ODEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMTksOSArMTksOCBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19hcmNoX2FkanVzdF96b25lcyhpbnQgbm9kZSwgdW5zaWduZWQgbG9uZyAqem9uZV9zaXplLCB1bnNpZ25lZCBsb25nICp6aG9sZV9zaXplKSAKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2FyY2hfYWRqdXN0X3pvbmVzKHVuc2lnbmVkIGxvbmcgKnpvbmVfc2l6ZSwgdW5zaWduZWQgbG9uZyAqemhvbGVfc2l6ZSkKIHsKLSAgaWYgKG5vZGUgIT0gMCkgcmV0dXJuOwogICAvKiBPbmx5IHRoZSBmaXJzdCA0IE1CICg9MTAyNCBQYWdlcykgYXJlIHVzYWJsZSBmb3IgRE1BICovCiAgIC8qIFNlZSBkZXYgLyAtPiAucHJvcGVydGllcyBpbiBPcGVuRmlybXdhcmUuICovCiAgIHpvbmVfc2l6ZVsxXSA9IHpvbmVfc2l6ZVswXSAtIDEwMjQ7CkBAIC0zMCw4ICsyOSw4IEBACiAgIHpob2xlX3NpemVbMF0gPSAwOwogfQogCi0jZGVmaW5lIGFyY2hfYWRqdXN0X3pvbmVzKG5vZGUsIHNpemUsIGhvbGVzKSBcCi0JX19hcmNoX2FkanVzdF96b25lcyhub2RlLCBzaXplLCBob2xlcykKKyNkZWZpbmUgYXJjaF9hZGp1c3Rfem9uZXMoc2l6ZSwgaG9sZXMpIFwKKwlfX2FyY2hfYWRqdXN0X3pvbmVzKHNpemUsIGhvbGVzKQogCiAjZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xECShQSFlTX09GRlNFVCArIFNaXzRNIC0gMSkKICNkZWZpbmUgTUFYX0RNQV9BRERSRVNTCQkoUEFHRV9PRkZTRVQgKyBTWl80TSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvS2NvbmZpZwppbmRleCBmMmI4OGM1Li40YzcwNGI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9LY29uZmlnCkBAIC03MCw2ICs3MCwxOCBAQAogCiBtZW51ICJUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbiIKIAorY29uZmlnIFNITU9CSUxFX1RJTUVSX0haCisJaW50ICJLZXJuZWwgSFogKGppZmZpZXMgcGVyIHNlY29uZCkiCisJcmFuZ2UgMzIgMTAyNAorCWRlZmF1bHQgIjEyOCIKKwloZWxwCisJICBBbGxvd3MgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHRpbWVyIGZyZXF1ZW5jeS4gSXQgaXMgY3VzdG9tYXJ5CisJICB0byBoYXZlIHRoZSB0aW1lciBpbnRlcnJ1cHQgcnVuIGF0IDEwMDAgSHogb3IgMTAwIEh6LCBidXQgaW4gdGhlCisJICBjYXNlIG9mIGxvdyB0aW1lciBmcmVxdWVuY2llcyBvdGhlciB2YWx1ZXMgbWF5IGJlIG1vcmUgc3VpdGFibGUuCisJICBTSC1Nb2JpbGUgc3lzdGVtcyB1c2luZyBhIDMyNzY4IEh6IFJDTEsgZm9yIGNsb2NrIGV2ZW50cyBtYXkgd2FudAorCSAgdG8gc2VsZWN0IGEgSFogdmFsdWUgc3VjaCBhcyAxMjggdGhhdCBjYW4gZXZlbmx5IGRpdmlkZSBSQ0xLLgorCSAgQSBIWiB2YWx1ZSB0aGF0IGRvZXMgbm90IGRpdmlkZSBldmVubHkgbWF5IGNhdXNlIHRpbWVyIGRyaWZ0LgorCiBjb25maWcgU0hfVElNRVJfQ01UCiAJYm9vbCAiQ01UIHRpbWVyIGRyaXZlciIKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2lycXMuaAppbmRleCA1MTc5YjcyLi4xMzIyNTZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBfX0FTTV9NQUNIX0lSUVNfSAogCiAjZGVmaW5lIE5SX0lSUVMgICAgICAgICA1MTIKLSNkZWZpbmUgTlJfSVJRU19MRUdBQ1kgIDgKIAogI2RlZmluZSBldnQyaXJxKGV2dCkJCSgoKGV2dCkgPj4gNSkgLSAxNikKICNkZWZpbmUgaXJxMmV2dChpcnEpCQkoKChpcnEpICsgMTYpIDw8IDUpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2Nsb2NrLmMKaW5kZXggMzlmNmNjZi4uMThmZWJmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvY2xvY2suYwpAQCAtMzQxLDggKzM0MSwxMSBAQAogCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrIGR1bW15X2FwYl9wY2xrOworCiAvKiBhcnJheSBvZiBhbGwgc3BlYXIgM3h4IGNsb2NrIGxvb2t1cHMgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBzcGVhcl9jbGtfbG9va3Vwc1tdID0geworCXsgLmNvbl9pZCA9ICJhcGJfcGNsayIsCS5jbGsgPSAmZHVtbXlfYXBiX3BjbGt9LAogCS8qIHJvb3QgY2xrcyAqLwogCXsgLmNvbl9pZCA9ICJvc2NfMzJrX2NsayIsCS5jbGsgPSAmb3NjXzMya19jbGt9LAogCXsgLmNvbl9pZCA9ICJvc2NfMjRtX2NsayIsCS5jbGsgPSAmb3NjXzI0bV9jbGt9LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9jbG9jay5jCmluZGV4IDEzZTI3YzcuLjM2ZmYwNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L2Nsb2NrLmMKQEAgLTQyOCw4ICs0MjgsMTEgQEAKIAkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCiB9OwogCitzdGF0aWMgc3RydWN0IGNsayBkdW1teV9hcGJfcGNsazsKKwogLyogYXJyYXkgb2YgYWxsIHNwZWFyIDZ4eCBjbG9jayBsb29rdXBzICovCiBzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgc3BlYXJfY2xrX2xvb2t1cHNbXSA9IHsKKwl7IC5jb25faWQgPSAiYXBiX3BjbGsiLAkuY2xrID0gJmR1bW15X2FwYl9wY2xrfSwKIAkvKiByb290IGNsa3MgKi8KIAl7IC5jb25faWQgPSAib3NjXzMya19jbGsiLAkuY2xrID0gJm9zY18zMmtfY2xrfSwKIAl7IC5jb25faWQgPSAib3NjXzMwbV9jbGsiLAkuY2xrID0gJm9zY18zMG1fY2xrfSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC11MzAwL2Nsb2NrLmMKaW5kZXggNWFmNzFkNS4uNWQxMmQ1NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL2Nsb2NrLmMKQEAgLTEyMTIsNiArMTIxMiw4IEBACiB9OwogI2VuZGlmCiAKK3N0YXRpYyBzdHJ1Y3QgY2xrIGR1bW15X2FwYl9wY2xrOworCiAjZGVmaW5lIERFRl9MT09LVVAoZGV2aWQsIGNsa3JlZikJCVwKIAl7CQkJCQlcCiAJLmRldl9pZCA9IGRldmlkLAkJCVwKQEAgLTEyMjMsNiArMTIyNSwxMCBAQAogICogbG9vayB1cCB0aHJvdWdoIGNsb2NrZGV2aWNlLgogICovCiBzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdID0geworCXsKKwkJLmNvbl9pZCA9ICJhcGJfcGNsayIsCisJCS5jbGsgPSAmZHVtbXlfYXBiX3BjbGssCisJfSwKIAkvKiBDb25uZWN0ZWQgZGlyZWN0bHkgdG8gdGhlIEFNQkEgYnVzICovCiAJREVGX0xPT0tVUCgiYW1iYSIsICAgICAgJmFtYmFfY2xrKSwKIAlERUZfTE9PS1VQKCJjcHUiLCAgICAgICAmY3B1X2NsayksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC11MzAwL2NvcmUuYwppbmRleCA1ZjM0ZWI2Li42NTNiM2UwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9jb3JlLmMKQEAgLTE1NjEsMTMgKzE1NjEsNiBAQAogCXByaW50ayhLRVJOX0lORk8gIkluaXRpYWxpemluZyBVMzAwIHN5c3RlbSBvbiAlcyBiYXNlYmFuZCBjaGlwICIgXAogCSAgICAgICAiKGNoaXAgSUQgMHglMDR4KVxuIiwgY2hpcG5hbWUsIHZhbCk7CiAKLSNpZmRlZiBDT05GSUdfTUFDSF9VMzAwX0JTMjYKLQlpZiAoKHZhbCAmIDB4RkYwMFUpICE9IDB4YzgwMCkgewotCQlwcmludGsoS0VSTl9FUlIgIlBsYXRmb3JtIGNvbmZpZ3VyZWQgZm9yIEJTMjUvQlMyNiAiIFwKLQkJICAgICAgICJ3aXRoIERCMzE1MCBidXQgJXMgZGV0ZWN0ZWQsIGV4cGVjdCBwcm9ibGVtcyEiLAotCQkgICAgICAgY2hpcG5hbWUpOwotCX0KLSNlbmRpZgogI2lmZGVmIENPTkZJR19NQUNIX1UzMDBfQlMzMzAKIAlpZiAoKHZhbCAmIDB4RkYwMFUpICE9IDB4ZDgwMCkgewogCQlwcmludGsoS0VSTl9FUlIgIlBsYXRmb3JtIGNvbmZpZ3VyZWQgZm9yIEJTMzMwICIgXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2dwaW8uYyBiL2FyY2gvYXJtL21hY2gtdTMwMC9ncGlvLmMKaW5kZXggNWY2MWZkNC4uZDkyNzkwMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL2dwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvZ3Bpby5jCkBAIC01MjMsNyArNTIzLDcgQEAKIAogCS8qCiAJICogUHV0IGFsbCBwaW5zIHRoYXQgYXJlIHNldCB0byBlaXRoZXIgJ0dQSU9fT1VUJyBvciAnR1BJT19OT1RfVVNFRCcKLQkgKiB0byBvdXRwdXQgYW5kICdHUElPX0lOJyB0byBpbnB1dCBmb3IgZWFjaCBwb3J0LiBBbmQgaW5pdGFsaXplCisJICogdG8gb3V0cHV0IGFuZCAnR1BJT19JTicgdG8gaW5wdXQgZm9yIGVhY2ggcG9ydC4gQW5kIGluaXRpYWxpemUKIAkgKiBkZWZhdWx0IHZhbHVlIG9uIG91dHB1dHMuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IFUzMDBfR1BJT19OVU1fUE9SVFM7IGkrKykgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggYWIwMDBkZi4uYmYxMzRiYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0zNSwxNCArMzUsNiBAQAogI2VuZGlmCiAKIC8qCi0gKiBUQ00gbWVtb3J5IHdoZXJlYWJvdXRzCi0gKi8KLSNkZWZpbmUgSVRDTV9PRkZTRVQJMHhmZmZmMjAwMAotI2RlZmluZSBJVENNX0VORAkweGZmZmYzZmZmCi0jZGVmaW5lIERUQ01fT0ZGU0VUCTB4ZmZmZjQwMDAKLSNkZWZpbmUgRFRDTV9FTkQJMHhmZmZmNWZmZgotCi0vKgogICogV2UgZW5hYmxlIGEgcmVhbCBiaWcgRE1BIGJ1ZmZlciBpZiBuZWVkIGJlLgogICovCiAjZGVmaW5lIENPTlNJU1RFTlRfRE1BX1NJWkUgU1pfNE0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC91MzAwLmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvdTMwMC5jCmluZGV4IGQyYTBiODguLmJmY2RhOTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC91MzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL3UzMDAuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTIyLDYgKzIzLDIxIEBACiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAKK3N0YXRpYyB2b2lkIF9faW5pdCB1MzAwX3Jlc2VydmUodm9pZCkKK3sKKwkvKgorCSAqIFUzMDAgLSBUaGlzIHBsYXRmb3JtIGZhbWlseSBjYW4gc2hhcmUgcGh5c2ljYWwgbWVtb3J5CisJICogYmV0d2VlbiB0d28gQVJNIGNwdXMsIG9uZSBydW5uaW5nIExpbnV4IGFuZCB0aGUgb3RoZXIKKwkgKiBydW5uaW5nIGFub3RoZXIgT1MuCisJICovCisjaWZkZWYgQ09ORklHX01BQ0hfVTMwMF9TSU5HTEVfUkFNCisjaWYgKChDT05GSUdfTUFDSF9VMzAwX0FDQ0VTU19NRU1fU0laRSAmIDEpID09IDEpICYmIFwKKwlDT05GSUdfTUFDSF9VMzAwXzJNQl9BTElHTk1FTlRfRklYCisgICAgICAgIG1lbWJsb2NrX3Jlc2VydmUoUEhZU19PRkZTRVQsIDB4MDAxMDAwMDApOworI2VuZGlmCisjZW5kaWYKK30KKwogc3RhdGljIHZvaWQgX19pbml0IHUzMDBfaW5pdF9tYWNoaW5lKHZvaWQpCiB7CiAJdTMwMF9pbml0X2RldmljZXMoKTsKQEAgLTQ5LDYgKzY1LDcgQEAKIAkuaW9fcGdfb2Zmc3QJPSAoKFUzMDBfQUhCX1BFUl9WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBCT09UX1BBUkFNU19PRkZTRVQsCiAJLm1hcF9pbwkJPSB1MzAwX21hcF9pbywKKwkucmVzZXJ2ZQk9IHUzMDBfcmVzZXJ2ZSwKIAkuaW5pdF9pcnEJPSB1MzAwX2luaXRfaXJxLAogCS50aW1lcgkJPSAmdTMwMF90aW1lciwKIAkuaW5pdF9tYWNoaW5lCT0gdTMwMF9pbml0X21hY2hpbmUsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC5jIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAuYwppbmRleCBiYjhkN2I3Li4wZThmZDEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLmMKQEAgLTEzLDE5ICsxMyw0MiBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9wbDAyMi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvYWI4NTAwLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KIAorI2luY2x1ZGUgPHBsYXQvcGluY2ZnLmg+CiAjaW5jbHVkZSA8cGxhdC9pMmMuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3NldHVwLmg+CiAjaW5jbHVkZSA8bWFjaC9kZXZpY2VzLmg+CiAKKyNpbmNsdWRlICJwaW5zLWRiODUwMC5oIgorCitzdGF0aWMgcGluX2NmZ190IG1vcDUwMF9waW5zW10gPSB7CisJLyogU1NQMCAqLworCUdQSU8xNDNfU1NQMF9DTEssCisJR1BJTzE0NF9TU1AwX0ZSTSwKKwlHUElPMTQ1X1NTUDBfUlhELAorCUdQSU8xNDZfU1NQMF9UWEQsCisKKwkvKiBJMkMgKi8KKwlHUElPMTQ3X0kyQzBfU0NMLAorCUdQSU8xNDhfSTJDMF9TREEsCisJR1BJTzE2X0kyQzFfU0NMLAorCUdQSU8xN19JMkMxX1NEQSwKKwlHUElPMTBfSTJDMl9TREEsCisJR1BJTzExX0kyQzJfU0NMLAorCUdQSU8yMjlfSTJDM19TREEsCisJR1BJTzIzMF9JMkMzX1NDTCwKK307CisKIHN0YXRpYyB2b2lkIGFiNDUwMF9zcGlfY3NfY29udHJvbCh1MzIgY29tbWFuZCkKIHsKIAkvKiBzZXQgdGhlIEZSTSBzaWduYWwsIHdoaWNoIGlzIENTICAtIFRPRE8gKi8KQEAgLTQ4LDE1ICs3MSwyMCBAQAogCS5jc19jb250cm9sID0gYWI0NTAwX3NwaV9jc19jb250cm9sLAogfTsKIAorc3RhdGljIHN0cnVjdCBhYjg1MDBfcGxhdGZvcm1fZGF0YSBhYjg1MDBfcGxhdGRhdGEgPSB7CisJLmlycV9iYXNlCT0gTU9QNTAwX0FCODUwMF9JUlFfQkFTRSwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gdTg1MDBfc3BpX2RldmljZXNbXSA9IHsKIAl7CiAJCS5tb2RhbGlhcyA9ICJhYjg1MDAiLAogCQkuY29udHJvbGxlcl9kYXRhID0gJmFiNDUwMF9jaGlwX2luZm8sCisJCS5wbGF0Zm9ybV9kYXRhID0gJmFiODUwMF9wbGF0ZGF0YSwKIAkJLm1heF9zcGVlZF9oeiA9IDEyMDAwMDAwLAogCQkuYnVzX251bSA9IDAsCiAJCS5jaGlwX3NlbGVjdCA9IDAsCiAJCS5tb2RlID0gU1BJX01PREVfMCwKLQkJLmlycSA9IElSUV9BQjQ1MDAsCisJCS5pcnEgPSBJUlFfREI4NTAwX0FCODUwMCwKIAl9LAogfTsKIApAQCAtMTE4LDYgKzE0NiwxMCBAQAogewogCWludCBpOwogCisJdTg1MDBfaW5pdF9kZXZpY2VzKCk7CisKKwlubWtfY29uZmlnX3BpbnMobW9wNTAwX3BpbnMsIEFSUkFZX1NJWkUobW9wNTAwX3BpbnMpKTsKKwogCXU4NTAwX2kyYzBfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gJnU4NTAwX2kyYzBfZGF0YTsKIAl1eDUwMF9pMmMxX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9ICZ1ODUwMF9pMmMxX2RhdGE7CiAJdXg1MDBfaTJjMl9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSAmdTg1MDBfaTJjMl9kYXRhOwpAQCAtMTMzLDggKzE2NSw2IEBACiAKIAlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyh1ODUwMF9zcGlfZGV2aWNlcywKIAkJCUFSUkFZX1NJWkUodTg1MDBfc3BpX2RldmljZXMpKTsKLQotCXU4NTAwX2luaXRfZGV2aWNlcygpOwogfQogCiBNQUNISU5FX1NUQVJUKFU4NTAwLCAiU1QtRXJpY3Nzb24gTU9QNTAwIHBsYXRmb3JtIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvY2xvY2suYwppbmRleCBmZTg0YjkwLi5kOGFiN2YxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9jbG9jay5jCkBAIC0xMzEsNyArMTMxLDcgQEAKICAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX210dV9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCiB7Ci0Jdm9pZCBfX2lvbWVtICphZGRyID0gX19pb19hZGRyZXNzKFU4NTAwX1BSQ01VX0JBU0UpCisJdm9pZCBfX2lvbWVtICphZGRyID0gX19pb19hZGRyZXNzKFVYNTAwX1BSQ01VX0JBU0UpCiAJCSsgUFJDTV9UQ1I7CiAJdTMyIHRjciA9IHJlYWRsKGFkZHIpOwogCWludCBtdHUgPSAoaW50KSBjbGstPmRhdGE7CkBAIC00NTMsNyArNDUzLDExIEBACiBzdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDcsIHdkZ19lZCwgCTEsIC0xLCBOVUxMKTsKIHN0YXRpYyBERUZJTkVfUFJDQ19DTEsoNywgY2ZncmVnX2VkLCAJMCwgLTEsIE5VTEwpOwogCitzdGF0aWMgc3RydWN0IGNsayBjbGtfZHVtbXlfYXBiX3BjbGs7CisKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCB1ODUwMF9jb21tb25fY2xrc1tdID0geworCUNMSyhkdW1teV9hcGJfcGNsaywgTlVMTCwJImFwYl9wY2xrIiksCisKIAkvKiBQZXJpcGhlcmFsIENsdXN0ZXIgIzEgKi8KIAlDTEsoZ3BpbzAsCSJncGlvLjAiLAlOVUxMKSwKIAlDTEsoZ3BpbzAsCSJncGlvLjEiLAlOVUxMKSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvY3B1LWRiNTUwMC5jIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9jcHUtZGI1NTAwLmMKaW5kZXggNmEzYWM0NS4uZTkyNzhmNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9jcHUtZGI1NTAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9jcHUtZGI1NTAwLmMKQEAgLTIxLDYgKzIxLDcgQEAKIAlfX0lPX0RFVl9ERVNDKFU1NTAwX0dQSU8yX0JBU0UsIFNaXzRLKSwKIAlfX0lPX0RFVl9ERVNDKFU1NTAwX0dQSU8zX0JBU0UsIFNaXzRLKSwKIAlfX0lPX0RFVl9ERVNDKFU1NTAwX0dQSU80X0JBU0UsIFNaXzRLKSwKKwlfX0lPX0RFVl9ERVNDKFU1NTAwX1BSQ01VX0JBU0UsIFNaXzRLKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp1NTUwMF9wbGF0Zm9ybV9kZXZzW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvZGV2aWNlcy1kYjg1MDAuYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvZGV2aWNlcy1kYjg1MDAuYwppbmRleCA4MjI5MDM0Li42NTRmY2E5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2RldmljZXMtZGI4NTAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9kZXZpY2VzLWRiODUwMC5jCkBAIC02NSw3ICs2NSw3IEBACiAJCS5lbmQgICA9IFU4NTAwX1NTUDBfQkFTRSArIFNaXzRLIC0gMSwKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKLQkuaXJxID0ge0lSUV9TU1AwLCBOT19JUlEgfSwKKwkuaXJxID0ge0lSUV9EQjg1MDBfU1NQMCwgTk9fSVJRIH0sCiAJLyogU1QtRXJpY3Nzb24gbW9kaWZpZWQgaWQgKi8KIAkucGVyaXBoaWQgPSBTU1BfUEVSX0lELAogfTsKQEAgLTc3LDggKzc3LDggQEAKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydAk9IElSUV9JMkMwLAotCQkuZW5kCT0gSVJRX0kyQzAsCisJCS5zdGFydAk9IElSUV9EQjg1MDBfSTJDMCwKKwkJLmVuZAk9IElSUV9EQjg1MDBfSTJDMCwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfQogfTsKQEAgLTk3LDggKzk3LDggQEAKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydAk9IElSUV9JMkM0LAotCQkuZW5kCT0gSVJRX0kyQzQsCisJCS5zdGFydAk9IElSUV9EQjg1MDBfSTJDNCwKKwkJLmVuZAk9IElSUV9EQjg1MDBfSTJDNCwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfQogfTsKQEAgLTEzMCw4ICsxMzAsOCBAQAogCQkubmFtZSA9ICJsY2xhIiwKIAl9LAogCVszXSA9IHsKLQkJLnN0YXJ0ID0gSVJRX0RNQSwKLQkJLmVuZCA9IElSUV9ETUEsCisJCS5zdGFydCA9IElSUV9EQjg1MDBfRE1BLAorCQkuZW5kICAgPSBJUlFfREI4NTAwX0RNQSwKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlF9CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9pcnFzLWJvYXJkLW1vcDUwMC5oIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvaXJxcy1ib2FyZC1tb3A1MDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2E0ZjcwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvaXJxcy1ib2FyZC1tb3A1MDAuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSBTVC1Fcmljc3NvbiBTQSAyMDEwCisgKgorICogQXV0aG9yOiBSYWJpbiBWaW5jZW50IDxyYWJpbi52aW5jZW50QHN0ZXJpY3Nzb24uY29tPgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKi8KKworI2lmbmRlZiBfX01BQ0hfSVJRU19CT0FSRF9NT1A1MDBfSAorI2RlZmluZSBfX01BQ0hfSVJRU19CT0FSRF9NT1A1MDBfSAorCisjZGVmaW5lIEFCODUwMF9OUl9JUlFTCQkJMTA0CisKKyNkZWZpbmUgTU9QNTAwX0FCODUwMF9JUlFfQkFTRQkJSVJRX0JPQVJEX1NUQVJUCisjZGVmaW5lIE1PUDUwMF9BQjg1MDBfSVJRX0VORAkJKE1PUDUwMF9BQjg1MDBfSVJRX0JBU0UgXAorCQkJCQkgKyBBQjg1MDBfTlJfSVJRUykKKyNkZWZpbmUgTU9QNTAwX0lSUV9FTkQJCQlNT1A1MDBfQUI4NTAwX0lSUV9FTkQKKworI2lmIE1PUDUwMF9JUlFfRU5EID4gSVJRX0JPQVJEX0VORAorI3VuZGVmIElSUV9CT0FSRF9FTkQKKyNkZWZpbmUgSVJRX0JPQVJEX0VORAlNT1A1MDBfSVJRX0VORAorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvaXJxcy1kYjU1MDAuaCBiL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2lycXMtZGI1NTAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZiZmU1ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2lycXMtZGI1NTAwLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgU1QtRXJpY3Nzb24gU0EgMjAxMAorICoKKyAqIEF1dGhvcjogUmFiaW4gVmluY2VudCA8cmFiaW4udmluY2VudEBzdGVyaWNzc29uLmNvbT4KKyAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHZlcnNpb24gMgorICovCisKKyNpZm5kZWYgX19NQUNIX0lSUVNfREI1NTAwX0gKKyNkZWZpbmUgX19NQUNIX0lSUVNfREI1NTAwX0gKKworI2RlZmluZSBJUlFfREI1NTAwX01UVTAJCQkoSVJRX1NIUElfU1RBUlQgKyA0KQorI2RlZmluZSBJUlFfREI1NTAwX1NQSTIJCQkoSVJRX1NIUElfU1RBUlQgKyA2KQorI2RlZmluZSBJUlFfREI1NTAwX1BNVTAJCQkoSVJRX1NIUElfU1RBUlQgKyA3KQorI2RlZmluZSBJUlFfREI1NTAwX1NQSTAJCQkoSVJRX1NIUElfU1RBUlQgKyA4KQorI2RlZmluZSBJUlFfREI1NTAwX1JUVAkJCShJUlFfU0hQSV9TVEFSVCArIDkpCisjZGVmaW5lIElSUV9EQjU1MDBfUEtBCQkJKElSUV9TSFBJX1NUQVJUICsgMTApCisjZGVmaW5lIElSUV9EQjU1MDBfVUFSVDAJCShJUlFfU0hQSV9TVEFSVCArIDExKQorI2RlZmluZSBJUlFfREI1NTAwX0kyQzMJCQkoSVJRX1NIUElfU1RBUlQgKyAxMikKKyNkZWZpbmUgSVJRX0RCNTUwMF9MMkNDCQkJKElSUV9TSFBJX1NUQVJUICsgMTMpCisjZGVmaW5lIElSUV9EQjU1MDBfTVNQMAkJCShJUlFfU0hQSV9TVEFSVCArIDE0KQorI2RlZmluZSBJUlFfREI1NTAwX0NSWVAxCQkoSVJRX1NIUElfU1RBUlQgKyAxNSkKKyNkZWZpbmUgSVJRX0RCNTUwMF9QTVUxCQkJKElSUV9TSFBJX1NUQVJUICsgMTYpCisjZGVmaW5lIElSUV9EQjU1MDBfTVRVMQkJCShJUlFfU0hQSV9TVEFSVCArIDE3KQorI2RlZmluZSBJUlFfREI1NTAwX1JUQwkJCShJUlFfU0hQSV9TVEFSVCArIDE4KQorI2RlZmluZSBJUlFfREI1NTAwX1VBUlQxCQkoSVJRX1NIUElfU1RBUlQgKyAxOSkKKyNkZWZpbmUgSVJRX0RCNTUwMF9VU0JfV0FLRVVQCQkoSVJRX1NIUElfU1RBUlQgKyAyMCkKKyNkZWZpbmUgSVJRX0RCNTUwMF9JMkMwCQkJKElSUV9TSFBJX1NUQVJUICsgMjEpCisjZGVmaW5lIElSUV9EQjU1MDBfSTJDMQkJCShJUlFfU0hQSV9TVEFSVCArIDIyKQorI2RlZmluZSBJUlFfREI1NTAwX1VTQk9URwkJKElSUV9TSFBJX1NUQVJUICsgMjMpCisjZGVmaW5lIElSUV9EQjU1MDBfRE1BX1NFQ1VSRQkJKElSUV9TSFBJX1NUQVJUICsgMjQpCisjZGVmaW5lIElSUV9EQjU1MDBfRE1BCQkJKElSUV9TSFBJX1NUQVJUICsgMjUpCisjZGVmaW5lIElSUV9EQjU1MDBfVUFSVDIJCShJUlFfU0hQSV9TVEFSVCArIDI2KQorI2RlZmluZSBJUlFfREI1NTAwX0lDTl9QTVUxCQkoSVJRX1NIUElfU1RBUlQgKyAyNykKKyNkZWZpbmUgSVJRX0RCNTUwMF9JQ05fUE1VMgkJKElSUV9TSFBJX1NUQVJUICsgMjgpCisjZGVmaW5lIElSUV9EQjU1MDBfVUFSVDMJCShJUlFfU0hQSV9TVEFSVCArIDI5KQorI2RlZmluZSBJUlFfREI1NTAwX1NQSTMJCQkoSVJRX1NIUElfU1RBUlQgKyAzMCkKKyNkZWZpbmUgSVJRX0RCNTUwMF9TRE1NQzQJCShJUlFfU0hQSV9TVEFSVCArIDMxKQorI2RlZmluZSBJUlFfREI1NTAwX0lSUkMJCQkoSVJRX1NIUElfU1RBUlQgKyAzMykKKyNkZWZpbmUgSVJRX0RCNTUwMF9JUkRBX0ZUCQkoSVJRX1NIUElfU1RBUlQgKyAzNCkKKyNkZWZpbmUgSVJRX0RCNTUwMF9JUkRBX1NECQkoSVJRX1NIUElfU1RBUlQgKyAzNSkKKyNkZWZpbmUgSVJRX0RCNTUwMF9JUkRBX0ZJCQkoSVJRX1NIUElfU1RBUlQgKyAzNikKKyNkZWZpbmUgSVJRX0RCNTUwMF9JUkRBX0ZECQkoSVJRX1NIUElfU1RBUlQgKyAzNykKKyNkZWZpbmUgSVJRX0RCNTUwMF9GU01DX0NPREVSRUFEWQkoSVJRX1NIUElfU1RBUlQgKyAzOCkKKyNkZWZpbmUgSVJRX0RCNTUwMF9GU01DX05BTkRXQUlUCShJUlFfU0hQSV9TVEFSVCArIDM5KQorI2RlZmluZSBJUlFfREI1NTAwX0FCNTUwMAkJKElSUV9TSFBJX1NUQVJUICsgNDApCisjZGVmaW5lIElSUV9EQjU1MDBfU0RNTUMyCQkoSVJRX1NIUElfU1RBUlQgKyA0MSkKKyNkZWZpbmUgSVJRX0RCNTUwMF9TSUEJCQkoSVJRX1NIUElfU1RBUlQgKyA0MikKKyNkZWZpbmUgSVJRX0RCNTUwMF9TSUEyCQkJKElSUV9TSFBJX1NUQVJUICsgNDMpCisjZGVmaW5lIElSUV9EQjU1MDBfSFZBCQkJKElSUV9TSFBJX1NUQVJUICsgNDQpCisjZGVmaW5lIElSUV9EQjU1MDBfSFZBMgkJCShJUlFfU0hQSV9TVEFSVCArIDQ1KQorI2RlZmluZSBJUlFfREI1NTAwX1BSQ01VMAkJKElSUV9TSFBJX1NUQVJUICsgNDYpCisjZGVmaW5lIElSUV9EQjU1MDBfUFJDTVUxCQkoSVJRX1NIUElfU1RBUlQgKyA0NykKKyNkZWZpbmUgSVJRX0RCNTUwMF9ESVNQCQkJKElSUV9TSFBJX1NUQVJUICsgNDgpCisjZGVmaW5lIElSUV9EQjU1MDBfU0RNTUMxCQkoSVJRX1NIUElfU1RBUlQgKyA1MCkKKyNkZWZpbmUgSVJRX0RCNTUwMF9NU1AxCQkJKElSUV9TSFBJX1NUQVJUICsgNTIpCisjZGVmaW5lIElSUV9EQjU1MDBfS0JECQkJKElSUV9TSFBJX1NUQVJUICsgNTMpCisjZGVmaW5lIElSUV9EQjU1MDBfSTJDMgkJCShJUlFfU0hQSV9TVEFSVCArIDU1KQorI2RlZmluZSBJUlFfREI1NTAwX0IyUjIJCQkoSVJRX1NIUElfU1RBUlQgKyA1NikKKyNkZWZpbmUgSVJRX0RCNTUwMF9DUllQMAkJKElSUV9TSFBJX1NUQVJUICsgNTcpCisjZGVmaW5lIElSUV9EQjU1MDBfU0RNTUMzCQkoSVJRX1NIUElfU1RBUlQgKyA1OSkKKyNkZWZpbmUgSVJRX0RCNTUwMF9TRE1NQzAJCShJUlFfU0hQSV9TVEFSVCArIDYwKQorI2RlZmluZSBJUlFfREI1NTAwX0hTRU0JCQkoSVJRX1NIUElfU1RBUlQgKyA2MSkKKyNkZWZpbmUgSVJRX0RCNTUwMF9TQkFHCQkJKElSUV9TSFBJX1NUQVJUICsgNjMpCisjZGVmaW5lIElSUV9EQjU1MDBfU1BJMQkJCShJUlFfU0hQSV9TVEFSVCArIDk2KQorI2RlZmluZSBJUlFfREI1NTAwX01TUDIJCQkoSVJRX1NIUElfU1RBUlQgKyA5OCkKKyNkZWZpbmUgSVJRX0RCNTUwMF9TUlBUSU1FUgkJKElSUV9TSFBJX1NUQVJUICsgMTAxKQorI2RlZmluZSBJUlFfREI1NTAwX0NUSTAJCQkoSVJRX1NIUElfU1RBUlQgKyAxMDgpCisjZGVmaW5lIElSUV9EQjU1MDBfQ1RJMQkJCShJUlFfU0hQSV9TVEFSVCArIDEwOSkKKyNkZWZpbmUgSVJRX0RCNTUwMF9JQ05fRVJSCQkoSVJRX1NIUElfU1RBUlQgKyAxMTApCisjZGVmaW5lIElSUV9EQjU1MDBfTUFMSV9QUE1NVQkJKElSUV9TSFBJX1NUQVJUICsgMTEyKQorI2RlZmluZSBJUlFfREI1NTAwX01BTElfUFAJCShJUlFfU0hQSV9TVEFSVCArIDExMykKKyNkZWZpbmUgSVJRX0RCNTUwMF9NQUxJX0dQTU1VCQkoSVJRX1NIUElfU1RBUlQgKyAxMTQpCisjZGVmaW5lIElSUV9EQjU1MDBfTUFMSV9HUAkJKElSUV9TSFBJX1NUQVJUICsgMTE1KQorI2RlZmluZSBJUlFfREI1NTAwX01BTEkJCQkoSVJRX1NIUElfU1RBUlQgKyAxMTYpCisjZGVmaW5lIElSUV9EQjU1MDBfUFJDTVVfU0VNCQkoSVJRX1NIUElfU1RBUlQgKyAxMTgpCisjZGVmaW5lIElSUV9EQjU1MDBfR1BJTzAJCShJUlFfU0hQSV9TVEFSVCArIDExOSkKKyNkZWZpbmUgSVJRX0RCNTUwMF9HUElPMQkJKElSUV9TSFBJX1NUQVJUICsgMTIwKQorI2RlZmluZSBJUlFfREI1NTAwX0dQSU8yCQkoSVJRX1NIUElfU1RBUlQgKyAxMjEpCisjZGVmaW5lIElSUV9EQjU1MDBfR1BJTzMJCShJUlFfU0hQSV9TVEFSVCArIDEyMikKKyNkZWZpbmUgSVJRX0RCNTUwMF9HUElPNAkJKElSUV9TSFBJX1NUQVJUICsgMTIzKQorI2RlZmluZSBJUlFfREI1NTAwX0dQSU81CQkoSVJRX1NIUElfU1RBUlQgKyAxMjQpCisjZGVmaW5lIElSUV9EQjU1MDBfR1BJTzYJCShJUlFfU0hQSV9TVEFSVCArIDEyNSkKKyNkZWZpbmUgSVJRX0RCNTUwMF9HUElPNwkJKElSUV9TSFBJX1NUQVJUICsgMTI2KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2lycXMtZGI4NTAwLmggYi9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9pcnFzLWRiODUwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNWQ5ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9pcnFzLWRiODUwMC5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFNULUVyaWNzc29uIFNBIDIwMTAKKyAqCisgKiBBdXRob3I6IFJhYmluIFZpbmNlbnQgPHJhYmluLnZpbmNlbnRAc3Rlcmljc3Nvbi5jb20+CisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqLworCisjaWZuZGVmIF9fTUFDSF9JUlFTX0RCODUwMF9ICisjZGVmaW5lIF9fTUFDSF9JUlFTX0RCODUwMF9ICisKKyNkZWZpbmUgSVJRX0RCODUwMF9NVFUwCQkJKElSUV9TSFBJX1NUQVJUICsgNCkKKyNkZWZpbmUgSVJRX0RCODUwMF9TUEkyCQkJKElSUV9TSFBJX1NUQVJUICsgNikKKyNkZWZpbmUgSVJRX0RCODUwMF9QTVUJCQkoSVJRX1NIUElfU1RBUlQgKyA3KQorI2RlZmluZSBJUlFfREI4NTAwX1NQSTAJCQkoSVJRX1NIUElfU1RBUlQgKyA4KQorI2RlZmluZSBJUlFfREI4NTAwX1JUVAkJCShJUlFfU0hQSV9TVEFSVCArIDkpCisjZGVmaW5lIElSUV9EQjg1MDBfUEtBCQkJKElSUV9TSFBJX1NUQVJUICsgMTApCisjZGVmaW5lIElSUV9EQjg1MDBfVUFSVDAJCShJUlFfU0hQSV9TVEFSVCArIDExKQorI2RlZmluZSBJUlFfREI4NTAwX0kyQzMJCQkoSVJRX1NIUElfU1RBUlQgKyAxMikKKyNkZWZpbmUgSVJRX0RCODUwMF9MMkNDCQkJKElSUV9TSFBJX1NUQVJUICsgMTMpCisjZGVmaW5lIElSUV9EQjg1MDBfU1NQMAkJCShJUlFfU0hQSV9TVEFSVCArIDE0KQorI2RlZmluZSBJUlFfREI4NTAwX0NSWVAxCQkoSVJRX1NIUElfU1RBUlQgKyAxNSkKKyNkZWZpbmUgSVJRX0RCODUwMF9NU1AxX1JYCQkoSVJRX1NIUElfU1RBUlQgKyAxNikKKyNkZWZpbmUgSVJRX0RCODUwMF9NVFUxCQkJKElSUV9TSFBJX1NUQVJUICsgMTcpCisjZGVmaW5lIElSUV9EQjg1MDBfUlRDCQkJKElSUV9TSFBJX1NUQVJUICsgMTgpCisjZGVmaW5lIElSUV9EQjg1MDBfVUFSVDEJCShJUlFfU0hQSV9TVEFSVCArIDE5KQorI2RlZmluZSBJUlFfREI4NTAwX1VTQl9XQUtFVVAJCShJUlFfU0hQSV9TVEFSVCArIDIwKQorI2RlZmluZSBJUlFfREI4NTAwX0kyQzAJCQkoSVJRX1NIUElfU1RBUlQgKyAyMSkKKyNkZWZpbmUgSVJRX0RCODUwMF9JMkMxCQkJKElSUV9TSFBJX1NUQVJUICsgMjIpCisjZGVmaW5lIElSUV9EQjg1MDBfVVNCT1RHCQkoSVJRX1NIUElfU1RBUlQgKyAyMykKKyNkZWZpbmUgSVJRX0RCODUwMF9ETUFfU0VDVVJFCQkoSVJRX1NIUElfU1RBUlQgKyAyNCkKKyNkZWZpbmUgSVJRX0RCODUwMF9ETUEJCQkoSVJRX1NIUElfU1RBUlQgKyAyNSkKKyNkZWZpbmUgSVJRX0RCODUwMF9VQVJUMgkJKElSUV9TSFBJX1NUQVJUICsgMjYpCisjZGVmaW5lIElSUV9EQjg1MDBfSUNOX1BNVTEJCShJUlFfU0hQSV9TVEFSVCArIDI3KQorI2RlZmluZSBJUlFfREI4NTAwX0lDTl9QTVUyCQkoSVJRX1NIUElfU1RBUlQgKyAyOCkKKyNkZWZpbmUgSVJRX0RCODUwMF9IU0lSX0VYQ0VQCQkoSVJRX1NIUElfU1RBUlQgKyAyOSkKKyNkZWZpbmUgSVJRX0RCODUwMF9NU1AwCQkJKElSUV9TSFBJX1NUQVJUICsgMzEpCisjZGVmaW5lIElSUV9EQjg1MDBfSFNJUl9DSDBfT1ZSUlVOCShJUlFfU0hQSV9TVEFSVCArIDMyKQorI2RlZmluZSBJUlFfREI4NTAwX0hTSVJfQ0gxX09WUlJVTgkoSVJRX1NIUElfU1RBUlQgKyAzMykKKyNkZWZpbmUgSVJRX0RCODUwMF9IU0lSX0NIMl9PVlJSVU4JKElSUV9TSFBJX1NUQVJUICsgMzQpCisjZGVmaW5lIElSUV9EQjg1MDBfSFNJUl9DSDNfT1ZSUlVOCShJUlFfU0hQSV9TVEFSVCArIDM1KQorI2RlZmluZSBJUlFfREI4NTAwX0hTSVJfQ0g0X09WUlJVTgkoSVJRX1NIUElfU1RBUlQgKyAzNikKKyNkZWZpbmUgSVJRX0RCODUwMF9IU0lSX0NINV9PVlJSVU4JKElSUV9TSFBJX1NUQVJUICsgMzcpCisjZGVmaW5lIElSUV9EQjg1MDBfSFNJUl9DSDZfT1ZSUlVOCShJUlFfU0hQSV9TVEFSVCArIDM4KQorI2RlZmluZSBJUlFfREI4NTAwX0hTSVJfQ0g3X09WUlJVTgkoSVJRX1NIUElfU1RBUlQgKyAzOSkKKyNkZWZpbmUgSVJRX0RCODUwMF9BQjg1MDAJCShJUlFfU0hQSV9TVEFSVCArIDQwKQorI2RlZmluZSBJUlFfREI4NTAwX1NETU1DMgkJKElSUV9TSFBJX1NUQVJUICsgNDEpCisjZGVmaW5lIElSUV9EQjg1MDBfU0lBCQkJKElSUV9TSFBJX1NUQVJUICsgNDIpCisjZGVmaW5lIElSUV9EQjg1MDBfU0lBMgkJCShJUlFfU0hQSV9TVEFSVCArIDQzKQorI2RlZmluZSBJUlFfREI4NTAwX1NWQQkJCShJUlFfU0hQSV9TVEFSVCArIDQ0KQorI2RlZmluZSBJUlFfREI4NTAwX1NWQTIJCQkoSVJRX1NIUElfU1RBUlQgKyA0NSkKKyNkZWZpbmUgSVJRX0RCODUwMF9QUkNNVTAJCShJUlFfU0hQSV9TVEFSVCArIDQ2KQorI2RlZmluZSBJUlFfREI4NTAwX1BSQ01VMQkJKElSUV9TSFBJX1NUQVJUICsgNDcpCisjZGVmaW5lIElSUV9EQjg1MDBfRElTUAkJCShJUlFfU0hQSV9TVEFSVCArIDQ4KQorI2RlZmluZSBJUlFfREI4NTAwX1NQSTMJCQkoSVJRX1NIUElfU1RBUlQgKyA0OSkKKyNkZWZpbmUgSVJRX0RCODUwMF9TRE1NQzEJCShJUlFfU0hQSV9TVEFSVCArIDUwKQorI2RlZmluZSBJUlFfREI4NTAwX0kyQzQJCQkoSVJRX1NIUElfU1RBUlQgKyA1MSkKKyNkZWZpbmUgSVJRX0RCODUwMF9TU1AxCQkJKElSUV9TSFBJX1NUQVJUICsgNTIpCisjZGVmaW5lIElSUV9EQjg1MDBfU0tFCQkJKElSUV9TSFBJX1NUQVJUICsgNTMpCisjZGVmaW5lIElSUV9EQjg1MDBfS0IJCQkoSVJRX1NIUElfU1RBUlQgKyA1NCkKKyNkZWZpbmUgSVJRX0RCODUwMF9JMkMyCQkJKElSUV9TSFBJX1NUQVJUICsgNTUpCisjZGVmaW5lIElSUV9EQjg1MDBfQjJSMgkJCShJUlFfU0hQSV9TVEFSVCArIDU2KQorI2RlZmluZSBJUlFfREI4NTAwX0NSWVAwCQkoSVJRX1NIUElfU1RBUlQgKyA1NykKKyNkZWZpbmUgSVJRX0RCODUwMF9TRE1NQzMJCShJUlFfU0hQSV9TVEFSVCArIDU5KQorI2RlZmluZSBJUlFfREI4NTAwX1NETU1DMAkJKElSUV9TSFBJX1NUQVJUICsgNjApCisjZGVmaW5lIElSUV9EQjg1MDBfSFNFTQkJCShJUlFfU0hQSV9TVEFSVCArIDYxKQorI2RlZmluZSBJUlFfREI4NTAwX01TUDEJCQkoSVJRX1NIUElfU1RBUlQgKyA2MikKKyNkZWZpbmUgSVJRX0RCODUwMF9TQkFHCQkJKElSUV9TSFBJX1NUQVJUICsgNjMpCisjZGVmaW5lIElSUV9EQjg1MDBfU1BJMQkJCShJUlFfU0hQSV9TVEFSVCArIDk2KQorI2RlZmluZSBJUlFfREI4NTAwX1NSUFRJTUVSCQkoSVJRX1NIUElfU1RBUlQgKyA5NykKKyNkZWZpbmUgSVJRX0RCODUwMF9NU1AyCQkJKElSUV9TSFBJX1NUQVJUICsgOTgpCisjZGVmaW5lIElSUV9EQjg1MDBfU0RNTUM0CQkoSVJRX1NIUElfU1RBUlQgKyA5OSkKKyNkZWZpbmUgSVJRX0RCODUwMF9TRE1NQzUJCShJUlFfU0hQSV9TVEFSVCArIDEwMCkKKyNkZWZpbmUgSVJRX0RCODUwMF9IU0lSRDAJCShJUlFfU0hQSV9TVEFSVCArIDEwNCkKKyNkZWZpbmUgSVJRX0RCODUwMF9IU0lSRDEJCShJUlFfU0hQSV9TVEFSVCArIDEwNSkKKyNkZWZpbmUgSVJRX0RCODUwMF9IU0lURDAJCShJUlFfU0hQSV9TVEFSVCArIDEwNikKKyNkZWZpbmUgSVJRX0RCODUwMF9IU0lURDEJCShJUlFfU0hQSV9TVEFSVCArIDEwNykKKyNkZWZpbmUgSVJRX0RCODUwMF9DVEkwCQkJKElSUV9TSFBJX1NUQVJUICsgMTA4KQorI2RlZmluZSBJUlFfREI4NTAwX0NUSTEJCQkoSVJRX1NIUElfU1RBUlQgKyAxMDkpCisjZGVmaW5lIElSUV9EQjg1MDBfSUNOX0VSUgkJKElSUV9TSFBJX1NUQVJUICsgMTEwKQorI2RlZmluZSBJUlFfREI4NTAwX01BTElfUFBNTVUJCShJUlFfU0hQSV9TVEFSVCArIDExMikKKyNkZWZpbmUgSVJRX0RCODUwMF9NQUxJX1BQCQkoSVJRX1NIUElfU1RBUlQgKyAxMTMpCisjZGVmaW5lIElSUV9EQjg1MDBfTUFMSV9HUE1NVQkJKElSUV9TSFBJX1NUQVJUICsgMTE0KQorI2RlZmluZSBJUlFfREI4NTAwX01BTElfR1AJCShJUlFfU0hQSV9TVEFSVCArIDExNSkKKyNkZWZpbmUgSVJRX0RCODUwMF9NQUxJCQkJKElSUV9TSFBJX1NUQVJUICsgMTE2KQorI2RlZmluZSBJUlFfREI4NTAwX1BSQ01VX1NFTQkJKElSUV9TSFBJX1NUQVJUICsgMTE4KQorI2RlZmluZSBJUlFfREI4NTAwX0dQSU8wCQkoSVJRX1NIUElfU1RBUlQgKyAxMTkpCisjZGVmaW5lIElSUV9EQjg1MDBfR1BJTzEJCShJUlFfU0hQSV9TVEFSVCArIDEyMCkKKyNkZWZpbmUgSVJRX0RCODUwMF9HUElPMgkJKElSUV9TSFBJX1NUQVJUICsgMTIxKQorI2RlZmluZSBJUlFfREI4NTAwX0dQSU8zCQkoSVJRX1NIUElfU1RBUlQgKyAxMjIpCisjZGVmaW5lIElSUV9EQjg1MDBfR1BJTzQJCShJUlFfU0hQSV9TVEFSVCArIDEyMykKKyNkZWZpbmUgSVJRX0RCODUwMF9HUElPNQkJKElSUV9TSFBJX1NUQVJUICsgMTI0KQorI2RlZmluZSBJUlFfREI4NTAwX0dQSU82CQkoSVJRX1NIUElfU1RBUlQgKyAxMjUpCisjZGVmaW5lIElSUV9EQjg1MDBfR1BJTzcJCShJUlFfU0hQSV9TVEFSVCArIDEyNikKKyNkZWZpbmUgSVJRX0RCODUwMF9HUElPOAkJKElSUV9TSFBJX1NUQVJUICsgMTI3KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2lycXMuaAppbmRleCA3OTcwNjg0Li4xMDM4NWJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0xMCw3ICsxMCw4IEBACiAjaWZuZGVmIEFTTV9BUkNIX0lSUVNfSAogI2RlZmluZSBBU01fQVJDSF9JUlFTX0gKIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMtZGI1NTAwLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLWRiODUwMC5oPgogCiAjZGVmaW5lIElSUV9MT0NBTFRJTUVSICAgICAgICAgICAgICAgICAgMjkKICNkZWZpbmUgSVJRX0xPQ0FMV0RPRyAgICAgICAgICAgICAgICAgICAzMApAQCAtNjcsMTIgKzY4LDIxIEBACiAvKiBUaGVyZSBhcmUgMTI4IHNoYXJlZCBwZXJpcGhlcmFsIGludGVycnVwdHMgYXNzaWduZWQgdG8KICAqIElOVElEWzE2MDozMl0uIFRoZSBmaXJzdCAzMiBpbnRlcnJ1cHRzIGFyZSByZXNlcnZlZC4KICAqLwotI2RlZmluZSBVODUwMF9TT0NfTlJfSVJRUwkJMTYxCisjZGVmaW5lIERCWDUwMF9OUl9JTlRFUk5BTF9JUlFTCQkxNjEKIAogLyogQWZ0ZXIgY2hpcC1zcGVjaWZpYyBJUlEgbnVtYmVycyB3ZSBoYXZlIHRoZSBHUElPIG9uZXMgKi8KICNkZWZpbmUgTk9NQURJS19OUl9HUElPCQkJMjg4Ci0jZGVmaW5lIE5PTUFESUtfR1BJT19UT19JUlEoZ3BpbykJKChncGlvKSArIFU4NTAwX1NPQ19OUl9JUlFTKQotI2RlZmluZSBOT01BRElLX0lSUV9UT19HUElPKGlycSkJKChpcnEpIC0gVTg1MDBfU09DX05SX0lSUVMpCi0jZGVmaW5lIE5SX0lSUVMJCQkJTk9NQURJS19HUElPX1RPX0lSUShOT01BRElLX05SX0dQSU8pCisjZGVmaW5lIE5PTUFESUtfR1BJT19UT19JUlEoZ3BpbykJKChncGlvKSArIERCWDUwMF9OUl9JTlRFUk5BTF9JUlFTKQorI2RlZmluZSBOT01BRElLX0lSUV9UT19HUElPKGlycSkJKChpcnEpIC0gREJYNTAwX05SX0lOVEVSTkFMX0lSUVMpCisjZGVmaW5lIElSUV9CT0FSRF9TVEFSVAkJCU5PTUFESUtfR1BJT19UT19JUlEoTk9NQURJS19OUl9HUElPKQogCi0jZW5kaWYgLypBU01fQVJDSF9JUlFTX0gqLworLyogVGhpcyB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgYm9hcmQtc3BlY2lmaWMgaXJxIGhlYWRlcnMgKi8KKyNkZWZpbmUgSVJRX0JPQVJEX0VORAkJCUlSUV9CT0FSRF9TVEFSVAorCisjaWZkZWYgQ09ORklHX01BQ0hfVTg1MDBfTU9QCisjaW5jbHVkZSA8bWFjaC9pcnFzLWJvYXJkLW1vcDUwMC5oPgorI2VuZGlmCisKKyNkZWZpbmUgTlJfSVJRUwkJCQlJUlFfQk9BUkRfRU5ECisKKyNlbmRpZiAvKiBBU01fQVJDSF9JUlFTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAppbmRleCA4NTUyZWIxLi4wMjcxY2EwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCkBAIC0zMCwyMiArMzAsMjIgQEAKIHN0YXRpYyB2b2lkIHB1dGMoY29uc3QgY2hhciBjKQogewogCS8qIERvIG5vdGhpbmcgaWYgdGhlIFVBUlQgaXMgbm90IGVuYWJsZWQuICovCi0JaWYgKCEocmVhZGIoVTg1MDBfVUFSVF9DUikgJiAweDEpKQorCWlmICghKF9fcmF3X3JlYWRiKFU4NTAwX1VBUlRfQ1IpICYgMHgxKSkKIAkJcmV0dXJuOwogCiAJaWYgKGMgPT0gJ1xuJykKIAkJcHV0YygnXHInKTsKIAotCXdoaWxlIChyZWFkYihVODUwMF9VQVJUX0ZSKSAmICgxIDw8IDUpKQorCXdoaWxlIChfX3Jhd19yZWFkYihVODUwMF9VQVJUX0ZSKSAmICgxIDw8IDUpKQogCQliYXJyaWVyKCk7Ci0Jd3JpdGViKGMsIFU4NTAwX1VBUlRfRFIpOworCV9fcmF3X3dyaXRlYihjLCBVODUwMF9VQVJUX0RSKTsKIH0KIAogc3RhdGljIHZvaWQgZmx1c2godm9pZCkKIHsKLQlpZiAoIShyZWFkYihVODUwMF9VQVJUX0NSKSAmIDB4MSkpCisJaWYgKCEoX19yYXdfcmVhZGIoVTg1MDBfVUFSVF9DUikgJiAweDEpKQogCQlyZXR1cm47Ci0Jd2hpbGUgKHJlYWRiKFU4NTAwX1VBUlRfRlIpICYgKDEgPDwgMykpCisJd2hpbGUgKF9fcmF3X3JlYWRiKFU4NTAwX1VBUlRfRlIpICYgKDEgPDwgMykpCiAJCWJhcnJpZXIoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9waW5zLWRiODUwMC5oIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9waW5zLWRiODUwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNTVkNWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL3BpbnMtZGI4NTAwLmgKQEAgLTAsMCArMSw3NDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFNULUVyaWNzc29uIFNBIDIwMTAKKyAqCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyCisgKiBBdXRob3I6IFJhYmluIFZpbmNlbnQgPHJhYmluLnZpbmNlbnRAc3Rlcmljc3Nvbi5jb20+CisgKi8KKworI2lmbmRlZiBfX01BQ0hfUElOU19EQjg1MDBfSAorI2RlZmluZSBfX01BQ0hfUElOU19EQjg1MDBfSAorCisvKgorICogVE9ETzogRXZlbnR1YWxseSBlbmNvZGUgYWxsIG5vbi1ib2FyZCBzcGVjaWZpYyBwdWxsIHVwL2Rvd24gY29uZmlndXJhdGlvbgorICogaGVyZS4KKyAqLworCisjZGVmaW5lIEdQSU8wX0dQSU8JCVBJTl9DRkcoMCwgR1BJTykKKyNkZWZpbmUgR1BJTzBfVTBfQ1RTbgkJUElOX0NGRygwLCBBTFRfQSkKKyNkZWZpbmUgR1BJTzBfVFJJR19PVVQJCVBJTl9DRkcoMCwgQUxUX0IpCisjZGVmaW5lIEdQSU8wX0lQX1RETwkJUElOX0NGRygwLCBBTFRfQykKKworI2RlZmluZSBHUElPMV9HUElPCQlQSU5fQ0ZHKDEsIEdQSU8pCisjZGVmaW5lIEdQSU8xX1UwX1JUU24JCVBJTl9DRkcoMSwgQUxUX0EpCisjZGVmaW5lIEdQSU8xX1RSSUdfSU4JCVBJTl9DRkcoMSwgQUxUX0IpCisjZGVmaW5lIEdQSU8xX0lQX1RESQkJUElOX0NGRygxLCBBTFRfQykKKworI2RlZmluZSBHUElPMl9HUElPCQlQSU5fQ0ZHKDIsIEdQSU8pCisjZGVmaW5lIEdQSU8yX1UwX1JYRAkJUElOX0NGRygyLCBBTFRfQSkKKyNkZWZpbmUgR1BJTzJfTk9ORQkJUElOX0NGRygyLCBBTFRfQikKKyNkZWZpbmUgR1BJTzJfSVBfVE1TCQlQSU5fQ0ZHKDIsIEFMVF9DKQorCisjZGVmaW5lIEdQSU8zX0dQSU8JCVBJTl9DRkcoMywgR1BJTykKKyNkZWZpbmUgR1BJTzNfVTBfVFhECQlQSU5fQ0ZHKDMsIEFMVF9BKQorI2RlZmluZSBHUElPM19OT05FCQlQSU5fQ0ZHKDMsIEFMVF9CKQorI2RlZmluZSBHUElPM19JUF9UQ0sJCVBJTl9DRkcoMywgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzRfR1BJTwkJUElOX0NGRyg0LCBHUElPKQorI2RlZmluZSBHUElPNF9VMV9SWEQJCVBJTl9DRkcoNCwgQUxUX0EpCisjZGVmaW5lIEdQSU80X0kyQzRfU0NMCQlQSU5fQ0ZHX1BVTEwoNCwgQUxUX0IsIFVQKQorI2RlZmluZSBHUElPNF9JUF9UUlNUbgkJUElOX0NGRyg0LCBBTFRfQykKKworI2RlZmluZSBHUElPNV9HUElPCQlQSU5fQ0ZHKDUsIEdQSU8pCisjZGVmaW5lIEdQSU81X1UxX1RYRAkJUElOX0NGRyg1LCBBTFRfQSkKKyNkZWZpbmUgR1BJTzVfSTJDNF9TREEJCVBJTl9DRkdfUFVMTCg1LCBBTFRfQiwgVVApCisjZGVmaW5lIEdQSU81X0lQX0dQSU82CQlQSU5fQ0ZHKDUsIEFMVF9DKQorCisjZGVmaW5lIEdQSU82X0dQSU8JCVBJTl9DRkcoNiwgR1BJTykKKyNkZWZpbmUgR1BJTzZfVTFfQ1RTbgkJUElOX0NGRyg2LCBBTFRfQSkKKyNkZWZpbmUgR1BJTzZfSTJDMV9TQ0wJCVBJTl9DRkdfUFVMTCg2LCBBTFRfQiwgVVApCisjZGVmaW5lIEdQSU82X0lQX0dQSU8wCQlQSU5fQ0ZHKDYsIEFMVF9DKQorCisjZGVmaW5lIEdQSU83X0dQSU8JCVBJTl9DRkcoNywgR1BJTykKKyNkZWZpbmUgR1BJTzdfVTFfUlRTbgkJUElOX0NGRyg3LCBBTFRfQSkKKyNkZWZpbmUgR1BJTzdfSTJDMV9TREEJCVBJTl9DRkdfUFVMTCg3LCBBTFRfQiwgVVApCisjZGVmaW5lIEdQSU83X0lQX0dQSU8xCQlQSU5fQ0ZHKDcsIEFMVF9DKQorCisjZGVmaW5lIEdQSU84X0dQSU8JCVBJTl9DRkcoOCwgR1BJTykKKyNkZWZpbmUgR1BJTzhfSVBJMkNfU0RBCQlQSU5fQ0ZHX1BVTEwoOCwgQUxUX0EsIFVQKQorI2RlZmluZSBHUElPOF9JMkMyX1NEQQkJUElOX0NGR19QVUxMKDgsIEFMVF9CLCBVUCkKKworI2RlZmluZSBHUElPOV9HUElPCQlQSU5fQ0ZHKDksIEdQSU8pCisjZGVmaW5lIEdQSU85X0lQSTJDX1NDTAkJUElOX0NGR19QVUxMKDksIEFMVF9BLCBVUCkKKyNkZWZpbmUgR1BJTzlfSTJDMl9TQ0wJCVBJTl9DRkdfUFVMTCg5LCBBTFRfQiwgVVApCisKKyNkZWZpbmUgR1BJTzEwX0dQSU8JCVBJTl9DRkcoMTAsIEdQSU8pCisjZGVmaW5lIEdQSU8xMF9JUEkyQ19TREEJUElOX0NGR19QVUxMKDEwLCBBTFRfQSwgVVApCisjZGVmaW5lIEdQSU8xMF9JMkMyX1NEQQkJUElOX0NGR19QVUxMKDEwLCBBTFRfQiwgVVApCisjZGVmaW5lIEdQSU8xMF9JUF9HUElPMwkJUElOX0NGRygxMCwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzExX0dQSU8JCVBJTl9DRkcoMTEsIEdQSU8pCisjZGVmaW5lIEdQSU8xMV9JUEkyQ19TQ0wJUElOX0NGR19QVUxMKDExLCBBTFRfQSwgVVApCisjZGVmaW5lIEdQSU8xMV9JMkMyX1NDTAkJUElOX0NGR19QVUxMKDExLCBBTFRfQiwgVVApCisjZGVmaW5lIEdQSU8xMV9JUF9HUElPMgkJUElOX0NGRygxMSwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzEyX0dQSU8JCVBJTl9DRkcoMTIsIEdQSU8pCisjZGVmaW5lIEdQSU8xMl9NU1AwX1RYRAkJUElOX0NGRygxMiwgQUxUX0EpCisjZGVmaW5lIEdQSU8xMl9NU1AwX1JYRAkJUElOX0NGRygxMiwgQUxUX0IpCisKKyNkZWZpbmUgR1BJTzEzX0dQSU8JCVBJTl9DRkcoMTMsIEdQSU8pCisjZGVmaW5lIEdQSU8xM19NU1AwX1RGUwkJUElOX0NGRygxMywgQUxUX0EpCisKKyNkZWZpbmUgR1BJTzE0X0dQSU8JCVBJTl9DRkcoMTQsIEdQSU8pCisjZGVmaW5lIEdQSU8xNF9NU1AwX1RDSwkJUElOX0NGRygxNCwgQUxUX0EpCisKKyNkZWZpbmUgR1BJTzE1X0dQSU8JCVBJTl9DRkcoMTUsIEdQSU8pCisjZGVmaW5lIEdQSU8xNV9NU1AwX1JYRAkJUElOX0NGRygxNSwgQUxUX0EpCisjZGVmaW5lIEdQSU8xNV9NU1AwX1RYRAkJUElOX0NGRygxNSwgQUxUX0IpCisKKyNkZWZpbmUgR1BJTzE2X0dQSU8JCVBJTl9DRkcoMTYsIEdQSU8pCisjZGVmaW5lIEdQSU8xNl9NU1AwX1JGUwkJUElOX0NGRygxNiwgQUxUX0EpCisjZGVmaW5lIEdQSU8xNl9JMkMxX1NDTAkJUElOX0NGR19QVUxMKDE2LCBBTFRfQiwgVVApCisjZGVmaW5lIEdQSU8xNl9TTElNMF9EQVQJUElOX0NGRygxNiwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzE3X0dQSU8JCVBJTl9DRkcoMTcsIEdQSU8pCisjZGVmaW5lIEdQSU8xN19NU1AwX1JDSwkJUElOX0NGRygxNywgQUxUX0EpCisjZGVmaW5lIEdQSU8xN19JMkMxX1NEQQkJUElOX0NGR19QVUxMKDE3LCBBTFRfQiwgVVApCisjZGVmaW5lIEdQSU8xN19TTElNMF9DTEsJUElOX0NGRygxNywgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzE4X0dQSU8JCVBJTl9DRkcoMTgsIEdQSU8pCisjZGVmaW5lIEdQSU8xOF9NQzBfQ01ERElSCVBJTl9DRkcoMTgsIEFMVF9BKQorI2RlZmluZSBHUElPMThfVTJfUlhECQlQSU5fQ0ZHKDE4LCBBTFRfQikKKyNkZWZpbmUgR1BJTzE4X01TX0lFUAkJUElOX0NGRygxOCwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzE5X0dQSU8JCVBJTl9DRkcoMTksIEdQSU8pCisjZGVmaW5lIEdQSU8xOV9NQzBfREFUMERJUglQSU5fQ0ZHKDE5LCBBTFRfQSkKKyNkZWZpbmUgR1BJTzE5X1UyX1RYRAkJUElOX0NGRygxOSwgQUxUX0IpCisjZGVmaW5lIEdQSU8xOV9NU19EQVQwRElSCVBJTl9DRkcoMTksIEFMVF9DKQorCisjZGVmaW5lIEdQSU8yMF9HUElPCQlQSU5fQ0ZHKDIwLCBHUElPKQorI2RlZmluZSBHUElPMjBfTUMwX0RBVDJESVIJUElOX0NGRygyMCwgQUxUX0EpCisjZGVmaW5lIEdQSU8yMF9VQVJUTU9EX1RYRAlQSU5fQ0ZHKDIwLCBBTFRfQikKKyNkZWZpbmUgR1BJTzIwX0lQX1RSSUdPVVQJUElOX0NGRygyMCwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzIxX0dQSU8JCVBJTl9DRkcoMjEsIEdQSU8pCisjZGVmaW5lIEdQSU8yMV9NQzBfREFUMzFESVIJUElOX0NGRygyMSwgQUxUX0EpCisjZGVmaW5lIEdQSU8yMV9NU1AwX1NDSwkJUElOX0NGRygyMSwgQUxUX0IpCisjZGVmaW5lIEdQSU8yMV9NU19EQVQzMURJUglQSU5fQ0ZHKDIxLCBBTFRfQykKKworI2RlZmluZSBHUElPMjJfR1BJTwkJUElOX0NGRygyMiwgR1BJTykKKyNkZWZpbmUgR1BJTzIyX01DMF9GQkNMSwlQSU5fQ0ZHKDIyLCBBTFRfQSkKKyNkZWZpbmUgR1BJTzIyX1VBUlRNT0RfUlhECVBJTl9DRkcoMjIsIEFMVF9CKQorI2RlZmluZSBHUElPMjJfTVNfRkJDTEsJCVBJTl9DRkcoMjIsIEFMVF9DKQorCisjZGVmaW5lIEdQSU8yM19HUElPCQlQSU5fQ0ZHKDIzLCBHUElPKQorI2RlZmluZSBHUElPMjNfTUMwX0NMSwkJUElOX0NGRygyMywgQUxUX0EpCisjZGVmaW5lIEdQSU8yM19TVE1NT0RfQ0xLCVBJTl9DRkcoMjMsIEFMVF9CKQorI2RlZmluZSBHUElPMjNfTVNfQ0xLCQlQSU5fQ0ZHKDIzLCBBTFRfQykKKworI2RlZmluZSBHUElPMjRfR1BJTwkJUElOX0NGRygyNCwgR1BJTykKKyNkZWZpbmUgR1BJTzI0X01DMF9DTUQJCVBJTl9DRkcoMjQsIEFMVF9BKQorI2RlZmluZSBHUElPMjRfVUFSVE1PRF9SWEQJUElOX0NGRygyNCwgQUxUX0IpCisjZGVmaW5lIEdQSU8yNF9NU19CUwkJUElOX0NGRygyNCwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzI1X0dQSU8JCVBJTl9DRkcoMjUsIEdQSU8pCisjZGVmaW5lIEdQSU8yNV9NQzBfREFUMAkJUElOX0NGRygyNSwgQUxUX0EpCisjZGVmaW5lIEdQSU8yNV9TVE1NT0RfREFUMAlQSU5fQ0ZHKDI1LCBBTFRfQikKKyNkZWZpbmUgR1BJTzI1X01TX0RBVDAJCVBJTl9DRkcoMjUsIEFMVF9DKQorCisjZGVmaW5lIEdQSU8yNl9HUElPCQlQSU5fQ0ZHKDI2LCBHUElPKQorI2RlZmluZSBHUElPMjZfTUMwX0RBVDEJCVBJTl9DRkcoMjYsIEFMVF9BKQorI2RlZmluZSBHUElPMjZfU1RNTU9EX0RBVDEJUElOX0NGRygyNiwgQUxUX0IpCisjZGVmaW5lIEdQSU8yNl9NU19EQVQxCQlQSU5fQ0ZHKDI2LCBBTFRfQykKKworI2RlZmluZSBHUElPMjdfR1BJTwkJUElOX0NGRygyNywgR1BJTykKKyNkZWZpbmUgR1BJTzI3X01DMF9EQVQyCQlQSU5fQ0ZHKDI3LCBBTFRfQSkKKyNkZWZpbmUgR1BJTzI3X1NUTU1PRF9EQVQyCVBJTl9DRkcoMjcsIEFMVF9CKQorI2RlZmluZSBHUElPMjdfTVNfREFUMgkJUElOX0NGRygyNywgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzI4X0dQSU8JCVBJTl9DRkcoMjgsIEdQSU8pCisjZGVmaW5lIEdQSU8yOF9NQzBfREFUMwkJUElOX0NGRygyOCwgQUxUX0EpCisjZGVmaW5lIEdQSU8yOF9TVE1NT0RfREFUMwlQSU5fQ0ZHKDI4LCBBTFRfQikKKyNkZWZpbmUgR1BJTzI4X01TX0RBVDMJCVBJTl9DRkcoMjgsIEFMVF9DKQorCisjZGVmaW5lIEdQSU8yOV9HUElPCQlQSU5fQ0ZHKDI5LCBHUElPKQorI2RlZmluZSBHUElPMjlfTUMwX0RBVDQJCVBJTl9DRkcoMjksIEFMVF9BKQorI2RlZmluZSBHUElPMjlfU1BJM19DTEsJCVBJTl9DRkcoMjksIEFMVF9CKQorI2RlZmluZSBHUElPMjlfVTJfUlhECQlQSU5fQ0ZHKDI5LCBBTFRfQykKKworI2RlZmluZSBHUElPMzBfR1BJTwkJUElOX0NGRygzMCwgR1BJTykKKyNkZWZpbmUgR1BJTzMwX01DMF9EQVQ1CQlQSU5fQ0ZHKDMwLCBBTFRfQSkKKyNkZWZpbmUgR1BJTzMwX1NQSTNfUlhECQlQSU5fQ0ZHKDMwLCBBTFRfQikKKyNkZWZpbmUgR1BJTzMwX1UyX1RYRAkJUElOX0NGRygzMCwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzMxX0dQSU8JCVBJTl9DRkcoMzEsIEdQSU8pCisjZGVmaW5lIEdQSU8zMV9NQzBfREFUNgkJUElOX0NGRygzMSwgQUxUX0EpCisjZGVmaW5lIEdQSU8zMV9TUEkzX0ZSTQkJUElOX0NGRygzMSwgQUxUX0IpCisjZGVmaW5lIEdQSU8zMV9VMl9DVFNuCQlQSU5fQ0ZHKDMxLCBBTFRfQykKKworI2RlZmluZSBHUElPMzJfR1BJTwkJUElOX0NGRygzMiwgR1BJTykKKyNkZWZpbmUgR1BJTzMyX01DMF9EQVQ3CQlQSU5fQ0ZHKDMyLCBBTFRfQSkKKyNkZWZpbmUgR1BJTzMyX1NQSTNfVFhECQlQSU5fQ0ZHKDMyLCBBTFRfQikKKyNkZWZpbmUgR1BJTzMyX1UyX1JUU24JCVBJTl9DRkcoMzIsIEFMVF9DKQorCisjZGVmaW5lIEdQSU8zM19HUElPCQlQSU5fQ0ZHKDMzLCBHUElPKQorI2RlZmluZSBHUElPMzNfTVNQMV9UWEQJCVBJTl9DRkcoMzMsIEFMVF9BKQorI2RlZmluZSBHUElPMzNfTVNQMV9SWEQJCVBJTl9DRkcoMzMsIEFMVF9CKQorI2RlZmluZSBHUElPMzNfVTBfRFRSbgkJUElOX0NGRygzMywgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzM0X0dQSU8JCVBJTl9DRkcoMzQsIEdQSU8pCisjZGVmaW5lIEdQSU8zNF9NU1AxX1RGUwkJUElOX0NGRygzNCwgQUxUX0EpCisjZGVmaW5lIEdQSU8zNF9OT05FCQlQSU5fQ0ZHKDM0LCBBTFRfQikKKyNkZWZpbmUgR1BJTzM0X1UwX0RDRG4JCVBJTl9DRkcoMzQsIEFMVF9DKQorCisjZGVmaW5lIEdQSU8zNV9HUElPCQlQSU5fQ0ZHKDM1LCBHUElPKQorI2RlZmluZSBHUElPMzVfTVNQMV9UQ0sJCVBJTl9DRkcoMzUsIEFMVF9BKQorI2RlZmluZSBHUElPMzVfTk9ORQkJUElOX0NGRygzNSwgQUxUX0IpCisjZGVmaW5lIEdQSU8zNV9VMF9EU1JuCQlQSU5fQ0ZHKDM1LCBBTFRfQykKKworI2RlZmluZSBHUElPMzZfR1BJTwkJUElOX0NGRygzNiwgR1BJTykKKyNkZWZpbmUgR1BJTzM2X01TUDFfUlhECQlQSU5fQ0ZHKDM2LCBBTFRfQSkKKyNkZWZpbmUgR1BJTzM2X01TUDFfVFhECQlQSU5fQ0ZHKDM2LCBBTFRfQikKKyNkZWZpbmUgR1BJTzM2X1UwX1JJbgkJUElOX0NGRygzNiwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzY0X0dQSU8JCVBJTl9DRkcoNjQsIEdQSU8pCisjZGVmaW5lIEdQSU82NF9MQ0RCX0RFCQlQSU5fQ0ZHKDY0LCBBTFRfQSkKKyNkZWZpbmUgR1BJTzY0X0tQX08xCQlQSU5fQ0ZHKDY0LCBBTFRfQikKKyNkZWZpbmUgR1BJTzY0X0lQX0dQSU80CQlQSU5fQ0ZHKDY0LCBBTFRfQykKKworI2RlZmluZSBHUElPNjVfR1BJTwkJUElOX0NGRyg2NSwgR1BJTykKKyNkZWZpbmUgR1BJTzY1X0xDREJfSFNPCQlQSU5fQ0ZHKDY1LCBBTFRfQSkKKyNkZWZpbmUgR1BJTzY1X0tQX08wCQlQSU5fQ0ZHKDY1LCBBTFRfQikKKyNkZWZpbmUgR1BJTzY1X0lQX0dQSU81CQlQSU5fQ0ZHKDY1LCBBTFRfQykKKworI2RlZmluZSBHUElPNjZfR1BJTwkJUElOX0NGRyg2NiwgR1BJTykKKyNkZWZpbmUgR1BJTzY2X0xDREJfVlNPCQlQSU5fQ0ZHKDY2LCBBTFRfQSkKKyNkZWZpbmUgR1BJTzY2X0tQX0kxCQlQSU5fQ0ZHKDY2LCBBTFRfQikKKyNkZWZpbmUgR1BJTzY2X0lQX0dQSU82CQlQSU5fQ0ZHKDY2LCBBTFRfQykKKworI2RlZmluZSBHUElPNjdfR1BJTwkJUElOX0NGRyg2NywgR1BJTykKKyNkZWZpbmUgR1BJTzY3X0xDREJfQ0xLCQlQSU5fQ0ZHKDY3LCBBTFRfQSkKKyNkZWZpbmUgR1BJTzY3X0tQX0kwCQlQSU5fQ0ZHKDY3LCBBTFRfQikKKyNkZWZpbmUgR1BJTzY3X0lQX0dQSU83CQlQSU5fQ0ZHKDY3LCBBTFRfQykKKworI2RlZmluZSBHUElPNjhfR1BJTwkJUElOX0NGRyg2OCwgR1BJTykKKyNkZWZpbmUgR1BJTzY4X0xDRF9WU0kwCQlQSU5fQ0ZHKDY4LCBBTFRfQSkKKyNkZWZpbmUgR1BJTzY4X0tQX083CQlQSU5fQ0ZHKDY4LCBBTFRfQikKKyNkZWZpbmUgR1BJTzY4X1NNX0NMRQkJUElOX0NGRyg2OCwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzY5X0dQSU8JCVBJTl9DRkcoNjksIEdQSU8pCisjZGVmaW5lIEdQSU82OV9MQ0RfVlNJMQkJUElOX0NGRyg2OSwgQUxUX0EpCisjZGVmaW5lIEdQSU82OV9LUF9JNwkJUElOX0NGRyg2OSwgQUxUX0IpCisjZGVmaW5lIEdQSU82OV9TTV9BTEUJCVBJTl9DRkcoNjksIEFMVF9DKQorCisjZGVmaW5lIEdQSU83MF9HUElPCQlQSU5fQ0ZHKDcwLCBHUElPKQorI2RlZmluZSBHUElPNzBfTENEX0QwCQlQSU5fQ0ZHKDcwLCBBTFRfQSkKKyNkZWZpbmUgR1BJTzcwX0tQX081CQlQSU5fQ0ZHKDcwLCBBTFRfQikKKyNkZWZpbmUgR1BJTzcwX1NUTUFQRV9DTEsJUElOX0NGRyg3MCwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzcxX0dQSU8JCVBJTl9DRkcoNzEsIEdQSU8pCisjZGVmaW5lIEdQSU83MV9MQ0RfRDEJCVBJTl9DRkcoNzEsIEFMVF9BKQorI2RlZmluZSBHUElPNzFfS1BfTzQJCVBJTl9DRkcoNzEsIEFMVF9CKQorI2RlZmluZSBHUElPNzFfU1RNQVBFX0RBVDMJUElOX0NGRyg3MSwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzcyX0dQSU8JCVBJTl9DRkcoNzIsIEdQSU8pCisjZGVmaW5lIEdQSU83Ml9MQ0RfRDIJCVBJTl9DRkcoNzIsIEFMVF9BKQorI2RlZmluZSBHUElPNzJfS1BfTzMJCVBJTl9DRkcoNzIsIEFMVF9CKQorI2RlZmluZSBHUElPNzJfU1RNQVBFX0RBVDIJUElOX0NGRyg3MiwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzczX0dQSU8JCVBJTl9DRkcoNzMsIEdQSU8pCisjZGVmaW5lIEdQSU83M19MQ0RfRDMJCVBJTl9DRkcoNzMsIEFMVF9BKQorI2RlZmluZSBHUElPNzNfS1BfTzIJCVBJTl9DRkcoNzMsIEFMVF9CKQorI2RlZmluZSBHUElPNzNfU1RNQVBFX0RBVDEJUElOX0NGRyg3MywgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzc0X0dQSU8JCVBJTl9DRkcoNzQsIEdQSU8pCisjZGVmaW5lIEdQSU83NF9MQ0RfRDQJCVBJTl9DRkcoNzQsIEFMVF9BKQorI2RlZmluZSBHUElPNzRfS1BfSTUJCVBJTl9DRkcoNzQsIEFMVF9CKQorI2RlZmluZSBHUElPNzRfU1RNQVBFX0RBVDAJUElOX0NGRyg3NCwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzc1X0dQSU8JCVBJTl9DRkcoNzUsIEdQSU8pCisjZGVmaW5lIEdQSU83NV9MQ0RfRDUJCVBJTl9DRkcoNzUsIEFMVF9BKQorI2RlZmluZSBHUElPNzVfS1BfSTQJCVBJTl9DRkcoNzUsIEFMVF9CKQorI2RlZmluZSBHUElPNzVfVTJfUlhECQlQSU5fQ0ZHKDc1LCBBTFRfQykKKworI2RlZmluZSBHUElPNzZfR1BJTwkJUElOX0NGRyg3NiwgR1BJTykKKyNkZWZpbmUgR1BJTzc2X0xDRF9ENgkJUElOX0NGRyg3NiwgQUxUX0EpCisjZGVmaW5lIEdQSU83Nl9LUF9JMwkJUElOX0NGRyg3NiwgQUxUX0IpCisjZGVmaW5lIEdQSU83Nl9VMl9UWEQJCVBJTl9DRkcoNzYsIEFMVF9DKQorCisjZGVmaW5lIEdQSU83N19HUElPCQlQSU5fQ0ZHKDc3LCBHUElPKQorI2RlZmluZSBHUElPNzdfTENEX0Q3CQlQSU5fQ0ZHKDc3LCBBTFRfQSkKKyNkZWZpbmUgR1BJTzc3X0tQX0kyCQlQSU5fQ0ZHKDc3LCBBTFRfQikKKyNkZWZpbmUgR1BJTzc3X05PTkUJCVBJTl9DRkcoNzcsIEFMVF9DKQorCisjZGVmaW5lIEdQSU83OF9HUElPCQlQSU5fQ0ZHKDc4LCBHUElPKQorI2RlZmluZSBHUElPNzhfTENEX0Q4CQlQSU5fQ0ZHKDc4LCBBTFRfQSkKKyNkZWZpbmUgR1BJTzc4X0tQX082CQlQSU5fQ0ZHKDc4LCBBTFRfQikKKyNkZWZpbmUgR1BJTzc4X0lQX0dQSU8yCQlQSU5fQ0ZHKDc4LCBBTFRfQykKKworI2RlZmluZSBHUElPNzlfR1BJTwkJUElOX0NGRyg3OSwgR1BJTykKKyNkZWZpbmUgR1BJTzc5X0xDRF9EOQkJUElOX0NGRyg3OSwgQUxUX0EpCisjZGVmaW5lIEdQSU83OV9LUF9JNgkJUElOX0NGRyg3OSwgQUxUX0IpCisjZGVmaW5lIEdQSU83OV9JUF9HUElPMwkJUElOX0NGRyg3OSwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzgwX0dQSU8JCVBJTl9DRkcoODAsIEdQSU8pCisjZGVmaW5lIEdQSU84MF9MQ0RfRDEwCQlQSU5fQ0ZHKDgwLCBBTFRfQSkKKyNkZWZpbmUgR1BJTzgwX0tQX1NLQTAJCVBJTl9DRkcoODAsIEFMVF9CKQorI2RlZmluZSBHUElPODBfSVBfR1BJTzQJCVBJTl9DRkcoODAsIEFMVF9DKQorCisjZGVmaW5lIEdQSU84MV9HUElPCQlQSU5fQ0ZHKDgxLCBHUElPKQorI2RlZmluZSBHUElPODFfTENEX0QxMQkJUElOX0NGRyg4MSwgQUxUX0EpCisjZGVmaW5lIEdQSU84MV9LUF9TS0IwCQlQSU5fQ0ZHKDgxLCBBTFRfQikKKyNkZWZpbmUgR1BJTzgxX0lQX0dQSU81CQlQSU5fQ0ZHKDgxLCBBTFRfQykKKworI2RlZmluZSBHUElPODJfR1BJTwkJUElOX0NGRyg4MiwgR1BJTykKKyNkZWZpbmUgR1BJTzgyX0xDRF9EMTIJCVBJTl9DRkcoODIsIEFMVF9BKQorI2RlZmluZSBHUElPODJfS1BfTzUJCVBJTl9DRkcoODIsIEFMVF9CKQorCisjZGVmaW5lIEdQSU84M19HUElPCQlQSU5fQ0ZHKDgzLCBHUElPKQorI2RlZmluZSBHUElPODNfTENEX0QxMwkJUElOX0NGRyg4MywgQUxUX0EpCisjZGVmaW5lIEdQSU84M19LUF9PNAkJUElOX0NGRyg4MywgQUxUX0IpCisKKyNkZWZpbmUgR1BJTzg0X0dQSU8JCVBJTl9DRkcoODQsIEdQSU8pCisjZGVmaW5lIEdQSU84NF9MQ0RfRDE0CQlQSU5fQ0ZHKDg0LCBBTFRfQSkKKyNkZWZpbmUgR1BJTzg0X0tQX0k1CQlQSU5fQ0ZHKDg0LCBBTFRfQikKKworI2RlZmluZSBHUElPODVfR1BJTwkJUElOX0NGRyg4NSwgR1BJTykKKyNkZWZpbmUgR1BJTzg1X0xDRF9EMTUJCVBJTl9DRkcoODUsIEFMVF9BKQorI2RlZmluZSBHUElPODVfS1BfSTQJCVBJTl9DRkcoODUsIEFMVF9CKQorCisjZGVmaW5lIEdQSU84Nl9HUElPCQlQSU5fQ0ZHKDg2LCBHUElPKQorI2RlZmluZSBHUElPODZfTENEX0QxNgkJUElOX0NGRyg4NiwgQUxUX0EpCisjZGVmaW5lIEdQSU84Nl9TTV9BRFEwCQlQSU5fQ0ZHKDg2LCBBTFRfQikKKyNkZWZpbmUgR1BJTzg2X01DNV9EQVQwCQlQSU5fQ0ZHKDg2LCBBTFRfQykKKworI2RlZmluZSBHUElPODdfR1BJTwkJUElOX0NGRyg4NywgR1BJTykKKyNkZWZpbmUgR1BJTzg3X0xDRF9EMTcJCVBJTl9DRkcoODcsIEFMVF9BKQorI2RlZmluZSBHUElPODdfU01fQURRMQkJUElOX0NGRyg4NywgQUxUX0IpCisjZGVmaW5lIEdQSU84N19NQzVfREFUMQkJUElOX0NGRyg4NywgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzg4X0dQSU8JCVBJTl9DRkcoODgsIEdQSU8pCisjZGVmaW5lIEdQSU84OF9MQ0RfRDE4CQlQSU5fQ0ZHKDg4LCBBTFRfQSkKKyNkZWZpbmUgR1BJTzg4X1NNX0FEUTIJCVBJTl9DRkcoODgsIEFMVF9CKQorI2RlZmluZSBHUElPODhfTUM1X0RBVDIJCVBJTl9DRkcoODgsIEFMVF9DKQorCisjZGVmaW5lIEdQSU84OV9HUElPCQlQSU5fQ0ZHKDg5LCBHUElPKQorI2RlZmluZSBHUElPODlfTENEX0QxOQkJUElOX0NGRyg4OSwgQUxUX0EpCisjZGVmaW5lIEdQSU84OV9TTV9BRFEzCQlQSU5fQ0ZHKDg5LCBBTFRfQikKKyNkZWZpbmUgR1BJTzg5X01DNV9EQVQzCQlQSU5fQ0ZHKDg5LCBBTFRfQykKKworI2RlZmluZSBHUElPOTBfR1BJTwkJUElOX0NGRyg5MCwgR1BJTykKKyNkZWZpbmUgR1BJTzkwX0xDRF9EMjAJCVBJTl9DRkcoOTAsIEFMVF9BKQorI2RlZmluZSBHUElPOTBfU01fQURRNAkJUElOX0NGRyg5MCwgQUxUX0IpCisjZGVmaW5lIEdQSU85MF9NQzVfQ01ECQlQSU5fQ0ZHKDkwLCBBTFRfQykKKworI2RlZmluZSBHUElPOTFfR1BJTwkJUElOX0NGRyg5MSwgR1BJTykKKyNkZWZpbmUgR1BJTzkxX0xDRF9EMjEJCVBJTl9DRkcoOTEsIEFMVF9BKQorI2RlZmluZSBHUElPOTFfU01fQURRNQkJUElOX0NGRyg5MSwgQUxUX0IpCisjZGVmaW5lIEdQSU85MV9NQzVfRkJDTEsJUElOX0NGRyg5MSwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzkyX0dQSU8JCVBJTl9DRkcoOTIsIEdQSU8pCisjZGVmaW5lIEdQSU85Ml9MQ0RfRDIyCQlQSU5fQ0ZHKDkyLCBBTFRfQSkKKyNkZWZpbmUgR1BJTzkyX1NNX0FEUTYJCVBJTl9DRkcoOTIsIEFMVF9CKQorI2RlZmluZSBHUElPOTJfTUM1X0NMSwkJUElOX0NGRyg5MiwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzkzX0dQSU8JCVBJTl9DRkcoOTMsIEdQSU8pCisjZGVmaW5lIEdQSU85M19MQ0RfRDIzCQlQSU5fQ0ZHKDkzLCBBTFRfQSkKKyNkZWZpbmUgR1BJTzkzX1NNX0FEUTcJCVBJTl9DRkcoOTMsIEFMVF9CKQorI2RlZmluZSBHUElPOTNfTUM1X0RBVDQJCVBJTl9DRkcoOTMsIEFMVF9DKQorCisjZGVmaW5lIEdQSU85NF9HUElPCQlQSU5fQ0ZHKDk0LCBHUElPKQorI2RlZmluZSBHUElPOTRfS1BfTzcJCVBJTl9DRkcoOTQsIEFMVF9BKQorI2RlZmluZSBHUElPOTRfU01fQURWbgkJUElOX0NGRyg5NCwgQUxUX0IpCisjZGVmaW5lIEdQSU85NF9NQzVfREFUNQkJUElOX0NGRyg5NCwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzk1X0dQSU8JCVBJTl9DRkcoOTUsIEdQSU8pCisjZGVmaW5lIEdQSU85NV9LUF9JNwkJUElOX0NGRyg5NSwgQUxUX0EpCisjZGVmaW5lIEdQSU85NV9TTV9DUzBuCQlQSU5fQ0ZHKDk1LCBBTFRfQikKKyNkZWZpbmUgR1BJTzk1X1NNX1BTMG4JCVBJTl9DRkcoOTUsIEFMVF9DKQorCisjZGVmaW5lIEdQSU85Nl9HUElPCQlQSU5fQ0ZHKDk2LCBHUElPKQorI2RlZmluZSBHUElPOTZfS1BfTzYJCVBJTl9DRkcoOTYsIEFMVF9BKQorI2RlZmluZSBHUElPOTZfU01fT0VuCQlQSU5fQ0ZHKDk2LCBBTFRfQikKKyNkZWZpbmUgR1BJTzk2X01DNV9EQVQ2CQlQSU5fQ0ZHKDk2LCBBTFRfQykKKworI2RlZmluZSBHUElPOTdfR1BJTwkJUElOX0NGRyg5NywgR1BJTykKKyNkZWZpbmUgR1BJTzk3X0tQX0k2CQlQSU5fQ0ZHKDk3LCBBTFRfQSkKKyNkZWZpbmUgR1BJTzk3X1NNX1dFbgkJUElOX0NGRyg5NywgQUxUX0IpCisjZGVmaW5lIEdQSU85N19NQzVfREFUNwkJUElOX0NGRyg5NywgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzEyOF9HUElPCQlQSU5fQ0ZHKDEyOCwgR1BJTykKKyNkZWZpbmUgR1BJTzEyOF9NQzJfQ0xLCQlQSU5fQ0ZHKDEyOCwgQUxUX0EpCisjZGVmaW5lIEdQSU8xMjhfU01fQ0tPCQlQSU5fQ0ZHKDEyOCwgQUxUX0IpCisKKyNkZWZpbmUgR1BJTzEyOV9HUElPCQlQSU5fQ0ZHKDEyOSwgR1BJTykKKyNkZWZpbmUgR1BJTzEyOV9NQzJfQ01ECQlQSU5fQ0ZHKDEyOSwgQUxUX0EpCisjZGVmaW5lIEdQSU8xMjlfU01fV0FJVDBuCVBJTl9DRkcoMTI5LCBBTFRfQikKKworI2RlZmluZSBHUElPMTMwX0dQSU8JCVBJTl9DRkcoMTMwLCBHUElPKQorI2RlZmluZSBHUElPMTMwX01DMl9GQkNMSwlQSU5fQ0ZHKDEzMCwgQUxUX0EpCisjZGVmaW5lIEdQSU8xMzBfU01fRkJDTEsJUElOX0NGRygxMzAsIEFMVF9CKQorI2RlZmluZSBHUElPMTMwX01DMl9SU1ROCVBJTl9DRkcoMTMwLCBBTFRfQykKKworI2RlZmluZSBHUElPMTMxX0dQSU8JCVBJTl9DRkcoMTMxLCBHUElPKQorI2RlZmluZSBHUElPMTMxX01DMl9EQVQwCVBJTl9DRkcoMTMxLCBBTFRfQSkKKyNkZWZpbmUgR1BJTzEzMV9TTV9BRFE4CQlQSU5fQ0ZHKDEzMSwgQUxUX0IpCisKKyNkZWZpbmUgR1BJTzEzMl9HUElPCQlQSU5fQ0ZHKDEzMiwgR1BJTykKKyNkZWZpbmUgR1BJTzEzMl9NQzJfREFUMQlQSU5fQ0ZHKDEzMiwgQUxUX0EpCisjZGVmaW5lIEdQSU8xMzJfU01fQURROQkJUElOX0NGRygxMzIsIEFMVF9CKQorCisjZGVmaW5lIEdQSU8xMzNfR1BJTwkJUElOX0NGRygxMzMsIEdQSU8pCisjZGVmaW5lIEdQSU8xMzNfTUMyX0RBVDIJUElOX0NGRygxMzMsIEFMVF9BKQorI2RlZmluZSBHUElPMTMzX1NNX0FEUTEwCVBJTl9DRkcoMTMzLCBBTFRfQikKKworI2RlZmluZSBHUElPMTM0X0dQSU8JCVBJTl9DRkcoMTM0LCBHUElPKQorI2RlZmluZSBHUElPMTM0X01DMl9EQVQzCVBJTl9DRkcoMTM0LCBBTFRfQSkKKyNkZWZpbmUgR1BJTzEzNF9TTV9BRFExMQlQSU5fQ0ZHKDEzNCwgQUxUX0IpCisKKyNkZWZpbmUgR1BJTzEzNV9HUElPCQlQSU5fQ0ZHKDEzNSwgR1BJTykKKyNkZWZpbmUgR1BJTzEzNV9NQzJfREFUNAlQSU5fQ0ZHKDEzNSwgQUxUX0EpCisjZGVmaW5lIEdQSU8xMzVfU01fQURRMTIJUElOX0NGRygxMzUsIEFMVF9CKQorCisjZGVmaW5lIEdQSU8xMzZfR1BJTwkJUElOX0NGRygxMzYsIEdQSU8pCisjZGVmaW5lIEdQSU8xMzZfTUMyX0RBVDUJUElOX0NGRygxMzYsIEFMVF9BKQorI2RlZmluZSBHUElPMTM2X1NNX0FEUTEzCVBJTl9DRkcoMTM2LCBBTFRfQikKKworI2RlZmluZSBHUElPMTM3X0dQSU8JCVBJTl9DRkcoMTM3LCBHUElPKQorI2RlZmluZSBHUElPMTM3X01DMl9EQVQ2CVBJTl9DRkcoMTM3LCBBTFRfQSkKKyNkZWZpbmUgR1BJTzEzN19TTV9BRFExNAlQSU5fQ0ZHKDEzNywgQUxUX0IpCisKKyNkZWZpbmUgR1BJTzEzOF9HUElPCQlQSU5fQ0ZHKDEzOCwgR1BJTykKKyNkZWZpbmUgR1BJTzEzOF9NQzJfREFUNwlQSU5fQ0ZHKDEzOCwgQUxUX0EpCisjZGVmaW5lIEdQSU8xMzhfU01fQURRMTUJUElOX0NGRygxMzgsIEFMVF9CKQorCisjZGVmaW5lIEdQSU8xMzlfR1BJTwkJUElOX0NGRygxMzksIEdQSU8pCisjZGVmaW5lIEdQSU8xMzlfU1NQMV9SWEQJUElOX0NGRygxMzksIEFMVF9BKQorI2RlZmluZSBHUElPMTM5X1NNX1dBSVQxbglQSU5fQ0ZHKDEzOSwgQUxUX0IpCisjZGVmaW5lIEdQSU8xMzlfS1BfTzgJCVBJTl9DRkcoMTM5LCBBTFRfQykKKworI2RlZmluZSBHUElPMTQwX0dQSU8JCVBJTl9DRkcoMTQwLCBHUElPKQorI2RlZmluZSBHUElPMTQwX1NTUDFfVFhECVBJTl9DRkcoMTQwLCBBTFRfQSkKKyNkZWZpbmUgR1BJTzE0MF9JUF9HUElPNwlQSU5fQ0ZHKDE0MCwgQUxUX0IpCisjZGVmaW5lIEdQSU8xNDBfS1BfU0tBMQkJUElOX0NGRygxNDAsIEFMVF9DKQorCisjZGVmaW5lIEdQSU8xNDFfR1BJTwkJUElOX0NGRygxNDEsIEdQSU8pCisjZGVmaW5lIEdQSU8xNDFfU1NQMV9DTEsJUElOX0NGRygxNDEsIEFMVF9BKQorI2RlZmluZSBHUElPMTQxX0lQX0dQSU8yCVBJTl9DRkcoMTQxLCBBTFRfQikKKyNkZWZpbmUgR1BJTzE0MV9LUF9POQkJUElOX0NGRygxNDEsIEFMVF9DKQorCisjZGVmaW5lIEdQSU8xNDJfR1BJTwkJUElOX0NGRygxNDIsIEdQSU8pCisjZGVmaW5lIEdQSU8xNDJfU1NQMV9GUk0JUElOX0NGRygxNDIsIEFMVF9BKQorI2RlZmluZSBHUElPMTQyX0lQX0dQSU8zCVBJTl9DRkcoMTQyLCBBTFRfQikKKyNkZWZpbmUgR1BJTzE0Ml9LUF9TS0IxCQlQSU5fQ0ZHKDE0MiwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzE0M19HUElPCQlQSU5fQ0ZHKDE0MywgR1BJTykKKyNkZWZpbmUgR1BJTzE0M19TU1AwX0NMSwlQSU5fQ0ZHKDE0MywgQUxUX0EpCisKKyNkZWZpbmUgR1BJTzE0NF9HUElPCQlQSU5fQ0ZHKDE0NCwgR1BJTykKKyNkZWZpbmUgR1BJTzE0NF9TU1AwX0ZSTQlQSU5fQ0ZHKDE0NCwgQUxUX0EpCisKKyNkZWZpbmUgR1BJTzE0NV9HUElPCQlQSU5fQ0ZHKDE0NSwgR1BJTykKKyNkZWZpbmUgR1BJTzE0NV9TU1AwX1JYRAlQSU5fQ0ZHKDE0NSwgQUxUX0EpCisKKyNkZWZpbmUgR1BJTzE0Nl9HUElPCQlQSU5fQ0ZHKDE0NiwgR1BJTykKKyNkZWZpbmUgR1BJTzE0Nl9TU1AwX1RYRAlQSU5fQ0ZHKDE0NiwgQUxUX0EpCisKKyNkZWZpbmUgR1BJTzE0N19HUElPCQlQSU5fQ0ZHKDE0NywgR1BJTykKKyNkZWZpbmUgR1BJTzE0N19JMkMwX1NDTAlQSU5fQ0ZHX1BVTEwoMTQ3LCBBTFRfQSwgVVApCisKKyNkZWZpbmUgR1BJTzE0OF9HUElPCQlQSU5fQ0ZHKDE0OCwgR1BJTykKKyNkZWZpbmUgR1BJTzE0OF9JMkMwX1NEQQlQSU5fQ0ZHX1BVTEwoMTQ4LCBBTFRfQSwgVVApCisKKyNkZWZpbmUgR1BJTzE0OV9HUElPCQlQSU5fQ0ZHKDE0OSwgR1BJTykKKyNkZWZpbmUgR1BJTzE0OV9JUF9HUElPMAlQSU5fQ0ZHKDE0OSwgQUxUX0EpCisjZGVmaW5lIEdQSU8xNDlfU01fQ1MxbgkJUElOX0NGRygxNDksIEFMVF9CKQorI2RlZmluZSBHUElPMTQ5X1NNX1BTMW4JCVBJTl9DRkcoMTQ5LCBBTFRfQykKKworI2RlZmluZSBHUElPMTUwX0dQSU8JCVBJTl9DRkcoMTUwLCBHUElPKQorI2RlZmluZSBHUElPMTUwX0lQX0dQSU8xCVBJTl9DRkcoMTUwLCBBTFRfQSkKKyNkZWZpbmUgR1BJTzE1MF9MQ0RBX0NMSwlQSU5fQ0ZHKDE1MCwgQUxUX0IpCisKKyNkZWZpbmUgR1BJTzE1MV9HUElPCQlQSU5fQ0ZHKDE1MSwgR1BJTykKKyNkZWZpbmUgR1BJTzE1MV9LUF9TS0EwCQlQSU5fQ0ZHKDE1MSwgQUxUX0EpCisjZGVmaW5lIEdQSU8xNTFfTENEX1ZTSTAJUElOX0NGRygxNTEsIEFMVF9CKQorI2RlZmluZSBHUElPMTUxX0tQX084CQlQSU5fQ0ZHKDE1MSwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzE1Ml9HUElPCQlQSU5fQ0ZHKDE1MiwgR1BJTykKKyNkZWZpbmUgR1BJTzE1Ml9LUF9TS0IwCQlQSU5fQ0ZHKDE1MiwgQUxUX0EpCisjZGVmaW5lIEdQSU8xNTJfTENEX1ZTSTEJUElOX0NGRygxNTIsIEFMVF9CKQorI2RlZmluZSBHUElPMTUyX0tQX085CQlQSU5fQ0ZHKDE1MiwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzE1M19HUElPCQlQSU5fQ0ZHKDE1MywgR1BJTykKKyNkZWZpbmUgR1BJTzE1M19LUF9JNwkJUElOX0NGRygxNTMsIEFMVF9BKQorI2RlZmluZSBHUElPMTUzX0xDRF9EMjQJCVBJTl9DRkcoMTUzLCBBTFRfQikKKyNkZWZpbmUgR1BJTzE1M19VMl9SWEQJCVBJTl9DRkcoMTUzLCBBTFRfQykKKworI2RlZmluZSBHUElPMTU0X0dQSU8JCVBJTl9DRkcoMTU0LCBHUElPKQorI2RlZmluZSBHUElPMTU0X0tQX0k2CQlQSU5fQ0ZHKDE1NCwgQUxUX0EpCisjZGVmaW5lIEdQSU8xNTRfTENEX0QyNQkJUElOX0NGRygxNTQsIEFMVF9CKQorI2RlZmluZSBHUElPMTU0X1UyX1RYRAkJUElOX0NGRygxNTQsIEFMVF9DKQorCisjZGVmaW5lIEdQSU8xNTVfR1BJTwkJUElOX0NGRygxNTUsIEdQSU8pCisjZGVmaW5lIEdQSU8xNTVfS1BfSTUJCVBJTl9DRkcoMTU1LCBBTFRfQSkKKyNkZWZpbmUgR1BJTzE1NV9MQ0RfRDI2CQlQSU5fQ0ZHKDE1NSwgQUxUX0IpCisjZGVmaW5lIEdQSU8xNTVfU1RNQVBFX0NMSwlQSU5fQ0ZHKDE1NSwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzE1Nl9HUElPCQlQSU5fQ0ZHKDE1NiwgR1BJTykKKyNkZWZpbmUgR1BJTzE1Nl9LUF9JNAkJUElOX0NGRygxNTYsIEFMVF9BKQorI2RlZmluZSBHUElPMTU2X0xDRF9EMjcJCVBJTl9DRkcoMTU2LCBBTFRfQikKKyNkZWZpbmUgR1BJTzE1Nl9TVE1BUEVfREFUMwlQSU5fQ0ZHKDE1NiwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzE1N19HUElPCQlQSU5fQ0ZHKDE1NywgR1BJTykKKyNkZWZpbmUgR1BJTzE1N19LUF9PNwkJUElOX0NGRygxNTcsIEFMVF9BKQorI2RlZmluZSBHUElPMTU3X0xDRF9EMjgJCVBJTl9DRkcoMTU3LCBBTFRfQikKKyNkZWZpbmUgR1BJTzE1N19TVE1BUEVfREFUMglQSU5fQ0ZHKDE1NywgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzE1OF9HUElPCQlQSU5fQ0ZHKDE1OCwgR1BJTykKKyNkZWZpbmUgR1BJTzE1OF9LUF9PNgkJUElOX0NGRygxNTgsIEFMVF9BKQorI2RlZmluZSBHUElPMTU4X0xDRF9EMjkJCVBJTl9DRkcoMTU4LCBBTFRfQikKKyNkZWZpbmUgR1BJTzE1OF9TVE1BUEVfREFUMQlQSU5fQ0ZHKDE1OCwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzE1OV9HUElPCQlQSU5fQ0ZHKDE1OSwgR1BJTykKKyNkZWZpbmUgR1BJTzE1OV9LUF9PNQkJUElOX0NGRygxNTksIEFMVF9BKQorI2RlZmluZSBHUElPMTU5X0xDRF9EMzAJCVBJTl9DRkcoMTU5LCBBTFRfQikKKyNkZWZpbmUgR1BJTzE1OV9TVE1BUEVfREFUMAlQSU5fQ0ZHKDE1OSwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzE2MF9HUElPCQlQSU5fQ0ZHKDE2MCwgR1BJTykKKyNkZWZpbmUgR1BJTzE2MF9LUF9PNAkJUElOX0NGRygxNjAsIEFMVF9BKQorI2RlZmluZSBHUElPMTYwX0xDRF9EMzEJCVBJTl9DRkcoMTYwLCBBTFRfQikKKyNkZWZpbmUgR1BJTzE2MF9OT05FCQlQSU5fQ0ZHKDE2MCwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzE2MV9HUElPCQlQSU5fQ0ZHKDE2MSwgR1BJTykKKyNkZWZpbmUgR1BJTzE2MV9LUF9JMwkJUElOX0NGRygxNjEsIEFMVF9BKQorI2RlZmluZSBHUElPMTYxX0xDRF9EMzIJCVBJTl9DRkcoMTYxLCBBTFRfQikKKyNkZWZpbmUgR1BJTzE2MV9VQVJUTU9EX1JYRAlQSU5fQ0ZHKDE2MSwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzE2Ml9HUElPCQlQSU5fQ0ZHKDE2MiwgR1BJTykKKyNkZWZpbmUgR1BJTzE2Ml9LUF9JMgkJUElOX0NGRygxNjIsIEFMVF9BKQorI2RlZmluZSBHUElPMTYyX0xDRF9EMzMJCVBJTl9DRkcoMTYyLCBBTFRfQikKKyNkZWZpbmUgR1BJTzE2Ml9VQVJUTU9EX1RYRAlQSU5fQ0ZHKDE2MiwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzE2M19HUElPCQlQSU5fQ0ZHKDE2MywgR1BJTykKKyNkZWZpbmUgR1BJTzE2M19LUF9JMQkJUElOX0NGRygxNjMsIEFMVF9BKQorI2RlZmluZSBHUElPMTYzX0xDRF9EMzQJCVBJTl9DRkcoMTYzLCBBTFRfQikKKyNkZWZpbmUgR1BJTzE2M19TVE1NT0RfQ0xLCVBJTl9DRkcoMTYzLCBBTFRfQykKKworI2RlZmluZSBHUElPMTY0X0dQSU8JCVBJTl9DRkcoMTY0LCBHUElPKQorI2RlZmluZSBHUElPMTY0X0tQX0kwCQlQSU5fQ0ZHKDE2NCwgQUxUX0EpCisjZGVmaW5lIEdQSU8xNjRfTENEX0QzNQkJUElOX0NGRygxNjQsIEFMVF9CKQorI2RlZmluZSBHUElPMTY0X1NUTU1PRF9EQVQzCVBJTl9DRkcoMTY0LCBBTFRfQykKKworI2RlZmluZSBHUElPMTY1X0dQSU8JCVBJTl9DRkcoMTY1LCBHUElPKQorI2RlZmluZSBHUElPMTY1X0tQX08zCQlQSU5fQ0ZHKDE2NSwgQUxUX0EpCisjZGVmaW5lIEdQSU8xNjVfTENEX0QzNgkJUElOX0NGRygxNjUsIEFMVF9CKQorI2RlZmluZSBHUElPMTY1X1NUTU1PRF9EQVQyCVBJTl9DRkcoMTY1LCBBTFRfQykKKworI2RlZmluZSBHUElPMTY2X0dQSU8JCVBJTl9DRkcoMTY2LCBHUElPKQorI2RlZmluZSBHUElPMTY2X0tQX08yCQlQSU5fQ0ZHKDE2NiwgQUxUX0EpCisjZGVmaW5lIEdQSU8xNjZfTENEX0QzNwkJUElOX0NGRygxNjYsIEFMVF9CKQorI2RlZmluZSBHUElPMTY2X1NUTU1PRF9EQVQxCVBJTl9DRkcoMTY2LCBBTFRfQykKKworI2RlZmluZSBHUElPMTY3X0dQSU8JCVBJTl9DRkcoMTY3LCBHUElPKQorI2RlZmluZSBHUElPMTY3X0tQX08xCQlQSU5fQ0ZHKDE2NywgQUxUX0EpCisjZGVmaW5lIEdQSU8xNjdfTENEX0QzOAkJUElOX0NGRygxNjcsIEFMVF9CKQorI2RlZmluZSBHUElPMTY3X1NUTU1PRF9EQVQwCVBJTl9DRkcoMTY3LCBBTFRfQykKKworI2RlZmluZSBHUElPMTY4X0dQSU8JCVBJTl9DRkcoMTY4LCBHUElPKQorI2RlZmluZSBHUElPMTY4X0tQX08wCQlQSU5fQ0ZHKDE2OCwgQUxUX0EpCisjZGVmaW5lIEdQSU8xNjhfTENEX0QzOQkJUElOX0NGRygxNjgsIEFMVF9CKQorI2RlZmluZSBHUElPMTY4X05PTkUJCVBJTl9DRkcoMTY4LCBBTFRfQykKKworI2RlZmluZSBHUElPMTY5X0dQSU8JCVBJTl9DRkcoMTY5LCBHUElPKQorI2RlZmluZSBHUElPMTY5X1JGX1BVUm4JCVBJTl9DRkcoMTY5LCBBTFRfQSkKKyNkZWZpbmUgR1BJTzE2OV9MQ0RBX0RFCQlQSU5fQ0ZHKDE2OSwgQUxUX0IpCisjZGVmaW5lIEdQSU8xNjlfVVNCU0lNX1BEQwlQSU5fQ0ZHKDE2OSwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzE3MF9HUElPCQlQSU5fQ0ZHKDE3MCwgR1BJTykKKyNkZWZpbmUgR1BJTzE3MF9NT0RFTV9TVEFURQlQSU5fQ0ZHKDE3MCwgQUxUX0EpCisjZGVmaW5lIEdQSU8xNzBfTENEQV9WU08JUElOX0NGRygxNzAsIEFMVF9CKQorI2RlZmluZSBHUElPMTcwX0tQX1NLQTEJCVBJTl9DRkcoMTcwLCBBTFRfQykKKworI2RlZmluZSBHUElPMTcxX0dQSU8JCVBJTl9DRkcoMTcxLCBHUElPKQorI2RlZmluZSBHUElPMTcxX01PREVNX1BXUkVOCVBJTl9DRkcoMTcxLCBBTFRfQSkKKyNkZWZpbmUgR1BJTzE3MV9MQ0RBX0hTTwlQSU5fQ0ZHKDE3MSwgQUxUX0IpCisjZGVmaW5lIEdQSU8xNzFfS1BfU0tCMQkJUElOX0NGRygxNzEsIEFMVF9DKQorCisjZGVmaW5lIEdQSU8xOTJfR1BJTwkJUElOX0NGRygxOTIsIEdQSU8pCisjZGVmaW5lIEdQSU8xOTJfTVNQMl9TQ0sJUElOX0NGRygxOTIsIEFMVF9BKQorCisjZGVmaW5lIEdQSU8xOTNfR1BJTwkJUElOX0NGRygxOTMsIEdQSU8pCisjZGVmaW5lIEdQSU8xOTNfTVNQMl9UWEQJUElOX0NGRygxOTMsIEFMVF9BKQorCisjZGVmaW5lIEdQSU8xOTRfR1BJTwkJUElOX0NGRygxOTQsIEdQSU8pCisjZGVmaW5lIEdQSU8xOTRfTVNQMl9UQ0sJUElOX0NGRygxOTQsIEFMVF9BKQorCisjZGVmaW5lIEdQSU8xOTVfR1BJTwkJUElOX0NGRygxOTUsIEdQSU8pCisjZGVmaW5lIEdQSU8xOTVfTVNQMl9URlMJUElOX0NGRygxOTUsIEFMVF9BKQorCisjZGVmaW5lIEdQSU8xOTZfR1BJTwkJUElOX0NGRygxOTYsIEdQSU8pCisjZGVmaW5lIEdQSU8xOTZfTVNQMl9SWEQJUElOX0NGRygxOTYsIEFMVF9BKQorCisjZGVmaW5lIEdQSU8xOTdfR1BJTwkJUElOX0NGRygxOTcsIEdQSU8pCisjZGVmaW5lIEdQSU8xOTdfTUM0X0RBVDMJUElOX0NGRygxOTcsIEFMVF9BKQorCisjZGVmaW5lIEdQSU8xOThfR1BJTwkJUElOX0NGRygxOTgsIEdQSU8pCisjZGVmaW5lIEdQSU8xOThfTUM0X0RBVDIJUElOX0NGRygxOTgsIEFMVF9BKQorCisjZGVmaW5lIEdQSU8xOTlfR1BJTwkJUElOX0NGRygxOTksIEdQSU8pCisjZGVmaW5lIEdQSU8xOTlfTUM0X0RBVDEJUElOX0NGRygxOTksIEFMVF9BKQorCisjZGVmaW5lIEdQSU8yMDBfR1BJTwkJUElOX0NGRygyMDAsIEdQSU8pCisjZGVmaW5lIEdQSU8yMDBfTUM0X0RBVDAJUElOX0NGRygyMDAsIEFMVF9BKQorCisjZGVmaW5lIEdQSU8yMDFfR1BJTwkJUElOX0NGRygyMDEsIEdQSU8pCisjZGVmaW5lIEdQSU8yMDFfTUM0X0NNRAkJUElOX0NGRygyMDEsIEFMVF9BKQorCisjZGVmaW5lIEdQSU8yMDJfR1BJTwkJUElOX0NGRygyMDIsIEdQSU8pCisjZGVmaW5lIEdQSU8yMDJfTUM0X0ZCQ0xLCVBJTl9DRkcoMjAyLCBBTFRfQSkKKyNkZWZpbmUgR1BJTzIwMl9QV0wJCVBJTl9DRkcoMjAyLCBBTFRfQikKKyNkZWZpbmUgR1BJTzIwMl9NQzRfUlNUTglQSU5fQ0ZHKDIwMiwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzIwM19HUElPCQlQSU5fQ0ZHKDIwMywgR1BJTykKKyNkZWZpbmUgR1BJTzIwM19NQzRfQ0xLCQlQSU5fQ0ZHKDIwMywgQUxUX0EpCisKKyNkZWZpbmUgR1BJTzIwNF9HUElPCQlQSU5fQ0ZHKDIwNCwgR1BJTykKKyNkZWZpbmUgR1BJTzIwNF9NQzRfREFUNwlQSU5fQ0ZHKDIwNCwgQUxUX0EpCisKKyNkZWZpbmUgR1BJTzIwNV9HUElPCQlQSU5fQ0ZHKDIwNSwgR1BJTykKKyNkZWZpbmUgR1BJTzIwNV9NQzRfREFUNglQSU5fQ0ZHKDIwNSwgQUxUX0EpCisKKyNkZWZpbmUgR1BJTzIwNl9HUElPCQlQSU5fQ0ZHKDIwNiwgR1BJTykKKyNkZWZpbmUgR1BJTzIwNl9NQzRfREFUNQlQSU5fQ0ZHKDIwNiwgQUxUX0EpCisKKyNkZWZpbmUgR1BJTzIwN19HUElPCQlQSU5fQ0ZHKDIwNywgR1BJTykKKyNkZWZpbmUgR1BJTzIwN19NQzRfREFUNAlQSU5fQ0ZHKDIwNywgQUxUX0EpCisKKyNkZWZpbmUgR1BJTzIwOF9HUElPCQlQSU5fQ0ZHKDIwOCwgR1BJTykKKyNkZWZpbmUgR1BJTzIwOF9NQzFfQ0xLCQlQSU5fQ0ZHKDIwOCwgQUxUX0EpCisKKyNkZWZpbmUgR1BJTzIwOV9HUElPCQlQSU5fQ0ZHKDIwOSwgR1BJTykKKyNkZWZpbmUgR1BJTzIwOV9NQzFfRkJDTEsJUElOX0NGRygyMDksIEFMVF9BKQorI2RlZmluZSBHUElPMjA5X1NQSTFfQ0xLCVBJTl9DRkcoMjA5LCBBTFRfQikKKworI2RlZmluZSBHUElPMjEwX0dQSU8JCVBJTl9DRkcoMjEwLCBHUElPKQorI2RlZmluZSBHUElPMjEwX01DMV9DTUQJCVBJTl9DRkcoMjEwLCBBTFRfQSkKKworI2RlZmluZSBHUElPMjExX0dQSU8JCVBJTl9DRkcoMjExLCBHUElPKQorI2RlZmluZSBHUElPMjExX01DMV9EQVQwCVBJTl9DRkcoMjExLCBBTFRfQSkKKworI2RlZmluZSBHUElPMjEyX0dQSU8JCVBJTl9DRkcoMjEyLCBHUElPKQorI2RlZmluZSBHUElPMjEyX01DMV9EQVQxCVBJTl9DRkcoMjEyLCBBTFRfQSkKKyNkZWZpbmUgR1BJTzIxMl9TUEkxX0ZSTQlQSU5fQ0ZHKDIxMiwgQUxUX0IpCisKKyNkZWZpbmUgR1BJTzIxM19HUElPCQlQSU5fQ0ZHKDIxMywgR1BJTykKKyNkZWZpbmUgR1BJTzIxM19NQzFfREFUMglQSU5fQ0ZHKDIxMywgQUxUX0EpCisjZGVmaW5lIEdQSU8yMTNfU1BJMV9UWEQJUElOX0NGRygyMTMsIEFMVF9CKQorCisjZGVmaW5lIEdQSU8yMTRfR1BJTwkJUElOX0NGRygyMTQsIEdQSU8pCisjZGVmaW5lIEdQSU8yMTRfTUMxX0RBVDMJUElOX0NGRygyMTQsIEFMVF9BKQorI2RlZmluZSBHUElPMjE0X1NQSTFfUlhECVBJTl9DRkcoMjE0LCBBTFRfQikKKworI2RlZmluZSBHUElPMjE1X0dQSU8JCVBJTl9DRkcoMjE1LCBHUElPKQorI2RlZmluZSBHUElPMjE1X01DMV9DTURESVIJUElOX0NGRygyMTUsIEFMVF9BKQorI2RlZmluZSBHUElPMjE1X01DM19EQVQyRElSCVBJTl9DRkcoMjE1LCBBTFRfQikKKyNkZWZpbmUgR1BJTzIxNV9DTEtPVVQxCQlQSU5fQ0ZHKDIxNSwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzIxNl9HUElPCQlQSU5fQ0ZHKDIxNiwgR1BJTykKKyNkZWZpbmUgR1BJTzIxNl9NQzFfREFUMkRJUglQSU5fQ0ZHKDIxNiwgQUxUX0EpCisjZGVmaW5lIEdQSU8yMTZfTUMzX0NNRERJUglQSU5fQ0ZHKDIxNiwgQUxUX0IpCisjZGVmaW5lIEdQSU8yMTZfSTJDM19TREEJUElOX0NGR19QVUxMKDIxNiwgQUxUX0MsIFVQKQorCisjZGVmaW5lIEdQSU8yMTdfR1BJTwkJUElOX0NGRygyMTcsIEdQSU8pCisjZGVmaW5lIEdQSU8yMTdfTUMxX0RBVDBESVIJUElOX0NGRygyMTcsIEFMVF9BKQorI2RlZmluZSBHUElPMjE3X01DM19EQVQzMURJUglQSU5fQ0ZHKDIxNywgQUxUX0IpCisjZGVmaW5lIEdQSU8yMTdfQ0xLT1VUMgkJUElOX0NGRygyMTcsIEFMVF9DKQorCisjZGVmaW5lIEdQSU8yMThfR1BJTwkJUElOX0NGRygyMTgsIEdQSU8pCisjZGVmaW5lIEdQSU8yMThfTUMxX0RBVDMxRElSCVBJTl9DRkcoMjE4LCBBTFRfQSkKKyNkZWZpbmUgR1BJTzIxOF9NQzNfREFUMERJUglQSU5fQ0ZHKDIxOCwgQUxUX0IpCisjZGVmaW5lIEdQSU8yMThfSTJDM19TQ0wJUElOX0NGR19QVUxMKDIxOCwgQUxUX0MsIFVQKQorCisjZGVmaW5lIEdQSU8yMTlfR1BJTwkJUElOX0NGRygyMTksIEdQSU8pCisjZGVmaW5lIEdQSU8yMTlfSFNJUl9GTEEwCVBJTl9DRkcoMjE5LCBBTFRfQSkKKyNkZWZpbmUgR1BJTzIxOV9NQzNfQ0xLCQlQSU5fQ0ZHKDIxOSwgQUxUX0IpCisKKyNkZWZpbmUgR1BJTzIyMF9HUElPCQlQSU5fQ0ZHKDIyMCwgR1BJTykKKyNkZWZpbmUgR1BJTzIyMF9IU0lSX0RBVDAJUElOX0NGRygyMjAsIEFMVF9BKQorI2RlZmluZSBHUElPMjIwX01DM19GQkNMSwlQSU5fQ0ZHKDIyMCwgQUxUX0IpCisjZGVmaW5lIEdQSU8yMjBfU1BJMF9DTEsJUElOX0NGRygyMjAsIEFMVF9DKQorCisjZGVmaW5lIEdQSU8yMjFfR1BJTwkJUElOX0NGRygyMjEsIEdQSU8pCisjZGVmaW5lIEdQSU8yMjFfSFNJUl9SRFkwCVBJTl9DRkcoMjIxLCBBTFRfQSkKKyNkZWZpbmUgR1BJTzIyMV9NQzNfQ01ECQlQSU5fQ0ZHKDIyMSwgQUxUX0IpCisKKyNkZWZpbmUgR1BJTzIyMl9HUElPCQlQSU5fQ0ZHKDIyMiwgR1BJTykKKyNkZWZpbmUgR1BJTzIyMl9IU0lUX0ZMQTAJUElOX0NGRygyMjIsIEFMVF9BKQorI2RlZmluZSBHUElPMjIyX01DM19EQVQwCVBJTl9DRkcoMjIyLCBBTFRfQikKKworI2RlZmluZSBHUElPMjIzX0dQSU8JCVBJTl9DRkcoMjIzLCBHUElPKQorI2RlZmluZSBHUElPMjIzX0hTSVRfREFUMAlQSU5fQ0ZHKDIyMywgQUxUX0EpCisjZGVmaW5lIEdQSU8yMjNfTUMzX0RBVDEJUElOX0NGRygyMjMsIEFMVF9CKQorI2RlZmluZSBHUElPMjIzX1NQSTBfRlJNCVBJTl9DRkcoMjIzLCBBTFRfQykKKworI2RlZmluZSBHUElPMjI0X0dQSU8JCVBJTl9DRkcoMjI0LCBHUElPKQorI2RlZmluZSBHUElPMjI0X0hTSVRfUkRZMAlQSU5fQ0ZHKDIyNCwgQUxUX0EpCisjZGVmaW5lIEdQSU8yMjRfTUMzX0RBVDIJUElOX0NGRygyMjQsIEFMVF9CKQorI2RlZmluZSBHUElPMjI0X1NQSTBfVFhECVBJTl9DRkcoMjI0LCBBTFRfQykKKworI2RlZmluZSBHUElPMjI1X0dQSU8JCVBJTl9DRkcoMjI1LCBHUElPKQorI2RlZmluZSBHUElPMjI1X0hTSVRfQ0FXQUtFMAlQSU5fQ0ZHKDIyNSwgQUxUX0EpCisjZGVmaW5lIEdQSU8yMjVfTUMzX0RBVDMJUElOX0NGRygyMjUsIEFMVF9CKQorI2RlZmluZSBHUElPMjI1X1NQSTBfUlhECVBJTl9DRkcoMjI1LCBBTFRfQykKKworI2RlZmluZSBHUElPMjI2X0dQSU8JCVBJTl9DRkcoMjI2LCBHUElPKQorI2RlZmluZSBHUElPMjI2X0hTSVRfQUNXQUtFMAlQSU5fQ0ZHKDIyNiwgQUxUX0EpCisjZGVmaW5lIEdQSU8yMjZfUFdMCQlQSU5fQ0ZHKDIyNiwgQUxUX0IpCisjZGVmaW5lIEdQSU8yMjZfVVNCU0lNX1BEQwlQSU5fQ0ZHKDIyNiwgQUxUX0MpCisKKyNkZWZpbmUgR1BJTzIyN19HUElPCQlQSU5fQ0ZHKDIyNywgR1BJTykKKyNkZWZpbmUgR1BJTzIyN19DTEtPVVQxCQlQSU5fQ0ZHKDIyNywgQUxUX0EpCisKKyNkZWZpbmUgR1BJTzIyOF9HUElPCQlQSU5fQ0ZHKDIyOCwgR1BJTykKKyNkZWZpbmUgR1BJTzIyOF9DTEtPVVQyCQlQSU5fQ0ZHKDIyOCwgQUxUX0EpCisKKyNkZWZpbmUgR1BJTzIyOV9HUElPCQlQSU5fQ0ZHKDIyOSwgR1BJTykKKyNkZWZpbmUgR1BJTzIyOV9DTEtPVVQxCQlQSU5fQ0ZHKDIyOSwgQUxUX0EpCisjZGVmaW5lIEdQSU8yMjlfUFdMCQlQSU5fQ0ZHKDIyOSwgQUxUX0IpCisjZGVmaW5lIEdQSU8yMjlfSTJDM19TREEJUElOX0NGR19QVUxMKDIyOSwgQUxUX0MsIFVQKQorCisjZGVmaW5lIEdQSU8yMzBfR1BJTwkJUElOX0NGRygyMzAsIEdQSU8pCisjZGVmaW5lIEdQSU8yMzBfQ0xLT1VUMgkJUElOX0NGRygyMzAsIEFMVF9BKQorI2RlZmluZSBHUElPMjMwX1BXTAkJUElOX0NGRygyMzAsIEFMVF9CKQorI2RlZmluZSBHUElPMjMwX0kyQzNfU0NMCVBJTl9DRkdfUFVMTCgyMzAsIEFMVF9DLCBVUCkKKworI2RlZmluZSBHUElPMjU2X0dQSU8JCVBJTl9DRkcoMjU2LCBHUElPKQorI2RlZmluZSBHUElPMjU2X1VTQl9OWFQJCVBJTl9DRkcoMjU2LCBBTFRfQSkKKworI2RlZmluZSBHUElPMjU3X0dQSU8JCVBJTl9DRkcoMjU3LCBHUElPKQorI2RlZmluZSBHUElPMjU3X1VTQl9TVFAJCVBJTl9DRkcoMjU3LCBBTFRfQSkKKworI2RlZmluZSBHUElPMjU4X0dQSU8JCVBJTl9DRkcoMjU4LCBHUElPKQorI2RlZmluZSBHUElPMjU4X1VTQl9YQ0xLCVBJTl9DRkcoMjU4LCBBTFRfQSkKKyNkZWZpbmUgR1BJTzI1OF9OT05FCQlQSU5fQ0ZHKDI1OCwgQUxUX0IpCisjZGVmaW5lIEdQSU8yNThfRERSX1RSSUcJUElOX0NGRygyNTgsIEFMVF9DKQorCisjZGVmaW5lIEdQSU8yNTlfR1BJTwkJUElOX0NGRygyNTksIEdQSU8pCisjZGVmaW5lIEdQSU8yNTlfVVNCX0RJUgkJUElOX0NGRygyNTksIEFMVF9BKQorCisjZGVmaW5lIEdQSU8yNjBfR1BJTwkJUElOX0NGRygyNjAsIEdQSU8pCisjZGVmaW5lIEdQSU8yNjBfVVNCX0RBVDcJUElOX0NGRygyNjAsIEFMVF9BKQorCisjZGVmaW5lIEdQSU8yNjFfR1BJTwkJUElOX0NGRygyNjEsIEdQSU8pCisjZGVmaW5lIEdQSU8yNjFfVVNCX0RBVDYJUElOX0NGRygyNjEsIEFMVF9BKQorCisjZGVmaW5lIEdQSU8yNjJfR1BJTwkJUElOX0NGRygyNjIsIEdQSU8pCisjZGVmaW5lIEdQSU8yNjJfVVNCX0RBVDUJUElOX0NGRygyNjIsIEFMVF9BKQorCisjZGVmaW5lIEdQSU8yNjNfR1BJTwkJUElOX0NGRygyNjMsIEdQSU8pCisjZGVmaW5lIEdQSU8yNjNfVVNCX0RBVDQJUElOX0NGRygyNjMsIEFMVF9BKQorCisjZGVmaW5lIEdQSU8yNjRfR1BJTwkJUElOX0NGRygyNjQsIEdQSU8pCisjZGVmaW5lIEdQSU8yNjRfVVNCX0RBVDMJUElOX0NGRygyNjQsIEFMVF9BKQorCisjZGVmaW5lIEdQSU8yNjVfR1BJTwkJUElOX0NGRygyNjUsIEdQSU8pCisjZGVmaW5lIEdQSU8yNjVfVVNCX0RBVDIJUElOX0NGRygyNjUsIEFMVF9BKQorCisjZGVmaW5lIEdQSU8yNjZfR1BJTwkJUElOX0NGRygyNjYsIEdQSU8pCisjZGVmaW5lIEdQSU8yNjZfVVNCX0RBVDEJUElOX0NGRygyNjYsIEFMVF9BKQorCisjZGVmaW5lIEdQSU8yNjdfR1BJTwkJUElOX0NGRygyNjcsIEdQSU8pCisjZGVmaW5lIEdQSU8yNjdfVVNCX0RBVDAJUElOX0NGRygyNjcsIEFMVF9BKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYwppbmRleCAzZGZmODY0Li5lMzhhY2IwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvYW1iYS9jbGNkLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9wbDA2MS5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvbW1jaS5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwMjIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogCkBAIC0zNTQsNiArMzU1LDIxIEBACiAJLmdwaW9fY2QJPSAtMSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2hhcl9sY2RfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBWRVJTQVRJTEVfQ0hBUl9MQ0RfQkFTRSwKKwkJLmVuZCAgID0gKFZFUlNBVElMRV9DSEFSX0xDRF9CQVNFICsgU1pfNEsgLSAxKSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNoYXJfbGNkX2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAgICAgICAiYXJtLWNoYXJsY2QiLAorCS5pZCAgICAgICAgICAgICA9ICAgICAgIC0xLAorCS5udW1fcmVzb3VyY2VzICA9ICAgICAgIEFSUkFZX1NJWkUoY2hhcl9sY2RfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgICAgICAgPSAgICAgICBjaGFyX2xjZF9yZXNvdXJjZXMsCit9OworCiAvKgogICogQ2xvY2sgaGFuZGxpbmcKICAqLwpAQCAtNDAwLDggKzQxNiwxMyBAQAogCS5yYXRlCT0gMjQwMDAwMDAsCiB9OwogCitzdGF0aWMgc3RydWN0IGNsayBkdW1teV9hcGJfcGNsazsKKwogc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKLQl7CS8qIFVBUlQwICovCisJewkvKiBBTUJBIGJ1cyBjbG9jayAqLworCQkuY29uX2lkCQk9ICJhcGJfcGNsayIsCisJCS5jbGsJCT0gJmR1bW15X2FwYl9wY2xrLAorCX0sIHsJLyogVUFSVDAgKi8KIAkJLmRldl9pZAkJPSAiZGV2OmYxIiwKIAkJLmNsawkJPSAmcmVmMjRfY2xrLAogCX0sIHsJLyogVUFSVDEgKi8KQEAgLTQyNSw2ICs0NDYsOSBAQAogCX0sIHsJLyogTU1DMSAqLwogCQkuZGV2X2lkCQk9ICJmcGdhOjBiIiwKIAkJLmNsawkJPSAmcmVmMjRfY2xrLAorCX0sIHsJLyogU1NQICovCisJCS5kZXZfaWQJCT0gImRldjpmNCIsCisJCS5jbGsJCT0gJnJlZjI0X2NsaywKIAl9LCB7CS8qIENMQ0QgKi8KIAkJLmRldl9pZAkJPSAiZGV2OjIwIiwKIAkJLmNsawkJPSAmb3NjNF9jbGssCkBAIC03MDMsNiArNzI3LDEyIEBACiAJLmlycV9iYXNlCT0gSVJRX0dQSU8xX1NUQVJULAogfTsKIAorc3RhdGljIHN0cnVjdCBwbDAyMl9zc3BfY29udHJvbGxlciBzc3AwX3BsYXRfZGF0YSA9IHsKKwkuYnVzX2lkID0gMCwKKwkuZW5hYmxlX2RtYSA9IDAsCisJLm51bV9jaGlwc2VsZWN0ID0gMSwKK307CisKICNkZWZpbmUgQUFDSV9JUlEJeyBJUlFfQUFDSSwgTk9fSVJRIH0KICNkZWZpbmUgQUFDSV9ETUEJeyAweDgwLCAweDgxIH0KICNkZWZpbmUgTU1DSTBfSVJRCXsgSVJRX01NQ0kwQSxJUlFfU0lDX01NQ0kwQiB9CkBAIC03NzIsNyArODAyLDcgQEAKIEFNQkFfREVWSUNFKHVhcnQwLCAiZGV2OmYxIiwgIFVBUlQwLCAgICBOVUxMKTsKIEFNQkFfREVWSUNFKHVhcnQxLCAiZGV2OmYyIiwgIFVBUlQxLCAgICBOVUxMKTsKIEFNQkFfREVWSUNFKHVhcnQyLCAiZGV2OmYzIiwgIFVBUlQyLCAgICBOVUxMKTsKLUFNQkFfREVWSUNFKHNzcDAsICAiZGV2OmY0IiwgIFNTUCwgICAgICBOVUxMKTsKK0FNQkFfREVWSUNFKHNzcDAsICAiZGV2OmY0IiwgIFNTUCwgICAgICAmc3NwMF9wbGF0X2RhdGEpOwogCiBzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlICphbWJhX2RldnNbXSBfX2luaXRkYXRhID0gewogCSZkbWFjX2RldmljZSwKQEAgLTg0Myw2ICs4NzMsNyBAQAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdmVyc2F0aWxlX2ZsYXNoX2RldmljZSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2ZXJzYXRpbGVfaTJjX2RldmljZSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzbWM5MXhfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNoYXJfbGNkX2RldmljZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbWJhX2RldnMpOyBpKyspIHsKIAkJc3RydWN0IGFtYmFfZGV2aWNlICpkID0gYW1iYV9kZXZzW2ldOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvcGNpLmMgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9wY2kuYwppbmRleCAzMzRmMGRmLi4xM2M3ZTVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9wY2kuYwpAQCAtMzA0LDcgKzMwNCw3IEBACiB9CiAKIAotc3RydWN0IHBjaV9idXMgKnBjaV92ZXJzYXRpbGVfc2Nhbl9idXMoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCitzdHJ1Y3QgcGNpX2J1cyAqIF9faW5pdCBwY2lfdmVyc2F0aWxlX3NjYW5fYnVzKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQogewogCXJldHVybiBwY2lfc2Nhbl9idXMoc3lzLT5idXNuciwgJnBjaV92ZXJzYXRpbGVfb3BzLCBzeXMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9jdC1jYTl4NC5jIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9jdC1jYTl4NC5jCmluZGV4IDYzNTM0NTkuLjU3N2RmNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvY3QtY2E5eDQuYworKysgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL2N0LWNhOXg0LmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZ2ljLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcG11Lmg+CisjaW5jbHVkZSA8YXNtL3NtcF90d2QuaD4KIAogI2luY2x1ZGUgPG1hY2gvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8bWFjaC9jdC1jYTl4NC5oPgpAQCAtNTMsNiArNTQsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgY3RfY2E5eDRfbWFwX2lvKHZvaWQpCiB7CisJdHdkX2Jhc2UgPSBNTUlPX1AyVihBOV9NUENPUkVfVFdEKTsKIAl2Mm1fbWFwX2lvKGN0X2NhOXg0X2lvX2Rlc2MsIEFSUkFZX1NJWkUoY3RfY2E5eDRfaW9fZGVzYykpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL2luY2x1ZGUvbWFjaC9jdC1jYTl4NC5oIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9pbmNsdWRlL21hY2gvY3QtY2E5eDQuaAppbmRleCA4NjUwZjA0Li5mOWUyZjhkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL2luY2x1ZGUvbWFjaC9jdC1jYTl4NC5oCisrKyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvaW5jbHVkZS9tYWNoL2N0LWNhOXg0LmgKQEAgLTI4LDYgKzI4LDcgQEAKICNkZWZpbmUgQTlfTVBDT1JFX1NDVQkJKENUX0NBOVg0X01QSUMgKyAweDAwMDApCiAjZGVmaW5lIEE5X01QQ09SRV9HSUNfQ1BVCShDVF9DQTlYNF9NUElDICsgMHgwMTAwKQogI2RlZmluZSBBOV9NUENPUkVfR0lUCQkoQ1RfQ0E5WDRfTVBJQyArIDB4MDIwMCkKKyNkZWZpbmUgQTlfTVBDT1JFX1RXRAkJKENUX0NBOVg0X01QSUMgKyAweDA2MDApCiAjZGVmaW5lIEE5X01QQ09SRV9HSUNfRElTVAkoQ1RfQ0E5WDRfTVBJQyArIDB4MTAwMCkKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvdjJtLmMgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL3YybS5jCmluZGV4IGQyNTA3MTEuLjgxN2YwYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvdjJtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy92Mm0uYwpAQCAtMjQxLDcgKzI0MSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdjJtX21tY2lfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gIShyZWFkbChNTUlPX1AyVihWMk1fU1lTX01DSSkpICYgKDEgPDwgMCkpOworCXJldHVybiByZWFkbChNTUlPX1AyVihWMk1fU1lTX01DSSkpICYgKDEgPDwgMCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhIHYybV9tbWNpX2RhdGEgPSB7CkBAIC0yOTgsOCArMjk4LDEzIEBACiAJLnJhdGUJPSAyNDAwMDAwMCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrIGR1bW15X2FwYl9wY2xrOworCiBzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgdjJtX2xvb2t1cHNbXSA9IHsKLQl7CS8qIFVBUlQwICovCisJewkvKiBBTUJBIGJ1cyBjbG9jayAqLworCQkuY29uX2lkCQk9ICJhcGJfcGNsayIsCisJCS5jbGsJCT0gJmR1bW15X2FwYl9wY2xrLAorCX0sIHsJLyogVUFSVDAgKi8KIAkJLmRldl9pZAkJPSAibWI6dWFydDAiLAogCQkuY2xrCQk9ICZvc2MyX2NsaywKIAl9LCB7CS8qIFVBUlQxICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY3B1LmMgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY3B1LmMKaW5kZXggNjQyMjA3ZS4uODNjNTYzMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2NwdS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jcHUuYwpAQCAtOTMsNyArOTMsNyBAQAogCURFRl9DTEtMT09LKCZjbGtfa3BpLCAibnVjOTAwLWtwaSIsIE5VTEwpLAogCURFRl9DTEtMT09LKCZjbGtfd2R0LCAibnVjOTAwLXdkdCIsIE5VTEwpLAogCURFRl9DTEtMT09LKCZjbGtfZ2RtYSwgIm51YzkwMC1nZG1hIiwgTlVMTCksCi0JREVGX0NMS0xPT0soJmNsa19hZGMsICJudWM5MDAtYWRjIiwgTlVMTCksCisJREVGX0NMS0xPT0soJmNsa19hZGMsICJudWM5MDAtdHMiLCBOVUxMKSwKIAlERUZfQ0xLTE9PSygmY2xrX3VzaSwgIm51YzkwMC1zcGkiLCBOVUxMKSwKIAlERUZfQ0xLTE9PSygmY2xrX2V4dCwgTlVMTCwgImV4dCIpLAogCURFRl9DTEtMT09LKCZjbGtfdGltZXIwLCBOVUxMLCAidGltZXIwIiksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvZGV2LmMgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvZGV2LmMKaW5kZXggYjJlZGE0ZC4uN2ExZmE2YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Rldi5jCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9kZXYuYwpAQCAtMzYsNiArMzYsOCBAQAogI2luY2x1ZGUgPG1hY2gvbnVjOTAwX3NwaS5oPgogI2luY2x1ZGUgPG1hY2gvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9mYi5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1sZG0uaD4KKyNpbmNsdWRlIDxtYWNoL3c5MHA5MTBfa2V5cGFkLmg+CiAKICNpbmNsdWRlICJjcHUuaCIKIApAQCAtMjA3LDcgKzIwOSw3IEBACiAJLmRpdmlkZXIJPSAyNCwKIAkuc2xlZXAJCT0gMCwKIAkudHhudW0JCT0gMCwKLQkudHhiaXRsZW4JPSAxLAorCS50eGJpdGxlbgk9IDgsCiAJLmJ1c19udW0JPSAwLAogfTsKIApAQCAtMjU2LDcgKzI1OCw3IEBACiAJCS5tb2RhbGlhcyA9ICJtMjVwODAiLAogCQkubWF4X3NwZWVkX2h6ID0gMjAwMDAwMDAsCiAJCS5idXNfbnVtID0gMCwKLQkJLmNoaXBfc2VsZWN0ID0gMSwKKwkJLmNoaXBfc2VsZWN0ID0gMCwKIAkJLnBsYXRmb3JtX2RhdGEgPSAmbnVjOTAwX3NwaV9mbGFzaF9kYXRhLAogCQkubW9kZSA9IFNQSV9NT0RFXzAsCiAJfSwKQEAgLTM2MSw2ICszNjMsMzkgQEAKIAogLyogS1BJIGNvbnRyb2xsZXIqLwogCitzdGF0aWMgaW50IG51YzkwMF9rZXltYXBbXSA9IHsKKwlLRVkoMCwgMCwgS0VZX0EpLAorCUtFWSgwLCAxLCBLRVlfQiksCisJS0VZKDAsIDIsIEtFWV9DKSwKKwlLRVkoMCwgMywgS0VZX0QpLAorCisJS0VZKDEsIDAsIEtFWV9FKSwKKwlLRVkoMSwgMSwgS0VZX0YpLAorCUtFWSgxLCAyLCBLRVlfRyksCisJS0VZKDEsIDMsIEtFWV9IKSwKKworCUtFWSgyLCAwLCBLRVlfSSksCisJS0VZKDIsIDEsIEtFWV9KKSwKKwlLRVkoMiwgMiwgS0VZX0spLAorCUtFWSgyLCAzLCBLRVlfTCksCisKKwlLRVkoMywgMCwgS0VZX00pLAorCUtFWSgzLCAxLCBLRVlfTiksCisJS0VZKDMsIDIsIEtFWV9PKSwKKwlLRVkoMywgMywgS0VZX1ApLAorfTsKKworc3RhdGljIHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgbnVjOTAwX21hcF9kYXRhID0geworCS5rZXltYXAJCQk9IG51YzkwMF9rZXltYXAsCisJLmtleW1hcF9zaXplCQk9IEFSUkFZX1NJWkUobnVjOTAwX2tleW1hcCksCit9OworCitzdHJ1Y3QgdzkwcDkxMF9rZXlwYWRfcGxhdGZvcm1fZGF0YSBudWM5MDBfa2V5cGFkX2luZm8gPSB7CisJLmtleW1hcF9kYXRhCT0gJm51YzkwMF9tYXBfZGF0YSwKKwkucHJlc2NhbGUJPSAweGZhLAorCS5kZWJvdW5jZQk9IDB4NTAsCit9OworCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG51YzkwMF9rcGlfcmVzb3VyY2VbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydCA9IFc5MFg5MDBfUEFfS1BJLApAQCAtMzgwLDkgKzQxNSw0OSBAQAogCS5pZAkJPSAtMSwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobnVjOTAwX2twaV9yZXNvdXJjZSksCiAJLnJlc291cmNlCT0gbnVjOTAwX2twaV9yZXNvdXJjZSwKKwkuZGV2CQk9IHsKKwkJCQkucGxhdGZvcm1fZGF0YSA9ICZudWM5MDBfa2V5cGFkX2luZm8sCisJCQl9CiB9OwogCi0jaWZkZWYgQ09ORklHX0ZCX05VQzkwMAorLyogTENEIGNvbnRyb2xsZXIqLworCitzdGF0aWMgc3RydWN0IG51YzkwMGZiX2Rpc3BsYXkgX19pbml0ZGF0YSBudWM5MDBfbGNkX2luZm9bXSA9IHsKKwkvKiBHaWFudHBsdXMgVGVjaG5vbG9neSBHUE0xMDQwQTAgMzIweDI0MCBDb2xvciBURlQgTENEICovCisJWzBdID0geworCQkudHlwZQkJPSBMQ01fRENDU19WQV9TUkNfUkdCNTY1LAorCQkud2lkdGgJCT0gMzIwLAorCQkuaGVpZ2h0CQk9IDI0MCwKKwkJLnhyZXMJCT0gMzIwLAorCQkueXJlcwkJPSAyNDAsCisJCS5icHAJCT0gMTYsCisJCS5waXhjbG9jawk9IDIwMDAwMCwKKwkJLmxlZnRfbWFyZ2luCT0gMzQsCisJCS5yaWdodF9tYXJnaW4gICA9IDU0LAorCQkuaHN5bmNfbGVuCT0gMTAsCisJCS51cHBlcl9tYXJnaW4JPSAxOCwKKwkJLmxvd2VyX21hcmdpbgk9IDQsCisJCS52c3luY19sZW4JPSAxLAorCQkuZGNjcwkJPSAweDhlMDAwNDFhLAorCQkuZGV2Y3RsCQk9IDB4MDYwODAwYzAsCisJCS5mYmN0cmwJCT0gMHgwMGEwMDBhMCwKKwkJLnNjYWxlCQk9IDB4MDQwMDA0MDAsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbnVjOTAwZmJfbWFjaF9pbmZvIG51YzkwMF9mYl9pbmZvIF9faW5pdGRhdGEgPSB7CisjaWYgZGVmaW5lZChDT05GSUdfR1BNMTA0MEEwXzMyMFgyNDApCisJLmRpc3BsYXlzCQk9ICZudWM5MDBfbGNkX2luZm9bMF0sCisjZWxzZQorCS5kaXNwbGF5cwkJPSBudWM5MDBfbGNkX2luZm8sCisjZW5kaWYKKwkubnVtX2Rpc3BsYXlzCQk9IEFSUkFZX1NJWkUobnVjOTAwX2xjZF9pbmZvKSwKKwkuZGVmYXVsdF9kaXNwbGF5CT0gMCwKKwkuZ3Bpb19kaXIJCT0gMHgwMDAwMDAwNCwKKwkuZ3Bpb19kaXJfbWFzawkJPSAweEZGRkZGRkZELAorCS5ncGlvX2RhdGEJCT0gMHgwMDAwMDAwNCwKKwkuZ3Bpb19kYXRhX21hc2sJCT0gMHhGRkZGRkZGRCwKK307CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbnVjOTAwX2xjZF9yZXNvdXJjZVtdID0gewogCVswXSA9IHsKQEAgLTQwNiwyMyArNDgxLDEwIEBACiAJLmRldiAgICAgICAgICAgICAgPSB7CiAJCS5kbWFfbWFzayAgICAgICAgICAgICAgID0gJm51YzkwMF9kZXZpY2VfbGNkX2RtYW1hc2ssCiAJCS5jb2hlcmVudF9kbWFfbWFzayAgICAgID0gLTEsCisJCS5wbGF0Zm9ybV9kYXRhID0gJm51YzkwMF9mYl9pbmZvLAogCX0KIH07CiAKLXZvaWQgIG51YzkwMF9mYl9zZXRfcGxhdGRhdGEoc3RydWN0IG51YzkwMGZiX21hY2hfaW5mbyAqcGQpCi17Ci0Jc3RydWN0IG51YzkwMGZiX21hY2hfaW5mbyAqbnBkOwotCi0JbnBkID0ga21hbGxvYyhzaXplb2YoKm5wZCksIEdGUF9LRVJORUwpOwotCWlmIChucGQpIHsKLQkJbWVtY3B5KG5wZCwgcGQsIHNpemVvZigqbnBkKSk7Ci0JCW51YzkwMF9kZXZpY2VfbGNkLmRldi5wbGF0Zm9ybV9kYXRhID0gbnBkOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibm8gbWVtb3J5IGZvciBMQ0QgcGxhdGZvcm0gZGF0YVxuIik7Ci0JfQotfQotI2VuZGlmCi0KIC8qIEFVRElPIGNvbnRyb2xsZXIqLwogc3RhdGljIHU2NCBudWM5MDBfZGV2aWNlX2F1ZGlvX2RtYW1hc2sgPSAtMTsKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbnVjOTAwX2FjOTdfcmVzb3VyY2VbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvcmVncy1nY3IuaCBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvcmVncy1nY3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDg3YWJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9yZWdzLWdjci5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3JlZ3MtZ2NyLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfUkVHU19HQ1JfSAorI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NfR0NSX0gKKworLyogR2xvYmFsIGNvbnRyb2wgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgR0NSX0JBCQlXOTBYOTAwX1ZBX0dDUgorI2RlZmluZSBSRUdfUERJRAkoR0NSX0JBKzB4MDAwKQorI2RlZmluZSBSRUdfUFdST04JKEdDUl9CQSsweDAwNCkKKyNkZWZpbmUgUkVHX0FSQkNPTgkoR0NSX0JBKzB4MDA4KQorI2RlZmluZSBSRUdfTUZTRUwJKEdDUl9CQSsweDAwQykKKyNkZWZpbmUgUkVHX0VCSURQRQkoR0NSX0JBKzB4MDEwKQorI2RlZmluZSBSRUdfTENERFBFCShHQ1JfQkErMHgwMTQpCisjZGVmaW5lIFJFR19HUElPQ1BFCShHQ1JfQkErMHgwMTgpCisjZGVmaW5lIFJFR19HUElPRFBFCShHQ1JfQkErMHgwMUMpCisjZGVmaW5lIFJFR19HUElPRVBFCShHQ1JfQkErMHgwMjApCisjZGVmaW5lIFJFR19HUElPRlBFCShHQ1JfQkErMHgwMjQpCisjZGVmaW5lIFJFR19HUElPR1BFCShHQ1JfQkErMHgwMjgpCisjZGVmaW5lIFJFR19HUElPSFBFCShHQ1JfQkErMHgwMkMpCisjZGVmaW5lIFJFR19HUElPSVBFCShHQ1JfQkErMHgwMzApCisjZGVmaW5lIFJFR19HVE1QMQkoR0NSX0JBKzB4MDM0KQorI2RlZmluZSBSRUdfR1RNUDIJKEdDUl9CQSsweDAzOCkKKyNkZWZpbmUgUkVHX0dUTVAzCShHQ1JfQkErMHgwM0MpCisKKyNlbmRpZiAvKiAgX19BU01fQVJDSF9SRUdTX0dDUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbWFjaC1udWM5NTBldmIuYyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9tYWNoLW51Yzk1MGV2Yi5jCmluZGV4IGIzZWRjM2MuLjA0ZDI5NWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9tYWNoLW51Yzk1MGV2Yi5jCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9tYWNoLW51Yzk1MGV2Yi5jCkBAIC0yMCw1MSArMjAsMTAgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPG1hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8bWFjaC9yZWdzLWxkbS5oPgogI2luY2x1ZGUgPG1hY2gvZmIuaD4KIAogI2luY2x1ZGUgIm51Yzk1MC5oIgogCi0jaWZkZWYgQ09ORklHX0ZCX05VQzkwMAotLyogTENEIENvbnRyb2xsZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgbnVjOTAwZmJfZGlzcGxheSBfX2luaXRkYXRhIG51Yzk1MF9sY2RfaW5mb1tdID0gewotCS8qIEdpYW50cGx1cyBUZWNobm9sb2d5IEdQTTEwNDBBMCAzMjB4MjQwIENvbG9yIFRGVCBMQ0QgKi8KLQlbMF0gPSB7Ci0JCS50eXBlCQk9IExDTV9EQ0NTX1ZBX1NSQ19SR0I1NjUsCi0JCS53aWR0aCAJCT0gMzIwLAotCQkuaGVpZ2h0CQk9IDI0MCwKLQkJLnhyZXMJCT0gMzIwLAotCQkueXJlcwkJPSAyNDAsCi0JCS5icHAJCT0gMTYsCi0JCS5waXhjbG9jawk9IDIwMDAwMCwKLQkJLmxlZnRfbWFyZ2luCT0gMzQsCi0JCS5yaWdodF9tYXJnaW4gICA9IDU0LAotCQkuaHN5bmNfbGVuCT0gMTAsCi0JCS51cHBlcl9tYXJnaW4JPSAxOCwKLQkJLmxvd2VyX21hcmdpbgk9IDQsCi0JCS52c3luY19sZW4JPSAxLAotCQkuZGNjcwkJPSAweDhlMDAwNDFhLAotCQkuZGV2Y3RsCQk9IDB4MDYwODAwYzAsCi0JCS5mYmN0cmwJCT0gMHgwMGEwMDBhMCwKLQkJLnNjYWxlCQk9IDB4MDQwMDA0MDAsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbnVjOTAwZmJfbWFjaF9pbmZvIG51Yzk1MF9mYl9pbmZvIF9faW5pdGRhdGEgPSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfR1BNMTA0MEEwXzMyMFgyNDApCi0JLmRpc3BsYXlzCQk9ICZudWM5NTBfbGNkX2luZm9bMF0sCi0jZWxzZQotCS5kaXNwbGF5cwkJPSBudWM5NTBfbGNkX2luZm8sCi0jZW5kaWYKLQkubnVtX2Rpc3BsYXlzIAkJPSBBUlJBWV9TSVpFKG51Yzk1MF9sY2RfaW5mbyksCi0JLmRlZmF1bHRfZGlzcGxheQk9IDAsCi0JLmdwaW9fZGlyCQk9IDB4MDAwMDAwMDQsCi0JLmdwaW9fZGlyX21hc2sJCT0gMHhGRkZGRkZGRCwKLQkuZ3Bpb19kYXRhCQk9IDB4MDAwMDAwMDQsCi0JLmdwaW9fZGF0YV9tYXNrCQk9IDB4RkZGRkZGRkQsCi19OwotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIF9faW5pdCBudWM5NTBldmJfbWFwX2lvKHZvaWQpCiB7CiAJbnVjOTUwX21hcF9pbygpOwpAQCAtNzQsOSArMzMsNiBAQAogc3RhdGljIHZvaWQgX19pbml0IG51Yzk1MGV2Yl9pbml0KHZvaWQpCiB7CiAJbnVjOTUwX2JvYXJkX2luaXQoKTsKLSNpZmRlZiBDT05GSUdfRkJfTlVDOTAwCi0JbnVjOTAwX2ZiX3NldF9wbGF0ZGF0YSgmbnVjOTUwX2ZiX2luZm8pOwotI2VuZGlmCiB9CiAKIE1BQ0hJTkVfU1RBUlQoVzkwUDk1MEVWQiwgIlc5MFA5NTBFVkIiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL251YzkxMC5jIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL251YzkxMC5jCmluZGV4IDY1NmYwM2IuLjE1MjNmNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9udWM5MTAuYworKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbnVjOTEwLmMKQEAgLTI2LDYgKzI2LDggQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpudWM5MTBfZGV2W10gX19pbml0ZGF0YSA9IHsKIAkmbnVjOTAwX2RldmljZV90cywKIAkmbnVjOTAwX2RldmljZV9ydGMsCisJJm51YzkwMF9kZXZpY2VfbGNkLAorCSZudWM5MDBfZGV2aWNlX2twaSwKIH07CiAKIC8qIGRlZmluZSBzcGVjaWZpYyBDUFUgcGxhdGZvcm0gaW8gbWFwICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbnVjOTUwLmMgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbnVjOTUwLmMKaW5kZXggNGQxZjFhYi4uNTcwNGY3NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL251Yzk1MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9udWM5NTAuYwpAQCAtMjYsOSArMjYsNyBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm51Yzk1MF9kZXZbXSBfX2luaXRkYXRhID0gewogCSZudWM5MDBfZGV2aWNlX2twaSwKIAkmbnVjOTAwX2RldmljZV9mbWksCi0jaWZkZWYgQ09ORklHX0ZCX05VQzkwMAogCSZudWM5MDBfZGV2aWNlX2xjZCwKLSNlbmRpZgogfTsKIAogLyogZGVmaW5lIHNwZWNpZmljIENQVSBwbGF0Zm9ybSBpbyBtYXAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL0tjb25maWcgYi9hcmNoL2FybS9tbS9LY29uZmlnCmluZGV4IDEwMTEwNWUuLjg3ZWMxNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwpAQCAtNzE3LDE3ICs3MTcsNiBAQAogCSAgYSBmZXcgcHJvdG90eXBlcyBsaWtlIHRoYXQgaW4gZXhpc3RlbmNlKSBhbmQgdGhlcmVmb3JlIGFjY2VzcyB0bwogCSAgdGhhdCByZXF1aXJlZCByZWdpc3RlciBtdXN0IGJlIGVtdWxhdGVkLgogCi1jb25maWcgSEFTX1RMU19SRUcKLQlib29sCi0JZGVwZW5kcyBvbiAhVExTX1JFR19FTVVMCi0JZGVmYXVsdCB5IGlmIFNNUCB8fCBDUFVfMzJ2NwotCWhlbHAKLQkgIFRoaXMgc2VsZWN0cyBzdXBwb3J0IGZvciB0aGUgQ1AxNSB0aHJlYWQgcmVnaXN0ZXIuCi0JICBJdCBpcyBkZWZpbmVkIHRvIGJlIGF2YWlsYWJsZSBvbiBzb21lIEFSTXY2IHByb2Nlc3NvcnMgKGluY2x1ZGluZwotCSAgYWxsIFNNUCBjYXBhYmxlIEFSTXY2J3MpIG9yIGxhdGVyIHByb2Nlc3NvcnMuICBVc2VyIHNwYWNlIG1heQotCSAgYXNzdW1lIGRpcmVjdGx5IGFjY2Vzc2luZyB0aGF0IHJlZ2lzdGVyIGFuZCBhbHdheXMgb2J0YWluIHRoZQotCSAgZXhwZWN0ZWQgdmFsdWUgb25seSBvbiBBUk12NyBhbmQgYWJvdmUuCi0KIGNvbmZpZyBORUVEU19TWVNDQUxMX0ZPUl9DTVBYQ0hHCiAJYm9vbAogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL01ha2VmaWxlIGIvYXJjaC9hcm0vbW0vTWFrZWZpbGUKaW5kZXggZThkMzRhODAuLmQ2M2I2YzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21tL01ha2VmaWxlCkBAIC0xNSw3ICsxNSw2IEBACiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IHByb2Mtc3ltcy5vCiAKIG9iai0kKENPTkZJR19BTElHTk1FTlRfVFJBUCkJKz0gYWxpZ25tZW50Lm8KLW9iai0kKENPTkZJR19ESVNDT05USUdNRU0pCSs9IGRpc2NvbnRpZy5vCiBvYmotJChDT05GSUdfSElHSE1FTSkJCSs9IGhpZ2htZW0ubwogCiBvYmotJChDT05GSUdfQ1BVX0FCUlRfTk9NTVUpCSs9IGFib3J0LW5vbW11Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2FsaWdubWVudC5jIGIvYXJjaC9hcm0vbW0vYWxpZ25tZW50LmMKaW5kZXggNmY5OGMzNS4uZDA3M2I2NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vYWxpZ25tZW50LmMKKysrIGIvYXJjaC9hcm0vbW0vYWxpZ25tZW50LmMKQEAgLTkyNCw4ICs5MjQsMjAgQEAKIAkJYWlfdXNlcm1vZGUgPSBVTV9GSVhVUDsKIAl9CiAKLQlob29rX2ZhdWx0X2NvZGUoMSwgZG9fYWxpZ25tZW50LCBTSUdJTEwsICJhbGlnbm1lbnQgZXhjZXB0aW9uIik7Ci0JaG9va19mYXVsdF9jb2RlKDMsIGRvX2FsaWdubWVudCwgU0lHSUxMLCAiYWxpZ25tZW50IGV4Y2VwdGlvbiIpOworCWhvb2tfZmF1bHRfY29kZSgxLCBkb19hbGlnbm1lbnQsIFNJR0JVUywgQlVTX0FEUkFMTiwKKwkJCSJhbGlnbm1lbnQgZXhjZXB0aW9uIik7CisKKwkvKgorCSAqIEFSTXY2SyBhbmQgQVJNdjcgdXNlIGZhdWx0IHN0YXR1cyAzICgwYjAwMDExKSBhcyBBY2Nlc3MgRmxhZyBzZWN0aW9uCisJICogZmF1bHQsIG5vdCBhcyBhbGlnbm1lbnQgZXJyb3IuCisJICoKKwkgKiBUT0RPOiBoYW5kbGUgQVJNdjZLIHByb3Blcmx5LiBSdW50aW1lIGNoZWNrIGZvciAnSycgZXh0ZW5zaW9uIGlzCisJICogbmVlZGVkLgorCSAqLworCWlmIChjcHVfYXJjaGl0ZWN0dXJlKCkgPD0gQ1BVX0FSQ0hfQVJNdjYpIHsKKwkJaG9va19mYXVsdF9jb2RlKDMsIGRvX2FsaWdubWVudCwgU0lHQlVTLCBCVVNfQURSQUxOLAorCQkJCSJhbGlnbm1lbnQgZXhjZXB0aW9uIik7CisJfQogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS1sMngwLmMgYi9hcmNoL2FybS9tbS9jYWNoZS1sMngwLmMKaW5kZXggOTgxOTg2OS4uOTk4MmViMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC5jCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLWwyeDAuYwpAQCAtMzIsMTQgKzMyLDE0IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgY2FjaGVfd2FpdCh2b2lkIF9faW9tZW0gKnJlZywgdW5zaWduZWQgbG9uZyBtYXNrKQogewogCS8qIHdhaXQgZm9yIHRoZSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KLQl3aGlsZSAocmVhZGwocmVnKSAmIG1hc2spCisJd2hpbGUgKHJlYWRsX3JlbGF4ZWQocmVnKSAmIG1hc2spCiAJCTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNhY2hlX3N5bmModm9pZCkKIHsKIAl2b2lkIF9faW9tZW0gKmJhc2UgPSBsMngwX2Jhc2U7Ci0Jd3JpdGVsKDAsIGJhc2UgKyBMMlgwX0NBQ0hFX1NZTkMpOworCXdyaXRlbF9yZWxheGVkKDAsIGJhc2UgKyBMMlgwX0NBQ0hFX1NZTkMpOwogCWNhY2hlX3dhaXQoYmFzZSArIEwyWDBfQ0FDSEVfU1lOQywgMSk7CiB9CiAKQEAgLTQ3LDE0ICs0NywxNCBAQAogewogCXZvaWQgX19pb21lbSAqYmFzZSA9IGwyeDBfYmFzZTsKIAljYWNoZV93YWl0KGJhc2UgKyBMMlgwX0NMRUFOX0xJTkVfUEEsIDEpOwotCXdyaXRlbChhZGRyLCBiYXNlICsgTDJYMF9DTEVBTl9MSU5FX1BBKTsKKwl3cml0ZWxfcmVsYXhlZChhZGRyLCBiYXNlICsgTDJYMF9DTEVBTl9MSU5FX1BBKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGwyeDBfaW52X2xpbmUodW5zaWduZWQgbG9uZyBhZGRyKQogewogCXZvaWQgX19pb21lbSAqYmFzZSA9IGwyeDBfYmFzZTsKIAljYWNoZV93YWl0KGJhc2UgKyBMMlgwX0lOVl9MSU5FX1BBLCAxKTsKLQl3cml0ZWwoYWRkciwgYmFzZSArIEwyWDBfSU5WX0xJTkVfUEEpOworCXdyaXRlbF9yZWxheGVkKGFkZHIsIGJhc2UgKyBMMlgwX0lOVl9MSU5FX1BBKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTDMxMF9FUlJBVEFfNTg4MzY5CkBAIC03NSw5ICs3NSw5IEBACiAKIAkvKiBDbGVhbiBieSBQQSBmb2xsb3dlZCBieSBJbnZhbGlkYXRlIGJ5IFBBICovCiAJY2FjaGVfd2FpdChiYXNlICsgTDJYMF9DTEVBTl9MSU5FX1BBLCAxKTsKLQl3cml0ZWwoYWRkciwgYmFzZSArIEwyWDBfQ0xFQU5fTElORV9QQSk7CisJd3JpdGVsX3JlbGF4ZWQoYWRkciwgYmFzZSArIEwyWDBfQ0xFQU5fTElORV9QQSk7CiAJY2FjaGVfd2FpdChiYXNlICsgTDJYMF9JTlZfTElORV9QQSwgMSk7Ci0Jd3JpdGVsKGFkZHIsIGJhc2UgKyBMMlgwX0lOVl9MSU5FX1BBKTsKKwl3cml0ZWxfcmVsYXhlZChhZGRyLCBiYXNlICsgTDJYMF9JTlZfTElORV9QQSk7CiB9CiAjZWxzZQogCkBAIC05MCw3ICs5MCw3IEBACiB7CiAJdm9pZCBfX2lvbWVtICpiYXNlID0gbDJ4MF9iYXNlOwogCWNhY2hlX3dhaXQoYmFzZSArIEwyWDBfQ0xFQU5fSU5WX0xJTkVfUEEsIDEpOwotCXdyaXRlbChhZGRyLCBiYXNlICsgTDJYMF9DTEVBTl9JTlZfTElORV9QQSk7CisJd3JpdGVsX3JlbGF4ZWQoYWRkciwgYmFzZSArIEwyWDBfQ0xFQU5fSU5WX0xJTkVfUEEpOwogfQogI2VuZGlmCiAKQEAgLTEwOSw3ICsxMDksNyBAQAogCiAJLyogaW52YWxpZGF0ZSBhbGwgd2F5cyAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZsMngwX2xvY2ssIGZsYWdzKTsKLQl3cml0ZWwobDJ4MF93YXlfbWFzaywgbDJ4MF9iYXNlICsgTDJYMF9JTlZfV0FZKTsKKwl3cml0ZWxfcmVsYXhlZChsMngwX3dheV9tYXNrLCBsMngwX2Jhc2UgKyBMMlgwX0lOVl9XQVkpOwogCWNhY2hlX3dhaXQobDJ4MF9iYXNlICsgTDJYMF9JTlZfV0FZLCBsMngwX3dheV9tYXNrKTsKIAljYWNoZV9zeW5jKCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbDJ4MF9sb2NrLCBmbGFncyk7CkBAIC0yMTUsOCArMjE1LDExIEBACiAKIAlsMngwX2Jhc2UgPSBiYXNlOwogCi0JY2FjaGVfaWQgPSByZWFkbChsMngwX2Jhc2UgKyBMMlgwX0NBQ0hFX0lEKTsKLQlhdXggPSByZWFkbChsMngwX2Jhc2UgKyBMMlgwX0FVWF9DVFJMKTsKKwljYWNoZV9pZCA9IHJlYWRsX3JlbGF4ZWQobDJ4MF9iYXNlICsgTDJYMF9DQUNIRV9JRCk7CisJYXV4ID0gcmVhZGxfcmVsYXhlZChsMngwX2Jhc2UgKyBMMlgwX0FVWF9DVFJMKTsKKworCWF1eCAmPSBhdXhfbWFzazsKKwlhdXggfD0gYXV4X3ZhbDsKIAogCS8qIERldGVybWluZSB0aGUgbnVtYmVyIG9mIHdheXMgKi8KIAlzd2l0Y2ggKGNhY2hlX2lkICYgTDJYMF9DQUNIRV9JRF9QQVJUX01BU0spIHsKQEAgLTI0NSwxNyArMjQ4LDE1IEBACiAJICogSWYgeW91IGFyZSBib290aW5nIGZyb20gbm9uLXNlY3VyZSBtb2RlCiAJICogYWNjZXNzaW5nIHRoZSBiZWxvdyByZWdpc3RlcnMgd2lsbCBmYXVsdC4KIAkgKi8KLQlpZiAoIShyZWFkbChsMngwX2Jhc2UgKyBMMlgwX0NUUkwpICYgMSkpIHsKKwlpZiAoIShyZWFkbF9yZWxheGVkKGwyeDBfYmFzZSArIEwyWDBfQ1RSTCkgJiAxKSkgewogCiAJCS8qIGwyeDAgY29udHJvbGxlciBpcyBkaXNhYmxlZCAqLwotCQlhdXggJj0gYXV4X21hc2s7Ci0JCWF1eCB8PSBhdXhfdmFsOwotCQl3cml0ZWwoYXV4LCBsMngwX2Jhc2UgKyBMMlgwX0FVWF9DVFJMKTsKKwkJd3JpdGVsX3JlbGF4ZWQoYXV4LCBsMngwX2Jhc2UgKyBMMlgwX0FVWF9DVFJMKTsKIAogCQlsMngwX2ludl9hbGwoKTsKIAogCQkvKiBlbmFibGUgTDJYMCAqLwotCQl3cml0ZWwoMSwgbDJ4MF9iYXNlICsgTDJYMF9DVFJMKTsKKwkJd3JpdGVsX3JlbGF4ZWQoMSwgbDJ4MF9iYXNlICsgTDJYMF9DVFJMKTsKIAl9CiAKIAlvdXRlcl9jYWNoZS5pbnZfcmFuZ2UgPSBsMngwX2ludl9yYW5nZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2Rpc2NvbnRpZy5jIGIvYXJjaC9hcm0vbW0vZGlzY29udGlnLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4YzBjNGIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbW0vZGlzY29udGlnLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbW0vZGlzY29udGlnLmMKLSAqCi0gKiBEaXNjb250aWd1b3VzIG1lbW9yeSBzdXBwb3J0LgotICoKLSAqIEluaXRpYWwgY29kZTogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgTmljb2xhcyBQaXRyZQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0KLSNpZiBNQVhfTlVNTk9ERVMgIT0gNCAmJiBNQVhfTlVNTk9ERVMgIT0gMTYKLSMgZXJyb3IgRml4IE1lIFBsZWFzZQotI2VuZGlmCi0KLS8qCi0gKiBPdXIgbm9kZV9kYXRhIHN0cnVjdHVyZSBmb3IgZGlzY29udGlndW91cyBtZW1vcnkuCi0gKi8KLQotcGdfZGF0YV90IGRpc2NvbnRpZ19ub2RlX2RhdGFbTUFYX05VTU5PREVTXSA9IHsKLSAgeyAuYmRhdGEgPSAmYm9vdG1lbV9ub2RlX2RhdGFbMF0gfSwKLSAgeyAuYmRhdGEgPSAmYm9vdG1lbV9ub2RlX2RhdGFbMV0gfSwKLSAgeyAuYmRhdGEgPSAmYm9vdG1lbV9ub2RlX2RhdGFbMl0gfSwKLSAgeyAuYmRhdGEgPSAmYm9vdG1lbV9ub2RlX2RhdGFbM10gfSwKLSNpZiBNQVhfTlVNTk9ERVMgPT0gMTYKLSAgeyAuYmRhdGEgPSAmYm9vdG1lbV9ub2RlX2RhdGFbNF0gfSwKLSAgeyAuYmRhdGEgPSAmYm9vdG1lbV9ub2RlX2RhdGFbNV0gfSwKLSAgeyAuYmRhdGEgPSAmYm9vdG1lbV9ub2RlX2RhdGFbNl0gfSwKLSAgeyAuYmRhdGEgPSAmYm9vdG1lbV9ub2RlX2RhdGFbN10gfSwKLSAgeyAuYmRhdGEgPSAmYm9vdG1lbV9ub2RlX2RhdGFbOF0gfSwKLSAgeyAuYmRhdGEgPSAmYm9vdG1lbV9ub2RlX2RhdGFbOV0gfSwKLSAgeyAuYmRhdGEgPSAmYm9vdG1lbV9ub2RlX2RhdGFbMTBdIH0sCi0gIHsgLmJkYXRhID0gJmJvb3RtZW1fbm9kZV9kYXRhWzExXSB9LAotICB7IC5iZGF0YSA9ICZib290bWVtX25vZGVfZGF0YVsxMl0gfSwKLSAgeyAuYmRhdGEgPSAmYm9vdG1lbV9ub2RlX2RhdGFbMTNdIH0sCi0gIHsgLmJkYXRhID0gJmJvb3RtZW1fbm9kZV9kYXRhWzE0XSB9LAotICB7IC5iZGF0YSA9ICZib290bWVtX25vZGVfZGF0YVsxNV0gfSwKLSNlbmRpZgotfTsKLQotRVhQT1JUX1NZTUJPTChkaXNjb250aWdfbm9kZV9kYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMgYi9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jCmluZGV4IDllNzc0MmYuLmM3MDRlZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMKKysrIGIvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYwpAQCAtMTgzLDYgKzE4Myw4IEBACiBfX2RtYV9hbGxvY19yZW1hcChzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IHNpemUsIGdmcF90IGdmcCwgcGdwcm90X3QgcHJvdCkKIHsKIAlzdHJ1Y3QgYXJtX3ZtcmVnaW9uICpjOworCXNpemVfdCBhbGlnbjsKKwlpbnQgYml0OwogCiAJaWYgKCFjb25zaXN0ZW50X3B0ZVswXSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBub3QgaW5pdGlhbGlzZWRcbiIsIF9fZnVuY19fKTsKQEAgLTE5MSw5ICsxOTMsMjAgQEAKIAl9CiAKIAkvKgorCSAqIEFsaWduIHRoZSB2aXJ0dWFsIHJlZ2lvbiBhbGxvY2F0aW9uIC0gbWF4aW11bSBhbGlnbm1lbnQgaXMKKwkgKiBhIHNlY3Rpb24gc2l6ZSwgbWluaW11bSBpcyBhIHBhZ2Ugc2l6ZS4gIFRoaXMgaGVscHMgcmVkdWNlCisJICogZnJhZ21lbnRhdGlvbiBvZiB0aGUgRE1BIHNwYWNlLCBhbmQgYWxzbyBwcmV2ZW50cyBhbGxvY2F0aW9ucworCSAqIHNtYWxsZXIgdGhhbiBhIHNlY3Rpb24gZnJvbSBjcm9zc2luZyBhIHNlY3Rpb24gYm91bmRhcnkuCisJICovCisJYml0ID0gZmxzKHNpemUgLSAxKSArIDE7CisJaWYgKGJpdCA+IFNFQ1RJT05fU0hJRlQpCisJCWJpdCA9IFNFQ1RJT05fU0hJRlQ7CisJYWxpZ24gPSAxIDw8IGJpdDsKKworCS8qCiAJICogQWxsb2NhdGUgYSB2aXJ0dWFsIGFkZHJlc3MgaW4gdGhlIGNvbnNpc3RlbnQgbWFwcGluZyByZWdpb24uCiAJICovCi0JYyA9IGFybV92bXJlZ2lvbl9hbGxvYygmY29uc2lzdGVudF9oZWFkLCBzaXplLAorCWMgPSBhcm1fdm1yZWdpb25fYWxsb2MoJmNvbnNpc3RlbnRfaGVhZCwgYWxpZ24sIHNpemUsCiAJCQkgICAgZ2ZwICYgfihfX0dGUF9ETUEgfCBfX0dGUF9ISUdITUVNKSk7CiAJaWYgKGMpIHsKIAkJcHRlX3QgKnB0ZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2ZhdWx0LmMgYi9hcmNoL2FybS9tbS9mYXVsdC5jCmluZGV4IGNiZmIyZWQuLjIzYjBiMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9hcm0vbW0vZmF1bHQuYwpAQCAtNDEzLDcgKzQxMywxNiBAQAogCXBtZF9rID0gcG1kX29mZnNldChwZ2RfaywgYWRkcik7CiAJcG1kICAgPSBwbWRfb2Zmc2V0KHBnZCwgYWRkcik7CiAKLQlpZiAocG1kX25vbmUoKnBtZF9rKSkKKwkvKgorCSAqIE9uIEFSTSBvbmUgTGludXggUEdEIGVudHJ5IGNvbnRhaW5zIHR3byBoYXJkd2FyZSBlbnRyaWVzIChzZWUgcGFnZQorCSAqIHRhYmxlcyBsYXlvdXQgaW4gcGd0YWJsZS5oKS4gV2Ugbm9ybWFsbHkgZ3VhcmFudGVlIHRoYXQgd2UgYWx3YXlzCisJICogZmlsbCBib3RoIEwxIGVudHJpZXMuIEJ1dCBjcmVhdGVfbWFwcGluZygpIGRvZXNuJ3QgZm9sbG93IHRoZSBydWxlLgorCSAqIEl0IGNhbiBjcmVhdGUgaW5pZGl2aWR1YWwgTDEgZW50cmllcywgc28gaGVyZSB3ZSBoYXZlIHRvIGNhbGwKKwkgKiBwbWRfbm9uZSgpIGNoZWNrIGZvciB0aGUgZW50cnkgcmVhbGx5IGNvcnJlc3BvbmRlZCB0byBhZGRyZXNzLCBub3QKKwkgKiBmb3IgdGhlIGZpcnN0IG9mIHBhaXIuCisJICovCisJaW5kZXggPSAoYWRkciA+PiBTRUNUSU9OX1NISUZUKSAmIDE7CisJaWYgKHBtZF9ub25lKHBtZF9rW2luZGV4XSkpCiAJCWdvdG8gYmFkX2FyZWE7CiAKIAljb3B5X3BtZChwbWQsIHBtZF9rKTsKQEAgLTQ2MywxNSArNDcyLDEwIEBACiAJICogZGVmaW5lcyB0aGVzZSB0byBiZSAicHJlY2lzZSIgYWJvcnRzLgogCSAqLwogCXsgZG9fYmFkLAkJU0lHU0VHViwgMCwJCSJ2ZWN0b3IgZXhjZXB0aW9uIgkJICAgfSwKLQl7IGRvX2JhZCwJCVNJR0lMTCwJIEJVU19BRFJBTE4sCSJhbGlnbm1lbnQgZXhjZXB0aW9uIgkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywJIEJVU19BRFJBTE4sCSJhbGlnbm1lbnQgZXhjZXB0aW9uIgkJICAgfSwKIAl7IGRvX2JhZCwJCVNJR0tJTEwsIDAsCQkidGVybWluYWwgZXhjZXB0aW9uIgkJICAgfSwKLQl7IGRvX2JhZCwJCVNJR0lMTCwJIEJVU19BRFJBTE4sCSJhbGlnbm1lbnQgZXhjZXB0aW9uIgkJICAgfSwKLS8qIERvIHdlIG5lZWQgcnVudGltZSBjaGVjayA/ICovCi0jaWYgX19MSU5VWF9BUk1fQVJDSF9fIDwgNgorCXsgZG9fYmFkLAkJU0lHQlVTLAkgQlVTX0FEUkFMTiwJImFsaWdubWVudCBleGNlcHRpb24iCQkgICB9LAogCXsgZG9fYmFkLAkJU0lHQlVTLAkgMCwJCSJleHRlcm5hbCBhYm9ydCBvbiBsaW5lZmV0Y2giCSAgIH0sCi0jZWxzZQotCXsgZG9fdHJhbnNsYXRpb25fZmF1bHQsCVNJR1NFR1YsIFNFR1ZfTUFQRVJSLAkiSS1jYWNoZSBtYWludGVuYW5jZSBmYXVsdCIJICAgfSwKLSNlbmRpZgogCXsgZG9fdHJhbnNsYXRpb25fZmF1bHQsCVNJR1NFR1YsIFNFR1ZfTUFQRVJSLAkic2VjdGlvbiB0cmFuc2xhdGlvbiBmYXVsdCIJICAgfSwKIAl7IGRvX2JhZCwJCVNJR0JVUywJIDAsCQkiZXh0ZXJuYWwgYWJvcnQgb24gbGluZWZldGNoIgkgICB9LAogCXsgZG9fcGFnZV9mYXVsdCwJU0lHU0VHViwgU0VHVl9NQVBFUlIsCSJwYWdlIHRyYW5zbGF0aW9uIGZhdWx0IgkgICB9LApAQCAtNTA4LDEzICs1MTIsMTUgQEAKIAogdm9pZCBfX2luaXQKIGhvb2tfZmF1bHRfY29kZShpbnQgbnIsIGludCAoKmZuKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBwdF9yZWdzICopLAotCQlpbnQgc2lnLCBjb25zdCBjaGFyICpuYW1lKQorCQlpbnQgc2lnLCBpbnQgY29kZSwgY29uc3QgY2hhciAqbmFtZSkKIHsKLQlpZiAobnIgPj0gMCAmJiBuciA8IEFSUkFZX1NJWkUoZnNyX2luZm8pKSB7Ci0JCWZzcl9pbmZvW25yXS5mbiAgID0gZm47Ci0JCWZzcl9pbmZvW25yXS5zaWcgID0gc2lnOwotCQlmc3JfaW5mb1tucl0ubmFtZSA9IG5hbWU7Ci0JfQorCWlmIChuciA8IDAgfHwgbnIgPj0gQVJSQVlfU0laRShmc3JfaW5mbykpCisJCUJVRygpOworCisJZnNyX2luZm9bbnJdLmZuICAgPSBmbjsKKwlmc3JfaW5mb1tucl0uc2lnICA9IHNpZzsKKwlmc3JfaW5mb1tucl0uY29kZSA9IGNvZGU7CisJZnNyX2luZm9bbnJdLm5hbWUgPSBuYW1lOwogfQogCiAvKgpAQCAtNTk0LDMgKzYwMCwyNSBAQAogCWFybV9ub3RpZnlfZGllKCIiLCByZWdzLCAmaW5mbywgaWZzciwgMCk7CiB9CiAKK3N0YXRpYyBpbnQgX19pbml0IGV4Y2VwdGlvbnNfaW5pdCh2b2lkKQoreworCWlmIChjcHVfYXJjaGl0ZWN0dXJlKCkgPj0gQ1BVX0FSQ0hfQVJNdjYpIHsKKwkJaG9va19mYXVsdF9jb2RlKDQsIGRvX3RyYW5zbGF0aW9uX2ZhdWx0LCBTSUdTRUdWLCBTRUdWX01BUEVSUiwKKwkJCQkiSS1jYWNoZSBtYWludGVuYW5jZSBmYXVsdCIpOworCX0KKworCWlmIChjcHVfYXJjaGl0ZWN0dXJlKCkgPj0gQ1BVX0FSQ0hfQVJNdjcpIHsKKwkJLyoKKwkJICogVE9ETzogQWNjZXNzIGZsYWcgZmF1bHRzIGludHJvZHVjZWQgaW4gQVJNdjZLLgorCQkgKiBSdW50aW1lIGNoZWNrIGZvciAnSycgZXh0ZW5zaW9uIGlzIG5lZWRlZAorCQkgKi8KKwkJaG9va19mYXVsdF9jb2RlKDMsIGRvX2JhZCwgU0lHU0VHViwgU0VHVl9NQVBFUlIsCisJCQkJInNlY3Rpb24gYWNjZXNzIGZsYWcgZmF1bHQiKTsKKwkJaG9va19mYXVsdF9jb2RlKDYsIGRvX2JhZCwgU0lHU0VHViwgU0VHVl9NQVBFUlIsCisJCQkJInNlY3Rpb24gYWNjZXNzIGZsYWcgZmF1bHQiKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChleGNlcHRpb25zX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaGlnaG1lbS5jIGIvYXJjaC9hcm0vbW0vaGlnaG1lbS5jCmluZGV4IDA4NjgxNmIuLjZhYjI0NDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2hpZ2htZW0uYworKysgYi9hcmNoL2FybS9tbS9oaWdobWVtLmMKQEAgLTE2MywxOSArMTYzLDIyIEBACiAKIHZvaWQgKmttYXBfaGlnaF9sMV92aXB0KHN0cnVjdCBwYWdlICpwYWdlLCBwdGVfdCAqc2F2ZWRfcHRlKQogewotCXVuc2lnbmVkIGludCBpZHgsIGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlpbnQgKmRlcHRoID0gJnBlcl9jcHUoa21hcF9oaWdoX2wxX3ZpcHRfZGVwdGgsIGNwdSk7CisJdW5zaWduZWQgaW50IGlkeCwgY3B1OworCWludCAqZGVwdGg7CiAJdW5zaWduZWQgbG9uZyB2YWRkciwgZmxhZ3M7CiAJcHRlX3QgcHRlLCAqcHRlcDsKIAorCWlmICghaW5faW50ZXJydXB0KCkpCisJCXByZWVtcHRfZGlzYWJsZSgpOworCisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWRlcHRoID0gJnBlcl9jcHUoa21hcF9oaWdoX2wxX3ZpcHRfZGVwdGgsIGNwdSk7CisKIAlpZHggPSBLTV9MMV9DQUNIRSArIEtNX1RZUEVfTlIgKiBjcHU7CiAJdmFkZHIgPSBfX2ZpeF90b192aXJ0KEZJWF9LTUFQX0JFR0lOICsgaWR4KTsKIAlwdGVwID0gVE9QX1BURSh2YWRkcik7CiAJcHRlID0gbWtfcHRlKHBhZ2UsIGttYXBfcHJvdCk7CiAKLQlpZiAoIWluX2ludGVycnVwdCgpKQotCQlwcmVlbXB0X2Rpc2FibGUoKTsKLQogCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJKCpkZXB0aCkrKzsKIAlpZiAocHRlX3ZhbCgqcHRlcCkgPT0gcHRlX3ZhbChwdGUpKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9pbml0LmMgYi9hcmNoL2FybS9tbS9pbml0LmMKaW5kZXggZjZhOTk5NC4uNzE4NWIwMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaW5pdC5jCisrKyBiL2FyY2gvYXJtL21tL2luaXQuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KQEAgLTc5LDM4ICs4MCwzNyBAQAogdm9pZCBzaG93X21lbSh2b2lkKQogewogCWludCBmcmVlID0gMCwgdG90YWwgPSAwLCByZXNlcnZlZCA9IDA7Ci0JaW50IHNoYXJlZCA9IDAsIGNhY2hlZCA9IDAsIHNsYWIgPSAwLCBub2RlLCBpOworCWludCBzaGFyZWQgPSAwLCBjYWNoZWQgPSAwLCBzbGFiID0gMCwgaTsKIAlzdHJ1Y3QgbWVtaW5mbyAqIG1pID0gJm1lbWluZm87CiAKIAlwcmludGsoIk1lbS1pbmZvOlxuIik7CiAJc2hvd19mcmVlX2FyZWFzKCk7Ci0JZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgewotCQlmb3JfZWFjaF9ub2RlYmFuayAoaSxtaSxub2RlKSB7Ci0JCQlzdHJ1Y3QgbWVtYmFuayAqYmFuayA9ICZtaS0+YmFua1tpXTsKLQkJCXVuc2lnbmVkIGludCBwZm4xLCBwZm4yOwotCQkJc3RydWN0IHBhZ2UgKnBhZ2UsICplbmQ7CiAKLQkJCXBmbjEgPSBiYW5rX3Bmbl9zdGFydChiYW5rKTsKLQkJCXBmbjIgPSBiYW5rX3Bmbl9lbmQoYmFuayk7CisJZm9yX2VhY2hfYmFuayAoaSwgbWkpIHsKKwkJc3RydWN0IG1lbWJhbmsgKmJhbmsgPSAmbWktPmJhbmtbaV07CisJCXVuc2lnbmVkIGludCBwZm4xLCBwZm4yOworCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgKmVuZDsKIAotCQkJcGFnZSA9IHBmbl90b19wYWdlKHBmbjEpOwotCQkJZW5kICA9IHBmbl90b19wYWdlKHBmbjIgLSAxKSArIDE7CisJCXBmbjEgPSBiYW5rX3Bmbl9zdGFydChiYW5rKTsKKwkJcGZuMiA9IGJhbmtfcGZuX2VuZChiYW5rKTsKIAotCQkJZG8gewotCQkJCXRvdGFsKys7Ci0JCQkJaWYgKFBhZ2VSZXNlcnZlZChwYWdlKSkKLQkJCQkJcmVzZXJ2ZWQrKzsKLQkJCQllbHNlIGlmIChQYWdlU3dhcENhY2hlKHBhZ2UpKQotCQkJCQljYWNoZWQrKzsKLQkJCQllbHNlIGlmIChQYWdlU2xhYihwYWdlKSkKLQkJCQkJc2xhYisrOwotCQkJCWVsc2UgaWYgKCFwYWdlX2NvdW50KHBhZ2UpKQotCQkJCQlmcmVlKys7Ci0JCQkJZWxzZQotCQkJCQlzaGFyZWQgKz0gcGFnZV9jb3VudChwYWdlKSAtIDE7Ci0JCQkJcGFnZSsrOwotCQkJfSB3aGlsZSAocGFnZSA8IGVuZCk7Ci0JCX0KKwkJcGFnZSA9IHBmbl90b19wYWdlKHBmbjEpOworCQllbmQgID0gcGZuX3RvX3BhZ2UocGZuMiAtIDEpICsgMTsKKworCQlkbyB7CisJCQl0b3RhbCsrOworCQkJaWYgKFBhZ2VSZXNlcnZlZChwYWdlKSkKKwkJCQlyZXNlcnZlZCsrOworCQkJZWxzZSBpZiAoUGFnZVN3YXBDYWNoZShwYWdlKSkKKwkJCQljYWNoZWQrKzsKKwkJCWVsc2UgaWYgKFBhZ2VTbGFiKHBhZ2UpKQorCQkJCXNsYWIrKzsKKwkJCWVsc2UgaWYgKCFwYWdlX2NvdW50KHBhZ2UpKQorCQkJCWZyZWUrKzsKKwkJCWVsc2UKKwkJCQlzaGFyZWQgKz0gcGFnZV9jb3VudChwYWdlKSAtIDE7CisJCQlwYWdlKys7CisJCX0gd2hpbGUgKHBhZ2UgPCBlbmQpOwogCX0KIAogCXByaW50aygiJWQgcGFnZXMgb2YgUkFNXG4iLCB0b3RhbCk7CkBAIC0xMjEsNyArMTIxLDcgQEAKIAlwcmludGsoIiVkIHBhZ2VzIHN3YXAgY2FjaGVkXG4iLCBjYWNoZWQpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZmluZF9ub2RlX2xpbWl0cyhpbnQgbm9kZSwgc3RydWN0IG1lbWluZm8gKm1pLAorc3RhdGljIHZvaWQgX19pbml0IGZpbmRfbGltaXRzKHN0cnVjdCBtZW1pbmZvICptaSwKIAl1bnNpZ25lZCBsb25nICptaW4sIHVuc2lnbmVkIGxvbmcgKm1heF9sb3csIHVuc2lnbmVkIGxvbmcgKm1heF9oaWdoKQogewogCWludCBpOwpAQCAtMTI5LDcgKzEyOSw3IEBACiAJKm1pbiA9IC0xVUw7CiAJKm1heF9sb3cgPSAqbWF4X2hpZ2ggPSAwOwogCi0JZm9yX2VhY2hfbm9kZWJhbmsoaSwgbWksIG5vZGUpIHsKKwlmb3JfZWFjaF9iYW5rIChpLCBtaSkgewogCQlzdHJ1Y3QgbWVtYmFuayAqYmFuayA9ICZtaS0+YmFua1tpXTsKIAkJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOwogCkBAIC0xNDcsMTU1ICsxNDcsNjQgQEAKIAl9CiB9CiAKLS8qCi0gKiBGSVhNRTogV2UgcmVhbGx5IHdhbnQgdG8gYXZvaWQgYWxsb2NhdGluZyB0aGUgYm9vdG1hcCBiaXRtYXAKLSAqIG92ZXIgdGhlIHRvcCBvZiB0aGUgaW5pdHJkLiAgSG9wZWZ1bGx5LCB0aGlzIGlzIGxvY2F0ZWQgdG93YXJkcwotICogdGhlIHN0YXJ0IG9mIGEgYmFuaywgc28gaWYgd2UgYWxsb2NhdGUgdGhlIGJvb3RtYXAgYml0bWFwIGF0Ci0gKiB0aGUgZW5kLCB3ZSB3b24ndCBjbGFzaC4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQKLWZpbmRfYm9vdG1hcF9wZm4oaW50IG5vZGUsIHN0cnVjdCBtZW1pbmZvICptaSwgdW5zaWduZWQgaW50IGJvb3RtYXBfcGFnZXMpCi17Ci0JdW5zaWduZWQgaW50IHN0YXJ0X3BmbiwgaSwgYm9vdG1hcF9wZm47Ci0KLQlzdGFydF9wZm4gICA9IFBBR0VfQUxJR04oX19wYShfZW5kKSkgPj4gUEFHRV9TSElGVDsKLQlib290bWFwX3BmbiA9IDA7Ci0KLQlmb3JfZWFjaF9ub2RlYmFuayhpLCBtaSwgbm9kZSkgewotCQlzdHJ1Y3QgbWVtYmFuayAqYmFuayA9ICZtaS0+YmFua1tpXTsKLQkJdW5zaWduZWQgaW50IHN0YXJ0LCBlbmQ7Ci0KLQkJc3RhcnQgPSBiYW5rX3Bmbl9zdGFydChiYW5rKTsKLQkJZW5kICAgPSBiYW5rX3Bmbl9lbmQoYmFuayk7Ci0KLQkJaWYgKGVuZCA8IHN0YXJ0X3BmbikKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChzdGFydCA8IHN0YXJ0X3BmbikKLQkJCXN0YXJ0ID0gc3RhcnRfcGZuOwotCi0JCWlmIChlbmQgPD0gc3RhcnQpCi0JCQljb250aW51ZTsKLQotCQlpZiAoZW5kIC0gc3RhcnQgPj0gYm9vdG1hcF9wYWdlcykgewotCQkJYm9vdG1hcF9wZm4gPSBzdGFydDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKGJvb3RtYXBfcGZuID09IDApCi0JCUJVRygpOwotCi0JcmV0dXJuIGJvb3RtYXBfcGZuOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBjaGVja19pbml0cmQoc3RydWN0IG1lbWluZm8gKm1pKQotewotCWludCBpbml0cmRfbm9kZSA9IC0yOwotI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAotCXVuc2lnbmVkIGxvbmcgZW5kID0gcGh5c19pbml0cmRfc3RhcnQgKyBwaHlzX2luaXRyZF9zaXplOwotCi0JLyoKLQkgKiBNYWtlIHN1cmUgdGhhdCB0aGUgaW5pdHJkIGlzIHdpdGhpbiBhIHZhbGlkIGFyZWEgb2YKLQkgKiBtZW1vcnkuCi0JICovCi0JaWYgKHBoeXNfaW5pdHJkX3NpemUpIHsKLQkJdW5zaWduZWQgaW50IGk7Ci0KLQkJaW5pdHJkX25vZGUgPSAtMTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgbWktPm5yX2JhbmtzOyBpKyspIHsKLQkJCXN0cnVjdCBtZW1iYW5rICpiYW5rID0gJm1pLT5iYW5rW2ldOwotCQkJaWYgKGJhbmtfcGh5c19zdGFydChiYW5rKSA8PSBwaHlzX2luaXRyZF9zdGFydCAmJgotCQkJICAgIGVuZCA8PSBiYW5rX3BoeXNfZW5kKGJhbmspKQotCQkJCWluaXRyZF9ub2RlID0gYmFuay0+bm9kZTsKLQkJfQotCX0KLQotCWlmIChpbml0cmRfbm9kZSA9PSAtMSkgewotCQlwcmludGsoS0VSTl9FUlIgIklOSVRSRDogMHglMDhseCsweCUwOGx4IGV4dGVuZHMgYmV5b25kICIKLQkJICAgICAgICJwaHlzaWNhbCBtZW1vcnkgLSBkaXNhYmxpbmcgaW5pdHJkXG4iLAotCQkgICAgICAgcGh5c19pbml0cmRfc3RhcnQsIHBoeXNfaW5pdHJkX3NpemUpOwotCQlwaHlzX2luaXRyZF9zdGFydCA9IHBoeXNfaW5pdHJkX3NpemUgPSAwOwotCX0KLSNlbmRpZgotCi0JcmV0dXJuIGluaXRyZF9ub2RlOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgYm9vdG1lbV9pbml0X25vZGUoaW50IG5vZGUsIHN0cnVjdCBtZW1pbmZvICptaSwKK3N0YXRpYyB2b2lkIF9faW5pdCBhcm1fYm9vdG1lbV9pbml0KHN0cnVjdCBtZW1pbmZvICptaSwKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKQogewotCXVuc2lnbmVkIGxvbmcgYm9vdF9wZm47CiAJdW5zaWduZWQgaW50IGJvb3RfcGFnZXM7CisJcGh5c19hZGRyX3QgYml0bWFwOwogCXBnX2RhdGFfdCAqcGdkYXQ7CiAJaW50IGk7CiAKIAkvKgotCSAqIEFsbG9jYXRlIHRoZSBib290bWVtIGJpdG1hcCBwYWdlLgorCSAqIEFsbG9jYXRlIHRoZSBib290bWVtIGJpdG1hcCBwYWdlLiAgVGhpcyBtdXN0IGJlIGluIGEgcmVnaW9uCisJICogb2YgbWVtb3J5IHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gbWFwcGVkLgogCSAqLwogCWJvb3RfcGFnZXMgPSBib290bWVtX2Jvb3RtYXBfcGFnZXMoZW5kX3BmbiAtIHN0YXJ0X3Bmbik7Ci0JYm9vdF9wZm4gPSBmaW5kX2Jvb3RtYXBfcGZuKG5vZGUsIG1pLCBib290X3BhZ2VzKTsKKwliaXRtYXAgPSBtZW1ibG9ja19hbGxvY19iYXNlKGJvb3RfcGFnZXMgPDwgUEFHRV9TSElGVCwgTDFfQ0FDSEVfQllURVMsCisJCQkJX19wZm5fdG9fcGh5cyhlbmRfcGZuKSk7CiAKIAkvKgotCSAqIEluaXRpYWxpc2UgdGhlIGJvb3RtZW0gYWxsb2NhdG9yIGZvciB0aGlzIG5vZGUsIGhhbmRpbmcgdGhlCisJICogSW5pdGlhbGlzZSB0aGUgYm9vdG1lbSBhbGxvY2F0b3IsIGhhbmRpbmcgdGhlCiAJICogbWVtb3J5IGJhbmtzIG92ZXIgdG8gYm9vdG1lbS4KIAkgKi8KLQlub2RlX3NldF9vbmxpbmUobm9kZSk7Ci0JcGdkYXQgPSBOT0RFX0RBVEEobm9kZSk7Ci0JaW5pdF9ib290bWVtX25vZGUocGdkYXQsIGJvb3RfcGZuLCBzdGFydF9wZm4sIGVuZF9wZm4pOworCW5vZGVfc2V0X29ubGluZSgwKTsKKwlwZ2RhdCA9IE5PREVfREFUQSgwKTsKKwlpbml0X2Jvb3RtZW1fbm9kZShwZ2RhdCwgX19waHlzX3RvX3BmbihiaXRtYXApLCBzdGFydF9wZm4sIGVuZF9wZm4pOwogCi0JZm9yX2VhY2hfbm9kZWJhbmsoaSwgbWksIG5vZGUpIHsKKwlmb3JfZWFjaF9iYW5rKGksIG1pKSB7CiAJCXN0cnVjdCBtZW1iYW5rICpiYW5rID0gJm1pLT5iYW5rW2ldOwogCQlpZiAoIWJhbmstPmhpZ2htZW0pCi0JCQlmcmVlX2Jvb3RtZW1fbm9kZShwZ2RhdCwgYmFua19waHlzX3N0YXJ0KGJhbmspLCBiYW5rX3BoeXNfc2l6ZShiYW5rKSk7CisJCQlmcmVlX2Jvb3RtZW0oYmFua19waHlzX3N0YXJ0KGJhbmspLCBiYW5rX3BoeXNfc2l6ZShiYW5rKSk7CiAJfQogCiAJLyoKLQkgKiBSZXNlcnZlIHRoZSBib290bWVtIGJpdG1hcCBmb3IgdGhpcyBub2RlLgorCSAqIFJlc2VydmUgdGhlIG1lbWJsb2NrIHJlc2VydmVkIHJlZ2lvbnMgaW4gYm9vdG1lbS4KIAkgKi8KLQlyZXNlcnZlX2Jvb3RtZW1fbm9kZShwZ2RhdCwgYm9vdF9wZm4gPDwgUEFHRV9TSElGVCwKLQkJCSAgICAgYm9vdF9wYWdlcyA8PCBQQUdFX1NISUZULCBCT09UTUVNX0RFRkFVTFQpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgYm9vdG1lbV9yZXNlcnZlX2luaXRyZChpbnQgbm9kZSkKLXsKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKLQlwZ19kYXRhX3QgKnBnZGF0ID0gTk9ERV9EQVRBKG5vZGUpOwotCWludCByZXM7Ci0KLQlyZXMgPSByZXNlcnZlX2Jvb3RtZW1fbm9kZShwZ2RhdCwgcGh5c19pbml0cmRfc3RhcnQsCi0JCQkgICAgIHBoeXNfaW5pdHJkX3NpemUsIEJPT1RNRU1fRVhDTFVTSVZFKTsKLQotCWlmIChyZXMgPT0gMCkgewotCQlpbml0cmRfc3RhcnQgPSBfX3BoeXNfdG9fdmlydChwaHlzX2luaXRyZF9zdGFydCk7Ci0JCWluaXRyZF9lbmQgPSBpbml0cmRfc3RhcnQgKyBwaHlzX2luaXRyZF9zaXplOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkJIklOSVRSRDogMHglMDhseCsweCUwOGx4IG92ZXJsYXBzIGluLXVzZSAiCi0JCQkibWVtb3J5IHJlZ2lvbiAtIGRpc2FibGluZyBpbml0cmRcbiIsCi0JCQlwaHlzX2luaXRyZF9zdGFydCwgcGh5c19pbml0cmRfc2l6ZSk7CisJZm9yIChpID0gMDsgaSA8IG1lbWJsb2NrLnJlc2VydmVkLmNudDsgaSsrKSB7CisJCXBoeXNfYWRkcl90IHN0YXJ0ID0gbWVtYmxvY2tfc3RhcnRfcGZuKCZtZW1ibG9jay5yZXNlcnZlZCwgaSk7CisJCWlmIChzdGFydCA+PSBzdGFydF9wZm4gJiYKKwkJICAgIG1lbWJsb2NrX2VuZF9wZm4oJm1lbWJsb2NrLnJlc2VydmVkLCBpKSA8PSBlbmRfcGZuKQorCQkJcmVzZXJ2ZV9ib290bWVtX25vZGUocGdkYXQsIF9fcGZuX3RvX3BoeXMoc3RhcnQpLAorCQkJCW1lbWJsb2NrX3NpemVfYnl0ZXMoJm1lbWJsb2NrLnJlc2VydmVkLCBpKSwKKwkJCQlCT09UTUVNX0RFRkFVTFQpOwogCX0KLSNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgYm9vdG1lbV9mcmVlX25vZGUoaW50IG5vZGUsIHN0cnVjdCBtZW1pbmZvICptaSkKK3N0YXRpYyB2b2lkIF9faW5pdCBhcm1fYm9vdG1lbV9mcmVlKHN0cnVjdCBtZW1pbmZvICptaSwgdW5zaWduZWQgbG9uZyBtaW4sCisJdW5zaWduZWQgbG9uZyBtYXhfbG93LCB1bnNpZ25lZCBsb25nIG1heF9oaWdoKQogewogCXVuc2lnbmVkIGxvbmcgem9uZV9zaXplW01BWF9OUl9aT05FU10sIHpob2xlX3NpemVbTUFYX05SX1pPTkVTXTsKLQl1bnNpZ25lZCBsb25nIG1pbiwgbWF4X2xvdywgbWF4X2hpZ2g7CiAJaW50IGk7CiAKLQlmaW5kX25vZGVfbGltaXRzKG5vZGUsIG1pLCAmbWluLCAmbWF4X2xvdywgJm1heF9oaWdoKTsKLQogCS8qCi0JICogaW5pdGlhbGlzZSB0aGUgem9uZXMgd2l0aGluIHRoaXMgbm9kZS4KKwkgKiBpbml0aWFsaXNlIHRoZSB6b25lcy4KIAkgKi8KIAltZW1zZXQoem9uZV9zaXplLCAwLCBzaXplb2Yoem9uZV9zaXplKSk7CiAKIAkvKgotCSAqIFRoZSBzaXplIG9mIHRoaXMgbm9kZSBoYXMgYWxyZWFkeSBiZWVuIGRldGVybWluZWQuICBJZiB3ZSBuZWVkCi0JICogdG8gZG8gYW55dGhpbmcgZmFuY3kgd2l0aCB0aGUgYWxsb2NhdGlvbiBvZiB0aGlzIG1lbW9yeSB0byB0aGUKLQkgKiB6b25lcywgbm93IGlzIHRoZSB0aW1lIHRvIGRvIGl0LgorCSAqIFRoZSBtZW1vcnkgc2l6ZSBoYXMgYWxyZWFkeSBiZWVuIGRldGVybWluZWQuICBJZiB3ZSBuZWVkCisJICogdG8gZG8gYW55dGhpbmcgZmFuY3kgd2l0aCB0aGUgYWxsb2NhdGlvbiBvZiB0aGlzIG1lbW9yeQorCSAqIHRvIHRoZSB6b25lcywgbm93IGlzIHRoZSB0aW1lIHRvIGRvIGl0LgogCSAqLwogCXpvbmVfc2l6ZVswXSA9IG1heF9sb3cgLSBtaW47CiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KQEAgLTMwMywxMSArMjEyLDExIEBACiAjZW5kaWYKIAogCS8qCi0JICogRm9yIGVhY2ggYmFuayBpbiB0aGlzIG5vZGUsIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgaG9sZXMuCi0JICogIGhvbGVzID0gbm9kZV9zaXplIC0gc3VtKGJhbmtfc2l6ZXNfaW5fbm9kZSkKKwkgKiBDYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIGhvbGVzLgorCSAqICBob2xlcyA9IG5vZGVfc2l6ZSAtIHN1bShiYW5rX3NpemVzKQogCSAqLwogCW1lbWNweSh6aG9sZV9zaXplLCB6b25lX3NpemUsIHNpemVvZih6aG9sZV9zaXplKSk7Ci0JZm9yX2VhY2hfbm9kZWJhbmsoaSwgbWksIG5vZGUpIHsKKwlmb3JfZWFjaF9iYW5rKGksIG1pKSB7CiAJCWludCBpZHggPSAwOwogI2lmZGVmIENPTkZJR19ISUdITUVNCiAJCWlmIChtaS0+YmFua1tpXS5oaWdobWVtKQpAQCAtMzIwLDI0ICsyMjksMjMgQEAKIAkgKiBBZGp1c3QgdGhlIHNpemVzIGFjY29yZGluZyB0byBhbnkgc3BlY2lhbCByZXF1aXJlbWVudHMgZm9yCiAJICogdGhpcyBtYWNoaW5lIHR5cGUuCiAJICovCi0JYXJjaF9hZGp1c3Rfem9uZXMobm9kZSwgem9uZV9zaXplLCB6aG9sZV9zaXplKTsKKwlhcmNoX2FkanVzdF96b25lcyh6b25lX3NpemUsIHpob2xlX3NpemUpOwogCi0JZnJlZV9hcmVhX2luaXRfbm9kZShub2RlLCB6b25lX3NpemUsIG1pbiwgemhvbGVfc2l6ZSk7CisJZnJlZV9hcmVhX2luaXRfbm9kZSgwLCB6b25lX3NpemUsIG1pbiwgemhvbGVfc2l6ZSk7CiB9CiAKICNpZm5kZWYgQ09ORklHX1NQQVJTRU1FTQogaW50IHBmbl92YWxpZCh1bnNpZ25lZCBsb25nIHBmbikKIHsKLQlzdHJ1Y3QgbWVtaW5mbyAqbWkgPSAmbWVtaW5mbzsKLQl1bnNpZ25lZCBpbnQgbGVmdCA9IDAsIHJpZ2h0ID0gbWktPm5yX2JhbmtzOworCXN0cnVjdCBtZW1ibG9ja19yZWdpb24gKm1lbSA9ICZtZW1ibG9jay5tZW1vcnk7CisJdW5zaWduZWQgaW50IGxlZnQgPSAwLCByaWdodCA9IG1lbS0+Y250OwogCiAJZG8gewogCQl1bnNpZ25lZCBpbnQgbWlkID0gKHJpZ2h0ICsgbGVmdCkgLyAyOwotCQlzdHJ1Y3QgbWVtYmFuayAqYmFuayA9ICZtaS0+YmFua1ttaWRdOwogCi0JCWlmIChwZm4gPCBiYW5rX3Bmbl9zdGFydChiYW5rKSkKKwkJaWYgKHBmbiA8IG1lbWJsb2NrX3N0YXJ0X3BmbihtZW0sIG1pZCkpCiAJCQlyaWdodCA9IG1pZDsKLQkJZWxzZSBpZiAocGZuID49IGJhbmtfcGZuX2VuZChiYW5rKSkKKwkJZWxzZSBpZiAocGZuID49IG1lbWJsb2NrX2VuZF9wZm4obWVtLCBtaWQpKQogCQkJbGVmdCA9IG1pZCArIDE7CiAJCWVsc2UKIAkJCXJldHVybiAxOwpAQCAtMzQ2LDczICsyNTQsNjkgQEAKIH0KIEVYUE9SVF9TWU1CT0wocGZuX3ZhbGlkKTsKIAotc3RhdGljIHZvaWQgYXJtX21lbW9yeV9wcmVzZW50KHN0cnVjdCBtZW1pbmZvICptaSwgaW50IG5vZGUpCitzdGF0aWMgdm9pZCBhcm1fbWVtb3J5X3ByZXNlbnQodm9pZCkKIHsKIH0KICNlbHNlCi1zdGF0aWMgdm9pZCBhcm1fbWVtb3J5X3ByZXNlbnQoc3RydWN0IG1lbWluZm8gKm1pLCBpbnQgbm9kZSkKK3N0YXRpYyB2b2lkIGFybV9tZW1vcnlfcHJlc2VudCh2b2lkKQogewogCWludCBpOwotCWZvcl9lYWNoX25vZGViYW5rKGksIG1pLCBub2RlKSB7Ci0JCXN0cnVjdCBtZW1iYW5rICpiYW5rID0gJm1pLT5iYW5rW2ldOwotCQltZW1vcnlfcHJlc2VudChub2RlLCBiYW5rX3Bmbl9zdGFydChiYW5rKSwgYmFua19wZm5fZW5kKGJhbmspKTsKLQl9CisJZm9yIChpID0gMDsgaSA8IG1lbWJsb2NrLm1lbW9yeS5jbnQ7IGkrKykKKwkJbWVtb3J5X3ByZXNlbnQoMCwgbWVtYmxvY2tfc3RhcnRfcGZuKCZtZW1ibG9jay5tZW1vcnksIGkpLAorCQkJCSAgbWVtYmxvY2tfZW5kX3BmbigmbWVtYmxvY2subWVtb3J5LCBpKSk7CiB9CiAjZW5kaWYKIAordm9pZCBfX2luaXQgYXJtX21lbWJsb2NrX2luaXQoc3RydWN0IG1lbWluZm8gKm1pLCBzdHJ1Y3QgbWFjaGluZV9kZXNjICptZGVzYykKK3sKKwlpbnQgaTsKKworCW1lbWJsb2NrX2luaXQoKTsKKwlmb3IgKGkgPSAwOyBpIDwgbWktPm5yX2JhbmtzOyBpKyspCisJCW1lbWJsb2NrX2FkZChtaS0+YmFua1tpXS5zdGFydCwgbWktPmJhbmtbaV0uc2l6ZSk7CisKKwkvKiBSZWdpc3RlciB0aGUga2VybmVsIHRleHQsIGtlcm5lbCBkYXRhIGFuZCBpbml0cmQgd2l0aCBtZW1ibG9jay4gKi8KKyNpZmRlZiBDT05GSUdfWElQX0tFUk5FTAorCW1lbWJsb2NrX3Jlc2VydmUoX19wYShfZGF0YSksIF9lbmQgLSBfZGF0YSk7CisjZWxzZQorCW1lbWJsb2NrX3Jlc2VydmUoX19wYShfc3RleHQpLCBfZW5kIC0gX3N0ZXh0KTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAorCWlmIChwaHlzX2luaXRyZF9zaXplKSB7CisJCW1lbWJsb2NrX3Jlc2VydmUocGh5c19pbml0cmRfc3RhcnQsIHBoeXNfaW5pdHJkX3NpemUpOworCisJCS8qIE5vdyBjb252ZXJ0IGluaXRyZCB0byB2aXJ0dWFsIGFkZHJlc3NlcyAqLworCQlpbml0cmRfc3RhcnQgPSBfX3BoeXNfdG9fdmlydChwaHlzX2luaXRyZF9zdGFydCk7CisJCWluaXRyZF9lbmQgPSBpbml0cmRfc3RhcnQgKyBwaHlzX2luaXRyZF9zaXplOworCX0KKyNlbmRpZgorCisJYXJtX21tX21lbWJsb2NrX3Jlc2VydmUoKTsKKworCS8qIHJlc2VydmUgYW55IHBsYXRmb3JtIHNwZWNpZmljIG1lbWJsb2NrIGFyZWFzICovCisJaWYgKG1kZXNjLT5yZXNlcnZlKQorCQltZGVzYy0+cmVzZXJ2ZSgpOworCisJbWVtYmxvY2tfYW5hbHl6ZSgpOworCW1lbWJsb2NrX2R1bXBfYWxsKCk7Cit9CisKIHZvaWQgX19pbml0IGJvb3RtZW1faW5pdCh2b2lkKQogewogCXN0cnVjdCBtZW1pbmZvICptaSA9ICZtZW1pbmZvOwogCXVuc2lnbmVkIGxvbmcgbWluLCBtYXhfbG93LCBtYXhfaGlnaDsKLQlpbnQgbm9kZSwgaW5pdHJkX25vZGU7Ci0KLQkvKgotCSAqIExvY2F0ZSB3aGljaCBub2RlIGNvbnRhaW5zIHRoZSByYW1kaXNrIGltYWdlLCBpZiBhbnkuCi0JICovCi0JaW5pdHJkX25vZGUgPSBjaGVja19pbml0cmQobWkpOwogCiAJbWF4X2xvdyA9IG1heF9oaWdoID0gMDsKIAorCWZpbmRfbGltaXRzKG1pLCAmbWluLCAmbWF4X2xvdywgJm1heF9oaWdoKTsKKworCWFybV9ib290bWVtX2luaXQobWksIG1pbiwgbWF4X2xvdyk7CisKIAkvKgotCSAqIFJ1biB0aHJvdWdoIGVhY2ggbm9kZSBpbml0aWFsaXNpbmcgdGhlIGJvb3RtZW0gYWxsb2NhdG9yLgorCSAqIFNwYXJzZW1lbSB0cmllcyB0byBhbGxvY2F0ZSBib290bWVtIGluIG1lbW9yeV9wcmVzZW50KCksCisJICogc28gbXVzdCBiZSBkb25lIGFmdGVyIHRoZSBmaXhlZCByZXNlcnZhdGlvbnMKIAkgKi8KLQlmb3JfZWFjaF9ub2RlKG5vZGUpIHsKLQkJdW5zaWduZWQgbG9uZyBub2RlX2xvdywgbm9kZV9oaWdoOwotCi0JCWZpbmRfbm9kZV9saW1pdHMobm9kZSwgbWksICZtaW4sICZub2RlX2xvdywgJm5vZGVfaGlnaCk7Ci0KLQkJaWYgKG5vZGVfbG93ID4gbWF4X2xvdykKLQkJCW1heF9sb3cgPSBub2RlX2xvdzsKLQkJaWYgKG5vZGVfaGlnaCA+IG1heF9oaWdoKQotCQkJbWF4X2hpZ2ggPSBub2RlX2hpZ2g7Ci0KLQkJLyoKLQkJICogSWYgdGhlcmUgaXMgbm8gbWVtb3J5IGluIHRoaXMgbm9kZSwgaWdub3JlIGl0LgotCQkgKiAoV2UgY2FuJ3QgaGF2ZSBub2RlcyB3aGljaCBoYXZlIG5vIGxvd21lbSkKLQkJICovCi0JCWlmIChub2RlX2xvdyA9PSAwKQotCQkJY29udGludWU7Ci0KLQkJYm9vdG1lbV9pbml0X25vZGUobm9kZSwgbWksIG1pbiwgbm9kZV9sb3cpOwotCi0JCS8qCi0JCSAqIFJlc2VydmUgYW55IHNwZWNpYWwgbm9kZSB6ZXJvIHJlZ2lvbnMuCi0JCSAqLwotCQlpZiAobm9kZSA9PSAwKQotCQkJcmVzZXJ2ZV9ub2RlX3plcm8oTk9ERV9EQVRBKG5vZGUpKTsKLQotCQkvKgotCQkgKiBJZiB0aGUgaW5pdHJkIGlzIGluIHRoaXMgbm9kZSwgcmVzZXJ2ZSBpdHMgbWVtb3J5LgotCQkgKi8KLQkJaWYgKG5vZGUgPT0gaW5pdHJkX25vZGUpCi0JCQlib290bWVtX3Jlc2VydmVfaW5pdHJkKG5vZGUpOwotCi0JCS8qCi0JCSAqIFNwYXJzZW1lbSB0cmllcyB0byBhbGxvY2F0ZSBib290bWVtIGluIG1lbW9yeV9wcmVzZW50KCksCi0JCSAqIHNvIG11c3QgYmUgZG9uZSBhZnRlciB0aGUgZml4ZWQgcmVzZXJ2YXRpb25zCi0JCSAqLwotCQlhcm1fbWVtb3J5X3ByZXNlbnQobWksIG5vZGUpOwotCX0KKwlhcm1fbWVtb3J5X3ByZXNlbnQoKTsKIAogCS8qCiAJICogc3BhcnNlX2luaXQoKSBuZWVkcyB0aGUgYm9vdG1lbSBhbGxvY2F0b3IgdXAgYW5kIHJ1bm5pbmcuCkBAIC00MjAsMTIgKzMyNCwxMSBAQAogCXNwYXJzZV9pbml0KCk7CiAKIAkvKgotCSAqIE5vdyBmcmVlIG1lbW9yeSBpbiBlYWNoIG5vZGUgLSBmcmVlX2FyZWFfaW5pdF9ub2RlIG5lZWRzCisJICogTm93IGZyZWUgdGhlIG1lbW9yeSAtIGZyZWVfYXJlYV9pbml0X25vZGUgbmVlZHMKIAkgKiB0aGUgc3BhcnNlIG1lbV9tYXAgYXJyYXlzIGluaXRpYWxpemVkIGJ5IHNwYXJzZV9pbml0KCkKIAkgKiBmb3IgbWVtbWFwX2luaXRfem9uZSgpLCBvdGhlcndpc2UgYWxsIFBGTnMgYXJlIGludmFsaWQuCiAJICovCi0JZm9yX2VhY2hfbm9kZShub2RlKQotCQlib290bWVtX2ZyZWVfbm9kZShub2RlLCBtaSk7CisJYXJtX2Jvb3RtZW1fZnJlZShtaSwgbWluLCBtYXhfbG93LCBtYXhfaGlnaCk7CiAKIAloaWdoX21lbW9yeSA9IF9fdmEoKG1heF9sb3cgPDwgUEFHRV9TSElGVCkgLSAxKSArIDE7CiAKQEAgLTQ2MCw3ICszNjMsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLWZyZWVfbWVtbWFwKGludCBub2RlLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKQorZnJlZV9tZW1tYXAodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKIHsKIAlzdHJ1Y3QgcGFnZSAqc3RhcnRfcGcsICplbmRfcGc7CiAJdW5zaWduZWQgbG9uZyBwZywgcGdlbmQ7CkBAIC00ODMsNDAgKzM4NiwzOSBAQAogCSAqIGZyZWUgdGhlIHNlY3Rpb24gb2YgdGhlIG1lbW1hcCBhcnJheS4KIAkgKi8KIAlpZiAocGcgPCBwZ2VuZCkKLQkJZnJlZV9ib290bWVtX25vZGUoTk9ERV9EQVRBKG5vZGUpLCBwZywgcGdlbmQgLSBwZyk7CisJCWZyZWVfYm9vdG1lbShwZywgcGdlbmQgLSBwZyk7CiB9CiAKIC8qCiAgKiBUaGUgbWVtX21hcCBhcnJheSBjYW4gZ2V0IHZlcnkgYmlnLiAgRnJlZSB0aGUgdW51c2VkIGFyZWEgb2YgdGhlIG1lbW9yeSBtYXAuCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBmcmVlX3VudXNlZF9tZW1tYXBfbm9kZShpbnQgbm9kZSwgc3RydWN0IG1lbWluZm8gKm1pKQorc3RhdGljIHZvaWQgX19pbml0IGZyZWVfdW51c2VkX21lbW1hcChzdHJ1Y3QgbWVtaW5mbyAqbWkpCiB7CiAJdW5zaWduZWQgbG9uZyBiYW5rX3N0YXJ0LCBwcmV2X2JhbmtfZW5kID0gMDsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCS8qCi0JICogW0ZJWE1FXSBUaGlzIHJlbGllcyBvbiBlYWNoIGJhbmsgYmVpbmcgaW4gYWRkcmVzcyBvcmRlci4gIFRoaXMKLQkgKiBtYXkgbm90IGJlIHRoZSBjYXNlLCBlc3BlY2lhbGx5IGlmIHRoZSB1c2VyIGhhcyBwcm92aWRlZCB0aGUKLQkgKiBpbmZvcm1hdGlvbiBvbiB0aGUgY29tbWFuZCBsaW5lLgorCSAqIFRoaXMgcmVsaWVzIG9uIGVhY2ggYmFuayBiZWluZyBpbiBhZGRyZXNzIG9yZGVyLgorCSAqIFRoZSBiYW5rcyBhcmUgc29ydGVkIHByZXZpb3VzbHkgaW4gYm9vdG1lbV9pbml0KCkuCiAJICovCi0JZm9yX2VhY2hfbm9kZWJhbmsoaSwgbWksIG5vZGUpIHsKKwlmb3JfZWFjaF9iYW5rKGksIG1pKSB7CiAJCXN0cnVjdCBtZW1iYW5rICpiYW5rID0gJm1pLT5iYW5rW2ldOwogCiAJCWJhbmtfc3RhcnQgPSBiYW5rX3Bmbl9zdGFydChiYW5rKTsKLQkJaWYgKGJhbmtfc3RhcnQgPCBwcmV2X2JhbmtfZW5kKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIk1FTTogdW5vcmRlcmVkIG1lbW9yeSBiYW5rcy4gICIKLQkJCQkiTm90IGZyZWVpbmcgbWVtbWFwLlxuIik7Ci0JCQlicmVhazsKLQkJfQogCiAJCS8qCiAJCSAqIElmIHdlIGhhZCBhIHByZXZpb3VzIGJhbmssIGFuZCB0aGVyZSBpcyBhIHNwYWNlCiAJCSAqIGJldHdlZW4gdGhlIGN1cnJlbnQgYmFuayBhbmQgdGhlIHByZXZpb3VzLCBmcmVlIGl0LgogCQkgKi8KLQkJaWYgKHByZXZfYmFua19lbmQgJiYgcHJldl9iYW5rX2VuZCAhPSBiYW5rX3N0YXJ0KQotCQkJZnJlZV9tZW1tYXAobm9kZSwgcHJldl9iYW5rX2VuZCwgYmFua19zdGFydCk7CisJCWlmIChwcmV2X2JhbmtfZW5kICYmIHByZXZfYmFua19lbmQgPCBiYW5rX3N0YXJ0KQorCQkJZnJlZV9tZW1tYXAocHJldl9iYW5rX2VuZCwgYmFua19zdGFydCk7CiAKLQkJcHJldl9iYW5rX2VuZCA9IGJhbmtfcGZuX2VuZChiYW5rKTsKKwkJLyoKKwkJICogQWxpZ24gdXAgaGVyZSBzaW5jZSB0aGUgVk0gc3Vic3lzdGVtIGluc2lzdHMgdGhhdCB0aGUKKwkJICogbWVtbWFwIGVudHJpZXMgYXJlIHZhbGlkIGZyb20gdGhlIGJhbmsgZW5kIGFsaWduZWQgdG8KKwkJICogTUFYX09SREVSX05SX1BBR0VTLgorCQkgKi8KKwkJcHJldl9iYW5rX2VuZCA9IEFMSUdOKGJhbmtfcGZuX2VuZChiYW5rKSwgTUFYX09SREVSX05SX1BBR0VTKTsKIAl9CiB9CiAKQEAgLTUyOCwyMSArNDMwLDE5IEBACiB2b2lkIF9faW5pdCBtZW1faW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfcGFnZXMsIGZyZWVfcGFnZXM7Ci0JaW50IGksIG5vZGU7Ci0KLSNpZm5kZWYgQ09ORklHX0RJU0NPTlRJR01FTQotCW1heF9tYXBuciAgID0gcGZuX3RvX3BhZ2UobWF4X3BmbiArIFBIWVNfUEZOX09GRlNFVCkgLSBtZW1fbWFwOworCWludCBpOworI2lmZGVmIENPTkZJR19IQVZFX1RDTQorCS8qIFRoZXNlIHBvaW50ZXJzIGFyZSBmaWxsZWQgaW4gb24gVENNIGRldGVjdGlvbiAqLworCWV4dGVybiB1MzIgZHRjbV9lbmQ7CisJZXh0ZXJuIHUzMiBpdGNtX2VuZDsKICNlbmRpZgogCisJbWF4X21hcG5yICAgPSBwZm5fdG9fcGFnZShtYXhfcGZuICsgUEhZU19QRk5fT0ZGU0VUKSAtIG1lbV9tYXA7CisKIAkvKiB0aGlzIHdpbGwgcHV0IGFsbCB1bnVzZWQgbG93IG1lbW9yeSBvbnRvIHRoZSBmcmVlbGlzdHMgKi8KLQlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7Ci0JCXBnX2RhdGFfdCAqcGdkYXQgPSBOT0RFX0RBVEEobm9kZSk7CisJZnJlZV91bnVzZWRfbWVtbWFwKCZtZW1pbmZvKTsKIAotCQlmcmVlX3VudXNlZF9tZW1tYXBfbm9kZShub2RlLCAmbWVtaW5mbyk7Ci0KLQkJaWYgKHBnZGF0LT5ub2RlX3NwYW5uZWRfcGFnZXMgIT0gMCkKLQkJCXRvdGFscmFtX3BhZ2VzICs9IGZyZWVfYWxsX2Jvb3RtZW1fbm9kZShwZ2RhdCk7Ci0JfQorCXRvdGFscmFtX3BhZ2VzICs9IGZyZWVfYWxsX2Jvb3RtZW0oKTsKIAogI2lmZGVmIENPTkZJR19TQTExMTEKIAkvKiBub3cgdGhhdCBvdXIgRE1BIG1lbW9yeSBpcyBhY3R1YWxseSBzbyBkZXNpZ25hdGVkLCB3ZSBjYW4gZnJlZSBpdCAqLwpAQCAtNTUyLDM5ICs0NTIsMzUgQEAKIAogI2lmZGVmIENPTkZJR19ISUdITUVNCiAJLyogc2V0IGhpZ2htZW0gcGFnZSBmcmVlICovCi0JZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgewotCQlmb3JfZWFjaF9ub2RlYmFuayAoaSwgJm1lbWluZm8sIG5vZGUpIHsKLQkJCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBiYW5rX3Bmbl9zdGFydCgmbWVtaW5mby5iYW5rW2ldKTsKLQkJCXVuc2lnbmVkIGxvbmcgZW5kID0gYmFua19wZm5fZW5kKCZtZW1pbmZvLmJhbmtbaV0pOwotCQkJaWYgKHN0YXJ0ID49IG1heF9sb3dfcGZuICsgUEhZU19QRk5fT0ZGU0VUKQotCQkJCXRvdGFsaGlnaF9wYWdlcyArPSBmcmVlX2FyZWEoc3RhcnQsIGVuZCwgTlVMTCk7Ci0JCX0KKwlmb3JfZWFjaF9iYW5rIChpLCAmbWVtaW5mbykgeworCQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gYmFua19wZm5fc3RhcnQoJm1lbWluZm8uYmFua1tpXSk7CisJCXVuc2lnbmVkIGxvbmcgZW5kID0gYmFua19wZm5fZW5kKCZtZW1pbmZvLmJhbmtbaV0pOworCQlpZiAoc3RhcnQgPj0gbWF4X2xvd19wZm4gKyBQSFlTX1BGTl9PRkZTRVQpCisJCQl0b3RhbGhpZ2hfcGFnZXMgKz0gZnJlZV9hcmVhKHN0YXJ0LCBlbmQsIE5VTEwpOwogCX0KIAl0b3RhbHJhbV9wYWdlcyArPSB0b3RhbGhpZ2hfcGFnZXM7CiAjZW5kaWYKIAogCXJlc2VydmVkX3BhZ2VzID0gZnJlZV9wYWdlcyA9IDA7CiAKLQlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7Ci0JCWZvcl9lYWNoX25vZGViYW5rKGksICZtZW1pbmZvLCBub2RlKSB7Ci0JCQlzdHJ1Y3QgbWVtYmFuayAqYmFuayA9ICZtZW1pbmZvLmJhbmtbaV07Ci0JCQl1bnNpZ25lZCBpbnQgcGZuMSwgcGZuMjsKLQkJCXN0cnVjdCBwYWdlICpwYWdlLCAqZW5kOworCWZvcl9lYWNoX2JhbmsoaSwgJm1lbWluZm8pIHsKKwkJc3RydWN0IG1lbWJhbmsgKmJhbmsgPSAmbWVtaW5mby5iYW5rW2ldOworCQl1bnNpZ25lZCBpbnQgcGZuMSwgcGZuMjsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UsICplbmQ7CiAKLQkJCXBmbjEgPSBiYW5rX3Bmbl9zdGFydChiYW5rKTsKLQkJCXBmbjIgPSBiYW5rX3Bmbl9lbmQoYmFuayk7CisJCXBmbjEgPSBiYW5rX3Bmbl9zdGFydChiYW5rKTsKKwkJcGZuMiA9IGJhbmtfcGZuX2VuZChiYW5rKTsKIAotCQkJcGFnZSA9IHBmbl90b19wYWdlKHBmbjEpOwotCQkJZW5kICA9IHBmbl90b19wYWdlKHBmbjIgLSAxKSArIDE7CisJCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4xKTsKKwkJZW5kICA9IHBmbl90b19wYWdlKHBmbjIgLSAxKSArIDE7CiAKLQkJCWRvIHsKLQkJCQlpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKQotCQkJCQlyZXNlcnZlZF9wYWdlcysrOwotCQkJCWVsc2UgaWYgKCFwYWdlX2NvdW50KHBhZ2UpKQotCQkJCQlmcmVlX3BhZ2VzKys7Ci0JCQkJcGFnZSsrOwotCQkJfSB3aGlsZSAocGFnZSA8IGVuZCk7Ci0JCX0KKwkJZG8geworCQkJaWYgKFBhZ2VSZXNlcnZlZChwYWdlKSkKKwkJCQlyZXNlcnZlZF9wYWdlcysrOworCQkJZWxzZSBpZiAoIXBhZ2VfY291bnQocGFnZSkpCisJCQkJZnJlZV9wYWdlcysrOworCQkJcGFnZSsrOworCQl9IHdoaWxlIChwYWdlIDwgZW5kKTsKIAl9CiAKIAkvKgpAQCAtNjExLDYgKzUwNywxMCBAQAogCiAJcHJpbnRrKEtFUk5fTk9USUNFICJWaXJ0dWFsIGtlcm5lbCBtZW1vcnkgbGF5b3V0OlxuIgogCQkJIiAgICB2ZWN0b3IgIDogMHglMDhseCAtIDB4JTA4bHggICAoJTRsZCBrQilcbiIKKyNpZmRlZiBDT05GSUdfSEFWRV9UQ00KKwkJCSIgICAgRFRDTSAgICA6IDB4JTA4bHggLSAweCUwOGx4ICAgKCU0bGQga0IpXG4iCisJCQkiICAgIElUQ00gICAgOiAweCUwOGx4IC0gMHglMDhseCAgICglNGxkIGtCKVxuIgorI2VuZGlmCiAJCQkiICAgIGZpeG1hcCAgOiAweCUwOGx4IC0gMHglMDhseCAgICglNGxkIGtCKVxuIgogI2lmZGVmIENPTkZJR19NTVUKIAkJCSIgICAgRE1BICAgICA6IDB4JTA4bHggLSAweCUwOGx4ICAgKCU0bGQgTUIpXG4iCkBAIC02MjcsNiArNTI3LDEwIEBACiAKIAkJCU1MSyhVTChDT05GSUdfVkVDVE9SU19CQVNFKSwgVUwoQ09ORklHX1ZFQ1RPUlNfQkFTRSkgKwogCQkJCShQQUdFX1NJWkUpKSwKKyNpZmRlZiBDT05GSUdfSEFWRV9UQ00KKwkJCU1MSyhEVENNX09GRlNFVCwgKHVuc2lnbmVkIGxvbmcpIGR0Y21fZW5kKSwKKwkJCU1MSyhJVENNX09GRlNFVCwgKHVuc2lnbmVkIGxvbmcpIGl0Y21fZW5kKSwKKyNlbmRpZgogCQkJTUxLKEZJWEFERFJfU1RBUlQsIEZJWEFERFJfVE9QKSwKICNpZmRlZiBDT05GSUdfTU1VCiAJCQlNTE0oQ09OU0lTVEVOVF9CQVNFLCBDT05TSVNURU5UX0VORCksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9pb3JlbWFwLmMgYi9hcmNoL2FybS9tbS9pb3JlbWFwLmMKaW5kZXggMjhjOGI5NS4uYWI1MDYyNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gvYXJtL21tL2lvcmVtYXAuYwpAQCAtNDIsNzggKzQyLDExIEBACiAgKi8KICNkZWZpbmUgVk1fQVJNX1NFQ1RJT05fTUFQUElORwkweDgwMDAwMDAwCiAKLXN0YXRpYyBpbnQgcmVtYXBfYXJlYV9wdGUocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKLQkJCSAgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIGNvbnN0IHN0cnVjdCBtZW1fdHlwZSAqdHlwZSkKLXsKLQlwZ3Byb3RfdCBwcm90ID0gX19wZ3Byb3QodHlwZS0+cHJvdF9wdGUpOwotCXB0ZV90ICpwdGU7Ci0KLQlwdGUgPSBwdGVfYWxsb2Nfa2VybmVsKHBtZCwgYWRkcik7Ci0JaWYgKCFwdGUpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZG8gewotCQlpZiAoIXB0ZV9ub25lKCpwdGUpKQotCQkJZ290byBiYWQ7Ci0KLQkJc2V0X3B0ZV9leHQocHRlLCBwZm5fcHRlKHBoeXNfYWRkciA+PiBQQUdFX1NISUZULCBwcm90KSwgMCk7Ci0JCXBoeXNfYWRkciArPSBQQUdFX1NJWkU7Ci0JfSB3aGlsZSAocHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyICE9IGVuZCk7Ci0JcmV0dXJuIDA7Ci0KLSBiYWQ6Ci0JcHJpbnRrKEtFUk5fQ1JJVCAicmVtYXBfYXJlYV9wdGU6IHBhZ2UgYWxyZWFkeSBleGlzdHNcbiIpOwotCUJVRygpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCByZW1hcF9hcmVhX3BtZChwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwKLQkJCQkgY29uc3Qgc3RydWN0IG1lbV90eXBlICp0eXBlKQotewotCXVuc2lnbmVkIGxvbmcgbmV4dDsKLQlwbWRfdCAqcG1kOwotCWludCByZXQgPSAwOwotCi0JcG1kID0gcG1kX2FsbG9jKCZpbml0X21tLCBwZ2QsIGFkZHIpOwotCWlmICghcG1kKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWRvIHsKLQkJbmV4dCA9IHBtZF9hZGRyX2VuZChhZGRyLCBlbmQpOwotCQlyZXQgPSByZW1hcF9hcmVhX3B0ZShwbWQsIGFkZHIsIG5leHQsIHBoeXNfYWRkciwgdHlwZSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCQlwaHlzX2FkZHIgKz0gbmV4dCAtIGFkZHI7Ci0JfSB3aGlsZSAocG1kKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCByZW1hcF9hcmVhX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgcGZuLAotCQkJICAgIHNpemVfdCBzaXplLCBjb25zdCBzdHJ1Y3QgbWVtX3R5cGUgKnR5cGUpCi17Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBuZXh0LCBlbmQgPSBzdGFydCArIHNpemU7Ci0JdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIgPSBfX3Bmbl90b19waHlzKHBmbik7Ci0JcGdkX3QgKnBnZDsKLQlpbnQgZXJyID0gMDsKLQotCUJVR19PTihhZGRyID49IGVuZCk7Ci0JcGdkID0gcGdkX29mZnNldF9rKGFkZHIpOwotCWRvIHsKLQkJbmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpOwotCQllcnIgPSByZW1hcF9hcmVhX3BtZChwZ2QsIGFkZHIsIG5leHQsIHBoeXNfYWRkciwgdHlwZSk7Ci0JCWlmIChlcnIpCi0JCQlicmVhazsKLQkJcGh5c19hZGRyICs9IG5leHQgLSBhZGRyOwotCX0gd2hpbGUgKHBnZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwotCi0JcmV0dXJuIGVycjsKLX0KLQogaW50IGlvcmVtYXBfcGFnZSh1bnNpZ25lZCBsb25nIHZpcnQsIHVuc2lnbmVkIGxvbmcgcGh5cywKIAkJIGNvbnN0IHN0cnVjdCBtZW1fdHlwZSAqbXR5cGUpCiB7Ci0JcmV0dXJuIHJlbWFwX2FyZWFfcGFnZXModmlydCwgX19waHlzX3RvX3BmbihwaHlzKSwgUEFHRV9TSVpFLCBtdHlwZSk7CisJcmV0dXJuIGlvcmVtYXBfcGFnZV9yYW5nZSh2aXJ0LCB2aXJ0ICsgUEFHRV9TSVpFLCBwaHlzLAorCQkJCSAgX19wZ3Byb3QobXR5cGUtPnByb3RfcHRlKSk7CiB9CiBFWFBPUlRfU1lNQk9MKGlvcmVtYXBfcGFnZSk7CiAKQEAgLTI2OCw2ICsyMDEsMTIgQEAKIAlpZiAocGZuID49IDB4MTAwMDAwICYmIChfX3Bmbl90b19waHlzKHBmbikgJiB+U1VQRVJTRUNUSU9OX01BU0spKQogCQlyZXR1cm4gTlVMTDsKIAorCS8qCisJICogRG9uJ3QgYWxsb3cgUkFNIHRvIGJlIG1hcHBlZCAtIHRoaXMgY2F1c2VzIHByb2JsZW1zIHdpdGggQVJNdjYrCisJICovCisJaWYgKFdBUk5fT04ocGZuX3ZhbGlkKHBmbikpKQorCQlyZXR1cm4gTlVMTDsKKwogCXR5cGUgPSBnZXRfbWVtX3R5cGUobXR5cGUpOwogCWlmICghdHlwZSkKIAkJcmV0dXJuIE5VTEw7CkBAIC0yOTQsNyArMjMzLDggQEAKIAkJZXJyID0gcmVtYXBfYXJlYV9zZWN0aW9ucyhhZGRyLCBwZm4sIHNpemUsIHR5cGUpOwogCX0gZWxzZQogI2VuZGlmCi0JCWVyciA9IHJlbWFwX2FyZWFfcGFnZXMoYWRkciwgcGZuLCBzaXplLCB0eXBlKTsKKwkJZXJyID0gaW9yZW1hcF9wYWdlX3JhbmdlKGFkZHIsIGFkZHIgKyBzaXplLCBfX3Bmbl90b19waHlzKHBmbiksCisJCQkJCSBfX3BncHJvdCh0eXBlLT5wcm90X3B0ZSkpOwogCiAJaWYgKGVycikgewogIAkJdnVubWFwKCh2b2lkICopYWRkcik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9tbS5oIGIvYXJjaC9hcm0vbW0vbW0uaAppbmRleCA4MTVkMDhlLi42NjMwNjIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9tbS5oCisrKyBiL2FyY2gvYXJtL21tL21tLmgKQEAgLTI4LDcgKzI4LDUgQEAKIAogI2VuZGlmCiAKLXN0cnVjdCBwZ2xpc3RfZGF0YTsKLQogdm9pZCBfX2luaXQgYm9vdG1lbV9pbml0KHZvaWQpOwotdm9pZCByZXNlcnZlX25vZGVfemVybyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KTsKK3ZvaWQgYXJtX21tX21lbWJsb2NrX3Jlc2VydmUodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9tbWFwLmMgYi9hcmNoL2FybS9tbS9tbWFwLmMKaW5kZXggZjVhYmM1MS4uNGY1YjM5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vbW1hcC5jCisrKyBiL2FyY2gvYXJtL21tL21tYXAuYwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zaG0uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXR5cGUuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKQEAgLTgwLDYgKzgxLDkgQEAKIAkgICAgICAgIHN0YXJ0X2FkZHIgPSBhZGRyID0gVEFTS19VTk1BUFBFRF9CQVNFOwogCSAgICAgICAgbW0tPmNhY2hlZF9ob2xlX3NpemUgPSAwOwogCX0KKwkvKiA4IGJpdHMgb2YgcmFuZG9tbmVzcyBpbiAyMCBhZGRyZXNzIHNwYWNlIGJpdHMgKi8KKwlpZiAoY3VycmVudC0+ZmxhZ3MgJiBQRl9SQU5ET01JWkUpCisJCWFkZHIgKz0gKGdldF9yYW5kb21faW50KCkgJSAoMSA8PCA4KSkgPDwgUEFHRV9TSElGVDsKIAogZnVsbF9zZWFyY2g6CiAJaWYgKGRvX2FsaWduKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vbW11LmMgYi9hcmNoL2FybS9tbS9tbXUuYwppbmRleCAyODU4OTQxLi42ZTFjNGY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9tbXUuYworKysgYi9hcmNoL2FybS9tbS9tbXUuYwpAQCAtMTEsMTMgKzExLDEyIEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc29ydC5oPgogCiAjaW5jbHVkZSA8YXNtL2NwdXR5cGUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZXR5cGUuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTI1OCw2ICsyNTcsMTkgQEAKIAkJLnByb3Rfc2VjdCA9IFBNRF9UWVBFX1NFQ1QgfCBQTURfU0VDVF9BUF9XUklURSwKIAkJLmRvbWFpbiAgICA9IERPTUFJTl9LRVJORUwsCiAJfSwKKwlbTVRfTUVNT1JZX0RUQ01dID0geworCQkucHJvdF9wdGUJPSBMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcgfAorCQkgICAgICAgICAgICAgICAgICBMX1BURV9ESVJUWSB8IExfUFRFX1dSSVRFLAorCQkucHJvdF9sMQk9IFBNRF9UWVBFX1RBQkxFLAorCQkucHJvdF9zZWN0CT0gUE1EX1RZUEVfU0VDVCB8IFBNRF9TRUNUX1hOLAorCQkuZG9tYWluCQk9IERPTUFJTl9LRVJORUwsCisJfSwKKwlbTVRfTUVNT1JZX0lUQ01dID0geworCQkucHJvdF9wdGUgID0gTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwgTF9QVEVfRElSVFkgfAorCQkJCUxfUFRFX1VTRVIgfCBMX1BURV9FWEVDLAorCQkucHJvdF9sMSAgID0gUE1EX1RZUEVfVEFCTEUsCisJCS5kb21haW4gICAgPSBET01BSU5fSU8sCisJfSwKIH07CiAKIGNvbnN0IHN0cnVjdCBtZW1fdHlwZSAqZ2V0X21lbV90eXBlKHVuc2lnbmVkIGludCB0eXBlKQpAQCAtNDg4LDE4ICs1MDAsMjggQEAKIAogI2RlZmluZSB2ZWN0b3JzX2Jhc2UoKQkodmVjdG9yc19oaWdoKCkgPyAweGZmZmYwMDAwIDogMCkKIAorc3RhdGljIHZvaWQgX19pbml0ICplYXJseV9hbGxvYyh1bnNpZ25lZCBsb25nIHN6KQoreworCXZvaWQgKnB0ciA9IF9fdmEobWVtYmxvY2tfYWxsb2Moc3osIHN6KSk7CisJbWVtc2V0KHB0ciwgMCwgc3opOworCXJldHVybiBwdHI7Cit9CisKK3N0YXRpYyBwdGVfdCAqIF9faW5pdCBlYXJseV9wdGVfYWxsb2MocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHByb3QpCit7CisJaWYgKHBtZF9ub25lKCpwbWQpKSB7CisJCXB0ZV90ICpwdGUgPSBlYXJseV9hbGxvYygyICogUFRSU19QRVJfUFRFICogc2l6ZW9mKHB0ZV90KSk7CisJCV9fcG1kX3BvcHVsYXRlKHBtZCwgX19wYShwdGUpIHwgcHJvdCk7CisJfQorCUJVR19PTihwbWRfYmFkKCpwbWQpKTsKKwlyZXR1cm4gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyKTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IGFsbG9jX2luaXRfcHRlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIHBmbiwKIAkJCQkgIGNvbnN0IHN0cnVjdCBtZW1fdHlwZSAqdHlwZSkKIHsKLQlwdGVfdCAqcHRlOwotCi0JaWYgKHBtZF9ub25lKCpwbWQpKSB7Ci0JCXB0ZSA9IGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKDIgKiBQVFJTX1BFUl9QVEUgKiBzaXplb2YocHRlX3QpKTsKLQkJX19wbWRfcG9wdWxhdGUocG1kLCBfX3BhKHB0ZSkgfCB0eXBlLT5wcm90X2wxKTsKLQl9Ci0KLQlwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHIpOworCXB0ZV90ICpwdGUgPSBlYXJseV9wdGVfYWxsb2MocG1kLCBhZGRyLCB0eXBlLT5wcm90X2wxKTsKIAlkbyB7CiAJCXNldF9wdGVfZXh0KHB0ZSwgcGZuX3B0ZShwZm4sIF9fcGdwcm90KHR5cGUtPnByb3RfcHRlKSksIDApOwogCQlwZm4rKzsKQEAgLTY2OCw3ICs2OTAsNyBAQAogCQljcmVhdGVfbWFwcGluZyhpb19kZXNjICsgaSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgdm1hbGxvY19yZXNlcnZlID0gU1pfMTI4TTsKK3N0YXRpYyB2b2lkICogX19pbml0ZGF0YSB2bWFsbG9jX21pbiA9ICh2b2lkICopKFZNQUxMT0NfRU5EIC0gU1pfMTI4TSk7CiAKIC8qCiAgKiB2bWFsbG9jPXNpemUgZm9yY2VzIHRoZSB2bWFsbG9jIGFyZWEgdG8gYmUgZXhhY3RseSAnc2l6ZScKQEAgLTY3Nyw3ICs2OTksNyBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBlYXJseV92bWFsbG9jKGNoYXIgKmFyZykKIHsKLQl2bWFsbG9jX3Jlc2VydmUgPSBtZW1wYXJzZShhcmcsIE5VTEwpOworCXVuc2lnbmVkIGxvbmcgdm1hbGxvY19yZXNlcnZlID0gbWVtcGFyc2UoYXJnLCBOVUxMKTsKIAogCWlmICh2bWFsbG9jX3Jlc2VydmUgPCBTWl8xNk0pIHsKIAkJdm1hbGxvY19yZXNlcnZlID0gU1pfMTZNOwpAQCAtNjkyLDIyICs3MTQsMjYgQEAKIAkJCSJ2bWFsbG9jIGFyZWEgaXMgdG9vIGJpZywgbGltaXRpbmcgdG8gJWx1TUJcbiIsCiAJCQl2bWFsbG9jX3Jlc2VydmUgPj4gMjApOwogCX0KKworCXZtYWxsb2NfbWluID0gKHZvaWQgKikoVk1BTExPQ19FTkQgLSB2bWFsbG9jX3Jlc2VydmUpOwogCXJldHVybiAwOwogfQogZWFybHlfcGFyYW0oInZtYWxsb2MiLCBlYXJseV92bWFsbG9jKTsKIAotI2RlZmluZSBWTUFMTE9DX01JTgkodm9pZCAqKShWTUFMTE9DX0VORCAtIHZtYWxsb2NfcmVzZXJ2ZSkKK3BoeXNfYWRkcl90IGxvd21lbV9lbmRfYWRkcjsKIAogc3RhdGljIHZvaWQgX19pbml0IHNhbml0eV9jaGVja19tZW1pbmZvKHZvaWQpCiB7CiAJaW50IGksIGosIGhpZ2htZW0gPSAwOwogCisJbG93bWVtX2VuZF9hZGRyID0gX19wYSh2bWFsbG9jX21pbiAtIDEpICsgMTsKKwogCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgbWVtaW5mby5ucl9iYW5rczsgaSsrKSB7CiAJCXN0cnVjdCBtZW1iYW5rICpiYW5rID0gJm1lbWluZm8uYmFua1tqXTsKIAkJKmJhbmsgPSBtZW1pbmZvLmJhbmtbaV07CiAKICNpZmRlZiBDT05GSUdfSElHSE1FTQotCQlpZiAoX192YShiYW5rLT5zdGFydCkgPiBWTUFMTE9DX01JTiB8fAorCQlpZiAoX192YShiYW5rLT5zdGFydCkgPiB2bWFsbG9jX21pbiB8fAogCQkgICAgX192YShiYW5rLT5zdGFydCkgPCAodm9pZCAqKVBBR0VfT0ZGU0VUKQogCQkJaGlnaG1lbSA9IDE7CiAKQEAgLTcxNyw4ICs3NDMsOCBAQAogCQkgKiBTcGxpdCB0aG9zZSBtZW1vcnkgYmFua3Mgd2hpY2ggYXJlIHBhcnRpYWxseSBvdmVybGFwcGluZwogCQkgKiB0aGUgdm1hbGxvYyBhcmVhIGdyZWF0bHkgc2ltcGxpZnlpbmcgdGhpbmdzIGxhdGVyLgogCQkgKi8KLQkJaWYgKF9fdmEoYmFuay0+c3RhcnQpIDwgVk1BTExPQ19NSU4gJiYKLQkJICAgIGJhbmstPnNpemUgPiBWTUFMTE9DX01JTiAtIF9fdmEoYmFuay0+c3RhcnQpKSB7CisJCWlmIChfX3ZhKGJhbmstPnN0YXJ0KSA8IHZtYWxsb2NfbWluICYmCisJCSAgICBiYW5rLT5zaXplID4gdm1hbGxvY19taW4gLSBfX3ZhKGJhbmstPnN0YXJ0KSkgewogCQkJaWYgKG1lbWluZm8ubnJfYmFua3MgPj0gTlJfQkFOS1MpIHsKIAkJCQlwcmludGsoS0VSTl9DUklUICJOUl9CQU5LUyB0b28gbG93LCAiCiAJCQkJCQkgImlnbm9yaW5nIGhpZ2ggbWVtb3J5XG4iKTsKQEAgLTcyNywxMiArNzUzLDEyIEBACiAJCQkJCShtZW1pbmZvLm5yX2JhbmtzIC0gaSkgKiBzaXplb2YoKmJhbmspKTsKIAkJCQltZW1pbmZvLm5yX2JhbmtzKys7CiAJCQkJaSsrOwotCQkJCWJhbmtbMV0uc2l6ZSAtPSBWTUFMTE9DX01JTiAtIF9fdmEoYmFuay0+c3RhcnQpOwotCQkJCWJhbmtbMV0uc3RhcnQgPSBfX3BhKFZNQUxMT0NfTUlOIC0gMSkgKyAxOworCQkJCWJhbmtbMV0uc2l6ZSAtPSB2bWFsbG9jX21pbiAtIF9fdmEoYmFuay0+c3RhcnQpOworCQkJCWJhbmtbMV0uc3RhcnQgPSBfX3BhKHZtYWxsb2NfbWluIC0gMSkgKyAxOwogCQkJCWJhbmtbMV0uaGlnaG1lbSA9IGhpZ2htZW0gPSAxOwogCQkJCWorKzsKIAkJCX0KLQkJCWJhbmstPnNpemUgPSBWTUFMTE9DX01JTiAtIF9fdmEoYmFuay0+c3RhcnQpOworCQkJYmFuay0+c2l6ZSA9IHZtYWxsb2NfbWluIC0gX192YShiYW5rLT5zdGFydCk7CiAJCX0KICNlbHNlCiAJCWJhbmstPmhpZ2htZW0gPSBoaWdobWVtOwpAQCAtNzQxLDcgKzc2Nyw3IEBACiAJCSAqIENoZWNrIHdoZXRoZXIgdGhpcyBtZW1vcnkgYmFuayB3b3VsZCBlbnRpcmVseSBvdmVybGFwCiAJCSAqIHRoZSB2bWFsbG9jIGFyZWEuCiAJCSAqLwotCQlpZiAoX192YShiYW5rLT5zdGFydCkgPj0gVk1BTExPQ19NSU4gfHwKKwkJaWYgKF9fdmEoYmFuay0+c3RhcnQpID49IHZtYWxsb2NfbWluIHx8CiAJCSAgICBfX3ZhKGJhbmstPnN0YXJ0KSA8ICh2b2lkICopUEFHRV9PRkZTRVQpIHsKIAkJCXByaW50ayhLRVJOX05PVElDRSAiSWdub3JpbmcgUkFNIGF0ICUuOGx4LSUuOGx4ICIKIAkJCSAgICAgICAiKHZtYWxsb2MgcmVnaW9uIG92ZXJsYXApLlxuIiwKQEAgLTc1Myw5ICs3NzksOSBAQAogCQkgKiBDaGVjayB3aGV0aGVyIHRoaXMgbWVtb3J5IGJhbmsgd291bGQgcGFydGlhbGx5IG92ZXJsYXAKIAkJICogdGhlIHZtYWxsb2MgYXJlYS4KIAkJICovCi0JCWlmIChfX3ZhKGJhbmstPnN0YXJ0ICsgYmFuay0+c2l6ZSkgPiBWTUFMTE9DX01JTiB8fAorCQlpZiAoX192YShiYW5rLT5zdGFydCArIGJhbmstPnNpemUpID4gdm1hbGxvY19taW4gfHwKIAkJICAgIF9fdmEoYmFuay0+c3RhcnQgKyBiYW5rLT5zaXplKSA8IF9fdmEoYmFuay0+c3RhcnQpKSB7Ci0JCQl1bnNpZ25lZCBsb25nIG5ld3NpemUgPSBWTUFMTE9DX01JTiAtIF9fdmEoYmFuay0+c3RhcnQpOworCQkJdW5zaWduZWQgbG9uZyBuZXdzaXplID0gdm1hbGxvY19taW4gLSBfX3ZhKGJhbmstPnN0YXJ0KTsKIAkJCXByaW50ayhLRVJOX05PVElDRSAiVHJ1bmNhdGluZyBSQU0gYXQgJS44bHgtJS44bHggIgogCQkJICAgICAgICJ0byAtJS44bHggKHZtYWxsb2MgcmVnaW9uIG92ZXJsYXApLlxuIiwKIAkJCSAgICAgICBiYW5rLT5zdGFydCwgYmFuay0+c3RhcnQgKyBiYW5rLT5zaXplIC0gMSwKQEAgLTgyNywxMDEgKzg1MywyMyBAQAogfQogCiAvKgotICogUmVzZXJ2ZSB0aGUgdmFyaW91cyByZWdpb25zIG9mIG5vZGUgMAorICogUmVzZXJ2ZSB0aGUgc3BlY2lhbCByZWdpb25zIG9mIG1lbW9yeQogICovCi12b2lkIF9faW5pdCByZXNlcnZlX25vZGVfemVybyhwZ19kYXRhX3QgKnBnZGF0KQordm9pZCBfX2luaXQgYXJtX21tX21lbWJsb2NrX3Jlc2VydmUodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIHJlc19zaXplID0gMDsKLQotCS8qCi0JICogUmVnaXN0ZXIgdGhlIGtlcm5lbCB0ZXh0IGFuZCBkYXRhIHdpdGggYm9vdG1lbS4KLQkgKiBOb3RlIHRoYXQgdGhpcyBjYW4gb25seSBiZSBpbiBub2RlIDAuCi0JICovCi0jaWZkZWYgQ09ORklHX1hJUF9LRVJORUwKLQlyZXNlcnZlX2Jvb3RtZW1fbm9kZShwZ2RhdCwgX19wYShfZGF0YSksIF9lbmQgLSBfZGF0YSwKLQkJCUJPT1RNRU1fREVGQVVMVCk7Ci0jZWxzZQotCXJlc2VydmVfYm9vdG1lbV9ub2RlKHBnZGF0LCBfX3BhKF9zdGV4dCksIF9lbmQgLSBfc3RleHQsCi0JCQlCT09UTUVNX0RFRkFVTFQpOwotI2VuZGlmCi0KIAkvKgogCSAqIFJlc2VydmUgdGhlIHBhZ2UgdGFibGVzLiAgVGhlc2UgYXJlIGFscmVhZHkgaW4gdXNlLAogCSAqIGFuZCBjYW4gb25seSBiZSBpbiBub2RlIDAuCiAJICovCi0JcmVzZXJ2ZV9ib290bWVtX25vZGUocGdkYXQsIF9fcGEoc3dhcHBlcl9wZ19kaXIpLAotCQkJICAgICBQVFJTX1BFUl9QR0QgKiBzaXplb2YocGdkX3QpLCBCT09UTUVNX0RFRkFVTFQpOwotCi0JLyoKLQkgKiBIbW0uLi4gVGhpcyBzaG91bGQgZ28gZWxzZXdoZXJlLCBidXQgd2UgcmVhbGx5IHJlYWxseSBuZWVkIHRvCi0JICogc3RvcCB0aGluZ3MgYWxsb2NhdGluZyB0aGUgbG93IG1lbW9yeTsgaWRlYWxseSB3ZSBuZWVkIGEgYmV0dGVyCi0JICogaW1wbGVtZW50YXRpb24gb2YgR0ZQX0RNQSB3aGljaCBkb2VzIG5vdCBhc3N1bWUgdGhhdCBETUEtYWJsZQotCSAqIG1lbW9yeSBzdGFydHMgYXQgemVyby4KLQkgKi8KLQlpZiAobWFjaGluZV9pc19pbnRlZ3JhdG9yKCkgfHwgbWFjaGluZV9pc19jaW50ZWdyYXRvcigpKQotCQlyZXNfc2l6ZSA9IF9fcGEoc3dhcHBlcl9wZ19kaXIpIC0gUEhZU19PRkZTRVQ7Ci0KLQkvKgotCSAqIFRoZXNlIHNob3VsZCBsaWtld2lzZSBnbyBlbHNld2hlcmUuICBUaGV5IHByZS1yZXNlcnZlIHRoZQotCSAqIHNjcmVlbiBtZW1vcnkgcmVnaW9uIGF0IHRoZSBzdGFydCBvZiBtYWluIHN5c3RlbSBtZW1vcnkuCi0JICovCi0JaWYgKG1hY2hpbmVfaXNfZWRiNzIxMSgpKQotCQlyZXNfc2l6ZSA9IDB4MDAwMjAwMDA7Ci0JaWYgKG1hY2hpbmVfaXNfcDcyMHQoKSkKLQkJcmVzX3NpemUgPSAweDAwMDE0MDAwOwotCi0JLyogSDE5NDAsIFJYMzcxNSBhbmQgUlgxOTUwIG5lZWQgdG8gcmVzZXJ2ZSB0aGlzIGZvciBzdXNwZW5kICovCi0KLQlpZiAobWFjaGluZV9pc19oMTk0MCgpIHx8IG1hY2hpbmVfaXNfcngzNzE1KCkKLQkJfHwgbWFjaGluZV9pc19yeDE5NTAoKSkgewotCQlyZXNlcnZlX2Jvb3RtZW1fbm9kZShwZ2RhdCwgMHgzMDAwMzAwMCwgMHgxMDAwLAotCQkJCUJPT1RNRU1fREVGQVVMVCk7Ci0JCXJlc2VydmVfYm9vdG1lbV9ub2RlKHBnZGF0LCAweDMwMDgxMDAwLCAweDEwMDAsCi0JCQkJQk9PVE1FTV9ERUZBVUxUKTsKLQl9Ci0KLQlpZiAobWFjaGluZV9pc19wYWxtbGQoKSB8fCBtYWNoaW5lX2lzX3BhbG10eCgpKSB7Ci0JCXJlc2VydmVfYm9vdG1lbV9ub2RlKHBnZGF0LCAweGEwMDAwMDAwLCAweDEwMDAsCi0JCQkJQk9PVE1FTV9FWENMVVNJVkUpOwotCQlyZXNlcnZlX2Jvb3RtZW1fbm9kZShwZ2RhdCwgMHhhMDIwMDAwMCwgMHgxMDAwLAotCQkJCUJPT1RNRU1fRVhDTFVTSVZFKTsKLQl9Ci0KLQlpZiAobWFjaGluZV9pc190cmVvNjgwKCkgfHwgbWFjaGluZV9pc19jZW50cm8oKSkgewotCQlyZXNlcnZlX2Jvb3RtZW1fbm9kZShwZ2RhdCwgMHhhMDAwMDAwMCwgMHgxMDAwLAotCQkJCUJPT1RNRU1fRVhDTFVTSVZFKTsKLQkJcmVzZXJ2ZV9ib290bWVtX25vZGUocGdkYXQsIDB4YTIwMDAwMDAsIDB4MTAwMCwKLQkJCQlCT09UTUVNX0VYQ0xVU0lWRSk7Ci0JfQotCi0JaWYgKG1hY2hpbmVfaXNfcGFsbXQ1KCkpCi0JCXJlc2VydmVfYm9vdG1lbV9ub2RlKHBnZGF0LCAweGEwMjAwMDAwLCAweDEwMDAsCi0JCQkJQk9PVE1FTV9FWENMVVNJVkUpOwotCi0JLyoKLQkgKiBVMzAwIC0gVGhpcyBwbGF0Zm9ybSBmYW1pbHkgY2FuIHNoYXJlIHBoeXNpY2FsIG1lbW9yeQotCSAqIGJldHdlZW4gdHdvIEFSTSBjcHVzLCBvbmUgcnVubmluZyBMaW51eCBhbmQgdGhlIG90aGVyCi0JICogcnVubmluZyBhbm90aGVyIE9TLgotCSAqLwotCWlmIChtYWNoaW5lX2lzX3UzMDAoKSkgewotI2lmZGVmIENPTkZJR19NQUNIX1UzMDBfU0lOR0xFX1JBTQotI2lmICgoQ09ORklHX01BQ0hfVTMwMF9BQ0NFU1NfTUVNX1NJWkUgJiAxKSA9PSAxKSAmJglcCi0JQ09ORklHX01BQ0hfVTMwMF8yTUJfQUxJR05NRU5UX0ZJWAotCQlyZXNfc2l6ZSA9IDB4MDAxMDAwMDA7Ci0jZW5kaWYKLSNlbmRpZgotCX0KKwltZW1ibG9ja19yZXNlcnZlKF9fcGEoc3dhcHBlcl9wZ19kaXIpLCBQVFJTX1BFUl9QR0QgKiBzaXplb2YocGdkX3QpKTsKIAogI2lmZGVmIENPTkZJR19TQTExMTEKIAkvKgogCSAqIEJlY2F1c2Ugb2YgdGhlIFNBMTExMSBETUEgYnVnLCB3ZSB3YW50IHRvIHByZXNlcnZlIG91cgogCSAqIHByZWNpb3VzIERNQS1hYmxlIG1lbW9yeS4uLgogCSAqLwotCXJlc19zaXplID0gX19wYShzd2FwcGVyX3BnX2RpcikgLSBQSFlTX09GRlNFVDsKKwltZW1ibG9ja19yZXNlcnZlKFBIWVNfT0ZGU0VULCBfX3BhKHN3YXBwZXJfcGdfZGlyKSAtIFBIWVNfT0ZGU0VUKTsKICNlbmRpZgotCWlmIChyZXNfc2l6ZSkKLQkJcmVzZXJ2ZV9ib290bWVtX25vZGUocGdkYXQsIFBIWVNfT0ZGU0VULCByZXNfc2l6ZSwKLQkJCQlCT09UTUVNX0RFRkFVTFQpOwogfQogCiAvKgpAQCAtOTQwLDcgKzg4OCw3IEBACiAJLyoKIAkgKiBBbGxvY2F0ZSB0aGUgdmVjdG9yIHBhZ2UgZWFybHkuCiAJICovCi0JdmVjdG9ycyA9IGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKFBBR0VfU0laRSk7CisJdmVjdG9ycyA9IGVhcmx5X2FsbG9jKFBBR0VfU0laRSk7CiAKIAlmb3IgKGFkZHIgPSBWTUFMTE9DX0VORDsgYWRkcjsgYWRkciArPSBQR0RJUl9TSVpFKQogCQlwbWRfY2xlYXIocG1kX29mZl9rKGFkZHIpKTsKQEAgLTEwMTEsMTEgKzk1OSw4IEBACiBzdGF0aWMgdm9pZCBfX2luaXQga21hcF9pbml0KHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KLQlwbWRfdCAqcG1kID0gcG1kX29mZl9rKFBLTUFQX0JBU0UpOwotCXB0ZV90ICpwdGUgPSBhbGxvY19ib290bWVtX2xvd19wYWdlcygyICogUFRSU19QRVJfUFRFICogc2l6ZW9mKHB0ZV90KSk7Ci0JQlVHX09OKCFwbWRfbm9uZSgqcG1kKSB8fCAhcHRlKTsKLQlfX3BtZF9wb3B1bGF0ZShwbWQsIF9fcGEocHRlKSB8IF9QQUdFX0tFUk5FTF9UQUJMRSk7Ci0JcGttYXBfcGFnZV90YWJsZSA9IHB0ZSArIFBUUlNfUEVSX1BURTsKKwlwa21hcF9wYWdlX3RhYmxlID0gZWFybHlfcHRlX2FsbG9jKHBtZF9vZmZfayhQS01BUF9CQVNFKSwKKwkJUEtNQVBfQkFTRSwgX1BBR0VfS0VSTkVMX1RBQkxFKTsKICNlbmRpZgogfQogCkBAIC0xMDY2LDE3ICsxMDExLDE2IEBACiAJc2FuaXR5X2NoZWNrX21lbWluZm8oKTsKIAlwcmVwYXJlX3BhZ2VfdGFibGUoKTsKIAltYXBfbG93bWVtKCk7Ci0JYm9vdG1lbV9pbml0KCk7CiAJZGV2aWNlbWFwc19pbml0KG1kZXNjKTsKIAlrbWFwX2luaXQoKTsKIAogCXRvcF9wbWQgPSBwbWRfb2ZmX2soMHhmZmZmMDAwMCk7CiAKLQkvKgotCSAqIGFsbG9jYXRlIHRoZSB6ZXJvIHBhZ2UuICBOb3RlIHRoYXQgdGhpcyBhbHdheXMgc3VjY2VlZHMgYW5kCi0JICogcmV0dXJucyBhIHplcm9lZCByZXN1bHQuCi0JICovCi0JemVyb19wYWdlID0gYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMoUEFHRV9TSVpFKTsKKwkvKiBhbGxvY2F0ZSB0aGUgemVybyBwYWdlLiAqLworCXplcm9fcGFnZSA9IGVhcmx5X2FsbG9jKFBBR0VfU0laRSk7CisKKwlib290bWVtX2luaXQoKTsKKwogCWVtcHR5X3plcm9fcGFnZSA9IHZpcnRfdG9fcGFnZSh6ZXJvX3BhZ2UpOwogCV9fZmx1c2hfZGNhY2hlX3BhZ2UoTlVMTCwgZW1wdHlfemVyb19wYWdlKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL25vbW11LmMgYi9hcmNoL2FybS9tbS9ub21tdS5jCmluZGV4IDMzYjMyNzMuLjY4N2QwMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL25vbW11LmMKKysrIGIvYXJjaC9hcm0vbW0vbm9tbXUuYwpAQCAtNiw4ICs2LDggQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KQEAgLTE3LDMwICsxNywxNCBAQAogCiAjaW5jbHVkZSAibW0uaCIKIAotLyoKLSAqIFJlc2VydmUgdGhlIHZhcmlvdXMgcmVnaW9ucyBvZiBub2RlIDAKLSAqLwotdm9pZCBfX2luaXQgcmVzZXJ2ZV9ub2RlX3plcm8ocGdfZGF0YV90ICpwZ2RhdCkKK3ZvaWQgX19pbml0IGFybV9tbV9tZW1ibG9ja19yZXNlcnZlKHZvaWQpCiB7CiAJLyoKLQkgKiBSZWdpc3RlciB0aGUga2VybmVsIHRleHQgYW5kIGRhdGEgd2l0aCBib290bWVtLgotCSAqIE5vdGUgdGhhdCB0aGlzIGNhbiBvbmx5IGJlIGluIG5vZGUgMC4KLQkgKi8KLSNpZmRlZiBDT05GSUdfWElQX0tFUk5FTAotCXJlc2VydmVfYm9vdG1lbV9ub2RlKHBnZGF0LCBfX3BhKF9kYXRhKSwgX2VuZCAtIF9kYXRhLAotCQkJQk9PVE1FTV9ERUZBVUxUKTsKLSNlbHNlCi0JcmVzZXJ2ZV9ib290bWVtX25vZGUocGdkYXQsIF9fcGEoX3N0ZXh0KSwgX2VuZCAtIF9zdGV4dCwKLQkJCUJPT1RNRU1fREVGQVVMVCk7Ci0jZW5kaWYKLQotCS8qCiAJICogUmVnaXN0ZXIgdGhlIGV4Y2VwdGlvbiB2ZWN0b3IgcGFnZS4KIAkgKiBzb21lIGFyY2hpdGVjdHVyZXMgd2hpY2ggdGhlIERSQU0gaXMgdGhlIGV4Y2VwdGlvbiB2ZWN0b3IgdG8gdHJhcCwKIAkgKiBhbGxvY19wYWdlIGJyZWFrcyB3aXRoIGVycm9yLCBhbHRob3VnaCBpdCBpcyBub3QgTlVMTCwgYnV0ICIwLiIKIAkgKi8KLQlyZXNlcnZlX2Jvb3RtZW1fbm9kZShwZ2RhdCwgQ09ORklHX1ZFQ1RPUlNfQkFTRSwgUEFHRV9TSVpFLAotCQkJQk9PVE1FTV9ERUZBVUxUKTsKKwltZW1ibG9ja19yZXNlcnZlKENPTkZJR19WRUNUT1JTX0JBU0UsIFBBR0VfU0laRSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCmluZGV4IDcyNTA3YzYuLjIwM2E0ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCkBAIC03OSwxNSArNzksMTEgQEAKICAqIGNwdV9hcm0xMDIwX3Byb2NfZmluKCkKICAqLwogRU5UUlkoY3B1X2FybTEwMjBfcHJvY19maW4pCi0Jc3RtZmQJc3AhLCB7bHJ9Ci0JbW92CWlwLCAjUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgU1ZDX01PREUKLQltc3IJY3Bzcl9jLCBpcAotCWJsCWFybTEwMjBfZmx1c2hfa2Vybl9jYWNoZV9hbGwKIAltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKIAliaWMJcjAsIHIwLCAjMHgxMDAwIAkJQCAuLi5pLi4uLi4uLi4uLi4uCiAJYmljCXIwLCByMCwgIzB4MDAwZSAJCUAgLi4uLi4uLi4uLi4ud2NhLgogCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgZGlzYWJsZSBjYWNoZXMKLQlsZG1mZAlzcCEsIHtwY30KKwltb3YJcGMsIGxyCiAKIC8qCiAgKiBjcHVfYXJtMTAyMF9yZXNldChsb2MpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMKaW5kZXggZDI3ODI5OC4uMWE1MTFlNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUwpAQCAtNzksMTUgKzc5LDExIEBACiAgKiBjcHVfYXJtMTAyMGVfcHJvY19maW4oKQogICovCiBFTlRSWShjcHVfYXJtMTAyMGVfcHJvY19maW4pCi0Jc3RtZmQJc3AhLCB7bHJ9Ci0JbW92CWlwLCAjUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgU1ZDX01PREUKLQltc3IJY3Bzcl9jLCBpcAotCWJsCWFybTEwMjBlX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCiAJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCiAJYmljCXIwLCByMCwgIzB4MTAwMCAJCUAgLi4uaS4uLi4uLi4uLi4uLgogCWJpYwlyMCwgcjAsICMweDAwMGUgCQlAIC4uLi4uLi4uLi4uLndjYS4KIAltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGRpc2FibGUgY2FjaGVzCi0JbGRtZmQJc3AhLCB7cGN9CisJbW92CXBjLCBscgogCiAvKgogICogY3B1X2FybTEwMjBlX3Jlc2V0KGxvYykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMKaW5kZXggY2UxM2U0YS4uMWZmYTRlYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMKQEAgLTY4LDE1ICs2OCwxMSBAQAogICogY3B1X2FybTEwMjJfcHJvY19maW4oKQogICovCiBFTlRSWShjcHVfYXJtMTAyMl9wcm9jX2ZpbikKLQlzdG1mZAlzcCEsIHtscn0KLQltb3YJaXAsICNQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERQotCW1zcgljcHNyX2MsIGlwCi0JYmwJYXJtMTAyMl9mbHVzaF9rZXJuX2NhY2hlX2FsbAogCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgogCWJpYwlyMCwgcjAsICMweDEwMDAgCQlAIC4uLmkuLi4uLi4uLi4uLi4KIAliaWMJcjAsIHIwLCAjMHgwMDBlIAkJQCAuLi4uLi4uLi4uLi53Y2EuCiAJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBkaXNhYmxlIGNhY2hlcwotCWxkbWZkCXNwISwge3BjfQorCW1vdglwYywgbHIKIAogLyoKICAqIGNwdV9hcm0xMDIyX3Jlc2V0KGxvYykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyNi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMKaW5kZXggNjM2NjcyYS4uNTY5N2MzNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMKQEAgLTY4LDE1ICs2OCwxMSBAQAogICogY3B1X2FybTEwMjZfcHJvY19maW4oKQogICovCiBFTlRSWShjcHVfYXJtMTAyNl9wcm9jX2ZpbikKLQlzdG1mZAlzcCEsIHtscn0KLQltb3YJaXAsICNQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERQotCW1zcgljcHNyX2MsIGlwCi0JYmwJYXJtMTAyNl9mbHVzaF9rZXJuX2NhY2hlX2FsbAogCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgogCWJpYwlyMCwgcjAsICMweDEwMDAgCQlAIC4uLmkuLi4uLi4uLi4uLi4KIAliaWMJcjAsIHIwLCAjMHgwMDBlIAkJQCAuLi4uLi4uLi4uLi53Y2EuCiAJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBkaXNhYmxlIGNhY2hlcwotCWxkbWZkCXNwISwge3BjfQorCW1vdglwYywgbHIKIAogLyoKICAqIGNwdV9hcm0xMDI2X3Jlc2V0KGxvYykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNl83LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTZfNy5TCmluZGV4IDc5NWRjNjEuLjY0ZTBiMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNl83LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm02XzcuUwpAQCAtMTg0LDggKzE4NCw2IEBACiAKIEVOVFJZKGNwdV9hcm02X3Byb2NfZmluKQogRU5UUlkoY3B1X2FybTdfcHJvY19maW4pCi0JCW1vdglyMCwgI1BTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IFNWQ19NT0RFCi0JCW1zcgljcHNyX2MsIHIwCiAJCW1vdglyMCwgIzB4MzEJCQlAIC4uLi5TLi5EUC4uLk0KIAkJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBkaXNhYmxlIGNhY2hlcwogCQltb3YJcGMsIGxyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTcyMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03MjAuUwppbmRleCAwYjYyZGUyLi45ZDk2ODI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTcyMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtNzIwLlMKQEAgLTU0LDE1ICs1NCwxMSBAQAogCQltb3YJcGMsIGxyCiAKIEVOVFJZKGNwdV9hcm03MjBfcHJvY19maW4pCi0JCXN0bWZkCXNwISwge2xyfQotCQltb3YJaXAsICNQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERQotCQltc3IJY3Bzcl9jLCBpcAogCQltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCiAJCWJpYwlyMCwgcjAsICMweDEwMDAJCQlAIC4uLmkuLi4uLi4uLi4uLi4KIAkJYmljCXIwLCByMCwgIzB4MDAwZQkJCUAgLi4uLi4uLi4uLi4ud2NhLgogCQltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGRpc2FibGUgY2FjaGVzCi0JCW1jcglwMTUsIDAsIHIxLCBjNywgYzcsIDAJCUAgaW52YWxpZGF0ZSBjYWNoZQotCQlsZG1mZAlzcCEsIHtwY30KKwkJbW92CXBjLCBscgogCiAvKgogICogRnVuY3Rpb246IGFybTcyMF9wcm9jX2RvX2lkbGUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNzQwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTc0MC5TCmluZGV4IDAxODYwY2QuLjZjMWE5YWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNzQwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03NDAuUwpAQCAtMzYsMTUgKzM2LDExIEBACiAgKiBjcHVfYXJtNzQwX3Byb2NfZmluKCkKICAqLwogRU5UUlkoY3B1X2FybTc0MF9wcm9jX2ZpbikKLQlzdG1mZAlzcCEsIHtscn0KLQltb3YJaXAsICNQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERQotCW1zcgljcHNyX2MsIGlwCiAJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAogCWJpYwlyMCwgcjAsICMweDNmMDAwMDAwCQlAIGJhbmsvZi9sb2NrL3MKIAliaWMJcjAsIHIwLCAjMHgwMDAwMDAwYwkJQCB3LWJ1ZmZlci9jYWNoZQogCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgZGlzYWJsZSBjYWNoZXMKLQltY3IJcDE1LCAwLCByMCwgYzcsIGMwLCAwCQlAIGludmFsaWRhdGUgY2FjaGUKLQlsZG1mZAlzcCEsIHtwY30KKwltb3YJcGMsIGxyCiAKIC8qCiAgKiBjcHVfYXJtNzQwX3Jlc2V0KGxvYykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtN3RkbWkuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtN3RkbWkuUwppbmRleCAxMjAxYjk4Li42YTg1MGRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTd0ZG1pLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03dGRtaS5TCkBAIC0zNiw4ICszNiw2IEBACiAgKiBjcHVfYXJtN3RkbWlfcHJvY19maW4oKQogICovCiBFTlRSWShjcHVfYXJtN3RkbWlfcHJvY19maW4pCi0JCW1vdglyMCwgI1BTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IFNWQ19NT0RFCi0JCW1zcgljcHNyX2MsIHIwCiAJCW1vdglwYywgbHIKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TCmluZGV4IDhiZTgxOTkuLjg2ZjgwYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUwpAQCAtNjksMTkgKzY5LDExIEBACiAgKiBjcHVfYXJtOTIwX3Byb2NfZmluKCkKICAqLwogRU5UUlkoY3B1X2FybTkyMF9wcm9jX2ZpbikKLQlzdG1mZAlzcCEsIHtscn0KLQltb3YJaXAsICNQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERQotCW1zcgljcHNyX2MsIGlwCi0jaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAotCWJsCWFybTkyMF9mbHVzaF9rZXJuX2NhY2hlX2FsbAotI2Vsc2UKLQlibAl2NHd0X2ZsdXNoX2tlcm5fY2FjaGVfYWxsCi0jZW5kaWYKIAltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKIAliaWMJcjAsIHIwLCAjMHgxMDAwCQkJQCAuLi5pLi4uLi4uLi4uLi4uCiAJYmljCXIwLCByMCwgIzB4MDAwZQkJCUAgLi4uLi4uLi4uLi4ud2NhLgogCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgZGlzYWJsZSBjYWNoZXMKLQlsZG1mZAlzcCEsIHtwY30KKwltb3YJcGMsIGxyCiAKIC8qCiAgKiBjcHVfYXJtOTIwX3Jlc2V0KGxvYykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TCmluZGV4IGMwZmY4ZTQuLmY3NmNlOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUwpAQCAtNzEsMTkgKzcxLDExIEBACiAgKiBjcHVfYXJtOTIyX3Byb2NfZmluKCkKICAqLwogRU5UUlkoY3B1X2FybTkyMl9wcm9jX2ZpbikKLQlzdG1mZAlzcCEsIHtscn0KLQltb3YJaXAsICNQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERQotCW1zcgljcHNyX2MsIGlwCi0jaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAotCWJsCWFybTkyMl9mbHVzaF9rZXJuX2NhY2hlX2FsbAotI2Vsc2UKLQlibAl2NHd0X2ZsdXNoX2tlcm5fY2FjaGVfYWxsCi0jZW5kaWYKIAltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKIAliaWMJcjAsIHIwLCAjMHgxMDAwCQkJQCAuLi5pLi4uLi4uLi4uLi4uCiAJYmljCXIwLCByMCwgIzB4MDAwZQkJCUAgLi4uLi4uLi4uLi4ud2NhLgogCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgZGlzYWJsZSBjYWNoZXMKLQlsZG1mZAlzcCEsIHtwY30KKwltb3YJcGMsIGxyCiAKIC8qCiAgKiBjcHVfYXJtOTIyX3Jlc2V0KGxvYykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI1LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TCmluZGV4IDNjNmNmZmUuLjY1N2JkM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI1LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUwpAQCAtOTIsMTUgKzkyLDExIEBACiAgKiBjcHVfYXJtOTI1X3Byb2NfZmluKCkKICAqLwogRU5UUlkoY3B1X2FybTkyNV9wcm9jX2ZpbikKLQlzdG1mZAlzcCEsIHtscn0KLQltb3YJaXAsICNQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERQotCW1zcgljcHNyX2MsIGlwCi0JYmwJYXJtOTI1X2ZsdXNoX2tlcm5fY2FjaGVfYWxsCiAJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCiAJYmljCXIwLCByMCwgIzB4MTAwMAkJCUAgLi4uaS4uLi4uLi4uLi4uLgogCWJpYwlyMCwgcjAsICMweDAwMGUJCQlAIC4uLi4uLi4uLi4uLndjYS4KIAltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGRpc2FibGUgY2FjaGVzCi0JbGRtZmQJc3AhLCB7cGN9CisJbW92CXBjLCBscgogCiAvKgogICogY3B1X2FybTkyNV9yZXNldChsb2MpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUwppbmRleCA3NWI3MDdjLi43M2YxZjNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMKQEAgLTYxLDE1ICs2MSwxMSBAQAogICogY3B1X2FybTkyNl9wcm9jX2ZpbigpCiAgKi8KIEVOVFJZKGNwdV9hcm05MjZfcHJvY19maW4pCi0Jc3RtZmQJc3AhLCB7bHJ9Ci0JbW92CWlwLCAjUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgU1ZDX01PREUKLQltc3IJY3Bzcl9jLCBpcAotCWJsCWFybTkyNl9mbHVzaF9rZXJuX2NhY2hlX2FsbAogCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgogCWJpYwlyMCwgcjAsICMweDEwMDAJCQlAIC4uLmkuLi4uLi4uLi4uLi4KIAliaWMJcjAsIHIwLCAjMHgwMDBlCQkJQCAuLi4uLi4uLi4uLi53Y2EuCiAJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBkaXNhYmxlIGNhY2hlcwotCWxkbWZkCXNwISwge3BjfQorCW1vdglwYywgbHIKIAogLyoKICAqIGNwdV9hcm05MjZfcmVzZXQobG9jKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQwLlMKaW5kZXggMWFmMTY1Ny4uZmZmYjA2MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTk0MC5TCkBAIC0zNywxNSArMzcsMTEgQEAKICAqIGNwdV9hcm05NDBfcHJvY19maW4oKQogICovCiBFTlRSWShjcHVfYXJtOTQwX3Byb2NfZmluKQotCXN0bWZkCXNwISwge2xyfQotCW1vdglpcCwgI1BTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IFNWQ19NT0RFCi0JbXNyCWNwc3JfYywgaXAKLQlibAlhcm05NDBfZmx1c2hfa2Vybl9jYWNoZV9hbGwKIAltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKIAliaWMJcjAsIHIwLCAjMHgwMDAwMTAwMAkJQCBpLWNhY2hlCiAJYmljCXIwLCByMCwgIzB4MDAwMDAwMDQJCUAgZC1jYWNoZQogCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgZGlzYWJsZSBjYWNoZXMKLQlsZG1mZAlzcCEsIHtwY30KKwltb3YJcGMsIGxyCiAKIC8qCiAgKiBjcHVfYXJtOTQwX3Jlc2V0KGxvYykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQ2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTk0Ni5TCmluZGV4IDE2NjRiNmEuLjI0OWE2MDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQ2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDYuUwpAQCAtNDQsMTUgKzQ0LDExIEBACiAgKiBjcHVfYXJtOTQ2X3Byb2NfZmluKCkKICAqLwogRU5UUlkoY3B1X2FybTk0Nl9wcm9jX2ZpbikKLQlzdG1mZAlzcCEsIHtscn0KLQltb3YJaXAsICNQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERQotCW1zcgljcHNyX2MsIGlwCi0JYmwJYXJtOTQ2X2ZsdXNoX2tlcm5fY2FjaGVfYWxsCiAJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCiAJYmljCXIwLCByMCwgIzB4MDAwMDEwMDAJCUAgaS1jYWNoZQogCWJpYwlyMCwgcjAsICMweDAwMDAwMDA0CQlAIGQtY2FjaGUKIAltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGRpc2FibGUgY2FjaGVzCi0JbGRtZmQJc3AhLCB7cGN9CisJbW92CXBjLCBscgogCiAvKgogICogY3B1X2FybTk0Nl9yZXNldChsb2MpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTl0ZG1pLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTl0ZG1pLlMKaW5kZXggMjg1NDVjMi4uZGI0NzU2NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05dGRtaS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOXRkbWkuUwpAQCAtMzYsOCArMzYsNiBAQAogICogY3B1X2FybTl0ZG1pX3Byb2NfZmluKCkKICAqLwogRU5UUlkoY3B1X2FybTl0ZG1pX3Byb2NfZmluKQotCQltb3YJcjAsICNQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERQotCQltc3IJY3Bzcl9jLCByMAogCQltb3YJcGMsIGxyCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWZhNTI2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWZhNTI2LlMKaW5kZXggMDhmNWFjMi4uNzgwM2ZkZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1mYTUyNi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtZmE1MjYuUwpAQCAtMzksMTcgKzM5LDEzIEBACiAgKiBjcHVfZmE1MjZfcHJvY19maW4oKQogICovCiBFTlRSWShjcHVfZmE1MjZfcHJvY19maW4pCi0Jc3RtZmQJc3AhLCB7bHJ9Ci0JbW92CWlwLCAjUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgU1ZDX01PREUKLQltc3IJY3Bzcl9jLCBpcAotCWJsCWZhX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCiAJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCiAJYmljCXIwLCByMCwgIzB4MTAwMAkJCUAgLi4uaS4uLi4uLi4uLi4uLgogCWJpYwlyMCwgcjAsICMweDAwMGUJCQlAIC4uLi4uLi4uLi4uLndjYS4KIAltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGRpc2FibGUgY2FjaGVzCiAJbm9wCiAJbm9wCi0JbGRtZmQJc3AhLCB7cGN9CisJbW92CXBjLCBscgogCiAvKgogICogY3B1X2ZhNTI2X3Jlc2V0KGxvYykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtZmVyb2Nlb24uUyBiL2FyY2gvYXJtL21tL3Byb2MtZmVyb2Nlb24uUwppbmRleCA1M2U2MzIzLi5iMzA0ZDAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWZlcm9jZW9uLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1mZXJvY2Vvbi5TCkBAIC03NSwxMSArNzUsNiBAQAogICogY3B1X2Zlcm9jZW9uX3Byb2NfZmluKCkKICAqLwogRU5UUlkoY3B1X2Zlcm9jZW9uX3Byb2NfZmluKQotCXN0bWZkCXNwISwge2xyfQotCW1vdglpcCwgI1BTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IFNWQ19NT0RFCi0JbXNyCWNwc3JfYywgaXAKLQlibAlmZXJvY2Vvbl9mbHVzaF9rZXJuX2NhY2hlX2FsbAotCiAjaWYgZGVmaW5lZChDT05GSUdfQ0FDSEVfRkVST0NFT05fTDIpICYmIFwKIAkhZGVmaW5lZChDT05GSUdfQ0FDSEVfRkVST0NFT05fTDJfV1JJVEVUSFJPVUdIKQogCW1vdglyMCwgIzAKQEAgLTkxLDcgKzg2LDcgQEAKIAliaWMJcjAsIHIwLCAjMHgxMDAwCQkJQCAuLi5pLi4uLi4uLi4uLi4uCiAJYmljCXIwLCByMCwgIzB4MDAwZQkJCUAgLi4uLi4uLi4uLi4ud2NhLgogCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgZGlzYWJsZSBjYWNoZXMKLQlsZG1mZAlzcCEsIHtwY30KKwltb3YJcGMsIGxyCiAKIC8qCiAgKiBjcHVfZmVyb2Nlb25fcmVzZXQobG9jKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1tb2hhd2suUyBiL2FyY2gvYXJtL21tL3Byb2MtbW9oYXdrLlMKaW5kZXggY2FhMzExNS4uNWY2ODkyZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1tb2hhd2suUworKysgYi9hcmNoL2FybS9tbS9wcm9jLW1vaGF3ay5TCkBAIC01MSwxNSArNTEsMTEgQEAKICAqIGNwdV9tb2hhd2tfcHJvY19maW4oKQogICovCiBFTlRSWShjcHVfbW9oYXdrX3Byb2NfZmluKQotCXN0bWZkCXNwISwge2xyfQotCW1vdglpcCwgI1BTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IFNWQ19NT0RFCi0JbXNyCWNwc3JfYywgaXAKLQlibAltb2hhd2tfZmx1c2hfa2Vybl9jYWNoZV9hbGwKIAltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKIAliaWMJcjAsIHIwLCAjMHgxODAwCQkJQCAuLi5pei4uLi4uLi4uLi4uCiAJYmljCXIwLCByMCwgIzB4MDAwNgkJCUAgLi4uLi4uLi4uLi4uLmNhLgogCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgZGlzYWJsZSBjYWNoZXMKLQlsZG1mZAlzcCEsIHtwY30KKwltb3YJcGMsIGxyCiAKIC8qCiAgKiBjcHVfbW9oYXdrX3Jlc2V0KGxvYykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAuUyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAuUwppbmRleCA3YjcwNmIzLi5hMjAxZWIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXNhMTEwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TCkBAIC00NCwxNyArNDQsMTMgQEAKICAqIGNwdV9zYTExMF9wcm9jX2ZpbigpCiAgKi8KIEVOVFJZKGNwdV9zYTExMF9wcm9jX2ZpbikKLQlzdG1mZAlzcCEsIHtscn0KLQltb3YJaXAsICNQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERQotCW1zcgljcHNyX2MsIGlwCi0JYmwJdjR3Yl9mbHVzaF9rZXJuX2NhY2hlX2FsbAlAIGNsZWFuIGNhY2hlcwotMToJbW92CXIwLCAjMAorCW1vdglyMCwgIzAKIAltY3IJcDE1LCAwLCByMCwgYzE1LCBjMiwgMgkJQCBEaXNhYmxlIGNsb2NrIHN3aXRjaGluZwogCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgogCWJpYwlyMCwgcjAsICMweDEwMDAJCQlAIC4uLmkuLi4uLi4uLi4uLi4KIAliaWMJcjAsIHIwLCAjMHgwMDBlCQkJQCAuLi4uLi4uLi4uLi53Y2EuCiAJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBkaXNhYmxlIGNhY2hlcwotCWxkbWZkCXNwISwge3BjfQorCW1vdglwYywgbHIKIAogLyoKICAqIGNwdV9zYTExMF9yZXNldChsb2MpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUwppbmRleCA1YzQ3NzYwLi43ZGRjNDgwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMKQEAgLTU1LDE2ICs1NSwxMiBAQAogICogIC0gQ2xlYW4gYW5kIHR1cm4gb2ZmIGNhY2hlcy4KICAqLwogRU5UUlkoY3B1X3NhMTEwMF9wcm9jX2ZpbikKLQlzdG1mZAlzcCEsIHtscn0KLQltb3YJaXAsICNQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERQotCW1zcgljcHNyX2MsIGlwCi0JYmwJdjR3Yl9mbHVzaF9rZXJuX2NhY2hlX2FsbAogCW1jcglwMTUsIDAsIGlwLCBjMTUsIGMyLCAyCQlAIERpc2FibGUgY2xvY2sgc3dpdGNoaW5nCiAJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCiAJYmljCXIwLCByMCwgIzB4MTAwMAkJCUAgLi4uaS4uLi4uLi4uLi4uLgogCWJpYwlyMCwgcjAsICMweDAwMGUJCQlAIC4uLi4uLi4uLi4uLndjYS4KIAltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGRpc2FibGUgY2FjaGVzCi0JbGRtZmQJc3AhLCB7cGN9CisJbW92CXBjLCBscgogCiAvKgogICogY3B1X3NhMTEwMF9yZXNldChsb2MpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXY2LlMgYi9hcmNoL2FybS9tbS9wcm9jLXY2LlMKaW5kZXggN2E1MzM3ZS4uMjJhYWM4NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy12Ni5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtdjYuUwpAQCAtNDIsMTQgKzQyLDExIEBACiAJbW92CXBjLCBscgogCiBFTlRSWShjcHVfdjZfcHJvY19maW4pCi0Jc3RtZmQJc3AhLCB7bHJ9Ci0JY3BzaWQJaWYJCQkJQCBkaXNhYmxlIGludGVycnVwdHMKLQlibAl2Nl9mbHVzaF9rZXJuX2NhY2hlX2FsbAogCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgogCWJpYwlyMCwgcjAsICMweDEwMDAJCQlAIC4uLmkuLi4uLi4uLi4uLi4KIAliaWMJcjAsIHIwLCAjMHgwMDA2CQkJQCAuLi4uLi4uLi4uLi4uY2EuCiAJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBkaXNhYmxlIGNhY2hlcwotCWxkbWZkCXNwISwge3BjfQorCW1vdglwYywgbHIKIAogLyoKICAqCWNwdV92Nl9yZXNldChsb2MpCkBAIC0yMzksNyArMjM2LDggQEAKIAliCV9fdjZfc2V0dXAKIAkubG9uZwljcHVfYXJjaF9uYW1lCiAJLmxvbmcJY3B1X2VsZl9uYW1lCi0JLmxvbmcJSFdDQVBfU1dQfEhXQ0FQX0hBTEZ8SFdDQVBfVEhVTUJ8SFdDQVBfRkFTVF9NVUxUfEhXQ0FQX0VEU1B8SFdDQVBfSkFWQQorCS8qIFNlZSBhbHNvIGZlYXRfdjZfZml4dXAoKSBmb3IgSFdDQVBfVExTICovCisJLmxvbmcJSFdDQVBfU1dQfEhXQ0FQX0hBTEZ8SFdDQVBfVEhVTUJ8SFdDQVBfRkFTVF9NVUxUfEhXQ0FQX0VEU1B8SFdDQVBfSkFWQXxIV0NBUF9UTFMKIAkubG9uZwljcHVfdjZfbmFtZQogCS5sb25nCXY2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAkubG9uZwl2NndiaV90bGJfZm5zCkBAIC0yNjIsNyArMjYwLDcgQEAKIAliCV9fdjZfc2V0dXAKIAkubG9uZwljcHVfYXJjaF9uYW1lCiAJLmxvbmcJY3B1X2VsZl9uYW1lCi0JLmxvbmcJSFdDQVBfU1dQfEhXQ0FQX0hBTEZ8SFdDQVBfVEhVTUJ8SFdDQVBfRkFTVF9NVUxUfEhXQ0FQX0VEU1AKKwkubG9uZwlIV0NBUF9TV1B8SFdDQVBfSEFMRnxIV0NBUF9USFVNQnxIV0NBUF9GQVNUX01VTFR8SFdDQVBfRURTUHxIV0NBUF9UTFMKIAkubG9uZwljcHVfcGo0X25hbWUKIAkubG9uZwl2Nl9wcm9jZXNzb3JfZnVuY3Rpb25zCiAJLmxvbmcJdjZ3YmlfdGxiX2ZucwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy12Ny5TIGIvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCmluZGV4IDdhYWY4OGEuLjZhODUwNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtdjcuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXY3LlMKQEAgLTQ1LDE0ICs0NSwxMSBAQAogRU5EUFJPQyhjcHVfdjdfcHJvY19pbml0KQogCiBFTlRSWShjcHVfdjdfcHJvY19maW4pCi0Jc3RtZmQJc3AhLCB7bHJ9Ci0JY3BzaWQJaWYJCQkJQCBkaXNhYmxlIGludGVycnVwdHMKLQlibAl2N19mbHVzaF9rZXJuX2NhY2hlX2FsbAogCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgogCWJpYwlyMCwgcjAsICMweDEwMDAJCQlAIC4uLmkuLi4uLi4uLi4uLi4KIAliaWMJcjAsIHIwLCAjMHgwMDA2CQkJQCAuLi4uLi4uLi4uLi4uY2EuCiAJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBkaXNhYmxlIGNhY2hlcwotCWxkbWZkCXNwISwge3BjfQorCW1vdglwYywgbHIKIEVORFBST0MoY3B1X3Y3X3Byb2NfZmluKQogCiAvKgpAQCAtMzQ0LDcgKzM0MSw3IEBACiAJYglfX3Y3X3NldHVwCiAJLmxvbmcJY3B1X2FyY2hfbmFtZQogCS5sb25nCWNwdV9lbGZfbmFtZQotCS5sb25nCUhXQ0FQX1NXUHxIV0NBUF9IQUxGfEhXQ0FQX1RIVU1CfEhXQ0FQX0ZBU1RfTVVMVHxIV0NBUF9FRFNQCisJLmxvbmcJSFdDQVBfU1dQfEhXQ0FQX0hBTEZ8SFdDQVBfVEhVTUJ8SFdDQVBfRkFTVF9NVUxUfEhXQ0FQX0VEU1B8SFdDQVBfVExTCiAJLmxvbmcJY3B1X3Y3X25hbWUKIAkubG9uZwl2N19wcm9jZXNzb3JfZnVuY3Rpb25zCiAJLmxvbmcJdjd3YmlfdGxiX2ZucwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMgYi9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUwppbmRleCBlNTc5N2YxLi4zNjFhNTFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUwpAQCAtOTAsMTUgKzkwLDExIEBACiAgKiBjcHVfeHNjM19wcm9jX2ZpbigpCiAgKi8KIEVOVFJZKGNwdV94c2MzX3Byb2NfZmluKQotCXN0cglsciwgW3NwLCAjLTRdIQotCW1vdglyMCwgI1BTUl9GX0JJVHxQU1JfSV9CSVR8U1ZDX01PREUKLQltc3IJY3Bzcl9jLCByMAotCWJsCXhzYzNfZmx1c2hfa2Vybl9jYWNoZV9hbGwJQCBjbGVhbiBjYWNoZXMKIAltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKIAliaWMJcjAsIHIwLCAjMHgxODAwCQkJQCAuLi5JWi4uLi4uLi4uLi4uCiAJYmljCXIwLCByMCwgIzB4MDAwNgkJCUAgLi4uLi4uLi4uLi4uLkNBLgogCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgZGlzYWJsZSBjYWNoZXMKLQlsZHIJcGMsIFtzcF0sICM0CisJbW92CXBjLCBscgogCiAvKgogICogY3B1X3hzYzNfcmVzZXQobG9jKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUyBiL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKaW5kZXggNjMwMzdlMi4uMTQwNzU5NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCkBAIC0xMjQsMTUgKzEyNCwxMSBAQAogICogY3B1X3hzY2FsZV9wcm9jX2ZpbigpCiAgKi8KIEVOVFJZKGNwdV94c2NhbGVfcHJvY19maW4pCi0Jc3RyCWxyLCBbc3AsICMtNF0hCi0JbW92CXIwLCAjUFNSX0ZfQklUfFBTUl9JX0JJVHxTVkNfTU9ERQotCW1zcgljcHNyX2MsIHIwCi0JYmwJeHNjYWxlX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCUAgY2xlYW4gY2FjaGVzCiAJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCiAJYmljCXIwLCByMCwgIzB4MTgwMAkJCUAgLi4uSVouLi4uLi4uLi4uLgogCWJpYwlyMCwgcjAsICMweDAwMDYJCQlAIC4uLi4uLi4uLi4uLi5DQS4KIAltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGRpc2FibGUgY2FjaGVzCi0JbGRyCXBjLCBbc3BdLCAjNAorCW1vdglwYywgbHIKIAogLyoKICAqIGNwdV94c2NhbGVfcmVzZXQobG9jKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vdm1yZWdpb24uYyBiL2FyY2gvYXJtL21tL3ZtcmVnaW9uLmMKaW5kZXggMTllMDliZGIuLjkzNTk5M2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3ZtcmVnaW9uLmMKKysrIGIvYXJjaC9hcm0vbW0vdm1yZWdpb24uYwpAQCAtMzUsNyArMzUsOCBAQAogICovCiAKIHN0cnVjdCBhcm1fdm1yZWdpb24gKgotYXJtX3ZtcmVnaW9uX2FsbG9jKHN0cnVjdCBhcm1fdm1yZWdpb25faGVhZCAqaGVhZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcCkKK2FybV92bXJlZ2lvbl9hbGxvYyhzdHJ1Y3QgYXJtX3ZtcmVnaW9uX2hlYWQgKmhlYWQsIHNpemVfdCBhbGlnbiwKKwkJICAgc2l6ZV90IHNpemUsIGdmcF90IGdmcCkKIHsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBoZWFkLT52bV9zdGFydCwgZW5kID0gaGVhZC0+dm1fZW5kIC0gc2l6ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNTgsNyArNTksNyBAQAogCQkJZ290byBub3NwYzsKIAkJaWYgKChhZGRyICsgc2l6ZSkgPD0gYy0+dm1fc3RhcnQpCiAJCQlnb3RvIGZvdW5kOwotCQlhZGRyID0gYy0+dm1fZW5kOworCQlhZGRyID0gQUxJR04oYy0+dm1fZW5kLCBhbGlnbik7CiAJCWlmIChhZGRyID4gZW5kKQogCQkJZ290byBub3NwYzsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS92bXJlZ2lvbi5oIGIvYXJjaC9hcm0vbW0vdm1yZWdpb24uaAppbmRleCA2YjJjZGJkLi4xNWU5ZjA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS92bXJlZ2lvbi5oCisrKyBiL2FyY2gvYXJtL21tL3ZtcmVnaW9uLmgKQEAgLTIxLDcgKzIxLDcgQEAKIAlpbnQJCQl2bV9hY3RpdmU7CiB9OwogCi1zdHJ1Y3QgYXJtX3ZtcmVnaW9uICphcm1fdm1yZWdpb25fYWxsb2Moc3RydWN0IGFybV92bXJlZ2lvbl9oZWFkICosIHNpemVfdCwgZ2ZwX3QpOworc3RydWN0IGFybV92bXJlZ2lvbiAqYXJtX3ZtcmVnaW9uX2FsbG9jKHN0cnVjdCBhcm1fdm1yZWdpb25faGVhZCAqLCBzaXplX3QsIHNpemVfdCwgZ2ZwX3QpOwogc3RydWN0IGFybV92bXJlZ2lvbiAqYXJtX3ZtcmVnaW9uX2ZpbmQoc3RydWN0IGFybV92bXJlZ2lvbl9oZWFkICosIHVuc2lnbmVkIGxvbmcpOwogc3RydWN0IGFybV92bXJlZ2lvbiAqYXJtX3ZtcmVnaW9uX2ZpbmRfcmVtb3ZlKHN0cnVjdCBhcm1fdm1yZWdpb25faGVhZCAqLCB1bnNpZ25lZCBsb25nKTsKIHZvaWQgYXJtX3ZtcmVnaW9uX2ZyZWUoc3RydWN0IGFybV92bXJlZ2lvbl9oZWFkICosIHN0cnVjdCBhcm1fdm1yZWdpb24gKik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LWlvcC9wY2kuYyBiL2FyY2gvYXJtL3BsYXQtaW9wL3BjaS5jCmluZGV4IGNlMzFmMzEuLjQzZjJiMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtaW9wL3BjaS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtaW9wL3BjaS5jCkBAIC0zNTksNyArMzU5LDcgQEAKIAlEQkcoIkFUVTogSU9QM1hYX0FUVUNNRD0weCUwNHhcbiIsICpJT1AzWFhfQVRVQ01EKTsKIAlEQkcoIkFUVTogSU9QM1hYX0FUVUNSPTB4JTA4eFxuIiwgKklPUDNYWF9BVFVDUik7CiAKLQlob29rX2ZhdWx0X2NvZGUoMTYrNiwgaW9wM3h4X3BjaV9hYm9ydCwgU0lHQlVTLCAiaW1wcmVjaXNlIGV4dGVybmFsIGFib3J0Iik7CisJaG9va19mYXVsdF9jb2RlKDE2KzYsIGlvcDN4eF9wY2lfYWJvcnQsIFNJR0JVUywgMCwgImltcHJlY2lzZSBleHRlcm5hbCBhYm9ydCIpOwogfQogCiAvKiBmb3IgcGxhdGZvcm1zIHRoYXQgbWlnaHQgYmUgaG9zdC1idXMtYWRhcHRlcnMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtaW9wL3RpbWUuYyBiL2FyY2gvYXJtL3BsYXQtaW9wL3RpbWUuYwppbmRleCA2YzhhMDJhLi44NWQzZTU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LWlvcC90aW1lLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1pb3AvdGltZS5jCkBAIC0yOSw2ICsyOSwxMSBAQAogI2luY2x1ZGUgPG1hY2gvdGltZS5oPgogCiAvKgorICogTWluaW11bSBjbG9ja3NvdXJjZS9jbG9ja2V2ZW50IHRpbWVyIHJhbmdlIGluIHNlY29uZHMKKyAqLworI2RlZmluZSBJT1BfTUlOX1JBTkdFIDQKKworLyoKICAqIElPUCBjbG9ja3NvdXJjZSAoZnJlZS1ydW5uaW5nIHRpbWVyIDEpLgogICovCiBzdGF0aWMgY3ljbGVfdCBpb3BfY2xvY2tzb3VyY2VfcmVhZChzdHJ1Y3QgY2xvY2tzb3VyY2UgKnVudXNlZCkKQEAgLTQ0LDI3ICs0OSw2IEBACiAJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IGlvcF9jbG9ja3NvdXJjZV9zZXRfaHooc3RydWN0IGNsb2Nrc291cmNlICpjcywgdW5zaWduZWQgaW50IGh6KQotewotCXU2NCB0ZW1wOwotCXUzMiBzaGlmdDsKLQotCS8qIEZpbmQgc2hpZnQgYW5kIG11bHQgdmFsdWVzIGZvciBoei4gKi8KLQlzaGlmdCA9IDMyOwotCWRvIHsKLQkJdGVtcCA9ICh1NjQpIE5TRUNfUEVSX1NFQyA8PCBzaGlmdDsKLQkJZG9fZGl2KHRlbXAsIGh6KTsKLQkJaWYgKCh0ZW1wID4+IDMyKSA9PSAwKQotCQkJYnJlYWs7Ci0JfSB3aGlsZSAoLS1zaGlmdCAhPSAwKTsKLQotCWNzLT5zaGlmdCA9IHNoaWZ0OwotCWNzLT5tdWx0ID0gKHUzMikgdGVtcDsKLQotCXByaW50ayhLRVJOX0lORk8gImNsb2Nrc291cmNlOiAlcyB1c2VzIHNoaWZ0ICV1IG11bHQgJSN4XG4iLAotCSAgICAgICBjcy0+bmFtZSwgY3MtPnNoaWZ0LCBjcy0+bXVsdCk7Ci19Ci0KIC8qCiAgKiBJT1Agc2NoZWRfY2xvY2soKSBpbXBsZW1lbnRhdGlvbiB2aWEgaXRzIGNsb2Nrc291cmNlLgogICovCkBAIC0xMzAsMjcgKzExNCw2IEBACiAJLnNldF9tb2RlCT0gaW9wX3NldF9tb2RlLAogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IGlvcF9jbG9ja2V2ZW50X3NldF9oeihzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZSwgdW5zaWduZWQgaW50IGh6KQotewotCXU2NCB0ZW1wOwotCXUzMiBzaGlmdDsKLQotCS8qIEZpbmQgc2hpZnQgYW5kIG11bHQgdmFsdWVzIGZvciBoei4gKi8KLQlzaGlmdCA9IDMyOwotCWRvIHsKLQkJdGVtcCA9ICh1NjQpIGh6IDw8IHNoaWZ0OwotCQlkb19kaXYodGVtcCwgTlNFQ19QRVJfU0VDKTsKLQkJaWYgKCh0ZW1wID4+IDMyKSA9PSAwKQotCQkJYnJlYWs7Ci0JfSB3aGlsZSAoLS1zaGlmdCAhPSAwKTsKLQotCWNlLT5zaGlmdCA9IHNoaWZ0OwotCWNlLT5tdWx0ID0gKHUzMikgdGVtcDsKLQotCXByaW50ayhLRVJOX0lORk8gImNsb2NrZXZlbnQ6ICVzIHVzZXMgc2hpZnQgJXUgbXVsdCAlI2x4XG4iLAotCSAgICAgICBjZS0+bmFtZSwgY2UtPnNoaWZ0LCBjZS0+bXVsdCk7Ci19Ci0KIHN0YXRpYyBpcnFyZXR1cm5fdAogaW9wX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CkBAIC0xOTAsNyArMTUzLDggQEAKIAkgKi8KIAl3cml0ZV90bXIwKHRpbWVyX2N0bCAmIH5JT1BfVE1SX0VOKTsKIAlzZXR1cF9pcnEoSVJRX0lPUF9USU1FUjAsICZpb3BfdGltZXJfaXJxKTsKLQlpb3BfY2xvY2tldmVudF9zZXRfaHooJmlvcF9jbG9ja2V2ZW50LCB0aWNrX3JhdGUpOworCWNsb2NrZXZlbnRzX2NhbGNfbXVsdF9zaGlmdCgmaW9wX2Nsb2NrZXZlbnQsCisJCQkJICAgIHRpY2tfcmF0ZSwgSU9QX01JTl9SQU5HRSk7CiAJaW9wX2Nsb2NrZXZlbnQubWF4X2RlbHRhX25zID0KIAkJY2xvY2tldmVudF9kZWx0YTJucygweGZmZmZmZmZlLCAmaW9wX2Nsb2NrZXZlbnQpOwogCWlvcF9jbG9ja2V2ZW50Lm1pbl9kZWx0YV9ucyA9CkBAIC0yMDcsNiArMTcxLDcgQEAKIAl3cml0ZV90cnIxKDB4ZmZmZmZmZmYpOwogCXdyaXRlX3RjcjEoMHhmZmZmZmZmZik7CiAJd3JpdGVfdG1yMSh0aW1lcl9jdGwpOwotCWlvcF9jbG9ja3NvdXJjZV9zZXRfaHooJmlvcF9jbG9ja3NvdXJjZSwgdGlja19yYXRlKTsKKwljbG9ja3NvdXJjZV9jYWxjX211bHRfc2hpZnQoJmlvcF9jbG9ja3NvdXJjZSwgdGlja19yYXRlLAorCQkJCSAgICBJT1BfTUlOX1JBTkdFKTsKIAljbG9ja3NvdXJjZV9yZWdpc3RlcigmaW9wX2Nsb2Nrc291cmNlKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjLzNkc19kZWJ1Z2JvYXJkLmMgYi9hcmNoL2FybS9wbGF0LW14Yy8zZHNfZGVidWdib2FyZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzOWM1NGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy8zZHNfZGVidWdib2FyZC5jCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEphc29uIFdhbmcgPGphc29uNzcud2FuZ0BnbWFpbC5jb20+CisgKgorICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKgorICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCisgKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworLyogTEFOOTIxNyBldGhlcm5ldCBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgTEFOOTIxN19CQVNFX0FERFIobikJKG4gKyAweDApCisvKiBFeHRlcm5hbCBVQVJUICovCisjZGVmaW5lIFVBUlRBX0JBU0VfQUREUihuKQkobiArIDB4ODAwMCkKKyNkZWZpbmUgVUFSVEJfQkFTRV9BRERSKG4pCShuICsgMHgxMDAwMCkKKworI2RlZmluZSBCT0FSRF9JT19BRERSKG4pCShuICsgMHgyMDAwMCkKKy8qIExFRCBzd2l0Y2hzICovCisjZGVmaW5lIExFRF9TV0lUQ0hfUkVHCQkweDAwCisvKiBidXR0b25zICovCisjZGVmaW5lIFNXSVRDSF9CVVRUT05TX1JFRwkweDA4CisvKiBzdGF0dXMsIGludGVycnVwdCAqLworI2RlZmluZSBJTlRSX1NUQVRVU19SRUcJMHgxMAorI2RlZmluZSBJTlRSX01BU0tfUkVHCQkweDM4CisjZGVmaW5lIElOVFJfUkVTRVRfUkVHCQkweDIwCisvKiBtYWdpYyB3b3JkIGZvciBkZWJ1ZyBDUExEICovCisjZGVmaW5lIE1BR0lDX05VTUJFUjFfUkVHCTB4NDAKKyNkZWZpbmUgTUFHSUNfTlVNQkVSMl9SRUcJMHg0OAorLyogQ1BMRCBjb2RlIHZlcnNpb24gKi8KKyNkZWZpbmUgQ1BMRF9DT0RFX1ZFUl9SRUcJMHg1MAorLyogbWFnaWMgd29yZCBmb3IgZGVidWcgQ1BMRCAqLworI2RlZmluZSBNQUdJQ19OVU1CRVIzX1JFRwkweDU4CisvKiBtb2R1bGUgcmVzZXQgcmVnaXN0ZXIqLworI2RlZmluZSBNT0RVTEVfUkVTRVRfUkVHCTB4NjAKKy8qIENQVSBJRCBhbmQgUGVyc29uYWxpdHkgSUQgKi8KKyNkZWZpbmUgTUNVX0JPQVJEX0lEX1JFRwkweDY4CisKKyNkZWZpbmUgTVhDX0lSUV9UT19FWFBJTyhpcnEpICAgKChpcnEpIC0gTVhDX0JPQVJEX0lSUV9TVEFSVCkKKyNkZWZpbmUgTVhDX0lSUV9UT19HUElPKGlycSkJKChpcnEpIC0gTVhDX0lOVEVSTkFMX0lSUVMpCisKKyNkZWZpbmUgTVhDX0VYUF9JT19CQVNFCQkoTVhDX0JPQVJEX0lSUV9TVEFSVCkKKyNkZWZpbmUgTVhDX01BWF9FWFBfSU9fTElORVMJMTYKKworLyogaW50ZXJydXB0cyBsaWtlIGV4dGVybmFsIHVhcnQgLCBleHRlcm5hbCBldGhlcm5ldCBldGMqLworI2RlZmluZSBFWFBJT19JTlRfRU5FVAkJKE1YQ19CT0FSRF9JUlFfU1RBUlQgKyAwKQorI2RlZmluZSBFWFBJT19JTlRfWFVBUlRfQQkoTVhDX0JPQVJEX0lSUV9TVEFSVCArIDEpCisjZGVmaW5lIEVYUElPX0lOVF9YVUFSVF9CCShNWENfQk9BUkRfSVJRX1NUQVJUICsgMikKKyNkZWZpbmUgRVhQSU9fSU5UX0JVVFRPTl9BCShNWENfQk9BUkRfSVJRX1NUQVJUICsgMykKKyNkZWZpbmUgRVhQSU9fSU5UX0JVVFRPTl9CCShNWENfQk9BUkRfSVJRX1NUQVJUICsgNCkKKworc3RhdGljIHZvaWQgX19pb21lbSAqYnJkX2lvOworc3RhdGljIHZvaWQgZXhwaW9fYWNrX2lycSh1MzIgaXJxKTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbXNjOTExeF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0gLCB7CisJCS5zdGFydCA9IEVYUElPX0lOVF9FTkVULAorCQkuZW5kID0gRVhQSU9fSU5UX0VORVQsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNtc2M5MTF4X3BsYXRmb3JtX2NvbmZpZyBzbXNjOTExeF9jb25maWcgPSB7CisJLmlycV9wb2xhcml0eSA9IFNNU0M5MTFYX0lSUV9QT0xBUklUWV9BQ1RJVkVfTE9XLAorCS5mbGFncyA9IFNNU0M5MTFYX1VTRV8zMkJJVCB8IFNNU0M5MTFYX0ZPUkNFX0lOVEVSTkFMX1BIWSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtc2NfbGFuOTIxN19kZXZpY2UgPSB7CisJLm5hbWUgPSAic21zYzkxMXgiLAorCS5pZCA9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc21zYzkxMXhfY29uZmlnLAorCX0sCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHNtc2M5MTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlID0gc21zYzkxMXhfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHZvaWQgbXhjX2V4cGlvX2lycV9oYW5kbGVyKHUzMiBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwl1MzIgaW1yX3ZhbDsKKwl1MzIgaW50X3ZhbGlkOworCXUzMiBleHBpb19pcnE7CisKKwlkZXNjLT5jaGlwLT5tYXNrKGlycSk7CS8qIGlycSA9IGdwaW8gaXJxIG51bWJlciAqLworCisJaW1yX3ZhbCA9IF9fcmF3X3JlYWR3KGJyZF9pbyArIElOVFJfTUFTS19SRUcpOworCWludF92YWxpZCA9IF9fcmF3X3JlYWR3KGJyZF9pbyArIElOVFJfU1RBVFVTX1JFRykgJiB+aW1yX3ZhbDsKKworCWV4cGlvX2lycSA9IE1YQ19CT0FSRF9JUlFfU1RBUlQ7CisJZm9yICg7IGludF92YWxpZCAhPSAwOyBpbnRfdmFsaWQgPj49IDEsIGV4cGlvX2lycSsrKSB7CisJCXN0cnVjdCBpcnFfZGVzYyAqZDsKKwkJaWYgKChpbnRfdmFsaWQgJiAxKSA9PSAwKQorCQkJY29udGludWU7CisJCWQgPSBpcnFfZGVzYyArIGV4cGlvX2lycTsKKwkJaWYgKHVubGlrZWx5KCEoZC0+aGFuZGxlX2lycSkpKQorCQkJcHJfZXJyKCJcbkVYUElPIGlycTogJWQgdW5oYW5kbGVkXG4iLCBleHBpb19pcnEpOworCQllbHNlCisJCQlkLT5oYW5kbGVfaXJxKGV4cGlvX2lycSwgZCk7CisJfQorCisJZGVzYy0+Y2hpcC0+YWNrKGlycSk7CisJZGVzYy0+Y2hpcC0+dW5tYXNrKGlycSk7Cit9CisKKy8qCisgKiBEaXNhYmxlIGFuIGV4cGlvIHBpbidzIGludGVycnVwdCBieSBzZXR0aW5nIHRoZSBiaXQgaW4gdGhlIGltci4KKyAqIElycSBpcyBhbiBleHBpbyB2aXJ0dWFsIGlycSBudW1iZXIKKyAqLworc3RhdGljIHZvaWQgZXhwaW9fbWFza19pcnEodTMyIGlycSkKK3sKKwl1MTYgcmVnOworCXUzMiBleHBpbyA9IE1YQ19JUlFfVE9fRVhQSU8oaXJxKTsKKworCXJlZyA9IF9fcmF3X3JlYWR3KGJyZF9pbyArIElOVFJfTUFTS19SRUcpOworCXJlZyB8PSAoMSA8PCBleHBpbyk7CisJX19yYXdfd3JpdGV3KHJlZywgYnJkX2lvICsgSU5UUl9NQVNLX1JFRyk7Cit9CisKK3N0YXRpYyB2b2lkIGV4cGlvX2Fja19pcnEodTMyIGlycSkKK3sKKwl1MzIgZXhwaW8gPSBNWENfSVJRX1RPX0VYUElPKGlycSk7CisKKwlfX3Jhd193cml0ZXcoMSA8PCBleHBpbywgYnJkX2lvICsgSU5UUl9SRVNFVF9SRUcpOworCV9fcmF3X3dyaXRldygwLCBicmRfaW8gKyBJTlRSX1JFU0VUX1JFRyk7CisJZXhwaW9fbWFza19pcnEoaXJxKTsKK30KKworc3RhdGljIHZvaWQgZXhwaW9fdW5tYXNrX2lycSh1MzIgaXJxKQoreworCXUxNiByZWc7CisJdTMyIGV4cGlvID0gTVhDX0lSUV9UT19FWFBJTyhpcnEpOworCisJcmVnID0gX19yYXdfcmVhZHcoYnJkX2lvICsgSU5UUl9NQVNLX1JFRyk7CisJcmVnICY9IH4oMSA8PCBleHBpbyk7CisJX19yYXdfd3JpdGV3KHJlZywgYnJkX2lvICsgSU5UUl9NQVNLX1JFRyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZXhwaW9faXJxX2NoaXAgPSB7CisJLmFjayA9IGV4cGlvX2Fja19pcnEsCisJLm1hc2sgPSBleHBpb19tYXNrX2lycSwKKwkudW5tYXNrID0gZXhwaW9fdW5tYXNrX2lycSwKK307CisKK2ludCBfX2luaXQgbXhjX2V4cGlvX2luaXQodTMyIGJhc2UsIHUzMiBwX2lycSkKK3sKKwlpbnQgaTsKKworCWJyZF9pbyA9IGlvcmVtYXAoQk9BUkRfSU9fQUREUihiYXNlKSwgU1pfNEspOworCWlmIChicmRfaW8gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoKF9fcmF3X3JlYWR3KGJyZF9pbyArIE1BR0lDX05VTUJFUjFfUkVHKSAhPSAweEFBQUEpIHx8CisJICAgIChfX3Jhd19yZWFkdyhicmRfaW8gKyBNQUdJQ19OVU1CRVIyX1JFRykgIT0gMHg1NTU1KSB8fAorCSAgICAoX19yYXdfcmVhZHcoYnJkX2lvICsgTUFHSUNfTlVNQkVSM19SRUcpICE9IDB4Q0FGRSkpIHsKKwkJcHJfaW5mbygiMy1TdGFjayBEZWJ1ZyBib2FyZCBub3QgZGV0ZWN0ZWRcbiIpOworCQlpb3VubWFwKGJyZF9pbyk7CisJCWJyZF9pbyA9IE5VTEw7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXByX2luZm8oIjMtU3RhY2sgRGVidWcgYm9hcmQgZGV0ZWN0ZWQsIHJldiA9IDB4JTA0WFxuIiwKKwkJcmVhZHcoYnJkX2lvICsgQ1BMRF9DT0RFX1ZFUl9SRUcpKTsKKworCS8qCisJICogQ29uZmlndXJlIElOVCBsaW5lIGFzIEdQSU8gaW5wdXQKKwkgKi8KKwlncGlvX3JlcXVlc3QoTVhDX0lSUV9UT19HUElPKHBfaXJxKSwgImV4cGlvX3BpcnEiKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChNWENfSVJRX1RPX0dQSU8ocF9pcnEpKTsKKworCS8qIGRpc2FibGUgdGhlIGludGVycnVwdCBhbmQgY2xlYXIgdGhlIHN0YXR1cyAqLworCV9fcmF3X3dyaXRldygwLCBicmRfaW8gKyBJTlRSX01BU0tfUkVHKTsKKwlfX3Jhd193cml0ZXcoMHhGRkZGLCBicmRfaW8gKyBJTlRSX1JFU0VUX1JFRyk7CisJX19yYXdfd3JpdGV3KDAsIGJyZF9pbyArIElOVFJfUkVTRVRfUkVHKTsKKwlfX3Jhd193cml0ZXcoMHgxRiwgYnJkX2lvICsgSU5UUl9NQVNLX1JFRyk7CisJZm9yIChpID0gTVhDX0VYUF9JT19CQVNFOworCSAgICAgaSA8IChNWENfRVhQX0lPX0JBU0UgKyBNWENfTUFYX0VYUF9JT19MSU5FUyk7IGkrKykgeworCQlzZXRfaXJxX2NoaXAoaSwgJmV4cGlvX2lycV9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGksIGhhbmRsZV9sZXZlbF9pcnEpOworCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQpOworCX0KKwlzZXRfaXJxX3R5cGUocF9pcnEsIElSUUZfVFJJR0dFUl9MT1cpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKHBfaXJxLCBteGNfZXhwaW9faXJxX2hhbmRsZXIpOworCisJLyogUmVnaXN0ZXIgTGFuIGRldmljZSBvbiB0aGUgZGVidWdib2FyZCAqLworCXNtc2M5MTF4X3Jlc291cmNlc1swXS5zdGFydCA9IExBTjkyMTdfQkFTRV9BRERSKGJhc2UpOworCXNtc2M5MTF4X3Jlc291cmNlc1swXS5lbmQgPSBMQU45MjE3X0JBU0VfQUREUihiYXNlKSArIDB4MTAwIC0gMTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNtc2NfbGFuOTIxN19kZXZpY2UpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1teGMvS2NvbmZpZwppbmRleCA3ZjdhZDZmLi4wNTI3ZTY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9LY29uZmlnCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL0tjb25maWcKQEAgLTEsNSArMSw3IEBACiBpZiBBUkNIX01YQwogCitzb3VyY2UgImFyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvS2NvbmZpZyIKKwogbWVudSAiRnJlZXNjYWxlIE1YQyBJbXBsZW1lbnRhdGlvbnMiCiAKIGNob2ljZQpAQCAtOCwxNSArMTAsMTIgQEAKIAogY29uZmlnIEFSQ0hfTVgxCiAJYm9vbCAiTVgxLWJhc2VkIgotCXNlbGVjdCBDUFVfQVJNOTIwVAotCXNlbGVjdCBJTVhfSEFWRV9JT01VWF9WMQorCXNlbGVjdCBTT0NfSU1YMQogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIGJhc2VkIG9uIHRoZSBGcmVlc2NhbGUgaS5NWDEgZmFtaWx5CiAKIGNvbmZpZyBBUkNIX01YMgogCWJvb2wgIk1YMi1iYXNlZCIKLQlzZWxlY3QgQ1BVX0FSTTkyNlQKLQlzZWxlY3QgSU1YX0hBVkVfSU9NVVhfVjEKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyBiYXNlZCBvbiB0aGUgRnJlZXNjYWxlIGkuTVgyIGZhbWlseQogCkBAIC0yNSw2ICsyNCw3IEBACiAJc2VsZWN0IENQVV9BUk05MjZUCiAJc2VsZWN0IEFSQ0hfTVhDX0lPTVVYX1YzCiAJc2VsZWN0IEhBVkVfRkJfSU1YCisJc2VsZWN0IEFSQ0hfTVhDX0FVRE1VWF9WMgogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIGJhc2VkIG9uIHRoZSBGcmVlc2NhbGUgaS5NWDI1IGZhbWlseQogCkBAIC00OCw4ICs0OCw3IEBACiAKIGVuZGNob2ljZQogCi1zb3VyY2UgImFyY2gvYXJtL21hY2gtbXgxL0tjb25maWciCi1zb3VyY2UgImFyY2gvYXJtL21hY2gtbXgyL0tjb25maWciCitzb3VyY2UgImFyY2gvYXJtL21hY2gtaW14L0tjb25maWciCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtbXgzL0tjb25maWciCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtbXgyNS9LY29uZmlnIgogc291cmNlICJhcmNoL2FybS9tYWNoLW14YzkxMjMxL0tjb25maWciCkBAIC04MSw2ICs4MCwxNyBAQAogCWhlbHAKIAkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgaS5NWCBQV00gY29udHJvbGxlcihzKS4KIAorY29uZmlnIE1YQ19ERUJVR19CT0FSRAorCWJvb2wgIkVuYWJsZSBNWEMgZGVidWcgYm9hcmQoZm9yIDMtc3RhY2spIgorCWhlbHAKKwkgIFRoZSBkZWJ1ZyBib2FyZCBpcyBhbiBpbnRlZ3JhbCBwYXJ0IG9mIHRoZSBNWEMgMy1zdGFjayhQREspCisJICBwbGF0Zm9ybXMsIGl0IGNhbiBiZSBhdHRhY2hlZCBvciByZW1vdmVkIGZyb20gdGhlIHBlcmlwaGVyYWwKKwkgIGJvYXJkLiBPbiBkZWJ1ZyBib2FyZCwgc2V2ZXJhbCBkZWJ1ZyBkZXZpY2VzKGV0aGVybmV0LCBVQVJULAorCSAgYnV0dG9ucywgTEVEcyBhbmQgSlRBRykgYXJlIGltcGxlbWVudGVkLiBCZXR3ZWVuIHRoZSBNQ1UgYW5kCisJICB0aGVzZSBkZXZpY2VzLCBhIENQTEQgaXMgYWRkZWQgYXMgYSBicmlkZ2Ugd2hpY2ggcGVyZm9ybXMKKwkgIGRhdGEvYWRkcmVzcyBkZS1tdWx0aXBsZXhpbmcgYW5kIGRlY29kZSwgc2lnbmFsIGxldmVsIHNoaWZ0LAorCSAgaW50ZXJydXB0IGNvbnRyb2wgYW5kIHZhcmlvdXMgYm9hcmQgZnVuY3Rpb25zLgorCiBjb25maWcgTVhDX1VMUEkKIAlib29sCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL01ha2VmaWxlIGIvYXJjaC9hcm0vcGxhdC1teGMvTWFrZWZpbGUKaW5kZXggODk1YmMzYy4uNzhkNDA1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvTWFrZWZpbGUKQEAgLTgsOCArOCw2IEBACiAjIE1YNTEgdXNlcyB0aGUgVFpJQyBpbnRlcnJ1cHQgY29udHJvbGxlciwgb2xkZXIgcGxhdGZvcm1zIHVzZSBBVklDIChpcnEubykKIG9iai0kKENPTkZJR19NWENfVFpJQykgKz0gdHppYy5vCiAKLW9iai0kKENPTkZJR19BUkNIX01YMSkgKz0gZG1hLW14MS1teDIubwotb2JqLSQoQ09ORklHX0FSQ0hfTVgyKSArPSBkbWEtbXgxLW14Mi5vCiBvYmotJChDT05GSUdfSU1YX0hBVkVfSU9NVVhfVjEpICs9IGlvbXV4LXYxLm8KIG9iai0kKENPTkZJR19BUkNIX01YQ19JT01VWF9WMykgKz0gaW9tdXgtdjMubwogb2JqLSQoQ09ORklHX01YQ19QV00pICArPSBwd20ubwpAQCAtMTcsNyArMTUsMTAgQEAKIG9iai0kKENPTkZJR19NWENfVUxQSSkgKz0gdWxwaS5vCiBvYmotJChDT05GSUdfQVJDSF9NWENfQVVETVVYX1YxKSArPSBhdWRtdXgtdjEubwogb2JqLSQoQ09ORklHX0FSQ0hfTVhDX0FVRE1VWF9WMikgKz0gYXVkbXV4LXYyLm8KK29iai0kKENPTkZJR19NWENfREVCVUdfQk9BUkQpICs9IDNkc19kZWJ1Z2JvYXJkLm8KIGlmZGVmIENPTkZJR19TTkRfSU1YX1NPQwogb2JqLXkgKz0gc3NpLWZpcS5vCiBvYmoteSArPSBzc2ktZmlxLWtzeW0ubwogZW5kaWYKKworb2JqLXkgKz0gZGV2aWNlcy8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2F1ZG11eC12MS5jIGIvYXJjaC9hcm0vcGxhdC1teGMvYXVkbXV4LXYxLmMKaW5kZXggYjYyOTE3Yy4uMTE4MGJlZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvYXVkbXV4LXYxLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvYXVkbXV4LXYxLmMKQEAgLTEzLDEwICsxMyw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2F1ZG11eC12Mi5jIGIvYXJjaC9hcm0vcGxhdC1teGMvYXVkbXV4LXYyLmMKaW5kZXggMGMyY2M1Yy4uZjllN2NkYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvYXVkbXV4LXYyLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvYXVkbXV4LXYyLmMKQEAgLTEzLDEwICsxMyw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTE5MSw2ICsxODcsNyBAQAogewogCWludCByZXQ7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX01YMykKIAlpZiAoY3B1X2lzX214MzEoKSkKIAkJYXVkbXV4X2Jhc2UgPSBNWDMxX0lPX0FERFJFU1MoTVgzMV9BVURNVVhfQkFTRV9BRERSKTsKIApAQCAtMjA0LDcgKzIwMSwxOSBAQAogCQl9CiAJCWF1ZG11eF9iYXNlID0gTVgzNV9JT19BRERSRVNTKE1YMzVfQVVETVVYX0JBU0VfQUREUik7CiAJfQotCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX01YMjUpCisJaWYgKGNwdV9pc19teDI1KCkpIHsKKwkJYXVkbXV4X2NsayA9IGNsa19nZXQoTlVMTCwgImF1ZG11eCIpOworCQlpZiAoSVNfRVJSKGF1ZG11eF9jbGspKSB7CisJCQlyZXQgPSBQVFJfRVJSKGF1ZG11eF9jbGspOworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGdldCBjbG9jazogJWRcbiIsIF9fZnVuY19fLAorCQkJCQlyZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlhdWRtdXhfYmFzZSA9IE1YMjVfSU9fQUREUkVTUyhNWDI1X0FVRE1VWF9CQVNFX0FERFIpOworCX0KKyNlbmRpZgogCWF1ZG11eF9kZWJ1Z2ZzX2luaXQoKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2Nsb2NrLmMKaW5kZXggMzIzZmY4Yy4uMmVkM2FiMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9jbG9jay5jCkBAIC01MiwxMyArNTIsMTQgQEAKIHsKIAlpZiAoY2xrID09IE5VTEwgfHwgSVNfRVJSKGNsaykpCiAJCXJldHVybjsKLQotCV9fY2xrX2Rpc2FibGUoY2xrLT5wYXJlbnQpOwotCV9fY2xrX2Rpc2FibGUoY2xrLT5zZWNvbmRhcnkpOwotCiAJV0FSTl9PTighY2xrLT51c2Vjb3VudCk7Ci0JaWYgKCEoLS1jbGstPnVzZWNvdW50KSAmJiBjbGstPmRpc2FibGUpCi0JCWNsay0+ZGlzYWJsZShjbGspOworCisJaWYgKCEoLS1jbGstPnVzZWNvdW50KSkgeworCQlpZiAoY2xrLT5kaXNhYmxlKQorCQkJY2xrLT5kaXNhYmxlKGNsayk7CisJCV9fY2xrX2Rpc2FibGUoY2xrLT5wYXJlbnQpOworCQlfX2Nsa19kaXNhYmxlKGNsay0+c2Vjb25kYXJ5KTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgX19jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKQEAgLTY2LDEyICs2NywxMyBAQAogCWlmIChjbGsgPT0gTlVMTCB8fCBJU19FUlIoY2xrKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlfX2Nsa19lbmFibGUoY2xrLT5wYXJlbnQpOwotCV9fY2xrX2VuYWJsZShjbGstPnNlY29uZGFyeSk7CisJaWYgKGNsay0+dXNlY291bnQrKyA9PSAwKSB7CisJCV9fY2xrX2VuYWJsZShjbGstPnBhcmVudCk7CisJCV9fY2xrX2VuYWJsZShjbGstPnNlY29uZGFyeSk7CiAKLQlpZiAoY2xrLT51c2Vjb3VudCsrID09IDAgJiYgY2xrLT5lbmFibGUpCi0JCWNsay0+ZW5hYmxlKGNsayk7Ci0KKwkJaWYgKGNsay0+ZW5hYmxlKQorCQkJY2xrLT5lbmFibGUoY2xrKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2MCwxNyArMTYyLDI4IEBACiBpbnQgY2xrX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCiB7CiAJaW50IHJldCA9IC1FSU5WQUw7CisJc3RydWN0IGNsayAqb2xkOwogCiAJaWYgKGNsayA9PSBOVUxMIHx8IElTX0VSUihjbGspIHx8IHBhcmVudCA9PSBOVUxMIHx8CiAJICAgIElTX0VSUihwYXJlbnQpIHx8IGNsay0+c2V0X3BhcmVudCA9PSBOVUxMKQogCQlyZXR1cm4gcmV0OwogCisJaWYgKGNsay0+dXNlY291bnQpCisJCWNsa19lbmFibGUocGFyZW50KTsKKwogCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7CiAJcmV0ID0gY2xrLT5zZXRfcGFyZW50KGNsaywgcGFyZW50KTsKLQlpZiAocmV0ID09IDApCisJaWYgKHJldCA9PSAwKSB7CisJCW9sZCA9IGNsay0+cGFyZW50OwogCQljbGstPnBhcmVudCA9IHBhcmVudDsKKwl9IGVsc2UgeworCQlvbGQgPSBwYXJlbnQ7CisJfQogCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKIAorCWlmIChjbGstPnVzZWNvdW50KQorCQljbGtfZGlzYWJsZShvbGQpOworCiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woY2xrX3NldF9wYXJlbnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy5jIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy5jCmluZGV4IDU2ZjJmYjUuLjczNTc3NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMuYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzLmMKQEAgLTE4LDYgKzE4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogCkBAIC0zNSwzICszNiwzNSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBpbXhfYWRkX3BsYXRmb3JtX2RldmljZShjb25zdCBjaGFyICpuYW1lLCBpbnQgaWQsCisJCWNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBpbnQgbnVtX3Jlc291cmNlcywKKwkJY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemVfZGF0YSkKK3sKKwlpbnQgcmV0ID0gLUVOT01FTTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhuYW1lLCBpZCk7CisJaWYgKCFwZGV2KQorCQlnb3RvIGVycjsKKworCWlmIChyZXMpIHsKKwkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldiwgcmVzLCBudW1fcmVzb3VyY2VzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCX0KKworCWlmIChkYXRhKSB7CisJCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCBkYXRhLCBzaXplX2RhdGEpOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisJfQorCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKKwlpZiAocmV0KSB7CitlcnI6CisJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJcmV0dXJuIHBkZXY7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL0tjb25maWcgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFiNzg0YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvS2NvbmZpZwpAQCAtMCwwICsxLDE1IEBACitjb25maWcgSU1YX0hBVkVfUExBVEZPUk1fRkxFWENBTgorCXNlbGVjdCBIQVZFX0NBTl9GTEVYQ0FOCisJYm9vbAorCitjb25maWcgSU1YX0hBVkVfUExBVEZPUk1fSU1YX0kyQworCWJvb2wKKworY29uZmlnIElNWF9IQVZFX1BMQVRGT1JNX0lNWF9VQVJUCisJYm9vbAorCitjb25maWcgSU1YX0hBVkVfUExBVEZPUk1fTVhDX05BTkQKKwlib29sCisKK2NvbmZpZyBJTVhfSEFWRV9QTEFURk9STV9TUElfSU1YCisJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ3ZGE1MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvTWFrZWZpbGUKQEAgLTAsMCArMSw4IEBACitpZmRlZiBDT05GSUdfQ0FOX0ZMRVhDQU4KKyMgdGhlIGlmZGVmIGNhbiBiZSByZW1vdmVkIG9uY2UgdGhlIGZsZXhjYW4gZHJpdmVyIGhhcyBiZWVuIG1lcmdlZAorb2JqLSQoQ09ORklHX0lNWF9IQVZFX1BMQVRGT1JNX0ZMRVhDQU4pICs9ICBwbGF0Zm9ybS1mbGV4Y2FuLm8KK2VuZGlmCitvYmotJChDT05GSUdfSU1YX0hBVkVfUExBVEZPUk1fSU1YX0kyQykgKz0gcGxhdGZvcm0taW14LWkyYy5vCitvYmotJChDT05GSUdfSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQpICs9IHBsYXRmb3JtLWlteC11YXJ0Lm8KK29iai0kKENPTkZJR19JTVhfSEFWRV9QTEFURk9STV9NWENfTkFORCkgKz0gcGxhdGZvcm0tbXhjX25hbmQubworb2JqLSQoQ09ORklHX0lNWF9IQVZFX1BMQVRGT1JNX1NQSV9JTVgpICs9ICBwbGF0Zm9ybS1zcGlfaW14Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0tZmxleGNhbi5jIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1mbGV4Y2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU5N2EwMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0tZmxleGNhbi5jCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGVuZ3V0cm9uaXgsIE1hcmMgS2xlaW5lLUJ1ZGRlIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bWFjaC9kZXZpY2VzLWNvbW1vbi5oPgorCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXQgaW14X2FkZF9mbGV4Y2FuKGludCBpZCwKKwkJcmVzb3VyY2Vfc2l6ZV90IGlvYmFzZSwgcmVzb3VyY2Vfc2l6ZV90IGlvc2l6ZSwKKwkJcmVzb3VyY2Vfc2l6ZV90IGlycSwKKwkJY29uc3Qgc3RydWN0IGZsZXhjYW5fcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJc3RydWN0IHJlc291cmNlIHJlc1tdID0geworCQl7CisJCQkuc3RhcnQgPSBpb2Jhc2UsCisJCQkuZW5kID0gaW9iYXNlICsgaW9zaXplIC0gMSwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQl9LCB7CisJCQkuc3RhcnQgPSBpcnEsCisJCQkuZW5kID0gaXJxLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCX0sCisJfTsKKworCXJldHVybiBpbXhfYWRkX3BsYXRmb3JtX2RldmljZSgiZmxleGNhbiIsIGlkLCByZXMsIEFSUkFZX1NJWkUocmVzKSwKKwkJCXBkYXRhLCBzaXplb2YoKnBkYXRhKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWlteC1pMmMuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0taW14LWkyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYWY5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWlteC1pMmMuYwpAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUGVuZ3V0cm9uaXgKKyAqIFV3ZSBLbGVpbmUtS29lbmlnIDx1LmtsZWluZS1rb2VuaWdAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy1jb21tb24uaD4KKworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0IGlteF9hZGRfaW14X2kyYyhpbnQgaWQsCisJCXJlc291cmNlX3NpemVfdCBpb2Jhc2UsIHJlc291cmNlX3NpemVfdCBpb3NpemUsIGludCBpcnEsCisJCWNvbnN0IHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJc3RydWN0IHJlc291cmNlIHJlc1tdID0geworCQl7CisJCQkuc3RhcnQgPSBpb2Jhc2UsCisJCQkuZW5kID0gaW9iYXNlICsgaW9zaXplIC0gMSwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQl9LCB7CisJCQkuc3RhcnQgPSBpcnEsCisJCQkuZW5kID0gaXJxLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCX0sCisJfTsKKworCXJldHVybiBpbXhfYWRkX3BsYXRmb3JtX2RldmljZSgiaW14LWkyYyIsIGlkLCByZXMsIEFSUkFZX1NJWkUocmVzKSwKKwkJCXBkYXRhLCBzaXplb2YoKnBkYXRhKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWlteC11YXJ0LmMgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWlteC11YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEzZGZmMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0taW14LXVhcnQuYwpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUGVuZ3V0cm9uaXgKKyAqIFV3ZSBLbGVpbmUtS29lbmlnIDx1LmtsZWluZS1rb2VuaWdAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy1jb21tb24uaD4KKworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0IGlteF9hZGRfaW14X3VhcnRfM2lycShpbnQgaWQsCisJCXJlc291cmNlX3NpemVfdCBpb2Jhc2UsIHJlc291cmNlX3NpemVfdCBpb3NpemUsCisJCXJlc291cmNlX3NpemVfdCBpcnFyeCwgcmVzb3VyY2Vfc2l6ZV90IGlycXR4LAorCQlyZXNvdXJjZV9zaXplX3QgaXJxcnRzLAorCQljb25zdCBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzW10gPSB7CisJCXsKKwkJCS5zdGFydCA9IGlvYmFzZSwKKwkJCS5lbmQgPSBpb2Jhc2UgKyBpb3NpemUgLSAxLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCX0sIHsKKwkJCS5zdGFydCA9IGlycXJ4LAorCQkJLmVuZCA9IGlycXJ4LAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCX0sIHsKKwkJCS5zdGFydCA9IGlycXR4LAorCQkJLmVuZCA9IGlycXR4LAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCX0sIHsKKwkJCS5zdGFydCA9IGlycXJ0cywKKwkJCS5lbmQgPSBpcnFyeCwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQl9LAorCX07CisKKwlyZXR1cm4gaW14X2FkZF9wbGF0Zm9ybV9kZXZpY2UoImlteC11YXJ0IiwgaWQsIHJlcywgQVJSQVlfU0laRShyZXMpLAorCQkJcGRhdGEsIHNpemVvZigqcGRhdGEpKTsKK30KKworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0IGlteF9hZGRfaW14X3VhcnRfMWlycShpbnQgaWQsCisJCXJlc291cmNlX3NpemVfdCBpb2Jhc2UsIHJlc291cmNlX3NpemVfdCBpb3NpemUsCisJCXJlc291cmNlX3NpemVfdCBpcnEsCisJCWNvbnN0IHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCXN0cnVjdCByZXNvdXJjZSByZXNbXSA9IHsKKwkJeworCQkJLnN0YXJ0ID0gaW9iYXNlLAorCQkJLmVuZCA9IGlvYmFzZSArIGlvc2l6ZSAtIDEsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJfSwgeworCQkJLnN0YXJ0ID0gaXJxLAorCQkJLmVuZCA9IGlycSwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQl9LAorCX07CisKKwlyZXR1cm4gaW14X2FkZF9wbGF0Zm9ybV9kZXZpY2UoImlteC11YXJ0IiwgaWQsIHJlcywgQVJSQVlfU0laRShyZXMpLAorCQkJcGRhdGEsIHNpemVvZigqcGRhdGEpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0tbXhjX25hbmQuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0tbXhjX25hbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzI4NjQxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1teGNfbmFuZC5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQZW5ndXRyb25peAorICogVXdlIEtsZWluZS1Lb2VuaWcgPHUua2xlaW5lLWtvZW5pZ0BwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8bWFjaC9kZXZpY2VzLWNvbW1vbi5oPgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0IGlteF9hZGRfbXhjX25hbmQocmVzb3VyY2Vfc2l6ZV90IGlvYmFzZSwKKwkJaW50IGlycSwgY29uc3Qgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgKnBkYXRhLAorCQlyZXNvdXJjZV9zaXplX3QgaW9zaXplKQoreworCXN0YXRpYyBpbnQgaWQgPSAwOworCQorCXN0cnVjdCByZXNvdXJjZSByZXNbXSA9IHsKKwkJeworCQkJLnN0YXJ0ID0gaW9iYXNlLAorCQkJLmVuZCA9IGlvYmFzZSArIGlvc2l6ZSAtIDEsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJfSwgeworCQkJLnN0YXJ0ID0gaXJxLAorCQkJLmVuZCA9IGlycSwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQl9LAorCX07CisKKwlyZXR1cm4gaW14X2FkZF9wbGF0Zm9ybV9kZXZpY2UoIm14Y19uYW5kIiwgaWQrKywgcmVzLCBBUlJBWV9TSVpFKHJlcyksCisJCQlwZGF0YSwgc2l6ZW9mKCpwZGF0YSkpOworfQorCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXQgaW14X2FkZF9teGNfbmFuZF92MShyZXNvdXJjZV9zaXplX3QgaW9iYXNlLAorCQlpbnQgaXJxLCBjb25zdCBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJcmV0dXJuIGlteF9hZGRfbXhjX25hbmQoaW9iYXNlLCBpcnEsIHBkYXRhLCBTWl80Syk7Cit9CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBpbXhfYWRkX214Y19uYW5kX3YyMShyZXNvdXJjZV9zaXplX3QgaW9iYXNlLAorCQlpbnQgaXJxLCBjb25zdCBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJcmV0dXJuIGlteF9hZGRfbXhjX25hbmQoaW9iYXNlLCBpcnEsIHBkYXRhLCBTWl84Syk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLXNwaV9pbXguYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0tc3BpX2lteC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MzFhNmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLXNwaV9pbXguYwpAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUGVuZ3V0cm9uaXgKKyAqIFV3ZSBLbGVpbmUtS29lbmlnIDx1LmtsZWluZS1rb2VuaWdAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy1jb21tb24uaD4KKworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0IGlteF9hZGRfc3BpX2lteChpbnQgaWQsCisJCXJlc291cmNlX3NpemVfdCBpb2Jhc2UsIHJlc291cmNlX3NpemVfdCBpb3NpemUsIGludCBpcnEsCisJCWNvbnN0IHN0cnVjdCBzcGlfaW14X21hc3RlciAqcGRhdGEpCit7CisJc3RydWN0IHJlc291cmNlIHJlc1tdID0geworCQl7CisJCQkuc3RhcnQgPSBpb2Jhc2UsCisJCQkuZW5kID0gaW9iYXNlICsgaW9zaXplIC0gMSwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQl9LCB7CisJCQkuc3RhcnQgPSBpcnEsCisJCQkuZW5kID0gaXJxLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCX0sCisJfTsKKworCXJldHVybiBpbXhfYWRkX3BsYXRmb3JtX2RldmljZSgic3BpX2lteCIsIGlkLCByZXMsIEFSUkFZX1NJWkUocmVzKSwKKwkJCXBkYXRhLCBzaXplb2YoKnBkYXRhKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9kbWEtbXgxLW14Mi5jIGIvYXJjaC9hcm0vcGxhdC1teGMvZG1hLW14MS1teDIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE2MDE0Yi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9kbWEtbXgxLW14Mi5jCisrKyAvZGV2L251bGwKQEAgLTEsODYzICswLDAgQEAKLS8qCi0gKiAgbGludXgvYXJjaC9hcm0vcGxhdC1teGMvZG1hLW14MS1teDIuYwotICoKLSAqICBpLk1YIERNQSByZWdpc3RyYXRpb24gYW5kIElSUSBkaXNwYXRjaGluZwotICoKLSAqIENvcHlyaWdodCAyMDA2IFBhdmVsIFBpc2EgPHBpc2FAY21wLmZlbGsuY3Z1dC5jej4KLSAqIENvcHlyaWdodCAyMDA4IEp1ZXJnZW4gQmVpc2VydCwgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KLSAqIENvcHlyaWdodCAyMDA4IFNhc2NoYSBIYXVlciwgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0gKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCi0gKiBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvZG1hLW14MS1teDIuaD4KLQotI2RlZmluZSBETUFfRENSICAgICAweDAwCQkvKiBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIERNQV9ESVNSICAgIDB4MDQJCS8qIEludGVycnVwdCBzdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgRE1BX0RJTVIgICAgMHgwOAkJLyogSW50ZXJydXB0IG1hc2sgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgRE1BX0RCVE9TUiAgMHgwYwkJLyogQnVyc3QgdGltZW91dCBzdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgRE1BX0RSVE9TUiAgMHgxMAkJLyogUmVxdWVzdCB0aW1lb3V0IFJlZ2lzdGVyICovCi0jZGVmaW5lIERNQV9EU0VTUiAgIDB4MTQJCS8qIFRyYW5zZmVyIEVycm9yIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSBETUFfREJPU1IgICAweDE4CQkvKiBCdWZmZXIgb3ZlcmZsb3cgc3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIERNQV9EQlRPQ1IgIDB4MWMJCS8qIEJ1cnN0IHRpbWVvdXQgY29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBETUFfV1NSQSAgICAweDQwCQkvKiBXLVNpemUgUmVnaXN0ZXIgQSAqLwotI2RlZmluZSBETUFfWFNSQSAgICAweDQ0CQkvKiBYLVNpemUgUmVnaXN0ZXIgQSAqLwotI2RlZmluZSBETUFfWVNSQSAgICAweDQ4CQkvKiBZLVNpemUgUmVnaXN0ZXIgQSAqLwotI2RlZmluZSBETUFfV1NSQiAgICAweDRjCQkvKiBXLVNpemUgUmVnaXN0ZXIgQiAqLwotI2RlZmluZSBETUFfWFNSQiAgICAweDUwCQkvKiBYLVNpemUgUmVnaXN0ZXIgQiAqLwotI2RlZmluZSBETUFfWVNSQiAgICAweDU0CQkvKiBZLVNpemUgUmVnaXN0ZXIgQiAqLwotI2RlZmluZSBETUFfU0FSKHgpICAoMHg4MCArICgoeCkgPDwgNikpCS8qIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVycyAqLwotI2RlZmluZSBETUFfREFSKHgpICAoMHg4NCArICgoeCkgPDwgNikpCS8qIERlc3RpbmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXJzICovCi0jZGVmaW5lIERNQV9DTlRSKHgpICgweDg4ICsgKCh4KSA8PCA2KSkJLyogQ291bnQgUmVnaXN0ZXJzICovCi0jZGVmaW5lIERNQV9DQ1IoeCkgICgweDhjICsgKCh4KSA8PCA2KSkJLyogQ29udHJvbCBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgRE1BX1JTU1IoeCkgKDB4OTAgKyAoKHgpIDw8IDYpKQkvKiBSZXF1ZXN0IHNvdXJjZSBzZWxlY3QgUmVnaXN0ZXJzICovCi0jZGVmaW5lIERNQV9CTFIoeCkgICgweDk0ICsgKCh4KSA8PCA2KSkJLyogQnVyc3QgbGVuZ3RoIFJlZ2lzdGVycyAqLwotI2RlZmluZSBETUFfUlRPUih4KSAoMHg5OCArICgoeCkgPDwgNikpCS8qIFJlcXVlc3QgdGltZW91dCBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgRE1BX0JVQ1IoeCkgKDB4OTggKyAoKHgpIDw8IDYpKQkvKiBCdXMgVXRpbGl6YXRpb24gUmVnaXN0ZXJzICovCi0jZGVmaW5lIERNQV9DQ05SKHgpICgweDlDICsgKCh4KSA8PCA2KSkJLyogQ2hhbm5lbCBjb3VudGVyIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIERDUl9EUlNUICAgICAgICAgICAoMTw8MSkKLSNkZWZpbmUgRENSX0RFTiAgICAgICAgICAgICgxPDwwKQotI2RlZmluZSBEQlRPQ1JfRU4gICAgICAgICAgKDE8PDE1KQotI2RlZmluZSBEQlRPQ1JfQ05UKHgpICAgICAgKCh4KSAmIDB4N2ZmZikKLSNkZWZpbmUgQ05UUl9DTlQoeCkgICAgICAgICgoeCkgJiAweGZmZmZmZikKLSNkZWZpbmUgQ0NSX0FDUlBUICAgICAgICAgICgxPDwxNCkKLSNkZWZpbmUgQ0NSX0RNT0RfTElORUFSICAgICgweDAgPDwgMTIpCi0jZGVmaW5lIENDUl9ETU9EXzJEICAgICAgICAoMHgxIDw8IDEyKQotI2RlZmluZSBDQ1JfRE1PRF9GSUZPICAgICAgKDB4MiA8PCAxMikKLSNkZWZpbmUgQ0NSX0RNT0RfRU9CRklGTyAgICgweDMgPDwgMTIpCi0jZGVmaW5lIENDUl9TTU9EX0xJTkVBUiAgICAoMHgwIDw8IDEwKQotI2RlZmluZSBDQ1JfU01PRF8yRCAgICAgICAgKDB4MSA8PCAxMCkKLSNkZWZpbmUgQ0NSX1NNT0RfRklGTyAgICAgICgweDIgPDwgMTApCi0jZGVmaW5lIENDUl9TTU9EX0VPQkZJRk8gICAoMHgzIDw8IDEwKQotI2RlZmluZSBDQ1JfTURJUl9ERUMgICAgICAgKDE8PDkpCi0jZGVmaW5lIENDUl9NU0VMX0IgICAgICAgICAoMTw8OCkKLSNkZWZpbmUgQ0NSX0RTSVpfMzIgICAgICAgICgweDAgPDwgNikKLSNkZWZpbmUgQ0NSX0RTSVpfOCAgICAgICAgICgweDEgPDwgNikKLSNkZWZpbmUgQ0NSX0RTSVpfMTYgICAgICAgICgweDIgPDwgNikKLSNkZWZpbmUgQ0NSX1NTSVpfMzIgICAgICAgICgweDAgPDwgNCkKLSNkZWZpbmUgQ0NSX1NTSVpfOCAgICAgICAgICgweDEgPDwgNCkKLSNkZWZpbmUgQ0NSX1NTSVpfMTYgICAgICAgICgweDIgPDwgNCkKLSNkZWZpbmUgQ0NSX1JFTiAgICAgICAgICAgICgxPDwzKQotI2RlZmluZSBDQ1JfUlBUICAgICAgICAgICAgKDE8PDIpCi0jZGVmaW5lIENDUl9GUkMgICAgICAgICAgICAoMTw8MSkKLSNkZWZpbmUgQ0NSX0NFTiAgICAgICAgICAgICgxPDwwKQotI2RlZmluZSBSVE9SX0VOICAgICAgICAgICAgKDE8PDE1KQotI2RlZmluZSBSVE9SX0NMSyAgICAgICAgICAgKDE8PDE0KQotI2RlZmluZSBSVE9SX1BTQyAgICAgICAgICAgKDE8PDEzKQotCi0vKgotICogc3RydWN0IGlteF9kbWFfY2hhbm5lbCAtIGkuTVggc3BlY2lmaWMgRE1BIGV4dGVuc2lvbgotICogQG5hbWU6IG5hbWUgc3BlY2lmaWVkIGJ5IERNQSBjbGllbnQKLSAqIEBpcnFfaGFuZGxlcjogY2xpZW50IGNhbGxiYWNrIGZvciBlbmQgb2YgdHJhbnNmZXIKLSAqIEBlcnJfaGFuZGxlcjogY2xpZW50IGNhbGxiYWNrIGZvciBlcnJvciBjb25kaXRpb24KLSAqIEBkYXRhOiBjbGllbnRzIGNvbnRleHQgZGF0YSBmb3IgY2FsbGJhY2tzCi0gKiBAZG1hX21vZGU6IGRpcmVjdGlvbiBvZiB0aGUgdHJhbnNmZXIgJURNQV9NT0RFX1JFQUQgb3IgJURNQV9NT0RFX1dSSVRFCi0gKiBAc2c6IHBvaW50ZXIgdG8gdGhlIGFjdHVhbCByZWFkL3dyaXR0ZW4gY2h1bmsgZm9yIHNjYXR0ZXItZ2F0aGVyIGVtdWxhdGlvbgotICogQHJlc2J5dGVzOiB0b3RhbCByZXNpZHVhbCBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIKLSAqICAgICAgICAgICAgKGl0IGNhbiBiZSBsb3dlciBvciBzYW1lIGFzIHN1bSBvZiBTRyBtYXBwZWQgY2h1bmsgc2l6ZXMpCi0gKiBAc2djb3VudDogbnVtYmVyIG9mIGNodW5rcyB0byBiZSByZWFkL3dyaXR0ZW4KLSAqCi0gKiBTdHJ1Y3R1cmUgaXMgdXNlZCBmb3IgSU1YIERNQSBwcm9jZXNzaW5nLiBJdCB3b3VsZCBiZSBwcm9iYWJseSBnb29kCi0gKiBAc3RydWN0IGRtYV9zdHJ1Y3QgaW4gdGhlIGZ1dHVyZSBmb3IgZXh0ZXJuYWwgaW50ZXJmYWNpbmcgYW5kIHVzZQotICogQHN0cnVjdCBpbXhfZG1hX2NoYW5uZWwgb25seSBhcyBleHRlbnNpb24gdG8gaXQuCi0gKi8KLQotc3RydWN0IGlteF9kbWFfY2hhbm5lbCB7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQl2b2lkICgqaXJxX2hhbmRsZXIpIChpbnQsIHZvaWQgKik7Ci0Jdm9pZCAoKmVycl9oYW5kbGVyKSAoaW50LCB2b2lkICosIGludCBlcnJjb2RlKTsKLQl2b2lkICgqcHJvZ19oYW5kbGVyKSAoaW50LCB2b2lkICosIHN0cnVjdCBzY2F0dGVybGlzdCAqKTsKLQl2b2lkICpkYXRhOwotCXVuc2lnbmVkIGludCBkbWFfbW9kZTsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwotCXVuc2lnbmVkIGludCByZXNieXRlczsKLQlpbnQgZG1hX251bTsKLQotCWludCBpbl91c2U7Ci0KLQl1MzIgY2NyX2Zyb21fZGV2aWNlOwotCXUzMiBjY3JfdG9fZGV2aWNlOwotCi0Jc3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hkb2c7Ci0KLQlpbnQgaHdfY2hhaW5pbmc7Ci19OwotCi1zdGF0aWMgdm9pZCBfX2lvbWVtICppbXhfZG1hdjFfYmFzZWFkZHI7Ci0KLXN0YXRpYyB2b2lkIGlteF9kbWF2MV93cml0ZWwodW5zaWduZWQgdmFsLCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0JX19yYXdfd3JpdGVsKHZhbCwgaW14X2RtYXYxX2Jhc2VhZGRyICsgb2Zmc2V0KTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGlteF9kbWF2MV9yZWFkbCh1bnNpZ25lZCBvZmZzZXQpCi17Ci0JcmV0dXJuIF9fcmF3X3JlYWRsKGlteF9kbWF2MV9iYXNlYWRkciArIG9mZnNldCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaW14X2RtYV9jaGFubmVsIGlteF9kbWFfY2hhbm5lbHNbSU1YX0RNQV9DSEFOTkVMU107Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpkbWFfY2xrOwotCi1zdGF0aWMgaW50IGlteF9kbWFfaHdfY2hhaW4oc3RydWN0IGlteF9kbWFfY2hhbm5lbCAqaW14ZG1hKQotewotCWlmIChjcHVfaXNfbXgyNygpKQotCQlyZXR1cm4gaW14ZG1hLT5od19jaGFpbmluZzsKLQllbHNlCi0JCXJldHVybiAwOwotfQotCi0vKgotICogaW14X2RtYV9zZ19uZXh0IC0gcHJlcGFyZSBuZXh0IGNodW5rIGZvciBzY2F0dGVyLWdhdGhlciBETUEgZW11bGF0aW9uCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGlteF9kbWFfc2dfbmV4dChpbnQgY2hhbm5lbCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZykKLXsKLQlzdHJ1Y3QgaW14X2RtYV9jaGFubmVsICppbXhkbWEgPSAmaW14X2RtYV9jaGFubmVsc1tjaGFubmVsXTsKLQl1bnNpZ25lZCBsb25nIG5vdzsKLQotCWlmICghaW14ZG1hLT5uYW1lKSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgIiVzOiBjYWxsZWQgZm9yICBub3QgYWxsb2NhdGVkIGNoYW5uZWwgJWRcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgY2hhbm5lbCk7Ci0JCXJldHVybiAwOwotCX0KLQotCW5vdyA9IG1pbihpbXhkbWEtPnJlc2J5dGVzLCBzZy0+bGVuZ3RoKTsKLQlpZiAoaW14ZG1hLT5yZXNieXRlcyAhPSBJTVhfRE1BX0xFTkdUSF9MT09QKQotCQlpbXhkbWEtPnJlc2J5dGVzIC09IG5vdzsKLQotCWlmICgoaW14ZG1hLT5kbWFfbW9kZSAmIERNQV9NT0RFX01BU0spID09IERNQV9NT0RFX1JFQUQpCi0JCWlteF9kbWF2MV93cml0ZWwoc2ctPmRtYV9hZGRyZXNzLCBETUFfREFSKGNoYW5uZWwpKTsKLQllbHNlCi0JCWlteF9kbWF2MV93cml0ZWwoc2ctPmRtYV9hZGRyZXNzLCBETUFfU0FSKGNoYW5uZWwpKTsKLQotCWlteF9kbWF2MV93cml0ZWwobm93LCBETUFfQ05UUihjaGFubmVsKSk7Ci0KLQlwcl9kZWJ1ZygiaW14ZG1hJWQ6IG5leHQgc2cgY2h1bmsgZHN0IDB4JTA4eCwgc3JjIDB4JTA4eCwgIgotCQkic2l6ZSAweCUwOHhcbiIsIGNoYW5uZWwsCi0JCSBpbXhfZG1hdjFfcmVhZGwoRE1BX0RBUihjaGFubmVsKSksCi0JCSBpbXhfZG1hdjFfcmVhZGwoRE1BX1NBUihjaGFubmVsKSksCi0JCSBpbXhfZG1hdjFfcmVhZGwoRE1BX0NOVFIoY2hhbm5lbCkpKTsKLQotCXJldHVybiBub3c7Ci19Ci0KLS8qKgotICogaW14X2RtYV9zZXR1cF9zaW5nbGUgLSBzZXR1cCBpLk1YIERNQSBjaGFubmVsIGZvciBsaW5lYXIgbWVtb3J5IHRvL2Zyb20KLSAqIGRldmljZSB0cmFuc2ZlcgotICoKLSAqIEBjaGFubmVsOiBpLk1YIERNQSBjaGFubmVsIG51bWJlcgotICogQGRtYV9hZGRyZXNzOiB0aGUgRE1BL3BoeXNpY2FsIG1lbW9yeSBhZGRyZXNzIG9mIHRoZSBsaW5lYXIgZGF0YSBibG9jawotICoJCXRvIHRyYW5zZmVyCi0gKiBAZG1hX2xlbmd0aDogbGVuZ3RoIG9mIHRoZSBkYXRhIGJsb2NrIGluIGJ5dGVzCi0gKiBAZGV2X2FkZHI6IHBoeXNpY2FsIGRldmljZSBwb3J0IGFkZHJlc3MKLSAqIEBkbWFtb2RlOiBETUEgdHJhbnNmZXIgbW9kZSwgJURNQV9NT0RFX1JFQUQgZnJvbSB0aGUgZGV2aWNlIHRvIHRoZSBtZW1vcnkKLSAqICAgICAgICAgICBvciAlRE1BX01PREVfV1JJVEUgZnJvbSBtZW1vcnkgdG8gdGhlIGRldmljZQotICoKLSAqIFJldHVybiB2YWx1ZTogaWYgaW5jb3JyZWN0IHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkIC0lRUlOVkFMLgotICoJCVplcm8gaW5kaWNhdGVzIHN1Y2Nlc3MuCi0gKi8KLWludAotaW14X2RtYV9zZXR1cF9zaW5nbGUoaW50IGNoYW5uZWwsIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3MsCi0JCSAgICAgdW5zaWduZWQgaW50IGRtYV9sZW5ndGgsIHVuc2lnbmVkIGludCBkZXZfYWRkciwKLQkJICAgICB1bnNpZ25lZCBpbnQgZG1hbW9kZSkKLXsKLQlzdHJ1Y3QgaW14X2RtYV9jaGFubmVsICppbXhkbWEgPSAmaW14X2RtYV9jaGFubmVsc1tjaGFubmVsXTsKLQotCWlteGRtYS0+c2cgPSBOVUxMOwotCWlteGRtYS0+ZG1hX21vZGUgPSBkbWFtb2RlOwotCi0JaWYgKCFkbWFfYWRkcmVzcykgewotCQlwcmludGsoS0VSTl9FUlIgImlteGRtYSVkOiBpbXhfZG1hX3NldHVwX3NpbmdsZSBudWxsIGFkZHJlc3NcbiIsCi0JCSAgICAgICBjaGFubmVsKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCFkbWFfbGVuZ3RoKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaW14ZG1hJWQ6IGlteF9kbWFfc2V0dXBfc2luZ2xlIHplcm8gbGVuZ3RoXG4iLAotCQkgICAgICAgY2hhbm5lbCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICgoZG1hbW9kZSAmIERNQV9NT0RFX01BU0spID09IERNQV9NT0RFX1JFQUQpIHsKLQkJcHJfZGVidWcoImlteGRtYSVkOiAlcyBkbWFfYWRkcmVzc2c9MHglMDh4IGRtYV9sZW5ndGg9JWQgIgotCQkJImRldl9hZGRyPTB4JTA4eCBmb3IgcmVhZFxuIiwKLQkJCWNoYW5uZWwsIF9fZnVuY19fLCAodW5zaWduZWQgaW50KWRtYV9hZGRyZXNzLAotCQkJZG1hX2xlbmd0aCwgZGV2X2FkZHIpOwotCi0JCWlteF9kbWF2MV93cml0ZWwoZGV2X2FkZHIsIERNQV9TQVIoY2hhbm5lbCkpOwotCQlpbXhfZG1hdjFfd3JpdGVsKGRtYV9hZGRyZXNzLCBETUFfREFSKGNoYW5uZWwpKTsKLQkJaW14X2RtYXYxX3dyaXRlbChpbXhkbWEtPmNjcl9mcm9tX2RldmljZSwgRE1BX0NDUihjaGFubmVsKSk7Ci0JfSBlbHNlIGlmICgoZG1hbW9kZSAmIERNQV9NT0RFX01BU0spID09IERNQV9NT0RFX1dSSVRFKSB7Ci0JCXByX2RlYnVnKCJpbXhkbWElZDogJXMgZG1hX2FkZHJlc3NnPTB4JTA4eCBkbWFfbGVuZ3RoPSVkICIKLQkJCSJkZXZfYWRkcj0weCUwOHggZm9yIHdyaXRlXG4iLAotCQkJY2hhbm5lbCwgX19mdW5jX18sICh1bnNpZ25lZCBpbnQpZG1hX2FkZHJlc3MsCi0JCQlkbWFfbGVuZ3RoLCBkZXZfYWRkcik7Ci0KLQkJaW14X2RtYXYxX3dyaXRlbChkbWFfYWRkcmVzcywgRE1BX1NBUihjaGFubmVsKSk7Ci0JCWlteF9kbWF2MV93cml0ZWwoZGV2X2FkZHIsIERNQV9EQVIoY2hhbm5lbCkpOwotCQlpbXhfZG1hdjFfd3JpdGVsKGlteGRtYS0+Y2NyX3RvX2RldmljZSwKLQkJCQlETUFfQ0NSKGNoYW5uZWwpKTsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgImlteGRtYSVkOiBpbXhfZG1hX3NldHVwX3NpbmdsZSBiYWQgZG1hbW9kZVxuIiwKLQkJICAgICAgIGNoYW5uZWwpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpbXhfZG1hdjFfd3JpdGVsKGRtYV9sZW5ndGgsIERNQV9DTlRSKGNoYW5uZWwpKTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChpbXhfZG1hX3NldHVwX3NpbmdsZSk7Ci0KLS8qKgotICogaW14X2RtYV9zZXR1cF9zZyAtIHNldHVwIGkuTVggRE1BIGNoYW5uZWwgU0cgbGlzdCB0by9mcm9tIGRldmljZSB0cmFuc2ZlcgotICogQGNoYW5uZWw6IGkuTVggRE1BIGNoYW5uZWwgbnVtYmVyCi0gKiBAc2c6IHBvaW50ZXIgdG8gdGhlIHNjYXR0ZXItZ2F0aGVyIGxpc3QvdmVjdG9yCi0gKiBAc2djb3VudDogc2NhdHRlci1nYXRoZXIgbGlzdCBodW5ncyBjb3VudAotICogQGRtYV9sZW5ndGg6IHRvdGFsIGxlbmd0aCBvZiB0aGUgdHJhbnNmZXIgcmVxdWVzdCBpbiBieXRlcwotICogQGRldl9hZGRyOiBwaHlzaWNhbCBkZXZpY2UgcG9ydCBhZGRyZXNzCi0gKiBAZG1hbW9kZTogRE1BIHRyYW5zZmVyIG1vZGUsICVETUFfTU9ERV9SRUFEIGZyb20gdGhlIGRldmljZSB0byB0aGUgbWVtb3J5Ci0gKiAgICAgICAgICAgb3IgJURNQV9NT0RFX1dSSVRFIGZyb20gbWVtb3J5IHRvIHRoZSBkZXZpY2UKLSAqCi0gKiBUaGUgZnVuY3Rpb24gc2V0cyB1cCBETUEgY2hhbm5lbCBzdGF0ZSBhbmQgcmVnaXN0ZXJzIHRvIGJlIHJlYWR5IGZvcgotICogdHJhbnNmZXIgc3BlY2lmaWVkIGJ5IHByb3ZpZGVkIHBhcmFtZXRlcnMuIFRoZSBzY2F0dGVyLWdhdGhlciBlbXVsYXRpb24KLSAqIGlzIHNldCB1cCBhY2NvcmRpbmcgdG8gdGhlIHBhcmFtZXRlcnMuCi0gKgotICogVGhlIGZ1bGwgcHJlcGFyYXRpb24gb2YgdGhlIHRyYW5zZmVyIHJlcXVpcmVzIHNldHVwIG9mIG1vcmUgcmVnaXN0ZXIKLSAqIGJ5IHRoZSBjYWxsZXIgYmVmb3JlIGlteF9kbWFfZW5hYmxlKCkgY2FuIGJlIGNhbGxlZC4KLSAqCi0gKiAlQkxSKGNoYW5uZWwpIGhvbGRzIHRyYW5zZmVyIGJ1cnN0IGxlbmd0aCBpbiBieXRlcywgMCBtZWFucyA2NCBieXRlcwotICoKLSAqICVSU1NSKGNoYW5uZWwpIGhhcyB0byBiZSBzZXQgdG8gdGhlIERNQSByZXF1ZXN0IGxpbmUgc291cmNlICVETUFfUkVRX3h4eAotICoKLSAqICVDQ1IoY2hhbm5lbCkgaGFzIHRvIHNwZWNpZnkgdHJhbnNmZXIgcGFyYW1ldGVycywgdGhlIG5leHQgc2V0dGluZ3MgaXMKLSAqIHR5cGljYWwgZm9yIGxpbmVhciBvciBzaW1wbGUgc2NhdHRlci1nYXRoZXIgdHJhbnNmZXJzIGlmICVETUFfTU9ERV9SRUFEIGlzCi0gKiBzcGVjaWZpZWQKLSAqCi0gKiAlQ0NSX0RNT0RfTElORUFSIHwgJUNDUl9EU0laXzMyIHwgJUNDUl9TTU9EX0ZJRk8gfCAlQ0NSX1NTSVpfeAotICoKLSAqIFRoZSB0eXBpY2FsIHNldHVwIGZvciAlRE1BX01PREVfV1JJVEUgaXMgc3BlY2lmaWVkIGJ5IG5leHQgb3B0aW9ucwotICogY29tYmluYXRpb24KLSAqCi0gKiAlQ0NSX1NNT0RfTElORUFSIHwgJUNDUl9TU0laXzMyIHwgJUNDUl9ETU9EX0ZJRk8gfCAlQ0NSX0RTSVpfeAotICoKLSAqIEJlIGNhcmVmdWwgaGVyZSBhbmQgZG8gbm90IG1pc3Rha2VubHkgbWl4IHNvdXJjZSBhbmQgdGFyZ2V0IGRldmljZQotICogcG9ydCBzaXplcyBjb25zdGFudHMsIHRoZXkgYXJlIHJlYWxseSBkaWZmZXJlbnQ6Ci0gKiAlQ0NSX1NTSVpfOCwgJUNDUl9TU0laXzE2LCAlQ0NSX1NTSVpfMzIsCi0gKiAlQ0NSX0RTSVpfOCwgJUNDUl9EU0laXzE2LCAlQ0NSX0RTSVpfMzIKLSAqCi0gKiBSZXR1cm4gdmFsdWU6IGlmIGluY29ycmVjdCBwYXJhbWV0ZXJzIGFyZSBwcm92aWRlZCAtJUVJTlZBTC4KLSAqIFplcm8gaW5kaWNhdGVzIHN1Y2Nlc3MuCi0gKi8KLWludAotaW14X2RtYV9zZXR1cF9zZyhpbnQgY2hhbm5lbCwKLQkJIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBzZ2NvdW50LAotCQkgdW5zaWduZWQgaW50IGRtYV9sZW5ndGgsIHVuc2lnbmVkIGludCBkZXZfYWRkciwKLQkJIHVuc2lnbmVkIGludCBkbWFtb2RlKQotewotCXN0cnVjdCBpbXhfZG1hX2NoYW5uZWwgKmlteGRtYSA9ICZpbXhfZG1hX2NoYW5uZWxzW2NoYW5uZWxdOwotCi0JaWYgKGlteGRtYS0+aW5fdXNlKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JaW14ZG1hLT5zZyA9IHNnOwotCWlteGRtYS0+ZG1hX21vZGUgPSBkbWFtb2RlOwotCWlteGRtYS0+cmVzYnl0ZXMgPSBkbWFfbGVuZ3RoOwotCi0JaWYgKCFzZyB8fCAhc2djb3VudCkgewotCQlwcmludGsoS0VSTl9FUlIgImlteGRtYSVkOiBpbXhfZG1hX3NldHVwX3NnIGVwdHkgc2cgbGlzdFxuIiwKLQkJICAgICAgIGNoYW5uZWwpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoIXNnLT5sZW5ndGgpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJpbXhkbWElZDogaW14X2RtYV9zZXR1cF9zZyB6ZXJvIGxlbmd0aFxuIiwKLQkJICAgICAgIGNoYW5uZWwpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoKGRtYW1vZGUgJiBETUFfTU9ERV9NQVNLKSA9PSBETUFfTU9ERV9SRUFEKSB7Ci0JCXByX2RlYnVnKCJpbXhkbWElZDogJXMgc2c9JXAgc2djb3VudD0lZCB0b3RhbCBsZW5ndGg9JWQgIgotCQkJImRldl9hZGRyPTB4JTA4eCBmb3IgcmVhZFxuIiwKLQkJCWNoYW5uZWwsIF9fZnVuY19fLCBzZywgc2djb3VudCwgZG1hX2xlbmd0aCwgZGV2X2FkZHIpOwotCi0JCWlteF9kbWF2MV93cml0ZWwoZGV2X2FkZHIsIERNQV9TQVIoY2hhbm5lbCkpOwotCQlpbXhfZG1hdjFfd3JpdGVsKGlteGRtYS0+Y2NyX2Zyb21fZGV2aWNlLCBETUFfQ0NSKGNoYW5uZWwpKTsKLQl9IGVsc2UgaWYgKChkbWFtb2RlICYgRE1BX01PREVfTUFTSykgPT0gRE1BX01PREVfV1JJVEUpIHsKLQkJcHJfZGVidWcoImlteGRtYSVkOiAlcyBzZz0lcCBzZ2NvdW50PSVkIHRvdGFsIGxlbmd0aD0lZCAiCi0JCQkiZGV2X2FkZHI9MHglMDh4IGZvciB3cml0ZVxuIiwKLQkJCWNoYW5uZWwsIF9fZnVuY19fLCBzZywgc2djb3VudCwgZG1hX2xlbmd0aCwgZGV2X2FkZHIpOwotCi0JCWlteF9kbWF2MV93cml0ZWwoZGV2X2FkZHIsIERNQV9EQVIoY2hhbm5lbCkpOwotCQlpbXhfZG1hdjFfd3JpdGVsKGlteGRtYS0+Y2NyX3RvX2RldmljZSwgRE1BX0NDUihjaGFubmVsKSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJpbXhkbWElZDogaW14X2RtYV9zZXR1cF9zZyBiYWQgZG1hbW9kZVxuIiwKLQkJICAgICAgIGNoYW5uZWwpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpbXhfZG1hX3NnX25leHQoY2hhbm5lbCwgc2cpOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGlteF9kbWFfc2V0dXBfc2cpOwotCi1pbnQKLWlteF9kbWFfY29uZmlnX2NoYW5uZWwoaW50IGNoYW5uZWwsIHVuc2lnbmVkIGludCBjb25maWdfcG9ydCwKLQl1bnNpZ25lZCBpbnQgY29uZmlnX21lbSwgdW5zaWduZWQgaW50IGRtYXJlcSwgaW50IGh3X2NoYWluaW5nKQotewotCXN0cnVjdCBpbXhfZG1hX2NoYW5uZWwgKmlteGRtYSA9ICZpbXhfZG1hX2NoYW5uZWxzW2NoYW5uZWxdOwotCXUzMiBkcmVxID0gMDsKLQotCWlteGRtYS0+aHdfY2hhaW5pbmcgPSAwOwotCi0JaWYgKGh3X2NoYWluaW5nKSB7Ci0JCWlteGRtYS0+aHdfY2hhaW5pbmcgPSAxOwotCQlpZiAoIWlteF9kbWFfaHdfY2hhaW4oaW14ZG1hKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChkbWFyZXEpCi0JCWRyZXEgPSBDQ1JfUkVOOwotCi0JaW14ZG1hLT5jY3JfZnJvbV9kZXZpY2UgPSBjb25maWdfcG9ydCB8IChjb25maWdfbWVtIDw8IDIpIHwgZHJlcTsKLQlpbXhkbWEtPmNjcl90b19kZXZpY2UgPSBjb25maWdfbWVtIHwgKGNvbmZpZ19wb3J0IDw8IDIpIHwgZHJlcTsKLQotCWlteF9kbWF2MV93cml0ZWwoZG1hcmVxLCBETUFfUlNTUihjaGFubmVsKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woaW14X2RtYV9jb25maWdfY2hhbm5lbCk7Ci0KLXZvaWQgaW14X2RtYV9jb25maWdfYnVyc3RsZW4oaW50IGNoYW5uZWwsIHVuc2lnbmVkIGludCBidXJzdGxlbikKLXsKLQlpbXhfZG1hdjFfd3JpdGVsKGJ1cnN0bGVuLCBETUFfQkxSKGNoYW5uZWwpKTsKLX0KLUVYUE9SVF9TWU1CT0woaW14X2RtYV9jb25maWdfYnVyc3RsZW4pOwotCi0vKioKLSAqIGlteF9kbWFfc2V0dXBfaGFuZGxlcnMgLSBzZXR1cCBpLk1YIERNQSBjaGFubmVsIGVuZCBhbmQgZXJyb3Igbm90aWZpY2F0aW9uCi0gKiBoYW5kbGVycwotICogQGNoYW5uZWw6IGkuTVggRE1BIGNoYW5uZWwgbnVtYmVyCi0gKiBAaXJxX2hhbmRsZXI6IHRoZSBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbiBjYWxsZWQgaWYgdGhlIHRyYW5zZmVyCi0gKgkJZW5kcyBzdWNjZXNzZnVsbHkKLSAqIEBlcnJfaGFuZGxlcjogdGhlIHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIGNhbGxlZCBpZiB0aGUgcHJlbWF0dXJlCi0gKgkJZW5kIGNhdXNlZCBieSBlcnJvciBvY2N1cnMKLSAqIEBkYXRhOiB1c2VyIHNwZWNpZmllZCB2YWx1ZSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXJzCi0gKi8KLWludAotaW14X2RtYV9zZXR1cF9oYW5kbGVycyhpbnQgY2hhbm5lbCwKLQkJICAgICAgIHZvaWQgKCppcnFfaGFuZGxlcikgKGludCwgdm9pZCAqKSwKLQkJICAgICAgIHZvaWQgKCplcnJfaGFuZGxlcikgKGludCwgdm9pZCAqLCBpbnQpLAotCQkgICAgICAgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgaW14X2RtYV9jaGFubmVsICppbXhkbWEgPSAmaW14X2RtYV9jaGFubmVsc1tjaGFubmVsXTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCFpbXhkbWEtPm5hbWUpIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6IGNhbGxlZCBmb3IgIG5vdCBhbGxvY2F0ZWQgY2hhbm5lbCAlZFxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBjaGFubmVsKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWlteF9kbWF2MV93cml0ZWwoMSA8PCBjaGFubmVsLCBETUFfRElTUik7Ci0JaW14ZG1hLT5pcnFfaGFuZGxlciA9IGlycV9oYW5kbGVyOwotCWlteGRtYS0+ZXJyX2hhbmRsZXIgPSBlcnJfaGFuZGxlcjsKLQlpbXhkbWEtPmRhdGEgPSBkYXRhOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woaW14X2RtYV9zZXR1cF9oYW5kbGVycyk7Ci0KLS8qKgotICogaW14X2RtYV9zZXR1cF9wcm9ncmVzc2lvbl9oYW5kbGVyIC0gc2V0dXAgaS5NWCBETUEgY2hhbm5lbCBwcm9ncmVzc2lvbgotICogaGFuZGxlcnMKLSAqIEBjaGFubmVsOiBpLk1YIERNQSBjaGFubmVsIG51bWJlcgotICogQHByb2dfaGFuZGxlcjogdGhlIHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIGNhbGxlZCBpZiB0aGUgdHJhbnNmZXIgcHJvZ3Jlc3NlcwotICovCi1pbnQKLWlteF9kbWFfc2V0dXBfcHJvZ3Jlc3Npb25faGFuZGxlcihpbnQgY2hhbm5lbCwKLQkJCXZvaWQgKCpwcm9nX2hhbmRsZXIpIChpbnQsIHZvaWQqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QqKSkKLXsKLQlzdHJ1Y3QgaW14X2RtYV9jaGFubmVsICppbXhkbWEgPSAmaW14X2RtYV9jaGFubmVsc1tjaGFubmVsXTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCFpbXhkbWEtPm5hbWUpIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6IGNhbGxlZCBmb3IgIG5vdCBhbGxvY2F0ZWQgY2hhbm5lbCAlZFxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBjaGFubmVsKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWlteGRtYS0+cHJvZ19oYW5kbGVyID0gcHJvZ19oYW5kbGVyOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woaW14X2RtYV9zZXR1cF9wcm9ncmVzc2lvbl9oYW5kbGVyKTsKLQotLyoqCi0gKiBpbXhfZG1hX2VuYWJsZSAtIGZ1bmN0aW9uIHRvIHN0YXJ0IGkuTVggRE1BIGNoYW5uZWwgb3BlcmF0aW9uCi0gKiBAY2hhbm5lbDogaS5NWCBETUEgY2hhbm5lbCBudW1iZXIKLSAqCi0gKiBUaGUgY2hhbm5lbCBoYXMgdG8gYmUgYWxsb2NhdGVkIGJ5IGRyaXZlciB0aHJvdWdoIGlteF9kbWFfcmVxdWVzdCgpCi0gKiBvciBpbXhfZG1hX3JlcXVlc3RfYnlfcHJpbygpIGZ1bmN0aW9uLgotICogVGhlIHRyYW5zZmVyIHBhcmFtZXRlcnMgaGFzIHRvIGJlIHNldCB0byB0aGUgY2hhbm5lbCByZWdpc3RlcnMgdGhyb3VnaAotICogY2FsbCBvZiB0aGUgaW14X2RtYV9zZXR1cF9zaW5nbGUoKSBvciBpbXhfZG1hX3NldHVwX3NnKCkgZnVuY3Rpb24KLSAqIGFuZCByZWdpc3RlcnMgJUJMUihjaGFubmVsKSwgJVJTU1IoY2hhbm5lbCkgYW5kICVDQ1IoY2hhbm5lbCkgaGFzIHRvCi0gKiBiZSBzZXQgcHJpb3IgdGhpcyBmdW5jdGlvbiBjYWxsIGJ5IHRoZSBjaGFubmVsIHVzZXIuCi0gKi8KLXZvaWQgaW14X2RtYV9lbmFibGUoaW50IGNoYW5uZWwpCi17Ci0Jc3RydWN0IGlteF9kbWFfY2hhbm5lbCAqaW14ZG1hID0gJmlteF9kbWFfY2hhbm5lbHNbY2hhbm5lbF07Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXByX2RlYnVnKCJpbXhkbWElZDogaW14X2RtYV9lbmFibGVcbiIsIGNoYW5uZWwpOwotCi0JaWYgKCFpbXhkbWEtPm5hbWUpIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6IGNhbGxlZCBmb3IgIG5vdCBhbGxvY2F0ZWQgY2hhbm5lbCAlZFxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBjaGFubmVsKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChpbXhkbWEtPmluX3VzZSkKLQkJcmV0dXJuOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JaW14X2RtYXYxX3dyaXRlbCgxIDw8IGNoYW5uZWwsIERNQV9ESVNSKTsKLQlpbXhfZG1hdjFfd3JpdGVsKGlteF9kbWF2MV9yZWFkbChETUFfRElNUikgJiB+KDEgPDwgY2hhbm5lbCksIERNQV9ESU1SKTsKLQlpbXhfZG1hdjFfd3JpdGVsKGlteF9kbWF2MV9yZWFkbChETUFfQ0NSKGNoYW5uZWwpKSB8IENDUl9DRU4gfAotCQlDQ1JfQUNSUFQsIERNQV9DQ1IoY2hhbm5lbCkpOwotCi0jaWZkZWYgQ09ORklHX0FSQ0hfTVgyCi0JaWYgKChjcHVfaXNfbXgyMSgpIHx8IGNwdV9pc19teDI3KCkpICYmCi0JCQlpbXhkbWEtPnNnICYmIGlteF9kbWFfaHdfY2hhaW4oaW14ZG1hKSkgewotCQlpbXhkbWEtPnNnID0gc2dfbmV4dChpbXhkbWEtPnNnKTsKLQkJaWYgKGlteGRtYS0+c2cpIHsKLQkJCXUzMiB0bXA7Ci0JCQlpbXhfZG1hX3NnX25leHQoY2hhbm5lbCwgaW14ZG1hLT5zZyk7Ci0JCQl0bXAgPSBpbXhfZG1hdjFfcmVhZGwoRE1BX0NDUihjaGFubmVsKSk7Ci0JCQlpbXhfZG1hdjFfd3JpdGVsKHRtcCB8IENDUl9SUFQgfCBDQ1JfQUNSUFQsCi0JCQkJRE1BX0NDUihjaGFubmVsKSk7Ci0JCX0KLQl9Ci0jZW5kaWYKLQlpbXhkbWEtPmluX3VzZSA9IDE7Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MKGlteF9kbWFfZW5hYmxlKTsKLQotLyoqCi0gKiBpbXhfZG1hX2Rpc2FibGUgLSBzdG9wLCBmaW5pc2ggaS5NWCBETUEgY2hhbm5lbCBvcGVyYXRpbgotICogQGNoYW5uZWw6IGkuTVggRE1BIGNoYW5uZWwgbnVtYmVyCi0gKi8KLXZvaWQgaW14X2RtYV9kaXNhYmxlKGludCBjaGFubmVsKQotewotCXN0cnVjdCBpbXhfZG1hX2NoYW5uZWwgKmlteGRtYSA9ICZpbXhfZG1hX2NoYW5uZWxzW2NoYW5uZWxdOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlwcl9kZWJ1ZygiaW14ZG1hJWQ6IGlteF9kbWFfZGlzYWJsZVxuIiwgY2hhbm5lbCk7Ci0KLQlpZiAoaW14X2RtYV9od19jaGFpbihpbXhkbWEpKQotCQlkZWxfdGltZXIoJmlteGRtYS0+d2F0Y2hkb2cpOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWlteF9kbWF2MV93cml0ZWwoaW14X2RtYXYxX3JlYWRsKERNQV9ESU1SKSB8ICgxIDw8IGNoYW5uZWwpLCBETUFfRElNUik7Ci0JaW14X2RtYXYxX3dyaXRlbChpbXhfZG1hdjFfcmVhZGwoRE1BX0NDUihjaGFubmVsKSkgJiB+Q0NSX0NFTiwKLQkJCURNQV9DQ1IoY2hhbm5lbCkpOwotCWlteF9kbWF2MV93cml0ZWwoMSA8PCBjaGFubmVsLCBETUFfRElTUik7Ci0JaW14ZG1hLT5pbl91c2UgPSAwOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLUVYUE9SVF9TWU1CT0woaW14X2RtYV9kaXNhYmxlKTsKLQotI2lmZGVmIENPTkZJR19BUkNIX01YMgotc3RhdGljIHZvaWQgaW14X2RtYV93YXRjaGRvZyh1bnNpZ25lZCBsb25nIGNobm8pCi17Ci0Jc3RydWN0IGlteF9kbWFfY2hhbm5lbCAqaW14ZG1hID0gJmlteF9kbWFfY2hhbm5lbHNbY2hub107Ci0KLQlpbXhfZG1hdjFfd3JpdGVsKDAsIERNQV9DQ1IoY2hubykpOwotCWlteGRtYS0+aW5fdXNlID0gMDsKLQlpbXhkbWEtPnNnID0gTlVMTDsKLQotCWlmIChpbXhkbWEtPmVycl9oYW5kbGVyKQotCQlpbXhkbWEtPmVycl9oYW5kbGVyKGNobm8sIGlteGRtYS0+ZGF0YSwgSU1YX0RNQV9FUlJfVElNRU9VVCk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGlycXJldHVybl90IGRtYV9lcnJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0JaW50IGksIGRpc3I7Ci0Jc3RydWN0IGlteF9kbWFfY2hhbm5lbCAqaW14ZG1hOwotCXVuc2lnbmVkIGludCBlcnJfbWFzazsKLQlpbnQgZXJyY29kZTsKLQotCWRpc3IgPSBpbXhfZG1hdjFfcmVhZGwoRE1BX0RJU1IpOwotCi0JZXJyX21hc2sgPSBpbXhfZG1hdjFfcmVhZGwoRE1BX0RCVE9TUikgfAotCQkgICBpbXhfZG1hdjFfcmVhZGwoRE1BX0RSVE9TUikgfAotCQkgICBpbXhfZG1hdjFfcmVhZGwoRE1BX0RTRVNSKSAgfAotCQkgICBpbXhfZG1hdjFfcmVhZGwoRE1BX0RCT1NSKTsKLQotCWlmICghZXJyX21hc2spCi0JCXJldHVybiBJUlFfSEFORExFRDsKLQotCWlteF9kbWF2MV93cml0ZWwoZGlzciAmIGVycl9tYXNrLCBETUFfRElTUik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSU1YX0RNQV9DSEFOTkVMUzsgaSsrKSB7Ci0JCWlmICghKGVycl9tYXNrICYgKDEgPDwgaSkpKQotCQkJY29udGludWU7Ci0JCWlteGRtYSA9ICZpbXhfZG1hX2NoYW5uZWxzW2ldOwotCQllcnJjb2RlID0gMDsKLQotCQlpZiAoaW14X2RtYXYxX3JlYWRsKERNQV9EQlRPU1IpICYgKDEgPDwgaSkpIHsKLQkJCWlteF9kbWF2MV93cml0ZWwoMSA8PCBpLCBETUFfREJUT1NSKTsKLQkJCWVycmNvZGUgfD0gSU1YX0RNQV9FUlJfQlVSU1Q7Ci0JCX0KLQkJaWYgKGlteF9kbWF2MV9yZWFkbChETUFfRFJUT1NSKSAmICgxIDw8IGkpKSB7Ci0JCQlpbXhfZG1hdjFfd3JpdGVsKDEgPDwgaSwgRE1BX0RSVE9TUik7Ci0JCQllcnJjb2RlIHw9IElNWF9ETUFfRVJSX1JFUVVFU1Q7Ci0JCX0KLQkJaWYgKGlteF9kbWF2MV9yZWFkbChETUFfRFNFU1IpICYgKDEgPDwgaSkpIHsKLQkJCWlteF9kbWF2MV93cml0ZWwoMSA8PCBpLCBETUFfRFNFU1IpOwotCQkJZXJyY29kZSB8PSBJTVhfRE1BX0VSUl9UUkFOU0ZFUjsKLQkJfQotCQlpZiAoaW14X2RtYXYxX3JlYWRsKERNQV9EQk9TUikgJiAoMSA8PCBpKSkgewotCQkJaW14X2RtYXYxX3dyaXRlbCgxIDw8IGksIERNQV9EQk9TUik7Ci0JCQllcnJjb2RlIHw9IElNWF9ETUFfRVJSX0JVRkZFUjsKLQkJfQotCQlpZiAoaW14ZG1hLT5uYW1lICYmIGlteGRtYS0+ZXJyX2hhbmRsZXIpIHsKLQkJCWlteGRtYS0+ZXJyX2hhbmRsZXIoaSwgaW14ZG1hLT5kYXRhLCBlcnJjb2RlKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaW14X2RtYV9jaGFubmVsc1tpXS5zZyA9IE5VTEw7Ci0KLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIkRNQSB0aW1lb3V0IG9uIGNoYW5uZWwgJWQgKCVzKSAtJXMlcyVzJXNcbiIsCi0JCSAgICAgICBpLCBpbXhkbWEtPm5hbWUsCi0JCSAgICAgICBlcnJjb2RlICYgSU1YX0RNQV9FUlJfQlVSU1QgPyAgICAiIGJ1cnN0IiA6ICIiLAotCQkgICAgICAgZXJyY29kZSAmIElNWF9ETUFfRVJSX1JFUVVFU1QgPyAgIiByZXF1ZXN0IiA6ICIiLAotCQkgICAgICAgZXJyY29kZSAmIElNWF9ETUFfRVJSX1RSQU5TRkVSID8gIiB0cmFuc2ZlciIgOiAiIiwKLQkJICAgICAgIGVycmNvZGUgJiBJTVhfRE1BX0VSUl9CVUZGRVIgPyAgICIgYnVmZmVyIiA6ICIiKTsKLQl9Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgdm9pZCBkbWFfaXJxX2hhbmRsZV9jaGFubmVsKGludCBjaG5vKQotewotCXN0cnVjdCBpbXhfZG1hX2NoYW5uZWwgKmlteGRtYSA9ICZpbXhfZG1hX2NoYW5uZWxzW2Nobm9dOwotCi0JaWYgKCFpbXhkbWEtPm5hbWUpIHsKLQkJLyoKLQkJICogSVJRIGZvciBhbiB1bnJlZ2lzdGVyZWQgRE1BIGNoYW5uZWw6Ci0JCSAqIGxldCdzIGNsZWFyIHRoZSBpbnRlcnJ1cHRzIGFuZCBkaXNhYmxlIGl0LgotCQkgKi8KLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgInNwdXJpb3VzIElSUSBmb3IgRE1BIGNoYW5uZWwgJWRcbiIsIGNobm8pOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGlteGRtYS0+c2cpIHsKLQkJdTMyIHRtcDsKLQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpjdXJyZW50X3NnID0gaW14ZG1hLT5zZzsKLQkJaW14ZG1hLT5zZyA9IHNnX25leHQoaW14ZG1hLT5zZyk7Ci0KLQkJaWYgKGlteGRtYS0+c2cpIHsKLQkJCWlteF9kbWFfc2dfbmV4dChjaG5vLCBpbXhkbWEtPnNnKTsKLQotCQkJdG1wID0gaW14X2RtYXYxX3JlYWRsKERNQV9DQ1IoY2hubykpOwotCi0JCQlpZiAoaW14X2RtYV9od19jaGFpbihpbXhkbWEpKSB7Ci0JCQkJLyogRklYTUU6IFRoZSB0aW1lb3V0IHNob3VsZCBwcm9iYWJseSBiZQotCQkJCSAqIGNvbmZpZ3VyYWJsZQotCQkJCSAqLwotCQkJCW1vZF90aW1lcigmaW14ZG1hLT53YXRjaGRvZywKLQkJCQkJamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNTAwKSk7Ci0KLQkJCQl0bXAgfD0gQ0NSX0NFTiB8IENDUl9SUFQgfCBDQ1JfQUNSUFQ7Ci0JCQkJaW14X2RtYXYxX3dyaXRlbCh0bXAsIERNQV9DQ1IoY2hubykpOwotCQkJfSBlbHNlIHsKLQkJCQlpbXhfZG1hdjFfd3JpdGVsKHRtcCAmIH5DQ1JfQ0VOLCBETUFfQ0NSKGNobm8pKTsKLQkJCQl0bXAgfD0gQ0NSX0NFTjsKLQkJCX0KLQotCQkJaW14X2RtYXYxX3dyaXRlbCh0bXAsIERNQV9DQ1IoY2hubykpOwotCi0JCQlpZiAoaW14ZG1hLT5wcm9nX2hhbmRsZXIpCi0JCQkJaW14ZG1hLT5wcm9nX2hhbmRsZXIoY2hubywgaW14ZG1hLT5kYXRhLAotCQkJCQkJY3VycmVudF9zZyk7Ci0KLQkJCXJldHVybjsKLQkJfQotCi0JCWlmIChpbXhfZG1hX2h3X2NoYWluKGlteGRtYSkpIHsKLQkJCWRlbF90aW1lcigmaW14ZG1hLT53YXRjaGRvZyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQlpbXhfZG1hdjFfd3JpdGVsKDAsIERNQV9DQ1IoY2hubykpOwotCWlteGRtYS0+aW5fdXNlID0gMDsKLQlpZiAoaW14ZG1hLT5pcnFfaGFuZGxlcikKLQkJaW14ZG1hLT5pcnFfaGFuZGxlcihjaG5vLCBpbXhkbWEtPmRhdGEpOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlpbnQgaSwgZGlzcjsKLQotI2lmZGVmIENPTkZJR19BUkNIX01YMgotCWlmIChjcHVfaXNfbXgyMSgpIHx8IGNwdV9pc19teDI3KCkpCi0JCWRtYV9lcnJfaGFuZGxlcihpcnEsIGRldl9pZCk7Ci0jZW5kaWYKLQotCWRpc3IgPSBpbXhfZG1hdjFfcmVhZGwoRE1BX0RJU1IpOwotCi0JcHJfZGVidWcoImlteGRtYTogZG1hX2lycV9oYW5kbGVyIGNhbGxlZCwgZGlzcj0weCUwOHhcbiIsCi0JCSAgICAgZGlzcik7Ci0KLQlpbXhfZG1hdjFfd3JpdGVsKGRpc3IsIERNQV9ESVNSKTsKLQlmb3IgKGkgPSAwOyBpIDwgSU1YX0RNQV9DSEFOTkVMUzsgaSsrKSB7Ci0JCWlmIChkaXNyICYgKDEgPDwgaSkpCi0JCQlkbWFfaXJxX2hhbmRsZV9jaGFubmVsKGkpOwotCX0KLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotLyoqCi0gKiBpbXhfZG1hX3JlcXVlc3QgLSByZXF1ZXN0L2FsbG9jYXRlIHNwZWNpZmllZCBjaGFubmVsIG51bWJlcgotICogQGNoYW5uZWw6IGkuTVggRE1BIGNoYW5uZWwgbnVtYmVyCi0gKiBAbmFtZTogdGhlIGRyaXZlci9jYWxsZXIgb3duIG5vbi0lTlVMTCBpZGVudGlmaWNhdGlvbgotICovCi1pbnQgaW14X2RtYV9yZXF1ZXN0KGludCBjaGFubmVsLCBjb25zdCBjaGFyICpuYW1lKQotewotCXN0cnVjdCBpbXhfZG1hX2NoYW5uZWwgKmlteGRtYSA9ICZpbXhfZG1hX2NoYW5uZWxzW2NoYW5uZWxdOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7Ci0KLQkvKiBiYXNpYyBzYW5pdHkgY2hlY2tzICovCi0JaWYgKCFuYW1lKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChjaGFubmVsID49IElNWF9ETUFfQ0hBTk5FTFMpIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6IGNhbGxlZCBmb3IgIG5vbi1leGlzdGVkIGNoYW5uZWwgJWRcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgY2hhbm5lbCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlpZiAoaW14ZG1hLT5uYW1lKSB7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0JbWVtc2V0KGlteGRtYSwgMCwgc2l6ZW9mKGlteGRtYSkpOwotCWlteGRtYS0+bmFtZSA9IG5hbWU7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyAvKiByZXF1ZXN0X2lycSgpIGNhbiBibG9jayAqLwotCi0jaWZkZWYgQ09ORklHX0FSQ0hfTVgyCi0JaWYgKGNwdV9pc19teDIxKCkgfHwgY3B1X2lzX214MjcoKSkgewotCQlyZXQgPSByZXF1ZXN0X2lycShNWDJ4X0lOVF9ETUFDSDAgKyBjaGFubmVsLAotCQkJCWRtYV9pcnFfaGFuZGxlciwgMCwgIkRNQSIsIE5VTEwpOwotCQlpZiAocmV0KSB7Ci0JCQlpbXhkbWEtPm5hbWUgPSBOVUxMOwotCQkJcHJfY3JpdCgiQ2FuJ3QgcmVnaXN0ZXIgSVJRICVkIGZvciBETUEgY2hhbm5lbCAlZFxuIiwKLQkJCQkJTVgyeF9JTlRfRE1BQ0gwICsgY2hhbm5lbCwgY2hhbm5lbCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JCWluaXRfdGltZXIoJmlteGRtYS0+d2F0Y2hkb2cpOwotCQlpbXhkbWEtPndhdGNoZG9nLmZ1bmN0aW9uID0gJmlteF9kbWFfd2F0Y2hkb2c7Ci0JCWlteGRtYS0+d2F0Y2hkb2cuZGF0YSA9IGNoYW5uZWw7Ci0JfQotI2VuZGlmCi0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChpbXhfZG1hX3JlcXVlc3QpOwotCi0vKioKLSAqIGlteF9kbWFfZnJlZSAtIHJlbGVhc2UgcHJldmlvdXNseSBhY3F1aXJlZCBjaGFubmVsCi0gKiBAY2hhbm5lbDogaS5NWCBETUEgY2hhbm5lbCBudW1iZXIKLSAqLwotdm9pZCBpbXhfZG1hX2ZyZWUoaW50IGNoYW5uZWwpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgaW14X2RtYV9jaGFubmVsICppbXhkbWEgPSAmaW14X2RtYV9jaGFubmVsc1tjaGFubmVsXTsKLQotCWlmICghaW14ZG1hLT5uYW1lKSB7Ci0JCXByaW50ayhLRVJOX0NSSVQKLQkJICAgICAgICIlczogdHJ5aW5nIHRvIGZyZWUgZnJlZSBjaGFubmVsICVkXG4iLAotCQkgICAgICAgX19mdW5jX18sIGNoYW5uZWwpOwotCQlyZXR1cm47Ci0JfQotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLwotCWlteF9kbWFfZGlzYWJsZShjaGFubmVsKTsKLQlpbXhkbWEtPm5hbWUgPSBOVUxMOwotCi0jaWZkZWYgQ09ORklHX0FSQ0hfTVgyCi0JaWYgKGNwdV9pc19teDIxKCkgfHwgY3B1X2lzX214MjcoKSkKLQkJZnJlZV9pcnEoTVgyeF9JTlRfRE1BQ0gwICsgY2hhbm5lbCwgTlVMTCk7Ci0jZW5kaWYKLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLUVYUE9SVF9TWU1CT0woaW14X2RtYV9mcmVlKTsKLQotLyoqCi0gKiBpbXhfZG1hX3JlcXVlc3RfYnlfcHJpbyAtIGZpbmQgYW5kIHJlcXVlc3Qgc29tZSBvZiBmcmVlIGNoYW5uZWxzIGJlc3QKLSAqIHN1aXRpbmcgcmVxdWVzdGVkIHByaW9yaXR5Ci0gKiBAY2hhbm5lbDogaS5NWCBETUEgY2hhbm5lbCBudW1iZXIKLSAqIEBuYW1lOiB0aGUgZHJpdmVyL2NhbGxlciBvd24gbm9uLSVOVUxMIGlkZW50aWZpY2F0aW9uCi0gKgotICogVGhpcyBmdW5jdGlvbiB0cmllcyB0byBmaW5kIGEgZnJlZSBjaGFubmVsIGluIHRoZSBzcGVjaWZpZWQgcHJpb3JpdHkgZ3JvdXAKLSAqIFRoaXMgZnVuY3Rpb24gdHJpZXMgdG8gZmluZCBhIGZyZWUgY2hhbm5lbCBpbiB0aGUgc3BlY2lmaWVkIHByaW9yaXR5IGdyb3VwCi0gKiBpZiB0aGUgcHJpb3JpdHkgY2Fubm90IGJlIGFjaGlldmVkIGl0IHRyaWVzIHRvIGxvb2sgZm9yIGZyZWUgY2hhbm5lbAotICogaW4gdGhlIGhpZ2hlciBhbmQgdGhlbiBldmVuIGxvd2VyIHByaW9yaXR5IGdyb3Vwcy4KLSAqCi0gKiBSZXR1cm4gdmFsdWU6IElmIHRoZXJlIGlzIG5vIGZyZWUgY2hhbm5lbCB0byBhbGxvY2F0ZSwgLSVFTk9ERVYgaXMgcmV0dXJuZWQuCi0gKiAgICAgICAgICAgICAgIE9uIHN1Y2Nlc3NmdWwgYWxsb2NhdGlvbiBjaGFubmVsIGlzIHJldHVybmVkLgotICovCi1pbnQgaW14X2RtYV9yZXF1ZXN0X2J5X3ByaW8oY29uc3QgY2hhciAqbmFtZSwgZW51bSBpbXhfZG1hX3ByaW8gcHJpbykKLXsKLQlpbnQgaTsKLQlpbnQgYmVzdDsKLQotCXN3aXRjaCAocHJpbykgewotCWNhc2UgKERNQV9QUklPX0hJR0gpOgotCQliZXN0ID0gODsKLQkJYnJlYWs7Ci0JY2FzZSAoRE1BX1BSSU9fTUVESVVNKToKLQkJYmVzdCA9IDQ7Ci0JCWJyZWFrOwotCWNhc2UgKERNQV9QUklPX0xPVyk6Ci0JZGVmYXVsdDoKLQkJYmVzdCA9IDA7Ci0JCWJyZWFrOwotCX0KLQotCWZvciAoaSA9IGJlc3Q7IGkgPCBJTVhfRE1BX0NIQU5ORUxTOyBpKyspCi0JCWlmICghaW14X2RtYV9yZXF1ZXN0KGksIG5hbWUpKQotCQkJcmV0dXJuIGk7Ci0KLQlmb3IgKGkgPSBiZXN0IC0gMTsgaSA+PSAwOyBpLS0pCi0JCWlmICghaW14X2RtYV9yZXF1ZXN0KGksIG5hbWUpKQotCQkJcmV0dXJuIGk7Ci0KLQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBmcmVlIERNQSBjaGFubmVsIGZvdW5kXG4iLCBfX2Z1bmNfXyk7Ci0KLQlyZXR1cm4gLUVOT0RFVjsKLX0KLUVYUE9SVF9TWU1CT0woaW14X2RtYV9yZXF1ZXN0X2J5X3ByaW8pOwotCi1zdGF0aWMgaW50IF9faW5pdCBpbXhfZG1hX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0ID0gMDsKLQlpbnQgaTsKLQotI2lmZGVmIENPTkZJR19BUkNIX01YMQotCWlmIChjcHVfaXNfbXgxKCkpCi0JCWlteF9kbWF2MV9iYXNlYWRkciA9IE1YMV9JT19BRERSRVNTKE1YMV9ETUFfQkFTRV9BRERSKTsKLQllbHNlCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfTUFDSF9NWDIxCi0JaWYgKGNwdV9pc19teDIxKCkpCi0JCWlteF9kbWF2MV9iYXNlYWRkciA9IE1YMjFfSU9fQUREUkVTUyhNWDIxX0RNQV9CQVNFX0FERFIpOwotCWVsc2UKLSNlbmRpZgotI2lmZGVmIENPTkZJR19NQUNIX01YMjcKLQlpZiAoY3B1X2lzX214MjcoKSkKLQkJaW14X2RtYXYxX2Jhc2VhZGRyID0gTVgyN19JT19BRERSRVNTKE1YMjdfRE1BX0JBU0VfQUREUik7Ci0JZWxzZQotI2VuZGlmCi0JCUJVRygpOwotCi0JZG1hX2NsayA9IGNsa19nZXQoTlVMTCwgImRtYSIpOwotCWNsa19lbmFibGUoZG1hX2Nsayk7Ci0KLQkvKiByZXNldCBETUEgbW9kdWxlICovCi0JaW14X2RtYXYxX3dyaXRlbChEQ1JfRFJTVCwgRE1BX0RDUik7Ci0KLSNpZmRlZiBDT05GSUdfQVJDSF9NWDEKLQlpZiAoY3B1X2lzX214MSgpKSB7Ci0JCXJldCA9IHJlcXVlc3RfaXJxKE1YMV9ETUFfSU5ULCBkbWFfaXJxX2hhbmRsZXIsIDAsICJETUEiLCBOVUxMKTsKLQkJaWYgKHJldCkgewotCQkJcHJfY3JpdCgiV293ISAgQ2FuJ3QgcmVnaXN0ZXIgSVJRIGZvciBETUFcbiIpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCi0JCXJldCA9IHJlcXVlc3RfaXJxKE1YMV9ETUFfRVJSLCBkbWFfZXJyX2hhbmRsZXIsIDAsICJETUEiLCBOVUxMKTsKLQkJaWYgKHJldCkgewotCQkJcHJfY3JpdCgiV293ISAgQ2FuJ3QgcmVnaXN0ZXIgRVJSSVJRIGZvciBETUFcbiIpOwotCQkJZnJlZV9pcnEoTVgxX0RNQV9JTlQsIE5VTEwpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLSNlbmRpZgotCS8qIGVuYWJsZSBETUEgbW9kdWxlICovCi0JaW14X2RtYXYxX3dyaXRlbChEQ1JfREVOLCBETUFfRENSKTsKLQotCS8qIGNsZWFyIGFsbCBpbnRlcnJ1cHRzICovCi0JaW14X2RtYXYxX3dyaXRlbCgoMSA8PCBJTVhfRE1BX0NIQU5ORUxTKSAtIDEsIERNQV9ESVNSKTsKLQotCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLwotCWlteF9kbWF2MV93cml0ZWwoKDEgPDwgSU1YX0RNQV9DSEFOTkVMUykgLSAxLCBETUFfRElNUik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSU1YX0RNQV9DSEFOTkVMUzsgaSsrKSB7Ci0JCWlteF9kbWFfY2hhbm5lbHNbaV0uc2cgPSBOVUxMOwotCQlpbXhfZG1hX2NoYW5uZWxzW2ldLmRtYV9udW0gPSBpOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLWFyY2hfaW5pdGNhbGwoaW14X2RtYV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2VoY2kuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2VoY2kuYwppbmRleCAyYTg2NDYxNy4uMzVhMDY0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvZWhjaS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2VoY2kuYwpAQCAtMTEsMTAgKzExLDYgQEAKICAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCiAgKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CkBAIC03Myw3ICs2OSw1MSBAQAogaW50IG14Y19pbml0aWFsaXplX3VzYl9odyhpbnQgcG9ydCwgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXVuc2lnbmVkIGludCB2OwotI2lmZGVmIENPTkZJR19BUkNIX01YMworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfTVgyNSkKKwlpZiAoY3B1X2lzX214MjUoKSkgeworCQl2ID0gcmVhZGwoTVgyNV9JT19BRERSRVNTKE1YMjVfT1RHX0JBU0VfQUREUiArCisJCQkJICAgICBVU0JDVFJMX09UR0JBU0VfT0ZGU0VUKSk7CisKKwkJc3dpdGNoIChwb3J0KSB7CisJCWNhc2UgMDoJLyogT1RHIHBvcnQgKi8KKwkJCXYgJj0gfihNWDM1X09UR19TSUNfTUFTSyB8IE1YMzVfT1RHX1BNX0JJVCk7CisJCQl2IHw9IChmbGFncyAmIE1YQ19FSENJX0lOVEVSRkFDRV9NQVNLKQorCQkJCQk8PCBNWDM1X09UR19TSUNfU0hJRlQ7CisJCQlpZiAoIShmbGFncyAmIE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCkpCisJCQkJdiB8PSBNWDM1X09UR19QTV9CSVQ7CisKKwkJCWJyZWFrOworCQljYXNlIDE6IC8qIEgxIHBvcnQgKi8KKwkJCXYgJj0gfihNWDM1X0gxX1NJQ19NQVNLIHwgTVgzNV9IMV9QTV9CSVQgfCBNWDM1X0gxX1RMTF9CSVQgfAorCQkJCU1YMzVfSDFfVVNCVEVfQklUIHwgTVgzNV9IMV9JUFBVRV9ET1dOX0JJVCB8IE1YMzVfSDFfSVBQVUVfVVBfQklUKTsKKwkJCXYgfD0gKGZsYWdzICYgTVhDX0VIQ0lfSU5URVJGQUNFX01BU0spCisJCQkJCQk8PCBNWDM1X0gxX1NJQ19TSElGVDsKKwkJCWlmICghKGZsYWdzICYgTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEKSkKKwkJCQl2IHw9IE1YMzVfSDFfUE1fQklUOworCisJCQlpZiAoIShmbGFncyAmIE1YQ19FSENJX1RUTF9FTkFCTEVEKSkKKwkJCQl2IHw9IE1YMzVfSDFfVExMX0JJVDsKKworCQkJaWYgKGZsYWdzICYgTVhDX0VIQ0lfSU5URVJOQUxfUEhZKQorCQkJCXYgfD0gTVgzNV9IMV9VU0JURV9CSVQ7CisKKwkJCWlmIChmbGFncyAmIE1YQ19FSENJX0lQUFVFX0RPV04pCisJCQkJdiB8PSBNWDM1X0gxX0lQUFVFX0RPV05fQklUOworCisJCQlpZiAoZmxhZ3MgJiBNWENfRUhDSV9JUFBVRV9VUCkKKwkJCQl2IHw9IE1YMzVfSDFfSVBQVUVfVVBfQklUOworCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJd3JpdGVsKHYsIE1YMjVfSU9fQUREUkVTUyhNWDI1X09UR19CQVNFX0FERFIgKworCQkJCSAgICAgVVNCQ1RSTF9PVEdCQVNFX09GRlNFVCkpOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYgLyogQ09ORklHX0FSQ0hfTVgyNSAqLworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfTVgzKQogCWlmIChjcHVfaXNfbXgzMSgpKSB7CiAJCXYgPSByZWFkbChNWDMxX0lPX0FERFJFU1MoTVgzMV9PVEdfQkFTRV9BRERSICsKIAkJCQkgICAgIFVTQkNUUkxfT1RHQkFTRV9PRkZTRVQpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2dwaW8uYwppbmRleCA3MTQzN2M2Li41N2VjNGE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9ncGlvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvZ3Bpby5jCkBAIC0yMTQsMTMgKzIxNCwxNiBAQAogCXN0cnVjdCBteGNfZ3Bpb19wb3J0ICpwb3J0ID0KIAkJY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBteGNfZ3Bpb19wb3J0LCBjaGlwKTsKIAl1MzIgbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAlsID0gX19yYXdfcmVhZGwocG9ydC0+YmFzZSArIEdQSU9fR0RJUik7CiAJaWYgKGRpcikKIAkJbCB8PSAxIDw8IG9mZnNldDsKIAllbHNlCiAJCWwgJj0gfigxIDw8IG9mZnNldCk7CiAJX19yYXdfd3JpdGVsKGwsIHBvcnQtPmJhc2UgKyBHUElPX0dESVIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgbXhjX2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQpAQCAtMjI5LDkgKzIzMiwxMiBAQAogCQljb250YWluZXJfb2YoY2hpcCwgc3RydWN0IG14Y19ncGlvX3BvcnQsIGNoaXApOwogCXZvaWQgX19pb21lbSAqcmVnID0gcG9ydC0+YmFzZSArIEdQSU9fRFI7CiAJdTMyIGw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAJbCA9IChfX3Jhd19yZWFkbChyZWcpICYgKH4oMSA8PCBvZmZzZXQpKSkgfCAodmFsdWUgPDwgb2Zmc2V0KTsKIAlfX3Jhd193cml0ZWwobCwgcmVnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgbXhjX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKQEAgLTI4NSw2ICsyOTEsOCBAQAogCQlwb3J0W2ldLmNoaXAuYmFzZSA9IGkgKiAzMjsKIAkJcG9ydFtpXS5jaGlwLm5ncGlvID0gMzI7CiAKKwkJc3Bpbl9sb2NrX2luaXQoJnBvcnRbaV0ubG9jayk7CisKIAkJLyogaXRzIGEgc2VyaW91cyBjb25maWd1cmF0aW9uIGJ1ZyB3aGVuIGl0IGZhaWxzICovCiAJCUJVR19PTiggZ3Bpb2NoaXBfYWRkKCZwb3J0W2ldLmNoaXApIDwgMCApOwogCkBAIC0yOTIsNiArMzAwLDEyIEBACiAJCQkvKiBzZXR1cCBvbmUgaGFuZGxlciBmb3IgZWFjaCBlbnRyeSAqLwogCQkJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIocG9ydFtpXS5pcnEsIG14M19ncGlvX2lycV9oYW5kbGVyKTsKIAkJCXNldF9pcnFfZGF0YShwb3J0W2ldLmlycSwgJnBvcnRbaV0pOworCQkJaWYgKHBvcnRbaV0uaXJxX2hpZ2gpIHsKKwkJCQkvKiBzZXR1cCBoYW5kbGVyIGZvciBHUElPIDE2IHRvIDMxICovCisJCQkJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIocG9ydFtpXS5pcnFfaGlnaCwKKwkJCQkJCW14M19ncGlvX2lycV9oYW5kbGVyKTsKKwkJCQlzZXRfaXJxX2RhdGEocG9ydFtpXS5pcnFfaGlnaCwgJnBvcnRbaV0pOworCQkJfQogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvM2RzX2RlYnVnYm9hcmQuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC8zZHNfZGVidWdib2FyZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzODRmZGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvM2RzX2RlYnVnYm9hcmQuaApAQCAtMCwwICsxLDE4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqCisgKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqCisgKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NWENfM0RTX0RCX0hfXworI2RlZmluZSBfX0FTTV9BUkNIX01YQ18zRFNfREJfSF9fCisKK2V4dGVybiBpbnQgX19pbml0IG14Y19leHBpb19pbml0KHUzMiBiYXNlLCB1MzIgcF9pcnEpOworCisjZW5kaWYgLyogX19BU01fQVJDSF9NWENfM0RTX0RCX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLWFybWFkaWxsbzV4MC5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLWFybWFkaWxsbzV4MC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzc2YzEzLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1hcm1hZGlsbG81eDAuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwOSBBbGJlcnRvIFBhbml6em8gPG1hcmFtYW9wZXJjaGVzZWltb3J0b0BnbWFpbC5jb20+LgotICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqLwotCi0vKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX0FSTUFESUxMTzVYMF9IX18KLSNkZWZpbmUgX19BU01fQVJDSF9NWENfQk9BUkRfQVJNQURJTExPNVgwX0hfXwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1ldWtyZWFfY3B1aW14MjcuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1ldWtyZWFfY3B1aW14MjcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFmZDU4My4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtZXVrcmVhX2NwdWlteDI3LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEVyaWMgQmVuYXJkIC0gZXJpY0BldWtyZWEuY29tCi0gKgotICogQmFzZWQgb24gYm9hcmQtcGNtMDM4Lmggd2hpY2ggaXMgOgotICogQ29weXJpZ2h0IChDKSAyMDA4IEp1ZXJnZW4gQmVpc2VydCAoa2VybmVsQHBlbmd1dHJvbml4LmRlKQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgotICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAotICogTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9NWENfQk9BUkRfRVVLUkVBX0NQVUlNWDI3X0hfXwotI2RlZmluZSBfX0FTTV9BUkNIX01YQ19CT0FSRF9FVUtSRUFfQ1BVSU1YMjdfSF9fCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0vKgotICogVGhpcyBDUFUgbW9kdWxlIG5lZWRzIGEgYmFzZWJvYXJkIHRvIHdvcmsuIEFmdGVyIGJhc2ljIGluaXRpYWxpemluZwotICogaXRzIG93biBkZXZpY2VzLCBpdCBjYWxscyBiYXNlYm9hcmQncyBpbml0IGZ1bmN0aW9uLgotICogVE9ETzogQWRkIHlvdXIgb3duIGJhc2Vib2FyZCBpbml0IGZ1bmN0aW9uIGFuZCBjYWxsIGl0IGZyb20KLSAqIGluc2lkZSBldWtyZWFfY3B1aW14MjdfaW5pdCgpLgotICoKLSAqIFRoaXMgZXhhbXBsZSBoZXJlIGlzIGZvciB0aGUgZGV2ZWxvcG1lbnQgYm9hcmQuIFJlZmVyCi0gKiBldWtyZWFfbWJpbXgyNy1iYXNlYm9hcmQuYwotICovCi0KLWV4dGVybiB2b2lkIGV1a3JlYV9tYmlteDI3X2Jhc2Vib2FyZF9pbml0KHZvaWQpOwotCi0jZW5kaWYKLQotI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX0VVS1JFQV9DUFVJTVgyN19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1rem1hcm0xMS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLWt6bWFybTExLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzY2M2NmYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLWt6bWFybTExLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwOSAgWW9pY2hpIFl1YXNhIDx5dWFzYUBsaW51eC1taXBzLm9yZz4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSAqLwotI2lmbmRlZiBfX0FSTV9BUkNIX0JPQVJEX0taTV9BUk0xMV9ICi0jZGVmaW5lIF9fQVJNX0FSQ0hfQk9BUkRfS1pNX0FSTTExX0gKLQotLyoKLSAqICBLWk0tQVJNMTEtMDEgQm9hcmQgQ29udHJvbCBSZWdpc3RlcnMgb24gRlBHQQotICovCi0jZGVmaW5lIEtaTV9BUk0xMV9DVEwxCQkoTVgzMV9DUzRfQkFTRV9BRERSICsgMHgxMDAwKQotI2RlZmluZSBLWk1fQVJNMTFfQ1RMMgkJKE1YMzFfQ1M0X0JBU0VfQUREUiArIDB4MTAwMSkKLSNkZWZpbmUgS1pNX0FSTTExX1JTVzEJCShNWDMxX0NTNF9CQVNFX0FERFIgKyAweDEwMDIpCi0jZGVmaW5lIEtaTV9BUk0xMV9CQUNLX0xJR0hUCShNWDMxX0NTNF9CQVNFX0FERFIgKyAweDEwMDQpCi0jZGVmaW5lIEtaTV9BUk0xMV9GUEdBX1JFVgkoTVgzMV9DUzRfQkFTRV9BRERSICsgMHgxMDA4KQotI2RlZmluZSBLWk1fQVJNMTFfN1NFR19MRUQJKE1YMzFfQ1M0X0JBU0VfQUREUiArIDB4MTAxMCkKLSNkZWZpbmUgS1pNX0FSTTExX0xFRFMJCShNWDMxX0NTNF9CQVNFX0FERFIgKyAweDEwMjApCi0jZGVmaW5lIEtaTV9BUk0xMV9ESVBTVzIJKE1YMzFfQ1M0X0JBU0VfQUREUiArIDB4MTAwMykKLQotLyoKLSAqIEV4dGVybmFsIFVBUlQgZm9yIHRvdWNoIHBhbmVsIG9uIEZQR0EKLSAqLwotI2RlZmluZSBLWk1fQVJNMTFfMTY1NTAJCShNWDMxX0NTNF9CQVNFX0FERFIgKyAweDEwNTApCi0KLSNlbmRpZiAvKiBfX0FSTV9BUkNIX0JPQVJEX0taTV9BUk0xMV9IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDIxYWRzLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgyMWFkcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2Y0ZmEyLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDIxYWRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDUtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICovCi0KLS8qCi0gKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKLSAqCi0gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9NWENfQk9BUkRfTVgyMUFEU19IX18KLSNkZWZpbmUgX19BU01fQVJDSF9NWENfQk9BUkRfTVgyMUFEU19IX18KLQotLyoKLSAqIE1lbW9yeS1tYXBwZWQgSS9PIG9uIE1YMjFBRFMgYmFzZSBib2FyZAotICovCi0jZGVmaW5lIE1YMjFBRFNfTU1JT19CQVNFX0FERFIgICAweEY1MDAwMDAwCi0jZGVmaW5lIE1YMjFBRFNfTU1JT19TSVpFICAgICAgICBTWl8xNk0KLQotI2RlZmluZSBNWDIxQURTX1JFR19BRERSKG9mZnNldCkgICAgKHZvaWQgX19mb3JjZSBfX2lvbWVtICopIFwKLQkJKE1YMjFBRFNfTU1JT19CQVNFX0FERFIgKyAob2Zmc2V0KSkKLQotI2RlZmluZSBNWDIxQURTX0NTODkwMEFfSVJRICAgICAgICAgSVJRX0dQSU9FKDExKQotI2RlZmluZSBNWDIxQURTX0NTODkwMEFfSU9CQVNFX1JFRyAgTVgyMUFEU19SRUdfQUREUigweDAwMDAwMCkKLSNkZWZpbmUgTVgyMUFEU19TVDE2QzI1NV9JT0JBU0VfUkVHIE1YMjFBRFNfUkVHX0FERFIoMHgyMDAwMDApCi0jZGVmaW5lIE1YMjFBRFNfVkVSU0lPTl9SRUcgICAgICAgICBNWDIxQURTX1JFR19BRERSKDB4NDAwMDAwKQotI2RlZmluZSBNWDIxQURTX0lPX1JFRyAgICAgICAgICAgICAgTVgyMUFEU19SRUdfQUREUigweDgwMDAwMCkKLQotLyogTVgyMUFEU19JT19SRUcgYml0IGRlZmluaXRpb25zICovCi0jZGVmaW5lIE1YMjFBRFNfSU9fU0RfV1AgICAgICAgIDB4MDAwMSAvKiByZWFkICovCi0jZGVmaW5lIE1YMjFBRFNfSU9fVFA2ICAgICAgICAgIDB4MDAwMSAvKiB3cml0ZSAqLwotI2RlZmluZSBNWDIxQURTX0lPX1NXX1NFTCAgICAgICAweDAwMDIgLyogcmVhZCAqLwotI2RlZmluZSBNWDIxQURTX0lPX1RQNyAgICAgICAgICAweDAwMDIgLyogd3JpdGUgKi8KLSNkZWZpbmUgTVgyMUFEU19JT19SRVNFVF9FX1VBUlQgMHgwMDA0Ci0jZGVmaW5lIE1YMjFBRFNfSU9fUkVTRVRfQkFTRSAgIDB4MDAwOAotI2RlZmluZSBNWDIxQURTX0lPX0NTSV9DVEwyICAgICAweDAwMTAKLSNkZWZpbmUgTVgyMUFEU19JT19DU0lfQ1RMMSAgICAgMHgwMDIwCi0jZGVmaW5lIE1YMjFBRFNfSU9fQ1NJX0NUTDAgICAgIDB4MDA0MAotI2RlZmluZSBNWDIxQURTX0lPX1VBUlQxX0VOICAgICAweDAwODAKLSNkZWZpbmUgTVgyMUFEU19JT19VQVJUNF9FTiAgICAgMHgwMTAwCi0jZGVmaW5lIE1YMjFBRFNfSU9fTENET04gICAgICAgIDB4MDIwMAotI2RlZmluZSBNWDIxQURTX0lPX0lSREFfRU4gICAgICAweDA0MDAKLSNkZWZpbmUgTVgyMUFEU19JT19JUkRBX0ZJUl9TRUwgMHgwODAwCi0jZGVmaW5lIE1YMjFBRFNfSU9fSVJEQV9NRDBfQiAgIDB4MTAwMAotI2RlZmluZSBNWDIxQURTX0lPX0lSREFfTUQxICAgICAweDIwMDAKLSNkZWZpbmUgTVgyMUFEU19JT19MRUQ0X09OICAgICAgMHg0MDAwCi0jZGVmaW5lIE1YMjFBRFNfSU9fTEVEM19PTiAgICAgIDB4ODAwMAotCi0jZW5kaWYJCQkJLyogX19BU01fQVJDSF9NWENfQk9BUkRfTVgyMUFEU19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDI3YWRzLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgyN2Fkcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Nzc2ZDIzLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDI3YWRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA1LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqLwotCi0vKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6Ci0gKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKLSAqLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMjdBRFNfSF9fCi0jZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMjdBRFNfSF9fCi0KLS8qIGV4dGVybmFsIGludGVycnVwdCBtdWx0aXBsZXhlciAqLwotI2RlZmluZSBNWENfRVhQX0lPX0JBU0UJCShNWENfQk9BUkRfSVJRX1NUQVJUKQotCi0jZGVmaW5lIE1YQ19WSVJUVUFMX0lOVFNfQkFTRQkoTVhDX0VYUF9JT19CQVNFICsgTVhDX01BWF9FWFBfSU9fTElORVMpCi0jZGVmaW5lIE1YQ19TRElPMV9DQVJEX0lSUQlNWENfVklSVFVBTF9JTlRTX0JBU0UKLSNkZWZpbmUgTVhDX1NESU8yX0NBUkRfSVJRCShNWENfVklSVFVBTF9JTlRTX0JBU0UgKyAxKQotI2RlZmluZSBNWENfU0RJTzNfQ0FSRF9JUlEJKE1YQ19WSVJUVUFMX0lOVFNfQkFTRSArIDIpCi0KLSNkZWZpbmUgTVhDX01BWF9CT0FSRF9JTlRTICAgICAgKE1YQ19NQVhfRVhQX0lPX0xJTkVTICsgXAotCQkJCU1YQ19NQVhfVklSVFVBTF9JTlRTKQotCi0vKgotICogQG5hbWUgTWVtb3J5IFNpemUgcGFyYW1ldGVycwotICovCi0KLS8qCi0gKiBTaXplIG9mIFNEUkFNIG1lbW9yeQotICovCi0jZGVmaW5lIFNEUkFNX01FTV9TSVpFICAgICAgICAgIFNaXzEyOE0KLQotLyoKLSAqIFBCQyBDb250cm9sbGVyIHBhcmFtZXRlcnMKLSAqLwotCi0vKgotICogQmFzZSBhZGRyZXNzIG9mIFBCQyBjb250cm9sbGVyLCBDUzQKLSAqLwotI2RlZmluZSBQQkNfQkFTRV9BRERSRVNTICAgICAgICAweGY0MzAwMDAwCi0jZGVmaW5lIFBCQ19SRUdfQUREUihvZmZzZXQpICAgICh2b2lkIF9fZm9yY2UgX19pb21lbSAqKSBcCi0JCShQQkNfQkFTRV9BRERSRVNTICsgKG9mZnNldCkpCi0KLS8qCi0gKiBQQkMgSW50ZXJ1cHQgbmFtZSBkZWZpbml0aW9ucwotICovCi0jZGVmaW5lIFBCQ19HUElPMV8wICAwCi0jZGVmaW5lIFBCQ19HUElPMV8xICAxCi0jZGVmaW5lIFBCQ19HUElPMV8yICAyCi0jZGVmaW5lIFBCQ19HUElPMV8zICAzCi0jZGVmaW5lIFBCQ19HUElPMV80ICA0Ci0jZGVmaW5lIFBCQ19HUElPMV81ICA1Ci0KLSNkZWZpbmUgUEJDX0lOVFJfTUFYX05VTSA2Ci0jZGVmaW5lIFBCQ19JTlRSX1NIQVJFRF9NQVhfTlVNIDgKLQotLyogV2hlbiB0aGUgUEJDIGFkZHJlc3MgY29ubmVjdGlvbiBpcyBmaXhlZCBpbiBoL3csIGRlZmluZWQgYXMgMSAqLwotI2RlZmluZSBQQkNfQUREUl9TSCAgICAgICAgICAgICAwCi0KLS8qIE9mZnNldHMgZm9yIHRoZSBQQkMgQ29udHJvbGxlciByZWdpc3RlciAqLwotLyoKLSAqIFBCQyBCb2FyZCB2ZXJzaW9uIHJlZ2lzdGVyIG9mZnNldAotICovCi0jZGVmaW5lIFBCQ19WRVJTSU9OX1JFRyAgICAgICAgIFBCQ19SRUdfQUREUigweDAwMDAwID4+IFBCQ19BRERSX1NIKQotLyoKLSAqIFBCQyBCb2FyZCBjb250cm9sIHJlZ2lzdGVyIDEgc2V0IGFkZHJlc3MuCi0gKi8KLSNkZWZpbmUgUEJDX0JDVFJMMV9TRVRfUkVHICAgICAgUEJDX1JFR19BRERSKDB4MDAwMDggPj4gUEJDX0FERFJfU0gpCi0vKgotICogUEJDIEJvYXJkIGNvbnRyb2wgcmVnaXN0ZXIgMSBjbGVhciBhZGRyZXNzLgotICovCi0jZGVmaW5lIFBCQ19CQ1RSTDFfQ0xFQVJfUkVHICAgIFBCQ19SRUdfQUREUigweDAwMDBDID4+IFBCQ19BRERSX1NIKQotLyoKLSAqIFBCQyBCb2FyZCBjb250cm9sIHJlZ2lzdGVyIDIgc2V0IGFkZHJlc3MuCi0gKi8KLSNkZWZpbmUgUEJDX0JDVFJMMl9TRVRfUkVHICAgICAgUEJDX1JFR19BRERSKDB4MDAwMTAgPj4gUEJDX0FERFJfU0gpCi0vKgotICogUEJDIEJvYXJkIGNvbnRyb2wgcmVnaXN0ZXIgMiBjbGVhciBhZGRyZXNzLgotICovCi0jZGVmaW5lIFBCQ19CQ1RSTDJfQ0xFQVJfUkVHICAgIFBCQ19SRUdfQUREUigweDAwMDE0ID4+IFBCQ19BRERSX1NIKQotLyoKLSAqIFBCQyBCb2FyZCBjb250cm9sIHJlZ2lzdGVyIDMgc2V0IGFkZHJlc3MuCi0gKi8KLSNkZWZpbmUgUEJDX0JDVFJMM19TRVRfUkVHICAgICAgUEJDX1JFR19BRERSKDB4MDAwMTggPj4gUEJDX0FERFJfU0gpCi0vKgotICogUEJDIEJvYXJkIGNvbnRyb2wgcmVnaXN0ZXIgMyBjbGVhciBhZGRyZXNzLgotICovCi0jZGVmaW5lIFBCQ19CQ1RSTDNfQ0xFQVJfUkVHICAgIFBCQ19SRUdfQUREUigweDAwMDFDID4+IFBCQ19BRERSX1NIKQotLyoKLSAqIFBCQyBCb2FyZCBjb250cm9sIHJlZ2lzdGVyIDMgc2V0IGFkZHJlc3MuCi0gKi8KLSNkZWZpbmUgUEJDX0JDVFJMNF9TRVRfUkVHICAgICAgUEJDX1JFR19BRERSKDB4MDAwMjAgPj4gUEJDX0FERFJfU0gpCi0vKgotICogUEJDIEJvYXJkIGNvbnRyb2wgcmVnaXN0ZXIgNCBjbGVhciBhZGRyZXNzLgotICovCi0jZGVmaW5lIFBCQ19CQ1RSTDRfQ0xFQVJfUkVHICAgIFBCQ19SRUdfQUREUigweDAwMDI0ID4+IFBCQ19BRERSX1NIKQotLypQQkNfQUREUl9TSAotICogUEJDIEJvYXJkIHN0YXR1cyByZWdpc3RlciAxLgotICovCi0jZGVmaW5lIFBCQ19CU1RBVDFfUkVHICAgICAgICAgIFBCQ19SRUdfQUREUigweDAwMDI4ID4+IFBCQ19BRERSX1NIKQotLyoKLSAqIFBCQyBCb2FyZCBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyLgotICovCi0jZGVmaW5lIFBCQ19JTlRTVEFUVVNfUkVHICAgICAgIFBCQ19SRUdfQUREUigweDAwMDJDID4+IFBCQ19BRERSX1NIKQotLyoKLSAqIFBCQyBCb2FyZCBpbnRlcnJ1cHQgY3VycmVudCBzdGF0dXMgcmVnaXN0ZXIuCi0gKi8KLSNkZWZpbmUgUEJDX0lOVENVUlJfU1RBVFVTX1JFRyAgUEJDX1JFR19BRERSKDB4MDAwMzQgPj4gUEJDX0FERFJfU0gpCi0vKgotICogUEJDIEludGVycnVwdCBtYXNrIHJlZ2lzdGVyIHNldCBhZGRyZXNzLgotICovCi0jZGVmaW5lIFBCQ19JTlRNQVNLX1NFVF9SRUcgICAgIFBCQ19SRUdfQUREUigweDAwMDM4ID4+IFBCQ19BRERSX1NIKQotLyoKLSAqIFBCQyBJbnRlcnJ1cHQgbWFzayByZWdpc3RlciBjbGVhciBhZGRyZXNzLgotICovCi0jZGVmaW5lIFBCQ19JTlRNQVNLX0NMRUFSX1JFRyAgIFBCQ19SRUdfQUREUigweDAwMDNDID4+IFBCQ19BRERSX1NIKQotLyoKLSAqIEV4dGVybmFsIFVBUlQgQS4KLSAqLwotI2RlZmluZSBQQkNfU0MxNkM2NTJfVUFSVEFfUkVHICBQQkNfUkVHX0FERFIoMHgyMDAwMCA+PiBQQkNfQUREUl9TSCkKLS8qCi0gKiBVQVJUIDQgRXhwYW5kaW5nIFNpZ25hbCBTdGF0dXMuCi0gKi8KLSNkZWZpbmUgUEJDX1VBUlRfU1RBVFVTX1JFRyAgICAgUEJDX1JFR19BRERSKDB4MjIwMDAgPj4gUEJDX0FERFJfU0gpCi0vKgotICogVUFSVCA0IEV4cGFuZGluZyBTaWduYWwgQ29udHJvbCBTZXQuCi0gKi8KLSNkZWZpbmUgUEJDX1VDVFJMX1NFVF9SRUcgICAgICAgUEJDX1JFR19BRERSKDB4MjQwMDAgPj4gUEJDX0FERFJfU0gpCi0vKgotICogVUFSVCA0IEV4cGFuZGluZyBTaWduYWwgQ29udHJvbCBDbGVhci4KLSAqLwotI2RlZmluZSBQQkNfVUNUUkxfQ0xSX1JFRyAgICAgICBQQkNfUkVHX0FERFIoMHgyNjAwMCA+PiBQQkNfQUREUl9TSCkKLS8qCi0gKiBFdGhlcm5ldCBDb250cm9sbGVyIElPIGJhc2UgYWRkcmVzcy4KLSAqLwotI2RlZmluZSBQQkNfQ1M4OTAwQV9JT0JBU0VfUkVHICBQQkNfUkVHX0FERFIoMHg0MDAwMCA+PiBQQkNfQUREUl9TSCkKLS8qCi0gKiBFdGhlcm5ldCBDb250cm9sbGVyIE1lbW9yeSBiYXNlIGFkZHJlc3MuCi0gKi8KLSNkZWZpbmUgUEJDX0NTODkwMEFfTUVNQkFTRV9SRUcgUEJDX1JFR19BRERSKDB4NDIwMDAgPj4gUEJDX0FERFJfU0gpCi0vKgotICogRXRoZXJuZXQgQ29udHJvbGxlciBETUEgYmFzZSBhZGRyZXNzLgotICovCi0jZGVmaW5lIFBCQ19DUzg5MDBBX0RNQUJBU0VfUkVHIFBCQ19SRUdfQUREUigweDQ0MDAwID4+IFBCQ19BRERSX1NIKQotCi0vKiBQQkMgQm9hcmQgVmVyc2lvbiBSZWdpc3RlciBiaXQgZGVmaW5pdGlvbiAqLwotI2RlZmluZSBQQkNfVkVSU0lPTl9BRFMgICAgICAgICAweDgwMDAJLyogQml0MTU9MSBtZWFucyB2ZXJzaW9uIGZvciBhZHMgKi8KLSNkZWZpbmUgUEJDX1ZFUlNJT05fRVZCX1JFVkIgICAgMHg0MDAwCS8qIEJJVDE0PTEgbWVhbnMgdmVyc2lvbiBmb3IgZXZiIHJldmIgKi8KLQotLyogUEJDIEJvYXJkIENvbnRyb2wgUmVnaXN0ZXIgMSBiaXQgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgUEJDX0JDVFJMMV9FUlNUICAgICAgICAgMHgwMDAxCS8qIEV0aGVybmV0IFJlc2V0ICovCi0jZGVmaW5lIFBCQ19CQ1RSTDFfVVJTVCAgICAgICAgIDB4MDAwMgkvKiBSZXNldCBFeHRlcm5hbCBVQVJUIGNvbnRyb2xsZXIgKi8KLSNkZWZpbmUgUEJDX0JDVFJMMV9GUlNUICAgICAgICAgMHgwMDA0CS8qIEZFQyBSZXNldCAqLwotI2RlZmluZSBQQkNfQkNUUkwxX0VTTEVFUCAgICAgICAweDAwMTAJLyogRW5hYmxlIGV0aGVybmV0IFNsZWVwICovCi0jZGVmaW5lIFBCQ19CQ1RSTDFfTENET04gICAgICAgIDB4MDgwMAkvKiBFbmFibGUgdGhlIExDRCAqLwotCi0vKiBQQkMgQm9hcmQgQ29udHJvbCBSZWdpc3RlciAyIGJpdCBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBQQkNfQkNUUkwyX1ZDQ19FTiAgICAgICAweDAwMDQJLyogICBFbmFibGUgVkNDICovCi0jZGVmaW5lIFBCQ19CQ1RSTDJfVlBQX0VOICAgICAgIDB4MDAwOAkvKiAgIEVuYWJsZSBWcHAgKi8KLSNkZWZpbmUgUEJDX0JDVFJMMl9BVEFGRUNfRU4gICAgMFgwMDEwCi0jZGVmaW5lIFBCQ19CQ1RSTDJfQVRBRkVDX1NFTCAgIDBYMDAyMAotI2RlZmluZSBQQkNfQkNUUkwyX0FUQV9FTiAgICAgICAwWDAwNDAKLSNkZWZpbmUgUEJDX0JDVFJMMl9JUkRBX1NEICAgICAgMFgwMDgwCi0jZGVmaW5lIFBCQ19CQ1RSTDJfSVJEQV9FTiAgICAgIDBYMDEwMAotI2RlZmluZSBQQkNfQkNUUkwyX0NDVEwxMCAgICAgICAwWDAyMDAKLSNkZWZpbmUgUEJDX0JDVFJMMl9DQ1RMMTEgICAgICAgMFgwNDAwCi0KLS8qIFBCQyBCb2FyZCBDb250cm9sIFJlZ2lzdGVyIDMgYml0IGRlZmluaXRpb25zICovCi0jZGVmaW5lIFBCQ19CQ1RSTDNfSFNIX0VOICAgICAgIDBYMDAyMAotI2RlZmluZSBQQkNfQkNUUkwzX0ZTSF9NT0QgICAgICAwWDAwNDAKLSNkZWZpbmUgUEJDX0JDVFJMM19PVEdfSFNfRU4gICAgMFgwMDgwCi0jZGVmaW5lIFBCQ19CQ1RSTDNfT1RHX1ZCVVNfRU4gIDBYMDEwMAotI2RlZmluZSBQQkNfQkNUUkwzX0ZTSF9WQlVTX0VOICAwWDAyMDAKLSNkZWZpbmUgUEJDX0JDVFJMM19VU0JfT1RHX09OICAgMFgwODAwCi0jZGVmaW5lIFBCQ19CQ1RSTDNfVVNCX0ZTSF9PTiAgIDBYMTAwMAotCi0vKiBQQkMgQm9hcmQgQ29udHJvbCBSZWdpc3RlciA0IGJpdCBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBQQkNfQkNUUkw0X1JFR0VOX1NFTCAgICAwWDAwMDEKLSNkZWZpbmUgUEJDX0JDVFJMNF9VU0VSX09GRiAgICAgMFgwMDAyCi0jZGVmaW5lIFBCQ19CQ1RSTDRfVklCX0VOICAgICAgIDBYMDAwNAotI2RlZmluZSBQQkNfQkNUUkw0X1BXUkdUMV9FTiAgICAwWDAwMDgKLSNkZWZpbmUgUEJDX0JDVFJMNF9QV1JHVDJfRU4gICAgMFgwMDEwCi0jZGVmaW5lIFBCQ19CQ1RSTDRfU1REQllfUFJJICAgIDBYMDAyMAotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotLyoKLSAqIEVudW1lcmF0aW9ucyBmb3IgU0QgY2FyZHMgYW5kIG1lbW9yeSBzdGljayBjYXJkLiBUaGlzIGNvcnJlc3BvbmRzIHRvCi0gKiB0aGUgY2FyZCBFTiBiaXRzIGluIHRoZSBJTVI6IFNEMV9FTiB8IE1TX0VOIHwgU0QzX0VOIHwgU0QyX0VOLgotICovCi1lbnVtIG14Y19jYXJkX25vIHsKLQlNWENfQ0FSRF9TRDIgPSAwLAotCU1YQ19DQVJEX1NEMywKLQlNWENfQ0FSRF9NUywKLQlNWENfQ0FSRF9TRDEsCi0JTVhDX0NBUkRfTUlOID0gTVhDX0NBUkRfU0QyLAotCU1YQ19DQVJEX01BWCA9IE1YQ19DQVJEX1NEMSwKLX07Ci0jZW5kaWYKLQotI2RlZmluZSBNWENfQ1BMRF9WRVJfMV81MCAgICAgICAweDAxCi0KLS8qCi0gKiBQQkMgQlNUQVQgUmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCi0gKi8KLSNkZWZpbmUgUEJDX0JTVEFUX1BSSV9JTlQgICAgICAgMFgwMDAxCi0jZGVmaW5lIFBCQ19CU1RBVF9VU0JfQllQICAgICAgIDBYMDAwMgotI2RlZmluZSBQQkNfQlNUQVRfQVRBX0lPQ1MxNiAgICAwWDAwMDQKLSNkZWZpbmUgUEJDX0JTVEFUX0FUQV9DQkxJRCAgICAgMFgwMDA4Ci0jZGVmaW5lIFBCQ19CU1RBVF9BVEFfREFTUCAgICAgIDBYMDAxMAotI2RlZmluZSBQQkNfQlNUQVRfUFdSX1JEWSAgICAgICAwWDAwMjAKLSNkZWZpbmUgUEJDX0JTVEFUX1NEM19XUCAgICAgICAgMFgwMTAwCi0jZGVmaW5lIFBCQ19CU1RBVF9TRDJfV1AgICAgICAgIDBYMDIwMAotI2RlZmluZSBQQkNfQlNUQVRfU0QxX1dQICAgICAgICAwWDA0MDAKLSNkZWZpbmUgUEJDX0JTVEFUX1NEM19ERVQgICAgICAgMFgwODAwCi0jZGVmaW5lIFBCQ19CU1RBVF9TRDJfREVUICAgICAgIDBYMTAwMAotI2RlZmluZSBQQkNfQlNUQVRfU0QxX0RFVCAgICAgICAwWDIwMDAKLSNkZWZpbmUgUEJDX0JTVEFUX01TX0RFVCAgICAgICAgMFg0MDAwCi0jZGVmaW5lIFBCQ19CU1RBVF9TRDNfREVUX0JJVCAgIDExCi0jZGVmaW5lIFBCQ19CU1RBVF9TRDJfREVUX0JJVCAgIDEyCi0jZGVmaW5lIFBCQ19CU1RBVF9TRDFfREVUX0JJVCAgIDEzCi0jZGVmaW5lIFBCQ19CU1RBVF9NU19ERVRfQklUICAgIDE0Ci0jZGVmaW5lIE1YQ19CU1RBVF9CSVQobikgICAgICAgICgobiA9PSBNWENfQ0FSRF9TRDIpID8gUEJDX0JTVEFUX1NEMl9ERVQgOiBcCi0JCQkJICgobiA9PSBNWENfQ0FSRF9TRDMpID8gUEJDX0JTVEFUX1NEM19ERVQgOiBcCi0JCQkJICgobiA9PSBNWENfQ0FSRF9TRDEpID8gUEJDX0JTVEFUX1NEMV9ERVQgOiBcCi0JCQkJICgobiA9PSBNWENfQ0FSRF9NUykgPyBQQkNfQlNUQVRfTVNfREVUIDogXAotCQkJCQkweDApKSkpCi0KLS8qCi0gKiBQQkMgVUFSVCBDb250cm9sIFJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucwotICovCi0jZGVmaW5lIFBCQ19VQ1RSTF9EQ0VfRENEICAgICAgIDBYMDAwMQotI2RlZmluZSBQQkNfVUNUUkxfRENFX0RTUiAgICAgICAwWDAwMDIKLSNkZWZpbmUgUEJDX1VDVFJMX0RDRV9SSSAgICAgICAgMFgwMDA0Ci0jZGVmaW5lIFBCQ19VQ1RSTF9EVEVfRFRSICAgICAgIDBYMDEwMAotCi0vKgotICogUEJDIFVBUlQgU3RhdHVzIFJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucwotICovCi0jZGVmaW5lIFBCQ19VU1RBVF9EVEVfRENEICAgICAgIDBYMDAwMQotI2RlZmluZSBQQkNfVVNUQVRfRFRFX0RTUiAgICAgICAwWDAwMDIKLSNkZWZpbmUgUEJDX1VTVEFUX0RURV9SSSAgICAgICAgMFgwMDA0Ci0jZGVmaW5lIFBCQ19VU1RBVF9EQ0VfRFRSICAgICAgIDBYMDEwMAotCi0vKgotICogUEJDIEludGVydXB0IG1hc2sgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCi0gKi8KLSNkZWZpbmUgUEJDX0lOVFJfU0QzX1JfRU5fQklUICAgNAotI2RlZmluZSBQQkNfSU5UUl9TRDJfUl9FTl9CSVQgICAwCi0jZGVmaW5lIFBCQ19JTlRSX1NEMV9SX0VOX0JJVCAgIDYKLSNkZWZpbmUgUEJDX0lOVFJfTVNfUl9FTl9CSVQgICAgNQotI2RlZmluZSBQQkNfSU5UUl9TRDNfRU5fQklUICAgICAxMwotI2RlZmluZSBQQkNfSU5UUl9TRDJfRU5fQklUICAgICAxMgotI2RlZmluZSBQQkNfSU5UUl9NU19FTl9CSVQgICAgICAxNAotI2RlZmluZSBQQkNfSU5UUl9TRDFfRU5fQklUICAgICAxNQotCi0jZGVmaW5lIFBCQ19JTlRSX1NEMl9SX0VOICAgICAgIDB4MDAwMQotI2RlZmluZSBQQkNfSU5UUl9MT1dfQkFUICAgICAgICAwWDAwMDIKLSNkZWZpbmUgUEJDX0lOVFJfT1RHX0ZTT1ZFUiAgICAgMFgwMDA0Ci0jZGVmaW5lIFBCQ19JTlRSX0ZTSF9PVkVSICAgICAgIDBYMDAwOAotI2RlZmluZSBQQkNfSU5UUl9TRDNfUl9FTiAgICAgICAweDAwMTAKLSNkZWZpbmUgUEJDX0lOVFJfTVNfUl9FTiAgICAgICAgMHgwMDIwCi0jZGVmaW5lIFBCQ19JTlRSX1NEMV9SX0VOICAgICAgIDB4MDA0MAotI2RlZmluZSBQQkNfSU5UUl9GRUNfSU5UICAgICAgICAwWDAwODAKLSNkZWZpbmUgUEJDX0lOVFJfRU5FVF9JTlQgICAgICAgMFgwMTAwCi0jZGVmaW5lIFBCQ19JTlRSX09UR0ZTX0lOVCAgICAgIDBYMDIwMAotI2RlZmluZSBQQkNfSU5UUl9YVUFSVF9JTlQgICAgICAwWDA0MDAKLSNkZWZpbmUgUEJDX0lOVFJfQ0NUTDEyICAgICAgICAgMFgwODAwCi0jZGVmaW5lIFBCQ19JTlRSX1NEMl9FTiAgICAgICAgIDB4MTAwMAotI2RlZmluZSBQQkNfSU5UUl9TRDNfRU4gICAgICAgICAweDIwMDAKLSNkZWZpbmUgUEJDX0lOVFJfTVNfRU4gICAgICAgICAgMHg0MDAwCi0jZGVmaW5lIFBCQ19JTlRSX1NEMV9FTiAgICAgICAgIDB4ODAwMAotCi0KLQotLyogRm9yIGludGVycnVwdHMgbGlrZSB4dWFydCwgZW5ldCBldGMgKi8KLSNkZWZpbmUgRVhQSU9fUEFSRU5UX0lOVCAgICAgICAgSU9NVVhfVE9fSVJRKE1YMjdfUElOX1RJTikKLSNkZWZpbmUgTVhDX01BWF9FWFBfSU9fTElORVMgICAgMTYKLQotLyoKLSAqIFRoaXMgY29ycmVzcG9uZHMgdG8gUEJDX0lOVE1BU0tfU0VUX1JFRyBhdCBvZmZzZXQgMHgzOC4KLSAqCi0gKi8KLSNkZWZpbmUgRVhQSU9fSU5UX0xPV19CQVQgICAgICAgKE1YQ19FWFBfSU9fQkFTRSArIDEpCi0jZGVmaW5lIEVYUElPX0lOVF9PVEdfRlNfT1ZSICAgIChNWENfRVhQX0lPX0JBU0UgKyAyKQotI2RlZmluZSBFWFBJT19JTlRfRlNIX09WUiAgICAgICAoTVhDX0VYUF9JT19CQVNFICsgMykKLSNkZWZpbmUgRVhQSU9fSU5UX1JFUzQgICAgICAgICAgKE1YQ19FWFBfSU9fQkFTRSArIDQpCi0jZGVmaW5lIEVYUElPX0lOVF9SRVM1ICAgICAgICAgIChNWENfRVhQX0lPX0JBU0UgKyA1KQotI2RlZmluZSBFWFBJT19JTlRfUkVTNiAgICAgICAgICAoTVhDX0VYUF9JT19CQVNFICsgNikKLSNkZWZpbmUgRVhQSU9fSU5UX0ZFQyAgICAgICAgICAgKE1YQ19FWFBfSU9fQkFTRSArIDcpCi0jZGVmaW5lIEVYUElPX0lOVF9FTkVUX0lOVCAgICAgIChNWENfRVhQX0lPX0JBU0UgKyA4KQotI2RlZmluZSBFWFBJT19JTlRfT1RHX0ZTX0lOVCAgICAoTVhDX0VYUF9JT19CQVNFICsgOSkKLSNkZWZpbmUgRVhQSU9fSU5UX1hVQVJUX0lOVEEgICAgKE1YQ19FWFBfSU9fQkFTRSArIDEwKQotI2RlZmluZSBFWFBJT19JTlRfQ0NUTDEyX0lOVCAgICAoTVhDX0VYUF9JT19CQVNFICsgMTEpCi0jZGVmaW5lIEVYUElPX0lOVF9TRDJfRU4gICAgICAgIChNWENfRVhQX0lPX0JBU0UgKyAxMikKLSNkZWZpbmUgRVhQSU9fSU5UX1NEM19FTiAgICAgICAgKE1YQ19FWFBfSU9fQkFTRSArIDEzKQotI2RlZmluZSBFWFBJT19JTlRfTVNfRU4gICAgICAgICAoTVhDX0VYUF9JT19CQVNFICsgMTQpCi0jZGVmaW5lIEVYUElPX0lOVF9TRDFfRU4gICAgICAgIChNWENfRVhQX0lPX0JBU0UgKyAxNSkKLQotLyoKLSAqIFRoaXMgaXMgU3lzdGVtIElSUSB1c2VkIGJ5IENTODkwMEEgZm9yIGludGVycnVwdCBnZW5lcmF0aW9uCi0gKiB0YWtlbiBmcm9tIHBsYXRmb3JtLmgKLSAqLwotI2RlZmluZSBDUzg5MDBBSVJRICAgICAgICAgICAgICBFWFBJT19JTlRfRU5FVF9JTlQKLS8qIFRoaXMgaXMgSS9PIEJhc2UgYWRkcmVzcyB1c2VkIHRvIGFjY2VzcyByZWdpc3RlcnMgb2YgQ1M4OTAwQSBvbiBNWEMgQURTICovCi0jZGVmaW5lIENTODkwMEFfQkFTRV9BRERSRVNTICAgIChQQkNfQ1M4OTAwQV9JT0JBU0VfUkVHICsgMHgzMDApCi0KLSNkZWZpbmUgTVhDX1BNSUNfSU5UX0xJTkUgICAgICAgSU9NVVhfVE9fSVJRKE1YMjdfUElOX1RPVVQpCi0KLS8qCi0qIFRoaXMgaXMgdXNlZCB0byBkZXRlY3QgaWYgdGhlIENQTEQgdmVyc2lvbiBpcyBmb3IgbXgyNyBldmIgYm9hcmQgcmV2LWEKLSovCi0jZGVmaW5lIFBCQ19DUExEX1ZFUlNJT05fSVNfUkVWQSgpIFwKLQkoKF9fcmF3X3JlYWR3KFBCQ19WRVJTSU9OX1JFRykgJiBcCi0JKFBCQ19WRVJTSU9OX0FEUyB8IFBCQ19WRVJTSU9OX0VWQl9SRVZCKSlcCi0JPT0gMCkKLQotLyogVGhpcyBpcyB1c2VkIHRvIGFjdGl2ZSBvciBpbmFjdGl2ZSBhdGEgc2lnbmFsIGluIENQTEQgLgotICogIEl0IGlzIGRlcGVuZGVudCB3aXRoIGhhcmR3YXJlCi0gKi8KLSNkZWZpbmUgUEJDX0FUQV9TSUdOQUxfQUNUSVZFKCkgXAotCV9fcmF3X3dyaXRldyggICAgICAgICAgIFwKLQkJUEJDX0JDVFJMMl9BVEFGRUNfRU58UEJDX0JDVFJMMl9BVEFGRUNfU0VMfFBCQ19CQ1RSTDJfQVRBX0VOLCBcCi0JCVBCQ19CQ1RSTDJfQ0xFQVJfUkVHKQotCi0jZGVmaW5lIFBCQ19BVEFfU0lHTkFMX0lOQUNUSVZFKCkgXAotCV9fcmF3X3dyaXRldyggIFwKLQkJUEJDX0JDVFJMMl9BVEFGRUNfRU58UEJDX0JDVFJMMl9BVEFGRUNfU0VMfFBCQ19CQ1RSTDJfQVRBX0VOLCBcCi0JCVBCQ19CQ1RSTDJfU0VUX1JFRykKLQotI2RlZmluZSBNWENfQkRfTEVEMSAgICAgICAgICAgICAoMSA8PCA1KQotI2RlZmluZSBNWENfQkRfTEVEMiAgICAgICAgICAgICAoMSA8PCA2KQotI2RlZmluZSBNWENfQkRfTEVEX09OKGxlZCkgXAotCV9fcmF3X3dyaXRldyhsZWQsIFBCQ19CQ1RSTDFfU0VUX1JFRykKLSNkZWZpbmUgTVhDX0JEX0xFRF9PRkYobGVkKSBcCi0JX19yYXdfd3JpdGV3KGxlZCwgUEJDX0JDVFJMMV9DTEVBUl9SRUcpCi0KLS8qIHRvIGRldGVybWluZSB0aGUgY29ycmVjdCBleHRlcm5hbCBjcnlzdGFsIHJlZmVyZW5jZSAqLwotI2RlZmluZSBDS0lIXzI3TUhaX0JJVF9TRVQgICAgICAoMSA8PCAzKQotCi0jZW5kaWYJCQkJLyogX19BU01fQVJDSF9NWENfQk9BUkRfTVgyN0FEU19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDI3bGl0ZS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MjdsaXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhODc1NTEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MjdsaXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqLwotCi0vKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMjdMSVRFX0hfXwotI2RlZmluZSBfX0FTTV9BUkNIX01YQ19CT0FSRF9NWDI3TElURV9IX18KLQotI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMjdMSVRFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MjdwZGsuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDI3cGRrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYzFiY2YuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MjdwZGsuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICovCi0KLS8qCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9NWENfQk9BUkRfTVgyN1BES19IX18KLSNkZWZpbmUgX19BU01fQVJDSF9NWENfQk9BUkRfTVgyN1BES19IX18KLQotI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMjdQREtfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMV8zZHMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxXzNkcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTkyOTMzYS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMV8zZHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICovCi0KLS8qCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9NWENfQk9BUkRfTVgzMV8zRFNfSF9fCi0jZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMzFfM0RTX0hfXwotCi0vKiBEZWZpbml0aW9ucyBmb3IgY29tcG9uZW50cyBvbiB0aGUgRGVidWcgYm9hcmQgKi8KLQotLyogQmFzZSBhZGRyZXNzIG9mIENQTEQgY29udHJvbGxlciBvbiB0aGUgRGVidWcgYm9hcmQgKi8KLSNkZWZpbmUgREVCVUdfQkFTRV9BRERSRVNTCQlDUzVfSU9fQUREUkVTUyhDUzVfQkFTRV9BRERSKQotCi0vKiBMQU45MjE3IGV0aGVybmV0IGJhc2UgYWRkcmVzcyAqLwotI2RlZmluZSBMQU45MjE3X0JBU0VfQUREUgkJQ1M1X0JBU0VfQUREUgotCi0vKiBDUExEIGNvbmZpZyBhbmQgaW50ZXJydXB0IGJhc2UgYWRkcmVzcyAqLwotI2RlZmluZSBDUExEX0FERFIJCQkoREVCVUdfQkFTRV9BRERSRVNTICsgMHgyMDAwMCkKLQotLyogTEVEIHN3aXRjaHMgKi8KLSNkZWZpbmUgQ1BMRF9MRURfUkVHCQkJKENQTERfQUREUiArIDB4MDApCi0vKiBidXR0b25zICovCi0jZGVmaW5lIENQTERfU1dJVENIX0JVVFRPTlNfUkVHCShFWFBJT19BRERSICsgMHgwOCkKLS8qIHN0YXR1cywgaW50ZXJydXB0ICovCi0jZGVmaW5lIENQTERfSU5UX1NUQVRVU19SRUcJCShDUExEX0FERFIgKyAweDEwKQotI2RlZmluZSBDUExEX0lOVF9NQVNLX1JFRwkJKENQTERfQUREUiArIDB4MzgpCi0jZGVmaW5lIENQTERfSU5UX1JFU0VUX1JFRwkJKENQTERfQUREUiArIDB4MjApCi0vKiBtYWdpYyB3b3JkIGZvciBkZWJ1ZyBDUExEICovCi0jZGVmaW5lIENQTERfTUFHSUNfTlVNQkVSMV9SRUcJCShDUExEX0FERFIgKyAweDQwKQotI2RlZmluZSBDUExEX01BR0lDX05VTUJFUjJfUkVHCQkoQ1BMRF9BRERSICsgMHg0OCkKLS8qIENQTEQgY29kZSB2ZXJzaW9uICovCi0jZGVmaW5lIENQTERfQ09ERV9WRVJfUkVHCQkoQ1BMRF9BRERSICsgMHg1MCkKLS8qIG1hZ2ljIHdvcmQgZm9yIGRlYnVnIENQTEQgKi8KLSNkZWZpbmUgQ1BMRF9NQUdJQ19OVU1CRVIzX1JFRwkJKENQTERfQUREUiArIDB4NTgpCi0vKiBtb2R1bGUgcmVzZXQgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgQ1BMRF9NT0RVTEVfUkVTRVRfUkVHCQkoQ1BMRF9BRERSICsgMHg2MCkKLS8qIENQVSBJRCBhbmQgUGVyc29uYWxpdHkgSUQgKi8KLSNkZWZpbmUgQ1BMRF9NQ1VfQk9BUkRfSURfUkVHCQkoQ1BMRF9BRERSICsgMHg2OCkKLQotLyogQ1BMRCBJUlEgbGluZSBmb3IgZXh0ZXJuYWwgdWFydCwgZXh0ZXJuYWwgZXRoZXJuZXQgZXRjICovCi0jZGVmaW5lIEVYUElPX1BBUkVOVF9JTlQJSU9NVVhfVE9fSVJRKE1YMzFfUElOX0dQSU8xXzEpCi0KLSNkZWZpbmUgTVhDX0VYUF9JT19CQVNFCQkoTVhDX0JPQVJEX0lSUV9TVEFSVCkKLSNkZWZpbmUgTVhDX0lSUV9UT19FWFBJTyhpcnEpCSgoaXJxKSAtIE1YQ19FWFBfSU9fQkFTRSkKLQotI2RlZmluZSBFWFBJT19JTlRfRU5FVAkJKE1YQ19FWFBfSU9fQkFTRSArIDApCi0jZGVmaW5lIEVYUElPX0lOVF9YVUFSVF9BCShNWENfRVhQX0lPX0JBU0UgKyAxKQotI2RlZmluZSBFWFBJT19JTlRfWFVBUlRfQgkoTVhDX0VYUF9JT19CQVNFICsgMikKLSNkZWZpbmUgRVhQSU9fSU5UX0JVVFRPTl9BCShNWENfRVhQX0lPX0JBU0UgKyAzKQotI2RlZmluZSBFWFBJT19JTlRfQlVUVE9OX0IJKE1YQ19FWFBfSU9fQkFTRSArIDQpCi0KLSNkZWZpbmUgTVhDX01BWF9FWFBfSU9fTElORVMJMTYKLQotI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMzFfM0RTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFhZHMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxYWRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5NWExOTkuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFhZHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDUtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICovCi0KLS8qCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9NWENfQk9BUkRfTVgzMUFEU19IX18KLSNkZWZpbmUgX19BU01fQVJDSF9NWENfQk9BUkRfTVgzMUFEU19IX18KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQotLyogQmFzZSBhZGRyZXNzIG9mIFBCQyBjb250cm9sbGVyICovCi0jZGVmaW5lIFBCQ19CQVNFX0FERFJFU1MgICAgICAgIE1YMzFfQ1M0X0JBU0VfQUREUl9WSVJUCi0vKiBPZmZzZXRzIGZvciB0aGUgUEJDIENvbnRyb2xsZXIgcmVnaXN0ZXIgKi8KLQotLyogUEJDIEJvYXJkIHN0YXR1cyByZWdpc3RlciBvZmZzZXQgKi8KLSNkZWZpbmUgUEJDX0JTVEFUICAgICAgICAgICAgICAgMHgwMDAwMDIKLQotLyogUEJDIEJvYXJkIGNvbnRyb2wgcmVnaXN0ZXIgMSBzZXQgYWRkcmVzcyAqLwotI2RlZmluZSBQQkNfQkNUUkwxX1NFVCAgICAgICAgICAweDAwMDAwNAotCi0vKiBQQkMgQm9hcmQgY29udHJvbCByZWdpc3RlciAxIGNsZWFyIGFkZHJlc3MgKi8KLSNkZWZpbmUgUEJDX0JDVFJMMV9DTEVBUiAgICAgICAgMHgwMDAwMDYKLQotLyogUEJDIEJvYXJkIGNvbnRyb2wgcmVnaXN0ZXIgMiBzZXQgYWRkcmVzcyAqLwotI2RlZmluZSBQQkNfQkNUUkwyX1NFVCAgICAgICAgICAweDAwMDAwOAotCi0vKiBQQkMgQm9hcmQgY29udHJvbCByZWdpc3RlciAyIGNsZWFyIGFkZHJlc3MgKi8KLSNkZWZpbmUgUEJDX0JDVFJMMl9DTEVBUiAgICAgICAgMHgwMDAwMEEKLQotLyogUEJDIEJvYXJkIGNvbnRyb2wgcmVnaXN0ZXIgMyBzZXQgYWRkcmVzcyAqLwotI2RlZmluZSBQQkNfQkNUUkwzX1NFVCAgICAgICAgICAweDAwMDAwQwotCi0vKiBQQkMgQm9hcmQgY29udHJvbCByZWdpc3RlciAzIGNsZWFyIGFkZHJlc3MgKi8KLSNkZWZpbmUgUEJDX0JDVFJMM19DTEVBUiAgICAgICAgMHgwMDAwMEUKLQotLyogUEJDIEJvYXJkIGNvbnRyb2wgcmVnaXN0ZXIgNCBzZXQgYWRkcmVzcyAqLwotI2RlZmluZSBQQkNfQkNUUkw0X1NFVCAgICAgICAgICAweDAwMDAxMAotCi0vKiBQQkMgQm9hcmQgY29udHJvbCByZWdpc3RlciA0IGNsZWFyIGFkZHJlc3MgKi8KLSNkZWZpbmUgUEJDX0JDVFJMNF9DTEVBUiAgICAgICAgMHgwMDAwMTIKLQotLyogUEJDIEJvYXJkIHN0YXR1cyByZWdpc3RlciAxICovCi0jZGVmaW5lIFBCQ19CU1RBVDEgICAgICAgICAgICAgIDB4MDAwMDE0Ci0KLS8qIFBCQyBCb2FyZCBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCi0jZGVmaW5lIFBCQ19JTlRTVEFUVVMgICAgICAgICAgIDB4MDAwMDE2Ci0KLS8qIFBCQyBCb2FyZCBpbnRlcnJ1cHQgY3VycmVudCBzdGF0dXMgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgUEJDX0lOVENVUlJfU1RBVFVTICAgICAgMHgwMDAwMTgKLQotLyogUEJDIEludGVycnVwdCBtYXNrIHJlZ2lzdGVyIHNldCBhZGRyZXNzICovCi0jZGVmaW5lIFBCQ19JTlRNQVNLX1NFVCAgICAgICAgIDB4MDAwMDFBCi0KLS8qIFBCQyBJbnRlcnJ1cHQgbWFzayByZWdpc3RlciBjbGVhciBhZGRyZXNzICovCi0jZGVmaW5lIFBCQ19JTlRNQVNLX0NMRUFSICAgICAgIDB4MDAwMDFDCi0KLS8qIEV4dGVybmFsIFVBUlQgQSAqLwotI2RlZmluZSBQQkNfU0MxNkM2NTJfVUFSVEEgICAgICAweDAxMDAwMAotCi0vKiBFeHRlcm5hbCBVQVJUIEIgKi8KLSNkZWZpbmUgUEJDX1NDMTZDNjUyX1VBUlRCICAgICAgMHgwMTAwMTAKLQotLyogRXRoZXJuZXQgQ29udHJvbGxlciBJTyBiYXNlIGFkZHJlc3MgKi8KLSNkZWZpbmUgUEJDX0NTODkwMEFfSU9CQVNFICAgICAgMHgwMjAwMDAKLQotLyogRXRoZXJuZXQgQ29udHJvbGxlciBNZW1vcnkgYmFzZSBhZGRyZXNzICovCi0jZGVmaW5lIFBCQ19DUzg5MDBBX01FTUJBU0UgICAgIDB4MDIxMDAwCi0KLS8qIEV0aGVybmV0IENvbnRyb2xsZXIgRE1BIGJhc2UgYWRkcmVzcyAqLwotI2RlZmluZSBQQkNfQ1M4OTAwQV9ETUFCQVNFICAgICAweDAyMjAwMAotCi0vKiBFeHRlcm5hbCBjaGlwIHNlbGVjdCAwICovCi0jZGVmaW5lIFBCQ19YQ1MwICAgICAgICAgICAgICAgIDB4MDQwMDAwCi0KLS8qIExDRCBEaXNwbGF5IGVuYWJsZSAqLwotI2RlZmluZSBQQkNfTENEX0VOX0IgICAgICAgICAgICAweDA2MDAwMAotCi0vKiBDb2RlIHRlc3QgZGVidWcgZW5hYmxlICovCi0jZGVmaW5lIFBCQ19DT0RFX0IgICAgICAgICAgICAgIDB4MDcwMDAwCi0KLS8qIFBTUkFNIG1lbW9yeSBzZWxlY3QgKi8KLSNkZWZpbmUgUEJDX1BTUkFNX0IgICAgICAgICAgICAgMHg1MDAwMDAwCi0KLSNkZWZpbmUgUEJDX0lOVFNUQVRVU19SRUcJKFBCQ19JTlRTVEFUVVMgKyBQQkNfQkFTRV9BRERSRVNTKQotI2RlZmluZSBQQkNfSU5UQ1VSUl9TVEFUVVNfUkVHCShQQkNfSU5UQ1VSUl9TVEFUVVMgKyBQQkNfQkFTRV9BRERSRVNTKQotI2RlZmluZSBQQkNfSU5UTUFTS19TRVRfUkVHCShQQkNfSU5UTUFTS19TRVQgKyBQQkNfQkFTRV9BRERSRVNTKQotI2RlZmluZSBQQkNfSU5UTUFTS19DTEVBUl9SRUcJKFBCQ19JTlRNQVNLX0NMRUFSICsgUEJDX0JBU0VfQUREUkVTUykKLSNkZWZpbmUgRVhQSU9fUEFSRU5UX0lOVAlJT01VWF9UT19JUlEoTVgzMV9QSU5fR1BJTzFfNCkKLQotI2RlZmluZSBNWENfRVhQX0lPX0JBU0UJCShNWENfQk9BUkRfSVJRX1NUQVJUKQotI2RlZmluZSBNWENfSVJRX1RPX0VYUElPKGlycSkJKChpcnEpIC0gTVhDX0VYUF9JT19CQVNFKQotCi0jZGVmaW5lIEVYUElPX0lOVF9MT1dfQkFUCShNWENfRVhQX0lPX0JBU0UgKyAwKQotI2RlZmluZSBFWFBJT19JTlRfUEJfSVJRCShNWENfRVhQX0lPX0JBU0UgKyAxKQotI2RlZmluZSBFWFBJT19JTlRfT1RHX0ZTX09WUgkoTVhDX0VYUF9JT19CQVNFICsgMikKLSNkZWZpbmUgRVhQSU9fSU5UX0ZTSF9PVlIJKE1YQ19FWFBfSU9fQkFTRSArIDMpCi0jZGVmaW5lIEVYUElPX0lOVF9SRVM0CQkoTVhDX0VYUF9JT19CQVNFICsgNCkKLSNkZWZpbmUgRVhQSU9fSU5UX1JFUzUJCShNWENfRVhQX0lPX0JBU0UgKyA1KQotI2RlZmluZSBFWFBJT19JTlRfUkVTNgkJKE1YQ19FWFBfSU9fQkFTRSArIDYpCi0jZGVmaW5lIEVYUElPX0lOVF9SRVM3CQkoTVhDX0VYUF9JT19CQVNFICsgNykKLSNkZWZpbmUgRVhQSU9fSU5UX0VORVRfSU5UCShNWENfRVhQX0lPX0JBU0UgKyA4KQotI2RlZmluZSBFWFBJT19JTlRfT1RHX0ZTX0lOVAkoTVhDX0VYUF9JT19CQVNFICsgOSkKLSNkZWZpbmUgRVhQSU9fSU5UX1hVQVJUX0lOVEEJKE1YQ19FWFBfSU9fQkFTRSArIDEwKQotI2RlZmluZSBFWFBJT19JTlRfWFVBUlRfSU5UQgkoTVhDX0VYUF9JT19CQVNFICsgMTEpCi0jZGVmaW5lIEVYUElPX0lOVF9TWU5USF9JUlEJKE1YQ19FWFBfSU9fQkFTRSArIDEyKQotI2RlZmluZSBFWFBJT19JTlRfQ0VfSU5UMQkoTVhDX0VYUF9JT19CQVNFICsgMTMpCi0jZGVmaW5lIEVYUElPX0lOVF9DRV9JTlQyCShNWENfRVhQX0lPX0JBU0UgKyAxNCkKLSNkZWZpbmUgRVhQSU9fSU5UX1JFUzE1CQkoTVhDX0VYUF9JT19CQVNFICsgMTUpCi0KLSNkZWZpbmUgTVhDX01BWF9FWFBfSU9fTElORVMJMTYKLQotI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMzFBRFNfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMWxpbGx5LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMWxpbGx5LmgKaW5kZXggZWI1YTUwMi4uMGRmNzFiZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFsaWxseS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxbGlsbHkuaApAQCAtMzEsNyArMzEsNyBAQAogCiAvKgogICogVGhpcyBDUFUgbW9kdWxlIG5lZWRzIGEgYmFzZWJvYXJkIHRvIHdvcmsuIEFmdGVyIGJhc2ljIGluaXRpYWxpemluZwotICogaXRzIG93biBkZXZpY2VzLCBpdCBjYWxscyBiYXNlYm9hcmQncyBpbml0IGZ1bmN0aW9uLgorICogaXRzIG93biBkZXZpY2VzLCBpdCBjYWxscyB0aGUgYmFzZWJvYXJkJ3MgaW5pdCBmdW5jdGlvbi4KICAqLwogCiBleHRlcm4gdm9pZCBteDMxbGlsbHlfZGJfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxbGl0ZS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFsaXRlLmgKaW5kZXggMmIyZGEwMy4uYzFhZDBhZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxbGl0ZS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxbGl0ZS5oCkBAIC0zMiw3ICszMiw3IEBACiAKIC8qCiAgKiBUaGlzIENQVSBtb2R1bGUgbmVlZHMgYSBiYXNlYm9hcmQgdG8gd29yay4gQWZ0ZXIgYmFzaWMgaW5pdGlhbGl6aW5nCi0gKiBpdHMgb3duIGRldmljZXMsIGl0IGNhbGxzIGJhc2Vib2FyZCdzIGluaXQgZnVuY3Rpb24uCisgKiBpdHMgb3duIGRldmljZXMsIGl0IGNhbGxzIHRoZSBiYXNlYm9hcmQncyBpbml0IGZ1bmN0aW9uLgogICovCiAKIGV4dGVybiB2b2lkIG14MzFsaXRlX2RiX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMW1vYm9hcmQuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxbW9ib2FyZC5oCmluZGV4IDM2ZmYzY2UuLmRlMTQ1NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxbW9ib2FyZC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxbW9ib2FyZC5oCkBAIC0zMSw3ICszMSw3IEBACiAKIC8qCiAgKiBUaGlzIENQVSBtb2R1bGUgbmVlZHMgYSBiYXNlYm9hcmQgdG8gd29yay4gQWZ0ZXIgYmFzaWMgaW5pdGlhbGl6aW5nCi0gKiBpdHMgb3duIGRldmljZXMsIGl0IGNhbGxzIGJhc2Vib2FyZCdzIGluaXQgZnVuY3Rpb24uCisgKiBpdHMgb3duIGRldmljZXMsIGl0IGNhbGxzIHRoZSBiYXNlYm9hcmQncyBpbml0IGZ1bmN0aW9uLgogICovCiAKIGV4dGVybiB2b2lkIG14MzFtb2JvYXJkX2RldmJvYXJkX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzNXBkay5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzVwZGsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgzZjFjMC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzNXBkay5oCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9NWENfQk9BUkRfTVgzNVBES19IX18KLSNkZWZpbmUgX19BU01fQVJDSF9NWENfQk9BUkRfTVgzNVBES19IX18KLQotI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMzVQREtfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtcGNtMDM3LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtcGNtMDM3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNDExNzAuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLXBjbTAzNy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDggU2FzY2hhIEhhdWVyLCBQZW5ndXRyb25peAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX1BDTTAzN19IX18KLSNkZWZpbmUgX19BU01fQVJDSF9NWENfQk9BUkRfUENNMDM3X0hfXwotCi0jZW5kaWYgLyogX19BU01fQVJDSF9NWENfQk9BUkRfUENNMDM3X0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLXBjbTAzOC5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLXBjbTAzOC5oCmluZGV4IDQxMGY5NzguLjZmMzcxZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1wY20wMzguaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtcGNtMDM4LmgKQEAgLTIyLDcgKzIyLDcgQEAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAvKgogICogVGhpcyBDUFUgbW9kdWxlIG5lZWRzIGEgYmFzZWJvYXJkIHRvIHdvcmsuIEFmdGVyIGJhc2ljIGluaXRpYWxpemluZwotICogaXRzIG93biBkZXZpY2VzLCBpdCBjYWxscyBiYXNlYm9hcmQncyBpbml0IGZ1bmN0aW9uLgorICogaXRzIG93biBkZXZpY2VzLCBpdCBjYWxscyB0aGUgYmFzZWJvYXJkJ3MgaW5pdCBmdW5jdGlvbi4KICAqIFRPRE86IEFkZCB5b3VyIG93biBiYXNlYm9hcmQgaW5pdCBmdW5jdGlvbiBhbmQgY2FsbCBpdCBmcm9tCiAgKiBpbnNpZGUgcGNtMDM4X2luaXQoKS4KICAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtcGNtMDQzLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtcGNtMDQzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhYzRlMTYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLXBjbTA0My5oCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDggU2FzY2hhIEhhdWVyLCBQZW5ndXRyb25peAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX1BDTTA0M19IX18KLSNkZWZpbmUgX19BU01fQVJDSF9NWENfQk9BUkRfUENNMDQzX0hfXwotCi0jZW5kaWYgLyogX19BU01fQVJDSF9NWENfQk9BUkRfUENNMDQzX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLXFvbmcuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1xb25nLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkODhjN2EuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLXFvbmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwOSBJbHlhIFlhbm9rLCBFbWNyYWZ0IFN5c3RlbXMgTHRkLCA8eWFub2tAZW1jcmFmdC5jb20+Ci0gKi8KLQotLyoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19CT0FSRF9RT05HX0hfXwotI2RlZmluZSBfX0FTTV9BUkNIX01YQ19CT0FSRF9RT05HX0hfXwotCi0vKiBOT1IgRkxBU0ggKi8KLSNkZWZpbmUgUU9OR19OT1JfU0laRQkJKDEyOCoxMDI0KjEwMjQpCi0KLSNlbmRpZiAvKiBfX0FTTV9BUkNIX01YQ19CT0FSRF9RT05HX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCAwYjZlMTFlLi4yNTYwNjQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMjMsOCArMjMsOCBAQAogI2Vycm9yICJDT05GSUdfREVCVUdfTEwgaXMgaW5jb21wYXRpYmxlIHdpdGggbXVsdGlwbGUgYXJjaHMiCiAjZW5kaWYKICNpbmNsdWRlIDxtYWNoL214MjUuaD4KLSNkZWZpbmUgVUFSVF9QQUREUglVQVJUMV9CQVNFX0FERFIKLSNkZWZpbmUgVUFSVF9WQUREUglNWDI1X0FJUFMxX0lPX0FERFJFU1MoVUFSVDFfQkFTRV9BRERSKQorI2RlZmluZSBVQVJUX1BBRERSCU1YMjVfVUFSVDFfQkFTRV9BRERSCisjZGVmaW5lIFVBUlRfVkFERFIJTVgyNV9BSVBTMV9JT19BRERSRVNTKE1YMjVfVUFSVDFfQkFTRV9BRERSKQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVJDSF9NWDIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9kZXZpY2VzLWNvbW1vbi5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RldmljZXMtY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVmNjhjNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9kZXZpY2VzLWNvbW1vbi5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQZW5ndXRyb25peAorICogVXdlIEtsZWluZS1Lb2VuaWcgPHUua2xlaW5lLWtvZW5pZ0BwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICppbXhfYWRkX3BsYXRmb3JtX2RldmljZShjb25zdCBjaGFyICpuYW1lLCBpbnQgaWQsCisJCWNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBpbnQgbnVtX3Jlc291cmNlcywKKwkJY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemVfZGF0YSk7CisKKyNpZiBkZWZpbmVkIChDT05GSUdfQ0FOX0ZMRVhDQU4pIHx8IGRlZmluZWQgKENPTkZJR19DQU5fRkxFWENBTl9NT0RVTEUpCisjaW5jbHVkZSA8bGludXgvY2FuL3BsYXRmb3JtL2ZsZXhjYW4uaD4KK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBpbXhfYWRkX2ZsZXhjYW4oaW50IGlkLAorCQlyZXNvdXJjZV9zaXplX3QgaW9iYXNlLCByZXNvdXJjZV9zaXplX3QgaW9zaXplLAorCQlyZXNvdXJjZV9zaXplX3QgaXJxLAorCQljb25zdCBzdHJ1Y3QgZmxleGNhbl9wbGF0Zm9ybV9kYXRhICpwZGF0YSk7CisjZWxzZQorLyogdGhlIGlmZGVmIGNhbiBiZSByZW1vdmVkIG9uY2UgdGhlIGZsZXhjYW4gZHJpdmVyIGhhcyBiZWVuIG1lcmdlZCAqLworc3RydWN0IGZsZXhjYW5fcGxhdGZvcm1fZGF0YTsKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0IGlteF9hZGRfZmxleGNhbihpbnQgaWQsCisJCXJlc291cmNlX3NpemVfdCBpb2Jhc2UsIHJlc291cmNlX3NpemVfdCBpb3NpemUsCisJCXJlc291cmNlX3NpemVfdCBpcnEsCisJCWNvbnN0IHN0cnVjdCBmbGV4Y2FuX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCXJldHVybiBOVUxMOworfQorI2VuZGlmCisKKyNpbmNsdWRlIDxtYWNoL2kyYy5oPgorc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0IGlteF9hZGRfaW14X2kyYyhpbnQgaWQsCisJCXJlc291cmNlX3NpemVfdCBpb2Jhc2UsIHJlc291cmNlX3NpemVfdCBpb3NpemUsIGludCBpcnEsCisJCWNvbnN0IHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSAqcGRhdGEpOworCisjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgorc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0IGlteF9hZGRfaW14X3VhcnRfM2lycShpbnQgaWQsCisJCXJlc291cmNlX3NpemVfdCBpb2Jhc2UsIHJlc291cmNlX3NpemVfdCBpb3NpemUsCisJCXJlc291cmNlX3NpemVfdCBpcnFyeCwgcmVzb3VyY2Vfc2l6ZV90IGlycXR4LAorCQlyZXNvdXJjZV9zaXplX3QgaXJxcnRzLAorCQljb25zdCBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhICpwZGF0YSk7CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXQgaW14X2FkZF9pbXhfdWFydF8xaXJxKGludCBpZCwKKwkJcmVzb3VyY2Vfc2l6ZV90IGlvYmFzZSwgcmVzb3VyY2Vfc2l6ZV90IGlvc2l6ZSwKKwkJcmVzb3VyY2Vfc2l6ZV90IGlycSwKKwkJY29uc3Qgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSAqcGRhdGEpOworCisjaW5jbHVkZSA8bWFjaC9teGNfbmFuZC5oPgorc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0IGlteF9hZGRfbXhjX25hbmRfdjEocmVzb3VyY2Vfc2l6ZV90IGlvYmFzZSwKKwkJaW50IGlycSwgY29uc3Qgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgKnBkYXRhKTsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBpbXhfYWRkX214Y19uYW5kX3YyMShyZXNvdXJjZV9zaXplX3QgaW9iYXNlLAorCQlpbnQgaXJxLCBjb25zdCBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YSAqcGRhdGEpOworCisjaW5jbHVkZSA8bWFjaC9zcGkuaD4KK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBpbXhfYWRkX3NwaV9pbXgoaW50IGlkLAorCQlyZXNvdXJjZV9zaXplX3QgaW9iYXNlLCByZXNvdXJjZV9zaXplX3QgaW9zaXplLCBpbnQgaXJxLAorCQljb25zdCBzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgKnBkYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9kbWEtbXgxLW14Mi5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RtYS1teDEtbXgyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNDg3MGIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RtYS1teDEtbXgyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoKLSAqICBsaW51eC9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZG1hLW14MS1teDIuaAotICoKLSAqICBpLk1YIERNQSByZWdpc3RyYXRpb24gYW5kIElSUSBkaXNwYXRjaGluZwotICoKLSAqIENvcHlyaWdodCAyMDA2IFBhdmVsIFBpc2EgPHBpc2FAY21wLmZlbGsuY3Z1dC5jej4KLSAqIENvcHlyaWdodCAyMDA4IEp1ZXJnZW4gQmVpc2VydCwgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KLSAqIENvcHlyaWdodCAyMDA4IFNhc2NoYSBIYXVlciwgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0gKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCi0gKiBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19ETUFfSAotI2RlZmluZSBfX0FTTV9BUkNIX01YQ19ETUFfSAotCi0jZGVmaW5lIElNWF9ETUFfQ0hBTk5FTFMgIDE2Ci0KLSNkZWZpbmUgRE1BX01PREVfUkVBRAkJMAotI2RlZmluZSBETUFfTU9ERV9XUklURQkJMQotI2RlZmluZSBETUFfTU9ERV9NQVNLCQkxCi0KLSNkZWZpbmUgTVgxX0RNQV9SRUcob2Zmc2V0KQlNWDFfSU9fQUREUkVTUyhNWDFfRE1BX0JBU0VfQUREUiArIChvZmZzZXQpKQotCi0vKiBETUEgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTVgxX0RNQV9ESU1SCQlNWDFfRE1BX1JFRygweDA4KQotCi0vKiBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTVgxX0RNQV9DQ1IoeCkJCU1YMV9ETUFfUkVHKDB4OGMgKyAoKHgpIDw8IDYpKQotCi0jZGVmaW5lIElNWF9ETUFfTUVNU0laRV8zMgkoMCA8PCA0KQotI2RlZmluZSBJTVhfRE1BX01FTVNJWkVfOAkoMSA8PCA0KQotI2RlZmluZSBJTVhfRE1BX01FTVNJWkVfMTYJKDIgPDwgNCkKLSNkZWZpbmUgSU1YX0RNQV9UWVBFX0xJTkVBUgkoMCA8PCAxMCkKLSNkZWZpbmUgSU1YX0RNQV9UWVBFXzJECQkoMSA8PCAxMCkKLSNkZWZpbmUgSU1YX0RNQV9UWVBFX0ZJRk8JKDIgPDwgMTApCi0KLSNkZWZpbmUgSU1YX0RNQV9FUlJfQlVSU1QgICAgICgxIDw8IDApCi0jZGVmaW5lIElNWF9ETUFfRVJSX1JFUVVFU1QgICAoMSA8PCAxKQotI2RlZmluZSBJTVhfRE1BX0VSUl9UUkFOU0ZFUiAgKDEgPDwgMikKLSNkZWZpbmUgSU1YX0RNQV9FUlJfQlVGRkVSICAgICgxIDw8IDMpCi0jZGVmaW5lIElNWF9ETUFfRVJSX1RJTUVPVVQgICAoMSA8PCA0KQotCi1pbnQKLWlteF9kbWFfY29uZmlnX2NoYW5uZWwoaW50IGNoYW5uZWwsIHVuc2lnbmVkIGludCBjb25maWdfcG9ydCwKLQl1bnNpZ25lZCBpbnQgY29uZmlnX21lbSwgdW5zaWduZWQgaW50IGRtYXJlcSwgaW50IGh3X2NoYWluaW5nKTsKLQotdm9pZAotaW14X2RtYV9jb25maWdfYnVyc3RsZW4oaW50IGNoYW5uZWwsIHVuc2lnbmVkIGludCBidXJzdGxlbik7Ci0KLWludAotaW14X2RtYV9zZXR1cF9zaW5nbGUoaW50IGNoYW5uZWwsIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3MsCi0JCXVuc2lnbmVkIGludCBkbWFfbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZGV2X2FkZHIsCi0JCXVuc2lnbmVkIGludCBkbWFtb2RlKTsKLQotCi0vKgotICogVXNlIHRoaXMgZmxhZyBhcyB0aGUgZG1hX2xlbmd0aCBhcmd1bWVudCB0byBpbXhfZG1hX3NldHVwX3NnKCkKLSAqIHRvIGNyZWF0ZSBhbiBlbmRsZXNzIHJ1bm5pbmcgZG1hIGxvb3AuIFRoZSBlbmQgb2YgdGhlIHNjYXR0ZXJsaXN0Ci0gKiBtdXN0IGJlIGxpbmtlZCB0byB0aGUgYmVnaW5uaW5nIGZvciB0aGlzIHRvIHdvcmsuCi0gKi8KLSNkZWZpbmUgSU1YX0RNQV9MRU5HVEhfTE9PUAkoKHVuc2lnbmVkIGludCktMSkKLQotaW50Ci1pbXhfZG1hX3NldHVwX3NnKGludCBjaGFubmVsLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQl1bnNpZ25lZCBpbnQgc2djb3VudCwgdW5zaWduZWQgaW50IGRtYV9sZW5ndGgsCi0JCXVuc2lnbmVkIGludCBkZXZfYWRkciwgdW5zaWduZWQgaW50IGRtYW1vZGUpOwotCi1pbnQKLWlteF9kbWFfc2V0dXBfaGFuZGxlcnMoaW50IGNoYW5uZWwsCi0JCXZvaWQgKCppcnFfaGFuZGxlcikgKGludCwgdm9pZCAqKSwKLQkJdm9pZCAoKmVycl9oYW5kbGVyKSAoaW50LCB2b2lkICosIGludCksIHZvaWQgKmRhdGEpOwotCi1pbnQKLWlteF9kbWFfc2V0dXBfcHJvZ3Jlc3Npb25faGFuZGxlcihpbnQgY2hhbm5lbCwKLQkJdm9pZCAoKnByb2dfaGFuZGxlcikgKGludCwgdm9pZCosIHN0cnVjdCBzY2F0dGVybGlzdCopKTsKLQotdm9pZCBpbXhfZG1hX2VuYWJsZShpbnQgY2hhbm5lbCk7Ci0KLXZvaWQgaW14X2RtYV9kaXNhYmxlKGludCBjaGFubmVsKTsKLQotaW50IGlteF9kbWFfcmVxdWVzdChpbnQgY2hhbm5lbCwgY29uc3QgY2hhciAqbmFtZSk7Ci0KLXZvaWQgaW14X2RtYV9mcmVlKGludCBjaGFubmVsKTsKLQotZW51bSBpbXhfZG1hX3ByaW8gewotCURNQV9QUklPX0hJR0ggPSAwLAotCURNQV9QUklPX01FRElVTSA9IDEsCi0JRE1BX1BSSU9fTE9XID0gMgotfTsKLQotaW50IGlteF9kbWFfcmVxdWVzdF9ieV9wcmlvKGNvbnN0IGNoYXIgKm5hbWUsIGVudW0gaW14X2RtYV9wcmlvIHByaW8pOwotCi0jZW5kaWYJLyogX0FTTV9BUkNIX01YQ19ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2V1a3JlYS1iYXNlYm9hcmRzLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZXVrcmVhLWJhc2Vib2FyZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzRlM2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2V1a3JlYS1iYXNlYm9hcmRzLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBFcmljIEJlbmFyZCAtIGVyaWNAZXVrcmVhLmNvbQorICoKKyAqIEJhc2VkIG9uIGJvYXJkLXBjbTAzOC5oIHdoaWNoIGlzIDoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBKdWVyZ2VuIEJlaXNlcnQgKGtlcm5lbEBwZW5ndXRyb25peC5kZSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fTUFDSF9FVUtSRUFfQkFTRUJPQVJEU19IX18KKyNkZWZpbmUgX19NQUNIX0VVS1JFQV9CQVNFQk9BUkRTX0hfXworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworLyoKKyAqIFRoaXMgQ1BVIG1vZHVsZSBuZWVkcyBhIGJhc2Vib2FyZCB0byB3b3JrLiBBZnRlciBiYXNpYyBpbml0aWFsaXppbmcKKyAqIGl0cyBvd24gZGV2aWNlcywgaXQgY2FsbHMgYmFzZWJvYXJkJ3MgaW5pdCBmdW5jdGlvbi4KKyAqIFRPRE86IEFkZCB5b3VyIG93biBiYXNlYm9hcmQgaW5pdCBmdW5jdGlvbiBhbmQgY2FsbCBpdCBmcm9tCisgKiBpbnNpZGUgZXVrcmVhX2NwdWlteDI1X2luaXQoKSBldWtyZWFfY3B1aW14MjdfaW5pdCgpCisgKiBldWtyZWFfY3B1aW14MzVfaW5pdCgpIG9yIGV1a3JlYV9jcHVpbXg1MV9pbml0KCkuCisgKgorICogVGhpcyBleGFtcGxlIGhlcmUgaXMgZm9yIHRoZSBkZXZlbG9wbWVudCBib2FyZC4gUmVmZXIKKyAqIG1hY2gtbXgyNS9ldWtyZWFfbWJpbXhzZC1iYXNlYm9hcmQuYyBmb3IgY3B1aW14MjUKKyAqIG1hY2gtaW14L2V1a3JlYV9tYmlteDI3LWJhc2Vib2FyZC5jIGZvciBjcHVpbXgyNworICogbWFjaC1teDMvZXVrcmVhX21iaW14c2QtYmFzZWJvYXJkLmMgZm9yIGNwdWlteDM1CisgKiBtYWNoLW14NS9ldWtyZWFfbWJpbXg1MS1iYXNlYm9hcmQuYyBmb3IgY3B1aW14NTEKKyAqLworCitleHRlcm4gdm9pZCBldWtyZWFfbWJpbXgyNV9iYXNlYm9hcmRfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGV1a3JlYV9tYmlteDI3X2Jhc2Vib2FyZF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgZXVrcmVhX21iaW14MzVfYmFzZWJvYXJkX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBldWtyZWFfbWJpbXg1MV9iYXNlYm9hcmRfaW5pdCh2b2lkKTsKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfX01BQ0hfRVVLUkVBX0JBU0VCT0FSRFNfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCA4OTRkMmY4Li42NjFmYmM2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTMzLDkgKzMzLDExIEBACiBzdHJ1Y3QgbXhjX2dwaW9fcG9ydCB7CiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCWludCBpcnE7CisJaW50IGlycV9oaWdoOwogCWludCB2aXJ0dWFsX2lycV9zdGFydDsKIAlzdHJ1Y3QgZ3Bpb19jaGlwIGNoaXA7CiAJdTMyIGJvdGhfZWRnZXM7CisJc3BpbmxvY2tfdCBsb2NrOwogfTsKIAogaW50IG14Y19ncGlvX2luaXQoc3RydWN0IG14Y19ncGlvX3BvcnQqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MjUuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDI1LmgKaW5kZXggZjM5MjIwZC4uZDdmNTJjOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MjUuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyNS5oCkBAIC0yNTIsNiArMjUyLDcgQEAKICNkZWZpbmUgTVgyNV9QQURfT0VfQUNEX19HUElPXzFfMjUJSU9NVVhfUEFEKDB4MzBjLCAweDExNCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKICNkZWZpbmUgTVgyNV9QQURfQ09OVFJBU1RfX0NPTlRSQVNUCUlPTVVYX1BBRCgweDMxMCwgMHgxMTgsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9DT05UUkFTVF9fUFdNNF9QV01PCUlPTVVYX1BBRCgweDMxMCwgMHgxMTgsIDB4MTQsIDAsIDAsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDI1X1BBRF9DT05UUkFTVF9fRkVDX0NSUwlJT01VWF9QQUQoMHgzMTAsIDB4MTE4LCAweDE1LCAweDUwOCwgMSwgTk9fUEFEX0NUUkwpCiAKICNkZWZpbmUgTVgyNV9QQURfUFdNX19QV00JCUlPTVVYX1BBRCgweDMxNCwgMHgxMWMsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQpAQCAtMzcxLDMwICszNzIsNDEgQEAKICNkZWZpbmUgTVgyNV9QQURfU0QxX0RBVEEzX19GRUNfQ1JTCUlPTVVYX1BBRCgweDM5YywgMHgxYTQsIDB4MTAsIDB4NTA4LCAyLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgyNV9QQURfU0QxX0RBVEEzX19HUElPXzJfMjgJSU9NVVhfUEFEKDB4MzljLCAweDFhNCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKLSNkZWZpbmUgTVgyNV9QQURfS1BQX1JPVzBfX0tQUF9ST1cwCUlPTVVYX1BBRCgweDNhMCwgMHgxYTgsIDB4MTAsIDAsIDAsIFBBRF9DVExfUEtFKQorI2RlZmluZSBLUFBfQ1RMX1JPVwkoUEFEX0NUTF9QS0UgfCBQQURfQ1RMX1BVRSB8IFBBRF9DVExfUFVTXzEwMEtfVVApCisjZGVmaW5lIEtQUF9DVExfQ09MCShQQURfQ1RMX1BLRSB8IFBBRF9DVExfUFVFIHwgUEFEX0NUTF9QVVNfMTAwS19VUCB8IFBBRF9DVExfT0RFKQorCisjZGVmaW5lIE1YMjVfUEFEX0tQUF9ST1cwX19LUFBfUk9XMAlJT01VWF9QQUQoMHgzYTAsIDB4MWE4LCAweDEwLCAwLCAwLCBLUFBfQ1RMX1JPVykKICNkZWZpbmUgTVgyNV9QQURfS1BQX1JPVzBfX0dQSU9fMl8yOQlJT01VWF9QQUQoMHgzYTAsIDB4MWE4LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKIAotI2RlZmluZSBNWDI1X1BBRF9LUFBfUk9XMV9fS1BQX1JPVzEJSU9NVVhfUEFEKDB4M2E0LCAweDFhYywgMHgxMCwgMCwgMCwgUEFEX0NUTF9QS0UpCisjZGVmaW5lIE1YMjVfUEFEX0tQUF9ST1cxX19LUFBfUk9XMQlJT01VWF9QQUQoMHgzYTQsIDB4MWFjLCAweDEwLCAwLCAwLCBLUFBfQ1RMX1JPVykKICNkZWZpbmUgTVgyNV9QQURfS1BQX1JPVzFfX0dQSU9fMl8zMAlJT01VWF9QQUQoMHgzYTQsIDB4MWFjLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKIAotI2RlZmluZSBNWDI1X1BBRF9LUFBfUk9XMl9fS1BQX1JPVzIJSU9NVVhfUEFEKDB4M2E4LCAweDFiMCwgMHgxMCwgMCwgMCwgUEFEX0NUTF9QS0UpCisjZGVmaW5lIE1YMjVfUEFEX0tQUF9ST1cyX19LUFBfUk9XMglJT01VWF9QQUQoMHgzYTgsIDB4MWIwLCAweDEwLCAwLCAwLCBLUFBfQ1RMX1JPVykKICNkZWZpbmUgTVgyNV9QQURfS1BQX1JPVzJfX0NTSV9EMAlJT01VWF9QQUQoMHgzYTgsIDB4MWIwLCAweDEzLCAweDQ4OCwgMiwgTk9fUEFEX0NUUkwpCiAjZGVmaW5lIE1YMjVfUEFEX0tQUF9ST1cyX19HUElPXzJfMzEJSU9NVVhfUEFEKDB4M2E4LCAweDFiMCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKLSNkZWZpbmUgTVgyNV9QQURfS1BQX1JPVzNfX0tQUF9ST1czCUlPTVVYX1BBRCgweDNhYywgMHgxYjQsIDB4MTAsIDAsIDAsIFBBRF9DVExfUEtFKQorI2RlZmluZSBNWDI1X1BBRF9LUFBfUk9XM19fS1BQX1JPVzMJSU9NVVhfUEFEKDB4M2FjLCAweDFiNCwgMHgxMCwgMCwgMCwgS1BQX0NUTF9ST1cpCiAjZGVmaW5lIE1YMjVfUEFEX0tQUF9ST1czX19DU0lfTEQxCUlPTVVYX1BBRCgweDNhYywgMHgxYjQsIDB4MTMsIDB4NDhjLCAyLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgyNV9QQURfS1BQX1JPVzNfX0dQSU9fM18wCUlPTVVYX1BBRCgweDNhYywgMHgxYjQsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQogCi0jZGVmaW5lIE1YMjVfUEFEX0tQUF9DT0wwX19LUFBfQ09MMAlJT01VWF9QQUQoMHgzYjAsIDB4MWI4LCAweDEwLCAwLCAwLCBQQURfQ1RMX1BLRSB8IFBBRF9DVExfT0RFKQorI2RlZmluZSBNWDI1X1BBRF9LUFBfQ09MMF9fS1BQX0NPTDAJSU9NVVhfUEFEKDB4M2IwLCAweDFiOCwgMHgxMCwgMCwgMCwgS1BQX0NUTF9DT0wpCisjZGVmaW5lIE1YMjVfUEFEX0tQUF9DT0wwX19VQVJUNF9SWERfTVVYIElPTVVYX1BBRCgweDNiMCwgMHgxYjgsIDB4MTEsIDB4NTcwLCAxLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfS1BQX0NPTDBfX0FVRDVfVFhECUlPTVVYX1BBRCgweDNiMCwgMHgxYjgsIDB4MTIsIDAsIDAsIFBBRF9DVExfUEtFIHwgUEFEX0NUTF9QVVNfMTAwS19VUCkKICNkZWZpbmUgTVgyNV9QQURfS1BQX0NPTDBfX0dQSU9fM18xCUlPTVVYX1BBRCgweDNiMCwgMHgxYjgsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQogCi0jZGVmaW5lIE1YMjVfUEFEX0tQUF9DT0wxX19LUFBfQ09MMQlJT01VWF9QQUQoMHgzYjQsIDB4MWJjLCAweDEwLCAwLCAwLCBQQURfQ1RMX1BLRSB8IFBBRF9DVExfT0RFKQorI2RlZmluZSBNWDI1X1BBRF9LUFBfQ09MMV9fS1BQX0NPTDEJSU9NVVhfUEFEKDB4M2I0LCAweDFiYywgMHgxMCwgMCwgMCwgS1BQX0NUTF9DT0wpCisjZGVmaW5lIE1YMjVfUEFEX0tQUF9DT0wxX19VQVJUNF9UWERfTVVYIElPTVVYX1BBRCgweDNiNCwgMHgxYmMsIDB4MTEsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9LUFBfQ09MMV9fQVVENV9SWEQJSU9NVVhfUEFEKDB4M2I0LCAweDFiYywgMHgxMiwgMCwgMCwgUEFEX0NUTF9QS0UgfCBQQURfQ1RMX1BVU18xMDBLX1VQKQogI2RlZmluZSBNWDI1X1BBRF9LUFBfQ09MMV9fR1BJT18zXzIJSU9NVVhfUEFEKDB4M2I0LCAweDFiYywgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKLSNkZWZpbmUgTVgyNV9QQURfS1BQX0NPTDJfX0tQUF9DT0wyCUlPTVVYX1BBRCgweDNiOCwgMHgxYzAsIDB4MTAsIDAsIDAsIFBBRF9DVExfUEtFIHwgUEFEX0NUTF9PREUpCisjZGVmaW5lIE1YMjVfUEFEX0tQUF9DT0wyX19LUFBfQ09MMglJT01VWF9QQUQoMHgzYjgsIDB4MWMwLCAweDEwLCAwLCAwLCBLUFBfQ1RMX0NPTCkKKyNkZWZpbmUgTVgyNV9QQURfS1BQX0NPTDJfX1VBUlQ0X1JUUwlJT01VWF9QQUQoMHgzYjgsIDB4MWMwLCAweDExLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfS1BQX0NPTDJfX0FVRDVfVFhDCUlPTVVYX1BBRCgweDNiOCwgMHgxYzAsIDB4MTIsIDAsIDAsIFBBRF9DVExfUEtFIHwgUEFEX0NUTF9QVVNfMTAwS19VUCkKICNkZWZpbmUgTVgyNV9QQURfS1BQX0NPTDJfX0dQSU9fM18zCUlPTVVYX1BBRCgweDNiOCwgMHgxYzAsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQogCi0jZGVmaW5lIE1YMjVfUEFEX0tQUF9DT0wzX19LUFBfQ09MMwlJT01VWF9QQUQoMHgzYmMsIDB4MWM0LCAweDEwLCAwLCAwLCBQQURfQ1RMX1BLRSB8IFBBRF9DVExfT0RFKQorI2RlZmluZSBNWDI1X1BBRF9LUFBfQ09MM19fS1BQX0NPTDMJSU9NVVhfUEFEKDB4M2JjLCAweDFjNCwgMHgxMCwgMCwgMCwgS1BQX0NUTF9DT0wpCisjZGVmaW5lIE1YMjVfUEFEX0tQUF9DT0wzX19VQVJUNF9DVFMJSU9NVVhfUEFEKDB4M2JjLCAweDFjNCwgMHgxMSwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0tQUF9DT0wzX19BVUQ1X1RYRlMJSU9NVVhfUEFEKDB4M2JjLCAweDFjNCwgMHgxMiwgMCwgMCwgUEFEX0NUTF9QS0UgfCBQQURfQ1RMX1BVU18xMDBLX1VQKQogI2RlZmluZSBNWDI1X1BBRF9LUFBfQ09MM19fR1BJT18zXzQJSU9NVVhfUEFEKDB4M2JjLCAweDFjNCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKICNkZWZpbmUgTVgyNV9QQURfRkVDX01EQ19fRkVDX01EQwlJT01VWF9QQUQoMHgzYzAsIDB4MWM4LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDUxLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXg1MS5oCmluZGV4IGFiMGY5NWQuLjIxYmZhNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDUxLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14NTEuaApAQCAtMjcsOCArMjcsOCBAQAogCUlPTVVYX0NPTkZJR19BTFQ1LAogCUlPTVVYX0NPTkZJR19BTFQ2LAogCUlPTVVYX0NPTkZJR19BTFQ3LAotCUlPTVVYX0NPTkZJR19HUElPLAkvKiBhZGRlZCB0byBoZWxwIHVzZXIgdXNlIEdQSU8gbW9kZSAqLwotCUlPTVVYX0NPTkZJR19TSU9OID0gMHgxIDw8IDQsCS8qIExPT1BCQUNLOk1VWCBTSU9OIGJpdCAqLworCUlPTVVYX0NPTkZJR19HUElPLCAgICAgIC8qIGFkZGVkIHRvIGhlbHAgdXNlciB1c2UgR1BJTyBtb2RlICovCisJSU9NVVhfQ09ORklHX1NJT04gPSAweDEgPDwgNCwgICAvKiBMT09QQkFDSzpNVVggU0lPTiBiaXQgKi8KIH0gaW9tdXhfcGluX2NmZ190OwogCiAvKiBQYWQgY29udHJvbCBncm91cGluZ3MgKi8KQEAgLTM4LDYgKzM4LDggQEAKIAkJCQlQQURfQ1RMX1NSRV9GQVNUKQogI2RlZmluZSBNWDUxX1VBUlQzX1BBRF9DVFJMCShQQURfQ1RMX1BLRSB8IFBBRF9DVExfRFNFX0hJR0ggfCBcCiAJCQkJUEFEX0NUTF9TUkVfRkFTVCkKKyNkZWZpbmUgTVg1MV9JMkNfUEFEX0NUUkwJKFBBRF9DVExfU1JFX0ZBU1QgfCBQQURfQ1RMX09ERSB8IFwKKwkJCQlQQURfQ1RMX0RTRV9ISUdIIHwgUEFEX0NUTF9QVVNfMTAwS19VUCB8IFBBRF9DVExfSFlTKQogI2RlZmluZSBNWDUxX1VTQkgxX1BBRF9DVFJMCShQQURfQ1RMX1NSRV9GQVNUIHwgUEFEX0NUTF9EU0VfSElHSCB8IFwKIAkJCQlQQURfQ1RMX1BVU18xMDBLX1VQIHwgUEFEX0NUTF9QVUUgfCBcCiAJCQkJUEFEX0NUTF9QS0UgfCBQQURfQ1RMX0hZUykKQEAgLTQ2LDI4OSArNDgsMjc4IEBACiAKIC8qCiAgKiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gZm9yIHRoZSBwYWQgbW9kZXMgaXMgTVg1MV9QQURfPHBhZG5hbWU+X188cGFkbW9kZT4KLSAqIElmIDxwYWRuYW1lPiBvciA8cGFkbW9kZT4gcmVmZXJzIHRvIGEgR1BJTywgaXQgaXMgbmFtZWQKLSAqIEdQSU9fPHVuaXQ+XzxudW0+IHNlZSBhbHNvIGlvbXV4LXYzLmgKKyAqIElmIDxwYWRuYW1lPiBvciA8cGFkbW9kZT4gcmVmZXJzIHRvIGEgR1BJTywgaXQgaXMgbmFtZWQgR1BJT188dW5pdD5fPG51bT4KKyAqIFNlZSBhbHNvIGlvbXV4LXYzLmgKICAqLwogCi0vKgotICogRklYTUU6IFRoaXMgd2FzIGNvbnZlcnRlZCB1c2luZyBzY3JpcHRzIGZyb20gZXhpc3RpbmcgRnJlZXNjYWxlIGNvZGUgdG8KLSAqIHRoaXMgZm9ybSB1c2VkIHVwc3RyZWFtLiBOZWVkIHRvIHZlcmlmeSB0aGUgbmFtZSBmb3JtYXQuCi0gKi8KLQotLyoJCQkJCQlQQUQgICAgICBNVVggICBBTFQgSU5QU0UgUEFUSCBQQURDVFJMICovCi0KLSNkZWZpbmUgTVg1MV9QQURfR1BJT18yXzBfX0VJTV9EMTYJSU9NVVhfUEFEKDB4M2YwLCAweDA1YywgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzJfMV9fRUlNX0QxNwlJT01VWF9QQUQoMHgzZjQsIDB4MDYwLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fMl8yX19FSU1fRDE4CUlPTVVYX1BBRCgweDNmOCwgMHgwNjQsIDEsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT18yXzNfX0VJTV9EMTkJSU9NVVhfUEFEKDB4M2ZjLCAweDA2OCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzJfNF9fRUlNX0QyMAlJT01VWF9QQUQoMHg0MDAsIDB4MDZjLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fMl81X19FSU1fRDIxCUlPTVVYX1BBRCgweDQwNCwgMHgwNzAsIDEsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRUlNX0QyMV9fR1BJT18yXzUJSU9NVVhfUEFEKDB4NDA0LCAweDA3MCwgSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgICAwLCBNWDUxX0dQSU9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fMl82X19FSU1fRDIyCUlPTVVYX1BBRCgweDQwOCwgMHgwNzQsIDEsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT18yXzdfX0VJTV9EMjMJSU9NVVhfUEFEKDB4NDBjLCAweDA3OCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotCi0vKiBCYWJiYWdlIFVBUlQzICovCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjRfX1VBUlQzX0NUUwlJT01VWF9QQUQoMHg0MTAsIDB4MDdjLCBJT01VWF9DT05GSUdfQUxUMywgMHgwLCAwLCBNWDUxX1VBUlQzX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9FSU1fRDI1X19VQVJUM19SWEQJSU9NVVhfUEFEKDB4NDE0LCAweDA4MCwgSU9NVVhfQ09ORklHX0FMVDMsIDB4OWY0LCAwLCBNWDUxX1VBUlQzX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9FSU1fRDI2X19VQVJUM19UWEQJSU9NVVhfUEFEKDB4NDE4LCAweDA4NCwgSU9NVVhfQ09ORklHX0FMVDMsIDB4MCwgMCwgTVg1MV9VQVJUM19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRUlNX0QyN19fVUFSVDNfUlRTCUlPTVVYX1BBRCgweDQxYywgMHgwODgsIElPTVVYX0NPTkZJR19BTFQzLCAweDlmMCwgMCwgTVg1MV9VQVJUM19QQURfQ1RSTCkKLQotI2RlZmluZSBNWDUxX1BBRF9FSU1fRDI4X19FSU1fRDI4CUlPTVVYX1BBRCgweDQyMCwgMHgwOGMsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRUlNX0QyOV9fRUlNX0QyOQlJT01VWF9QQUQoMHg0MjQsIDB4MDkwLCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9EMzBfX0VJTV9EMzAJSU9NVVhfUEFEKDB4NDI4LCAweDA5NCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9FSU1fRDMxX19FSU1fRDMxCUlPTVVYX1BBRCgweDQyYywgMHgwOWMsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzJfMTBfX0VJTV9BMTYJSU9NVVhfUEFEKDB4NDMwLCAweDA5YywgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzJfMTFfX0VJTV9BMTcJSU9NVVhfUEFEKDB4NDM0LCAweDBhMCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzJfMTJfX0VJTV9BMTgJSU9NVVhfUEFEKDB4NDM4LCAweDBhNCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzJfMTNfX0VJTV9BMTkJSU9NVVhfUEFEKDB4NDNjLCAweDBhOCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzJfMTRfX0VJTV9BMjAJSU9NVVhfUEFEKDB4NDQwLCAweDBhYywgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzJfMTVfX0VJTV9BMjEJSU9NVVhfUEFEKDB4NDQ0LCAweDBiMCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzJfMTZfX0VJTV9BMjIJSU9NVVhfUEFEKDB4NDQ4LCAweDBiNCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzJfMTdfX0VJTV9BMjMJSU9NVVhfUEFEKDB4NDRjLCAweDBiOCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fMl8xOF9fRUlNX0EyNAlJT01VWF9QQUQoMHg0NTAsIDB4MGJjLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fMl8xOV9fRUlNX0EyNQlJT01VWF9QQUQoMHg0NTQsIDB4MGMwLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fMl8yMF9fRUlNX0EyNglJT01VWF9QQUQoMHg0NTgsIDB4MGM0LCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fMl8yMV9fRUlNX0EyNwlJT01VWF9QQUQoMHg0NWMsIDB4MGM4LCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9FQjBfX0VJTV9FQjAJSU9NVVhfUEFEKDB4NDYwLCAweDBjYywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9FSU1fRUIxX19FSU1fRUIxCUlPTVVYX1BBRCgweDQ2NCwgMHgwZDAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT18yXzIyX19FSU1fRUIyCUlPTVVYX1BBRCgweDQ2OCwgMHgwZDQsIDEsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT18yXzIzX19FSU1fRUIzCUlPTVVYX1BBRCgweDQ2YywgMHgwZDgsIDEsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzJfMjRfX0VJTV9PRQlJT01VWF9QQUQoMHg0NzAsIDB4MGRjLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fMl8yNV9fRUlNX0NTMAlJT01VWF9QQUQoMHg0NzQsIDB4MGUwLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fMl8yNl9fRUlNX0NTMQlJT01VWF9QQUQoMHg0NzgsIDB4MGU0LCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fMl8yN19fRUlNX0NTMglJT01VWF9QQUQoMHg0N2MsIDB4MGU4LCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fMl8yOF9fRUlNX0NTMwlJT01VWF9QQUQoMHg0ODAsIDB4MGVjLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fMl8yOV9fRUlNX0NTNAlJT01VWF9QQUQoMHg0ODQsIDB4MGYwLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fMl8zMF9fRUlNX0NTNQlJT01VWF9QQUQoMHg0ODgsIDB4MGY0LCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fMl8zMV9fRUlNX0RUQUNLCUlPTVVYX1BBRCgweDQ4YywgMHgwZjgsIDEsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfMV9fRUlNX0xCQQlJT01VWF9QQUQoMHg0OTQsIDB4RkMsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fM18yX19FSU1fQ1JFCUlPTVVYX1BBRCgweDRBMCwgMHgxMDAsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0RSQU1fQ1MxX19EUkFNX0NTMQlJT01VWF9QQUQoMHg0RDAsIDB4MTA0LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfM19fTkFOREZfV0VfQglJT01VWF9QQUQoMHg0RTQsIDB4MTA4LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfNF9fTkFOREZfUkVfQglJT01VWF9QQUQoMHg0RTgsIDB4MTBDLCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfNV9fTkFOREZfQUxFCUlPTVVYX1BBRCgweDRFQywgMHgxMTAsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fM182X19OQU5ERl9DTEUJSU9NVVhfUEFEKDB4NEYwLCAweDExNCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT18zXzdfX05BTkRGX1dQX0IJSU9NVVhfUEFEKDB4NEY0LCAweDExOCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT18zXzhfX05BTkRGX1JCMAlJT01VWF9QQUQoMHg0RjgsIDB4MTFDLCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfOV9fTkFOREZfUkIxCUlPTVVYX1BBRCgweDRGQywgMHgxMjAsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fM18xMF9fTkFOREZfUkIyCUlPTVVYX1BBRCgweDUwMCwgMHgxMjQsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fM18xMV9fTkFOREZfUkIzCUlPTVVYX1BBRCgweDUwNCwgMHgxMjgsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fM18xMl9fR1BJT19OQU5ECUlPTVVYX1BBRCgweDUxNCwgMHgxMkMsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0vKiBSRVZJU0lUOiBOb3Qgc3VyZSBvZiB0aGVzZSB2YWx1ZXMKLQotICAjZGVmaW5lIE1YNTFfUEFEX0dQSU9fMV9fX05BTkRGX1JCNAlJT01VWF9QQUQoLCAsICwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSAgI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfMTNfX05BTkRGX1JCNQlJT01VWF9QQUQoMHg1RDgsIDB4MTMwLCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotICAjZGVmaW5lIE1YNTFfUEFEX0dQSU9fM18xNV9fTkFOREZfUkI3CUlPTVVYX1BBRCgweDVFMCwgMHgxMzgsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0qLwotI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfMTRfX05BTkRGX1JCNglJT01VWF9QQUQoMHg1REMsIDB4MTM0LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfMTZfX05BTkRGX0NTMAlJT01VWF9QQUQoMHg1MTgsIDB4MTMwLCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfMTdfX05BTkRGX0NTMQlJT01VWF9QQUQoMHg1MUMsIDB4MTM0LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfMThfX05BTkRGX0NTMglJT01VWF9QQUQoMHg1MjAsIDB4MTM4LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfMTlfX05BTkRGX0NTMwlJT01VWF9QQUQoMHg1MjQsIDB4MTNDLCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfMjBfX05BTkRGX0NTNAlJT01VWF9QQUQoMHg1MjgsIDB4MTQwLCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfMjFfX05BTkRGX0NTNQlJT01VWF9QQUQoMHg1MkMsIDB4MTQ0LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfMjJfX05BTkRGX0NTNglJT01VWF9QQUQoMHg1MzAsIDB4MTQ4LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfMjNfX05BTkRGX0NTNwlJT01VWF9QQUQoMHg1MzQsIDB4MTRDLCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfMjRfX05BTkRGX1JEWV9JTlQJSU9NVVhfUEFEKDB4NTM4LCAweDE1MCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT18zXzI1X19OQU5ERl9EMTUJSU9NVVhfUEFEKDB4NTNDLCAweDE1NCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT18zXzI2X19OQU5ERl9EMTQJSU9NVVhfUEFEKDB4NTQwLCAweDE1OCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT18zXzI3X19OQU5ERl9EMTMJSU9NVVhfUEFEKDB4NTQ0LCAweDE1QywgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT18zXzI4X19OQU5ERl9EMTIJSU9NVVhfUEFEKDB4NTQ4LCAweDE2MCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT18zXzI5X19OQU5ERl9EMTEJSU9NVVhfUEFEKDB4NTRDLCAweDE2NCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT18zXzMwX19OQU5ERl9EMTAJSU9NVVhfUEFEKDB4NTUwLCAweDE2OCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT18zXzMxX19OQU5ERl9EOQlJT01VWF9QQUQoMHg1NTQsIDB4MTZDLCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzRfMF9fTkFOREZfRDgJSU9NVVhfUEFEKDB4NTU4LCAweDE3MCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT180XzFfX05BTkRGX0Q3CUlPTVVYX1BBRCgweDU1QywgMHgxNzQsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fNF8yX19OQU5ERl9ENglJT01VWF9QQUQoMHg1NjAsIDB4MTc4LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzRfM19fTkFOREZfRDUJSU9NVVhfUEFEKDB4NTY0LCAweDE3QywgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT180XzRfX05BTkRGX0Q0CUlPTVVYX1BBRCgweDU2OCwgMHgxODAsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fNF81X19OQU5ERl9EMwlJT01VWF9QQUQoMHg1NkMsIDB4MTg0LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzRfNl9fTkFOREZfRDIJSU9NVVhfUEFEKDB4NTcwLCAweDE4OCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT180XzdfX05BTkRGX0QxCUlPTVVYX1BBRCgweDU3NCwgMHgxOEMsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fNF84X19OQU5ERl9EMAlJT01VWF9QQUQoMHg1NzgsIDB4MTkwLCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfMTJfX0NTSTFfRDgJSU9NVVhfUEFEKDB4NTdDLCAweDE5NCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT18zXzEzX19DU0kxX0Q5CUlPTVVYX1BBRCgweDU4MCwgMHgxOTgsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0NTSTFfRDEwX19DU0kxX0QxMAlJT01VWF9QQUQoMHg1ODQsIDB4MTlDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9DU0kxX0QxMV9fQ1NJMV9EMTEJSU9NVVhfUEFEKDB4NTg4LCAweDFBMCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EMTJfX0NTSTFfRDEyCUlPTVVYX1BBRCgweDU4QywgMHgxQTQsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0NTSTFfRDEzX19DU0kxX0QxMwlJT01VWF9QQUQoMHg1OTAsIDB4MUE4LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9DU0kxX0QxNF9fQ1NJMV9EMTQJSU9NVVhfUEFEKDB4NTk0LCAweDFBQywgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EMTVfX0NTSTFfRDE1CUlPTVVYX1BBRCgweDU5OCwgMHgxQjAsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0NTSTFfRDE2X19DU0kxX0QxNglJT01VWF9QQUQoMHg1OUMsIDB4MUI0LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9DU0kxX0QxN19fQ1NJMV9EMTcJSU9NVVhfUEFEKDB4NUEwLCAweDFCOCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EMThfX0NTSTFfRDE4CUlPTVVYX1BBRCgweDVBNCwgMHgxQkMsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0NTSTFfRDE5X19DU0kxX0QxOQlJT01VWF9QQUQoMHg1QTgsIDB4MUMwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9DU0kxX1ZTWU5DX19DU0kxX1ZTWU5DCUlPTVVYX1BBRCgweDVBQywgMHgxQzQsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0NTSTFfSFNZTkNfX0NTSTFfSFNZTkMJSU9NVVhfUEFEKDB4NUIwLCAweDFDOCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMV9QSVhDTEtfX0NTSTFfUElYQ0xLCUlPTVVYX1BBRCgweDVCNCwgMHgwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9DU0kxX01DTEtfX0NTSTFfTUNMSwlJT01VWF9QQUQoMHg1QjgsIDB4MCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMV9QS0UwX19DU0kxX1BLRTAJSU9NVVhfUEFEKDB4ODYwLCAweDAsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fNF85X19DU0kyX0QxMglJT01VWF9QQUQoMHg1QkMsIDB4MUNDLCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzRfMTBfX0NTSTJfRDEzCUlPTVVYX1BBRCgweDVDMCwgMHgxRDAsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fNF8xMV9fQ1NJMl9EMTQJSU9NVVhfUEFEKDB4NUM0LCAweDFENCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT180XzEyX19DU0kyX0QxNQlJT01VWF9QQUQoMHg1QzgsIDB4MUQ4LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzRfMTFfX0NTSTJfRDE2CUlPTVVYX1BBRCgweDVDQywgMHgxREMsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fNF8xMl9fQ1NJMl9EMTcJSU9NVVhfUEFEKDB4NUQwLCAweDFFMCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT180XzExX19DU0kyX0QxOAlJT01VWF9QQUQoMHg1RDQsIDB4MUU0LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzRfMTJfX0NTSTJfRDE5CUlPTVVYX1BBRCgweDVEOCwgMHgxRTgsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fNF8xM19fQ1NJMl9WU1lOQwlJT01VWF9QQUQoMHg1REMsIDB4MUVDLCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzRfMTRfX0NTSTJfSFNZTkMJSU9NVVhfUEFEKDB4NUUwLCAweDFGMCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT180XzE1X19DU0kyX1BJWENMSwlJT01VWF9QQUQoMHg1RTQsIDB4MUY0LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9DU0kyX1BLRTBfX0NTSTJfUEtFMAlJT01VWF9QQUQoMHg4MUMsIDB4MCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT180XzE2X19JMkMxX0NMSwlJT01VWF9QQUQoMHg1RTgsIDB4MUY4LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzRfMTdfX0kyQzFfREFUCUlPTVVYX1BBRCgweDVFQywgMHgxRkMsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fNF8xOF9fQVVEM19CQl9UWEQJSU9NVVhfUEFEKDB4NUYwLCAweDIwMCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT180XzE5X19BVUQzX0JCX1JYRAlJT01VWF9QQUQoMHg1RjQsIDB4MjA0LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzRfMjBfX0FVRDNfQkJfQ0sJSU9NVVhfUEFEKDB4NUY4LCAweDIwOCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT180XzIxX19BVUQzX0JCX0ZTCUlPTVVYX1BBRCgweDVGQywgMHgyMEMsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fNF8yMl9fQ1NQSTFfTU9TSQlJT01VWF9QQUQoMHg2MDAsIDB4MjEwLCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzRfMjNfX0NTUEkxX01JU08JSU9NVVhfUEFEKDB4NjA0LCAweDIxNCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT180XzI0X19DU1BJMV9TUzAJSU9NVVhfUEFEKDB4NjA4LCAweDIxOCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT180XzI1X19DU1BJMV9TUzEJSU9NVVhfUEFEKDB4NjBDLCAweDIxQywgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT180XzI2X19DU1BJMV9SRFkJSU9NVVhfUEFEKDB4NjEwLCAweDIyMCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT180XzI3X19DU1BJMV9TQ0xLCUlPTVVYX1BBRCgweDYxNCwgMHgyMjQsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0KLS8qIEJhYmJhZ2UgVUFSVDEgKi8KLSNkZWZpbmUgTVg1MV9QQURfVUFSVDFfUlhEX19VQVJUMV9SWEQJSU9NVVhfUEFEKDB4NjE4LCAweDIyOCwJSU9NVVhfQ09ORklHX0FMVDAsIDB4OWU0LCAwLCBNWDUxX1VBUlQxX1BBRF9DVFJMIHwgUEFEX0NUTF9TUkVfRkFTVCkKLSNkZWZpbmUgTVg1MV9QQURfVUFSVDFfVFhEX19VQVJUMV9UWEQJSU9NVVhfUEFEKDB4NjFDLCAweDIyQywgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTVg1MV9VQVJUMV9QQURfQ1RSTCB8IFBBRF9DVExfU1JFX0ZBU1QpCi0jZGVmaW5lIE1YNTFfUEFEX1VBUlQxX1JUU19fVUFSVDFfUlRTCUlPTVVYX1BBRCgweDYyMCwgMHgyMzAsIElPTVVYX0NPTkZJR19BTFQwLCAweDllMCwgMCwgTVg1MV9VQVJUMV9QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfVUFSVDFfQ1RTX19VQVJUMV9DVFMJSU9NVVhfUEFEKDB4NjI0LCAweDIzNCwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTVg1MV9VQVJUMV9QQURfQ1RSTCkKLQotLyogQmFiYmFnZSBVQVJUMiAqLwotI2RlZmluZSBNWDUxX1BBRF9VQVJUMl9SWERfX1VBUlQyX1JYRAlJT01VWF9QQUQoMHg2MjgsIDB4MjM4LCBJT01VWF9DT05GSUdfQUxUMCwgMHg5ZWMsIDIsIE1YNTFfVUFSVDJfUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX1VBUlQyX1RYRF9fVUFSVDJfVFhECUlPTVVYX1BBRCgweDYyQywgMHgyM0MsIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE1YNTFfVUFSVDJfUEFEX0NUUkwpCi0KLSNkZWZpbmUgTVg1MV9QQURfR1BJT18xXzIyX19VQVJUM19SWEQJSU9NVVhfUEFEKDB4NjMwLCAweDI0MCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT18xXzIzX19VQVJUM19UWEQJSU9NVVhfUEFEKDB4NjM0LCAweDI0NCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT18xXzI0X19PV0lSRV9MSU5FCUlPTVVYX1BBRCgweDYzOCwgMHgyNDgsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0tFWV9ST1cwX19LRVlfUk9XMAlJT01VWF9QQUQoMHg2M0MsIDB4MjRDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9LRVlfUk9XMV9fS0VZX1JPVzEJSU9NVVhfUEFEKDB4NjQwLCAweDI1MCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfS0VZX1JPVzJfX0tFWV9ST1cyCUlPTVVYX1BBRCgweDY0NCwgMHgyNTQsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0tFWV9ST1czX19LRVlfUk9XMwlJT01VWF9QQUQoMHg2NDgsIDB4MjU4LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9LRVlfQ09MMF9fS0VZX0NPTDAJSU9NVVhfUEFEKDB4NjRDLCAweDI1QywgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfS0VZX0NPTDFfX0tFWV9DT0wxCUlPTVVYX1BBRCgweDY1MCwgMHgyNjAsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0tFWV9DT0wyX19LRVlfQ09MMglJT01VWF9QQUQoMHg2NTQsIDB4MjY0LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9LRVlfQ09MM19fS0VZX0NPTDMJSU9NVVhfUEFEKDB4NjU4LCAweDI2OCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfS0VZX0NPTDRfX0tFWV9DT0w0CUlPTVVYX1BBRCgweDY1QywgMHgyNkMsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0tFWV9DT0w1X19LRVlfQ09MNQlJT01VWF9QQUQoMHg2NjAsIDB4MjcwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9DTEtfX1VTQkgxX0NMSwlJT01VWF9QQUQoMHg2NzgsIDB4Mjc4LCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBNWDUxX1VTQkgxX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9ESVJfX1VTQkgxX0RJUglJT01VWF9QQUQoMHg2N0MsIDB4MjdDLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBNWDUxX1VTQkgxX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9TVFBfX1VTQkgxX1NUUAlJT01VWF9QQUQoMHg2ODAsIDB4MjgwLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBNWDUxX1VTQkgxX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9TVFBfX0dQSU9fMV8yNwlJT01VWF9QQUQoMHg2ODAsIDB4MjgwLCBJT01VWF9DT05GSUdfR1BJTywgMHgwLCAwLCBNWDUxX1VTQkgxX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9OWFRfX1VTQkgxX05YVAlJT01VWF9QQUQoMHg2ODQsIDB4Mjg0LCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBNWDUxX1VTQkgxX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9EQVRBMF9fVVNCSDFfREFUQTAJSU9NVVhfUEFEKDB4Njg4LCAweDI4OCwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTVg1MV9VU0JIMV9QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfVVNCSDFfREFUQTFfX1VTQkgxX0RBVEExCUlPTVVYX1BBRCgweDY4QywgMHgyOEMsIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE1YNTFfVVNCSDFfUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX1VTQkgxX0RBVEEyX19VU0JIMV9EQVRBMglJT01VWF9QQUQoMHg2OTAsIDB4MjkwLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBNWDUxX1VTQkgxX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9EQVRBM19fVVNCSDFfREFUQTMJSU9NVVhfUEFEKDB4Njk0LCAweDI5NCwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTVg1MV9VU0JIMV9QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfVVNCSDFfREFUQTRfX1VTQkgxX0RBVEE0CUlPTVVYX1BBRCgweDY5OCwgMHgyOTgsIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE1YNTFfVVNCSDFfUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX1VTQkgxX0RBVEE1X19VU0JIMV9EQVRBNQlJT01VWF9QQUQoMHg2OUMsIDB4MjlDLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBNWDUxX1VTQkgxX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9EQVRBNl9fVVNCSDFfREFUQTYJSU9NVVhfUEFEKDB4NkEwLCAweDJBMCwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTVg1MV9VU0JIMV9QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfVVNCSDFfREFUQTdfX1VTQkgxX0RBVEE3CUlPTVVYX1BBRCgweDZBNCwgMHgyQTQsIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE1YNTFfVVNCSDFfUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fM18wX19ESTFfUElOMTEJSU9NVVhfUEFEKDB4NkE4LCAweDJBOCwgNCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT18zXzFfX0RJMV9QSU4xMglJT01VWF9QQUQoMHg2QUMsIDB4MkFDLCA0LCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfMl9fREkxX1BJTjEzCUlPTVVYX1BBRCgweDZCMCwgMHgyQjAsIDQsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fM18zX19ESTFfRDBfQ1MJSU9NVVhfUEFEKDB4NkI0LCAweDJCNCwgNCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT18zXzRfX0RJMV9EMV9DUwlJT01VWF9QQUQoMHg2QjgsIDB4MkI4LCA0LCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfNV9fRElTUEIyX1NFUl9ESU4JSU9NVVhfUEFEKDB4NkJDLCAweDJCQywgNCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT18zXzZfX0RJU1BCMl9TRVJfRElPCUlPTVVYX1BBRCgweDZDMCwgMHgyQzAsIDQsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fM183X19ESVNQQjJfU0VSX0NMSwlJT01VWF9QQUQoMHg2QzQsIDB4MkM0LCA0LCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfOF9fRElTUEIyX1NFUl9SUwlJT01VWF9QQUQoMHg2QzgsIDB4MkM4LCA0LCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQwX19ESVNQMV9EQVQwCUlPTVVYX1BBRCgweDZDQywgMHgyQ0MsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDFfX0RJU1AxX0RBVDEJSU9NVVhfUEFEKDB4NkQwLCAweDJEMCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMl9fRElTUDFfREFUMglJT01VWF9QQUQoMHg2RDQsIDB4MkQ0LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQzX19ESVNQMV9EQVQzCUlPTVVYX1BBRCgweDZEOCwgMHgyRDgsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDRfX0RJU1AxX0RBVDQJSU9NVVhfUEFEKDB4NkRDLCAweDJEQywgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUNV9fRElTUDFfREFUNQlJT01VWF9QQUQoMHg2RTAsIDB4MkUwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQ2X19ESVNQMV9EQVQ2CUlPTVVYX1BBRCgweDZFNCwgMHgyRTQsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDdfX0RJU1AxX0RBVDcJSU9NVVhfUEFEKDB4NkU4LCAweDJFOCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUOF9fRElTUDFfREFUOAlJT01VWF9QQUQoMHg2RUMsIDB4MkVDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQ5X19ESVNQMV9EQVQ5CUlPTVVYX1BBRCgweDZGMCwgMHgyRjAsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDEwX19ESVNQMV9EQVQxMAlJT01VWF9QQUQoMHg2RjQsIDB4MkY0LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQxMV9fRElTUDFfREFUMTEJSU9NVVhfUEFEKDB4NkY4LCAweDJGOCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMTJfX0RJU1AxX0RBVDEyCUlPTVVYX1BBRCgweDZGQywgMHgyRkMsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDEzX19ESVNQMV9EQVQxMwlJT01VWF9QQUQoMHg3MDAsIDB4MzAwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQxNF9fRElTUDFfREFUMTQJSU9NVVhfUEFEKDB4NzA0LCAweDMwNCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMTVfX0RJU1AxX0RBVDE1CUlPTVVYX1BBRCgweDcwOCwgMHgzMDgsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDE2X19ESVNQMV9EQVQxNglJT01VWF9QQUQoMHg3MEMsIDB4MzBDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQxN19fRElTUDFfREFUMTcJSU9NVVhfUEFEKDB4NzEwLCAweDMxMCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMThfX0RJU1AxX0RBVDE4CUlPTVVYX1BBRCgweDcxNCwgMHgzMTQsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDE5X19ESVNQMV9EQVQxOQlJT01VWF9QQUQoMHg3MTgsIDB4MzE4LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQyMF9fRElTUDFfREFUMjAJSU9NVVhfUEFEKDB4NzFDLCAweDMxQywgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMjFfX0RJU1AxX0RBVDIxCUlPTVVYX1BBRCgweDcyMCwgMHgzMjAsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDIyX19ESVNQMV9EQVQyMglJT01VWF9QQUQoMHg3MjQsIDB4MzI0LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQyM19fRElTUDFfREFUMjMJSU9NVVhfUEFEKDB4NzI4LCAweDMyOCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfREkxX1BJTjNfX0RJMV9QSU4zCUlPTVVYX1BBRCgweDcyQywgMHgzMkMsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0RJMV9QSU4yX19ESTFfUElOMglJT01VWF9QQUQoMHg3MzQsIDB4MzMwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESV9HUDFfX0RJX0dQMQlJT01VWF9QQUQoMHg3M0MsIDB4MzM0LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESV9HUDJfX0RJX0dQMglJT01VWF9QQUQoMHg3NDAsIDB4MzM4LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESV9HUDNfX0RJX0dQMwlJT01VWF9QQUQoMHg3NDQsIDB4MzNDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESTJfUElONF9fREkyX1BJTjQJSU9NVVhfUEFEKDB4NzQ4LCAweDM0MCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfREkyX1BJTjJfX0RJMl9QSU4yCUlPTVVYX1BBRCgweDc0QywgMHgzNDQsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0RJMl9QSU4zX19ESTJfUElOMwlJT01VWF9QQUQoMHg3NTAsIDB4MzQ4LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESTJfRElTUF9DTEtfX0RJMl9ESVNQX0NMSwlJT01VWF9QQUQoMHg3NTQsIDB4MzRDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESV9HUDRfX0RJX0dQNAlJT01VWF9QQUQoMHg3NTgsIDB4MzUwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQwX19ESVNQMl9EQVQwCUlPTVVYX1BBRCgweDc1QywgMHgzNTQsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDFfX0RJU1AyX0RBVDEJSU9NVVhfUEFEKDB4NzYwLCAweDM1OCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMl9fRElTUDJfREFUMglJT01VWF9QQUQoMHg3NjQsIDB4MzVDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQzX19ESVNQMl9EQVQzCUlPTVVYX1BBRCgweDc2OCwgMHgzNjAsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDRfX0RJU1AyX0RBVDQJSU9NVVhfUEFEKDB4NzZDLCAweDM2NCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUNV9fRElTUDJfREFUNQlJT01VWF9QQUQoMHg3NzAsIDB4MzY4LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzFfMTlfX0RJU1AyX0RBVDYJSU9NVVhfUEFEKDB4Nzc0LCAweDM2QywgNSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT18xXzI5X19ESVNQMl9EQVQ3CUlPTVVYX1BBRCgweDc3OCwgMHgzNzAsIDUsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fMV8zMF9fRElTUDJfREFUOAlJT01VWF9QQUQoMHg3N0MsIDB4Mzc0LCA1LCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzFfMzFfX0RJU1AyX0RBVDkJSU9NVVhfUEFEKDB4NzgwLCAweDM3OCwgNSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMTBfX0RJU1AyX0RBVDEwCUlPTVVYX1BBRCgweDc4NCwgMHgzN0MsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDExX19ESVNQMl9EQVQxMQlJT01VWF9QQUQoMHg3ODgsIDB4MzgwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQxMl9fRElTUDJfREFUMTIJSU9NVVhfUEFEKDB4NzhDLCAweDM4NCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMTNfX0RJU1AyX0RBVDEzCUlPTVVYX1BBRCgweDc5MCwgMHgzODgsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDE0X19ESVNQMl9EQVQxNAlJT01VWF9QQUQoMHg3OTQsIDB4MzhDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQxNV9fRElTUDJfREFUMTUJSU9NVVhfUEFEKDB4Nzk4LCAweDM5MCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfU0QxX0NNRF9fU0QxX0NNRAlJT01VWF9QQUQoMHg3OUMsIDB4Mzk0LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9TRDFfQ0xLX19TRDFfQ0xLCUlPTVVYX1BBRCgweDdBMCwgMHgzOTgsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX1NEMV9EQVRBMF9fU0QxX0RBVEEwCUlPTVVYX1BBRCgweDdBNCwgMHgzOUMsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX1NEMV9EQVRBMV9fU0QxX0RBVEExCUlPTVVYX1BBRCgweDdBOCwgMHgzQTAsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX1NEMV9EQVRBMl9fU0QxX0RBVEEyCUlPTVVYX1BBRCgweDdBQywgMHgzQTQsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX1NEMV9EQVRBM19fU0QxX0RBVEEzCUlPTVVYX1BBRCgweDdCMCwgMHgzQTgsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fMV8wX19HUElPMV8wCUlPTVVYX1BBRCgweDdCNCwgMHgzQUMsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fMV8xX19HUElPMV8xCUlPTVVYX1BBRCgweDdCOCwgMHgzQjAsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX1NEMl9DTURfX1NEMl9DTUQJSU9NVVhfUEFEKDB4N0JDLCAweDNCNCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfU0QyX0NMS19fU0QyX0NMSwlJT01VWF9QQUQoMHg3QzAsIDB4M0I4LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9TRDJfREFUQTBfX1NEMl9EQVRBMAlJT01VWF9QQUQoMHg3QzQsIDB4M0JDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9TRDJfREFUQTFfX1NEMl9EQVRBMQlJT01VWF9QQUQoMHg3QzgsIDB4M0MwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9TRDJfREFUQTJfX1NEMl9EQVRBMglJT01VWF9QQUQoMHg3Q0MsIDB4M0M0LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9TRDJfREFUQTNfX1NEMl9EQVRBMwlJT01VWF9QQUQoMHg3RDAsIDB4M0M4LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzFfMl9fR1BJTzFfMglJT01VWF9QQUQoMHg3RDQsIDB4M0NDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzFfM19fR1BJTzFfMwlJT01VWF9QQUQoMHg3RDgsIDB4M0QwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9QTUlDX0lOVF9SRVFfX1BNSUNfSU5UX1JFUQlJT01VWF9QQUQoMHg3RkMsIDB4M0Q0LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzFfNF9fR1BJTzFfNAlJT01VWF9QQUQoMHg4MDQsIDB4M0Q4LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzFfNV9fR1BJTzFfNQlJT01VWF9QQUQoMHg4MDgsIDB4M0RDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzFfNl9fR1BJTzFfNglJT01VWF9QQUQoMHg4MEMsIDB4M0UwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzFfN19fR1BJTzFfNwlJT01VWF9QQUQoMHg4MTAsIDB4M0U0LCAwLCAweDAsIDAsIE1YNTFfR1BJT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT18xXzhfX0dQSU8xXzgJSU9NVVhfUEFEKDB4ODE0LCAweDNFOCwgMCwgMHgwLCAxLCBcCi0JCQkJCQkoUEFEX0NUTF9TUkVfU0xPVyB8IFBBRF9DVExfRFNFX01FRCB8IFBBRF9DVExfUFVTXzEwMEtfVVAgfCAgUEFEX0NUTF9IWVMpKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzFfOV9fR1BJTzFfOQlJT01VWF9QQUQoMHg4MTgsIDB4M0VDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotCi0vKiBFSU0gKi8KLSNkZWZpbmUgTVg1MV9QQURfRUlNX0RBMF9fRUlNX0RBMAlJT01VWF9QQUQoMHg3YTgsIDB4MDFjLCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9EQTFfX0VJTV9EQTEJSU9NVVhfUEFEKDB4N2E4LCAweDAyMCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9FSU1fREEyX19FSU1fREEyCUlPTVVYX1BBRCgweDdhOCwgMHgwMjQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRUlNX0RBM19fRUlNX0RBMwlJT01VWF9QQUQoMHg3YTgsIDB4MDI4LCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9EQTRfX0VJTV9EQTQJSU9NVVhfUEFEKDB4N2FjLCAweDAyYywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9FSU1fREE1X19FSU1fREE1CUlPTVVYX1BBRCgweDdhYywgMHgwMzAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRUlNX0RBNl9fRUlNX0RBNglJT01VWF9QQUQoMHg3YWMsIDB4MDM0LCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9EQTdfX0VJTV9EQTcJSU9NVVhfUEFEKDB4N2FjLCAweDAzOCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9EQThfX0VJTV9EQTgJSU9NVVhfUEFEKDB4N2IwLCAweDAzYywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9FSU1fREE5X19FSU1fREE5CUlPTVVYX1BBRCgweDdiMCwgMHgwNDAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRUlNX0RBMTBfX0VJTV9EQTEwCUlPTVVYX1BBRCgweDdiMCwgMHgwNDQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRUlNX0RBMTFfX0VJTV9EQTExCUlPTVVYX1BBRCgweDdiMCwgMHgwNDgsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRUlNX0RBMTJfX0VJTV9EQTEyCUlPTVVYX1BBRCgweDdiYywgMHgwNGMsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRUlNX0RBMTNfX0VJTV9EQTEzCUlPTVVYX1BBRCgweDdiYywgMHgwNTAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRUlNX0RBMTRfX0VJTV9EQTE0CUlPTVVYX1BBRCgweDdiYywgMHgwNTQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRUlNX0RBMTVfX0VJTV9EQTE1CUlPTVVYX1BBRCgweDdiYywgMHgwNTgsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKy8qCQkJCQkJCSAgUEFEICAgIE1VWCAgIEFMVCBJTlBTRSBQQVRIIFBBRENUUkwgKi8KKyNkZWZpbmUgTVg1MV9QQURfRUlNX0RBMF9fRUlNX0RBMAkJSU9NVVhfUEFEKDB4N2E4LCAweDAxYywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fREExX19FSU1fREExCQlJT01VWF9QQUQoMHg3YTgsIDB4MDIwLCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EQTJfX0VJTV9EQTIJCUlPTVVYX1BBRCgweDdhOCwgMHgwMjQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0RBM19fRUlNX0RBMwkJSU9NVVhfUEFEKDB4N2E4LCAweDAyOCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fREE0X19FSU1fREE0CQlJT01VWF9QQUQoMHg3YWMsIDB4MDJjLCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EQTVfX0VJTV9EQTUJCUlPTVVYX1BBRCgweDdhYywgMHgwMzAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0RBNl9fRUlNX0RBNgkJSU9NVVhfUEFEKDB4N2FjLCAweDAzNCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fREE3X19FSU1fREE3CQlJT01VWF9QQUQoMHg3YWMsIDB4MDM4LCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EQThfX0VJTV9EQTgJCUlPTVVYX1BBRCgweDdiMCwgMHgwM2MsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0RBOV9fRUlNX0RBOQkJSU9NVVhfUEFEKDB4N2IwLCAweDA0MCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fREExMF9fRUlNX0RBMTAJCUlPTVVYX1BBRCgweDdiMCwgMHgwNDQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0RBMTFfX0VJTV9EQTExCQlJT01VWF9QQUQoMHg3YjAsIDB4MDQ4LCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EQTEyX19FSU1fREExMgkJSU9NVVhfUEFEKDB4N2JjLCAweDA0YywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fREExM19fRUlNX0RBMTMJCUlPTVVYX1BBRCgweDdiYywgMHgwNTAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0RBMTRfX0VJTV9EQTE0CQlJT01VWF9QQUQoMHg3YmMsIDB4MDU0LCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EQTE1X19FSU1fREExNQkJSU9NVVhfUEFEKDB4N2JjLCAweDA1OCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDE2X19HUElPXzJfMCAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4M2YwLCAweDA1YywgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDE2X19JMkMxX1NEQQkJSU9NVVhfUEFEKDB4M2YwLCAweDA1YywgKDQgfCBJT01VWF9DT05GSUdfU0lPTiksIFwKKwkJCQkJCQkweDA5YjQsIDAsIE1YNTFfSTJDX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDE3X19HUElPXzJfMSAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4M2Y0LCAweDA2MCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDE4X19HUElPXzJfMiAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4M2Y4LCAweDA2NCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDE5X19HUElPXzJfMyAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4M2ZjLCAweDA2OCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDE5X19JMkMxX1NDTAkJSU9NVVhfUEFEKDB4M2ZjLCAweDA2OCwgKDQgfCBJT01VWF9DT05GSUdfU0lPTiksIFwKKwkJCQkJCQkweDA5YjAsIDAsIE1YNTFfSTJDX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDIwX19HUElPXzJfNCAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDAwLCAweDA2YywgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDIxX19HUElPXzJfNQkJSU9NVVhfUEFEKDB4NDA0LCAweDA3MCwgMSwgMHgwLCAgIDAsIE1YNTFfR1BJT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QyMl9fR1BJT18yXzYgICAgICAgICAgICAgIElPTVVYX1BBRCgweDQwOCwgMHgwNzQsIDEsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QyM19fR1BJT18yXzcgICAgICAgICAgICAgIElPTVVYX1BBRCgweDQwYywgMHgwNzgsIDEsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QyNF9fVUFSVDNfQ1RTICAgICAgICAgICAgIElPTVVYX1BBRCgweDQxMCwgMHgwN2MsIDMsIDB4MCwgICAwLCBNWDUxX1VBUlQzX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDI1X19VQVJUM19SWEQgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDE0LCAweDA4MCwgMywgMHg5ZjQsIDAsIE1YNTFfVUFSVDNfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjVfX1VBUlQyX0NUUwkJSU9NVVhfUEFEKDB4NDE0LCAweDA4MCwgNCwgMHgwLCAgIDAsIE1YNTFfVUFSVDJfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjZfX1VBUlQzX1RYRCAgICAgICAgICAgICBJT01VWF9QQUQoMHg0MTgsIDB4MDg0LCAzLCAweDAsICAgMCwgTVg1MV9VQVJUM19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QyNl9fVUFSVDJfUlRTCQlJT01VWF9QQUQoMHg0MTgsIDB4MDg0LCA0LCAweDllOCwgMywgTVg1MV9VQVJUMl9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QyN19fVUFSVDNfUlRTICAgICAgICAgICAgIElPTVVYX1BBRCgweDQxYywgMHgwODgsIDMsIDB4OWYwLCAzLCBNWDUxX1VBUlQzX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDI4X19FSU1fRDI4ICAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDIwLCAweDA4YywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDI5X19FSU1fRDI5ICAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDI0LCAweDA5MCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDMwX19FSU1fRDMwICAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDI4LCAweDA5NCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDMxX19FSU1fRDMxICAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDJjLCAweDA5YywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTE2X19HUElPXzJfMTAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDMwLCAweDA5YywgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTE3X19HUElPXzJfMTEgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDM0LCAweDBhMCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTE4X19HUElPXzJfMTIgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDM4LCAweDBhNCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTE5X19HUElPXzJfMTMgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDNjLCAweDBhOCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTIwX19HUElPXzJfMTQgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDQwLCAweDBhYywgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTIxX19HUElPXzJfMTUgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDQ0LCAweDBiMCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTIyX19HUElPXzJfMTYgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDQ4LCAweDBiNCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTIzX19HUElPXzJfMTcgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDRjLCAweDBiOCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTI0X19HUElPXzJfMTggICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDUwLCAweDBiYywgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTI1X19HUElPXzJfMTkgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDU0LCAweDBjMCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTI2X19HUElPXzJfMjAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDU4LCAweDBjNCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTI3X19HUElPXzJfMjEgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDVjLCAweDBjOCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRUIwX19FSU1fRUIwICAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDYwLCAweDBjYywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRUIxX19FSU1fRUIxICAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDY0LCAweDBkMCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRUIyX19HUElPXzJfMjIgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDY4LCAweDBkNCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRUIzX19HUElPXzJfMjMgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDZjLCAweDBkOCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fT0VfX0dQSU9fMl8yNCAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDcwLCAweDBkYywgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQ1MwX19HUElPXzJfMjUgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDc0LCAweDBlMCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQ1MxX19HUElPXzJfMjYgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDc4LCAweDBlNCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQ1MyX19HUElPXzJfMjcgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDdjLCAweDBlOCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQ1MzX19HUElPXzJfMjggICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDgwLCAweDBlYywgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQ1M0X19HUElPXzJfMjkgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDg0LCAweDBmMCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQ1M1X19HUElPXzJfMzAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDg4LCAweDBmNCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRFRBQ0tfX0dQSU9fMl8zMSAgICAgICAgICAgSU9NVVhfUEFEKDB4NDhjLCAweDBmOCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fTEJBX19HUElPXzNfMSAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDk0LCAweDBGQywgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQ1JFX19HUElPXzNfMiAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NEEwLCAweDEwMCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9EUkFNX0NTMV9fRFJBTV9DUzEgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NEQwLCAweDEwNCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9XRV9CX19HUElPXzNfMyAgICAgICAgICAgSU9NVVhfUEFEKDB4NEU0LCAweDEwOCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SRV9CX19HUElPXzNfNCAgICAgICAgICAgSU9NVVhfUEFEKDB4NEU4LCAweDEwQywgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9BTEVfX0dQSU9fM181ICAgICAgICAgICAgSU9NVVhfUEFEKDB4NEVDLCAweDExMCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DTEVfX0dQSU9fM182ICAgICAgICAgICAgSU9NVVhfUEFEKDB4NEYwLCAweDExNCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9XUF9CX19HUElPXzNfNyAgICAgICAgICAgSU9NVVhfUEFEKDB4NEY0LCAweDExOCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SQjBfX0dQSU9fM184ICAgICAgICAgICAgSU9NVVhfUEFEKDB4NEY4LCAweDExQywgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SQjFfX0dQSU9fM185ICAgICAgICAgICAgSU9NVVhfUEFEKDB4NEZDLCAweDEyMCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SQjJfX0dQSU9fM18xMCAgICAgICAgICAgSU9NVVhfUEFEKDB4NTAwLCAweDEyNCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SQjNfX0dQSU9fM18xMSAgICAgICAgICAgSU9NVVhfUEFEKDB4NTA0LCAweDEyOCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPX05BTkRfX0dQSU9fM18xMiAgICAgICAgICAgSU9NVVhfUEFEKDB4NTE0LCAweDEyQywgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzBfX0dQSU9fM18xNiAgICAgICAgICAgSU9NVVhfUEFEKDB4NTE4LCAweDEzMCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzFfX0dQSU9fM18xNyAgICAgICAgICAgSU9NVVhfUEFEKDB4NTFDLCAweDEzNCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzJfX0dQSU9fM18xOCAgICAgICAgICAgSU9NVVhfUEFEKDB4NTIwLCAweDEzOCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzNfX0dQSU9fM18xOSAgICAgICAgICAgSU9NVVhfUEFEKDB4NTI0LCAweDEzQywgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzRfX0dQSU9fM18yMCAgICAgICAgICAgSU9NVVhfUEFEKDB4NTI4LCAweDE0MCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzVfX0dQSU9fM18yMSAgICAgICAgICAgSU9NVVhfUEFEKDB4NTJDLCAweDE0NCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzZfX0dQSU9fM18yMiAgICAgICAgICAgSU9NVVhfUEFEKDB4NTMwLCAweDE0OCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzdfX0dQSU9fM18yMyAgICAgICAgICAgSU9NVVhfUEFEKDB4NTM0LCAweDE0QywgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SRFlfSU5UX19HUElPXzNfMjQgICAgICAgSU9NVVhfUEFEKDB4NTM4LCAweDE1MCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EMTVfX0dQSU9fM18yNSAgICAgICAgICAgSU9NVVhfUEFEKDB4NTNDLCAweDE1NCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EMTRfX0dQSU9fM18yNiAgICAgICAgICAgSU9NVVhfUEFEKDB4NTQwLCAweDE1OCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EMTNfX0dQSU9fM18yNyAgICAgICAgICAgSU9NVVhfUEFEKDB4NTQ0LCAweDE1QywgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EMTJfX0dQSU9fM18yOCAgICAgICAgICAgSU9NVVhfUEFEKDB4NTQ4LCAweDE2MCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EMTFfX0dQSU9fM18yOSAgICAgICAgICAgSU9NVVhfUEFEKDB4NTRDLCAweDE2NCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EMTBfX0dQSU9fM18zMCAgICAgICAgICAgSU9NVVhfUEFEKDB4NTUwLCAweDE2OCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EOV9fR1BJT18zXzMxICAgICAgICAgICAgSU9NVVhfUEFEKDB4NTU0LCAweDE2QywgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EOF9fR1BJT180XzAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NTU4LCAweDE3MCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EN19fR1BJT180XzEgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NTVDLCAweDE3NCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9ENl9fR1BJT180XzIgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NTYwLCAweDE3OCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9ENV9fR1BJT180XzMgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NTY0LCAweDE3QywgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9ENF9fR1BJT180XzQgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NTY4LCAweDE4MCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EM19fR1BJT180XzUgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NTZDLCAweDE4NCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EMl9fR1BJT180XzYgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NTcwLCAweDE4OCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EMV9fR1BJT180XzcgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NTc0LCAweDE4QywgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EMF9fR1BJT180XzggICAgICAgICAgICAgSU9NVVhfUEFEKDB4NTc4LCAweDE5MCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kxX0Q4X19HUElPXzNfMTIgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NTdDLCAweDE5NCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kxX0Q5X19HUElPXzNfMTMgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NTgwLCAweDE5OCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kxX0QxMF9fQ1NJMV9EMTAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NTg0LCAweDE5QywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kxX0QxMV9fQ1NJMV9EMTEgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NTg4LCAweDFBMCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kxX0QxMl9fQ1NJMV9EMTIgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NThDLCAweDFBNCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kxX0QxM19fQ1NJMV9EMTMgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NTkwLCAweDFBOCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kxX0QxNF9fQ1NJMV9EMTQgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NTk0LCAweDFBQywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kxX0QxNV9fQ1NJMV9EMTUgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NTk4LCAweDFCMCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kxX0QxNl9fQ1NJMV9EMTYgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NTlDLCAweDFCNCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kxX0QxN19fQ1NJMV9EMTcgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NUEwLCAweDFCOCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kxX0QxOF9fQ1NJMV9EMTggICAgICAgICAgICAgSU9NVVhfUEFEKDB4NUE0LCAweDFCQywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kxX0QxOV9fQ1NJMV9EMTkgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NUE4LCAweDFDMCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kxX1ZTWU5DX19DU0kxX1ZTWU5DICAgICAgICAgSU9NVVhfUEFEKDB4NUFDLCAweDFDNCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kxX0hTWU5DX19DU0kxX0hTWU5DICAgICAgICAgSU9NVVhfUEFEKDB4NUIwLCAweDFDOCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kxX1BJWENMS19fQ1NJMV9QSVhDTEsgICAgICAgSU9NVVhfUEFEKDB4NUI0LCAweDAwMCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kxX01DTEtfX0NTSTFfTUNMSyAgICAgICAgICAgSU9NVVhfUEFEKDB4NUI4LCAweDAwMCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kxX1BLRTBfX0NTSTFfUEtFMCAgICAgICAgICAgSU9NVVhfUEFEKDB4ODYwLCAweDAwMCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kyX0QxMl9fR1BJT180XzkgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NUJDLCAweDFDQywgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kyX0QxM19fR1BJT180XzEwICAgICAgICAgICAgSU9NVVhfUEFEKDB4NUMwLCAweDFEMCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kyX0QxNF9fR1BJT180XzExICAgICAgICAgICAgSU9NVVhfUEFEKDB4NUM0LCAweDFENCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kyX0QxNV9fR1BJT180XzEyICAgICAgICAgICAgSU9NVVhfUEFEKDB4NUM4LCAweDFEOCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kyX0QxNl9fR1BJT180XzExICAgICAgICAgICAgSU9NVVhfUEFEKDB4NUNDLCAweDFEQywgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kyX0QxN19fR1BJT180XzEyICAgICAgICAgICAgSU9NVVhfUEFEKDB4NUQwLCAweDFFMCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kyX0QxOF9fR1BJT180XzExICAgICAgICAgICAgSU9NVVhfUEFEKDB4NUQ0LCAweDFFNCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kyX0QxOV9fR1BJT180XzEyICAgICAgICAgICAgSU9NVVhfUEFEKDB4NUQ4LCAweDFFOCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kyX1ZTWU5DX19HUElPXzRfMTMgICAgICAgICAgSU9NVVhfUEFEKDB4NURDLCAweDFFQywgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kyX0hTWU5DX19HUElPXzRfMTQgICAgICAgICAgSU9NVVhfUEFEKDB4NUUwLCAweDFGMCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kyX1BJWENMS19fR1BJT180XzE1ICAgICAgICAgSU9NVVhfUEFEKDB4NUU0LCAweDFGNCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9JMkMxX0NMS19fR1BJT180XzE2ICAgICAgICAgICAgSU9NVVhfUEFEKDB4NUU4LCAweDFGOCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9JMkMxX0NMS19fSFNJMkNfQ0xLCQlJT01VWF9QQUQoMHg1RTgsIDB4MUY4LCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0kyQzFfREFUX19HUElPXzRfMTcgICAgICAgICAgICBJT01VWF9QQUQoMHg1RUMsIDB4MUZDLCAzLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0kyQzFfREFUX19IU0kyQ19EQVQJCUlPTVVYX1BBRCgweDVFQywgMHgxRkMsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfQVVEM19CQl9UWERfX0dQSU9fNF8xOCAgICAgICAgIElPTVVYX1BBRCgweDVGMCwgMHgyMDAsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfQVVEM19CQl9SWERfX0dQSU9fNF8xOSAgICAgICAgIElPTVVYX1BBRCgweDVGNCwgMHgyMDQsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfQVVEM19CQl9DS19fR1BJT180XzIwICAgICAgICAgIElPTVVYX1BBRCgweDVGOCwgMHgyMDgsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfQVVEM19CQl9GU19fR1BJT180XzIxICAgICAgICAgIElPTVVYX1BBRCgweDVGQywgMHgyMEMsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfQ1NQSTFfTU9TSV9fR1BJT180XzIyICAgICAgICAgIElPTVVYX1BBRCgweDYwMCwgMHgyMTAsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfQ1NQSTFfTUlTT19fR1BJT180XzIzICAgICAgICAgIElPTVVYX1BBRCgweDYwNCwgMHgyMTQsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfQ1NQSTFfU1MwX19HUElPXzRfMjQgICAgICAgICAgIElPTVVYX1BBRCgweDYwOCwgMHgyMTgsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfQ1NQSTFfU1MxX19HUElPXzRfMjUgICAgICAgICAgIElPTVVYX1BBRCgweDYwQywgMHgyMUMsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfQ1NQSTFfUkRZX19HUElPXzRfMjYgICAgICAgICAgIElPTVVYX1BBRCgweDYxMCwgMHgyMjAsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfQ1NQSTFfU0NMS19fR1BJT180XzI3ICAgICAgICAgIElPTVVYX1BBRCgweDYxNCwgMHgyMjQsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfVUFSVDFfUlhEX19VQVJUMV9SWEQgICAgICAgICAgIElPTVVYX1BBRCgweDYxOCwgMHgyMjgsIDAsIDB4OWU0LCAwLCBNWDUxX1VBUlQxX1BBRF9DVFJMIHwgUEFEX0NUTF9TUkVfRkFTVCkKKyNkZWZpbmUgTVg1MV9QQURfVUFSVDFfVFhEX19VQVJUMV9UWEQgICAgICAgICAgIElPTVVYX1BBRCgweDYxQywgMHgyMkMsIDAsIDB4MCwgICAwLCBNWDUxX1VBUlQxX1BBRF9DVFJMIHwgUEFEX0NUTF9TUkVfRkFTVCkKKyNkZWZpbmUgTVg1MV9QQURfVUFSVDFfUlRTX19VQVJUMV9SVFMgICAgICAgICAgIElPTVVYX1BBRCgweDYyMCwgMHgyMzAsIDAsIDB4OWUwLCAwLCBNWDUxX1VBUlQxX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9VQVJUMV9DVFNfX1VBUlQxX0NUUyAgICAgICAgICAgSU9NVVhfUEFEKDB4NjI0LCAweDIzNCwgMCwgMHgwLCAgIDAsIE1YNTFfVUFSVDFfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX1VBUlQyX1JYRF9fVUFSVDJfUlhEICAgICAgICAgICBJT01VWF9QQUQoMHg2MjgsIDB4MjM4LCAwLCAweDllYywgMiwgTVg1MV9VQVJUMl9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfVUFSVDJfVFhEX19VQVJUMl9UWEQgICAgICAgICAgIElPTVVYX1BBRCgweDYyQywgMHgyM0MsIDAsIDB4MCwgICAwLCBNWDUxX1VBUlQyX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9VQVJUM19SWERfX1VBUlQzX1JYRAkJSU9NVVhfUEFEKDB4NjMwLCAweDI0MCwgMSwgMHg5ZjQsIDQsIE1YNTFfVUFSVDNfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX1VBUlQzX1JYRF9fR1BJT18xXzIyICAgICAgICAgICBJT01VWF9QQUQoMHg2MzAsIDB4MjQwLCAzLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX1VBUlQzX1RYRF9fVUFSVDNfVFhECQlJT01VWF9QQUQoMHg2MzQsIDB4MjQ0LCAxLCAweDAsICAgMCwgTVg1MV9VQVJUM19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfVUFSVDNfVFhEX19HUElPXzFfMjMgICAgICAgICAgIElPTVVYX1BBRCgweDYzNCwgMHgyNDQsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfT1dJUkVfTElORV9fR1BJT18xXzI0ICAgICAgICAgIElPTVVYX1BBRCgweDYzOCwgMHgyNDgsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfS0VZX1JPVzBfX0tFWV9ST1cwICAgICAgICAgICAgIElPTVVYX1BBRCgweDYzQywgMHgyNEMsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfS0VZX1JPVzFfX0tFWV9ST1cxICAgICAgICAgICAgIElPTVVYX1BBRCgweDY0MCwgMHgyNTAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfS0VZX1JPVzJfX0tFWV9ST1cyICAgICAgICAgICAgIElPTVVYX1BBRCgweDY0NCwgMHgyNTQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfS0VZX1JPVzNfX0tFWV9ST1czICAgICAgICAgICAgIElPTVVYX1BBRCgweDY0OCwgMHgyNTgsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfS0VZX0NPTDBfX0tFWV9DT0wwICAgICAgICAgICAgIElPTVVYX1BBRCgweDY0QywgMHgyNUMsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfS0VZX0NPTDFfX0tFWV9DT0wxICAgICAgICAgICAgIElPTVVYX1BBRCgweDY1MCwgMHgyNjAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfS0VZX0NPTDJfX0tFWV9DT0wyICAgICAgICAgICAgIElPTVVYX1BBRCgweDY1NCwgMHgyNjQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfS0VZX0NPTDNfX0tFWV9DT0wzICAgICAgICAgICAgIElPTVVYX1BBRCgweDY1OCwgMHgyNjgsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfS0VZX0NPTDRfX0tFWV9DT0w0ICAgICAgICAgICAgIElPTVVYX1BBRCgweDY1QywgMHgyNkMsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfS0VZX0NPTDRfX1VBUlQzX1JUUwkJSU9NVVhfUEFEKDB4NjVDLCAweDI2QywgMiwgMHg5ZjAsIDQsIE1YNTFfVUFSVDNfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0tFWV9DT0w0X19JMkMyX1NDTAkJSU9NVVhfUEFEKDB4NjVDLCAweDI2QywgKDMgfCBJT01VWF9DT05GSUdfU0lPTiksIFwKKwkJCQkJCQkweDA5YjgsIDEsIE1YNTFfSTJDX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9LRVlfQ09MNV9fS0VZX0NPTDUgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NjYwLCAweDI3MCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9LRVlfQ09MNV9fVUFSVDNfQ1RTCQlJT01VWF9QQUQoMHg2NjAsIDB4MjcwLCAyLCAwLCAgICAgMCwgTVg1MV9VQVJUM19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfS0VZX0NPTDVfX0kyQzJfU0RBCQlJT01VWF9QQUQoMHg2NjAsIDB4MjcwLCAoMyB8IElPTVVYX0NPTkZJR19TSU9OKSwgXAorCQkJCQkJCTB4MDliYywgMSwgTVg1MV9JMkNfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX1VTQkgxX0NMS19fVVNCSDFfQ0xLICAgICAgICAgICBJT01VWF9QQUQoMHg2NzgsIDB4Mjc4LCAwLCAweDAsICAgMCwgTVg1MV9VU0JIMV9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfVVNCSDFfRElSX19VU0JIMV9ESVIgICAgICAgICAgIElPTVVYX1BBRCgweDY3QywgMHgyN0MsIDAsIDB4MCwgICAwLCBNWDUxX1VTQkgxX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9TVFBfX1VTQkgxX1NUUCAgICAgICAgICAgSU9NVVhfUEFEKDB4NjgwLCAweDI4MCwgMCwgMHgwLCAgIDAsIE1YNTFfVVNCSDFfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX1VTQkgxX1NUUF9fR1BJT18xXzI3ICAgICAgICAgICBJT01VWF9QQUQoMHg2ODAsIDB4MjgwLCAyLCAweDAsICAgMCwgTVg1MV9VU0JIMV9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfVVNCSDFfTlhUX19VU0JIMV9OWFQgICAgICAgICAgIElPTVVYX1BBRCgweDY4NCwgMHgyODQsIDAsIDB4MCwgICAwLCBNWDUxX1VTQkgxX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9EQVRBMF9fVVNCSDFfREFUQTAgICAgICAgSU9NVVhfUEFEKDB4Njg4LCAweDI4OCwgMCwgMHgwLCAgIDAsIE1YNTFfVVNCSDFfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX1VTQkgxX0RBVEExX19VU0JIMV9EQVRBMSAgICAgICBJT01VWF9QQUQoMHg2OEMsIDB4MjhDLCAwLCAweDAsICAgMCwgTVg1MV9VU0JIMV9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfVVNCSDFfREFUQTJfX1VTQkgxX0RBVEEyICAgICAgIElPTVVYX1BBRCgweDY5MCwgMHgyOTAsIDAsIDB4MCwgICAwLCBNWDUxX1VTQkgxX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9EQVRBM19fVVNCSDFfREFUQTMgICAgICAgSU9NVVhfUEFEKDB4Njk0LCAweDI5NCwgMCwgMHgwLCAgIDAsIE1YNTFfVVNCSDFfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX1VTQkgxX0RBVEE0X19VU0JIMV9EQVRBNCAgICAgICBJT01VWF9QQUQoMHg2OTgsIDB4Mjk4LCAwLCAweDAsICAgMCwgTVg1MV9VU0JIMV9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfVVNCSDFfREFUQTVfX1VTQkgxX0RBVEE1ICAgICAgIElPTVVYX1BBRCgweDY5QywgMHgyOUMsIDAsIDB4MCwgICAwLCBNWDUxX1VTQkgxX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9EQVRBNl9fVVNCSDFfREFUQTYgICAgICAgSU9NVVhfUEFEKDB4NkEwLCAweDJBMCwgMCwgMHgwLCAgIDAsIE1YNTFfVVNCSDFfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX1VTQkgxX0RBVEE3X19VU0JIMV9EQVRBNyAgICAgICBJT01VWF9QQUQoMHg2QTQsIDB4MkE0LCAwLCAweDAsICAgMCwgTVg1MV9VU0JIMV9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfREkxX1BJTjExX19HUElPXzNfMCAgICAgICAgICAgIElPTVVYX1BBRCgweDZBOCwgMHgyQTgsIDQsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfREkxX1BJTjEyX19HUElPXzNfMSAgICAgICAgICAgIElPTVVYX1BBRCgweDZBQywgMHgyQUMsIDQsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfREkxX1BJTjEzX19HUElPXzNfMiAgICAgICAgICAgIElPTVVYX1BBRCgweDZCMCwgMHgyQjAsIDQsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfREkxX0QwX0NTX19HUElPXzNfMyAgICAgICAgICAgIElPTVVYX1BBRCgweDZCNCwgMHgyQjQsIDQsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfREkxX0QxX0NTX19HUElPXzNfNCAgICAgICAgICAgIElPTVVYX1BBRCgweDZCOCwgMHgyQjgsIDQsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUEIyX1NFUl9ESU5fX0dQSU9fM181ICAgICAgIElPTVVYX1BBRCgweDZCQywgMHgyQkMsIDQsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUEIyX1NFUl9ESU9fX0dQSU9fM182ICAgICAgIElPTVVYX1BBRCgweDZDMCwgMHgyQzAsIDQsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUEIyX1NFUl9DTEtfX0dQSU9fM183ICAgICAgIElPTVVYX1BBRCgweDZDNCwgMHgyQzQsIDQsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUEIyX1NFUl9SU19fR1BJT18zXzggICAgICAgIElPTVVYX1BBRCgweDZDOCwgMHgyQzgsIDQsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMF9fRElTUDFfREFUMCAgICAgICAgIElPTVVYX1BBRCgweDZDQywgMHgyQ0MsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMV9fRElTUDFfREFUMSAgICAgICAgIElPTVVYX1BBRCgweDZEMCwgMHgyRDAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMl9fRElTUDFfREFUMiAgICAgICAgIElPTVVYX1BBRCgweDZENCwgMHgyRDQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUM19fRElTUDFfREFUMyAgICAgICAgIElPTVVYX1BBRCgweDZEOCwgMHgyRDgsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUNF9fRElTUDFfREFUNCAgICAgICAgIElPTVVYX1BBRCgweDZEQywgMHgyREMsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUNV9fRElTUDFfREFUNSAgICAgICAgIElPTVVYX1BBRCgweDZFMCwgMHgyRTAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUNl9fRElTUDFfREFUNiAgICAgICAgIElPTVVYX1BBRCgweDZFNCwgMHgyRTQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUN19fRElTUDFfREFUNyAgICAgICAgIElPTVVYX1BBRCgweDZFOCwgMHgyRTgsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUOF9fRElTUDFfREFUOCAgICAgICAgIElPTVVYX1BBRCgweDZFQywgMHgyRUMsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUOV9fRElTUDFfREFUOSAgICAgICAgIElPTVVYX1BBRCgweDZGMCwgMHgyRjAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMTBfX0RJU1AxX0RBVDEwICAgICAgIElPTVVYX1BBRCgweDZGNCwgMHgyRjQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMTFfX0RJU1AxX0RBVDExICAgICAgIElPTVVYX1BBRCgweDZGOCwgMHgyRjgsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMTJfX0RJU1AxX0RBVDEyICAgICAgIElPTVVYX1BBRCgweDZGQywgMHgyRkMsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMTNfX0RJU1AxX0RBVDEzICAgICAgIElPTVVYX1BBRCgweDcwMCwgMHgzMDAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMTRfX0RJU1AxX0RBVDE0ICAgICAgIElPTVVYX1BBRCgweDcwNCwgMHgzMDQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMTVfX0RJU1AxX0RBVDE1ICAgICAgIElPTVVYX1BBRCgweDcwOCwgMHgzMDgsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMTZfX0RJU1AxX0RBVDE2ICAgICAgIElPTVVYX1BBRCgweDcwQywgMHgzMEMsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMTdfX0RJU1AxX0RBVDE3ICAgICAgIElPTVVYX1BBRCgweDcxMCwgMHgzMTAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMThfX0RJU1AxX0RBVDE4ICAgICAgIElPTVVYX1BBRCgweDcxNCwgMHgzMTQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMTlfX0RJU1AxX0RBVDE5ICAgICAgIElPTVVYX1BBRCgweDcxOCwgMHgzMTgsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMjBfX0RJU1AxX0RBVDIwICAgICAgIElPTVVYX1BBRCgweDcxQywgMHgzMUMsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMjFfX0RJU1AxX0RBVDIxICAgICAgIElPTVVYX1BBRCgweDcyMCwgMHgzMjAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMjJfX0RJU1AxX0RBVDIyICAgICAgIElPTVVYX1BBRCgweDcyNCwgMHgzMjQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMjNfX0RJU1AxX0RBVDIzICAgICAgIElPTVVYX1BBRCgweDcyOCwgMHgzMjgsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfREkxX1BJTjNfX0RJMV9QSU4zICAgICAgICAgICAgIElPTVVYX1BBRCgweDcyQywgMHgzMkMsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfREkxX1BJTjJfX0RJMV9QSU4yICAgICAgICAgICAgIElPTVVYX1BBRCgweDczNCwgMHgzMzAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElfR1AxX19ESV9HUDEgICAgICAgICAgICAgICAgIElPTVVYX1BBRCgweDczQywgMHgzMzQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElfR1AyX19ESV9HUDIgICAgICAgICAgICAgICAgIElPTVVYX1BBRCgweDc0MCwgMHgzMzgsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElfR1AzX19ESV9HUDMgICAgICAgICAgICAgICAgIElPTVVYX1BBRCgweDc0NCwgMHgzM0MsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfREkyX1BJTjRfX0RJMl9QSU40ICAgICAgICAgICAgIElPTVVYX1BBRCgweDc0OCwgMHgzNDAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfREkyX1BJTjJfX0RJMl9QSU4yICAgICAgICAgICAgIElPTVVYX1BBRCgweDc0QywgMHgzNDQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfREkyX1BJTjNfX0RJMl9QSU4zICAgICAgICAgICAgIElPTVVYX1BBRCgweDc1MCwgMHgzNDgsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfREkyX0RJU1BfQ0xLX19ESTJfRElTUF9DTEsgICAgIElPTVVYX1BBRCgweDc1NCwgMHgzNEMsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElfR1A0X19ESV9HUDQgICAgICAgICAgICAgICAgIElPTVVYX1BBRCgweDc1OCwgMHgzNTAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMF9fRElTUDJfREFUMCAgICAgICAgIElPTVVYX1BBRCgweDc1QywgMHgzNTQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMV9fRElTUDJfREFUMSAgICAgICAgIElPTVVYX1BBRCgweDc2MCwgMHgzNTgsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMl9fRElTUDJfREFUMiAgICAgICAgIElPTVVYX1BBRCgweDc2NCwgMHgzNUMsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUM19fRElTUDJfREFUMyAgICAgICAgIElPTVVYX1BBRCgweDc2OCwgMHgzNjAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUNF9fRElTUDJfREFUNCAgICAgICAgIElPTVVYX1BBRCgweDc2QywgMHgzNjQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUNV9fRElTUDJfREFUNSAgICAgICAgIElPTVVYX1BBRCgweDc3MCwgMHgzNjgsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUNl9fR1BJT18xXzE5ICAgICAgICAgIElPTVVYX1BBRCgweDc3NCwgMHgzNkMsIDUsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUN19fR1BJT18xXzI5ICAgICAgICAgIElPTVVYX1BBRCgweDc3OCwgMHgzNzAsIDUsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUOF9fR1BJT18xXzMwICAgICAgICAgIElPTVVYX1BBRCgweDc3QywgMHgzNzQsIDUsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUOV9fR1BJT18xXzMxICAgICAgICAgIElPTVVYX1BBRCgweDc4MCwgMHgzNzgsIDUsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMTBfX0RJU1AyX0RBVDEwICAgICAgIElPTVVYX1BBRCgweDc4NCwgMHgzN0MsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMTFfX0RJU1AyX0RBVDExICAgICAgIElPTVVYX1BBRCgweDc4OCwgMHgzODAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMTJfX0RJU1AyX0RBVDEyICAgICAgIElPTVVYX1BBRCgweDc4QywgMHgzODQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMTNfX0RJU1AyX0RBVDEzICAgICAgIElPTVVYX1BBRCgweDc5MCwgMHgzODgsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMTRfX0RJU1AyX0RBVDE0ICAgICAgIElPTVVYX1BBRCgweDc5NCwgMHgzOEMsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMTVfX0RJU1AyX0RBVDE1ICAgICAgIElPTVVYX1BBRCgweDc5OCwgMHgzOTAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfU0QxX0NNRF9fU0QxX0NNRCAgICAgICAgICAgICAgIElPTVVYX1BBRCgweDc5QywgMHgzOTQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfU0QxX0NMS19fU0QxX0NMSyAgICAgICAgICAgICAgIElPTVVYX1BBRCgweDdBMCwgMHgzOTgsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfU0QxX0RBVEEwX19TRDFfREFUQTAgICAgICAgICAgIElPTVVYX1BBRCgweDdBNCwgMHgzOUMsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfU0QxX0RBVEExX19TRDFfREFUQTEgICAgICAgICAgIElPTVVYX1BBRCgweDdBOCwgMHgzQTAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfU0QxX0RBVEEyX19TRDFfREFUQTIgICAgICAgICAgIElPTVVYX1BBRCgweDdBQywgMHgzQTQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfU0QxX0RBVEEzX19TRDFfREFUQTMgICAgICAgICAgIElPTVVYX1BBRCgweDdCMCwgMHgzQTgsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18xXzBfX0dQSU9fMV8wCQlJT01VWF9QQUQoMHg3QjQsIDB4M0FDLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fMV8xX19HUElPXzFfMQkJSU9NVVhfUEFEKDB4N0I4LCAweDNCMCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9TRDJfQ01EX19TRDJfQ01EICAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4N0JDLCAweDNCNCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9TRDJfQ0xLX19TRDJfQ0xLICAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4N0MwLCAweDNCOCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9TRDJfREFUQTBfX1NEMl9EQVRBMCAgICAgICAgICAgSU9NVVhfUEFEKDB4N0M0LCAweDNCQywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9TRDJfREFUQTFfX1NEMl9EQVRBMSAgICAgICAgICAgSU9NVVhfUEFEKDB4N0M4LCAweDNDMCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9TRDJfREFUQTJfX1NEMl9EQVRBMiAgICAgICAgICAgSU9NVVhfUEFEKDB4N0NDLCAweDNDNCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9TRDJfREFUQTNfX1NEMl9EQVRBMyAgICAgICAgICAgSU9NVVhfUEFEKDB4N0QwLCAweDNDOCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzFfMl9fR1BJT18xXzIJCUlPTVVYX1BBRCgweDdENCwgMHgzQ0MsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18xXzJfX0kyQzJfU0NMCQlJT01VWF9QQUQoMHg3RDQsIDB4M0NDLCAoMiB8IElPTVVYX0NPTkZJR19TSU9OKSwgXAorCQkJCQkJCTB4OWI4LCAgIDMsIE1YNTFfSTJDX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzFfM19fR1BJT18xXzMJCUlPTVVYX1BBRCgweDdEOCwgMHgzRDAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18xXzNfX0kyQzJfU0RBCQlJT01VWF9QQUQoMHg3RDgsIDB4M0QwLCAoMiB8IElPTVVYX0NPTkZJR19TSU9OKSwgXAorCQkJCQkJCTB4OWJjLCAgIDMsIE1YNTFfSTJDX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9QTUlDX0lOVF9SRVFfX1BNSUNfSU5UX1JFUQlJT01VWF9QQUQoMHg3RkMsIDB4M0Q0LCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fMV80X19HUElPXzFfNAkJSU9NVVhfUEFEKDB4ODA0LCAweDNEOCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzFfNV9fR1BJT18xXzUJCUlPTVVYX1BBRCgweDgwOCwgMHgzREMsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18xXzZfX0dQSU9fMV82CQlJT01VWF9QQUQoMHg4MEMsIDB4M0UwLCAwLCAweDAsICAgMCwgTVg1MV9HUElPX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzFfN19fR1BJT18xXzcJCUlPTVVYX1BBRCgweDgxMCwgMHgzRTQsIDAsIDB4MCwgICAwLCBNWDUxX0dQSU9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fMV84X19HUElPXzFfOAkJSU9NVVhfUEFEKDB4ODE0LCAweDNFOCwgMCwgMHgwLCAgIDEsIE1YNTFfR1BJT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18xXzlfX0dQSU9fMV85CQlJT01VWF9QQUQoMHg4MTgsIDB4M0VDLCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCiAKICNlbmRpZiAvKiBfX01BQ0hfSU9NVVhfTVg1MV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teGM5MTIzMS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14YzkxMjMxLmgKaW5kZXggMzg4N2YzZi4uMTVkNTk1MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14YzkxMjMxLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14YzkxMjMxLmgKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCiAjaWZuZGVmIF9fTUFDSF9JT01VWF9NWEM5MTIzMV9IX18KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC12My5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LXYzLmgKaW5kZXggZjJmNzNkMy4uMDg4MGE0YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LXYzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LXYzLmgKQEAgLTg5LDYgKzg5LDIxIEBACiAjZGVmaW5lIFBBRF9DVExfU1JFX0ZBU1QJCSgxIDw8IDApCiAjZGVmaW5lIFBBRF9DVExfU1JFX1NMT1cJCSgwIDw8IDApCiAKKworI2RlZmluZSBNWDUxX05VTV9HUElPX1BPUlQJNAorCisjZGVmaW5lIEdQSU9fUElOX01BU0sgMHgxZgorCisjZGVmaW5lIEdQSU9fUE9SVF9TSElGVCA1CisjZGVmaW5lIEdQSU9fUE9SVF9NQVNLICgweDcgPDwgR1BJT19QT1JUX1NISUZUKQorCisjZGVmaW5lIEdQSU9fUE9SVEEJKDAgPDwgR1BJT19QT1JUX1NISUZUKQorI2RlZmluZSBHUElPX1BPUlRCCSgxIDw8IEdQSU9fUE9SVF9TSElGVCkKKyNkZWZpbmUgR1BJT19QT1JUQwkoMiA8PCBHUElPX1BPUlRfU0hJRlQpCisjZGVmaW5lIEdQSU9fUE9SVEQJKDMgPDwgR1BJT19QT1JUX1NISUZUKQorI2RlZmluZSBHUElPX1BPUlRFCSg0IDw8IEdQSU9fUE9SVF9TSElGVCkKKyNkZWZpbmUgR1BJT19QT1JURgkoNSA8PCBHUElPX1BPUlRfU0hJRlQpCisKIC8qCiAgKiBzZXR1cHMgYSBzaW5nbGUgcGFkIGluIHRoZSBpb211eGVyCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCBjNGI0MGMzLi41NjRlYzlkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC00NCwxMiArNDQsMTIgQEAKICAqLwogI2RlZmluZSBDT05TSVNURU5UX0RNQV9TSVpFIFNaXzhNCiAKLSNlbGlmIGRlZmluZWQoQ09ORklHX01YMV9WSURFTykKKyNlbGlmIGRlZmluZWQoQ09ORklHX01YMV9WSURFTykgfHwgZGVmaW5lZChDT05GSUdfVklERU9fTVgyX0hPU1RTVVBQT1JUKQogLyoKICAqIEluY3JlYXNlIHNpemUgb2YgRE1BLWNvbnNpc3RlbnQgbWVtb3J5IHJlZ2lvbi4KICAqIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGkuTVggY2FtZXJhIGRyaXZlciB0byBjYXB0dXJlIGF0IGxlYXN0IGZvdXIgVkdBIGZyYW1lcy4KICAqLwogI2RlZmluZSBDT05TSVNURU5UX0RNQV9TSVpFIFNaXzRNCi0jZW5kaWYgLyogQ09ORklHX01YMV9WSURFTyAqLworI2VuZGlmIC8qIENPTkZJR19NWDFfVklERU8gfHwgQ09ORklHX1ZJREVPX01YMl9IT1NUU1VQUE9SVCAqLwogCiAjZW5kaWYgLyogX19BU01fQVJDSF9NWENfTUVNT1JZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL21tYy5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL21tYy5oCmluZGV4IGRlMjEyOGQuLjI5MTE1ZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9tbWMuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbW1jLmgKQEAgLTMxLDYgKzMxLDkgQEAKIAogCS8qIGFkanVzdCBzbG90IHZvbHRhZ2UgKi8KIAl2b2lkICgqc2V0cG93ZXIpKHN0cnVjdCBkZXZpY2UgKiwgdW5zaWduZWQgaW50IHZkZCk7CisKKwkvKiBlbmFibGUgY2FyZCBkZXRlY3QgdXNpbmcgREFUMyAqLworCWludCBkYXQzX2NhcmRfZGV0ZWN0OwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgxLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgxLmgKaW5kZXggNWViYTdlNi4uNjQxYjI0NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDEuaApAQCAtOTEsMjQgKzkxLDI0IEBACiAjZGVmaW5lIE1YMV9TSU1fREFUQV9JTlQJMTYKICNkZWZpbmUgTVgxX1JUQ19JTlQJCTE3CiAjZGVmaW5lIE1YMV9SVENfU0FNSU5UCQkxOAotI2RlZmluZSBNWDFfVUFSVDJfTUlOVF9QRkVSUgkxOQotI2RlZmluZSBNWDFfVUFSVDJfTUlOVF9SVFMJMjAKLSNkZWZpbmUgTVgxX1VBUlQyX01JTlRfRFRSCTIxCi0jZGVmaW5lIE1YMV9VQVJUMl9NSU5UX1VBUlRDCTIyCi0jZGVmaW5lIE1YMV9VQVJUMl9NSU5UX1RYCTIzCi0jZGVmaW5lIE1YMV9VQVJUMl9NSU5UX1JYCTI0Ci0jZGVmaW5lIE1YMV9VQVJUMV9NSU5UX1BGRVJSCTI1Ci0jZGVmaW5lIE1YMV9VQVJUMV9NSU5UX1JUUwkyNgotI2RlZmluZSBNWDFfVUFSVDFfTUlOVF9EVFIJMjcKLSNkZWZpbmUgTVgxX1VBUlQxX01JTlRfVUFSVEMJMjgKLSNkZWZpbmUgTVgxX1VBUlQxX01JTlRfVFgJMjkKLSNkZWZpbmUgTVgxX1VBUlQxX01JTlRfUlgJMzAKKyNkZWZpbmUgTVgxX0lOVF9VQVJUMlBGRVJSCTE5CisjZGVmaW5lIE1YMV9JTlRfVUFSVDJSVFMJMjAKKyNkZWZpbmUgTVgxX0lOVF9VQVJUMkRUUgkyMQorI2RlZmluZSBNWDFfSU5UX1VBUlQyVUFSVEMJMjIKKyNkZWZpbmUgTVgxX0lOVF9VQVJUMlRYCQkyMworI2RlZmluZSBNWDFfSU5UX1VBUlQyUlgJCTI0CisjZGVmaW5lIE1YMV9JTlRfVUFSVDFQRkVSUgkyNQorI2RlZmluZSBNWDFfSU5UX1VBUlQxUlRTCTI2CisjZGVmaW5lIE1YMV9JTlRfVUFSVDFEVFIJMjcKKyNkZWZpbmUgTVgxX0lOVF9VQVJUMVVBUlRDCTI4CisjZGVmaW5lIE1YMV9JTlRfVUFSVDFUWAkJMjkKKyNkZWZpbmUgTVgxX0lOVF9VQVJUMVJYCQkzMAogI2RlZmluZSBNWDFfVk9JQ0VfREFDX0lOVAkzMQogI2RlZmluZSBNWDFfVk9JQ0VfQURDX0lOVAkzMgogI2RlZmluZSBNWDFfUEVOX0RBVEFfSU5UCTMzCiAjZGVmaW5lIE1YMV9QV01fSU5UCQkzNAogI2RlZmluZSBNWDFfU0RIQ19JTlQJCTM1Ci0jZGVmaW5lIE1YMV9JMkNfSU5UCQkzOQorI2RlZmluZSBNWDFfSU5UX0kyQwkJMzkKICNkZWZpbmUgTVgxX0NTUElfSU5UCQk0MQogI2RlZmluZSBNWDFfU1NJX1RYX0lOVAkJNDIKICNkZWZpbmUgTVgxX1NTSV9UWF9FUlJfSU5UCTQzCkBAIC0yNDUsNyArMjQ1LDcgQEAKICNkZWZpbmUgUEVOX0RBVEFfSU5UIE1YMV9QRU5fREFUQV9JTlQKICNkZWZpbmUgUFdNX0lOVCBNWDFfUFdNX0lOVAogI2RlZmluZSBTREhDX0lOVCBNWDFfU0RIQ19JTlQKLSNkZWZpbmUgSTJDX0lOVCBNWDFfSTJDX0lOVAorI2RlZmluZSBJMkNfSU5UIE1YMV9JTlRfSTJDCiAjZGVmaW5lIENTUElfSU5UIE1YMV9DU1BJX0lOVAogI2RlZmluZSBTU0lfVFhfSU5UIE1YMV9TU0lfVFhfSU5UCiAjZGVmaW5lIFNTSV9UWF9FUlJfSU5UIE1YMV9TU0lfVFhfRVJSX0lOVApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjUuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDI1LmgKaW5kZXggNGViNmUzMy4uNGE2ZjgwMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjUuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyNS5oCkBAIC0xMSw2ICsxMSwxMiBAQAogI2RlZmluZSBNWDI1X0FWSUNfQkFTRV9BRERSX1ZJUlQJMHhmYzQwMDAwMAogI2RlZmluZSBNWDI1X0FWSUNfU0laRQkJCVNaXzFNCiAKKyNkZWZpbmUgTVgyNV9JMkMxX0JBU0VfQUREUgkJKE1YMjVfQUlQUzFfQkFTRV9BRERSICsgMHg4MDAwMCkKKyNkZWZpbmUgTVgyNV9JMkMzX0JBU0VfQUREUgkJKE1YMjVfQUlQUzFfQkFTRV9BRERSICsgMHg4NDAwMCkKKyNkZWZpbmUgTVgyNV9DQU4xX0JBU0VfQUREUgkJKE1YMjVfQUlQUzFfQkFTRV9BRERSICsgMHg4ODAwMCkKKyNkZWZpbmUgTVgyNV9DQU4yX0JBU0VfQUREUgkJKE1YMjVfQUlQUzFfQkFTRV9BRERSICsgMHg4YzAwMCkKKyNkZWZpbmUgTVgyNV9JMkMyX0JBU0VfQUREUgkJKE1YMjVfQUlQUzFfQkFTRV9BRERSICsgMHg5ODAwMCkKKyNkZWZpbmUgTVgyNV9DU1BJMV9CQVNFX0FERFIJCShNWDI1X0FJUFMxX0JBU0VfQUREUiArIDB4YTQwMDApCiAjZGVmaW5lIE1YMjVfSU9NVVhDX0JBU0VfQUREUgkJKE1YMjVfQUlQUzFfQkFTRV9BRERSICsgMHhhYzAwMCkKIAogI2RlZmluZSBNWDI1X0NSTV9CQVNFX0FERFIJCShNWDI1X0FJUFMyX0JBU0VfQUREUiArIDB4ODAwMDApCkBAIC0yNywyMiArMzMsNDggQEAKIAlJTVhfSU9fQUREUkVTUyh4LCBNWDI1X0FJUFMyKSA/OgkJCVwKIAlJTVhfSU9fQUREUkVTUyh4LCBNWDI1X0FWSUMpKQogCisjZGVmaW5lIE1YMjVfQUlQUzFfSU9fQUREUkVTUyh4KSBcCisJKCgoeCkgLSBNWDI1X0FJUFMxX0JBU0VfQUREUikgKyBNWDI1X0FJUFMxX0JBU0VfQUREUl9WSVJUKQorCiAjZGVmaW5lIE1YMjVfVUFSVDFfQkFTRV9BRERSCQkweDQzZjkwMDAwCiAjZGVmaW5lIE1YMjVfVUFSVDJfQkFTRV9BRERSCQkweDQzZjk0MDAwCisjZGVmaW5lIE1YMjVfQVVETVVYX0JBU0VfQUREUgkJMHg0M2ZiMDAwMAorI2RlZmluZSBNWDI1X1VBUlQzX0JBU0VfQUREUgkJMHg1MDAwYzAwMAorI2RlZmluZSBNWDI1X1VBUlQ0X0JBU0VfQUREUgkJMHg1MDAwODAwMAorI2RlZmluZSBNWDI1X1VBUlQ1X0JBU0VfQUREUgkJMHg1MDAyYzAwMAogCisjZGVmaW5lIE1YMjVfQ1NQSTNfQkFTRV9BRERSCQkweDUwMDA0MDAwCisjZGVmaW5lIE1YMjVfQ1NQSTJfQkFTRV9BRERSCQkweDUwMDEwMDAwCiAjZGVmaW5lIE1YMjVfRkVDX0JBU0VfQUREUgkJMHg1MDAzODAwMAorI2RlZmluZSBNWDI1X1NTSTJfQkFTRV9BRERSCQkweDUwMDE0MDAwCisjZGVmaW5lIE1YMjVfU1NJMV9CQVNFX0FERFIJCTB4NTAwMzQwMDAKICNkZWZpbmUgTVgyNV9ORkNfQkFTRV9BRERSCQkweGJiMDAwMDAwCiAjZGVmaW5lIE1YMjVfRFJZSUNFX0JBU0VfQUREUgkJMHg1M2ZmYzAwMAogI2RlZmluZSBNWDI1X0xDRENfQkFTRV9BRERSCQkweDUzZmJjMDAwCisjZGVmaW5lIE1YMjVfS1BQX0JBU0VfQUREUgkJMHg0M2ZhODAwMAorI2RlZmluZSBNWDI1X09UR19CQVNFX0FERFIJCTB4NTNmZjQwMDAKKyNkZWZpbmUgTVgyNV9DU0lfQkFTRV9BRERSCQkweDUzZmY4MDAwCiAKLSNkZWZpbmUgTVgyNV9JTlRfRFJZSUNFCTI1Ci0jZGVmaW5lIE1YMjVfSU5UX0ZFQwk1NwotI2RlZmluZSBNWDI1X0lOVF9OQU5ERkMJMzMKLSNkZWZpbmUgTVgyNV9JTlRfTENEQwkzOQotCi0jaWYgZGVmaW5lZChJTVhfTkVFRFNfREVQUkVDQVRFRF9TWU1CT0xTKQotI2RlZmluZSBVQVJUMV9CQVNFX0FERFIJCQlNWDI1X1VBUlQxX0JBU0VfQUREUgotI2RlZmluZSBVQVJUMl9CQVNFX0FERFIJCQlNWDI1X1VBUlQyX0JBU0VfQUREUgotI2VuZGlmCisjZGVmaW5lIE1YMjVfSU5UX0NTUEkzCQkwCisjZGVmaW5lIE1YMjVfSU5UX0kyQzEJCTMKKyNkZWZpbmUgTVgyNV9JTlRfSTJDMgkJNAorI2RlZmluZSBNWDI1X0lOVF9VQVJUNAkJNQorI2RlZmluZSBNWDI1X0lOVF9JMkMzCQkxMAorI2RlZmluZSBNWDI1X0lOVF9TU0kyCQkxMQorI2RlZmluZSBNWDI1X0lOVF9TU0kxCQkxMgorI2RlZmluZSBNWDI1X0lOVF9DU1BJMgkJMTMKKyNkZWZpbmUgTVgyNV9JTlRfQ1NQSTEJCTE0CisjZGVmaW5lIE1YMjVfSU5UX0NTSQkJMTcKKyNkZWZpbmUgTVgyNV9JTlRfVUFSVDMJCTE4CisjZGVmaW5lIE1YMjVfSU5UX0tQUAkJMjQKKyNkZWZpbmUgTVgyNV9JTlRfRFJZSUNFCQkyNQorI2RlZmluZSBNWDI1X0lOVF9VQVJUMgkJMzIKKyNkZWZpbmUgTVgyNV9JTlRfTkFOREZDCQkzMworI2RlZmluZSBNWDI1X0lOVF9MQ0RDCQkzOQorI2RlZmluZSBNWDI1X0lOVF9VQVJUNQkJNDAKKyNkZWZpbmUgTVgyNV9JTlRfQ0FOMQkJNDMKKyNkZWZpbmUgTVgyNV9JTlRfQ0FOMgkJNDQKKyNkZWZpbmUgTVgyNV9JTlRfVUFSVDEJCTQ1CisjZGVmaW5lIE1YMjVfSU5UX0ZFQwkJNTcKIAogI2VuZGlmIC8qIGlmbmRlZiBfX01BQ0hfTVgyNV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDI3LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyNy5oCmluZGV4IGJhZTljZDcuLmE4YWIyZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDI3LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjcuaApAQCAtNDgsNyArNDgsNyBAQAogI2RlZmluZSBNWDI3X0NTUEkyX0JBU0VfQUREUgkJCShNWDI3X0FJUElfQkFTRV9BRERSICsgMHgwZjAwMCkKICNkZWZpbmUgTVgyN19TU0kxX0JBU0VfQUREUgkJCShNWDI3X0FJUElfQkFTRV9BRERSICsgMHgxMDAwMCkKICNkZWZpbmUgTVgyN19TU0kyX0JBU0VfQUREUgkJCShNWDI3X0FJUElfQkFTRV9BRERSICsgMHgxMTAwMCkKLSNkZWZpbmUgTVgyN19JMkNfQkFTRV9BRERSCQkJKE1YMjdfQUlQSV9CQVNFX0FERFIgKyAweDEyMDAwKQorI2RlZmluZSBNWDI3X0kyQzFfQkFTRV9BRERSCQkJKE1YMjdfQUlQSV9CQVNFX0FERFIgKyAweDEyMDAwKQogI2RlZmluZSBNWDI3X1NESEMxX0JBU0VfQUREUgkJCShNWDI3X0FJUElfQkFTRV9BRERSICsgMHgxMzAwMCkKICNkZWZpbmUgTVgyN19TREhDMl9CQVNFX0FERFIJCQkoTVgyN19BSVBJX0JBU0VfQUREUiArIDB4MTQwMDApCiAjZGVmaW5lIE1YMjdfR1BJT19CQVNFX0FERFIJCQkoTVgyN19BSVBJX0JBU0VfQUREUiArIDB4MTUwMDApCkBAIC0xNTAsNyArMTUwLDcgQEAKICNkZWZpbmUgTVgyN19JTlRfU0RIQzMJCTkKICNkZWZpbmUgTVgyN19JTlRfU0RIQzIJCTEwCiAjZGVmaW5lIE1YMjdfSU5UX1NESEMxCQkxMQotI2RlZmluZSBNWDI3X0lOVF9JMkMJCTEyCisjZGVmaW5lIE1YMjdfSU5UX0kyQzEJCTEyCiAjZGVmaW5lIE1YMjdfSU5UX1NTSTIJCTEzCiAjZGVmaW5lIE1YMjdfSU5UX1NTSTEJCTE0CiAjZGVmaW5lIE1YMjdfSU5UX0NTUEkyCQkxNQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214Ml9jYW0uaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDJfY2FtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MwODBhMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDJfY2FtLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIG14Mi1jYW0uaCAtIGkuTVgyNy9pLk1YMjUgY2FtZXJhIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgSW50ZWwgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgU2FzY2hhIEhhdWVyIDxzLmhhdWVyQHBlbmd1dHJvbml4LmRlPgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBCYXJ1Y2ggU2lhY2ggPGJhcnVjaEB0a29zLmNvLmlsPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2lmbmRlZiBfX01BQ0hfTVgyX0NBTV9IXworI2RlZmluZSBfX01BQ0hfTVgyX0NBTV9IXworCisjZGVmaW5lIE1YMl9DQU1FUkFfU1dBUDE2CQkoMSA8PCAwKQorI2RlZmluZSBNWDJfQ0FNRVJBX0VYVF9WU1lOQwkJKDEgPDwgMSkKKyNkZWZpbmUgTVgyX0NBTUVSQV9DQ0lSCQkJKDEgPDwgMikKKyNkZWZpbmUgTVgyX0NBTUVSQV9DQ0lSX0lOVEVSTEFDRQkoMSA8PCAzKQorI2RlZmluZSBNWDJfQ0FNRVJBX0hTWU5DX0hJR0gJCSgxIDw8IDQpCisjZGVmaW5lIE1YMl9DQU1FUkFfR0FURURfQ0xPQ0sJCSgxIDw8IDUpCisjZGVmaW5lIE1YMl9DQU1FUkFfSU5WX0RBVEEJCSgxIDw8IDYpCisjZGVmaW5lIE1YMl9DQU1FUkFfUENMS19TQU1QTEVfUklTSU5HCSgxIDw8IDcpCisjZGVmaW5lIE1YMl9DQU1FUkFfUEFDS19ESVJfTVNCCQkoMSA8PCA4KQorCisvKioKKyAqIHN0cnVjdCBteDJfY2FtZXJhX3BsYXRmb3JtX2RhdGEgLSBvcHRpb25hbCBwbGF0Zm9ybSBkYXRhIGZvciBteDJfY2FtZXJhCisgKiBAZmxhZ3M6IGFueSBjb21iaW5hdGlvbiBvZiBNWDJfQ0FNRVJBXyoKKyAqIEBjbGs6IGNsb2NrIHJhdGUgb2YgdGhlIGNzaSBibG9jayAvIDIKKyAqLworc3RydWN0IG14Ml9jYW1lcmFfcGxhdGZvcm1fZGF0YSB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGNsazsKK307CisKKyNlbmRpZiAvKiBfX01BQ0hfTVgyX0NBTV9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MzEuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDMxLmgKaW5kZXggZmI5MGUxMS4uYWZlZTNhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MzEuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzMS5oCkBAIC0yMyw3ICsyMyw3IEBACiAjZGVmaW5lIE1YMzFfRVRCX1NMT1Q0X0JBU0VfQUREUgkJKE1YMzFfQUlQUzFfQkFTRV9BRERSICsgMHgxMDAwMCkKICNkZWZpbmUgTVgzMV9FVEJfU0xPVDVfQkFTRV9BRERSCQkoTVgzMV9BSVBTMV9CQVNFX0FERFIgKyAweDE0MDAwKQogI2RlZmluZSBNWDMxX0VDVF9DVElPX0JBU0VfQUREUgkJCShNWDMxX0FJUFMxX0JBU0VfQUREUiArIDB4MTgwMDApCi0jZGVmaW5lIE1YMzFfSTJDX0JBU0VfQUREUgkJCShNWDMxX0FJUFMxX0JBU0VfQUREUiArIDB4ODAwMDApCisjZGVmaW5lIE1YMzFfSTJDMV9CQVNFX0FERFIJCQkoTVgzMV9BSVBTMV9CQVNFX0FERFIgKyAweDgwMDAwKQogI2RlZmluZSBNWDMxX0kyQzNfQkFTRV9BRERSCQkJKE1YMzFfQUlQUzFfQkFTRV9BRERSICsgMHg4NDAwMCkKICNkZWZpbmUgTVgzMV9PVEdfQkFTRV9BRERSCQkJKE1YMzFfQUlQUzFfQkFTRV9BRERSICsgMHg4ODAwMCkKICNkZWZpbmUgTVgzMV9BVEFfQkFTRV9BRERSCQkJKE1YMzFfQUlQUzFfQkFTRV9BRERSICsgMHg4YzAwMCkKQEAgLTE0NSw3ICsxNDUsNyBAQAogI2RlZmluZSBNWDMxX0lOVF9GSVJJCQk3CiAjZGVmaW5lIE1YMzFfSU5UX01NQ19TREhDMgk4CiAjZGVmaW5lIE1YMzFfSU5UX01NQ19TREhDMQk5Ci0jZGVmaW5lIE1YMzFfSU5UX0kyQwkJMTAKKyNkZWZpbmUgTVgzMV9JTlRfSTJDMQkJMTAKICNkZWZpbmUgTVgzMV9JTlRfU1NJMgkJMTEKICNkZWZpbmUgTVgzMV9JTlRfU1NJMQkJMTIKICNkZWZpbmUgTVgzMV9JTlRfQ1NQSTIJCTEzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzNS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MzUuaAppbmRleCA1MjZhNTU4Li5hZjMwMzhjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzNS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDM1LmgKQEAgLTE4LDcgKzE4LDcgQEAKICNkZWZpbmUgTVgzNV9FVEJfU0xPVDRfQkFTRV9BRERSCQkoTVgzNV9BSVBTMV9CQVNFX0FERFIgKyAweDEwMDAwKQogI2RlZmluZSBNWDM1X0VUQl9TTE9UNV9CQVNFX0FERFIJCShNWDM1X0FJUFMxX0JBU0VfQUREUiArIDB4MTQwMDApCiAjZGVmaW5lIE1YMzVfRUNUX0NUSU9fQkFTRV9BRERSCQkJKE1YMzVfQUlQUzFfQkFTRV9BRERSICsgMHgxODAwMCkKLSNkZWZpbmUgTVgzNV9JMkNfQkFTRV9BRERSCQkJKE1YMzVfQUlQUzFfQkFTRV9BRERSICsgMHg4MDAwMCkKKyNkZWZpbmUgTVgzNV9JMkMxX0JBU0VfQUREUgkJCShNWDM1X0FJUFMxX0JBU0VfQUREUiArIDB4ODAwMDApCiAjZGVmaW5lIE1YMzVfSTJDM19CQVNFX0FERFIJCQkoTVgzNV9BSVBTMV9CQVNFX0FERFIgKyAweDg0MDAwKQogI2RlZmluZSBNWDM1X1VBUlQxX0JBU0VfQUREUgkJCShNWDM1X0FJUFMxX0JBU0VfQUREUiArIDB4OTAwMDApCiAjZGVmaW5lIE1YMzVfVUFSVDJfQkFTRV9BRERSCQkJKE1YMzVfQUlQUzFfQkFTRV9BRERSICsgMHg5NDAwMCkKQEAgLTYwLDYgKzYwLDggQEAKICNkZWZpbmUgTVgzNV9SVENfQkFTRV9BRERSCQkJKE1YMzVfQUlQUzJfQkFTRV9BRERSICsgMHhkODAwMCkKICNkZWZpbmUgTVgzNV9XRE9HX0JBU0VfQUREUgkJCShNWDM1X0FJUFMyX0JBU0VfQUREUiArIDB4ZGMwMDApCiAjZGVmaW5lIE1YMzVfUFdNX0JBU0VfQUREUgkJCShNWDM1X0FJUFMyX0JBU0VfQUREUiArIDB4ZTAwMDApCisjZGVmaW5lIE1YMzVfQ0FOMV9CQVNFX0FERFIJCQkoTVgzNV9BSVBTMl9CQVNFX0FERFIgKyAweGU0MDAwKQorI2RlZmluZSBNWDM1X0NBTjJfQkFTRV9BRERSCQkJKE1YMzVfQUlQUzJfQkFTRV9BRERSICsgMHhlODAwMCkKICNkZWZpbmUgTVgzNV9SVElDX0JBU0VfQUREUgkJCShNWDM1X0FJUFMyX0JBU0VfQUREUiArIDB4ZWMwMDApCiAjZGVmaW5lIE1YMzVfT1RHX0JBU0VfQUREUgkJMHg1M2ZmNDAwMAogCkBAIC0xMjMsNyArMTI1LDcgQEAKICNkZWZpbmUgTVgzNV9JTlRfTU1DX1NESEMxCTcKICNkZWZpbmUgTVgzNV9JTlRfTU1DX1NESEMyCTgKICNkZWZpbmUgTVgzNV9JTlRfTU1DX1NESEMzCTkKLSNkZWZpbmUgTVgzNV9JTlRfSTJDCQkxMAorI2RlZmluZSBNWDM1X0lOVF9JMkMxCQkxMAogI2RlZmluZSBNWDM1X0lOVF9TU0kxCQkxMQogI2RlZmluZSBNWDM1X0lOVF9TU0kyCQkxMgogI2RlZmluZSBNWDM1X0lOVF9DU1BJMgkJMTMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDNfY2FtZXJhLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzX2NhbWVyYS5oCmluZGV4IDM2ZDdmZjIuLmYyMjZlZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDNfY2FtZXJhLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214M19jYW1lcmEuaApAQCAtMTIsMTAgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAogI2lmbmRlZiBfTVgzX0NBTUVSQV9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214YzkxMjMxLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjOTEyMzEuaAppbmRleCA1MTgyYjk4Li4wY2EzMTAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjOTEyMzEuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjOTEyMzEuaApAQCAtMTMsMTAgKzEzLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAjaWZuZGVmIF9fTUFDSF9NWEM5MTIzMV9IX18KICNkZWZpbmUgX19NQUNIX01YQzkxMjMxX0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214Y19uYW5kLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjX25hbmQuaAppbmRleCA1ZDJkMjFkLi4wNGMwZDA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjX25hbmQuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjX25hbmQuaApAQCAtMjAsOSArMjAsMTMgQEAKICNpZm5kZWYgX19BU01fQVJDSF9OQU5EX0gKICNkZWZpbmUgX19BU01fQVJDSF9OQU5EX0gKIAorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisKIHN0cnVjdCBteGNfbmFuZF9wbGF0Zm9ybV9kYXRhIHsKLQlpbnQgd2lkdGg7CS8qIGRhdGEgYnVzIHdpZHRoIGluIGJ5dGVzICovCi0JaW50IGh3X2VjYzoxOwkvKiAwIGlmIHN1cHJlc3MgaGFyZHdhcmUgRUNDICovCi0JaW50IGZsYXNoX2JidDoxOyAvKiBzZXQgdG8gMSB0byB1c2UgYSBmbGFzaCBiYXNlZCBiYnQgKi8KKwl1bnNpZ25lZCBpbnQgd2lkdGg7CS8qIGRhdGEgYnVzIHdpZHRoIGluIGJ5dGVzICovCisJdW5zaWduZWQgaW50IGh3X2VjYzoxOwkvKiAwIGlmIHN1cHJlc3MgaGFyZHdhcmUgRUNDICovCisJdW5zaWduZWQgaW50IGZsYXNoX2JidDoxOyAvKiBzZXQgdG8gMSB0byB1c2UgYSBmbGFzaCBiYXNlZCBiYnQgKi8KKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7CS8qIHBhcnRpdGlvbiB0YWJsZSAqLworCWludCBucl9wYXJ0czsJCQkvKiBzaXplIG9mIHBhcnRzICovCiB9OwogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTkFORF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggZWYwMDE5OS4uNGFjZDExNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMTIsMTAgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAKICNpZm5kZWYgX19BU01fQVJDSF9NWENfU1lTVEVNX0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3RpbWV4LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdGltZXguaAppbmRleCAwMjQ0MTZlLi4yZDk2MjQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdGltZXguaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdGltZXguaApAQCAtMTEsMTAgKzExLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAKICNpZm5kZWYgX19BU01fQVJDSF9NWENfVElNRVhfSF9fCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAppbmRleCBiNmQzZDBmLi5kOWJkMzdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTEzLDEwICsxMyw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19VTkNPTVBSRVNTX0hfXwogI2RlZmluZSBfX0FTTV9BUkNIX01YQ19VTkNPTVBSRVNTX0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggNDQyNDNhMi4uZWY2Mzc5YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0xMSwxMCArMTEsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAogI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19WTUFMTE9DX0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaXJxLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9pcnEuYwppbmRleCA3NzhkZGZlLi43MzMxZjJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pcnEuYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pcnEuYwpAQCAtMTQyLDkgKzE0Miw2IEBACiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKIAkJX19yYXdfd3JpdGVsKDAsIGF2aWNfYmFzZSArIEFWSUNfTklQUklPUklUWShpKSk7CiAKLQkvKiBpbml0IGFyY2hpdGVjdHVyZXMgY2hhaW5lZCBpbnRlcnJ1cHQgaGFuZGxlciAqLwotCW14Y19yZWdpc3Rlcl9ncGlvcygpOwotCiAjaWZkZWYgQ09ORklHX0ZJUQogCS8qIEluaXRpYWxpemUgRklRICovCiAJaW5pdF9GSVEoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL3N5c3RlbS5jIGIvYXJjaC9hcm0vcGxhdC1teGMvc3lzdGVtLmMKaW5kZXggOTdmNDI3OS4uOTI1YmNlNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvc3lzdGVtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvc3lzdGVtLmMKQEAgLTE0LDEwICsxNCw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy90emljLmMgYi9hcmNoL2FybS9wbGF0LW14Yy90emljLmMKaW5kZXggOWI4NmQyYS4uYjNkYTlhYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvdHppYy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL3R6aWMuYwpAQCAtMTQ1LDggKzE0NSw2IEBACiAJCXNldF9pcnFfaGFuZGxlcihpLCBoYW5kbGVfbGV2ZWxfaXJxKTsKIAkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEKTsKIAl9Ci0JbXhjX3JlZ2lzdGVyX2dwaW9zKCk7Ci0KIAlwcl9pbmZvKCJUcnVzdFpvbmUgSW50ZXJydXB0IENvbnRyb2xsZXIgKFRaSUMpIGluaXRpYWxpemVkXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1ub21hZGlrL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtbm9tYWRpay9ncGlvLmMKaW5kZXggNWE2ZWYyNS4uOTc3YzhmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1ub21hZGlrL2dwaW8uYworKysgYi9hcmNoL2FybS9wbGF0LW5vbWFkaWsvZ3Bpby5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCisjaW5jbHVkZSA8cGxhdC9waW5jZmcuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAKQEAgLTQ2LDIwICs0NywxMiBAQAogCXUzMiBlZGdlX2ZhbGxpbmc7CiB9OwogCi0vKiBNb2RlIGZ1bmN0aW9ucyAqLwotaW50IG5ta19ncGlvX3NldF9tb2RlKGludCBncGlvLCBpbnQgZ3Bpb19tb2RlKQorc3RhdGljIHZvaWQgX19ubWtfZ3Bpb19zZXRfbW9kZShzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXAsCisJCQkJdW5zaWduZWQgb2Zmc2V0LCBpbnQgZ3Bpb19tb2RlKQogewotCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXUzMiBhZnVuYywgYmZ1bmMsIGJpdDsKKwl1MzIgYml0ID0gMSA8PCBvZmZzZXQ7CisJdTMyIGFmdW5jLCBiZnVuYzsKIAotCW5ta19jaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoTk9NQURJS19HUElPX1RPX0lSUShncGlvKSk7Ci0JaWYgKCFubWtfY2hpcCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQliaXQgPSAxIDw8IChncGlvIC0gbm1rX2NoaXAtPmNoaXAuYmFzZSk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbm1rX2NoaXAtPmxvY2ssIGZsYWdzKTsKIAlhZnVuYyA9IHJlYWRsKG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fQUZTTEEpICYgfmJpdDsKIAliZnVuYyA9IHJlYWRsKG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fQUZTTEIpICYgfmJpdDsKIAlpZiAoZ3Bpb19tb2RlICYgTk1LX0dQSU9fQUxUX0EpCkBAIC02OCw2ICs2MSwyMDMgQEAKIAkJYmZ1bmMgfD0gYml0OwogCXdyaXRlbChhZnVuYywgbm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19BRlNMQSk7CiAJd3JpdGVsKGJmdW5jLCBubWtfY2hpcC0+YWRkciArIE5NS19HUElPX0FGU0xCKTsKK30KKworc3RhdGljIHZvaWQgX19ubWtfZ3Bpb19zZXRfc2xwbShzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXAsCisJCQkJdW5zaWduZWQgb2Zmc2V0LCBlbnVtIG5ta19ncGlvX3NscG0gbW9kZSkKK3sKKwl1MzIgYml0ID0gMSA8PCBvZmZzZXQ7CisJdTMyIHNscG07CisKKwlzbHBtID0gcmVhZGwobm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19TTFBDKTsKKwlpZiAobW9kZSA9PSBOTUtfR1BJT19TTFBNX05PQ0hBTkdFKQorCQlzbHBtIHw9IGJpdDsKKwllbHNlCisJCXNscG0gJj0gfmJpdDsKKwl3cml0ZWwoc2xwbSwgbm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19TTFBDKTsKK30KKworc3RhdGljIHZvaWQgX19ubWtfZ3Bpb19zZXRfcHVsbChzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXAsCisJCQkJdW5zaWduZWQgb2Zmc2V0LCBlbnVtIG5ta19ncGlvX3B1bGwgcHVsbCkKK3sKKwl1MzIgYml0ID0gMSA8PCBvZmZzZXQ7CisJdTMyIHBkaXM7CisKKwlwZGlzID0gcmVhZGwobm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19QRElTKTsKKwlpZiAocHVsbCA9PSBOTUtfR1BJT19QVUxMX05PTkUpCisJCXBkaXMgfD0gYml0OworCWVsc2UKKwkJcGRpcyAmPSB+Yml0OworCXdyaXRlbChwZGlzLCBubWtfY2hpcC0+YWRkciArIE5NS19HUElPX1BESVMpOworCisJaWYgKHB1bGwgPT0gTk1LX0dQSU9fUFVMTF9VUCkKKwkJd3JpdGVsKGJpdCwgbm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19EQVRTKTsKKwllbHNlIGlmIChwdWxsID09IE5NS19HUElPX1BVTExfRE9XTikKKwkJd3JpdGVsKGJpdCwgbm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19EQVRDKTsKK30KKworc3RhdGljIHZvaWQgX19ubWtfZ3Bpb19tYWtlX2lucHV0KHN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcCwKKwkJCQkgIHVuc2lnbmVkIG9mZnNldCkKK3sKKwl3cml0ZWwoMSA8PCBvZmZzZXQsIG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fRElSQyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fbm1rX2NvbmZpZ19waW4oc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwLCB1bnNpZ25lZCBvZmZzZXQsCisJCQkgICAgIHBpbl9jZmdfdCBjZmcpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKmFmbmFtZXNbXSA9IHsKKwkJW05NS19HUElPX0FMVF9HUElPXQk9ICJHUElPIiwKKwkJW05NS19HUElPX0FMVF9BXQk9ICJBIiwKKwkJW05NS19HUElPX0FMVF9CXQk9ICJCIiwKKwkJW05NS19HUElPX0FMVF9DXQk9ICJDIgorCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKnB1bGxuYW1lc1tdID0geworCQlbTk1LX0dQSU9fUFVMTF9OT05FXQk9ICJub25lIiwKKwkJW05NS19HUElPX1BVTExfVVBdCT0gInVwIiwKKwkJW05NS19HUElPX1BVTExfRE9XTl0JPSAiZG93biIsCisJCVszXSAvKiBpbGxlZ2FsICovCT0gIj8/IgorCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKnNscG1uYW1lc1tdID0geworCQlbTk1LX0dQSU9fU0xQTV9JTlBVVF0JCT0gImlucHV0IiwKKwkJW05NS19HUElPX1NMUE1fTk9DSEFOR0VdCT0gIm5vLWNoYW5nZSIsCisJfTsKKworCWludCBwaW4gPSBQSU5fTlVNKGNmZyk7CisJaW50IHB1bGwgPSBQSU5fUFVMTChjZmcpOworCWludCBhZiA9IFBJTl9BTFQoY2ZnKTsKKwlpbnQgc2xwbSA9IFBJTl9TTFBNKGNmZyk7CisKKwlkZXZfZGJnKG5ta19jaGlwLT5jaGlwLmRldiwgInBpbiAlZDogYWYgJXMsIHB1bGwgJXMsIHNscG0gJXNcbiIsCisJCXBpbiwgYWZuYW1lc1thZl0sIHB1bGxuYW1lc1twdWxsXSwgc2xwbW5hbWVzW3NscG1dKTsKKworCV9fbm1rX2dwaW9fbWFrZV9pbnB1dChubWtfY2hpcCwgb2Zmc2V0KTsKKwlfX25ta19ncGlvX3NldF9wdWxsKG5ta19jaGlwLCBvZmZzZXQsIHB1bGwpOworCV9fbm1rX2dwaW9fc2V0X3NscG0obm1rX2NoaXAsIG9mZnNldCwgc2xwbSk7CisJX19ubWtfZ3Bpb19zZXRfbW9kZShubWtfY2hpcCwgb2Zmc2V0LCBhZik7Cit9CisKKy8qKgorICogbm1rX2NvbmZpZ19waW4gLSBjb25maWd1cmUgYSBwaW4ncyBtdXggYXR0cmlidXRlcworICogQGNmZzogcGluIGNvbmZndXJhdGlvbgorICoKKyAqIENvbmZpZ3VyZXMgYSBwaW4ncyBtb2RlIChhbHRlcm5hdGUgZnVuY3Rpb24gb3IgR1BJTyksIGl0cyBwdWxsIHVwIHN0YXR1cywKKyAqIGFuZCBpdHMgc2xlZXAgbW9kZSBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24uICBUaGUgQGNmZyBpcworICogdXN1YWxseSBvbmUgb2YgdGhlIFNvQyBzcGVjaWZpYyBtYWNyb3MgZGVmaW5lZCBpbiBtYWNoLzxzb2M+LXBpbnMuaC4gIFRoZXNlCisgKiBhcmUgY29uc3RydWN0ZWQgdXNpbmcsIGFuZCBjYW4gYmUgZnVydGhlciBlbmhhbmNlZCB3aXRoLCB0aGUgbWFjcm9zIGluCisgKiBwbGF0L3BpbmNmZy5oLgorICoKKyAqIElmIGEgcGluJ3MgbW9kZSBpcyBzZXQgdG8gR1BJTywgaXQgaXMgY29uZmlndXJlZCBhcyBhbiBpbnB1dCB0byBhdm9pZAorICogc2lkZS1lZmZlY3RzLiAgVGhlIGdwaW8gY2FuIGJlIG1hbmlwdWxhdGVkIGxhdGVyIHVzaW5nIHN0YW5kYXJkIEdQSU8gQVBJCisgKiBjYWxscy4KKyAqLworaW50IG5ta19jb25maWdfcGluKHBpbl9jZmdfdCBjZmcpCit7CisJc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwOworCWludCBncGlvID0gUElOX05VTShjZmcpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlubWtfY2hpcCA9IGdldF9pcnFfY2hpcF9kYXRhKE5PTUFESUtfR1BJT19UT19JUlEoZ3BpbykpOworCWlmICghbm1rX2NoaXApCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm5ta19jaGlwLT5sb2NrLCBmbGFncyk7CisJX19ubWtfY29uZmlnX3BpbihubWtfY2hpcCwgZ3BpbyAtIG5ta19jaGlwLT5jaGlwLmJhc2UsIGNmZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbm1rX2NoaXAtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChubWtfY29uZmlnX3Bpbik7CisKKy8qKgorICogbm1rX2NvbmZpZ19waW5zIC0gY29uZmlndXJlIHNldmVyYWwgcGlucyBhdCBvbmNlCisgKiBAY2ZnczogYXJyYXkgb2YgcGluIGNvbmZpZ3VyYXRpb25zCisgKiBAbnVtOiBudW1iZXIgb2YgZWxtZW50cyBpbiB0aGUgYXJyYXkKKyAqCisgKiBDb25maWd1cmVzIHNldmVyYWwgcGlucyB1c2luZyBubWtfY29uZmlnX3BpbigpLiAgUmVmZXIgdG8gdGhhdCBmdW5jdGlvbiBmb3IKKyAqIGZ1cnRoZXIgaW5mb3JtYXRpb24uCisgKi8KK2ludCBubWtfY29uZmlnX3BpbnMocGluX2NmZ190ICpjZmdzLCBpbnQgbnVtKQoreworCWludCByZXQgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCWludCByZXQgPSBubWtfY29uZmlnX3BpbihjZmdzW2ldKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKG5ta19jb25maWdfcGlucyk7CisKKy8qKgorICogbm1rX2dwaW9fc2V0X3NscG0oKSAtIGNvbmZpZ3VyZSB0aGUgc2xlZXAgbW9kZSBvZiBhIHBpbgorICogQGdwaW86IHBpbiBudW1iZXIKKyAqIEBtb2RlOiBOTUtfR1BJT19TTFBNX0lOUFVUIG9yIE5NS19HUElPX1NMUE1fTk9DSEFOR0UsCisgKgorICogU2V0cyB0aGUgc2xlZXAgbW9kZSBvZiBhIHBpbi4gIElmIEBtb2RlIGlzIE5NS19HUElPX1NMUE1fSU5QVVQsIHRoZSBwaW4gaXMKKyAqIGNoYW5nZWQgdG8gYW4gaW5wdXQgKHdpdGggcHVsbHVwL2Rvd24gZW5hYmxlZCkgaW4gc2xlZXAgYW5kIGRlZXAgc2xlZXAuICBJZgorICogQG1vZGUgaXMgTk1LX0dQSU9fU0xQTV9OT0NIQU5HRSwgdGhlIHBpbiByZW1haW5zIGluIHRoZSBzdGF0ZSBpdCB3YXMKKyAqIGNvbmZpZ3VyZWQgZXZlbiB3aGVuIGluIHNsZWVwIGFuZCBkZWVwIHNsZWVwLgorICovCitpbnQgbm1rX2dwaW9fc2V0X3NscG0oaW50IGdwaW8sIGVudW0gbm1rX2dwaW9fc2xwbSBtb2RlKQoreworCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbm1rX2NoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShOT01BRElLX0dQSU9fVE9fSVJRKGdwaW8pKTsKKwlpZiAoIW5ta19jaGlwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZubWtfY2hpcC0+bG9jaywgZmxhZ3MpOworCV9fbm1rX2dwaW9fc2V0X3NscG0obm1rX2NoaXAsIGdwaW8gLSBubWtfY2hpcC0+Y2hpcC5iYXNlLCBtb2RlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZubWtfY2hpcC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbm1rX2dwaW9fc2V0X3B1bGwoKSAtIGVuYWJsZS9kaXNhYmxlIHB1bGwgdXAvZG93biBvbiBhIGdwaW8KKyAqIEBncGlvOiBwaW4gbnVtYmVyCisgKiBAcHVsbDogb25lIG9mIE5NS19HUElPX1BVTExfRE9XTiwgTk1LX0dQSU9fUFVMTF9VUCwgYW5kIE5NS19HUElPX1BVTExfTk9ORQorICoKKyAqIEVuYWJsZXMvZGlzYWJsZXMgcHVsbCB1cC9kb3duIG9uIGEgc3BlY2lmaWVkIHBpbi4gIFRoaXMgb25seSB0YWtlcyBlZmZlY3QgaWYKKyAqIHRoZSBwaW4gaXMgY29uZmlndXJlZCBhcyBhbiBpbnB1dCAoZWl0aGVyIGV4cGxpY2l0bHkgb3IgYnkgdGhlIGFsdGVybmF0ZQorICogZnVuY3Rpb24pLgorICoKKyAqIE5PVEU6IElmIGVuYWJsaW5nIHRoZSBwdWxsIHVwL2Rvd24sIHRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCB0aGUgR1BJTyBpcworICogY29uZmlndXJlZCBhcyBhbiBpbnB1dC4gIE90aGVyd2lzZSwgZHVlIHRvIHRoZSB3YXkgdGhlIGNvbnRyb2xsZXIgcmVnaXN0ZXJzCisgKiB3b3JrLCB0aGlzIGZ1bmN0aW9uIHdpbGwgY2hhbmdlIHRoZSB2YWx1ZSBvdXRwdXQgb24gdGhlIHBpbi4KKyAqLworaW50IG5ta19ncGlvX3NldF9wdWxsKGludCBncGlvLCBlbnVtIG5ta19ncGlvX3B1bGwgcHVsbCkKK3sKKwlzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW5ta19jaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoTk9NQURJS19HUElPX1RPX0lSUShncGlvKSk7CisJaWYgKCFubWtfY2hpcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbm1rX2NoaXAtPmxvY2ssIGZsYWdzKTsKKwlfX25ta19ncGlvX3NldF9wdWxsKG5ta19jaGlwLCBncGlvIC0gbm1rX2NoaXAtPmNoaXAuYmFzZSwgcHVsbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbm1rX2NoaXAtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKiBNb2RlIGZ1bmN0aW9ucyAqLworaW50IG5ta19ncGlvX3NldF9tb2RlKGludCBncGlvLCBpbnQgZ3Bpb19tb2RlKQoreworCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbm1rX2NoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShOT01BRElLX0dQSU9fVE9fSVJRKGdwaW8pKTsKKwlpZiAoIW5ta19jaGlwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZubWtfY2hpcC0+bG9jaywgZmxhZ3MpOworCV9fbm1rX2dwaW9fc2V0X21vZGUobm1rX2NoaXAsIGdwaW8gLSBubWtfY2hpcC0+Y2hpcC5iYXNlLCBncGlvX21vZGUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5ta19jaGlwLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKQEAgLTExMSwzMiArMzAxLDQxIEBACiAJd3JpdGVsKG5ta19ncGlvX2dldF9iaXRtYXNrKGdwaW8pLCBubWtfY2hpcC0+YWRkciArIE5NS19HUElPX0lDKTsKIH0KIAorZW51bSBubWtfZ3Bpb19pcnFfdHlwZSB7CisJTk9STUFMLAorCVdBS0UsCit9OworCiBzdGF0aWMgdm9pZCBfX25ta19ncGlvX2lycV9tb2RpZnkoc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwLAotCQkJCSAgaW50IGdwaW8sIGJvb2wgZW5hYmxlKQorCQkJCSAgaW50IGdwaW8sIGVudW0gbm1rX2dwaW9faXJxX3R5cGUgd2hpY2gsCisJCQkJICBib29sIGVuYWJsZSkKIHsKKwl1MzIgcmltc2MgPSB3aGljaCA9PSBXQUtFID8gTk1LX0dQSU9fUldJTVNDIDogTk1LX0dQSU9fUklNU0M7CisJdTMyIGZpbXNjID0gd2hpY2ggPT0gV0FLRSA/IE5NS19HUElPX0ZXSU1TQyA6IE5NS19HUElPX0ZJTVNDOwogCXUzMiBiaXRtYXNrID0gbm1rX2dwaW9fZ2V0X2JpdG1hc2soZ3Bpbyk7CiAJdTMyIHJlZzsKIAogCS8qIHdlIG11c3QgaW5kaXZpZHVhbGx5IHNldC9jbGVhciB0aGUgdHdvIGVkZ2VzICovCiAJaWYgKG5ta19jaGlwLT5lZGdlX3Jpc2luZyAmIGJpdG1hc2spIHsKLQkJcmVnID0gcmVhZGwobm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19SSU1TQyk7CisJCXJlZyA9IHJlYWRsKG5ta19jaGlwLT5hZGRyICsgcmltc2MpOwogCQlpZiAoZW5hYmxlKQogCQkJcmVnIHw9IGJpdG1hc2s7CiAJCWVsc2UKIAkJCXJlZyAmPSB+Yml0bWFzazsKLQkJd3JpdGVsKHJlZywgbm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19SSU1TQyk7CisJCXdyaXRlbChyZWcsIG5ta19jaGlwLT5hZGRyICsgcmltc2MpOwogCX0KIAlpZiAobm1rX2NoaXAtPmVkZ2VfZmFsbGluZyAmIGJpdG1hc2spIHsKLQkJcmVnID0gcmVhZGwobm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19GSU1TQyk7CisJCXJlZyA9IHJlYWRsKG5ta19jaGlwLT5hZGRyICsgZmltc2MpOwogCQlpZiAoZW5hYmxlKQogCQkJcmVnIHw9IGJpdG1hc2s7CiAJCWVsc2UKIAkJCXJlZyAmPSB+Yml0bWFzazsKLQkJd3JpdGVsKHJlZywgbm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19GSU1TQyk7CisJCXdyaXRlbChyZWcsIG5ta19jaGlwLT5hZGRyICsgZmltc2MpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgbm1rX2dwaW9faXJxX21vZGlmeSh1bnNpZ25lZCBpbnQgaXJxLCBib29sIGVuYWJsZSkKK3N0YXRpYyBpbnQgbm1rX2dwaW9faXJxX21vZGlmeSh1bnNpZ25lZCBpbnQgaXJxLCBlbnVtIG5ta19ncGlvX2lycV90eXBlIHdoaWNoLAorCQkJICAgICAgIGJvb2wgZW5hYmxlKQogewogCWludCBncGlvOwogCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcDsKQEAgLTE0NywyNiArMzQ2LDM1IEBACiAJbm1rX2NoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwogCWJpdG1hc2sgPSBubWtfZ3Bpb19nZXRfYml0bWFzayhncGlvKTsKIAlpZiAoIW5ta19jaGlwKQotCQlyZXR1cm47CisJCXJldHVybiAtRUlOVkFMOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm5ta19jaGlwLT5sb2NrLCBmbGFncyk7Ci0JX19ubWtfZ3Bpb19pcnFfbW9kaWZ5KG5ta19jaGlwLCBncGlvLCBlbmFibGUpOworCV9fbm1rX2dwaW9faXJxX21vZGlmeShubWtfY2hpcCwgZ3Bpbywgd2hpY2gsIGVuYWJsZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbm1rX2NoaXAtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBubWtfZ3Bpb19pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQogewotCW5ta19ncGlvX2lycV9tb2RpZnkoaXJxLCBmYWxzZSk7Ci19OworCW5ta19ncGlvX2lycV9tb2RpZnkoaXJxLCBOT1JNQUwsIGZhbHNlKTsKK30KIAogc3RhdGljIHZvaWQgbm1rX2dwaW9faXJxX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQogewotCW5ta19ncGlvX2lycV9tb2RpZnkoaXJxLCB0cnVlKTsKKwlubWtfZ3Bpb19pcnFfbW9kaWZ5KGlycSwgTk9STUFMLCB0cnVlKTsKK30KKworc3RhdGljIGludCBubWtfZ3Bpb19pcnFfc2V0X3dha2UodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IG9uKQoreworCXJldHVybiBubWtfZ3Bpb19pcnFfbW9kaWZ5KGlycSwgV0FLRSwgb24pOwogfQogCiBzdGF0aWMgaW50IG5ta19ncGlvX2lycV9zZXRfdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSkKIHsKLQlib29sIGVuYWJsZWQgPSAhKGlycV90b19kZXNjKGlycSktPnN0YXR1cyAmIElSUV9ESVNBQkxFRCk7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlib29sIGVuYWJsZWQgPSAhKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCk7CisJYm9vbCB3YWtlID0gZGVzYy0+d2FrZV9kZXB0aDsKIAlpbnQgZ3BpbzsKIAlzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE4Niw3ICszOTQsMTAgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbm1rX2NoaXAtPmxvY2ssIGZsYWdzKTsKIAogCWlmIChlbmFibGVkKQotCQlfX25ta19ncGlvX2lycV9tb2RpZnkobm1rX2NoaXAsIGdwaW8sIGZhbHNlKTsKKwkJX19ubWtfZ3Bpb19pcnFfbW9kaWZ5KG5ta19jaGlwLCBncGlvLCBOT1JNQUwsIGZhbHNlKTsKKworCWlmICh3YWtlKQorCQlfX25ta19ncGlvX2lycV9tb2RpZnkobm1rX2NoaXAsIGdwaW8sIFdBS0UsIGZhbHNlKTsKIAogCW5ta19jaGlwLT5lZGdlX3Jpc2luZyAmPSB+Yml0bWFzazsKIAlpZiAodHlwZSAmIElSUV9UWVBFX0VER0VfUklTSU5HKQpAQCAtMTk3LDcgKzQwOCwxMCBAQAogCQlubWtfY2hpcC0+ZWRnZV9mYWxsaW5nIHw9IGJpdG1hc2s7CiAKIAlpZiAoZW5hYmxlZCkKLQkJX19ubWtfZ3Bpb19pcnFfbW9kaWZ5KG5ta19jaGlwLCBncGlvLCB0cnVlKTsKKwkJX19ubWtfZ3Bpb19pcnFfbW9kaWZ5KG5ta19jaGlwLCBncGlvLCBOT1JNQUwsIHRydWUpOworCisJaWYgKHdha2UpCisJCV9fbm1rX2dwaW9faXJxX21vZGlmeShubWtfY2hpcCwgZ3BpbywgV0FLRSwgdHJ1ZSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZubWtfY2hpcC0+bG9jaywgZmxhZ3MpOwogCkBAIC0yMTAsNiArNDI0LDcgQEAKIAkubWFzawkJPSBubWtfZ3Bpb19pcnFfbWFzaywKIAkudW5tYXNrCQk9IG5ta19ncGlvX2lycV91bm1hc2ssCiAJLnNldF90eXBlCT0gbm1rX2dwaW9faXJxX3NldF90eXBlLAorCS5zZXRfd2FrZQk9IG5ta19ncGlvX2lycV9zZXRfd2FrZSwKIH07CiAKIHN0YXRpYyB2b2lkIG5ta19ncGlvX2lycV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKQEAgLTI2NiwxNiArNDgxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBubWtfZ3Bpb19tYWtlX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsCi0JCQkJaW50IHZhbCkKLXsKLQlzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXAgPQotCQljb250YWluZXJfb2YoY2hpcCwgc3RydWN0IG5ta19ncGlvX2NoaXAsIGNoaXApOwotCi0Jd3JpdGVsKDEgPDwgb2Zmc2V0LCBubWtfY2hpcC0+YWRkciArIE5NS19HUElPX0RJUlMpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IG5ta19ncGlvX2dldF9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAJc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwID0KQEAgLTI5OCwxMiArNTAzLDMzIEBACiAJCXdyaXRlbChiaXQsIG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fREFUQyk7CiB9CiAKK3N0YXRpYyBpbnQgbm1rX2dwaW9fbWFrZV9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LAorCQkJCWludCB2YWwpCit7CisJc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwID0KKwkJY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBubWtfZ3Bpb19jaGlwLCBjaGlwKTsKKworCXdyaXRlbCgxIDw8IG9mZnNldCwgbm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19ESVJTKTsKKwlubWtfZ3Bpb19zZXRfb3V0cHV0KGNoaXAsIG9mZnNldCwgdmFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5ta19ncGlvX3RvX2lycShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwID0KKwkJY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBubWtfZ3Bpb19jaGlwLCBjaGlwKTsKKworCXJldHVybiBOT01BRElLX0dQSU9fVE9fSVJRKG5ta19jaGlwLT5jaGlwLmJhc2UpICsgb2Zmc2V0OworfQorCiAvKiBUaGlzIHN0cnVjdHVyZSBpcyByZXBsaWNhdGVkIGZvciBlYWNoIEdQSU8gYmxvY2sgYWxsb2NhdGVkIGF0IHByb2JlIHRpbWUgKi8KIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19jaGlwIG5ta19ncGlvX3RlbXBsYXRlID0gewogCS5kaXJlY3Rpb25faW5wdXQJPSBubWtfZ3Bpb19tYWtlX2lucHV0LAogCS5nZXQJCQk9IG5ta19ncGlvX2dldF9pbnB1dCwKIAkuZGlyZWN0aW9uX291dHB1dAk9IG5ta19ncGlvX21ha2Vfb3V0cHV0LAogCS5zZXQJCQk9IG5ta19ncGlvX3NldF9vdXRwdXQsCisJLnRvX2lycQkJCT0gbm1rX2dwaW9fdG9faXJxLAogCS5uZ3BpbwkJCT0gTk1LX0dQSU9fUEVSX0NISVAsCiAJLmNhbl9zbGVlcAkJPSAwLAogfTsKQEAgLTM5MywzMCArNjE5LDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfX2V4aXQgbm1rX2dwaW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXA7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0KLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0KLQlubWtfY2hpcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7Ci0JZ3Bpb2NoaXBfcmVtb3ZlKCZubWtfY2hpcC0+Y2hpcCk7Ci0JY2xrX2Rpc2FibGUobm1rX2NoaXAtPmNsayk7Ci0JY2xrX3B1dChubWtfY2hpcC0+Y2xrKTsKLQlrZnJlZShubWtfY2hpcCk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbm1rX2dwaW9fZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCQkubmFtZSA9ICJncGlvIiwKIAkJfSwKIAkucHJvYmUgPSBubWtfZ3Bpb19wcm9iZSwKLQkucmVtb3ZlID0gX19leGl0X3Aobm1rX2dwaW9fcmVtb3ZlKSwKIAkuc3VzcGVuZCA9IE5VTEwsIC8qIHRvIGJlIGRvbmUgKi8KIAkucmVzdW1lID0gTlVMTCwKIH07CkBAIC00MjYsNyArNjM0LDcgQEAKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZubWtfZ3Bpb19kcml2ZXIpOwogfQogCi1hcmNoX2luaXRjYWxsKG5ta19ncGlvX2luaXQpOworY29yZV9pbml0Y2FsbChubWtfZ3Bpb19pbml0KTsKIAogTU9EVUxFX0FVVEhPUigiUHJhZnVsbGEgV0FEQVNLQVIgYW5kIEFsZXNzYW5kcm8gUnViaW5pIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk5vbWFkaWsgR1BJTyBEcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbm9tYWRpay9pbmNsdWRlL3BsYXQvZ3Bpby5oIGIvYXJjaC9hcm0vcGxhdC1ub21hZGlrL2luY2x1ZGUvcGxhdC9ncGlvLmgKaW5kZXggNDIwMDgxMS4uYWJhMzU1MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1ub21hZGlrL2luY2x1ZGUvcGxhdC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1ub21hZGlrL2luY2x1ZGUvcGxhdC9ncGlvLmgKQEAgLTU1LDYgKzU1LDIxIEBACiAjZGVmaW5lIE5NS19HUElPX0FMVF9CCTIKICNkZWZpbmUgTk1LX0dQSU9fQUxUX0MJKE5NS19HUElPX0FMVF9BIHwgTk1LX0dQSU9fQUxUX0IpCiAKKy8qIFB1bGwgdXAvZG93biB2YWx1ZXMgKi8KK2VudW0gbm1rX2dwaW9fcHVsbCB7CisJTk1LX0dQSU9fUFVMTF9OT05FLAorCU5NS19HUElPX1BVTExfVVAsCisJTk1LX0dQSU9fUFVMTF9ET1dOLAorfTsKKworLyogU2xlZXAgbW9kZSAqLworZW51bSBubWtfZ3Bpb19zbHBtIHsKKwlOTUtfR1BJT19TTFBNX0lOUFVULAorCU5NS19HUElPX1NMUE1fTk9DSEFOR0UsCit9OworCitleHRlcm4gaW50IG5ta19ncGlvX3NldF9zbHBtKGludCBncGlvLCBlbnVtIG5ta19ncGlvX3NscG0gbW9kZSk7CitleHRlcm4gaW50IG5ta19ncGlvX3NldF9wdWxsKGludCBncGlvLCBlbnVtIG5ta19ncGlvX3B1bGwgcHVsbCk7CiBleHRlcm4gaW50IG5ta19ncGlvX3NldF9tb2RlKGludCBncGlvLCBpbnQgZ3Bpb19tb2RlKTsKIGV4dGVybiBpbnQgbm1rX2dwaW9fZ2V0X21vZGUoaW50IGdwaW8pOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW5vbWFkaWsvaW5jbHVkZS9wbGF0L210dS5oIGIvYXJjaC9hcm0vcGxhdC1ub21hZGlrL2luY2x1ZGUvcGxhdC9tdHUuaAppbmRleCA0MmM5MDcyLi42NTcwNGEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW5vbWFkaWsvaW5jbHVkZS9wbGF0L210dS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbm9tYWRpay9pbmNsdWRlL3BsYXQvbXR1LmgKQEAgLTEsNiArMSwxMiBAQAogI2lmbmRlZiBfX1BMQVRfTVRVX0gKICNkZWZpbmUgX19QTEFUX01UVV9ICiAKKy8qCisgKiBHdWFyYW50ZWVkIHJ1bnRpbWUgY29udmVyc2lvbiByYW5nZSBpbiBzZWNvbmRzIGZvcgorICogdGhlIGNsb2Nrc291cmNlIGFuZCBjbG9ja2V2ZW50LgorICovCisjZGVmaW5lIE1UVV9NSU5fUkFOR0UgNAorCiAvKiBzaG91bGQgYmUgc2V0IGJ5IHRoZSBwbGF0Zm9ybSBjb2RlICovCiBleHRlcm4gdm9pZCBfX2lvbWVtICptdHVfYmFzZTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1ub21hZGlrL2luY2x1ZGUvcGxhdC9waW5jZmcuaCBiL2FyY2gvYXJtL3BsYXQtbm9tYWRpay9pbmNsdWRlL3BsYXQvcGluY2ZnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VlZDExYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbm9tYWRpay9pbmNsdWRlL3BsYXQvcGluY2ZnLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgU1QtRXJpY3Nzb24gU0EgMjAxMAorICoKKyAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIKKyAqIEF1dGhvcjogUmFiaW4gVmluY2VudCA8cmFiaW4udmluY2VudEBzdGVyaWNzc29uLmNvbT4gZm9yIFNULUVyaWNzc29uCisgKgorICogQmFzZWQgb24gYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC5oOgorICogICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqICAgZXJpYyBtaWFvIDxlcmljLm1pYW9AbWFydmVsbC5jb20+CisgKi8KKworI2lmbmRlZiBfX1BMQVRfUElOQ0ZHX0gKKyNkZWZpbmUgX19QTEFUX1BJTkNGR19ICisKKy8qCisgKiBwaW4gY29uZmlndXJhdGlvbnMgYXJlIHJlcHJlc2VudGVkIGJ5IDMyLWJpdCBpbnRlZ2VyczoKKyAqCisgKgliaXQgIDAuLiA4IC0gUGluIE51bWJlciAoNTEyIFBpbnMgTWF4aW11bSkKKyAqCWJpdCAgOS4uMTAgLSBBbHRlcm5hdGUgRnVuY3Rpb24gU2VsZWN0aW9uCisgKgliaXQgMTEuLjEyIC0gUHVsbCB1cC9kb3duIHN0YXRlCisgKgliaXQgICAgIDEzIC0gU2xlZXAgbW9kZSBiZWhhdmlvdXIKKyAqCisgKiB0byBmYWNpbGl0YXRlIHRoZSBkZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgcHJvdmlkZWQKKyAqCisgKiBQSU5fQ0ZHX0RFRkFVTFQgLSBkZWZhdWx0IGNvbmZpZyAoMCk6CisgKgkJICAgICBwdWxsIHVwL2Rvd24gPSBkaXNhYmxlZAorICoJCSAgICAgc2xlZXAgbW9kZSA9IGlucHV0CisgKgorICogUElOX0NGRwkgICAtIGRlZmF1bHQgY29uZmlnIHdpdGggYWx0ZXJuYXRlIGZ1bmN0aW9uCisgKiBQSU5fQ0ZHX1BVTEwJICAgLSBkZWZhdWx0IGNvbmZpZyB3aXRoIGFsdGVybmF0ZSBmdW5jdGlvbiBhbmQgcHVsbCB1cC9kb3duCisgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHBpbl9jZmdfdDsKKworI2RlZmluZSBQSU5fTlVNX01BU0sJCTB4MWZmCisjZGVmaW5lIFBJTl9OVU0oeCkJCSgoeCkgJiBQSU5fTlVNX01BU0spCisKKyNkZWZpbmUgUElOX0FMVF9TSElGVAkJOQorI2RlZmluZSBQSU5fQUxUX01BU0sJCSgweDMgPDwgUElOX0FMVF9TSElGVCkKKyNkZWZpbmUgUElOX0FMVCh4KQkJKCgoeCkgJiBQSU5fQUxUX01BU0spID4+IFBJTl9BTFRfU0hJRlQpCisjZGVmaW5lIFBJTl9HUElPCQkoTk1LX0dQSU9fQUxUX0dQSU8gPDwgUElOX0FMVF9TSElGVCkKKyNkZWZpbmUgUElOX0FMVF9BCQkoTk1LX0dQSU9fQUxUX0EgPDwgUElOX0FMVF9TSElGVCkKKyNkZWZpbmUgUElOX0FMVF9CCQkoTk1LX0dQSU9fQUxUX0IgPDwgUElOX0FMVF9TSElGVCkKKyNkZWZpbmUgUElOX0FMVF9DCQkoTk1LX0dQSU9fQUxUX0MgPDwgUElOX0FMVF9TSElGVCkKKworI2RlZmluZSBQSU5fUFVMTF9TSElGVAkJMTEKKyNkZWZpbmUgUElOX1BVTExfTUFTSwkJKDB4MyA8PCBQSU5fUFVMTF9TSElGVCkKKyNkZWZpbmUgUElOX1BVTEwoeCkJCSgoKHgpICYgUElOX1BVTExfTUFTSykgPj4gUElOX1BVTExfU0hJRlQpCisjZGVmaW5lIFBJTl9QVUxMX05PTkUJCShOTUtfR1BJT19QVUxMX05PTkUgPDwgUElOX1BVTExfU0hJRlQpCisjZGVmaW5lIFBJTl9QVUxMX1VQCQkoTk1LX0dQSU9fUFVMTF9VUCA8PCBQSU5fUFVMTF9TSElGVCkKKyNkZWZpbmUgUElOX1BVTExfRE9XTgkJKE5NS19HUElPX1BVTExfRE9XTiA8PCBQSU5fUFVMTF9TSElGVCkKKworI2RlZmluZSBQSU5fU0xQTV9TSElGVAkJMTMKKyNkZWZpbmUgUElOX1NMUE1fTUFTSwkJKDB4MSA8PCBQSU5fU0xQTV9TSElGVCkKKyNkZWZpbmUgUElOX1NMUE0oeCkJCSgoKHgpICYgUElOX1NMUE1fTUFTSykgPj4gUElOX1NMUE1fU0hJRlQpCisjZGVmaW5lIFBJTl9TTFBNX0lOUFVUCQkoTk1LX0dQSU9fU0xQTV9JTlBVVCA8PCBQSU5fU0xQTV9TSElGVCkKKyNkZWZpbmUgUElOX1NMUE1fTk9DSEFOR0UJKE5NS19HUElPX1NMUE1fTk9DSEFOR0UgPDwgUElOX1NMUE1fU0hJRlQpCisKKyNkZWZpbmUgUElOX0NGR19ERUZBVUxUCQkoUElOX1BVTExfTk9ORSB8IFBJTl9TTFBNX0lOUFVUKQorCisjZGVmaW5lIFBJTl9DRkcobnVtLCBhbHQpCQlcCisJKFBJTl9DRkdfREVGQVVMVCB8XAorCSAoUElOX05VTShudW0pIHwgUElOXyMjYWx0KSkKKworI2RlZmluZSBQSU5fQ0ZHX1BVTEwobnVtLCBhbHQsIHB1bGwpCVwKKwkoKFBJTl9DRkdfREVGQVVMVCAmIH5QSU5fUFVMTF9NQVNLKSB8XAorCSAoUElOX05VTShudW0pIHwgUElOXyMjYWx0IHwgUElOX1BVTExfIyNwdWxsKSkKKworZXh0ZXJuIGludCBubWtfY29uZmlnX3BpbihwaW5fY2ZnX3QgY2ZnKTsKK2V4dGVybiBpbnQgbm1rX2NvbmZpZ19waW5zKHBpbl9jZmdfdCAqY2ZncywgaW50IG51bSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1ub21hZGlrL3RpbWVyLmMgYi9hcmNoL2FybS9wbGF0LW5vbWFkaWsvdGltZXIuYwppbmRleCAwOGFhYTRhLi5lYTNjYTg2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW5vbWFkaWsvdGltZXIuYworKysgYi9hcmNoL2FybS9wbGF0LW5vbWFkaWsvdGltZXIuYwpAQCAtNDIsNyArNDIsNiBAQAogCS5yYXRpbmcJCT0gMjAwLAogCS5yZWFkCQk9IG5tZGtfcmVhZF90aW1lcl9kdW1teSwKIAkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKLQkuc2hpZnQJCT0gMjAsCiAJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIApAQCAtODIsNiArODEsMTIgQEAKIAljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKIAkJLyogZGlzYWJsZSBpcnEgKi8KIAkJd3JpdGVsKDAsIG10dV9iYXNlICsgTVRVX0lNU0MpOworCQkvKiBkaXNhYmxlIHRpbWVyICovCisJCWNyID0gcmVhZGwobXR1X2Jhc2UgKyBNVFVfQ1IoMSkpOworCQljciAmPSB+TVRVX0NSbl9FTkE7CisJCXdyaXRlbChjciwgbXR1X2Jhc2UgKyBNVFVfQ1IoMSkpOworCQkvKiBsb2FkIHNvbWUgaGlnaCBkZWZhdWx0IHZhbHVlICovCisJCXdyaXRlbCgweGZmZmZmZmZmLCBtdHVfYmFzZSArIE1UVV9MUigxKSk7CiAJCWJyZWFrOwogCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgogCQlicmVhazsKQEAgLTk4LDcgKzEwMyw2IEBACiBzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBubWRrX2Nsa2V2dCA9IHsKIAkubmFtZQkJPSAibXR1XzEiLAogCS5mZWF0dXJlcwk9IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCi0JLnNoaWZ0CQk9IDMyLAogCS5yYXRpbmcJCT0gMjAwLAogCS5zZXRfbW9kZQk9IG5tZGtfY2xrZXZ0X21vZGUsCiAJLnNldF9uZXh0X2V2ZW50CT0gbm1ka19jbGtldnRfbmV4dCwKQEAgLTE1MSw2ICsxNTUsNyBAQAogCX0gZWxzZSB7CiAJCWNyIHw9IE1UVV9DUm5fUFJFU0NBTEVfMTsKIAl9CisJY2xvY2tzb3VyY2VfY2FsY19tdWx0X3NoaWZ0KCZubWRrX2Nsa3NyYywgcmF0ZSwgTVRVX01JTl9SQU5HRSk7CiAKIAkvKiBUaW1lciAwIGlzIHRoZSBmcmVlIHJ1bm5pbmcgY2xvY2tzb3VyY2UgKi8KIAl3cml0ZWwoY3IsIG10dV9iYXNlICsgTVRVX0NSKDApKTsKQEAgLTE1OCw3ICsxNjMsNiBAQAogCXdyaXRlbCgwLCBtdHVfYmFzZSArIE1UVV9CR0xSKDApKTsKIAl3cml0ZWwoY3IgfCBNVFVfQ1JuX0VOQSwgbXR1X2Jhc2UgKyBNVFVfQ1IoMCkpOwogCi0Jbm1ka19jbGtzcmMubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQocmF0ZSwgbm1ka19jbGtzcmMuc2hpZnQpOwogCS8qIE5vdyB0aGUgc2NoZWR1bGluZyBjbG9jayBpcyByZWFkeSAqLwogCW5tZGtfY2xrc3JjLnJlYWQgPSBubWRrX3JlYWRfdGltZXI7CiAKQEAgLTE3NSw4ICsxNzksMTAgQEAKIAl9IGVsc2UgewogCQljciB8PSBNVFVfQ1JuX1BSRVNDQUxFXzE7CiAJfQorCWNsb2NrZXZlbnRzX2NhbGNfbXVsdF9zaGlmdCgmbm1ka19jbGtldnQsIHJhdGUsIE1UVV9NSU5fUkFOR0UpOworCiAJd3JpdGVsKGNyIHwgTVRVX0NSbl9PTkVTSE9ULCBtdHVfYmFzZSArIE1UVV9DUigxKSk7IC8qIG9mZiwgY3VycmVudGx5ICovCi0Jbm1ka19jbGtldnQubXVsdCA9IGRpdl9zYyhyYXRlLCBOU0VDX1BFUl9TRUMsIG5tZGtfY2xrZXZ0LnNoaWZ0KTsKKwogCW5tZGtfY2xrZXZ0Lm1heF9kZWx0YV9ucyA9CiAJCWNsb2NrZXZlbnRfZGVsdGEybnMoMHhmZmZmZmZmZiwgJm5tZGtfY2xrZXZ0KTsKIAlubWRrX2Nsa2V2dC5taW5fZGVsdGFfbnMgPQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jCmluZGV4IDIxOWMwMWUuLmViZWQ4MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vbWFwZmIuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC0zNSw2ICszNiw3IEBACiAjaW5jbHVkZSA8cGxhdC9tdXguaD4KICNpbmNsdWRlIDxwbGF0L2ZwZ2EuaD4KICNpbmNsdWRlIDxwbGF0L3NlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvdnJhbS5oPgogCiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgogCkBAIC04MSw2ICs4MywxMiBAQAogfQogRVhQT1JUX1NZTUJPTChvbWFwX2dldF92YXJfY29uZmlnKTsKIAordm9pZCBfX2luaXQgb21hcF9yZXNlcnZlKHZvaWQpCit7CisJb21hcGZiX3Jlc2VydmVfc2RyYW1fbWVtYmxvY2soKTsKKwlvbWFwX3ZyYW1fcmVzZXJ2ZV9zZHJhbV9tZW1ibG9jaygpOworfQorCiAvKgogICogMzJLSHogY2xvY2tzb3VyY2UgLi4uIGFsd2F5cyBhdmFpbGFibGUsIG9uIHByZXR0eSBtb3N0IGNoaXBzIGV4Y2VwdAogICogT01BUCA3MzAgYW5kIDE1MTAuICBPdGhlciB0aW1lcnMgY291bGQgYmUgdXNlZCBhcyBjbG9ja3NvdXJjZXMsIHdpdGgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9mYi5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2ZiLmMKaW5kZXggZDNlZWE0Zi4uMDA1NGI5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2ZiLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2ZiLmMKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L29tYXBmYi5oPgogCkBAIC0xNzEsNDkgKzE3MSw3OCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHZhbGlkX3NkcmFtKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCBtZW1ibG9ja19wcm9wZXJ0eSByZXM7CisKKwlyZXMuYmFzZSA9IGFkZHI7CisJcmVzLnNpemUgPSBzaXplOworCXJldHVybiAhbWVtYmxvY2tfZmluZCgmcmVzKSAmJiByZXMuYmFzZSA9PSBhZGRyICYmIHJlcy5zaXplID09IHNpemU7Cit9CisKK3N0YXRpYyBpbnQgcmVzZXJ2ZV9zZHJhbSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpZiAobWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGFkZHIsIHNpemUpKQorCQlyZXR1cm4gLUVCVVNZOworCWlmIChtZW1ibG9ja19yZXNlcnZlKGFkZHIsIHNpemUpKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIENhbGxlZCBmcm9tIG1hcF9pby4gV2UgbmVlZCB0byBjYWxsIHRvIHRoaXMgZWFybHkgZW5vdWdoIHNvIHRoYXQgd2UKICAqIGNhbiByZXNlcnZlIHRoZSBmaXhlZCBTRFJBTSByZWdpb25zIGJlZm9yZSBWTSBjb3VsZCBnZXQgaG9sZCBvZiB0aGVtLgogICovCi12b2lkIF9faW5pdCBvbWFwZmJfcmVzZXJ2ZV9zZHJhbSh2b2lkKQordm9pZCBfX2luaXQgb21hcGZiX3Jlc2VydmVfc2RyYW1fbWVtYmxvY2sodm9pZCkKIHsKLQlzdHJ1Y3QgYm9vdG1lbV9kYXRhCSpiZGF0YTsKLQl1bnNpZ25lZCBsb25nCQlzZHJhbV9zdGFydCwgc2RyYW1fc2l6ZTsKLQl1bnNpZ25lZCBsb25nCQlyZXNlcnZlZDsKLQlpbnQJCQlpOworCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQgPSAwOworCWludCBpOwogCiAJaWYgKGNvbmZpZ19pbnZhbGlkKQogCQlyZXR1cm47CiAKLQliZGF0YSA9IE5PREVfREFUQSgwKS0+YmRhdGE7Ci0Jc2RyYW1fc3RhcnQgPSBiZGF0YS0+bm9kZV9taW5fcGZuIDw8IFBBR0VfU0hJRlQ7Ci0Jc2RyYW1fc2l6ZSA9IChiZGF0YS0+bm9kZV9sb3dfcGZuIDw8IFBBR0VfU0hJRlQpIC0gc2RyYW1fc3RhcnQ7Ci0JcmVzZXJ2ZWQgPSAwOwogCWZvciAoaSA9IDA7IDsgaSsrKSB7Ci0JCXN0cnVjdCBvbWFwZmJfbWVtX3JlZ2lvbglyZzsKKwkJc3RydWN0IG9tYXBmYl9tZW1fcmVnaW9uIHJnOwogCiAJCWlmIChnZXRfZmJtZW1fcmVnaW9uKGksICZyZykgPCAwKQogCQkJYnJlYWs7CisKIAkJaWYgKGkgPT0gT01BUEZCX1BMQU5FX05VTSkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJIkV4dHJhbmVvdXMgRkIgbWVtIGNvbmZpZ3VyYXRpb24gZW50cmllc1xuIik7CisJCQlwcl9lcnIoIkV4dHJhbmVvdXMgRkIgbWVtIGNvbmZpZ3VyYXRpb24gZW50cmllc1xuIik7CiAJCQljb25maWdfaW52YWxpZCA9IDE7CiAJCQlyZXR1cm47CiAJCX0KKwogCQkvKiBDaGVjayBpZiBpdCdzIG91ciBtZW1vcnkgdHlwZS4gKi8KLQkJaWYgKHNldF9mYm1lbV9yZWdpb25fdHlwZSgmcmcsIE9NQVBGQl9NRU1UWVBFX1NEUkFNLAotCQkJCSAgICAgICAgICBzZHJhbV9zdGFydCwgc2RyYW1fc2l6ZSkgPCAwIHx8Ci0JCSAgICAocmcudHlwZSAhPSBPTUFQRkJfTUVNVFlQRV9TRFJBTSkpCisJCWlmIChyZy50eXBlICE9IE9NQVBGQl9NRU1UWVBFX1NEUkFNKQogCQkJY29udGludWU7Ci0JCUJVR19PTihvbWFwZmJfY29uZmlnLm1lbV9kZXNjLnJlZ2lvbltpXS5zaXplKTsKLQkJaWYgKGNoZWNrX2ZibWVtX3JlZ2lvbihpLCAmcmcsIHNkcmFtX3N0YXJ0LCBzZHJhbV9zaXplKSA8IDApIHsKKworCQkvKiBDaGVjayBpZiB0aGUgcmVnaW9uIGZhbGxzIHdpdGhpbiBTRFJBTSAqLworCQlpZiAocmcucGFkZHIgJiYgIXZhbGlkX3NkcmFtKHJnLnBhZGRyLCByZy5zaXplKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChyZy5zaXplID09IDApIHsKKwkJCXByX2VycigiWmVybyBzaXplIGZvciBGQiByZWdpb24gJWRcbiIsIGkpOwogCQkJY29uZmlnX2ludmFsaWQgPSAxOwogCQkJcmV0dXJuOwogCQl9CisKIAkJaWYgKHJnLnBhZGRyKSB7Ci0JCQlyZXNlcnZlX2Jvb3RtZW0ocmcucGFkZHIsIHJnLnNpemUsIEJPT1RNRU1fREVGQVVMVCk7CisJCQlpZiAocmVzZXJ2ZV9zZHJhbShyZy5wYWRkciwgcmcuc2l6ZSkpIHsKKwkJCQlwcl9lcnIoIlRyeWluZyB0byB1c2UgcmVzZXJ2ZWQgbWVtb3J5IGZvciBGQiByZWdpb24gJWRcbiIsCisJCQkJCWkpOworCQkJCWNvbmZpZ19pbnZhbGlkID0gMTsKKwkJCQlyZXR1cm47CisJCQl9CiAJCQlyZXNlcnZlZCArPSByZy5zaXplOwogCQl9CisKKwkJaWYgKG9tYXBmYl9jb25maWcubWVtX2Rlc2MucmVnaW9uW2ldLnNpemUpIHsKKwkJCXByX2VycigiRkIgcmVnaW9uICVkIGFscmVhZHkgc2V0XG4iLCBpKTsKKwkJCWNvbmZpZ19pbnZhbGlkID0gMTsKKwkJCXJldHVybjsKKwkJfQorCiAJCW9tYXBmYl9jb25maWcubWVtX2Rlc2MucmVnaW9uW2ldID0gcmc7CiAJCWNvbmZpZ3VyZWRfcmVnaW9ucysrOwogCX0KQEAgLTM1OSw3ICszODgsMTAgQEAKIAogYXJjaF9pbml0Y2FsbChvbWFwX2luaXRfZmIpOwogCi12b2lkIG9tYXBmYl9yZXNlcnZlX3NkcmFtKHZvaWQpIHt9Cit2b2lkIG9tYXBmYl9yZXNlcnZlX3NkcmFtX21lbWJsb2NrKHZvaWQpCit7Cit9CisKIHVuc2lnbmVkIGxvbmcgb21hcGZiX3Jlc2VydmVfc3JhbSh1bnNpZ25lZCBsb25nIHNyYW1fcHN0YXJ0LAogCQkJCSAgdW5zaWduZWQgbG9uZyBzcmFtX3ZzdGFydCwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgc3JhbV9zaXplLApAQCAtMzc1LDcgKzQwNywxMCBAQAogewogfQogCi12b2lkIG9tYXBmYl9yZXNlcnZlX3NkcmFtKHZvaWQpIHt9Cit2b2lkIG9tYXBmYl9yZXNlcnZlX3NkcmFtX21lbWJsb2NrKHZvaWQpCit7Cit9CisKIHVuc2lnbmVkIGxvbmcgb21hcGZiX3Jlc2VydmVfc3JhbSh1bnNpZ25lZCBsb25nIHNyYW1fcHN0YXJ0LAogCQkJCSAgdW5zaWduZWQgbG9uZyBzcmFtX3ZzdGFydCwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgc3JhbV9zaXplLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jb21tb24uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY29tbW9uLmgKaW5kZXggZDI2NTAxOC4uNWU0YWZiZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jb21tb24uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NvbW1vbi5oCkBAIC0zNCw2ICszNCw4IEBACiBleHRlcm4gdm9pZCBvbWFwX21hcF9jb21tb25faW8odm9pZCk7CiBleHRlcm4gc3RydWN0IHN5c190aW1lciBvbWFwX3RpbWVyOwogCitleHRlcm4gdm9pZCBvbWFwX3Jlc2VydmUodm9pZCk7CisKIC8qCiAgKiBJTyBiYXNlcyBmb3IgdmFyaW91cyBPTUFQIHByb2Nlc3NvcnMKICAqIEV4Y2VwdCB0aGUgdGFwIGJhc2UsIHJlc3QgYWxsIHRoZSBpbyBiYXNlcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC92cmFtLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3ZyYW0uaAppbmRleCBlZGQ0OTg3Li4wYWE0ZWNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3ZyYW0uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3ZyYW0uaApAQCAtMzgsNyArMzgsNyBAQAogZXh0ZXJuIHZvaWQgb21hcF92cmFtX3NldF9zZHJhbV92cmFtKHUzMiBzaXplLCB1MzIgc3RhcnQpOwogZXh0ZXJuIHZvaWQgb21hcF92cmFtX3NldF9zcmFtX3ZyYW0odTMyIHNpemUsIHUzMiBzdGFydCk7CiAKLWV4dGVybiB2b2lkIG9tYXBfdnJhbV9yZXNlcnZlX3NkcmFtKHZvaWQpOworZXh0ZXJuIHZvaWQgb21hcF92cmFtX3Jlc2VydmVfc2RyYW1fbWVtYmxvY2sodm9pZCk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBvbWFwX3ZyYW1fcmVzZXJ2ZV9zcmFtKHVuc2lnbmVkIGxvbmcgc3JhbV9wc3RhcnQsCiAJCQkJCSAgICB1bnNpZ25lZCBsb25nIHNyYW1fdnN0YXJ0LAogCQkJCQkgICAgdW5zaWduZWQgbG9uZyBzcmFtX3NpemUsCkBAIC00OCw3ICs0OCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgb21hcF92cmFtX3NldF9zZHJhbV92cmFtKHUzMiBzaXplLCB1MzIgc3RhcnQpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfdnJhbV9zZXRfc3JhbV92cmFtKHUzMiBzaXplLCB1MzIgc3RhcnQpIHsgfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgb21hcF92cmFtX3Jlc2VydmVfc2RyYW0odm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF92cmFtX3Jlc2VydmVfc2RyYW1fbWVtYmxvY2sodm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgb21hcF92cmFtX3Jlc2VydmVfc3JhbSh1bnNpZ25lZCBsb25nIHNyYW1fcHN0YXJ0LAogCQkJCQkgICAgdW5zaWduZWQgbG9uZyBzcmFtX3ZzdGFydCwKIAkJCQkJICAgIHVuc2lnbmVkIGxvbmcgc3JhbV9zaXplLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vcmlvbi9wY2llLmMgYi9hcmNoL2FybS9wbGF0LW9yaW9uL3BjaWUuYwppbmRleCA1NGM4NGE0Li43Nzk1NTNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9yaW9uL3BjaWUuYworKysgYi9hcmNoL2FybS9wbGF0LW9yaW9uL3BjaWUuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21idXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KICNpbmNsdWRlIDxwbGF0L3BjaWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAvKgogICogUENJZSB1bml0IHJlZ2lzdGVyIG9mZnNldHMuCkBAIC00Niw2ICs0Nyw4IEBACiAjZGVmaW5lICBQQ0lFX1NUQVRfQlVTX09GRlMJCTgKICNkZWZpbmUgIFBDSUVfU1RBVF9CVVNfTUFTSwkJMHhmZgogI2RlZmluZSAgUENJRV9TVEFUX0xJTktfRE9XTgkJMQorI2RlZmluZSBQQ0lFX0RFQlVHX0NUUkwgICAgICAgICAweDFhNjAKKyNkZWZpbmUgIFBDSUVfREVCVUdfU09GVF9SRVNFVAkJKDE8PDIwKQogCiAKIHUzMiBfX2luaXQgb3Jpb25fcGNpZV9kZXZfaWQodm9pZCBfX2lvbWVtICpiYXNlKQpAQCAtODUsNiArODgsMzIgQEAKIAl3cml0ZWwoc3RhdCwgYmFzZSArIFBDSUVfU1RBVF9PRkYpOwogfQogCit2b2lkIF9faW5pdCBvcmlvbl9wY2llX3Jlc2V0KHZvaWQgX19pb21lbSAqYmFzZSkKK3sKKwl1MzIgcmVnOworCWludCBpOworCisJLyoKKwkgKiBNVi1TMTA0ODYwLVUwLCBSZXYuIEM6CisJICogUENJIEV4cHJlc3MgVW5pdCBTb2Z0IFJlc2V0CisJICogV2hlbiBzZXQsIGdlbmVyYXRlcyBhbiBpbnRlcm5hbCByZXNldCBpbiB0aGUgUENJIEV4cHJlc3MgdW5pdC4KKwkgKiBUaGlzIGJpdCBzaG91bGQgYmUgY2xlYXJlZCBhZnRlciB0aGUgbGluayBpcyByZS1lc3RhYmxpc2hlZC4KKwkgKi8KKwlyZWcgPSByZWFkbChiYXNlICsgUENJRV9ERUJVR19DVFJMKTsKKwlyZWcgfD0gUENJRV9ERUJVR19TT0ZUX1JFU0VUOworCXdyaXRlbChyZWcsIGJhc2UgKyBQQ0lFX0RFQlVHX0NUUkwpOworCisJZm9yIChpID0gMDsgaSA8IDIwOyBpKyspIHsKKwkJbWRlbGF5KDEwKTsKKworCQlpZiAob3Jpb25fcGNpZV9saW5rX3VwKGJhc2UpKQorCQkJYnJlYWs7CisJfQorCisJcmVnICY9IH4oUENJRV9ERUJVR19TT0ZUX1JFU0VUKTsKKwl3cml0ZWwocmVnLCBiYXNlICsgUENJRV9ERUJVR19DVFJMKTsKK30KKwogLyoKICAqIFNldHVwIFBDSUUgQkFScyBhbmQgQWRkcmVzcyBEZWNvZGUgV2luczoKICAqIEJBUlswLDJdIC0+IGRpc2FibGVkLCBCQVJbMV0gLT4gY292ZXJzIGFsbCBEUkFNIGJhbmtzCkBAIC0xNTMsNiArMTgyLDExIEBACiAJdTMyIG1hc2s7CiAKIAkvKgorCSAqIHNvZnQgcmVzZXQgUENJZSB1bml0CisJICovCisJb3Jpb25fcGNpZV9yZXNldChiYXNlKTsKKworCS8qCiAJICogUG9pbnQgUENJZSB1bml0IE1CVVMgZGVjb2RlIHdpbmRvd3MgdG8gRFJBTSBzcGFjZS4KIAkgKi8KIAlvcmlvbl9wY2llX3NldHVwX3dpbnMoYmFzZSwgZHJhbSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jbG9jay5jCmluZGV4IDg0NzRkMDUuLjkzMWQyNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jbG9jay5jCkBAIC00Myw3ICs0Myw3IEBACiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KICNpbmNsdWRlIDxwbGF0L3BsbC5oPgogCi0vKiBpbml0YWxpc2UgYWxsIHRoZSBjbG9ja3MgKi8KKy8qIGluaXRpYWxpc2UgYWxsIHRoZSBjbG9ja3MgKi8KIAogdm9pZCBfX2luaXRfb3JfY3B1ZnJlcSBzM2MyNHh4X3NldHVwX2Nsb2Nrcyh1bnNpZ25lZCBsb25nIGZjbGssCiAJCQkJCSAgIHVuc2lnbmVkIGxvbmcgaGNsaywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL2lycS1laW50LmMgYi9hcmNoL2FybS9wbGF0LXM1cC9pcnEtZWludC5jCmluZGV4IGU1NmM4MDcuLmYzNmNkMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczVwL2lycS1laW50LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvaXJxLWVpbnQuYwpAQCAtNzEsNyArNzEsNyBAQAogCQlicmVhazsKIAogCWNhc2UgSVJRX1RZUEVfRURHRV9GQUxMSU5HOgotCQluZXd2YWx1ZSA9IFM1UF9FWFRJTlRfUklTRUVER0U7CisJCW5ld3ZhbHVlID0gUzVQX0VYVElOVF9GQUxMRURHRTsKIAkJYnJlYWs7CiAKIAljYXNlIElSUV9UWVBFX0VER0VfQk9USDoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9jbG9jay5jIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Nsb2NrLmMKaW5kZXggOGJmNzlmMy4uOTBhMjA1MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Nsb2NrLmMKQEAgLTM5MSw3ICszOTEsNyBAQAogCQkoY2xrcC0+ZW5hYmxlKShjbGtwLCAwKTsKIH0KIAotLyogaW5pdGFsaXNlIGFsbCB0aGUgY2xvY2tzICovCisvKiBpbml0aWFsaXNlIGFsbCB0aGUgY2xvY2tzICovCiAKIGludCBfX2luaXQgczNjMjR4eF9yZWdpc3Rlcl9iYXNlY2xvY2tzKHVuc2lnbmVkIGxvbmcgeHRhbCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQva2V5cGFkLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2tleXBhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNzBjMTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2tleXBhZC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBTYW1zdW5nIFBsYXRmb3JtIC0gS2V5cGFkIHBsYXRmb3JtIGRhdGEgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby5MdGQKKyAqIEF1dGhvcjogSm9vbnlvdW5nIFNoaW0gPGp5MDkyMi5zaGltQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX1BMQVRfU0FNU1VOR19LRVlQQURfSAorI2RlZmluZSBfX1BMQVRfU0FNU1VOR19LRVlQQURfSAorCisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgorCisjZGVmaW5lIFNBTVNVTkdfTUFYX1JPV1MJOAorI2RlZmluZSBTQU1TVU5HX01BWF9DT0xTCTgKKworLyoqCisgKiBzdHJ1Y3Qgc2Ftc3VuZ19rZXlwYWRfcGxhdGRhdGEgLSBQbGF0Zm9ybSBkZXZpY2UgZGF0YSBmb3IgU2Ftc3VuZyBLZXlwYWQuCisgKiBAa2V5bWFwX2RhdGE6IHBvaW50ZXIgdG8gJm1hdHJpeF9rZXltYXBfZGF0YS4KKyAqIEByb3dzOiBudW1iZXIgb2Yga2V5cGFkIHJvdyBzdXBwb3J0ZWQuCisgKiBAY29sczogbnVtYmVyIG9mIGtleXBhZCBjb2wgc3VwcG9ydGVkLgorICogQG5vX2F1dG9yZXBlYXQ6IGRpc2FibGUga2V5IGF1dG9yZXBlYXQuCisgKiBAd2FrZXVwOiBjb250cm9scyB3aGV0aGVyIHRoZSBkZXZpY2Ugc2hvdWxkIGJlIHNldCB1cCBhcyB3YWtldXAgc291cmNlLgorICogQGNmZ19ncGlvOiBjb25maWd1cmUgdGhlIEdQSU8uCisgKgorICogSW5pdGlhbGlzYXRpb24gZGF0YSBzcGVjaWZpYyB0byBlaXRoZXIgdGhlIG1hY2hpbmUgb3IgdGhlIHBsYXRmb3JtCisgKiBmb3IgdGhlIGRldmljZSBkcml2ZXIgdG8gdXNlIG9yIGNhbGwtYmFjayB3aGVuIGNvbmZpZ3VyaW5nIGdwaW8uCisgKi8KK3N0cnVjdCBzYW1zdW5nX2tleXBhZF9wbGF0ZGF0YSB7CisJY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YQkqa2V5bWFwX2RhdGE7CisJdW5zaWduZWQgaW50IHJvd3M7CisJdW5zaWduZWQgaW50IGNvbHM7CisJYm9vbCBub19hdXRvcmVwZWF0OworCWJvb2wgd2FrZXVwOworCisJdm9pZCAoKmNmZ19ncGlvKSh1bnNpZ25lZCBpbnQgcm93cywgdW5zaWduZWQgaW50IGNvbHMpOworfTsKKworI2VuZGlmIC8qIF9fUExBVF9TQU1TVU5HX0tFWVBBRF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3NkaGNpLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3NkaGNpLmgKaW5kZXggMTNmOWZiMi4uMDE2Njc0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9zZGhjaS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvc2RoY2kuaApAQCAtMTY2LDggKzE2NiwxMCBAQAogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBzM2M2NDEwX2RlZmF1bHRfc2RoY2kwKHZvaWQpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIHMzYzY0MTBfZGVmYXVsdF9zZGhjaTEodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgczNjNjQxMF9kZWZhdWx0X3NkaGNpMih2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBzM2M2NDAwX2RlZmF1bHRfc2RoY2kwKHZvaWQpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIHMzYzY0MDBfZGVmYXVsdF9zZGhjaTEodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgczNjNjQwMF9kZWZhdWx0X3NkaGNpMih2b2lkKSB7IH0KIAogI2VuZGlmIC8qIENPTkZJR19TM0M2NFhYX1NFVFVQX1NESENJICovCiAKQEAgLTIzOSw3ICsyNDEsNyBAQAogCXMzY19oc21tYzBfZGVmX3BsYXRkYXRhLmNmZ19jYXJkID0gczVwdjIxMF9zZXR1cF9zZGhjaV9jZmdfY2FyZDsKIH0KICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgczVwYzEwMF9kZWZhdWx0X3NkaGNpMCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzNXB2MjEwX2RlZmF1bHRfc2RoY2kwKHZvaWQpIHsgfQogI2VuZGlmIC8qIENPTkZJR19TM0NfREVWX0hTTU1DICovCiAKICNpZmRlZiBDT05GSUdfUzNDX0RFVl9IU01NQzEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC9kZWJ1Zy1tYWNyby5TCmluZGV4IDE2NzA3MzQuLjM3ZmE1OTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvZGVidWctbWFjcm8uUwpAQCAtMTcsOCArMTcsOCBAQAogCQkubWFjcm8JYWRkcnVhcnQsIHJ4CiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJCQlAIE1NVSBlbmFibGVkPwotCQltb3ZlcQlccngsID1TUEVBUl9EQkdfVUFSVF9CQVNFCQlAIFBoeXNpY2FsIGJhc2UKLQkJbW92bmUJXHJ4LCA9VkFfU1BFQVJfREJHX1VBUlRfQkFTRQkJQCBWaXJ0dWFsIGJhc2UKKwkJbW92ZXEJXHJ4LCAjU1BFQVJfREJHX1VBUlRfQkFTRQkJQCBQaHlzaWNhbCBiYXNlCisJCW1vdm5lCVxyeCwgI1ZBX1NQRUFSX0RCR19VQVJUX0JBU0UJCUAgVmlydHVhbCBiYXNlCiAJCS5lbmRtCiAKIAkJLm1hY3JvCXNlbmR1YXJ0LCByZCwgcngKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc3BlYXIvcGFkbXV4LmMgYi9hcmNoL2FybS9wbGF0LXNwZWFyL3BhZG11eC5jCmluZGV4IGQyYWFiM2EuLjU1NWVlYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc3BlYXIvcGFkbXV4LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zcGVhci9wYWRtdXguYwpAQCAtNjYsNyArNjYsNyBAQAogICogSWYgcGVyaXBoZXJhbCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGN1cnJlbnQgbW9kZSB0aGVuIHJlcXVlc3QgaXMgcmVqZWN0ZWQuCiAgKiBDb25mbGljdHMgYmV0d2VlbiBwZXJpcGhlcmFscyBhcmUgbm90IGhhbmRsZWQgYW5kIHBlcmlwaGVyYWxzIHdpbGwgYmUKICAqIGVuYWJsZWQgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIHByZXNlbnQgaW4gcG14X2RldiBhcnJheS4KLSAqIEluIGNhc2Ugb2YgY29uZmxpY3RzIGxhc3QgcGVyaXBoZXJhbCBlbmFsYmVkIHdpbGwgYmUgcHJlc2VudC4KKyAqIEluIGNhc2Ugb2YgY29uZmxpY3RzIGxhc3QgcGVyaXBoZXJhbCBlbmFibGVkIHdpbGwgYmUgcHJlc2VudC4KICAqIFJldHVybnMgLXZlIG9uIEVyciBvdGhlcndpc2UgMAogICovCiBzdGF0aWMgaW50IHBteF9kZXZzX2VuYWJsZShzdHJ1Y3QgcG14X2RldiAqKmRldnMsIHU4IGNvdW50KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zcGVhci90aW1lLmMgYi9hcmNoL2FybS9wbGF0LXNwZWFyL3RpbWUuYwppbmRleCBhMTAyNWQzLi5hYjIxMTY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNwZWFyL3RpbWUuYworKysgYi9hcmNoL2FybS9wbGF0LXNwZWFyL3RpbWUuYwpAQCAtNTgsNiArNTgsMTEgQEAKIAogI2RlZmluZSBJTlRfU1RBVFVTCQkweDEKIAorLyoKKyAqIE1pbmltdW0gY2xvY2tzb3VyY2UvY2xvY2tldmVudCB0aW1lciByYW5nZSBpbiBzZWNvbmRzCisgKi8KKyNkZWZpbmUgU1BFQVJfTUlOX1JBTkdFIDQKKwogc3RhdGljIF9faW9tZW0gdm9pZCAqZ3B0X2Jhc2U7CiBzdGF0aWMgc3RydWN0IGNsayAqZ3B0X2NsazsKIApAQCAtNjYsNDQgKzcxLDYgQEAKIHN0YXRpYyBpbnQgY2xvY2tldmVudF9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgZXZ0LAogCQkJCSBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjbGtfZXZlbnRfZGV2KTsKIAotLyoKLSAqIEZvbGxvd2luZyBjbG9ja3NvdXJjZV9zZXRfY2xvY2sgYW5kIGNsb2NrZXZlbnRfc2V0X2Nsb2NrIHBpY2tlZAotICogZnJvbSBhcmNoL21pcHMva2VybmVsL3RpbWUuYwotICovCi0KLXZvaWQgX19pbml0IGNsb2Nrc291cmNlX3NldF9jbG9jayhzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzLCB1bnNpZ25lZCBpbnQgY2xvY2spCi17Ci0JdTY0IHRlbXA7Ci0JdTMyIHNoaWZ0OwotCi0JLyogRmluZCBhIHNoaWZ0IHZhbHVlICovCi0JZm9yIChzaGlmdCA9IDMyOyBzaGlmdCA+IDA7IHNoaWZ0LS0pIHsKLQkJdGVtcCA9ICh1NjQpIE5TRUNfUEVSX1NFQyA8PCBzaGlmdDsKLQkJZG9fZGl2KHRlbXAsIGNsb2NrKTsKLQkJaWYgKCh0ZW1wID4+IDMyKSA9PSAwKQotCQkJYnJlYWs7Ci0JfQotCWNzLT5zaGlmdCA9IHNoaWZ0OwotCWNzLT5tdWx0ID0gKHUzMikgdGVtcDsKLX0KLQotdm9pZCBfX2luaXQgY2xvY2tldmVudF9zZXRfY2xvY2soc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2QsCi0JdW5zaWduZWQgaW50IGNsb2NrKQotewotCXU2NCB0ZW1wOwotCXUzMiBzaGlmdDsKLQotCS8qIEZpbmQgYSBzaGlmdCB2YWx1ZSAqLwotCWZvciAoc2hpZnQgPSAzMjsgc2hpZnQgPiAwOyBzaGlmdC0tKSB7Ci0JCXRlbXAgPSAodTY0KSBjbG9jayA8PCBzaGlmdDsKLQkJZG9fZGl2KHRlbXAsIE5TRUNfUEVSX1NFQyk7Ci0JCWlmICgodGVtcCA+PiAzMikgPT0gMCkKLQkJCWJyZWFrOwotCX0KLQljZC0+c2hpZnQgPSBzaGlmdDsKLQljZC0+bXVsdCA9ICh1MzIpIHRlbXA7Ci19Ci0KIHN0YXRpYyBjeWNsZV90IGNsb2Nrc291cmNlX3JlYWRfY3ljbGVzKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7CiAJcmV0dXJuIChjeWNsZV90KSByZWFkdyhncHRfYmFzZSArIENPVU5UKENMS1NSQykpOwpAQCAtMTM4LDcgKzEwNSw3IEBACiAJdmFsIHw9IENUUkxfRU5BQkxFIDsKIAl3cml0ZXcodmFsLCBncHRfYmFzZSArIENSKENMS1NSQykpOwogCi0JY2xvY2tzb3VyY2Vfc2V0X2Nsb2NrKCZjbGtzcmMsIHRpY2tfcmF0ZSk7CisJY2xvY2tzb3VyY2VfY2FsY19tdWx0X3NoaWZ0KCZjbGtzcmMsIHRpY2tfcmF0ZSwgU1BFQVJfTUlOX1JBTkdFKTsKIAogCS8qIHJlZ2lzdGVyIHRoZSBjbG9ja3NvdXJjZSAqLwogCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbGtzcmMpOwpAQCAtMjMzLDcgKzIwMCw3IEBACiAJdGlja19yYXRlID0gY2xrX2dldF9yYXRlKGdwdF9jbGspOwogCXRpY2tfcmF0ZSA+Pj0gQ1RSTF9QUkVTQ0FMRVIxNjsKIAotCWNsb2NrZXZlbnRfc2V0X2Nsb2NrKCZjbGtldnQsIHRpY2tfcmF0ZSk7CisJY2xvY2tldmVudHNfY2FsY19tdWx0X3NoaWZ0KCZjbGtldnQsIHRpY2tfcmF0ZSwgU1BFQVJfTUlOX1JBTkdFKTsKIAogCWNsa2V2dC5tYXhfZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZmZmMCwKIAkJCSZjbGtldnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC12ZXJzYXRpbGUvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LXZlcnNhdGlsZS9NYWtlZmlsZQppbmRleCA5YjFhNjY4Li41Y2Y4OGU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXZlcnNhdGlsZS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LXZlcnNhdGlsZS9NYWtlZmlsZQpAQCAtMiwzICsyLDcgQEAKIG9iai0kKENPTkZJR19BUk1fVElNRVJfU1A4MDQpICs9IHRpbWVyLXNwLm8KIG9iai0kKENPTkZJR19BUkNIX1JFQUxWSUVXKSArPSBzY2hlZC1jbG9jay5vCiBvYmotJChDT05GSUdfQVJDSF9WRVJTQVRJTEUpICs9IHNjaGVkLWNsb2NrLm8KK2lmZXEgKCQoQ09ORklHX0xFRFNfQ0xBU1MpLHkpCitvYmotJChDT05GSUdfQVJDSF9SRUFMVklFVykgKz0gbGVkcy5vCitvYmotJChDT05GSUdfQVJDSF9WRVJTQVRJTEUpICs9IGxlZHMubworZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtdmVyc2F0aWxlL2xlZHMuYyBiL2FyY2gvYXJtL3BsYXQtdmVyc2F0aWxlL2xlZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTY5ZmE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC12ZXJzYXRpbGUvbGVkcy5jCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogRHJpdmVyIGZvciB0aGUgOCB1c2VyIExFRHMgZm91bmQgb24gdGhlIFJlYWxWaWV3cyBhbmQgVmVyc2F0aWxlcworICogQmFzZWQgb24gRGFWaW5jaSdzIERNMzY1IGJvYXJkIGNvZGUKKyAqCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8dHJpYWRAZGYubHRoLnNlPgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3BsYXRmb3JtLmg+CisKKyNpZmRlZiBWRVJTQVRJTEVfU1lTX0JBU0UKKyNkZWZpbmUgTEVEUkVHCShfX2lvX2FkZHJlc3MoVkVSU0FUSUxFX1NZU19CQVNFKSArIFZFUlNBVElMRV9TWVNfTEVEX09GRlNFVCkKKyNlbmRpZgorCisjaWZkZWYgUkVBTFZJRVdfU1lTX0JBU0UKKyNkZWZpbmUgTEVEUkVHCShfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0JBU0UpICsgUkVBTFZJRVdfU1lTX0xFRF9PRkZTRVQpCisjZW5kaWYKKworc3RydWN0IHZlcnNhdGlsZV9sZWQgeworCXN0cnVjdCBsZWRfY2xhc3NkZXYJY2RldjsKKwl1OAkJCW1hc2s7Cit9OworCisvKgorICogVGhlIHRyaWdnZXJzIGxpbmVzIHVwIGJlbG93IHdpbGwgb25seSBiZSB1c2VkIGlmIHRoZQorICogTEVEIHRyaWdnZXJzIGFyZSBjb21waWxlZCBpbi4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICp0cmlnZ2VyOworfSB2ZXJzYXRpbGVfbGVkc1tdID0geworCXsgInZlcnNhdGlsZTowIiwgImhlYXJ0YmVhdCIsIH0sCisJeyAidmVyc2F0aWxlOjEiLCAibW1jMCIsIH0sCisJeyAidmVyc2F0aWxlOjIiLCB9LAorCXsgInZlcnNhdGlsZTozIiwgfSwKKwl7ICJ2ZXJzYXRpbGU6NCIsIH0sCisJeyAidmVyc2F0aWxlOjUiLCB9LAorCXsgInZlcnNhdGlsZTo2IiwgfSwKKwl7ICJ2ZXJzYXRpbGU6NyIsIH0sCit9OworCitzdGF0aWMgdm9pZCB2ZXJzYXRpbGVfbGVkX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2LAorCQkJICAgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBiKQoreworCXN0cnVjdCB2ZXJzYXRpbGVfbGVkICpsZWQgPSBjb250YWluZXJfb2YoY2RldiwKKwkJCQkJCSBzdHJ1Y3QgdmVyc2F0aWxlX2xlZCwgY2Rldik7CisJdTMyIHJlZyA9IHJlYWRsKExFRFJFRyk7CisKKwlpZiAoYiAhPSBMRURfT0ZGKQorCQlyZWcgfD0gbGVkLT5tYXNrOworCWVsc2UKKwkJcmVnICY9IH5sZWQtPm1hc2s7CisJd3JpdGVsKHJlZywgTEVEUkVHKTsKK30KKworc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3MgdmVyc2F0aWxlX2xlZF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqY2RldikKK3sKKwlzdHJ1Y3QgdmVyc2F0aWxlX2xlZCAqbGVkID0gY29udGFpbmVyX29mKGNkZXYsCisJCQkJCQkgc3RydWN0IHZlcnNhdGlsZV9sZWQsIGNkZXYpOworCXUzMiByZWcgPSByZWFkbChMRURSRUcpOworCisJcmV0dXJuIChyZWcgJiBsZWQtPm1hc2spID8gTEVEX0ZVTEwgOiBMRURfT0ZGOworfQorCitzdGF0aWMgaW50IF9faW5pdCB2ZXJzYXRpbGVfbGVkc19pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwkvKiBBbGwgT04gKi8KKwl3cml0ZWwoMHhmZiwgTEVEUkVHKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2ZXJzYXRpbGVfbGVkcyk7IGkrKykgeworCQlzdHJ1Y3QgdmVyc2F0aWxlX2xlZCAqbGVkOworCisJCWxlZCA9IGt6YWxsb2Moc2l6ZW9mKCpsZWQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFsZWQpCisJCQlicmVhazsKKworCQlsZWQtPmNkZXYubmFtZSA9IHZlcnNhdGlsZV9sZWRzW2ldLm5hbWU7CisJCWxlZC0+Y2Rldi5icmlnaHRuZXNzX3NldCA9IHZlcnNhdGlsZV9sZWRfc2V0OworCQlsZWQtPmNkZXYuYnJpZ2h0bmVzc19nZXQgPSB2ZXJzYXRpbGVfbGVkX2dldDsKKwkJbGVkLT5jZGV2LmRlZmF1bHRfdHJpZ2dlciA9IHZlcnNhdGlsZV9sZWRzW2ldLnRyaWdnZXI7CisJCWxlZC0+bWFzayA9IEJJVChpKTsKKworCQlpZiAobGVkX2NsYXNzZGV2X3JlZ2lzdGVyKE5VTEwsICZsZWQtPmNkZXYpIDwgMCkgeworCQkJa2ZyZWUobGVkKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTaW5jZSB3ZSBtYXkgaGF2ZSB0cmlnZ2VycyBvbiBhbnkgc3Vic3lzdGVtLCBkZWZlciByZWdpc3RyYXRpb24KKyAqIHVudGlsIGFmdGVyIHN1YnN5c3RlbV9pbml0LgorICovCitmc19pbml0Y2FsbCh2ZXJzYXRpbGVfbGVkc19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMgYi9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCmluZGV4IDhmMTBkMjQuLjQ4Y2JkY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKKysrIGIvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwpAQCAtMTIsNyArMTIsNyBAQAogIwogIyAgIGh0dHA6Ly93d3cuYXJtLmxpbnV4Lm9yZy51ay9kZXZlbG9wZXIvbWFjaGluZXMvP2FjdGlvbj1uZXcKICMKLSMgTGFzdCB1cGRhdGU6IFNhdCBNYXkgMSAxMDozNjo0MiAyMDEwCisjIExhc3QgdXBkYXRlOiBNb24gSnVsIDEyIDIxOjEwOjE0IDIwMTAKICMKICMgbWFjaGluZV9pc194eHgJQ09ORklHX3h4eHgJCU1BQ0hfVFlQRV94eHgJCW51bWJlcgogIwpAQCAtMTk5NCw3ICsxOTk0LDcgQEAKIGJlbnppbmEJCQlNQUNIX0JFTlpJTkEJCUJFTlpJTkEJCQkyMDAzCiBibGF6ZQkJCU1BQ0hfQkxBWkUJCUJMQVpFCQkJMjAwNAogbGlua3N0YXRpb25fbHNfaGdsCU1BQ0hfTElOS1NUQVRJT05fTFNfSEdMCUxJTktTVEFUSU9OX0xTX0hHTAkyMDA1Ci1odGNrb3Zza3kJCU1BQ0hfSFRDVkVOVVMJCUhUQ1ZFTlVTCQkyMDA2CitodGNrb3Zza3kJCU1BQ0hfSFRDS09WU0tZCQlIVENLT1ZTS1kJCTIwMDYKIHNvbnlfcHJzNTA1CQlNQUNIX1NPTllfUFJTNTA1CVNPTllfUFJTNTA1CQkyMDA3CiBoYW5saW5fdjMJCU1BQ0hfSEFOTElOX1YzCQlIQU5MSU5fVjMJCTIwMDgKIHNhcHBoaXJhCQlNQUNIX1NBUFBISVJBCQlTQVBQSElSQQkJMjAwOQpAQCAtMjYwOSw3ICsyNjA5LDcgQEAKIGxleGlrb24JCQlNQUNIX0xFWElLT04JCUxFWElLT04JCQkyNjIyCiBtaW5pMjQ0MHYyCQlNQUNIX01JTkkyNDQwVjIJCU1JTkkyNDQwVjIJCTI2MjMKIGljb250cm9sCQlNQUNIX0lDT05UUk9MCQlJQ09OVFJPTAkJMjYyNAotc2hlZXZhZAkJCU1BQ0hfU0hFRVZBRAkJU0hFRVZBRAkJCTI2MjUKK2dwbHVnZAkJCU1BQ0hfU0hFRVZBRAkJU0hFRVZBRAkJCTI2MjUKIHFzZDh4NTBhX3N0MV8xCQlNQUNIX1FTRDhYNTBBX1NUMV8xCVFTRDhYNTBBX1NUMV8xCQkyNjI2CiBxc2Q4eDUwYV9zdDFfNQkJTUFDSF9RU0Q4WDUwQV9TVDFfNQlRU0Q4WDUwQV9TVDFfNQkJMjYyNwogYmVlCQkJTUFDSF9CRUUJCUJFRQkJCTI2MjgKQEAgLTI4MDQsMyArMjgwNCwxNDkgQEAKIHNuYXBwZXI5ZzQ1CQlNQUNIX1NOQVBQRVI5RzQ1CVNOQVBQRVI5RzQ1CQkyODE3CiB0YW0zNTE3CQkJTUFDSF9UQU0zNTE3CQlUQU0zNTE3CQkJMjgxOAogcGRjMTAwCQkJTUFDSF9QREMxMDAJCVBEQzEwMAkJCTI4MTkKK2V1a3JlYV9jcHVpbXgyNXNkCU1BQ0hfRVVLUkVBX0NQVUlNWDI1CUVVS1JFQV9DUFVJTVgyNQkJMjgyMAorZXVrcmVhX2NwdWlteDM1c2QJTUFDSF9FVUtSRUFfQ1BVSU1YMzUJRVVLUkVBX0NQVUlNWDM1CQkyODIxCitldWtyZWFfY3B1aW14NTFzZAlNQUNIX0VVS1JFQV9DUFVJTVg1MVNECUVVS1JFQV9DUFVJTVg1MVNECTI4MjIKK2V1a3JlYV9jcHVpbXg1MQkJTUFDSF9FVUtSRUFfQ1BVSU1YNTEJRVVLUkVBX0NQVUlNWDUxCQkyODIzCitwNTY1CQkJTUFDSF9QNTY1CQlQNTY1CQkJMjgyNAorYWNlcl9hNAkJCU1BQ0hfQUNFUl9BNAkJQUNFUl9BNAkJCTI4MjUKK2RhdmluY2lfZG0zNjhfYmlwCU1BQ0hfREFWSU5DSV9ETTM2OF9CSVAJREFWSU5DSV9ETTM2OF9CSVAJMjgyNgorZXNoYXJlCQkJTUFDSF9FU0hBUkUJCUVTSEFSRQkJCTI4MjcKK2h3X29tYXBsMTM4X2V1cm9wYQlNQUNIX0hXX09NQVBMMTM4X0VVUk9QQQlIV19PTUFQTDEzOF9FVVJPUEEJMjgyOAord2xiYXJnbgkJCU1BQ0hfV0xCQVJHTgkJV0xCQVJHTgkJCTI4MjkKK2JtMTcwCQkJTUFDSF9CTTE3MAkJQk0xNzAJCQkyODMwCituZXRzcGFjZV9taW5pX3YyCU1BQ0hfTkVUU1BBQ0VfTUlOSV9WMglORVRTUEFDRV9NSU5JX1YyCTI4MzEKK25ldHNwYWNlX3BsdWdfdjIJTUFDSF9ORVRTUEFDRV9QTFVHX1YyCU5FVFNQQUNFX1BMVUdfVjIJMjgzMgorc2llbWVuc19sMQkJTUFDSF9TSUVNRU5TX0wxCQlTSUVNRU5TX0wxCQkyODMzCitlbHZfbGN1MQkJTUFDSF9FTFZfTENVMQkJRUxWX0xDVTEJCTI4MzQKK21jdTEJCQlNQUNIX01DVTEJCU1DVTEJCQkyODM1CitvbWFwM190YW8zNTMwCQlNQUNIX09NQVAzX1RBTzM1MzAJT01BUDNfVEFPMzUzMAkJMjgzNgorb21hcDNfcGN1dG91Y2gJCU1BQ0hfT01BUDNfUENVVE9VQ0gJT01BUDNfUENVVE9VQ0gJCTI4MzcKK3NtZGtjMjEwCQlNQUNIX1NNREtDMjEwCQlTTURLQzIxMAkJMjgzOAorb21hcDNfYnJhaWxsbwkJTUFDSF9PTUFQM19CUkFJTExPCU9NQVAzX0JSQUlMTE8JCTI4MzkKK3NweXBsdWcJCQlNQUNIX1NQWVBMVUcJCVNQWVBMVUcJCQkyODQwCitnaW5nZXIJCQlNQUNIX0dJTkdFUgkJR0lOR0VSCQkJMjg0MQordG55X3QzNTMwCQlNQUNIX1ROWV9UMzUzMAkJVE5ZX1QzNTMwCQkyODQyCitwY2ExMDIJCQlNQUNIX1BDQTEwMgkJUENBMTAyCQkJMjg0Mworc3BhZGUJCQlNQUNIX1NQQURFCQlTUEFERQkJCTI4NDQKK214YzI1X3RvcGF6CQlNQUNIX01YQzI1X1RPUEFaCU1YQzI1X1RPUEFaCQkyODQ1Cit0NTMyNQkJCU1BQ0hfVDUzMjUJCVQ1MzI1CQkJMjg0NgorZ3cyMzYxCQkJTUFDSF9HVzIzNjEJCUdXMjM2MQkJCTI4NDcKK2Vsb2cJCQlNQUNIX0VMT0cJCUVMT0cJCQkyODQ4CitpbmNvbWUJCQlNQUNIX0lOQ09NRQkJSU5DT01FCQkJMjg0OQorYmNtNTg5eAkJCU1BQ0hfQkNNNTg5WAkJQkNNNTg5WAkJCTI4NTAKK2V0bmEJCQlNQUNIX0VUTkEJCUVUTkEJCQkyODUxCitoYXdrcwkJCU1BQ0hfSEFXS1MJCUhBV0tTCQkJMjg1MgorbWVzb24JCQlNQUNIX01FU09OCQlNRVNPTgkJCTI4NTMKK3hzYmFzZTI1NQkJTUFDSF9YU0JBU0UyNTUJCVhTQkFTRTI1NQkJMjg1NAorcHZtMjAzMAkJCU1BQ0hfUFZNMjAzMAkJUFZNMjAzMAkJCTI4NTUKK21pb2E1MDIJCQlNQUNIX01JT0E1MDIJCU1JT0E1MDIJCQkyODU2Cit2dmJveF9zZG9yaWcyCQlNQUNIX1ZWQk9YX1NET1JJRzIJVlZCT1hfU0RPUklHMgkJMjg1NwordnZib3hfc2RsaXRlMgkJTUFDSF9WVkJPWF9TRExJVEUyCVZWQk9YX1NETElURTIJCTI4NTgKK3Z2Ym94X3NkcHJvNAkJTUFDSF9WVkJPWF9TRFBSTzQJVlZCT1hfU0RQUk80CQkyODU5CitodGNfc3B2X203MDAJCU1BQ0hfSFRDX1NQVl9NNzAwCUhUQ19TUFZfTTcwMAkJMjg2MAorbXgyNTdzeAkJCU1BQ0hfTVgyNTdTWAkJTVgyNTdTWAkJCTI4NjEKK2dvbmkJCQlNQUNIX0dPTkkJCUdPTkkJCQkyODYyCittc204eDU1X3N2bHRlX2ZmYQlNQUNIX01TTThYNTVfU1ZMVEVfRkZBCU1TTThYNTVfU1ZMVEVfRkZBCTI4NjMKK21zbTh4NTVfc3ZsdGVfc3VyZglNQUNIX01TTThYNTVfU1ZMVEVfU1VSRglNU004WDU1X1NWTFRFX1NVUkYJMjg2NAorcXVpY2tzdGVwCQlNQUNIX1FVSUNLU1RFUAkJUVVJQ0tTVEVQCQkyODY1CitkbXc5NgkJCU1BQ0hfRE1XOTYJCURNVzk2CQkJMjg2NgoraGFtbWVyaGVhZAkJTUFDSF9IQU1NRVJIRUFECQlIQU1NRVJIRUFECQkyODY3Cit0cmlkZW50CQkJTUFDSF9UUklERU5UCQlUUklERU5UCQkJMjg2OAorbGlnaHRuaW5nCQlNQUNIX0xJR0hUTklORwkJTElHSFROSU5HCQkyODY5CitpY29ubmVjdAkJTUFDSF9JQ09OTkVDVAkJSUNPTk5FQ1QJCTI4NzAKK2F1dG9ib3QJCQlNQUNIX0FVVE9CT1QJCUFVVE9CT1QJCQkyODcxCitjb2NvbnV0CQkJTUFDSF9DT0NPTlVUCQlDT0NPTlVUCQkJMjg3MgorZHVyaWFuCQkJTUFDSF9EVVJJQU4JCURVUklBTgkJCTI4NzMKK2NheWVubmUJCQlNQUNIX0NBWUVOTkUJCUNBWUVOTkUJCQkyODc0CitmdWppCQkJTUFDSF9GVUpJCQlGVUpJCQkJMjg3NQorc3lub2xvZ3lfNjI4MgkJTUFDSF9TWU5PTE9HWV82MjgyCVNZTk9MT0dZXzYyODIJCTI4NzYKK2VtMXN5CQkJTUFDSF9FTTFTWQkJRU0xU1kJCQkyODc3CittNTAyCQkJTUFDSF9NNTAyCQlNNTAyCQkJMjg3OAorbWF0cml4NTE4CQlNQUNIX01BVFJJWDUxOAkJTUFUUklYNTE4CQkyODc5Cit0aW55X2d1cm5hcmQJCU1BQ0hfVElOWV9HVVJOQVJECVRJTllfR1VSTkFSRAkJMjg4MAorc3BlYXIxMzEwCQlNQUNIX1NQRUFSMTMxMAkJU1BFQVIxMzEwCQkyODgxCitidjA3CQkJTUFDSF9CVjA3CQlCVjA3CQkJMjg4MgorbXh0X3RkNjEJCU1BQ0hfTVhUX1RENjEJCU1YVF9URDYxCQkyODgzCitvcGVucmRfdWx0aW1hdGUJCU1BQ0hfT1BFTlJEX1VMVElNQVRFCU9QRU5SRF9VTFRJTUFURQkJMjg4NAorZGV2aXhwCQkJTUFDSF9ERVZJWFAJCURFVklYUAkJCTI4ODUKK21pY2NwdAkJCU1BQ0hfTUlDQ1BUCQlNSUNDUFQJCQkyODg2CittaWMyNTYJCQlNQUNIX01JQzI1NgkJTUlDMjU2CQkJMjg4NworYXMxMTY3CQkJTUFDSF9BUzExNjcJCUFTMTE2NwkJCTI4ODgKK29tYXAzX2liaXphCQlNQUNIX09NQVAzX0lCSVpBCU9NQVAzX0lCSVpBCQkyODg5Cit1NTUwMAkJCU1BQ0hfVTU1MDAJCVU1NTAwCQkJMjg5MAorZGF2aW5jaV9waWN0bwkJTUFDSF9EQVZJTkNJX1BJQ1RPCURBVklOQ0lfUElDVE8JCTI4OTEKK21lY2hhCQkJTUFDSF9NRUNIQQkJTUVDSEEJCQkyODkyCitidWJiYTMJCQlNQUNIX0JVQkJBMwkJQlVCQkEzCQkJMjg5MworcHVwaXRyZQkJCU1BQ0hfUFVQSVRSRQkJUFVQSVRSRQkJCTI4OTQKK3RlZ3JhX2hhcm1vbnkJCU1BQ0hfVEVHUkFfSEFSTU9OWQlURUdSQV9IQVJNT05ZCQkyODk1Cit0ZWdyYV92b2d1ZQkJTUFDSF9URUdSQV9WT0dVRQlURUdSQV9WT0dVRQkJMjg5NgordGVncmFfZTExNjUJCU1BQ0hfVEVHUkFfRTExNjUJVEVHUkFfRTExNjUJCTI4OTcKK3NpbXBsZW5ldAkJTUFDSF9TSU1QTEVORVQJCVNJTVBMRU5FVAkJMjg5OAorZWM0MzUwdGJtCQlNQUNIX0VDNDM1MFRCTQkJRUM0MzUwVEJNCQkyODk5CitwZWNfdGMJCQlNQUNIX1BFQ19UQwkJUEVDX1RDCQkJMjkwMAorcGVjX2hjMgkJCU1BQ0hfUEVDX0hDMgkJUEVDX0hDMgkJCTI5MDEKK2VzbF9tb2JpbGlzX2EJCU1BQ0hfRVNMX01PQklMSVNfQQlFU0xfTU9CSUxJU19BCQkyOTAyCitlc2xfbW9iaWxpc19iCQlNQUNIX0VTTF9NT0JJTElTX0IJRVNMX01PQklMSVNfQgkJMjkwMworZXNsX3dhdmVfYQkJTUFDSF9FU0xfV0FWRV9BCQlFU0xfV0FWRV9BCQkyOTA0Citlc2xfd2F2ZV9iCQlNQUNIX0VTTF9XQVZFX0IJCUVTTF9XQVZFX0IJCTI5MDUKK3VuaXNlbnNlX21tbQkJTUFDSF9VTklTRU5TRV9NTU0JVU5JU0VOU0VfTU1NCQkyOTA2CitibHVlc2hhcmsJCU1BQ0hfQkxVRVNIQVJLCQlCTFVFU0hBUksJCTI5MDcKK2UxMAkJCU1BQ0hfRTEwCQlFMTAJCQkyOTA4CithcHAza19yb2JpbgkJTUFDSF9BUFAzS19ST0JJTglBUFAzS19ST0JJTgkJMjkwOQorcG92MTVoZAkJCU1BQ0hfUE9WMTVIRAkJUE9WMTVIRAkJCTI5MTAKK3N0ZWxsYQkJCU1BQ0hfU1RFTExBCQlTVEVMTEEJCQkyOTExCitsaW5rc3RhdGlvbl9sc2NobAlNQUNIX0xJTktTVEFUSU9OX0xTQ0hMCUxJTktTVEFUSU9OX0xTQ0hMCTI5MTMKK25ldHdhbGtlcgkJTUFDSF9ORVRXQUxLRVIJCU5FVFdBTEtFUgkJMjkxNAorYWNzeDEwNgkJCU1BQ0hfQUNTWDEwNgkJQUNTWDEwNgkJCTI5MTUKK2F0bGFzNV9jMQkJTUFDSF9BVExBUzVfQzEJCUFUTEFTNV9DMQkJMjkxNgorbnNiM2FzdAkJCU1BQ0hfTlNCM0FTVAkJTlNCM0FTVAkJCTI5MTcKK2duZXRfc2xjCQlNQUNIX0dORVRfU0xDCQlHTkVUX1NMQwkJMjkxOAorYWY0MDAwCQkJTUFDSF9BRjQwMDAJCUFGNDAwMAkJCTI5MTkKK2Fyazk0MzEJCQlNQUNIX0FSSzk0MzEJCUFSSzk0MzEJCQkyOTIwCitmc19zNXBjMTAwCQlNQUNIX0ZTX1M1UEMxMDAJCUZTX1M1UEMxMDAJCTI5MjEKK29tYXAzNTA1bm92YTgJCU1BQ0hfT01BUDM1MDVOT1ZBOAlPTUFQMzUwNU5PVkE4CQkyOTIyCitvbWFwMzYyMV9lZHAxCQlNQUNIX09NQVAzNjIxX0VEUDEJT01BUDM2MjFfRURQMQkJMjkyMworb3JhdGlzYWVzCQlNQUNIX09SQVRJU0FFUwkJT1JBVElTQUVTCQkyOTI0CitzbWRrdjMxMAkJTUFDSF9TTURLVjMxMAkJU01ES1YzMTAJCTI5MjUKK3NpZW1lbnNfbDAJCU1BQ0hfU0lFTUVOU19MMAkJU0lFTUVOU19MMAkJMjkyNgordmVudGFuYQkJCU1BQ0hfVkVOVEFOQQkJVkVOVEFOQQkJCTI5MjcKK3dtODUwNV83aW5fbmV0Ym9vawlNQUNIX1dNODUwNV83SU5fTkVUQk9PSwlXTTg1MDVfN0lOX05FVEJPT0sJMjkyOAorZWM0MzUwc2RiCQlNQUNIX0VDNDM1MFNEQgkJRUM0MzUwU0RCCQkyOTI5CittaW1hcwkJCU1BQ0hfTUlNQVMJCU1JTUFTCQkJMjkzMAordGl0YW4JCQlNQUNIX1RJVEFOCQlUSVRBTgkJCTI5MzEKK2NyYW5lYm9hcmQJCU1BQ0hfQ1JBTkVCT0FSRAkJQ1JBTkVCT0FSRAkJMjkzMgorZXMyNDQwCQkJTUFDSF9FUzI0NDAJCUVTMjQ0MAkJCTI5MzMKK25hamF5X2E5MjYzCQlNQUNIX05BSkFZX0E5MjYzCU5BSkFZX0E5MjYzCQkyOTM0CitodGN0b3JuYWRvCQlNQUNIX0hUQ1RPUk5BRE8JCUhUQ1RPUk5BRE8JCTI5MzUKK2RpbW1fbXgyNTcJCU1BQ0hfRElNTV9NWDI1NwkJRElNTV9NWDI1NwkJMjkzNgoramlnZW4zMDEJCU1BQ0hfSklHRU4JCUpJR0VOCQkJMjkzNworc21kazY0NTAJCU1BQ0hfU01ESzY0NTAJCVNNREs2NDUwCQkyOTM4CittZW5vX3FuZwkJTUFDSF9NRU5PX1FORwkJTUVOT19RTkcJCTI5MzkKK25zMjQxNgkJCU1BQ0hfTlMyNDE2CQlOUzI0MTYJCQkyOTQwCitycGMzNTMJCQlNQUNIX1JQQzM1MwkJUlBDMzUzCQkJMjk0MQordHE2NDEwCQkJTUFDSF9UUTY0MTAJCVRRNjQxMAkJCTI5NDIKK3NreTY0MTAJCQlNQUNIX1NLWTY0MTAJCVNLWTY0MTAJCQkyOTQzCitkeW5hc3R5CQkJTUFDSF9EWU5BU1RZCQlEWU5BU1RZCQkJMjk0NAordml2bwkJCU1BQ0hfVklWTwkJVklWTwkJCTI5NDUKK2J1cnlfYmw3NTgyCQlNQUNIX0JVUllfQkw3NTgyCUJVUllfQkw3NTgyCQkyOTQ2CitidXJ5X2JwczUyNzAJCU1BQ0hfQlVSWV9CUFM1MjcwCUJVUllfQlBTNTI3MAkJMjk0NworYmFzaQkJCU1BQ0hfQkFTSQkJQkFTSQkJCTI5NDgKK3RuMjAwCQkJTUFDSF9UTjIwMAkJVE4yMDAJCQkyOTQ5CitjMm1taQkJCU1BQ0hfQzJNTUkJCUMyTU1JCQkJMjk1MAorbWVzb25fNjIzNm0JCU1BQ0hfTUVTT05fNjIzNk0JTUVTT05fNjIzNk0JCTI5NTEKK21lc29uXzg2MjZtCQlNQUNIX01FU09OXzg2MjZNCU1FU09OXzg2MjZNCQkyOTUyCit0dWJlCQkJTUFDSF9UVUJFCQlUVUJFCQkJMjk1MworbWVzc2luYQkJCU1BQ0hfTUVTU0lOQQkJTUVTU0lOQQkJCTI5NTQKK214NTBfYXJtMgkJTUFDSF9NWDUwX0FSTTIJCU1YNTBfQVJNMgkJMjk1NQorY2V0dXM5MjYzCQlNQUNIX0NFVFVTOTI2MwkJQ0VUVVM5MjYzCQkyOTU2Citicm93bnN0b25lCQlNQUNIX0JST1dOU1RPTkUJCUJST1dOU1RPTkUJCTI5NTcKK3ZteDI1CQkJTUFDSF9WTVgyNQkJVk1YMjUJCQkyOTU4Cit2bXg1MQkJCU1BQ0hfVk1YNTEJCVZNWDUxCQkJMjk1OQorYWJhY3VzCQkJTUFDSF9BQkFDVVMJCUFCQUNVUwkJCTI5NjAKK2NtNDc0NQkJCU1BQ0hfQ000NzQ1CQlDTTQ3NDUJCQkyOTYxCitvcmF0aXNsaW5rCQlNQUNIX09SQVRJU0xJTksJCU9SQVRJU0xJTksJCTI5NjIKK2RhdmluY2lfZG0zNjVfZHZyCU1BQ0hfREFWSU5DSV9ETTM2NV9EVlIJREFWSU5DSV9ETTM2NV9EVlIJMjk2MworbmV0dml6CQkJTUFDSF9ORVRWSVoJCU5FVFZJWgkJCTI5NjQKK2ZsZXhpYml0eQkJTUFDSF9GTEVYSUJJVFkJCUZMRVhJQklUWQkJMjk2NQord2xhbl9jb21wdXRlcgkJTUFDSF9XTEFOX0NPTVBVVEVSCVdMQU5fQ09NUFVURVIJCTI5NjYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYyBiL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYwppbmRleCAzMTVhNTQwLi44MDYzYTMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKKyNpbmNsdWRlIDxhc20vY3B1dHlwZS5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfbm90aWZ5Lmg+CiAjaW5jbHVkZSA8YXNtL3ZmcC5oPgogCkBAIC01NDksMTAgKzU1MCwxMyBAQAogCQkvKgogCQkgKiBDaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBBZHZhbmNlZCBTSU1ECiAJCSAqIGxvYWQvc3RvcmUgaW5zdHJ1Y3Rpb25zLCBpbnRlZ2VyIGFuZCBzaW5nbGUKLQkJICogcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbnMuCisJCSAqIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBvcGVyYXRpb25zLiBPbmx5IGNoZWNrCisJCSAqIGZvciBORU9OIGlmIHRoZSBoYXJkd2FyZSBoYXMgdGhlIE1WRlIgcmVnaXN0ZXJzLgogCQkgKi8KLQkJaWYgKChmbXJ4KE1WRlIxKSAmIDB4MDAwZmZmMDApID09IDB4MDAwMTExMDApCi0JCQllbGZfaHdjYXAgfD0gSFdDQVBfTkVPTjsKKwkJaWYgKChyZWFkX2NwdWlkX2lkKCkgJiAweDAwMGYwMDAwKSA9PSAweDAwMGYwMDAwKSB7CisJCQlpZiAoKGZtcngoTVZGUjEpICYgMHgwMDBmZmYwMCkgPT0gMHgwMDAxMTEwMCkKKwkJCQllbGZfaHdjYXAgfD0gSFdDQVBfTkVPTjsKKwkJfQogI2VuZGlmCiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9LY29uZmlnIGIvYXJjaC9hdnIzMi9LY29uZmlnCmluZGV4IGYyYjMxOTMuLmY1MTU3MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvS2NvbmZpZworKysgYi9hcmNoL2F2cjMyL0tjb25maWcKQEAgLTQ1LDkgKzQ1LDYgQEAKIGNvbmZpZyBSV1NFTV9HRU5FUklDX1NQSU5MT0NLCiAJZGVmX2Jvb2wgeQogCi1jb25maWcgR0VORVJJQ19USU1FCi0JZGVmX2Jvb2wgeQotCiBjb25maWcgR0VORVJJQ19DTE9DS0VWRU5UUwogCWRlZl9ib29sIHkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9NYWtlZmlsZSBiL2FyY2gvYXZyMzIvTWFrZWZpbGUKaW5kZXggZWFkOGE3NS4uMjJmYjY2NSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9NYWtlZmlsZQorKysgYi9hcmNoL2F2cjMyL01ha2VmaWxlCkBAIC0xMyw3ICsxMyw3IEBACiAKIEtCVUlMRF9DRkxBR1MJKz0gLXBpcGUgLWZuby1idWlsdGluIC1tbm8tcGljCiBLQlVJTERfQUZMQUdTCSs9IC1tcmVsYXggLW1uby1waWMKLUNGTEFHU19NT0RVTEUJKz0gLW1uby1yZWxheAorS0JVSUxEX0NGTEFHU19NT0RVTEUgKz0gLW1uby1yZWxheAogTERGTEFHU192bWxpbnV4CSs9IC0tcmVsYXgKIAogY3B1ZmxhZ3MtJChDT05GSUdfUExBVEZPUk1fQVQzMkFQKQkrPSAtbWFyY2g9YXAKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vaW9jdGxzLmggYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2lvY3Rscy5oCmluZGV4IDBjZjJjMGEuLmU2YWMwYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vaW9jdGxzLmgKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9pb2N0bHMuaApAQCAtNTQsNiArNTQsOSBAQAogI2RlZmluZSBUSU9DR1BUTglfSU9SKCdUJywweDMwLCB1bnNpZ25lZCBpbnQpIC8qIEdldCBQdHkgTnVtYmVyIChvZiBwdHktbXV4IGRldmljZSkgKi8KICNkZWZpbmUgVElPQ1NQVExDSwlfSU9XKCdUJywweDMxLCBpbnQpICAvKiBMb2NrL3VubG9jayBQdHkgKi8KIAorI2RlZmluZSBUSU9DR1JTNDg1ICAgICAgMHg1NDJFCisjZGVmaW5lIFRJT0NTUlM0ODUgICAgICAweDU0MkYKKwogI2RlZmluZSBGSU9OQ0xFWAkweDU0NTAKICNkZWZpbmUgRklPQ0xFWAkJMHg1NDUxCiAjZGVmaW5lIEZJT0FTWU5DCTB4NTQ1MgpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9sb2NhbDY0LmggYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2xvY2FsNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmM5M2I1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9sb2NhbDY0LmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsNjQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2JvYXJkLmggYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9ib2FyZC5oCmluZGV4IGM3ZjI1YmIuLjYxNzQwMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2JvYXJkLmgKKysrIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvYm9hcmQuaApAQCAtNSw2ICs1LDcgQEAKICNkZWZpbmUgX19BU01fQVJDSF9CT0FSRF9ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogCiAjZGVmaW5lIEdQSU9fUElOX05PTkUJKC0xKQogCkBAIC0zNSw2ICszNiw3IEBACiAJc2hvcnQJCXVzZV9kbWFfdHg7CS8qIHVzZSB0cmFuc21pdCBETUE/ICovCiAJc2hvcnQJCXVzZV9kbWFfcng7CS8qIHVzZSByZWNlaXZlIERNQT8gKi8KIAl2b2lkIF9faW9tZW0JKnJlZ3M7CQkvKiB2aXJ0dWFsIGJhc2UgYWRkcmVzcywgaWYgYW55ICovCisJc3RydWN0IHNlcmlhbF9yczQ4NQlyczQ4NTsJCS8qIHJzNDg1IHNldHRpbmdzICovCiB9Owogdm9pZCBhdDMyX21hcF91c2FydCh1bnNpZ25lZCBpbnQgaHdfaWQsIHVuc2lnbmVkIGludCBsaW5lLCBpbnQgZmxhZ3MpOwogc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXQzMl9hZGRfZGV2aWNlX3VzYXJ0KHVuc2lnbmVkIGludCBpZCk7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL0tjb25maWcgYi9hcmNoL2JsYWNrZmluL0tjb25maWcKaW5kZXggZjY2Mjk0Yi4uYzg4ZmQzNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9LY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vS2NvbmZpZwpAQCAtNjE0LDkgKzYxNCw2IEBACiAKIHNvdXJjZSBrZXJuZWwvS2NvbmZpZy5oegogCi1jb25maWcgR0VORVJJQ19USU1FCi0JZGVmX2Jvb2wgeQotCiBjb25maWcgR0VORVJJQ19DTE9DS0VWRU5UUwogCWJvb2wgIkdlbmVyaWMgY2xvY2sgZXZlbnRzIgogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9NYWtlZmlsZSBiL2FyY2gvYmxhY2tmaW4vTWFrZWZpbGUKaW5kZXggNWE5N2EzMS4uOWQ1ZmZhZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9NYWtlZmlsZQorKysgYi9hcmNoL2JsYWNrZmluL01ha2VmaWxlCkBAIC0xOCw4ICsxOCw4IEBACiBLQlVJTERfQ0ZMQUdTICAgICAgICAgICArPSAtbWxvbmctY2FsbHMKIGVuZGlmCiBLQlVJTERfQUZMQUdTICAgICAgICAgICArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tbm8tZmRwaWMpCi1DRkxBR1NfTU9EVUxFICAgICs9IC1tbG9uZy1jYWxscwotTERGTEFHU19NT0RVTEUgICArPSAtbSBlbGYzMmJmaW4KK0tCVUlMRF9DRkxBR1NfTU9EVUxFICAgICs9IC1tbG9uZy1jYWxscworS0JVSUxEX0xERkxBR1NfTU9EVUxFICAgKz0gLW0gZWxmMzJiZmluCiBLQUxMU1lNUyAgICAgICAgICs9IC0tc3ltYm9sLXByZWZpeD1fCiAKIEtCVUlMRF9ERUZDT05GSUcgOj0gQkY1MzctU1RBTVBfZGVmY29uZmlnCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2xvY2FsNjQuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbG9jYWw2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YzkzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2xvY2FsNjQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWw2NC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL0tjb25maWcgYi9hcmNoL2NyaXMvS2NvbmZpZwppbmRleCBlMjViZjQ0Li44ODdlZjg1IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvS2NvbmZpZworKysgYi9hcmNoL2NyaXMvS2NvbmZpZwpAQCAtMjAsOSArMjAsNiBAQAogY29uZmlnIFJXU0VNX1hDSEdBRERfQUxHT1JJVEhNCiAJYm9vbAogCi1jb25maWcgR0VORVJJQ19USU1FCi0JZGVmX2Jvb2wgeQotCiBjb25maWcgR0VORVJJQ19DTU9TX1VQREFURQogCWRlZl9ib29sIHkKIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL21tL2ludG1lbS5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21tL2ludG1lbS5jCmluZGV4IDllOGI2OWMuLjFiMTdkOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tbS9pbnRtZW0uYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvbW0vaW50bWVtLmMKQEAgLTMzLDggKzMzLDggQEAKIHsKIAlzdGF0aWMgaW50IGluaXRpYXRlZCA9IDA7CiAJaWYgKCFpbml0aWF0ZWQpIHsKLQkJc3RydWN0IGludG1lbV9hbGxvY2F0aW9uKiBhbGxvYyA9Ci0JCSAgKHN0cnVjdCBpbnRtZW1fYWxsb2NhdGlvbiopa21hbGxvYyhzaXplb2YgKmFsbG9jLCBHRlBfS0VSTkVMKTsKKwkJc3RydWN0IGludG1lbV9hbGxvY2F0aW9uKiBhbGxvYzsKKwkJYWxsb2MgPSBrbWFsbG9jKHNpemVvZiAqYWxsb2MsIEdGUF9LRVJORUwpOwogCQlJTklUX0xJU1RfSEVBRCgmaW50bWVtX2FsbG9jYXRpb25zKTsKIAkJaW50bWVtX3ZpcnR1YWwgPSBpb3JlbWFwKE1FTV9JTlRNRU1fU1RBUlQgKyBSRVNFUlZFRF9TSVpFLAogCQkJCQkgTUVNX0lOVE1FTV9TSVpFIC0gUkVTRVJWRURfU0laRSk7CkBAIC02Miw5ICs2Miw4IEBACiAJCWlmIChhbGxvY2F0aW9uLT5zdGF0dXMgPT0gU1RBVFVTX0ZSRUUgJiYKIAkJICAgIGFsbG9jYXRpb24tPnNpemUgPj0gc2l6ZSArIGFsaWdubWVudCkgewogCQkJaWYgKGFsbG9jYXRpb24tPnNpemUgPiBzaXplICsgYWxpZ25tZW50KSB7Ci0JCQkJc3RydWN0IGludG1lbV9hbGxvY2F0aW9uKiBhbGxvYyA9Ci0JCQkJCShzdHJ1Y3QgaW50bWVtX2FsbG9jYXRpb24qKQotCQkJCQlrbWFsbG9jKHNpemVvZiAqYWxsb2MsIEdGUF9BVE9NSUMpOworCQkJCXN0cnVjdCBpbnRtZW1fYWxsb2NhdGlvbiogYWxsb2M7CisJCQkJYWxsb2MgPSBrbWFsbG9jKHNpemVvZiAqYWxsb2MsIEdGUF9BVE9NSUMpOwogCQkJCWFsbG9jLT5zdGF0dXMgPSBTVEFUVVNfRlJFRTsKIAkJCQlhbGxvYy0+c2l6ZSA9IGFsbG9jYXRpb24tPnNpemUgLSBzaXplIC0KIAkJCQkJYWxpZ25tZW50OwpAQCAtNzQsOSArNzMsNyBAQAogCiAJCQkJaWYgKGFsaWdubWVudCkgewogCQkJCQlzdHJ1Y3QgaW50bWVtX2FsbG9jYXRpb24gKnRtcDsKLQkJCQkJdG1wID0gKHN0cnVjdCBpbnRtZW1fYWxsb2NhdGlvbiAqKQotCQkJCQkJa21hbGxvYyhzaXplb2YgKnRtcCwKLQkJCQkJCQlHRlBfQVRPTUlDKTsKKwkJCQkJdG1wID0ga21hbGxvYyhzaXplb2YgKnRtcCwgR0ZQX0FUT01JQyk7CiAJCQkJCXRtcC0+b2Zmc2V0ID0gYWxsb2NhdGlvbi0+b2Zmc2V0OwogCQkJCQl0bXAtPnNpemUgPSBhbGlnbm1lbnQ7CiAJCQkJCXRtcC0+c3RhdHVzID0gU1RBVFVTX0ZSRUU7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vbG9jYWw2NC5oIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2xvY2FsNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmM5M2I1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2xvY2FsNjQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWw2NC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvS2NvbmZpZyBiL2FyY2gvZnJ2L0tjb25maWcKaW5kZXggNGI1ODMwYi4uMTYzOTliZCAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvS2NvbmZpZworKysgYi9hcmNoL2Zydi9LY29uZmlnCkBAIC00MCwxMCArNDAsNiBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAotY29uZmlnIEdFTkVSSUNfVElNRQotCWJvb2wKLQlkZWZhdWx0IHkKLQogY29uZmlnIFRJTUVfTE9XX1JFUwogCWJvb2wKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L01ha2VmaWxlIGIvYXJjaC9mcnYvTWFrZWZpbGUKaW5kZXggMzEwYzQ3YS4uN2ZmODQ1NyAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvTWFrZWZpbGUKKysrIGIvYXJjaC9mcnYvTWFrZWZpbGUKQEAgLTIzLDIwICsyMywxNCBAQAogIyBDb3B5cmlnaHQgKEMpIDE5OTQgYnkgSGFtaXNoIE1hY2RvbmFsZAogIwogCi1DQ1NQRUNTCTo9ICQoc2hlbGwgJChDQykgLXYgMj4mMSB8IGdyZXAgIl5SZWFkaW5nIHNwZWNzIGZyb20gIiB8IGhlYWQgLTEgfCBjdXQgLWMyMC0pCi1DQ0RJUgk6PSAkKHN0cmlwICQocGF0c3Vic3QgJS9zcGVjcywlLCQoQ0NTUEVDUykpKQotQ1BVQ0xBU1MgOj0gZnI0MDAKLQotIyB0ZXN0IGZvciBjcm9zcyBjb21waWxpbmcKLUNPTVBJTEVfQVJDSCA9ICQoc2hlbGwgdW5hbWUgLW0pCi0KIGlmZGVmIENPTkZJR19NTVUKIFVUU19TWVNOQU1FID0gLURVVFNfU1lTTkFNRT1cIkxpbnV4XCIKIGVsc2UKIFVUU19TWVNOQU1FID0gLURVVFNfU1lTTkFNRT1cInVDbGludXhcIgogZW5kaWYKIAotQVJDSE1PREZMQUdTCSs9IC1HMCAtbWxvbmctY2FsbHMKK0tCVUlMRF9BRkxBR1NfTU9EVUxFICs9IC1HMCAtbWxvbmctY2FsbHMKK0tCVUlMRF9DRkxBR1NfTU9EVUxFICs9IC1HMCAtbWxvbmctY2FsbHMKIAogaWZkZWYgQ09ORklHX0dQUkVMX0RBVEFfOAogS0JVSUxEX0NGTEFHUwkrPSAtRzgKQEAgLTU0LDcgKzQ4LDYgQEAKIAogaWZkZWYgQ09ORklHX0dDX1NFQ1RJT05TCiBLQlVJTERfQ0ZMQUdTCSs9IC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zCi1MSU5LRkxBR1MJKz0gLS1nYy1zZWN0aW9ucwogZW5kaWYKIAogaWZuZGVmIENPTkZJR19GUkFNRV9QT0lOVEVSCkBAIC02NCwxNiArNTcsMTMgQEAKIGlmZGVmIENPTkZJR19DUFVfRlI0NTFfQ09NUElMRQogS0JVSUxEX0NGTEFHUwkrPSAtbWNwdT1mcjQ1MAogS0JVSUxEX0FGTEFHUwkrPSAtbWNwdT1mcjQ1MAotQVNGTEFHUwkJKz0gLW1jcHU9ZnI0NTAKIGVsc2UKIGlmZGVmIENPTkZJR19DUFVfRlI1NTFfQ09NUElMRQogS0JVSUxEX0NGTEFHUwkrPSAtbWNwdT1mcjU1MAogS0JVSUxEX0FGTEFHUwkrPSAtbWNwdT1mcjU1MAotQVNGTEFHUwkJKz0gLW1jcHU9ZnI1NTAKIGVsc2UKIEtCVUlMRF9DRkxBR1MJKz0gLW1jcHU9ZnI0MDAKIEtCVUlMRF9BRkxBR1MJKz0gLW1jcHU9ZnI0MDAKLUFTRkxBR1MJCSs9IC1tY3B1PWZyNDAwCiBlbmRpZgogZW5kaWYKIApAQCAtODMsMTQgKzczLDEyIEBACiBLQlVJTERfQ0ZMQUdTCSs9IC1tbm8tZmRwaWMgLW1ncHItMzIgLW1zb2Z0LWZsb2F0IC1tbm8tbWVkaWEKIEtCVUlMRF9DRkxBR1MJKz0gLWZmaXhlZC1mY2MzIC1mZml4ZWQtY2MzIC1mZml4ZWQtZ3IxNSAtZmZpeGVkLWljYzIKIEtCVUlMRF9BRkxBR1MJKz0gLW1uby1mZHBpYwotQVNGTEFHUwkJKz0gLW1uby1mZHBpYwogCiAjIG1ha2Ugc3VyZSB0aGUgLlMgZmlsZXMgZ2V0IGNvbXBpbGVkIHdpdGggZGVidWcgaW5mbwogIyBhbmQgZGlzYWJsZSBvcHRpbWlzYXRpb25zIHRoYXQgYXJlIHVuaGVscGZ1bCB3aGlsc3QgZGVidWdnaW5nCiBpZmRlZiBDT05GSUdfREVCVUdfSU5GTwogI0tCVUlMRF9DRkxBR1MJKz0gLU8xCiBLQlVJTERfQUZMQUdTCSs9IC1XYSwtLWdkd2FyZjIKLUFTRkxBR1MJCSs9IC1XYSwtLWdkd2FyZjIKIGVuZGlmCiAKIGhlYWQteQkJOj0gYXJjaC9mcnYva2VybmVsL2hlYWQubyBhcmNoL2Zydi9rZXJuZWwvaW5pdF90YXNrLm8KQEAgLTEwNSwxMSArOTMsNSBAQAogSW1hZ2U6IHZtbGludXgKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT1hcmNoL2Zydi9ib290ICRACiAKLWJvb3RzdHJhcDoKLQkkKFEpJChNQUtFQk9PVCkgYm9vdHN0cmFwCi0KIGFyY2hjbGVhbjoKIAkkKFEpJChNQUtFKSAkKGNsZWFuKT1hcmNoL2Zydi9ib290Ci0KLWFyY2hkZXA6IHNjcmlwdHMvbWtkZXAgc3ltbGlua3MKLQkkKFEpJChNQUtFKSAkKGJ1aWxkKT1hcmNoL2Zydi9ib290IGRlcApkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvaW5jbHVkZS9hc20vbG9jYWw2NC5oIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vbG9jYWw2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YzkzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS9sb2NhbDY0LmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsNjQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9sb2NhbDY0LmggYi9hcmNoL2Zydi9rZXJuZWwvbG9jYWw2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YzkzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2Zydi9rZXJuZWwvbG9jYWw2NC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9sb2NhbDY0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL0tjb25maWcgYi9hcmNoL2g4MzAwL0tjb25maWcKaW5kZXggNTNjYzY2OS4uOTg4YjZmZiAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9LY29uZmlnCisrKyBiL2FyY2gvaDgzMDAvS2NvbmZpZwpAQCAtNjIsMTAgKzYyLDYgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKLWNvbmZpZyBHRU5FUklDX1RJTUUKLQlib29sCi0JZGVmYXVsdCB5Ci0KIGNvbmZpZyBHRU5FUklDX0JVRwogICAgICAgICBib29sCiAgICAgICAgIGRlcGVuZHMgb24gQlVHCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2xvY2FsNjQuaCBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vbG9jYWw2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YzkzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2xvY2FsNjQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWw2NC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvaXR1LmMgYi9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci9pdHUuYwppbmRleCA0ODgzYmE3Li5hMmFlNWU5IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci9pdHUuYworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci9pdHUuYwpAQCAtNzMsNyArNzMsNyBAQAogCiAJc2V0dXBfaXJxKElUVUlSUSwgJml0dV9pcnEpOwogCi0JLyogaW5pdGFsaXplIHRpbWVyICovCisJLyogaW5pdGlhbGl6ZSB0aW1lciAqLwogCWN0cmxfb3V0YigwLCBUU1RSKTsKIAljdHJsX291dGIoQ0NMUjAgfCBkaXYsIElUVUJBU0UgKyBUQ1IpOwogCWN0cmxfb3V0YigweDAxLCBJVFVCQVNFICsgVElFUik7CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci90aW1lcjE2LmMgYi9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci90aW1lcjE2LmMKaW5kZXggMDQyZGJiNS4uYWUwZDM4MSAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdGltZXIxNi5jCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RpbWVyMTYuYwpAQCAtNjgsNyArNjgsNyBAQAogCiAJc2V0dXBfaXJxKF8xNklSUSwgJnRpbWVyMTZfaXJxKTsKIAotCS8qIGluaXRhbGl6ZSB0aW1lciAqLworCS8qIGluaXRpYWxpemUgdGltZXIgKi8KIAljdHJsX291dGIoMCwgVFNUUik7CiAJY3RybF9vdXRiKENDTFIwIHwgZGl2LCBfMTZCQVNFICsgVENSKTsKIAljdHJsX291dHcoY250LCBfMTZCQVNFICsgR1JBKTsKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RpbWVyOC5jIGIvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdGltZXI4LmMKaW5kZXggMzhiZTBjYS4uMzk0NmMwZiAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdGltZXI4LmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdGltZXI4LmMKQEAgLTk0LDcgKzk0LDcgQEAKIAljdHJsX2JjbHIoMCwgTVNUUENSTCkKICNlbmRpZgogCi0JLyogaW5pdGFsaXplIHRpbWVyICovCisJLyogaW5pdGlhbGl6ZSB0aW1lciAqLwogCWN0cmxfb3V0dyhjbnQsIF84QkFTRSArIFRDT1JBKTsKIAljdHJsX291dHcoMHgwMDAwLCBfOEJBU0UgKyBfOFRDU1IpOwogCWN0cmxfb3V0dygoQ01JRUF8Q0NMUl9DTUF8Q0tTMikgPDwgOCB8IGRpdiwKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9LY29uZmlnIGIvYXJjaC9pYTY0L0tjb25maWcKaW5kZXggOTU2MTA4Mi4uODcxMWQxMyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L0tjb25maWcKKysrIGIvYXJjaC9pYTY0L0tjb25maWcKQEAgLTgyLDEwICs4Miw2IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCi1jb25maWcgR0VORVJJQ19USU1FCi0JYm9vbAotCWRlZmF1bHQgeQotCiBjb25maWcgR0VORVJJQ19USU1FX1ZTWVNDQUxMCiAJYm9vbAogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L01ha2VmaWxlIGIvYXJjaC9pYTY0L01ha2VmaWxlCmluZGV4IDhhZTBkMjYuLmJlN2JmYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9NYWtlZmlsZQorKysgYi9hcmNoL2lhNjQvTWFrZWZpbGUKQEAgLTIyLDEzICsyMiwxMyBAQAogCiBPQkpDT1BZRkxBR1MJOj0gLS1zdHJpcC1hbGwKIExERkxBR1Nfdm1saW51eAk6PSAtc3RhdGljCi1MREZMQUdTX01PRFVMRQkrPSAtVCAkKHNyY3RyZWUpL2FyY2gvaWE2NC9tb2R1bGUubGRzCi1BRkxBR1NfS0VSTkVMCTo9IC1tY29uc3RhbnQtZ3AKK0tCVUlMRF9MREZMQUdTX01PRFVMRSArPSAtVCAkKHNyY3RyZWUpL2FyY2gvaWE2NC9tb2R1bGUubGRzCitLQlVJTERfQUZMQUdTX0tFUk5FTCA6PSAtbWNvbnN0YW50LWdwCiBFWFRSQQkJOj0KIAogY2ZsYWdzLXkJOj0gLXBpcGUgJChFWFRSQSkgLWZmaXhlZC1yMTMgLW1maXhlZC1yYW5nZT1mMTItZjE1LGYzMi1mMTI3IFwKIAkJICAgLWZhbGlnbi1mdW5jdGlvbnM9MzIgLWZyZW5hbWUtcmVnaXN0ZXJzIC1mbm8tb3B0aW1pemUtc2libGluZy1jYWxscwotQ0ZMQUdTX0tFUk5FTAk6PSAtbWNvbnN0YW50LWdwCitLQlVJTERfQ0ZMQUdTX0tFUk5FTCA6PSAtbWNvbnN0YW50LWdwCiAKIEdBU19TVEFUVVMJPSAkKHNoZWxsICQoc3JjdHJlZSkvYXJjaC9pYTY0L3NjcmlwdHMvY2hlY2stZ2FzICIkKENDKSIgIiQoT0JKRFVNUCkiKQogS0JVSUxEX0NQUEZMQUdTICs9ICQoc2hlbGwgJChzcmN0cmVlKS9hcmNoL2lhNjQvc2NyaXB0cy90b29sY2hhaW4tZmxhZ3MgIiQoQ0MpIiAiJChPQkpEVU1QKSIgIiQoUkVBREVMRikiKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZyBiL2FyY2gvaWE2NC9jb25maWdzL2JpZ3N1cl9kZWZjb25maWcKaW5kZXggMzEyYjEyMC4uYzVmZTIwNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZworKysgYi9hcmNoL2lhNjQvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnCkBAIC0xLDEzNTggKzEsMTE4IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmM1Ci0jIE1vbiBGZWIgMjcgMTY6MTA6NDIgMjAwNgotIwotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfUE9TSVhfTVFVRVVFPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCi1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCi1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfU1RPUF9NQUNISU5FPXkKLQotIwotIyBCbG9jayBsYXllcgotIwotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLQotIwotIyBQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMKLSMKLUNPTkZJR19JQTY0PXkKLUNPTkZJR182NEJJVD15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19TV0lPVExCPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfRUZJPXkKLUNPTkZJR19HRU5FUklDX0lPTUFQPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0RNQV9JU19ETUEzMj15Ci0jIENPTkZJR19JQTY0X0dFTkVSSUMgaXMgbm90IHNldAotQ09ORklHX0lBNjRfRElHPXkKLSMgQ09ORklHX0lBNjRfSFBfWlgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfSFBfWlgxX1NXSU9UTEIgaXMgbm90IHNldAotIyBDT05GSUdfSUE2NF9TR0lfU04yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfSFBfU0lNIGlzIG5vdCBzZXQKLUNPTkZJR19JVEFOSVVNPXkKLSMgQ09ORklHX01DS0lOTEVZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfUEFHRV9TSVpFXzRLQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQTY0X1BBR0VfU0laRV84S0IgaXMgbm90IHNldAotQ09ORklHX0lBNjRfUEFHRV9TSVpFXzE2S0I9eQotIyBDT05GSUdfSUE2NF9QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0Ci1DT05GSUdfUEdUQUJMRV8zPXkKLSMgQ09ORklHX1BHVEFCTEVfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19JQTY0X0JSTF9FTVU9eQotQ09ORklHX0lBNjRfTDFfQ0FDSEVfU0hJRlQ9NgotIyBDT05GSUdfSUE2NF9DWUNMT05FIGlzIG5vdCBzZXQKLUNPTkZJR19JT1NBUElDPXkKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTE3Ci1DT05GSUdfU01QPXkKLUNPTkZJR19OUl9DUFVTPTIKLSMgQ09ORklHX0hPVFBMVUdfQ1BVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1NNVCBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15Ci0jIENPTkZJR19WSVJUVUFMX01FTV9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfSUE2NF9NQ0FfUkVDT1ZFUlkgaXMgbm90IHNldAotQ09ORklHX1BFUkZNT049eQotQ09ORklHX0lBNjRfUEFMSU5GTz15Ci0KLSMKLSMgRmlybXdhcmUgRHJpdmVycwotIwotQ09ORklHX0VGSV9WQVJTPXkKLUNPTkZJR19FRklfUENEUD15Ci1DT05GSUdfQklORk1UX0VMRj15Ci1DT05GSUdfQklORk1UX01JU0M9bQotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgYW5kIEFDUEkKLSMKLUNPTkZJR19QTT15Ci1DT05GSUdfUE1fTEVHQUNZPXkKLSMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBBQ1BJIChBZHZhbmNlZCBDb25maWd1cmF0aW9uIGFuZCBQb3dlciBJbnRlcmZhY2UpIFN1cHBvcnQKLSMKLUNPTkZJR19BQ1BJPXkKIENPTkZJR19BQ1BJX0JVVFRPTj1tCiBDT05GSUdfQUNQSV9GQU49bQogQ09ORklHX0FDUElfUFJPQ0VTU09SPW0KLUNPTkZJR19BQ1BJX1RIRVJNQUw9bQotQ09ORklHX0FDUElfQkxBQ0tMSVNUX1lFQVI9MAotIyBDT05GSUdfQUNQSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQUNQSV9FQz15Ci1DT05GSUdfQUNQSV9QT1dFUj15Ci1DT05GSUdfQUNQSV9TWVNURU09eQotIyBDT05GSUdfQUNQSV9DT05UQUlORVIgaXMgbm90IHNldAotCi0jCi0jIENQVSBGcmVxdWVuY3kgc2NhbGluZwotIwotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotCi0jCi0jIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSkKLSMKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFBDSSBIb3RwbHVnIFN1cHBvcnQKLSMKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQotQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLQotIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotQ09ORklHX1BOUD15Ci0jIENPTkZJR19QTlBfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFByb3RvY29scwotIwotQ09ORklHX1BOUEFDUEk9eQotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD1tCi1DT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KLUNPTkZJR19CTEtfREVWX05CRD1tCi0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT1tCi1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCi1DT05GSUdfSURFPW0KLUNPTkZJR19JREVfTUFYX0hXSUZTPTQKLUNPTkZJR19CTEtfREVWX0lERT1tCi0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCi0jCi0jIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9bQotIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERUNEPW0KLSMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVGTE9QUFk9bQotIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLQotIwotIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCi0jCi0jIENPTkZJR19JREVfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVBOUCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVQQ0k9eQotQ09ORklHX0lERVBDSV9TSEFSRV9JUlE9eQotIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9HRU5FUklDPW0KLSMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKLSMgQ09ORklHX0JMS19ERVZfSURFRE1BX0ZPUkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfSURFRE1BX1BDSV9BVVRPPXkKLSMgQ09ORklHX0lERURNQV9PTkxZRElTSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DWTgyQzY5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9QSUlYPW0KLSMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRE1BPXkKLSMgQ09ORklHX0lERURNQV9JVkIgaXMgbm90IHNldAotQ09ORklHX0lERURNQV9BVVRPPXkKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKLUNPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9DT05TVEFOVFM9eQotQ09ORklHX1NDU0lfTE9HR0lORz15Ci0KLSMKLSMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcwotIwotQ09ORklHX1NDU0lfU1BJX0FUVFJTPW0KLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwotIwotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1FMT0dJQ18xMjgwPXkKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotQ09ORklHX01EPXkKLUNPTkZJR19CTEtfREVWX01EPW0KLUNPTkZJR19NRF9MSU5FQVI9bQotQ09ORklHX01EX1JBSUQwPW0KLUNPTkZJR19NRF9SQUlEMT1tCi1DT05GSUdfTURfUkFJRDEwPW0KLUNPTkZJR19NRF9SQUlENT1tCi1DT05GSUdfTURfUkFJRDY9bQotQ09ORklHX01EX01VTFRJUEFUSD1tCi0jIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfRE09bQotQ09ORklHX0RNX0NSWVBUPW0KLUNPTkZJR19ETV9TTkFQU0hPVD1tCi1DT05GSUdfRE1fTUlSUk9SPW0KLUNPTkZJR19ETV9aRVJPPW0KLSMgQ09ORklHX0RNX01VTFRJUEFUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9TUEkgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9TQVMgaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0RVTU1ZPXkKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0IxMDAwIGlzIG5vdCBzZXQKLQotIwotIyBBUkNuZXQgZGV2aWNlcwotIwotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCi1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1BDST15Ci0jIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ER1JTIGlzIG5vdCBzZXQKLUNPTkZJR19FRVBSTzEwMD15Ci0jIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgVGVsZXBob255IFN1cHBvcnQKLSMKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRT15Ci1DT05GSUdfTU9VU0VfUFMyPXkKLSMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19JODA0Mj15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9BQ1BJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQotQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCi0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotQ09ORklHX0VGSV9SVEM9eQotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCi1DT05GSUdfQUdQPW0KIENPTkZJR19BR1BfSTQ2MD1tCi1DT05GSUdfRFJNPW0KLSMgQ09ORklHX0RSTV9UREZYIGlzIG5vdCBzZXQKLUNPTkZJR19EUk1fUjEyOD1tCi0jIENPTkZJR19EUk1fUkFERU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTV9NR0EgaXMgbm90IHNldAotIyBDT05GSUdfRFJNX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk1fVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTV9TQVZBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTkdDSEVDS19USU1FUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCi1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLUNPTkZJR19JMkNfQUxHT0JJVD15Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDeDIwMF9BQ0IgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX1gxMjA1X0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotCi0jCi0jIERhbGxhcydzIDEtd2lyZSBidXMKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKLSMKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi1DT05GSUdfVkdBX0NPTlNPTEU9eQotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotCi0jCi0jIFNvdW5kCi0jCi1DT05GSUdfU09VTkQ9bQotCi0jCi0jIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQotIwotQ09ORklHX1NORD1tCi1DT05GSUdfU05EX1RJTUVSPW0KLUNPTkZJR19TTkRfUENNPW0KLUNPTkZJR19TTkRfSFdERVA9bQotQ09ORklHX1NORF9SQVdNSURJPW0KLUNPTkZJR19TTkRfU0VRVUVOQ0VSPW0KLSMgQ09ORklHX1NORF9TRVFfRFVNTVkgaXMgbm90IHNldAotQ09ORklHX1NORF9PU1NFTVVMPXkKLUNPTkZJR19TTkRfTUlYRVJfT1NTPW0KLUNPTkZJR19TTkRfUENNX09TUz1tCi0jIENPTkZJR19TTkRfU0VRVUVOQ0VSX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgR2VuZXJpYyBkZXZpY2VzCi0jCi1DT05GSUdfU05EX09QTDNfTElCPW0KLUNPTkZJR19TTkRfQUM5N19DT0RFQz1tCi1DT05GSUdfU05EX0FDOTdfQlVTPW0KLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklSTUlESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIGRldmljZXMKLSMKLSMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMSTU0NTEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BWlQzMzI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAotQ09ORklHX1NORF9DUzQyODE9bQotIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU1VMTBLMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VOUzEzNzAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VOUzEzNzEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VTMTkzOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRVMxOTY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9GTTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSUNFMTcxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5URUw4WDAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lOVEVMOFgwTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfS09SRzEyMTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01BRVNUUk8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSVhBUlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX05NMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9QQ1hIUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FMzIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUU5NjUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TT05JQ1ZJQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WSUE4MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WSUE4MlhYX01PREVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgZGV2aWNlcwotIwotIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgT3BlbiBTb3VuZCBTeXN0ZW0KLSMKLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIwotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0I9bQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCi1DT05GSUdfVVNCX0RFVklDRUZTPXkKLSMgQ09ORklHX1VTQl9CQU5EV0lEVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAotQ09ORklHX1VTQl9VSENJX0hDRD1tCi0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX09CU09MRVRFX09TU19VU0JfRFJJVkVSIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfQUNNPW0KLUNPTkZJR19VU0JfUFJJTlRFUj1tCi0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKLUNPTkZJR19VU0JfU1RPUkFHRT1tCi0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9bQotQ09ORklHX1VTQl9ISURJTlBVVD15Ci0jIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0hJRERFVj15Ci0KLSMKLSMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BSVBURUsgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dBQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VHQUxBWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVmlkZW80TGludXggc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBNdWx0aW1lZGlhIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj15Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUS0lUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUU0VSVk8gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5maW5pQmFuZCBzdXBwb3J0Ci0jCi0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLQotIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykKLSMKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLUNPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfWEZTX0ZTPXkKLUNPTkZJR19YRlNfRVhQT1JUPXkKLUNPTkZJR19YRlNfUVVPVEE9eQotQ09ORklHX1hGU19TRUNVUklUWT15Ci1DT05GSUdfWEZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX1FVT1RBQ1RMPXkKLUNPTkZJR19ETk9USUZZPXkKLUNPTkZJR19BVVRPRlNfRlM9bQorQ09ORklHX0FHUD1tCiBDT05GSUdfQVVUT0ZTNF9GUz1tCi0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCitDT05GSUdfQVVUT0ZTX0ZTPW0KK0NPTkZJR19CSU5GTVRfTUlTQz1tCitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KK0NPTkZJR19CTEtfREVWX0RNPW0KK0NPTkZJR19CTEtfREVWX0dFTkVSSUM9bQorQ09ORklHX0JMS19ERVZfSURFQ0Q9bQorQ09ORklHX0JMS19ERVZfTE9PUD1tCitDT05GSUdfQkxLX0RFVl9NRD1tCitDT05GSUdfQkxLX0RFVl9OQkQ9bQorQ09ORklHX0JMS19ERVZfUElJWD1tCitDT05GSUdfQkxLX0RFVl9SQU09bQorQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NJRlM9bQorQ09ORklHX0NJRlNfUE9TSVg9eQorQ09ORklHX0NJRlNfU1RBVFM9eQorQ09ORklHX0NJRlNfWEFUVFI9eQorQ09ORklHX0NSWVBUT19ERVM9eQorQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfREVCVUdfTVVURVhFUz15CitDT05GSUdfRE1fQ1JZUFQ9bQorQ09ORklHX0RNX01JUlJPUj1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX1pFUk89bQorQ09ORklHX0RSTT1tCitDT05GSUdfRFJNX1IxMjg9bQorQ09ORklHX0RVTU1ZPXkKK0NPTkZJR19FRklfUEFSVElUSU9OPXkKK0NPTkZJR19FRklfUlRDPXkKK0NPTkZJR19FRklfVkFSUz15CitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19FWFQyX0ZTPXkKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19IVUdFVExCRlM9eQorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JQTY0X0RJRz15CitDT05GSUdfSUE2NF9QQUxJTkZPPXkKK0NPTkZJR19JREU9bQorQ09ORklHX0lORVQ9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogQ09ORklHX0lTTzk2NjBfRlM9bQogQ09ORklHX0pPTElFVD15Ci0jIENPTkZJR19aSVNPRlMgaXMgbm90IHNldAotQ09ORklHX1VERl9GUz1tCi1DT05GSUdfVURGX05MUz15Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15Ci0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotQ09ORklHX0hVR0VUTEJGUz15Ci1DT05GSUdfSFVHRVRMQl9QQUdFPXkKLUNPTkZJR19SQU1GUz15Ci0jIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfTURfTElORUFSPW0KK0NPTkZJR19NRF9NVUxUSVBBVEg9bQorQ09ORklHX01EX1JBSUQwPW0KK0NPTkZJR19NRF9SQUlEMTA9bQorQ09ORklHX01EX1JBSUQxPW0KK0NPTkZJR19NRD15CitDT05GSUdfTUlJPXkKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX05FVF9QQ0k9eQorQ09ORklHX05FVD15CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WND15CiBDT05GSUdfTkZTX0ZTPW0KIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTRD1tCi1DT05GSUdfTkZTRF9WMz15Ci0jIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTRF9WND15Ci1DT05GSUdfTkZTRF9UQ1A9eQotQ09ORklHX0xPQ0tEPW0KLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfRVhQT1JURlM9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz1tCi1DT05GSUdfU1VOUlBDX0dTUz1tCi1DT05GSUdfUlBDU0VDX0dTU19LUkI1PW0KLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19DSUZTPW0KLUNPTkZJR19DSUZTX1NUQVRTPXkKLSMgQ09ORklHX0NJRlNfU1RBVFMyIGlzIG5vdCBzZXQKLUNPTkZJR19DSUZTX1hBVFRSPXkKLUNPTkZJR19DSUZTX1BPU0lYPXkKLSMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfU0dJX1BBUlRJVElPTj15Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19FRklfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogQ09ORklHX05MU19VVEY4PW0KLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlE9eQotCi0jCi0jIEluc3RydW1lbnRhdGlvbiBTdXBwb3J0Ci0jCi1DT05GSUdfUFJPRklMSU5HPXkKK0NPTkZJR19OUl9DUFVTPTIKIENPTkZJR19PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX01BR0lDX1NZU1JRPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQotQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQTY0X0dSQU5VTEVfMTZNQiBpcyBub3Qgc2V0Ci1DT05GSUdfSUE2NF9HUkFOVUxFXzY0TUI9eQotIyBDT05GSUdfSUE2NF9QUklOVF9IQVpBUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RJU0FCTEVfVkhQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQTY0X0RFQlVHX0NNUFhDSEcgaXMgbm90IHNldAotIyBDT05GSUdfSUE2NF9ERUJVR19JUlEgaXMgbm90IHNldAotQ09ORklHX1NZU1ZJUENfQ09NUEFUPXkKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLUNPTkZJR19DUllQVE89eQotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CitDT05GSUdfUEVSRk1PTj15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9GSUxJTkc9eQorQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKK0NPTkZJR19TQ1NJX0xPR0dJTkc9eQorQ09ORklHX1NDU0lfUUxPR0lDXzEyODA9eQorQ09ORklHX1NDU0lfU1BJX0FUVFJTPW0KK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0dJX1BBUlRJVElPTj15CitDT05GSUdfU01QPXkKK0NPTkZJR19TTkRfQ1M0MjgxPW0KK0NPTkZJR19TTkQ9bQorQ09ORklHX1NORF9NSVhFUl9PU1M9bQorQ09ORklHX1NORF9QQ01fT1NTPW0KK0NPTkZJR19TTkRfU0VRVUVOQ0VSPW0KK0NPTkZJR19TT1VORD1tCitDT05GSUdfU1lTVklQQz15CitDT05GSUdfVE1QRlM9eQorQ09ORklHX1VERl9GUz1tCitDT05GSUdfVU5JWD15CitDT05GSUdfVVNCX0FDTT1tCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfSElEREVWPXkKK0NPTkZJR19VU0I9bQorQ09ORklHX1VTQl9NT049bQorQ09ORklHX1VTQl9QUklOVEVSPW0KK0NPTkZJR19VU0JfU1RPUkFHRT1tCitDT05GSUdfVVNCX1VIQ0lfSENEPW0KK0NPTkZJR19WRkFUX0ZTPXkKKyMgQ09ORklHX1ZJUlRVQUxfTUVNX01BUCBpcyBub3Qgc2V0CitDT05GSUdfWEZTX0ZTPXkKK0NPTkZJR19YRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19YRlNfUVVPVEE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWcgYi9hcmNoL2lhNjQvY29uZmlncy9nZW5lcmljX2RlZmNvbmZpZwppbmRleCA2YTRjYzUwLi4wMWJhNTMwIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvY29uZmlncy9nZW5lcmljX2RlZmNvbmZpZworKysgYi9hcmNoL2lhNjQvY29uZmlncy9nZW5lcmljX2RlZmNvbmZpZwpAQCAtMSwxNDU1ICsxLDEzMyBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4LXJjNwotIyBNb24gRGVjICA4IDA4OjEyOjA3IDIwMDgKLSMKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci1DT05GSUdfUE9TSVhfTVFVRVVFPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0yMAotQ09ORklHX0NHUk9VUFM9eQotIyBDT05GSUdfQ0dST1VQX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBfRlJFRVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBfREVWSUNFIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVTRVRTPXkKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUF9DUFVBQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFU09VUkNFX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19QUk9DX1BJRF9DUFVTRVQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX05BTUVTUEFDRVM9eQotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotQ09ORklHX0tBTExTWU1TX0FMTD15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLUNPTkZJR19TVE9QX01BQ0hJTkU9eQotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotQ09ORklHX0JMT0NLX0NPTVBBVD15Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcwotIwotQ09ORklHX0lBNjQ9eQotQ09ORklHXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfUVVJQ0tMSVNUPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX1NXSU9UTEI9eQotQ09ORklHX0lPTU1VX0hFTFBFUj15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUE9eQotQ09ORklHX0RNST15Ci1DT05GSUdfRUZJPXkKLUNPTkZJR19HRU5FUklDX0lPTUFQPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0lBNjRfVU5DQUNIRURfQUxMT0NBVE9SPXkKLUNPTkZJR19BVURJVF9BUkNIPXkKLSMgQ09ORklHX1BBUkFWSVJUX0dVRVNUIGlzIG5vdCBzZXQKLUNPTkZJR19JQTY0X0dFTkVSSUM9eQotIyBDT05GSUdfSUE2NF9ESUcgaXMgbm90IHNldAotIyBDT05GSUdfSUE2NF9ESUdfVlREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfSFBfWlgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfSFBfWlgxX1NXSU9UTEIgaXMgbm90IHNldAotIyBDT05GSUdfSUE2NF9TR0lfU04yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfU0dJX1VWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfSFBfU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfWEVOX0dVRVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lUQU5JVU0gaXMgbm90IHNldAotQ09ORklHX01DS0lOTEVZPXkKLSMgQ09ORklHX0lBNjRfUEFHRV9TSVpFXzRLQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQTY0X1BBR0VfU0laRV84S0IgaXMgbm90IHNldAotIyBDT05GSUdfSUE2NF9QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0Ci1DT05GSUdfSUE2NF9QQUdFX1NJWkVfNjRLQj15Ci1DT05GSUdfUEdUQUJMRV8zPXkKLSMgQ09ORklHX1BHVEFCTEVfNCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAotQ09ORklHX0lBNjRfTDFfQ0FDSEVfU0hJRlQ9NwotQ09ORklHX0lBNjRfQ1lDTE9ORT15Ci1DT05GSUdfSU9TQVBJQz15Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xNwotIyBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORyBpcyBub3Qgc2V0Ci1DT05GSUdfU01QPXkKLUNPTkZJR19OUl9DUFVTPTQwOTYKLUNPTkZJR19IT1RQTFVHX0NQVT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQotIyBDT05GSUdfU0NIRURfU01UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUk1JVF9CU1BfUkVNT1ZFIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci0jIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRElTQ09OVElHTUVNX01BTlVBTD15Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19ESVNDT05USUdNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19ORUVEX01VTFRJUExFX05PREVTPXkKLUNPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEU9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKLUNPTkZJR19QSFlTX0FERFJfVF82NEJJVD15Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19OUl9RVUlDSz0xCi1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15Ci1DT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9ESVNDT05USUdNRU1fREVGQVVMVD15Ci1DT05GSUdfTlVNQT15Ci1DT05GSUdfTk9ERVNfU0hJRlQ9MTAKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfVklSVFVBTF9NRU1fTUFQPXkKLUNPTkZJR19IT0xFU19JTl9aT05FPXkKLUNPTkZJR19IQVZFX0FSQ0hfRUFSTFlfUEZOX1RPX05JRD15Ci1DT05GSUdfSEFWRV9BUkNIX05PREVEQVRBX0VYVEVOU0lPTj15Ci1DT05GSUdfQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UPXkKLUNPTkZJR19JQTY0X01DQV9SRUNPVkVSWT15Ci1DT05GSUdfUEVSRk1PTj15Ci1DT05GSUdfSUE2NF9QQUxJTkZPPXkKLSMgQ09ORklHX0lBNjRfTUNfRVJSX0lOSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0dJX1NOPXkKLSMgQ09ORklHX0lBNjRfRVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfSFBfQU1MX05GVyBpcyBub3Qgc2V0Ci0KLSMKLSMgU04gRGV2aWNlcwotIwotQ09ORklHX1NHSV9JT0MzPW0KLUNPTkZJR19LRVhFQz15Ci1DT05GSUdfQ1JBU0hfRFVNUD15Ci0KLSMKLSMgRmlybXdhcmUgRHJpdmVycwotIwotIyBDT05GSUdfRklSTVdBUkVfTUVNTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19FRklfVkFSUz15Ci1DT05GSUdfRUZJX1BDRFA9eQotQ09ORklHX0RNSUlEPXkKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX01JU0M9bQotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgYW5kIEFDUEkgb3B0aW9ucwotIwotQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19BQ1BJPXkKLUNPTkZJR19BQ1BJX1BST0NGUz15Ci1DT05GSUdfQUNQSV9QUk9DRlNfUE9XRVI9eQotQ09ORklHX0FDUElfU1lTRlNfUE9XRVI9eQotQ09ORklHX0FDUElfUFJPQ19FVkVOVD15CiBDT05GSUdfQUNQSV9CVVRUT049bQotQ09ORklHX0FDUElfRkFOPW0KLUNPTkZJR19BQ1BJX0RPQ0s9eQotQ09ORklHX0FDUElfUFJPQ0VTU09SPW0KLUNPTkZJR19BQ1BJX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19BQ1BJX1RIRVJNQUw9bQotQ09ORklHX0FDUElfTlVNQT15Ci0jIENPTkZJR19BQ1BJX0NVU1RPTV9EU0RUIGlzIG5vdCBzZXQKLUNPTkZJR19BQ1BJX0JMQUNLTElTVF9ZRUFSPTAKLSMgQ09ORklHX0FDUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQUNQSV9QQ0lfU0xPVCBpcyBub3Qgc2V0Ci1DT05GSUdfQUNQSV9TWVNURU09eQogQ09ORklHX0FDUElfQ09OVEFJTkVSPW0KLQotIwotIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKLSMKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEpCi0jCi1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLUNPTkZJR19QQ0lfTVNJPXkKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVR19QQ0k9bQotIyBDT05GSUdfSE9UUExVR19QQ0lfRkFLRSBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVR19QQ0lfQUNQST1tCi0jIENPTkZJR19IT1RQTFVHX1BDSV9BQ1BJX0lCTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSV9DUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJX1NIUEMgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0lfU0dJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci1DT05GSUdfRE1BUj15Ci1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLUNPTkZJR19BUlBEPXkKLUNPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLUNPTkZJR19JTkVUX0xSTz1tCi1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLUNPTkZJR19DT05ORUNUT1I9eQotQ09ORklHX1BST0NfRVZFTlRTPXkKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19QTlA9eQotIyBDT05GSUdfUE5QX0RFQlVHX01FU1NBR0VTIGlzIG5vdCBzZXQKLQotIwotIyBQcm90b2NvbHMKLSMKLUNPTkZJR19QTlBBQ1BJPXkKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD1tCi1DT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KLUNPTkZJR19CTEtfREVWX05CRD1tCi0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci1DT05GSUdfU0dJX0lPQzQ9eQotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0dJX1hQPW0KLSMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLUNPTkZJR19JREU9eQotCi0jCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKLSMKLUNPTkZJR19JREVfVElNSU5HUz15Ci1DT05GSUdfSURFX0FUQVBJPXkKLSMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0lERV9HRD15Ci1DT05GSUdfSURFX0dEX0FUQT15Ci0jIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFQ0Q9eQotQ09ORklHX0JMS19ERVZfSURFQ0RfVkVSQk9TRV9FUlJPUlM9eQotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERVNDU0k9bQotIyBDT05GSUdfQkxLX0RFVl9JREVBQ1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfUFJPQ19GUz15Ci0KLSMKLSMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwotIwotIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVBOUCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKLQotIwotIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKLSMKLUNPTkZJR19CTEtfREVWX0lERVBDST15Ci1DT05GSUdfSURFUENJX1BDSUJVU19PUkRFUj15Ci0jIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0dFTkVSSUM9eQotIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQotIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfQ01ENjRYPXkKLSMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUElJWD15Ci0jIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9TR0lJT0M0PXkKLSMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRE1BPXkKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9ORVRMSU5LPXkKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCi1DT05GSUdfQkxLX0RFVl9TRD15Ci1DT05GSUdfQ0hSX0RFVl9TVD1tCi0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfU1I9bQotIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAotQ09ORklHX0NIUl9ERVZfU0c9bQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotQ09ORklHX1NDU0lfU1BJX0FUVFJTPXkKLUNPTkZJR19TQ1NJX0ZDX0FUVFJTPXkKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfU0FTX0FUVFJTPXkKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1NZTTUzQzhYWF8yPXkKLUNPTkZJR19TQ1NJX1NZTTUzQzhYWF9ETUFfQUREUkVTU0lOR19NT0RFPTEKLUNPTkZJR19TQ1NJX1NZTTUzQzhYWF9ERUZBVUxUX1RBR1M9MTYKLUNPTkZJR19TQ1NJX1NZTTUzQzhYWF9NQVhfVEFHUz02NAotQ09ORklHX1NDU0lfU1lNNTNDOFhYX01NSU89eQotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUUxPR0lDXzEyODA9eQotIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBPXkKLUNPTkZJR19BVEFfTk9OU1RBTkRBUkQ9eQotQ09ORklHX0FUQV9BQ1BJPXkKLUNPTkZJR19TQVRBX1BNUD15Ci0jIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX1NGRj15Ci0jIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX1BJSVg9eQotIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKLUNPTkZJR19TQVRBX1ZJVEVTU0U9eQotIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FDUEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKLUNPTkZJR19NRD15Ci1DT05GSUdfQkxLX0RFVl9NRD1tCi1DT05GSUdfTURfTElORUFSPW0KLUNPTkZJR19NRF9SQUlEMD1tCi1DT05GSUdfTURfUkFJRDE9bQotIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EX1JBSUQ0NTYgaXMgbm90IHNldAotQ09ORklHX01EX01VTFRJUEFUSD1tCi0jIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfRE09bQotIyBDT05GSUdfRE1fREVCVUcgaXMgbm90IHNldAotQ09ORklHX0RNX0NSWVBUPW0KLUNPTkZJR19ETV9TTkFQU0hPVD1tCi1DT05GSUdfRE1fTUlSUk9SPW0KLUNPTkZJR19ETV9aRVJPPW0KLUNPTkZJR19ETV9NVUxUSVBBVEg9bQotIyBDT05GSUdfRE1fREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfRE1fVUVWRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19GVVNJT049eQotQ09ORklHX0ZVU0lPTl9TUEk9eQotQ09ORklHX0ZVU0lPTl9GQz1tCi1DT05GSUdfRlVTSU9OX1NBUz15Ci1DT05GSUdfRlVTSU9OX01BWF9TR0U9MTI4Ci0jIENPTkZJR19GVVNJT05fQ1RMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9MT0dHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCi0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0RVTU1ZPW0KLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST1tCi0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfVFVMSVA9eQotIyBDT05GSUdfREUyMTA0WCBpcyBub3Qgc2V0Ci1DT05GSUdfVFVMSVA9bQotIyBDT05GSUdfVFVMSVBfTVdJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTElQX01NSU8gaXMgbm90IHNldAotIyBDT05GSUdfVFVMSVBfTkFQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERTRYNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU5CT05EXzg0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETTkxMDIgaXMgbm90IHNldAotIyBDT05GSUdfVUxJNTI2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfUENJPXkKLSMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAotIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKLUNPTkZJR19FRVBSTzEwMD1tCi1DT05GSUdfRTEwMD1tCi0jIENPTkZJR19GRUFMTlggaXMgbm90IHNldAotIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAotIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLUNPTkZJR19FMTAwMD15Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19JR0I9eQotIyBDT05GSUdfSUdCX0xSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19USUdPTjM9eQotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAotIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUQ09OU09MRT15Ci0jIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgbm90IHNldAotQ09ORklHX05FVFBPTEw9eQotIyBDT05GSUdfTkVUUE9MTF9UUkFQIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQotQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFPXkKLUNPTkZJR19NT1VTRV9QUzI9eQotQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKLUNPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKLUNPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKLUNPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQotQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKLSMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fSTgwNDI9eQotIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotQ09ORklHX0dBTUVQT1JUPW0KLSMgQ09ORklHX0dBTUVQT1JUX05TNTU4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUX0w0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUX0VNVTEwSzEgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlRfRk04MDEgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci1DT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEPXkKLSMgQ09ORklHX0NPTVBVVE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST0NLRVRQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NZQ0xBREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RJR0lFUENBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PWEFfSU5URUxMSU8gaXMgbm90IHNldAotIyBDT05GSUdfTU9YQV9TTUFSVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5DTElOS01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTkNMSU5LX0dUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05fSERMQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SSVNDT004IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQRUNJQUxJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SSU8gaXMgbm90IHNldAotIyBDT05GSUdfU1RBTERSViBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotQ09ORklHX1NHSV9TTlNDPXkKLUNPTkZJR19TR0lfVElPQ1g9eQotQ09ORklHX1NHSV9NQkNTPW0KLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQotQ09ORklHX1NFUklBTF84MjUwX1BOUD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NgotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKLUNPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX1NHSV9MMV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9TR0lfSU9DND15Ci0jIENPTkZJR19TRVJJQUxfU0dJX0lPQzMgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotQ09ORklHX0VGSV9SVEM9eQotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotQ09ORklHX1JBV19EUklWRVI9bQotQ09ORklHX01BWF9SQVdfREVWUz0yNTYKLUNPTkZJR19IUEVUPXkKLUNPTkZJR19IUEVUX01NQVA9eQotIyBDT05GSUdfSEFOR0NIRUNLX1RJTUVSIGlzIG5vdCBzZXQKLUNPTkZJR19NTVRJTUVSPXkKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci1DT05GSUdfUE9XRVJfU1VQUExZPXkKLSMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QREFfUE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkFUVEVSWV9EUzI3NjAgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTElTM0xWMDJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotQ09ORklHX1RIRVJNQUw9bQotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLUNPTkZJR19EQUI9eQotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotQ09ORklHX0FHUD1tCi1DT05GSUdfQUdQX0k0NjA9bQorQ09ORklHX0FDUElfRE9DSz15CitDT05GSUdfQUNQSV9GQU49bQorQ09ORklHX0FDUElfUFJPQ0VTU09SPW0KK0NPTkZJR19BQ1BJX1BST0NGUz15CiBDT05GSUdfQUdQX0hQX1pYMT1tCitDT05GSUdfQUdQX0k0NjA9bQorQ09ORklHX0FHUD1tCiBDT05GSUdfQUdQX1NHSV9USU9DQT1tCitDT05GSUdfQVJQRD15CitDT05GSUdfQVRBX1BJSVg9eQorQ09ORklHX0FUQT15CitDT05GSUdfQVVUT0ZTNF9GUz1tCitDT05GSUdfQVVUT0ZTX0ZTPW0KK0NPTkZJR19CSU5GTVRfTUlTQz1tCisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9DTUQ2NFg9eQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCitDT05GSUdfQkxLX0RFVl9ETT1tCitDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKK0NPTkZJR19CTEtfREVWX0lERUNEPXkKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfQkxLX0RFVl9MT09QPW0KK0NPTkZJR19CTEtfREVWX01EPW0KK0NPTkZJR19CTEtfREVWX05CRD1tCitDT05GSUdfQkxLX0RFVl9QSUlYPXkKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQkxLX0RFVl9TR0lJT0M0PXkKK0NPTkZJR19CTEtfREVWX1NSPW0KK0NPTkZJR19DR1JPVVBTPXkKK0NPTkZJR19DSFJfREVWX1NHPW0KK0NPTkZJR19DSFJfREVWX1NUPW0KK0NPTkZJR19DSUZTPW0KK0NPTkZJR19DT05ORUNUT1I9eQorQ09ORklHX0NQVVNFVFM9eQorQ09ORklHX0NSQVNIX0RVTVA9eQorQ09ORklHX0NSQ19UMTBESUY9eQorIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0NSWVBUT19QQ0JDPW0KK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorQ09ORklHX0RNX0NSWVBUPW0KK0NPTkZJR19ETV9NSVJST1I9bQorQ09ORklHX0RNX01VTFRJUEFUSD1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX1pFUk89bQogQ09ORklHX0RSTT1tCi1DT05GSUdfRFJNX1RERlg9bQorQ09ORklHX0RSTV9NR0E9bQogQ09ORklHX0RSTV9SMTI4PW0KIENPTkZJR19EUk1fUkFERU9OPW0KLUNPTkZJR19EUk1fTUdBPW0KIENPTkZJR19EUk1fU0lTPW0KLSMgQ09ORklHX0RSTV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfRFJNX1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi1DT05GSUdfVkdBX0NPTlNPTEU9eQotIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci1DT05GSUdfU09VTkQ9bQotQ09ORklHX1NPVU5EX09TU19DT1JFPXkKLUNPTkZJR19TTkQ9bQotQ09ORklHX1NORF9USU1FUj1tCi1DT05GSUdfU05EX1BDTT1tCi1DT05GSUdfU05EX0hXREVQPW0KLUNPTkZJR19TTkRfUkFXTUlEST1tCi1DT05GSUdfU05EX1NFUVVFTkNFUj1tCi1DT05GSUdfU05EX1NFUV9EVU1NWT1tCi1DT05GSUdfU05EX09TU0VNVUw9eQotQ09ORklHX1NORF9NSVhFUl9PU1M9bQotQ09ORklHX1NORF9QQ01fT1NTPW0KLUNPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKLUNPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15Ci0jIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQotQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15Ci1DT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLPXkKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1ZNQVNURVI9eQotQ09ORklHX1NORF9NUFU0MDFfVUFSVD1tCi1DT05GSUdfU05EX09QTDNfTElCPW0KLUNPTkZJR19TTkRfQUM5N19DT0RFQz1tCi1DT05GSUdfU05EX0RSSVZFUlM9eQotQ09ORklHX1NORF9EVU1NWT1tCi1DT05GSUdfU05EX1ZJUk1JREk9bQotQ09ORklHX1NORF9NVFBBVj1tCi1DT05GSUdfU05EX1NFUklBTF9VMTY1NTA9bQotQ09ORklHX1NORF9NUFU0MDE9bQotIyBDT05GSUdfU05EX0FDOTdfUE9XRVJfU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1BDST15Ci0jIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTFMzMDAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMSTU0NTEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVzIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FaVDMzMjggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0JUODdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfQ1M0MjgxPW0KLUNPTkZJR19TTkRfQ1M0NlhYPW0KLUNPTkZJR19TTkRfQ1M0NlhYX05FV19EU1A9eQotIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTEFZTEEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREFSTEEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfR0lOQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9MQVlMQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NT05BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSUEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VDSE8zRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR09JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPREogaXMgbm90IHNldAotQ09ORklHX1NORF9FTVUxMEsxPW0KLSMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRVMxOTM4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAotQ09ORklHX1NORF9GTTgwMT1tCi0jIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSElGSUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfVVNCPXkKLSMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1VTQl9DQUlBUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKLUNPTkZJR19BQzk3X0JVUz1tCi1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9bQotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLUNPTkZJR19ISURfQ09NUEFUPXkKLUNPTkZJR19ISURfQTRURUNIPW0KLUNPTkZJR19ISURfQVBQTEU9bQotQ09ORklHX0hJRF9CRUxLSU49bQotQ09ORklHX0hJRF9CUklHSFQ9bQotQ09ORklHX0hJRF9DSEVSUlk9bQotQ09ORklHX0hJRF9DSElDT05ZPW0KLUNPTkZJR19ISURfQ1lQUkVTUz1tCi1DT05GSUdfSElEX0RFTEw9bQotQ09ORklHX0hJRF9FWktFWT1tCitDT05GSUdfRFJNX1RERlg9bQorQ09ORklHX0RVTU1ZPW0KK0NPTkZJR19FMTAwMD15CitDT05GSUdfRTEwMD1tCitDT05GSUdfRUZJX1BBUlRJVElPTj15CitDT05GSUdfRUZJX1JUQz15CitDT05GSUdfRUZJX1ZBUlM9eQorQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19GVVNJT05fRkM9bQorQ09ORklHX0ZVU0lPTl9TQVM9eQorQ09ORklHX0ZVU0lPTl9TUEk9eQorQ09ORklHX0ZVU0lPTj15CitDT05GSUdfR0FNRVBPUlQ9bQogQ09ORklHX0hJRF9HWVJBVElPTj1tCi1DT05GSUdfSElEX0xPR0lURUNIPW0KLSMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfTUlDUk9TT0ZUPW0KLUNPTkZJR19ISURfTU9OVEVSRVk9bQogQ09ORklHX0hJRF9QQU5USEVSTE9SRD1tCi0jIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1BFVEFMWU5YPW0KIENPTkZJR19ISURfU0FNU1VORz1tCiBDT05GSUdfSElEX1NPTlk9bQogQ09ORklHX0hJRF9TVU5QTFVTPW0KLSMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci1DT05GSUdfVVNCPW0KLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKLUNPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049eQotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VIQ0lfSENEPW0KLSMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0hDRD1tCi0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLUNPTkZJR19VU0JfVUhDSV9IQ0Q9bQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKLSMKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOwotIwotCi0jCi0jIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCi0jCi1DT05GSUdfVVNCX1NUT1JBR0U9bQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotQ09ORklHX0lORklOSUJBTkQ9bQotIyBDT05GSUdfSU5GSU5JQkFORF9VU0VSX01BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EX1VTRVJfQUNDRVNTIGlzIG5vdCBzZXQKLUNPTkZJR19JTkZJTklCQU5EX0FERFJfVFJBTlM9eQotQ09ORklHX0lORklOSUJBTkRfTVRIQ0E9bQotQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUc9eQotIyBDT05GSUdfSU5GSU5JQkFORF9JUEFUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EX0FNU08xMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EX05FUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVR19DUFU9eQorQ09ORklHX0hPVFBMVUdfUENJX0FDUEk9bQorQ09ORklHX0hPVFBMVUdfUENJPW0KK0NPTkZJR19IUEVUPXkKK0NPTkZJR19IVUdFVExCRlM9eQorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKK0NPTkZJR19JQTY0X0NZQ0xPTkU9eQorQ09ORklHX0lBNjRfTUNBX1JFQ09WRVJZPXkKK0NPTkZJR19JQTY0X1BBR0VfU0laRV82NEtCPXkKK0NPTkZJR19JQTY0X1BBTElORk89eQorQ09ORklHX0lERT15CitDT05GSUdfSUdCPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSU5FVD15CiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQj1tCi0jIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0NNIGlzIG5vdCBzZXQKLUNPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHPXkKLSMgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUdfREFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EX1NSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EX0lTRVIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotQ09ORklHX1NUQUdJTkdfRVhDTFVERV9CVUlMRD15Ci0KLSMKLSMgSFAgU2ltdWxhdG9yIGRyaXZlcnMKLSMKLSMgQ09ORklHX0hQX1NJTUVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUF9TSU1TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfSFBfU0lNU0NTSSBpcyBub3Qgc2V0Ci1DT05GSUdfTVNQRUM9bQotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDJfRlNfWEFUVFI9eQotQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotQ09ORklHX1JFSVNFUkZTX0ZTPXkKLSMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0Ci1DT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfWEZTX0ZTPXkKLSMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5GSU5JQkFORD1tCitDT05GSUdfSU5GSU5JQkFORF9NVEhDQT1tCiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19BVVRPRlNfRlM9bQotQ09ORklHX0FVVE9GUzRfRlM9bQotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIworQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKIENPTkZJR19JU085NjYwX0ZTPW0KIENPTkZJR19KT0xJRVQ9eQotIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19VREZfRlM9bQotQ09ORklHX1VERl9OTFM9eQotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotQ09ORklHX05URlNfRlM9bQotIyBDT05GSUdfTlRGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX1JXIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1ZNQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19IVUdFVExCRlM9eQotQ09ORklHX0hVR0VUTEJfUEFHRT15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorQ09ORklHX0tFWEVDPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTIwCitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX01DS0lOTEVZPXkKK0NPTkZJR19NRF9MSU5FQVI9bQorQ09ORklHX01EX01VTFRJUEFUSD1tCitDT05GSUdfTURfUkFJRDA9bQorQ09ORklHX01EX1JBSUQxPW0KK0NPTkZJR19NRD15CitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVkVSU0lPTlM9eQorQ09ORklHX01TUEVDPW0KK0NPTkZJR19ORVRDT05TT0xFPXkKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX05FVF9QQ0k9eQorQ09ORklHX05FVF9UVUxJUD15CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WND15CiBDT05GSUdfTkZTX0ZTPW0KIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKLUNPTkZJR19ORlNEPW0KLUNPTkZJR19ORlNEX1YzPXkKLSMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEX1Y0PXkKLUNPTkZJR19MT0NLRD1tCi1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX0VYUE9SVEZTPW0KLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9bQotQ09ORklHX1NVTlJQQ19HU1M9bQotQ09ORklHX1NVTlJQQ19YUFJUX1JETUE9bQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9bQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci1DT05GSUdfU01CX0ZTPW0KLUNPTkZJR19TTUJfTkxTX0RFRkFVTFQ9eQotQ09ORklHX1NNQl9OTFNfUkVNT1RFPSJjcDQzNyIKLUNPTkZJR19DSUZTPW0KLSMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX1NHSV9QQVJUSVRJT049eQotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfRUZJX1BBUlRJVElPTj15Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KQEAgLTE0NjUsMTUgKzE0MywxNCBAQAogQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQogQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQogQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQotQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQotQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQotQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQotQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQogQ09ORklHX05MU19DT0RFUEFHRV84NzQ9bQotQ09ORklHX05MU19JU084ODU5Xzg9bQotQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT1tCi0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQorQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQorQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQorQ09ORklHX05MU19JU084ODU5XzEzPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xND1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQogQ09ORklHX05MU19JU084ODU5XzE9eQogQ09ORklHX05MU19JU084ODU5XzI9bQogQ09ORklHX05MU19JU084ODU5XzM9bQpAQCAtMTQ4MSwxOTQgKzE1OCw3OSBAQAogQ09ORklHX05MU19JU084ODU5XzU9bQogQ09ORklHX05MU19JU084ODU5XzY9bQogQ09ORklHX05MU19JU084ODU5Xzc9bQorQ09ORklHX05MU19JU084ODU5Xzg9bQogQ09ORklHX05MU19JU084ODU5Xzk9bQotQ09ORklHX05MU19JU084ODU5XzEzPW0KLUNPTkZJR19OTFNfSVNPODg1OV8xND1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMTU9bQogQ09ORklHX05MU19LT0k4X1I9bQogQ09ORklHX05MU19LT0k4X1U9bQogQ09ORklHX05MU19VVEY4PW0KLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0yMDQ4Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorQ09ORklHX05URlNfRlM9bQorQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKK0NPTkZJR19QRVJGTU9OPXkKKyMgQ09ORklHX1BOUF9ERUJVR19NRVNTQUdFUyBpcyBub3Qgc2V0CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19SQVdfRFJJVkVSPW0KICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQorQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSPXkKK0NPTkZJR19SRUlTRVJGU19GUz15CitDT05GSUdfU0FUQV9WSVRFU1NFPXkKK0NPTkZJR19TQ1NJX0ZDX0FUVFJTPXkKK0NPTkZJR19TQ1NJX1FMT0dJQ18xMjgwPXkKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF8yPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NgorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15CitDT05GSUdfU0VSSUFMX1NHSV9JT0M0PXkKK0NPTkZJR19TRVJJQUxfU0dJX0wxX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU0dJX0lPQzQ9eQorQ09ORklHX1NHSV9NQkNTPW0KK0NPTkZJR19TR0lfUEFSVElUSU9OPXkKK0NPTkZJR19TR0lfU05TQz15CitDT05GSUdfU0dJX1RJT0NYPXkKK0NPTkZJR19TR0lfWFA9bQorQ09ORklHX1NNQl9GUz1tCitDT05GSUdfU01CX05MU19ERUZBVUxUPXkKK0NPTkZJR19TTVA9eQorQ09ORklHX1NORF9DUzQyODE9bQorQ09ORklHX1NORF9DUzQ2WFg9bQorQ09ORklHX1NORF9EVU1NWT1tCitDT05GSUdfU05EX0VNVTEwSzE9bQorQ09ORklHX1NORF9GTTgwMT1tCitDT05GSUdfU05EPW0KK0NPTkZJR19TTkRfTUlYRVJfT1NTPW0KK0NPTkZJR19TTkRfTVBVNDAxPW0KK0NPTkZJR19TTkRfTVRQQVY9bQorQ09ORklHX1NORF9QQ01fT1NTPW0KK0NPTkZJR19TTkRfU0VRX0RVTU1ZPW0KK0NPTkZJR19TTkRfU0VRVUVOQ0VSPW0KK0NPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CitDT05GSUdfU05EX1NFUklBTF9VMTY1NTA9bQorQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USz15CitDT05GSUdfU05EX1ZJUk1JREk9bQorQ09ORklHX1NPVU5EPW0KK0NPTkZJR19TWU5fQ09PS0lFUz15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotCi0jCi0jIFRyYWNlcnMKLSMKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSUE2NF9HUkFOVUxFXzE2TUI9eQotIyBDT05GSUdfSUE2NF9HUkFOVUxFXzY0TUIgaXMgbm90IHNldAotIyBDT05GSUdfSUE2NF9QUklOVF9IQVpBUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RJU0FCTEVfVkhQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQTY0X0RFQlVHX0NNUFhDSEcgaXMgbm90IHNldAotIyBDT05GSUdfSUE2NF9ERUJVR19JUlEgaXMgbm90IHNldAotQ09ORklHX1NZU1ZJUENfQ09NUEFUPXkKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FFQUQ9bQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotQ09ORklHX0NSWVBUT19IQVNIPW0KLUNPTkZJR19DUllQVE9fUk5HPW0KLUNPTkZJR19DUllQVE9fTUFOQUdFUj1tCi0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotQ09ORklHX0NSWVBUT19DQkM9bQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fRUNCPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9bQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKLSMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1ZNPXkKLUNPTkZJR19WSVJUVUFMSVpBVElPTj15Ci0jIENPTkZJR19LVk0gaXMgbm90IHNldAotIyBDT05GSUdfVklSVElPX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUSU9fQkFMTE9PTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLUNPTkZJR19DUkNfVDEwRElGPXkKLUNPTkZJR19DUkNfSVRVX1Q9bQotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0FMTE9DQVRPUj15Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlE9eQotQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19USUdPTjM9eQorQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UVUxJUD1tCitDT05GSUdfVURGX0ZTPW0KK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfVU5JWD15CitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9bQorQ09ORklHX1VTQj1tCitDT05GSUdfVVNCX01PTj1tCitDT05GSUdfVVNCX09IQ0lfSENEPW0KK0NPTkZJR19VU0JfU1RPUkFHRT1tCitDT05GSUdfVVNCX1VIQ0lfSENEPW0KK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19YRlNfRlM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2NvbmZpZ3MvZ2Vuc3BhcnNlX2RlZmNvbmZpZyBiL2FyY2gvaWE2NC9jb25maWdzL2dlbnNwYXJzZV9kZWZjb25maWcKaW5kZXggMmRjMTg1Yi4uMTg5ODlhMCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2NvbmZpZ3MvZ2Vuc3BhcnNlX2RlZmNvbmZpZworKysgYi9hcmNoL2lhNjQvY29uZmlncy9nZW5zcGFyc2VfZGVmY29uZmlnCkBAIC0xLDEyNjcgKzEsMTEwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmM1Ci0jIFRodSBNYXIgIDIgMTY6Mzk6MTAgMjAwNgotIwotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfUE9TSVhfTVFVRVVFPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotIyBDT05GSUdfQ1BVU0VUUyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNUz15Ci1DT05GSUdfS0FMTFNZTVNfQUxMPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQotQ09ORklHX01PRFZFUlNJT05TPXkKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfU1RPUF9NQUNISU5FPXkKLQotIwotIyBCbG9jayBsYXllcgotIwotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLQotIwotIyBQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMKLSMKLUNPTkZJR19JQTY0PXkKLUNPTkZJR182NEJJVD15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19TV0lPVExCPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfRUZJPXkKLUNPTkZJR19HRU5FUklDX0lPTUFQPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0RNQV9JU19ETUEzMj15Ci1DT05GSUdfSUE2NF9HRU5FUklDPXkKLSMgQ09ORklHX0lBNjRfRElHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfSFBfWlgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfSFBfWlgxX1NXSU9UTEIgaXMgbm90IHNldAotIyBDT05GSUdfSUE2NF9TR0lfU04yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfSFBfU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lUQU5JVU0gaXMgbm90IHNldAotQ09ORklHX01DS0lOTEVZPXkKLSMgQ09ORklHX0lBNjRfUEFHRV9TSVpFXzRLQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQTY0X1BBR0VfU0laRV84S0IgaXMgbm90IHNldAotQ09ORklHX0lBNjRfUEFHRV9TSVpFXzE2S0I9eQotIyBDT05GSUdfSUE2NF9QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0Ci1DT05GSUdfUEdUQUJMRV8zPXkKLSMgQ09ORklHX1BHVEFCTEVfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19JQTY0X0wxX0NBQ0hFX1NISUZUPTcKLUNPTkZJR19JQTY0X0NZQ0xPTkU9eQotQ09ORklHX0lPU0FQSUM9eQotIyBDT05GSUdfSUE2NF9TR0lfU05fWFAgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTcKLUNPTkZJR19TTVA9eQotQ09ORklHX05SX0NQVVM9NTEyCi1DT05GSUdfSUE2NF9OUl9OT0RFUz0yNTYKLUNPTkZJR19IT1RQTFVHX0NQVT15Ci0jIENPTkZJR19TQ0hFRF9TTVQgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci0jIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXkKLUNPTkZJR19TUEFSU0VNRU09eQotQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVM9eQotQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BBUlNFTUVNX0VYVFJFTUU9eQotIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0RFRkFVTFQ9eQotQ09ORklHX05VTUE9eQotQ09ORklHX0hBVkVfQVJDSF9FQVJMWV9QRk5fVE9fTklEPXkKLUNPTkZJR19JQTY0X01DQV9SRUNPVkVSWT15Ci1DT05GSUdfUEVSRk1PTj15Ci1DT05GSUdfSUE2NF9QQUxJTkZPPXkKLUNPTkZJR19TR0lfU049eQotCi0jCi0jIEZpcm13YXJlIERyaXZlcnMKLSMKLUNPTkZJR19FRklfVkFSUz15Ci1DT05GSUdfRUZJX1BDRFA9eQotQ09ORklHX0JJTkZNVF9FTEY9eQotQ09ORklHX0JJTkZNVF9NSVNDPW0KLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IGFuZCBBQ1BJCi0jCi1DT05GSUdfUE09eQotQ09ORklHX1BNX0xFR0FDWT15Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgQUNQSSAoQWR2YW5jZWQgQ29uZmlndXJhdGlvbiBhbmQgUG93ZXIgSW50ZXJmYWNlKSBTdXBwb3J0Ci0jCi1DT05GSUdfQUNQST15CiBDT05GSUdfQUNQSV9CVVRUT049bQorQ09ORklHX0FDUElfQ09OVEFJTkVSPW0KIENPTkZJR19BQ1BJX0ZBTj1tCiBDT05GSUdfQUNQSV9QUk9DRVNTT1I9bQotQ09ORklHX0FDUElfSE9UUExVR19DUFU9eQotQ09ORklHX0FDUElfVEhFUk1BTD1tCi1DT05GSUdfQUNQSV9OVU1BPXkKLUNPTkZJR19BQ1BJX0JMQUNLTElTVF9ZRUFSPTAKLSMgQ09ORklHX0FDUElfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0FDUElfRUM9eQotQ09ORklHX0FDUElfUE9XRVI9eQotQ09ORklHX0FDUElfU1lTVEVNPXkKLUNPTkZJR19BQ1BJX0NPTlRBSU5FUj1tCi0KLSMKLSMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCi0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0KLSMKLSMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBKQotIwotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIwotQ09ORklHX0hPVFBMVUdfUENJPW0KLSMgQ09ORklHX0hPVFBMVUdfUENJX0ZBS0UgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUdfUENJX0FDUEk9bQotIyBDT05GSUdfSE9UUExVR19QQ0lfQUNQSV9JQk0gaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0lfQ1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSV9TSFBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJX1NHSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotQ09ORklHX0FSUEQ9eQotQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPW0KLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCi0jIENPTkZJR19NVEQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi1DT05GSUdfUE5QPXkKLSMgQ09ORklHX1BOUF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvdG9jb2xzCi0jCi1DT05GSUdfUE5QQUNQST15Ci0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPW0KLUNPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQotQ09ORklHX0JMS19ERVZfTkJEPW0KLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCi1DT05GSUdfSURFPXkKLUNPTkZJR19JREVfTUFYX0hXSUZTPTQKLUNPTkZJR19CTEtfREVWX0lERT15Ci0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCi0jCi0jIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQotIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERUNEPXkKLSMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVGTE9QUFk9eQotQ09ORklHX0JMS19ERVZfSURFU0NTST1tCi0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0Ci0KLSMKLSMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwotIwotQ09ORklHX0lERV9HRU5FUklDPXkKLSMgQ09ORklHX0JMS19ERVZfSURFUE5QIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERVBDST15Ci0jIENPTkZJR19JREVQQ0lfU0hBUkVfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfR0VORVJJQz15Ci0jIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15Ci0jIENPTkZJR19CTEtfREVWX0lERURNQV9GT1JDRUQgaXMgbm90IHNldAotQ09ORklHX0lERURNQV9QQ0lfQVVUTz15Ci0jIENPTkZJR19JREVETUFfT05MWURJU0sgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfQ01ENjRYPXkKLSMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NZODJDNjkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1BJSVg9eQotIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfU0dJSU9DND15Ci0jIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQT15Ci0jIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKLUNPTkZJR19JREVETUFfQVVUTz15Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCi1DT05GSUdfQkxLX0RFVl9TRD15Ci1DT05GSUdfQ0hSX0RFVl9TVD1tCi0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfU1I9bQotIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAotQ09ORklHX0NIUl9ERVZfU0c9bQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCi0jCi1DT05GSUdfU0NTSV9TUElfQVRUUlM9eQotQ09ORklHX1NDU0lfRkNfQVRUUlM9eQotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwotIwotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfU0FUQT15Ci0jIENPTkZJR19TQ1NJX1NBVEFfQUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBVEFfU1ZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVRBX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVRBX01WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FUQV9OViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BEQ19BRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FUQV9RU1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBVEFfU1g0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FUQV9TSUwgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVRBX1NJTDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVRBX1VMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBVEFfVklBIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1NBVEFfVklURVNTRT15Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotQ09ORklHX1NDU0lfU1lNNTNDOFhYXzI9eQotQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RNQV9BRERSRVNTSU5HX01PREU9MQotQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RFRkFVTFRfVEFHUz0xNgotQ09ORklHX1NDU0lfU1lNNTNDOFhYX01BWF9UQUdTPTY0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9JT01BUFBFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ19GQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9RTE9HSUNfMTI4MD15Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLUNPTkZJR19NRD15Ci1DT05GSUdfQkxLX0RFVl9NRD1tCi1DT05GSUdfTURfTElORUFSPW0KLUNPTkZJR19NRF9SQUlEMD1tCi1DT05GSUdfTURfUkFJRDE9bQotIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKLUNPTkZJR19NRF9SQUlENT1tCi1DT05GSUdfTURfUkFJRDY9bQotQ09ORklHX01EX01VTFRJUEFUSD1tCi0jIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfRE09bQotQ09ORklHX0RNX0NSWVBUPW0KLUNPTkZJR19ETV9TTkFQU0hPVD1tCi1DT05GSUdfRE1fTUlSUk9SPW0KLUNPTkZJR19ETV9aRVJPPW0KLUNPTkZJR19ETV9NVUxUSVBBVEg9bQotIyBDT05GSUdfRE1fTVVMVElQQVRIX0VNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0ZVU0lPTj15Ci1DT05GSUdfRlVTSU9OX1NQST15Ci1DT05GSUdfRlVTSU9OX0ZDPW0KLSMgQ09ORklHX0ZVU0lPTl9TQVMgaXMgbm90IHNldAotQ09ORklHX0ZVU0lPTl9NQVhfU0dFPTEyOAotIyBDT05GSUdfRlVTSU9OX0NUTCBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfRFVNTVk9bQotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQjEwMDAgaXMgbm90IHNldAotCi0jCi0jIEFSQ25ldCBkZXZpY2VzCi0jCi0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST1tCi0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLQotIwotIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX05FVF9UVUxJUD15Ci0jIENPTkZJR19ERTIxMDRYIGlzIG5vdCBzZXQKLUNPTkZJR19UVUxJUD1tCi0jIENPTkZJR19UVUxJUF9NV0kgaXMgbm90IHNldAotIyBDT05GSUdfVFVMSVBfTU1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVUxJUF9OQVBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFNFg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTkJPTkRfODQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTEwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTEk1MjZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfUENJPXkKLSMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAotIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RHUlMgaXMgbm90IHNldAotQ09ORklHX0VFUFJPMTAwPW0KLUNPTkZJR19FMTAwPW0KLSMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLUNPTkZJR19FMTAwMD15Ci0jIENPTkZJR19FMTAwMF9OQVBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwX0RJU0FCTEVfUEFDS0VUX1NQTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci1DT05GSUdfVElHT04zPXkKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUQ09OU09MRT15Ci1DT05GSUdfTkVUUE9MTD15Ci0jIENPTkZJR19ORVRQT0xMX1JYIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCi0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRT15Ci1DT05GSUdfTU9VU0VfUFMyPXkKLSMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19JODA0Mj15Ci0jIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fTElCUFMyPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci1DT05GSUdfR0FNRVBPUlQ9bQotIyBDT05GSUdfR0FNRVBPUlRfTlM1NTggaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlRfTDQgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlRfRU1VMTBLMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVF9GTTgwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEPXkKLSMgQ09ORklHX0NPTVBVVE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST0NLRVRQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NZQ0xBREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RJR0lFUENBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PWEFfSU5URUxMSU8gaXMgbm90IHNldAotIyBDT05GSUdfTU9YQV9TTUFSVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5DTElOS01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTkNMSU5LX0dUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05fSERMQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEVDSUFMSVggaXMgbm90IHNldAotIyBDT05GSUdfU1ggaXMgbm90IHNldAotIyBDT05GSUdfU1RBTERSViBpcyBub3Qgc2V0Ci1DT05GSUdfU0dJX1NOU0M9eQotQ09ORklHX1NHSV9USU9DWD15Ci1DT05GSUdfU0dJX01CQ1M9bQotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX0FDUEk9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTYKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9TR0lfTDFfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfU0dJX0lPQzQ9eQotQ09ORklHX1NFUklBTF9TR0lfSU9DMz15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci1DT05GSUdfRUZJX1JUQz15Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLUNPTkZJR19BR1A9bQotQ09ORklHX0FHUF9JNDYwPW0KIENPTkZJR19BR1BfSFBfWlgxPW0KK0NPTkZJR19BR1BfSTQ2MD1tCitDT05GSUdfQUdQPW0KIENPTkZJR19BR1BfU0dJX1RJT0NBPW0KK0NPTkZJR19BUlBEPXkKK0NPTkZJR19BVVRPRlM0X0ZTPXkKK0NPTkZJR19BVVRPRlNfRlM9eQorQ09ORklHX0JJTkZNVF9NSVNDPW0KK0NPTkZJR19CTEtfREVWX0NNRDY0WD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KK0NPTkZJR19CTEtfREVWX0RNPW0KK0NPTkZJR19CTEtfREVWX0dFTkVSSUM9eQorQ09ORklHX0JMS19ERVZfSURFQ0Q9eQorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19CTEtfREVWX0xPT1A9bQorQ09ORklHX0JMS19ERVZfTUQ9bQorQ09ORklHX0JMS19ERVZfTkJEPW0KK0NPTkZJR19CTEtfREVWX1BJSVg9eQorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19CTEtfREVWX1NHSUlPQzQ9eQorQ09ORklHX0JMS19ERVZfU1I9bQorQ09ORklHX0NIUl9ERVZfU0c9bQorQ09ORklHX0NIUl9ERVZfU1Q9bQorQ09ORklHX0NJRlM9bQorQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfREVCVUdfTVVURVhFUz15CitDT05GSUdfRE1fQ1JZUFQ9bQorQ09ORklHX0RNX01JUlJPUj1tCitDT05GSUdfRE1fTVVMVElQQVRIPW0KK0NPTkZJR19ETV9TTkFQU0hPVD1tCitDT05GSUdfRE1fWkVSTz1tCiBDT05GSUdfRFJNPW0KLUNPTkZJR19EUk1fVERGWD1tCitDT05GSUdfRFJNX01HQT1tCiBDT05GSUdfRFJNX1IxMjg9bQogQ09ORklHX0RSTV9SQURFT049bQotQ09ORklHX0RSTV9NR0E9bQogQ09ORklHX0RSTV9TSVM9bQotIyBDT05GSUdfRFJNX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk1fU0FWQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQVdfRFJJVkVSPW0KLUNPTkZJR19NQVhfUkFXX0RFVlM9MjU2Ci1DT05GSUdfSFBFVD15Ci0jIENPTkZJR19IUEVUX1JUQ19JUlEgaXMgbm90IHNldAotQ09ORklHX0hQRVRfTU1BUD15Ci0jIENPTkZJR19IQU5HQ0hFQ0tfVElNRVIgaXMgbm90IHNldAotQ09ORklHX01NVElNRVI9eQotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotCi0jCi0jIERhbGxhcydzIDEtd2lyZSBidXMKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKLSMKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLUNPTkZJR19WR0FfQ09OU09MRT15Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0KLSMKLSMgU291bmQKLSMKLUNPTkZJR19TT1VORD1tCi0KLSMKLSMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCi0jCi1DT05GSUdfU05EPW0KLUNPTkZJR19TTkRfVElNRVI9bQotQ09ORklHX1NORF9QQ009bQotQ09ORklHX1NORF9IV0RFUD1tCi1DT05GSUdfU05EX1JBV01JREk9bQotQ09ORklHX1NORF9TRVFVRU5DRVI9bQotQ09ORklHX1NORF9TRVFfRFVNTVk9bQotQ09ORklHX1NORF9PU1NFTVVMPXkKLUNPTkZJR19TTkRfTUlYRVJfT1NTPW0KLUNPTkZJR19TTkRfUENNX09TUz1tCi1DT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKLUNPTkZJR19TTkRfVkVSQk9TRV9QUklOVEs9eQotIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBHZW5lcmljIGRldmljZXMKLSMKLUNPTkZJR19TTkRfTVBVNDAxX1VBUlQ9bQotQ09ORklHX1NORF9PUEwzX0xJQj1tCi1DT05GSUdfU05EX0FDOTdfQ09ERUM9bQotQ09ORklHX1NORF9BQzk3X0JVUz1tCi1DT05GSUdfU05EX0RVTU1ZPW0KLUNPTkZJR19TTkRfVklSTUlEST1tCi1DT05GSUdfU05EX01UUEFWPW0KLUNPTkZJR19TTkRfU0VSSUFMX1UxNjU1MD1tCi1DT05GSUdfU05EX01QVTQwMT1tCi0KLSMKLSMgUENJIGRldmljZXMKLSMKLSMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMSTU0NTEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BWlQzMzI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAotQ09ORklHX1NORF9DUzQyODE9bQotQ09ORklHX1NORF9DUzQ2WFg9bQotQ09ORklHX1NORF9DUzQ2WFhfTkVXX0RTUD15Ci1DT05GSUdfU05EX0VNVTEwSzE9bQotIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTlMxMzcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTlMxMzcxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FUzE5MzggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VTMTk2OCBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0ZNODAxPW0KLSMgQ09ORklHX1NORF9GTTgwMV9URUE1NzVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAotCi0jCi0jIFVTQiBkZXZpY2VzCi0jCi0jIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKLQotIwotIyBPcGVuIFNvdW5kIFN5c3RlbQotIwotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQj1tCi0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKLUNPTkZJR19VU0JfREVWSUNFRlM9eQotIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi1DT05GSUdfVVNCX0VIQ0lfSENEPW0KLSMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0hDRD1tCi0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLUNPTkZJR19VU0JfVUhDSV9IQ0Q9bQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19PQlNPTEVURV9PU1NfVVNCX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwotQ09ORklHX1VTQl9TVE9SQUdFPW0KLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD1tCi1DT05GSUdfVVNCX0hJRElOUFVUPXkKLSMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XQUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lUTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FR0FMQVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIFZpZGVvNExpbnV4IHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTXVsdGltZWRpYSBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049eQotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVEtJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5maW5pQmFuZCBzdXBwb3J0Ci0jCi1DT05GSUdfSU5GSU5JQkFORD1tCi0jIENPTkZJR19JTkZJTklCQU5EX1VTRVJfTUFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkRfVVNFUl9BQ0NFU1MgaXMgbm90IHNldAotQ09ORklHX0lORklOSUJBTkRfTVRIQ0E9bQotIyBDT05GSUdfSU5GSU5JQkFORF9NVEhDQV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5GSU5JQkFORF9JUE9JQj1tCi0jIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkRfU1JQIGlzIG5vdCBzZXQKLQotIwotIyBTTiBEZXZpY2VzCi0jCi1DT05GSUdfU0dJX0lPQzQ9eQotQ09ORklHX1NHSV9JT0MzPXkKLQotIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykKLSMKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLUNPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKK0NPTkZJR19EUk1fVERGWD1tCitDT05GSUdfRFVNTVk9bQorQ09ORklHX0UxMDAwPXkKK0NPTkZJR19FMTAwPW0KK0NPTkZJR19FRklfUEFSVElUSU9OPXkKK0NPTkZJR19FRklfUlRDPXkKK0NPTkZJR19FRklfVkFSUz15CitDT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUMl9GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15CitDT05GSUdfRVhUMl9GU19YQVRUUj15CitDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQogQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotQ09ORklHX1JFSVNFUkZTX0ZTPXkKLSMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0Ci1DT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotQ09ORklHX1hGU19GUz15Ci1DT05GSUdfWEZTX0VYUE9SVD15Ci0jIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19GVVNJT05fRkM9bQorQ09ORklHX0ZVU0lPTl9TUEk9eQorQ09ORklHX0ZVU0lPTj15CitDT05GSUdfR0FNRVBPUlQ9bQorQ09ORklHX0hPVFBMVUdfQ1BVPXkKK0NPTkZJR19IT1RQTFVHX1BDSV9BQ1BJPW0KK0NPTkZJR19IT1RQTFVHX1BDST1tCitDT05GSUdfSFBFVD15CitDT05GSUdfSFVHRVRMQkZTPXkKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CitDT05GSUdfSUE2NF9DWUNMT05FPXkKK0NPTkZJR19JQTY0X01DQV9SRUNPVkVSWT15CitDT05GSUdfSUE2NF9QQUxJTkZPPXkKK0NPTkZJR19JREVfR0VORVJJQz15CitDT05GSUdfSURFPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSU5FVD15CitDT05GSUdfSU5GSU5JQkFORF9JUE9JQj1tCitDT05GSUdfSU5GSU5JQkFORD1tCitDT05GSUdfSU5GSU5JQkFORF9NVEhDQT1tCiBDT05GSUdfSU5PVElGWT15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci1DT05GSUdfQVVUT0ZTX0ZTPXkKLUNPTkZJR19BVVRPRlM0X0ZTPXkKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiBDT05GSUdfSVNPOTY2MF9GUz1tCiBDT05GSUdfSk9MSUVUPXkKLSMgQ09ORklHX1pJU09GUyBpcyBub3Qgc2V0Ci1DT05GSUdfVURGX0ZTPW0KLUNPTkZJR19VREZfTkxTPXkKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLUNPTkZJR19OVEZTX0ZTPW0KLSMgQ09ORklHX05URlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19SVyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLUNPTkZJR19IVUdFVExCRlM9eQotQ09ORklHX0hVR0VUTEJfUEFHRT15Ci1DT05GSUdfUkFNRlM9eQotIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MjAKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfTUNLSU5MRVk9eQorQ09ORklHX01EX0xJTkVBUj1tCitDT05GSUdfTURfTVVMVElQQVRIPW0KK0NPTkZJR19NRF9SQUlEMD1tCitDT05GSUdfTURfUkFJRDE9bQorQ09ORklHX01EPXkKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RWRVJTSU9OUz15CitDT05GSUdfTkVUQ09OU09MRT15CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19ORVRfUENJPXkKK0NPTkZJR19ORVRfVFVMSVA9eQorQ09ORklHX05GU0Q9bQorQ09ORklHX05GU0RfVjQ9eQogQ09ORklHX05GU19GUz1tCiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15Ci1DT05GSUdfTkZTX0RJUkVDVElPPXkKLUNPTkZJR19ORlNEPW0KLUNPTkZJR19ORlNEX1YzPXkKLSMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEX1Y0PXkKLUNPTkZJR19ORlNEX1RDUD15Ci1DT05GSUdfTE9DS0Q9bQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19FWFBPUlRGUz15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPW0KLUNPTkZJR19TVU5SUENfR1NTPW0KLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9bQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci1DT05GSUdfU01CX0ZTPW0KLUNPTkZJR19TTUJfTkxTX0RFRkFVTFQ9eQotQ09ORklHX1NNQl9OTFNfUkVNT1RFPSJjcDQzNyIKLUNPTkZJR19DSUZTPW0KLSMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX1NHSV9QQVJUSVRJT049eQotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfRUZJX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KQEAgLTEyNzcsMTUgKzEyMCwxNCBAQAogQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQogQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQogQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQotQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQotQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQotQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQotQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQogQ09ORklHX05MU19DT0RFUEFHRV84NzQ9bQotQ09ORklHX05MU19JU084ODU5Xzg9bQotQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT1tCi0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQorQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQorQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQorQ09ORklHX05MU19JU084ODU5XzEzPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xND1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQogQ09ORklHX05MU19JU084ODU5XzE9eQogQ09ORklHX05MU19JU084ODU5XzI9bQogQ09ORklHX05MU19JU084ODU5XzM9bQpAQCAtMTI5MywxMDAgKzEzNSw3NyBAQAogQ09ORklHX05MU19JU084ODU5XzU9bQogQ09ORklHX05MU19JU084ODU5XzY9bQogQ09ORklHX05MU19JU084ODU5Xzc9bQorQ09ORklHX05MU19JU084ODU5Xzg9bQogQ09ORklHX05MU19JU084ODU5Xzk9bQotQ09ORklHX05MU19JU084ODU5XzEzPW0KLUNPTkZJR19OTFNfSVNPODg1OV8xND1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMTU9bQogQ09ORklHX05MU19LT0k4X1I9bQogQ09ORklHX05MU19LT0k4X1U9bQogQ09ORklHX05MU19VVEY4PW0KLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlE9eQotCi0jCi0jIEhQIFNpbXVsYXRvciBkcml2ZXJzCi0jCi0jIENPTkZJR19IUF9TSU1FVEggaXMgbm90IHNldAotIyBDT05GSUdfSFBfU0lNU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQX1NJTVNDU0kgaXMgbm90IHNldAotCi0jCi0jIEluc3RydW1lbnRhdGlvbiBTdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTIwCi1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotQ09ORklHX0lBNjRfR1JBTlVMRV8xNk1CPXkKLSMgQ09ORklHX0lBNjRfR1JBTlVMRV82NE1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfUFJJTlRfSEFaQVJEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ESVNBQkxFX1ZIUFQgaXMgbm90IHNldAotIyBDT05GSUdfSUE2NF9ERUJVR19DTVBYQ0hHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfREVCVUdfSVJRIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNWSVBDX0NPTVBBVD15Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi1DT05GSUdfQ1JZUFRPPXkKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPW0KLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCitDT05GSUdfTlJfQ1BVUz01MTIKK0NPTkZJR19OVEZTX0ZTPW0KK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CitDT05GSUdfUEVSRk1PTj15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19SQVdfRFJJVkVSPW0KK0NPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQorQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZPXkKK0NPTkZJR19SRUlTRVJGU19GU19YQVRUUj15CitDT05GSUdfUkVJU0VSRlNfRlM9eQorQ09ORklHX1NDU0lfRkNfQVRUUlM9eQorQ09ORklHX1NDU0lfUUxPR0lDXzEyODA9eQorQ09ORklHX1NDU0lfU1lNNTNDOFhYXzI9eQorQ09ORklHX1NDU0k9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz02CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEPXkKK0NPTkZJR19TRVJJQUxfU0dJX0lPQzM9eQorQ09ORklHX1NFUklBTF9TR0lfSU9DND15CitDT05GSUdfU0VSSUFMX1NHSV9MMV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAorQ09ORklHX1NHSV9JT0MzPXkKK0NPTkZJR19TR0lfSU9DND15CitDT05GSUdfU0dJX01CQ1M9bQorQ09ORklHX1NHSV9QQVJUSVRJT049eQorQ09ORklHX1NHSV9TTlNDPXkKK0NPTkZJR19TR0lfVElPQ1g9eQorQ09ORklHX1NNQl9GUz1tCitDT05GSUdfU01CX05MU19ERUZBVUxUPXkKK0NPTkZJR19TTVA9eQorQ09ORklHX1NORF9DUzQyODE9bQorQ09ORklHX1NORF9DUzQ2WFg9bQorQ09ORklHX1NORF9EVU1NWT1tCitDT05GSUdfU05EX0VNVTEwSzE9bQorQ09ORklHX1NORF9GTTgwMT1tCitDT05GSUdfU05EPW0KK0NPTkZJR19TTkRfTUlYRVJfT1NTPW0KK0NPTkZJR19TTkRfTVBVNDAxPW0KK0NPTkZJR19TTkRfTVRQQVY9bQorQ09ORklHX1NORF9QQ01fT1NTPW0KK0NPTkZJR19TTkRfU0VRX0RVTU1ZPW0KK0NPTkZJR19TTkRfU0VRVUVOQ0VSPW0KK0NPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CitDT05GSUdfU05EX1NFUklBTF9VMTY1NTA9bQorQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USz15CitDT05GSUdfU05EX1ZJUk1JREk9bQorQ09ORklHX1NPVU5EPW0KK0NPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXkKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfVElHT04zPXkKK0NPTkZJR19UTVBGUz15CitDT05GSUdfVFVMSVA9bQorQ09ORklHX1VERl9GUz1tCitDT05GSUdfVU5JWD15CitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9bQorQ09ORklHX1VTQj1tCitDT05GSUdfVVNCX01PTj1tCitDT05GSUdfVVNCX09IQ0lfSENEPW0KK0NPTkZJR19VU0JfU1RPUkFHRT1tCitDT05GSUdfVVNCX1VIQ0lfSENEPW0KK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19YRlNfRlM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2NvbmZpZ3Mvc2ltX2RlZmNvbmZpZyBiL2FyY2gvaWE2NC9jb25maWdzL3NpbV9kZWZjb25maWcKaW5kZXggMjFhMjNjZC4uNTg1MjIyYiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2NvbmZpZ3Mvc2ltX2RlZmNvbmZpZworKysgYi9hcmNoL2lhNjQvY29uZmlncy9zaW1fZGVmY29uZmlnCkBAIC0xLDcyMyArMSw1NyBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjNQotIyBNb24gRmViIDI3IDE2OjEzOjQxIDIwMDYKLSMKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotIyBDT05GSUdfQ1BVU0VUUyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCi1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCi1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLUNPTkZJR19TVE9QX01BQ0hJTkU9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCi0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIFByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcwotIwotQ09ORklHX0lBNjQ9eQotQ09ORklHXzY0QklUPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX1NXSU9UTEI9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19FRkk9eQotQ09ORklHX0dFTkVSSUNfSU9NQVA9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfRE1BX0lTX0RNQTMyPXkKLSMgQ09ORklHX0lBNjRfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQTY0X0RJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQTY0X0hQX1pYMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQTY0X0hQX1pYMV9TV0lPVExCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfU0dJX1NOMiBpcyBub3Qgc2V0Ci1DT05GSUdfSUE2NF9IUF9TSU09eQotIyBDT05GSUdfSVRBTklVTSBpcyBub3Qgc2V0Ci1DT05GSUdfTUNLSU5MRVk9eQotIyBDT05GSUdfSUE2NF9QQUdFX1NJWkVfNEtCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQTY0X1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKLUNPTkZJR19JQTY0X1BBR0VfU0laRV82NEtCPXkKLUNPTkZJR19QR1RBQkxFXzM9eQotIyBDT05GSUdfUEdUQUJMRV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotQ09ORklHX0lBNjRfTDFfQ0FDSEVfU0hJRlQ9NwotIyBDT05GSUdfSUE2NF9DWUNMT05FIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTE3Ci1DT05GSUdfU01QPXkKLUNPTkZJR19OUl9DUFVTPTY0Ci0jIENPTkZJR19IT1RQTFVHX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9TTVQgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQotIyBDT05GSUdfVklSVFVBTF9NRU1fTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfTUNBX1JFQ09WRVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZNT04gaXMgbm90IHNldAotQ09ORklHX0lBNjRfUEFMSU5GTz1tCi0KLSMKLSMgRmlybXdhcmUgRHJpdmVycwotIwotQ09ORklHX0VGSV9WQVJTPXkKLUNPTkZJR19CSU5GTVRfRUxGPXkKIENPTkZJR19CSU5GTVRfTUlTQz15Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBhbmQgQUNQSQotIwotCi0jCi0jIE5ldHdvcmtpbmcKLSMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLSMgQ09ORklHX1NUQU5EQUxPTkUgaXMgbm90IHNldAotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCi0jIENPTkZJR19NVEQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCi0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi1DT05GSUdfU0NTSV9NVUxUSV9MVU49eQotQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKLUNPTkZJR19TQ1NJX0xPR0dJTkc9eQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKLSMKLUNPTkZJR19TQ1NJX1NQSV9BVFRSUz15Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ORVRERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCi0jIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCi0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBUZWxlcGhvbnkgU3VwcG9ydAotIwotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19JTkZPPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorQ09ORklHX0VGSV9QQVJUSVRJT049eQorQ09ORklHX0VGSV9SVEM9eQorQ09ORklHX0VGSV9WQVJTPXkKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfSFBfU0lNRVRIPXkKK0NPTkZJR19IUF9TSU1TQ1NJPXkKK0NPTkZJR19IUF9TSU1TRVJJQUxfQ09OU09MRT15CitDT05GSUdfSFBfU0lNU0VSSUFMPXkKK0NPTkZJR19IVUdFVExCRlM9eQorQ09ORklHX0lBNjRfSFBfU0lNPXkKK0NPTkZJR19JQTY0X1BBR0VfU0laRV82NEtCPXkKK0NPTkZJR19JQTY0X1BBTElORk89bQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JTk9USUZZPXkKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSVBNSQotIwotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX0VGSV9SVEM9eQotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU5HQ0hFQ0tfVElNRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotCi0jCi0jIERhbGxhcydzIDEtd2lyZSBidXMKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKLSMKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCi0jIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIEluZmluaUJhbmQgc3VwcG9ydAotIwotCi0jCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKQotIwotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19IVUdFVExCRlM9eQotQ09ORklHX0hVR0VUTEJfUEFHRT15Ci1DT05GSUdfUkFNRlM9eQotIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKLUNPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTX0RJUkVDVElPPXkKLUNPTkZJR19ORlNEPXkKLUNPTkZJR19ORlNEX1YzPXkKLSMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRF9UQ1AgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfRVhQT1JURlM9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19FRklfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlE9eQotCi0jCi0jIEhQIFNpbXVsYXRvciBkcml2ZXJzCi0jCi1DT05GSUdfSFBfU0lNRVRIPXkKLUNPTkZJR19IUF9TSU1TRVJJQUw9eQotQ09ORklHX0hQX1NJTVNFUklBTF9DT05TT0xFPXkKLUNPTkZJR19IUF9TSU1TQ1NJPXkKLQotIwotIyBJbnN0cnVtZW50YXRpb24gU3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE2Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19QUkVFTVBUPXkKLUNPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfR1JBTlVMRV8xNk1CIGlzIG5vdCBzZXQKLUNPTkZJR19JQTY0X0dSQU5VTEVfNjRNQj15Ci0jIENPTkZJR19JQTY0X1BSSU5UX0hBWkFSRFMgaXMgbm90IHNldAotIyBDT05GSUdfRElTQUJMRV9WSFBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfREVCVUdfQ01QWENIRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQTY0X0RFQlVHX0lSUSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTVklQQ19DT01QQVQ9eQotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIworQ09ORklHX01DS0lOTEVZPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RWRVJTSU9OUz15CitDT05GSUdfTkVUPXkKK0NPTkZJR19ORlNEX1YzPXkKK0NPTkZJR19ORlNEPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05SX0NQVVM9NjQKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfU0NTSV9DT05TVEFOVFM9eQorQ09ORklHX1NDU0lfTE9HR0lORz15CitDT05GSUdfU0NTSV9NVUxUSV9MVU49eQorQ09ORklHX1NDU0lfU1BJX0FUVFJTPXkKK0NPTkZJR19TQ1NJPXkKKyMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKK0NPTkZJR19TTVA9eQorIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvY29uZmlncy90aWdlcl9kZWZjb25maWcgYi9hcmNoL2lhNjQvY29uZmlncy90aWdlcl9kZWZjb25maWcKaW5kZXggYzVhNWVhOS4uNDk4NjE4ZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2NvbmZpZ3MvdGlnZXJfZGVmY29uZmlnCisrKyBiL2FyY2gvaWE2NC9jb25maWdzL3RpZ2VyX2RlZmNvbmZpZwpAQCAtMSwxMTM0ICsxLDExMyBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIyCi0jIFRodSBKdWwgMTkgMTM6NTQ6NDcgMjAwNwotIwotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLUNPTkZJR19QT1NJWF9NUVVFVUU9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MjAKLSMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLUNPTkZJR19LQUxMU1lNU19BTEw9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfU1RPUF9NQUNISU5FPXkKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0KLSMKLSMgUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzCi0jCi1DT05GSUdfSUE2ND15Ci1DT05GSUdfNjRCSVQ9eQotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19RVUlDS0xJU1Q9eQotQ09ORklHX01NVT15Ci1DT05GSUdfU1dJT1RMQj15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19ETUk9eQotQ09ORklHX0VGST15Ci1DT05GSUdfR0VORVJJQ19JT01BUD15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BVURJVF9BUkNIPXkKLSMgQ09ORklHX0lBNjRfR0VORVJJQyBpcyBub3Qgc2V0Ci1DT05GSUdfSUE2NF9ESUc9eQotIyBDT05GSUdfSUE2NF9IUF9aWDEgaXMgbm90IHNldAotIyBDT05GSUdfSUE2NF9IUF9aWDFfU1dJT1RMQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQTY0X1NHSV9TTjIgaXMgbm90IHNldAotIyBDT05GSUdfSUE2NF9IUF9TSU0gaXMgbm90IHNldAotIyBDT05GSUdfSVRBTklVTSBpcyBub3Qgc2V0Ci1DT05GSUdfTUNLSU5MRVk9eQotIyBDT05GSUdfSUE2NF9QQUdFX1NJWkVfNEtCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQTY0X1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKLUNPTkZJR19JQTY0X1BBR0VfU0laRV82NEtCPXkKLUNPTkZJR19QR1RBQkxFXzM9eQotIyBDT05GSUdfUEdUQUJMRV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19JQTY0X0wxX0NBQ0hFX1NISUZUPTcKLUNPTkZJR19JQTY0X0NZQ0xPTkU9eQotQ09ORklHX0lPU0FQSUM9eQotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTcKLUNPTkZJR19TTVA9eQotQ09ORklHX05SX0NQVVM9MTYKLUNPTkZJR19IT1RQTFVHX0NQVT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotIyBDT05GSUdfU0NIRURfU01UIGlzIG5vdCBzZXQKLUNPTkZJR19QRVJNSVRfQlNQX1JFTU9WRT15Ci1DT05GSUdfRk9SQ0VfQ1BFSV9SRVRBUkdFVD15Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfTlJfUVVJQ0s9MQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfVklSVFVBTF9NRU1fTUFQPXkKLUNPTkZJR19IT0xFU19JTl9aT05FPXkKLUNPTkZJR19JQTY0X01DQV9SRUNPVkVSWT15Ci1DT05GSUdfUEVSRk1PTj15Ci1DT05GSUdfSUE2NF9QQUxJTkZPPXkKLSMgQ09ORklHX0lBNjRfTUNfRVJSX0lOSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQTY0X0VTSSBpcyBub3Qgc2V0Ci1DT05GSUdfS0VYRUM9eQotIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlybXdhcmUgRHJpdmVycwotIwotQ09ORklHX0VGSV9WQVJTPXkKLUNPTkZJR19FRklfUENEUD15Ci1DT05GSUdfRE1JSUQ9eQotQ09ORklHX0JJTkZNVF9FTEY9eQotQ09ORklHX0JJTkZNVF9NSVNDPW0KLQotIyBDT05GSUdfRE1BUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBhbmQgQUNQSQotIwotQ09ORklHX1BNPXkKLUNPTkZJR19QTV9MRUdBQ1k9eQotIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAotCi0jCi0jIEFDUEkgKEFkdmFuY2VkIENvbmZpZ3VyYXRpb24gYW5kIFBvd2VyIEludGVyZmFjZSkgU3VwcG9ydAotIwotQ09ORklHX0FDUEk9eQotQ09ORklHX0FDUElfUFJPQ0ZTPXkKIENPTkZJR19BQ1BJX0JVVFRPTj1tCi1DT05GSUdfQUNQSV9GQU49bQotIyBDT05GSUdfQUNQSV9ET0NLIGlzIG5vdCBzZXQKLUNPTkZJR19BQ1BJX1BST0NFU1NPUj1tCi1DT05GSUdfQUNQSV9IT1RQTFVHX0NQVT15Ci1DT05GSUdfQUNQSV9USEVSTUFMPW0KLUNPTkZJR19BQ1BJX0JMQUNLTElTVF9ZRUFSPTAKLSMgQ09ORklHX0FDUElfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0FDUElfRUM9eQotQ09ORklHX0FDUElfUE9XRVI9eQotQ09ORklHX0FDUElfU1lTVEVNPXkKIENPTkZJR19BQ1BJX0NPTlRBSU5FUj1tCi0KLSMKLSMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCi0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0KLSMKLSMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBKQotIwotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVR19QQ0k9bQotIyBDT05GSUdfSE9UUExVR19QQ0lfRkFLRSBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVR19QQ0lfQUNQST1tCi0jIENPTkZJR19IT1RQTFVHX1BDSV9BQ1BJX0lCTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSV9DUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJX1NIUEMgaXMgbm90IHNldAotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLUNPTkZJR19BUlBEPXkKLUNPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj1tCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfUE5QPXkKLSMgQ09ORklHX1BOUF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvdG9jb2xzCi0jCi1DT05GSUdfUE5QQUNQST15Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9bQotQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCi1DT05GSUdfQkxLX0RFVl9OQkQ9bQotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19JREU9eQotQ09ORklHX0lERV9NQVhfSFdJRlM9NAotQ09ORklHX0JMS19ERVZfSURFPXkKLQotIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci0jIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFQ0Q9eQotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERUZMT1BQWT15Ci1DT05GSUdfQkxLX0RFVl9JREVTQ1NJPW0KLSMgQ09ORklHX0JMS19ERVZfSURFQUNQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX1BST0NfRlM9eQotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLSMgQ09ORklHX0lERV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFUE5QIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERVBDST15Ci0jIENPTkZJR19JREVQQ0lfU0hBUkVfSVJRIGlzIG5vdCBzZXQKLUNPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKLSMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfR0VORVJJQz15Ci0jIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15Ci0jIENPTkZJR19CTEtfREVWX0lERURNQV9GT1JDRUQgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX09OTFlESVNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0NNRDY0WD15Ci0jIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DWTgyQzY5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUElJWD15Ci0jIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRE1BPXkKLSMgQ09ORklHX0lERURNQV9JVkIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTkVUTElOSz15Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwotQ09ORklHX0JMS19ERVZfU0Q9eQotQ09ORklHX0NIUl9ERVZfU1Q9bQotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1NSPW0KLSMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKLUNPTkZJR19DSFJfREVWX1NHPW0KLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLUNPTkZJR19TQ1NJX1NQSV9BVFRSUz15Ci1DT05GSUdfU0NTSV9GQ19BVFRSUz15Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwotIwotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAotQ09ORklHX1NDU0lfU1lNNTNDOFhYXzI9eQotQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RNQV9BRERSRVNTSU5HX01PREU9MQotQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RFRkFVTFRfVEFHUz0xNgotQ09ORklHX1NDU0lfU1lNNTNDOFhYX01BWF9UQUdTPTY0Ci1DT05GSUdfU0NTSV9TWU01M0M4WFhfTU1JTz15Ci1DT05GSUdfU0NTSV9RTE9HSUNfMTI4MD15Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotQ09ORklHX01EPXkKLUNPTkZJR19CTEtfREVWX01EPW0KLUNPTkZJR19NRF9MSU5FQVI9bQotQ09ORklHX01EX1JBSUQwPW0KLUNPTkZJR19NRF9SQUlEMT1tCi0jIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAotIyBDT05GSUdfTURfUkFJRDQ1NiBpcyBub3Qgc2V0Ci1DT05GSUdfTURfTVVMVElQQVRIPW0KLSMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9ETT1tCi0jIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRE1fQ1JZUFQ9bQotQ09ORklHX0RNX1NOQVBTSE9UPW0KLUNPTkZJR19ETV9NSVJST1I9bQotQ09ORklHX0RNX1pFUk89bQotIyBDT05GSUdfRE1fTVVMVElQQVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfRlVTSU9OPXkKLUNPTkZJR19GVVNJT05fU1BJPXkKLUNPTkZJR19GVVNJT05fRkM9eQotIyBDT05GSUdfRlVTSU9OX1NBUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlVTSU9OX01BWF9TR0U9MTI4Ci1DT05GSUdfRlVTSU9OX0NUTD15Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVk9bQotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST1tCi0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfVFVMSVA9eQotIyBDT05GSUdfREUyMTA0WCBpcyBub3Qgc2V0Ci1DT05GSUdfVFVMSVA9bQotIyBDT05GSUdfVFVMSVBfTVdJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTElQX01NSU8gaXMgbm90IHNldAotIyBDT05GSUdfVFVMSVBfTkFQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERTRYNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU5CT05EXzg0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETTkxMDIgaXMgbm90IHNldAotIyBDT05GSUdfVUxJNTI2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1BDST15Ci0jIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ER1JTIGlzIG5vdCBzZXQKLUNPTkZJR19FRVBSTzEwMD1tCi1DT05GSUdfRTEwMD1tCi0jIENPTkZJR19GRUFMTlggaXMgbm90IHNldAotIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAotIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotQ09ORklHX0UxMDAwPXkKLSMgQ09ORklHX0UxMDAwX05BUEkgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci1DT05GSUdfVElHT04zPXkKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVRfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUQ09OU09MRT15Ci1DT05GSUdfTkVUUE9MTD15Ci0jIENPTkZJR19ORVRQT0xMX1RSQVAgaXMgbm90IHNldAotQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci1DT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQotQ09ORklHX01PVVNFX1BTMj15Ci1DT05GSUdfTU9VU0VfUFMyX0FMUFM9eQotQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQotQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQotQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSz15Ci1DT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQotIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19JODA0Mj15Ci0jIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fTElCUFMyPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci1DT05GSUdfR0FNRVBPUlQ9bQotIyBDT05GSUdfR0FNRVBPUlRfTlM1NTggaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlRfTDQgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlRfRU1VMTBLMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVF9GTTgwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15Ci0jIENPTkZJR19DT01QVVRPTkUgaXMgbm90IHNldAotIyBDT05GSUdfUk9DS0VUUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DWUNMQURFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ESUdJRVBDQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1hBX0lOVEVMTElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PWEFfU01BUlRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1hBX1NNQVJUSU9fTkVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5DTElOS01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTkNMSU5LX0dUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05fSERMQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEVDSUFMSVggaXMgbm90IHNldAotIyBDT05GSUdfU1ggaXMgbm90IHNldAotIyBDT05GSUdfUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUxEUlYgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUE5QPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz02Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQotQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotQ09ORklHX0VGSV9SVEM9eQotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotQ09ORklHX0FHUD1tCitDT05GSUdfQUNQSV9GQU49bQorQ09ORklHX0FDUElfUFJPQ0VTU09SPW0KK0NPTkZJR19BQ1BJX1BST0NGUz15CiBDT05GSUdfQUdQX0k0NjA9bQorQ09ORklHX0FHUD1tCitDT05GSUdfQVJQRD15CitDT05GSUdfQVVUT0ZTNF9GUz15CitDT05GSUdfQVVUT0ZTX0ZTPXkKK0NPTkZJR19CSU5GTVRfTUlTQz1tCisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9DTUQ2NFg9eQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCitDT05GSUdfQkxLX0RFVl9ETT1tCitDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKK0NPTkZJR19CTEtfREVWX0lERUNEPXkKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfQkxLX0RFVl9MT09QPW0KK0NPTkZJR19CTEtfREVWX01EPW0KK0NPTkZJR19CTEtfREVWX05CRD1tCitDT05GSUdfQkxLX0RFVl9QSUlYPXkKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQkxLX0RFVl9TUj1tCitDT05GSUdfQ0hSX0RFVl9TRz1tCitDT05GSUdfQ0hSX0RFVl9TVD1tCitDT05GSUdfQ0lGUz1tCitDT05GSUdfQ1JZUFRPX0VDQj1tCitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX1BDQkM9bQorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfREVCVUdfTVVURVhFUz15CitDT05GSUdfRE1fQ1JZUFQ9bQorQ09ORklHX0RNX01JUlJPUj1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX1pFUk89bQogQ09ORklHX0RSTT1tCi1DT05GSUdfRFJNX1RERlg9bQorQ09ORklHX0RSTV9NR0E9bQogQ09ORklHX0RSTV9SMTI4PW0KIENPTkZJR19EUk1fUkFERU9OPW0KLUNPTkZJR19EUk1fTUdBPW0KIENPTkZJR19EUk1fU0lTPW0KLSMgQ09ORklHX0RSTV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfRFJNX1NBVkFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFXX0RSSVZFUj1tCi1DT05GSUdfTUFYX1JBV19ERVZTPTI1NgotQ09ORklHX0hQRVQ9eQotIyBDT05GSUdfSFBFVF9SVENfSVJRIGlzIG5vdCBzZXQKLUNPTkZJR19IUEVUX01NQVA9eQotIyBDT05GSUdfSEFOR0NIRUNLX1RJTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BQklUVUdVUlUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15Ci0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi1DT05GSUdfVkdBX0NPTlNPTEU9eQotIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKLUNPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRVJTSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotQ09ORklHX1VTQl9FSENJX0hDRD1tCi0jIENPTkZJR19VU0JfRUhDSV9TUExJVF9JU08gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9IQ0Q9bQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15Ci1DT05GSUdfVVNCX1VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwotQ09ORklHX1VTQl9TVE9SQUdFPW0KLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERTTCBtb2RlbSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRldmljZXMKLSMKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZHJpdmVycwotIwotCi0jCi0jIExFRCBUcmlnZ2VycwotIwotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgUmVhbCBUaW1lIENsb2NrCi0jCi0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIERNQSBFbmdpbmUgc3VwcG9ydAotIwotIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIENsaWVudHMKLSMKLQotIwotIyBETUEgRGV2aWNlcwotIwotCi0jCi0jIFVzZXJzcGFjZSBJL08KLSMKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU1BFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi1DT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfRVhUMl9GU19YQVRUUj15CitDT05GSUdfRFJNX1RERlg9bQorQ09ORklHX0RVTU1ZPW0KK0NPTkZJR19FMTAwMD15CitDT05GSUdfRTEwMD1tCitDT05GSUdfRUZJX1BBUlRJVElPTj15CitDT05GSUdfRUZJX1JUQz15CitDT05GSUdfRUZJX1ZBUlM9eQorQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQogQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotQ09ORklHX1JFSVNFUkZTX0ZTPXkKLSMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0Ci1DT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotQ09ORklHX1hGU19GUz15Ci0jIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0ZPUkNFX0NQRUlfUkVUQVJHRVQ9eQorQ09ORklHX0ZVU0lPTl9DVEw9eQorQ09ORklHX0ZVU0lPTl9GQz15CitDT05GSUdfRlVTSU9OX1NQST15CitDT05GSUdfRlVTSU9OPXkKK0NPTkZJR19HQU1FUE9SVD1tCitDT05GSUdfSE9UUExVR19DUFU9eQorQ09ORklHX0hPVFBMVUdfUENJX0FDUEk9bQorQ09ORklHX0hPVFBMVUdfUENJPW0KK0NPTkZJR19IUEVUPXkKK0NPTkZJR19IVUdFVExCRlM9eQorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKK0NPTkZJR19JQTY0X0NZQ0xPTkU9eQorQ09ORklHX0lBNjRfRElHPXkKK0NPTkZJR19JQTY0X0dSQU5VTEVfMTZNQj15CitDT05GSUdfSUE2NF9NQ0FfUkVDT1ZFUlk9eQorQ09ORklHX0lBNjRfUEFHRV9TSVpFXzY0S0I9eQorQ09ORklHX0lBNjRfUEFMSU5GTz15CitDT05GSUdfSURFPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSU5FVD15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLUNPTkZJR19BVVRPRlNfRlM9eQotQ09ORklHX0FVVE9GUzRfRlM9eQotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIworQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKIENPTkZJR19JU085NjYwX0ZTPW0KIENPTkZJR19KT0xJRVQ9eQotIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19VREZfRlM9bQotQ09ORklHX1VERl9OTFM9eQotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotQ09ORklHX05URlNfRlM9bQotIyBDT05GSUdfTlRGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX1JXIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfSFVHRVRMQkZTPXkKLUNPTkZJR19IVUdFVExCX1BBR0U9eQotQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX0tBTExTWU1TX0FMTD15CitDT05GSUdfS0VYRUM9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MjAKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfTUNLSU5MRVk9eQorQ09ORklHX01EX0xJTkVBUj1tCitDT05GSUdfTURfTVVMVElQQVRIPW0KK0NPTkZJR19NRF9SQUlEMD1tCitDT05GSUdfTURfUkFJRDE9bQorQ09ORklHX01EPXkKK0NPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQorQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorQ09ORklHX01PRFZFUlNJT05TPXkKK0NPTkZJR19ORVRDT05TT0xFPXkKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX05FVF9QQ0k9eQorQ09ORklHX05FVF9UVUxJUD15CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WND15CiBDT05GSUdfTkZTX0ZTPW0KIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKLUNPTkZJR19ORlNfRElSRUNUSU89eQotQ09ORklHX05GU0Q9bQotQ09ORklHX05GU0RfVjM9eQotIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAotQ09ORklHX05GU0RfVjQ9eQotQ09ORklHX05GU0RfVENQPXkKLUNPTkZJR19MT0NLRD1tCi1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX0VYUE9SVEZTPW0KLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9bQotQ09ORklHX1NVTlJQQ19HU1M9bQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotQ09ORklHX1NNQl9GUz1tCi1DT05GSUdfU01CX05MU19ERUZBVUxUPXkKLUNPTkZJR19TTUJfTkxTX1JFTU9URT0iY3A0MzciCi1DT05GSUdfQ0lGUz1tCi0jIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19TR0lfUEFSVElUSU9OPXkKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX0VGSV9QQVJUSVRJT049eQotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KQEAgLTExNDQsMTUgKzEyMywxNCBAQAogQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQogQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQogQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQotQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQotQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQotQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQotQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQogQ09ORklHX05MU19DT0RFUEFHRV84NzQ9bQotQ09ORklHX05MU19JU084ODU5Xzg9bQotQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT1tCi0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQorQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQorQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQorQ09ORklHX05MU19JU084ODU5XzEzPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xND1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQogQ09ORklHX05MU19JU084ODU5XzE9eQogQ09ORklHX05MU19JU084ODU5XzI9bQogQ09ORklHX05MU19JU084ODU5XzM9bQpAQCAtMTE2MCwxMjAgKzEzOCw1MCBAQAogQ09ORklHX05MU19JU084ODU5XzU9bQogQ09ORklHX05MU19JU084ODU5XzY9bQogQ09ORklHX05MU19JU084ODU5Xzc9bQorQ09ORklHX05MU19JU084ODU5Xzg9bQogQ09ORklHX05MU19JU084ODU5Xzk9bQotQ09ORklHX05MU19JU084ODU5XzEzPW0KLUNPTkZJR19OTFNfSVNPODg1OV8xND1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMTU9bQogQ09ORklHX05MU19LT0k4X1I9bQogQ09ORklHX05MU19LT0k4X1U9bQogQ09ORklHX05MU19VVEY4PW0KLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRPXkKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci0KLSMKLSMgSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotQ09ORklHX0lBNjRfR1JBTlVMRV8xNk1CPXkKLSMgQ09ORklHX0lBNjRfR1JBTlVMRV82NE1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfUFJJTlRfSEFaQVJEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ESVNBQkxFX1ZIUFQgaXMgbm90IHNldAotIyBDT05GSUdfSUE2NF9ERUJVR19DTVBYQ0hHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfREVCVUdfSVJRIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotQ09ORklHX0NSWVBUT19NQU5BR0VSPW0KLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0VDQj1tCi1DT05GSUdfQ1JZUFRPX0NCQz1tCi1DT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPW0KLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15CitDT05GSUdfTlJfQ1BVUz0xNgorQ09ORklHX05URlNfRlM9bQorQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKK0NPTkZJR19QRVJGTU9OPXkKK0NPTkZJR19QRVJNSVRfQlNQX1JFTU9WRT15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19SQVdfRFJJVkVSPW0KK0NPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQorQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZPXkKK0NPTkZJR19SRUlTRVJGU19GU19YQVRUUj15CitDT05GSUdfUkVJU0VSRlNfRlM9eQorQ09ORklHX1NDU0lfUUxPR0lDXzEyODA9eQorQ09ORklHX1NDU0lfU1lNNTNDOFhYXzI9eQorQ09ORklHX1NDU0k9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz02CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEPXkKKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAorQ09ORklHX1NHSV9QQVJUSVRJT049eQorQ09ORklHX1NNQl9GUz1tCitDT05GSUdfU01CX05MU19ERUZBVUxUPXkKK0NPTkZJR19TTVA9eQorQ09ORklHX1NZTl9DT09LSUVTPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19USUdPTjM9eQorQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UVUxJUD1tCitDT05GSUdfVURGX0ZTPW0KK0NPTkZJR19VTklYPXkKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorQ09ORklHX1VTQl9FSENJX0hDRD1tCitDT05GSUdfVVNCX09IQ0lfSENEPW0KK0NPTkZJR19VU0JfU1RPUkFHRT1tCitDT05GSUdfVVNCX1VIQ0lfSENEPXkKK0NPTkZJR19VU0I9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX1hGU19GUz15CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvY29uZmlncy94ZW5fZG9tdV9kZWZjb25maWcgYi9hcmNoL2lhNjQvY29uZmlncy94ZW5fZG9tdV9kZWZjb25maWcKaW5kZXggYzY3ZWFmYy4uNWY2ZDI4NCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2NvbmZpZ3MveGVuX2RvbXVfZGVmY29uZmlnCisrKyBiL2FyY2gvaWE2NC9jb25maWdzL3hlbl9kb211X2RlZmNvbmZpZwpAQCAtMSwxMzc0ICsxLDEyMSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMQotIyBGcmkgSmFuIDE2IDExOjQ5OjU5IDIwMDkKLSMKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci1DT05GSUdfUE9TSVhfTVFVRVVFPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0yMAotQ09ORklHX0hBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0s9eQotIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIENvbnRyb2wgR3JvdXAgc3VwcG9ydAotIwotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfTkFNRVNQQUNFUz15Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci1DT05GSUdfS0FMTFNZTVNfQUxMPXkKLUNPTkZJR19LQUxMU1lNU19TVFJJUF9HRU5FUkFURUQ9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUENJX1FVSVJLUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLUNPTkZJR19IQVZFX0RNQV9BVFRSUz15Ci1DT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAotQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfU1RPUF9NQUNISU5FPXkKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX0ZSRUVaRVI9eQotCi0jCi0jIFByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcwotIwotQ09ORklHX0lBNjQ9eQotQ09ORklHXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfUVVJQ0tMSVNUPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX1NXSU9UTEI9eQotQ09ORklHX0lPTU1VX0hFTFBFUj15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUE9eQotQ09ORklHX0RNST15Ci1DT05GSUdfRUZJPXkKLUNPTkZJR19HRU5FUklDX0lPTUFQPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX1BBUkFWSVJUX0dVRVNUPXkKLUNPTkZJR19QQVJBVklSVD15Ci1DT05GSUdfWEVOPXkKLUNPTkZJR19YRU5fWEVOQ09NTT15Ci1DT05GSUdfTk9fSURMRV9IWj15Ci0jIENPTkZJR19JQTY0X0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfSUE2NF9ESUcgaXMgbm90IHNldAotIyBDT05GSUdfSUE2NF9ESUdfVlREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfSFBfWlgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfSFBfWlgxX1NXSU9UTEIgaXMgbm90IHNldAotIyBDT05GSUdfSUE2NF9TR0lfU04yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfU0dJX1VWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfSFBfU0lNIGlzIG5vdCBzZXQKLUNPTkZJR19JQTY0X1hFTl9HVUVTVD15Ci0jIENPTkZJR19JVEFOSVVNIGlzIG5vdCBzZXQKLUNPTkZJR19NQ0tJTkxFWT15Ci0jIENPTkZJR19JQTY0X1BBR0VfU0laRV80S0IgaXMgbm90IHNldAotIyBDT05GSUdfSUE2NF9QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKLUNPTkZJR19JQTY0X1BBR0VfU0laRV8xNktCPXkKLSMgQ09ORklHX0lBNjRfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAotQ09ORklHX1BHVEFCTEVfMz15Ci0jIENPTkZJR19QR1RBQkxFXzQgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKLUNPTkZJR19JQTY0X0wxX0NBQ0hFX1NISUZUPTcKLUNPTkZJR19JQTY0X0NZQ0xPTkU9eQotQ09ORklHX0lPU0FQSUM9eQotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTcKLSMgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcgaXMgbm90IHNldAotQ09ORklHX1NNUD15Ci1DT05GSUdfTlJfQ1BVUz0xNgotQ09ORklHX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15Ci0jIENPTkZJR19TQ0hFRF9TTVQgaXMgbm90IHNldAotQ09ORklHX1BFUk1JVF9CU1BfUkVNT1ZFPXkKLUNPTkZJR19GT1JDRV9DUEVJX1JFVEFSR0VUPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX05SX1FVSUNLPTEKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKLUNPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfVklSVFVBTF9NRU1fTUFQPXkKLUNPTkZJR19IT0xFU19JTl9aT05FPXkKLUNPTkZJR19JQTY0X01DQV9SRUNPVkVSWT15Ci1DT05GSUdfUEVSRk1PTj15Ci1DT05GSUdfSUE2NF9QQUxJTkZPPXkKLSMgQ09ORklHX0lBNjRfTUNfRVJSX0lOSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQTY0X0VTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQTY0X0hQX0FNTF9ORlcgaXMgbm90IHNldAotQ09ORklHX0tFWEVDPXkKLSMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAotCi0jCi0jIEZpcm13YXJlIERyaXZlcnMKLSMKLSMgQ09ORklHX0ZJUk1XQVJFX01FTU1BUCBpcyBub3Qgc2V0Ci1DT05GSUdfRUZJX1ZBUlM9eQotQ09ORklHX0VGSV9QQ0RQPXkKLUNPTkZJR19ETUlJRD15Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9NSVNDPW0KLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IGFuZCBBQ1BJIG9wdGlvbnMKLSMKLUNPTkZJR19QTT15Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkQ9eQotQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15Ci1DT05GSUdfQUNQST15Ci1DT05GSUdfQUNQSV9TTEVFUD15Ci1DT05GSUdfQUNQSV9QUk9DRlM9eQotQ09ORklHX0FDUElfUFJPQ0ZTX1BPV0VSPXkKLUNPTkZJR19BQ1BJX1NZU0ZTX1BPV0VSPXkKLUNPTkZJR19BQ1BJX1BST0NfRVZFTlQ9eQogQ09ORklHX0FDUElfQlVUVE9OPW0KLUNPTkZJR19BQ1BJX0ZBTj1tCi0jIENPTkZJR19BQ1BJX0RPQ0sgaXMgbm90IHNldAotQ09ORklHX0FDUElfUFJPQ0VTU09SPW0KLUNPTkZJR19BQ1BJX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19BQ1BJX1RIRVJNQUw9bQotIyBDT05GSUdfQUNQSV9DVVNUT01fRFNEVCBpcyBub3Qgc2V0Ci1DT05GSUdfQUNQSV9CTEFDS0xJU1RfWUVBUj0wCi0jIENPTkZJR19BQ1BJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDUElfUENJX1NMT1QgaXMgbm90IHNldAotQ09ORklHX0FDUElfU1lTVEVNPXkKIENPTkZJR19BQ1BJX0NPTlRBSU5FUj1tCi0KLSMKLSMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCi0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0KLSMKLSMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBKQotIwotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVR19QQ0k9bQotIyBDT05GSUdfSE9UUExVR19QQ0lfRkFLRSBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVR19QQ0lfQUNQST1tCi0jIENPTkZJR19IT1RQTFVHX1BDSV9BQ1BJX0lCTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSV9DUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJX1NIUEMgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQotQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotQ09ORklHX0FSUEQ9eQotQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX1BOUD15Ci1DT05GSUdfUE5QX0RFQlVHX01FU1NBR0VTPXkKLQotIwotIyBQcm90b2NvbHMKLSMKLUNPTkZJR19QTlBBQ1BJPXkKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD1tCi1DT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KLUNPTkZJR19CTEtfREVWX05CRD1tCi0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19YRU5fQkxLREVWX0ZST05URU5EPXkKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotQ09ORklHX0lERT15Ci0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotQ09ORklHX0lERV9USU1JTkdTPXkKLUNPTkZJR19JREVfQVRBUEk9eQotIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX0dEPXkKLUNPTkZJR19JREVfR0RfQVRBPXkKLSMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVDRD15Ci1DT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15Ci0jIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVBQ1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfUFJPQ19GUz15Ci0KLSMKLSMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwotIwotIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVBOUCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKLQotIwotIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKLSMKLUNPTkZJR19CTEtfREVWX0lERVBDST15Ci1DT05GSUdfSURFUENJX1BDSUJVU19PUkRFUj15Ci0jIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0dFTkVSSUM9eQotIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQotIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfQ01ENjRYPXkKLSMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUElJWD15Ci0jIENPTkZJR19CTEtfREVWX0lUODE3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQT15Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTkVUTElOSz15Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwotQ09ORklHX0JMS19ERVZfU0Q9eQotQ09ORklHX0NIUl9ERVZfU1Q9bQotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1NSPW0KLSMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKLUNPTkZJR19DSFJfREVWX1NHPW0KLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLUNPTkZJR19TQ1NJX1NQSV9BVFRSUz15Ci1DT05GSUdfU0NTSV9GQ19BVFRSUz15Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9TWU01M0M4WFhfMj15Ci1DT05GSUdfU0NTSV9TWU01M0M4WFhfRE1BX0FERFJFU1NJTkdfTU9ERT0xCi1DT05GSUdfU0NTSV9TWU01M0M4WFhfREVGQVVMVF9UQUdTPTE2Ci1DT05GSUdfU0NTSV9TWU01M0M4WFhfTUFYX1RBR1M9NjQKLUNPTkZJR19TQ1NJX1NZTTUzQzhYWF9NTUlPPXkKLUNPTkZJR19TQ1NJX1FMT0dJQ18xMjgwPXkKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19NRD15Ci1DT05GSUdfQkxLX0RFVl9NRD1tCi1DT05GSUdfTURfTElORUFSPW0KLUNPTkZJR19NRF9SQUlEMD1tCi1DT05GSUdfTURfUkFJRDE9bQotIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EX1JBSUQ0NTYgaXMgbm90IHNldAotQ09ORklHX01EX01VTFRJUEFUSD1tCi0jIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfRE09bQotIyBDT05GSUdfRE1fREVCVUcgaXMgbm90IHNldAotQ09ORklHX0RNX0NSWVBUPW0KLUNPTkZJR19ETV9TTkFQU0hPVD1tCi1DT05GSUdfRE1fTUlSUk9SPW0KLUNPTkZJR19ETV9aRVJPPW0KLSMgQ09ORklHX0RNX01VTFRJUEFUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9VRVZFTlQgaXMgbm90IHNldAotQ09ORklHX0ZVU0lPTj15Ci1DT05GSUdfRlVTSU9OX1NQST15Ci1DT05GSUdfRlVTSU9OX0ZDPXkKLSMgQ09ORklHX0ZVU0lPTl9TQVMgaXMgbm90IHNldAotQ09ORklHX0ZVU0lPTl9NQVhfU0dFPTEyOAotQ09ORklHX0ZVU0lPTl9DVEw9eQotIyBDT05GSUdfRlVTSU9OX0xPR0dJTkcgaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfRFVNTVk9bQotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0IxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST1tCi0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfVFVMSVA9eQotIyBDT05GSUdfREUyMTA0WCBpcyBub3Qgc2V0Ci1DT05GSUdfVFVMSVA9bQotIyBDT05GSUdfVFVMSVBfTVdJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTElQX01NSU8gaXMgbm90IHNldAotIyBDT05GSUdfVFVMSVBfTkFQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERTRYNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU5CT05EXzg0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETTkxMDIgaXMgbm90IHNldAotIyBDT05GSUdfVUxJNTI2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfUENJPXkKLSMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAotIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKLUNPTkZJR19FMTAwPW0KLSMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotQ09ORklHX0UxMDAwPXkKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotQ09ORklHX1RJR09OMz15Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRkMgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLUNPTkZJR19YRU5fTkVUREVWX0ZST05URU5EPXkKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRDT05TT0xFPXkKLSMgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUUE9MTD15Ci0jIENPTkZJR19ORVRQT0xMX1RSQVAgaXMgbm90IHNldAotQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci1DT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQotQ09ORklHX01PVVNFX1BTMj15Ci1DT05GSUdfTU9VU0VfUFMyX0FMUFM9eQotQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQotQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQotQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSz15Ci1DT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQotIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19JODA0Mj15Ci0jIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fTElCUFMyPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci1DT05GSUdfR0FNRVBPUlQ9bQotIyBDT05GSUdfR0FNRVBPUlRfTlM1NTggaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlRfTDQgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlRfRU1VMTBLMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVF9GTTgwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLUNPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQ9eQotIyBDT05GSUdfQ09NUFVUT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPQ0tFVFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1lDTEFERVMgaXMgbm90IHNldAotIyBDT05GSUdfRElHSUVQQ0EgaXMgbm90IHNldAotIyBDT05GSUdfTU9YQV9JTlRFTExJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1hBX1NNQVJUSU8gaXMgbm90IHNldAotIyBDT05GSUdfSVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTkNMSU5LTVAgaXMgbm90IHNldAotIyBDT05GSUdfU1lOQ0xJTktfR1QgaXMgbm90IHNldAotIyBDT05GSUdfTl9IRExDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JJU0NPTTggaXMgbm90IHNldAotIyBDT05GSUdfU1BFQ0lBTElYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFMRFJWIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QTlA9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTYKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci1DT05GSUdfSFZDX0RSSVZFUj15Ci1DT05GSUdfSFZDX0lSUT15Ci1DT05GSUdfSFZDX1hFTj15Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLUNPTkZJR19FRklfUlRDPXkKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLUNPTkZJR19SQVdfRFJJVkVSPW0KLUNPTkZJR19NQVhfUkFXX0RFVlM9MjU2Ci1DT05GSUdfSFBFVD15Ci1DT05GSUdfSFBFVF9NTUFQPXkKLSMgQ09ORklHX0hBTkdDSEVDS19USU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLUNPTkZJR19JMkM9bQotQ09ORklHX0kyQ19CT0FSRElORk89eQotIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci1DT05GSUdfSTJDX0FMR09CSVQ9bQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotQ09ORklHX1BPV0VSX1NVUFBMWT15Ci0jIENPTkZJR19QT1dFUl9TVVBQTFlfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUERBX1BPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBVFRFUllfRFMyNzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBVFRFUllfQlEyN3gwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTElTM0xWMDJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotQ09ORklHX1RIRVJNQUw9bQotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLUNPTkZJR19EQUI9eQotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIworQ09ORklHX0FDUElfRkFOPW0KK0NPTkZJR19BQ1BJX1BST0NFU1NPUj1tCitDT05GSUdfQUNQSV9QUk9DRlM9eQogQ09ORklHX0FHUD1tCitDT05GSUdfQVJQRD15CitDT05GSUdfQVVUT0ZTNF9GUz15CitDT05GSUdfQVVUT0ZTX0ZTPXkKK0NPTkZJR19CSU5GTVRfTUlTQz1tCisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9DTUQ2NFg9eQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCitDT05GSUdfQkxLX0RFVl9ETT1tCitDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKK0NPTkZJR19CTEtfREVWX0lERUNEPXkKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfQkxLX0RFVl9MT09QPW0KK0NPTkZJR19CTEtfREVWX01EPW0KK0NPTkZJR19CTEtfREVWX05CRD1tCitDT05GSUdfQkxLX0RFVl9QSUlYPXkKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQkxLX0RFVl9TUj1tCitDT05GSUdfQ0hSX0RFVl9TRz1tCitDT05GSUdfQ0hSX0RFVl9TVD1tCitDT05GSUdfQ0lGUz1tCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj1tCitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX1BDQkM9bQorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfREVCVUdfTVVURVhFUz15CitDT05GSUdfRE1fQ1JZUFQ9bQorQ09ORklHX0RNX01JUlJPUj1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX1pFUk89bQogQ09ORklHX0RSTT1tCi1DT05GSUdfRFJNX1RERlg9bQorQ09ORklHX0RSTV9NR0E9bQogQ09ORklHX0RSTV9SMTI4PW0KIENPTkZJR19EUk1fUkFERU9OPW0KLUNPTkZJR19EUk1fTUdBPW0KIENPTkZJR19EUk1fU0lTPW0KLSMgQ09ORklHX0RSTV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfRFJNX1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi1DT05GSUdfVkdBX0NPTlNPTEU9eQotIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi1DT05GSUdfSElEX0NPTVBBVD15Ci1DT05GSUdfSElEX0E0VEVDSD15Ci1DT05GSUdfSElEX0FQUExFPXkKLUNPTkZJR19ISURfQkVMS0lOPXkKLUNPTkZJR19ISURfQ0hFUlJZPXkKLUNPTkZJR19ISURfQ0hJQ09OWT15Ci1DT05GSUdfSElEX0NZUFJFU1M9eQotQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfRFJNX1RERlg9bQorQ09ORklHX0RVTU1ZPW0KK0NPTkZJR19FMTAwMD15CitDT05GSUdfRTEwMD1tCitDT05GSUdfRUZJX1BBUlRJVElPTj15CitDT05GSUdfRUZJX1JUQz15CitDT05GSUdfRUZJX1ZBUlM9eQorQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19GT1JDRV9DUEVJX1JFVEFSR0VUPXkKK0NPTkZJR19GVVNJT05fQ1RMPXkKK0NPTkZJR19GVVNJT05fRkM9eQorQ09ORklHX0ZVU0lPTl9TUEk9eQorQ09ORklHX0ZVU0lPTj15CitDT05GSUdfR0FNRVBPUlQ9bQogQ09ORklHX0hJRF9HWVJBVElPTj15Ci1DT05GSUdfSElEX0xPR0lURUNIPXkKLSMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfTUlDUk9TT0ZUPXkKLUNPTkZJR19ISURfTU9OVEVSRVk9eQogQ09ORklHX0hJRF9OVFJJRz15CiBDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKLSMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfUEVUQUxZTlg9eQogQ09ORklHX0hJRF9TQU1TVU5HPXkKIENPTkZJR19ISURfU09OWT15CiBDT05GSUdfSElEX1NVTlBMVVM9eQotIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfVE9QU0VFRD15Ci0jIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAotIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCi1DT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VIQ0lfSENEPW0KLSMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEPW0KLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotQ09ORklHX1VTQl9VSENJX0hDRD15Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOwotIwotCi0jCi0jIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCi0jCi1DT05GSUdfVVNCX1NUT1JBR0U9bQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLUNPTkZJR19YRU5fQkFMTE9PTj15Ci1DT05GSUdfWEVOX1NDUlVCX1BBR0VTPXkKLUNPTkZJR19YRU5GUz15Ci1DT05GSUdfWEVOX0NPTVBBVF9YRU5GUz15Ci0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TUEVDIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLUNPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfRVhUMl9GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci1DT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQotQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLUNPTkZJR19GU19NQkNBQ0hFPXkKLUNPTkZJR19SRUlTRVJGU19GUz15Ci0jIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAotQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSPXkKLUNPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX1hGU19GUz15Ci0jIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0hPVFBMVUdfQ1BVPXkKK0NPTkZJR19IT1RQTFVHX1BDSV9BQ1BJPW0KK0NPTkZJR19IT1RQTFVHX1BDST1tCitDT05GSUdfSFBFVD15CitDT05GSUdfSFVHRVRMQkZTPXkKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CitDT05GSUdfSUE2NF9DWUNMT05FPXkKK0NPTkZJR19JQTY0X0dSQU5VTEVfMTZNQj15CitDT05GSUdfSUE2NF9NQ0FfUkVDT1ZFUlk9eQorQ09ORklHX0lBNjRfUEFMSU5GTz15CitDT05GSUdfSUE2NF9YRU5fR1VFU1Q9eQorQ09ORklHX0lERT15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfSUtDT05GSUc9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfQVVUT0ZTX0ZTPXkKLUNPTkZJR19BVVRPRlM0X0ZTPXkKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiBDT05GSUdfSVNPOTY2MF9GUz1tCiBDT05GSUdfSk9MSUVUPXkKLSMgQ09ORklHX1pJU09GUyBpcyBub3Qgc2V0Ci1DT05GSUdfVURGX0ZTPW0KLUNPTkZJR19VREZfTkxTPXkKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLUNPTkZJR19OVEZTX0ZTPW0KLSMgQ09ORklHX05URlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19SVyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19IVUdFVExCRlM9eQotQ09ORklHX0hVR0VUTEJfUEFHRT15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CitDT05GSUdfS0VYRUM9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MjAKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfTUNLSU5MRVk9eQorQ09ORklHX01EX0xJTkVBUj1tCitDT05GSUdfTURfTVVMVElQQVRIPW0KK0NPTkZJR19NRF9SQUlEMD1tCitDT05GSUdfTURfUkFJRDE9bQorQ09ORklHX01EPXkKK0NPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQorQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorQ09ORklHX01PRFZFUlNJT05TPXkKK0NPTkZJR19ORVRDT05TT0xFPXkKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX05FVF9QQ0k9eQorQ09ORklHX05FVF9UVUxJUD15CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WND15CiBDT05GSUdfTkZTX0ZTPW0KIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKLUNPTkZJR19ORlNEPW0KLUNPTkZJR19ORlNEX1YzPXkKLSMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEX1Y0PXkKLUNPTkZJR19MT0NLRD1tCi1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX0VYUE9SVEZTPW0KLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9bQotQ09ORklHX1NVTlJQQ19HU1M9bQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9bQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci1DT05GSUdfU01CX0ZTPW0KLUNPTkZJR19TTUJfTkxTX0RFRkFVTFQ9eQotQ09ORklHX1NNQl9OTFNfUkVNT1RFPSJjcDQzNyIKLUNPTkZJR19DSUZTPW0KLSMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX1NHSV9QQVJUSVRJT049eQotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfRUZJX1BBUlRJVElPTj15Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KQEAgLTEzODQsMTUgKzEzMSwxNCBAQAogQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQogQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQogQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQotQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQotQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQotQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQotQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQogQ09ORklHX05MU19DT0RFUEFHRV84NzQ9bQotQ09ORklHX05MU19JU084ODU5Xzg9bQotQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT1tCi0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQorQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQorQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQorQ09ORklHX05MU19JU084ODU5XzEzPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xND1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQogQ09ORklHX05MU19JU084ODU5XzE9eQogQ09ORklHX05MU19JU084ODU5XzI9bQogQ09ORklHX05MU19JU084ODU5XzM9bQpAQCAtMTQwMCwyMDAgKzE0Niw1NCBAQAogQ09ORklHX05MU19JU084ODU5XzU9bQogQ09ORklHX05MU19JU084ODU5XzY9bQogQ09ORklHX05MU19JU084ODU5Xzc9bQorQ09ORklHX05MU19JU084ODU5Xzg9bQogQ09ORklHX05MU19JU084ODU5Xzk9bQotQ09ORklHX05MU19JU084ODU5XzEzPW0KLUNPTkZJR19OTFNfSVNPODg1OV8xND1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMTU9bQogQ09ORklHX05MU19LT0k4X1I9bQogQ09ORklHX05MU19LT0k4X1U9bQogQ09ORklHX05MU19VVEY4PW0KLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0yMDQ4Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKK0NPTkZJR19OUl9DUFVTPTE2CitDT05GSUdfTlRGU19GUz1tCitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQVJBVklSVF9HVUVTVD15CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKK0NPTkZJR19QRVJGTU9OPXkKK0NPTkZJR19QRVJNSVRfQlNQX1JFTU9WRT15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19SQVdfRFJJVkVSPW0KICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAotCi0jCi0jIFRyYWNlcnMKLSMKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19JQTY0X0dSQU5VTEVfMTZNQj15Ci0jIENPTkZJR19JQTY0X0dSQU5VTEVfNjRNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQTY0X1BSSU5UX0hBWkFSRFMgaXMgbm90IHNldAotIyBDT05GSUdfRElTQUJMRV9WSFBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfREVCVUdfQ01QWENIRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQTY0X0RFQlVHX0lSUSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9bQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotQ09ORklHX0NSWVBUT19DQkM9bQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fRUNCPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9bQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKLSMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1ZNPXkKLUNPTkZJR19WSVJUVUFMSVpBVElPTj15Ci0jIENPTkZJR19LVk0gaXMgbm90IHNldAotIyBDT05GSUdfVklSVElPX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUSU9fQkFMTE9PTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDX0lUVV9UPW0KLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlE9eQotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLSMgQ09ORklHX0lPTU1VX0FQSSBpcyBub3Qgc2V0CitDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWT15CitDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQorQ09ORklHX1JFSVNFUkZTX0ZTPXkKK0NPTkZJR19TQ1NJX1FMT0dJQ18xMjgwPXkKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF8yPXkKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NgorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15CisjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TR0lfUEFSVElUSU9OPXkKK0NPTkZJR19TTUJfRlM9bQorQ09ORklHX1NNQl9OTFNfREVGQVVMVD15CitDT05GSUdfU01QPXkKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfVElHT04zPXkKK0NPTkZJR19UTVBGUz15CitDT05GSUdfVFVMSVA9bQorQ09ORklHX1VERl9GUz1tCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1VOSVg9eQorQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0VIQ0lfSENEPW0KK0NPTkZJR19VU0JfT0hDSV9IQ0Q9bQorQ09ORklHX1VTQl9TVE9SQUdFPW0KK0NPTkZJR19VU0JfVUhDSV9IQ0Q9eQorQ09ORklHX1VTQj15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfWEZTX0ZTPXkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9jb25maWdzL3p4MV9kZWZjb25maWcgYi9hcmNoL2lhNjQvY29uZmlncy96eDFfZGVmY29uZmlnCmluZGV4IDNjZWM2NWIuLmRlMGI2OGUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9jb25maWdzL3p4MV9kZWZjb25maWcKKysrIGIvYXJjaC9pYTY0L2NvbmZpZ3MvengxX2RlZmNvbmZpZwpAQCAtMSwxNDYwICsxLDg1IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjEtcmMzCi0jIFRodSBNYXIgIDggMTE6MDQ6MjAgMjAwNwotIwotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xVQj15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwotQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1RPUF9NQUNISU5FPXkKLQotIwotIyBCbG9jayBsYXllcgotIwotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLQotIwotIyBQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMKLSMKLUNPTkZJR19JQTY0PXkKLUNPTkZJR182NEJJVD15Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX01NVT15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19ETUk9eQotQ09ORklHX0VGST15Ci1DT05GSUdfR0VORVJJQ19JT01BUD15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BVURJVF9BUkNIPXkKLSMgQ09ORklHX0lBNjRfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQTY0X0RJRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUE2NF9IUF9aWDE9eQotIyBDT05GSUdfSUE2NF9IUF9aWDFfU1dJT1RMQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQTY0X1NHSV9TTjIgaXMgbm90IHNldAotIyBDT05GSUdfSUE2NF9IUF9TSU0gaXMgbm90IHNldAotIyBDT05GSUdfSVRBTklVTSBpcyBub3Qgc2V0Ci1DT05GSUdfTUNLSU5MRVk9eQotIyBDT05GSUdfSUE2NF9QQUdFX1NJWkVfNEtCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0Ci1DT05GSUdfSUE2NF9QQUdFX1NJWkVfMTZLQj15Ci0jIENPTkZJR19JQTY0X1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKLUNPTkZJR19QR1RBQkxFXzM9eQotIyBDT05GSUdfUEdUQUJMRV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19JQTY0X0wxX0NBQ0hFX1NISUZUPTcKLSMgQ09ORklHX0lBNjRfQ1lDTE9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfSU9TQVBJQz15Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xNwotQ09ORklHX1NNUD15Ci1DT05GSUdfTlJfQ1BVUz0xNgotQ09ORklHX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci0jIENPTkZJR19TQ0hFRF9TTVQgaXMgbm90IHNldAotIyBDT05GSUdfUEVSTUlUX0JTUF9SRU1PVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9ERUZBVUxUPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfVklSVFVBTF9NRU1fTUFQPXkKLUNPTkZJR19IT0xFU19JTl9aT05FPXkKLUNPTkZJR19JQTY0X01DQV9SRUNPVkVSWT15Ci1DT05GSUdfUEVSRk1PTj15Ci1DT05GSUdfSUE2NF9QQUxJTkZPPXkKLSMgQ09ORklHX0lBNjRfRVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFTSF9EVU1QPXkKLQotIwotIyBGaXJtd2FyZSBEcml2ZXJzCi0jCi1DT05GSUdfRUZJX1ZBUlM9eQotQ09ORklHX0VGSV9QQ0RQPXkKLUNPTkZJR19CSU5GTVRfRUxGPXkKLUNPTkZJR19CSU5GTVRfTUlTQz15Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBhbmQgQUNQSQotIwotQ09ORklHX1BNPXkKLUNPTkZJR19QTV9MRUdBQ1k9eQotIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUE1fU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgQUNQSSAoQWR2YW5jZWQgQ29uZmlndXJhdGlvbiBhbmQgUG93ZXIgSW50ZXJmYWNlKSBTdXBwb3J0Ci0jCi1DT05GSUdfQUNQST15CiBDT05GSUdfQUNQSV9QUk9DRlM9eQotQ09ORklHX0FDUElfQlVUVE9OPXkKLUNPTkZJR19BQ1BJX0ZBTj15Ci0jIENPTkZJR19BQ1BJX0RPQ0sgaXMgbm90IHNldAotQ09ORklHX0FDUElfUFJPQ0VTU09SPXkKLUNPTkZJR19BQ1BJX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19BQ1BJX1RIRVJNQUw9eQotQ09ORklHX0FDUElfQkxBQ0tMSVNUX1lFQVI9MAotIyBDT05GSUdfQUNQSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQUNQSV9FQz15Ci1DT05GSUdfQUNQSV9QT1dFUj15Ci1DT05GSUdfQUNQSV9TWVNURU09eQotQ09ORklHX0FDUElfQ09OVEFJTkVSPXkKLQotIwotIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKLSMKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEpCi0jCi1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci0jIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIwotQ09ORklHX0hPVFBMVUdfUENJPXkKLSMgQ09ORklHX0hPVFBMVUdfUENJX0ZBS0UgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUdfUENJX0FDUEk9eQotIyBDT05GSUdfSE9UUExVR19QQ0lfQUNQSV9JQk0gaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0lfQ1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSV9TSFBDIGlzIG5vdCBzZXQKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RDUFBST0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCi0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLUNPTkZJR19QTlA9eQotIyBDT05GSUdfUE5QX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBQcm90b2NvbHMKLSMKLUNPTkZJR19QTlBBQ1BJPXkKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKLUNPTkZJR19JREU9eQotQ09ORklHX0lERV9NQVhfSFdJRlM9NAotQ09ORklHX0JMS19ERVZfSURFPXkKLQotIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci0jIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFQ0Q9eQotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUFDUEkgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLSMgQ09ORklHX0lERV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFUE5QIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERVBDST15Ci1DT05GSUdfSURFUENJX1NIQVJFX0lSUT15Ci0jIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0dFTkVSSUM9eQotIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQotIyBDT05GSUdfQkxLX0RFVl9JREVETUFfRk9SQ0VEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9QQ0lfQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0CitDT05GSUdfQUdQX0hQX1pYMT15CitDT05GSUdfQUdQPXkKK0NPTkZJR19BVVRPRlNfRlM9eQorQ09ORklHX0JJTkZNVF9NSVNDPXkKIENPTkZJR19CTEtfREVWX0NNRDY0WD15Ci0jIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DWTgyQzY5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVETUE9eQotIyBDT05GSUdfSURFRE1BX0lWQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX05FVExJTks9eQotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKK0NPTkZJR19CTEtfREVWX0dFTkVSSUM9eQorQ09ORklHX0JMS19ERVZfSURFQ0Q9eQorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19DSFJfREVWX1NUPXkKLUNPTkZJR19DSFJfREVWX09TU1Q9eQotQ09ORklHX0JMS19ERVZfU1I9eQogQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKK0NPTkZJR19CTEtfREVWX1NSPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKK0NPTkZJR19DSFJfREVWX09TU1Q9eQogQ09ORklHX0NIUl9ERVZfU0c9eQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKLUNPTkZJR19TQ1NJX0NPTlNUQU5UUz15Ci1DT05GSUdfU0NTSV9MT0dHSU5HPXkKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi1DT05GSUdfU0NTSV9TUElfQVRUUlM9eQotQ09ORklHX1NDU0lfRkNfQVRUUlM9eQotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1NZTTUzQzhYWF8yPXkKLUNPTkZJR19TQ1NJX1NZTTUzQzhYWF9ETUFfQUREUkVTU0lOR19NT0RFPTEKLUNPTkZJR19TQ1NJX1NZTTUzQzhYWF9ERUZBVUxUX1RBR1M9MTYKLUNPTkZJR19TQ1NJX1NZTTUzQzhYWF9NQVhfVEFHUz02NAotQ09ORklHX1NDU0lfU1lNNTNDOFhYX01NSU89eQotQ09ORklHX1NDU0lfUUxPR0lDXzEyODA9eQotIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwotIwotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19GVVNJT049eQotQ09ORklHX0ZVU0lPTl9TUEk9eQotQ09ORklHX0ZVU0lPTl9GQz15Ci0jIENPTkZJR19GVVNJT05fU0FTIGlzIG5vdCBzZXQKLUNPTkZJR19GVVNJT05fTUFYX1NHRT0xMjgKLUNPTkZJR19GVVNJT05fQ1RMPW0KLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMk8gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DSFJfREVWX1NUPXkKK0NPTkZJR19DUkFTSF9EVU1QPXkKK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fUENCQz1tCitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKK0NPTkZJR19EUk1fUkFERU9OPXkKK0NPTkZJR19EUk09eQogQ09ORklHX0RVTU1ZPXkKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0IxMDAwIGlzIG5vdCBzZXQKLQotIwotIyBBUkNuZXQgZGV2aWNlcwotIwotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCi1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19ORVRfVFVMSVA9eQotIyBDT05GSUdfREUyMTA0WCBpcyBub3Qgc2V0Ci1DT05GSUdfVFVMSVA9eQotQ09ORklHX1RVTElQX01XST15Ci1DT05GSUdfVFVMSVBfTU1JTz15Ci1DT05GSUdfVFVMSVBfTkFQST15Ci1DT05GSUdfVFVMSVBfTkFQSV9IV19NSVRJR0FUSU9OPXkKLSMgQ09ORklHX0RFNFg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTkJPTkRfODQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTEwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTEk1MjZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfUENJPXkKLSMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAotIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RHUlMgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAotQ09ORklHX0UxMDA9eQotIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAotIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAotIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMDA9eQotIyBDT05GSUdfRTEwMDBfTkFQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMF9ESVNBQkxFX1BBQ0tFVF9TUExJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotQ09ORklHX1RJR09OMz15Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCi0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci1DT05GSUdfSU5QVVRfSk9ZREVWPXkKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwPXkKK0NPTkZJR19FRklfUEFSVElUSU9OPXkKK0NPTkZJR19FRklfUlRDPXkKK0NPTkZJR19FRklfVkFSUz15CitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19FWFQyX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQyX0ZTPXkKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19GQl9SQURFT05fREVCVUc9eQorQ09ORklHX0ZCX1JBREVPTj15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorQ09ORklHX0ZVU0lPTl9DVEw9bQorQ09ORklHX0ZVU0lPTl9GQz15CitDT05GSUdfRlVTSU9OX1NQST15CitDT05GSUdfRlVTSU9OPXkKK0NPTkZJR19IT1RQTFVHX0NQVT15CitDT05GSUdfSE9UUExVR19QQ0lfQUNQST15CitDT05GSUdfSE9UUExVR19QQ0k9eQorQ09ORklHX0hVR0VUTEJGUz15CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JQTY0X0hQX1pYMT15CitDT05GSUdfSUE2NF9NQ0FfUkVDT1ZFUlk9eQorQ09ORklHX0lBNjRfUEFMSU5GTz15CitDT05GSUdfSUE2NF9QUklOVF9IQVpBUkRTPXkKK0NPTkZJR19JREU9eQorQ09ORklHX0lORVQ9eQogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIworQ09ORklHX0lOUFVUX0pPWURFVj15CiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci0jIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QTlA9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTgKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci1DT05GSUdfRUZJX1JUQz15Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLUNPTkZJR19BR1A9eQotQ09ORklHX0FHUF9IUF9aWDE9eQotQ09ORklHX0RSTT15Ci0jIENPTkZJR19EUk1fVERGWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk1fUjEyOCBpcyBub3Qgc2V0Ci1DT05GSUdfRFJNX1JBREVPTj15Ci0jIENPTkZJR19EUk1fTUdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfRFJNX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk1fU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfSFBFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU5HQ0hFQ0tfVElNRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0NIQVJERVY9eQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi1DT05GSUdfSTJDX0FMR09CSVQ9eQotQ09ORklHX0kyQ19BTEdPUENGPXkKLSMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBU0VNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCi0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi1DT05GSUdfVklERU9fREVWPXkKLUNPTkZJR19WSURFT19WNEwxPXkKLUNPTkZJR19WSURFT19WNEwxX0NPTVBBVD15Ci1DT05GSUdfVklERU9fVjRMMj15Ci0KLSMKLSMgVmlkZW8gQ2FwdHVyZSBBZGFwdGVycwotIwotCi0jCi0jIFZpZGVvIENhcHR1cmUgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1ZJREVPX0FEVl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fSEVMUEVSX0NISVBTX0FVVE89eQotIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19CVDg0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19DUElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0NQSUEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldAotIyBDT05GSUdfVFVORVJfMzAzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19TVFJBRElTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1pPUkFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1NBQTcxMzQgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTVhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0RQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19IRVhJVU1fT1JJT04gaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fSEVYSVVNX0dFTUlOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19DWDg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0NBRkVfQ0NJQyBpcyBub3Qgc2V0Ci0KLSMKLSMgVjRMIFVTQiBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19QVlJVU0IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0VNMjhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19VU0JWSVNJT04gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1ZJQ0FNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JQk1DQU0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tPTklDQVdDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9RVUlDS0NBTV9NRVNTRU5HRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VUNjFYMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09WQ0FNQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVzk5NjhDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1Y1MTEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTjlDMTAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVFY2ODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pDMDMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFdDIGlzIG5vdCBzZXQKLQotIwotIyBSYWRpbyBBZGFwdGVycwotIwotIyBDT05GSUdfUkFESU9fR0VNVEVLX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQURJT19NQVhJUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfUkFESU9fTUFFU1RSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFNCUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLUNPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQotQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQotQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9bQotQ09ORklHX0ZCPXkKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotQ09ORklHX0ZCX0REQz15Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQkFDS0xJR0hUPXkKLUNPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfUkFERU9OPXkKLUNPTkZJR19GQl9SQURFT05fSTJDPXkKLUNPTkZJR19GQl9SQURFT05fQkFDS0xJR0hUPXkKLUNPTkZJR19GQl9SQURFT05fREVCVUc9eQotIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAotIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi1DT05GSUdfVkdBX0NPTlNPTEU9eQotIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci1DT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19GT05UXzh4OD15Ci1DT05GSUdfRk9OVF84eDE2PXkKLQotIwotIyBMb2dvIGNvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19MT0dPPXkKLSMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKLUNPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQotCi0jCi0jIFNvdW5kCi0jCi1DT05GSUdfU09VTkQ9eQotCi0jCi0jIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQotIwotQ09ORklHX1NORD15Ci1DT05GSUdfU05EX1RJTUVSPXkKLUNPTkZJR19TTkRfUENNPXkKLUNPTkZJR19TTkRfSFdERVA9eQotQ09ORklHX1NORF9SQVdNSURJPXkKLUNPTkZJR19TTkRfU0VRVUVOQ0VSPXkKLSMgQ09ORklHX1NORF9TRVFfRFVNTVkgaXMgbm90IHNldAotQ09ORklHX1NORF9PU1NFTVVMPXkKLUNPTkZJR19TTkRfTUlYRVJfT1NTPXkKLUNPTkZJR19TTkRfUENNX09TUz15Ci1DT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15Ci1DT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgR2VuZXJpYyBkZXZpY2VzCi0jCi1DT05GSUdfU05EX01QVTQwMV9VQVJUPXkKLUNPTkZJR19TTkRfT1BMM19MSUI9eQotQ09ORklHX1NORF9BQzk3X0NPREVDPXkKLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklSTUlESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIGRldmljZXMKLSMKLSMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FaVDMzMjggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0JUODdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTEFZTEEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREFSTEEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfR0lOQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9MQVlMQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NT05BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSUEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VDSE8zRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR09JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPREogaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTlMxMzcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTlMxMzcxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FUzE5MzggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VTMTk2OCBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0ZNODAxPXkKLSMgQ09ORklHX1NORF9GTTgwMV9URUE1NzVYX0JPT0wgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lOVEVMOFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUENYSFIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JJUFRJREUgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklBODJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUM5N19QT1dFUl9TQVZFIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgZGV2aWNlcwotIwotIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29DIGF1ZGlvIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAotCi0jCi0jIE9wZW4gU291bmQgU3lzdGVtCi0jCi0jIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0Ci1DT05GSUdfQUM5N19CVVM9eQotCi0jCi0jIEhJRCBEZXZpY2VzCi0jCi1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKLSMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi1DT05GSUdfVVNCX0VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUhDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15Ci1DT05GSUdfVVNCX1VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKLUNPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRkYgaXMgbm90IHNldAotQ09ORklHX1VTQl9ISURERVY9eQotIyBDT05GSUdfVVNCX0FJUFRFSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0FDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1RDTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVRfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049eQotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERTTCBtb2RlbSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCi0jIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkZXZpY2VzCi0jCi0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLQotIwotIyBJbmZpbmlCYW5kIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotCi0jCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQotIwotCi0jCi0jIFJlYWwgVGltZSBDbG9jawotIwotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBETUEgRW5naW5lIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAotCi0jCi0jIERNQSBDbGllbnRzCi0jCi0KLSMKLSMgRE1BIERldmljZXMKLSMKLQotIwotIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgVmlydHVhbGl6YXRpb24KLSMKLSMgQ09ORklHX01TUEVDIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLUNPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci1DT05GSUdfQVVUT0ZTX0ZTPXkKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIworQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKIENPTkZJR19JU085NjYwX0ZTPXkKIENPTkZJR19KT0xJRVQ9eQotIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19VREZfRlM9eQotQ09ORklHX1VERl9OTFM9eQotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQorQ09ORklHX0tQUk9CRVM9eQorIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAorQ09ORklHX0xPR089eQorQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19NQ0tJTkxFWT15CitDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTVNET1NfRlM9eQotQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19WTUNPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19IVUdFVExCRlM9eQotQ09ORklHX0hVR0VUTEJfUEFHRT15Ci1DT05GSUdfUkFNRlM9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19ORVRGSUxURVI9eQorQ09ORklHX05FVF9QQ0k9eQorQ09ORklHX05FVF9UVUxJUD15CitDT05GSUdfTkZTRF9WMz15CitDT05GSUdfTkZTRD15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTRD15Ci1DT05GSUdfTkZTRF9WMz15Ci0jIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0RfVENQIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX0VYUE9SVEZTPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX0VGSV9QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPXkKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3PXkKIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1PXkKQEAgLTE0NzAsMTUgKzk1LDE0IEBACiBDT05GSUdfTkxTX0NPREVQQUdFXzg2NT15CiBDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj15CiBDT05GSUdfTkxTX0NPREVQQUdFXzg2OT15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzkzNj15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzk1MD15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzkzMj15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzk0OT15CiBDT05GSUdfTkxTX0NPREVQQUdFXzg3ND15Ci1DT05GSUdfTkxTX0lTTzg4NTlfOD15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9eQotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xMz15CitDT05GSUdfTkxTX0lTTzg4NTlfMTQ9eQorQ09ORklHX05MU19JU084ODU5XzE1PXkKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKIENPTkZJR19OTFNfSVNPODg1OV8yPXkKIENPTkZJR19OTFNfSVNPODg1OV8zPXkKQEAgLTE0ODYsMTI1ICsxMTAsNTIgQEAKIENPTkZJR19OTFNfSVNPODg1OV81PXkKIENPTkZJR19OTFNfSVNPODg1OV82PXkKIENPTkZJR19OTFNfSVNPODg1OV83PXkKK0NPTkZJR19OTFNfSVNPODg1OV84PXkKIENPTkZJR19OTFNfSVNPODg1OV85PXkKLUNPTkZJR19OTFNfSVNPODg1OV8xMz15Ci1DT05GSUdfTkxTX0lTTzg4NTlfMTQ9eQotQ09ORklHX05MU19JU084ODU5XzE1PXkKIENPTkZJR19OTFNfS09JOF9SPXkKIENPTkZJR19OTFNfS09JOF9VPXkKIENPTkZJR19OTFNfVVRGOD15Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUT15Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotCi0jCi0jIEluc3RydW1lbnRhdGlvbiBTdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0tQUk9CRVM9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNwotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfSUE2NF9HUkFOVUxFXzE2TUI9eQotIyBDT05GSUdfSUE2NF9HUkFOVUxFXzY0TUIgaXMgbm90IHNldAotQ09ORklHX0lBNjRfUFJJTlRfSEFaQVJEUz15Ci0jIENPTkZJR19ESVNBQkxFX1ZIUFQgaXMgbm90IHNldAotIyBDT05GSUdfSUE2NF9ERUJVR19DTVBYQ0hHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lBNjRfREVCVUdfSVJRIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNWSVBDX0NPTVBBVD15Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9eQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKK0NPTkZJR19OUl9DUFVTPTE2CitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorQ09ORklHX1BFUkZNT049eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKK0NPTkZJR19TQ1NJX0xPR0dJTkc9eQorQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKK0NPTkZJR19TQ1NJX1FMT0dJQ18xMjgwPXkKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF8yPXkKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9OAorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CitDT05GSUdfU0VSSUFMXzgyNTA9eQorIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU01QPXkKK0NPTkZJR19TTkRfRk04MDE9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTPXkKK0NPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CitDT05GSUdfU05EX1NFUVVFTkNFUj15CitDT05GSUdfU05EPXkKK0NPTkZJR19TT1VORD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfVElHT04zPXkKK0NPTkZJR19UTVBGUz15CitDT05GSUdfVFVMSVBfTU1JTz15CitDT05GSUdfVFVMSVBfTVdJPXkKK0NPTkZJR19UVUxJUF9OQVBJX0hXX01JVElHQVRJT049eQorQ09ORklHX1RVTElQX05BUEk9eQorQ09ORklHX1RVTElQPXkKK0NPTkZJR19VREZfRlM9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1VTQl9FSENJX0hDRD15CitDT05GSUdfVVNCX0hJRERFVj15CitDT05GSUdfVVNCX01PTj15CitDT05GSUdfVVNCX09IQ0lfSENEPXkKK0NPTkZJR19VU0JfU1RPUkFHRT15CitDT05GSUdfVVNCX1VIQ0lfSENEPXkKK0NPTkZJR19VU0I9eQorQ09ORklHX1ZGQVRfRlM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCBhMzYyZTY3Li4yZjIyOWU1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMjM1LDYgKzIzNSw3IEBACiAjZGVmaW5lIEtWTV9SRVFfUFRDX0cJCTMyCiAjZGVmaW5lIEtWTV9SRVFfUkVTVU1FCQkzMwogCisjZGVmaW5lIEtWTV9IUEFHRV9HRk5fU0hJRlQoeCkJMAogI2RlZmluZSBLVk1fTlJfUEFHRV9TSVpFUwkxCiAjZGVmaW5lIEtWTV9QQUdFU19QRVJfSFBBR0UoeCkJMQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbG9jYWw2NC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2xvY2FsNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmM5M2I1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2xvY2FsNjQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWw2NC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggNWYyNzFiYy4uNDFiNmQzMSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BhZ2UuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGFnZS5oCkBAIC00MSw3ICs0MSw3IEBACiAjZGVmaW5lIFBBR0VfU0laRQkJKF9fSUE2NF9VTF9DT05TVCgxKSA8PCBQQUdFX1NISUZUKQogI2RlZmluZSBQQUdFX01BU0sJCSh+KFBBR0VfU0laRSAtIDEpKQogCi0jZGVmaW5lIFBFUkNQVV9QQUdFX1NISUZUCTE2CS8qIGxvZzIoKSBvZiBtYXguIHNpemUgb2YgcGVyLUNQVSBhcmVhICovCisjZGVmaW5lIFBFUkNQVV9QQUdFX1NISUZUCTE4CS8qIGxvZzIoKSBvZiBtYXguIHNpemUgb2YgcGVyLUNQVSBhcmVhICovCiAjZGVmaW5lIFBFUkNQVV9QQUdFX1NJWkUJKF9fSUE2NF9VTF9DT05TVCgxKSA8PCBQRVJDUFVfUEFHRV9TSElGVCkKIAogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL21zaV9pYTY0LmMgYi9hcmNoL2lhNjQva2VybmVsL21zaV9pYTY0LmMKaW5kZXggNmM4OTIyOC4uNGE3NDZlYSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tc2lfaWE2NC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvbXNpX2lhNjQuYwpAQCAtMjUsNyArMjUsNyBAQAogCWlmIChpcnFfcHJlcGFyZV9tb3ZlKGlycSwgY3B1KSkKIAkJcmV0dXJuIC0xOwogCi0JcmVhZF9tc2lfbXNnKGlycSwgJm1zZyk7CisJZ2V0X2NhY2hlZF9tc2lfbXNnKGlycSwgJm1zZyk7CiAKIAlhZGRyID0gbXNnLmFkZHJlc3NfbG87CiAJYWRkciAmPSBNU0lfQUREUl9ERVNUX0lEX01BU0s7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCmluZGV4IGFiOTg1ZjcuLjc0NDMyOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCkBAIC0xNjk2LDggKzE2OTYsOCBAQAogCXJldHVybiBtYXNrOwogfQogCi1zdGF0aWMgaW50Ci1wZm1faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGxvbmcKK3BmbV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJRFBSSU5UKCgicGZtX2lvY3RsIGNhbGxlZFxuIikpOwogCXJldHVybiAtRUlOVkFMOwpAQCAtMjE3NCwxNSArMjE3NCwxNSBAQAogCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBmbV9maWxlX29wcyA9IHsKLQkubGxzZWVrICAgPSBub19sbHNlZWssCi0JLnJlYWQgICAgID0gcGZtX3JlYWQsCi0JLndyaXRlICAgID0gcGZtX3dyaXRlLAotCS5wb2xsICAgICA9IHBmbV9wb2xsLAotCS5pb2N0bCAgICA9IHBmbV9pb2N0bCwKLQkub3BlbiAgICAgPSBwZm1fbm9fb3BlbiwJLyogc3BlY2lhbCBvcGVuIGNvZGUgdG8gZGlzYWxsb3cgb3BlbiB2aWEgL3Byb2MgKi8KLQkuZmFzeW5jICAgPSBwZm1fZmFzeW5jLAotCS5yZWxlYXNlICA9IHBmbV9jbG9zZSwKLQkuZmx1c2gJICA9IHBmbV9mbHVzaAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAorCS5yZWFkCQk9IHBmbV9yZWFkLAorCS53cml0ZQkJPSBwZm1fd3JpdGUsCisJLnBvbGwJCT0gcGZtX3BvbGwsCisJLnVubG9ja2VkX2lvY3RsID0gcGZtX2lvY3RsLAorCS5vcGVuCQk9IHBmbV9ub19vcGVuLAkvKiBzcGVjaWFsIG9wZW4gY29kZSB0byBkaXNhbGxvdyBvcGVuIHZpYSAvcHJvYyAqLworCS5mYXN5bmMJCT0gcGZtX2Zhc3luYywKKwkucmVsZWFzZQk9IHBmbV9jbG9zZSwKKwkuZmx1c2gJCT0gcGZtX2ZsdXNoCiB9OwogCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3RpbWUuYyBiL2FyY2gvaWE2NC9rZXJuZWwvdGltZS5jCmluZGV4IDY1M2IzYzQuLmVkNmYyMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdGltZS5jCkBAIC00NzEsNyArNDcxLDggQEAKIHsKIH0KIAotdm9pZCB1cGRhdGVfdnN5c2NhbGwoc3RydWN0IHRpbWVzcGVjICp3YWxsLCBzdHJ1Y3QgY2xvY2tzb3VyY2UgKmMsIHUzMiBtdWx0KQordm9pZCB1cGRhdGVfdnN5c2NhbGwoc3RydWN0IHRpbWVzcGVjICp3YWxsLCBzdHJ1Y3QgdGltZXNwZWMgKnd0bSwKKwkJCXN0cnVjdCBjbG9ja3NvdXJjZSAqYywgdTMyIG11bHQpCiB7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTQ4Nyw5ICs0ODgsOSBAQAogCS8qIGNvcHkga2VybmVsIHRpbWUgc3RydWN0dXJlcyAqLwogICAgICAgICBmc3lzY2FsbF9ndG9kX2RhdGEud2FsbF90aW1lLnR2X3NlYyA9IHdhbGwtPnR2X3NlYzsKICAgICAgICAgZnN5c2NhbGxfZ3RvZF9kYXRhLndhbGxfdGltZS50dl9uc2VjID0gd2FsbC0+dHZfbnNlYzsKLSAgICAgICAgZnN5c2NhbGxfZ3RvZF9kYXRhLm1vbm90b25pY190aW1lLnR2X3NlYyA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYworCWZzeXNjYWxsX2d0b2RfZGF0YS5tb25vdG9uaWNfdGltZS50dl9zZWMgPSB3dG0tPnR2X3NlYwogCQkJCQkJCSsgd2FsbC0+dHZfc2VjOwotICAgICAgICBmc3lzY2FsbF9ndG9kX2RhdGEubW9ub3RvbmljX3RpbWUudHZfbnNlYyA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X25zZWMKKwlmc3lzY2FsbF9ndG9kX2RhdGEubW9ub3RvbmljX3RpbWUudHZfbnNlYyA9IHd0bS0+dHZfbnNlYwogCQkJCQkJCSsgd2FsbC0+dHZfbnNlYzsKIAogCS8qIG5vcm1hbGl6ZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9pYTY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGUwNzIxOGEuLjVhNGQwNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2lhNjQva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTYsMjA0ICs2LDIwOSBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaD4KIAotI2RlZmluZSBJVlRfVEVYVAkJCQkJCQlcCi0JCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfaXZ0X3RleHQpID0gLjsJCQlcCi0JCSooLnRleHQuLml2dCkJCQkJCQlcCi0JCVZNTElOVVhfU1lNQk9MKF9fZW5kX2l2dF90ZXh0KSA9IC47Ci0KIE9VVFBVVF9GT1JNQVQoImVsZjY0LWlhNjQtbGl0dGxlIikKIE9VVFBVVF9BUkNIKGlhNjQpCiBFTlRSWShwaHlzX3N0YXJ0KQogamlmZmllcyA9IGppZmZpZXNfNjQ7CisKIFBIRFJTIHsKLSAgY29kZSAgIFBUX0xPQUQ7Ci0gIHBlcmNwdSBQVF9MT0FEOwotICBkYXRhICAgUFRfTE9BRDsKLSAgbm90ZSAgIFBUX05PVEU7Ci0gIHVud2luZCAweDcwMDAwMDAxOyAvKiBQVF9JQV82NF9VTldJTkQsIGJ1dCBsZCBkb2Vzbid0IG1hdGNoIHRoZSBuYW1lICovCisJY29kZSAgIFBUX0xPQUQ7CisJcGVyY3B1IFBUX0xPQUQ7CisJZGF0YSAgIFBUX0xPQUQ7CisJbm90ZSAgIFBUX05PVEU7CisJdW53aW5kIDB4NzAwMDAwMDE7IC8qIFBUX0lBXzY0X1VOV0lORCwgYnV0IGxkIGRvZXNuJ3QgbWF0Y2ggdGhlIG5hbWUgKi8KIH0KLVNFQ1RJT05TCi17Ci0gIC8qIHVud2luZCBleGl0IHNlY3Rpb25zIG11c3QgYmUgZGlzY2FyZGVkIGJlZm9yZSB0aGUgcmVzdCBvZiB0aGUKLSAgICAgc2VjdGlvbnMgZ2V0IGluY2x1ZGVkLiAqLwotICAvRElTQ0FSRC8gOiB7Ci0JKiguSUFfNjQudW53aW5kLmV4aXQudGV4dCkKLQkqKC5JQV82NC51bndpbmRfaW5mby5leGl0LnRleHQpCi0JKiguY29tbWVudCkKLQkqKC5ub3RlKQotICB9CiAKLSAgdiA9IFBBR0VfT0ZGU0VUOwkvKiB0aGlzIHN5bWJvbCBpcyBoZXJlIHRvIG1ha2UgZGVidWdnaW5nIGVhc2llci4uLiAqLwotICBwaHlzX3N0YXJ0ID0gX3N0YXJ0IC0gTE9BRF9PRkZTRVQ7CitTRUNUSU9OUyB7CisJLyoKKwkgKiB1bndpbmQgZXhpdCBzZWN0aW9ucyBtdXN0IGJlIGRpc2NhcmRlZCBiZWZvcmUKKwkgKiB0aGUgcmVzdCBvZiB0aGUgc2VjdGlvbnMgZ2V0IGluY2x1ZGVkLgorCSAqLworCS9ESVNDQVJELyA6IHsKKwkJKiguSUFfNjQudW53aW5kLmV4aXQudGV4dCkKKwkJKiguSUFfNjQudW53aW5kX2luZm8uZXhpdC50ZXh0KQorCQkqKC5jb21tZW50KQorCQkqKC5ub3RlKQorCX0KIAotICBjb2RlIDogeyB9IDpjb2RlCi0gIC4gPSBLRVJORUxfU1RBUlQ7CisJdiA9IFBBR0VfT0ZGU0VUOyAvKiB0aGlzIHN5bWJvbCBpcyBoZXJlIHRvIG1ha2UgZGVidWdnaW5nIGVhc2llci4uLiAqLworCXBoeXNfc3RhcnQgPSBfc3RhcnQgLSBMT0FEX09GRlNFVDsKIAotICBfdGV4dCA9IC47Ci0gIF9zdGV4dCA9IC47CisJY29kZSA6IHsKKwl9IDpjb2RlCisJLiA9IEtFUk5FTF9TVEFSVDsKIAotICAudGV4dCA6IEFUKEFERFIoLnRleHQpIC0gTE9BRF9PRkZTRVQpCi0gICAgewotCUlWVF9URVhUCi0JVEVYVF9URVhUCi0JU0NIRURfVEVYVAotCUxPQ0tfVEVYVAotCUtQUk9CRVNfVEVYVAotCSooLmdudS5saW5rb25jZS50KikKLSAgICB9Ci0gIC50ZXh0MiA6IEFUKEFERFIoLnRleHQyKSAtIExPQURfT0ZGU0VUKQotCXsgKigudGV4dDIpIH0KKwlfdGV4dCA9IC47CisJX3N0ZXh0ID0gLjsKKworCS50ZXh0IDogQVQoQUREUigudGV4dCkgLSBMT0FEX09GRlNFVCkgeworCQlfX3N0YXJ0X2l2dF90ZXh0ID0gLjsKKwkJKigudGV4dC4uaXZ0KQorCQlfX2VuZF9pdnRfdGV4dCA9IC47CisJCVRFWFRfVEVYVAorCQlTQ0hFRF9URVhUCisJCUxPQ0tfVEVYVAorCQlLUFJPQkVTX1RFWFQKKwkJKiguZ251LmxpbmtvbmNlLnQqKQorCX0KKworCS50ZXh0MiA6IEFUKEFERFIoLnRleHQyKSAtIExPQURfT0ZGU0VUKQl7CisJCSooLnRleHQyKQorCX0KKwogI2lmZGVmIENPTkZJR19TTVAKLSAgLnRleHQuLmxvY2sgOiBBVChBRERSKC50ZXh0Li5sb2NrKSAtIExPQURfT0ZGU0VUKQotCXsgKigudGV4dC4ubG9jaykgfQorCS50ZXh0Li5sb2NrIDogQVQoQUREUigudGV4dC4ubG9jaykgLSBMT0FEX09GRlNFVCkgeworCQkqKC50ZXh0Li5sb2NrKQorCX0KICNlbmRpZgotICBfZXRleHQgPSAuOworCV9ldGV4dCA9IC47CiAKLSAgLyogUmVhZC1vbmx5IGRhdGEgKi8KKwkvKgorCSAqIFJlYWQtb25seSBkYXRhCisJICovCisJTk9URVMgOmNvZGUgOm5vdGUgICAgICAgLyogcHV0IC5ub3RlcyBpbiB0ZXh0IGFuZCBtYXJrIGluIFBUX05PVEUgICovCisJY29kZV9jb250aW51ZXMgOiB7CisJfSA6IGNvZGUgICAgICAgICAgICAgICAvKiBzd2l0Y2ggYmFjayB0byByZWd1bGFyIHByb2dyYW0uLi4gICovCiAKLSAgTk9URVMgOmNvZGUgOm5vdGUJCS8qIHB1dCAubm90ZXMgaW4gdGV4dCBhbmQgbWFyayBpbiBQVF9OT1RFICAqLwotICBjb2RlX2NvbnRpbnVlcyA6IHt9IDpjb2RlCS8qIHN3aXRjaCBiYWNrIHRvIHJlZ3VsYXIgcHJvZ3JhbS4uLiAgKi8KKwlFWENFUFRJT05fVEFCTEUoMTYpCiAKLSAgRVhDRVBUSU9OX1RBQkxFKDE2KQotCi0gIC8qIE1DQSB0YWJsZSAqLwotICAuID0gQUxJR04oMTYpOwotICBfX21jYV90YWJsZSA6IEFUKEFERFIoX19tY2FfdGFibGUpIC0gTE9BRF9PRkZTRVQpCi0JewotCSAgX19zdGFydF9fX21jYV90YWJsZSA9IC47Ci0JICAqKF9fbWNhX3RhYmxlKQotCSAgX19zdG9wX19fbWNhX3RhYmxlID0gLjsKKwkvKiBNQ0EgdGFibGUgKi8KKwkuID0gQUxJR04oMTYpOworCV9fbWNhX3RhYmxlIDogQVQoQUREUihfX21jYV90YWJsZSkgLSBMT0FEX09GRlNFVCkgeworCQlfX3N0YXJ0X19fbWNhX3RhYmxlID0gLjsKKwkJKihfX21jYV90YWJsZSkKKwkJX19zdG9wX19fbWNhX3RhYmxlID0gLjsKIAl9CiAKLSAgLmRhdGEuLnBhdGNoLnBoeXNfc3RhY2tfcmVnIDogQVQoQUREUiguZGF0YS4ucGF0Y2gucGh5c19zdGFja19yZWcpIC0gTE9BRF9PRkZTRVQpCi0JewotCSAgX19zdGFydF9fX3BoeXNfc3RhY2tfcmVnX3BhdGNobGlzdCA9IC47Ci0JICAqKC5kYXRhLi5wYXRjaC5waHlzX3N0YWNrX3JlZykKLQkgIF9fZW5kX19fcGh5c19zdGFja19yZWdfcGF0Y2hsaXN0ID0gLjsKKwkuZGF0YS4ucGF0Y2gucGh5c19zdGFja19yZWcgOiBBVChBRERSKC5kYXRhLi5wYXRjaC5waHlzX3N0YWNrX3JlZykgLSBMT0FEX09GRlNFVCkgeworCQlfX3N0YXJ0X19fcGh5c19zdGFja19yZWdfcGF0Y2hsaXN0ID0gLjsKKwkJKiguZGF0YS4ucGF0Y2gucGh5c19zdGFja19yZWcpCisJCV9fZW5kX19fcGh5c19zdGFja19yZWdfcGF0Y2hsaXN0ID0gLjsKIAl9CiAKLSAgLyogR2xvYmFsIGRhdGEgKi8KLSAgX2RhdGEgPSAuOworCS8qCisJICogR2xvYmFsIGRhdGEKKwkgKi8KKwlfZGF0YSA9IC47CiAKLSAgLyogVW53aW5kIGluZm8gJiB0YWJsZTogKi8KLSAgLiA9IEFMSUdOKDgpOwotICAuSUFfNjQudW53aW5kX2luZm8gOiBBVChBRERSKC5JQV82NC51bndpbmRfaW5mbykgLSBMT0FEX09GRlNFVCkKLQl7ICooLklBXzY0LnVud2luZF9pbmZvKikgfQotICAuSUFfNjQudW53aW5kIDogQVQoQUREUiguSUFfNjQudW53aW5kKSAtIExPQURfT0ZGU0VUKQotCXsKLQkgIF9fc3RhcnRfdW53aW5kID0gLjsKLQkgICooLklBXzY0LnVud2luZCopCi0JICBfX2VuZF91bndpbmQgPSAuOworCS8qIFVud2luZCBpbmZvICYgdGFibGU6ICovCisJLiA9IEFMSUdOKDgpOworCS5JQV82NC51bndpbmRfaW5mbyA6IEFUKEFERFIoLklBXzY0LnVud2luZF9pbmZvKSAtIExPQURfT0ZGU0VUKSB7CisJCSooLklBXzY0LnVud2luZF9pbmZvKikKKwl9CisJLklBXzY0LnVud2luZCA6IEFUKEFERFIoLklBXzY0LnVud2luZCkgLSBMT0FEX09GRlNFVCkgeworCQlfX3N0YXJ0X3Vud2luZCA9IC47CisJCSooLklBXzY0LnVud2luZCopCisJCV9fZW5kX3Vud2luZCA9IC47CiAJfSA6Y29kZSA6dW53aW5kCi0gIGNvZGVfY29udGludWVzMiA6IHt9IDogY29kZQorCWNvZGVfY29udGludWVzMiA6IHsKKwl9IDogY29kZQogCi0gIFJPREFUQQorCVJPREFUQQogCi0gIC5vcGQgOiBBVChBRERSKC5vcGQpIC0gTE9BRF9PRkZTRVQpCi0JeyAqKC5vcGQpIH0KLQotICAvKiBJbml0aWFsaXphdGlvbiBjb2RlIGFuZCBkYXRhOiAqLwotCi0gIC4gPSBBTElHTihQQUdFX1NJWkUpOwotICBfX2luaXRfYmVnaW4gPSAuOwotCi0gIElOSVRfVEVYVF9TRUNUSU9OKFBBR0VfU0laRSkKLSAgSU5JVF9EQVRBX1NFQ1RJT04oMTYpCi0KLSAgLmRhdGEuLnBhdGNoLnZ0b3AgOiBBVChBRERSKC5kYXRhLi5wYXRjaC52dG9wKSAtIExPQURfT0ZGU0VUKQotCXsKLQkgIF9fc3RhcnRfX192dG9wX3BhdGNobGlzdCA9IC47Ci0JICAqKC5kYXRhLi5wYXRjaC52dG9wKQotCSAgX19lbmRfX192dG9wX3BhdGNobGlzdCA9IC47CisJLm9wZCA6IEFUKEFERFIoLm9wZCkgLSBMT0FEX09GRlNFVCkgeworCQkqKC5vcGQpCiAJfQogCi0gIC5kYXRhLi5wYXRjaC5yc2UgOiBBVChBRERSKC5kYXRhLi5wYXRjaC5yc2UpIC0gTE9BRF9PRkZTRVQpCi0JewotCSAgX19zdGFydF9fX3JzZV9wYXRjaGxpc3QgPSAuOwotCSAgKiguZGF0YS4ucGF0Y2gucnNlKQotCSAgX19lbmRfX19yc2VfcGF0Y2hsaXN0ID0gLjsKKwkvKgorCSAqIEluaXRpYWxpemF0aW9uIGNvZGUgYW5kIGRhdGE6CisJICovCisJLiA9IEFMSUdOKFBBR0VfU0laRSk7CisJX19pbml0X2JlZ2luID0gLjsKKworCUlOSVRfVEVYVF9TRUNUSU9OKFBBR0VfU0laRSkKKwlJTklUX0RBVEFfU0VDVElPTigxNikKKworCS5kYXRhLi5wYXRjaC52dG9wIDogQVQoQUREUiguZGF0YS4ucGF0Y2gudnRvcCkgLSBMT0FEX09GRlNFVCkgeworCQlfX3N0YXJ0X19fdnRvcF9wYXRjaGxpc3QgPSAuOworCQkqKC5kYXRhLi5wYXRjaC52dG9wKQorCQlfX2VuZF9fX3Z0b3BfcGF0Y2hsaXN0ID0gLjsKIAl9CiAKLSAgLmRhdGEuLnBhdGNoLm1ja2lubGV5X2U5IDogQVQoQUREUiguZGF0YS4ucGF0Y2gubWNraW5sZXlfZTkpIC0gTE9BRF9PRkZTRVQpCi0JewotCSAgX19zdGFydF9fX21ja2lubGV5X2U5X2J1bmRsZXMgPSAuOwotCSAgKiguZGF0YS4ucGF0Y2gubWNraW5sZXlfZTkpCi0JICBfX2VuZF9fX21ja2lubGV5X2U5X2J1bmRsZXMgPSAuOworCS5kYXRhLi5wYXRjaC5yc2UgOiBBVChBRERSKC5kYXRhLi5wYXRjaC5yc2UpIC0gTE9BRF9PRkZTRVQpIHsKKwkJX19zdGFydF9fX3JzZV9wYXRjaGxpc3QgPSAuOworCQkqKC5kYXRhLi5wYXRjaC5yc2UpCisJCV9fZW5kX19fcnNlX3BhdGNobGlzdCA9IC47CisJfQorCisJLmRhdGEuLnBhdGNoLm1ja2lubGV5X2U5IDogQVQoQUREUiguZGF0YS4ucGF0Y2gubWNraW5sZXlfZTkpIC0gTE9BRF9PRkZTRVQpIHsKKwkJX19zdGFydF9fX21ja2lubGV5X2U5X2J1bmRsZXMgPSAuOworCQkqKC5kYXRhLi5wYXRjaC5tY2tpbmxleV9lOSkKKwkJX19lbmRfX19tY2tpbmxleV9lOV9idW5kbGVzID0gLjsKIAl9CiAKICNpZiBkZWZpbmVkKENPTkZJR19QQVJBVklSVCkKLSAgLiA9IEFMSUdOKDE2KTsKLSAgLnBhcmF2aXJ0X2J1bmRsZXMgOiBBVChBRERSKC5wYXJhdmlydF9idW5kbGVzKSAtIExPQURfT0ZGU0VUKQotCXsKLQkgIF9fc3RhcnRfcGFyYXZpcnRfYnVuZGxlcyA9IC47Ci0gICAgICAgICAgKigucGFyYXZpcnRfYnVuZGxlcykKLQkgIF9fc3RvcF9wYXJhdmlydF9idW5kbGVzID0gLjsKKwkuID0gQUxJR04oMTYpOworCS5wYXJhdmlydF9idW5kbGVzIDogQVQoQUREUigucGFyYXZpcnRfYnVuZGxlcykgLSBMT0FEX09GRlNFVCkgeworCQlfX3N0YXJ0X3BhcmF2aXJ0X2J1bmRsZXMgPSAuOworCQkqKC5wYXJhdmlydF9idW5kbGVzKQorCQlfX3N0b3BfcGFyYXZpcnRfYnVuZGxlcyA9IC47CiAJfQotICAuID0gQUxJR04oMTYpOwotICAucGFyYXZpcnRfaW5zdHMgOiBBVChBRERSKC5wYXJhdmlydF9pbnN0cykgLSBMT0FEX09GRlNFVCkKLQl7Ci0JICBfX3N0YXJ0X3BhcmF2aXJ0X2luc3RzID0gLjsKLSAgICAgICAgICAqKC5wYXJhdmlydF9pbnN0cykKLQkgIF9fc3RvcF9wYXJhdmlydF9pbnN0cyA9IC47CisJLiA9IEFMSUdOKDE2KTsKKwkucGFyYXZpcnRfaW5zdHMgOiBBVChBRERSKC5wYXJhdmlydF9pbnN0cykgLSBMT0FEX09GRlNFVCkgeworCQlfX3N0YXJ0X3BhcmF2aXJ0X2luc3RzID0gLjsKKwkJKigucGFyYXZpcnRfaW5zdHMpCisJCV9fc3RvcF9wYXJhdmlydF9pbnN0cyA9IC47CiAJfQotICAuID0gQUxJR04oMTYpOwotICAucGFyYXZpcnRfYnJhbmNoZXMgOiBBVChBRERSKC5wYXJhdmlydF9icmFuY2hlcykgLSBMT0FEX09GRlNFVCkKLQl7Ci0JICBfX3N0YXJ0X3BhcmF2aXJ0X2JyYW5jaGVzID0gLjsKLQkgICooLnBhcmF2aXJ0X2JyYW5jaGVzKQotCSAgX19zdG9wX3BhcmF2aXJ0X2JyYW5jaGVzID0gLjsKKwkuID0gQUxJR04oMTYpOworCS5wYXJhdmlydF9icmFuY2hlcyA6IEFUKEFERFIoLnBhcmF2aXJ0X2JyYW5jaGVzKSAtIExPQURfT0ZGU0VUKSB7CisJCV9fc3RhcnRfcGFyYXZpcnRfYnJhbmNoZXMgPSAuOworCQkqKC5wYXJhdmlydF9icmFuY2hlcykKKwkJX19zdG9wX3BhcmF2aXJ0X2JyYW5jaGVzID0gLjsKIAl9CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0lBNjRfR0VORVJJQykKLSAgLyogTWFjaGluZSBWZWN0b3IgKi8KLSAgLiA9IEFMSUdOKDE2KTsKLSAgLm1hY2h2ZWMgOiBBVChBRERSKC5tYWNodmVjKSAtIExPQURfT0ZGU0VUKQotCXsKLQkgIG1hY2h2ZWNfc3RhcnQgPSAuOwotCSAgKigubWFjaHZlYykKLQkgIG1hY2h2ZWNfZW5kID0gLjsKKwkvKiBNYWNoaW5lIFZlY3RvciAqLworCS4gPSBBTElHTigxNik7CisJLm1hY2h2ZWMgOiBBVChBRERSKC5tYWNodmVjKSAtIExPQURfT0ZGU0VUKSB7CisJCW1hY2h2ZWNfc3RhcnQgPSAuOworCQkqKC5tYWNodmVjKQorCQltYWNodmVjX2VuZCA9IC47CiAJfQogI2VuZGlmCiAKICNpZmRlZglDT05GSUdfU01QCi0gIC4gPSBBTElHTihQRVJDUFVfUEFHRV9TSVpFKTsKLSAgX19jcHUwX3Blcl9jcHUgPSAuOwotICAuID0gLiArIFBFUkNQVV9QQUdFX1NJWkU7CS8qIGNwdTAgcGVyLWNwdSBzcGFjZSAqLworCS4gPSBBTElHTihQRVJDUFVfUEFHRV9TSVpFKTsKKwlfX2NwdTBfcGVyX2NwdSA9IC47CisJLiA9IC4gKyBQRVJDUFVfUEFHRV9TSVpFOyAgIC8qIGNwdTAgcGVyLWNwdSBzcGFjZSAqLwogI2VuZGlmCiAKLSAgLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0gIF9faW5pdF9lbmQgPSAuOworCS4gPSBBTElHTihQQUdFX1NJWkUpOworCV9faW5pdF9lbmQgPSAuOwogCi0gIC5kYXRhLi5wYWdlX2FsaWduZWQgOiBBVChBRERSKC5kYXRhLi5wYWdlX2FsaWduZWQpIC0gTE9BRF9PRkZTRVQpCi0gICAgICAgIHsKLQlQQUdFX0FMSUdORURfREFUQShQQUdFX1NJWkUpCi0JICAuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkgIF9fc3RhcnRfZ2F0ZV9zZWN0aW9uID0gLjsKLQkgICooLmRhdGEuLmdhdGUpCi0JICBfX3N0b3BfZ2F0ZV9zZWN0aW9uID0gLjsKKwkuZGF0YS4ucGFnZV9hbGlnbmVkIDogQVQoQUREUiguZGF0YS4ucGFnZV9hbGlnbmVkKSAtIExPQURfT0ZGU0VUKSB7CisJCVBBR0VfQUxJR05FRF9EQVRBKFBBR0VfU0laRSkKKwkJLiA9IEFMSUdOKFBBR0VfU0laRSk7CisJCV9fc3RhcnRfZ2F0ZV9zZWN0aW9uID0gLjsKKwkJKiguZGF0YS4uZ2F0ZSkKKwkJX19zdG9wX2dhdGVfc2VjdGlvbiA9IC47CiAjaWZkZWYgQ09ORklHX1hFTgotCSAgLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0JICBfX3hlbl9zdGFydF9nYXRlX3NlY3Rpb24gPSAuOwotCSAgKiguZGF0YS4uZ2F0ZS54ZW4pCi0JICBfX3hlbl9zdG9wX2dhdGVfc2VjdGlvbiA9IC47CisJCS4gPSBBTElHTihQQUdFX1NJWkUpOworCQlfX3hlbl9zdGFydF9nYXRlX3NlY3Rpb24gPSAuOworCQkqKC5kYXRhLi5nYXRlLnhlbikKKwkJX194ZW5fc3RvcF9nYXRlX3NlY3Rpb24gPSAuOwogI2VuZGlmCiAJfQotICAuID0gQUxJR04oUEFHRV9TSVpFKTsJCS8qIG1ha2Ugc3VyZSB0aGUgZ2F0ZSBwYWdlIGRvZXNuJ3QgZXhwb3NlCi0gIAkJCQkgKiBrZXJuZWwgZGF0YQotCQkJCSAqLworCS8qCisJICogbWFrZSBzdXJlIHRoZSBnYXRlIHBhZ2UgZG9lc24ndCBleHBvc2UKKwkgKiBrZXJuZWwgZGF0YQorCSAqLworCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCi0gIC8qIFBlci1jcHUgZGF0YTogKi8KLSAgLiA9IEFMSUdOKFBFUkNQVV9QQUdFX1NJWkUpOwotICBQRVJDUFVfVkFERFIoUEVSQ1BVX0FERFIsIDpwZXJjcHUpCi0gIF9fcGh5c19wZXJfY3B1X3N0YXJ0ID0gX19wZXJfY3B1X2xvYWQ7Ci0gIC4gPSBfX3BoeXNfcGVyX2NwdV9zdGFydCArIFBFUkNQVV9QQUdFX1NJWkU7CS8qIGVuc3VyZSBwZXJjcHUgZGF0YSBmaXRzCi0gIAkJCQkJCSAqIGludG8gcGVyY3B1IHBhZ2Ugc2l6ZQotCQkJCQkJICovCisJLyogUGVyLWNwdSBkYXRhOiAqLworCS4gPSBBTElHTihQRVJDUFVfUEFHRV9TSVpFKTsKKwlQRVJDUFVfVkFERFIoUEVSQ1BVX0FERFIsIDpwZXJjcHUpCisJX19waHlzX3Blcl9jcHVfc3RhcnQgPSBfX3Blcl9jcHVfbG9hZDsKKwkvKgorCSAqIGVuc3VyZSBwZXJjcHUgZGF0YSBmaXRzCisJICogaW50byBwZXJjcHUgcGFnZSBzaXplCisJICovCisJLiA9IF9fcGh5c19wZXJfY3B1X3N0YXJ0ICsgUEVSQ1BVX1BBR0VfU0laRTsKIAotICBkYXRhIDogeyB9IDpkYXRhCi0gIC5kYXRhIDogQVQoQUREUiguZGF0YSkgLSBMT0FEX09GRlNFVCkKLQl7CisJZGF0YSA6IHsKKwl9IDpkYXRhCisJLmRhdGEgOiBBVChBRERSKC5kYXRhKSAtIExPQURfT0ZGU0VUKSB7CiAJCUlOSVRfVEFTS19EQVRBKFBBR0VfU0laRSkKIAkJQ0FDSEVMSU5FX0FMSUdORURfREFUQShTTVBfQ0FDSEVfQllURVMpCiAJCVJFQURfTU9TVExZX0RBVEEoU01QX0NBQ0hFX0JZVEVTKQpAQCAtMjEzLDI2ICsyMTgsMzcgQEAKIAkJQ09OU1RSVUNUT1JTCiAJfQogCi0gIC4gPSBBTElHTigxNik7CS8qIGdwIG11c3QgYmUgMTYtYnl0ZSBhbGlnbmVkIGZvciBleGMuIHRhYmxlICovCi0gIC5nb3QgOiBBVChBRERSKC5nb3QpIC0gTE9BRF9PRkZTRVQpCi0JeyAqKC5nb3QucGx0KSAqKC5nb3QpIH0KLSAgX19ncCA9IEFERFIoLmdvdCkgKyAweDIwMDAwMDsKLSAgLyogV2Ugd2FudCB0aGUgc21hbGwgZGF0YSBzZWN0aW9ucyB0b2dldGhlciwgc28gc2luZ2xlLWluc3RydWN0aW9uIG9mZnNldHMKLSAgICAgY2FuIGFjY2VzcyB0aGVtIGFsbCwgYW5kIGluaXRpYWxpemVkIGRhdGEgYWxsIGJlZm9yZSB1bmluaXRpYWxpemVkLCBzbwotICAgICB3ZSBjYW4gc2hvcnRlbiB0aGUgb24tZGlzayBzZWdtZW50IHNpemUuICAqLwotICAuc2RhdGEgOiBBVChBRERSKC5zZGF0YSkgLSBMT0FEX09GRlNFVCkKLQl7ICooLnNkYXRhKSAqKC5zZGF0YTEpICooLnNyZGF0YSkgfQotICBfZWRhdGEgID0gIC47CisJLiA9IEFMSUdOKDE2KTsJLyogZ3AgbXVzdCBiZSAxNi1ieXRlIGFsaWduZWQgZm9yIGV4Yy4gdGFibGUgKi8KKwkuZ290IDogQVQoQUREUiguZ290KSAtIExPQURfT0ZGU0VUKSB7CisJCSooLmdvdC5wbHQpCisJCSooLmdvdCkKKwl9CisJX19ncCA9IEFERFIoLmdvdCkgKyAweDIwMDAwMDsKIAotICBCU1NfU0VDVElPTigwLCAwLCAwKQorCS8qCisJICogV2Ugd2FudCB0aGUgc21hbGwgZGF0YSBzZWN0aW9ucyB0b2dldGhlciwKKwkgKiBzbyBzaW5nbGUtaW5zdHJ1Y3Rpb24gb2Zmc2V0cyBjYW4gYWNjZXNzCisJICogdGhlbSBhbGwsIGFuZCBpbml0aWFsaXplZCBkYXRhIGFsbCBiZWZvcmUKKwkgKiB1bmluaXRpYWxpemVkLCBzbyB3ZSBjYW4gc2hvcnRlbiB0aGUKKwkgKiBvbi1kaXNrIHNlZ21lbnQgc2l6ZS4KKwkgKi8KKwkuc2RhdGEgOiBBVChBRERSKC5zZGF0YSkgLSBMT0FEX09GRlNFVCkgeworCQkqKC5zZGF0YSkKKwkJKiguc2RhdGExKQorCQkqKC5zcmRhdGEpCisJfQorCV9lZGF0YSAgPSAgLjsKIAotICBfZW5kID0gLjsKKwlCU1NfU0VDVElPTigwLCAwLCAwKQogCi0gIGNvZGUgOiB7IH0gOmNvZGUKKwlfZW5kID0gLjsKIAotICBTVEFCU19ERUJVRwotICBEV0FSRl9ERUJVRworCWNvZGUgOiB7CisJfSA6Y29kZQogCi0gIC8qIERlZmF1bHQgZGlzY2FyZHMgKi8KLSAgRElTQ0FSRFMKKwlTVEFCU19ERUJVRworCURXQVJGX0RFQlVHCisKKwkvKiBEZWZhdWx0IGRpc2NhcmRzICovCisJRElTQ0FSRFMKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0va3ZtLWlhNjQuYyBiL2FyY2gvaWE2NC9rdm0va3ZtLWlhNjQuYwppbmRleCAyMWI3MDEzNy4uZjU2YTYzMSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9rdm0taWE2NC5jCisrKyBiL2FyY2gvaWE2NC9rdm0va3ZtLWlhNjQuYwpAQCAtNzI1LDggKzcyNSw2IEBACiAJaW50IHI7CiAJc2lnc2V0X3Qgc2lnc2F2ZWQ7CiAKLQl2Y3B1X2xvYWQodmNwdSk7Ci0KIAlpZiAodmNwdS0+c2lnc2V0X2FjdGl2ZSkKIAkJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZ2Y3B1LT5zaWdzZXQsICZzaWdzYXZlZCk7CiAKQEAgLTc0OCw3ICs3NDYsNiBAQAogCWlmICh2Y3B1LT5zaWdzZXRfYWN0aXZlKQogCQlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJnNpZ3NhdmVkLCBOVUxMKTsKIAotCXZjcHVfcHV0KHZjcHUpOwogCXJldHVybiByOwogfQogCkBAIC04ODMsOCArODgwLDYgQEAKIAlzdHJ1Y3QgdnBkICp2cGQgPSB0b19ob3N0KHZjcHUtPmt2bSwgdmNwdS0+YXJjaC52cGQpOwogCWludCBpOwogCi0JdmNwdV9sb2FkKHZjcHUpOwotCiAJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKIAkJdnBkLT52Z3JbaV0gPSByZWdzLT52cGQudmdyW2ldOwogCQl2cGQtPnZiZ3JbaV0gPSByZWdzLT52cGQudmJncltpXTsKQEAgLTkzMSw4ICs5MjYsNiBAQAogCXZjcHUtPmFyY2guaXRjX29mZnNldCA9IHJlZ3MtPnNhdmVkX2l0YyAtIGt2bV9nZXRfaXRjKHZjcHUpOwogCXNldF9iaXQoS1ZNX1JFUV9SRVNVTUUsICZ2Y3B1LT5yZXF1ZXN0cyk7CiAKLQl2Y3B1X3B1dCh2Y3B1KTsKLQogCXJldHVybiAwOwogfQogCkBAIC0xMjM3LDcgKzEyMzAsNyBAQAogCXBfY3R4LT5jclsyXSA9ICh1bnNpZ25lZCBsb25nKWt2bV92bW1faW5mby0+dm1tX2l2dDsKIAlwX2N0eC0+Y3JbOF0gPSAweDNjOwogCi0JLypJbml0aWxpemUgcmVnaW9uIHJlZ2lzdGVyKi8KKwkvKkluaXRpYWxpemUgcmVnaW9uIHJlZ2lzdGVyKi8KIAlwX2N0eC0+cnJbMF0gPSAweDMwOwogCXBfY3R4LT5yclsxXSA9IDB4MzA7CiAJcF9jdHgtPnJyWzJdID0gMHgzMDsKQEAgLTEyNDYsNyArMTIzOSw3IEBACiAJcF9jdHgtPnJyWzVdID0gMHgzMDsKIAlwX2N0eC0+cnJbN10gPSAweDMwOwogCi0JLypJbml0aWxpemUgYnJhbmNoIHJlZ2lzdGVyIDAqLworCS8qSW5pdGlhbGl6ZSBicmFuY2ggcmVnaXN0ZXIgMCovCiAJcF9jdHgtPmJyWzBdID0gKih1bnNpZ25lZCBsb25nICopa3ZtX3ZtbV9pbmZvLT52bW1fZW50cnk7CiAKIAl2Y3B1LT5hcmNoLnZtbV9yciA9IGt2bS0+YXJjaC52bW1faW5pdF9ycjsKQEAgLTE3MDcsNyArMTcwMCw3IEBACiAJQlVHX09OKCFtb2R1bGUpOwogCiAJaWYgKCFrdm1fdm1tX2Jhc2UpIHsKLQkJcHJpbnRrKCJrdm06IGt2bSBhcmVhIGhhc24ndCBiZWVuIGluaXRpbGl6ZWQgeWV0ISFcbiIpOworCQlwcmludGsoImt2bToga3ZtIGFyZWEgaGFzbid0IGJlZW4gaW5pdGlhbGl6ZWQgeWV0ISFcbiIpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKQEAgLTE4MDIsMzUgKzE3OTUsMjQgQEAKIAlrdm1fdm1tX2luZm8gPSBOVUxMOwogfQogCi1zdGF0aWMgaW50IGt2bV9pYTY0X3N5bmNfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSwKLQkJc3RydWN0IGt2bV9kaXJ0eV9sb2cgKmxvZykKK3N0YXRpYyB2b2lkIGt2bV9pYTY0X3N5bmNfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSwKKwkJCQkgICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCkKIHsKLQlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90OwotCWludCByLCBpOworCWludCBpOwogCWxvbmcgYmFzZTsKIAl1bnNpZ25lZCBsb25nIG47CiAJdW5zaWduZWQgbG9uZyAqZGlydHlfYml0bWFwID0gKHVuc2lnbmVkIGxvbmcgKikoa3ZtLT5hcmNoLnZtX2Jhc2UgKwogCQkJb2Zmc2V0b2Yoc3RydWN0IGt2bV92bV9kYXRhLCBrdm1fbWVtX2RpcnR5X2xvZykpOwogCi0JciA9IC1FSU5WQUw7Ci0JaWYgKGxvZy0+c2xvdCA+PSBLVk1fTUVNT1JZX1NMT1RTKQotCQlnb3RvIG91dDsKLQotCW1lbXNsb3QgPSAma3ZtLT5tZW1zbG90cy0+bWVtc2xvdHNbbG9nLT5zbG90XTsKLQlyID0gLUVOT0VOVDsKLQlpZiAoIW1lbXNsb3QtPmRpcnR5X2JpdG1hcCkKLQkJZ290byBvdXQ7Ci0KIAluID0ga3ZtX2RpcnR5X2JpdG1hcF9ieXRlcyhtZW1zbG90KTsKIAliYXNlID0gbWVtc2xvdC0+YmFzZV9nZm4gLyBCSVRTX1BFUl9MT05HOwogCisJc3Bpbl9sb2NrKCZrdm0tPmFyY2guZGlydHlfbG9nX2xvY2spOwogCWZvciAoaSA9IDA7IGkgPCBuL3NpemVvZihsb25nKTsgKytpKSB7CiAJCW1lbXNsb3QtPmRpcnR5X2JpdG1hcFtpXSA9IGRpcnR5X2JpdG1hcFtiYXNlICsgaV07CiAJCWRpcnR5X2JpdG1hcFtiYXNlICsgaV0gPSAwOwogCX0KLQlyID0gMDsKLW91dDoKLQlyZXR1cm4gcjsKKwlzcGluX3VubG9jaygma3ZtLT5hcmNoLmRpcnR5X2xvZ19sb2NrKTsKIH0KIAogaW50IGt2bV92bV9pb2N0bF9nZXRfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSwKQEAgLTE4NDIsMTIgKzE4MjQsMTcgQEAKIAlpbnQgaXNfZGlydHkgPSAwOwogCiAJbXV0ZXhfbG9jaygma3ZtLT5zbG90c19sb2NrKTsKLQlzcGluX2xvY2soJmt2bS0+YXJjaC5kaXJ0eV9sb2dfbG9jayk7CiAKLQlyID0ga3ZtX2lhNjRfc3luY19kaXJ0eV9sb2coa3ZtLCBsb2cpOwotCWlmIChyKQorCXIgPSAtRUlOVkFMOworCWlmIChsb2ctPnNsb3QgPj0gS1ZNX01FTU9SWV9TTE9UUykKIAkJZ290byBvdXQ7CiAKKwltZW1zbG90ID0gJmt2bS0+bWVtc2xvdHMtPm1lbXNsb3RzW2xvZy0+c2xvdF07CisJciA9IC1FTk9FTlQ7CisJaWYgKCFtZW1zbG90LT5kaXJ0eV9iaXRtYXApCisJCWdvdG8gb3V0OworCisJa3ZtX2lhNjRfc3luY19kaXJ0eV9sb2coa3ZtLCBtZW1zbG90KTsKIAlyID0ga3ZtX2dldF9kaXJ0eV9sb2coa3ZtLCBsb2csICZpc19kaXJ0eSk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0OwpAQCAtMTg1NSwxNCArMTg0MiwxMiBAQAogCS8qIElmIG5vdGhpbmcgaXMgZGlydHksIGRvbid0IGJvdGhlciBtZXNzaW5nIHdpdGggcGFnZSB0YWJsZXMuICovCiAJaWYgKGlzX2RpcnR5KSB7CiAJCWt2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pOwotCQltZW1zbG90ID0gJmt2bS0+bWVtc2xvdHMtPm1lbXNsb3RzW2xvZy0+c2xvdF07CiAJCW4gPSBrdm1fZGlydHlfYml0bWFwX2J5dGVzKG1lbXNsb3QpOwogCQltZW1zZXQobWVtc2xvdC0+ZGlydHlfYml0bWFwLCAwLCBuKTsKIAl9CiAJciA9IDA7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZrdm0tPnNsb3RzX2xvY2spOwotCXNwaW5fdW5sb2NrKCZrdm0tPmFyY2guZGlydHlfbG9nX2xvY2spOwogCXJldHVybiByOwogfQogCkBAIC0xOTUzLDExICsxOTM4LDYgQEAKIAlyZXR1cm4gdmNwdS0+YXJjaC50aW1lcl9maXJlZDsKIH0KIAotZ2ZuX3QgdW5hbGlhc19nZm4oc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCi17Ci0JcmV0dXJuIGdmbjsKLX0KLQogaW50IGt2bV9hcmNoX3ZjcHVfcnVubmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXJldHVybiAodmNwdS0+YXJjaC5tcF9zdGF0ZSA9PSBLVk1fTVBfU1RBVEVfUlVOTkFCTEUpIHx8CkBAIC0xOTY3LDkgKzE5NDcsNyBAQAogaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X21wc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCSAgICBzdHJ1Y3Qga3ZtX21wX3N0YXRlICptcF9zdGF0ZSkKIHsKLQl2Y3B1X2xvYWQodmNwdSk7CiAJbXBfc3RhdGUtPm1wX3N0YXRlID0gdmNwdS0+YXJjaC5tcF9zdGF0ZTsKLQl2Y3B1X3B1dCh2Y3B1KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjAwMCwxMCArMTk3OCw4IEBACiB7CiAJaW50IHIgPSAwOwogCi0JdmNwdV9sb2FkKHZjcHUpOwogCXZjcHUtPmFyY2gubXBfc3RhdGUgPSBtcF9zdGF0ZS0+bXBfc3RhdGU7CiAJaWYgKHZjcHUtPmFyY2gubXBfc3RhdGUgPT0gS1ZNX01QX1NUQVRFX1VOSU5JVElBTElaRUQpCiAJCXIgPSB2Y3B1X3Jlc2V0KHZjcHUpOwotCXZjcHVfcHV0KHZjcHUpOwogCXJldHVybiByOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9tc2lfc24uYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvbXNpX3NuLmMKaW5kZXggZWJmZGQ2YS4uMGM3MmRkNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9tc2lfc24uYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL21zaV9zbi5jCkBAIC0xNzUsNyArMTc1LDcgQEAKIAkgKiBSZWxlYXNlIFhJTyByZXNvdXJjZXMgZm9yIHRoZSBvbGQgTVNJIFBDSSBhZGRyZXNzCiAJICovCiAKLQlyZWFkX21zaV9tc2coaXJxLCAmbXNnKTsKKwlnZXRfY2FjaGVkX21zaV9tc2coaXJxLCAmbXNnKTsKICAgICAgICAgc25fcGRldiA9IChzdHJ1Y3QgcGNpZGV2X2luZm8gKilzbl9pcnFfaW5mby0+aXJxX3BjaWlvaW5mbzsKIAlwZGV2ID0gc25fcGRldi0+cGRpX2xpbnV4X3BjaWRldjsKIAlwcm92aWRlciA9IFNOX1BDSURFVl9CVVNQUk9WSURFUihwZGV2KTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc2V0dXAuYwppbmRleCBkMDBkZmMxLi5kYmM0Y2JlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zZXR1cC5jCkBAIC01MDcsNyArNTA3LDcgQEAKIAljbm9kZWlkX3QgY25vZGU7CiAKIAkvKgotCSAqIEFsbG9jYXRlICYgaW5pdGFsaXplIHRoZSBub2RlcGRhIGZvciBlYWNoIG5vZGUuCisJICogQWxsb2NhdGUgJiBpbml0aWFsaXplIHRoZSBub2RlcGRhIGZvciBlYWNoIG5vZGUuCiAJICovCiAJZm9yX2VhY2hfb25saW5lX25vZGUoY25vZGUpIHsKIAkJbm9kZXBkYWluZHJbY25vZGVdID0KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9LY29uZmlnIGIvYXJjaC9tMzJyL0tjb25maWcKaW5kZXggM2E5MzE5Zi4uODM2YWJiYiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL0tjb25maWcKKysrIGIvYXJjaC9tMzJyL0tjb25maWcKQEAgLTQ0LDkgKzQ0LDYgQEAKIAlpbnQKIAlkZWZhdWx0IDEwMAogCi1jb25maWcgR0VORVJJQ19USU1FCi0JZGVmX2Jvb2wgeQotCiBjb25maWcgQVJDSF9VU0VTX0dFVFRJTUVPRkZTRVQKIAlkZWZfYm9vbCB5CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9NYWtlZmlsZSBiL2FyY2gvbTMyci9NYWtlZmlsZQppbmRleCA0Njk3NjZiLi44ZmY1YmEwIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvTWFrZWZpbGUKKysrIGIvYXJjaC9tMzJyL01ha2VmaWxlCkBAIC0xMiw4ICsxMiw4IEBACiBMREZMQUdTX3ZtbGludXgJOj0KIAogS0JVSUxEX0NGTEFHUyArPSAtcGlwZSAtZm5vLXNjaGVkdWxlLWluc25zCi1DRkxBR1NfS0VSTkVMICs9IC1tbW9kZWw9bWVkaXVtCi1DRkxBR1NfTU9EVUxFICs9IC1tbW9kZWw9bGFyZ2UKK0tCVUlMRF9DRkxBR1NfS0VSTkVMICs9IC1tbW9kZWw9bWVkaXVtCitLQlVJTERfQ0ZMQUdTX01PRFVMRSArPSAtbW1vZGVsPWxhcmdlCiAKIGlmZGVmIENPTkZJR19DSElQX1ZERUMyCiBjZmxhZ3MtJChDT05GSUdfSVNBX00zMlIyKQkrPSAtRE5PX0ZQVSAtV2EsLWJpdGluc3QKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9sb2NhbDY0LmggYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vbG9jYWw2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YzkzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vbG9jYWw2NC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9sb2NhbDY0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGsvS2NvbmZpZyBiL2FyY2gvbTY4ay9LY29uZmlnCmluZGV4IDJlMzczN2IuLjgwMzBlMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9LY29uZmlnCisrKyBiL2FyY2gvbTY4ay9LY29uZmlnCkBAIC01OSw5ICs1OSw2IEBACiAJaW50CiAJZGVmYXVsdCAxMDAKIAotY29uZmlnIEdFTkVSSUNfVElNRQotCWRlZl9ib29sIHkKLQogY29uZmlnIEFSQ0hfVVNFU19HRVRUSU1FT0ZGU0VUCiAJZGVmX2Jvb2wgeQogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvTWFrZWZpbGUgYi9hcmNoL202OGsvTWFrZWZpbGUKaW5kZXggNTcwZDg1Yy4uYjA2YTdlMyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL01ha2VmaWxlCisrKyBiL2FyY2gvbTY4ay9NYWtlZmlsZQpAQCAtMTgsNyArMTgsNyBAQAogIyBvdmVycmlkZSB0b3AgbGV2ZWwgbWFrZWZpbGUKIEFTICs9IC1tNjgwMjAKIExERkxBR1MgOj0gLW0gbTY4a2VsZgotTERGTEFHU19NT0RVTEUgKz0gLVQgJChzcmN0cmVlKS9hcmNoL202OGsva2VybmVsL21vZHVsZS5sZHMKK0tCVUlMRF9MREZMQUdTX01PRFVMRSArPSAtVCAkKHNyY3RyZWUpL2FyY2gvbTY4ay9rZXJuZWwvbW9kdWxlLmxkcwogaWZuZXEgKCQoU1VCQVJDSCksJChBUkNIKSkKIAlpZmVxICgkKENST1NTX0NPTVBJTEUpLCkKIAkJQ1JPU1NfQ09NUElMRSA6PSAkKGNhbGwgY2MtY3Jvc3MtcHJlZml4LCBcCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbG9jYWw2NC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2xvY2FsNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmM5M2I1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2xvY2FsNjQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWw2NC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvS2NvbmZpZyBiL2FyY2gvbTY4a25vbW11L0tjb25maWcKaW5kZXggZWZlYjYwMy4uMjYwOWMzOSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvS2NvbmZpZworKysgYi9hcmNoL202OGtub21tdS9LY29uZmlnCkBAIC02MywxMCArNjMsNiBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAotY29uZmlnIEdFTkVSSUNfVElNRQotCWJvb2wKLQlkZWZhdWx0IHkKLQogY29uZmlnIEdFTkVSSUNfQ01PU19VUERBVEUKIAlib29sCiAJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvS2NvbmZpZyBiL2FyY2gvbWljcm9ibGF6ZS9LY29uZmlnCmluZGV4IDc2ODE4ZjkuLjY5MmZkZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9LY29uZmlnCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9LY29uZmlnCkBAIC01LDcgKzUsNyBAQAogCiBjb25maWcgTUlDUk9CTEFaRQogCWRlZl9ib29sIHkKLQlzZWxlY3QgSEFWRV9MTUIKKwlzZWxlY3QgSEFWRV9NRU1CTE9DSwogCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX1RSQUNFUgogCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUCiAJc2VsZWN0IEhBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCkBAIC0xNCw5ICsxNCwxMiBAQAogCXNlbGVjdCBVU0JfQVJDSF9IQVNfRUhDSQogCXNlbGVjdCBBUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQgogCXNlbGVjdCBIQVZFX09QUk9GSUxFCisJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCiAJc2VsZWN0IEhBVkVfRE1BX0FUVFJTCiAJc2VsZWN0IEhBVkVfRE1BX0FQSV9ERUJVRwogCXNlbGVjdCBUUkFDSU5HX1NVUFBPUlQKKwlzZWxlY3QgT0YKKwlzZWxlY3QgT0ZfRkxBVFRSRUUKIAogY29uZmlnIFNXQVAKIAlkZWZfYm9vbCBuCkBAIC00OCw5ICs1MSw2IEBACiBjb25maWcgR0VORVJJQ19DQUxJQlJBVEVfREVMQVkKIAlkZWZfYm9vbCB5CiAKLWNvbmZpZyBHRU5FUklDX1RJTUUKLQlkZWZfYm9vbCB5Ci0KIGNvbmZpZyBHRU5FUklDX1RJTUVfVlNZU0NBTEwKIAlkZWZfYm9vbCBuCiAKQEAgLTc1LDkgKzc1LDYgQEAKIGNvbmZpZyBIQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVAogCWRlZl9ib29sIHkKIAotY29uZmlnIERUQwotCWRlZl9ib29sIHkKLQogc291cmNlICJpbml0L0tjb25maWciCiAKIHNvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKQEAgLTEyNCwxOCArMTIxLDYgQEAKIAkgIFNldCB0aGlzIHRvIGhhdmUgYXJndW1lbnRzIGZyb20gdGhlIGRlZmF1bHQga2VybmVsIGNvbW1hbmQgc3RyaW5nCiAJICBvdmVycmlkZSB0aG9zZSBwYXNzZWQgYnkgdGhlIGJvb3QgbG9hZGVyLgogCi1jb25maWcgT0YKLQlkZWZfYm9vbCB5Ci0Jc2VsZWN0IE9GX0ZMQVRUUkVFCi0KLWNvbmZpZyBQUk9DX0RFVklDRVRSRUUKLQlib29sICJTdXBwb3J0IGZvciBkZXZpY2UgdHJlZSBpbiAvcHJvYyIKLQlkZXBlbmRzIG9uIFBST0NfRlMKLQloZWxwCi0JICBUaGlzIG9wdGlvbiBhZGRzIGEgZGV2aWNlLXRyZWUgZGlyZWN0b3J5IHVuZGVyIC9wcm9jIHdoaWNoIGNvbnRhaW5zCi0JICBhbiBpbWFnZSBvZiB0aGUgZGV2aWNlIHRyZWUgdGhhdCB0aGUga2VybmVsIGNvcGllcyBmcm9tIE9wZW4KLQkgIEZpcm13YXJlIG9yIG90aGVyIGJvb3QgZmlybXdhcmUuIElmIHVuc3VyZSwgc2F5IFkgaGVyZS4KLQogZW5kbWVudQogCiBtZW51ICJBZHZhbmNlZCBzZXR1cCIKQEAgLTIyMyw2ICsyMDgsMzYgQEAKIAloZXggIlNpemUgb2YgdXNlciB0YXNrIHNwYWNlIiBpZiBUQVNLX1NJWkVfQk9PTAogCWRlZmF1bHQgIjB4ODAwMDAwMDAiCiAKK2Nob2ljZQorCXByb21wdCAiUGFnZSBzaXplIgorCWRlZmF1bHQgTUlDUk9CTEFaRV80S19QQUdFUworCWRlcGVuZHMgb24gQURWQU5DRURfT1BUSU9OUyAmJiAhTU1VCisJaGVscAorCSAgU2VsZWN0IHRoZSBrZXJuZWwgbG9naWNhbCBwYWdlIHNpemUuIEluY3JlYXNpbmcgdGhlIHBhZ2Ugc2l6ZQorCSAgd2lsbCByZWR1Y2Ugc29mdHdhcmUgb3ZlcmhlYWQgYXQgZWFjaCBwYWdlIGJvdW5kYXJ5LCBhbGxvdworCSAgaGFyZHdhcmUgcHJlZmV0Y2ggbWVjaGFuaXNtcyB0byBiZSBtb3JlIGVmZmVjdGl2ZSwgYW5kIGFsbG93CisJICBsYXJnZXIgZG1hIHRyYW5zZmVycyBpbmNyZWFzaW5nIElPIGVmZmljaWVuY3kgYW5kIHJlZHVjaW5nCisJICBvdmVyaGVhZC4gSG93ZXZlciB0aGUgdXRpbGl6YXRpb24gb2YgbWVtb3J5IHdpbGwgaW5jcmVhc2UuCisJICBGb3IgZXhhbXBsZSwgZWFjaCBjYWNoZWQgZmlsZSB3aWxsIHVzaW5nIGEgbXVsdGlwbGUgb2YgdGhlCisJICBwYWdlIHNpemUgdG8gaG9sZCBpdHMgY29udGVudHMgYW5kIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlCisJICBlbmQgb2YgZmlsZSBhbmQgdGhlIGVuZCBvZiBwYWdlIGlzIHdhc3RlZC4KKworCSAgSWYgdW5zdXJlLCBjaG9vc2UgNEtfUEFHRVMuCisKK2NvbmZpZyBNSUNST0JMQVpFXzRLX1BBR0VTCisJYm9vbCAiNGsgcGFnZSBzaXplIgorCitjb25maWcgTUlDUk9CTEFaRV84S19QQUdFUworCWJvb2wgIjhrIHBhZ2Ugc2l6ZSIKKworY29uZmlnIE1JQ1JPQkxBWkVfMTZLX1BBR0VTCisJYm9vbCAiMTZrIHBhZ2Ugc2l6ZSIKKworY29uZmlnIE1JQ1JPQkxBWkVfMzJLX1BBR0VTCisJYm9vbCAiMzJrIHBhZ2Ugc2l6ZSIKKworZW5kY2hvaWNlCisKIGVuZG1lbnUKIAogc291cmNlICJtbS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL0tjb25maWcuZGVidWcgYi9hcmNoL21pY3JvYmxhemUvS2NvbmZpZy5kZWJ1ZwppbmRleCA5ZGM3MDhhLi5lNmU1ZTBkIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL21pY3JvYmxhemUvS2NvbmZpZy5kZWJ1ZwpAQCAtMTAsNiArMTAsNyBAQAogCiBjb25maWcgRUFSTFlfUFJJTlRLCiAJYm9vbCAiRWFybHkgcHJpbnRrIGZ1bmN0aW9uIGZvciBrZXJuZWwiCisJZGVwZW5kcyBvbiBTRVJJQUxfVUFSVExJVEVfQ09OU09MRQogCWRlZmF1bHQgbgogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIHR1cm5zIG9uL29mZiBlYXJseSBwcmludGsgbWVzc2FnZXMgdG8gY29uc29sZS4KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9NYWtlZmlsZSBiL2FyY2gvbWljcm9ibGF6ZS9NYWtlZmlsZQppbmRleCA3MmY2ZTg1Li41OTJjNzA3IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvTWFrZWZpbGUKKysrIGIvYXJjaC9taWNyb2JsYXplL01ha2VmaWxlCkBAIC0yNSw3ICsyNSw3IEBACiAgIGlmZXEgKCQoQ1BVX01BSk9SKSwzKQogICAgIENQVUZMQUdTLTEgKz0gLW1uby14bC1zb2Z0LW11bAogICBlbHNlCi0gICAgIyBVU0VfSFdfTVVMIGNhbiBiZSAwLCAxLCBvciAyLCBkZWZpbmluZyBhIGhlaXJhcmNoeSBvZiBIVyBNdWwgc3VwcG9ydC4KKyAgICAjIFVTRV9IV19NVUwgY2FuIGJlIDAsIDEsIG9yIDIsIGRlZmluaW5nIGEgaGllcmFyY2h5IG9mIEhXIE11bCBzdXBwb3J0LgogICAgIENQVUZMQUdTLSQoc3Vic3QgMSwsJChDT05GSUdfWElMSU5YX01JQ1JPQkxBWkUwX1VTRV9IV19NVUwpKSArPSAtbXhsLW11bHRpcGx5LWhpZ2gKICAgICBDUFVGTEFHUy0kKENPTkZJR19YSUxJTlhfTUlDUk9CTEFaRTBfVVNFX0hXX01VTCkgKz0gLW1uby14bC1zb2Z0LW11bAogICBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL21pY3JvYmxhemUvYm9vdC9NYWtlZmlsZQppbmRleCA1N2Y1MGMyLi5iZTAxZDc4IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL21pY3JvYmxhemUvYm9vdC9NYWtlZmlsZQpAQCAtMzUsMTMgKzM1LDE0IEBACiAJY21kX2NwID0gY2F0ICQ8ID4kQCQyIHx8IChybSAtZiAkQCAmJiBlY2hvIGZhbHNlKQogCiBxdWlldF9jbWRfc3RyaXAgPSBTVFJJUCAgICRACi0gICAgICBjbWRfc3RyaXAgPSAkKFNUUklQKSAtSyBfc3RhcnQgLUsgX2VuZCAtSyBfX2xvZ19idWYgLUsgX2ZkdF9zdGFydCB2bWxpbnV4IC1vICRACisJY21kX3N0cmlwID0gJChTVFJJUCkgLUsgbWljcm9ibGF6ZV9zdGFydCAtSyBfZW5kIC1LIF9fbG9nX2J1ZiBcCisJCQkJLUsgX2ZkdF9zdGFydCB2bWxpbnV4IC1vICRACiAKIHF1aWV0X2NtZF91aW1hZ2UgPSBVSU1BR0UgICRALnViCi0gICAgICBjbWRfdWltYWdlID0gJChDT05GSUdfU0hFTEwpICQoTUtJTUFHRSkgLUEgbWljcm9ibGF6ZSAtTyBsaW51eCAtVCBrZXJuZWwgXAotICAgICAgICAgICAgICAgICAgIC1DIG5vbmUgLW4gJ0xpbnV4LSQoS0VSTkVMUkVMRUFTRSknIFwKLSAgICAgICAgICAgICAgICAgICAtYSAkKENPTkZJR19LRVJORUxfQkFTRV9BRERSKSAtZSAkKENPTkZJR19LRVJORUxfQkFTRV9BRERSKSBcCi0gICAgICAgICAgICAgICAgICAgLWQgJEAgJEAudWIKKwljbWRfdWltYWdlID0gJChDT05GSUdfU0hFTEwpICQoTUtJTUFHRSkgLUEgbWljcm9ibGF6ZSAtTyBsaW51eCAtVCBrZXJuZWwgXAorCQktQyBub25lIC1uICdMaW51eC0kKEtFUk5FTFJFTEVBU0UpJyBcCisJCS1hICQoQ09ORklHX0tFUk5FTF9CQVNFX0FERFIpIC1lICQoQ09ORklHX0tFUk5FTF9CQVNFX0FERFIpIFwKKwkJLWQgJEAgJEAudWIKIAogJChvYmopL3NpbXBsZUltYWdlLiU6IHZtbGludXggRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxjcCwudW5zdHJpcCkKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IGE2ZWRkMzU2Li43ZWJkOTU1IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTE3LDYgKzE3LDcgQEAKIAogLyogU29tZWJvZHkgZGVwZW5kcyBvbiB0aGlzOyBzaWdoLi4uICovCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAvKiBMb29rIGF0IERvY3VtZW50YXRpb24vY2FjaGV0bGIudHh0ICovCiAKQEAgLTYwLDcgKzYxLDYgQEAKICNkZWZpbmUgaW52YWxpZGF0ZV9pY2FjaGUoKQkJCQltYmMtPmlpbigpOwogI2RlZmluZSBpbnZhbGlkYXRlX2ljYWNoZV9yYW5nZShzdGFydCwgZW5kKQkJbWJjLT5paW5yKHN0YXJ0LCBlbmQpOwogCi0KICNkZWZpbmUgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uodm1hLCBwZywgYWRyLCBsZW4pCWZsdXNoX2ljYWNoZSgpOwogI2RlZmluZSBmbHVzaF9pY2FjaGVfcGFnZSh2bWEsIHBnKQkJCWRvIHsgfSB3aGlsZSAoMCkKIApAQCAtNzIsOSArNzIsMTUgQEAKICNkZWZpbmUgZmx1c2hfZGNhY2hlKCkJCQkJCW1iYy0+ZGZsKCk7CiAjZGVmaW5lIGZsdXNoX2RjYWNoZV9yYW5nZShzdGFydCwgZW5kKQkJCW1iYy0+ZGZscihzdGFydCwgZW5kKTsKIAotI2RlZmluZSBBUkNIX0lNUExFTUVOVFNfRkxVU0hfRENBQ0hFX1BBR0UgMAotLyogRC1jYWNoZSBhbGlhc2luZyBwcm9ibGVtIGNhbid0IGhhcHBlbiAtIGNhY2hlIGlzIGJldHdlZW4gTU1VIGFuZCByYW0gKi8KLSNkZWZpbmUgZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIEFSQ0hfSU1QTEVNRU5UU19GTFVTSF9EQ0FDSEVfUEFHRSAxCisvKiBNUzogV2UgaGF2ZSB0byBpbXBsZW1lbnQgaXQgYmVjYXVzZSBvZiByb290ZnMtamZmczIgaXNzdWUgb24gV0IgKi8KKyNkZWZpbmUgZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSkgXAorZG8geyBcCisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHBhZ2VfYWRkcmVzcyhwYWdlKTsgLyogdmlydHVhbCAqLyBcCisJYWRkciA9ICh1MzIpdmlydF90b19waHlzKCh2b2lkICopYWRkcik7IFwKKwlmbHVzaF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkKSAoYWRkciksICh1bnNpZ25lZCkgKGFkZHIpICsgUEFHRV9TSVpFKTsgXAorfSB3aGlsZSAoMCk7CisKICNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2sobWFwcGluZykJZG8geyB9IHdoaWxlICgwKQogCkBAIC05Nyw4ICsxMDMsMTAgQEAKIAogI2RlZmluZSBjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKQkJXAogZG8gewkJCQkJCQkJCVwKKwl1MzIgYWRkciA9IHZpcnRfdG9fcGh5cyhkc3QpOwkJCQkJXAorCWludmFsaWRhdGVfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCkgKGFkZHIpLCAodW5zaWduZWQpIChhZGRyKSArIChsZW4pKTtcCiAJbWVtY3B5KChkc3QpLCAoc3JjKSwgKGxlbikpOwkJCQkJXAotCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQpIChkc3QpLCAodW5zaWduZWQpIChkc3QpICsgKGxlbikpOwlcCisJZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCkgKGFkZHIpLCAodW5zaWduZWQpIChhZGRyKSArIChsZW4pKTtcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikJCVwKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggMThiMzczMS4uNTA3Mzg5NSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTc5LDEyICs3OSw2IEBACiAJcmV0dXJuIG9wcy0+ZG1hX3N1cHBvcnRlZChkZXYsIG1hc2spOwogfQogCi0jaWZkZWYgQ09ORklHX1BDSQotLyogV2UgaGF2ZSBvdXIgb3duIGltcGxlbWVudGF0aW9uIG9mIHBjaV9zZXRfZG1hX21hc2soKSAqLwotI2RlZmluZSBIQVZFX0FSQ0hfUENJX1NFVF9ETUFfTUFTSwotCi0jZW5kaWYKLQogc3RhdGljIGlubGluZSBpbnQgZG1hX3NldF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IGRtYV9tYXNrKQogewogCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCA3ZDRhY2YyLi43MzJjYWYxIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC03Nyw3ICs3Nyw3IEBACiAjZGVmaW5lIEVMRl9EQVRBCUVMRkRBVEEyTVNCCiAjZW5kaWYKIAotI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQk0MDk2CisjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCVBBR0VfU0laRQogCiAKICNkZWZpbmUgRUxGX0NPUkVfQ09QWV9SRUdTKF9kZXN0LCBfcmVncykJCQlcCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vZXhjZXB0aW9ucy5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2V4Y2VwdGlvbnMuaAppbmRleCA0YzdiNWQwLi42NDc5MDk3IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vZXhjZXB0aW9ucy5oCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9leGNlcHRpb25zLmgKQEAgLTE0LDYgKzE0LDExIEBACiAjZGVmaW5lIF9BU01fTUlDUk9CTEFaRV9FWENFUFRJT05TX0gKIAogI2lmZGVmIF9fS0VSTkVMX18KKworI2lmbmRlZiBDT05GSUdfTU1VCisjZGVmaW5lIEVYX0hBTkRMRVJfU1RBQ0tfU0laCSg0KjE5KQorI2VuZGlmCisKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKIC8qIE1hY3JvcyB0byBlbmFibGUgYW5kIGRpc2FibGUgSFcgZXhjZXB0aW9ucyBpbiB0aGUgTVNSICovCkBAIC02NCwyMiArNjksNiBAQAogdm9pZCBkaWUoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqZnAsIGxvbmcgZXJyKTsKIHZvaWQgX2V4Y2VwdGlvbihpbnQgc2lnbnIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0tHREIpCi12b2lkICgqZGVidWdnZXIpKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLWludCAoKmRlYnVnZ2VyX2JwdCkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotaW50ICgqZGVidWdnZXJfc3N0ZXApKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLWludCAoKmRlYnVnZ2VyX2lhYnJfbWF0Y2gpKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLWludCAoKmRlYnVnZ2VyX2RhYnJfbWF0Y2gpKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLXZvaWQgKCpkZWJ1Z2dlcl9mYXVsdF9oYW5kbGVyKShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci0jZWxzZQotI2RlZmluZSBkZWJ1Z2dlcihyZWdzKQkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZGVidWdnZXJfYnB0KHJlZ3MpCQkwCi0jZGVmaW5lIGRlYnVnZ2VyX3NzdGVwKHJlZ3MpCQkwCi0jZGVmaW5lIGRlYnVnZ2VyX2lhYnJfbWF0Y2gocmVncykJMAotI2RlZmluZSBkZWJ1Z2dlcl9kYWJyX21hdGNoKHJlZ3MpCTAKLSNkZWZpbmUgZGVidWdnZXJfZmF1bHRfaGFuZGxlcgkJKCh2b2lkICgqKShzdHJ1Y3QgcHRfcmVncyAqKSkwKQotI2VuZGlmCi0KICNlbmRpZiAvKl9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX01JQ1JPQkxBWkVfRVhDRVBUSU9OU19IICovCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vaXJxLmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vaXJxLmgKaW5kZXggMzFhMzVjMy4uZWM1NTgzZCAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2lycS5oCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9pcnEuaApAQCAtMjcsMTcgKzI3LDYgQEAKIHN0cnVjdCBwdF9yZWdzOwogZXh0ZXJuIHZvaWQgZG9fSVJRKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAotLyoqCi0gKiBpcnFfb2ZfcGFyc2VfYW5kX21hcCAtIFBhcnNlIGFuZCBNYXAgYW4gaW50ZXJydXB0IGludG8gbGludXggdmlycSBzcGFjZQotICogQGRldmljZTogRGV2aWNlIG5vZGUgb2YgdGhlIGRldmljZSB3aG9zZSBpbnRlcnJ1cHQgaXMgdG8gYmUgbWFwcGVkCi0gKiBAaW5kZXg6IEluZGV4IG9mIHRoZSBpbnRlcnJ1cHQgdG8gbWFwCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBhIHdyYXBwZXIgdGhhdCBjaGFpbnMgb2ZfaXJxX21hcF9vbmUoKSBhbmQKLSAqIGlycV9jcmVhdGVfb2ZfbWFwcGluZygpIHRvIG1ha2UgdGhpbmdzIGVhc2llciB0byBjYWxsZXJzCi0gKi8KLXN0cnVjdCBkZXZpY2Vfbm9kZTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgaXJxX29mX3BhcnNlX2FuZF9tYXAoc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGludCBpbmRleCk7Ci0KIC8qKiBGSVhNRSAtIG5vdCBpbXBsZW1lbnQKICAqIGlycV9kaXNwb3NlX21hcHBpbmcgLSBVbm1hcCBhbiBpbnRlcnJ1cHQKICAqIEB2aXJxOiBsaW51eCB2aXJxIG51bWJlciBvZiB0aGUgaW50ZXJydXB0IHRvIHVubWFwCkBAIC02MiwxNyArNTEsNCBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBpcnFfY3JlYXRlX21hcHBpbmcoc3RydWN0IGlycV9ob3N0ICpob3N0LAogCQkJCQlpcnFfaHdfbnVtYmVyX3QgaHdpcnEpOwogCi0vKioKLSAqIGlycV9jcmVhdGVfb2ZfbWFwcGluZyAtIE1hcCBhIGhhcmR3YXJlIGludGVycnVwdCBpbnRvIGxpbnV4IHZpcnEgc3BhY2UKLSAqIEBjb250cm9sbGVyOiBEZXZpY2Ugbm9kZSBvZiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIKLSAqIEBpbnNwZWM6IEludGVycnVwdCBzcGVjaWZpZXIgZnJvbSB0aGUgZGV2aWNlLXRyZWUKLSAqIEBpbnRzaXplOiBTaXplIG9mIHRoZSBpbnRlcnJ1cHQgc3BlY2lmaWVyIGZyb20gdGhlIGRldmljZS10cmVlCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXJxX2NyZWF0ZV9tYXBwaW5nIGV4Y2VwdCB0aGF0IGl0IHRha2VzCi0gKiBhcyBpbnB1dCBpbmZvcm1hdGlvbnMgc3RyYWlnaHQgZnJvbSB0aGUgZGV2aWNlLXRyZWUgKHR5cGljYWxseSB0aGUgcmVzdWx0cwotICogb2YgdGhlIG9mX2lycV9tYXBfKigpIGZ1bmN0aW9ucy4KLSAqLwotZXh0ZXJuIHVuc2lnbmVkIGludCBpcnFfY3JlYXRlX29mX21hcHBpbmcoc3RydWN0IGRldmljZV9ub2RlICpjb250cm9sbGVyLAotCQkJCQl1MzIgKmludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplKTsKLQogI2VuZGlmIC8qIF9BU01fTUlDUk9CTEFaRV9JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2tnZGIuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9rZ2RiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhiMTdkNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9rZ2RiLmgKQEAgLTAsMCArMSwyOCBAQAorI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX19NSUNST0JMQVpFX0tHREJfSF9fCisjZGVmaW5lIF9fTUlDUk9CTEFaRV9LR0RCX0hfXworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIENBQ0hFX0ZMVVNIX0lTX1NBRkUJMQorI2RlZmluZSBCVUZNQVgJCQkyMDQ4CisKKy8qCisgKiAzMiAzMi1iaXQgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycyAocjAtcjMxKQorICogIDYgMzItYml0IHNwZWNpYWwgcmVnaXN0ZXJzIChwYywgbXNyLCBlYXIsIGVzciwgZnNyLCBidHIpCisgKiAxMiAzMi1iaXQgUFZSCisgKiAgIDcgMzItYml0IE1NVSBSZWdzIChyZWRyLCBycGlkLCByenByLCBydGxieCwgcnRsYnN4LCBydGxibG8sIHJ0bGJoaSkKKyAqIC0tLS0tLQorICogIDU3IHJlZ2lzdGVycworICovCisjZGVmaW5lIE5VTVJFR0JZVEVTCSg1NyAqIDQpCisKKyNkZWZpbmUgQlJFQUtfSU5TVFJfU0laRQk0CitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9rZ2RiX2JyZWFrcG9pbnQodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiYnJraSByMTYsIDB4MTg7Iik7Cit9CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfX01JQ1JPQkxBWkVfS0dEQl9IX18gKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vbG1iLmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vbG1iLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYTBhOTIuLjAwMDAwMDAKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2xtYi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBNaWNoYWwgU2ltZWsgPG1vbnN0ckBtb25zdHIuZXU+Ci0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaWZuZGVmIF9BU01fTUlDUk9CTEFaRV9MTUJfSAotI2RlZmluZSBfQVNNX01JQ1JPQkxBWkVfTE1CX0gKLQotLyogTE1CIGxpbWl0IGlzIE9GRiAqLwotI2RlZmluZSBMTUJfUkVBTF9MSU1JVAkweEZGRkZGRkZGCi0KLSNlbmRpZiAvKiBfQVNNX01JQ1JPQkxBWkVfTE1CX0ggKi8KLQotCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vbG9jYWw2NC5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2xvY2FsNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmM5M2I1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2xvY2FsNjQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWw2NC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL21lbWJsb2NrLmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vbWVtYmxvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWMyZmEzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL21lbWJsb2NrLmgKQEAgLTAsMCArMSwxNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBNaWNoYWwgU2ltZWsgPG1vbnN0ckBtb25zdHIuZXU+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fTUlDUk9CTEFaRV9NRU1CTE9DS19ICisjZGVmaW5lIF9BU01fTUlDUk9CTEFaRV9NRU1CTE9DS19ICisKKy8qIE1FTUJMT0NLIGxpbWl0IGlzIE9GRiAqLworI2RlZmluZSBNRU1CTE9DS19SRUFMX0xJTUlUCTB4RkZGRkZGRkYKKworI2VuZGlmIC8qIF9BU01fTUlDUk9CTEFaRV9NRU1CTE9DS19IICovCisKKwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL29mX2RldmljZS5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL29mX2RldmljZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2NiOTgwLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9vZl9kZXZpY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBNaWNoYWwgU2ltZWsgPG1vbnN0ckBtb25zdHIuZXU+Ci0gKgotICogYmFzZWQgb24gUG93ZXJQQyBvZl9kZXZpY2UuaAotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2lmbmRlZiBfQVNNX01JQ1JPQkxBWkVfT0ZfREVWSUNFX0gKLSNkZWZpbmUgX0FTTV9NSUNST0JMQVpFX09GX0RFVklDRV9ICi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvb2YuaD4KLQotLyoKLSAqIFRoZSBvZl9kZXZpY2UgaXMgYSBraW5kIG9mICJiYXNlIGNsYXNzIiB0aGF0IGlzIGEgc3VwZXJzZXQgb2YKLSAqIHN0cnVjdCBkZXZpY2UgZm9yIHVzZSBieSBkZXZpY2VzIGF0dGFjaGVkIHRvIGFuIE9GIG5vZGUgYW5kCi0gKiBwcm9iZWQgdXNpbmcgT0YgcHJvcGVydGllcy4KLSAqLwotc3RydWN0IG9mX2RldmljZSB7Ci0Jc3RydWN0IGRldmljZQkJZGV2OyAvKiBHZW5lcmljIGRldmljZSBpbnRlcmZhY2UgKi8KLQlzdHJ1Y3QgcGRldl9hcmNoZGF0YQlhcmNoZGF0YTsKLX07Ci0KLWV4dGVybiBzc2l6ZV90IG9mX2RldmljZV9nZXRfbW9kYWxpYXMoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCi0JCQkJCWNoYXIgKnN0ciwgc3NpemVfdCBsZW4pOwotCi1leHRlcm4gc3RydWN0IG9mX2RldmljZSAqb2ZfZGV2aWNlX2FsbG9jKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCQkJCSBjb25zdCBjaGFyICpidXNfaWQsCi0JCQkJCSBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpOwotCi1leHRlcm4gaW50IG9mX2RldmljZV91ZXZlbnQoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudik7Ci0KLWV4dGVybiB2b2lkIG9mX2RldmljZV9tYWtlX2J1c19pZChzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYpOwotCi0vKiBUaGlzIGlzIGp1c3QgaGVyZSBkdXJpbmcgdGhlIHRyYW5zaXRpb24gKi8KLSNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLSNlbmRpZiAvKiBfQVNNX01JQ1JPQkxBWkVfT0ZfREVWSUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9vZl9wbGF0Zm9ybS5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL29mX3BsYXRmb3JtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NDkxMjcuLjAwMDAwMDAKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL29mX3BsYXRmb3JtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEJlbmphbWluIEhlcnJlbnNjaG1pZHQsIElCTSBDb3JwLgotICoJCQk8YmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2lmbmRlZiBfQVNNX01JQ1JPQkxBWkVfT0ZfUExBVEZPUk1fSAotI2RlZmluZSBfQVNNX01JQ1JPQkxBWkVfT0ZfUExBVEZPUk1fSAotCi0vKiBUaGlzIGlzIGp1c3QgaGVyZSBkdXJpbmcgdGhlIHRyYW5zaXRpb24gKi8KLSNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotCi0vKgotICogVGhlIGxpc3Qgb2YgT0YgSURzIGJlbG93IGlzIHVzZWQgZm9yIG1hdGNoaW5nIGJ1cyB0eXBlcyBpbiB0aGUKLSAqIHN5c3RlbSB3aG9zZSBkZXZpY2VzIGFyZSB0byBiZSBleHBvc2VkIGFzIG9mX3BsYXRmb3JtX2RldmljZXMuCi0gKgotICogVGhpcyBpcyB0aGUgZGVmYXVsdCBsaXN0IHZhbGlkIGZvciBtb3N0IHBsYXRmb3Jtcy4gVGhpcyBmaWxlIHByb3ZpZGVzCi0gKiBmdW5jdGlvbnMgd2hvIGNhbiB0YWtlIGFuIGV4cGxpY2l0IGxpc3QgaWYgbmVjZXNzYXJ5IHRob3VnaAotICoKLSAqIFRoZSBzZWFyY2ggaXMgYWx3YXlzIHBlcmZvcm1lZCByZWN1cnNpdmVseSBsb29raW5nIGZvciBjaGlsZHJlbiBvZgotICogdGhlIHByb3ZpZGVkIGRldmljZV9ub2RlIGFuZCByZWN1cnNpdmVseSBpZiBzdWNoIGEgY2hpbGRyZW4gbWF0Y2hlcwotICogYSBidXMgdHlwZSBpbiB0aGUgbGlzdAotICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2RlZmF1bHRfYnVzX2lkc1tdID0gewotCXsgLnR5cGUgPSAic29jIiwgfSwKLQl7IC5jb21wYXRpYmxlID0gInNvYyIsIH0sCi0JeyAudHlwZSA9ICJwbGI1IiwgfSwKLQl7IC50eXBlID0gInBsYjQiLCB9LAotCXsgLnR5cGUgPSAib3BiIiwgfSwKLQl7IC50eXBlID0gInNpbXBsZSIsIH0sCi0Je30sCi19OwotCi0vKiBQbGF0Zm9ybSBkZXZpY2VzIGFuZCBidXNzZXMgY3JlYXRpb24gKi8KLWV4dGVybiBzdHJ1Y3Qgb2ZfZGV2aWNlICpvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCQkJCQljb25zdCBjaGFyICpidXNfaWQsCi0JCQkJCQlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpOwotLyogcHNldWRvICJtYXRjaGVzIiB2YWx1ZSB0byBub3QgZG8gZGVlcCBwcm9iZSAqLwotI2RlZmluZSBPRl9OT19ERUVQX1BST0JFICgoc3RydWN0IG9mX2RldmljZV9pZCAqKS0xKQotCi1leHRlcm4gaW50IG9mX3BsYXRmb3JtX2J1c19wcm9iZShzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3QsCi0JCQkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2hlcywKLQkJCQlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpOwotCi1leHRlcm4gc3RydWN0IG9mX2RldmljZSAqb2ZfZmluZF9kZXZpY2VfYnlfcGhhbmRsZShwaGFuZGxlIHBoKTsKLQotZXh0ZXJuIHZvaWQgb2ZfaW5zdGFudGlhdGVfcnRjKHZvaWQpOwotCi0jZW5kaWYgLyogX0FTTV9NSUNST0JMQVpFX09GX1BMQVRGT1JNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IDQ2NGZmMzIuLjRmMjY4ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMjMsOCArMjMsMTYgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKIC8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCi0jZGVmaW5lIFBBR0VfU0hJRlQJKDEyKQotI2RlZmluZSBQQUdFX1NJWkUJKF9BQygxLCBVTCkgPDwgUEFHRV9TSElGVCkKKyNpZiBkZWZpbmVkKENPTkZJR19NSUNST0JMQVpFXzMyS19QQUdFUykKKyNkZWZpbmUgUEFHRV9TSElGVAkJMTUKKyNlbGlmIGRlZmluZWQoQ09ORklHX01JQ1JPQkxBWkVfMTZLX1BBR0VTKQorI2RlZmluZSBQQUdFX1NISUZUCQkxNAorI2VsaWYgZGVmaW5lZChDT05GSUdfTUlDUk9CTEFaRV84S19QQUdFUykKKyNkZWZpbmUgUEFHRV9TSElGVAkJMTMKKyNlbHNlCisjZGVmaW5lIFBBR0VfU0hJRlQJCTEyCisjZW5kaWYKKyNkZWZpbmUgUEFHRV9TSVpFCShBU01fQ09OU1QoMSkgPDwgUEFHRV9TSElGVCkKICNkZWZpbmUgUEFHRV9NQVNLCSh+KFBBR0VfU0laRS0xKSkKIAogI2RlZmluZSBMT0FEX09GRlNFVAlBU01fQ09OU1QoKENPTkZJR19LRVJORUxfU1RBUlQtQ09ORklHX0tFUk5FTF9CQVNFX0FERFIpKQpAQCAtMzksMTMgKzQ3LDYgQEAKICNkZWZpbmUgUEFHRV9VUChhZGRyKQkoKChhZGRyKSsoKFBBR0VfU0laRSktMSkpJih+KChQQUdFX1NJWkUpLTEpKSkKICNkZWZpbmUgUEFHRV9ET1dOKGFkZHIpCSgoYWRkcikmKH4oKFBBR0VfU0laRSktMSkpKQogCi0vKiBhbGlnbiBhZGRyIG9uIGEgc2l6ZSBib3VuZGFyeSAtIGFkanVzdCBhZGRyZXNzIHVwL2Rvd24gaWYgbmVlZGVkICovCi0jZGVmaW5lIF9BTElHTl9VUChhZGRyLCBzaXplKQkoKChhZGRyKSsoKHNpemUpLTEpKSYofigoc2l6ZSktMSkpKQotI2RlZmluZSBfQUxJR05fRE9XTihhZGRyLCBzaXplKQkoKGFkZHIpJih+KChzaXplKS0xKSkpCi0KLS8qIGFsaWduIGFkZHIgb24gYSBzaXplIGJvdW5kYXJ5IC0gYWRqdXN0IGFkZHJlc3MgdXAgaWYgbmVlZGVkICovCi0jZGVmaW5lIF9BTElHTihhZGRyLCBzaXplKQlfQUxJR05fVVAoYWRkciwgc2l6ZSkKLQogI2lmbmRlZiBDT05GSUdfTU1VCiAvKgogICogUEFHRV9PRkZTRVQgLS0gdGhlIGZpcnN0IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHBhZ2Ugb2YgbWVtb3J5LiBXaGVuIG5vdApkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BjaS1icmlkZ2UuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wY2ktYnJpZGdlLmgKaW5kZXggMGM3N2NkYS4uMGM2ODc2NCAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BjaS1icmlkZ2UuaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGNpLWJyaWRnZS5oCkBAIC0xNzIsMTMgKzE3Miw4IEBACiAKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGhvc2VfbGlzdDsKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGNpX2FkZHJlc3NfdG9fcGlvKHBoeXNfYWRkcl90IGFkZHJlc3MpOwogZXh0ZXJuIGludCBwY2liaW9zX3ZhZGRyX2lzX2lvcG9ydCh2b2lkIF9faW9tZW0gKmFkZHJlc3MpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwY2lfYWRkcmVzc190b19waW8ocGh5c19hZGRyX3QgYWRkcmVzcykKLXsKLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpLTE7Ci19CiBzdGF0aWMgaW5saW5lIGludCBwY2liaW9zX3ZhZGRyX2lzX2lvcG9ydCh2b2lkIF9faW9tZW0gKmFkZHJlc3MpCiB7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcHJvbS5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3Byb20uaAppbmRleCBlN2Q2N2EzLi4xMDFmYTA5IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcHJvbS5oCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wcm9tLmgKQEAgLTIwLDkgKzIwLDYgQEAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L29mX2ZkdC5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCkBAIC01MCwyOSArNDcsMTAgQEAKICAqIE9GIGFkZHJlc3MgcmV0cmVpdmFsICYgdHJhbnNsYXRpb24KICAqLwogCi0vKiBUcmFuc2xhdGUgYW4gT0YgYWRkcmVzcyBibG9jayBpbnRvIGEgQ1BVIHBoeXNpY2FsIGFkZHJlc3MKLSAqLwotZXh0ZXJuIHU2NCBvZl90cmFuc2xhdGVfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCB1MzIgKmFkZHIpOwotCi0vKiBFeHRyYWN0IGFuIGFkZHJlc3MgZnJvbSBhIGRldmljZSwgcmV0dXJucyB0aGUgcmVnaW9uIHNpemUgYW5kCi0gKiB0aGUgYWRkcmVzcyBzcGFjZSBmbGFncyB0b28uIFRoZSBQQ0kgdmVyc2lvbiB1c2VzIGEgQkFSIG51bWJlcgotICogaW5zdGVhZCBvZiBhbiBhYnNvbHV0ZSBpbmRleAotICovCi1leHRlcm4gY29uc3QgdTMyICpvZl9nZXRfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgaW50IGluZGV4LAotCQkJdTY0ICpzaXplLCB1bnNpZ25lZCBpbnQgKmZsYWdzKTsKLWV4dGVybiBjb25zdCB1MzIgKm9mX2dldF9wY2lfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgaW50IGJhcl9ubywKLQkJCXU2NCAqc2l6ZSwgdW5zaWduZWQgaW50ICpmbGFncyk7Ci0KLS8qIEdldCBhbiBhZGRyZXNzIGFzIGEgcmVzb3VyY2UuIE5vdGUgdGhhdCBpZiB5b3VyIGFkZHJlc3MgaXMKLSAqIGEgUElPIGFkZHJlc3MsIHRoZSBjb252ZXJzaW9uIHdpbGwgZmFpbCBpZiB0aGUgcGh5c2ljYWwgYWRkcmVzcwotICogY2FuJ3QgYmUgaW50ZXJuYWxseSBjb252ZXJ0ZWQgdG8gYW4gSU8gdG9rZW4gd2l0aAotICogcGNpX2FkZHJlc3NfdG9fcGlvKCksIHRoYXQgaXMgYmVjYXVzZSBpdCdzIGVpdGhlciBjYWxsZWQgdG8gZWFybHkKLSAqIG9yIGl0IGNhbid0IGJlIG1hdGNoZWQgdG8gYW55IGhvc3QgYnJpZGdlIElPIHNwYWNlCi0gKi8KLWV4dGVybiBpbnQgb2ZfYWRkcmVzc190b19yZXNvdXJjZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgaW50IGluZGV4LAotCQkJCXN0cnVjdCByZXNvdXJjZSAqcik7Ci1leHRlcm4gaW50IG9mX3BjaV9hZGRyZXNzX3RvX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCBpbnQgYmFyLAotCQkJCXN0cnVjdCByZXNvdXJjZSAqcik7CisjaWZkZWYgQ09ORklHX1BDSQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGNpX2FkZHJlc3NfdG9fcGlvKHBoeXNfYWRkcl90IGFkZHJlc3MpOworI2RlZmluZSBwY2lfYWRkcmVzc190b19waW8gcGNpX2FkZHJlc3NfdG9fcGlvCisjZW5kaWYJLyogQ09ORklHX1BDSSAqLwogCiAvKiBQYXJzZSB0aGUgaWJtLGRtYS13aW5kb3cgcHJvcGVydHkgb2YgYW4gT0Ygbm9kZSBpbnRvIHRoZSBidXNubywgcGh5cyBhbmQKICAqIHNpemUgcGFyYW1ldGVycy4KQEAgLTg4LDY5ICs2Niw2IEBACiAvKiBHZXQgdGhlIE1BQyBhZGRyZXNzICovCiBleHRlcm4gY29uc3Qgdm9pZCAqb2ZfZ2V0X21hY19hZGRyZXNzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApOwogCi0vKgotICogT0YgaW50ZXJydXB0IG1hcHBpbmcKLSAqLwotCi0vKiBUaGlzIHN0cnVjdHVyZSBpcyByZXR1cm5lZCB3aGVuIGFuIGludGVycnVwdCBpcyBtYXBwZWQuIFRoZSBjb250cm9sbGVyCi0gKiBmaWVsZCBuZWVkcyB0byBiZSBwdXQoKSBhZnRlciB1c2UKLSAqLwotCi0jZGVmaW5lIE9GX01BWF9JUlFfU1BFQwkJNCAvKiBXZSBoYW5kbGUgc3BlY2lmaWVycyBvZiBhdCBtb3N0IDQgY2VsbHMgKi8KLQotc3RydWN0IG9mX2lycSB7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpjb250cm9sbGVyOyAvKiBJbnRlcnJ1cHQgY29udHJvbGxlciBub2RlICovCi0JdTMyIHNpemU7IC8qIFNwZWNpZmllciBzaXplICovCi0JdTMyIHNwZWNpZmllcltPRl9NQVhfSVJRX1NQRUNdOyAvKiBTcGVjaWZpZXIgY29weSAqLwotfTsKLQotLyoqCi0gKiBvZl9pcnFfbWFwX2luaXQgLSBJbml0aWFsaXplIHRoZSBpcnEgcmVtYXBwZXIKLSAqIEBmbGFnczoJZmxhZ3MgZGVmaW5pbmcgd29ya2Fyb3VuZHMgdG8gZW5hYmxlCi0gKgotICogU29tZSBtYWNoaW5lcyBoYXZlIGJ1Z3MgaW4gdGhlIGRldmljZS10cmVlIHdoaWNoIHJlcXVpcmUgY2VydGFpbiB3b3JrYXJvdW5kcwotICogdG8gYmUgYXBwbGllZC4gQ2FsbCB0aGlzIGJlZm9yZSBhbnkgaW50ZXJydXB0IG1hcHBpbmcgYXR0ZW1wdHMgdG8gZW5hYmxlCi0gKiB0aG9zZSB3b3JrYXJvdW5kcy4KLSAqLwotI2RlZmluZSBPRl9JTUFQX09MRFdPUkxEX01BQwkweDAwMDAwMDAxCi0jZGVmaW5lIE9GX0lNQVBfTk9fUEhBTkRMRQkweDAwMDAwMDAyCi0KLWV4dGVybiB2b2lkIG9mX2lycV9tYXBfaW5pdCh1bnNpZ25lZCBpbnQgZmxhZ3MpOwotCi0vKioKLSAqIG9mX2lycV9tYXBfcmF3IC0gTG93IGxldmVsIGludGVycnVwdCB0cmVlIHBhcnNpbmcKLSAqIEBwYXJlbnQ6CXRoZSBkZXZpY2UgaW50ZXJydXB0IHBhcmVudAotICogQGludHNwZWM6CWludGVycnVwdCBzcGVjaWZpZXIgKCJpbnRlcnJ1cHRzIiBwcm9wZXJ0eSBvZiB0aGUgZGV2aWNlKQotICogQG9pbnRzaXplOglzaXplIG9mIHRoZSBwYXNzZWQgaW4gaW50ZXJydXB0IHNwZWNpZmllcgotICogQGFkZHI6CWFkZHJlc3Mgc3BlY2lmaWVyIChzdGFydCBvZiAicmVnIiBwcm9wZXJ0eSBvZiB0aGUgZGV2aWNlKQotICogQG91dF9pcnE6CXN0cnVjdHVyZSBvZl9pcnEgZmlsbGVkIGJ5IHRoaXMgZnVuY3Rpb24KLSAqCi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgYSBuZWdhdGl2ZSBudW1iZXIgb24gZXJyb3IKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGEgbG93LWxldmVsIGludGVycnVwdCB0cmVlIHdhbGtpbmcgZnVuY3Rpb24uIEl0Ci0gKiBjYW4gYmUgdXNlZCB0byBkbyBhIHBhcnRpYWwgd2FsayB3aXRoIHN5bnRoZXRpemVkIHJlZyBhbmQgaW50ZXJydXB0cwotICogcHJvcGVydGllcywgZm9yIGV4YW1wbGUgd2hlbiByZXNvbHZpbmcgUENJIGludGVycnVwdHMgd2hlbiBubyBkZXZpY2UKLSAqIG5vZGUgZXhpc3QgZm9yIHRoZSBwYXJlbnQuCi0gKgotICovCi0KLWV4dGVybiBpbnQgb2ZfaXJxX21hcF9yYXcoc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQsIGNvbnN0IHUzMiAqaW50c3BlYywKLQkJCXUzMiBvaW50c2l6ZSwgY29uc3QgdTMyICphZGRyLAotCQkJc3RydWN0IG9mX2lycSAqb3V0X2lycSk7Ci0KLS8qKgotICogb2ZfaXJxX21hcF9vbmUgLSBSZXNvbHZlIGFuIGludGVycnVwdCBmb3IgYSBkZXZpY2UKLSAqIEBkZXZpY2U6CXRoZSBkZXZpY2Ugd2hvc2UgaW50ZXJydXB0IGlzIHRvIGJlIHJlc29sdmVkCi0gKiBAaW5kZXg6CWluZGV4IG9mIHRoZSBpbnRlcnJ1cHQgdG8gcmVzb2x2ZQotICogQG91dF9pcnE6CXN0cnVjdHVyZSBvZl9pcnEgZmlsbGVkIGJ5IHRoaXMgZnVuY3Rpb24KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHJlc29sdmVzIGFuIGludGVycnVwdCwgd2Fsa2luZyB0aGUgdHJlZSwgZm9yIGEgZ2l2ZW4KLSAqIGRldmljZS10cmVlIG5vZGUuIEl0J3MgdGhlIGhpZ2ggbGV2ZWwgcGVuZGFudCB0byBvZl9pcnFfbWFwX3JhdygpLgotICogSXQgYWxzbyBpbXBsZW1lbnRzIHRoZSB3b3JrYXJvdW5kcyBmb3IgT2xkV29scmQgTWFjcy4KLSAqLwotZXh0ZXJuIGludCBvZl9pcnFfbWFwX29uZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSwgaW50IGluZGV4LAotCQkJc3RydWN0IG9mX2lycSAqb3V0X2lycSk7Ci0KIC8qKgogICogb2ZfaXJxX21hcF9wY2kgLSBSZXNvbHZlIHRoZSBpbnRlcnJ1cHQgZm9yIGEgUENJIGRldmljZQogICogQHBkZXY6CXRoZSBkZXZpY2Ugd2hvc2UgaW50ZXJydXB0IGlzIHRvIGJlIHJlc29sdmVkCkBAIC0xNjMsMjAgKzc4LDE4IEBACiAgKiByZXNvbHZpbmcgdXNpbmcgdGhlIE9GIHRyZWUgd2Fsa2luZy4KICAqLwogc3RydWN0IHBjaV9kZXY7CitzdHJ1Y3Qgb2ZfaXJxOwogZXh0ZXJuIGludCBvZl9pcnFfbWFwX3BjaShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IG9mX2lycSAqb3V0X2lycSk7CiAKLWV4dGVybiBpbnQgb2ZfaXJxX3RvX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCBpbnQgaW5kZXgsCi0JCQlzdHJ1Y3QgcmVzb3VyY2UgKnIpOwotCi0vKioKLSAqIG9mX2lvbWFwIC0gTWFwcyB0aGUgbWVtb3J5IG1hcHBlZCBJTyBmb3IgYSBnaXZlbiBkZXZpY2Vfbm9kZQotICogQGRldmljZToJdGhlIGRldmljZSB3aG9zZSBpbyByYW5nZSB3aWxsIGJlIG1hcHBlZAotICogQGluZGV4OglpbmRleCBvZiB0aGUgaW8gcmFuZ2UKLSAqCi0gKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbWFwcGVkIG1lbW9yeQotICovCi1leHRlcm4gdm9pZCBfX2lvbWVtICpvZl9pb21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSwgaW50IGluZGV4KTsKLQogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworLyogVGhlc2UgaW5jbHVkZXMgYXJlIHB1dCBhdCB0aGUgYm90dG9tIGJlY2F1c2UgdGhleSBtYXkgY29udGFpbiB0aGluZ3MKKyAqIHRoYXQgYXJlIG92ZXJyaWRkZW4gYnkgdGhpcyBmaWxlLiAgSWRlYWxseSB0aGV5IHNob3VsZG4ndCBiZSBpbmNsdWRlZAorICogYnkgdGhpcyBmaWxlLCBidXQgdGhlcmUgYXJlIGEgYnVuY2ggb2YgLmMgZmlsZXMgdGhhdCBjdXJyZW50bHkgZGVwZW5kCisgKiBvbiBpdC4gIEV2ZW50dWFsbHkgdGhleSB3aWxsIGJlIGNsZWFuZWQgdXAuICovCisjaW5jbHVkZSA8bGludXgvb2ZfZmR0Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKICNlbmRpZiAvKiBfQVNNX01JQ1JPQkxBWkVfUFJPTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcHZyLmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcHZyLmgKaW5kZXggZTM4YWJjNy4uOTU3ODY2NiAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3B2ci5oCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wdnIuaApAQCAtMTYsNyArMTYsNyBAQAogI2RlZmluZSBQVlJfTVNSX0JJVCAweDQwMAogCiBzdHJ1Y3QgcHZyX3MgewotCXVuc2lnbmVkIHB2clsxNl07CisJdW5zaWduZWQgcHZyWzEyXTsKIH07CiAKIC8qIFRoZSBmb2xsb3dpbmcgdGFrZW4gZnJvbSBYaWxpbngncyBzdGFuZGFsb25lIEJTUCBwdnIuaCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3NldHVwLmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vc2V0dXAuaAppbmRleCA3ZjMxMzk0Li43ODJiNWM4IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vc2V0dXAuaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vc2V0dXAuaApAQCAtMjgsOCArMjgsNiBAQAogdm9pZCBoZWFydGJlYXQodm9pZCk7CiB2b2lkIHNldHVwX2hlYXJ0YmVhdCh2b2lkKTsKIAotdW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX2Nsb2NrKHZvaWQpOwotCiAjICAgaWZkZWYgQ09ORklHX01NVQogZXh0ZXJuIHZvaWQgbW11X3Jlc2V0KHZvaWQpOwogZXh0ZXJuIHZvaWQgZWFybHlfY29uc29sZV9yZWdfdGxiX2FsbG9jKHVuc2lnbmVkIGludCBhZGRyKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCA0OGM0ZjAzLi5lNmEyMjg0IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC00NSw3ICs0NSw2IEBACiAjZGVmaW5lIHNtcF9ybWIoKQkJcm1iKCkKICNkZWZpbmUgc21wX3dtYigpCQl3bWIoKQogCi12b2lkIHNob3dfdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nICpzdGFjayk7CiB2b2lkIF9fYmFkX3hjaGcodm9sYXRpbGUgdm9pZCAqcHRyLCBpbnQgc2l6ZSk7CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3hjaGcodW5zaWduZWQgbG9uZyB4LCB2b2xhdGlsZSB2b2lkICpwdHIsCkBAIC0xMDEsMTAgKzEwMCw3IEBACiAgKiBNaWNyb0JsYXplIGRvZXNuJ3QgaGFuZGxlIHVuYWxpZ25lZCBhY2Nlc3NlcyBpbiBoYXJkd2FyZS4KICAqCiAgKiBCYXNlZCBvbiB0aGlzIHdlIGZvcmNlIHRoZSBJUCBoZWFkZXIgYWxpZ25tZW50IGluIG5ldHdvcmsgZHJpdmVycy4KLSAqIFdlIGFsc28gbW9kaWZ5IE5FVF9TS0JfUEFEIHRvIGJlIGEgY2FjaGVsaW5lIGluIHNpemUsIHRodXMgbWFpbnRhaW5pbmcKLSAqIGNhY2hlbGluZSBhbGlnbm1lbnQgb2YgYnVmZmVycy4KICAqLwogI2RlZmluZSBORVRfSVBfQUxJR04JMgotI2RlZmluZSBORVRfU0tCX1BBRAlMMV9DQUNIRV9CWVRFUwogCiAjZW5kaWYgLyogX0FTTV9NSUNST0JMQVpFX1NZU1RFTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS90b3BvbG9neS5oCmluZGV4IDk2YmNlYTUuLjU0MjhmMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS90b3BvbG9neS5oCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS90b3BvbG9neS5oCkBAIC0xLDExICsxIEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdG9wb2xvZ3kuaD4KLQotI2lmbmRlZiBfQVNNX01JQ1JPQkxBWkVfVE9QT0xPR1lfSAotI2RlZmluZSBfQVNNX01JQ1JPQkxBWkVfVE9QT0xPR1lfSAotCi1zdHJ1Y3QgZGV2aWNlX25vZGU7Ci1zdGF0aWMgaW5saW5lIGludCBvZl9ub2RlX3RvX25pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAvKiBfQVNNX01JQ1JPQkxBWkVfVE9QT0xPR1lfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS91YWNjZXNzLmgKaW5kZXggMjY0NjBkMS4uZDg0MGY0YSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCkBAIC0zNTksNyArMzU5LDcgQEAKIAlfX2NvcHlfdG9mcm9tX3VzZXIoKF9fZm9yY2Ugdm9pZCBfX3VzZXIgKikodG8pLCBcCiAJCQkJKHZvaWQgX191c2VyICopKGZyb20pLCAobikpCiAjZGVmaW5lIF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWModG8sIGZyb20sIG4pIFwKLQkJY29weV9mcm9tX3VzZXIoKHRvKSwgKGZyb20pLCAobikpCisJCV9fY29weV9mcm9tX3VzZXIoKHRvKSwgKGZyb20pLCAobikpCiAKIHN0YXRpYyBpbmxpbmUgbG9uZyBjb3B5X2Zyb21fdXNlcih2b2lkICp0bywKIAkJY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKQEAgLTM3Myw3ICszNzMsNyBAQAogI2RlZmluZSBfX2NvcHlfdG9fdXNlcih0bywgZnJvbSwgbikJXAogCQlfX2NvcHlfdG9mcm9tX3VzZXIoKHZvaWQgX191c2VyICopKHRvKSwgXAogCQkJKF9fZm9yY2UgY29uc3Qgdm9pZCBfX3VzZXIgKikoZnJvbSksIChuKSkKLSNkZWZpbmUgX19jb3B5X3RvX3VzZXJfaW5hdG9taWModG8sIGZyb20sIG4pCWNvcHlfdG9fdXNlcigodG8pLCAoZnJvbSksIChuKSkKKyNkZWZpbmUgX19jb3B5X3RvX3VzZXJfaW5hdG9taWModG8sIGZyb20sIG4pIF9fY29weV90b191c2VyKCh0byksIChmcm9tKSwgKG4pKQogCiBzdGF0aWMgaW5saW5lIGxvbmcgY29weV90b191c2VyKHZvaWQgX191c2VyICp0bywKIAkJY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3Vud2luZC5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3Vud2luZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNDhiN2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vdW53aW5kLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIEJhY2t0cmFjZSBzdXBwb3J0IGZvciBNaWNyb2JsYXplCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwICBEaWdpdGFsIERlc2lnbiBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19NSUNST0JMQVpFX1VOV0lORF9ICisjZGVmaW5lIF9fTUlDUk9CTEFaRV9VTldJTkRfSAorCitzdHJ1Y3Qgc3RhY2tfdHJhY2U7CisKK3N0cnVjdCB0cmFwX2hhbmRsZXJfaW5mbyB7CisJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyOworCXVuc2lnbmVkIGxvbmcgZW5kX2FkZHI7CisJY29uc3QgY2hhciAgICAqdHJhcF9uYW1lOworfTsKK2V4dGVybiBzdHJ1Y3QgdHJhcF9oYW5kbGVyX2luZm8gbWljcm9ibGF6ZV90cmFwX2hhbmRsZXJzOworCitleHRlcm4gY29uc3QgY2hhciBfaHdfZXhjZXB0aW9uX2hhbmRsZXI7CitleHRlcm4gY29uc3QgY2hhciBleF9oYW5kbGVyX3VuaGFuZGxlZDsKKwordm9pZCBtaWNyb2JsYXplX3Vud2luZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UpOworCisjZW5kaWYJLyogX19NSUNST0JMQVpFX1VOV0lORF9IICovCisKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL01ha2VmaWxlCmluZGV4IGU1MWJjMTUuLmYwY2I1YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTUsOSArMTUsOSBAQAogZXh0cmEteSA6PSBoZWFkLm8gdm1saW51eC5sZHMKIAogb2JqLXkgKz0gZG1hLm8gZXhjZXB0aW9ucy5vIFwKLQlod19leGNlcHRpb25faGFuZGxlci5vIGluaXRfdGFzay5vIGludGMubyBpcnEubyBvZl9kZXZpY2UubyBcCi0Jb2ZfcGxhdGZvcm0ubyBwcm9jZXNzLm8gcHJvbS5vIHByb21fcGFyc2UubyBwdHJhY2UubyBcCi0Jc2V0dXAubyBzaWduYWwubyBzeXNfbWljcm9ibGF6ZS5vIHRpbWVyLm8gdHJhcHMubyByZXNldC5vCisJaHdfZXhjZXB0aW9uX2hhbmRsZXIubyBpbml0X3Rhc2subyBpbnRjLm8gaXJxLm8gXAorCXByb2Nlc3MubyBwcm9tLm8gcHJvbV9wYXJzZS5vIHB0cmFjZS5vIFwKKwlyZXNldC5vIHNldHVwLm8gc2lnbmFsLm8gc3lzX21pY3JvYmxhemUubyB0aW1lci5vIHRyYXBzLm8gdW53aW5kLm8KIAogb2JqLXkgKz0gY3B1LwogCkBAIC0yOCw1ICsyOCw2IEBACiBvYmotJChDT05GSUdfTU1VKQkJKz0gbWlzYy5vCiBvYmotJChDT05GSUdfU1RBQ0tUUkFDRSkJKz0gc3RhY2t0cmFjZS5vCiBvYmotJChDT05GSUdfRlVOQ1RJT05fVFJBQ0VSKQkrPSBmdHJhY2UubyBtY291bnQubworb2JqLSQoQ09ORklHX0tHREIpCQkrPSBrZ2RiLm8KIAogb2JqLXkJKz0gZW50cnkkKE1NVSkubwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvbWIuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L21iLmMKaW5kZXggNDIxNmViMS4uNzA4NmUzNSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvbWIuYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9tYi5jCkBAIC0xMjYsNiArMTI2LDcgQEAKIAkJCWNwdWluZm8ucHZyX3VzZXIxLAogCQkJY3B1aW5mby5wdnJfdXNlcjIpOwogCisJY291bnQgKz0gc2VxX3ByaW50ZihtLCAiUGFnZSBzaXplOlx0JWx1XG4iLCBQQUdFX1NJWkUpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2VudHJ5LW5vbW11LlMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2VudHJ5LW5vbW11LlMKaW5kZXggOGNjMThjZC4uY2E4NDM2OCAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9lbnRyeS1ub21tdS5TCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZW50cnktbm9tbXUuUwpAQCAtNTg4LDMgKzU4OCwzMSBAQAogI2luY2x1ZGUgInN5c2NhbGxfdGFibGUuUyIKIAogc3lzY2FsbF90YWJsZV9zaXplPSguLXN5c19jYWxsX3RhYmxlKQorCit0eXBlX1NZU0NBTEw6CisJLmFzY2lpICJTWVNDQUxMXDAiCit0eXBlX0lSUToKKwkuYXNjaWkgIklSUVwwIgordHlwZV9JUlFfUFJFRU1QVDoKKwkuYXNjaWkgIklSUSAoUFJFRU1QVEVEKVwwIgordHlwZV9TWVNDQUxMX1BSRUVNUFQ6CisJLmFzY2lpICIgU1lTQ0FMTCAoUFJFRU1QVEVEKVwwIgorCisJLyoKKwkgKiBUcmFwIGRlY29kaW5nIGZvciBzdGFjayB1bndpbmRlcgorCSAqIFR1cGxlcyBhcmUgKHN0YXJ0IGFkZHIsIGVuZCBhZGRyLCBzdHJpbmcpCisJICogSWYgcmV0dXJuIGFkZHJlc3MgbGllcyBvbiBbc3RhcnQgYWRkciwgZW5kIGFkZHJdLAorCSAqIHVud2luZGVyIGRpc3BsYXlzICdzdHJpbmcnCisJICovCisKKwkuYWxpZ24gNAorLmdsb2JhbCBtaWNyb2JsYXplX3RyYXBfaGFuZGxlcnMKK21pY3JvYmxhemVfdHJhcF9oYW5kbGVyczoKKwkvKiBFeGFjdCBtYXRjaGVzIGNvbWUgZmlyc3QgKi8KKwkud29yZCByZXRfdG9fdXNlciAgOyAud29yZCByZXRfdG9fdXNlciAgICA7IC53b3JkIHR5cGVfU1lTQ0FMTAorCS53b3JkIHJldF9mcm9tX2ludHI7IC53b3JkIHJldF9mcm9tX2ludHIgIDsgLndvcmQgdHlwZV9JUlEKKwkvKiBGdXp6eSBtYXRjaGVzIGdvIGhlcmUgKi8KKwkud29yZCByZXRfZnJvbV9pbnRyOyAud29yZCBub19pbnRyX3Jlc2NoZWQ7IC53b3JkIHR5cGVfSVJRX1BSRUVNUFQKKwkud29yZCB3b3JrX3BlbmRpbmcgOyAud29yZCBub193b3JrX3BlbmRpbmc7IC53b3JkIHR5cGVfU1lTQ0FMTF9QUkVFTVBUCisJLyogRW5kIG9mIHRhYmxlICovCisJLndvcmQgMCAgICAgICAgICAgICA7IC53b3JkIDAgICAgICAgICAgICAgICA7IC53b3JkIDAKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZW50cnkuUyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZW50cnkuUwppbmRleCBjMGVkZTI1Li4zMDQ4ODJlIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9lbnRyeS5TCkBAIC00OCwxMjggKzQ4LDEwNyBAQAogICovCiAjaWYgQ09ORklHX1hJTElOWF9NSUNST0JMQVpFMF9VU0VfTVNSX0lOU1RSCiAJLm1hY3JvCWNsZWFyX2JpcAotCW1zcmNscglyMTEsIE1TUl9CSVAKLQlub3AKKwltc3JjbHIJcjAsIE1TUl9CSVAKIAkuZW5kbQogCiAJLm1hY3JvCXNldF9iaXAKLQltc3JzZXQJcjExLCBNU1JfQklQCi0Jbm9wCisJbXNyc2V0CXIwLCBNU1JfQklQCiAJLmVuZG0KIAogCS5tYWNybwljbGVhcl9laXAKLQltc3JjbHIJcjExLCBNU1JfRUlQCi0Jbm9wCisJbXNyY2xyCXIwLCBNU1JfRUlQCiAJLmVuZG0KIAogCS5tYWNybwlzZXRfZWUKLQltc3JzZXQJcjExLCBNU1JfRUUKLQlub3AKKwltc3JzZXQJcjAsIE1TUl9FRQogCS5lbmRtCiAKIAkubWFjcm8JZGlzYWJsZV9pcnEKLQltc3JjbHIJcjExLCBNU1JfSUUKLQlub3AKKwltc3JjbHIJcjAsIE1TUl9JRQogCS5lbmRtCiAKIAkubWFjcm8JZW5hYmxlX2lycQotCW1zcnNldAlyMTEsIE1TUl9JRQotCW5vcAorCW1zcnNldAlyMCwgTVNSX0lFCiAJLmVuZG0KIAogCS5tYWNybwlzZXRfdW1zCi0JbXNyc2V0CXIxMSwgTVNSX1VNUwotCW5vcAotCW1zcmNscglyMTEsIE1TUl9WTVMKLQlub3AKKwltc3JzZXQJcjAsIE1TUl9VTVMKKwltc3JjbHIJcjAsIE1TUl9WTVMKIAkuZW5kbQogCiAJLm1hY3JvCXNldF92bXMKLQltc3JjbHIJcjExLCBNU1JfVU1TCi0Jbm9wCi0JbXNyc2V0CXIxMSwgTVNSX1ZNUwotCW5vcAorCW1zcmNscglyMCwgTVNSX1VNUworCW1zcnNldAlyMCwgTVNSX1ZNUworCS5lbmRtCisKKwkubWFjcm8JY2xlYXJfdW1zCisJbXNyY2xyCXIwLCBNU1JfVU1TCiAJLmVuZG0KIAogCS5tYWNybwljbGVhcl92bXNfdW1zCi0JbXNyY2xyCXIxMSwgTVNSX1ZNUwotCW5vcAotCW1zcmNscglyMTEsIE1TUl9VTVMKLQlub3AKKwltc3JjbHIJcjAsIE1TUl9WTVMgfCBNU1JfVU1TCiAJLmVuZG0KICNlbHNlCiAJLm1hY3JvCWNsZWFyX2JpcAogCW1mcwlyMTEsIHJtc3IKLQlub3AKIAlhbmRpCXIxMSwgcjExLCB+TVNSX0JJUAogCW10cwlybXNyLCByMTEKLQlub3AKIAkuZW5kbQogCiAJLm1hY3JvCXNldF9iaXAKIAltZnMJcjExLCBybXNyCi0Jbm9wCiAJb3JpCXIxMSwgcjExLCBNU1JfQklQCiAJbXRzCXJtc3IsIHIxMQotCW5vcAogCS5lbmRtCiAKIAkubWFjcm8JY2xlYXJfZWlwCiAJbWZzCXIxMSwgcm1zcgotCW5vcAogCWFuZGkJcjExLCByMTEsIH5NU1JfRUlQCiAJbXRzCXJtc3IsIHIxMQotCW5vcAogCS5lbmRtCiAKIAkubWFjcm8Jc2V0X2VlCiAJbWZzCXIxMSwgcm1zcgotCW5vcAogCW9yaQlyMTEsIHIxMSwgTVNSX0VFCiAJbXRzCXJtc3IsIHIxMQotCW5vcAogCS5lbmRtCiAKIAkubWFjcm8JZGlzYWJsZV9pcnEKIAltZnMJcjExLCBybXNyCi0Jbm9wCiAJYW5kaQlyMTEsIHIxMSwgfk1TUl9JRQogCW10cwlybXNyLCByMTEKLQlub3AKIAkuZW5kbQogCiAJLm1hY3JvCWVuYWJsZV9pcnEKIAltZnMJcjExLCBybXNyCi0Jbm9wCiAJb3JpCXIxMSwgcjExLCBNU1JfSUUKIAltdHMJcm1zciwgcjExCi0Jbm9wCiAJLmVuZG0KIAogCS5tYWNybyBzZXRfdW1zCiAJbWZzCXIxMSwgcm1zcgotCW5vcAogCW9yaQlyMTEsIHIxMSwgTVNSX1ZNUwogCWFuZG5pCXIxMSwgcjExLCBNU1JfVU1TCiAJbXRzCXJtc3IsIHIxMQotCW5vcAogCS5lbmRtCiAKIAkubWFjcm8Jc2V0X3ZtcwogCW1mcwlyMTEsIHJtc3IKLQlub3AKIAlvcmkJcjExLCByMTEsIE1TUl9WTVMKIAlhbmRuaQlyMTEsIHIxMSwgTVNSX1VNUwogCW10cwlybXNyLCByMTEKLQlub3AKKwkuZW5kbQorCisJLm1hY3JvCWNsZWFyX3VtcworCW1mcwlyMTEsIHJtc3IKKwlhbmRuaQlyMTEsIHIxMSwgTVNSX1VNUworCW10cwlybXNyLHIxMQogCS5lbmRtCiAKIAkubWFjcm8JY2xlYXJfdm1zX3VtcwogCW1mcwlyMTEsIHJtc3IKLQlub3AKIAlhbmRuaQlyMTEsIHIxMSwgKE1TUl9WTVN8TVNSX1VNUykKIAltdHMJcm1zcixyMTEKLQlub3AKIAkuZW5kbQogI2VuZGlmCiAKQEAgLTE4MCwxOCArMTU5LDIyIEBACiAKIC8qIHR1cm4gb24gdmlydHVhbCBwcm90ZWN0ZWQgbW9kZSBzYXZlICovCiAjZGVmaW5lIFZNX09OCQlcCi0Jc2V0X3VtczsJCVwKKwlzZXRfdW1zOwlcCiAJcnRlZAlyMCwgMmY7CVwKLTI6IG5vcDsKKwlub3A7IFwKKzI6CiAKIC8qIHR1cm4gb2ZmIHZpcnR1YWwgcHJvdGVjdGVkIG1vZGUgc2F2ZSBhbmQgdXNlciBtb2RlIHNhdmUqLwogI2RlZmluZSBWTV9PRkYJCQlcCi0JY2xlYXJfdm1zX3VtczsJCQlcCisJY2xlYXJfdm1zX3VtczsJCVwKIAlydGVkCXIwLCBUT1BIWVMoMWYpOwlcCi0xOiBub3A7CisJbm9wOyBcCisxOgogCiAjZGVmaW5lIFNBVkVfUkVHUyBcCiAJc3dpCXIyLCByMSwgUFRPK1BUX1IyOwkvKiBTYXZlIFNEQSAqLwkJCVwKKwlzd2kJcjMsIHIxLCBQVE8rUFRfUjM7CQkJCQlcCisJc3dpCXI0LCByMSwgUFRPK1BUX1I0OwkJCQkJXAogCXN3aQlyNSwgcjEsIFBUTytQVF9SNTsJCQkJCVwKIAlzd2kJcjYsIHIxLCBQVE8rUFRfUjY7CQkJCQlcCiAJc3dpCXI3LCByMSwgUFRPK1BUX1I3OwkJCQkJXApAQCAtMjE4LDE0ICsyMDEsMTQgQEAKIAlzd2kJcjMwLCByMSwgUFRPK1BUX1IzMDsJCQkJCVwKIAlzd2kJcjMxLCByMSwgUFRPK1BUX1IzMTsJLyogU2F2ZSBjdXJyZW50IHRhc2sgcmVnICovCVwKIAltZnMJcjExLCBybXNyOwkJLyogc2F2ZSBNU1IgKi8JCQlcCi0Jbm9wOwkJCQkJCQkJXAogCXN3aQlyMTEsIHIxLCBQVE8rUFRfTVNSOwogCiAjZGVmaW5lIFJFU1RPUkVfUkVHUyBcCiAJbHdpCXIxMSwgcjEsIFBUTytQVF9NU1I7CQkJCQlcCiAJbXRzCXJtc3IgLCByMTE7CQkJCQkJXAotCW5vcDsJCQkJCQkJCVwKIAlsd2kJcjIsIHIxLCBQVE8rUFRfUjI7CS8qIHJlc3RvcmUgU0RBICovCQlcCisJbHdpCXIzLCByMSwgUFRPK1BUX1IzOwkJCQkJXAorCWx3aQlyNCwgcjEsIFBUTytQVF9SNDsJCQkJCVwKIAlsd2kJcjUsIHIxLCBQVE8rUFRfUjU7CQkJCQlcCiAJbHdpCXI2LCByMSwgUFRPK1BUX1I2OwkJCQkJXAogCWx3aQlyNywgcjEsIFBUTytQVF9SNzsJCQkJCVwKQEAgLTI1Miw2ICsyMzUsMzkgQEAKIAlsd2kJcjMwLCByMSwgUFRPK1BUX1IzMDsJCQkJCVwKIAlsd2kJcjMxLCByMSwgUFRPK1BUX1IzMTsJLyogUmVzdG9yZSBjdXIgdGFzayByZWcgKi8KIAorI2RlZmluZSBTQVZFX1NUQVRFCVwKKwlzd2kJcjEsIHIwLCBUT1BIWVMoUEVSX0NQVShFTlRSWV9TUCkpOyAvKiBzYXZlIHN0YWNrICovCVwKKwkvKiBTZWUgaWYgYWxyZWFkeSBpbiBrZXJuZWwgbW9kZS4qLwkJCQlcCisJbWZzCXIxLCBybXNyOwkJCQkJCVwKKwlhbmRpCXIxLCByMSwgTVNSX1VNUzsJCQkJCVwKKwlibmVpCXIxLCAxZjsJCQkJCQlcCisJLyogS2VybmVsLW1vZGUgc3RhdGUgc2F2ZS4gICovCQkJCQlcCisJLyogUmVsb2FkIGtlcm5lbCBzdGFjay1wdHIuICovCQkJCQlcCisJbHdpCXIxLCByMCwgVE9QSFlTKFBFUl9DUFUoRU5UUllfU1ApKTsJCQlcCisJLyogRklYTUU6IEkgY2FuIGFkZCB0aGVzZSB0d28gbGluZXMgdG8gb25lICovCQkJXAorCS8qIHRvcGh5cyhyMSxyMSk7ICovCQkJCQkJXAorCS8qIGFkZGlrCXIxLCByMSwgLVNUQVRFX1NBVkVfU0laRTsgKi8JCQlcCisJYWRkaWsJcjEsIHIxLCBDT05GSUdfS0VSTkVMX0JBU0VfQUREUiAtIENPTkZJR19LRVJORUxfU1RBUlQgLSBTVEFURV9TQVZFX1NJWkU7IFwKKwlTQVZFX1JFR1MJCQkJCQkJXAorCWJyaWQJMmY7CQkJCQkJCVwKKwlzd2kJcjEsIHIxLCBQVE8rUFRfTU9ERTsgCSAJCQkJXAorMToJLyogVXNlci1tb2RlIHN0YXRlIHNhdmUuICAqLwkJCQkJXAorCWx3aQlyMSwgcjAsIFRPUEhZUyhQRVJfQ1BVKENVUlJFTlRfU0FWRSkpOyAvKiBnZXQgc2F2ZWQgY3VycmVudCAqL1wKKwl0b3BoeXMocjEscjEpOwkJCQkJCQlcCisJbHdpCXIxLCByMSwgVFNfVEhSRUFEX0lORk87CS8qIGdldCB0aGUgdGhyZWFkIGluZm8gKi8JXAorCS8qIE1TIHRoZXNlIHRocmVlIGluc3RydWN0aW9ucyBjYW4gYmUgYWRkZWQgdG8gb25lICovCQlcCisJLyogYWRkaWsJcjEsIHIxLCBUSFJFQURfU0laRTsgKi8JCQkJXAorCS8qIHRvcGh5cyhyMSxyMSk7ICovCQkJCQkJXAorCS8qIGFkZGlrCXIxLCByMSwgLVNUQVRFX1NBVkVfU0laRTsgKi8JCQlcCisJYWRkaWsgcjEsIHIxLCBUSFJFQURfU0laRSArIENPTkZJR19LRVJORUxfQkFTRV9BRERSIC0gQ09ORklHX0tFUk5FTF9TVEFSVCAtIFNUQVRFX1NBVkVfU0laRTsgXAorCVNBVkVfUkVHUwkJCQkJCQlcCisJbHdpCXIxMSwgcjAsIFRPUEhZUyhQRVJfQ1BVKEVOVFJZX1NQKSk7CQkJXAorCXN3aQlyMTEsIHIxLCBQVE8rUFRfUjE7IC8qIFN0b3JlIHVzZXIgU1AuICAqLwkJXAorCXN3aQlyMCwgcjEsIFBUTyArIFBUX01PREU7IC8qIFdhcyBpbiB1c2VyLW1vZGUuICAqLwkJXAorCS8qIE1TOiBJIGFtIGNsZWFyaW5nIFVNUyBldmVuIGluIGNhc2Ugd2hlbiBJIGNvbWUgZnJvbSBrZXJuZWwgc3BhY2UgKi8gXAorCWNsZWFyX3VtczsgCQkJCQkJCVwKKzI6CWx3aQlDVVJSRU5UX1RBU0ssIHIwLCBUT1BIWVMoUEVSX0NQVShDVVJSRU5UX1NBVkUpKTsKKwogLnRleHQKIAogLyoKQEAgLTI2Nyw0NSArMjgzLDIzIEBACiAgKiBhcmUgbWFza2VkLiBUaGlzIGlzIG5pY2UsIG1lYW5zIHdlIGRvbid0IGhhdmUgdG8gQ0xJIGJlZm9yZSBzdGF0ZSBzYXZlCiAgKi8KIENfRU5UUlkoX3VzZXJfZXhjZXB0aW9uKToKLQlzd2kJcjEsIHIwLCBUT1BIWVMoUEVSX0NQVShFTlRSWV9TUCkpIC8qIHNhdmUgc3RhY2sgKi8KIAlhZGRpCXIxNCwgcjE0LCA0CS8qIHJldHVybiBhZGRyZXNzIGlzIDQgYnl0ZSBhZnRlciBjYWxsICovCi0Jc3dpCXIxMSwgcjAsIFRPUEhZUyhyMF9yYW0gKyBQVE8gKyBQVF9SMTEpOwkvKiBTYXZlIHIxMSAqLworCXN3aQlyMSwgcjAsIFRPUEhZUyhQRVJfQ1BVKEVOVFJZX1NQKSkgLyogc2F2ZSBzdGFjayAqLwogCi0JbHdpCXIxMSwgcjAsIFRPUEhZUyhQRVJfQ1BVKEtNKSk7LyogU2VlIGlmIGFscmVhZHkgaW4ga2VybmVsIG1vZGUuKi8KLQliZXFpCXIxMSwgMWY7CQkvKiBKdW1wIGFoZWFkIGlmIGNvbWluZyBmcm9tIHVzZXIgKi8KLS8qIEtlcm5lbC1tb2RlIHN0YXRlIHNhdmUuICovCi0JbHdpCXIxMSwgcjAsIFRPUEhZUyhQRVJfQ1BVKEVOVFJZX1NQKSk7IC8qIFJlbG9hZCBrZXJuZWwgc3RhY2stcHRyKi8KLQl0b3BoeXMocjEscjExKTsKLQlzd2kJcjExLCByMSwgKFBUX1IxLVBUX1NJWkUpOyAvKiBTYXZlIG9yaWdpbmFsIFNQLiAqLwotCWx3aQlyMTEsIHIwLCBUT1BIWVMocjBfcmFtICsgUFRPICsgUFRfUjExKTsgLyogcmVzdG9yZSByMTEgKi8KLQotCWFkZGlrCXIxLCByMSwgLVNUQVRFX1NBVkVfU0laRTsgLyogTWFrZSByb29tIG9uIHRoZSBzdGFjay4gKi8KLQlTQVZFX1JFR1MKLQotCWFkZGkJcjExLCByMCwgMTsgCQkvKiBXYXMgaW4ga2VybmVsLW1vZGUuICovCi0Jc3dpCXIxMSwgcjEsIFBUTytQVF9NT0RFOyAvKiBwdF9yZWdzIC0+IGtlcm5lbCBtb2RlICovCi0JYnJpZAkyZjsKLQlub3A7CQkJCS8qIEZpbGwgZGVsYXkgc2xvdCAqLwotCi0vKiBVc2VyLW1vZGUgc3RhdGUgc2F2ZS4gICovCi0xOgotCWx3aQlyMTEsIHIwLCBUT1BIWVMocjBfcmFtICsgUFRPICsgUFRfUjExKTsJLyogcmVzdG9yZSByMTEgKi8KIAlsd2kJcjEsIHIwLCBUT1BIWVMoUEVSX0NQVShDVVJSRU5UX1NBVkUpKTsgLyogZ2V0IHNhdmVkIGN1cnJlbnQgKi8KIAl0b3BoeXMocjEscjEpOwogCWx3aQlyMSwgcjEsIFRTX1RIUkVBRF9JTkZPOwkvKiBnZXQgc3RhY2sgZnJvbSB0YXNrX3N0cnVjdCAqLwotLyogY2FsY3VsYXRlIGtlcm5lbCBzdGFjayBwb2ludGVyIGZyb20gdGFzayBzdHJ1Y3QgOGsgKi8KLQlhZGRpawlyMSwgcjEsIFRIUkVBRF9TSVpFOwotCXRvcGh5cyhyMSxyMSk7Ci0KLQlhZGRpawlyMSwgcjEsIC1TVEFURV9TQVZFX1NJWkU7IC8qIE1ha2Ugcm9vbSBvbiB0aGUgc3RhY2suICAqLworCS8qIE1TIHRoZXNlIHRocmVlIGluc3RydWN0aW9ucyBjYW4gYmUgYWRkZWQgdG8gb25lICovCisJLyogYWRkaWsJcjEsIHIxLCBUSFJFQURfU0laRTsgKi8KKwkvKiB0b3BoeXMocjEscjEpOyAqLworCS8qIGFkZGlrCXIxLCByMSwgLVNUQVRFX1NBVkVfU0laRTsgKi8KKwlhZGRpayByMSwgcjEsIFRIUkVBRF9TSVpFICsgQ09ORklHX0tFUk5FTF9CQVNFX0FERFIgLSBDT05GSUdfS0VSTkVMX1NUQVJUIC0gU1RBVEVfU0FWRV9TSVpFOwogCVNBVkVfUkVHUwogCi0Jc3dpCXIwLCByMSwgUFRPK1BUX01PREU7CQkJLyogV2FzIGluIHVzZXItbW9kZS4gKi8KIAlsd2kJcjExLCByMCwgVE9QSFlTKFBFUl9DUFUoRU5UUllfU1ApKTsKIAlzd2kJcjExLCByMSwgUFRPK1BUX1IxOwkJLyogU3RvcmUgdXNlciBTUC4gICovCi0JYWRkaQlyMTEsIHIwLCAxOwotCXN3aQlyMTEsIHIwLCBUT1BIWVMoUEVSX0NQVShLTSkpOwkvKiBOb3cgd2UncmUgaW4ga2VybmVsLW1vZGUuICAqLwotMjoJbHdpCUNVUlJFTlRfVEFTSywgcjAsIFRPUEhZUyhQRVJfQ1BVKENVUlJFTlRfU0FWRSkpOworCWNsZWFyX3VtczsKKwlsd2kJQ1VSUkVOVF9UQVNLLCByMCwgVE9QSFlTKFBFUl9DUFUoQ1VSUkVOVF9TQVZFKSk7CiAJLyogU2F2ZSBhd2F5IHRoZSBzeXNjYWxsIG51bWJlci4gICovCiAJc3dpCXIxMiwgcjEsIFBUTytQVF9SMDsKIAl0b3ZpcnQocjEscjEpCkBAIC0zMTYsMTAgKzMxMCw4IEBACiAgKiByZWdpc3RlciBzaG91bGQgcG9pbnQgdG8gdGhlIGxvY2F0aW9uIHdoZXJlCiAgKiB0aGUgY2FsbGVkIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4uICBbbm90ZSB0aGF0IE1BS0VfU1lTX0NBTEwgdXNlcyBsYWJlbCAxXSAqLwogCi0JIyBTdGVwIGludG8gdmlydHVhbCBtb2RlLgotCXNldF92bXM7Ci0JYWRkaWsJcjExLCByMCwgM2YKLQlydGlkCXIxMSwgMAorCS8qIFN0ZXAgaW50byB2aXJ0dWFsIG1vZGUgKi8KKwlydGJkCXIwLCAzZgogCW5vcAogMzoKIAlsd2kJcjExLCBDVVJSRU5UX1RBU0ssIFRTX1RIUkVBRF9JTkZPIC8qIGdldCB0aHJlYWQgaW5mbyAqLwpAQCAtMzYzLDI0ICszNTUsMTcgQEAKIAkjIEZpbmQgYW5kIGp1bXAgaW50byB0aGUgc3lzY2FsbCBoYW5kbGVyLgogCWx3aQlyMTIsIHIxMiwgc3lzX2NhbGxfdGFibGUKIAkvKiB3aGVyZSB0aGUgdHJhcCBzaG91bGQgcmV0dXJuIG5lZWQgLTggdG8gYWRqdXN0IGZvciBydHNkIHIxNSwgOCAqLwotCWxhCXIxNSwgcjAsIHJldF9mcm9tX3RyYXAtOAorCWFkZGkJcjE1LCByMCwgcmV0X2Zyb21fdHJhcC04CiAJYnJhCXIxMgogCiAJLyogVGhlIHN5c2NhbGwgbnVtYmVyIGlzIGludmFsaWQsIHJldHVybiBhbiBlcnJvci4gICovCiA1OgorCXJ0c2QJcjE1LCA4OwkJLyogbG9va3MgbGlrZSBhIG5vcm1hbCBzdWJyb3V0aW5lIHJldHVybiAqLwogCWFkZGkJcjMsIHIwLCAtRU5PU1lTOwotCXJ0c2QJcjE1LDg7CQkvKiBsb29rcyBsaWtlIGEgbm9ybWFsIHN1YnJvdXRpbmUgcmV0dXJuICovCi0Jb3IgCXIwLCByMCwgcjAKLQogCiAvKiBFbnRyeSBwb2ludCB1c2VkIHRvIHJldHVybiBmcm9tIGEgc3lzY2FsbC90cmFwICovCiAvKiBXZSByZS1lbmFibGUgQklQIGJpdCBiZWZvcmUgc3RhdGUgcmVzdG9yZSAqLwogQ19FTlRSWShyZXRfZnJvbV90cmFwKToKLQlzZXRfYmlwOwkJCS8qICBJbnRzIG1hc2tlZCBmb3Igc3RhdGUgcmVzdG9yZSovCi0JbHdpCXIxMSwgcjEsIFBUTytQVF9NT0RFOwotLyogU2VlIGlmIHJldHVybmluZyB0byBrZXJuZWwgbW9kZSwgaWYgc28sIHNraXAgcmVzY2hlZCAmYy4gICovCi0JYm5laQlyMTEsIDJmOwotCiAJc3dpCXIzLCByMSwgUFRPICsgUFRfUjMKIAlzd2kJcjQsIHIxLCBQVE8gKyBQVF9SNAogCkBAIC00MTMsMzIgKzM5OCwxOSBAQAogCWFuZGkJcjExLCByMTEsIF9USUZfU0lHUEVORElORzsKIAliZXFpCXIxMSwgMWY7CQkvKiBTaWduYWxzIHRvIGhhbmRsZSwgaGFuZGxlIHRoZW0gKi8KIAotCWxhCXI1LCByMSwgUFRPOwkJLyogQXJnIDE6IHN0cnVjdCBwdF9yZWdzICpyZWdzICovCisJYWRkaWsJcjUsIHIxLCBQVE87CQkvKiBBcmcgMTogc3RydWN0IHB0X3JlZ3MgKnJlZ3MgKi8KIAlhZGRpCXI3LCByMCwgMTsJCS8qIEFyZyAzOiBpbnQgaW5fc3lzY2FsbCAqLwogCWJyYWxpZAlyMTUsIGRvX3NpZ25hbDsJLyogSGFuZGxlIGFueSBzaWduYWxzICovCiAJYWRkCXI2LCByMCwgcjA7CQkvKiBBcmcgMjogc2lnc2V0X3QgKm9sZHNldCAqLwogCiAvKiBGaW5hbGx5LCByZXR1cm4gdG8gdXNlciBzdGF0ZS4gICovCi0xOgotCWx3aQlyMywgcjEsIFBUTyArIFBUX1IzOyAvKiByZXN0b3JlIHN5c2NhbGwgcmVzdWx0ICovCi0JbHdpCXI0LCByMSwgUFRPICsgUFRfUjQ7Ci0KLQlzd2kJcjAsIHIwLCBQRVJfQ1BVKEtNKTsJLyogTm93IG9mZmljaWFsbHkgaW4gdXNlciBzdGF0ZS4gKi8KKzE6CXNldF9iaXA7CQkJLyogIEludHMgbWFza2VkIGZvciBzdGF0ZSByZXN0b3JlICovCiAJc3dpCUNVUlJFTlRfVEFTSywgcjAsIFBFUl9DUFUoQ1VSUkVOVF9TQVZFKTsgLyogc2F2ZSBjdXJyZW50ICovCiAJVk1fT0ZGOwogCXRvcGh5cyhyMSxyMSk7CiAJUkVTVE9SRV9SRUdTOwogCWFkZGlrCXIxLCByMSwgU1RBVEVfU0FWRV9TSVpFCQkvKiBDbGVhbiB1cCBzdGFjayBzcGFjZS4gICovCiAJbHdpCXIxLCByMSwgUFRfUjEgLSBQVF9TSVpFOy8qIFJlc3RvcmUgdXNlciBzdGFjayBwb2ludGVyLiAqLwotCWJyaQk2ZjsKLQotLyogUmV0dXJuIHRvIGtlcm5lbCBzdGF0ZS4gICovCi0yOglWTV9PRkY7Ci0JdG9waHlzKHIxLHIxKTsKLQlSRVNUT1JFX1JFR1M7Ci0JYWRkaWsJcjEsIHIxLCBTVEFURV9TQVZFX1NJWkUJCS8qIENsZWFuIHVwIHN0YWNrIHNwYWNlLiAgKi8KLQl0b3ZpcnQocjEscjEpOwotNjoKIFRSQVBfcmV0dXJuOgkJLyogTWFrZSBnbG9iYWwgc3ltYm9sIGZvciBkZWJ1Z2dpbmcgKi8KIAlydGJkCXIxNCwgMDsJLyogSW5zdHJ1Y3Rpb25zIHRvIHJldHVybiBmcm9tIGFuIElSUSAqLwogCW5vcDsKQEAgLTQ1MCwxMiArNDIyLDExIEBACiBDX0VOVFJZKHN5c19mb3JrX3dyYXBwZXIpOgogCWFkZGkJcjUsIHIwLCBTSUdDSExECQkJLyogQXJnIDA6IGZsYWdzICovCiAJbHdpCXI2LCByMSwgUFRPK1BUX1IxCS8qIEFyZyAxOiBjaGlsZCBTUCAodXNlIHBhcmVudCdzKSAqLwotCWxhCXI3LCByMSwgUFRPCQkJLyogQXJnIDI6IHBhcmVudCBjb250ZXh0ICovCisJYWRkaWsJcjcsIHIxLCBQVE8JCQkvKiBBcmcgMjogcGFyZW50IGNvbnRleHQgKi8KIAlhZGQJcjguIHIwLCByMAkJCS8qIEFyZyAzOiAodW51c2VkKSAqLwogCWFkZAlyOSwgcjAsIHIwOwkJCS8qIEFyZyA0OiAodW51c2VkKSAqLwotCWFkZAlyMTAsIHIwLCByMDsJCQkvKiBBcmcgNTogKHVudXNlZCkgKi8KIAlicmlkCWRvX2ZvcmsJCS8qIERvIHJlYWwgd29yayAodGFpbC1jYWxsKSAqLwotCW5vcDsKKwlhZGQJcjEwLCByMCwgcjA7CQkJLyogQXJnIDU6ICh1bnVzZWQpICovCiAKIC8qIFRoaXMgdGhlIGluaXRpYWwgZW50cnkgcG9pbnQgZm9yIGEgbmV3IGNoaWxkIHRocmVhZCwgd2l0aCBhbiBhcHByb3ByaWF0ZQogICAgc3RhY2sgaW4gcGxhY2UgdGhhdCBtYWtlcyBpdCBsb29rIHRoZSB0aGUgY2hpbGQgaXMgaW4gdGhlIG1pZGRsZSBvZiBhbgpAQCAtNDY2LDM1ICs0MzcsMzEgQEAKIAlicmFsaWQJcjE1LCBzY2hlZHVsZV90YWlsOyAvKiAuLi53aGljaCBpcyBzY2hlZHVsZV90YWlsJ3MgYXJnICovCiAJYWRkCXIzLCByNSwgcjA7CS8qIHN3aXRjaF90aHJlYWQgcmV0dXJucyB0aGUgcHJldiB0YXNrICovCiAJCQkJLyogKCBpbiB0aGUgZGVsYXkgc2xvdCApICovCi0JYWRkCXIzLCByMCwgcjA7CS8qIENoaWxkJ3MgZm9yayBjYWxsIHNob3VsZCByZXR1cm4gMC4gKi8KIAlicmlkCXJldF9mcm9tX3RyYXA7CS8qIERvIG5vcm1hbCB0cmFwIHJldHVybiAqLwotCW5vcDsKKwlhZGQJcjMsIHIwLCByMDsJLyogQ2hpbGQncyBmb3JrIGNhbGwgc2hvdWxkIHJldHVybiAwLiAqLwogCiBDX0VOVFJZKHN5c192Zm9yayk6CiAJYnJpZAltaWNyb2JsYXplX3Zmb3JrCS8qIERvIHJlYWwgd29yayAodGFpbC1jYWxsKSAqLwotCWxhCXI1LCByMSwgUFRPCisJYWRkaWsJcjUsIHIxLCBQVE8KIAogQ19FTlRSWShzeXNfY2xvbmUpOgogCWJuZWkJcjYsIDFmOwkJCS8qIFNlZSBpZiBjaGlsZCBTUCBhcmcgKGFyZyAxKSBpcyAwLiAqLwotCWx3aQlyNiwgcjEsIFBUTytQVF9SMTsJLyogSWYgc28sIHVzZSBwYXJldCdzIHN0YWNrIHB0ciAqLwotMToJbGEJcjcsIHIxLCBQVE87CQkJLyogQXJnIDI6IHBhcmVudCBjb250ZXh0ICovCisJbHdpCXI2LCByMSwgUFRPICsgUFRfUjE7CS8qIElmIHNvLCB1c2UgcGFyZXQncyBzdGFjayBwdHIgKi8KKzE6CWFkZGlrCXI3LCByMSwgUFRPOwkJCS8qIEFyZyAyOiBwYXJlbnQgY29udGV4dCAqLwogCWFkZAlyOCwgcjAsIHIwOwkJCS8qIEFyZyAzOiAodW51c2VkKSAqLwogCWFkZAlyOSwgcjAsIHIwOwkJCS8qIEFyZyA0OiAodW51c2VkKSAqLwotCWFkZAlyMTAsIHIwLCByMDsJCQkvKiBBcmcgNTogKHVudXNlZCkgKi8KIAlicmlkCWRvX2ZvcmsJCS8qIERvIHJlYWwgd29yayAodGFpbC1jYWxsKSAqLwotCW5vcDsKKwlhZGQJcjEwLCByMCwgcjA7CQkJLyogQXJnIDU6ICh1bnVzZWQpICovCiAKIENfRU5UUlkoc3lzX2V4ZWN2ZSk6Ci0JbGEJcjgsIHIxLCBQVE87CQkvKiBhZGQgdXNlciBjb250ZXh0IGFzIDR0aCBhcmcgKi8KIAlicmlkCW1pY3JvYmxhemVfZXhlY3ZlOwkvKiBEbyByZWFsIHdvcmsgKHRhaWwtY2FsbCkuKi8KLQlub3A7CisJYWRkaWsJcjgsIHIxLCBQVE87CQkvKiBhZGQgdXNlciBjb250ZXh0IGFzIDR0aCBhcmcgKi8KIAogQ19FTlRSWShzeXNfcnRfc2lncmV0dXJuX3dyYXBwZXIpOgogCXN3aQlyMywgcjEsIFBUTytQVF9SMzsgLyogcmVzdG9yZSBzYXZlZCByMywgcjQgcmVnaXN0ZXJzICovCiAJc3dpCXI0LCByMSwgUFRPK1BUX1I0OwotCWxhCXI1LCByMSwgUFRPOwkJLyogYWRkIHVzZXIgY29udGV4dCBhcyAxc3QgYXJnICovCiAJYnJsaWQJcjE1LCBzeXNfcnRfc2lncmV0dXJuCS8qIERvIHJlYWwgd29yayAqLwotCW5vcDsKKwlhZGRpawlyNSwgcjEsIFBUTzsJCS8qIGFkZCB1c2VyIGNvbnRleHQgYXMgMXN0IGFyZyAqLwogCWx3aQlyMywgcjEsIFBUTytQVF9SMzsgLyogcmVzdG9yZSBzYXZlZCByMywgcjQgcmVnaXN0ZXJzICovCiAJbHdpCXI0LCByMSwgUFRPK1BUX1I0OwogCWJyaSByZXRfZnJvbV90cmFwIC8qIGZhbGwgdGhyb3VnaCB3aWxsIG5vdCB3b3JrIGhlcmUgZHVlIHRvIGFsaWduICovCkBAIC01MDMsODMgKzQ3MCwyMyBAQAogLyoKICAqIEhXIEVYQ0VQVElPTiBydXRpbmUgc3RhcnQKICAqLwotCi0jZGVmaW5lIFNBVkVfU1RBVEUJXAotCXN3aQlyMTEsIHIwLCBUT1BIWVMocjBfcmFtICsgUFRPICsgUFRfUjExKTsgLyogU2F2ZSByMTEgKi8JXAotCXNldF9iaXA7CS8qZXF1YWxpemUgaW5pdGlhbCBzdGF0ZSBmb3IgYWxsIHBvc3NpYmxlIGVudHJpZXMqL1wKLQljbGVhcl9laXA7CQkJCQkJCVwKLQllbmFibGVfaXJxOwkJCQkJCQlcCi0Jc2V0X2VlOwkJCQkJCQkJXAotCS8qIFNlZSBpZiBhbHJlYWR5IGluIGtlcm5lbCBtb2RlLiovCQkJCVwKLQlsd2kJcjExLCByMCwgVE9QSFlTKFBFUl9DUFUoS00pKTsJCQkJXAotCWJlcWkJcjExLCAxZjsJCS8qIEp1bXAgYWhlYWQgaWYgY29taW5nIGZyb20gdXNlciAqL1wKLQkvKiBLZXJuZWwtbW9kZSBzdGF0ZSBzYXZlLiAgKi8JCQkJCVwKLQkvKiBSZWxvYWQga2VybmVsIHN0YWNrLXB0ci4gKi8JCQkJCVwKLQlsd2kJcjExLCByMCwgVE9QSFlTKFBFUl9DUFUoRU5UUllfU1ApKTsJCQlcCi0JdG9waHlzKHIxLHIxMSk7CQkJCQkJCVwKLQlzd2kJcjExLCByMSwgKFBUX1IxLVBUX1NJWkUpOyAvKiBTYXZlIG9yaWdpbmFsIFNQLiAqLwlcCi0JbHdpCXIxMSwgcjAsIFRPUEhZUyhyMF9yYW0gKyBQVE8gKyBQVF9SMTEpOyAvKiByZXN0b3JlIHIxMSAqL1wKLQlhZGRpawlyMSwgcjEsIC1TVEFURV9TQVZFX1NJWkU7IC8qIE1ha2Ugcm9vbSBvbiB0aGUgc3RhY2suICAqL1wKLQkvKiBzdG9yZSByZXR1cm4gcmVnaXN0ZXJzIHNlcGFyYXRlbHkgYmVjYXVzZQkJCVwKLQkgKiB0aGlzIG1hY3JvcyBpcyB1c2UgZm9yIG90aGVycyBleGNlcHRpb25zICovCQkJXAotCXN3aQlyMywgcjEsIFBUTyArIFBUX1IzOwkJCQkJXAotCXN3aQlyNCwgcjEsIFBUTyArIFBUX1I0OwkJCQkJXAotCVNBVkVfUkVHUwkJCQkJCQlcCi0JLyogUEMsIGJlZm9yZSBJUlEvdHJhcCAtIHRoaXMgaXMgb25lIGluc3RydWN0aW9uIGFib3ZlICovCVwKLQlzd2kJcjE3LCByMSwgUFRPK1BUX1BDOwkJCQkJXAotCQkJCQkJCQkJXAotCWFkZGkJcjExLCByMCwgMTsgCQkvKiBXYXMgaW4ga2VybmVsLW1vZGUuICAqLwlcCi0Jc3dpCXIxMSwgcjEsIFBUTytQVF9NT0RFOyAJIAkJCQlcCi0JYnJpZAkyZjsJCQkJCQkJXAotCW5vcDsJCQkJLyogRmlsbCBkZWxheSBzbG90ICovCQlcCi0xOgkvKiBVc2VyLW1vZGUgc3RhdGUgc2F2ZS4gICovCQkJCQlcCi0JbHdpCXIxMSwgcjAsIFRPUEhZUyhyMF9yYW0gKyBQVE8gKyBQVF9SMTEpOyAvKiByZXN0b3JlIHIxMSAqL1wKLQlsd2kJcjEsIHIwLCBUT1BIWVMoUEVSX0NQVShDVVJSRU5UX1NBVkUpKTsgLyogZ2V0IHNhdmVkIGN1cnJlbnQgKi9cCi0JdG9waHlzKHIxLHIxKTsJCQkJCQkJXAotCWx3aQlyMSwgcjEsIFRTX1RIUkVBRF9JTkZPOwkvKiBnZXQgdGhlIHRocmVhZCBpbmZvICovCVwKLQlhZGRpawlyMSwgcjEsIFRIUkVBRF9TSVpFOwkvKiBjYWxjdWxhdGUga2VybmVsIHN0YWNrIHBvaW50ZXIgKi9cCi0JdG9waHlzKHIxLHIxKTsJCQkJCQkJXAotCQkJCQkJCQkJXAotCWFkZGlrCXIxLCByMSwgLVNUQVRFX1NBVkVfU0laRTsgLyogTWFrZSByb29tIG9uIHRoZSBzdGFjay4gICovXAotCS8qIHN0b3JlIHJldHVybiByZWdpc3RlcnMgc2VwYXJhdGVseSBiZWNhdXNlIHRoaXMgbWFjcm9zCVwKLQkgKiBpcyB1c2UgZm9yIG90aGVycyBleGNlcHRpb25zICovCQkJCVwKLQlzd2kJcjMsIHIxLCBQVE8gKyBQVF9SMzsgCQkJCQlcCi0Jc3dpCXI0LCByMSwgUFRPICsgUFRfUjQ7CQkJCQlcCi0JU0FWRV9SRUdTCQkJCQkJCVwKLQkvKiBQQywgYmVmb3JlIElSUS90cmFwIC0gdGhpcyBpcyBvbmUgaW5zdHJ1Y3Rpb24gYWJvdmUgRklYTUUqLwlcCi0Jc3dpCXIxNywgcjEsIFBUTytQVF9QQzsJCQkJCVwKLQkJCQkJCQkJCVwKLQlzd2kJcjAsIHIxLCBQVE8rUFRfTU9ERTsgLyogV2FzIGluIHVzZXItbW9kZS4gICovCQlcCi0JbHdpCXIxMSwgcjAsIFRPUEhZUyhQRVJfQ1BVKEVOVFJZX1NQKSk7CQkJXAotCXN3aQlyMTEsIHIxLCBQVE8rUFRfUjE7IC8qIFN0b3JlIHVzZXIgU1AuICAqLwkJXAotCWFkZGkJcjExLCByMCwgMTsJCQkJCQlcCi0Jc3dpCXIxMSwgcjAsIFRPUEhZUyhQRVJfQ1BVKEtNKSk7IC8qIE5vdyB3ZSdyZSBpbiBrZXJuZWwtbW9kZS4qL1wKLTI6CWx3aQlDVVJSRU5UX1RBU0ssIHIwLCBUT1BIWVMoUEVSX0NQVShDVVJSRU5UX1NBVkUpKTsJXAotCS8qIFNhdmUgYXdheSB0aGUgc3lzY2FsbCBudW1iZXIuICAqLwkJCQlcCi0Jc3dpCXIwLCByMSwgUFRPK1BUX1IwOwkJCQkJXAotCXRvdmlydChyMSxyMSkKLQogQ19FTlRSWShmdWxsX2V4Y2VwdGlvbl90cmFwKToKLQlzd2kJcjEsIHIwLCBUT1BIWVMoUEVSX0NQVShFTlRSWV9TUCkpIC8qIHNhdmUgc3RhY2sgKi8KIAkvKiBhZGp1c3QgZXhjZXB0aW9uIGFkZHJlc3MgZm9yIHByaXZpbGVnZWQgaW5zdHJ1Y3Rpb24KIAkgKiBmb3IgZmluZGluZyB3aGVyZSBpcyBpdCAqLwogCWFkZGlrCXIxNywgcjE3LCAtNAogCVNBVkVfU1RBVEUgLyogU2F2ZSByZWdpc3RlcnMgKi8KKwkvKiBQQywgYmVmb3JlIElSUS90cmFwIC0gdGhpcyBpcyBvbmUgaW5zdHJ1Y3Rpb24gYWJvdmUgKi8KKwlzd2kJcjE3LCByMSwgUFRPK1BUX1BDOworCXRvdmlydChyMSxyMSkKIAkvKiBGSVhNRSB0aGlzIGNhbiBiZSBzdG9yZSBkaXJlY3RseSBpbiBQVF9FU1IgcmVnLgogCSAqIEkgdGVzdGVkIGl0IGJ1dCB0aGVyZSBpcyBhIGZhdWx0ICovCiAJLyogd2hlcmUgdGhlIHRyYXAgc2hvdWxkIHJldHVybiBuZWVkIC04IHRvIGFkanVzdCBmb3IgcnRzZCByMTUsIDggKi8KLQlsYQlyMTUsIHIwLCByZXRfZnJvbV9leGMgLSA4Ci0JbGEJcjUsIHIxLCBQVE8JCSAvKiBwYXJhbWV0ZXIgc3RydWN0IHB0X3JlZ3MgKiByZWdzICovCisJYWRkaWsJcjE1LCByMCwgcmV0X2Zyb21fZXhjIC0gOAogCW1mcwlyNiwgcmVzcgotCW5vcAogCW1mcwlyNywgcmZzcjsJCS8qIHNhdmUgRlNSICovCi0Jbm9wCiAJbXRzCXJmc3IsIHIwOwkvKiBDbGVhciBzdGlja3kgZnNyICovCi0Jbm9wCi0JbGEJcjEyLCByMCwgZnVsbF9leGNlcHRpb24KLQlzZXRfdm1zOwotCXJ0YmQJcjEyLCAwOwotCW5vcDsKKwlydGVkCXIwLCBmdWxsX2V4Y2VwdGlvbgorCWFkZGlrCXI1LCByMSwgUFRPCQkgLyogcGFyYW1ldGVyIHN0cnVjdCBwdF9yZWdzICogcmVncyAqLwogCiAvKgogICogVW5hbGlnbmVkIGRhdGEgdHJhcC4KQEAgLTU5MiwxOSArNDk5LDI3IEBACiAgKiBUaGUgYXNzZW1ibGVyIHJvdXRpbmUgaXMgaW4gImFyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaHdfZXhjZXB0aW9uX2hhbmRsZXIuUyIKICAqLwogQ19FTlRSWSh1bmFsaWduZWRfZGF0YV90cmFwKToKLQlzd2kJcjEsIHIwLCBUT1BIWVMoUEVSX0NQVShFTlRSWV9TUCkpIC8qIHNhdmUgc3RhY2sgKi8KKwkvKiBNUzogSSBoYXZlIHRvIHNhdmUgcjExIHZhbHVlIGFuZCB0aGVuIHJlc3RvcmUgaXQgYmVjYXVzZQorCSAqIHNldF9iaXQsIGNsZWFyX2VpcCwgc2V0X2VlIHVzZSByMTEgYXMgdGVtcCByZWdpc3RlciBpZiBNU1IKKwkgKiBpbnN0cnVjdGlvbnMgYXJlIG5vdCB1c2VkLiBXZSBkb24ndCBuZWVkIHRvIGRvIGlmIE1TUiBpbnN0cnVjdGlvbnMKKwkgKiBhcmUgdXNlZCBhbmQgdGhleSB1c2UgcjAgaW5zdGVhZCBvZiByMTEuCisJICogSSBhbSB1c2luZyBFTlRSWV9TUCB3aGljaCBzaG91bGQgYmUgcHJpbWFyeSB1c2VkIG9ubHkgZm9yIHN0YWNrCisJICogcG9pbnRlciBzYXZpbmcuICovCisJc3dpCXIxMSwgcjAsIFRPUEhZUyhQRVJfQ1BVKEVOVFJZX1NQKSk7CisJc2V0X2JpcDsgICAgICAgIC8qIGVxdWFsaXplIGluaXRpYWwgc3RhdGUgZm9yIGFsbCBwb3NzaWJsZSBlbnRyaWVzICovCisJY2xlYXJfZWlwOworCXNldF9lZTsKKwlsd2kJcjExLCByMCwgVE9QSFlTKFBFUl9DUFUoRU5UUllfU1ApKTsKIAlTQVZFX1NUQVRFCQkvKiBTYXZlIHJlZ2lzdGVycy4qLworCS8qIFBDLCBiZWZvcmUgSVJRL3RyYXAgLSB0aGlzIGlzIG9uZSBpbnN0cnVjdGlvbiBhYm92ZSAqLworCXN3aQlyMTcsIHIxLCBQVE8rUFRfUEM7CisJdG92aXJ0KHIxLHIxKQogCS8qIHdoZXJlIHRoZSB0cmFwIHNob3VsZCByZXR1cm4gbmVlZCAtOCB0byBhZGp1c3QgZm9yIHJ0c2QgcjE1LCA4ICovCi0JbGEJcjE1LCByMCwgcmV0X2Zyb21fZXhjLTgKKwlhZGRpawlyMTUsIHIwLCByZXRfZnJvbV9leGMtOAogCW1mcwlyMywgcmVzcgkJLyogRVNSICovCi0Jbm9wCiAJbWZzCXI0LCByZWFyCQkvKiBFQVIgKi8KLQlub3AKLQlsYQlyNywgcjEsIFBUTwkJLyogcGFyYW1ldGVyIHN0cnVjdCBwdF9yZWdzICogcmVncyAqLwotCWxhCXIxMiwgcjAsIF91bmFsaWduZWRfZGF0YV9leGNlcHRpb24KLQlzZXRfdm1zOwotCXJ0YmQJcjEyLCAwOwkvKiBpbnRlcnJ1cHRzIGVuYWJsZWQgKi8KLQlub3A7CisJcnRiZAlyMCwgX3VuYWxpZ25lZF9kYXRhX2V4Y2VwdGlvbgorCWFkZGlrCXI3LCByMSwgUFRPCQkvKiBwYXJhbWV0ZXIgc3RydWN0IHB0X3JlZ3MgKiByZWdzICovCiAKIC8qCiAgKiBQYWdlIGZhdWx0IHRyYXBzLgpAQCAtNjI1LDM4ICs1NDAsMzIgQEAKICAqLwogLyogZGF0YSBhbmQgaW50cnVjdGlvbiB0cmFwIC0gd2hpY2ggaXMgY2hvb3NlIGlzIHJlc29sdmVkIGludCBmYXVsdC5jICovCiBDX0VOVFJZKHBhZ2VfZmF1bHRfZGF0YV90cmFwKToKLQlzd2kJcjEsIHIwLCBUT1BIWVMoUEVSX0NQVShFTlRSWV9TUCkpIC8qIHNhdmUgc3RhY2sgKi8KIAlTQVZFX1NUQVRFCQkvKiBTYXZlIHJlZ2lzdGVycy4qLworCS8qIFBDLCBiZWZvcmUgSVJRL3RyYXAgLSB0aGlzIGlzIG9uZSBpbnN0cnVjdGlvbiBhYm92ZSAqLworCXN3aQlyMTcsIHIxLCBQVE8rUFRfUEM7CisJdG92aXJ0KHIxLHIxKQogCS8qIHdoZXJlIHRoZSB0cmFwIHNob3VsZCByZXR1cm4gbmVlZCAtOCB0byBhZGp1c3QgZm9yIHJ0c2QgcjE1LCA4ICovCi0JbGEJcjE1LCByMCwgcmV0X2Zyb21fZXhjLTgKLQlsYQlyNSwgcjEsIFBUTwkJLyogcGFyYW1ldGVyIHN0cnVjdCBwdF9yZWdzICogcmVncyAqLworCWFkZGlrCXIxNSwgcjAsIHJldF9mcm9tX2V4Yy04CiAJbWZzCXI2LCByZWFyCQkvKiBwYXJhbWV0ZXIgdW5zaWduZWQgbG9uZyBhZGRyZXNzICovCi0Jbm9wCiAJbWZzCXI3LCByZXNyCQkvKiBwYXJhbWV0ZXIgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlICovCi0Jbm9wCi0JbGEJcjEyLCByMCwgZG9fcGFnZV9mYXVsdAotCXNldF92bXM7Ci0JcnRiZAlyMTIsIDA7CS8qIGludGVycnVwdHMgZW5hYmxlZCAqLwotCW5vcDsKKwlydGVkCXIwLCBkb19wYWdlX2ZhdWx0CisJYWRkaWsJcjUsIHIxLCBQVE8JCS8qIHBhcmFtZXRlciBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MgKi8KIAogQ19FTlRSWShwYWdlX2ZhdWx0X2luc3RyX3RyYXApOgotCXN3aQlyMSwgcjAsIFRPUEhZUyhQRVJfQ1BVKEVOVFJZX1NQKSkgLyogc2F2ZSBzdGFjayAqLwogCVNBVkVfU1RBVEUJCS8qIFNhdmUgcmVnaXN0ZXJzLiovCisJLyogUEMsIGJlZm9yZSBJUlEvdHJhcCAtIHRoaXMgaXMgb25lIGluc3RydWN0aW9uIGFib3ZlICovCisJc3dpCXIxNywgcjEsIFBUTytQVF9QQzsKKwl0b3ZpcnQocjEscjEpCiAJLyogd2hlcmUgdGhlIHRyYXAgc2hvdWxkIHJldHVybiBuZWVkIC04IHRvIGFkanVzdCBmb3IgcnRzZCByMTUsIDggKi8KLQlsYQlyMTUsIHIwLCByZXRfZnJvbV9leGMtOAotCWxhCXI1LCByMSwgUFRPCQkvKiBwYXJhbWV0ZXIgc3RydWN0IHB0X3JlZ3MgKiByZWdzICovCisJYWRkaWsJcjE1LCByMCwgcmV0X2Zyb21fZXhjLTgKIAltZnMJcjYsIHJlYXIJCS8qIHBhcmFtZXRlciB1bnNpZ25lZCBsb25nIGFkZHJlc3MgKi8KLQlub3AKIAlvcmkJcjcsIHIwLCAwCQkvKiBwYXJhbWV0ZXIgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlICovCi0JbGEJcjEyLCByMCwgZG9fcGFnZV9mYXVsdAotCXNldF92bXM7Ci0JcnRiZAlyMTIsIDA7CS8qIGludGVycnVwdHMgZW5hYmxlZCAqLwotCW5vcDsKKwlydGVkCXIwLCBkb19wYWdlX2ZhdWx0CisJYWRkaWsJcjUsIHIxLCBQVE8JCS8qIHBhcmFtZXRlciBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MgKi8KIAogLyogRW50cnkgcG9pbnQgdXNlZCB0byByZXR1cm4gZnJvbSBhbiBleGNlcHRpb24uICAqLwogQ19FTlRSWShyZXRfZnJvbV9leGMpOgotCXNldF9iaXA7CQkJLyogIEludHMgbWFza2VkIGZvciBzdGF0ZSByZXN0b3JlKi8KLQlsd2kJcjExLCByMSwgUFRPK1BUX01PREU7CisJbHdpCXIxMSwgcjEsIFBUTyArIFBUX01PREU7CiAJYm5laQlyMTEsIDJmOwkJLyogU2VlIGlmIHJldHVybmluZyB0byBrZXJuZWwgbW9kZSwgKi8KIAkJCQkJLyogLi4uIGlmIHNvLCBza2lwIHJlc2NoZWQgJmMuICAqLwogCkBAIC02ODcsMzIgKzU5NiwyNyBAQAogCSAqIHRyYXBzKSwgYnV0IHNpZ25hbCBoYW5kbGVycyBtYXkgd2FudCB0byBleGFtaW5lIG9yIGNoYW5nZSB0aGUKIAkgKiBjb21wbGV0ZSByZWdpc3RlciBzdGF0ZS4gIEhlcmUgd2Ugc2F2ZSBhbnl0aGluZyBub3Qgc2F2ZWQgYnkKIAkgKiB0aGUgbm9ybWFsIGVudHJ5IHNlcXVlbmNlLCBzbyB0aGF0IGl0IG1heSBiZSBzYWZlbHkgcmVzdG9yZWQKLQkgKiAoaW4gYSBwb3NzaWJseSBtb2RpZmllZCBmb3JtKSBhZnRlciBkb19zaWduYWwgcmV0dXJucy4KLQkgKiBzdG9yZSByZXR1cm4gcmVnaXN0ZXJzIHNlcGFyYXRlbHkgYmVjYXVzZSB0aGlzIG1hY3JvcyBpcyB1c2UKLQkgKiBmb3Igb3RoZXJzIGV4Y2VwdGlvbnMgKi8KLQlsYQlyNSwgcjEsIFBUTzsJCS8qIEFyZyAxOiBzdHJ1Y3QgcHRfcmVncyAqcmVncyAqLworCSAqIChpbiBhIHBvc3NpYmx5IG1vZGlmaWVkIGZvcm0pIGFmdGVyIGRvX3NpZ25hbCByZXR1cm5zLiAqLworCWFkZGlrCXI1LCByMSwgUFRPOwkJLyogQXJnIDE6IHN0cnVjdCBwdF9yZWdzICpyZWdzICovCiAJYWRkaQlyNywgcjAsIDA7CQkvKiBBcmcgMzogaW50IGluX3N5c2NhbGwgKi8KIAlicmFsaWQJcjE1LCBkb19zaWduYWw7CS8qIEhhbmRsZSBhbnkgc2lnbmFscyAqLwogCWFkZAlyNiwgcjAsIHIwOwkJLyogQXJnIDI6IHNpZ3NldF90ICpvbGRzZXQgKi8KIAogLyogRmluYWxseSwgcmV0dXJuIHRvIHVzZXIgc3RhdGUuICAqLwotMToJc3dpCXIwLCByMCwgUEVSX0NQVShLTSk7CS8qIE5vdyBvZmZpY2lhbGx5IGluIHVzZXIgc3RhdGUuICovCisxOglzZXRfYmlwOwkJCS8qIEludHMgbWFza2VkIGZvciBzdGF0ZSByZXN0b3JlICovCiAJc3dpCUNVUlJFTlRfVEFTSywgcjAsIFBFUl9DUFUoQ1VSUkVOVF9TQVZFKTsgLyogc2F2ZSBjdXJyZW50ICovCiAJVk1fT0ZGOwogCXRvcGh5cyhyMSxyMSk7CiAKLQlsd2kJcjMsIHIxLCBQVE8rUFRfUjM7IC8qIHJlc3RvcmUgc2F2ZWQgcjMsIHI0IHJlZ2lzdGVycyAqLwotCWx3aQlyNCwgcjEsIFBUTytQVF9SNDsKIAlSRVNUT1JFX1JFR1M7CiAJYWRkaWsJcjEsIHIxLCBTVEFURV9TQVZFX1NJWkUJCS8qIENsZWFuIHVwIHN0YWNrIHNwYWNlLiAgKi8KIAogCWx3aQlyMSwgcjEsIFBUX1IxIC0gUFRfU0laRTsgLyogUmVzdG9yZSB1c2VyIHN0YWNrIHBvaW50ZXIuICovCiAJYnJpCTZmOwogLyogUmV0dXJuIHRvIGtlcm5lbCBzdGF0ZS4gICovCi0yOglWTV9PRkY7CisyOglzZXRfYmlwOwkJCS8qIEludHMgbWFza2VkIGZvciBzdGF0ZSByZXN0b3JlICovCisJVk1fT0ZGOwogCXRvcGh5cyhyMSxyMSk7Ci0JbHdpCXIzLCByMSwgUFRPK1BUX1IzOyAvKiByZXN0b3JlIHNhdmVkIHIzLCByNCByZWdpc3RlcnMgKi8KLQlsd2kJcjQsIHIxLCBQVE8rUFRfUjQ7CiAJUkVTVE9SRV9SRUdTOwogCWFkZGlrCXIxLCByMSwgU1RBVEVfU0FWRV9TSVpFCQkvKiBDbGVhbiB1cCBzdGFjayBzcGFjZS4gICovCiAKQEAgLTczNiwzNiArNjQwLDIzIEBACiAvKiBNUzogd2UgYXJlIGluIHBoeXNpY2FsIGFkZHJlc3MgKi8KIC8qIFNhdmUgcmVnaXN0ZXJzLCBzd2l0Y2ggdG8gcHJvcGVyIHN0YWNrLCBjb252ZXJ0IFNQIHRvIHZpcnR1YWwuKi8KIAlzd2kJcjEsIHIwLCBUT1BIWVMoUEVSX0NQVShFTlRSWV9TUCkpCi0Jc3dpCXIxMSwgcjAsIFRPUEhZUyhQRVJfQ1BVKFIxMV9TQVZFKSk7CiAJLyogTVM6IFNlZSBpZiBhbHJlYWR5IGluIGtlcm5lbCBtb2RlLiAqLwotCWx3aQlyMTEsIHIwLCBUT1BIWVMoUEVSX0NQVShLTSkpOwotCWJlcWkJcjExLCAxZjsgLyogTVM6IEp1bXAgYWhlYWQgaWYgY29taW5nIGZyb20gdXNlciAqLworCW1mcwlyMSwgcm1zcgorCW5vcAorCWFuZGkJcjEsIHIxLCBNU1JfVU1TCisJYm5laQlyMSwgMWYKIAogLyogS2VybmVsLW1vZGUgc3RhdGUgc2F2ZS4gKi8KLQlvcglyMTEsIHIxLCByMAotCXRvcGh5cyhyMSxyMTEpOyAvKiBNUzogSSBoYXZlIGluIHIxIHBoeXNpY2FsIGFkZHJlc3Mgd2hlcmUgc3RhY2sgaXMgKi8KLS8qIE1TOiBTYXZlIG9yaWdpbmFsIFNQIC0gcG9zaXRpb24gUFRfUjEgdG8gbmV4dCBzdGFjayBmcmFtZSA0ICoxIC0gMTUyKi8KLQlzd2kJcjExLCByMSwgKFBUX1IxIC0gUFRfU0laRSk7Ci0vKiBNUzogcmVzdG9yZSByMTEgYmVjYXVzZSBvZiBzYXZpbmcgaW4gU0FWRV9SRUdTICovCi0JbHdpCXIxMSwgcjAsIFRPUEhZUyhQRVJfQ1BVKFIxMV9TQVZFKSk7CisJbHdpCXIxLCByMCwgVE9QSFlTKFBFUl9DUFUoRU5UUllfU1ApKQorCXRvcGh5cyhyMSxyMSk7IC8qIE1TOiBJIGhhdmUgaW4gcjEgcGh5c2ljYWwgYWRkcmVzcyB3aGVyZSBzdGFjayBpcyAqLwogCS8qIHNhdmUgcmVnaXN0ZXJzICovCiAvKiBNUzogTWFrZSByb29tIG9uIHRoZSBzdGFjayAtPiBhY3RpdmF0aW9uIHJlY29yZCAqLwogCWFkZGlrCXIxLCByMSwgLVNUQVRFX1NBVkVfU0laRTsKLS8qIE1TOiBzdG9yZSByZXR1cm4gcmVnaXN0ZXJzIHNlcGFyYXRlbHkgYmVjYXVzZQotICogdGhpcyBtYWNyb3MgaXMgdXNlIGZvciBvdGhlcnMgZXhjZXB0aW9ucyAqLwotCXN3aQlyMywgcjEsIFBUTyArIFBUX1IzOwotCXN3aQlyNCwgcjEsIFBUTyArIFBUX1I0OwogCVNBVkVfUkVHUwotCS8qIE1TOiBzdG9yZSBtb2RlICovCi0JYWRkaQlyMTEsIHIwLCAxOyAvKiBNUzogV2FzIGluIGtlcm5lbC1tb2RlLiAqLwotCXN3aQlyMTEsIHIxLCBQVE8gKyBQVF9NT0RFOyAvKiBNUzogYW5kIHNhdmUgaXQgKi8KIAlicmlkCTJmOwotCW5vcDsgLyogTVM6IEZpbGwgZGVsYXkgc2xvdCAqLwotCisJc3dpCXIxLCByMSwgUFRPICsgUFRfTU9ERTsgLyogMCAtIHVzZXIgbW9kZSwgMSAtIGtlcm5lbCBtb2RlICovCiAxOgogLyogVXNlci1tb2RlIHN0YXRlIHNhdmUuICovCi0vKiBNUzogcmVzdG9yZSByMTEgLT4gRklYTUUgbW92ZSBiZWZvcmUgU0FWRV9SRUcgKi8KLQlsd2kJcjExLCByMCwgVE9QSFlTKFBFUl9DUFUoUjExX1NBVkUpKTsKICAvKiBNUzogZ2V0IHRoZSBzYXZlZCBjdXJyZW50ICovCiAJbHdpCXIxLCByMCwgVE9QSFlTKFBFUl9DUFUoQ1VSUkVOVF9TQVZFKSk7CiAJdG9waHlzKHIxLHIxKTsKQEAgLTc3NCwyNyArNjY1LDE4IEBACiAJdG9waHlzKHIxLHIxKTsKIAkvKiBzYXZlIHJlZ2lzdGVycyAqLwogCWFkZGlrCXIxLCByMSwgLVNUQVRFX1NBVkVfU0laRTsKLQlzd2kJcjMsIHIxLCBQVE8rUFRfUjM7Ci0Jc3dpCXI0LCByMSwgUFRPK1BUX1I0OwogCVNBVkVfUkVHUwogCS8qIGNhbGN1bGF0ZSBtb2RlICovCiAJc3dpCXIwLCByMSwgUFRPICsgUFRfTU9ERTsKIAlsd2kJcjExLCByMCwgVE9QSFlTKFBFUl9DUFUoRU5UUllfU1ApKTsKIAlzd2kJcjExLCByMSwgUFRPK1BUX1IxOwotCS8qIHNldHVwIGtlcm5lbCBtb2RlIHRvIEtNICovCi0JYWRkaQlyMTEsIHIwLCAxOwotCXN3aQlyMTEsIHIwLCBUT1BIWVMoUEVSX0NQVShLTSkpOwotCisJY2xlYXJfdW1zOwogMjoKIAlsd2kJQ1VSUkVOVF9UQVNLLCByMCwgVE9QSFlTKFBFUl9DUFUoQ1VSUkVOVF9TQVZFKSk7Ci0Jc3dpCXIwLCByMSwgUFRPICsgUFRfUjA7CiAJdG92aXJ0KHIxLHIxKQotCWxhCXI1LCByMSwgUFRPOwotCXNldF92bXM7Ci0JbGEJcjExLCByMCwgZG9fSVJROwotCWxhCXIxNSwgcjAsIGlycV9jYWxsOwotaXJxX2NhbGw6cnRiZAlyMTEsIDA7Ci0Jbm9wOworCWFkZGlrCXIxNSwgcjAsIGlycV9jYWxsOworaXJxX2NhbGw6cnRiZAlyMCwgZG9fSVJROworCWFkZGlrCXI1LCByMSwgUFRPOwogCiAvKiBNUzogd2UgYXJlIGluIHZpcnR1YWwgbW9kZSAqLwogcmV0X2Zyb21faXJxOgpAQCAtODE1LDcgKzY5Nyw3IEBACiAJYmVxaWQJcjExLCBub19pbnRyX3Jlc2NoZWQKIC8qIEhhbmRsZSBhIHNpZ25hbCByZXR1cm47IFBlbmRpbmcgc2lnbmFscyBzaG91bGQgYmUgaW4gcjE4LiAqLwogCWFkZGkJcjcsIHIwLCAwOyAvKiBBcmcgMzogaW50IGluX3N5c2NhbGwgKi8KLQlsYQlyNSwgcjEsIFBUTzsgLyogQXJnIDE6IHN0cnVjdCBwdF9yZWdzICpyZWdzICovCisJYWRkaWsJcjUsIHIxLCBQVE87IC8qIEFyZyAxOiBzdHJ1Y3QgcHRfcmVncyAqcmVncyAqLwogCWJyYWxpZAlyMTUsIGRvX3NpZ25hbDsJLyogSGFuZGxlIGFueSBzaWduYWxzICovCiAJYWRkCXI2LCByMCwgcjA7IC8qIEFyZyAyOiBzaWdzZXRfdCAqb2xkc2V0ICovCiAKQEAgLTgyMywxMiArNzA1LDkgQEAKIG5vX2ludHJfcmVzY2hlZDoKICAgICAvKiBEaXNhYmxlIGludGVycnVwdHMsIHdlIGFyZSBub3cgY29tbWl0dGVkIHRvIHRoZSBzdGF0ZSByZXN0b3JlICovCiAJZGlzYWJsZV9pcnEKLQlzd2kJcjAsIHIwLCBQRVJfQ1BVKEtNKTsgLyogTVM6IE5vdyBvZmZpY2lhbGx5IGluIHVzZXIgc3RhdGUuICovCiAJc3dpCUNVUlJFTlRfVEFTSywgcjAsIFBFUl9DUFUoQ1VSUkVOVF9TQVZFKTsKIAlWTV9PRkY7CiAJdG9waHlzKHIxLHIxKTsKLQlsd2kJcjMsIHIxLCBQVE8gKyBQVF9SMzsgLyogTVM6IHJlc3RvcmUgc2F2ZWQgcjMsIHI0IHJlZ2lzdGVycyAqLwotCWx3aQlyNCwgcjEsIFBUTyArIFBUX1I0OwogCVJFU1RPUkVfUkVHUwogCWFkZGlrCXIxLCByMSwgU1RBVEVfU0FWRV9TSVpFIC8qIE1TOiBDbGVhbiB1cCBzdGFjayBzcGFjZS4gKi8KIAlsd2kJcjEsIHIxLCBQVF9SMSAtIFBUX1NJWkU7CkBAIC04NTcsOCArNzM2LDYgQEAKICNlbmRpZgogCVZNX09GRiAvKiBNUzogdHVybiBvZmYgTU1VICovCiAJdG9waHlzKHIxLHIxKQotCWx3aQlyMywgcjEsIFBUTyArIFBUX1IzOyAvKiBNUzogcmVzdG9yZSBzYXZlZCByMywgcjQgcmVnaXN0ZXJzICovCi0JbHdpCXI0LCByMSwgUFRPICsgUFRfUjQ7CiAJUkVTVE9SRV9SRUdTCiAJYWRkaWsJcjEsIHIxLCBTVEFURV9TQVZFX1NJWkUJLyogTVM6IENsZWFuIHVwIHN0YWNrIHNwYWNlLiAqLwogCXRvdmlydChyMSxyMSk7CkBAIC04NjgsODYgKzc0NSw5MSBAQAogCW5vcAogCiAvKgotICogYERlYnVnJyB0cmFwCi0gKiAgV2UgZW50ZXIgZGJ0cmFwIGluICJCSVAiIChicmVha3BvaW50KSBtb2RlLgotICogIFNvIHdlIGV4aXQgdGhlIGJyZWFrcG9pbnQgbW9kZSB3aXRoIGFuICdydGJkJyBhbmQgcHJvY2VlZCB3aXRoIHRoZQotICogIG9yaWdpbmFsIGRidHJhcC4KLSAqICBob3dldmVyLCB3YWl0IHRvIHNhdmUgc3RhdGUgZmlyc3QKKyAqIERlYnVnIHRyYXAgZm9yIEtHREIuIEVudGVyIHRvIF9kZWJ1Z19leGNlcHRpb24gYnkgYnJraSByMTYsIDB4MTgKKyAqIGFuZCBjYWxsIGhhbmRsaW5nIGZ1bmN0aW9uIHdpdGggc2F2ZWQgcHRfcmVncwogICovCiBDX0VOVFJZKF9kZWJ1Z19leGNlcHRpb24pOgogCS8qIEJJUCBiaXQgaXMgc2V0IG9uIGVudHJ5LCBubyBpbnRlcnJ1cHRzIGNhbiBvY2N1ciAqLwogCXN3aQlyMSwgcjAsIFRPUEhZUyhQRVJfQ1BVKEVOVFJZX1NQKSkKIAotCXN3aQlyMTEsIHIwLCBUT1BIWVMocjBfcmFtICsgUFRPICsgUFRfUjExKTsgLyogU2F2ZSByMTEgKi8KLQlzZXRfYmlwOwkvKmVxdWFsaXplIGluaXRpYWwgc3RhdGUgZm9yIGFsbCBwb3NzaWJsZSBlbnRyaWVzKi8KLQljbGVhcl9laXA7Ci0JZW5hYmxlX2lycTsKLQlsd2kJcjExLCByMCwgVE9QSFlTKFBFUl9DUFUoS00pKTsvKiBTZWUgaWYgYWxyZWFkeSBpbiBrZXJuZWwgbW9kZS4qLwotCWJlcWkJcjExLCAxZjsJCS8qIEp1bXAgYWhlYWQgaWYgY29taW5nIGZyb20gdXNlciAqLwotCS8qIEtlcm5lbC1tb2RlIHN0YXRlIHNhdmUuICAqLwotCWx3aQlyMTEsIHIwLCBUT1BIWVMoUEVSX0NQVShFTlRSWV9TUCkpOyAvKiBSZWxvYWQga2VybmVsIHN0YWNrLXB0ciovCi0JdG9waHlzKHIxLHIxMSk7Ci0Jc3dpCXIxMSwgcjEsIChQVF9SMS1QVF9TSVpFKTsgLyogU2F2ZSBvcmlnaW5hbCBTUC4gKi8KLQlsd2kJcjExLCByMCwgVE9QSFlTKHIwX3JhbSArIFBUTyArIFBUX1IxMSk7IC8qIHJlc3RvcmUgcjExICovCisJbWZzCXIxLCBybXNyCisJbm9wCisJYW5kaQlyMSwgcjEsIE1TUl9VTVMKKwlibmVpCXIxLCAxZgorLyogTVM6IEtlcm5lbC1tb2RlIHN0YXRlIHNhdmUgLSBrZ2RiICovCisJbHdpCXIxLCByMCwgVE9QSFlTKFBFUl9DUFUoRU5UUllfU1ApKTsgLyogUmVsb2FkIGtlcm5lbCBzdGFjay1wdHIqLwogCi0JYWRkaWsJcjEsIHIxLCAtU1RBVEVfU0FWRV9TSVpFOyAvKiBNYWtlIHJvb20gb24gdGhlIHN0YWNrLiAgKi8KLQlzd2kJcjMsIHIxLCBQVE8gKyBQVF9SMzsKLQlzd2kJcjQsIHIxLCBQVE8gKyBQVF9SNDsKKwkvKiBCSVAgYml0IGlzIHNldCBvbiBlbnRyeSwgbm8gaW50ZXJydXB0cyBjYW4gb2NjdXIgKi8KKwlhZGRpayAgIHIxLCByMSwgQ09ORklHX0tFUk5FTF9CQVNFX0FERFIgLSBDT05GSUdfS0VSTkVMX1NUQVJUIC0gU1RBVEVfU0FWRV9TSVpFOwogCVNBVkVfUkVHUzsKKwkvKiBzYXZlIGFsbCByZWdzIHRvIHB0X3JlZyBzdHJ1Y3R1cmUgKi8KKwlzd2kJcjAsIHIxLCBQVE8rUFRfUjA7CS8qIFIwIG11c3QgYmUgc2F2ZWQgdG9vICovCisJc3dpCXIxNCwgcjEsIFBUTytQVF9SMTQJLyogcmV3cml0ZSBzYXZlZCBSMTQgdmFsdWUgKi8KKwlzd2kJcjE2LCByMSwgUFRPK1BUX1IxNgorCXN3aQlyMTYsIHIxLCBQVE8rUFRfUEM7IC8qIFBDIGFuZCByMTYgYXJlIHRoZSBzYW1lICovCisJc3dpCXIxNywgcjEsIFBUTytQVF9SMTcKKwkvKiBzYXZlIHNwZWNpYWwgcHVycG9zZSByZWdpc3RlcnMgdG8gcHRfcmVncyAqLworCW1mcwlyMTEsIHJlYXI7CisJc3dpCXIxMSwgcjEsIFBUTytQVF9FQVI7CisJbWZzCXIxMSwgcmVzcjsKKwlzd2kJcjExLCByMSwgUFRPK1BUX0VTUjsKKwltZnMJcjExLCByZnNyOworCXN3aQlyMTEsIHIxLCBQVE8rUFRfRlNSOwogCi0JYWRkaQlyMTEsIHIwLCAxOyAJCS8qIFdhcyBpbiBrZXJuZWwtbW9kZS4gICovCi0Jc3dpCXIxMSwgcjEsIFBUTyArIFBUX01PREU7Ci0JYnJpZAkyZjsKLQlub3A7CQkJCS8qIEZpbGwgZGVsYXkgc2xvdCAqLwotMTogICAgICAvKiBVc2VyLW1vZGUgc3RhdGUgc2F2ZS4gICovCi0JbHdpCXIxMSwgcjAsIFRPUEhZUyhyMF9yYW0gKyBQVE8gKyBQVF9SMTEpOyAvKiByZXN0b3JlIHIxMSAqLwotCWx3aQlyMSwgcjAsIFRPUEhZUyhQRVJfQ1BVKENVUlJFTlRfU0FWRSkpOyAvKiBnZXQgc2F2ZWQgY3VycmVudCAqLworCS8qIHN0YWNrIHBvaW50ZXIgaXMgaW4gcGh5c2ljYWwgYWRkcmVzcyBhdCBpdCBpcyBkZWNyZWFzZQorCSAqIGJ5IFNUQVRFX1NBVkVfU0laRSBidXQgd2UgbmVlZCB0byBnZXQgY29ycmVjdCBSMSB2YWx1ZSAqLworCWFkZGlrICAgcjExLCByMSwgQ09ORklHX0tFUk5FTF9TVEFSVCAtIENPTkZJR19LRVJORUxfQkFTRV9BRERSICsgU1RBVEVfU0FWRV9TSVpFOworCXN3aQlyMTEsIHIxLCBQVE8rUFRfUjEKKwkvKiBNUzogcjMxIC0gY3VycmVudCBwb2ludGVyIGlzbid0IGNoYW5nZWQgKi8KKwl0b3ZpcnQocjEscjEpCisjaWZkZWYgQ09ORklHX0tHREIKKwlhZGRpCXI1LCByMSwgUFRPIC8qIHBhc3MgcHRfcmVnIGFkZHJlc3MgYXMgdGhlIGZpcnN0IGFyZyAqLworCWxhCXIxNSwgcjAsIGRidHJhcF9jYWxsOyAvKiByZXR1cm4gYWRkcmVzcyAqLworCXJ0YmQJcjAsIG1pY3JvYmxhemVfa2dkYl9icmVhaworCW5vcDsKKyNlbmRpZgorCS8qIE1TOiBQbGFjZSBoYW5kbGVyIGZvciBicmtpIGZyb20ga2VybmVsIHNwYWNlIGlmIEtHREIgaXMgT0ZGLgorCSAqIEl0IGlzIHZlcnkgdW5saWtlbHkgdGhhdCBhbm90aGVyIGJya2kgaW5zdHJ1Y3Rpb24gaXMgY2FsbGVkLiAqLworCWJyaSAwCisKKy8qIE1TOiBVc2VyLW1vZGUgc3RhdGUgc2F2ZSAtIGdkYiAqLworMToJbHdpCXIxLCByMCwgVE9QSFlTKFBFUl9DUFUoQ1VSUkVOVF9TQVZFKSk7IC8qIGdldCBzYXZlZCBjdXJyZW50ICovCiAJdG9waHlzKHIxLHIxKTsKIAlsd2kJcjEsIHIxLCBUU19USFJFQURfSU5GTzsJLyogZ2V0IHRoZSB0aHJlYWQgaW5mbyAqLwogCWFkZGlrCXIxLCByMSwgVEhSRUFEX1NJWkU7CS8qIGNhbGN1bGF0ZSBrZXJuZWwgc3RhY2sgcG9pbnRlciAqLwogCXRvcGh5cyhyMSxyMSk7CiAKIAlhZGRpawlyMSwgcjEsIC1TVEFURV9TQVZFX1NJWkU7IC8qIE1ha2Ugcm9vbSBvbiB0aGUgc3RhY2suICAqLwotCXN3aQlyMywgcjEsIFBUTyArIFBUX1IzOwotCXN3aQlyNCwgcjEsIFBUTyArIFBUX1I0OwogCVNBVkVfUkVHUzsKLQotCXN3aQlyMCwgcjEsIFBUTytQVF9NT0RFOyAvKiBXYXMgaW4gdXNlci1tb2RlLiAgKi8KKwlzd2kJcjE3LCByMSwgUFRPK1BUX1IxNzsKKwlzd2kJcjE2LCByMSwgUFRPK1BUX1IxNjsKKwlzd2kJcjE2LCByMSwgUFRPK1BUX1BDOwkvKiBTYXZlIExQICovCisJc3dpCXIwLCByMSwgUFRPICsgUFRfTU9ERTsgLyogV2FzIGluIHVzZXItbW9kZS4gICovCiAJbHdpCXIxMSwgcjAsIFRPUEhZUyhQRVJfQ1BVKEVOVFJZX1NQKSk7CiAJc3dpCXIxMSwgcjEsIFBUTytQVF9SMTsgLyogU3RvcmUgdXNlciBTUC4gICovCi0JYWRkaQlyMTEsIHIwLCAxOwotCXN3aQlyMTEsIHIwLCBUT1BIWVMoUEVSX0NQVShLTSkpOwkvKiBOb3cgd2UncmUgaW4ga2VybmVsLW1vZGUuICAqLwotMjoJbHdpCUNVUlJFTlRfVEFTSywgcjAsIFRPUEhZUyhQRVJfQ1BVKENVUlJFTlRfU0FWRSkpOwotCS8qIFNhdmUgYXdheSB0aGUgc3lzY2FsbCBudW1iZXIuICAqLwotCXN3aQlyMCwgcjEsIFBUTytQVF9SMDsKKwlsd2kJQ1VSUkVOVF9UQVNLLCByMCwgVE9QSFlTKFBFUl9DUFUoQ1VSUkVOVF9TQVZFKSk7CiAJdG92aXJ0KHIxLHIxKQotCi0JYWRkaQlyNSwgcjAsIFNJR1RSQVAJCSAgICAgLyogc2VuZCB0aGUgdHJhcCBzaWduYWwgKi8KLQlhZGQJcjYsIHIwLCBDVVJSRU5UX1RBU0s7IC8qIEdldCBjdXJyZW50IHRhc2sgcHRyIGludG8gcjExICovCi0JYWRkawlyNywgcjAsIHIwCQkgICAgIC8qIDNyZCBwYXJhbSB6ZXJvICovCi0KIAlzZXRfdm1zOwotCWxhCXIxMSwgcjAsIHNlbmRfc2lnOwotCWxhCXIxNSwgcjAsIGRidHJhcF9jYWxsOwotZGJ0cmFwX2NhbGw6CXJ0YmQJcjExLCAwOwotCW5vcDsKKwlhZGRpawlyNSwgcjEsIFBUTzsKKwlhZGRpawlyMTUsIHIwLCBkYnRyYXBfY2FsbDsKK2RidHJhcF9jYWxsOiAvKiBSZXR1cm4gcG9pbnQgZm9yIGtlcm5lbC91c2VyIGVudHJ5ICsgOCBiZWNhdXNlIG9mIHJ0c2QgcjE1LCA4ICovCisJcnRiZAlyMCwgc3dfZXhjZXB0aW9uCisJbm9wCiAKLQlzZXRfYmlwOwkJCS8qICBJbnRzIG1hc2tlZCBmb3Igc3RhdGUgcmVzdG9yZSovCi0JbHdpCXIxMSwgcjEsIFBUTytQVF9NT0RFOworCS8qIE1TOiBUaGUgZmlyc3QgaW5zdHJ1Y3Rpb24gZm9yIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgZ2RiL2tnZGIgKi8KKwlzZXRfYmlwOyAvKiBJbnRzIG1hc2tlZCBmb3Igc3RhdGUgcmVzdG9yZSAqLworCWx3aQlyMTEsIHIxLCBQVE8gKyBQVF9NT0RFOwogCWJuZWkJcjExLCAyZjsKLQorLyogTVM6IFJldHVybiB0byB1c2VyIHNwYWNlIC0gZ2RiICovCiAJLyogR2V0IGN1cnJlbnQgdGFzayBwdHIgaW50byByMTEgKi8KIAlsd2kJcjExLCBDVVJSRU5UX1RBU0ssIFRTX1RIUkVBRF9JTkZPOwkvKiBnZXQgdGhyZWFkIGluZm8gKi8KIAlsd2kJcjExLCByMTEsIFRJX0ZMQUdTOwkvKiBnZXQgZmxhZ3MgaW4gdGhyZWFkIGluZm8gKi8KIAlhbmRpCXIxMSwgcjExLCBfVElGX05FRURfUkVTQ0hFRDsKIAliZXFpCXIxMSwgNWY7CiAKLS8qIENhbGwgdGhlIHNjaGVkdWxlciBiZWZvcmUgcmV0dXJuaW5nIGZyb20gYSBzeXNjYWxsL3RyYXAuICovCi0KKwkvKiBDYWxsIHRoZSBzY2hlZHVsZXIgYmVmb3JlIHJldHVybmluZyBmcm9tIGEgc3lzY2FsbC90cmFwLiAqLwogCWJyYWxpZAlyMTUsIHNjaGVkdWxlOwkvKiBDYWxsIHNjaGVkdWxlciAqLwogCW5vcDsJCQkJLyogZGVsYXkgc2xvdCAqLwotCS8qIFhYWCBJcyBQVF9EVFJBQ0UgaGFuZGxpbmcgbmVlZGVkIGhlcmU/ICovCi0JLyogWFhYIG02OGtub21tdSBhbHNvIGNoZWNrcyBUQVNLX1NUQVRFICYgVEFTS19DT1VOVEVSIGhlcmUuICAqLwogCiAJLyogTWF5YmUgaGFuZGxlIGEgc2lnbmFsICovCiA1Oglsd2kJcjExLCBDVVJSRU5UX1RBU0ssIFRTX1RIUkVBRF9JTkZPOwkvKiBnZXQgdGhyZWFkIGluZm8gKi8KQEAgLTk1NSw1MiArODM3LDM4IEBACiAJYW5kaQlyMTEsIHIxMSwgX1RJRl9TSUdQRU5ESU5HOwogCWJlcWkJcjExLCAxZjsJCS8qIFNpZ25hbHMgdG8gaGFuZGxlLCBoYW5kbGUgdGhlbSAqLwogCi0vKiBIYW5kbGUgYSBzaWduYWwgcmV0dXJuOyBQZW5kaW5nIHNpZ25hbHMgc2hvdWxkIGJlIGluIHIxOC4gICovCi0JLyogTm90IGFsbCByZWdpc3RlcnMgYXJlIHNhdmVkIGJ5IHRoZSBub3JtYWwgdHJhcC9pbnRlcnJ1cHQgZW50cnkKLQkgICBwb2ludHMgKGZvciBpbnN0YW5jZSwgY2FsbC1zYXZlZCByZWdpc3RlcnMgKGJlY2F1c2UgdGhlIG5vcm1hbAotCSAgIEMtY29tcGlsZXIgY2FsbGluZyBzZXF1ZW5jZSBpbiB0aGUga2VybmVsIG1ha2VzIHN1cmUgdGhleSdyZQotCSAgIHByZXNlcnZlZCksIGFuZCBjYWxsLWNsb2JiZXJlZCByZWdpc3RlcnMgaW4gdGhlIGNhc2Ugb2YKLQkgICB0cmFwcyksIGJ1dCBzaWduYWwgaGFuZGxlcnMgbWF5IHdhbnQgdG8gZXhhbWluZSBvciBjaGFuZ2UgdGhlCi0JICAgY29tcGxldGUgcmVnaXN0ZXIgc3RhdGUuICBIZXJlIHdlIHNhdmUgYW55dGhpbmcgbm90IHNhdmVkIGJ5Ci0JICAgdGhlIG5vcm1hbCBlbnRyeSBzZXF1ZW5jZSwgc28gdGhhdCBpdCBtYXkgYmUgc2FmZWx5IHJlc3RvcmVkCi0JICAgKGluIGEgcG9zc2libHkgbW9kaWZpZWQgZm9ybSkgYWZ0ZXIgZG9fc2lnbmFsIHJldHVybnMuICAqLwotCi0JbGEJcjUsIHIxLCBQVE87CQkvKiBBcmcgMTogc3RydWN0IHB0X3JlZ3MgKnJlZ3MgKi8KKwlhZGRpawlyNSwgcjEsIFBUTzsJCS8qIEFyZyAxOiBzdHJ1Y3QgcHRfcmVncyAqcmVncyAqLwogCWFkZGkgIHI3LCByMCwgMDsJLyogQXJnIDM6IGludCBpbl9zeXNjYWxsICovCiAJYnJhbGlkCXIxNSwgZG9fc2lnbmFsOwkvKiBIYW5kbGUgYW55IHNpZ25hbHMgKi8KIAlhZGQJcjYsIHIwLCByMDsJCS8qIEFyZyAyOiBzaWdzZXRfdCAqb2xkc2V0ICovCiAKLQogLyogRmluYWxseSwgcmV0dXJuIHRvIHVzZXIgc3RhdGUuICAqLwotMToJc3dpCXIwLCByMCwgUEVSX0NQVShLTSk7CS8qIE5vdyBvZmZpY2lhbGx5IGluIHVzZXIgc3RhdGUuICovCi0Jc3dpCUNVUlJFTlRfVEFTSywgcjAsIFBFUl9DUFUoQ1VSUkVOVF9TQVZFKTsgLyogc2F2ZSBjdXJyZW50ICovCisxOglzd2kJQ1VSUkVOVF9UQVNLLCByMCwgUEVSX0NQVShDVVJSRU5UX1NBVkUpOyAvKiBzYXZlIGN1cnJlbnQgKi8KIAlWTV9PRkY7CiAJdG9waHlzKHIxLHIxKTsKLQotCWx3aQlyMywgcjEsIFBUTytQVF9SMzsgLyogcmVzdG9yZSBzYXZlZCByMywgcjQgcmVnaXN0ZXJzICovCi0JbHdpCXI0LCByMSwgUFRPK1BUX1I0OworCS8qIE1TOiBSZXN0b3JlIGFsbCByZWdzICovCiAJUkVTVE9SRV9SRUdTCi0JYWRkaWsJcjEsIHIxLCBTVEFURV9TQVZFX1NJWkUJCS8qIENsZWFuIHVwIHN0YWNrIHNwYWNlLiAgKi8KLQotCi0JbHdpCXIxLCByMSwgUFRfUjEgLSBQVF9TSVpFOwotCQkJCQkvKiBSZXN0b3JlIHVzZXIgc3RhY2sgcG9pbnRlci4gKi8KLQlicmkJNmY7Ci0KLS8qIFJldHVybiB0byBrZXJuZWwgc3RhdGUuICAqLwotMjoJVk1fT0ZGOwotCXRvcGh5cyhyMSxyMSk7Ci0JbHdpCXIzLCByMSwgUFRPK1BUX1IzOyAvKiByZXN0b3JlIHNhdmVkIHIzLCByNCByZWdpc3RlcnMgKi8KLQlsd2kJcjQsIHIxLCBQVE8rUFRfUjQ7Ci0JUkVTVE9SRV9SRUdTCi0JYWRkaWsJcjEsIHIxLCBTVEFURV9TQVZFX1NJWkUJCS8qIENsZWFuIHVwIHN0YWNrIHNwYWNlLiAgKi8KLQotCXRvdmlydChyMSxyMSk7Ci02OgotREJUUkFQX3JldHVybjoJCS8qIE1ha2UgZ2xvYmFsIHN5bWJvbCBmb3IgZGVidWdnaW5nICovCi0JcnRiZAlyMTQsIDA7CS8qIEluc3RydWN0aW9ucyB0byByZXR1cm4gZnJvbSBhbiBJUlEgKi8KKwlsd2kJcjE3LCByMSwgUFRPK1BUX1IxNzsKKwlsd2kJcjE2LCByMSwgUFRPK1BUX1IxNjsKKwlhZGRpawlyMSwgcjEsIFNUQVRFX1NBVkVfU0laRQkgLyogQ2xlYW4gdXAgc3RhY2sgc3BhY2UgKi8KKwlsd2kJcjEsIHIxLCBQVF9SMSAtIFBUX1NJWkU7IC8qIFJlc3RvcmUgdXNlciBzdGFjayBwb2ludGVyICovCitEQlRSQVBfcmV0dXJuX3VzZXI6IC8qIE1TOiBNYWtlIGdsb2JhbCBzeW1ib2wgZm9yIGRlYnVnZ2luZyAqLworCXJ0YmQJcjE2LCAwOyAvKiBNUzogSW5zdHJ1Y3Rpb25zIHRvIHJldHVybiBmcm9tIGEgZGVidWcgdHJhcCAqLwogCW5vcDsKIAorLyogTVM6IFJldHVybiB0byBrZXJuZWwgc3RhdGUgLSBrZ2RiICovCisyOglWTV9PRkY7CisJdG9waHlzKHIxLHIxKTsKKwkvKiBNUzogUmVzdG9yZSBhbGwgcmVncyAqLworCVJFU1RPUkVfUkVHUworCWx3aQlyMTQsIHIxLCBQVE8rUFRfUjE0OworCWx3aQlyMTYsIHIxLCBQVE8rUFRfUEM7CisJbHdpCXIxNywgcjEsIFBUTytQVF9SMTc7CisJYWRkaWsJcjEsIHIxLCBTVEFURV9TQVZFX1NJWkU7IC8qIE1TOiBDbGVhbiB1cCBzdGFjayBzcGFjZSAqLworCXRvdmlydChyMSxyMSk7CitEQlRSQVBfcmV0dXJuX2tlcm5lbDogLyogTVM6IE1ha2UgZ2xvYmFsIHN5bWJvbCBmb3IgZGVidWdnaW5nICovCisJcnRiZAlyMTYsIDA7IC8qIE1TOiBJbnN0cnVjdGlvbnMgdG8gcmV0dXJuIGZyb20gYSBkZWJ1ZyB0cmFwICovCisJbm9wOwogCiAKIEVOVFJZKF9zd2l0Y2hfdG8pCkBAIC0xMDM3LDE2ICs5MDUsMTIgQEAKIAlzd2kJcjMwLCByMTEsIENDX1IzMAogCS8qIHNwZWNpYWwgcHVycG9zZSByZWdpc3RlcnMgKi8KIAltZnMJcjEyLCBybXNyCi0Jbm9wCiAJc3dpCXIxMiwgcjExLCBDQ19NU1IKIAltZnMJcjEyLCByZWFyCi0Jbm9wCiAJc3dpCXIxMiwgcjExLCBDQ19FQVIKIAltZnMJcjEyLCByZXNyCi0Jbm9wCiAJc3dpCXIxMiwgcjExLCBDQ19FU1IKIAltZnMJcjEyLCByZnNyCi0Jbm9wCiAJc3dpCXIxMiwgcjExLCBDQ19GU1IKIAogCS8qIHVwZGF0ZSByMzEsIHRoZSBjdXJyZW50LWdpdmUgbWUgcG9pbnRlciB0byB0YXNrIHdoaWNoIHdpbGwgYmUgbmV4dCAqLwpAQCAtMTA4NSwxMCArOTQ5LDggQEAKIAkvKiBzcGVjaWFsIHB1cnBvc2UgcmVnaXN0ZXJzICovCiAJbHdpCXIxMiwgcjExLCBDQ19GU1IKIAltdHMJcmZzciwgcjEyCi0Jbm9wCiAJbHdpCXIxMiwgcjExLCBDQ19NU1IKIAltdHMJcm1zciwgcjEyCi0Jbm9wCiAKIAlydHNkCXIxNSwgOAogCW5vcApAQCAtMTA5NiwxNSArOTU4LDYgQEAKIEVOVFJZKF9yZXNldCkKIAlicmFpCTB4NzA7IC8qIEp1bXAgYmFjayB0byBGUy1ib290ICovCiAKLUVOVFJZKF9icmVhaykKLQltZnMJcjUsIHJtc3IKLQlub3AKLQlzd2kJcjUsIHIwLCAweDI1MCArIFRPUEhZUyhyMF9yYW0pCi0JbWZzCXI1LCByZXNyCi0Jbm9wCi0Jc3dpCXI1LCByMCwgMHgyNTQgKyBUT1BIWVMocjBfcmFtKQotCWJyaQkwCi0KIAkvKiBUaGVzZSBhcmUgY29tcGlsZWQgYW5kIGxvYWRlZCBpbnRvIGhpZ2ggbWVtb3J5LCB0aGVuCiAJICogY29waWVkIGludG8gcGxhY2UgaW4gbWFjaF9lYXJseV9zZXR1cCAqLwogCS5zZWN0aW9uCS5pbml0Lml2dCwgImF4IgpAQCAtMTExNiwxNCArOTY5LDM4IEBACiAJbm9wCiAJYnJhaQlUT1BIWVMoX3VzZXJfZXhjZXB0aW9uKTsgLyogc3lzY2FsbCBoYW5kbGVyICovCiAJYnJhaQlUT1BIWVMoX2ludGVycnVwdCk7CS8qIEludGVycnVwdCBoYW5kbGVyICovCi0JYnJhaQlUT1BIWVMoX2JyZWFrKTsJCS8qIG5taSB0cmFwIGhhbmRsZXIgKi8KKwlicmFpCVRPUEhZUyhfZGVidWdfZXhjZXB0aW9uKTsJLyogZGVidWcgdHJhcCBoYW5kbGVyICovCiAJYnJhaQlUT1BIWVMoX2h3X2V4Y2VwdGlvbl9oYW5kbGVyKTsJLyogSFcgZXhjZXB0aW9uIGhhbmRsZXIgKi8KIAotCS5vcmcJMHg2MAotCWJyYWkJVE9QSFlTKF9kZWJ1Z19leGNlcHRpb24pOwkvKiBkZWJ1ZyB0cmFwIGhhbmRsZXIqLwotCiAuc2VjdGlvbiAucm9kYXRhLCJhIgogI2luY2x1ZGUgInN5c2NhbGxfdGFibGUuUyIKIAogc3lzY2FsbF90YWJsZV9zaXplPSguLXN5c19jYWxsX3RhYmxlKQogCit0eXBlX1NZU0NBTEw6CisJLmFzY2lpICJTWVNDQUxMXDAiCit0eXBlX0lSUToKKwkuYXNjaWkgIklSUVwwIgordHlwZV9JUlFfUFJFRU1QVDoKKwkuYXNjaWkgIklSUSAoUFJFRU1QVEVEKVwwIgordHlwZV9TWVNDQUxMX1BSRUVNUFQ6CisJLmFzY2lpICIgU1lTQ0FMTCAoUFJFRU1QVEVEKVwwIgorCisJLyoKKwkgKiBUcmFwIGRlY29kaW5nIGZvciBzdGFjayB1bndpbmRlcgorCSAqIFR1cGxlcyBhcmUgKHN0YXJ0IGFkZHIsIGVuZCBhZGRyLCBzdHJpbmcpCisJICogSWYgcmV0dXJuIGFkZHJlc3MgbGllcyBvbiBbc3RhcnQgYWRkciwgZW5kIGFkZHJdLAorCSAqIHVud2luZGVyIGRpc3BsYXlzICdzdHJpbmcnCisJICovCisKKwkuYWxpZ24gNAorLmdsb2JhbCBtaWNyb2JsYXplX3RyYXBfaGFuZGxlcnMKK21pY3JvYmxhemVfdHJhcF9oYW5kbGVyczoKKwkvKiBFeGFjdCBtYXRjaGVzIGNvbWUgZmlyc3QgKi8KKwkud29yZCByZXRfZnJvbV90cmFwOyAud29yZCByZXRfZnJvbV90cmFwICAgOyAud29yZCB0eXBlX1NZU0NBTEwKKwkud29yZCByZXRfZnJvbV9pcnEgOyAud29yZCByZXRfZnJvbV9pcnEgICAgOyAud29yZCB0eXBlX0lSUQorCS8qIEZ1enp5IG1hdGNoZXMgZ28gaGVyZSAqLworCS53b3JkIHJldF9mcm9tX2lycSA7IC53b3JkIG5vX2ludHJfcmVzY2hlZCA7IC53b3JkIHR5cGVfSVJRX1BSRUVNUFQKKwkud29yZCByZXRfZnJvbV90cmFwOyAud29yZCBUUkFQX3JldHVybiAgICAgOyAud29yZCB0eXBlX1NZU0NBTExfUFJFRU1QVAorCS8qIEVuZCBvZiB0YWJsZSAqLworCS53b3JkIDAgICAgICAgICAgICAgICA7IC53b3JkIDAgICAgICAgICAgICAgICA7IC53b3JkIDAKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZXhjZXB0aW9ucy5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9leGNlcHRpb25zLmMKaW5kZXggMDJjYmRmZS4uYjk4ZWU4ZCAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9leGNlcHRpb25zLmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9leGNlcHRpb25zLmMKQEAgLTQ4LDEyICs0OCwxNyBAQAogCWRvX2V4aXQoZXJyKTsKIH0KIAorLyogZm9yIHVzZXIgYXBwbGljYXRpb24gZGVidWdnaW5nICovCit2b2lkIHN3X2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlfZXhjZXB0aW9uKFNJR1RSQVAsIHJlZ3MsIFRSQVBfQlJLUFQsIHJlZ3MtPnIxNik7Cit9CisKIHZvaWQgX2V4Y2VwdGlvbihpbnQgc2lnbnIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXNpZ2luZm9fdCBpbmZvOwogCiAJaWYgKGtlcm5lbF9tb2RlKHJlZ3MpKSB7Ci0JCWRlYnVnZ2VyKHJlZ3MpOwogCQlkaWUoIkV4Y2VwdGlvbiBpbiBrZXJuZWwgbW9kZSIsIHJlZ3MsIHNpZ25yKTsKIAl9CiAJaW5mby5zaV9zaWdubyA9IHNpZ25yOwpAQCAtMTQzLDcgKzE0OCw3IEBACiAjaWZkZWYgQ09ORklHX01NVQogCWNhc2UgTUlDUk9CTEFaRV9QUklWSUxFR0VEX0VYQ0VQVElPTjoKIAkJcHJfZGVidWcoS0VSTl9XQVJOSU5HICJQcml2aWxlZ2VkIGV4Y2VwdGlvblxuIik7Ci0JCS8qICJicmsgcjAscjAiIC0gdXNlZCBhcyBkZWJ1ZyBicmVha3BvaW50ICovCisJCS8qICJicmsgcjAscjAiIC0gdXNlZCBhcyBkZWJ1ZyBicmVha3BvaW50IC0gb2xkIHRvb2xjaGFpbiAqLwogCQlpZiAoZ2V0X3VzZXIoY29kZSwgKHVuc2lnbmVkIGxvbmcgKilyZWdzLT5wYykgPT0gMAogCQkJJiYgY29kZSA9PSAweDk4MGMwMDAwKSB7CiAJCQlfZXhjZXB0aW9uKFNJR1RSQVAsIHJlZ3MsIFRSQVBfQlJLUFQsIGFkZHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9oZWFkLlMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2hlYWQuUwppbmRleCAxYmY3Mzk4Li40MjQzNDAwIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2hlYWQuUworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2hlYWQuUwpAQCAtNDMsMTAgKzQzLDEwIEBACiAuZ2xvYmFsIGVtcHR5X3plcm9fcGFnZQogLmFsaWduIDEyCiBlbXB0eV96ZXJvX3BhZ2U6Ci0JLnNwYWNlCTQwOTYKKwkuc3BhY2UJUEFHRV9TSVpFCiAuZ2xvYmFsIHN3YXBwZXJfcGdfZGlyCiBzd2FwcGVyX3BnX2RpcjoKLQkuc3BhY2UJNDA5NgorCS5zcGFjZQlQQUdFX1NJWkUKIAogI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9od19leGNlcHRpb25faGFuZGxlci5TIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9od19leGNlcHRpb25faGFuZGxlci5TCmluZGV4IDk5NWEyMTIuLjc4MTE5NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaHdfZXhjZXB0aW9uX2hhbmRsZXIuUworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2h3X2V4Y2VwdGlvbl9oYW5kbGVyLlMKQEAgLTc4LDkgKzc4LDYgQEAKICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KIAogLyogSGVscGZ1bCBNYWNyb3MgKi8KLSNpZm5kZWYgQ09ORklHX01NVQotI2RlZmluZSBFWF9IQU5ETEVSX1NUQUNLX1NJWgkoNCoxOSkKLSNlbmRpZgogI2RlZmluZSBOVU1fVE9fUkVHKG51bSkJCXIgIyMgbnVtCiAKICNpZmRlZiBDT05GSUdfTU1VCkBAIC05ODgsNiArOTg1LDcgQEAKIC5lbmQgX3VuYWxpZ25lZF9kYXRhX2V4Y2VwdGlvbgogI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KIAorLmdsb2JhbCBleF9oYW5kbGVyX3VuaGFuZGxlZAogZXhfaGFuZGxlcl91bmhhbmRsZWQ6CiAvKiBGSVhNRSBhZGQgaGFuZGxlIGZ1bmN0aW9uIGZvciB1bmhhbmRsZWQgZXhjZXB0aW9uIC0gZHVtcCByZWdpc3RlciAqLwogCWJyaSAwCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2lycS5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9pcnEuYwppbmRleCA4ZjEyMGFjLi5hOTM0NWZiIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2lycS5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaXJxLmMKQEAgLTE3LDI2ICsxNywxNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAKLXVuc2lnbmVkIGludCBpcnFfb2ZfcGFyc2VfYW5kX21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgaW50IGluZGV4KQotewotCXN0cnVjdCBvZl9pcnEgb2lycTsKLQotCWlmIChvZl9pcnFfbWFwX29uZShkZXYsIGluZGV4LCAmb2lycSkpCi0JCXJldHVybiBOT19JUlE7Ci0KLQlyZXR1cm4gb2lycS5zcGVjaWZpZXJbMF07Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpcnFfb2ZfcGFyc2VfYW5kX21hcCk7Ci0KIHN0YXRpYyB1MzIgY29uY3VycmVudF9pcnE7CiAKIHZvaWQgX19pcnFfZW50cnkgZG9fSVJRKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGludCBpcnE7CiAJc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOworCXRyYWNlX2hhcmRpcnFzX29mZigpOwogCiAJaXJxX2VudGVyKCk7CiAJaXJxID0gZ2V0X2lycShyZWdzKTsKQEAgLTUzLDYgKzQ0LDcgQEAKIAogCWlycV9leGl0KCk7CiAJc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKKwl0cmFjZV9oYXJkaXJxc19vbigpOwogfQogCiBpbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKQEAgLTEwNCw3ICs5Niw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChpcnFfY3JlYXRlX21hcHBpbmcpOwogCiB1bnNpZ25lZCBpbnQgaXJxX2NyZWF0ZV9vZl9tYXBwaW5nKHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29udHJvbGxlciwKLQkJCQkJdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSkKKwkJCQkgICBjb25zdCB1MzIgKmludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplKQogewogCXJldHVybiBpbnRzcGVjWzBdOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9rZ2RiLmMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2tnZGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmMwMDZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9rZ2RiLmMKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBNaWNyb2JsYXplIEtHREIgc3VwcG9ydAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZ2RiLmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS9wdnIuaD4KKworI2RlZmluZSBHREJfUkVHCQkwCisjZGVmaW5lIEdEQl9QQwkJMzIKKyNkZWZpbmUgR0RCX01TUgkJMzMKKyNkZWZpbmUgR0RCX0VBUgkJMzQKKyNkZWZpbmUgR0RCX0VTUgkJMzUKKyNkZWZpbmUgR0RCX0ZTUgkJMzYKKyNkZWZpbmUgR0RCX0JUUgkJMzcKKyNkZWZpbmUgR0RCX1BWUgkJMzgKKyNkZWZpbmUgR0RCX1JFRFIJNTAKKyNkZWZpbmUgR0RCX1JQSUQJNTEKKyNkZWZpbmUgR0RCX1JaUFIJNTIKKyNkZWZpbmUgR0RCX1JUTEJYCTUzCisjZGVmaW5lIEdEQl9SVExCU1gJNTQgLyogbWZzIGNhbid0IHJlYWQgaXQgKi8KKyNkZWZpbmUgR0RCX1JUTEJMTwk1NQorI2RlZmluZSBHREJfUlRMQkhJCTU2CisKKy8qIGtlZXAgcHZyIHNlcGFyYXRlbHkgYmVjYXVzZSBpdCBpcyB1bmNoYW5nZWJsZSAqLworc3RydWN0IHB2cl9zIHB2cjsKKwordm9pZCBwdF9yZWdzX3RvX2dkYl9yZWdzKHVuc2lnbmVkIGxvbmcgKmdkYl9yZWdzLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nICpwdF9yZWdiID0gKHVuc2lnbmVkIGxvbmcgKilyZWdzOworCWludCB0ZW1wOworCS8qIHJlZ2lzdGVycyByMCAtIHIzMSwgcGMsIG1zciwgZWFyLCBlc3IsIGZzciArIGRvIG5vdCBzYXZlIHB0X21vZGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgKHNpemVvZihzdHJ1Y3QgcHRfcmVncykgLyA0KSAtIDE7IGkrKykKKwkJZ2RiX3JlZ3NbaV0gPSBwdF9yZWdiW2ldOworCisJLyogQnJhbmNoIHRhcmdldCByZWdpc3RlciBjYW4ndCBiZSBjaGFuZ2VkICovCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtZnMgJTAsIHJidHI7IiA6ICI9ciIodGVtcCkgOiApOworCWdkYl9yZWdzW0dEQl9CVFJdID0gdGVtcDsKKworCS8qIHB2ciBwYXJ0ICAtIHdlIGhhdmUgMTEgcHZyIHJlZ3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBwdnJfcykvNDsgaSsrKQorCQlnZGJfcmVnc1tHREJfUFZSICsgaV0gPSBwdnIucHZyW2ldOworCisJLyogcmVhZCBzcGVjaWFsIHJlZ2lzdGVycyAtIGNhbid0IGJlIGNoYW5nZWQgKi8KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1mcyAlMCwgcmVkcjsiIDogIj1yIih0ZW1wKSA6ICk7CisJZ2RiX3JlZ3NbR0RCX1JFRFJdID0gdGVtcDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1mcyAlMCwgcnBpZDsiIDogIj1yIih0ZW1wKSA6ICk7CisJZ2RiX3JlZ3NbR0RCX1JQSURdID0gdGVtcDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1mcyAlMCwgcnpwcjsiIDogIj1yIih0ZW1wKSA6ICk7CisJZ2RiX3JlZ3NbR0RCX1JaUFJdID0gdGVtcDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1mcyAlMCwgcnRsYng7IiA6ICI9ciIodGVtcCkgOiApOworCWdkYl9yZWdzW0dEQl9SVExCWF0gPSB0ZW1wOworCV9fYXNtX18gX192b2xhdGlsZV9fICgibWZzICUwLCBydGxibG87IiA6ICI9ciIodGVtcCkgOiApOworCWdkYl9yZWdzW0dEQl9SVExCTE9dID0gdGVtcDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1mcyAlMCwgcnRsYmhpOyIgOiAiPXIiKHRlbXApIDogKTsKKwlnZGJfcmVnc1tHREJfUlRMQkhJXSA9IHRlbXA7Cit9CisKK3ZvaWQgZ2RiX3JlZ3NfdG9fcHRfcmVncyh1bnNpZ25lZCBsb25nICpnZGJfcmVncywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyAqcHRfcmVnYiA9ICh1bnNpZ25lZCBsb25nICopcmVnczsKKworCS8qIHB0X3JlZ3MgYW5kIGdkYl9yZWdzIGhhdmUgdGhlIHNhbWUgMzcgdmFsdWVzLgorCSAqIFRoZSByZXN0IG9mIGdkYl9yZWdzIGFyZSB1bnVzZWQgYW5kIGNhbid0IGJlIGNoYW5nZWQuCisJICogcjAgcmVnaXN0ZXIgdmFsdWUgY2FuJ3QgYmUgY2hhbmdlZCB0b28uICovCisJZm9yIChpID0gMTsgaSA8IChzaXplb2Yoc3RydWN0IHB0X3JlZ3MpIC8gNCkgLSAxOyBpKyspCisJCXB0X3JlZ2JbaV0gPSBnZGJfcmVnc1tpXTsKK30KKwordm9pZCBtaWNyb2JsYXplX2tnZGJfYnJlYWsoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaWYgKGtnZGJfaGFuZGxlX2V4Y2VwdGlvbigxLCBTSUdUUkFQLCAwLCByZWdzKSAhPSAwKQorCQlyZXR1cm4gMDsKKworCS8qIEp1bXAgb3ZlciB0aGUgZmlyc3QgYXJjaF9rZ2RiX2JyZWFrcG9pbnQgd2hpY2ggaXMgYmFycmllciB0bworCSAqIGdldCBrZ2RiIHdvcmsuIFRoZSBzYW1lIHNvbHV0aW9uIGlzIHVzZWQgZm9yIHBvd2VycGMgKi8KKwlpZiAoKih1MzIgKikgKHJlZ3MtPnBjKSA9PSAqKHUzMiAqKSAoJmFyY2hfa2dkYl9vcHMuZ2RiX2JwdF9pbnN0cikpCisJCXJlZ3MtPnBjICs9IEJSRUFLX0lOU1RSX1NJWkU7Cit9CisKKy8qIHVudGVzdGVkICovCit2b2lkIHNsZWVwaW5nX3RocmVhZF90b19nZGJfcmVncyh1bnNpZ25lZCBsb25nICpnZGJfcmVncywgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgKnB0X3JlZ2IgPSAodW5zaWduZWQgbG9uZyAqKShwLT50aHJlYWQucmVncyk7CisKKwkvKiByZWdpc3RlcnMgcjAgLSByMzEsIHBjLCBtc3IsIGVhciwgZXNyLCBmc3IgKyBkbyBub3Qgc2F2ZSBwdF9tb2RlICovCisJZm9yIChpID0gMDsgaSA8IChzaXplb2Yoc3RydWN0IHB0X3JlZ3MpIC8gNCkgLSAxOyBpKyspCisJCWdkYl9yZWdzW2ldID0gcHRfcmVnYltpXTsKKworCS8qIHB2ciBwYXJ0ICAtIHdlIGhhdmUgMTEgcHZyIHJlZ3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBwdnJfcykvNDsgaSsrKQorCQlnZGJfcmVnc1tHREJfUFZSICsgaV0gPSBwdnIucHZyW2ldOworfQorCit2b2lkIGtnZGJfYXJjaF9zZXRfcGMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgaXApCit7CisJcmVncy0+cGMgPSBpcDsKK30KKworaW50IGtnZGJfYXJjaF9oYW5kbGVfZXhjZXB0aW9uKGludCB2ZWN0b3IsIGludCBzaWdubywgaW50IGVycl9jb2RlLAorCQkJICAgICAgIGNoYXIgKnJlbWNvbV9pbl9idWZmZXIsIGNoYXIgKnJlbWNvbV9vdXRfYnVmZmVyLAorCQkJICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWNoYXIgKnB0cjsKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCXN3aXRjaCAocmVtY29tX2luX2J1ZmZlclswXSkgeworCWNhc2UgJ2MnOgorCQkvKiBoYW5kbGUgdGhlIG9wdGlvbmFsIHBhcmFtZXRlciAqLworCQlwdHIgPSAmcmVtY29tX2luX2J1ZmZlclsxXTsKKwkJaWYgKGtnZGJfaGV4MmxvbmcoJnB0ciwgJmFkZHJlc3MpKQorCQkJcmVncy0+cGMgPSBhZGRyZXNzOworCisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLTE7IC8qIHRoaXMgbWVhbnMgdGhhdCB3ZSBkbyBub3Qgd2FudCB0byBleGl0IGZyb20gdGhlIGhhbmRsZXIgKi8KK30KKworaW50IGtnZGJfYXJjaF9pbml0KHZvaWQpCit7CisJZ2V0X3B2cigmcHZyKTsgLyogRmlsbCBQVlIgc3RydWN0dXJlICovCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQga2dkYl9hcmNoX2V4aXQodm9pZCkKK3sKKwkvKiBOb3RoaW5nIHRvIGRvICovCit9CisKKy8qCisgKiBHbG9iYWwgZGF0YQorICovCitzdHJ1Y3Qga2dkYl9hcmNoIGFyY2hfa2dkYl9vcHMgPSB7CisJLmdkYl9icHRfaW5zdHIgPSB7MHhiYSwgMHgwYywgMHgwMCwgMHgxOH0sIC8qIGJya2kgcjE2LCAweDE4ICovCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9taXNjLlMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL21pc2MuUwppbmRleCAwZmI1ZmM2Li4yMDZkYTNkIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL21pc2MuUworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL21pc2MuUwpAQCAtNzYsNyArNzYsNyBAQAogCSAqIHRoZSBVQVJUcyBuaWNlIGFuZCBlYXJseS4gIFdlIHVzZSBhIDRrIHJlYWw9PXZpcnR1YWwgbWFwcGluZy4KIAkgKi8KIAlvcmkJcjQsIHIwLCBNSUNST0JMQVpFX1RMQl9TSVpFIC0gMQotCW10cwlydGxieCwgcjQgLyogVExCIHNsb3QgMiAqLworCW10cwlydGxieCwgcjQgLyogVExCIHNsb3QgNjMgKi8KIAogCW9yCXI0LHI1LHIwCiAJYW5kaQlyNCxyNCwweGZmZmZmMDAwCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL29mX2RldmljZS5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9vZl9kZXZpY2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM3Mjc4Ny4uMDAwMDAwMAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL29mX2RldmljZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9vZi5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotCi12b2lkIG9mX2RldmljZV9tYWtlX2J1c19pZChzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYpCi17Ci0Jc3RhdGljIGF0b21pY190IGJ1c19ub19yZWdfbWFnaWM7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gZGV2LT5kZXYub2Zfbm9kZTsKLQljb25zdCB1MzIgKnJlZzsKLQl1NjQgYWRkcjsKLQlpbnQgbWFnaWM7Ci0KLQkvKgotCSAqIEZvciBNTUlPLCBnZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3MKLQkgKi8KLQlyZWcgPSBvZl9nZXRfcHJvcGVydHkobm9kZSwgInJlZyIsIE5VTEwpOwotCWlmIChyZWcpIHsKLQkJYWRkciA9IG9mX3RyYW5zbGF0ZV9hZGRyZXNzKG5vZGUsIHJlZyk7Ci0JCWlmIChhZGRyICE9IE9GX0JBRF9BRERSKSB7Ci0JCQlkZXZfc2V0X25hbWUoJmRldi0+ZGV2LCAiJWxseC4lcyIsCi0JCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWFkZHIsIG5vZGUtPm5hbWUpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBObyBCdXNJRCwgdXNlIHRoZSBub2RlIG5hbWUgYW5kIGFkZCBhIGdsb2JhbGx5IGluY3JlbWVudGVkCi0JICogY291bnRlciAoYW5kIHByYXkuLi4pCi0JICovCi0JbWFnaWMgPSBhdG9taWNfYWRkX3JldHVybigxLCAmYnVzX25vX3JlZ19tYWdpYyk7Ci0JZGV2X3NldF9uYW1lKCZkZXYtPmRldiwgIiVzLiVkIiwgbm9kZS0+bmFtZSwgbWFnaWMgLSAxKTsKLX0KLUVYUE9SVF9TWU1CT0wob2ZfZGV2aWNlX21ha2VfYnVzX2lkKTsKLQotc3RydWN0IG9mX2RldmljZSAqb2ZfZGV2aWNlX2FsbG9jKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCQkJICBjb25zdCBjaGFyICpidXNfaWQsCi0JCQkJICBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpCi17Ci0Jc3RydWN0IG9mX2RldmljZSAqZGV2OwotCi0JZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOwotCWlmICghZGV2KQotCQlyZXR1cm4gTlVMTDsKLQotCWRldi0+ZGV2Lm9mX25vZGUgPSBvZl9ub2RlX2dldChucCk7Ci0JZGV2LT5kZXYuZG1hX21hc2sgPSAmZGV2LT5hcmNoZGF0YS5kbWFfbWFzazsKLQlkZXYtPmRldi5wYXJlbnQgPSBwYXJlbnQ7Ci0JZGV2LT5kZXYucmVsZWFzZSA9IG9mX3JlbGVhc2VfZGV2OwotCi0JaWYgKGJ1c19pZCkKLQkJZGV2X3NldF9uYW1lKCZkZXYtPmRldiwgYnVzX2lkKTsKLQllbHNlCi0JCW9mX2RldmljZV9tYWtlX2J1c19pZChkZXYpOwotCi0JcmV0dXJuIGRldjsKLX0KLUVYUE9SVF9TWU1CT0wob2ZfZGV2aWNlX2FsbG9jKTsKLQotaW50IG9mX2RldmljZV91ZXZlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCi17Ci0Jc3RydWN0IG9mX2RldmljZSAqb2ZkZXY7Ci0JY29uc3QgY2hhciAqY29tcGF0OwotCWludCBzZWVuID0gMCwgY3BsZW4sIHNsOwotCi0JaWYgKCFkZXYpCi0JCXJldHVybiAtRU5PREVWOwotCi0Jb2ZkZXYgPSB0b19vZl9kZXZpY2UoZGV2KTsKLQotCWlmIChhZGRfdWV2ZW50X3ZhcihlbnYsICJPRl9OQU1FPSVzIiwgb2ZkZXYtPmRldi5vZl9ub2RlLT5uYW1lKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAoYWRkX3VldmVudF92YXIoZW52LCAiT0ZfVFlQRT0lcyIsIG9mZGV2LT5kZXYub2Zfbm9kZS0+dHlwZSkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogU2luY2UgdGhlIGNvbXBhdGlibGUgZmllbGQgY2FuIGNvbnRhaW4gcHJldHR5IG11Y2ggYW55dGhpbmcKLQkgKiBpdCdzIG5vdCByZWFsbHkgbGVnYWwgdG8gc3BsaXQgaXQgb3V0IHdpdGggY29tbWFzLiBXZSBzcGxpdCBpdAotCSAqIHVwIHVzaW5nIGEgbnVtYmVyIG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbnN0ZWFkLiAqLwotCi0JY29tcGF0ID0gb2ZfZ2V0X3Byb3BlcnR5KG9mZGV2LT5kZXYub2Zfbm9kZSwgImNvbXBhdGlibGUiLCAmY3BsZW4pOwotCXdoaWxlIChjb21wYXQgJiYgKmNvbXBhdCAmJiBjcGxlbiA+IDApIHsKLQkJaWYgKGFkZF91ZXZlbnRfdmFyKGVudiwgIk9GX0NPTVBBVElCTEVfJWQ9JXMiLCBzZWVuLCBjb21wYXQpKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJc2wgPSBzdHJsZW4oY29tcGF0KSArIDE7Ci0JCWNvbXBhdCArPSBzbDsKLQkJY3BsZW4gLT0gc2w7Ci0JCXNlZW4rKzsKLQl9Ci0KLQlpZiAoYWRkX3VldmVudF92YXIoZW52LCAiT0ZfQ09NUEFUSUJMRV9OPSVkIiwgc2VlbikpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogbW9kYWxpYXMgaXMgdHJpY2tpZXIsIHdlIGFkZCBpdCBpbiAyIHN0ZXBzICovCi0JaWYgKGFkZF91ZXZlbnRfdmFyKGVudiwgIk1PREFMSUFTPSIpKQotCQlyZXR1cm4gLUVOT01FTTsKLQlzbCA9IG9mX2RldmljZV9nZXRfbW9kYWxpYXMob2ZkZXYsICZlbnYtPmJ1ZltlbnYtPmJ1Zmxlbi0xXSwKLQkJCQkgICAgc2l6ZW9mKGVudi0+YnVmKSAtIGVudi0+YnVmbGVuKTsKLQlpZiAoc2wgPj0gKHNpemVvZihlbnYtPmJ1ZikgLSBlbnYtPmJ1ZmxlbikpCi0JCXJldHVybiAtRU5PTUVNOwotCWVudi0+YnVmbGVuICs9IHNsOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKG9mX2RldmljZV91ZXZlbnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9vZl9wbGF0Zm9ybS5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9vZl9wbGF0Zm9ybS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2Y2ZjQyLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvb2ZfcGxhdGZvcm0uYworKysgL2Rldi9udWxsCkBAIC0xLDIwMCArMCwwIEBACi0vKgotICogICAgQ29weXJpZ2h0IChDKSAyMDA2IEJlbmphbWluIEhlcnJlbnNjaG1pZHQsIElCTSBDb3JwLgotICoJCQkgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4KLSAqICAgIGFuZAkJIEFybmQgQmVyZ21hbm4sIElCTSBDb3JwLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqLwotCi0jdW5kZWYgREVCVUcKLQotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9vZi5oPgotI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotCi1zdHJ1Y3QgYnVzX3R5cGUgb2ZfcGxhdGZvcm1fYnVzX3R5cGUgPSB7Ci0gICAgICAgLnVldmVudAk9IG9mX2RldmljZV91ZXZlbnQsCi19OwotRVhQT1JUX1NZTUJPTChvZl9wbGF0Zm9ybV9idXNfdHlwZSk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IG9mX2J1c19kcml2ZXJfaW5pdCh2b2lkKQotewotCXJldHVybiBvZl9idXNfdHlwZV9pbml0KCZvZl9wbGF0Zm9ybV9idXNfdHlwZSwgIm9mX3BsYXRmb3JtIik7Ci19Ci1wb3N0Y29yZV9pbml0Y2FsbChvZl9idXNfZHJpdmVyX2luaXQpOwotCi1zdHJ1Y3Qgb2ZfZGV2aWNlICpvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCQkJCSAgICBjb25zdCBjaGFyICpidXNfaWQsCi0JCQkJCSAgICBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpCi17Ci0Jc3RydWN0IG9mX2RldmljZSAqZGV2OwotCi0JZGV2ID0gb2ZfZGV2aWNlX2FsbG9jKG5wLCBidXNfaWQsIHBhcmVudCk7Ci0JaWYgKCFkZXYpCi0JCXJldHVybiBOVUxMOwotCi0JZGV2LT5hcmNoZGF0YS5kbWFfbWFzayA9IDB4ZmZmZmZmZmZVTDsKLQlkZXYtPmRldi5idXMgPSAmb2ZfcGxhdGZvcm1fYnVzX3R5cGU7Ci0KLQkvKiBXZSBkbyBub3QgZmlsbCB0aGUgRE1BIG9wcyBmb3IgcGxhdGZvcm0gZGV2aWNlcyBieSBkZWZhdWx0LgotCSAqIFRoaXMgaXMgY3VycmVudGx5IHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgcGxhdGZvcm0gY29kZQotCSAqIHRvIGRvIHN1Y2gsIHBvc3NpYmx5IHVzaW5nIGEgZGV2aWNlIG5vdGlmaWVyCi0JICovCi0KLQlpZiAob2ZfZGV2aWNlX3JlZ2lzdGVyKGRldikgIT0gMCkgewotCQlvZl9kZXZpY2VfZnJlZShkZXYpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gZGV2OwotfQotRVhQT1JUX1NZTUJPTChvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKTsKLQotLyoqCi0gKiBvZl9wbGF0Zm9ybV9idXNfY3JlYXRlIC0gQ3JlYXRlIGFuIE9GIGRldmljZSBmb3IgYSBidXMgbm9kZSBhbmQgYWxsIGl0cwotICogY2hpbGRyZW4uIE9wdGlvbmFsbHkgcmVjdXJzaXZlbHkgaW5zdGFuY2lhdGUgbWF0Y2hpbmcgYnVzc2VzLgotICogQGJ1czogZGV2aWNlIG5vZGUgb2YgdGhlIGJ1cyB0byBpbnN0YW5jaWF0ZQotICogQG1hdGNoZXM6IG1hdGNoIHRhYmxlLCBOVUxMIHRvIHVzZSB0aGUgZGVmYXVsdCwgT0ZfTk9fREVFUF9QUk9CRSB0bwotICogZGlzYWxsb3cgcmVjdXJzaXZlIGNyZWF0aW9uIG9mIGNoaWxkIGJ1c3NlcwotICovCi1zdGF0aWMgaW50IG9mX3BsYXRmb3JtX2J1c19jcmVhdGUoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpidXMsCi0JCQkJICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaGVzLAotCQkJCSAgc3RydWN0IGRldmljZSAqcGFyZW50KQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7Ci0Jc3RydWN0IG9mX2RldmljZSAqZGV2OwotCWludCByYyA9IDA7Ci0KLQlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKGJ1cywgY2hpbGQpIHsKLQkJcHJfZGVidWcoIiAgIGNyZWF0ZSBjaGlsZDogJXNcbiIsIGNoaWxkLT5mdWxsX25hbWUpOwotCQlkZXYgPSBvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKGNoaWxkLCBOVUxMLCBwYXJlbnQpOwotCQlpZiAoZGV2ID09IE5VTEwpCi0JCQlyYyA9IC1FTk9NRU07Ci0JCWVsc2UgaWYgKCFvZl9tYXRjaF9ub2RlKG1hdGNoZXMsIGNoaWxkKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAocmMgPT0gMCkgewotCQkJcHJfZGVidWcoIiAgIGFuZCBzdWIgYnVzc2VzXG4iKTsKLQkJCXJjID0gb2ZfcGxhdGZvcm1fYnVzX2NyZWF0ZShjaGlsZCwgbWF0Y2hlcywgJmRldi0+ZGV2KTsKLQkJfQotCQlpZiAocmMpIHsKLQkJCW9mX25vZGVfcHV0KGNoaWxkKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHVybiByYzsKLX0KLQotCi0vKioKLSAqIG9mX3BsYXRmb3JtX2J1c19wcm9iZSAtIFByb2JlIHRoZSBkZXZpY2UtdHJlZSBmb3IgcGxhdGZvcm0gYnVzc2VzCi0gKiBAcm9vdDogcGFyZW50IG9mIHRoZSBmaXJzdCBsZXZlbCB0byBwcm9iZSBvciBOVUxMIGZvciB0aGUgcm9vdCBvZiB0aGUgdHJlZQotICogQG1hdGNoZXM6IG1hdGNoIHRhYmxlLCBOVUxMIHRvIHVzZSB0aGUgZGVmYXVsdAotICogQHBhcmVudDogcGFyZW50IHRvIGhvb2sgZGV2aWNlcyBmcm9tLCBOVUxMIGZvciB0b3BsZXZlbAotICoKLSAqIE5vdGUgdGhhdCBjaGlsZHJlbiBvZiB0aGUgcHJvdmlkZWQgcm9vdCBhcmUgbm90IGluc3RhbmNpYXRlZCBhcyBkZXZpY2VzCi0gKiB1bmxlc3MgdGhlIHNwZWNpZmllZCByb290IGl0c2VsZiBtYXRjaGVzIHRoZSBidXMgbGlzdCBhbmQgaXMgbm90IE5VTEwuCi0gKi8KLQotaW50IG9mX3BsYXRmb3JtX2J1c19wcm9iZShzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3QsCi0JCQkgIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoZXMsCi0JCQkgIHN0cnVjdCBkZXZpY2UgKnBhcmVudCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkOwotCXN0cnVjdCBvZl9kZXZpY2UgKmRldjsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKG1hdGNoZXMgPT0gTlVMTCkKLQkJbWF0Y2hlcyA9IG9mX2RlZmF1bHRfYnVzX2lkczsKLQlpZiAobWF0Y2hlcyA9PSBPRl9OT19ERUVQX1BST0JFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAocm9vdCA9PSBOVUxMKQotCQlyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKLQllbHNlCi0JCW9mX25vZGVfZ2V0KHJvb3QpOwotCi0JcHJfZGVidWcoIm9mX3BsYXRmb3JtX2J1c19wcm9iZSgpXG4iKTsKLQlwcl9kZWJ1ZygiIHN0YXJ0aW5nIGF0OiAlc1xuIiwgcm9vdC0+ZnVsbF9uYW1lKTsKLQotCS8qIERvIGEgc2VsZiBjaGVjayBvZiBidXMgdHlwZSwgaWYgdGhlcmUncyBhIG1hdGNoLCBjcmVhdGUKLQkgKiBjaGlsZHJlbgotCSAqLwotCWlmIChvZl9tYXRjaF9ub2RlKG1hdGNoZXMsIHJvb3QpKSB7Ci0JCXByX2RlYnVnKCIgcm9vdCBtYXRjaCwgY3JlYXRlIGFsbCBzdWIgZGV2aWNlc1xuIik7Ci0JCWRldiA9IG9mX3BsYXRmb3JtX2RldmljZV9jcmVhdGUocm9vdCwgTlVMTCwgcGFyZW50KTsKLQkJaWYgKGRldiA9PSBOVUxMKSB7Ci0JCQlyYyA9IC1FTk9NRU07Ci0JCQlnb3RvIGJhaWw7Ci0JCX0KLQkJcHJfZGVidWcoIiBjcmVhdGUgYWxsIHN1YiBidXNzZXNcbiIpOwotCQlyYyA9IG9mX3BsYXRmb3JtX2J1c19jcmVhdGUocm9vdCwgbWF0Y2hlcywgJmRldi0+ZGV2KTsKLQkJZ290byBiYWlsOwotCX0KLQlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKHJvb3QsIGNoaWxkKSB7Ci0JCWlmICghb2ZfbWF0Y2hfbm9kZShtYXRjaGVzLCBjaGlsZCkpCi0JCQljb250aW51ZTsKLQotCQlwcl9kZWJ1ZygiICBtYXRjaDogJXNcbiIsIGNoaWxkLT5mdWxsX25hbWUpOwotCQlkZXYgPSBvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKGNoaWxkLCBOVUxMLCBwYXJlbnQpOwotCQlpZiAoZGV2ID09IE5VTEwpCi0JCQlyYyA9IC1FTk9NRU07Ci0JCWVsc2UKLQkJCXJjID0gb2ZfcGxhdGZvcm1fYnVzX2NyZWF0ZShjaGlsZCwgbWF0Y2hlcywgJmRldi0+ZGV2KTsKLQkJaWYgKHJjKSB7Ci0JCQlvZl9ub2RlX3B1dChjaGlsZCk7Ci0JCQlicmVhazsKLQkJfQotCX0KLSBiYWlsOgotCW9mX25vZGVfcHV0KHJvb3QpOwotCXJldHVybiByYzsKLX0KLUVYUE9SVF9TWU1CT0wob2ZfcGxhdGZvcm1fYnVzX3Byb2JlKTsKLQotc3RhdGljIGludCBvZl9kZXZfbm9kZV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0JcmV0dXJuIHRvX29mX2RldmljZShkZXYpLT5kZXYub2Zfbm9kZSA9PSBkYXRhOwotfQotCi1zdHJ1Y3Qgb2ZfZGV2aWNlICpvZl9maW5kX2RldmljZV9ieV9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotCi0JZGV2ID0gYnVzX2ZpbmRfZGV2aWNlKCZvZl9wbGF0Zm9ybV9idXNfdHlwZSwKLQkJCSAgICAgIE5VTEwsIG5wLCBvZl9kZXZfbm9kZV9tYXRjaCk7Ci0JaWYgKGRldikKLQkJcmV0dXJuIHRvX29mX2RldmljZShkZXYpOwotCXJldHVybiBOVUxMOwotfQotRVhQT1JUX1NZTUJPTChvZl9maW5kX2RldmljZV9ieV9ub2RlKTsKLQotc3RhdGljIGludCBvZl9kZXZfcGhhbmRsZV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0JcGhhbmRsZSAqcGggPSBkYXRhOwotCXJldHVybiB0b19vZl9kZXZpY2UoZGV2KS0+ZGV2Lm9mX25vZGUtPnBoYW5kbGUgPT0gKnBoOwotfQotCi1zdHJ1Y3Qgb2ZfZGV2aWNlICpvZl9maW5kX2RldmljZV9ieV9waGFuZGxlKHBoYW5kbGUgcGgpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotCi0JZGV2ID0gYnVzX2ZpbmRfZGV2aWNlKCZvZl9wbGF0Zm9ybV9idXNfdHlwZSwKLQkJCSAgICAgIE5VTEwsICZwaCwgb2ZfZGV2X3BoYW5kbGVfbWF0Y2gpOwotCWlmIChkZXYpCi0JCXJldHVybiB0b19vZl9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gTlVMTDsKLX0KLUVYUE9SVF9TWU1CT0wob2ZfZmluZF9kZXZpY2VfYnlfcGhhbmRsZSk7CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDA5YmVkNDQuLmJhN2M0YjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC03Niw4ICs3NiwxMSBAQAogdm9pZCBkZWZhdWx0X2lkbGUodm9pZCkKIHsKIAlpZiAobGlrZWx5KGhsdF9jb3VudGVyKSkgewotCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKQotCQkJY3B1X3JlbGF4KCk7CisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCXN0b3BfY3JpdGljYWxfdGltaW5ncygpOworCQljcHVfcmVsYXgoKTsKKwkJc3RhcnRfY3JpdGljYWxfdGltaW5ncygpOworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJfSBlbHNlIHsKIAkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKIAkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvbS5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wcm9tLmMKaW5kZXggYTE1ZWY2ZC4uNDI3YjEzYiAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wcm9tLmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wcm9tLmMKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9sbWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpAQCAtNDksMTIgKzQ5LDEyIEBACiAKIHZvaWQgX19pbml0IGVhcmx5X2luaXRfZHRfYWRkX21lbW9yeV9hcmNoKHU2NCBiYXNlLCB1NjQgc2l6ZSkKIHsKLQlsbWJfYWRkKGJhc2UsIHNpemUpOworCW1lbWJsb2NrX2FkZChiYXNlLCBzaXplKTsKIH0KIAogdTY0IF9faW5pdCBlYXJseV9pbml0X2R0X2FsbG9jX21lbW9yeV9hcmNoKHU2NCBzaXplLCB1NjQgYWxpZ24pCiB7Ci0JcmV0dXJuIGxtYl9hbGxvYyhzaXplLCBhbGlnbik7CisJcmV0dXJuIG1lbWJsb2NrX2FsbG9jKHNpemUsIGFsaWduKTsKIH0KIAogI2lmZGVmIENPTkZJR19FQVJMWV9QUklOVEsKQEAgLTEwNCw4ICsxMDQsOCBAQAogCSAqLwogCW9mX3NjYW5fZmxhdF9kdChlYXJseV9pbml0X2R0X3NjYW5fY2hvc2VuLCBOVUxMKTsKIAotCS8qIFNjYW4gbWVtb3J5IG5vZGVzIGFuZCByZWJ1aWxkIExNQnMgKi8KLQlsbWJfaW5pdCgpOworCS8qIFNjYW4gbWVtb3J5IG5vZGVzIGFuZCByZWJ1aWxkIE1FTUJMT0NLcyAqLworCW1lbWJsb2NrX2luaXQoKTsKIAlvZl9zY2FuX2ZsYXRfZHQoZWFybHlfaW5pdF9kdF9zY2FuX3Jvb3QsIE5VTEwpOwogCW9mX3NjYW5fZmxhdF9kdChlYXJseV9pbml0X2R0X3NjYW5fbWVtb3J5LCBOVUxMKTsKIApAQCAtMTEzLDkgKzExMyw5IEBACiAJc3RybGNweShib290X2NvbW1hbmRfbGluZSwgY21kX2xpbmUsIENPTU1BTkRfTElORV9TSVpFKTsKIAlwYXJzZV9lYXJseV9wYXJhbSgpOwogCi0JbG1iX2FuYWx5emUoKTsKKwltZW1ibG9ja19hbmFseXplKCk7CiAKLQlwcl9kZWJ1ZygiUGh5cy4gbWVtOiAlbHhcbiIsICh1bnNpZ25lZCBsb25nKSBsbWJfcGh5c19tZW1fc2l6ZSgpKTsKKwlwcl9kZWJ1ZygiUGh5cy4gbWVtOiAlbHhcbiIsICh1bnNpZ25lZCBsb25nKSBtZW1ibG9ja19waHlzX21lbV9zaXplKCkpOwogCiAJcHJfZGVidWcoIiA8LSBlYXJseV9pbml0X2RldnRyZWUoKVxuIik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb21fcGFyc2UuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvbV9wYXJzZS5jCmluZGV4IGJmN2U2YzIuLmQzM2JhMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvbV9wYXJzZS5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvbV9wYXJzZS5jCkBAIC02LDIxOSArNiwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KIAotI2RlZmluZSBQUnU2NAkiJWxseCIKLQotLyogTWF4IGFkZHJlc3Mgc2l6ZSB3ZSBkZWFsIHdpdGggKi8KLSNkZWZpbmUgT0ZfTUFYX0FERFJfQ0VMTFMJNAotI2RlZmluZSBPRl9DSEVDS19DT1VOVFMobmEsIG5zKQkoKG5hKSA+IDAgJiYgKG5hKSA8PSBPRl9NQVhfQUREUl9DRUxMUyAmJiBcCi0JCQkobnMpID4gMCkKLQotc3RhdGljIHN0cnVjdCBvZl9idXMgKm9mX21hdGNoX2J1cyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTsKLXN0YXRpYyBpbnQgX19vZl9hZGRyZXNzX3RvX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LAotCQljb25zdCB1MzIgKmFkZHJwLCB1NjQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzLAotCQlzdHJ1Y3QgcmVzb3VyY2UgKnIpOwotCi0vKiBEZWJ1ZyB1dGlsaXR5ICovCi0jaWZkZWYgREVCVUcKLXN0YXRpYyB2b2lkIG9mX2R1bXBfYWRkcihjb25zdCBjaGFyICpzLCBjb25zdCB1MzIgKmFkZHIsIGludCBuYSkKLXsKLQlwcmludGsoS0VSTl9JTkZPICIlcyIsIHMpOwotCXdoaWxlIChuYS0tKQotCQlwcmludGsoS0VSTl9JTkZPICIgJTA4eCIsICooYWRkcisrKSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBvZl9kdW1wX2FkZHIoY29uc3QgY2hhciAqcywgY29uc3QgdTMyICphZGRyLCBpbnQgbmEpIHsgfQotI2VuZGlmCi0KLS8qIENhbGxiYWNrcyBmb3IgYnVzIHNwZWNpZmljIHRyYW5zbGF0b3JzICovCi1zdHJ1Y3Qgb2ZfYnVzIHsKLQljb25zdCBjaGFyCSpuYW1lOwotCWNvbnN0IGNoYXIJKmFkZHJlc3NlczsKLQlpbnQJCSgqbWF0Y2gpKHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50KTsKLQl2b2lkCQkoKmNvdW50X2NlbGxzKShzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLAotCQkJCQlpbnQgKmFkZHJjLCBpbnQgKnNpemVjKTsKLQl1NjQJCSgqbWFwKSh1MzIgKmFkZHIsIGNvbnN0IHUzMiAqcmFuZ2UsCi0JCQkJaW50IG5hLCBpbnQgbnMsIGludCBwbmEpOwotCWludAkJKCp0cmFuc2xhdGUpKHUzMiAqYWRkciwgdTY0IG9mZnNldCwgaW50IG5hKTsKLQl1bnNpZ25lZCBpbnQJKCpnZXRfZmxhZ3MpKGNvbnN0IHUzMiAqYWRkcik7Ci19OwotCi0vKgotICogRGVmYXVsdCB0cmFuc2xhdG9yIChnZW5lcmljIGJ1cykKLSAqLwotCi1zdGF0aWMgdm9pZCBvZl9idXNfZGVmYXVsdF9jb3VudF9jZWxscyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwKLQkJCQkJaW50ICphZGRyYywgaW50ICpzaXplYykKLXsKLQlpZiAoYWRkcmMpCi0JCSphZGRyYyA9IG9mX25fYWRkcl9jZWxscyhkZXYpOwotCWlmIChzaXplYykKLQkJKnNpemVjID0gb2Zfbl9zaXplX2NlbGxzKGRldik7Ci19Ci0KLXN0YXRpYyB1NjQgb2ZfYnVzX2RlZmF1bHRfbWFwKHUzMiAqYWRkciwgY29uc3QgdTMyICpyYW5nZSwKLQkJaW50IG5hLCBpbnQgbnMsIGludCBwbmEpCi17Ci0JdTY0IGNwLCBzLCBkYTsKLQotCWNwID0gb2ZfcmVhZF9udW1iZXIocmFuZ2UsIG5hKTsKLQlzICA9IG9mX3JlYWRfbnVtYmVyKHJhbmdlICsgbmEgKyBwbmEsIG5zKTsKLQlkYSA9IG9mX3JlYWRfbnVtYmVyKGFkZHIsIG5hKTsKLQotCXByX2RlYnVnKCJPRjogZGVmYXVsdCBtYXAsIGNwPSJQUnU2NCIsIHM9IlBSdTY0IiwgZGE9IlBSdTY0IlxuIiwKLQkJY3AsIHMsIGRhKTsKLQotCWlmIChkYSA8IGNwIHx8IGRhID49IChjcCArIHMpKQotCQlyZXR1cm4gT0ZfQkFEX0FERFI7Ci0JcmV0dXJuIGRhIC0gY3A7Ci19Ci0KLXN0YXRpYyBpbnQgb2ZfYnVzX2RlZmF1bHRfdHJhbnNsYXRlKHUzMiAqYWRkciwgdTY0IG9mZnNldCwgaW50IG5hKQotewotCXU2NCBhID0gb2ZfcmVhZF9udW1iZXIoYWRkciwgbmEpOwotCW1lbXNldChhZGRyLCAwLCBuYSAqIDQpOwotCWEgKz0gb2Zmc2V0OwotCWlmIChuYSA+IDEpCi0JCWFkZHJbbmEgLSAyXSA9IGEgPj4gMzI7Ci0JYWRkcltuYSAtIDFdID0gYSAmIDB4ZmZmZmZmZmZ1OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgb2ZfYnVzX2RlZmF1bHRfZ2V0X2ZsYWdzKGNvbnN0IHUzMiAqYWRkcikKLXsKLQlyZXR1cm4gSU9SRVNPVVJDRV9NRU07Ci19Ci0KICNpZmRlZiBDT05GSUdfUENJCi0vKgotICogUENJIGJ1cyBzcGVjaWZpYyB0cmFuc2xhdG9yCi0gKi8KLQotc3RhdGljIGludCBvZl9idXNfcGNpX21hdGNoKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCi17Ci0JLyogInZjaSIgaXMgZm9yIHRoZSAvY2hhb3MgYnJpZGdlIG9uIDFzdC1nZW4gUENJIHBvd2VybWFjcyAqLwotCXJldHVybiAhc3RyY21wKG5wLT50eXBlLCAicGNpIikgfHwgIXN0cmNtcChucC0+dHlwZSwgInZjaSIpOwotfQotCi1zdGF0aWMgdm9pZCBvZl9idXNfcGNpX2NvdW50X2NlbGxzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCQkJaW50ICphZGRyYywgaW50ICpzaXplYykKLXsKLQlpZiAoYWRkcmMpCi0JCSphZGRyYyA9IDM7Ci0JaWYgKHNpemVjKQotCQkqc2l6ZWMgPSAyOwotfQotCi1zdGF0aWMgdTY0IG9mX2J1c19wY2lfbWFwKHUzMiAqYWRkciwgY29uc3QgdTMyICpyYW5nZSwgaW50IG5hLCBpbnQgbnMsIGludCBwbmEpCi17Ci0JdTY0IGNwLCBzLCBkYTsKLQotCS8qIENoZWNrIGFkZHJlc3MgdHlwZSBtYXRjaCAqLwotCWlmICgoYWRkclswXSBeIHJhbmdlWzBdKSAmIDB4MDMwMDAwMDApCi0JCXJldHVybiBPRl9CQURfQUREUjsKLQotCS8qIFJlYWQgYWRkcmVzcyB2YWx1ZXMsIHNraXBwaW5nIGhpZ2ggY2VsbCAqLwotCWNwID0gb2ZfcmVhZF9udW1iZXIocmFuZ2UgKyAxLCBuYSAtIDEpOwotCXMgID0gb2ZfcmVhZF9udW1iZXIocmFuZ2UgKyBuYSArIHBuYSwgbnMpOwotCWRhID0gb2ZfcmVhZF9udW1iZXIoYWRkciArIDEsIG5hIC0gMSk7Ci0KLQlwcl9kZWJ1ZygiT0Y6IFBDSSBtYXAsIGNwPSJQUnU2NCIsIHM9IlBSdTY0IiwgZGE9IlBSdTY0IlxuIiwgY3AsIHMsIGRhKTsKLQotCWlmIChkYSA8IGNwIHx8IGRhID49IChjcCArIHMpKQotCQlyZXR1cm4gT0ZfQkFEX0FERFI7Ci0JcmV0dXJuIGRhIC0gY3A7Ci19Ci0KLXN0YXRpYyBpbnQgb2ZfYnVzX3BjaV90cmFuc2xhdGUodTMyICphZGRyLCB1NjQgb2Zmc2V0LCBpbnQgbmEpCi17Ci0JcmV0dXJuIG9mX2J1c19kZWZhdWx0X3RyYW5zbGF0ZShhZGRyICsgMSwgb2Zmc2V0LCBuYSAtIDEpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IG9mX2J1c19wY2lfZ2V0X2ZsYWdzKGNvbnN0IHUzMiAqYWRkcikKLXsKLQl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOwotCXUzMiB3ID0gYWRkclswXTsKLQotCXN3aXRjaCAoKHcgPj4gMjQpICYgMHgwMykgewotCWNhc2UgMHgwMToKLQkJZmxhZ3MgfD0gSU9SRVNPVVJDRV9JTzsKLQkJYnJlYWs7Ci0JY2FzZSAweDAyOiAvKiAzMiBiaXRzICovCi0JY2FzZSAweDAzOiAvKiA2NCBiaXRzICovCi0JCWZsYWdzIHw9IElPUkVTT1VSQ0VfTUVNOwotCQlicmVhazsKLQl9Ci0JaWYgKHcgJiAweDQwMDAwMDAwKQotCQlmbGFncyB8PSBJT1JFU09VUkNFX1BSRUZFVENIOwotCXJldHVybiBmbGFnczsKLX0KLQotY29uc3QgdTMyICpvZl9nZXRfcGNpX2FkZHJlc3Moc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGludCBiYXJfbm8sIHU2NCAqc2l6ZSwKLQkJCXVuc2lnbmVkIGludCAqZmxhZ3MpCi17Ci0JY29uc3QgdTMyICpwcm9wOwotCXVuc2lnbmVkIGludCBwc2l6ZTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudDsKLQlzdHJ1Y3Qgb2ZfYnVzICpidXM7Ci0JaW50IG9uZXNpemUsIGksIG5hLCBuczsKLQotCS8qIEdldCBwYXJlbnQgJiBtYXRjaCBidXMgdHlwZSAqLwotCXBhcmVudCA9IG9mX2dldF9wYXJlbnQoZGV2KTsKLQlpZiAocGFyZW50ID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCWJ1cyA9IG9mX21hdGNoX2J1cyhwYXJlbnQpOwotCWlmIChzdHJjbXAoYnVzLT5uYW1lLCAicGNpIikpIHsKLQkJb2Zfbm9kZV9wdXQocGFyZW50KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWJ1cy0+Y291bnRfY2VsbHMoZGV2LCAmbmEsICZucyk7Ci0Jb2Zfbm9kZV9wdXQocGFyZW50KTsKLQlpZiAoIU9GX0NIRUNLX0NPVU5UUyhuYSwgbnMpKQotCQlyZXR1cm4gTlVMTDsKLQotCS8qIEdldCAicmVnIiBvciAiYXNzaWduZWQtYWRkcmVzc2VzIiBwcm9wZXJ0eSAqLwotCXByb3AgPSBvZl9nZXRfcHJvcGVydHkoZGV2LCBidXMtPmFkZHJlc3NlcywgJnBzaXplKTsKLQlpZiAocHJvcCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQlwc2l6ZSAvPSA0OwotCi0Jb25lc2l6ZSA9IG5hICsgbnM7Ci0JZm9yIChpID0gMDsgcHNpemUgPj0gb25lc2l6ZTsgcHNpemUgLT0gb25lc2l6ZSwgcHJvcCArPSBvbmVzaXplLCBpKyspCi0JCWlmICgocHJvcFswXSAmIDB4ZmYpID09ICgoYmFyX25vICogNCkgKyBQQ0lfQkFTRV9BRERSRVNTXzApKSB7Ci0JCQlpZiAoc2l6ZSkKLQkJCQkqc2l6ZSA9IG9mX3JlYWRfbnVtYmVyKHByb3AgKyBuYSwgbnMpOwotCQkJaWYgKGZsYWdzKQotCQkJCSpmbGFncyA9IGJ1cy0+Z2V0X2ZsYWdzKHByb3ApOwotCQkJcmV0dXJuIHByb3A7Ci0JCX0KLQlyZXR1cm4gTlVMTDsKLX0KLUVYUE9SVF9TWU1CT0wob2ZfZ2V0X3BjaV9hZGRyZXNzKTsKLQotaW50IG9mX3BjaV9hZGRyZXNzX3RvX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCBpbnQgYmFyLAotCQkJCXN0cnVjdCByZXNvdXJjZSAqcikKLXsKLQljb25zdCB1MzIJKmFkZHJwOwotCXU2NAkJc2l6ZTsKLQl1bnNpZ25lZCBpbnQJZmxhZ3M7Ci0KLQlhZGRycCA9IG9mX2dldF9wY2lfYWRkcmVzcyhkZXYsIGJhciwgJnNpemUsICZmbGFncyk7Ci0JaWYgKGFkZHJwID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBfX29mX2FkZHJlc3NfdG9fcmVzb3VyY2UoZGV2LCBhZGRycCwgc2l6ZSwgZmxhZ3MsIHIpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwob2ZfcGNpX2FkZHJlc3NfdG9fcmVzb3VyY2UpOwotCi1zdGF0aWMgdTggb2ZfaXJxX3BjaV9zd2l6emxlKHU4IHNsb3QsIHU4IHBpbikKLXsKLQlyZXR1cm4gKCgocGluIC0gMSkgKyBzbG90KSAlIDQpICsgMTsKLX0KLQogaW50IG9mX2lycV9tYXBfcGNpKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3Qgb2ZfaXJxICpvdXRfaXJxKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sICpwcG5vZGU7CkBAIC0yOTMsMzMxICs4NSw2IEBACiBFWFBPUlRfU1lNQk9MX0dQTChvZl9pcnFfbWFwX3BjaSk7CiAjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCi0vKgotICogSVNBIGJ1cyBzcGVjaWZpYyB0cmFuc2xhdG9yCi0gKi8KLQotc3RhdGljIGludCBvZl9idXNfaXNhX21hdGNoKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCi17Ci0JcmV0dXJuICFzdHJjbXAobnAtPm5hbWUsICJpc2EiKTsKLX0KLQotc3RhdGljIHZvaWQgb2ZfYnVzX2lzYV9jb3VudF9jZWxscyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLAotCQkJCWludCAqYWRkcmMsIGludCAqc2l6ZWMpCi17Ci0JaWYgKGFkZHJjKQotCQkqYWRkcmMgPSAyOwotCWlmIChzaXplYykKLQkJKnNpemVjID0gMTsKLX0KLQotc3RhdGljIHU2NCBvZl9idXNfaXNhX21hcCh1MzIgKmFkZHIsIGNvbnN0IHUzMiAqcmFuZ2UsIGludCBuYSwgaW50IG5zLCBpbnQgcG5hKQotewotCXU2NCBjcCwgcywgZGE7Ci0KLQkvKiBDaGVjayBhZGRyZXNzIHR5cGUgbWF0Y2ggKi8KLQlpZiAoKGFkZHJbMF0gXiByYW5nZVswXSkgJiAweDAwMDAwMDAxKQotCQlyZXR1cm4gT0ZfQkFEX0FERFI7Ci0KLQkvKiBSZWFkIGFkZHJlc3MgdmFsdWVzLCBza2lwcGluZyBoaWdoIGNlbGwgKi8KLQljcCA9IG9mX3JlYWRfbnVtYmVyKHJhbmdlICsgMSwgbmEgLSAxKTsKLQlzICA9IG9mX3JlYWRfbnVtYmVyKHJhbmdlICsgbmEgKyBwbmEsIG5zKTsKLQlkYSA9IG9mX3JlYWRfbnVtYmVyKGFkZHIgKyAxLCBuYSAtIDEpOwotCi0JcHJfZGVidWcoIk9GOiBJU0EgbWFwLCBjcD0iUFJ1NjQiLCBzPSJQUnU2NCIsIGRhPSJQUnU2NCJcbiIsIGNwLCBzLCBkYSk7Ci0KLQlpZiAoZGEgPCBjcCB8fCBkYSA+PSAoY3AgKyBzKSkKLQkJcmV0dXJuIE9GX0JBRF9BRERSOwotCXJldHVybiBkYSAtIGNwOwotfQotCi1zdGF0aWMgaW50IG9mX2J1c19pc2FfdHJhbnNsYXRlKHUzMiAqYWRkciwgdTY0IG9mZnNldCwgaW50IG5hKQotewotCXJldHVybiBvZl9idXNfZGVmYXVsdF90cmFuc2xhdGUoYWRkciArIDEsIG9mZnNldCwgbmEgLSAxKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBvZl9idXNfaXNhX2dldF9mbGFncyhjb25zdCB1MzIgKmFkZHIpCi17Ci0JdW5zaWduZWQgaW50IGZsYWdzID0gMDsKLQl1MzIgdyA9IGFkZHJbMF07Ci0KLQlpZiAodyAmIDEpCi0JCWZsYWdzIHw9IElPUkVTT1VSQ0VfSU87Ci0JZWxzZQotCQlmbGFncyB8PSBJT1JFU09VUkNFX01FTTsKLQlyZXR1cm4gZmxhZ3M7Ci19Ci0KLS8qCi0gKiBBcnJheSBvZiBidXMgc3BlY2lmaWMgdHJhbnNsYXRvcnMKLSAqLwotCi1zdGF0aWMgc3RydWN0IG9mX2J1cyBvZl9idXNzZXNbXSA9IHsKLSNpZmRlZiBDT05GSUdfUENJCi0JLyogUENJICovCi0JewotCQkubmFtZSA9ICJwY2kiLAotCQkuYWRkcmVzc2VzID0gImFzc2lnbmVkLWFkZHJlc3NlcyIsCi0JCS5tYXRjaCA9IG9mX2J1c19wY2lfbWF0Y2gsCi0JCS5jb3VudF9jZWxscyA9IG9mX2J1c19wY2lfY291bnRfY2VsbHMsCi0JCS5tYXAgPSBvZl9idXNfcGNpX21hcCwKLQkJLnRyYW5zbGF0ZSA9IG9mX2J1c19wY2lfdHJhbnNsYXRlLAotCQkuZ2V0X2ZsYWdzID0gb2ZfYnVzX3BjaV9nZXRfZmxhZ3MsCi0JfSwKLSNlbmRpZiAvKiBDT05GSUdfUENJICovCi0JLyogSVNBICovCi0JewotCQkubmFtZSA9ICJpc2EiLAotCQkuYWRkcmVzc2VzID0gInJlZyIsCi0JCS5tYXRjaCA9IG9mX2J1c19pc2FfbWF0Y2gsCi0JCS5jb3VudF9jZWxscyA9IG9mX2J1c19pc2FfY291bnRfY2VsbHMsCi0JCS5tYXAgPSBvZl9idXNfaXNhX21hcCwKLQkJLnRyYW5zbGF0ZSA9IG9mX2J1c19pc2FfdHJhbnNsYXRlLAotCQkuZ2V0X2ZsYWdzID0gb2ZfYnVzX2lzYV9nZXRfZmxhZ3MsCi0JfSwKLQkvKiBEZWZhdWx0ICovCi0JewotCQkubmFtZSA9ICJkZWZhdWx0IiwKLQkJLmFkZHJlc3NlcyA9ICJyZWciLAotCQkubWF0Y2ggPSBOVUxMLAotCQkuY291bnRfY2VsbHMgPSBvZl9idXNfZGVmYXVsdF9jb3VudF9jZWxscywKLQkJLm1hcCA9IG9mX2J1c19kZWZhdWx0X21hcCwKLQkJLnRyYW5zbGF0ZSA9IG9mX2J1c19kZWZhdWx0X3RyYW5zbGF0ZSwKLQkJLmdldF9mbGFncyA9IG9mX2J1c19kZWZhdWx0X2dldF9mbGFncywKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBvZl9idXMgKm9mX21hdGNoX2J1cyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob2ZfYnVzc2VzKTsgaSsrKQotCQlpZiAoIW9mX2J1c3Nlc1tpXS5tYXRjaCB8fCBvZl9idXNzZXNbaV0ubWF0Y2gobnApKQotCQkJcmV0dXJuICZvZl9idXNzZXNbaV07Ci0JQlVHKCk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbnQgb2ZfdHJhbnNsYXRlX29uZShzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCwgc3RydWN0IG9mX2J1cyAqYnVzLAotCQkJc3RydWN0IG9mX2J1cyAqcGJ1cywgdTMyICphZGRyLAotCQkJaW50IG5hLCBpbnQgbnMsIGludCBwbmEpCi17Ci0JY29uc3QgdTMyICpyYW5nZXM7Ci0JdW5zaWduZWQgaW50IHJsZW47Ci0JaW50IHJvbmU7Ci0JdTY0IG9mZnNldCA9IE9GX0JBRF9BRERSOwotCi0JLyogTm9ybWFsbHksIGFuIGFic2VuY2Ugb2YgYSAicmFuZ2VzIiBwcm9wZXJ0eSBtZWFucyB3ZSBhcmUKLQkgKiBjcm9zc2luZyBhIG5vbi10cmFuc2xhdGFibGUgYm91bmRhcnksIGFuZCB0aHVzIHRoZSBhZGRyZXNzZXMKLQkgKiBiZWxvdyB0aGUgY3VycmVudCBub3QgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBDUFUgcGh5c2ljYWwgb25lcy4KLQkgKiBVbmZvcnR1bmF0ZWx5LCB3aGlsZSB0aGlzIGlzIHZlcnkgY2xlYXIgaW4gdGhlIHNwZWMsIGl0J3Mgbm90Ci0JICogd2hhdCBBcHBsZSB1bmRlcnN0b29kLCBhbmQgdGhleSBkbyBoYXZlIHRoaW5ncyBsaWtlIC91bmktbiBvcgotCSAqIC9odCBub2RlcyB3aXRoIG5vICJyYW5nZXMiIHByb3BlcnR5IGFuZCBhIGxvdCBvZiBwZXJmZWN0bHkKLQkgKiB1c2VhYmxlIG1hcHBlZCBkZXZpY2VzIGJlbG93IHRoZW0uIFRodXMgd2UgdHJlYXQgdGhlIGFic2VuY2Ugb2YKLQkgKiAicmFuZ2VzIiBhcyBlcXVpdmFsZW50IHRvIGFuIGVtcHR5ICJyYW5nZXMiIHByb3BlcnR5IHdoaWNoIG1lYW5zCi0JICogYSAxOjEgdHJhbnNsYXRpb24gYXQgdGhhdCBsZXZlbC4gSXQncyB1cCB0byB0aGUgY2FsbGVyIG5vdCB0byB0cnkKLQkgKiB0byB0cmFuc2xhdGUgYWRkcmVzc2VzIHRoYXQgYXJlbid0IHN1cHBvc2VkIHRvIGJlIHRyYW5zbGF0ZWQgaW4KLQkgKiB0aGUgZmlyc3QgcGxhY2UuIC0tQmVuSC4KLQkgKi8KLQlyYW5nZXMgPSBvZl9nZXRfcHJvcGVydHkocGFyZW50LCAicmFuZ2VzIiwgKGludCAqKSAmcmxlbik7Ci0JaWYgKHJhbmdlcyA9PSBOVUxMIHx8IHJsZW4gPT0gMCkgewotCQlvZmZzZXQgPSBvZl9yZWFkX251bWJlcihhZGRyLCBuYSk7Ci0JCW1lbXNldChhZGRyLCAwLCBwbmEgKiA0KTsKLQkJcHJfZGVidWcoIk9GOiBubyByYW5nZXMsIDE6MSB0cmFuc2xhdGlvblxuIik7Ci0JCWdvdG8gZmluaXNoOwotCX0KLQotCXByX2RlYnVnKCJPRjogd2Fsa2luZyByYW5nZXMuLi5cbiIpOwotCi0JLyogTm93IHdhbGsgdGhyb3VnaCB0aGUgcmFuZ2VzICovCi0JcmxlbiAvPSA0OwotCXJvbmUgPSBuYSArIHBuYSArIG5zOwotCWZvciAoOyBybGVuID49IHJvbmU7IHJsZW4gLT0gcm9uZSwgcmFuZ2VzICs9IHJvbmUpIHsKLQkJb2Zmc2V0ID0gYnVzLT5tYXAoYWRkciwgcmFuZ2VzLCBuYSwgbnMsIHBuYSk7Ci0JCWlmIChvZmZzZXQgIT0gT0ZfQkFEX0FERFIpCi0JCQlicmVhazsKLQl9Ci0JaWYgKG9mZnNldCA9PSBPRl9CQURfQUREUikgewotCQlwcl9kZWJ1ZygiT0Y6IG5vdCBmb3VuZCAhXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCW1lbWNweShhZGRyLCByYW5nZXMgKyBuYSwgNCAqIHBuYSk7Ci0KLSBmaW5pc2g6Ci0Jb2ZfZHVtcF9hZGRyKCJPRjogcGFyZW50IHRyYW5zbGF0aW9uIGZvcjoiLCBhZGRyLCBwbmEpOwotCXByX2RlYnVnKCJPRjogd2l0aCBvZmZzZXQ6ICJQUnU2NCJcbiIsIG9mZnNldCk7Ci0KLQkvKiBUcmFuc2xhdGUgaXQgaW50byBwYXJlbnQgYnVzIHNwYWNlICovCi0JcmV0dXJuIHBidXMtPnRyYW5zbGF0ZShhZGRyLCBvZmZzZXQsIHBuYSk7Ci19Ci0KLS8qCi0gKiBUcmFuc2xhdGUgYW4gYWRkcmVzcyBmcm9tIHRoZSBkZXZpY2UtdHJlZSBpbnRvIGEgQ1BVIHBoeXNpY2FsIGFkZHJlc3MsCi0gKiB0aGlzIHdhbGtzIHVwIHRoZSB0cmVlIGFuZCBhcHBsaWVzIHRoZSB2YXJpb3VzIGJ1cyBtYXBwaW5ncyBvbiB0aGUKLSAqIHdheS4KLSAqCi0gKiBOb3RlOiBXZSBjb25zaWRlciB0aGF0IGNyb3NzaW5nIGFueSBsZXZlbCB3aXRoICNzaXplLWNlbGxzID09IDAgdG8gbWVhbgotICogdGhhdCB0cmFuc2xhdGlvbiBpcyBpbXBvc3NpYmxlICh0aGF0IGlzIHdlIGFyZSBub3QgZGVhbGluZyB3aXRoIGEgdmFsdWUKLSAqIHRoYXQgY2FuIGJlIG1hcHBlZCB0byBhIGNwdSBwaHlzaWNhbCBhZGRyZXNzKS4gVGhpcyBpcyBub3QgcmVhbGx5IHNwZWNpZmllZAotICogdGhhdCB3YXksIGJ1dCB0aGlzIGlzIHRyYWRpdGlvbmFsbHkgdGhlIHdheSBJQk0gYXQgbGVhc3QgZG8gdGhpbmdzCi0gKi8KLXU2NCBvZl90cmFuc2xhdGVfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgY29uc3QgdTMyICppbl9hZGRyKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50ID0gTlVMTDsKLQlzdHJ1Y3Qgb2ZfYnVzICpidXMsICpwYnVzOwotCXUzMiBhZGRyW09GX01BWF9BRERSX0NFTExTXTsKLQlpbnQgbmEsIG5zLCBwbmEsIHBuczsKLQl1NjQgcmVzdWx0ID0gT0ZfQkFEX0FERFI7Ci0KLQlwcl9kZWJ1ZygiT0Y6ICoqIHRyYW5zbGF0aW9uIGZvciBkZXZpY2UgJXMgKipcbiIsIGRldi0+ZnVsbF9uYW1lKTsKLQotCS8qIEluY3JlYXNlIHJlZmNvdW50IGF0IGN1cnJlbnQgbGV2ZWwgKi8KLQlvZl9ub2RlX2dldChkZXYpOwotCi0JLyogR2V0IHBhcmVudCAmIG1hdGNoIGJ1cyB0eXBlICovCi0JcGFyZW50ID0gb2ZfZ2V0X3BhcmVudChkZXYpOwotCWlmIChwYXJlbnQgPT0gTlVMTCkKLQkJZ290byBiYWlsOwotCWJ1cyA9IG9mX21hdGNoX2J1cyhwYXJlbnQpOwotCi0JLyogQ291bmQgYWRkcmVzcyBjZWxscyAmIGNvcHkgYWRkcmVzcyBsb2NhbGx5ICovCi0JYnVzLT5jb3VudF9jZWxscyhkZXYsICZuYSwgJm5zKTsKLQlpZiAoIU9GX0NIRUNLX0NPVU5UUyhuYSwgbnMpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicHJvbV9wYXJzZTogQmFkIGNlbGwgY291bnQgZm9yICVzXG4iLAotCQkJZGV2LT5mdWxsX25hbWUpOwotCQlnb3RvIGJhaWw7Ci0JfQotCW1lbWNweShhZGRyLCBpbl9hZGRyLCBuYSAqIDQpOwotCi0JcHJfZGVidWcoIk9GOiBidXMgaXMgJXMgKG5hPSVkLCBucz0lZCkgb24gJXNcbiIsCi0JCWJ1cy0+bmFtZSwgbmEsIG5zLCBwYXJlbnQtPmZ1bGxfbmFtZSk7Ci0Jb2ZfZHVtcF9hZGRyKCJPRjogdHJhbnNsYXRpbmcgYWRkcmVzczoiLCBhZGRyLCBuYSk7Ci0KLQkvKiBUcmFuc2xhdGUgKi8KLQlmb3IgKDs7KSB7Ci0JCS8qIFN3aXRjaCB0byBwYXJlbnQgYnVzICovCi0JCW9mX25vZGVfcHV0KGRldik7Ci0JCWRldiA9IHBhcmVudDsKLQkJcGFyZW50ID0gb2ZfZ2V0X3BhcmVudChkZXYpOwotCi0JCS8qIElmIHJvb3QsIHdlIGhhdmUgZmluaXNoZWQgKi8KLQkJaWYgKHBhcmVudCA9PSBOVUxMKSB7Ci0JCQlwcl9kZWJ1ZygiT0Y6IHJlYWNoZWQgcm9vdCBub2RlXG4iKTsKLQkJCXJlc3VsdCA9IG9mX3JlYWRfbnVtYmVyKGFkZHIsIG5hKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogR2V0IG5ldyBwYXJlbnQgYnVzIGFuZCBjb3VudHMgKi8KLQkJcGJ1cyA9IG9mX21hdGNoX2J1cyhwYXJlbnQpOwotCQlwYnVzLT5jb3VudF9jZWxscyhkZXYsICZwbmEsICZwbnMpOwotCQlpZiAoIU9GX0NIRUNLX0NPVU5UUyhwbmEsIHBucykpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAicHJvbV9wYXJzZTogQmFkIGNlbGwgY291bnQgZm9yICVzXG4iLAotCQkJCWRldi0+ZnVsbF9uYW1lKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcHJfZGVidWcoIk9GOiBwYXJlbnQgYnVzIGlzICVzIChuYT0lZCwgbnM9JWQpIG9uICVzXG4iLAotCQkJcGJ1cy0+bmFtZSwgcG5hLCBwbnMsIHBhcmVudC0+ZnVsbF9uYW1lKTsKLQotCQkvKiBBcHBseSBidXMgdHJhbnNsYXRpb24gKi8KLQkJaWYgKG9mX3RyYW5zbGF0ZV9vbmUoZGV2LCBidXMsIHBidXMsIGFkZHIsIG5hLCBucywgcG5hKSkKLQkJCWJyZWFrOwotCi0JCS8qIENvbXBsZXRlIHRoZSBtb3ZlIHVwIG9uZSBsZXZlbCAqLwotCQluYSA9IHBuYTsKLQkJbnMgPSBwbnM7Ci0JCWJ1cyA9IHBidXM7Ci0KLQkJb2ZfZHVtcF9hZGRyKCJPRjogb25lIGxldmVsIHRyYW5zbGF0aW9uOiIsIGFkZHIsIG5hKTsKLQl9Ci0gYmFpbDoKLQlvZl9ub2RlX3B1dChwYXJlbnQpOwotCW9mX25vZGVfcHV0KGRldik7Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotRVhQT1JUX1NZTUJPTChvZl90cmFuc2xhdGVfYWRkcmVzcyk7Ci0KLWNvbnN0IHUzMiAqb2ZfZ2V0X2FkZHJlc3Moc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGludCBpbmRleCwgdTY0ICpzaXplLAotCQkJdW5zaWduZWQgaW50ICpmbGFncykKLXsKLQljb25zdCB1MzIgKnByb3A7Ci0JdW5zaWduZWQgaW50IHBzaXplOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50OwotCXN0cnVjdCBvZl9idXMgKmJ1czsKLQlpbnQgb25lc2l6ZSwgaSwgbmEsIG5zOwotCi0JLyogR2V0IHBhcmVudCAmIG1hdGNoIGJ1cyB0eXBlICovCi0JcGFyZW50ID0gb2ZfZ2V0X3BhcmVudChkZXYpOwotCWlmIChwYXJlbnQgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0JYnVzID0gb2ZfbWF0Y2hfYnVzKHBhcmVudCk7Ci0JYnVzLT5jb3VudF9jZWxscyhkZXYsICZuYSwgJm5zKTsKLQlvZl9ub2RlX3B1dChwYXJlbnQpOwotCWlmICghT0ZfQ0hFQ0tfQ09VTlRTKG5hLCBucykpCi0JCXJldHVybiBOVUxMOwotCi0JLyogR2V0ICJyZWciIG9yICJhc3NpZ25lZC1hZGRyZXNzZXMiIHByb3BlcnR5ICovCi0JcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShkZXYsIGJ1cy0+YWRkcmVzc2VzLCAoaW50ICopICZwc2l6ZSk7Ci0JaWYgKHByb3AgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0JcHNpemUgLz0gNDsKLQotCW9uZXNpemUgPSBuYSArIG5zOwotCWZvciAoaSA9IDA7IHBzaXplID49IG9uZXNpemU7IHBzaXplIC09IG9uZXNpemUsIHByb3AgKz0gb25lc2l6ZSwgaSsrKQotCQlpZiAoaSA9PSBpbmRleCkgewotCQkJaWYgKHNpemUpCi0JCQkJKnNpemUgPSBvZl9yZWFkX251bWJlcihwcm9wICsgbmEsIG5zKTsKLQkJCWlmIChmbGFncykKLQkJCQkqZmxhZ3MgPSBidXMtPmdldF9mbGFncyhwcm9wKTsKLQkJCXJldHVybiBwcm9wOwotCQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci1FWFBPUlRfU1lNQk9MKG9mX2dldF9hZGRyZXNzKTsKLQotc3RhdGljIGludCBfX29mX2FkZHJlc3NfdG9fcmVzb3VyY2Uoc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGNvbnN0IHUzMiAqYWRkcnAsCi0JCQkJdTY0IHNpemUsIHVuc2lnbmVkIGludCBmbGFncywKLQkJCQlzdHJ1Y3QgcmVzb3VyY2UgKnIpCi17Ci0JdTY0IHRhZGRyOwotCi0JaWYgKChmbGFncyAmIChJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0pKSA9PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQl0YWRkciA9IG9mX3RyYW5zbGF0ZV9hZGRyZXNzKGRldiwgYWRkcnApOwotCWlmICh0YWRkciA9PSBPRl9CQURfQUREUikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JbWVtc2V0KHIsIDAsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpKTsKLQlpZiAoZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7Ci0JCXVuc2lnbmVkIGxvbmcgcG9ydDsKLQkJcG9ydCA9IC0xOyAvKiBwY2lfYWRkcmVzc190b19waW8odGFkZHIpOyAqLwotCQlpZiAocG9ydCA9PSAodW5zaWduZWQgbG9uZyktMSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlyLT5zdGFydCA9IHBvcnQ7Ci0JCXItPmVuZCA9IHBvcnQgKyBzaXplIC0gMTsKLQl9IGVsc2UgewotCQlyLT5zdGFydCA9IHRhZGRyOwotCQlyLT5lbmQgPSB0YWRkciArIHNpemUgLSAxOwotCX0KLQlyLT5mbGFncyA9IGZsYWdzOwotCXItPm5hbWUgPSBkZXYtPm5hbWU7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCBpbnQgaW5kZXgsCi0JCQlzdHJ1Y3QgcmVzb3VyY2UgKnIpCi17Ci0JY29uc3QgdTMyCSphZGRycDsKLQl1NjQJCXNpemU7Ci0JdW5zaWduZWQgaW50CWZsYWdzOwotCi0JYWRkcnAgPSBvZl9nZXRfYWRkcmVzcyhkZXYsIGluZGV4LCAmc2l6ZSwgJmZsYWdzKTsKLQlpZiAoYWRkcnAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIF9fb2ZfYWRkcmVzc190b19yZXNvdXJjZShkZXYsIGFkZHJwLCBzaXplLCBmbGFncywgcik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKTsKLQogdm9pZCBvZl9wYXJzZV9kbWFfd2luZG93KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIGNvbnN0IHZvaWQgKmRtYV93aW5kb3dfcHJvcCwKIAkJdW5zaWduZWQgbG9uZyAqYnVzbm8sIHVuc2lnbmVkIGxvbmcgKnBoeXMsIHVuc2lnbmVkIGxvbmcgKnNpemUpCiB7CkBAIC02NDQsMzA4ICsxMTEsNiBAQAogCSpzaXplID0gb2ZfcmVhZF9udW1iZXIoZG1hX3dpbmRvdywgY2VsbHMpOwogfQogCi0vKgotICogSW50ZXJydXB0IHJlbWFwcGVyCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGludCBvZl9pcnFfd29ya2Fyb3VuZHM7Ci1zdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpvZl9pcnFfZGZsdF9waWM7Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2lycV9maW5kX3BhcmVudChzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcDsKLQljb25zdCBwaGFuZGxlICpwYXJwOwotCi0JaWYgKCFvZl9ub2RlX2dldChjaGlsZCkpCi0JCXJldHVybiBOVUxMOwotCi0JZG8gewotCQlwYXJwID0gb2ZfZ2V0X3Byb3BlcnR5KGNoaWxkLCAiaW50ZXJydXB0LXBhcmVudCIsIE5VTEwpOwotCQlpZiAocGFycCA9PSBOVUxMKQotCQkJcCA9IG9mX2dldF9wYXJlbnQoY2hpbGQpOwotCQllbHNlIHsKLQkJCWlmIChvZl9pcnFfd29ya2Fyb3VuZHMgJiBPRl9JTUFQX05PX1BIQU5ETEUpCi0JCQkJcCA9IG9mX25vZGVfZ2V0KG9mX2lycV9kZmx0X3BpYyk7Ci0JCQllbHNlCi0JCQkJcCA9IG9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKCpwYXJwKTsKLQkJfQotCQlvZl9ub2RlX3B1dChjaGlsZCk7Ci0JCWNoaWxkID0gcDsKLQl9IHdoaWxlIChwICYmIG9mX2dldF9wcm9wZXJ0eShwLCAiI2ludGVycnVwdC1jZWxscyIsIE5VTEwpID09IE5VTEwpOwotCi0JcmV0dXJuIHA7Ci19Ci0KLS8qIFRoaXMgZG9lc24ndCBuZWVkIHRvIGJlIGNhbGxlZCBpZiB5b3UgZG9uJ3QgaGF2ZSBhbnkgc3BlY2lhbCB3b3JrYXJvdW5kCi0gKiBmbGFncyB0byBwYXNzCi0gKi8KLXZvaWQgb2ZfaXJxX21hcF9pbml0KHVuc2lnbmVkIGludCBmbGFncykKLXsKLQlvZl9pcnFfd29ya2Fyb3VuZHMgPSBmbGFnczsKLQotCS8qIE9sZFdvcmxkLCBkb24ndCBib3RoZXIgbG9va2luZyBhdCBvdGhlciB0aGluZ3MgKi8KLQlpZiAoZmxhZ3MgJiBPRl9JTUFQX09MRFdPUkxEX01BQykKLQkJcmV0dXJuOwotCi0JLyogSWYgd2UgZG9uJ3QgaGF2ZSBwaGFuZGxlcywgbGV0J3MgdHJ5IHRvIGxvY2F0ZSBhIGRlZmF1bHQgaW50ZXJydXB0Ci0JICogY29udHJvbGxlciAoaGFwcGVucyB3aGVuIGJvb3Rpbmcgd2l0aCBCb290WCkuIFdlIGRvIGEgZmlyc3QgbWF0Y2gKLQkgKiBoZXJlLCBob3BlZnVsbHksIHRoYXQgb25seSBldmVyIGhhcHBlbnMgb24gbWFjaGluZXMgd2l0aCBvbmUKLQkgKiBjb250cm9sbGVyLgotCSAqLwotCWlmIChmbGFncyAmIE9GX0lNQVBfTk9fUEhBTkRMRSkgewotCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCi0JCWZvciAobnAgPSBOVUxMOyAobnAgPSBvZl9maW5kX2FsbF9ub2RlcyhucCkpICE9IE5VTEw7KSB7Ci0JCQlpZiAob2ZfZ2V0X3Byb3BlcnR5KG5wLCAiaW50ZXJydXB0LWNvbnRyb2xsZXIiLCBOVUxMKQotCQkJCT09IE5VTEwpCi0JCQkJY29udGludWU7Ci0JCQkvKiBTa2lwIC9jaG9zZW4vaW50ZXJydXB0LWNvbnRyb2xsZXIgKi8KLQkJCWlmIChzdHJjbXAobnAtPm5hbWUsICJjaG9zZW4iKSA9PSAwKQotCQkJCWNvbnRpbnVlOwotCQkJLyogSXQgc2VlbXMgbGlrZSBhdCBsZWFzdCBvbmUgcGVyc29uIG9uIHRoaXMgcGxhbmV0Ci0JCQkgKiB3YW50cyB0byB1c2UgQm9vdFggb24gYSBtYWNoaW5lIHdpdGggYW4gQXBwbGVLaXdpCi0JCQkgKiBjb250cm9sbGVyIHdoaWNoIGhhcHBlbnMgdG8gcHJldGVuZCB0byBiZSBhbgotCQkJICogaW50ZXJydXB0IGNvbnRyb2xsZXIgdG9vLgotCQkJICovCi0JCQlpZiAoc3RyY21wKG5wLT5uYW1lLCAiQXBwbGVLaXdpIikgPT0gMCkKLQkJCQljb250aW51ZTsKLQkJCS8qIEkgdGhpbmsgd2UgZm91bmQgb25lICEgKi8KLQkJCW9mX2lycV9kZmx0X3BpYyA9IG5wOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLX0KLQotaW50IG9mX2lycV9tYXBfcmF3KHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50LCBjb25zdCB1MzIgKmludHNwZWMsIHUzMiBvaW50c2l6ZSwKLQkJY29uc3QgdTMyICphZGRyLCBzdHJ1Y3Qgb2ZfaXJxICpvdXRfaXJxKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqaXBhciwgKnRub2RlLCAqb2xkID0gTlVMTCwgKm5ld3BhciA9IE5VTEw7Ci0JY29uc3QgdTMyICp0bXAsICppbWFwLCAqaW1hc2s7Ci0JdTMyIGludHNpemUgPSAxLCBhZGRyc2l6ZSwgbmV3aW50c2l6ZSA9IDAsIG5ld2FkZHJzaXplID0gMDsKLQlpbnQgaW1hcGxlbiwgbWF0Y2gsIGk7Ci0KLQlwcl9kZWJ1Zygib2ZfaXJxX21hcF9yYXc6IHBhcj0lcyxpbnRzcGVjPVsweCUwOHggMHglMDh4Li4uXSwiCi0JCSJvaW50c2l6ZT0lZFxuIiwKLQkJcGFyZW50LT5mdWxsX25hbWUsIGludHNwZWNbMF0sIGludHNwZWNbMV0sIG9pbnRzaXplKTsKLQotCWlwYXIgPSBvZl9ub2RlX2dldChwYXJlbnQpOwotCi0JLyogRmlyc3QgZ2V0IHRoZSAjaW50ZXJydXB0LWNlbGxzIHByb3BlcnR5IG9mIHRoZSBjdXJyZW50IGN1cnNvcgotCSAqIHRoYXQgdGVsbHMgdXMgaG93IHRvIGludGVycHJldCB0aGUgcGFzc2VkLWluIGludHNwZWMuIElmIHRoZXJlCi0JICogaXMgbm9uZSwgd2UgYXJlIG5pY2UgYW5kIGp1c3Qgd2FsayB1cCB0aGUgdHJlZQotCSAqLwotCWRvIHsKLQkJdG1wID0gb2ZfZ2V0X3Byb3BlcnR5KGlwYXIsICIjaW50ZXJydXB0LWNlbGxzIiwgTlVMTCk7Ci0JCWlmICh0bXAgIT0gTlVMTCkgewotCQkJaW50c2l6ZSA9ICp0bXA7Ci0JCQlicmVhazsKLQkJfQotCQl0bm9kZSA9IGlwYXI7Ci0JCWlwYXIgPSBvZl9pcnFfZmluZF9wYXJlbnQoaXBhcik7Ci0JCW9mX25vZGVfcHV0KHRub2RlKTsKLQl9IHdoaWxlIChpcGFyKTsKLQlpZiAoaXBhciA9PSBOVUxMKSB7Ci0JCXByX2RlYnVnKCIgLT4gbm8gcGFyZW50IGZvdW5kICFcbiIpOwotCQlnb3RvIGZhaWw7Ci0JfQotCi0JcHJfZGVidWcoIm9mX2lycV9tYXBfcmF3OiBpcGFyPSVzLCBzaXplPSVkXG4iLAotCQkJaXBhci0+ZnVsbF9uYW1lLCBpbnRzaXplKTsKLQotCWlmIChvaW50c2l6ZSAhPSBpbnRzaXplKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIExvb2sgZm9yIHRoaXMgI2FkZHJlc3MtY2VsbHMuIFdlIGhhdmUgdG8gaW1wbGVtZW50IHRoZSBvbGQgbGludXgKLQkgKiB0cmljayBvZiBsb29raW5nIGZvciB0aGUgcGFyZW50IGhlcmUgYXMgc29tZSBkZXZpY2UtdHJlZXMgcmVseSBvbiBpdAotCSAqLwotCW9sZCA9IG9mX25vZGVfZ2V0KGlwYXIpOwotCWRvIHsKLQkJdG1wID0gb2ZfZ2V0X3Byb3BlcnR5KG9sZCwgIiNhZGRyZXNzLWNlbGxzIiwgTlVMTCk7Ci0JCXRub2RlID0gb2ZfZ2V0X3BhcmVudChvbGQpOwotCQlvZl9ub2RlX3B1dChvbGQpOwotCQlvbGQgPSB0bm9kZTsKLQl9IHdoaWxlIChvbGQgJiYgdG1wID09IE5VTEwpOwotCW9mX25vZGVfcHV0KG9sZCk7Ci0Jb2xkID0gTlVMTDsKLQlhZGRyc2l6ZSA9ICh0bXAgPT0gTlVMTCkgPyAyIDogKnRtcDsKLQotCXByX2RlYnVnKCIgLT4gYWRkcnNpemU9JWRcbiIsIGFkZHJzaXplKTsKLQotCS8qIE5vdyBzdGFydCB0aGUgYWN0dWFsICJwcm9wZXIiIHdhbGsgb2YgdGhlIGludGVycnVwdCB0cmVlICovCi0Jd2hpbGUgKGlwYXIgIT0gTlVMTCkgewotCQkvKiBOb3cgY2hlY2sgaWYgY3Vyc29yIGlzIGFuIGludGVycnVwdC1jb250cm9sbGVyIGFuZCBpZiBpdCBpcwotCQkgKiB0aGVuIHdlIGFyZSBkb25lCi0JCSAqLwotCQlpZiAob2ZfZ2V0X3Byb3BlcnR5KGlwYXIsICJpbnRlcnJ1cHQtY29udHJvbGxlciIsIE5VTEwpICE9Ci0JCQkJTlVMTCkgewotCQkJcHJfZGVidWcoIiAtPiBnb3QgaXQgIVxuIik7Ci0JCQltZW1jcHkob3V0X2lycS0+c3BlY2lmaWVyLCBpbnRzcGVjLAotCQkJCWludHNpemUgKiBzaXplb2YodTMyKSk7Ci0JCQlvdXRfaXJxLT5zaXplID0gaW50c2l6ZTsKLQkJCW91dF9pcnEtPmNvbnRyb2xsZXIgPSBpcGFyOwotCQkJb2Zfbm9kZV9wdXQob2xkKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJLyogTm93IGxvb2sgZm9yIGFuIGludGVycnVwdC1tYXAgKi8KLQkJaW1hcCA9IG9mX2dldF9wcm9wZXJ0eShpcGFyLCAiaW50ZXJydXB0LW1hcCIsICZpbWFwbGVuKTsKLQkJLyogTm8gaW50ZXJydXB0IG1hcCwgY2hlY2sgZm9yIGFuIGludGVycnVwdCBwYXJlbnQgKi8KLQkJaWYgKGltYXAgPT0gTlVMTCkgewotCQkJcHJfZGVidWcoIiAtPiBubyBtYXAsIGdldHRpbmcgcGFyZW50XG4iKTsKLQkJCW5ld3BhciA9IG9mX2lycV9maW5kX3BhcmVudChpcGFyKTsKLQkJCWdvdG8gc2tpcGxldmVsOwotCQl9Ci0JCWltYXBsZW4gLz0gc2l6ZW9mKHUzMik7Ci0KLQkJLyogTG9vayBmb3IgYSBtYXNrICovCi0JCWltYXNrID0gb2ZfZ2V0X3Byb3BlcnR5KGlwYXIsICJpbnRlcnJ1cHQtbWFwLW1hc2siLCBOVUxMKTsKLQotCQkvKiBJZiB3ZSB3ZXJlIHBhc3NlZCBubyAicmVnIiBwcm9wZXJ0eSBhbmQgd2UgYXR0ZW1wdCB0byBwYXJzZQotCQkgKiBhbiBpbnRlcnJ1cHQtbWFwLCB0aGVuICNhZGRyZXNzLWNlbGxzIG11c3QgYmUgMC4KLQkJICogRmFpbCBpZiBpdCdzIG5vdC4KLQkJICovCi0JCWlmIChhZGRyID09IE5VTEwgJiYgYWRkcnNpemUgIT0gMCkgewotCQkJcHJfZGVidWcoIiAtPiBubyByZWcgcGFzc2VkIGluIHdoZW4gbmVlZGVkICFcbiIpOwotCQkJZ290byBmYWlsOwotCQl9Ci0KLQkJLyogUGFyc2UgaW50ZXJydXB0LW1hcCAqLwotCQltYXRjaCA9IDA7Ci0JCXdoaWxlIChpbWFwbGVuID4gKGFkZHJzaXplICsgaW50c2l6ZSArIDEpICYmICFtYXRjaCkgewotCQkJLyogQ29tcGFyZSBzcGVjaWZpZXJzICovCi0JCQltYXRjaCA9IDE7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgYWRkcnNpemUgJiYgbWF0Y2g7ICsraSkgewotCQkJCXUzMiBtYXNrID0gaW1hc2sgPyBpbWFza1tpXSA6IDB4ZmZmZmZmZmZ1OwotCQkJCW1hdGNoID0gKChhZGRyW2ldIF4gaW1hcFtpXSkgJiBtYXNrKSA9PSAwOwotCQkJfQotCQkJZm9yICg7IGkgPCAoYWRkcnNpemUgKyBpbnRzaXplKSAmJiBtYXRjaDsgKytpKSB7Ci0JCQkJdTMyIG1hc2sgPSBpbWFzayA/IGltYXNrW2ldIDogMHhmZmZmZmZmZnU7Ci0JCQkJbWF0Y2ggPQotCQkJCQkoKGludHNwZWNbaS1hZGRyc2l6ZV0gXiBpbWFwW2ldKQotCQkJCQkJJiBtYXNrKSA9PSAwOwotCQkJfQotCQkJaW1hcCArPSBhZGRyc2l6ZSArIGludHNpemU7Ci0JCQlpbWFwbGVuIC09IGFkZHJzaXplICsgaW50c2l6ZTsKLQotCQkJcHJfZGVidWcoIiAtPiBtYXRjaD0lZCAoaW1hcGxlbj0lZClcbiIsIG1hdGNoLCBpbWFwbGVuKTsKLQotCQkJLyogR2V0IHRoZSBpbnRlcnJ1cHQgcGFyZW50ICovCi0JCQlpZiAob2ZfaXJxX3dvcmthcm91bmRzICYgT0ZfSU1BUF9OT19QSEFORExFKQotCQkJCW5ld3BhciA9IG9mX25vZGVfZ2V0KG9mX2lycV9kZmx0X3BpYyk7Ci0JCQllbHNlCi0JCQkJbmV3cGFyID0KLQkJCQkJb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUoKHBoYW5kbGUpKmltYXApOwotCQkJaW1hcCsrOwotCQkJLS1pbWFwbGVuOwotCi0JCQkvKiBDaGVjayBpZiBub3QgZm91bmQgKi8KLQkJCWlmIChuZXdwYXIgPT0gTlVMTCkgewotCQkJCXByX2RlYnVnKCIgLT4gaW1hcCBwYXJlbnQgbm90IGZvdW5kICFcbiIpOwotCQkJCWdvdG8gZmFpbDsKLQkJCX0KLQotCQkJLyogR2V0ICNpbnRlcnJ1cHQtY2VsbHMgYW5kICNhZGRyZXNzLWNlbGxzIG9mIG5ldwotCQkJICogcGFyZW50Ci0JCQkgKi8KLQkJCXRtcCA9IG9mX2dldF9wcm9wZXJ0eShuZXdwYXIsICIjaW50ZXJydXB0LWNlbGxzIiwgTlVMTCk7Ci0JCQlpZiAodG1wID09IE5VTEwpIHsKLQkJCQlwcl9kZWJ1ZygiIC0+IHBhcmVudCBsYWNrcyAiCi0JCQkJCQkiI2ludGVycnVwdC1jZWxscyFcbiIpOwotCQkJCWdvdG8gZmFpbDsKLQkJCX0KLQkJCW5ld2ludHNpemUgPSAqdG1wOwotCQkJdG1wID0gb2ZfZ2V0X3Byb3BlcnR5KG5ld3BhciwgIiNhZGRyZXNzLWNlbGxzIiwgTlVMTCk7Ci0JCQluZXdhZGRyc2l6ZSA9ICh0bXAgPT0gTlVMTCkgPyAwIDogKnRtcDsKLQotCQkJcHJfZGVidWcoIiAtPiBuZXdpbnRzaXplPSVkLCBuZXdhZGRyc2l6ZT0lZFxuIiwKLQkJCQluZXdpbnRzaXplLCBuZXdhZGRyc2l6ZSk7Ci0KLQkJCS8qIENoZWNrIGZvciBtYWxmb3JtZWQgcHJvcGVydGllcyAqLwotCQkJaWYgKGltYXBsZW4gPCAobmV3YWRkcnNpemUgKyBuZXdpbnRzaXplKSkKLQkJCQlnb3RvIGZhaWw7Ci0KLQkJCWltYXAgKz0gbmV3YWRkcnNpemUgKyBuZXdpbnRzaXplOwotCQkJaW1hcGxlbiAtPSBuZXdhZGRyc2l6ZSArIG5ld2ludHNpemU7Ci0KLQkJCXByX2RlYnVnKCIgLT4gaW1hcGxlbj0lZFxuIiwgaW1hcGxlbik7Ci0JCX0KLQkJaWYgKCFtYXRjaCkKLQkJCWdvdG8gZmFpbDsKLQotCQlvZl9ub2RlX3B1dChvbGQpOwotCQlvbGQgPSBvZl9ub2RlX2dldChuZXdwYXIpOwotCQlhZGRyc2l6ZSA9IG5ld2FkZHJzaXplOwotCQlpbnRzaXplID0gbmV3aW50c2l6ZTsKLQkJaW50c3BlYyA9IGltYXAgLSBpbnRzaXplOwotCQlhZGRyID0gaW50c3BlYyAtIGFkZHJzaXplOwotCi1za2lwbGV2ZWw6Ci0JCS8qIEl0ZXJhdGUgYWdhaW4gd2l0aCBuZXcgcGFyZW50ICovCi0JCXByX2RlYnVnKCIgLT4gbmV3IHBhcmVudDogJXNcbiIsCi0JCQkJbmV3cGFyID8gbmV3cGFyLT5mdWxsX25hbWUgOiAiPD4iKTsKLQkJb2Zfbm9kZV9wdXQoaXBhcik7Ci0JCWlwYXIgPSBuZXdwYXI7Ci0JCW5ld3BhciA9IE5VTEw7Ci0JfQotZmFpbDoKLQlvZl9ub2RlX3B1dChpcGFyKTsKLQlvZl9ub2RlX3B1dChvbGQpOwotCW9mX25vZGVfcHV0KG5ld3Bhcik7Ci0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKG9mX2lycV9tYXBfcmF3KTsKLQotaW50IG9mX2lycV9tYXBfb25lKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlLAotCQkJaW50IGluZGV4LCBzdHJ1Y3Qgb2ZfaXJxICpvdXRfaXJxKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcDsKLQljb25zdCB1MzIgKmludHNwZWMsICp0bXAsICphZGRyOwotCXUzMiBpbnRzaXplLCBpbnRsZW47Ci0JaW50IHJlczsKLQotCXByX2RlYnVnKCJvZl9pcnFfbWFwX29uZTogZGV2PSVzLCBpbmRleD0lZFxuIiwKLQkJCWRldmljZS0+ZnVsbF9uYW1lLCBpbmRleCk7Ci0KLQkvKiBHZXQgdGhlIGludGVycnVwdHMgcHJvcGVydHkgKi8KLQlpbnRzcGVjID0gb2ZfZ2V0X3Byb3BlcnR5KGRldmljZSwgImludGVycnVwdHMiLCAoaW50ICopICZpbnRsZW4pOwotCWlmIChpbnRzcGVjID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCWludGxlbiAvPSBzaXplb2YodTMyKTsKLQotCXByX2RlYnVnKCIgaW50c3BlYz0lZCBpbnRsZW49JWRcbiIsICppbnRzcGVjLCBpbnRsZW4pOwotCi0JLyogR2V0IHRoZSByZWcgcHJvcGVydHkgKGlmIGFueSkgKi8KLQlhZGRyID0gb2ZfZ2V0X3Byb3BlcnR5KGRldmljZSwgInJlZyIsIE5VTEwpOwotCi0JLyogTG9vayBmb3IgdGhlIGludGVycnVwdCBwYXJlbnQuICovCi0JcCA9IG9mX2lycV9maW5kX3BhcmVudChkZXZpY2UpOwotCWlmIChwID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogR2V0IHNpemUgb2YgaW50ZXJydXB0IHNwZWNpZmllciAqLwotCXRtcCA9IG9mX2dldF9wcm9wZXJ0eShwLCAiI2ludGVycnVwdC1jZWxscyIsIE5VTEwpOwotCWlmICh0bXAgPT0gTlVMTCkgewotCQlvZl9ub2RlX3B1dChwKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWludHNpemUgPSAqdG1wOwotCi0JcHJfZGVidWcoIiBpbnRzaXplPSVkIGludGxlbj0lZFxuIiwgaW50c2l6ZSwgaW50bGVuKTsKLQotCS8qIENoZWNrIGluZGV4ICovCi0JaWYgKChpbmRleCArIDEpICogaW50c2l6ZSA+IGludGxlbikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBHZXQgbmV3IHNwZWNpZmllciBhbmQgbWFwIGl0ICovCi0JcmVzID0gb2ZfaXJxX21hcF9yYXcocCwgaW50c3BlYyArIGluZGV4ICogaW50c2l6ZSwgaW50c2l6ZSwKLQkJCQlhZGRyLCBvdXRfaXJxKTsKLQlvZl9ub2RlX3B1dChwKTsKLQlyZXR1cm4gcmVzOwotfQotRVhQT1JUX1NZTUJPTF9HUEwob2ZfaXJxX21hcF9vbmUpOwotCiAvKioKICAqIFNlYXJjaCB0aGUgZGV2aWNlIHRyZWUgZm9yIHRoZSBiZXN0IE1BQyBhZGRyZXNzIHRvIHVzZS4gICdtYWMtYWRkcmVzcycgaXMKICAqIGNoZWNrZWQgZmlyc3QsIGJlY2F1c2UgdGhhdCBpcyBzdXBwb3NlZCB0byBjb250YWluIHRvICJtb3N0IHJlY2VudCIgTUFDCkBAIC05ODMsNDMgKzE0OCwzIEBACiAJcmV0dXJuIE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MKG9mX2dldF9tYWNfYWRkcmVzcyk7Ci0KLWludCBvZl9pcnFfdG9fcmVzb3VyY2Uoc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGludCBpbmRleCwgc3RydWN0IHJlc291cmNlICpyKQotewotCXN0cnVjdCBvZl9pcnEgb3V0X2lycTsKLQlpbnQgaXJxOwotCWludCByZXM7Ci0KLQlyZXMgPSBvZl9pcnFfbWFwX29uZShkZXYsIGluZGV4LCAmb3V0X2lycSk7Ci0KLQkvKiBHZXQgaXJxIGZvciB0aGUgZGV2aWNlICovCi0JaWYgKHJlcykgewotCQlwcl9kZWJ1ZygiSVJRIG5vdCBmb3VuZC4uLiBjb2RlID0gJWQiLCByZXMpOwotCQlyZXR1cm4gTk9fSVJROwotCX0KLQkvKiBBc3N1bWluZyBzaW5nbGUgaW50ZXJydXB0IGNvbnRyb2xsZXIuLi4gKi8KLQlpcnEgPSBvdXRfaXJxLnNwZWNpZmllclswXTsKLQotCXByX2RlYnVnKCJJUlEgZm91bmQgPSAlZCIsIGlycSk7Ci0KLQkvKiBPbmx5IGRlcmVmZXJlbmNlIHRoZSByZXNvdXJjZSBpZiBib3RoIHRoZQotCSAqIHJlc291cmNlIGFuZCB0aGUgaXJxIGFyZSB2YWxpZC4gKi8KLQlpZiAociAmJiBpcnEgIT0gTk9fSVJRKSB7Ci0JCXItPnN0YXJ0ID0gci0+ZW5kID0gaXJxOwotCQlyLT5mbGFncyA9IElPUkVTT1VSQ0VfSVJROwotCX0KLQotCXJldHVybiBpcnE7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChvZl9pcnFfdG9fcmVzb3VyY2UpOwotCi12b2lkIF9faW9tZW0gKm9mX2lvbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGludCBpbmRleCkKLXsKLQlzdHJ1Y3QgcmVzb3VyY2UgcmVzOwotCi0JaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIGluZGV4LCAmcmVzKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gaW9yZW1hcChyZXMuc3RhcnQsIDEgKyByZXMuZW5kIC0gcmVzLnN0YXJ0KTsKLX0KLUVYUE9SVF9TWU1CT0wob2ZfaW9tYXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHRyYWNlLmMKaW5kZXggYTRhNzc3MC4uZGMwM2ZmYyAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3B0cmFjZS5jCkBAIC0zOCw2ICszOCw4IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgogCiAvKiBSZXR1cm5zIHRoZSBhZGRyZXNzIHdoZXJlIHRoZSByZWdpc3RlciBhdCBSRUdfT0ZGUyBpbiBQIGlzIHN0YXNoZWQgYXdheS4gKi8KIHN0YXRpYyBtaWNyb2JsYXplX3JlZ190ICpyZWdfc2F2ZV9hZGRyKHVuc2lnbmVkIHJlZ19vZmZzLApAQCAtMTAxLDggKzEwMywyMSBAQAogCQkJbWljcm9ibGF6ZV9yZWdfdCAqcmVnX2FkZHIgPSByZWdfc2F2ZV9hZGRyKGFkZHIsIGNoaWxkKTsKIAkJCWlmIChyZXF1ZXN0ID09IFBUUkFDRV9QRUVLVVNSKQogCQkJCXZhbCA9ICpyZWdfYWRkcjsKLQkJCWVsc2UKKwkJCWVsc2UgeworI2lmIDEKIAkJCQkqcmVnX2FkZHIgPSBkYXRhOworI2Vsc2UKKwkJCQkvKiBNUyBwb3RlbnRpYWwgcHJvYmxlbSBvbiBXQiBzeXN0ZW0KKwkJCQkgKiBCZSBhd2FyZSB0aGF0IHJlZ19hZGRyIGlzIHZpcnR1YWwgYWRkcmVzcworCQkJCSAqIHZpcnRfdG9fcGh5cyBjb252ZXJzaW9uIGlzIG5lY2Vzc2FyeS4KKwkJCQkgKiBUaGlzIGNvdWxkIGJlIHNlbnNpYmxlIHNvbHV0aW9uLgorCQkJCSAqLworCQkJCXUzMiBwYWRkciA9IHZpcnRfdG9fcGh5cygodTMyKXJlZ19hZGRyKTsKKwkJCQlpbnZhbGlkYXRlX2ljYWNoZV9yYW5nZShwYWRkciwgcGFkZHIgKyA0KTsKKwkJCQkqcmVnX2FkZHIgPSBkYXRhOworCQkJCWZsdXNoX2RjYWNoZV9yYW5nZShwYWRkciwgcGFkZHIgKyA0KTsKKyNlbmRpZgorCQkJfQogCQl9IGVsc2UKIAkJCXJ2YWwgPSAtRUlPOwogCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3Jlc2V0LmMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3Jlc2V0LmMKaW5kZXggYTE3MjFhMy4uYmQ4Y2NhYiAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9yZXNldC5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcmVzZXQuYwpAQCAtMjQsOCArMjQsOCBAQAogCWludCByZXQ7IC8qIHZhcmlhYmxlIHdoaWNoIHN0b3JlZCBoYW5kbGUgcmVzZXQgZ3BpbyBwaW4gKi8KIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3Q7IC8qIHJvb3Qgbm9kZSAqLwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZ3BpbzsgLyogZ3BpbyBub2RlICovCi0Jc3RydWN0IG9mX2dwaW9fY2hpcCAqb2ZfZ2MgPSBOVUxMOwotCWVudW0gb2ZfZ3Bpb19mbGFncyBmbGFncyA7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2M7CisJdTMyIGZsYWdzOwogCWNvbnN0IHZvaWQgKmdwaW9fc3BlYzsKIAogCS8qIGZpbmQgb3V0IHJvb3Qgbm9kZSAqLwpAQCAtMzksMTkgKzM5LDE5IEBACiAJCWdvdG8gZXJyMDsKIAl9CiAKLQlvZl9nYyA9IGdwaW8tPmRhdGE7Ci0JaWYgKCFvZl9nYykgeworCWdjID0gb2Zfbm9kZV90b19ncGlvY2hpcChncGlvKTsKKwlpZiAoIWdjKSB7CiAJCXByX2RlYnVnKCIlczogZ3BpbyBjb250cm9sbGVyICVzIGlzbid0IHJlZ2lzdGVyZWRcbiIsCiAJCQkgcm9vdC0+ZnVsbF9uYW1lLCBncGlvLT5mdWxsX25hbWUpOwogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIGVycjE7CiAJfQogCi0JcmV0ID0gb2ZfZ2MtPnhsYXRlKG9mX2djLCByb290LCBncGlvX3NwZWMsICZmbGFncyk7CisJcmV0ID0gZ2MtPm9mX3hsYXRlKGdjLCByb290LCBncGlvX3NwZWMsICZmbGFncyk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyMTsKIAotCXJldCArPSBvZl9nYy0+Z2MuYmFzZTsKKwlyZXQgKz0gZ2MtPmJhc2U7CiBlcnIxOgogCW9mX25vZGVfcHV0KGdwaW8pOwogZXJyMDoKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc2V0dXAuYwppbmRleCAxN2M5OGRiLi5mNWY3Njg4IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zZXR1cC5jCkBAIC0yMTMsMTUgKzIxMyw5IEBACiAJLnByaW9yaXR5ID0gSU5UX01BWCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZGZsdF9vZl9idXNfbm90aWZpZXIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwgPSBkZmx0X2J1c19ub3RpZnksCi0JLnByaW9yaXR5ID0gSU5UX01BWCwKLX07Ci0KIHN0YXRpYyBpbnQgX19pbml0IHNldHVwX2J1c19ub3RpZmllcih2b2lkKQogewogCWJ1c19yZWdpc3Rlcl9ub3RpZmllcigmcGxhdGZvcm1fYnVzX3R5cGUsICZkZmx0X3BsYXRfYnVzX25vdGlmaWVyKTsKLQlidXNfcmVnaXN0ZXJfbm90aWZpZXIoJm9mX3BsYXRmb3JtX2J1c190eXBlLCAmZGZsdF9vZl9idXNfbm90aWZpZXIpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3N0YWNrdHJhY2UuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc3RhY2t0cmFjZS5jCmluZGV4IDEyMzY5MmYuLjg0YmM2NjggMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc3RhY2t0cmFjZS5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc3RhY2t0cmFjZS5jCkBAIC0xNCw1MiArMTQsMTggQEAKICNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KIAotLyogRklYTUUgaW5pdGlhbCBzdXBwb3J0ICovCiB2b2lkIHNhdmVfc3RhY2tfdHJhY2Uoc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSkKIHsKLQl1bnNpZ25lZCBsb25nICpzcDsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0JYXNtKCJhZGRpayAlMCwgcjEsIDAiIDogIj1yIiAoc3ApKTsKLQotCXdoaWxlICgha3N0YWNrX2VuZChzcCkpIHsKLQkJYWRkciA9ICpzcCsrOwotCQlpZiAoX19rZXJuZWxfdGV4dF9hZGRyZXNzKGFkZHIpKSB7Ci0JCQlpZiAodHJhY2UtPnNraXAgPiAwKQotCQkJCXRyYWNlLT5za2lwLS07Ci0JCQllbHNlCi0JCQkJdHJhY2UtPmVudHJpZXNbdHJhY2UtPm5yX2VudHJpZXMrK10gPSBhZGRyOwotCi0JCQlpZiAodHJhY2UtPm5yX2VudHJpZXMgPj0gdHJhY2UtPm1heF9lbnRyaWVzKQotCQkJCWJyZWFrOwotCQl9Ci0JfQorCS8qIEV4Y2x1ZGUgb3VyIGhlbHBlciBmdW5jdGlvbnMgZnJvbSB0aGUgdHJhY2UqLworCXRyYWNlLT5za2lwICs9IDI7CisJbWljcm9ibGF6ZV91bndpbmQoTlVMTCwgdHJhY2UpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2F2ZV9zdGFja190cmFjZSk7CiAKIHZvaWQgc2F2ZV9zdGFja190cmFjZV90c2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UpCiB7Ci0JdW5zaWduZWQgaW50ICpzcDsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0KLQlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpID0gdGFza190aHJlYWRfaW5mbyh0c2spOwotCi0JaWYgKHRzayA9PSBjdXJyZW50KQotCQlhc20oImFkZGlrICUwLCByMSwgMCIgOiAiPXIiIChzcCkpOwotCWVsc2UKLQkJc3AgPSAodW5zaWduZWQgaW50ICopdGktPmNwdV9jb250ZXh0LnIxOwotCi0Jd2hpbGUgKCFrc3RhY2tfZW5kKHNwKSkgewotCQlhZGRyID0gKnNwKys7Ci0JCWlmIChfX2tlcm5lbF90ZXh0X2FkZHJlc3MoYWRkcikpIHsKLQkJCWlmICh0cmFjZS0+c2tpcCA+IDApCi0JCQkJdHJhY2UtPnNraXAtLTsKLQkJCWVsc2UKLQkJCQl0cmFjZS0+ZW50cmllc1t0cmFjZS0+bnJfZW50cmllcysrXSA9IGFkZHI7Ci0KLQkJCWlmICh0cmFjZS0+bnJfZW50cmllcyA+PSB0cmFjZS0+bWF4X2VudHJpZXMpCi0JCQkJYnJlYWs7Ci0JCX0KLQl9CisJbWljcm9ibGF6ZV91bndpbmQodHNrLCB0cmFjZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzYXZlX3N0YWNrX3RyYWNlX3Rzayk7CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3RpbWVyLmMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3RpbWVyLmMKaW5kZXggZWQ2MWIyZi4uYjEzODBhZSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC90aW1lci5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvdGltZXIuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9jbnQzMl90b182My5oPgogCiAjaWZkZWYgQ09ORklHX1NFTEZNT0RfVElNRVIKICNpbmNsdWRlIDxhc20vc2VsZm1vZC5oPgpAQCAtMTM1LDcgKzEzNiw3IEBACiBzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBjbG9ja2V2ZW50X21pY3JvYmxhemVfdGltZXIgPSB7CiAJLm5hbWUJCT0gIm1pY3JvYmxhemVfY2xvY2tldmVudCIsCiAJLmZlYXR1cmVzICAgICAgID0gQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCB8IENMT0NLX0VWVF9GRUFUX1BFUklPRElDLAotCS5zaGlmdAkJPSAyNCwKKwkuc2hpZnQJCT0gOCwKIAkucmF0aW5nCQk9IDMwMCwKIAkuc2V0X25leHRfZXZlbnQJPSBtaWNyb2JsYXplX3RpbWVyX3NldF9uZXh0X2V2ZW50LAogCS5zZXRfbW9kZQk9IG1pY3JvYmxhemVfdGltZXJfc2V0X21vZGUsCkBAIC0xOTUsNyArMTk2LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgY3ljbGVjb3VudGVyIG1pY3JvYmxhemVfY2MgPSB7CiAJLnJlYWQgPSBtaWNyb2JsYXplX2NjX3JlYWQsCiAJLm1hc2sgPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKLQkuc2hpZnQgPSAyNCwKKwkuc2hpZnQgPSA4LAogfTsKIAogaW50IF9faW5pdCBpbml0X21pY3JvYmxhemVfdGltZWNvdW50ZXIodm9pZCkKQEAgLTIxMyw3ICsyMTQsNyBAQAogCS5yYXRpbmcJCT0gMzAwLAogCS5yZWFkCQk9IG1pY3JvYmxhemVfcmVhZCwKIAkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKLQkuc2hpZnQJCT0gMjQsIC8qIEkgY2FuIHNoaWZ0IGl0ICovCisJLnNoaWZ0CQk9IDgsIC8qIEkgY2FuIHNoaWZ0IGl0ICovCiAJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIApAQCAtMjM1LDYgKzIzNiwxMiBAQAogCXJldHVybiAwOwogfQogCisvKgorICogV2UgaGF2ZSB0byBwcm90ZWN0IGFjY2Vzc2VzIGJlZm9yZSB0aW1lciBpbml0aWFsaXphdGlvbgorICogYW5kIHJldHVybiAwIGZvciBzY2hlZF9jbG9jayBmdW5jdGlvbiBiZWxvdy4KKyAqLworc3RhdGljIGludCB0aW1lcl9pbml0aWFsaXplZDsKKwogdm9pZCBfX2luaXQgdGltZV9pbml0KHZvaWQpCiB7CiAJdTMyIGlycSwgaSA9IDA7CkBAIC0yODksNCArMjk2LDE1IEBACiAjZW5kaWYKIAltaWNyb2JsYXplX2Nsb2Nrc291cmNlX2luaXQoKTsKIAltaWNyb2JsYXplX2Nsb2NrZXZlbnRfaW5pdCgpOworCXRpbWVyX2luaXRpYWxpemVkID0gMTsKK30KKwordW5zaWduZWQgbG9uZyBsb25nIG5vdHJhY2Ugc2NoZWRfY2xvY2sodm9pZCkKK3sKKwlpZiAodGltZXJfaW5pdGlhbGl6ZWQpIHsKKwkJc3RydWN0IGNsb2Nrc291cmNlICpjcyA9ICZjbG9ja3NvdXJjZV9taWNyb2JsYXplOworCQljeWNsZV90IGN5YyA9IGNudDMyX3RvXzYzKGNzLT5yZWFkKE5VTEwpKTsKKwkJcmV0dXJuIGNsb2Nrc291cmNlX2N5YzJucyhjeWMsIGNzLT5tdWx0LCBjcy0+c2hpZnQpOworCX0KKwlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvdHJhcHMuYwppbmRleCA3NWU0OTIwLi5iYTAzNGQ0IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC90cmFwcy5jCkBAIC0xNiwxMyArMTYsMTQgQEAKIAogI2luY2x1ZGUgPGFzbS9leGNlcHRpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KIAogdm9pZCB0cmFwX2luaXQodm9pZCkKIHsKIAlfX2VuYWJsZV9od19leGNlcHRpb25zKCk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGtzdGFja19kZXB0aF90b19wcmludCA9IDI0Oworc3RhdGljIHVuc2lnbmVkIGxvbmcga3N0YWNrX2RlcHRoX3RvX3ByaW50OwkvKiAwID09IGVudGlyZSBzdGFjayAqLwogCiBzdGF0aWMgaW50IF9faW5pdCBrc3RhY2tfc2V0dXAoY2hhciAqcykKIHsKQEAgLTMwLDMxICszMSw0NyBAQAogfQogX19zZXR1cCgia3N0YWNrPSIsIGtzdGFja19zZXR1cCk7CiAKLXZvaWQgc2hvd190cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgKnN0YWNrKQordm9pZCBzaG93X3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyAqc3ApCiB7Ci0JdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxvbmcgd29yZHNfdG9fc2hvdzsKKwl1MzIgZnAgPSAodTMyKSBzcDsKIAotCWlmICghc3RhY2spCi0JCXN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKikmc3RhY2s7Ci0KLQlwcmludGsoS0VSTl9OT1RJQ0UgIkNhbGwgVHJhY2U6ICIpOwotI2lmZGVmIENPTkZJR19LQUxMU1lNUwotCXByaW50ayhLRVJOX05PVElDRSAiXG4iKTsKLSNlbmRpZgotCXdoaWxlICgha3N0YWNrX2VuZChzdGFjaykpIHsKLQkJYWRkciA9ICpzdGFjaysrOwotCQkvKgotCQkgKiBJZiB0aGUgYWRkcmVzcyBpcyBlaXRoZXIgaW4gdGhlIHRleHQgc2VnbWVudCBvZiB0aGUKLQkJICoga2VybmVsLCBvciBpbiB0aGUgcmVnaW9uIHdoaWNoIGNvbnRhaW5zIHZtYWxsb2MnZWQKLQkJICogbWVtb3J5LCBpdCAqbWF5KiBiZSB0aGUgYWRkcmVzcyBvZiBhIGNhbGxpbmcKLQkJICogcm91dGluZTsgaWYgc28sIHByaW50IGl0IHNvIHRoYXQgc29tZW9uZSB0cmFjaW5nCi0JCSAqIGRvd24gdGhlIGNhdXNlIG9mIHRoZSBjcmFzaCB3aWxsIGJlIGFibGUgdG8gZmlndXJlCi0JCSAqIG91dCB0aGUgY2FsbCBwYXRoIHRoYXQgd2FzIHRha2VuLgotCQkgKi8KLQkJaWYgKGtlcm5lbF90ZXh0X2FkZHJlc3MoYWRkcikpCi0JCQlwcmludF9pcF9zeW0oYWRkcik7CisJaWYgKGZwID09IDApIHsKKwkJaWYgKHRhc2spIHsKKwkJCWZwID0gKChzdHJ1Y3QgdGhyZWFkX2luZm8gKikKKwkJCQkodGFzay0+c3RhY2spKS0+Y3B1X2NvbnRleHQucjE7CisJCX0gZWxzZSB7CisJCQkvKiBQaWNrIHVwIGNhbGxlciBvZiBkdW1wX3N0YWNrKCkgKi8KKwkJCWZwID0gKHUzMikmc3AgLSA4OworCQl9CiAJfQotCXByaW50ayhLRVJOX05PVElDRSAiXG4iKTsKKworCXdvcmRzX3RvX3Nob3cgPSAoVEhSRUFEX1NJWkUgLSAoZnAgJiAoVEhSRUFEX1NJWkUgLSAxKSkpID4+IDI7CisJaWYgKGtzdGFja19kZXB0aF90b19wcmludCAmJiAod29yZHNfdG9fc2hvdyA+IGtzdGFja19kZXB0aF90b19wcmludCkpCisJCXdvcmRzX3RvX3Nob3cgPSBrc3RhY2tfZGVwdGhfdG9fcHJpbnQ7CisKKwlwcl9pbmZvKCJLZXJuZWwgU3RhY2s6XG4iKTsKKworCS8qCisJICogTWFrZSB0aGUgZmlyc3QgbGluZSBhbiAnb2RkJyBzaXplIGlmIG5lY2Vzc2FyeSB0byBnZXQKKwkgKiByZW1haW5pbmcgbGluZXMgdG8gc3RhcnQgYXQgYW4gYWRkcmVzcyBtdWx0aXBsZSBvZiAweDEwCisJICovCisJaWYgKGZwICYgMHhGKSB7CisJCXVuc2lnbmVkIGxvbmcgbGluZTFfd29yZHMgPSAoMHgxMCAtIChmcCAmIDB4RikpID4+IDI7CisJCWlmIChsaW5lMV93b3JkcyA8IHdvcmRzX3RvX3Nob3cpIHsKKwkJCXByaW50X2hleF9kdW1wKEtFUk5fSU5GTywgIiIsIERVTVBfUFJFRklYX0FERFJFU1MsIDMyLAorCQkJCSAgICAgICA0LCAodm9pZCAqKWZwLCBsaW5lMV93b3JkcyA8PCAyLCAwKTsKKwkJCWZwICs9IGxpbmUxX3dvcmRzIDw8IDI7CisJCQl3b3Jkc190b19zaG93IC09IGxpbmUxX3dvcmRzOworCQl9CisJfQorCXByaW50X2hleF9kdW1wKEtFUk5fSU5GTywgIiIsIERVTVBfUFJFRklYX0FERFJFU1MsIDMyLCA0LCAodm9pZCAqKWZwLAorCQkgICAgICAgd29yZHNfdG9fc2hvdyA8PCAyLCAwKTsKKwlwcmludGsoS0VSTl9JTkZPICJcblxuIik7CisKKwlwcl9pbmZvKCJDYWxsIFRyYWNlOlxuIik7CisJbWljcm9ibGF6ZV91bndpbmQodGFzaywgTlVMTCk7CisJcHJfaW5mbygiXG4iKTsKIAogCWlmICghdGFzaykKIAkJdGFzayA9IGN1cnJlbnQ7CkBAIC02MiwzNCArNzksNiBAQAogCWRlYnVnX3Nob3dfaGVsZF9sb2Nrcyh0YXNrKTsKIH0KIAotdm9pZCBzaG93X3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyAqc3ApCi17Ci0JdW5zaWduZWQgbG9uZyAqc3RhY2s7Ci0JaW50IGk7Ci0KLQlpZiAoc3AgPT0gTlVMTCkgewotCQlpZiAodGFzaykKLQkJCXNwID0gKHVuc2lnbmVkIGxvbmcgKikgKChzdHJ1Y3QgdGhyZWFkX2luZm8gKikKLQkJCQkJCSh0YXNrLT5zdGFjaykpLT5jcHVfY29udGV4dC5yMTsKLQkJZWxzZQotCQkJc3AgPSAodW5zaWduZWQgbG9uZyAqKSZzcDsKLQl9Ci0KLQlzdGFjayA9IHNwOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiXG5TdGFjazpcbiAgIik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwga3N0YWNrX2RlcHRoX3RvX3ByaW50OyBpKyspIHsKLQkJaWYgKGtzdGFja19lbmQoc3ApKQotCQkJYnJlYWs7Ci0JCWlmIChpICYmICgoaSAlIDgpID09IDApKQotCQkJcHJpbnRrKCJcbiAgIik7Ci0JCXByaW50aygiJTA4bHggIiwgKnNwKyspOwotCX0KLQlwcmludGsoIlxuIik7Ci0Jc2hvd190cmFjZSh0YXNrLCBzdGFjayk7Ci19Ci0KIHZvaWQgZHVtcF9zdGFjayh2b2lkKQogewogCXNob3dfc3RhY2soTlVMTCwgTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3Vud2luZC5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC91bndpbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWZhYzVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC91bndpbmQuYwpAQCAtMCwwICsxLDMxOCBAQAorLyoKKyAqIEJhY2t0cmFjZSBzdXBwb3J0IGZvciBNaWNyb2JsYXplCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwICBEaWdpdGFsIERlc2lnbiBDb3Jwb3JhdGlvbgorICoKKyAqIEJhc2VkIG9uIGFyY2gvc2gva2VybmVsL2NwdS9zaDUvdW53aW5kLmMgY29kZSB3aGljaCBpczoKKyAqIENvcHlyaWdodCAoQykgMjAwNCAgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDA0ICBSaWNoYXJkIEN1cm5vdworICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qICNkZWZpbmUgREVCVUcgMSAqLworI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGFja3RyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL2V4Y2VwdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vdW53aW5kLmg+CisKK3N0cnVjdCBzdGFja190cmFjZTsKKworLyoKKyAqIE9uIE1pY3JvYmxhemUsIGZpbmRpbmcgdGhlIHByZXZpb3VzIHN0YWNrIGZyYW1lIGlzIGEgbGl0dGxlIHRyaWNreS4KKyAqIEF0IHRoaXMgd3JpdGluZyAoMy8yMDEwKSwgTWljcm9ibGF6ZSBkb2VzIG5vdCBzdXBwb3J0IENPTkZJR19GUkFNRV9QT0lOVEVSUywKKyAqIGFuZCBldmVuIGlmIGl0IGRpZCwgZ2NjICg0LjEuMikgZG9lcyBub3Qgc3RvcmUgdGhlIGZyYW1lIHBvaW50ZXIgYXQKKyAqIGEgY29uc2lzdGVudCBvZmZzZXQgd2l0aGluIGVhY2ggZnJhbWUuIFRvIGRldGVybWluZSBmcmFtZSBzaXplLCBpdCBpcworICogbmVjZXNzYXJ5IHRvIHNlYXJjaCBmb3IgdGhlIGFzc2VtYmx5IGluc3RydWN0aW9uIHRoYXQgY3JlYXRlcyBvciByZWNsYWltcworICogdGhlIGZyYW1lIGFuZCBleHRyYWN0IHRoZSBzaXplIGZyb20gaXQuCisgKgorICogTWljcm9ibGF6ZSBzdG9yZXMgdGhlIHN0YWNrIHBvaW50ZXIgaW4gcjEsIGFuZCBjcmVhdGVzIGEgZnJhbWUgdmlhCisgKgorICogICAgIGFkZGlrIHIxLCByMSwgLUZSQU1FX1NJWkUKKyAqCisgKiBUaGUgZnJhbWUgaXMgcmVjbGFpbWVkIHZpYQorICoKKyAqICAgICBhZGRpayByMSwgcjEsIEZSQU1FX1NJWkUKKyAqCisgKiBGcmFtZSBjcmVhdGlvbiBvY2N1cnMgYXQgb3IgbmVhciB0aGUgdG9wIG9mIGEgZnVuY3Rpb24uCisgKiBEZXBlbmRpbmcgb24gdGhlIGNvbXBpbGVyLCByZWNsYWltIG1heSBvY2N1ciBhdCB0aGUgZW5kLCBvciBiZWZvcmUKKyAqIGEgbWlkLWZ1bmN0aW9uIHJldHVybi4KKyAqCisgKiBBIHN0YWNrIGZyYW1lIGlzIHVzdWFsbHkgbm90IGNyZWF0ZWQgaW4gYSBsZWFmIGZ1bmN0aW9uLgorICoKKyAqLworCisvKioKKyAqIGdldF9mcmFtZV9zaXplIC0gRXh0cmFjdCB0aGUgc3RhY2sgYWRqdXN0bWVudCBmcm9tIGFuCisgKiAgICAgICAgICAgICAgICAgICJhZGRpayByMSwgcjEsIGFkanVzdCIgaW5zdHJ1Y3Rpb24KKyAqIEBpbnN0ciA6IE1pY3JvYmxhemUgaW5zdHJ1Y3Rpb24KKyAqCisgKiBSZXR1cm4gLSBOdW1iZXIgb2Ygc3RhY2sgYnl0ZXMgdGhlIGluc3RydWN0aW9uIHJlc2VydmVzIG9yIHJlY2xhaW1zCisgKi8KK2lubGluZSBsb25nIGdldF9mcmFtZV9zaXplKHVuc2lnbmVkIGxvbmcgaW5zdHIpCit7CisJcmV0dXJuIGFicygoczE2KShpbnN0ciAmIDB4RkZGRikpOworfQorCisvKioKKyAqIGZpbmRfZnJhbWVfY3JlYXRpb24gLSBTZWFyY2ggYmFja3dhcmQgdG8gZmluZCB0aGUgaW5zdHJ1Y3Rpb24gdGhhdCBjcmVhdGVzCisgKiAgICAgICAgICAgICAgICAgICAgICAgdGhlIHN0YWNrIGZyYW1lIChob3BlZnVsbHksIGZvciB0aGUgc2FtZSBmdW5jdGlvbiB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsIFBDIGlzIGluKS4KKyAqIEBwYyA6IFByb2dyYW0gY291bnRlciBhdCB3aGljaCB0byBiZWdpbiB0aGUgc2VhcmNoCisgKgorICogUmV0dXJuIC0gUEMgYXQgd2hpY2ggc3RhY2sgZnJhbWUgY3JlYXRpb24gb2NjdXJzCisgKiAgICAgICAgICBOVUxMIGlmIHRoaXMgY2Fubm90IGJlIGZvdW5kLCBpLmUuIGEgbGVhZiBmdW5jdGlvbgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyAqZmluZF9mcmFtZV9jcmVhdGlvbih1bnNpZ25lZCBsb25nICpwYykKK3sKKwlpbnQgaTsKKworCS8qIE5PVEU6IERpc3RhbmNlIHRvIHNlYXJjaCBpcyBhcmJpdHJhcnkKKwkgKgkgMjUwIHdvcmtzIHdlbGwgZm9yIG1vc3QgdGhpbmdzLAorCSAqCSA3NTAgcGlja3MgdXAgdGhpbmdzIGxpa2UgdGNwX3JlY3Ztc2coKSwKKwkgKgkxMDAwIG5lZWRlZCBmb3IgZmF0X2ZpbGxfc3VwZXIoKQorCSAqLworCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyssIHBjLS0pIHsKKwkJdW5zaWduZWQgbG9uZyBpbnN0cjsKKwkJczE2IGZyYW1lX3NpemU7CisKKwkJaWYgKCFrZXJuZWxfdGV4dF9hZGRyZXNzKCh1bnNpZ25lZCBsb25nKSBwYykpCisJCQlyZXR1cm4gTlVMTDsKKworCQlpbnN0ciA9ICpwYzsKKworCQkvKiBhZGRpayByMSwgcjEsIGZvbyA/ICovCisJCWlmICgoaW5zdHIgJiAweEZGRkYwMDAwKSAhPSAweDMwMjEwMDAwKQorCQkJY29udGludWU7CS8qIE5vICovCisKKwkJZnJhbWVfc2l6ZSA9IGdldF9mcmFtZV9zaXplKGluc3RyKTsKKwkJaWYgKChmcmFtZV9zaXplIDwgOCkgfHwgKGZyYW1lX3NpemUgJiAzKSkgeworCQkJcHJfZGVidWcoIiAgICBJbnZhbGlkIGZyYW1lIHNpemUgJWQgYXQgMHglcFxuIiwKKwkJCQkgZnJhbWVfc2l6ZSwgcGMpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlwcl9kZWJ1ZygiICAgIEZvdW5kIGZyYW1lIGNyZWF0aW9uIGF0IDB4JXAsIHNpemUgJWRcbiIsIHBjLAorCQkJIGZyYW1lX3NpemUpOworCQlyZXR1cm4gcGM7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogbG9va3VwX3ByZXZfc3RhY2tfZnJhbWUgLSBGaW5kIHRoZSBzdGFjayBmcmFtZSBvZiB0aGUgcHJldmlvdXMgZnVuY3Rpb24uCisgKiBAZnAgICAgICAgICAgOiBGcmFtZSAoc3RhY2spIHBvaW50ZXIgZm9yIGN1cnJlbnQgZnVuY3Rpb24KKyAqIEBwYyAgICAgICAgICA6IFByb2dyYW0gY291bnRlciB3aXRoaW4gY3VycmVudCBmdW5jdGlvbgorICogQGxlYWZfcmV0dXJuIDogcjE1IHZhbHVlIHdpdGhpbiBjdXJyZW50IGZ1bmN0aW9uLiBJZiB0aGUgY3VycmVudCBmdW5jdGlvbgorICoJCSAgaXMgYSBsZWFmLCB0aGlzIGlzIHRoZSBjYWxsZXIncyByZXR1cm4gYWRkcmVzcy4KKyAqIEBwcHJldl9mcCAgICA6IE9uIGV4aXQsIHNldCB0byBmcmFtZSAoc3RhY2spIHBvaW50ZXIgZm9yIHByZXZpb3VzIGZ1bmN0aW9uCisgKiBAcHByZXZfcGMgICAgOiBPbiBleGl0LCBzZXQgdG8gY3VycmVudCBmdW5jdGlvbiBjYWxsZXIncyByZXR1cm4gYWRkcmVzcworICoKKyAqIFJldHVybiAtIDAgb24gc3VjY2VzcywgLUVJTlZBTCBpZiB0aGUgcHJldmlvdXMgZnJhbWUgY2Fubm90IGJlIGZvdW5kCisgKi8KK3N0YXRpYyBpbnQgbG9va3VwX3ByZXZfc3RhY2tfZnJhbWUodW5zaWduZWQgbG9uZyBmcCwgdW5zaWduZWQgbG9uZyBwYywKKwkJCQkgICB1bnNpZ25lZCBsb25nIGxlYWZfcmV0dXJuLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgKnBwcmV2X2ZwLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgKnBwcmV2X3BjKQoreworCXVuc2lnbmVkIGxvbmcgKnByb2xvZ3VlID0gTlVMTDsKKworCS8qIF9zd2l0Y2hfdG8gaXMgYSBzcGVjaWFsIGxlYWYgZnVuY3Rpb24gKi8KKwlpZiAocGMgIT0gKHVuc2lnbmVkIGxvbmcpICZfc3dpdGNoX3RvKQorCQlwcm9sb2d1ZSA9IGZpbmRfZnJhbWVfY3JlYXRpb24oKHVuc2lnbmVkIGxvbmcgKilwYyk7CisKKwlpZiAocHJvbG9ndWUpIHsKKwkJbG9uZyBmcmFtZV9zaXplID0gZ2V0X2ZyYW1lX3NpemUoKnByb2xvZ3VlKTsKKworCQkqcHByZXZfZnAgPSBmcCArIGZyYW1lX3NpemU7CisJCSpwcHJldl9wYyA9ICoodW5zaWduZWQgbG9uZyAqKWZwOworCX0gZWxzZSB7CisJCWlmICghbGVhZl9yZXR1cm4pCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJKnBwcmV2X3BjID0gbGVhZl9yZXR1cm47CisJCSpwcHJldl9mcCA9IGZwOworCX0KKworCS8qIE5PVEU6IGRvbid0IGNoZWNrIGtlcm5lbF90ZXh0X2FkZHJlc3MgaGVyZSwgdG8gYWxsb3cgZGlzcGxheQorCSAqCSBvZiB1c2VybGFuZCByZXR1cm4gYWRkcmVzcworCSAqLworCXJldHVybiAoISpwcHJldl9wYyB8fCAoKnBwcmV2X3BjICYgMykpID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIG1pY3JvYmxhemVfdW53aW5kX2lubmVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBwYywgdW5zaWduZWQgbG9uZyBmcCwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBsZWFmX3JldHVybiwKKwkJCQkgICAgc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSk7CisKKy8qKgorICogdW53aW5kX3RyYXAgLSBVbndpbmQgdGhyb3VnaCBhIHN5c3RlbSB0cmFwLCB0aGF0IHN0b3JlZCBwcmV2aW91cyBzdGF0ZQorICoJCSBvbiB0aGUgc3RhY2suCisgKi8KKyNpZmRlZiBDT05GSUdfTU1VCitzdGF0aWMgaW5saW5lIHZvaWQgdW53aW5kX3RyYXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nIHBjLAorCQkJCXVuc2lnbmVkIGxvbmcgZnAsIHN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UpCit7CisJLyogVG8gYmUgaW1wbGVtZW50ZWQgKi8KK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgdW53aW5kX3RyYXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nIHBjLAorCQkJCXVuc2lnbmVkIGxvbmcgZnAsIHN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UpCit7CisJY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSAoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKikgZnA7CisJbWljcm9ibGF6ZV91bndpbmRfaW5uZXIodGFzaywgcmVncy0+cGMsIHJlZ3MtPnIxLCByZWdzLT5yMTUsIHRyYWNlKTsKK30KKyNlbmRpZgorCisvKioKKyAqIG1pY3JvYmxhemVfdW53aW5kX2lubmVyIC0gVW53aW5kIHRoZSBzdGFjayBmcm9tIHRoZSBzcGVjaWZpZWQgcG9pbnQKKyAqIEB0YXNrICA6IFRhc2sgd2hvc2Ugc3RhY2sgd2UgYXJlIHRvIHVud2luZCAobWF5IGJlIE5VTEwpCisgKiBAcGMgICAgOiBQcm9ncmFtIGNvdW50ZXIgZnJvbSB3aGljaCB3ZSBzdGFydCB1bndpbmRpbmcKKyAqIEBmcCAgICA6IEZyYW1lIChzdGFjaykgcG9pbnRlciBmcm9tIHdoaWNoIHdlIHN0YXJ0IHVud2luZGluZworICogQGxlYWZfcmV0dXJuIDogVmFsdWUgb2YgcjE1IGF0IHBjLiBJZiB0aGUgZnVuY3Rpb24gaXMgYSBsZWFmLCB0aGlzIGlzCisgKgkJCQkgIHRoZSBjYWxsZXIncyByZXR1cm4gYWRkcmVzcy4KKyAqIEB0cmFjZSA6IFdoZXJlIHRvIHN0b3JlIHN0YWNrIGJhY2t0cmFjZSAoUEMgdmFsdWVzKS4KKyAqCSAgICBOVUxMID09IHByaW50IGJhY2t0cmFjZSB0byBrZXJuZWwgbG9nCisgKi8KK3ZvaWQgbWljcm9ibGF6ZV91bndpbmRfaW5uZXIoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJICAgICB1bnNpZ25lZCBsb25nIHBjLCB1bnNpZ25lZCBsb25nIGZwLAorCQkJICAgICB1bnNpZ25lZCBsb25nIGxlYWZfcmV0dXJuLAorCQkJICAgICBzdHJ1Y3Qgc3RhY2tfdHJhY2UgKnRyYWNlKQoreworCWludCBvZnMgPSAwOworCisJcHJfZGVidWcoIiAgICBVbndpbmRpbmcgd2l0aCBQQz0lcCwgRlA9JXBcbiIsICh2b2lkICopcGMsICh2b2lkICopZnApOworCWlmICghcGMgfHwgIWZwIHx8IChwYyAmIDMpIHx8IChmcCAmIDMpKSB7CisJCXByX2RlYnVnKCIgICAgSW52YWxpZCBzdGF0ZSBmb3IgdW53aW5kLCBhYm9ydGluZ1xuIik7CisJCXJldHVybjsKKwl9CisJZm9yICg7IHBjICE9IDA7KSB7CisJCXVuc2lnbmVkIGxvbmcgbmV4dF9mcCwgbmV4dF9wYyA9IDA7CisJCXVuc2lnbmVkIGxvbmcgcmV0dXJuX3RvID0gcGMgKyAgMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKTsKKwkJY29uc3Qgc3RydWN0IHRyYXBfaGFuZGxlcl9pbmZvICpoYW5kbGVyID0KKwkJCSZtaWNyb2JsYXplX3RyYXBfaGFuZGxlcnM7CisKKwkJLyogSXMgcHJldmlvdXMgZnVuY3Rpb24gdGhlIEhXIGV4Y2VwdGlvbiBoYW5kbGVyPyAqLworCQlpZiAoKHJldHVybl90byA+PSAodW5zaWduZWQgbG9uZykmX2h3X2V4Y2VwdGlvbl9oYW5kbGVyKQorCQkgICAgJiYocmV0dXJuX3RvIDwgKHVuc2lnbmVkIGxvbmcpJmV4X2hhbmRsZXJfdW5oYW5kbGVkKSkgeworCQkJLyoKKwkJCSAqIEhXIGV4Y2VwdGlvbiBoYW5kbGVyIGRvZXNuJ3Qgc2F2ZSBhbGwgcmVnaXN0ZXJzLAorCQkJICogc28gd2Ugb3Blbi1jb2RlIGEgc3BlY2lhbCBjYXNlIG9mIHVud2luZF90cmFwKCkKKwkJCSAqLworI2lmbmRlZiBDT05GSUdfTU1VCisJCQljb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncyA9CisJCQkJKGNvbnN0IHN0cnVjdCBwdF9yZWdzICopIGZwOworI2VuZGlmCisJCQlwcl9pbmZvKCJIVyBFWENFUFRJT05cbiIpOworI2lmbmRlZiBDT05GSUdfTU1VCisJCQltaWNyb2JsYXplX3Vud2luZF9pbm5lcih0YXNrLCByZWdzLT5yMTcgLSA0LAorCQkJCQkJZnAgKyBFWF9IQU5ETEVSX1NUQUNLX1NJWiwKKwkJCQkJCXJlZ3MtPnIxNSwgdHJhY2UpOworI2VuZGlmCisJCQlyZXR1cm47CisJCX0KKworCQkvKiBJcyBwcmV2aW91cyBmdW5jdGlvbiBhIHRyYXAgaGFuZGxlcj8gKi8KKwkJZm9yICg7IGhhbmRsZXItPnN0YXJ0X2FkZHI7ICsraGFuZGxlcikgeworCQkJaWYgKChyZXR1cm5fdG8gPj0gaGFuZGxlci0+c3RhcnRfYWRkcikKKwkJCSAgICAmJiAocmV0dXJuX3RvIDw9IGhhbmRsZXItPmVuZF9hZGRyKSkgeworCQkJCWlmICghdHJhY2UpCisJCQkJCXByX2luZm8oIiVzXG4iLCBoYW5kbGVyLT50cmFwX25hbWUpOworCQkJCXVud2luZF90cmFwKHRhc2ssIHBjLCBmcCwgdHJhY2UpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCQlwYyAtPSBvZnM7CisKKwkJaWYgKHRyYWNlKSB7CisjaWZkZWYgQ09ORklHX1NUQUNLVFJBQ0UKKwkJCWlmICh0cmFjZS0+c2tpcCA+IDApCisJCQkJdHJhY2UtPnNraXAtLTsKKwkJCWVsc2UKKwkJCQl0cmFjZS0+ZW50cmllc1t0cmFjZS0+bnJfZW50cmllcysrXSA9IHBjOworCisJCQlpZiAodHJhY2UtPm5yX2VudHJpZXMgPj0gdHJhY2UtPm1heF9lbnRyaWVzKQorCQkJCWJyZWFrOworI2VuZGlmCisJCX0gZWxzZSB7CisJCQkvKiBIYXZlIHdlIHJlYWNoZWQgdXNlcmxhbmQ/ICovCisJCQlpZiAodW5saWtlbHkocGMgPT0gdGFza19wdF9yZWdzKHRhc2spLT5wYykpIHsKKwkJCQlwcl9pbmZvKCJbPCVwPl0gUElEICVsdSBbJXNdXG4iLAorCQkJCQkodm9pZCAqKSBwYywKKwkJCQkJKHVuc2lnbmVkIGxvbmcpIHRhc2stPnBpZCwKKwkJCQkJdGFzay0+Y29tbSk7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UKKwkJCQlwcmludF9pcF9zeW0ocGMpOworCQl9CisKKwkJLyogU3RvcCB3aGVuIHdlIHJlYWNoIGFueXRoaW5nIG5vdCBwYXJ0IG9mIHRoZSBrZXJuZWwgKi8KKwkJaWYgKCFrZXJuZWxfdGV4dF9hZGRyZXNzKHBjKSkKKwkJCWJyZWFrOworCisJCWlmIChsb29rdXBfcHJldl9zdGFja19mcmFtZShmcCwgcGMsIGxlYWZfcmV0dXJuLCAmbmV4dF9mcCwKKwkJCQkJICAgICZuZXh0X3BjKSA9PSAwKSB7CisJCQlvZnMgPSBzaXplb2YodW5zaWduZWQgbG9uZyk7CisJCQlwYyA9IG5leHRfcGMgJiB+MzsKKwkJCWZwID0gbmV4dF9mcDsKKwkJCWxlYWZfcmV0dXJuID0gMDsKKwkJfSBlbHNlIHsKKwkJCXByX2RlYnVnKCIgICAgRmFpbGVkIHRvIGZpbmQgcHJldmlvdXMgc3RhY2sgZnJhbWVcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQlwcl9kZWJ1ZygiICAgIE5leHQgUEM9JXAsIG5leHQgRlA9JXBcbiIsCisJCQkgKHZvaWQgKiluZXh0X3BjLCAodm9pZCAqKW5leHRfZnApOworCX0KK30KKworLyoqCisgKiBtaWNyb2JsYXplX3Vud2luZCAtIFN0YWNrIHVud2luZGVyIGZvciBNaWNyb2JsYXplIChleHRlcm5hbCBlbnRyeSBwb2ludCkKKyAqIEB0YXNrICA6IFRhc2sgd2hvc2Ugc3RhY2sgd2UgYXJlIHRvIHVud2luZCAoTlVMTCA9PSBjdXJyZW50KQorICogQHRyYWNlIDogV2hlcmUgdG8gc3RvcmUgc3RhY2sgYmFja3RyYWNlIChQQyB2YWx1ZXMpLgorICoJICAgIE5VTEwgPT0gcHJpbnQgYmFja3RyYWNlIHRvIGtlcm5lbCBsb2cKKyAqLwordm9pZCBtaWNyb2JsYXplX3Vud2luZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UpCit7CisJaWYgKHRhc2spIHsKKwkJaWYgKHRhc2sgPT0gY3VycmVudCkgeworCQkJY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSB0YXNrX3B0X3JlZ3ModGFzayk7CisJCQltaWNyb2JsYXplX3Vud2luZF9pbm5lcih0YXNrLCByZWdzLT5wYywgcmVncy0+cjEsCisJCQkJCQlyZWdzLT5yMTUsIHRyYWNlKTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkX2luZm8gPQorCQkJCShzdHJ1Y3QgdGhyZWFkX2luZm8gKikodGFzay0+c3RhY2spOworCQkJY29uc3Qgc3RydWN0IGNwdV9jb250ZXh0ICpjcHVfY29udGV4dCA9CisJCQkJJnRocmVhZF9pbmZvLT5jcHVfY29udGV4dDsKKworCQkJbWljcm9ibGF6ZV91bndpbmRfaW5uZXIodGFzaywKKwkJCQkJCSh1bnNpZ25lZCBsb25nKSAmX3N3aXRjaF90bywKKwkJCQkJCWNwdV9jb250ZXh0LT5yMSwKKwkJCQkJCWNwdV9jb250ZXh0LT5yMTUsIHRyYWNlKTsKKwkJfQorCX0gZWxzZSB7CisJCXVuc2lnbmVkIGxvbmcgcGMsIGZwOworCisJCV9fYXNtX18gX192b2xhdGlsZV9fICgib3IgJTAsIHIxLCByMCIgOiAiPXIiIChmcCkpOworCisJCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJCSJicmxpZCAlMCwgMGY7IgorCQkJIm5vcDsiCisJCQkiMDoiCisJCQk6ICI9ciIgKHBjKQorCQkpOworCisJCS8qIFNpbmNlIHdlIGFyZSBub3QgYSBsZWFmIGZ1bmN0aW9uLCB1c2UgbGVhZl9yZXR1cm4gPSAwICovCisJCW1pY3JvYmxhemVfdW53aW5kX2lubmVyKGN1cnJlbnQsIHBjLCBmcCwgMCwgdHJhY2UpOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGRiNzJkNzEuLmEwOWYyOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTEwLDcgKzEwLDcgQEAKIAogT1VUUFVUX0ZPUk1BVCgiZWxmMzItbWljcm9ibGF6ZSIsICJlbGYzMi1taWNyb2JsYXplIiwgImVsZjMyLW1pY3JvYmxhemUiKQogT1VUUFVUX0FSQ0gobWljcm9ibGF6ZSkKLUVOVFJZKF9zdGFydCkKK0VOVFJZKG1pY3JvYmxhemVfc3RhcnQpCiAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CkBAIC0yMCw3ICsyMCw3IEBACiAKIFNFQ1RJT05TIHsKIAkuID0gQ09ORklHX0tFUk5FTF9TVEFSVDsKLQlfc3RhcnQgPSBDT05GSUdfS0VSTkVMX0JBU0VfQUREUjsKKwltaWNyb2JsYXplX3N0YXJ0ID0gQ09ORklHX0tFUk5FTF9CQVNFX0FERFI7CiAJLnRleHQgOiBBVChBRERSKC50ZXh0KSAtIExPQURfT0ZGU0VUKSB7CiAJCV90ZXh0ID0gLiA7CiAJCV9zdGV4dCA9IC4gOwpAQCAtNTUsNyArNTUsNyBAQAogCSAqLwogCS5zZGF0YTIgOiBBVChBRERSKC5zZGF0YTIpIC0gTE9BRF9PRkZTRVQpIHsKIAkJX3NzcncgPSAuOwotCQkuID0gQUxJR04oNDA5Nik7IC8qIHBhZ2UgYWxpZ25lZCB3aGVuIE1NVSB1c2VkIC0gb3JpZ2luIDB4OCAqLworCQkuID0gQUxJR04oUEFHRV9TSVpFKTsgLyogcGFnZSBhbGlnbmVkIHdoZW4gTU1VIHVzZWQgKi8KIAkJKiguc2RhdGEyKQogCS4gPSBBTElHTig4KTsKIAlfZXNzcncgPSAuOwpAQCAtNzAsNyArNzAsNyBAQAogCS8qIFJlc2VydmUgc29tZSBsb3cgUkFNIGZvciByMCBiYXNlZCBtZW1vcnkgcmVmZXJlbmNlcyAqLwogCS4gPSBBTElHTigweDQpIDsKIAlyMF9yYW0gPSAuIDsKLQkuID0gLiArICA0MDk2OwkvKiBhIHBhZ2Ugc2hvdWxkIGJlIGVub3VnaCAqLworCS4gPSAuICsgIFBBR0VfU0laRTsJLyogYSBwYWdlIHNob3VsZCBiZSBlbm91Z2ggKi8KIAogCS8qIFVuZGVyIHRoZSBtaWNyb2JsYXplIEFCSSwgLnNkYXRhIGFuZCAuc2JzcyBtdXN0IGJlIGNvbnRpZ3VvdXMgKi8KIAkuID0gQUxJR04oOCk7CkBAIC0xMjAsNyArMTIwLDcgQEAKIAogCV9faW5pdF9lbmRfYmVmb3JlX2luaXRyYW1mcyA9IC47CiAKLQkuaW5pdC5yYW1mcyBBTElHTig0MDk2KSA6IEFUKEFERFIoLmluaXQucmFtZnMpIC0gTE9BRF9PRkZTRVQpIHsKKwkuaW5pdC5yYW1mcyBBTElHTihQQUdFX1NJWkUpIDogQVQoQUREUiguaW5pdC5yYW1mcykgLSBMT0FEX09GRlNFVCkgewogCQlfX2luaXRyYW1mc19zdGFydCA9IC47CiAJCSooLmluaXQucmFtZnMpCiAJCV9faW5pdHJhbWZzX2VuZCA9IC47CkBAIC0xMzIsMTEgKzEzMiwxMSBAQAogICogc28gdGhhdCBfX2luaXRfZW5kID09IF9fYnNzX3N0YXJ0LiBUaGlzIHdpbGwgbWFrZSBpbWFnZS5lbGYKICAqIGNvbnNpc3RlbnQgd2l0aCB0aGUgaW1hZ2UuYmluCiAgKi8KLQkJLyogLiA9IEFMSUdOKDQwOTYpOyAqLworCQkvKiAuID0gQUxJR04oUEFHRV9TSVpFKTsgKi8KIAl9CiAJX19pbml0X2VuZCA9IC47CiAKLQkuYnNzIEFMSUdOICg0MDk2KSA6IEFUKEFERFIoLmJzcykgLSBMT0FEX09GRlNFVCkgeworCS5ic3MgQUxJR04gKFBBR0VfU0laRSkgOiBBVChBRERSKC5ic3MpIC0gTE9BRF9PRkZTRVQpIHsKIAkJLyogcGFnZSBhbGlnbmVkIHdoZW4gTU1VIHVzZWQgKi8KIAkJX19ic3Nfc3RhcnQgPSAuIDsKIAkJCSooLmJzcyopCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAkJX19ic3Nfc3RvcCA9IC4gOwogCQlfZWJzcyA9IC4gOwogCX0KLQkuID0gQUxJR04oNDA5Nik7CisJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJX2VuZCA9IC47CiAKIAlESVNDQVJEUwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL21tL2ZhdWx0LmMgYi9hcmNoL21pY3JvYmxhemUvbW0vZmF1bHQuYwppbmRleCBiYWI5MjI5Li41N2JkMmEwIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvbW0vZmF1bHQuYworKysgYi9hcmNoL21pY3JvYmxhemUvbW0vZmF1bHQuYwpAQCAtMzcsMTAgKzM3LDYgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2V4Y2VwdGlvbnMuaD4KIAotI2lmIGRlZmluZWQoQ09ORklHX0tHREIpCi1pbnQgZGVidWdnZXJfa2VybmVsX2ZhdWx0cyA9IDE7Ci0jZW5kaWYKLQogc3RhdGljIHVuc2lnbmVkIGxvbmcgcHRlX21pc3NlczsJLyogdXBkYXRlZCBieSBkb19wYWdlX2ZhdWx0KCkgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHB0ZV9lcnJvcnM7CS8qIHVwZGF0ZWQgYnkgZG9fcGFnZV9mYXVsdCgpICovCiAKQEAgLTgxLDEwICs3Nyw2IEBACiAJfQogCiAJLyoga2VybmVsIGhhcyBhY2Nlc3NlZCBhIGJhZCBhcmVhICovCi0jaWYgZGVmaW5lZChDT05GSUdfS0dEQikKLQlpZiAoZGVidWdnZXJfa2VybmVsX2ZhdWx0cykKLQkJZGVidWdnZXIocmVncyk7Ci0jZW5kaWYKIAlkaWUoImtlcm5lbCBhY2Nlc3Mgb2YgYmFkIGFyZWEiLCByZWdzLCBzaWcpOwogfQogCkBAIC0xMTUsMTMgKzEwNyw2IEBACiAJaWYgKChlcnJvcl9jb2RlICYgMHgxMykgPT0gMHgxMyB8fCAoZXJyb3JfY29kZSAmIDB4MTEpID09IDB4MTEpCiAJCWlzX3dyaXRlID0gMDsKIAotI2lmIGRlZmluZWQoQ09ORklHX0tHREIpCi0JaWYgKGRlYnVnZ2VyX2ZhdWx0X2hhbmRsZXIgJiYgcmVncy0+dHJhcCA9PSAweDMwMCkgewotCQlkZWJ1Z2dlcl9mYXVsdF9oYW5kbGVyKHJlZ3MpOwotCQlyZXR1cm47Ci0JfQotI2VuZGlmIC8qIENPTkZJR19LR0RCICovCi0KIAlpZiAodW5saWtlbHkoaW5fYXRvbWljKCkgfHwgIW1tKSkgewogCQlpZiAoa2VybmVsX21vZGUocmVncykpCiAJCQlnb3RvIGJhZF9hcmVhX25vc2VtYXBob3JlOwpAQCAtMjI2LDcgKzIxMSw2IEBACiAJICogbWFrZSBzdXJlIHdlIGV4aXQgZ3JhY2VmdWxseSByYXRoZXIgdGhhbiBlbmRsZXNzbHkgcmVkbwogCSAqIHRoZSBmYXVsdC4KIAkgKi8KLXN1cnZpdmU6CiAJZmF1bHQgPSBoYW5kbGVfbW1fZmF1bHQobW0sIHZtYSwgYWRkcmVzcywgaXNfd3JpdGUgPyBGQVVMVF9GTEFHX1dSSVRFIDogMCk7CiAJaWYgKHVubGlrZWx5KGZhdWx0ICYgVk1fRkFVTFRfRVJST1IpKSB7CiAJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmMgYi9hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jCmluZGV4IGNjYTM1NzkuLjY1ZWIwMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmMKKysrIGIvYXJjaC9taWNyb2JsYXplL21tL2luaXQuYwpAQCAtMTAsNyArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1iLmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPiAvKiBtZW1faW5pdCAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KQEAgLTc2LDEwICs3NiwxMCBAQAogCXUzMiBrZXJuZWxfYWxpZ25fc3RhcnQsIGtlcm5lbF9hbGlnbl9zaXplOwogCiAJLyogRmluZCBtYWluIG1lbW9yeSB3aGVyZSBpcyB0aGUga2VybmVsICovCi0JZm9yIChpID0gMDsgaSA8IGxtYi5tZW1vcnkuY250OyBpKyspIHsKLQkJbWVtb3J5X3N0YXJ0ID0gKHUzMikgbG1iLm1lbW9yeS5yZWdpb25baV0uYmFzZTsKLQkJbWVtb3J5X2VuZCA9ICh1MzIpIGxtYi5tZW1vcnkucmVnaW9uW2ldLmJhc2UKLQkJCQkrICh1MzIpIGxtYi5tZW1vcnkucmVnaW9uW2ldLnNpemU7CisJZm9yIChpID0gMDsgaSA8IG1lbWJsb2NrLm1lbW9yeS5jbnQ7IGkrKykgeworCQltZW1vcnlfc3RhcnQgPSAodTMyKSBtZW1ibG9jay5tZW1vcnkucmVnaW9uW2ldLmJhc2U7CisJCW1lbW9yeV9lbmQgPSAodTMyKSBtZW1ibG9jay5tZW1vcnkucmVnaW9uW2ldLmJhc2UKKwkJCQkrICh1MzIpIG1lbWJsb2NrLm1lbW9yeS5yZWdpb25baV0uc2l6ZTsKIAkJaWYgKChtZW1vcnlfc3RhcnQgPD0gKHUzMilfdGV4dCkgJiYKIAkJCQkJKCh1MzIpX3RleHQgPD0gbWVtb3J5X2VuZCkpIHsKIAkJCW1lbW9yeV9zaXplID0gbWVtb3J5X2VuZCAtIG1lbW9yeV9zdGFydDsKQEAgLTEwMCw3ICsxMDAsNyBAQAogCWtlcm5lbF9hbGlnbl9zdGFydCA9IFBBR0VfRE9XTigodTMyKV90ZXh0KTsKIAkvKiBBTElHTiBjYW4gYmUgcmVtb3ZlIGJlY2F1c2UgX2VuZCBpbiB2bWxpbnV4Lmxkcy5TIGlzIGFsaWduICovCiAJa2VybmVsX2FsaWduX3NpemUgPSBQQUdFX1VQKCh1MzIpa2xpbWl0KSAtIGtlcm5lbF9hbGlnbl9zdGFydDsKLQlsbWJfcmVzZXJ2ZShrZXJuZWxfYWxpZ25fc3RhcnQsIGtlcm5lbF9hbGlnbl9zaXplKTsKKwltZW1ibG9ja19yZXNlcnZlKGtlcm5lbF9hbGlnbl9zdGFydCwga2VybmVsX2FsaWduX3NpemUpOwogCXByaW50ayhLRVJOX0lORk8gIiVzOiBrZXJuZWwgYWRkcj0weCUwOHgtMHglMDh4IHNpemU9MHglMDh4XG4iLAogCQlfX2Z1bmNfXywga2VybmVsX2FsaWduX3N0YXJ0LCBrZXJuZWxfYWxpZ25fc3RhcnQKIAkJCSsga2VybmVsX2FsaWduX3NpemUsIGtlcm5lbF9hbGlnbl9zaXplKTsKQEAgLTEzNCwyNSArMTM0LDIwIEBACiAJICogZm9yIDRHQiBvZiBtZW1vcnksIHVzaW5nIDRrQiBwYWdlcyksIHBsdXMgMSBwYWdlCiAJICogKGluIGNhc2UgdGhlIGFkZHJlc3MgaXNuJ3QgcGFnZS1hbGlnbmVkKS4KIAkgKi8KLSNpZm5kZWYgQ09ORklHX01NVQotCW1hcF9zaXplID0gaW5pdF9ib290bWVtX25vZGUoTk9ERV9EQVRBKDApLCBQRk5fVVAoVE9QSFlTKCh1MzIpa2xpbWl0KSksCi0JCQkJCW1pbl9sb3dfcGZuLCBtYXhfbG93X3Bmbik7Ci0jZWxzZQotCW1hcF9zaXplID0gaW5pdF9ib290bWVtX25vZGUoJmNvbnRpZ19wYWdlX2RhdGEsCisJbWFwX3NpemUgPSBpbml0X2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksCiAJCVBGTl9VUChUT1BIWVMoKHUzMilrbGltaXQpKSwgbWluX2xvd19wZm4sIG1heF9sb3dfcGZuKTsKLSNlbmRpZgotCWxtYl9yZXNlcnZlKFBGTl9VUChUT1BIWVMoKHUzMilrbGltaXQpKSA8PCBQQUdFX1NISUZULCBtYXBfc2l6ZSk7CisJbWVtYmxvY2tfcmVzZXJ2ZShQRk5fVVAoVE9QSFlTKCh1MzIpa2xpbWl0KSkgPDwgUEFHRV9TSElGVCwgbWFwX3NpemUpOwogCiAJLyogZnJlZSBib290bWVtIGlzIHdob2xlIG1haW4gbWVtb3J5ICovCiAJZnJlZV9ib290bWVtKG1lbW9yeV9zdGFydCwgbWVtb3J5X3NpemUpOwogCiAJLyogcmVzZXJ2ZSBhbGxvY2F0ZSBibG9ja3MgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbG1iLnJlc2VydmVkLmNudDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG1lbWJsb2NrLnJlc2VydmVkLmNudDsgaSsrKSB7CiAJCXByX2RlYnVnKCJyZXNlcnZlZCAlZCAtIDB4JTA4eC0weCUwOHhcbiIsIGksCi0JCQkodTMyKSBsbWIucmVzZXJ2ZWQucmVnaW9uW2ldLmJhc2UsCi0JCQkodTMyKSBsbWJfc2l6ZV9ieXRlcygmbG1iLnJlc2VydmVkLCBpKSk7Ci0JCXJlc2VydmVfYm9vdG1lbShsbWIucmVzZXJ2ZWQucmVnaW9uW2ldLmJhc2UsCi0JCQlsbWJfc2l6ZV9ieXRlcygmbG1iLnJlc2VydmVkLCBpKSAtIDEsIEJPT1RNRU1fREVGQVVMVCk7CisJCQkodTMyKSBtZW1ibG9jay5yZXNlcnZlZC5yZWdpb25baV0uYmFzZSwKKwkJCSh1MzIpIG1lbWJsb2NrX3NpemVfYnl0ZXMoJm1lbWJsb2NrLnJlc2VydmVkLCBpKSk7CisJCXJlc2VydmVfYm9vdG1lbShtZW1ibG9jay5yZXNlcnZlZC5yZWdpb25baV0uYmFzZSwKKwkJCW1lbWJsb2NrX3NpemVfYnl0ZXMoJm1lbWJsb2NrLnJlc2VydmVkLCBpKSAtIDEsIEJPT1RNRU1fREVGQVVMVCk7CiAJfQogI2lmZGVmIENPTkZJR19NTVUKIAlpbml0X2Jvb3RtZW1fZG9uZSA9IDE7CkBAIC0yMzUsNyArMjMwLDcgQEAKIAkJaWYgKG1heG1lbSAmJiBtZW1vcnlfc2l6ZSA+IG1heG1lbSkgewogCQkJbWVtb3J5X3NpemUgPSBtYXhtZW07CiAJCQltZW1vcnlfZW5kID0gbWVtb3J5X3N0YXJ0ICsgbWVtb3J5X3NpemU7Ci0JCQlsbWIubWVtb3J5LnJlZ2lvblswXS5zaXplID0gbWVtb3J5X3NpemU7CisJCQltZW1ibG9jay5tZW1vcnkucmVnaW9uWzBdLnNpemUgPSBtZW1vcnlfc2l6ZTsKIAkJfQogCX0KIH0KQEAgLTI3MywxOSArMjY4LDE5IEBACiB7CiAJdW5zaWduZWQgaW50IGtzdGFydCwga3NpemU7CiAKLQlpZiAoIWxtYi5yZXNlcnZlZC5jbnQpIHsKKwlpZiAoIW1lbWJsb2NrLnJlc2VydmVkLmNudCkgewogCQlwcmludGsoS0VSTl9FTUVSRyAiRXJyb3IgbWVtb3J5IGNvdW50XG4iKTsKIAkJbWFjaGluZV9yZXN0YXJ0KE5VTEwpOwogCX0KIAotCWlmICgodTMyKSBsbWIubWVtb3J5LnJlZ2lvblswXS5zaXplIDwgMHgxMDAwMDAwKSB7CisJaWYgKCh1MzIpIG1lbWJsb2NrLm1lbW9yeS5yZWdpb25bMF0uc2l6ZSA8IDB4MTAwMDAwMCkgewogCQlwcmludGsoS0VSTl9FTUVSRyAiTWVtb3J5IG11c3QgYmUgZ3JlYXRlciB0aGFuIDE2TUJcbiIpOwogCQltYWNoaW5lX3Jlc3RhcnQoTlVMTCk7CiAJfQogCS8qIEZpbmQgbWFpbiBtZW1vcnkgd2hlcmUgdGhlIGtlcm5lbCBpcyAqLwotCW1lbW9yeV9zdGFydCA9ICh1MzIpIGxtYi5tZW1vcnkucmVnaW9uWzBdLmJhc2U7Ci0JbWVtb3J5X2VuZCA9ICh1MzIpIGxtYi5tZW1vcnkucmVnaW9uWzBdLmJhc2UgKwotCQkJCSh1MzIpIGxtYi5tZW1vcnkucmVnaW9uWzBdLnNpemU7CisJbWVtb3J5X3N0YXJ0ID0gKHUzMikgbWVtYmxvY2subWVtb3J5LnJlZ2lvblswXS5iYXNlOworCW1lbW9yeV9lbmQgPSAodTMyKSBtZW1ibG9jay5tZW1vcnkucmVnaW9uWzBdLmJhc2UgKworCQkJCSh1MzIpIG1lbWJsb2NrLm1lbW9yeS5yZWdpb25bMF0uc2l6ZTsKIAltZW1vcnlfc2l6ZSA9IG1lbW9yeV9lbmQgLSBtZW1vcnlfc3RhcnQ7CiAKIAltbV9jbWRsaW5lX3NldHVwKCk7IC8qIEZJWE1FIHBhcnNlIGFyZ3MgZnJvbSBjb21tYW5kIGxpbmUgLSBub3QgdXNlZCAqLwpAQCAtMjk3LDcgKzI5Miw3IEBACiAJa3N0YXJ0ID0gX19wYShDT05GSUdfS0VSTkVMX1NUQVJUKTsgLyoga2VybmVsIHN0YXJ0ICovCiAJLyoga2VybmVsIHNpemUgKi8KIAlrc2l6ZSA9IFBBR0VfQUxJR04oKCh1MzIpX2VuZCAtICh1MzIpQ09ORklHX0tFUk5FTF9TVEFSVCkpOwotCWxtYl9yZXNlcnZlKGtzdGFydCwga3NpemUpOworCW1lbWJsb2NrX3Jlc2VydmUoa3N0YXJ0LCBrc2l6ZSk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lOSVRSRCkKIAkvKiBSZW1vdmUgdGhlIGluaXQgUkFNIGRpc2sgZnJvbSB0aGUgYXZhaWxhYmxlIG1lbW9yeS4gKi8KQEAgLTMzNSw3ICszMzAsNyBAQAogCQkgKiBNZW0gc3RhcnQgKyAzMk1CIC0+IGhlcmUgaXMgbGltaXQKIAkJICogYmVjYXVzZSBvZiBtZW0gbWFwcGluZyBmcm9tIGhlYWQuUwogCQkgKi8KLQkJcCA9IF9fdmEobG1iX2FsbG9jX2Jhc2UoUEFHRV9TSVpFLCBQQUdFX1NJWkUsCisJCXAgPSBfX3ZhKG1lbWJsb2NrX2FsbG9jX2Jhc2UoUEFHRV9TSVpFLCBQQUdFX1NJWkUsCiAJCQkJCW1lbW9yeV9zdGFydCArIDB4MjAwMDAwMCkpOwogCX0KIAlyZXR1cm4gcDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LYnVpbGQgYi9hcmNoL21pcHMvS2J1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMjJkNjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvS2J1aWxkCkBAIC0wLDAgKzEsMTUgQEAKKyMgRmFpbCBvbiB3YXJuaW5ncyAtIGFsc28gZm9yIGZpbGVzIHJlZmVyZW5jZWQgaW4gc3ViZGlycworIyAtV2Vycm9yIGNhbiBiZSBkaXNhYmxlZCBmb3Igc3BlY2lmaWMgZmlsZXMgdXNpbmc6CisjIENGTEFHU188ZmlsZS5vPiA6PSAtV25vLWVycm9yCitzdWJkaXItY2NmbGFncy15IDo9IC1XZXJyb3IKKworIyBwbGF0Zm9ybSBzcGVjaWZpYyBkZWZpbml0aW9ucworaW5jbHVkZSBhcmNoL21pcHMvS2J1aWxkLnBsYXRmb3Jtcworb2JqLXkgOj0gJChwbGF0Zm9ybS15KQorCisjIG1pcHMgb2JqZWN0IGZpbGVzCisjIFRoZSBvYmplY3QgZmlsZXMgYXJlIGxpbmtlZCBhcyBjb3JlLXkgZmlsZXMgd291bGQgYmUgbGlua2VkCisKK29iai15ICs9IGtlcm5lbC8KK29iai15ICs9IG1tLworb2JqLXkgKz0gbWF0aC1lbXUvCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2J1aWxkLnBsYXRmb3JtcyBiL2FyY2gvbWlwcy9LYnVpbGQucGxhdGZvcm1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NDM5YjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvS2J1aWxkLnBsYXRmb3JtcwpAQCAtMCwwICsxLDMyIEBACisjIEFsbCBwbGF0Zm9ybXMgbGlzdGVkIGluIGFscGhhYmV0aWMgb3JkZXIKKworcGxhdGZvcm1zICs9IGFsY2hlbXkKK3BsYXRmb3JtcyArPSBhcjcKK3BsYXRmb3JtcyArPSBiY200N3h4CitwbGF0Zm9ybXMgKz0gYmNtNjN4eAorcGxhdGZvcm1zICs9IGNhdml1bS1vY3Rlb24KK3BsYXRmb3JtcyArPSBjb2JhbHQKK3BsYXRmb3JtcyArPSBkZWMKK3BsYXRmb3JtcyArPSBlbW1hCitwbGF0Zm9ybXMgKz0gamF6egorcGxhdGZvcm1zICs9IGp6NDc0MAorcGxhdGZvcm1zICs9IGxhc2F0CitwbGF0Zm9ybXMgKz0gbG9vbmdzb24KK3BsYXRmb3JtcyArPSBtaXBzc2ltCitwbGF0Zm9ybXMgKz0gbXRpLW1hbHRhCitwbGF0Zm9ybXMgKz0gcG1jLXNpZXJyYQorcGxhdGZvcm1zICs9IHBueDgzM3gKK3BsYXRmb3JtcyArPSBwbng4NTUwCitwbGF0Zm9ybXMgKz0gcG93ZXJ0dgorcGxhdGZvcm1zICs9IHJiNTMyCitwbGF0Zm9ybXMgKz0gc2dpLWlwMjIKK3BsYXRmb3JtcyArPSBzZ2ktaXAyNworcGxhdGZvcm1zICs9IHNnaS1pcDMyCitwbGF0Zm9ybXMgKz0gc2lieXRlCitwbGF0Zm9ybXMgKz0gc25pCitwbGF0Zm9ybXMgKz0gdHh4OQorcGxhdGZvcm1zICs9IHZyNDF4eAorcGxhdGZvcm1zICs9IHdycHBtYworCisjIGluY2x1ZGUgdGhlIHBsYXRmb3JtIHNwZWNpZmljIGZpbGVzCitpbmNsdWRlICQocGF0c3Vic3QgJSwgJChzcmN0cmVlKS9hcmNoL21pcHMvJS9QbGF0Zm9ybSwgJChwbGF0Zm9ybXMpKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL0tjb25maWcgYi9hcmNoL21pcHMvS2NvbmZpZwppbmRleCBjZGFhZTk0Li4zYWQ1OWRkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvS2NvbmZpZworKysgYi9hcmNoL21pcHMvS2NvbmZpZwpAQCAtMTAsNiArMTAsOCBAQAogCXNlbGVjdCBIQVZFX0RZTkFNSUNfRlRSQUNFCiAJc2VsZWN0IEhBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVIKKwlzZWxlY3QgSEFWRV9LUFJPQkVTCisJc2VsZWN0IEhBVkVfS1JFVFBST0JFUwogCXNlbGVjdCBSVENfTElCIGlmICFNQUNIX0xPT05HU09OCiAKIG1haW5tZW51ICJMaW51eC9NSVBTIEtlcm5lbCBDb25maWd1cmF0aW9uIgpAQCAtMjMsOCArMjUsMTcgQEAKIAlwcm9tcHQgIlN5c3RlbSB0eXBlIgogCWRlZmF1bHQgU0dJX0lQMjIKIAotY29uZmlnIE1BQ0hfQUxDSEVNWQorY29uZmlnIE1JUFNfQUxDSEVNWQogCWJvb2wgIkFsY2hlbXkgcHJvY2Vzc29yIGJhc2VkIG1hY2hpbmVzIgorCXNlbGVjdCA2NEJJVF9QSFlTX0FERFIKKwlzZWxlY3QgQ0VWVF9SNEtfTElCCisJc2VsZWN0IENTUkNfUjRLX0xJQgorCXNlbGVjdCBJUlFfQ1BVCisJc2VsZWN0IFNZU19IQVNfQ1BVX01JUFMzMl9SMQorCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCisJc2VsZWN0IFNZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OCisJc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQgogCXNlbGVjdCBTWVNfU1VQUE9SVFNfWkJPT1QKIAogY29uZmlnIEFSNwpAQCAtNjIsNiArNzMsNyBAQAogCXNlbGVjdCBTU0JfRFJJVkVSX01JUFMKIAlzZWxlY3QgU1NCX0RSSVZFUl9FWFRJRgogCXNlbGVjdCBTU0JfRU1CRURERUQKKwlzZWxlY3QgU1NCX0I0M19QQ0lfQlJJREdFIGlmIFBDSQogCXNlbGVjdCBTU0JfUENJQ09SRV9IT1NUTU9ERSBpZiBQQ0kKIAlzZWxlY3QgR0VORVJJQ19HUElPCiAJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCkBAIC0xNjIsNiArMTc0LDE4IEBACiAJIE1lbWJlcnMgaW5jbHVkZSB0aGUgQWNlciBQSUNBLCBNSVBTIE1hZ251bSA0MDAwLCBNSVBTIE1pbGxlbm5pdW0gYW5kCiAJIE9saXZldHRpIE03MDAtMTAgd29ya3N0YXRpb25zLgogCitjb25maWcgTUFDSF9KWjQ3NDAKKwlib29sICJJbmdlbmljIEpaNDc0MCBiYXNlZCBtYWNoaW5lcyIKKwlzZWxlY3QgU1lTX0hBU19DUFVfTUlQUzMyX1IxCisJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCisJc2VsZWN0IElSUV9DUFUKKwlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCisJc2VsZWN0IEhBVkVfUFdNCisKIGNvbmZpZyBMQVNBVAogCWJvb2wgIkxBU0FUIE5ldHdvcmtzIHBsYXRmb3JtcyIKIAlzZWxlY3QgQ0VWVF9SNEsKQEAgLTY4Niw2ICs3MTAsNyBAQAogc291cmNlICJhcmNoL21pcHMvYWxjaGVteS9LY29uZmlnIgogc291cmNlICJhcmNoL21pcHMvYmNtNjN4eC9LY29uZmlnIgogc291cmNlICJhcmNoL21pcHMvamF6ei9LY29uZmlnIgorc291cmNlICJhcmNoL21pcHMvano0NzQwL0tjb25maWciCiBzb3VyY2UgImFyY2gvbWlwcy9sYXNhdC9LY29uZmlnIgogc291cmNlICJhcmNoL21pcHMvcG1jLXNpZXJyYS9LY29uZmlnIgogc291cmNlICJhcmNoL21pcHMvcG93ZXJ0di9LY29uZmlnIgpAQCAtNzMzLDEwICs3NTgsNiBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAotY29uZmlnIEdFTkVSSUNfVElNRQotCWJvb2wKLQlkZWZhdWx0IHkKLQogY29uZmlnIEdFTkVSSUNfQ01PU19VUERBVEUKIAlib29sCiAJZGVmYXVsdCB5CkBAIC04OTIsNiArOTEzLDkgQEAKIAogZW5kY2hvaWNlCiAKK2NvbmZpZyBFWFBPUlRfVUFTTQorCWJvb2wKKwogY29uZmlnIFNZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OCiAJYm9vbAogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvTWFrZWZpbGUgYi9hcmNoL21pcHMvTWFrZWZpbGUKaW5kZXggMGI5YzAxYS4uZjRhNGI2NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9NYWtlZmlsZQpAQCAtOTMsNyArOTMsOCBAQAogY2ZsYWdzLXkJCQkrPSAtRyAwIC1tbm8tYWJpY2FsbHMgLWZuby1waWMgLXBpcGUKIGNmbGFncy15CQkJKz0gLW1zb2Z0LWZsb2F0CiBMREZMQUdTX3ZtbGludXgJCQkrPSAtRyAwIC1zdGF0aWMgLW4gLW5vc3RkbGliCi1NT0RGTEFHUwkJCSs9IC1tbG9uZy1jYWxscworS0JVSUxEX0FGTEFHU19NT0RVTEUJCSs9IC1tbG9uZy1jYWxscworS0JVSUxEX0NGTEFHU19NT0RVTEUJCSs9IC1tbG9uZy1jYWxscwogCiBjZmxhZ3MteSArPSAtZmZyZWVzdGFuZGluZwogCkBAIC0xMzAsMjYgKzEzMSw2IEBACiBjZmxhZ3MtJChDT05GSUdfQ1BVX1ZSNDFYWCkJKz0gLW1hcmNoPXI0MTAwIC1XYSwtLXRyYXAKIGNmbGFncy0kKENPTkZJR19DUFVfUjRYMDApCSs9IC1tYXJjaD1yNDYwMCAtV2EsLS10cmFwCiBjZmxhZ3MtJChDT05GSUdfQ1BVX1RYNDlYWCkJKz0gLW1hcmNoPXI0NjAwIC1XYSwtLXRyYXAKLSMgb25seSBnY2MgPj0gNC40IGhhdmUgdGhlIGxvb25nc29uLXNwZWNpZmljIHN1cHBvcnQKLWNmbGFncy0kKENPTkZJR19DUFVfTE9PTkdTT04yKQkrPSAtV2EsLS10cmFwCi1jZmxhZ3MtJChDT05GSUdfQ1BVX0xPT05HU09OMkUpICs9IFwKLQkkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1sb29uZ3NvbjJlLC1tYXJjaD1yNDYwMCkKLWNmbGFncy0kKENPTkZJR19DUFVfTE9PTkdTT04yRikgKz0gXAotCSQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPWxvb25nc29uMmYsLW1hcmNoPXI0NjAwKQotIyBlbmFibGUgdGhlIHdvcmthcm91bmRzIGZvciBsb29uZ3NvbjJmCi1pZmRlZiBDT05GSUdfQ1BVX0xPT05HU09OMkZfV09SS0FST1VORFMKLSAgaWZlcSAoJChjYWxsIGFzLW9wdGlvbiwtV2EkKGNvbW1hKS1tZml4LWxvb25nc29uMmYtbm9wLCksKQotICAgICQoZXJyb3Igb25seSBiaW51dGlscyA+PSAyLjIwLjIgaGF2ZSBuZWVkZWQgb3B0aW9uIC1tZml4LWxvb25nc29uMmYtbm9wKQotICBlbHNlCi0gICAgY2ZsYWdzLSQoQ09ORklHX0NQVV9OT1BfV09SS0FST1VORFMpICs9IC1XYSQoY29tbWEpLW1maXgtbG9vbmdzb24yZi1ub3AKLSAgZW5kaWYKLSAgaWZlcSAoJChjYWxsIGFzLW9wdGlvbiwtV2EkKGNvbW1hKS1tZml4LWxvb25nc29uMmYtanVtcCwpLCkKLSAgICAkKGVycm9yIG9ubHkgYmludXRpbHMgPj0gMi4yMC4yIGhhdmUgbmVlZGVkIG9wdGlvbiAtbWZpeC1sb29uZ3NvbjJmLWp1bXApCi0gIGVsc2UKLSAgICBjZmxhZ3MtJChDT05GSUdfQ1BVX0pVTVBfV09SS0FST1VORFMpICs9IC1XYSQoY29tbWEpLW1maXgtbG9vbmdzb24yZi1qdW1wCi0gIGVuZGlmCi1lbmRpZgotCiBjZmxhZ3MtJChDT05GSUdfQ1BVX01JUFMzMl9SMSkJKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9bWlwczMyLC1taXBzMzIgLVVfTUlQU19JU0EgLURfTUlQU19JU0E9X01JUFNfSVNBX01JUFMzMikgXAogCQkJLVdhLC1taXBzMzIgLVdhLC0tdHJhcAogY2ZsYWdzLSQoQ09ORklHX0NQVV9NSVBTMzJfUjIpCSs9ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPW1pcHMzMnIyLC1taXBzMzJyMiAtVV9NSVBTX0lTQSAtRF9NSVBTX0lTQT1fTUlQU19JU0FfTUlQUzMyKSBcCkBAIC0xODUsNyArMTY2LDggQEAKIAogaWZkZWYgQ09ORklHX0NQVV9TQjEKIGlmZGVmIENPTkZJR19TQjFfUEFTU18xX1dPUktBUk9VTkRTCi1NT0RGTEFHUwkrPSAtbXNiMS1wYXNzMS13b3JrYXJvdW5kcworS0JVSUxEX0FGTEFHU19NT0RVTEUgKz0gLW1zYjEtcGFzczEtd29ya2Fyb3VuZHMKK0tCVUlMRF9DRkxBR1NfTU9EVUxFICs9IC1tc2IxLXBhc3MxLXdvcmthcm91bmRzCiBlbmRpZgogZW5kaWYKIApAQCAtMjA5LDQ1NSArMTkxLDcgQEAKICMKICMgQm9hcmQtZGVwZW5kZW50IG9wdGlvbnMgYW5kIGV4dHJhIGZpbGVzCiAjCi0KLSMKLSMgVGV4YXMgSW5zdHJ1bWVudHMgQVI3Ci0jCi1jb3JlLSQoQ09ORklHX0FSNykJCSs9IGFyY2gvbWlwcy9hcjcvCi1jZmxhZ3MtJChDT05GSUdfQVI3KQkJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWFyNwotbG9hZC0kKENPTkZJR19BUjcpCQkrPSAweGZmZmZmZmZmOTQxMDAwMDAKLQotIwotIyBBY2VyIFBJQ0EgNjEsIE1pcHMgTWFnbnVtIDQwMDAgYW5kIE9saXZldHRpIE03MDAuCi0jCi1jb3JlLSQoQ09ORklHX01BQ0hfSkFaWikJKz0gYXJjaC9taXBzL2phenovCi1jZmxhZ3MtJChDT05GSUdfTUFDSF9KQVpaKQkrPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtamF6egotbG9hZC0kKENPTkZJR19NQUNIX0pBWlopCSs9IDB4ZmZmZmZmZmY4MDA4MDAwMAotCi0jCi0jIENvbW1vbiBBbGNoZW15IEF1MXgwMCBzdHVmZgotIwotY29yZS0kKENPTkZJR19TT0NfQVUxWDAwKQkrPSBhcmNoL21pcHMvYWxjaGVteS9jb21tb24vCi0KLSMKLSMgQU1EIEFsY2hlbXkgUGIxMDAwIGV2YWwgYm9hcmQKLSMKLWNvcmUtJChDT05GSUdfTUlQU19QQjEwMDApCSs9IGFyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy8KLWNmbGFncy0kKENPTkZJR19NSVBTX1BCMTAwMCkJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMAotbG9hZC0kKENPTkZJR19NSVBTX1BCMTAwMCkJKz0gMHhmZmZmZmZmZjgwMTAwMDAwCi0KLSMKLSMgQU1EIEFsY2hlbXkgUGIxMTAwIGV2YWwgYm9hcmQKLSMKLWNvcmUtJChDT05GSUdfTUlQU19QQjExMDApCSs9IGFyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy8KLWNmbGFncy0kKENPTkZJR19NSVBTX1BCMTEwMCkJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMAotbG9hZC0kKENPTkZJR19NSVBTX1BCMTEwMCkJKz0gMHhmZmZmZmZmZjgwMTAwMDAwCi0KLSMKLSMgQU1EIEFsY2hlbXkgUGIxNTAwIGV2YWwgYm9hcmQKLSMKLWNvcmUtJChDT05GSUdfTUlQU19QQjE1MDApCSs9IGFyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy8KLWNmbGFncy0kKENPTkZJR19NSVBTX1BCMTUwMCkJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMAotbG9hZC0kKENPTkZJR19NSVBTX1BCMTUwMCkJKz0gMHhmZmZmZmZmZjgwMTAwMDAwCi0KLSMKLSMgQU1EIEFsY2hlbXkgUGIxNTUwIGV2YWwgYm9hcmQKLSMKLWNvcmUtJChDT05GSUdfTUlQU19QQjE1NTApCSs9IGFyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy8KLWNmbGFncy0kKENPTkZJR19NSVBTX1BCMTU1MCkJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMAotbG9hZC0kKENPTkZJR19NSVBTX1BCMTU1MCkJKz0gMHhmZmZmZmZmZjgwMTAwMDAwCi0KLSMKLSMgQU1EIEFsY2hlbXkgUGIxMjAwIGV2YWwgYm9hcmQKLSMKLWNvcmUtJChDT05GSUdfTUlQU19QQjEyMDApCSs9IGFyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy8KLWNmbGFncy0kKENPTkZJR19NSVBTX1BCMTIwMCkJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMAotbG9hZC0kKENPTkZJR19NSVBTX1BCMTIwMCkJKz0gMHhmZmZmZmZmZjgwMTAwMDAwCi0KLSMKLSMgQU1EIEFsY2hlbXkgRGIxMDAwIGV2YWwgYm9hcmQKLSMKLWNvcmUtJChDT05GSUdfTUlQU19EQjEwMDApCSs9IGFyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy8KLWNmbGFncy0kKENPTkZJR19NSVBTX0RCMTAwMCkJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWRiMXgwMAotbG9hZC0kKENPTkZJR19NSVBTX0RCMTAwMCkJKz0gMHhmZmZmZmZmZjgwMTAwMDAwCi0KLSMKLSMgQU1EIEFsY2hlbXkgRGIxMTAwIGV2YWwgYm9hcmQKLSMKLWNvcmUtJChDT05GSUdfTUlQU19EQjExMDApCSs9IGFyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy8KLWNmbGFncy0kKENPTkZJR19NSVBTX0RCMTEwMCkJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWRiMXgwMAotbG9hZC0kKENPTkZJR19NSVBTX0RCMTEwMCkJKz0gMHhmZmZmZmZmZjgwMTAwMDAwCi0KLSMKLSMgQU1EIEFsY2hlbXkgRGIxNTAwIGV2YWwgYm9hcmQKLSMKLWNvcmUtJChDT05GSUdfTUlQU19EQjE1MDApCSs9IGFyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy8KLWNmbGFncy0kKENPTkZJR19NSVBTX0RCMTUwMCkJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWRiMXgwMAotbG9hZC0kKENPTkZJR19NSVBTX0RCMTUwMCkJKz0gMHhmZmZmZmZmZjgwMTAwMDAwCi0KLSMKLSMgQU1EIEFsY2hlbXkgRGIxNTUwIGV2YWwgYm9hcmQKLSMKLWNvcmUtJChDT05GSUdfTUlQU19EQjE1NTApCSs9IGFyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy8KLWNmbGFncy0kKENPTkZJR19NSVBTX0RCMTU1MCkJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWRiMXgwMAotbG9hZC0kKENPTkZJR19NSVBTX0RCMTU1MCkJKz0gMHhmZmZmZmZmZjgwMTAwMDAwCi0KLSMKLSMgQU1EIEFsY2hlbXkgRGIxMjAwIGV2YWwgYm9hcmQKLSMKLWNvcmUtJChDT05GSUdfTUlQU19EQjEyMDApCSs9IGFyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy8KLWNmbGFncy0kKENPTkZJR19NSVBTX0RCMTIwMCkJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWRiMXgwMAotbG9hZC0kKENPTkZJR19NSVBTX0RCMTIwMCkJKz0gMHhmZmZmZmZmZjgwMTAwMDAwCi0KLSMKLSMgQU1EIEFsY2hlbXkgQm9zcG9ydXMgZXZhbCBib2FyZAotIwotY29yZS0kKENPTkZJR19NSVBTX0JPU1BPUlVTKQkrPSBhcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvCi1jZmxhZ3MtJChDT05GSUdfTUlQU19CT1NQT1JVUykJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWRiMXgwMAotbG9hZC0kKENPTkZJR19NSVBTX0JPU1BPUlVTKQkrPSAweGZmZmZmZmZmODAxMDAwMDAKLQotIwotIyBBTUQgQWxjaGVteSBNaXJhZ2UgZXZhbCBib2FyZAotIwotY29yZS0kKENPTkZJR19NSVBTX01JUkFHRSkJKz0gYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzLwotY2ZsYWdzLSQoQ09ORklHX01JUFNfTUlSQUdFKQkrPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZGIxeDAwCi1sb2FkLSQoQ09ORklHX01JUFNfTUlSQUdFKQkrPSAweGZmZmZmZmZmODAxMDAwMDAKLQotIwotIyA0Ry1TeXN0ZW1zIGV2YWwgYm9hcmQKLSMKLWxpYnMtJChDT05GSUdfTUlQU19NVFgxKQkrPSBhcmNoL21pcHMvYWxjaGVteS9tdHgtMS8KLWxvYWQtJChDT05GSUdfTUlQU19NVFgxKQkrPSAweGZmZmZmZmZmODAxMDAwMDAKLQotIwotIyBNeUNhYmxlIGV2YWwgYm9hcmQKLSMKLWxpYnMtJChDT05GSUdfTUlQU19YWFMxNTAwKQkrPSBhcmNoL21pcHMvYWxjaGVteS94eHMxNTAwLwotbG9hZC0kKENPTkZJR19NSVBTX1hYUzE1MDApCSs9IDB4ZmZmZmZmZmY4MDEwMDAwMAotCi0jIG11c3QgYmUgbGFzdCBmb3IgQWxjaGVteSBzeXN0ZW1zIGZvciBHUElPIHRvIHdvcmsgcHJvcGVybHkKLWNmbGFncy0kKENPTkZJR19TT0NfQVUxWDAwKQkrPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwCi0KLQotIwotIyBDb2JhbHQgU2VydmVyCi0jCi1jb3JlLSQoQ09ORklHX01JUFNfQ09CQUxUKQkrPSBhcmNoL21pcHMvY29iYWx0LwotY2ZsYWdzLSQoQ09ORklHX01JUFNfQ09CQUxUKQkrPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtY29iYWx0Ci1sb2FkLSQoQ09ORklHX01JUFNfQ09CQUxUKQkrPSAweGZmZmZmZmZmODAwODAwMDAKLQotIwotIyBERUNzdGF0aW9uIGZhbWlseQotIwotY29yZS0kKENPTkZJR19NQUNIX0RFQ1NUQVRJT04pCSs9IGFyY2gvbWlwcy9kZWMvCi1jZmxhZ3MtJChDT05GSUdfTUFDSF9ERUNTVEFUSU9OKSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1kZWMKLWxpYnMtJChDT05GSUdfTUFDSF9ERUNTVEFUSU9OKQkrPSBhcmNoL21pcHMvZGVjL3Byb20vCi1sb2FkLSQoQ09ORklHX01BQ0hfREVDU1RBVElPTikJKz0gMHhmZmZmZmZmZjgwMDQwMDAwCi0KLSMKLSMgV2luZCBSaXZlciBQUE1DIEJvYXJkICg0S0MgKyBHVDY0MTIwKQotIwotY29yZS0kKENPTkZJR19XUl9QUE1DKQkJKz0gYXJjaC9taXBzL2d0NjQxMjAvd3JwcG1jLwotY2ZsYWdzLSQoQ09ORklHX1dSX1BQTUMpCQkrPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtd3JwcG1jCi1sb2FkLSQoQ09ORklHX1dSX1BQTUMpCQkrPSAweGZmZmZmZmZmODAxMDAwMDAKLQotIwotIyBMb29uZ3NvbiBmYW1pbHkKLSMKLWNvcmUtJChDT05GSUdfTUFDSF9MT09OR1NPTikgKz0gYXJjaC9taXBzL2xvb25nc29uLwotY2ZsYWdzLSQoQ09ORklHX01BQ0hfTE9PTkdTT04pICs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3NvbiBcCi0gICAgICAgICAgICAgICAgICAgIC1tbm8tYnJhbmNoLWxpa2VseQotbG9hZC0kKENPTkZJR19MRU1PVEVfRlVMT09ORzJFKSArPSAweGZmZmZmZmZmODAxMDAwMDAKLWxvYWQtJChDT05GSUdfTEVNT1RFX01BQ0gyRikgKz0gMHhmZmZmZmZmZjgwMjAwMDAwCi0KLSMKLSMgTUlQUyBNYWx0YSBib2FyZAotIwotY29yZS0kKENPTkZJR19NSVBTX01BTFRBKQkrPSBhcmNoL21pcHMvbXRpLW1hbHRhLwotY2ZsYWdzLSQoQ09ORklHX01JUFNfTUFMVEEpCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1tYWx0YQotbG9hZC0kKENPTkZJR19NSVBTX01BTFRBKQkrPSAweGZmZmZmZmZmODAxMDAwMDAKLWFsbC0kKENPTkZJR19NSVBTX01BTFRBKQk6PSAkKENPTVBSRVNTSU9OX0ZOQU1FKS5iaW4KLQotIwotIyBNSVBTIFNJTQotIwotY29yZS0kKENPTkZJR19NSVBTX1NJTSkJCSs9IGFyY2gvbWlwcy9taXBzc2ltLwotY2ZsYWdzLSQoQ09ORklHX01JUFNfU0lNKQkrPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbWlwc3NpbQotbG9hZC0kKENPTkZJR19NSVBTX1NJTSkJCSs9IDB4ODAxMDAwMDAKLQotIwotIyBQTUMtU2llcnJhIE1TUCBTT0NzCi0jCi1jb3JlLSQoQ09ORklHX1BNQ19NU1ApCQkrPSBhcmNoL21pcHMvcG1jLXNpZXJyYS9tc3A3MXh4LwotY2ZsYWdzLSQoQ09ORklHX1BNQ19NU1ApCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcG1jLXNpZXJyYS9tc3A3MXh4IFwKLQkJCQkJLW1uby1icmFuY2gtbGlrZWx5Ci1sb2FkLSQoQ09ORklHX1BNQ19NU1ApCQkrPSAweGZmZmZmZmZmODAxMDAwMDAKLQotIwotIyBQTUMtU2llcnJhIFlvc2VtaXRlCi0jCi1jb3JlLSQoQ09ORklHX1BNQ19ZT1NFTUlURSkJKz0gYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvCi1jZmxhZ3MtJChDT05GSUdfUE1DX1lPU0VNSVRFKQkrPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gteW9zZW1pdGUKLWxvYWQtJChDT05GSUdfUE1DX1lPU0VNSVRFKQkrPSAweGZmZmZmZmZmODAxMDAwMDAKLQotIwotIyBMQVNBVCBwbGF0Zm9ybXMKLSMKLWNvcmUtJChDT05GSUdfTEFTQVQpCQkrPSBhcmNoL21pcHMvbGFzYXQvCi1jZmxhZ3MtJChDT05GSUdfTEFTQVQpCQkrPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbGFzYXQKLWxvYWQtJChDT05GSUdfTEFTQVQpCQkrPSAweGZmZmZmZmZmODAwMDAwMDAKLQotIwotIyBDb21tb24gVlI0MXh4Ci0jCi1jb3JlLSQoQ09ORklHX01BQ0hfVlI0MVhYKQkrPSBhcmNoL21pcHMvdnI0MXh4L2NvbW1vbi8KLWNmbGFncy0kKENPTkZJR19NQUNIX1ZSNDFYWCkJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXZyNDF4eAotCi0jCi0jIFpBTyBOZXR3b3JrcyBDYXBjZWxsYSAoVlI0MTMxKQotIwotbG9hZC0kKENPTkZJR19aQU9fQ0FQQ0VMTEEpCSs9IDB4ZmZmZmZmZmY4MDAwMDAwMAotCi0jCi0jIFZpY3RvciBNUC1DMzAzLzMwNCAoVlI0MTIyKQotIwotbG9hZC0kKENPTkZJR19WSUNUT1JfTVBDMzBYKQkrPSAweGZmZmZmZmZmODAwMDEwMDAKLQotIwotIyBJQk0gV29ya1BhZCB6NTAgKFZSNDEyMSkKLSMKLWNvcmUtJChDT05GSUdfSUJNX1dPUktQQUQpCSs9IGFyY2gvbWlwcy92cjQxeHgvaWJtLXdvcmtwYWQvCi1sb2FkLSQoQ09ORklHX0lCTV9XT1JLUEFEKQkrPSAweGZmZmZmZmZmODAwMDQwMDAKLQotIwotIyBDQVNJTyBDQVNTSVBFSUEgRS01NS82NSAoVlI0MTExKQotIwotY29yZS0kKENPTkZJR19DQVNJT19FNTUpCSs9IGFyY2gvbWlwcy92cjQxeHgvY2FzaW8tZTU1LwotbG9hZC0kKENPTkZJR19DQVNJT19FNTUpCSs9IDB4ZmZmZmZmZmY4MDAwNDAwMAotCi0jCi0jIFRBTkJBQyBWUjQxMzEgbXVsdGljaGlwIG1vZHVsZShUQjAyMjUpIGFuZCBUQU5CQUMgVlI0MTMxRElNTShUQjAyMjkpIChWUjQxMzEpCi0jCi1sb2FkLSQoQ09ORklHX1RBTkJBQ19UQjAyMlgpCSs9IDB4ZmZmZmZmZmY4MDAwMDAwMAotCi0jIE5YUCBTVEIyMjUKLWNvcmUtJChDT05GSUdfU09DX1BOWDgzM1gpCQkrPSBhcmNoL21pcHMvbnhwL3BueDgzM3gvY29tbW9uLwotY2ZsYWdzLSQoQ09ORklHX1NPQ19QTlg4MzNYKQkrPSAtSWFyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBueDgzM3gKLWxpYnMtJChDT05GSUdfTlhQX1NUQjIyMCkJCSs9IGFyY2gvbWlwcy9ueHAvcG54ODMzeC9zdGIyMngvCi1sb2FkLSQoQ09ORklHX05YUF9TVEIyMjApCQkrPSAweGZmZmZmZmZmODAwMDEwMDAKLWxpYnMtJChDT05GSUdfTlhQX1NUQjIyNSkJCSs9IGFyY2gvbWlwcy9ueHAvcG54ODMzeC9zdGIyMngvCi1sb2FkLSQoQ09ORklHX05YUF9TVEIyMjUpCQkrPSAweGZmZmZmZmZmODAwMDEwMDAKLQotIwotIyBDb21tb24gTlhQIFBOWDg1NTAKLSMKLWNvcmUtJChDT05GSUdfU09DX1BOWDg1NTApCSs9IGFyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vCi1jZmxhZ3MtJChDT05GSUdfU09DX1BOWDg1NTApCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wbng4NTUwCi0KLSMKLSMgTlhQIFBOWDg1NTAgSkJTIGJvYXJkCi0jCi1saWJzLSQoQ09ORklHX1BOWDg1NTBfSkJTKQkrPSBhcmNoL21pcHMvbnhwL3BueDg1NTAvamJzLwotI2NmbGFncy0kKENPTkZJR19QTlg4NTUwX0pCUykJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBueDg1NTAKLWxvYWQtJChDT05GSUdfUE5YODU1MF9KQlMpCSs9IDB4ZmZmZmZmZmY4MDA2MDAwMAotCi0jIE5YUCBQTlg4NTUwIFNUQjgxMCBib2FyZAotIwotbGlicy0kKENPTkZJR19QTlg4NTUwX1NUQjgxMCkJKz0gYXJjaC9taXBzL254cC9wbng4NTUwL3N0YjgxMC8KLWxvYWQtJChDT05GSUdfUE5YODU1MF9TVEI4MTApCSs9IDB4ZmZmZmZmZmY4MDA2MDAwMAotCi0jCi0jIENvbW1vbiBORUMgRU1NQVhYWAotIwotY29yZS0kKENPTkZJR19TT0NfRU1NQTJSSCkJKz0gYXJjaC9taXBzL2VtbWEvY29tbW9uLwotY2ZsYWdzLSQoQ09ORklHX1NPQ19FTU1BMlJIKQkrPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZW1tYTJyaAotCi0jCi0jIE5FQyBFTU1BMlJIIE1hcmstZWlucwotIwotY29yZS0kKENPTkZJR19ORUNfTUFSS0VJTlMpCSs9IGFyY2gvbWlwcy9lbW1hL21hcmtlaW5zLwotbG9hZC0kKENPTkZJR19ORUNfTUFSS0VJTlMpCSs9IDB4ZmZmZmZmZmY4ODEwMDAwMAotCi0jCi0jIENpc2NvIFBvd2VyVFYgUGxhdGZvcm0KLSMKLWNvcmUtJChDT05GSUdfUE9XRVJUVikJCSs9IGFyY2gvbWlwcy9wb3dlcnR2LwotY2ZsYWdzLSQoQ09ORklHX1BPV0VSVFYpICAgICAgICArPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0dgotbG9hZC0kKENPTkZJR19QT1dFUlRWKQkJKz0gMHhmZmZmZmZmZjkwODAwMDAwCi0KLSMKLSMgU0dJIElQMjIgKEluZHkvSW5kaWdvMikKLSMKLSMgU2V0IHRoZSBsb2FkIGFkZHJlc3MgdG8gPj0gMHhmZmZmZmZmZjg4MDY5MDAwIGlmIHlvdSB3YW50IHRvIGxlYXZlIHNwYWNlIGZvcgotIyBzeW1tb24sIDB4ZmZmZmZmZmY4MDAwMjAwMCBmb3IgcHJvZHVjdGlvbiBrZXJuZWxzLiAgTm90ZSB0aGF0IHRoZSB2YWx1ZSBtdXN0Ci0jIGJlIGFsaWduZWQgdG8gYSBtdWx0aXBsZSBvZiB0aGUga2VybmVsIHN0YWNrIHNpemUgb3IgdGhlIGhhbmRsaW5nIG9mIHRoZQotIyBjdXJyZW50IHZhcmlhYmxlIHdpbGwgYnJlYWsgc28gZm9yIDY0LWJpdCBrZXJuZWxzIHdlIGhhdmUgdG8gcmFpc2UgdGhlIHN0YXJ0Ci0jIGFkZHJlc3MgYnkgOGtiLgotIwotY29yZS0kKENPTkZJR19TR0lfSVAyMikJCSs9IGFyY2gvbWlwcy9zZ2ktaXAyMi8KLWNmbGFncy0kKENPTkZJR19TR0lfSVAyMikJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWlwMjIKLWlmZGVmIENPTkZJR18zMkJJVAotbG9hZC0kKENPTkZJR19TR0lfSVAyMikJCSs9IDB4ZmZmZmZmZmY4ODAwMjAwMAotZW5kaWYKLWlmZGVmIENPTkZJR182NEJJVAotbG9hZC0kKENPTkZJR19TR0lfSVAyMikJCSs9IDB4ZmZmZmZmZmY4ODAwNDAwMAotZW5kaWYKLQotIwotIyBTR0ktSVAyNyAoT3JpZ2luMjAwLzIwMDApCi0jCi0jIFNldCB0aGUgbG9hZCBhZGRyZXNzIHRvID49IDB4YzAwMDAwMDAwMDMwMDAwMCBpZiB5b3Ugd2FudCB0byBsZWF2ZSBzcGFjZSBmb3IKLSMgc3ltbW9uLCAweGMwMDAwMDAwMDAwMWMwMDAgZm9yIHByb2R1Y3Rpb24ga2VybmVscy4gIE5vdGUgdGhhdCB0aGUgdmFsdWUgbXVzdAotIyBiZSAxNmtiIGFsaWduZWQgb3IgdGhlIGhhbmRsaW5nIG9mIHRoZSBjdXJyZW50IHZhcmlhYmxlIHdpbGwgYnJlYWsuCi0jCi1pZmRlZiBDT05GSUdfU0dJX0lQMjcKLWNvcmUtJChDT05GSUdfU0dJX0lQMjcpCQkrPSBhcmNoL21pcHMvc2dpLWlwMjcvCi1jZmxhZ3MtJChDT05GSUdfU0dJX0lQMjcpCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDI3Ci1pZmRlZiBDT05GSUdfTUFQUEVEX0tFUk5FTAotbG9hZC0kKENPTkZJR19TR0lfSVAyNykJCSs9IDB4YzAwMDAwMDA0MDAxYzAwMAotT0JKQ09QWUZMQUdTCQkJOj0gLS1jaGFuZ2UtYWRkcmVzc2VzPTB4M2ZmZmZmZmY4MDAwMDAwMAotZGF0YW9mZnNldC0kKENPTkZJR19TR0lfSVAyNykJKz0gMHgwMTAwMDAwMAotZWxzZQotbG9hZC0kKENPTkZJR19TR0lfSVAyNykJCSs9IDB4YTgwMDAwMDAwMDAxYzAwMAotT0JKQ09QWUZMQUdTCQkJOj0gLS1jaGFuZ2UtYWRkcmVzc2VzPTB4NTdmZmZmZmY4MDAwMDAwMAotZW5kaWYKLWVuZGlmCi0KLSMKLSMgU0dJIElQMjggKEluZGlnbzIgUjEwaykKLSMKLSMgU2V0IHRoZSBsb2FkIGFkZHJlc3MgdG8gPj0gMHhhODAwMDAwMDIwMDgwMDAwIGlmIHlvdSB3YW50IHRvIGxlYXZlIHNwYWNlIGZvcgotIyBzeW1tb24sIDB4YTgwMDAwMDAyMDAwNDAwMCBmb3IgcHJvZHVjdGlvbiBrZXJuZWxzID8gIE5vdGUgdGhhdCB0aGUgdmFsdWUgbXVzdAotIyBiZSAxNmtiIGFsaWduZWQgb3IgdGhlIGhhbmRsaW5nIG9mIHRoZSBjdXJyZW50IHZhcmlhYmxlIHdpbGwgYnJlYWsuCi0jIFNpbXBsaWZpZWQ6IHdoYXQgSVAyMiBkb2VzIGF0IDEyOE1CKyBpbiBrc2VnTiwgSVAyOCBkb2VzIGF0IDUxMk1CKyBpbiB4a3BoeXMKLSMKLWlmZGVmIENPTkZJR19TR0lfSVAyOAotICBpZmVxICgkKGNhbGwgY2Mtb3B0aW9uLXluLC1tcjEway1jYWNoZS1iYXJyaWVyPXN0b3JlKSwgbikKLSAgICAgICQoZXJyb3IgZ2NjIGRvZXNuJ3Qgc3VwcG9ydCBuZWVkZWQgb3B0aW9uIC1tcjEway1jYWNoZS1iYXJyaWVyPXN0b3JlKQotICBlbmRpZgotZW5kaWYKLWNvcmUtJChDT05GSUdfU0dJX0lQMjgpCQkrPSBhcmNoL21pcHMvc2dpLWlwMjIvCi1jZmxhZ3MtJChDT05GSUdfU0dJX0lQMjgpCSs9IC1tcjEway1jYWNoZS1iYXJyaWVyPXN0b3JlIC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDI4Ci1sb2FkLSQoQ09ORklHX1NHSV9JUDI4KQkJKz0gMHhhODAwMDAwMDIwMDA0MDAwCi0KLSMKLSMgU0dJLUlQMzIgKE8yKQotIwotIyBTZXQgdGhlIGxvYWQgYWRkcmVzcyB0byA+PSA4MDA2OTAwMCBpZiB5b3Ugd2FudCB0byBsZWF2ZSBzcGFjZSBmb3Igc3ltbW9uLAotIyAweGZmZmZmZmZmODAwMDQwMDAgZm9yIHByb2R1Y3Rpb24ga2VybmVscy4gIE5vdGUgdGhhdCB0aGUgdmFsdWUgbXVzdCBiZSBhbGlnbmVkIHRvCi0jIGEgbXVsdGlwbGUgb2YgdGhlIGtlcm5lbCBzdGFjayBzaXplIG9yIHRoZSBoYW5kbGluZyBvZiB0aGUgY3VycmVudCB2YXJpYWJsZQotIyB3aWxsIGJyZWFrLgotIwotY29yZS0kKENPTkZJR19TR0lfSVAzMikJCSs9IGFyY2gvbWlwcy9zZ2ktaXAzMi8KLWNmbGFncy0kKENPTkZJR19TR0lfSVAzMikJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWlwMzIKLWxvYWQtJChDT05GSUdfU0dJX0lQMzIpCQkrPSAweGZmZmZmZmZmODAwMDQwMDAKLQotIwotIyBTaWJ5dGUgU0IxMjUwL0JDTTE0ODAgU09DCi0jCi0jIFRoaXMgaXMgYSBMSUIgc28gdGhhdCBpdCBsaW5rcyBhdCB0aGUgZW5kLCBhbmQgaW5pdGNhbGxzIGFyZSBsYXRlcgotIyB0aGUgc2VxdWVuY2U7IGJ1dCBpdCBpcyBidWlsdCBhcyBhbiBvYmplY3Qgc28gdGhhdCBtb2R1bGVzIGRvbid0IGdldAotIyByZW1vdmVkIChhcyBoYXBwZW5zLCBldmVuIGlmIHRoZXkgaGF2ZSBfX2luaXRjYWxsL21vZHVsZV9pbml0KQotIwotY29yZS0kKENPTkZJR19TSUJZVEVfQkNNMTEyWCkJKz0gYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvCi1jb3JlLSQoQ09ORklHX1NJQllURV9CQ00xMTJYKQkrPSBhcmNoL21pcHMvc2lieXRlL2NvbW1vbi8KLWNmbGFncy0kKENPTkZJR19TSUJZVEVfQkNNMTEyWCkJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXNpYnl0ZSBcCi0JCQktRFNJQllURV9IRFJfRkVBVFVSRVM9U0lCWVRFX0hEUl9GTUFTS18xMjUwXzExMnhfQUxMCi0KLWNvcmUtJChDT05GSUdfU0lCWVRFX1NCMTI1MCkJKz0gYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvCi1jb3JlLSQoQ09ORklHX1NJQllURV9TQjEyNTApCSs9IGFyY2gvbWlwcy9zaWJ5dGUvY29tbW9uLwotY2ZsYWdzLSQoQ09ORklHX1NJQllURV9TQjEyNTApCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1zaWJ5dGUgXAotCQkJLURTSUJZVEVfSERSX0ZFQVRVUkVTPVNJQllURV9IRFJfRk1BU0tfMTI1MF8xMTJ4X0FMTAotCi1jb3JlLSQoQ09ORklHX1NJQllURV9CQ00xeDU1KQkrPSBhcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvCi1jb3JlLSQoQ09ORklHX1NJQllURV9CQ00xeDU1KQkrPSBhcmNoL21pcHMvc2lieXRlL2NvbW1vbi8KLWNmbGFncy0kKENPTkZJR19TSUJZVEVfQkNNMXg1NSkJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXNpYnl0ZSBcCi0JCQktRFNJQllURV9IRFJfRkVBVFVSRVM9U0lCWVRFX0hEUl9GTUFTS18xNDgwX0FMTAotCi1jb3JlLSQoQ09ORklHX1NJQllURV9CQ00xeDgwKQkrPSBhcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvCi1jb3JlLSQoQ09ORklHX1NJQllURV9CQ00xeDgwKQkrPSBhcmNoL21pcHMvc2lieXRlL2NvbW1vbi8KLWNmbGFncy0kKENPTkZJR19TSUJZVEVfQkNNMXg4MCkJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXNpYnl0ZSBcCi0JCQktRFNJQllURV9IRFJfRkVBVFVSRVM9U0lCWVRFX0hEUl9GTUFTS18xNDgwX0FMTAotCi0jCi0jIFNpYnl0ZSBCQ005MTEyMHggKENhcm1lbCkgYm9hcmQKLSMgU2lieXRlIEJDTTkxMTIwQyAoQ1JoaW5lKSBib2FyZAotIyBTaWJ5dGUgQkNNOTExMjVDIChDUmhvbmUpIGJvYXJkCi0jIFNpYnl0ZSBCQ005MTEyNUUgKFJob25lKSBib2FyZAotIyBTaWJ5dGUgU1dBUk0gYm9hcmQKLSMgU2lieXRlIEJDTTkxeDgwIChCaWdTdXIpIGJvYXJkCi0jCi1jb3JlLSQoQ09ORklHX1NJQllURV9DQVJNRUwpCSs9IGFyY2gvbWlwcy9zaWJ5dGUvc3dhcm0vCi1sb2FkLSQoQ09ORklHX1NJQllURV9DQVJNRUwpCTo9IDB4ZmZmZmZmZmY4MDEwMDAwMAotY29yZS0kKENPTkZJR19TSUJZVEVfQ1JISU5FKQkrPSBhcmNoL21pcHMvc2lieXRlL3N3YXJtLwotbG9hZC0kKENPTkZJR19TSUJZVEVfQ1JISU5FKQk6PSAweGZmZmZmZmZmODAxMDAwMDAKLWNvcmUtJChDT05GSUdfU0lCWVRFX0NSSE9ORSkJKz0gYXJjaC9taXBzL3NpYnl0ZS9zd2FybS8KLWxvYWQtJChDT05GSUdfU0lCWVRFX0NSSE9ORSkJOj0gMHhmZmZmZmZmZjgwMTAwMDAwCi1jb3JlLSQoQ09ORklHX1NJQllURV9SSE9ORSkJKz0gYXJjaC9taXBzL3NpYnl0ZS9zd2FybS8KLWxvYWQtJChDT05GSUdfU0lCWVRFX1JIT05FKQk6PSAweGZmZmZmZmZmODAxMDAwMDAKLWNvcmUtJChDT05GSUdfU0lCWVRFX1NFTlRPU0EpCSs9IGFyY2gvbWlwcy9zaWJ5dGUvc3dhcm0vCi1sb2FkLSQoQ09ORklHX1NJQllURV9TRU5UT1NBKQk6PSAweGZmZmZmZmZmODAxMDAwMDAKLWNvcmUtJChDT05GSUdfU0lCWVRFX1NXQVJNKQkrPSBhcmNoL21pcHMvc2lieXRlL3N3YXJtLwotbG9hZC0kKENPTkZJR19TSUJZVEVfU1dBUk0pCTo9IDB4ZmZmZmZmZmY4MDEwMDAwMAotY29yZS0kKENPTkZJR19TSUJZVEVfQklHU1VSKQkrPSBhcmNoL21pcHMvc2lieXRlL3N3YXJtLwotbG9hZC0kKENPTkZJR19TSUJZVEVfQklHU1VSKQk6PSAweGZmZmZmZmZmODAxMDAwMDAKLQotIwotIyBCcm9hZGNvbSBCQ000N1hYIGJvYXJkcwotIwotY29yZS0kKENPTkZJR19CQ000N1hYKQkJKz0gYXJjaC9taXBzL2JjbTQ3eHgvCi1jZmxhZ3MtJChDT05GSUdfQkNNNDdYWCkJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTQ3eHgKLWxvYWQtJChDT05GSUdfQkNNNDdYWCkJCTo9IDB4ZmZmZmZmZmY4MDAwMTAwMAotCi0jCi0jIEJyb2FkY29tIEJDTTYzWFggYm9hcmRzCi0jCi1jb3JlLSQoQ09ORklHX0JDTTYzWFgpCQkrPSBhcmNoL21pcHMvYmNtNjN4eC8KLWNmbGFncy0kKENPTkZJR19CQ002M1hYKQkrPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNjN4eC8KLWxvYWQtJChDT05GSUdfQkNNNjNYWCkJCTo9IDB4ZmZmZmZmZmY4MDAxMDAwMAotCi0jCi0jIFNOSSBSTQotIwotY29yZS0kKENPTkZJR19TTklfUk0pCQkrPSBhcmNoL21pcHMvc25pLwotY2ZsYWdzLSQoQ09ORklHX1NOSV9STSkJCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1ybQotaWZkZWYgQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOCi1sb2FkLSQoQ09ORklHX1NOSV9STSkJCSs9IDB4ZmZmZmZmZmY4MDYwMDAwMAotZWxzZQotbG9hZC0kKENPTkZJR19TTklfUk0pCQkrPSAweGZmZmZmZmZmODAwMzAwMDAKLWVuZGlmCi1hbGwtJChDT05GSUdfU05JX1JNKQkJOj0gJChDT01QUkVTU0lPTl9GTkFNRSkuZWNvZmYKLQotIwotIyBDb21tb24gVFh4OQotIwotY29yZS0kKENPTkZJR19NQUNIX1RYMzlYWCkJKz0gYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy8KLWNmbGFncy0kKENPTkZJR19NQUNIX1RYMzlYWCkgKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXR4Mzl4eAotbG9hZC0kKENPTkZJR19NQUNIX1RYMzlYWCkJKz0gMHhmZmZmZmZmZjgwMDUwMDAwCi1jb3JlLSQoQ09ORklHX01BQ0hfVFg0OVhYKQkrPSBhcmNoL21pcHMvdHh4OS9nZW5lcmljLwotY2ZsYWdzLSQoQ09ORklHX01BQ0hfVFg0OVhYKSArPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtdHg0OXh4Ci1sb2FkLSQoQ09ORklHX01BQ0hfVFg0OVhYKQkrPSAweGZmZmZmZmZmODAxMDAwMDAKLQotIwotIyBUb3NoaWJhIEpNUi1UWDM5MjcgYm9hcmQKLSMKLWNvcmUtJChDT05GSUdfVE9TSElCQV9KTVIzOTI3KQkrPSBhcmNoL21pcHMvdHh4OS9qbXIzOTI3LwotCi0jCi0jIFJvdXRlcmJvYXJkIDUzMiBib2FyZAotIwotY29yZS0kKENPTkZJR19NSUtST1RJS19SQjUzMikJKz0gYXJjaC9taXBzL3JiNTMyLwotY2ZsYWdzLSQoQ09ORklHX01JS1JPVElLX1JCNTMyKSArPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcmMzMjQzNAotbG9hZC0kKENPTkZJR19NSUtST1RJS19SQjUzMikJKz0gMHhmZmZmZmZmZjgwMTAxMDAwCi0KLSMKLSMgVG9zaGliYSBSQlRYNDlYWCBib2FyZHMKLSMKLWNvcmUtJChDT05GSUdfVE9TSElCQV9SQlRYNDkyNykJKz0gYXJjaC9taXBzL3R4eDkvcmJ0eDQ5MjcvCi1jb3JlLSQoQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzgpICs9IGFyY2gvbWlwcy90eHg5L3JidHg0OTM4LwotY29yZS0kKENPTkZJR19UT1NISUJBX1JCVFg0OTM5KSArPSBhcmNoL21pcHMvdHh4OS9yYnR4NDkzOS8KLQotIwotIyBDYXZpdW0gT2N0ZW9uCi0jCi1jb3JlLSQoQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OKQkrPSBhcmNoL21pcHMvY2F2aXVtLW9jdGVvbi8KLWNmbGFncy0kKENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTikJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWNhdml1bS1vY3Rlb24KLWNvcmUtJChDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04pCSs9IGFyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2V4ZWN1dGl2ZS8KLWlmZGVmIENPTkZJR19DQVZJVU1fT0NURU9OXzJORF9LRVJORUwKLWxvYWQtJChDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04pCSs9IDB4ZmZmZmZmZmY4NDEwMDAwMAotZWxzZQotbG9hZC0kKENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTikgCSs9IDB4ZmZmZmZmZmY4MTEwMDAwMAotZW5kaWYKK2luY2x1ZGUgJChzcmN0cmVlKS9hcmNoL21pcHMvS2J1aWxkLnBsYXRmb3JtcwogCiBjZmxhZ3MteQkJCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljCiBkcml2ZXJzLSQoQ09ORklHX1BDSSkJCSs9IGFyY2gvbWlwcy9wY2kvCkBAIC03MDYsNyArMjQwLDggQEAKIAogbGlicy15CQkJKz0gYXJjaC9taXBzL2xpYi8KIAotY29yZS15CQkJKz0gYXJjaC9taXBzL2tlcm5lbC8gYXJjaC9taXBzL21tLyBhcmNoL21pcHMvbWF0aC1lbXUvCisjIFNlZSBhcmNoL21pcHMvS2J1aWxkIGZvciBjb250ZW50IG9mIGNvcmUgcGFydCBvZiB0aGUga2VybmVsCitjb3JlLXkgKz0gYXJjaC9taXBzLwogCiBkcml2ZXJzLSQoQ09ORklHX09QUk9GSUxFKQkrPSBhcmNoL21pcHMvb3Byb2ZpbGUvCiAKQEAgLTcyNiw2ICsyNjEsOSBAQAogdm1saW51eC4zMjogdm1saW51eAogCSQoT0JKQ09QWSkgLU8gJCgzMmJpdC1iZmQpICQoT0JKQ09QWUZMQUdTKSAkPCAkQAogCisKKyNvYmotJChDT05GSUdfS1BST0JFUykJCSs9IGtwcm9iZXMubworCiAjCiAjIFRoZSA2NC1iaXQgRUxGIHRvb2xzIGFyZSBwcmV0dHkgYnJva2VuIHNvIGF0IHRoaXMgdGltZSB3ZSBnZW5lcmF0ZSA2NC1iaXQKICMgRUxGIGZpbGVzIGZyb20gMzItYml0IGZpbGVzIGJ5IGNvbnZlcnNpb24uCkBAIC03MzMsMzUgKzI3MSwxOSBAQAogdm1saW51eC42NDogdm1saW51eAogCSQoT0JKQ09QWSkgLU8gJCg2NGJpdC1iZmQpICQoT0JKQ09QWUZMQUdTKSAkPCAkQAogCi1tYWtlYm9vdCA9JChRKSQoTUFLRSkgJChidWlsZCk9YXJjaC9taXBzL2Jvb3QgVk1MSU5VWD0kKHZtbGludXgtMzIpICQoMSkKLW1ha2V6Ym9vdCA9JChRKSQoTUFLRSkgJChidWlsZCk9YXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZCBcCi0JICAgVk1MSU5VWF9MT0FEX0FERFJFU1M9JChsb2FkLXkpIDMyYml0LWJmZD0kKDMyYml0LWJmZCkgJCgxKQotCiBhbGw6CSQoYWxsLXkpCiAKLXZtbGludXo6IHZtbGludXggRk9SQ0UKLQkrQCQoY2FsbCBtYWtlemJvb3QsJEApCisjIGJvb3QKK3ZtbGludXguYmluIHZtbGludXguZWNvZmYgdm1saW51eC5zcmVjOiAkKHZtbGludXgtMzIpIEZPUkNFCisJJChRKSQoTUFLRSkgJChidWlsZCk9YXJjaC9taXBzL2Jvb3QgVk1MSU5VWD0kKHZtbGludXgtMzIpIGFyY2gvbWlwcy9ib290LyRACiAKLXZtbGludXouYmluOiB2bWxpbnV4Ci0JK0AkKGNhbGwgbWFrZXpib290LCRAKQorIyBib290L2NvbXByZXNzZWQKK3ZtbGludXogdm1saW51ei5iaW4gdm1saW51ei5lY29mZiB2bWxpbnV6LnNyZWM6ICQodm1saW51eC0zMikgRk9SQ0UKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT1hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkIFwKKwkgICBWTUxJTlVYX0xPQURfQUREUkVTUz0kKGxvYWQteSkgMzJiaXQtYmZkPSQoMzJiaXQtYmZkKSAkQAogCi12bWxpbnV6LmVjb2ZmOiB2bWxpbnV4Ci0JK0AkKGNhbGwgbWFrZXpib290LCRAKQogCi12bWxpbnV6LnNyZWM6IHZtbGludXgKLQkrQCQoY2FsbCBtYWtlemJvb3QsJEApCi0KLXZtbGludXguYmluOiAkKHZtbGludXgtMzIpCi0JK0AkKGNhbGwgbWFrZWJvb3QsJEApCi0KLXZtbGludXguZWNvZmY6ICQodm1saW51eC0zMikKLQkrQCQoY2FsbCBtYWtlYm9vdCwkQCkKLQotdm1saW51eC5zcmVjOiAkKHZtbGludXgtMzIpCi0JK0AkKGNhbGwgbWFrZWJvb3QsJEApCi0KLUNMRUFOX0ZJTEVTICs9IHZtbGludXguZWNvZmYgXAotCSAgICAgICB2bWxpbnV4LnNyZWMKK0NMRUFOX0ZJTEVTICs9IHZtbGludXguMzIgdm1saW51eC42NAogCiBhcmNocHJlcGFyZToKIGlmZGVmIENPTkZJR19NSVBTMzJfTjMyCkBAIC03ODAsOSArMzAyLDkgQEAKIAkkKFEpaW5zdGFsbCAtRCAtbSA2NDQgU3lzdGVtLm1hcCAkKElOU1RBTExfUEFUSCkvU3lzdGVtLm1hcC0kKEtFUk5FTFJFTEVBU0UpCiAKIGFyY2hjbGVhbjoKLQlAJChNQUtFKSAkKGNsZWFuKT1hcmNoL21pcHMvYm9vdAotCUAkKE1BS0UpICQoY2xlYW4pPWFyY2gvbWlwcy9ib290L2NvbXByZXNzZWQKLQlAJChNQUtFKSAkKGNsZWFuKT1hcmNoL21pcHMvbGFzYXQKKwkkKFEpJChNQUtFKSAkKGNsZWFuKT1hcmNoL21pcHMvYm9vdAorCSQoUSkkKE1BS0UpICQoY2xlYW4pPWFyY2gvbWlwcy9ib290L2NvbXByZXNzZWQKKwkkKFEpJChNQUtFKSAkKGNsZWFuKT1hcmNoL21pcHMvbGFzYXQKIAogZGVmaW5lIGFyY2hoZWxwCiAJZWNobyAnICBpbnN0YWxsICAgICAgICAgICAgICAtIGluc3RhbGwga2VybmVsIGludG8gJChJTlNUQUxMX1BBVEgpJwpAQCAtNzk2LDExICszMTgsMyBAQAogCWVjaG8KIAllY2hvICcgIFRoZXNlIHdpbGwgYmUgZGVmYXVsdCBhcyBhcHJvcHJpYXRlIGZvciBhIGNvbmZpZ3VyZWQgcGxhdGZvcm0uJwogZW5kZWYKLQotQ0xFQU5fRklMRVMgKz0gdm1saW51eC4zMiBcCi0JICAgICAgIHZtbGludXguNjQgXAotCSAgICAgICB2bWxpbnV4LmVjb2ZmIFwKLQkgICAgICAgdm1saW51eiBcCi0JICAgICAgIHZtbGludXouZWNvZmYgXAotCSAgICAgICB2bWxpbnV6LmJpbiBcCi0JICAgICAgIHZtbGludXouc3JlYwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvS2NvbmZpZyBiL2FyY2gvbWlwcy9hbGNoZW15L0tjb25maWcKaW5kZXggZGYzYjFhNy4uMmNjZmQ0YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvS2NvbmZpZworKysgYi9hcmNoL21pcHMvYWxjaGVteS9LY29uZmlnCkBAIC0xMSw3ICsxMSw3IEBACiAKIGNob2ljZQogCXByb21wdCAiTWFjaGluZSB0eXBlIgotCWRlcGVuZHMgb24gTUFDSF9BTENIRU1ZCisJZGVwZW5kcyBvbiBNSVBTX0FMQ0hFTVkKIAlkZWZhdWx0IE1JUFNfREIxMDAwCiAKIGNvbmZpZyBNSVBTX01UWDEKQEAgLTEyOCw0MSArMTI4LDMzIEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKK2NvbmZpZyBNSVBTX0dQUgorCWJvb2wgIlRyYXBlemUgSVRTIEdQUiBib2FyZCIKKwlzZWxlY3QgU09DX0FVMTU1MAorCXNlbGVjdCBIV19IQVNfUENJCisJc2VsZWN0IERNQV9OT05DT0hFUkVOVAorCXNlbGVjdCBNSVBTX0RJU0FCTEVfT0JTT0xFVEVfSURFCisJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCisKIGVuZGNob2ljZQogCiBjb25maWcgU09DX0FVMTAwMAogCWJvb2wKLQlzZWxlY3QgU09DX0FVMVgwMAogCXNlbGVjdCBBTENIRU1ZX0dQSU9JTlRfQVUxMDAwCiAKIGNvbmZpZyBTT0NfQVUxMTAwCiAJYm9vbAotCXNlbGVjdCBTT0NfQVUxWDAwCiAJc2VsZWN0IEFMQ0hFTVlfR1BJT0lOVF9BVTEwMDAKIAogY29uZmlnIFNPQ19BVTE1MDAKIAlib29sCi0Jc2VsZWN0IFNPQ19BVTFYMDAKIAlzZWxlY3QgQUxDSEVNWV9HUElPSU5UX0FVMTAwMAogCiBjb25maWcgU09DX0FVMTU1MAogCWJvb2wKLQlzZWxlY3QgU09DX0FVMVgwMAogCXNlbGVjdCBBTENIRU1ZX0dQSU9JTlRfQVUxMDAwCiAKIGNvbmZpZyBTT0NfQVUxMjAwCiAJYm9vbAotCXNlbGVjdCBTT0NfQVUxWDAwCiAJc2VsZWN0IEFMQ0hFTVlfR1BJT0lOVF9BVTEwMDAKLQotY29uZmlnIFNPQ19BVTFYMDAKLQlib29sCi0Jc2VsZWN0IDY0QklUX1BIWVNfQUREUgotCXNlbGVjdCBDRVZUX1I0S19MSUIKLQlzZWxlY3QgQ1NSQ19SNEtfTElCCi0Jc2VsZWN0IElSUV9DUFUKLQlzZWxlY3QgU1lTX0hBU19DUFVfTUlQUzMyX1IxCi0Jc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKLQlzZWxlY3QgU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT04KLQlzZWxlY3QgR0VORVJJQ19HUElPCi0Jc2VsZWN0IEFSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9QbGF0Zm9ybSBiL2FyY2gvbWlwcy9hbGNoZW15L1BsYXRmb3JtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZTllNDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYWxjaGVteS9QbGF0Zm9ybQpAQCAtMCwwICsxLDExNCBAQAorIworIyBDb3JlIEFsY2hlbXkgY29kZQorIworcGxhdGZvcm0tJChDT05GSUdfTUlQU19BTENIRU1ZKQkrPSBhbGNoZW15L2NvbW1vbi8KKworCisjCisjIEFNRCBBbGNoZW15IFBiMTAwMCBldmFsIGJvYXJkCisjCitwbGF0Zm9ybS0kKENPTkZJR19NSVBTX1BCMTAwMCkJKz0gYWxjaGVteS9kZXZib2FyZHMvCitjZmxhZ3MtJChDT05GSUdfTUlQU19QQjEwMDApCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAKK2xvYWQtJChDT05GSUdfTUlQU19QQjEwMDApCSs9IDB4ZmZmZmZmZmY4MDEwMDAwMAorCisjCisjIEFNRCBBbGNoZW15IFBiMTEwMCBldmFsIGJvYXJkCisjCitwbGF0Zm9ybS0kKENPTkZJR19NSVBTX1BCMTEwMCkJKz0gYWxjaGVteS9kZXZib2FyZHMvCitjZmxhZ3MtJChDT05GSUdfTUlQU19QQjExMDApCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAKK2xvYWQtJChDT05GSUdfTUlQU19QQjExMDApCSs9IDB4ZmZmZmZmZmY4MDEwMDAwMAorCisjCisjIEFNRCBBbGNoZW15IFBiMTUwMCBldmFsIGJvYXJkCisjCitwbGF0Zm9ybS0kKENPTkZJR19NSVBTX1BCMTUwMCkJKz0gYWxjaGVteS9kZXZib2FyZHMvCitjZmxhZ3MtJChDT05GSUdfTUlQU19QQjE1MDApCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAKK2xvYWQtJChDT05GSUdfTUlQU19QQjE1MDApCSs9IDB4ZmZmZmZmZmY4MDEwMDAwMAorCisjCisjIEFNRCBBbGNoZW15IFBiMTU1MCBldmFsIGJvYXJkCisjCitwbGF0Zm9ybS0kKENPTkZJR19NSVBTX1BCMTU1MCkJKz0gYWxjaGVteS9kZXZib2FyZHMvCitjZmxhZ3MtJChDT05GSUdfTUlQU19QQjE1NTApCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAKK2xvYWQtJChDT05GSUdfTUlQU19QQjE1NTApCSs9IDB4ZmZmZmZmZmY4MDEwMDAwMAorCisjCisjIEFNRCBBbGNoZW15IFBiMTIwMCBldmFsIGJvYXJkCisjCitwbGF0Zm9ybS0kKENPTkZJR19NSVBTX1BCMTIwMCkJKz0gYWxjaGVteS9kZXZib2FyZHMvCitjZmxhZ3MtJChDT05GSUdfTUlQU19QQjEyMDApCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAKK2xvYWQtJChDT05GSUdfTUlQU19QQjEyMDApCSs9IDB4ZmZmZmZmZmY4MDEwMDAwMAorCisjCisjIEFNRCBBbGNoZW15IERiMTAwMCBldmFsIGJvYXJkCisjCitwbGF0Zm9ybS0kKENPTkZJR19NSVBTX0RCMTAwMCkJKz0gYWxjaGVteS9kZXZib2FyZHMvCitjZmxhZ3MtJChDT05GSUdfTUlQU19EQjEwMDApCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1kYjF4MDAKK2xvYWQtJChDT05GSUdfTUlQU19EQjEwMDApCSs9IDB4ZmZmZmZmZmY4MDEwMDAwMAorCisjCisjIEFNRCBBbGNoZW15IERiMTEwMCBldmFsIGJvYXJkCisjCitwbGF0Zm9ybS0kKENPTkZJR19NSVBTX0RCMTEwMCkJKz0gYWxjaGVteS9kZXZib2FyZHMvCitjZmxhZ3MtJChDT05GSUdfTUlQU19EQjExMDApCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1kYjF4MDAKK2xvYWQtJChDT05GSUdfTUlQU19EQjExMDApCSs9IDB4ZmZmZmZmZmY4MDEwMDAwMAorCisjCisjIEFNRCBBbGNoZW15IERiMTUwMCBldmFsIGJvYXJkCisjCitwbGF0Zm9ybS0kKENPTkZJR19NSVBTX0RCMTUwMCkJKz0gYWxjaGVteS9kZXZib2FyZHMvCitjZmxhZ3MtJChDT05GSUdfTUlQU19EQjE1MDApCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1kYjF4MDAKK2xvYWQtJChDT05GSUdfTUlQU19EQjE1MDApCSs9IDB4ZmZmZmZmZmY4MDEwMDAwMAorCisjCisjIEFNRCBBbGNoZW15IERiMTU1MCBldmFsIGJvYXJkCisjCitwbGF0Zm9ybS0kKENPTkZJR19NSVBTX0RCMTU1MCkJKz0gYWxjaGVteS9kZXZib2FyZHMvCitjZmxhZ3MtJChDT05GSUdfTUlQU19EQjE1NTApCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1kYjF4MDAKK2xvYWQtJChDT05GSUdfTUlQU19EQjE1NTApCSs9IDB4ZmZmZmZmZmY4MDEwMDAwMAorCisjCisjIEFNRCBBbGNoZW15IERiMTIwMCBldmFsIGJvYXJkCisjCitwbGF0Zm9ybS0kKENPTkZJR19NSVBTX0RCMTIwMCkJKz0gYWxjaGVteS9kZXZib2FyZHMvCitjZmxhZ3MtJChDT05GSUdfTUlQU19EQjEyMDApCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1kYjF4MDAKK2xvYWQtJChDT05GSUdfTUlQU19EQjEyMDApCSs9IDB4ZmZmZmZmZmY4MDEwMDAwMAorCisjCisjIEFNRCBBbGNoZW15IEJvc3BvcnVzIGV2YWwgYm9hcmQKKyMKK3BsYXRmb3JtLSQoQ09ORklHX01JUFNfQk9TUE9SVVMpICs9IGFsY2hlbXkvZGV2Ym9hcmRzLworY2ZsYWdzLSQoQ09ORklHX01JUFNfQk9TUE9SVVMpCSArPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZGIxeDAwCitsb2FkLSQoQ09ORklHX01JUFNfQk9TUE9SVVMpCSArPSAweGZmZmZmZmZmODAxMDAwMDAKKworIworIyBBTUQgQWxjaGVteSBNaXJhZ2UgZXZhbCBib2FyZAorIworcGxhdGZvcm0tJChDT05GSUdfTUlQU19NSVJBR0UpCSs9IGFsY2hlbXkvZGV2Ym9hcmRzLworY2ZsYWdzLSQoQ09ORklHX01JUFNfTUlSQUdFKQkrPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZGIxeDAwCitsb2FkLSQoQ09ORklHX01JUFNfTUlSQUdFKQkrPSAweGZmZmZmZmZmODAxMDAwMDAKKworIworIyA0Ry1TeXN0ZW1zIGV2YWwgYm9hcmQKKyMKK3BsYXRmb3JtLSQoQ09ORklHX01JUFNfTVRYMSkJKz0gYWxjaGVteS9tdHgtMS8KK2xvYWQtJChDT05GSUdfTUlQU19NVFgxKQkrPSAweGZmZmZmZmZmODAxMDAwMDAKKworIworIyBNeUNhYmxlIGV2YWwgYm9hcmQKKyMKK3BsYXRmb3JtLSQoQ09ORklHX01JUFNfWFhTMTUwMCkJKz0gYWxjaGVteS94eHMxNTAwLworbG9hZC0kKENPTkZJR19NSVBTX1hYUzE1MDApCSs9IDB4ZmZmZmZmZmY4MDEwMDAwMAorCisjCisjIFRyYXBlemUgSVRTIEdSUCBib2FyZAorIworcGxhdGZvcm0tJChDT05GSUdfTUlQU19HUFIpCSs9IGFsY2hlbXkvZ3ByLworbG9hZC0kKENPTkZJR19NSVBTX0dQUikJCSs9IDB4ZmZmZmZmZmY4MDEwMDAwMAorCisjIGJvYXJkcyBjYW4gc3BlY2lmeSB0aGVpciBvd24gPGdwaW8uaD4gaW4gb25lIG9mIHRoZWlyIGluY2x1ZGUgZGlycy4KKyMgSWYgdGhleSBkbywgcGxhY2luZyB0aGlzIGxpbmUgaGVyZSBhdCB0aGUgZW5kIHdpbGwgbWFrZSBzdXJlIHRoZQorIyBjb21waWxlciBwaWNrcyB0aGUgYm9hcmQgb25lLiAgSWYgdGhleSBkb24ndCwgaXQgd2lsbCBtYWtlIHN1cmUKKyMgdGhlIGFsY2hlbXkgZ2VuZXJpYyBncGlvIGhlYWRlciBpcyBwaWNrZWQgdXAuCisKK2NmbGFncy0kKENPTkZJR19NSVBTX0FMQ0hFTVkpCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9NYWtlZmlsZSBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9NYWtlZmlsZQppbmRleCAwNmMwZTY1Li4yNzgxMWZlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL01ha2VmaWxlCkBAIC0xOCw1ICsxOCwzIEBACiBlbmRpZgogCiBvYmotJChDT05GSUdfUENJKQkJKz0gcGNpLm8KLQotRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9jbG9ja3MuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9jbG9ja3MuYwppbmRleCA0NjBjNjI4Li5hZjBmZTQxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vY2xvY2tzLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2Nsb2Nrcy5jCkBAIC04OSwxMSArODksNyBAQAogCSAqIG92ZXIgYmFja3dhcmRzIHRyeWluZyB0byBkZXRlcm1pbmUgdGhlIGZyZXF1ZW5jeS4KIAkgKi8KIAlpZiAoYXUxeHh4X2NwdV9oYXNfcGxsX3dvKCkpCi0jaWZkZWYgQ09ORklHX1NPQ19BVTEwMDBfRlJFUVVFTkNZCi0JCWNwdV9zcGVlZCA9IENPTkZJR19TT0NfQVUxMDAwX0ZSRVFVRU5DWTsKLSNlbHNlCiAJCWNwdV9zcGVlZCA9IDM5NjAwMDAwMDsKLSNlbmRpZgogCWVsc2UKIAkJY3B1X3NwZWVkID0gKGF1X3JlYWRsKFNZU19DUFVQTEwpICYgMHgwMDAwMDAzZikgKiBBVTEwMDBfU1JDX0NMSzsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcGxhdGZvcm0uYwppbmRleCAyNTgwZTc3Li4xZGM1NWVlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcGxhdGZvcm0uYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcGxhdGZvcm0uYwpAQCAtMTIsNiArMTIsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0yMSw2ICsyMiw4IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTEwMF9tbWMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X2V0aC5oPgogCisjaW5jbHVkZSA8cHJvbS5oPgorCiAjZGVmaW5lIFBPUlQoX2Jhc2UsIF9pcnEpCQkJCQlcCiAJewkJCQkJCQlcCiAJCS5tYXBiYXNlCT0gX2Jhc2UsCQkJXApAQCAtMzMsNyArMzYsNiBAQAogCX0KIAogc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBhdTF4MDBfdWFydF9kYXRhW10gPSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTBfQVUxWDAwKQogI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCiAJUE9SVChVQVJUMF9QSFlTX0FERFIsIEFVMTAwMF9VQVJUMF9JTlQpLAogCVBPUlQoVUFSVDFfUEhZU19BRERSLCBBVTEwMDBfVUFSVDFfSU5UKSwKQEAgLTU0LDcgKzU2LDYgQEAKIAlQT1JUKFVBUlQwX1BIWVNfQUREUiwgQVUxMjAwX1VBUlQwX0lOVCksCiAJUE9SVChVQVJUMV9QSFlTX0FERFIsIEFVMTIwMF9VQVJUMV9JTlQpLAogI2VuZGlmCi0jZW5kaWYJLyogQ09ORklHX1NFUklBTF84MjUwX0FVMVgwMCAqLwogCXsgfSwKIH07CiAKQEAgLTQzNSwyMCArNDM2LDMxIEBACiBzdGF0aWMgaW50IF9faW5pdCBhdTF4eHhfcGxhdGZvcm1faW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGludCB1YXJ0Y2xrID0gZ2V0X2F1MXgwMF91YXJ0X2JhdWRfYmFzZSgpICogMTY7Ci0JaW50IGk7CisJaW50IGVyciwgaTsKKwl1bnNpZ25lZCBjaGFyIGV0aGFkZHJbNl07CiAKIAkvKiBGaWxsIHVwIHVhcnRjbGsuICovCiAJZm9yIChpID0gMDsgYXUxeDAwX3VhcnRfZGF0YVtpXS5mbGFnczsgaSsrKQogCQlhdTF4MDBfdWFydF9kYXRhW2ldLnVhcnRjbGsgPSB1YXJ0Y2xrOwogCisJLyogdXNlIGZpcm13YXJlLXByb3ZpZGVkIG1hYyBhZGRyIGlmIGF2YWlsYWJsZSBhbmQgbmVjZXNzYXJ5ICovCisJaSA9IHByb21fZ2V0X2V0aGVybmV0X2FkZHIoZXRoYWRkcik7CisJaWYgKCFpICYmICFpc192YWxpZF9ldGhlcl9hZGRyKGF1MXh4eF9ldGgwX3BsYXRmb3JtX2RhdGEubWFjKSkKKwkJbWVtY3B5KGF1MXh4eF9ldGgwX3BsYXRmb3JtX2RhdGEubWFjLCBldGhhZGRyLCA2KTsKKworCWVyciA9IHBsYXRmb3JtX2FkZF9kZXZpY2VzKGF1MXh4eF9wbGF0Zm9ybV9kZXZpY2VzLAorCQkJCSAgIEFSUkFZX1NJWkUoYXUxeHh4X3BsYXRmb3JtX2RldmljZXMpKTsKICNpZm5kZWYgQ09ORklHX1NPQ19BVTExMDAKKwlldGhhZGRyWzVdICs9IDE7CS8qIG5leHQgYWRkciBmb3IgMm5kIE1BQyAqLworCWlmICghaSAmJiAhaXNfdmFsaWRfZXRoZXJfYWRkcihhdTF4eHhfZXRoMV9wbGF0Zm9ybV9kYXRhLm1hYykpCisJCW1lbWNweShhdTF4eHhfZXRoMV9wbGF0Zm9ybV9kYXRhLm1hYywgZXRoYWRkciwgNik7CisKIAkvKiBSZWdpc3RlciBzZWNvbmQgTUFDIGlmIGVuYWJsZWQgaW4gcGluZnVuYyAqLwotCWlmICghKGF1X3JlYWRsKFNZU19QSU5GVU5DKSAmICh1MzIpU1lTX1BGX05JMikpCi0JCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXUxeHh4X2V0aDFfZGV2aWNlKTsKKwlpZiAoIWVyciAmJiAhKGF1X3JlYWRsKFNZU19QSU5GVU5DKSAmICh1MzIpU1lTX1BGX05JMikpCisJCWVyciA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXUxeHh4X2V0aDFfZGV2aWNlKTsKICNlbmRpZgogCi0JcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKGF1MXh4eF9wbGF0Zm9ybV9kZXZpY2VzLAotCQkJCSAgICBBUlJBWV9TSVpFKGF1MXh4eF9wbGF0Zm9ybV9kZXZpY2VzKSk7CisJcmV0dXJuIGVycjsKIH0KIAogYXJjaF9pbml0Y2FsbChhdTF4eHhfcGxhdGZvcm1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvTWFrZWZpbGUgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvTWFrZWZpbGUKaW5kZXggZWNiZDM3Zi4uODI2NDQ5YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9NYWtlZmlsZQpAQCAtMTYsNSArMTYsMyBAQAogb2JqLSQoQ09ORklHX01JUFNfREIxNTUwKQkrPSBkYjF4MDAvCiBvYmotJChDT05GSUdfTUlQU19CT1NQT1JVUykJKz0gZGIxeDAwLwogb2JqLSQoQ09ORklHX01JUFNfTUlSQUdFKQkrPSBkYjF4MDAvCi0KLUVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxMjAwL3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxMjAwL3BsYXRmb3JtLmMKaW5kZXggM2NiOTVhOS4uM2ZhMzRjMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMTIwMC9wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjEyMDAvcGxhdGZvcm0uYwpAQCAtMjE2LDE0ICsyMTYsMTQgQEAKIAl9CiB9OwogCi1zdGF0aWMgdTY0IGlkZV9kbWFtYXNrID0gRE1BXzMyQklUX01BU0s7CitzdGF0aWMgdTY0IGlkZV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZGIxMjAwX2lkZV9kZXYgPSB7CiAJLm5hbWUJCT0gImF1MTIwMC1pZGUiLAogCS5pZAkJPSAwLAogCS5kZXYgPSB7CiAJCS5kbWFfbWFzayAJCT0gJmlkZV9kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfMzJCSVRfTUFTSywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKIAl9LAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShkYjEyMDBfaWRlX3JlcyksCiAJLnJlc291cmNlCT0gZGIxMjAwX2lkZV9yZXMsCkBAIC0zODUsMTIgKzM4NSwxMiBAQAogCS5hY3RpdmF0ZV9jcwk9IGRiMTIwMF9zcGlfY3NfZW4sCiB9OwogCi1zdGF0aWMgdTY0IHNwaV9kbWFtYXNrID0gRE1BXzMyQklUX01BU0s7CitzdGF0aWMgdTY0IHNwaV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZGIxMjAwX3NwaV9kZXYgPSB7CiAJLmRldgk9IHsKIAkJLmRtYV9tYXNrCQk9ICZzcGlfZG1hbWFzaywKLQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BXzMyQklUX01BU0ssCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCiAJCS5wbGF0Zm9ybV9kYXRhCQk9ICZkYjEyMDBfc3BpX3BsYXRkYXRhLAogCX0sCiAJLm5hbWUJCT0gImF1MTU1MC1zcGkiLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMXgwMC9ib2FyZF9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMXgwMC9ib2FyZF9zZXR1cC5jCmluZGV4IDUwYzliZWYuLjllNDU5NzEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvYm9hcmRfc2V0dXAuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxeDAwL2JvYXJkX3NldHVwLmMKQEAgLTc5LDcgKzc5LDYgQEAKIAogc3RhdGljIHZvaWQgYm9zcG9ydXNfcG93ZXJfb2ZmKHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiSXQncyBub3cgc2FmZSB0byB0dXJuIG9mZiBwb3dlclxuIik7CiAJd2hpbGUgKDEpCiAJCWFzbSB2b2xhdGlsZSAoIi5zZXQgbWlwczMgOyB3YWl0IDsgLnNldCBtaXBzMCIpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTAwMC9ib2FyZF9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTAwMC9ib2FyZF9zZXR1cC5jCmluZGV4IDRlZjUwZDguLmY2NTQwZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEwMDAvYm9hcmRfc2V0dXAuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMDAwL2JvYXJkX3NldHVwLmMKQEAgLTQ3LDkgKzQ3LDExIEBACiAKIHN0YXRpYyB2b2lkIGJvYXJkX3Bvd2VyX29mZih2b2lkKQogewotCXByaW50ayhLRVJOX0FMRVJUICJJdCdzIG5vdyBzYWZlIHRvIHJlbW92ZSBwb3dlclxuIik7CiAJd2hpbGUgKDEpCi0JCWFzbSB2b2xhdGlsZSAoIi5zZXQgbWlwczMgOyB3YWl0IDsgLnNldCBtaXBzMSIpOworCQlhc20gdm9sYXRpbGUgKAorCQkiCS5zZXQJbWlwczMyCQkJCQlcbiIKKwkJIgl3YWl0CQkJCQkJXG4iCisJCSIJLnNldAltaXBzMAkJCQkJXG4iKTsKIH0KIAogdm9pZCBfX2luaXQgYm9hcmRfc2V0dXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvTWFrZWZpbGUgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMjAwL01ha2VmaWxlCmluZGV4IDJlYTliMDIuLjE4YzFiZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9NYWtlZmlsZQpAQCAtMyw1ICszLDMgQEAKICMKIAogb2JqLXkgOj0gYm9hcmRfc2V0dXAubyBwbGF0Zm9ybS5vCi0KLUVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9ncHIvTWFrZWZpbGUgYi9hcmNoL21pcHMvYWxjaGVteS9ncHIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I3M2ZlMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2dwci9NYWtlZmlsZQpAQCAtMCwwICsxLDggQEAKKyMKKyMgIENvcHlyaWdodCAyMDAzIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorIyAgQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIDxzb3VyY2VAbXZpc3RhLmNvbT4KKyMKKyMgTWFrZWZpbGUgZm9yIFRyYXBlemUgSVRTIEdQUiBib2FyZC4KKyMKKworb2JqLXkgKz0gYm9hcmRfc2V0dXAubyBpbml0Lm8gcGxhdGZvcm0ubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZ3ByL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9ncHIvYm9hcmRfc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDJlM2YxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZ3ByL2JvYXJkX3NldHVwLmMKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFdvbGZnYW5nIEdyYW5kZWdnZXIgPHdnQGRlbnguZGU+CisgKgorICogQ29weXJpZ2h0IDIwMDAtMjAwMywgMjAwOCBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiA8c291cmNlQG12aXN0YS5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKKyAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KKyAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAorICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKworI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CisKKyNpbmNsdWRlIDxwcm9tLmg+CisKKyNkZWZpbmUgVUFSVDFfQUREUglLU0VHMUFERFIoVUFSVDFfUEhZU19BRERSKQorI2RlZmluZSBVQVJUM19BRERSCUtTRUcxQUREUihVQVJUM19QSFlTX0FERFIpCisKK2NoYXIgaXJxX3RhYl9hbGNoZW15W11bNV0gX19pbml0ZGF0YSA9IHsKKwlbMF0gPSB7IC0xLCBBVTE1MDBfUENJX0lOVEEsIEFVMTUwMF9QQ0lfSU5UQiwgMHhmZiwgMHhmZiB9LAorfTsKKworc3RhdGljIHZvaWQgZ3ByX3Jlc2V0KGNoYXIgKmMpCit7CisJLyogc3dpdGNoIFN5c3RlbS1MRUQgdG8gb3JhbmdlIChyZWQjIGFuZCBncmVlbiMgb24pICovCisJYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoNCwgMCk7CisJYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoNSwgMCk7CisKKwkvKiB0cmlnZ2VyIHdhdGNoZG9nIHRvIHJlc2V0IGJvYXJkIGluIDIwMG1zICovCisJcHJpbnRrKEtFUk5fRU1FUkcgIlRyaWdnZXJpbmcgd2F0Y2hkb2cgc29mdCByZXNldC4uLlxuIik7CisJcmF3X2xvY2FsX2lycV9kaXNhYmxlKCk7CisJYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoMSwgMCk7CisJdWRlbGF5KDEpOworCWFsY2hlbXlfZ3Bpb19zZXRfdmFsdWUoMSwgMSk7CisJd2hpbGUgKDEpCisJCWNwdV93YWl0KCk7Cit9CisKK3N0YXRpYyB2b2lkIGdwcl9wb3dlcl9vZmYodm9pZCkKK3sKKwl3aGlsZSAoMSkKKwkJY3B1X3dhaXQoKTsKK30KKwordm9pZCBfX2luaXQgYm9hcmRfc2V0dXAodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJUYXJwZXplIElUUyBHUFIgYm9hcmRcbiIpOworCisJcG1fcG93ZXJfb2ZmID0gZ3ByX3Bvd2VyX29mZjsKKwlfbWFjaGluZV9oYWx0ID0gZ3ByX3Bvd2VyX29mZjsKKwlfbWFjaGluZV9yZXN0YXJ0ID0gZ3ByX3Jlc2V0OworCisJLyogRW5hYmxlIFVBUlQzICovCisJYXVfd3JpdGVsKDB4MSwgVUFSVDNfQUREUiArIFVBUlRfTU9EX0NOVFJMKTsvKiBjbG9jayBlbmFibGUgKENFKSAqLworCWF1X3dyaXRlbCgweDMsIFVBUlQzX0FERFIgKyBVQVJUX01PRF9DTlRSTCk7IC8qIENFIGFuZCAiZW5hYmxlIiAqLworCS8qIEVuYWJsZSBVQVJUMSAqLworCWF1X3dyaXRlbCgweDEsIFVBUlQxX0FERFIgKyBVQVJUX01PRF9DTlRSTCk7IC8qIGNsb2NrIGVuYWJsZSAoQ0UpICovCisJYXVfd3JpdGVsKDB4MywgVUFSVDFfQUREUiArIFVBUlRfTU9EX0NOVFJMKTsgLyogQ0UgYW5kICJlbmFibGUiICovCisKKwkvKiBUYWtlIGF3YXkgUmVzZXQgb2YgVU1UUy1jYXJkICovCisJYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoMjE1LCAxKTsKKworI2lmZGVmIENPTkZJR19QQ0kKKyNpZiBkZWZpbmVkKF9fTUlQU0VCX18pCisJYXVfd3JpdGVsKDB4ZiB8ICgyIDw8IDYpIHwgKDEgPDwgNCksIEF1MTUwMF9QQ0lfQ0ZHKTsKKyNlbHNlCisJYXVfd3JpdGVsKDB4ZiwgQXUxNTAwX1BDSV9DRkcpOworI2VuZGlmCisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2dwci9pbml0LmMgYi9hcmNoL21pcHMvYWxjaGVteS9ncHIvaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNDRmNGM1NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2dwci9pbml0LmMKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFdvbGZnYW5nIEdyYW5kZWdnZXIgPHdnQGRlbnguZGU+CisgKgorICogQ29weXJpZ2h0IDIwMDMsIDIwMDggTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECisgKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCisgKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKKyAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgorCisjaW5jbHVkZSA8cHJvbS5oPgorCitjb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKK3sKKwlyZXR1cm4gIkdQUiI7Cit9CisKK3ZvaWQgX19pbml0IHByb21faW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGNoYXIgKm1lbXNpemVfc3RyOworCXVuc2lnbmVkIGxvbmcgbWVtc2l6ZTsKKworCXByb21fYXJnYyA9IGZ3X2FyZzA7CisJcHJvbV9hcmd2ID0gKGNoYXIgKiopZndfYXJnMTsKKwlwcm9tX2VudnAgPSAoY2hhciAqKilmd19hcmcyOworCisJcHJvbV9pbml0X2NtZGxpbmUoKTsKKworCW1lbXNpemVfc3RyID0gcHJvbV9nZXRlbnYoIm1lbXNpemUiKTsKKwlpZiAoIW1lbXNpemVfc3RyKQorCQltZW1zaXplID0gMHgwNDAwMDAwMDsKKwllbHNlCisJCXN0cmljdF9zdHJ0b3VsKG1lbXNpemVfc3RyLCAwLCAmbWVtc2l6ZSk7CisJYWRkX21lbW9yeV9yZWdpb24oMCwgbWVtc2l6ZSwgQk9PVF9NRU1fUkFNKTsKK30KKwordm9pZCBwcm9tX3B1dGNoYXIodW5zaWduZWQgY2hhciBjKQoreworCWFsY2hlbXlfdWFydF9wdXRjaGFyKFVBUlQwX1BIWVNfQUREUiwgYyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9ncHIvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9hbGNoZW15L2dwci9wbGF0Zm9ybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YjQ2NjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYWxjaGVteS9ncHIvcGxhdGZvcm0uYwpAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIEdQUiBib2FyZCBwbGF0Zm9ybSBkZXZpY2UgcmVnaXN0cmF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFdvbGZnYW5nIEdyYW5kZWdnZXIgPHdnQGRlbnguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CisKKy8qCisgKiBXYXRjaGRvZworICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGdwcl93ZHRfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IDEsCisJCS5lbmQJPSAxLAorCQkubmFtZQk9ICJncHItYWRtNjMyMC13ZHQiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBncHJfd2R0X2RldmljZSA9IHsKKwkubmFtZSA9ICJhZG02MzIwLXdkdCIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoZ3ByX3dkdF9yZXNvdXJjZSksCisJLnJlc291cmNlID0gZ3ByX3dkdF9yZXNvdXJjZSwKK307CisKKy8qCisgKiBGTEFTSAorICoKKyAqIDB4MDAwMDAwMDAtMHgwMDIwMDAwMCA6ICJrZXJuZWwiCisgKiAweDAwMjAwMDAwLTB4MDBhMDAwMDAgOiAicm9vdGZzIgorICogMHgwMWQwMDAwMC0weDAxZjAwMDAwIDogImNvbmZpZyIKKyAqIDB4MDFjMDAwMDAtMHgwMWQwMDAwMCA6ICJ5YW1vbiIKKyAqIDB4MDFkMDAwMDAtMHgwMWQ0MDAwMCA6ICJ5YW1vbiBlbnYgdmFycyIKKyAqIDB4MDAwMDAwMDAtMHgwMGEwMDAwMCA6ICJrZXJuZWwrcm9vdGZzIgorICovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZ3ByX210ZF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQk9ICJrZXJuZWwiLAorCQkuc2l6ZQk9IDB4MDAyMDAwMDAsCisJCS5vZmZzZXQJPSAwLAorCX0sCisJeworCQkubmFtZQk9ICJyb290ZnMiLAorCQkuc2l6ZQk9IDB4MDA4MDAwMDAsCisJCS5vZmZzZXQJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRSwKKwl9LAorCXsKKwkJLm5hbWUJPSAiY29uZmlnIiwKKwkJLnNpemUJPSAweDAwMjAwMDAwLAorCQkub2Zmc2V0CT0gMHgwMWQwMDAwMCwKKwl9LAorCXsKKwkJLm5hbWUJPSAieWFtb24iLAorCQkuc2l6ZQk9IDB4MDAxMDAwMDAsCisJCS5vZmZzZXQJPSAweDAxYzAwMDAwLAorCX0sCisJeworCQkubmFtZQk9ICJ5YW1vbiBlbnYgdmFycyIsCisJCS5zaXplCT0gMHgwMDA0MDAwMCwKKwkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwl9LAorCXsKKwkJLm5hbWUJPSAia2VybmVsK3Jvb3RmcyIsCisJCS5zaXplCT0gMHgwMGEwMDAwMCwKKwkJLm9mZnNldAk9IDAsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGdwcl9mbGFzaF9kYXRhID0geworCS53aWR0aAkJPSA0LAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoZ3ByX210ZF9wYXJ0aXRpb25zKSwKKwkucGFydHMJCT0gZ3ByX210ZF9wYXJ0aXRpb25zLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBncHJfbXRkX3Jlc291cmNlID0geworCS5zdGFydAk9IDB4MWUwMDAwMDAsCisJLmVuZAk9IDB4MWZmZmZmZmYsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBncHJfbXRkX2RldmljZSA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmdwcl9mbGFzaF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZncHJfbXRkX3Jlc291cmNlLAorfTsKKworLyoKKyAqIExFRHMKKyAqLworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBncHJfZ3Bpb19sZWRzW10gPSB7CisJewkvKiBncmVlbiAqLworCQkubmFtZQkJCT0gImdwcjpncmVlbiIsCisJCS5ncGlvCQkJPSA0LAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCisJewkvKiByZWQgKi8KKwkJLm5hbWUJCQk9ICJncHI6cmVkIiwKKwkJLmdwaW8JCQk9IDUsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIGdwcl9sZWRfZGF0YSA9IHsKKwkubnVtX2xlZHMgPSBBUlJBWV9TSVpFKGdwcl9ncGlvX2xlZHMpLAorCS5sZWRzID0gZ3ByX2dwaW9fbGVkcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGdwcl9sZWRfZGV2aWNlcyA9IHsKKwkubmFtZSA9ICJsZWRzLWdwaW8iLAorCS5pZCA9IC0xLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmdwcl9sZWRfZGF0YSwKKwl9Cit9OworCisvKgorICogSTJDCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSBncHJfaTJjX2RhdGEgPSB7CisJLnNkYV9waW4JCT0gMjA5LAorCS5zZGFfaXNfb3Blbl9kcmFpbgk9IDEsCisJLnNjbF9waW4JCT0gMjEwLAorCS5zY2xfaXNfb3Blbl9kcmFpbgk9IDEsCisJLnVkZWxheQkJCT0gMiwJCS8qIH4xMDAga0h6ICovCisJLnRpbWVvdXQJCT0gSFosCisgfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZ3ByX2kyY19kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJpMmMtZ3BpbyIsCisJLmlkCQkJPSAtMSwKKwkuZGV2LnBsYXRmb3JtX2RhdGEJPSAmZ3ByX2kyY19kYXRhLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBncHJfaTJjX2luZm9bXSBfX2luaXRkYXRhID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oImxtODMiLCAweDE4KSwKKwkJLnR5cGUgPSAibG04MyIKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZ3ByX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZncHJfd2R0X2RldmljZSwKKwkmZ3ByX210ZF9kZXZpY2UsCisJJmdwcl9pMmNfZGV2aWNlLAorCSZncHJfbGVkX2RldmljZXMsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBncHJfZGV2X2luaXQodm9pZCkKK3sKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBncHJfaTJjX2luZm8sIEFSUkFZX1NJWkUoZ3ByX2kyY19pbmZvKSk7CisKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoZ3ByX2RldmljZXMsIEFSUkFZX1NJWkUoZ3ByX2RldmljZXMpKTsKK30KK2RldmljZV9pbml0Y2FsbChncHJfZGV2X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvTWFrZWZpbGUgYi9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9NYWtlZmlsZQppbmRleCA0YTUzODE1Li44MWI1NDBjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9NYWtlZmlsZQpAQCAtNiw3ICs2LDQgQEAKICMgTWFrZWZpbGUgZm9yIDRHIFN5c3RlbXMgTVRYLTEgYm9hcmQuCiAjCiAKLWxpYi15IDo9IGluaXQubyBib2FyZF9zZXR1cC5vCi1vYmoteSA6PSBwbGF0Zm9ybS5vCi0KLUVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCitvYmoteSArPSBpbml0Lm8gYm9hcmRfc2V0dXAubyBwbGF0Zm9ybS5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9ib2FyZF9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvYm9hcmRfc2V0dXAuYwppbmRleCBhOWYwMzM2Li42Mzk4ZmE5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9ib2FyZF9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2JvYXJkX3NldHVwLmMKQEAgLTYwLDE1ICs2MCwxNSBAQAogCiBzdGF0aWMgdm9pZCBtdHgxX3Bvd2VyX29mZih2b2lkKQogewotCXByaW50ayhLRVJOX0FMRVJUICJJdCdzIG5vdyBzYWZlIHRvIHJlbW92ZSBwb3dlclxuIik7CiAJd2hpbGUgKDEpCi0JCWFzbSB2b2xhdGlsZSAoIi5zZXQgbWlwczMgOyB3YWl0IDsgLnNldCBtaXBzMSIpOworCQlhc20gdm9sYXRpbGUgKAorCQkiCS5zZXQJbWlwczMyCQkJCQlcbiIKKwkJIgl3YWl0CQkJCQkJXG4iCisJCSIJLnNldAltaXBzMAkJCQkJXG4iKTsKIH0KIAogdm9pZCBfX2luaXQgYm9hcmRfc2V0dXAodm9pZCkKIHsKLQlhbGNoZW15X2dwaW8yX2VuYWJsZSgpOwotCiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQogCS8qIEVuYWJsZSBVU0IgcG93ZXIgc3dpdGNoICovCiAJYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoMjA0LCAwKTsKQEAgLTEwNywyMSArMTA3LDE3IEBACiBpbnQKIG10eDFfcGNpX2lkc2VsKHVuc2lnbmVkIGludCBkZXZzZWwsIGludCBhc3NlcnQpCiB7Ci0jZGVmaW5lIE1UWF9JRFNFTF9PTkxZXzBfQU5EXzMgMAotI2lmIE1UWF9JRFNFTF9PTkxZXzBfQU5EXzMKLQlpZiAoZGV2c2VsICE9IDAgJiYgZGV2c2VsICE9IDMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIqKiogbm90IDAgb3IgM1xuIik7Ci0JCXJldHVybiAwOwotCX0KLSNlbmRpZgotCisJLyogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IG5lY2Vzc2FyeSB0byBzdXBwb3J0IGEgcHJvcHJpZXRhcnkgQ2FyZGJ1cworCSAqIGFkYXB0ZXIgb24gdGhlIG10eC0xICJzaW5nbGVib2FyZCIgdmFyaWFudC4gSXQgdHJpZ2dlcnMgYSBjdXN0b20KKwkgKiBsb2dpYyBjaGlwIGNvbm5lY3RlZCB0byBFWFRfSU8zIChHUElPMSkgdG8gc3VwcHJlc3MgSURTRUwgc2lnbmFscy4KKwkgKi8KIAlpZiAoYXNzZXJ0ICYmIGRldnNlbCAhPSAwKQogCQkvKiBTdXBwcmVzcyBzaWduYWwgdG8gQ2FyZGJ1cyAqLwotCQlncGlvX3NldF92YWx1ZSgxLCAwKTsJLyogc2V0IEVYVF9JTzMgT0ZGICovCisJCWFsY2hlbXlfZ3Bpb19zZXRfdmFsdWUoMSwgMCk7CS8qIHNldCBFWFRfSU8zIE9GRiAqLwogCWVsc2UKLQkJZ3Bpb19zZXRfdmFsdWUoMSwgMSk7CS8qIHNldCBFWFRfSU8zIE9OICovCisJCWFsY2hlbXlfZ3Bpb19zZXRfdmFsdWUoMSwgMSk7CS8qIHNldCBFWFRfSU8zIE9OICovCiAKLQlhdV9zeW5jX3VkZWxheSgxKTsKKwl1ZGVsYXkoMSk7CiAJcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvTWFrZWZpbGUgYi9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL01ha2VmaWxlCmluZGV4IDRkYzgxZDcuLjkxZGVmY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9NYWtlZmlsZQpAQCAtNSw2ICs1LDQgQEAKICMgTWFrZWZpbGUgZm9yIE15Q2FibGUgWFhTMTUwMCBib2FyZC4KICMKIAotbGliLXkgOj0gaW5pdC5vIGJvYXJkX3NldHVwLm8gcGxhdGZvcm0ubwotCi1FWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgorb2JqLXkgKz0gaW5pdC5vIGJvYXJkX3NldHVwLm8gcGxhdGZvcm0ubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9ib2FyZF9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9ib2FyZF9zZXR1cC5jCmluZGV4IDQ3YjQyOTIuLmI0M2M5MTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvYm9hcmRfc2V0dXAuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL2JvYXJkX3NldHVwLmMKQEAgLTQyLDkgKzQyLDExIEBACiAKIHN0YXRpYyB2b2lkIHh4czE1MDBfcG93ZXJfb2ZmKHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fQUxFUlQgIkl0J3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHBvd2VyXG4iKTsKIAl3aGlsZSAoMSkKLQkJYXNtIHZvbGF0aWxlICgiLnNldCBtaXBzMyA7IHdhaXQgOyAuc2V0IG1pcHMxIik7CisJCWFzbSB2b2xhdGlsZSAoCisJCSIJLnNldAltaXBzMzIJCQkJCVxuIgorCQkiCXdhaXQJCQkJCQlcbiIKKwkJIgkuc2V0CW1pcHMwCQkJCQlcbiIpOwogfQogCiB2b2lkIF9faW5pdCBib2FyZF9zZXR1cCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FyNy9NYWtlZmlsZSBiL2FyY2gvbWlwcy9hcjcvTWFrZWZpbGUKaW5kZXggMjZiYzVkYS4uNzQzNWU0NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FyNy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYXI3L01ha2VmaWxlCkBAIC04LDQgKzgsMyBAQAogCXBsYXRmb3JtLm8gXAogCWdwaW8ubyBcCiAJY2xvY2subwotRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hcjcvUGxhdGZvcm0gYi9hcmNoL21pcHMvYXI3L1BsYXRmb3JtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZjg1YzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYXI3L1BsYXRmb3JtCkBAIC0wLDAgKzEsNiBAQAorIworIyBUZXhhcyBJbnN0cnVtZW50cyBBUjcKKyMKK3BsYXRmb3JtLSQoQ09ORklHX0FSNykgICAgICAgICAgKz0gYXI3LworY2ZsYWdzLSQoQ09ORklHX0FSNykgICAgICAgICAgICArPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXI3Citsb2FkLSQoQ09ORklHX0FSNykgICAgICAgICAgICAgICs9IDB4ZmZmZmZmZmY5NDEwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FyNy9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2FyNy9wbGF0Zm9ybS5jCmluZGV4IDhmMzFkMWQuLjBkYTViMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hcjcvcGxhdGZvcm0uYworKysgYi9hcmNoL21pcHMvYXI3L3BsYXRmb3JtLmMKQEAgLTI5Miw0MCArMjkyLDI4IEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNwbWFjX2hpZ2hfcmVzKSwKIH07CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBjaGFyMmhleChjaGFyIGgpCitzdGF0aWMgdm9pZCBfX2luaXQgY3BtYWNfZ2V0X21hYyhpbnQgaW5zdGFuY2UsIHVuc2lnbmVkIGNoYXIgKmRldl9hZGRyKQogewotCXN3aXRjaCAoaCkgewotCWNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKLQljYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6Ci0JCXJldHVybiBoIC0gJzAnOwotCWNhc2UgJ0EnOiBjYXNlICdCJzogY2FzZSAnQyc6IGNhc2UgJ0QnOiBjYXNlICdFJzogY2FzZSAnRic6Ci0JCXJldHVybiBoIC0gJ0EnICsgMTA7Ci0JY2FzZSAnYSc6IGNhc2UgJ2InOiBjYXNlICdjJzogY2FzZSAnZCc6IGNhc2UgJ2UnOiBjYXNlICdmJzoKLQkJcmV0dXJuIGggLSAnYScgKyAxMDsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci19CisJY2hhciBuYW1lWzVdLCAqbWFjOwogCi1zdGF0aWMgdm9pZCBjcG1hY19nZXRfbWFjKGludCBpbnN0YW5jZSwgdW5zaWduZWQgY2hhciAqZGV2X2FkZHIpCi17Ci0JaW50IGk7Ci0JY2hhciBuYW1lWzVdLCBkZWZhdWx0X21hY1tFVEhfQUxFTl0sICptYWM7Ci0KLQltYWMgPSBOVUxMOwogCXNwcmludGYobmFtZSwgIm1hYyVjIiwgJ2EnICsgaW5zdGFuY2UpOwogCW1hYyA9IHByb21fZ2V0ZW52KG5hbWUpOwotCWlmICghbWFjKSB7CisJaWYgKCFtYWMgJiYgaW5zdGFuY2UpIHsKIAkJc3ByaW50ZihuYW1lLCAibWFjJWMiLCAnYScpOwogCQltYWMgPSBwcm9tX2dldGVudihuYW1lKTsKIAl9Ci0JaWYgKCFtYWMpIHsKLQkJcmFuZG9tX2V0aGVyX2FkZHIoZGVmYXVsdF9tYWMpOwotCQltYWMgPSBkZWZhdWx0X21hYzsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLQkJZGV2X2FkZHJbaV0gPSAoY2hhcjJoZXgobWFjW2kgKiAzXSkgPDwgNCkgKwotCQkJY2hhcjJoZXgobWFjW2kgKiAzICsgMV0pOworCisJaWYgKG1hYykgeworCQlpZiAoc3NjYW5mKG1hYywgIiVoaHg6JWhoeDolaGh4OiVoaHg6JWhoeDolaGh4IiwKKwkJCQkJJmRldl9hZGRyWzBdLCAmZGV2X2FkZHJbMV0sCisJCQkJCSZkZXZfYWRkclsyXSwgJmRldl9hZGRyWzNdLAorCQkJCQkmZGV2X2FkZHJbNF0sICZkZXZfYWRkcls1XSkgIT0gNikgeworCQkJcHJfd2FybmluZygiY2Fubm90IHBhcnNlIG1hYyBhZGRyZXNzLCAiCisJCQkJCSJ1c2luZyByYW5kb20gYWRkcmVzc1xuIik7CisJCQlyYW5kb21fZXRoZXJfYWRkcihkZXZfYWRkcik7CisJCX0KKwl9IGVsc2UKKwkJcmFuZG9tX2V0aGVyX2FkZHIoZGV2X2FkZHIpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY200N3h4L1BsYXRmb3JtIGIvYXJjaC9taXBzL2JjbTQ3eHgvUGxhdGZvcm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc0YjdjYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9iY200N3h4L1BsYXRmb3JtCkBAIC0wLDAgKzEsNyBAQAorIworIyBCcm9hZGNvbSBCQ000N1hYIGJvYXJkcworIworcGxhdGZvcm0tJChDT05GSUdfQkNNNDdYWCkJKz0gYmNtNDd4eC8KK2NmbGFncy0kKENPTkZJR19CQ000N1hYKQkrPQkJCQkJXAorCQktSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNDd4eAorbG9hZC0kKENPTkZJR19CQ000N1hYKQkJOj0gMHhmZmZmZmZmZjgwMDAxMDAwCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNDd4eC9udnJhbS5jIGIvYXJjaC9taXBzL2JjbTQ3eHgvbnZyYW0uYwppbmRleCAwNmUwM2IyLi5lNWI2NjE1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNDd4eC9udnJhbS5jCisrKyBiL2FyY2gvbWlwcy9iY200N3h4L252cmFtLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAljaGFyICp2YXIsICp2YWx1ZSwgKmVuZCwgKmVxOwogCiAJaWYgKCFuYW1lKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIE5WUkFNX0VSUl9JTlZfUEFSQU07CiAKIAlpZiAoIW52cmFtX2J1ZlswXSkKIAkJZWFybHlfbnZyYW1faW5pdCgpOwpAQCAtODksNiArODksNiBAQAogCQkJcmV0dXJuIDA7CiAJCX0KIAl9Ci0JcmV0dXJuIDE7CisJcmV0dXJuIE5WUkFNX0VSUl9FTlZOT1RGT1VORDsKIH0KIEVYUE9SVF9TWU1CT0wobnZyYW1fZ2V0ZW52KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY200N3h4L3Byb20uYyBiL2FyY2gvbWlwcy9iY200N3h4L3Byb20uYwppbmRleCAwZmE2NDZjLi5mNmU5MDYzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNDd4eC9wcm9tLmMKKysrIGIvYXJjaC9taXBzL2JjbTQ3eHgvcHJvbS5jCkBAIC0xMjYsNiArMTI2LDcgQEAKIHN0YXRpYyBfX2luaXQgdm9pZCBwcm9tX2luaXRfbWVtKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBtZW07CisJdW5zaWduZWQgbG9uZyBtYXg7CiAKIAkvKiBGaWd1cmUgb3V0IG1lbW9yeSBzaXplIGJ5IGZpbmRpbmcgYWxpYXNlcy4KIAkgKgpAQCAtMTM0LDIxICsxMzUsMjYgQEAKIAkgKiB3YW50IHRvIHJldXNlIHRoZSBtZW1vcnkgdXNlZCBieSBDRkUgKGFyb3VuZCA0TUIpLiBUaGF0IG1lYW5zIGNmZV8qCiAJICogZnVuY3Rpb25zIHN0b3AgdG8gd29yayBhdCBzb21lIHBvaW50IGR1cmluZyB0aGUgYm9vdCwgd2Ugc2hvdWxkIG9ubHkKIAkgKiBjYWxsIHRoZW0gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYm9vdC4KKwkgKgorCSAqIEJDTTQ3WFggdXNlcyAxMjhNQiBmb3IgYWRkcmVzc2luZyB0aGUgcmFtLCBpZiB0aGUgc3lzdGVtIGNvbnRhaW5zCisJICogbGVzcyB0aGF0IHRoYXQgYW1vdW50IG9mIHJhbSBpdCByZW1hcHMgdGhlIHJhbSBtb3JlIG9mdGVuIGludG8gdGhlCisJICogYXZhaWxhYmxlIHNwYWNlLgorCSAqIEFjY2Vzc2luZyBtZW1vcnkgYWZ0ZXIgMTI4TUIgd2lsbCBjYXVzZSBhbiBleGNlcHRpb24uCisJICogbWF4IGNvbnRhaW5zIHRoZSBiaWdnZXN0IHBvc3NpYmxlIGFkZHJlc3Mgc3VwcG9ydGVkIGJ5IHRoZSBwbGF0Zm9ybS4KKwkgKiBJZiB0aGUgbWV0aG9kIHdhbnRzIHRvIHRyeSBzb21ldGhpbmcgYWJvdmUgd2UgYXNzdW1lIDEyOE1CIHJhbS4KIAkgKi8KKwltYXggPSAoKHVuc2lnbmVkIGxvbmcpKHByb21faW5pdCkgfCAoKDEyOCA8PCAyMCkgLSAxKSk7CiAJZm9yIChtZW0gPSAoMSA8PCAyMCk7IG1lbSA8ICgxMjggPDwgMjApOyBtZW0gKz0gKDEgPDwgMjApKSB7CisJCWlmICgoKHVuc2lnbmVkIGxvbmcpKHByb21faW5pdCkgKyBtZW0pID4gbWF4KSB7CisJCQltZW0gPSAoMTI4IDw8IDIwKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJhc3N1bWUgMTI4TUIgUkFNXG4iKTsKKwkJCWJyZWFrOworCQl9CiAJCWlmICgqKHVuc2lnbmVkIGxvbmcgKikoKHVuc2lnbmVkIGxvbmcpKHByb21faW5pdCkgKyBtZW0pID09CiAJCSAgICAqKHVuc2lnbmVkIGxvbmcgKikocHJvbV9pbml0KSkKIAkJCWJyZWFrOwogCX0KIAotCS8qIElnbm9yaW5nIHRoZSBsYXN0IHBhZ2Ugd2hlbiBkZHIgc2l6ZSBpcyAxMjhNLiBDYWNoZWQKLQkgKiBhY2Nlc3NlcyB0byBsYXN0IHBhZ2UgaXMgY2F1c2luZyB0aGUgcHJvY2Vzc29yIHRvIHByZWZldGNoCi0JICogdXNpbmcgYWRkcmVzcyBhYm92ZSAxMjhNIHN0ZXBwaW5nIG91dCBvZiB0aGUgZGRyIGFkZHJlc3MKLQkgKiBzcGFjZS4KLQkgKi8KLQlpZiAobWVtID09IDB4ODAwMDAwMCkKLQkJbWVtIC09IDB4MTAwMDsKLQogCWFkZF9tZW1vcnlfcmVnaW9uKDAsIG1lbSwgQk9PVF9NRU1fUkFNKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTYzeHgvTWFrZWZpbGUgYi9hcmNoL21pcHMvYmNtNjN4eC9NYWtlZmlsZQppbmRleCAwMDA2NGI2Li42ZGZkYzY5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNjN4eC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYmNtNjN4eC9NYWtlZmlsZQpAQCAtMyw1ICszLDMgQEAKIG9iai0kKENPTkZJR19FQVJMWV9QUklOVEspCSs9IGVhcmx5X3ByaW50ay5vCiAKIG9iai15CQkrPSBib2FyZHMvCi0KLUVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNjN4eC9QbGF0Zm9ybSBiL2FyY2gvbWlwcy9iY202M3h4L1BsYXRmb3JtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmODZiMmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYmNtNjN4eC9QbGF0Zm9ybQpAQCAtMCwwICsxLDcgQEAKKyMKKyMgQnJvYWRjb20gQkNNNjNYWCBib2FyZHMKKyMKK3BsYXRmb3JtLSQoQ09ORklHX0JDTTYzWFgpCSs9IGJjbTYzeHgvCitjZmxhZ3MtJChDT05GSUdfQkNNNjNYWCkJKz0JCQkJCVwKKwkJLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTYzeHgvCitsb2FkLSQoQ09ORklHX0JDTTYzWFgpCQk6PSAweGZmZmZmZmZmODAwMTAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY202M3h4L2Rldi1lbmV0LmMgYi9hcmNoL21pcHMvYmNtNjN4eC9kZXYtZW5ldC5jCmluZGV4IDlmNTQ0YmEuLjM5YzIzMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY202M3h4L2Rldi1lbmV0LmMKKysrIGIvYXJjaC9taXBzL2JjbTYzeHgvZGV2LWVuZXQuYwpAQCAtMTA0LDYgKzEwNCw5IEBACiAJaWYgKHVuaXQgPiAxKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCWlmICh1bml0ID09IDEgJiYgQkNNQ1BVX0lTXzYzMzgoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlpZiAoIXNoYXJlZF9kZXZpY2VfcmVnaXN0ZXJlZCkgewogCQlzaGFyZWRfcmVzWzBdLnN0YXJ0ID0gYmNtNjN4eF9yZWdzZXRfYWRkcmVzcyhSU0VUX0VORVRETUEpOwogCQlzaGFyZWRfcmVzWzBdLmVuZCA9IHNoYXJlZF9yZXNbMF0uc3RhcnQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYm9vdC8uZ2l0aWdub3JlIGIvYXJjaC9taXBzL2Jvb3QvLmdpdGlnbm9yZQppbmRleCA0NjY3YTVmLi5mMjEwYjA5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYm9vdC8uZ2l0aWdub3JlCisrKyBiL2FyY2gvbWlwcy9ib290Ly5naXRpZ25vcmUKQEAgLTMsMyArMyw0IEBACiB2bWxpbnV4LioKIHpJbWFnZQogekltYWdlLnRtcAorY2FsY192bWxpbnV6X2xvYWRfYWRkcgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL21pcHMvYm9vdC9NYWtlZmlsZQppbmRleCBlMzlhMDhlLi44NWJjYjVhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYm9vdC9NYWtlZmlsZQpAQCAtMTEsMzUgKzExLDMyIEBACiAjIFNvbWUgREVDc3RhdGlvbnMgbmVlZCBhbGwgcG9zc2libGUgc2VjdGlvbnMgb2YgYW4gRUNPRkYgZXhlY3V0YWJsZQogIwogaWZkZWYgQ09ORklHX01BQ0hfREVDU1RBVElPTgotICBFMkVGTEFHUyA9IC1hCi1lbHNlCi0gIEUyRUZMQUdTID0KKyAgZTJlZmxhZyA6PSAtYQogZW5kaWYKIAogIwogIyBEcm9wIHNvbWUgdW5pbnRlcmVzdGluZyBzZWN0aW9ucyBpbiB0aGUga2VybmVsLgogIyBUaGlzIGlzIG9ubHkgcmVsZXZhbnQgZm9yIEVMRiBrZXJuZWxzIGJ1dCBkb2Vzbid0IGh1cnQgYS5vdXQKICMKLWRyb3Atc2VjdGlvbnMJPSAucmVnaW5mbyAubWRlYnVnIC5jb21tZW50IC5ub3RlIC5wZHIgLm9wdGlvbnMgLk1JUFMub3B0aW9ucwotc3RyaXAtZmxhZ3MJPSAkKGFkZHByZWZpeCAtLXJlbW92ZS1zZWN0aW9uPSwkKGRyb3Atc2VjdGlvbnMpKQorZHJvcC1zZWN0aW9ucyA6PSAucmVnaW5mbyAubWRlYnVnIC5jb21tZW50IC5ub3RlIC5wZHIgLm9wdGlvbnMgLk1JUFMub3B0aW9ucworc3RyaXAtZmxhZ3MgICA6PSAkKGFkZHByZWZpeCAtLXJlbW92ZS1zZWN0aW9uPSwkKGRyb3Atc2VjdGlvbnMpKQogCi1WTUxJTlVYID0gdm1saW51eAoraG9zdHByb2dzLXkgOj0gZWxmMmVjb2ZmCiAKLWFsbDogdm1saW51eC5lY29mZiB2bWxpbnV4LnNyZWMKK3RhcmdldHMgOj0gdm1saW51eC5lY29mZgorcXVpZXRfY21kX2Vjb2ZmID0gRUNPRkYgICAkQAorICAgICAgY21kX2Vjb2ZmID0gJChvYmopL2VsZjJlY29mZiAkKFZNTElOVVgpICRAICQoZTJlZmxhZykKKyQob2JqKS92bWxpbnV4LmVjb2ZmOiAkKG9iaikvZWxmMmVjb2ZmICQoVk1MSU5VWCkgRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxlY29mZikKIAotdm1saW51eC5lY29mZjogJChvYmopL2VsZjJlY29mZiAkKFZNTElOVVgpCi0JJChvYmopL2VsZjJlY29mZiAkKFZNTElOVVgpICQob2JqKS92bWxpbnV4LmVjb2ZmICQoRTJFRkxBR1MpCit0YXJnZXRzICs9IHZtbGludXguYmluCitxdWlldF9jbWRfYmluID0gT0JKQ09QWSAkQAorICAgICAgY21kX2JpbiA9ICQoT0JKQ09QWSkgLU8gYmluYXJ5ICQoc3RyaXAtZmxhZ3MpICQoVk1MSU5VWCkgJEAKKyQob2JqKS92bWxpbnV4LmJpbjogJChWTUxJTlVYKSBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLGJpbikKIAotJChvYmopL2VsZjJlY29mZjogJChvYmopL2VsZjJlY29mZi5jCi0JJChIT1NUQ0MpIC1vICRAICReCi0KLXZtbGludXguYmluOiAkKFZNTElOVVgpCi0JJChPQkpDT1BZKSAtTyBiaW5hcnkgJChzdHJpcC1mbGFncykgJChWTUxJTlVYKSAkKG9iaikvdm1saW51eC5iaW4KLQotdm1saW51eC5zcmVjOiAkKFZNTElOVVgpCi0JJChPQkpDT1BZKSAtUyAtTyBzcmVjICQoc3RyaXAtZmxhZ3MpICQoVk1MSU5VWCkgJChvYmopL3ZtbGludXguc3JlYwotCi1jbGVhbi1maWxlcyArPSBlbGYyZWNvZmYgXAotCSAgICAgICB2bWxpbnV4LmJpbiBcCi0JICAgICAgIHZtbGludXguZWNvZmYgXAotCSAgICAgICB2bWxpbnV4LnNyZWMKK3RhcmdldHMgKz0gdm1saW51eC5zcmVjCitxdWlldF9jbWRfc3JlYyA9IE9CSkNPUFkgJEAKKyAgICAgIGNtZF9zcmVjID0gJChPQkpDT1BZKSAtUyAtTyBzcmVjICQoc3RyaXAtZmxhZ3MpICQoVk1MSU5VWCkgJEAKKyQob2JqKS92bWxpbnV4LnNyZWM6ICQoVk1MSU5VWCkgRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxzcmVjKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKaW5kZXggNzkwZGRkMy4uZWQ5YmI3MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC0xMiwxNCArMTIsNiBAQAogIyBBdXRob3I6IFd1IFpoYW5namluIDx3dXpoYW5namluQGdtYWlsLmNvbT4KICMKIAotIyBjb21wcmVzc2VkIGtlcm5lbCBsb2FkIGFkZHI6IFZNTElOVVpfTE9BRF9BRERSRVNTID4gVk1MSU5VWF9MT0FEX0FERFJFU1MgKyBWTUxJTlVYX1NJWkUKLVZNTElOVVhfU0laRSA6PSAkKHNoZWxsIHdjIC1jICQob2JqdHJlZSkvJChLQlVJTERfSU1BR0UpIDI+L2Rldi9udWxsIHwgY3V0IC1kJyAnIC1mMSkKLVZNTElOVVhfU0laRSA6PSAkKHNoZWxsIFsgLW4gIiQoVk1MSU5VWF9TSVpFKSIgXSAmJiBlY2hvIC1uICQkKCgkKFZNTElOVVhfU0laRSkgKyAoNjU1MzYgLSAkKFZNTElOVVhfU0laRSkgJSA2NTUzNikpKSkKLSMgVk1MSU5VWl9MT0FEX0FERFJFU1MgPSBjb25jYXQgImhpZ2gzMiBvZiBWTUxJTlVYX0xPQURfQUREUkVTUyIgYW5kICIobG93MzIgb2YgVk1MSU5VWF9MT0FEX0FERFJFU1MpICsgVk1MSU5VWF9TSVpFIgotSElHSDMyIDo9ICQoc2hlbGwgQT0kKFZNTElOVVhfTE9BRF9BRERSRVNTKTsgWyAkJHtcI0F9IC1ndCAxMCBdICYmIGV4cHIgc3Vic3RyICIkKFZNTElOVVhfTE9BRF9BRERSRVNTKSIgMyAkJCgoJCR7XCNBfSAtIDEwKSkpCi1MT1czMiA6PSAkKHNoZWxsIFsgLW4gIiQoSElHSDMyKSIgXSAmJiBBPTExIHx8IEE9MzsgZXhwciBzdWJzdHIgIiQoVk1MSU5VWF9MT0FEX0FERFJFU1MpIiAkJHtBfSA4KQotVk1MSU5VWl9MT0FEX0FERFJFU1MgOj0gMHgkKHNoZWxsIFsgLW4gIiQoVk1MSU5VWF9TSVpFKSIgLWEgLW4gIiQoTE9XMzIpIiBdICYmIHByaW50ZiAiJChISUdIMzIpJTA4eCIgJCQoKCQoVk1MSU5VWF9TSVpFKSArIDB4JChMT1czMikpKSkKLQogIyBzZXQgdGhlIGRlZmF1bHQgc2l6ZSBvZiB0aGUgbWFsbG9jaW5nIGFyZWEgZm9yIGRlY29tcHJlc3NpbmcKIEJPT1RfSEVBUF9TSVpFIDo9IDB4NDAwMDAwCiAKQEAgLTMzLDQ5ICsyNSw2MSBAQAogCS1EQk9PVF9IRUFQX1NJWkU9JChCT09UX0hFQVBfU0laRSkgXAogCS1ES0VSTkVMX0VOVFJZPTB4JChzaGVsbCAkKE5NKSAkKG9ianRyZWUpLyQoS0JVSUxEX0lNQUdFKSAyPi9kZXYvbnVsbCB8IGdyZXAgIiBrZXJuZWxfZW50cnkiIHwgY3V0IC1mMSAtZCBcICkKIAotb2JqLXkgOj0gJChvYmopL2hlYWQubyAkKG9iaikvZGVjb21wcmVzcy5vICQob2JqKS9kYmcubwordGFyZ2V0cyA6PSBoZWFkLm8gZGVjb21wcmVzcy5vIGRiZy5vIHVhcnQtMTY1NTAubyB1YXJ0LWFsY2hlbXkubworCisjIGRlY29tcHJlc3NvciBvYmplY3RzIChsaW5rZWQgd2l0aCB2bWxpbnV6KQordm1saW51em9ianMteSA6PSAkKG9iaikvaGVhZC5vICQob2JqKS9kZWNvbXByZXNzLm8gJChvYmopL2RiZy5vCiAKIGlmZGVmIENPTkZJR19ERUJVR19aQk9PVAotb2JqLSQoQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVF9VQVJUMTY1NTApICs9ICQob2JqKS91YXJ0LTE2NTUwLm8KLW9iai0kKENPTkZJR19NQUNIX0FMQ0hFTVkpCQkgICArPSAkKG9iaikvdWFydC1hbGNoZW15Lm8KK3ZtbGludXpvYmpzLSQoQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVF9VQVJUMTY1NTApICs9ICQob2JqKS91YXJ0LTE2NTUwLm8KK3ZtbGludXpvYmpzLSQoQ09ORklHX01JUFNfQUxDSEVNWSkJCSAgICs9ICQob2JqKS91YXJ0LWFsY2hlbXkubwogZW5kaWYKIAordGFyZ2V0cyArPSB2bWxpbnV4LmJpbgogT0JKQ09QWUZMQUdTX3ZtbGludXguYmluIDo9ICQoT0JKQ09QWUZMQUdTKSAtTyBiaW5hcnkgLVIgLmNvbW1lbnQgLVMKLSQob2JqKS92bWxpbnV4LmJpbjogJChLQlVJTERfSU1BR0UpCiskKG9iaikvdm1saW51eC5iaW46ICQoS0JVSUxEX0lNQUdFKSBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLG9iamNvcHkpCiAKLXN1ZmZpeF8kKENPTkZJR19LRVJORUxfR1pJUCkgID0gZ3oKLXN1ZmZpeF8kKENPTkZJR19LRVJORUxfQlpJUDIpID0gYnoyCi1zdWZmaXhfJChDT05GSUdfS0VSTkVMX0xaTUEpICA9IGx6bWEKLXN1ZmZpeF8kKENPTkZJR19LRVJORUxfTFpPKSAgID0gbHpvCiB0b29sXyQoQ09ORklHX0tFUk5FTF9HWklQKSAgICA9IGd6aXAKIHRvb2xfJChDT05GSUdfS0VSTkVMX0JaSVAyKSAgID0gYnppcDIKIHRvb2xfJChDT05GSUdfS0VSTkVMX0xaTUEpICAgID0gbHptYQogdG9vbF8kKENPTkZJR19LRVJORUxfTFpPKSAgICAgPSBsem8KLSQob2JqKS92bWxpbnV4LiQoc3VmZml4X3kpOiAkKG9iaikvdm1saW51eC5iaW4KKwordGFyZ2V0cyArPSB2bWxpbnV4LmJpbi56CiskKG9iaikvdm1saW51eC5iaW4uejogJChvYmopL3ZtbGludXguYmluIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsJCh0b29sX3kpKQogCi0kKG9iaikvcGlnZ3kubzogJChvYmopL3ZtbGludXguJChzdWZmaXhfeSkgJChvYmopL2R1bW15Lm8KLQkkKFEpJChPQkpDT1BZKSAkKE9CSkNPUFlGTEFHUykgXAotCQktLWFkZC1zZWN0aW9uPS5pbWFnZT0kPCBcCi0JCS0tc2V0LXNlY3Rpb24tZmxhZ3M9LmltYWdlPWNvbnRlbnRzLGFsbG9jLGxvYWQscmVhZG9ubHksZGF0YSBcCi0JCSQob2JqKS9kdW1teS5vICRACit0YXJnZXRzICs9IHBpZ2d5Lm8KK09CSkNPUFlGTEFHU19waWdneS5vIDo9IC0tYWRkLXNlY3Rpb249LmltYWdlPSQob2JqKS92bWxpbnV4LmJpbi56IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC0tc2V0LXNlY3Rpb24tZmxhZ3M9LmltYWdlPWNvbnRlbnRzLGFsbG9jLGxvYWQscmVhZG9ubHksZGF0YQorJChvYmopL3BpZ2d5Lm86ICQob2JqKS9kdW1teS5vICQob2JqKS92bWxpbnV4LmJpbi56IEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsb2JqY29weSkKIAotTERGTEFHU192bWxpbnV6IDo9ICQoTERGTEFHUykgLVR0ZXh0ICQoVk1MSU5VWl9MT0FEX0FERFJFU1MpIC1UCi12bWxpbnV6OiAkKHNyYykvbGQuc2NyaXB0ICQob2JqLXkpICQob2JqKS9waWdneS5vCi0JJChjYWxsIGlmX2NoYW5nZWQsbGQpCi0JJChRKSQoT0JKQ09QWSkgJChPQkpDT1BZRkxBR1MpICRACisjIENhbGN1bGF0ZSB0aGUgbG9hZCBhZGRyZXNzIG9mIHRoZSBjb21wcmVzc2VkIGtlcm5lbCBpbWFnZQoraG9zdHByb2dzLXkgOj0gY2FsY192bWxpbnV6X2xvYWRfYWRkcgorCitWTUxJTlVaX0xPQURfQUREUkVTUyA9ICQoc2hlbGwgJChvYmopL2NhbGNfdm1saW51el9sb2FkX2FkZHIgXAorCQkkKG9ianRyZWUpLyQoS0JVSUxEX0lNQUdFKSAkKFZNTElOVVhfTE9BRF9BRERSRVNTKSkKKwordm1saW51em9ianMteSArPSAkKG9iaikvcGlnZ3kubworCitxdWlldF9jbWRfemxkID0gTEQgICAgICAkQAorICAgICAgY21kX3psZCA9ICQoTEQpICQoTERGTEFHUykgLVR0ZXh0ICQoVk1MSU5VWl9MT0FEX0FERFJFU1MpIC1UICQ8ICQodm1saW51em9ianMteSkgLW8gJEAKK3F1aWV0X2NtZF9zdHJpcCA9IFNUUklQICAgJEAKKyAgICAgIGNtZF9zdHJpcCA9ICQoU1RSSVApIC1zICRACit2bWxpbnV6OiAkKHNyYykvbGQuc2NyaXB0ICQodm1saW51em9ianMteSkgJChvYmopL2NhbGNfdm1saW51el9sb2FkX2FkZHIKKwkkKGNhbGwgY21kLHpsZCkKKwkkKGNhbGwgY21kLHN0cmlwKQogCiAjCiAjIFNvbWUgREVDc3RhdGlvbnMgbmVlZCBhbGwgcG9zc2libGUgc2VjdGlvbnMgb2YgYW4gRUNPRkYgZXhlY3V0YWJsZQogIwogaWZkZWYgQ09ORklHX01BQ0hfREVDU1RBVElPTgotICBFMkVGTEFHUyA9IC1hCi1lbHNlCi0gIEUyRUZMQUdTID0KKyAgZTJlZmxhZyA6PSAtYQogZW5kaWYKIAogIyBlbGYyZWNvZmYgY2FuIG9ubHkgaGFuZGxlIDMyYml0IGltYWdlCitob3N0cHJvZ3MteSArPSAuLi9lbGYyZWNvZmYKIAogaWZkZWYgQ09ORklHXzMyQklUCiAJVk1MSU5VWiA9IHZtbGludXoKQEAgLTgzLDIzICs4NywyMiBAQAogCVZNTElOVVogPSB2bWxpbnV6LjMyCiBlbmRpZgogCitxdWlldF9jbWRfMzIgPSBPQkpDT1BZICRACisgICAgICBjbWRfMzIgPSAkKE9CSkNPUFkpIC1PICQoMzJiaXQtYmZkKSAkKE9CSkNPUFlGTEFHUykgJDwgJEAKIHZtbGludXouMzI6IHZtbGludXoKLQkkKFEpJChPQkpDT1BZKSAtTyAkKDMyYml0LWJmZCkgJChPQkpDT1BZRkxBR1MpICQ8ICRACisJJChjYWxsIGNtZCwzMikKIAorcXVpZXRfY21kX2Vjb2ZmID0gRUNPRkYgICAkQAorICAgICAgY21kX2Vjb2ZmID0gJDwgJChWTUxJTlVaKSAkQCAkKGUyZWZsYWcpCiB2bWxpbnV6LmVjb2ZmOiAkKG9iaikvLi4vZWxmMmVjb2ZmICQoVk1MSU5VWikKLQkkKFEpJChvYmopLy4uL2VsZjJlY29mZiAkKFZNTElOVVopIHZtbGludXouZWNvZmYgJChFMkVGTEFHUykKLQotJChvYmopLy4uL2VsZjJlY29mZjogJChzcmMpLy4uL2VsZjJlY29mZi5jCi0JJChRKSQoSE9TVENDKSAtbyAkQCAkXgorCSQoY2FsbCBjbWQsZWNvZmYpCiAKIE9CSkNPUFlGTEFHU192bWxpbnV6LmJpbiA6PSAkKE9CSkNPUFlGTEFHUykgLU8gYmluYXJ5CiB2bWxpbnV6LmJpbjogdm1saW51egotCSQoY2FsbCBpZl9jaGFuZ2VkLG9iamNvcHkpCisJJChjYWxsIGNtZCxvYmpjb3B5KQogCiBPQkpDT1BZRkxBR1Nfdm1saW51ei5zcmVjIDo9ICQoT0JKQ09QWUZMQUdTKSAtUyAtTyBzcmVjCiB2bWxpbnV6LnNyZWM6IHZtbGludXoKLQkkKGNhbGwgaWZfY2hhbmdlZCxvYmpjb3B5KQorCSQoY2FsbCBjbWQsb2JqY29weSkKIAotY2xlYW46Ci1jbGVhbi1maWxlcyArPSAqLm8gXAotCSAgICAgICB2bWxpbnUqCitjbGVhbi1maWxlcyA6PSAkKG9ianRyZWUpL3ZtbGludXouKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9jYWxjX3ZtbGludXpfbG9hZF9hZGRyLmMgYi9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2NhbGNfdm1saW51el9sb2FkX2FkZHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGM5ZDk2MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvY2FsY192bWxpbnV6X2xvYWRfYWRkci5jCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgIld1IFpoYW5namluIiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3RydWN0IHN0YXQgc2I7CisJdWludDY0X3Qgdm1saW51eF9zaXplLCB2bWxpbnV4X2xvYWRfYWRkciwgdm1saW51el9sb2FkX2FkZHI7CisKKwlpZiAoYXJnYyAhPSAzKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIDxwYXRobmFtZT4gPHZtbGludXhfbG9hZF9hZGRyPlxuIiwKKwkJCQlhcmd2WzBdKTsKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwl9CisKKwlpZiAoc3RhdChhcmd2WzFdLCAmc2IpID09IC0xKSB7CisJCXBlcnJvcigic3RhdCIpOworCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCX0KKworCS8qIENvbnZlcnQgaGV4IGNoYXJhY3RlcnMgdG8gZGVjIG51bWJlciAqLworCWVycm5vID0gMDsKKwlpZiAoc3NjYW5mKGFyZ3ZbMl0sICIlbGx4IiwgJnZtbGludXhfbG9hZF9hZGRyKSAhPSAxKSB7CisJCWlmIChlcnJubyAhPSAwKQorCQkJcGVycm9yKCJzc2NhbmYiKTsKKwkJZWxzZQorCQkJZnByaW50ZihzdGRlcnIsICJObyBtYXRjaGluZyBjaGFyYWN0ZXJzXG4iKTsKKworCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCX0KKworCXZtbGludXhfc2l6ZSA9ICh1aW50NjRfdClzYi5zdF9zaXplOworCXZtbGludXpfbG9hZF9hZGRyID0gdm1saW51eF9sb2FkX2FkZHIgKyB2bWxpbnV4X3NpemU7CisKKwkvKgorCSAqIEFsaWduIHdpdGggMTYgYnl0ZXM6ICJncmVhdGVyIHRoYW4gdGhhdCB1c2VkIGZvciBhbnkgc3RhbmRhcmQgZGF0YQorCSAqIHR5cGVzIGJ5IGEgTUlQUyBjb21waWxlci4iIC0tIFNlZSBNSVBTIFJ1biBMaW51eCAoU2Vjb25kIEVkaXRpb24pLgorCSAqLworCisJdm1saW51el9sb2FkX2FkZHIgKz0gKDE2IC0gdm1saW51eF9zaXplICUgMTYpOworCisJcHJpbnRmKCIweCVsbHhcbiIsIHZtbGludXpfbG9hZF9hZGRyKTsKKworCXJldHVybiBFWElUX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2RlY29tcHJlc3MuYyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5jCmluZGV4IDVkYjQzYzUuLjVjYWQwZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5jCisrKyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5jCkBAIC0xLDkgKzEsNiBAQAogLyoKLSAqIE1pc2MuIGJvb3Rsb2FkZXIgY29kZSBmb3IgbWFueSBtYWNoaW5lcy4KLSAqCiAgKiBDb3B5cmlnaHQgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIEF1dGhvcjogTWF0dCBQb3J0ZXIgPG1wb3J0ZXJAbXZpc3RhLmNvbT4gRGVyaXZlZCBmcm9tCi0gKiBhcmNoL3BwYy9ib290L3ByZXAvbWlzYy5jCisgKiBBdXRob3I6IE1hdHQgUG9ydGVyIDxtcG9ydGVyQG12aXN0YS5jb20+CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgogICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CkBAIC0xOSwxMiArMTYsMTIgQEAKIAogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KIAotLyogVGhlc2UgdHdvIHZhcmlhYmxlcyBzcGVjaWZ5IHRoZSBmcmVlIG1lbSByZWdpb24KKy8qCisgKiBUaGVzZSB0d28gdmFyaWFibGVzIHNwZWNpZnkgdGhlIGZyZWUgbWVtIHJlZ2lvbgogICogdGhhdCBjYW4gYmUgdXNlZCBmb3IgdGVtcG9yYXJ5IG1hbGxvYyBhcmVhCiAgKi8KIHVuc2lnbmVkIGxvbmcgZnJlZV9tZW1fcHRyOwogdW5zaWduZWQgbG9uZyBmcmVlX21lbV9lbmRfcHRyOwotY2hhciAqemltYWdlX3N0YXJ0OwogCiAvKiBUaGUgbGlua2VyIHRlbGxzIHVzIHdoZXJlIHRoZSBpbWFnZSBpcy4gKi8KIGV4dGVybiB1bnNpZ25lZCBjaGFyIF9faW1hZ2VfYmVnaW4sIF9faW1hZ2VfZW5kOwpAQCAtODMsMzggKzgwLDMxIEBACiAKIHZvaWQgZGVjb21wcmVzc19rZXJuZWwodW5zaWduZWQgbG9uZyBib290X2hlYXBfc3RhcnQpCiB7Ci0JaW50IHppbWFnZV9zaXplOworCXVuc2lnbmVkIGxvbmcgemltYWdlX3N0YXJ0LCB6aW1hZ2Vfc2l6ZTsKIAotCS8qCi0JICogV2UgbGluayBvdXJzZWxmIHRvIGFuIGFyYml0cmFyeSBsb3cgYWRkcmVzcy4gIFdoZW4gd2UgcnVuLCB3ZQotCSAqIHJlbG9jYXRlIG91dHNlbGYgdG8gdGhhdCBhZGRyZXNzLiAgX19pbWFnZV9iZWlnbiBwb2ludHMgdG8KLQkgKiB0aGUgcGFydCBvZiB0aGUgaW1hZ2Ugd2hlcmUgdGhlIHpJbWFnZSBpcy4gLS0gVG9tCi0JICovCi0JemltYWdlX3N0YXJ0ID0gKGNoYXIgKikodW5zaWduZWQgbG9uZykoJl9faW1hZ2VfYmVnaW4pOworCXppbWFnZV9zdGFydCA9ICh1bnNpZ25lZCBsb25nKSgmX19pbWFnZV9iZWdpbik7CiAJemltYWdlX3NpemUgPSAodW5zaWduZWQgbG9uZykoJl9faW1hZ2VfZW5kKSAtCiAJICAgICh1bnNpZ25lZCBsb25nKSgmX19pbWFnZV9iZWdpbik7CiAKLQkvKgotCSAqIFRoZSB6SW1hZ2UgYW5kIGluaXRyZCB3aWxsIGJlIGJldHdlZW4gc3RhcnQgYW5kIF9lbmQsIHNvIHRoZXkndmUKLQkgKiBhbHJlYWR5IGJlZW4gbW92ZWQgb25jZS4gIFdlJ3JlIGdvb2QgdG8gZ28gbm93LiAtLSBUb20KLQkgKi8KIAlwdXRzKCJ6aW1hZ2UgYXQ6ICAgICAiKTsKLQlwdXRoZXgoKHVuc2lnbmVkIGxvbmcpemltYWdlX3N0YXJ0KTsKKwlwdXRoZXgoemltYWdlX3N0YXJ0KTsKIAlwdXRzKCIgIik7Ci0JcHV0aGV4KCh1bnNpZ25lZCBsb25nKSh6aW1hZ2Vfc2l6ZSArIHppbWFnZV9zdGFydCkpOworCXB1dGhleCh6aW1hZ2Vfc2l6ZSArIHppbWFnZV9zdGFydCk7CiAJcHV0cygiXG4iKTsKIAotCS8qIHRoaXMgYXJlYSBhcmUgcHJlcGFyZWQgZm9yIG1hbGxvY2luZyB3aGVuIGRlY29tcHJlc3NpbmcgKi8KKwkvKiBUaGlzIGFyZWEgYXJlIHByZXBhcmVkIGZvciBtYWxsb2Npbmcgd2hlbiBkZWNvbXByZXNzaW5nICovCiAJZnJlZV9tZW1fcHRyID0gYm9vdF9oZWFwX3N0YXJ0OwogCWZyZWVfbWVtX2VuZF9wdHIgPSBib290X2hlYXBfc3RhcnQgKyBCT09UX0hFQVBfU0laRTsKIAotCS8qIERpc3BsYXkgc3RhbmRhcmQgTGludXgvTUlQUyBib290IHByb21wdCBmb3Iga2VybmVsIGFyZ3MgKi8KKwkvKiBEaXNwbGF5IHN0YW5kYXJkIExpbnV4L01JUFMgYm9vdCBwcm9tcHQgKi8KIAlwdXRzKCJVbmNvbXByZXNzaW5nIExpbnV4IGF0IGxvYWQgYWRkcmVzcyAiKTsKIAlwdXRoZXgoVk1MSU5VWF9MT0FEX0FERFJFU1NfVUxMKTsKIAlwdXRzKCJcbiIpOworCiAJLyogRGVjb21wcmVzcyB0aGUga2VybmVsIHdpdGggYWNjb3JkaW5nIGFsZ29yaXRobSAqLwotCWRlY29tcHJlc3MoemltYWdlX3N0YXJ0LCB6aW1hZ2Vfc2l6ZSwgMCwgMCwKKwlkZWNvbXByZXNzKChjaGFyICopemltYWdlX3N0YXJ0LCB6aW1hZ2Vfc2l6ZSwgMCwgMCwKIAkJICAgKHZvaWQgKilWTUxJTlVYX0xPQURfQUREUkVTU19VTEwsIDAsIGVycm9yKTsKLQkvKiBGSVhNRTogaXMgdGhlcmUgYSBuZWVkIHRvIGZsdXNoIGNhY2hlIGhlcmU/ICovCisKKwkvKiBGSVhNRTogc2hvdWxkIHdlIGZsdXNoIGNhY2hlIGhlcmU/ICovCiAJcHV0cygiTm93LCBib290aW5nIHRoZSBrZXJuZWwuLi5cbiIpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9sZC5zY3JpcHQgYi9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2xkLnNjcmlwdAppbmRleCA2MTNhMzViLi44ZTZiMDdjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2xkLnNjcmlwdAorKysgYi9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2xkLnNjcmlwdApAQCAtMiw2MSArMiw0NCBAQAogICogbGQuc2NyaXB0IGZvciBjb21wcmVzc2VkIGtlcm5lbCBzdXBwb3J0IG9mIE1JUFMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmppbmdAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwICJXdSBaaGFuZ2ppbiIgPHd1emhhbmppbmdAZ21haWwuY29tPgogICovCiAKIE9VVFBVVF9BUkNIKG1pcHMpCiBFTlRSWShzdGFydCkKIFNFQ1RJT05TCiB7Ci0JLyogLiA9IFZNTElOVVpfTE9BRF9BRERSRVNTICovCi0JLyogcmVhZC1vbmx5ICovCi0JX3RleHQgPSAuOwkvKiBUZXh0IGFuZCByZWFkLW9ubHkgZGF0YSAqLwotCS50ZXh0CTogewotCQlfZnRleHQgPSAuIDsKKwkvKiBUZXh0IGFuZCByZWFkLW9ubHkgZGF0YSAqLworCS8qIC4gPSBWTUxJTlVaX0xPQURfQUREUkVTUzsgKi8KKwkudGV4dCA6IHsKIAkJKigudGV4dCkKIAkJKigucm9kYXRhKQotCX0gPSAwCi0JX2V0ZXh0ID0gLjsJLyogRW5kIG9mIHRleHQgc2VjdGlvbiAqLworCX0KKwkvKiBFbmQgb2YgdGV4dCBzZWN0aW9uICovCiAKLQkvKiB3cml0YWJsZSAqLwotCS5kYXRhCTogewkvKiBEYXRhICovCi0JCV9mZGF0YSA9IC4gOworCS8qIFdyaXRhYmxlIGRhdGEgKi8KKwkuZGF0YSA6IHsKIAkJKiguZGF0YSkKLQkJLyogUHV0IHRoZSBjb21wcmVzc2VkIGltYWdlIGhlcmUsIHNvIGJzcyBpcyBvbiB0aGUgZW5kLiAqLworCQkvKiBQdXQgdGhlIGNvbXByZXNzZWQgaW1hZ2UgaGVyZSAqLwogCQlfX2ltYWdlX2JlZ2luID0gLjsKIAkJKiguaW1hZ2UpCiAJCV9faW1hZ2VfZW5kID0gLjsKIAkJQ09OU1RSVUNUT1JTCiAJfQotCS5zZGF0YQk6IHsgKiguc2RhdGEpIH0KLQkuID0gQUxJR04oNCk7Ci0JX2VkYXRhICA9ICAuOwkvKiBFbmQgb2YgZGF0YSBzZWN0aW9uICovCisJLiA9IEFMSUdOKDE2KTsKKwlfZWRhdGEgPSAuOworCS8qIEVuZCBvZiBkYXRhIHNlY3Rpb24gKi8KIAogCS8qIEJTUyAqLwotCV9fYnNzX3N0YXJ0ID0gLjsKLQlfZmJzcyA9IC47Ci0JLnNic3MJOiB7ICooLnNic3MpICooLnNjb21tb24pIH0KLQkuYnNzCTogewotCQkqKC5keW5ic3MpCisJLmJzcyA6IHsKIAkJKiguYnNzKQotCQkqKENPTU1PTikKIAl9Ci0JLiAgPSBBTElHTig0KTsKLQlfZW5kID0gLiA7Ci0KLQkvKiBUaGVzZSBhcmUgbmVlZGVkIGZvciBFTEYgYmFja2VuZHMgd2hpY2ggaGF2ZSBub3QgeWV0IGJlZW4gY29udmVydGVkCi0JICogdG8gdGhlIG5ldyBzdHlsZSBsaW5rZXIuICAqLwotCi0JLnN0YWIgMCA6IHsgKiguc3RhYikgfQotCS5zdGFic3RyIDAgOiB7ICooLnN0YWJzdHIpIH0KLQotCS8qIFRoZXNlIG11c3QgYXBwZWFyIHJlZ2FyZGxlc3Mgb2YgIC4gICovCi0JLmdwdGFiLnNkYXRhIDogeyAqKC5ncHRhYi5kYXRhKSAqKC5ncHRhYi5zZGF0YSkgfQotCS5ncHRhYi5zYnNzIDogeyAqKC5ncHRhYi5ic3MpICooLmdwdGFiLnNic3MpIH0KKwkuID0gQUxJR04oMTYpOworCV9lbmQgPSAuOwogCiAJLyogU2VjdGlvbnMgdG8gYmUgZGlzY2FyZGVkICovCi0JL0RJU0NBUkQvCTogeworCS9ESVNDQVJELyA6IHsKIAkJKiguTUlQUy5vcHRpb25zKQogCQkqKC5vcHRpb25zKQogCQkqKC5wZHIpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9NYWtlZmlsZSBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL01ha2VmaWxlCmluZGV4IDNlOTg3NjMuLjE5ZWIwNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL01ha2VmaWxlCkBAIC0xMiw3ICsxMiw2IEBACiBvYmoteSA6PSBjcHUubyBzZXR1cC5vIHNlcmlhbC5vIG9jdGVvbi1wbGF0Zm9ybS5vIG9jdGVvbi1pcnEubyBjc3JjLW9jdGVvbi5vCiBvYmoteSArPSBkbWEtb2N0ZW9uLm8gZmxhc2hfc2V0dXAubwogb2JqLXkgKz0gb2N0ZW9uLW1lbWNweS5vCitvYmoteSArPSBleGVjdXRpdmUvCiAKIG9iai0kKENPTkZJR19TTVApICAgICAgICAgICAgICAgICAgICAgKz0gc21wLm8KLQotRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL1BsYXRmb3JtIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vUGxhdGZvcm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU0M2NjZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL1BsYXRmb3JtCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgQ2F2aXVtIE9jdGVvbgorIworcGxhdGZvcm0tJChDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04pCSs9IGNhdml1bS1vY3Rlb24vCitjZmxhZ3MtJChDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04pCSs9CQkJCVwKKwkJLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWNhdml1bS1vY3Rlb24KK2lmZGVmIENPTkZJR19DQVZJVU1fT0NURU9OXzJORF9LRVJORUwKK2xvYWQtJChDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04pCSs9IDB4ZmZmZmZmZmY4NDEwMDAwMAorZWxzZQorbG9hZC0kKENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTikJKz0gMHhmZmZmZmZmZjgxMTAwMDAwCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vY3B1LmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9jcHUuYwppbmRleCBiNmRmNTM4Li5jNjY0YzhjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9jcHUuYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9jcHUuYwpAQCAtNDEsMTIgKzQxLDggQEAKIAlyZXR1cm4gTk9USUZZX09LOwkJLyogTGV0IGRlZmF1bHQgbm90aWZpZXIgc2VuZCBzaWduYWxzICovCiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY25taXBzX2N1Ml9ub3RpZmllciA9IHsKLQkubm90aWZpZXJfY2FsbCA9IGNubWlwc19jdTJfY2FsbCwKLX07Ci0KIHN0YXRpYyBpbnQgY25taXBzX2N1Ml9zZXR1cCh2b2lkKQogewotCXJldHVybiByZWdpc3Rlcl9jdTJfbm90aWZpZXIoJmNubWlwc19jdTJfbm90aWZpZXIpOworCXJldHVybiBjdTJfbm90aWZpZXIoY25taXBzX2N1Ml9jYWxsLCAwKTsKIH0KIGVhcmx5X2luaXRjYWxsKGNubWlwc19jdTJfc2V0dXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vY3NyYy1vY3Rlb24uYyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2NzcmMtb2N0ZW9uLmMKaW5kZXggMGJmNGJiZS4uYjY4NDdjOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vY3NyYy1vY3Rlb24uYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9jc3JjLW9jdGVvbi5jCkBAIC01Myw3ICs1Myw2IEBACiB1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBzY2hlZF9jbG9jayh2b2lkKQogewogCS8qIDY0LWJpdCBhcml0aG1hdGljIGNhbiBvdmVyZmxvdywgc28gdXNlIDEyOC1iaXQuICAqLwotI2lmIChfX0dOVUNfXyA8IDQpIHx8ICgoX19HTlVDX18gPT0gNCkgJiYgKF9fR05VQ19NSU5PUl9fIDw9IDMpKQogCXU2NCB0MSwgdDIsIHQzOwogCXVuc2lnbmVkIGxvbmcgbG9uZyBydjsKIAl1NjQgbXVsdCA9IGNsb2Nrc291cmNlX21pcHMubXVsdDsKQEAgLTczLDEzICs3Miw2IEBACiAJCTogW2NudF0gInIiIChjbnQpLCBbbXVsdF0gInIiIChtdWx0KSwgW3NoaWZ0XSAiciIgKHNoaWZ0KQogCQk6ICJoaSIsICJsbyIpOwogCXJldHVybiBydjsKLSNlbHNlCi0JLyogR0NDID4gNC4zIGRvIGl0IHRoZSBlYXN5IHdheS4gICovCi0JdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKG1vZGUoVEkpKSkgdDsKLQl0ID0gcmVhZF9jMF9jdm1jb3VudCgpOwotCXQgPSB0ICogY2xvY2tzb3VyY2VfbWlwcy5tdWx0OwotCXJldHVybiAodW5zaWduZWQgbG9uZyBsb25nKSh0ID4+IGNsb2Nrc291cmNlX21pcHMuc2hpZnQpOwotI2VuZGlmCiB9CiAKIHZvaWQgX19pbml0IHBsYXRfdGltZV9pbml0KHZvaWQpCkBAIC04OCwzICs4MCw1OCBAQAogCWNsb2Nrc291cmNlX3NldF9jbG9jaygmY2xvY2tzb3VyY2VfbWlwcywgbWlwc19ocHRfZnJlcXVlbmN5KTsKIAljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfbWlwcyk7CiB9CisKK3N0YXRpYyB1NjQgb2N0ZW9uX3VkZWxheV9mYWN0b3I7CitzdGF0aWMgdTY0IG9jdGVvbl9uZGVsYXlfZmFjdG9yOworCit2b2lkIF9faW5pdCBvY3Rlb25fc2V0dXBfZGVsYXlzKHZvaWQpCit7CisJb2N0ZW9uX3VkZWxheV9mYWN0b3IgPSBvY3Rlb25fZ2V0X2Nsb2NrX3JhdGUoKSAvIDEwMDAwMDA7CisJLyoKKwkgKiBGb3IgX19uZGVsYXkgd2UgZGl2aWRlIGJ5IDJeMTYsIHNvIHRoZSBmYWN0b3IgaXMgbXVsdGlwbGllZAorCSAqIGJ5IHRoZSBzYW1lIGFtb3VudC4KKwkgKi8KKwlvY3Rlb25fbmRlbGF5X2ZhY3RvciA9IChvY3Rlb25fdWRlbGF5X2ZhY3RvciAqIDB4MTAwMDB1bGwpIC8gMTAwMHVsbDsKKworCXByZXNldF9scGogPSBvY3Rlb25fZ2V0X2Nsb2NrX3JhdGUoKSAvIEhaOworfQorCit2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXMpCit7CisJdTY0IGN1ciwgZW5kLCBpbmM7CisKKwljdXIgPSByZWFkX2MwX2N2bWNvdW50KCk7CisKKwlpbmMgPSB1cyAqIG9jdGVvbl91ZGVsYXlfZmFjdG9yOworCWVuZCA9IGN1ciArIGluYzsKKworCXdoaWxlIChlbmQgPiBjdXIpCisJCWN1ciA9IHJlYWRfYzBfY3ZtY291bnQoKTsKK30KK0VYUE9SVF9TWU1CT0woX191ZGVsYXkpOworCit2b2lkIF9fbmRlbGF5KHVuc2lnbmVkIGxvbmcgbnMpCit7CisJdTY0IGN1ciwgZW5kLCBpbmM7CisKKwljdXIgPSByZWFkX2MwX2N2bWNvdW50KCk7CisKKwlpbmMgPSAoKG5zICogb2N0ZW9uX25kZWxheV9mYWN0b3IpID4+IDE2KTsKKwllbmQgPSBjdXIgKyBpbmM7CisKKwl3aGlsZSAoZW5kID4gY3VyKQorCQljdXIgPSByZWFkX2MwX2N2bWNvdW50KCk7Cit9CitFWFBPUlRfU1lNQk9MKF9fbmRlbGF5KTsKKwordm9pZCBfX2RlbGF5KHVuc2lnbmVkIGxvbmcgbG9vcHMpCit7CisJdTY0IGN1ciwgZW5kOworCisJY3VyID0gcmVhZF9jMF9jdm1jb3VudCgpOworCWVuZCA9IGN1ciArIGxvb3BzOworCisJd2hpbGUgKGVuZCA+IGN1cikKKwkJY3VyID0gcmVhZF9jMF9jdm1jb3VudCgpOworfQorRVhQT1JUX1NZTUJPTChfX2RlbGF5KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2RtYS1vY3Rlb24uYyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2RtYS1vY3Rlb24uYwppbmRleCBiZTUzMWVjLi5kMjJiNWEyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9kbWEtb2N0ZW9uLmMKKysrIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZG1hLW9jdGVvbi5jCkBAIC05OSwxMyArOTksMTYgQEAKIAkJCXBhbmljKCJkbWFfbWFwX3NpbmdsZTogIgogCQkJICAgICAgIkF0dGVtcHQgdG8gbWFwIGlsbGVnYWwgbWVtb3J5IGFkZHJlc3MgMHglbGx4XG4iLAogCQkJICAgICAgcGh5c2ljYWwpOwotCQllbHNlIGlmICgocGh5c2ljYWwgKyBzaXplID49Ci0JCQkgICg0dWxsPDwzMCkgLSAoT0NURU9OX1BDSV9CQVIxX0hPTEVfU0laRTw8MjApKQotCQkJICYmIHBoeXNpY2FsIDwgKDR1bGw8PDMwKSkKLQkJCXByX3dhcm5pbmcoImRtYV9tYXBfc2luZ2xlOiBXYXJuaW5nOiAiCi0JCQkJICAgIk1hcHBpbmcgbWVtb3J5IGFkZHJlc3MgdGhhdCBtaWdodCAiCi0JCQkJICAgImNvbmZsaWN0IHdpdGggZGV2aWNlcyAweCVsbHgtMHglbGx4XG4iLAotCQkJCSAgIHBoeXNpY2FsLCBwaHlzaWNhbCtzaXplLTEpOworCQllbHNlIGlmIChwaHlzaWNhbCA+PSBDVk1YX1BDSUVfQkFSMV9QSFlTX0JBU0UgJiYKKwkJCSBwaHlzaWNhbCArIHNpemUgPCAoQ1ZNWF9QQ0lFX0JBUjFfUEhZU19CQVNFICsgQ1ZNWF9QQ0lFX0JBUjFfUEhZU19TSVpFKSkgeworCQkJcmVzdWx0ID0gcGh5c2ljYWwgLSBDVk1YX1BDSUVfQkFSMV9QSFlTX0JBU0UgKyBDVk1YX1BDSUVfQkFSMV9SQ19CQVNFOworCisJCQlpZiAoKChyZXN1bHQrc2l6ZS0xKSAmIGRtYV9tYXNrKSAhPSByZXN1bHQrc2l6ZS0xKQorCQkJCXBhbmljKCJkbWFfbWFwX3NpbmdsZTogQXR0ZW1wdCB0byBtYXAgYWRkcmVzcyAweCVsbHgtMHglbGx4LCB3aGljaCBjYW4ndCBiZSBhY2Nlc3NlZCBhY2NvcmRpbmcgdG8gdGhlIGRtYSBtYXNrIDB4JWxseFxuIiwKKwkJCQkgICAgICBwaHlzaWNhbCwgcGh5c2ljYWwrc2l6ZS0xLCBkbWFfbWFzayk7CisJCQlnb3RvIGRvbmU7CisJCX0KKwogCQkvKiBUaGUgMm5kIDI1Nk1CIGlzIG1hcHBlZCBhdCAyNTY8PDIwIGluc3RlYWQgb2YgMHg0MTAwMDAwMDAgKi8KIAkJaWYgKChwaHlzaWNhbCA+PSAweDQxMDAwMDAwMHVsbCkgJiYgcGh5c2ljYWwgPCAweDQyMDAwMDAwMHVsbCkKIAkJCXJlc3VsdCA9IHBoeXNpY2FsIC0gMHg0MDAwMDAwMDB1bGw7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24taXJxLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24taXJxLmMKaW5kZXggYzQyNGNkMS4uY2U3NTAwYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLWlycS5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1pcnEuYwpAQCAtMywxNSArMywxMyBAQAogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCBDYXZpdW0gTmV0d29ya3MKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDA5LCAyMDEwIENhdml1bSBOZXR3b3JrcwogICovCiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAKICNpbmNsdWRlIDxhc20vb2N0ZW9uL29jdGVvbi5oPgotI2luY2x1ZGUgPGFzbS9vY3Rlb24vY3ZteC1wZXhwLWRlZnMuaD4KLSNpbmNsdWRlIDxhc20vb2N0ZW9uL2N2bXgtbnBpLWRlZnMuaD4KIAogc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sob2N0ZW9uX2lycV9jaXUwX2xvY2spOwogc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sob2N0ZW9uX2lycV9jaXUxX2xvY2spOwpAQCAtNDEsMTQgKzM5LDE0IEBACiAKIHN0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY29yZV9lb2kodW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXVuc2lnbmVkIGludCBiaXQgPSBpcnEgLSBPQ1RFT05fSVJRX1NXMDsKIAkvKgogCSAqIElmIGFuIElSUSBpcyBiZWluZyBwcm9jZXNzZWQgd2hpbGUgd2UgYXJlIGRpc2FibGluZyBpdCB0aGUKIAkgKiBoYW5kbGVyIHdpbGwgYXR0ZW1wdCB0byB1bm1hc2sgdGhlIGludGVycnVwdCBhZnRlciBpdCBoYXMKIAkgKiBiZWVuIGRpc2FibGVkLgogCSAqLwotCWlmIChkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpCisJaWYgKCh1bmxpa2VseShkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpKSkKIAkJcmV0dXJuOwogCS8qCiAJICogV2UgZG9uJ3QgbmVlZCB0byBkaXNhYmxlIElSUXMgdG8gbWFrZSB0aGVzZSBhdG9taWMgc2luY2UKQEAgLTEwNiw2ICsxMDQsMjkgQEAKIAogc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUwX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQogeworCXN3aXRjaCAoaXJxKSB7CisJY2FzZSBPQ1RFT05fSVJRX0dNWF9EUlAwOgorCWNhc2UgT0NURU9OX0lSUV9HTVhfRFJQMToKKwljYXNlIE9DVEVPTl9JUlFfSVBEX0RSUDoKKwljYXNlIE9DVEVPTl9JUlFfS0VZX1pFUk86CisJY2FzZSBPQ1RFT05fSVJRX1RJTUVSMDoKKwljYXNlIE9DVEVPTl9JUlFfVElNRVIxOgorCWNhc2UgT0NURU9OX0lSUV9USU1FUjI6CisJY2FzZSBPQ1RFT05fSVJRX1RJTUVSMzoKKwl7CisJCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyOworCQl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV09SS1EwKTsKKwkJLyoKKwkJICogQ0lVIHRpbWVyIHR5cGUgaW50ZXJydXB0cyBtdXN0IGJlIGFja25vbGVnZWQgYnkKKwkJICogd3JpdGluZyBhICcxJyBiaXQgdG8gdGhlaXIgc3VtMCBiaXQuCisJCSAqLworCQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX1NVTTAoaW5kZXgpLCBtYXNrKTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwogCS8qCiAJICogSW4gb3JkZXIgdG8gYXZvaWQgYW55IGxvY2tpbmcgYWNjZXNzaW5nIHRoZSBDSVUsIHdlCiAJICogYWNrbm93bGVkZ2UgQ0lVIGludGVycnVwdHMgYnkgZGlzYWJsaW5nIGFsbCBvZiB0aGVtLiAgVGhpcwpAQCAtMTMwLDggKzE1MSw1NCBAQAogCXNldF9jMF9zdGF0dXMoMHgxMDAgPDwgMik7CiB9CiAKK3N0YXRpYyBpbnQgbmV4dF9jb3JlaWRfZm9yX2lycShzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisKKyNpZmRlZiBDT05GSUdfU01QCisJaW50IGNvcmVpZDsKKwlpbnQgd2VpZ2h0ID0gY3B1bWFza193ZWlnaHQoZGVzYy0+YWZmaW5pdHkpOworCisJaWYgKHdlaWdodCA+IDEpIHsKKwkJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwkJZm9yICg7OykgeworCQkJY3B1ID0gY3B1bWFza19uZXh0KGNwdSwgZGVzYy0+YWZmaW5pdHkpOworCQkJaWYgKGNwdSA+PSBucl9jcHVfaWRzKSB7CisJCQkJY3B1ID0gLTE7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBjcHVfb25saW5lX21hc2spKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJY29yZWlkID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSk7CisJfSBlbHNlIGlmICh3ZWlnaHQgPT0gMSkgeworCQljb3JlaWQgPSBvY3Rlb25fY29yZWlkX2Zvcl9jcHUoY3B1bWFza19maXJzdChkZXNjLT5hZmZpbml0eSkpOworCX0gZWxzZSB7CisJCWNvcmVpZCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCk7CisJfQorCXJldHVybiBjb3JlaWQ7CisjZWxzZQorCXJldHVybiBjdm14X2dldF9jb3JlX251bSgpOworI2VuZGlmCit9CisKIHN0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MF9lbmFibGUodW5zaWduZWQgaW50IGlycSkKIHsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCWludCBjb3JlaWQgPSBuZXh0X2NvcmVpZF9mb3JfaXJxKGRlc2MpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdWludDY0X3QgZW4wOworCWludCBiaXQgPSBpcnEgLSBPQ1RFT05fSVJRX1dPUktRMDsJLyogQml0IDAtNjMgb2YgRU4wICovCisKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MF9sb2NrLCBmbGFncyk7CisJZW4wID0gY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMChjb3JlaWQgKiAyKSk7CisJZW4wIHw9IDF1bGwgPDwgYml0OworCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpLCBlbjApOworCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY29yZWlkICogMikpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX2NpdTBfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfZW5hYmxlX21ib3godW5zaWduZWQgaW50IGlycSkKK3sKIAlpbnQgY29yZWlkID0gY3ZteF9nZXRfY29yZV9udW0oKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVpbnQ2NF90IGVuMDsKQEAgLTE2NywxNCArMjM0LDMxIEBACiB9CiAKIC8qCi0gKiBFbmFibGUgdGhlIGlycSBvbiB0aGUgY3VycmVudCBjb3JlIGZvciBjaGlwcyB0aGF0IGhhdmUgdGhlIEVOKl9XMXtTLEN9Ci0gKiByZWdpc3RlcnMuCisgKiBFbmFibGUgdGhlIGlycSBvbiB0aGUgbmV4dCBjb3JlIGluIHRoZSBhZmZpbml0eSBzZXQgZm9yIGNoaXBzIHRoYXQKKyAqIGhhdmUgdGhlIEVOKl9XMXtTLEN9IHJlZ2lzdGVycy4KICAqLwogc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUwX2VuYWJsZV92Mih1bnNpZ25lZCBpbnQgaXJxKQogewotCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyOworCWludCBpbmRleDsKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV09SS1EwKTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCisJaWYgKChkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpID09IDApIHsKKwkJaW5kZXggPSBuZXh0X2NvcmVpZF9mb3JfaXJxKGRlc2MpICogMjsKKwkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjBfVzFTKGluZGV4KSwgbWFzayk7CisJfQorfQorCisvKgorICogRW5hYmxlIHRoZSBpcnEgb24gdGhlIGN1cnJlbnQgQ1BVIGZvciBjaGlwcyB0aGF0CisgKiBoYXZlIHRoZSBFTipfVzF7UyxDfSByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MF9lbmFibGVfbWJveF92Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBpbmRleDsKIAl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV09SS1EwKTsKIAorCWluZGV4ID0gY3ZteF9nZXRfY29yZV9udW0oKSAqIDI7CiAJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjBfVzFTKGluZGV4KSwgbWFzayk7CiB9CiAKQEAgLTE4Nyw0MyArMjcxLDM5IEBACiAJaW50IGluZGV4ID0gY3ZteF9nZXRfY29yZV9udW0oKSAqIDI7CiAJdTY0IG1hc2sgPSAxdWxsIDw8IChpcnEgLSBPQ1RFT05fSVJRX1dPUktRMCk7CiAKKwlzd2l0Y2ggKGlycSkgeworCWNhc2UgT0NURU9OX0lSUV9HTVhfRFJQMDoKKwljYXNlIE9DVEVPTl9JUlFfR01YX0RSUDE6CisJY2FzZSBPQ1RFT05fSVJRX0lQRF9EUlA6CisJY2FzZSBPQ1RFT05fSVJRX0tFWV9aRVJPOgorCWNhc2UgT0NURU9OX0lSUV9USU1FUjA6CisJY2FzZSBPQ1RFT05fSVJRX1RJTUVSMToKKwljYXNlIE9DVEVPTl9JUlFfVElNRVIyOgorCWNhc2UgT0NURU9OX0lSUV9USU1FUjM6CisJCS8qCisJCSAqIENJVSB0aW1lciB0eXBlIGludGVycnVwdHMgbXVzdCBiZSBhY2tub2xlZ2VkIGJ5CisJCSAqIHdyaXRpbmcgYSAnMScgYml0IHRvIHRoZWlyIHN1bTAgYml0LgorCQkgKi8KKwkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9TVU0wKGluZGV4KSwgbWFzayk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwogCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4wX1cxQyhpbmRleCksIG1hc2spOwogfQogCiAvKgotICogQ0lVIHRpbWVyIHR5cGUgaW50ZXJydXB0cyBtdXN0IGJlIGFja25vbGVnZWQgYnkgd3JpdGluZyBhICcxJyBiaXQKLSAqIHRvIHRoZWlyIHN1bTAgYml0LgotICovCi1zdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfdGltZXJfYWNrKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JaW50IGluZGV4ID0gY3ZteF9nZXRfY29yZV9udW0oKSAqIDI7Ci0JdWludDY0X3QgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV09SS1EwKTsKLQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX1NVTTAoaW5kZXgpLCBtYXNrKTsKLX0KLQotc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUwX3RpbWVyX2Fja192MSh1bnNpZ25lZCBpbnQgaXJxKQotewotCW9jdGVvbl9pcnFfY2l1MF90aW1lcl9hY2soaXJxKTsKLQlvY3Rlb25faXJxX2NpdTBfYWNrKGlycSk7Ci19Ci0KLXN0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MF90aW1lcl9hY2tfdjIodW5zaWduZWQgaW50IGlycSkKLXsKLQlvY3Rlb25faXJxX2NpdTBfdGltZXJfYWNrKGlycSk7Ci0Jb2N0ZW9uX2lycV9jaXUwX2Fja192MihpcnEpOwotfQotCi0vKgogICogRW5hYmxlIHRoZSBpcnEgb24gdGhlIGN1cnJlbnQgY29yZSBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQogICogcmVnaXN0ZXJzLgogICovCi1zdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfZW9pX3YyKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfZW9pX21ib3hfdjIodW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyOwogCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XT1JLUTApOwogCi0JaWYgKChkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpID09IDApCisJaWYgKGxpa2VseSgoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSA9PSAwKSkKIAkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjBfVzFTKGluZGV4KSwgbWFzayk7CiB9CiAKQEAgLTI0NiwxOCArMzI2LDMwIEBACiBzdGF0aWMgaW50IG9jdGVvbl9pcnFfY2l1MF9zZXRfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmRlc3QpCiB7CiAJaW50IGNwdTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCWludCBlbmFibGVfb25lID0gKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkgPT0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBiaXQgPSBpcnEgLSBPQ1RFT05fSVJRX1dPUktRMDsJLyogQml0IDAtNjMgb2YgRU4wICovCiAKKwkvKgorCSAqIEZvciBub24tdjIgQ0lVLCB3ZSB3aWxsIGFsbG93IG9ubHkgc2luZ2xlIENQVSBhZmZpbml0eS4KKwkgKiBUaGlzIHJlbW92ZXMgdGhlIG5lZWQgdG8gZG8gbG9ja2luZyBpbiB0aGUgLmFjay8uZW9pCisJICogZnVuY3Rpb25zLgorCSAqLworCWlmIChjcHVtYXNrX3dlaWdodChkZXN0KSAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUwX2xvY2ssIGZsYWdzKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlpbnQgY29yZWlkID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSk7CiAJCXVpbnQ2NF90IGVuMCA9CiAJCQljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpKTsKLQkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBkZXN0KSkKKwkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBkZXN0KSAmJiBlbmFibGVfb25lKSB7CisJCQllbmFibGVfb25lID0gMDsKIAkJCWVuMCB8PSAxdWxsIDw8IGJpdDsKLQkJZWxzZQorCQl9IGVsc2UgewogCQkJZW4wICY9IH4oMXVsbCA8PCBiaXQpOworCQl9CiAJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpLCBlbjApOwogCX0KIAkvKgpAQCAtMjc5LDEzICszNzEsMTggQEAKIHsKIAlpbnQgY3B1OwogCWludCBpbmRleDsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCWludCBlbmFibGVfb25lID0gKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkgPT0gMDsKIAl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV09SS1EwKTsKKwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiAJCWluZGV4ID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSkgKiAyOwotCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGRlc3QpKQorCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGRlc3QpICYmIGVuYWJsZV9vbmUpIHsKKwkJCWVuYWJsZV9vbmUgPSAwOwogCQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjBfVzFTKGluZGV4KSwgbWFzayk7Ci0JCWVsc2UKKwkJfSBlbHNlIHsKIAkJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4wX1cxQyhpbmRleCksIG1hc2spOworCQl9CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjk4LDggKzM5NSw3IEBACiAJLm5hbWUgPSAiQ0lVMCIsCiAJLmVuYWJsZSA9IG9jdGVvbl9pcnFfY2l1MF9lbmFibGVfdjIsCiAJLmRpc2FibGUgPSBvY3Rlb25faXJxX2NpdTBfZGlzYWJsZV9hbGxfdjIsCi0JLmFjayA9IG9jdGVvbl9pcnFfY2l1MF9hY2tfdjIsCi0JLmVvaSA9IG9jdGVvbl9pcnFfY2l1MF9lb2lfdjIsCisJLmVvaSA9IG9jdGVvbl9pcnFfY2l1MF9lbmFibGVfdjIsCiAjaWZkZWYgQ09ORklHX1NNUAogCS5zZXRfYWZmaW5pdHkgPSBvY3Rlb25faXJxX2NpdTBfc2V0X2FmZmluaXR5X3YyLAogI2VuZGlmCkBAIC0zMDksMzUgKzQwNSwyNiBAQAogCS5uYW1lID0gIkNJVTAiLAogCS5lbmFibGUgPSBvY3Rlb25faXJxX2NpdTBfZW5hYmxlLAogCS5kaXNhYmxlID0gb2N0ZW9uX2lycV9jaXUwX2Rpc2FibGUsCi0JLmFjayA9IG9jdGVvbl9pcnFfY2l1MF9hY2ssCiAJLmVvaSA9IG9jdGVvbl9pcnFfY2l1MF9lb2ksCiAjaWZkZWYgQ09ORklHX1NNUAogCS5zZXRfYWZmaW5pdHkgPSBvY3Rlb25faXJxX2NpdTBfc2V0X2FmZmluaXR5LAogI2VuZGlmCiB9OwogCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIG9jdGVvbl9pcnFfY2hpcF9jaXUwX3RpbWVyX3YyID0gewotCS5uYW1lID0gIkNJVTAtVCIsCi0JLmVuYWJsZSA9IG9jdGVvbl9pcnFfY2l1MF9lbmFibGVfdjIsCi0JLmRpc2FibGUgPSBvY3Rlb25faXJxX2NpdTBfZGlzYWJsZV9hbGxfdjIsCi0JLmFjayA9IG9jdGVvbl9pcnFfY2l1MF90aW1lcl9hY2tfdjIsCi0JLmVvaSA9IG9jdGVvbl9pcnFfY2l1MF9lb2lfdjIsCi0jaWZkZWYgQ09ORklHX1NNUAotCS5zZXRfYWZmaW5pdHkgPSBvY3Rlb25faXJxX2NpdTBfc2V0X2FmZmluaXR5X3YyLAotI2VuZGlmCi19OwotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIG9jdGVvbl9pcnFfY2hpcF9jaXUwX3RpbWVyID0gewotCS5uYW1lID0gIkNJVTAtVCIsCi0JLmVuYWJsZSA9IG9jdGVvbl9pcnFfY2l1MF9lbmFibGUsCisvKiBUaGUgbWJveCB2ZXJzaW9ucyBkb24ndCBkbyBhbnkgYWZmaW5pdHkgb3Igcm91bmQtcm9iaW4uICovCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIG9jdGVvbl9pcnFfY2hpcF9jaXUwX21ib3hfdjIgPSB7CisJLm5hbWUgPSAiQ0lVMC1NIiwKKwkuZW5hYmxlID0gb2N0ZW9uX2lycV9jaXUwX2VuYWJsZV9tYm94X3YyLAogCS5kaXNhYmxlID0gb2N0ZW9uX2lycV9jaXUwX2Rpc2FibGUsCi0JLmFjayA9IG9jdGVvbl9pcnFfY2l1MF90aW1lcl9hY2tfdjEsCi0JLmVvaSA9IG9jdGVvbl9pcnFfY2l1MF9lb2ksCi0jaWZkZWYgQ09ORklHX1NNUAotCS5zZXRfYWZmaW5pdHkgPSBvY3Rlb25faXJxX2NpdTBfc2V0X2FmZmluaXR5LAotI2VuZGlmCisJLmVvaSA9IG9jdGVvbl9pcnFfY2l1MF9lb2lfbWJveF92MiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgb2N0ZW9uX2lycV9jaGlwX2NpdTBfbWJveCA9IHsKKwkubmFtZSA9ICJDSVUwLU0iLAorCS5lbmFibGUgPSBvY3Rlb25faXJxX2NpdTBfZW5hYmxlX21ib3gsCisJLmRpc2FibGUgPSBvY3Rlb25faXJxX2NpdTBfZGlzYWJsZSwKKwkuZW9pID0gb2N0ZW9uX2lycV9jaXUwX2VvaSwKK307CiAKIHN0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MV9hY2sodW5zaWduZWQgaW50IGlycSkKIHsKQEAgLTM2NSw3ICs0NTIsOCBAQAogCiBzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTFfZW5hYmxlKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JaW50IGNvcmVpZCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCk7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlpbnQgY29yZWlkID0gbmV4dF9jb3JlaWRfZm9yX2lycShkZXNjKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVpbnQ2NF90IGVuMTsKIAlpbnQgYml0ID0gaXJxIC0gT0NURU9OX0lSUV9XRE9HMDsJLyogQml0IDAtNjMgb2YgRU4xICovCkBAIC0zNzgsNiArNDY2LDI1IEBACiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MV9sb2NrLCBmbGFncyk7CiB9CiAKKy8qCisgKiBXYXRjaGRvZyBpbnRlcnJ1cHRzIGFyZSBzcGVjaWFsLiAgVGhleSBhcmUgYXNzb2NpYXRlZCB3aXRoIGEgc2luZ2xlCisgKiBjb3JlLCBzbyB3ZSBoYXJkd2lyZSB0aGUgYWZmaW5pdHkgdG8gdGhhdCBjb3JlLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTFfd2RfZW5hYmxlKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1aW50NjRfdCBlbjE7CisJaW50IGJpdCA9IGlycSAtIE9DVEVPTl9JUlFfV0RPRzA7CS8qIEJpdCAwLTYzIG9mIEVOMSAqLworCWludCBjb3JlaWQgPSBiaXQ7CisKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MV9sb2NrLCBmbGFncyk7CisJZW4xID0gY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMShjb3JlaWQgKiAyICsgMSkpOworCWVuMSB8PSAxdWxsIDw8IGJpdDsKKwljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMShjb3JlaWQgKiAyICsgMSksIGVuMSk7CisJY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMShjb3JlaWQgKiAyICsgMSkpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX2NpdTFfbG9jaywgZmxhZ3MpOworfQorCiBzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTFfZGlzYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQogewogCWludCBiaXQgPSBpcnEgLSBPQ1RFT05fSVJRX1dET0cwOwkvKiBCaXQgMC02MyBvZiBFTjEgKi8KQEAgLTQwNSwxMCArNTEyLDMxIEBACiAgKi8KIHN0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MV9lbmFibGVfdjIodW5zaWduZWQgaW50IGlycSkKIHsKLQlpbnQgaW5kZXggPSBjdm14X2dldF9jb3JlX251bSgpICogMiArIDE7CisJaW50IGluZGV4OwogCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XRE9HMCk7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAotCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4xX1cxUyhpbmRleCksIG1hc2spOworCWlmICgoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSA9PSAwKSB7CisJCWluZGV4ID0gbmV4dF9jb3JlaWRfZm9yX2lycShkZXNjKSAqIDIgKyAxOworCQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMV9XMVMoaW5kZXgpLCBtYXNrKTsKKwl9Cit9CisKKy8qCisgKiBXYXRjaGRvZyBpbnRlcnJ1cHRzIGFyZSBzcGVjaWFsLiAgVGhleSBhcmUgYXNzb2NpYXRlZCB3aXRoIGEgc2luZ2xlCisgKiBjb3JlLCBzbyB3ZSBoYXJkd2lyZSB0aGUgYWZmaW5pdHkgdG8gdGhhdCBjb3JlLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTFfd2RfZW5hYmxlX3YyKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGluZGV4OworCWludCBjb3JlaWQgPSBpcnEgLSBPQ1RFT05fSVJRX1dET0cwOworCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XRE9HMCk7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKworCWlmICgoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSA9PSAwKSB7CisJCWluZGV4ID0gY29yZWlkICogMiArIDE7CisJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4xX1cxUyhpbmRleCksIG1hc2spOworCX0KIH0KIAogLyoKQEAgLTQyNCwyMCArNTUyLDYgQEAKIH0KIAogLyoKLSAqIEVuYWJsZSB0aGUgaXJxIG9uIHRoZSBjdXJyZW50IGNvcmUgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KLSAqIHJlZ2lzdGVycy4KLSAqLwotc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUxX2VvaV92Mih1bnNpZ25lZCBpbnQgaXJxKQotewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOwotCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyICsgMTsKLQl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV0RPRzApOwotCi0JaWYgKChkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpID09IDApCi0JCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4xX1cxUyhpbmRleCksIG1hc2spOwotfQotCi0vKgogICogRGlzYWJsZSB0aGUgaXJxIG9uIHRoZSBhbGwgY29yZXMgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KICAqIHJlZ2lzdGVycy4KICAqLwpAQCAtNDU3LDE5ICs1NzEsMzAgQEAKIAkJCQkJY29uc3Qgc3RydWN0IGNwdW1hc2sgKmRlc3QpCiB7CiAJaW50IGNwdTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCWludCBlbmFibGVfb25lID0gKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkgPT0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBiaXQgPSBpcnEgLSBPQ1RFT05fSVJRX1dET0cwOwkvKiBCaXQgMC02MyBvZiBFTjEgKi8KIAorCS8qCisJICogRm9yIG5vbi12MiBDSVUsIHdlIHdpbGwgYWxsb3cgb25seSBzaW5nbGUgQ1BVIGFmZmluaXR5LgorCSAqIFRoaXMgcmVtb3ZlcyB0aGUgbmVlZCB0byBkbyBsb2NraW5nIGluIHRoZSAuYWNrLy5lb2kKKwkgKiBmdW5jdGlvbnMuCisJICovCisJaWYgKGNwdW1hc2tfd2VpZ2h0KGRlc3QpICE9IDEpCisJCXJldHVybiAtRUlOVkFMOworCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX2NpdTFfbG9jaywgZmxhZ3MpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiAJCWludCBjb3JlaWQgPSBvY3Rlb25fY29yZWlkX2Zvcl9jcHUoY3B1KTsKIAkJdWludDY0X3QgZW4xID0KLQkJCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEKLQkJCQkoY29yZWlkICogMiArIDEpKTsKLQkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBkZXN0KSkKKwkJCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY29yZWlkICogMiArIDEpKTsKKwkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBkZXN0KSAmJiBlbmFibGVfb25lKSB7CisJCQllbmFibGVfb25lID0gMDsKIAkJCWVuMSB8PSAxdWxsIDw8IGJpdDsKLQkJZWxzZQorCQl9IGVsc2UgewogCQkJZW4xICY9IH4oMXVsbCA8PCBiaXQpOworCQl9CiAJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4xKGNvcmVpZCAqIDIgKyAxKSwgZW4xKTsKIAl9CiAJLyoKQEAgLTQ5MSwxMyArNjE2LDE3IEBACiB7CiAJaW50IGNwdTsKIAlpbnQgaW5kZXg7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlpbnQgZW5hYmxlX29uZSA9IChkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpID09IDA7CiAJdTY0IG1hc2sgPSAxdWxsIDw8IChpcnEgLSBPQ1RFT05fSVJRX1dET0cwKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlpbmRleCA9IG9jdGVvbl9jb3JlaWRfZm9yX2NwdShjcHUpICogMiArIDE7Ci0JCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgZGVzdCkpCisJCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgZGVzdCkgJiYgZW5hYmxlX29uZSkgeworCQkJZW5hYmxlX29uZSA9IDA7CiAJCQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMV9XMVMoaW5kZXgpLCBtYXNrKTsKLQkJZWxzZQorCQl9IGVsc2UgewogCQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjFfVzFDKGluZGV4KSwgbWFzayk7CisJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC01MDcsMTEgKzYzNiwxMCBAQAogICogTmV3ZXIgb2N0ZW9uIGNoaXBzIGhhdmUgc3VwcG9ydCBmb3IgbG9ja2xlc3MgQ0lVIG9wZXJhdGlvbi4KICAqLwogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBvY3Rlb25faXJxX2NoaXBfY2l1MV92MiA9IHsKLQkubmFtZSA9ICJDSVUwIiwKKwkubmFtZSA9ICJDSVUxIiwKIAkuZW5hYmxlID0gb2N0ZW9uX2lycV9jaXUxX2VuYWJsZV92MiwKIAkuZGlzYWJsZSA9IG9jdGVvbl9pcnFfY2l1MV9kaXNhYmxlX2FsbF92MiwKLQkuYWNrID0gb2N0ZW9uX2lycV9jaXUxX2Fja192MiwKLQkuZW9pID0gb2N0ZW9uX2lycV9jaXUxX2VvaV92MiwKKwkuZW9pID0gb2N0ZW9uX2lycV9jaXUxX2VuYWJsZV92MiwKICNpZmRlZiBDT05GSUdfU01QCiAJLnNldF9hZmZpbml0eSA9IG9jdGVvbl9pcnFfY2l1MV9zZXRfYWZmaW5pdHlfdjIsCiAjZW5kaWYKQEAgLTUyMSwxMDMgKzY0OSwzNiBAQAogCS5uYW1lID0gIkNJVTEiLAogCS5lbmFibGUgPSBvY3Rlb25faXJxX2NpdTFfZW5hYmxlLAogCS5kaXNhYmxlID0gb2N0ZW9uX2lycV9jaXUxX2Rpc2FibGUsCi0JLmFjayA9IG9jdGVvbl9pcnFfY2l1MV9hY2ssCiAJLmVvaSA9IG9jdGVvbl9pcnFfY2l1MV9lb2ksCiAjaWZkZWYgQ09ORklHX1NNUAogCS5zZXRfYWZmaW5pdHkgPSBvY3Rlb25faXJxX2NpdTFfc2V0X2FmZmluaXR5LAogI2VuZGlmCiB9OwogCi0jaWZkZWYgQ09ORklHX1BDSV9NU0kKLQotc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sob2N0ZW9uX2lycV9tc2lfbG9jayk7Ci0KLXN0YXRpYyB2b2lkIG9jdGVvbl9pcnFfbXNpX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQotewotCWlmICghb2N0ZW9uX2hhc19mZWF0dXJlKE9DVEVPTl9GRUFUVVJFX1BDSUUpKSB7Ci0JCS8qIFRoZXNlIGNoaXBzIGhhdmUgUENJICovCi0JCWN2bXhfd3JpdGVfY3NyKENWTVhfTlBJX05QSV9NU0lfUkNWLAotCQkJICAgICAgIDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfTVNJX0JJVDApKTsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBUaGVzZSBjaGlwcyBoYXZlIFBDSWUuIFRoYW5rZnVsbHkgdGhlIEFDSyBkb2Vzbid0Ci0JCSAqIG5lZWQgYW55IGxvY2tpbmcuCi0JCSAqLwotCQljdm14X3dyaXRlX2NzcihDVk1YX1BFWFBfTlBFSV9NU0lfUkNWMCwKLQkJCSAgICAgICAxdWxsIDw8IChpcnEgLSBPQ1RFT05fSVJRX01TSV9CSVQwKSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBvY3Rlb25faXJxX21zaV9lb2kodW5zaWduZWQgaW50IGlycSkKLXsKLQkvKiBOb3RoaW5nIG5lZWRlZCAqLwotfQotCi1zdGF0aWMgdm9pZCBvY3Rlb25faXJxX21zaV9lbmFibGUodW5zaWduZWQgaW50IGlycSkKLXsKLQlpZiAoIW9jdGVvbl9oYXNfZmVhdHVyZShPQ1RFT05fRkVBVFVSRV9QQ0lFKSkgewotCQkvKgotCQkgKiBPY3Rlb24gUENJIGRvZXNuJ3QgaGF2ZSB0aGUgYWJpbGl0eSB0byBtYXNrL3VubWFzawotCQkgKiBNU0kgaW50ZXJydXB0cyBpbmRpdmlkdWFsbHkuICBJbnN0ZWFkIG9mCi0JCSAqIG1hc2tpbmcvdW5tYXNraW5nIHRoZW0gaW4gZ3JvdXBzIG9mIDE2LCB3ZSBzaW1wbGUKLQkJICogYXNzdW1lIE1TSSBkZXZpY2VzIGFyZSB3ZWxsIGJlaGF2ZWQuICBNU0kKLQkJICogaW50ZXJydXB0cyBhcmUgYWx3YXlzIGVuYWJsZSBhbmQgdGhlIEFDSyBpcyBhc3N1bWVkCi0JCSAqIHRvIGJlIGVub3VnaC4KLQkJICovCi0JfSBlbHNlIHsKLQkJLyogVGhlc2UgY2hpcHMgaGF2ZSBQQ0llLiAgTm90ZSB0aGF0IHdlIG9ubHkgc3VwcG9ydAotCQkgKiB0aGUgZmlyc3QgNjQgTVNJIGludGVycnVwdHMuICBVbmZvcnR1bmF0ZWx5IGFsbCB0aGUKLQkJICogTVNJIGVuYWJsZXMgYXJlIGluIHRoZSBzYW1lIHJlZ2lzdGVyLiAgV2UgdXNlCi0JCSAqIE1TSTAncyBsb2NrIHRvIGNvbnRyb2wgYWNjZXNzIHRvIHRoZW0gYWxsLgotCQkgKi8KLQkJdWludDY0X3QgZW47Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9tc2lfbG9jaywgZmxhZ3MpOwotCQllbiA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9QRVhQX05QRUlfTVNJX0VOQjApOwotCQllbiB8PSAxdWxsIDw8IChpcnEgLSBPQ1RFT05fSVJRX01TSV9CSVQwKTsKLQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QRVhQX05QRUlfTVNJX0VOQjAsIGVuKTsKLQkJY3ZteF9yZWFkX2NzcihDVk1YX1BFWFBfTlBFSV9NU0lfRU5CMCk7Ci0JCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX21zaV9sb2NrLCBmbGFncyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBvY3Rlb25faXJxX21zaV9kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JaWYgKCFvY3Rlb25faGFzX2ZlYXR1cmUoT0NURU9OX0ZFQVRVUkVfUENJRSkpIHsKLQkJLyogU2VlIGNvbW1lbnQgaW4gZW5hYmxlICovCi0JfSBlbHNlIHsKLQkJLyoKLQkJICogVGhlc2UgY2hpcHMgaGF2ZSBQQ0llLiAgTm90ZSB0aGF0IHdlIG9ubHkgc3VwcG9ydAotCQkgKiB0aGUgZmlyc3QgNjQgTVNJIGludGVycnVwdHMuICBVbmZvcnR1bmF0ZWx5IGFsbCB0aGUKLQkJICogTVNJIGVuYWJsZXMgYXJlIGluIHRoZSBzYW1lIHJlZ2lzdGVyLiAgV2UgdXNlCi0JCSAqIE1TSTAncyBsb2NrIHRvIGNvbnRyb2wgYWNjZXNzIHRvIHRoZW0gYWxsLgotCQkgKi8KLQkJdWludDY0X3QgZW47Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9tc2lfbG9jaywgZmxhZ3MpOwotCQllbiA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9QRVhQX05QRUlfTVNJX0VOQjApOwotCQllbiAmPSB+KDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfTVNJX0JJVDApKTsKLQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QRVhQX05QRUlfTVNJX0VOQjAsIGVuKTsKLQkJY3ZteF9yZWFkX2NzcihDVk1YX1BFWFBfTlBFSV9NU0lfRU5CMCk7Ci0JCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX21zaV9sb2NrLCBmbGFncyk7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIG9jdGVvbl9pcnFfY2hpcF9tc2kgPSB7Ci0JLm5hbWUgPSAiTVNJIiwKLQkuZW5hYmxlID0gb2N0ZW9uX2lycV9tc2lfZW5hYmxlLAotCS5kaXNhYmxlID0gb2N0ZW9uX2lycV9tc2lfZGlzYWJsZSwKLQkuYWNrID0gb2N0ZW9uX2lycV9tc2lfYWNrLAotCS5lb2kgPSBvY3Rlb25faXJxX21zaV9lb2ksCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIG9jdGVvbl9pcnFfY2hpcF9jaXUxX3dkX3YyID0geworCS5uYW1lID0gIkNJVTEtVyIsCisJLmVuYWJsZSA9IG9jdGVvbl9pcnFfY2l1MV93ZF9lbmFibGVfdjIsCisJLmRpc2FibGUgPSBvY3Rlb25faXJxX2NpdTFfZGlzYWJsZV9hbGxfdjIsCisJLmVvaSA9IG9jdGVvbl9pcnFfY2l1MV93ZF9lbmFibGVfdjIsCiB9OwotI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgb2N0ZW9uX2lycV9jaGlwX2NpdTFfd2QgPSB7CisJLm5hbWUgPSAiQ0lVMS1XIiwKKwkuZW5hYmxlID0gb2N0ZW9uX2lycV9jaXUxX3dkX2VuYWJsZSwKKwkuZGlzYWJsZSA9IG9jdGVvbl9pcnFfY2l1MV9kaXNhYmxlLAorCS5lb2kgPSBvY3Rlb25faXJxX2NpdTFfZW9pLAorfTsKKworc3RhdGljIHZvaWQgKCpvY3Rlb25fY2l1MF9hY2spKHVuc2lnbmVkIGludCk7CitzdGF0aWMgdm9pZCAoKm9jdGVvbl9jaXUxX2FjaykodW5zaWduZWQgaW50KTsKIAogdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQogewotCWludCBpcnE7CisJdW5zaWduZWQgaW50IGlycTsKIAlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAwOwotCXN0cnVjdCBpcnFfY2hpcCAqY2hpcDBfdGltZXI7CisJc3RydWN0IGlycV9jaGlwICpjaGlwMF9tYm94OwogCXN0cnVjdCBpcnFfY2hpcCAqY2hpcDE7CisJc3RydWN0IGlycV9jaGlwICpjaGlwMV93ZDsKIAogI2lmZGVmIENPTkZJR19TTVAKIAkvKiBTZXQgdGhlIGRlZmF1bHQgYWZmaW5pdHkgdG8gdGhlIGJvb3QgY3B1LiAqLwpAQCAtNjMxLDEzICs2OTIsMTkgQEAKIAlpZiAoT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjU4WFhfUEFTUzJfWCkgfHwKIAkgICAgT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjU2WFhfUEFTUzJfWCkgfHwKIAkgICAgT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjUyWFhfUEFTUzJfWCkpIHsKKwkJb2N0ZW9uX2NpdTBfYWNrID0gb2N0ZW9uX2lycV9jaXUwX2Fja192MjsKKwkJb2N0ZW9uX2NpdTFfYWNrID0gb2N0ZW9uX2lycV9jaXUxX2Fja192MjsKIAkJY2hpcDAgPSAmb2N0ZW9uX2lycV9jaGlwX2NpdTBfdjI7Ci0JCWNoaXAwX3RpbWVyID0gJm9jdGVvbl9pcnFfY2hpcF9jaXUwX3RpbWVyX3YyOworCQljaGlwMF9tYm94ID0gJm9jdGVvbl9pcnFfY2hpcF9jaXUwX21ib3hfdjI7CiAJCWNoaXAxID0gJm9jdGVvbl9pcnFfY2hpcF9jaXUxX3YyOworCQljaGlwMV93ZCA9ICZvY3Rlb25faXJxX2NoaXBfY2l1MV93ZF92MjsKIAl9IGVsc2UgeworCQlvY3Rlb25fY2l1MF9hY2sgPSBvY3Rlb25faXJxX2NpdTBfYWNrOworCQlvY3Rlb25fY2l1MV9hY2sgPSBvY3Rlb25faXJxX2NpdTFfYWNrOwogCQljaGlwMCA9ICZvY3Rlb25faXJxX2NoaXBfY2l1MDsKLQkJY2hpcDBfdGltZXIgPSAmb2N0ZW9uX2lycV9jaGlwX2NpdTBfdGltZXI7CisJCWNoaXAwX21ib3ggPSAmb2N0ZW9uX2lycV9jaGlwX2NpdTBfbWJveDsKIAkJY2hpcDEgPSAmb2N0ZW9uX2lycV9jaGlwX2NpdTE7CisJCWNoaXAxX3dkID0gJm9jdGVvbl9pcnFfY2hpcF9jaXUxX3dkOwogCX0KIAogCS8qIDAgLSAxNSByZXNlcnZlZCBmb3IgaTgyNTkgbWFzdGVyIGFuZCBzbGF2ZSBjb250cm9sbGVyLiAqLwpAQCAtNjUxLDM0ICs3MTgsMjMgQEAKIAkvKiAyNCAtIDg3IENJVV9JTlRfU1VNMCAqLwogCWZvciAoaXJxID0gT0NURU9OX0lSUV9XT1JLUTA7IGlycSA8PSBPQ1RFT05fSVJRX0JPT1RETUE7IGlycSsrKSB7CiAJCXN3aXRjaCAoaXJxKSB7Ci0JCWNhc2UgT0NURU9OX0lSUV9HTVhfRFJQMDoKLQkJY2FzZSBPQ1RFT05fSVJRX0dNWF9EUlAxOgotCQljYXNlIE9DVEVPTl9JUlFfSVBEX0RSUDoKLQkJY2FzZSBPQ1RFT05fSVJRX0tFWV9aRVJPOgotCQljYXNlIE9DVEVPTl9JUlFfVElNRVIwOgotCQljYXNlIE9DVEVPTl9JUlFfVElNRVIxOgotCQljYXNlIE9DVEVPTl9JUlFfVElNRVIyOgotCQljYXNlIE9DVEVPTl9JUlFfVElNRVIzOgotCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGlycSwgY2hpcDBfdGltZXIsIGhhbmRsZV9wZXJjcHVfaXJxKTsKKwkJY2FzZSBPQ1RFT05fSVJRX01CT1gwOgorCQljYXNlIE9DVEVPTl9JUlFfTUJPWDE6CisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCBjaGlwMF9tYm94LCBoYW5kbGVfcGVyY3B1X2lycSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpcnEsIGNoaXAwLCBoYW5kbGVfcGVyY3B1X2lycSk7CisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCBjaGlwMCwgaGFuZGxlX2Zhc3Rlb2lfaXJxKTsKIAkJCWJyZWFrOwogCQl9CiAJfQogCiAJLyogODggLSAxNTEgQ0lVX0lOVF9TVU0xICovCi0JZm9yIChpcnEgPSBPQ1RFT05fSVJRX1dET0cwOyBpcnEgPD0gT0NURU9OX0lSUV9SRVNFUlZFRDE1MTsgaXJxKyspIHsKLQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGlycSwgY2hpcDEsIGhhbmRsZV9wZXJjcHVfaXJxKTsKLQl9CisJZm9yIChpcnEgPSBPQ1RFT05fSVJRX1dET0cwOyBpcnEgPD0gT0NURU9OX0lSUV9XRE9HMTU7IGlycSsrKQorCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCBjaGlwMV93ZCwgaGFuZGxlX2Zhc3Rlb2lfaXJxKTsKIAotI2lmZGVmIENPTkZJR19QQ0lfTVNJCi0JLyogMTUyIC0gMjE1IFBDSS9QQ0llIE1TSSBpbnRlcnJ1cHRzICovCi0JZm9yIChpcnEgPSBPQ1RFT05fSVJRX01TSV9CSVQwOyBpcnEgPD0gT0NURU9OX0lSUV9NU0lfQklUNjM7IGlycSsrKSB7Ci0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZvY3Rlb25faXJxX2NoaXBfbXNpLAotCQkJCQkgaGFuZGxlX3BlcmNwdV9pcnEpOwotCX0KLSNlbmRpZgorCWZvciAoaXJxID0gT0NURU9OX0lSUV9VQVJUMjsgaXJxIDw9IE9DVEVPTl9JUlFfUkVTRVJWRUQxNTE7IGlycSsrKQorCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCBjaGlwMSwgaGFuZGxlX2Zhc3Rlb2lfaXJxKTsKKwogCXNldF9jMF9zdGF0dXMoMHgzMDAgPDwgMik7CiB9CiAKQEAgLTY5Myw2ICs3NDksNyBAQAogCXVuc2lnbmVkIGxvbmcgY29wMF9zdGF0dXM7CiAJdWludDY0X3QgY2l1X2VuOwogCXVpbnQ2NF90IGNpdV9zdW07CisJdW5zaWduZWQgaW50IGlycTsKIAogCXdoaWxlICgxKSB7CiAJCWNvcDBfY2F1c2UgPSByZWFkX2MwX2NhdXNlKCk7CkBAIC03MDQsMTggKzc2MSwyNCBAQAogCQkJY2l1X3N1bSA9IGN2bXhfcmVhZF9jc3IoY2l1X3N1bTBfYWRkcmVzcyk7CiAJCQljaXVfZW4gPSBjdm14X3JlYWRfY3NyKGNpdV9lbjBfYWRkcmVzcyk7CiAJCQljaXVfc3VtICY9IGNpdV9lbjsKLQkJCWlmIChsaWtlbHkoY2l1X3N1bSkpCi0JCQkJZG9fSVJRKGZsczY0KGNpdV9zdW0pICsgT0NURU9OX0lSUV9XT1JLUTAgLSAxKTsKLQkJCWVsc2UKKwkJCWlmIChsaWtlbHkoY2l1X3N1bSkpIHsKKwkJCQlpcnEgPSBmbHM2NChjaXVfc3VtKSArIE9DVEVPTl9JUlFfV09SS1EwIC0gMTsKKwkJCQlvY3Rlb25fY2l1MF9hY2soaXJxKTsKKwkJCQlkb19JUlEoaXJxKTsKKwkJCX0gZWxzZSB7CiAJCQkJc3B1cmlvdXNfaW50ZXJydXB0KCk7CisJCQl9CiAJCX0gZWxzZSBpZiAodW5saWtlbHkoY29wMF9jYXVzZSAmIFNUQVRVU0ZfSVAzKSkgewogCQkJY2l1X3N1bSA9IGN2bXhfcmVhZF9jc3IoY2l1X3N1bTFfYWRkcmVzcyk7CiAJCQljaXVfZW4gPSBjdm14X3JlYWRfY3NyKGNpdV9lbjFfYWRkcmVzcyk7CiAJCQljaXVfc3VtICY9IGNpdV9lbjsKLQkJCWlmIChsaWtlbHkoY2l1X3N1bSkpCi0JCQkJZG9fSVJRKGZsczY0KGNpdV9zdW0pICsgT0NURU9OX0lSUV9XRE9HMCAtIDEpOwotCQkJZWxzZQorCQkJaWYgKGxpa2VseShjaXVfc3VtKSkgeworCQkJCWlycSA9IGZsczY0KGNpdV9zdW0pICsgT0NURU9OX0lSUV9XRE9HMCAtIDE7CisJCQkJb2N0ZW9uX2NpdTFfYWNrKGlycSk7CisJCQkJZG9fSVJRKGlycSk7CisJCQl9IGVsc2UgewogCQkJCXNwdXJpb3VzX2ludGVycnVwdCgpOworCQkJfQogCQl9IGVsc2UgaWYgKGxpa2VseShjb3AwX2NhdXNlKSkgewogCQkJZG9fSVJRKGZscyhjb3AwX2NhdXNlKSAtIDkgKyBNSVBTX0NQVV9JUlFfQkFTRSk7CiAJCX0gZWxzZSB7CkBAIC03MjUsNTQgKzc4OCw4NCBAQAogfQogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi1zdGF0aWMgaW50IGlzX2lycV9lbmFibGVkX29uX2NwdSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgY3B1KQotewotCXVuc2lnbmVkIGludCBpc3NldDsKLQlpbnQgY29yZWlkID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSk7Ci0JaW50IGJpdCA9IChpcnEgPCBPQ1RFT05fSVJRX1dET0cwKSA/Ci0JCSAgIGlycSAtIE9DVEVPTl9JUlFfV09SS1EwIDogaXJxIC0gT0NURU9OX0lSUV9XRE9HMDsKLSAgICAgICBpZiAoaXJxIDwgNjQpIHsKLQkJaXNzZXQgPSAoY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMChjb3JlaWQgKiAyKSkgJgotCQkJKDF1bGwgPDwgYml0KSkgPj4gYml0OwotICAgICAgIH0gZWxzZSB7Ci0JICAgICAgIGlzc2V0ID0gKGN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY29yZWlkICogMiArIDEpKSAmCi0JCQkoMXVsbCA8PCBiaXQpKSA+PiBiaXQ7Ci0gICAgICAgfQotICAgICAgIHJldHVybiBpc3NldDsKLX0KIAogdm9pZCBmaXh1cF9pcnFzKHZvaWQpCiB7Ci0gICAgICAgaW50IGlycTsKKwlpbnQgaXJxOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwljcHVtYXNrX3QgbmV3X2FmZmluaXR5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGRvX3NldF9hZmZpbml0eTsKKwlpbnQgY3B1OworCisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJZm9yIChpcnEgPSBPQ1RFT05fSVJRX1NXMDsgaXJxIDw9IE9DVEVPTl9JUlFfVElNRVI7IGlycSsrKQogCQlvY3Rlb25faXJxX2NvcmVfZGlzYWJsZV9sb2NhbChpcnEpOwogCi0JZm9yIChpcnEgPSBPQ1RFT05fSVJRX1dPUktRMDsgaXJxIDw9IE9DVEVPTl9JUlFfR1BJTzE1OyBpcnErKykgewotCQlpZiAoaXNfaXJxX2VuYWJsZWRfb25fY3B1KGlycSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSkgewotCQkJLyogY2l1IGlycSBtaWdyYXRlcyB0byBuZXh0IGNwdSAqLwotCQkJb2N0ZW9uX2lycV9jaGlwX2NpdTAuZGlzYWJsZShpcnEpOwotCQkJb2N0ZW9uX2lycV9jaXUwX3NldF9hZmZpbml0eShpcnEsICZjcHVfb25saW5lX21hcCk7Ci0JCX0KLQl9CisJZm9yIChpcnEgPSBPQ1RFT05fSVJRX1dPUktRMDsgaXJxIDwgT0NURU9OX0lSUV9MQVNUOyBpcnErKykgeworCQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwkJc3dpdGNoIChpcnEpIHsKKwkJY2FzZSBPQ1RFT05fSVJRX01CT1gwOgorCQljYXNlIE9DVEVPTl9JUlFfTUJPWDE6CisJCQkvKiBUaGUgZW9pIGZ1bmN0aW9uIHdpbGwgZGlzYWJsZSB0aGVtIG9uIHRoaXMgQ1BVLiAqLworCQkJZGVzYy0+Y2hpcC0+ZW9pKGlycSk7CisJCQlicmVhazsKKwkJY2FzZSBPQ1RFT05fSVJRX1dET0cwOgorCQljYXNlIE9DVEVPTl9JUlFfV0RPRzE6CisJCWNhc2UgT0NURU9OX0lSUV9XRE9HMjoKKwkJY2FzZSBPQ1RFT05fSVJRX1dET0czOgorCQljYXNlIE9DVEVPTl9JUlFfV0RPRzQ6CisJCWNhc2UgT0NURU9OX0lSUV9XRE9HNToKKwkJY2FzZSBPQ1RFT05fSVJRX1dET0c2OgorCQljYXNlIE9DVEVPTl9JUlFfV0RPRzc6CisJCWNhc2UgT0NURU9OX0lSUV9XRE9HODoKKwkJY2FzZSBPQ1RFT05fSVJRX1dET0c5OgorCQljYXNlIE9DVEVPTl9JUlFfV0RPRzEwOgorCQljYXNlIE9DVEVPTl9JUlFfV0RPRzExOgorCQljYXNlIE9DVEVPTl9JUlFfV0RPRzEyOgorCQljYXNlIE9DVEVPTl9JUlFfV0RPRzEzOgorCQljYXNlIE9DVEVPTl9JUlFfV0RPRzE0OgorCQljYXNlIE9DVEVPTl9JUlFfV0RPRzE1OgorCQkJLyoKKwkJCSAqIFRoZXNlIGhhdmUgc3BlY2lhbCBwZXIgQ1BVIHNlbWFudGljcyBhbmQKKwkJCSAqIGFyZSBoYW5kbGVkIGluIHRoZSB3YXRjaGRvZyBkcml2ZXIuCisJCQkgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJCQkvKgorCQkJICogSWYgdGhpcyBpcnEgaGFzIGFuIGFjdGlvbiwgaXQgaXMgaW4gdXNlIGFuZAorCQkJICogbXVzdCBiZSBtaWdyYXRlZCBpZiBpdCBoYXMgYWZmaW5pdHkgdG8gdGhpcworCQkJICogY3B1LgorCQkJICovCisJCQlpZiAoZGVzYy0+YWN0aW9uICYmIGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBkZXNjLT5hZmZpbml0eSkpIHsKKwkJCQlpZiAoY3B1bWFza193ZWlnaHQoZGVzYy0+YWZmaW5pdHkpID4gMSkgeworCQkJCQkvKgorCQkJCQkgKiBJdCBoYXMgbXVsdGkgQ1BVIGFmZmluaXR5LAorCQkJCQkgKiBqdXN0IHJlbW92ZSB0aGlzIENQVSBmcm9tCisJCQkJCSAqIHRoZSBhZmZpbml0eSBzZXQuCisJCQkJCSAqLworCQkJCQljcHVtYXNrX2NvcHkoJm5ld19hZmZpbml0eSwgZGVzYy0+YWZmaW5pdHkpOworCQkJCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsICZuZXdfYWZmaW5pdHkpOworCQkJCX0gZWxzZSB7CisJCQkJCS8qCisJCQkJCSAqIE90aGVyd2lzZSwgcHV0IGl0IG9uIGxvd2VzdAorCQkJCQkgKiBudW1iZXJlZCBvbmxpbmUgQ1BVLgorCQkJCQkgKi8KKwkJCQkJY3B1bWFza19jbGVhcigmbmV3X2FmZmluaXR5KTsKKwkJCQkJY3B1bWFza19zZXRfY3B1KGNwdW1hc2tfZmlyc3QoY3B1X29ubGluZV9tYXNrKSwgJm5ld19hZmZpbml0eSk7CisJCQkJfQorCQkJCWRvX3NldF9hZmZpbml0eSA9IDE7CisJCQl9IGVsc2UgeworCQkJCWRvX3NldF9hZmZpbml0eSA9IDA7CisJCQl9CisJCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCi0jaWYgMAotCWZvciAoaXJxID0gT0NURU9OX0lSUV9NQk9YMDsgaXJxIDw9IE9DVEVPTl9JUlFfTUJPWDE7IGlycSsrKQotCQlvY3Rlb25faXJxX21haWxib3hfbWFzayhpcnEpOwotI2VuZGlmCi0JZm9yIChpcnEgPSBPQ1RFT05fSVJRX1VBUlQwOyBpcnEgPD0gT0NURU9OX0lSUV9CT09URE1BOyBpcnErKykgewotCQlpZiAoaXNfaXJxX2VuYWJsZWRfb25fY3B1KGlycSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSkgewotCQkJLyogY2l1IGlycSBtaWdyYXRlcyB0byBuZXh0IGNwdSAqLwotCQkJb2N0ZW9uX2lycV9jaGlwX2NpdTAuZGlzYWJsZShpcnEpOwotCQkJb2N0ZW9uX2lycV9jaXUwX3NldF9hZmZpbml0eShpcnEsICZjcHVfb25saW5lX21hcCk7Ci0JCX0KLQl9CisJCQlpZiAoZG9fc2V0X2FmZmluaXR5KQorCQkJCWlycV9zZXRfYWZmaW5pdHkoaXJxLCAmbmV3X2FmZmluaXR5KTsKIAotCWZvciAoaXJxID0gT0NURU9OX0lSUV9VQVJUMjsgaXJxIDw9IE9DVEVPTl9JUlFfUkVTRVJWRUQxMzU7IGlycSsrKSB7Ci0JCWlmIChpc19pcnFfZW5hYmxlZF9vbl9jcHUoaXJxLCBzbXBfcHJvY2Vzc29yX2lkKCkpKSB7Ci0JCQkvKiBjaXUgaXJxIG1pZ3JhdGVzIHRvIG5leHQgY3B1ICovCi0JCQlvY3Rlb25faXJxX2NoaXBfY2l1MS5kaXNhYmxlKGlycSk7Ci0JCQlvY3Rlb25faXJxX2NpdTFfc2V0X2FmZmluaXR5KGlycSwgJmNwdV9vbmxpbmVfbWFwKTsKKwkJCWJyZWFrOwogCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uX2Jvb3QuaCBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbl9ib290LmgKaW5kZXggMGY3Zjg0YS4uNDI4ODY0YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uX2Jvb3QuaAorKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb25fYm9vdC5oCkBAIC0yMywxNCArMjMsMTYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiBzdHJ1Y3QgYm9vdF9pbml0X3ZlY3RvciB7Ci0JdWludDMyX3Qgc3RhY2tfYWRkcjsKLQl1aW50MzJfdCBjb2RlX2FkZHI7CisJLyogRmlyc3Qgc3RhZ2UgYWRkcmVzcyAtIGluIHJhbSBpbnN0ZWFkIG9mIGZsYXNoICovCisJdWludDY0X3QgY29kZV9hZGRyOworCS8qIFNldHVwIGNvZGUgZm9yIGFwcGxpY2F0aW9uLCBOT1QgYXBwbGljYXRpb24gZW50cnkgcG9pbnQgKi8KIAl1aW50MzJfdCBhcHBfc3RhcnRfZnVuY19hZGRyOworCS8qIGswIGlzIHVzZWQgZm9yIGdsb2JhbCBkYXRhIC0gbmVlZHMgdG8gYmUgcGFzc2VkIHRvIG90aGVyIGNvcmVzICovCiAJdWludDMyX3QgazBfdmFsOwotCXVpbnQzMl90IGZsYWdzOwotCXVpbnQzMl90IGJvb3RfaW5mb19hZGRyOworCS8qIEFkZHJlc3Mgb2YgYm9vdCBpbmZvIGJsb2NrIHN0cnVjdHVyZSAqLworCXVpbnQ2NF90IGJvb3RfaW5mb19hZGRyOworCXVpbnQzMl90IGZsYWdzOyAgICAgICAgIC8qIGZsYWdzICovCiAJdWludDMyX3QgcGFkOwotCXVpbnQzMl90IHBhZDI7CiB9OwogCiAvKiBzaW1pbGFyIHRvIGJvb3Rsb2FkZXIncyBsaW51eF9hcHBfYm9vdF9pbmZvIGJ1dCB3aXRob3V0IGdsb2JhbCBkYXRhICovCkBAIC00MCw3ICs0Miw3IEBACiAJdWludDMyX3QgYXZhaWxfY29yZW1hc2s7CiAJdWludDMyX3QgcGNpX2NvbnNvbGVfYWN0aXZlOwogCXVpbnQzMl90IGljYWNoZV9wcmVmZXRjaF9kaXNhYmxlOwotCXVpbnQzMl90IEluaXRUTEJTdGFydF9hZGRyOworCXVpbnQ2NF90IEluaXRUTEJTdGFydF9hZGRyOwogCXVpbnQzMl90IHN0YXJ0X2FwcF9hZGRyOwogCXVpbnQzMl90IGN1cl9leGNlcHRpb25fYmFzZTsKIAl1aW50MzJfdCBub19tYXJrX3ByaXZhdGVfZGF0YTsKQEAgLTU4LDcgKzYwLDcgQEAKIAogI2RlZmluZSBMSU5VWF9BUFBfQk9PVF9CTE9DS19OQU1FICJsaW51eC1hcHAtYm9vdCIKIAotI2RlZmluZSBMQUJJX1NJR05BVFVSRSAweEFBQkJDQ0RECisjZGVmaW5lIExBQklfU0lHTkFUVVJFIDB4QUFCQkNDMDEKIAogLyogIGZyb20gdWJvb3QtaGVhZGVycy9vY3Rlb25fbWVtX21hcC5oICovCiAjZGVmaW5lIEVYQ0VQVElPTl9CQVNFX0lOQ1IgICAgICg0ICogMTAyNCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NlcmlhbC5jIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2VyaWFsLmMKaW5kZXggODNlYWMzNy4uNjM4YWRhYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2VyaWFsLmMKKysrIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2VyaWFsLmMKQEAgLTE4LDExICsxOCw3IEBACiAKICNpbmNsdWRlIDxhc20vb2N0ZW9uL29jdGVvbi5oPgogCi0jaWZkZWYgQ09ORklHX0dEQl9DT05TT0xFCi0jZGVmaW5lIERFQlVHX1VBUlQgMAotI2Vsc2UKICNkZWZpbmUgREVCVUdfVUFSVCAxCi0jZW5kaWYKIAogdW5zaWduZWQgaW50IG9jdGVvbl9zZXJpYWxfaW4oc3RydWN0IHVhcnRfcG9ydCAqdXAsIGludCBvZmZzZXQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2V0dXAuYwppbmRleCBkMWI1ZmZhLi42OTE5N2NiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxhc20vdGltZS5oPgogCiAjaW5jbHVkZSA8YXNtL29jdGVvbi9vY3Rlb24uaD4KKyNpbmNsdWRlIDxhc20vb2N0ZW9uL3BjaS1vY3Rlb24uaD4KIAogI2lmZGVmIENPTkZJR19DQVZJVU1fREVDT0RFX1JTTAogZXh0ZXJuIHZvaWQgY3ZteF9pbnRlcnJ1cHRfcnNsX2RlY29kZSh2b2lkKTsKQEAgLTU3OCw5ICs1NzksNiBAQAogCX0KIAogCWlmIChzdHJzdHIoYXJjc19jbWRsaW5lLCAiY29uc29sZT0iKSA9PSBOVUxMKSB7Ci0jaWZkZWYgQ09ORklHX0dEQl9DT05TT0xFCi0JCXN0cmNhdChhcmNzX2NtZGxpbmUsICIgY29uc29sZT1nZGIiKTsKLSNlbHNlCiAjaWZkZWYgQ09ORklHX0NBVklVTV9PQ1RFT05fMk5EX0tFUk5FTAogCQlzdHJjYXQoYXJjc19jbWRsaW5lLCAiIGNvbnNvbGU9dHR5UzAsMTE1MjAwIik7CiAjZWxzZQpAQCAtNTg5LDcgKzU4Nyw2IEBACiAJCWVsc2UKIAkJCXN0cmNhdChhcmNzX2NtZGxpbmUsICIgY29uc29sZT10dHlTMCwxMTUyMDAiKTsKICNlbmRpZgotI2VuZGlmCiAJfQogCiAJaWYgKG9jdGVvbl9pc19zaW11bGF0aW9uKCkpIHsKQEAgLTU5OCwxMyArNTk1LDEzIEBACiAJCSAqIHRoZSBmaWxlc3lzdGVtLiBBbHNvIHNwZWNpZnkgdGhlIGNhbGlicmF0aW9uIGRlbGF5CiAJCSAqIHRvIGF2b2lkIGNhbGN1bGF0aW5nIGl0IGV2ZXJ5IHRpbWUuCiAJCSAqLwotCQlzdHJjYXQoYXJjc19jbWRsaW5lLCAiIHJ3IHJvb3Q9MWYwMCIKLQkJICAgICAgICIgbHBqPTYwMTc2IHNscmFtPXJvb3QsMHg0MDAwMDAwMCwrMTA3Mzc0MTgyNCIpOworCQlzdHJjYXQoYXJjc19jbWRsaW5lLCAiIHJ3IHJvb3Q9MWYwMCBzbHJhbT1yb290LDB4NDAwMDAwMDAsKzEwNzM3NDE4MjQiKTsKIAl9CiAKIAltaXBzX2hwdF9mcmVxdWVuY3kgPSBvY3Rlb25fZ2V0X2Nsb2NrX3JhdGUoKTsKIAogCW9jdGVvbl9pbml0X2N2bWNvdW50KCk7CisJb2N0ZW9uX3NldHVwX2RlbGF5cygpOwogCiAJX21hY2hpbmVfcmVzdGFydCA9IG9jdGVvbl9yZXN0YXJ0OwogCV9tYWNoaW5lX2hhbHQgPSBvY3Rlb25faGFsdDsKQEAgLTYxMyw2ICs2MTAsMjIgQEAKIAlyZWdpc3Rlcl9zbXBfb3BzKCZvY3Rlb25fc21wX29wcyk7CiB9CiAKKy8qIEV4Y2x1ZGUgYSBzaW5nbGUgcGFnZSBmcm9tIHRoZSByZWdpb25zIG9idGFpbmVkIGluIHBsYXRfbWVtX3NldHVwLiAqLworc3RhdGljIF9faW5pdCB2b2lkIG1lbW9yeV9leGNsdWRlX3BhZ2UodTY0IGFkZHIsIHU2NCAqbWVtLCB1NjQgKnNpemUpCit7CisJaWYgKGFkZHIgPiAqbWVtICYmIGFkZHIgPCAqbWVtICsgKnNpemUpIHsKKwkJdTY0IGluYyA9IGFkZHIgLSAqbWVtOworCQlhZGRfbWVtb3J5X3JlZ2lvbigqbWVtLCBpbmMsIEJPT1RfTUVNX1JBTSk7CisJCSptZW0gKz0gaW5jOworCQkqc2l6ZSAtPSBpbmM7CisJfQorCisJaWYgKGFkZHIgPT0gKm1lbSAmJiAqc2l6ZSA+IFBBR0VfU0laRSkgeworCQkqbWVtICs9IFBBR0VfU0laRTsKKwkJKnNpemUgLT0gUEFHRV9TSVpFOworCX0KK30KKwogdm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKIAl1aW50NjRfdCBtZW1fYWxsb2Nfc2l6ZTsKQEAgLTY2MywxMiArNjc2LDI3IEBACiAJCQkJCQlDVk1YX0JPT1RNRU1fRkxBR19OT19MT0NLSU5HKTsKICNlbmRpZgogCQlpZiAobWVtb3J5ID49IDApIHsKKwkJCXU2NCBzaXplID0gbWVtX2FsbG9jX3NpemU7CisKKwkJCS8qCisJCQkgKiBleGNsdWRlIGEgcGFnZSBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YKKwkJCSAqIHRoZSAyNTZNQiBQQ0llICdob2xlJyBzbyB0aGUga2VybmVsIHdpbGwgbm90CisJCQkgKiB0cnkgdG8gYWxsb2NhdGUgbXVsdGktcGFnZSBidWZmZXJzIHRoYXQKKwkJCSAqIHNwYW4gdGhlIGRpc2NvbnRpbnVpdHkuCisJCQkgKi8KKwkJCW1lbW9yeV9leGNsdWRlX3BhZ2UoQ1ZNWF9QQ0lFX0JBUjFfUEhZU19CQVNFLAorCQkJCQkgICAgJm1lbW9yeSwgJnNpemUpOworCQkJbWVtb3J5X2V4Y2x1ZGVfcGFnZShDVk1YX1BDSUVfQkFSMV9QSFlTX0JBU0UgKworCQkJCQkgICAgQ1ZNWF9QQ0lFX0JBUjFfUEhZU19TSVpFLAorCQkJCQkgICAgJm1lbW9yeSwgJnNpemUpOworCiAJCQkvKgogCQkJICogVGhpcyBmdW5jdGlvbiBhdXRvbWF0aWNhbGx5IG1lcmdlcyBhZGRyZXNzCiAJCQkgKiByZWdpb25zIG5leHQgdG8gZWFjaCBvdGhlciBpZiB0aGV5IGFyZQogCQkJICogcmVjZWl2ZWQgaW4gaW5jcmVtZW50aW5nIG9yZGVyLgogCQkJICovCi0JCQlhZGRfbWVtb3J5X3JlZ2lvbihtZW1vcnksIG1lbV9hbGxvY19zaXplLCBCT09UX01FTV9SQU0pOworCQkJaWYgKHNpemUpCisJCQkJYWRkX21lbW9yeV9yZWdpb24obWVtb3J5LCBzaXplLCBCT09UX01FTV9SQU0pOwogCQkJdG90YWwgKz0gbWVtX2FsbG9jX3NpemU7CiAJCX0gZWxzZSB7CiAJCQlicmVhazsKQEAgLTY5MSw3ICs3MTksMTAgQEAKIAkJICAgICAgImN2bXhfYm9vdG1lbV9waHlfYWxsb2NcbiIpOwogfQogCi0KKy8qCisgKiBFbWl0IG9uZSBjaGFyYWN0ZXIgdG8gdGhlIGJvb3QgVUFSVC4gIEV4cG9ydGVkIGZvciB1c2UgYnkgdGhlCisgKiB3YXRjaGRvZyB0aW1lci4KKyAqLwogaW50IHByb21fcHV0Y2hhcihjaGFyIGMpCiB7CiAJdWludDY0X3QgbHNydmFsOwpAQCAtNzA1LDYgKzczNiw3IEBACiAJY3ZteF93cml0ZV9jc3IoQ1ZNWF9NSU9fVUFSVFhfVEhSKG9jdGVvbl91YXJ0KSwgYyAmIDB4ZmZ1bGwpOwogCXJldHVybiAxOwogfQorRVhQT1JUX1NZTUJPTChwcm9tX3B1dGNoYXIpOwogCiB2b2lkIHByb21fZnJlZV9wcm9tX21lbW9yeSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc21wLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYwppbmRleCA2ZDk5YjlkLi4zOTFjZWZlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYwpAQCAtMyw3ICszLDcgQEAKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggQ2F2aXVtIE5ldHdvcmtzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCwgMjAwOSwgMjAxMCBDYXZpdW0gTmV0d29ya3MKICAqLwogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTI3LDcgKzI3LDggQEAKIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgb2N0ZW9uX3Byb2Nlc3Nvcl9ncDsKIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotc3RhdGljIHVuc2lnbmVkIGludCBJbml0VExCU3RhcnRfYWRkcjsKK3VpbnQ2NF90IG9jdGVvbl9ib290bG9hZGVyX2VudHJ5X2FkZHI7CitFWFBPUlRfU1lNQk9MKG9jdGVvbl9ib290bG9hZGVyX2VudHJ5X2FkZHIpOwogI2VuZGlmCiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBtYWlsYm94X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCkBAIC04MCwyMCArODEsMTMgQEAKIHN0YXRpYyB2b2lkIG9jdGVvbl9zbXBfaG90cGx1Z19zZXR1cCh2b2lkKQogewogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotCXVpbnQzMl90IGxhYmlfc2lnbmF0dXJlOworCXN0cnVjdCBsaW51eF9hcHBfYm9vdF9pbmZvICpsYWJpOwogCi0JbGFiaV9zaWduYXR1cmUgPQotCQljdm14X3JlYWQ2NF91aW50MzIoQ1ZNWF9BRERfU0VHKENWTVhfTUlQU19TUEFDRV9YS1BIWVMsCi0JCQkJCUxBQklfQUREUl9JTl9CT09UTE9BREVSICsKLQkJCQkJb2Zmc2V0b2Yoc3RydWN0IGxpbnV4X2FwcF9ib290X2luZm8sCi0JCQkJCQkgICAgbGFiaV9zaWduYXR1cmUpKSk7Ci0JaWYgKGxhYmlfc2lnbmF0dXJlICE9IExBQklfU0lHTkFUVVJFKQotCQlwcl9lcnIoIlRoZSBib290bG9hZGVyIHZlcnNpb24gb24gdGhpcyBib2FyZCBpcyBpbmNvcnJlY3RcbiIpOwotCUluaXRUTEJTdGFydF9hZGRyID0KLQkJY3ZteF9yZWFkNjRfdWludDMyKENWTVhfQUREX1NFRyhDVk1YX01JUFNfU1BBQ0VfWEtQSFlTLAotCQkJCSAgIExBQklfQUREUl9JTl9CT09UTE9BREVSICsKLQkJCQkJICAgb2Zmc2V0b2Yoc3RydWN0IGxpbnV4X2FwcF9ib290X2luZm8sCi0JCQkJCQkgICAgSW5pdFRMQlN0YXJ0X2FkZHIpKSk7CisJbGFiaSA9IChzdHJ1Y3QgbGludXhfYXBwX2Jvb3RfaW5mbyAqKVBIWVNfVE9fWEtTRUdfQ0FDSEVEKExBQklfQUREUl9JTl9CT09UTE9BREVSKTsKKwlpZiAobGFiaS0+bGFiaV9zaWduYXR1cmUgIT0gTEFCSV9TSUdOQVRVUkUpCisJCXBhbmljKCJUaGUgYm9vdGxvYWRlciB2ZXJzaW9uIG9uIHRoaXMgYm9hcmQgaXMgaW5jb3JyZWN0LiIpOworCisJb2N0ZW9uX2Jvb3Rsb2FkZXJfZW50cnlfYWRkciA9IGxhYmktPkluaXRUTEJTdGFydF9hZGRyOwogI2VuZGlmCiB9CiAKQEAgLTEwMiwyNCArOTYsNDcgQEAKIAljb25zdCBpbnQgY29yZWlkID0gY3ZteF9nZXRfY29yZV9udW0oKTsKIAlpbnQgY3B1czsKIAlpbnQgaWQ7Ci0KIAlpbnQgY29yZV9tYXNrID0gb2N0ZW9uX2dldF9ib290X2NvcmVtYXNrKCk7CisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisJdW5zaWduZWQgaW50IG51bV9jb3JlcyA9IGN2bXhfb2N0ZW9uX251bV9jb3JlcygpOworI2VuZGlmCiAKLQljcHVzX2NsZWFyKGNwdV9wb3NzaWJsZV9tYXApOworCS8qIFRoZSBwcmVzZW50IENQVXMgYXJlIGluaXRpYWxseSBqdXN0IHRoZSBib290IGNwdSAoQ1BVIDApLiAqLworCWZvciAoaWQgPSAwOyBpZCA8IE5SX0NQVVM7IGlkKyspIHsKKwkJc2V0X2NwdV9wb3NzaWJsZShpZCwgaWQgPT0gMCk7CisJCXNldF9jcHVfcHJlc2VudChpZCwgaWQgPT0gMCk7CisJfQorCiAJX19jcHVfbnVtYmVyX21hcFtjb3JlaWRdID0gMDsKIAlfX2NwdV9sb2dpY2FsX21hcFswXSA9IGNvcmVpZDsKLQljcHVfc2V0KDAsIGNwdV9wb3NzaWJsZV9tYXApOwogCisJLyogVGhlIHByZXNlbnQgQ1BVcyBnZXQgdGhlIGxvd2VzdCBDUFUgbnVtYmVycy4gKi8KIAljcHVzID0gMTsKLQlmb3IgKGlkID0gMDsgaWQgPCAxNjsgaWQrKykgeworCWZvciAoaWQgPSAwOyBpZCA8IE5SX0NQVVM7IGlkKyspIHsKIAkJaWYgKChpZCAhPSBjb3JlaWQpICYmIChjb3JlX21hc2sgJiAoMSA8PCBpZCkpKSB7Ci0JCQljcHVfc2V0KGNwdXMsIGNwdV9wb3NzaWJsZV9tYXApOworCQkJc2V0X2NwdV9wb3NzaWJsZShjcHVzLCB0cnVlKTsKKwkJCXNldF9jcHVfcHJlc2VudChjcHVzLCB0cnVlKTsKIAkJCV9fY3B1X251bWJlcl9tYXBbaWRdID0gY3B1czsKIAkJCV9fY3B1X2xvZ2ljYWxfbWFwW2NwdXNdID0gaWQ7CiAJCQljcHVzKys7CiAJCX0KIAl9Ci0JY3B1X3ByZXNlbnRfbWFwID0gY3B1X3Bvc3NpYmxlX21hcDsKKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCS8qCisJICogVGhlIHBvc3NpYmxlIENQVXMgYXJlIGFsbCB0aG9zZSBwcmVzZW50IG9uIHRoZSBjaGlwLiAgV2UKKwkgKiB3aWxsIGFzc2lnbiBDUFUgbnVtYmVycyBmb3IgcG9zc2libGUgY29yZXMgYXMgd2VsbC4gIENvcmVzCisJICogYXJlIGFsd2F5cyBjb25zZWN1dGl2ZWx5IG51bWJlcmQgZnJvbSAwLgorCSAqLworCWZvciAoaWQgPSAwOyBpZCA8IG51bV9jb3JlcyAmJiBpZCA8IE5SX0NQVVM7IGlkKyspIHsKKwkJaWYgKCEoY29yZV9tYXNrICYgKDEgPDwgaWQpKSkgeworCQkJc2V0X2NwdV9wb3NzaWJsZShjcHVzLCB0cnVlKTsKKwkJCV9fY3B1X251bWJlcl9tYXBbaWRdID0gY3B1czsKKwkJCV9fY3B1X2xvZ2ljYWxfbWFwW2NwdXNdID0gaWQ7CisJCQljcHVzKys7CisJCX0KKwl9CisjZW5kaWYKIAogCW9jdGVvbl9zbXBfaG90cGx1Z19zZXR1cCgpOwogfQpAQCAtMTU4LDE4ICsxNzUsMjEgQEAKIHsKIAljb25zdCBpbnQgY29yZWlkID0gY3ZteF9nZXRfY29yZV9udW0oKTsKIAl1bmlvbiBjdm14X2NpdV9pbnR4X3N1bTAgaW50ZXJydXB0X2VuYWJsZTsKKwl1bnNpZ25lZCBpbnQgc3I7CiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLQl1bnNpZ25lZCBpbnQgY3VyX2V4Y2VwdGlvbl9iYXNlOworCXN0cnVjdCBsaW51eF9hcHBfYm9vdF9pbmZvICpsYWJpOwogCi0JY3VyX2V4Y2VwdGlvbl9iYXNlID0gY3ZteF9yZWFkNjRfdWludDMyKAotCQlDVk1YX0FERF9TRUcoQ1ZNWF9NSVBTX1NQQUNFX1hLUEhZUywKLQkJCSAgICAgTEFCSV9BRERSX0lOX0JPT1RMT0FERVIgKwotCQkJICAgICBvZmZzZXRvZihzdHJ1Y3QgbGludXhfYXBwX2Jvb3RfaW5mbywKLQkJCQkgICAgICBjdXJfZXhjZXB0aW9uX2Jhc2UpKSk7Ci0JLyogY3VyX2V4Y2VwdGlvbl9iYXNlIGlzIGluY3JlbWVudGVkIGluIGJvb3Rsb2FkZXIgYWZ0ZXIgc2V0dGluZyAqLwotCXdyaXRlX2MwX2ViYXNlKCh1bnNpZ25lZCBpbnQpKGN1cl9leGNlcHRpb25fYmFzZSAtIEVYQ0VQVElPTl9CQVNFX0lOQ1IpKTsKKwlsYWJpID0gKHN0cnVjdCBsaW51eF9hcHBfYm9vdF9pbmZvICopUEhZU19UT19YS1NFR19DQUNIRUQoTEFCSV9BRERSX0lOX0JPT1RMT0FERVIpOworCisJaWYgKGxhYmktPmxhYmlfc2lnbmF0dXJlICE9IExBQklfU0lHTkFUVVJFKQorCQlwYW5pYygiVGhlIGJvb3Rsb2FkZXIgdmVyc2lvbiBvbiB0aGlzIGJvYXJkIGlzIGluY29ycmVjdC4iKTsKICNlbmRpZgorCisJc3IgPSBzZXRfYzBfc3RhdHVzKFNUMF9CRVYpOworCXdyaXRlX2MwX2ViYXNlKCh1MzIpZWJhc2UpOworCXdyaXRlX2MwX3N0YXR1cyhzcik7CisKIAlvY3Rlb25fY2hlY2tfY3B1X2Jpc3QoKTsKIAlvY3Rlb25faW5pdF9jdm1jb3VudCgpOwogCS8qCkBAIC0yNzYsOCArMjk2LDggQEAKIHN0YXRpYyB2b2lkIG9jdGVvbl9jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCiB7CiAJaW50IGNvcmVpZCA9IGNwdV9sb2dpY2FsX21hcChjcHUpOwotCXVpbnQzMl90IGF2YWlsX2NvcmVtYXNrOwotCXN0cnVjdCBjdm14X2Jvb3RtZW1fbmFtZWRfYmxvY2tfZGVzYyAqYmxvY2tfZGVzYzsKKwl1aW50MzJfdCBtYXNrLCBuZXdfbWFzazsKKwljb25zdCBzdHJ1Y3QgY3ZteF9ib290bWVtX25hbWVkX2Jsb2NrX2Rlc2MgKmJsb2NrX2Rlc2M7CiAKIAl3aGlsZSAocGVyX2NwdShjcHVfc3RhdGUsIGNwdSkgIT0gQ1BVX0RFQUQpCiAJCWNwdV9yZWxheCgpOwpAQCAtMjg2LDUyICszMDYsNDAgQEAKIAkgKiBUaGlzIGlzIGEgYml0IGNvbXBsaWNhdGVkIHN0cmF0ZWdpY3Mgb2YgZ2V0dGluZy9zZXR0aWcgYXZhaWxhYmxlCiAJICogY29yZXMgbWFzaywgY29waWVkIGZyb20gYm9vdGxvYWRlcgogCSAqLworCisJbWFzayA9IDEgPDwgY29yZWlkOwogCS8qIExJTlVYX0FQUF9CT09UX0JMT0NLIGlzIGluaXRpYWxpemVkIGluIGJvb3RvY3QgYmluYXJ5ICovCiAJYmxvY2tfZGVzYyA9IGN2bXhfYm9vdG1lbV9maW5kX25hbWVkX2Jsb2NrKExJTlVYX0FQUF9CT09UX0JMT0NLX05BTUUpOwogCiAJaWYgKCFibG9ja19kZXNjKSB7Ci0JCWF2YWlsX2NvcmVtYXNrID0KLQkJCWN2bXhfcmVhZDY0X3VpbnQzMihDVk1YX0FERF9TRUcoQ1ZNWF9NSVBTX1NQQUNFX1hLUEhZUywKLQkJCQkJCSAgIExBQklfQUREUl9JTl9CT09UTE9BREVSICsKLQkJCQkJCSAgIG9mZnNldG9mCi0JCQkJCQkgICAoc3RydWN0IGxpbnV4X2FwcF9ib290X2luZm8sCi0JCQkJCQkgICAgYXZhaWxfY29yZW1hc2spKSk7CisJCXN0cnVjdCBsaW51eF9hcHBfYm9vdF9pbmZvICpsYWJpOworCisJCWxhYmkgPSAoc3RydWN0IGxpbnV4X2FwcF9ib290X2luZm8gKilQSFlTX1RPX1hLU0VHX0NBQ0hFRChMQUJJX0FERFJfSU5fQk9PVExPQURFUik7CisKKwkJbGFiaS0+YXZhaWxfY29yZW1hc2sgfD0gbWFzazsKKwkJbmV3X21hc2sgPSBsYWJpLT5hdmFpbF9jb3JlbWFzazsKIAl9IGVsc2UgewkJICAgICAgIC8qIGFsdGVybmF0aXZlLCBhbHJlYWR5IGluaXRpYWxpemVkICovCi0JICAgICAgIGF2YWlsX2NvcmVtYXNrID0KLQkJICAgY3ZteF9yZWFkNjRfdWludDMyKENWTVhfQUREX1NFRyhDVk1YX01JUFNfU1BBQ0VfWEtQSFlTLAotCQkJCQkJICAgYmxvY2tfZGVzYy0+YmFzZV9hZGRyICsKLQkJCQkJCSAgQVZBSUxfQ09SRU1BU0tfT0ZGU0VUX0lOX0xJTlVYX0FQUF9CT09UX0JMT0NLKSk7CisJCXVpbnQzMl90ICpwID0gKHVpbnQzMl90ICopUEhZU19UT19YS1NFR19DQUNIRUQoYmxvY2tfZGVzYy0+YmFzZV9hZGRyICsKKwkJCQkJCQkgICAgICAgQVZBSUxfQ09SRU1BU0tfT0ZGU0VUX0lOX0xJTlVYX0FQUF9CT09UX0JMT0NLKTsKKwkJKnAgfD0gbWFzazsKKwkJbmV3X21hc2sgPSAqcDsKIAl9CiAKLQlhdmFpbF9jb3JlbWFzayB8PSAxIDw8IGNvcmVpZDsKLQotCS8qIFNldHRpbmcgYXZhaWxfY29yZW1hc2sgZm9yIGJvb3RvY3QgYmluYXJ5ICovCi0JaWYgKCFibG9ja19kZXNjKSB7Ci0JCWN2bXhfd3JpdGU2NF91aW50MzIoQ1ZNWF9BRERfU0VHKENWTVhfTUlQU19TUEFDRV9YS1BIWVMsCi0JCQkJCQlMQUJJX0FERFJfSU5fQk9PVExPQURFUiArCi0JCQkJCQlvZmZzZXRvZihzdHJ1Y3QgbGludXhfYXBwX2Jvb3RfaW5mbywKLQkJCQkJCQkgYXZhaWxfY29yZW1hc2spKSwKLQkJCQkgICBhdmFpbF9jb3JlbWFzayk7Ci0JfSBlbHNlIHsKLQkJY3ZteF93cml0ZTY0X3VpbnQzMihDVk1YX0FERF9TRUcoQ1ZNWF9NSVBTX1NQQUNFX1hLUEhZUywKLQkJCQkJCWJsb2NrX2Rlc2MtPmJhc2VfYWRkciArCi0JCQkJCQlBVkFJTF9DT1JFTUFTS19PRkZTRVRfSU5fTElOVVhfQVBQX0JPT1RfQkxPQ0spLAotCQkJCSAgIGF2YWlsX2NvcmVtYXNrKTsKLQl9Ci0KLQlwcl9pbmZvKCJSZXNldCBjb3JlICVkLiBBdmFpbGFibGUgQ29yZW1hc2sgPSAleFxuIiwgY29yZWlkLAotCQlhdmFpbF9jb3JlbWFzayk7CisJcHJfaW5mbygiUmVzZXQgY29yZSAlZC4gQXZhaWxhYmxlIENvcmVtYXNrID0gMHgleCBcbiIsIGNvcmVpZCwgbmV3X21hc2spOworCW1iKCk7CiAJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfUFBfUlNULCAxIDw8IGNvcmVpZCk7CiAJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfUFBfUlNULCAwKTsKIH0KIAogdm9pZCBwbGF5X2RlYWQodm9pZCkKIHsKLQlpbnQgY29yZWlkID0gY3ZteF9nZXRfY29yZV9udW0oKTsKKwlpbnQgY3B1ID0gY3B1X251bWJlcl9tYXAoY3ZteF9nZXRfY29yZV9udW0oKSk7CiAKIAlpZGxlX3Rhc2tfZXhpdCgpOwogCW9jdGVvbl9wcm9jZXNzb3JfYm9vdCA9IDB4ZmY7Ci0JcGVyX2NwdShjcHVfc3RhdGUsIGNvcmVpZCkgPSBDUFVfREVBRDsKKwlwZXJfY3B1KGNwdV9zdGF0ZSwgY3B1KSA9IENQVV9ERUFEOworCisJbWIoKTsKIAogCXdoaWxlICgxKQkvKiBjb3JlIHdpbGwgYmUgcmVzZXQgaGVyZSAqLwogCQk7CkBAIC0zNDQsMjkgKzM1MiwyNyBAQAogCWtlcm5lbF9lbnRyeSgwLCAwLCAwKTsgIC8qIHNldCBhMiA9IDAgZm9yIHNlY29uZGFyeSBjb3JlICovCiB9CiAKLWludCBvY3Rlb25fdXBkYXRlX2Jvb3RfdmVjdG9yKHVuc2lnbmVkIGludCBjcHUpCitzdGF0aWMgaW50IG9jdGVvbl91cGRhdGVfYm9vdF92ZWN0b3IodW5zaWduZWQgaW50IGNwdSkKIHsKIAogCWludCBjb3JlaWQgPSBjcHVfbG9naWNhbF9tYXAoY3B1KTsKLQl1bnNpZ25lZCBpbnQgYXZhaWxfY29yZW1hc2s7Ci0Jc3RydWN0IGN2bXhfYm9vdG1lbV9uYW1lZF9ibG9ja19kZXNjICpibG9ja19kZXNjOworCXVpbnQzMl90IGF2YWlsX2NvcmVtYXNrOworCWNvbnN0IHN0cnVjdCBjdm14X2Jvb3RtZW1fbmFtZWRfYmxvY2tfZGVzYyAqYmxvY2tfZGVzYzsKIAlzdHJ1Y3QgYm9vdF9pbml0X3ZlY3RvciAqYm9vdF92ZWN0ID0KLQkJKHN0cnVjdCBib290X2luaXRfdmVjdG9yICopIGN2bXhfcGh5c190b19wdHIoMHgwICsKLQkJCQkJCSAgQk9PVExPQURFUl9CT09UX1ZFQ1RPUik7CisJCShzdHJ1Y3QgYm9vdF9pbml0X3ZlY3RvciAqKVBIWVNfVE9fWEtTRUdfQ0FDSEVEKEJPT1RMT0FERVJfQk9PVF9WRUNUT1IpOwogCiAJYmxvY2tfZGVzYyA9IGN2bXhfYm9vdG1lbV9maW5kX25hbWVkX2Jsb2NrKExJTlVYX0FQUF9CT09UX0JMT0NLX05BTUUpOwogCiAJaWYgKCFibG9ja19kZXNjKSB7Ci0JCWF2YWlsX2NvcmVtYXNrID0KLQkJCWN2bXhfcmVhZDY0X3VpbnQzMihDVk1YX0FERF9TRUcoQ1ZNWF9NSVBTX1NQQUNFX1hLUEhZUywKLQkJCQkJICAgTEFCSV9BRERSX0lOX0JPT1RMT0FERVIgKwotCQkJCQkJb2Zmc2V0b2Yoc3RydWN0IGxpbnV4X2FwcF9ib290X2luZm8sCi0JCQkJCQlhdmFpbF9jb3JlbWFzaykpKTsKKwkJc3RydWN0IGxpbnV4X2FwcF9ib290X2luZm8gKmxhYmk7CisKKwkJbGFiaSA9IChzdHJ1Y3QgbGludXhfYXBwX2Jvb3RfaW5mbyAqKVBIWVNfVE9fWEtTRUdfQ0FDSEVEKExBQklfQUREUl9JTl9CT09UTE9BREVSKTsKKworCQlhdmFpbF9jb3JlbWFzayA9IGxhYmktPmF2YWlsX2NvcmVtYXNrOworCQlsYWJpLT5hdmFpbF9jb3JlbWFzayAmPSB+KDEgPDwgY29yZWlkKTsKIAl9IGVsc2UgewkJICAgICAgIC8qIGFsdGVybmF0aXZlLCBhbHJlYWR5IGluaXRpYWxpemVkICovCi0JICAgICAgIGF2YWlsX2NvcmVtYXNrID0KLQkJICAgY3ZteF9yZWFkNjRfdWludDMyKENWTVhfQUREX1NFRyhDVk1YX01JUFNfU1BBQ0VfWEtQSFlTLAotCQkJCQkJICAgYmxvY2tfZGVzYy0+YmFzZV9hZGRyICsKLQkJCQkJCSAgIEFWQUlMX0NPUkVNQVNLX09GRlNFVF9JTl9MSU5VWF9BUFBfQk9PVF9CTE9DSykpOworCQlhdmFpbF9jb3JlbWFzayA9ICoodWludDMyX3QgKilQSFlTX1RPX1hLU0VHX0NBQ0hFRCgKKwkJCWJsb2NrX2Rlc2MtPmJhc2VfYWRkciArIEFWQUlMX0NPUkVNQVNLX09GRlNFVF9JTl9MSU5VWF9BUFBfQk9PVF9CTE9DSyk7CiAJfQogCiAJaWYgKCEoYXZhaWxfY29yZW1hc2sgJiAoMSA8PCBjb3JlaWQpKSkgewpAQCAtMzc3LDkgKzM4Myw5IEBACiAKIAlib290X3ZlY3RbY29yZWlkXS5hcHBfc3RhcnRfZnVuY19hZGRyID0KIAkJKHVpbnQzMl90KSAodW5zaWduZWQgbG9uZykgc3RhcnRfYWZ0ZXJfcmVzZXQ7Ci0JYm9vdF92ZWN0W2NvcmVpZF0uY29kZV9hZGRyID0gSW5pdFRMQlN0YXJ0X2FkZHI7CisJYm9vdF92ZWN0W2NvcmVpZF0uY29kZV9hZGRyID0gb2N0ZW9uX2Jvb3Rsb2FkZXJfZW50cnlfYWRkcjsKIAotCUNWTVhfU1lOQzsKKwltYigpOwogCiAJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfTk1JLCAoMSA8PCBjb3JlaWQpICYgYXZhaWxfY29yZW1hc2spOwogCkBAIC00MDUsMTcgKzQxMSwxMSBAQAogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19jcHVpbml0ZGF0YSBvY3Rlb25fY3B1X25vdGlmaWVyID0gewotCS5ub3RpZmllcl9jYWxsID0gb2N0ZW9uX2NwdV9jYWxsYmFjaywKLX07Ci0KIHN0YXRpYyBpbnQgX19jcHVpbml0IHJlZ2lzdGVyX2Nhdml1bV9ub3RpZmllcih2b2lkKQogewotCXJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmb2N0ZW9uX2NwdV9ub3RpZmllcik7Ci0KKwlob3RjcHVfbm90aWZpZXIob2N0ZW9uX2NwdV9jYWxsYmFjaywgMCk7CiAJcmV0dXJuIDA7CiB9Ci0KIGxhdGVfaW5pdGNhbGwocmVnaXN0ZXJfY2F2aXVtX25vdGlmaWVyKTsKIAogI2VuZGlmICAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb2JhbHQvTWFrZWZpbGUgYi9hcmNoL21pcHMvY29iYWx0L01ha2VmaWxlCmluZGV4IDIzNzkyNjIuLjYxYTMzNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb2JhbHQvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2NvYmFsdC9NYWtlZmlsZQpAQCAtNyw1ICs3LDMgQEAKIG9iai0kKENPTkZJR19QQ0kpCQkrPSBwY2kubwogb2JqLSQoQ09ORklHX0VBUkxZX1BSSU5USykJKz0gY29uc29sZS5vCiBvYmotJChDT05GSUdfTVREX1BIWVNNQVApCSs9IG10ZC5vCi0KLUVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29iYWx0L1BsYXRmb3JtIGIvYXJjaC9taXBzL2NvYmFsdC9QbGF0Zm9ybQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDEyM2VmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2NvYmFsdC9QbGF0Zm9ybQpAQCAtMCwwICsxLDYgQEAKKyMKKyMgQ29iYWx0IFNlcnZlcgorIworcGxhdGZvcm0tJChDT05GSUdfTUlQU19DT0JBTFQpCSs9IGNvYmFsdC8KK2NmbGFncy0kKENPTkZJR19NSVBTX0NPQkFMVCkJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWNvYmFsdAorbG9hZC0kKENPTkZJR19NSVBTX0NPQkFMVCkJKz0gMHhmZmZmZmZmZjgwMDgwMDAwCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjEwMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMDAwX2RlZmNvbmZpZwppbmRleCBmNjZkNDA2Li4zYTllYzZjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjEwMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTAwMF9kZWZjb25maWcKQEAgLTgsNyArOCw3IEBACiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCi1DT05GSUdfTUFDSF9BTENIRU1ZPXkKK0NPTkZJR19NSVBTX0FMQ0hFTVk9eQogIyBDT05GSUdfQVI3IGlzIG5vdCBzZXQKICMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAogIyBDT05GSUdfQkNNNjNYWCBpcyBub3Qgc2V0CkBAIC02NCw3ICs2NCw2IEBACiAjIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogQ09ORklHX1NPQ19BVTEwMDA9eQotQ09ORklHX1NPQ19BVTFYMDA9eQogQ09ORklHX0xPT05HU09OX1VBUlRfQkFTRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMTAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTEwMF9kZWZjb25maWcKaW5kZXggYWJiOWE1OC4uNDU4OWI4NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMTAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kYjExMDBfZGVmY29uZmlnCkBAIC04LDcgKzgsNyBAQAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwotQ09ORklHX01BQ0hfQUxDSEVNWT15CitDT05GSUdfTUlQU19BTENIRU1ZPXkKICMgQ09ORklHX0FSNyBpcyBub3Qgc2V0CiAjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JDTTYzWFggaXMgbm90IHNldApAQCAtNjQsNyArNjQsNiBAQAogIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKIENPTkZJR19TT0NfQVUxMTAwPXkKLUNPTkZJR19TT0NfQVUxWDAwPXkKIENPTkZJR19MT09OR1NPTl9VQVJUX0JBU0U9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjEyMDBfZGVmY29uZmlnCmluZGV4IDk5MWMyMGEuLjk5NTBmMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMjAwX2RlZmNvbmZpZwpAQCAtOCw3ICs4LDcgQEAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKLUNPTkZJR19NQUNIX0FMQ0hFTVk9eQorQ09ORklHX01JUFNfQUxDSEVNWT15CiAjIENPTkZJR19BUjcgaXMgbm90IHNldAogIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKQEAgLTY0LDcgKzY0LDYgQEAKICMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiBDT05GSUdfU09DX0FVMTIwMD15Ci1DT05GSUdfU09DX0FVMVgwMD15CiBDT05GSUdfTE9PTkdTT05fVUFSVF9CQVNFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTAwX2RlZmNvbmZpZwppbmRleCA1NDI0YzkxLi4zNDZhZTYzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTUwMF9kZWZjb25maWcKQEAgLTgsNyArOCw3IEBACiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCi1DT05GSUdfTUFDSF9BTENIRU1ZPXkKK0NPTkZJR19NSVBTX0FMQ0hFTVk9eQogIyBDT05GSUdfQVI3IGlzIG5vdCBzZXQKICMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAogIyBDT05GSUdfQkNNNjNYWCBpcyBub3Qgc2V0CkBAIC02NCw3ICs2NCw2IEBACiAjIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogQ09ORklHX1NPQ19BVTE1MDA9eQotQ09ORklHX1NPQ19BVTFYMDA9eQogQ09ORklHX0xPT05HU09OX1VBUlRfQkFTRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTUwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTU1MF9kZWZjb25maWcKaW5kZXggOTQ5YjZkYy4uMTBlYWZiOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTUwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kYjE1NTBfZGVmY29uZmlnCkBAIC04LDcgKzgsNyBAQAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwotQ09ORklHX01BQ0hfQUxDSEVNWT15CitDT05GSUdfTUlQU19BTENIRU1ZPXkKICMgQ09ORklHX0FSNyBpcyBub3Qgc2V0CiAjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JDTTYzWFggaXMgbm90IHNldApAQCAtNjQsNyArNjQsNiBAQAogIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKIENPTkZJR19TT0NfQVUxNTUwPXkKLUNPTkZJR19TT0NfQVUxWDAwPXkKIENPTkZJR19MT09OR1NPTl9VQVJUX0JBU0U9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2dwcl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9ncHJfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZTJlNjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvY29uZmlncy9ncHJfZGVmY29uZmlnCkBAIC0wLDAgKzEsMjA2MCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM1LXJjNgorIyBGcmkgSnVsIDIzIDE5OjI4OjUyIDIwMTAKKyMKK0NPTkZJR19NSVBTPXkKKworIworIyBNYWNoaW5lIHNlbGVjdGlvbgorIworQ09ORklHX01JUFNfQUxDSEVNWT15CisjIENPTkZJR19BUjcgaXMgbm90IHNldAorIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAorIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT09OR1NPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FQ19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjUgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAorIyBDT05GSUdfUE1DX01TUCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJUViBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDM5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDQ5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUlLUk9USUtfUkI1MzIgaXMgbm90IHNldAorIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1NJTVVMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1JFRkVSRU5DRV9CT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfQUxDSEVNWV9HUElPSU5UX0FVMTAwMD15CisjIENPTkZJR19BTENIRU1ZX0dQSU9fSU5ESVJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKK0NPTkZJR19NSVBTX0dQUj15CitDT05GSUdfU09DX0FVMTU1MD15CitDT05GSUdfTE9PTkdTT05fVUFSVF9CQVNFPXkKKyMgQ09ORklHX0xPT05HU09OX01DMTQ2ODE4IGlzIG5vdCBzZXQKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfT1BST0ZJTEU9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfQ0VWVF9SNEtfTElCPXkKK0NPTkZJR19DU1JDX1I0S19MSUI9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CitDT05GSUdfTkVFRF9ETUFfTUFQX1NUQVRFPXkKK0NPTkZJR19TWVNfSEFTX0VBUkxZX1BSSU5USz15CitDT05GSUdfTUlQU19ESVNBQkxFX09CU09MRVRFX0lERT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfR1BJTz15CisjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15CitDT05GSUdfSVJRX0NQVT15CitDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01CisKKyMKKyMgQ1BVIHNlbGVjdGlvbgorIworIyBDT05GSUdfQ1BVX0xPT05HU09OMkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0xPT05HU09OMkYgaXMgbm90IHNldAorQ09ORklHX0NQVV9NSVBTMzJfUjE9eQorIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9NSVBTNjRfUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1IzMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9UWDM5WFggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjQzMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I0WDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjU1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I2MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9ORVZBREEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVD15CitDT05GSUdfU1lTX0hBU19DUFVfTUlQUzMyX1IxPXkKK0NPTkZJR19DUFVfTUlQUzMyPXkKK0NPTkZJR19DUFVfTUlQU1IxPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19IQVJEV0FSRV9XQVRDSFBPSU5UUz15CisKKyMKKyMgS2VybmVsIHR5cGUKKyMKK0NPTkZJR18zMkJJVD15CisjIENPTkZJR182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8zMktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKK0NPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKKyMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CitDT05GSUdfNjRCSVRfUEhZU19BRERSPXkKK0NPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19DUFVfSEFTX1NZTkM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfVElDS19PTkVTSE9UPXkKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MjUwCisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPXkKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19DUk9TU19DT01QSUxFPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCisjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CitDT05GSUdfUkVMQVk9eQorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfUENTUEtSX1BMQVRGT1JNPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorIyBDT05GSUdfT1BST0ZJTEUgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCREFGPXkKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKKyMKK0NPTkZJR19IV19IQVNfUENJPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAorQ09ORklHX01NVT15CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9NSVNDPW0KK0NPTkZJR19UUkFEX1NJR05BTFM9eQorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0FTS19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15CitDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKK0NPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfTFJPPXkKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19TRUNNQVJLPXkKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQorQ09ORklHX0JSSURHRV9ORVRGSUxURVI9eQorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCisjIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1RQUk9YWSBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQorCisjCisjIFh0YWJsZXMgY29tYmluZWQgbW9kdWxlcworIworQ09ORklHX05FVEZJTFRFUl9YVF9NQVJLPW0KKworIworIyBYdGFibGVzIHRhcmdldHMKKyMKK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSEw9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9MRUQgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVEVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfU0VDTUFSSz1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQIGlzIG5vdCBzZXQKKworIworIyBYdGFibGVzIG1hdGNoZXMKKyMKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITD1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRSBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1NGIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUiBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BIWVNERVY9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1QgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9WUz1tCisjIENPTkZJR19JUF9WU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSVBfVlNfVEFCX0JJVFM9MTIKKworIworIyBJUFZTIHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0CisjCitDT05GSUdfSVBfVlNfUFJPVE9fVENQPXkKK0NPTkZJR19JUF9WU19QUk9UT19VRFA9eQorQ09ORklHX0lQX1ZTX1BST1RPX0FIX0VTUD15CitDT05GSUdfSVBfVlNfUFJPVE9fRVNQPXkKK0NPTkZJR19JUF9WU19QUk9UT19BSD15CisjIENPTkZJR19JUF9WU19QUk9UT19TQ1RQIGlzIG5vdCBzZXQKKworIworIyBJUFZTIHNjaGVkdWxlcgorIworQ09ORklHX0lQX1ZTX1JSPW0KK0NPTkZJR19JUF9WU19XUlI9bQorQ09ORklHX0lQX1ZTX0xDPW0KK0NPTkZJR19JUF9WU19XTEM9bQorQ09ORklHX0lQX1ZTX0xCTEM9bQorQ09ORklHX0lQX1ZTX0xCTENSPW0KK0NPTkZJR19JUF9WU19ESD1tCitDT05GSUdfSVBfVlNfU0g9bQorQ09ORklHX0lQX1ZTX1NFRD1tCitDT05GSUdfSVBfVlNfTlE9bQorCisjCisjIElQVlMgYXBwbGljYXRpb24gaGVscGVyCisjCitDT05GSUdfSVBfVlNfRlRQPW0KKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX05GX0RFRlJBR19JUFY0IGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9RVUVVRT1tCitDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BSD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQorQ09ORklHX0lQX05GX0ZJTFRFUj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQorQ09ORklHX0lQX05GX01BTkdMRT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tCitDT05GSUdfSVBfTkZfUkFXPW0KK0NPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQorQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCitDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCisKKyMKKyMgREVDbmV0OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0RFQ05FVF9ORl9HUkFCVUxBVE9SPW0KK0NPTkZJR19CUklER0VfTkZfRUJUQUJMRVM9bQorQ09ORklHX0JSSURHRV9FQlRfQlJPVVRFPW0KK0NPTkZJR19CUklER0VfRUJUX1RfRklMVEVSPW0KK0NPTkZJR19CUklER0VfRUJUX1RfTkFUPW0KK0NPTkZJR19CUklER0VfRUJUXzgwMl8zPW0KK0NPTkZJR19CUklER0VfRUJUX0FNT05HPW0KK0NPTkZJR19CUklER0VfRUJUX0FSUD1tCitDT05GSUdfQlJJREdFX0VCVF9JUD1tCitDT05GSUdfQlJJREdFX0VCVF9MSU1JVD1tCitDT05GSUdfQlJJREdFX0VCVF9NQVJLPW0KK0NPTkZJR19CUklER0VfRUJUX1BLVFRZUEU9bQorQ09ORklHX0JSSURHRV9FQlRfU1RQPW0KK0NPTkZJR19CUklER0VfRUJUX1ZMQU49bQorQ09ORklHX0JSSURHRV9FQlRfQVJQUkVQTFk9bQorQ09ORklHX0JSSURHRV9FQlRfRE5BVD1tCitDT05GSUdfQlJJREdFX0VCVF9NQVJLX1Q9bQorQ09ORklHX0JSSURHRV9FQlRfUkVESVJFQ1Q9bQorQ09ORklHX0JSSURHRV9FQlRfU05BVD1tCitDT05GSUdfQlJJREdFX0VCVF9MT0c9bQorQ09ORklHX0JSSURHRV9FQlRfVUxPRz1tCisjIENPTkZJR19CUklER0VfRUJUX05GTE9HIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9EQ0NQPW0KK0NPTkZJR19JTkVUX0RDQ1BfRElBRz1tCisKKyMKKyMgRENDUCBDQ0lEcyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9EQ0NQX0NDSUQyX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9EQ0NQX0NDSUQzPXkKKyMgQ09ORklHX0lQX0RDQ1BfQ0NJRDNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lQX0RDQ1BfQ0NJRDNfUlRPPTEwMAorQ09ORklHX0lQX0RDQ1BfVEZSQ19MSUI9eQorQ09ORklHX0lQX1NDVFA9bQorIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CitDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19SRFMgaXMgbm90IHNldAorQ09ORklHX1RJUEM9bQorIyBDT05GSUdfVElQQ19BRFZBTkNFRCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19BVE09eQorQ09ORklHX0FUTV9DTElQPXkKKyMgQ09ORklHX0FUTV9DTElQX05PX0lDTVAgaXMgbm90IHNldAorQ09ORklHX0FUTV9MQU5FPW0KK0NPTkZJR19BVE1fTVBPQT1tCitDT05GSUdfQVRNX0JSMjY4ND1tCisjIENPTkZJR19BVE1fQlIyNjg0X0lQRklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0wyVFAgaXMgbm90IHNldAorQ09ORklHX1NUUD1tCitDT05GSUdfQlJJREdFPW0KK0NPTkZJR19CUklER0VfSUdNUF9TTk9PUElORz15CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKK0NPTkZJR19WTEFOXzgwMjFRPW0KKyMgQ09ORklHX1ZMQU5fODAyMVFfR1ZSUCBpcyBub3Qgc2V0CitDT05GSUdfREVDTkVUPW0KKyMgQ09ORklHX0RFQ05FVF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0xMQz1tCitDT05GSUdfTExDMj1tCitDT05GSUdfSVBYPW0KKyMgQ09ORklHX0lQWF9JTlRFUk4gaXMgbm90IHNldAorQ09ORklHX0FUQUxLPW0KK0NPTkZJR19ERVZfQVBQTEVUQUxLPW0KK0NPTkZJR19JUEREUD1tCitDT05GSUdfSVBERFBfRU5DQVA9eQorQ09ORklHX0lQRERQX0RFQ0FQPXkKK0NPTkZJR19YMjU9bQorQ09ORklHX0xBUEI9bQorQ09ORklHX0VDT05FVD1tCitDT05GSUdfRUNPTkVUX0FVTlVEUD15CitDT05GSUdfRUNPTkVUX05BVElWRT15CitDT05GSUdfV0FOX1JPVVRFUj1tCisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1NDSEVEPXkKKworIworIyBRdWV1ZWluZy9TY2hlZHVsaW5nCisjCitDT05GSUdfTkVUX1NDSF9DQlE9bQorQ09ORklHX05FVF9TQ0hfSFRCPW0KK0NPTkZJR19ORVRfU0NIX0hGU0M9bQorQ09ORklHX05FVF9TQ0hfQVRNPW0KK0NPTkZJR19ORVRfU0NIX1BSSU89bQorIyBDT05GSUdfTkVUX1NDSF9NVUxUSVEgaXMgbm90IHNldAorQ09ORklHX05FVF9TQ0hfUkVEPW0KK0NPTkZJR19ORVRfU0NIX1NGUT1tCitDT05GSUdfTkVUX1NDSF9URVFMPW0KK0NPTkZJR19ORVRfU0NIX1RCRj1tCitDT05GSUdfTkVUX1NDSF9HUkVEPW0KK0NPTkZJR19ORVRfU0NIX0RTTUFSSz1tCitDT05GSUdfTkVUX1NDSF9ORVRFTT1tCisjIENPTkZJR19ORVRfU0NIX0RSUiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1NDSF9JTkdSRVNTPW0KKworIworIyBDbGFzc2lmaWNhdGlvbgorIworQ09ORklHX05FVF9DTFM9eQorQ09ORklHX05FVF9DTFNfQkFTSUM9bQorQ09ORklHX05FVF9DTFNfVENJTkRFWD1tCitDT05GSUdfTkVUX0NMU19ST1VURTQ9bQorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorQ09ORklHX05FVF9DTFNfRlc9bQorQ09ORklHX05FVF9DTFNfVTMyPW0KKyMgQ09ORklHX0NMU19VMzJfUEVSRiBpcyBub3Qgc2V0CitDT05GSUdfQ0xTX1UzMl9NQVJLPXkKK0NPTkZJR19ORVRfQ0xTX1JTVlA9bQorQ09ORklHX05FVF9DTFNfUlNWUDY9bQorIyBDT05GSUdfTkVUX0NMU19GTE9XIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRU1BVENIPXkKK0NPTkZJR19ORVRfRU1BVENIX1NUQUNLPTMyCitDT05GSUdfTkVUX0VNQVRDSF9DTVA9bQorQ09ORklHX05FVF9FTUFUQ0hfTkJZVEU9bQorQ09ORklHX05FVF9FTUFUQ0hfVTMyPW0KK0NPTkZJR19ORVRfRU1BVENIX01FVEE9bQorQ09ORklHX05FVF9FTUFUQ0hfVEVYVD1tCitDT05GSUdfTkVUX0NMU19BQ1Q9eQorQ09ORklHX05FVF9BQ1RfUE9MSUNFPXkKKyMgQ09ORklHX05FVF9BQ1RfR0FDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQUNUX01JUlJFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQUNUX0lQVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQUNUX05BVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQUNUX1BFRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9BQ1RfU0lNUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQUNUX1NLQkVESVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19JTkQgaXMgbm90IHNldAorQ09ORklHX05FVF9TQ0hfRklGTz15CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworQ09ORklHX05FVF9QS1RHRU49bQorQ09ORklHX0hBTVJBRElPPXkKKworIworIyBQYWNrZXQgUmFkaW8gcHJvdG9jb2xzCisjCitDT05GSUdfQVgyNT1tCisjIENPTkZJR19BWDI1X0RBTUFfU0xBVkUgaXMgbm90IHNldAorQ09ORklHX05FVFJPTT1tCitDT05GSUdfUk9TRT1tCisKKyMKKyMgQVguMjUgbmV0d29yayBkZXZpY2UgZHJpdmVycworIworQ09ORklHX01LSVNTPW0KK0NPTkZJR182UEFDSz1tCitDT05GSUdfQlBRRVRIRVI9bQorQ09ORklHX0JBWUNPTV9TRVJfRkRYPW0KK0NPTkZJR19CQVlDT01fU0VSX0hEWD1tCitDT05GSUdfWUFNPW0KKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19GSUJfUlVMRVM9eQorQ09ORklHX1dJUkVMRVNTPXkKK0NPTkZJR19XRVhUX0NPUkU9eQorQ09ORklHX1dFWFRfUFJPQz15CitDT05GSUdfQ0ZHODAyMTE9eQorIyBDT05GSUdfTkw4MDIxMV9URVNUTU9ERSBpcyBub3Qgc2V0CisjIENPTkZJR19DRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1MgaXMgbm90IHNldAorIyBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTPXkKKyMgQ09ORklHX0NGRzgwMjExX0RFQlVHRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0ZHODAyMTFfSU5URVJOQUxfUkVHREIgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX1dFWFQ9eQorQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTE9eQorQ09ORklHX01BQzgwMjExX0hBU19SQz15CisjIENPTkZJR19NQUM4MDIxMV9SQ19QSUQgaXMgbm90IHNldAorQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMPXkKKyMgQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfUElEIGlzIG5vdCBzZXQKK0NPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMPXkKK0NPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUPSJtaW5zdHJlbCIKKyMgQ09ORklHX01BQzgwMjExX01FU0ggaXMgbm90IHNldAorQ09ORklHX01BQzgwMjExX0xFRFM9eQorIyBDT05GSUdfTUFDODAyMTFfREVCVUdGUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMV9ERUJVR19NRU5VIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0FJRiBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIiCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTV9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CitDT05GSUdfTVREX1JBTT1tCisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKK0NPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0dQSU9fQUREUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTY1NTM2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CitDT05GSUdfVElGTV9DT1JFPW0KK0NPTkZJR19USUZNXzdYWDE9bQorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfU0NTSV9NT0Q9bQorIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST1tCitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTkVUTElOSz15CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9bQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CitDT05GSUdfQ0hSX0RFVl9TRz1tCisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9NVUxUSV9MVU49eQorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9HR0lORz15CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKK0NPTkZJR19TQ1NJX1NQSV9BVFRSUz1tCitDT05GSUdfU0NTSV9GQ19BVFRSUz1tCitDT05GSUdfU0NTSV9JU0NTSV9BVFRSUz1tCitDT05GSUdfU0NTSV9TQVNfQVRUUlM9bQorQ09ORklHX1NDU0lfU0FTX0xJQlNBUz1tCitDT05GSUdfU0NTSV9TQVNfSE9TVF9TTVA9eQorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0lGQiBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfTUFSVkVMTF9QSFk9bQorQ09ORklHX0RBVklDT01fUEhZPW0KK0NPTkZJR19RU0VNSV9QSFk9bQorQ09ORklHX0xYVF9QSFk9bQorQ09ORklHX0NJQ0FEQV9QSFk9bQorQ09ORklHX1ZJVEVTU0VfUEhZPW0KK0NPTkZJR19TTVNDX1BIWT1tCisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTUlDUkVMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKK0NPTkZJR19NSVBTX0FVMVgwMF9FTkVUPXkKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOPXkKKyMgQ09ORklHX0xJQkVSVEFTX1RISU5GSVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUNzZDNTBYX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9STkRJU19XTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUTDgxODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRMODE4NyBpcyBub3Qgc2V0CisjIENPTkZJR19BRE04MjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExX0hXU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01XTDhLIGlzIG5vdCBzZXQKK0NPTkZJR19BVEhfQ09NTU9OPXkKK0NPTkZJR19BVEhfREVCVUc9eQorQ09ORklHX0FUSDVLPXkKK0NPTkZJR19BVEg1S19ERUJVRz15CisjIENPTkZJR19BVEg5SyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEg5S19IVEMgaXMgbm90IHNldAorIyBDT05GSUdfQVI5MTcwX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDMgaXMgbm90IHNldAorIyBDT05GSUdfQjQzTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFcyMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVzIyMDAgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJFUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRVJNRVMgaXMgbm90IHNldAorIyBDT05GSUdfUDU0X0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19SVDJYMDAgaXMgbm90IHNldAorIyBDT05GSUdfV0wxMlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1pEMTIxMVJXIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVBIRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19XQU49eQorQ09ORklHX0xBTk1FRElBPW0KK0NPTkZJR19IRExDPW0KK0NPTkZJR19IRExDX1JBVz1tCitDT05GSUdfSERMQ19SQVdfRVRIPW0KK0NPTkZJR19IRExDX0NJU0NPPW0KK0NPTkZJR19IRExDX0ZSPW0KK0NPTkZJR19IRExDX1BQUD1tCitDT05GSUdfSERMQ19YMjU9bQorQ09ORklHX1BDSTIwMFNZTj1tCitDT05GSUdfV0FOWEw9bQorIyBDT05GSUdfUEMzMDBUT08gaXMgbm90IHNldAorQ09ORklHX0ZBUlNZTkM9bQorQ09ORklHX0RTQ0M0PW0KK0NPTkZJR19EU0NDNF9QQ0lTWU5DPXkKK0NPTkZJR19EU0NDNF9QQ0lfUlNUPXkKK0NPTkZJR19ETENJPW0KK0NPTkZJR19ETENJX01BWD04CitDT05GSUdfV0FOX1JPVVRFUl9EUklWRVJTPW0KK0NPTkZJR19DWUNMQURFU19TWU5DPW0KK0NPTkZJR19DWUNMT01YX1gyNT15CitDT05GSUdfTEFQQkVUSEVSPW0KK0NPTkZJR19YMjVfQVNZPW0KK0NPTkZJR19BVE1fRFJJVkVSUz15CisjIENPTkZJR19BVE1fRFVNTVkgaXMgbm90IHNldAorQ09ORklHX0FUTV9UQ1A9bQorQ09ORklHX0FUTV9MQU5BST1tCitDT05GSUdfQVRNX0VOST1tCisjIENPTkZJR19BVE1fRU5JX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9FTklfVFVORV9CVVJTVCBpcyBub3Qgc2V0CitDT05GSUdfQVRNX0ZJUkVTVFJFQU09bQorQ09ORklHX0FUTV9aQVRNPW0KKyMgQ09ORklHX0FUTV9aQVRNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19BVE1fTklDU1RBUj1tCisjIENPTkZJR19BVE1fTklDU1RBUl9VU0VfU1VOSSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fTklDU1RBUl9VU0VfSURUNzcxMDUgaXMgbm90IHNldAorQ09ORklHX0FUTV9JRFQ3NzI1Mj1tCisjIENPTkZJR19BVE1fSURUNzcyNTJfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0lEVDc3MjUyX1JDVl9BTEwgaXMgbm90IHNldAorQ09ORklHX0FUTV9JRFQ3NzI1Ml9VU0VfU1VOST15CitDT05GSUdfQVRNX0FNQkFTU0FET1I9bQorIyBDT05GSUdfQVRNX0FNQkFTU0FET1JfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0FUTV9IT1JJWk9OPW0KKyMgQ09ORklHX0FUTV9IT1JJWk9OX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19BVE1fSUE9bQorIyBDT05GSUdfQVRNX0lBX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19BVE1fRk9SRTIwMEU9bQorIyBDT05GSUdfQVRNX0ZPUkUyMDBFX1VTRV9UQVNLTEVUIGlzIG5vdCBzZXQKK0NPTkZJR19BVE1fRk9SRTIwMEVfVFhfUkVUUlk9MTYKK0NPTkZJR19BVE1fRk9SRTIwMEVfREVCVUc9MAorQ09ORklHX0FUTV9IRT1tCitDT05GSUdfQVRNX0hFX1VTRV9TVU5JPXkKKyMgQ09ORklHX0FUTV9TT0xPUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorQ09ORklHX1BQUF9NVUxUSUxJTks9eQorQ09ORklHX1BQUF9GSUxURVI9eQorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorQ09ORklHX1BQUF9NUFBFPW0KK0NPTkZJR19QUFBPRT1tCitDT05GSUdfUFBQT0FUTT1tCitDT05GSUdfU0xJUD1tCitDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKK0NPTkZJR19TTEhDPW0KK0NPTkZJR19TTElQX1NNQVJUPXkKK0NPTkZJR19TTElQX01PREVfU0xJUDY9eQorQ09ORklHX05FVF9GQz15CitDT05GSUdfTkVUQ09OU09MRT1tCisjIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgbm90IHNldAorQ09ORklHX05FVFBPTEw9eQorIyBDT05GSUdfTkVUUE9MTF9UUkFQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05fR1NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfQUxURVJBX0pUQUdVQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9BTFRFUkFfVUFSVCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorIyBDT05GSUdfUkFNT09QUyBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKK0NPTkZJR19JMkNfQUxHT0JJVD15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX0FVMTU1MCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0dQSU89eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1hJTElOWCBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX0lUODc2MUUgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TQ0ggaXMgbm90IHNldAorCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0FEUDU1ODggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fQ1M1NTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1JEQzMyMVggaXMgbm90IHNldAorCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIE1PRFVMYnVzIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FTQzc2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfTE04Mz15CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSFQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRU1DMTQwMyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQU1DNjgyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDEwMiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xJUzNfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HPXkKK0NPTkZJR19XQVRDSERPR19OT1dBWU9VVD15CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfQUxJTTcxMDFfV0RUIGlzIG5vdCBzZXQKKworIworIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCPW0KK0NPTkZJR19TU0JfU1BST009eQorQ09ORklHX1NTQl9QQ0lIT1NUX1BPU1NJQkxFPXkKK0NPTkZJR19TU0JfUENJSE9TVD15CisjIENPTkZJR19TU0JfQjQzX1BDSV9CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfU1NCX1NJTEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0JfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NTQl9EUklWRVJfUENJQ09SRV9QT1NTSUJMRT15CitDT05GSUdfU1NCX0RSSVZFUl9QQ0lDT1JFPXkKKyMgQ09ORklHX1NTQl9EUklWRVJfTUlQUyBpcyBub3Qgc2V0CitDT05GSUdfTUZEX1NVUFBPUlQ9eQorIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19JMkNQTEQgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwN1ggaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzM1ODkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUFYODkyNSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUJYNTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RJTUJFUkRBTEUgaXMgbm90IHNldAorIyBDT05GSUdfTFBDX1NDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUkRDMzIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfSkFOWl9DTU9ESU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9BUkIgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQorIyBDT05GSUdfTENEX0NMQVNTX0RFVklDRSBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15CisjIENPTkZJR19CQUNLTElHSFRfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfQURQODg2MCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPW0KKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9ISURERVY9eQorCisjCisjIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCisjCitDT05GSUdfVVNCX0tCRD1tCitDT05GSUdfVVNCX01PVVNFPW0KKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCisjIENPTkZJR19ISURfM01fUENUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NBTkRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSEVSUlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0VHQUxBWCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX01PU0FSVCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTU9OVEVSRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9PUlRFSyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QSUNPTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9RVUFOVEEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1JPQ0NBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUk9DQ0FUX0tPTkUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NUQU5UVU0gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9aWURBQ1JPTiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CitDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQorQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CisjCisKKyMKKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT1tCisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorQ09ORklHX1VTQl9MSUJVU1VBTD15CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKK0NPTkZJR19VU0JfU0VSSUFMPXkKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VaVVNCPXkKK0NPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUM9eQorIyBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9DSDM0MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0NQMjEwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9FTVBFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRlVOU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfSVBBUSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9USSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lQVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lVVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tMU0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTU9UT1JPTEEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9PVEk2ODU4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfUUNBVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9RVUFMQ09NTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NQQ1A4WDUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9IUDRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU0FGRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NJRU1FTlNfTVBJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0VSSUFMX1NJRVJSQVdJUkVMRVNTPXkKKyMgQ09ORklHX1VTQl9TRVJJQUxfU1lNQk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfVEkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9YSVJDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9PUFRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9PTU5JTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSUNPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1ZJVk9QQVlfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfWklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfREVCVUcgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CisjIENPTkZJR19VV0IgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKyMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19HUElPPXkKK0NPTkZJR19MRURTX0dQSU9fUExBVEZPUk09eQorIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfTFQzNTkzIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQorIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049eQorCisjCisjIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKKyMKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKKyMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfRlNOT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOT1RJRllfVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPW0KK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfVURGX0ZTPW0KK0NPTkZJR19VREZfTkxTPXkKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPW0KK0NPTkZJR19NU0RPU19GUz1tCitDT05GSUdfVkZBVF9GUz1tCitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CitDT05GSUdfSkZGUzJfUlVCSU49eQorIyBDT05GSUdfSkZGUzJfQ01PREVfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQorIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8gaXMgbm90IHNldAorIyBDT05GSUdfTE9HRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NFUEhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUj15CisjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQVRPTUlDNjRfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMCByb290PS9kZXYvbmZzIHJ3IGlwPWF1dG8iCisjIENPTkZJR19DTURMSU5FX09WRVJSSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSU5MT0NLX1RFU1QgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKK0NPTkZJR19LRVlTPXkKKyMgQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQ9bQorQ09ORklHX0NSWVBUT19BRUFEMj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkc9bQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTlVMTD1tCitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVVUSEVOQz1tCitDT05GSUdfQ1JZUFRPX1RFU1Q9bQorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj15CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fUENCQz1tCisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworQ09ORklHX0NSWVBUT19DUkMzMkM9bQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorQ09ORklHX0NSWVBUT19UR1IxOTI9bQorQ09ORklHX0NSWVBUT19XUDUxMj1tCisKKyMKKyMgQ2lwaGVycworIworQ09ORklHX0NSWVBUT19BRVM9eQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19BUkM0PXkKK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCisKKyMKKyMgQ29tcHJlc3Npb24KKyMKK0NPTkZJR19DUllQVE9fREVGTEFURT1tCisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKK0NPTkZJR19DUllQVE9fQU5TSV9DUFJORz1tCitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDMTY9bQorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDX0lUVV9UPW0KK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKK0NPTkZJR19MSUJDUkMzMkM9bQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQorQ09ORklHX1RFWFRTRUFSQ0g9eQorQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KK0NPTkZJR19URVhUU0VBUkNIX0JNPW0KK0NPTkZJR19URVhUU0VBUkNIX0ZTTT1tCitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbXR4MV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9tdHgxX2RlZmNvbmZpZwppbmRleCBjZmY4ZjRjLi4xMGQyMGFhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9tdHgxX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9tdHgxX2RlZmNvbmZpZwpAQCAtOCw3ICs4LDcgQEAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKLUNPTkZJR19NQUNIX0FMQ0hFTVk9eQorQ09ORklHX01JUFNfQUxDSEVNWT15CiAjIENPTkZJR19BUjcgaXMgbm90IHNldAogIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKQEAgLTY0LDcgKzY0LDYgQEAKICMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiBDT05GSUdfU09DX0FVMTUwMD15Ci1DT05GSUdfU09DX0FVMVgwMD15CiBDT05GSUdfTE9PTkdTT05fVUFSVF9CQVNFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wYjExMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMTAwX2RlZmNvbmZpZwppbmRleCA5NzM4MmI2Li43NzhmNzI2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9wYjExMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTEwMF9kZWZjb25maWcKQEAgLTgsNyArOCw3IEBACiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCi1DT05GSUdfTUFDSF9BTENIRU1ZPXkKK0NPTkZJR19NSVBTX0FMQ0hFTVk9eQogIyBDT05GSUdfQVI3IGlzIG5vdCBzZXQKICMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAogIyBDT05GSUdfQkNNNjNYWCBpcyBub3Qgc2V0CkBAIC02NCw3ICs2NCw2IEBACiAjIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogQ09ORklHX1NPQ19BVTExMDA9eQotQ09ORklHX1NPQ19BVTFYMDA9eQogQ09ORklHX0xPT05HU09OX1VBUlRfQkFTRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMjAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTIwMF9kZWZjb25maWcKaW5kZXggZTlhZDc3My4uMGY5MDhjNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMjAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9wYjEyMDBfZGVmY29uZmlnCkBAIC04LDcgKzgsNyBAQAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwotQ09ORklHX01BQ0hfQUxDSEVNWT15CitDT05GSUdfTUlQU19BTENIRU1ZPXkKICMgQ09ORklHX0FSNyBpcyBub3Qgc2V0CiAjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JDTTYzWFggaXMgbm90IHNldApAQCAtNjQsNyArNjQsNiBAQAogIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKIENPTkZJR19TT0NfQVUxMjAwPXkKLUNPTkZJR19TT0NfQVUxWDAwPXkKIENPTkZJR19MT09OR1NPTl9VQVJUX0JBU0U9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTUwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wYjE1MDBfZGVmY29uZmlnCmluZGV4IDc0OTdkMzMuLjFjNWZlNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTUwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTAwX2RlZmNvbmZpZwpAQCAtOCw3ICs4LDcgQEAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKLUNPTkZJR19NQUNIX0FMQ0hFTVk9eQorQ09ORklHX01JUFNfQUxDSEVNWT15CiAjIENPTkZJR19BUjcgaXMgbm90IHNldAogIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKQEAgLTY0LDcgKzY0LDYgQEAKICMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiBDT05GSUdfU09DX0FVMTUwMD15Ci1DT05GSUdfU09DX0FVMVgwMD15CiBDT05GSUdfTE9PTkdTT05fVUFSVF9CQVNFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wYjE1NTBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTUwX2RlZmNvbmZpZwppbmRleCBhYTUyNmY1Li40OTQ5NGIwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9wYjE1NTBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTU1MF9kZWZjb25maWcKQEAgLTgsNyArOCw3IEBACiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCi1DT05GSUdfTUFDSF9BTENIRU1ZPXkKK0NPTkZJR19NSVBTX0FMQ0hFTVk9eQogIyBDT05GSUdfQVI3IGlzIG5vdCBzZXQKICMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAogIyBDT05GSUdfQkNNNjNYWCBpcyBub3Qgc2V0CkBAIC02NCw3ICs2NCw2IEBACiBDT05GSUdfTUlQU19QQjE1NTA9eQogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKIENPTkZJR19TT0NfQVUxNTUwPXkKLUNPTkZJR19TT0NfQVUxWDAwPXkKIENPTkZJR19MT09OR1NPTl9VQVJUX0JBU0U9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3Bvd2VydHZfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcG93ZXJ0dl9kZWZjb25maWcKaW5kZXggNzI5MTYzMy4uYWYwYWI3MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcG93ZXJ0dl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcG93ZXJ0dl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM1Ci0jIEZyaSBBdWcgMjggMTQ6NDk6MzMgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM1LXJjMworIyBUaHUgSnVsICAxIDExOjAzOjI4IDIwMTAKICMKIENPTkZJR19NSVBTPXkKIApAQCAtMTEsMTEgKzExLDEyIEBACiAjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAogIyBDT05GSUdfQVI3IGlzIG5vdCBzZXQKICMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAorIyBDT05GSUdfQkNNNjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFTU9URV9GVUxPTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT09OR1NPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfU0lNIGlzIG5vdCBzZXQKICMgQ09ORklHX05FQ19NQVJLRUlOUyBpcyBub3Qgc2V0CkBAIC01MCw3ICs1MSw2IEBACiAjIENPTkZJR19NSU5fUlVOVElNRV9SRVNPVVJDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVExPQURFUl9EUklWRVIgaXMgbm90IHNldAogQ09ORklHX0JPT1RMT0FERVJfRkFNSUxZPSJSMiIKLUNPTkZJR19DU1JDX1BPV0VSVFY9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CkBAIC02NSw5ICs2NSw5IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19DRVZUX1I0S19MSUI9eQogQ09ORklHX0NFVlRfUjRLPXkKK0NPTkZJR19DU1JDX1BPV0VSVFY9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15Ci1DT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15Ci0jIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAorQ09ORklHX05FRURfRE1BX01BUF9TVEFURT15CiBDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfQklHX0VORElBTj15CkBAIC03OSw3ICs3OSw4IEBACiAjCiAjIENQVSBzZWxlY3Rpb24KICMKLSMgQ09ORklHX0NQVV9MT09OR1NPTjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0xPT05HU09OMkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0xPT05HU09OMkYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX01JUFMzMl9SMSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX01JUFMzMl9SMj15CiAjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKQEAgLTEyMiw3ICsxMjMsNyBAQAogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfSEFTX0xMU0M9eQorIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX01JUFNSMl9JUlFfVkk9eQogQ09ORklHX0NQVV9NSVBTUjJfSVJRX0VJPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQpAQCAtMTQ0LDggKzE0NSw3IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CkBAIC0xNzcsNiArMTc3LDcgQEAKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19MT0NLX0tFUk5FTD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfQ1JPU1NfQ09NUElMRT0ibWlwcy1saW51eC0iCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CkBAIC0xOTAsMTkgKzE5MSwxNSBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE2Ci1DT05GSUdfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiBDT05GSUdfUkVMQVk9eQogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CkBAIC0yMTEsNiArMjA4LDcgQEAKICMgQ09ORklHX1JEX0daSVAgaXMgbm90IHNldAogIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAogIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQpAQCAtMjM0LDE4ICsyMzIsMTYgQEAKIENPTkZJR19BSU89eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfUENJX1FVSVJLUz15CiAjIENPTkZJR19TTFVCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAKICMKQEAgLTI1Myw3ICsyNDksNyBAQAogIwogIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQpAQCAtMjcxLDE1ICsyNjcsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKLSMgQ09ORklHX1BST0JFX0lOSVRSRF9IRUFERVIgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0yODksNyArMzExLDYgQEAKIENPTkZJR19QQ0k9eQogQ09ORklHX1BDSV9ET01BSU5TPXkKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldApAQCAtMzE4LDcgKzMzOSw2IEBACiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwogQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQogIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKQEAgLTM5MCwxMiArNDEwLDI2IEBACiAjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAogIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUz15CisKKyMKKyMgWHRhYmxlcyBjb21iaW5lZCBtb2R1bGVzCisjCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFSSyBpcyBub3Qgc2V0CisKKyMKKyMgWHRhYmxlcyB0YXJnZXRzCisjCiAjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9URUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1MgaXMgbm90IHNldAorCisjCisjIFh0YWJsZXMgbWF0Y2hlcworIwogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1AgaXMgbm90IHNldApAQCAtNDY1LDEwICs0OTksMTMgQEAKICMgQ09ORklHX0lQNl9ORl9SQVcgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19MMlRQIGlzIG5vdCBzZXQKIENPTkZJR19TVFA9eQogQ09ORklHX0JSSURHRT15CitDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkc9eQogIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CkBAIC01MjYsMTAgKzU2MywyMSBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCisKKyMKKyMgU29tZSB3aXJlbGVzcyBkcml2ZXJzIHJlcXVpcmUgYSByYXRlIGNvbnRyb2wgYWxnb3JpdGhtCisjCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBSUYgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC01MzksNiArNTg3LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNTUwLDkgKzU5OSw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01NjgsNiArNjE3LDcgQEAKICMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAogIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfU01fRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKIAogIwpAQCAtNjExLDExICs2NjEsMTYgQEAKICMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfRUNDPXkKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKICMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTV9DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9ERU5BTEkgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0RFTkFMSV9TQ1JBVENIX1JFR19BRERSPTB4RkYxMDgwMTgKIENPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfUklDT0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldApAQCAtNjQxLDYgKzY5NiwxMCBAQAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKQEAgLTY1OCw2ICs3MTcsNyBAQAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCitDT05GSUdfU0NTSV9NT0Q9eQogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15CiBDT05GSUdfU0NTSV9ETUE9eQpAQCAtNjkzLDY0ICs3NTMsOTUgQEAKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKKworIworIyBDb250cm9sbGVycyB3aXRoIG5vbi1TRkYgbmF0aXZlIGludGVyZmFjZQorIwogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfQUhDSV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAogQ09ORklHX0FUQV9TRkY9eQotIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAorCisjCisjIFNGRiBjb250cm9sbGVycyB3aXRoIGN1c3RvbSBETUEgaW50ZXJmYWNlCisjCisjIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfQk1ETUE9eQorCisjCisjIFNBVEEgU0ZGIGNvbnRyb2xsZXJzIHdpdGggQk1ETUEKKyMKICMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0CisKKyMKKyMgUEFUQSBTRkYgY29udHJvbGxlcnMgd2l0aCBCTURNQQorIwogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVE9TSElCQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKKworIworIyBQSU8tb25seSBTRkYgY29udHJvbGxlcnMKKyMKKyMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CisKKyMKKyMgR2VuZXJpYyBmYWxsYmFjayAvIGxlZ2FjeSBkcml2ZXJzCisjCisjIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAogCkBAIC03NjMsNyArODU0LDcgQEAKICMKIAogIwotIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisjIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTc4Nyw2ICs4NzgsNyBAQAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CkBAIC04MDAsNiArODkyLDcgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CkBAIC04MjksNiArOTIyLDggQEAKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAogQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15CiAjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKK0NPTkZJR19DSEVMU0lPX1Q0X0RFUEVORFM9eQorIyBDT05GSUdfQ0hFTFNJT19UNCBpcyBub3Qgc2V0CiAjIENPTkZJR19FTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldApAQCAtODQxLDE2ICs5MzYsMTIgQEAKICMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfUUxDTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtODY0LDYgKzk1NSw3IEBACiAjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1JUTDgxNTA9eQogIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVBIRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKQEAgLTg3Myw2ICs5NjUsNyBAQAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIApAQCAtODgyLDYgKzk3NSw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTkxMyw2ICsxMDA3LDcgQEAKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05fR1NNIGlzIG5vdCBzZXQKICMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CiAKICMKQEAgLTkyNCw2ICsxMDE5LDkgQEAKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIwogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfQUxURVJBX0pUQUdVQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9BTFRFUkFfVUFSVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CkBAIC05MzQsNiArMTAzMiw3IEBACiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0RFVlBPUlQ9eQorIyBDT05GSUdfUkFNT09QUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKIApAQCAtOTQ1LDcgKzEwNDQsNiBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtOTUzLDIwICsxMDUxLDE0IEBACiAjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwogIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworIyBDT05GSUdfVkdBX0FSQiBpcyBub3Qgc2V0CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtOTgwLDcgKzEwNzIsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTk5MywzMSArMTA4NCw0MyBAQAogIwogIyBTcGVjaWFsIEhJRCBkcml2ZXJzCiAjCisjIENPTkZJR19ISURfM01fUENUIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAogIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NBTkRPIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9DSEVSUlkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0NZUFJFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0VHQUxBWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX01PU0FSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfTU9OVEVSRVkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9PUlRFSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QSUNPTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9RVUFOVEEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1JPQ0NBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUk9DQ0FUX0tPTkUgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NUQU5UVU0gaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9aWURBQ1JPTiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKQEAgLTEwMzIsNyArMTEzNSw2IEBACiBDT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldApAQCAtMTA1MCw2ICsxMTUyLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTExMzMsNiArMTIzNiw3IEBACiAjIENPTkZJR19VU0JfU0VSSUFMX05BVk1BTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX1BMMjMwMyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX09USTY4NTggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9RQ0FVWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX1FVQUxDT01NIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfU1BDUDhYNSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldApAQCAtMTE0Niw2ICsxMjUwLDggQEAKICMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX09QVElDT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9WSVZPUEFZX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1pJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0RFQlVHIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE1OCw3ICsxMjY0LDYgQEAKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldApAQCAtMTE3MSw3ICsxMjc2LDYgQEAKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAKICMKQEAgLTExODksMTAgKzEyOTMsNiBAQAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC0xMjE0LDYgKzEzMTQsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC0xMjc0LDYgKzEzNzUsNyBAQAogIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9SVElNRT15CiAjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKICMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldApAQCAtMTI4NCw3ICsxMzg2LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTI5OSw2ICsxNDAwLDcgQEAKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DRVBIX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldApAQCAtMTM2MCw2ICsxNDYyLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMzkzLDE1ICsxNDk2LDI1IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldApAQCAtMTQxMCwxOSArMTUyMywyMiBAQAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE9NSUM2NF9TRUxGVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkVfQk9PTD15Ci1DT05GSUdfQ01ETElORT0icncgZGhhc2hfZW50cmllcz0xMDI0IGloYXNoX2VudHJpZXM9MTAyNCBpcD0xMC4wLjEuMzoxMC4wLjEuMToxMC4wLjEuMToyNTUuMjU1LjI1NS4wOnpldXM6ZXRoMDogcm9vdD0vZGV2L25mcyBuZnNyb290PS9uZnNyb290L2NyYW1mcyx3c2l6ZT01MTIscnNpemU9NTEyLHRjcCBub2tnZGIgY29uc29sZT10dHlVU0IwLDExNTIwMCBtZW1zaXplPTI1Mk0iCitDT05GSUdfQ01ETElORT0iIgogIyBDT05GSUdfQ01ETElORV9PVkVSUklERSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSU5MT0NLX1RFU1QgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTE0MzAsMTMgKzE1NDYsMTYgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD15CkBAIC0xNDc5LDExICsxNTk4LDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RlYy9NYWtlZmlsZSBiL2FyY2gvbWlwcy9kZWMvTWFrZWZpbGUKaW5kZXggYzUzMDIwOGUuLjllYjJmOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZWMvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2RlYy9NYWtlZmlsZQpAQCAtOCw1ICs4LDMgQEAKIG9iai0kKENPTkZJR19QUk9NX0NPTlNPTEUpCSs9IHByb21jb24ubwogb2JqLSQoQ09ORklHX1RDKQkJKz0gdGMubwogb2JqLSQoQ09ORklHX0NQVV9IQVNfV0IpCSs9IHdiZmx1c2gubwotCi1FWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RlYy9QbGF0Zm9ybSBiL2FyY2gvbWlwcy9kZWMvUGxhdGZvcm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FkYmNiZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9kZWMvUGxhdGZvcm0KQEAgLTAsMCArMSw4IEBACisjCisjIERFQ3N0YXRpb24gZmFtaWx5CisjCitwbGF0Zm9ybS0kKENPTkZJR19NQUNIX0RFQ1NUQVRJT04pCT0gZGVjLworY2ZsYWdzLSQoQ09ORklHX01BQ0hfREVDU1RBVElPTikJKz0gXAorCQkJLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWRlYworbGlicy0kKENPTkZJR19NQUNIX0RFQ1NUQVRJT04pCQkrPSBhcmNoL21pcHMvZGVjL3Byb20vCitsb2FkLSQoQ09ORklHX01BQ0hfREVDU1RBVElPTikJCSs9IDB4ZmZmZmZmZmY4MDA0MDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RlYy9wcm9tY29uLmMgYi9hcmNoL21pcHMvZGVjL3Byb21jb24uYwppbmRleCA5ZjA5NzJmLi5jMjM5YzI1YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RlYy9wcm9tY29uLmMKKysrIGIvYXJjaC9taXBzL2RlYy9wcm9tY29uLmMKQEAgLTMzLDggKzMzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBjb25zb2xlIHNlcmNvbnMgPQoteworc3RhdGljIHN0cnVjdCBjb25zb2xlIHNlcmNvbnMgPSB7CiAJLm5hbWUJPSAidHR5UyIsCiAJLndyaXRlCT0gcHJvbV9jb25zb2xlX3dyaXRlLAogCS5zZXR1cAk9IHByb21fY29uc29sZV9zZXR1cCwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9lbW1hL01ha2VmaWxlIGIvYXJjaC9taXBzL2VtbWEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI1NGEzMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9lbW1hL01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAorb2JqLSQoQ09ORklHX1NPQ19FTU1BMlJIKQkrPSBjb21tb24vCisKKyMKKyMgTkVDIEVNTUEyUkggTWFyay1laW5zCisjCitvYmotJChDT05GSUdfTkVDX01BUktFSU5TKQkrPSBtYXJrZWlucy8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9lbW1hL1BsYXRmb3JtIGIvYXJjaC9taXBzL2VtbWEvUGxhdGZvcm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI4MmY3ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9lbW1hL1BsYXRmb3JtCkBAIC0wLDAgKzEsNCBAQAorcGxhdGZvcm0tJChDT05GSUdfU09DX0VNTUEyUkgpCSs9IGVtbWEvCitjZmxhZ3MtJChDT05GSUdfU09DX0VNTUEyUkgpCSs9CQkJCQlcCisJCS1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1lbW1hMnJoCitsb2FkLSQoQ09ORklHX05FQ19NQVJLRUlOUykJKz0gMHhmZmZmZmZmZjg4MTAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZW1tYS9tYXJrZWlucy9pcnEuYyBiL2FyY2gvbWlwcy9lbW1hL21hcmtlaW5zL2lycS5jCmluZGV4IDk1MDRiN2UuLjNhOTY3OTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9lbW1hL21hcmtlaW5zL2lycS5jCisrKyBiL2FyY2gvbWlwcy9lbW1hL21hcmtlaW5zL2lycS5jCkBAIC0zMDEsNyArMzAxLDcgQEAKIAkvKiBzZXR1cCBjYXNjYWRlIGludGVycnVwdHMgKi8KIAlzZXR1cF9pcnEoRU1NQTJSSF9JUlFfQkFTRSArIEVNTUEyUkhfU1dfQ0FTQ0FERSwgJmlycV9jYXNjYWRlKTsKIAlzZXR1cF9pcnEoRU1NQTJSSF9JUlFfQkFTRSArIEVNTUEyUkhfR1BJT19DQVNDQURFLCAmaXJxX2Nhc2NhZGUpOwotCXNldHVwX2lycShDUFVfSVJRX0JBU0UgKyBDUFVfRU1NQTJSSF9DQVNDQURFLCAmaXJxX2Nhc2NhZGUpOworCXNldHVwX2lycShNSVBTX0NQVV9JUlFfQkFTRSArIDIsICZpcnFfY2FzY2FkZSk7CiB9CiAKIGFzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaCh2b2lkKQpAQCAtMzA5LDEzICszMDksMTMgQEAKICAgICAgICAgdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX3N0YXR1cygpICYgcmVhZF9jMF9jYXVzZSgpICYgU1QwX0lNOwogCiAJaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNykKLQkJZG9fSVJRKENQVV9JUlFfQkFTRSArIDcpOworCQlkb19JUlEoTUlQU19DUFVfSVJRX0JBU0UgKyA3KTsKIAllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDIpCiAJCWVtbWEycmhfaXJxX2Rpc3BhdGNoKCk7CiAJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAxKQotCQlkb19JUlEoQ1BVX0lSUV9CQVNFICsgMSk7CisJCWRvX0lSUShNSVBTX0NQVV9JUlFfQkFTRSArIDEpOwogCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMCkKLQkJZG9fSVJRKENQVV9JUlFfQkFTRSArIDApOworCQlkb19JUlEoTUlQU19DUFVfSVJRX0JBU0UgKyAwKTsKIAllbHNlCiAJCXNwdXJpb3VzX2ludGVycnVwdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2VtbWEvbWFya2VpbnMvc2V0dXAuYyBiL2FyY2gvbWlwcy9lbW1hL21hcmtlaW5zL3NldHVwLmMKaW5kZXggOWIzZjUxZS4uZmVjZWViYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2VtbWEvbWFya2VpbnMvc2V0dXAuYworKysgYi9hcmNoL21pcHMvZW1tYS9tYXJrZWlucy9zZXR1cC5jCkBAIC01Miw3ICs1Miw2IEBACiAKIHN0YXRpYyB2b2lkIG1hcmtlaW5zX21hY2hpbmVfcG93ZXJfb2ZmKHZvaWQpCiB7Ci0JcHJpbnRrKCJFTU1BMlJIIE1hcmstZWlucyBoYWx0ZWQuIFBsZWFzZSB0dXJuIG9mZiB0aGUgcG93ZXIuXG4iKTsKIAltYXJrZWluc19sZWQoInBvd2Vyb2ZmLiIpOwogCXdoaWxlICgxKSA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ3Q2NDEyMC93cnBwbWMvTWFrZWZpbGUgYi9hcmNoL21pcHMvZ3Q2NDEyMC93cnBwbWMvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0OWQyODIuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2d0NjQxMjAvd3JwcG1jL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotIwotIyBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotIyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0jIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIENvcHlyaWdodCAyMDA2IFdpbmQgUml2ZXIgU3lzdGVtLCBJbmMuCi0jIEF1dGhvcjogUm9uZ2thaS5aaGFuIDxyb25na2FpLnpoYW5Ad2luZHJpdmVyLmNvbT4KLSMKLSMgTWFrZWZpbGUgZm9yIHRoZSBXaW5kIFJpdmVyIE1JUFMgNEtDIFBQTUMgRXZhbCBCb2FyZAotIwotCi1vYmoteSArPSBpcnEubyBwY2kubyByZXNldC5vIHNlcmlhbC5vIHNldHVwLm8gdGltZS5vCi0KLUVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYXJjaF9od2VpZ2h0LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYXJjaF9od2VpZ2h0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEyYTc0NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9hcmNoX2h3ZWlnaHQuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisjaWZuZGVmIF9BU01fQVJDSF9IV0VJR0hUX0gKKyNkZWZpbmUgX0FTTV9BUkNIX0hXRUlHSFRfSAorCisjaWZkZWYgQVJDSF9IQVNfVVNBQkxFX0JVSUxUSU5fUE9QQ09VTlQKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2FyY2hfaHdlaWdodDMyKHVuc2lnbmVkIGludCB3KQoreworCXJldHVybiBfX2J1aWx0aW5fcG9wY291bnQodyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fYXJjaF9od2VpZ2h0MTYodW5zaWduZWQgaW50IHcpCit7CisJcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudCh3ICYgMHhmZmZmKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19hcmNoX2h3ZWlnaHQ4KHVuc2lnbmVkIGludCB3KQoreworCXJldHVybiBfX2J1aWx0aW5fcG9wY291bnQodyAmIDB4ZmYpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19hcmNoX2h3ZWlnaHQ2NChfX3U2NCB3KQoreworCXJldHVybiBfX2J1aWx0aW5fcG9wY291bnRsbCh3KTsKK30KKworI2Vsc2UKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvYXJjaF9od2VpZ2h0Lmg+CisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fQVJDSF9IV0VJR0hUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9hdG9taWMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCA1OWRjMGM3Li5jNjNjNTZiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2F0b21pYy5oCkBAIC00MzQsNyArNDM0LDcgQEAKIAkJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJCSIJLnNldAltaXBzMwkJCQkJXG4iCiAJCSIxOglsbGQJJTAsICUxCQkjIGF0b21pYzY0X2FkZAkJXG4iCi0JCSIJYWRkdQklMCwgJTIJCQkJCVxuIgorCQkiCWRhZGR1CSUwLCAlMgkJCQkJXG4iCiAJCSIJc2NkCSUwLCAlMQkJCQkJXG4iCiAJCSIJYmVxemwJJTAsIDFiCQkJCQlcbiIKIAkJIgkuc2V0CW1pcHMwCQkJCQlcbiIKQEAgLTQ0Niw3ICs0NDYsNyBAQAogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJIgkuc2V0CW1pcHMzCQkJCQlcbiIKIAkJIjE6CWxsZAklMCwgJTEJCSMgYXRvbWljNjRfYWRkCQlcbiIKLQkJIglhZGR1CSUwLCAlMgkJCQkJXG4iCisJCSIJZGFkZHUJJTAsICUyCQkJCQlcbiIKIAkJIglzY2QJJTAsICUxCQkJCQlcbiIKIAkJIgliZXF6CSUwLCAyZgkJCQkJXG4iCiAJCSIJLnN1YnNlY3Rpb24gMgkJCQkJXG4iCkBAIC00NzksNyArNDc5LDcgQEAKIAkJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJCSIJLnNldAltaXBzMwkJCQkJXG4iCiAJCSIxOglsbGQJJTAsICUxCQkjIGF0b21pYzY0X3N1YgkJXG4iCi0JCSIJc3VidQklMCwgJTIJCQkJCVxuIgorCQkiCWRzdWJ1CSUwLCAlMgkJCQkJXG4iCiAJCSIJc2NkCSUwLCAlMQkJCQkJXG4iCiAJCSIJYmVxemwJJTAsIDFiCQkJCQlcbiIKIAkJIgkuc2V0CW1pcHMwCQkJCQlcbiIKQEAgLTQ5MSw3ICs0OTEsNyBAQAogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJIgkuc2V0CW1pcHMzCQkJCQlcbiIKIAkJIjE6CWxsZAklMCwgJTEJCSMgYXRvbWljNjRfc3ViCQlcbiIKLQkJIglzdWJ1CSUwLCAlMgkJCQkJXG4iCisJCSIJZHN1YnUJJTAsICUyCQkJCQlcbiIKIAkJIglzY2QJJTAsICUxCQkJCQlcbiIKIAkJIgliZXF6CSUwLCAyZgkJCQkJXG4iCiAJCSIJLnN1YnNlY3Rpb24gMgkJCQkJXG4iCkBAIC01MjQsMTAgKzUyNCwxMCBAQAogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJIgkuc2V0CW1pcHMzCQkJCQlcbiIKIAkJIjE6CWxsZAklMSwgJTIJCSMgYXRvbWljNjRfYWRkX3JldHVybglcbiIKLQkJIglhZGR1CSUwLCAlMSwgJTMJCQkJXG4iCisJCSIJZGFkZHUJJTAsICUxLCAlMwkJCQlcbiIKIAkJIglzY2QJJTAsICUyCQkJCQlcbiIKIAkJIgliZXF6bAklMCwgMWIJCQkJCVxuIgotCQkiCWFkZHUJJTAsICUxLCAlMwkJCQlcbiIKKwkJIglkYWRkdQklMCwgJTEsICUzCQkJCVxuIgogCQkiCS5zZXQJbWlwczAJCQkJCVxuIgogCQk6ICI9JnIiIChyZXN1bHQpLCAiPSZyIiAodGVtcCksICI9bSIgKHYtPmNvdW50ZXIpCiAJCTogIklyIiAoaSksICJtIiAodi0+Y291bnRlcikKQEAgLTUzOCwxMCArNTM4LDEwIEBACiAJCV9fYXNtX18gX192b2xhdGlsZV9fKAogCQkiCS5zZXQJbWlwczMJCQkJCVxuIgogCQkiMToJbGxkCSUxLCAlMgkJIyBhdG9taWM2NF9hZGRfcmV0dXJuCVxuIgotCQkiCWFkZHUJJTAsICUxLCAlMwkJCQlcbiIKKwkJIglkYWRkdQklMCwgJTEsICUzCQkJCVxuIgogCQkiCXNjZAklMCwgJTIJCQkJCVxuIgogCQkiCWJlcXoJJTAsIDJmCQkJCQlcbiIKLQkJIglhZGR1CSUwLCAlMSwgJTMJCQkJXG4iCisJCSIJZGFkZHUJJTAsICUxLCAlMwkJCQlcbiIKIAkJIgkuc3Vic2VjdGlvbiAyCQkJCQlcbiIKIAkJIjI6CWIJMWIJCQkJCVxuIgogCQkiCS5wcmV2aW91cwkJCQkJXG4iCkBAIC01NzYsMTAgKzU3NiwxMCBAQAogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJIgkuc2V0CW1pcHMzCQkJCQlcbiIKIAkJIjE6CWxsZAklMSwgJTIJCSMgYXRvbWljNjRfc3ViX3JldHVybglcbiIKLQkJIglzdWJ1CSUwLCAlMSwgJTMJCQkJXG4iCisJCSIJZHN1YnUJJTAsICUxLCAlMwkJCQlcbiIKIAkJIglzY2QJJTAsICUyCQkJCQlcbiIKIAkJIgliZXF6bAklMCwgMWIJCQkJCVxuIgotCQkiCXN1YnUJJTAsICUxLCAlMwkJCQlcbiIKKwkJIglkc3VidQklMCwgJTEsICUzCQkJCVxuIgogCQkiCS5zZXQJbWlwczAJCQkJCVxuIgogCQk6ICI9JnIiIChyZXN1bHQpLCAiPSZyIiAodGVtcCksICI9bSIgKHYtPmNvdW50ZXIpCiAJCTogIklyIiAoaSksICJtIiAodi0+Y291bnRlcikKQEAgLTU5MCwxMCArNTkwLDEwIEBACiAJCV9fYXNtX18gX192b2xhdGlsZV9fKAogCQkiCS5zZXQJbWlwczMJCQkJCVxuIgogCQkiMToJbGxkCSUxLCAlMgkJIyBhdG9taWM2NF9zdWJfcmV0dXJuCVxuIgotCQkiCXN1YnUJJTAsICUxLCAlMwkJCQlcbiIKKwkJIglkc3VidQklMCwgJTEsICUzCQkJCVxuIgogCQkiCXNjZAklMCwgJTIJCQkJCVxuIgogCQkiCWJlcXoJJTAsIDJmCQkJCQlcbiIKLQkJIglzdWJ1CSUwLCAlMSwgJTMJCQkJXG4iCisJCSIJZHN1YnUJJTAsICUxLCAlMwkJCQlcbiIKIAkJIgkuc3Vic2VjdGlvbiAyCQkJCQlcbiIKIAkJIjI6CWIJMWIJCQkJCVxuIgogCQkiCS5wcmV2aW91cwkJCQkJXG4iCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggOTI1NWNmYi4uYjBjZTdjYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2JpdG9wcy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtNzAwLDcgKzcwMCwxMCBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9zY2hlZC5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9od2VpZ2h0Lmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaF9od2VpZ2h0Lmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2NvbnN0X2h3ZWlnaHQuaD4KKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9leHQyLW5vbi1hdG9taWMuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZXh0Mi1hdG9taWMuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbWluaXguaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9ib290aW5mby5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2Jvb3RpbmZvLmgKaW5kZXggMDllZWUwOS4uMTVhOGVmMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2Jvb3RpbmZvLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2Jvb3RpbmZvLmgKQEAgLTcxLDYgKzcxLDEyIEBACiAjZGVmaW5lIE1BQ0hfTEVNT1RFX0xMMkYgICAgICAgNwogI2RlZmluZSBNQUNIX0xPT05HU09OX0VORCAgICAgIDgKIAorLyoKKyAqIFZhbGlkIG1hY2h0eXBlIGZvciBncm91cCBJTkdFTklDCisgKi8KKyNkZWZpbmUgIE1BQ0hfSU5HRU5JQ19KWjQ3MzAJMAkvKiBKWjQ3MzAgU09DCQkqLworI2RlZmluZSAgTUFDSF9JTkdFTklDX0paNDc0MAkxCS8qIEpaNDc0MCBTT0MJCSovCisKIGV4dGVybiBjaGFyICpzeXN0ZW1fdHlwZTsKIGNvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2JyZWFrLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYnJlYWsuaAppbmRleCA0NDQzN2VkLi45MTYxZTY4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYnJlYWsuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYnJlYWsuaApAQCAtMzAsNiArMzAsOCBAQAogI2RlZmluZSBCUktfQlVHCQk1MTIJLyogVXNlZCBieSBCVUcoKSAqLwogI2RlZmluZSBCUktfS0RCCQk1MTMJLyogVXNlZCBpbiBLREJfRU5URVIoKSAqLwogI2RlZmluZSBCUktfTUVNVQk1MTQJLyogVXNlZCBieSBGUFUgZW11bGF0b3IgKi8KKyNkZWZpbmUgQlJLX0tQUk9CRV9CUAk1MTUJLyogS3Byb2JlIGJyZWFrICovCisjZGVmaW5lIEJSS19LUFJPQkVfU1NURVBCUCA1MTYJLyogS3Byb2JlIHNpbmdsZSBzdGVwIHNvZnR3YXJlIGltcGxlbWVudGF0aW9uICovCiAjZGVmaW5lIEJSS19NVUxPVkYJMTAyMwkvKiBNdWx0aXBseSBvdmVyZmxvdyAqLwogCiAjZW5kaWYgLyogX19BU01fQlJFQUtfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NhY2hlb3BzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY2FjaGVvcHMuaAppbmRleCAyNTZhZDJjLi44Zjk5YzExIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY2FjaGVvcHMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY2FjaGVvcHMuaApAQCAtNjIsNiArNjIsOCBAQAogICogUk03MDAwLXNwZWNpZmljIGNhY2hlb3BzCiAgKi8KICNkZWZpbmUgUGFnZV9JbnZhbGlkYXRlX1QJMHgxNgorI2RlZmluZSBJbmRleF9TdG9yZV9UYWdfVAkweDBhCisjZGVmaW5lIEluZGV4X0xvYWRfVGFnX1QJMHgwNgogCiAvKgogICogUjEwMDAwLXNwZWNpZmljIGNhY2hlb3BzCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY29wMi5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NvcDIuaAppbmRleCA2YjA0Yzk4Li4yY2IyZjBjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY29wMi5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jb3AyLmgKQEAgLTksNiArOSw4IEBACiAjaWZuZGVmIF9fQVNNX0NPUDJfSAogI2RlZmluZSBfX0FTTV9DT1AyX0gKIAorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisKIGVudW0gY3UyX29wcyB7CiAJQ1UyX0VYQ0VQVElPTiwKIAlDVTJfTFdDMl9PUCwKQEAgLTIwLDQgKzIyLDE0IEBACiBleHRlcm4gaW50IHJlZ2lzdGVyX2N1Ml9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKIGV4dGVybiBpbnQgY3UyX25vdGlmaWVyX2NhbGxfY2hhaW4odW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYpOwogCisjZGVmaW5lIGN1Ml9ub3RpZmllcihmbiwgcHJpKQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZm4jI19uYiBfX2NwdWluaXRkYXRhID0gewkJXAorCQkubm90aWZpZXJfY2FsbCA9IGZuLAkJCQkJXAorCQkucHJpb3JpdHkgPSBwcmkJCQkJCQlcCisJfTsJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlyZWdpc3Rlcl9jdTJfbm90aWZpZXIoJmZuIyNfbmIpOwkJCQlcCit9KQorCiAjZW5kaWYgLyogX19BU01fQ09QMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LWZlYXR1cmVzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LWZlYXR1cmVzLmgKaW5kZXggYWM3M2NlZC4uY2E0MDBmNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS1mZWF0dXJlcy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUtZmVhdHVyZXMuaApAQCAtMTU5LDcgKzE1OSw4IEBACiAKIC8qCiAgKiBNSVBTMzIsIE1JUFM2NCwgVlI1NTAwLCBJRFQzMjMzMiwgSURUMzIzMzQgYW5kIG1heWJlIGEgZmV3IG90aGVyCi0gKiBwcmUtTUlQUzMyL01JUFM1MyBwcm9jZXNzb3JzIGhhdmUgQ0xPLCBDTFouICBGb3IgNjQtYml0IGtlcm5lbHMKKyAqIHByZS1NSVBTMzIvTUlQUzUzIHByb2Nlc3NvcnMgaGF2ZSBDTE8sIENMWi4gIFRoZSBJRFQgUkM2NDU3NCBpcyA2NC1iaXQgYW5kCisgKiBoYXMgQ0xPIGFuZCBDTFogYnV0IG5vdCBEQ0xPIG5vciBEQ0xaLiAgRm9yIDY0LWJpdCBrZXJuZWxzCiAgKiBjcHVfaGFzX2Nsb19jbHogYWxzbyBpbmRpY2F0ZXMgdGhlIGF2YWlsYWJpbGl0eSBvZiBEQ0xPIGFuZCBEQ0xaLgogICovCiAjIGlmbmRlZiBjcHVfaGFzX2Nsb19jbHoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUuaAppbmRleCBhNWFjZGE0Li5iMjAxYThmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS5oCkBAIC0zNCw3ICszNCw3IEBACiAjZGVmaW5lIFBSSURfQ09NUF9MU0kJCTB4MDgwMDAwCiAjZGVmaW5lIFBSSURfQ09NUF9MRVhSQQkJMHgwYjAwMDAKICNkZWZpbmUgUFJJRF9DT01QX0NBVklVTQkweDBkMDAwMAotCisjZGVmaW5lIFBSSURfQ09NUF9JTkdFTklDCTB4ZDAwMDAwCiAKIC8qCiAgKiBBc3NpZ25lZCB2YWx1ZXMgZm9yIHRoZSBwcm9kdWN0IElEIHJlZ2lzdGVyLiAgSW4gb3JkZXIgdG8gZGV0ZWN0IGEKQEAgLTEzMyw2ICsxMzMsMTIgQEAKICNkZWZpbmUgUFJJRF9JTVBfQ0FWSVVNX0NONTJYWCAweDA3MDAKIAogLyoKKyAqIFRoZXNlIGFyZSB0aGUgUFJJRCdzIGZvciB3aGVuIDIzOjE2ID09IFBSSURfQ09NUF9JTkdFTklDCisgKi8KKworI2RlZmluZSBQUklEX0lNUF9KWlJJU0MgICAgICAgIDB4MDIwMAorCisvKgogICogRGVmaW5pdGlvbnMgZm9yIDc6MCBvbiBsZWdhY3kgcHJvY2Vzc29ycwogICovCiAKQEAgLTIxOSw2ICsyMjUsNyBAQAogCUNQVV80S0MsIENQVV80S0VDLCBDUFVfNEtTQywgQ1BVXzI0SywgQ1BVXzM0SywgQ1BVXzEwMDRLLCBDUFVfNzRLLAogCUNQVV9BTENIRU1ZLCBDUFVfUFI0NDUwLCBDUFVfQkNNMzMwMiwgQ1BVX0JDTTQ3MTAsCiAJQ1BVX0JDTTYzMzgsIENQVV9CQ002MzQ1LCBDUFVfQkNNNjM0OCwgQ1BVX0JDTTYzNTgsCisJQ1BVX0paUklTQywKIAogCS8qCiAJICogTUlQUzY0IGNsYXNzIHByb2Nlc3NvcnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCBlYTc3YTQyLi5mZDFkMzllIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0zNzIsNCArMzcyLDkgQEAKIHN0cnVjdCBsaW51eF9iaW5wcm07CiBleHRlcm4gaW50IGFyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAogCQkJCSAgICAgICBpbnQgdXNlc19pbnRlcnApOworCitzdHJ1Y3QgbW1fc3RydWN0OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXJjaF9yYW5kb21pemVfYnJrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKKyNkZWZpbmUgYXJjaF9yYW5kb21pemVfYnJrIGFyY2hfcmFuZG9taXplX2JyaworCiAjZW5kaWYgLyogX0FTTV9FTEZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2VtbWEvZW1tYTJyaC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2VtbWEvZW1tYTJyaC5oCmluZGV4IDJhZmIyZmUuLmMxNDQ5ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9lbW1hL2VtbWEycmguaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZW1tYS9lbW1hMnJoLmgKQEAgLTk5LDg4ICs5OSwyMiBAQAogI2RlZmluZSBFTU1BMlJIX1BDSV9DT05GSUdfQkFTRQlFTU1BMlJIX1BDSV9JT19CQVNFCiAjZGVmaW5lIEVNTUEyUkhfUENJX0NPTkZJR19TSVpFCUVNTUEyUkhfUENJX0lPX1NJWkUKIAotI2RlZmluZSBOVU1fQ1BVX0lSUQkJOAogI2RlZmluZSBOVU1fRU1NQTJSSF9JUlEJCTk2CiAKLSNkZWZpbmUgQ1BVX0VNTUEyUkhfQ0FTQ0FERQkyCi0jZGVmaW5lIENQVV9JUlFfQkFTRQkJTUlQU19DUFVfSVJRX0JBU0UKLSNkZWZpbmUgRU1NQTJSSF9JUlFfQkFTRQkoQ1BVX0lSUV9CQVNFICsgTlVNX0NQVV9JUlEpCisjZGVmaW5lIEVNTUEyUkhfSVJRX0JBU0UJKE1JUFNfQ1BVX0lSUV9CQVNFICsgOCkKIAogLyoKICAqIGVtbWEycmggaXJxIGRlZnMKICAqLwogCi0jZGVmaW5lIEVNTUEyUkhfSVJRX0lOVDAJKDAgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQxCSgxICsgRU1NQTJSSF9JUlFfQkFTRSkKLSNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMgkoMiArIEVNTUEyUkhfSVJRX0JBU0UpCi0jZGVmaW5lIEVNTUEyUkhfSVJRX0lOVDMJKDMgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ0CSg0ICsgRU1NQTJSSF9JUlFfQkFTRSkKLSNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNQkoNSArIEVNTUEyUkhfSVJRX0JBU0UpCi0jZGVmaW5lIEVNTUEyUkhfSVJRX0lOVDYJKDYgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ3CSg3ICsgRU1NQTJSSF9JUlFfQkFTRSkKLSNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UOAkoOCArIEVNTUEyUkhfSVJRX0JBU0UpCi0jZGVmaW5lIEVNTUEyUkhfSVJRX0lOVDkJKDkgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQxMAkoMTAgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQxMQkoMTEgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQxMgkoMTIgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQxMwkoMTMgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQxNAkoMTQgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQxNQkoMTUgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQxNgkoMTYgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQxNwkoMTcgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQxOAkoMTggKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQxOQkoMTkgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQyMAkoMjAgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQyMQkoMjEgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQyMgkoMjIgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQyMwkoMjMgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQyNAkoMjQgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQyNQkoMjUgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQyNgkoMjYgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQyNwkoMjcgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQyOAkoMjggKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQyOQkoMjkgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQzMAkoMzAgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQzMQkoMzEgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQzMgkoMzIgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQzMwkoMzMgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQzNAkoMzQgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQzNQkoMzUgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQzNgkoMzYgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQzNwkoMzcgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQzOAkoMzggKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQzOQkoMzkgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ0MAkoNDAgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ0MQkoNDEgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ0MgkoNDIgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ0MwkoNDMgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ0NAkoNDQgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ0NQkoNDUgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ0NgkoNDYgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ0NwkoNDcgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ0OAkoNDggKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ0OQkoNDkgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ1MAkoNTAgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ1MQkoNTEgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ1MgkoNTIgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ1MwkoNTMgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ1NAkoNTQgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ1NQkoNTUgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ1NgkoNTYgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ1NwkoNTcgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ1OAkoNTggKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ1OQkoNTkgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ2MAkoNjAgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ2MQkoNjEgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ2MgkoNjIgKyBFTU1BMlJIX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ2MwkoNjMgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQobikJKEVNTUEyUkhfSVJRX0JBU0UgKyAobikpCiAKLSNkZWZpbmUgRU1NQTJSSF9JUlFfUEZVUjAJRU1NQTJSSF9JUlFfSU5UNDkKLSNkZWZpbmUgRU1NQTJSSF9JUlFfUEZVUjEJRU1NQTJSSF9JUlFfSU5UNTAKLSNkZWZpbmUgRU1NQTJSSF9JUlFfUEZVUjIJRU1NQTJSSF9JUlFfSU5UNTEKLSNkZWZpbmUgRU1NQTJSSF9JUlFfUElJQzAJRU1NQTJSSF9JUlFfSU5UNTYKLSNkZWZpbmUgRU1NQTJSSF9JUlFfUElJQzEJRU1NQTJSSF9JUlFfSU5UNTcKLSNkZWZpbmUgRU1NQTJSSF9JUlFfUElJQzIJRU1NQTJSSF9JUlFfSU5UNTgKKyNkZWZpbmUgRU1NQTJSSF9JUlFfUEZVUjAJRU1NQTJSSF9JUlFfSU5UKDQ5KQorI2RlZmluZSBFTU1BMlJIX0lSUV9QRlVSMQlFTU1BMlJIX0lSUV9JTlQoNTApCisjZGVmaW5lIEVNTUEyUkhfSVJRX1BGVVIyCUVNTUEyUkhfSVJRX0lOVCg1MSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfUElJQzAJRU1NQTJSSF9JUlFfSU5UKDU2KQorI2RlZmluZSBFTU1BMlJIX0lSUV9QSUlDMQlFTU1BMlJIX0lSUV9JTlQoNTcpCisjZGVmaW5lIEVNTUEyUkhfSVJRX1BJSUMyCUVNTUEyUkhfSVJRX0lOVCg1OCkKIAogLyoKICAqICBFTU1BMlJIIFJlZ2lzdGVyIEFjY2VzcwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2VtbWEvbWFya2VpbnMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9lbW1hL21hcmtlaW5zLmgKaW5kZXggMjYxOGJmMi4uYmYyZDIyOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2VtbWEvbWFya2VpbnMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZW1tYS9tYXJrZWlucy5oCkBAIC0yNSw0NCArMjUsMTMgQEAKICNkZWZpbmUgTlVNX0VNTUEyUkhfSVJRX1NXCTMyCiAjZGVmaW5lIE5VTV9FTU1BMlJIX0lSUV9HUElPCTMyCiAKLSNkZWZpbmUgRU1NQTJSSF9TV19DQVNDQURFCShFTU1BMlJIX0lSUV9JTlQ3IC0gRU1NQTJSSF9JUlFfSU5UMCkKLSNkZWZpbmUgRU1NQTJSSF9HUElPX0NBU0NBREUJKEVNTUEyUkhfSVJRX0lOVDQ2IC0gRU1NQTJSSF9JUlFfSU5UMCkKKyNkZWZpbmUgRU1NQTJSSF9TV19DQVNDQURFCShFTU1BMlJIX0lSUV9JTlQoNykgLSBFTU1BMlJIX0lSUV9JTlQoMCkpCisjZGVmaW5lIEVNTUEyUkhfR1BJT19DQVNDQURFCShFTU1BMlJIX0lSUV9JTlQoNDYpIC0gRU1NQTJSSF9JUlFfSU5UKDApKQogCiAjZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0JBU0UJKEVNTUEyUkhfSVJRX0JBU0UgKyBOVU1fRU1NQTJSSF9JUlEpCiAjZGVmaW5lIEVNTUEyUkhfR1BJT19JUlFfQkFTRQkoRU1NQTJSSF9TV19JUlFfQkFTRSArIE5VTV9FTU1BMlJIX0lSUV9TVykKIAotI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQwCSgwK0VNTUEyUkhfU1dfSVJRX0JBU0UpCi0jZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDEJKDErRU1NQTJSSF9TV19JUlFfQkFTRSkKLSNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UMgkoMitFTU1BMlJIX1NXX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQzCSgzK0VNTUEyUkhfU1dfSVJRX0JBU0UpCi0jZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDQJKDQrRU1NQTJSSF9TV19JUlFfQkFTRSkKLSNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UNQkoNStFTU1BMlJIX1NXX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQ2CSg2K0VNTUEyUkhfU1dfSVJRX0JBU0UpCi0jZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDcJKDcrRU1NQTJSSF9TV19JUlFfQkFTRSkKLSNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UOAkoOCtFTU1BMlJIX1NXX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQ5CSg5K0VNTUEyUkhfU1dfSVJRX0JBU0UpCi0jZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDEwCSgxMCtFTU1BMlJIX1NXX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQxMQkoMTErRU1NQTJSSF9TV19JUlFfQkFTRSkKLSNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UMTIJKDEyK0VNTUEyUkhfU1dfSVJRX0JBU0UpCi0jZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDEzCSgxMytFTU1BMlJIX1NXX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQxNAkoMTQrRU1NQTJSSF9TV19JUlFfQkFTRSkKLSNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UMTUJKDE1K0VNTUEyUkhfU1dfSVJRX0JBU0UpCi0jZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDE2CSgxNitFTU1BMlJIX1NXX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQxNwkoMTcrRU1NQTJSSF9TV19JUlFfQkFTRSkKLSNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UMTgJKDE4K0VNTUEyUkhfU1dfSVJRX0JBU0UpCi0jZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDE5CSgxOStFTU1BMlJIX1NXX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQyMAkoMjArRU1NQTJSSF9TV19JUlFfQkFTRSkKLSNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UMjEJKDIxK0VNTUEyUkhfU1dfSVJRX0JBU0UpCi0jZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDIyCSgyMitFTU1BMlJIX1NXX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQyMwkoMjMrRU1NQTJSSF9TV19JUlFfQkFTRSkKLSNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UMjQJKDI0K0VNTUEyUkhfU1dfSVJRX0JBU0UpCi0jZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDI1CSgyNStFTU1BMlJIX1NXX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQyNgkoMjYrRU1NQTJSSF9TV19JUlFfQkFTRSkKLSNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UMjcJKDI3K0VNTUEyUkhfU1dfSVJRX0JBU0UpCi0jZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDI4CSgyOCtFTU1BMlJIX1NXX0lSUV9CQVNFKQotI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQyOQkoMjkrRU1NQTJSSF9TV19JUlFfQkFTRSkKLSNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UMzAJKDMwK0VNTUEyUkhfU1dfSVJRX0JBU0UpCi0jZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDMxCSgzMStFTU1BMlJIX1NXX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQobikJKEVNTUEyUkhfU1dfSVJRX0JBU0UgKyAobikpCiAKICNkZWZpbmUgTUFSS0VJTlNfUENJX0lSUV9JTlRBCUVNTUEyUkhfR1BJT19JUlFfQkFTRSsxNQogI2RlZmluZSBNQVJLRUlOU19QQ0lfSVJRX0lOVEIJRU1NQTJSSF9HUElPX0lSUV9CQVNFKzE2CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaGF6YXJkcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2hhemFyZHMuaAppbmRleCAwZWFmNzdmLi40ZTMzMjE2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaGF6YXJkcy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9oYXphcmRzLmgKQEAgLTg3LDcgKzg3LDcgQEAKIAk6ICI9ciIgKHRtcCkpOwkJCQkJCQlcCiB9IHdoaWxlICgwKQogCi0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQU1IxKSAmJiAhZGVmaW5lZChDT05GSUdfTUFDSF9BTENIRU1ZKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFNSMSkgJiYgIWRlZmluZWQoQ09ORklHX01JUFNfQUxDSEVNWSkKIAogLyoKICAqIFRoZXNlIGFyZSBzbGlnaHRseSBjb21wbGljYXRlZCBieSB0aGUgZmFjdCB0aGF0IHdlIGd1YXJhbnRlZSBSMSBrZXJuZWxzIHRvCkBAIC0xMzgsNyArMTM4LDcgQEAKIAkJX19pbnN0cnVjdGlvbl9oYXphcmQoKTsJCQkJCVwKIH0gd2hpbGUgKDApCiAKLSNlbGlmIGRlZmluZWQoQ09ORklHX01BQ0hfQUxDSEVNWSkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04pIHx8IFwKKyNlbGlmIGRlZmluZWQoQ09ORklHX01JUFNfQUxDSEVNWSkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04pIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9MT09OR1NPTjIpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9SMTAwMDApIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9SNTUwMCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2luc3QuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pbnN0LmgKaW5kZXggNjQ4OWYwMC4uNDQ0ZmY3MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2luc3QuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vaW5zdC5oCkBAIC0yNDcsNiArMjQ3LDEyIEBACiAJdW5zaWduZWQgaW50IGZtdCA6IDI7CiB9OwogCitzdHJ1Y3QgYl9mb3JtYXQgeyAvKiBCUkVBSyBhbmQgU1lTQ0FMTCAqLworCXVuc2lnbmVkIGludCBvcGNvZGU6NjsKKwl1bnNpZ25lZCBpbnQgY29kZToyMDsKKwl1bnNpZ25lZCBpbnQgZnVuYzo2OworfTsKKwogI2VsaWYgZGVmaW5lZChfX01JUFNFTF9fKQogCiBzdHJ1Y3Qgal9mb3JtYXQgewkvKiBKdW1wIGZvcm1hdCAqLwpAQCAtMzE0LDYgKzMyMCwxMiBAQAogCXVuc2lnbmVkIGludCBvcGNvZGUgOiA2OwogfTsKIAorc3RydWN0IGJfZm9ybWF0IHsgLyogQlJFQUsgYW5kIFNZU0NBTEwgKi8KKwl1bnNpZ25lZCBpbnQgZnVuYzo2OworCXVuc2lnbmVkIGludCBjb2RlOjIwOworCXVuc2lnbmVkIGludCBvcGNvZGU6NjsKK307CisKICNlbHNlIC8qICFkZWZpbmVkIChfX01JUFNFQl9fKSAmJiAhZGVmaW5lZCAoX19NSVBTRUxfXykgKi8KICNlcnJvciAiTUlQUyBidXQgbmVpdGhlciBfX01JUFNFTF9fIG5vciBfX01JUFNFQl9fPyIKICNlbmRpZgpAQCAtMzI4LDcgKzM0MCw4IEBACiAJc3RydWN0IGNfZm9ybWF0IGNfZm9ybWF0OwogCXN0cnVjdCByX2Zvcm1hdCByX2Zvcm1hdDsKIAlzdHJ1Y3QgZl9mb3JtYXQgZl9mb3JtYXQ7Ci0gICAgICAgIHN0cnVjdCBtYV9mb3JtYXQgbWFfZm9ybWF0OworCXN0cnVjdCBtYV9mb3JtYXQgbWFfZm9ybWF0OworCXN0cnVjdCBiX2Zvcm1hdCBiX2Zvcm1hdDsKIH07CiAKIC8qIEhBQ0hBQ0hBSENBSEMgLi4uICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2tkZWJ1Zy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2tkZWJ1Zy5oCmluZGV4IDViZjYyYWEuLjZhOWFmNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9rZGVidWcuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20va2RlYnVnLmgKQEAgLTgsNiArOCw5IEBACiAJRElFX0ZQLAogCURJRV9UUkFQLAogCURJRV9SSSwKKwlESUVfUEFHRV9GQVVMVCwKKwlESUVfQlJFQUssCisJRElFX1NTVEVQQlAKIH07CiAKICNlbmRpZiAvKiBfQVNNX01JUFNfS0RFQlVHX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9rZ2RiLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20va2dkYi5oCmluZGV4IDE5MDAyZDYuLmU2YzBiMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9rZ2RiLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2tnZGIuaApAQCAtOCwyOCArOCwyNyBAQAogI2lmIChfTUlQU19JU0EgPT0gX01JUFNfSVNBX01JUFMxKSB8fCAoX01JUFNfSVNBID09IF9NSVBTX0lTQV9NSVBTMikgfHwgXAogCShfTUlQU19JU0EgPT0gX01JUFNfSVNBX01JUFMzMikKIAotI2RlZmluZSBLR0RCX0dEQl9SRUdfU0laRSAzMgorI2RlZmluZSBLR0RCX0dEQl9SRUdfU0laRQkzMgorI2RlZmluZSBHREJfU0laRU9GX1JFRwkJc2l6ZW9mKHUzMikKIAogI2VsaWYgKF9NSVBTX0lTQSA9PSBfTUlQU19JU0FfTUlQUzMpIHx8IChfTUlQU19JU0EgPT0gX01JUFNfSVNBX01JUFM0KSB8fCBcCiAJKF9NSVBTX0lTQSA9PSBfTUlQU19JU0FfTUlQUzY0KQogCiAjaWZkZWYgQ09ORklHXzMyQklUCi0jZGVmaW5lIEtHREJfR0RCX1JFR19TSVpFIDMyCisjZGVmaW5lIEtHREJfR0RCX1JFR19TSVpFCTMyCisjZGVmaW5lIEdEQl9TSVpFT0ZfUkVHCQlzaXplb2YodTMyKQogI2Vsc2UgLyogQ09ORklHX0NQVV8zMkJJVCAqLwotI2RlZmluZSBLR0RCX0dEQl9SRUdfU0laRSA2NAorI2RlZmluZSBLR0RCX0dEQl9SRUdfU0laRQk2NAorI2RlZmluZSBHREJfU0laRU9GX1JFRwkJc2l6ZW9mKHU2NCkKICNlbmRpZgogI2Vsc2UKICNlcnJvciAiTmVlZCB0byBzZXQgS0dEQl9HREJfUkVHX1NJWkUgZm9yIE1JUFMgSVNBIgogI2VuZGlmIC8qIF9NSVBTX0lTQSAqLwogCiAjZGVmaW5lIEJVRk1BWAkJCTIwNDgKLSNpZiAoS0dEQl9HREJfUkVHX1NJWkUgPT0gMzIpCi0jZGVmaW5lIE5VTVJFR0JZVEVTCQkoOTAqc2l6ZW9mKHUzMikpCi0jZGVmaW5lIE5VTUNSSVRSRUdCWVRFUwkJKDEyKnNpemVvZih1MzIpKQotI2Vsc2UKLSNkZWZpbmUgTlVNUkVHQllURVMJCSg5MCpzaXplb2YodTY0KSkKLSNkZWZpbmUgTlVNQ1JJVFJFR0JZVEVTCQkoMTIqc2l6ZW9mKHU2NCkpCi0jZW5kaWYKKyNkZWZpbmUgREJHX01BWF9SRUdfTlVNCQk3MgorI2RlZmluZSBOVU1SRUdCWVRFUwkJKERCR19NQVhfUkVHX05VTSAqIHNpemVvZihHREJfU0laRU9GX1JFRykpCisjZGVmaW5lIE5VTUNSSVRSRUdCWVRFUwkJKDEyICogc2l6ZW9mKEdEQl9TSVpFT0ZfUkVHKSkKICNkZWZpbmUgQlJFQUtfSU5TVFJfU0laRQk0CiAjZGVmaW5lIENBQ0hFX0ZMVVNIX0lTX1NBRkUJMAogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20va3Byb2Jlcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2twcm9iZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmVhNGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2twcm9iZXMuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogIEtlcm5lbCBQcm9iZXMgKEtQcm9iZXMpCisgKiAgaW5jbHVkZS9hc20tbWlwcy9rcHJvYmVzLmgKKyAqCisgKiAgQ29weXJpZ2h0IDIwMDYgU29ueSBDb3JwLgorICogIENvcHlyaWdodCAyMDEwIENhdml1bSBOZXR3b3JrcworICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZm5kZWYgX0FTTV9LUFJPQkVTX0gKKyNkZWZpbmUgX0FTTV9LUFJPQkVTX0gKKworI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KKyNpbmNsdWRlIDxhc20vaW5zdC5oPgorCisjZGVmaW5lICBfX0FSQ0hfV0FOVF9LUFJPQkVTX0lOU05fU0xPVAorCitzdHJ1Y3Qga3Byb2JlOworc3RydWN0IHB0X3JlZ3M7CisKK3R5cGVkZWYgdW5pb24gbWlwc19pbnN0cnVjdGlvbiBrcHJvYmVfb3Bjb2RlX3Q7CisKKyNkZWZpbmUgTUFYX0lOU05fU0laRSAyCisKKyNkZWZpbmUgZmx1c2hfaW5zbl9zbG90KHApCQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlmbHVzaF9pY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpcC0+YWRkciwJCQlcCisJCQkgICAodW5zaWduZWQgbG9uZylwLT5hZGRyICsJCQlcCisJCQkgICAoTUFYX0lOU05fU0laRSAqIHNpemVvZihrcHJvYmVfb3Bjb2RlX3QpKSk7CVwKK30gd2hpbGUgKDApCisKKworI2RlZmluZSBrcmV0cHJvYmVfYmxhY2tsaXN0X3NpemUgMAorCit2b2lkIGFyY2hfcmVtb3ZlX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKTsKKworLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvcHkgb2Ygb3JpZ2luYWwgaW5zdHJ1Y3Rpb24qLworc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiB7CisJLyogY29weSBvZiB0aGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gKi8KKwlrcHJvYmVfb3Bjb2RlX3QgKmluc247Cit9OworCitzdHJ1Y3QgcHJldl9rcHJvYmUgeworCXN0cnVjdCBrcHJvYmUgKmtwOworCXVuc2lnbmVkIGxvbmcgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgb2xkX1NSOworCXVuc2lnbmVkIGxvbmcgc2F2ZWRfU1I7CisJdW5zaWduZWQgbG9uZyBzYXZlZF9lcGM7Cit9OworCisjZGVmaW5lIE1BWF9KUFJPQkVTX1NUQUNLX1NJWkUgMTI4CisjZGVmaW5lIE1BWF9KUFJPQkVTX1NUQUNLX0FERFIgXAorCSgoKHVuc2lnbmVkIGxvbmcpY3VycmVudF90aHJlYWRfaW5mbygpKSArIFRIUkVBRF9TSVpFIC0gMzIgLSBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKQorCisjZGVmaW5lIE1JTl9KUFJPQkVTX1NUQUNLX1NJWkUoQUREUikJCQkJCVwKKwkoKCgoQUREUikgKyBNQVhfSlBST0JFU19TVEFDS19TSVpFKSA+IE1BWF9KUFJPQkVTX1NUQUNLX0FERFIpCVwKKwkJPyBNQVhfSlBST0JFU19TVEFDS19BRERSIC0gKEFERFIpCQkJXAorCQk6IE1BWF9KUFJPQkVTX1NUQUNLX1NJWkUpCisKKworLyogcGVyLWNwdSBrcHJvYmUgY29udHJvbCBibG9jayAqLworc3RydWN0IGtwcm9iZV9jdGxibGsgeworCXVuc2lnbmVkIGxvbmcga3Byb2JlX3N0YXR1czsKKwl1bnNpZ25lZCBsb25nIGtwcm9iZV9vbGRfU1I7CisJdW5zaWduZWQgbG9uZyBrcHJvYmVfc2F2ZWRfU1I7CisJdW5zaWduZWQgbG9uZyBrcHJvYmVfc2F2ZWRfZXBjOworCXVuc2lnbmVkIGxvbmcganByb2JlX3NhdmVkX3NwOworCXN0cnVjdCBwdF9yZWdzIGpwcm9iZV9zYXZlZF9yZWdzOworCXU4IGpwcm9iZXNfc3RhY2tbTUFYX0pQUk9CRVNfU1RBQ0tfU0laRV07CisJc3RydWN0IHByZXZfa3Byb2JlIHByZXZfa3Byb2JlOworfTsKKworZXh0ZXJuIGludCBrcHJvYmVfZXhjZXB0aW9uc19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSk7CisKKyNlbmRpZgkJCQkvKiBfQVNNX0tQUk9CRVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2xvY2FsNjQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9sb2NhbDY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjOTNiNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9sb2NhbDY0LmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsNjQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTF4eHhfZXRoLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxeHh4X2V0aC5oCmluZGV4IGJhZTliNzUuLjQ5ZGM4ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTF4eHhfZXRoLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MXh4eF9ldGguaApAQCAtOSw2ICs5LDcgQEAKIAlpbnQgcGh5X2FkZHI7CiAJaW50IHBoeV9idXNpZDsKIAlpbnQgcGh5X2lycTsKKwljaGFyIG1hY1s2XTsKIH07CiAKIHZvaWQgX19pbml0IGF1MXh4eF9vdmVycmlkZV9ldGhfY2ZnKHVuc2lnbmVkIHBvcnQsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY200N3h4L252cmFtLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY200N3h4L252cmFtLmgKaW5kZXggMGQ4Y2MxNC4uYzU4ZWJkOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNDd4eC9udnJhbS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTQ3eHgvbnZyYW0uaApAQCAtMzEsNiArMzEsOSBAQAogI2RlZmluZSBOVlJBTV9NQVhfVkFMVUVfTEVOIDI1NQogI2RlZmluZSBOVlJBTV9NQVhfUEFSQU1fTEVOIDY0CiAKKyNkZWZpbmUgTlZSQU1fRVJSX0lOVl9QQVJBTQktOAorI2RlZmluZSBOVlJBTV9FUlJfRU5WTk9URk9VTkQJLTkKKwogZXh0ZXJuIGludCBudnJhbV9nZXRlbnYoY2hhciAqbmFtZSwgY2hhciAqdmFsLCBzaXplX3QgdmFsX2xlbik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtY2F2aXVtLW9jdGVvbi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWNhdml1bS1vY3Rlb24vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKaW5kZXggYmJmMDU0MC4uYjk1MmZjNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtY2F2aXVtLW9jdGVvbi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1jYXZpdW0tb2N0ZW9uL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCkBAIC02MSwyMSArNjEsMTggQEAKIAogI2RlZmluZSBrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSAoY3B1X2RhdGFbMF0uY3B1dHlwZSA9PSBDUFVfQ0FWSVVNX09DVEVPTl9QTFVTKQogCi0jZGVmaW5lIEFSQ0hfSEFTX1JFQURfQ1VSUkVOVF9USU1FUiAxCiAjZGVmaW5lIEFSQ0hfSEFTX0lSUV9QRVJfQ1BVCTEKICNkZWZpbmUgQVJDSF9IQVNfU1BJTkxPQ0tfUFJFRkVUQ0ggMQogI2RlZmluZSBzcGluX2xvY2tfcHJlZmV0Y2goeCkgcHJlZmV0Y2goeCkKICNkZWZpbmUgUFJFRkVUQ0hfU1RSSURFIDEyOAogCi1zdGF0aWMgaW5saW5lIGludCByZWFkX2N1cnJlbnRfdGltZXIodW5zaWduZWQgbG9uZyAqcmVzdWx0KQotewotCWFzbSB2b2xhdGlsZSAoInJkaHdyICUwLCQzMVxuIgotI2lmbmRlZiBDT05GSUdfNjRCSVQKLQkJICAgICAgIlx0c2xsICUwLCAwIgorI2lmZGVmIF9fT0NURU9OX18KKy8qCisgKiBBbGwgZ2NjIHZlcnNpb25zIHRoYXQgaGF2ZSBPQ1RFT04gc3VwcG9ydCBkZWZpbmUgX19PQ1RFT05fXyBhbmQgaGF2ZSB0aGUKKyAqICBfX2J1aWx0aW5fcG9wY291bnQgc3VwcG9ydC4KKyAqLworI2RlZmluZSBBUkNIX0hBU19VU0FCTEVfQlVJTFRJTl9QT1BDT1VOVCAxCiAjZW5kaWYKLQkJICAgICAgOiAiPXIiICgqcmVzdWx0KSk7Ci0JcmV0dXJuIDA7Ci19CiAKIHN0YXRpYyBpbmxpbmUgaW50IG9jdGVvbl9oYXNfc2FhKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1jYXZpdW0tb2N0ZW9uL2lycS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtY2F2aXVtLW9jdGVvbi9pcnEuaAppbmRleCBkMzIyMjBmLi42ZGRhYjhhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1jYXZpdW0tb2N0ZW9uL2lycS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWNhdml1bS1vY3Rlb24vaXJxLmgKQEAgLTE3Miw3MSArMTcyLDkgQEAKICNpZmRlZiBDT05GSUdfUENJX01TSQogLyogMTUyIC0gMjE1IHJlcHJlc2VudCB0aGUgTVNJIGludGVycnVwdHMgMC02MyAqLwogI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQwCTE1MgotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQxCTE1MwotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQyCTE1NAotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQzCTE1NQotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQ0CTE1NgotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQ1CTE1NwotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQ2CTE1OAotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQ3CTE1OQotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQ4CTE2MAotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQ5CTE2MQotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQxMAkxNjIKLSNkZWZpbmUgT0NURU9OX0lSUV9NU0lfQklUMTEJMTYzCi0jZGVmaW5lIE9DVEVPTl9JUlFfTVNJX0JJVDEyCTE2NAotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQxMwkxNjUKLSNkZWZpbmUgT0NURU9OX0lSUV9NU0lfQklUMTQJMTY2Ci0jZGVmaW5lIE9DVEVPTl9JUlFfTVNJX0JJVDE1CTE2NwotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQxNgkxNjgKLSNkZWZpbmUgT0NURU9OX0lSUV9NU0lfQklUMTcJMTY5Ci0jZGVmaW5lIE9DVEVPTl9JUlFfTVNJX0JJVDE4CTE3MAotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQxOQkxNzEKLSNkZWZpbmUgT0NURU9OX0lSUV9NU0lfQklUMjAJMTcyCi0jZGVmaW5lIE9DVEVPTl9JUlFfTVNJX0JJVDIxCTE3MwotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQyMgkxNzQKLSNkZWZpbmUgT0NURU9OX0lSUV9NU0lfQklUMjMJMTc1Ci0jZGVmaW5lIE9DVEVPTl9JUlFfTVNJX0JJVDI0CTE3NgotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQyNQkxNzcKLSNkZWZpbmUgT0NURU9OX0lSUV9NU0lfQklUMjYJMTc4Ci0jZGVmaW5lIE9DVEVPTl9JUlFfTVNJX0JJVDI3CTE3OQotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQyOAkxODAKLSNkZWZpbmUgT0NURU9OX0lSUV9NU0lfQklUMjkJMTgxCi0jZGVmaW5lIE9DVEVPTl9JUlFfTVNJX0JJVDMwCTE4MgotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQzMQkxODMKLSNkZWZpbmUgT0NURU9OX0lSUV9NU0lfQklUMzIJMTg0Ci0jZGVmaW5lIE9DVEVPTl9JUlFfTVNJX0JJVDMzCTE4NQotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQzNAkxODYKLSNkZWZpbmUgT0NURU9OX0lSUV9NU0lfQklUMzUJMTg3Ci0jZGVmaW5lIE9DVEVPTl9JUlFfTVNJX0JJVDM2CTE4OAotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQzNwkxODkKLSNkZWZpbmUgT0NURU9OX0lSUV9NU0lfQklUMzgJMTkwCi0jZGVmaW5lIE9DVEVPTl9JUlFfTVNJX0JJVDM5CTE5MQotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQ0MAkxOTIKLSNkZWZpbmUgT0NURU9OX0lSUV9NU0lfQklUNDEJMTkzCi0jZGVmaW5lIE9DVEVPTl9JUlFfTVNJX0JJVDQyCTE5NAotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQ0MwkxOTUKLSNkZWZpbmUgT0NURU9OX0lSUV9NU0lfQklUNDQJMTk2Ci0jZGVmaW5lIE9DVEVPTl9JUlFfTVNJX0JJVDQ1CTE5NwotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQ0NgkxOTgKLSNkZWZpbmUgT0NURU9OX0lSUV9NU0lfQklUNDcJMTk5Ci0jZGVmaW5lIE9DVEVPTl9JUlFfTVNJX0JJVDQ4CTIwMAotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQ0OQkyMDEKLSNkZWZpbmUgT0NURU9OX0lSUV9NU0lfQklUNTAJMjAyCi0jZGVmaW5lIE9DVEVPTl9JUlFfTVNJX0JJVDUxCTIwMwotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQ1MgkyMDQKLSNkZWZpbmUgT0NURU9OX0lSUV9NU0lfQklUNTMJMjA1Ci0jZGVmaW5lIE9DVEVPTl9JUlFfTVNJX0JJVDU0CTIwNgotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQ1NQkyMDcKLSNkZWZpbmUgT0NURU9OX0lSUV9NU0lfQklUNTYJMjA4Ci0jZGVmaW5lIE9DVEVPTl9JUlFfTVNJX0JJVDU3CTIwOQotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQ1OAkyMTAKLSNkZWZpbmUgT0NURU9OX0lSUV9NU0lfQklUNTkJMjExCi0jZGVmaW5lIE9DVEVPTl9JUlFfTVNJX0JJVDYwCTIxMgotI2RlZmluZSBPQ1RFT05fSVJRX01TSV9CSVQ2MQkyMTMKLSNkZWZpbmUgT0NURU9OX0lSUV9NU0lfQklUNjIJMjE0Ci0jZGVmaW5lIE9DVEVPTl9JUlFfTVNJX0JJVDYzCTIxNQorI2RlZmluZSBPQ1RFT05fSVJRX01TSV9MQVNUCShPQ1RFT05fSVJRX01TSV9CSVQwICsgMjU1KQogCi0jZGVmaW5lIE9DVEVPTl9JUlFfTEFTVCAgICAgICAgIDIxNgorI2RlZmluZSBPQ1RFT05fSVJRX0xBU1QJCShPQ1RFT05fSVJRX01TSV9MQVNUICsgMSkKICNlbHNlCiAjZGVmaW5lIE9DVEVPTl9JUlFfTEFTVCAgICAgICAgIDE1MgogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1qejQ3NDAvYmFzZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtano0NzQwL2Jhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzczMTg2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtano0NzQwL2Jhc2UuaApAQCAtMCwwICsxLDI2IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfSlo0NzQwX0JBU0VfSF9fCisjZGVmaW5lIF9fQVNNX01BQ0hfSlo0NzQwX0JBU0VfSF9fCisKKyNkZWZpbmUgSlo0NzQwX0NQTV9CQVNFX0FERFIJMHgxMDAwMDAwMAorI2RlZmluZSBKWjQ3NDBfSU5UQ19CQVNFX0FERFIJMHgxMDAwMTAwMAorI2RlZmluZSBKWjQ3NDBfV0RUX0JBU0VfQUREUgkweDEwMDAyMDAwCisjZGVmaW5lIEpaNDc0MF9UQ1VfQkFTRV9BRERSCTB4MTAwMDIwMTAKKyNkZWZpbmUgSlo0NzQwX1JUQ19CQVNFX0FERFIJMHgxMDAwMzAwMAorI2RlZmluZSBKWjQ3NDBfR1BJT19CQVNFX0FERFIJMHgxMDAxMDAwMAorI2RlZmluZSBKWjQ3NDBfQUlDX0JBU0VfQUREUgkweDEwMDIwMDAwCisjZGVmaW5lIEpaNDc0MF9NU0NfQkFTRV9BRERSCTB4MTAwMjEwMDAKKyNkZWZpbmUgSlo0NzQwX1VBUlQwX0JBU0VfQUREUgkweDEwMDMwMDAwCisjZGVmaW5lIEpaNDc0MF9VQVJUMV9CQVNFX0FERFIJMHgxMDAzMTAwMAorI2RlZmluZSBKWjQ3NDBfSTJDX0JBU0VfQUREUgkweDEwMDQyMDAwCisjZGVmaW5lIEpaNDc0MF9TU0lfQkFTRV9BRERSCTB4MTAwNDMwMDAKKyNkZWZpbmUgSlo0NzQwX1NBRENfQkFTRV9BRERSCTB4MTAwNzAwMDAKKyNkZWZpbmUgSlo0NzQwX0VNQ19CQVNFX0FERFIJMHgxMzAxMDAwMAorI2RlZmluZSBKWjQ3NDBfRE1BQ19CQVNFX0FERFIJMHgxMzAyMDAwMAorI2RlZmluZSBKWjQ3NDBfVUhDX0JBU0VfQUREUgkweDEzMDMwMDAwCisjZGVmaW5lIEpaNDc0MF9VRENfQkFTRV9BRERSCTB4MTMwNDAwMDAKKyNkZWZpbmUgSlo0NzQwX0xDRF9CQVNFX0FERFIJMHgxMzA1MDAwMAorI2RlZmluZSBKWjQ3NDBfU0xDRF9CQVNFX0FERFIJMHgxMzA1MDAwMAorI2RlZmluZSBKWjQ3NDBfQ0lNX0JBU0VfQUREUgkweDEzMDYwMDAwCisjZGVmaW5lIEpaNDc0MF9JUFVfQkFTRV9BRERSCTB4MTMwODAwMDAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1qejQ3NDAvY2xvY2suaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWp6NDc0MC9jbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNzQwOGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1qejQ3NDAvY2xvY2suaApAQCAtMCwwICsxLDI4IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMCwgTGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9KWjQ3NDBfQ0xPQ0tfSF9fCisjZGVmaW5lIF9fQVNNX0paNDc0MF9DTE9DS19IX18KKworZW51bSBqejQ3NDBfd2FpdF9tb2RlIHsKKwlKWjQ3NDBfV0FJVF9NT0RFX0lETEUsCisJSlo0NzQwX1dBSVRfTU9ERV9TTEVFUCwKK307CisKK3ZvaWQgano0NzQwX2Nsb2NrX3NldF93YWl0X21vZGUoZW51bSBqejQ3NDBfd2FpdF9tb2RlIG1vZGUpOworCit2b2lkIGp6NDc0MF9jbG9ja191ZGNfZW5hYmxlX2F1dG9fc3VzcGVuZCh2b2lkKTsKK3ZvaWQgano0NzQwX2Nsb2NrX3VkY19kaXNhYmxlX2F1dG9fc3VzcGVuZCh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1qejQ3NDAvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1qejQ3NDAvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEyZTVjNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWp6NDc0MC9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisjaWZuZGVmIF9fQVNNX01BQ0hfSlo0NzQwX0NQVV9GRUFUVVJFX09WRVJSSURFU19ICisjZGVmaW5lIF9fQVNNX01BQ0hfSlo0NzQwX0NQVV9GRUFUVVJFX09WRVJSSURFU19ICisKKyNkZWZpbmUgY3B1X2hhc190bGIgMQorI2RlZmluZSBjcHVfaGFzXzRrZXgJCTEKKyNkZWZpbmUgY3B1X2hhc18za19jYWNoZQkwCisjZGVmaW5lIGNwdV9oYXNfNGtfY2FjaGUJMQorI2RlZmluZSBjcHVfaGFzX3R4MzlfY2FjaGUJMAorI2RlZmluZSBjcHVfaGFzX2ZwdQkJMAorI2RlZmluZSBjcHVfaGFzXzMyZnByCTAKKyNkZWZpbmUgY3B1X2hhc19jb3VudGVyCQkwCisjZGVmaW5lIGNwdV9oYXNfd2F0Y2gJCTEKKyNkZWZpbmUgY3B1X2hhc19kaXZlYwkJMQorI2RlZmluZSBjcHVfaGFzX3ZjZQkJMAorI2RlZmluZSBjcHVfaGFzX2NhY2hlX2NkZXhfcAkwCisjZGVmaW5lIGNwdV9oYXNfY2FjaGVfY2RleF9zCTAKKyNkZWZpbmUgY3B1X2hhc19wcmVmZXRjaAkxCisjZGVmaW5lIGNwdV9oYXNfbWNoZWNrIDEKKyNkZWZpbmUgY3B1X2hhc19lanRhZyAxCisjZGVmaW5lIGNwdV9oYXNfbGxzYwkJMQorI2RlZmluZSBjcHVfaGFzX21pcHMxNiAwCisjZGVmaW5lIGNwdV9oYXNfbWRteCAwCisjZGVmaW5lIGNwdV9oYXNfbWlwczNkIDAKKyNkZWZpbmUgY3B1X2hhc19zbWFydG1pcHMgMAorI2RlZmluZSBrZXJuZWxfdXNlc19sbHNjCTEKKyNkZWZpbmUgY3B1X2hhc192dGFnX2ljYWNoZQkxCisjZGVmaW5lIGNwdV9oYXNfZGNfYWxpYXNlcwkwCisjZGVmaW5lIGNwdV9oYXNfaWNfZmlsbHNfZl9kYwkwCisjZGVmaW5lIGNwdV9oYXNfcGluZGV4ZWRfZGNhY2hlIDAKKyNkZWZpbmUgY3B1X2hhc19taXBzMzJyMQkxCisjZGVmaW5lIGNwdV9oYXNfbWlwczMycjIJMAorI2RlZmluZSBjcHVfaGFzX21pcHM2NHIxCTAKKyNkZWZpbmUgY3B1X2hhc19taXBzNjRyMgkwCisjZGVmaW5lIGNwdV9oYXNfZHNwCQkwCisjZGVmaW5lIGNwdV9oYXNfbWlwc210CQkwCisjZGVmaW5lIGNwdV9oYXNfdXNlcmxvY2FsCTAKKyNkZWZpbmUgY3B1X2hhc19ub2ZwdWV4IDAKKyNkZWZpbmUgY3B1X2hhc182NGJpdHMJCTAKKyNkZWZpbmUgY3B1X2hhc182NGJpdF96ZXJvX3JlZyAwCisjZGVmaW5lIGNwdV9oYXNfaW5jbHVzaXZlX3BjYWNoZXMgMAorCisjZGVmaW5lIGNwdV9kY2FjaGVfbGluZV9zaXplKCkJMzIKKyNkZWZpbmUgY3B1X2ljYWNoZV9saW5lX3NpemUoKQkzMgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWp6NDc0MC9kbWEuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWp6NDc0MC9kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2JlMTIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtano0NzQwL2RtYS5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwLCBMYXJzLVBldGVyIENsYXVzZW4gPGxhcnNAbWV0YWZvby5kZT4KKyAqICBKWjc0MjAvSlo0NzQwIERNQSBkZWZpbml0aW9ucworICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX19BU01fTUFDSF9KWjQ3NDBfRE1BX0hfXworI2RlZmluZSBfX0FTTV9NQUNIX0paNDc0MF9ETUFfSF9fCisKK3N0cnVjdCBqejQ3NDBfZG1hX2NoYW47CisKK2VudW0gano0NzQwX2RtYV9yZXF1ZXN0X3R5cGUgeworCUpaNDc0MF9ETUFfVFlQRV9BVVRPX1JFUVVFU1QJPSA4LAorCUpaNDc0MF9ETUFfVFlQRV9VQVJUX1RSQU5TTUlUCT0gMjAsCisJSlo0NzQwX0RNQV9UWVBFX1VBUlRfUkVDRUlWRQk9IDIxLAorCUpaNDc0MF9ETUFfVFlQRV9TUElfVFJBTlNNSVQJPSAyMiwKKwlKWjQ3NDBfRE1BX1RZUEVfU1BJX1JFQ0VJVkUJPSAyMywKKwlKWjQ3NDBfRE1BX1RZUEVfQUlDX1RSQU5TTUlUCT0gMjQsCisJSlo0NzQwX0RNQV9UWVBFX0FJQ19SRUNFSVZFCT0gMjUsCisJSlo0NzQwX0RNQV9UWVBFX01NQ19UUkFOU01JVAk9IDI2LAorCUpaNDc0MF9ETUFfVFlQRV9NTUNfUkVDRUlWRQk9IDI3LAorCUpaNDc0MF9ETUFfVFlQRV9UQ1UJCT0gMjgsCisJSlo0NzQwX0RNQV9UWVBFX1NBREMJCT0gMjksCisJSlo0NzQwX0RNQV9UWVBFX1NMQ0QJCT0gMzAsCit9OworCitlbnVtIGp6NDc0MF9kbWFfd2lkdGggeworCUpaNDc0MF9ETUFfV0lEVEhfMzJCSVQJPSAwLAorCUpaNDc0MF9ETUFfV0lEVEhfOEJJVAk9IDEsCisJSlo0NzQwX0RNQV9XSURUSF8xNkJJVAk9IDIsCit9OworCitlbnVtIGp6NDc0MF9kbWFfdHJhbnNmZXJfc2l6ZSB7CisJSlo0NzQwX0RNQV9UUkFOU0ZFUl9TSVpFXzRCWVRFICA9IDAsCisJSlo0NzQwX0RNQV9UUkFOU0ZFUl9TSVpFXzFCWVRFICA9IDEsCisJSlo0NzQwX0RNQV9UUkFOU0ZFUl9TSVpFXzJCWVRFICA9IDIsCisJSlo0NzQwX0RNQV9UUkFOU0ZFUl9TSVpFXzE2QllURSA9IDMsCisJSlo0NzQwX0RNQV9UUkFOU0ZFUl9TSVpFXzMyQllURSA9IDQsCit9OworCitlbnVtIGp6NDc0MF9kbWFfZmxhZ3MgeworCUpaNDc0MF9ETUFfU1JDX0FVVE9JTkMgPSAweDIsCisJSlo0NzQwX0RNQV9EU1RfQVVUT0lOQyA9IDB4MSwKK307CisKK2VudW0gano0NzQwX2RtYV9tb2RlIHsKKwlKWjQ3NDBfRE1BX01PREVfU0lOR0xFCT0gMCwKKwlKWjQ3NDBfRE1BX01PREVfQkxPQ0sJPSAxLAorfTsKKworc3RydWN0IGp6NDc0MF9kbWFfY29uZmlnIHsKKwllbnVtIGp6NDc0MF9kbWFfd2lkdGggc3JjX3dpZHRoOworCWVudW0gano0NzQwX2RtYV93aWR0aCBkc3Rfd2lkdGg7CisJZW51bSBqejQ3NDBfZG1hX3RyYW5zZmVyX3NpemUgdHJhbnNmZXJfc2l6ZTsKKwllbnVtIGp6NDc0MF9kbWFfcmVxdWVzdF90eXBlIHJlcXVlc3RfdHlwZTsKKwllbnVtIGp6NDc0MF9kbWFfZmxhZ3MgZmxhZ3M7CisJZW51bSBqejQ3NDBfZG1hX21vZGUgbW9kZTsKK307CisKK3R5cGVkZWYgdm9pZCAoKmp6NDc0MF9kbWFfY29tcGxldGVfY2FsbGJhY2tfdCkoc3RydWN0IGp6NDc0MF9kbWFfY2hhbiAqLCBpbnQsIHZvaWQgKik7CisKK3N0cnVjdCBqejQ3NDBfZG1hX2NoYW4gKmp6NDc0MF9kbWFfcmVxdWVzdCh2b2lkICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUpOwordm9pZCBqejQ3NDBfZG1hX2ZyZWUoc3RydWN0IGp6NDc0MF9kbWFfY2hhbiAqZG1hKTsKKwordm9pZCBqejQ3NDBfZG1hX2NvbmZpZ3VyZShzdHJ1Y3Qgano0NzQwX2RtYV9jaGFuICpkbWEsCisJY29uc3Qgc3RydWN0IGp6NDc0MF9kbWFfY29uZmlnICpjb25maWcpOworCisKK3ZvaWQgano0NzQwX2RtYV9lbmFibGUoc3RydWN0IGp6NDc0MF9kbWFfY2hhbiAqZG1hKTsKK3ZvaWQgano0NzQwX2RtYV9kaXNhYmxlKHN0cnVjdCBqejQ3NDBfZG1hX2NoYW4gKmRtYSk7CisKK3ZvaWQgano0NzQwX2RtYV9zZXRfc3JjX2FkZHIoc3RydWN0IGp6NDc0MF9kbWFfY2hhbiAqZG1hLCBkbWFfYWRkcl90IHNyYyk7Cit2b2lkIGp6NDc0MF9kbWFfc2V0X2RzdF9hZGRyKHN0cnVjdCBqejQ3NDBfZG1hX2NoYW4gKmRtYSwgZG1hX2FkZHJfdCBkc3QpOwordm9pZCBqejQ3NDBfZG1hX3NldF90cmFuc2Zlcl9jb3VudChzdHJ1Y3Qgano0NzQwX2RtYV9jaGFuICpkbWEsIHVpbnQzMl90IGNvdW50KTsKKwordWludDMyX3Qgano0NzQwX2RtYV9nZXRfcmVzaWR1ZShjb25zdCBzdHJ1Y3Qgano0NzQwX2RtYV9jaGFuICpkbWEpOworCit2b2lkIGp6NDc0MF9kbWFfc2V0X2NvbXBsZXRlX2NiKHN0cnVjdCBqejQ3NDBfZG1hX2NoYW4gKmRtYSwKKwlqejQ3NDBfZG1hX2NvbXBsZXRlX2NhbGxiYWNrX3QgY2IpOworCisjZW5kaWYgIC8qIF9fQVNNX0paNDc0MF9ETUFfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1qejQ3NDAvZ3Bpby5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtano0NzQwL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yjc0NzAzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtano0NzQwL2dwaW8uaApAQCAtMCwwICsxLDM5OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDksIExhcnMtUGV0ZXIgQ2xhdXNlbiA8bGFyc0BtZXRhZm9vLmRlPgorICogIEpaNDc0MCBHUElPIHBpbiBkZWZpbml0aW9ucworICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBfSlpfR1BJT19ICisjZGVmaW5lIF9KWl9HUElPX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK2VudW0ganpfZ3Bpb19mdW5jdGlvbiB7CisgICAgSlpfR1BJT19GVU5DX05PTkUsCisgICAgSlpfR1BJT19GVU5DMSwKKyAgICBKWl9HUElPX0ZVTkMyLAorICAgIEpaX0dQSU9fRlVOQzMsCit9OworCisKKy8qCisgVXN1YWxseSBhIGRyaXZlciBmb3IgYSBTb0MgY29tcG9uZW50IGhhcyB0byByZXF1ZXN0IHNldmVyYWwgZ3BpbyBwaW5zIGFuZAorIGNvbmZpZ3VyZSB0aGVtIGFzIGZ1bmNpb24gcGlucy4KKyBqel9ncGlvX2J1bGtfcmVxdWVzdCBjYW4gYmUgdXNlZCB0byBlYXNlIHRoaXMgcHJvY2Vzcy4KKyBVc3VhbGx5IG9uZSB3b3VsZCBkbyBzb21ldGhpbmcgbGlrZToKKworIGNvbnN0IHN0YXRpYyBzdHJ1Y3QganpfZ3Bpb19idWxrX3JlcXVlc3QgaTJjX3BpbnNbXSA9IHsKKwlKWl9HUElPX0JVTEtfUElOKEkyQ19TREEpLAorCUpaX0dQSU9fQlVMS19QSU4oSTJDX1NDSyksCisgfTsKKworIGluc2lkZSB0aGUgcHJvYmUgZnVuY3Rpb246CisKKyAgICByZXQgPSBqel9ncGlvX2J1bGtfcmVxdWVzdChpMmNfcGlucywgQVJSQVlfU0laRShpMmNfcGlucykpOworICAgIGlmIChyZXQpIHsKKwkuLi4KKworIGluc2lkZSB0aGUgcmVtb3ZlIGZ1bmN0aW9uOgorCisgICAganpfZ3Bpb19idWxrX2ZyZWUoaTJjX3BpbnMsIEFSUkFZX1NJWkUoaTJjX3BpbnMpKTsKKworCisqLworc3RydWN0IGp6X2dwaW9fYnVsa19yZXF1ZXN0IHsKKwlpbnQgZ3BpbzsKKwljb25zdCBjaGFyICpuYW1lOworCWVudW0ganpfZ3Bpb19mdW5jdGlvbiBmdW5jdGlvbjsKK307CisKKyNkZWZpbmUgSlpfR1BJT19CVUxLX1BJTihwaW4pIHsgXAorICAgIC5ncGlvID0gSlpfR1BJT18gIyMgcGluLCBcCisgICAgLm5hbWUgPSAjcGluLCBcCisgICAgLmZ1bmN0aW9uID0gSlpfR1BJT19GVU5DXyAjIyBwaW4gXAorfQorCitpbnQganpfZ3Bpb19idWxrX3JlcXVlc3QoY29uc3Qgc3RydWN0IGp6X2dwaW9fYnVsa19yZXF1ZXN0ICpyZXF1ZXN0LCBzaXplX3QgbnVtKTsKK3ZvaWQganpfZ3Bpb19idWxrX2ZyZWUoY29uc3Qgc3RydWN0IGp6X2dwaW9fYnVsa19yZXF1ZXN0ICpyZXF1ZXN0LCBzaXplX3QgbnVtKTsKK3ZvaWQganpfZ3Bpb19idWxrX3N1c3BlbmQoY29uc3Qgc3RydWN0IGp6X2dwaW9fYnVsa19yZXF1ZXN0ICpyZXF1ZXN0LCBzaXplX3QgbnVtKTsKK3ZvaWQganpfZ3Bpb19idWxrX3Jlc3VtZShjb25zdCBzdHJ1Y3QganpfZ3Bpb19idWxrX3JlcXVlc3QgKnJlcXVlc3QsIHNpemVfdCBudW0pOwordm9pZCBqel9ncGlvX2VuYWJsZV9wdWxsdXAodW5zaWduZWQgZ3Bpbyk7Cit2b2lkIGp6X2dwaW9fZGlzYWJsZV9wdWxsdXAodW5zaWduZWQgZ3Bpbyk7CitpbnQganpfZ3Bpb19zZXRfZnVuY3Rpb24oaW50IGdwaW8sIGVudW0ganpfZ3Bpb19mdW5jdGlvbiBmdW5jdGlvbik7CisKK2ludCBqel9ncGlvX3BvcnRfZGlyZWN0aW9uX2lucHV0KGludCBwb3J0LCB1aW50MzJfdCBtYXNrKTsKK2ludCBqel9ncGlvX3BvcnRfZGlyZWN0aW9uX291dHB1dChpbnQgcG9ydCwgdWludDMyX3QgbWFzayk7Cit2b2lkIGp6X2dwaW9fcG9ydF9zZXRfdmFsdWUoaW50IHBvcnQsIHVpbnQzMl90IHZhbHVlLCB1aW50MzJfdCBtYXNrKTsKK3VpbnQzMl90IGp6X2dwaW9fcG9ydF9nZXRfdmFsdWUoaW50IHBvcnQsIHVpbnQzMl90IG1hc2spOworCisjaW5jbHVkZSA8YXNtL21hY2gtZ2VuZXJpYy9ncGlvLmg+CisKKyNkZWZpbmUgSlpfR1BJT19QT1JUQSh4KSAoKHgpICsgMzIgKiAwKQorI2RlZmluZSBKWl9HUElPX1BPUlRCKHgpICgoeCkgKyAzMiAqIDEpCisjZGVmaW5lIEpaX0dQSU9fUE9SVEMoeCkgKCh4KSArIDMyICogMikKKyNkZWZpbmUgSlpfR1BJT19QT1JURCh4KSAoKHgpICsgMzIgKiAzKQorCisvKiBQb3J0IEEgZnVuY3Rpb24gcGlucyAqLworI2RlZmluZSBKWl9HUElPX01FTV9EQVRBMAkJSlpfR1BJT19QT1JUQSgwKQorI2RlZmluZSBKWl9HUElPX01FTV9EQVRBMQkJSlpfR1BJT19QT1JUQSgxKQorI2RlZmluZSBKWl9HUElPX01FTV9EQVRBMgkJSlpfR1BJT19QT1JUQSgyKQorI2RlZmluZSBKWl9HUElPX01FTV9EQVRBMwkJSlpfR1BJT19QT1JUQSgzKQorI2RlZmluZSBKWl9HUElPX01FTV9EQVRBNAkJSlpfR1BJT19QT1JUQSg0KQorI2RlZmluZSBKWl9HUElPX01FTV9EQVRBNQkJSlpfR1BJT19QT1JUQSg1KQorI2RlZmluZSBKWl9HUElPX01FTV9EQVRBNgkJSlpfR1BJT19QT1JUQSg2KQorI2RlZmluZSBKWl9HUElPX01FTV9EQVRBNwkJSlpfR1BJT19QT1JUQSg3KQorI2RlZmluZSBKWl9HUElPX01FTV9EQVRBOAkJSlpfR1BJT19QT1JUQSg4KQorI2RlZmluZSBKWl9HUElPX01FTV9EQVRBOQkJSlpfR1BJT19QT1JUQSg5KQorI2RlZmluZSBKWl9HUElPX01FTV9EQVRBMTAJCUpaX0dQSU9fUE9SVEEoMTApCisjZGVmaW5lIEpaX0dQSU9fTUVNX0RBVEExMQkJSlpfR1BJT19QT1JUQSgxMSkKKyNkZWZpbmUgSlpfR1BJT19NRU1fREFUQTEyCQlKWl9HUElPX1BPUlRBKDEyKQorI2RlZmluZSBKWl9HUElPX01FTV9EQVRBMTMJCUpaX0dQSU9fUE9SVEEoMTMpCisjZGVmaW5lIEpaX0dQSU9fTUVNX0RBVEExNAkJSlpfR1BJT19QT1JUQSgxNCkKKyNkZWZpbmUgSlpfR1BJT19NRU1fREFUQTE1CQlKWl9HUElPX1BPUlRBKDE1KQorI2RlZmluZSBKWl9HUElPX01FTV9EQVRBMTYJCUpaX0dQSU9fUE9SVEEoMTYpCisjZGVmaW5lIEpaX0dQSU9fTUVNX0RBVEExNwkJSlpfR1BJT19QT1JUQSgxNykKKyNkZWZpbmUgSlpfR1BJT19NRU1fREFUQTE4CQlKWl9HUElPX1BPUlRBKDE4KQorI2RlZmluZSBKWl9HUElPX01FTV9EQVRBMTkJCUpaX0dQSU9fUE9SVEEoMTkpCisjZGVmaW5lIEpaX0dQSU9fTUVNX0RBVEEyMAkJSlpfR1BJT19QT1JUQSgyMCkKKyNkZWZpbmUgSlpfR1BJT19NRU1fREFUQTIxCQlKWl9HUElPX1BPUlRBKDIxKQorI2RlZmluZSBKWl9HUElPX01FTV9EQVRBMjIJCUpaX0dQSU9fUE9SVEEoMjIpCisjZGVmaW5lIEpaX0dQSU9fTUVNX0RBVEEyMwkJSlpfR1BJT19QT1JUQSgyMykKKyNkZWZpbmUgSlpfR1BJT19NRU1fREFUQTI0CQlKWl9HUElPX1BPUlRBKDI0KQorI2RlZmluZSBKWl9HUElPX01FTV9EQVRBMjUJCUpaX0dQSU9fUE9SVEEoMjUpCisjZGVmaW5lIEpaX0dQSU9fTUVNX0RBVEEyNgkJSlpfR1BJT19QT1JUQSgyNikKKyNkZWZpbmUgSlpfR1BJT19NRU1fREFUQTI3CQlKWl9HUElPX1BPUlRBKDI3KQorI2RlZmluZSBKWl9HUElPX01FTV9EQVRBMjgJCUpaX0dQSU9fUE9SVEEoMjgpCisjZGVmaW5lIEpaX0dQSU9fTUVNX0RBVEEyOQkJSlpfR1BJT19QT1JUQSgyOSkKKyNkZWZpbmUgSlpfR1BJT19NRU1fREFUQTMwCQlKWl9HUElPX1BPUlRBKDMwKQorI2RlZmluZSBKWl9HUElPX01FTV9EQVRBMzEJCUpaX0dQSU9fUE9SVEEoMzEpCisKKyNkZWZpbmUgSlpfR1BJT19GVU5DX01FTV9EQVRBMAkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0RBVEExCQlKWl9HUElPX0ZVTkMxCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19NRU1fREFUQTIJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX01FTV9EQVRBMwkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0RBVEE0CQlKWl9HUElPX0ZVTkMxCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19NRU1fREFUQTUJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX01FTV9EQVRBNgkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0RBVEE3CQlKWl9HUElPX0ZVTkMxCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19NRU1fREFUQTgJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX01FTV9EQVRBOQkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0RBVEExMAkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0RBVEExMQkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0RBVEExMgkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0RBVEExMwkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0RBVEExNAkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0RBVEExNQkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0RBVEExNgkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0RBVEExNwkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0RBVEExOAkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0RBVEExOQkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0RBVEEyMAkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0RBVEEyMQkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0RBVEEyMgkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0RBVEEyMwkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0RBVEEyNAkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0RBVEEyNQkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0RBVEEyNgkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0RBVEEyNwkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0RBVEEyOAkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0RBVEEyOQkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0RBVEEzMAkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0RBVEEzMQkJSlpfR1BJT19GVU5DMQorCisvKiBQb3J0IEIgZnVuY3Rpb24gcGlucyAqLworI2RlZmluZSBKWl9HUElPX01FTV9BRERSMAkJSlpfR1BJT19QT1JUQigwKQorI2RlZmluZSBKWl9HUElPX01FTV9BRERSMQkJSlpfR1BJT19QT1JUQigxKQorI2RlZmluZSBKWl9HUElPX01FTV9BRERSMgkJSlpfR1BJT19QT1JUQigyKQorI2RlZmluZSBKWl9HUElPX01FTV9BRERSMwkJSlpfR1BJT19QT1JUQigzKQorI2RlZmluZSBKWl9HUElPX01FTV9BRERSNAkJSlpfR1BJT19QT1JUQig0KQorI2RlZmluZSBKWl9HUElPX01FTV9BRERSNQkJSlpfR1BJT19QT1JUQig1KQorI2RlZmluZSBKWl9HUElPX01FTV9BRERSNgkJSlpfR1BJT19QT1JUQig2KQorI2RlZmluZSBKWl9HUElPX01FTV9BRERSNwkJSlpfR1BJT19QT1JUQig3KQorI2RlZmluZSBKWl9HUElPX01FTV9BRERSOAkJSlpfR1BJT19QT1JUQig4KQorI2RlZmluZSBKWl9HUElPX01FTV9BRERSOQkJSlpfR1BJT19QT1JUQig5KQorI2RlZmluZSBKWl9HUElPX01FTV9BRERSMTAJCUpaX0dQSU9fUE9SVEIoMTApCisjZGVmaW5lIEpaX0dQSU9fTUVNX0FERFIxMQkJSlpfR1BJT19QT1JUQigxMSkKKyNkZWZpbmUgSlpfR1BJT19NRU1fQUREUjEyCQlKWl9HUElPX1BPUlRCKDEyKQorI2RlZmluZSBKWl9HUElPX01FTV9BRERSMTMJCUpaX0dQSU9fUE9SVEIoMTMpCisjZGVmaW5lIEpaX0dQSU9fTUVNX0FERFIxNAkJSlpfR1BJT19QT1JUQigxNCkKKyNkZWZpbmUgSlpfR1BJT19NRU1fQUREUjE1CQlKWl9HUElPX1BPUlRCKDE1KQorI2RlZmluZSBKWl9HUElPX01FTV9BRERSMTYJCUpaX0dQSU9fUE9SVEIoMTYpCisjZGVmaW5lIEpaX0dQSU9fTENEX0NMUwkJCUpaX0dQSU9fUE9SVEIoMTcpCisjZGVmaW5lIEpaX0dQSU9fTENEX1NQTAkJCUpaX0dQSU9fUE9SVEIoMTgpCisjZGVmaW5lIEpaX0dQSU9fTUVNX0RDUwkJCUpaX0dQSU9fUE9SVEIoMTkpCisjZGVmaW5lIEpaX0dQSU9fTUVNX1JBUwkJCUpaX0dQSU9fUE9SVEIoMjApCisjZGVmaW5lIEpaX0dQSU9fTUVNX0NBUwkJCUpaX0dQSU9fUE9SVEIoMjEpCisjZGVmaW5lIEpaX0dQSU9fTUVNX1NEV0UJCUpaX0dQSU9fUE9SVEIoMjIpCisjZGVmaW5lIEpaX0dQSU9fTUVNX0NLRQkJCUpaX0dQSU9fUE9SVEIoMjMpCisjZGVmaW5lIEpaX0dQSU9fTUVNX0NLTwkJCUpaX0dQSU9fUE9SVEIoMjQpCisjZGVmaW5lIEpaX0dQSU9fTUVNX0NTMAkJCUpaX0dQSU9fUE9SVEIoMjUpCisjZGVmaW5lIEpaX0dQSU9fTUVNX0NTMQkJCUpaX0dQSU9fUE9SVEIoMjYpCisjZGVmaW5lIEpaX0dQSU9fTUVNX0NTMgkJCUpaX0dQSU9fUE9SVEIoMjcpCisjZGVmaW5lIEpaX0dQSU9fTUVNX0NTMwkJCUpaX0dQSU9fUE9SVEIoMjgpCisjZGVmaW5lIEpaX0dQSU9fTUVNX1JECQkJSlpfR1BJT19QT1JUQigyOSkKKyNkZWZpbmUgSlpfR1BJT19NRU1fV1IJCQlKWl9HUElPX1BPUlRCKDMwKQorI2RlZmluZSBKWl9HUElPX01FTV9XRTAJCQlKWl9HUElPX1BPUlRCKDMxKQorCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19NRU1fQUREUjAJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX01FTV9BRERSMQkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0FERFIyCQlKWl9HUElPX0ZVTkMxCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19NRU1fQUREUjMJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX01FTV9BRERSNAkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0FERFI1CQlKWl9HUElPX0ZVTkMxCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19NRU1fQUREUjYJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX01FTV9BRERSNwkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0FERFI4CQlKWl9HUElPX0ZVTkMxCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19NRU1fQUREUjkJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX01FTV9BRERSMTAJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX01FTV9BRERSMTEJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX01FTV9BRERSMTIJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX01FTV9BRERSMTMJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX01FTV9BRERSMTQJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX01FTV9BRERSMTUJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX01FTV9BRERSMTYJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX0xDRF9DTFMJICAgICAgICBKWl9HUElPX0ZVTkMxCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19MQ0RfU1BMCQlKWl9HUElPX0ZVTkMxCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19NRU1fRENTCQlKWl9HUElPX0ZVTkMxCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19NRU1fUkFTCQlKWl9HUElPX0ZVTkMxCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19NRU1fQ0FTCQlKWl9HUElPX0ZVTkMxCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19NRU1fU0RXRQkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0NLRQkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0NLTwkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0NTMAkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0NTMQkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0NTMgkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0NTMwkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX1JECQlKWl9HUElPX0ZVTkMxCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19NRU1fV1IJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX01FTV9XRTAJCUpaX0dQSU9fRlVOQzEKKworCisjZGVmaW5lIEpaX0dQSU9fTUVNX0FERFIyMQkJSlpfR1BJT19QT1JUQigxNykKKyNkZWZpbmUgSlpfR1BJT19NRU1fQUREUjIyCQlKWl9HUElPX1BPUlRCKDE4KQorCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19NRU1fQUREUjIxCQlKWl9HUElPX0ZVTkMyCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19NRU1fQUREUjIyCQlKWl9HUElPX0ZVTkMyCisKKy8qIFBvcnQgQyBmdW5jdGlvbiBwaW5zICovCisjZGVmaW5lIEpaX0dQSU9fTENEX0RBVEEwCQlKWl9HUElPX1BPUlRDKDApCisjZGVmaW5lIEpaX0dQSU9fTENEX0RBVEExCQlKWl9HUElPX1BPUlRDKDEpCisjZGVmaW5lIEpaX0dQSU9fTENEX0RBVEEyCQlKWl9HUElPX1BPUlRDKDIpCisjZGVmaW5lIEpaX0dQSU9fTENEX0RBVEEzCQlKWl9HUElPX1BPUlRDKDMpCisjZGVmaW5lIEpaX0dQSU9fTENEX0RBVEE0CQlKWl9HUElPX1BPUlRDKDQpCisjZGVmaW5lIEpaX0dQSU9fTENEX0RBVEE1CQlKWl9HUElPX1BPUlRDKDUpCisjZGVmaW5lIEpaX0dQSU9fTENEX0RBVEE2CQlKWl9HUElPX1BPUlRDKDYpCisjZGVmaW5lIEpaX0dQSU9fTENEX0RBVEE3CQlKWl9HUElPX1BPUlRDKDcpCisjZGVmaW5lIEpaX0dQSU9fTENEX0RBVEE4CQlKWl9HUElPX1BPUlRDKDgpCisjZGVmaW5lIEpaX0dQSU9fTENEX0RBVEE5CQlKWl9HUElPX1BPUlRDKDkpCisjZGVmaW5lIEpaX0dQSU9fTENEX0RBVEExMAkJSlpfR1BJT19QT1JUQygxMCkKKyNkZWZpbmUgSlpfR1BJT19MQ0RfREFUQTExCQlKWl9HUElPX1BPUlRDKDExKQorI2RlZmluZSBKWl9HUElPX0xDRF9EQVRBMTIJCUpaX0dQSU9fUE9SVEMoMTIpCisjZGVmaW5lIEpaX0dQSU9fTENEX0RBVEExMwkJSlpfR1BJT19QT1JUQygxMykKKyNkZWZpbmUgSlpfR1BJT19MQ0RfREFUQTE0CQlKWl9HUElPX1BPUlRDKDE0KQorI2RlZmluZSBKWl9HUElPX0xDRF9EQVRBMTUJCUpaX0dQSU9fUE9SVEMoMTUpCisjZGVmaW5lIEpaX0dQSU9fTENEX0RBVEExNgkJSlpfR1BJT19QT1JUQygxNikKKyNkZWZpbmUgSlpfR1BJT19MQ0RfREFUQTE3CQlKWl9HUElPX1BPUlRDKDE3KQorI2RlZmluZSBKWl9HUElPX0xDRF9QQ0xLCQlKWl9HUElPX1BPUlRDKDE4KQorI2RlZmluZSBKWl9HUElPX0xDRF9IU1lOQwkJSlpfR1BJT19QT1JUQygxOSkKKyNkZWZpbmUgSlpfR1BJT19MQ0RfVlNZTkMJCUpaX0dQSU9fUE9SVEMoMjApCisjZGVmaW5lIEpaX0dQSU9fTENEX0RFCQkJSlpfR1BJT19QT1JUQygyMSkKKyNkZWZpbmUgSlpfR1BJT19MQ0RfUFMJCQlKWl9HUElPX1BPUlRDKDIyKQorI2RlZmluZSBKWl9HUElPX0xDRF9SRVYJCQlKWl9HUElPX1BPUlRDKDIzKQorI2RlZmluZSBKWl9HUElPX01FTV9XRTEJCQlKWl9HUElPX1BPUlRDKDI0KQorI2RlZmluZSBKWl9HUElPX01FTV9XRTIJCQlKWl9HUElPX1BPUlRDKDI1KQorI2RlZmluZSBKWl9HUElPX01FTV9XRTMJCQlKWl9HUElPX1BPUlRDKDI2KQorI2RlZmluZSBKWl9HUElPX01FTV9XQUlUCQlKWl9HUElPX1BPUlRDKDI3KQorI2RlZmluZSBKWl9HUElPX01FTV9GUkUJCQlKWl9HUElPX1BPUlRDKDI4KQorI2RlZmluZSBKWl9HUElPX01FTV9GV0UJCQlKWl9HUElPX1BPUlRDKDI5KQorCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19MQ0RfREFUQTAJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX0xDRF9EQVRBMQkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTENEX0RBVEEyCQlKWl9HUElPX0ZVTkMxCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19MQ0RfREFUQTMJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX0xDRF9EQVRBNAkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTENEX0RBVEE1CQlKWl9HUElPX0ZVTkMxCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19MQ0RfREFUQTYJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX0xDRF9EQVRBNwkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTENEX0RBVEE4CQlKWl9HUElPX0ZVTkMxCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19MQ0RfREFUQTkJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX0xDRF9EQVRBMTAJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX0xDRF9EQVRBMTEJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX0xDRF9EQVRBMTIJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX0xDRF9EQVRBMTMJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX0xDRF9EQVRBMTQJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX0xDRF9EQVRBMTUJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX0xDRF9EQVRBMTYJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX0xDRF9EQVRBMTcJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX0xDRF9QQ0xLCQlKWl9HUElPX0ZVTkMxCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19MQ0RfVlNZTkMJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX0xDRF9IU1lOQwkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTENEX0RFCQlKWl9HUElPX0ZVTkMxCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19MQ0RfUFMJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX0xDRF9SRVYJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX01FTV9XRTEJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX01FTV9XRTIJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX01FTV9XRTMJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX01FTV9XQUlUCQlKWl9HUElPX0ZVTkMxCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19NRU1fRlJFCQlKWl9HUElPX0ZVTkMxCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19NRU1fRldFCQlKWl9HUElPX0ZVTkMxCisKKworI2RlZmluZSBKWl9HUElPX01FTV9BRERSMTkJCUpaX0dQSU9fUE9SVEIoMjIpCisjZGVmaW5lIEpaX0dQSU9fTUVNX0FERFIyMAkJSlpfR1BJT19QT1JUQigyMykKKworI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0FERFIxOQkJSlpfR1BJT19GVU5DMgorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0FERFIyMAkJSlpfR1BJT19GVU5DMgorCisvKiBQb3J0IEQgZnVuY3Rpb24gcGlucyAqLworI2RlZmluZSBKWl9HUElPX0NJTV9EQVRBMAkJSlpfR1BJT19QT1JURCgwKQorI2RlZmluZSBKWl9HUElPX0NJTV9EQVRBMQkJSlpfR1BJT19QT1JURCgxKQorI2RlZmluZSBKWl9HUElPX0NJTV9EQVRBMgkJSlpfR1BJT19QT1JURCgyKQorI2RlZmluZSBKWl9HUElPX0NJTV9EQVRBMwkJSlpfR1BJT19QT1JURCgzKQorI2RlZmluZSBKWl9HUElPX0NJTV9EQVRBNAkJSlpfR1BJT19QT1JURCg0KQorI2RlZmluZSBKWl9HUElPX0NJTV9EQVRBNQkJSlpfR1BJT19QT1JURCg1KQorI2RlZmluZSBKWl9HUElPX0NJTV9EQVRBNgkJSlpfR1BJT19QT1JURCg2KQorI2RlZmluZSBKWl9HUElPX0NJTV9EQVRBNwkJSlpfR1BJT19QT1JURCg3KQorI2RlZmluZSBKWl9HUElPX01TQ19DTUQJCQlKWl9HUElPX1BPUlREKDgpCisjZGVmaW5lIEpaX0dQSU9fTVNDX0NMSwkJCUpaX0dQSU9fUE9SVEQoOSkKKyNkZWZpbmUgSlpfR1BJT19NU0NfREFUQTAJCUpaX0dQSU9fUE9SVEQoMTApCisjZGVmaW5lIEpaX0dQSU9fTVNDX0RBVEExCQlKWl9HUElPX1BPUlREKDExKQorI2RlZmluZSBKWl9HUElPX01TQ19EQVRBMgkJSlpfR1BJT19QT1JURCgxMikKKyNkZWZpbmUgSlpfR1BJT19NU0NfREFUQTMJCUpaX0dQSU9fUE9SVEQoMTMpCisjZGVmaW5lIEpaX0dQSU9fQ0lNX01DTEsJCUpaX0dQSU9fUE9SVEQoMTQpCisjZGVmaW5lIEpaX0dQSU9fQ0lNX1BDTEsJCUpaX0dQSU9fUE9SVEQoMTUpCisjZGVmaW5lIEpaX0dQSU9fQ0lNX1ZTWU5DCQlKWl9HUElPX1BPUlREKDE2KQorI2RlZmluZSBKWl9HUElPX0NJTV9IU1lOQwkJSlpfR1BJT19QT1JURCgxNykKKyNkZWZpbmUgSlpfR1BJT19TUElfQ0xLCQkJSlpfR1BJT19QT1JURCgxOCkKKyNkZWZpbmUgSlpfR1BJT19TUElfQ0UwCQkJSlpfR1BJT19QT1JURCgxOSkKKyNkZWZpbmUgSlpfR1BJT19TUElfRFQJCQlKWl9HUElPX1BPUlREKDIwKQorI2RlZmluZSBKWl9HUElPX1NQSV9EUgkJCUpaX0dQSU9fUE9SVEQoMjEpCisjZGVmaW5lIEpaX0dQSU9fU1BJX0NFMQkJCUpaX0dQSU9fUE9SVEQoMjIpCisjZGVmaW5lIEpaX0dQSU9fUFdNMAkJCUpaX0dQSU9fUE9SVEQoMjMpCisjZGVmaW5lIEpaX0dQSU9fUFdNMQkJCUpaX0dQSU9fUE9SVEQoMjQpCisjZGVmaW5lIEpaX0dQSU9fUFdNMgkJCUpaX0dQSU9fUE9SVEQoMjUpCisjZGVmaW5lIEpaX0dQSU9fUFdNMwkJCUpaX0dQSU9fUE9SVEQoMjYpCisjZGVmaW5lIEpaX0dQSU9fUFdNNAkJCUpaX0dQSU9fUE9SVEQoMjcpCisjZGVmaW5lIEpaX0dQSU9fUFdNNQkJCUpaX0dQSU9fUE9SVEQoMjgpCisjZGVmaW5lIEpaX0dQSU9fUFdNNgkJCUpaX0dQSU9fUE9SVEQoMzApCisjZGVmaW5lIEpaX0dQSU9fUFdNNwkJCUpaX0dQSU9fUE9SVEQoMzEpCisKKyNkZWZpbmUgSlpfR1BJT19GVU5DX0NJTV9EQVRBCQlKWl9HUElPX0ZVTkMxCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19DSU1fREFUQTAJCUpaX0dQSU9fRlVOQ19DSU1fREFUQQorI2RlZmluZSBKWl9HUElPX0ZVTkNfQ0lNX0RBVEExCQlKWl9HUElPX0ZVTkNfQ0lNX0RBVEEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX0NJTV9EQVRBMgkJSlpfR1BJT19GVU5DX0NJTV9EQVRBCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19DSU1fREFUQTMJCUpaX0dQSU9fRlVOQ19DSU1fREFUQQorI2RlZmluZSBKWl9HUElPX0ZVTkNfQ0lNX0RBVEE0CQlKWl9HUElPX0ZVTkNfQ0lNX0RBVEEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX0NJTV9EQVRBNQkJSlpfR1BJT19GVU5DX0NJTV9EQVRBCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19DSU1fREFUQTYJCUpaX0dQSU9fRlVOQ19DSU1fREFUQQorI2RlZmluZSBKWl9HUElPX0ZVTkNfQ0lNX0RBVEE3CQlKWl9HUElPX0ZVTkNfQ0lNX0RBVEEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX01TQ19DTUQJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX01TQ19DTEsJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX01TQ19EQVRBCQlKWl9HUElPX0ZVTkMxCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19NU0NfREFUQTAJCUpaX0dQSU9fRlVOQ19NU0NfREFUQQorI2RlZmluZSBKWl9HUElPX0ZVTkNfTVNDX0RBVEExCQlKWl9HUElPX0ZVTkNfTVNDX0RBVEEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX01TQ19EQVRBMgkJSlpfR1BJT19GVU5DX01TQ19EQVRBCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19NU0NfREFUQTMJCUpaX0dQSU9fRlVOQ19NU0NfREFUQQorI2RlZmluZSBKWl9HUElPX0ZVTkNfQ0lNX01DTEsJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX0NJTV9QQ0xLCQlKWl9HUElPX0ZVTkMxCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19DSU1fVlNZTkMJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX0NJTV9IU1lOQwkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfU1BJX0NMSwkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfU1BJX0NFMAkJSlpfR1BJT19GVU5DMQorI2RlZmluZSBKWl9HUElPX0ZVTkNfU1BJX0RUCQlKWl9HUElPX0ZVTkMxCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19TUElfRFIJCUpaX0dQSU9fRlVOQzEKKyNkZWZpbmUgSlpfR1BJT19GVU5DX1NQSV9DRTEJCUpaX0dQSU9fRlVOQzEKKworI2RlZmluZSBKWl9HUElPX0ZVTkNfUFdNCQlKWl9HUElPX0ZVTkMxCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19QV00wCQlKWl9HUElPX0ZVTkNfUFdNCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19QV00xCQlKWl9HUElPX0ZVTkNfUFdNCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19QV00yCQlKWl9HUElPX0ZVTkNfUFdNCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19QV00zCQlKWl9HUElPX0ZVTkNfUFdNCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19QV000CQlKWl9HUElPX0ZVTkNfUFdNCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19QV001CQlKWl9HUElPX0ZVTkNfUFdNCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19QV002CQlKWl9HUElPX0ZVTkNfUFdNCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19QV003CQlKWl9HUElPX0ZVTkNfUFdNCisKKyNkZWZpbmUgSlpfR1BJT19NRU1fU0NMS19SU1ROCQlKWl9HUElPX1BPUlREKDE4KQorI2RlZmluZSBKWl9HUElPX01FTV9CQ0xLCQlKWl9HUElPX1BPUlREKDE5KQorI2RlZmluZSBKWl9HUElPX01FTV9TREFUTwkJSlpfR1BJT19QT1JURCgyMCkKKyNkZWZpbmUgSlpfR1BJT19NRU1fU0RBVEkJCUpaX0dQSU9fUE9SVEQoMjEpCisjZGVmaW5lIEpaX0dQSU9fTUVNX1NZTkMJCUpaX0dQSU9fUE9SVEQoMjIpCisjZGVmaW5lIEpaX0dQSU9fSTJDX1NEQQkJCUpaX0dQSU9fUE9SVEQoMjMpCisjZGVmaW5lIEpaX0dQSU9fSTJDX1NDSwkJCUpaX0dQSU9fUE9SVEQoMjQpCisjZGVmaW5lIEpaX0dQSU9fVUFSVDBfVFhECQlKWl9HUElPX1BPUlREKDI1KQorI2RlZmluZSBKWl9HUElPX1VBUlQwX1JYRAkJSlpfR1BJT19QT1JURCgyNikKKyNkZWZpbmUgSlpfR1BJT19NRU1fQUREUjE3CQlKWl9HUElPX1BPUlREKDI3KQorI2RlZmluZSBKWl9HUElPX01FTV9BRERSMTgJCUpaX0dQSU9fUE9SVEQoMjgpCisjZGVmaW5lIEpaX0dQSU9fVUFSVDBfQ1RTCQlKWl9HUElPX1BPUlREKDMwKQorI2RlZmluZSBKWl9HUElPX1VBUlQwX1JUUwkJSlpfR1BJT19QT1JURCgzMSkKKworI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX1NDTEtfUlNUTglKWl9HUElPX0ZVTkMyCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19NRU1fQkNMSwkJSlpfR1BJT19GVU5DMgorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX1NEQVRPCQlKWl9HUElPX0ZVTkMyCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19NRU1fU0RBVEkJCUpaX0dQSU9fRlVOQzIKKyNkZWZpbmUgSlpfR1BJT19GVU5DX01FTV9TWU5DCQlKWl9HUElPX0ZVTkMyCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19JMkNfU0RBCQlKWl9HUElPX0ZVTkMyCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19JMkNfU0NLCQlKWl9HUElPX0ZVTkMyCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19VQVJUMF9UWEQJCUpaX0dQSU9fRlVOQzIKKyNkZWZpbmUgSlpfR1BJT19GVU5DX1VBUlQwX1JYRAkJSlpfR1BJT19GVU5DMgorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0FERFIxNwkJSlpfR1BJT19GVU5DMgorI2RlZmluZSBKWl9HUElPX0ZVTkNfTUVNX0FERFIxOAkJSlpfR1BJT19GVU5DMgorI2RlZmluZSBKWl9HUElPX0ZVTkNfVUFSVDBfQ1RTCQlKWl9HUElPX0ZVTkMyCisjZGVmaW5lIEpaX0dQSU9fRlVOQ19VQVJUMF9SVFMJCUpaX0dQSU9fRlVOQzIKKworI2RlZmluZSBKWl9HUElPX1VBUlQxX1JYRAkJSlpfR1BJT19QT1JURCgzMCkKKyNkZWZpbmUgSlpfR1BJT19VQVJUMV9UWEQJCUpaX0dQSU9fUE9SVEQoMzEpCisKKyNkZWZpbmUgSlpfR1BJT19GVU5DX1VBUlQxX1JYRAkJSlpfR1BJT19GVU5DMworI2RlZmluZSBKWl9HUElPX0ZVTkNfVUFSVDFfVFhECQlKWl9HUElPX0ZVTkMzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtano0NzQwL2lycS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtano0NzQwL2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NjVjOTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1qejQ3NDAvaXJxLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCwgTGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+CisgKiAgSlo0NzQwIElSUSBkZWZpbml0aW9ucworICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX19BU01fTUFDSF9KWjQ3NDBfSVJRX0hfXworI2RlZmluZSBfX0FTTV9NQUNIX0paNDc0MF9JUlFfSF9fCisKKyNkZWZpbmUgTUlQU19DUFVfSVJRX0JBU0UgMAorI2RlZmluZSBKWjQ3NDBfSVJRX0JBU0UgOAorCisvKiAxc3QtbGV2ZWwgaW50ZXJydXB0cyAqLworI2RlZmluZSBKWjQ3NDBfSVJRKHgpCQkoSlo0NzQwX0lSUV9CQVNFICsgKHgpKQorI2RlZmluZSBKWjQ3NDBfSVJRX0kyQwkJSlo0NzQwX0lSUSgxKQorI2RlZmluZSBKWjQ3NDBfSVJRX1VIQwkJSlo0NzQwX0lSUSgzKQorI2RlZmluZSBKWjQ3NDBfSVJRX1VBUlQxCUpaNDc0MF9JUlEoOCkKKyNkZWZpbmUgSlo0NzQwX0lSUV9VQVJUMAlKWjQ3NDBfSVJRKDkpCisjZGVmaW5lIEpaNDc0MF9JUlFfU0FEQwkJSlo0NzQwX0lSUSgxMikKKyNkZWZpbmUgSlo0NzQwX0lSUV9NU0MJCUpaNDc0MF9JUlEoMTQpCisjZGVmaW5lIEpaNDc0MF9JUlFfUlRDCQlKWjQ3NDBfSVJRKDE1KQorI2RlZmluZSBKWjQ3NDBfSVJRX1NTSQkJSlo0NzQwX0lSUSgxNikKKyNkZWZpbmUgSlo0NzQwX0lSUV9DSU0JCUpaNDc0MF9JUlEoMTcpCisjZGVmaW5lIEpaNDc0MF9JUlFfQUlDCQlKWjQ3NDBfSVJRKDE4KQorI2RlZmluZSBKWjQ3NDBfSVJRX0VUSAkJSlo0NzQwX0lSUSgxOSkKKyNkZWZpbmUgSlo0NzQwX0lSUV9ETUFDCQlKWjQ3NDBfSVJRKDIwKQorI2RlZmluZSBKWjQ3NDBfSVJRX1RDVTIJCUpaNDc0MF9JUlEoMjEpCisjZGVmaW5lIEpaNDc0MF9JUlFfVENVMQkJSlo0NzQwX0lSUSgyMikKKyNkZWZpbmUgSlo0NzQwX0lSUV9UQ1UwCQlKWjQ3NDBfSVJRKDIzKQorI2RlZmluZSBKWjQ3NDBfSVJRX1VEQwkJSlo0NzQwX0lSUSgyNCkKKyNkZWZpbmUgSlo0NzQwX0lSUV9HUElPMwlKWjQ3NDBfSVJRKDI1KQorI2RlZmluZSBKWjQ3NDBfSVJRX0dQSU8yCUpaNDc0MF9JUlEoMjYpCisjZGVmaW5lIEpaNDc0MF9JUlFfR1BJTzEJSlo0NzQwX0lSUSgyNykKKyNkZWZpbmUgSlo0NzQwX0lSUV9HUElPMAlKWjQ3NDBfSVJRKDI4KQorI2RlZmluZSBKWjQ3NDBfSVJRX0lQVQkJSlo0NzQwX0lSUSgyOSkKKyNkZWZpbmUgSlo0NzQwX0lSUV9MQ0QJCUpaNDc0MF9JUlEoMzApCisKKy8qIDJuZC1sZXZlbCBpbnRlcnJ1cHRzICovCisjZGVmaW5lIEpaNDc0MF9JUlFfRE1BKHgpCShKWjQ3NDBfSVJRKDMyKSArIChYKSkKKworI2RlZmluZSBKWjQ3NDBfSVJRX0lOVENfR1BJTyh4KSAoSlo0NzQwX0lSUV9HUElPMCAtICh4KSkKKyNkZWZpbmUgSlo0NzQwX0lSUV9HUElPKHgpCShKWjQ3NDBfSVJRKDQ4KSArICh4KSkKKworI2RlZmluZSBKWjQ3NDBfSVJRX0FEQ19CQVNFCUpaNDc0MF9JUlEoMTc2KQorCisjZGVmaW5lIE5SX0lSUVMgKEpaNDc0MF9JUlFfQURDX0JBU0UgKyA2KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWp6NDc0MC9qejQ3NDBfZmIuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWp6NDc0MC9qejQ3NDBfZmIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTUwZTZmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtano0NzQwL2p6NDc0MF9mYi5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5LCBMYXJzLVBldGVyIENsYXVzZW4gPGxhcnNAbWV0YWZvby5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZgkgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUJTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9NQUNIX0paNDc0MF9KWjQ3NDBfRkJfSF9fCisjZGVmaW5lIF9fQVNNX01BQ0hfSlo0NzQwX0paNDc0MF9GQl9IX18KKworI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisKK2VudW0gano0NzQwX2ZiX2xjZF90eXBlIHsKKwlKWl9MQ0RfVFlQRV9HRU5FUklDXzE2X0JJVCA9IDAsCisJSlpfTENEX1RZUEVfR0VORVJJQ18xOF9CSVQgPSAwIHwgKDEgPDwgNCksCisJSlpfTENEX1RZUEVfU1BFQ0lBTF9URlRfMSA9IDEsCisJSlpfTENEX1RZUEVfU1BFQ0lBTF9URlRfMiA9IDIsCisJSlpfTENEX1RZUEVfU1BFQ0lBTF9URlRfMyA9IDMsCisJSlpfTENEX1RZUEVfTk9OX0lOVEVSTEFDRURfQ0NJUjY1NiA9IDUsCisJSlpfTENEX1RZUEVfSU5URVJMQUNFRF9DQ0lSNjU2ID0gNywKKwlKWl9MQ0RfVFlQRV9TSU5HTEVfQ09MT1JfU1ROID0gOCwKKwlKWl9MQ0RfVFlQRV9TSU5HTEVfTU9OT0NIUk9NRV9TVE4gPSA5LAorCUpaX0xDRF9UWVBFX0RVQUxfQ09MT1JfU1ROID0gMTAsCisJSlpfTENEX1RZUEVfRFVBTF9NT05PQ0hST01FX1NUTiA9IDExLAorCUpaX0xDRF9UWVBFXzhCSVRfU0VSSUFMID0gMTIsCit9OworCisjZGVmaW5lIEpaNDc0MF9GQl9TUEVDSUFMX1RGVF9DT05GSUcoc3RhcnQsIHN0b3ApICgoKHN0YXJ0KSA8PCAxNikgfCAoc3RvcCkpCisKKy8qCisqIHdpZHRoOiB3aWR0aCBvZiB0aGUgbGNkIGRpc3BsYXkgaW4gbW0KKyogaGVpZ2h0OiBoZWlnaHQgb2YgdGhlIGxjZCBkaXNwbGF5IGluIG1tCisqIG51bV9tb2Rlczogc2l6ZSBvZiBtb2RlcworKiBtb2RlczogbGlzdCBvZiB2YWxpZCB2aWRlbyBtb2RlcworKiBicHA6IGJpdHMgcGVyIHBpeGVsIGZvciB0aGUgbGNkCisqIGxjZF90eXBlOiBsY2QgdHlwZQorKi8KKworc3RydWN0IGp6NDc0MF9mYl9wbGF0Zm9ybV9kYXRhIHsKKwl1bnNpZ25lZCBpbnQgd2lkdGg7CisJdW5zaWduZWQgaW50IGhlaWdodDsKKworCXNpemVfdCBudW1fbW9kZXM7CisJc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZXM7CisKKwl1bnNpZ25lZCBpbnQgYnBwOworCWVudW0gano0NzQwX2ZiX2xjZF90eXBlIGxjZF90eXBlOworCisJc3RydWN0IHsKKwkJdWludDMyX3Qgc3BsOworCQl1aW50MzJfdCBjbHM7CisJCXVpbnQzMl90IHBzOworCQl1aW50MzJfdCByZXY7CisJfSBzcGVjaWFsX3RmdF9jb25maWc7CisKKwl1bnNpZ25lZCBwaXhjbGtfZmFsbGluZ19lZGdlOjE7CisJdW5zaWduZWQgZGF0ZV9lbmFibGVfYWN0aXZlX2xvdzoxOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1qejQ3NDAvano0NzQwX21tYy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtano0NzQwL2p6NDc0MF9tbWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTQzZjQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtano0NzQwL2p6NDc0MF9tbWMuaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIF9fTElOVVhfTU1DX0paNDc0MF9NTUMKKyNkZWZpbmUgX19MSU5VWF9NTUNfSlo0NzQwX01NQworCitzdHJ1Y3Qgano0NzQwX21tY19wbGF0Zm9ybV9kYXRhIHsKKwlpbnQgZ3Bpb19wb3dlcjsKKwlpbnQgZ3Bpb19jYXJkX2RldGVjdDsKKwlpbnQgZ3Bpb19yZWFkX29ubHk7CisJdW5zaWduZWQgY2FyZF9kZXRlY3RfYWN0aXZlX2xvdzoxOworCXVuc2lnbmVkIHJlYWRfb25seV9hY3RpdmVfbG93OjE7CisJdW5zaWduZWQgcG93ZXJfYWN0aXZlX2xvdzoxOworCisJdW5zaWduZWQgZGF0YV8xYml0OjE7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWp6NDc0MC9qejQ3NDBfbmFuZC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtano0NzQwL2p6NDc0MF9uYW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI1YjlhNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWp6NDc0MC9qejQ3NDBfbmFuZC5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAsIExhcnMtUGV0ZXIgQ2xhdXNlbiA8bGFyc0BtZXRhZm9vLmRlPgorICogIEpaNDc0MCBTb0MgTkFORCBjb250cm9sbGVyIGRyaXZlcgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUJIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mCSB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQlMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX01BQ0hfSlo0NzQwX0paNDc0MF9OQU5EX0hfXworI2RlZmluZSBfX0FTTV9NQUNIX0paNDc0MF9KWjQ3NDBfTkFORF9IX18KKworI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKworc3RydWN0IGp6X25hbmRfcGxhdGZvcm1fZGF0YSB7CisJaW50CQkJbnVtX3BhcnRpdGlvbnM7CisJc3RydWN0IG10ZF9wYXJ0aXRpb24JKnBhcnRpdGlvbnM7CisKKwlzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQJKmVjY19sYXlvdXQ7CisKKwl1bnNpZ25lZCBpbnQgYnVzeV9ncGlvOworCisJdm9pZCAoKmlkZW50X2NhbGxiYWNrKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIHN0cnVjdCBuYW5kX2NoaXAgKiwKKwkJCQlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqKiwgaW50ICpudW1fcGFydGl0aW9ucyk7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWp6NDc0MC9wbGF0Zm9ybS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtano0NzQwL3BsYXRmb3JtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk4N2E3NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWp6NDc0MC9wbGF0Zm9ybS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAsIExhcnMtUGV0ZXIgQ2xhdXNlbiA8bGFyc0BtZXRhZm9vLmRlPgorICogIEpaNDc0MCBwbGF0Zm9ybSBkZXZpY2UgZGVmaW5pdGlvbnMKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisKKyNpZm5kZWYgX19KWjQ3NDBfUExBVEZPUk1fSAorI2RlZmluZSBfX0paNDc0MF9QTEFURk9STV9ICisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugano0NzQwX3VzYl9vaGNpX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGp6NDc0MF91ZGNfZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugano0NzQwX21tY19kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBqejQ3NDBfcnRjX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGp6NDc0MF9pMmNfZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugano0NzQwX25hbmRfZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugano0NzQwX2ZyYW1lYnVmZmVyX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGp6NDc0MF9pMnNfZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugano0NzQwX3BjbV9kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBqejQ3NDBfY29kZWNfZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugano0NzQwX2FkY19kZXZpY2U7CisKK3ZvaWQgano0NzQwX3NlcmlhbF9kZXZpY2VfcmVnaXN0ZXIodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtano0NzQwL3RpbWVyLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1qejQ3NDAvdGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmFhMDNjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtano0NzQwL3RpbWVyLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAsIExhcnMtUGV0ZXIgQ2xhdXNlbiA8bGFyc0BtZXRhZm9vLmRlPgorICogIEpaNDc0MCBwbGF0Zm9ybSB0aW1lciBzdXBwb3J0CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9NQUNIX0paNDc0MF9USU1FUgorI2RlZmluZSBfX0FTTV9NQUNIX0paNDc0MF9USU1FUgorCit2b2lkIGp6NDc0MF90aW1lcl9lbmFibGVfd2F0Y2hkb2codm9pZCk7Cit2b2lkIGp6NDc0MF90aW1lcl9kaXNhYmxlX3dhdGNoZG9nKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWp6NDc0MC93YXIuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWp6NDc0MC93YXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTViYzE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtano0NzQwL3dhci5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQsIDIwMDcgYnkgUmFsZiBCYWVjaGxlIDxyYWxmQGxpbnV4LW1pcHMub3JnPgorICovCisjaWZuZGVmIF9fQVNNX01JUFNfTUFDSF9KWjQ3NDBfV0FSX0gKKyNkZWZpbmUgX19BU01fTUlQU19NQUNIX0paNDc0MF9XQVJfSAorCisjZGVmaW5lIFI0NjAwX1YxX0lOREVYX0lDQUNIRU9QX1dBUgkwCisjZGVmaW5lIFI0NjAwX1YxX0hJVF9DQUNIRU9QX1dBUgkwCisjZGVmaW5lIFI0NjAwX1YyX0hJVF9DQUNIRU9QX1dBUgkwCisjZGVmaW5lIFI1NDMyX0NQMF9JTlRFUlJVUFRfV0FSCQkwCisjZGVmaW5lIEJDTTEyNTBfTTNfV0FSCQkJMAorI2RlZmluZSBTSUJZVEVfMTk1Nl9XQVIJCQkwCisjZGVmaW5lIE1JUFM0S19JQ0FDSEVfUkVGSUxMX1dBUgkwCisjZGVmaW5lIE1JUFNfQ0FDSEVfU1lOQ19XQVIJCTAKKyNkZWZpbmUgVFg0OVhYX0lDQUNIRV9JTkRFWF9JTlZfV0FSCTAKKyNkZWZpbmUgUk05MDAwX0NERVhfU01QX1dBUgkJMAorI2RlZmluZSBJQ0FDSEVfUkVGSUxMU19XT1JLQVJPVU5EX1dBUgkwCisjZGVmaW5lIFIxMDAwMF9MTFNDX1dBUgkJCTAKKyNkZWZpbmUgTUlQUzM0S19NSVNTRURfSVRMQl9XQVIJCTAKKworI2VuZGlmIC8qIF9fQVNNX01JUFNfTUFDSF9KWjQ3NDBfV0FSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2xvb25nc29uLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9sb29uZ3Nvbi5oCmluZGV4IGZjZGJlM2EuLmNiNjk4NWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2xvb25nc29uLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbG9vbmdzb24uaApAQCAtNDUsNyArNDUsNiBAQAogLyogaXJxIG9wZXJhdGlvbiBmdW5jdGlvbnMgKi8KIGV4dGVybiB2b2lkIGJvbml0b19pcnFkaXNwYXRjaCh2b2lkKTsKIGV4dGVybiB2b2lkIF9faW5pdCBib25pdG9faXJxX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBfX2luaXQgc2V0X2lycV90cmlnZ2VyX21vZGUodm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgbWFjaF9pbml0X2lycSh2b2lkKTsKIGV4dGVybiB2b2lkIG1hY2hfaXJxX2Rpc3BhdGNoKHVuc2lnbmVkIGludCBwZW5kaW5nKTsKIGV4dGVybiBpbnQgbWFjaF9pODI1OV9pcnEodm9pZCk7CkBAIC02Myw2ICs2MiwxNCBAQAogI2RlZmluZSBMT09OR1NPTl9JUlFfQkFTRQkzMgogI2RlZmluZSBMT09OR1NPTjJfUEVSRkNOVF9JUlEJKE1JUFNfQ1BVX0lSUV9CQVNFICsgNikgLyogY3B1IHBlcmYgY291bnRlciAqLwogCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CitzdGF0aWMgaW5saW5lIHZvaWQgZG9fcGVyZmNudF9JUlEodm9pZCkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19PUFJPRklMRSkgfHwgZGVmaW5lZChDT05GSUdfT1BST0ZJTEVfTU9EVUxFKQorCWRvX0lSUShMT09OR1NPTjJfUEVSRkNOVF9JUlEpOworI2VuZGlmCit9CisKICNkZWZpbmUgTE9PTkdTT05fRkxBU0hfQkFTRQkweDFjMDAwMDAwCiAjZGVmaW5lIExPT05HU09OX0ZMQVNIX1NJWkUJMHgwMjAwMDAwMAkvKiAzMk0gKi8KICNkZWZpbmUgTE9PTkdTT05fRkxBU0hfVE9QCShMT09OR1NPTl9GTEFTSF9CQVNFK0xPT05HU09OX0ZMQVNIX1NJWkUtMSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjE1NTAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjE1NTAuaAppbmRleCA1ODc5NjQxLi5mYzRkNzY2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxNTUwLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTU1MC5oCkBAIC00MCwxNCArNDAsNiBAQAogI2RlZmluZSBTTUJVU19QU0NfQkFTRQkJUFNDMl9CQVNFX0FERFIKICNkZWZpbmUgSTJTX1BTQ19CQVNFCQlQU0MzX0JBU0VfQUREUgogCi0jaWYgZGVmaW5lZChDT05GSUdfTVREX1BCMTU1MF9CT09UKSAmJiBkZWZpbmVkKENPTkZJR19NVERfUEIxNTUwX1VTRVIpCi0jZGVmaW5lIFBCMTU1MF9CT1RIX0JBTktTCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NVERfUEIxNTUwX0JPT1QpICYmICFkZWZpbmVkKENPTkZJR19NVERfUEIxNTUwX1VTRVIpCi0jZGVmaW5lIFBCMTU1MF9CT09UX09OTFkKLSNlbGlmICFkZWZpbmVkKENPTkZJR19NVERfUEIxNTUwX0JPT1QpICYmIGRlZmluZWQoQ09ORklHX01URF9QQjE1NTBfVVNFUikKLSNkZWZpbmUgUEIxNTUwX1VTRVJfT05MWQotI2VuZGlmCi0KIC8qCiAgKiBUaW1pbmcgdmFsdWVzIGFzIGRlc2NyaWJlZCBpbiBkYXRhYm9vaywgKiBucyB2YWx1ZSBzdHJpcHBlZCBvZgogICogbG93ZXIgMiBiaXRzLgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9hc2ljLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2FzaWMuaAppbmRleCBiY2FkNDNhLi5jNzA3N2E2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2FzaWMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2FzaWMuaApAQCAtMjAsNiArMjAsNyBAQAogI2RlZmluZSBfQVNNX01BQ0hfUE9XRVJUVl9BU0lDX0gKIAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXBvd2VydHYvYXNpY19yZWdzLmg+CiAKICNkZWZpbmUgRFZSX0NBUEFCTEUgICAgICgxPDwwKQpAQCAtNDAsMTkgKzQxLDIzIEBACiAJRkFNSUxZXzg2MDBWWkIsCiAJRkFNSUxZXzE1MDBWWkUsCiAJRkFNSUxZXzE1MDBWWkYsCisJRkFNSUxZXzg3MDAsCiAJRkFNSUxJRVMKIH07CiAKIC8qIFJlZ2lzdGVyIG1hcHMgZm9yIGVhY2ggQVNJQyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWdpc3Rlcl9tYXAgY2FsbGlvcGVfcmVnaXN0ZXJfbWFwOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWdpc3Rlcl9tYXAgY3JvbnVzX3JlZ2lzdGVyX21hcDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVnaXN0ZXJfbWFwIGdhaWFfcmVnaXN0ZXJfbWFwOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWdpc3Rlcl9tYXAgemV1c19yZWdpc3Rlcl9tYXA7CiAKIGV4dGVybiBzdHJ1Y3QgcmVzb3VyY2UgZHZyX2Nyb251c19yZXNvdXJjZXNbXTsKK2V4dGVybiBzdHJ1Y3QgcmVzb3VyY2UgZHZyX2dhaWFfcmVzb3VyY2VzW107CiBleHRlcm4gc3RydWN0IHJlc291cmNlIGR2cl96ZXVzX3Jlc291cmNlc1tdOwogZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSBub25fZHZyX2NhbGxpb3BlX3Jlc291cmNlc1tdOwogZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSBub25fZHZyX2Nyb251c19yZXNvdXJjZXNbXTsKIGV4dGVybiBzdHJ1Y3QgcmVzb3VyY2Ugbm9uX2R2cl9jcm9udXNsaXRlX3Jlc291cmNlc1tdOworZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSBub25fZHZyX2dhaWFfcmVzb3VyY2VzW107CiBleHRlcm4gc3RydWN0IHJlc291cmNlIG5vbl9kdnJfdnpfY2FsbGlvcGVfcmVzb3VyY2VzW107CiBleHRlcm4gc3RydWN0IHJlc291cmNlIG5vbl9kdnJfdnplX2NhbGxpb3BlX3Jlc291cmNlc1tdOwogZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSBub25fZHZyX3Z6Zl9jYWxsaW9wZV9yZXNvdXJjZXNbXTsKQEAgLTY3LDE2ICs3MiwyNCBAQAogZXh0ZXJuIGludCBwbGF0Zm9ybV9zdXBwb3J0c19wY2llKHZvaWQpOwogZXh0ZXJuIGludCBwbGF0Zm9ybV9zdXBwb3J0c19kaXNwbGF5KHZvaWQpOwogZXh0ZXJuIHZvaWQgY29uZmlndXJlX3BsYXRmb3JtKHZvaWQpOwotZXh0ZXJuIHZvaWQgcGxhdGZvcm1fY29uZmlndXJlX3VzYl9laGNpKHZvaWQpOwotZXh0ZXJuIHZvaWQgcGxhdGZvcm1fdW5jb25maWd1cmVfdXNiX2VoY2kodm9pZCk7Ci1leHRlcm4gdm9pZCBwbGF0Zm9ybV9jb25maWd1cmVfdXNiX29oY2kodm9pZCk7Ci1leHRlcm4gdm9pZCBwbGF0Zm9ybV91bmNvbmZpZ3VyZV91c2Jfb2hjaSh2b2lkKTsKIAogLyogUGxhdGZvcm0gUmVzb3VyY2VzICovCiAjZGVmaW5lIEFTSUNfUkVTT1VSQ0VfR0VUX0VYSVNUUyAxCiBleHRlcm4gc3RydWN0IHJlc291cmNlICphc2ljX3Jlc291cmNlX2dldChjb25zdCBjaGFyICpuYW1lKTsKIGV4dGVybiB2b2lkIHBsYXRmb3JtX3JlbGVhc2VfbWVtb3J5KHZvaWQgKmJhZGRyLCBpbnQgc2l6ZSk7CiAKKy8qIFVTQiBjb25maWd1cmF0aW9uICovCitzdHJ1Y3QgdXNiX2hjZDsJCQkvKiBGb3J3YXJkIHJlZmVyZW5jZSAqLworZXh0ZXJuIHZvaWQgcGxhdGZvcm1fY29uZmlndXJlX3VzYl9laGNpKHZvaWQpOworZXh0ZXJuIHZvaWQgcGxhdGZvcm1fdW5jb25maWd1cmVfdXNiX2VoY2kodm9pZCk7CitleHRlcm4gdm9pZCBwbGF0Zm9ybV9jb25maWd1cmVfdXNiX29oY2kodm9pZCk7CitleHRlcm4gdm9pZCBwbGF0Zm9ybV91bmNvbmZpZ3VyZV91c2Jfb2hjaSh2b2lkKTsKKworLyogUmVzb3VyY2UgZm9yIEFTSUMgcmVnaXN0ZXJzICovCitleHRlcm4gc3RydWN0IHJlc291cmNlIGFzaWNfcmVzb3VyY2U7CitleHRlcm4gaW50IHBsYXRmb3JtX3VzYl9kZXZpY2VzX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKmVjaGlfZGV2LAorCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKipvaGNpX2Rldik7CisKIC8qIFJlYm9vdCBDYXVzZSAqLwogZXh0ZXJuIHZvaWQgc2V0X3JlYm9vdF9jYXVzZShjaGFyIGNvZGUsIHVuc2lnbmVkIGludCBkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YTIpOwogZXh0ZXJuIHZvaWQgc2V0X2xvY2tlZF9yZWJvb3RfY2F1c2UoY2hhciBjb2RlLCB1bnNpZ25lZCBpbnQgZGF0YSwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvYXNpY19yZWdfbWFwLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2FzaWNfcmVnX21hcC5oCmluZGV4IDZmMjZjYjAuLjIwMzQ4ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvYXNpY19yZWdfbWFwLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9hc2ljX3JlZ19tYXAuaApAQCAtNjQsNyArNjQsNyBAQAogUkVHSVNURVJfTUFQX0VMRU1FTlQoaW50X2xldmVsXzBfMCkKIFJFR0lTVEVSX01BUF9FTEVNRU5UKGludF9kb2NzaXNfZW4pCiBSRUdJU1RFUl9NQVBfRUxFTUVOVChtaXBzX3BsbF9zZXR1cCkKLVJFR0lTVEVSX01BUF9FTEVNRU5UKHVzYl9mcykKK1JFR0lTVEVSX01BUF9FTEVNRU5UKGZzNDMyeDRiNF91c2JfY3RsKQogUkVHSVNURVJfTUFQX0VMRU1FTlQodGVzdF9idXMpCiBSRUdJU1RFUl9NQVBfRUxFTUVOVChjcnRfc3BhcmUpCiBSRUdJU1RFUl9NQVBfRUxFTUVOVCh1c2IyX29oY2lfaW50X21hc2spCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2FzaWNfcmVncy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9hc2ljX3JlZ3MuaAppbmRleCAxZTExMjM2Li5kZWVjYjI2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2FzaWNfcmVncy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvYXNpY19yZWdzLmgKQEAgLTI3LDcgKzI3LDggQEAKIAlBU0lDX0NBTExJT1BFLAogCUFTSUNfQ1JPTlVTLAogCUFTSUNfQ1JPTlVTTElURSwKLQlBU0lDUworCUFTSUNfR0FJQSwKKwlBU0lDUwkJCS8qIE51bWJlciBvZiBzdXBwb3J0ZWQgQVNJQ3MgKi8KIH07CiAKIC8qIGhhcmRjb2RlZCB2YWx1ZXMgcmVhZCBmcm9tIENoaXAgVmVyc2lvbiByZWdpc3RlcnMgKi8KQEAgLTM3LDYgKzM4LDcgQEAKIAogI2RlZmluZSBOQU5EX0ZMQVNIX0JBU0UJCTB4MDMwMDAwMDAKICNkZWZpbmUgQ0FMTElPUEVfSU9fQkFTRQkweDA4MDAwMDAwCisjZGVmaW5lIEdBSUFfSU9fQkFTRQkJMHgwOTAwMDAwMAogI2RlZmluZSBDUk9OVVNfSU9fQkFTRQkJMHgwOTAwMDAwMAogI2RlZmluZSBaRVVTX0lPX0JBU0UJCTB4MDkwMDAwMDAKIApAQCAtOTksNiArMTAxLDcgQEAKIH0KIAogZXh0ZXJuIHN0cnVjdCByZWdpc3Rlcl9tYXAgX2FzaWNfcmVnaXN0ZXJfbWFwOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXNpY19waHlfYmFzZTsKIAogLyoKICAqIE1hY3JvcyB0byBpbnRlcmZhY2UgdG8gcmVnaXN0ZXJzIHRocm91Z2ggdGhlaXIgaW9yZW1hcHBlZCBhZGRyZXNzCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2RtYS1jb2hlcmVuY2UuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvZG1hLWNvaGVyZW5jZS5oCmluZGV4IDViOGQ1ZWIuLmY3NjAyOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvZG1hLWNvaGVyZW5jZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvZG1hLWNvaGVyZW5jZS5oCkBAIC02NSwyMSArNjUsMjEgQEAKIAlzaXplX3Qgc2l6ZSkKIHsKIAlpZiAoaXNfa3NlZzIoYWRkcikpCi0JCXJldHVybiBwaHlzX3RvX2J1cyh2aXJ0X3RvX3BoeXNfZnJvbV9wdGUoYWRkcikpOworCQlyZXR1cm4gcGh5c190b19kbWEodmlydF90b19waHlzX2Zyb21fcHRlKGFkZHIpKTsKIAllbHNlCi0JCXJldHVybiBwaHlzX3RvX2J1cyh2aXJ0X3RvX3BoeXMoYWRkcikpOworCQlyZXR1cm4gcGh5c190b19kbWEodmlydF90b19waHlzKGFkZHIpKTsKIH0KIAogc3RhdGljIGlubGluZSBkbWFfYWRkcl90IHBsYXRfbWFwX2RtYV9tZW1fcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JcmV0dXJuIHBoeXNfdG9fYnVzKHBhZ2VfdG9fcGh5cyhwYWdlKSk7CisJcmV0dXJuIHBoeXNfdG9fZG1hKHBhZ2VfdG9fcGh5cyhwYWdlKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwbGF0X2RtYV9hZGRyX3RvX3BoeXMoc3RydWN0IGRldmljZSAqZGV2LAogCWRtYV9hZGRyX3QgZG1hX2FkZHIpCiB7Ci0JcmV0dXJuIGJ1c190b19waHlzKGRtYV9hZGRyKTsKKwlyZXR1cm4gZG1hX3RvX3BoeXMoZG1hX2FkZHIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcGxhdF91bm1hcF9kbWFfbWVtKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvaW9yZW1hcC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9pb3JlbWFwLmgKaW5kZXggZTYyNzZkNS4uMDc2ZjJlZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9pb3JlbWFwLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9pb3JlbWFwLmgKQEAgLTEwLDY0ICsxMCwxMDEgQEAKICNkZWZpbmUgX19BU01fTUFDSF9QT1dFUlRWX0lPUkVNQVBfSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAotI2RlZmluZSBMT1dfTUVNX0JPVU5EQVJZX1BIWVMJMHgyMDAwMDAwMAotI2RlZmluZSBMT1dfTUVNX0JPVU5EQVJZX01BU0sJKH4oTE9XX01FTV9CT1VOREFSWV9QSFlTIC0gMSkpCisjaW5jbHVkZSA8YXNtL3BndGFibGUtYml0cy5oPgorI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKworLyogV2UncmUgZ29pbmcgdG8gbWVzcyB3aXRoIGJpdHMsIHNvIGdldCBzaXplcyAqLworI2RlZmluZSBJT1JfQlBDCQkJOAkJCS8qIEJpdHMgcGVyIGNoYXIgKi8KKyNkZWZpbmUgSU9SX1BIWVNfQklUUwkJKElPUl9CUEMgKiBzaXplb2YocGh5c19hZGRyX3QpKQorI2RlZmluZSBJT1JfRE1BX0JJVFMJCShJT1JfQlBDICogc2l6ZW9mKGRtYV9hZGRyX3QpKQogCiAvKgotICogVGhlIGJ1cyBhZGRyZXNzZXMgYXJlIGRpZmZlcmVudCB0aGFuIHRoZSBwaHlzaWNhbCBhZGRyZXNzZXMgdGhhdAotICogdGhlIHByb2Nlc3NvciBzZWVzIGJ5IGFuIG9mZnNldC4gVGhpcyBvZmZzZXQgdmFyaWVzIGJ5IEFTSUMKLSAqIHZlcnNpb24uIERlZmluZSBhIHZhcmlhYmxlIHRvIGhvbGQgdGhlIG9mZnNldCBhbmQgc29tZSBtYWNyb3MgdG8KLSAqIG1ha2UgdGhlIGNvbnZlcnNpb24gc2ltcGxlci4gKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIHBoeXNfdG9fYnVzX29mZnNldDsKLQotI2lmZGVmIENPTkZJR19ISUdITUVNCi0jZGVmaW5lIE1FTV9HQVBfUEhZUwkJMHg2MDAwMDAwMAotLyoKLSAqIFRPRE86IFdlIHdpbGwgdXNlIHRoZSBoYXJkIGNvZGUgZm9yIGNvbnZlcnNpb24gYmV0d2VlbiBwaHlzaWNhbCBhbmQKLSAqIGJ1cyB1bnRpbCB0aGUgYm9vdGxvYWRlciByZWxlYXNlcyB0aGVpciBkZXZpY2UgdHJlZSB0byB1cy4KKyAqIERlZmluZSB0aGUgZ3JhbnVsYXJpdHkgb2YgcGh5c2ljYWwvRE1BIG1hcHBpbmcgaW4gdGVybXMgb2YgdGhlIG51bWJlcgorICogb2YgYml0cyB0aGF0IGRlZmluZXMgdGhlIG9mZnNldCB3aXRoaW4gYSBncmFpbi4gVGhlc2Ugd2lsbCBiZSB0aGUKKyAqIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgb2YgdGhlIGFkZHJlc3MuIFRoZSByZXN0IG9mIGEgcGh5c2ljYWwgb3IgRE1BCisgKiBhZGRyZXNzIHdpbGwgYmUgdXNlZCB0byBpbmRleCBpbnRvIGFuIGFwcHJvcHJpYXRlIHRhYmxlIHRvIGZpbmQgdGhlCisgKiBvZmZzZXQgdG8gYWRkIHRvIHRoZSBhZGRyZXNzIHRvIHlpZWxkIHRoZSBjb3JyZXNwb25kaW5nIERNQSBvciBwaHlzaWNhbAorICogYWRkcmVzcywgcmVzcGVjdGl2ZWx5LgogICovCi0jZGVmaW5lIHBoeXNfdG9fYnVzKHgpICgoKHgpIDwgTE9XX01FTV9CT1VOREFSWV9QSFlTKSA/IFwKLQkoKHgpICsgcGh5c190b19idXNfb2Zmc2V0KSA6ICh4KSkKLSNkZWZpbmUgYnVzX3RvX3BoeXMoeCkgKCgoeCkgPCBNRU1fR0FQX1BIWVNfQUREUikgPyBcCi0JKCh4KSAtIHBoeXNfdG9fYnVzX29mZnNldCkgOiAoeCkpCi0jZWxzZQotI2RlZmluZSBwaHlzX3RvX2J1cyh4KSAoKHgpICsgcGh5c190b19idXNfb2Zmc2V0KQotI2RlZmluZSBidXNfdG9fcGh5cyh4KSAoKHgpIC0gcGh5c190b19idXNfb2Zmc2V0KQotI2VuZGlmCisjZGVmaW5lIElPUl9MU0JJVFMJCTIyCQkJLyogQml0cyBpbiBhIGdyYWluICovCiAKIC8qCi0gKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgYWRkcmVzcyB3ZSBhcmUgZ2l2ZW4gaXMgZm9yIGFuIEFTSUMgZGV2aWNlCi0gKiBQYXJhbXM6ICBhZGRyICAgIEFkZHJlc3MgdG8gY2hlY2sKLSAqIFJldHVybnM6IFplcm8gaWYgdGhlIGFkZHJlc3MgaXMgbm90IGZvciBBU0lDIGRldmljZXMsIG5vbi16ZXJvCi0gKiAgICAgIGlmIGl0IGlzLgorICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIG1vc3Qgc2lnbmlmaWNhbnQgYWRkcmVzcyBiaXRzIGFmdGVyIHJlbW92aW5nIHRob3NlCisgKiB1c2VkIGZvciB0aGUgb2Zmc2V0IHdpdGhpbiBhIGdyYWluIGFuZCB0aGVuIGNvbXB1dGUgdGhlIG51bWJlciBvZiB0YWJsZQorICogZW50cmllcyBmb3IgdGhlIGNvbnZlcnNpb24uCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGFzaWNfaXNfZGV2aWNlX2FkZHIocGh5c190IGFkZHIpCisjZGVmaW5lIElPUl9QSFlTX01TQklUUwkJKElPUl9QSFlTX0JJVFMgLSBJT1JfTFNCSVRTKQorI2RlZmluZSBJT1JfTlVNX1BIWVNfVE9fRE1BCSgocGh5c19hZGRyX3QpIDEgPDwgSU9SX1BIWVNfTVNCSVRTKQorCisjZGVmaW5lIElPUl9ETUFfTVNCSVRTCQkoSU9SX0RNQV9CSVRTIC0gSU9SX0xTQklUUykKKyNkZWZpbmUgSU9SX05VTV9ETUFfVE9fUEhZUwkoKGRtYV9hZGRyX3QpIDEgPDwgSU9SX0RNQV9NU0JJVFMpCisKKy8qCisgKiBEZWZpbmUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgYXMgZWxlbWVudHMgaW4gdGhlIGFycmF5cyBmb3IgdGhlIGNvbnZlcnNpb24KKyAqIGJldHdlZW4gcGh5c2ljYWwgYW5kIERNQSBhZGRyZXNzZXMuIFdlIGRvIHNvbWUgc2xpZ2h0bHkgZmFuY3kgbWF0aCB0bworICogY29tcHV0ZSB0aGUgd2lkdGggb2YgdGhlIG9mZnNldCBlbGVtZW50IG9mIHRoZSBjb252ZXJzaW9uIHRhYmxlcyBzbworICogdGhhdCB3ZSBjYW4gaGF2ZSB0aGUgc21hbGxlc3QgY29udmVyc2lvbiB0YWJsZXMuIE5leHQsIHJvdW5kIHVwIHRoZQorICogc2l6ZXMgdG8gdGhlIG5leHQgaGlnaGVyIHBvd2VyIG9mIHR3bywgaS5lLiB0aGUgb2Zmc2V0IGVsZW1lbnQgd2lsbCBoYXZlCisgKiA4LCAxNiwgMzIsIDY0LCBldGMuIGJpdHMuIFRoaXMgZWxpbWluYXRlcyB0aGUgbmVlZCB0byBtYXNrIG9mZiBhbnkKKyAqIGJpdHMuICBGaW5hbGx5LCB3ZSBjb21wdXRlIGEgc2hpZnQgdmFsdWUgdGhhdCBwdXRzIHRoZSBtb3N0IHNpZ25pZmljYW50CisgKiBiaXRzIG9mIHRoZSBvZmZzZXQgaW50byB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZSBvZmZzZXQgZWxlbWVudC4KKyAqIFRoaXMgbWFrZXMgaXQgbW9yZSBlZmZpY2llbnQgb24gcHJvY2Vzc29ycyB3aXRob3V0IGJhcnJlbCBzaGlmdGVycyBhbmQKKyAqIGVhc2llciB0byBzZWUgdGhlIHZhbHVlcyBpZiB0aGUgY29udmVyc2lvbiB0YWJsZSBpcyBkdW1wZWQgaW4gYmluYXJ5LgorICovCisjZGVmaW5lIF9JT1JfT0ZGU0VUX1dJRFRIKG4pCSgxIDw8IG9yZGVyX2Jhc2VfMihuKSkKKyNkZWZpbmUgSU9SX09GRlNFVF9XSURUSChuKSBcCisJKF9JT1JfT0ZGU0VUX1dJRFRIKG4pIDwgOCA/IDggOiBfSU9SX09GRlNFVF9XSURUSChuKSkKKworI2RlZmluZSBJT1JfUEhZU19PRkZTRVRfQklUUwlJT1JfT0ZGU0VUX1dJRFRIKElPUl9QSFlTX01TQklUUykKKyNkZWZpbmUgSU9SX1BIWVNfU0hJRlQJCShJT1JfUEhZU19CSVRTIC0gSU9SX1BIWVNfT0ZGU0VUX0JJVFMpCisKKyNkZWZpbmUgSU9SX0RNQV9PRkZTRVRfQklUUwlJT1JfT0ZGU0VUX1dJRFRIKElPUl9ETUFfTVNCSVRTKQorI2RlZmluZSBJT1JfRE1BX1NISUZUCQkoSU9SX0RNQV9CSVRTIC0gSU9SX0RNQV9PRkZTRVRfQklUUykKKworc3RydWN0IGlvcl9waHlzX3RvX2RtYSB7CisJZG1hX2FkZHJfdCBvZmZzZXQ6SU9SX0RNQV9PRkZTRVRfQklUUyBfX3BhY2tlZAorCQlfX2FsaWduZWQoKElPUl9ETUFfT0ZGU0VUX0JJVFMgLyBJT1JfQlBDKSk7Cit9OworCitzdHJ1Y3QgaW9yX2RtYV90b19waHlzIHsKKwlkbWFfYWRkcl90IG9mZnNldDpJT1JfUEhZU19PRkZTRVRfQklUUyBfX3BhY2tlZAorCQlfX2FsaWduZWQoKElPUl9QSFlTX09GRlNFVF9CSVRTIC8gSU9SX0JQQykpOworfTsKKworZXh0ZXJuIHN0cnVjdCBpb3JfcGh5c190b19kbWEgX2lvcl9waHlzX3RvX2RtYVtJT1JfTlVNX1BIWVNfVE9fRE1BXTsKK2V4dGVybiBzdHJ1Y3QgaW9yX2RtYV90b19waHlzIF9pb3JfZG1hX3RvX3BoeXNbSU9SX05VTV9ETUFfVE9fUEhZU107CisKK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBfcGh5c190b19kbWFfb2Zmc2V0X3JhdyhwaHlzX2FkZHJfdCBwaHlzKQogewotCXJldHVybiAhKChwaHlzX3QpYWRkciAmIChwaHlzX3QpIExPV19NRU1fQk9VTkRBUllfTUFTSyk7CisJcmV0dXJuIChkbWFfYWRkcl90KV9pb3JfcGh5c190b19kbWFbcGh5cyA+PiBJT1JfTFNCSVRTXS5vZmZzZXQ7CiB9CiAKLS8qCi0gKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgYWRkcmVzcyB3ZSBhcmUgZ2l2ZW4gaXMgZXh0ZXJuYWwgUkFNIG1hcHBhYmxlCi0gKiBpbnRvIEtTRUcxLgotICogUGFyYW1zOiAgYWRkciAgICBBZGRyZXNzIHRvIGNoZWNrCi0gKiBSZXR1cm5zOiBaZXJvIGlmIHRoZSBhZGRyZXNzIGlzIG5vdCBmb3IgZXh0ZXJuYWwgUkFNIGFuZAotICovCi1zdGF0aWMgaW5saW5lIGludCBhc2ljX2lzX2xvd21lbV9yYW1fYWRkcihwaHlzX3QgYWRkcikKK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBfZG1hX3RvX3BoeXNfb2Zmc2V0X3JhdyhkbWFfYWRkcl90IGRtYSkKIHsKLQkvKgotCSAqIFRoZSBSQU0gYWx3YXlzIHN0YXJ0cyBhdCB0aGUgZm9sbG93aW5nIGFkZHJlc3MgaW4gdGhlIHByb2Nlc3NvcidzCi0JICogcGh5c2ljYWwgYWRkcmVzcyBzcGFjZQotCSAqLwotCXN0YXRpYyBjb25zdCBwaHlzX3QgcGh5c19yYW1fYmFzZSA9IDB4MTAwMDAwMDA7Ci0JcGh5c190IGJ1c19yYW1fYmFzZTsKLQotCWJ1c19yYW1fYmFzZSA9IHBoeXNfdG9fYnVzX29mZnNldCArIHBoeXNfcmFtX2Jhc2U7Ci0KLQlyZXR1cm4gYWRkciA+PSBidXNfcmFtX2Jhc2UgJiYKLQkJYWRkciA8IChidXNfcmFtX2Jhc2UgKyAoTE9XX01FTV9CT1VOREFSWV9QSFlTIC0gcGh5c19yYW1fYmFzZSkpOworCXJldHVybiAoZG1hX2FkZHJfdClfaW9yX2RtYV90b19waHlzW2RtYSA+PiBJT1JfTFNCSVRTXS5vZmZzZXQ7CiB9CiAKKy8qIFRoZXNlIGFyZSBub3QgcG9ydGFibGUgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBpbiBkcml2ZXJzLiBEcml2ZXJzIHNob3VsZAorICogYmUgdXNpbmcgaW9yZW1hcCgpIGFuZCBmcmllbmRzIHRvIG1hcCBwaHlzaWNhbCBhZGRyZXNlcyB0byB2aXJ0dWFsCisgKiBhZGRyZXNzZXMgYW5kIGRtYV9tYXAqKCkgYW5kIGZyaWVuZHMgdG8gbWFwIHZpcnR1YWwgYWRkcmVzc2VzIGludG8gRE1BCisgKiBhZGRyZXNzZXMgYW5kIGJhY2suCisgKi8KK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBwaHlzX3RvX2RtYShwaHlzX2FkZHJfdCBwaHlzKQoreworCXJldHVybiBwaHlzICsgKF9waHlzX3RvX2RtYV9vZmZzZXRfcmF3KHBoeXMpIDw8IElPUl9QSFlTX1NISUZUKTsKK30KKworc3RhdGljIGlubGluZSBwaHlzX2FkZHJfdCBkbWFfdG9fcGh5cyhkbWFfYWRkcl90IGRtYSkKK3sKKwlyZXR1cm4gZG1hICsgKF9kbWFfdG9fcGh5c19vZmZzZXRfcmF3KGRtYSkgPDwgSU9SX0RNQV9TSElGVCk7Cit9CisKK2V4dGVybiB2b2lkIGlvcmVtYXBfYWRkX21hcChkbWFfYWRkcl90IHBoeXMsIHBoeXNfYWRkcl90IGFsaWFzLAorCWRtYV9hZGRyX3Qgc2l6ZSk7CisKIC8qCiAgKiBBbGxvdyBwaHlzaWNhbCBhZGRyZXNzZXMgdG8gYmUgZml4ZWQgdXAgdG8gaGVscCBwZXJpcGhlcmFscyBsb2NhdGVkCiAgKiBvdXRzaWRlIHRoZSBsb3cgMzItYml0IHJhbmdlIC0tIGdlbmVyaWMgcGFzcy10aHJvdWdoIHZlcnNpb24uCkBAIC03NywxMCArMTE0LDUwIEBACiAJcmV0dXJuIHBoeXNfYWRkcjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKnBsYXRfaW9yZW1hcChwaHlzX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCisvKgorICogSGFuZGxlIHRoZSBzcGVjaWFsIGNhc2Ugb2YgYWRkcmVzc2VzIHRoZSBhcmVhIGFsaWFzZWQgaW50byB0aGUgZmlyc3QKKyAqIDUxMiBNaUIgb2YgdGhlIHByb2Nlc3NvcidzIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuIFRoZXNlIHR1cm4gaW50byBlaXRoZXIKKyAqIGtzZWcwIG9yIGtzZWcxIGFkZHJlc3NlcywgZGVwZW5kaW5nIG9uIGZsYWdzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqcGxhdF9pb3JlbWFwKHBoeXNfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLAogCXVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0JcmV0dXJuIE5VTEw7CisJcGh5c19hZGRyX3Qgc3RhcnRfb2Zmc2V0OworCXZvaWQgX19pb21lbSAqcmVzdWx0ID0gTlVMTDsKKworCS8qIFN0YXJ0IGJ5IGNoZWNraW5nIHRvIHNlZSB3aGV0aGVyIHRoaXMgaXMgYW4gYWxpYXNlZCBhZGRyZXNzICovCisJc3RhcnRfb2Zmc2V0ID0gX2RtYV90b19waHlzX29mZnNldF9yYXcoc3RhcnQpOworCisJLyoKKwkgKiBJZjoKKwkgKiBvCXRoZSBtZW1vcnkgaXMgYWxpYXNlZCBpbnRvIHRoZSBmaXJzdCA1MTIgTWlCLCBhbmQKKwkgKiBvCXRoZSBzdGFydCBhbmQgZW5kIGFyZSBpbiB0aGUgc2FtZSBSQU0gYmFuaywgYW5kCisJICogbwl3ZSBkb24ndCBoYXZlIGEgemVybyBzaXplIG9yIHdyYXAgYXJvdW5kLCBhbmQKKwkgKiBvCXdlIGFyZSBzdXBwb3NlZCB0byBjcmVhdGUgYW4gdW5jYWNoZWQgbWFwcGluZywKKwkgKgloYW5kbGUgdGhpcyBpcyBhIGtzZWcwIG9yIGtzZWcxIGFkZHJlc3MKKwkgKi8KKwlpZiAoc3RhcnRfb2Zmc2V0ICE9IDApIHsKKwkJcGh5c19hZGRyX3QgbGFzdDsKKwkJZG1hX2FkZHJfdCBkbWFfdG9fcGh5c19vZmZzZXQ7CisKKwkJbGFzdCA9IHN0YXJ0ICsgc2l6ZSAtIDE7CisJCWRtYV90b19waHlzX29mZnNldCA9CisJCQlfZG1hX3RvX3BoeXNfb2Zmc2V0X3JhdyhsYXN0KSA8PCBJT1JfRE1BX1NISUZUOworCisJCWlmIChkbWFfdG9fcGh5c19vZmZzZXQgPT0gc3RhcnRfb2Zmc2V0ICYmCisJCQlzaXplICE9IDAgJiYgc3RhcnQgPD0gbGFzdCkgeworCQkJcGh5c190IGFkanVzdGVkX3N0YXJ0OworCQkJYWRqdXN0ZWRfc3RhcnQgPSBzdGFydCArIHN0YXJ0X29mZnNldDsKKwkJCWlmIChmbGFncyA9PSBfQ0FDSEVfVU5DQUNIRUQpCisJCQkJcmVzdWx0ID0gKHZvaWQgX19pb21lbSAqKSAodW5zaWduZWQgbG9uZykKKwkJCQkJQ0tTRUcxQUREUihhZGp1c3RlZF9zdGFydCk7CisJCQllbHNlCisJCQkJcmVzdWx0ID0gKHZvaWQgX19pb21lbSAqKSAodW5zaWduZWQgbG9uZykKKwkJCQkJQ0tTRUcwQUREUihhZGp1c3RlZF9zdGFydCk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgaW5saW5lIGludCBwbGF0X2lvdW5tYXAoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtdHg0OXh4L2ttYWxsb2MuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXR4NDl4eC9rbWFsbG9jLmgKaW5kZXggOTEzZmYxOS4uYjc0Y2FmNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtdHg0OXh4L2ttYWxsb2MuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC10eDQ5eHgva21hbGxvYy5oCkBAIC0xLDggKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9NQUNIX1RYNDlYWF9LTUFMTE9DX0gKICNkZWZpbmUgX19BU01fTUFDSF9UWDQ5WFhfS01BTExPQ19ICiAKLS8qCi0gKiBBbGwgaGFwcHksIG5vIG5lZWQgdG8gZGVmaW5lIEFSQ0hfS01BTExPQ19NSU5BTElHTgotICovCisjZGVmaW5lIEFSQ0hfS01BTExPQ19NSU5BTElHTglMMV9DQUNIRV9CWVRFUwogCiAjZW5kaWYgLyogX19BU01fTUFDSF9UWDQ5WFhfS01BTExPQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwc3JlZ3MuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzcmVncy5oCmluZGV4IGM2ZTNjOTMuLjMzNTQ3NGMxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwc3JlZ3MuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwc3JlZ3MuaApAQCAtNDA4LDYgKzQwOCw3IEBACiAjZGVmaW5lICBTVEFUVVNCX0lQMTUJCTcKICNkZWZpbmUgIFNUQVRVU0ZfSVAxNQkJKF9VTENBU1RfKDEpIDw8ICA3KQogI2RlZmluZSBTVDBfQ0gJCQkweDAwMDQwMDAwCisjZGVmaW5lIFNUMF9OTUkJCQkweDAwMDgwMDAwCiAjZGVmaW5lIFNUMF9TUgkJCTB4MDAxMDAwMDAKICNkZWZpbmUgU1QwX1RTCQkJMHgwMDIwMDAwMAogI2RlZmluZSBTVDBfQkVWCQkJMHgwMDQwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9vY3Rlb24uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vb2N0ZW9uLmgKaW5kZXggY2E2MjE0Yi4uOTE3YTZjNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9vY3Rlb24uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL29jdGVvbi5oCkBAIC01MCw2ICs1MCw3IEBACiBleHRlcm4gYXNtbGlua2FnZSB2b2lkIG9jdGVvbl9jb3AyX3Jlc3RvcmUoc3RydWN0IG9jdGVvbl9jb3AyX3N0YXRlICp0YXNrKTsKIAogZXh0ZXJuIHZvaWQgb2N0ZW9uX2luaXRfY3ZtY291bnQodm9pZCk7CitleHRlcm4gdm9pZCBvY3Rlb25fc2V0dXBfZGVsYXlzKHZvaWQpOwogCiAjZGVmaW5lIE9DVEVPTl9BUkdWX01BWF9BUkdTCTY0CiAjZGVmaW5lIE9DVE9FTl9TRVJJQUxfTEVOCTIwCkBAIC0yNTMsNCArMjU0LDYgQEAKIAogZXh0ZXJuIHN0cnVjdCBjdm14X2Jvb3RpbmZvICpvY3Rlb25fYm9vdGluZm87CiAKK2V4dGVybiB1aW50NjRfdCBvY3Rlb25fYm9vdGxvYWRlcl9lbnRyeV9hZGRyOworCiAjZW5kaWYgLyogX19BU01fT0NURU9OX09DVEVPTl9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL3BjaS1vY3Rlb24uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vcGNpLW9jdGVvbi5oCmluZGV4IDZhYzVkM2UuLmVjZTc4MDQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vcGNpLW9jdGVvbi5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vcGNpLW9jdGVvbi5oCkBAIC0xNSw2ICsxNSwxOSBAQAogI2RlZmluZSBQQ0lfQ09ORklHX1NQQUNFX0RFTEFZIDEwMDAwCiAKIC8qCisgKiBUaGUgcGh5c2ljYWwgbWVtb3J5IGJhc2UgbWFwcGVkIGJ5IEJBUjEuICAyNTZNQiBhdCB0aGUgZW5kIG9mIHRoZQorICogZmlyc3QgNEdCLgorICovCisjZGVmaW5lIENWTVhfUENJRV9CQVIxX1BIWVNfQkFTRSAoKDF1bGwgPDwgMzIpIC0gKDF1bGwgPDwgMjgpKQorI2RlZmluZSBDVk1YX1BDSUVfQkFSMV9QSFlTX1NJWkUgKDF1bGwgPDwgMjgpCisKKy8qCisgKiBUaGUgUkMgYmFzZSBvZiBCQVIxLiAgZ2VuMSBoYXMgYSAzOS1iaXQgQkFSMiwgZ2VuMiBoYXMgNDEtYml0IEJBUjIsCisgKiBwbGFjZSBCQVIxIHNvIGl0IGlzIHRoZSBzYW1lIGZvciBib3RoLgorICovCisjZGVmaW5lIENWTVhfUENJRV9CQVIxX1JDX0JBU0UgKDF1bGwgPDwgNDEpCisKKy8qCiAgKiBwY2liaW9zX21hcF9pcnEoKSBpcyBkZWZpbmVkIGluc2lkZSBwY2ktb2N0ZW9uLmMuIEFsbCBpdCBkb2VzIGlzCiAgKiBjYWxsIHRoZSBPY3Rlb24gc3BlY2lmaWMgdmVyc2lvbiBwb2ludGVkIHRvIGJ5IHRoaXMgdmFyaWFibGUuIFRoaXMKICAqIGZ1bmN0aW9uIG5lZWRzIHRvIGNoYW5nZSBmb3IgUENJIG9yIFBDSWUgYmFzZWQgaG9zdHMuCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGNpLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggM2JlZWExNC4uNTc2Mzk3YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BjaS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wY2kuaApAQCAtMTQwLDYgKzE0MCwxMSBAQAogCXJldHVybiBjaGFubmVsID8gMTUgOiAxNDsKIH0KIAorI2lmZGVmIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTgorLyogTVNJIGFyY2ggaG9vayBmb3IgT0NURU9OICovCisjZGVmaW5lIGFyY2hfc2V0dXBfbXNpX2lycXMgYXJjaF9zZXR1cF9tc2lfaXJxcworI2VuZGlmCisKIGV4dGVybiBpbnQgcGNpX3Byb2JlX29ubHk7CiAKIGV4dGVybiBjaGFyICogKCpwY2liaW9zX3BsYXRfc2V0dXApKGNoYXIgKnN0cik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9wcm9tLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9wcm9tLmgKaW5kZXggNTRlZjFhOS4uNzg2ZDgyZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfcHJvbS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wbWMtc2llcnJhL21zcDcxeHgvbXNwX3Byb20uaApAQCAtMTI0LDEwICsxMjQsNiBAQAogZXh0ZXJuIHZvaWQgcHJvbV9maXh1cF9tZW1fbWFwKHVuc2lnbmVkIGxvbmcgc3RhcnRfbWVtLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX21lbSk7CiAKLSNpZmRlZiBDT05GSUdfTVREX1BNQ19NU1BfUkFNUk9PVAotZXh0ZXJuIGJvb2wgZ2V0X3JhbXJvb3Qodm9pZCAqKnN0YXJ0LCB1bnNpZ25lZCBsb25nICpzaXplKTsKLSNlbmRpZgotCiBleHRlcm4gaW50IGdldF9ldGhlcm5ldF9hZGRyKGNoYXIgKmV0aGFkZHJfbmFtZSwgY2hhciAqZXRoZXJuZXRfYWRkcik7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfZGV2aWNlaWQodm9pZCk7CiBleHRlcm4gY2hhciBpZGVudGlmeV9lbmV0KHVuc2lnbmVkIGxvbmcgaW50ZXJmYWNlX251bSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggNWQzM2I3Mi4uMGQ2MjliYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMzQsNiArMzQsMTEgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgdmNlZF9jb3VudCwgdmNlaV9jb3VudDsKIAogLyoKKyAqIE1JUFMgZG9lcyBoYXZlIGFuIGFyY2hfcGlja19tbWFwX2xheW91dCgpCisgKi8KKyNkZWZpbmUgSEFWRV9BUkNIX1BJQ0tfTU1BUF9MQVlPVVQgMQorCisvKgogICogQSBzcGVjaWFsIHBhZ2UgKHRoZSB2ZHNvKSBpcyBtYXBwZWQgaW50byBhbGwgcHJvY2Vzc2VzIGF0IHRoZSB2ZXJ5CiAgKiB0b3Agb2YgdGhlIHZpcnR1YWwgbWVtb3J5IHNwYWNlLgogICovCkBAIC01Miw2ICs1Nyw5IEBACiAgKiBzcGFjZSBkdXJpbmcgbW1hcCdzLgogICovCiAjZGVmaW5lIFRBU0tfVU5NQVBQRURfQkFTRQkoKFRBU0tfU0laRSAvIDMpICYgfihQQUdFX1NJWkUpKQorCisjZGVmaW5lIFRBU0tfSVNfMzJCSVRfQUREUiAxCisKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHXzY0QklUCkBAIC03Nyw2ICs4NSw5IEBACiAJCVBBR0VfQUxJR04oVEFTS19TSVpFMzIgLyAzKSA6IFBBR0VfQUxJR04oVEFTS19TSVpFIC8gMykpCiAjZGVmaW5lIFRBU0tfU0laRV9PRih0c2spCQkJCQkJXAogCSh0ZXN0X3Rza190aHJlYWRfZmxhZyh0c2ssIFRJRl8zMkJJVF9BRERSKSA/IFRBU0tfU0laRTMyIDogVEFTS19TSVpFKQorCisjZGVmaW5lIFRBU0tfSVNfMzJCSVRfQUREUiB0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVF9BRERSKQorCiAjZW5kaWYKIAogI2lmZGVmIF9fS0VSTkVMX18KQEAgLTIxOCw3ICsyMjksNiBAQAogCXVuc2lnbmVkIGxvbmcgY3AwX2JhZHZhZGRyOwkvKiBMYXN0IHVzZXIgZmF1bHQgKi8KIAl1bnNpZ25lZCBsb25nIGNwMF9iYWR1YWRkcjsJLyogTGFzdCBrZXJuZWwgZmF1bHQgYWNjZXNzaW5nIFVTRUcgKi8KIAl1bnNpZ25lZCBsb25nIGVycm9yX2NvZGU7Ci0JdW5zaWduZWQgbG9uZyB0cmFwX25vOwogCXVuc2lnbmVkIGxvbmcgaXJpeF90cmFtcG9saW5lOyAgLyogV2hlZWUuLi4gKi8KIAl1bnNpZ25lZCBsb25nIGlyaXhfb2xkY3R4OwogI2lmZGVmIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTgpAQCAtMjkwLDcgKzMwMCw2IEBACiAJLmNwMF9iYWR2YWRkcgkJPSAwLAkJCQlcCiAJLmNwMF9iYWR1YWRkcgkJPSAwLAkJCQlcCiAJLmVycm9yX2NvZGUJCT0gMCwJCQkJXAotCS50cmFwX25vCQk9IDAsCQkJCVwKIAkuaXJpeF90cmFtcG9saW5lCT0gMCwJCQkJXAogCS5pcml4X29sZGN0eAkJPSAwLAkJCQlcCiAJLyoJCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IGNkYzZhNDYuLjlmMWI4ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTEzNyw2ICsxMzcsNyBAQAogICovCiAjZGVmaW5lIHVzZXJfbW9kZShyZWdzKSAoKChyZWdzKS0+Y3AwX3N0YXR1cyAmIEtVX01BU0spID09IEtVX1VTRVIpCiAKKyNkZWZpbmUgcmVnc19yZXR1cm5fdmFsdWUoX3JlZ3MpICgoX3JlZ3MpLT5yZWdzWzJdKQogI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpICgocmVncyktPmNwMF9lcGMpCiAjZGVmaW5lIHByb2ZpbGVfcGMocmVncykgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc24vYWdlbnQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbi9hZ2VudC5oCmluZGV4IGFjNGVhODUuLmRjODExMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbi9hZ2VudC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbi9hZ2VudC5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9BU01fU0dJX1NOX0FHRU5UX0gKICNkZWZpbmUgX0FTTV9TR0lfU05fQUdFTlRfSAogCi0jaW5jbHVkZSA8bGludXgvdG9wb2xvZ3kuaD4KICNpbmNsdWRlIDxhc20vc24vYWRkcnMuaD4KICNpbmNsdWRlIDxhc20vc24vYXJjaC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdWFzbS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Vhc20uaAppbmRleCA2OTdlNDBjLi44OTIwNjJkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdWFzbS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91YXNtLmgKQEAgLTEwLDQ0ICsxMCw1NSBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAorI2lmZGVmIENPTkZJR19FWFBPUlRfVUFTTQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2RlZmluZSBfX3Vhc21pbml0CisjZGVmaW5lIF9fdWFzbWluaXRkYXRhCisjZGVmaW5lIFVBU01fRVhQT1JUX1NZTUJPTChzeW0pIEVYUE9SVF9TWU1CT0woc3ltKQorI2Vsc2UKKyNkZWZpbmUgX191YXNtaW5pdCBfX2NwdWluaXQKKyNkZWZpbmUgX191YXNtaW5pdGRhdGEgX19jcHVpbml0ZGF0YQorI2RlZmluZSBVQVNNX0VYUE9SVF9TWU1CT0woc3ltKQorI2VuZGlmCisKICNkZWZpbmUgSXBfdTF1MnUzKG9wKQkJCQkJCQlcCi12b2lkIF9fY3B1aW5pdAkJCQkJCQkJXAordm9pZCBfX3Vhc21pbml0CQkJCQkJCQlcCiB1YXNtX2kjI29wKHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiLCB1bnNpZ25lZCBpbnQgYykKIAogI2RlZmluZSBJcF91MnUxdTMob3ApCQkJCQkJCVwKLXZvaWQgX19jcHVpbml0CQkJCQkJCQlcCit2b2lkIF9fdWFzbWluaXQJCQkJCQkJCVwKIHVhc21faSMjb3AodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIsIHVuc2lnbmVkIGludCBjKQogCiAjZGVmaW5lIElwX3UzdTF1MihvcCkJCQkJCQkJXAotdm9pZCBfX2NwdWluaXQJCQkJCQkJCVwKK3ZvaWQgX191YXNtaW5pdAkJCQkJCQkJXAogdWFzbV9pIyNvcCh1MzIgKipidWYsIHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYiwgdW5zaWduZWQgaW50IGMpCiAKICNkZWZpbmUgSXBfdTF1MnMzKG9wKQkJCQkJCQlcCi12b2lkIF9fY3B1aW5pdAkJCQkJCQkJXAordm9pZCBfX3Vhc21pbml0CQkJCQkJCQlcCiB1YXNtX2kjI29wKHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiLCBzaWduZWQgaW50IGMpCiAKICNkZWZpbmUgSXBfdTJzM3UxKG9wKQkJCQkJCQlcCi12b2lkIF9fY3B1aW5pdAkJCQkJCQkJXAordm9pZCBfX3Vhc21pbml0CQkJCQkJCQlcCiB1YXNtX2kjI29wKHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IGEsIHNpZ25lZCBpbnQgYiwgdW5zaWduZWQgaW50IGMpCiAKICNkZWZpbmUgSXBfdTJ1MXMzKG9wKQkJCQkJCQlcCi12b2lkIF9fY3B1aW5pdAkJCQkJCQkJXAordm9pZCBfX3Vhc21pbml0CQkJCQkJCQlcCiB1YXNtX2kjI29wKHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiLCBzaWduZWQgaW50IGMpCiAKICNkZWZpbmUgSXBfdTJ1MW1zYnUzKG9wKQkJCQkJCVwKLXZvaWQgX19jcHVpbml0CQkJCQkJCQlcCit2b2lkIF9fdWFzbWluaXQJCQkJCQkJCVwKIHVhc21faSMjb3AodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIsIHVuc2lnbmVkIGludCBjLAlcCiAJICAgdW5zaWduZWQgaW50IGQpCiAKICNkZWZpbmUgSXBfdTF1MihvcCkJCQkJCQkJXAotdm9pZCBfX2NwdWluaXQgdWFzbV9pIyNvcCh1MzIgKipidWYsIHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYikKK3ZvaWQgX191YXNtaW5pdCB1YXNtX2kjI29wKHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiKQogCiAjZGVmaW5lIElwX3UxczIob3ApCQkJCQkJCVwKLXZvaWQgX19jcHVpbml0IHVhc21faSMjb3AodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgYSwgc2lnbmVkIGludCBiKQordm9pZCBfX3Vhc21pbml0IHVhc21faSMjb3AodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgYSwgc2lnbmVkIGludCBiKQogCi0jZGVmaW5lIElwX3UxKG9wKSB2b2lkIF9fY3B1aW5pdCB1YXNtX2kjI29wKHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IGEpCisjZGVmaW5lIElwX3UxKG9wKSB2b2lkIF9fdWFzbWluaXQgdWFzbV9pIyNvcCh1MzIgKipidWYsIHVuc2lnbmVkIGludCBhKQogCi0jZGVmaW5lIElwXzAob3ApIHZvaWQgX19jcHVpbml0IHVhc21faSMjb3AodTMyICoqYnVmKQorI2RlZmluZSBJcF8wKG9wKSB2b2lkIF9fdWFzbWluaXQgdWFzbV9pIyNvcCh1MzIgKipidWYpCiAKIElwX3UydTFzMyhfYWRkaXUpOwogSXBfdTN1MXUyKF9hZGR1KTsKQEAgLTcxLDYgKzgyLDcgQEAKIElwX3UydTF1MyhfZHNybCk7CiBJcF91MnUxdTMoX2RzcmwzMik7CiBJcF91MnUxdTMoX2Ryb3RyKTsKK0lwX3UydTF1MyhfZHJvdHIzMik7CiBJcF91M3UxdTIoX2RzdWJ1KTsKIElwXzAoX2VyZXQpOwogSXBfdTEoX2opOwpAQCAtMTExLDcgKzEyMyw3IEBACiAJaW50IGxhYjsKIH07CiAKLXZvaWQgX19jcHVpbml0IHVhc21fYnVpbGRfbGFiZWwoc3RydWN0IHVhc21fbGFiZWwgKipsYWIsIHUzMiAqYWRkciwgaW50IGxpZCk7Cit2b2lkIF9fdWFzbWluaXQgdWFzbV9idWlsZF9sYWJlbChzdHJ1Y3QgdWFzbV9sYWJlbCAqKmxhYiwgdTMyICphZGRyLCBpbnQgbGlkKTsKICNpZmRlZiBDT05GSUdfNjRCSVQKIGludCB1YXNtX2luX2NvbXBhdF9zcGFjZV9wKGxvbmcgYWRkcik7CiAjZW5kaWYKQEAgLTEyMSw3ICsxMzMsNyBAQAogdm9pZCBVQVNNX2lfTEEodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgcnMsIGxvbmcgYWRkcik7CiAKICNkZWZpbmUgVUFTTV9MX0xBKGxiKQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHZvaWQgX19jcHVpbml0IHVhc21fbCMjbGIoc3RydWN0IHVhc21fbGFiZWwgKipsYWIsIHUzMiAqYWRkcikgXAorc3RhdGljIGlubGluZSB2b2lkIF9fdWFzbWluaXQgdWFzbV9sIyNsYihzdHJ1Y3QgdWFzbV9sYWJlbCAqKmxhYiwgdTMyICphZGRyKSBcCiB7CQkJCQkJCQkJXAogCXVhc21fYnVpbGRfbGFiZWwobGFiLCBhZGRyLCBsYWJlbCMjbGIpOwkJCQlcCiB9CkBAIC0xNzYsNiArMTg4LDE1IEBACiAJCXVhc21faV9kc3JsMzIocCwgYTEsIGEyLCBhMyAtIDMyKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHVhc21faV9kcm90cl9zYWZlKHUzMiAqKnAsIHVuc2lnbmVkIGludCBhMSwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBhMiwgdW5zaWduZWQgaW50IGEzKQoreworCWlmIChhMyA8IDMyKQorCQl1YXNtX2lfZHJvdHIocCwgYTEsIGEyLCBhMyk7CisJZWxzZQorCQl1YXNtX2lfZHJvdHIzMihwLCBhMSwgYTIsIGEzIC0gMzIpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgdWFzbV9pX2RzbGxfc2FmZSh1MzIgKipwLCB1bnNpZ25lZCBpbnQgYTEsCiAJCQkJICAgIHVuc2lnbmVkIGludCBhMiwgdW5zaWduZWQgaW50IGEzKQogewpAQCAtMjEzLDMgKzIzNCw3IEBACiB2b2lkIHVhc21faWxfYm5leih1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIHVuc2lnbmVkIGludCByZWcsIGludCBsaWQpOwogdm9pZCB1YXNtX2lsX2JnZXpsKHUzMiAqKnAsIHN0cnVjdCB1YXNtX3JlbG9jICoqciwgdW5zaWduZWQgaW50IHJlZywgaW50IGxpZCk7CiB2b2lkIHVhc21faWxfYmdleih1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIHVuc2lnbmVkIGludCByZWcsIGludCBsaWQpOwordm9pZCB1YXNtX2lsX2JiaXQwKHUzMiAqKnAsIHN0cnVjdCB1YXNtX3JlbG9jICoqciwgdW5zaWduZWQgaW50IHJlZywKKwkJICAgdW5zaWduZWQgaW50IGJpdCwgaW50IGxpZCk7Cit2b2lkIHVhc21faWxfYmJpdDEodTMyICoqcCwgc3RydWN0IHVhc21fcmVsb2MgKipyLCB1bnNpZ25lZCBpbnQgcmVnLAorCQkgICB1bnNpZ25lZCBpbnQgYml0LCBpbnQgbGlkKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCAxYjVhNjY0Li5iYWEzMThhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC05ODQsMTYgKzk4NCwxNyBAQAogI2RlZmluZSBfX05SX3BlcmZfZXZlbnRfb3BlbgkJKF9fTlJfTGludXggKyAyOTYpCiAjZGVmaW5lIF9fTlJfYWNjZXB0NAkJCShfX05SX0xpbnV4ICsgMjk3KQogI2RlZmluZSBfX05SX3JlY3ZtbXNnCQkJKF9fTlJfTGludXggKyAyOTgpCisjZGVmaW5lIF9fTlJfZ2V0ZGVudHM2NAkJCShfX05SX0xpbnV4ICsgMjk5KQogCiAvKgogICogT2Zmc2V0IG9mIHRoZSBsYXN0IE4zMiBmbGF2b3VyZWQgc3lzY2FsbAogICovCi0jZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJCTI5OAorI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCQkyOTkKIAogI2VuZGlmIC8qIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyICovCiAKICNkZWZpbmUgX19OUl9OMzJfTGludXgJCQk2MDAwCi0jZGVmaW5lIF9fTlJfTjMyX0xpbnV4X3N5c2NhbGxzCQkyOTgKKyNkZWZpbmUgX19OUl9OMzJfTGludXhfc3lzY2FsbHMJCTI5OQogCiAjaWZkZWYgX19LRVJORUxfXwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvamF6ei9NYWtlZmlsZSBiL2FyY2gvbWlwcy9qYXp6L01ha2VmaWxlCmluZGV4IDVhZWUwYzIuLmRkOWQ5OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9qYXp6L01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9qYXp6L01ha2VmaWxlCkBAIC0zLDUgKzMsMyBAQAogIwogCiBvYmoteQkgCTo9IGlycS5vIGphenpkbWEubyByZXNldC5vIHNldHVwLm8KLQotRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qYXp6L1BsYXRmb3JtIGIvYXJjaC9taXBzL2phenovUGxhdGZvcm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM3Mzc4OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9qYXp6L1BsYXRmb3JtCkBAIC0wLDAgKzEsNiBAQAorIworIyBBY2VyIFBJQ0EgNjEsIE1pcHMgTWFnbnVtIDQwMDAgYW5kIE9saXZldHRpIE03MDAuCisjCitwbGF0Zm9ybS0kKENPTkZJR19NQUNIX0pBWlopCSs9IGphenovCitjZmxhZ3MtJChDT05GSUdfTUFDSF9KQVpaKQkrPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtamF6egorbG9hZC0kKENPTkZJR19NQUNIX0pBWlopCSs9IDB4ZmZmZmZmZmY4MDA4MDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2p6NDc0MC9LY29uZmlnIGIvYXJjaC9taXBzL2p6NDc0MC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNzE0MWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvano0NzQwL0tjb25maWcKQEAgLTAsMCArMSwxMiBAQAorY2hvaWNlCisJcHJvbXB0ICJNYWNoaW5lIHR5cGUiCisJZGVwZW5kcyBvbiBNQUNIX0paNDc0MAorCWRlZmF1bHQgSlo0NzQwX1FJX0xCNjAKKworY29uZmlnIEpaNDc0MF9RSV9MQjYwCisJYm9vbCAiUWkgSGFyZHdhcmUgQmVuIE5hbm9Ob3RlIgorCitlbmRjaG9pY2UKKworY29uZmlnIEhBVkVfUFdNCisJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2p6NDc0MC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9qejQ3NDAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYwNGVhZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9qejQ3NDAvTWFrZWZpbGUKQEAgLTAsMCArMSwyMCBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIEluZ2VuaWMgSlo0NzQwLgorIworCisjIE9iamVjdCBmaWxlIGxpc3RzLgorCitvYmoteSArPSBwcm9tLm8gaXJxLm8gdGltZS5vIHJlc2V0Lm8gc2V0dXAubyBkbWEubyBcCisJZ3Bpby5vIGNsb2NrLm8gcGxhdGZvcm0ubyB0aW1lci5vIHB3bS5vIHNlcmlhbC5vCisKK29iai0kKENPTkZJR19ERUJVR19GUykgKz0gY2xvY2stZGVidWdmcy5vCisKKyMgYm9hcmQgc3BlY2lmaWMgc3VwcG9ydAorCitvYmotJChDT05GSUdfSlo0NzQwX1FJX0xCNjApCSs9IGJvYXJkLXFpX2xiNjAubworCisjIFBNIHN1cHBvcnQKKworb2JqLSQoQ09ORklHX1BNKSArPSBwbS5vCisKK0VYVFJBX0NGTEFHUyArPSAtV2Vycm9yIC1XYWxsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvano0NzQwL1BsYXRmb3JtIGIvYXJjaC9taXBzL2p6NDc0MC9QbGF0Zm9ybQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTk3MjMwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2p6NDc0MC9QbGF0Zm9ybQpAQCAtMCwwICsxLDMgQEAKK2NvcmUtJChDT05GSUdfTUFDSF9KWjQ3NDApCSs9IGFyY2gvbWlwcy9qejQ3NDAvCitjZmxhZ3MtJChDT05GSUdfTUFDSF9KWjQ3NDApCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1qejQ3NDAKK2xvYWQtJChDT05GSUdfTUFDSF9KWjQ3NDApCSs9IDB4ZmZmZmZmZmY4MDAxMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2p6NDc0MC9ib2FyZC1xaV9sYjYwLmMgYi9hcmNoL21pcHMvano0NzQwL2JvYXJkLXFpX2xiNjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzQyYmI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2p6NDc0MC9ib2FyZC1xaV9sYjYwLmMKQEAgLTAsMCArMSw0NzEgQEAKKy8qCisgKiBsaW51eC9hcmNoL21pcHMvano0NzQwL2JvYXJkLXFpX2xiNjAuYworICoKKyAqIFFJX0xCNjAgYm9hcmQgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBRaSBIYXJkd2FyZSBpbmMuLAorICogQXV0aG9yOiBYaWFuZ2Z1IExpdSA8eGlhbmdmdUBxaS1oYXJkd2FyZS5jb20+CisgKiBDb3B5cmlnaHQgMjAxMCwgTGFycy1QZXRyZXIgQ2xhdXNlbiA8bGFyc0BtZXRhZm9vLmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaV9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CisjaW5jbHVkZSA8bGludXgvcG93ZXIvano0NzQwLWJhdHRlcnkuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLWp6NDc0MC9qejQ3NDBfZmIuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1qejQ3NDAvano0NzQwX21tYy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWp6NDc0MC9qejQ3NDBfbmFuZC5oPgorCisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2ZpeGVkLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKworI2luY2x1ZGUgPGxpbnV4L2xlZHNfcHdtLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC1qejQ3NDAvcGxhdGZvcm0uaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisKK3N0YXRpYyBib29sIGlzX2F2dDI7CisKKy8qIEdQSU9zICovCisjZGVmaW5lIFFJX0xCNjBfR1BJT19TRF9DRAkJSlpfR1BJT19QT1JURCgwKQorI2RlZmluZSBRSV9MQjYwX0dQSU9fU0RfVkNDX0VOX04JSlpfR1BJT19QT1JURCgyKQorCisjZGVmaW5lIFFJX0xCNjBfR1BJT19LRVlPVVQoeCkJCShKWl9HUElPX1BPUlRDKDEwKSArICh4KSkKKyNkZWZpbmUgUUlfTEI2MF9HUElPX0tFWUlOKHgpCQkoSlpfR1BJT19QT1JURCgxOCkgKyAoeCkpCisjZGVmaW5lIFFJX0xCNjBfR1BJT19LRVlJTjgJCUpaX0dQSU9fUE9SVEQoMjYpCisKKy8qIE5BTkQgKi8KK3N0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgcWlfbGI2MF9lY2NsYXlvdXRfMWdiID0geworLyoJLmVjY2J5dGVzID0gMzYsCisJLmVjY3BvcyA9IHsKKwkJNiwgIDcsICA4LCAgOSwgIDEwLCAxMSwgMTIsIDEzLAorCQkxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsCisJCTIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwKKwkJMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LAorCQkzOCwgMzksIDQwLCA0MQorCX0sKi8KKwkub29iZnJlZSA9IHsKKwkJeyAub2Zmc2V0ID0gMiwgLmxlbmd0aCA9IDQgfSwKKwkJeyAub2Zmc2V0ID0gNDIsIC5sZW5ndGggPSAyMiB9CisJfSwKK307CisKKy8qIEVhcmx5IHByb3RvdHlwZXMgb2YgdGhlIFFJIExCNjAgaGFkIG9ubHkgMUdCIG9mIE5BTkQuCisgKiBJbiBvcmRlciB0byBzdXBwb3J0IHRoZXNlIGRldmljZXMgYXN3ZWxsIHRoZSBwYXJ0aXRpb24gYW5kIGVjYyBsYXlvdXQgaXMKKyAqIGluaXRhbGl6ZWQgZGVwZW5kaW5nIG9uIHRoZSBOQU5EIHNpemUgKi8KK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBxaV9sYjYwX3BhcnRpdGlvbnNfMWdiW10gPSB7CisJeworCQkubmFtZSA9ICJOQU5EIEJPT1QgcGFydGl0aW9uIiwKKwkJLm9mZnNldCA9IDAgKiAweDEwMDAwMCwKKwkJLnNpemUgPSA0ICogMHgxMDAwMDAsCisJfSwKKwl7CisJCS5uYW1lID0gIk5BTkQgS0VSTkVMIHBhcnRpdGlvbiIsCisJCS5vZmZzZXQgPSA0ICogMHgxMDAwMDAsCisJCS5zaXplID0gNCAqIDB4MTAwMDAwLAorCX0sCisJeworCQkubmFtZSA9ICJOQU5EIFJPT1RGUyBwYXJ0aXRpb24iLAorCQkub2Zmc2V0ID0gOCAqIDB4MTAwMDAwLAorCQkuc2l6ZSA9ICg1MDQgKyA1MTIpICogMHgxMDAwMDAsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgcWlfbGI2MF9lY2NsYXlvdXRfMmdiID0geworLyoJLmVjY2J5dGVzID0gNzIsCisJLmVjY3BvcyA9IHsKKwkJMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LAorCQkyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsCisJCTI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwKKwkJMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLAorCQk0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsCisJCTUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwKKwkJNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LAorCQk2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsCisJCTc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDgyLCA4MworCX0sKi8KKwkub29iZnJlZSA9IHsKKwkJeyAub2Zmc2V0ID0gMiwgLmxlbmd0aCA9IDEwIH0sCisJCXsgLm9mZnNldCA9IDg0LCAubGVuZ3RoID0gNDQgfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHFpX2xiNjBfcGFydGl0aW9uc18yZ2JbXSA9IHsKKwl7CisJCS5uYW1lID0gIk5BTkQgQk9PVCBwYXJ0aXRpb24iLAorCQkub2Zmc2V0ID0gMCAqIDB4MTAwMDAwLAorCQkuc2l6ZSA9IDQgKiAweDEwMDAwMCwKKwl9LAorCXsKKwkJLm5hbWUgPSAiTkFORCBLRVJORUwgcGFydGl0aW9uIiwKKwkJLm9mZnNldCA9IDQgKiAweDEwMDAwMCwKKwkJLnNpemUgPSA0ICogMHgxMDAwMDAsCisJfSwKKwl7CisJCS5uYW1lID0gIk5BTkQgUk9PVEZTIHBhcnRpdGlvbiIsCisJCS5vZmZzZXQgPSA4ICogMHgxMDAwMDAsCisJCS5zaXplID0gKDUwNCArIDUxMiArIDEwMjQpICogMHgxMDAwMDAsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIHFpX2xiNjBfbmFuZF9pZGVudChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqKnBhcnRpdGlvbnMsCisJCWludCAqbnVtX3BhcnRpdGlvbnMpCit7CisJaWYgKGNoaXAtPnBhZ2Vfc2hpZnQgPT0gMTIpIHsKKwkJY2hpcC0+ZWNjLmxheW91dCA9ICZxaV9sYjYwX2VjY2xheW91dF8yZ2I7CisJCSpwYXJ0aXRpb25zID0gcWlfbGI2MF9wYXJ0aXRpb25zXzJnYjsKKwkJKm51bV9wYXJ0aXRpb25zID0gQVJSQVlfU0laRShxaV9sYjYwX3BhcnRpdGlvbnNfMmdiKTsKKwl9IGVsc2UgeworCQljaGlwLT5lY2MubGF5b3V0ID0gJnFpX2xiNjBfZWNjbGF5b3V0XzFnYjsKKwkJKnBhcnRpdGlvbnMgPSBxaV9sYjYwX3BhcnRpdGlvbnNfMWdiOworCQkqbnVtX3BhcnRpdGlvbnMgPSBBUlJBWV9TSVpFKHFpX2xiNjBfcGFydGl0aW9uc18xZ2IpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBqel9uYW5kX3BsYXRmb3JtX2RhdGEgcWlfbGI2MF9uYW5kX3BkYXRhID0geworCS5pZGVudF9jYWxsYmFjayA9IHFpX2xiNjBfbmFuZF9pZGVudCwKKwkuYnVzeV9ncGlvID0gOTQsCit9OworCisvKiBLZXlib2FyZCovCisKKyNkZWZpbmUgS0VZX1FJX1FJCUtFWV9GMTMKKyNkZWZpbmUgS0VZX1FJX1VQUkVECUtFWV9SSUdIVEFMVAorI2RlZmluZSBLRVlfUUlfVk9MVVAJS0VZX1ZPTFVNRVVQCisjZGVmaW5lIEtFWV9RSV9WT0xET1dOCUtFWV9WT0xVTUVET1dOCisjZGVmaW5lIEtFWV9RSV9GTglLRVlfTEVGVENUUkwKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IHFpX2xiNjBfa2V5bWFwW10gPSB7CisJS0VZKDAsIDAsIEtFWV9GMSksCS8qIFMyICovCisJS0VZKDAsIDEsIEtFWV9GMiksCS8qIFMzICovCisJS0VZKDAsIDIsIEtFWV9GMyksCS8qIFM0ICovCisJS0VZKDAsIDMsIEtFWV9GNCksCS8qIFM1ICovCisJS0VZKDAsIDQsIEtFWV9GNSksCS8qIFM2ICovCisJS0VZKDAsIDUsIEtFWV9GNiksCS8qIFM3ICovCisJS0VZKDAsIDYsIEtFWV9GNyksCS8qIFM4ICovCisKKwlLRVkoMSwgMCwgS0VZX1EpLAkvKiBTMTAgKi8KKwlLRVkoMSwgMSwgS0VZX1cpLAkvKiBTMTEgKi8KKwlLRVkoMSwgMiwgS0VZX0UpLAkvKiBTMTIgKi8KKwlLRVkoMSwgMywgS0VZX1IpLAkvKiBTMTMgKi8KKwlLRVkoMSwgNCwgS0VZX1QpLAkvKiBTMTQgKi8KKwlLRVkoMSwgNSwgS0VZX1kpLAkvKiBTMTUgKi8KKwlLRVkoMSwgNiwgS0VZX1UpLAkvKiBTMTYgKi8KKwlLRVkoMSwgNywgS0VZX0kpLAkvKiBTMTcgKi8KKwlLRVkoMiwgMCwgS0VZX0EpLAkvKiBTMTggKi8KKwlLRVkoMiwgMSwgS0VZX1MpLAkvKiBTMTkgKi8KKwlLRVkoMiwgMiwgS0VZX0QpLAkvKiBTMjAgKi8KKwlLRVkoMiwgMywgS0VZX0YpLAkvKiBTMjEgKi8KKwlLRVkoMiwgNCwgS0VZX0cpLAkvKiBTMjIgKi8KKwlLRVkoMiwgNSwgS0VZX0gpLAkvKiBTMjMgKi8KKwlLRVkoMiwgNiwgS0VZX0opLAkvKiBTMjQgKi8KKwlLRVkoMiwgNywgS0VZX0spLAkvKiBTMjUgKi8KKwlLRVkoMywgMCwgS0VZX0VTQyksCS8qIFMyNiAqLworCUtFWSgzLCAxLCBLRVlfWiksCS8qIFMyNyAqLworCUtFWSgzLCAyLCBLRVlfWCksCS8qIFMyOCAqLworCUtFWSgzLCAzLCBLRVlfQyksCS8qIFMyOSAqLworCUtFWSgzLCA0LCBLRVlfViksCS8qIFMzMCAqLworCUtFWSgzLCA1LCBLRVlfQiksCS8qIFMzMSAqLworCUtFWSgzLCA2LCBLRVlfTiksCS8qIFMzMiAqLworCUtFWSgzLCA3LCBLRVlfTSksCS8qIFMzMyAqLworCUtFWSg0LCAwLCBLRVlfVEFCKSwJLyogUzM0ICovCisJS0VZKDQsIDEsIEtFWV9DQVBTTE9DSyksCS8qIFMzNSAqLworCUtFWSg0LCAyLCBLRVlfQkFDS1NMQVNIKSwJLyogUzM2ICovCisJS0VZKDQsIDMsIEtFWV9BUE9TVFJPUEhFKSwJLyogUzM3ICovCisJS0VZKDQsIDQsIEtFWV9DT01NQSksCS8qIFMzOCAqLworCUtFWSg0LCA1LCBLRVlfRE9UKSwJLyogUzM5ICovCisJS0VZKDQsIDYsIEtFWV9TTEFTSCksCS8qIFM0MCAqLworCUtFWSg0LCA3LCBLRVlfVVApLAkvKiBTNDEgKi8KKwlLRVkoNSwgMCwgS0VZX08pLAkvKiBTNDIgKi8KKwlLRVkoNSwgMSwgS0VZX0wpLAkvKiBTNDMgKi8KKwlLRVkoNSwgMiwgS0VZX0VRVUFMKSwJLyogUzQ0ICovCisJS0VZKDUsIDMsIEtFWV9RSV9VUFJFRCksCS8qIFM0NSAqLworCUtFWSg1LCA0LCBLRVlfU1BBQ0UpLAkvKiBTNDYgKi8KKwlLRVkoNSwgNSwgS0VZX1FJX1FJKSwJLyogUzQ3ICovCisJS0VZKDUsIDYsIEtFWV9SSUdIVENUUkwpLAkvKiBTNDggKi8KKwlLRVkoNSwgNywgS0VZX0xFRlQpLAkvKiBTNDkgKi8KKwlLRVkoNiwgMCwgS0VZX0Y4KSwJLyogUzUwICovCisJS0VZKDYsIDEsIEtFWV9QKSwJLyogUzUxICovCisJS0VZKDYsIDIsIEtFWV9CQUNLU1BBQ0UpLC8qIFM1MiAqLworCUtFWSg2LCAzLCBLRVlfRU5URVIpLAkvKiBTNTMgKi8KKwlLRVkoNiwgNCwgS0VZX1FJX1ZPTFVQKSwJLyogUzU0ICovCisJS0VZKDYsIDUsIEtFWV9RSV9WT0xET1dOKSwJLyogUzU1ICovCisJS0VZKDYsIDYsIEtFWV9ET1dOKSwJLyogUzU2ICovCisJS0VZKDYsIDcsIEtFWV9SSUdIVCksCS8qIFM1NyAqLworCisJS0VZKDcsIDAsIEtFWV9MRUZUU0hJRlQpLAkvKiBTNTggKi8KKwlLRVkoNywgMSwgS0VZX0xFRlRBTFQpLAkvKiBTNTkgKi8KKwlLRVkoNywgMiwgS0VZX1FJX0ZOKSwJLyogUzYwICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBxaV9sYjYwX2tleW1hcF9kYXRhID0geworCS5rZXltYXAJCT0gcWlfbGI2MF9rZXltYXAsCisJLmtleW1hcF9zaXplCT0gQVJSQVlfU0laRShxaV9sYjYwX2tleW1hcCksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHFpX2xiNjBfa2V5cGFkX2NvbHNbXSA9IHsKKwlRSV9MQjYwX0dQSU9fS0VZT1VUKDApLAorCVFJX0xCNjBfR1BJT19LRVlPVVQoMSksCisJUUlfTEI2MF9HUElPX0tFWU9VVCgyKSwKKwlRSV9MQjYwX0dQSU9fS0VZT1VUKDMpLAorCVFJX0xCNjBfR1BJT19LRVlPVVQoNCksCisJUUlfTEI2MF9HUElPX0tFWU9VVCg1KSwKKwlRSV9MQjYwX0dQSU9fS0VZT1VUKDYpLAorCVFJX0xCNjBfR1BJT19LRVlPVVQoNyksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHFpX2xiNjBfa2V5cGFkX3Jvd3NbXSA9IHsKKwlRSV9MQjYwX0dQSU9fS0VZSU4oMCksCisJUUlfTEI2MF9HUElPX0tFWUlOKDEpLAorCVFJX0xCNjBfR1BJT19LRVlJTigyKSwKKwlRSV9MQjYwX0dQSU9fS0VZSU4oMyksCisJUUlfTEI2MF9HUElPX0tFWUlOKDQpLAorCVFJX0xCNjBfR1BJT19LRVlJTig1KSwKKwlRSV9MQjYwX0dQSU9fS0VZSU4oNyksCisJUUlfTEI2MF9HUElPX0tFWUlOOCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleXBhZF9wbGF0Zm9ybV9kYXRhIHFpX2xiNjBfcGRhdGEgPSB7CisJLmtleW1hcF9kYXRhID0gJnFpX2xiNjBfa2V5bWFwX2RhdGEsCisJLmNvbF9ncGlvcwk9IHFpX2xiNjBfa2V5cGFkX2NvbHMsCisJLnJvd19ncGlvcwk9IHFpX2xiNjBfa2V5cGFkX3Jvd3MsCisJLm51bV9jb2xfZ3Bpb3MJPSBBUlJBWV9TSVpFKHFpX2xiNjBfa2V5cGFkX2NvbHMpLAorCS5udW1fcm93X2dwaW9zCT0gQVJSQVlfU0laRShxaV9sYjYwX2tleXBhZF9yb3dzKSwKKwkuY29sX3NjYW5fZGVsYXlfdXMJPSAxMCwKKwkuZGVib3VuY2VfbXMJCT0gMTAsCisJLndha2V1cAkJCT0gMSwKKwkuYWN0aXZlX2xvdwkJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcWlfbGI2MF9rZXlwYWQgPSB7CisJLm5hbWUJCT0gIm1hdHJpeC1rZXlwYWQiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcWlfbGI2MF9wZGF0YSwKKwl9LAorfTsKKworLyogRGlzcGxheSAqLworc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgcWlfbGI2MF92aWRlb19tb2Rlc1tdID0geworCXsKKwkJLm5hbWUgPSAiMzIweDI0MCIsCisJCS54cmVzID0gMzIwLAorCQkueXJlcyA9IDI0MCwKKwkJLnJlZnJlc2ggPSAzMCwKKwkJLmxlZnRfbWFyZ2luID0gMTQwLAorCQkucmlnaHRfbWFyZ2luID0gMjczLAorCQkudXBwZXJfbWFyZ2luID0gMjAsCisJCS5sb3dlcl9tYXJnaW4gPSAyLAorCQkuaHN5bmNfbGVuID0gMSwKKwkJLnZzeW5jX2xlbiA9IDEsCisJCS5zeW5jID0gMCwKKwkJLnZtb2RlID0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBqejQ3NDBfZmJfcGxhdGZvcm1fZGF0YSBxaV9sYjYwX2ZiX3BkYXRhID0geworCS53aWR0aAkJPSA2MCwKKwkuaGVpZ2h0CQk9IDQ1LAorCS5udW1fbW9kZXMJPSBBUlJBWV9TSVpFKHFpX2xiNjBfdmlkZW9fbW9kZXMpLAorCS5tb2RlcwkJPSBxaV9sYjYwX3ZpZGVvX21vZGVzLAorCS5icHAJCT0gMjQsCisJLmxjZF90eXBlCT0gSlpfTENEX1RZUEVfOEJJVF9TRVJJQUwsCisJLnBpeGNsa19mYWxsaW5nX2VkZ2UgPSAxLAorfTsKKworc3RydWN0IHNwaV9ncGlvX3BsYXRmb3JtX2RhdGEgc3BpZ3Bpb19wbGF0Zm9ybV9kYXRhID0geworCS5zY2sgPSBKWl9HUElPX1BPUlRDKDIzKSwKKwkubW9zaSA9IEpaX0dQSU9fUE9SVEMoMjIpLAorCS5taXNvID0gLTEsCisJLm51bV9jaGlwc2VsZWN0ID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNwaWdwaW9fZGV2aWNlID0geworCS5uYW1lID0gInNwaV9ncGlvIiwKKwkuaWQgICA9IDEsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc3BpZ3Bpb19wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIHFpX2xiNjBfc3BpX2JvYXJkX2luZm9bXSA9IHsKKwl7CisJCS5tb2RhbGlhcyA9ICJpbGk4OTYwIiwKKwkJLmNvbnRyb2xsZXJfZGF0YSA9ICh2b2lkICopSlpfR1BJT19QT1JUQygyMSksCisJCS5jaGlwX3NlbGVjdCA9IDAsCisJCS5idXNfbnVtID0gMSwKKwkJLm1heF9zcGVlZF9oeiA9IDMwICogMTAwMCwKKwkJLm1vZGUgPSBTUElfM1dJUkUsCisJfSwKK307CisKKy8qIEJhdHRlcnkgKi8KK3N0YXRpYyBzdHJ1Y3QganpfYmF0dGVyeV9wbGF0Zm9ybV9kYXRhIHFpX2xiNjBfYmF0dGVyeV9wZGF0YSA9IHsKKwkuZ3Bpb19jaGFyZ2UgPSAgSlpfR1BJT19QT1JUQygyNyksCisJLmdwaW9fY2hhcmdlX2FjdGl2ZV9sb3cgPSAxLAorCS5pbmZvID0geworCQkubmFtZSA9ICJiYXR0ZXJ5IiwKKwkJLnRlY2hub2xvZ3kgPSBQT1dFUl9TVVBQTFlfVEVDSE5PTE9HWV9MSVBPLAorCQkudm9sdGFnZV9tYXhfZGVzaWduID0gNDIwMDAwMCwKKwkJLnZvbHRhZ2VfbWluX2Rlc2lnbiA9IDM2MDAwMDAsCisJfSwKK307CisKKy8qIEdQSU8gS2V5OiBwb3dlciAqLworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIHFpX2xiNjBfZ3Bpb19rZXlzX2J1dHRvbnNbXSA9IHsKKwlbMF0gPSB7CisJCS5jb2RlCQk9IEtFWV9QT1dFUiwKKwkJLmdwaW8JCT0gSlpfR1BJT19QT1JURCgyOSksCisJCS5hY3RpdmVfbG93CT0gMSwKKwkJLmRlc2MJCT0gIlBvd2VyIiwKKwkJLndha2V1cAkJPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIHFpX2xiNjBfZ3Bpb19rZXlzX2RhdGEgPSB7CisJLm5idXR0b25zID0gQVJSQVlfU0laRShxaV9sYjYwX2dwaW9fa2V5c19idXR0b25zKSwKKwkuYnV0dG9ucyA9IHFpX2xiNjBfZ3Bpb19rZXlzX2J1dHRvbnMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBxaV9sYjYwX2dwaW9fa2V5cyA9IHsKKwkubmFtZSA9CSJncGlvLWtleXMiLAorCS5pZCA9CS0xLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnFpX2xiNjBfZ3Bpb19rZXlzX2RhdGEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBqejQ3NDBfbW1jX3BsYXRmb3JtX2RhdGEgcWlfbGI2MF9tbWNfcGRhdGEgPSB7CisJLmdwaW9fY2FyZF9kZXRlY3QJPSBRSV9MQjYwX0dQSU9fU0RfQ0QsCisJLmdwaW9fcmVhZF9vbmx5CQk9IC0xLAorCS5ncGlvX3Bvd2VyCQk9IFFJX0xCNjBfR1BJT19TRF9WQ0NfRU5fTiwKKwkucG93ZXJfYWN0aXZlX2xvdwk9IDEsCit9OworCisvKiBPSENJICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgYXZ0Ml91c2JfcmVndWxhdG9yX2NvbnN1bWVyID0KKwlSRUdVTEFUT1JfU1VQUExZKCJ2YnVzIiwgImp6NDc0MC1vaGNpIik7CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBhdnQyX3VzYl9yZWd1bGF0b3JfaW5pdF9kYXRhID0geworCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSAxLAorCS5jb25zdW1lcl9zdXBwbGllcyA9ICZhdnQyX3VzYl9yZWd1bGF0b3JfY29uc3VtZXIsCisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZSA9ICJVU0IgcG93ZXIiLAorCQkubWluX3VWID0gNTAwMDAwMCwKKwkJLm1heF91ViA9IDUwMDAwMDAsCisJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAorCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBmaXhlZF92b2x0YWdlX2NvbmZpZyBhdnQyX3VzYl9yZWd1bGF0b3JfZGF0YSA9IHsKKwkuc3VwcGx5X25hbWUgPSAiVVNCIHBvd2VyIiwKKwkubWljcm92b2x0cyA9IDUwMDAwMDAsCisJLmdwaW8gPSBKWl9HUElPX1BPUlRCKDE3KSwKKwkuaW5pdF9kYXRhID0gJmF2dDJfdXNiX3JlZ3VsYXRvcl9pbml0X2RhdGEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdnQyX3VzYl9yZWd1bGF0b3JfZGV2aWNlID0geworCS5uYW1lID0gInJlZy1maXhlZC12b2x0YWdlIiwKKwkuaWQgPSAtMSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZhdnQyX3VzYl9yZWd1bGF0b3JfZGF0YSwKKwl9Cit9OworCisvKiBiZWVwZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHFpX2xiNjBfcHdtX2JlZXBlciA9IHsKKwkubmFtZSA9ICJwd20tYmVlcGVyIiwKKwkuaWQgPSAtMSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICh2b2lkICopNCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmp6X3BsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZqejQ3NDBfdWRjX2RldmljZSwKKwkmano0NzQwX21tY19kZXZpY2UsCisJJmp6NDc0MF9uYW5kX2RldmljZSwKKwkmcWlfbGI2MF9rZXlwYWQsCisJJnNwaWdwaW9fZGV2aWNlLAorCSZqejQ3NDBfZnJhbWVidWZmZXJfZGV2aWNlLAorCSZqejQ3NDBfcGNtX2RldmljZSwKKwkmano0NzQwX2kyc19kZXZpY2UsCisJJmp6NDc0MF9jb2RlY19kZXZpY2UsCisJJmp6NDc0MF9ydGNfZGV2aWNlLAorCSZqejQ3NDBfYWRjX2RldmljZSwKKwkmcWlfbGI2MF9ncGlvX2tleXMsCisJJnFpX2xiNjBfcHdtX2JlZXBlciwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBib2FyZF9ncGlvX3NldHVwKHZvaWQpCit7CisJLyogV2Ugb25seSBuZWVkIHRvIGVuYWJsZS9kaXNhYmxlIHB1bGx1cCBoZXJlIGZvciBwaW5zIHVzZWQgaW4gZ2VuZXJpYworCSAqIGRyaXZlcnMuIEV2ZXJ5dGhpbmcgZWxzZSBpcyBkb25lIGJ5IHRoZSBkcml2ZXJzIHRoZW1zZWxmcy4gKi8KKwlqel9ncGlvX2Rpc2FibGVfcHVsbHVwKFFJX0xCNjBfR1BJT19TRF9WQ0NfRU5fTik7CisJanpfZ3Bpb19kaXNhYmxlX3B1bGx1cChRSV9MQjYwX0dQSU9fU0RfQ0QpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBxaV9sYjYwX2luaXRfcGxhdGZvcm1fZGV2aWNlcyh2b2lkKQoreworCWp6NDc0MF9mcmFtZWJ1ZmZlcl9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSAmcWlfbGI2MF9mYl9wZGF0YTsKKwlqejQ3NDBfbmFuZF9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSAmcWlfbGI2MF9uYW5kX3BkYXRhOworCWp6NDc0MF9hZGNfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gJnFpX2xiNjBfYmF0dGVyeV9wZGF0YTsKKwlqejQ3NDBfbW1jX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9ICZxaV9sYjYwX21tY19wZGF0YTsKKworCWp6NDc0MF9zZXJpYWxfZGV2aWNlX3JlZ2lzdGVyKCk7CisKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhxaV9sYjYwX3NwaV9ib2FyZF9pbmZvLAorCQkJCUFSUkFZX1NJWkUocWlfbGI2MF9zcGlfYm9hcmRfaW5mbykpOworCisJaWYgKGlzX2F2dDIpIHsKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdnQyX3VzYl9yZWd1bGF0b3JfZGV2aWNlKTsKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZqejQ3NDBfdXNiX29oY2lfZGV2aWNlKTsKKwl9CisKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoanpfcGxhdGZvcm1fZGV2aWNlcywKKwkJCQkJQVJSQVlfU0laRShqel9wbGF0Zm9ybV9kZXZpY2VzKSk7CisKK30KKworc3RydWN0IGp6NDc0MF9jbG9ja19ib2FyZF9kYXRhIGp6NDc0MF9jbG9ja19iZGF0YSA9IHsKKwkuZXh0X3JhdGUgPSAxMjAwMDAwMCwKKwkucnRjX3JhdGUgPSAzMjc2OCwKK307CisKK3N0YXRpYyBfX2luaXQgaW50IGJvYXJkX2F2dDIoY2hhciAqc3RyKQoreworCXFpX2xiNjBfbW1jX3BkYXRhLmNhcmRfZGV0ZWN0X2FjdGl2ZV9sb3cgPSAxOworCWlzX2F2dDIgPSB0cnVlOworCisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJhdnQyIiwgYm9hcmRfYXZ0Mik7CisKK3N0YXRpYyBpbnQgX19pbml0IHFpX2xiNjBfYm9hcmRfc2V0dXAodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJRaSBIYXJkd2FyZSBKWjQ3NDAgUUkgJXMgc2V0dXBcbiIsCisJCWlzX2F2dDIgPyAiQVZUMiIgOiAiTEI2MCIpOworCisJYm9hcmRfZ3Bpb19zZXR1cCgpOworCisJaWYgKHFpX2xiNjBfaW5pdF9wbGF0Zm9ybV9kZXZpY2VzKCkpCisJCXBhbmljKCJGYWlsZWQgdG8gaW5pdGFsaXplIHBsYXRmb3JtIGRldmljZXNcbiIpOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKHFpX2xiNjBfYm9hcmRfc2V0dXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2p6NDc0MC9jbG9jay1kZWJ1Z2ZzLmMgYi9hcmNoL21pcHMvano0NzQwL2Nsb2NrLWRlYnVnZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzBhMGYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2p6NDc0MC9jbG9jay1kZWJ1Z2ZzLmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwLCBMYXJzLVBldGVyIENsYXVzZW4gPGxhcnNAbWV0YWZvby5kZT4KKyAqICBKWjQ3NDAgU29DIGNsb2NrIHN1cHBvcnQgZGVidWdmcyBlbnRyaWVzCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLWp6NDc0MC9jbG9jay5oPgorI2luY2x1ZGUgImNsb2NrLmgiCisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpqejQ3NDBfY2xvY2tfZGVidWdmczsKKworc3RhdGljIGludCBqejQ3NDBfY2xvY2tfZGVidWdmc19zaG93X2VuYWJsZWQodm9pZCAqZGF0YSwgdWludDY0X3QgKnZhbHVlKQoreworCXN0cnVjdCBjbGsgKmNsayA9IGRhdGE7CisJKnZhbHVlID0gY2xrX2lzX2VuYWJsZWQoY2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGp6NDc0MF9jbG9ja19kZWJ1Z2ZzX3NldF9lbmFibGVkKHZvaWQgKmRhdGEsIHVpbnQ2NF90IHZhbHVlKQoreworCXN0cnVjdCBjbGsgKmNsayA9IGRhdGE7CisKKwlpZiAodmFsdWUpCisJCXJldHVybiBjbGtfZW5hYmxlKGNsayk7CisJZWxzZQorCQljbGtfZGlzYWJsZShjbGspOworCisJcmV0dXJuIDA7Cit9CisKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKGp6NDc0MF9jbG9ja19kZWJ1Z2ZzX29wc19lbmFibGVkLAorCWp6NDc0MF9jbG9ja19kZWJ1Z2ZzX3Nob3dfZW5hYmxlZCwKKwlqejQ3NDBfY2xvY2tfZGVidWdmc19zZXRfZW5hYmxlZCwKKwkiJWxsdVxuIik7CisKK3N0YXRpYyBpbnQgano0NzQwX2Nsb2NrX2RlYnVnZnNfc2hvd19yYXRlKHZvaWQgKmRhdGEsIHVpbnQ2NF90ICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgY2xrICpjbGsgPSBkYXRhOworCSp2YWx1ZSA9IGNsa19nZXRfcmF0ZShjbGspOworCisJcmV0dXJuIDA7Cit9CisKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKGp6NDc0MF9jbG9ja19kZWJ1Z2ZzX29wc19yYXRlLAorCWp6NDc0MF9jbG9ja19kZWJ1Z2ZzX3Nob3dfcmF0ZSwKKwlOVUxMLAorCSIlbGx1XG4iKTsKKwordm9pZCBqejQ3NDBfY2xvY2tfZGVidWdmc19hZGRfY2xrKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoIWp6NDc0MF9jbG9ja19kZWJ1Z2ZzKQorCQlyZXR1cm47CisKKwljbGstPmRlYnVnZnNfZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoY2xrLT5uYW1lLCBqejQ3NDBfY2xvY2tfZGVidWdmcyk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgicmF0ZSIsIFNfSVdVR08gfCBTX0lSVUdPLCBjbGstPmRlYnVnZnNfZW50cnksIGNsaywKKwkJCQkmano0NzQwX2Nsb2NrX2RlYnVnZnNfb3BzX3JhdGUpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImVuYWJsZWQiLCBTX0lSVUdPLCBjbGstPmRlYnVnZnNfZW50cnksIGNsaywKKwkJCQkmano0NzQwX2Nsb2NrX2RlYnVnZnNfb3BzX2VuYWJsZWQpOworCisJaWYgKGNsay0+cGFyZW50KSB7CisJCWNoYXIgcGFyZW50X3BhdGhbMTAwXTsKKwkJc25wcmludGYocGFyZW50X3BhdGgsIDEwMCwgIi4uLyVzIiwgY2xrLT5wYXJlbnQtPm5hbWUpOworCQljbGstPmRlYnVnZnNfcGFyZW50X2VudHJ5ID0gZGVidWdmc19jcmVhdGVfc3ltbGluaygicGFyZW50IiwKKwkJCQkJCWNsay0+ZGVidWdmc19lbnRyeSwKKwkJCQkJCXBhcmVudF9wYXRoKTsKKwl9Cit9CisKKy8qIFRPRE86IExvY2tpbmcgKi8KK3ZvaWQgano0NzQwX2Nsb2NrX2RlYnVnZnNfdXBkYXRlX3BhcmVudChzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKGNsay0+ZGVidWdmc19wYXJlbnRfZW50cnkpCisJCWRlYnVnZnNfcmVtb3ZlKGNsay0+ZGVidWdmc19wYXJlbnRfZW50cnkpOworCisJaWYgKGNsay0+cGFyZW50KSB7CisJCWNoYXIgcGFyZW50X3BhdGhbMTAwXTsKKwkJc25wcmludGYocGFyZW50X3BhdGgsIDEwMCwgIi4uLyVzIiwgY2xrLT5wYXJlbnQtPm5hbWUpOworCQljbGstPmRlYnVnZnNfcGFyZW50X2VudHJ5ID0gZGVidWdmc19jcmVhdGVfc3ltbGluaygicGFyZW50IiwKKwkJCQkJCWNsay0+ZGVidWdmc19lbnRyeSwKKwkJCQkJCXBhcmVudF9wYXRoKTsKKwl9IGVsc2UgeworCQljbGstPmRlYnVnZnNfcGFyZW50X2VudHJ5ID0gTlVMTDsKKwl9Cit9CisKK3ZvaWQgano0NzQwX2Nsb2NrX2RlYnVnZnNfaW5pdCh2b2lkKQoreworCWp6NDc0MF9jbG9ja19kZWJ1Z2ZzID0gZGVidWdmc19jcmVhdGVfZGlyKCJqejQ3NDAtY2xvY2siLCBOVUxMKTsKKwlpZiAoSVNfRVJSKGp6NDc0MF9jbG9ja19kZWJ1Z2ZzKSkKKwkJano0NzQwX2Nsb2NrX2RlYnVnZnMgPSBOVUxMOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2p6NDc0MC9jbG9jay5jIGIvYXJjaC9taXBzL2p6NDc0MC9jbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExOGE4YTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvano0NzQwL2Nsb2NrLmMKQEAgLTAsMCArMSw5MjQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwLCBMYXJzLVBldGVyIENsYXVzZW4gPGxhcnNAbWV0YWZvby5kZT4KKyAqICBKWjQ3NDAgU29DIGNsb2NrIHN1cHBvcnQKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtano0NzQwL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtano0NzQwL2Jhc2UuaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisKKyNkZWZpbmUgSlpfUkVHX0NMT0NLX0NUUkwJMHgwMAorI2RlZmluZSBKWl9SRUdfQ0xPQ0tfTE9XX1BPV0VSCTB4MDQKKyNkZWZpbmUgSlpfUkVHX0NMT0NLX1BMTAkweDEwCisjZGVmaW5lIEpaX1JFR19DTE9DS19HQVRFCTB4MjAKKyNkZWZpbmUgSlpfUkVHX0NMT0NLX1NMRUVQX0NUUkwJMHgyNAorI2RlZmluZSBKWl9SRUdfQ0xPQ0tfSTJTCTB4NjAKKyNkZWZpbmUgSlpfUkVHX0NMT0NLX0xDRAkweDY0CisjZGVmaW5lIEpaX1JFR19DTE9DS19NTUMJMHg2OAorI2RlZmluZSBKWl9SRUdfQ0xPQ0tfVUhDCTB4NkMKKyNkZWZpbmUgSlpfUkVHX0NMT0NLX1NQSQkweDc0CisKKyNkZWZpbmUgSlpfQ0xPQ0tfQ1RSTF9JMlNfU1JDX1BMTAlCSVQoMzEpCisjZGVmaW5lIEpaX0NMT0NLX0NUUkxfS09fRU5BQkxFCQlCSVQoMzApCisjZGVmaW5lIEpaX0NMT0NLX0NUUkxfVURDX1NSQ19QTEwJQklUKDI5KQorI2RlZmluZSBKWl9DTE9DS19DVFJMX1VESVZfTUFTSwkJMHgxZjgwMDAwMAorI2RlZmluZSBKWl9DTE9DS19DVFJMX0NIQU5HRV9FTkFCTEUJQklUKDIyKQorI2RlZmluZSBKWl9DTE9DS19DVFJMX1BMTF9IQUxGCQlCSVQoMjEpCisjZGVmaW5lIEpaX0NMT0NLX0NUUkxfTERJVl9NQVNLCQkweDAwMWYwMDAwCisjZGVmaW5lIEpaX0NMT0NLX0NUUkxfVURJVl9PRkZTRVQJMjMKKyNkZWZpbmUgSlpfQ0xPQ0tfQ1RSTF9MRElWX09GRlNFVAkxNgorI2RlZmluZSBKWl9DTE9DS19DVFJMX01ESVZfT0ZGU0VUCTEyCisjZGVmaW5lIEpaX0NMT0NLX0NUUkxfUERJVl9PRkZTRVQJIDgKKyNkZWZpbmUgSlpfQ0xPQ0tfQ1RSTF9IRElWX09GRlNFVAkgNAorI2RlZmluZSBKWl9DTE9DS19DVFJMX0NESVZfT0ZGU0VUCSAwCisKKyNkZWZpbmUgSlpfQ0xPQ0tfR0FURV9VQVJUMAlCSVQoMCkKKyNkZWZpbmUgSlpfQ0xPQ0tfR0FURV9UQ1UJQklUKDEpCisjZGVmaW5lIEpaX0NMT0NLX0dBVEVfUlRDCUJJVCgyKQorI2RlZmluZSBKWl9DTE9DS19HQVRFX0kyQwlCSVQoMykKKyNkZWZpbmUgSlpfQ0xPQ0tfR0FURV9TUEkJQklUKDQpCisjZGVmaW5lIEpaX0NMT0NLX0dBVEVfQUlDCUJJVCg1KQorI2RlZmluZSBKWl9DTE9DS19HQVRFX0kyUwlCSVQoNikKKyNkZWZpbmUgSlpfQ0xPQ0tfR0FURV9NTUMJQklUKDcpCisjZGVmaW5lIEpaX0NMT0NLX0dBVEVfQURDCUJJVCg4KQorI2RlZmluZSBKWl9DTE9DS19HQVRFX0NJTQlCSVQoOSkKKyNkZWZpbmUgSlpfQ0xPQ0tfR0FURV9MQ0QJQklUKDEwKQorI2RlZmluZSBKWl9DTE9DS19HQVRFX1VEQwlCSVQoMTEpCisjZGVmaW5lIEpaX0NMT0NLX0dBVEVfRE1BQwlCSVQoMTIpCisjZGVmaW5lIEpaX0NMT0NLX0dBVEVfSVBVCUJJVCgxMykKKyNkZWZpbmUgSlpfQ0xPQ0tfR0FURV9VSEMJQklUKDE0KQorI2RlZmluZSBKWl9DTE9DS19HQVRFX1VBUlQxCUJJVCgxNSkKKworI2RlZmluZSBKWl9DTE9DS19JMlNfRElWX01BU0sJCTB4MDFmZgorCisjZGVmaW5lIEpaX0NMT0NLX0xDRF9ESVZfTUFTSwkJMHgwMWZmCisKKyNkZWZpbmUgSlpfQ0xPQ0tfTU1DX0RJVl9NQVNLCQkweDAwMWYKKworI2RlZmluZSBKWl9DTE9DS19VSENfRElWX01BU0sJCTB4MDAwZgorCisjZGVmaW5lIEpaX0NMT0NLX1NQSV9TUkNfUExMCQlCSVQoMzEpCisjZGVmaW5lIEpaX0NMT0NLX1NQSV9ESVZfTUFTSwkJMHgwMDBmCisKKyNkZWZpbmUgSlpfQ0xPQ0tfUExMX01fTUFTSwkJMHgwMWZmCisjZGVmaW5lIEpaX0NMT0NLX1BMTF9OX01BU0sJCTB4MDAxZgorI2RlZmluZSBKWl9DTE9DS19QTExfT0RfTUFTSwkJMHgwMDAzCisjZGVmaW5lIEpaX0NMT0NLX1BMTF9TVEFCTEUJCUJJVCgxMCkKKyNkZWZpbmUgSlpfQ0xPQ0tfUExMX0JZUEFTUwkJQklUKDkpCisjZGVmaW5lIEpaX0NMT0NLX1BMTF9FTkFCTEVECQlCSVQoOCkKKyNkZWZpbmUgSlpfQ0xPQ0tfUExMX1NUQUJMSVpFX01BU0sJMHgwMDBmCisjZGVmaW5lIEpaX0NMT0NLX1BMTF9NX09GRlNFVAkJMjMKKyNkZWZpbmUgSlpfQ0xPQ0tfUExMX05fT0ZGU0VUCQkxOAorI2RlZmluZSBKWl9DTE9DS19QTExfT0RfT0ZGU0VUCQkxNgorCisjZGVmaW5lIEpaX0NMT0NLX0xPV19QT1dFUl9NT0RFX0RPWkUgQklUKDIpCisjZGVmaW5lIEpaX0NMT0NLX0xPV19QT1dFUl9NT0RFX1NMRUVQIEJJVCgwKQorCisjZGVmaW5lIEpaX0NMT0NLX1NMRUVQX0NUUkxfU1VTUEVORF9VSEMgQklUKDcpCisjZGVmaW5lIEpaX0NMT0NLX1NMRUVQX0NUUkxfRU5BQkxFX1VEQyBCSVQoNikKKworc3RhdGljIHZvaWQgX19pb21lbSAqanpfY2xvY2tfYmFzZTsKK3N0YXRpYyBzcGlubG9ja190IGp6X2Nsb2NrX2xvY2s7CitzdGF0aWMgTElTVF9IRUFEKGp6X2Nsb2Nrcyk7CisKK3N0cnVjdCBtYWluX2NsayB7CisJc3RydWN0IGNsayBjbGs7CisJdWludDMyX3QgZGl2X29mZnNldDsKK307CisKK3N0cnVjdCBkaXZpZGVkX2NsayB7CisJc3RydWN0IGNsayBjbGs7CisJdWludDMyX3QgcmVnOworCXVpbnQzMl90IG1hc2s7Cit9OworCitzdHJ1Y3Qgc3RhdGljX2NsayB7CisJc3RydWN0IGNsayBjbGs7CisJdW5zaWduZWQgbG9uZyByYXRlOworfTsKKworc3RhdGljIHVpbnQzMl90IGp6X2Nsa19yZWdfcmVhZChpbnQgcmVnKQoreworCXJldHVybiByZWFkbChqel9jbG9ja19iYXNlICsgcmVnKTsKK30KKworc3RhdGljIHZvaWQganpfY2xrX3JlZ193cml0ZV9tYXNrKGludCByZWcsIHVpbnQzMl90IHZhbCwgdWludDMyX3QgbWFzaykKK3sKKwl1aW50MzJfdCB2YWwyOworCisJc3Bpbl9sb2NrKCZqel9jbG9ja19sb2NrKTsKKwl2YWwyID0gcmVhZGwoanpfY2xvY2tfYmFzZSArIHJlZyk7CisJdmFsMiAmPSB+bWFzazsKKwl2YWwyIHw9IHZhbDsKKwl3cml0ZWwodmFsMiwganpfY2xvY2tfYmFzZSArIHJlZyk7CisJc3Bpbl91bmxvY2soJmp6X2Nsb2NrX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBqel9jbGtfcmVnX3NldF9iaXRzKGludCByZWcsIHVpbnQzMl90IG1hc2spCit7CisJdWludDMyX3QgdmFsOworCisJc3Bpbl9sb2NrKCZqel9jbG9ja19sb2NrKTsKKwl2YWwgPSByZWFkbChqel9jbG9ja19iYXNlICsgcmVnKTsKKwl2YWwgfD0gbWFzazsKKwl3cml0ZWwodmFsLCBqel9jbG9ja19iYXNlICsgcmVnKTsKKwlzcGluX3VubG9jaygmanpfY2xvY2tfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGp6X2Nsa19yZWdfY2xlYXJfYml0cyhpbnQgcmVnLCB1aW50MzJfdCBtYXNrKQoreworCXVpbnQzMl90IHZhbDsKKworCXNwaW5fbG9jaygmanpfY2xvY2tfbG9jayk7CisJdmFsID0gcmVhZGwoanpfY2xvY2tfYmFzZSArIHJlZyk7CisJdmFsICY9IH5tYXNrOworCXdyaXRlbCh2YWwsIGp6X2Nsb2NrX2Jhc2UgKyByZWcpOworCXNwaW5fdW5sb2NrKCZqel9jbG9ja19sb2NrKTsKK30KKworc3RhdGljIGludCBqel9jbGtfZW5hYmxlX2dhdGluZyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKGNsay0+Z2F0ZV9iaXQgPT0gSlo0NzQwX0NMS19OT1RfR0FURUQpCisJCXJldHVybiAtRUlOVkFMOworCisJanpfY2xrX3JlZ19jbGVhcl9iaXRzKEpaX1JFR19DTE9DS19HQVRFLCBjbGstPmdhdGVfYml0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBqel9jbGtfZGlzYWJsZV9nYXRpbmcoc3RydWN0IGNsayAqY2xrKQoreworCWlmIChjbGstPmdhdGVfYml0ID09IEpaNDc0MF9DTEtfTk9UX0dBVEVEKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWp6X2Nsa19yZWdfc2V0X2JpdHMoSlpfUkVHX0NMT0NLX0dBVEUsIGNsay0+Z2F0ZV9iaXQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGp6X2Nsa19pc19lbmFibGVkX2dhdGluZyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKGNsay0+Z2F0ZV9iaXQgPT0gSlo0NzQwX0NMS19OT1RfR0FURUQpCisJCXJldHVybiAxOworCisJcmV0dXJuICEoanpfY2xrX3JlZ19yZWFkKEpaX1JFR19DTE9DS19HQVRFKSAmIGNsay0+Z2F0ZV9iaXQpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBqel9jbGtfc3RhdGljX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gKChzdHJ1Y3Qgc3RhdGljX2NsayAqKWNsayktPnJhdGU7Cit9CisKK3N0YXRpYyBpbnQganpfY2xrX2tvX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJanpfY2xrX3JlZ19zZXRfYml0cyhKWl9SRUdfQ0xPQ0tfQ1RSTCwgSlpfQ0xPQ0tfQ1RSTF9LT19FTkFCTEUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGp6X2Nsa19rb19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlqel9jbGtfcmVnX2NsZWFyX2JpdHMoSlpfUkVHX0NMT0NLX0NUUkwsIEpaX0NMT0NLX0NUUkxfS09fRU5BQkxFKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBqel9jbGtfa29faXNfZW5hYmxlZChzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuICEhKGp6X2Nsa19yZWdfcmVhZChKWl9SRUdfQ0xPQ0tfQ1RSTCkgJiBKWl9DTE9DS19DVFJMX0tPX0VOQUJMRSk7Cit9CisKK3N0YXRpYyBjb25zdCBpbnQgcGxsbm9bXSA9IHsxLCAyLCAyLCA0fTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcganpfY2xrX3BsbF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdWludDMyX3QgdmFsOworCWludCBtOworCWludCBuOworCWludCBvZDsKKworCXZhbCA9IGp6X2Nsa19yZWdfcmVhZChKWl9SRUdfQ0xPQ0tfUExMKTsKKworCWlmICh2YWwgJiBKWl9DTE9DS19QTExfQllQQVNTKQorCQlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCW0gPSAoKHZhbCA+PiAyMykgJiAweDFmZikgKyAyOworCW4gPSAoKHZhbCA+PiAxOCkgJiAweDFmKSArIDI7CisJb2QgPSAodmFsID4+IDE2KSAmIDB4MzsKKworCXJldHVybiAoKGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyBuKSAqIG0pIC8gcGxsbm9bb2RdOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBqel9jbGtfcGxsX2hhbGZfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXVpbnQzMl90IHJlZzsKKworCXJlZyA9IGp6X2Nsa19yZWdfcmVhZChKWl9SRUdfQ0xPQ0tfQ1RSTCk7CisJaWYgKHJlZyAmIEpaX0NMT0NLX0NUUkxfUExMX0hBTEYpCisJCXJldHVybiBqel9jbGtfcGxsX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKwlyZXR1cm4ganpfY2xrX3BsbF9nZXRfcmF0ZShjbGstPnBhcmVudCkgPj4gMTsKK30KKworc3RhdGljIGNvbnN0IGludCBqel9jbGtfbWFpbl9kaXZzW10gPSB7MSwgMiwgMywgNCwgNiwgOCwgMTIsIDE2LCAyNCwgMzJ9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBqel9jbGtfbWFpbl9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUgPSBqel9jbGtfcGxsX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKwlpbnQgZGl2OworCisJZGl2ID0gcGFyZW50X3JhdGUgLyByYXRlOworCWlmIChkaXYgPiAzMikKKwkJcmV0dXJuIHBhcmVudF9yYXRlIC8gMzI7CisJZWxzZSBpZiAoZGl2IDwgMSkKKwkJcmV0dXJuIHBhcmVudF9yYXRlOworCisJZGl2ICY9ICgweDMgPDwgKGZmcyhkaXYpIC0gMSkpOworCisJcmV0dXJuIHBhcmVudF9yYXRlIC8gZGl2OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBqel9jbGtfbWFpbl9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJc3RydWN0IG1haW5fY2xrICptY2xrID0gKHN0cnVjdCBtYWluX2NsayAqKWNsazsKKwl1aW50MzJfdCBkaXY7CisKKwlkaXYgPSBqel9jbGtfcmVnX3JlYWQoSlpfUkVHX0NMT0NLX0NUUkwpOworCisJZGl2ID4+PSBtY2xrLT5kaXZfb2Zmc2V0OworCWRpdiAmPSAweGY7CisKKwlpZiAoZGl2ID49IEFSUkFZX1NJWkUoanpfY2xrX21haW5fZGl2cykpCisJCWRpdiA9IEFSUkFZX1NJWkUoanpfY2xrX21haW5fZGl2cykgLSAxOworCisJcmV0dXJuIGp6X2Nsa19wbGxfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8ganpfY2xrX21haW5fZGl2c1tkaXZdOworfQorCitzdGF0aWMgaW50IGp6X2Nsa19tYWluX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXN0cnVjdCBtYWluX2NsayAqbWNsayA9IChzdHJ1Y3QgbWFpbl9jbGsgKiljbGs7CisJaW50IGk7CisJaW50IGRpdjsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlID0ganpfY2xrX3BsbF9nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlyYXRlID0ganpfY2xrX21haW5fcm91bmRfcmF0ZShjbGssIHJhdGUpOworCisJZGl2ID0gcGFyZW50X3JhdGUgLyByYXRlOworCisJaSA9IChmZnMoZGl2KSAtIDEpIDw8IDE7CisJaWYgKGkgPiAwICYmICEoZGl2ICYgQklUKGktMSkpKQorCQlpIC09IDE7CisKKwlqel9jbGtfcmVnX3dyaXRlX21hc2soSlpfUkVHX0NMT0NLX0NUUkwsIGkgPDwgbWNsay0+ZGl2X29mZnNldCwKKwkJCQkweGYgPDwgbWNsay0+ZGl2X29mZnNldCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIGp6X2Nsa19zdGF0aWNfb3BzID0geworCS5nZXRfcmF0ZSA9IGp6X2Nsa19zdGF0aWNfZ2V0X3JhdGUsCisJLmVuYWJsZSA9IGp6X2Nsa19lbmFibGVfZ2F0aW5nLAorCS5kaXNhYmxlID0ganpfY2xrX2Rpc2FibGVfZ2F0aW5nLAorCS5pc19lbmFibGVkID0ganpfY2xrX2lzX2VuYWJsZWRfZ2F0aW5nLAorfTsKKworc3RhdGljIHN0cnVjdCBzdGF0aWNfY2xrIGp6X2Nsa19leHQgPSB7CisJLmNsayA9IHsKKwkJLm5hbWUgPSAiZXh0IiwKKwkJLmdhdGVfYml0ID0gSlo0NzQwX0NMS19OT1RfR0FURUQsCisJCS5vcHMgPSAmanpfY2xrX3N0YXRpY19vcHMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBqel9jbGtfcGxsX29wcyA9IHsKKwkuZ2V0X3JhdGUgPSBqel9jbGtfcGxsX2dldF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsganpfY2xrX3BsbCA9IHsKKwkubmFtZSA9ICJwbGwiLAorCS5wYXJlbnQgPSAmanpfY2xrX2V4dC5jbGssCisJLm9wcyA9ICZqel9jbGtfcGxsX29wcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBqel9jbGtfcGxsX2hhbGZfb3BzID0geworCS5nZXRfcmF0ZSA9IGp6X2Nsa19wbGxfaGFsZl9nZXRfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGp6X2Nsa19wbGxfaGFsZiA9IHsKKwkubmFtZSA9ICJwbGwgaGFsZiIsCisJLnBhcmVudCA9ICZqel9jbGtfcGxsLAorCS5vcHMgPSAmanpfY2xrX3BsbF9oYWxmX29wcywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBqel9jbGtfbWFpbl9vcHMgPSB7CisJLmdldF9yYXRlID0ganpfY2xrX21haW5fZ2V0X3JhdGUsCisJLnNldF9yYXRlID0ganpfY2xrX21haW5fc2V0X3JhdGUsCisJLnJvdW5kX3JhdGUgPSBqel9jbGtfbWFpbl9yb3VuZF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBtYWluX2NsayBqel9jbGtfY3B1ID0geworCS5jbGsgPSB7CisJCS5uYW1lID0gImNjbGsiLAorCQkucGFyZW50ID0gJmp6X2Nsa19wbGwsCisJCS5vcHMgPSAmanpfY2xrX21haW5fb3BzLAorCX0sCisJLmRpdl9vZmZzZXQgPSBKWl9DTE9DS19DVFJMX0NESVZfT0ZGU0VULAorfTsKKworc3RhdGljIHN0cnVjdCBtYWluX2NsayBqel9jbGtfbWVtb3J5ID0geworCS5jbGsgPSB7CisJCS5uYW1lID0gIm1jbGsiLAorCQkucGFyZW50ID0gJmp6X2Nsa19wbGwsCisJCS5vcHMgPSAmanpfY2xrX21haW5fb3BzLAorCX0sCisJLmRpdl9vZmZzZXQgPSBKWl9DTE9DS19DVFJMX01ESVZfT0ZGU0VULAorfTsKKworc3RhdGljIHN0cnVjdCBtYWluX2NsayBqel9jbGtfaGlnaF9zcGVlZF9wZXJpcGhlcmFsID0geworCS5jbGsgPSB7CisJCS5uYW1lID0gImhjbGsiLAorCQkucGFyZW50ID0gJmp6X2Nsa19wbGwsCisJCS5vcHMgPSAmanpfY2xrX21haW5fb3BzLAorCX0sCisJLmRpdl9vZmZzZXQgPSBKWl9DTE9DS19DVFJMX0hESVZfT0ZGU0VULAorfTsKKworCitzdGF0aWMgc3RydWN0IG1haW5fY2xrIGp6X2Nsa19sb3dfc3BlZWRfcGVyaXBoZXJhbCA9IHsKKwkuY2xrID0geworCQkubmFtZSA9ICJwY2xrIiwKKwkJLnBhcmVudCA9ICZqel9jbGtfcGxsLAorCQkub3BzID0gJmp6X2Nsa19tYWluX29wcywKKwl9LAorCS5kaXZfb2Zmc2V0ID0gSlpfQ0xPQ0tfQ1RSTF9QRElWX09GRlNFVCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBqel9jbGtfa29fb3BzID0geworCS5lbmFibGUgPSBqel9jbGtfa29fZW5hYmxlLAorCS5kaXNhYmxlID0ganpfY2xrX2tvX2Rpc2FibGUsCisJLmlzX2VuYWJsZWQgPSBqel9jbGtfa29faXNfZW5hYmxlZCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGp6X2Nsa19rbyA9IHsKKwkubmFtZSA9ICJja28iLAorCS5wYXJlbnQgPSAmanpfY2xrX21lbW9yeS5jbGssCisJLm9wcyA9ICZqel9jbGtfa29fb3BzLAorfTsKKworc3RhdGljIGludCBqel9jbGtfc3BpX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJaWYgKHBhcmVudCA9PSAmanpfY2xrX3BsbCkKKwkJanpfY2xrX3JlZ19zZXRfYml0cyhKWl9DTE9DS19TUElfU1JDX1BMTCwgSlpfUkVHX0NMT0NLX1NQSSk7CisJZWxzZSBpZiAocGFyZW50ID09ICZqel9jbGtfZXh0LmNsaykKKwkJanpfY2xrX3JlZ19jbGVhcl9iaXRzKEpaX0NMT0NLX1NQSV9TUkNfUExMLCBKWl9SRUdfQ0xPQ0tfU1BJKTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJY2xrLT5wYXJlbnQgPSBwYXJlbnQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBqel9jbGtfaTJzX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJaWYgKHBhcmVudCA9PSAmanpfY2xrX3BsbF9oYWxmKQorCQlqel9jbGtfcmVnX3NldF9iaXRzKEpaX1JFR19DTE9DS19DVFJMLCBKWl9DTE9DS19DVFJMX0kyU19TUkNfUExMKTsKKwllbHNlIGlmIChwYXJlbnQgPT0gJmp6X2Nsa19leHQuY2xrKQorCQlqel9jbGtfcmVnX2NsZWFyX2JpdHMoSlpfUkVHX0NMT0NLX0NUUkwsIEpaX0NMT0NLX0NUUkxfSTJTX1NSQ19QTEwpOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljbGstPnBhcmVudCA9IHBhcmVudDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGp6X2Nsa191ZGNfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlqel9jbGtfcmVnX3NldF9iaXRzKEpaX1JFR19DTE9DS19TTEVFUF9DVFJMLAorCQkJSlpfQ0xPQ0tfU0xFRVBfQ1RSTF9FTkFCTEVfVURDKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGp6X2Nsa191ZGNfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJanpfY2xrX3JlZ19jbGVhcl9iaXRzKEpaX1JFR19DTE9DS19TTEVFUF9DVFJMLAorCQkJSlpfQ0xPQ0tfU0xFRVBfQ1RSTF9FTkFCTEVfVURDKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGp6X2Nsa191ZGNfaXNfZW5hYmxlZChzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuICEhKGp6X2Nsa19yZWdfcmVhZChKWl9SRUdfQ0xPQ0tfU0xFRVBfQ1RSTCkgJgorCQkJSlpfQ0xPQ0tfU0xFRVBfQ1RSTF9FTkFCTEVfVURDKTsKK30KKworc3RhdGljIGludCBqel9jbGtfdWRjX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJaWYgKHBhcmVudCA9PSAmanpfY2xrX3BsbF9oYWxmKQorCQlqel9jbGtfcmVnX3NldF9iaXRzKEpaX1JFR19DTE9DS19DVFJMLCBKWl9DTE9DS19DVFJMX1VEQ19TUkNfUExMKTsKKwllbHNlIGlmIChwYXJlbnQgPT0gJmp6X2Nsa19leHQuY2xrKQorCQlqel9jbGtfcmVnX2NsZWFyX2JpdHMoSlpfUkVHX0NMT0NLX0NUUkwsIEpaX0NMT0NLX0NUUkxfVURDX1NSQ19QTEwpOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljbGstPnBhcmVudCA9IHBhcmVudDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGp6X2Nsa191ZGNfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJaW50IGRpdjsKKworCWlmIChjbGstPnBhcmVudCA9PSAmanpfY2xrX2V4dC5jbGspCisJCXJldHVybiAtRUlOVkFMOworCisJZGl2ID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIHJhdGUgLSAxOworCisJaWYgKGRpdiA8IDApCisJCWRpdiA9IDA7CisJZWxzZSBpZiAoZGl2ID4gNjMpCisJCWRpdiA9IDYzOworCisJanpfY2xrX3JlZ193cml0ZV9tYXNrKEpaX1JFR19DTE9DS19DVFJMLCBkaXYgPDwgSlpfQ0xPQ0tfQ1RSTF9VRElWX09GRlNFVCwKKwkJCQlKWl9DTE9DS19DVFJMX1VESVZfTUFTSyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGp6X2Nsa191ZGNfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCWludCBkaXY7CisKKwlpZiAoY2xrLT5wYXJlbnQgPT0gJmp6X2Nsa19leHQuY2xrKQorCQlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCWRpdiA9IChqel9jbGtfcmVnX3JlYWQoSlpfUkVHX0NMT0NLX0NUUkwpICYgSlpfQ0xPQ0tfQ1RSTF9VRElWX01BU0spOworCWRpdiA+Pj0gSlpfQ0xPQ0tfQ1RSTF9VRElWX09GRlNFVDsKKwlkaXYgKz0gMTsKKworCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gZGl2OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBqel9jbGtfZGl2aWRlZF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJc3RydWN0IGRpdmlkZWRfY2xrICpkY2xrID0gKHN0cnVjdCBkaXZpZGVkX2NsayAqKWNsazsKKwlpbnQgZGl2OworCisJaWYgKGNsay0+cGFyZW50ID09ICZqel9jbGtfZXh0LmNsaykKKwkJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlkaXYgPSAoanpfY2xrX3JlZ19yZWFkKGRjbGstPnJlZykgJiBkY2xrLT5tYXNrKSArIDE7CisKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIGRpdjsKK30KKworc3RhdGljIGludCBqel9jbGtfZGl2aWRlZF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlzdHJ1Y3QgZGl2aWRlZF9jbGsgKmRjbGsgPSAoc3RydWN0IGRpdmlkZWRfY2xrICopY2xrOworCWludCBkaXY7CisKKwlpZiAoY2xrLT5wYXJlbnQgPT0gJmp6X2Nsa19leHQuY2xrKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRpdiA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyByYXRlIC0gMTsKKworCWlmIChkaXYgPCAwKQorCQlkaXYgPSAwOworCWVsc2UgaWYgKGRpdiA+IGRjbGstPm1hc2spCisJCWRpdiA9IGRjbGstPm1hc2s7CisKKwlqel9jbGtfcmVnX3dyaXRlX21hc2soZGNsay0+cmVnLCBkaXYsIGRjbGstPm1hc2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGp6X2Nsa19sZGNsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWludCBkaXY7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGp6X2Nsa19wbGxfaGFsZl9nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlpZiAocmF0ZSA+IDE1MDAwMDAwMCkKKwkJcmV0dXJuIDE1MDAwMDAwMDsKKworCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKKwlpZiAoZGl2IDwgMSkKKwkJZGl2ID0gMTsKKwllbHNlIGlmIChkaXYgPiAzMikKKwkJZGl2ID0gMzI7CisKKwlyZXR1cm4gcGFyZW50X3JhdGUgLyBkaXY7Cit9CisKK3N0YXRpYyBpbnQganpfY2xrX2xkY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWludCBkaXY7CisKKwlpZiAocmF0ZSA+IDE1MDAwMDAwMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkaXYgPSBqel9jbGtfcGxsX2hhbGZfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gcmF0ZSAtIDE7CisJaWYgKGRpdiA8IDApCisJCWRpdiA9IDA7CisJZWxzZSBpZiAoZGl2ID4gMzEpCisJCWRpdiA9IDMxOworCisJanpfY2xrX3JlZ193cml0ZV9tYXNrKEpaX1JFR19DTE9DS19DVFJMLCBkaXYgPDwgSlpfQ0xPQ0tfQ1RSTF9MRElWX09GRlNFVCwKKwkJCQlKWl9DTE9DS19DVFJMX0xESVZfTUFTSyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcganpfY2xrX2xkY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgZGl2OworCisJZGl2ID0ganpfY2xrX3JlZ19yZWFkKEpaX1JFR19DTE9DS19DVFJMKSAmIEpaX0NMT0NLX0NUUkxfTERJVl9NQVNLOworCWRpdiA+Pj0gSlpfQ0xPQ0tfQ1RSTF9MRElWX09GRlNFVDsKKworCXJldHVybiBqel9jbGtfcGxsX2hhbGZfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gKGRpdiArIDEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMganpfY2xrX29wc19sZCA9IHsKKwkuc2V0X3JhdGUgPSBqel9jbGtfbGRjbGtfc2V0X3JhdGUsCisJLmdldF9yYXRlID0ganpfY2xrX2xkY2xrX2dldF9yYXRlLAorCS5yb3VuZF9yYXRlID0ganpfY2xrX2xkY2xrX3JvdW5kX3JhdGUsCisJLmVuYWJsZSA9IGp6X2Nsa19lbmFibGVfZ2F0aW5nLAorCS5kaXNhYmxlID0ganpfY2xrX2Rpc2FibGVfZ2F0aW5nLAorCS5pc19lbmFibGVkID0ganpfY2xrX2lzX2VuYWJsZWRfZ2F0aW5nLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsganpfY2xrX2xkID0geworCS5uYW1lID0gImxjZCIsCisJLmdhdGVfYml0ID0gSlpfQ0xPQ0tfR0FURV9MQ0QsCisJLnBhcmVudCA9ICZqel9jbGtfcGxsX2hhbGYsCisJLm9wcyA9ICZqel9jbGtfb3BzX2xkLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIGp6X2Nsa19pMnNfb3BzID0geworCS5zZXRfcmF0ZSA9IGp6X2Nsa19kaXZpZGVkX3NldF9yYXRlLAorCS5nZXRfcmF0ZSA9IGp6X2Nsa19kaXZpZGVkX2dldF9yYXRlLAorCS5lbmFibGUgPSBqel9jbGtfZW5hYmxlX2dhdGluZywKKwkuZGlzYWJsZSA9IGp6X2Nsa19kaXNhYmxlX2dhdGluZywKKwkuaXNfZW5hYmxlZCA9IGp6X2Nsa19pc19lbmFibGVkX2dhdGluZywKKwkuc2V0X3BhcmVudCA9IGp6X2Nsa19pMnNfc2V0X3BhcmVudCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBqel9jbGtfc3BpX29wcyA9IHsKKwkuc2V0X3JhdGUgPSBqel9jbGtfZGl2aWRlZF9zZXRfcmF0ZSwKKwkuZ2V0X3JhdGUgPSBqel9jbGtfZGl2aWRlZF9nZXRfcmF0ZSwKKwkuZW5hYmxlID0ganpfY2xrX2VuYWJsZV9nYXRpbmcsCisJLmRpc2FibGUgPSBqel9jbGtfZGlzYWJsZV9nYXRpbmcsCisJLmlzX2VuYWJsZWQgPSBqel9jbGtfaXNfZW5hYmxlZF9nYXRpbmcsCisJLnNldF9wYXJlbnQgPSBqel9jbGtfc3BpX3NldF9wYXJlbnQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMganpfY2xrX2RpdmlkZWRfb3BzID0geworCS5zZXRfcmF0ZSA9IGp6X2Nsa19kaXZpZGVkX3NldF9yYXRlLAorCS5nZXRfcmF0ZSA9IGp6X2Nsa19kaXZpZGVkX2dldF9yYXRlLAorCS5lbmFibGUgPSBqel9jbGtfZW5hYmxlX2dhdGluZywKKwkuZGlzYWJsZSA9IGp6X2Nsa19kaXNhYmxlX2dhdGluZywKKwkuaXNfZW5hYmxlZCA9IGp6X2Nsa19pc19lbmFibGVkX2dhdGluZywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGl2aWRlZF9jbGsgano0NzQwX2Nsb2NrX2RpdmlkZWRfY2xrc1tdID0geworCVswXSA9IHsKKwkJLmNsayA9IHsKKwkJCS5uYW1lID0gImkycyIsCisJCQkucGFyZW50ID0gJmp6X2Nsa19leHQuY2xrLAorCQkJLmdhdGVfYml0ID0gSlpfQ0xPQ0tfR0FURV9JMlMsCisJCQkub3BzID0gJmp6X2Nsa19pMnNfb3BzLAorCQl9LAorCQkucmVnID0gSlpfUkVHX0NMT0NLX0kyUywKKwkJLm1hc2sgPSBKWl9DTE9DS19JMlNfRElWX01BU0ssCisJfSwKKwlbMV0gPSB7CisJCS5jbGsgPSB7CisJCQkubmFtZSA9ICJzcGkiLAorCQkJLnBhcmVudCA9ICZqel9jbGtfZXh0LmNsaywKKwkJCS5nYXRlX2JpdCA9IEpaX0NMT0NLX0dBVEVfU1BJLAorCQkJLm9wcyA9ICZqel9jbGtfc3BpX29wcywKKwkJfSwKKwkJLnJlZyA9IEpaX1JFR19DTE9DS19TUEksCisJCS5tYXNrID0gSlpfQ0xPQ0tfU1BJX0RJVl9NQVNLLAorCX0sCisJWzJdID0geworCQkuY2xrID0geworCQkJLm5hbWUgPSAibGNkX3BjbGsiLAorCQkJLnBhcmVudCA9ICZqel9jbGtfcGxsX2hhbGYsCisJCQkuZ2F0ZV9iaXQgPSBKWjQ3NDBfQ0xLX05PVF9HQVRFRCwKKwkJCS5vcHMgPSAmanpfY2xrX2RpdmlkZWRfb3BzLAorCQl9LAorCQkucmVnID0gSlpfUkVHX0NMT0NLX0xDRCwKKwkJLm1hc2sgPSBKWl9DTE9DS19MQ0RfRElWX01BU0ssCisJfSwKKwlbM10gPSB7CisJCS5jbGsgPSB7CisJCQkubmFtZSA9ICJtbWMiLAorCQkJLnBhcmVudCA9ICZqel9jbGtfcGxsX2hhbGYsCisJCQkuZ2F0ZV9iaXQgPSBKWl9DTE9DS19HQVRFX01NQywKKwkJCS5vcHMgPSAmanpfY2xrX2RpdmlkZWRfb3BzLAorCQl9LAorCQkucmVnID0gSlpfUkVHX0NMT0NLX01NQywKKwkJLm1hc2sgPSBKWl9DTE9DS19NTUNfRElWX01BU0ssCisJfSwKKwlbNF0gPSB7CisJCS5jbGsgPSB7CisJCQkubmFtZSA9ICJ1aGMiLAorCQkJLnBhcmVudCA9ICZqel9jbGtfcGxsX2hhbGYsCisJCQkuZ2F0ZV9iaXQgPSBKWl9DTE9DS19HQVRFX1VIQywKKwkJCS5vcHMgPSAmanpfY2xrX2RpdmlkZWRfb3BzLAorCQl9LAorCQkucmVnID0gSlpfUkVHX0NMT0NLX1VIQywKKwkJLm1hc2sgPSBKWl9DTE9DS19VSENfRElWX01BU0ssCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBqel9jbGtfdWRjX29wcyA9IHsKKwkuc2V0X3BhcmVudCA9IGp6X2Nsa191ZGNfc2V0X3BhcmVudCwKKwkuc2V0X3JhdGUgPSBqel9jbGtfdWRjX3NldF9yYXRlLAorCS5nZXRfcmF0ZSA9IGp6X2Nsa191ZGNfZ2V0X3JhdGUsCisJLmVuYWJsZSA9IGp6X2Nsa191ZGNfZW5hYmxlLAorCS5kaXNhYmxlID0ganpfY2xrX3VkY19kaXNhYmxlLAorCS5pc19lbmFibGVkID0ganpfY2xrX3VkY19pc19lbmFibGVkLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIGp6X2Nsa19zaW1wbGVfb3BzID0geworCS5lbmFibGUgPSBqel9jbGtfZW5hYmxlX2dhdGluZywKKwkuZGlzYWJsZSA9IGp6X2Nsa19kaXNhYmxlX2dhdGluZywKKwkuaXNfZW5hYmxlZCA9IGp6X2Nsa19pc19lbmFibGVkX2dhdGluZywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGp6NDc0MF9jbG9ja19zaW1wbGVfY2xrc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUgPSAidWRjIiwKKwkJLnBhcmVudCA9ICZqel9jbGtfZXh0LmNsaywKKwkJLm9wcyA9ICZqel9jbGtfdWRjX29wcywKKwl9LAorCVsxXSA9IHsKKwkJLm5hbWUgPSAidWFydDAiLAorCQkucGFyZW50ID0gJmp6X2Nsa19leHQuY2xrLAorCQkuZ2F0ZV9iaXQgPSBKWl9DTE9DS19HQVRFX1VBUlQwLAorCQkub3BzID0gJmp6X2Nsa19zaW1wbGVfb3BzLAorCX0sCisJWzJdID0geworCQkubmFtZSA9ICJ1YXJ0MSIsCisJCS5wYXJlbnQgPSAmanpfY2xrX2V4dC5jbGssCisJCS5nYXRlX2JpdCA9IEpaX0NMT0NLX0dBVEVfVUFSVDEsCisJCS5vcHMgPSAmanpfY2xrX3NpbXBsZV9vcHMsCisJfSwKKwlbM10gPSB7CisJCS5uYW1lID0gImRtYSIsCisJCS5wYXJlbnQgPSAmanpfY2xrX2hpZ2hfc3BlZWRfcGVyaXBoZXJhbC5jbGssCisJCS5nYXRlX2JpdCA9IEpaX0NMT0NLX0dBVEVfVUFSVDAsCisJCS5vcHMgPSAmanpfY2xrX3NpbXBsZV9vcHMsCisJfSwKKwlbNF0gPSB7CisJCS5uYW1lID0gImlwdSIsCisJCS5wYXJlbnQgPSAmanpfY2xrX2hpZ2hfc3BlZWRfcGVyaXBoZXJhbC5jbGssCisJCS5nYXRlX2JpdCA9IEpaX0NMT0NLX0dBVEVfSVBVLAorCQkub3BzID0gJmp6X2Nsa19zaW1wbGVfb3BzLAorCX0sCisJWzVdID0geworCQkubmFtZSA9ICJhZGMiLAorCQkucGFyZW50ID0gJmp6X2Nsa19leHQuY2xrLAorCQkuZ2F0ZV9iaXQgPSBKWl9DTE9DS19HQVRFX0FEQywKKwkJLm9wcyA9ICZqel9jbGtfc2ltcGxlX29wcywKKwl9LAorCVs2XSA9IHsKKwkJLm5hbWUgPSAiaTJjIiwKKwkJLnBhcmVudCA9ICZqel9jbGtfZXh0LmNsaywKKwkJLmdhdGVfYml0ID0gSlpfQ0xPQ0tfR0FURV9JMkMsCisJCS5vcHMgPSAmanpfY2xrX3NpbXBsZV9vcHMsCisJfSwKKwlbN10gPSB7CisJCS5uYW1lID0gImFpYyIsCisJCS5wYXJlbnQgPSAmanpfY2xrX2V4dC5jbGssCisJCS5nYXRlX2JpdCA9IEpaX0NMT0NLX0dBVEVfQUlDLAorCQkub3BzID0gJmp6X2Nsa19zaW1wbGVfb3BzLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHN0YXRpY19jbGsganpfY2xrX3J0YyA9IHsKKwkuY2xrID0geworCQkubmFtZSA9ICJydGMiLAorCQkuZ2F0ZV9iaXQgPSBKWl9DTE9DS19HQVRFX1JUQywKKwkJLm9wcyA9ICZqel9jbGtfc3RhdGljX29wcywKKwl9LAorCS5yYXRlID0gMzI3NjgsCit9OworCitpbnQgY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKCFjbGstPm9wcy0+ZW5hYmxlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBjbGstPm9wcy0+ZW5hYmxlKGNsayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjbGtfZW5hYmxlKTsKKwordm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKGNsay0+b3BzLT5kaXNhYmxlKQorCQljbGstPm9wcy0+ZGlzYWJsZShjbGspOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY2xrX2Rpc2FibGUpOworCitpbnQgY2xrX2lzX2VuYWJsZWQoc3RydWN0IGNsayAqY2xrKQoreworCWlmIChjbGstPm9wcy0+aXNfZW5hYmxlZCkKKwkJcmV0dXJuIGNsay0+b3BzLT5pc19lbmFibGVkKGNsayk7CisKKwlyZXR1cm4gMTsKK30KKwordW5zaWduZWQgbG9uZyBjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCWlmIChjbGstPm9wcy0+Z2V0X3JhdGUpCisJCXJldHVybiBjbGstPm9wcy0+Z2V0X3JhdGUoY2xrKTsKKwlpZiAoY2xrLT5wYXJlbnQpCisJCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjbGtfZ2V0X3JhdGUpOworCitpbnQgY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWlmICghY2xrLT5vcHMtPnNldF9yYXRlKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gY2xrLT5vcHMtPnNldF9yYXRlKGNsaywgcmF0ZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjbGtfc2V0X3JhdGUpOworCitsb25nIGNsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWlmIChjbGstPm9wcy0+cm91bmRfcmF0ZSkKKwkJcmV0dXJuIGNsay0+b3BzLT5yb3VuZF9yYXRlKGNsaywgcmF0ZSk7CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNsa19yb3VuZF9yYXRlKTsKKworaW50IGNsa19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQoreworCWludCByZXQ7CisJaW50IGVuYWJsZWQ7CisKKwlpZiAoIWNsay0+b3BzLT5zZXRfcGFyZW50KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVuYWJsZWQgPSBjbGtfaXNfZW5hYmxlZChjbGspOworCWlmIChlbmFibGVkKQorCQljbGtfZGlzYWJsZShjbGspOworCXJldCA9IGNsay0+b3BzLT5zZXRfcGFyZW50KGNsaywgcGFyZW50KTsKKwlpZiAoZW5hYmxlZCkKKwkJY2xrX2VuYWJsZShjbGspOworCisJano0NzQwX2Nsb2NrX2RlYnVnZnNfdXBkYXRlX3BhcmVudChjbGspOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNsa19zZXRfcGFyZW50KTsKKworc3RydWN0IGNsayAqY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGNsayAqY2xrOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGssICZqel9jbG9ja3MsIGxpc3QpIHsKKwkJaWYgKHN0cmNtcChjbGstPm5hbWUsIG5hbWUpID09IDApCisJCQlyZXR1cm4gY2xrOworCX0KKwlyZXR1cm4gRVJSX1BUUigtRU5YSU8pOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY2xrX2dldCk7CisKK3ZvaWQgY2xrX3B1dChzdHJ1Y3QgY2xrICpjbGspCit7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjbGtfcHV0KTsKKworc3RhdGljIGlubGluZSB2b2lkIGNsa19hZGQoc3RydWN0IGNsayAqY2xrKQoreworCWxpc3RfYWRkX3RhaWwoJmNsay0+bGlzdCwgJmp6X2Nsb2Nrcyk7CisKKwlqejQ3NDBfY2xvY2tfZGVidWdmc19hZGRfY2xrKGNsayk7Cit9CisKK3N0YXRpYyB2b2lkIGNsa19yZWdpc3Rlcl9jbGtzKHZvaWQpCit7CisJc2l6ZV90IGk7CisKKwljbGtfYWRkKCZqel9jbGtfZXh0LmNsayk7CisJY2xrX2FkZCgmanpfY2xrX3BsbCk7CisJY2xrX2FkZCgmanpfY2xrX3BsbF9oYWxmKTsKKwljbGtfYWRkKCZqel9jbGtfY3B1LmNsayk7CisJY2xrX2FkZCgmanpfY2xrX2hpZ2hfc3BlZWRfcGVyaXBoZXJhbC5jbGspOworCWNsa19hZGQoJmp6X2Nsa19sb3dfc3BlZWRfcGVyaXBoZXJhbC5jbGspOworCWNsa19hZGQoJmp6X2Nsa19rbyk7CisJY2xrX2FkZCgmanpfY2xrX2xkKTsKKwljbGtfYWRkKCZqel9jbGtfcnRjLmNsayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShqejQ3NDBfY2xvY2tfZGl2aWRlZF9jbGtzKTsgKytpKQorCQljbGtfYWRkKCZqejQ3NDBfY2xvY2tfZGl2aWRlZF9jbGtzW2ldLmNsayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShqejQ3NDBfY2xvY2tfc2ltcGxlX2Nsa3MpOyArK2kpCisJCWNsa19hZGQoJmp6NDc0MF9jbG9ja19zaW1wbGVfY2xrc1tpXSk7Cit9CisKK3ZvaWQgano0NzQwX2Nsb2NrX3NldF93YWl0X21vZGUoZW51bSBqejQ3NDBfd2FpdF9tb2RlIG1vZGUpCit7CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBKWjQ3NDBfV0FJVF9NT0RFX0lETEU6CisJCWp6X2Nsa19yZWdfY2xlYXJfYml0cyhKWl9SRUdfQ0xPQ0tfTE9XX1BPV0VSLCBKWl9DTE9DS19MT1dfUE9XRVJfTU9ERV9TTEVFUCk7CisJCWJyZWFrOworCWNhc2UgSlo0NzQwX1dBSVRfTU9ERV9TTEVFUDoKKwkJanpfY2xrX3JlZ19zZXRfYml0cyhKWl9SRUdfQ0xPQ0tfTE9XX1BPV0VSLCBKWl9DTE9DS19MT1dfUE9XRVJfTU9ERV9TTEVFUCk7CisJCWJyZWFrOworCX0KK30KKwordm9pZCBqejQ3NDBfY2xvY2tfdWRjX2Rpc2FibGVfYXV0b19zdXNwZW5kKHZvaWQpCit7CisJanpfY2xrX3JlZ19jbGVhcl9iaXRzKEpaX1JFR19DTE9DS19HQVRFLCBKWl9DTE9DS19HQVRFX1VEQyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChqejQ3NDBfY2xvY2tfdWRjX2Rpc2FibGVfYXV0b19zdXNwZW5kKTsKKwordm9pZCBqejQ3NDBfY2xvY2tfdWRjX2VuYWJsZV9hdXRvX3N1c3BlbmQodm9pZCkKK3sKKwlqel9jbGtfcmVnX3NldF9iaXRzKEpaX1JFR19DTE9DS19HQVRFLCBKWl9DTE9DS19HQVRFX1VEQyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChqejQ3NDBfY2xvY2tfdWRjX2VuYWJsZV9hdXRvX3N1c3BlbmQpOworCit2b2lkIGp6NDc0MF9jbG9ja19zdXNwZW5kKHZvaWQpCit7CisJanpfY2xrX3JlZ19zZXRfYml0cyhKWl9SRUdfQ0xPQ0tfR0FURSwKKwkJSlpfQ0xPQ0tfR0FURV9UQ1UgfCBKWl9DTE9DS19HQVRFX0RNQUMgfCBKWl9DTE9DS19HQVRFX1VBUlQwKTsKKworCWp6X2Nsa19yZWdfY2xlYXJfYml0cyhKWl9SRUdfQ0xPQ0tfUExMLCBKWl9DTE9DS19QTExfRU5BQkxFRCk7Cit9CisKK3ZvaWQgano0NzQwX2Nsb2NrX3Jlc3VtZSh2b2lkKQoreworCXVpbnQzMl90IHBsbDsKKworCWp6X2Nsa19yZWdfc2V0X2JpdHMoSlpfUkVHX0NMT0NLX1BMTCwgSlpfQ0xPQ0tfUExMX0VOQUJMRUQpOworCisJZG8geworCQlwbGwgPSBqel9jbGtfcmVnX3JlYWQoSlpfUkVHX0NMT0NLX1BMTCk7CisJfSB3aGlsZSAoIShwbGwgJiBKWl9DTE9DS19QTExfU1RBQkxFKSk7CisKKwlqel9jbGtfcmVnX2NsZWFyX2JpdHMoSlpfUkVHX0NMT0NLX0dBVEUsCisJCUpaX0NMT0NLX0dBVEVfVENVIHwgSlpfQ0xPQ0tfR0FURV9ETUFDIHwgSlpfQ0xPQ0tfR0FURV9VQVJUMCk7Cit9CisKK3N0YXRpYyBpbnQgano0NzQwX2Nsb2NrX2luaXQodm9pZCkKK3sKKwl1aW50MzJfdCB2YWw7CisKKwlqel9jbG9ja19iYXNlID0gaW9yZW1hcChKWjQ3NDBfQ1BNX0JBU0VfQUREUiwgMHgxMDApOworCWlmICghanpfY2xvY2tfYmFzZSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXNwaW5fbG9ja19pbml0KCZqel9jbG9ja19sb2NrKTsKKworCWp6X2Nsa19leHQucmF0ZSA9IGp6NDc0MF9jbG9ja19iZGF0YS5leHRfcmF0ZTsKKwlqel9jbGtfcnRjLnJhdGUgPSBqejQ3NDBfY2xvY2tfYmRhdGEucnRjX3JhdGU7CisKKwl2YWwgPSBqel9jbGtfcmVnX3JlYWQoSlpfUkVHX0NMT0NLX1NQSSk7CisKKwlpZiAodmFsICYgSlpfQ0xPQ0tfU1BJX1NSQ19QTEwpCisJCWp6NDc0MF9jbG9ja19kaXZpZGVkX2Nsa3NbMV0uY2xrLnBhcmVudCA9ICZqel9jbGtfcGxsX2hhbGY7CisKKwl2YWwgPSBqel9jbGtfcmVnX3JlYWQoSlpfUkVHX0NMT0NLX0NUUkwpOworCisJaWYgKHZhbCAmIEpaX0NMT0NLX0NUUkxfSTJTX1NSQ19QTEwpCisJCWp6NDc0MF9jbG9ja19kaXZpZGVkX2Nsa3NbMF0uY2xrLnBhcmVudCA9ICZqel9jbGtfcGxsX2hhbGY7CisKKwlpZiAodmFsICYgSlpfQ0xPQ0tfQ1RSTF9VRENfU1JDX1BMTCkKKwkJano0NzQwX2Nsb2NrX3NpbXBsZV9jbGtzWzBdLnBhcmVudCA9ICZqel9jbGtfcGxsX2hhbGY7CisKKwlqejQ3NDBfY2xvY2tfZGVidWdmc19pbml0KCk7CisKKwljbGtfcmVnaXN0ZXJfY2xrcygpOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKGp6NDc0MF9jbG9ja19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qejQ3NDAvY2xvY2suaCBiL2FyY2gvbWlwcy9qejQ3NDAvY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDA3NDk5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2p6NDc0MC9jbG9jay5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwLCBMYXJzLVBldGVyIENsYXVzZW4gPGxhcnNAbWV0YWZvby5kZT4KKyAqICBKWjQ3NDAgU29DIGNsb2NrIHN1cHBvcnQKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZgkgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUJTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBfX01JUFNfSlo0NzQwX0NMT0NLX0hfXworI2RlZmluZSBfX01JUFNfSlo0NzQwX0NMT0NLX0hfXworCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCitzdHJ1Y3Qgano0NzQwX2Nsb2NrX2JvYXJkX2RhdGEgeworCXVuc2lnbmVkIGxvbmcgZXh0X3JhdGU7CisJdW5zaWduZWQgbG9uZyBydGNfcmF0ZTsKK307CisKK2V4dGVybiBzdHJ1Y3Qgano0NzQwX2Nsb2NrX2JvYXJkX2RhdGEgano0NzQwX2Nsb2NrX2JkYXRhOworCit2b2lkIGp6NDc0MF9jbG9ja19zdXNwZW5kKHZvaWQpOwordm9pZCBqejQ3NDBfY2xvY2tfcmVzdW1lKHZvaWQpOworCitzdHJ1Y3QgY2xrOworCitzdHJ1Y3QgY2xrX29wcyB7CisJdW5zaWduZWQgbG9uZyAoKmdldF9yYXRlKShzdHJ1Y3QgY2xrICpjbGspOworCXVuc2lnbmVkIGxvbmcgKCpyb3VuZF9yYXRlKShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CisJaW50ICgqc2V0X3JhdGUpKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKKwlpbnQgKCplbmFibGUpKHN0cnVjdCBjbGsgKmNsayk7CisJaW50ICgqZGlzYWJsZSkoc3RydWN0IGNsayAqY2xrKTsKKwlpbnQgKCppc19lbmFibGVkKShzdHJ1Y3QgY2xrICpjbGspOworCisJaW50ICgqc2V0X3BhcmVudCkoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpOworCit9OworCitzdHJ1Y3QgY2xrIHsKKwljb25zdCBjaGFyICpuYW1lOworCXN0cnVjdCBjbGsgKnBhcmVudDsKKworCXVpbnQzMl90IGdhdGVfYml0OworCisJY29uc3Qgc3RydWN0IGNsa19vcHMgKm9wczsKKworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworI2lmZGVmIENPTkZJR19ERUJVR19GUworCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZW50cnk7CisJc3RydWN0IGRlbnRyeSAqZGVidWdmc19wYXJlbnRfZW50cnk7CisjZW5kaWYKKworfTsKKworI2RlZmluZSBKWjQ3NDBfQ0xLX05PVF9HQVRFRCAoKHVpbnQzMl90KS0xKQorCitpbnQgY2xrX2lzX2VuYWJsZWQoc3RydWN0IGNsayAqY2xrKTsKKworI2lmZGVmIENPTkZJR19ERUJVR19GUwordm9pZCBqejQ3NDBfY2xvY2tfZGVidWdmc19pbml0KHZvaWQpOwordm9pZCBqejQ3NDBfY2xvY2tfZGVidWdmc19hZGRfY2xrKHN0cnVjdCBjbGsgKmNsayk7Cit2b2lkIGp6NDc0MF9jbG9ja19kZWJ1Z2ZzX3VwZGF0ZV9wYXJlbnQoc3RydWN0IGNsayAqY2xrKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgano0NzQwX2Nsb2NrX2RlYnVnZnNfaW5pdCh2b2lkKSB7fTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBqejQ3NDBfY2xvY2tfZGVidWdmc19hZGRfY2xrKHN0cnVjdCBjbGsgKmNsaykge307CitzdGF0aWMgaW5saW5lIHZvaWQgano0NzQwX2Nsb2NrX2RlYnVnZnNfdXBkYXRlX3BhcmVudChzdHJ1Y3QgY2xrICpjbGspIHt9OworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2p6NDc0MC9kbWEuYyBiL2FyY2gvbWlwcy9qejQ3NDAvZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWViZTc1YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9qejQ3NDAvZG1hLmMKQEAgLTAsMCArMSwyODkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwLCBMYXJzLVBldGVyIENsYXVzZW4gPGxhcnNAbWV0YWZvby5kZT4KKyAqICBKWjQ3NDAgU29DIERNQSBzdXBwb3J0CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWp6NDc0MC9kbWEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1qejQ3NDAvYmFzZS5oPgorCisjZGVmaW5lIEpaX1JFR19ETUFfU1JDX0FERFIoeCkJCSgweDAwICsgKHgpICogMHgyMCkKKyNkZWZpbmUgSlpfUkVHX0RNQV9EU1RfQUREUih4KQkJKDB4MDQgKyAoeCkgKiAweDIwKQorI2RlZmluZSBKWl9SRUdfRE1BX1RSQU5TRkVSX0NPVU5UKHgpCSgweDA4ICsgKHgpICogMHgyMCkKKyNkZWZpbmUgSlpfUkVHX0RNQV9SRVFfVFlQRSh4KQkJKDB4MEMgKyAoeCkgKiAweDIwKQorI2RlZmluZSBKWl9SRUdfRE1BX1NUQVRVU19DVFJMKHgpCSgweDEwICsgKHgpICogMHgyMCkKKyNkZWZpbmUgSlpfUkVHX0RNQV9DTUQoeCkJCSgweDE0ICsgKHgpICogMHgyMCkKKyNkZWZpbmUgSlpfUkVHX0RNQV9ERVNDX0FERFIoeCkJCSgweDE4ICsgKHgpICogMHgyMCkKKworI2RlZmluZSBKWl9SRUdfRE1BX0NUUkwJCQkweDMwMAorI2RlZmluZSBKWl9SRUdfRE1BX0lSUQkJCTB4MzA0CisjZGVmaW5lIEpaX1JFR19ETUFfRE9PUkJFTEwJCTB4MzA4CisjZGVmaW5lIEpaX1JFR19ETUFfRE9PUkJFTExfU0VUCQkweDMwQworCisjZGVmaW5lIEpaX0RNQV9TVEFUVVNfQ1RSTF9OT19ERVNDCQlCSVQoMzEpCisjZGVmaW5lIEpaX0RNQV9TVEFUVVNfQ1RSTF9ERVNDX0lOVgkJQklUKDYpCisjZGVmaW5lIEpaX0RNQV9TVEFUVVNfQ1RSTF9BRERSX0VSUgkJQklUKDQpCisjZGVmaW5lIEpaX0RNQV9TVEFUVVNfQ1RSTF9UUkFOU0ZFUl9ET05FCUJJVCgzKQorI2RlZmluZSBKWl9ETUFfU1RBVFVTX0NUUkxfSEFMVAkJCUJJVCgyKQorI2RlZmluZSBKWl9ETUFfU1RBVFVTX0NUUkxfQ09VTlRfVEVSTUlOQVRFCUJJVCgxKQorI2RlZmluZSBKWl9ETUFfU1RBVFVTX0NUUkxfRU5BQkxFCQlCSVQoMCkKKworI2RlZmluZSBKWl9ETUFfQ01EX1NSQ19JTkMJCQlCSVQoMjMpCisjZGVmaW5lIEpaX0RNQV9DTURfRFNUX0lOQwkJCUJJVCgyMikKKyNkZWZpbmUgSlpfRE1BX0NNRF9SRElMX01BU0sJCQkoMHhmIDw8IDE2KQorI2RlZmluZSBKWl9ETUFfQ01EX1NSQ19XSURUSF9NQVNLCQkoMHgzIDw8IDE0KQorI2RlZmluZSBKWl9ETUFfQ01EX0RTVF9XSURUSF9NQVNLCQkoMHgzIDw8IDEyKQorI2RlZmluZSBKWl9ETUFfQ01EX0lOVEVSVkFMX0xFTkdUSF9NQVNLCQkoMHg3IDw8IDgpCisjZGVmaW5lIEpaX0RNQV9DTURfQkxPQ0tfTU9ERQkJCUJJVCg3KQorI2RlZmluZSBKWl9ETUFfQ01EX0RFU0NfVkFMSUQJCQlCSVQoNCkKKyNkZWZpbmUgSlpfRE1BX0NNRF9ERVNDX1ZBTElEX01PREUJCUJJVCgzKQorI2RlZmluZSBKWl9ETUFfQ01EX1ZBTElEX0lSUV9FTkFCTEUJCUJJVCgyKQorI2RlZmluZSBKWl9ETUFfQ01EX1RSQU5TRkVSX0lSUV9FTkFCTEUJCUJJVCgxKQorI2RlZmluZSBKWl9ETUFfQ01EX0xJTktfRU5BQkxFCQkJQklUKDApCisKKyNkZWZpbmUgSlpfRE1BX0NNRF9GTEFHU19PRkZTRVQgMjIKKyNkZWZpbmUgSlpfRE1BX0NNRF9SRElMX09GRlNFVCAxNgorI2RlZmluZSBKWl9ETUFfQ01EX1NSQ19XSURUSF9PRkZTRVQgMTQKKyNkZWZpbmUgSlpfRE1BX0NNRF9EU1RfV0lEVEhfT0ZGU0VUIDEyCisjZGVmaW5lIEpaX0RNQV9DTURfVFJBTlNGRVJfU0laRV9PRkZTRVQgOAorI2RlZmluZSBKWl9ETUFfQ01EX01PREVfT0ZGU0VUIDcKKworI2RlZmluZSBKWl9ETUFfQ1RSTF9QUklPUklUWV9NQVNLCSgweDMgPDwgOCkKKyNkZWZpbmUgSlpfRE1BX0NUUkxfSEFMVAkJQklUKDMpCisjZGVmaW5lIEpaX0RNQV9DVFJMX0FERFJFU1NfRVJST1IJQklUKDIpCisjZGVmaW5lIEpaX0RNQV9DVFJMX0VOQUJMRQkJQklUKDApCisKKworc3RhdGljIHZvaWQgX19pb21lbSAqano0NzQwX2RtYV9iYXNlOworc3RhdGljIHNwaW5sb2NrX3Qgano0NzQwX2RtYV9sb2NrOworCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGp6NDc0MF9kbWFfcmVhZChzaXplX3QgcmVnKQoreworCXJldHVybiByZWFkbChqejQ3NDBfZG1hX2Jhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgano0NzQwX2RtYV93cml0ZShzaXplX3QgcmVnLCB1aW50MzJfdCB2YWwpCit7CisJd3JpdGVsKHZhbCwgano0NzQwX2RtYV9iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGp6NDc0MF9kbWFfd3JpdGVfbWFzayhzaXplX3QgcmVnLCB1aW50MzJfdCB2YWwsIHVpbnQzMl90IG1hc2spCit7CisJdWludDMyX3QgdmFsMjsKKwl2YWwyID0gano0NzQwX2RtYV9yZWFkKHJlZyk7CisJdmFsMiAmPSB+bWFzazsKKwl2YWwyIHw9IHZhbDsKKwlqejQ3NDBfZG1hX3dyaXRlKHJlZywgdmFsMik7Cit9CisKK3N0cnVjdCBqejQ3NDBfZG1hX2NoYW4geworCXVuc2lnbmVkIGludCBpZDsKKwl2b2lkICpkZXY7CisJY29uc3QgY2hhciAqbmFtZTsKKworCWVudW0gano0NzQwX2RtYV9mbGFncyBmbGFnczsKKwl1aW50MzJfdCB0cmFuc2Zlcl9zaGlmdDsKKworCWp6NDc0MF9kbWFfY29tcGxldGVfY2FsbGJhY2tfdCBjb21wbGV0ZV9jYjsKKworCXVuc2lnbmVkIHVzZWQ6MTsKK307CisKKyNkZWZpbmUgSlo0NzQwX0RNQV9DSEFOTkVMKF9pZCkgeyAuaWQgPSBfaWQgfQorCitzdHJ1Y3Qgano0NzQwX2RtYV9jaGFuIGp6NDc0MF9kbWFfY2hhbm5lbHNbXSA9IHsKKwlKWjQ3NDBfRE1BX0NIQU5ORUwoMCksCisJSlo0NzQwX0RNQV9DSEFOTkVMKDEpLAorCUpaNDc0MF9ETUFfQ0hBTk5FTCgyKSwKKwlKWjQ3NDBfRE1BX0NIQU5ORUwoMyksCisJSlo0NzQwX0RNQV9DSEFOTkVMKDQpLAorCUpaNDc0MF9ETUFfQ0hBTk5FTCg1KSwKK307CisKK3N0cnVjdCBqejQ3NDBfZG1hX2NoYW4gKmp6NDc0MF9kbWFfcmVxdWVzdCh2b2lkICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IGp6NDc0MF9kbWFfY2hhbiAqZG1hID0gTlVMTDsKKworCXNwaW5fbG9jaygmano0NzQwX2RtYV9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGp6NDc0MF9kbWFfY2hhbm5lbHMpOyArK2kpIHsKKwkJaWYgKCFqejQ3NDBfZG1hX2NoYW5uZWxzW2ldLnVzZWQpIHsKKwkJCWRtYSA9ICZqejQ3NDBfZG1hX2NoYW5uZWxzW2ldOworCQkJZG1hLT51c2VkID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3Bpbl91bmxvY2soJmp6NDc0MF9kbWFfbG9jayk7CisKKwlpZiAoIWRtYSkKKwkJcmV0dXJuIE5VTEw7CisKKwlkbWEtPmRldiA9IGRldjsKKwlkbWEtPm5hbWUgPSBuYW1lOworCisJcmV0dXJuIGRtYTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGp6NDc0MF9kbWFfcmVxdWVzdCk7CisKK3ZvaWQgano0NzQwX2RtYV9jb25maWd1cmUoc3RydWN0IGp6NDc0MF9kbWFfY2hhbiAqZG1hLAorCWNvbnN0IHN0cnVjdCBqejQ3NDBfZG1hX2NvbmZpZyAqY29uZmlnKQoreworCXVpbnQzMl90IGNtZDsKKworCXN3aXRjaCAoY29uZmlnLT50cmFuc2Zlcl9zaXplKSB7CisJY2FzZSBKWjQ3NDBfRE1BX1RSQU5TRkVSX1NJWkVfMkJZVEU6CisJCWRtYS0+dHJhbnNmZXJfc2hpZnQgPSAxOworCQlicmVhazsKKwljYXNlIEpaNDc0MF9ETUFfVFJBTlNGRVJfU0laRV80QllURToKKwkJZG1hLT50cmFuc2Zlcl9zaGlmdCA9IDI7CisJCWJyZWFrOworCWNhc2UgSlo0NzQwX0RNQV9UUkFOU0ZFUl9TSVpFXzE2QllURToKKwkJZG1hLT50cmFuc2Zlcl9zaGlmdCA9IDQ7CisJCWJyZWFrOworCWNhc2UgSlo0NzQwX0RNQV9UUkFOU0ZFUl9TSVpFXzMyQllURToKKwkJZG1hLT50cmFuc2Zlcl9zaGlmdCA9IDU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRtYS0+dHJhbnNmZXJfc2hpZnQgPSAwOworCQlicmVhazsKKwl9CisKKwljbWQgPSBjb25maWctPmZsYWdzIDw8IEpaX0RNQV9DTURfRkxBR1NfT0ZGU0VUOworCWNtZCB8PSBjb25maWctPnNyY193aWR0aCA8PCBKWl9ETUFfQ01EX1NSQ19XSURUSF9PRkZTRVQ7CisJY21kIHw9IGNvbmZpZy0+ZHN0X3dpZHRoIDw8IEpaX0RNQV9DTURfRFNUX1dJRFRIX09GRlNFVDsKKwljbWQgfD0gY29uZmlnLT50cmFuc2Zlcl9zaXplIDw8IEpaX0RNQV9DTURfVFJBTlNGRVJfU0laRV9PRkZTRVQ7CisJY21kIHw9IGNvbmZpZy0+bW9kZSA8PCBKWl9ETUFfQ01EX01PREVfT0ZGU0VUOworCWNtZCB8PSBKWl9ETUFfQ01EX1RSQU5TRkVSX0lSUV9FTkFCTEU7CisKKwlqejQ3NDBfZG1hX3dyaXRlKEpaX1JFR19ETUFfQ01EKGRtYS0+aWQpLCBjbWQpOworCWp6NDc0MF9kbWFfd3JpdGUoSlpfUkVHX0RNQV9TVEFUVVNfQ1RSTChkbWEtPmlkKSwgMCk7CisJano0NzQwX2RtYV93cml0ZShKWl9SRUdfRE1BX1JFUV9UWVBFKGRtYS0+aWQpLCBjb25maWctPnJlcXVlc3RfdHlwZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChqejQ3NDBfZG1hX2NvbmZpZ3VyZSk7CisKK3ZvaWQgano0NzQwX2RtYV9zZXRfc3JjX2FkZHIoc3RydWN0IGp6NDc0MF9kbWFfY2hhbiAqZG1hLCBkbWFfYWRkcl90IHNyYykKK3sKKwlqejQ3NDBfZG1hX3dyaXRlKEpaX1JFR19ETUFfU1JDX0FERFIoZG1hLT5pZCksIHNyYyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChqejQ3NDBfZG1hX3NldF9zcmNfYWRkcik7CisKK3ZvaWQgano0NzQwX2RtYV9zZXRfZHN0X2FkZHIoc3RydWN0IGp6NDc0MF9kbWFfY2hhbiAqZG1hLCBkbWFfYWRkcl90IGRzdCkKK3sKKwlqejQ3NDBfZG1hX3dyaXRlKEpaX1JFR19ETUFfRFNUX0FERFIoZG1hLT5pZCksIGRzdCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChqejQ3NDBfZG1hX3NldF9kc3RfYWRkcik7CisKK3ZvaWQgano0NzQwX2RtYV9zZXRfdHJhbnNmZXJfY291bnQoc3RydWN0IGp6NDc0MF9kbWFfY2hhbiAqZG1hLCB1aW50MzJfdCBjb3VudCkKK3sKKwljb3VudCA+Pj0gZG1hLT50cmFuc2Zlcl9zaGlmdDsKKwlqejQ3NDBfZG1hX3dyaXRlKEpaX1JFR19ETUFfVFJBTlNGRVJfQ09VTlQoZG1hLT5pZCksIGNvdW50KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGp6NDc0MF9kbWFfc2V0X3RyYW5zZmVyX2NvdW50KTsKKwordm9pZCBqejQ3NDBfZG1hX3NldF9jb21wbGV0ZV9jYihzdHJ1Y3Qgano0NzQwX2RtYV9jaGFuICpkbWEsCisJano0NzQwX2RtYV9jb21wbGV0ZV9jYWxsYmFja190IGNiKQoreworCWRtYS0+Y29tcGxldGVfY2IgPSBjYjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGp6NDc0MF9kbWFfc2V0X2NvbXBsZXRlX2NiKTsKKwordm9pZCBqejQ3NDBfZG1hX2ZyZWUoc3RydWN0IGp6NDc0MF9kbWFfY2hhbiAqZG1hKQoreworCWRtYS0+ZGV2ID0gTlVMTDsKKwlkbWEtPmNvbXBsZXRlX2NiID0gTlVMTDsKKwlkbWEtPnVzZWQgPSAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoano0NzQwX2RtYV9mcmVlKTsKKwordm9pZCBqejQ3NDBfZG1hX2VuYWJsZShzdHJ1Y3Qgano0NzQwX2RtYV9jaGFuICpkbWEpCit7CisJano0NzQwX2RtYV93cml0ZV9tYXNrKEpaX1JFR19ETUFfU1RBVFVTX0NUUkwoZG1hLT5pZCksCisJCQlKWl9ETUFfU1RBVFVTX0NUUkxfTk9fREVTQyB8IEpaX0RNQV9TVEFUVVNfQ1RSTF9FTkFCTEUsCisJCQlKWl9ETUFfU1RBVFVTX0NUUkxfSEFMVCB8IEpaX0RNQV9TVEFUVVNfQ1RSTF9OT19ERVNDIHwKKwkJCUpaX0RNQV9TVEFUVVNfQ1RSTF9FTkFCTEUpOworCisJano0NzQwX2RtYV93cml0ZV9tYXNrKEpaX1JFR19ETUFfQ1RSTCwKKwkJCUpaX0RNQV9DVFJMX0VOQUJMRSwKKwkJCUpaX0RNQV9DVFJMX0hBTFQgfCBKWl9ETUFfQ1RSTF9FTkFCTEUpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoano0NzQwX2RtYV9lbmFibGUpOworCit2b2lkIGp6NDc0MF9kbWFfZGlzYWJsZShzdHJ1Y3Qgano0NzQwX2RtYV9jaGFuICpkbWEpCit7CisJano0NzQwX2RtYV93cml0ZV9tYXNrKEpaX1JFR19ETUFfU1RBVFVTX0NUUkwoZG1hLT5pZCksIDAsCisJCQlKWl9ETUFfU1RBVFVTX0NUUkxfRU5BQkxFKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGp6NDc0MF9kbWFfZGlzYWJsZSk7CisKK3VpbnQzMl90IGp6NDc0MF9kbWFfZ2V0X3Jlc2lkdWUoY29uc3Qgc3RydWN0IGp6NDc0MF9kbWFfY2hhbiAqZG1hKQoreworCXVpbnQzMl90IHJlc2lkdWU7CisJcmVzaWR1ZSA9IGp6NDc0MF9kbWFfcmVhZChKWl9SRUdfRE1BX1RSQU5TRkVSX0NPVU5UKGRtYS0+aWQpKTsKKwlyZXR1cm4gcmVzaWR1ZSA8PCBkbWEtPnRyYW5zZmVyX3NoaWZ0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoano0NzQwX2RtYV9nZXRfcmVzaWR1ZSk7CisKK3N0YXRpYyB2b2lkIGp6NDc0MF9kbWFfY2hhbl9pcnEoc3RydWN0IGp6NDc0MF9kbWFfY2hhbiAqZG1hKQoreworCXVpbnQzMl90IHN0YXR1czsKKworCXN0YXR1cyA9IGp6NDc0MF9kbWFfcmVhZChKWl9SRUdfRE1BX1NUQVRVU19DVFJMKGRtYS0+aWQpKTsKKworCWp6NDc0MF9kbWFfd3JpdGVfbWFzayhKWl9SRUdfRE1BX1NUQVRVU19DVFJMKGRtYS0+aWQpLCAwLAorCQlKWl9ETUFfU1RBVFVTX0NUUkxfRU5BQkxFIHwgSlpfRE1BX1NUQVRVU19DVFJMX1RSQU5TRkVSX0RPTkUpOworCisJaWYgKGRtYS0+Y29tcGxldGVfY2IpCisJCWRtYS0+Y29tcGxldGVfY2IoZG1hLCAwLCBkbWEtPmRldik7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBqejQ3NDBfZG1hX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJdWludDMyX3QgaXJxX3N0YXR1czsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlycV9zdGF0dXMgPSByZWFkbChqejQ3NDBfZG1hX2Jhc2UgKyBKWl9SRUdfRE1BX0lSUSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNjsgKytpKSB7CisJCWlmIChpcnFfc3RhdHVzICYgKDEgPDwgaSkpCisJCQlqejQ3NDBfZG1hX2NoYW5faXJxKCZqejQ3NDBfZG1hX2NoYW5uZWxzW2ldKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgano0NzQwX2RtYV9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHJldDsKKworCWp6NDc0MF9kbWFfYmFzZSA9IGlvcmVtYXAoSlo0NzQwX0RNQUNfQkFTRV9BRERSLCAweDQwMCk7CisKKwlpZiAoIWp6NDc0MF9kbWFfYmFzZSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXNwaW5fbG9ja19pbml0KCZqejQ3NDBfZG1hX2xvY2spOworCisJcmV0ID0gcmVxdWVzdF9pcnEoSlo0NzQwX0lSUV9ETUFDLCBqejQ3NDBfZG1hX2lycSwgMCwgIkRNQSIsIE5VTEwpOworCisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICJKWjQ3NDAgRE1BOiBGYWlsZWQgdG8gcmVxdWVzdCBpcnE6ICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KK2FyY2hfaW5pdGNhbGwoano0NzQwX2RtYV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qejQ3NDAvZ3Bpby5jIGIvYXJjaC9taXBzL2p6NDc0MC9ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhmNjBmMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9qejQ3NDAvZ3Bpby5jCkBAIC0wLDAgKzEsNjA0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOS0yMDEwLCBMYXJzLVBldGVyIENsYXVzZW4gPGxhcnNAbWV0YWZvby5kZT4KKyAqICBKWjQ3NDAgcGxhdGZvcm0gR1BJTyBzdXBwb3J0CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtano0NzQwL2Jhc2UuaD4KKworI2RlZmluZSBKWjQ3NDBfR1BJT19CQVNFX0EgKDMyKjApCisjZGVmaW5lIEpaNDc0MF9HUElPX0JBU0VfQiAoMzIqMSkKKyNkZWZpbmUgSlo0NzQwX0dQSU9fQkFTRV9DICgzMioyKQorI2RlZmluZSBKWjQ3NDBfR1BJT19CQVNFX0QgKDMyKjMpCisKKyNkZWZpbmUgSlo0NzQwX0dQSU9fTlVNX0EgMzIKKyNkZWZpbmUgSlo0NzQwX0dQSU9fTlVNX0IgMzIKKyNkZWZpbmUgSlo0NzQwX0dQSU9fTlVNX0MgMzEKKyNkZWZpbmUgSlo0NzQwX0dQSU9fTlVNX0QgMzIKKworI2RlZmluZSBKWjQ3NDBfSVJRX0dQSU9fQkFTRV9BIChKWjQ3NDBfSVJRX0dQSU8oMCkgKyBKWjQ3NDBfR1BJT19CQVNFX0EpCisjZGVmaW5lIEpaNDc0MF9JUlFfR1BJT19CQVNFX0IgKEpaNDc0MF9JUlFfR1BJTygwKSArIEpaNDc0MF9HUElPX0JBU0VfQikKKyNkZWZpbmUgSlo0NzQwX0lSUV9HUElPX0JBU0VfQyAoSlo0NzQwX0lSUV9HUElPKDApICsgSlo0NzQwX0dQSU9fQkFTRV9DKQorI2RlZmluZSBKWjQ3NDBfSVJRX0dQSU9fQkFTRV9EIChKWjQ3NDBfSVJRX0dQSU8oMCkgKyBKWjQ3NDBfR1BJT19CQVNFX0QpCisKKyNkZWZpbmUgSlpfUkVHX0dQSU9fUElOCQkJMHgwMAorI2RlZmluZSBKWl9SRUdfR1BJT19EQVRBCQkweDEwCisjZGVmaW5lIEpaX1JFR19HUElPX0RBVEFfU0VUCQkweDE0CisjZGVmaW5lIEpaX1JFR19HUElPX0RBVEFfQ0xFQVIJCTB4MTgKKyNkZWZpbmUgSlpfUkVHX0dQSU9fTUFTSwkJMHgyMAorI2RlZmluZSBKWl9SRUdfR1BJT19NQVNLX1NFVAkJMHgyNAorI2RlZmluZSBKWl9SRUdfR1BJT19NQVNLX0NMRUFSCQkweDI4CisjZGVmaW5lIEpaX1JFR19HUElPX1BVTEwJCTB4MzAKKyNkZWZpbmUgSlpfUkVHX0dQSU9fUFVMTF9TRVQJCTB4MzQKKyNkZWZpbmUgSlpfUkVHX0dQSU9fUFVMTF9DTEVBUgkJMHgzOAorI2RlZmluZSBKWl9SRUdfR1BJT19GVU5DCQkweDQwCisjZGVmaW5lIEpaX1JFR19HUElPX0ZVTkNfU0VUCQkweDQ0CisjZGVmaW5lIEpaX1JFR19HUElPX0ZVTkNfQ0xFQVIJCTB4NDgKKyNkZWZpbmUgSlpfUkVHX0dQSU9fU0VMRUNUCQkweDUwCisjZGVmaW5lIEpaX1JFR19HUElPX1NFTEVDVF9TRVQJCTB4NTQKKyNkZWZpbmUgSlpfUkVHX0dQSU9fU0VMRUNUX0NMRUFSCTB4NTgKKyNkZWZpbmUgSlpfUkVHX0dQSU9fRElSRUNUSU9OCQkweDYwCisjZGVmaW5lIEpaX1JFR19HUElPX0RJUkVDVElPTl9TRVQJMHg2NAorI2RlZmluZSBKWl9SRUdfR1BJT19ESVJFQ1RJT05fQ0xFQVIJMHg2OAorI2RlZmluZSBKWl9SRUdfR1BJT19UUklHR0VSCQkweDcwCisjZGVmaW5lIEpaX1JFR19HUElPX1RSSUdHRVJfU0VUCQkweDc0CisjZGVmaW5lIEpaX1JFR19HUElPX1RSSUdHRVJfQ0xFQVIJMHg3OAorI2RlZmluZSBKWl9SRUdfR1BJT19GTEFHCQkweDgwCisjZGVmaW5lIEpaX1JFR19HUElPX0ZMQUdfQ0xFQVIJCTB4MTQKKworI2RlZmluZSBHUElPX1RPX0JJVChncGlvKSBCSVQoZ3BpbyAmIDB4MWYpCisjZGVmaW5lIEdQSU9fVE9fUkVHKGdwaW8sIHJlZykgKGdwaW9fdG9fanpfZ3Bpb19jaGlwKGdwaW8pLT5iYXNlICsgKHJlZykpCisjZGVmaW5lIENISVBfVE9fUkVHKGNoaXAsIHJlZykgKGdwaW9fY2hpcF90b19qel9ncGlvX2NoaXAoY2hpcCktPmJhc2UgKyAocmVnKSkKKworc3RydWN0IGp6X2dwaW9fY2hpcCB7CisJdW5zaWduZWQgaW50IGlycTsKKwl1bnNpZ25lZCBpbnQgaXJxX2Jhc2U7CisJdWludDMyX3Qgd2FrZXVwOworCXVpbnQzMl90IHN1c3BlbmRfbWFzazsKKwl1aW50MzJfdCBlZGdlX3RyaWdnZXJfYm90aDsKKworCXZvaWQgX19pb21lbSAqYmFzZTsKKworCXNwaW5sb2NrX3QgbG9jazsKKworCXN0cnVjdCBncGlvX2NoaXAgZ3Bpb19jaGlwOworCXN0cnVjdCBpcnFfY2hpcCBpcnFfY2hpcDsKKwlzdHJ1Y3Qgc3lzX2RldmljZSBzeXNkZXY7Cit9OworCitzdGF0aWMgc3RydWN0IGp6X2dwaW9fY2hpcCBqejQ3NDBfZ3Bpb19jaGlwc1tdOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBqel9ncGlvX2NoaXAgKmdwaW9fdG9fanpfZ3Bpb19jaGlwKHVuc2lnbmVkIGludCBncGlvKQoreworCXJldHVybiAmano0NzQwX2dwaW9fY2hpcHNbZ3BpbyA+PiA1XTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QganpfZ3Bpb19jaGlwICpncGlvX2NoaXBfdG9fanpfZ3Bpb19jaGlwKHN0cnVjdCBncGlvX2NoaXAgKmdwaW9fY2hpcCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGdwaW9fY2hpcCwgc3RydWN0IGp6X2dwaW9fY2hpcCwgZ3Bpb19jaGlwKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QganpfZ3Bpb19jaGlwICppcnFfdG9fanpfZ3Bpb19jaGlwKHVuc2lnbmVkIGludCBpcnEpCit7CisJcmV0dXJuIGdldF9pcnFfY2hpcF9kYXRhKGlycSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBqel9ncGlvX3dyaXRlX2JpdCh1bnNpZ25lZCBpbnQgZ3BpbywgdW5zaWduZWQgaW50IHJlZykKK3sKKwl3cml0ZWwoR1BJT19UT19CSVQoZ3BpbyksIEdQSU9fVE9fUkVHKGdwaW8sIHJlZykpOworfQorCitpbnQganpfZ3Bpb19zZXRfZnVuY3Rpb24oaW50IGdwaW8sIGVudW0ganpfZ3Bpb19mdW5jdGlvbiBmdW5jdGlvbikKK3sKKwlpZiAoZnVuY3Rpb24gPT0gSlpfR1BJT19GVU5DX05PTkUpIHsKKwkJanpfZ3Bpb193cml0ZV9iaXQoZ3BpbywgSlpfUkVHX0dQSU9fRlVOQ19DTEVBUik7CisJCWp6X2dwaW9fd3JpdGVfYml0KGdwaW8sIEpaX1JFR19HUElPX1NFTEVDVF9DTEVBUik7CisJCWp6X2dwaW9fd3JpdGVfYml0KGdwaW8sIEpaX1JFR19HUElPX1RSSUdHRVJfQ0xFQVIpOworCX0gZWxzZSB7CisJCWp6X2dwaW9fd3JpdGVfYml0KGdwaW8sIEpaX1JFR19HUElPX0ZVTkNfU0VUKTsKKwkJanpfZ3Bpb193cml0ZV9iaXQoZ3BpbywgSlpfUkVHX0dQSU9fVFJJR0dFUl9DTEVBUik7CisJCXN3aXRjaCAoZnVuY3Rpb24pIHsKKwkJY2FzZSBKWl9HUElPX0ZVTkMxOgorCQkJanpfZ3Bpb193cml0ZV9iaXQoZ3BpbywgSlpfUkVHX0dQSU9fU0VMRUNUX0NMRUFSKTsKKwkJCWJyZWFrOworCQljYXNlIEpaX0dQSU9fRlVOQzM6CisJCQlqel9ncGlvX3dyaXRlX2JpdChncGlvLCBKWl9SRUdfR1BJT19UUklHR0VSX1NFVCk7CisJCWNhc2UgSlpfR1BJT19GVU5DMjogLyogRmFsbHRyb3VnaCAqLworCQkJanpfZ3Bpb193cml0ZV9iaXQoZ3BpbywgSlpfUkVHX0dQSU9fU0VMRUNUX1NFVCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGp6X2dwaW9fc2V0X2Z1bmN0aW9uKTsKKworaW50IGp6X2dwaW9fYnVsa19yZXF1ZXN0KGNvbnN0IHN0cnVjdCBqel9ncGlvX2J1bGtfcmVxdWVzdCAqcmVxdWVzdCwgc2l6ZV90IG51bSkKK3sKKwlzaXplX3QgaTsKKwlpbnQgcmV0OworCisJZm9yIChpID0gMDsgaSA8IG51bTsgKytpLCArK3JlcXVlc3QpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KHJlcXVlc3QtPmdwaW8sIHJlcXVlc3QtPm5hbWUpOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisJCWp6X2dwaW9fc2V0X2Z1bmN0aW9uKHJlcXVlc3QtPmdwaW8sIHJlcXVlc3QtPmZ1bmN0aW9uKTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyOgorCWZvciAoLS1yZXF1ZXN0OyBpID4gMDsgLS1pLCAtLXJlcXVlc3QpIHsKKwkJZ3Bpb19mcmVlKHJlcXVlc3QtPmdwaW8pOworCQlqel9ncGlvX3NldF9mdW5jdGlvbihyZXF1ZXN0LT5ncGlvLCBKWl9HUElPX0ZVTkNfTk9ORSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGp6X2dwaW9fYnVsa19yZXF1ZXN0KTsKKwordm9pZCBqel9ncGlvX2J1bGtfZnJlZShjb25zdCBzdHJ1Y3QganpfZ3Bpb19idWxrX3JlcXVlc3QgKnJlcXVlc3QsIHNpemVfdCBudW0pCit7CisJc2l6ZV90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyArK2ksICsrcmVxdWVzdCkgeworCQlncGlvX2ZyZWUocmVxdWVzdC0+Z3Bpbyk7CisJCWp6X2dwaW9fc2V0X2Z1bmN0aW9uKHJlcXVlc3QtPmdwaW8sIEpaX0dQSU9fRlVOQ19OT05FKTsKKwl9CisKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGp6X2dwaW9fYnVsa19mcmVlKTsKKwordm9pZCBqel9ncGlvX2J1bGtfc3VzcGVuZChjb25zdCBzdHJ1Y3QganpfZ3Bpb19idWxrX3JlcXVlc3QgKnJlcXVlc3QsIHNpemVfdCBudW0pCit7CisJc2l6ZV90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyArK2ksICsrcmVxdWVzdCkgeworCQlqel9ncGlvX3NldF9mdW5jdGlvbihyZXF1ZXN0LT5ncGlvLCBKWl9HUElPX0ZVTkNfTk9ORSk7CisJCWp6X2dwaW9fd3JpdGVfYml0KHJlcXVlc3QtPmdwaW8sIEpaX1JFR19HUElPX0RJUkVDVElPTl9DTEVBUik7CisJCWp6X2dwaW9fd3JpdGVfYml0KHJlcXVlc3QtPmdwaW8sIEpaX1JFR19HUElPX1BVTExfU0VUKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChqel9ncGlvX2J1bGtfc3VzcGVuZCk7CisKK3ZvaWQganpfZ3Bpb19idWxrX3Jlc3VtZShjb25zdCBzdHJ1Y3QganpfZ3Bpb19idWxrX3JlcXVlc3QgKnJlcXVlc3QsIHNpemVfdCBudW0pCit7CisJc2l6ZV90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyArK2ksICsrcmVxdWVzdCkKKwkJanpfZ3Bpb19zZXRfZnVuY3Rpb24ocmVxdWVzdC0+Z3BpbywgcmVxdWVzdC0+ZnVuY3Rpb24pOworfQorRVhQT1JUX1NZTUJPTF9HUEwoanpfZ3Bpb19idWxrX3Jlc3VtZSk7CisKK3ZvaWQganpfZ3Bpb19lbmFibGVfcHVsbHVwKHVuc2lnbmVkIGdwaW8pCit7CisJanpfZ3Bpb193cml0ZV9iaXQoZ3BpbywgSlpfUkVHX0dQSU9fUFVMTF9DTEVBUik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChqel9ncGlvX2VuYWJsZV9wdWxsdXApOworCit2b2lkIGp6X2dwaW9fZGlzYWJsZV9wdWxsdXAodW5zaWduZWQgZ3BpbykKK3sKKwlqel9ncGlvX3dyaXRlX2JpdChncGlvLCBKWl9SRUdfR1BJT19QVUxMX1NFVCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChqel9ncGlvX2Rpc2FibGVfcHVsbHVwKTsKKworc3RhdGljIGludCBqel9ncGlvX2dldF92YWx1ZShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBncGlvKQoreworCXJldHVybiAhIShyZWFkbChDSElQX1RPX1JFRyhjaGlwLCBKWl9SRUdfR1BJT19QSU4pKSAmIEJJVChncGlvKSk7Cit9CisKK3N0YXRpYyB2b2lkIGp6X2dwaW9fc2V0X3ZhbHVlKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3sKKwl1aW50MzJfdCBfX2lvbWVtICpyZWcgPSBDSElQX1RPX1JFRyhjaGlwLCBKWl9SRUdfR1BJT19EQVRBX1NFVCk7CisJcmVnICs9ICF2YWx1ZTsKKwl3cml0ZWwoQklUKGdwaW8pLCByZWcpOworfQorCitzdGF0aWMgaW50IGp6X2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBncGlvLAorCWludCB2YWx1ZSkKK3sKKwl3cml0ZWwoQklUKGdwaW8pLCBDSElQX1RPX1JFRyhjaGlwLCBKWl9SRUdfR1BJT19ESVJFQ1RJT05fU0VUKSk7CisJanpfZ3Bpb19zZXRfdmFsdWUoY2hpcCwgZ3BpbywgdmFsdWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQganpfZ3Bpb19kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgZ3BpbykKK3sKKwl3cml0ZWwoQklUKGdwaW8pLCBDSElQX1RPX1JFRyhjaGlwLCBKWl9SRUdfR1BJT19ESVJFQ1RJT05fQ0xFQVIpKTsKKworCXJldHVybiAwOworfQorCitpbnQganpfZ3Bpb19wb3J0X2RpcmVjdGlvbl9pbnB1dChpbnQgcG9ydCwgdWludDMyX3QgbWFzaykKK3sKKwl3cml0ZWwobWFzaywgR1BJT19UT19SRUcocG9ydCwgSlpfUkVHX0dQSU9fRElSRUNUSU9OX0NMRUFSKSk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woanpfZ3Bpb19wb3J0X2RpcmVjdGlvbl9pbnB1dCk7CisKK2ludCBqel9ncGlvX3BvcnRfZGlyZWN0aW9uX291dHB1dChpbnQgcG9ydCwgdWludDMyX3QgbWFzaykKK3sKKwl3cml0ZWwobWFzaywgR1BJT19UT19SRUcocG9ydCwgSlpfUkVHX0dQSU9fRElSRUNUSU9OX1NFVCkpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGp6X2dwaW9fcG9ydF9kaXJlY3Rpb25fb3V0cHV0KTsKKwordm9pZCBqel9ncGlvX3BvcnRfc2V0X3ZhbHVlKGludCBwb3J0LCB1aW50MzJfdCB2YWx1ZSwgdWludDMyX3QgbWFzaykKK3sKKwl3cml0ZWwofnZhbHVlICYgbWFzaywgR1BJT19UT19SRUcocG9ydCwgSlpfUkVHX0dQSU9fREFUQV9DTEVBUikpOworCXdyaXRlbCh2YWx1ZSAmIG1hc2ssIEdQSU9fVE9fUkVHKHBvcnQsIEpaX1JFR19HUElPX0RBVEFfU0VUKSk7Cit9CitFWFBPUlRfU1lNQk9MKGp6X2dwaW9fcG9ydF9zZXRfdmFsdWUpOworCit1aW50MzJfdCBqel9ncGlvX3BvcnRfZ2V0X3ZhbHVlKGludCBwb3J0LCB1aW50MzJfdCBtYXNrKQoreworCXVpbnQzMl90IHZhbHVlID0gcmVhZGwoR1BJT19UT19SRUcocG9ydCwgSlpfUkVHX0dQSU9fUElOKSk7CisKKwlyZXR1cm4gdmFsdWUgJiBtYXNrOworfQorRVhQT1JUX1NZTUJPTChqel9ncGlvX3BvcnRfZ2V0X3ZhbHVlKTsKKworaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCit7CisJcmV0dXJuIEpaNDc0MF9JUlFfR1BJTygwKSArIGdwaW87Cit9CitFWFBPUlRfU1lNQk9MX0dQTChncGlvX3RvX2lycSk7CisKK2ludCBpcnFfdG9fZ3Bpbyh1bnNpZ25lZCBpcnEpCit7CisJcmV0dXJuIGlycSAtIEpaNDc0MF9JUlFfR1BJTygwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlycV90b19ncGlvKTsKKworI2RlZmluZSBJUlFfVE9fQklUKGlycSkgQklUKGlycV90b19ncGlvKGlycSkgJiAweDFmKQorCitzdGF0aWMgdm9pZCBqel9ncGlvX2NoZWNrX3RyaWdnZXJfYm90aChzdHJ1Y3QganpfZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgaXJxKQoreworCXVpbnQzMl90IHZhbHVlOworCXZvaWQgX19pb21lbSAqcmVnOworCXVpbnQzMl90IG1hc2sgPSBJUlFfVE9fQklUKGlycSk7CisKKwlpZiAoIShjaGlwLT5lZGdlX3RyaWdnZXJfYm90aCAmIG1hc2spKQorCQlyZXR1cm47CisKKwlyZWcgPSBjaGlwLT5iYXNlOworCisJdmFsdWUgPSByZWFkbChjaGlwLT5iYXNlICsgSlpfUkVHX0dQSU9fUElOKTsKKwlpZiAodmFsdWUgJiBtYXNrKQorCQlyZWcgKz0gSlpfUkVHX0dQSU9fRElSRUNUSU9OX0NMRUFSOworCWVsc2UKKwkJcmVnICs9IEpaX1JFR19HUElPX0RJUkVDVElPTl9TRVQ7CisKKwl3cml0ZWwobWFzaywgcmVnKTsKK30KKworc3RhdGljIHZvaWQganpfZ3Bpb19pcnFfZGVtdXhfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJdWludDMyX3QgZmxhZzsKKwl1bnNpZ25lZCBpbnQgZ3Bpb19pcnE7CisJdW5zaWduZWQgaW50IGdwaW9fYmFuazsKKwlzdHJ1Y3QganpfZ3Bpb19jaGlwICpjaGlwID0gZ2V0X2lycV9kZXNjX2RhdGEoZGVzYyk7CisKKwlncGlvX2JhbmsgPSBKWjQ3NDBfSVJRX0dQSU8wIC0gaXJxOworCisJZmxhZyA9IHJlYWRsKGNoaXAtPmJhc2UgKyBKWl9SRUdfR1BJT19GTEFHKTsKKworCWlmICghZmxhZykKKwkJcmV0dXJuOworCisJZ3Bpb19pcnEgPSBfX2ZscyhmbGFnKTsKKworCWp6X2dwaW9fY2hlY2tfdHJpZ2dlcl9ib3RoKGNoaXAsIGlycSk7CisKKwlncGlvX2lycSArPSAoZ3Bpb19iYW5rIDw8IDUpICsgSlo0NzQwX0lSUV9HUElPKDApOworCisJZ2VuZXJpY19oYW5kbGVfaXJxKGdwaW9faXJxKTsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBqel9ncGlvX3NldF9pcnFfYml0KHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCByZWcpCit7CisJc3RydWN0IGp6X2dwaW9fY2hpcCAqY2hpcCA9IGlycV90b19qel9ncGlvX2NoaXAoaXJxKTsKKwl3cml0ZWwoSVJRX1RPX0JJVChpcnEpLCBjaGlwLT5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIHZvaWQganpfZ3Bpb19pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCWp6X2dwaW9fc2V0X2lycV9iaXQoaXJxLCBKWl9SRUdfR1BJT19NQVNLX1NFVCk7Cit9OworCitzdGF0aWMgdm9pZCBqel9ncGlvX2lycV91bm1hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QganpfZ3Bpb19jaGlwICpjaGlwID0gaXJxX3RvX2p6X2dwaW9fY2hpcChpcnEpOworCisJanpfZ3Bpb19jaGVja190cmlnZ2VyX2JvdGgoY2hpcCwgaXJxKTsKKworCWp6X2dwaW9fc2V0X2lycV9iaXQoaXJxLCBKWl9SRUdfR1BJT19NQVNLX0NMRUFSKTsKK307CisKKy8qIFRPRE86IENoZWNrIGlmIGZ1bmN0aW9uIGlzIGdwaW8gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQganpfZ3Bpb19pcnFfc3RhcnR1cCh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisKKwlqel9ncGlvX3NldF9pcnFfYml0KGlycSwgSlpfUkVHX0dQSU9fU0VMRUNUX1NFVCk7CisKKwlkZXNjLT5zdGF0dXMgJj0gfklSUV9NQVNLRUQ7CisJanpfZ3Bpb19pcnFfdW5tYXNrKGlycSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQganpfZ3Bpb19pcnFfc2h1dGRvd24odW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCisJanpfZ3Bpb19pcnFfbWFzayhpcnEpOworCWRlc2MtPnN0YXR1cyB8PSBJUlFfTUFTS0VEOworCisJLyogU2V0IGRpcmVjdGlvbiB0byBpbnB1dCAqLworCWp6X2dwaW9fc2V0X2lycV9iaXQoaXJxLCBKWl9SRUdfR1BJT19ESVJFQ1RJT05fQ0xFQVIpOworCWp6X2dwaW9fc2V0X2lycV9iaXQoaXJxLCBKWl9SRUdfR1BJT19TRUxFQ1RfQ0xFQVIpOworfQorCitzdGF0aWMgdm9pZCBqel9ncGlvX2lycV9hY2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlqel9ncGlvX3NldF9pcnFfYml0KGlycSwgSlpfUkVHX0dQSU9fRkxBR19DTEVBUik7Cit9OworCitzdGF0aWMgaW50IGp6X2dwaW9faXJxX3NldF90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpCit7CisJc3RydWN0IGp6X2dwaW9fY2hpcCAqY2hpcCA9IGlycV90b19qel9ncGlvX2NoaXAoaXJxKTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCisJanpfZ3Bpb19pcnFfbWFzayhpcnEpOworCisJaWYgKGZsb3dfdHlwZSA9PSBJUlFfVFlQRV9FREdFX0JPVEgpIHsKKwkJdWludDMyX3QgdmFsdWUgPSByZWFkbChjaGlwLT5iYXNlICsgSlpfUkVHX0dQSU9fUElOKTsKKwkJaWYgKHZhbHVlICYgSVJRX1RPX0JJVChpcnEpKQorCQkJZmxvd190eXBlID0gSVJRX1RZUEVfRURHRV9GQUxMSU5HOworCQllbHNlCisJCQlmbG93X3R5cGUgPSBJUlFfVFlQRV9FREdFX1JJU0lORzsKKwkJY2hpcC0+ZWRnZV90cmlnZ2VyX2JvdGggfD0gSVJRX1RPX0JJVChpcnEpOworCX0gZWxzZSB7CisJCWNoaXAtPmVkZ2VfdHJpZ2dlcl9ib3RoICY9IH5JUlFfVE9fQklUKGlycSk7CisJfQorCisJc3dpdGNoIChmbG93X3R5cGUpIHsKKwljYXNlIElSUV9UWVBFX0VER0VfUklTSU5HOgorCQlqel9ncGlvX3NldF9pcnFfYml0KGlycSwgSlpfUkVHX0dQSU9fRElSRUNUSU9OX1NFVCk7CisJCWp6X2dwaW9fc2V0X2lycV9iaXQoaXJxLCBKWl9SRUdfR1BJT19UUklHR0VSX1NFVCk7CisJCWJyZWFrOworCWNhc2UgSVJRX1RZUEVfRURHRV9GQUxMSU5HOgorCQlqel9ncGlvX3NldF9pcnFfYml0KGlycSwgSlpfUkVHX0dQSU9fRElSRUNUSU9OX0NMRUFSKTsKKwkJanpfZ3Bpb19zZXRfaXJxX2JpdChpcnEsIEpaX1JFR19HUElPX1RSSUdHRVJfU0VUKTsKKwkJYnJlYWs7CisJY2FzZSBJUlFfVFlQRV9MRVZFTF9ISUdIOgorCQlqel9ncGlvX3NldF9pcnFfYml0KGlycSwgSlpfUkVHX0dQSU9fRElSRUNUSU9OX1NFVCk7CisJCWp6X2dwaW9fc2V0X2lycV9iaXQoaXJxLCBKWl9SRUdfR1BJT19UUklHR0VSX0NMRUFSKTsKKwkJYnJlYWs7CisJY2FzZSBJUlFfVFlQRV9MRVZFTF9MT1c6CisJCWp6X2dwaW9fc2V0X2lycV9iaXQoaXJxLCBKWl9SRUdfR1BJT19ESVJFQ1RJT05fQ0xFQVIpOworCQlqel9ncGlvX3NldF9pcnFfYml0KGlycSwgSlpfUkVHX0dQSU9fVFJJR0dFUl9DTEVBUik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghKGRlc2MtPnN0YXR1cyAmIElSUV9NQVNLRUQpKQorCQlqel9ncGlvX2lycV91bm1hc2soaXJxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGp6X2dwaW9faXJxX3NldF93YWtlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBvbikKK3sKKwlzdHJ1Y3QganpfZ3Bpb19jaGlwICpjaGlwID0gaXJxX3RvX2p6X2dwaW9fY2hpcChpcnEpOworCXNwaW5fbG9jaygmY2hpcC0+bG9jayk7CisJaWYgKG9uKQorCQljaGlwLT53YWtldXAgfD0gSVJRX1RPX0JJVChpcnEpOworCWVsc2UKKwkJY2hpcC0+d2FrZXVwICY9IH5JUlFfVE9fQklUKGlycSk7CisJc3Bpbl91bmxvY2soJmNoaXAtPmxvY2spOworCisJc2V0X2lycV93YWtlKGNoaXAtPmlycSwgb24pOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBsb2NrIGNsYXNzIHRlbGxzIGxvY2tkZXAgdGhhdCBHUElPIGlycXMgYXJlIGluIGEgZGlmZmVyZW50CisgKiBjYXRlZ29yeSB0aGFuIHRoZWlyIHBhcmVudHMsIHNvIGl0IHdvbid0IHJlcG9ydCBmYWxzZSByZWN1cnNpb24uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgZ3Bpb19sb2NrX2NsYXNzOworCisjZGVmaW5lIEpaNDc0MF9HUElPX0NISVAoX2JhbmspIHsgXAorCS5pcnFfYmFzZSA9IEpaNDc0MF9JUlFfR1BJT19CQVNFXyAjIyBfYmFuaywgXAorCS5ncGlvX2NoaXAgPSB7IFwKKwkJLmxhYmVsID0gIkJhbmsgIiAjIF9iYW5rLCBcCisJCS5vd25lciA9IFRISVNfTU9EVUxFLCBcCisJCS5zZXQgPSBqel9ncGlvX3NldF92YWx1ZSwgXAorCQkuZ2V0ID0ganpfZ3Bpb19nZXRfdmFsdWUsIFwKKwkJLmRpcmVjdGlvbl9vdXRwdXQgPSBqel9ncGlvX2RpcmVjdGlvbl9vdXRwdXQsIFwKKwkJLmRpcmVjdGlvbl9pbnB1dCA9IGp6X2dwaW9fZGlyZWN0aW9uX2lucHV0LCBcCisJCS5iYXNlID0gSlo0NzQwX0dQSU9fQkFTRV8gIyMgX2JhbmssIFwKKwkJLm5ncGlvID0gSlo0NzQwX0dQSU9fTlVNXyAjIyBfYmFuaywgXAorCX0sIFwKKwkuaXJxX2NoaXAgPSAgeyBcCisJCS5uYW1lID0gIkdQSU8gQmFuayAiICMgX2JhbmssIFwKKwkJLm1hc2sgPSBqel9ncGlvX2lycV9tYXNrLCBcCisJCS51bm1hc2sgPSBqel9ncGlvX2lycV91bm1hc2ssIFwKKwkJLmFjayA9IGp6X2dwaW9faXJxX2FjaywgXAorCQkuc3RhcnR1cCA9IGp6X2dwaW9faXJxX3N0YXJ0dXAsIFwKKwkJLnNodXRkb3duID0ganpfZ3Bpb19pcnFfc2h1dGRvd24sIFwKKwkJLnNldF90eXBlID0ganpfZ3Bpb19pcnFfc2V0X3R5cGUsIFwKKwkJLnNldF93YWtlID0ganpfZ3Bpb19pcnFfc2V0X3dha2UsIFwKKwl9LCBcCit9CisKK3N0YXRpYyBzdHJ1Y3QganpfZ3Bpb19jaGlwIGp6NDc0MF9ncGlvX2NoaXBzW10gPSB7CisJSlo0NzQwX0dQSU9fQ0hJUChBKSwKKwlKWjQ3NDBfR1BJT19DSElQKEIpLAorCUpaNDc0MF9HUElPX0NISVAoQyksCisJSlo0NzQwX0dQSU9fQ0hJUChEKSwKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGp6X2dwaW9fY2hpcCAqc3lzZGV2X3RvX2NoaXAoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGp6X2dwaW9fY2hpcCwgc3lzZGV2KTsKK30KKworc3RhdGljIGludCBqejQ3NDBfZ3Bpb19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QganpfZ3Bpb19jaGlwICpjaGlwID0gc3lzZGV2X3RvX2NoaXAoZGV2KTsKKworCWNoaXAtPnN1c3BlbmRfbWFzayA9IHJlYWRsKGNoaXAtPmJhc2UgKyBKWl9SRUdfR1BJT19NQVNLKTsKKwl3cml0ZWwofihjaGlwLT53YWtldXApLCBjaGlwLT5iYXNlICsgSlpfUkVHX0dQSU9fTUFTS19TRVQpOworCXdyaXRlbChjaGlwLT53YWtldXAsIGNoaXAtPmJhc2UgKyBKWl9SRUdfR1BJT19NQVNLX0NMRUFSKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGp6NDc0MF9ncGlvX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBqel9ncGlvX2NoaXAgKmNoaXAgPSBzeXNkZXZfdG9fY2hpcChkZXYpOworCXVpbnQzMl90IG1hc2sgPSBjaGlwLT5zdXNwZW5kX21hc2s7CisKKwl3cml0ZWwofm1hc2ssIGNoaXAtPmJhc2UgKyBKWl9SRUdfR1BJT19NQVNLX0NMRUFSKTsKKwl3cml0ZWwobWFzaywgY2hpcC0+YmFzZSArIEpaX1JFR19HUElPX01BU0tfU0VUKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBqejQ3NDBfZ3Bpb19zeXNkZXZfY2xhc3MgPSB7CisJLm5hbWUgPSAiZ3BpbyIsCisJLnN1c3BlbmQgPSBqejQ3NDBfZ3Bpb19zdXNwZW5kLAorCS5yZXN1bWUgPSBqejQ3NDBfZ3Bpb19yZXN1bWUsCit9OworCitzdGF0aWMgaW50IGp6NDc0MF9ncGlvX2NoaXBfaW5pdChzdHJ1Y3QganpfZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgaWQpCit7CisJaW50IHJldCwgaXJxOworCisJY2hpcC0+c3lzZGV2LmlkID0gaWQ7CisJY2hpcC0+c3lzZGV2LmNscyA9ICZqejQ3NDBfZ3Bpb19zeXNkZXZfY2xhc3M7CisJcmV0ID0gc3lzZGV2X3JlZ2lzdGVyKCZjaGlwLT5zeXNkZXYpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNwaW5fbG9ja19pbml0KCZjaGlwLT5sb2NrKTsKKworCWNoaXAtPmJhc2UgPSBpb3JlbWFwKEpaNDc0MF9HUElPX0JBU0VfQUREUiArIChpZCAqIDB4MTAwKSwgMHgxMDApOworCisJZ3Bpb2NoaXBfYWRkKCZjaGlwLT5ncGlvX2NoaXApOworCisJY2hpcC0+aXJxID0gSlo0NzQwX0lSUV9JTlRDX0dQSU8oaWQpOworCXNldF9pcnFfZGF0YShjaGlwLT5pcnEsIGNoaXApOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGNoaXAtPmlycSwganpfZ3Bpb19pcnFfZGVtdXhfaGFuZGxlcik7CisKKwlmb3IgKGlycSA9IGNoaXAtPmlycV9iYXNlOyBpcnEgPCBjaGlwLT5pcnFfYmFzZSArIGNoaXAtPmdwaW9fY2hpcC5uZ3BpbzsgKytpcnEpIHsKKwkJbG9ja2RlcF9zZXRfY2xhc3MoJmlycV9kZXNjW2lycV0ubG9jaywgJmdwaW9fbG9ja19jbGFzcyk7CisJCXNldF9pcnFfY2hpcF9kYXRhKGlycSwgY2hpcCk7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZjaGlwLT5pcnFfY2hpcCwgaGFuZGxlX2xldmVsX2lycSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGp6NDc0MF9ncGlvX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgcmV0OworCisJcmV0ID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZqejQ3NDBfZ3Bpb19zeXNkZXZfY2xhc3MpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShqejQ3NDBfZ3Bpb19jaGlwcyk7ICsraSkKKwkJano0NzQwX2dwaW9fY2hpcF9pbml0KCZqejQ3NDBfZ3Bpb19jaGlwc1tpXSwgaSk7CisKKwlwcmludGsoS0VSTl9JTkZPICJKWjQ3NDAgR1BJTyBpbml0YWxpemVkXG4iKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChqejQ3NDBfZ3Bpb19pbml0KTsKKworI2lmZGVmIENPTkZJR19ERUJVR19GUworCitzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19zZXFfcmVnKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGp6X2dwaW9fY2hpcCAqY2hpcCwKKwljb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgcmVnKQoreworCXNlcV9wcmludGYocywgIlx0JXM6ICUwOHhcbiIsIG5hbWUsIHJlYWRsKGNoaXAtPmJhc2UgKyByZWcpKTsKK30KKworc3RhdGljIGludCBncGlvX3JlZ3Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3QganpfZ3Bpb19jaGlwICpjaGlwID0gano0NzQwX2dwaW9fY2hpcHM7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShqejQ3NDBfZ3Bpb19jaGlwcyk7ICsraSwgKytjaGlwKSB7CisJCXNlcV9wcmludGYocywgIj09R1BJTyAlZD09XG4iLCBpKTsKKwkJZ3Bpb19zZXFfcmVnKHMsIGNoaXAsICJQaW4iLCBKWl9SRUdfR1BJT19QSU4pOworCQlncGlvX3NlcV9yZWcocywgY2hpcCwgIkRhdGEiLCBKWl9SRUdfR1BJT19EQVRBKTsKKwkJZ3Bpb19zZXFfcmVnKHMsIGNoaXAsICJNYXNrIiwgSlpfUkVHX0dQSU9fTUFTSyk7CisJCWdwaW9fc2VxX3JlZyhzLCBjaGlwLCAiUHVsbCIsIEpaX1JFR19HUElPX1BVTEwpOworCQlncGlvX3NlcV9yZWcocywgY2hpcCwgIkZ1bmMiLCBKWl9SRUdfR1BJT19GVU5DKTsKKwkJZ3Bpb19zZXFfcmVnKHMsIGNoaXAsICJTZWxlY3QiLCBKWl9SRUdfR1BJT19TRUxFQ1QpOworCQlncGlvX3NlcV9yZWcocywgY2hpcCwgIkRpcmVjdGlvbiIsIEpaX1JFR19HUElPX0RJUkVDVElPTik7CisJCWdwaW9fc2VxX3JlZyhzLCBjaGlwLCAiVHJpZ2dlciIsIEpaX1JFR19HUElPX1RSSUdHRVIpOworCQlncGlvX3NlcV9yZWcocywgY2hpcCwgIkZsYWciLCBKWl9SRUdfR1BJT19GTEFHKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBncGlvX3JlZ3Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZ3Bpb19yZWdzX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBncGlvX3JlZ3Nfb3BlcmF0aW9ucyA9IHsKKwkub3BlbgkJPSBncGlvX3JlZ3Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZ3Bpb19kZWJ1Z2ZzX2luaXQodm9pZCkKK3sKKwkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgianpfcmVnc19ncGlvIiwgU19JRlJFRyB8IFNfSVJVR08sCisJCQkJTlVMTCwgTlVMTCwgJmdwaW9fcmVnc19vcGVyYXRpb25zKTsKKwlyZXR1cm4gMDsKK30KK3N1YnN5c19pbml0Y2FsbChncGlvX2RlYnVnZnNfaW5pdCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2p6NDc0MC9pcnEuYyBiL2FyY2gvbWlwcy9qejQ3NDAvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QzM2ZmOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9qejQ3NDAvaXJxLmMKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAsIExhcnMtUGV0ZXIgQ2xhdXNlbiA8bGFyc0BtZXRhZm9vLmRlPgorICogIEpaNDc0MCBwbGF0Zm9ybSBJUlEgc3VwcG9ydAorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgorI2luY2x1ZGUgPGFzbS9pcnFfY3B1Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC1qejQ3NDAvYmFzZS5oPgorCitzdGF0aWMgdm9pZCBfX2lvbWVtICpqel9pbnRjX2Jhc2U7CitzdGF0aWMgdWludDMyX3QganpfaW50Y193YWtldXA7CitzdGF0aWMgdWludDMyX3QganpfaW50Y19zYXZlZDsKKworI2RlZmluZSBKWl9SRUdfSU5UQ19TVEFUVVMJMHgwMAorI2RlZmluZSBKWl9SRUdfSU5UQ19NQVNLCTB4MDQKKyNkZWZpbmUgSlpfUkVHX0lOVENfU0VUX01BU0sJMHgwOAorI2RlZmluZSBKWl9SRUdfSU5UQ19DTEVBUl9NQVNLCTB4MGMKKyNkZWZpbmUgSlpfUkVHX0lOVENfUEVORElORwkweDEwCisKKyNkZWZpbmUgSVJRX0JJVCh4KSBCSVQoKHgpIC0gSlo0NzQwX0lSUV9CQVNFKQorCitzdGF0aWMgdm9pZCBpbnRjX2lycV91bm1hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwl3cml0ZWwoSVJRX0JJVChpcnEpLCBqel9pbnRjX2Jhc2UgKyBKWl9SRUdfSU5UQ19DTEVBUl9NQVNLKTsKK30KKworc3RhdGljIHZvaWQgaW50Y19pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXdyaXRlbChJUlFfQklUKGlycSksIGp6X2ludGNfYmFzZSArIEpaX1JFR19JTlRDX1NFVF9NQVNLKTsKK30KKworc3RhdGljIGludCBpbnRjX2lycV9zZXRfd2FrZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgb24pCit7CisJaWYgKG9uKQorCQlqel9pbnRjX3dha2V1cCB8PSBJUlFfQklUKGlycSk7CisJZWxzZQorCQlqel9pbnRjX3dha2V1cCAmPSB+SVJRX0JJVChpcnEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW50Y19pcnFfdHlwZSA9IHsKKwkubmFtZSA9CQkiSU5UQyIsCisJLm1hc2sgPQkJaW50Y19pcnFfbWFzaywKKwkubWFza19hY2sgPQlpbnRjX2lycV9tYXNrLAorCS51bm1hc2sgPQlpbnRjX2lycV91bm1hc2ssCisJLnNldF93YWtlID0JaW50Y19pcnFfc2V0X3dha2UsCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3Qgano0NzQwX2Nhc2NhZGUoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwl1aW50MzJfdCBpcnFfcmVnOworCisJaXJxX3JlZyA9IHJlYWRsKGp6X2ludGNfYmFzZSArIEpaX1JFR19JTlRDX1BFTkRJTkcpOworCisJaWYgKGlycV9yZWcpCisJCWdlbmVyaWNfaGFuZGxlX2lycShfX2ZscyhpcnFfcmVnKSArIEpaNDc0MF9JUlFfQkFTRSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGp6NDc0MF9jYXNjYWRlX2FjdGlvbiA9IHsKKwkuaGFuZGxlciA9IGp6NDc0MF9jYXNjYWRlLAorCS5uYW1lID0gIkpaNDc0MCBjYXNjYWRlIGludGVycnVwdCIsCit9OworCit2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCit7CisJaW50IGk7CisJbWlwc19jcHVfaXJxX2luaXQoKTsKKworCWp6X2ludGNfYmFzZSA9IGlvcmVtYXAoSlo0NzQwX0lOVENfQkFTRV9BRERSLCAweDE0KTsKKworCWZvciAoaSA9IEpaNDc0MF9JUlFfQkFTRTsgaSA8IEpaNDc0MF9JUlFfQkFTRSArIDMyOyBpKyspIHsKKwkJaW50Y19pcnFfbWFzayhpKTsKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZpbnRjX2lycV90eXBlLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwl9CisKKwlzZXR1cF9pcnEoMiwgJmp6NDc0MF9jYXNjYWRlX2FjdGlvbik7Cit9CisKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaCh2b2lkKQoreworCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9zdGF0dXMoKSAmIHJlYWRfYzBfY2F1c2UoKSAmIFNUMF9JTTsKKwlpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAyKQorCQlkb19JUlEoMik7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAzKQorCQlkb19JUlEoMyk7CisJZWxzZQorCQlzcHVyaW91c19pbnRlcnJ1cHQoKTsKK30KKwordm9pZCBqejQ3NDBfaW50Y19zdXNwZW5kKHZvaWQpCit7CisJanpfaW50Y19zYXZlZCA9IHJlYWRsKGp6X2ludGNfYmFzZSArIEpaX1JFR19JTlRDX01BU0spOworCXdyaXRlbCh+anpfaW50Y193YWtldXAsIGp6X2ludGNfYmFzZSArIEpaX1JFR19JTlRDX1NFVF9NQVNLKTsKKwl3cml0ZWwoanpfaW50Y193YWtldXAsIGp6X2ludGNfYmFzZSArIEpaX1JFR19JTlRDX0NMRUFSX01BU0spOworfQorCit2b2lkIGp6NDc0MF9pbnRjX3Jlc3VtZSh2b2lkKQoreworCXdyaXRlbCh+anpfaW50Y19zYXZlZCwganpfaW50Y19iYXNlICsgSlpfUkVHX0lOVENfQ0xFQVJfTUFTSyk7CisJd3JpdGVsKGp6X2ludGNfc2F2ZWQsIGp6X2ludGNfYmFzZSArIEpaX1JFR19JTlRDX1NFVF9NQVNLKTsKK30KKworI2lmZGVmIENPTkZJR19ERUJVR19GUworCitzdGF0aWMgaW5saW5lIHZvaWQgaW50Y19zZXFfcmVnKHN0cnVjdCBzZXFfZmlsZSAqcywgY29uc3QgY2hhciAqbmFtZSwKKwl1bnNpZ25lZCBpbnQgcmVnKQoreworCXNlcV9wcmludGYocywgIiVzOlx0XHQlMDh4XG4iLCBuYW1lLCByZWFkbChqel9pbnRjX2Jhc2UgKyByZWcpKTsKK30KKworc3RhdGljIGludCBpbnRjX3JlZ3Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZCkKK3sKKwlpbnRjX3NlcV9yZWcocywgIlN0YXR1cyIsIEpaX1JFR19JTlRDX1NUQVRVUyk7CisJaW50Y19zZXFfcmVnKHMsICJNYXNrIiwgSlpfUkVHX0lOVENfTUFTSyk7CisJaW50Y19zZXFfcmVnKHMsICJQZW5kaW5nIiwgSlpfUkVHX0lOVENfUEVORElORyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbnRjX3JlZ3Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgaW50Y19yZWdzX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbnRjX3JlZ3Nfb3BlcmF0aW9ucyA9IHsKKwkub3BlbgkJPSBpbnRjX3JlZ3Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW50Y19kZWJ1Z2ZzX2luaXQodm9pZCkKK3sKKwkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgianpfcmVnc19pbnRjIiwgU19JRlJFRyB8IFNfSVJVR08sCisJCQkJTlVMTCwgTlVMTCwgJmludGNfcmVnc19vcGVyYXRpb25zKTsKKwlyZXR1cm4gMDsKK30KK3N1YnN5c19pbml0Y2FsbChpbnRjX2RlYnVnZnNfaW5pdCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2p6NDc0MC9pcnEuaCBiL2FyY2gvbWlwcy9qejQ3NDAvaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZiNWVhZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9qejQ3NDAvaXJxLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAsIExhcnMtUGV0ZXIgQ2xhdXNlbiA8bGFyc0BtZXRhZm9vLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX19NSVBTX0paNDc0MF9JUlFfSF9fCisjZGVmaW5lIF9fTUlQU19KWjQ3NDBfSVJRX0hfXworCitleHRlcm4gdm9pZCBqejQ3NDBfaW50Y19zdXNwZW5kKHZvaWQpOworZXh0ZXJuIHZvaWQgano0NzQwX2ludGNfcmVzdW1lKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qejQ3NDAvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9qejQ3NDAvcGxhdGZvcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWJjMmI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2p6NDc0MC9wbGF0Zm9ybS5jCkBAIC0wLDAgKzEsMjkxIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOS0yMDEwLCBMYXJzLVBldGVyIENsYXVzZW4gPGxhcnNAbWV0YWZvby5kZT4KKyAqICBKWjQ3NDAgcGxhdGZvcm0gZGV2aWNlcworICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVzb3VyY2UuaD4KKworI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC1qejQ3NDAvcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1qejQ3NDAvYmFzZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWp6NDc0MC9pcnEuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKworI2luY2x1ZGUgInNlcmlhbC5oIgorI2luY2x1ZGUgImNsb2NrLmgiCisKKy8qIE9IQ0kgY29udHJvbGxlciAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBqejQ3NDBfdXNiX29oY2lfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBKWjQ3NDBfVUhDX0JBU0VfQUREUiwKKwkJLmVuZAk9IEpaNDc0MF9VSENfQkFTRV9BRERSICsgMHgxMDAwIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IEpaNDc0MF9JUlFfVUhDLAorCQkuZW5kCT0gSlo0NzQwX0lSUV9VSEMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGp6NDc0MF91c2Jfb2hjaV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImp6NDc0MC1vaGNpIiwKKwkuaWQJCT0gLTEsCisJLmRldiA9IHsKKwkJLmRtYV9tYXNrID0gJmp6NDc0MF91c2Jfb2hjaV9kZXZpY2UuZGV2LmNvaGVyZW50X2RtYV9tYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGp6NDc0MF91c2Jfb2hjaV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGp6NDc0MF91c2Jfb2hjaV9yZXNvdXJjZXMsCit9OworCisvKiBVREMgKFVTQiBnYWRnZXQgY29udHJvbGxlcikgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugano0NzQwX3VzYl9nZHRfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBKWjQ3NDBfVURDX0JBU0VfQUREUiwKKwkJLmVuZAk9IEpaNDc0MF9VRENfQkFTRV9BRERSICsgMHgxMDAwIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IEpaNDc0MF9JUlFfVURDLAorCQkuZW5kCT0gSlo0NzQwX0lSUV9VREMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGp6NDc0MF91ZGNfZGV2aWNlID0geworCS5uYW1lCQk9ICJqei11ZGMiLAorCS5pZAkJPSAtMSwKKwkuZGV2ID0geworCQkuZG1hX21hc2sgPSAmano0NzQwX3VkY19kZXZpY2UuZGV2LmNvaGVyZW50X2RtYV9tYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGp6NDc0MF91c2JfZ2R0X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gano0NzQwX3VzYl9nZHRfcmVzb3VyY2VzLAorfTsKKworLyogTU1DL1NEIGNvbnRyb2xsZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugano0NzQwX21tY19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IEpaNDc0MF9NU0NfQkFTRV9BRERSLAorCQkuZW5kCT0gSlo0NzQwX01TQ19CQVNFX0FERFIgKyAweDEwMDAgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSlo0NzQwX0lSUV9NU0MsCisJCS5lbmQJPSBKWjQ3NDBfSVJRX01TQywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBqejQ3NDBfbW1jX2RldmljZSA9IHsKKwkubmFtZQkJPSAiano0NzQwLW1tYyIsCisJLmlkCQk9IDAsCisJLmRldiA9IHsKKwkJLmRtYV9tYXNrID0gJmp6NDc0MF9tbWNfZGV2aWNlLmRldi5jb2hlcmVudF9kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKKwl9LAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoano0NzQwX21tY19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGp6NDc0MF9tbWNfcmVzb3VyY2VzLAorfTsKKworLyogUlRDIGNvbnRyb2xsZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugano0NzQwX3J0Y19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IEpaNDc0MF9SVENfQkFTRV9BRERSLAorCQkuZW5kCT0gSlo0NzQwX1JUQ19CQVNFX0FERFIgKyAweDM4IC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydCAgPSBKWjQ3NDBfSVJRX1JUQywKKwkJLmVuZAk9IEpaNDc0MF9JUlFfUlRDLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBqejQ3NDBfcnRjX2RldmljZSA9IHsKKwkubmFtZQkJPSAiano0NzQwLXJ0YyIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShqejQ3NDBfcnRjX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gano0NzQwX3J0Y19yZXNvdXJjZXMsCit9OworCisvKiBJMkMgY29udHJvbGxlciAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBqejQ3NDBfaTJjX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gSlo0NzQwX0kyQ19CQVNFX0FERFIsCisJCS5lbmQJPSBKWjQ3NDBfSTJDX0JBU0VfQUREUiArIDB4MTAwMCAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBKWjQ3NDBfSVJRX0kyQywKKwkJLmVuZAk9IEpaNDc0MF9JUlFfSTJDLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGp6NDc0MF9pMmNfZGV2aWNlID0geworCS5uYW1lCQk9ICJqejQ3NDAtaTJjIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGp6NDc0MF9pMmNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBqejQ3NDBfaTJjX3Jlc291cmNlcywKK307CisKKy8qIE5BTkQgY29udHJvbGxlciAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBqejQ3NDBfbmFuZF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gIm1taW8iLAorCQkuc3RhcnQJPSBKWjQ3NDBfRU1DX0JBU0VfQUREUiwKKwkJLmVuZAk9IEpaNDc0MF9FTUNfQkFTRV9BRERSICsgMHgxMDAwIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lCT0gImJhbmsiLAorCQkuc3RhcnQJPSAweDE4MDAwMDAwLAorCQkuZW5kCT0gMHgxODBDMDAwMCAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGp6NDc0MF9uYW5kX2RldmljZSA9IHsKKwkubmFtZSA9ICJqejQ3NDAtbmFuZCIsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGp6NDc0MF9uYW5kX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gano0NzQwX25hbmRfcmVzb3VyY2VzLAorfTsKKworLyogTENEIGNvbnRyb2xsZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugano0NzQwX2ZyYW1lYnVmZmVyX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gSlo0NzQwX0xDRF9CQVNFX0FERFIsCisJCS5lbmQJPSBKWjQ3NDBfTENEX0JBU0VfQUREUiArIDB4MTAwMCAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGp6NDc0MF9mcmFtZWJ1ZmZlcl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImp6NDc0MC1mYiIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShqejQ3NDBfZnJhbWVidWZmZXJfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBqejQ3NDBfZnJhbWVidWZmZXJfcmVzb3VyY2VzLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzayA9ICZqejQ3NDBfZnJhbWVidWZmZXJfZGV2aWNlLmRldi5jb2hlcmVudF9kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKKwl9LAorfTsKKworLyogSTJTIGNvbnRyb2xsZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugano0NzQwX2kyc19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IEpaNDc0MF9BSUNfQkFTRV9BRERSLAorCQkuZW5kCT0gSlo0NzQwX0FJQ19CQVNFX0FERFIgKyAweDM4IC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugano0NzQwX2kyc19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImp6NDc0MC1pMnMiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoano0NzQwX2kyc19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGp6NDc0MF9pMnNfcmVzb3VyY2VzLAorfTsKKworLyogUENNICovCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGp6NDc0MF9wY21fZGV2aWNlID0geworCS5uYW1lCQk9ICJqejQ3NDAtcGNtIiwKKwkuaWQJCT0gLTEsCit9OworCisvKiBDb2RlYyAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBqejQ3NDBfY29kZWNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBKWjQ3NDBfQUlDX0JBU0VfQUREUiArIDB4ODAsCisJCS5lbmQJPSBKWjQ3NDBfQUlDX0JBU0VfQUREUiArIDB4ODggLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBqejQ3NDBfY29kZWNfZGV2aWNlID0geworCS5uYW1lCQk9ICJqejQ3NDAtY29kZWMiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoano0NzQwX2NvZGVjX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gano0NzQwX2NvZGVjX3Jlc291cmNlcywKK307CisKKy8qIEFEQyBjb250cm9sbGVyICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGp6NDc0MF9hZGNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBKWjQ3NDBfU0FEQ19CQVNFX0FERFIsCisJCS5lbmQJPSBKWjQ3NDBfU0FEQ19CQVNFX0FERFIgKyAweDMwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSlo0NzQwX0lSUV9TQURDLAorCQkuZW5kCT0gSlo0NzQwX0lSUV9TQURDLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSlo0NzQwX0lSUV9BRENfQkFTRSwKKwkJLmVuZAk9IEpaNDc0MF9JUlFfQURDX0JBU0UsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGp6NDc0MF9hZGNfZGV2aWNlID0geworCS5uYW1lCQk9ICJqejQ3NDAtYWRjIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGp6NDc0MF9hZGNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBqejQ3NDBfYWRjX3Jlc291cmNlcywKK307CisKKy8qIFNlcmlhbCAqLworI2RlZmluZSBKWjQ3NDBfVUFSVF9EQVRBKF9pZCkgXAorCXsgXAorCQkuZmxhZ3MgPSBVUEZfU0tJUF9URVNUIHwgVVBGX0lPUkVNQVAgfCBVUEZfRklYRURfVFlQRSwgXAorCQkuaW90eXBlID0gVVBJT19NRU0sIFwKKwkJLnJlZ3NoaWZ0ID0gMiwgXAorCQkuc2VyaWFsX291dCA9IGp6NDc0MF9zZXJpYWxfb3V0LCBcCisJCS50eXBlID0gUE9SVF8xNjU1MCwgXAorCQkubWFwYmFzZSA9IEpaNDc0MF9VQVJUICMjIF9pZCAjIyBfQkFTRV9BRERSLCBcCisJCS5pcnEgPSBKWjQ3NDBfSVJRX1VBUlQgIyMgX2lkLCBcCisJfQorCitzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IGp6NDc0MF91YXJ0X2RhdGFbXSA9IHsKKwlKWjQ3NDBfVUFSVF9EQVRBKDApLAorCUpaNDc0MF9VQVJUX0RBVEEoMSksCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBqejQ3NDBfdWFydF9kZXZpY2UgPSB7CisJLm5hbWUgPSAic2VyaWFsODI1MCIsCisJLmlkID0gMCwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9IGp6NDc0MF91YXJ0X2RhdGEsCisJfSwKK307CisKK3ZvaWQgano0NzQwX3NlcmlhbF9kZXZpY2VfcmVnaXN0ZXIodm9pZCkKK3sKKwlzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgKnA7CisKKwlmb3IgKHAgPSBqejQ3NDBfdWFydF9kYXRhOyBwLT5mbGFncyAhPSAwOyArK3ApCisJCXAtPnVhcnRjbGsgPSBqejQ3NDBfY2xvY2tfYmRhdGEuZXh0X3JhdGU7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmp6NDc0MF91YXJ0X2RldmljZSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvano0NzQwL3BtLmMgYi9hcmNoL21pcHMvano0NzQwL3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk5OTQ1OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9qejQ3NDAvcG0uYwpAQCAtMCwwICsxLDU2IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMCwgTGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+CisgKglKWjQ3NDAgU29DIHBvd2VyIG1hbmFnZW1lbnQgc3VwcG9ydAorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLWp6NDc0MC9jbG9jay5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlICJpcnEuaCIKKworc3RhdGljIGludCBqejQ3NDBfcG1fZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCWp6NDc0MF9pbnRjX3N1c3BlbmQoKTsKKwlqejQ3NDBfY2xvY2tfc3VzcGVuZCgpOworCisJano0NzQwX2Nsb2NrX3NldF93YWl0X21vZGUoSlo0NzQwX1dBSVRfTU9ERV9TTEVFUCk7CisKKwlfX2FzbV9fKCIuc2V0XHRtaXBzM1xuXHQiCisJCSJ3YWl0XG5cdCIKKwkJIi5zZXRcdG1pcHMwIik7CisKKwlqejQ3NDBfY2xvY2tfc2V0X3dhaXRfbW9kZShKWjQ3NDBfV0FJVF9NT0RFX0lETEUpOworCisJano0NzQwX2Nsb2NrX3Jlc3VtZSgpOworCWp6NDc0MF9pbnRjX3Jlc3VtZSgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgano0NzQwX3BtX29wcyA9IHsKKwkudmFsaWQJCT0gc3VzcGVuZF92YWxpZF9vbmx5X21lbSwKKwkuZW50ZXIJCT0gano0NzQwX3BtX2VudGVyLAorfTsKKworc3RhdGljIGludCBfX2luaXQgano0NzQwX3BtX2luaXQodm9pZCkKK3sKKwlzdXNwZW5kX3NldF9vcHMoJmp6NDc0MF9wbV9vcHMpOworCXJldHVybiAwOworCit9CitsYXRlX2luaXRjYWxsKGp6NDc0MF9wbV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qejQ3NDAvcHJvbS5jIGIvYXJjaC9taXBzL2p6NDc0MC9wcm9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlYWMxNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9qejQ3NDAvcHJvbS5jCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwLCBMYXJzLVBldGVyIENsYXVzZW4gPGxhcnNAbWV0YWZvby5kZT4KKyAqICBKWjQ3NDAgU29DIHByb20gY29kZQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CisKKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1qejQ3NDAvYmFzZS5oPgorCit2b2lkIGp6NDc0MF9pbml0X2NtZGxpbmUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwl1bnNpZ25lZCBpbnQgY291bnQgPSBDT01NQU5EX0xJTkVfU0laRSAtIDE7CisJaW50IGk7CisJY2hhciAqZHN0ID0gJihhcmNzX2NtZGxpbmVbMF0pOworCWNoYXIgKnNyYzsKKworCWZvciAoaSA9IDE7IGkgPCBhcmdjICYmIGNvdW50OyArK2kpIHsKKwkJc3JjID0gYXJndltpXTsKKwkJd2hpbGUgKCpzcmMgJiYgY291bnQpIHsKKwkJCSpkc3QrKyA9ICpzcmMrKzsKKwkJCS0tY291bnQ7CisJCX0KKwkJKmRzdCsrID0gJyAnOworCX0KKwlpZiAoaSA+IDEpCisJCS0tZHN0OworCisJKmRzdCA9IDA7Cit9CisKK3ZvaWQgX19pbml0IHByb21faW5pdCh2b2lkKQoreworCWp6NDc0MF9pbml0X2NtZGxpbmUoKGludClmd19hcmcwLCAoY2hhciAqKilmd19hcmcxKTsKKwltaXBzX21hY2h0eXBlID0gTUFDSF9JTkdFTklDX0paNDc0MDsKK30KKwordm9pZCBfX2luaXQgcHJvbV9mcmVlX3Byb21fbWVtb3J5KHZvaWQpCit7Cit9CisKKyNkZWZpbmUgVUFSVF9SRUcoX3JlZykgKCh2b2lkIF9faW9tZW0gKilDS1NFRzFBRERSKEpaNDc0MF9VQVJUMF9CQVNFX0FERFIgKyAoX3JlZyA8PCAyKSkpCisKK3ZvaWQgcHJvbV9wdXRjaGFyKGNoYXIgYykKK3sKKwl1aW50OF90IGxzcjsKKworCWRvIHsKKwkJbHNyID0gcmVhZGIoVUFSVF9SRUcoVUFSVF9MU1IpKTsKKwl9IHdoaWxlICgobHNyICYgVUFSVF9MU1JfVEVNVCkgPT0gMCk7CisKKwl3cml0ZWIoYywgVUFSVF9SRUcoVUFSVF9UWCkpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2p6NDc0MC9wd20uYyBiL2FyY2gvbWlwcy9qejQ3NDAvcHdtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI2YTZmYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9qejQ3NDAvcHdtLmMKQEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwLCBMYXJzLVBldGVyIENsYXVzZW4gPGxhcnNAbWV0YWZvby5kZT4KKyAqICBKWjQ3NDAgcGxhdGZvcm0gUFdNIHN1cHBvcnQKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9wd20uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC1qejQ3NDAvZ3Bpby5oPgorI2luY2x1ZGUgInRpbWVyLmgiCisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpqejQ3NDBfcHdtX2NsazsKKworREVGSU5FX01VVEVYKGp6NDc0MF9wd21fbXV0ZXgpOworCitzdHJ1Y3QgcHdtX2RldmljZSB7CisJdW5zaWduZWQgaW50IGlkOworCXVuc2lnbmVkIGludCBncGlvOworCWJvb2wgdXNlZDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHdtX2RldmljZSBqejQ3NDBfcHdtX2xpc3RbXSA9IHsKKwl7IDIsIEpaX0dQSU9fUFdNMiwgZmFsc2UgfSwKKwl7IDMsIEpaX0dQSU9fUFdNMywgZmFsc2UgfSwKKwl7IDQsIEpaX0dQSU9fUFdNNCwgZmFsc2UgfSwKKwl7IDUsIEpaX0dQSU9fUFdNNSwgZmFsc2UgfSwKKwl7IDYsIEpaX0dQSU9fUFdNNiwgZmFsc2UgfSwKKwl7IDcsIEpaX0dQSU9fUFdNNywgZmFsc2UgfSwKK307CisKK3N0cnVjdCBwd21fZGV2aWNlICpwd21fcmVxdWVzdChpbnQgaWQsIGNvbnN0IGNoYXIgKmxhYmVsKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBwd21fZGV2aWNlICpwd207CisKKwlpZiAoaWQgPCAyIHx8IGlkID4gNyB8fCAhano0NzQwX3B3bV9jbGspCisJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOworCisJbXV0ZXhfbG9jaygmano0NzQwX3B3bV9tdXRleCk7CisKKwlwd20gPSAmano0NzQwX3B3bV9saXN0W2lkIC0gMl07CisJaWYgKHB3bS0+dXNlZCkKKwkJcmV0ID0gLUVCVVNZOworCWVsc2UKKwkJcHdtLT51c2VkID0gdHJ1ZTsKKworCW11dGV4X3VubG9jaygmano0NzQwX3B3bV9tdXRleCk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KHB3bS0+Z3BpbywgbGFiZWwpOworCisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IHB3bSBncGlvOiAlZFxuIiwgcmV0KTsKKwkJcHdtLT51c2VkID0gZmFsc2U7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJanpfZ3Bpb19zZXRfZnVuY3Rpb24ocHdtLT5ncGlvLCBKWl9HUElPX0ZVTkNfUFdNKTsKKworCWp6NDc0MF90aW1lcl9zdGFydChpZCk7CisKKwlyZXR1cm4gcHdtOworfQorCit2b2lkIHB3bV9mcmVlKHN0cnVjdCBwd21fZGV2aWNlICpwd20pCit7CisJcHdtX2Rpc2FibGUocHdtKTsKKwlqejQ3NDBfdGltZXJfc2V0X2N0cmwocHdtLT5pZCwgMCk7CisKKwlqel9ncGlvX3NldF9mdW5jdGlvbihwd20tPmdwaW8sIEpaX0dQSU9fRlVOQ19OT05FKTsKKwlncGlvX2ZyZWUocHdtLT5ncGlvKTsKKworCWp6NDc0MF90aW1lcl9zdG9wKHB3bS0+aWQpOworCisJcHdtLT51c2VkID0gZmFsc2U7Cit9CisKK2ludCBwd21fY29uZmlnKHN0cnVjdCBwd21fZGV2aWNlICpwd20sIGludCBkdXR5X25zLCBpbnQgcGVyaW9kX25zKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB0bXA7CisJdW5zaWduZWQgbG9uZyBwZXJpb2QsIGR1dHk7CisJdW5zaWduZWQgaW50IHByZXNjYWxlciA9IDA7CisJdW5zaWduZWQgaW50IGlkID0gcHdtLT5pZDsKKwl1aW50MTZfdCBjdHJsOworCWJvb2wgaXNfZW5hYmxlZDsKKworCWlmIChkdXR5X25zIDwgMCB8fCBkdXR5X25zID4gcGVyaW9kX25zKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXRtcCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpY2xrX2dldF9yYXRlKGp6NDc0MF9wd21fY2xrKSAqIHBlcmlvZF9uczsKKwlkb19kaXYodG1wLCAxMDAwMDAwMDAwKTsKKwlwZXJpb2QgPSB0bXA7CisKKwl3aGlsZSAocGVyaW9kID4gMHhmZmZmICYmIHByZXNjYWxlciA8IDYpIHsKKwkJcGVyaW9kID4+PSAyOworCQkrK3ByZXNjYWxlcjsKKwl9CisKKwlpZiAocHJlc2NhbGVyID09IDYpCisJCXJldHVybiAtRUlOVkFMOworCisJdG1wID0gKHVuc2lnbmVkIGxvbmcgbG9uZylwZXJpb2QgKiBkdXR5X25zOworCWRvX2Rpdih0bXAsIHBlcmlvZF9ucyk7CisJZHV0eSA9IHBlcmlvZCAtIHRtcDsKKworCWlmIChkdXR5ID49IHBlcmlvZCkKKwkJZHV0eSA9IHBlcmlvZCAtIDE7CisKKwlpc19lbmFibGVkID0gano0NzQwX3RpbWVyX2lzX2VuYWJsZWQoaWQpOworCWlmIChpc19lbmFibGVkKQorCQlwd21fZGlzYWJsZShwd20pOworCisJano0NzQwX3RpbWVyX3NldF9jb3VudChpZCwgMCk7CisJano0NzQwX3RpbWVyX3NldF9kdXR5KGlkLCBkdXR5KTsKKwlqejQ3NDBfdGltZXJfc2V0X3BlcmlvZChpZCwgcGVyaW9kKTsKKworCWN0cmwgPSBKWl9USU1FUl9DVFJMX1BSRVNDQUxFUihwcmVzY2FsZXIpIHwgSlpfVElNRVJfQ1RSTF9TUkNfRVhUIHwKKwkJSlpfVElNRVJfQ1RSTF9QV01fQUJCUlVQVF9TSFVURE9XTjsKKworCWp6NDc0MF90aW1lcl9zZXRfY3RybChpZCwgY3RybCk7CisKKwlpZiAoaXNfZW5hYmxlZCkKKwkJcHdtX2VuYWJsZShwd20pOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBwd21fZW5hYmxlKHN0cnVjdCBwd21fZGV2aWNlICpwd20pCit7CisJdWludDMyX3QgY3RybCA9IGp6NDc0MF90aW1lcl9nZXRfY3RybChwd20tPmlkKTsKKworCWN0cmwgfD0gSlpfVElNRVJfQ1RSTF9QV01fRU5BQkxFOworCWp6NDc0MF90aW1lcl9zZXRfY3RybChwd20tPmlkLCBjdHJsKTsKKwlqejQ3NDBfdGltZXJfZW5hYmxlKHB3bS0+aWQpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcHdtX2Rpc2FibGUoc3RydWN0IHB3bV9kZXZpY2UgKnB3bSkKK3sKKwl1aW50MzJfdCBjdHJsID0gano0NzQwX3RpbWVyX2dldF9jdHJsKHB3bS0+aWQpOworCisJY3RybCAmPSB+SlpfVElNRVJfQ1RSTF9QV01fRU5BQkxFOworCWp6NDc0MF90aW1lcl9kaXNhYmxlKHB3bS0+aWQpOworCWp6NDc0MF90aW1lcl9zZXRfY3RybChwd20tPmlkLCBjdHJsKTsKK30KKworc3RhdGljIGludCBfX2luaXQgano0NzQwX3B3bV9pbml0KHZvaWQpCit7CisJaW50IHJldCA9IDA7CisKKwlqejQ3NDBfcHdtX2NsayA9IGNsa19nZXQoTlVMTCwgImV4dCIpOworCisJaWYgKElTX0VSUihqejQ3NDBfcHdtX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihqejQ3NDBfcHdtX2Nsayk7CisJCWp6NDc0MF9wd21fY2xrID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorc3Vic3lzX2luaXRjYWxsKGp6NDc0MF9wd21faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvano0NzQwL3Jlc2V0LmMgYi9hcmNoL21pcHMvano0NzQwL3Jlc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYxZmI5NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9qejQ3NDAvcmVzZXQuYwpAQCAtMCwwICsxLDc5IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMCwgTGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKworI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLWp6NDc0MC9iYXNlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtano0NzQwL3RpbWVyLmg+CisKK3N0YXRpYyB2b2lkIGp6NDc0MF9oYWx0KHZvaWQpCit7CisJd2hpbGUgKDEpIHsKKwkJX19hc21fXygiLnNldCBwdXNoO1xuIgorCQkJIi5zZXQgbWlwczM7XG4iCisJCQkid2FpdDtcbiIKKwkJCSIuc2V0IHBvcDtcbiIKKwkJKTsKKwl9Cit9CisKKyNkZWZpbmUgSlpfUkVHX1dEVF9EQVRBIDB4MDAKKyNkZWZpbmUgSlpfUkVHX1dEVF9DT1VOVEVSX0VOQUJMRSAweDA0CisjZGVmaW5lIEpaX1JFR19XRFRfQ09VTlRFUiAweDA4CisjZGVmaW5lIEpaX1JFR19XRFRfQ1RSTCAweDBjCisKK3N0YXRpYyB2b2lkIGp6NDc0MF9yZXN0YXJ0KGNoYXIgKmNvbW1hbmQpCit7CisJdm9pZCBfX2lvbWVtICp3ZHRfYmFzZSA9IGlvcmVtYXAoSlo0NzQwX1dEVF9CQVNFX0FERFIsIDB4MGYpOworCisJano0NzQwX3RpbWVyX2VuYWJsZV93YXRjaGRvZygpOworCisJd3JpdGViKDAsIHdkdF9iYXNlICsgSlpfUkVHX1dEVF9DT1VOVEVSX0VOQUJMRSk7CisKKwl3cml0ZXcoMCwgd2R0X2Jhc2UgKyBKWl9SRUdfV0RUX0NPVU5URVIpOworCXdyaXRldygwLCB3ZHRfYmFzZSArIEpaX1JFR19XRFRfREFUQSk7CisJd3JpdGV3KEJJVCgyKSwgd2R0X2Jhc2UgKyBKWl9SRUdfV0RUX0NUUkwpOworCisJd3JpdGViKDEsIHdkdF9iYXNlICsgSlpfUkVHX1dEVF9DT1VOVEVSX0VOQUJMRSk7CisJano0NzQwX2hhbHQoKTsKK30KKworI2RlZmluZSBKWl9SRUdfUlRDX0NUUkwJCTB4MDAKKyNkZWZpbmUgSlpfUkVHX1JUQ19ISUJFUk5BVEUJMHgyMAorCisjZGVmaW5lIEpaX1JUQ19DVFJMX1dSRFkJQklUKDcpCisKK3N0YXRpYyB2b2lkIGp6NDc0MF9wb3dlcl9vZmYodm9pZCkKK3sKKwl2b2lkIF9faW9tZW0gKnJ0Y19iYXNlID0gaW9yZW1hcChKWjQ3NDBfUlRDX0JBU0VfQUREUiwgMHgyNCk7CisJdWludDMyX3QgY3RybDsKKworCWRvIHsKKwkJY3RybCA9IHJlYWRsKHJ0Y19iYXNlICsgSlpfUkVHX1JUQ19DVFJMKTsKKwl9IHdoaWxlICghKGN0cmwgJiBKWl9SVENfQ1RSTF9XUkRZKSk7CisKKwl3cml0ZWwoMSwgcnRjX2Jhc2UgKyBKWl9SRUdfUlRDX0hJQkVSTkFURSk7CisJano0NzQwX2hhbHQoKTsKK30KKwordm9pZCBqejQ3NDBfcmVzZXRfaW5pdCh2b2lkKQoreworCV9tYWNoaW5lX3Jlc3RhcnQgPSBqejQ3NDBfcmVzdGFydDsKKwlfbWFjaGluZV9oYWx0ID0gano0NzQwX2hhbHQ7CisJcG1fcG93ZXJfb2ZmID0gano0NzQwX3Bvd2VyX29mZjsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qejQ3NDAvcmVzZXQuaCBiL2FyY2gvbWlwcy9qejQ3NDAvcmVzZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjAyYWI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2p6NDc0MC9yZXNldC5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX01JUFNfSlo0NzQwX1JFU0VUX0hfXworI2RlZmluZSBfX01JUFNfSlo0NzQwX1JFU0VUX0hfXworCitleHRlcm4gdm9pZCBqejQ3NDBfcmVzZXRfaW5pdCh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvano0NzQwL3NlcmlhbC5jIGIvYXJjaC9taXBzL2p6NDc0MC9zZXJpYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjNkZTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2p6NDc0MC9zZXJpYWwuYwpAQCAtMCwwICsxLDMzIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMCwgTGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+CisgKiAgSlo0NzQwIHNlcmlhbCBzdXBwb3J0CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQkgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YJIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCUxpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgorCit2b2lkIGp6NDc0MF9zZXJpYWxfb3V0KHN0cnVjdCB1YXJ0X3BvcnQgKnAsIGludCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlzd2l0Y2ggKG9mZnNldCkgeworCWNhc2UgVUFSVF9GQ1I6CisJCXZhbHVlIHw9IDB4MTA7IC8qIEVuYWJsZSB1YXJ0IG1vZHVsZSAqLworCQlicmVhazsKKwljYXNlIFVBUlRfSUVSOgorCQl2YWx1ZSB8PSAodmFsdWUgJiAweDQpIDw8IDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwl3cml0ZWIodmFsdWUsIHAtPm1lbWJhc2UgKyAob2Zmc2V0IDw8IHAtPnJlZ3NoaWZ0KSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvano0NzQwL3NlcmlhbC5oIGIvYXJjaC9taXBzL2p6NDc0MC9zZXJpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWZlM2FkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2p6NDc0MC9zZXJpYWwuaApAQCAtMCwwICsxLDIwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMCwgTGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+CisgKiAgSlo0NzQwIHNlcmlhbCBzdXBwb3J0CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQkgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YJIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCUxpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX19NSVBTX0paNDc0MF9TRVJJQUxfSF9fCisKK3ZvaWQgano0NzQwX3NlcmlhbF9vdXQoc3RydWN0IHVhcnRfcG9ydCAqcCwgaW50IG9mZnNldCwgaW50IHZhbHVlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvano0NzQwL3NldHVwLmMgYi9hcmNoL21pcHMvano0NzQwL3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE5ZTE0ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9qejQ3NDAvc2V0dXAuYwpAQCAtMCwwICsxLDI5IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOS0yMDEwLCBMYXJzLVBldGVyIENsYXVzZW4gPGxhcnNAbWV0YWZvby5kZT4KKyAqICBKWjQ3NDAgc2V0dXAgY29kZQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlICJyZXNldC5oIgorCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQoreworCWp6NDc0MF9yZXNldF9pbml0KCk7Cit9CisKK2NvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQoreworCXJldHVybiAiSlo0NzQwIjsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qejQ3NDAvdGltZS5jIGIvYXJjaC9taXBzL2p6NDc0MC90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUwMTY3OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9qejQ3NDAvdGltZS5jCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMCwgTGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+CisgKiAgSlo0NzQwIHBsYXRmb3JtIHRpbWUgc3VwcG9ydAorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisKKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC1qejQ3NDAvaXJxLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAidGltZXIuaCIKKworI2RlZmluZSBUSU1FUl9DTE9DS0VWRU5UIDAKKyNkZWZpbmUgVElNRVJfQ0xPQ0tTT1VSQ0UgMQorCitzdGF0aWMgdWludDE2X3Qgano0NzQwX2ppZmZpZXNfcGVyX3RpY2s7CisKK3N0YXRpYyBjeWNsZV90IGp6NDc0MF9jbG9ja3NvdXJjZV9yZWFkKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCit7CisJcmV0dXJuIGp6NDc0MF90aW1lcl9nZXRfY291bnQoVElNRVJfQ0xPQ0tTT1VSQ0UpOworfQorCitzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIGp6NDc0MF9jbG9ja3NvdXJjZSA9IHsKKwkubmFtZSA9ICJqejQ3NDAtdGltZXIiLAorCS5yYXRpbmcgPSAyMDAsCisJLnJlYWQgPSBqejQ3NDBfY2xvY2tzb3VyY2VfcmVhZCwKKwkubWFzayA9IENMT0NLU09VUkNFX01BU0soMTYpLAorCS5mbGFncyA9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAorfTsKKworc3RhdGljIGlycXJldHVybl90IGp6NDc0MF9jbG9ja2V2ZW50X2lycShpbnQgaXJxLCB2b2lkICpkZXZpZCkKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZCA9IGRldmlkOworCisJano0NzQwX3RpbWVyX2Fja19mdWxsKFRJTUVSX0NMT0NLRVZFTlQpOworCisJaWYgKGNkLT5tb2RlICE9IENMT0NLX0VWVF9NT0RFX1BFUklPRElDKQorCQlqejQ3NDBfdGltZXJfZGlzYWJsZShUSU1FUl9DTE9DS0VWRU5UKTsKKworCWNkLT5ldmVudF9oYW5kbGVyKGNkKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgano0NzQwX2Nsb2NrZXZlbnRfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2QpCit7CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKKwkJano0NzQwX3RpbWVyX3NldF9jb3VudChUSU1FUl9DTE9DS0VWRU5ULCAwKTsKKwkJano0NzQwX3RpbWVyX3NldF9wZXJpb2QoVElNRVJfQ0xPQ0tFVkVOVCwgano0NzQwX2ppZmZpZXNfcGVyX3RpY2spOworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgorCQlqejQ3NDBfdGltZXJfaXJxX2Z1bGxfZW5hYmxlKFRJTUVSX0NMT0NLRVZFTlQpOworCQlqejQ3NDBfdGltZXJfZW5hYmxlKFRJTUVSX0NMT0NLRVZFTlQpOworCQlicmVhazsKKwljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKKwkJano0NzQwX3RpbWVyX2Rpc2FibGUoVElNRVJfQ0xPQ0tFVkVOVCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBqejQ3NDBfY2xvY2tldmVudF9zZXRfbmV4dCh1bnNpZ25lZCBsb25nIGV2dCwKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZCkKK3sKKwlqejQ3NDBfdGltZXJfc2V0X2NvdW50KFRJTUVSX0NMT0NLRVZFTlQsIDApOworCWp6NDc0MF90aW1lcl9zZXRfcGVyaW9kKFRJTUVSX0NMT0NLRVZFTlQsIGV2dCk7CisJano0NzQwX3RpbWVyX2VuYWJsZShUSU1FUl9DTE9DS0VWRU5UKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBqejQ3NDBfY2xvY2tldmVudCA9IHsKKwkubmFtZSA9ICJqejQ3NDAtdGltZXIiLAorCS5mZWF0dXJlcyA9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDLAorCS5zZXRfbmV4dF9ldmVudCA9IGp6NDc0MF9jbG9ja2V2ZW50X3NldF9uZXh0LAorCS5zZXRfbW9kZSA9IGp6NDc0MF9jbG9ja2V2ZW50X3NldF9tb2RlLAorCS5yYXRpbmcgPSAyMDAsCisJLmlycSA9IEpaNDc0MF9JUlFfVENVMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHRpbWVyX2lycWFjdGlvbiA9IHsKKwkuaGFuZGxlcgk9IGp6NDc0MF9jbG9ja2V2ZW50X2lycSwKKwkuZmxhZ3MJCT0gSVJRRl9QRVJDUFUgfCBJUlFGX1RJTUVSLAorCS5uYW1lCQk9ICJqejQ3NDAtdGltZXJpcnEiLAorCS5kZXZfaWQJCT0gJmp6NDc0MF9jbG9ja2V2ZW50LAorfTsKKwordm9pZCBfX2luaXQgcGxhdF90aW1lX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCXVpbnQzMl90IGNsa19yYXRlOworCXVpbnQxNl90IGN0cmw7CisKKwlqejQ3NDBfdGltZXJfaW5pdCgpOworCisJY2xrX3JhdGUgPSBqejQ3NDBfY2xvY2tfYmRhdGEuZXh0X3JhdGUgPj4gNDsKKwlqejQ3NDBfamlmZmllc19wZXJfdGljayA9IERJVl9ST1VORF9DTE9TRVNUKGNsa19yYXRlLCBIWik7CisKKwljbG9ja2V2ZW50X3NldF9jbG9jaygmano0NzQwX2Nsb2NrZXZlbnQsIGNsa19yYXRlKTsKKwlqejQ3NDBfY2xvY2tldmVudC5taW5fZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDEwMCwgJmp6NDc0MF9jbG9ja2V2ZW50KTsKKwlqejQ3NDBfY2xvY2tldmVudC5tYXhfZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZmZmZiwgJmp6NDc0MF9jbG9ja2V2ZW50KTsKKwlqejQ3NDBfY2xvY2tldmVudC5jcHVtYXNrID0gY3B1bWFza19vZigwKTsKKworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmano0NzQwX2Nsb2NrZXZlbnQpOworCisJY2xvY2tzb3VyY2Vfc2V0X2Nsb2NrKCZqejQ3NDBfY2xvY2tzb3VyY2UsIGNsa19yYXRlKTsKKwlyZXQgPSBjbG9ja3NvdXJjZV9yZWdpc3Rlcigmano0NzQwX2Nsb2Nrc291cmNlKTsKKworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNsb2Nrc291cmNlOiAlZFxuIiwgcmV0KTsKKworCXNldHVwX2lycShKWjQ3NDBfSVJRX1RDVTAsICZ0aW1lcl9pcnFhY3Rpb24pOworCisJY3RybCA9IEpaX1RJTUVSX0NUUkxfUFJFU0NBTEVfMTYgfCBKWl9USU1FUl9DVFJMX1NSQ19FWFQ7CisKKwlqejQ3NDBfdGltZXJfc2V0X2N0cmwoVElNRVJfQ0xPQ0tFVkVOVCwgY3RybCk7CisJano0NzQwX3RpbWVyX3NldF9jdHJsKFRJTUVSX0NMT0NLU09VUkNFLCBjdHJsKTsKKworCWp6NDc0MF90aW1lcl9zZXRfcGVyaW9kKFRJTUVSX0NMT0NLRVZFTlQsIGp6NDc0MF9qaWZmaWVzX3Blcl90aWNrKTsKKwlqejQ3NDBfdGltZXJfaXJxX2Z1bGxfZW5hYmxlKFRJTUVSX0NMT0NLRVZFTlQpOworCisJano0NzQwX3RpbWVyX3NldF9wZXJpb2QoVElNRVJfQ0xPQ0tTT1VSQ0UsIDB4ZmZmZik7CisKKwlqejQ3NDBfdGltZXJfZW5hYmxlKFRJTUVSX0NMT0NLRVZFTlQpOworCWp6NDc0MF90aW1lcl9lbmFibGUoVElNRVJfQ0xPQ0tTT1VSQ0UpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2p6NDc0MC90aW1lci5jIGIvYXJjaC9taXBzL2p6NDc0MC90aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYzAxNTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvano0NzQwL3RpbWVyLmMKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAsIExhcnMtUGV0ZXIgQ2xhdXNlbiA8bGFyc0BtZXRhZm9vLmRlPgorICogIEpaNDc0MCBwbGF0Zm9ybSB0aW1lciBzdXBwb3J0CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJ0aW1lci5oIgorCisjaW5jbHVkZSA8YXNtL21hY2gtano0NzQwL2Jhc2UuaD4KKwordm9pZCBfX2lvbWVtICpqejQ3NDBfdGltZXJfYmFzZTsKKwordm9pZCBqejQ3NDBfdGltZXJfZW5hYmxlX3dhdGNoZG9nKHZvaWQpCit7CisJd3JpdGVsKEJJVCgxNiksIGp6NDc0MF90aW1lcl9iYXNlICsgSlpfUkVHX1RJTUVSX1NUT1BfQ0xFQVIpOworfQorCit2b2lkIGp6NDc0MF90aW1lcl9kaXNhYmxlX3dhdGNoZG9nKHZvaWQpCit7CisJd3JpdGVsKEJJVCgxNiksIGp6NDc0MF90aW1lcl9iYXNlICsgSlpfUkVHX1RJTUVSX1NUT1BfU0VUKTsKK30KKwordm9pZCBfX2luaXQgano0NzQwX3RpbWVyX2luaXQodm9pZCkKK3sKKwlqejQ3NDBfdGltZXJfYmFzZSA9IGlvcmVtYXAoSlo0NzQwX1RDVV9CQVNFX0FERFIsIDB4MTAwKTsKKworCWlmICghano0NzQwX3RpbWVyX2Jhc2UpCisJCXBhbmljKCJGYWlsZWQgdG8gaW9yZW1hcCB0aW1lciByZWdpc3RlcnMiKTsKKworCS8qIERpc2FibGUgYWxsIHRpbWVyIGNsb2NrcyBleGNlcHQgZm9yIHRob3NlIHVzZWQgYXMgc3lzdGVtIHRpbWVycyAqLworCXdyaXRlbCgweDAwMDEwMGZjLCBqejQ3NDBfdGltZXJfYmFzZSArIEpaX1JFR19USU1FUl9TVE9QX1NFVCk7CisKKwkvKiBUaW1lciBpcnFzIGFyZSB1bm1hc2tlZCBieSBkZWZhdWx0LCBtYXNrIHRoZW0gKi8KKwl3cml0ZWwoMHgwMGZmMDBmZiwgano0NzQwX3RpbWVyX2Jhc2UgKyBKWl9SRUdfVElNRVJfTUFTS19TRVQpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2p6NDc0MC90aW1lci5oIGIvYXJjaC9taXBzL2p6NDc0MC90aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYTM5OTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvano0NzQwL3RpbWVyLmgKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwLCBMYXJzLVBldGVyIENsYXVzZW4gPGxhcnNAbWV0YWZvby5kZT4KKyAqICBKWjQ3NDAgcGxhdGZvcm0gdGltZXIgc3VwcG9ydAorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX19NSVBTX0paNDc0MF9USU1FUl9IX18KKyNkZWZpbmUgX19NSVBTX0paNDc0MF9USU1FUl9IX18KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNkZWZpbmUgSlpfUkVHX1RJTUVSX1NUT1AJCTB4MEMKKyNkZWZpbmUgSlpfUkVHX1RJTUVSX1NUT1BfU0VUCQkweDFDCisjZGVmaW5lIEpaX1JFR19USU1FUl9TVE9QX0NMRUFSCQkweDJDCisjZGVmaW5lIEpaX1JFR19USU1FUl9FTkFCTEUJCTB4MDAKKyNkZWZpbmUgSlpfUkVHX1RJTUVSX0VOQUJMRV9TRVQJCTB4MDQKKyNkZWZpbmUgSlpfUkVHX1RJTUVSX0VOQUJMRV9DTEVBUgkweDA4CisjZGVmaW5lIEpaX1JFR19USU1FUl9GTEFHCQkweDEwCisjZGVmaW5lIEpaX1JFR19USU1FUl9GTEFHX1NFVAkJMHgxNAorI2RlZmluZSBKWl9SRUdfVElNRVJfRkxBR19DTEVBUgkJMHgxOAorI2RlZmluZSBKWl9SRUdfVElNRVJfTUFTSwkJMHgyMAorI2RlZmluZSBKWl9SRUdfVElNRVJfTUFTS19TRVQJCTB4MjQKKyNkZWZpbmUgSlpfUkVHX1RJTUVSX01BU0tfQ0xFQVIJCTB4MjgKKworI2RlZmluZSBKWl9SRUdfVElNRVJfREZSKHgpICgoKHgpICogMHgxMCkgKyAweDMwKQorI2RlZmluZSBKWl9SRUdfVElNRVJfREhSKHgpICgoKHgpICogMHgxMCkgKyAweDM0KQorI2RlZmluZSBKWl9SRUdfVElNRVJfQ05UKHgpICgoKHgpICogMHgxMCkgKyAweDM4KQorI2RlZmluZSBKWl9SRUdfVElNRVJfQ1RSTCh4KSAoKCh4KSAqIDB4MTApICsgMHgzQykKKworI2RlZmluZSBKWl9USU1FUl9JUlFfSEFMRih4KSBCSVQoKHgpICsgMHgxMCkKKyNkZWZpbmUgSlpfVElNRVJfSVJRX0ZVTEwoeCkgQklUKHgpCisKKyNkZWZpbmUgSlpfVElNRVJfQ1RSTF9QV01fQUJCUlVQVF9TSFVURE9XTglCSVQoOSkKKyNkZWZpbmUgSlpfVElNRVJfQ1RSTF9QV01fQUNUSVZFX0xPVwkJQklUKDgpCisjZGVmaW5lIEpaX1RJTUVSX0NUUkxfUFdNX0VOQUJMRQkJQklUKDcpCisjZGVmaW5lIEpaX1RJTUVSX0NUUkxfUFJFU0NBTEVfTUFTSwkJMHgxYworI2RlZmluZSBKWl9USU1FUl9DVFJMX1BSRVNDQUxFX09GRlNFVAkJMHgzCisjZGVmaW5lIEpaX1RJTUVSX0NUUkxfUFJFU0NBTEVfMQkJKDAgPDwgMykKKyNkZWZpbmUgSlpfVElNRVJfQ1RSTF9QUkVTQ0FMRV80CQkoMSA8PCAzKQorI2RlZmluZSBKWl9USU1FUl9DVFJMX1BSRVNDQUxFXzE2CQkoMiA8PCAzKQorI2RlZmluZSBKWl9USU1FUl9DVFJMX1BSRVNDQUxFXzY0CQkoMyA8PCAzKQorI2RlZmluZSBKWl9USU1FUl9DVFJMX1BSRVNDQUxFXzI1NgkJKDQgPDwgMykKKyNkZWZpbmUgSlpfVElNRVJfQ1RSTF9QUkVTQ0FMRV8xMDI0CQkoNSA8PCAzKQorCisjZGVmaW5lIEpaX1RJTUVSX0NUUkxfUFJFU0NBTEVSKHgpICgoeCkgPDwgSlpfVElNRVJfQ1RSTF9QUkVTQ0FMRV9PRkZTRVQpCisKKyNkZWZpbmUgSlpfVElNRVJfQ1RSTF9TUkNfRVhUCQlCSVQoMikKKyNkZWZpbmUgSlpfVElNRVJfQ1RSTF9TUkNfUlRDCQlCSVQoMSkKKyNkZWZpbmUgSlpfVElNRVJfQ1RSTF9TUkNfUENMSwkJQklUKDApCisKK2V4dGVybiB2b2lkIF9faW9tZW0gKmp6NDc0MF90aW1lcl9iYXNlOwordm9pZCBfX2luaXQgano0NzQwX3RpbWVyX2luaXQodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBqejQ3NDBfdGltZXJfc3RvcCh1bnNpZ25lZCBpbnQgdGltZXIpCit7CisJd3JpdGVsKEJJVCh0aW1lciksIGp6NDc0MF90aW1lcl9iYXNlICsgSlpfUkVHX1RJTUVSX1NUT1BfU0VUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGp6NDc0MF90aW1lcl9zdGFydCh1bnNpZ25lZCBpbnQgdGltZXIpCit7CisJd3JpdGVsKEJJVCh0aW1lciksIGp6NDc0MF90aW1lcl9iYXNlICsgSlpfUkVHX1RJTUVSX1NUT1BfQ0xFQVIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgano0NzQwX3RpbWVyX2lzX2VuYWJsZWQodW5zaWduZWQgaW50IHRpbWVyKQoreworCXJldHVybiByZWFkYihqejQ3NDBfdGltZXJfYmFzZSArIEpaX1JFR19USU1FUl9FTkFCTEUpICYgQklUKHRpbWVyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGp6NDc0MF90aW1lcl9lbmFibGUodW5zaWduZWQgaW50IHRpbWVyKQoreworCXdyaXRlYihCSVQodGltZXIpLCBqejQ3NDBfdGltZXJfYmFzZSArIEpaX1JFR19USU1FUl9FTkFCTEVfU0VUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGp6NDc0MF90aW1lcl9kaXNhYmxlKHVuc2lnbmVkIGludCB0aW1lcikKK3sKKwl3cml0ZWIoQklUKHRpbWVyKSwgano0NzQwX3RpbWVyX2Jhc2UgKyBKWl9SRUdfVElNRVJfRU5BQkxFX0NMRUFSKTsKK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQgano0NzQwX3RpbWVyX3NldF9wZXJpb2QodW5zaWduZWQgaW50IHRpbWVyLCB1aW50MTZfdCBwZXJpb2QpCit7CisJd3JpdGV3KHBlcmlvZCwgano0NzQwX3RpbWVyX2Jhc2UgKyBKWl9SRUdfVElNRVJfREZSKHRpbWVyKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBqejQ3NDBfdGltZXJfc2V0X2R1dHkodW5zaWduZWQgaW50IHRpbWVyLCB1aW50MTZfdCBkdXR5KQoreworCXdyaXRldyhkdXR5LCBqejQ3NDBfdGltZXJfYmFzZSArIEpaX1JFR19USU1FUl9ESFIodGltZXIpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGp6NDc0MF90aW1lcl9zZXRfY291bnQodW5zaWduZWQgaW50IHRpbWVyLCB1aW50MTZfdCBjb3VudCkKK3sKKwl3cml0ZXcoY291bnQsIGp6NDc0MF90aW1lcl9iYXNlICsgSlpfUkVHX1RJTUVSX0NOVCh0aW1lcikpOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQxNl90IGp6NDc0MF90aW1lcl9nZXRfY291bnQodW5zaWduZWQgaW50IHRpbWVyKQoreworCXJldHVybiByZWFkdyhqejQ3NDBfdGltZXJfYmFzZSArIEpaX1JFR19USU1FUl9DTlQodGltZXIpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGp6NDc0MF90aW1lcl9hY2tfZnVsbCh1bnNpZ25lZCBpbnQgdGltZXIpCit7CisJd3JpdGVsKEpaX1RJTUVSX0lSUV9GVUxMKHRpbWVyKSwgano0NzQwX3RpbWVyX2Jhc2UgKyBKWl9SRUdfVElNRVJfRkxBR19DTEVBUik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBqejQ3NDBfdGltZXJfaXJxX2Z1bGxfZW5hYmxlKHVuc2lnbmVkIGludCB0aW1lcikKK3sKKwl3cml0ZWwoSlpfVElNRVJfSVJRX0ZVTEwodGltZXIpLCBqejQ3NDBfdGltZXJfYmFzZSArIEpaX1JFR19USU1FUl9GTEFHX0NMRUFSKTsKKwl3cml0ZWwoSlpfVElNRVJfSVJRX0ZVTEwodGltZXIpLCBqejQ3NDBfdGltZXJfYmFzZSArIEpaX1JFR19USU1FUl9NQVNLX0NMRUFSKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGp6NDc0MF90aW1lcl9pcnFfZnVsbF9kaXNhYmxlKHVuc2lnbmVkIGludCB0aW1lcikKK3sKKwl3cml0ZWwoSlpfVElNRVJfSVJRX0ZVTEwodGltZXIpLCBqejQ3NDBfdGltZXJfYmFzZSArIEpaX1JFR19USU1FUl9NQVNLX1NFVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBqejQ3NDBfdGltZXJfc2V0X2N0cmwodW5zaWduZWQgaW50IHRpbWVyLCB1aW50MTZfdCBjdHJsKQoreworCXdyaXRldyhjdHJsLCBqejQ3NDBfdGltZXJfYmFzZSArIEpaX1JFR19USU1FUl9DVFJMKHRpbWVyKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDE2X3Qgano0NzQwX3RpbWVyX2dldF9jdHJsKHVuc2lnbmVkIGludCB0aW1lcikKK3sKKwlyZXR1cm4gcmVhZHcoano0NzQwX3RpbWVyX2Jhc2UgKyBKWl9SRUdfVElNRVJfQ1RSTCh0aW1lcikpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlCmluZGV4IDdhNmFjNTAuLjA2Zjg0ODIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZQpAQCAtNzYsNiArNzYsNyBAQAogb2JqLSQoQ09ORklHX0lSUV9HVDY0MVhYKQkrPSBpcnEtZ3Q2NDF4eC5vCiBvYmotJChDT05GSUdfSVJRX0dJQykJCSs9IGlycS1naWMubwogCitvYmotJChDT05GSUdfS1BST0JFUykJCSs9IGtwcm9iZXMubwogb2JqLSQoQ09ORklHXzMyQklUKQkJKz0gc2NhbGwzMi1vMzIubwogb2JqLSQoQ09ORklHXzY0QklUKQkJKz0gc2NhbGw2NC02NC5vCiBvYmotJChDT05GSUdfTUlQUzMyX0NPTVBBVCkJKz0gbGludXgzMi5vIHB0cmFjZTMyLm8gc2lnbmFsMzIubwpAQCAtMTAxLDYgKzEwMiw0IEBACiAKIG9iai0kKENPTkZJR19NSVBTX0NQVUZSRVEpCSs9IGNwdWZyZXEvCiAKLUVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCi0KIENQUEZMQUdTX3ZtbGludXgubGRzCQk6PSAkKEtCVUlMRF9DRkxBR1MpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL21pcHMva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggY2E2YzgzMi4uNmIzMGZiMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtMTI2LDcgKzEyNiw2IEBACiAJICAgICAgIHRocmVhZC5jcDBfYmFkdWFkZHIpOwogCU9GRlNFVChUSFJFQURfRUNPREUsIHRhc2tfc3RydWN0LCBcCiAJICAgICAgIHRocmVhZC5lcnJvcl9jb2RlKTsKLQlPRkZTRVQoVEhSRUFEX1RSQVBOTywgdGFza19zdHJ1Y3QsIHRocmVhZC50cmFwX25vKTsKIAlPRkZTRVQoVEhSRUFEX1RSQU1QLCB0YXNrX3N0cnVjdCwgXAogCSAgICAgICB0aHJlYWQuaXJpeF90cmFtcG9saW5lKTsKIAlPRkZTRVQoVEhSRUFEX09MRENUWCwgdGFza19zdHJ1Y3QsIFwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1yNGsuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1yNGsuYwppbmRleCAwYjI0NTBjLi4yYTRkNTBmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NldnQtcjRrLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXI0ay5jCkBAIC0xNjMsNyArMTYzLDYgQEAKIAogaW50IF9fY3B1aW5pdCByNGtfY2xvY2tldmVudF9pbml0KHZvaWQpCiB7Ci0JdWludDY0X3QgbWlwc19mcmVxID0gbWlwc19ocHRfZnJlcXVlbmN5OwogCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2Q7CiAJdW5zaWduZWQgaW50IGlycTsKQEAgLTE4OCw5ICsxODcsOSBAQAogCWNkLT5uYW1lCQk9ICJNSVBTIjsKIAljZC0+ZmVhdHVyZXMJCT0gQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVDsKIAorCWNsb2NrZXZlbnRfc2V0X2Nsb2NrKGNkLCBtaXBzX2hwdF9mcmVxdWVuY3kpOworCiAJLyogQ2FsY3VsYXRlIHRoZSBtaW4gLyBtYXggZGVsdGEgKi8KLQljZC0+bXVsdAk9IGRpdl9zYygodW5zaWduZWQgbG9uZykgbWlwc19mcmVxLCBOU0VDX1BFUl9TRUMsIDMyKTsKLQljZC0+c2hpZnQJCT0gMzI7CiAJY2QtPm1heF9kZWx0YV9ucwk9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHg3ZmZmZmZmZiwgY2QpOwogCWNkLT5taW5fZGVsdGFfbnMJPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4MzAwLCBjZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LWJ1Z3M2NC5jIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtYnVnczY0LmMKaW5kZXggNDA4ZDBhMC4uYjhiYjhiYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jcHUtYnVnczY0LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtYnVnczY0LmMKQEAgLTIzOSw3ICsyMzksNyBAQAogCXBhbmljKGJ1ZzY0aGl0LCAhREFERElfV0FSID8gZGFkZGl3YXIgOiBub3dhcik7CiB9CiAKLWludCBkYWRkaXVfYnVnIF9fY3B1aW5pdGRhdGEgPSAtMTsKK2ludCBkYWRkaXVfYnVnICA9IC0xOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfZGFkZGl1KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYwppbmRleCAzNTYyYjg1Li5iMWIzMDRlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKQEAgLTE4Nyw2ICsxODcsNyBAQAogCWNhc2UgQ1BVX0JDTTYzNTg6CiAJY2FzZSBDUFVfQ0FWSVVNX09DVEVPTjoKIAljYXNlIENQVV9DQVZJVU1fT0NURU9OX1BMVVM6CisJY2FzZSBDUFVfSlpSSVNDOgogCQljcHVfd2FpdCA9IHI0a193YWl0OwogCQlicmVhazsKIApAQCAtNzYwLDYgKzc2MSw5IEBACiAJCW9rID0gZGVjb2RlX2NvbmZpZzQoYyk7CiAKIAltaXBzX3Byb2JlX3dhdGNoX3JlZ2lzdGVycyhjKTsKKworCWlmIChjcHVfaGFzX21pcHNfcjIpCisJCWMtPmNvcmUgPSByZWFkX2MwX2ViYXNlKCkgJiAweDNmZjsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNwdV9wcm9iZV9taXBzKHN0cnVjdCBjcHVpbmZvX21pcHMgKmMsIHVuc2lnbmVkIGludCBjcHUpCkBAIC05NTYsNiArOTYwLDIyIEBACiAJfQogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgY3B1X3Byb2JlX2luZ2VuaWMoc3RydWN0IGNwdWluZm9fbWlwcyAqYywgdW5zaWduZWQgaW50IGNwdSkKK3sKKwlkZWNvZGVfY29uZmlncyhjKTsKKwkvKiBKWlJJU0MgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBDUDAgY291bnRlci4gKi8KKwljLT5vcHRpb25zICY9IH5NSVBTX0NQVV9DT1VOVEVSOworCXN3aXRjaCAoYy0+cHJvY2Vzc29yX2lkICYgMHhmZjAwKSB7CisJY2FzZSBQUklEX0lNUF9KWlJJU0M6CisJCWMtPmNwdXR5cGUgPSBDUFVfSlpSSVNDOworCQlfX2NwdV9uYW1lW2NwdV0gPSAiSW5nZW5pYyBKWlJJU0MiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwYW5pYygiVW5rbm93biBJbmdlbmljIFByb2Nlc3NvciBJRCEiKTsKKwkJYnJlYWs7CisJfQorfQorCiBjb25zdCBjaGFyICpfX2NwdV9uYW1lW05SX0NQVVNdOwogY29uc3QgY2hhciAqX19lbGZfcGxhdGZvcm07CiAKQEAgLTk5NCw2ICsxMDE0LDkgQEAKIAljYXNlIFBSSURfQ09NUF9DQVZJVU06CiAJCWNwdV9wcm9iZV9jYXZpdW0oYywgY3B1KTsKIAkJYnJlYWs7CisJY2FzZSBQUklEX0NPTVBfSU5HRU5JQzoKKwkJY3B1X3Byb2JlX2luZ2VuaWMoYywgY3B1KTsKKwkJYnJlYWs7CiAJfQogCiAJQlVHX09OKCFfX2NwdV9uYW1lW2NwdV0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9rZ2RiLmMgYi9hcmNoL21pcHMva2VybmVsL2tnZGIuYwppbmRleCA5Yjc4ZmY2Li4xZjRlMmZhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2tnZGIuYworKysgYi9hcmNoL21pcHMva2VybmVsL2tnZGIuYwpAQCAtNTAsNiArNTAsMTUxIEBACiAJeyAwLCAwfQkJCS8qIE11c3QgYmUgbGFzdCAqLwogfTsKIAorc3RydWN0IGRiZ19yZWdfZGVmX3QgZGJnX3JlZ19kZWZbREJHX01BWF9SRUdfTlVNXSA9Cit7CisJeyAiemVybyIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1swXSkgfSwKKwl7ICJhdCIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1sxXSkgfSwKKwl7ICJ2MCIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1syXSkgfSwKKwl7ICJ2MSIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1szXSkgfSwKKwl7ICJhMCIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1s0XSkgfSwKKwl7ICJhMSIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1s1XSkgfSwKKwl7ICJhMiIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1s2XSkgfSwKKwl7ICJhMyIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1s3XSkgfSwKKwl7ICJ0MCIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1s4XSkgfSwKKwl7ICJ0MSIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1s5XSkgfSwKKwl7ICJ0MiIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1sxMF0pIH0sCisJeyAidDMiLCBHREJfU0laRU9GX1JFRywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHJlZ3NbMTFdKSB9LAorCXsgInQ0IiwgR0RCX1NJWkVPRl9SRUcsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByZWdzWzEyXSkgfSwKKwl7ICJ0NSIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1sxM10pIH0sCisJeyAidDYiLCBHREJfU0laRU9GX1JFRywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHJlZ3NbMTRdKSB9LAorCXsgInQ3IiwgR0RCX1NJWkVPRl9SRUcsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByZWdzWzE1XSkgfSwKKwl7ICJzMCIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1sxNl0pIH0sCisJeyAiczEiLCBHREJfU0laRU9GX1JFRywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHJlZ3NbMTddKSB9LAorCXsgInMyIiwgR0RCX1NJWkVPRl9SRUcsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByZWdzWzE4XSkgfSwKKwl7ICJzMyIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1sxOV0pIH0sCisJeyAiczQiLCBHREJfU0laRU9GX1JFRywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHJlZ3NbMjBdKSB9LAorCXsgInM1IiwgR0RCX1NJWkVPRl9SRUcsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByZWdzWzIxXSkgfSwKKwl7ICJzNiIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1syMl0pIH0sCisJeyAiczciLCBHREJfU0laRU9GX1JFRywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHJlZ3NbMjNdKSB9LAorCXsgInQ4IiwgR0RCX1NJWkVPRl9SRUcsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByZWdzWzI0XSkgfSwKKwl7ICJ0OSIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1syNV0pIH0sCisJeyAiazAiLCBHREJfU0laRU9GX1JFRywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHJlZ3NbMjZdKSB9LAorCXsgImsxIiwgR0RCX1NJWkVPRl9SRUcsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByZWdzWzI3XSkgfSwKKwl7ICJncCIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1syOF0pIH0sCisJeyAic3AiLCBHREJfU0laRU9GX1JFRywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHJlZ3NbMjldKSB9LAorCXsgInM4IiwgR0RCX1NJWkVPRl9SRUcsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByZWdzWzMwXSkgfSwKKwl7ICJyYSIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcmVnc1szMV0pIH0sCisJeyAic3IiLCBHREJfU0laRU9GX1JFRywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGNwMF9zdGF0dXMpIH0sCisJeyAibG8iLCBHREJfU0laRU9GX1JFRywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGxvKSB9LAorCXsgImhpIiwgR0RCX1NJWkVPRl9SRUcsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBoaSkgfSwKKwl7ICJiYWQiLCBHREJfU0laRU9GX1JFRywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGNwMF9iYWR2YWRkcikgfSwKKwl7ICJjYXVzZSIsIEdEQl9TSVpFT0ZfUkVHLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgY3AwX2NhdXNlKSB9LAorCXsgInBjIiwgR0RCX1NJWkVPRl9SRUcsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBjcDBfZXBjKSB9LAorCXsgImYwIiwgR0RCX1NJWkVPRl9SRUcsIDAgfSwKKwl7ICJmMSIsIEdEQl9TSVpFT0ZfUkVHLCAxIH0sCisJeyAiZjIiLCBHREJfU0laRU9GX1JFRywgMiB9LAorCXsgImYzIiwgR0RCX1NJWkVPRl9SRUcsIDMgfSwKKwl7ICJmNCIsIEdEQl9TSVpFT0ZfUkVHLCA0IH0sCisJeyAiZjUiLCBHREJfU0laRU9GX1JFRywgNSB9LAorCXsgImY2IiwgR0RCX1NJWkVPRl9SRUcsIDYgfSwKKwl7ICJmNyIsIEdEQl9TSVpFT0ZfUkVHLCA3IH0sCisJeyAiZjgiLCBHREJfU0laRU9GX1JFRywgOCB9LAorCXsgImY5IiwgR0RCX1NJWkVPRl9SRUcsIDkgfSwKKwl7ICJmMTAiLCBHREJfU0laRU9GX1JFRywgMTAgfSwKKwl7ICJmMTEiLCBHREJfU0laRU9GX1JFRywgMTEgfSwKKwl7ICJmMTIiLCBHREJfU0laRU9GX1JFRywgMTIgfSwKKwl7ICJmMTMiLCBHREJfU0laRU9GX1JFRywgMTMgfSwKKwl7ICJmMTQiLCBHREJfU0laRU9GX1JFRywgMTQgfSwKKwl7ICJmMTUiLCBHREJfU0laRU9GX1JFRywgMTUgfSwKKwl7ICJmMTYiLCBHREJfU0laRU9GX1JFRywgMTYgfSwKKwl7ICJmMTciLCBHREJfU0laRU9GX1JFRywgMTcgfSwKKwl7ICJmMTgiLCBHREJfU0laRU9GX1JFRywgMTggfSwKKwl7ICJmMTkiLCBHREJfU0laRU9GX1JFRywgMTkgfSwKKwl7ICJmMjAiLCBHREJfU0laRU9GX1JFRywgMjAgfSwKKwl7ICJmMjEiLCBHREJfU0laRU9GX1JFRywgMjEgfSwKKwl7ICJmMjIiLCBHREJfU0laRU9GX1JFRywgMjIgfSwKKwl7ICJmMjMiLCBHREJfU0laRU9GX1JFRywgMjMgfSwKKwl7ICJmMjQiLCBHREJfU0laRU9GX1JFRywgMjQgfSwKKwl7ICJmMjUiLCBHREJfU0laRU9GX1JFRywgMjUgfSwKKwl7ICJmMjYiLCBHREJfU0laRU9GX1JFRywgMjYgfSwKKwl7ICJmMjciLCBHREJfU0laRU9GX1JFRywgMjcgfSwKKwl7ICJmMjgiLCBHREJfU0laRU9GX1JFRywgMjggfSwKKwl7ICJmMjkiLCBHREJfU0laRU9GX1JFRywgMjkgfSwKKwl7ICJmMzAiLCBHREJfU0laRU9GX1JFRywgMzAgfSwKKwl7ICJmMzEiLCBHREJfU0laRU9GX1JFRywgMzEgfSwKKwl7ICJmc3IiLCBHREJfU0laRU9GX1JFRywgMCB9LAorCXsgImZpciIsIEdEQl9TSVpFT0ZfUkVHLCAwIH0sCit9OworCitpbnQgZGJnX3NldF9yZWcoaW50IHJlZ25vLCB2b2lkICptZW0sIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBmcF9yZWc7CisKKwlpZiAocmVnbm8gPCAwIHx8IHJlZ25vID49IERCR19NQVhfUkVHX05VTSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGJnX3JlZ19kZWZbcmVnbm9dLm9mZnNldCAhPSAtMSAmJiByZWdubyA8IDM4KSB7CisJCW1lbWNweSgodm9pZCAqKXJlZ3MgKyBkYmdfcmVnX2RlZltyZWdub10ub2Zmc2V0LCBtZW0sCisJCSAgICAgICBkYmdfcmVnX2RlZltyZWdub10uc2l6ZSk7CisJfSBlbHNlIGlmIChjdXJyZW50ICYmIGRiZ19yZWdfZGVmW3JlZ25vXS5vZmZzZXQgIT0gLTEgJiYgcmVnbm8gPCA3MikgeworCQkvKiBGUCByZWdpc3RlcnMgMzggLT4gNjkgKi8KKwkJaWYgKCEocmVncy0+Y3AwX3N0YXR1cyAmIFNUMF9DVTEpKQorCQkJcmV0dXJuIDA7CisJCWlmIChyZWdubyA9PSA3MCkgeworCQkJLyogUHJvY2VzcyB0aGUgZmNyMzEvZnNyIChyZWdpc3RlciA3MCkgKi8KKwkJCW1lbWNweSgodm9pZCAqKSZjdXJyZW50LT50aHJlYWQuZnB1LmZjcjMxLCBtZW0sCisJCQkgICAgICAgZGJnX3JlZ19kZWZbcmVnbm9dLnNpemUpOworCQkJZ290byBvdXRfc2F2ZTsKKwkJfSBlbHNlIGlmIChyZWdubyA9PSA3MSkgeworCQkJLyogSWdub3JlIHRoZSBmaXIgKHJlZ2lzdGVyIDcxKSAqLworCQkJZ290byBvdXRfc2F2ZTsKKwkJfQorCQlmcF9yZWcgPSBkYmdfcmVnX2RlZltyZWdub10ub2Zmc2V0OworCQltZW1jcHkoKHZvaWQgKikmY3VycmVudC0+dGhyZWFkLmZwdS5mcHJbZnBfcmVnXSwgbWVtLAorCQkgICAgICAgZGJnX3JlZ19kZWZbcmVnbm9dLnNpemUpOworb3V0X3NhdmU6CisJCXJlc3RvcmVfZnAoY3VycmVudCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2NoYXIgKmRiZ19nZXRfcmVnKGludCByZWdubywgdm9pZCAqbWVtLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgZnBfcmVnOworCisJaWYgKHJlZ25vID49IERCR19NQVhfUkVHX05VTSB8fCByZWdubyA8IDApCisJCXJldHVybiBOVUxMOworCisJaWYgKGRiZ19yZWdfZGVmW3JlZ25vXS5vZmZzZXQgIT0gLTEgJiYgcmVnbm8gPCAzOCkgeworCQkvKiBGaXJzdCAzOCByZWdpc3RlcnMgKi8KKwkJbWVtY3B5KG1lbSwgKHZvaWQgKilyZWdzICsgZGJnX3JlZ19kZWZbcmVnbm9dLm9mZnNldCwKKwkJICAgICAgIGRiZ19yZWdfZGVmW3JlZ25vXS5zaXplKTsKKwl9IGVsc2UgaWYgKGN1cnJlbnQgJiYgZGJnX3JlZ19kZWZbcmVnbm9dLm9mZnNldCAhPSAtMSAmJiByZWdubyA8IDcyKSB7CisJCS8qIEZQIHJlZ2lzdGVycyAzOCAtPiA2OSAqLworCQlpZiAoIShyZWdzLT5jcDBfc3RhdHVzICYgU1QwX0NVMSkpCisJCQlnb3RvIG91dDsKKwkJc2F2ZV9mcChjdXJyZW50KTsKKwkJaWYgKHJlZ25vID09IDcwKSB7CisJCQkvKiBQcm9jZXNzIHRoZSBmY3IzMS9mc3IgKHJlZ2lzdGVyIDcwKSAqLworCQkJbWVtY3B5KG1lbSwgKHZvaWQgKikmY3VycmVudC0+dGhyZWFkLmZwdS5mY3IzMSwKKwkJCSAgICAgICBkYmdfcmVnX2RlZltyZWdub10uc2l6ZSk7CisJCQlnb3RvIG91dDsKKwkJfSBlbHNlIGlmIChyZWdubyA9PSA3MSkgeworCQkJLyogSWdub3JlIHRoZSBmaXIgKHJlZ2lzdGVyIDcxKSAqLworCQkJbWVtc2V0KG1lbSwgMCwgZGJnX3JlZ19kZWZbcmVnbm9dLnNpemUpOworCQkJZ290byBvdXQ7CisJCX0KKwkJZnBfcmVnID0gZGJnX3JlZ19kZWZbcmVnbm9dLm9mZnNldDsKKwkJbWVtY3B5KG1lbSwgKHZvaWQgKikmY3VycmVudC0+dGhyZWFkLmZwdS5mcHJbZnBfcmVnXSwKKwkJICAgICAgIGRiZ19yZWdfZGVmW3JlZ25vXS5zaXplKTsKKwl9CisKK291dDoKKwlyZXR1cm4gZGJnX3JlZ19kZWZbcmVnbm9dLm5hbWU7CisKK30KKwogdm9pZCBhcmNoX2tnZGJfYnJlYWtwb2ludCh2b2lkKQogewogCV9fYXNtX18gX192b2xhdGlsZV9fKApAQCAtODQsNjQgKzIyOSw2IEBACiAJcmV0dXJuIFNJR0hVUDsJCS8qIGRlZmF1bHQgZm9yIHRoaW5ncyB3ZSBkb24ndCBrbm93IGFib3V0ICovCiB9CiAKLXZvaWQgcHRfcmVnc190b19nZGJfcmVncyh1bnNpZ25lZCBsb25nICpnZGJfcmVncywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JaW50IHJlZzsKLQotI2lmIChLR0RCX0dEQl9SRUdfU0laRSA9PSAzMikKLQl1MzIgKnB0ciA9ICh1MzIgKilnZGJfcmVnczsKLSNlbHNlCi0JdTY0ICpwdHIgPSAodTY0ICopZ2RiX3JlZ3M7Ci0jZW5kaWYKLQotCWZvciAocmVnID0gMDsgcmVnIDwgMzI7IHJlZysrKQotCQkqKHB0cisrKSA9IHJlZ3MtPnJlZ3NbcmVnXTsKLQotCSoocHRyKyspID0gcmVncy0+Y3AwX3N0YXR1czsKLQkqKHB0cisrKSA9IHJlZ3MtPmxvOwotCSoocHRyKyspID0gcmVncy0+aGk7Ci0JKihwdHIrKykgPSByZWdzLT5jcDBfYmFkdmFkZHI7Ci0JKihwdHIrKykgPSByZWdzLT5jcDBfY2F1c2U7Ci0JKihwdHIrKykgPSByZWdzLT5jcDBfZXBjOwotCi0JLyogRlAgUkVHUyAqLwotCWlmICghKGN1cnJlbnQgJiYgKHJlZ3MtPmNwMF9zdGF0dXMgJiBTVDBfQ1UxKSkpCi0JCXJldHVybjsKLQotCXNhdmVfZnAoY3VycmVudCk7Ci0JZm9yIChyZWcgPSAwOyByZWcgPCAzMjsgcmVnKyspCi0JCSoocHRyKyspID0gY3VycmVudC0+dGhyZWFkLmZwdS5mcHJbcmVnXTsKLX0KLQotdm9pZCBnZGJfcmVnc190b19wdF9yZWdzKHVuc2lnbmVkIGxvbmcgKmdkYl9yZWdzLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlpbnQgcmVnOwotCi0jaWYgKEtHREJfR0RCX1JFR19TSVpFID09IDMyKQotCWNvbnN0IHUzMiAqcHRyID0gKHUzMiAqKWdkYl9yZWdzOwotI2Vsc2UKLQljb25zdCB1NjQgKnB0ciA9ICh1NjQgKilnZGJfcmVnczsKLSNlbmRpZgotCi0JZm9yIChyZWcgPSAwOyByZWcgPCAzMjsgcmVnKyspCi0JCXJlZ3MtPnJlZ3NbcmVnXSA9ICoocHRyKyspOwotCi0JcmVncy0+Y3AwX3N0YXR1cyA9ICoocHRyKyspOwotCXJlZ3MtPmxvID0gKihwdHIrKyk7Ci0JcmVncy0+aGkgPSAqKHB0cisrKTsKLQlyZWdzLT5jcDBfYmFkdmFkZHIgPSAqKHB0cisrKTsKLQlyZWdzLT5jcDBfY2F1c2UgPSAqKHB0cisrKTsKLQlyZWdzLT5jcDBfZXBjID0gKihwdHIrKyk7Ci0KLQkvKiBGUCBSRUdTIGZyb20gY3VycmVudCAqLwotCWlmICghKGN1cnJlbnQgJiYgKHJlZ3MtPmNwMF9zdGF0dXMgJiBTVDBfQ1UxKSkpCi0JCXJldHVybjsKLQotCWZvciAocmVnID0gMDsgcmVnIDwgMzI7IHJlZysrKQotCQljdXJyZW50LT50aHJlYWQuZnB1LmZwcltyZWddID0gKihwdHIrKyk7Ci0JcmVzdG9yZV9mcChjdXJyZW50KTsKLX0KLQogLyoKICAqIFNpbWlsYXIgdG8gcmVnc190b19nZGJfcmVncygpIGV4Y2VwdCB0aGF0IHByb2Nlc3MgaXMgc2xlZXBpbmcgYW5kIHNvCiAgKiB3ZSBtYXkgbm90IGJlIGFibGUgdG8gZ2V0IGFsbCB0aGUgaW5mby4KQEAgLTI0Miw3ICszMjksNyBAQAogfTsKIAogLyoKLSAqIEhhbmRsZSB0aGUgJ3MnIGFuZCAnYycgY29tbWFuZHMKKyAqIEhhbmRsZSB0aGUgJ2MnIGNvbW1hbmQKICAqLwogaW50IGtnZGJfYXJjaF9oYW5kbGVfZXhjZXB0aW9uKGludCB2ZWN0b3IsIGludCBzaWdubywgaW50IGVycl9jb2RlLAogCQkJICAgICAgIGNoYXIgKnJlbWNvbV9pbl9idWZmZXIsIGNoYXIgKnJlbWNvbV9vdXRfYnVmZmVyLApAQCAtMjUwLDIwICszMzcsMTQgQEAKIHsKIAljaGFyICpwdHI7CiAJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAlzd2l0Y2ggKHJlbWNvbV9pbl9idWZmZXJbMF0pIHsKLQljYXNlICdzJzoKIAljYXNlICdjJzoKIAkJLyogaGFuZGxlIHRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgKi8KIAkJcHRyID0gJnJlbWNvbV9pbl9idWZmZXJbMV07CiAJCWlmIChrZ2RiX2hleDJsb25nKCZwdHIsICZhZGRyZXNzKSkKIAkJCXJlZ3MtPmNwMF9lcGMgPSBhZGRyZXNzOwogCi0JCWF0b21pY19zZXQoJmtnZGJfY3B1X2RvaW5nX3NpbmdsZV9zdGVwLCAtMSk7Ci0JCWlmIChyZW1jb21faW5fYnVmZmVyWzBdID09ICdzJykKLQkJCWF0b21pY19zZXQoJmtnZGJfY3B1X2RvaW5nX3NpbmdsZV9zdGVwLCBjcHUpOwotCiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL21pcHMva2VybmVsL2twcm9iZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTI4NjgzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTAsMCArMSw1NTcgQEAKKy8qCisgKiAgS2VybmVsIFByb2JlcyAoS1Byb2JlcykKKyAqICBhcmNoL21pcHMva2VybmVsL2twcm9iZXMuYworICoKKyAqICBDb3B5cmlnaHQgMjAwNiBTb255IENvcnAuCisgKiAgQ29weXJpZ2h0IDIwMTAgQ2F2aXVtIE5ldHdvcmtzCisgKgorICogIFNvbWUgcG9ydGlvbnMgY29waWVkIGZyb20gdGhlIHBvd2VycGMgdmVyc2lvbi4KKyAqCisgKiAgIENvcHlyaWdodCAoQykgSUJNIENvcnBvcmF0aW9uLCAyMDAyLCAyMDA0CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9icmVhay5oPgorI2luY2x1ZGUgPGFzbS9pbnN0Lmg+CisKK3N0YXRpYyBjb25zdCB1bmlvbiBtaXBzX2luc3RydWN0aW9uIGJyZWFrcG9pbnRfaW5zbiA9IHsKKwkuYl9mb3JtYXQgPSB7CisJCS5vcGNvZGUgPSBzcGVjX29wLAorCQkuY29kZSA9IEJSS19LUFJPQkVfQlAsCisJCS5mdW5jID0gYnJlYWtfb3AKKwl9Cit9OworCitzdGF0aWMgY29uc3QgdW5pb24gbWlwc19pbnN0cnVjdGlvbiBicmVha3BvaW50Ml9pbnNuID0geworCS5iX2Zvcm1hdCA9IHsKKwkJLm9wY29kZSA9IHNwZWNfb3AsCisJCS5jb2RlID0gQlJLX0tQUk9CRV9TU1RFUEJQLAorCQkuZnVuYyA9IGJyZWFrX29wCisJfQorfTsKKworREVGSU5FX1BFUl9DUFUoc3RydWN0IGtwcm9iZSAqLCBjdXJyZW50X2twcm9iZSk7CitERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga3Byb2JlX2N0bGJsaywga3Byb2JlX2N0bGJsayk7CisKK3N0YXRpYyBpbnQgX19rcHJvYmVzIGluc25faGFzX2RlbGF5c2xvdCh1bmlvbiBtaXBzX2luc3RydWN0aW9uIGluc24pCit7CisJc3dpdGNoIChpbnNuLmlfZm9ybWF0Lm9wY29kZSkgeworCisJCS8qCisJCSAqIFRoaXMgZ3JvdXAgY29udGFpbnM6CisJCSAqIGpyIGFuZCBqYWxyIGFyZSBpbiByX2Zvcm1hdCBmb3JtYXQuCisJCSAqLworCWNhc2Ugc3BlY19vcDoKKwkJc3dpdGNoIChpbnNuLnJfZm9ybWF0LmZ1bmMpIHsKKwkJY2FzZSBqcl9vcDoKKwkJY2FzZSBqYWxyX29wOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGluc25fb2s7CisJCX0KKworCQkvKgorCQkgKiBUaGlzIGdyb3VwIGNvbnRhaW5zOgorCQkgKiBibHR6X29wLCBiZ2V6X29wLCBibHR6bF9vcCwgYmdlemxfb3AsCisJCSAqIGJsdHphbF9vcCwgYmdlemFsX29wLCBibHR6YWxsX29wLCBiZ2V6YWxsX29wLgorCQkgKi8KKwljYXNlIGJjb25kX29wOgorCisJCS8qCisJCSAqIFRoZXNlIGFyZSB1bmNvbmRpdGlvbmFsIGFuZCBpbiBqX2Zvcm1hdC4KKwkJICovCisJY2FzZSBqYWxfb3A6CisJY2FzZSBqX29wOgorCisJCS8qCisJCSAqIFRoZXNlIGFyZSBjb25kaXRpb25hbCBhbmQgaW4gaV9mb3JtYXQuCisJCSAqLworCWNhc2UgYmVxX29wOgorCWNhc2UgYmVxbF9vcDoKKwljYXNlIGJuZV9vcDoKKwljYXNlIGJuZWxfb3A6CisJY2FzZSBibGV6X29wOgorCWNhc2UgYmxlemxfb3A6CisJY2FzZSBiZ3R6X29wOgorCWNhc2UgYmd0emxfb3A6CisKKwkJLyoKKwkJICogVGhlc2UgYXJlIHRoZSBGUEEvY3AxIGJyYW5jaCBpbnN0cnVjdGlvbnMuCisJCSAqLworCWNhc2UgY29wMV9vcDoKKworI2lmZGVmIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTgorCWNhc2UgbHdjMl9vcDogLyogVGhpcyBpcyBiYml0MCBvbiBPY3Rlb24gKi8KKwljYXNlIGxkYzJfb3A6IC8qIFRoaXMgaXMgYmJpdDAzMiBvbiBPY3Rlb24gKi8KKwljYXNlIHN3YzJfb3A6IC8qIFRoaXMgaXMgYmJpdDEgb24gT2N0ZW9uICovCisJY2FzZSBzZGMyX29wOiAvKiBUaGlzIGlzIGJiaXQxMzIgb24gT2N0ZW9uICovCisjZW5kaWYKKwkJcmV0dXJuIDE7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQoraW5zbl9vazoKKwlyZXR1cm4gMDsKK30KKworaW50IF9fa3Byb2JlcyBhcmNoX3ByZXBhcmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJdW5pb24gbWlwc19pbnN0cnVjdGlvbiBpbnNuOworCXVuaW9uIG1pcHNfaW5zdHJ1Y3Rpb24gcHJldl9pbnNuOworCWludCByZXQgPSAwOworCisJcHJldl9pbnNuID0gcC0+YWRkclstMV07CisJaW5zbiA9IHAtPmFkZHJbMF07CisKKwlpZiAoaW5zbl9oYXNfZGVsYXlzbG90KGluc24pIHx8IGluc25faGFzX2RlbGF5c2xvdChwcmV2X2luc24pKSB7CisJCXByX25vdGljZSgiS3Byb2JlcyBmb3IgYnJhbmNoIGFuZCBqdW1wIGluc3RydWN0aW9ucyBhcmUgbm90IHN1cHBvcnRlZFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGluc246IG11c3QgYmUgb24gc3BlY2lhbCBleGVjdXRhYmxlIHBhZ2Ugb24gbWlwcy4gKi8KKwlwLT5haW5zbi5pbnNuID0gZ2V0X2luc25fc2xvdCgpOworCWlmICghcC0+YWluc24uaW5zbikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIEluIHRoZSBrcHJvYmUtPmFpbnNuLmluc25bXSBhcnJheSB3ZSBzdG9yZSB0aGUgb3JpZ2luYWwKKwkgKiBpbnN0cnVjdGlvbiBhdCBpbmRleCB6ZXJvIGFuZCBhIGJyZWFrIHRyYXAgaW5zdHJ1Y3Rpb24gYXQKKwkgKiBpbmRleCBvbmUuCisJICovCisKKwltZW1jcHkoJnAtPmFpbnNuLmluc25bMF0sIHAtPmFkZHIsIHNpemVvZihrcHJvYmVfb3Bjb2RlX3QpKTsKKwlwLT5haW5zbi5pbnNuWzFdID0gYnJlYWtwb2ludDJfaW5zbjsKKwlwLT5vcGNvZGUgPSAqcC0+YWRkcjsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgX19rcHJvYmVzIGFyY2hfYXJtX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQoreworCSpwLT5hZGRyID0gYnJlYWtwb2ludF9pbnNuOworCWZsdXNoX2luc25fc2xvdChwKTsKK30KKwordm9pZCBfX2twcm9iZXMgYXJjaF9kaXNhcm1fa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJKnAtPmFkZHIgPSBwLT5vcGNvZGU7CisJZmx1c2hfaW5zbl9zbG90KHApOworfQorCit2b2lkIF9fa3Byb2JlcyBhcmNoX3JlbW92ZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKK3sKKwlmcmVlX2luc25fc2xvdChwLT5haW5zbi5pbnNuLCAwKTsKK30KKworc3RhdGljIHZvaWQgc2F2ZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKK3sKKwlrY2ItPnByZXZfa3Byb2JlLmtwID0ga3Byb2JlX3J1bm5pbmcoKTsKKwlrY2ItPnByZXZfa3Byb2JlLnN0YXR1cyA9IGtjYi0+a3Byb2JlX3N0YXR1czsKKwlrY2ItPnByZXZfa3Byb2JlLm9sZF9TUiA9IGtjYi0+a3Byb2JlX29sZF9TUjsKKwlrY2ItPnByZXZfa3Byb2JlLnNhdmVkX1NSID0ga2NiLT5rcHJvYmVfc2F2ZWRfU1I7CisJa2NiLT5wcmV2X2twcm9iZS5zYXZlZF9lcGMgPSBrY2ItPmtwcm9iZV9zYXZlZF9lcGM7Cit9CisKK3N0YXRpYyB2b2lkIHJlc3RvcmVfcHJldmlvdXNfa3Byb2JlKHN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCit7CisJX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSkgPSBrY2ItPnByZXZfa3Byb2JlLmtwOworCWtjYi0+a3Byb2JlX3N0YXR1cyA9IGtjYi0+cHJldl9rcHJvYmUuc3RhdHVzOworCWtjYi0+a3Byb2JlX29sZF9TUiA9IGtjYi0+cHJldl9rcHJvYmUub2xkX1NSOworCWtjYi0+a3Byb2JlX3NhdmVkX1NSID0ga2NiLT5wcmV2X2twcm9iZS5zYXZlZF9TUjsKKwlrY2ItPmtwcm9iZV9zYXZlZF9lcGMgPSBrY2ItPnByZXZfa3Byb2JlLnNhdmVkX2VwYzsKK30KKworc3RhdGljIHZvaWQgc2V0X2N1cnJlbnRfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJICAgICAgIHN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCit7CisJX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSkgPSBwOworCWtjYi0+a3Byb2JlX3NhdmVkX1NSID0ga2NiLT5rcHJvYmVfb2xkX1NSID0gKHJlZ3MtPmNwMF9zdGF0dXMgJiBTVDBfSUUpOworCWtjYi0+a3Byb2JlX3NhdmVkX2VwYyA9IHJlZ3MtPmNwMF9lcGM7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfc2luZ2xlc3RlcChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZWdzLT5jcDBfc3RhdHVzICY9IH5TVDBfSUU7CisKKwkvKiBzaW5nbGUgc3RlcCBpbmxpbmUgaWYgdGhlIGluc3RydWN0aW9uIGlzIGEgYnJlYWsgKi8KKwlpZiAocC0+b3Bjb2RlLndvcmQgPT0gYnJlYWtwb2ludF9pbnNuLndvcmQgfHwKKwkgICAgcC0+b3Bjb2RlLndvcmQgPT0gYnJlYWtwb2ludDJfaW5zbi53b3JkKQorCQlyZWdzLT5jcDBfZXBjID0gKHVuc2lnbmVkIGxvbmcpcC0+YWRkcjsKKwllbHNlCisJCXJlZ3MtPmNwMF9lcGMgPSAodW5zaWduZWQgbG9uZykmcC0+YWluc24uaW5zblswXTsKK30KKworc3RhdGljIGludCBfX2twcm9iZXMga3Byb2JlX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGtwcm9iZSAqcDsKKwlpbnQgcmV0ID0gMDsKKwlrcHJvYmVfb3Bjb2RlX3QgKmFkZHI7CisJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYjsKKworCWFkZHIgPSAoa3Byb2JlX29wY29kZV90ICopIHJlZ3MtPmNwMF9lcGM7CisKKwkvKgorCSAqIFdlIGRvbid0IHdhbnQgdG8gYmUgcHJlZW1wdGVkIGZvciB0aGUgZW50aXJlCisJICogZHVyYXRpb24gb2Yga3Byb2JlIHByb2Nlc3NpbmcKKwkgKi8KKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlrY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOworCisJLyogQ2hlY2sgd2UncmUgbm90IGFjdHVhbGx5IHJlY3Vyc2luZyAqLworCWlmIChrcHJvYmVfcnVubmluZygpKSB7CisJCXAgPSBnZXRfa3Byb2JlKGFkZHIpOworCQlpZiAocCkgeworCQkJaWYgKGtjYi0+a3Byb2JlX3N0YXR1cyA9PSBLUFJPQkVfSElUX1NTICYmCisJCQkgICAgcC0+YWluc24uaW5zbi0+d29yZCA9PSBicmVha3BvaW50X2luc24ud29yZCkgeworCQkJCXJlZ3MtPmNwMF9zdGF0dXMgJj0gflNUMF9JRTsKKwkJCQlyZWdzLT5jcDBfc3RhdHVzIHw9IGtjYi0+a3Byb2JlX3NhdmVkX1NSOworCQkJCWdvdG8gbm9fa3Byb2JlOworCQkJfQorCQkJLyoKKwkJCSAqIFdlIGhhdmUgcmVlbnRlcmVkIHRoZSBrcHJvYmVfaGFuZGxlcigpLCBzaW5jZQorCQkJICogYW5vdGhlciBwcm9iZSB3YXMgaGl0IHdoaWxlIHdpdGhpbiB0aGUgaGFuZGxlci4KKwkJCSAqIFdlIGhlcmUgc2F2ZSB0aGUgb3JpZ2luYWwga3Byb2JlcyB2YXJpYWJsZXMgYW5kCisJCQkgKiBqdXN0IHNpbmdsZSBzdGVwIG9uIHRoZSBpbnN0cnVjdGlvbiBvZiB0aGUgbmV3IHByb2JlCisJCQkgKiB3aXRob3V0IGNhbGxpbmcgYW55IHVzZXIgaGFuZGxlcnMuCisJCQkgKi8KKwkJCXNhdmVfcHJldmlvdXNfa3Byb2JlKGtjYik7CisJCQlzZXRfY3VycmVudF9rcHJvYmUocCwgcmVncywga2NiKTsKKwkJCWtwcm9iZXNfaW5jX25taXNzZWRfY291bnQocCk7CisJCQlwcmVwYXJlX3NpbmdsZXN0ZXAocCwgcmVncyk7CisJCQlrY2ItPmtwcm9iZV9zdGF0dXMgPSBLUFJPQkVfUkVFTlRFUjsKKwkJCXJldHVybiAxOworCQl9IGVsc2UgeworCQkJaWYgKGFkZHItPndvcmQgIT0gYnJlYWtwb2ludF9pbnNuLndvcmQpIHsKKwkJCQkvKgorCQkJCSAqIFRoZSBicmVha3BvaW50IGluc3RydWN0aW9uIHdhcyByZW1vdmVkIGJ5CisJCQkJICogYW5vdGhlciBjcHUgcmlnaHQgYWZ0ZXIgd2UgaGl0LCBubyBmdXJ0aGVyCisJCQkJICogaGFuZGxpbmcgb2YgdGhpcyBpbnRlcnJ1cHQgaXMgYXBwcm9wcmlhdGUKKwkJCQkgKi8KKwkJCQlyZXQgPSAxOworCQkJCWdvdG8gbm9fa3Byb2JlOworCQkJfQorCQkJcCA9IF9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpOworCQkJaWYgKHAtPmJyZWFrX2hhbmRsZXIgJiYgcC0+YnJlYWtfaGFuZGxlcihwLCByZWdzKSkKKwkJCQlnb3RvIHNzX3Byb2JlOworCQl9CisJCWdvdG8gbm9fa3Byb2JlOworCX0KKworCXAgPSBnZXRfa3Byb2JlKGFkZHIpOworCWlmICghcCkgeworCQlpZiAoYWRkci0+d29yZCAhPSBicmVha3BvaW50X2luc24ud29yZCkgeworCQkJLyoKKwkJCSAqIFRoZSBicmVha3BvaW50IGluc3RydWN0aW9uIHdhcyByZW1vdmVkIHJpZ2h0CisJCQkgKiBhZnRlciB3ZSBoaXQgaXQuICBBbm90aGVyIGNwdSBoYXMgcmVtb3ZlZAorCQkJICogZWl0aGVyIGEgcHJvYmVwb2ludCBvciBhIGRlYnVnZ2VyIGJyZWFrcG9pbnQKKwkJCSAqIGF0IHRoaXMgYWRkcmVzcy4gIEluIGVpdGhlciBjYXNlLCBubyBmdXJ0aGVyCisJCQkgKiBoYW5kbGluZyBvZiB0aGlzIGludGVycnVwdCBpcyBhcHByb3ByaWF0ZS4KKwkJCSAqLworCQkJcmV0ID0gMTsKKwkJfQorCQkvKiBOb3Qgb25lIG9mIG91cnM6IGxldCBrZXJuZWwgaGFuZGxlIGl0ICovCisJCWdvdG8gbm9fa3Byb2JlOworCX0KKworCXNldF9jdXJyZW50X2twcm9iZShwLCByZWdzLCBrY2IpOworCWtjYi0+a3Byb2JlX3N0YXR1cyA9IEtQUk9CRV9ISVRfQUNUSVZFOworCisJaWYgKHAtPnByZV9oYW5kbGVyICYmIHAtPnByZV9oYW5kbGVyKHAsIHJlZ3MpKSB7CisJCS8qIGhhbmRsZXIgaGFzIGFscmVhZHkgc2V0IHRoaW5ncyB1cCwgc28gc2tpcCBzcyBzZXR1cCAqLworCQlyZXR1cm4gMTsKKwl9CisKK3NzX3Byb2JlOgorCXByZXBhcmVfc2luZ2xlc3RlcChwLCByZWdzKTsKKwlrY2ItPmtwcm9iZV9zdGF0dXMgPSBLUFJPQkVfSElUX1NTOworCXJldHVybiAxOworCitub19rcHJvYmU6CisJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworCXJldHVybiByZXQ7CisKK30KKworLyoKKyAqIENhbGxlZCBhZnRlciBzaW5nbGUtc3RlcHBpbmcuICBwLT5hZGRyIGlzIHRoZSBhZGRyZXNzIG9mIHRoZQorICogaW5zdHJ1Y3Rpb24gd2hvc2UgZmlyc3QgYnl0ZSBoYXMgYmVlbiByZXBsYWNlZCBieSB0aGUgImJyZWFrIDAiCisgKiBpbnN0cnVjdGlvbi4gIFRvIGF2b2lkIHRoZSBTTVAgcHJvYmxlbXMgdGhhdCBjYW4gb2NjdXIgd2hlbiB3ZQorICogdGVtcG9yYXJpbHkgcHV0IGJhY2sgdGhlIG9yaWdpbmFsIG9wY29kZSB0byBzaW5nbGUtc3RlcCwgd2UKKyAqIHNpbmdsZS1zdGVwcGVkIGEgY29weSBvZiB0aGUgaW5zdHJ1Y3Rpb24uICBUaGUgYWRkcmVzcyBvZiB0aGlzCisgKiBjb3B5IGlzIHAtPmFpbnNuLmluc24uCisgKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyB0byByZXR1cm4gZnJvbSB0aGUgcG9zdC1zaW5nbGUtc3RlcAorICogYnJlYWtwb2ludCB0cmFwLgorICovCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgcmVzdW1lX2V4ZWN1dGlvbihzdHJ1Y3Qga3Byb2JlICpwLAorCQkJCSAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkgICAgICAgc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKK3sKKwl1bnNpZ25lZCBsb25nIG9yaWdfZXBjID0ga2NiLT5rcHJvYmVfc2F2ZWRfZXBjOworCXJlZ3MtPmNwMF9lcGMgPSBvcmlnX2VwYyArIDQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBvc3Rfa3Byb2JlX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGtwcm9iZSAqY3VyID0ga3Byb2JlX3J1bm5pbmcoKTsKKwlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKKworCWlmICghY3VyKQorCQlyZXR1cm4gMDsKKworCWlmICgoa2NiLT5rcHJvYmVfc3RhdHVzICE9IEtQUk9CRV9SRUVOVEVSKSAmJiBjdXItPnBvc3RfaGFuZGxlcikgeworCQlrY2ItPmtwcm9iZV9zdGF0dXMgPSBLUFJPQkVfSElUX1NTRE9ORTsKKwkJY3VyLT5wb3N0X2hhbmRsZXIoY3VyLCByZWdzLCAwKTsKKwl9CisKKwlyZXN1bWVfZXhlY3V0aW9uKGN1ciwgcmVncywga2NiKTsKKworCXJlZ3MtPmNwMF9zdGF0dXMgfD0ga2NiLT5rcHJvYmVfc2F2ZWRfU1I7CisKKwkvKiBSZXN0b3JlIGJhY2sgdGhlIG9yaWdpbmFsIHNhdmVkIGtwcm9iZXMgdmFyaWFibGVzIGFuZCBjb250aW51ZS4gKi8KKwlpZiAoa2NiLT5rcHJvYmVfc3RhdHVzID09IEtQUk9CRV9SRUVOVEVSKSB7CisJCXJlc3RvcmVfcHJldmlvdXNfa3Byb2JlKGtjYik7CisJCWdvdG8gb3V0OworCX0KKwlyZXNldF9jdXJyZW50X2twcm9iZSgpOworb3V0OgorCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIGludCBrcHJvYmVfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRyYXBucikKK3sKKwlzdHJ1Y3Qga3Byb2JlICpjdXIgPSBrcHJvYmVfcnVubmluZygpOworCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOworCisJaWYgKGN1ci0+ZmF1bHRfaGFuZGxlciAmJiBjdXItPmZhdWx0X2hhbmRsZXIoY3VyLCByZWdzLCB0cmFwbnIpKQorCQlyZXR1cm4gMTsKKworCWlmIChrY2ItPmtwcm9iZV9zdGF0dXMgJiBLUFJPQkVfSElUX1NTKSB7CisJCXJlc3VtZV9leGVjdXRpb24oY3VyLCByZWdzLCBrY2IpOworCQlyZWdzLT5jcDBfc3RhdHVzIHw9IGtjYi0+a3Byb2JlX29sZF9TUjsKKworCQlyZXNldF9jdXJyZW50X2twcm9iZSgpOworCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogV3JhcHBlciByb3V0aW5lIGZvciBoYW5kbGluZyBleGNlcHRpb25zLgorICovCitpbnQgX19rcHJvYmVzIGtwcm9iZV9leGNlcHRpb25zX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQoreworCisJc3RydWN0IGRpZV9hcmdzICphcmdzID0gKHN0cnVjdCBkaWVfYXJncyAqKWRhdGE7CisJaW50IHJldCA9IE5PVElGWV9ET05FOworCisJc3dpdGNoICh2YWwpIHsKKwljYXNlIERJRV9CUkVBSzoKKwkJaWYgKGtwcm9iZV9oYW5kbGVyKGFyZ3MtPnJlZ3MpKQorCQkJcmV0ID0gTk9USUZZX1NUT1A7CisJCWJyZWFrOworCWNhc2UgRElFX1NTVEVQQlA6CisJCWlmIChwb3N0X2twcm9iZV9oYW5kbGVyKGFyZ3MtPnJlZ3MpKQorCQkJcmV0ID0gTk9USUZZX1NUT1A7CisJCWJyZWFrOworCisJY2FzZSBESUVfUEFHRV9GQVVMVDoKKwkJLyoga3Byb2JlX3J1bm5pbmcoKSBuZWVkcyBzbXBfcHJvY2Vzc29yX2lkKCkgKi8KKwkJcHJlZW1wdF9kaXNhYmxlKCk7CisKKwkJaWYgKGtwcm9iZV9ydW5uaW5nKCkKKwkJICAgICYmIGtwcm9iZV9mYXVsdF9oYW5kbGVyKGFyZ3MtPnJlZ3MsIGFyZ3MtPnRyYXBucikpCisJCQlyZXQgPSBOT1RJRllfU1RPUDsKKwkJcHJlZW1wdF9lbmFibGUoKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK2ludCBfX2twcm9iZXMgc2V0am1wX3ByZV9oYW5kbGVyKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBqcHJvYmUgKmpwID0gY29udGFpbmVyX29mKHAsIHN0cnVjdCBqcHJvYmUsIGtwKTsKKwlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKKworCWtjYi0+anByb2JlX3NhdmVkX3JlZ3MgPSAqcmVnczsKKwlrY2ItPmpwcm9iZV9zYXZlZF9zcCA9IHJlZ3MtPnJlZ3NbMjldOworCisJbWVtY3B5KGtjYi0+anByb2Jlc19zdGFjaywgKHZvaWQgKilrY2ItPmpwcm9iZV9zYXZlZF9zcCwKKwkgICAgICAgTUlOX0pQUk9CRVNfU1RBQ0tfU0laRShrY2ItPmpwcm9iZV9zYXZlZF9zcCkpOworCisJcmVncy0+Y3AwX2VwYyA9ICh1bnNpZ25lZCBsb25nKShqcC0+ZW50cnkpOworCisJcmV0dXJuIDE7Cit9CisKKy8qIERlZmluZWQgaW4gdGhlIGlubGluZSBhc20gYmVsb3cuICovCit2b2lkIGpwcm9iZV9yZXR1cm5fZW5kKHZvaWQpOworCit2b2lkIF9fa3Byb2JlcyBqcHJvYmVfcmV0dXJuKHZvaWQpCit7CisJLyogQXNzZW1ibGVyIHF1aXJrIG5lY2Vzc2l0YXRlcyB0aGlzICcwLGNvZGUnIGJ1c2luZXNzLiAgKi8KKwlhc20gdm9sYXRpbGUoCisJCSJicmVhayAwLCUwXG5cdCIKKwkJIi5nbG9ibCBqcHJvYmVfcmV0dXJuX2VuZFxuIgorCQkianByb2JlX3JldHVybl9lbmQ6XG4iCisJCTogOiAibiIgKEJSS19LUFJPQkVfQlApIDogIm1lbW9yeSIpOworfQorCitpbnQgX19rcHJvYmVzIGxvbmdqbXBfYnJlYWtfaGFuZGxlcihzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKKworCWlmIChyZWdzLT5jcDBfZXBjID49ICh1bnNpZ25lZCBsb25nKWpwcm9iZV9yZXR1cm4gJiYKKwkgICAgcmVncy0+Y3AwX2VwYyA8PSAodW5zaWduZWQgbG9uZylqcHJvYmVfcmV0dXJuX2VuZCkgeworCQkqcmVncyA9IGtjYi0+anByb2JlX3NhdmVkX3JlZ3M7CisJCW1lbWNweSgodm9pZCAqKWtjYi0+anByb2JlX3NhdmVkX3NwLCBrY2ItPmpwcm9iZXNfc3RhY2ssCisJCSAgICAgICBNSU5fSlBST0JFU19TVEFDS19TSVpFKGtjYi0+anByb2JlX3NhdmVkX3NwKSk7CisJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKKworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGdW5jdGlvbiByZXR1cm4gcHJvYmUgdHJhbXBvbGluZToKKyAqCS0gaW5pdF9rcHJvYmVzKCkgZXN0YWJsaXNoZXMgYSBwcm9iZXBvaW50IGhlcmUKKyAqCS0gV2hlbiB0aGUgcHJvYmVkIGZ1bmN0aW9uIHJldHVybnMsIHRoaXMgcHJvYmUgY2F1c2VzIHRoZQorICoJICBoYW5kbGVycyB0byBmaXJlCisgKi8KK3N0YXRpYyB2b2lkIF9fdXNlZCBrcmV0cHJvYmVfdHJhbXBvbGluZV9ob2xkZXIodm9pZCkKK3sKKwlhc20gdm9sYXRpbGUoCisJCSIuc2V0IHB1c2hcblx0IgorCQkvKiBLZWVwIHRoZSBhc3NlbWJsZXIgZnJvbSByZW9yZGVyaW5nIGFuZCBwbGFjaW5nIEpSIGhlcmUuICovCisJCSIuc2V0IG5vcmVvcmRlclxuXHQiCisJCSJub3Bcblx0IgorCQkiLmdsb2JhbCBrcmV0cHJvYmVfdHJhbXBvbGluZVxuIgorCQkia3JldHByb2JlX3RyYW1wb2xpbmU6XG5cdCIKKwkJIm5vcFxuXHQiCisJCSIuc2V0IHBvcCIKKwkJOiA6IDogIm1lbW9yeSIpOworfQorCit2b2lkIGtyZXRwcm9iZV90cmFtcG9saW5lKHZvaWQpOworCit2b2lkIF9fa3Byb2JlcyBhcmNoX3ByZXBhcmVfa3JldHByb2JlKHN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UgKnJpLAorCQkJCSAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJpLT5yZXRfYWRkciA9IChrcHJvYmVfb3Bjb2RlX3QgKikgcmVncy0+cmVnc1szMV07CisKKwkvKiBSZXBsYWNlIHRoZSByZXR1cm4gYWRkciB3aXRoIHRyYW1wb2xpbmUgYWRkciAqLworCXJlZ3MtPnJlZ3NbMzFdID0gKHVuc2lnbmVkIGxvbmcpa3JldHByb2JlX3RyYW1wb2xpbmU7Cit9CisKKy8qCisgKiBDYWxsZWQgd2hlbiB0aGUgcHJvYmUgYXQga3JldHByb2JlIHRyYW1wb2xpbmUgaXMgaGl0CisgKi8KK3N0YXRpYyBpbnQgX19rcHJvYmVzIHRyYW1wb2xpbmVfcHJvYmVfaGFuZGxlcihzdHJ1Y3Qga3Byb2JlICpwLAorCQkJCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmkgPSBOVUxMOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkLCBlbXB0eV9ycDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKnRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBvcmlnX3JldF9hZGRyZXNzID0gMDsKKwl1bnNpZ25lZCBsb25nIHRyYW1wb2xpbmVfYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKWtyZXRwcm9iZV90cmFtcG9saW5lOworCisJSU5JVF9ITElTVF9IRUFEKCZlbXB0eV9ycCk7CisJa3JldHByb2JlX2hhc2hfbG9jayhjdXJyZW50LCAmaGVhZCwgJmZsYWdzKTsKKworCS8qCisJICogSXQgaXMgcG9zc2libGUgdG8gaGF2ZSBtdWx0aXBsZSBpbnN0YW5jZXMgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4KKwkgKiB0YXNrIGVpdGhlciBiZWNhdXNlIGFuIG11bHRpcGxlIGZ1bmN0aW9ucyBpbiB0aGUgY2FsbCBwYXRoCisJICogaGF2ZSBhIHJldHVybiBwcm9iZSBpbnN0YWxsZWQgb24gdGhlbSwgYW5kL29yIG1vcmUgdGhhbiBvbmUgcmV0dXJuCisJICogcmV0dXJuIHByb2JlIHdhcyByZWdpc3RlcmVkIGZvciBhIHRhcmdldCBmdW5jdGlvbi4KKwkgKgorCSAqIFdlIGNhbiBoYW5kbGUgdGhpcyBiZWNhdXNlOgorCSAqICAgICAtIGluc3RhbmNlcyBhcmUgYWx3YXlzIGluc2VydGVkIGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0CisJICogICAgIC0gd2hlbiBtdWx0aXBsZSByZXR1cm4gcHJvYmVzIGFyZSByZWdpc3RlcmVkIGZvciB0aGUgc2FtZQorCSAqICAgICAgIGZ1bmN0aW9uLCB0aGUgZmlyc3QgaW5zdGFuY2UncyByZXRfYWRkciB3aWxsIHBvaW50IHRvIHRoZQorCSAqICAgICAgIHJlYWwgcmV0dXJuIGFkZHJlc3MsIGFuZCBhbGwgdGhlIHJlc3Qgd2lsbCBwb2ludCB0bworCSAqICAgICAgIGtyZXRwcm9iZV90cmFtcG9saW5lCisJICovCisJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyaSwgbm9kZSwgdG1wLCBoZWFkLCBobGlzdCkgeworCQlpZiAocmktPnRhc2sgIT0gY3VycmVudCkKKwkJCS8qIGFub3RoZXIgdGFzayBpcyBzaGFyaW5nIG91ciBoYXNoIGJ1Y2tldCAqLworCQkJY29udGludWU7CisKKwkJaWYgKHJpLT5ycCAmJiByaS0+cnAtPmhhbmRsZXIpCisJCQlyaS0+cnAtPmhhbmRsZXIocmksIHJlZ3MpOworCisJCW9yaWdfcmV0X2FkZHJlc3MgPSAodW5zaWduZWQgbG9uZylyaS0+cmV0X2FkZHI7CisJCXJlY3ljbGVfcnBfaW5zdChyaSwgJmVtcHR5X3JwKTsKKworCQlpZiAob3JpZ19yZXRfYWRkcmVzcyAhPSB0cmFtcG9saW5lX2FkZHJlc3MpCisJCQkvKgorCQkJICogVGhpcyBpcyB0aGUgcmVhbCByZXR1cm4gYWRkcmVzcy4gQW55IG90aGVyCisJCQkgKiBpbnN0YW5jZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGFzayBhcmUgZm9yCisJCQkgKiBvdGhlciBjYWxscyBkZWVwZXIgb24gdGhlIGNhbGwgc3RhY2sKKwkJCSAqLworCQkJYnJlYWs7CisJfQorCisJa3JldHByb2JlX2Fzc2VydChyaSwgb3JpZ19yZXRfYWRkcmVzcywgdHJhbXBvbGluZV9hZGRyZXNzKTsKKwlpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpID0gb3JpZ19yZXRfYWRkcmVzczsKKworCXJlc2V0X2N1cnJlbnRfa3Byb2JlKCk7CisJa3JldHByb2JlX2hhc2hfdW5sb2NrKGN1cnJlbnQsICZmbGFncyk7CisJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyaSwgbm9kZSwgdG1wLCAmZW1wdHlfcnAsIGhsaXN0KSB7CisJCWhsaXN0X2RlbCgmcmktPmhsaXN0KTsKKwkJa2ZyZWUocmkpOworCX0KKwkvKgorCSAqIEJ5IHJldHVybmluZyBhIG5vbi16ZXJvIHZhbHVlLCB3ZSBhcmUgdGVsbGluZworCSAqIGtwcm9iZV9oYW5kbGVyKCkgdGhhdCB3ZSBkb24ndCB3YW50IHRoZSBwb3N0X2hhbmRsZXIKKwkgKiB0byBydW4gKGFuZCBoYXZlIHJlLWVuYWJsZWQgcHJlZW1wdGlvbikKKwkgKi8KKwlyZXR1cm4gMTsKK30KKworaW50IF9fa3Byb2JlcyBhcmNoX3RyYW1wb2xpbmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJaWYgKHAtPmFkZHIgPT0gKGtwcm9iZV9vcGNvZGVfdCAqKWtyZXRwcm9iZV90cmFtcG9saW5lKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGtwcm9iZSB0cmFtcG9saW5lX3AgPSB7CisJLmFkZHIgPSAoa3Byb2JlX29wY29kZV90ICopa3JldHByb2JlX3RyYW1wb2xpbmUsCisJLnByZV9oYW5kbGVyID0gdHJhbXBvbGluZV9wcm9iZV9oYW5kbGVyCit9OworCitpbnQgX19pbml0IGFyY2hfaW5pdF9rcHJvYmVzKHZvaWQpCit7CisJcmV0dXJuIHJlZ2lzdGVyX2twcm9iZSgmdHJhbXBvbGluZV9wKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvbWNvdW50LlMgYi9hcmNoL21pcHMva2VybmVsL21jb3VudC5TCmluZGV4IDZiZmNiN2EuLjRjOTY4ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvbWNvdW50LlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9tY291bnQuUwpAQCAtMTY1LDEyICsxNjUsMTIgQEAKIAogCS8qIGFyZzM6IEdldCBmcmFtZSBwb2ludGVyIG9mIGN1cnJlbnQgc3RhY2sgKi8KICNpZmRlZiBDT05GSUdfRlJBTUVfUE9JTlRFUgotCSBtb3ZlCWEyLCBmcAorCW1vdmUJYTIsIGZwCiAjZWxzZSAvKiAhIENPTkZJR19GUkFNRV9QT0lOVEVSICovCiAjaWZkZWYgQ09ORklHXzY0QklUCi0JIFBUUl9MQQlhMiwgUFRfU0laRShzcCkKKwlQVFJfTEEJYTIsIFBUX1NJWkUoc3ApCiAjZWxzZQotCSBQVFJfTEEJYTIsIChQVF9TSVpFKzgpKHNwKQorCVBUUl9MQQlhMiwgKFBUX1NJWkUrOCkoc3ApCiAjZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKaW5kZXggYTUyOTdlMi4uYTNkNjYxMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUwpAQCAtNDAwLDIzICs0MDAsMjQgQEAKIAlQVFIJc3lzX2lvcHJpb19zZXQKIAlQVFIJc3lzX2lvcHJpb19nZXQKIAlQVFIJY29tcGF0X3N5c191dGltZW5zYXQKLQlQVFIJY29tcGF0X3N5c19zaWduYWxmZAkJLyogNTI4MCAqLworCVBUUgljb21wYXRfc3lzX3NpZ25hbGZkCQkvKiA2MjgwICovCiAJUFRSCXN5c19uaV9zeXNjYWxsCiAJUFRSCXN5c19ldmVudGZkCiAJUFRSCXN5c19mYWxsb2NhdGUKIAlQVFIJc3lzX3RpbWVyZmRfY3JlYXRlCi0JUFRSCWNvbXBhdF9zeXNfdGltZXJmZF9nZXR0aW1lCS8qIDUyODUgKi8KKwlQVFIJY29tcGF0X3N5c190aW1lcmZkX2dldHRpbWUJLyogNjI4NSAqLwogCVBUUgljb21wYXRfc3lzX3RpbWVyZmRfc2V0dGltZQogCVBUUglzeXNfc2lnbmFsZmQ0CiAJUFRSCXN5c19ldmVudGZkMgogCVBUUglzeXNfZXBvbGxfY3JlYXRlMQotCVBUUglzeXNfZHVwMwkJCS8qIDUyOTAgKi8KKwlQVFIJc3lzX2R1cDMJCQkvKiA2MjkwICovCiAJUFRSCXN5c19waXBlMgogCVBUUglzeXNfaW5vdGlmeV9pbml0MQogCVBUUglzeXNfcHJlYWR2CiAJUFRSCXN5c19wd3JpdGV2Ci0JUFRSCWNvbXBhdF9zeXNfcnRfdGdzaWdxdWV1ZWluZm8JLyogNTI5NSAqLworCVBUUgljb21wYXRfc3lzX3J0X3Rnc2lncXVldWVpbmZvCS8qIDYyOTUgKi8KIAlQVFIJc3lzX3BlcmZfZXZlbnRfb3BlbgogCVBUUglzeXNfYWNjZXB0NAogCVBUUiAgICAgY29tcGF0X3N5c19yZWN2bW1zZworCVBUUiAgICAgc3lzX2dldGRlbnRzCiAJLnNpemUJc3lzbjMyX2NhbGxfdGFibGUsLi1zeXNuMzJfY2FsbF90YWJsZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zbXAuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMKaW5kZXggNmNkY2ExOS4uMzgzYWViOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NtcC5jCkBAIC00Nyw4ICs0NywxMiBAQAogI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAogdm9sYXRpbGUgY3B1bWFza190IGNwdV9jYWxsaW5fbWFwOwkvKiBCaXRtYXNrIG9mIHN0YXJ0ZWQgc2Vjb25kYXJpZXMgKi8KKwogaW50IF9fY3B1X251bWJlcl9tYXBbTlJfQ1BVU107CQkvKiBNYXAgcGh5c2ljYWwgdG8gbG9naWNhbCAqLworRVhQT1JUX1NZTUJPTChfX2NwdV9udW1iZXJfbWFwKTsKKwogaW50IF9fY3B1X2xvZ2ljYWxfbWFwW05SX0NQVVNdOwkJLyogTWFwIGxvZ2ljYWwgdG8gcGh5c2ljYWwgKi8KK0VYUE9SVF9TWU1CT0woX19jcHVfbG9naWNhbF9tYXApOwogCiAvKiBOdW1iZXIgb2YgVENzIChvciBzaWJsaW5ncyBpbiBJbnRlbCBzcGVhaykgcGVyIENQVSBjb3JlICovCiBpbnQgc21wX251bV9zaWJsaW5ncyA9IDE7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NtdGMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jCmluZGV4IGE5NWRlYTUuLmNmZWIyYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jCkBAIC05NzUsOCArOTc1LDcgQEAKIAkJCWlwaV9jYWxsX2ludGVycnVwdCgpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoIkltcG9zc2libGUgU01UQyBJUEkgQXJndW1lbnQgMHgleFxuIiwKLQkJCQkoaW50KWFyZ19jb3B5KTsKKwkJCXByaW50aygiSW1wb3NzaWJsZSBTTVRDIElQSSBBcmd1bWVudCAlcFxuIiwgYXJnX2NvcHkpOwogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3N5c2NhbGwuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbC5jCmluZGV4IGRkODFiMGYuLjU4YmFiMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbC5jCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSA8bGludXgvaXBjLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9lbGYuaD4KIAogI2luY2x1ZGUgPGFzbS9hc20uaD4KICNpbmNsdWRlIDxhc20vYnJhbmNoLmg+CkBAIC0xMTYsNyArMTE4LDcgQEAKIAkJICAgICghdm1tIHx8IGFkZHIgKyBsZW4gPD0gdm1tLT52bV9zdGFydCkpCiAJCQlyZXR1cm4gYWRkcjsKIAl9Ci0JYWRkciA9IFRBU0tfVU5NQVBQRURfQkFTRTsKKwlhZGRyID0gY3VycmVudC0+bW0tPm1tYXBfYmFzZTsKIAlpZiAoZG9fY29sb3JfYWxpZ24pCiAJCWFkZHIgPSBDT0xPVVJfQUxJR04oYWRkciwgcGdvZmYpOwogCWVsc2UKQEAgLTEzNCw2ICsxMzYsNTEgQEAKIAl9CiB9CiAKK3ZvaWQgYXJjaF9waWNrX21tYXBfbGF5b3V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXVuc2lnbmVkIGxvbmcgcmFuZG9tX2ZhY3RvciA9IDBVTDsKKworCWlmIChjdXJyZW50LT5mbGFncyAmIFBGX1JBTkRPTUlaRSkgeworCQlyYW5kb21fZmFjdG9yID0gZ2V0X3JhbmRvbV9pbnQoKTsKKwkJcmFuZG9tX2ZhY3RvciA9IHJhbmRvbV9mYWN0b3IgPDwgUEFHRV9TSElGVDsKKwkJaWYgKFRBU0tfSVNfMzJCSVRfQUREUikKKwkJCXJhbmRvbV9mYWN0b3IgJj0gMHhmZmZmZmZ1bDsKKwkJZWxzZQorCQkJcmFuZG9tX2ZhY3RvciAmPSAweGZmZmZmZmZ1bDsKKwl9CisKKwltbS0+bW1hcF9iYXNlID0gVEFTS19VTk1BUFBFRF9CQVNFICsgcmFuZG9tX2ZhY3RvcjsKKwltbS0+Z2V0X3VubWFwcGVkX2FyZWEgPSBhcmNoX2dldF91bm1hcHBlZF9hcmVhOworCW1tLT51bm1hcF9hcmVhID0gYXJjaF91bm1hcF9hcmVhOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYnJrX3JuZCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcm5kID0gZ2V0X3JhbmRvbV9pbnQoKTsKKworCXJuZCA9IHJuZCA8PCBQQUdFX1NISUZUOworCS8qIDhNQiBmb3IgMzJiaXQsIDI1Nk1CIGZvciA2NGJpdCAqLworCWlmIChUQVNLX0lTXzMyQklUX0FERFIpCisJCXJuZCA9IHJuZCAmIDB4N2ZmZmZmdWw7CisJZWxzZQorCQlybmQgPSBybmQgJiAweGZmZmZmZmZ1bDsKKworCXJldHVybiBybmQ7Cit9CisKK3Vuc2lnbmVkIGxvbmcgYXJjaF9yYW5kb21pemVfYnJrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXVuc2lnbmVkIGxvbmcgYmFzZSA9IG1tLT5icms7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKwlyZXQgPSBQQUdFX0FMSUdOKGJhc2UgKyBicmtfcm5kKCkpOworCisJaWYgKHJldCA8IG1tLT5icmspCisJCXJldHVybiBtbS0+YnJrOworCisJcmV0dXJuIHJldDsKK30KKwogU1lTQ0FMTF9ERUZJTkU2KG1pcHNfbW1hcCwgdW5zaWduZWQgbG9uZywgYWRkciwgdW5zaWduZWQgbG9uZywgbGVuLAogCXVuc2lnbmVkIGxvbmcsIHByb3QsIHVuc2lnbmVkIGxvbmcsIGZsYWdzLCB1bnNpZ25lZCBsb25nLAogCWZkLCBvZmZfdCwgb2Zmc2V0KQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCmluZGV4IDg1Mjc4MDguLjAzZWMwMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZ2RiLmg+CiAjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgva2RiLmg+CiAKQEAgLTMzNCw3ICszMzUsNyBAQAogCV9fc2hvd19yZWdzKChzdHJ1Y3QgcHRfcmVncyAqKXJlZ3MpOwogfQogCi12b2lkIHNob3dfcmVnaXN0ZXJzKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKQordm9pZCBzaG93X3JlZ2lzdGVycyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAljb25zdCBpbnQgZmllbGQgPSAyICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwogCkBAIC0zNTYsOSArMzU3LDE0IEBACiAJcHJpbnRrKCJcbiIpOwogfQogCitzdGF0aWMgaW50IHJlZ3NfdG9fdHJhcG5yKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiAocmVncy0+Y3AwX2NhdXNlID4+IDIpICYgMHgxZjsKK30KKwogc3RhdGljIERFRklORV9TUElOTE9DSyhkaWVfbG9jayk7CiAKLXZvaWQgX19ub3JldHVybiBkaWUoY29uc3QgY2hhciAqIHN0ciwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQordm9pZCBfX25vcmV0dXJuIGRpZShjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0YXRpYyBpbnQgZGllX2NvdW50ZXI7CiAJaW50IHNpZyA9IFNJR1NFR1Y7CkBAIC0zNjYsNyArMzcyLDcgQEAKIAl1bnNpZ25lZCBsb25nIGR2cHJldCA9IGR2cGUoKTsKICNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKLQlub3RpZnlfZGllKERJRV9PT1BTLCBzdHIsIChzdHJ1Y3QgcHRfcmVncyAqKXJlZ3MsIFNJR1NFR1YsIDAsIDApOworCW5vdGlmeV9kaWUoRElFX09PUFMsIHN0ciwgcmVncywgMCwgcmVnc190b190cmFwbnIocmVncyksIFNJR1NFR1YpOwogCiAJY29uc29sZV92ZXJib3NlKCk7CiAJc3Bpbl9sb2NrX2lycSgmZGllX2xvY2spOwpAQCAtMzc1LDcgKzM4MSw3IEBACiAJbWlwc19tdF9yZWdkdW1wKGR2cHJldCk7CiAjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCi0JaWYgKG5vdGlmeV9kaWUoRElFX09PUFMsIHN0ciwgcmVncywgMCwgY3VycmVudC0+dGhyZWFkLnRyYXBfbm8sIFNJR1NFR1YpID09IE5PVElGWV9TVE9QKQorCWlmIChub3RpZnlfZGllKERJRV9PT1BTLCBzdHIsIHJlZ3MsIDAsIHJlZ3NfdG9fdHJhcG5yKHJlZ3MpLCBTSUdTRUdWKSA9PSBOT1RJRllfU1RPUCkKIAkJc2lnID0gMDsKIAogCXByaW50aygiJXNbIyVkXTpcbiIsIHN0ciwgKytkaWVfY291bnRlcik7CkBAIC00NDksNyArNDU1LDcgQEAKIAlwcmludGsoS0VSTl9BTEVSVCAiJXMgYnVzIGVycm9yLCBlcGMgPT0gJTAqbHgsIHJhID09ICUwKmx4XG4iLAogCSAgICAgICBkYXRhID8gIkRhdGEiIDogIkluc3RydWN0aW9uIiwKIAkgICAgICAgZmllbGQsIHJlZ3MtPmNwMF9lcGMsIGZpZWxkLCByZWdzLT5yZWdzWzMxXSk7Ci0JaWYgKG5vdGlmeV9kaWUoRElFX09PUFMsICJidXMgZXJyb3IiLCByZWdzLCBTSUdCVVMsIDAsIDApCisJaWYgKG5vdGlmeV9kaWUoRElFX09PUFMsICJidXMgZXJyb3IiLCByZWdzLCAwLCByZWdzX3RvX3RyYXBucihyZWdzKSwgU0lHQlVTKQogCSAgICA9PSBOT1RJRllfU1RPUCkKIAkJcmV0dXJuOwogCkBAIC02NTAsNyArNjU2LDcgQEAKIHsKIAlzaWdpbmZvX3QgaW5mbzsKIAotCWlmIChub3RpZnlfZGllKERJRV9GUCwgIkZQIGV4Y2VwdGlvbiIsIHJlZ3MsIFNJR0ZQRSwgMCwgMCkKKwlpZiAobm90aWZ5X2RpZShESUVfRlAsICJGUCBleGNlcHRpb24iLCByZWdzLCAwLCByZWdzX3RvX3RyYXBucihyZWdzKSwgU0lHRlBFKQogCSAgICA9PSBOT1RJRllfU1RPUCkKIAkJcmV0dXJuOwogCWRpZV9pZl9rZXJuZWwoIkZQIGV4Y2VwdGlvbiBpbiBrZXJuZWwgY29kZSIsIHJlZ3MpOwpAQCAtNzEzLDExICs3MTksMTEgQEAKIAljaGFyIGJbNDBdOwogCiAjaWZkZWYgQ09ORklHX0tHREJfTE9XX0xFVkVMX1RSQVAKLQlpZiAoa2dkYl9sbF90cmFwKERJRV9UUkFQLCBzdHIsIHJlZ3MsIGNvZGUsIDAsIDApID09IE5PVElGWV9TVE9QKQorCWlmIChrZ2RiX2xsX3RyYXAoRElFX1RSQVAsIHN0ciwgcmVncywgY29kZSwgcmVnc190b190cmFwbnIocmVncyksIFNJR1RSQVApID09IE5PVElGWV9TVE9QKQogCQlyZXR1cm47CiAjZW5kaWYgLyogQ09ORklHX0tHREJfTE9XX0xFVkVMX1RSQVAgKi8KIAotCWlmIChub3RpZnlfZGllKERJRV9UUkFQLCBzdHIsIHJlZ3MsIGNvZGUsIDAsIDApID09IE5PVElGWV9TVE9QKQorCWlmIChub3RpZnlfZGllKERJRV9UUkFQLCBzdHIsIHJlZ3MsIGNvZGUsIHJlZ3NfdG9fdHJhcG5yKHJlZ3MpLCBTSUdUUkFQKSA9PSBOT1RJRllfU1RPUCkKIAkJcmV0dXJuOwogCiAJLyoKQEAgLTc4Myw2ICs3ODksMjUgQEAKIAlpZiAoYmNvZGUgPj0gKDEgPDwgMTApKQogCQliY29kZSA+Pj0gMTA7CiAKKwkvKgorCSAqIG5vdGlmeSB0aGUga3Byb2JlIGhhbmRsZXJzLCBpZiBpbnN0cnVjdGlvbiBpcyBsaWtlbHkgdG8KKwkgKiBwZXJ0YWluIHRvIHRoZW0uCisJICovCisJc3dpdGNoIChiY29kZSkgeworCWNhc2UgQlJLX0tQUk9CRV9CUDoKKwkJaWYgKG5vdGlmeV9kaWUoRElFX0JSRUFLLCAiZGVidWciLCByZWdzLCBiY29kZSwgcmVnc190b190cmFwbnIocmVncyksIFNJR1RSQVApID09IE5PVElGWV9TVE9QKQorCQkJcmV0dXJuOworCQllbHNlCisJCQlicmVhazsKKwljYXNlIEJSS19LUFJPQkVfU1NURVBCUDoKKwkJaWYgKG5vdGlmeV9kaWUoRElFX1NTVEVQQlAsICJzaW5nbGVfc3RlcCIsIHJlZ3MsIGJjb2RlLCByZWdzX3RvX3RyYXBucihyZWdzKSwgU0lHVFJBUCkgPT0gTk9USUZZX1NUT1ApCisJCQlyZXR1cm47CisJCWVsc2UKKwkJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwogCWRvX3RyYXBfb3JfYnAocmVncywgYmNvZGUsICJCcmVhayIpOwogCXJldHVybjsKIApAQCAtODE1LDcgKzg0MCw3IEBACiAJdW5zaWduZWQgaW50IG9wY29kZSA9IDA7CiAJaW50IHN0YXR1cyA9IC0xOwogCi0JaWYgKG5vdGlmeV9kaWUoRElFX1JJLCAiUkkgRmF1bHQiLCByZWdzLCBTSUdTRUdWLCAwLCAwKQorCWlmIChub3RpZnlfZGllKERJRV9SSSwgIlJJIEZhdWx0IiwgcmVncywgMCwgcmVnc190b190cmFwbnIocmVncyksIFNJR0lMTCkKIAkgICAgPT0gTk9USUZZX1NUT1ApCiAJCXJldHVybjsKIApAQCAtOTA3LDExICs5MzIsNiBAQAogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZGVmYXVsdF9jdTJfbm90aWZpZXIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwJPSBkZWZhdWx0X2N1Ml9jYWxsLAotCS5wcmlvcml0eQk9IDB4ODAwMDAwMDAsCQkvKiBSdW4gbGFzdCAgKi8KLX07Ci0KIGFzbWxpbmthZ2Ugdm9pZCBkb19jcHUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgaW50IF9fdXNlciAqZXBjOwpAQCAtMTczNCw1ICsxNzU0LDUgQEAKIAogCXNvcnRfZXh0YWJsZShfX3N0YXJ0X19fZGJlX3RhYmxlLCBfX3N0b3BfX19kYmVfdGFibGUpOwogCi0JcmVnaXN0ZXJfY3UyX25vdGlmaWVyKCZkZWZhdWx0X2N1Ml9ub3RpZmllcik7CisJY3UyX25vdGlmaWVyKGRlZmF1bHRfY3UyX2NhbGwsIDB4ODAwMDAwMDApOwkvKiBSdW4gbGFzdCAgKi8KIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdmRzby5jIGIvYXJjaC9taXBzL2tlcm5lbC92ZHNvLmMKaW5kZXggYjc3M2MxMS4uZTVjZGZkNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC92ZHNvLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC92ZHNvLmMKQEAgLTYxLDExICs2MSw5IEBACiAKIAl2dW5tYXAodmRzbyk7CiAKLQlwcl9ub3RpY2UoImluaXRfdmRzbyBzdWNjZXNzZnVsbFxuIik7Ci0KIAlyZXR1cm4gMDsKIH0KLWRldmljZV9pbml0Y2FsbChpbml0X3Zkc28pOworc3Vic3lzX2luaXRjYWxsKGluaXRfdmRzbyk7CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHZkc29fYWRkcih1bnNpZ25lZCBsb25nIHN0YXJ0KQogewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhc2F0L01ha2VmaWxlIGIvYXJjaC9taXBzL2xhc2F0L01ha2VmaWxlCmluZGV4IDMzNzkxNjAuLjljYzRlNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sYXNhdC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvbGFzYXQvTWFrZWZpbGUKQEAgLTEyLDUgKzEyLDMgQEAKIAogY2xlYW46CiAJbWFrZSAtQyBpbWFnZSBjbGVhbgotCi1FWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhc2F0L1BsYXRmb3JtIGIvYXJjaC9taXBzL2xhc2F0L1BsYXRmb3JtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MDI1MjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbGFzYXQvUGxhdGZvcm0KQEAgLTAsMCArMSw3IEBACisjCisjIExBU0FUIHBsYXRmb3JtcworIworcGxhdGZvcm0tJChDT05GSUdfTEFTQVQpCSs9IGxhc2F0LworY2ZsYWdzLSQoQ09ORklHX0xBU0FUKQkJKz0JCQkJCVwKKwkJLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxhc2F0Citsb2FkLSQoQ09ORklHX0xBU0FUKQkJKz0gMHhmZmZmZmZmZjgwMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vUGxhdGZvcm0gYi9hcmNoL21pcHMvbG9vbmdzb24vUGxhdGZvcm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk2OTJlNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9QbGF0Zm9ybQpAQCAtMCwwICsxLDMyIEBACisjCisjIExvb25nc29uIFByb2Nlc3NvcnMnIFN1cHBvcnQKKyMKKworIyBPbmx5IGdjYyA+PSA0LjQgaGF2ZSBMb29uZ3NvbiBzcGVjaWZpYyBzdXBwb3J0CitjZmxhZ3MtJChDT05GSUdfQ1BVX0xPT05HU09OMikJKz0gLVdhLC0tdHJhcAorY2ZsYWdzLSQoQ09ORklHX0NQVV9MT09OR1NPTjJFKSArPSBcCisJJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9bG9vbmdzb24yZSwtbWFyY2g9cjQ2MDApCitjZmxhZ3MtJChDT05GSUdfQ1BVX0xPT05HU09OMkYpICs9IFwKKwkkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1sb29uZ3NvbjJmLC1tYXJjaD1yNDYwMCkKKyMgRW5hYmxlIHRoZSB3b3JrYXJvdW5kcyBmb3IgTG9vbmdzb24yZgoraWZkZWYgQ09ORklHX0NQVV9MT09OR1NPTjJGX1dPUktBUk9VTkRTCisgIGlmZXEgKCQoY2FsbCBhcy1vcHRpb24sLVdhJChjb21tYSktbWZpeC1sb29uZ3NvbjJmLW5vcCwpLCkKKyAgICAkKGVycm9yIG9ubHkgYmludXRpbHMgPj0gMi4yMC4yIGhhdmUgbmVlZGVkIG9wdGlvbiAtbWZpeC1sb29uZ3NvbjJmLW5vcCkKKyAgZWxzZQorICAgIGNmbGFncy0kKENPTkZJR19DUFVfTk9QX1dPUktBUk9VTkRTKSArPSAtV2EkKGNvbW1hKS1tZml4LWxvb25nc29uMmYtbm9wCisgIGVuZGlmCisgIGlmZXEgKCQoY2FsbCBhcy1vcHRpb24sLVdhJChjb21tYSktbWZpeC1sb29uZ3NvbjJmLWp1bXAsKSwpCisgICAgJChlcnJvciBvbmx5IGJpbnV0aWxzID49IDIuMjAuMiBoYXZlIG5lZWRlZCBvcHRpb24gLW1maXgtbG9vbmdzb24yZi1qdW1wKQorICBlbHNlCisgICAgY2ZsYWdzLSQoQ09ORklHX0NQVV9KVU1QX1dPUktBUk9VTkRTKSArPSAtV2EkKGNvbW1hKS1tZml4LWxvb25nc29uMmYtanVtcAorICBlbmRpZgorZW5kaWYKKworIworIyBMb29uZ3NvbiBNYWNoaW5lcycgU3VwcG9ydAorIworCitwbGF0Zm9ybS0kKENPTkZJR19NQUNIX0xPT05HU09OKSArPSBsb29uZ3Nvbi8KK2NmbGFncy0kKENPTkZJR19NQUNIX0xPT05HU09OKSArPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24gLW1uby1icmFuY2gtbGlrZWx5Citsb2FkLSQoQ09ORklHX0xFTU9URV9GVUxPT05HMkUpICs9IDB4ZmZmZmZmZmY4MDEwMDAwMAorbG9hZC0kKENPTkZJR19MRU1PVEVfTUFDSDJGKSArPSAweGZmZmZmZmZmODAyMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L01ha2VmaWxlIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvTWFrZWZpbGUKaW5kZXggNTEwZDRjZC4uZjEyZTY0MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvTWFrZWZpbGUKQEAgLTksNSArOSwzIEBACiAjIEVuYWJsZSBjczU1MzYgbWZncHQgVGltZXIKICMKIG9iai0kKENPTkZJR19DUzU1MzZfTUZHUFQpICs9IGNzNTUzNl9tZmdwdC5vCi0KLUVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2lycS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9pcnEuYwppbmRleCAyMGU3MzI4Li41ODk3NDcxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2lycS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vaXJxLmMKQEAgLTIxLDE5ICsyMSwxNiBAQAogCiAJLyogd29ya2Fyb3VuZCB0aGUgSU8gZG1hIHByb2JsZW06IGxldCBjcHUgbG9vcGluZyB0byBhbGxvdyBETUEgZmluaXNoICovCiAJaW50X3N0YXR1cyA9IExPT05HU09OX0lOVElTUjsKLQlpZiAoaW50X3N0YXR1cyAmICgxIDw8IDEwKSkgewotCQl3aGlsZSAoaW50X3N0YXR1cyAmICgxIDw8IDEwKSkgewotCQkJdWRlbGF5KDEpOwotCQkJaW50X3N0YXR1cyA9IExPT05HU09OX0lOVElTUjsKLQkJfQorCXdoaWxlIChpbnRfc3RhdHVzICYgKDEgPDwgMTApKSB7CisJCXVkZWxheSgxKTsKKwkJaW50X3N0YXR1cyA9IExPT05HU09OX0lOVElTUjsKIAl9CiAKIAkvKiBHZXQgcGVuZGluZyBzb3VyY2VzLCBtYXNrZWQgYnkgY3VycmVudCBlbmFibGVzICovCiAJaW50X3N0YXR1cyA9IExPT05HU09OX0lOVElTUiAmIExPT05HU09OX0lOVEVOOwogCi0JaWYgKGludF9zdGF0dXMgIT0gMCkgeworCWlmIChpbnRfc3RhdHVzKSB7CiAJCWkgPSBfX2ZmcyhpbnRfc3RhdHVzKTsKLQkJaW50X3N0YXR1cyAmPSB+KDEgPDwgaSk7CiAJCWRvX0lSUShMT09OR1NPTl9JUlFfQkFTRSArIGkpOwogCX0KIH0KQEAgLTU2LDkgKzUzLDYgQEAKIAkgKi8KIAljbGVhcl9jMF9zdGF0dXMoU1QwX0lNIHwgU1QwX0JFVik7CiAKLQkvKiBzZXR0aW5nIGlycSB0cmlnZ2VyIG1vZGUgKi8KLQlzZXRfaXJxX3RyaWdnZXJfbW9kZSgpOwotCiAJLyogbm8gc3RlZXIgKi8KIAlMT09OR1NPTl9JTlRTVEVFUiA9IDA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9mdWxvb25nLTJlL01ha2VmaWxlIGIvYXJjaC9taXBzL2xvb25nc29uL2Z1bG9vbmctMmUvTWFrZWZpbGUKaW5kZXggM2FiYTVmYy4uYjc2MjI3MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2Z1bG9vbmctMmUvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2Z1bG9vbmctMmUvTWFrZWZpbGUKQEAgLTMsNSArMywzIEBACiAjCiAKIG9iai15ICs9IGlycS5vIHJlc2V0Lm8KLQotRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9mdWxvb25nLTJlL2lycS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2Z1bG9vbmctMmUvaXJxLmMKaW5kZXggMzIwZTkzNy4uZDYxYTA0MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2Z1bG9vbmctMmUvaXJxLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2Z1bG9vbmctMmUvaXJxLmMKQEAgLTMwLDcgKzMwLDcgQEAKIAlpZiAocGVuZGluZyAmIENBVVNFRl9JUDcpCiAJCWRvX0lSUShNSVBTX0NQVV9JUlFfQkFTRSArIDcpOwogCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA2KSAvKiBwZXJmIGNvdW50ZXIgbG92ZXJmbG93ICovCi0JCWRvX0lSUShMT09OR1NPTjJfUEVSRkNOVF9JUlEpOworCQlkb19wZXJmY250X0lSUSgpOwogCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA1KQogCQlpODI1OV9pcnFkaXNwYXRjaCgpOwogCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVAyKQpAQCAtNDQsMTMgKzQ0LDYgQEAKIAkubmFtZSA9ICJjYXNjYWRlIiwKIH07CiAKLXZvaWQgX19pbml0IHNldF9pcnFfdHJpZ2dlcl9tb2RlKHZvaWQpCi17Ci0JLyogbW9zdCBib25pdG8gaXJxIHNob3VsZCBiZSBsZXZlbCB0cmlnZ2VyZWQgKi8KLQlMT09OR1NPTl9JTlRFREdFID0gTE9PTkdTT05fSUNVX1NZU1RFTUVSUiB8IExPT05HU09OX0lDVV9NQVNURVJFUlIgfAotCSAgICBMT09OR1NPTl9JQ1VfUkVUUllFUlIgfCBMT09OR1NPTl9JQ1VfTUJPWEVTOwotfQotCiB2b2lkIF9faW5pdCBtYWNoX2luaXRfaXJxKHZvaWQpCiB7CiAJLyogaW5pdCBhbGwgY29udHJvbGxlcgpAQCAtNTksNiArNTIsMTAgQEAKIAkgKiAgIDMyLTYzICAgICAgICAtLS0tLS0+IGJvbml0byBpcnEKIAkgKi8KIAorCS8qIG1vc3QgYm9uaXRvIGlycSBzaG91bGQgYmUgbGV2ZWwgdHJpZ2dlcmVkICovCisJTE9PTkdTT05fSU5URURHRSA9IExPT05HU09OX0lDVV9TWVNURU1FUlIgfCBMT09OR1NPTl9JQ1VfTUFTVEVSRVJSIHwKKwkgICAgTE9PTkdTT05fSUNVX1JFVFJZRVJSIHwgTE9PTkdTT05fSUNVX01CT1hFUzsKKwogCS8qIFNldHMgdGhlIGZpcnN0LWxldmVsIGludGVycnVwdCBkaXNwYXRjaGVyLiAqLwogCW1pcHNfY3B1X2lycV9pbml0KCk7CiAJaW5pdF9pODI1OV9pcnFzKCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2lycS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9pcnEuYwppbmRleCAxZDhiNGQyLi4wODFkYjEwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2lycS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvaXJxLmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxtYWNoaW5lLmg+CiAKICNkZWZpbmUgTE9PTkdTT05fVElNRVJfSVJRCShNSVBTX0NQVV9JUlFfQkFTRSArIDcpCS8qIGNwdSB0aW1lciAqLwotI2RlZmluZSBMT09OR1NPTl9QRVJGQ05UX0lSUQkoTUlQU19DUFVfSVJRX0JBU0UgKyA2KQkvKiBjcHUgcGVyZiBjb3VudGVyICovCiAjZGVmaW5lIExPT05HU09OX05PUlRIX0JSSURHRV9JUlEJKE1JUFNfQ1BVX0lSUV9CQVNFICsgNikJLyogYm9uaXRvICovCiAjZGVmaW5lIExPT05HU09OX1VBUlRfSVJRCShNSVBTX0NQVV9JUlFfQkFTRSArIDMpCS8qIGNwdSBzZXJpYWwgcG9ydCAqLwogI2RlZmluZSBMT09OR1NPTl9TT1VUSF9CUklER0VfSVJRCShNSVBTX0NQVV9JUlFfQkFTRSArIDIpCS8qIGk4MjU5ICovCkBAIC03OSw5ICs3OCw3IEBACiAJaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA3KQogCQlkb19JUlEoTE9PTkdTT05fVElNRVJfSVJRKTsKIAllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNikgewkvKiBOb3J0aCBCcmlkZ2UsIFBlcmYgY291bnRlciAqLwotI2lmIGRlZmluZWQoQ09ORklHX09QUk9GSUxFKSB8fCBkZWZpbmVkKENPTkZJR19PUFJPRklMRV9NT0RVTEUpCi0JCWRvX0lSUShMT09OR1NPTjJfUEVSRkNOVF9JUlEpOwotI2VuZGlmCisJCWRvX3BlcmZjbnRfSVJRKCk7CiAJCWJvbml0b19pcnFkaXNwYXRjaCgpOwogCX0gZWxzZSBpZiAocGVuZGluZyAmIENBVVNFRl9JUDMpCS8qIENQVSBVQVJUICovCiAJCWRvX0lSUShMT09OR1NPTl9VQVJUX0lSUSk7CkBAIC05MSwxMyArODgsNiBAQAogCQlzcHVyaW91c19pbnRlcnJ1cHQoKTsKIH0KIAotdm9pZCBfX2luaXQgc2V0X2lycV90cmlnZ2VyX21vZGUodm9pZCkKLXsKLQkvKiBzZXR1cCBjczU1MzYgYXMgaGlnaCBsZXZlbCB0cmlnZ2VyICovCi0JTE9PTkdTT05fSU5UUE9MID0gTE9PTkdTT05fSU5UX0JJVF9JTlQwIHwgTE9PTkdTT05fSU5UX0JJVF9JTlQxOwotCUxPT05HU09OX0lOVEVER0UgJj0gfihMT09OR1NPTl9JTlRfQklUX0lOVDAgfCBMT09OR1NPTl9JTlRfQklUX0lOVDEpOwotfQotCiBzdGF0aWMgaXJxcmV0dXJuX3QgaXA2X2FjdGlvbihpbnQgY3BsLCB2b2lkICpkZXZfaWQpCiB7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMTIyLDYgKzExMiwxMCBAQAogCSAqICAgMzItNjMgICAgICAgIC0tLS0tLT4gYm9uaXRvIGlycQogCSAqLwogCisJLyogc2V0dXAgY3M1NTM2IGFzIGhpZ2ggbGV2ZWwgdHJpZ2dlciAqLworCUxPT05HU09OX0lOVFBPTCA9IExPT05HU09OX0lOVF9CSVRfSU5UMCB8IExPT05HU09OX0lOVF9CSVRfSU5UMTsKKwlMT09OR1NPTl9JTlRFREdFICY9IH4oTE9PTkdTT05fSU5UX0JJVF9JTlQwIHwgTE9PTkdTT05fSU5UX0JJVF9JTlQxKTsKKwogCS8qIFNldHMgdGhlIGZpcnN0LWxldmVsIGludGVycnVwdCBkaXNwYXRjaGVyLiAqLwogCW1pcHNfY3B1X2lycV9pbml0KCk7CiAJaW5pdF9pODI1OV9pcnFzKCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvTWFrZWZpbGUgYi9hcmNoL21pcHMvbWF0aC1lbXUvTWFrZWZpbGUKaW5kZXggZDU0N2VmZC4uOTY2MDcyMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21hdGgtZW11L01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9NYWtlZmlsZQpAQCAtMTAsNCArMTAsMyBAQAogCSAgIHNwX3NjYWxiLm8gc3Bfc2ltcGxlLm8gc3BfdGludC5vIHNwX2ZpbnQubyBzcF90bG9uZy5vIHNwX2Zsb25nLm8gXAogCSAgIGRwX3NxcnQubyBzcF9zcXJ0Lm8ga2VybmVsX2xpbmthZ2UubyBkc2VtdWwubwogCi1FWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21hdGgtZW11L2RwX21vZGYuYyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF9tb2RmLmMKaW5kZXggMjU4NjFhNC4uYTg1NzBlNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21hdGgtZW11L2RwX21vZGYuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUvZHBfbW9kZi5jCkBAIC0yOSw3ICsyOSw3IEBACiAKIC8qIG1vZGYgZnVuY3Rpb24gaXMgYWx3YXlzIGV4YWN0IGZvciBhIGZpbml0ZSBudW1iZXIKICovCi1pZWVlNzU0ZHAgaWVlZTc1NGRwX21vZGYoaWVlZTc1NGRwIHgsIGllZWU3NTRkcCAqIGlwKQoraWVlZTc1NGRwIGllZWU3NTRkcF9tb2RmKGllZWU3NTRkcCB4LCBpZWVlNzU0ZHAgKmlwKQogewogCUNPTVBYRFA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF90aW50LmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvZHBfdGludC5jCmluZGV4IDc3YjJiN2MuLjI0NDc4NjIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF90aW50LmMKKysrIGIvYXJjaC9taXBzL21hdGgtZW11L2RwX3RpbnQuYwpAQCAtNjksOCArNjksNyBAQAogCQkJcm91bmQgPSAwOwogCQkJc3RpY2t5ID0gcmVzaWR1ZSAhPSAwOwogCQkJeG0gPSAwOwotCQl9Ci0JCWVsc2UgeworCQl9IGVsc2UgewogCQkJcmVzaWR1ZSA9IHhtIDw8ICg2NCAtIERQX01CSVRTICsgeGUpOwogCQkJcm91bmQgPSAocmVzaWR1ZSA+PiA2MykgIT0gMDsKIAkJCXN0aWNreSA9IChyZXNpZHVlIDw8IDEpICE9IDA7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvZHBfdGxvbmcuYyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF90bG9uZy5jCmluZGV4IGQ3MTExM2UuLjBmMDdlYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF90bG9uZy5jCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF90bG9uZy5jCkBAIC03MSw4ICs3MSw3IEBACiAJCQlyb3VuZCA9IDA7CiAJCQlzdGlja3kgPSByZXNpZHVlICE9IDA7CiAJCQl4bSA9IDA7Ci0JCX0KLQkJZWxzZSB7CisJCX0gZWxzZSB7CiAJCQkvKiBTaGlmdGluZyBhIHU2NCA2NCB0aW1lcyBkb2VzIG5vdCB3b3JrLAogCQkJKiBzbyB3ZSBkbyBpdCBpbiB0d28gc3RlcHMuIEJlIGF3YXJlIHRoYXQgeGUKIAkJCSogbWF5IGJlIC0xICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvc3BfbW9kZi5jIGIvYXJjaC9taXBzL21hdGgtZW11L3NwX21vZGYuYwppbmRleCA0YjFkYmFjLi43NjU2ODk0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWF0aC1lbXUvc3BfbW9kZi5jCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9zcF9tb2RmLmMKQEAgLTI5LDcgKzI5LDcgQEAKIAogLyogbW9kZiBmdW5jdGlvbiBpcyBhbHdheXMgZXhhY3QgZm9yIGEgZmluaXRlIG51bWJlcgogKi8KLWllZWU3NTRzcCBpZWVlNzU0c3BfbW9kZihpZWVlNzU0c3AgeCwgaWVlZTc1NHNwICogaXApCitpZWVlNzU0c3AgaWVlZTc1NHNwX21vZGYoaWVlZTc1NHNwIHgsIGllZWU3NTRzcCAqaXApCiB7CiAJQ09NUFhTUDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21hdGgtZW11L3NwX3RpbnQuYyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9zcF90aW50LmMKaW5kZXggMWQ3M2QyYS4uMzUyZGMzYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21hdGgtZW11L3NwX3RpbnQuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUvc3BfdGludC5jCkBAIC03Miw4ICs3Miw3IEBACiAJCQlyb3VuZCA9IDA7CiAJCQlzdGlja3kgPSByZXNpZHVlICE9IDA7CiAJCQl4bSA9IDA7Ci0JCX0KLQkJZWxzZSB7CisJCX0gZWxzZSB7CiAJCQkvKiBTaGlmdGluZyBhIHUzMiAzMiB0aW1lcyBkb2VzIG5vdCB3b3JrLAogCQkJKiBzbyB3ZSBkbyBpdCBpbiB0d28gc3RlcHMuIEJlIGF3YXJlIHRoYXQgeGUKIAkJCSogbWF5IGJlIC0xICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvc3BfdGxvbmcuYyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9zcF90bG9uZy5jCmluZGV4IDRiZTIxYWEuLjkyY2Q5YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9zcF90bG9uZy5jCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9zcF90bG9uZy5jCkBAIC03MSw4ICs3MSw3IEBACiAJCQlyb3VuZCA9IDA7CiAJCQlzdGlja3kgPSByZXNpZHVlICE9IDA7CiAJCQl4bSA9IDA7Ci0JCX0KLQkJZWxzZSB7CisJCX0gZWxzZSB7CiAJCQlyZXNpZHVlID0geG0gPDwgKDMyIC0gU1BfTUJJVFMgKyB4ZSk7CiAJCQlyb3VuZCA9IChyZXNpZHVlID4+IDMxKSAhPSAwOwogCQkJc3RpY2t5ID0gKHJlc2lkdWUgPDwgMSkgIT0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzc2ltL01ha2VmaWxlIGIvYXJjaC9taXBzL21pcHNzaW0vTWFrZWZpbGUKaW5kZXggNDFiOTY1Ny4uMDE0MTBhMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHNzaW0vTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL21pcHNzaW0vTWFrZWZpbGUKQEAgLTIxLDUgKzIxLDMgQEAKIAogb2JqLSQoQ09ORklHX0VBUkxZX1BSSU5USykgKz0gc2ltX2NvbnNvbGUubwogb2JqLSQoQ09ORklHX01JUFNfTVRfU01UQykgKz0gc2ltX3NtdGMubwotCi1FWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHNzaW0vUGxhdGZvcm0gYi9hcmNoL21pcHMvbWlwc3NpbS9QbGF0Zm9ybQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGY2MGI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL21pcHNzaW0vUGxhdGZvcm0KQEAgLTAsMCArMSw2IEBACisjCisjIE1JUFMgU0lNCisjCitwbGF0Zm9ybS0kKENPTkZJR19NSVBTX1NJTSkJKz0gbWlwc3NpbS8KK2NmbGFncy0kKENPTkZJR19NSVBTX1NJTSkJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLW1pcHNzaW0KK2xvYWQtJChDT05GSUdfTUlQU19TSU0pCQkrPSAweDgwMTAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vTWFrZWZpbGUgYi9hcmNoL21pcHMvbW0vTWFrZWZpbGUKaW5kZXggZjBlNDM1NS4uZDY3OWM3NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9tbS9NYWtlZmlsZQpAQCAtMzQsNSArMzQsMyBAQAogb2JqLSQoQ09ORklHX1I1MDAwX0NQVV9TQ0FDSEUpICArPSBzYy1yNWsubwogb2JqLSQoQ09ORklHX1JNNzAwMF9DUFVfU0NBQ0hFKQkrPSBzYy1ybTdrLm8KIG9iai0kKENPTkZJR19NSVBTX0NQVV9TQ0FDSEUpCSs9IHNjLW1pcHMubwotCi1FWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2ZhdWx0LmMgYi9hcmNoL21pcHMvbW0vZmF1bHQuYwppbmRleCBiNzhmN2Q5Li43ODNhZDAwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vZmF1bHQuYworKysgYi9hcmNoL21pcHMvbW0vZmF1bHQuYwpAQCAtMTYsOCArMTYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3Z0X2tlcm4uaD4JCS8qIEZvciB1bmJsYW5rX3NjcmVlbigpICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogCiAjaW5jbHVkZSA8YXNtL2JyYW5jaC5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgpAQCAtMjUsMTMgKzI1LDE0IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2hpZ2htZW0uaD4JCS8qIEZvciBWTUFMTE9DX0VORCAqLworI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogCiAvKgogICogVGhpcyByb3V0aW5lIGhhbmRsZXMgcGFnZSBmYXVsdHMuICBJdCBkZXRlcm1pbmVzIHRoZSBhZGRyZXNzLAogICogYW5kIHRoZSBwcm9ibGVtLCBhbmQgdGhlbiBwYXNzZXMgaXQgb2ZmIHRvIG9uZSBvZiB0aGUgYXBwcm9wcmlhdGUKICAqIHJvdXRpbmVzLgogICovCi1hc21saW5rYWdlIHZvaWQgZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyB3cml0ZSwKK2FzbWxpbmthZ2Ugdm9pZCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyB3cml0ZSwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEgPSBOVUxMOwpAQCAtNDcsNiArNDgsMTcgQEAKIAkgICAgICAgZmllbGQsIHJlZ3MtPmNwMF9lcGMpOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfS1BST0JFUworCS8qCisJICogVGhpcyBpcyB0byBub3RpZnkgdGhlIGZhdWx0IGhhbmRsZXIgb2YgdGhlIGtwcm9iZXMuICBUaGUKKwkgKiBleGNlcHRpb24gY29kZSBpcyByZWR1bmRhbnQgYXMgaXQgaXMgYWxzbyBjYXJyaWVkIGluIFJFR1MsCisJICogYnV0IHdlIHBhc3MgaXQgYW55aG93LgorCSAqLworCWlmIChub3RpZnlfZGllKERJRV9QQUdFX0ZBVUxULCAicGFnZSBmYXVsdCIsIHJlZ3MsIC0xLAorCQkgICAgICAgKHJlZ3MtPmNwMF9jYXVzZSA+PiAyKSAmIDB4MWYsIFNJR1NFR1YpID09IE5PVElGWV9TVE9QKQorCQlyZXR1cm47CisjZW5kaWYKKwogCWluZm8uc2lfY29kZSA9IFNFR1ZfTUFQRVJSOwogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9zYy1ybTdrLmMgYi9hcmNoL21pcHMvbW0vc2Mtcm03ay5jCmluZGV4IGRlNjliZmIuLjFlZjc1Y2QgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9zYy1ybTdrLmMKKysrIGIvYXJjaC9taXBzL21tL3NjLXJtN2suYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZW9wcy5oPgogI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPiAvKiBmb3IgcnVuX3VuY2FjaGVkKCkgKi8KIAogLyogUHJpbWFyeSBjYWNoZSBwYXJhbWV0ZXJzLiAqLwpAQCAtMjUsMTEgKzI2LDE1IEBACiAvKiBTZWNvbmRhcnkgY2FjaGUgcGFyYW1ldGVycy4gKi8KICNkZWZpbmUgc2NhY2hlX3NpemUJKDI1NioxMDI0KQkvKiBGaXhlZCB0byAyNTZLaUIgb24gUk03MDAwICovCiAKKy8qIFRlcnRpYXJ5IGNhY2hlIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgdGNfbHNpemUJMzIKKwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaWNhY2hlX3dheV9zaXplLCBkY2FjaGVfd2F5X3NpemU7Cit1bnNpZ25lZCBsb25nIHRjYWNoZV9zaXplOwogCiAjaW5jbHVkZSA8YXNtL3I0a2NhY2hlLmg+CiAKLXN0YXRpYyBpbnQgcm03a190Y2FjaGVfZW5hYmxlZDsKK3N0YXRpYyBpbnQgcm03a190Y2FjaGVfaW5pdDsKIAogLyoKICAqIFdyaXRlYmFjayBhbmQgaW52YWxpZGF0ZSB0aGUgcHJpbWFyeSBjYWNoZSBkY2FjaGUgYmVmb3JlIERNQS4KQEAgLTQ2LDcgKzUxLDcgQEAKIAogCWJsYXN0X3NjYWNoZV9yYW5nZShhZGRyLCBhZGRyICsgc2l6ZSk7CiAKLQlpZiAoIXJtN2tfdGNhY2hlX2VuYWJsZWQpCisJaWYgKCFybTdrX3RjYWNoZV9pbml0KQogCQlyZXR1cm47CiAKIAlhID0gYWRkciAmIH4odGNfcGFnZXNpemUgLSAxKTsKQEAgLTcwLDcgKzc1LDcgQEAKIAogCWJsYXN0X2ludl9zY2FjaGVfcmFuZ2UoYWRkciwgYWRkciArIHNpemUpOwogCi0JaWYgKCFybTdrX3RjYWNoZV9lbmFibGVkKQorCWlmICghcm03a190Y2FjaGVfaW5pdCkKIAkJcmV0dXJuOwogCiAJYSA9IGFkZHIgJiB+KHRjX3BhZ2VzaXplIC0gMSk7CkBAIC04Myw2ICs4OCw0NSBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgYmxhc3Rfcm03a190Y2FjaGUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gQ0tTRUcwQUREUigwKTsKKwl1bnNpZ25lZCBsb25nIGVuZCA9IHN0YXJ0ICsgdGNhY2hlX3NpemU7CisKKwl3cml0ZV9jMF90YWdsbygwKTsKKworCXdoaWxlIChzdGFydCA8IGVuZCkgeworCQljYWNoZV9vcChQYWdlX0ludmFsaWRhdGVfVCwgc3RhcnQpOworCQlzdGFydCArPSB0Y19wYWdlc2l6ZTsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGluIHVuY2FjaGVkIGFkZHJlc3Mgc3BhY2UuCisgKi8KK3N0YXRpYyBfX2NwdWluaXQgdm9pZCBfX3JtN2tfdGNfZW5hYmxlKHZvaWQpCit7CisJaW50IGk7CisKKwlzZXRfYzBfY29uZmlnKFJNN0tfQ09ORl9URSk7CisKKwl3cml0ZV9jMF90YWdsbygwKTsKKwl3cml0ZV9jMF90YWdoaSgwKTsKKworCWZvciAoaSA9IDA7IGkgPCB0Y2FjaGVfc2l6ZTsgaSArPSB0Y19sc2l6ZSkKKwkJY2FjaGVfb3AoSW5kZXhfU3RvcmVfVGFnX1QsIENLU0VHMEFERFIoaSkpOworfQorCitzdGF0aWMgX19jcHVpbml0IHZvaWQgcm03a190Y19lbmFibGUodm9pZCkKK3sKKwlpZiAocmVhZF9jMF9jb25maWcoKSAmIFJNN0tfQ09ORl9URSkKKwkJcmV0dXJuOworCisJQlVHX09OKHRjYWNoZV9zaXplID09IDApOworCisJcnVuX3VuY2FjaGVkKF9fcm03a190Y19lbmFibGUpOworfQorCiAvKgogICogVGhpcyBmdW5jdGlvbiBpcyBleGVjdXRlZCBpbiB1bmNhY2hlZCBhZGRyZXNzIHNwYWNlLgogICovCkBAIC05NSwxNiArMTM5LDggQEAKIAl3cml0ZV9jMF90YWdsbygwKTsKIAl3cml0ZV9jMF90YWdoaSgwKTsKIAotCWZvciAoaSA9IDA7IGkgPCBzY2FjaGVfc2l6ZTsgaSArPSBzY19sc2l6ZSkgewotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSAgICAgICIuc2V0IG5vcmVvcmRlclxuXHQiCi0JCSAgICAgICIuc2V0IG1pcHMzXG5cdCIKLQkJICAgICAgImNhY2hlICUxLCAoJTApXG5cdCIKLQkJICAgICAgIi5zZXQgbWlwczBcblx0IgotCQkgICAgICAiLnNldCByZW9yZGVyIgotCQkgICAgICA6Ci0JCSAgICAgIDogInIiIChDS1NFRzBBRERSKGkpKSwgImkiIChJbmRleF9TdG9yZV9UYWdfU0QpKTsKLQl9CisJZm9yIChpID0gMDsgaSA8IHNjYWNoZV9zaXplOyBpICs9IHNjX2xzaXplKQorCQljYWNoZV9vcChJbmRleF9TdG9yZV9UYWdfU0QsIENLU0VHMEFERFIoaSkpOwogfQogCiBzdGF0aWMgX19jcHVpbml0IHZvaWQgcm03a19zY19lbmFibGUodm9pZCkKQEAgLTExMiwxMyArMTQ4LDI5IEBACiAJaWYgKHJlYWRfYzBfY29uZmlnKCkgJiBSTTdLX0NPTkZfU0UpCiAJCXJldHVybjsKIAotCXByaW50ayhLRVJOX0lORk8gIkVuYWJsaW5nIHNlY29uZGFyeSBjYWNoZS4uLlxuIik7CisJcHJfaW5mbygiRW5hYmxpbmcgc2Vjb25kYXJ5IGNhY2hlLi4uXG4iKTsKIAlydW5fdW5jYWNoZWQoX19ybTdrX3NjX2VuYWJsZSk7CisKKwlpZiAocm03a190Y2FjaGVfaW5pdCkKKwkJcm03a190Y19lbmFibGUoKTsKK30KKworc3RhdGljIHZvaWQgcm03a190Y19kaXNhYmxlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlibGFzdF9ybTdrX3RjYWNoZSgpOworCWNsZWFyX2MwX2NvbmZpZyhSTTdLX0NPTkZfVEUpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgcm03a19zY19kaXNhYmxlKHZvaWQpCiB7CiAJY2xlYXJfYzBfY29uZmlnKFJNN0tfQ09ORl9TRSk7CisKKwlpZiAocm03a190Y2FjaGVfaW5pdCkKKwkJcm03a190Y19kaXNhYmxlKCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYmNhY2hlX29wcyBybTdrX3NjX29wcyA9IHsKQEAgLTEyOCw2ICsxODAsNTIgQEAKIAkuYmNfaW52ID0gcm03a19zY19pbnYKIH07CiAKKy8qCisgKiBUaGlzIGlzIGEgcHJvYmluZyBmdW5jdGlvbiBsaWtlIHRoZSBvbmUgZm91bmQgaW4gYy1yNGsuYywgd2UgbG9vayBmb3IgdGhlCisgKiB3cmFwIGFyb3VuZCBwb2ludCB3aXRoIGRpZmZlcmVudCBhZGRyZXNzZXMuCisgKi8KK3N0YXRpYyBfX2NwdWluaXQgdm9pZCBfX3Byb2JlX3RjYWNoZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGFkZHIsIGJlZ2luLCBlbmQsIHBvdzI7CisKKwliZWdpbiA9ICh1bnNpZ25lZCBsb25nKSAmX3N0ZXh0OworCWJlZ2luICAmPSB+KCg4ICogMTAyNCAqIDEwMjQpIC0gMSk7CisJZW5kID0gYmVnaW4gKyAoOCAqIDEwMjQgKiAxMDI0KTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXNldF9jMF9jb25maWcoUk03S19DT05GX1RFKTsKKworCS8qIEZpbGwgc2l6ZS1tdWx0aXBsZSBsaW5lcyB3aXRoIGEgdmFsaWQgdGFnICovCisJcG93MiA9ICgyNTYgKiAxMDI0KTsKKwlmb3IgKGFkZHIgPSBiZWdpbjsgYWRkciA8PSBlbmQ7IGFkZHIgPSAoYmVnaW4gKyBwb3cyKSkgeworCQl1bnNpZ25lZCBsb25nICpwID0gKHVuc2lnbmVkIGxvbmcgKikgYWRkcjsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oIm5vcCIgOiA6ICJyIiAoKnApKTsKKwkJcG93MiA8PD0gMTsKKwl9CisKKwkvKiBMb2FkIGZpcnN0IGxpbmUgd2l0aCBhIDAgdGFnLCB0byBjaGVjayBhZnRlciAqLworCXdyaXRlX2MwX3RhZ2xvKDApOworCXdyaXRlX2MwX3RhZ2hpKDApOworCWNhY2hlX29wKEluZGV4X1N0b3JlX1RhZ19ULCBiZWdpbik7CisKKwkvKiBMb29rIGZvciB0aGUgd3JhcC1hcm91bmQgKi8KKwlwb3cyID0gKDUxMiAqIDEwMjQpOworCWZvciAoYWRkciA9IGJlZ2luICsgKDUxMiAqIDEwMjQpOyBhZGRyIDw9IGVuZDsgYWRkciA9IGJlZ2luICsgcG93MikgeworCQljYWNoZV9vcChJbmRleF9Mb2FkX1RhZ19ULCBhZGRyKTsKKwkJaWYgKCFyZWFkX2MwX3RhZ2xvKCkpCisJCQlicmVhazsKKwkJcG93MiA8PD0gMTsKKwl9CisKKwlhZGRyIC09IGJlZ2luOworCXRjYWNoZV9zaXplID0gYWRkcjsKKworCWNsZWFyX2MwX2NvbmZpZyhSTTdLX0NPTkZfVEUpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCiB2b2lkIF9fY3B1aW5pdCBybTdrX3NjX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgY3B1aW5mb19taXBzICpjID0gJmN1cnJlbnRfY3B1X2RhdGE7CkBAIC0xNDcsMjcgKzI0NSwyNiBAQAogCWlmICghKGNvbmZpZyAmIFJNN0tfQ09ORl9TRSkpCiAJCXJtN2tfc2NfZW5hYmxlKCk7CiAKKwliY29wcyA9ICZybTdrX3NjX29wczsKKwogCS8qCiAJICogV2hpbGUgd2UncmUgYXQgaXQgbGV0J3MgZGVhbCB3aXRoIHRoZSB0ZXJ0aWFyeSBjYWNoZS4KIAkgKi8KLQlpZiAoIShjb25maWcgJiBSTTdLX0NPTkZfVEMpKSB7CiAKLQkJLyoKLQkJICogV2UgY2FuJ3QgZW5hYmxlIHRoZSBMMyBjYWNoZSB5ZXQuIFRoZXJlIG1heSBiZSBib2FyZC1zcGVjaWZpYwotCQkgKiBtYWdpYyBuZWNlc3NhcnkgdG8gdHVybiBpdCBvbiwgYW5kIGJsaW5kbHkgYXNraW5nIHRoZSBDUFUgdG8KLQkJICogc3RhcnQgdXNpbmcgaXQgd291bGQgbWF5IGdpdmUgY2FjaGUgZXJyb3JzLgotCQkgKgotCQkgKiBBbHNvLCBib2FyZC1zcGVjaWZpYyBrbm93bGVkZ2UgbWF5IGFsbG93IHVzIHRvIHVzZSB0aGUKLQkJICogQ0FDSEUgRmxhc2hfSW52YWxpZGF0ZV9UIGluc3RydWN0aW9uIGlmIHRoZSB0YWcgUkFNIHN1cHBvcnRzCi0JCSAqIGl0LCBhbmQgbWF5IHNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIEwzIGNhY2hlIHNvIHdlIGRvbid0IGhhdmUKLQkJICogdG8gcHJvYmUgaXQuCi0JCSAqLwotCQlwcmludGsoS0VSTl9JTkZPICJUZXJ0aWFyeSBjYWNoZSBwcmVzZW50LCAlcyBlbmFibGVkXG4iLAotCQkgICAgICAgKGNvbmZpZyAmIFJNN0tfQ09ORl9URSkgPyAiYWxyZWFkeSIgOiAibm90ICh5ZXQpIik7CisJcm03a190Y2FjaGVfaW5pdCA9IDA7CisJdGNhY2hlX3NpemUgPSAwOwogCi0JCWlmICgoY29uZmlnICYgUk03S19DT05GX1RFKSkKLQkJCXJtN2tfdGNhY2hlX2VuYWJsZWQgPSAxOwotCX0KKwlpZiAoY29uZmlnICYgUk03S19DT05GX1RDKQorCQlyZXR1cm47CiAKLQliY29wcyA9ICZybTdrX3NjX29wczsKKwkvKgorCSAqIE5vIGVmZmljaWVudCB3YXkgdG8gYXNrIHRoZSBoYXJkd2FyZSBmb3IgdGhlIHNpemUgb2YgdGhlIHRjYWNoZSwKKwkgKiBzbyBtdXN0IHByb2JlIGZvciBpdC4KKwkgKi8KKwlydW5fdW5jYWNoZWQoX19wcm9iZV90Y2FjaGUpOworCXJtN2tfdGNfZW5hYmxlKCk7CisJcm03a190Y2FjaGVfaW5pdCA9IDE7CisJYy0+dGNhY2hlLmxpbmVzeiA9IHRjX2xzaXplOworCWMtPnRjYWNoZS53YXlzID0gMTsKKwlwcl9pbmZvKCJUZXJ0aWFyeSBjYWNoZSBzaXplICVsZEsuXG4iLCAodGNhY2hlX3NpemUgPj4gMTApKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS90bGJleC5jIGIvYXJjaC9taXBzL21tL3RsYmV4LmMKaW5kZXggODZmMDA0ZC4uNDUxMGU2MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3RsYmV4LmMKKysrIGIvYXJjaC9taXBzL21tL3RsYmV4LmMKQEAgLTQwOSw2ICs0MDksMTEgQEAKIAkJdGxidyhwKTsKIAkJYnJlYWs7CiAKKwljYXNlIENQVV9KWlJJU0M6CisJCXRsYncocCk7CisJCXVhc21faV9ub3AocCk7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJcGFuaWMoIk5vIFRMQiByZWZpbGwgaGFuZGxlciB5ZXQgKENQVSB0eXBlOiAlZCkiLAogCQkgICAgICBjdXJyZW50X2NwdV9kYXRhLmNwdXR5cGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3Vhc20uYyBiL2FyY2gvbWlwcy9tbS91YXNtLmMKaW5kZXggNjExZDU2NC4uZDI2NDdhNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3Vhc20uYworKysgYi9hcmNoL21pcHMvbW0vdWFzbS5jCkBAIC02MiwxMiArNjIsMTMgQEAKIAlpbnNuX2JlcWwsIGluc25fYmdleiwgaW5zbl9iZ2V6bCwgaW5zbl9ibHR6LCBpbnNuX2JsdHpsLAogCWluc25fYm5lLCBpbnNuX2NhY2hlLCBpbnNuX2RhZGR1LCBpbnNuX2RhZGRpdSwgaW5zbl9kbWZjMCwKIAlpbnNuX2RtdGMwLCBpbnNuX2RzbGwsIGluc25fZHNsbDMyLCBpbnNuX2RzcmEsIGluc25fZHNybCwKLQlpbnNuX2RzcmwzMiwgaW5zbl9kcm90ciwgaW5zbl9kc3VidSwgaW5zbl9lcmV0LCBpbnNuX2osIGluc25famFsLAotCWluc25fanIsIGluc25fbGQsIGluc25fbGwsIGluc25fbGxkLCBpbnNuX2x1aSwgaW5zbl9sdywgaW5zbl9tZmMwLAotCWluc25fbXRjMCwgaW5zbl9vciwgaW5zbl9vcmksIGluc25fcHJlZiwgaW5zbl9yZmUsIGluc25fc2MsIGluc25fc2NkLAotCWluc25fc2QsIGluc25fc2xsLCBpbnNuX3NyYSwgaW5zbl9zcmwsIGluc25fcm90ciwgaW5zbl9zdWJ1LCBpbnNuX3N3LAotCWluc25fdGxicCwgaW5zbl90bGJyLCBpbnNuX3RsYndpLCBpbnNuX3RsYndyLCBpbnNuX3hvciwgaW5zbl94b3JpLAotCWluc25fZGlucywgaW5zbl9zeXNjYWxsCisJaW5zbl9kc3JsMzIsIGluc25fZHJvdHIsIGluc25fZHJvdHIzMiwgaW5zbl9kc3VidSwgaW5zbl9lcmV0LAorCWluc25faiwgaW5zbl9qYWwsIGluc25fanIsIGluc25fbGQsIGluc25fbGwsIGluc25fbGxkLAorCWluc25fbHVpLCBpbnNuX2x3LCBpbnNuX21mYzAsIGluc25fbXRjMCwgaW5zbl9vciwgaW5zbl9vcmksCisJaW5zbl9wcmVmLCBpbnNuX3JmZSwgaW5zbl9zYywgaW5zbl9zY2QsIGluc25fc2QsIGluc25fc2xsLAorCWluc25fc3JhLCBpbnNuX3NybCwgaW5zbl9yb3RyLCBpbnNuX3N1YnUsIGluc25fc3csIGluc25fdGxicCwKKwlpbnNuX3RsYnIsIGluc25fdGxid2ksIGluc25fdGxid3IsIGluc25feG9yLCBpbnNuX3hvcmksCisJaW5zbl9kaW5zLCBpbnNuX3N5c2NhbGwsIGluc25fYmJpdDAsIGluc25fYmJpdDEKIH07CiAKIHN0cnVjdCBpbnNuIHsKQEAgLTg1LDcgKzg2LDcgQEAKIAkgfCAoZSkgPDwgUkVfU0gJCQkJCQlcCiAJIHwgKGYpIDw8IEZVTkNfU0gpCiAKLXN0YXRpYyBzdHJ1Y3QgaW5zbiBpbnNuX3RhYmxlW10gX19jcHVpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaW5zbiBpbnNuX3RhYmxlW10gX191YXNtaW5pdGRhdGEgPSB7CiAJeyBpbnNuX2FkZGl1LCBNKGFkZGl1X29wLCAwLCAwLCAwLCAwLCAwKSwgUlMgfCBSVCB8IFNJTU0gfSwKIAl7IGluc25fYWRkdSwgTShzcGVjX29wLCAwLCAwLCAwLCAwLCBhZGR1X29wKSwgUlMgfCBSVCB8IFJEIH0sCiAJeyBpbnNuX2FuZCwgTShzcGVjX29wLCAwLCAwLCAwLCAwLCBhbmRfb3ApLCBSUyB8IFJUIHwgUkQgfSwKQEAgLTEwOCw2ICsxMDksNyBAQAogCXsgaW5zbl9kc3JsLCBNKHNwZWNfb3AsIDAsIDAsIDAsIDAsIGRzcmxfb3ApLCBSVCB8IFJEIHwgUkUgfSwKIAl7IGluc25fZHNybDMyLCBNKHNwZWNfb3AsIDAsIDAsIDAsIDAsIGRzcmwzMl9vcCksIFJUIHwgUkQgfCBSRSB9LAogCXsgaW5zbl9kcm90ciwgTShzcGVjX29wLCAxLCAwLCAwLCAwLCBkc3JsX29wKSwgUlQgfCBSRCB8IFJFIH0sCisJeyBpbnNuX2Ryb3RyMzIsIE0oc3BlY19vcCwgMSwgMCwgMCwgMCwgZHNybDMyX29wKSwgUlQgfCBSRCB8IFJFIH0sCiAJeyBpbnNuX2RzdWJ1LCBNKHNwZWNfb3AsIDAsIDAsIDAsIDAsIGRzdWJ1X29wKSwgUlMgfCBSVCB8IFJEIH0sCiAJeyBpbnNuX2VyZXQsICBNKGNvcDBfb3AsIGNvcF9vcCwgMCwgMCwgMCwgZXJldF9vcCksICAwIH0sCiAJeyBpbnNuX2osICBNKGpfb3AsIDAsIDAsIDAsIDAsIDApLCAgSklNTSB9LApAQCAtMTQxLDEyICsxNDMsMTQgQEAKIAl7IGluc25feG9yaSwgIE0oeG9yaV9vcCwgMCwgMCwgMCwgMCwgMCksICBSUyB8IFJUIHwgVUlNTSB9LAogCXsgaW5zbl9kaW5zLCBNKHNwZWMzX29wLCAwLCAwLCAwLCAwLCBkaW5zX29wKSwgUlMgfCBSVCB8IFJEIHwgUkUgfSwKIAl7IGluc25fc3lzY2FsbCwgTShzcGVjX29wLCAwLCAwLCAwLCAwLCBzeXNjYWxsX29wKSwgU0NJTU19LAorCXsgaW5zbl9iYml0MCwgTShsd2MyX29wLCAwLCAwLCAwLCAwLCAwKSwgUlMgfCBSVCB8IEJJTU0gfSwKKwl7IGluc25fYmJpdDEsIE0oc3djMl9vcCwgMCwgMCwgMCwgMCwgMCksIFJTIHwgUlQgfCBCSU1NIH0sCiAJeyBpbnNuX2ludmFsaWQsIDAsIDAgfQogfTsKIAogI3VuZGVmIE0KIAotc3RhdGljIGlubGluZSBfX2NwdWluaXQgdTMyIGJ1aWxkX3JzKHUzMiBhcmcpCitzdGF0aWMgaW5saW5lIF9fdWFzbWluaXQgdTMyIGJ1aWxkX3JzKHUzMiBhcmcpCiB7CiAJaWYgKGFyZyAmIH5SU19NQVNLKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJNaWNyby1hc3NlbWJsZXIgZmllbGQgb3ZlcmZsb3dcbiIpOwpAQCAtMTU0LDcgKzE1OCw3IEBACiAJcmV0dXJuIChhcmcgJiBSU19NQVNLKSA8PCBSU19TSDsKIH0KIAotc3RhdGljIGlubGluZSBfX2NwdWluaXQgdTMyIGJ1aWxkX3J0KHUzMiBhcmcpCitzdGF0aWMgaW5saW5lIF9fdWFzbWluaXQgdTMyIGJ1aWxkX3J0KHUzMiBhcmcpCiB7CiAJaWYgKGFyZyAmIH5SVF9NQVNLKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJNaWNyby1hc3NlbWJsZXIgZmllbGQgb3ZlcmZsb3dcbiIpOwpAQCAtMTYyLDcgKzE2Niw3IEBACiAJcmV0dXJuIChhcmcgJiBSVF9NQVNLKSA8PCBSVF9TSDsKIH0KIAotc3RhdGljIGlubGluZSBfX2NwdWluaXQgdTMyIGJ1aWxkX3JkKHUzMiBhcmcpCitzdGF0aWMgaW5saW5lIF9fdWFzbWluaXQgdTMyIGJ1aWxkX3JkKHUzMiBhcmcpCiB7CiAJaWYgKGFyZyAmIH5SRF9NQVNLKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJNaWNyby1hc3NlbWJsZXIgZmllbGQgb3ZlcmZsb3dcbiIpOwpAQCAtMTcwLDcgKzE3NCw3IEBACiAJcmV0dXJuIChhcmcgJiBSRF9NQVNLKSA8PCBSRF9TSDsKIH0KIAotc3RhdGljIGlubGluZSBfX2NwdWluaXQgdTMyIGJ1aWxkX3JlKHUzMiBhcmcpCitzdGF0aWMgaW5saW5lIF9fdWFzbWluaXQgdTMyIGJ1aWxkX3JlKHUzMiBhcmcpCiB7CiAJaWYgKGFyZyAmIH5SRV9NQVNLKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJNaWNyby1hc3NlbWJsZXIgZmllbGQgb3ZlcmZsb3dcbiIpOwpAQCAtMTc4LDcgKzE4Miw3IEBACiAJcmV0dXJuIChhcmcgJiBSRV9NQVNLKSA8PCBSRV9TSDsKIH0KIAotc3RhdGljIGlubGluZSBfX2NwdWluaXQgdTMyIGJ1aWxkX3NpbW0oczMyIGFyZykKK3N0YXRpYyBpbmxpbmUgX191YXNtaW5pdCB1MzIgYnVpbGRfc2ltbShzMzIgYXJnKQogewogCWlmIChhcmcgPiAweDdmZmYgfHwgYXJnIDwgLTB4ODAwMCkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiTWljcm8tYXNzZW1ibGVyIGZpZWxkIG92ZXJmbG93XG4iKTsKQEAgLTE4Niw3ICsxOTAsNyBAQAogCXJldHVybiBhcmcgJiAweGZmZmY7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX19jcHVpbml0IHUzMiBidWlsZF91aW1tKHUzMiBhcmcpCitzdGF0aWMgaW5saW5lIF9fdWFzbWluaXQgdTMyIGJ1aWxkX3VpbW0odTMyIGFyZykKIHsKIAlpZiAoYXJnICYgfklNTV9NQVNLKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJNaWNyby1hc3NlbWJsZXIgZmllbGQgb3ZlcmZsb3dcbiIpOwpAQCAtMTk0LDcgKzE5OCw3IEBACiAJcmV0dXJuIGFyZyAmIElNTV9NQVNLOwogfQogCi1zdGF0aWMgaW5saW5lIF9fY3B1aW5pdCB1MzIgYnVpbGRfYmltbShzMzIgYXJnKQorc3RhdGljIGlubGluZSBfX3Vhc21pbml0IHUzMiBidWlsZF9iaW1tKHMzMiBhcmcpCiB7CiAJaWYgKGFyZyA+IDB4MWZmZmYgfHwgYXJnIDwgLTB4MjAwMDApCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIk1pY3JvLWFzc2VtYmxlciBmaWVsZCBvdmVyZmxvd1xuIik7CkBAIC0yMDUsNyArMjA5LDcgQEAKIAlyZXR1cm4gKChhcmcgPCAwKSA/ICgxIDw8IDE1KSA6IDApIHwgKChhcmcgPj4gMikgJiAweDdmZmYpOwogfQogCi1zdGF0aWMgaW5saW5lIF9fY3B1aW5pdCB1MzIgYnVpbGRfamltbSh1MzIgYXJnKQorc3RhdGljIGlubGluZSBfX3Vhc21pbml0IHUzMiBidWlsZF9qaW1tKHUzMiBhcmcpCiB7CiAJaWYgKGFyZyAmIH4oKEpJTU1fTUFTSykgPDwgMikpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIk1pY3JvLWFzc2VtYmxlciBmaWVsZCBvdmVyZmxvd1xuIik7CkBAIC0yMTMsNyArMjE3LDcgQEAKIAlyZXR1cm4gKGFyZyA+PiAyKSAmIEpJTU1fTUFTSzsKIH0KIAotc3RhdGljIGlubGluZSBfX2NwdWluaXQgdTMyIGJ1aWxkX3NjaW1tKHUzMiBhcmcpCitzdGF0aWMgaW5saW5lIF9fdWFzbWluaXQgdTMyIGJ1aWxkX3NjaW1tKHUzMiBhcmcpCiB7CiAJaWYgKGFyZyAmIH5TQ0lNTV9NQVNLKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJNaWNyby1hc3NlbWJsZXIgZmllbGQgb3ZlcmZsb3dcbiIpOwpAQCAtMjIxLDcgKzIyNSw3IEBACiAJcmV0dXJuIChhcmcgJiBTQ0lNTV9NQVNLKSA8PCBTQ0lNTV9TSDsKIH0KIAotc3RhdGljIGlubGluZSBfX2NwdWluaXQgdTMyIGJ1aWxkX2Z1bmModTMyIGFyZykKK3N0YXRpYyBpbmxpbmUgX191YXNtaW5pdCB1MzIgYnVpbGRfZnVuYyh1MzIgYXJnKQogewogCWlmIChhcmcgJiB+RlVOQ19NQVNLKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJNaWNyby1hc3NlbWJsZXIgZmllbGQgb3ZlcmZsb3dcbiIpOwpAQCAtMjI5LDcgKzIzMyw3IEBACiAJcmV0dXJuIGFyZyAmIEZVTkNfTUFTSzsKIH0KIAotc3RhdGljIGlubGluZSBfX2NwdWluaXQgdTMyIGJ1aWxkX3NldCh1MzIgYXJnKQorc3RhdGljIGlubGluZSBfX3Vhc21pbml0IHUzMiBidWlsZF9zZXQodTMyIGFyZykKIHsKIAlpZiAoYXJnICYgflNFVF9NQVNLKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJNaWNyby1hc3NlbWJsZXIgZmllbGQgb3ZlcmZsb3dcbiIpOwpAQCAtMjQxLDcgKzI0NSw3IEBACiAgKiBUaGUgb3JkZXIgb2Ygb3Bjb2RlIGFyZ3VtZW50cyBpcyBpbXBsaWNpdGx5IGxlZnQgdG8gcmlnaHQsCiAgKiBzdGFydGluZyB3aXRoIFJTIGFuZCBlbmRpbmcgd2l0aCBGVU5DIG9yIElNTS4KICAqLwotc3RhdGljIHZvaWQgX19jcHVpbml0IGJ1aWxkX2luc24odTMyICoqYnVmLCBlbnVtIG9wY29kZSBvcGMsIC4uLikKK3N0YXRpYyB2b2lkIF9fdWFzbWluaXQgYnVpbGRfaW5zbih1MzIgKipidWYsIGVudW0gb3Bjb2RlIG9wYywgLi4uKQogewogCXN0cnVjdCBpbnNuICppcCA9IE5VTEw7CiAJdW5zaWduZWQgaW50IGk7CkBAIC0yOTEsNjcgKzI5NSw3OCBAQAogSXBfdTF1MnUzKG9wKQkJCQkJCVwKIHsJCQkJCQkJXAogCWJ1aWxkX2luc24oYnVmLCBpbnNuIyNvcCwgYSwgYiwgYyk7CQlcCi19Cit9CQkJCQkJCVwKK1VBU01fRVhQT1JUX1NZTUJPTCh1YXNtX2kjI29wKTsKIAogI2RlZmluZSBJX3UydTF1MyhvcCkJCQkJCVwKIElwX3UydTF1MyhvcCkJCQkJCQlcCiB7CQkJCQkJCVwKIAlidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGIsIGEsIGMpOwkJXAotfQorfQkJCQkJCQlcCitVQVNNX0VYUE9SVF9TWU1CT0wodWFzbV9pIyNvcCk7CiAKICNkZWZpbmUgSV91M3UxdTIob3ApCQkJCQlcCiBJcF91M3UxdTIob3ApCQkJCQkJXAogewkJCQkJCQlcCiAJYnVpbGRfaW5zbihidWYsIGluc24jI29wLCBiLCBjLCBhKTsJCVwKLX0KK30JCQkJCQkJXAorVUFTTV9FWFBPUlRfU1lNQk9MKHVhc21faSMjb3ApOwogCiAjZGVmaW5lIElfdTF1MnMzKG9wKQkJCQkJXAogSXBfdTF1MnMzKG9wKQkJCQkJCVwKIHsJCQkJCQkJXAogCWJ1aWxkX2luc24oYnVmLCBpbnNuIyNvcCwgYSwgYiwgYyk7CQlcCi19Cit9CQkJCQkJCVwKK1VBU01fRVhQT1JUX1NZTUJPTCh1YXNtX2kjI29wKTsKIAogI2RlZmluZSBJX3UyczN1MShvcCkJCQkJCVwKIElwX3UyczN1MShvcCkJCQkJCQlcCiB7CQkJCQkJCVwKIAlidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGMsIGEsIGIpOwkJXAotfQorfQkJCQkJCQlcCitVQVNNX0VYUE9SVF9TWU1CT0wodWFzbV9pIyNvcCk7CiAKICNkZWZpbmUgSV91MnUxczMob3ApCQkJCQlcCiBJcF91MnUxczMob3ApCQkJCQkJXAogewkJCQkJCQlcCiAJYnVpbGRfaW5zbihidWYsIGluc24jI29wLCBiLCBhLCBjKTsJCVwKLX0KK30JCQkJCQkJXAorVUFTTV9FWFBPUlRfU1lNQk9MKHVhc21faSMjb3ApOwogCiAjZGVmaW5lIElfdTJ1MW1zYnUzKG9wKQkJCQkJXAogSXBfdTJ1MW1zYnUzKG9wKQkJCQkJXAogewkJCQkJCQlcCiAJYnVpbGRfaW5zbihidWYsIGluc24jI29wLCBiLCBhLCBjK2QtMSwgYyk7CVwKLX0KK30JCQkJCQkJXAorVUFTTV9FWFBPUlRfU1lNQk9MKHVhc21faSMjb3ApOwogCiAjZGVmaW5lIElfdTF1MihvcCkJCQkJCVwKIElwX3UxdTIob3ApCQkJCQkJXAogewkJCQkJCQlcCiAJYnVpbGRfaW5zbihidWYsIGluc24jI29wLCBhLCBiKTsJCVwKLX0KK30JCQkJCQkJXAorVUFTTV9FWFBPUlRfU1lNQk9MKHVhc21faSMjb3ApOwogCiAjZGVmaW5lIElfdTFzMihvcCkJCQkJCVwKIElwX3UxczIob3ApCQkJCQkJXAogewkJCQkJCQlcCiAJYnVpbGRfaW5zbihidWYsIGluc24jI29wLCBhLCBiKTsJCVwKLX0KK30JCQkJCQkJXAorVUFTTV9FWFBPUlRfU1lNQk9MKHVhc21faSMjb3ApOwogCiAjZGVmaW5lIElfdTEob3ApCQkJCQlcCiBJcF91MShvcCkJCQkJCQlcCiB7CQkJCQkJCVwKIAlidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGEpOwkJCVwKLX0KK30JCQkJCQkJXAorVUFTTV9FWFBPUlRfU1lNQk9MKHVhc21faSMjb3ApOwogCiAjZGVmaW5lIElfMChvcCkJCQkJCQlcCiBJcF8wKG9wKQkJCQkJCVwKIHsJCQkJCQkJXAogCWJ1aWxkX2luc24oYnVmLCBpbnNuIyNvcCk7CQkJXAotfQorfQkJCQkJCQlcCitVQVNNX0VYUE9SVF9TWU1CT0wodWFzbV9pIyNvcCk7CiAKIElfdTJ1MXMzKF9hZGRpdSkKIElfdTN1MXUyKF9hZGR1KQpAQCAtMzc1LDYgKzM5MCw3IEBACiBJX3UydTF1MyhfZHNybCkKIElfdTJ1MXUzKF9kc3JsMzIpCiBJX3UydTF1MyhfZHJvdHIpCitJX3UydTF1MyhfZHJvdHIzMikKIElfdTN1MXUyKF9kc3VidSkKIElfMChfZXJldCkKIElfdTEoX2opCkBAIC00MDgsMTYgKzQyNCwxOSBAQAogSV91MnUxdTMoX3hvcmkpCiBJX3UydTFtc2J1MyhfZGlucyk7CiBJX3UxKF9zeXNjYWxsKTsKK0lfdTF1MnMzKF9iYml0MCk7CitJX3UxdTJzMyhfYmJpdDEpOwogCiAvKiBIYW5kbGUgbGFiZWxzLiAqLwotdm9pZCBfX2NwdWluaXQgdWFzbV9idWlsZF9sYWJlbChzdHJ1Y3QgdWFzbV9sYWJlbCAqKmxhYiwgdTMyICphZGRyLCBpbnQgbGlkKQordm9pZCBfX3Vhc21pbml0IHVhc21fYnVpbGRfbGFiZWwoc3RydWN0IHVhc21fbGFiZWwgKipsYWIsIHUzMiAqYWRkciwgaW50IGxpZCkKIHsKIAkoKmxhYiktPmFkZHIgPSBhZGRyOwogCSgqbGFiKS0+bGFiID0gbGlkOwogCSgqbGFiKSsrOwogfQorVUFTTV9FWFBPUlRfU1lNQk9MKHVhc21fYnVpbGRfbGFiZWwpOwogCi1pbnQgX19jcHVpbml0IHVhc21faW5fY29tcGF0X3NwYWNlX3AobG9uZyBhZGRyKQoraW50IF9fdWFzbWluaXQgdWFzbV9pbl9jb21wYXRfc3BhY2VfcChsb25nIGFkZHIpCiB7CiAJLyogSXMgdGhpcyBhZGRyZXNzIGluIDMyYml0IGNvbXBhdCBzcGFjZT8gKi8KICNpZmRlZiBDT05GSUdfNjRCSVQKQEAgLTQyNiw4ICs0NDUsOSBAQAogCXJldHVybiAxOwogI2VuZGlmCiB9CitVQVNNX0VYUE9SVF9TWU1CT0wodWFzbV9pbl9jb21wYXRfc3BhY2VfcCk7CiAKLXN0YXRpYyBpbnQgX19jcHVpbml0IHVhc21fcmVsX2hpZ2hlc3QobG9uZyB2YWwpCitzdGF0aWMgaW50IF9fdWFzbWluaXQgdWFzbV9yZWxfaGlnaGVzdChsb25nIHZhbCkKIHsKICNpZmRlZiBDT05GSUdfNjRCSVQKIAlyZXR1cm4gKCgoKHZhbCArIDB4ODAwMDgwMDA4MDAwTCkgPj4gNDgpICYgMHhmZmZmKSBeIDB4ODAwMCkgLSAweDgwMDA7CkBAIC00MzYsNyArNDU2LDcgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgaW50IF9fY3B1aW5pdCB1YXNtX3JlbF9oaWdoZXIobG9uZyB2YWwpCitzdGF0aWMgaW50IF9fdWFzbWluaXQgdWFzbV9yZWxfaGlnaGVyKGxvbmcgdmFsKQogewogI2lmZGVmIENPTkZJR182NEJJVAogCXJldHVybiAoKCgodmFsICsgMHg4MDAwODAwMEwpID4+IDMyKSAmIDB4ZmZmZikgXiAweDgwMDApIC0gMHg4MDAwOwpAQCAtNDQ1LDE3ICs0NjUsMTkgQEAKICNlbmRpZgogfQogCi1pbnQgX19jcHVpbml0IHVhc21fcmVsX2hpKGxvbmcgdmFsKQoraW50IF9fdWFzbWluaXQgdWFzbV9yZWxfaGkobG9uZyB2YWwpCiB7CiAJcmV0dXJuICgoKCh2YWwgKyAweDgwMDBMKSA+PiAxNikgJiAweGZmZmYpIF4gMHg4MDAwKSAtIDB4ODAwMDsKIH0KK1VBU01fRVhQT1JUX1NZTUJPTCh1YXNtX3JlbF9oaSk7CiAKLWludCBfX2NwdWluaXQgdWFzbV9yZWxfbG8obG9uZyB2YWwpCitpbnQgX191YXNtaW5pdCB1YXNtX3JlbF9sbyhsb25nIHZhbCkKIHsKIAlyZXR1cm4gKCh2YWwgJiAweGZmZmYpIF4gMHg4MDAwKSAtIDB4ODAwMDsKIH0KK1VBU01fRVhQT1JUX1NZTUJPTCh1YXNtX3JlbF9sbyk7CiAKLXZvaWQgX19jcHVpbml0IFVBU01faV9MQV9tb3N0bHkodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgcnMsIGxvbmcgYWRkcikKK3ZvaWQgX191YXNtaW5pdCBVQVNNX2lfTEFfbW9zdGx5KHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IHJzLCBsb25nIGFkZHIpCiB7CiAJaWYgKCF1YXNtX2luX2NvbXBhdF9zcGFjZV9wKGFkZHIpKSB7CiAJCXVhc21faV9sdWkoYnVmLCBycywgdWFzbV9yZWxfaGlnaGVzdChhZGRyKSk7CkBAIC00NzAsOCArNDkyLDkgQEAKIAl9IGVsc2UKIAkJdWFzbV9pX2x1aShidWYsIHJzLCB1YXNtX3JlbF9oaShhZGRyKSk7CiB9CitVQVNNX0VYUE9SVF9TWU1CT0woVUFTTV9pX0xBX21vc3RseSk7CiAKLXZvaWQgX19jcHVpbml0IFVBU01faV9MQSh1MzIgKipidWYsIHVuc2lnbmVkIGludCBycywgbG9uZyBhZGRyKQordm9pZCBfX3Vhc21pbml0IFVBU01faV9MQSh1MzIgKipidWYsIHVuc2lnbmVkIGludCBycywgbG9uZyBhZGRyKQogewogCVVBU01faV9MQV9tb3N0bHkoYnVmLCBycywgYWRkcik7CiAJaWYgKHVhc21fcmVsX2xvKGFkZHIpKSB7CkBAIC00ODEsOSArNTA0LDEwIEBACiAJCQl1YXNtX2lfYWRkaXUoYnVmLCBycywgcnMsIHVhc21fcmVsX2xvKGFkZHIpKTsKIAl9CiB9CitVQVNNX0VYUE9SVF9TWU1CT0woVUFTTV9pX0xBKTsKIAogLyogSGFuZGxlIHJlbG9jYXRpb25zLiAqLwotdm9pZCBfX2NwdWluaXQKK3ZvaWQgX191YXNtaW5pdAogdWFzbV9yX21pcHNfcGMxNihzdHJ1Y3QgdWFzbV9yZWxvYyAqKnJlbCwgdTMyICphZGRyLCBpbnQgbGlkKQogewogCSgqcmVsKS0+YWRkciA9IGFkZHI7CkBAIC00OTEsOCArNTE1LDkgQEAKIAkoKnJlbCktPmxhYiA9IGxpZDsKIAkoKnJlbCkrKzsKIH0KK1VBU01fRVhQT1JUX1NZTUJPTCh1YXNtX3JfbWlwc19wYzE2KTsKIAotc3RhdGljIGlubGluZSB2b2lkIF9fY3B1aW5pdAorc3RhdGljIGlubGluZSB2b2lkIF9fdWFzbWluaXQKIF9fcmVzb2x2ZV9yZWxvY3Moc3RydWN0IHVhc21fcmVsb2MgKnJlbCwgc3RydWN0IHVhc21fbGFiZWwgKmxhYikKIHsKIAlsb25nIGxhZGRyID0gKGxvbmcpbGFiLT5hZGRyOwpAQCAtNTA5LDcgKzUzNCw3IEBACiAJfQogfQogCi12b2lkIF9fY3B1aW5pdAordm9pZCBfX3Vhc21pbml0CiB1YXNtX3Jlc29sdmVfcmVsb2NzKHN0cnVjdCB1YXNtX3JlbG9jICpyZWwsIHN0cnVjdCB1YXNtX2xhYmVsICpsYWIpCiB7CiAJc3RydWN0IHVhc21fbGFiZWwgKmw7CkBAIC01MTksMjQgKzU0NCwyNyBAQAogCQkJaWYgKHJlbC0+bGFiID09IGwtPmxhYikKIAkJCQlfX3Jlc29sdmVfcmVsb2NzKHJlbCwgbCk7CiB9CitVQVNNX0VYUE9SVF9TWU1CT0wodWFzbV9yZXNvbHZlX3JlbG9jcyk7CiAKLXZvaWQgX19jcHVpbml0Cit2b2lkIF9fdWFzbWluaXQKIHVhc21fbW92ZV9yZWxvY3Moc3RydWN0IHVhc21fcmVsb2MgKnJlbCwgdTMyICpmaXJzdCwgdTMyICplbmQsIGxvbmcgb2ZmKQogewogCWZvciAoOyByZWwtPmxhYiAhPSBVQVNNX0xBQkVMX0lOVkFMSUQ7IHJlbCsrKQogCQlpZiAocmVsLT5hZGRyID49IGZpcnN0ICYmIHJlbC0+YWRkciA8IGVuZCkKIAkJCXJlbC0+YWRkciArPSBvZmY7CiB9CitVQVNNX0VYUE9SVF9TWU1CT0wodWFzbV9tb3ZlX3JlbG9jcyk7CiAKLXZvaWQgX19jcHVpbml0Cit2b2lkIF9fdWFzbWluaXQKIHVhc21fbW92ZV9sYWJlbHMoc3RydWN0IHVhc21fbGFiZWwgKmxhYiwgdTMyICpmaXJzdCwgdTMyICplbmQsIGxvbmcgb2ZmKQogewogCWZvciAoOyBsYWItPmxhYiAhPSBVQVNNX0xBQkVMX0lOVkFMSUQ7IGxhYisrKQogCQlpZiAobGFiLT5hZGRyID49IGZpcnN0ICYmIGxhYi0+YWRkciA8IGVuZCkKIAkJCWxhYi0+YWRkciArPSBvZmY7CiB9CitVQVNNX0VYUE9SVF9TWU1CT0wodWFzbV9tb3ZlX2xhYmVscyk7CiAKLXZvaWQgX19jcHVpbml0Cit2b2lkIF9fdWFzbWluaXQKIHVhc21fY29weV9oYW5kbGVyKHN0cnVjdCB1YXNtX3JlbG9jICpyZWwsIHN0cnVjdCB1YXNtX2xhYmVsICpsYWIsIHUzMiAqZmlyc3QsCiAJCSAgdTMyICplbmQsIHUzMiAqdGFyZ2V0KQogewpAQCAtNTQ3LDggKzU3NSw5IEBACiAJdWFzbV9tb3ZlX3JlbG9jcyhyZWwsIGZpcnN0LCBlbmQsIG9mZik7CiAJdWFzbV9tb3ZlX2xhYmVscyhsYWIsIGZpcnN0LCBlbmQsIG9mZik7CiB9CitVQVNNX0VYUE9SVF9TWU1CT0wodWFzbV9jb3B5X2hhbmRsZXIpOwogCi1pbnQgX19jcHVpbml0IHVhc21faW5zbl9oYXNfYmRlbGF5KHN0cnVjdCB1YXNtX3JlbG9jICpyZWwsIHUzMiAqYWRkcikKK2ludCBfX3Vhc21pbml0IHVhc21faW5zbl9oYXNfYmRlbGF5KHN0cnVjdCB1YXNtX3JlbG9jICpyZWwsIHUzMiAqYWRkcikKIHsKIAlmb3IgKDsgcmVsLT5sYWIgIT0gVUFTTV9MQUJFTF9JTlZBTElEOyByZWwrKykgewogCQlpZiAocmVsLT5hZGRyID09IGFkZHIKQEAgLTU1OSw2MSArNTg4LDg4IEBACiAKIAlyZXR1cm4gMDsKIH0KK1VBU01fRVhQT1JUX1NZTUJPTCh1YXNtX2luc25faGFzX2JkZWxheSk7CiAKIC8qIENvbnZlbmllbmNlIGZ1bmN0aW9ucyBmb3IgbGFiZWxlZCBicmFuY2hlcy4gKi8KLXZvaWQgX19jcHVpbml0Cit2b2lkIF9fdWFzbWluaXQKIHVhc21faWxfYmx0eih1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIHVuc2lnbmVkIGludCByZWcsIGludCBsaWQpCiB7CiAJdWFzbV9yX21pcHNfcGMxNihyLCAqcCwgbGlkKTsKIAl1YXNtX2lfYmx0eihwLCByZWcsIDApOwogfQorVUFTTV9FWFBPUlRfU1lNQk9MKHVhc21faWxfYmx0eik7CiAKLXZvaWQgX19jcHVpbml0Cit2b2lkIF9fdWFzbWluaXQKIHVhc21faWxfYih1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIGludCBsaWQpCiB7CiAJdWFzbV9yX21pcHNfcGMxNihyLCAqcCwgbGlkKTsKIAl1YXNtX2lfYihwLCAwKTsKIH0KK1VBU01fRVhQT1JUX1NZTUJPTCh1YXNtX2lsX2IpOwogCi12b2lkIF9fY3B1aW5pdAordm9pZCBfX3Vhc21pbml0CiB1YXNtX2lsX2JlcXoodTMyICoqcCwgc3RydWN0IHVhc21fcmVsb2MgKipyLCB1bnNpZ25lZCBpbnQgcmVnLCBpbnQgbGlkKQogewogCXVhc21fcl9taXBzX3BjMTYociwgKnAsIGxpZCk7CiAJdWFzbV9pX2JlcXoocCwgcmVnLCAwKTsKIH0KK1VBU01fRVhQT1JUX1NZTUJPTCh1YXNtX2lsX2JlcXopOwogCi12b2lkIF9fY3B1aW5pdAordm9pZCBfX3Vhc21pbml0CiB1YXNtX2lsX2JlcXpsKHUzMiAqKnAsIHN0cnVjdCB1YXNtX3JlbG9jICoqciwgdW5zaWduZWQgaW50IHJlZywgaW50IGxpZCkKIHsKIAl1YXNtX3JfbWlwc19wYzE2KHIsICpwLCBsaWQpOwogCXVhc21faV9iZXF6bChwLCByZWcsIDApOwogfQorVUFTTV9FWFBPUlRfU1lNQk9MKHVhc21faWxfYmVxemwpOwogCi12b2lkIF9fY3B1aW5pdAordm9pZCBfX3Vhc21pbml0CiB1YXNtX2lsX2JuZSh1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIHVuc2lnbmVkIGludCByZWcxLAogCXVuc2lnbmVkIGludCByZWcyLCBpbnQgbGlkKQogewogCXVhc21fcl9taXBzX3BjMTYociwgKnAsIGxpZCk7CiAJdWFzbV9pX2JuZShwLCByZWcxLCByZWcyLCAwKTsKIH0KK1VBU01fRVhQT1JUX1NZTUJPTCh1YXNtX2lsX2JuZSk7CiAKLXZvaWQgX19jcHVpbml0Cit2b2lkIF9fdWFzbWluaXQKIHVhc21faWxfYm5leih1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIHVuc2lnbmVkIGludCByZWcsIGludCBsaWQpCiB7CiAJdWFzbV9yX21pcHNfcGMxNihyLCAqcCwgbGlkKTsKIAl1YXNtX2lfYm5leihwLCByZWcsIDApOwogfQorVUFTTV9FWFBPUlRfU1lNQk9MKHVhc21faWxfYm5leik7CiAKLXZvaWQgX19jcHVpbml0Cit2b2lkIF9fdWFzbWluaXQKIHVhc21faWxfYmdlemwodTMyICoqcCwgc3RydWN0IHVhc21fcmVsb2MgKipyLCB1bnNpZ25lZCBpbnQgcmVnLCBpbnQgbGlkKQogewogCXVhc21fcl9taXBzX3BjMTYociwgKnAsIGxpZCk7CiAJdWFzbV9pX2JnZXpsKHAsIHJlZywgMCk7CiB9CitVQVNNX0VYUE9SVF9TWU1CT0wodWFzbV9pbF9iZ2V6bCk7CiAKLXZvaWQgX19jcHVpbml0Cit2b2lkIF9fdWFzbWluaXQKIHVhc21faWxfYmdleih1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIHVuc2lnbmVkIGludCByZWcsIGludCBsaWQpCiB7CiAJdWFzbV9yX21pcHNfcGMxNihyLCAqcCwgbGlkKTsKIAl1YXNtX2lfYmdleihwLCByZWcsIDApOwogfQorVUFTTV9FWFBPUlRfU1lNQk9MKHVhc21faWxfYmdleik7CisKK3ZvaWQgX191YXNtaW5pdAordWFzbV9pbF9iYml0MCh1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIHVuc2lnbmVkIGludCByZWcsCisJICAgICAgdW5zaWduZWQgaW50IGJpdCwgaW50IGxpZCkKK3sKKwl1YXNtX3JfbWlwc19wYzE2KHIsICpwLCBsaWQpOworCXVhc21faV9iYml0MChwLCByZWcsIGJpdCwgMCk7Cit9CitVQVNNX0VYUE9SVF9TWU1CT0wodWFzbV9pbF9iYml0MCk7CisKK3ZvaWQgX191YXNtaW5pdAordWFzbV9pbF9iYml0MSh1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIHVuc2lnbmVkIGludCByZWcsCisJICAgICAgdW5zaWduZWQgaW50IGJpdCwgaW50IGxpZCkKK3sKKwl1YXNtX3JfbWlwc19wYzE2KHIsICpwLCBsaWQpOworCXVhc21faV9iYml0MShwLCByZWcsIGJpdCwgMCk7Cit9CitVQVNNX0VYUE9SVF9TWU1CT0wodWFzbV9pbF9iYml0MSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbXRpLW1hbHRhL01ha2VmaWxlIGIvYXJjaC9taXBzL210aS1tYWx0YS9NYWtlZmlsZQppbmRleCAzMmU4NDc4Li42MDc5ZWYzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbXRpLW1hbHRhL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvTWFrZWZpbGUKQEAgLTE1LDUgKzE1LDMgQEAKIAogIyBGSVhNRSBGSVhNRSBGSVhNRQogb2JqLSQoQ09ORklHX01JUFNfTVRfU01UQykJKz0gbWFsdGEtc210Yy5vCi0KLUVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbXRpLW1hbHRhL1BsYXRmb3JtIGIvYXJjaC9taXBzL210aS1tYWx0YS9QbGF0Zm9ybQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjU0OGI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL210aS1tYWx0YS9QbGF0Zm9ybQpAQCAtMCwwICsxLDcgQEAKKyMKKyMgTUlQUyBNYWx0YSBib2FyZAorIworcGxhdGZvcm0tJChDT05GSUdfTUlQU19NQUxUQSkJKz0gbXRpLW1hbHRhLworY2ZsYWdzLSQoQ09ORklHX01JUFNfTUFMVEEpCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1tYWx0YQorbG9hZC0kKENPTkZJR19NSVBTX01BTFRBKQkrPSAweGZmZmZmZmZmODAxMDAwMDAKK2FsbC0kKENPTkZJR19NSVBTX01BTFRBKQk6PSAkKENPTVBSRVNTSU9OX0ZOQU1FKS5iaW4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtcGNpLmMgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLXBjaS5jCmluZGV4IDJmYmZhMWEuLmJmODA5MjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtcGNpLmMKKysrIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1wY2kuYwpAQCAtMjQ3LDYgKzI0Nyw4IEBACiAJaW9tZW1fcmVzb3VyY2UuZW5kICY9IDB4ZmZmZmZmZmZmVUxMOwkJCS8qIDY0IEdCICovCiAJaW9wb3J0X3Jlc291cmNlLmVuZCA9IGNvbnRyb2xsZXItPmlvX3Jlc291cmNlLT5lbmQ7CiAKKwljb250cm9sbGVyLT5pb19tYXBfYmFzZSA9IG1pcHNfaW9fcG9ydF9iYXNlOworCiAJcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoY29udHJvbGxlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ueHAvcG54ODMzeC9jb21tb24vTWFrZWZpbGUgYi9hcmNoL21pcHMvbnhwL3BueDgzM3gvY29tbW9uL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTE2ZjNiLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9ueHAvcG54ODMzeC9jb21tb24vTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLW9iai15IDo9IGludGVycnVwdHMubyBwbGF0Zm9ybS5vIHByb20ubyBzZXR1cC5vIHJlc2V0Lm8KLQotRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ueHAvcG54ODMzeC9zdGIyMngvTWFrZWZpbGUgYi9hcmNoL21pcHMvbnhwL3BueDgzM3gvc3RiMjJ4L01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODFjNTgwLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9ueHAvcG54ODMzeC9zdGIyMngvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLWxpYi15IDo9IGJvYXJkLm8KLQotRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vTWFrZWZpbGUgYi9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDllN2IxLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jCi0jIFBlciBIYWxsc21hcmssIHBlci5oYWxsc21hcmtAbXZpc3RhLmNvbQotIwotIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0jIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKLSMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0jIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotIyA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCi0jCi0jICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jCi0jIE1ha2VmaWxlIGZvciB0aGUgUE5YODU1MCBzcGVjaWZpYyBrZXJuZWwgaW50ZXJmYWNlIHJvdXRpbmVzCi0jIHVuZGVyIExpbnV4LgotIwotCi1vYmoteSA6PSBzZXR1cC5vIHByb20ubyBpbnQubyByZXNldC5vIHRpbWUubyBwcm9jLm8gcGxhdGZvcm0ubwotb2JqLSQoQ09ORklHX1BDSSkgKz0gcGNpLm8KLQotRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vcGNpLmMgYi9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL3BjaS5jCmluZGV4IGVlZTRmM2QuLjk4ZTg2ZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vcGNpLmMKKysrIGIvYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi9wY2kuYwpAQCAtNDQsNiArNDQsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9jb250cm9sbGVyIHBueDg1NTBfY29udHJvbGxlciA9IHsKIAkucGNpX29wcwk9ICZwbng4NTUwX3BjaV9vcHMsCisJLmlvX21hcF9iYXNlCT0gUE5YODU1MF9QT1JUX0JBU0UsCiAJLmlvX3Jlc291cmNlCT0gJnBjaV9pb19yZXNvdXJjZSwKIAkubWVtX3Jlc291cmNlCT0gJnBjaV9tZW1fcmVzb3VyY2UsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi9zZXR1cC5jIGIvYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi9zZXR1cC5jCmluZGV4IDJhZWQ1MGYuLjY0MjQ2YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vc2V0dXAuYworKysgYi9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL3NldHVwLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCVBOWDg1NTBfR0xCMl9FTkFCX0lOVEFfTyA9IDA7CiAKIAkvKiBJTy9NRU0gcmVzb3VyY2VzLiAqLwotCXNldF9pb19wb3J0X2Jhc2UoS1NFRzEpOworCXNldF9pb19wb3J0X2Jhc2UoUE5YODU1MF9QT1JUX0JBU0UpOwogCWlvcG9ydF9yZXNvdXJjZS5zdGFydCA9IDA7CiAJaW9wb3J0X3Jlc291cmNlLmVuZCA9IH4wOwogCWlvbWVtX3Jlc291cmNlLnN0YXJ0ID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9qYnMvTWFrZWZpbGUgYi9hcmNoL21pcHMvbnhwL3BueDg1NTAvamJzL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDZhOGNhLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9qYnMvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLQotIyBNYWtlZmlsZSBmb3IgdGhlIE5YUCBKQlMgQm9hcmQuCi0KLWxpYi15IDo9IGluaXQubyBib2FyZF9zZXR1cC5vIGlycW1hcC5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbnhwL3BueDg1NTAvc3RiODEwL01ha2VmaWxlIGIvYXJjaC9taXBzL254cC9wbng4NTUwL3N0YjgxMC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI5MWQ3Mi4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvbnhwL3BueDg1NTAvc3RiODEwL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0KLSMgTWFrZWZpbGUgZm9yIHRoZSBOWFAgU1RCODEwIEJvYXJkLgotCi1saWIteSA6PSBwcm9tX2luaXQubyBib2FyZF9zZXR1cC5vIGlycW1hcC5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL21zaS1vY3Rlb24uYyBiL2FyY2gvbWlwcy9wY2kvbXNpLW9jdGVvbi5jCmluZGV4IDAzNzQyZTYuLmQ4MDgwNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvbXNpLW9jdGVvbi5jCisrKyBiL2FyY2gvbWlwcy9wY2kvbXNpLW9jdGVvbi5jCkBAIC0zLDcgKzMsNyBAQAogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBDYXZpdW0gTmV0d29ya3MKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5LCAyMDEwIENhdml1bSBOZXR3b3JrcwogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMjIsNyArMjIsNyBAQAogICogRWFjaCBiaXQgaW4gbXNpX2ZyZWVfaXJxX2JpdG1hc2sgcmVwcmVzZW50cyBhIE1TSSBpbnRlcnJ1cHQgdGhhdCBpcwogICogaW4gdXNlLgogICovCi1zdGF0aWMgdWludDY0X3QgbXNpX2ZyZWVfaXJxX2JpdG1hc2s7CitzdGF0aWMgdTY0IG1zaV9mcmVlX2lycV9iaXRtYXNrWzRdOwogCiAvKgogICogRWFjaCBiaXQgaW4gbXNpX211bHRpcGxlX2lycV9iaXRtYXNrIHRlbGxzIHRoYXQgdGhlIGRldmljZSB1c2luZwpAQCAtMzAsNyArMzAsNyBAQAogICogaXMgdXNlZCBzbyB3ZSBjYW4gZGlzYWJsZSBhbGwgb2YgdGhlIE1TSSBpbnRlcnJ1cHRzIHdoZW4gYSBkZXZpY2UKICAqIHVzZXMgbXVsdGlwbGUuCiAgKi8KLXN0YXRpYyB1aW50NjRfdCBtc2lfbXVsdGlwbGVfaXJxX2JpdG1hc2s7CitzdGF0aWMgdTY0IG1zaV9tdWx0aXBsZV9pcnFfYml0bWFza1s0XTsKIAogLyoKICAqIFRoaXMgbG9jayBjb250cm9scyB1cGRhdGVzIHRvIG1zaV9mcmVlX2lycV9iaXRtYXNrIGFuZApAQCAtMzgsNiArMzgsMTEgQEAKICAqLwogc3RhdGljIERFRklORV9TUElOTE9DSyhtc2lfZnJlZV9pcnFfYml0bWFza19sb2NrKTsKIAorLyoKKyAqIE51bWJlciBvZiBNU0kgSVJRcyB1c2VkLiBUaGlzIHZhcmlhYmxlIGlzIHNldCB1cCBpbgorICogdGhlIG1vZHVsZSBpbml0IHRpbWUuCisgKi8KK3N0YXRpYyBpbnQgbXNpX2lycV9zaXplOwogCiAvKioKICAqIENhbGxlZCB3aGVuIGEgZHJpdmVyIHJlcXVlc3QgTVNJIGludGVycnVwdHMgaW5zdGVhZCBvZiB0aGUKQEAgLTU0LDEyICs1OSwxMyBAQAogaW50IGFyY2hfc2V0dXBfbXNpX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MpCiB7CiAJc3RydWN0IG1zaV9tc2cgbXNnOwotCXVpbnQxNl90IGNvbnRyb2w7CisJdTE2IGNvbnRyb2w7CiAJaW50IGNvbmZpZ3VyZWRfcHJpdmF0ZV9iaXRzOwogCWludCByZXF1ZXN0X3ByaXZhdGVfYml0czsKLQlpbnQgaXJxOworCWludCBpcnEgPSAwOwogCWludCBpcnFfc3RlcDsKLQl1aW50NjRfdCBzZWFyY2hfbWFzazsKKwl1NjQgc2VhcmNoX21hc2s7CisJaW50IGluZGV4OwogCiAJLyoKIAkgKiBSZWFkIHRoZSBNU0kgY29uZmlnIHRvIGZpZ3VyZSBvdXQgaG93IG1hbnkgSVJRcyB0aGlzIGRldmljZQpAQCAtMTExLDI5ICsxMTcsMzEgQEAKIAkgKiB1c2UuCiAJICovCiAJc3Bpbl9sb2NrKCZtc2lfZnJlZV9pcnFfYml0bWFza19sb2NrKTsKLQlmb3IgKGlycSA9IDA7IGlycSA8IDY0OyBpcnEgKz0gaXJxX3N0ZXApIHsKLQkJaWYgKChtc2lfZnJlZV9pcnFfYml0bWFzayAmIChzZWFyY2hfbWFzayA8PCBpcnEpKSA9PSAwKSB7Ci0JCQltc2lfZnJlZV9pcnFfYml0bWFzayB8PSBzZWFyY2hfbWFzayA8PCBpcnE7Ci0JCQltc2lfbXVsdGlwbGVfaXJxX2JpdG1hc2sgfD0gKHNlYXJjaF9tYXNrID4+IDEpIDw8IGlycTsKLQkJCWJyZWFrOworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IG1zaV9pcnFfc2l6ZS82NDsgaW5kZXgrKykgeworCQlmb3IgKGlycSA9IDA7IGlycSA8IDY0OyBpcnEgKz0gaXJxX3N0ZXApIHsKKwkJCWlmICgobXNpX2ZyZWVfaXJxX2JpdG1hc2tbaW5kZXhdICYgKHNlYXJjaF9tYXNrIDw8IGlycSkpID09IDApIHsKKwkJCQltc2lfZnJlZV9pcnFfYml0bWFza1tpbmRleF0gfD0gc2VhcmNoX21hc2sgPDwgaXJxOworCQkJCW1zaV9tdWx0aXBsZV9pcnFfYml0bWFza1tpbmRleF0gfD0gKHNlYXJjaF9tYXNrID4+IDEpIDw8IGlycTsKKwkJCQlnb3RvIG1zaV9pcnFfYWxsb2NhdGVkOworCQkJfQogCQl9CiAJfQorbXNpX2lycV9hbGxvY2F0ZWQ6CiAJc3Bpbl91bmxvY2soJm1zaV9mcmVlX2lycV9iaXRtYXNrX2xvY2spOwogCiAJLyogTWFrZSBzdXJlIHRoZSBzZWFyY2ggZm9yIGF2YWlsYWJsZSBpbnRlcnJ1cHRzIGRpZG4ndCBmYWlsICovCiAJaWYgKGlycSA+PSA2NCkgewogCQlpZiAocmVxdWVzdF9wcml2YXRlX2JpdHMpIHsKLQkJCXByX2VycigiYXJjaF9zZXR1cF9tc2lfaXJxOiBVbmFibGUgdG8gZmluZCAlZCBmcmVlICIKLQkJCSAgICAgICAiaW50ZXJydXB0cywgdHJ5aW5nIGp1c3Qgb25lIiwKKwkJCXByX2VycigiYXJjaF9zZXR1cF9tc2lfaXJxOiBVbmFibGUgdG8gZmluZCAlZCBmcmVlIGludGVycnVwdHMsIHRyeWluZyBqdXN0IG9uZSIsCiAJCQkgICAgICAgMSA8PCByZXF1ZXN0X3ByaXZhdGVfYml0cyk7CiAJCQlyZXF1ZXN0X3ByaXZhdGVfYml0cyA9IDA7CiAJCQlnb3RvIHRyeV9vbmx5X29uZTsKIAkJfSBlbHNlCi0JCQlwYW5pYygiYXJjaF9zZXR1cF9tc2lfaXJxOiBVbmFibGUgdG8gZmluZCBhIGZyZWUgTVNJICIKLQkJCSAgICAgICJpbnRlcnJ1cHQiKTsKKwkJCXBhbmljKCJhcmNoX3NldHVwX21zaV9pcnE6IFVuYWJsZSB0byBmaW5kIGEgZnJlZSBNU0kgaW50ZXJydXB0Iik7CiAJfQogCiAJLyogTVNJIGludGVycnVwdHMgc3RhcnQgYXQgbG9naWNhbCBJUlEgT0NURU9OX0lSUV9NU0lfQklUMCAqLworCWlycSArPSBpbmRleCo2NDsKIAlpcnEgKz0gT0NURU9OX0lSUV9NU0lfQklUMDsKIAogCXN3aXRjaCAob2N0ZW9uX2RtYV9iYXJfdHlwZSkgewpAQCAtMTY5LDYgKzE3NywzNCBAQAogCXJldHVybiAwOwogfQogCitpbnQgYXJjaF9zZXR1cF9tc2lfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbnZlYywgaW50IHR5cGUpCit7CisJc3RydWN0IG1zaV9kZXNjICplbnRyeTsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBNU0ktWCBpcyBub3Qgc3VwcG9ydGVkLgorCSAqLworCWlmICh0eXBlID09IFBDSV9DQVBfSURfTVNJWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIElmIGFuIGFyY2hpdGVjdHVyZSB3YW50cyB0byBzdXBwb3J0IG11bHRpcGxlIE1TSSwgaXQgbmVlZHMgdG8KKwkgKiBvdmVycmlkZSBhcmNoX3NldHVwX21zaV9pcnFzKCkKKwkgKi8KKwlpZiAodHlwZSA9PSBQQ0lfQ0FQX0lEX01TSSAmJiBudmVjID4gMSkKKwkJcmV0dXJuIDE7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmZGV2LT5tc2lfbGlzdCwgbGlzdCkgeworCQlyZXQgPSBhcmNoX3NldHVwX21zaV9pcnEoZGV2LCBlbnRyeSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJaWYgKHJldCA+IDApCisJCQlyZXR1cm4gLUVOT1NQQzsKKwl9CisKKwlyZXR1cm4gMDsKK30KIAogLyoqCiAgKiBDYWxsZWQgd2hlbiBhIGRldmljZSBubyBsb25nZXIgbmVlZHMgaXRzIE1TSSBpbnRlcnJ1cHRzLiBBbGwKQEAgLTE3OSwxMiArMjE1LDE4IEBACiB2b2lkIGFyY2hfdGVhcmRvd25fbXNpX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCWludCBudW1iZXJfaXJxczsKLQl1aW50NjRfdCBiaXRtYXNrOworCXU2NCBiaXRtYXNrOworCWludCBpbmRleCA9IDA7CisJaW50IGlycTA7CiAKLQlpZiAoKGlycSA8IE9DVEVPTl9JUlFfTVNJX0JJVDApIHx8IChpcnEgPiBPQ1RFT05fSVJRX01TSV9CSVQ2MykpCisJaWYgKChpcnEgPCBPQ1RFT05fSVJRX01TSV9CSVQwKQorCQl8fCAoaXJxID4gbXNpX2lycV9zaXplICsgT0NURU9OX0lSUV9NU0lfQklUMCkpCiAJCXBhbmljKCJhcmNoX3RlYXJkb3duX21zaV9pcnE6IEF0dGVtcHRlZCB0byB0ZWFyZG93biBpbGxlZ2FsICIKIAkJICAgICAgIk1TSSBpbnRlcnJ1cHQgKCVkKSIsIGlycSk7CisKIAlpcnEgLT0gT0NURU9OX0lSUV9NU0lfQklUMDsKKwlpbmRleCA9IGlycSAvIDY0OworCWlycTAgPSBpcnEgJSA2NDsKIAogCS8qCiAJICogQ291bnQgdGhlIG51bWJlciBvZiBJUlFzIHdlIG5lZWQgdG8gZnJlZSBieSBsb29raW5nIGF0IHRoZQpAQCAtMTkyLDk3ICsyMzQsMTk4IEBACiAJICogSVJRIGlzIGFsc28gb3duZWQgYnkgdGhpcyBkZXZpY2UuCiAJICovCiAJbnVtYmVyX2lycXMgPSAwOwotCXdoaWxlICgoaXJxK251bWJlcl9pcnFzIDwgNjQpICYmCi0JICAgICAgIChtc2lfbXVsdGlwbGVfaXJxX2JpdG1hc2sgJiAoMXVsbCA8PCAoaXJxICsgbnVtYmVyX2lycXMpKSkpCisJd2hpbGUgKChpcnEwICsgbnVtYmVyX2lycXMgPCA2NCkgJiYKKwkgICAgICAgKG1zaV9tdWx0aXBsZV9pcnFfYml0bWFza1tpbmRleF0KKwkJJiAoMXVsbCA8PCAoaXJxMCArIG51bWJlcl9pcnFzKSkpKQogCQludW1iZXJfaXJxcysrOwogCW51bWJlcl9pcnFzKys7CiAJLyogTWFzayB3aXRoIG9uZSBiaXQgZm9yIGVhY2ggSVJRICovCiAJYml0bWFzayA9ICgxIDw8IG51bWJlcl9pcnFzKSAtIDE7CiAJLyogU2hpZnQgdGhlIG1hc2sgdG8gdGhlIGNvcnJlY3QgYml0IGxvY2F0aW9uICovCi0JYml0bWFzayA8PD0gaXJxOwotCWlmICgobXNpX2ZyZWVfaXJxX2JpdG1hc2sgJiBiaXRtYXNrKSAhPSBiaXRtYXNrKQorCWJpdG1hc2sgPDw9IGlycTA7CisJaWYgKChtc2lfZnJlZV9pcnFfYml0bWFza1tpbmRleF0gJiBiaXRtYXNrKSAhPSBiaXRtYXNrKQogCQlwYW5pYygiYXJjaF90ZWFyZG93bl9tc2lfaXJxOiBBdHRlbXB0ZWQgdG8gdGVhcmRvd24gTVNJICIKIAkJICAgICAgImludGVycnVwdCAoJWQpIG5vdCBpbiB1c2UiLCBpcnEpOwogCiAJLyogQ2hlY2tzIGFyZSBkb25lLCB1cGRhdGUgdGhlIGluIHVzZSBiaXRtYXNrICovCiAJc3Bpbl9sb2NrKCZtc2lfZnJlZV9pcnFfYml0bWFza19sb2NrKTsKLQltc2lfZnJlZV9pcnFfYml0bWFzayAmPSB+Yml0bWFzazsKLQltc2lfbXVsdGlwbGVfaXJxX2JpdG1hc2sgJj0gfmJpdG1hc2s7CisJbXNpX2ZyZWVfaXJxX2JpdG1hc2tbaW5kZXhdICY9IH5iaXRtYXNrOworCW1zaV9tdWx0aXBsZV9pcnFfYml0bWFza1tpbmRleF0gJj0gfmJpdG1hc2s7CiAJc3Bpbl91bmxvY2soJm1zaV9mcmVlX2lycV9iaXRtYXNrX2xvY2spOwogfQogCitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhvY3Rlb25faXJxX21zaV9sb2NrKTsKKworc3RhdGljIHU2NCBtc2lfcmN2X3JlZ1s0XTsKK3N0YXRpYyB1NjQgbWlzX2VuYV9yZWdbNF07CisKK3N0YXRpYyB2b2lkIG9jdGVvbl9pcnFfbXNpX2VuYWJsZV9wY2llKHVuc2lnbmVkIGludCBpcnEpCit7CisJdTY0IGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IG1zaV9udW1iZXIgPSBpcnEgLSBPQ1RFT05fSVJRX01TSV9CSVQwOworCWludCBpcnFfaW5kZXggPSBtc2lfbnVtYmVyID4+IDY7CisJaW50IGlycV9iaXQgPSBtc2lfbnVtYmVyICYgMHgzZjsKKworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9tc2lfbG9jaywgZmxhZ3MpOworCWVuID0gY3ZteF9yZWFkX2NzcihtaXNfZW5hX3JlZ1tpcnFfaW5kZXhdKTsKKwllbiB8PSAxdWxsIDw8IGlycV9iaXQ7CisJY3ZteF93cml0ZV9jc3IobWlzX2VuYV9yZWdbaXJxX2luZGV4XSwgZW4pOworCWN2bXhfcmVhZF9jc3IobWlzX2VuYV9yZWdbaXJxX2luZGV4XSk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfbXNpX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9tc2lfZGlzYWJsZV9wY2llKHVuc2lnbmVkIGludCBpcnEpCit7CisJdTY0IGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IG1zaV9udW1iZXIgPSBpcnEgLSBPQ1RFT05fSVJRX01TSV9CSVQwOworCWludCBpcnFfaW5kZXggPSBtc2lfbnVtYmVyID4+IDY7CisJaW50IGlycV9iaXQgPSBtc2lfbnVtYmVyICYgMHgzZjsKKworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9tc2lfbG9jaywgZmxhZ3MpOworCWVuID0gY3ZteF9yZWFkX2NzcihtaXNfZW5hX3JlZ1tpcnFfaW5kZXhdKTsKKwllbiAmPSB+KDF1bGwgPDwgaXJxX2JpdCk7CisJY3ZteF93cml0ZV9jc3IobWlzX2VuYV9yZWdbaXJxX2luZGV4XSwgZW4pOworCWN2bXhfcmVhZF9jc3IobWlzX2VuYV9yZWdbaXJxX2luZGV4XSk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfbXNpX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBvY3Rlb25faXJxX2NoaXBfbXNpX3BjaWUgPSB7CisJLm5hbWUgPSAiTVNJIiwKKwkuZW5hYmxlID0gb2N0ZW9uX2lycV9tc2lfZW5hYmxlX3BjaWUsCisJLmRpc2FibGUgPSBvY3Rlb25faXJxX21zaV9kaXNhYmxlX3BjaWUsCit9OworCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX21zaV9lbmFibGVfcGNpKHVuc2lnbmVkIGludCBpcnEpCit7CisJLyoKKwkgKiBPY3Rlb24gUENJIGRvZXNuJ3QgaGF2ZSB0aGUgYWJpbGl0eSB0byBtYXNrL3VubWFzayBNU0kKKwkgKiBpbnRlcnJ1cHRzIGluZGl2aWR1YWxseS4gSW5zdGVhZCBvZiBtYXNraW5nL3VubWFza2luZyB0aGVtCisJICogaW4gZ3JvdXBzIG9mIDE2LCB3ZSBzaW1wbGUgYXNzdW1lIE1TSSBkZXZpY2VzIGFyZSB3ZWxsCisJICogYmVoYXZlZC4gTVNJIGludGVycnVwdHMgYXJlIGFsd2F5cyBlbmFibGUgYW5kIHRoZSBBQ0sgaXMKKwkgKiBhc3N1bWVkIHRvIGJlIGVub3VnaAorCSAqLworfQorCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX21zaV9kaXNhYmxlX3BjaSh1bnNpZ25lZCBpbnQgaXJxKQoreworCS8qIFNlZSBjb21tZW50IGluIGVuYWJsZSAqLworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIG9jdGVvbl9pcnFfY2hpcF9tc2lfcGNpID0geworCS5uYW1lID0gIk1TSSIsCisJLmVuYWJsZSA9IG9jdGVvbl9pcnFfbXNpX2VuYWJsZV9wY2ksCisJLmRpc2FibGUgPSBvY3Rlb25faXJxX21zaV9kaXNhYmxlX3BjaSwKK307CiAKIC8qCiAgKiBDYWxsZWQgYnkgdGhlIGludGVycnVwdCBoYW5kbGluZyBjb2RlIHdoZW4gYW4gTVNJIGludGVycnVwdAogICogb2NjdXJzLgogICovCi1zdGF0aWMgaXJxcmV0dXJuX3Qgb2N0ZW9uX21zaV9pbnRlcnJ1cHQoaW50IGNwbCwgdm9pZCAqZGV2X2lkKQorc3RhdGljIGlycXJldHVybl90IF9fb2N0ZW9uX21zaV9kb19pbnRlcnJ1cHQoaW50IGluZGV4LCB1NjQgbXNpX2JpdHMpCiB7Ci0JdWludDY0X3QgbXNpX2JpdHM7CiAJaW50IGlycTsKKwlpbnQgYml0OwogCi0JaWYgKG9jdGVvbl9kbWFfYmFyX3R5cGUgPT0gT0NURU9OX0RNQV9CQVJfVFlQRV9QQ0lFKQotCQltc2lfYml0cyA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9QRVhQX05QRUlfTVNJX1JDVjApOwotCWVsc2UKLQkJbXNpX2JpdHMgPSBjdm14X3JlYWRfY3NyKENWTVhfTlBJX05QSV9NU0lfUkNWKTsKLQlpcnEgPSBmbHM2NChtc2lfYml0cyk7Ci0JaWYgKGlycSkgewotCQlpcnEgKz0gT0NURU9OX0lSUV9NU0lfQklUMCAtIDE7Ci0JCWlmIChpcnFfZGVzY1tpcnFdLmFjdGlvbikgewotCQkJZG9fSVJRKGlycSk7Ci0JCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JCX0gZWxzZSB7Ci0JCQlwcl9lcnIoIlNwdXJpb3VzIE1TSSBpbnRlcnJ1cHQgJWRcbiIsIGlycSk7Ci0JCQlpZiAob2N0ZW9uX2hhc19mZWF0dXJlKE9DVEVPTl9GRUFUVVJFX1BDSUUpKSB7Ci0JCQkJLyogVGhlc2UgY2hpcHMgaGF2ZSBQQ0llICovCi0JCQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QRVhQX05QRUlfTVNJX1JDVjAsCi0JCQkJCSAgICAgICAxdWxsIDw8IChpcnEgLQotCQkJCQkJCU9DVEVPTl9JUlFfTVNJX0JJVDApKTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogVGhlc2UgY2hpcHMgaGF2ZSBQQ0kgKi8KLQkJCQljdm14X3dyaXRlX2NzcihDVk1YX05QSV9OUElfTVNJX1JDViwKLQkJCQkJICAgICAgIDF1bGwgPDwgKGlycSAtCi0JCQkJCQkJT0NURU9OX0lSUV9NU0lfQklUMCkpOwotCQkJfQotCQl9CisJYml0ID0gZmxzNjQobXNpX2JpdHMpOworCWlmIChiaXQpIHsKKwkJYml0LS07CisJCS8qIEFja25vd2xlZGdlIGl0IGZpcnN0LiAqLworCQljdm14X3dyaXRlX2Nzcihtc2lfcmN2X3JlZ1tpbmRleF0sIDF1bGwgPDwgYml0KTsKKworCQlpcnEgPSBiaXQgKyBPQ1RFT05fSVJRX01TSV9CSVQwICsgNjQgKiBpbmRleDsKKwkJZG9fSVJRKGlycSk7CisJCXJldHVybiBJUlFfSEFORExFRDsKIAl9CiAJcmV0dXJuIElSUV9OT05FOwogfQogCisjZGVmaW5lIE9DVEVPTl9NU0lfSU5UX0hBTkRMRVJfWCh4KQkJCQkJXAorc3RhdGljIGlycXJldHVybl90IG9jdGVvbl9tc2lfaW50ZXJydXB0IyN4KGludCBjcGwsIHZvaWQgKmRldl9pZCkJXAorewkJCQkJCQkJCVwKKwl1NjQgbXNpX2JpdHMgPSBjdm14X3JlYWRfY3NyKG1zaV9yY3ZfcmVnWyh4KV0pOwkJCVwKKwlyZXR1cm4gX19vY3Rlb25fbXNpX2RvX2ludGVycnVwdCgoeCksIG1zaV9iaXRzKTsJCVwKK30KKworLyoKKyAqIENyZWF0ZSBvY3Rlb25fbXNpX2ludGVycnVwdHswLTN9IGZ1bmN0aW9uIGJvZHkKKyAqLworT0NURU9OX01TSV9JTlRfSEFORExFUl9YKDApOworT0NURU9OX01TSV9JTlRfSEFORExFUl9YKDEpOworT0NURU9OX01TSV9JTlRfSEFORExFUl9YKDIpOworT0NURU9OX01TSV9JTlRfSEFORExFUl9YKDMpOwogCiAvKgogICogSW5pdGlhbGl6ZXMgdGhlIE1TSSBpbnRlcnJ1cHQgaGFuZGxpbmcgY29kZQogICovCi1pbnQgb2N0ZW9uX21zaV9pbml0aWFsaXplKHZvaWQpCitpbnQgX19pbml0IG9jdGVvbl9tc2lfaW5pdGlhbGl6ZSh2b2lkKQogeworCWludCBpcnE7CisJc3RydWN0IGlycV9jaGlwICptc2k7CisKKwlpZiAob2N0ZW9uX2RtYV9iYXJfdHlwZSA9PSBPQ1RFT05fRE1BX0JBUl9UWVBFX1BDSUUpIHsKKwkJbXNpX3Jjdl9yZWdbMF0gPSBDVk1YX1BFWFBfTlBFSV9NU0lfUkNWMDsKKwkJbXNpX3Jjdl9yZWdbMV0gPSBDVk1YX1BFWFBfTlBFSV9NU0lfUkNWMTsKKwkJbXNpX3Jjdl9yZWdbMl0gPSBDVk1YX1BFWFBfTlBFSV9NU0lfUkNWMjsKKwkJbXNpX3Jjdl9yZWdbM10gPSBDVk1YX1BFWFBfTlBFSV9NU0lfUkNWMzsKKwkJbWlzX2VuYV9yZWdbMF0gPSBDVk1YX1BFWFBfTlBFSV9NU0lfRU5CMDsKKwkJbWlzX2VuYV9yZWdbMV0gPSBDVk1YX1BFWFBfTlBFSV9NU0lfRU5CMTsKKwkJbWlzX2VuYV9yZWdbMl0gPSBDVk1YX1BFWFBfTlBFSV9NU0lfRU5CMjsKKwkJbWlzX2VuYV9yZWdbM10gPSBDVk1YX1BFWFBfTlBFSV9NU0lfRU5CMzsKKwkJbXNpID0gJm9jdGVvbl9pcnFfY2hpcF9tc2lfcGNpZTsKKwl9IGVsc2UgeworCQltc2lfcmN2X3JlZ1swXSA9IENWTVhfTlBJX05QSV9NU0lfUkNWOworI2RlZmluZSBJTlZBTElEX0dFTkVSQVRFX0FERSAweDg3MDAwMDAwMDAwMDAwMDBVTEw7CisJCW1zaV9yY3ZfcmVnWzFdID0gSU5WQUxJRF9HRU5FUkFURV9BREU7CisJCW1zaV9yY3ZfcmVnWzJdID0gSU5WQUxJRF9HRU5FUkFURV9BREU7CisJCW1zaV9yY3ZfcmVnWzNdID0gSU5WQUxJRF9HRU5FUkFURV9BREU7CisJCW1pc19lbmFfcmVnWzBdID0gSU5WQUxJRF9HRU5FUkFURV9BREU7CisJCW1pc19lbmFfcmVnWzFdID0gSU5WQUxJRF9HRU5FUkFURV9BREU7CisJCW1pc19lbmFfcmVnWzJdID0gSU5WQUxJRF9HRU5FUkFURV9BREU7CisJCW1pc19lbmFfcmVnWzNdID0gSU5WQUxJRF9HRU5FUkFURV9BREU7CisJCW1zaSA9ICZvY3Rlb25faXJxX2NoaXBfbXNpX3BjaTsKKwl9CisKKwlmb3IgKGlycSA9IE9DVEVPTl9JUlFfTVNJX0JJVDA7IGlycSA8PSBPQ1RFT05fSVJRX01TSV9MQVNUOyBpcnErKykKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGlycSwgbXNpLCBoYW5kbGVfc2ltcGxlX2lycSk7CisKIAlpZiAob2N0ZW9uX2hhc19mZWF0dXJlKE9DVEVPTl9GRUFUVVJFX1BDSUUpKSB7Ci0JCWlmIChyZXF1ZXN0X2lycShPQ1RFT05fSVJRX1BDSV9NU0kwLCBvY3Rlb25fbXNpX2ludGVycnVwdCwKLQkJCQlJUlFGX1NIQVJFRCwKLQkJCQkiTVNJWzA6NjNdIiwgb2N0ZW9uX21zaV9pbnRlcnJ1cHQpKQotCQkJcGFuaWMoInJlcXVlc3RfaXJxKE9DVEVPTl9JUlFfUENJX01TSTApIGZhaWxlZCIpOwotCX0gZWxzZSBpZiAob2N0ZW9uX2lzX3BjaV9ob3N0KCkpIHsKLQkJaWYgKHJlcXVlc3RfaXJxKE9DVEVPTl9JUlFfUENJX01TSTAsIG9jdGVvbl9tc2lfaW50ZXJydXB0LAotCQkJCUlSUUZfU0hBUkVELAotCQkJCSJNU0lbMDoxNV0iLCBvY3Rlb25fbXNpX2ludGVycnVwdCkpCisJCWlmIChyZXF1ZXN0X2lycShPQ1RFT05fSVJRX1BDSV9NU0kwLCBvY3Rlb25fbXNpX2ludGVycnVwdDAsCisJCQkJMCwgIk1TSVswOjYzXSIsIG9jdGVvbl9tc2lfaW50ZXJydXB0MCkpCiAJCQlwYW5pYygicmVxdWVzdF9pcnEoT0NURU9OX0lSUV9QQ0lfTVNJMCkgZmFpbGVkIik7CiAKLQkJaWYgKHJlcXVlc3RfaXJxKE9DVEVPTl9JUlFfUENJX01TSTEsIG9jdGVvbl9tc2lfaW50ZXJydXB0LAotCQkJCUlSUUZfU0hBUkVELAotCQkJCSJNU0lbMTY6MzFdIiwgb2N0ZW9uX21zaV9pbnRlcnJ1cHQpKQorCQlpZiAocmVxdWVzdF9pcnEoT0NURU9OX0lSUV9QQ0lfTVNJMSwgb2N0ZW9uX21zaV9pbnRlcnJ1cHQxLAorCQkJCTAsICJNU0lbNjQ6MTI3XSIsIG9jdGVvbl9tc2lfaW50ZXJydXB0MSkpCiAJCQlwYW5pYygicmVxdWVzdF9pcnEoT0NURU9OX0lSUV9QQ0lfTVNJMSkgZmFpbGVkIik7CiAKLQkJaWYgKHJlcXVlc3RfaXJxKE9DVEVPTl9JUlFfUENJX01TSTIsIG9jdGVvbl9tc2lfaW50ZXJydXB0LAotCQkJCUlSUUZfU0hBUkVELAotCQkJCSJNU0lbMzI6NDddIiwgb2N0ZW9uX21zaV9pbnRlcnJ1cHQpKQorCQlpZiAocmVxdWVzdF9pcnEoT0NURU9OX0lSUV9QQ0lfTVNJMiwgb2N0ZW9uX21zaV9pbnRlcnJ1cHQyLAorCQkJCTAsICJNU0lbMTI3OjE5MV0iLCBvY3Rlb25fbXNpX2ludGVycnVwdDIpKQogCQkJcGFuaWMoInJlcXVlc3RfaXJxKE9DVEVPTl9JUlFfUENJX01TSTIpIGZhaWxlZCIpOwogCi0JCWlmIChyZXF1ZXN0X2lycShPQ1RFT05fSVJRX1BDSV9NU0kzLCBvY3Rlb25fbXNpX2ludGVycnVwdCwKLQkJCQlJUlFGX1NIQVJFRCwKLQkJCQkiTVNJWzQ4OjYzXSIsIG9jdGVvbl9tc2lfaW50ZXJydXB0KSkKKwkJaWYgKHJlcXVlc3RfaXJxKE9DVEVPTl9JUlFfUENJX01TSTMsIG9jdGVvbl9tc2lfaW50ZXJydXB0MywKKwkJCQkwLCAiTVNJWzE5MjoyNTVdIiwgb2N0ZW9uX21zaV9pbnRlcnJ1cHQzKSkKIAkJCXBhbmljKCJyZXF1ZXN0X2lycShPQ1RFT05fSVJRX1BDSV9NU0kzKSBmYWlsZWQiKTsKIAorCQltc2lfaXJxX3NpemUgPSAyNTY7CisJfSBlbHNlIGlmIChvY3Rlb25faXNfcGNpX2hvc3QoKSkgeworCQlpZiAocmVxdWVzdF9pcnEoT0NURU9OX0lSUV9QQ0lfTVNJMCwgb2N0ZW9uX21zaV9pbnRlcnJ1cHQwLAorCQkJCTAsICJNU0lbMDoxNV0iLCBvY3Rlb25fbXNpX2ludGVycnVwdDApKQorCQkJcGFuaWMoInJlcXVlc3RfaXJxKE9DVEVPTl9JUlFfUENJX01TSTApIGZhaWxlZCIpOworCisJCWlmIChyZXF1ZXN0X2lycShPQ1RFT05fSVJRX1BDSV9NU0kxLCBvY3Rlb25fbXNpX2ludGVycnVwdDAsCisJCQkJMCwgIk1TSVsxNjozMV0iLCBvY3Rlb25fbXNpX2ludGVycnVwdDApKQorCQkJcGFuaWMoInJlcXVlc3RfaXJxKE9DVEVPTl9JUlFfUENJX01TSTEpIGZhaWxlZCIpOworCisJCWlmIChyZXF1ZXN0X2lycShPQ1RFT05fSVJRX1BDSV9NU0kyLCBvY3Rlb25fbXNpX2ludGVycnVwdDAsCisJCQkJMCwgIk1TSVszMjo0N10iLCBvY3Rlb25fbXNpX2ludGVycnVwdDApKQorCQkJcGFuaWMoInJlcXVlc3RfaXJxKE9DVEVPTl9JUlFfUENJX01TSTIpIGZhaWxlZCIpOworCisJCWlmIChyZXF1ZXN0X2lycShPQ1RFT05fSVJRX1BDSV9NU0kzLCBvY3Rlb25fbXNpX2ludGVycnVwdDAsCisJCQkJMCwgIk1TSVs0ODo2M10iLCBvY3Rlb25fbXNpX2ludGVycnVwdDApKQorCQkJcGFuaWMoInJlcXVlc3RfaXJxKE9DVEVPTl9JUlFfUENJX01TSTMpIGZhaWxlZCIpOworCQltc2lfaXJxX3NpemUgPSA2NDsKIAl9CiAJcmV0dXJuIDA7CiB9Ci0KIHN1YnN5c19pbml0Y2FsbChvY3Rlb25fbXNpX2luaXRpYWxpemUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9vcHMtcG1jbXNwLmMgYi9hcmNoL21pcHMvcGNpL29wcy1wbWNtc3AuYwppbmRleCAwNGIzMTQ3Li5iN2MwM2Q4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL29wcy1wbWNtc3AuYworKysgYi9hcmNoL21pcHMvcGNpL29wcy1wbWNtc3AuYwpAQCAtOTQ0LDYgKzk0NCw3IEBACiAJLnBjaV9vcHMJPSAmbXNwX3BjaV9vcHMsCiAJLm1lbV9yZXNvdXJjZQk9ICZwY2lfbWVtX3Jlc291cmNlLAogCS5tZW1fb2Zmc2V0CT0gMCwKKwkuaW9fbWFwX2Jhc2UJPSBNU1BfUENJX0lPU1BBQ0VfQkFTRSwKIAkuaW9fcmVzb3VyY2UJPSAmcGNpX2lvX3Jlc291cmNlLAogCS5pb19vZmZzZXQJPSAwCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9vcHMtdGl0YW4taHQuYyBiL2FyY2gvbWlwcy9wY2kvb3BzLXRpdGFuLWh0LmMKaW5kZXggNzQ5YzE5Mi4uNTdkNTRhZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9vcHMtdGl0YW4taHQuYworKysgYi9hcmNoL21pcHMvcGNpL29wcy10aXRhbi1odC5jCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSA8YXNtL3RpdGFuX2RlcC5oPgogCiBzdGF0aWMgaW50IHRpdGFuX2h0X2NvbmZpZ19yZWFkX2R3b3JkKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKLQlpbnQgb2Zmc2V0LCB1MzIgKiB2YWwpCisJaW50IG9mZnNldCwgdTMyICp2YWwpCiB7CiAJdm9sYXRpbGUgdWludDMyX3QgYWRkcmVzczsKIAlpbnQgYnVzbm87CkBAIC02NCw3ICs2NCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgdGl0YW5faHRfY29uZmlnX3JlYWQoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAotCWludCBvZmZzZXQsIGludCBzaXplLCB1MzIgKiB2YWwpCisJaW50IG9mZnNldCwgaW50IHNpemUsIHUzMiAqdmFsKQogewogCXVpbnQzMl90IGR3b3JkOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS15b3NlbWl0ZS5jIGIvYXJjaC9taXBzL3BjaS9wY2kteW9zZW1pdGUuYwppbmRleCAwMzU3OTQ2Li5jZjVlMWEyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS15b3NlbWl0ZS5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLXlvc2VtaXRlLmMKQEAgLTU0LDYgKzU0LDcgQEAKIAkJcGFuaWMoaW9yZW1hcF9mYWlsZWQpOwogCiAJc2V0X2lvX3BvcnRfYmFzZShpb192X2Jhc2UpOworCXB5X2NvbnRyb2xsZXIuaW9fbWFwX2Jhc2UgPSBpb192X2Jhc2U7CiAJVElUQU5fV1JJVEUoUk05MDAweDJfT0NEX0xLTTcsIFRJVEFOX1JFQUQoUk05MDAweDJfT0NEX0xLTTcpIHwgMSk7CiAKIAlpb3BvcnRfcmVzb3VyY2UuZW5kID0gVElUQU5fSU9fU0laRSAtIDE7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaWUtb2N0ZW9uLmMgYi9hcmNoL21pcHMvcGNpL3BjaWUtb2N0ZW9uLmMKaW5kZXggNmFhNWM1NC4uODYxMzYxZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9wY2llLW9jdGVvbi5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpZS1vY3Rlb24uYwpAQCAtNDAyLDYgKzQwMiwxMCBAQAogCW5wZWlfY3RsX3N0YXR1czIucy5tcHMgPSAwOwogCS8qIE1heCByZWFkIHJlcXVlc3Qgc2l6ZSA9IDEyOCBieXRlcyBmb3IgYmVzdCBPY3Rlb24gRE1BIHBlcmZvcm1hbmNlICovCiAJbnBlaV9jdGxfc3RhdHVzMi5zLm1ycnMgPSAwOworCWlmIChwY2llX3BvcnQpCisJCW5wZWlfY3RsX3N0YXR1czIucy5jMV9iMV9zID0gMzsgLyogUG9ydDEgQkFSMSBTaXplIDI1Nk1CICovCisJZWxzZQorCQlucGVpX2N0bF9zdGF0dXMyLnMuYzBfYjFfcyA9IDM7IC8qIFBvcnQwIEJBUjEgU2l6ZSAyNTZNQiAqLwogCWN2bXhfd3JpdGVfY3NyKENWTVhfUEVYUF9OUEVJX0NUTF9TVEFUVVMyLCBucGVpX2N0bF9zdGF0dXMyLnU2NCk7CiAKIAkvKiBFQ1JDIEdlbmVyYXRpb24gKFBDSUUqX0NGRzA3MFtHRSxDRV0pICovCkBAIC02NjYsNiArNjcwLDggQEAKIHN0YXRpYyBpbnQgY3ZteF9wY2llX3JjX2luaXRpYWxpemUoaW50IHBjaWVfcG9ydCkKIHsKIAlpbnQgaTsKKwlpbnQgYmFzZTsKKwl1NjQgYWRkcl9zd2l6emxlOwogCXVuaW9uIGN2bXhfY2l1X3NvZnRfcHJzdCBjaXVfc29mdF9wcnN0OwogCXVuaW9uIGN2bXhfcGVzY3hfYmlzdF9zdGF0dXMgcGVzY3hfYmlzdF9zdGF0dXM7CiAJdW5pb24gY3ZteF9wZXNjeF9iaXN0X3N0YXR1czIgcGVzY3hfYmlzdF9zdGF0dXMyOwpAQCAtNjc0LDYgKzY4MCw3IEBACiAJdW5pb24gY3ZteF9ucGVpX21lbV9hY2Nlc3Nfc3ViaWR4IG1lbV9hY2Nlc3Nfc3ViaWQ7CiAJdW5pb24gY3ZteF9ucGVpX2RiZ19kYXRhIG5wZWlfZGJnX2RhdGE7CiAJdW5pb24gY3ZteF9wZXNjeF9jdGxfc3RhdHVzMiBwZXNjeF9jdGxfc3RhdHVzMjsKKwl1bmlvbiBjdm14X25wZWlfYmFyMV9pbmRleHggYmFyMV9pbmRleDsKIAogCS8qCiAJICogTWFrZSBzdXJlIHdlIGFyZW4ndCB0cnlpbmcgdG8gc2V0dXAgYSB0YXJnZXQgbW9kZSBpbnRlcmZhY2UKQEAgLTkxOCwxMiArOTI1LDMwIEBACiAJLyogU2V0IE9jdGVvbidzIEJBUjAgdG8gZGVjb2RlIDAtMTZLQi4gSXQgb3ZlcmxhcHMgd2l0aCBCYXIyICovCiAJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QRVNDWF9QMk5fQkFSMF9TVEFSVChwY2llX3BvcnQpLCAwKTsKIAotCS8qCi0JICogRGlzYWJsZSBPY3Rlb24ncyBCQVIxLiBJdCBpc24ndCBuZWVkZWQgaW4gUkMgbW9kZSBzaW5jZQotCSAqIEJBUjIgbWFwcyBhbGwgb2YgbWVtb3J5LiBCQVIyIGFsc28gbWFwcyAyNTZNQi01MTJNQiBpbnRvCi0JICogdGhlIDJuZCAyNTZNQiBvZiBtZW1vcnkuCi0JICovCi0JY3ZteF93cml0ZV9jc3IoQ1ZNWF9QRVNDWF9QMk5fQkFSMV9TVEFSVChwY2llX3BvcnQpLCAtMSk7CisJLyogQkFSMSBmb2xsb3dzIEJBUjIgd2l0aCBhIGdhcC4gKi8KKwljdm14X3dyaXRlX2NzcihDVk1YX1BFU0NYX1AyTl9CQVIxX1NUQVJUKHBjaWVfcG9ydCksIENWTVhfUENJRV9CQVIxX1JDX0JBU0UpOworCisJYmFyMV9pbmRleC51MzIgPSAwOworCWJhcjFfaW5kZXgucy5hZGRyX2lkeCA9IChDVk1YX1BDSUVfQkFSMV9QSFlTX0JBU0UgPj4gMjIpOworCWJhcjFfaW5kZXgucy5jYSA9IDE7ICAgICAgIC8qIE5vdCBDYWNoZWQgKi8KKwliYXIxX2luZGV4LnMuZW5kX3N3cCA9IDE7ICAvKiBFbmRpYW4gU3dhcCBtb2RlICovCisJYmFyMV9pbmRleC5zLmFkZHJfdiA9IDE7ICAgLyogVmFsaWQgZW50cnkgKi8KKworCWJhc2UgPSBwY2llX3BvcnQgPyAxNiA6IDA7CisKKwkvKiBCaWcgZW5kaWFuIHN3aXp6bGUgZm9yIDMyLWJpdCBQRVhQX05DQiByZWdpc3Rlci4gKi8KKyNpZmRlZiBfX01JUFNFQl9fCisJYWRkcl9zd2l6emxlID0gNDsKKyNlbHNlCisJYWRkcl9zd2l6emxlID0gMDsKKyNlbmRpZgorCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCWN2bXhfd3JpdGU2NF91aW50MzIoKENWTVhfUEVYUF9OUEVJX0JBUjFfSU5ERVhYKGJhc2UpIF4gYWRkcl9zd2l6emxlKSwKKwkJCQkgICAgYmFyMV9pbmRleC51MzIpOworCQliYXNlKys7CisJCS8qIDI1Nk1CIC8gMTYgPj4gMjIgPT0gNCAqLworCQliYXIxX2luZGV4LnMuYWRkcl9pZHggKz0gKCgoMXVsbCA8PCAyOCkgLyAxNnVsbCkgPj4gMjIpOworCX0KIAogCS8qCiAJICogU2V0IE9jdGVvbidzIEJBUjIgdG8gZGVjb2RlIDAtMl4zOS4gQmFyMCBhbmQgQmFyMSB0YWtlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG1jLXNpZXJyYS9QbGF0Zm9ybSBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL1BsYXRmb3JtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwOTJmMjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS9QbGF0Zm9ybQpAQCAtMCwwICsxLDE0IEBACisjCisjIFBNQy1TaWVycmEgTVNQIFNPQ3MKKyMKK3BsYXRmb3JtLSQoQ09ORklHX1BNQ19NU1ApCSs9IHBtYy1zaWVycmEvbXNwNzF4eC8KK2NmbGFncy0kKENPTkZJR19QTUNfTVNQKQkrPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BtYy1zaWVycmEvbXNwNzF4eCBcCisJCQkJCS1tbm8tYnJhbmNoLWxpa2VseQorbG9hZC0kKENPTkZJR19QTUNfTVNQKQkJKz0gMHhmZmZmZmZmZjgwMTAwMDAwCisKKyMKKyMgUE1DLVNpZXJyYSBZb3NlbWl0ZQorIworcGxhdGZvcm0tJChDT05GSUdfUE1DX1lPU0VNSVRFKQkrPSBwbWMtc2llcnJhL3lvc2VtaXRlLworY2ZsYWdzLSQoQ09ORklHX1BNQ19ZT1NFTUlURSkJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXlvc2VtaXRlCitsb2FkLSQoQ09ORklHX1BNQ19ZT1NFTUlURSkJKz0gMHhmZmZmZmZmZjgwMTAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9od2J1dHRvbi5jIGIvYXJjaC9taXBzL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfaHdidXR0b24uYwppbmRleCAxMTc2OWI1Li5jODQxZjA4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9od2J1dHRvbi5jCisrKyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX2h3YnV0dG9uLmMKQEAgLTMyLDkgKzMyLDYgQEAKICNpbmNsdWRlIDxtc3BfaW50Lmg+CiAjaW5jbHVkZSA8bXNwX3JlZ3MuaD4KICNpbmNsdWRlIDxtc3BfcmVnb3BzLmg+Ci0jaWZkZWYgQ09ORklHX1BNQ1RXSUxFRAotI2luY2x1ZGUgPG1zcF9sZWRfbWFjcm9zLmg+Ci0jZW5kaWYKIAogLyogRm9yIGh3YnV0dG9uX2ludGVycnVwdC0+aW5pdGlhbF9zdGF0ZSAqLwogI2RlZmluZSBIV0JVVFRPTl9ISQkweDEKQEAgLTgyLDEwICs3OSw2IEBACiAJcHJpbnRrKEtFUk5fV0FSTklORyAiU1RBTkRCWSBzd2l0Y2ggd2FzIHNldCB0byBPTiAobm90IGltcGxlbWVudGVkKVxuIik7CiAKIAkvKiBUT0RPOiBQdXQgYm9hcmQgaW4gc3RhbmRieSBtb2RlICovCi0jaWZkZWYgQ09ORklHX1BNQ1RXSUxFRAotCW1zcF9sZWRfdHVybl9vZmYoTVNQX0xFRF9QV1JTVEFOREJZX0dSRUVOKTsKLQltc3BfbGVkX3R1cm5fb24oTVNQX0xFRF9QV1JTVEFOREJZX1JFRCk7Ci0jZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgc3RhbmRieV9vZmYodm9pZCAqZGF0YSkKQEAgLTk0LDEwICs4Nyw2IEBACiAJCSJTVEFOREJZIHN3aXRjaCB3YXMgc2V0IHRvIE9GRiAobm90IGltcGxlbWVudGVkKVxuIik7CiAKIAkvKiBUT0RPOiBUYWtlIG91dCBvZiBzdGFuZGJ5IG1vZGUgKi8KLSNpZmRlZiBDT05GSUdfUE1DVFdJTEVECi0JbXNwX2xlZF90dXJuX29uKE1TUF9MRURfUFdSU1RBTkRCWV9HUkVFTik7Ci0JbXNwX2xlZF90dXJuX29mZihNU1BfTEVEX1BXUlNUQU5EQllfUkVEKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgc3RydWN0IGh3YnV0dG9uX2ludGVycnVwdCBzb2Z0cmVzZXRfc3cgPSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9odC1pcnEuYyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2h0LWlycS5jCmluZGV4IDVhZWM0MDUuLjg2Yjk4ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2h0LWlycS5jCisrKyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2h0LWlycS5jCkBAIC0zNSwxOCArMzUsMTcgQEAKICAqLwogdm9pZCBfX2luaXQgdGl0YW5faHRfcGNpYmlvc19maXh1cF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cykKIHsKLSAgICAgICAgc3RydWN0IHBjaV9idXMgKmN1cnJlbnRfYnVzID0gYnVzOwotICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2aWNlczsKLSAgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqZGV2aWNlc19saW5rOworCXN0cnVjdCBwY2lfYnVzICpjdXJyZW50X2J1cyA9IGJ1czsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2aWNlczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpkZXZpY2VzX2xpbms7CiAKIAlsaXN0X2Zvcl9lYWNoKGRldmljZXNfbGluaywgJihjdXJyZW50X2J1cy0+ZGV2aWNlcykpIHsKLSAgICAgICAgICAgICAgICBkZXZpY2VzID0gcGNpX2Rldl9iKGRldmljZXNfbGluayk7Ci0gICAgICAgICAgICAgICAgaWYgKGRldmljZXMgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCQlkZXZpY2VzID0gcGNpX2Rldl9iKGRldmljZXNfbGluayk7CisJCWlmIChkZXZpY2VzID09IE5VTEwpCisJCQljb250aW51ZTsKIAl9CiAKIAkvKgogCSAqIFBMWCBhbmQgU1BLVCByZWxhdGVkIGNoYW5nZXMgZ28gaGVyZQogCSAqLwotCiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9pcnEuYyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2lycS5jCmluZGV4IDUxMDIxY2YuLjI1YmJiZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2lycS5jCisrKyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2lycS5jCkBAIC0xNTAsOCArMTUwLDQgQEAKIAltaXBzX2NwdV9pcnFfaW5pdCgpOwogCXJtN2tfY3B1X2lycV9pbml0KCk7CiAJcm05a19jcHVfaXJxX2luaXQoKTsKLQotI2lmZGVmIENPTkZJR19HREJfQ09OU09MRQotCXJlZ2lzdGVyX2dkYl9jb25zb2xlKCk7Ci0jZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbng4MzN4L01ha2VmaWxlIGIvYXJjaC9taXBzL3BueDgzM3gvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJjNDY5OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wbng4MzN4L01ha2VmaWxlCkBAIC0wLDAgKzEsMyBAQAorb2JqLSQoQ09ORklHX1NPQ19QTlg4MzNYKQkrPSBjb21tb24vCitvYmotJChDT05GSUdfTlhQX1NUQjIyMCkJKz0gc3RiMjJ4Lworb2JqLSQoQ09ORklHX05YUF9TVEIyMjUpCSs9IHN0YjIyeC8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbng4MzN4L1BsYXRmb3JtIGIvYXJjaC9taXBzL3BueDgzM3gvUGxhdGZvcm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U2ZWM0ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wbng4MzN4L1BsYXRmb3JtCkBAIC0wLDAgKzEsNSBAQAorIyBOWFAgU1RCMjI1CitwbGF0Zm9ybS0kKENPTkZJR19TT0NfUE5YODMzWCkJKz0gcG54ODMzeC8KK2NmbGFncy0kKENPTkZJR19TT0NfUE5YODMzWCkgICAgKz0gLUlhcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wbng4MzN4Citsb2FkLSQoQ09ORklHX05YUF9TVEIyMjApCSs9IDB4ZmZmZmZmZmY4MDAwMTAwMAorbG9hZC0kKENPTkZJR19OWFBfU1RCMjI1KQkrPSAweGZmZmZmZmZmODAwMDEwMDAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbng4MzN4L2NvbW1vbi9NYWtlZmlsZSBiL2FyY2gvbWlwcy9wbng4MzN4L2NvbW1vbi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTQ2ZGQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3BueDgzM3gvY29tbW9uL01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai15IDo9IGludGVycnVwdHMubyBwbGF0Zm9ybS5vIHByb20ubyBzZXR1cC5vIHJlc2V0Lm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ueHAvcG54ODMzeC9jb21tb24vaW50ZXJydXB0cy5jIGIvYXJjaC9taXBzL3BueDgzM3gvY29tbW9uL2ludGVycnVwdHMuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9taXBzL254cC9wbng4MzN4L2NvbW1vbi9pbnRlcnJ1cHRzLmMKcmVuYW1lIHRvIGFyY2gvbWlwcy9wbng4MzN4L2NvbW1vbi9pbnRlcnJ1cHRzLmMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ueHAvcG54ODMzeC9jb21tb24vcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9wbng4MzN4L2NvbW1vbi9wbGF0Zm9ybS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL21pcHMvbnhwL3BueDgzM3gvY29tbW9uL3BsYXRmb3JtLmMKcmVuYW1lIHRvIGFyY2gvbWlwcy9wbng4MzN4L2NvbW1vbi9wbGF0Zm9ybS5jCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbnhwL3BueDgzM3gvY29tbW9uL3Byb20uYyBiL2FyY2gvbWlwcy9wbng4MzN4L2NvbW1vbi9wcm9tLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvbWlwcy9ueHAvcG54ODMzeC9jb21tb24vcHJvbS5jCnJlbmFtZSB0byBhcmNoL21pcHMvcG54ODMzeC9jb21tb24vcHJvbS5jCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbnhwL3BueDgzM3gvY29tbW9uL3Jlc2V0LmMgYi9hcmNoL21pcHMvcG54ODMzeC9jb21tb24vcmVzZXQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9taXBzL254cC9wbng4MzN4L2NvbW1vbi9yZXNldC5jCnJlbmFtZSB0byBhcmNoL21pcHMvcG54ODMzeC9jb21tb24vcmVzZXQuYwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL254cC9wbng4MzN4L2NvbW1vbi9zZXR1cC5jIGIvYXJjaC9taXBzL3BueDgzM3gvY29tbW9uL3NldHVwLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvbWlwcy9ueHAvcG54ODMzeC9jb21tb24vc2V0dXAuYwpyZW5hbWUgdG8gYXJjaC9taXBzL3BueDgzM3gvY29tbW9uL3NldHVwLmMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbng4MzN4L3N0YjIyeC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9wbng4MzN4L3N0YjIyeC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjU4MDA2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3BueDgzM3gvc3RiMjJ4L01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai15IDo9IGJvYXJkLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ueHAvcG54ODMzeC9zdGIyMngvYm9hcmQuYyBiL2FyY2gvbWlwcy9wbng4MzN4L3N0YjIyeC9ib2FyZC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL21pcHMvbnhwL3BueDgzM3gvc3RiMjJ4L2JvYXJkLmMKcmVuYW1lIHRvIGFyY2gvbWlwcy9wbng4MzN4L3N0YjIyeC9ib2FyZC5jCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG54ODU1MC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9wbng4NTUwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmN2U4NTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvcG54ODU1MC9NYWtlZmlsZQpAQCAtMCwwICsxLDMgQEAKK29iai0kKENPTkZJR19TT0NfUE5YODU1MCkJKz0gY29tbW9uLworb2JqLSQoQ09ORklHX1BOWDg1NTBfSkJTKQkrPSBqYnMvCitvYmotJChDT05GSUdfUE5YODU1MF9TVEI4MTApCSs9IHN0YjgxMC8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbng4NTUwL1BsYXRmb3JtIGIvYXJjaC9taXBzL3BueDg1NTAvUGxhdGZvcm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU3ZmJkZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wbng4NTUwL1BsYXRmb3JtCkBAIC0wLDAgKzEsNyBAQAorcGxhdGZvcm0tJChDT05GSUdfU09DX1BOWDg1NTApCSs9IHBueDg1NTAvCisKK2NmbGFncy0kKENPTkZJR19TT0NfUE5YODU1MCkJKz0JCQkJCVwKKwkJLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBueDg1NTAKKworbG9hZC0kKENPTkZJR19QTlg4NTUwX0pCUykJKz0gMHhmZmZmZmZmZjgwMDYwMDAwCitsb2FkLSQoQ09ORklHX1BOWDg1NTBfU1RCODEwKQkrPSAweGZmZmZmZmZmODAwNjAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbng4NTUwL2NvbW1vbi9NYWtlZmlsZSBiL2FyY2gvbWlwcy9wbng4NTUwL2NvbW1vbi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGNlNjk1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3BueDg1NTAvY29tbW9uL01ha2VmaWxlCkBAIC0wLDAgKzEsMjYgQEAKKyMKKyMgUGVyIEhhbGxzbWFyaywgcGVyLmhhbGxzbWFya0BtdmlzdGEuY29tCisjCisjICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyMKKyMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBQTlg4NTUwIHNwZWNpZmljIGtlcm5lbCBpbnRlcmZhY2Ugcm91dGluZXMKKyMgdW5kZXIgTGludXguCisjCisKK29iai15IDo9IHNldHVwLm8gcHJvbS5vIGludC5vIHJlc2V0Lm8gdGltZS5vIHByb2MubyBwbGF0Zm9ybS5vCitvYmotJChDT05GSUdfUENJKSArPSBwY2kubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi9pbnQuYyBiL2FyY2gvbWlwcy9wbng4NTUwL2NvbW1vbi9pbnQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi9pbnQuYwpyZW5hbWUgdG8gYXJjaC9taXBzL3BueDg1NTAvY29tbW9uL2ludC5jCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG54ODU1MC9jb21tb24vcGNpLmMgYi9hcmNoL21pcHMvcG54ODU1MC9jb21tb24vcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThlODZkZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wbng4NTUwL2NvbW1vbi9wY2kuYwpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqCisgKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KKyAqCisgKiBBdXRob3I6IHNvdXJjZUBtdmlzdGEuY29tCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPHBjaS5oPgorI2luY2x1ZGUgPGdsYi5oPgorI2luY2x1ZGUgPG5hbmQuaD4KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwY2lfaW9fcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gUE5YODU1MF9QQ0lJTyArIDB4MTAwMCwJLyogcmVzZXJ2ZSByZWdhY3kgSS9PIHNwYWNlICovCisJLmVuZAk9IFBOWDg1NTBfUENJSU8gKyBQTlg4NTUwX1BDSUlPX1NJWkUsCisJLm5hbWUJPSAicGNpIElPIHNwYWNlIiwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBjaV9tZW1fcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gUE5YODU1MF9QQ0lNRU0sCisJLmVuZAk9IFBOWDg1NTBfUENJTUVNICsgUE5YODU1MF9QQ0lNRU1fU0laRSAtIDEsCisJLm5hbWUJPSAicGNpIG1lbW9yeSBzcGFjZSIsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KK307CisKK2V4dGVybiBzdHJ1Y3QgcGNpX29wcyBwbng4NTUwX3BjaV9vcHM7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgcG54ODU1MF9jb250cm9sbGVyID0geworCS5wY2lfb3BzCT0gJnBueDg1NTBfcGNpX29wcywKKwkuaW9fbWFwX2Jhc2UJPSBQTlg4NTUwX1BPUlRfQkFTRSwKKwkuaW9fcmVzb3VyY2UJPSAmcGNpX2lvX3Jlc291cmNlLAorCS5tZW1fcmVzb3VyY2UJPSAmcGNpX21lbV9yZXNvdXJjZSwKK307CisKKy8qIFJldHVybiB0aGUgdG90YWwgc2l6ZSBvZiBEUkFNLW1lbW9yeSwgKFJBTkswICsgUkFOSzEpICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X3N5c3RlbV9tZW1fc2l6ZSh2b2lkKQoreworCS8qIFJlYWQgSVAyMDMxX1JBTkswX0FERFJfTE8gKi8KKwl1bnNpZ25lZCBsb25nIGRyYW1fcjBfbG8gPSBpbmwoUENJX0JBU0UgfCAweDY1MDEwKTsKKwkvKiBSZWFkIElQMjAzMV9SQU5LMV9BRERSX0hJICovCisJdW5zaWduZWQgbG9uZyBkcmFtX3IxX2hpID0gaW5sKFBDSV9CQVNFIHwgMHg2NTAxOCk7CisKKwlyZXR1cm4gZHJhbV9yMV9oaSAtIGRyYW1fcjBfbG8gKyAxOworfQorCitzdGF0aWMgaW50IF9faW5pdCBwbng4NTUwX3BjaV9zZXR1cCh2b2lkKQoreworCWludCBwY2lfbWVtX2NvZGU7CisJaW50IG1lbV9zaXplID0gZ2V0X3N5c3RlbV9tZW1fc2l6ZSgpID4+IDIwOworCisJLyogQ2xlYXIgdGhlIEdsb2JhbCAyIFJlZ2lzdGVyLCBQQ0kgSW50YSBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVycworCSAgIEJpdCAxOkVuYWJsZSBEQUMgUG93ZXJkb3duCisJICAtPiAwOkRBQ3MgYXJlIGVuYWJsZWQgYW5kIGFyZSB3b3JraW5nIG5vcm1hbGx5CisJICAgICAxOkRBQ3MgYXJlIHBvd2VyZG93bgorCSAgIEJpdCAwOkVuYWJsZSBvZiBQQ0kgaW50YSBvdXRwdXQKKwkgIC0+IDAgPSBEaXNhYmxlIFBDSSBpbnRhIG91dHB1dAorCSAgICAgMSA9IEVuYWJsZSBQQ0kgaW50YSBvdXRwdXQKKwkqLworCVBOWDg1NTBfR0xCMl9FTkFCX0lOVEFfTyA9IDA7CisKKwkvKiBDYWxjIHRoZSBQQ0kgbWVtIHNpemUgY29kZSAqLworCWlmIChtZW1fc2l6ZSA+PSAxMjgpCisJCXBjaV9tZW1fY29kZSA9IFNJWkVfMTI4TTsKKwllbHNlIGlmIChtZW1fc2l6ZSA+PSA2NCkKKwkJcGNpX21lbV9jb2RlID0gU0laRV82NE07CisJZWxzZSBpZiAobWVtX3NpemUgPj0gMzIpCisJCXBjaV9tZW1fY29kZSA9IFNJWkVfMzJNOworCWVsc2UKKwkJcGNpX21lbV9jb2RlID0gU0laRV8xNk07CisKKwkvKiBTZXQgUENJX1hJTyByZWdpc3RlcnMgKi8KKwlvdXRsKHBjaV9tZW1fcmVzb3VyY2Uuc3RhcnQsIFBDSV9CQVNFIHwgUENJX0JBU0UxX0xPKTsKKwlvdXRsKHBjaV9tZW1fcmVzb3VyY2UuZW5kICsgMSwgUENJX0JBU0UgfCBQQ0lfQkFTRTFfSEkpOworCW91dGwocGNpX2lvX3Jlc291cmNlLnN0YXJ0LCBQQ0lfQkFTRSB8IFBDSV9CQVNFMl9MTyk7CisJb3V0bChwY2lfaW9fcmVzb3VyY2UuZW5kLCBQQ0lfQkFTRSB8IFBDSV9CQVNFMl9ISSk7CisKKwkvKiBTZW5kIG1lbW9yeSB0cmFuc2FjdGlvbiB2aWEgUENJX0JBU0UyICovCisJb3V0bCgweDAwMDAwMDAxLCBQQ0lfQkFTRSB8IFBDSV9JTyk7CisKKwkvKiBVbmxvY2sgdGhlIHNldHVwIHJlZ2lzdGVyICovCisJb3V0bCgweGNhLCBQQ0lfQkFTRSB8IFBDSV9VTkxPQ0tSRUcpOworCisJLyoKKwkgKiBCQVIwIG9mIFBOWDg1NTAgKHBjaSBiYXNlIDEwKSBtdXN0IGJlIHplcm8gaW4gb3JkZXIgZm9yIGlkZQorCSAqIHRvIHdvcmssIGFuZCBpbiBvcmRlciBmb3IgYnVzX3RvX2JhZGRyIHRvIHdvcmsgd2l0aG91dCBhbnkKKwkgKiBoYWNrcy4KKwkgKi8KKwlvdXRsKDB4MDAwMDAwMDAsIFBDSV9CQVNFIHwgUENJX0JBU0UxMCk7CisKKwkvKgorCSAqVGhlc2UgdHdvIGJhcnMgYXJlIHNldCBieSBkZWZhdWx0IG9yIHRoZSBib290IGNvZGUuCisJICogSG93ZXZlciwgaXQncyBzYWZlciB0byBzZXQgdGhlbSBoZXJlIHNvIHdlJ3JlIG5vdCBib290CisJICogY29kZSBkZXBlbmRlbnQuCisJICovCisJb3V0bCgweDFiZTAwMDAwLCBQQ0lfQkFTRSB8IFBDSV9CQVNFMTQpOyAgLyogUE5YIE1NSU8gKi8KKwlvdXRsKFBOWDg1NTBfTkFORF9CQVNFX0FERFIsIFBDSV9CQVNFIHwgUENJX0JBU0UxOCk7ICAvKiBYSU8gICAgICAqLworCisJb3V0bChQQ0lfRU5fVEEgfAorCSAgICAgUENJX0VOX1BDSTJNTUkgfAorCSAgICAgUENJX0VOX1hJTyB8CisJICAgICBQQ0lfU0VUVVBfQkFTRTE4X1NJWkUoU0laRV8zMk0pIHwKKwkgICAgIFBDSV9TRVRVUF9CQVNFMThfRU4gfAorCSAgICAgUENJX1NFVFVQX0JBU0UxNF9FTiB8CisJICAgICBQQ0lfU0VUVVBfQkFTRTEwX1BSRUYgfAorCSAgICAgUENJX1NFVFVQX0JBU0UxMF9TSVpFKHBjaV9tZW1fY29kZSkgfAorCSAgICAgUENJX1NFVFVQX0NGR01BTkFHRV9FTiB8CisJICAgICBQQ0lfU0VUVVBfUENJQVJCX0VOLAorCSAgICAgUENJX0JBU0UgfAorCSAgICAgUENJX1NFVFVQKTsJLyogUENJX1NFVFVQICovCisJb3V0bCgweDAwMDAwMDAwLCBQQ0lfQkFTRSB8IFBDSV9DVFJMKTsJLyogUENJX0NPTlRST0wgKi8KKworCXJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKCZwbng4NTUwX2NvbnRyb2xsZXIpOworCisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwocG54ODU1MF9wY2lfc2V0dXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL3BueDg1NTAvY29tbW9uL3BsYXRmb3JtLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vcGxhdGZvcm0uYwpyZW5hbWUgdG8gYXJjaC9taXBzL3BueDg1NTAvY29tbW9uL3BsYXRmb3JtLmMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vcHJvYy5jIGIvYXJjaC9taXBzL3BueDg1NTAvY29tbW9uL3Byb2MuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi9wcm9jLmMKcmVuYW1lIHRvIGFyY2gvbWlwcy9wbng4NTUwL2NvbW1vbi9wcm9jLmMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vcHJvbS5jIGIvYXJjaC9taXBzL3BueDg1NTAvY29tbW9uL3Byb20uYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi9wcm9tLmMKcmVuYW1lIHRvIGFyY2gvbWlwcy9wbng4NTUwL2NvbW1vbi9wcm9tLmMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vcmVzZXQuYyBiL2FyY2gvbWlwcy9wbng4NTUwL2NvbW1vbi9yZXNldC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL3Jlc2V0LmMKcmVuYW1lIHRvIGFyY2gvbWlwcy9wbng4NTUwL2NvbW1vbi9yZXNldC5jCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG54ODU1MC9jb21tb24vc2V0dXAuYyBiL2FyY2gvbWlwcy9wbng4NTUwL2NvbW1vbi9zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MjQ2YzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvcG54ODU1MC9jb21tb24vc2V0dXAuYwpAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAqCisgKiAyLjYgcG9ydCwgRW1iZWRkZWQgQWxsZXkgU29sdXRpb25zLCBJbmMKKyAqCisgKiAgQmFzZWQgb24gUGVyIEhhbGxzbWFyaywgcGVyLmhhbGxzbWFya0BtdmlzdGEuY29tCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3BueDh4eHguaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorCisjaW5jbHVkZSA8YXNtL2NwdS5oPgorI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KKyNpbmNsdWRlIDxhc20vcmVib290Lmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorCisjaW5jbHVkZSA8Z2xiLmg+CisjaW5jbHVkZSA8aW50Lmg+CisjaW5jbHVkZSA8cGNpLmg+CisjaW5jbHVkZSA8dWFydC5oPgorI2luY2x1ZGUgPG5hbmQuaD4KKworZXh0ZXJuIHZvaWQgX19pbml0IGJvYXJkX3NldHVwKHZvaWQpOworZXh0ZXJuIHZvaWQgcG54ODU1MF9tYWNoaW5lX3Jlc3RhcnQoY2hhciAqKTsKK2V4dGVybiB2b2lkIHBueDg1NTBfbWFjaGluZV9oYWx0KHZvaWQpOworZXh0ZXJuIHZvaWQgcG54ODU1MF9tYWNoaW5lX3Bvd2VyX29mZih2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgcmVzb3VyY2UgaW9wb3J0X3Jlc291cmNlOworZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSBpb21lbV9yZXNvdXJjZTsKK2V4dGVybiBjaGFyICpwcm9tX2dldGNtZGxpbmUodm9pZCk7CisKK3N0cnVjdCByZXNvdXJjZSBzdGFuZGFyZF9pb19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IDB4MDAsCisJCS5lbmQJPSAweDFmLAorCQkubmFtZQk9ICJkbWExIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAweDQwLAorCQkuZW5kCT0gMHg1ZiwKKwkJLm5hbWUJPSAidGltZXIiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9LCB7CisJCS5zdGFydAk9IDB4ODAsCisJCS5lbmQJPSAweDhmLAorCQkubmFtZQk9ICJkbWEgcGFnZSByZWciLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9LCB7CisJCS5zdGFydAk9IDB4YzAsCisJCS5lbmQJPSAweGRmLAorCQkubmFtZQk9ICJkbWEyIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwKK307CisKKyNkZWZpbmUgU1RBTkRBUkRfSU9fUkVTT1VSQ0VTIEFSUkFZX1NJWkUoc3RhbmRhcmRfaW9fcmVzb3VyY2VzKQorCitleHRlcm4gc3RydWN0IHJlc291cmNlIHBjaV9pb19yZXNvdXJjZTsKK2V4dGVybiBzdHJ1Y3QgcmVzb3VyY2UgcGNpX21lbV9yZXNvdXJjZTsKKworLyogUmV0dXJuIHRoZSB0b3RhbCBzaXplIG9mIERSQU0tbWVtb3J5LCAoUkFOSzAgKyBSQU5LMSkgKi8KK3Vuc2lnbmVkIGxvbmcgZ2V0X3N5c3RlbV9tZW1fc2l6ZSh2b2lkKQoreworCS8qIFJlYWQgSVAyMDMxX1JBTkswX0FERFJfTE8gKi8KKwl1bnNpZ25lZCBsb25nIGRyYW1fcjBfbG8gPSBpbmwoUENJX0JBU0UgfCAweDY1MDEwKTsKKwkvKiBSZWFkIElQMjAzMV9SQU5LMV9BRERSX0hJICovCisJdW5zaWduZWQgbG9uZyBkcmFtX3IxX2hpID0gaW5sKFBDSV9CQVNFIHwgMHg2NTAxOCk7CisKKwlyZXR1cm4gZHJhbV9yMV9oaSAtIGRyYW1fcjBfbG8gKyAxOworfQorCitpbnQgcG54ODU1MF9jb25zb2xlX3BvcnQgPSAtMTsKKwordm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKK3sKKwlpbnQgaTsKKwljaGFyKiBhcmdwdHI7CisKKwlib2FyZF9zZXR1cCgpOyAgLyogYm9hcmQgc3BlY2lmaWMgc2V0dXAgKi8KKworICAgICAgICBfbWFjaGluZV9yZXN0YXJ0ID0gcG54ODU1MF9tYWNoaW5lX3Jlc3RhcnQ7CisgICAgICAgIF9tYWNoaW5lX2hhbHQgPSBwbng4NTUwX21hY2hpbmVfaGFsdDsKKyAgICAgICAgcG1fcG93ZXJfb2ZmID0gcG54ODU1MF9tYWNoaW5lX3Bvd2VyX29mZjsKKworCS8qIENsZWFyIHRoZSBHbG9iYWwgMiBSZWdpc3RlciwgUENJIEludGEgT3V0cHV0IEVuYWJsZSBSZWdpc3RlcnMKKwkgICBCaXQgMTpFbmFibGUgREFDIFBvd2VyZG93bgorCSAgLT4gMDpEQUNzIGFyZSBlbmFibGVkIGFuZCBhcmUgd29ya2luZyBub3JtYWxseQorCSAgICAgMTpEQUNzIGFyZSBwb3dlcmRvd24KKwkgICBCaXQgMDpFbmFibGUgb2YgUENJIGludGEgb3V0cHV0CisJICAtPiAwID0gRGlzYWJsZSBQQ0kgaW50YSBvdXRwdXQKKwkgICAgIDEgPSBFbmFibGUgUENJIGludGEgb3V0cHV0CisJKi8KKwlQTlg4NTUwX0dMQjJfRU5BQl9JTlRBX08gPSAwOworCisJLyogSU8vTUVNIHJlc291cmNlcy4gKi8KKwlzZXRfaW9fcG9ydF9iYXNlKFBOWDg1NTBfUE9SVF9CQVNFKTsKKwlpb3BvcnRfcmVzb3VyY2Uuc3RhcnQgPSAwOworCWlvcG9ydF9yZXNvdXJjZS5lbmQgPSB+MDsKKwlpb21lbV9yZXNvdXJjZS5zdGFydCA9IDA7CisJaW9tZW1fcmVzb3VyY2UuZW5kID0gfjA7CisKKwkvKiBSZXF1ZXN0IEkvTyBzcGFjZSBmb3IgZGV2aWNlcyBvbiB0aGlzIGJvYXJkICovCisJZm9yIChpID0gMDsgaSA8IFNUQU5EQVJEX0lPX1JFU09VUkNFUzsgaSsrKQorCQlyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsIHN0YW5kYXJkX2lvX3Jlc291cmNlcyArIGkpOworCisJLyogUGxhY2UgdGhlIE1vZGUgQ29udHJvbCBiaXQgZm9yIEdQSU8gcGluIDE2IGluIHByaW1hcnkgZnVuY3Rpb24gKi8KKwkvKiBQaW4gMTYgaXMgdXNlZCBieSBVQVJUMSwgVUExX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCW91dGwoKFBOWDg1NTBfR1BJT19NT0RFX1BSSU1PUCA8PCBQTlg4NTUwX0dQSU9fTUNfMTZfQklUKSB8CisJCQkoUE5YODU1MF9HUElPX01PREVfUFJJTU9QIDw8IFBOWDg1NTBfR1BJT19NQ18xN19CSVQpLAorCQkJUE5YODU1MF9HUElPX01DMSk7CisKKwlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKKwlpZiAoKGFyZ3B0ciA9IHN0cnN0cihhcmdwdHIsICJjb25zb2xlPXR0eVMiKSkgIT0gTlVMTCkgeworCQlhcmdwdHIgKz0gc3RybGVuKCJjb25zb2xlPXR0eVMiKTsKKwkJcG54ODU1MF9jb25zb2xlX3BvcnQgPSAqYXJncHRyID09ICcwJyA/IDAgOiAxOworCisJCS8qIFdlIG11c3QgaW5pdGlhbGl6ZSB0aGUgVUFSVCAoY29uc29sZSkgYmVmb3JlIGVhcmx5IHByaW50ayAqLworCQkvKiBTZXQgTENSIHRvIDgtYml0IGFuZCBCQVVEIHRvIDM4NDAwIChubyA1KSAgICAgICAgICAgICAgICAqLworCQlpcDMxMDZfbGNyKFVBUlRfQkFTRSwgcG54ODU1MF9jb25zb2xlX3BvcnQpID0KKwkJCVBOWDhYWFhfVUFSVF9MQ1JfOEJJVDsKKwkJaXAzMTA2X2JhdWQoVUFSVF9CQVNFLCBwbng4NTUwX2NvbnNvbGVfcG9ydCkgPSA1OworCX0KKworCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vdGltZS5jIGIvYXJjaC9taXBzL3BueDg1NTAvY29tbW9uL3RpbWUuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi90aW1lLmMKcmVuYW1lIHRvIGFyY2gvbWlwcy9wbng4NTUwL2NvbW1vbi90aW1lLmMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbng4NTUwL2picy9NYWtlZmlsZSBiL2FyY2gvbWlwcy9wbng4NTUwL2picy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGRjM2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3BueDg1NTAvamJzL01ha2VmaWxlCkBAIC0wLDAgKzEsNCBAQAorCisjIE1ha2VmaWxlIGZvciB0aGUgTlhQIEpCUyBCb2FyZC4KKworb2JqLXkgOj0gaW5pdC5vIGJvYXJkX3NldHVwLm8gaXJxbWFwLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9qYnMvYm9hcmRfc2V0dXAuYyBiL2FyY2gvbWlwcy9wbng4NTUwL2picy9ib2FyZF9zZXR1cC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL21pcHMvbnhwL3BueDg1NTAvamJzL2JvYXJkX3NldHVwLmMKcmVuYW1lIHRvIGFyY2gvbWlwcy9wbng4NTUwL2picy9ib2FyZF9zZXR1cC5jCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbnhwL3BueDg1NTAvamJzL2luaXQuYyBiL2FyY2gvbWlwcy9wbng4NTUwL2picy9pbml0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvbWlwcy9ueHAvcG54ODU1MC9qYnMvaW5pdC5jCnJlbmFtZSB0byBhcmNoL21pcHMvcG54ODU1MC9qYnMvaW5pdC5jCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbnhwL3BueDg1NTAvamJzL2lycW1hcC5jIGIvYXJjaC9taXBzL3BueDg1NTAvamJzL2lycW1hcC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL21pcHMvbnhwL3BueDg1NTAvamJzL2lycW1hcC5jCnJlbmFtZSB0byBhcmNoL21pcHMvcG54ODU1MC9qYnMvaXJxbWFwLmMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbng4NTUwL3N0YjgxMC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9wbng4NTUwL3N0YjgxMC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjRmZjAyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3BueDg1NTAvc3RiODEwL01ha2VmaWxlCkBAIC0wLDAgKzEsNCBAQAorCisjIE1ha2VmaWxlIGZvciB0aGUgTlhQIFNUQjgxMCBCb2FyZC4KKworb2JqLXkgOj0gcHJvbV9pbml0Lm8gYm9hcmRfc2V0dXAubyBpcnFtYXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL254cC9wbng4NTUwL3N0YjgxMC9ib2FyZF9zZXR1cC5jIGIvYXJjaC9taXBzL3BueDg1NTAvc3RiODEwL2JvYXJkX3NldHVwLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvbWlwcy9ueHAvcG54ODU1MC9zdGI4MTAvYm9hcmRfc2V0dXAuYwpyZW5hbWUgdG8gYXJjaC9taXBzL3BueDg1NTAvc3RiODEwL2JvYXJkX3NldHVwLmMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9zdGI4MTAvaXJxbWFwLmMgYi9hcmNoL21pcHMvcG54ODU1MC9zdGI4MTAvaXJxbWFwLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvbWlwcy9ueHAvcG54ODU1MC9zdGI4MTAvaXJxbWFwLmMKcmVuYW1lIHRvIGFyY2gvbWlwcy9wbng4NTUwL3N0YjgxMC9pcnFtYXAuYwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL254cC9wbng4NTUwL3N0YjgxMC9wcm9tX2luaXQuYyBiL2FyY2gvbWlwcy9wbng4NTUwL3N0YjgxMC9wcm9tX2luaXQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9taXBzL254cC9wbng4NTUwL3N0YjgxMC9wcm9tX2luaXQuYwpyZW5hbWUgdG8gYXJjaC9taXBzL3BueDg1NTAvc3RiODEwL3Byb21faW5pdC5jCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXJ0di9NYWtlZmlsZSBiL2FyY2gvbWlwcy9wb3dlcnR2L01ha2VmaWxlCmluZGV4IDBhMGQ3M2MuLmJhZjZlOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wb3dlcnR2L01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L01ha2VmaWxlCkBAIC0yMyw2ICsyMyw5IEBACiAjIHVuZGVyIExpbnV4LgogIwogCi1vYmoteSArPSBpbml0Lm8gbWVtb3J5Lm8gcmVzZXQubyB0aW1lLm8gcG93ZXJ0dl9zZXR1cC5vIGFzaWMvIHBjaS8KK29iai15ICs9IGluaXQubyBpb3JlbWFwLm8gbWVtb3J5Lm8gcG93ZXJ0dl9zZXR1cC5vIHJlc2V0Lm8gdGltZS5vIFwKKwlhc2ljLyBwY2kvCiAKLUVYVFJBX0NGTEFHUyArPSAtV2FsbCAtV2Vycm9yCitvYmotJChDT05GSUdfVVNCKSArPSBwb3dlcnR2LXVzYi5vCisKK0VYVFJBX0NGTEFHUyArPSAtV2FsbApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VydHYvUGxhdGZvcm0gYi9hcmNoL21pcHMvcG93ZXJ0di9QbGF0Zm9ybQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWI1YWYxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvUGxhdGZvcm0KQEAgLTAsMCArMSw3IEBACisjCisjIENpc2NvIFBvd2VyVFYgUGxhdGZvcm0KKyMKK3BsYXRmb3JtLSQoQ09ORklHX1BPV0VSVFYpCSs9IHBvd2VydHYvCitjZmxhZ3MtJChDT05GSUdfUE9XRVJUVikJKz0JCQkJCVwKKwkJLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYKK2xvYWQtJChDT05GSUdfUE9XRVJUVikJCSs9IDB4ZmZmZmZmZmY5MDgwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9NYWtlZmlsZSBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvTWFrZWZpbGUKaW5kZXggYmViZmRjZi4uZjBlOTVkYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL01ha2VmaWxlCkBAIC0xNiw4ICsxNiw4IEBACiAjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAjCiAKLW9iai15ICs9IGFzaWMtY2FsbGlvcGUubyBhc2ljLWNyb251cy5vIGFzaWMtemV1cy5vIGFzaWNfZGV2aWNlcy5vIGFzaWNfaW50Lm8gXAotCSBpcnFfYXNpYy5vIHByZWFsbG9jLWNhbGxpb3BlLm8gcHJlYWxsb2MtY3JvbnVzLm8gXAotCSBwcmVhbGxvYy1jcm9udXNsaXRlLm8gcHJlYWxsb2MtemV1cy5vCitvYmoteSArPSBhc2ljLWNhbGxpb3BlLm8gYXNpYy1jcm9udXMubyBhc2ljLWdhaWEubyBhc2ljLXpldXMubyBcCisJYXNpY19kZXZpY2VzLm8gYXNpY19pbnQubyBpcnFfYXNpYy5vIHByZWFsbG9jLWNhbGxpb3BlLm8gXAorCXByZWFsbG9jLWNyb251cy5vIHByZWFsbG9jLWNyb251c2xpdGUubyBwcmVhbGxvYy1nYWlhLm8gcHJlYWxsb2MtemV1cy5vCiAKIEVYVFJBX0NGTEFHUyArPSAtV2FsbCAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL2FzaWMtY2FsbGlvcGUuYyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpYy1jYWxsaW9wZS5jCmluZGV4IDFhZTY2MjMuLjBhMTcwZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpYy1jYWxsaW9wZS5jCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpYy1jYWxsaW9wZS5jCkBAIC03Nyw3ICs3Nyw3IEBACiAJLmludF9kb2NzaXNfZW4gPSB7LnBoeXMgPSBDQUxMSU9QRV9BRERSKDB4QTAyOEY0KX0sCiAKIAkubWlwc19wbGxfc2V0dXAgPSB7LnBoeXMgPSBDQUxMSU9QRV9BRERSKDB4OTgwMDAwKX0sCi0JLnVzYl9mcyA9IHsucGh5cyA9IENBTExJT1BFX0FERFIoMHg5ODAwMzApfSwKKwkuZnM0MzJ4NGI0X3VzYl9jdGwgPSB7LnBoeXMgPSBDQUxMSU9QRV9BRERSKDB4OTgwMDMwKX0sCiAJLnRlc3RfYnVzID0gey5waHlzID0gQ0FMTElPUEVfQUREUigweDk4MDBDQyl9LAogCS5jcnRfc3BhcmUgPSB7LnBoeXMgPSBDQUxMSU9QRV9BRERSKDB4OTgwMGQ0KX0sCiAJLnVzYjJfb2hjaV9pbnRfbWFzayA9IHsucGh5cyA9IENBTExJT1BFX0FERFIoMHg5QTAwMGMpfSwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpYy1jcm9udXMuYyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpYy1jcm9udXMuYwppbmRleCA1YmI2NGJmLi5iYmMwYzEyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL2FzaWMtY3JvbnVzLmMKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljLWNyb251cy5jCkBAIC03NywxMyArNzcsMTMgQEAKIAkuaW50X2RvY3Npc19lbiA9IHsucGh5cyA9IENST05VU19BRERSKDB4MkEyOEY0KX0sCiAKIAkubWlwc19wbGxfc2V0dXAgPSB7LnBoeXMgPSBDUk9OVVNfQUREUigweDFDMDAwMCl9LAotCS51c2JfZnMgPSB7LnBoeXMgPSBDUk9OVVNfQUREUigweDFDMDAxOCl9LAorCS5mczQzMng0YjRfdXNiX2N0bCA9IHsucGh5cyA9IENST05VU19BRERSKDB4MUMwMDI4KX0sCiAJLnRlc3RfYnVzID0gey5waHlzID0gQ1JPTlVTX0FERFIoMHgxQzAwQ0MpfSwKIAkuY3J0X3NwYXJlID0gey5waHlzID0gQ1JPTlVTX0FERFIoMHgxYzAwZDQpfSwKIAkudXNiMl9vaGNpX2ludF9tYXNrID0gey5waHlzID0gQ1JPTlVTX0FERFIoMHgyMDAwMEMpfSwKIAkudXNiMl9zdHJhcCA9IHsucGh5cyA9IENST05VU19BRERSKDB4MjAwMDE0KX0sCiAJLmVoY2lfaGNhcGJhc2UgPSB7LnBoeXMgPSBDUk9OVVNfQUREUigweDIxRkUwMCl9LAotCS5vaGNpX2hjX3JldmlzaW9uID0gey5waHlzID0gQ1JPTlVTX0FERFIoMHgxRTAwMDApfSwKKwkub2hjaV9oY19yZXZpc2lvbiA9IHsucGh5cyA9IENST05VU19BRERSKDB4MjFmYzAwKX0sCiAJLmJjbTFfYnNfbG1pX3N0ZWVyID0gey5waHlzID0gQ1JPTlVTX0FERFIoMHgyRTAwMDgpfSwKIAkudXNiMl9jb250cm9sID0gey5waHlzID0gQ1JPTlVTX0FERFIoMHgyRTAwNEMpfSwKIAkudXNiMl9zdGJ1c19vYmMgPSB7LnBoeXMgPSBDUk9OVVNfQUREUigweDIxRkYwMCl9LApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljLWdhaWEuYyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpYy1nYWlhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFkZGE2OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpYy1nYWlhLmMKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIExvY2F0aW9ucyBvZiBkZXZpY2VzIGluIHRoZSBHYWlhIEFTSUMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBTY2llbnRpZmljLUF0bGFudGEsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIEF1dGhvcjogICAgICAgRGF2aWQgVm9tTGVobgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gtcG93ZXJ0di9hc2ljLmg+CisKK2NvbnN0IHN0cnVjdCByZWdpc3Rlcl9tYXAgZ2FpYV9yZWdpc3Rlcl9tYXAgX19pbml0ZGF0YSA9IHsKKwkuZWljX3Nsb3cwX3N0cnRfYWRkID0gey5waHlzID0gR0FJQV9JT19CQVNFICsgMHgwMDAwMDB9LAorCS5laWNfY2ZnX2JpdHMgPSB7LnBoeXMgPSBHQUlBX0lPX0JBU0UgKyAweDAwMDAzOH0sCisJLmVpY19yZWFkeV9zdGF0dXMgPSB7LnBoeXMgPSBHQUlBX0lPX0JBU0UgKyAweDAwMDA0Q30sCisKKwkuY2hpcHZlcjMgPSB7LnBoeXMgPSBHQUlBX0lPX0JBU0UgKyAweDJBMDgwMH0sCisJLmNoaXB2ZXIyID0gey5waHlzID0gR0FJQV9JT19CQVNFICsgMHgyQTA4MDR9LAorCS5jaGlwdmVyMSA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkEwODA4fSwKKwkuY2hpcHZlcjAgPSB7LnBoeXMgPSBHQUlBX0lPX0JBU0UgKyAweDJBMDgwQ30sCisKKwkvKiBUaGUgcmVnaXN0ZXJzIG9mIElSQmxhc3RlciAqLworCS51YXJ0MV9pbnRzdGF0ID0gey5waHlzID0gR0FJQV9JT19CQVNFICsgMHgyQTE4MDB9LAorCS51YXJ0MV9pbnRlbiA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkExODA0fSwKKwkudWFydDFfY29uZmlnMSA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkExODA4fSwKKwkudWFydDFfY29uZmlnMiA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkExODBDfSwKKwkudWFydDFfZGl2aXNvcmhpID0gey5waHlzID0gR0FJQV9JT19CQVNFICsgMHgyQTE4MTB9LAorCS51YXJ0MV9kaXZpc29ybG8gPSB7LnBoeXMgPSBHQUlBX0lPX0JBU0UgKyAweDJBMTgxNH0sCisJLnVhcnQxX2RhdGEgPSB7LnBoeXMgPSBHQUlBX0lPX0JBU0UgKyAweDJBMTgxOH0sCisJLnVhcnQxX3N0YXR1cyA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkExODFDfSwKKworCS5pbnRfc3RhdF8zID0gey5waHlzID0gR0FJQV9JT19CQVNFICsgMHgyQTI4MDB9LAorCS5pbnRfc3RhdF8yID0gey5waHlzID0gR0FJQV9JT19CQVNFICsgMHgyQTI4MDR9LAorCS5pbnRfc3RhdF8xID0gey5waHlzID0gR0FJQV9JT19CQVNFICsgMHgyQTI4MDh9LAorCS5pbnRfc3RhdF8wID0gey5waHlzID0gR0FJQV9JT19CQVNFICsgMHgyQTI4MEN9LAorCS5pbnRfY29uZmlnID0gey5waHlzID0gR0FJQV9JT19CQVNFICsgMHgyQTI4MTB9LAorCS5pbnRfaW50X3NjYW4gPSB7LnBoeXMgPSBHQUlBX0lPX0JBU0UgKyAweDJBMjgxOH0sCisJLmllbl9pbnRfMyA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkEyODMwfSwKKwkuaWVuX2ludF8yID0gey5waHlzID0gR0FJQV9JT19CQVNFICsgMHgyQTI4MzR9LAorCS5pZW5faW50XzEgPSB7LnBoeXMgPSBHQUlBX0lPX0JBU0UgKyAweDJBMjgzOH0sCisJLmllbl9pbnRfMCA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkEyODNDfSwKKwkuaW50X2xldmVsXzNfMyA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkEyODgwfSwKKwkuaW50X2xldmVsXzNfMiA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkEyODg0fSwKKwkuaW50X2xldmVsXzNfMSA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkEyODg4fSwKKwkuaW50X2xldmVsXzNfMCA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkEyODhDfSwKKwkuaW50X2xldmVsXzJfMyA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkEyODkwfSwKKwkuaW50X2xldmVsXzJfMiA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkEyODk0fSwKKwkuaW50X2xldmVsXzJfMSA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkEyODk4fSwKKwkuaW50X2xldmVsXzJfMCA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkEyODlDfSwKKwkuaW50X2xldmVsXzFfMyA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkEyOEEwfSwKKwkuaW50X2xldmVsXzFfMiA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkEyOEE0fSwKKwkuaW50X2xldmVsXzFfMSA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkEyOEE4fSwKKwkuaW50X2xldmVsXzFfMCA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkEyOEFDfSwKKwkuaW50X2xldmVsXzBfMyA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkEyOEIwfSwKKwkuaW50X2xldmVsXzBfMiA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkEyOEI0fSwKKwkuaW50X2xldmVsXzBfMSA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkEyOEI4fSwKKwkuaW50X2xldmVsXzBfMCA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkEyOEJDfSwKKwkuaW50X2RvY3Npc19lbiA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkEyOEY0fSwKKworCS5taXBzX3BsbF9zZXR1cCA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MUMwMDAwfSwKKwkuZnM0MzJ4NGI0X3VzYl9jdGwgPSB7LnBoeXMgPSBHQUlBX0lPX0JBU0UgKyAweDFDMDAyNH0sCisJLnRlc3RfYnVzID0gey5waHlzID0gR0FJQV9JT19CQVNFICsgMHgxQzAwQ0N9LAorCS5jcnRfc3BhcmUgPSB7LnBoeXMgPSBHQUlBX0lPX0JBU0UgKyAweDFjMDEwOH0sCisJLnVzYjJfb2hjaV9pbnRfbWFzayA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MjAwMDBDfSwKKwkudXNiMl9zdHJhcCA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MjAwMDE0fSwKKwkuZWhjaV9oY2FwYmFzZSA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MjFGRTAwfSwKKwkub2hjaV9oY19yZXZpc2lvbiA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MjFmYzAwfSwKKwkuYmNtMV9ic19sbWlfc3RlZXIgPSB7LnBoeXMgPSBHQUlBX0lPX0JBU0UgKyAweDJFMDAwNH0sCisJLnVzYjJfY29udHJvbCA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkUwMDRDfSwKKwkudXNiMl9zdGJ1c19vYmMgPSB7LnBoeXMgPSBHQUlBX0lPX0JBU0UgKyAweDIxRkYwMH0sCisJLnVzYjJfc3RidXNfbWVzc19zaXplID0gey5waHlzID0gR0FJQV9JT19CQVNFICsgMHgyMUZGMDR9LAorCS51c2IyX3N0YnVzX2NodW5rX3NpemUgPSB7LnBoeXMgPSBHQUlBX0lPX0JBU0UgKyAweDIxRkYwOH0sCisKKwkucGNpZV9yZWdzID0gey5waHlzID0gR0FJQV9JT19CQVNFICsgMHgyMjAwMDB9LAorCS50aW1fY2ggPSB7LnBoeXMgPSBHQUlBX0lPX0JBU0UgKyAweDJBMkMxMH0sCisJLnRpbV9jbCA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkEyQzE0fSwKKwkuZ3Bpb19kb3V0ID0gey5waHlzID0gR0FJQV9JT19CQVNFICsgMHgyQTJDMjB9LAorCS5ncGlvX2RpbiA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkEyQzI0fSwKKwkuZ3Bpb19kaXIgPSB7LnBoeXMgPSBHQUlBX0lPX0JBU0UgKyAweDJBMkMyQ30sCisJLndhdGNoZG9nID0gey5waHlzID0gR0FJQV9JT19CQVNFICsgMHgyQTJDMzB9LAorCS5mcm9udF9wYW5lbCA9IHsucGh5cyA9IEdBSUFfSU9fQkFTRSArIDB4MkEzODAwfSwKK307CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL2FzaWMtemV1cy5jIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljLXpldXMuYwppbmRleCAwOTVjYmUxMC4uNGEwNWJiMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljLXpldXMuYworKysgYi9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL2FzaWMtemV1cy5jCkBAIC03Nyw3ICs3Nyw3IEBACiAJLmludF9kb2NzaXNfZW4gPSB7LnBoeXMgPSBaRVVTX0FERFIoMHgyODI4RjQpfSwKIAogCS5taXBzX3BsbF9zZXR1cCA9IHsucGh5cyA9IFpFVVNfQUREUigweDFhMDAwMCl9LAotCS51c2JfZnMgPSB7LnBoeXMgPSBaRVVTX0FERFIoMHgxYTAwMTgpfSwKKwkuZnM0MzJ4NGI0X3VzYl9jdGwgPSB7LnBoeXMgPSBaRVVTX0FERFIoMHgxYTAwMTgpfSwKIAkudGVzdF9idXMgPSB7LnBoeXMgPSBaRVVTX0FERFIoMHgxYTAyMzgpfSwKIAkuY3J0X3NwYXJlID0gey5waHlzID0gWkVVU19BRERSKDB4MWEwMDkwKX0sCiAJLnVzYjJfb2hjaV9pbnRfbWFzayA9IHsucGh5cyA9IFpFVVNfQUREUigweDFlMDAwYyl9LApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljX2RldmljZXMuYyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpY19kZXZpY2VzLmMKaW5kZXggOGVlNzc4OC4uZTU2ZmE2MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljX2RldmljZXMuYworKysgYi9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL2FzaWNfZGV2aWNlcy5jCkBAIC0xLDcgKzEsNiBAQAogLyoKLSAqICAgICAgICAgICAgICAgICAgIEFTSUMgRGV2aWNlIExpc3QgSW50aWFsaXphdGlvbgogICoKLSAqIERlc2NyaXB0aW9uOiAgRGVmaW5lcyB0aGUgcGxhdGZvcm0gcmVzb3VyY2VzIGZvciB0aGUgU0Egc2V0dG9wLgorICogRGVzY3JpcHRpb246ICBEZWZpbmVzIHRoZSBwbGF0Zm9ybSByZXNvdXJjZXMgZm9yIEdhaWEtYmFzZWQgc2V0dG9wcy4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBTY2llbnRpZmljLUF0bGFudGEsIEluYy4KICAqCkBAIC0xOSwxMSArMTgsNiBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQogICoKLSAqIEF1dGhvcjogICAgICAgS2VuIEVwcGluZXR0Ci0gKiAgICAgICAgICAgICAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotICoKLSAqIERlc2NyaXB0aW9uOiAgRGVmaW5lcyB0aGUgcGxhdGZvcm0gcmVzb3VyY2VzIGZvciB0aGUgU0Egc2V0dG9wLgotICoKICAqIE5PVEU6IFRoZSBib290bG9hZGVyIGFsbG9jYXRlcyBwZXJzaXN0ZW50IG1lbW9yeSBhdCBhbiBhZGRyZXNzIHdoaWNoIGlzCiAgKiAxNiBNaUIgYmVsb3cgdGhlIGVuZCBvZiB0aGUgaGlnaGVzdCBhZGRyZXNzIGluIEtTRUcwLiBBbGwgZml4ZWQKICAqIGFkZHJlc3MgbWVtb3J5IHJlc2VydmF0aW9ucyBtdXN0IGF2b2lkIHRoaXMgcmVnaW9uLgpAQCAtMzksNyArMzMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZ2ZwLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgpAQCAtNzQsMTQgKzY3LDEzIEBACiB1bnNpZ25lZCBsb25nIGFzaWNfYmFzZTsKIEVYUE9SVF9TWU1CT0woYXNpY19iYXNlKTsJCQkvKiBFeHBvcnRlZCBmb3IgdGVzdGluZyAqLwogc3RydWN0IHJlc291cmNlICpncF9yZXNvdXJjZXM7Ci1zdGF0aWMgYm9vbCB1c2JfY29uZmlndXJlZDsKIAogLyoKICAqIERvbid0IHJlY29tbWVuZCB0byB1c2UgaXQgZGlyZWN0bHksIGl0IGlzIHVzdWFsbHkgdXNlZCBieSBrZXJuZWwgaW50ZXJuYWxseS4KICAqIFBvcnRhYmxlIGNvZGUgc2hvdWxkIGJlIHVzaW5nIGludGVyZmFjZXMgc3VjaCBhcyBpb3JlbXAsIGRtYV9tYXBfc2luZ2xlLCBldGMuCiAgKi8KLXVuc2lnbmVkIGxvbmcgcGh5c190b19idXNfb2Zmc2V0OwotRVhQT1JUX1NZTUJPTChwaHlzX3RvX2J1c19vZmZzZXQpOwordW5zaWduZWQgbG9uZyBwaHlzX3RvX2RtYV9vZmZzZXQ7CitFWFBPUlRfU1lNQk9MKHBoeXNfdG9fZG1hX29mZnNldCk7CiAKIC8qCiAgKgpAQCAtOTcsMTAxICs4OSwxOSBAQAogfTsKIAogLyoKLSAqCi0gKiBVU0IgSG9zdCBSZXNvdXJjZSBEZWZpbml0aW9uCi0gKgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZWhjaV9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5wYXJlbnQgPSAmYXNpY19yZXNvdXJjZSwKLQkJLnN0YXJ0ICA9IDAsCi0JCS5lbmQgICAgPSAweGZmLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQl7Ci0JCS5zdGFydCAgPSBpcnFfdXNiZWhjaSwKLQkJLmVuZCAgICA9IGlycV91c2JlaGNpLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyB1NjQgZWhjaV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZWhjaV9kZXZpY2UgPSB7Ci0JLm5hbWUgPSAicG93ZXJ0di1laGNpIiwKLQkuaWQgPSAwLAotCS5udW1fcmVzb3VyY2VzID0gMiwKLQkucmVzb3VyY2UgPSBlaGNpX3Jlc291cmNlcywKLQkuZGV2ID0gewotCQkuZG1hX21hc2sgPSAmZWhjaV9kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG9oY2lfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkucGFyZW50ID0gJmFzaWNfcmVzb3VyY2UsCi0JCS5zdGFydCAgPSAwLAotCQkuZW5kICAgID0gMHhmZiwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JewotCQkuc3RhcnQgID0gaXJxX3VzYm9oY2ksCi0JCS5lbmQgICAgPSBpcnFfdXNib2hjaSwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgdTY0IG9oY2lfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9oY2lfZGV2aWNlID0gewotCS5uYW1lID0gInBvd2VydHYtb2hjaSIsCi0JLmlkID0gMCwKLQkubnVtX3Jlc291cmNlcyA9IDIsCi0JLnJlc291cmNlID0gb2hjaV9yZXNvdXJjZXMsCi0JLmRldiA9IHsKLQkJLmRtYV9tYXNrID0gJm9oY2lfZG1hbWFzaywKLQkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbXSA9IHsKLQkmZWhjaV9kZXZpY2UsCi0JJm9oY2lfZGV2aWNlLAotfTsKLQotLyoKLSAqCi0gKiBQbGF0Zm9ybSBDb25maWd1cmF0aW9uIGFuZCBEZXZpY2UgSW5pdGlhbGl6YXRpb24KLSAqCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBmc191cGRhdGUoaW50IHBlLCBpbnQgbWQsIGludCBzZGl2LCBpbnQgZGlzYWJsZV9kaXZfYnlfMykKLXsKLQlpbnQgZW5fcHJnLCBieXAsIHB3ciwgbnNiLCB2YWw7Ci0JaW50IHNvdXQ7Ci0KLQlzb3V0ID0gMTsKLQllbl9wcmcgPSAxOwotCWJ5cCA9IDA7Ci0JbnNiID0gMTsKLQlwd3IgPSAxOwotCi0JdmFsID0gKChzZGl2IDw8IDI5KSB8IChtZCA8PCAyNCkgfCAocGU8PDgpIHwgKHNvdXQ8PDMpIHwgKGJ5cDw8MikgfAotCQkobnNiPDwxKSB8IChkaXNhYmxlX2Rpdl9ieV8zPDw1KSk7Ci0KLQlhc2ljX3dyaXRlKHZhbCwgdXNiX2ZzKTsKLQlhc2ljX3dyaXRlKHZhbCB8IChlbl9wcmc8PDQpLCB1c2JfZnMpOwotCWFzaWNfd3JpdGUodmFsIHwgKGVuX3ByZzw8NCkgfCBwd3IsIHVzYl9mcyk7Ci19Ci0KLS8qCiAgKiBBbGxvdyBvdmVycmlkZSBvZiBib290bG9hZGVyLXNwZWNpZmllZCBtb2RlbAorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgb24gZmFpbHVyZS4gIFRoaXMgcGFyYW1ldGVyCisgKiBhbGxvd3Mgb3ZlcnJpZGluZyBvZiB0aGUgYm9vdGxvYWRlci1zcGVjaWZpZWQgbW9kZWwuCiAgKi8KIHN0YXRpYyBjaGFyIF9faW5pdGRhdGEgY21kbGluZVtDT01NQU5EX0xJTkVfU0laRV07CiAKICNkZWZpbmUJRk9SQ0VGQU1JTFlfUEFSQU0JImZvcmNlZmFtaWx5IgogCisvKgorICogY2hlY2tfZm9yY2VmYW1pbHkgLSBjaGVjayBmb3IsIGFuZCBwYXJzZSwgZm9yY2VmYW1pbHkgY29tbWFuZCBsaW5lIHBhcmFtZXRlcgorICogQGZvcmNlZF9mYW1pbHk6CVBvaW50ZXIgdG8gdHdvLWNoYXJhY3RlciBhcnJheSBpbiB3aGljaCB0byBzdG9yZSB0aGUKKyAqCQkJdmFsdWUgb2YgdGhlIGZvcmNlZGZhbWlseSBwYXJhbWV0ZXIsIGlmIGFueS4KKyAqLwogc3RhdGljIF9faW5pdCBpbnQgY2hlY2tfZm9yY2VmYW1pbHkodW5zaWduZWQgY2hhciBmb3JjZWRfZmFtaWx5WzJdKQogewogCWNvbnN0IGNoYXIgKnA7CkBAIC0yMzEsMTQgKzE0MSwxMCBAQAogICovCiBzdGF0aWMgX19pbml0IG5vaW5saW5lIHZvaWQgcGxhdGZvcm1fc2V0X2ZhbWlseSh2b2lkKQogewotI2RlZmluZSBCT09UTERSRkFNSUxZKGJ5dGUxLCBieXRlMCkgKCgoYnl0ZTEpIDw8IDgpIHwgKGJ5dGUwKSkKLQogCXVuc2lnbmVkIGNoYXIgZm9yY2VkX2ZhbWlseVsyXTsKIAl1bnNpZ25lZCBzaG9ydCBib290bGRyX2ZhbWlseTsKIAotCWNoZWNrX2ZvcmNlZmFtaWx5KGZvcmNlZF9mYW1pbHkpOwotCi0JaWYgKGZvcmNlZF9mYW1pbHlbMF0gIT0gJ1wwJyAmJiBmb3JjZWRfZmFtaWx5WzFdICE9ICdcMCcpCisJaWYgKGNoZWNrX2ZvcmNlZmFtaWx5KGZvcmNlZF9mYW1pbHkpID09IDApCiAJCWJvb3RsZHJfZmFtaWx5ID0gQk9PVExEUkZBTUlMWShmb3JjZWRfZmFtaWx5WzBdLAogCQkJZm9yY2VkX2ZhbWlseVsxXSk7CiAJZWxzZSB7CkBAIC0yODksNiArMTk1LDkgQEAKIAljYXNlIEJPT1RMRFJGQU1JTFkoJ0YnLCAnMScpOgogCQlwbGF0Zm9ybV9mYW1pbHkgPSBGQU1JTFlfMTUwMFZaRjsKIAkJYnJlYWs7CisJY2FzZSBCT09UTERSRkFNSUxZKCc4JywgJzcnKToKKwkJcGxhdGZvcm1fZmFtaWx5ID0gRkFNSUxZXzg3MDA7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXBsYXRmb3JtX2ZhbWlseSA9IC0xOwogCX0KQEAgLTMwMSwyNCArMjEwLDkgQEAKIEVYUE9SVF9TWU1CT0wocGxhdGZvcm1fZ2V0X2ZhbWlseSk7CiAKIC8qCi0gKiBcYnJpZWYgdXNiX2V5ZV9jb25maWd1cmUoKSBmb3Igb3B0aW1pemluZyB0aGUgVVNCIGV5ZSBvbiBDYWxsaW9wZS4KLSAqCi0gKiBccGFyYW0gICAgIHVuc2lnbmVkIGludCB2YWx1ZSBzYXZlZCB0byB0aGUgcmVnaXN0ZXIuCi0gKgotICogXHJldHVybiAgICBub25lCi0gKgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgdXNiX2V5ZV9jb25maWd1cmUodW5zaWduZWQgaW50IHZhbHVlKQotewotCWFzaWNfd3JpdGUoYXNpY19yZWFkKGNydF9zcGFyZSkgfCB2YWx1ZSwgY3J0X3NwYXJlKTsKLX0KLQotLyoKICAqIHBsYXRmb3JtX2dldF9hc2ljIC0gZGV0ZXJtaW5lIHRoZSBBU0lDIHR5cGUuCiAgKgotICogXHBhcmFtICAgICBub25lCi0gKgotICogXHJldHVybiAgICBBU0lDIHR5cGU7IEFTSUNfVU5LTk9XTiBpZiBub25lCisgKiBSZXR1cm5zIHRoZSBBU0lDIHR5cGUsIG9yIEFTSUNfVU5LTk9XTiBpZiB1bmtub3duCiAgKgogICovCiBlbnVtIGFzaWNfdHlwZSBwbGF0Zm9ybV9nZXRfYXNpYyh2b2lkKQpAQCAtMzI4LDkzICsyMjIsMTAgQEAKIEVYUE9SVF9TWU1CT0wocGxhdGZvcm1fZ2V0X2FzaWMpOwogCiAvKgotICogcGxhdGZvcm1fY29uZmlndXJlX3VzYiAtIHVzYiBjb25maWd1cmF0aW9uIGJhc2VkIG9uIHBsYXRmb3JtIHR5cGUuCi0gKiBAYmNtMV91c2IyX2N0bDoJdmFsdWUgZm9yIHRoZSBCQ00xX1VTQjJfQ1RMIHJlZ2lzdGVyLCB3aGljaCBpcwotICoJCQlxdWlya3kKKyAqIHNldF9yZWdpc3Rlcl9tYXAgLSBzZXQgQVNJQyByZWdpc3RlciBjb25maWd1cmF0aW9uCisgKiBAcGh5c19iYXNlOglQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBiYXNlIG9mIHRoZSBBU0lDIHJlZ2lzdGVycworICogQG1hcDoJRGVzY3JpcHRpb24gb2Yga2V5IEFTSUMgcmVnaXN0ZXJzCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBwbGF0Zm9ybV9jb25maWd1cmVfdXNiKHZvaWQpCi17Ci0JdTMyIGJjbTFfdXNiMl9jdGw7Ci0KLQlpZiAodXNiX2NvbmZpZ3VyZWQpCi0JCXJldHVybjsKLQotCXN3aXRjaCAoYXNpYykgewotCWNhc2UgQVNJQ19aRVVTOgotCWNhc2UgQVNJQ19DUk9OVVM6Ci0JY2FzZSBBU0lDX0NST05VU0xJVEU6Ci0JCWZzX3VwZGF0ZSgweDAwMDAsIDB4MTEsIDB4MDIsIDApOwotCQliY20xX3VzYjJfY3RsID0gMHg4MDM7Ci0JCWJyZWFrOwotCi0JY2FzZSBBU0lDX0NBTExJT1BFOgotCQlmc191cGRhdGUoMHgwMDAwLCAweDExLCAweDAyLCAxKTsKLQotCQlzd2l0Y2ggKHBsYXRmb3JtX2ZhbWlseSkgewotCQljYXNlIEZBTUlMWV8xNTAwVlpFOgotCQkJYnJlYWs7Ci0KLQkJY2FzZSBGQU1JTFlfMTUwMFZaRjoKLQkJCXVzYl9leWVfY29uZmlndXJlKDB4MDAzYzAwMDApOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXVzYl9leWVfY29uZmlndXJlKDB4MDAzMDAwMDApOwotCQkJYnJlYWs7Ci0JCX0KLQotCQliY20xX3VzYjJfY3RsID0gMHg4MDM7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcHJfZXJyKCJVbmtub3duIEFTSUMgdHlwZTogJWRcbiIsIGFzaWMpOwotCQlicmVhazsKLQl9Ci0KLQkvKiB0dXJuIG9uIFVTQiBwb3dlciAqLwotCWFzaWNfd3JpdGUoMCwgdXNiMl9zdHJhcCk7Ci0JLyogRW5hYmxlIGFsbCBPSENJIGludGVycnVwdHMgKi8KLQlhc2ljX3dyaXRlKGJjbTFfdXNiMl9jdGwsIHVzYjJfY29udHJvbCk7Ci0JLyogVVNCMl9TVEJVU19PQkMgc3RvcmUzMi9sb2FkMzIgKi8KLQlhc2ljX3dyaXRlKDMsIHVzYjJfc3RidXNfb2JjKTsKLQkvKiBVU0IyX1NUQlVTX01FU1NfU0laRSAyIHBhY2tldHMgKi8KLQlhc2ljX3dyaXRlKDEsIHVzYjJfc3RidXNfbWVzc19zaXplKTsKLQkvKiBVU0IyX1NUQlVTX0NIVU5LX1NJWkUgMiBwYWNrZXRzICovCi0JYXNpY193cml0ZSgxLCB1c2IyX3N0YnVzX2NodW5rX3NpemUpOwotCi0JdXNiX2NvbmZpZ3VyZWQgPSB0cnVlOwotfQotCi0vKgotICogU2V0IHVwIHRoZSBVU0IgRUhDSSBpbnRlcmZhY2UKLSAqLwotdm9pZCBwbGF0Zm9ybV9jb25maWd1cmVfdXNiX2VoY2koKQotewotCXBsYXRmb3JtX2NvbmZpZ3VyZV91c2IoKTsKLX0KLQotLyoKLSAqIFNldCB1cCB0aGUgVVNCIE9IQ0kgaW50ZXJmYWNlCi0gKi8KLXZvaWQgcGxhdGZvcm1fY29uZmlndXJlX3VzYl9vaGNpKCkKLXsKLQlwbGF0Zm9ybV9jb25maWd1cmVfdXNiKCk7Ci19Ci0KLS8qCi0gKiBTaHV0IHRoZSBVU0IgRUhDSSBpbnRlcmZhY2UgZG93bi0tY3VycmVudGx5IGEgTk9QCi0gKi8KLXZvaWQgcGxhdGZvcm1fdW5jb25maWd1cmVfdXNiX2VoY2koKQotewotfQotCi0vKgotICogU2h1dCB0aGUgVVNCIE9IQ0kgaW50ZXJmYWNlIGRvd24tLWN1cnJlbnRseSBhIE5PUAotICovCi12b2lkIHBsYXRmb3JtX3VuY29uZmlndXJlX3VzYl9vaGNpKCkKLXsKLX0KLQogc3RhdGljIHZvaWQgX19pbml0IHNldF9yZWdpc3Rlcl9tYXAodW5zaWduZWQgbG9uZyBwaHlzX2Jhc2UsCiAJY29uc3Qgc3RydWN0IHJlZ2lzdGVyX21hcCAqbWFwKQogewpAQCAtNDcyLDYgKzI4Myw5IEBACiAJCSAqIGl0Ki8KIAkJcGxhdGZvcm1fZmVhdHVyZXMgPSBGRlNfQ0FQQUJMRSB8IERJU1BMQVlfQ0FQQUJMRTsKIAorCQkvKiBDcm9udXMgYW5kIENyb251cyBMaXRlIGhhdmUgdGhlIHNhbWUgcmVnaXN0ZXIgbWFwICovCisJCXNldF9yZWdpc3Rlcl9tYXAoQ1JPTlVTX0lPX0JBU0UsICZjcm9udXNfcmVnaXN0ZXJfbWFwKTsKKwogCQkvKiBBU0lDIHZlcnNpb24gd2lsbCBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIHJlYWwgQ3JvbnVzTGl0ZSBvcgogCQkgKiBDYXN0cmF0aShDcm9udXMpICovCiAJCWNoaXB2ZXJzaW9uICA9IGFzaWNfcmVhZChjaGlwdmVyMykgPDwgMjQ7CkBAIC00ODQsOCArMjk4LDYgQEAKIAkJZWxzZQogCQkJYXNpYyA9IEFTSUNfQ1JPTlVTTElURTsKIAotCQkvKiBDcm9udXMgYW5kIENyb251cyBMaXRlIGhhdmUgdGhlIHNhbWUgcmVnaXN0ZXIgbWFwICovCi0JCXNldF9yZWdpc3Rlcl9tYXAoQ1JPTlVTX0lPX0JBU0UsICZjcm9udXNfcmVnaXN0ZXJfbWFwKTsKIAkJZ3BfcmVzb3VyY2VzID0gbm9uX2R2cl9jcm9udXNsaXRlX3Jlc291cmNlczsKIAkJcHJfaW5mbygiUGxhdGZvcm06IDQ2MDAgLSAlcywgTk9OX0RWUl9DQVBBQkxFLCAiCiAJCQkiY2hpcHZlcnNpb249MHglMDhYXG4iLApAQCAtNTI1LDYgKzMzNywxNSBAQAogCQkJIkRWUl9DQVBBQkxFXG4iKTsKIAkJYnJlYWs7CiAKKwljYXNlIEZBTUlMWV84NzAwOgorCQlwbGF0Zm9ybV9mZWF0dXJlcyA9IEZGU19DQVBBQkxFIHwgUENJRV9DQVBBQkxFOworCQlhc2ljID0gQVNJQ19HQUlBOworCQlzZXRfcmVnaXN0ZXJfbWFwKEdBSUFfSU9fQkFTRSwgJmdhaWFfcmVnaXN0ZXJfbWFwKTsKKwkJZ3BfcmVzb3VyY2VzID0gZHZyX2dhaWFfcmVzb3VyY2VzOworCisJCXByX2luZm8oIlBsYXRmb3JtOiA4NzAwIC0gR0FJQSwgRFZSX0NBUEFCTEVcbiIpOworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCXByX2NyaXQoIlBsYXRmb3JtOiAgVU5LTk9XTiBQTEFURk9STVxuIik7CiAJCWJyZWFrOwpAQCAtNTMyLDEwICszNTMsMTAgQEAKIAogCXN3aXRjaCAoYXNpYykgewogCWNhc2UgQVNJQ19aRVVTOgotCQlwaHlzX3RvX2J1c19vZmZzZXQgPSAweDMwMDAwMDAwOworCQlwaHlzX3RvX2RtYV9vZmZzZXQgPSAweDMwMDAwMDAwOwogCQlicmVhazsKIAljYXNlIEFTSUNfQ0FMTElPUEU6Ci0JCXBoeXNfdG9fYnVzX29mZnNldCA9IDB4MTAwMDAwMDA7CisJCXBoeXNfdG9fZG1hX29mZnNldCA9IDB4MTAwMDAwMDA7CiAJCWJyZWFrOwogCWNhc2UgQVNJQ19DUk9OVVNMSVRFOgogCQkvKiBGYWxsIHRocm91Z2ggKi8KQEAgLTU0NSw0MiArMzY2LDE2IEBACiAJCSAqIDB4MlhYWFhYWFguIElmIDB4MTAwMDAwMDAgYWxpYXNlcyBpbnRvIDB4NjAwMDAwMDAtCiAJCSAqIDB4NlhYWFhYWFgsIHRoZSBvZmZzZXQgc2hvdWxkIGJlIDB4NTAwMDAwMDAsIG5vdCAweDEwMDAwMDAwLgogCQkgKi8KLQkJcGh5c190b19idXNfb2Zmc2V0ID0gMHgxMDAwMDAwMDsKKwkJcGh5c190b19kbWFfb2Zmc2V0ID0gMHgxMDAwMDAwMDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcGh5c190b19idXNfb2Zmc2V0ID0gMHgwMDAwMDAwMDsKKwkJcGh5c190b19kbWFfb2Zmc2V0ID0gMHgwMDAwMDAwMDsKIAkJYnJlYWs7CiAJfQogfQogCi0vKioKLSAqIHBsYXRmb3JtX2RldmljZXNfaW5pdCAtIHNldHMgdXAgVVNCIGRldmljZSByZXNvdXJzZS4KLSAqLwotc3RhdGljIGludCBfX2luaXQgcGxhdGZvcm1fZGV2aWNlc19pbml0KHZvaWQpCi17Ci0JcHJfbm90aWNlKCIlczogLS0tLS0gSW5pdGlhbGl6aW5nIFVTQiByZXNvdXJjZXMgLS0tLS1cbiIsIF9fZnVuY19fKTsKLQotCWFzaWNfcmVzb3VyY2Uuc3RhcnQgPSBhc2ljX3BoeV9iYXNlOwotCWFzaWNfcmVzb3VyY2UuZW5kICs9IGFzaWNfcmVzb3VyY2Uuc3RhcnQ7Ci0KLQllaGNpX3Jlc291cmNlc1swXS5zdGFydCA9IGFzaWNfcmVnX3BoeXNfYWRkcihlaGNpX2hjYXBiYXNlKTsKLQllaGNpX3Jlc291cmNlc1swXS5lbmQgKz0gZWhjaV9yZXNvdXJjZXNbMF0uc3RhcnQ7Ci0KLQlvaGNpX3Jlc291cmNlc1swXS5zdGFydCA9IGFzaWNfcmVnX3BoeXNfYWRkcihvaGNpX2hjX3JldmlzaW9uKTsKLQlvaGNpX3Jlc291cmNlc1swXS5lbmQgKz0gb2hjaV9yZXNvdXJjZXNbMF0uc3RhcnQ7Ci0KLQlzZXRfaW9fcG9ydF9iYXNlKDApOwotCi0JcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotYXJjaF9pbml0Y2FsbChwbGF0Zm9ybV9kZXZpY2VzX2luaXQpOwotCiAvKgotICoKLSAqIEJPT1RNRU0gQUxMT0NBVElPTgorICogUkVTT1VSQ0UgQUxMT0NBVElPTgogICoKICAqLwogLyoKQEAgLTYwMiw3ICszOTcsNyBAQAogCQlpbnQgc2l6ZSA9IGdwX3Jlc291cmNlc1tpXS5lbmQgLSBncF9yZXNvdXJjZXNbaV0uc3RhcnQgKyAxOwogCQlpZiAoKGdwX3Jlc291cmNlc1tpXS5zdGFydCAhPSAwKSAmJgogCQkJKChncF9yZXNvdXJjZXNbaV0uZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgIT0gMCkpIHsKLQkJCXJlc2VydmVfYm9vdG1lbShidXNfdG9fcGh5cyhncF9yZXNvdXJjZXNbaV0uc3RhcnQpLAorCQkJcmVzZXJ2ZV9ib290bWVtKGRtYV90b19waHlzKGdwX3Jlc291cmNlc1tpXS5zdGFydCksCiAJCQkJc2l6ZSwgMCk7CiAJCQl0b3RhbCArPSBncF9yZXNvdXJjZXNbaV0uZW5kIC0KIAkJCQlncF9yZXNvdXJjZXNbaV0uc3RhcnQgKyAxOwpAQCAtNjI2LDcgKzQyMSw3IEBACiAKIAkJCWVsc2UgewogCQkJCWdwX3Jlc291cmNlc1tpXS5zdGFydCA9Ci0JCQkJCXBoeXNfdG9fYnVzKHZpcnRfdG9fcGh5cyhtZW0pKTsKKwkJCQkJcGh5c190b19kbWEodmlydF90b19waHlzKG1lbSkpOwogCQkJCWdwX3Jlc291cmNlc1tpXS5lbmQgPQogCQkJCQlncF9yZXNvdXJjZXNbaV0uc3RhcnQgKyBzaXplIC0gMTsKIAkJCQl0b3RhbCArPSBzaXplOwpAQCAtNjkwLDcgKzQ4NSw3IEBACiAJaWYgKHJlc291cmNlICYmIHBtZW1hZGRyICYmIHBtZW1sZW4pIHsKIAkJLyogVGhlIGFkZHJlc3MgcHJvdmlkZWQgYnkgYm9vdGxvYWRlciBpcyBpbiBrc2VnMC4gQ29udmVydCB0bwogCQkgKiBhIGJ1cyBhZGRyZXNzLiAqLwotCQlyZXNvdXJjZS0+c3RhcnQgPSBwaHlzX3RvX2J1cyhwbWVtYWRkciAtIDB4ODAwMDAwMDApOworCQlyZXNvdXJjZS0+c3RhcnQgPSBwaHlzX3RvX2RtYShwbWVtYWRkciAtIDB4ODAwMDAwMDApOwogCQlyZXNvdXJjZS0+ZW5kID0gcmVzb3VyY2UtPnN0YXJ0ICsgcG1lbWxlbiAtIDE7CiAKIAkJcHJfaW5mbygicGVyc2lzdGVudCBtZW1vcnk6IHN0YXJ0PTB4JXggIGVuZD0weCV4XG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9wcmVhbGxvYy1nYWlhLmMgYi9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL3ByZWFsbG9jLWdhaWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWM4YzdhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9wcmVhbGxvYy1nYWlhLmMKQEAgLTAsMCArMSw1ODkgQEAKKy8qCisgKiBNZW1vcnkgcHJlLWFsbG9jYXRpb25zIGZvciBHYWlhIGJveGVzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5IFNjaWVudGlmaWMtQXRsYW50YSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogQXV0aG9yOiAgICAgICBEYXZpZCBWb21MZWhuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1wb3dlcnR2L2FzaWMuaD4KKworLyoKKyAqIERWUl9DQVBBQkxFIEdBSUEgUkVTT1VSQ0VTCisgKi8KK3N0cnVjdCByZXNvdXJjZSBkdnJfZ2FpYV9yZXNvdXJjZXNbXSBfX2luaXRkYXRhID0geworCS8qCisJICoKKwkgKiBWSURFTzEgLyBMWDEKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJTVDIzMWFJbWFnZSIsCS8qIERlbHRhLU11IDEgaW1hZ2UgYW5kIHJhbSAqLworCQkuc3RhcnQgID0gMHgyNDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjQxRkZGRkYsCQkvKiAyTWlCICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJTVDIzMWFNb25pdG9yIiwJLyogOEtpQiBibG9jayBTVDIzMWEgbW9uaXRvciAqLworCQkuc3RhcnQgID0gMHgyNDIwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjQyMDFGRkYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJNZWRpYU1lbW9yeTEiLAorCQkuc3RhcnQgID0gMHgyNDIwMjAwMCwKKwkJLmVuZCAgICA9IDB4MjVGRkZGRkYsIC8qfjI5LjlNaUIgKDMyTWlCIC0gKDJNaUIgKyA4S2lCKSkgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKgorCSAqIFZJREVPMiAvIExYMgorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIlNUMjMxYkltYWdlIiwJLyogRGVsdGEtTXUgMiBpbWFnZSBhbmQgcmFtICovCisJCS5zdGFydCAgPSAweDYwMDAwMDAwLAorCQkuZW5kICAgID0gMHg2MDFGRkZGRiwJCS8qIDJNaUIgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiU1QyMzFiTW9uaXRvciIsCS8qIDhLaUIgYmxvY2sgU1QyMzFiIG1vbml0b3IgKi8KKwkJLnN0YXJ0ICA9IDB4NjAyMDAwMDAsCisJCS5lbmQgICAgPSAweDYwMjAxRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJNZWRpYU1lbW9yeTIiLAorCQkuc3RhcnQgID0gMHg2MDIwMjAwMCwKKwkJLmVuZCAgICA9IDB4NjFGRkZGRkYsIC8qfjI5LjlNaUIgKDMyTWlCIC0gKDJNaUIgKyA4S2lCKSkgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwkvKgorCSAqCisJICogU3lzYXVkaW8gRHJpdmVyCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEU1BfSW1hZ2VfQnVmZiAtIERTUCBjb2RlIGFuZCBkYXRhIGltYWdlcyAoMU1CKQorCSAqICBBRFNDX0NQVV9QQ01fQnVmZiAtIEFEU0MgQ1BVIFBDTSBidWZmZXIgKDQwS0IpCisJICogIEFEU0NfQVVYX0J1ZmYgLSBBRFNDIEFVWCBidWZmZXIgKDE2S0IpCisJICogIEFEU0NfTWFpbl9CdWZmIC0gQURTQyBNYWluIGJ1ZmZlciAoMTZLQikKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEU1BfSW1hZ2VfQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDBGRkZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfQ1BVX1BDTV9CdWZmIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDA5RkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiQURTQ19BVVhfQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwM0ZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfTWFpbl9CdWZmIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDAzRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqCisJICogU1RBVkVNIGRyaXZlci9TVEFQSQorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgVGhpcyBtZW1vcnkgYXJlYSBpcyB1c2VkIGZvciBhbGxvY2F0aW5nIGJ1ZmZlcnMgZm9yIFZpZGVvIGRlY29kaW5nCisJICogIHB1cnBvc2VzLiAgQWxsb2NhdGlvbi9EZS1hbGxvY2F0aW9uIHdpdGhpbiB0aGlzIGJ1ZmZlciBpcyBtYW5hZ2VkCisJICogIGJ5IHRoZSBTVEFWTUVNIGRyaXZlciBvZiB0aGUgU1RBUEkuICBUaGV5IGNvdWxkIGJlIERlY2ltYXRlZAorCSAqICBQaWN0dXJlIEJ1ZmZlcnMsIEludGVybWVkaWF0ZSBCdWZmZXJzLCBhcyBkZWVtZWQgbmVjZXNzYXJ5IGZvcgorCSAqICB2aWRlbyBkZWNvZGluZyBwdXJwb3NlcywgZm9yIGFueSB2aWRlbyBkZWNvZGVycyBvbiBaZXVzLgorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkFWTUVNUGFydGl0aW9uMCIsCisJCS5zdGFydCAgPSAweDYzNTgwMDAwLAorCQkuZW5kICAgID0gMHg2NDE4MDAwMCAtIDEsICAvKiAxMiBNQiB0b3RhbCAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICoKKwkgKiBET0NTSVMgU3Vic3lzdGVtCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEb2NzaXMgLQorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkRvY3NpcyIsCisJCS5zdGFydCAgPSAweDYyMDAwMDAwLAorCQkuZW5kICAgID0gMHg2MjcwMDAwMCAtIDEsCS8qIDcgTUIgdG90YWwgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwkvKgorCSAqCisJICogR0hXIEhBTCBEcml2ZXIKKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIEdyYXBoaWNzSGVhcCAtIFBvd2VyVFYgR3JhcGhpY3MgSGVhcAorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkdyYXBoaWNzSGVhcCIsCisJCS5zdGFydCAgPSAweDYyNzAwMDAwLAorCQkuZW5kICAgID0gMHg2MzUwMDAwMCAtIDEsCS8qIDE0IE1CIHRvdGFsICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKgorCSAqIG11bHRpIGNvbSBidWZmZXIgYXJlYQorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgRG9jc2lzIC0KKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJNdWx0aWNvbVNITSIsCisJCS5zdGFydCAgPSAweDI2MDAwMDAwLAorCQkuZW5kICAgID0gMHgyNjAyMDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBETUEgUmluZyBidWZmZXIKKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIERvY3NpcyAtCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiQk1NX0J1ZmZlciIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDI4MDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBEaXNwbGF5IGJpbnMgYnVmZmVyIGZvciB1bml0MAorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgRGlzcGxheSBCaW5zIGZvciB1bml0MAorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkRpc3BsYXlCaW5zMCIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwMEZGRiwJCS8qIDQgS0IgdG90YWwgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKgorCSAqIERpc3BsYXkgYmlucyBidWZmZXIKKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIERpc3BsYXkgQmlucyBmb3IgdW5pdDEKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEaXNwbGF5QmluczEiLAorCQkuc3RhcnQgID0gMHg2NEFENDAwMCwKKwkJLmVuZCAgICA9IDB4NjRBRDUwMDAgLSAxLCAgLyogNCBLQiB0b3RhbCAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICoKKwkgKiBJVEZTCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEb2NzaXMgLQorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIklURlMiLAorCQkuc3RhcnQgID0gMHg2NDE4MDAwMCwKKwkJLyogODE1LDEwNCBieXRlcyBlYWNoIGZvciAyIElURlMgcGFydGl0aW9ucy4gKi8KKwkJLmVuZCAgICA9IDB4NjQzMERGRkYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKgorCSAqIEFWRlMKKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIERvY3NpcyAtCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiQXZmc0RtYU1lbSIsCisJCS5zdGFydCAgPSAweDY0MzBFMDAwLAorCQkvKiAoOTQ1SyAqIDgpID0gKDEyOEsgKjMpIDUgcGxheWJhY2tzIC8gMyBzZXJ2ZXIgKi8KKwkJLmVuZCAgICA9IDB4NjRBRDAwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJBdmZzRmlsZVN5cyIsCisJCS5zdGFydCAgPSAweDY0QUQwMDAwLAorCQkuZW5kICAgID0gMHg2NEFEMTAwMCAtIDEsICAvKiA0SyAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICoKKwkgKiBTbWFydGNhcmQKKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIFJlYWQgYW5kIHdyaXRlIGJ1ZmZlcnMgZm9yIEludGVybmFsL0V4dGVybmFsIGNhcmRzCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiU21hcnRDYXJkSW5mbyIsCisJCS5zdGFydCAgPSAweDY0QUQxMDAwLAorCQkuZW5kICAgID0gMHg2NEFEMzgwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKgorCSAqIEtBVk5FVAorCSAqICAgIE5QIFJlc2V0IFZlY3RvciAtIG11c3QgYmUgb2YgdGhlIGZvcm0geHhDeHh4eHgKKwkgKgkgICBOUCBJbWFnZSAtIG11c3QgYmUgdmlkZW8gYmFuayAxCisJICoJICAgTlAgSVBDIC0gbXVzdCBiZSB2aWRlbyBiYW5rIDIKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiTlBfUmVzZXRfVmVjdG9yIiwKKwkJLnN0YXJ0ICA9IDB4MjdjMDAwMDAsCisJCS5lbmQgICAgPSAweDI3YzAxMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIk5QX0ltYWdlIiwKKwkJLnN0YXJ0ICA9IDB4MjcwMjAwMDAsCisJCS5lbmQgICAgPSAweDI3MDYwMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIk5QX0lQQyIsCisJCS5zdGFydCAgPSAweDYzNTAwMDAwLAorCQkuZW5kICAgID0gMHg2MzU4MDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKiBBZGQgb3RoZXIgcmVzb3VyY2VzIGhlcmUKKwkgKi8KKwl7IH0sCit9OworCisvKgorICogTk9OX0RWUl9DQVBBQkxFIEdBSUEgUkVTT1VSQ0VTCisgKi8KK3N0cnVjdCByZXNvdXJjZSBub25fZHZyX2dhaWFfcmVzb3VyY2VzW10gX19pbml0ZGF0YSA9IHsKKwkvKgorCSAqCisJICogVklERU8xIC8gTFgxCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiU1QyMzFhSW1hZ2UiLAkvKiBEZWx0YS1NdSAxIGltYWdlIGFuZCByYW0gKi8KKwkJLnN0YXJ0ICA9IDB4MjQwMDAwMDAsCisJCS5lbmQgICAgPSAweDI0MUZGRkZGLAkJLyogMk1pQiAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiU1QyMzFhTW9uaXRvciIsCS8qIDhLaUIgYmxvY2sgU1QyMzFhIG1vbml0b3IgKi8KKwkJLnN0YXJ0ICA9IDB4MjQyMDAwMDAsCisJCS5lbmQgICAgPSAweDI0MjAxRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiTWVkaWFNZW1vcnkxIiwKKwkJLnN0YXJ0ICA9IDB4MjQyMDIwMDAsCisJCS5lbmQgICAgPSAweDI1RkZGRkZGLCAvKn4yOS45TWlCICgzMk1pQiAtICgyTWlCICsgOEtpQikpICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBWSURFTzIgLyBMWDIKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJTVDIzMWJJbWFnZSIsCS8qIERlbHRhLU11IDIgaW1hZ2UgYW5kIHJhbSAqLworCQkuc3RhcnQgID0gMHg2MDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4NjAxRkZGRkYsCQkvKiAyTWlCICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJeworCQkubmFtZSAgID0gIlNUMjMxYk1vbml0b3IiLAkvKiA4S2lCIGJsb2NrIFNUMjMxYiBtb25pdG9yICovCisJCS5zdGFydCAgPSAweDYwMjAwMDAwLAorCQkuZW5kICAgID0gMHg2MDIwMUZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiTWVkaWFNZW1vcnkyIiwKKwkJLnN0YXJ0ICA9IDB4NjAyMDIwMDAsCisJCS5lbmQgICAgPSAweDYxRkZGRkZGLCAvKn4yOS45TWlCICgzMk1pQiAtICgyTWlCICsgOEtpQikpICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKgorCSAqIFN5c2F1ZGlvIERyaXZlcgorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgRFNQX0ltYWdlX0J1ZmYgLSBEU1AgY29kZSBhbmQgZGF0YSBpbWFnZXMgKDFNQikKKwkgKiAgQURTQ19DUFVfUENNX0J1ZmYgLSBBRFNDIENQVSBQQ00gYnVmZmVyICg0MEtCKQorCSAqICBBRFNDX0FVWF9CdWZmIC0gQURTQyBBVVggYnVmZmVyICgxNktCKQorCSAqICBBRFNDX01haW5fQnVmZiAtIEFEU0MgTWFpbiBidWZmZXIgKDE2S0IpCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRFNQX0ltYWdlX0J1ZmYiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwRkZGRkYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJBRFNDX0NQVV9QQ01fQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwOUZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfQVVYX0J1ZmYiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwMDNGRkYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJBRFNDX01haW5fQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwM0ZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKgorCSAqIFNUQVZFTSBkcml2ZXIvU1RBUEkKKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIFRoaXMgbWVtb3J5IGFyZWEgaXMgdXNlZCBmb3IgYWxsb2NhdGluZyBidWZmZXJzIGZvciBWaWRlbyBkZWNvZGluZworCSAqICBwdXJwb3Nlcy4gIEFsbG9jYXRpb24vRGUtYWxsb2NhdGlvbiB3aXRoaW4gdGhpcyBidWZmZXIgaXMgbWFuYWdlZAorCSAqICBieSB0aGUgU1RBVk1FTSBkcml2ZXIgb2YgdGhlIFNUQVBJLiAgVGhleSBjb3VsZCBiZSBEZWNpbWF0ZWQKKwkgKiAgUGljdHVyZSBCdWZmZXJzLCBJbnRlcm1lZGlhdGUgQnVmZmVycywgYXMgZGVlbWVkIG5lY2Vzc2FyeSBmb3IKKwkgKiAgdmlkZW8gZGVjb2RpbmcgcHVycG9zZXMsIGZvciBhbnkgdmlkZW8gZGVjb2RlcnMgb24gWmV1cy4KKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJBVk1FTVBhcnRpdGlvbjAiLAorCQkuc3RhcnQgID0gMHg2MzU4MDAwMCwKKwkJLmVuZCAgICA9IDB4NjQxODAwMDAgLSAxLCAgLyogMTIgTUIgdG90YWwgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwkvKgorCSAqCisJICogRE9DU0lTIFN1YnN5c3RlbQorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgRG9jc2lzIC0KKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEb2NzaXMiLAorCQkuc3RhcnQgID0gMHg2MjAwMDAwMCwKKwkJLmVuZCAgICA9IDB4NjI3MDAwMDAgLSAxLAkvKiA3IE1CIHRvdGFsICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKgorCSAqIEdIVyBIQUwgRHJpdmVyCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBHcmFwaGljc0hlYXAgLSBQb3dlclRWIEdyYXBoaWNzIEhlYXAKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJHcmFwaGljc0hlYXAiLAorCQkuc3RhcnQgID0gMHg2MjcwMDAwMCwKKwkJLmVuZCAgICA9IDB4NjM1MDAwMDAgLSAxLAkvKiAxNCBNQiB0b3RhbCAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICoKKwkgKiBtdWx0aSBjb20gYnVmZmVyIGFyZWEKKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIERvY3NpcyAtCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiTXVsdGljb21TSE0iLAorCQkuc3RhcnQgID0gMHgyNjAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjYwMjAwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqCisJICogRE1BIFJpbmcgYnVmZmVyCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEb2NzaXMgLQorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkJNTV9CdWZmZXIiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwQUEwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqCisJICogRGlzcGxheSBiaW5zIGJ1ZmZlciBmb3IgdW5pdDAKKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIERpc3BsYXkgQmlucyBmb3IgdW5pdDAKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEaXNwbGF5QmluczAiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwMDBGRkYsCQkvKiA0IEtCIHRvdGFsICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBEaXNwbGF5IGJpbnMgYnVmZmVyCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEaXNwbGF5IEJpbnMgZm9yIHVuaXQxCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRGlzcGxheUJpbnMxIiwKKwkJLnN0YXJ0ICA9IDB4NjRBRDQwMDAsCisJCS5lbmQgICAgPSAweDY0QUQ1MDAwIC0gMSwgIC8qIDQgS0IgdG90YWwgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwkvKgorCSAqCisJICogQVZGUzogcGxheWVyIEhBTCBtZW1vcnkKKwkgKgorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkF2ZnNEbWFNZW0iLAorCQkuc3RhcnQgID0gMHg2NDMwRTAwMCwKKwkJLmVuZCAgICA9IDB4NjQ1RDJDMDAgLSAxLCAgLyogOTQ1SyAqIDMgZm9yIHBsYXliYWNrICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKgorCSAqIFBNRU0KKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIFBlcnNpc3RlbnQgbWVtb3J5IGZvciBkaWFnbm9zdGljcy4KKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEaWFnUGVyc2lzdGVudE1lbW9yeSIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgxMDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBTbWFydGNhcmQKKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIFJlYWQgYW5kIHdyaXRlIGJ1ZmZlcnMgZm9yIEludGVybmFsL0V4dGVybmFsIGNhcmRzCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiU21hcnRDYXJkSW5mbyIsCisJCS5zdGFydCAgPSAweDY0QUQxMDAwLAorCQkuZW5kICAgID0gMHg2NEFEMzgwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKgorCSAqIEtBVk5FVAorCSAqICAgIE5QIFJlc2V0IFZlY3RvciAtIG11c3QgYmUgb2YgdGhlIGZvcm0geHhDeHh4eHgKKwkgKgkgICBOUCBJbWFnZSAtIG11c3QgYmUgdmlkZW8gYmFuayAxCisJICoJICAgTlAgSVBDIC0gbXVzdCBiZSB2aWRlbyBiYW5rIDIKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiTlBfUmVzZXRfVmVjdG9yIiwKKwkJLnN0YXJ0ICA9IDB4MjdjMDAwMDAsCisJCS5lbmQgICAgPSAweDI3YzAxMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIk5QX0ltYWdlIiwKKwkJLnN0YXJ0ICA9IDB4MjcwMjAwMDAsCisJCS5lbmQgICAgPSAweDI3MDYwMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIk5QX0lQQyIsCisJCS5zdGFydCAgPSAweDYzNTAwMDAwLAorCQkuZW5kICAgID0gMHg2MzU4MDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJeyB9LAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L2luaXQuYyBiL2FyY2gvbWlwcy9wb3dlcnR2L2luaXQuYwppbmRleCAwYWZlMjI3Li44MzU1MjI4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG93ZXJ0di9pbml0LmMKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvaW5pdC5jCkBAIC0xMTcsOCArMTE3LDEwIEBACiAJYm9hcmRfbm1pX2hhbmRsZXJfc2V0dXAgPSBtaXBzX25taV9zZXR1cDsKIAlib2FyZF9lanRhZ19oYW5kbGVyX3NldHVwID0gbWlwc19lanRhZ19zZXR1cDsKIAotCWlmIChwcm9tX2FyZ2MgPT0gMSkKKwlpZiAocHJvbV9hcmdjID09IDEpIHsKKwkJc3RybGNhdChhcmNzX2NtZGxpbmUsICIgIiwgQ09NTUFORF9MSU5FX1NJWkUpOwogCQlzdHJsY2F0KGFyY3NfY21kbGluZSwgcHJvbV9hcmd2LCBDT01NQU5EX0xJTkVfU0laRSk7CisJfQogCiAJY29uZmlndXJlX3BsYXRmb3JtKCk7CiAJcHJvbV9tZW1pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXJ0di9pb3JlbWFwLmMgYi9hcmNoL21pcHMvcG93ZXJ0di9pb3JlbWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc3YzZmNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L2lvcmVtYXAuYwpAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqCQkJaW9yZW1hcC5jCisgKgorICogU3VwcG9ydCBmb3IgbWFwcGluZyBiZXR3ZWVuIGRtYV9hZGRyX3QgdmFsdWVzIGEgcGh5c19hZGRyX3QgdmFsdWVzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5IFNjaWVudGlmaWMtQXRsYW50YSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogQXV0aG9yOiAgICAgICBEYXZpZCBWb21MZWhuIDxkdm9tbGVobkBjaXNjby5jb20+CisgKgorICogRGVzY3JpcHRpb246ICBEZWZpbmVzIHRoZSBwbGF0Zm9ybSByZXNvdXJjZXMgZm9yIHRoZSBTQSBzZXR0b3AuCisgKgorICogTk9URTogVGhlIGJvb3Rsb2FkZXIgYWxsb2NhdGVzIHBlcnNpc3RlbnQgbWVtb3J5IGF0IGFuIGFkZHJlc3Mgd2hpY2ggaXMKKyAqIDE2IE1pQiBiZWxvdyB0aGUgZW5kIG9mIHRoZSBoaWdoZXN0IGFkZHJlc3MgaW4gS1NFRzAuIEFsbCBmaXhlZAorICogYWRkcmVzcyBtZW1vcnkgcmVzZXJ2YXRpb25zIG11c3QgYXZvaWQgdGhpcyByZWdpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtcG93ZXJ0di9pb3JlbWFwLmg+CisKKy8qCisgKiBEZWZpbmUgdGhlIHNpemVzIG9mIGFuZCBtYXNrcyBmb3IgZ3JhaW5zIGluIHBoeXNpY2FsIGFuZCBETUEgc3BhY2UuIFRoZQorICogdmFsdWVzIGFyZSB0aGUgc2FtZSBidXQgdGhlIHR5cGVzIGFyZSBub3QuCisgKi8KKyNkZWZpbmUgSU9SX1BIWVNfR1JBSU4JCSgocGh5c19hZGRyX3QpIDEgPDwgSU9SX0xTQklUUykKKyNkZWZpbmUgSU9SX1BIWVNfR1JBSU5fTUFTSwkoSU9SX1BIWVNfR1JBSU4gLSAxKQorCisjZGVmaW5lIElPUl9ETUFfR1JBSU4JCSgoZG1hX2FkZHJfdCkgMSA8PCBJT1JfTFNCSVRTKQorI2RlZmluZSBJT1JfRE1BX0dSQUlOX01BU0sJKElPUl9ETUFfR1JBSU4gLSAxKQorCisvKgorICogVmFsdWVzIHRoYXQsIHdoZW4gYWNjZXNzZWQgYnkgYW4gaW5kZXggZGVyaXZlZCBmcm9tIGEgcGh5c19hZGRyX3QgYW5kCisgKiBhZGRlZCB0byBwaHlzX2FkZHJfdCB2YWx1ZSwgeWllbGQgYSBETUEgYWRkcmVzcworICovCitzdHJ1Y3QgaW9yX3BoeXNfdG9fZG1hIF9pb3JfcGh5c190b19kbWFbSU9SX05VTV9QSFlTX1RPX0RNQV07CitFWFBPUlRfU1lNQk9MKF9pb3JfcGh5c190b19kbWEpOworCisvKgorICogVmFsdWVzIHRoYXQsIHdoZW4gYWNjZXNzZWQgYnkgYW4gaW5kZXggZGVyaXZlZCBmcm9tIGEgZG1hX2FkZHJfdCBhbmQKKyAqIGFkZGVkIHRvIHRoYXQgZG1hX2FkZHJfdCB2YWx1ZSwgeWllbGQgYSBwaHlzaWNhbCBhZGRyZXNzCisgKi8KK3N0cnVjdCBpb3JfZG1hX3RvX3BoeXMgX2lvcl9kbWFfdG9fcGh5c1tJT1JfTlVNX0RNQV9UT19QSFlTXTsKK0VYUE9SVF9TWU1CT0woX2lvcl9kbWFfdG9fcGh5cyk7CisKKy8qKgorICogc2V0dXBfZG1hX3RvX3BoeXMgLSBzZXQgdXAgY29udmVyc2lvbiBmcm9tIERNQSB0byBwaHlzaWNhbCBhZGRyZXNzZXMKKyAqIEBkbWFfaWR4OglUb3AgSU9SX0xTQklUUyBiaXRzIG9mIHRoZSBETUEgYWRkcmVzcywgaS5lLiBhbiBpbmRleAorICoJCWludG8gdGhlIGFycmF5IF9kbWFfdG9fcGh5cy4KKyAqIEBkZWx0YToJVmFsdWUgdGhhdCwgd2hlbiBhZGRlZCB0byB0aGUgRE1BIGFkZHJlc3MsIHdpbGwgeWllbGQgdGhlCisgKgkJcGh5c2ljYWwgYWRkcmVzcworICogQHM6CQlOdW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHNlY3Rpb24gb2YgbWVtb3J5IHdpdGggdGhlIGdpdmVuIGRlbHRhCisgKgkJYmV0d2VlbiBETUEgYW5kIHBoeXNpY2FsIGFkZHJlc3Nlcy4KKyAqLworc3RhdGljIHZvaWQgc2V0dXBfZG1hX3RvX3BoeXMoZG1hX2FkZHJfdCBkbWEsIHBoeXNfYWRkcl90IGRlbHRhLCBkbWFfYWRkcl90IHMpCit7CisJaW50IGRtYV9pZHgsIGZpcnN0X2lkeCwgbGFzdF9pZHg7CisJcGh5c19hZGRyX3QgZmlyc3QsIGxhc3Q7CisKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgZmlyc3QgYW5kIGxhc3QgaW5kaWNlcywgcm91bmRpbmcgdGhlIGZpcnN0IHVwIGFuZAorCSAqIHRoZSBzZWNvbmQgZG93bi4KKwkgKi8KKwlmaXJzdCA9IGRtYSAmIH5JT1JfRE1BX0dSQUlOX01BU0s7CisJbGFzdCA9IChkbWEgKyBzIC0gMSkgJiB+SU9SX0RNQV9HUkFJTl9NQVNLOworCWZpcnN0X2lkeCA9IGZpcnN0ID4+IElPUl9MU0JJVFM7CQkvKiBDb252ZXJ0IHRvIGluZGljZXMgKi8KKwlsYXN0X2lkeCA9IGxhc3QgPj4gSU9SX0xTQklUUzsKKworCWZvciAoZG1hX2lkeCA9IGZpcnN0X2lkeDsgZG1hX2lkeCA8PSBsYXN0X2lkeDsgZG1hX2lkeCsrKQorCQlfaW9yX2RtYV90b19waHlzW2RtYV9pZHhdLm9mZnNldCA9IGRlbHRhID4+IElPUl9ETUFfU0hJRlQ7Cit9CisKKy8qKgorICogc2V0dXBfcGh5c190b19kbWEgLSBzZXQgdXAgY29udmVyc2lvbiBmcm9tIERNQSB0byBwaHlzaWNhbCBhZGRyZXNzZXMKKyAqIEBwaHlzX2lkeDoJVG9wIElPUl9MU0JJVFMgYml0cyBvZiB0aGUgRE1BIGFkZHJlc3MsIGkuZS4gYW4gaW5kZXgKKyAqCQlpbnRvIHRoZSBhcnJheSBfcGh5c190b19kbWEuCisgKiBAZGVsdGE6CVZhbHVlIHRoYXQsIHdoZW4gYWRkZWQgdG8gdGhlIERNQSBhZGRyZXNzLCB3aWxsIHlpZWxkIHRoZQorICoJCXBoeXNpY2FsIGFkZHJlc3MKKyAqIEBzOgkJTnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBzZWN0aW9uIG9mIG1lbW9yeSB3aXRoIHRoZSBnaXZlbiBkZWx0YQorICoJCWJldHdlZW4gRE1BIGFuZCBwaHlzaWNhbCBhZGRyZXNzZXMuCisgKi8KK3N0YXRpYyB2b2lkIHNldHVwX3BoeXNfdG9fZG1hKHBoeXNfYWRkcl90IHBoeXMsIGRtYV9hZGRyX3QgZGVsdGEsIHBoeXNfYWRkcl90IHMpCit7CisJaW50IHBoeXNfaWR4LCBmaXJzdF9pZHgsIGxhc3RfaWR4OworCXBoeXNfYWRkcl90IGZpcnN0LCBsYXN0OworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIGZpcnN0IGFuZCBsYXN0IGluZGljZXMsIHJvdW5kaW5nIHRoZSBmaXJzdCB1cCBhbmQKKwkgKiB0aGUgc2Vjb25kIGRvd24uCisJICovCisJZmlyc3QgPSBwaHlzICYgfklPUl9QSFlTX0dSQUlOX01BU0s7CisJbGFzdCA9IChwaHlzICsgcyAtIDEpICYgfklPUl9QSFlTX0dSQUlOX01BU0s7CisJZmlyc3RfaWR4ID0gZmlyc3QgPj4gSU9SX0xTQklUUzsJCS8qIENvbnZlcnQgdG8gaW5kaWNlcyAqLworCWxhc3RfaWR4ID0gbGFzdCA+PiBJT1JfTFNCSVRTOworCisJZm9yIChwaHlzX2lkeCA9IGZpcnN0X2lkeDsgcGh5c19pZHggPD0gbGFzdF9pZHg7IHBoeXNfaWR4KyspCisJCV9pb3JfcGh5c190b19kbWFbcGh5c19pZHhdLm9mZnNldCA9IGRlbHRhID4+IElPUl9QSFlTX1NISUZUOworfQorCisvKioKKyAqIGlvcmVtYXBfYWRkX21hcCAtIGFkZCB0byB0aGUgcGh5c2ljYWwgYW5kIERNQSBhZGRyZXNzIGNvbnZlcnNpb24gYXJyYXlzCisgKiBAcGh5czoJUHJvY2VzcydzIHZpZXcgb2YgdGhlIGFkZHJlc3Mgb2YgdGhlIHN0YXJ0IG9mIHRoZSBtZW1vcnkgY2h1bmsKKyAqIEBkbWE6CURNQSBhZGRyZXNzIG9mIHRoZSBzdGFydCBvZiB0aGUgbWVtb3J5IGNodW5rCisgKiBAc2l6ZToJU2l6ZSwgaW4gYnl0ZXMsIG9mIHRoZSBjaHVuayBvZiBtZW1vcnkKKyAqCisgKiBOT1RFOiBJdCBtaWdodCBiZSBvYnZpb3VzLCBidXQgdGhlIGFzc3VtcHRpb24gaXMgdGhhdCBhbGwgQHNpemUgYnl0ZXMgaGF2ZQorICogdGhlIHNhbWUgb2Zmc2V0IGJldHdlZW4gdGhlIHBoeXNpY2FsIGFkZHJlc3MgYW5kIHRoZSBETUEgYWRkcmVzcy4KKyAqLwordm9pZCBpb3JlbWFwX2FkZF9tYXAocGh5c19hZGRyX3QgcGh5cywgcGh5c19hZGRyX3QgZG1hLCBwaHlzX2FkZHJfdCBzaXplKQoreworCWlmIChzaXplID09IDApCisJCXJldHVybjsKKworCWlmICgoZG1hICYgSU9SX0RNQV9HUkFJTl9NQVNLKSAhPSAwIHx8CisJCShwaHlzICYgSU9SX1BIWVNfR1JBSU5fTUFTSykgIT0gMCB8fAorCQkoc2l6ZSAmIElPUl9QSFlTX0dSQUlOX01BU0spICE9IDApCisJCXByX2NyaXQoIk1lbW9yeSBhbGxvY2F0aW9uIG11c3QgYmUgaW4gY2h1bmtzIG9mIDB4JXggYnl0ZXNcbiIsCisJCQlJT1JfUEhZU19HUkFJTik7CisKKwlzZXR1cF9kbWFfdG9fcGh5cyhkbWEsIHBoeXMgLSBkbWEsIHNpemUpOworCXNldHVwX3BoeXNfdG9fZG1hKHBoeXMsIGRtYSAtIHBoeXMsIHNpemUpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VydHYvbWVtb3J5LmMgYi9hcmNoL21pcHMvcG93ZXJ0di9tZW1vcnkuYwppbmRleCBmNDllYjNkLi43Mzg4MGFkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG93ZXJ0di9tZW1vcnkuYworKysgYi9hcmNoL21pcHMvcG93ZXJ0di9tZW1vcnkuYwpAQCAtMzAsMjggKzMwLDE0MSBAQAogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogCiAjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1wb3dlcnR2L2FzaWMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1wb3dlcnR2L2lvcmVtYXAuaD4KIAogI2luY2x1ZGUgImluaXQuaCIKIAogLyogTWVtb3J5IGNvbnN0YW50cyAqLwogI2RlZmluZSBLSUJJQllURShuKQkJKChuKSAqIDEwMjQpCS8qIE51bWJlciBvZiBraWJpYnl0ZXMgKi8KICNkZWZpbmUgTUVCSUJZVEUobikJCSgobikgKiBLSUJJQllURSgxMDI0KSkgLyogTnVtYmVyIG9mIG1lYmlieXRlcyAqLwotI2RlZmluZSBERUZBVUxUX01FTVNJWkUJCU1FQklCWVRFKDI1NikJLyogSWYgbm8gbWVtc2l6ZSBwcm92aWRlZCAqLwotI2RlZmluZSBMT1dfTUVNX01BWAkJTUVCSUJZVEUoMjUyKQkvKiBNYXggdXNhYmxlIGxvdyBtZW0gKi8KLSNkZWZpbmUgUkVTX0JPT1RMRFJfTUVNU0laRQlNRUJJQllURSgxKQkvKiBNZW1vcnkgcmVzZXJ2ZWQgZm9yIGJsZHIgKi8KLSNkZWZpbmUgQk9PVF9NRU1fU0laRQkJS0lCSUJZVEUoMjU2KQkvKiBNZW1vcnkgcmVzZXJ2ZWQgZm9yIGJsZHIgKi8KLSNkZWZpbmUgUEhZU19NRU1fU1RBUlQJCTB4MTAwMDAwMDAJLyogU3RhcnQgb2YgcGh5c2ljYWwgbWVtb3J5ICovCisjZGVmaW5lIERFRkFVTFRfTUVNU0laRQkJTUVCSUJZVEUoMTI4KQkvKiBJZiBubyBtZW1zaXplIHByb3ZpZGVkICovCiAKLWNoYXIgX19pbml0ZGF0YSBjbWRsaW5lW0NPTU1BTkRfTElORV9TSVpFXTsKKyNkZWZpbmUgQkxEUl9TSVpFCUtJQklCWVRFKDI1NikJCS8qIE1lbW9yeSByZXNlcnZlZCBmb3IgYmxkciAqLworI2RlZmluZSBSVl9TSVpFCQlNRUJJQllURSg0KQkJLyogU2l6ZSBvZiByZXNldCB2ZWN0b3IgKi8KIAotdm9pZCBfX2luaXQgcHJvbV9tZW1pbml0KHZvaWQpCisjZGVmaW5lIExPV19NRU1fRU5ECTB4MjAwMDAwMDAJCS8qIEhpZ2hlc3QgbG93IG1lbW9yeSBhZGRyZXNzICovCisjZGVmaW5lIEJMRFJfQUxJQVMJMHgxMDAwMDAwMAkJLyogQm9vdGxvYWRlciBhZGRyZXNzICovCisjZGVmaW5lIFJWX1BIWVMJCTB4MWZjMDAwMDAJCS8qIFJlc2V0IHZlY3RvciBhZGRyZXNzICovCisjZGVmaW5lIExPV19SQU1fRU5ECVJWX1BIWVMJCQkvKiBFbmQgb2YgcmVhbCBSQU0gaW4gbG93IG1lbSAqLworCisvKgorICogVmVyeSBsb3ctbGV2ZWwgY29udmVyc2lvbiBmcm9tIHByb2Nlc3NvciBwaHlzaWNhbCBhZGRyZXNzIHRvIGRldmljZQorICogRE1BIGFkZHJlc3MgZm9yIHRoZSBmaXJzdCBiYW5rIG9mIG1lbW9yeS4KKyAqLworI2RlZmluZSBQSFlTX1RPX0RNQShwYWRkcikJKChwYWRkcikgKyAoQ09ORklHX0xPV19SQU1fRE1BIC0gTE9XX1JBTV9BTElBUykpCisKK3Vuc2lnbmVkIGxvbmcgcHR2X21lbXNpemU7CisKKy8qCisgKiBzdHJ1Y3QgbG93X21lbV9yZXNlcnZlZCAtIEl0ZW1zIGluIGxvdyBtZW1tb3J5IHRoYXQgYXJlIHJlc2VydmVkCisgKiBAc3RhcnQ6CVBoeXNpY2FsIGFkZHJlc3Mgb2YgaXRlbQorICogQHNpemU6CVNpemUsIGluIGJ5dGVzLCBvZiB0aGlzIGl0ZW0KKyAqIEBpc19hbGlhc2VkOglUcnVlIGlmIHRoaXMgaXMgUkFNIGFsaWFzZWQgZnJvbSBhbm90aGVyIGxvY2F0aW9uLiBJZiBmYWxzZSwKKyAqCQlpdCBpcyBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbGlhc2VkIFJBTSBhbmQgdGhlIFJBTSBpbiB0aGUKKyAqCQl1bmFsaWFzZWQgYWRkcmVzcyBpcyBzdGlsbCB2aXNpYmxlIG91dHNpZGUgb2YgbG93IG1lbW9yeS4KKyAqLworc3RydWN0IGxvd19tZW1fcmVzZXJ2ZWQgeworCXBoeXNfYWRkcl90CXN0YXJ0OworCXBoeXNfYWRkcl90CXNpemU7CisJYm9vbAkJaXNfYWxpYXNlZDsKK307CisKKy8qCisgKiBNdXN0IGJlIGluIGFzY2VuZGluZyBhZGRyZXNzIG9yZGVyCisgKi8KK3N0cnVjdCBsb3dfbWVtX3Jlc2VydmVkIGxvd19tZW1fcmVzZXJ2ZWRbXSA9IHsKKwl7QkxEUl9BTElBUywgQkxEUl9TSVpFLCB0cnVlfSwJLyogQm9vdGxvYWRlciBSQU0gKi8KKwl7UlZfUEhZUywgUlZfU0laRSwgZmFsc2V9LAkvKiBSZXNldCB2ZWN0b3IgKi8KK307CisKKy8qCisgKiBzdHJ1Y3QgbWVtX2xheW91dCAtIGxheW91dCBvZiBhIHBpZWNlIG9mIHRoZSBzeXN0ZW0gUkFNCisgKiBAcGh5czoJUGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgc3RhcnQgb2YgdGhpcyBwaWVjZSBvZiBSQU0uIFRoaXMgaXMgdGhlCisgKgkJYWRkcmVzcyBhdCB3aGljaCBib3RoIHRoZSBwcm9jZXNzb3IgYW5kIEkvTyBkZXZpY2VzIHNlZSB0aGUKKyAqCQlSQU0uCisgKiBAYWxpYXM6CUFsaWFzIG9mIHRoaXMgcGllY2Ugb2YgbWVtb3J5IGluIG9yZGVyIHRvIG1ha2UgaXQgYXBwZWFyIGluCisgKgkJdGhlIGxvdyBtZW1vcnkgcGFydCBvZiB0aGUgcHJvY2Vzc29yJ3MgYWRkcmVzcyBzcGFjZS4gSS9PCisgKgkJZGV2aWNlcyBkb24ndCBzZWUgYW55dGhpbmcgaGVyZS4KKyAqIEBzaXplOglTaXplLCBpbiBieXRlcywgb2YgdGhpcyBwaWVjZSBvZiBSQU0KKyAqLworc3RydWN0IG1lbV9sYXlvdXQgeworCXBoeXNfYWRkcl90CXBoeXM7CisJcGh5c19hZGRyX3QJYWxpYXM7CisJcGh5c19hZGRyX3QJc2l6ZTsKK307CisKKy8qCisgKiBzdHJ1Y3QgbWVtX2xheW91dF9saXN0IC0gbGlzdCBkZXNjcmlwdG9yIGZvciBsYXlvdXRzIG9mIHN5c3RlbSBSQU0gcGllY2VzCisgKiBAZmFtaWx5OglTcGVjaWZpZXMgdGhlIGZhbWlseSBiZWluZyBkZXNjcmliZWQKKyAqIEBuOgkJTnVtYmVyIG9mICZzdHJ1Y3QgbWVtX2xheW91dCBlbGVtZW50cworICogQGxheW91dDoJUG9pbnRlciB0byB0aGUgbGlzdCBvZiAmbWVtX2xheW91dCBzdHJ1Y3R1cmVzCisgKi8KK3N0cnVjdCBtZW1fbGF5b3V0X2xpc3QgeworCWVudW0gZmFtaWx5X3R5cGUJZmFtaWx5OworCXNpemVfdAkJCW47CisJc3RydWN0IG1lbV9sYXlvdXQJKmxheW91dDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWVtX2xheW91dCBmMTUwMF9sYXlvdXRbXSA9IHsKKwl7MHgyMDAwMDAwMCwgMHgxMDAwMDAwMCwgTUVCSUJZVEUoMjU2KX0sCit9OworCitzdGF0aWMgc3RydWN0IG1lbV9sYXlvdXQgZjQ1MDBfbGF5b3V0W10gPSB7CisJezB4NDAwMDAwMDAsIDB4MTAwMDAwMDAsIE1FQklCWVRFKDI1Nil9LAorCXsweDIwMDAwMDAwLCAweDIwMDAwMDAwLCBNRUJJQllURSgzMil9LAorfTsKKworc3RhdGljIHN0cnVjdCBtZW1fbGF5b3V0IGY4NTAwX2xheW91dFtdID0geworCXsweDQwMDAwMDAwLCAweDEwMDAwMDAwLCBNRUJJQllURSgyNTYpfSwKKwl7MHgyMDAwMDAwMCwgMHgyMDAwMDAwMCwgTUVCSUJZVEUoMzIpfSwKKwl7MHgzMDAwMDAwMCwgMHgzMDAwMDAwMCwgTUVCSUJZVEUoMzIpfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWVtX2xheW91dCBmeDYwMF9sYXlvdXRbXSA9IHsKKwl7MHgyMDAwMDAwMCwgMHgxMDAwMDAwMCwgTUVCSUJZVEUoMjU2KX0sCisJezB4NjAwMDAwMDAsIDB4NjAwMDAwMDAsIE1FQklCWVRFKDEyOCl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtZW1fbGF5b3V0X2xpc3QgbGF5b3V0X2xpc3RbXSA9IHsKKwl7RkFNSUxZXzE1MDAsIEFSUkFZX1NJWkUoZjE1MDBfbGF5b3V0KSwgZjE1MDBfbGF5b3V0fSwKKwl7RkFNSUxZXzE1MDBWWkUsIEFSUkFZX1NJWkUoZjE1MDBfbGF5b3V0KSwgZjE1MDBfbGF5b3V0fSwKKwl7RkFNSUxZXzE1MDBWWkYsIEFSUkFZX1NJWkUoZjE1MDBfbGF5b3V0KSwgZjE1MDBfbGF5b3V0fSwKKwl7RkFNSUxZXzQ1MDAsIEFSUkFZX1NJWkUoZjQ1MDBfbGF5b3V0KSwgZjQ1MDBfbGF5b3V0fSwKKwl7RkFNSUxZXzg1MDAsIEFSUkFZX1NJWkUoZjg1MDBfbGF5b3V0KSwgZjg1MDBfbGF5b3V0fSwKKwl7RkFNSUxZXzg1MDBSTkcsIEFSUkFZX1NJWkUoZjg1MDBfbGF5b3V0KSwgZjg1MDBfbGF5b3V0fSwKKwl7RkFNSUxZXzQ2MDAsIEFSUkFZX1NJWkUoZng2MDBfbGF5b3V0KSwgZng2MDBfbGF5b3V0fSwKKwl7RkFNSUxZXzQ2MDBWWkEsIEFSUkFZX1NJWkUoZng2MDBfbGF5b3V0KSwgZng2MDBfbGF5b3V0fSwKKwl7RkFNSUxZXzg2MDAsIEFSUkFZX1NJWkUoZng2MDBfbGF5b3V0KSwgZng2MDBfbGF5b3V0fSwKKwl7RkFNSUxZXzg2MDBWWkIsIEFSUkFZX1NJWkUoZng2MDBfbGF5b3V0KSwgZng2MDBfbGF5b3V0fSwKK307CisKKy8qIElmIHdlIGNhbid0IGRldGVybWluZSB0aGUgbGF5b3V0LCB1c2UgdGhpcyAqLworc3RhdGljIHN0cnVjdCBtZW1fbGF5b3V0IGRlZmF1bHRfbGF5b3V0W10gPSB7CisJezB4MjAwMDAwMDAsIDB4MTAwMDAwMDAsIE1FQklCWVRFKDEyOCl9LAorfTsKKworLyoqCisgKiByZWdpc3Rlcl9ub25fcmFtIC0gcmVnaXN0ZXIgbG93IG1lbW9yeSBub3QgYXZhaWxhYmxlIGZvciBSQU0gdXNhZ2UKKyAqLworc3RhdGljIF9faW5pdCB2b2lkIHJlZ2lzdGVyX25vbl9yYW0odm9pZCkKIHsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvd19tZW1fcmVzZXJ2ZWQpOyBpKyspCisJCWFkZF9tZW1vcnlfcmVnaW9uKGxvd19tZW1fcmVzZXJ2ZWRbaV0uc3RhcnQsCisJCQlsb3dfbWVtX3Jlc2VydmVkW2ldLnNpemUsIEJPT1RfTUVNX1JFU0VSVkVEKTsKK30KKworLyoqCisgKiBnZXRfbWVtc2l6ZSAtIGdldCB0aGUgc2l6ZSBvZiBtZW1vcnkgYXMgYSBzaW5nbGUgYmFuaworICovCitzdGF0aWMgcGh5c19hZGRyX3QgZ2V0X21lbXNpemUodm9pZCkKK3sKKwlzdGF0aWMgY2hhciBjbWRsaW5lW0NPTU1BTkRfTElORV9TSVpFXSBfX2luaXRkYXRhOworCXBoeXNfYWRkcl90IG1lbXNpemUgPSAwOwogCWNoYXIgKm1lbXNpemVfc3RyOwotCXVuc2lnbmVkIGxvbmcgbWVtc2l6ZSA9IDA7Ci0JdW5zaWduZWQgaW50IHBoeXNlbmQ7CiAJY2hhciAqcHRyOwotCWludCBsb3dfbWVtOwotCWludCBoaWdoX21lbTsKIAogCS8qIENoZWNrIHRoZSBjb21tYW5kIGxpbmUgZmlyc3QgZm9yIGEgbWVtc2l6ZSBkaXJlY3RpdmUgKi8KIAlzdHJjcHkoY21kbGluZSwgYXJjc19jbWRsaW5lKTsKQEAgLTczLDk4ICsxODYsMTU4IEBACiAJCWlmIChtZW1zaXplID09IDApIHsKIAkJCWlmIChfcHJvbV9tZW1zaXplICE9IDApIHsKIAkJCQltZW1zaXplID0gX3Byb21fbWVtc2l6ZTsKLQkJCQlwcl9pbmZvKCJfcHJvbV9tZW1zaXplID0gMHglbHhcbiIsIG1lbXNpemUpOworCQkJCXByX2luZm8oIl9wcm9tX21lbXNpemUgPSAweCV4XG4iLCBtZW1zaXplKTsKIAkJCQkvKiBhZGQgaW4gbWVtb3J5IHRoYXQgdGhlIGJvb3Rsb2FkZXIgZG9lc24ndAogCQkJCSAqIHJlcG9ydCAqLwotCQkJCW1lbXNpemUgKz0gQk9PVF9NRU1fU0laRTsKKwkJCQltZW1zaXplICs9IEJMRFJfU0laRTsKIAkJCX0gZWxzZSB7CiAJCQkJbWVtc2l6ZSA9IERFRkFVTFRfTUVNU0laRTsKIAkJCQlwcl9pbmZvKCJNZW1zaXplIG5vdCBwYXNzZWQgYnkgYm9vdGxvYWRlciwgIgotCQkJCQkiZGVmYXVsdGluZyB0byAweCVseFxuIiwgbWVtc2l6ZSk7CisJCQkJCSJkZWZhdWx0aW5nIHRvIDB4JXhcbiIsIG1lbXNpemUpOwogCQkJfQogCQl9CiAJfQogCi0JcGh5c2VuZCA9IFBGTl9BTElHTigmX2VuZCkgLSAweDgwMDAwMDAwOwotCWlmIChtZW1zaXplID4gTE9XX01FTV9NQVgpIHsKLQkJbG93X21lbSA9IExPV19NRU1fTUFYOwotCQloaWdoX21lbSA9IG1lbXNpemUgLSBsb3dfbWVtOwotCX0gZWxzZSB7Ci0JCWxvd19tZW0gPSBtZW1zaXplOwotCQloaWdoX21lbSA9IDA7CisJcmV0dXJuIG1lbXNpemU7Cit9CisKKy8qKgorICogcmVnaXN0ZXJfbG93X3JhbSAtIHJlZ2lzdGVyIGFuIGFsaWFzZWQgc2VjdGlvbiBvZiBSQU0KKyAqIEBwOgkJQWxpYXMgYWRkcmVzcyBvZiBtZW1vcnkKKyAqIEBuOgkJTnVtYmVyIG9mIGJ5dGVzIGluIHRoaXMgc2VjdGlvbiBvZiBtZW1vcnkKKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVnaXN0ZXJlZAorICoKKyAqLworc3RhdGljIF9faW5pdCBwaHlzX2FkZHJfdCByZWdpc3Rlcl9sb3dfcmFtKHBoeXNfYWRkcl90IHAsIHBoeXNfYWRkcl90IG4pCit7CisJcGh5c19hZGRyX3QgczsKKwlpbnQgaTsKKwlwaHlzX2FkZHJfdCBvcmlnX247CisKKwlvcmlnX24gPSBuOworCisJQlVHX09OKHAgKyBuID4gUlZfUEhZUyk7CisKKwlmb3IgKGkgPSAwOyBuICE9IDAgJiYgaSA8IEFSUkFZX1NJWkUobG93X21lbV9yZXNlcnZlZCk7IGkrKykgeworCQlwaHlzX2FkZHJfdCBzdGFydDsKKwkJcGh5c19hZGRyX3Qgc2l6ZTsKKworCQlzdGFydCA9IGxvd19tZW1fcmVzZXJ2ZWRbaV0uc3RhcnQ7CisJCXNpemUgPSBsb3dfbWVtX3Jlc2VydmVkW2ldLnNpemU7CisKKwkJLyogSGFuZGxlIG1lbW9yeSBiZWZvcmUgdGhpcyBsb3cgbWVtb3J5IHNlY3Rpb24gKi8KKwkJaWYgKHAgPCBzdGFydCkgeworCQkJcGh5c19hZGRyX3QgczsKKwkJCXMgPSBtaW4obiwgc3RhcnQgLSBwKTsKKwkJCWFkZF9tZW1vcnlfcmVnaW9uKHAsIHMsIEJPT1RfTUVNX1JBTSk7CisJCQlwICs9IHM7CisJCQluIC09IHM7CisJCX0KKworCQkvKiBIYW5kbGUgdGhlIGxvdyBtZW1vcnkgc2VjdGlvbiBpdHNlbGYuIElmIGl0J3MgYWxpYXNlZCwKKwkJICogd2UgcmVkdWNlIHRoZSBudW1iZXIgb2YgYnllcyBsZWZ0LCBidXQgaWYgbm90LCB0aGUgUkFNCisJCSAqIGlzIGF2YWlsYWJsZSBlbHNld2hlcmUgYW5kIHdlIGRvbid0IHJlZHVjZSB0aGUgbnVtYmVyIG9mCisJCSAqIGJ5dGVzIHJlbWFpbmluZy4gKi8KKwkJaWYgKHAgPT0gc3RhcnQpIHsKKwkJCWlmIChsb3dfbWVtX3Jlc2VydmVkW2ldLmlzX2FsaWFzZWQpIHsKKwkJCQlzID0gbWluKG4sIHNpemUpOworCQkJCW4gLT0gczsKKwkJCQlwICs9IHM7CisJCQl9IGVsc2UKKwkJCQlwICs9IG47CisJCX0KIAl9CiAKKwlyZXR1cm4gb3JpZ19uIC0gbjsKK30KKwogLyoKLSAqIFRPRE86IFdlIHdpbGwgdXNlIHRoZSBoYXJkIGNvZGUgZm9yIG1lbW9yeSBjb25maWd1cmF0aW9uIHVudGlsCi0gKiB0aGUgYm9vdGxvYWRlciByZWxlYXNlcyB0aGVpciBkZXZpY2UgdHJlZSB0byB1cy4KKyAqIHJlZ2lzdGVyX3JhbSAtIHJlZ2lzdGVyIHJlYWwgUkFNCisgKiBAcDoJQWRkcmVzcyBvZiBtZW1vcnkgYXMgc2VlbiBieSBkZXZpY2VzCisgKiBAYWxpYXM6CUlmIHRoZSBtZW1vcnkgaXMgc2VlbiBhdCBhbiBhZGRpdGlvbmFsIGFkZHJlc3MgYnkgdGhlIHByb2Nlc3NvciwKKyAqCQl0aGlzIHdpbGwgYmUgdGhlIGFkZHJlc3MsIG90aGVyd2lzZSBpdCBpcyB0aGUgc2FtZSBhcyBAcC4KKyAqIEBuOgkJTnVtYmVyIG9mIGJ5dGVzIGluIHRoaXMgc2VjdGlvbiBvZiBtZW1vcnkKICAqLworc3RhdGljIF9faW5pdCB2b2lkIHJlZ2lzdGVyX3JhbShwaHlzX2FkZHJfdCBwLCBwaHlzX2FkZHJfdCBhbGlhcywKKwlwaHlzX2FkZHJfdCBuKQorewogCS8qCi0JICogQWRkIHRoZSBtZW1vcnkgcmVzZXJ2ZWQgZm9yIHVzZSBieSB0aGUgYm9vdGxvYWRlciB0byB0aGUKLQkgKiBtZW1vcnkgbWFwLgorCSAqIElmIHNvbWUgb3IgYWxsIG9mIHRoaXMgbWVtb3J5IGhhcyBhbiBhbGlhcywgYnJlYWsgaXQgaW50byB0aGUKKwkgKiBhbGlhc2VkIGFuZCBub24tYWxpYXNlZCBwb3J0aW9uLgogCSAqLwotCWFkZF9tZW1vcnlfcmVnaW9uKFBIWVNfTUVNX1NUQVJULCBSRVNfQk9PVExEUl9NRU1TSVpFLAotCQlCT09UX01FTV9SRVNFUlZFRCk7Ci0jaWZkZWYgQ09ORklHX0hJR0hNRU1fMjU2XzEyOAotCS8qCi0JICogQWRkIG1lbW9yeSBpbiBsb3cgZm9yIGdlbmVyYWwgdXNlIGJ5IHRoZSBrZXJuZWwgYW5kIGl0cyBmcmllbmRzCi0JICogKGxpa2UgZHJpdmVycywgYXBwbGljYXRpb25zLCBldGMpLgotCSAqLwotCWFkZF9tZW1vcnlfcmVnaW9uKFBIWVNfTUVNX1NUQVJUICsgUkVTX0JPT1RMRFJfTUVNU0laRSwKLQkJTE9XX01FTV9NQVggLSBSRVNfQk9PVExEUl9NRU1TSVpFLCBCT09UX01FTV9SQU0pOwotCS8qCi0JICogQWRkIHRoZSBtZW1vcnkgcmVzZXJ2ZWQgZm9yIHJlc2V0IHZlY3Rvci4KLQkgKi8KLQlhZGRfbWVtb3J5X3JlZ2lvbigweDFmYzAwMDAwLCBNRUJJQllURSg0KSwgQk9PVF9NRU1fUkVTRVJWRUQpOwotCS8qCi0JICogQWRkIHRoZSBtZW1vcnkgcmVzZXJ2ZWQuCi0JICovCi0JYWRkX21lbW9yeV9yZWdpb24oMHgyMDAwMDAwMCwgTUVCSUJZVEUoMTAyNCArIDc1KSwgQk9PVF9NRU1fUkVTRVJWRUQpOwotCS8qCi0JICogQWRkIG1lbW9yeSBpbiBoaWdoIGZvciBnZW5lcmFsIHVzZSBieSB0aGUga2VybmVsIGFuZCBpdHMgZnJpZW5kcwotCSAqIChsaWtlIGRyaXZlcnMsIGFwcGxpY2F0aW9ucywgZXRjKS4KLQkgKgotCSAqIDc1TUIgaXMgcmVzZXJ2ZWQgZm9yIGRldmljZXMgd2hpY2ggYXJlIHVzaW5nIHRoZSBtZW1vcnkgaW4gaGlnaC4KLQkgKi8KLQlhZGRfbWVtb3J5X3JlZ2lvbigweDYwMDAwMDAwICsgTUVCSUJZVEUoNzUpLCBNRUJJQllURSgxMjggLSA3NSksCi0JCUJPT1RfTUVNX1JBTSk7Ci0jZWxpZiBkZWZpbmVkIENPTkZJR19ISUdITUVNXzEyOF8xMjgKLQkvKgotCSAqIEFkZCBtZW1vcnkgaW4gbG93IGZvciBnZW5lcmFsIHVzZSBieSB0aGUga2VybmVsIGFuZCBpdHMgZnJpZW5kcwotCSAqIChsaWtlIGRyaXZlcnMsIGFwcGxpY2F0aW9ucywgZXRjKS4KLQkgKi8KLQlhZGRfbWVtb3J5X3JlZ2lvbihQSFlTX01FTV9TVEFSVCArIFJFU19CT09UTERSX01FTVNJWkUsCi0JCU1FQklCWVRFKDEyOCkgLSBSRVNfQk9PVExEUl9NRU1TSVpFLCBCT09UX01FTV9SQU0pOwotCS8qCi0JICogQWRkIHRoZSBtZW1vcnkgcmVzZXJ2ZWQuCi0JICovCi0JYWRkX21lbW9yeV9yZWdpb24oUEhZU19NRU1fU1RBUlQgKyBNRUJJQllURSgxMjgpLAotCQlNRUJJQllURSgxMjggKyAxMDI0ICsgNzUpLCBCT09UX01FTV9SRVNFUlZFRCk7Ci0JLyoKLQkgKiBBZGQgbWVtb3J5IGluIGhpZ2ggZm9yIGdlbmVyYWwgdXNlIGJ5IHRoZSBrZXJuZWwgYW5kIGl0cyBmcmllbmRzCi0JICogKGxpa2UgZHJpdmVycywgYXBwbGljYXRpb25zLCBldGMpLgotCSAqCi0JICogNzVNQiBpcyByZXNlcnZlZCBmb3IgZGV2aWNlcyB3aGljaCBhcmUgdXNpbmcgdGhlIG1lbW9yeSBpbiBoaWdoLgotCSAqLwotCWFkZF9tZW1vcnlfcmVnaW9uKDB4NjAwMDAwMDAgKyBNRUJJQllURSg3NSksIE1FQklCWVRFKDEyOCAtIDc1KSwKLQkJQk9PVF9NRU1fUkFNKTsKLSNlbHNlCi0JLyogQWRkIGxvdyBtZW1vcnkgcmVnaW9ucyBmb3IgZWl0aGVyOgotCSAqICAgLSBuby1oaWdobWVtb3J5IGNvbmZpZ3VyYXRpb24gY2FzZSAtT1ItCi0JICogICAtIGhpZ2htZW1vcnkgIkhJR0hNRU1fTE9XQkFOS19PTkxZIiBjYXNlCi0JICovCi0JLyoKLQkgKiBBZGQgbWVtb3J5IGZvciBnZW5lcmFsIHVzZSBieSB0aGUga2VybmVsIGFuZCBpdHMgZnJpZW5kcwotCSAqIChsaWtlIGRyaXZlcnMsIGFwcGxpY2F0aW9ucywgZXRjKS4KLQkgKi8KLQlhZGRfbWVtb3J5X3JlZ2lvbihQSFlTX01FTV9TVEFSVCArIFJFU19CT09UTERSX01FTVNJWkUsCi0JCWxvd19tZW0gLSBSRVNfQk9PVExEUl9NRU1TSVpFLCBCT09UX01FTV9SQU0pOwotCS8qCi0JICogQWRkIHRoZSBtZW1vcnkgcmVzZXJ2ZWQgZm9yIHJlc2V0IHZlY3Rvci4KLQkgKi8KLQlhZGRfbWVtb3J5X3JlZ2lvbigweDFmYzAwMDAwLCBNRUJJQllURSg0KSwgQk9PVF9NRU1fUkVTRVJWRUQpOworCWlmIChwICE9IGFsaWFzKSB7CisJCXBoeXNfYWRkcl90IGFsaWFzX3NpemU7CisJCXBoeXNfYWRkcl90IHJlZ2lzdGVyZWQ7CisKKwkJYWxpYXNfc2l6ZSA9IG1pbihuLCBMT1dfUkFNX0VORCAtIGFsaWFzKTsKKwkJcmVnaXN0ZXJlZCA9IHJlZ2lzdGVyX2xvd19yYW0oYWxpYXMsIGFsaWFzX3NpemUpOworCQlpb3JlbWFwX2FkZF9tYXAoYWxpYXMsIHAsIG4pOworCQluIC09IHJlZ2lzdGVyZWQ7CisJCXAgKz0gcmVnaXN0ZXJlZDsKKwl9CisKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCWlmIChuICE9IDApIHsKKwkJYWRkX21lbW9yeV9yZWdpb24ocCwgbiwgQk9PVF9NRU1fUkFNKTsKKwkJaW9yZW1hcF9hZGRfbWFwKHAsIHAsIG4pOworCX0KICNlbmRpZgogfQogCisvKioKKyAqIHJlZ2lzdGVyX2FkZHJlc3Nfc3BhY2UgLSByZWdpc3RlciB0aGluZ3MgaW4gdGhlIGFkZHJlc3Mgc3BhY2UKKyAqIEBtZW1zaXplOglOdW1iZXIgb2YgYnl0ZXMgb2YgUkFNIGluc3RhbGxlZAorICoKKyAqIFRha2VzIHRoZSBnaXZlbiBudW1iZXIgb2YgYnl0ZXMgb2YgUkFNIGFuZCByZWdpc3RlcnMgYXMgbWFueSBvZiB0aGUgcmVnaW9ucywKKyAqIG9yIHBhcnRpYWwgcmVnaW9ucywgYXMgaXQgY2FuLiBTbywgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBtaWdodCBoYXZlCisgKiB0d28gcmVnaW9ucyB3aXRoIDI1NiBNaUIgZWFjaC4gSWYgdGhlIG1lbXNpemUgcGFzc2VkIGluIG9uIHRoZSBjb21tYW5kIGxpbmUKKyAqIGlzIDM4NCBNaUIsIGl0IHdpbGwgcmVnaXN0ZXIgdGhlIGZpcnN0IHJlZ2lvbiB3aXRoIDI1NiBNaUIgYW5kIHRoZSBzZWNvbmQKKyAqIHdpdGggMTI4IE1pQi4KKyAqLworc3RhdGljIF9faW5pdCB2b2lkIHJlZ2lzdGVyX2FkZHJlc3Nfc3BhY2UocGh5c19hZGRyX3QgbWVtc2l6ZSkKK3sKKwlpbnQgaTsKKwlwaHlzX2FkZHJfdCBzaXplOworCXNpemVfdCBuOworCXN0cnVjdCBtZW1fbGF5b3V0ICpsYXlvdXQ7CisJZW51bSBmYW1pbHlfdHlwZSBmYW1pbHk7CisKKwkvKgorCSAqIFJlZ2lzdGVyIGFsbCBvZiB0aGUgdGhpbmdzIHRoYXQgYXJlbid0IGF2YWlsYWJsZSB0byB0aGUga2VybmVsIGFzCisJICogbWVtb3J5LgorCSAqLworCXJlZ2lzdGVyX25vbl9yYW0oKTsKKworCS8qIEZpbmQgdGhlIGFwcHJvcHJpYXRlIG1lbW9yeSBkZXNjcmlwdGlvbiAqLworCWZhbWlseSA9IHBsYXRmb3JtX2dldF9mYW1pbHkoKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxheW91dF9saXN0KTsgaSsrKSB7CisJCWlmIChsYXlvdXRfbGlzdFtpXS5mYW1pbHkgPT0gZmFtaWx5KQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gQVJSQVlfU0laRShsYXlvdXRfbGlzdCkpIHsKKwkJbiA9IEFSUkFZX1NJWkUoZGVmYXVsdF9sYXlvdXQpOworCQlsYXlvdXQgPSBkZWZhdWx0X2xheW91dDsKKwl9IGVsc2UgeworCQluID0gbGF5b3V0X2xpc3RbaV0ubjsKKwkJbGF5b3V0ID0gbGF5b3V0X2xpc3RbaV0ubGF5b3V0OworCX0KKworCWZvciAoaSA9IDA7IG1lbXNpemUgIT0gMCAmJiBpIDwgbjsgaSsrKSB7CisJCXNpemUgPSBtaW4obWVtc2l6ZSwgbGF5b3V0W2ldLnNpemUpOworCQlyZWdpc3Rlcl9yYW0obGF5b3V0W2ldLnBoeXMsIGxheW91dFtpXS5hbGlhcywgc2l6ZSk7CisJCW1lbXNpemUgLT0gc2l6ZTsKKwl9Cit9CisKK3ZvaWQgX19pbml0IHByb21fbWVtaW5pdCh2b2lkKQoreworCXB0dl9tZW1zaXplID0gZ2V0X21lbXNpemUoKTsKKwlyZWdpc3Rlcl9hZGRyZXNzX3NwYWNlKHB0dl9tZW1zaXplKTsKK30KKwogdm9pZCBfX2luaXQgcHJvbV9mcmVlX3Byb21fbWVtb3J5KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VydHYvcG93ZXJ0di11c2IuYyBiL2FyY2gvbWlwcy9wb3dlcnR2L3Bvd2VydHYtdXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFjODVjZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L3Bvd2VydHYtdXNiLmMKQEAgLTAsMCArMSw0MDMgQEAKKy8qCisgKgkJCQlwb3dlcnR2LXVzYi5jCisgKgorICogRGVzY3JpcHRpb246ICBBU0lDLXNwZWNpZmljIFVTQiBkZXZpY2Ugc2V0dXAgYW5kIHNodXRkb3duCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgU2NpZW50aWZpYy1BdGxhbnRhLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogQXV0aG9yOiAgICAgICBLZW4gRXBwaW5ldHQKKyAqICAgICAgICAgICAgICAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisgKgorICogTk9URTogVGhlIGJvb3Rsb2FkZXIgYWxsb2NhdGVzIHBlcnNpc3RlbnQgbWVtb3J5IGF0IGFuIGFkZHJlc3Mgd2hpY2ggaXMKKyAqIDE2IE1pQiBiZWxvdyB0aGUgZW5kIG9mIHRoZSBoaWdoZXN0IGFkZHJlc3MgaW4gS1NFRzAuIEFsbCBmaXhlZAorICogYWRkcmVzcyBtZW1vcnkgcmVzZXJ2YXRpb25zIG11c3QgYXZvaWQgdGhpcyByZWdpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXBvd2VydHYvYXNpYy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXBvd2VydHYvaW50ZXJydXB0cy5oPgorCisvKiBtaXNjX2Nsa19jdGwxIHZhbHVlcyAqLworI2RlZmluZSBNQ0MxXzMwTUhaX1BPV0VSVVBfU0VMRUNUCSgxIDw8IDE0KQorI2RlZmluZSBNQ0MxX0RJVjkJCQkoMSA8PCAxMykKKyNkZWZpbmUgTUNDMV9FVEhNSVBTX1BPV0VSVVBfU0VMRUNUCSgxIDw8IDExKQorI2RlZmluZSBNQ0MxX1VTQl9QT1dFUlVQX1NFTEVDVAkJKDEgPDwgMSkKKyNkZWZpbmUgTUNDMV9DTE9DSzEwOF9QT1dFUlVQX1NFTEVDVAkoMSA8PCAwKQorCisvKiBQb3NzaWJsZSB2YWx1ZXMgZm9yIGNsb2NrIHNlbGVjdCAqLworI2RlZmluZSBNQ0MxX1VTQl9DTE9DS19ISUdIX1oJCSgwIDw8IDQpCisjZGVmaW5lIE1DQzFfVVNCX0NMT0NLXzQ4TUhaCQkoMSA8PCA0KQorI2RlZmluZSBNQ0MxX1VTQl9DTE9DS18yNE1IWgkJKDIgPDwgNCkKKyNkZWZpbmUgTUNDMV9VU0JfQ0xPQ0tfNk1IWgkJKDMgPDwgNCkKKworI2RlZmluZSBNQ0MxX0NPTkZJRwkoTUNDMV8zME1IWl9QT1dFUlVQX1NFTEVDVCB8CQlcCisJCQkgTUNDMV9ESVY5IHwJCQkJXAorCQkJIE1DQzFfRVRITUlQU19QT1dFUlVQX1NFTEVDVCB8CQlcCisJCQkgTUNDMV9VU0JfUE9XRVJVUF9TRUxFQ1QgfAkJXAorCQkJIE1DQzFfQ0xPQ0sxMDhfUE9XRVJVUF9TRUxFQ1QpCisKKy8qIG1pc2NfY2xrX2N0bDIgdmFsdWVzICovCisjZGVmaW5lIE1DQzJfR01JSV9HQ0xLX1RPX1BBRAkJKDEgPDwgMzEpCisjZGVmaW5lIE1DQzJfRVRIRVIxMjVfMF9DTE9DS19TRUxFQ1QJKDEgPDwgMjkpCisjZGVmaW5lIE1DQzJfUk1JSV8wX0NMT0NLX1NFTEVDVAkoMSA8PCAyOCkKKyNkZWZpbmUgTUNDMl9HTUlJX1RYMF9DTE9DS19TRUxFQ1QJKDEgPDwgMjcpCisjZGVmaW5lIE1DQzJfR01JSV9SWDBfQ0xPQ0tfU0VMRUNUCSgxIDw8IDI2KQorI2RlZmluZSBNQ0MyX0VUSEVSMTI1XzFfQ0xPQ0tfU0VMRUNUCSgxIDw8IDI0KQorI2RlZmluZSBNQ0MyX1JNSUlfMV9DTE9DS19TRUxFQ1QJKDEgPDwgMjMpCisjZGVmaW5lIE1DQzJfR01JSV9UWDFfQ0xPQ0tfU0VMRUNUCSgxIDw8IDIyKQorI2RlZmluZSBNQ0MyX0dNSUlfUlgxX0NMT0NLX1NFTEVDVAkoMSA8PCAyMSkKKyNkZWZpbmUgTUNDMl9FVEhFUjEyNV8yX0NMT0NLX1NFTEVDVAkoMSA8PCAxOSkKKyNkZWZpbmUgTUNDMl9STUlJXzJfQ0xPQ0tfU0VMRUNUCSgxIDw8IDE4KQorI2RlZmluZSBNQ0MyX0dNSUlfVFgyX0NMT0NLX1NFTEVDVAkoMSA8PCAxNykKKyNkZWZpbmUgTUNDMl9HTUlJX1JYMl9DTE9DS19TRUxFQ1QJKDEgPDwgMTYpCisKKyNkZWZpbmUgRVRIRVJfQ0xLX0NPTkZJRwkoTUNDMl9HTUlJX0dDTEtfVE9fUEFEIHwJXAorCQkJCSBNQ0MyX0VUSEVSMTI1XzBfQ0xPQ0tfU0VMRUNUIHwJXAorCQkJCSBNQ0MyX1JNSUlfMF9DTE9DS19TRUxFQ1QgfAlcCisJCQkJIE1DQzJfR01JSV9UWDBfQ0xPQ0tfU0VMRUNUIHwJXAorCQkJCSBNQ0MyX0dNSUlfUlgwX0NMT0NLX1NFTEVDVCB8CVwKKwkJCQkgTUNDMl9FVEhFUjEyNV8xX0NMT0NLX1NFTEVDVCB8CVwKKwkJCQkgTUNDMl9STUlJXzFfQ0xPQ0tfU0VMRUNUIHwJXAorCQkJCSBNQ0MyX0dNSUlfVFgxX0NMT0NLX1NFTEVDVCB8CVwKKwkJCQkgTUNDMl9HTUlJX1JYMV9DTE9DS19TRUxFQ1QgfAlcCisJCQkJIE1DQzJfRVRIRVIxMjVfMl9DTE9DS19TRUxFQ1QgfAlcCisJCQkJIE1DQzJfUk1JSV8yX0NMT0NLX1NFTEVDVCB8CVwKKwkJCQkgTUNDMl9HTUlJX1RYMl9DTE9DS19TRUxFQ1QgfAlcCisJCQkJIE1DQzJfR01JSV9SWDJfQ0xPQ0tfU0VMRUNUKQorCisvKiBtaXNjX2Nsa19jdGwyIGRlZmluaXRpb25zIGZvciBHYWlhICovCisjZGVmaW5lIEZTWDRBX1JFRl9TRUxFQ1QJCSgxIDw8IDE2KQorI2RlZmluZSBGU1g0Ql9SRUZfU0VMRUNUCQkoMSA8PCAxNykKKyNkZWZpbmUgRlNYNENfUkVGX1NFTEVDVAkJKDEgPDwgMTgpCisjZGVmaW5lIEREUl9QTExfUkVGX1NFTEVDVAkJKDEgPDwgMTkpCisjZGVmaW5lIE1JUFNfUExMX1JFRl9TRUxFQ1QJCSgxIDw8IDIwKQorCisvKiBEZWZpbml0aW9ucyBmb3IgdGhlIFFBTSBmcmVxdWVuY3kgc2VsZWN0IHJlZ2lzdGVyIEZTNDMyWDRBNF9RQU1fQ1RMICovCisjZGVmaW5lIFFBTV9GU19TRElWX1NISUZUCQkyOQorI2RlZmluZSBRQU1fRlNfTURfU0hJRlQJCQkyNAorI2RlZmluZSBRQU1fRlNfTURfTUFTSwkJCTB4MWYJLyogQ3V0IGRvd24gdG8gNSBiaXRzICovCisjZGVmaW5lIFFBTV9GU19QRV9TSElGVAkJCTgKKworI2RlZmluZSBRQU1fRlNfRElTQUJMRV9ESVZJREVfQllfMwkJKDEgPDwgNSkKKyNkZWZpbmUgUUFNX0ZTX0VOQUJMRV9QUk9HUkFNCQkJKDEgPDwgNCkKKyNkZWZpbmUJUUFNX0ZTX0VOQUJMRV9PVVRQVVQJCQkoMSA8PCAzKQorI2RlZmluZQlRQU1fRlNfU0VMRUNUX1RFU1RfQllQQVNTCQkoMSA8PCAyKQorI2RlZmluZQlRQU1fRlNfRElTQUJMRV9ESUdJVEFMX1NUQU5EQlkJCSgxIDw8IDEpCisjZGVmaW5lIFFBTV9GU19DSE9PU0VfRlMJCQkoMSA8PCAwKQorCisvKiBEZWZpbml0aW9ucyBmb3IgZnM0MzJ4NGFfY3RsIHJlZ2lzdGVyICovCisjZGVmaW5lIFFBTV9GU19OU0RJVl81NE1IWgkJCSgxIDw8IDIpCisKKy8qIERlZmluaXRpb25zIGZvciBiY20xX3VzYjJfY3RsIHJlZ2lzdGVyICovCisjZGVmaW5lIEJDTTFfVVNCMl9DVExfQklTVE9LCQkJCSgxIDw8IDExKQorI2RlZmluZSBCQ00xX1VTQjJfQ1RMX1BPUlQyX1NISUZUX0pLCQkJKDEgPDwgNykKKyNkZWZpbmUgQkNNMV9VU0IyX0NUTF9QT1JUMV9TSElGVF9KSwkJCSgxIDw8IDYpCisjZGVmaW5lIEJDTTFfVVNCMl9DVExfUE9SVDJfRkFTVF9FREdFCQkJKDEgPDwgNSkKKyNkZWZpbmUgQkNNMV9VU0IyX0NUTF9QT1JUMV9GQVNUX0VER0UJCQkoMSA8PCA0KQorI2RlZmluZSBCQ00xX1VTQjJfQ1RMX0VIQ0lfUFJUX1BXUl9BQ1RJVkVfSElHSAkJKDEgPDwgMSkKKyNkZWZpbmUgQkNNMV9VU0IyX0NUTF9BUFBfUFJUX09WUkNVUl9JTl9BQ1RJVkVfSElHSAkoMSA8PCAwKQorCisvKiBEZWZpbml0aW9ucyBmb3IgY3J0X3NwYXJlIHJlZ2lzdGVyICovCisjZGVmaW5lIENSVF9TUEFSRV9QT1JUMl9TSElGVF9KSwkJCSgxIDw8IDIxKQorI2RlZmluZSBDUlRfU1BBUkVfUE9SVDFfU0hJRlRfSksJCQkoMSA8PCAyMCkKKyNkZWZpbmUgQ1JUX1NQQVJFX1BPUlQyX0ZBU1RfRURHRQkJCSgxIDw8IDE5KQorI2RlZmluZSBDUlRfU1BBUkVfUE9SVDFfRkFTVF9FREdFCQkJKDEgPDwgMTgpCisjZGVmaW5lIENSVF9TUEFSRV9ESVZJREVfQllfOV9GUk9NXzQzMgkJCSgxIDw8IDE3KQorI2RlZmluZSBDUlRfU1BBUkVfVVNCX0RJVklERV9CWV85CQkJKDEgPDwgMTYpCisKKy8qIERlZmluaXRpb25zIGZvciB1c2IyX3N0YnVzX29iYyByZWdpc3RlciAqLworI2RlZmluZSBVU0JfU1RCVVNfT0JDX1NUT1JFMzJfTE9BRDMyCQkJMHgzCisKKy8qIERlZmluaXRpb25zIGZvciB1c2IyX3N0YnVzX21lc3Nfc2l6ZSByZWdpc3RlciAqLworI2RlZmluZSBVU0IyX1NUQlVTX01FU1NfU0laRV8yCQkJCTB4MQkvKiAyIHBhY2tldHMgKi8KKworLyogRGVmaW5pdGlvbnMgZm9yIHVzYjJfc3RidXNfY2h1bmtfc2l6ZSByZWdpc3RlciAqLworI2RlZmluZSBVU0IyX1NUQlVTX0NIVU5LX1NJWkVfMgkJCQkweDEJLyogMiBwYWNrZXRzICovCisKKy8qIERlZmluaXRpb25zIGZvciB1c2IyX3N0cmFwIHJlZ2lzdGVyICovCisjZGVmaW5lIFVTQjJfU1RSQVBfSEZSRVFfU0VMRUNUCQkJCTB4MQorCisvKgorICogVVNCIEhvc3QgUmVzb3VyY2UgRGVmaW5pdGlvbgorICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZWhjaV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5wYXJlbnQgPSAmYXNpY19yZXNvdXJjZSwKKwkJLnN0YXJ0ICA9IDAsCisJCS5lbmQgICAgPSAweGZmLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydCAgPSBpcnFfdXNiZWhjaSwKKwkJLmVuZCAgICA9IGlycV91c2JlaGNpLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyB1NjQgZWhjaV9kbWFtYXNrID0gMHhmZmZmZmZmZlVMTDsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZWhjaV9kZXZpY2UgPSB7CisJLm5hbWUgPSAicG93ZXJ0di1laGNpIiwKKwkuaWQgPSAwLAorCS5udW1fcmVzb3VyY2VzID0gMiwKKwkucmVzb3VyY2UgPSBlaGNpX3Jlc291cmNlcywKKwkuZGV2ID0geworCQkuZG1hX21hc2sgPSAmZWhjaV9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG9oY2lfcmVzb3VyY2VzW10gPSB7CisJeworCQkucGFyZW50ID0gJmFzaWNfcmVzb3VyY2UsCisJCS5zdGFydCAgPSAwLAorCQkuZW5kICAgID0gMHhmZiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgID0gaXJxX3VzYm9oY2ksCisJCS5lbmQgICAgPSBpcnFfdXNib2hjaSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgdTY0IG9oY2lfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTEw7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9oY2lfZGV2aWNlID0geworCS5uYW1lID0gInBvd2VydHYtb2hjaSIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IDIsCisJLnJlc291cmNlID0gb2hjaV9yZXNvdXJjZXMsCisJLmRldiA9IHsKKwkJLmRtYV9tYXNrID0gJm9oY2lfZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKKwl9LAorfTsKKworc3RhdGljIHVuc2lnbmVkIHVzYl91c2VyczsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sodXNiX3JlZ3NfbG9jayk7CisKKy8qCisgKgorICogZnNfdXBkYXRlIC0gc2V0IGZyZXF1ZW5jeSBzeW50aGVzaXplciBmb3IgVVNCCisgKiBAcGVfYml0cwkJUGhhc2UgdGFwIHNldHRpbmcKKyAqIEBtZF9iaXRzCQlDb2Fyc2Ugc2VsZWN0b3IgYnVzIGZvciBhbGdvcml0aG0gb2YgcGhhc2UgdGFwCisgKiBAc2Rpdl9iaXRzCQlPdXRwdXQgZGl2aWRlciBzZXR0aW5nCisgKiBAZGlzYWJsZV9kaXZfYnlfMwlFaXRoZXIgUUFNX0ZTX0RJU0FCTEVfRElWSURFX0JZXzMgb3IgemVybworICogQHN0YW5kYnkJCUVpdGhlciBRQU1fRlNfRElTQUJMRV9ESUdJVEFMX1NUQU5EQlkgb3IgemVybworICoKKyAqIFFBTSBmcmVxdWVuY3kgc2VsZWN0aW9uIGNvZGUsIHdoaWNoIGFmZmVjdHMgdGhlIGZyZXF1ZW5jeSBhdCB3aGljaCBVU0IKKyAqIHJ1bnMuIFRoZSBmcmVxdWVuY3kgaXMgY2FsY3VsYXRlZCBhczoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXjE1ICogbmRpdiAqIEZpbgorICogRm91dCA9IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgICAgIChzZGl2ICogKGlwZSAqICgxICsgbWQvMzIpIC0gKGlwZSAtIDJeMTUpKigxICsgKG1kICsgMSkvMzIpKSkKKyAqIHdoZXJlOgorICogRmluCQk1NCBNSHoKKyAqIG5kaXYJCVFBTV9GU19OU0RJVl81NE1IWiA/IDggOiAxNgorICogc2RpdgkJMSA8PCAoc2Rpdl9iaXRzICsgMSkKKyAqIGlwZQkJU2FtZSBhcyBwZV9iaXRzCisgKiBtZAkJQSBmaXZlLWJpdCwgdHdvJ3MtY29tcGxlbWVudCBpbnRlZ2VyIChyYW5nZSBbLTE2LCAxNV0pLCB3aGljaAorICoJCWlzIHRoZSBsb3dlciA1IGJpdHMgb2YgbWRfYml0cy4KKyAqLworc3RhdGljIHZvaWQgZnNfdXBkYXRlKHUzMiBwZV9iaXRzLCBpbnQgbWRfYml0cywgdTMyIHNkaXZfYml0cywKKwl1MzIgZGlzYWJsZV9kaXZfYnlfMywgdTMyIHN0YW5kYnkpCit7CisJdTMyIHZhbDsKKworCXZhbCA9ICgoc2Rpdl9iaXRzIDw8IFFBTV9GU19TRElWX1NISUZUKSB8CisJCSgobWRfYml0cyAmIFFBTV9GU19NRF9NQVNLKSA8PCBRQU1fRlNfTURfU0hJRlQpIHwKKwkJKHBlX2JpdHMgPDwgUUFNX0ZTX1BFX1NISUZUKSB8CisJCVFBTV9GU19FTkFCTEVfT1VUUFVUIHwKKwkJc3RhbmRieSB8CisJCWRpc2FibGVfZGl2X2J5XzMpOworCWFzaWNfd3JpdGUodmFsLCBmczQzMng0YjRfdXNiX2N0bCk7CisJYXNpY193cml0ZSh2YWwgfCBRQU1fRlNfRU5BQkxFX1BST0dSQU0sIGZzNDMyeDRiNF91c2JfY3RsKTsKKwlhc2ljX3dyaXRlKHZhbCB8IFFBTV9GU19FTkFCTEVfUFJPR1JBTSB8IFFBTV9GU19DSE9PU0VfRlMsCisJCWZzNDMyeDRiNF91c2JfY3RsKTsKK30KKworLyoKKyAqIHVzYl9leWVfY29uZmlndXJlIC0gZm9yIG9wdGltaXppbmcgdGhlIHNoYXBlIFVTQiBleWUgd2F2ZWZvcm0KKyAqIEBzZXQ6CUJpdHMgdG8gc2V0IGluIHRoZSByZWdpc3RlcgorICogQGNsZWFyOglCaXRzIHRvIGNsZWFyIGluIHRoZSByZWdpc3RlcjsgZWFjaCBiaXQgd2l0aCBhIG9uZSB3aWxsCisgKgkJYmUgc2V0IGluIHRoZSByZWdpc3RlciwgemVybyBiaXRzIHdpbGwgbm90IGJlIG1vZGlmaWVkCisgKi8KK3N0YXRpYyB2b2lkIHVzYl9leWVfY29uZmlndXJlKHUzMiBzZXQsIHUzMiBjbGVhcikKK3sKKwl1MzIgb2xkOworCisJb2xkID0gYXNpY19yZWFkKGNydF9zcGFyZSk7CisJb2xkIHw9IHNldDsKKwlvbGQgJj0gfmNsZWFyOworCWFzaWNfd3JpdGUob2xkLCBjcnRfc3BhcmUpOworfQorCisvKgorICogcGxhdGZvcm1fY29uZmlndXJlX3VzYiAtIHVzYiBjb25maWd1cmF0aW9uIGJhc2VkIG9uIHBsYXRmb3JtIHR5cGUuCisgKi8KK3N0YXRpYyB2b2lkIHBsYXRmb3JtX2NvbmZpZ3VyZV91c2Iodm9pZCkKK3sKKwl1MzIgYmNtMV91c2IyX2N0bF92YWx1ZTsKKwllbnVtIGFzaWNfdHlwZSBhc2ljX3R5cGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1c2JfcmVnc19sb2NrLCBmbGFncyk7CisJdXNiX3VzZXJzKys7CisKKwlpZiAodXNiX3VzZXJzICE9IDEpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiX3JlZ3NfbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJYXNpY190eXBlID0gcGxhdGZvcm1fZ2V0X2FzaWMoKTsKKworCXN3aXRjaCAoYXNpY190eXBlKSB7CisJY2FzZSBBU0lDX1pFVVM6CisJCWZzX3VwZGF0ZSgweDAwMDAsIC0xNSwgMHgwMiwgMCwgMCk7CisJCWJjbTFfdXNiMl9jdGxfdmFsdWUgPSBCQ00xX1VTQjJfQ1RMX0VIQ0lfUFJUX1BXUl9BQ1RJVkVfSElHSCB8CisJCQlCQ00xX1VTQjJfQ1RMX0FQUF9QUlRfT1ZSQ1VSX0lOX0FDVElWRV9ISUdIOworCQlicmVhazsKKworCWNhc2UgQVNJQ19DUk9OVVM6CisJY2FzZSBBU0lDX0NST05VU0xJVEU6CisJCXVzYl9leWVfY29uZmlndXJlKDAsIENSVF9TUEFSRV9VU0JfRElWSURFX0JZXzkpOworCQlmc191cGRhdGUoMHg4MDAwLCAtMTQsIDB4MDMsIFFBTV9GU19ESVNBQkxFX0RJVklERV9CWV8zLAorCQkJUUFNX0ZTX0RJU0FCTEVfRElHSVRBTF9TVEFOREJZKTsKKwkJYmNtMV91c2IyX2N0bF92YWx1ZSA9IEJDTTFfVVNCMl9DVExfRUhDSV9QUlRfUFdSX0FDVElWRV9ISUdIIHwKKwkJCUJDTTFfVVNCMl9DVExfQVBQX1BSVF9PVlJDVVJfSU5fQUNUSVZFX0hJR0g7CisJCWJyZWFrOworCisJY2FzZSBBU0lDX0NBTExJT1BFOgorCQlmc191cGRhdGUoMHgwMDAwLCAtMTUsIDB4MDIsIFFBTV9GU19ESVNBQkxFX0RJVklERV9CWV8zLAorCQkJUUFNX0ZTX0RJU0FCTEVfRElHSVRBTF9TVEFOREJZKTsKKworCQlzd2l0Y2ggKHBsYXRmb3JtX2dldF9mYW1pbHkoKSkgeworCQljYXNlIEZBTUlMWV8xNTAwVlpFOgorCQkJYnJlYWs7CisKKwkJY2FzZSBGQU1JTFlfMTUwMFZaRjoKKwkJCXVzYl9leWVfY29uZmlndXJlKENSVF9TUEFSRV9QT1JUMl9TSElGVF9KSyB8CisJCQkJQ1JUX1NQQVJFX1BPUlQxX1NISUZUX0pLIHwKKwkJCQlDUlRfU1BBUkVfUE9SVDJfRkFTVF9FREdFIHwKKwkJCQlDUlRfU1BBUkVfUE9SVDFfRkFTVF9FREdFLCAwKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQl1c2JfZXllX2NvbmZpZ3VyZShDUlRfU1BBUkVfUE9SVDJfU0hJRlRfSksgfAorCQkJCUNSVF9TUEFSRV9QT1JUMV9TSElGVF9KSywgMCk7CisJCQlicmVhazsKKwkJfQorCisJCWJjbTFfdXNiMl9jdGxfdmFsdWUgPSBCQ00xX1VTQjJfQ1RMX0JJU1RPSyB8CisJCQlCQ00xX1VTQjJfQ1RMX0VIQ0lfUFJUX1BXUl9BQ1RJVkVfSElHSCB8CisJCQlCQ00xX1VTQjJfQ1RMX0FQUF9QUlRfT1ZSQ1VSX0lOX0FDVElWRV9ISUdIOworCQlicmVhazsKKworCWNhc2UgQVNJQ19HQUlBOgorCQlmc191cGRhdGUoMHg4MDAwLCAtMTQsIDB4MDMsIFFBTV9GU19ESVNBQkxFX0RJVklERV9CWV8zLAorCQkJUUFNX0ZTX0RJU0FCTEVfRElHSVRBTF9TVEFOREJZKTsKKwkJYmNtMV91c2IyX2N0bF92YWx1ZSA9IEJDTTFfVVNCMl9DVExfQklTVE9LIHwKKwkJCUJDTTFfVVNCMl9DVExfRUhDSV9QUlRfUFdSX0FDVElWRV9ISUdIIHwKKwkJCUJDTTFfVVNCMl9DVExfQVBQX1BSVF9PVlJDVVJfSU5fQUNUSVZFX0hJR0g7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJfZXJyKCJVbmtub3duIEFTSUMgdHlwZTogJWRcbiIsIGFzaWNfdHlwZSk7CisJCWJjbTFfdXNiMl9jdGxfdmFsdWUgPSAwOworCQlicmVhazsKKwl9CisKKwkvKiB0dXJuIG9uIFVTQiBwb3dlciAqLworCWFzaWNfd3JpdGUoMCwgdXNiMl9zdHJhcCk7CisJLyogRW5hYmxlIGFsbCBPSENJIGludGVycnVwdHMgKi8KKwlhc2ljX3dyaXRlKGJjbTFfdXNiMl9jdGxfdmFsdWUsIHVzYjJfY29udHJvbCk7CisJLyogdXNiMl9zdGJ1c19vYmMgc3RvcmUzMi9sb2FkMzIgKi8KKwlhc2ljX3dyaXRlKFVTQl9TVEJVU19PQkNfU1RPUkUzMl9MT0FEMzIsIHVzYjJfc3RidXNfb2JjKTsKKwkvKiB1c2IyX3N0YnVzX21lc3Nfc2l6ZSAyIHBhY2tldHMgKi8KKwlhc2ljX3dyaXRlKFVTQjJfU1RCVVNfTUVTU19TSVpFXzIsIHVzYjJfc3RidXNfbWVzc19zaXplKTsKKwkvKiB1c2IyX3N0YnVzX2NodW5rX3NpemUgMiBwYWNrZXRzICovCisJYXNpY193cml0ZShVU0IyX1NUQlVTX0NIVU5LX1NJWkVfMiwgdXNiMl9zdGJ1c19jaHVua19zaXplKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JfcmVnc19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHBsYXRmb3JtX3VuY29uZmlndXJlX3VzYih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdXNiX3JlZ3NfbG9jaywgZmxhZ3MpOworCXVzYl91c2Vycy0tOworCWlmICh1c2JfdXNlcnMgPT0gMCkKKwkJYXNpY193cml0ZShVU0IyX1NUUkFQX0hGUkVRX1NFTEVDVCwgdXNiMl9zdHJhcCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiX3JlZ3NfbG9jaywgZmxhZ3MpOworfQorCisvKgorICogU2V0IHVwIHRoZSBVU0IgRUhDSSBpbnRlcmZhY2UKKyAqLwordm9pZCBwbGF0Zm9ybV9jb25maWd1cmVfdXNiX2VoY2koKQoreworCXBsYXRmb3JtX2NvbmZpZ3VyZV91c2IoKTsKK30KK0VYUE9SVF9TWU1CT0wocGxhdGZvcm1fY29uZmlndXJlX3VzYl9laGNpKTsKKworLyoKKyAqIFNldCB1cCB0aGUgVVNCIE9IQ0kgaW50ZXJmYWNlCisgKi8KK3ZvaWQgcGxhdGZvcm1fY29uZmlndXJlX3VzYl9vaGNpKCkKK3sKKwlwbGF0Zm9ybV9jb25maWd1cmVfdXNiKCk7Cit9CitFWFBPUlRfU1lNQk9MKHBsYXRmb3JtX2NvbmZpZ3VyZV91c2Jfb2hjaSk7CisKKy8qCisgKiBTaHV0IHRoZSBVU0IgRUhDSSBpbnRlcmZhY2UgZG93bgorICovCit2b2lkIHBsYXRmb3JtX3VuY29uZmlndXJlX3VzYl9laGNpKCkKK3sKKwlwbGF0Zm9ybV91bmNvbmZpZ3VyZV91c2IoKTsKK30KK0VYUE9SVF9TWU1CT0wocGxhdGZvcm1fdW5jb25maWd1cmVfdXNiX2VoY2kpOworCisvKgorICogU2h1dCB0aGUgVVNCIE9IQ0kgaW50ZXJmYWNlIGRvd24KKyAqLwordm9pZCBwbGF0Zm9ybV91bmNvbmZpZ3VyZV91c2Jfb2hjaSgpCit7CisJcGxhdGZvcm1fdW5jb25maWd1cmVfdXNiKCk7Cit9CitFWFBPUlRfU1lNQk9MKHBsYXRmb3JtX3VuY29uZmlndXJlX3VzYl9vaGNpKTsKKworLyoqCisgKiBwbGF0Zm9ybV9kZXZpY2VzX2luaXQgLSBzZXRzIHVwIFVTQiBkZXZpY2UgcmVzb3Vyc2UuCisgKi8KK2ludCBfX2luaXQgcGxhdGZvcm1fdXNiX2RldmljZXNfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICoqZWhjaV9kZXYsCisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKm9oY2lfZGV2KQoreworCSplaGNpX2RldiA9ICZlaGNpX2RldmljZTsKKwllaGNpX3Jlc291cmNlc1swXS5zdGFydCA9IGFzaWNfcmVnX3BoeXNfYWRkcihlaGNpX2hjYXBiYXNlKTsKKwllaGNpX3Jlc291cmNlc1swXS5lbmQgKz0gZWhjaV9yZXNvdXJjZXNbMF0uc3RhcnQ7CisKKwkqb2hjaV9kZXYgPSAmb2hjaV9kZXZpY2U7CisJb2hjaV9yZXNvdXJjZXNbMF0uc3RhcnQgPSBhc2ljX3JlZ19waHlzX2FkZHIob2hjaV9oY19yZXZpc2lvbik7CisJb2hjaV9yZXNvdXJjZXNbMF0uZW5kICs9IG9oY2lfcmVzb3VyY2VzWzBdLnN0YXJ0OworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXJ0di9wb3dlcnR2X3NldHVwLmMgYi9hcmNoL21pcHMvcG93ZXJ0di9wb3dlcnR2X3NldHVwLmMKaW5kZXggYWYyY2FlMC4uMzkzM2MzNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3Bvd2VydHYvcG93ZXJ0dl9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L3Bvd2VydHZfc2V0dXAuYwpAQCAtMTk5LDE0ICsxOTksOCBAQAogCQlteV9yZWdzLmNwMF9zdGF0dXMgPSByZWFkX2MwX3N0YXR1cygpOwogCX0KIAotI2lmZGVmIENPTkZJR19ESUFHTk9TVElDUwotCWZhaWx1cmVfcmVwb3J0KChjaGFyICopIGNhdXNlX3N0cmluZywKLQkJaGF2ZV9kaWVfcmVncyA/ICZkaWVfcmVncyA6ICZteV9yZWdzKTsKLQloYXZlX2RpZV9yZWdzID0gZmFsc2U7Ci0jZWxzZQogCXByX2NyaXQoIkknbSBmZWVsaW5nIGEgYml0IHNsZWVweS4gaG1tbW1tLi4uIHBlcmhhcHMgYSBuYXAgd291bGQuLi4gIgogCQkienp6ei4uLiBcbiIpOwotI2VuZGlmCiAKIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcmI1MzIvTWFrZWZpbGUgYi9hcmNoL21pcHMvcmI1MzIvTWFrZWZpbGUKaW5kZXggOGYwYjZiNi4uZWZkZWNkYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3JiNTMyL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9yYjUzMi9NYWtlZmlsZQpAQCAtMyw1ICszLDMgQEAKICMKIAogb2JqLXkJICs9IGlycS5vIHRpbWUubyBzZXR1cC5vIHNlcmlhbC5vIHByb20ubyBncGlvLm8gZGV2aWNlcy5vCi0KLUVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcmI1MzIvUGxhdGZvcm0gYi9hcmNoL21pcHMvcmI1MzIvUGxhdGZvcm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVlYzQ1YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9yYjUzMi9QbGF0Zm9ybQpAQCAtMCwwICsxLDcgQEAKKyMKKyMgUm91dGVyYm9hcmQgNTMyCisjCitwbGF0Zm9ybS0kKENPTkZJR19NSUtST1RJS19SQjUzMikJKz0gcmI1MzIvCitjZmxhZ3MtJChDT05GSUdfTUlLUk9USUtfUkI1MzIpCQkrPQkJCQlcCisJCS1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1yYzMyNDM0Citsb2FkLSQoQ09ORklHX01JS1JPVElLX1JCNTMyKQkJKz0gMHhmZmZmZmZmZjgwMTAxMDAwCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjIvTWFrZWZpbGUgYi9hcmNoL21pcHMvc2dpLWlwMjIvTWFrZWZpbGUKaW5kZXggNDE2YjE4Zi4uY2M1Mzg0OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDIyL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9NYWtlZmlsZQpAQCAtOSw1ICs5LDMgQEAKIG9iai0kKENPTkZJR19TR0lfSVAyMikgKz0gaXAyMi1iZXJyLm8KIG9iai0kKENPTkZJR19TR0lfSVAyOCkgKz0gaXAyOC1iZXJyLm8KIG9iai0kKENPTkZJR19FSVNBKQkrPSBpcDIyLWVpc2EubwotCi1FWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDIyL1BsYXRmb3JtIGIvYXJjaC9taXBzL3NnaS1pcDIyL1BsYXRmb3JtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3YTRiN2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvc2dpLWlwMjIvUGxhdGZvcm0KQEAgLTAsMCArMSwzNCBAQAorIworIyBTR0kgSVAyMiAoSW5keS9JbmRpZ28yKQorIworIyBTZXQgdGhlIGxvYWQgYWRkcmVzcyB0byA+PSAweGZmZmZmZmZmODgwNjkwMDAgaWYgeW91IHdhbnQgdG8gbGVhdmUgc3BhY2UgZm9yCisjIHN5bW1vbiwgMHhmZmZmZmZmZjgwMDAyMDAwIGZvciBwcm9kdWN0aW9uIGtlcm5lbHMuICBOb3RlIHRoYXQgdGhlIHZhbHVlIG11c3QKKyMgYmUgYWxpZ25lZCB0byBhIG11bHRpcGxlIG9mIHRoZSBrZXJuZWwgc3RhY2sgc2l6ZSBvciB0aGUgaGFuZGxpbmcgb2YgdGhlCisjIGN1cnJlbnQgdmFyaWFibGUgd2lsbCBicmVhayBzbyBmb3IgNjQtYml0IGtlcm5lbHMgd2UgaGF2ZSB0byByYWlzZSB0aGUgc3RhcnQKKyMgYWRkcmVzcyBieSA4a2IuCisjCitwbGF0Zm9ybS0kKENPTkZJR19TR0lfSVAyMikJCSs9IHNnaS1pcDIyLworY2ZsYWdzLSQoQ09ORklHX1NHSV9JUDIyKQkrPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAyMgoraWZkZWYgQ09ORklHXzMyQklUCitsb2FkLSQoQ09ORklHX1NHSV9JUDIyKQkJKz0gMHhmZmZmZmZmZjg4MDAyMDAwCitlbmRpZgoraWZkZWYgQ09ORklHXzY0QklUCitsb2FkLSQoQ09ORklHX1NHSV9JUDIyKQkJKz0gMHhmZmZmZmZmZjg4MDA0MDAwCitlbmRpZgorCisjCisjIFNHSSBJUDI4IChJbmRpZ28yIFIxMGspCisjCisjIFNldCB0aGUgbG9hZCBhZGRyZXNzIHRvID49IDB4YTgwMDAwMDAyMDA4MDAwMCBpZiB5b3Ugd2FudCB0byBsZWF2ZSBzcGFjZSBmb3IKKyMgc3ltbW9uLCAweGE4MDAwMDAwMjAwMDQwMDAgZm9yIHByb2R1Y3Rpb24ga2VybmVscyA/ICBOb3RlIHRoYXQgdGhlIHZhbHVlIG11c3QKKyMgYmUgMTZrYiBhbGlnbmVkIG9yIHRoZSBoYW5kbGluZyBvZiB0aGUgY3VycmVudCB2YXJpYWJsZSB3aWxsIGJyZWFrLgorIyBTaW1wbGlmaWVkOiB3aGF0IElQMjIgZG9lcyBhdCAxMjhNQisgaW4ga3NlZ04sIElQMjggZG9lcyBhdCA1MTJNQisgaW4geGtwaHlzCisjCitpZmRlZiBDT05GSUdfU0dJX0lQMjgKKyAgaWZlcSAoJChjYWxsIGNjLW9wdGlvbi15biwtbXIxMGstY2FjaGUtYmFycmllcj1zdG9yZSksIG4pCisgICAgICAkKGVycm9yIGdjYyBkb2Vzbid0IHN1cHBvcnQgbmVlZGVkIG9wdGlvbiAtbXIxMGstY2FjaGUtYmFycmllcj1zdG9yZSkKKyAgZW5kaWYKK2VuZGlmCitwbGF0Zm9ybS0kKENPTkZJR19TR0lfSVAyOCkJCSs9IHNnaS1pcDIyLworY2ZsYWdzLSQoQ09ORklHX1NHSV9JUDI4KQkrPSAtbXIxMGstY2FjaGUtYmFycmllcj1zdG9yZSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAyOAorbG9hZC0kKENPTkZJR19TR0lfSVAyOCkJCSs9IDB4YTgwMDAwMDAyMDAwNDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L01ha2VmaWxlIGIvYXJjaC9taXBzL3NnaS1pcDI3L01ha2VmaWxlCmluZGV4IDMxZjQ5MzEuLjFmMjllNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvTWFrZWZpbGUKQEAgLTgsNSArOCwzIEBACiAKIG9iai0kKENPTkZJR19FQVJMWV9QUklOVEspCSs9IGlwMjctY29uc29sZS5vCiBvYmotJChDT05GSUdfU01QKQkJKz0gaXAyNy1zbXAubwotCi1FWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L1BsYXRmb3JtIGIvYXJjaC9taXBzL3NnaS1pcDI3L1BsYXRmb3JtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYjljMmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvUGxhdGZvcm0KQEAgLTAsMCArMSwxOSBAQAorIworIyBTR0ktSVAyNyAoT3JpZ2luMjAwLzIwMDApCisjCisjIFNldCB0aGUgbG9hZCBhZGRyZXNzIHRvID49IDB4YzAwMDAwMDAwMDMwMDAwMCBpZiB5b3Ugd2FudCB0byBsZWF2ZSBzcGFjZSBmb3IKKyMgc3ltbW9uLCAweGMwMDAwMDAwMDAwMWMwMDAgZm9yIHByb2R1Y3Rpb24ga2VybmVscy4gIE5vdGUgdGhhdCB0aGUgdmFsdWUgbXVzdAorIyBiZSAxNmtiIGFsaWduZWQgb3IgdGhlIGhhbmRsaW5nIG9mIHRoZSBjdXJyZW50IHZhcmlhYmxlIHdpbGwgYnJlYWsuCisjCitpZmRlZiBDT05GSUdfU0dJX0lQMjcKK3BsYXRmb3JtLSQoQ09ORklHX1NHSV9JUDI3KQkrPSBzZ2ktaXAyNy8KK2NmbGFncy0kKENPTkZJR19TR0lfSVAyNykJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWlwMjcKK2lmZGVmIENPTkZJR19NQVBQRURfS0VSTkVMCitsb2FkLSQoQ09ORklHX1NHSV9JUDI3KQkJKz0gMHhjMDAwMDAwMDQwMDFjMDAwCitPQkpDT1BZRkxBR1MJCQk6PSAtLWNoYW5nZS1hZGRyZXNzZXM9MHgzZmZmZmZmZjgwMDAwMDAwCitkYXRhb2Zmc2V0LSQoQ09ORklHX1NHSV9JUDI3KQkrPSAweDAxMDAwMDAwCitlbHNlCitsb2FkLSQoQ09ORklHX1NHSV9JUDI3KQkJKz0gMHhhODAwMDAwMDAwMDFjMDAwCitPQkpDT1BZRkxBR1MJCQk6PSAtLWNoYW5nZS1hZGRyZXNzZXM9MHg1N2ZmZmZmZjgwMDAwMDAwCitlbmRpZgorZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWtsY29uZmlnLmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbGNvbmZpZy5jCmluZGV4IGRkODMwYjMuLjdhZmUxNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWtsY29uZmlnLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjcta2xjb25maWcuYwpAQCAtNDgsNyArNDgsNyBAQAogCXJldHVybiBmaW5kX2NvbXBvbmVudChicmQsIChrbGluZm9fdCAqKU5VTEwsIHN0cnVjdF90eXBlKTsKIH0KIAotbGJvYXJkX3QgKiBmaW5kX2xib2FyZChsYm9hcmRfdCAqc3RhcnQsIHVuc2lnbmVkIGNoYXIgYnJkX3R5cGUpCitsYm9hcmRfdCAqZmluZF9sYm9hcmQobGJvYXJkX3QgKnN0YXJ0LCB1bnNpZ25lZCBjaGFyIGJyZF90eXBlKQogewogCS8qIFNlYXJjaCBhbGwgYm9hcmRzIHN0b3JlZCBvbiB0aGlzIG5vZGUuICovCiAJd2hpbGUgKHN0YXJ0KSB7CkBAIC02MCw3ICs2MCw3IEBACiAJcmV0dXJuIChsYm9hcmRfdCAqKU5VTEw7CiB9CiAKLWxib2FyZF90ICogZmluZF9sYm9hcmRfY2xhc3MobGJvYXJkX3QgKnN0YXJ0LCB1bnNpZ25lZCBjaGFyIGJyZF90eXBlKQorbGJvYXJkX3QgKmZpbmRfbGJvYXJkX2NsYXNzKGxib2FyZF90ICpzdGFydCwgdW5zaWduZWQgY2hhciBicmRfdHlwZSkKIHsKIAkvKiBTZWFyY2ggYWxsIGJvYXJkcyBzdG9yZWQgb24gdGhpcyBub2RlLiAqLwogCXdoaWxlIChzdGFydCkgewpAQCAtNzgsNyArNzgsNyBAQAogCXJldHVybiBDUFVJRF9UT19DT01QQUNUX05PREVJRChjcHUpOwogfQogCi1rbGNwdV90ICogbmFzaWRfc2xpY2VfdG9fY3B1aW5mbyhuYXNpZF90IG5hc2lkLCBpbnQgc2xpY2UpCitrbGNwdV90ICpuYXNpZF9zbGljZV90b19jcHVpbmZvKG5hc2lkX3QgbmFzaWQsIGludCBzbGljZSkKIHsKIAlsYm9hcmRfdCAqYnJkOwogCWtsY3B1X3QgKmFjcHU7CkBAIC05Nyw3ICs5Nyw3IEBACiAJcmV0dXJuIChrbGNwdV90ICopTlVMTDsKIH0KIAota2xjcHVfdCAqIHNuX2dldF9jcHVpbmZvKGNwdWlkX3QgY3B1KQora2xjcHVfdCAqc25fZ2V0X2NwdWluZm8oY3B1aWRfdCBjcHUpCiB7CiAJbmFzaWRfdCBuYXNpZDsKIAlpbnQgc2xpY2U7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMzIvTWFrZWZpbGUgYi9hcmNoL21pcHMvc2dpLWlwMzIvTWFrZWZpbGUKaW5kZXggMzFjOWFhMS4uNjBmMDIyNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDMyL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9NYWtlZmlsZQpAQCAtNSw1ICs1LDMgQEAKIAogb2JqLXkJKz0gaXAzMi1iZXJyLm8gaXAzMi1pcnEubyBpcDMyLXBsYXRmb3JtLm8gaXAzMi1zZXR1cC5vIGlwMzItcmVzZXQubyBcCiAJICAgY3JpbWUubyBpcDMyLW1lbW9yeS5vCi0KLUVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMzIvUGxhdGZvcm0gYi9hcmNoL21pcHMvc2dpLWlwMzIvUGxhdGZvcm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZlYTU1NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9QbGF0Zm9ybQpAQCAtMCwwICsxLDExIEBACisjCisjIFNHSS1JUDMyIChPMikKKyMKKyMgU2V0IHRoZSBsb2FkIGFkZHJlc3MgdG8gPj0gODAwNjkwMDAgaWYgeW91IHdhbnQgdG8gbGVhdmUgc3BhY2UgZm9yIHN5bW1vbiwKKyMgMHhmZmZmZmZmZjgwMDA0MDAwIGZvciBwcm9kdWN0aW9uIGtlcm5lbHMuICBOb3RlIHRoYXQgdGhlIHZhbHVlIG11c3QgYmUgYWxpZ25lZCB0bworIyBhIG11bHRpcGxlIG9mIHRoZSBrZXJuZWwgc3RhY2sgc2l6ZSBvciB0aGUgaGFuZGxpbmcgb2YgdGhlIGN1cnJlbnQgdmFyaWFibGUKKyMgd2lsbCBicmVhay4KKyMKK3BsYXRmb3JtLSQoQ09ORklHX1NHSV9JUDMyKQkrPSBzZ2ktaXAzMi8KK2NmbGFncy0kKENPTkZJR19TR0lfSVAzMikJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWlwMzIKK2xvYWQtJChDT05GSUdfU0dJX0lQMzIpCQkrPSAweGZmZmZmZmZmODAwMDQwMDAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvTWFrZWZpbGUgYi9hcmNoL21pcHMvc2lieXRlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZWQyYzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvc2lieXRlL01ha2VmaWxlCkBAIC0wLDAgKzEsMjcgQEAKKyMKKyMgU2lieXRlIFNCMTI1MCAvIEJDTTE0ODAgZmFtaWx5IG9mIFNPQ3MKKyMKK29iai0kKENPTkZJR19TSUJZVEVfQkNNMTEyWCkJKz0gc2IxMjUwLworb2JqLSQoQ09ORklHX1NJQllURV9CQ00xMTJYKQkrPSBjb21tb24vCitvYmotJChDT05GSUdfU0lCWVRFX1NCMTI1MCkJKz0gc2IxMjUwLworb2JqLSQoQ09ORklHX1NJQllURV9TQjEyNTApCSs9IGNvbW1vbi8KK29iai0kKENPTkZJR19TSUJZVEVfQkNNMXg1NSkJKz0gYmNtMTQ4MC8KK29iai0kKENPTkZJR19TSUJZVEVfQkNNMXg1NSkJKz0gY29tbW9uLworb2JqLSQoQ09ORklHX1NJQllURV9CQ00xeDgwKQkrPSBiY20xNDgwLworb2JqLSQoQ09ORklHX1NJQllURV9CQ00xeDgwKQkrPSBjb21tb24vCisKKyMKKyMgU2lieXRlIEJDTTkxMTIweCAoQ2FybWVsKSBib2FyZAorIyBTaWJ5dGUgQkNNOTExMjBDIChDUmhpbmUpIGJvYXJkCisjIFNpYnl0ZSBCQ005MTEyNUMgKENSaG9uZSkgYm9hcmQKKyMgU2lieXRlIEJDTTkxMTI1RSAoUmhvbmUpIGJvYXJkCisjIFNpYnl0ZSBTV0FSTSBib2FyZAorIyBTaWJ5dGUgQkNNOTF4ODAgKEJpZ1N1cikgYm9hcmQKKyMKK29iai0kKENPTkZJR19TSUJZVEVfQ0FSTUVMKQkrPSBzd2FybS8KK29iai0kKENPTkZJR19TSUJZVEVfQ1JISU5FKQkrPSBzd2FybS8KK29iai0kKENPTkZJR19TSUJZVEVfQ1JIT05FKQkrPSBzd2FybS8KK29iai0kKENPTkZJR19TSUJZVEVfUkhPTkUpCSs9IHN3YXJtLworb2JqLSQoQ09ORklHX1NJQllURV9TRU5UT1NBKQkrPSBzd2FybS8KK29iai0kKENPTkZJR19TSUJZVEVfU1dBUk0pCSs9IHN3YXJtLworb2JqLSQoQ09ORklHX1NJQllURV9CSUdTVVIpCSs9IHN3YXJtLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9QbGF0Zm9ybSBiL2FyY2gvbWlwcy9zaWJ5dGUvUGxhdGZvcm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTExZGZlMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvUGxhdGZvcm0KQEAgLTAsMCArMSw0MyBAQAorIworIyBUaGVzZSBhcmUgYWxsIHJhdGhlciBzaW1pbGFyIHNvIHdlIGNvbnNpZGVyIHRoZW0gYSBzaW5nbGUgcGxhdGZvcm0KKyMKK3BsYXRmb3JtLSQoQ09ORklHX1NJQllURV9CQ00xMTJYKQkrPSBzaWJ5dGUvCitwbGF0Zm9ybS0kKENPTkZJR19TSUJZVEVfU0IxMjUwKQkrPSBzaWJ5dGUvCitwbGF0Zm9ybS0kKENPTkZJR19TSUJZVEVfQkNNMXg1NSkJKz0gc2lieXRlLworcGxhdGZvcm0tJChDT05GSUdfU0lCWVRFX0JDTTF4ODApCSs9IHNpYnl0ZS8KKworIworIyBTaWJ5dGUgU0IxMjUwIC8gQkNNMTQ4MCBmYW1pbHkgb2YgU09DcworIworY2ZsYWdzLSQoQ09ORklHX1NJQllURV9CQ00xMTJYKQkrPQkJCQkJXAorCQktSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtc2lieXRlCQlcCisJCS1EU0lCWVRFX0hEUl9GRUFUVVJFUz1TSUJZVEVfSERSX0ZNQVNLXzEyNTBfMTEyeF9BTEwKKworcGxhdGZvcm0tJChDT05GSUdfU0lCWVRFX1NCMTI1MCkJKz0gc2lieXRlLworY2ZsYWdzLSQoQ09ORklHX1NJQllURV9TQjEyNTApCSs9CQkJCQlcCisJCS1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1zaWJ5dGUJCVwKKwkJLURTSUJZVEVfSERSX0ZFQVRVUkVTPVNJQllURV9IRFJfRk1BU0tfMTI1MF8xMTJ4X0FMTAorCitjZmxhZ3MtJChDT05GSUdfU0lCWVRFX0JDTTF4NTUpCSs9CQkJCQlcCisJCS1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1zaWJ5dGUJCVwKKwkJLURTSUJZVEVfSERSX0ZFQVRVUkVTPVNJQllURV9IRFJfRk1BU0tfMTQ4MF9BTEwKKworY2ZsYWdzLSQoQ09ORklHX1NJQllURV9CQ00xeDgwKQkrPQkJCQkJXAorCQktSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtc2lieXRlCQlcCisJCS1EU0lCWVRFX0hEUl9GRUFUVVJFUz1TSUJZVEVfSERSX0ZNQVNLXzE0ODBfQUxMCisKKyMKKyMgU2lieXRlIEJDTTkxMTIweCAoQ2FybWVsKSBib2FyZAorIyBTaWJ5dGUgQkNNOTExMjBDIChDUmhpbmUpIGJvYXJkCisjIFNpYnl0ZSBCQ005MTEyNUMgKENSaG9uZSkgYm9hcmQKKyMgU2lieXRlIEJDTTkxMTI1RSAoUmhvbmUpIGJvYXJkCisjIFNpYnl0ZSBTV0FSTSBib2FyZAorIyBTaWJ5dGUgQkNNOTF4ODAgKEJpZ1N1cikgYm9hcmQKKyMKK2xvYWQtJChDT05GSUdfU0lCWVRFX0NBUk1FTCkJOj0gMHhmZmZmZmZmZjgwMTAwMDAwCitsb2FkLSQoQ09ORklHX1NJQllURV9DUkhJTkUpCTo9IDB4ZmZmZmZmZmY4MDEwMDAwMAorbG9hZC0kKENPTkZJR19TSUJZVEVfQ1JIT05FKQk6PSAweGZmZmZmZmZmODAxMDAwMDAKK2xvYWQtJChDT05GSUdfU0lCWVRFX1JIT05FKQk6PSAweGZmZmZmZmZmODAxMDAwMDAKK2xvYWQtJChDT05GSUdfU0lCWVRFX1NFTlRPU0EpCTo9IDB4ZmZmZmZmZmY4MDEwMDAwMAorbG9hZC0kKENPTkZJR19TSUJZVEVfU1dBUk0pCTo9IDB4ZmZmZmZmZmY4MDEwMDAwMAorbG9hZC0kKENPTkZJR19TSUJZVEVfQklHU1VSKQk6PSAweGZmZmZmZmZmODAxMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9NYWtlZmlsZQppbmRleCBmMjkyZjdkLi5jZGM0YzU2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL01ha2VmaWxlCkBAIC0xLDUgKzEsMyBAQAogb2JqLXkgOj0gc2V0dXAubyBpcnEubyB0aW1lLm8KIAogb2JqLSQoQ09ORklHX1NNUCkJCQkrPSBzbXAubwotCi1FWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vTWFrZWZpbGUgYi9hcmNoL21pcHMvc2lieXRlL2NvbW1vbi9NYWtlZmlsZQppbmRleCA0ZjY1OTgzLi4zNmFhNzAwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL2NvbW1vbi9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvc2lieXRlL2NvbW1vbi9NYWtlZmlsZQpAQCAtMSw1ICsxLDMgQEAKIG9iai15IDo9IGNmZS5vCiBvYmotJChDT05GSUdfU0lCWVRFX0NGRV9DT05TT0xFKQkrPSBjZmVfY29uc29sZS5vCiBvYmotJChDT05GSUdfU0lCWVRFX1RCUFJPRikJCSs9IHNiX3RicHJvZi5vCi0KLUVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL01ha2VmaWxlCmluZGV4IDE4OTZmNGUuLmQzZDk2OWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL01ha2VmaWxlCkBAIC0yLDUgKzIsMyBAQAogCiBvYmotJChDT05GSUdfU01QKQkJCSs9IHNtcC5vCiBvYmotJChDT05GSUdfU0lCWVRFX0JVU19XQVRDSEVSKQkrPSBidXNfd2F0Y2hlci5vCi0KLUVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL01ha2VmaWxlIGIvYXJjaC9taXBzL3NuaS9NYWtlZmlsZQppbmRleCBhN2RiZWViLi45ZDNiYWQzMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvc25pL01ha2VmaWxlCkBAIC00LDUgKzQsMyBAQAogCiBvYmoteSArPSBpcnEubyByZXNldC5vIHNldHVwLm8gYTIwci5vIHJtMjAwLm8gcGNpbXQubyBwY2l0Lm8gdGltZS5vCiBvYmotJChDT05GSUdfRUlTQSkgKz0gZWlzYS5vCi0KLUVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL1BsYXRmb3JtIGIvYXJjaC9taXBzL3NuaS9QbGF0Zm9ybQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjQ0YTlkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3NuaS9QbGF0Zm9ybQpAQCAtMCwwICsxLDExIEBACisjCisjIFNOSSBSTQorIworcGxhdGZvcm0tJChDT05GSUdfU05JX1JNKQkJKz0gc25pLworY2ZsYWdzLSQoQ09ORklHX1NOSV9STSkJCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1ybQoraWZkZWYgQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOCitsb2FkLSQoQ09ORklHX1NOSV9STSkJCSs9IDB4ZmZmZmZmZmY4MDYwMDAwMAorZWxzZQorbG9hZC0kKENPTkZJR19TTklfUk0pCQkrPSAweGZmZmZmZmZmODAwMzAwMDAKK2VuZGlmCithbGwtJChDT05GSUdfU05JX1JNKQkJOj0gJChDT01QUkVTU0lPTl9GTkFNRSkuZWNvZmYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eHg5L01ha2VmaWxlIGIvYXJjaC9taXBzL3R4eDkvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ3ODdkYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy90eHg5L01ha2VmaWxlCkBAIC0wLDAgKzEsMTcgQEAKKyMKKyMgQ29tbW9uIFRYeDkKKyMKK29iai0kKENPTkZJR19NQUNIX1RYMzlYWCkgICAgICArPSBnZW5lcmljLworb2JqLSQoQ09ORklHX01BQ0hfVFg0OVhYKSAgICAgICs9IGdlbmVyaWMvCisKKyMKKyMgVG9zaGliYSBKTVItVFgzOTI3IGJvYXJkCisjCitvYmotJChDT05GSUdfVE9TSElCQV9KTVIzOTI3KSAgKz0gam1yMzkyNy8KKworIworIyBUb3NoaWJhIFJCVFg0OVhYIGJvYXJkcworIworb2JqLSQoQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcpICs9IHJidHg0OTI3Lworb2JqLSQoQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzgpICs9IHJidHg0OTM4Lworb2JqLSQoQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzkpICs9IHJidHg0OTM5LwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4eDkvUGxhdGZvcm0gYi9hcmNoL21pcHMvdHh4OS9QbGF0Zm9ybQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODAxYWJiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3R4eDkvUGxhdGZvcm0KQEAgLTAsMCArMSwxMCBAQAorcGxhdGZvcm0tJChDT05GSUdfTUFDSF9UWDM5WFgpCSs9IHR4eDkvCitwbGF0Zm9ybS0kKENPTkZJR19NQUNIX1RYNDlYWCkJKz0gdHh4OS8KKworY2ZsYWdzLSQoQ09ORklHX01BQ0hfVFgzOVhYKQkrPQkJCQkJXAorCQktSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtdHgzOXh4CitjZmxhZ3MtJChDT05GSUdfTUFDSF9UWDQ5WFgpCSs9CQkJCQlcCisJCSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtdHg0OXh4CisKK2xvYWQtJChDT05GSUdfTUFDSF9UWDM5WFgpICAgICAgKz0gMHhmZmZmZmZmZjgwMDUwMDAwCitsb2FkLSQoQ09ORklHX01BQ0hfVFg0OVhYKSAgICAgICs9IDB4ZmZmZmZmZmY4MDEwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9NYWtlZmlsZSBiL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvTWFrZWZpbGUKaW5kZXggZjI1NzljZS4uMTg2M2MxNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvdHh4OS9nZW5lcmljL01ha2VmaWxlCkBAIC0xMSw1ICsxMSwzIEBACiBvYmotJChDT05GSUdfVE9TSElCQV9GUENJQjApCSs9IHNtc2NfZmRjMzdtODF4Lm8KIG9iai0kKENPTkZJR19TUEkpCQkrPSBzcGlfZWVwcm9tLm8KIG9iai0kKENPTkZJR19UWFg5XzdTRUdMRUQpCSs9IDdzZWdsZWQubwotCi1FWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4eDkvam1yMzkyNy9NYWtlZmlsZSBiL2FyY2gvbWlwcy90eHg5L2ptcjM5MjcvTWFrZWZpbGUKaW5kZXggMjBkNjFhYy4uOWY1ZDViNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4eDkvam1yMzkyNy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvdHh4OS9qbXIzOTI3L01ha2VmaWxlCkBAIC0zLDUgKzMsMyBAQAogIwogCiBvYmoteQkrPSBwcm9tLm8gaXJxLm8gc2V0dXAubwotCi1FWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4eDkvcmJ0eDQ5MjcvTWFrZWZpbGUgYi9hcmNoL21pcHMvdHh4OS9yYnR4NDkyNy9NYWtlZmlsZQppbmRleCBmM2UxZjU5Li42MGIyNGM4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHh4OS9yYnR4NDkyNy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvdHh4OS9yYnR4NDkyNy9NYWtlZmlsZQpAQCAtMSwzICsxIEBACiBvYmoteQkrPSBwcm9tLm8gc2V0dXAubyBpcnEubwotCi1FWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4eDkvcmJ0eDQ5MzgvTWFrZWZpbGUgYi9hcmNoL21pcHMvdHh4OS9yYnR4NDkzOC9NYWtlZmlsZQppbmRleCBmM2UxZjU5Li42MGIyNGM4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHh4OS9yYnR4NDkzOC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvdHh4OS9yYnR4NDkzOC9NYWtlZmlsZQpAQCAtMSwzICsxIEBACiBvYmoteQkrPSBwcm9tLm8gc2V0dXAubyBpcnEubwotCi1FWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4eDkvcmJ0eDQ5MzkvTWFrZWZpbGUgYi9hcmNoL21pcHMvdHh4OS9yYnR4NDkzOS9NYWtlZmlsZQppbmRleCAzMjMyY2QwLi41Yzg0NjI1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHh4OS9yYnR4NDkzOS9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvdHh4OS9yYnR4NDkzOS9NYWtlZmlsZQpAQCAtMSwzICsxIEBACiBvYmoteQkgKz0gaXJxLm8gc2V0dXAubyBwcm9tLm8KLQotRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy92cjQxeHgvUGxhdGZvcm0gYi9hcmNoL21pcHMvdnI0MXh4L1BsYXRmb3JtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YzhkNWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvdnI0MXh4L1BsYXRmb3JtCkBAIC0wLDAgKzEsMzIgQEAKKyMKKyMgTkVDIFZSNDEwMCBzZXJpZXMgYmFzZWQgbWFjaGluZXMKKyMKK3BsYXRmb3JtLSQoQ09ORklHX01BQ0hfVlI0MVhYKQkrPSB2cjQxeHgvY29tbW9uLworY2ZsYWdzLSQoQ09ORklHX01BQ0hfVlI0MVhYKQkrPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtdnI0MXh4CisKKyMKKyMgQ0FTSU8gQ0FTU0lQRUlBIEUtNTUvNjUgKFZSNDExMSkKKyMKK3BsYXRmb3JtLSQoQ09ORklHX0NBU0lPX0U1NSkJKz0gdnI0MXh4L2Nhc2lvLWU1NS8KK2xvYWQtJChDT05GSUdfQ0FTSU9fRTU1KQkrPSAweGZmZmZmZmZmODAwMDQwMDAKKworIworIyBJQk0gV29ya1BhZCB6NTAgKFZSNDEyMSkKKyMKK3BsYXRmb3JtLSQoQ09ORklHX0lCTV9XT1JLUEFEKQkrPSB2cjQxeHgvaWJtLXdvcmtwYWQvCitsb2FkLSQoQ09ORklHX0lCTV9XT1JLUEFEKQkrPSAweGZmZmZmZmZmODAwMDQwMDAKKworIworIyBUQU5CQUMgVlI0MTMxIG11bHRpY2hpcCBtb2R1bGUoVEIwMjI1KSBhbmQgVEFOQkFDIFZSNDEzMURJTU0oVEIwMjI5KSAoVlI0MTMxKQorIworbG9hZC0kKENPTkZJR19UQU5CQUNfVEIwMjJYKQkrPSAweGZmZmZmZmZmODAwMDAwMDAKKworIworIyBWaWN0b3IgTVAtQzMwMy8zMDQgKFZSNDEyMikKKyMKK2xvYWQtJChDT05GSUdfVklDVE9SX01QQzMwWCkJKz0gMHhmZmZmZmZmZjgwMDAxMDAwCisKKyMKKyMgWkFPIE5ldHdvcmtzIENhcGNlbGxhIChWUjQxMzEpCisjCitsb2FkLSQoQ09ORklHX1pBT19DQVBDRUxMQSkJKz0gMHhmZmZmZmZmZjgwMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdnI0MXh4L2NvbW1vbi9NYWtlZmlsZSBiL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL01ha2VmaWxlCmluZGV4IDdkNWQ4M2IuLmQwZDg0ZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL01ha2VmaWxlCkBAIC0zLDUgKzMsMyBAQAogIwogCiBvYmoteQkrPSBiY3UubyBjbXUubyBnaXUubyBpY3UubyBpbml0Lm8gaXJxLm8gcG11Lm8gcnRjLm8gc2l1Lm8gdHlwZS5vCi0KLUVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvd3JwcG1jL01ha2VmaWxlIGIvYXJjaC9taXBzL3dycHBtYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDdjYzY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3dycHBtYy9NYWtlZmlsZQpAQCAtMCwwICsxLDEyIEBACisjCisjIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgQ29weXJpZ2h0IDIwMDYgV2luZCBSaXZlciBTeXN0ZW0sIEluYy4KKyMgQXV0aG9yOiBSb25na2FpLlpoYW4gPHJvbmdrYWkuemhhbkB3aW5kcml2ZXIuY29tPgorIworIyBNYWtlZmlsZSBmb3IgdGhlIFdpbmQgUml2ZXIgTUlQUyA0S2MgUFBNQyBFdmFsIEJvYXJkCisjCisKK29iai15ICs9IGlycS5vIHBjaS5vIHJlc2V0Lm8gc2VyaWFsLm8gc2V0dXAubyB0aW1lLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy93cnBwbWMvUGxhdGZvcm0gYi9hcmNoL21pcHMvd3JwcG1jL1BsYXRmb3JtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NTg2NDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvd3JwcG1jL1BsYXRmb3JtCkBAIC0wLDAgKzEsNyBAQAorIworIyBXaW5kIFJpdmVyIFBQTUMgQm9hcmQgKDRLQyArIEdUNjQxMjApCisjCitwbGF0Zm9ybS0kKENPTkZJR19XUl9QUE1DKQkrPSB3cnBwbWMvCitjZmxhZ3MtJChDT05GSUdfV1JfUFBNQykJKz0gCQkJCQlcCisJCS1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC13cnBwbWMKK2xvYWQtJChDT05GSUdfV1JfUFBNQykJCSs9IDB4ZmZmZmZmZmY4MDEwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2d0NjQxMjAvd3JwcG1jL2lycS5jIGIvYXJjaC9taXBzL3dycHBtYy9pcnEuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9taXBzL2d0NjQxMjAvd3JwcG1jL2lycS5jCnJlbmFtZSB0byBhcmNoL21pcHMvd3JwcG1jL2lycS5jCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ3Q2NDEyMC93cnBwbWMvcGNpLmMgYi9hcmNoL21pcHMvd3JwcG1jL3BjaS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL21pcHMvZ3Q2NDEyMC93cnBwbWMvcGNpLmMKcmVuYW1lIHRvIGFyY2gvbWlwcy93cnBwbWMvcGNpLmMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy9yZXNldC5jIGIvYXJjaC9taXBzL3dycHBtYy9yZXNldC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL21pcHMvZ3Q2NDEyMC93cnBwbWMvcmVzZXQuYwpyZW5hbWUgdG8gYXJjaC9taXBzL3dycHBtYy9yZXNldC5jCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ3Q2NDEyMC93cnBwbWMvc2VyaWFsLmMgYi9hcmNoL21pcHMvd3JwcG1jL3NlcmlhbC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL21pcHMvZ3Q2NDEyMC93cnBwbWMvc2VyaWFsLmMKcmVuYW1lIHRvIGFyY2gvbWlwcy93cnBwbWMvc2VyaWFsLmMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy9zZXR1cC5jIGIvYXJjaC9taXBzL3dycHBtYy9zZXR1cC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL21pcHMvZ3Q2NDEyMC93cnBwbWMvc2V0dXAuYwpyZW5hbWUgdG8gYXJjaC9taXBzL3dycHBtYy9zZXR1cC5jCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ3Q2NDEyMC93cnBwbWMvdGltZS5jIGIvYXJjaC9taXBzL3dycHBtYy90aW1lLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy90aW1lLmMKcmVuYW1lIHRvIGFyY2gvbWlwcy93cnBwbWMvdGltZS5jCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvS2NvbmZpZyBiL2FyY2gvbW4xMDMwMC9LY29uZmlnCmluZGV4IDFjNDU2NWEuLjQ0NGI5ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9LY29uZmlnCisrKyBiL2FyY2gvbW4xMDMwMC9LY29uZmlnCkBAIC00Niw5ICs0Niw2IEBACiBjb25maWcgR0VORVJJQ19IV0VJR0hUCiAJZGVmX2Jvb2wgeQogCi1jb25maWcgR0VORVJJQ19USU1FCi0JZGVmX2Jvb2wgeQotCiBjb25maWcgR0VORVJJQ19CVUcKIAlkZWZfYm9vbCB5CiAKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9sb2NhbDY0LmggYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vbG9jYWw2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YzkzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vbG9jYWw2NC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9sb2NhbDY0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9LY29uZmlnIGIvYXJjaC9wYXJpc2MvS2NvbmZpZwppbmRleCAwNWEzNjZhLi45MDc0MTdkIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9LY29uZmlnCisrKyBiL2FyY2gvcGFyaXNjL0tjb25maWcKQEAgLTY2LDEwICs2Niw2IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCi1jb25maWcgR0VORVJJQ19USU1FCi0JYm9vbAotCWRlZmF1bHQgeQotCiBjb25maWcgVElNRV9MT1dfUkVTCiAJYm9vbAogCWRlcGVuZHMgb24gU01QCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9sb2NhbDY0LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9sb2NhbDY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjOTNiNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2xvY2FsNjQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWw2NC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2Zpcm13YXJlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvZmlybXdhcmUuYwppbmRleCA0YzI0N2UwLi5kZjk3MWZhIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvZmlybXdhcmUuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvZmlybXdhcmUuYwpAQCAtMTEyMyw3ICsxMTIzLDYgQEAKICAqLwogaW50IHBkY19pb2RjX3ByaW50KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0ciwgdW5zaWduZWQgY291bnQpCiB7Ci0Jc3RhdGljIGludCBwb3N4OyAgICAgICAgLyogZm9yIHNpbXBsZSBUQUItU2ltdWxhdGlvbi4uLiAqLwogCXVuc2lnbmVkIGludCBpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTExMzMsMTkgKzExMzIsMTIgQEAKIAkJCWlvZGNfZGJ1ZltpKzBdID0gJ1xyJzsKIAkJCWlvZGNfZGJ1ZltpKzFdID0gJ1xuJzsKIAkJCWkgKz0gMjsKLQkJCXBvc3ggPSAwOwogCQkJZ290byBwcmludDsKLQkJY2FzZSAnXHQnOgotCQkJd2hpbGUgKHBvc3ggJiA3KSB7Ci0JCQkJaW9kY19kYnVmW2ldID0gJyAnOwotCQkJCWkrKywgcG9zeCsrOwotCQkJfQotCQkJYnJlYWs7CiAJCWNhc2UgJ1xiJzoJLyogQlMgKi8KLQkJCXBvc3ggLT0gMjsKKwkJCWktLTsgLyogb3ZlcndyaXRlIGxhc3QgKi8KIAkJZGVmYXVsdDoKIAkJCWlvZGNfZGJ1ZltpXSA9IHN0cltpXTsKLQkJCWkrKywgcG9zeCsrOworCQkJaSsrOwogCQkJYnJlYWs7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvZnRyYWNlLmMKaW5kZXggOTg3NzM3Mi4uNWJlYjk3YiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9mdHJhY2UuYwpAQCAtODIsNyArODIsNyBAQAogCXVuc2lnbmVkIGxvbmcgcmV0OwogCiAJcG9wX3JldHVybl90cmFjZSgmdHJhY2UsICZyZXQpOwotCXRyYWNlLnJldHRpbWUgPSBjcHVfY2xvY2socmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CisJdHJhY2UucmV0dGltZSA9IGxvY2FsX2Nsb2NrKCk7CiAJZnRyYWNlX2dyYXBoX3JldHVybigmdHJhY2UpOwogCiAJaWYgKHVubGlrZWx5KCFyZXQpKSB7CkBAIC0xMjYsNyArMTI2LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWNhbGx0aW1lID0gY3B1X2Nsb2NrKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOworCWNhbGx0aW1lID0gbG9jYWxfY2xvY2soKTsKIAogCWlmIChwdXNoX3JldHVybl90cmFjZShvbGQsIGNhbGx0aW1lLAogCQkJCXNlbGZfYWRkciwgJnRyYWNlLmRlcHRoKSA9PSAtRUJVU1kpIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKaW5kZXggMzI4Nzc0Yi4uNjMxZTVhMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKQEAgLTI5LDkgKzI5LDYgQEAKIGNvbmZpZyBHRU5FUklDX0NNT1NfVVBEQVRFCiAJZGVmX2Jvb2wgeQogCi1jb25maWcgR0VORVJJQ19USU1FCi0JZGVmX2Jvb2wgeQotCiBjb25maWcgR0VORVJJQ19USU1FX1ZTWVNDQUxMCiAJZGVmX2Jvb2wgeQogCkBAIC0xMjAsNiArMTE3LDggQEAKIGNvbmZpZyBQUEMKIAlib29sCiAJZGVmYXVsdCB5CisJc2VsZWN0IE9GCisJc2VsZWN0IE9GX0ZMQVRUUkVFCiAJc2VsZWN0IEhBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQKIAlzZWxlY3QgSEFWRV9EWU5BTUlDX0ZUUkFDRQogCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX1RSQUNFUgpAQCAtMTMyLDcgKzEzMSw3IEBACiAJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCiAJc2VsZWN0IEhBVkVfS1JFVFBST0JFUwogCXNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LCi0Jc2VsZWN0IEhBVkVfTE1CCisJc2VsZWN0IEhBVkVfTUVNQkxPQ0sKIAlzZWxlY3QgSEFWRV9ETUFfQVRUUlMKIAlzZWxlY3QgSEFWRV9ETUFfQVBJX0RFQlVHCiAJc2VsZWN0IFVTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlmIFNNUApAQCAtMTQxLDYgKzE0MCw3IEBACiAJc2VsZWN0IEdFTkVSSUNfQVRPTUlDNjQgaWYgUFBDMzIKIAlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUwogCXNlbGVjdCBIQVZFX1JFR1NfQU5EX1NUQUNLX0FDQ0VTU19BUEkKKwlzZWxlY3QgSEFWRV9IV19CUkVBS1BPSU5UIGlmIFBFUkZfRVZFTlRTICYmIFBQQ19CT09LM1NfNjQKIAogY29uZmlnIEVBUkxZX1BSSU5USwogCWJvb2wKQEAgLTE3MiwxMCArMTcyLDYgQEAKIGNvbmZpZyBQUENfT0YKIAlkZWZfYm9vbCB5CiAKLWNvbmZpZyBPRgotCWRlZl9ib29sIHkKLQlzZWxlY3QgT0ZfRkxBVFRSRUUKLQogY29uZmlnIFBQQ19VREJHXzE2NTUwCiAJYm9vbAogCWRlZmF1bHQgbgpAQCAtMTk4LDEwICsxOTQsNiBAQAogCWRlZmF1bHQgeSBpZiBQTUFDX0FQTV9FTVUKIAlib29sCiAKLWNvbmZpZyBEVEMKLSAgICAgICBib29sCi0gICAgICAgZGVmYXVsdCB5Ci0KIGNvbmZpZyBERUZBVUxUX1VJTUFHRQogCWJvb2wKIAloZWxwCkBAIC0yMTgsNyArMjEwLDcgQEAKIGNvbmZpZyBBUkNIX1NVU1BFTkRfUE9TU0lCTEUKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBBREJfUE1VIHx8IFBQQ19FRklLQSB8fCBQUENfTElURTUyMDAgfHwgUFBDXzgzeHggfHwgXAotCQkgICBQUENfODV4eCB8fCBQUENfODZ4eAorCQkgICBQUENfODV4eCB8fCBQUENfODZ4eCB8fCBQUENfUFNFUklFUwogCiBjb25maWcgUFBDX0RDUl9OQVRJVkUKIAlib29sCkBAIC0zNTEsNyArMzQzLDcgQEAKIAogY29uZmlnIEtFWEVDCiAJYm9vbCAia2V4ZWMgc3lzdGVtIGNhbGwgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiAoUFBDX0JPT0szUyB8fCAoRlNMX0JPT0tFICYmICFTTVApKSAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIChQUENfQk9PSzNTIHx8IEZTTF9CT09LRSkgJiYgRVhQRVJJTUVOVEFMCiAJaGVscAogCSAga2V4ZWMgaXMgYSBzeXN0ZW0gY2FsbCB0aGF0IGltcGxlbWVudHMgdGhlIGFiaWxpdHkgdG8gc2h1dGRvd24geW91cgogCSAgY3VycmVudCBrZXJuZWwsIGFuZCB0byBzdGFydCBhbm90aGVyIGtlcm5lbC4gIEl0IGlzIGxpa2UgYSByZWJvb3QKQEAgLTM2OCw4ICszNjAsOCBAQAogCiBjb25maWcgQ1JBU0hfRFVNUAogCWJvb2wgIkJ1aWxkIGEga2R1bXAgY3Jhc2gga2VybmVsIgotCWRlcGVuZHMgb24gUFBDNjQgfHwgNnh4Ci0Jc2VsZWN0IFJFTE9DQVRBQkxFIGlmIFBQQzY0CisJZGVwZW5kcyBvbiBQUEM2NCB8fCA2eHggfHwgRlNMX0JPT0tFCisJc2VsZWN0IFJFTE9DQVRBQkxFIGlmIFBQQzY0IHx8IEZTTF9CT09LRQogCWhlbHAKIAkgIEJ1aWxkIGEga2VybmVsIHN1aXRhYmxlIGZvciB1c2UgYXMgYSBrZHVtcCBjYXB0dXJlIGtlcm5lbC4KIAkgIFRoZSBzYW1lIGtlcm5lbCBiaW5hcnkgY2FuIGJlIHVzZWQgYXMgcHJvZHVjdGlvbiBrZXJuZWwgYW5kIGR1bXAKQEAgLTQwMCw3ICszOTIsNyBAQAogCiBjb25maWcgU1BBUlNFX0lSUQogCWJvb2wgIlN1cHBvcnQgc3BhcnNlIGlycSBudW1iZXJpbmciCi0JZGVmYXVsdCB5CisJZGVmYXVsdCBuCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHNwYXJzZSBpcnFzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgZGlzdHJvCiAJICBrZXJuZWxzIHRoYXQgd2FudCB0byBkZWZpbmUgYSBoaWdoIENPTkZJR19OUl9DUFVTIHZhbHVlIGJ1dCBzdGlsbApAQCAtNDA5LDcgKzQwMSw3IEBACiAJICAoIFNwYXJzZSBJUlFzIGNhbiBhbHNvIGJlIGJlbmVmaWNpYWwgb24gTlVNQSBib3hlcywgYXMgdGhleSBzcHJlYWQKIAkgICAgb3V0IHRoZSBpcnFfZGVzY1tdIGFycmF5IGluIGEgbW9yZSBOVU1BLWZyaWVuZGx5IHdheS4gKQogCi0JICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBZLgorCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi4KIAogY29uZmlnIE5VTUEKIAlib29sICJOVU1BIHN1cHBvcnQiCkBAIC01NzgsMTQgKzU3MCw2IEBACiAJICB3aGVuIGRlYWxpbmcgd2l0aCBQT1dFUjUgY3B1cyBhdCBhIGNvc3Qgb2Ygc2xpZ2h0bHkgaW5jcmVhc2VkCiAJICBvdmVyaGVhZCBpbiBzb21lIHBsYWNlcy4gSWYgdW5zdXJlIHNheSBOIGhlcmUuCiAKLWNvbmZpZyBQUk9DX0RFVklDRVRSRUUKLQlib29sICJTdXBwb3J0IGZvciBkZXZpY2UgdHJlZSBpbiAvcHJvYyIKLQlkZXBlbmRzIG9uIFBST0NfRlMKLQloZWxwCi0JICBUaGlzIG9wdGlvbiBhZGRzIGEgZGV2aWNlLXRyZWUgZGlyZWN0b3J5IHVuZGVyIC9wcm9jIHdoaWNoIGNvbnRhaW5zCi0JICBhbiBpbWFnZSBvZiB0aGUgZGV2aWNlIHRyZWUgdGhhdCB0aGUga2VybmVsIGNvcGllcyBmcm9tIE9wZW4KLQkgIEZpcm13YXJlIG9yIG90aGVyIGJvb3QgZmlybXdhcmUuIElmIHVuc3VyZSwgc2F5IFkgaGVyZS4KLQogY29uZmlnIENNRExJTkVfQk9PTAogCWJvb2wgIkRlZmF1bHQgYm9vdGxvYWRlciBrZXJuZWwgYXJndW1lbnRzIgogCkBAIC02NjgsNyArNjUyLDcgQEAKIAogY29uZmlnIEdFTkVSSUNfSVNBX0RNQQogCWJvb2wKLQlkZXBlbmRzIG9uIFBQQzY0IHx8IFBPV0VSNCB8fCA2eHggJiYgIUNQTTIKKwlkZXBlbmRzIG9uIElTQV9ETUFfQVBJCiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBQUENfSU5ESVJFQ1RfUENJCkBAIC04OTcsNyArODgxLDcgQEAKIGNvbmZpZyBLRVJORUxfU1RBUlQKIAloZXggIlZpcnR1YWwgYWRkcmVzcyBvZiBrZXJuZWwgYmFzZSIgaWYgS0VSTkVMX1NUQVJUX0JPT0wKIAlkZWZhdWx0IFBBR0VfT0ZGU0VUIGlmIFBBR0VfT0ZGU0VUX0JPT0wKLQlkZWZhdWx0ICIweGMyMDAwMDAwIiBpZiBDUkFTSF9EVU1QCisJZGVmYXVsdCAiMHhjMjAwMDAwMCIgaWYgQ1JBU0hfRFVNUCAmJiAhUkVMT0NBVEFCTEUKIAlkZWZhdWx0ICIweGMwMDAwMDAwIgogCiBjb25maWcgUEhZU0lDQUxfU1RBUlRfQk9PTApAQCAtOTEwLDcgKzg5NCw3IEBACiAKIGNvbmZpZyBQSFlTSUNBTF9TVEFSVAogCWhleCAiUGh5c2ljYWwgYWRkcmVzcyB3aGVyZSB0aGUga2VybmVsIGlzIGxvYWRlZCIgaWYgUEhZU0lDQUxfU1RBUlRfQk9PTAotCWRlZmF1bHQgIjB4MDIwMDAwMDAiIGlmIFBQQ19TVERfTU1VICYmIENSQVNIX0RVTVAKKwlkZWZhdWx0ICIweDAyMDAwMDAwIiBpZiBQUENfU1REX01NVSAmJiBDUkFTSF9EVU1QICYmICFSRUxPQ0FUQUJMRQogCWRlZmF1bHQgIjB4MDAwMDAwMDAiCiAKIGNvbmZpZyBQSFlTSUNBTF9BTElHTgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL01ha2VmaWxlCmluZGV4IDQyZGNkM2Y0Li41ZDQyZjVlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL01ha2VmaWxlCkBAIC05MiwxMCArOTIsMTAgQEAKIGVsc2UKIAlLQlVJTERfQ0ZMQUdTICs9ICQoY2FsbCBjYy1vcHRpb24sLW10dW5lPXBvd2VyNCkKIGVuZGlmCi1lbHNlCi1MREZMQUdTX01PRFVMRQkrPSBhcmNoL3Bvd2VycGMvbGliL2NydHNhdnJlcy5vCiBlbmRpZgogCitLQlVJTERfTERGTEFHU19NT0RVTEUgKz0gYXJjaC9wb3dlcnBjL2xpYi9jcnRzYXZyZXMubworCiBpZmVxICgkKENPTkZJR19UVU5FX0NFTEwpLHkpCiAJS0JVSUxEX0NGTEFHUyArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tdHVuZT1jZWxsKQogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jYW55b25sYW5kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY2FueW9ubGFuZHMuZHRzCmluZGV4IGNkNTZiYjUuLjU4MDZlZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jYW55b25sYW5kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NhbnlvbmxhbmRzLmR0cwpAQCAtMjcwLDcgKzI3MCw3IEBACiAJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCiAJCQkJY3VycmVudC1zcGVlZCA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OwotCQkJCWludGVycnVwdHMgPSA8MHgxZCAweDQ+OworCQkJCWludGVycnVwdHMgPSA8MjggMHg0PjsKIAkJCX07CiAKIAkJCVVBUlQzOiBzZXJpYWxAZWY2MDA2MDAgewpAQCAtMjgxLDcgKzI4MSw3IEBACiAJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCiAJCQkJY3VycmVudC1zcGVlZCA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OwotCQkJCWludGVycnVwdHMgPSA8MHgxZSAweDQ+OworCQkJCWludGVycnVwdHMgPSA8MjkgMHg0PjsKIAkJCX07CiAKIAkJCUlJQzA6IGkyY0BlZjYwMDcwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2xhY2llci5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2xhY2llci5kdHMKaW5kZXggZDYyYTRmYi4uZTYxOGZjNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dsYWNpZXIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nbGFjaWVyLmR0cwpAQCAtMjU5LDcgKzI1OSw3IEBACiAJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCiAJCQkJY3VycmVudC1zcGVlZCA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OwotCQkJCWludGVycnVwdHMgPSA8MHgxZCAweDQ+OworCQkJCWludGVycnVwdHMgPSA8MjggMHg0PjsKIAkJCX07CiAKIAkJCVVBUlQzOiBzZXJpYWxAZWY2MDA2MDAgewpAQCAtMjcwLDcgKzI3MCw3IEBACiAJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCiAJCQkJY3VycmVudC1zcGVlZCA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OwotCQkJCWludGVycnVwdHMgPSA8MHgxZSAweDQ+OworCQkJCWludGVycnVwdHMgPSA8MjkgMHg0PjsKIAkJCX07CiAKIAkJCUlJQzA6IGkyY0BlZjYwMDcwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMwOHJkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMwOHJkYi5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk3ZWIyZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzA4cmRiLmR0cwpAQCAtMCwwICsxLDMwMyBAQAorLyoKKyAqIE1QQzgzMDhSREIgRGV2aWNlIFRyZWUgU291cmNlCisgKgorICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICogQ29weXJpZ2h0IDIwMTAgSWx5YSBZYW5vaywgRW1jcmFmdCBTeXN0ZW1zLCB5YW5va0BlbWNyYWZ0LmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworL2R0cy12MS87CisKKy8geworCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMDhyZGIiOworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDE+OworCisJYWxpYXNlcyB7CisJCWV0aGVybmV0MCA9ICZlbmV0MDsKKwkJZXRoZXJuZXQxID0gJmVuZXQxOworCQlzZXJpYWwwID0gJnNlcmlhbDA7CisJCXNlcmlhbDEgPSAmc2VyaWFsMTsKKwkJcGNpMCA9ICZwY2kwOworCX07CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCVBvd2VyUEMsODMwOEAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MHgwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWQtY2FjaGUtc2l6ZSA9IDwxNjM4ND47CisJCQlpLWNhY2hlLXNpemUgPSA8MTYzODQ+OworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwMDAwMDAwMCAweDA4MDAwMDAwPjsJLy8gMTI4TUIgYXQgMAorCX07CisKKwlsb2NhbGJ1c0BlMDAwNTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMxNS1lbGJjIiwgImZzbCxlbGJjIiwgInNpbXBsZS1idXMiOworCQlyZWcgPSA8MHhlMDAwNTAwMCAweDEwMDA+OworCQlpbnRlcnJ1cHRzID0gPDc3IDB4OD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCisJCS8vIENTMCBhbmQgQ1MxIGFyZSBzd2FwcGVkIHdoZW4KKwkJLy8gYm9vdGluZyBmcm9tIG5hbmQsIGJ1dCB0aGUKKwkJLy8gYWRkcmVzc2VzIGFyZSB0aGUgc2FtZS4KKwkJcmFuZ2VzID0gPDB4MCAweDAgMHhmZTAwMDAwMCAweDAwODAwMDAwCisJCSAgICAgICAgICAweDEgMHgwIDB4ZTA2MDAwMDAgMHgwMDAwMjAwMAorCQkgICAgICAgICAgMHgyIDB4MCAweGYwMDAwMDAwIDB4MDAwMjAwMDAKKwkJICAgICAgICAgIDB4MyAweDAgMHhmYTAwMDAwMCAweDAwMDA4MDAwPjsKKworCQlmbGFzaEAwLDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwweDAgMHgwIDB4ODAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQlkZXZpY2Utd2lkdGggPSA8MT47CisKKwkJCXUtYm9vdEAwIHsKKwkJCQlyZWcgPSA8MHgwIDB4NjAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisJCQllbnZANjAwMDAgeworCQkJCXJlZyA9IDwweDYwMDAwIDB4MTAwMDA+OworCQkJfTsKKwkJCWVudjFANzAwMDAgeworCQkJCXJlZyA9IDwweDcwMDAwIDB4MTAwMDA+OworCQkJfTsKKwkJCWtlcm5lbEA4MDAwMCB7CisJCQkJcmVnID0gPDB4ODAwMDAgMHgyMDAwMDA+OworCQkJfTsKKwkJCWR0YkAyODAwMDAgeworCQkJCXJlZyA9IDwweDI4MDAwMCAweDEwMDAwPjsKKwkJCX07CisJCQlyYW1kaXNrQDI5MDAwMCB7CisJCQkJcmVnID0gPDB4MjkwMDAwIDB4NTcwMDAwPjsKKwkJCX07CisJCX07CisKKwkJbmFuZEAxLDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTUtZmNtLW5hbmQiLAorCQkJICAgICAgICAgICAgICJmc2wsZWxiYy1mY20tbmFuZCI7CisJCQlyZWcgPSA8MHgxIDB4MCAweDIwMDA+OworCisJCQlqZmZzMkAwIHsKKwkJCQlyZWcgPSA8MHgwIDB4MjAwMDAwMD47CisJCQl9OworCQl9OworCX07CisKKwlpbW1yQGUwMDAwMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlkZXZpY2VfdHlwZSA9ICJzb2MiOworCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzE1LWltbXIiLCAic2ltcGxlLWJ1cyI7CisJCXJhbmdlcyA9IDwwIDB4ZTAwMDAwMDAgMHgwMDEwMDAwMD47CisJCXJlZyA9IDwweGUwMDAwMDAwIDB4MDAwMDAyMDA+OworCQlidXMtZnJlcXVlbmN5ID0gPDA+OworCisJCWkyY0AzMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwxNCAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlkZnNycjsKKwkJCXJ0Y0A2OCB7CisJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM5IjsKKwkJCQlyZWcgPSA8MHg2OD47CisJCQl9OworCQl9OworCisJCXVzYkAyMzAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbC11c2IyLWRyIjsKKwkJCXJlZyA9IDwweDIzMDAwIDB4MTAwMD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDM4IDB4OD47CisJCQlkcl9tb2RlID0gInBlcmlwaGVyYWwiOworCQkJcGh5X3R5cGUgPSAidWxwaSI7CisJCX07CisKKwkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKKworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiZVRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MzIgMHg4IDMzIDB4OCAzNCAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQl0YmktaGFuZGxlID0gPCAmdGJpMCA+OworCQkJcGh5LWhhbmRsZSA9IDwgJnBoeTIgPjsKKwkJCWZzbCxtYWdpYy1wYWNrZXQ7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47CisJCQkJCXJlZyA9IDwweDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CisJCX07CisKKwkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDM1IDB4OCAzNiAweDggMzcgMHg4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJdGJpLWhhbmRsZSA9IDwgJnRiaTEgPjsKKwkJCS8qIFZpdGVzc2UgNzM4NSBpc24ndCBvbiB0aGUgTURJTyBidXMgKi8KKwkJCWZpeGVkLWxpbmsgPSA8MSAxIDEwMDAgMCAwPjsKKwkJCWZzbCxtYWdpYy1wYWNrZXQ7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CisJCX07CisKKwkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgeworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJcmVnID0gPDB4NDUwMCAweDEwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MTMzMzMzMzMzPjsKKwkJCWludGVycnVwdHMgPSA8OSAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCX07CisKKwkJc2VyaWFsMTogc2VyaWFsQDQ2MDAgeworCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJcmVnID0gPDB4NDYwMCAweDEwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MTMzMzMzMzMzPjsKKwkJCWludGVycnVwdHMgPSA8MTAgMHg4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQl9OworCisJCWdwaW9AYzAwIHsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJZGV2aWNlX3R5cGUgPSAiZ3BpbyI7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzA4LWdwaW8iLCAiZnNsLG1wYzgzNDktZ3BpbyI7CisJCQlyZWcgPSA8MHhjMDAgMHgxOD47CisJCQlpbnRlcnJ1cHRzID0gPDc0IDB4OD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJfTsKKworCQkvKiBJUElDCisJCSAqIGludGVycnVwdHMgY2VsbCA9IDxpbnRyICMsIHNlbnNlPgorCQkgKiBzZW5zZSB2YWx1ZXMgbWF0Y2ggbGludXggSU9SRVNPVVJDRV9JUlFfKiBkZWZpbmVzOgorCQkgKiBzZW5zZSA9PSA4OiBMZXZlbCwgbG93IGFzc2VydGlvbgorCQkgKiBzZW5zZSA9PSAyOiBFZGdlLCBoaWdoLXRvLWxvdyBjaGFuZ2UKKwkJICovCisJCWlwaWM6IGludGVycnVwdC1jb250cm9sbGVyQDcwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxpcGljIjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJcmVnID0gPDB4NzAwIDB4MTAwPjsKKwkJCWRldmljZV90eXBlID0gImlwaWMiOworCQl9OworCisJCWlwaWMtbXNpQDdjMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxpcGljLW1zaSI7CisJCQlyZWcgPSA8MHg3YzAgMHg0MD47CisJCQltc2ktYXZhaWxhYmxlLXJhbmdlcyA9IDwweDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwgMHg0MyAweDgKKwkJCQkJMHg0ICAweDgKKwkJCQkJMHg1MSAweDgKKwkJCQkJMHg1MiAweDgKKwkJCQkJMHg1NiAweDgKKwkJCQkJMHg1NyAweDgKKwkJCQkJMHg1OCAweDgKKwkJCQkJMHg1OSAweDggPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CisJCX07CisKKwl9OworCisJcGNpMDogcGNpZUBlMDAwOTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMwOC1wY2llIiwgImZzbCxtcGM4MzE0LXBjaWUiOworCQlyZWcgPSA8MHhlMDAwOTAwMCAweDAwMDAxMDAwCisJCQkweGIwMDAwMDAwIDB4MDEwMDAwMDA+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YTAwMDAwMDAgMHhhMDAwMDAwMCAwIDB4MTAwMDAwMDAKKwkJICAgICAgICAgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4YjEwMDAwMDAgMCAweDAwODAwMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMD47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDIgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDMgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDQgJmlwaWMgMSA4PjsKKwkJaW50ZXJydXB0cyA9IDwweDEgMHg4PjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKworCQlwY2llQDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyZWcgPSA8MCAwIDAgMCAwPjsKKwkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhhMDAwMDAwMAorCQkJCSAgMHgwMjAwMDAwMCAwIDB4YTAwMDAwMDAKKwkJCQkgIDAgMHgxMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAwIDB4MDA4MDAwMDA+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDBhZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDBhZHMuZHRzCmluZGV4IDlkYzI5MjkuLjhkMWJmMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQwYWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0MGFkcy5kdHMKQEAgLTcxLDE0ICs3MSwxNCBAQAogCQl9OwogCiAJCW1lbW9yeS1jb250cm9sbGVyQDIwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wsODU0MC1tZW1vcnktY29udHJvbGxlciI7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQwLW1lbW9yeS1jb250cm9sbGVyIjsKIAkJCXJlZyA9IDwweDIwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJaW50ZXJydXB0cyA9IDwxOCAyPjsKIAkJfTsKIAogCQlMMjogbDItY2FjaGUtY29udHJvbGxlckAyMDAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCw4NTQwLWwyLWNhY2hlLWNvbnRyb2xsZXIiOworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0MC1sMi1jYWNoZS1jb250cm9sbGVyIjsKIAkJCXJlZyA9IDwweDIwMDAwIDB4MTAwMD47CiAJCQljYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcwogCQkJY2FjaGUtc2l6ZSA9IDwweDQwMDAwPjsJLy8gTDIsIDI1NksKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQxY2RzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQxY2RzLmR0cwppbmRleCA5YTNhZDMxLi44N2ZmOTY1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0MWNkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDFjZHMuZHRzCkBAIC03MSwxNCArNzEsMTQgQEAKIAkJfTsKIAogCQltZW1vcnktY29udHJvbGxlckAyMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLDg1NDEtbWVtb3J5LWNvbnRyb2xsZXIiOworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0MS1tZW1vcnktY29udHJvbGxlciI7CiAJCQlyZWcgPSA8MHgyMDAwIDB4MTAwMD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWludGVycnVwdHMgPSA8MTggMj47CiAJCX07CiAKIAkJTDI6IGwyLWNhY2hlLWNvbnRyb2xsZXJAMjAwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wsODU0MS1sMi1jYWNoZS1jb250cm9sbGVyIjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDEtbDItY2FjaGUtY29udHJvbGxlciI7CiAJCQlyZWcgPSA8MHgyMDAwMCAweDEwMDA+OwogCQkJY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKIAkJCWNhY2hlLXNpemUgPSA8MHg0MDAwMD47CS8vIEwyLCAyNTZLCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0NGRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQ0ZHMuZHRzCmluZGV4IDk4ZTk0YjQuLmQ3OTM5NjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQ0ZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQ0ZHMuZHRzCkBAIC03MywxNCArNzMsMTQgQEAKIAkJfTsKIAogCQltZW1vcnktY29udHJvbGxlckAyMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLDg1NDQtbWVtb3J5LWNvbnRyb2xsZXIiOworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0NC1tZW1vcnktY29udHJvbGxlciI7CiAJCQlyZWcgPSA8MHgyMDAwIDB4MTAwMD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWludGVycnVwdHMgPSA8MTggMj47CiAJCX07CiAKIAkJTDI6IGwyLWNhY2hlLWNvbnRyb2xsZXJAMjAwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wsODU0NC1sMi1jYWNoZS1jb250cm9sbGVyIjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDQtbDItY2FjaGUtY29udHJvbGxlciI7CiAJCQlyZWcgPSA8MHgyMDAwMCAweDEwMDA+OwogCQkJY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKIAkJCWNhY2hlLXNpemUgPSA8MHg0MDAwMD47CS8vIEwyLCAyNTZLCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0OGNkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0OGNkcy5kdHMKaW5kZXggMGY1MjYyNC4uYTE3YTU1NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDhjZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQ4Y2RzLmR0cwpAQCAtNzQsMTQgKzc0LDE0IEBACiAJCX07CiAKIAkJbWVtb3J5LWNvbnRyb2xsZXJAMjAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCw4NTQ4LW1lbW9yeS1jb250cm9sbGVyIjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDgtbWVtb3J5LWNvbnRyb2xsZXIiOwogCQkJcmVnID0gPDB4MjAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlpbnRlcnJ1cHRzID0gPDE4IDI+OwogCQl9OwogCiAJCUwyOiBsMi1jYWNoZS1jb250cm9sbGVyQDIwMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLDg1NDgtbDItY2FjaGUtY29udHJvbGxlciI7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LWwyLWNhY2hlLWNvbnRyb2xsZXIiOwogCQkJcmVnID0gPDB4MjAwMDAgMHgxMDAwPjsKIAkJCWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCiAJCQljYWNoZS1zaXplID0gPDB4ODAwMDA+OwkvLyBMMiwgNTEySwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NTVjZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NTVjZHMuZHRzCmluZGV4IDA2NWIyZjAuLjVjNTYxNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTU1Y2RzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU1NWNkcy5kdHMKQEAgLTcxLDE0ICs3MSwxNCBAQAogCQl9OwogCiAJCW1lbW9yeS1jb250cm9sbGVyQDIwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wsODU1NS1tZW1vcnktY29udHJvbGxlciI7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTU1LW1lbW9yeS1jb250cm9sbGVyIjsKIAkJCXJlZyA9IDwweDIwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJaW50ZXJydXB0cyA9IDwxOCAyPjsKIAkJfTsKIAogCQlMMjogbDItY2FjaGUtY29udHJvbGxlckAyMDAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCw4NTU1LWwyLWNhY2hlLWNvbnRyb2xsZXIiOworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU1NS1sMi1jYWNoZS1jb250cm9sbGVyIjsKIAkJCXJlZyA9IDwweDIwMDAwIDB4MTAwMD47CiAJCQljYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcwogCQkJY2FjaGUtc2l6ZSA9IDwweDQwMDAwPjsJLy8gTDIsIDI1NksKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTYwYWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTYwYWRzLmR0cwppbmRleCBhNWJiMWVjLi42ZTg1ZTFiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2MGFkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjBhZHMuZHRzCkBAIC03MSwxNCArNzEsMTQgQEAKIAkJfTsKIAogCQltZW1vcnktY29udHJvbGxlckAyMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLDg1NDAtbWVtb3J5LWNvbnRyb2xsZXIiOworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0MC1tZW1vcnktY29udHJvbGxlciI7CiAJCQlyZWcgPSA8MHgyMDAwIDB4MTAwMD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWludGVycnVwdHMgPSA8MTggMj47CiAJCX07CiAKIAkJTDI6IGwyLWNhY2hlLWNvbnRyb2xsZXJAMjAwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wsODU0MC1sMi1jYWNoZS1jb250cm9sbGVyIjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDAtbDItY2FjaGUtY29udHJvbGxlciI7CiAJCQlyZWcgPSA8MHgyMDAwMCAweDEwMDA+OwogCQkJY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKIAkJCWNhY2hlLXNpemUgPSA8MHg0MDAwMD47CS8vIEwyLCAyNTZLCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OG1kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OG1kcy5kdHMKaW5kZXggOTJmYjE3OC4uMzBjZjBlMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY4bWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OG1kcy5kdHMKQEAgLTEyNCwxNCArMTI0LDE0IEBACiAJCX07CiAKIAkJbWVtb3J5LWNvbnRyb2xsZXJAMjAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCw4NTY4LW1lbW9yeS1jb250cm9sbGVyIjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjgtbWVtb3J5LWNvbnRyb2xsZXIiOwogCQkJcmVnID0gPDB4MjAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlpbnRlcnJ1cHRzID0gPDE4IDI+OwogCQl9OwogCiAJCUwyOiBsMi1jYWNoZS1jb250cm9sbGVyQDIwMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLDg1NjgtbDItY2FjaGUtY29udHJvbGxlciI7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTY4LWwyLWNhY2hlLWNvbnRyb2xsZXIiOwogCQkJcmVnID0gPDB4MjAwMDAgMHgxMDAwPjsKIAkJCWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCiAJCQljYWNoZS1zaXplID0gPDB4ODAwMDA+OwkvLyBMMiwgNTEySwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AxMDIxbWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMTAyMW1kcy5kdHMKaW5kZXggN2ZhZDJkZjIuLmFkNWI4NTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMTAyMW1kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AxMDIxbWRzLmR0cwpAQCAtNjE3LDYgKzYxNyw3IEBACiAJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CiAJCWZzbCxxZS1udW0tcmlzY3MgPSA8MT47CiAJCWZzbCxxZS1udW0tc251bXMgPSA8Mjg+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOyAvKiBubyBmaXJtd2FyZSBsb2FkZWQgKi8KIAogCQlxZWljOiBpbnRlcnJ1cHQtY29udHJvbGxlckA4MCB7CiAJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMTAyMmRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMTAyMmRzLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmNiMTBiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AxMDIyZHMuZHRzCkBAIC0wLDAgKzEsNjMzIEBACisvKgorICogUDEwMjIgRFMgMzZCaXQgUGh5c2ljYWwgQWRkcmVzcyBNYXAgRGV2aWNlIFRyZWUgU291cmNlCisgKgorICogQ29weXJpZ2h0IDIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisvZHRzLXYxLzsKKy8geworCW1vZGVsID0gImZzbCxQMTAyMiI7CisJY29tcGF0aWJsZSA9ICJmc2wsUDEwMjJEUyI7CisJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJI3NpemUtY2VsbHMgPSA8Mj47CisJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisKKwlhbGlhc2VzIHsKKwkJZXRoZXJuZXQwID0gJmVuZXQwOworCQlldGhlcm5ldDEgPSAmZW5ldDE7CisJCXNlcmlhbDAgPSAmc2VyaWFsMDsKKwkJc2VyaWFsMSA9ICZzZXJpYWwxOworCQlwY2kwID0gJnBjaTA7CisJCXBjaTEgPSAmcGNpMTsKKwkJcGNpMiA9ICZwY2kyOworCX07CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCVBvd2VyUEMsUDEwMjJAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDB4MD47CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CisJCX07CisKKwkJUG93ZXJQQyxQMTAyMkAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MHgxPjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwl9OworCisJbG9jYWxidXNAZmZmZTA1MDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImZzbCxwMTAyMi1lbGJjIiwgImZzbCxlbGJjIiwgInNpbXBsZS1idXMiOworCQlyZWcgPSA8MCAweGZmZTA1MDAwIDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDwxOSAyPjsKKworCQlyYW5nZXMgPSA8MHgwIDB4MCAweGYgMHhlODAwMDAwMCAweDA4MDAwMDAwCisJCQkgIDB4MSAweDAgMHhmIDB4ZTAwMDAwMDAgMHgwODAwMDAwMAorCQkJICAweDIgMHgwIDB4MCAweGZmYTAwMDAwIDB4MDAwNDAwMDAKKwkJCSAgMHgzIDB4MCAweGYgMHhmZmRmMDAwMCAweDAwMDA4MDAwPjsKKworCQlub3JAMCwwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MHgwIDB4MCAweDgwMDAwMDA+OworCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJCWRldmljZS13aWR0aCA9IDwxPjsKKworCQkJcGFydGl0aW9uQDAgeworCQkJCXJlZyA9IDwweDAgMHgwMzAwMDAwMD47CisJCQkJbGFiZWwgPSAicmFtZGlzay1ub3IiOworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCXBhcnRpdGlvbkAzMDAwMDAwIHsKKwkJCQlyZWcgPSA8MHgwMzAwMDAwMCAweDAwZTAwMDAwPjsKKwkJCQlsYWJlbCA9ICJkaWFnbm9zdGljLW5vciI7CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJcGFydGl0aW9uQDNlMDAwMDAgeworCQkJCXJlZyA9IDwweDAzZTAwMDAwIDB4MDAyMDAwMDA+OworCQkJCWxhYmVsID0gImRpbmstbm9yIjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlwYXJ0aXRpb25ANDAwMDAwMCB7CisJCQkJcmVnID0gPDB4MDQwMDAwMDAgMHgwMDQwMDAwMD47CisJCQkJbGFiZWwgPSAia2VybmVsLW5vciI7CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJcGFydGl0aW9uQDQ0MDAwMDAgeworCQkJCXJlZyA9IDwweDA0NDAwMDAwIDB4MDNiMDAwMDA+OworCQkJCWxhYmVsID0gImpmZnMyLW5vciI7CisJCQl9OworCisJCQlwYXJ0aXRpb25AN2YwMDAwMCB7CisJCQkJcmVnID0gPDB4MDdmMDAwMDAgMHgwMDA4MDAwMD47CisJCQkJbGFiZWwgPSAiZHRiLW5vciI7CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJcGFydGl0aW9uQDdmODAwMDAgeworCQkJCXJlZyA9IDwweDA3ZjgwMDAwIDB4MDAwODAwMDA+OworCQkJCWxhYmVsID0gInUtYm9vdC1ub3IiOworCQkJCXJlYWQtb25seTsKKwkJCX07CisJCX07CisKKwkJbmFuZEAyLDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGVsYmMtZmNtLW5hbmQiOworCQkJcmVnID0gPDB4MiAweDAgMHg0MDAwMD47CisKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQlyZWcgPSA8MHgwIDB4MDIwMDAwMDA+OworCQkJCWxhYmVsID0gInUtYm9vdC1uYW5kIjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlwYXJ0aXRpb25AMjAwMDAwMCB7CisJCQkJcmVnID0gPDB4MDIwMDAwMDAgMHgxMDAwMDAwMD47CisJCQkJbGFiZWwgPSAiamZmczItbmFuZCI7CisJCQl9OworCisJCQlwYXJ0aXRpb25AMTIwMDAwMDAgeworCQkJCXJlZyA9IDwweDEyMDAwMDAwIDB4MTAwMDAwMDA+OworCQkJCWxhYmVsID0gInJhbWRpc2stbmFuZCI7CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJcGFydGl0aW9uQDIyMDAwMDAwIHsKKwkJCQlyZWcgPSA8MHgyMjAwMDAwMCAweDA0MDAwMDAwPjsKKwkJCQlsYWJlbCA9ICJrZXJuZWwtbmFuZCI7CisJCQl9OworCisJCQlwYXJ0aXRpb25AMjYwMDAwMDAgeworCQkJCXJlZyA9IDwweDI2MDAwMDAwIDB4MDEwMDAwMDA+OworCQkJCWxhYmVsID0gImR0Yi1uYW5kIjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlwYXJ0aXRpb25AMjcwMDAwMDAgeworCQkJCXJlZyA9IDwweDI3MDAwMDAwIDB4MTkwMDAwMDA+OworCQkJCWxhYmVsID0gInJlc2VydmVkLW5hbmQiOworCQkJfTsKKwkJfTsKKwl9OworCisJc29jQGZmZmUwMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJZGV2aWNlX3R5cGUgPSAic29jIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjItaW1tciIsICJzaW1wbGUtYnVzIjsKKwkJcmFuZ2VzID0gPDB4MCAweGYgMHhmZmUwMDAwMCAweDEwMDAwMD47CisJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBGaWxsZWQgb3V0IGJ5IHVib290LgorCisJCWVjbS1sYXdAMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxlY20tbGF3IjsKKwkJCXJlZyA9IDwweDAgMHgxMDAwPjsKKwkJCWZzbCxudW0tbGF3cyA9IDwxMj47CisJCX07CisKKwkJZWNtQDEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjItZWNtIiwgImZzbCxlY20iOworCQkJcmVnID0gPDB4MTAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwxNiAyPjsKKwkJfTsKKworCQltZW1vcnktY29udHJvbGxlckAyMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHAxMDIyLW1lbW9yeS1jb250cm9sbGVyIjsKKwkJCXJlZyA9IDwweDIwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MTYgMj47CisJCX07CisKKwkJaTJjQDMwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDB4MzAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQzIDI+OworCQkJZGZzcnI7CisJCX07CisKKwkJaTJjQDMxMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDB4MzEwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQzIDI+OworCQkJZGZzcnI7CisKKwkJCXdtODc3Njpjb2RlY0AxYSB7CisJCQkJY29tcGF0aWJsZSA9ICJ3bGYsd204Nzc2IjsKKwkJCQlyZWcgPSA8MHgxYT47CisJCQkJLyogTUNMSyBzb3VyY2UgaXMgYSBzdGFuZC1hbG9uZSBvc2NpbGxhdG9yICovCisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEyMjg4MDAwPjsKKwkJCX07CisJCX07CisKKwkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgeworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJcmVnID0gPDB4NDUwMCAweDEwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlpbnRlcnJ1cHRzID0gPDQyIDI+OworCQl9OworCisJCXNlcmlhbDE6IHNlcmlhbEA0NjAwIHsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDQ2MDAgMHgxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDw0MiAyPjsKKwkJfTsKKworCQlzcGlANzAwMCB7CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGVzcGkiOworCQkJcmVnID0gPDB4NzAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDw1OSAweDI+OworCQkJZXNwaSxudW0tc3MtYml0cyA9IDw0PjsKKwkJCW1vZGUgPSAiY3B1IjsKKworCQkJZnNsX20yNXA4MEAwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxlc3BpLWZsYXNoIjsKKwkJCQlyZWcgPSA8MD47CisJCQkJbGludXgsbW9kYWxpYXMgPSAiZnNsX20yNXA4MCI7CisJCQkJc3BpLW1heC1mcmVxdWVuY3kgPSA8NDAwMDAwMDA+OyAvKiBpbnB1dCBjbG9jayAqLworCQkJCXBhcnRpdGlvbkAwIHsKKwkJCQkJbGFiZWwgPSAidS1ib290LXNwaSI7CisJCQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDAxMDAwMDA+OworCQkJCQlyZWFkLW9ubHk7CisJCQkJfTsKKwkJCQlwYXJ0aXRpb25AMTAwMDAwIHsKKwkJCQkJbGFiZWwgPSAia2VybmVsLXNwaSI7CisJCQkJCXJlZyA9IDwweDAwMTAwMDAwIDB4MDA1MDAwMDA+OworCQkJCQlyZWFkLW9ubHk7CisJCQkJfTsKKwkJCQlwYXJ0aXRpb25ANjAwMDAwIHsKKwkJCQkJbGFiZWwgPSAiZHRiLXNwaSI7CisJCQkJCXJlZyA9IDwweDAwNjAwMDAwIDB4MDAxMDAwMDA+OworCQkJCQlyZWFkLW9ubHk7CisJCQkJfTsKKwkJCQlwYXJ0aXRpb25ANzAwMDAwIHsKKwkJCQkJbGFiZWwgPSAiZmlsZSBzeXN0ZW0tc3BpIjsKKwkJCQkJcmVnID0gPDB4MDA3MDAwMDAgMHgwMDkwMDAwMD47CisJCQkJfTsKKwkJCX07CisJCX07CisKKwkJc3NpQDE1MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2MTAtc3NpIjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlyZWcgPSA8MHgxNTAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDc1IDI+OworCQkJZnNsLG1vZGUgPSAiaTJzLXNsYXZlIjsKKwkJCWNvZGVjLWhhbmRsZSA9IDwmd204Nzc2PjsKKwkJCWZzbCxwbGF5YmFjay1kbWEgPSA8JmRtYTAwPjsKKwkJCWZzbCxjYXB0dXJlLWRtYSA9IDwmZG1hMDE+OworCQkJZnNsLGZpZm8tZGVwdGggPSA8MTY+OworCQl9OworCisJCWRtYUBjMzAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYSI7CisJCQlyZWcgPSA8MHhjMzAwIDB4ND47CisJCQlyYW5nZXMgPSA8MHgwIDB4YzEwMCAweDIwMD47CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZG1hMDA6IGRtYS1jaGFubmVsQDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDc2IDI+OworCQkJfTsKKwkJCWRtYTAxOiBkbWEtY2hhbm5lbEA4MCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDc3IDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDEwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CisJCQkJaW50ZXJydXB0cyA9IDw3OCAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDE4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OworCQkJCWludGVycnVwdHMgPSA8NzkgMj47CisJCQl9OworCQl9OworCisJCWdwaW86IGdwaW8tY29udHJvbGxlckBmMDAwIHsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1ncGlvIjsKKwkJCXJlZyA9IDwweGYwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw0NyAweDI+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQl9OworCisJCUwyOiBsMi1jYWNoZS1jb250cm9sbGVyQDIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHAxMDIyLWwyLWNhY2hlLWNvbnRyb2xsZXIiOworCQkJcmVnID0gPDB4MjAwMDAgMHgxMDAwPjsKKwkJCWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQljYWNoZS1zaXplID0gPDB4NDAwMDA+OyAvLyBMMiwgMjU2SworCQkJaW50ZXJydXB0cyA9IDwxNiAyPjsKKwkJfTsKKworCQlkbWFAMjEzMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hIjsKKwkJCXJlZyA9IDwweDIxMzAwIDB4ND47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjExMDAgMHgyMDA+OworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWRtYS1jaGFubmVsQDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIwIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDgwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OworCQkJCWludGVycnVwdHMgPSA8MjEgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAMTAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwyPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIyIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDE4MCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CisJCQkJaW50ZXJydXB0cyA9IDwyMyAyPjsKKwkJCX07CisJCX07CisKKwkJdXNiQDIyMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbC11c2IyLWRyIjsKKwkJCXJlZyA9IDwweDIyMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDI4IDB4Mj47CisJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKKwkJfTsKKworCQltZGlvQDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxldHNlYzItbWRpbyI7CisJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDAgMHhiMDAzMCAweDQ+OworCisJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJaW50ZXJydXB0cyA9IDwzIDE+OworCQkJCXJlZyA9IDwweDE+OworCQkJfTsKKwkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQlpbnRlcnJ1cHRzID0gPDkgMT47CisJCQkJcmVnID0gPDB4Mj47CisJCQl9OworCQl9OworCisJCW1kaW9AMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGV0c2VjMi1tZGlvIjsKKwkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMCAweGIxMDMwIDB4ND47CisJCX07CisKKwkJZW5ldDA6IGV0aGVybmV0QEIwMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImZzbCxldHNlYzIiOworCQkJZnNsLG51bV9yeF9xdWV1ZXMgPSA8MHg4PjsKKwkJCWZzbCxudW1fdHhfcXVldWVzID0gPDB4OD47CisJCQlmc2wsbWFnaWMtcGFja2V0OworCQkJZnNsLHdha2Utb24tZmlsZXI7CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWZpeGVkLWxpbmsgPSA8MSAxIDEwMDAgMCAwPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisJCQlxdWV1ZS1ncm91cEAweworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJCXJlZyA9IDwweEIwMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CisJCQl9OworCQkJcXVldWUtZ3JvdXBAMXsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCQlyZWcgPSA8MHhCNDAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MTcgMiAxOCAyIDI0IDI+OworCQkJfTsKKwkJfTsKKworCQllbmV0MTogZXRoZXJuZXRAQjEwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGV0c2VjMiI7CisJCQlmc2wsbnVtX3J4X3F1ZXVlcyA9IDwweDg+OworCQkJZnNsLG51bV90eF9xdWV1ZXMgPSA8MHg4PjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJZml4ZWQtbGluayA9IDwxIDEgMTAwMCAwIDA+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKwkJCXF1ZXVlLWdyb3VwQDB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkJcmVnID0gPDB4QjEwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKKwkJCX07CisJCQlxdWV1ZS1ncm91cEAxeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJCXJlZyA9IDwweEI1MDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDw1MSAyIDUyIDIgNjcgMj47CisJCQl9OworCQl9OworCisJCXNkaGNpQDJlMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHAxMDIyLWVzZGhjIiwgImZzbCxlc2RoYyI7CisJCQlyZWcgPSA8MHgyZTAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDw3MiAweDI+OworCQkJZnNsLHNkaGNpLWF1dG8tY21kMTI7CisJCQkvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCX07CisKKwkJY3J5cHRvQDMwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHNlYzMuMyIsICJmc2wsc2VjMy4xIiwgImZzbCxzZWMzLjAiLAorCQkJCSAgICAgImZzbCxzZWMyLjQiLCAiZnNsLHNlYzIuMiIsICJmc2wsc2VjMi4xIiwKKwkJCQkgICAgICJmc2wsc2VjMi4wIjsKKwkJCXJlZyA9IDwweDMwMDAwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0cyA9IDw0NSAyIDU4IDI+OworCQkJZnNsLG51bS1jaGFubmVscyA9IDw0PjsKKwkJCWZzbCxjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKKwkJCWZzbCxleGVjLXVuaXRzLW1hc2sgPSA8MHg5N2M+OworCQkJZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwweDNhMzBhYmY+OworCQl9OworCisJCXNhdGFAMTgwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODUzNi1zYXRhIiwgImZzbCxwcS1zYXRhIjsKKwkJCXJlZyA9IDwweDE4MDAwIDB4MTAwMD47CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJaW50ZXJydXB0cyA9IDw3NCAweDI+OworCQl9OworCisJCXNhdGFAMTkwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODUzNi1zYXRhIiwgImZzbCxwcS1zYXRhIjsKKwkJCXJlZyA9IDwweDE5MDAwIDB4MTAwMD47CisJCQljZWxsLWluZGV4ID0gPDI+OworCQkJaW50ZXJydXB0cyA9IDw0MSAweDI+OworCQl9OworCisJCXBvd2VyQGUwMDcweworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODUzNi1wbWMiLCAiZnNsLG1wYzg1NDgtcG1jIjsKKwkJCXJlZyA9IDwweGUwMDcwIDB4MjA+OworCQl9OworCisJCWRpc3BsYXlAMTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsZGl1IiwgImZzbCxwMTAyMi1kaXUiOworCQkJcmVnID0gPDB4MTAwMDAgMTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDY0IDI+OworCQl9OworCisJCXRpbWVyQDQxMTAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1waWMtZ2xvYmFsLXRpbWVyIjsKKwkJCXJlZyA9IDwweDQxMTAwIDB4MjA0PjsKKwkJCWludGVycnVwdHMgPSA8MHhmNyAweDI+OworCQl9OworCisJCW1waWM6IHBpY0A0MDAwMCB7CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDwweDQwMDAwIDB4NDAwMDA+OworCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKKwkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKKwkJfTsKKworCQltc2lANDE2MDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjItbXNpIiwgImZzbCxtcGljLW1zaSI7CisJCQlyZWcgPSA8MHg0MTYwMCAweDgwPjsKKwkJCW1zaS1hdmFpbGFibGUtcmFuZ2VzID0gPDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwKKwkJCQkweGUwIDAKKwkJCQkweGUxIDAKKwkJCQkweGUyIDAKKwkJCQkweGUzIDAKKwkJCQkweGU0IDAKKwkJCQkweGU1IDAKKwkJCQkweGU2IDAKKwkJCQkweGU3IDA+OworCQl9OworCisJCWdsb2JhbC11dGlsaXRpZXNAZTAwMDAgewkvL2dsb2JhbCB1dGlsaXRpZXMgYmxvY2sKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHAxMDIyLWd1dHMiOworCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKKwkJCWZzbCxoYXMtcnN0Y3I7CisJCX07CisJfTsKKworCXBjaTA6IHBjaWVAZmZmZTA5MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjItcGNpZSI7CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJcmVnID0gPDB4ZiAweGZmZTA5MDAwIDAgMHgxMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhhMDAwMDAwMCAweGMgMHgyMDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkJICAweDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhmIDB4ZmZjMTAwMDAgMHgwIDB4MTAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OworCQlpbnRlcnJ1cHRzID0gPDE2IDI+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCS8qIElEU0VMIDB4MCAqLworCQkJMDAwMCAwIDAgMSAmbXBpYyA0IDEKKwkJCTAwMDAgMCAwIDIgJm1waWMgNSAxCisJCQkwMDAwIDAgMCAzICZtcGljIDYgMQorCQkJMDAwMCAwIDAgNCAmbXBpYyA3IDEKKwkJCT47CisJCXBjaWVAMCB7CisJCQlyZWcgPSA8MHgwIDB4MCAweDAgMHgwIDB4MD47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4ZTAwMDAwMDAKKwkJCQkgIDB4MjAwMDAwMCAweDAgMHhlMDAwMDAwMAorCQkJCSAgMHgwIDB4MjAwMDAwMDAKKworCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDAgMHgxMDAwMDA+OworCQl9OworCX07CisKKwlwY2kxOiBwY2llQGZmZmUwYTAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLHAxMDIyLXBjaWUiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCXJlZyA9IDwweGYgMHhmZmUwYTAwMCAwIDB4MTAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAgMHhjIDB4NDAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKKwkJCSAgMHgxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZiAweGZmYzIwMDAwIDB4MCAweDEwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKKwkJaW50ZXJydXB0cyA9IDwxNiAyPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAgPSA8CisJCQkvKiBJRFNFTCAweDAgKi8KKwkJCTAwMDAgMCAwIDEgJm1waWMgMCAxCisJCQkwMDAwIDAgMCAyICZtcGljIDEgMQorCQkJMDAwMCAwIDAgMyAmbXBpYyAyIDEKKwkJCTAwMDAgMCAwIDQgJm1waWMgMyAxCisJCQk+OworCQlwY2llQDAgeworCQkJcmVnID0gPDB4MCAweDAgMHgwIDB4MCAweDA+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGUwMDAwMDAwCisJCQkJICAweDIwMDAwMDAgMHgwIDB4ZTAwMDAwMDAKKwkJCQkgIDB4MCAweDIwMDAwMDAwCisKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCSAgMHgwIDB4MTAwMDAwPjsKKwkJfTsKKwl9OworCisKKwlwY2kyOiBwY2llQGZmZmUwYjAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLHAxMDIyLXBjaWUiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCXJlZyA9IDwweGYgMHhmZmUwYjAwMCAwIDB4MTAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHhjIDB4MDAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKKwkJCSAgMHgxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZiAweGZmYzAwMDAwIDB4MCAweDEwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKKwkJaW50ZXJydXB0cyA9IDwxNiAyPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAgPSA8CisJCQkvKiBJRFNFTCAweDAgKi8KKwkJCTAwMDAgMCAwIDEgJm1waWMgOCAxCisJCQkwMDAwIDAgMCAyICZtcGljIDkgMQorCQkJMDAwMCAwIDAgMyAmbXBpYyAxMCAxCisJCQkwMDAwIDAgMCA0ICZtcGljIDExIDEKKwkJCT47CisJCXBjaWVAMCB7CisJCQlyZWcgPSA8MHgwIDB4MCAweDAgMHgwIDB4MD47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4ZTAwMDAwMDAKKwkJCQkgIDB4MjAwMDAwMCAweDAgMHhlMDAwMDAwMAorCQkJCSAgMHgwIDB4MjAwMDAwMDAKKworCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDAgMHgxMDAwMDA+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BkbTM2MG5nLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wZG0zNjBuZy5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRkZmE1YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wZG0zNjBuZy5kdHMKQEAgLTAsMCArMSw0MTAgQEAKKy8qCisgKiBEZXZpY2UgVHJlZSBTb3VyY2UgZm9yIElGTSBQRE0zNjBORy4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOSAtIDIwMTAgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZy4KKyAqIEFuYXRvbGlqIEd1c3RzY2hpbiA8YWd1c3RAZGVueC5kZT4KKyAqCisgKiBCYXNlZCBvbiBNUEM1MTIxRSBBRFMgZHRzLgorICogQ29weXJpZ2h0IDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworL2R0cy12MS87CisKKy8geworCW1vZGVsID0gInBkbTM2MG5nIjsKKwljb21wYXRpYmxlID0gImlmbSxwZG0zNjBuZyI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisKKwlhbGlhc2VzIHsKKwkJZXRoZXJuZXQwID0gJmV0aDA7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw1MTIxQDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDB4MjA+OwkvLyAzMiBieXRlcworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MHgyMD47CS8vIDMyIGJ5dGVzCisJCQlkLWNhY2hlLXNpemUgPSA8MHg4MDAwPjsJLy8gTDEsIDMySworCQkJaS1jYWNoZS1zaXplID0gPDB4ODAwMD47CS8vIEwxLCAzMksKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDw0OTUwMDAwMD47Ly8gNDkuNSBNSHogKGNzYi80KQorCQkJYnVzLWZyZXF1ZW5jeSA9IDwxOTgwMDAwMDA+OwkvLyAxOTggTUh6IGNzYiBidXMKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzOTYwMDAwMDA+OwkvLyAzOTYgTUh6IHBwYyBjb3JlCisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4MjAwMDAwMDA+OwkvLyA1MTJNQiBhdCAwCisJfTsKKworCW5mY0A0MDAwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtbmZjIjsKKwkJcmVnID0gPDB4NDAwMDAwMDAgMHgxMDAwMDA+OworCQlpbnRlcnJ1cHRzID0gPDB4NiAweDg+OworCQkjYWRkcmVzcy1jZWxscyA9IDwweDE+OworCQkjc2l6ZS1jZWxscyA9IDwweDE+OworCQliYW5rLXdpZHRoID0gPDB4MT47CisJCWNoaXBzID0gPDB4MT47CisKKwkJcGFydGl0aW9uQDAgeworCQkJbGFiZWwgPSAibmFuZDAiOworCQkJcmVnID0gPDB4MCAweDQwMDAwMDAwPjsKKwkJfTsKKwl9OworCisJc3JhbUA1MDAwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtc3JhbSI7CisJCXJlZyA9IDwweDUwMDAwMDAwIDB4MjAwMDA+OwkvLyAxMjhLIGF0IDB4NTAwMDAwMDAKKwl9OworCisJbG9jYWxidXNAODAwMDAwMjAgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWxvY2FsYnVzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyZWcgPSA8MHg4MDAwMDAyMCAweDQwPjsKKworCQlyYW5nZXMgPSA8MHgwIDB4MCAweGYwMDAwMDAwIDB4MTAwMDAwMDAgICAvKiBGbGFzaCAqLworCQkJICAweDIgMHgwIDB4NTAwNDAwMDAgMHgwMDAyMDAwMD47IC8qIENTMjogTVJBTSAqLworCisJCWZsYXNoQDAsMCB7CisJCQljb21wYXRpYmxlID0gImFtZCxzMjlnbDAxZ3AiLCAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwwIDB4MDAwMDAwMDAgMHgwODAwMDAwMAorCQkJICAgICAgIDAgMHgwODAwMDAwMCAweDA4MDAwMDAwPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQliYW5rLXdpZHRoID0gPDQ+OworCQkJZGV2aWNlLXdpZHRoID0gPDI+OworCisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAidS1ib290IjsKKwkJCQlyZWcgPSA8MHgwMDAwMDAwMCAweDAwMDgwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCQkJcGFydGl0aW9uQDgwMDAwIHsKKwkJCQlsYWJlbCA9ICJlbnZpcm9ubWVudCI7CisJCQkJcmVnID0gPDB4MDAwODAwMDAgMHgwMDA4MDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKwkJCXBhcnRpdGlvbkAxMDAwMDAgeworCQkJCWxhYmVsID0gInNwbGFzaC1pbWFnZSI7CisJCQkJcmVnID0gPDB4MDAxMDAwMDAgMHgwMDA4MDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKwkJCXBhcnRpdGlvbkAxODAwMDAgeworCQkJCWxhYmVsID0gImRldmljZS10cmVlIjsKKwkJCQlyZWcgPSA8MHgwMDE4MDAwMCAweDAwMDQwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AMWMwMDAwIHsKKwkJCQlsYWJlbCA9ICJrZXJuZWwiOworCQkJCXJlZyA9IDwweDAwMWMwMDAwIDB4MDA1MDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA2YzAwMDAgeworCQkJCWxhYmVsID0gImZpbGVzeXN0ZW0iOworCQkJCXJlZyA9IDwweDAwNmMwMDAwIDB4MDc5NDAwMDA+OworCQkJfTsKKwkJfTsKKworCQltcmFtMEAyLDAgeworCQkJY29tcGF0aWJsZSA9ICJtdGQtcmFtIjsKKwkJCXJlZyA9IDwyIDB4MDAwMDAgMHgxMDAwMD47CisJCQliYW5rLXdpZHRoID0gPDI+OworCQl9OworCisJCW1yYW0xQDIsMTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtdGQtcmFtIjsKKwkJCXJlZyA9IDwyIDB4MDEwMDAwIDB4MTAwMDA+OworCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJfTsKKwl9OworCisJc29jQDgwMDAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1pbW1yIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQlyYW5nZXMgPSA8MHgwIDB4ODAwMDAwMDAgMHg0MDAwMDA+OworCQlyZWcgPSA8MHg4MDAwMDAwMCAweDQwMDAwMD47CisJCWJ1cy1mcmVxdWVuY3kgPSA8NjYwMDAwMDA+OwkvLyA2NiBNSHogaXBzIGJ1cworCisJCS8vIElQSUMKKwkJLy8gaW50ZXJydXB0cyBjZWxsID0gPGludHIgIywgc2Vuc2U+CisJCS8vIHNlbnNlIHZhbHVlcyBtYXRjaCBsaW51eCBJT1JFU09VUkNFX0lSUV8qIGRlZmluZXM6CisJCS8vIHNlbnNlID09IDg6IExldmVsLCBsb3cgYXNzZXJ0aW9uCisJCS8vIHNlbnNlID09IDI6IEVkZ2UsIGhpZ2gtdG8tbG93IGNoYW5nZQorCQkvLworCQlpcGljOiBpbnRlcnJ1cHQtY29udHJvbGxlckBjMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1pcGljIiwgImZzbCxpcGljIjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJcmVnID0gPDB4YzAwIDB4MTAwPjsKKwkJfTsKKworCQlydGNAYTAwIHsJLy8gUmVhbCB0aW1lIGNsb2NrCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXJ0YyI7CisJCQlyZWcgPSA8MHhhMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw3OSAweDggODAgMHg4PjsKKwkJfTsKKworCQlyZXNldEBlMDAgewkvLyBSZXNldCBtb2R1bGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtcmVzZXQiOworCQkJcmVnID0gPDB4ZTAwIDB4MTAwPjsKKwkJfTsKKworCQljbG9ja0BmMDAgewkvLyBDbG9jayBjb250cm9sCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWNsb2NrIjsKKwkJCXJlZyA9IDwweGYwMCAweDEwMD47CisJCX07CisKKwkJcG1jQDEwMDB7CS8vUG93ZXIgTWFuYWdlbWVudCBDb250cm9sbGVyCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXBtYyI7CisJCQlyZWcgPSA8MHgxMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8ODMgMHgyPjsKKwkJfTsKKworCQlncGlvQDExMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1ncGlvIjsKKwkJCXJlZyA9IDwweDExMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw3OCAweDg+OworCQl9OworCisJCWNhbkAxMzAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtbXNjYW4iOworCQkJaW50ZXJydXB0cyA9IDwxMiAweDg+OworCQkJcmVnID0gPDB4MTMwMCAweDgwPjsKKwkJfTsKKworCQljYW5AMTM4MCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLW1zY2FuIjsKKwkJCWludGVycnVwdHMgPSA8MTMgMHg4PjsKKwkJCXJlZyA9IDwweDEzODAgMHg4MD47CisJCX07CisKKwkJaTJjQDE3MDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtaTJjIjsKKwkJCXJlZyA9IDwweDE3MDAgMHgyMD47CisJCQlpbnRlcnJ1cHRzID0gPDB4OSAweDg+OworCQkJZnNsLHByZXNlcnZlLWNsb2NraW5nOworCisJCQllZXByb21ANTAgeworCQkJCWNvbXBhdGlibGUgPSAiYXQsMjRjMDEiOworCQkJCXJlZyA9IDwweDUwPjsKKwkJCX07CisKKwkJCXJ0Y0A2OCB7CisJCQkJY29tcGF0aWJsZSA9ICJzdG0sbTQxdDAwIjsKKwkJCQlyZWcgPSA8MHg2OD47CisJCQl9OworCQl9OworCisJCWkyY0AxNzQwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWkyYyI7CisJCQlyZWcgPSA8MHgxNzQwIDB4MjA+OworCQkJaW50ZXJydXB0cyA9IDwweGIgMHg4PjsKKwkJCWZzbCxwcmVzZXJ2ZS1jbG9ja2luZzsKKwkJfTsKKworCQlpMmNjb250cm9sQDE3NjAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1pMmMtY3RybCI7CisJCQlyZWcgPSA8MHgxNzYwIDB4OD47CisJCX07CisKKwkJYXhlQDIwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1heGUiOworCQkJcmVnID0gPDB4MjAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQyIDB4OD47CisJCX07CisKKwkJZGlzcGxheUAyMTAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtZGl1IjsKKwkJCXJlZyA9IDwweDIxMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw2NCAweDg+OworCQl9OworCisJCWNhbkAyMzAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtbXNjYW4iOworCQkJaW50ZXJydXB0cyA9IDw5MCAweDg+OworCQkJcmVnID0gPDB4MjMwMCAweDgwPjsKKwkJfTsKKworCQljYW5AMjM4MCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLW1zY2FuIjsKKwkJCWludGVycnVwdHMgPSA8OTEgMHg4PjsKKwkJCXJlZyA9IDwweDIzODAgMHg4MD47CisJCX07CisKKwkJdml1QDI0MDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS12aXUiOworCQkJcmVnID0gPDB4MjQwMCAweDQwMD47CisJCQlpbnRlcnJ1cHRzID0gPDY3IDB4OD47CisJCX07CisKKwkJbWRpb0AyODAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtZmVjLW1kaW8iOworCQkJcmVnID0gPDB4MjgwMCAweDIwMD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcGh5OiBldGhlcm5ldC1waHlAMCB7CisJCQkJY29tcGF0aWJsZSA9ICJzbXNjLGxhbjg3MDAiOworCQkJCXJlZyA9IDwweDFmPjsKKwkJCX07CisJCX07CisKKwkJZXRoMDogZXRoZXJuZXRAMjgwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWZlYyI7CisJCQlyZWcgPSA8MHgyODAwIDB4MjAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDw0IDB4OD47CisJCQlwaHktaGFuZGxlID0gPCAmcGh5ID47CisJCX07CisKKwkJLy8gVVNCMSB1c2luZyBleHRlcm5hbCBVTFBJIFBIWQorCQl1c2JAMzAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXVzYjItZHIiOworCQkJcmVnID0gPDB4MzAwMCAweDYwMD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDw0MyAweDg+OworCQkJZHJfbW9kZSA9ICJob3N0IjsKKwkJCXBoeV90eXBlID0gInVscGkiOworCQl9OworCisJCS8vIFVTQjAgdXNpbmcgaW50ZXJuYWwgVVRNSSBQSFkKKwkJdXNiQDQwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS11c2IyLWRyIjsKKwkJCXJlZyA9IDwweDQwMDAgMHg2MDA+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8NDQgMHg4PjsKKwkJCWRyX21vZGUgPSAib3RnIjsKKwkJCXBoeV90eXBlID0gInV0bWlfd2lkZSI7CisJCQlmc2wsaW52ZXJ0LXB3ci1mYXVsdDsKKwkJfTsKKworCQkvLyBJTyBjb250cm9sCisJCWlvY3RsQGEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1pb2N0bCI7CisJCQlyZWcgPSA8MHhBMDAwIDB4MTAwMD47CisJCX07CisKKwkJLy8gNTEyeCBQU0NzIGFyZSBub3QgNTJ4eCBQU0NzIGNvbXBhdGlibGUKKwkJc2VyaWFsQDExMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtcHNjLXVhcnQiLCAiZnNsLG1wYzUxMjEtcHNjIjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlyZWcgPSA8MHgxMTAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQwIDB4OD47CisJCQlmc2wscngtZmlmby1zaXplID0gPDE2PjsKKwkJCWZzbCx0eC1maWZvLXNpemUgPSA8MTY+OworCQl9OworCisJCXNlcmlhbEAxMTEwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXBzYy11YXJ0IiwgImZzbCxtcGM1MTIxLXBzYyI7CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJcmVnID0gPDB4MTExMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw0MCAweDg+OworCQkJZnNsLHJ4LWZpZm8tc2l6ZSA9IDwxNj47CisJCQlmc2wsdHgtZmlmby1zaXplID0gPDE2PjsKKwkJfTsKKworCQlzZXJpYWxAMTEyMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1wc2MtdWFydCIsICJmc2wsbXBjNTEyMS1wc2MiOworCQkJY2VsbC1pbmRleCA9IDwyPjsKKwkJCXJlZyA9IDwweDExMjAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NDAgMHg4PjsKKwkJCWZzbCxyeC1maWZvLXNpemUgPSA8MTY+OworCQkJZnNsLHR4LWZpZm8tc2l6ZSA9IDwxNj47CisJCX07CisKKwkJc2VyaWFsQDExMzAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtcHNjLXVhcnQiLCAiZnNsLG1wYzUxMjEtcHNjIjsKKwkJCWNlbGwtaW5kZXggPSA8Mz47CisJCQlyZWcgPSA8MHgxMTMwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQwIDB4OD47CisJCQlmc2wscngtZmlmby1zaXplID0gPDE2PjsKKwkJCWZzbCx0eC1maWZvLXNpemUgPSA8MTY+OworCQl9OworCisJCXNlcmlhbEAxMTQwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXBzYy11YXJ0IiwgImZzbCxtcGM1MTIxLXBzYyI7CisJCQljZWxsLWluZGV4ID0gPDQ+OworCQkJcmVnID0gPDB4MTE0MDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw0MCAweDg+OworCQkJZnNsLHJ4LWZpZm8tc2l6ZSA9IDwxNj47CisJCQlmc2wsdHgtZmlmby1zaXplID0gPDE2PjsKKwkJfTsKKworCQlzZXJpYWxAMTE2MDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1wc2MtdWFydCIsICJmc2wsbXBjNTEyMS1wc2MiOworCQkJY2VsbC1pbmRleCA9IDw2PjsKKwkJCXJlZyA9IDwweDExNjAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NDAgMHg4PjsKKwkJCWZzbCxyeC1maWZvLXNpemUgPSA8MTY+OworCQkJZnNsLHR4LWZpZm8tc2l6ZSA9IDwxNj47CisJCX07CisKKwkJc2VyaWFsQDExODAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtcHNjLXVhcnQiLCAiZnNsLG1wYzUxMjEtcHNjIjsKKwkJCWNlbGwtaW5kZXggPSA8OD47CisJCQlyZWcgPSA8MHgxMTgwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQwIDB4OD47CisJCQlmc2wscngtZmlmby1zaXplID0gPDE2PjsKKwkJCWZzbCx0eC1maWZvLXNpemUgPSA8MTY+OworCQl9OworCisJCXNlcmlhbEAxMUIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXBzYy11YXJ0IiwgImZzbCxtcGM1MTIxLXBzYyI7CisJCQljZWxsLWluZGV4ID0gPDExPjsKKwkJCXJlZyA9IDwweDExQjAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NDAgMHg4PjsKKwkJCWZzbCxyeC1maWZvLXNpemUgPSA8MTY+OworCQkJZnNsLHR4LWZpZm8tc2l6ZSA9IDwxNj47CisJCX07CisKKwkJcHNjZmlmb0AxMWYwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXBzYy1maWZvIjsKKwkJCXJlZyA9IDwweDExZjAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NDAgMHg4PjsKKwkJfTsKKworCQlzcGlAMTE5MDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1wc2Mtc3BpIiwgImZzbCxtcGM1MTIxLXBzYyI7CisJCQljZWxsLWluZGV4ID0gPDk+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXJlZyA9IDwweDExOTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NDAgMHg4PjsKKwkJCWZzbCxyeC1maWZvLXNpemUgPSA8MTY+OworCQkJZnNsLHR4LWZpZm8tc2l6ZSA9IDwxNj47CisKKwkJCS8vIDc4NDUgdG91Y2ggc2NyZWVuIGNvbnRyb2xsZXIKKwkJCXRzQDAgeworCQkJCWNvbXBhdGlibGUgPSAidGksYWRzNzg0NiI7CisJCQkJcmVnID0gPDB4MD47CisJCQkJc3BpLW1heC1mcmVxdWVuY3kgPSA8MzAwMDAwMD47CisJCQkJLy8gcGVuIGlycSBpcyBHUElPMjUKKwkJCQlpbnRlcnJ1cHRzID0gPDc4IDB4OD47CisJCQl9OworCQl9OworCisJCWRtYUAxNDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWRtYSI7CisJCQlyZWcgPSA8MHgxNDAwMCAweDE4MDA+OworCQkJaW50ZXJydXB0cyA9IDw2NSAweDg+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3N0eHNzYTg1NTUuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3N0eHNzYTg1NTUuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZWZkNDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc3R4c3NhODU1NS5kdHMKQEAgLTAsMCArMSwzODAgQEAKKy8qCisgKiBNUEM4NTU1LWJhc2VkIFNUeCBHUDMgRGV2aWNlIFRyZWUgU291cmNlCisgKgorICogQ29weXJpZ2h0IDIwMDYsIDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIENvcHlyaWdodCAyMDEwIFNpbGljb24gVHVybmtleSBFeHByZXNzIExMQy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy9kdHMtdjEvOworCisvIHsKKwltb2RlbCA9ICJzdHgsZ3AzIjsKKyAgICAgICAgY29tcGF0aWJsZSA9ICJzdHgsZ3AzLTg1NjAiLCAic3R4LGdwMyI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisKKwlhbGlhc2VzIHsKKwkJZXRoZXJuZXQwID0gJmVuZXQwOworCQlldGhlcm5ldDEgPSAmZW5ldDE7CisJCXNlcmlhbDAgPSAmc2VyaWFsMDsKKwkJc2VyaWFsMSA9ICZzZXJpYWwxOworCQlwY2kwID0gJnBjaTA7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw4NTU1QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwweDA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJZC1jYWNoZS1zaXplID0gPDB4ODAwMD47CQkvLyBMMSwgMzJLCisJCQlpLWNhY2hlLXNpemUgPSA8MHg4MDAwPjsJCS8vIEwxLCAzMksKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsJLy8gIDMzIE1IeiwgZnJvbSB1Ym9vdAorCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJLy8gMTY2IE1IegorCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkvLyA4MjUgTUh6LCBmcm9tIHVib290CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4MTAwMDAwMDA+OworCX07CisKKwlzb2M4NTU1QGUwMDAwMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlkZXZpY2VfdHlwZSA9ICJzb2MiOworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQlyYW5nZXMgPSA8MHgwIDB4ZTAwMDAwMDAgMHgxMDAwMDA+OworCQlidXMtZnJlcXVlbmN5ID0gPDA+OworCisJCWVjbS1sYXdAMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxlY20tbGF3IjsKKwkJCXJlZyA9IDwweDAgMHgxMDAwPjsKKwkJCWZzbCxudW0tbGF3cyA9IDw4PjsKKwkJfTsKKworCQllY21AMTAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTU1LWVjbSIsICJmc2wsZWNtIjsKKwkJCXJlZyA9IDwweDEwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MTcgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQltZW1vcnktY29udHJvbGxlckAyMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NTUtbWVtb3J5LWNvbnRyb2xsZXIiOworCQkJcmVnID0gPDB4MjAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDE4IDI+OworCQl9OworCisJCUwyOiBsMi1jYWNoZS1jb250cm9sbGVyQDIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NTUtbDItY2FjaGUtY29udHJvbGxlciI7CisJCQlyZWcgPSA8MHgyMDAwMCAweDEwMDA+OworCQkJY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWNhY2hlLXNpemUgPSA8MHg0MDAwMD47CS8vIEwyLCAyNTZLCisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MTYgMj47CisJCX07CisKKwkJaTJjQDMwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDB4MzAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQzIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlkZnNycjsKKwkJfTsKKworCQlkbWFAMjEzMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NTUtZG1hIiwgImZzbCxlbG9wbHVzLWRtYSI7CisJCQlyZWcgPSA8MHgyMTMwMCAweDQ+OworCQkJcmFuZ2VzID0gPDB4MCAweDIxMTAwIDB4MjAwPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkbWEtY2hhbm5lbEAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTU1LWRtYS1jaGFubmVsIiwKKwkJCQkJCSJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjAgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NTUtZG1hLWNoYW5uZWwiLAorCQkJCQkJImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjEgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAMTAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTU1LWRtYS1jaGFubmVsIiwKKwkJCQkJCSJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMiAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NTUtZG1hLWNoYW5uZWwiLAorCQkJCQkJImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIzIDI+OworCQkJfTsKKwkJfTsKKworCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gIlRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8NSAxPjsKKwkJCQkJcmVnID0gPDB4Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlANCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47CisJCQkJCXJlZyA9IDwweDQ+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CisJCX07CisKKwkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OworCQl9OworCisJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDQ1MDAgMHgxMDA+OyAJLy8gcmVnIGJhc2UsIHNpemUKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgCS8vIHNob3VsZCB3ZSBmaWxsIGluIGluIHVib290PworCQkJaW50ZXJydXB0cyA9IDw0MiAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCisJCXNlcmlhbDE6IHNlcmlhbEA0NjAwIHsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDQ2MDAgMHgxMDA+OwkvLyByZWcgYmFzZSwgc2l6ZQorCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAJLy8gc2hvdWxkIHdlIGZpbGwgaW4gaW4gdWJvb3Q/CisJCQlpbnRlcnJ1cHRzID0gPDQyIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJY3J5cHRvQDMwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHNlYzIuMCI7CisJCQlyZWcgPSA8MHgzMDAwMCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8NDUgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWZzbCxudW0tY2hhbm5lbHMgPSA8ND47CisJCQlmc2wsY2hhbm5lbC1maWZvLWxlbiA9IDwyND47CisJCQlmc2wsZXhlYy11bml0cy1tYXNrID0gPDB4N2U+OworCQkJZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwweDAxMDEwZWJmPjsKKwkJfTsKKworCQltcGljOiBwaWNANDAwMDAgeworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQlyZWcgPSA8MHg0MDAwMCAweDQwMDAwPjsKKwkJCWNvbXBhdGlibGUgPSAiY2hycCxvcGVuLXBpYyI7CisJCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CisJCX07CisKKwkJY3BtQDkxOWMwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTU1LWNwbSIsICJmc2wsY3BtMiI7CisJCQlyZWcgPSA8MHg5MTljMCAweDMwPjsKKwkJCXJhbmdlczsKKworCQkJbXVyYW1AODAwMDAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJCXJhbmdlcyA9IDwweDAgMHg4MDAwMCAweDEwMDAwPjsKKworCQkJCWRhdGFAMCB7CisJCQkJCWNvbXBhdGlibGUgPSAiZnNsLGNwbS1tdXJhbS1kYXRhIjsKKwkJCQkJcmVnID0gPDB4MCAweDIwMDAgMHg5MDAwIDB4MTAwMD47CisJCQkJfTsKKwkJCX07CisKKwkJCWJyZ0A5MTlmMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU1NS1icmciLAorCQkJCSAgICAgICAgICAgICAiZnNsLGNwbTItYnJnIiwKKwkJCQkgICAgICAgICAgICAgImZzbCxjcG0tYnJnIjsKKwkJCQlyZWcgPSA8MHg5MTlmMCAweDEwIDB4OTE1ZjAgMHgxMD47CisJCQl9OworCisJCQljcG1waWM6IHBpY0A5MGMwMCB7CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDQ2IDI+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCXJlZyA9IDwweDkwYzAwIDB4ODA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NTUtY3BtLXBpYyIsICJmc2wsY3BtMi1waWMiOworCQkJfTsKKwkJfTsKKwl9OworCisJcGNpMDogcGNpQGUwMDA4MDAwIHsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4MWY4MDAgMHgwIDB4MCAweDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPAorCisJCQkvKiBJRFNFTCAweDEwICovCisJCQkweDgwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgwIDB4MQorCQkJMHg4MDAwIDB4MCAweDAgMHgyICZtcGljIDB4MSAweDEKKwkJCTB4ODAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDIgMHgxCisJCQkweDgwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgzIDB4MQorCisJCQkvKiBJRFNFTCAweDExICovCisJCQkweDg4MDAgMHgwIDB4MCAweDEgJm1waWMgMHgwIDB4MQorCQkJMHg4ODAwIDB4MCAweDAgMHgyICZtcGljIDB4MSAweDEKKwkJCTB4ODgwMCAweDAgMHgwIDB4MyAmbXBpYyAweDIgMHgxCisJCQkweDg4MDAgMHgwIDB4MCAweDQgJm1waWMgMHgzIDB4MQorCisJCQkvKiBJRFNFTCAweDEyIChTbG90IDEpICovCisJCQkweDkwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgwIDB4MQorCQkJMHg5MDAwIDB4MCAweDAgMHgyICZtcGljIDB4MSAweDEKKwkJCTB4OTAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDIgMHgxCisJCQkweDkwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgzIDB4MQorCisJCQkvKiBJRFNFTCAweDEzIChTbG90IDIpICovCisJCQkweDk4MDAgMHgwIDB4MCAweDEgJm1waWMgMHgxIDB4MQorCQkJMHg5ODAwIDB4MCAweDAgMHgyICZtcGljIDB4MiAweDEKKwkJCTB4OTgwMCAweDAgMHgwIDB4MyAmbXBpYyAweDMgMHgxCisJCQkweDk4MDAgMHgwIDB4MCAweDQgJm1waWMgMHgwIDB4MQorCisJCQkvKiBJRFNFTCAweDE0IChTbG90IDMpICovCisJCQkweGEwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgyIDB4MQorCQkJMHhhMDAwIDB4MCAweDAgMHgyICZtcGljIDB4MyAweDEKKwkJCTB4YTAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDAgMHgxCisJCQkweGEwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgxIDB4MQorCisJCQkvKiBJRFNFTCAweDE1IChTbG90IDQpICovCisJCQkweGE4MDAgMHgwIDB4MCAweDEgJm1waWMgMHgzIDB4MQorCQkJMHhhODAwIDB4MCAweDAgMHgyICZtcGljIDB4MCAweDEKKwkJCTB4YTgwMCAweDAgMHgwIDB4MyAmbXBpYyAweDEgMHgxCisJCQkweGE4MDAgMHgwIDB4MCAweDQgJm1waWMgMHgyIDB4MQorCisJCQkvKiBCdXMgMSAoVHVuZHJhIEJyaWRnZSkgKi8KKwkJCS8qIElEU0VMIDB4MTIgKElTQSBicmlkZ2UpICovCisJCQkweDE5MDAwIDB4MCAweDAgMHgxICZtcGljIDB4MCAweDEKKwkJCTB4MTkwMDAgMHgwIDB4MCAweDIgJm1waWMgMHgxIDB4MQorCQkJMHgxOTAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDIgMHgxCisJCQkweDE5MDAwIDB4MCAweDAgMHg0ICZtcGljIDB4MyAweDE+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJaW50ZXJydXB0cyA9IDwyNCAyPjsKKwkJYnVzLXJhbmdlID0gPDAgMD47CisJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkJICAweDEwMDAwMDAgMHgwIDB4MCAweGUyMDAwMDAwIDB4MCAweDEwMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw2NjY2NjY2Nj47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJcmVnID0gPDB4ZTAwMDgwMDAgMHgxMDAwPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0MC1wY2kiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCisJCWk4MjU5QDE5MDAwIHsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJZGV2aWNlX3R5cGUgPSAiaW50ZXJydXB0LWNvbnRyb2xsZXIiOworCQkJcmVnID0gPDB4MTkwMDAgMHgwIDB4MCAweDAgMHgxPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCWNvbXBhdGlibGUgPSAiY2hycCxpaWMiOworCQkJaW50ZXJydXB0cyA9IDwxPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JnBjaTA+OworCQl9OworCX07CisKKwlwY2kxOiBwY2lAZTAwMDkwMDAgeworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwKKworCQkJLyogSURTRUwgMHgxNSAqLworCQkJMHhhODAwIDB4MCAweDAgMHgxICZtcGljIDB4YiAweDEKKwkJCTB4YTgwMCAweDAgMHgwIDB4MiAmbXBpYyAweGIgMHgxCisJCQkweGE4MDAgMHgwIDB4MCAweDMgJm1waWMgMHhiIDB4MQorCQkJMHhhODAwIDB4MCAweDAgMHg0ICZtcGljIDB4YiAweDE+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJaW50ZXJydXB0cyA9IDwyNSAyPjsKKwkJYnVzLXJhbmdlID0gPDAgMD47CisJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAgMHhhMDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkJICAweDEwMDAwMDAgMHgwIDB4MCAweGUzMDAwMDAwIDB4MCAweDEwMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw2NjY2NjY2Nj47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJcmVnID0gPDB4ZTAwMDkwMDAgMHgxMDAwPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0MC1wY2kiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDAuZHRzCmluZGV4IDcxMzQ3NTMuLjE1Y2E3MzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTQwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU0MC5kdHMKQEAgLTI4OSw3ICsyODksMTQgQEAKIAkJaW50ZXJydXB0LW1hcCA9IDwKIAkJCQkvKiBJRFNFTCAyOCAqLwogCQkJCSAweGUwMDAgMCAwIDEgJm1waWMgMiAxCi0JCQkJIDB4ZTAwMCAwIDAgMiAmbXBpYyAzIDE+OworCQkJCSAweGUwMDAgMCAwIDIgJm1waWMgMyAxCisJCQkJIDB4ZTAwMCAwIDAgMyAmbXBpYyA2IDEKKwkJCQkgMHhlMDAwIDAgMCA0ICZtcGljIDUgMQorCisJCQkJLyogSURTRUwgMTEgKi8KKwkJCQkgMHg1ODAwIDAgMCAxICZtcGljIDYgMQorCQkJCSAweDU4MDAgMCAwIDIgJm1waWMgNSAxCisJCQkJID47CiAKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCWludGVycnVwdHMgPSA8MjQgMj47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU0MS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU0MS5kdHMKaW5kZXggYjMwZjYzNy4uZjQ5ZDA5MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDEuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTQxLmR0cwpAQCAtMzExLDcgKzMxMSwxNCBAQAogCQlpbnRlcnJ1cHQtbWFwID0gPAogCQkJCS8qIElEU0VMIDI4ICovCiAJCQkJIDB4ZTAwMCAwIDAgMSAmbXBpYyAyIDEKLQkJCQkgMHhlMDAwIDAgMCAyICZtcGljIDMgMT47CisJCQkJIDB4ZTAwMCAwIDAgMiAmbXBpYyAzIDEKKwkJCQkgMHhlMDAwIDAgMCAzICZtcGljIDYgMQorCQkJCSAweGUwMDAgMCAwIDQgJm1waWMgNSAxCisKKwkJCQkvKiBJRFNFTCAxMSAqLworCQkJCSAweDU4MDAgMCAwIDEgJm1waWMgNiAxCisJCQkJIDB4NTgwMCAwIDAgMiAmbXBpYyA1IDEKKwkJCQkgPjsKIAogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJaW50ZXJydXB0cyA9IDwyNCAyPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTQ4LWJpZ2ZsYXNoLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTQ4LWJpZ2ZsYXNoLmR0cwppbmRleCA2MWYyNWUxLi41ZGJiMzZlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU0OC1iaWdmbGFzaC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDgtYmlnZmxhc2guZHRzCkBAIC00NDIsNyArNDQyLDE0IEBACiAJCWludGVycnVwdC1tYXAgPSA8CiAJCQkJLyogSURTRUwgMjggKi8KIAkJCQkgMHhlMDAwIDAgMCAxICZtcGljIDIgMQotCQkJCSAweGUwMDAgMCAwIDIgJm1waWMgMyAxPjsKKwkJCQkgMHhlMDAwIDAgMCAyICZtcGljIDMgMQorCQkJCSAweGUwMDAgMCAwIDMgJm1waWMgNiAxCisJCQkJIDB4ZTAwMCAwIDAgNCAmbXBpYyA1IDEKKworCQkJCS8qIElEU0VMIDExICovCisJCQkJIDB4NTgwMCAwIDAgMSAmbXBpYyA2IDEKKwkJCQkgMHg1ODAwIDAgMCAyICZtcGljIDUgMQorCQkJCSA+OwogCiAJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQlpbnRlcnJ1cHRzID0gPDI0IDI+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDguZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDguZHRzCmluZGV4IDAyNTc1OWMuLmEwNTBhZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTQ4LmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU0OC5kdHMKQEAgLTQ0Miw3ICs0NDIsMTQgQEAKIAkJaW50ZXJydXB0LW1hcCA9IDwKIAkJCQkvKiBJRFNFTCAyOCAqLwogCQkJCSAweGUwMDAgMCAwIDEgJm1waWMgMiAxCi0JCQkJIDB4ZTAwMCAwIDAgMiAmbXBpYyAzIDE+OworCQkJCSAweGUwMDAgMCAwIDIgJm1waWMgMyAxCisJCQkJIDB4ZTAwMCAwIDAgMyAmbXBpYyA2IDEKKwkJCQkgMHhlMDAwIDAgMCA0ICZtcGljIDUgMQorCisJCQkJLyogSURTRUwgMTEgKi8KKwkJCQkgMHg1ODAwIDAgMCAxICZtcGljIDYgMQorCQkJCSAweDU4MDAgMCAwIDIgJm1waWMgNSAxCisJCQkJID47CiAKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCWludGVycnVwdHMgPSA8MjQgMj47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU1NS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU1NS5kdHMKaW5kZXggOTVlMjg3My4uODFiYWQ4YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NTUuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTU1LmR0cwpAQCAtMzExLDcgKzMxMSwxNCBAQAogCQlpbnRlcnJ1cHQtbWFwID0gPAogCQkJCS8qIElEU0VMIDI4ICovCiAJCQkJIDB4ZTAwMCAwIDAgMSAmbXBpYyAyIDEKLQkJCQkgMHhlMDAwIDAgMCAyICZtcGljIDMgMT47CisJCQkJIDB4ZTAwMCAwIDAgMiAmbXBpYyAzIDEKKwkJCQkgMHhlMDAwIDAgMCAzICZtcGljIDYgMQorCQkJCSAweGUwMDAgMCAwIDQgJm1waWMgNSAxCisKKwkJCQkvKiBJRFNFTCAxMSAqLworCQkJCSAweDU4MDAgMCAwIDEgJm1waWMgNiAxCisJCQkJIDB4NTgwMCAwIDAgMiAmbXBpYyA1IDEKKwkJCQkgPjsKIAogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJaW50ZXJydXB0cyA9IDwyNCAyPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTYwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTYwLmR0cwppbmRleCBmZjcwNTgwLi4yMmVjMzliIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU2MC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NjAuZHRzCkBAIC0zODIsNyArMzgyLDE0IEBACiAJCWludGVycnVwdC1tYXAgPSA8CiAJCQkJLyogSURTRUwgMjggKi8KIAkJCQkgMHhlMDAwIDAgMCAxICZtcGljIDIgMQotCQkJCSAweGUwMDAgMCAwIDIgJm1waWMgMyAxPjsKKwkJCQkgMHhlMDAwIDAgMCAyICZtcGljIDMgMQorCQkJCSAweGUwMDAgMCAwIDMgJm1waWMgNiAxCisJCQkJIDB4ZTAwMCAwIDAgNCAmbXBpYyA1IDEKKworCQkJCS8qIElEU0VMIDExICovCisJCQkJIDB4NTgwMCAwIDAgMSAmbXBpYyA2IDEKKwkJCQkgMHg1ODAwIDAgMCAyICZtcGljIDUgMQorCQkJCSA+OwogCiAJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQlpbnRlcnJ1cHRzID0gPDI0IDI+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTh4eC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtOHh4LmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmRhN2VjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTh4eC5kdHMKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBUUU04WFggRGV2aWNlIFRyZWUgU291cmNlCisgKgorICogSGVpa28gU2Nob2NoZXIgPGhzQGRlbnguZGU+CisgKiAyMDEwIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworL2R0cy12MS87CisKKy8geworCW1vZGVsID0gIlRRTTh4eCI7CisJY29tcGF0aWJsZSA9ICJ0cWMsdHFtOHh4IjsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwxPjsKKworCWFsaWFzZXMgeworCQlldGhlcm5ldDAgPSAmZXRoMDsKKwkJZXRoZXJuZXQxID0gJmV0aDE7CisJCW1kaW8xID0gJnBoeTE7CisJCXNlcmlhbDAgPSAmc21jMTsKKwl9OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlQb3dlclBDLDg2MEAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MHgwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDE2PjsJLy8gMTYgYnl0ZXMKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDE2PjsJLy8gMTYgYnl0ZXMKKwkJCWQtY2FjaGUtc2l6ZSA9IDwweDEwMDA+OwkJLy8gTDEsIDRLCisJCQlpLWNhY2hlLXNpemUgPSA8MHgxMDAwPjsJCS8vIEwxLCA0SworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OworCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8MTUgMj47CS8vIGRlY3JlbWVudGVyIGludGVycnVwdAorCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4MCAweDIwMDAwMDA+OworCX07CisKKwlsb2NhbGJ1c0BmZmYwMDEwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2MC1sb2NhbGJ1cyIsICJmc2wscHExLWxvY2FsYnVzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyZWcgPSA8MHhmZmYwMDEwMCAweDQwPjsKKworCQlyYW5nZXMgPSA8CisJCQkweDAgMHgwIDB4NDAwMDAwMDAgMHg4MDAwMDAKKwkJPjsKKworCQlmbGFzaEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDAgMCAweDgwMDAwMD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJYmFuay13aWR0aCA9IDw0PjsKKwkJCWRldmljZS13aWR0aCA9IDwyPjsKKwkJfTsKKwl9OworCisJc29jQGZmZjAwMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlkZXZpY2VfdHlwZSA9ICJzb2MiOworCQlyYW5nZXMgPSA8MHgwIDB4ZmZmMDAwMDAgMHgwMDAwNDAwMD47CisKKwkJcGh5MTogbWRpb0BlMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY2LWZlYy1tZGlvIiwgImZzbCxwcTEtZmVjLW1kaW8iOworCQkJcmVnID0gPDB4ZTAwIDB4MTg4PjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlQSFk6IGV0aGVybmV0LXBoeUBmIHsKKwkJCQlyZWcgPSA8MHhmPjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJfTsKKwkJfTsKKworCQlldGgxOiBldGhlcm5ldEBlMDAgeworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjYtZmVjLWVuZXQiLAorCQkJICAgICAgICAgICAgICJmc2wscHExLWZlYy1lbmV0IjsKKwkJCXJlZyA9IDwweGUwMCAweDE4OD47CisJCQlpbnRlcnJ1cHRzID0gPDMgMT47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OworCQkJcGh5LWhhbmRsZSA9IDwmUEhZPjsKKwkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MT47CisJCX07CisKKwkJUElDOiBwaWNAMCB7CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQlyZWcgPSA8MHgwIDB4MjQ+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODYwLXBpYyIsICJmc2wscHExLXBpYyI7CisJCX07CisKKwkJY3BtQDljMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODYwLWNwbSIsICJmc2wsY3BtMSI7CisJCQlyYW5nZXM7CisJCQlyZWcgPSA8MHg5YzAgMHg0MD47CisJCQlicmctZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDI+OwkvLyBjcG0gZXJyb3IgaW50ZXJydXB0CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZDUE1fUElDPjsKKworCQkJbXVyYW1AMjAwMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkJcmFuZ2VzID0gPDB4MCAweDIwMDAgMHgyMDAwPjsKKworCQkJCWRhdGFAMCB7CisJCQkJCWNvbXBhdGlibGUgPSAiZnNsLGNwbS1tdXJhbS1kYXRhIjsKKwkJCQkJcmVnID0gPDB4MCAweDIwMDA+OworCQkJCX07CisJCQl9OworCisJCQlicmdAOWYwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjAtYnJnIiwKKwkJCQkJICAgICAiZnNsLGNwbTEtYnJnIiwKKwkJCQkJICAgICAiZnNsLGNwbS1icmciOworCQkJCXJlZyA9IDwweDlmMCAweDEwPjsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQl9OworCisJCQlDUE1fUElDOiBwaWNAOTMwIHsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJCWludGVycnVwdHMgPSA8NSAyIDAgMj47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKKwkJCQlyZWcgPSA8MHg5MzAgMHgyMD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODYwLWNwbS1waWMiLAorCQkJCSAgICAgICAgICAgICAiZnNsLGNwbTEtcGljIjsKKwkJCX07CisKKworCQkJc21jMTogc2VyaWFsQGE4MCB7CisJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjAtc21jLXVhcnQiLAorCQkJCSAgICAgICAgICAgICAiZnNsLGNwbTEtc21jLXVhcnQiOworCQkJCXJlZyA9IDwweGE4MCAweDEwIDB4M2U4MCAweDQwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDQ+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JkNQTV9QSUM+OworCQkJCWZzbCxjcG0tYnJnID0gPDE+OworCQkJCWZzbCxjcG0tY29tbWFuZCA9IDwweDkwPjsKKwkJCX07CisKKwkJCWV0aDA6IGV0aGVybmV0QGEwMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODYwLXNjYy1lbmV0IiwKKwkJCQkgICAgICAgICAgICAgImZzbCxjcG0xLXNjYy1lbmV0IjsKKwkJCQlyZWcgPSA8MHhhMDAgMHgxOCAweDNjMDAgMHgxMDA+OworCQkJCWludGVycnVwdHMgPSA8MzA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JkNQTV9QSUM+OworCQkJCWZzbCxjcG0tY29tbWFuZCA9IDwwMDAwPjsKKwkJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDA+OworCQkJCWZpeGVkLWxpbmsgPSA8MCAwIDEwIDAgMD47CisJCQl9OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2RlZmNvbmZpZwppbmRleCBjZmViZWY5Li5kMzJmMzFhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2RlZmNvbmZpZwpAQCAtMTksNyArMTksOCBAQAogQ09ORklHX0ZTTF9FTUJfUEVSRk1PTj15CiBDT05GSUdfQk9PS0U9eQogQ09ORklHX0ZTTF9CT09LRT15Ci0jIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19QVEVfNjRCSVQ9eQorQ09ORklHX1BIWVNfNjRCSVQ9eQogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKQEAgLTI4LDcgKzI5LDcgQEAKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDMzI9eQogQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15CiBDT05GSUdfTU1VPXkKIENPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQpAQCAtMjM5LDYgKzI0MCw3IEBACiBDT05GSUdfTVBDODUzNl9EUz15CiBDT05GSUdfTVBDODV4eF9EUz15CiBDT05GSUdfTVBDODV4eF9SREI9eQorQ09ORklHX1AxMDIyX0RTPXkKIENPTkZJR19TT0NSQVRFUz15CiBDT05GSUdfS1NJODU2MD15CiBDT05GSUdfWEVTX01QQzg1eHg9eQpAQCAtMzExLDcgKzMxMyw3IEBACiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15CkBAIC0zMjEsNyArMzIzLDcgQEAKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQorQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTIKIENPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKIENPTkZJR19FWFRSQV9UQVJHRVRTPSIiCkBAIC0xMTIyLDE2ICsxMTI0LDEzIEBACiAjIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19TT1VORD15Ci1DT05GSUdfU09VTkRfT1NTX0NPUkU9eQotQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKKyMgQ09ORklHX1NPVU5EX09TU19DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9USU1FUj15CiBDT05GSUdfU05EX1BDTT15CiAjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfT1NTRU1VTD15Ci1DT05GSUdfU05EX01JWEVSX09TUz15Ci1DT05GSUdfU05EX1BDTV9PU1M9eQotQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CkBAIC0xMTQ1LDEyICsxMTQ0LDcgQEAKICMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfQUM5N19DT0RFQz15Ci1DT05GSUdfU05EX0RSSVZFUlM9eQotIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkUgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX1NORF9QQ0k9eQogIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKQEAgLTEyMTgsMTIgKzEyMTIsOCBAQAogIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfUFBDPXkKLUNPTkZJR19TTkRfVVNCPXkKLSMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1VTQl9VQTEwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVVNCX1VTWDJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BQQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAogQ09ORklHX0FDOTdfQlVTPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfc21wX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfc21wX2RlZmNvbmZpZwppbmRleCBmNTQ1MWQ4Li5mOTNkZTEwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X3NtcF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9zbXBfZGVmY29uZmlnCkBAIC0xOSw3ICsxOSw4IEBACiBDT05GSUdfRlNMX0VNQl9QRVJGTU9OPXkKIENPTkZJR19CT09LRT15CiBDT05GSUdfRlNMX0JPT0tFPXkKLSMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1BURV82NEJJVD15CitDT05GSUdfUEhZU182NEJJVD15CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CiBDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQpAQCAtMjksNyArMzAsNyBAQAogQ09ORklHX05SX0NQVVM9OAogQ09ORklHX1BQQzMyPXkKIENPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQogQ09ORklHX01NVT15CiBDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKQEAgLTI0Myw2ICsyNDQsNyBAQAogQ09ORklHX01QQzg1MzZfRFM9eQogQ09ORklHX01QQzg1eHhfRFM9eQogQ09ORklHX01QQzg1eHhfUkRCPXkKK0NPTkZJR19QMTAyMl9EUz15CiBDT05GSUdfU09DUkFURVM9eQogQ09ORklHX0tTSTg1NjA9eQogQ09ORklHX1hFU19NUEM4NXh4PXkKQEAgLTMxNiw3ICszMTgsNyBAQAogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQpAQCAtMzI2LDcgKzMyOCw3IEBACiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEyCiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgpAQCAtMTEyNywxNiArMTEyOSwxMyBAQAogIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfU09VTkQ9eQotQ09ORklHX1NPVU5EX09TU19DT1JFPXkKLUNPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CisjIENPTkZJR19TT1VORF9PU1NfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfU05EPXkKIENPTkZJR19TTkRfVElNRVI9eQogQ09ORklHX1NORF9QQ009eQogIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX09TU0VNVUw9eQotQ09ORklHX1NORF9NSVhFUl9PU1M9eQotQ09ORklHX1NORF9QQ01fT1NTPXkKLUNPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKKyMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldApAQCAtMTE1MCwxMiArMTE0OSw3IEBACiAjIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CiBDT05GSUdfU05EX0FDOTdfQ09ERUM9eQotQ09ORklHX1NORF9EUklWRVJTPXkKLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUM5N19QT1dFUl9TQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfUENJPXkKICMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CkBAIC0xMjIzLDEyICsxMjE3LDggQEAKICMgQ09ORklHX1NORF9WSVJUVU9TTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1BQQz15Ci1DT05GSUdfU05EX1VTQj15Ci0jIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9VU0JfVUExMDEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1VTQl9VU1gyWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QUEMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIENPTkZJR19BQzk3X0JVUz15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy90cW04eHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvdHFtOHh4X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWU2NTRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvdHFtOHh4X2RlZmNvbmZpZwpAQCAtMCwwICsxLDkzNCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjMQorIyBUdWUgTWFyIDIzIDA4OjIyOjE1IDIwMTAKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzh4eD15CisjIENPTkZJR180MHggaXMgbm90IHNldAorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHXzh4eD15CitDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX05SX0lSUVM9NTEyCitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CisjIENPTkZJR19QUENfVURCR18xNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CisjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CisjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FTUJFRERFRD15CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKKyMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CitDT05GSUdfU0xVQl9ERUJVRz15CitDT05GSUdfQ09NUEFUX0JSSz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19CQVNFX1NNQUxMPTEKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCREFGPXkKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0RFQURMSU5FPXkKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorQ09ORklHX0NQTTE9eQorIyBDT05GSUdfTVBDOFhYRkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NlhBRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODg1QURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FUDg4WEMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0FEREVSODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NR1NVVkQgaXMgbm90IHNldAorQ09ORklHX1RRTThYWD15CisKKyMKKyMgTVBDOHh4IENQTSBPcHRpb25zCisjCisKKyMKKyMgR2VuZXJpYyBNUEM4eHggT3B0aW9ucworIworQ09ORklHXzh4eF9DT1BZQkFDSz15CisjIENPTkZJR184eHhfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR184eHhfQ1BVNiBpcyBub3Qgc2V0CisjIENPTkZJR184eHhfQ1BVMTUgaXMgbm90IHNldAorQ09ORklHX05PX1VDT0RFX1BBVENIPXkKKyMgQ09ORklHX1VTQl9TT0ZfVUNPREVfUEFUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NQSV9VQ09ERV9QQVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1BJX1NNQzFfVUNPREVfUEFUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfUVVJQ0NfRU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKK0NPTkZJR19DUE09eQorIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX0haXzEwMD15CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTEwMAorQ09ORklHX1NDSEVEX0hSVElDSz15CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR184WFhfTUlOSU1BTF9GUEVNVT15CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19TUEFSU0VfSVJRPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfTUlHUkFUSU9OPXkKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19QUENfNEtfUEFHRVM9eQorIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgorIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX05FRURfRE1BX01BUF9TVEFURT15CitDT05GSUdfRlNMX1NPQz15CisjIENPTkZJR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0RPTUFJTlMgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1FTUEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4ODAwMDAwMDAKK0NPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKK0NPTkZJR19NVERfT0ZfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUF9PRj15CisjIENPTkZJR19NVERfQ0ZJX0ZMQUdBRE0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorQ09ORklHX09GX0ZMQVRUUkVFPXkKK0NPTkZJR19PRl9EWU5BTUlDPXkKK0NPTkZJR19PRl9ERVZJQ0U9eQorQ09ORklHX09GX01ESU89eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19EQVZJQ09NX1BIWT15CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfRklYRURfUEhZPXkKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAorQ09ORklHX0ZTX0VORVQ9eQorQ09ORklHX0ZTX0VORVRfSEFTX1NDQz15CitDT05GSUdfRlNfRU5FVF9IQVNfRkVDPXkKK0NPTkZJR19GU19FTkVUX01ESU9fRkVDPXkKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DUE09eQorQ09ORklHX1NFUklBTF9DUE1fQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5fUlRDPXkKKyMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKKyMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTE9HRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKK0NPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hNT04gaXMgbm90IHNldAorIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorQ09ORklHX1BQQ19DTE9DSz15CitDT05GSUdfUFBDX0xJQl9SSEVBUD15CisjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYWJzX2FkZHIuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9hYnNfYWRkci5oCmluZGV4IDk4MzI0YzUuLjVhYjBiNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9hYnNfYWRkci5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9hYnNfYWRkci5oCkBAIC0xMiw3ICsxMiw3IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9sbWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTY5LDcgKzY5LDcgQEAKICAqIExlZ2FjeSBpU2VyaWVzIEh5cGVydmlzb3IgY2FsbHMKICAqLwogI2RlZmluZSBpc2VyaWVzX2h2X2FkZHIodmlydGFkZHIpCVwKLQkoMHg4MDAwMDAwMDAwMDAwMDAwIHwgdmlydF90b19hYnModmlydGFkZHIpKQorCSgweDgwMDAwMDAwMDAwMDAwMDBVTCB8IHZpcnRfdG9fYWJzKHZpcnRhZGRyKSkKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfQUJTX0FERFJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2FzbS1jb21wYXQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9hc20tY29tcGF0LmgKaW5kZXggMjA0OGE2YS4uZGVjYWQ5NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2FzbS1jb21wYXQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYXNtLWNvbXBhdC5oCkBAIC0zMCw2ICszMCw3IEBACiAjZGVmaW5lIFBQQ19TVExDWAlzdHJpbmdpZnlfaW5fYyhzdGRjeC4pCiAjZGVmaW5lIFBQQ19DTlRMWkwJc3RyaW5naWZ5X2luX2MoY250bHpkKQogI2RlZmluZSBQUENfTFJfU1RLT0ZGCTE2CisjZGVmaW5lIFBQQ19NSU5fU1RLRlJNCTExMgogCiAvKiBNb3ZlIHRvIENSLCBzaW5nbGUtZW50cnkgb3B0aW1pemVkIHZlcnNpb24uIE9ubHkgYXZhaWxhYmxlCiAgKiBvbiBQT1dFUjQgYW5kIGxhdGVyLgpAQCAtNTUsNiArNTYsNyBAQAogI2RlZmluZSBQUENfQ05UTFpMCXN0cmluZ2lmeV9pbl9jKGNudGx6dykKICNkZWZpbmUgUFBDX01UT0NSRglzdHJpbmdpZnlfaW5fYyhtdGNyZikKICNkZWZpbmUgUFBDX0xSX1NUS09GRgk0CisjZGVmaW5lIFBQQ19NSU5fU1RLRlJNCTE2CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3BtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3BtLmgKaW5kZXggMDgzNWViOS4uZTUwMzIzZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwbS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcG0uaApAQCAtNyw2ICs3LDMwIEBACiAjaW5jbHVkZSA8bGludXgvb2YuaD4KIAogLyoKKyAqIFNQSSBQYXJhbWV0ZXIgUkFNIGNvbW1vbiB0byBRRSBhbmQgQ1BNLgorICovCitzdHJ1Y3Qgc3BpX3ByYW0geworCV9fYmUxNglyYmFzZTsJLyogUnggQnVmZmVyIGRlc2NyaXB0b3IgYmFzZSBhZGRyZXNzICovCisJX19iZTE2CXRiYXNlOwkvKiBUeCBCdWZmZXIgZGVzY3JpcHRvciBiYXNlIGFkZHJlc3MgKi8KKwl1OAlyZmNyOwkvKiBSeCBmdW5jdGlvbiBjb2RlICovCisJdTgJdGZjcjsJLyogVHggZnVuY3Rpb24gY29kZSAqLworCV9fYmUxNgltcmJscjsJLyogTWF4IHJlY2VpdmUgYnVmZmVyIGxlbmd0aCAqLworCV9fYmUzMglyc3RhdGU7CS8qIEludGVybmFsICovCisJX19iZTMyCXJkcDsJLyogSW50ZXJuYWwgKi8KKwlfX2JlMTYJcmJwdHI7CS8qIEludGVybmFsICovCisJX19iZTE2CXJiYzsJLyogSW50ZXJuYWwgKi8KKwlfX2JlMzIJcnh0bXA7CS8qIEludGVybmFsICovCisJX19iZTMyCXRzdGF0ZTsJLyogSW50ZXJuYWwgKi8KKwlfX2JlMzIJdGRwOwkvKiBJbnRlcm5hbCAqLworCV9fYmUxNgl0YnB0cjsJLyogSW50ZXJuYWwgKi8KKwlfX2JlMTYJdGJjOwkvKiBJbnRlcm5hbCAqLworCV9fYmUzMgl0eHRtcDsJLyogSW50ZXJuYWwgKi8KKwlfX2JlMzIJcmVzOwkvKiBUeCB0ZW1wLiAqLworCV9fYmUxNiAgcnBiYXNlOwkvKiBSZWxvY2F0aW9uIHBvaW50ZXIgKENQTTEgb25seSkgKi8KKwlfX2JlMTYJcmVzMTsJLyogUmVzZXJ2ZWQgKi8KK307CisKKy8qCiAgKiBVU0IgQ29udHJvbGxlciBwcmFtIGNvbW1vbiB0byBRRSBhbmQgQ1BNLgogICovCiBzdHJ1Y3QgdXNiX2N0bHIgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwbTEuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcG0xLmgKaW5kZXggODFiMDExOS4uYmQwNzY1MGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcG0xLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwbTEuaApAQCAtMTcsNiArMTcsNyBAQAogI2lmbmRlZiBfX0NQTTFfXwogI2RlZmluZSBfX0NQTTFfXwogCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS84eHhfaW1tYXAuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2NwbS5oPgpAQCAtNTQsNyArNTUsNyBAQAogCiBleHRlcm4gdm9pZCBjcG1fc2V0YnJnKHVpbnQgYnJnLCB1aW50IHJhdGUpOwogCi1leHRlcm4gdm9pZCBjcG1fbG9hZF9wYXRjaChjcG04eHhfdCAqY3ApOworZXh0ZXJuIHZvaWQgX19pbml0IGNwbV9sb2FkX3BhdGNoKGNwbTh4eF90ICpjcCk7CiAKIGV4dGVybiB2b2lkIGNwbV9yZXNldCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaAppbmRleCBiMGIyMTEzLi4zYTQwYTk5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaApAQCAtMTk3LDYgKzE5Nyw3IEBACiAjZGVmaW5lIENQVV9GVFJfU0FPCQkJTE9OR19BU01fQ09OU1QoMHgwMDIwMDAwMDAwMDAwMDAwKQogI2RlZmluZSBDUFVfRlRSX0NQX1VTRV9EQ0JUWgkJTE9OR19BU01fQ09OU1QoMHgwMDQwMDAwMDAwMDAwMDAwKQogI2RlZmluZSBDUFVfRlRSX1VOQUxJR05FRF9MRF9TVEQJTE9OR19BU01fQ09OU1QoMHgwMDgwMDAwMDAwMDAwMDAwKQorI2RlZmluZSBDUFVfRlRSX0FTWU1fU01UCQlMT05HX0FTTV9DT05TVCgweDAxMDAwMDAwMDAwMDAwMDApCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKQEAgLTQxMiw3ICs0MTMsNyBAQAogCSAgICBDUFVfRlRSX01NQ1JBIHwgQ1BVX0ZUUl9TTVQgfCBcCiAJICAgIENQVV9GVFJfQ09IRVJFTlRfSUNBQ0hFIHwgQ1BVX0ZUUl9MT0NLTEVTU19UTEJJRSB8IFwKIAkgICAgQ1BVX0ZUUl9QVVJSIHwgQ1BVX0ZUUl9TUFVSUiB8IENQVV9GVFJfUkVBTF9MRSB8IFwKLQkgICAgQ1BVX0ZUUl9EU0NSIHwgQ1BVX0ZUUl9TQU8pCisJICAgIENQVV9GVFJfRFNDUiB8IENQVV9GVFJfU0FPICB8IENQVV9GVFJfQVNZTV9TTVQpCiAjZGVmaW5lIENQVV9GVFJTX0NFTEwJKENQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9MV1NZTkMgfCBcCiAJICAgIENQVV9GVFJfUFBDQVNfQVJDSF9WMiB8IENQVV9GVFJfQ1RSTCB8IFwKIAkgICAgQ1BVX0ZUUl9BTFRJVkVDX0NPTVAgfCBDUFVfRlRSX01NQ1JBIHwgQ1BVX0ZUUl9TTVQgfCBcCkBAIC01MTcsNiArNTE4LDEwIEBACiAJCSYgZmVhdHVyZSk7CiB9CiAKKyNpZmRlZiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UCisjZGVmaW5lIEhCUF9OVU0gMQorI2VuZGlmIC8qIENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQgKi8KKwogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kYmVsbC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RiZWxsLmgKaW5kZXggNTAxMTg5YS4uMDg5M2FiOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RiZWxsLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RiZWxsLmgKQEAgLTI3LDEwICsyNywxMCBAQAogCVBQQ19HX0RCRUxMX01DID0gNCwJLyogZ3Vlc3QgbWNoZWNrIGRvb3JiZWxsICovCiB9OwogCi0jaWZkZWYgQ09ORklHX1NNUAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZGJlbGxfc21wX21lc3NhZ2VbTlJfQ1BVU107Ci1leHRlcm4gdm9pZCBzbXBfZGJlbGxfbWVzc2FnZV9wYXNzKGludCB0YXJnZXQsIGludCBtc2cpOwotI2VuZGlmCitleHRlcm4gdm9pZCBkb29yYmVsbF9tZXNzYWdlX3Bhc3MoaW50IHRhcmdldCwgaW50IG1zZyk7CitleHRlcm4gdm9pZCBkb29yYmVsbF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgZG9vcmJlbGxfY2hlY2tfc2VsZih2b2lkKTsKK2V4dGVybiB2b2lkIGRvb3JiZWxsX3NldHVwX3RoaXNfY3B1KHZvaWQpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHBjX21zZ3NuZChlbnVtIHBwY19kYmVsbCB0eXBlLCB1MzIgZmxhZ3MsIHUzMiB0YWcpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHZjYWxsLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHZjYWxsLmgKaW5kZXggNTExOWI3ZC4uZGUwM2NhNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h2Y2FsbC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odmNhbGwuaApAQCAtNzQsNiArNzQsNyBAQAogI2RlZmluZSBIX05PVF9FTk9VR0hfUkVTT1VSQ0VTIC00NAogI2RlZmluZSBIX1JfU1RBVEUgICAgICAgLTQ1CiAjZGVmaW5lIEhfUkVTQ0lOREVORCAgICAtNDYKKyNkZWZpbmUgSF9NVUxUSV9USFJFQURTX0FDVElWRSAtOTAwNQogCiAKIC8qIExvbmcgQnVzeSBpcyBhIGNvbmRpdGlvbiB0aGF0IGNhbiBiZSByZXR1cm5lZCBieSB0aGUgZmlybXdhcmUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9od19icmVha3BvaW50LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHdfYnJlYWtwb2ludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMzNlYzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHdfYnJlYWtwb2ludC5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBQb3dlclBDIEJvb2tJSUkgUyBoYXJkd2FyZSBicmVha3BvaW50IGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBDb3B5cmlnaHQgMjAxMCwgSUJNIENvcnBvcmF0aW9uLgorICogQXV0aG9yOiBLLlByYXNhZCA8cHJhc2FkQGxpbnV4LnZuZXQuaWJtLmNvbT4KKyAqCisgKi8KKworI2lmbmRlZiBfUFBDX0JPT0szU182NF9IV19CUkVBS1BPSU5UX0gKKyNkZWZpbmUgX1BQQ19CT09LM1NfNjRfSFdfQlJFQUtQT0lOVF9ICisKKyNpZmRlZglfX0tFUk5FTF9fCisjaWZkZWYgQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVAorCitzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50IHsKKwlib29sCQlleHRyYW5lb3VzX2ludGVycnVwdDsKKwl1OAkJbGVuOyAvKiBsZW5ndGggb2YgdGhlIHRhcmdldCBkYXRhIHN5bWJvbCAqLworCWludAkJdHlwZTsKKwl1bnNpZ25lZCBsb25nCWFkZHJlc3M7Cit9OworCisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CisjaW5jbHVkZSA8YXNtL3JlZy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworc3RydWN0IHBlcmZfZXZlbnQ7CitzdHJ1Y3QgcG11Oworc3RydWN0IHBlcmZfc2FtcGxlX2RhdGE7CisKKyNkZWZpbmUgSFdfQlJFQUtQT0lOVF9BTElHTiAweDcKKy8qIE1heGltdW0gcGVybWlzc2libGUgbGVuZ3RoIG9mIGFueSBIVyBCcmVha3BvaW50ICovCisjZGVmaW5lIEhXX0JSRUFLUE9JTlRfTEVOIDB4OAorCitleHRlcm4gaW50IGh3X2JyZWFrcG9pbnRfc2xvdHMoaW50IHR5cGUpOworZXh0ZXJuIGludCBhcmNoX2JwX2dlbmVyaWNfZmllbGRzKGludCB0eXBlLCBpbnQgKmdlbl9icF90eXBlKTsKK2V4dGVybiBpbnQgYXJjaF9jaGVja19icF9pbl9rZXJuZWxzcGFjZShzdHJ1Y3QgcGVyZl9ldmVudCAqYnApOworZXh0ZXJuIGludCBhcmNoX3ZhbGlkYXRlX2h3YmtwdF9zZXR0aW5ncyhzdHJ1Y3QgcGVyZl9ldmVudCAqYnApOworZXh0ZXJuIGludCBod19icmVha3BvaW50X2V4Y2VwdGlvbnNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLAorCQkJCQkJdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpOworaW50IGFyY2hfaW5zdGFsbF9od19icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50ICpicCk7Cit2b2lkIGFyY2hfdW5pbnN0YWxsX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKTsKK3ZvaWQgaHdfYnJlYWtwb2ludF9wbXVfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApOworZXh0ZXJuIHZvaWQgZmx1c2hfcHRyYWNlX2h3X2JyZWFrcG9pbnQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworCitleHRlcm4gc3RydWN0IHBtdSBwZXJmX29wc19icDsKK2V4dGVybiB2b2lkIHB0cmFjZV90cmlnZ2VyZWQoc3RydWN0IHBlcmZfZXZlbnQgKmJwLCBpbnQgbm1pLAorCQkJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19icmVha3BvaW50X2Rpc2FibGUodm9pZCkKK3sKKwlzZXRfZGFicigwKTsKK30KK2V4dGVybiB2b2lkIHRocmVhZF9jaGFuZ2VfcGMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworI2Vsc2UJLyogQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVCAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X2JyZWFrcG9pbnRfZGlzYWJsZSh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCB0aHJlYWRfY2hhbmdlX3BjKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyB9CisjZW5kaWYJLyogQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVCAqLworI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZgkvKiBfUFBDX0JPT0szU182NF9IV19CUkVBS1BPSU5UX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pcnEuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pcnEuaAppbmRleCBlY2JhMzdhLi42N2FiNWZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaXJxLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lycS5oCkBAIC0zMDAsMzQgKzMwMCw2IEBACiAgKi8KIGV4dGVybiB2b2lkIGlycV9mcmVlX3ZpcnQodW5zaWduZWQgaW50IHZpcnEsIHVuc2lnbmVkIGludCBjb3VudCk7CiAKLQotLyogLS0gT0YgaGVscGVycyAtLSAqLwotCi0vKioKLSAqIGlycV9jcmVhdGVfb2ZfbWFwcGluZyAtIE1hcCBhIGhhcmR3YXJlIGludGVycnVwdCBpbnRvIGxpbnV4IHZpcnEgc3BhY2UKLSAqIEBjb250cm9sbGVyOiBEZXZpY2Ugbm9kZSBvZiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIKLSAqIEBpbnNwZWM6IEludGVycnVwdCBzcGVjaWZpZXIgZnJvbSB0aGUgZGV2aWNlLXRyZWUKLSAqIEBpbnRzaXplOiBTaXplIG9mIHRoZSBpbnRlcnJ1cHQgc3BlY2lmaWVyIGZyb20gdGhlIGRldmljZS10cmVlCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXJxX2NyZWF0ZV9tYXBwaW5nIGV4Y2VwdCB0aGF0IGl0IHRha2VzCi0gKiBhcyBpbnB1dCBpbmZvcm1hdGlvbnMgc3RyYWlnaHQgZnJvbSB0aGUgZGV2aWNlLXRyZWUgKHR5cGljYWxseSB0aGUgcmVzdWx0cwotICogb2YgdGhlIG9mX2lycV9tYXBfKigpIGZ1bmN0aW9ucy4KLSAqLwotZXh0ZXJuIHVuc2lnbmVkIGludCBpcnFfY3JlYXRlX29mX21hcHBpbmcoc3RydWN0IGRldmljZV9ub2RlICpjb250cm9sbGVyLAotCQkJCQkgIGNvbnN0IHUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUpOwotCi0vKioKLSAqIGlycV9vZl9wYXJzZV9hbmRfbWFwIC0gUGFyc2UgYW5kIE1hcCBhbiBpbnRlcnJ1cHQgaW50byBsaW51eCB2aXJxIHNwYWNlCi0gKiBAZGV2aWNlOiBEZXZpY2Ugbm9kZSBvZiB0aGUgZGV2aWNlIHdob3NlIGludGVycnVwdCBpcyB0byBiZSBtYXBwZWQKLSAqIEBpbmRleDogSW5kZXggb2YgdGhlIGludGVycnVwdCB0byBtYXAKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGEgd3JhcHBlciB0aGF0IGNoYWlucyBvZl9pcnFfbWFwX29uZSgpIGFuZAotICogaXJxX2NyZWF0ZV9vZl9tYXBwaW5nKCkgdG8gbWFrZSB0aGluZ3MgZWFzaWVyIHRvIGNhbGxlcnMKLSAqLwotZXh0ZXJuIHVuc2lnbmVkIGludCBpcnFfb2ZfcGFyc2VfYW5kX21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgaW50IGluZGV4KTsKLQotLyogLS0gRW5kIE9GIGhlbHBlcnMgLS0gKi8KLQogLyoqCiAgKiBpcnFfZWFybHlfaW5pdCAtIEluaXQgaXJxIHJlbWFwcGluZyBzdWJzeXN0ZW0KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2tleGVjLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va2V4ZWMuaAppbmRleCAyYTljZDc0Li4wNzYzMjdmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va2V4ZWMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va2V4ZWMuaApAQCAtOCw5ICs4LDkgQEAKICAqIE9uIEZTTC1Cb29rRSB3ZSBzZXR1cCBhIDE6MSBtYXBwaW5nIHdoaWNoIGNvdmVycyB0aGUgZmlyc3QgMkdpQiBvZiBtZW1vcnkKICAqIGFuZCB0aGVyZWZvcmUgd2UgY2FuIG9ubHkgZGVhbCB3aXRoIG1lbW9yeSB3aXRoaW4gdGhpcyByYW5nZQogICovCi0jZGVmaW5lIEtFWEVDX1NPVVJDRV9NRU1PUllfTElNSVQJKDIgKiAxMDI0ICogMTAyNCAqIDEwMjRVTCkKLSNkZWZpbmUgS0VYRUNfREVTVElOQVRJT05fTUVNT1JZX0xJTUlUCSgyICogMTAyNCAqIDEwMjQgKiAxMDI0VUwpCi0jZGVmaW5lIEtFWEVDX0NPTlRST0xfTUVNT1JZX0xJTUlUCSgyICogMTAyNCAqIDEwMjQgKiAxMDI0VUwpCisjZGVmaW5lIEtFWEVDX1NPVVJDRV9NRU1PUllfTElNSVQJKDIgKiAxMDI0ICogMTAyNCAqIDEwMjRVTCAtIDEpCisjZGVmaW5lIEtFWEVDX0RFU1RJTkFUSU9OX01FTU9SWV9MSU1JVAkoMiAqIDEwMjQgKiAxMDI0ICogMTAyNFVMIC0gMSkKKyNkZWZpbmUgS0VYRUNfQ09OVFJPTF9NRU1PUllfTElNSVQJKDIgKiAxMDI0ICogMTAyNCAqIDEwMjRVTCAtIDEpCiAKICNlbHNlCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oCmluZGV4IDZmNzRkOTMuLjgyNzRhMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaApAQCAtMTE1LDcgKzExNSwxNSBAQAogZXh0ZXJuIGludCBrdm1wcGNfbW11X21hcF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bXBwY19wdGUgKnB0ZSk7CiBleHRlcm4gaW50IGt2bXBwY19tbXVfbWFwX3NlZ21lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bG9uZyBlYWRkcik7CiBleHRlcm4gdm9pZCBrdm1wcGNfbW11X2ZsdXNoX3NlZ21lbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci1leHRlcm4gc3RydWN0IGt2bXBwY19wdGUgKmt2bXBwY19tbXVfZmluZF9wdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZWEsIGJvb2wgZGF0YSk7CisKK2V4dGVybiB2b2lkIGt2bXBwY19tbXVfaHB0ZV9jYWNoZV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgaHB0ZV9jYWNoZSAqcHRlKTsKK2V4dGVybiBzdHJ1Y3QgaHB0ZV9jYWNoZSAqa3ZtcHBjX21tdV9ocHRlX2NhY2hlX25leHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2V4dGVybiB2b2lkIGt2bXBwY19tbXVfaHB0ZV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CitleHRlcm4gaW50IGt2bXBwY19tbXVfaHB0ZV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CitleHRlcm4gdm9pZCBrdm1wcGNfbW11X2ludmFsaWRhdGVfcHRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGhwdGVfY2FjaGUgKnB0ZSk7CitleHRlcm4gaW50IGt2bXBwY19tbXVfaHB0ZV9zeXNpbml0KHZvaWQpOworZXh0ZXJuIHZvaWQga3ZtcHBjX21tdV9ocHRlX3N5c2V4aXQodm9pZCk7CisKIGV4dGVybiBpbnQga3ZtcHBjX2xkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWxvbmcgKmVhZGRyLCBpbnQgc2l6ZSwgdm9pZCAqcHRyLCBib29sIGRhdGEpOwogZXh0ZXJuIGludCBrdm1wcGNfc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bG9uZyAqZWFkZHIsIGludCBzaXplLCB2b2lkICpwdHIsIGJvb2wgZGF0YSk7CiBleHRlcm4gdm9pZCBrdm1wcGNfYm9vazNzX3F1ZXVlX2lycXByaW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgdmVjKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fZnB1LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2ZwdS5oCmluZGV4IDk0ZjA1ZGUuLmMzZDRmMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fZnB1LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9mcHUuaApAQCAtMjIsMjQgKzIyLDI0IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi1leHRlcm4gdm9pZCBmcHNfZnJlcyhzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCwgdTMyICpkc3QsIHUzMiAqc3JjMSk7Ci1leHRlcm4gdm9pZCBmcHNfZnJzcXJ0ZShzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCwgdTMyICpkc3QsIHUzMiAqc3JjMSk7Ci1leHRlcm4gdm9pZCBmcHNfZnNxcnRzKHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0LCB1MzIgKmRzdCwgdTMyICpzcmMxKTsKK2V4dGVybiB2b2lkIGZwc19mcmVzKHU2NCAqZnBzY3IsIHUzMiAqZHN0LCB1MzIgKnNyYzEpOworZXh0ZXJuIHZvaWQgZnBzX2Zyc3FydGUodTY0ICpmcHNjciwgdTMyICpkc3QsIHUzMiAqc3JjMSk7CitleHRlcm4gdm9pZCBmcHNfZnNxcnRzKHU2NCAqZnBzY3IsIHUzMiAqZHN0LCB1MzIgKnNyYzEpOwogCi1leHRlcm4gdm9pZCBmcHNfZmFkZHMoc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQsIHUzMiAqZHN0LCB1MzIgKnNyYzEsIHUzMiAqc3JjMik7Ci1leHRlcm4gdm9pZCBmcHNfZmRpdnMoc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQsIHUzMiAqZHN0LCB1MzIgKnNyYzEsIHUzMiAqc3JjMik7Ci1leHRlcm4gdm9pZCBmcHNfZm11bHMoc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQsIHUzMiAqZHN0LCB1MzIgKnNyYzEsIHUzMiAqc3JjMik7Ci1leHRlcm4gdm9pZCBmcHNfZnN1YnMoc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQsIHUzMiAqZHN0LCB1MzIgKnNyYzEsIHUzMiAqc3JjMik7CitleHRlcm4gdm9pZCBmcHNfZmFkZHModTY0ICpmcHNjciwgdTMyICpkc3QsIHUzMiAqc3JjMSwgdTMyICpzcmMyKTsKK2V4dGVybiB2b2lkIGZwc19mZGl2cyh1NjQgKmZwc2NyLCB1MzIgKmRzdCwgdTMyICpzcmMxLCB1MzIgKnNyYzIpOworZXh0ZXJuIHZvaWQgZnBzX2ZtdWxzKHU2NCAqZnBzY3IsIHUzMiAqZHN0LCB1MzIgKnNyYzEsIHUzMiAqc3JjMik7CitleHRlcm4gdm9pZCBmcHNfZnN1YnModTY0ICpmcHNjciwgdTMyICpkc3QsIHUzMiAqc3JjMSwgdTMyICpzcmMyKTsKIAotZXh0ZXJuIHZvaWQgZnBzX2ZtYWRkcyhzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCwgdTMyICpkc3QsIHUzMiAqc3JjMSwgdTMyICpzcmMyLAorZXh0ZXJuIHZvaWQgZnBzX2ZtYWRkcyh1NjQgKmZwc2NyLCB1MzIgKmRzdCwgdTMyICpzcmMxLCB1MzIgKnNyYzIsCiAJCSAgICAgICB1MzIgKnNyYzMpOwotZXh0ZXJuIHZvaWQgZnBzX2Ztc3VicyhzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCwgdTMyICpkc3QsIHUzMiAqc3JjMSwgdTMyICpzcmMyLAorZXh0ZXJuIHZvaWQgZnBzX2Ztc3Vicyh1NjQgKmZwc2NyLCB1MzIgKmRzdCwgdTMyICpzcmMxLCB1MzIgKnNyYzIsCiAJCSAgICAgICB1MzIgKnNyYzMpOwotZXh0ZXJuIHZvaWQgZnBzX2ZubWFkZHMoc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQsIHUzMiAqZHN0LCB1MzIgKnNyYzEsIHUzMiAqc3JjMiwKK2V4dGVybiB2b2lkIGZwc19mbm1hZGRzKHU2NCAqZnBzY3IsIHUzMiAqZHN0LCB1MzIgKnNyYzEsIHUzMiAqc3JjMiwKIAkJICAgICAgICB1MzIgKnNyYzMpOwotZXh0ZXJuIHZvaWQgZnBzX2ZubXN1YnMoc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQsIHUzMiAqZHN0LCB1MzIgKnNyYzEsIHUzMiAqc3JjMiwKK2V4dGVybiB2b2lkIGZwc19mbm1zdWJzKHU2NCAqZnBzY3IsIHUzMiAqZHN0LCB1MzIgKnNyYzEsIHUzMiAqc3JjMiwKIAkJICAgICAgICB1MzIgKnNyYzMpOwotZXh0ZXJuIHZvaWQgZnBzX2ZzZWwoc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQsIHUzMiAqZHN0LCB1MzIgKnNyYzEsIHUzMiAqc3JjMiwKK2V4dGVybiB2b2lkIGZwc19mc2VsKHU2NCAqZnBzY3IsIHUzMiAqZHN0LCB1MzIgKnNyYzEsIHUzMiAqc3JjMiwKIAkJICAgICB1MzIgKnNyYzMpOwogCiAjZGVmaW5lIEZQRF9PTkVfSU4obmFtZSkgZXh0ZXJuIHZvaWQgZnBkXyAjIyBuYW1lKHU2NCAqZnBzY3IsIHUzMiAqY3IsIFwKQEAgLTgyLDQgKzgyLDcgQEAKIEZQRF9USFJFRV9JTihmbm1zdWIpCiBGUERfVEhSRUVfSU4oZm5tYWRkKQogCitleHRlcm4gdm9pZCBrdm1fY3Z0X2ZkKHUzMiAqZnJvbSwgdTY0ICp0bywgdTY0ICpmcHNjcik7CitleHRlcm4gdm9pZCBrdm1fY3Z0X2RmKHU2NCAqZnJvbSwgdTMyICp0bywgdTY0ICpmcHNjcik7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAwYzlhZDg2Li5iMGIyM2MwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMzUsMTAgKzM1LDE3IEBACiAjZGVmaW5lIEtWTV9DT0FMRVNDRURfTU1JT19QQUdFX09GRlNFVCAxCiAKIC8qIFdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IGxhcmdlIHBhZ2VzLiAqLworI2RlZmluZSBLVk1fSFBBR0VfR0ZOX1NISUZUKHgpCTAKICNkZWZpbmUgS1ZNX05SX1BBR0VfU0laRVMJMQogI2RlZmluZSBLVk1fUEFHRVNfUEVSX0hQQUdFKHgpCSgxVUw8PDMxKQogCi0jZGVmaW5lIEhQVEVHX0NBQ0hFX05VTSAxMDI0CisjZGVmaW5lIEhQVEVHX0NBQ0hFX05VTQkJCSgxIDw8IDE1KQorI2RlZmluZSBIUFRFR19IQVNIX0JJVFNfUFRFCQkxMworI2RlZmluZSBIUFRFR19IQVNIX0JJVFNfVlBURQkJMTMKKyNkZWZpbmUgSFBURUdfSEFTSF9CSVRTX1ZQVEVfTE9ORwk1CisjZGVmaW5lIEhQVEVHX0hBU0hfTlVNX1BURQkJKDEgPDwgSFBURUdfSEFTSF9CSVRTX1BURSkKKyNkZWZpbmUgSFBURUdfSEFTSF9OVU1fVlBURQkJKDEgPDwgSFBURUdfSEFTSF9CSVRTX1ZQVEUpCisjZGVmaW5lIEhQVEVHX0hBU0hfTlVNX1ZQVEVfTE9ORwkoMSA8PCBIUFRFR19IQVNIX0JJVFNfVlBURV9MT05HKQogCiBzdHJ1Y3Qga3ZtOwogc3RydWN0IGt2bV9ydW47CkBAIC0xNTEsNiArMTU4LDkgQEAKIH07CiAKIHN0cnVjdCBocHRlX2NhY2hlIHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBsaXN0X3B0ZTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBsaXN0X3ZwdGU7CisJc3RydWN0IGhsaXN0X25vZGUgbGlzdF92cHRlX2xvbmc7CiAJdTY0IGhvc3RfdmE7CiAJdTY0IHBmbjsKIAl1bG9uZyBzbG90OwpAQCAtMjgyLDggKzI5MiwxMCBAQAogCXVuc2lnbmVkIGxvbmcgcGVuZGluZ19leGNlcHRpb25zOwogCiAjaWZkZWYgQ09ORklHX1BQQ19CT09LM1MKLQlzdHJ1Y3QgaHB0ZV9jYWNoZSBocHRlX2NhY2hlW0hQVEVHX0NBQ0hFX05VTV07Ci0JaW50IGhwdGVfY2FjaGVfb2Zmc2V0OworCXN0cnVjdCBobGlzdF9oZWFkIGhwdGVfaGFzaF9wdGVbSFBURUdfSEFTSF9OVU1fUFRFXTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCBocHRlX2hhc2hfdnB0ZVtIUFRFR19IQVNIX05VTV9WUFRFXTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCBocHRlX2hhc2hfdnB0ZV9sb25nW0hQVEVHX0hBU0hfTlVNX1ZQVEVfTE9OR107CisJaW50IGhwdGVfY2FjaGVfY291bnQ7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9sbWIuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9sbWIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY1ZmRmMC4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbG1iLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jaWZuZGVmIF9BU01fUE9XRVJQQ19MTUJfSAotI2RlZmluZSBfQVNNX1BPV0VSUENfTE1CX0gKLQotI2luY2x1ZGUgPGFzbS91ZGJnLmg+Ci0KLSNkZWZpbmUgTE1CX0RCRyhmbXQuLi4pIHVkYmdfcHJpbnRmKGZtdCkKLQotI2lmZGVmIENPTkZJR19QUEMzMgotZXh0ZXJuIHBoeXNfYWRkcl90IGxvd21lbV9lbmRfYWRkcjsKLSNkZWZpbmUgTE1CX1JFQUxfTElNSVQJbG93bWVtX2VuZF9hZGRyCi0jZWxzZQotI2RlZmluZSBMTUJfUkVBTF9MSU1JVAkwCi0jZW5kaWYKLQotI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19MTUJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2xvY2FsNjQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9sb2NhbDY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjOTNiNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9sb2NhbDY0LmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsNjQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbWFjaGRlcC5oCmluZGV4IDlmMGZjOWUuLmFkYzhlNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2hkZXAuaApAQCAtMjY2LDYgKzI2Niw3IEBACiAJdm9pZCAoKnN1c3BlbmRfZGlzYWJsZV9pcnFzKSh2b2lkKTsKIAl2b2lkICgqc3VzcGVuZF9lbmFibGVfaXJxcykodm9pZCk7CiAjZW5kaWYKKwlpbnQgKCpzdXNwZW5kX2Rpc2FibGVfY3B1KSh2b2lkKTsKIAogI2lmZGVmIENPTkZJR19BUkNIX0NQVV9QUk9CRV9SRUxFQVNFCiAJc3NpemVfdCAoKmNwdV9wcm9iZSkoY29uc3QgY2hhciAqLCBzaXplX3QpOwpAQCAtMjc3LDYgKzI3OCw3IEBACiBleHRlcm4gdm9pZCBwb3dlcjRfaWRsZSh2b2lkKTsKIGV4dGVybiB2b2lkIHBvd2VyNF9jcHVfb2ZmbGluZV9wb3dlcnNhdmUodm9pZCk7CiBleHRlcm4gdm9pZCBwcGM2eHhfaWRsZSh2b2lkKTsKK2V4dGVybiB2b2lkIGJvb2szZV9pZGxlKHZvaWQpOwogCiAvKgogICogcHBjX21kIGNvbnRhaW5zIGEgY29weSBvZiB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBzdHJ1Y3R1cmUgZm9yIHRoZQpAQCAtMzY2LDggKzM2OCw1IEBACiAjZGVmaW5lIG1hY2hpbmVfbGF0ZV9pbml0Y2FsbChtYWNoLGZuKQkJX19kZWZpbmVfbWFjaGluZV9pbml0Y2FsbChtYWNoLCI3Iixmbiw3KQogI2RlZmluZSBtYWNoaW5lX2xhdGVfaW5pdGNhbGxfc3luYyhtYWNoLGZuKQlfX2RlZmluZV9tYWNoaW5lX2luaXRjYWxsKG1hY2gsIjdzIixmbiw3cykKIAotdm9pZCBnZW5lcmljX3N1c3BlbmRfZGlzYWJsZV9pcnFzKHZvaWQpOwotdm9pZCBnZW5lcmljX3N1c3BlbmRfZW5hYmxlX2lycXModm9pZCk7Ci0KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX01BQ0hERVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2lvLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbWFjaW8uaAppbmRleCA2NzVlMTU5Li43YWI4MmM4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbWFjaW8uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbWFjaW8uaApAQCAtMzgsNyArMzgsNyBAQAogewogCXN0cnVjdCBtYWNpb19idXMJKmJ1czsJCS8qIG1hY2lvIGJ1cyB0aGlzIGRldmljZSBpcyBvbiAqLwogCXN0cnVjdCBtYWNpb19kZXYJKm1lZGlhX2JheTsJLyogRGV2aWNlIGlzIHBhcnQgb2YgYSBtZWRpYSBiYXkgKi8KLQlzdHJ1Y3Qgb2ZfZGV2aWNlCW9mZGV2OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJb2ZkZXY7CiAJc3RydWN0IGRldmljZV9kbWFfcGFyYW1ldGVycyBkbWFfcGFybXM7IC8qIGlkZSBuZWVkcyB0aGF0ICovCiAJaW50CQkJbl9yZXNvdXJjZXM7CiAJc3RydWN0IHJlc291cmNlCQlyZXNvdXJjZVtNQUNJT19ERVZfQ09VTlRfUkVTT1VSQ0VTXTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tZW1ibG9jay5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21lbWJsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MyOTcyOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tZW1ibG9jay5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX01FTUJMT0NLX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX01FTUJMT0NLX0gKKworI2luY2x1ZGUgPGFzbS91ZGJnLmg+CisKKyNkZWZpbmUgTUVNQkxPQ0tfREJHKGZtdC4uLikgdWRiZ19wcmludGYoZm10KQorCisjaWZkZWYgQ09ORklHX1BQQzMyCitleHRlcm4gcGh5c19hZGRyX3QgbG93bWVtX2VuZF9hZGRyOworI2RlZmluZSBNRU1CTE9DS19SRUFMX0xJTUlUCWxvd21lbV9lbmRfYWRkcgorI2Vsc2UKKyNkZWZpbmUgTUVNQkxPQ0tfUkVBTF9MSU1JVAkwCisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19NRU1CTE9DS19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWJvb2szZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1ib29rM2UuaAppbmRleCA3NDY5NTgxLi44N2ExZDc4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWJvb2szZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtYm9vazNlLmgKQEAgLTE5Myw2ICsxOTMsMTAgQEAKIHsKIAl1bnNpZ25lZCBpbnQJc2hpZnQ7CS8qIG51bWJlciBvZiBiaXRzICovCiAJdW5zaWduZWQgaW50CWVuYzsJLyogUFRFIGVuY29kaW5nICovCisJdW5zaWduZWQgaW50ICAgIGluZDsgICAgLyogQ29ycmVzcG9uZGluZyBpbmRpcmVjdCBwYWdlIHNpemUgc2hpZnQgKi8KKwl1bnNpZ25lZCBpbnQJZmxhZ3M7CisjZGVmaW5lIE1NVV9QQUdFX1NJWkVfRElSRUNUCTB4MQkvKiBTdXBwb3J0ZWQgYXMgYSBkaXJlY3Qgc2l6ZSAqLworI2RlZmluZSBNTVVfUEFHRV9TSVpFX0lORElSRUNUCTB4MgkvKiBTdXBwb3J0ZWQgYXMgYW4gaW5kaXJlY3Qgc2l6ZSAqLwogfTsKIGV4dGVybiBzdHJ1Y3QgbW11X3BzaXplX2RlZiBtbXVfcHNpemVfZGVmc1tNTVVfUEFHRV9DT1VOVF07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtaGFzaDY0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWhhc2g2NC5oCmluZGV4IDIxMDJiMjEuLjBlMzk4Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtaGFzaDY0LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1oYXNoNjQuaApAQCAtMjUwLDcgKzI1MCw5IEBACiBpbnQgX19oYXNoX3BhZ2VfaHVnZSh1bnNpZ25lZCBsb25nIGVhLCB1bnNpZ25lZCBsb25nIGFjY2VzcywgdW5zaWduZWQgbG9uZyB2c2lkLAogCQkgICAgIHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIHRyYXAsIGludCBsb2NhbCwgaW50IHNzaXplLAogCQkgICAgIHVuc2lnbmVkIGludCBzaGlmdCwgdW5zaWduZWQgaW50IG1tdV9wc2l6ZSk7Ci0KK2V4dGVybiB2b2lkIGhhc2hfZmFpbHVyZV9kZWJ1Zyh1bnNpZ25lZCBsb25nIGVhLCB1bnNpZ25lZCBsb25nIGFjY2VzcywKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHZzaWQsIHVuc2lnbmVkIGxvbmcgdHJhcCwKKwkJCSAgICAgICBpbnQgc3NpemUsIGludCBwc2l6ZSwgdW5zaWduZWQgbG9uZyBwdGUpOwogZXh0ZXJuIGludCBodGFiX2JvbHRfbWFwcGluZyh1bnNpZ25lZCBsb25nIHZzdGFydCwgdW5zaWduZWQgbG9uZyB2ZW5kLAogCQkJICAgICB1bnNpZ25lZCBsb25nIHBzdGFydCwgdW5zaWduZWQgbG9uZyBwcm90LAogCQkJICAgICBpbnQgcHNpemUsIGludCBzc2l6ZSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTEyMS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21wYzUxMjEuaAppbmRleCBlNmEzMGJiLi44YzBhYjJjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTEyMS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGM1MTIxLmgKQEAgLTIxLDQgKzIxLDM2IEBACiAJdTMyCXJjZXI7CS8qIFJlc2V0IENvbnRyb2wgRW5hYmxlIFJlZ2lzdGVyICovCiB9OwogCisvKgorICogQ2xvY2sgQ29udHJvbCBNb2R1bGUKKyAqLworc3RydWN0IG1wYzUxMnhfY2NtIHsKKwl1MzIJc3BtcjsJLyogU3lzdGVtIFBMTCBNb2RlIFJlZ2lzdGVyICovCisJdTMyCXNjY3IxOwkvKiBTeXN0ZW0gQ2xvY2sgQ29udHJvbCBSZWdpc3RlciAxICovCisJdTMyCXNjY3IyOwkvKiBTeXN0ZW0gQ2xvY2sgQ29udHJvbCBSZWdpc3RlciAyICovCisJdTMyCXNjZnIxOwkvKiBTeXN0ZW0gQ2xvY2sgRnJlcXVlbmN5IFJlZ2lzdGVyIDEgKi8KKwl1MzIJc2NmcjI7CS8qIFN5c3RlbSBDbG9jayBGcmVxdWVuY3kgUmVnaXN0ZXIgMiAqLworCXUzMglzY2ZyMnM7CS8qIFN5c3RlbSBDbG9jayBGcmVxdWVuY3kgU2hhZG93IFJlZ2lzdGVyIDIgKi8KKwl1MzIJYmNyOwkvKiBCcmVhZCBDcnVtYiBSZWdpc3RlciAqLworCXUzMglwMGNjcjsJLyogUFNDMCBDbG9jayBDb250cm9sIFJlZ2lzdGVyICovCisJdTMyCXAxY2NyOwkvKiBQU0MxIENDUiAqLworCXUzMglwMmNjcjsJLyogUFNDMiBDQ1IgKi8KKwl1MzIJcDNjY3I7CS8qIFBTQzMgQ0NSICovCisJdTMyCXA0Y2NyOwkvKiBQU0M0IENDUiAqLworCXUzMglwNWNjcjsJLyogUFNDNSBDQ1IgKi8KKwl1MzIJcDZjY3I7CS8qIFBTQzYgQ0NSICovCisJdTMyCXA3Y2NyOwkvKiBQU0M3IENDUiAqLworCXUzMglwOGNjcjsJLyogUFNDOCBDQ1IgKi8KKwl1MzIJcDljY3I7CS8qIFBTQzkgQ0NSICovCisJdTMyCXAxMGNjcjsJLyogUFNDMTAgQ0NSICovCisJdTMyCXAxMWNjcjsJLyogUFNDMTEgQ0NSICovCisJdTMyCXNwY2NyOwkvKiBTUERJRiBDbG9jayBDb250cm9sIFJlZ2lzdGVyICovCisJdTMyCWNjY3I7CS8qIENGTSBDbG9jayBDb250cm9sIFJlZ2lzdGVyICovCisJdTMyCWRjY3I7CS8qIERJVSBDbG9jayBDb250cm9sIFJlZ2lzdGVyICovCisJdTMyCW0xY2NyOwkvKiBNU0NBTjEgQ0NSICovCisJdTMyCW0yY2NyOwkvKiBNU0NBTjIgQ0NSICovCisJdTMyCW0zY2NyOwkvKiBNU0NBTjMgQ0NSICovCisJdTMyCW00Y2NyOwkvKiBNU0NBTjQgQ0NSICovCisJdTgJcmVzWzB4OThdOyAvKiBSZXNlcnZlZCAqLworfTsKICNlbmRpZiAvKiBfX0FTTV9QT1dFUlBDX01QQzUxMjFfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vb2ZfZGV2aWNlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vb2ZfZGV2aWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0NGU5N2UuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL29mX2RldmljZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1BPV0VSUENfT0ZfREVWSUNFX0gKLSNkZWZpbmUgX0FTTV9QT1dFUlBDX09GX0RFVklDRV9ICi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvb2YuaD4KLQotLyoKLSAqIFRoZSBvZl9kZXZpY2UgaXMgYSBraW5kIG9mICJiYXNlIGNsYXNzIiB0aGF0IGlzIGEgc3VwZXJzZXQgb2YKLSAqIHN0cnVjdCBkZXZpY2UgZm9yIHVzZSBieSBkZXZpY2VzIGF0dGFjaGVkIHRvIGFuIE9GIG5vZGUgYW5kCi0gKiBwcm9iZWQgdXNpbmcgT0YgcHJvcGVydGllcy4KLSAqLwotc3RydWN0IG9mX2RldmljZQotewotCXN0cnVjdCBkZXZpY2UJCWRldjsJCS8qIEdlbmVyaWMgZGV2aWNlIGludGVyZmFjZSAqLwotCXN0cnVjdCBwZGV2X2FyY2hkYXRhCWFyY2hkYXRhOwotfTsKLQotZXh0ZXJuIHN0cnVjdCBvZl9kZXZpY2UgKm9mX2RldmljZV9hbGxvYyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCQkJCQkgY29uc3QgY2hhciAqYnVzX2lkLAotCQkJCQkgc3RydWN0IGRldmljZSAqcGFyZW50KTsKLQotZXh0ZXJuIGludCBvZl9kZXZpY2VfdWV2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpOwotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19PRl9ERVZJQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL29mX3BsYXRmb3JtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vb2ZfcGxhdGZvcm0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRhYWEzNC4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vb2ZfcGxhdGZvcm0uaAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9QT1dFUlBDX09GX1BMQVRGT1JNX0gKLSNkZWZpbmUgX0FTTV9QT1dFUlBDX09GX1BMQVRGT1JNX0gKLS8qCi0gKiAgICBDb3B5cmlnaHQgKEMpIDIwMDYgQmVuamFtaW4gSGVycmVuc2NobWlkdCwgSUJNIENvcnAuCi0gKgkJCSA8YmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnPgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqLwotCi0vKiBQbGF0Zm9ybSBkZXZpY2VzIGFuZCBidXNzZXMgY3JlYXRpb24gKi8KLWV4dGVybiBzdHJ1Y3Qgb2ZfZGV2aWNlICpvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCQkJCQkgICBjb25zdCBjaGFyICpidXNfaWQsCi0JCQkJCQkgICBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpOwotLyogcHNldWRvICJtYXRjaGVzIiB2YWx1ZSB0byBub3QgZG8gZGVlcCBwcm9iZSAqLwotI2RlZmluZSBPRl9OT19ERUVQX1BST0JFICgoc3RydWN0IG9mX2RldmljZV9pZCAqKS0xKQotCi1leHRlcm4gaW50IG9mX3BsYXRmb3JtX2J1c19wcm9iZShzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3QsCi0JCQkJIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoZXMsCi0JCQkJIHN0cnVjdCBkZXZpY2UgKnBhcmVudCk7Ci0KLWV4dGVybiBzdHJ1Y3Qgb2ZfZGV2aWNlICpvZl9maW5kX2RldmljZV9ieV9waGFuZGxlKHBoYW5kbGUgcGgpOwotCi1leHRlcm4gdm9pZCBvZl9pbnN0YW50aWF0ZV9ydGModm9pZCk7Ci0KLSNlbmRpZgkvKiBfQVNNX1BPV0VSUENfT0ZfUExBVEZPUk1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhY2EuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWNhLmgKaW5kZXggOGNlNzk2My4uMWZmNjY2MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhY2EuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFjYS5oCkBAIC0xNDYsNyArMTQ2LDcgQEAKIGV4dGVybiBzdHJ1Y3QgcGFjYV9zdHJ1Y3QgKnBhY2E7CiBleHRlcm4gX19pbml0ZGF0YSBzdHJ1Y3QgcGFjYV9zdHJ1Y3QgYm9vdF9wYWNhOwogZXh0ZXJuIHZvaWQgaW5pdGlhbGlzZV9wYWNhKHN0cnVjdCBwYWNhX3N0cnVjdCAqbmV3X3BhY2EsIGludCBjcHUpOwotCitleHRlcm4gdm9pZCBzZXR1cF9wYWNhKHN0cnVjdCBwYWNhX3N0cnVjdCAqbmV3X3BhY2EpOwogZXh0ZXJuIHZvaWQgYWxsb2NhdGVfcGFjYXModm9pZCk7CiBleHRlcm4gdm9pZCBmcmVlX3VudXNlZF9wYWNhcyh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS1icmlkZ2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wY2ktYnJpZGdlLmgKaW5kZXggNzZlMWYzMS4uNTFlOWU2ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS1icmlkZ2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGNpLWJyaWRnZS5oCkBAIC0zMDMsMTMgKzMwMyw4IEBACiBleHRlcm4gdm9pZCBwY2liaW9zX3NldHVwX3BoYl9yZXNvdXJjZXMoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKTsKIAogI2lmZGVmIENPTkZJR19QQ0kKLWV4dGVybiB1bnNpZ25lZCBsb25nIHBjaV9hZGRyZXNzX3RvX3BpbyhwaHlzX2FkZHJfdCBhZGRyZXNzKTsKIGV4dGVybiBpbnQgcGNpYmlvc192YWRkcl9pc19pb3BvcnQodm9pZCBfX2lvbWVtICphZGRyZXNzKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGNpX2FkZHJlc3NfdG9fcGlvKHBoeXNfYWRkcl90IGFkZHJlc3MpCi17Ci0JcmV0dXJuICh1bnNpZ25lZCBsb25nKS0xOwotfQogc3RhdGljIGlubGluZSBpbnQgcGNpYmlvc192YWRkcl9pc19pb3BvcnQodm9pZCBfX2lvbWVtICphZGRyZXNzKQogewogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BlcmNwdS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BlcmNwdS5oCmluZGV4IGY4NzkyNTIuLjJjZWRlZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZXJjcHUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGVyY3B1LmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fUE9XRVJQQ19QRVJDUFVfSF8KICNkZWZpbmUgX0FTTV9QT1dFUlBDX1BFUkNQVV9IXwogI2lmZGVmIF9fcG93ZXJwYzY0X18KLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCiAvKgogICogU2FtZSBhcyBhc20tZ2VuZXJpYy9wZXJjcHUuaCwgZXhjZXB0IHRoYXQgd2Ugc3RvcmUgdGhlIHBlciBjcHUgb2Zmc2V0CkBAIC0xMiw5ICsxMSw3IEBACiAKICNpbmNsdWRlIDxhc20vcGFjYS5oPgogCi0jZGVmaW5lIF9fcGVyX2NwdV9vZmZzZXQoY3B1KSAocGFjYVtjcHVdLmRhdGFfb2Zmc2V0KQogI2RlZmluZSBfX215X2NwdV9vZmZzZXQgbG9jYWxfcGFjYS0+ZGF0YV9vZmZzZXQKLSNkZWZpbmUgcGVyX2NwdV9vZmZzZXQoeCkgKF9fcGVyX2NwdV9vZmZzZXQoeCkpCiAKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAjZW5kaWYgLyogX19wb3dlcnBjNjRfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKaW5kZXggZTZkNGNlNi4uNWMxNmI4OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCkBAIC0yMSwzICsyMSwxNSBAQAogI2lmZGVmIENPTkZJR19GU0xfRU1CX1BFUkZfRVZFTlQKICNpbmNsdWRlIDxhc20vcGVyZl9ldmVudF9mc2xfZW1iLmg+CiAjZW5kaWYKKworI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vcmVnLmg+CisKKyNkZWZpbmUgcGVyZl9hcmNoX2ZldGNoX2NhbGxlcl9yZWdzKHJlZ3MsIF9faXApCQkJXAorCWRvIHsJCQkJCQkJXAorCQkocmVncyktPm5pcCA9IF9faXA7CQkJCVwKKwkJKHJlZ3MpLT5ncHJbMV0gPSAqKHVuc2lnbmVkIGxvbmcgKilfX2dldF9TUCgpOwlcCisJCWFzbSB2b2xhdGlsZSgibWZtc3IgJTAiIDogIj1yIiAoKHJlZ3MpLT5tc3IpKTsJXAorCX0gd2hpbGUgKDApCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGMtb3Bjb2RlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjLW9wY29kZS5oCmluZGV4IGQ1NTNiYmUuLjQzYWRjOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGMtb3Bjb2RlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwYy1vcGNvZGUuaApAQCAtNTIsMTMgKzUyLDE3IEBACiAjZGVmaW5lIFBQQ19JTlNUX1dBSVQJCQkweDdjMDAwMDdjCiAjZGVmaW5lIFBQQ19JTlNUX1RMQklWQVgJCTB4N2MwMDA2MjQKICNkZWZpbmUgUFBDX0lOU1RfVExCU1JYX0RPVAkJMHg3YzAwMDZhNQorI2RlZmluZSBQUENfSU5TVF9YWExPUgkJCTB4ZjAwMDA1MTAKIAogLyogbWFjcm9zIHRvIGluc2VydCBmaWVsZHMgaW50byBvcGNvZGVzICovCiAjZGVmaW5lIF9fUFBDX1JBKGEpCSgoKGEpICYgMHgxZikgPDwgMTYpCiAjZGVmaW5lIF9fUFBDX1JCKGIpCSgoKGIpICYgMHgxZikgPDwgMTEpCiAjZGVmaW5lIF9fUFBDX1JTKHMpCSgoKHMpICYgMHgxZikgPDwgMjEpCiAjZGVmaW5lIF9fUFBDX1JUKHMpCV9fUFBDX1JTKHMpCisjZGVmaW5lIF9fUFBDX1hBKGEpCSgoKChhKSAmIDB4MWYpIDw8IDE2KSB8ICgoKGEpICYgMHgyMCkgPj4gMykpCisjZGVmaW5lIF9fUFBDX1hCKGIpCSgoKChiKSAmIDB4MWYpIDw8IDExKSB8ICgoKGIpICYgMHgyMCkgPj4gNCkpCiAjZGVmaW5lIF9fUFBDX1hTKHMpCSgoKChzKSAmIDB4MWYpIDw8IDIxKSB8ICgoKHMpICYgMHgyMCkgPj4gNSkpCisjZGVmaW5lIF9fUFBDX1hUKHMpCV9fUFBDX1hTKHMpCiAjZGVmaW5lIF9fUFBDX1RfVExCKHQpCSgoKHQpICYgMHgzKSA8PCAyMSkKICNkZWZpbmUgX19QUENfV0ModykJKCgodykgJiAweDMpIDw8IDIxKQogLyoKQEAgLTEwNiw5ICsxMTAsMTIgQEAKICAqIHRoZSAxMjggYml0IGxvYWQgc3RvcmUgaW5zdHJ1Y3Rpb25zIGJhc2VkIG9uIHRoYXQuCiAgKi8KICNkZWZpbmUgVlNYX1hYMShzLCBhLCBiKQkoX19QUENfWFMocykgfCBfX1BQQ19SQShhKSB8IF9fUFBDX1JCKGIpKQorI2RlZmluZSBWU1hfWFgzKHQsIGEsIGIpCShfX1BQQ19YVCh0KSB8IF9fUFBDX1hBKGEpIHwgX19QUENfWEIoYikpCiAjZGVmaW5lIFNUWFZEMlgocywgYSwgYikJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfU1RYVkQyWCB8IFwKIAkJCQkJICAgICAgIFZTWF9YWDEoKHMpLCAoYSksIChiKSkpCiAjZGVmaW5lIExYVkQyWChzLCBhLCBiKQkJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfTFhWRDJYIHwgXAogCQkJCQkgICAgICAgVlNYX1hYMSgocyksIChhKSwgKGIpKSkKKyNkZWZpbmUgWFhMT1IodCwgYSwgYikJCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX1hYTE9SIHwgXAorCQkJCQkgICAgICAgVlNYX1hYMygodCksIChhKSwgKGIpKSkKIAogI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19QUENfT1BDT0RFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCA3NDkyZmU4Li4xOWMwNWIwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0yMDksNiArMjA5LDE0IEBACiAjaWZkZWYgQ09ORklHX1BQQzY0CiAJdW5zaWduZWQgbG9uZwlzdGFydF90YjsJLyogU3RhcnQgcHVyciB3aGVuIHByb2Mgc3dpdGNoZWQgaW4gKi8KIAl1bnNpZ25lZCBsb25nCWFjY3VtX3RiOwkvKiBUb3RhbCBhY2N1bWlsYXRlZCBwdXJyIGZvciBwcm9jZXNzICovCisjaWZkZWYgQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVAorCXN0cnVjdCBwZXJmX2V2ZW50ICpwdHJhY2VfYnBzW0hCUF9OVU1dOworCS8qCisJICogSGVscHMgaWRlbnRpZnkgc291cmNlIG9mIHNpbmdsZS1zdGVwIGV4Y2VwdGlvbiBhbmQgc3Vic2VxdWVudAorCSAqIGh3LWJyZWFrcG9pbnQgZW5hYmxlbWVudAorCSAqLworCXN0cnVjdCBwZXJmX2V2ZW50ICpsYXN0X2hpdF91YnA7CisjZW5kaWYgLyogQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVCAqLwogI2VuZGlmCiAJdW5zaWduZWQgbG9uZwlkYWJyOwkJLyogRGF0YSBhZGRyZXNzIGJyZWFrcG9pbnQgcmVnaXN0ZXIgKi8KICNpZmRlZiBDT05GSUdfQUxUSVZFQwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb20uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9tLmgKaW5kZXggZGRkNDA4YS4uYWUyNmYyZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb20uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvbS5oCkBAIC0xNyw5ICsxNyw2IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9mZHQuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIApAQCAtNDMsNDkgKzQwLDE0IEBACiAgKiBPRiBhZGRyZXNzIHJldHJlaXZhbCAmIHRyYW5zbGF0aW9uCiAgKi8KIAotLyogVHJhbnNsYXRlIGFuIE9GIGFkZHJlc3MgYmxvY2sgaW50byBhIENQVSBwaHlzaWNhbCBhZGRyZXNzCi0gKi8KLWV4dGVybiB1NjQgb2ZfdHJhbnNsYXRlX2FkZHJlc3Moc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgdTMyICphZGRyKTsKLQogLyogVHJhbnNsYXRlIGEgRE1BIGFkZHJlc3MgZnJvbSBkZXZpY2Ugc3BhY2UgdG8gQ1BVIHNwYWNlICovCiBleHRlcm4gdTY0IG9mX3RyYW5zbGF0ZV9kbWFfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwKIAkJCQkgICAgY29uc3QgdTMyICppbl9hZGRyKTsKIAotLyogRXh0cmFjdCBhbiBhZGRyZXNzIGZyb20gYSBkZXZpY2UsIHJldHVybnMgdGhlIHJlZ2lvbiBzaXplIGFuZAotICogdGhlIGFkZHJlc3Mgc3BhY2UgZmxhZ3MgdG9vLiBUaGUgUENJIHZlcnNpb24gdXNlcyBhIEJBUiBudW1iZXIKLSAqIGluc3RlYWQgb2YgYW4gYWJzb2x1dGUgaW5kZXgKLSAqLwotZXh0ZXJuIGNvbnN0IHUzMiAqb2ZfZ2V0X2FkZHJlc3Moc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGludCBpbmRleCwKLQkJCSAgIHU2NCAqc2l6ZSwgdW5zaWduZWQgaW50ICpmbGFncyk7CiAjaWZkZWYgQ09ORklHX1BDSQotZXh0ZXJuIGNvbnN0IHUzMiAqb2ZfZ2V0X3BjaV9hZGRyZXNzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCBpbnQgYmFyX25vLAotCQkJICAgICAgIHU2NCAqc2l6ZSwgdW5zaWduZWQgaW50ICpmbGFncyk7Ci0jZWxzZQotc3RhdGljIGlubGluZSBjb25zdCB1MzIgKm9mX2dldF9wY2lfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwKLQkJaW50IGJhcl9ubywgdTY0ICpzaXplLCB1bnNpZ25lZCBpbnQgKmZsYWdzKQotewotCXJldHVybiBOVUxMOwotfQotI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KLQotLyogR2V0IGFuIGFkZHJlc3MgYXMgYSByZXNvdXJjZS4gTm90ZSB0aGF0IGlmIHlvdXIgYWRkcmVzcyBpcwotICogYSBQSU8gYWRkcmVzcywgdGhlIGNvbnZlcnNpb24gd2lsbCBmYWlsIGlmIHRoZSBwaHlzaWNhbCBhZGRyZXNzCi0gKiBjYW4ndCBiZSBpbnRlcm5hbGx5IGNvbnZlcnRlZCB0byBhbiBJTyB0b2tlbiB3aXRoCi0gKiBwY2lfYWRkcmVzc190b19waW8oKSwgdGhhdCBpcyBiZWNhdXNlIGl0J3MgZWl0aGVyIGNhbGxlZCB0byBlYXJseQotICogb3IgaXQgY2FuJ3QgYmUgbWF0Y2hlZCB0byBhbnkgaG9zdCBicmlkZ2UgSU8gc3BhY2UKLSAqLwotZXh0ZXJuIGludCBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCBpbnQgaW5kZXgsCi0JCQkJICBzdHJ1Y3QgcmVzb3VyY2UgKnIpOwotI2lmZGVmIENPTkZJR19QQ0kKLWV4dGVybiBpbnQgb2ZfcGNpX2FkZHJlc3NfdG9fcmVzb3VyY2Uoc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGludCBiYXIsCi0JCQkJICAgICAgc3RydWN0IHJlc291cmNlICpyKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBvZl9wY2lfYWRkcmVzc190b19yZXNvdXJjZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgaW50IGJhciwKLQkJc3RydWN0IHJlc291cmNlICpyKQotewotCXJldHVybiAtRU5PU1lTOwotfQotI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIHBjaV9hZGRyZXNzX3RvX3BpbyhwaHlzX2FkZHJfdCBhZGRyZXNzKTsKKyNkZWZpbmUgcGNpX2FkZHJlc3NfdG9fcGlvIHBjaV9hZGRyZXNzX3RvX3BpbworI2VuZGlmCS8qIENPTkZJR19QQ0kgKi8KIAogLyogUGFyc2UgdGhlIGlibSxkbWEtd2luZG93IHByb3BlcnR5IG9mIGFuIE9GIG5vZGUgaW50byB0aGUgYnVzbm8sIHBoeXMgYW5kCiAgKiBzaXplIHBhcmFtZXRlcnMuCkBAIC0xMDQsNjkgKzY2LDEyIEBACiAvKiBHZXQgdGhlIE1BQyBhZGRyZXNzICovCiBleHRlcm4gY29uc3Qgdm9pZCAqb2ZfZ2V0X21hY19hZGRyZXNzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApOwogCi0vKgotICogT0YgaW50ZXJydXB0IG1hcHBpbmcKLSAqLwotCi0vKiBUaGlzIHN0cnVjdHVyZSBpcyByZXR1cm5lZCB3aGVuIGFuIGludGVycnVwdCBpcyBtYXBwZWQuIFRoZSBjb250cm9sbGVyCi0gKiBmaWVsZCBuZWVkcyB0byBiZSBwdXQoKSBhZnRlciB1c2UKLSAqLwotCi0jZGVmaW5lIE9GX01BWF9JUlFfU1BFQwkJIDQgLyogV2UgaGFuZGxlIHNwZWNpZmllcnMgb2YgYXQgbW9zdCA0IGNlbGxzICovCi0KLXN0cnVjdCBvZl9pcnEgewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY29udHJvbGxlcjsJLyogSW50ZXJydXB0IGNvbnRyb2xsZXIgbm9kZSAqLwotCXUzMiBzaXplOwkJCS8qIFNwZWNpZmllciBzaXplICovCi0JdTMyIHNwZWNpZmllcltPRl9NQVhfSVJRX1NQRUNdOwkvKiBTcGVjaWZpZXIgY29weSAqLwotfTsKLQotLyoqCi0gKiBvZl9pcnFfbWFwX2luaXQgLSBJbml0aWFsaXplIHRoZSBpcnEgcmVtYXBwZXIKLSAqIEBmbGFnczoJZmxhZ3MgZGVmaW5pbmcgd29ya2Fyb3VuZHMgdG8gZW5hYmxlCi0gKgotICogU29tZSBtYWNoaW5lcyBoYXZlIGJ1Z3MgaW4gdGhlIGRldmljZS10cmVlIHdoaWNoIHJlcXVpcmUgY2VydGFpbiB3b3JrYXJvdW5kcwotICogdG8gYmUgYXBwbGllZC4gQ2FsbCB0aGlzIGJlZm9yZSBhbnkgaW50ZXJydXB0IG1hcHBpbmcgYXR0ZW1wdHMgdG8gZW5hYmxlCi0gKiB0aG9zZSB3b3JrYXJvdW5kcy4KLSAqLwotI2RlZmluZSBPRl9JTUFQX09MRFdPUkxEX01BQwkweDAwMDAwMDAxCi0jZGVmaW5lIE9GX0lNQVBfTk9fUEhBTkRMRQkweDAwMDAwMDAyCi0KLWV4dGVybiB2b2lkIG9mX2lycV9tYXBfaW5pdCh1bnNpZ25lZCBpbnQgZmxhZ3MpOwotCi0vKioKLSAqIG9mX2lycV9tYXBfcmF3IC0gTG93IGxldmVsIGludGVycnVwdCB0cmVlIHBhcnNpbmcKLSAqIEBwYXJlbnQ6CXRoZSBkZXZpY2UgaW50ZXJydXB0IHBhcmVudAotICogQGludHNwZWM6CWludGVycnVwdCBzcGVjaWZpZXIgKCJpbnRlcnJ1cHRzIiBwcm9wZXJ0eSBvZiB0aGUgZGV2aWNlKQotICogQG9pbnRzaXplOiAgIHNpemUgb2YgdGhlIHBhc3NlZCBpbiBpbnRlcnJ1cHQgc3BlY2lmaWVyCi0gKiBAYWRkcjoJYWRkcmVzcyBzcGVjaWZpZXIgKHN0YXJ0IG9mICJyZWciIHByb3BlcnR5IG9mIHRoZSBkZXZpY2UpCi0gKiBAb3V0X2lycToJc3RydWN0dXJlIG9mX2lycSBmaWxsZWQgYnkgdGhpcyBmdW5jdGlvbgotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCBhIG5lZ2F0aXZlIG51bWJlciBvbiBlcnJvcgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgYSBsb3ctbGV2ZWwgaW50ZXJydXB0IHRyZWUgd2Fsa2luZyBmdW5jdGlvbi4gSXQKLSAqIGNhbiBiZSB1c2VkIHRvIGRvIGEgcGFydGlhbCB3YWxrIHdpdGggc3ludGhldGl6ZWQgcmVnIGFuZCBpbnRlcnJ1cHRzCi0gKiBwcm9wZXJ0aWVzLCBmb3IgZXhhbXBsZSB3aGVuIHJlc29sdmluZyBQQ0kgaW50ZXJydXB0cyB3aGVuIG5vIGRldmljZQotICogbm9kZSBleGlzdCBmb3IgdGhlIHBhcmVudC4KLSAqCi0gKi8KLQotZXh0ZXJuIGludCBvZl9pcnFfbWFwX3JhdyhzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCwgY29uc3QgdTMyICppbnRzcGVjLAotCQkJICB1MzIgb2ludHNpemUsIGNvbnN0IHUzMiAqYWRkciwKLQkJCSAgc3RydWN0IG9mX2lycSAqb3V0X2lycSk7Ci0KLQotLyoqCi0gKiBvZl9pcnFfbWFwX29uZSAtIFJlc29sdmUgYW4gaW50ZXJydXB0IGZvciBhIGRldmljZQotICogQGRldmljZToJdGhlIGRldmljZSB3aG9zZSBpbnRlcnJ1cHQgaXMgdG8gYmUgcmVzb2x2ZWQKLSAqIEBpbmRleDogICAgIAlpbmRleCBvZiB0aGUgaW50ZXJydXB0IHRvIHJlc29sdmUKLSAqIEBvdXRfaXJxOglzdHJ1Y3R1cmUgb2ZfaXJxIGZpbGxlZCBieSB0aGlzIGZ1bmN0aW9uCi0gKgotICogVGhpcyBmdW5jdGlvbiByZXNvbHZlcyBhbiBpbnRlcnJ1cHQsIHdhbGtpbmcgdGhlIHRyZWUsIGZvciBhIGdpdmVuCi0gKiBkZXZpY2UtdHJlZSBub2RlLiBJdCdzIHRoZSBoaWdoIGxldmVsIHBlbmRhbnQgdG8gb2ZfaXJxX21hcF9yYXcoKS4KLSAqIEl0IGFsc28gaW1wbGVtZW50cyB0aGUgd29ya2Fyb3VuZHMgZm9yIE9sZFdvbHJkIE1hY3MuCi0gKi8KLWV4dGVybiBpbnQgb2ZfaXJxX21hcF9vbmUoc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2UsIGludCBpbmRleCwKLQkJCSAgc3RydWN0IG9mX2lycSAqb3V0X2lycSk7CisjaWZkZWYgQ09ORklHX05VTUEKK2V4dGVybiBpbnQgb2Zfbm9kZV90b19uaWQoc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2UpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IG9mX25vZGVfdG9fbmlkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlKSB7IHJldHVybiAwOyB9CisjZW5kaWYKKyNkZWZpbmUgb2Zfbm9kZV90b19uaWQgb2Zfbm9kZV90b19uaWQKIAogLyoqCiAgKiBvZl9pcnFfbWFwX3BjaSAtIFJlc29sdmUgdGhlIGludGVycnVwdCBmb3IgYSBQQ0kgZGV2aWNlCkBAIC0xODAsMTkgKzg1LDE5IEBACiAgKiByZXNvbHZpbmcgdXNpbmcgdGhlIE9GIHRyZWUgd2Fsa2luZy4KICAqLwogc3RydWN0IHBjaV9kZXY7CitzdHJ1Y3Qgb2ZfaXJxOwogZXh0ZXJuIGludCBvZl9pcnFfbWFwX3BjaShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IG9mX2lycSAqb3V0X2lycSk7CiAKLWV4dGVybiBpbnQgb2ZfaXJxX3RvX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCBpbnQgaW5kZXgsCi0JCQlzdHJ1Y3QgcmVzb3VyY2UgKnIpOworZXh0ZXJuIHZvaWQgb2ZfaW5zdGFudGlhdGVfcnRjKHZvaWQpOwogCi0vKioKLSAqIG9mX2lvbWFwIC0gTWFwcyB0aGUgbWVtb3J5IG1hcHBlZCBJTyBmb3IgYSBnaXZlbiBkZXZpY2Vfbm9kZQotICogQGRldmljZToJdGhlIGRldmljZSB3aG9zZSBpbyByYW5nZSB3aWxsIGJlIG1hcHBlZAotICogQGluZGV4OglpbmRleCBvZiB0aGUgaW8gcmFuZ2UKLSAqCi0gKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbWFwcGVkIG1lbW9yeQotICovCi1leHRlcm4gdm9pZCBfX2lvbWVtICpvZl9pb21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSwgaW50IGluZGV4KTsKKy8qIFRoZXNlIGluY2x1ZGVzIGFyZSBwdXQgYXQgdGhlIGJvdHRvbSBiZWNhdXNlIHRoZXkgbWF5IGNvbnRhaW4gdGhpbmdzCisgKiB0aGF0IGFyZSBvdmVycmlkZGVuIGJ5IHRoaXMgZmlsZS4gIElkZWFsbHkgdGhleSBzaG91bGRuJ3QgYmUgaW5jbHVkZWQKKyAqIGJ5IHRoaXMgZmlsZSwgYnV0IHRoZXJlIGFyZSBhIGJ1bmNoIG9mIC5jIGZpbGVzIHRoYXQgY3VycmVudGx5IGRlcGVuZAorICogb24gaXQuICBFdmVudHVhbGx5IHRoZXkgd2lsbCBiZSBjbGVhbmVkIHVwLiAqLworI2luY2x1ZGUgPGxpbnV4L29mX2ZkdC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfUE9XRVJQQ19QUk9NX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCA1ZDhiZTA0Li4wMTc1YTY3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0yNCwxMSArMjQsNyBAQAogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN0ZGludC5oPgotI2VuZGlmCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKQEAgLTM2NCwxMyArMzYwLDEzIEBACiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiBzdHJ1Y3QgcHBjX2RlYnVnX2luZm8gewotCXVpbnQzMl90IHZlcnNpb247CQkvKiBPbmx5IHZlcnNpb24gMSBleGlzdHMgdG8gZGF0ZSAqLwotCXVpbnQzMl90IG51bV9pbnN0cnVjdGlvbl9icHM7Ci0JdWludDMyX3QgbnVtX2RhdGFfYnBzOwotCXVpbnQzMl90IG51bV9jb25kaXRpb25fcmVnczsKLQl1aW50MzJfdCBkYXRhX2JwX2FsaWdubWVudDsKLQl1aW50MzJfdCBzaXplb2ZfY29uZGl0aW9uOwkvKiBzaXplIG9mIHRoZSBEVkMgcmVnaXN0ZXIgKi8KLQl1aW50NjRfdCBmZWF0dXJlczsKKwlfX3UzMiB2ZXJzaW9uOwkJCS8qIE9ubHkgdmVyc2lvbiAxIGV4aXN0cyB0byBkYXRlICovCisJX191MzIgbnVtX2luc3RydWN0aW9uX2JwczsKKwlfX3UzMiBudW1fZGF0YV9icHM7CisJX191MzIgbnVtX2NvbmRpdGlvbl9yZWdzOworCV9fdTMyIGRhdGFfYnBfYWxpZ25tZW50OworCV9fdTMyIHNpemVvZl9jb25kaXRpb247CQkvKiBzaXplIG9mIHRoZSBEVkMgcmVnaXN0ZXIgKi8KKwlfX3U2NCBmZWF0dXJlczsKIH07CiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KQEAgLTM4NiwxMyArMzgyLDEzIEBACiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiBzdHJ1Y3QgcHBjX2h3X2JyZWFrcG9pbnQgewotCXVpbnQzMl90IHZlcnNpb247CQkvKiBjdXJyZW50bHksIHZlcnNpb24gbXVzdCBiZSAxICovCi0JdWludDMyX3QgdHJpZ2dlcl90eXBlOwkJLyogb25seSBzb21lIGNvbWJpbmF0aW9ucyBhbGxvd2VkICovCi0JdWludDMyX3QgYWRkcl9tb2RlOwkJLyogYWRkcmVzcyBtYXRjaCBtb2RlICovCi0JdWludDMyX3QgY29uZGl0aW9uX21vZGU7CS8qIGJyZWFrL3dhdGNocG9pbnQgY29uZGl0aW9uIGZsYWdzICovCi0JdWludDY0X3QgYWRkcjsJCQkvKiBicmVhay93YXRjaHBvaW50IGFkZHJlc3MgKi8KLQl1aW50NjRfdCBhZGRyMjsJCQkvKiByYW5nZSBlbmQgb3IgbWFzayAqLwotCXVpbnQ2NF90IGNvbmRpdGlvbl92YWx1ZTsJLyogY29udGVudHMgb2YgdGhlIERWQyByZWdpc3RlciAqLworCV9fdTMyIHZlcnNpb247CQkvKiBjdXJyZW50bHksIHZlcnNpb24gbXVzdCBiZSAxICovCisJX191MzIgdHJpZ2dlcl90eXBlOwkvKiBvbmx5IHNvbWUgY29tYmluYXRpb25zIGFsbG93ZWQgKi8KKwlfX3UzMiBhZGRyX21vZGU7CS8qIGFkZHJlc3MgbWF0Y2ggbW9kZSAqLworCV9fdTMyIGNvbmRpdGlvbl9tb2RlOwkvKiBicmVhay93YXRjaHBvaW50IGNvbmRpdGlvbiBmbGFncyAqLworCV9fdTY0IGFkZHI7CQkvKiBicmVhay93YXRjaHBvaW50IGFkZHJlc3MgKi8KKwlfX3U2NCBhZGRyMjsJCS8qIHJhbmdlIGVuZCBvciBtYXNrICovCisJX191NjQgY29uZGl0aW9uX3ZhbHVlOwkvKiBjb250ZW50cyBvZiB0aGUgRFZDIHJlZ2lzdGVyICovCiB9OwogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnLmgKaW5kZXggZDYyZmRmNC4uZDhiZTAxNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWcuaApAQCAtODkwLDcgKzg5MCw3IEBACiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2RlZmluZSBtZm1zcigpCQkoe3Vuc2lnbmVkIGxvbmcgcnZhbDsgXAogCQkJYXNtIHZvbGF0aWxlKCJtZm1zciAlMCIgOiAiPXIiIChydmFsKSk7IHJ2YWw7fSkKLSNpZmRlZiBDT05GSUdfUFBDNjQKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAogI2RlZmluZSBfX210bXNyZCh2LCBsKQlhc20gdm9sYXRpbGUoIm10bXNyZCAlMCwiIF9fc3RyaW5naWZ5KGwpIFwKIAkJCQkgICAgIDogOiAiciIgKHYpIDogIm1lbW9yeSIpCiAjZGVmaW5lIG10bXNyZCh2KQlfX210bXNyZCgodiksIDApCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmgKaW5kZXggMjM2MDMxNy4uNjY3YTQ5OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaApAQCAtMjksOCArMjksOCBAQAogI2lmIGRlZmluZWQoQ09ORklHX1BQQ19CT09LM0VfNjQpCiAjZGVmaW5lIE1TUl8JCU1TUl9NRSB8IE1TUl9DRQogI2RlZmluZSBNU1JfS0VSTkVMICAgICAgTVNSXyB8IE1TUl9DTQotI2RlZmluZSBNU1JfVVNFUjMyCU1TUl8gfCBNU1JfUFIgfCBNU1JfRUUKLSNkZWZpbmUgTVNSX1VTRVI2NAlNU1JfVVNFUjMyIHwgTVNSX0NNCisjZGVmaW5lIE1TUl9VU0VSMzIJTVNSXyB8IE1TUl9QUiB8IE1TUl9FRSB8IE1TUl9ERQorI2RlZmluZSBNU1JfVVNFUjY0CU1TUl9VU0VSMzIgfCBNU1JfQ00gfCBNU1JfREUKICNlbGlmIGRlZmluZWQgKENPTkZJR180MHgpCiAjZGVmaW5lIE1TUl9LRVJORUwJKE1TUl9NRXxNU1JfUkl8TVNSX0lSfE1TUl9EUnxNU1JfQ0UpCiAjZGVmaW5lIE1TUl9VU0VSCShNU1JfS0VSTkVMfE1TUl9QUnxNU1JfRUUpCkBAIC02Miw2ICs2Miw3IEBACiAjZGVmaW5lIFNQUk5fVExCMFBTCTB4MTU4CS8qIFRMQiAwIFBhZ2UgU2l6ZSBSZWdpc3RlciAqLwogI2RlZmluZSBTUFJOX01BUzVfTUFTNgkweDE1YwkvKiBNTVUgQXNzaXN0IFJlZ2lzdGVyIDUgfHwgNiAqLwogI2RlZmluZSBTUFJOX01BUzhfTUFTMQkweDE1ZAkvKiBNTVUgQXNzaXN0IFJlZ2lzdGVyIDggfHwgMSAqLworI2RlZmluZSBTUFJOX0VQVENGRwkweDE1ZQkvKiBFbWJlZGRlZCBQYWdlIFRhYmxlIENvbmZpZyAqLwogI2RlZmluZSBTUFJOX01BUzdfTUFTMwkweDE3NAkvKiBNTVUgQXNzaXN0IFJlZ2lzdGVyIDcgfHwgMyAqLwogI2RlZmluZSBTUFJOX01BUzBfTUFTMQkweDE3NQkvKiBNTVUgQXNzaXN0IFJlZ2lzdGVyIDAgfHwgMSAqLwogI2RlZmluZSBTUFJOX0lWT1IwCTB4MTkwCS8qIEludGVycnVwdCBWZWN0b3IgT2Zmc2V0IFJlZ2lzdGVyIDAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ydGFzLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcnRhcy5oCmluZGV4IDIwZGU3M2MuLjNkMzVmOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ydGFzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3J0YXMuaApAQCAtNjMsNiArNjMsMTQgQEAKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldjsJLyogdmlydHVhbCBhZGRyZXNzIHBvaW50ZXIgKi8KIH07CiAKK3N0cnVjdCBydGFzX3N1c3BlbmRfbWVfZGF0YSB7CisJYXRvbWljX3Qgd29ya2luZzsgLyogbnVtYmVyIG9mIGNwdXMgYWNjZXNzaW5nIHRoaXMgc3RydWN0ICovCisJYXRvbWljX3QgZG9uZTsKKwlpbnQgdG9rZW47IC8qIGlibSxzdXNwZW5kLW1lICovCisJYXRvbWljX3QgZXJyb3I7CisJc3RydWN0IGNvbXBsZXRpb24gKmNvbXBsZXRlOyAvKiB3YWl0IG9uIHRoaXMgdW50aWwgd29ya2luZyA9PSAwICovCit9OworCiAvKiBSVEFTIGV2ZW50IGNsYXNzZXMgKi8KICNkZWZpbmUgUlRBU19JTlRFUk5BTF9FUlJPUgkJMHg4MDAwMDAwMCAvKiBzZXQgYml0IDAgKi8KICNkZWZpbmUgUlRBU19FUE9XX1dBUk5JTkcJCTB4NDAwMDAwMDAgLyogc2V0IGJpdCAxICovCkBAIC0xMzcsNiArMTQ1LDkgQEAKICNkZWZpbmUgUlRBU19UWVBFX1BNR01fQ09ORklHX0NIQU5HRQkweDcwCiAjZGVmaW5lIFJUQVNfVFlQRV9QTUdNX1NFUlZJQ0VfUFJPQwkweDcxCiAKKy8qIFJUQVMgY2hlY2stZXhjZXB0aW9uIHZlY3RvciBvZmZzZXQgKi8KKyNkZWZpbmUgUlRBU19WRUNUT1JfRVhURVJOQUxfSU5URVJSVVBUCTB4NTAwCisKIHN0cnVjdCBydGFzX2Vycm9yX2xvZyB7CiAJdW5zaWduZWQgbG9uZyB2ZXJzaW9uOjg7CQkvKiBBcmNoaXRlY3R1cmFsIHZlcnNpb24gKi8KIAl1bnNpZ25lZCBsb25nIHNldmVyaXR5OjM7CQkvKiBTZXZlcml0eSBsZXZlbCBvZiBlcnJvciAqLwpAQCAtMTc0LDYgKzE4NSw4IEBACiBleHRlcm4gaW50IHJ0YXNfc2V0X2luZGljYXRvcl9mYXN0KGludCBpbmRpY2F0b3IsIGludCBpbmRleCwgaW50IG5ld192YWx1ZSk7CiBleHRlcm4gdm9pZCBydGFzX3Byb2dyZXNzKGNoYXIgKnMsIHVuc2lnbmVkIHNob3J0IGhleCk7CiBleHRlcm4gdm9pZCBydGFzX2luaXRpYWxpemUodm9pZCk7CitleHRlcm4gaW50IHJ0YXNfc3VzcGVuZF9jcHUoc3RydWN0IHJ0YXNfc3VzcGVuZF9tZV9kYXRhICpkYXRhKTsKK2V4dGVybiBpbnQgcnRhc19zdXNwZW5kX2xhc3RfY3B1KHN0cnVjdCBydGFzX3N1c3BlbmRfbWVfZGF0YSAqZGF0YSk7CiAKIHN0cnVjdCBydGNfdGltZTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHJ0YXNfZ2V0X2Jvb3RfdGltZSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zbXUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zbXUuaAppbmRleCA3YWUyNzUzLi5lM2JkYWRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc211LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NtdS5oCkBAIC00NTcsOCArNDU3LDggQEAKICAqLwogZXh0ZXJuIGludCBzbXVfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgc211X3ByZXNlbnQodm9pZCk7Ci1zdHJ1Y3Qgb2ZfZGV2aWNlOwotZXh0ZXJuIHN0cnVjdCBvZl9kZXZpY2UgKnNtdV9nZXRfb2ZkZXYodm9pZCk7CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNtdV9nZXRfb2ZkZXYodm9pZCk7CiAKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCBhNjI5N2M2Li42YzI5NGFjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC01MTUsMTEgKzUxNSw4IEBACiAgKiBwb3dlcnMgb2YgMiB3cml0ZXMgdW50aWwgaXQgcmVhY2hlcyBzdWZmaWNpZW50IGFsaWdubWVudCkuCiAgKgogICogQmFzZWQgb24gdGhpcyB3ZSBkaXNhYmxlIHRoZSBJUCBoZWFkZXIgYWxpZ25tZW50IGluIG5ldHdvcmsgZHJpdmVycy4KLSAqIFdlIGFsc28gbW9kaWZ5IE5FVF9TS0JfUEFEIHRvIGJlIGEgY2FjaGVsaW5lIGluIHNpemUsIHRodXMgbWFpbnRhaW5pbmcKLSAqIGNhY2hlbGluZSBhbGlnbm1lbnQgb2YgYnVmZmVycy4KICAqLwogI2RlZmluZSBORVRfSVBfQUxJR04JMAotI2RlZmluZSBORVRfU0tCX1BBRAlMMV9DQUNIRV9CWVRFUwogCiAjZGVmaW5lIGNtcHhjaGc2NChwdHIsIG8sIG4pCQkJCQkJXAogICAoewkJCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aW1lLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGltZS5oCmluZGV4IDI3Y2NiNzYuLmRjNzc5ZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aW1lLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RpbWUuaApAQCAtMjgsMTYgKzI4LDEyIEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyB0Yl90aWNrc19wZXJfamlmZnk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyB0Yl90aWNrc19wZXJfdXNlYzsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHRiX3RpY2tzX3Blcl9zZWM7Ci1leHRlcm4gdTY0IHRiX3RvX3hzOwotZXh0ZXJuIHVuc2lnbmVkICAgICAgdGJfdG9fdXM7CiAKIHN0cnVjdCBydGNfdGltZTsKIGV4dGVybiB2b2lkIHRvX3RtKGludCB0aW0sIHN0cnVjdCBydGNfdGltZSAqIHRtKTsKIGV4dGVybiB2b2lkIEdyZWdvcmlhbkRheShzdHJ1Y3QgcnRjX3RpbWUgKnRtKTsKLWV4dGVybiB0aW1lX3QgbGFzdF9ydGNfdXBkYXRlOwogCiBleHRlcm4gdm9pZCBnZW5lcmljX2NhbGlicmF0ZV9kZWNyKHZvaWQpOwotZXh0ZXJuIHZvaWQgd2FrZXVwX2RlY3JlbWVudGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgc25hcHNob3RfdGltZWJhc2Uodm9pZCk7CiAKIGV4dGVybiB2b2lkIHNldF9kZWNfY3B1Nih1bnNpZ25lZCBpbnQgdmFsKTsKQEAgLTIwNCw5ICsyMDAsNiBAQAogZXh0ZXJuIHU2NCBtdWxoZHUodTY0LCB1NjQpOwogI2VuZGlmCiAKLWV4dGVybiB2b2lkIHNtcF9zcGFjZV90aW1lcnModW5zaWduZWQgaW50KTsKLQotZXh0ZXJuIHVuc2lnbmVkIG11bGh3dV9zY2FsZV9mYWN0b3IodW5zaWduZWQsIHVuc2lnbmVkKTsKIGV4dGVybiB2b2lkIGRpdjEyOF9ieV8zMih1NjQgZGl2aWRlbmRfaGlnaCwgdTY0IGRpdmlkZW5kX2xvdywKIAkJCSB1bnNpZ25lZCBkaXZpc29yLCBzdHJ1Y3QgZGl2X3Jlc3VsdCAqZHIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90b3BvbG9neS5oCmluZGV4IDMyYWRmNzIuLmFmZTRhYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90b3BvbG9neS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90b3BvbG9neS5oCkBAIC00MSw4ICs0MSw2IEBACiAJCQkgICAgICAgY3B1X2FsbF9tYXNrIDoJCQkJXAogCQkJICAgICAgIG5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV0pCiAKLWludCBvZl9ub2RlX3RvX25pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSk7Ci0KIHN0cnVjdCBwY2lfYnVzOwogI2lmZGVmIENPTkZJR19QQ0kKIGV4dGVybiBpbnQgcGNpYnVzX3RvX25vZGUoc3RydWN0IHBjaV9idXMgKmJ1cyk7CkBAIC04Nyw2ICs4NSw5IEBACiAJLmJhbGFuY2VfaW50ZXJ2YWwJPSAxLAkJCQkJXAogfQogCitleHRlcm4gaW50IF9fbm9kZV9kaXN0YW5jZShpbnQsIGludCk7CisjZGVmaW5lIG5vZGVfZGlzdGFuY2UoYSwgYikgX19ub2RlX2Rpc3RhbmNlKGEsIGIpCisKIGV4dGVybiB2b2lkIF9faW5pdCBkdW1wX251bWFfY3B1X3RvcG9sb2d5KHZvaWQpOwogCiBleHRlcm4gaW50IHN5c2ZzX2FkZF9kZXZpY2VfdG9fbm9kZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBpbnQgbmlkKTsKQEAgLTk0LDExICs5NSw2IEBACiAKICNlbHNlCiAKLXN0YXRpYyBpbmxpbmUgaW50IG9mX25vZGVfdG9fbmlkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlKQotewotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9udW1hX2NwdV90b3BvbG9neSh2b2lkKSB7fQogCiBzdGF0aWMgaW5saW5lIGludCBzeXNmc19hZGRfZGV2aWNlX3RvX25vZGUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgaW50IG5pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS92ZHNvX2RhdGFwYWdlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdmRzb19kYXRhcGFnZS5oCmluZGV4IDEzYzJjMjguLjA4Njc5YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS92ZHNvX2RhdGFwYWdlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Zkc29fZGF0YXBhZ2UuaApAQCAtODUsNiArODUsNyBAQAogCV9fczMyIHd0b21fY2xvY2tfc2VjOwkJCS8qIFdhbGwgdG8gbW9ub3RvbmljIGNsb2NrICovCiAJX19zMzIgd3RvbV9jbG9ja19uc2VjOwogCXN0cnVjdCB0aW1lc3BlYyBzdGFtcF94dGltZTsJLyogeHRpbWUgYXMgYXQgdGJfb3JpZ19zdGFtcCAqLworCV9fdTMyIHN0YW1wX3NlY19mcmFjdGlvbjsJLyogZnJhY3Rpb25hbCBzZWNvbmRzIG9mIHN0YW1wX3h0aW1lICovCiAgICAJX191MzIgc3lzY2FsbF9tYXBfNjRbU1lTQ0FMTF9NQVBfU0laRV07IC8qIG1hcCBvZiBzeXNjYWxscyAgKi8KICAgIAlfX3UzMiBzeXNjYWxsX21hcF8zMltTWVNDQUxMX01BUF9TSVpFXTsgLyogbWFwIG9mIHN5c2NhbGxzICovCiB9OwpAQCAtMTA1LDYgKzEwNiw3IEBACiAJX19zMzIgd3RvbV9jbG9ja19zZWM7CQkJLyogV2FsbCB0byBtb25vdG9uaWMgY2xvY2sgKi8KIAlfX3MzMiB3dG9tX2Nsb2NrX25zZWM7CiAJc3RydWN0IHRpbWVzcGVjIHN0YW1wX3h0aW1lOwkvKiB4dGltZSBhcyBhdCB0Yl9vcmlnX3N0YW1wICovCisJX191MzIgc3RhbXBfc2VjX2ZyYWN0aW9uOwkvKiBmcmFjdGlvbmFsIHNlY29uZHMgb2Ygc3RhbXBfeHRpbWUgKi8KICAgIAlfX3UzMiBzeXNjYWxsX21hcF8zMltTWVNDQUxMX01BUF9TSVpFXTsgLyogbWFwIG9mIHN5c2NhbGxzICovCiAJX191MzIgZGNhY2hlX2Jsb2NrX3NpemU7CS8qIEwxIGQtY2FjaGUgYmxvY2sgc2l6ZSAgICAgKi8KIAlfX3UzMiBpY2FjaGVfYmxvY2tfc2l6ZTsJLyogTDEgaS1jYWNoZSBibG9jayBzaXplICAgICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNThkMDU3Mi4uMWRkYTcwMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCkBAIC0zNCwxMyArMzQsMTQgQEAKIG9iai0kKENPTkZJR19QUEM2NCkJCSs9IHNldHVwXzY0Lm8gc3lzX3BwYzMyLm8gXAogCQkJCSAgIHNpZ25hbF82NC5vIHB0cmFjZTMyLm8gXAogCQkJCSAgIHBhY2EubyBudnJhbV82NC5vIGZpcm13YXJlLm8KK29iai0kKENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQpCSs9IGh3X2JyZWFrcG9pbnQubwogb2JqLSQoQ09ORklHX1BQQ19CT09LM1NfNjQpCSs9IGNwdV9zZXR1cF9wcGM5NzAubyBjcHVfc2V0dXBfcGE2dC5vCiBvYmo2NC0kKENPTkZJR19SRUxPQ0FUQUJMRSkJKz0gcmVsb2NfNjQubwotb2JqLSQoQ09ORklHX1BQQ19CT09LM0VfNjQpCSs9IGV4Y2VwdGlvbnMtNjRlLm8KK29iai0kKENPTkZJR19QUENfQk9PSzNFXzY0KQkrPSBleGNlcHRpb25zLTY0ZS5vIGlkbGVfYm9vazNlLm8KIG9iai0kKENPTkZJR19QUEM2NCkJCSs9IHZkc282NC8KIG9iai0kKENPTkZJR19BTFRJVkVDKQkJKz0gdmVjZW11Lm8KIG9iai0kKENPTkZJR19QUENfOTcwX05BUCkJKz0gaWRsZV9wb3dlcjQubwotb2JqLSQoQ09ORklHX1BQQ19PRikJCSs9IG9mX2RldmljZS5vIG9mX3BsYXRmb3JtLm8gcHJvbV9wYXJzZS5vCitvYmotJChDT05GSUdfUFBDX09GKQkJKz0gb2ZfcGxhdGZvcm0ubyBwcm9tX3BhcnNlLm8KIG9iai0kKENPTkZJR19QUENfQ0xPQ0spCQkrPSBjbG9jay5vCiBwcm9jZnMteQkJCTo9IHByb2NfcG93ZXJwYy5vCiBvYmotJChDT05GSUdfUFJPQ19GUykJCSs9ICQocHJvY2ZzLXkpCkBAIC02Nyw2ICs2OCw3IEBACiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IG1vZHVsZS5vIG1vZHVsZV8kKENPTkZJR19XT1JEX1NJWkUpLm8KIG9iai0kKENPTkZJR180NHgpCQkrPSBjcHVfc2V0dXBfNDR4Lm8KIG9iai0kKENPTkZJR19GU0xfQk9PS0UpCQkrPSBjcHVfc2V0dXBfZnNsX2Jvb2tlLm8gZGJlbGwubworb2JqLSQoQ09ORklHX1BQQ19CT09LM0VfNjQpCSs9IGRiZWxsLm8KIAogZXh0cmEteQkJCQk6PSBoZWFkXyQoQ09ORklHX1dPUkRfU0laRSkubwogZXh0cmEtJChDT05GSUdfUFBDX0JPT0szRV8zMikJOj0gaGVhZF9uZXdfYm9va2UubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDQ5NmNjNWIuLjFjMDYwN2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTE5NCw3ICsxOTQsNiBAQAogCURFRklORShQQUNBX1NUQVJUU1BVUlIsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgc3RhcnRzcHVycikpOwogCURFRklORShQQUNBX1VTRVJfVElNRSwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCB1c2VyX3RpbWUpKTsKIAlERUZJTkUoUEFDQV9TWVNURU1fVElNRSwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBzeXN0ZW1fdGltZSkpOwotCURFRklORShQQUNBX0RBVEFfT0ZGU0VULCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIGRhdGFfb2Zmc2V0KSk7CiAJREVGSU5FKFBBQ0FfVFJBUF9TQVZFLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIHRyYXBfc2F2ZSkpOwogI2lmZGVmIENPTkZJR19LVk1fQk9PSzNTXzY0X0hBTkRMRVIKIAlERUZJTkUoUEFDQV9LVk1fU1ZDUFUsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgc2hhZG93X3ZjcHUpKTsKQEAgLTM0Miw2ICszNDEsNyBAQAogCURFRklORShXVE9NX0NMT0NLX1NFQywgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgd3RvbV9jbG9ja19zZWMpKTsKIAlERUZJTkUoV1RPTV9DTE9DS19OU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCB3dG9tX2Nsb2NrX25zZWMpKTsKIAlERUZJTkUoU1RBTVBfWFRJTUUsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHN0YW1wX3h0aW1lKSk7CisJREVGSU5FKFNUQU1QX1NFQ19GUkFDLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCBzdGFtcF9zZWNfZnJhY3Rpb24pKTsKIAlERUZJTkUoQ0ZHX0lDQUNIRV9CTE9DS1NaLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCBpY2FjaGVfYmxvY2tfc2l6ZSkpOwogCURFRklORShDRkdfRENBQ0hFX0JMT0NLU1osIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIGRjYWNoZV9ibG9ja19zaXplKSk7CiAJREVGSU5FKENGR19JQ0FDSEVfTE9HQkxPQ0tTWiwgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgaWNhY2hlX2xvZ19ibG9ja19zaXplKSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2J0ZXh0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2J0ZXh0LmMKaW5kZXggMjZlNTg2My4uNjI1OTQyYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9idGV4dC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYnRleHQuYwpAQCAtNyw3ICs3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1iLmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKaW5kZXggODdhYTBmMy4uNjVlMmI0ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwpAQCAtMTM2NCwxMCArMTM2NCwxMCBAQAogCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrXzR4eCwKIAkJLnBsYXRmb3JtCQk9ICJwcGM0MDUiLAogCX0sCi0JewkvKiA0MDVFWCAqLwotCQkucHZyX21hc2sJCT0gMHhmZmZmMDAwNCwKLQkJLnB2cl92YWx1ZQkJPSAweDEyOTEwMDA0LAotCQkuY3B1X25hbWUJCT0gIjQwNUVYIiwKKwl7CS8qIDQwNUVYIFJldi4gQS9CIHdpdGggU2VjdXJpdHkgKi8KKwkJLnB2cl9tYXNrCQk9IDB4ZmZmZjAwMGYsCisJCS5wdnJfdmFsdWUJCT0gMHgxMjkxMDAwNywKKwkJLmNwdV9uYW1lCQk9ICI0MDVFWCBSZXYuIEEvQiIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfNDBYLAogCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBQUENfRkVBVFVSRV8zMiB8CiAJCQlQUENfRkVBVFVSRV9IQVNfTU1VIHwgUFBDX0ZFQVRVUkVfSEFTXzR4eE1BQywKQEAgLTEzNzcsMTAgKzEzNzcsMTE0IEBACiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfNHh4LAogCQkucGxhdGZvcm0JCT0gInBwYzQwNSIsCiAJfSwKLQl7CS8qIDQwNUVYciAqLwotCQkucHZyX21hc2sJCT0gMHhmZmZmMDAwNCwKKwl7CS8qIDQwNUVYIFJldi4gQyB3aXRob3V0IFNlY3VyaXR5ICovCisJCS5wdnJfbWFzawkJPSAweGZmZmYwMDBmLAorCQkucHZyX3ZhbHVlCQk9IDB4MTI5MTAwMGQsCisJCS5jcHVfbmFtZQkJPSAiNDA1RVggUmV2LiBDIiwKKwkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU180MFgsCisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IFBQQ19GRUFUVVJFXzMyIHwKKwkJCVBQQ19GRUFUVVJFX0hBU19NTVUgfCBQUENfRkVBVFVSRV9IQVNfNHh4TUFDLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfVFlQRV80MHgsCisJCS5pY2FjaGVfYnNpemUJCT0gMzIsCisJCS5kY2FjaGVfYnNpemUJCT0gMzIsCisJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfNHh4LAorCQkucGxhdGZvcm0JCT0gInBwYzQwNSIsCisJfSwKKwl7CS8qIDQwNUVYIFJldi4gQyB3aXRoIFNlY3VyaXR5ICovCisJCS5wdnJfbWFzawkJPSAweGZmZmYwMDBmLAorCQkucHZyX3ZhbHVlCQk9IDB4MTI5MTAwMGYsCisJCS5jcHVfbmFtZQkJPSAiNDA1RVggUmV2LiBDIiwKKwkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU180MFgsCisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IFBQQ19GRUFUVVJFXzMyIHwKKwkJCVBQQ19GRUFUVVJFX0hBU19NTVUgfCBQUENfRkVBVFVSRV9IQVNfNHh4TUFDLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfVFlQRV80MHgsCisJCS5pY2FjaGVfYnNpemUJCT0gMzIsCisJCS5kY2FjaGVfYnNpemUJCT0gMzIsCisJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfNHh4LAorCQkucGxhdGZvcm0JCT0gInBwYzQwNSIsCisJfSwKKwl7CS8qIDQwNUVYIFJldi4gRCB3aXRob3V0IFNlY3VyaXR5ICovCisJCS5wdnJfbWFzawkJPSAweGZmZmYwMDBmLAorCQkucHZyX3ZhbHVlCQk9IDB4MTI5MTAwMDMsCisJCS5jcHVfbmFtZQkJPSAiNDA1RVggUmV2LiBEIiwKKwkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU180MFgsCisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IFBQQ19GRUFUVVJFXzMyIHwKKwkJCVBQQ19GRUFUVVJFX0hBU19NTVUgfCBQUENfRkVBVFVSRV9IQVNfNHh4TUFDLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfVFlQRV80MHgsCisJCS5pY2FjaGVfYnNpemUJCT0gMzIsCisJCS5kY2FjaGVfYnNpemUJCT0gMzIsCisJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfNHh4LAorCQkucGxhdGZvcm0JCT0gInBwYzQwNSIsCisJfSwKKwl7CS8qIDQwNUVYIFJldi4gRCB3aXRoIFNlY3VyaXR5ICovCisJCS5wdnJfbWFzawkJPSAweGZmZmYwMDBmLAorCQkucHZyX3ZhbHVlCQk9IDB4MTI5MTAwMDUsCisJCS5jcHVfbmFtZQkJPSAiNDA1RVggUmV2LiBEIiwKKwkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU180MFgsCisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IFBQQ19GRUFUVVJFXzMyIHwKKwkJCVBQQ19GRUFUVVJFX0hBU19NTVUgfCBQUENfRkVBVFVSRV9IQVNfNHh4TUFDLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfVFlQRV80MHgsCisJCS5pY2FjaGVfYnNpemUJCT0gMzIsCisJCS5kY2FjaGVfYnNpemUJCT0gMzIsCisJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfNHh4LAorCQkucGxhdGZvcm0JCT0gInBwYzQwNSIsCisJfSwKKwl7CS8qIDQwNUVYciBSZXYuIEEvQiB3aXRob3V0IFNlY3VyaXR5ICovCisJCS5wdnJfbWFzawkJPSAweGZmZmYwMDBmLAorCQkucHZyX3ZhbHVlCQk9IDB4MTI5MTAwMDEsCisJCS5jcHVfbmFtZQkJPSAiNDA1RVhyIFJldi4gQS9CIiwKKwkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU180MFgsCisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IFBQQ19GRUFUVVJFXzMyIHwKKwkJCVBQQ19GRUFUVVJFX0hBU19NTVUgfCBQUENfRkVBVFVSRV9IQVNfNHh4TUFDLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfVFlQRV80MHgsCisJCS5pY2FjaGVfYnNpemUJCT0gMzIsCisJCS5kY2FjaGVfYnNpemUJCT0gMzIsCisJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfNHh4LAorCQkucGxhdGZvcm0JCT0gInBwYzQwNSIsCisJfSwKKwl7CS8qIDQwNUVYciBSZXYuIEMgd2l0aG91dCBTZWN1cml0eSAqLworCQkucHZyX21hc2sJCT0gMHhmZmZmMDAwZiwKKwkJLnB2cl92YWx1ZQkJPSAweDEyOTEwMDA5LAorCQkuY3B1X25hbWUJCT0gIjQwNUVYciBSZXYuIEMiLAorCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTXzQwWCwKKwkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gUFBDX0ZFQVRVUkVfMzIgfAorCQkJUFBDX0ZFQVRVUkVfSEFTX01NVSB8IFBQQ19GRUFUVVJFX0hBU180eHhNQUMsCisJCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9UWVBFXzQweCwKKwkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKKwkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKKwkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja180eHgsCisJCS5wbGF0Zm9ybQkJPSAicHBjNDA1IiwKKwl9LAorCXsJLyogNDA1RVhyIFJldi4gQyB3aXRoIFNlY3VyaXR5ICovCisJCS5wdnJfbWFzawkJPSAweGZmZmYwMDBmLAorCQkucHZyX3ZhbHVlCQk9IDB4MTI5MTAwMGIsCisJCS5jcHVfbmFtZQkJPSAiNDA1RVhyIFJldi4gQyIsCisJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfNDBYLAorCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBQUENfRkVBVFVSRV8zMiB8CisJCQlQUENfRkVBVFVSRV9IQVNfTU1VIHwgUFBDX0ZFQVRVUkVfSEFTXzR4eE1BQywKKwkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX1RZUEVfNDB4LAorCQkuaWNhY2hlX2JzaXplCQk9IDMyLAorCQkuZGNhY2hlX2JzaXplCQk9IDMyLAorCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrXzR4eCwKKwkJLnBsYXRmb3JtCQk9ICJwcGM0MDUiLAorCX0sCisJewkvKiA0MDVFWHIgUmV2LiBEIHdpdGhvdXQgU2VjdXJpdHkgKi8KKwkJLnB2cl9tYXNrCQk9IDB4ZmZmZjAwMGYsCiAJCS5wdnJfdmFsdWUJCT0gMHgxMjkxMDAwMCwKLQkJLmNwdV9uYW1lCQk9ICI0MDVFWHIiLAorCQkuY3B1X25hbWUJCT0gIjQwNUVYciBSZXYuIEQiLAorCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTXzQwWCwKKwkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gUFBDX0ZFQVRVUkVfMzIgfAorCQkJUFBDX0ZFQVRVUkVfSEFTX01NVSB8IFBQQ19GRUFUVVJFX0hBU180eHhNQUMsCisJCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9UWVBFXzQweCwKKwkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKKwkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKKwkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja180eHgsCisJCS5wbGF0Zm9ybQkJPSAicHBjNDA1IiwKKwl9LAorCXsJLyogNDA1RVhyIFJldi4gRCB3aXRoIFNlY3VyaXR5ICovCisJCS5wdnJfbWFzawkJPSAweGZmZmYwMDBmLAorCQkucHZyX3ZhbHVlCQk9IDB4MTI5MTAwMDIsCisJCS5jcHVfbmFtZQkJPSAiNDA1RVhyIFJldi4gRCIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfNDBYLAogCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBQUENfRkVBVFVSRV8zMiB8CiAJCQlQUENfRkVBVFVSRV9IQVNfTU1VIHwgUFBDX0ZFQVRVUkVfSEFTXzR4eE1BQywKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2guYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2guYwppbmRleCBiNDZmMmUwLi40MTdmN2IwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaC5jCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1iLmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgpAQCAtNDQ3LDcgKzQ0Nyw3IEBACiAJY3Jhc2hfa2V4ZWNfcHJlcGFyZV9jcHVzKGNyYXNoaW5nX2NwdSk7CiAJY3B1X3NldChjcmFzaGluZ19jcHUsIGNwdXNfaW5fY3Jhc2gpOwogCWNyYXNoX2tleGVjX3N0b3Bfc3B1cygpOwotI2lmZGVmIENPTkZJR19QUENfU1REX01NVV82NAorI2lmIGRlZmluZWQoQ09ORklHX1BQQ19TVERfTU1VXzY0KSAmJiBkZWZpbmVkKENPTkZJR19TTVApCiAJY3Jhc2hfa2V4ZWNfd2FpdF9yZWFsbW9kZShjcmFzaGluZ19jcHUpOwogI2VuZGlmCiAJaWYgKHBwY19tZC5rZXhlY19jcHVfZG93bikKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaF9kdW1wLmMKaW5kZXggNWZiNjY3YS4uOGUwNWMxNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaF9kdW1wLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaF9kdW1wLmMKQEAgLTEzLDcgKzEzLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NyYXNoX2R1bXAuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1iLmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KICNpbmNsdWRlIDxhc20vY29kZS1wYXRjaGluZy5oPgogI2luY2x1ZGUgPGFzbS9rZHVtcC5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CkBAIC0zMyw3ICszMyw3IEBACiAjaWZuZGVmIENPTkZJR19SRUxPQ0FUQUJMRQogdm9pZCBfX2luaXQgcmVzZXJ2ZV9rZHVtcF90cmFtcG9saW5lKHZvaWQpCiB7Ci0JbG1iX3Jlc2VydmUoMCwgS0RVTVBfUkVTRVJWRV9MSU1JVCk7CisJbWVtYmxvY2tfcmVzZXJ2ZSgwLCBLRFVNUF9SRVNFUlZFX0xJTUlUKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGNyZWF0ZV90cmFtcG9saW5lKHVuc2lnbmVkIGxvbmcgYWRkcikKQEAgLTEyOCw5ICsxMjgsOSBAQAogCWlmICghY3NpemUpCiAJCXJldHVybiAwOwogCi0JY3NpemUgPSBtaW4oY3NpemUsIFBBR0VfU0laRSk7CisJY3NpemUgPSBtaW5fdChzaXplX3QsIGNzaXplLCBQQUdFX1NJWkUpOwogCi0JaWYgKHBmbiA8IG1heF9wZm4pIHsKKwlpZiAoKG1pbl9sb3dfcGZuIDwgcGZuKSAmJiAocGZuIDwgbWF4X3BmbikpIHsKIAkJdmFkZHIgPSBfX3ZhKHBmbiA8PCBQQUdFX1NISUZUKTsKIAkJY3NpemUgPSBjb3B5X29sZG1lbV92YWRkcih2YWRkciwgYnVmLCBjc2l6ZSwgb2Zmc2V0LCB1c2VyYnVmKTsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kYmVsbC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9kYmVsbC5jCmluZGV4IDE0OTM3MzQuLjMzMDdhNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZGJlbGwuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2RiZWxsLmMKQEAgLTEzLDMyICsxMyw4OCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KIAogI2luY2x1ZGUgPGFzbS9kYmVsbC5oPgorI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgogCiAjaWZkZWYgQ09ORklHX1NNUAotdW5zaWduZWQgbG9uZyBkYmVsbF9zbXBfbWVzc2FnZVtOUl9DUFVTXTsKK3N0cnVjdCBkb29yYmVsbF9jcHVfaW5mbyB7CisJdW5zaWduZWQgbG9uZwltZXNzYWdlczsJLyogY3VycmVudCBtZXNzYWdlcyBiaXRzICovCisJdW5zaWduZWQgaW50CXRhZzsJCS8qIHRhZyB2YWx1ZSAqLworfTsKIAotdm9pZCBzbXBfZGJlbGxfbWVzc2FnZV9wYXNzKGludCB0YXJnZXQsIGludCBtc2cpCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGRvb3JiZWxsX2NwdV9pbmZvLCBkb29yYmVsbF9jcHVfaW5mbyk7CisKK3ZvaWQgZG9vcmJlbGxfc2V0dXBfdGhpc19jcHUodm9pZCkKIHsKKwlzdHJ1Y3QgZG9vcmJlbGxfY3B1X2luZm8gKmluZm8gPSAmX19nZXRfY3B1X3Zhcihkb29yYmVsbF9jcHVfaW5mbyk7CisKKwlpbmZvLT5tZXNzYWdlcyA9IDA7CisJaW5mby0+dGFnID0gbWZzcHIoU1BSTl9QSVIpICYgMHgzZmZmOworfQorCit2b2lkIGRvb3JiZWxsX21lc3NhZ2VfcGFzcyhpbnQgdGFyZ2V0LCBpbnQgbXNnKQoreworCXN0cnVjdCBkb29yYmVsbF9jcHVfaW5mbyAqaW5mbzsKIAlpbnQgaTsKIAotCWlmKHRhcmdldCA8IE5SX0NQVVMpIHsKLQkJc2V0X2JpdChtc2csICZkYmVsbF9zbXBfbWVzc2FnZVt0YXJnZXRdKTsKLQkJcHBjX21zZ3NuZChQUENfREJFTEwsIDAsIHRhcmdldCk7CisJaWYgKHRhcmdldCA8IE5SX0NQVVMpIHsKKwkJaW5mbyA9ICZwZXJfY3B1KGRvb3JiZWxsX2NwdV9pbmZvLCB0YXJnZXQpOworCQlzZXRfYml0KG1zZywgJmluZm8tPm1lc3NhZ2VzKTsKKwkJcHBjX21zZ3NuZChQUENfREJFTEwsIDAsIGluZm8tPnRhZyk7CiAJfQotCWVsc2UgaWYodGFyZ2V0ID09IE1TR19BTExfQlVUX1NFTEYpIHsKKwllbHNlIGlmICh0YXJnZXQgPT0gTVNHX0FMTF9CVVRfU0VMRikgewogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKIAkJCWlmIChpID09IHNtcF9wcm9jZXNzb3JfaWQoKSkKIAkJCQljb250aW51ZTsKLQkJCXNldF9iaXQobXNnLCAmZGJlbGxfc21wX21lc3NhZ2VbaV0pOwotCQkJcHBjX21zZ3NuZChQUENfREJFTEwsIDAsIGkpOworCQkJaW5mbyA9ICZwZXJfY3B1KGRvb3JiZWxsX2NwdV9pbmZvLCBpKTsKKwkJCXNldF9iaXQobXNnLCAmaW5mby0+bWVzc2FnZXMpOworCQkJcHBjX21zZ3NuZChQUENfREJFTEwsIDAsIGluZm8tPnRhZyk7CiAJCX0KIAl9CiAJZWxzZSB7IC8qIHRhcmdldCA9PSBNU0dfQUxMICovCi0JCWZvcl9lYWNoX29ubGluZV9jcHUoaSkKLQkJCXNldF9iaXQobXNnLCAmZGJlbGxfc21wX21lc3NhZ2VbaV0pOworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKKwkJCWluZm8gPSAmcGVyX2NwdShkb29yYmVsbF9jcHVfaW5mbywgaSk7CisJCQlzZXRfYml0KG1zZywgJmluZm8tPm1lc3NhZ2VzKTsKKwkJfQogCQlwcGNfbXNnc25kKFBQQ19EQkVMTCwgUFBDX0RCRUxMX01TR19CUkRDQVNULCAwKTsKIAl9CiB9Ci0jZW5kaWYKKwordm9pZCBkb29yYmVsbF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOworCXN0cnVjdCBkb29yYmVsbF9jcHVfaW5mbyAqaW5mbyA9ICZfX2dldF9jcHVfdmFyKGRvb3JiZWxsX2NwdV9pbmZvKTsKKwlpbnQgbXNnOworCisJLyogV2FybmluZzogcmVncyBjYW4gYmUgTlVMTCB3aGVuIGNhbGxlZCBmcm9tIGlycSBlbmFibGUgKi8KKworCWlmICghaW5mby0+bWVzc2FnZXMgfHwgKG51bV9vbmxpbmVfY3B1cygpIDwgMikpCisJCWdvdG8gb3V0OworCisJZm9yIChtc2cgPSAwOyBtc2cgPCA0OyBtc2crKykKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChtc2csICZpbmZvLT5tZXNzYWdlcykpCisJCQlzbXBfbWVzc2FnZV9yZWN2KG1zZyk7CisKK291dDoKKwlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOworfQorCit2b2lkIGRvb3JiZWxsX2NoZWNrX3NlbGYodm9pZCkKK3sKKwlzdHJ1Y3QgZG9vcmJlbGxfY3B1X2luZm8gKmluZm8gPSAmX19nZXRfY3B1X3Zhcihkb29yYmVsbF9jcHVfaW5mbyk7CisKKwlpZiAoIWluZm8tPm1lc3NhZ2VzKQorCQlyZXR1cm47CisKKwlwcGNfbXNnc25kKFBQQ19EQkVMTCwgMCwgaW5mby0+dGFnKTsKK30KKworI2Vsc2UgLyogQ09ORklHX1NNUCAqLwordm9pZCBkb29yYmVsbF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiUmVjZWl2ZWQgZG9vcmJlbGwgb24gbm9uLXNtcCBzeXN0ZW1cbiIpOworfQorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEtc3dpb3RsYi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEtc3dpb3RsYi5jCmluZGV4IGU3ZmUyMTguLjQyOTVlMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hLXN3aW90bGIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS1zd2lvdGxiLmMKQEAgLTcxLDcgKzcxLDcgQEAKIAlzZC0+bWF4X2RpcmVjdF9kbWFfYWRkciA9IDA7CiAKIAkvKiBNYXkgbmVlZCB0byBib3VuY2UgaWYgdGhlIGRldmljZSBjYW4ndCBhZGRyZXNzIGFsbCBvZiBEUkFNICovCi0JaWYgKChkbWFfZ2V0X21hc2soZGV2KSArIDEpIDwgbG1iX2VuZF9vZl9EUkFNKCkpCisJaWYgKChkbWFfZ2V0X21hc2soZGV2KSArIDEpIDwgbWVtYmxvY2tfZW5kX29mX0RSQU0oKSkKIAkJc2V0X2RtYV9vcHMoZGV2LCAmc3dpb3RsYl9kbWFfb3BzKTsKIAogCXJldHVybiBOT1RJRllfRE9ORTsKQEAgLTgyLDE3ICs4Miw5IEBACiAJLnByaW9yaXR5ID0gMCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcHBjX3N3aW90bGJfb2ZfYnVzX25vdGlmaWVyID0gewotCS5ub3RpZmllcl9jYWxsID0gcHBjX3N3aW90bGJfYnVzX25vdGlmeSwKLQkucHJpb3JpdHkgPSAwLAotfTsKLQogaW50IF9faW5pdCBzd2lvdGxiX3NldHVwX2J1c19ub3RpZmllcih2b2lkKQogewogCWJ1c19yZWdpc3Rlcl9ub3RpZmllcigmcGxhdGZvcm1fYnVzX3R5cGUsCiAJCQkgICAgICAmcHBjX3N3aW90bGJfcGxhdF9idXNfbm90aWZpZXIpOwotCWJ1c19yZWdpc3Rlcl9ub3RpZmllcigmb2ZfcGxhdGZvcm1fYnVzX3R5cGUsCi0JCQkgICAgICAmcHBjX3N3aW90bGJfb2ZfYnVzX25vdGlmaWVyKTsKLQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hLmMKaW5kZXggOGQxZGU2Zi4uODRkNjM2NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS5jCkBAIC05LDcgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLWRlYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1iLmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KICNpbmNsdWRlIDxhc20vYnVnLmg+CiAjaW5jbHVkZSA8YXNtL2Fic19hZGRyLmg+CiAKQEAgLTg5LDcgKzg5LDcgQEAKIAkvKiBDb3VsZCBiZSBpbXByb3ZlZCBzbyBwbGF0Zm9ybXMgY2FuIHNldCB0aGUgbGltaXQgaW4gY2FzZQogCSAqIHRoZXkgaGF2ZSBsaW1pdGVkIERNQSB3aW5kb3dzCiAJICovCi0JcmV0dXJuIG1hc2sgPj0gKGxtYl9lbmRfb2ZfRFJBTSgpIC0gMSk7CisJcmV0dXJuIG1hc2sgPj0gKG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgLSAxKTsKICNlbHNlCiAJcmV0dXJuIDE7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NGUuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NGUuUwppbmRleCAyNGRjYzBlLi41YzQzMDYzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2V4Y2VwdGlvbnMtNjRlLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0ZS5TCkBAIC0xOTEsNiArMTkxLDEyIEBACiAJc3RoCXIxLFBBQ0FfVFJBUF9TQVZFKHIxMyk7CS8qIHN0b3JlIHRyYXAgKi8JCSAgICBcCiAJYgliYWRfc3RhY2tfYm9vazNlOwkvKiBiYWQgc3RhY2sgZXJyb3IgKi8KIAorLyogV0FSTklORzogSWYgeW91IGNoYW5nZSB0aGUgbGF5b3V0IG9mIHRoaXMgc3R1YiwgbWFrZSBzdXJlIHlvdSBjaGNlaworCSogICB0aGUgZGVidWcgZXhjZXB0aW9uIGhhbmRsZXIgd2hpY2ggaGFuZGxlcyBzaW5nbGUgc3RlcHBpbmcKKwkqICAgaW50byBleGNlcHRpb25zIGZyb20gdXNlcnNwYWNlLCBhbmQgdGhlIE1NIGNvZGUgaW4KKwkqICAgYXJjaC9wb3dlcnBjL21tL3RsYl9ub2hhc2guYyB3aGljaCBwYXRjaGVzIHRoZSBicmFuY2ggaGVyZQorCSogICBhbmQgd291bGQgbmVlZCB0byBiZSB1cGRhdGVkIGlmIHRoYXQgYnJhbmNoIGlzIG1vdmVkCisJKi8KICNkZWZpbmUJRVhDRVBUSU9OX1NUVUIobG9jLCBsYWJlbCkJCQkJCVwKIAkuID0gaW50ZXJydXB0X2Jhc2VfYm9vazNlICsgbG9jOwkJCQlcCiAJbm9wOwkvKiBUbyBtYWtlIGRlYnVnIGludGVycnVwdHMgaGFwcHkgKi8JCQlcCkBAIC0yMDQsMTEgKzIxMCwzMCBAQAogCWxpcwlyLFRTUl9GSVNAaDsJCQkJCQlcCiAJbXRzcHIJU1BSTl9UU1IscgogCisvKiBVc2VkIGJ5IGFzeW5jaHJvbm91cyBpbnRlcnJ1cHQgdGhhdCBtYXkgaGFwcGVuIGluIHRoZSBpZGxlIGxvb3AuCisgKgorICogVGhpcyBjaGVjayBpZiB0aGUgdGhyZWFkIHdhcyBpbiB0aGUgaWRsZSBsb29wLCBhbmQgaWYgeWVzLCByZXR1cm5zCisgKiB0byB0aGUgY2FsbGVyIHJhdGhlciB0aGFuIHRoZSBQQy4gVGhpcyBpcyB0byBhdm9pZCBhIHJhY2UgaWYKKyAqIGludGVycnVwdHMgaGFwcGVuIGJlZm9yZSB0aGUgd2FpdCBpbnN0cnVjdGlvbi4KKyAqLworI2RlZmluZSBDSEVDS19OQVBQSU5HKCkJCQkJCQkJXAorCWNscnJkaQlyMTEscjEsVEhSRUFEX1NISUZUOwkJCQkJXAorCWxkCXIxMCxUSV9MT0NBTF9GTEFHUyhyMTEpOwkJCQlcCisJYW5kaS4JcjkscjEwLF9UTEZfTkFQUElORzsJCQkJCVwKKwliZXErCTFmOwkJCQkJCQlcCisJbGQJcjgsX0xJTksocjEpOwkJCQkJCVwKKwlybHdpbm0JcjcscjEwLDAsfl9UTEZfTkFQUElORzsJCQkJCVwKKwlzdGQJcjgsX05JUChyMSk7CQkJCQkJXAorCXN0ZAlyNyxUSV9MT0NBTF9GTEFHUyhyMTEpOwkJCQkJXAorMToKKworCiAjZGVmaW5lIE1BU0tBQkxFX0VYQ0VQVElPTih0cmFwbnVtLCBsYWJlbCwgaGRsciwgYWNrKQkJCVwKIAlTVEFSVF9FWENFUFRJT04obGFiZWwpOwkJCQkJCVwKIAlOT1JNQUxfRVhDRVBUSU9OX1BST0xPRyh0cmFwbnVtLCBQUk9MT0dfQURESVRJT05fTUFTS0FCTEUpCVwKIAlFWENFUFRJT05fQ09NTU9OKHRyYXBudW0sIFBBQ0FfRVhHRU4sIElOVFNfRElTQUJMRV9BTEwpCQlcCiAJYWNrKHI4KTsJCQkJCQkJXAorCUNIRUNLX05BUFBJTkcoKTsJCQkJCQlcCiAJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRDsJCQkJXAogCWJsCWhkbHI7CQkJCQkJCVwKIAliCS5yZXRfZnJvbV9leGNlcHRfbGl0ZTsKQEAgLTI0NiwxMSArMjcxLDkgQEAKIAlFWENFUFRJT05fU1RVQigweDFhMCwgd2F0Y2hkb2cpCQkJLyogMHgwOWYwICovCiAJRVhDRVBUSU9OX1NUVUIoMHgxYzAsIGRhdGFfdGxiX21pc3MpCiAJRVhDRVBUSU9OX1NUVUIoMHgxZTAsIGluc3RydWN0aW9uX3RsYl9taXNzKQorCUVYQ0VQVElPTl9TVFVCKDB4MjgwLCBkb29yYmVsbCkKKwlFWENFUFRJT05fU1RVQigweDJhMCwgZG9vcmJlbGxfY3JpdCkKIAotI2lmIDAKLQlFWENFUFRJT05fU1RVQigweDI4MCwgcHJvY2Vzc29yX2Rvb3JiZWxsKQotCUVYQ0VQVElPTl9TVFVCKDB4MjIwLCBwcm9jZXNzb3JfZG9vcmJlbGxfY3JpdCkKLSNlbmRpZgogCS5nbG9ibCBpbnRlcnJ1cHRfZW5kX2Jvb2szZQogaW50ZXJydXB0X2VuZF9ib29rM2U6CiAKQEAgLTI1OSw2ICsyODIsNyBAQAogCUNSSVRfRVhDRVBUSU9OX1BST0xPRygweDEwMCwgUFJPTE9HX0FERElUSU9OX05PTkUpCiAvLwlFWENFUFRJT05fQ09NTU9OKDB4MTAwLCBQQUNBX0VYQ1JJVCwgSU5UU19ESVNBQkxFX0FMTCkKIC8vCWJsCXNwZWNpYWxfcmVnX3NhdmVfY3JpdAorLy8JQ0hFQ0tfTkFQUElORygpOwogLy8JYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAogLy8JYmwJLmNyaXRpY2FsX2V4Y2VwdGlvbgogLy8JYglyZXRfZnJvbV9jcml0X2V4Y2VwdApAQCAtMjcwLDYgKzI5NCw3IEBACiAvLwlFWENFUFRJT05fQ09NTU9OKDB4MjAwLCBQQUNBX0VYTUMsIElOVFNfRElTQUJMRV9BTEwpCiAvLwlibAlzcGVjaWFsX3JlZ19zYXZlX21jCiAvLwlhZGRpCXIzLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFECisvLwlDSEVDS19OQVBQSU5HKCk7CiAvLwlibAkubWFjaGluZV9jaGVja19leGNlcHRpb24KIC8vCWIJcmV0X2Zyb21fbWNfZXhjZXB0CiAJYgkuCkBAIC0zNDAsNiArMzY1LDcgQEAKIAlDUklUX0VYQ0VQVElPTl9QUk9MT0coMHg5ZjAsIFBST0xPR19BRERJVElPTl9OT05FKQogLy8JRVhDRVBUSU9OX0NPTU1PTigweDlmMCwgUEFDQV9FWENSSVQsIElOVFNfRElTQUJMRV9BTEwpCiAvLwlibAlzcGVjaWFsX3JlZ19zYXZlX2NyaXQKKy8vCUNIRUNLX05BUFBJTkcoKTsKIC8vCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKIC8vCWJsCS51bmtub3duX2V4Y2VwdGlvbgogLy8JYglyZXRfZnJvbV9jcml0X2V4Y2VwdApAQCAtNDI4LDYgKzQ1NCwyMCBAQAoga2VybmVsX2RiZ19leGM6CiAJYgkuCS8qIE5ZSSAqLwogCisvKiBEb29yYmVsbCBpbnRlcnJ1cHQgKi8KKwlNQVNLQUJMRV9FWENFUFRJT04oMHgyMDcwLCBkb29yYmVsbCwgLmRvb3JiZWxsX2V4Y2VwdGlvbiwgQUNLX05PTkUpCisKKy8qIERvb3JiZWxsIGNyaXRpY2FsIEludGVycnVwdCAqLworCVNUQVJUX0VYQ0VQVElPTihkb29yYmVsbF9jcml0KTsKKwlDUklUX0VYQ0VQVElPTl9QUk9MT0coMHgyMDgwLCBQUk9MT0dfQURESVRJT05fTk9ORSkKKy8vCUVYQ0VQVElPTl9DT01NT04oMHgyMDgwLCBQQUNBX0VYQ1JJVCwgSU5UU19ESVNBQkxFX0FMTCkKKy8vCWJsCXNwZWNpYWxfcmVnX3NhdmVfY3JpdAorLy8JQ0hFQ0tfTkFQUElORygpOworLy8JYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAorLy8JYmwJLmRvb3JiZWxsX2NyaXRpY2FsX2V4Y2VwdGlvbgorLy8JYglyZXRfZnJvbV9jcml0X2V4Y2VwdAorCWIJLgorCiAKIC8qCiAgKiBBbiBpbnRlcnJ1cHQgY2FtZSBpbiB3aGlsZSBzb2Z0LWRpc2FibGVkOyBjbGVhciBFRSBpbiBTUlIxLApAQCAtNTYzLDYgKzYwMyw4IEBACiBCQURfU1RBQ0tfVFJBTVBPTElORSgweGUwMCkKIEJBRF9TVEFDS19UUkFNUE9MSU5FKDB4ZjAwKQogQkFEX1NUQUNLX1RSQU1QT0xJTkUoMHhmMjApCitCQURfU1RBQ0tfVFJBTVBPTElORSgweDIwNzApCitCQURfU1RBQ0tfVFJBTVBPTElORSgweDIwODApCiAKIAkuZ2xvYmwJYmFkX3N0YWNrX2Jvb2szZQogYmFkX3N0YWNrX2Jvb2szZToKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NHMuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NHMuUwppbmRleCAzZTQyM2ZiLi5mNTMwMjlhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2V4Y2VwdGlvbnMtNjRzLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0cy5TCkBAIC04MjgsNiArODI4LDcgQEAKIAogLyogV2UgaGF2ZSBhIGRhdGEgYnJlYWtwb2ludCBleGNlcHRpb24gLSBoYW5kbGUgaXQgKi8KIGhhbmRsZV9kYWJyX2ZhdWx0OgorCWJsCS5zYXZlX252Z3BycwogCWxkICAgICAgcjQsX0RBUihyMSkKIAlsZCAgICAgIHI1LF9EU0lTUihyMSkKIAlhZGRpICAgIHIzLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFECmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2ZzbF9ib29rZV9lbnRyeV9tYXBwaW5nLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2ZzbF9ib29rZV9lbnRyeV9tYXBwaW5nLlMKaW5kZXggYmViNGQ3OC4uYTkyYzc5YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9mc2xfYm9va2VfZW50cnlfbWFwcGluZy5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZnNsX2Jvb2tlX2VudHJ5X21hcHBpbmcuUwpAQCAtMjA1LDggKzIwNSw3IEBACiAJYmRueisgICBuZXh0X3RsYl9zZXR1cAogCiAvKiA3LiBKdW1wIHRvIG91ciAxOjEgbWFwcGluZyAqLwotCWxpCXI2LCAwCi0KKwltcglyNiwgcjI1CiAjZWxzZQogCSNlcnJvciBZb3UgbmVlZCB0byBzcGVjaWZ5IHRoZSBtYXBwaW5nIG9yIG5vdCB1c2UgdGhpcyBhdCBhbGwuCiAjZW5kaWYKQEAgLTIxNyw3ICsyMTYsNiBAQAogMToJbWZscglyOQogCXJsd2ltaQlyNixyOSwwLDIwLDMxCiAJYWRkaQlyNixyNiwoMmYgLSAxYikKLQlhZGQJcjYsIHI2LCByMjUKIAltdHNwcglTUFJOX1NSUjAscjYKIAltdHNwcglTUFJOX1NSUjEscjcKIAlyZmkJCQkJLyogc3RhcnQgZXhlY3V0aW9uIG91dCBvZiBUTEIxWzBdIGVudHJ5ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2h3X2JyZWFrcG9pbnQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlY2QwNDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2h3X2JyZWFrcG9pbnQuYwpAQCAtMCwwICsxLDM2NCBAQAorLyoKKyAqIEhXX2JyZWFrcG9pbnQ6IGEgdW5pZmllZCBrZXJuZWwvdXNlci1zcGFjZSBoYXJkd2FyZSBicmVha3BvaW50IGZhY2lsaXR5LAorICogdXNpbmcgdGhlIENQVSdzIGRlYnVnIHJlZ2lzdGVycy4gRGVyaXZlZCBmcm9tCisgKiAiYXJjaC94ODYva2VybmVsL2h3X2JyZWFrcG9pbnQuYyIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIENvcHlyaWdodCAyMDEwIElCTSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBLLlByYXNhZCA8cHJhc2FkQGxpbnV4LnZuZXQuaWJtLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2h3X2JyZWFrcG9pbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKworI2luY2x1ZGUgPGFzbS9od19icmVha3BvaW50Lmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9zc3RlcC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKy8qCisgKiBTdG9yZXMgdGhlIGJyZWFrcG9pbnRzIGN1cnJlbnRseSBpbiB1c2Ugb24gZWFjaCBicmVha3BvaW50IGFkZHJlc3MKKyAqIHJlZ2lzdGVyIGZvciBldmVyeSBjcHUKKyAqLworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwZXJmX2V2ZW50ICosIGJwX3Blcl9yZWcpOworCisvKgorICogUmV0dXJucyB0b3RhbCBudW1iZXIgb2YgZGF0YSBvciBpbnN0cnVjdGlvbiBicmVha3BvaW50cyBhdmFpbGFibGUuCisgKi8KK2ludCBod19icmVha3BvaW50X3Nsb3RzKGludCB0eXBlKQoreworCWlmICh0eXBlID09IFRZUEVfREFUQSkKKwkJcmV0dXJuIEhCUF9OVU07CisJcmV0dXJuIDA7CQkvKiBubyBpbnN0cnVjdGlvbiBicmVha3BvaW50cyBhdmFpbGFibGUgKi8KK30KKworLyoKKyAqIEluc3RhbGwgYSBwZXJmIGNvdW50ZXIgYnJlYWtwb2ludC4KKyAqCisgKiBXZSBzZWVrIGEgZnJlZSBkZWJ1ZyBhZGRyZXNzIHJlZ2lzdGVyIGFuZCB1c2UgaXQgZm9yIHRoaXMKKyAqIGJyZWFrcG9pbnQuCisgKgorICogQXRvbWljOiB3ZSBob2xkIHRoZSBjb3VudGVyLT5jdHgtPmxvY2sgYW5kIHdlIG9ubHkgaGFuZGxlIHZhcmlhYmxlcworICogYW5kIHJlZ2lzdGVycyBsb2NhbCB0byB0aGlzIGNwdS4KKyAqLworaW50IGFyY2hfaW5zdGFsbF9od19icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50ICpicCkKK3sKKwlzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICppbmZvID0gY291bnRlcl9hcmNoX2JwKGJwKTsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqKnNsb3QgPSAmX19nZXRfY3B1X3ZhcihicF9wZXJfcmVnKTsKKworCSpzbG90ID0gYnA7CisKKwkvKgorCSAqIERvIG5vdCBpbnN0YWxsIERBQlIgdmFsdWVzIGlmIHRoZSBpbnN0cnVjdGlvbiBtdXN0IGJlIHNpbmdsZS1zdGVwcGVkLgorCSAqIElmIHNvLCBEQUJSIHdpbGwgYmUgcG9wdWxhdGVkIGluIHNpbmdsZV9zdGVwX2RhYnJfaW5zdHJ1Y3Rpb24oKS4KKwkgKi8KKwlpZiAoY3VycmVudC0+dGhyZWFkLmxhc3RfaGl0X3VicCAhPSBicCkKKwkJc2V0X2RhYnIoaW5mby0+YWRkcmVzcyB8IGluZm8tPnR5cGUgfCBEQUJSX1RSQU5TTEFUSU9OKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVW5pbnN0YWxsIHRoZSBicmVha3BvaW50IGNvbnRhaW5lZCBpbiB0aGUgZ2l2ZW4gY291bnRlci4KKyAqCisgKiBGaXJzdCB3ZSBzZWFyY2ggdGhlIGRlYnVnIGFkZHJlc3MgcmVnaXN0ZXIgaXQgdXNlcyBhbmQgdGhlbiB3ZSBkaXNhYmxlCisgKiBpdC4KKyAqCisgKiBBdG9taWM6IHdlIGhvbGQgdGhlIGNvdW50ZXItPmN0eC0+bG9jayBhbmQgd2Ugb25seSBoYW5kbGUgdmFyaWFibGVzCisgKiBhbmQgcmVnaXN0ZXJzIGxvY2FsIHRvIHRoaXMgY3B1LgorICovCit2b2lkIGFyY2hfdW5pbnN0YWxsX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICoqc2xvdCA9ICZfX2dldF9jcHVfdmFyKGJwX3Blcl9yZWcpOworCisJaWYgKCpzbG90ICE9IGJwKSB7CisJCVdBUk5fT05DRSgxLCAiQ2FuJ3QgZmluZCB0aGUgYnJlYWtwb2ludCIpOworCQlyZXR1cm47CisJfQorCisJKnNsb3QgPSBOVUxMOworCXNldF9kYWJyKDApOworfQorCisvKgorICogUGVyZm9ybSBjbGVhbnVwIG9mIGFyY2gtc3BlY2lmaWMgY291bnRlcnMgZHVyaW5nIHVucmVnaXN0cmF0aW9uCisgKiBvZiB0aGUgcGVyZi1ldmVudAorICovCit2b2lkIGFyY2hfdW5yZWdpc3Rlcl9od19icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50ICpicCkKK3sKKwkvKgorCSAqIElmIHRoZSBicmVha3BvaW50IGlzIHVucmVnaXN0ZXJlZCBiZXR3ZWVuIGEgaHdfYnJlYWtwb2ludF9oYW5kbGVyKCkKKwkgKiBhbmQgdGhlIHNpbmdsZV9zdGVwX2RhYnJfaW5zdHJ1Y3Rpb24oKSwgdGhlbiBjbGVhbnVwIHRoZSBicmVha3BvaW50CisJICogcmVzdG9yYXRpb24gdmFyaWFibGVzIHRvIHByZXZlbnQgZGFuZ2xpbmcgcG9pbnRlcnMuCisJICovCisJaWYgKGJwLT5jdHgtPnRhc2spCisJCWJwLT5jdHgtPnRhc2stPnRocmVhZC5sYXN0X2hpdF91YnAgPSBOVUxMOworfQorCisvKgorICogQ2hlY2sgZm9yIHZpcnR1YWwgYWRkcmVzcyBpbiBrZXJuZWwgc3BhY2UuCisgKi8KK2ludCBhcmNoX2NoZWNrX2JwX2luX2tlcm5lbHNwYWNlKHN0cnVjdCBwZXJmX2V2ZW50ICpicCkKK3sKKwlzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICppbmZvID0gY291bnRlcl9hcmNoX2JwKGJwKTsKKworCXJldHVybiBpc19rZXJuZWxfYWRkcihpbmZvLT5hZGRyZXNzKTsKK30KKworaW50IGFyY2hfYnBfZ2VuZXJpY19maWVsZHMoaW50IHR5cGUsIGludCAqZ2VuX2JwX3R5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBEQUJSX0RBVEFfUkVBRDoKKwkJKmdlbl9icF90eXBlID0gSFdfQlJFQUtQT0lOVF9SOworCQlicmVhazsKKwljYXNlIERBQlJfREFUQV9XUklURToKKwkJKmdlbl9icF90eXBlID0gSFdfQlJFQUtQT0lOVF9XOworCQlicmVhazsKKwljYXNlIChEQUJSX0RBVEFfV1JJVEUgfCBEQUJSX0RBVEFfUkVBRCk6CisJCSpnZW5fYnBfdHlwZSA9IChIV19CUkVBS1BPSU5UX1cgfCBIV19CUkVBS1BPSU5UX1IpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBWYWxpZGF0ZSB0aGUgYXJjaC1zcGVjaWZpYyBIVyBCcmVha3BvaW50IHJlZ2lzdGVyIHNldHRpbmdzCisgKi8KK2ludCBhcmNoX3ZhbGlkYXRlX2h3YmtwdF9zZXR0aW5ncyhzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisJc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCAqaW5mbyA9IGNvdW50ZXJfYXJjaF9icChicCk7CisKKwlpZiAoIWJwKQorCQlyZXR1cm4gcmV0OworCisJc3dpdGNoIChicC0+YXR0ci5icF90eXBlKSB7CisJY2FzZSBIV19CUkVBS1BPSU5UX1I6CisJCWluZm8tPnR5cGUgPSBEQUJSX0RBVEFfUkVBRDsKKwkJYnJlYWs7CisJY2FzZSBIV19CUkVBS1BPSU5UX1c6CisJCWluZm8tPnR5cGUgPSBEQUJSX0RBVEFfV1JJVEU7CisJCWJyZWFrOworCWNhc2UgSFdfQlJFQUtQT0lOVF9SIHwgSFdfQlJFQUtQT0lOVF9XOgorCQlpbmZvLT50eXBlID0gKERBQlJfREFUQV9SRUFEIHwgREFCUl9EQVRBX1dSSVRFKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpbmZvLT5hZGRyZXNzID0gYnAtPmF0dHIuYnBfYWRkcjsKKwlpbmZvLT5sZW4gPSBicC0+YXR0ci5icF9sZW47CisKKwkvKgorCSAqIFNpbmNlIGJyZWFrcG9pbnQgbGVuZ3RoIGNhbiBiZSBhIG1heGltdW0gb2YgSFdfQlJFQUtQT0lOVF9MRU4oOCkKKwkgKiBhbmQgYnJlYWtwb2ludCBhZGRyZXNzZXMgYXJlIGFsaWduZWQgdG8gbmVhcmVzdCBkb3VibGUtd29yZAorCSAqIEhXX0JSRUFLUE9JTlRfQUxJR04gYnkgcm91bmRpbmcgb2ZmIHRvIHRoZSBsb3dlciBhZGRyZXNzLCB0aGUKKwkgKiAnc3ltYm9sc2l6ZScgc2hvdWxkIHNhdGlzZnkgdGhlIGNoZWNrIGJlbG93LgorCSAqLworCWlmIChpbmZvLT5sZW4gPgorCSAgICAoSFdfQlJFQUtQT0lOVF9MRU4gLSAoaW5mby0+YWRkcmVzcyAmIEhXX0JSRUFLUE9JTlRfQUxJR04pKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZXN0b3JlcyB0aGUgYnJlYWtwb2ludCBvbiB0aGUgZGVidWcgcmVnaXN0ZXJzLgorICogSW52b2tlIHRoaXMgZnVuY3Rpb24gaWYgaXQgaXMga25vd24gdGhhdCB0aGUgZXhlY3V0aW9uIGNvbnRleHQgaXMKKyAqIGFib3V0IHRvIGNoYW5nZSB0byBjYXVzZSBsb3NzIG9mIE1TUl9TRSBzZXR0aW5ncy4KKyAqLwordm9pZCB0aHJlYWRfY2hhbmdlX3BjKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICppbmZvOworCisJaWYgKGxpa2VseSghdHNrLT50aHJlYWQubGFzdF9oaXRfdWJwKSkKKwkJcmV0dXJuOworCisJaW5mbyA9IGNvdW50ZXJfYXJjaF9icCh0c2stPnRocmVhZC5sYXN0X2hpdF91YnApOworCXJlZ3MtPm1zciAmPSB+TVNSX1NFOworCXNldF9kYWJyKGluZm8tPmFkZHJlc3MgfCBpbmZvLT50eXBlIHwgREFCUl9UUkFOU0xBVElPTik7CisJdHNrLT50aHJlYWQubGFzdF9oaXRfdWJwID0gTlVMTDsKK30KKworLyoKKyAqIEhhbmRsZSBkZWJ1ZyBleGNlcHRpb24gbm90aWZpY2F0aW9ucy4KKyAqLworaW50IF9fa3Byb2JlcyBod19icmVha3BvaW50X2hhbmRsZXIoc3RydWN0IGRpZV9hcmdzICphcmdzKQoreworCWludCByYyA9IE5PVElGWV9TVE9QOworCXN0cnVjdCBwZXJmX2V2ZW50ICpicDsKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGFyZ3MtPnJlZ3M7CisJaW50IHN0ZXBwZWQgPSAxOworCXN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQgKmluZm87CisJdW5zaWduZWQgaW50IGluc3RyOworCXVuc2lnbmVkIGxvbmcgZGFyID0gcmVncy0+ZGFyOworCisJLyogRGlzYWJsZSBicmVha3BvaW50cyBkdXJpbmcgZXhjZXB0aW9uIGhhbmRsaW5nICovCisJc2V0X2RhYnIoMCk7CisKKwkvKgorCSAqIFRoZSBjb3VudGVyIG1heSBiZSBjb25jdXJyZW50bHkgcmVsZWFzZWQgYnV0IHRoYXQgY2FuIG9ubHkKKwkgKiBvY2N1ciBmcm9tIGEgY2FsbF9yY3UoKSBwYXRoLiBXZSBjYW4gdGhlbiBzYWZlbHkgZmV0Y2gKKwkgKiB0aGUgYnJlYWtwb2ludCwgdXNlIGl0cyBjYWxsYmFjaywgdG91Y2ggaXRzIGNvdW50ZXIKKwkgKiB3aGlsZSB3ZSBhcmUgaW4gYW4gcmN1X3JlYWRfbG9jaygpIHBhdGguCisJICovCisJcmN1X3JlYWRfbG9jaygpOworCisJYnAgPSBfX2dldF9jcHVfdmFyKGJwX3Blcl9yZWcpOworCWlmICghYnApCisJCWdvdG8gb3V0OworCWluZm8gPSBjb3VudGVyX2FyY2hfYnAoYnApOworCisJLyoKKwkgKiBSZXR1cm4gZWFybHkgYWZ0ZXIgaW52b2tpbmcgdXNlci1jYWxsYmFjayBmdW5jdGlvbiB3aXRob3V0IHJlc3RvcmluZworCSAqIERBQlIgaWYgdGhlIGJyZWFrcG9pbnQgaXMgZnJvbSBwdHJhY2Ugd2hpY2ggYWx3YXlzIG9wZXJhdGVzIGluCisJICogb25lLXNob3QgbW9kZS4gVGhlIHB0cmFjZS1lZCBwcm9jZXNzIHdpbGwgcmVjZWl2ZSB0aGUgU0lHVFJBUCBzaWduYWwKKwkgKiBnZW5lcmF0ZWQgaW4gZG9fZGFicigpLgorCSAqLworCWlmIChicC0+b3ZlcmZsb3dfaGFuZGxlciA9PSBwdHJhY2VfdHJpZ2dlcmVkKSB7CisJCXBlcmZfYnBfZXZlbnQoYnAsIHJlZ3MpOworCQlyYyA9IE5PVElGWV9ET05FOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFZlcmlmeSBpZiBkYXIgbGllcyB3aXRoaW4gdGhlIGFkZHJlc3MgcmFuZ2Ugb2NjdXBpZWQgYnkgdGhlIHN5bWJvbAorCSAqIGJlaW5nIHdhdGNoZWQgdG8gZmlsdGVyIGV4dHJhbmVvdXMgZXhjZXB0aW9ucy4gIElmIGl0IGRvZXNuJ3QsCisJICogd2Ugc3RpbGwgbmVlZCB0byBzaW5nbGUtc3RlcCB0aGUgaW5zdHJ1Y3Rpb24sIGJ1dCB3ZSBkb24ndAorCSAqIGdlbmVyYXRlIGFuIGV2ZW50LgorCSAqLworCWluZm8tPmV4dHJhbmVvdXNfaW50ZXJydXB0ID0gISgoYnAtPmF0dHIuYnBfYWRkciA8PSBkYXIpICYmCisJCQkoZGFyIC0gYnAtPmF0dHIuYnBfYWRkciA8IGJwLT5hdHRyLmJwX2xlbikpOworCisJLyogRG8gbm90IGVtdWxhdGUgdXNlci1zcGFjZSBpbnN0cnVjdGlvbnMsIGluc3RlYWQgc2luZ2xlLXN0ZXAgdGhlbSAqLworCWlmICh1c2VyX21vZGUocmVncykpIHsKKwkJYnAtPmN0eC0+dGFzay0+dGhyZWFkLmxhc3RfaGl0X3VicCA9IGJwOworCQlyZWdzLT5tc3IgfD0gTVNSX1NFOworCQlnb3RvIG91dDsKKwl9CisKKwlzdGVwcGVkID0gMDsKKwlpbnN0ciA9IDA7CisJaWYgKCFfX2dldF91c2VyX2luYXRvbWljKGluc3RyLCAodW5zaWduZWQgaW50ICopIHJlZ3MtPm5pcCkpCisJCXN0ZXBwZWQgPSBlbXVsYXRlX3N0ZXAocmVncywgaW5zdHIpOworCisJLyoKKwkgKiBlbXVsYXRlX3N0ZXAoKSBjb3VsZCBub3QgZXhlY3V0ZSBpdC4gV2UndmUgZmFpbGVkIGluIHJlbGlhYmx5CisJICogaGFuZGxpbmcgdGhlIGh3LWJyZWFrcG9pbnQuIFVucmVnaXN0ZXIgaXQgYW5kIHRocm93IGEgd2FybmluZworCSAqIG1lc3NhZ2UgdG8gbGV0IHRoZSB1c2VyIGtub3cgYWJvdXQgaXQuCisJICovCisJaWYgKCFzdGVwcGVkKSB7CisJCVdBUk4oMSwgIlVuYWJsZSB0byBoYW5kbGUgaGFyZHdhcmUgYnJlYWtwb2ludC4gQnJlYWtwb2ludCBhdCAiCisJCQkiMHglbHggd2lsbCBiZSBkaXNhYmxlZC4iLCBpbmZvLT5hZGRyZXNzKTsKKwkJcGVyZl9ldmVudF9kaXNhYmxlKGJwKTsKKwkJZ290byBvdXQ7CisJfQorCS8qCisJICogQXMgYSBwb2xpY3ksIHRoZSBjYWxsYmFjayBpcyBpbnZva2VkIGluIGEgJ3RyaWdnZXItYWZ0ZXItZXhlY3V0ZScKKwkgKiBmYXNoaW9uCisJICovCisJaWYgKCFpbmZvLT5leHRyYW5lb3VzX2ludGVycnVwdCkKKwkJcGVyZl9icF9ldmVudChicCwgcmVncyk7CisKKwlzZXRfZGFicihpbmZvLT5hZGRyZXNzIHwgaW5mby0+dHlwZSB8IERBQlJfVFJBTlNMQVRJT04pOworb3V0OgorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiByYzsKK30KKworLyoKKyAqIEhhbmRsZSBzaW5nbGUtc3RlcCBleGNlcHRpb25zIGZvbGxvd2luZyBhIERBQlIgaGl0LgorICovCitpbnQgX19rcHJvYmVzIHNpbmdsZV9zdGVwX2RhYnJfaW5zdHJ1Y3Rpb24oc3RydWN0IGRpZV9hcmdzICphcmdzKQoreworCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gYXJncy0+cmVnczsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqYnAgPSBOVUxMOworCXN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQgKmJwX2luZm87CisKKwlicCA9IGN1cnJlbnQtPnRocmVhZC5sYXN0X2hpdF91YnA7CisJLyoKKwkgKiBDaGVjayBpZiB3ZSBhcmUgc2luZ2xlLXN0ZXBwaW5nIGFzIGEgcmVzdWx0IG9mIGEKKwkgKiBwcmV2aW91cyBIVyBCcmVha3BvaW50IGV4Y2VwdGlvbgorCSAqLworCWlmICghYnApCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCWJwX2luZm8gPSBjb3VudGVyX2FyY2hfYnAoYnApOworCisJLyoKKwkgKiBXZSBzaGFsbCBpbnZva2UgdGhlIHVzZXItZGVmaW5lZCBjYWxsYmFjayBmdW5jdGlvbiBpbiB0aGUgc2luZ2xlCisJICogc3RlcHBpbmcgaGFuZGxlciB0byBjb25maXJtIHRvICd0cmlnZ2VyLWFmdGVyLWV4ZWN1dGUnIHNlbWFudGljcworCSAqLworCWlmICghYnBfaW5mby0+ZXh0cmFuZW91c19pbnRlcnJ1cHQpCisJCXBlcmZfYnBfZXZlbnQoYnAsIHJlZ3MpOworCisJc2V0X2RhYnIoYnBfaW5mby0+YWRkcmVzcyB8IGJwX2luZm8tPnR5cGUgfCBEQUJSX1RSQU5TTEFUSU9OKTsKKwljdXJyZW50LT50aHJlYWQubGFzdF9oaXRfdWJwID0gTlVMTDsKKworCS8qCisJICogSWYgdGhlIHByb2Nlc3Mgd2FzIGJlaW5nIHNpbmdsZS1zdGVwcGVkIGJ5IHB0cmFjZSwgbGV0IHRoZQorCSAqIG90aGVyIHNpbmdsZS1zdGVwIGFjdGlvbnMgb2NjdXIgKGUuZy4gZ2VuZXJhdGUgU0lHVFJBUCkuCisJICovCisJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NJTkdMRVNURVApKQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisKKwlyZXR1cm4gTk9USUZZX1NUT1A7Cit9CisKKy8qCisgKiBIYW5kbGUgZGVidWcgZXhjZXB0aW9uIG5vdGlmaWNhdGlvbnMuCisgKi8KK2ludCBfX2twcm9iZXMgaHdfYnJlYWtwb2ludF9leGNlcHRpb25zX25vdGlmeSgKKwkJc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQoreworCWludCByZXQgPSBOT1RJRllfRE9ORTsKKworCXN3aXRjaCAodmFsKSB7CisJY2FzZSBESUVfREFCUl9NQVRDSDoKKwkJcmV0ID0gaHdfYnJlYWtwb2ludF9oYW5kbGVyKGRhdGEpOworCQlicmVhazsKKwljYXNlIERJRV9TU1RFUDoKKwkJcmV0ID0gc2luZ2xlX3N0ZXBfZGFicl9pbnN0cnVjdGlvbihkYXRhKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFJlbGVhc2UgdGhlIHVzZXIgYnJlYWtwb2ludHMgdXNlZCBieSBwdHJhY2UKKyAqLwordm9pZCBmbHVzaF9wdHJhY2VfaHdfYnJlYWtwb2ludChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCA9ICZ0c2stPnRocmVhZDsKKworCXVucmVnaXN0ZXJfaHdfYnJlYWtwb2ludCh0LT5wdHJhY2VfYnBzWzBdKTsKKwl0LT5wdHJhY2VfYnBzWzBdID0gTlVMTDsKK30KKwordm9pZCBod19icmVha3BvaW50X3BtdV9yZWFkKHN0cnVjdCBwZXJmX2V2ZW50ICpicCkKK3sKKwkvKiBUT0RPICovCit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2libWVidXMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWJtZWJ1cy5jCmluZGV4IDIxMjY2YWIuLjliNjI2Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWJtZWJ1cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWJtZWJ1cy5jCkBAIC0xNDAsMTkgKzE0MCwxOSBAQAogCiBzdGF0aWMgaW50IGlibWVidXNfbWF0Y2hfcGF0aChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpkbiA9IHRvX29mX2RldmljZShkZXYpLT5kZXYub2Zfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldiktPmRldi5vZl9ub2RlOwogCXJldHVybiAoZG4tPmZ1bGxfbmFtZSAmJgogCQkoc3RyY2FzZWNtcCgoY2hhciAqKWRhdGEsIGRuLT5mdWxsX25hbWUpID09IDApKTsKIH0KIAogc3RhdGljIGludCBpYm1lYnVzX21hdGNoX25vZGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewotCXJldHVybiB0b19vZl9kZXZpY2UoZGV2KS0+ZGV2Lm9mX25vZGUgPT0gZGF0YTsKKwlyZXR1cm4gdG9fcGxhdGZvcm1fZGV2aWNlKGRldiktPmRldi5vZl9ub2RlID09IGRhdGE7CiB9CiAKIHN0YXRpYyBpbnQgaWJtZWJ1c19jcmVhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pCiB7Ci0Jc3RydWN0IG9mX2RldmljZSAqZGV2OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldjsKIAlpbnQgcmV0OwogCiAJZGV2ID0gb2ZfZGV2aWNlX2FsbG9jKGRuLCBOVUxMLCAmaWJtZWJ1c19idXNfZGV2aWNlKTsKQEAgLTI5OCw3ICsyOTgsNyBAQAogCiAJaWYgKChkZXYgPSBidXNfZmluZF9kZXZpY2UoJmlibWVidXNfYnVzX3R5cGUsIE5VTEwsIHBhdGgsCiAJCQkJICAgaWJtZWJ1c19tYXRjaF9wYXRoKSkpIHsKLQkJb2ZfZGV2aWNlX3VucmVnaXN0ZXIodG9fb2ZfZGV2aWNlKGRldikpOworCQlvZl9kZXZpY2VfdW5yZWdpc3Rlcih0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSk7CiAKIAkJa2ZyZWUocGF0aCk7CiAJCXJldHVybiBjb3VudDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWRsZV9ib29rM2UuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWRsZV9ib29rM2UuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmMwMDJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pZGxlX2Jvb2szZS5TCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBJQk0gQ29ycCwgQmVuamFtaW4gSGVycmVuc2NobWlkdCA8YmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnPgorICoKKyAqIEdlbmVyaWMgaWRsZSByb3V0aW5lIGZvciBCb29rM0UgcHJvY2Vzc29ycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxhc20vcmVnLmg+CisjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vcHBjLW9wY29kZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKworLyogNjQtYml0IHZlcnNpb24gb25seSBmb3Igbm93ICovCisjaWZkZWYgQ09ORklHX1BQQzY0CisKK19HTE9CQUwoYm9vazNlX2lkbGUpCisJLyogU2F2ZSBMUiBmb3IgbGF0ZXIgKi8KKwltZmxyCXIwCisJc3RkCXIwLDE2KHIxKQorCisJLyogSGFyZCBkaXNhYmxlIGludGVycnVwdHMgKi8KKwl3cnRlZWkJMAorCisJLyogTm93IGNoZWNrIGlmIGFuIGludGVycnVwdCBjYW1lIGluIHdoaWxlIHdlIHdlcmUgc29mdCBkaXNhYmxlZAorCSAqIHNpbmNlIHdlIG1heSBvdGhlcndpc2UgbG9zZSBpdCAoZG9vcmJlbGxzIGV0Yy4uLikuIFdlIGtub3cKKwkgKiB0aGF0IHNpbmNlIFBBQ0FIQVJESVJRRU4gd2lsbCBoYXZlIGJlZW4gY2xlYXJlZCBpbiB0aGF0IGNhc2UuCisJICovCisJbGJ6CXIzLFBBQ0FIQVJESVJRRU4ocjEzKQorCWNtcHdpCWNyMCxyMywwCisJYmVxbHIKKworCS8qIE5vdyB3ZSBhcmUgZ29pbmcgdG8gbWFyayBvdXJzZWx2ZXMgYXMgc29mdCBhbmQgaGFyZCBlbmFibGVzIGluCisJICogb3JkZXIgdG8gYmUgYWJsZSB0byB0YWtlIGludGVycnVwdHMgd2hpbGUgYXNsZWVwLiBXZSBpbmZvcm0gbG9ja2RlcAorCSAqIG9mIHRoYXQuIFdlIGRvbid0IGFjdHVhbGx5IHR1cm4gaW50ZXJydXB0cyBvbiBqdXN0IHlldCB0aG8uCisJICovCisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCisJc3RkdSAgICByMSwtMTI4KHIxKQorCWJsCS50cmFjZV9oYXJkaXJxc19vbgorI2VuZGlmCisJbGkJcjAsMQorCXN0YglyMCxQQUNBU09GVElSUUVOKHIxMykKKwlzdGIJcjAsUEFDQUhBUkRJUlFFTihyMTMpCisJCisJLyogSW50ZXJydXB0cyB3aWxsIG1ha2UgdXNlIHJldHVybiB0byBMUiwgc28gZ2V0IHNvbWV0aGluZyB3ZSB3YW50CisJICogaW4gdGhlcmUKKwkgKi8KKwlibAkxZgorCisJLyogSGFyZCBkaXNhYmxlIGludGVycnVwdHMgYWdhaW4gKi8KKwl3cnRlZWkJMAorCisJLyogTWFyayB0aGVtIG9mZiBhZ2FpbiBpbiB0aGUgUEFDQSBhcyB3ZWxsICovCisJbGkJcjAsMAorCXN0YglyMCxQQUNBU09GVElSUUVOKHIxMykKKwlzdGIJcjAsUEFDQUhBUkRJUlFFTihyMTMpCisKKwkvKiBUZWxsIGxvY2tkZXAgYWJvdXQgaXQgKi8KKyNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKKwlibAkudHJhY2VfaGFyZGlycXNfb2ZmCisJYWRkaSAgICByMSxyMSwxMjgKKyNlbmRpZgorCWxkCXIwLDE2KHIxKQorCW10bHIJcjAKKwlibHIKKworMToJLyogTGV0J3Mgc2V0IHRoZSBfVExGX05BUFBJTkcgZmxhZyBzbyBpbnRlcnJ1cHRzIG1ha2UgdXMgcmV0dXJuCisJICogdG8gdGhlIHJpZ2h0IHNwb3QKKwkqLworCWNscnJkaQlyMTEscjEsVEhSRUFEX1NISUZUCisJbGQJcjEwLFRJX0xPQ0FMX0ZMQUdTKHIxMSkKKwlvcmkJcjEwLHIxMCxfVExGX05BUFBJTkcKKwlzdGQJcjEwLFRJX0xPQ0FMX0ZMQUdTKHIxMSkKKworCS8qIFdlIGNhbiBub3cgcmUtZW5hYmxlIGhhcmQgaW50ZXJydXB0cyBhbmQgZ28gdG8gc2xlZXAgKi8KKwl3cnRlZWkJMQorMToJUFBDX1dBSVQoMCkKKwliCTFiCisKKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCmluZGV4IDMzMzNiYmQuLmQzY2U2N2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwpAQCAtNTMsNiArNTMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtNjQsNiArNjYsOCBAQAogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CisjaW5jbHVkZSA8YXNtL2RiZWxsLmg+CisKICNpZmRlZiBDT05GSUdfUFBDNjQKICNpbmNsdWRlIDxhc20vcGFjYS5oPgogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgpAQCAtMTUzLDE0ICsxNTcsMjggQEAKIAlpZiAoZ2V0X2hhcmRfZW5hYmxlZCgpKQogCQlyZXR1cm47CiAKKyNpZiBkZWZpbmVkKENPTkZJR19CT09LRSkgJiYgZGVmaW5lZChDT05GSUdfU01QKQorCS8qIENoZWNrIGZvciBwZW5kaW5nIGRvb3JiZWxsIGludGVycnVwdHMgYW5kIHJlc2VuZCB0byBvdXJzZWxmICovCisJZG9vcmJlbGxfY2hlY2tfc2VsZigpOworI2VuZGlmCisKIAkvKgogCSAqIE5lZWQgdG8gaGFyZC1lbmFibGUgaW50ZXJydXB0cyBoZXJlLiAgU2luY2UgY3VycmVudGx5IGRpc2FibGVkLAogCSAqIG5vIG5lZWQgdG8gdGFrZSBmdXJ0aGVyIGFzbSBwcmVjYXV0aW9ucyBhZ2FpbnN0IHByZWVtcHRpb247IGJ1dAogCSAqIHVzZSBsb2NhbF9wYWNhIGluc3RlYWQgb2YgZ2V0X3BhY2EoKSB0byBhdm9pZCBwcmVlbXB0aW9uIGNoZWNraW5nLgogCSAqLwogCWxvY2FsX3BhY2EtPmhhcmRfZW5hYmxlZCA9IGVuOworCisjaWZuZGVmIENPTkZJR19CT09LRQorCS8qIE9uIHNlcnZlciwgcmUtdHJpZ2dlciB0aGUgZGVjcmVtZW50ZXIgaWYgaXQgd2VudCBuZWdhdGl2ZSBzaW5jZQorCSAqIHNvbWUgcHJvY2Vzc29ycyBvbmx5IHRyaWdnZXIgb24gZWRnZSB0cmFuc2l0aW9ucyBvZiB0aGUgc2lnbiBiaXQuCisJICoKKwkgKiBCb29rRSBoYXMgYSBsZXZlbCBzZW5zaXRpdmUgZGVjcmVtZW50ZXIgKGxhdGNoZXMgaW4gVFNSKSBzbyB3ZQorCSAqIGRvbid0IG5lZWQgdGhhdAorCSAqLwogCWlmICgoaW50KW1mc3ByKFNQUk5fREVDKSA8IDApCiAJCW10c3ByKFNQUk5fREVDLCAxKTsKKyNlbmRpZiAvKiBDT05GSUdfQk9PS0UgKi8KIAogCS8qCiAJICogRm9yY2UgdGhlIGRlbGl2ZXJ5IG9mIHBlbmRpbmcgc29mdC1kaXNhYmxlZCBpbnRlcnJ1cHRzIG9uIFBTMy4KQEAgLTI5NSw3ICszMTMsMTAgQEAKIAogCWZvcl9lYWNoX2lycShpcnEpIHsKIAkJZGVzYyA9IGlycV90b19kZXNjKGlycSk7Ci0JCWlmIChkZXNjICYmIGRlc2MtPnN0YXR1cyAmIElSUV9QRVJfQ1BVKQorCQlpZiAoIWRlc2MpCisJCQljb250aW51ZTsKKworCQlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX1BFUl9DUFUpCiAJCQljb250aW51ZTsKIAogCQljcHVtYXNrX2FuZChtYXNrLCBkZXNjLT5hZmZpbml0eSwgbWFwKTsKQEAgLTgwMSwxOCArODIyLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlycV9jcmVhdGVfb2ZfbWFwcGluZyk7CiAKLXVuc2lnbmVkIGludCBpcnFfb2ZfcGFyc2VfYW5kX21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgaW50IGluZGV4KQotewotCXN0cnVjdCBvZl9pcnEgb2lycTsKLQotCWlmIChvZl9pcnFfbWFwX29uZShkZXYsIGluZGV4LCAmb2lycSkpCi0JCXJldHVybiBOT19JUlE7Ci0KLQlyZXR1cm4gaXJxX2NyZWF0ZV9vZl9tYXBwaW5nKG9pcnEuY29udHJvbGxlciwgb2lycS5zcGVjaWZpZXIsCi0JCQkJICAgICBvaXJxLnNpemUpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaXJxX29mX3BhcnNlX2FuZF9tYXApOwotCiB2b2lkIGlycV9kaXNwb3NlX21hcHBpbmcodW5zaWduZWQgaW50IHZpcnEpCiB7CiAJc3RydWN0IGlycV9ob3N0ICpob3N0OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9rZ2RiLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2tnZGIuYwppbmRleCA4MmE3YjIyLi43ZjYxYTNhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2tnZGIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2tnZGIuYwpAQCAtMTI5LDcgKzEyOSw3IEBACiAJCXJldHVybiAwOwogCiAJaWYgKCoodTMyICopIChyZWdzLT5uaXApID09ICoodTMyICopICgmYXJjaF9rZ2RiX29wcy5nZGJfYnB0X2luc3RyKSkKLQkJcmVncy0+bmlwICs9IDQ7CisJCXJlZ3MtPm5pcCArPSBCUkVBS19JTlNUUl9TSVpFOwogCiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2xlZ2FjeV9zZXJpYWwuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbGVnYWN5X3NlcmlhbC5jCmluZGV4IDAzNWFkYTUuLmMxZmQwZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbGVnYWN5X3NlcmlhbC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbGVnYWN5X3NlcmlhbC5jCkBAIC00LDYgKzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21hY2hpbmVfa2V4ZWMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCmluZGV4IGJiM2Q4OTMuLmRkNmMxNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1iLmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KQEAgLTQ1LDYgKzQ1LDE4IEBACiAJCXBwY19tZC5tYWNoaW5lX2tleGVjX2NsZWFudXAoaW1hZ2UpOwogfQogCit2b2lkIGFyY2hfY3Jhc2hfc2F2ZV92bWNvcmVpbmZvKHZvaWQpCit7CisKKyNpZmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUworCVZNQ09SRUlORk9fU1lNQk9MKG5vZGVfZGF0YSk7CisJVk1DT1JFSU5GT19MRU5HVEgobm9kZV9kYXRhLCBNQVhfTlVNTk9ERVMpOworI2VuZGlmCisjaWZuZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCisJVk1DT1JFSU5GT19TWU1CT0woY29udGlnX3BhZ2VfZGF0YSk7CisjZW5kaWYKK30KKwogLyoKICAqIERvIG5vdCBhbGxvY2F0ZSBtZW1vcnkgKG9yIGZhaWwgaW4gYW55IHdheSkgaW4gbWFjaGluZV9rZXhlYygpLgogICogV2UgYXJlIHBhc3QgdGhlIHBvaW50IG9mIG5vIHJldHVybiwgY29tbWl0dGVkIHRvIHJlYm9vdGluZyBub3cuCkBAIC02NiwxMSArNzgsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcgY3Jhc2hfc2l6ZSwgY3Jhc2hfYmFzZTsKIAlpbnQgcmV0OwogCi0JLyogdGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvZiBsbWJfcGh5c19tZW1fc2l6ZSgpICovCi0JbG1iX2FuYWx5emUoKTsKKwkvKiB0aGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG9mIG1lbWJsb2NrX3BoeXNfbWVtX3NpemUoKSAqLworCW1lbWJsb2NrX2FuYWx5emUoKTsKIAogCS8qIHVzZSBjb21tb24gcGFyc2luZyAqLwotCXJldCA9IHBhcnNlX2NyYXNoa2VybmVsKGJvb3RfY29tbWFuZF9saW5lLCBsbWJfcGh5c19tZW1fc2l6ZSgpLAorCXJldCA9IHBhcnNlX2NyYXNoa2VybmVsKGJvb3RfY29tbWFuZF9saW5lLCBtZW1ibG9ja19waHlzX21lbV9zaXplKCksCiAJCQkmY3Jhc2hfc2l6ZSwgJmNyYXNoX2Jhc2UpOwogCWlmIChyZXQgPT0gMCAmJiBjcmFzaF9zaXplID4gMCkgewogCQljcmFzaGtfcmVzLnN0YXJ0ID0gY3Jhc2hfYmFzZTsKQEAgLTEzMyw5ICsxNDUsOSBAQAogCQkJImZvciBjcmFzaGtlcm5lbCAoU3lzdGVtIFJBTTogJWxkTUIpXG4iLAogCQkJKHVuc2lnbmVkIGxvbmcpKGNyYXNoX3NpemUgPj4gMjApLAogCQkJKHVuc2lnbmVkIGxvbmcpKGNyYXNoa19yZXMuc3RhcnQgPj4gMjApLAotCQkJKHVuc2lnbmVkIGxvbmcpKGxtYl9waHlzX21lbV9zaXplKCkgPj4gMjApKTsKKwkJCSh1bnNpZ25lZCBsb25nKShtZW1ibG9ja19waHlzX21lbV9zaXplKCkgPj4gMjApKTsKIAotCWxtYl9yZXNlcnZlKGNyYXNoa19yZXMuc3RhcnQsIGNyYXNoX3NpemUpOworCW1lbWJsb2NrX3Jlc2VydmUoY3Jhc2hrX3Jlcy5zdGFydCwgY3Jhc2hfc2l6ZSk7CiB9CiAKIGludCBvdmVybGFwc19jcmFzaGtlcm5lbCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCkBAIC0xNDQsMjQgKzE1NiwyNCBAQAogfQogCiAvKiBWYWx1ZXMgd2UgbmVlZCB0byBleHBvcnQgdG8gdGhlIHNlY29uZCBrZXJuZWwgdmlhIHRoZSBkZXZpY2UgdHJlZS4gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGtlcm5lbF9lbmQ7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBjcmFzaGtfc2l6ZTsKK3N0YXRpYyBwaHlzX2FkZHJfdCBrZXJuZWxfZW5kOworc3RhdGljIHBoeXNfYWRkcl90IGNyYXNoa19zaXplOwogCiBzdGF0aWMgc3RydWN0IHByb3BlcnR5IGtlcm5lbF9lbmRfcHJvcCA9IHsKIAkubmFtZSA9ICJsaW51eCxrZXJuZWwtZW5kIiwKLQkubGVuZ3RoID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCS5sZW5ndGggPSBzaXplb2YocGh5c19hZGRyX3QpLAogCS52YWx1ZSA9ICZrZXJuZWxfZW5kLAogfTsKIAogc3RhdGljIHN0cnVjdCBwcm9wZXJ0eSBjcmFzaGtfYmFzZV9wcm9wID0gewogCS5uYW1lID0gImxpbnV4LGNyYXNoa2VybmVsLWJhc2UiLAotCS5sZW5ndGggPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJLmxlbmd0aCA9IHNpemVvZihwaHlzX2FkZHJfdCksCiAJLnZhbHVlID0gJmNyYXNoa19yZXMuc3RhcnQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHByb3BlcnR5IGNyYXNoa19zaXplX3Byb3AgPSB7CiAJLm5hbWUgPSAibGludXgsY3Jhc2hrZXJuZWwtc2l6ZSIsCi0JLmxlbmd0aCA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkubGVuZ3RoID0gc2l6ZW9mKHBoeXNfYWRkcl90KSwKIAkudmFsdWUgPSAmY3Jhc2hrX3NpemUsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jCmluZGV4IGVkMzFhMjkuLjU4M2FmNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jCkBAIC0xNSw2ICsxNSw4IEBACiAjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0X3Rhc2suaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vY3VycmVudC5oPgpAQCAtMjUsNiArMjcsNyBAQAogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgkvKiBfZW5kICovCiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CisjaW5jbHVkZSA8YXNtL2h3X2JyZWFrcG9pbnQuaD4KIAogaW50IGRlZmF1bHRfbWFjaGluZV9rZXhlY19wcmVwYXJlKHN0cnVjdCBraW1hZ2UgKmltYWdlKQogewpAQCAtMTY1LDYgKzE2OCw3IEBACiAJd2hpbGUoa2V4ZWNfYWxsX2lycV9kaXNhYmxlZCA9PSAwKQogCQljcHVfcmVsYXgoKTsKIAltYigpOyAvKiBtYWtlIHN1cmUgYWxsIGlycXMgYXJlIGRpc2FibGVkIGJlZm9yZSB0aGlzICovCisJaHdfYnJlYWtwb2ludF9kaXNhYmxlKCk7CiAJLyoKIAkgKiBOb3cgZXZlcnkgQ1BVIGhhcyBJUlFzIG9mZiwgd2UgY2FuIGNsZWFyIG91dCBhbnkgcGVuZGluZwogCSAqIElQSXMgYW5kIGJlIHN1cmUgdGhhdCBubyBtb3JlIHdpbGwgY29tZSBpbiBhZnRlciB0aGlzLgpAQCAtMTgwLDggKzE4NCwyMiBAQAogewogCWludCBteV9jcHUsIGksIG5vdGlmaWVkPS0xOwogCisJaHdfYnJlYWtwb2ludF9kaXNhYmxlKCk7CiAJbXlfY3B1ID0gZ2V0X2NwdSgpOwotCS8qIE1ha2Ugc3VyZSBlYWNoIENQVSBoYXMgYXRsZWFzdCBtYWRlIGl0IHRvIHRoZSBzdGF0ZSB3ZSBuZWVkICovCisJLyogTWFrZSBzdXJlIGVhY2ggQ1BVIGhhcyBhdCBsZWFzdCBtYWRlIGl0IHRvIHRoZSBzdGF0ZSB3ZSBuZWVkLgorCSAqCisJICogRklYTUU6IFRoZXJlIGlzIGEgKHNsaW0pIGNoYW5jZSBvZiBhIHByb2JsZW0gaWYgbm90IGFsbCBvZiB0aGUgQ1BVcworCSAqIGFyZSBjb3JyZWN0bHkgb25saW5lZC4gIElmIHNvbWVob3cgd2Ugc3RhcnQgYSBDUFUgb24gYm9vdCB3aXRoIFJUQVMKKwkgKiBzdGFydC1jcHUsIGJ1dCBzb21laG93IHRoYXQgQ1BVIGRvZXNuJ3Qgd3JpdGUgY2FsbGluX2NwdV9tYXBbXSBpbgorCSAqIHRpbWUsIHRoZSBib290IENQVSB3aWxsIHRpbWVvdXQuICBJZiBpdCBkb2VzIGV2ZW50dWFsbHkgZXhlY3V0ZQorCSAqIHN0dWZmLCB0aGUgc2Vjb25kYXJ5IHdpbGwgc3RhcnQgdXAgKHBhY2FbXS5jcHVfc3RhcnQgd2FzIHdyaXR0ZW4pIGFuZAorCSAqIGdldCBpbnRvIGEgcGVjdWxpYXIgc3RhdGUuICBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMKKwkgKiBzbXBfb3BzLT50YWtlX3RpbWViYXNlKCksIHRoZSBzZWNvbmRhcnkgQ1BVIHdpbGwgcHJvYmFibHkgYmUgc3Bpbm5pbmcKKwkgKiBpbiB0aGVyZS4gIElmIG5vdCAoaS5lLiBwc2VyaWVzKSwgdGhlIHNlY29uZGFyeSB3aWxsIGNvbnRpbnVlIG9uIGFuZAorCSAqIHRyeSB0byBvbmxpbmUgaXRzZWxmL2lkbGUvZXRjLiBJZiBpdCBzdXJ2aXZlcyB0aGF0LCB3ZSBuZWVkIHRvIGZpbmQKKwkgKiB0aGVzZSBwb3NzaWJsZS1idXQtbm90LW9ubGluZS1idXQtc2hvdWxkLWJlIENQVXMgYW5kIGNoYXBlcm9uZSB0aGVtCisJICogaW50byBrZXhlY19zbXBfd2FpdCgpLgorCSAqLwogCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewogCQlpZiAoaSA9PSBteV9jcHUpCiAJCQljb250aW51ZTsKQEAgLTE4OSw5ICsyMDcsOSBAQAogCQl3aGlsZSAocGFjYVtpXS5rZXhlY19zdGF0ZSA8IHdhaXRfc3RhdGUpIHsKIAkJCWJhcnJpZXIoKTsKIAkJCWlmIChpICE9IG5vdGlmaWVkKSB7Ci0JCQkJcHJpbnRrKCAia2V4ZWM6IHdhaXRpbmcgZm9yIGNwdSAlZCAocGh5c2ljYWwiCi0JCQkJCQkiICVkKSB0byBlbnRlciAlaSBzdGF0ZVxuIiwKLQkJCQkJaSwgcGFjYVtpXS5od19jcHVfaWQsIHdhaXRfc3RhdGUpOworCQkJCXByaW50ayhLRVJOX0lORk8gImtleGVjOiB3YWl0aW5nIGZvciBjcHUgJWQgIgorCQkJCSAgICAgICAiKHBoeXNpY2FsICVkKSB0byBlbnRlciAlaSBzdGF0ZVxuIiwKKwkJCQkgICAgICAgaSwgcGFjYVtpXS5od19jcHVfaWQsIHdhaXRfc3RhdGUpOwogCQkJCW5vdGlmaWVkID0gaTsKIAkJCX0KIAkJfQpAQCAtMTk5LDkgKzIxNywzMiBAQAogCW1iKCk7CiB9CiAKKy8qCisgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSBlYWNoIHByZXNlbnQgQ1BVIGlzIG9ubGluZS4gIFRoZSBuZXh0IGtlcm5lbCB3aWxsIHNjYW4KKyAqIHRoZSBkZXZpY2UgdHJlZSBhbmQgYXNzdW1lIHByaW1hcnkgdGhyZWFkcyBhcmUgb25saW5lIGFuZCBxdWVyeSBzZWNvbmRhcnkKKyAqIHRocmVhZHMgdmlhIFJUQVMgdG8gb25saW5lIHRoZW0gaWYgcmVxdWlyZWQuICBJZiB3ZSBkb24ndCBvbmxpbmUgcHJpbWFyeQorICogdGhyZWFkcywgdGhleSB3aWxsIGJlIHN0dWNrLiAgSG93ZXZlciwgd2UgYWxzbyBvbmxpbmUgc2Vjb25kYXJ5IHRocmVhZHMgYXMgd2UKKyAqIG1heSBiZSB1c2luZyAnY2VkZSBvZmZsaW5lJy4gIEluIHRoaXMgY2FzZSBSVEFTIGRvZXNuJ3Qgc2VlIHRoZSBzZWNvbmRhcnkKKyAqIHRocmVhZHMgYXMgb2ZmbGluZSAtLSBhbmQgYWdhaW4sIHRoZXNlIENQVXMgd2lsbCBiZSBzdHVjay4KKyAqCisgKiBTbywgd2Ugb25saW5lIGFsbCBDUFVzIHRoYXQgc2hvdWxkIGJlIHJ1bm5pbmcsIGluY2x1ZGluZyBzZWNvbmRhcnkgdGhyZWFkcy4KKyAqLworc3RhdGljIHZvaWQgd2FrZV9vZmZsaW5lX2NwdXModm9pZCkKK3sKKwlpbnQgY3B1ID0gMDsKKworCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkgeworCQlpZiAoIWNwdV9vbmxpbmUoY3B1KSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAia2V4ZWM6IFdha2luZyBvZmZsaW5lIGNwdSAlZC5cbiIsCisJCQkgICAgICAgY3B1KTsKKwkJCWNwdV91cChjcHUpOworCQl9CisJfQorfQorCiBzdGF0aWMgdm9pZCBrZXhlY19wcmVwYXJlX2NwdXModm9pZCkKIHsKLQorCXdha2Vfb2ZmbGluZV9jcHVzKCk7CiAJc21wX2NhbGxfZnVuY3Rpb24oa2V4ZWNfc21wX2Rvd24sIE5VTEwsIC8qIHdhaXQgKi8wKTsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCW1iKCk7IC8qIG1ha2Ugc3VyZSBJUlFzIGFyZSBkaXNhYmxlZCBiZWZvcmUgd2Ugc2F5IHRoZXkgYXJlICovCkBAIC0yMTUsNyArMjU2LDEwIEBACiAJaWYgKHBwY19tZC5rZXhlY19jcHVfZG93bikKIAkJcHBjX21kLmtleGVjX2NwdV9kb3duKDAsIDApOwogCi0JLyogQmVmb3JlIHJlbW92aW5nIE1NVSBtYXBpbmdzIG1ha2Ugc3VyZSBhbGwgQ1BVcyBoYXZlIGVudGVyZWQgcmVhbCBtb2RlICovCisJLyoKKwkgKiBCZWZvcmUgcmVtb3ZpbmcgTU1VIG1hcHBpbmdzIG1ha2Ugc3VyZSBhbGwgQ1BVcyBoYXZlIGVudGVyZWQgcmVhbAorCSAqIG1vZGU6CisJICovCiAJa2V4ZWNfcHJlcGFyZV9jcHVzX3dhaXQoS0VYRUNfU1RBVEVfUkVBTF9NT0RFKTsKIAogCXB1dF9jcHUoKTsKQEAgLTI1Nyw2ICszMDEsMTIgQEAKIHN0YXRpYyB1bmlvbiB0aHJlYWRfdW5pb24ga2V4ZWNfc3RhY2sgX19pbml0X3Rhc2tfZGF0YSA9CiAJeyB9OwogCisvKgorICogRm9yIHNpbWlsYXIgcmVhc29ucyB0byB0aGUgc3RhY2sgYWJvdmUsIHRoZSBrZXhlY2luZyBDUFUgbmVlZHMgdG8gYmUgb24gYQorICogc3RhdGljIFBBQ0E7IHdlIHN3aXRjaCB0byBrZXhlY19wYWNhLgorICovCitzdHJ1Y3QgcGFjYV9zdHJ1Y3Qga2V4ZWNfcGFjYTsKKwogLyogT3VyIGFzc2VtYmx5IGhlbHBlciwgaW4ga2V4ZWNfc3R1Yi5TICovCiBleHRlcm4gTk9SRVRfVFlQRSB2b2lkIGtleGVjX3NlcXVlbmNlKHZvaWQgKm5ld3N0YWNrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJCQl2b2lkICppbWFnZSwgdm9pZCAqY29udHJvbCwKQEAgLTI3OCwxMiArMzI4LDI4IEBACiAJaWYgKGNyYXNoaW5nX2NwdSA9PSAtMSkKIAkJa2V4ZWNfcHJlcGFyZV9jcHVzKCk7CiAKKwlwcl9kZWJ1Zygia2V4ZWM6IFN0YXJ0aW5nIHN3aXRjaG92ZXIgc2VxdWVuY2UuXG4iKTsKKwogCS8qIHN3aXRjaCB0byBhIHN0YXRpY2x5IGFsbG9jYXRlZCBzdGFjay4gIEJhc2VkIG9uIGlycSBzdGFjayBjb2RlLgogCSAqIFhYWDogdGhlIHRhc2sgc3RydWN0IHdpbGwgbGlrZWx5IGJlIGludmFsaWQgb25jZSB3ZSBkbyB0aGUgY29weSEKIAkgKi8KIAlrZXhlY19zdGFjay50aHJlYWRfaW5mby50YXNrID0gY3VycmVudF90aHJlYWRfaW5mbygpLT50YXNrOwogCWtleGVjX3N0YWNrLnRocmVhZF9pbmZvLmZsYWdzID0gMDsKIAorCS8qIFdlIG5lZWQgYSBzdGF0aWMgUEFDQSwgdG9vOyBjb3B5IHRoaXMgQ1BVJ3MgUEFDQSBvdmVyIGFuZCBzd2l0Y2ggdG8KKwkgKiBpdC4gIEFsc28gcG9pc29uIHBlcl9jcHVfb2Zmc2V0IHRvIGNhdGNoIGFueW9uZSB1c2luZyBub24tc3RhdGljCisJICogZGF0YS4KKwkgKi8KKwltZW1jcHkoJmtleGVjX3BhY2EsIGdldF9wYWNhKCksIHNpemVvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QpKTsKKwlrZXhlY19wYWNhLmRhdGFfb2Zmc2V0ID0gMHhlZGVhZGRlYWRlZWVlZWVlVUw7CisJcGFjYSA9IChzdHJ1Y3QgcGFjYV9zdHJ1Y3QgKilSRUxPQ19ISURFKCZrZXhlY19wYWNhLCAwKSAtCisJCWtleGVjX3BhY2EucGFjYV9pbmRleDsKKwlzZXR1cF9wYWNhKCZrZXhlY19wYWNhKTsKKworCS8qIFhYWDogSWYgYW55b25lIGRvZXMgJ2R5bmFtaWMgbHBwYWNhcycgdGhpcyB3aWxsIGFsc28gbmVlZCB0byBiZQorCSAqIHN3aXRjaGVkIHRvIGEgc3RhdGljIHZlcnNpb24hCisJICovCisKIAkvKiBTb21lIHRoaW5ncyBhcmUgYmVzdCBkb25lIGluIGFzc2VtYmx5LiAgRmluZGluZyBnbG9iYWxzIHdpdGgKIAkgKiBhIHRvYyBpcyBlYXNpZXIgaW4gQywgc28gcGFzcyBpbiB3aGF0IHdlIGNhbi4KIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzYy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjLlMKaW5kZXggMjJlNTA3Yy4uMmQyOTc1MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjLlMKQEAgLTEyNywyOSArMTI3LDMgQEAKIF9HTE9CQUwoX19yZXN0b3JlX2NwdV9wb3dlcjcpCiAJLyogcGxhY2UgaG9sZGVyICovCiAJYmxyCi0KLS8qCi0gKiBHZXQgYSBtaW5pbWFsIHNldCBvZiByZWdpc3RlcnMgZm9yIG91ciBjYWxsZXIncyBudGggY2FsbGVyLgotICogcjMgPSByZWdzIHBvaW50ZXIsIHI1ID0gbi4KLSAqCi0gKiBXZSBvbmx5IGdldCBSMSAoc3RhY2sgcG9pbnRlciksIE5JUCAobmV4dCBpbnN0cnVjdGlvbiBwb2ludGVyKQotICogYW5kIExSIChsaW5rIHJlZ2lzdGVyKS4gIFRoZXNlIGFyZSBhbGwgd2UgY2FuIGdldCBpbiB0aGUKLSAqIGdlbmVyYWwgY2FzZSB3aXRob3V0IGRvaW5nIGNvbXBsaWNhdGVkIHN0YWNrIHVud2luZGluZywgYnV0Ci0gKiBmb3J0dW5hdGVseSB0aGV5IGFyZSBlbm91Z2ggdG8gZG8gYSBzdGFjayBiYWNrdHJhY2UsIHdoaWNoCi0gKiBpcyBhbGwgd2UgbmVlZCB0aGVtIGZvci4KLSAqLwotX0dMT0JBTChwZXJmX2FyY2hfZmV0Y2hfY2FsbGVyX3JlZ3MpCi0JbXIJcjYscjEKLQljbXB3aQlyNSwwCi0JbWZscglyNAotCWJsZQkyZgotCW10Y3RyCXI1Ci0xOglQUENfTEwJcjYsMChyNikKLQliZG56CTFiCi0JUFBDX0xMCXI0LFBQQ19MUl9TVEtPRkYocjYpCi0yOglQUENfTEwJcjcsMChyNikKLQlQUENfTEwJcjcsUFBDX0xSX1NUS09GRihyNykKLQlQUENfU1RMCXI2LEdQUjEtU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjMpCi0JUFBDX1NUTAlyNCxfTklQLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHIzKQotCVBQQ19TVEwJcjcsX0xJTkstU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjMpCi0JYmxyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL29mX2RldmljZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9vZl9kZXZpY2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY3OGUwMi4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL29mX2RldmljZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9vZi5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Ci0KLSNpbmNsdWRlIDxhc20vZXJybm8uaD4KLSNpbmNsdWRlIDxhc20vZGNyLmg+Ci0KLXN0YXRpYyB2b2lkIG9mX2RldmljZV9tYWtlX2J1c19pZChzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYpCi17Ci0Jc3RhdGljIGF0b21pY190IGJ1c19ub19yZWdfbWFnaWM7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gZGV2LT5kZXYub2Zfbm9kZTsKLQljb25zdCB1MzIgKnJlZzsKLQl1NjQgYWRkcjsKLQlpbnQgbWFnaWM7Ci0KLQkvKgotCSAqIElmIGl0J3MgYSBEQ1IgYmFzZWQgZGV2aWNlLCB1c2UgJ2QnIGZvciBuYXRpdmUgRENScwotCSAqIGFuZCAnRCcgZm9yIE1NSU8gRENScy4KLQkgKi8KLSNpZmRlZiBDT05GSUdfUFBDX0RDUgotCXJlZyA9IG9mX2dldF9wcm9wZXJ0eShub2RlLCAiZGNyLXJlZyIsIE5VTEwpOwotCWlmIChyZWcpIHsKLSNpZmRlZiBDT05GSUdfUFBDX0RDUl9OQVRJVkUKLQkJZGV2X3NldF9uYW1lKCZkZXYtPmRldiwgImQleC4lcyIsICpyZWcsIG5vZGUtPm5hbWUpOwotI2Vsc2UgLyogQ09ORklHX1BQQ19EQ1JfTkFUSVZFICovCi0JCWFkZHIgPSBvZl90cmFuc2xhdGVfZGNyX2FkZHJlc3Mobm9kZSwgKnJlZywgTlVMTCk7Ci0JCWlmIChhZGRyICE9IE9GX0JBRF9BRERSKSB7Ci0JCQlkZXZfc2V0X25hbWUoJmRldi0+ZGV2LCAiRCVsbHguJXMiLAotCQkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhZGRyLCBub2RlLT5uYW1lKTsKLQkJCXJldHVybjsKLQkJfQotI2VuZGlmIC8qICFDT05GSUdfUFBDX0RDUl9OQVRJVkUgKi8KLQl9Ci0jZW5kaWYgLyogQ09ORklHX1BQQ19EQ1IgKi8KLQotCS8qCi0JICogRm9yIE1NSU8sIGdldCB0aGUgcGh5c2ljYWwgYWRkcmVzcwotCSAqLwotCXJlZyA9IG9mX2dldF9wcm9wZXJ0eShub2RlLCAicmVnIiwgTlVMTCk7Ci0JaWYgKHJlZykgewotCQlhZGRyID0gb2ZfdHJhbnNsYXRlX2FkZHJlc3Mobm9kZSwgcmVnKTsKLQkJaWYgKGFkZHIgIT0gT0ZfQkFEX0FERFIpIHsKLQkJCWRldl9zZXRfbmFtZSgmZGV2LT5kZXYsICIlbGx4LiVzIiwKLQkJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYWRkciwgbm9kZS0+bmFtZSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIE5vIEJ1c0lELCB1c2UgdGhlIG5vZGUgbmFtZSBhbmQgYWRkIGEgZ2xvYmFsbHkgaW5jcmVtZW50ZWQKLQkgKiBjb3VudGVyIChhbmQgcHJheS4uLikKLQkgKi8KLQltYWdpYyA9IGF0b21pY19hZGRfcmV0dXJuKDEsICZidXNfbm9fcmVnX21hZ2ljKTsKLQlkZXZfc2V0X25hbWUoJmRldi0+ZGV2LCAiJXMuJWQiLCBub2RlLT5uYW1lLCBtYWdpYyAtIDEpOwotfQotCi1zdHJ1Y3Qgb2ZfZGV2aWNlICpvZl9kZXZpY2VfYWxsb2Moc3RydWN0IGRldmljZV9ub2RlICpucCwKLQkJCQkgIGNvbnN0IGNoYXIgKmJ1c19pZCwKLQkJCQkgIHN0cnVjdCBkZXZpY2UgKnBhcmVudCkKLXsKLQlzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXY7Ci0KLQlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkZXYpCi0JCXJldHVybiBOVUxMOwotCi0JZGV2LT5kZXYub2Zfbm9kZSA9IG9mX25vZGVfZ2V0KG5wKTsKLQlkZXYtPmRldi5kbWFfbWFzayA9ICZkZXYtPmFyY2hkYXRhLmRtYV9tYXNrOwotCWRldi0+ZGV2LnBhcmVudCA9IHBhcmVudDsKLQlkZXYtPmRldi5yZWxlYXNlID0gb2ZfcmVsZWFzZV9kZXY7Ci0KLQlpZiAoYnVzX2lkKQotCQlkZXZfc2V0X25hbWUoJmRldi0+ZGV2LCAiJXMiLCBidXNfaWQpOwotCWVsc2UKLQkJb2ZfZGV2aWNlX21ha2VfYnVzX2lkKGRldik7Ci0KLQlyZXR1cm4gZGV2OwotfQotRVhQT1JUX1NZTUJPTChvZl9kZXZpY2VfYWxsb2MpOwotCi1pbnQgb2ZfZGV2aWNlX3VldmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudikKLXsKLQlzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldjsKLQljb25zdCBjaGFyICpjb21wYXQ7Ci0JaW50IHNlZW4gPSAwLCBjcGxlbiwgc2w7Ci0KLQlpZiAoIWRldikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlvZmRldiA9IHRvX29mX2RldmljZShkZXYpOwotCi0JaWYgKGFkZF91ZXZlbnRfdmFyKGVudiwgIk9GX05BTUU9JXMiLCBvZmRldi0+ZGV2Lm9mX25vZGUtPm5hbWUpKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWlmIChhZGRfdWV2ZW50X3ZhcihlbnYsICJPRl9UWVBFPSVzIiwgb2ZkZXYtPmRldi5vZl9ub2RlLT50eXBlKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLSAgICAgICAgLyogU2luY2UgdGhlIGNvbXBhdGlibGUgZmllbGQgY2FuIGNvbnRhaW4gcHJldHR5IG11Y2ggYW55dGhpbmcKLSAgICAgICAgICogaXQncyBub3QgcmVhbGx5IGxlZ2FsIHRvIHNwbGl0IGl0IG91dCB3aXRoIGNvbW1hcy4gV2Ugc3BsaXQgaXQKLSAgICAgICAgICogdXAgdXNpbmcgYSBudW1iZXIgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluc3RlYWQuICovCi0KLQljb21wYXQgPSBvZl9nZXRfcHJvcGVydHkob2ZkZXYtPmRldi5vZl9ub2RlLCAiY29tcGF0aWJsZSIsICZjcGxlbik7Ci0Jd2hpbGUgKGNvbXBhdCAmJiAqY29tcGF0ICYmIGNwbGVuID4gMCkgewotCQlpZiAoYWRkX3VldmVudF92YXIoZW52LCAiT0ZfQ09NUEFUSUJMRV8lZD0lcyIsIHNlZW4sIGNvbXBhdCkpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQlzbCA9IHN0cmxlbiAoY29tcGF0KSArIDE7Ci0JCWNvbXBhdCArPSBzbDsKLQkJY3BsZW4gLT0gc2w7Ci0JCXNlZW4rKzsKLQl9Ci0KLQlpZiAoYWRkX3VldmVudF92YXIoZW52LCAiT0ZfQ09NUEFUSUJMRV9OPSVkIiwgc2VlbikpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogbW9kYWxpYXMgaXMgdHJpY2tpZXIsIHdlIGFkZCBpdCBpbiAyIHN0ZXBzICovCi0JaWYgKGFkZF91ZXZlbnRfdmFyKGVudiwgIk1PREFMSUFTPSIpKQotCQlyZXR1cm4gLUVOT01FTTsKLQlzbCA9IG9mX2RldmljZV9nZXRfbW9kYWxpYXMob2ZkZXYsICZlbnYtPmJ1ZltlbnYtPmJ1Zmxlbi0xXSwKLQkJCQkgICAgc2l6ZW9mKGVudi0+YnVmKSAtIGVudi0+YnVmbGVuKTsKLQlpZiAoc2wgPj0gKHNpemVvZihlbnYtPmJ1ZikgLSBlbnYtPmJ1ZmxlbikpCi0JCXJldHVybiAtRU5PTUVNOwotCWVudi0+YnVmbGVuICs9IHNsOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKG9mX2RldmljZV91ZXZlbnQpOwotRVhQT1JUX1NZTUJPTChvZl9kZXZpY2VfZ2V0X21vZGFsaWFzKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvb2ZfcGxhdGZvcm0uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvb2ZfcGxhdGZvcm0uYwppbmRleCA0ODdhOTg4Li5iMmMzNjNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL29mX3BsYXRmb3JtLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9vZl9wbGF0Zm9ybS5jCkBAIC0yOCwyMDcgKzI4LDYgQEAKICNpbmNsdWRlIDxhc20vcHBjLXBjaS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAotLyoKLSAqIFRoZSBsaXN0IG9mIE9GIElEcyBiZWxvdyBpcyB1c2VkIGZvciBtYXRjaGluZyBidXMgdHlwZXMgaW4gdGhlCi0gKiBzeXN0ZW0gd2hvc2UgZGV2aWNlcyBhcmUgdG8gYmUgZXhwb3NlZCBhcyBvZl9wbGF0Zm9ybV9kZXZpY2VzLgotICoKLSAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgbGlzdCB2YWxpZCBmb3IgbW9zdCBwbGF0Zm9ybXMuIFRoaXMgZmlsZSBwcm92aWRlcwotICogZnVuY3Rpb25zIHdobyBjYW4gdGFrZSBhbiBleHBsaWNpdCBsaXN0IGlmIG5lY2Vzc2FyeSB0aG91Z2gKLSAqCi0gKiBUaGUgc2VhcmNoIGlzIGFsd2F5cyBwZXJmb3JtZWQgcmVjdXJzaXZlbHkgbG9va2luZyBmb3IgY2hpbGRyZW4gb2YKLSAqIHRoZSBwcm92aWRlZCBkZXZpY2Vfbm9kZSBhbmQgcmVjdXJzaXZlbHkgaWYgc3VjaCBhIGNoaWxkcmVuIG1hdGNoZXMKLSAqIGEgYnVzIHR5cGUgaW4gdGhlIGxpc3QKLSAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9kZWZhdWx0X2J1c19pZHNbXSA9IHsKLQl7IC50eXBlID0gInNvYyIsIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJzb2MiLCB9LAotCXsgLnR5cGUgPSAic3BpZGVyIiwgfSwKLQl7IC50eXBlID0gImF4b24iLCB9LAotCXsgLnR5cGUgPSAicGxiNSIsIH0sCi0JeyAudHlwZSA9ICJwbGI0IiwgfSwKLQl7IC50eXBlID0gIm9wYiIsIH0sCi0JeyAudHlwZSA9ICJlYmMiLCB9LAotCXt9LAotfTsKLQotc3RydWN0IGJ1c190eXBlIG9mX3BsYXRmb3JtX2J1c190eXBlID0gewotICAgICAgIC51ZXZlbnQJPSBvZl9kZXZpY2VfdWV2ZW50LAotfTsKLUVYUE9SVF9TWU1CT0wob2ZfcGxhdGZvcm1fYnVzX3R5cGUpOwotCi1zdGF0aWMgaW50IF9faW5pdCBvZl9idXNfZHJpdmVyX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gb2ZfYnVzX3R5cGVfaW5pdCgmb2ZfcGxhdGZvcm1fYnVzX3R5cGUsICJvZl9wbGF0Zm9ybSIpOwotfQotCi1wb3N0Y29yZV9pbml0Y2FsbChvZl9idXNfZHJpdmVyX2luaXQpOwotCi1zdHJ1Y3Qgb2ZfZGV2aWNlKiBvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCQkJCSAgICBjb25zdCBjaGFyICpidXNfaWQsCi0JCQkJCSAgICBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpCi17Ci0Jc3RydWN0IG9mX2RldmljZSAqZGV2OwotCi0JZGV2ID0gb2ZfZGV2aWNlX2FsbG9jKG5wLCBidXNfaWQsIHBhcmVudCk7Ci0JaWYgKCFkZXYpCi0JCXJldHVybiBOVUxMOwotCi0JZGV2LT5hcmNoZGF0YS5kbWFfbWFzayA9IDB4ZmZmZmZmZmZVTDsKLQlkZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLQlkZXYtPmRldi5idXMgPSAmb2ZfcGxhdGZvcm1fYnVzX3R5cGU7Ci0KLQkvKiBXZSBkbyBub3QgZmlsbCB0aGUgRE1BIG9wcyBmb3IgcGxhdGZvcm0gZGV2aWNlcyBieSBkZWZhdWx0LgotCSAqIFRoaXMgaXMgY3VycmVudGx5IHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgcGxhdGZvcm0gY29kZQotCSAqIHRvIGRvIHN1Y2gsIHBvc3NpYmx5IHVzaW5nIGEgZGV2aWNlIG5vdGlmaWVyCi0JICovCi0KLQlpZiAob2ZfZGV2aWNlX3JlZ2lzdGVyKGRldikgIT0gMCkgewotCQlvZl9kZXZpY2VfZnJlZShkZXYpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gZGV2OwotfQotRVhQT1JUX1NZTUJPTChvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKTsKLQotCi0KLS8qKgotICogb2ZfcGxhdGZvcm1fYnVzX2NyZWF0ZSAtIENyZWF0ZSBhbiBPRiBkZXZpY2UgZm9yIGEgYnVzIG5vZGUgYW5kIGFsbCBpdHMKLSAqIGNoaWxkcmVuLiBPcHRpb25hbGx5IHJlY3Vyc2l2ZWx5IGluc3RhbmNpYXRlIG1hdGNoaW5nIGJ1c3Nlcy4KLSAqIEBidXM6IGRldmljZSBub2RlIG9mIHRoZSBidXMgdG8gaW5zdGFuY2lhdGUKLSAqIEBtYXRjaGVzOiBtYXRjaCB0YWJsZSwgTlVMTCB0byB1c2UgdGhlIGRlZmF1bHQsIE9GX05PX0RFRVBfUFJPQkUgdG8KLSAqIGRpc2FsbG93IHJlY3Vyc2l2ZSBjcmVhdGlvbiBvZiBjaGlsZCBidXNzZXMKLSAqLwotc3RhdGljIGludCBvZl9wbGF0Zm9ybV9idXNfY3JlYXRlKGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqYnVzLAotCQkJCSAgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2hlcywKLQkJCQkgIHN0cnVjdCBkZXZpY2UgKnBhcmVudCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkOwotCXN0cnVjdCBvZl9kZXZpY2UgKmRldjsKLQlpbnQgcmMgPSAwOwotCi0JZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShidXMsIGNoaWxkKSB7Ci0JCXByX2RlYnVnKCIgICBjcmVhdGUgY2hpbGQ6ICVzXG4iLCBjaGlsZC0+ZnVsbF9uYW1lKTsKLQkJZGV2ID0gb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShjaGlsZCwgTlVMTCwgcGFyZW50KTsKLQkJaWYgKGRldiA9PSBOVUxMKQotCQkJcmMgPSAtRU5PTUVNOwotCQllbHNlIGlmICghb2ZfbWF0Y2hfbm9kZShtYXRjaGVzLCBjaGlsZCkpCi0JCQljb250aW51ZTsKLQkJaWYgKHJjID09IDApIHsKLQkJCXByX2RlYnVnKCIgICBhbmQgc3ViIGJ1c3Nlc1xuIik7Ci0JCQlyYyA9IG9mX3BsYXRmb3JtX2J1c19jcmVhdGUoY2hpbGQsIG1hdGNoZXMsICZkZXYtPmRldik7Ci0JCX0gaWYgKHJjKSB7Ci0JCQlvZl9ub2RlX3B1dChjaGlsZCk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogb2ZfcGxhdGZvcm1fYnVzX3Byb2JlIC0gUHJvYmUgdGhlIGRldmljZS10cmVlIGZvciBwbGF0Zm9ybSBidXNzZXMKLSAqIEByb290OiBwYXJlbnQgb2YgdGhlIGZpcnN0IGxldmVsIHRvIHByb2JlIG9yIE5VTEwgZm9yIHRoZSByb290IG9mIHRoZSB0cmVlCi0gKiBAbWF0Y2hlczogbWF0Y2ggdGFibGUsIE5VTEwgdG8gdXNlIHRoZSBkZWZhdWx0Ci0gKiBAcGFyZW50OiBwYXJlbnQgdG8gaG9vayBkZXZpY2VzIGZyb20sIE5VTEwgZm9yIHRvcGxldmVsCi0gKgotICogTm90ZSB0aGF0IGNoaWxkcmVuIG9mIHRoZSBwcm92aWRlZCByb290IGFyZSBub3QgaW5zdGFuY2lhdGVkIGFzIGRldmljZXMKLSAqIHVubGVzcyB0aGUgc3BlY2lmaWVkIHJvb3QgaXRzZWxmIG1hdGNoZXMgdGhlIGJ1cyBsaXN0IGFuZCBpcyBub3QgTlVMTC4KLSAqLwotCi1pbnQgb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdCwKLQkJCSAgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2hlcywKLQkJCSAgc3RydWN0IGRldmljZSAqcGFyZW50KQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7Ci0Jc3RydWN0IG9mX2RldmljZSAqZGV2OwotCWludCByYyA9IDA7Ci0KLQlpZiAobWF0Y2hlcyA9PSBOVUxMKQotCQltYXRjaGVzID0gb2ZfZGVmYXVsdF9idXNfaWRzOwotCWlmIChtYXRjaGVzID09IE9GX05PX0RFRVBfUFJPQkUpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChyb290ID09IE5VTEwpCi0JCXJvb3QgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiLyIpOwotCWVsc2UKLQkJb2Zfbm9kZV9nZXQocm9vdCk7Ci0KLQlwcl9kZWJ1Zygib2ZfcGxhdGZvcm1fYnVzX3Byb2JlKClcbiIpOwotCXByX2RlYnVnKCIgc3RhcnRpbmcgYXQ6ICVzXG4iLCByb290LT5mdWxsX25hbWUpOwotCi0JLyogRG8gYSBzZWxmIGNoZWNrIG9mIGJ1cyB0eXBlLCBpZiB0aGVyZSdzIGEgbWF0Y2gsIGNyZWF0ZQotCSAqIGNoaWxkcmVuCi0JICovCi0JaWYgKG9mX21hdGNoX25vZGUobWF0Y2hlcywgcm9vdCkpIHsKLQkJcHJfZGVidWcoIiByb290IG1hdGNoLCBjcmVhdGUgYWxsIHN1YiBkZXZpY2VzXG4iKTsKLQkJZGV2ID0gb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShyb290LCBOVUxMLCBwYXJlbnQpOwotCQlpZiAoZGV2ID09IE5VTEwpIHsKLQkJCXJjID0gLUVOT01FTTsKLQkJCWdvdG8gYmFpbDsKLQkJfQotCQlwcl9kZWJ1ZygiIGNyZWF0ZSBhbGwgc3ViIGJ1c3Nlc1xuIik7Ci0JCXJjID0gb2ZfcGxhdGZvcm1fYnVzX2NyZWF0ZShyb290LCBtYXRjaGVzLCAmZGV2LT5kZXYpOwotCQlnb3RvIGJhaWw7Ci0JfQotCWZvcl9lYWNoX2NoaWxkX29mX25vZGUocm9vdCwgY2hpbGQpIHsKLQkJaWYgKCFvZl9tYXRjaF9ub2RlKG1hdGNoZXMsIGNoaWxkKSkKLQkJCWNvbnRpbnVlOwotCi0JCXByX2RlYnVnKCIgIG1hdGNoOiAlc1xuIiwgY2hpbGQtPmZ1bGxfbmFtZSk7Ci0JCWRldiA9IG9mX3BsYXRmb3JtX2RldmljZV9jcmVhdGUoY2hpbGQsIE5VTEwsIHBhcmVudCk7Ci0JCWlmIChkZXYgPT0gTlVMTCkKLQkJCXJjID0gLUVOT01FTTsKLQkJZWxzZQotCQkJcmMgPSBvZl9wbGF0Zm9ybV9idXNfY3JlYXRlKGNoaWxkLCBtYXRjaGVzLCAmZGV2LT5kZXYpOwotCQlpZiAocmMpIHsKLQkJCW9mX25vZGVfcHV0KGNoaWxkKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotIGJhaWw6Ci0Jb2Zfbm9kZV9wdXQocm9vdCk7Ci0JcmV0dXJuIHJjOwotfQotRVhQT1JUX1NZTUJPTChvZl9wbGF0Zm9ybV9idXNfcHJvYmUpOwotCi1zdGF0aWMgaW50IG9mX2Rldl9ub2RlX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlyZXR1cm4gdG9fb2ZfZGV2aWNlKGRldiktPmRldi5vZl9ub2RlID09IGRhdGE7Ci19Ci0KLXN0cnVjdCBvZl9kZXZpY2UgKm9mX2ZpbmRfZGV2aWNlX2J5X25vZGUoc3RydWN0IGRldmljZV9ub2RlICpucCkKLXsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0KLQlkZXYgPSBidXNfZmluZF9kZXZpY2UoJm9mX3BsYXRmb3JtX2J1c190eXBlLAotCQkJICAgICAgTlVMTCwgbnAsIG9mX2Rldl9ub2RlX21hdGNoKTsKLQlpZiAoZGV2KQotCQlyZXR1cm4gdG9fb2ZfZGV2aWNlKGRldik7Ci0JcmV0dXJuIE5VTEw7Ci19Ci1FWFBPUlRfU1lNQk9MKG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUpOwotCi1zdGF0aWMgaW50IG9mX2Rldl9waGFuZGxlX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlwaGFuZGxlICpwaCA9IGRhdGE7Ci0JcmV0dXJuIHRvX29mX2RldmljZShkZXYpLT5kZXYub2Zfbm9kZS0+cGhhbmRsZSA9PSAqcGg7Ci19Ci0KLXN0cnVjdCBvZl9kZXZpY2UgKm9mX2ZpbmRfZGV2aWNlX2J5X3BoYW5kbGUocGhhbmRsZSBwaCkKLXsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0KLQlkZXYgPSBidXNfZmluZF9kZXZpY2UoJm9mX3BsYXRmb3JtX2J1c190eXBlLAotCQkJICAgICAgTlVMTCwgJnBoLCBvZl9kZXZfcGhhbmRsZV9tYXRjaCk7Ci0JaWYgKGRldikKLQkJcmV0dXJuIHRvX29mX2RldmljZShkZXYpOwotCXJldHVybiBOVUxMOwotfQotRVhQT1JUX1NZTUJPTChvZl9maW5kX2RldmljZV9ieV9waGFuZGxlKTsKLQotCiAjaWZkZWYgQ09ORklHX1BQQ19PRl9QTEFURk9STV9QQ0kKIAogLyogVGhlIHByb2Jpbmcgb2YgUENJIGNvbnRyb2xsZXJzIGZyb20gb2ZfcGxhdGZvcm0gaXMgY3VycmVudGx5CkBAIC0yMzcsNyArMzYsNyBAQAogICogbGFja2luZyBzb21lIGJpdHMgbmVlZGVkIGhlcmUuCiAgKi8KIAotc3RhdGljIGludCBfX2RldmluaXQgb2ZfcGNpX3BoYl9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYsCitzdGF0aWMgaW50IF9fZGV2aW5pdCBvZl9wY2lfcGhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKIAlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnBoYjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGFjYS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wYWNhLmMKaW5kZXggZjg4YWNmMC4uZDBhMjZmMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wYWNhLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wYWNhLmMKQEAgLTksNyArOSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1iLmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9scHBhY2EuaD4KQEAgLTEwNSw2ICsxMDUsMTYgQEAKICNlbmRpZiAvKiBDT05GSUdfUFBDX1NURF9NTVVfNjQgKi8KIH0KIAorLyogUHV0IHRoZSBwYWNhIHBvaW50ZXIgaW50byByMTMgYW5kIFNQUkdfUEFDQSAqLwordm9pZCBzZXR1cF9wYWNhKHN0cnVjdCBwYWNhX3N0cnVjdCAqbmV3X3BhY2EpCit7CisJbG9jYWxfcGFjYSA9IG5ld19wYWNhOworCW10c3ByKFNQUk5fU1BSR19QQUNBLCBsb2NhbF9wYWNhKTsKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQorCW10c3ByKFNQUk5fU1BSR19UTEJfRVhGUkFNRSwgbG9jYWxfcGFjYS0+ZXh0bGIpOworI2VuZGlmCit9CisKIHN0YXRpYyBpbnQgX19pbml0ZGF0YSBwYWNhX3NpemU7CiAKIHZvaWQgX19pbml0IGFsbG9jYXRlX3BhY2FzKHZvaWQpCkBAIC0xMTcsNyArMTI3LDcgQEAKIAkgKiB0aGUgZmlyc3Qgc2VnbWVudC4gT24gaVNlcmllcyB0aGV5IG11c3QgYmUgd2l0aGluIHRoZSBhcmVhIG1hcHBlZAogCSAqIGJ5IHRoZSBIViwgd2hpY2ggaXMgSHZQYWdlc1RvTWFwICogSFZQQUdFU0laRSBieXRlcy4KIAkgKi8KLQlsaW1pdCA9IG1pbigweDEwMDAwMDAwVUxMLCBsbWIucm1vX3NpemUpOworCWxpbWl0ID0gbWluKDB4MTAwMDAwMDBVTEwsIG1lbWJsb2NrLnJtb19zaXplKTsKIAlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSkKIAkJbGltaXQgPSBtaW4obGltaXQsIEh2UGFnZXNUb01hcCAqIEhWUEFHRVNJWkUpOwogCkBAIC0xMjgsNyArMTM4LDcgQEAKIAogCXBhY2Ffc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZW9mKHN0cnVjdCBwYWNhX3N0cnVjdCkgKiBucl9jcHVzKTsKIAotCXBhY2EgPSBfX3ZhKGxtYl9hbGxvY19iYXNlKHBhY2Ffc2l6ZSwgUEFHRV9TSVpFLCBsaW1pdCkpOworCXBhY2EgPSBfX3ZhKG1lbWJsb2NrX2FsbG9jX2Jhc2UocGFjYV9zaXplLCBQQUdFX1NJWkUsIGxpbWl0KSk7CiAJbWVtc2V0KHBhY2EsIDAsIHBhY2Ffc2l6ZSk7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiQWxsb2NhdGVkICV1IGJ5dGVzIGZvciAlZCBwYWNhcyBhdCAlcFxuIiwKQEAgLTE0OCw3ICsxNTgsNyBAQAogCWlmIChuZXdfc2l6ZSA+PSBwYWNhX3NpemUpCiAJCXJldHVybjsKIAotCWxtYl9mcmVlKF9fcGEocGFjYSkgKyBuZXdfc2l6ZSwgcGFjYV9zaXplIC0gbmV3X3NpemUpOworCW1lbWJsb2NrX2ZyZWUoX19wYShwYWNhKSArIG5ld19zaXplLCBwYWNhX3NpemUgLSBuZXdfc2l6ZSk7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiRnJlZWQgJXUgYnl0ZXMgZm9yIHVudXNlZCBwYWNhc1xuIiwKIAkJcGFjYV9zaXplIC0gbmV3X3NpemUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYwppbmRleCA1YjM4ZjZhLi45MDIxYzRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IDQzYjgzYzMuLmQzMDFhMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC00MTAsMTUgKzQxMCwxNSBAQAogCSAqIFRoZXJlZm9yZSB3ZSB0cmVhdCB0aGVtIGxpa2UgTk1Jcy4KIAkgKi8KIAlkbyB7Ci0JCXByZXYgPSBhdG9taWM2NF9yZWFkKCZldmVudC0+aHcucHJldl9jb3VudCk7CisJCXByZXYgPSBsb2NhbDY0X3JlYWQoJmV2ZW50LT5ody5wcmV2X2NvdW50KTsKIAkJYmFycmllcigpOwogCQl2YWwgPSByZWFkX3BtYyhldmVudC0+aHcuaWR4KTsKLQl9IHdoaWxlIChhdG9taWM2NF9jbXB4Y2hnKCZldmVudC0+aHcucHJldl9jb3VudCwgcHJldiwgdmFsKSAhPSBwcmV2KTsKKwl9IHdoaWxlIChsb2NhbDY0X2NtcHhjaGcoJmV2ZW50LT5ody5wcmV2X2NvdW50LCBwcmV2LCB2YWwpICE9IHByZXYpOwogCiAJLyogVGhlIGNvdW50ZXJzIGFyZSBvbmx5IDMyIGJpdHMgd2lkZSAqLwogCWRlbHRhID0gKHZhbCAtIHByZXYpICYgMHhmZmZmZmZmZnVsOwotCWF0b21pYzY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7Ci0JYXRvbWljNjRfc3ViKGRlbHRhLCAmZXZlbnQtPmh3LnBlcmlvZF9sZWZ0KTsKKwlsb2NhbDY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7CisJbG9jYWw2NF9zdWIoZGVsdGEsICZldmVudC0+aHcucGVyaW9kX2xlZnQpOwogfQogCiAvKgpAQCAtNDQ0LDEwICs0NDQsMTAgQEAKIAkJaWYgKCFldmVudC0+aHcuaWR4KQogCQkJY29udGludWU7CiAJCXZhbCA9IChldmVudC0+aHcuaWR4ID09IDUpID8gcG1jNSA6IHBtYzY7Ci0JCXByZXYgPSBhdG9taWM2NF9yZWFkKCZldmVudC0+aHcucHJldl9jb3VudCk7CisJCXByZXYgPSBsb2NhbDY0X3JlYWQoJmV2ZW50LT5ody5wcmV2X2NvdW50KTsKIAkJZXZlbnQtPmh3LmlkeCA9IDA7CiAJCWRlbHRhID0gKHZhbCAtIHByZXYpICYgMHhmZmZmZmZmZnVsOwotCQlhdG9taWM2NF9hZGQoZGVsdGEsICZldmVudC0+Y291bnQpOworCQlsb2NhbDY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7CiAJfQogfQogCkBAIC00NjIsNyArNDYyLDcgQEAKIAkJZXZlbnQgPSBjcHVody0+bGltaXRlZF9jb3VudGVyW2ldOwogCQlldmVudC0+aHcuaWR4ID0gY3B1aHctPmxpbWl0ZWRfaHdpZHhbaV07CiAJCXZhbCA9IChldmVudC0+aHcuaWR4ID09IDUpID8gcG1jNSA6IHBtYzY7Ci0JCWF0b21pYzY0X3NldCgmZXZlbnQtPmh3LnByZXZfY291bnQsIHZhbCk7CisJCWxvY2FsNjRfc2V0KCZldmVudC0+aHcucHJldl9jb3VudCwgdmFsKTsKIAkJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOwogCX0KIH0KQEAgLTY2NiwxMSArNjY2LDExIEBACiAJCX0KIAkJdmFsID0gMDsKIAkJaWYgKGV2ZW50LT5ody5zYW1wbGVfcGVyaW9kKSB7Ci0JCQlsZWZ0ID0gYXRvbWljNjRfcmVhZCgmZXZlbnQtPmh3LnBlcmlvZF9sZWZ0KTsKKwkJCWxlZnQgPSBsb2NhbDY0X3JlYWQoJmV2ZW50LT5ody5wZXJpb2RfbGVmdCk7CiAJCQlpZiAobGVmdCA8IDB4ODAwMDAwMDBMKQogCQkJCXZhbCA9IDB4ODAwMDAwMDBMIC0gbGVmdDsKIAkJfQotCQlhdG9taWM2NF9zZXQoJmV2ZW50LT5ody5wcmV2X2NvdW50LCB2YWwpOworCQlsb2NhbDY0X3NldCgmZXZlbnQtPmh3LnByZXZfY291bnQsIHZhbCk7CiAJCWV2ZW50LT5ody5pZHggPSBpZHg7CiAJCXdyaXRlX3BtYyhpZHgsIHZhbCk7CiAJCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKQEAgLTc1NCw3ICs3NTQsNyBAQAogCSAqIHNraXAgdGhlIHNjaGVkdWxhYmlsaXR5IHRlc3QgaGVyZSwgaXQgd2lsbCBiZSBwZWZvcm1lZAogCSAqIGF0IGNvbW1pdCB0aW1lKC0+Y29tbWl0X3R4bikgYXMgYSB3aG9sZQogCSAqLwotCWlmIChjcHVody0+Z3JvdXBfZmxhZyAmIFBFUkZfRVZFTlRfVFhOX1NUQVJURUQpCisJaWYgKGNwdWh3LT5ncm91cF9mbGFnICYgUEVSRl9FVkVOVF9UWE4pCiAJCWdvdG8gbm9jaGVjazsKIAogCWlmIChjaGVja19leGNsdWRlcyhjcHVody0+ZXZlbnQsIGNwdWh3LT5mbGFncywgbjAsIDEpKQpAQCAtNzkxLDggKzc5MSwxMSBAQAogCWNwdWh3ID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CiAJZm9yIChpID0gMDsgaSA8IGNwdWh3LT5uX2V2ZW50czsgKytpKSB7CiAJCWlmIChldmVudCA9PSBjcHVody0+ZXZlbnRbaV0pIHsKLQkJCXdoaWxlICgrK2kgPCBjcHVody0+bl9ldmVudHMpCisJCQl3aGlsZSAoKytpIDwgY3B1aHctPm5fZXZlbnRzKSB7CiAJCQkJY3B1aHctPmV2ZW50W2ktMV0gPSBjcHVody0+ZXZlbnRbaV07CisJCQkJY3B1aHctPmV2ZW50c1tpLTFdID0gY3B1aHctPmV2ZW50c1tpXTsKKwkJCQljcHVody0+ZmxhZ3NbaS0xXSA9IGNwdWh3LT5mbGFnc1tpXTsKKwkJCX0KIAkJCS0tY3B1aHctPm5fZXZlbnRzOwogCQkJcHBtdS0+ZGlzYWJsZV9wbWMoZXZlbnQtPmh3LmlkeCAtIDEsIGNwdWh3LT5tbWNyKTsKIAkJCWlmIChldmVudC0+aHcuaWR4KSB7CkBAIC04NDIsOCArODQ1LDggQEAKIAlpZiAobGVmdCA8IDB4ODAwMDAwMDBMKQogCQl2YWwgPSAweDgwMDAwMDAwTCAtIGxlZnQ7CiAJd3JpdGVfcG1jKGV2ZW50LT5ody5pZHgsIHZhbCk7Ci0JYXRvbWljNjRfc2V0KCZldmVudC0+aHcucHJldl9jb3VudCwgdmFsKTsKLQlhdG9taWM2NF9zZXQoJmV2ZW50LT5ody5wZXJpb2RfbGVmdCwgbGVmdCk7CisJbG9jYWw2NF9zZXQoJmV2ZW50LT5ody5wcmV2X2NvdW50LCB2YWwpOworCWxvY2FsNjRfc2V0KCZldmVudC0+aHcucGVyaW9kX2xlZnQsIGxlZnQpOwogCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKIAlwZXJmX2VuYWJsZSgpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTg1OCw3ICs4NjEsNyBAQAogewogCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVodyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCi0JY3B1aHctPmdyb3VwX2ZsYWcgfD0gUEVSRl9FVkVOVF9UWE5fU1RBUlRFRDsKKwljcHVody0+Z3JvdXBfZmxhZyB8PSBQRVJGX0VWRU5UX1RYTjsKIAljcHVody0+bl90eG5fc3RhcnQgPSBjcHVody0+bl9ldmVudHM7CiB9CiAKQEAgLTg3MSw3ICs4NzQsNyBAQAogewogCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVodyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCi0JY3B1aHctPmdyb3VwX2ZsYWcgJj0gflBFUkZfRVZFTlRfVFhOX1NUQVJURUQ7CisJY3B1aHctPmdyb3VwX2ZsYWcgJj0gflBFUkZfRVZFTlRfVFhOOwogfQogCiAvKgpAQCAtODk3LDYgKzkwMCw3IEBACiAJZm9yIChpID0gY3B1aHctPm5fdHhuX3N0YXJ0OyBpIDwgbjsgKytpKQogCQljcHVody0+ZXZlbnRbaV0tPmh3LmNvbmZpZyA9IGNwdWh3LT5ldmVudHNbaV07CiAKKwljcHVody0+Z3JvdXBfZmxhZyAmPSB+UEVSRl9FVkVOVF9UWE47CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMDgsNyArMTExMiw3IEBACiAJZXZlbnQtPmh3LmNvbmZpZyA9IGV2ZW50c1tuXTsKIAlldmVudC0+aHcuZXZlbnRfYmFzZSA9IGNmbGFnc1tuXTsKIAlldmVudC0+aHcubGFzdF9wZXJpb2QgPSBldmVudC0+aHcuc2FtcGxlX3BlcmlvZDsKLQlhdG9taWM2NF9zZXQoJmV2ZW50LT5ody5wZXJpb2RfbGVmdCwgZXZlbnQtPmh3Lmxhc3RfcGVyaW9kKTsKKwlsb2NhbDY0X3NldCgmZXZlbnQtPmh3LnBlcmlvZF9sZWZ0LCBldmVudC0+aHcubGFzdF9wZXJpb2QpOwogCiAJLyoKIAkgKiBTZWUgaWYgd2UgbmVlZCB0byByZXNlcnZlIHRoZSBQTVUuCkBAIC0xMTQ2LDE2ICsxMTUwLDE2IEBACiAJaW50IHJlY29yZCA9IDA7CiAKIAkvKiB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGludGVycnVwdHMgaGVyZSAqLwotCXByZXYgPSBhdG9taWM2NF9yZWFkKCZldmVudC0+aHcucHJldl9jb3VudCk7CisJcHJldiA9IGxvY2FsNjRfcmVhZCgmZXZlbnQtPmh3LnByZXZfY291bnQpOwogCWRlbHRhID0gKHZhbCAtIHByZXYpICYgMHhmZmZmZmZmZnVsOwotCWF0b21pYzY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7CisJbG9jYWw2NF9hZGQoZGVsdGEsICZldmVudC0+Y291bnQpOwogCiAJLyoKIAkgKiBTZWUgaWYgdGhlIHRvdGFsIHBlcmlvZCBmb3IgdGhpcyBldmVudCBoYXMgZXhwaXJlZCwKIAkgKiBhbmQgdXBkYXRlIGZvciB0aGUgbmV4dCBwZXJpb2QuCiAJICovCiAJdmFsID0gMDsKLQlsZWZ0ID0gYXRvbWljNjRfcmVhZCgmZXZlbnQtPmh3LnBlcmlvZF9sZWZ0KSAtIGRlbHRhOworCWxlZnQgPSBsb2NhbDY0X3JlYWQoJmV2ZW50LT5ody5wZXJpb2RfbGVmdCkgLSBkZWx0YTsKIAlpZiAocGVyaW9kKSB7CiAJCWlmIChsZWZ0IDw9IDApIHsKIAkJCWxlZnQgKz0gcGVyaW9kOwpAQCAtMTE5Myw4ICsxMTk3LDggQEAKIAl9CiAKIAl3cml0ZV9wbWMoZXZlbnQtPmh3LmlkeCwgdmFsKTsKLQlhdG9taWM2NF9zZXQoJmV2ZW50LT5ody5wcmV2X2NvdW50LCB2YWwpOwotCWF0b21pYzY0X3NldCgmZXZlbnQtPmh3LnBlcmlvZF9sZWZ0LCBsZWZ0KTsKKwlsb2NhbDY0X3NldCgmZXZlbnQtPmh3LnByZXZfY291bnQsIHZhbCk7CisJbG9jYWw2NF9zZXQoJmV2ZW50LT5ody5wZXJpb2RfbGVmdCwgbGVmdCk7CiAJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnRfZnNsX2VtYi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50X2ZzbF9lbWIuYwppbmRleCAzNjk4NzJmLi4xYmE0NTQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnRfZnNsX2VtYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudF9mc2xfZW1iLmMKQEAgLTE2MiwxNSArMTYyLDE1IEBACiAJICogVGhlcmVmb3JlIHdlIHRyZWF0IHRoZW0gbGlrZSBOTUlzLgogCSAqLwogCWRvIHsKLQkJcHJldiA9IGF0b21pYzY0X3JlYWQoJmV2ZW50LT5ody5wcmV2X2NvdW50KTsKKwkJcHJldiA9IGxvY2FsNjRfcmVhZCgmZXZlbnQtPmh3LnByZXZfY291bnQpOwogCQliYXJyaWVyKCk7CiAJCXZhbCA9IHJlYWRfcG1jKGV2ZW50LT5ody5pZHgpOwotCX0gd2hpbGUgKGF0b21pYzY0X2NtcHhjaGcoJmV2ZW50LT5ody5wcmV2X2NvdW50LCBwcmV2LCB2YWwpICE9IHByZXYpOworCX0gd2hpbGUgKGxvY2FsNjRfY21weGNoZygmZXZlbnQtPmh3LnByZXZfY291bnQsIHByZXYsIHZhbCkgIT0gcHJldik7CiAKIAkvKiBUaGUgY291bnRlcnMgYXJlIG9ubHkgMzIgYml0cyB3aWRlICovCiAJZGVsdGEgPSAodmFsIC0gcHJldikgJiAweGZmZmZmZmZmdWw7Ci0JYXRvbWljNjRfYWRkKGRlbHRhLCAmZXZlbnQtPmNvdW50KTsKLQlhdG9taWM2NF9zdWIoZGVsdGEsICZldmVudC0+aHcucGVyaW9kX2xlZnQpOworCWxvY2FsNjRfYWRkKGRlbHRhLCAmZXZlbnQtPmNvdW50KTsKKwlsb2NhbDY0X3N1YihkZWx0YSwgJmV2ZW50LT5ody5wZXJpb2RfbGVmdCk7CiB9CiAKIC8qCkBAIC0yOTYsMTEgKzI5NiwxMSBAQAogCiAJdmFsID0gMDsKIAlpZiAoZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2QpIHsKLQkJczY0IGxlZnQgPSBhdG9taWM2NF9yZWFkKCZldmVudC0+aHcucGVyaW9kX2xlZnQpOworCQlzNjQgbGVmdCA9IGxvY2FsNjRfcmVhZCgmZXZlbnQtPmh3LnBlcmlvZF9sZWZ0KTsKIAkJaWYgKGxlZnQgPCAweDgwMDAwMDAwTCkKIAkJCXZhbCA9IDB4ODAwMDAwMDBMIC0gbGVmdDsKIAl9Ci0JYXRvbWljNjRfc2V0KCZldmVudC0+aHcucHJldl9jb3VudCwgdmFsKTsKKwlsb2NhbDY0X3NldCgmZXZlbnQtPmh3LnByZXZfY291bnQsIHZhbCk7CiAJd3JpdGVfcG1jKGksIHZhbCk7CiAJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOwogCkBAIC0zNzEsOCArMzcxLDggQEAKIAlpZiAobGVmdCA8IDB4ODAwMDAwMDBMKQogCQl2YWwgPSAweDgwMDAwMDAwTCAtIGxlZnQ7CiAJd3JpdGVfcG1jKGV2ZW50LT5ody5pZHgsIHZhbCk7Ci0JYXRvbWljNjRfc2V0KCZldmVudC0+aHcucHJldl9jb3VudCwgdmFsKTsKLQlhdG9taWM2NF9zZXQoJmV2ZW50LT5ody5wZXJpb2RfbGVmdCwgbGVmdCk7CisJbG9jYWw2NF9zZXQoJmV2ZW50LT5ody5wcmV2X2NvdW50LCB2YWwpOworCWxvY2FsNjRfc2V0KCZldmVudC0+aHcucGVyaW9kX2xlZnQsIGxlZnQpOwogCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKIAlwZXJmX2VuYWJsZSgpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTUwMCw3ICs1MDAsNyBAQAogCQlyZXR1cm4gRVJSX1BUUigtRU5PVFNVUFApOwogCiAJZXZlbnQtPmh3Lmxhc3RfcGVyaW9kID0gZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2Q7Ci0JYXRvbWljNjRfc2V0KCZldmVudC0+aHcucGVyaW9kX2xlZnQsIGV2ZW50LT5ody5sYXN0X3BlcmlvZCk7CisJbG9jYWw2NF9zZXQoJmV2ZW50LT5ody5wZXJpb2RfbGVmdCwgZXZlbnQtPmh3Lmxhc3RfcGVyaW9kKTsKIAogCS8qCiAJICogU2VlIGlmIHdlIG5lZWQgdG8gcmVzZXJ2ZSB0aGUgUE1VLgpAQCAtNTQxLDE2ICs1NDEsMTYgQEAKIAlpbnQgcmVjb3JkID0gMDsKIAogCS8qIHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgaW50ZXJydXB0cyBoZXJlICovCi0JcHJldiA9IGF0b21pYzY0X3JlYWQoJmV2ZW50LT5ody5wcmV2X2NvdW50KTsKKwlwcmV2ID0gbG9jYWw2NF9yZWFkKCZldmVudC0+aHcucHJldl9jb3VudCk7CiAJZGVsdGEgPSAodmFsIC0gcHJldikgJiAweGZmZmZmZmZmdWw7Ci0JYXRvbWljNjRfYWRkKGRlbHRhLCAmZXZlbnQtPmNvdW50KTsKKwlsb2NhbDY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7CiAKIAkvKgogCSAqIFNlZSBpZiB0aGUgdG90YWwgcGVyaW9kIGZvciB0aGlzIGV2ZW50IGhhcyBleHBpcmVkLAogCSAqIGFuZCB1cGRhdGUgZm9yIHRoZSBuZXh0IHBlcmlvZC4KIAkgKi8KIAl2YWwgPSAwOwotCWxlZnQgPSBhdG9taWM2NF9yZWFkKCZldmVudC0+aHcucGVyaW9kX2xlZnQpIC0gZGVsdGE7CisJbGVmdCA9IGxvY2FsNjRfcmVhZCgmZXZlbnQtPmh3LnBlcmlvZF9sZWZ0KSAtIGRlbHRhOwogCWlmIChwZXJpb2QpIHsKIAkJaWYgKGxlZnQgPD0gMCkgewogCQkJbGVmdCArPSBwZXJpb2Q7CkBAIC01NjYsOSArNTY2LDEwIEBACiAJICogRmluYWxseSByZWNvcmQgZGF0YSBpZiByZXF1ZXN0ZWQuCiAJICovCiAJaWYgKHJlY29yZCkgewotCQlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhID0gewotCQkJLnBlcmlvZAk9IGV2ZW50LT5ody5sYXN0X3BlcmlvZCwKLQkJfTsKKwkJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKKworCQlwZXJmX3NhbXBsZV9kYXRhX2luaXQoJmRhdGEsIDApOworCQlkYXRhLnBlcmlvZCA9IGV2ZW50LT5ody5sYXN0X3BlcmlvZDsKIAogCQlpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgbm1pLCAmZGF0YSwgcmVncykpIHsKIAkJCS8qCkBAIC01ODQsOCArNTg1LDggQEAKIAl9CiAKIAl3cml0ZV9wbWMoZXZlbnQtPmh3LmlkeCwgdmFsKTsKLQlhdG9taWM2NF9zZXQoJmV2ZW50LT5ody5wcmV2X2NvdW50LCB2YWwpOwotCWF0b21pYzY0X3NldCgmZXZlbnQtPmh3LnBlcmlvZF9sZWZ0LCBsZWZ0KTsKKwlsb2NhbDY0X3NldCgmZXZlbnQtPmh3LnByZXZfY291bnQsIHZhbCk7CisJbG9jYWw2NF9zZXQoJmV2ZW50LT5ody5wZXJpb2RfbGVmdCwgbGVmdCk7CiAJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfa3N5bXMuYwppbmRleCAzYjRkY2M4Li5hYjNlMzkyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMKQEAgLTEwMSwxMCArMTAxLDYgQEAKIEVYUE9SVF9TWU1CT0woc3RhcnRfdGhyZWFkKTsKIEVYUE9SVF9TWU1CT0woa2VybmVsX3RocmVhZCk7CiAKLSNpZmRlZiBDT05GSUdfUFBDX0ZQVQotRVhQT1JUX1NZTUJPTF9HUEwoY3Z0X2RmKTsKLUVYUE9SVF9TWU1CT0xfR1BMKGN2dF9mZCk7Ci0jZW5kaWYKIEVYUE9SVF9TWU1CT0woZ2l2ZXVwX2ZwdSk7CiAjaWZkZWYgQ09ORklHX0FMVElWRUMKIEVYUE9SVF9TWU1CT0woZ2l2ZXVwX2FsdGl2ZWMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwppbmRleCA3NzM0MjRkLi5lNzhhNWFkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9od19icmVha3BvaW50Lmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC00NjIsMTQgKzQ2Myw0MiBAQAogI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKIAlzd2l0Y2hfYm9va2VfZGVidWdfcmVncygmbmV3LT50aHJlYWQpOwogI2Vsc2UKKy8qCisgKiBGb3IgUFBDX0JPT0szU182NCwgd2UgdXNlIHRoZSBody1icmVha3BvaW50IGludGVyZmFjZXMgdGhhdCB3b3VsZAorICogc2NoZWR1bGUgREFCUgorICovCisjaWZuZGVmIENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQKIAlpZiAodW5saWtlbHkoX19nZXRfY3B1X3ZhcihjdXJyZW50X2RhYnIpICE9IG5ldy0+dGhyZWFkLmRhYnIpKQogCQlzZXRfZGFicihuZXctPnRocmVhZC5kYWJyKTsKKyNlbmRpZiAvKiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UICovCiAjZW5kaWYKIAogCiAJbmV3X3RocmVhZCA9ICZuZXctPnRocmVhZDsKIAlvbGRfdGhyZWFkID0gJmN1cnJlbnQtPnRocmVhZDsKIAorI2lmIGRlZmluZWQoQ09ORklHX1BQQ19CT09LM0VfNjQpCisJLyogWFhYIEN1cnJlbnQgQm9vazNFIGNvZGUgZG9lc24ndCBkZWFsIHdpdGgga2VybmVsIHNpZGUgREJDUjAsCisJICogd2UgYWx3YXlzIGhvbGQgdGhlIHVzZXIgdmFsdWVzLCBzbyB3ZSBzZXQgaXQgbm93LgorCSAqCisJICogSG93ZXZlciwgd2UgZW5zdXJlIHRoZSBrZXJuZWwgTVNSOkRFIGlzIGFwcHJvcHJpYXRlbHkgY2xlYXJlZCB0b28KKwkgKiB0byBhdm9pZCBzcHVycmlvdXMgc2luZ2xlIHN0ZXAgZXhjZXB0aW9ucyBpbiB0aGUga2VybmVsLgorCSAqCisJICogVGhpcyB3aWxsIGhhdmUgdG8gY2hhbmdlIHRvIG1lcmdlIHdpdGggdGhlIHBwYzMyIGNvZGUgYXQgc29tZSBwb2ludCwKKwkgKiBidXQgSSBkb24ndCBsaWtlIG11Y2ggd2hhdCBwcGMzMiBpcyBkb2luZyB0b2RheSBzbyB0aGVyZSdzIHNvbWUKKwkgKiB0aGlua2luZyBuZWVkZWQgdGhlcmUKKwkgKi8KKwlpZiAoKG5ld190aHJlYWQtPmRiY3IwIHwgb2xkX3RocmVhZC0+ZGJjcjApICYgREJDUjBfSURNKSB7CisJCXUzMiBkYmNyMDsKKworCQltdG1zcihtZm1zcigpICYgfk1TUl9ERSk7CisJCWlzeW5jKCk7CisJCWRiY3IwID0gbWZzcHIoU1BSTl9EQkNSMCk7CisJCWRiY3IwID0gKGRiY3IwICYgREJDUjBfRURNKSB8IG5ld190aHJlYWQtPmRiY3IwOworCQltdHNwcihTUFJOX0RCQ1IwLCBkYmNyMCk7CisJfQorI2VuZGlmIC8qIENPTkZJR19QUEM2NF9CT09LM0UgKi8KKwogI2lmZGVmIENPTkZJR19QUEM2NAogCS8qCiAJICogQ29sbGVjdCBwcm9jZXNzb3IgdXRpbGl6YXRpb24gZGF0YSBwZXIgcHJvY2VzcwpAQCAtNjQyLDcgKzY3MSwxMSBAQAogewogCWRpc2NhcmRfbGF6eV9jcHVfc3RhdGUoKTsKIAorI2lmZGVmIENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlRTCisJZmx1c2hfcHRyYWNlX2h3X2JyZWFrcG9pbnQoY3VycmVudCk7CisjZWxzZSAvKiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UUyAqLwogCXNldF9kZWJ1Z19yZWdfZGVmYXVsdHMoJmN1cnJlbnQtPnRocmVhZCk7CisjZW5kaWYgLyogQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVFMgKi8KIH0KIAogdm9pZApAQCAtNjYwLDYgKzY5Myw5IEBACiAJZmx1c2hfYWx0aXZlY190b190aHJlYWQoY3VycmVudCk7CiAJZmx1c2hfdnN4X3RvX3RocmVhZChjdXJyZW50KTsKIAlmbHVzaF9zcGVfdG9fdGhyZWFkKGN1cnJlbnQpOworI2lmZGVmIENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQKKwlmbHVzaF9wdHJhY2VfaHdfYnJlYWtwb2ludCh0c2spOworI2VuZGlmIC8qIENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQgKi8KIH0KIAogLyoKQEAgLTEyNjMsMyArMTI5OSwxNCBAQAogCiAJcmV0dXJuIHJldDsKIH0KKworI2lmZGVmIENPTkZJR19TTVAKK2ludCBhcmNoX3NkX3NpYmxpbmdfYXN5bV9wYWNraW5nKHZvaWQpCit7CisJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0FTWU1fU01UKSkgeworCQlwcmludGtfb25jZShLRVJOX0lORk8gIkVuYWJsaW5nIEFzeW1tZXRyaWMgU01UIHNjaGVkdWxpbmdcbiIpOworCQlyZXR1cm4gU0RfQVNZTV9QQUNLSU5HOworCX0KKwlyZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwppbmRleCAwNTEzMWQ2Li5mZWQ5YmY2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgorI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CiAKICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9ydGFzLmg+CkBAIC05OCw3ICs5OCw3IEBACiAKIAlpZiAoKG1lbW9yeV9saW1pdCAmJiAoc3RhcnQgKyBzaXplKSA+IG1lbW9yeV9saW1pdCkgfHwKIAkJCW92ZXJsYXBzX2NyYXNoa2VybmVsKHN0YXJ0LCBzaXplKSkgewotCQlwID0gX192YShsbWJfYWxsb2NfYmFzZShzaXplLCBQQUdFX1NJWkUsIGxtYi5ybW9fc2l6ZSkpOworCQlwID0gX192YShtZW1ibG9ja19hbGxvY19iYXNlKHNpemUsIFBBR0VfU0laRSwgbWVtYmxvY2sucm1vX3NpemUpKTsKIAkJbWVtY3B5KHAsIGluaXRpYWxfYm9vdF9wYXJhbXMsIHNpemUpOwogCQlpbml0aWFsX2Jvb3RfcGFyYW1zID0gKHN0cnVjdCBib290X3BhcmFtX2hlYWRlciAqKXA7CiAJCURCRygiTW92ZWQgZGV2aWNlIHRyZWUgdG8gMHglcFxuIiwgcCk7CkBAIC00MTEsMTMgKzQxMSwxMyBAQAogewogCV9fYmUzMiAqZG0sICpscywgKnVzbTsKIAl1bnNpZ25lZCBsb25nIGwsIG4sIGZsYWdzOwotCXU2NCBiYXNlLCBzaXplLCBsbWJfc2l6ZTsKKwl1NjQgYmFzZSwgc2l6ZSwgbWVtYmxvY2tfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgaXNfa2V4ZWNfa2R1bXAgPSAwLCBybmdzOwogCiAJbHMgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJpYm0sbG1iLXNpemUiLCAmbCk7CiAJaWYgKGxzID09IE5VTEwgfHwgbCA8IGR0X3Jvb3Rfc2l6ZV9jZWxscyAqIHNpemVvZihfX2JlMzIpKQogCQlyZXR1cm4gMDsKLQlsbWJfc2l6ZSA9IGR0X21lbV9uZXh0X2NlbGwoZHRfcm9vdF9zaXplX2NlbGxzLCAmbHMpOworCW1lbWJsb2NrX3NpemUgPSBkdF9tZW1fbmV4dF9jZWxsKGR0X3Jvb3Rfc2l6ZV9jZWxscywgJmxzKTsKIAogCWRtID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiaWJtLGR5bmFtaWMtbWVtb3J5IiwgJmwpOwogCWlmIChkbSA9PSBOVUxMIHx8IGwgPCBzaXplb2YoX19iZTMyKSkKQEAgLTQ0MiwxMSArNDQyLDExIEBACiAJCSAgIG9yIGlmIHRoZSBibG9jayBpcyBub3QgYXNzaWduZWQgdG8gdGhpcyBwYXJ0aXRpb24gKDB4OCkgKi8KIAkJaWYgKChmbGFncyAmIDB4ODApIHx8ICEoZmxhZ3MgJiAweDgpKQogCQkJY29udGludWU7Ci0JCXNpemUgPSBsbWJfc2l6ZTsKKwkJc2l6ZSA9IG1lbWJsb2NrX3NpemU7CiAJCXJuZ3MgPSAxOwogCQlpZiAoaXNfa2V4ZWNfa2R1bXApIHsKIAkJCS8qCi0JCQkgKiBGb3IgZWFjaCBsbWIgaW4gaWJtLGR5bmFtaWMtbWVtb3J5LCBhIGNvcnJlc3BvbmRpbmcKKwkJCSAqIEZvciBlYWNoIG1lbWJsb2NrIGluIGlibSxkeW5hbWljLW1lbW9yeSwgYSBjb3JyZXNwb25kaW5nCiAJCQkgKiBlbnRyeSBpbiBsaW51eCxkcmNvbmYtdXNhYmxlLW1lbW9yeSBwcm9wZXJ0eSBjb250YWlucwogCQkJICogYSBjb3VudGVyICdwJyBmb2xsb3dlZCBieSAncCcgKGJhc2UsIHNpemUpIGR1cGxlLgogCQkJICogTm93IHJlYWQgdGhlIGNvdW50ZXIgZnJvbQpAQCAtNDY5LDEwICs0NjksMTAgQEAKIAkJCQlpZiAoKGJhc2UgKyBzaXplKSA+IDB4ODAwMDAwMDB1bCkKIAkJCQkJc2l6ZSA9IDB4ODAwMDAwMDB1bCAtIGJhc2U7CiAJCQl9Ci0JCQlsbWJfYWRkKGJhc2UsIHNpemUpOworCQkJbWVtYmxvY2tfYWRkKGJhc2UsIHNpemUpOwogCQl9IHdoaWxlICgtLXJuZ3MpOwogCX0KLQlsbWJfZHVtcF9hbGwoKTsKKwltZW1ibG9ja19kdW1wX2FsbCgpOwogCXJldHVybiAwOwogfQogI2Vsc2UKQEAgLTUwMSwxNCArNTAxLDE0IEBACiAJfQogI2VuZGlmCiAKLQlsbWJfYWRkKGJhc2UsIHNpemUpOworCW1lbWJsb2NrX2FkZChiYXNlLCBzaXplKTsKIAogCW1lbXN0YXJ0X2FkZHIgPSBtaW4oKHU2NCltZW1zdGFydF9hZGRyLCBiYXNlKTsKIH0KIAogdTY0IF9faW5pdCBlYXJseV9pbml0X2R0X2FsbG9jX21lbW9yeV9hcmNoKHU2NCBzaXplLCB1NjQgYWxpZ24pCiB7Ci0JcmV0dXJuIGxtYl9hbGxvYyhzaXplLCBhbGlnbik7CisJcmV0dXJuIG1lbWJsb2NrX2FsbG9jKHNpemUsIGFsaWduKTsKIH0KIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRApAQCAtNTM0LDEyICs1MzQsMTIgQEAKIAkvKiBiZWZvcmUgd2UgZG8gYW55dGhpbmcsIGxldHMgcmVzZXJ2ZSB0aGUgZHQgYmxvYiAqLwogCXNlbGZfYmFzZSA9IF9fcGEoKHVuc2lnbmVkIGxvbmcpaW5pdGlhbF9ib290X3BhcmFtcyk7CiAJc2VsZl9zaXplID0gaW5pdGlhbF9ib290X3BhcmFtcy0+dG90YWxzaXplOwotCWxtYl9yZXNlcnZlKHNlbGZfYmFzZSwgc2VsZl9zaXplKTsKKwltZW1ibG9ja19yZXNlcnZlKHNlbGZfYmFzZSwgc2VsZl9zaXplKTsKIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogCS8qIHRoZW4gcmVzZXJ2ZSB0aGUgaW5pdHJkLCBpZiBhbnkgKi8KIAlpZiAoaW5pdHJkX3N0YXJ0ICYmIChpbml0cmRfZW5kID4gaW5pdHJkX3N0YXJ0KSkKLQkJbG1iX3Jlc2VydmUoX19wYShpbml0cmRfc3RhcnQpLCBpbml0cmRfZW5kIC0gaW5pdHJkX3N0YXJ0KTsKKwkJbWVtYmxvY2tfcmVzZXJ2ZShfX3BhKGluaXRyZF9zdGFydCksIGluaXRyZF9lbmQgLSBpbml0cmRfc3RhcnQpOwogI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lOSVRSRCAqLwogCiAjaWZkZWYgQ09ORklHX1BQQzMyCkBAIC01NjAsNyArNTYwLDcgQEAKIAkJCWlmIChiYXNlXzMyID09IHNlbGZfYmFzZSAmJiBzaXplXzMyID09IHNlbGZfc2l6ZSkKIAkJCQljb250aW51ZTsKIAkJCURCRygicmVzZXJ2aW5nOiAleCAtPiAleFxuIiwgYmFzZV8zMiwgc2l6ZV8zMik7Ci0JCQlsbWJfcmVzZXJ2ZShiYXNlXzMyLCBzaXplXzMyKTsKKwkJCW1lbWJsb2NrX3Jlc2VydmUoYmFzZV8zMiwgc2l6ZV8zMik7CiAJCX0KIAkJcmV0dXJuOwogCX0KQEAgLTU3MSw3ICs1NzEsNyBAQAogCQlpZiAoc2l6ZSA9PSAwKQogCQkJYnJlYWs7CiAJCURCRygicmVzZXJ2aW5nOiAlbGx4IC0+ICVsbHhcbiIsIGJhc2UsIHNpemUpOwotCQlsbWJfcmVzZXJ2ZShiYXNlLCBzaXplKTsKKwkJbWVtYmxvY2tfcmVzZXJ2ZShiYXNlLCBzaXplKTsKIAl9CiB9CiAKQEAgLTU5NCw3ICs1OTQsNyBAQAogCQlyZXR1cm4gcGh5cF9kdW1wX2luZm8tPnJlc2VydmVfYm9vdHZhcjsKIAogCS8qIGRpdmlkZSBieSAyMCB0byBnZXQgNSUgb2YgdmFsdWUgKi8KLQl0bXAgPSBsbWJfZW5kX29mX0RSQU0oKTsKKwl0bXAgPSBtZW1ibG9ja19lbmRfb2ZfRFJBTSgpOwogCWRvX2Rpdih0bXAsIDIwKTsKIAogCS8qIHJvdW5kIGl0IGRvd24gaW4gbXVsdGlwbGVzIG9mIDI1NiAqLwpAQCAtNjMzLDExICs2MzMsMTEgQEAKIAlpZiAocGh5cF9kdW1wX2luZm8tPnBoeXBfZHVtcF9pc19hY3RpdmUpIHsKIAkJLyogUmVzZXJ2ZSAqZXZlcnl0aGluZyogYWJvdmUgUk1SLkFyZWEgZnJlZWQgYnkgdXNlcmxhbmQgdG9vbHMqLwogCQliYXNlID0gdmFyaWFibGVfcmVzZXJ2ZV9zaXplOwotCQlzaXplID0gbG1iX2VuZF9vZl9EUkFNKCkgLSBiYXNlOworCQlzaXplID0gbWVtYmxvY2tfZW5kX29mX0RSQU0oKSAtIGJhc2U7CiAKIAkJLyogWFhYIGNyYXNoZWRfcmFtX2VuZCBpcyB3cm9uZywgc2luY2UgaXQgbWF5IGJlIGJleW9uZAogCQkgKiB0aGUgbWVtb3J5X2xpbWl0LCBpdCB3aWxsIG5lZWQgdG8gYmUgYWRqdXN0ZWQuICovCi0JCWxtYl9yZXNlcnZlKGJhc2UsIHNpemUpOworCQltZW1ibG9ja19yZXNlcnZlKGJhc2UsIHNpemUpOwogCiAJCXBoeXBfZHVtcF9pbmZvLT5pbml0X3Jlc2VydmVfc3RhcnQgPSBiYXNlOwogCQlwaHlwX2R1bXBfaW5mby0+aW5pdF9yZXNlcnZlX3NpemUgPSBzaXplOwpAQCAtNjQ1LDggKzY0NSw4IEBACiAJCXNpemUgPSBwaHlwX2R1bXBfaW5mby0+Y3B1X3N0YXRlX3NpemUgKwogCQkJcGh5cF9kdW1wX2luZm8tPmhwdGVfcmVnaW9uX3NpemUgKwogCQkJdmFyaWFibGVfcmVzZXJ2ZV9zaXplOwotCQliYXNlID0gbG1iX2VuZF9vZl9EUkFNKCkgLSBzaXplOwotCQlsbWJfcmVzZXJ2ZShiYXNlLCBzaXplKTsKKwkJYmFzZSA9IG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgLSBzaXplOworCQltZW1ibG9ja19yZXNlcnZlKGJhc2UsIHNpemUpOwogCQlwaHlwX2R1bXBfaW5mby0+aW5pdF9yZXNlcnZlX3N0YXJ0ID0gYmFzZTsKIAkJcGh5cF9kdW1wX2luZm8tPmluaXRfcmVzZXJ2ZV9zaXplID0gc2l6ZTsKIAl9CkBAIC02ODEsOCArNjgxLDggQEAKIAkgKi8KIAlvZl9zY2FuX2ZsYXRfZHQoZWFybHlfaW5pdF9kdF9zY2FuX2Nob3NlbiwgTlVMTCk7CiAKLQkvKiBTY2FuIG1lbW9yeSBub2RlcyBhbmQgcmVidWlsZCBMTUJzICovCi0JbG1iX2luaXQoKTsKKwkvKiBTY2FuIG1lbW9yeSBub2RlcyBhbmQgcmVidWlsZCBNRU1CTE9DS3MgKi8KKwltZW1ibG9ja19pbml0KCk7CiAJb2Zfc2Nhbl9mbGF0X2R0KGVhcmx5X2luaXRfZHRfc2Nhbl9yb290LCBOVUxMKTsKIAlvZl9zY2FuX2ZsYXRfZHQoZWFybHlfaW5pdF9kdF9zY2FuX21lbW9yeV9wcGMsIE5VTEwpOwogCkBAIC02OTAsMTEgKzY5MCwxMSBAQAogCXN0cmxjcHkoYm9vdF9jb21tYW5kX2xpbmUsIGNtZF9saW5lLCBDT01NQU5EX0xJTkVfU0laRSk7CiAJcGFyc2VfZWFybHlfcGFyYW0oKTsKIAotCS8qIFJlc2VydmUgTE1CIHJlZ2lvbnMgdXNlZCBieSBrZXJuZWwsIGluaXRyZCwgZHQsIGV0Yy4uLiAqLwotCWxtYl9yZXNlcnZlKFBIWVNJQ0FMX1NUQVJULCBfX3BhKGtsaW1pdCkgLSBQSFlTSUNBTF9TVEFSVCk7CisJLyogUmVzZXJ2ZSBNRU1CTE9DSyByZWdpb25zIHVzZWQgYnkga2VybmVsLCBpbml0cmQsIGR0LCBldGMuLi4gKi8KKwltZW1ibG9ja19yZXNlcnZlKFBIWVNJQ0FMX1NUQVJULCBfX3BhKGtsaW1pdCkgLSBQSFlTSUNBTF9TVEFSVCk7CiAJLyogSWYgcmVsb2NhdGFibGUsIHJlc2VydmUgZmlyc3QgMzJrIGZvciBpbnRlcnJ1cHQgdmVjdG9ycyBldGMuICovCiAJaWYgKFBIWVNJQ0FMX1NUQVJUID4gTUVNT1JZX1NUQVJUKQotCQlsbWJfcmVzZXJ2ZShNRU1PUllfU1RBUlQsIDB4ODAwMCk7CisJCW1lbWJsb2NrX3Jlc2VydmUoTUVNT1JZX1NUQVJULCAweDgwMDApOwogCXJlc2VydmVfa2R1bXBfdHJhbXBvbGluZSgpOwogCXJlc2VydmVfY3Jhc2hrZXJuZWwoKTsKIAllYXJseV9yZXNlcnZlX21lbSgpOwpAQCAtNzA2LDE3ICs3MDYsMTcgQEAKIAogCQkvKiBFbnN1cmUgdGhhdCB0b3RhbCBtZW1vcnkgc2l6ZSBpcyBwYWdlLWFsaWduZWQsIGJlY2F1c2UKIAkJICogb3RoZXJ3aXNlIG1hcmtfYm9vdG1lbSgpIGdldHMgdXBzZXQuICovCi0JCWxtYl9hbmFseXplKCk7Ci0JCW1lbXNpemUgPSBsbWJfcGh5c19tZW1fc2l6ZSgpOworCQltZW1ibG9ja19hbmFseXplKCk7CisJCW1lbXNpemUgPSBtZW1ibG9ja19waHlzX21lbV9zaXplKCk7CiAJCWlmICgobWVtc2l6ZSAmIFBBR0VfTUFTSykgIT0gbWVtc2l6ZSkKIAkJCWxpbWl0ID0gbWVtc2l6ZSAmIFBBR0VfTUFTSzsKIAl9Ci0JbG1iX2VuZm9yY2VfbWVtb3J5X2xpbWl0KGxpbWl0KTsKKwltZW1ibG9ja19lbmZvcmNlX21lbW9yeV9saW1pdChsaW1pdCk7CiAKLQlsbWJfYW5hbHl6ZSgpOwotCWxtYl9kdW1wX2FsbCgpOworCW1lbWJsb2NrX2FuYWx5emUoKTsKKwltZW1ibG9ja19kdW1wX2FsbCgpOwogCi0JREJHKCJQaHlzLiBtZW06ICVsbHhcbiIsIGxtYl9waHlzX21lbV9zaXplKCkpOworCURCRygiUGh5cy4gbWVtOiAlbGx4XG4iLCBtZW1ibG9ja19waHlzX21lbV9zaXplKCkpOwogCiAJLyogV2UgbWF5IG5lZWQgdG8gcmVsb2NhdGUgdGhlIGZsYXQgdHJlZSwgZG8gaXQgbm93LgogCSAqIEZJWE1FIC4uIGFuZCB0aGUgaW5pdHJkIHRvbz8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCmluZGV4IDk3ZDRiZDkuLjk0MWZmNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYwpAQCAtMzExLDYgKzMxMSwyNCBAQAogCWNhbGxfcHJvbSgid3JpdGUiLCAzLCAxLCBfcHJvbS0+c3Rkb3V0LCBidWYsIG5pYmJsZXMpOwogfQogCisvKiBtYXggbnVtYmVyIG9mIGRlY2ltYWwgZGlnaXRzIGluIGFuIHVuc2lnbmVkIGxvbmcgKi8KKyNkZWZpbmUgVUxfRElHSVRTIDIxCitzdGF0aWMgdm9pZCBfX2luaXQgcHJvbV9wcmludF9kZWModW5zaWduZWQgbG9uZyB2YWwpCit7CisJaW50IGksIHNpemU7CisJY2hhciBidWZbVUxfRElHSVRTKzFdOworCXN0cnVjdCBwcm9tX3QgKl9wcm9tID0gJlJFTE9DKHByb20pOworCisJZm9yIChpID0gVUxfRElHSVRTLTE7IGkgPj0gMDsgIGktLSkgeworCQlidWZbaV0gPSAodmFsICUgMTApICsgJzAnOworCQl2YWwgPSB2YWwvMTA7CisJCWlmICh2YWwgPT0gMCkKKwkJCWJyZWFrOworCX0KKwkvKiBzaGlmdCBzdHVmZiBkb3duICovCisJc2l6ZSA9IFVMX0RJR0lUUyAtIGk7CisJY2FsbF9wcm9tKCJ3cml0ZSIsIDMsIDEsIF9wcm9tLT5zdGRvdXQsIGJ1ZitpLCBzaXplKTsKK30KIAogc3RhdGljIHZvaWQgX19pbml0IHByb21fcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogewpAQCAtMzUwLDYgKzM2OCwxNCBAQAogCQkJdiA9IHZhX2FyZyhhcmdzLCB1bnNpZ25lZCBsb25nKTsKIAkJCXByb21fcHJpbnRfaGV4KHYpOwogCQkJYnJlYWs7CisJCWNhc2UgJ2wnOgorCQkJKytxOworCQkJaWYgKCpxID09ICd1JykgeyAvKiAnJWx1JyAqLworCQkJCSsrcTsKKwkJCQl2ID0gdmFfYXJnKGFyZ3MsIHVuc2lnbmVkIGxvbmcpOworCQkJCXByb21fcHJpbnRfZGVjKHYpOworCQkJfQorCQkJYnJlYWs7CiAJCX0KIAl9CiB9CkBAIC04MzUsMTEgKzg2MSwxMSBAQAogCQlpZiAocGxlbiA9PSBQUk9NX0VSUk9SKQogCQkJYnJlYWs7CiAJCXBsZW4gPj49IDI7Ci0JCXByb21fZGVidWcoIkZvdW5kIDB4JXggc210IHRocmVhZHMgcGVyIGNvcmVcbiIsICh1bnNpZ25lZCBsb25nKXBsZW4pOworCQlwcm9tX2RlYnVnKCJGb3VuZCAlbHUgc210IHRocmVhZHMgcGVyIGNvcmVcbiIsICh1bnNpZ25lZCBsb25nKXBsZW4pOwogCiAJCS8qIFNhbml0eSBjaGVjayAqLwogCQlpZiAocGxlbiA8IDEgfHwgcGxlbiA+IDY0KSB7Ci0JCQlwcm9tX3ByaW50ZigiVGhyZWFkcyBwZXIgY29yZSAweCV4IG91dCBvZiBib3VuZHMsIGFzc3VtaW5nIDFcbiIsCisJCQlwcm9tX3ByaW50ZigiVGhyZWFkcyBwZXIgY29yZSAlbHUgb3V0IG9mIGJvdW5kcywgYXNzdW1pbmcgMVxuIiwKIAkJCQkgICAgKHVuc2lnbmVkIGxvbmcpcGxlbik7CiAJCQlyZXR1cm4gMTsKIAkJfQpAQCAtODY5LDEyICs4OTUsMTIgQEAKIAkJY29yZXMgPSAodTMyICopUFRSUkVMT0MoJmlibV9hcmNoaXRlY3R1cmVfdmVjW0lCTV9BUkNIX1ZFQ19OUkNPUkVTX09GRlNFVF0pOwogCQlpZiAoKmNvcmVzICE9IE5SX0NQVVMpIHsKIAkJCXByb21fcHJpbnRmKCJXQVJOSU5HICEgIgotCQkJCSAgICAiaWJtX2FyY2hpdGVjdHVyZV92ZWMgc3RydWN0dXJlIGluY29uc2lzdGVudDogMHgleCAhXG4iLAorCQkJCSAgICAiaWJtX2FyY2hpdGVjdHVyZV92ZWMgc3RydWN0dXJlIGluY29uc2lzdGVudDogJWx1IVxuIiwKIAkJCQkgICAgKmNvcmVzKTsKIAkJfSBlbHNlIHsKLQkJCSpjb3JlcyA9IE5SX0NQVVMgLyBwcm9tX2NvdW50X3NtdF90aHJlYWRzKCk7Ci0JCQlwcm9tX3ByaW50ZigiTWF4IG51bWJlciBvZiBjb3JlcyBwYXNzZWQgdG8gZmlybXdhcmU6IDB4JXhcbiIsCi0JCQkJICAgICh1bnNpZ25lZCBsb25nKSpjb3Jlcyk7CisJCQkqY29yZXMgPSBESVZfUk9VTkRfVVAoTlJfQ1BVUywgcHJvbV9jb3VudF9zbXRfdGhyZWFkcygpKTsKKwkJCXByb21fcHJpbnRmKCJNYXggbnVtYmVyIG9mIGNvcmVzIHBhc3NlZCB0byBmaXJtd2FyZTogJWx1IChOUl9DUFVTID0gJWx1KVxuIiwKKwkJCQkgICAgKmNvcmVzLCBOUl9DUFVTKTsKIAkJfQogCiAJCS8qIHRyeSBjYWxsaW5nIHRoZSBpYm0sY2xpZW50LWFyY2hpdGVjdHVyZS1zdXBwb3J0IG1ldGhvZCAqLwpAQCAtMTQ4Miw3ICsxNTA4LDcgQEAKIAkJcmVnID0gLTE7CiAJCXByb21fZ2V0cHJvcChub2RlLCAicmVnIiwgJnJlZywgc2l6ZW9mKHJlZykpOwogCi0JCXByb21fZGVidWcoImNwdSBodyBpZHggICA9IDB4JXhcbiIsIHJlZyk7CisJCXByb21fZGVidWcoImNwdSBodyBpZHggICA9ICVsdVxuIiwgcmVnKTsKIAogCQkvKiBJbml0IHRoZSBhY2tub3dsZWRnZSB2YXIgd2hpY2ggd2lsbCBiZSByZXNldCBieQogCQkgKiB0aGUgc2Vjb25kYXJ5IGNwdSB3aGVuIGl0IGF3YWtlbnMgZnJvbSBpdHMgT0YKQEAgLTE0OTIsNyArMTUxOCw3IEBACiAKIAkJaWYgKHJlZyAhPSBfcHJvbS0+Y3B1KSB7CiAJCQkvKiBQcmltYXJ5IFRocmVhZCBvZiBub24tYm9vdCBjcHUgKi8KLQkJCXByb21fcHJpbnRmKCJzdGFydGluZyBjcHUgaHcgaWR4ICV4Li4uICIsIHJlZyk7CisJCQlwcm9tX3ByaW50Zigic3RhcnRpbmcgY3B1IGh3IGlkeCAlbHUuLi4gIiwgcmVnKTsKIAkJCWNhbGxfcHJvbSgic3RhcnQtY3B1IiwgMywgMCwgbm9kZSwKIAkJCQkgIHNlY29uZGFyeV9ob2xkLCByZWcpOwogCkBAIC0xNTA3LDcgKzE1MzMsNyBAQAogCQl9CiAjaWZkZWYgQ09ORklHX1NNUAogCQllbHNlCi0JCQlwcm9tX3ByaW50ZigiYm9vdCBjcHUgaHcgaWR4ICV4XG4iLCByZWcpOworCQkJcHJvbV9wcmludGYoImJvb3QgY3B1IGh3IGlkeCAlbHVcbiIsIHJlZyk7CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCX0KIApAQCAtMjQyMCw3ICsyNDQ2LDcgQEAKIAlwcm9tX2dldHByb3AoY3B1X3BrZywgInJlZyIsICZnZXRwcm9wX3J2YWwsIHNpemVvZihnZXRwcm9wX3J2YWwpKTsKIAlfcHJvbS0+Y3B1ID0gZ2V0cHJvcF9ydmFsOwogCi0JcHJvbV9kZWJ1ZygiQm9vdGluZyBDUFUgaHcgaW5kZXggPSAweCV4XG4iLCBfcHJvbS0+Y3B1KTsKKwlwcm9tX2RlYnVnKCJCb290aW5nIENQVSBodyBpbmRleCA9ICVsdVxuIiwgX3Byb20tPmNwdSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwcm9tX2NoZWNrX2luaXRyZCh1bnNpZ25lZCBsb25nIHIzLCB1bnNpZ25lZCBsb25nIHI0KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXRfY2hlY2suc2ggYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdF9jaGVjay5zaAppbmRleCAxYWMxMzZiLi45ZjgyZjQ5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdF9jaGVjay5zaAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdF9jaGVjay5zaApAQCAtNTIsMTIgKzUyLDE4IEBACiAJaWYgWyAiJHtVTkRFRjowOjl9IiA9ICJfcmVzdGdwcl8iIF07IHRoZW4KIAkJT0s9MQogCWZpCisJaWYgWyAiJHtVTkRFRjowOjEwfSIgPSAiX3Jlc3RncHIwXyIgXTsgdGhlbgorCQlPSz0xCisJZmkKIAlpZiBbICIke1VOREVGOjA6MTF9IiA9ICJfcmVzdDMyZ3ByXyIgXTsgdGhlbgogCQlPSz0xCiAJZmkKIAlpZiBbICIke1VOREVGOjA6OX0iID0gIl9zYXZlZ3ByXyIgXTsgdGhlbgogCQlPSz0xCiAJZmkKKwlpZiBbICIke1VOREVGOjA6MTB9IiA9ICJfc2F2ZWdwcjBfIiBdOyB0aGVuCisJCU9LPTEKKwlmaQogCWlmIFsgIiR7VU5ERUY6MDoxMX0iID0gIl9zYXZlMzJncHJfIiBdOyB0aGVuCiAJCU9LPTEKIAlmaQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX3BhcnNlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21fcGFyc2UuYwppbmRleCA4MzYyNjIwLi44ODMzNGFmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21fcGFyc2UuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21fcGFyc2UuYwpAQCAtNiwyMzIgKzYsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CiAKLSNpZmRlZiBERUJVRwotI2RlZmluZSBEQkcoZm10Li4uKSBkbyB7IHByaW50ayhmbXQpOyB9IHdoaWxlKDApCi0jZWxzZQotI2RlZmluZSBEQkcoZm10Li4uKSBkbyB7IH0gd2hpbGUoMCkKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1BQQzY0Ci0jZGVmaW5lIFBSdTY0CSIlbHgiCi0jZWxzZQotI2RlZmluZSBQUnU2NAkiJWxseCIKLSNlbmRpZgotCi0vKiBNYXggYWRkcmVzcyBzaXplIHdlIGRlYWwgd2l0aCAqLwotI2RlZmluZSBPRl9NQVhfQUREUl9DRUxMUwk0Ci0jZGVmaW5lIE9GX0NIRUNLX0NPVU5UUyhuYSwgbnMpCSgobmEpID4gMCAmJiAobmEpIDw9IE9GX01BWF9BRERSX0NFTExTICYmIFwKLQkJCShucykgPiAwKQotCi1zdGF0aWMgc3RydWN0IG9mX2J1cyAqb2ZfbWF0Y2hfYnVzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApOwotc3RhdGljIGludCBfX29mX2FkZHJlc3NfdG9fcmVzb3VyY2Uoc3RydWN0IGRldmljZV9ub2RlICpkZXYsCi0JCWNvbnN0IHUzMiAqYWRkcnAsIHU2NCBzaXplLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCi0JCXN0cnVjdCByZXNvdXJjZSAqcik7Ci0KLQotLyogRGVidWcgdXRpbGl0eSAqLwotI2lmZGVmIERFQlVHCi1zdGF0aWMgdm9pZCBvZl9kdW1wX2FkZHIoY29uc3QgY2hhciAqcywgY29uc3QgdTMyICphZGRyLCBpbnQgbmEpCi17Ci0JcHJpbnRrKCIlcyIsIHMpOwotCXdoaWxlKG5hLS0pCi0JCXByaW50aygiICUwOHgiLCAqKGFkZHIrKykpOwotCXByaW50aygiXG4iKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBvZl9kdW1wX2FkZHIoY29uc3QgY2hhciAqcywgY29uc3QgdTMyICphZGRyLCBpbnQgbmEpIHsgfQotI2VuZGlmCi0KLQotLyogQ2FsbGJhY2tzIGZvciBidXMgc3BlY2lmaWMgdHJhbnNsYXRvcnMgKi8KLXN0cnVjdCBvZl9idXMgewotCWNvbnN0IGNoYXIJKm5hbWU7Ci0JY29uc3QgY2hhcgkqYWRkcmVzc2VzOwotCWludAkJKCptYXRjaCkoc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQpOwotCXZvaWQJCSgqY291bnRfY2VsbHMpKHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQsCi0JCQkJICAgICAgIGludCAqYWRkcmMsIGludCAqc2l6ZWMpOwotCXU2NAkJKCptYXApKHUzMiAqYWRkciwgY29uc3QgdTMyICpyYW5nZSwKLQkJCQlpbnQgbmEsIGludCBucywgaW50IHBuYSk7Ci0JaW50CQkoKnRyYW5zbGF0ZSkodTMyICphZGRyLCB1NjQgb2Zmc2V0LCBpbnQgbmEpOwotCXVuc2lnbmVkIGludAkoKmdldF9mbGFncykoY29uc3QgdTMyICphZGRyKTsKLX07Ci0KLQotLyoKLSAqIERlZmF1bHQgdHJhbnNsYXRvciAoZ2VuZXJpYyBidXMpCi0gKi8KLQotc3RhdGljIHZvaWQgb2ZfYnVzX2RlZmF1bHRfY291bnRfY2VsbHMoc3RydWN0IGRldmljZV9ub2RlICpkZXYsCi0JCQkJICAgICAgIGludCAqYWRkcmMsIGludCAqc2l6ZWMpCi17Ci0JaWYgKGFkZHJjKQotCQkqYWRkcmMgPSBvZl9uX2FkZHJfY2VsbHMoZGV2KTsKLQlpZiAoc2l6ZWMpCi0JCSpzaXplYyA9IG9mX25fc2l6ZV9jZWxscyhkZXYpOwotfQotCi1zdGF0aWMgdTY0IG9mX2J1c19kZWZhdWx0X21hcCh1MzIgKmFkZHIsIGNvbnN0IHUzMiAqcmFuZ2UsCi0JCWludCBuYSwgaW50IG5zLCBpbnQgcG5hKQotewotCXU2NCBjcCwgcywgZGE7Ci0KLQljcCA9IG9mX3JlYWRfbnVtYmVyKHJhbmdlLCBuYSk7Ci0JcyAgPSBvZl9yZWFkX251bWJlcihyYW5nZSArIG5hICsgcG5hLCBucyk7Ci0JZGEgPSBvZl9yZWFkX251bWJlcihhZGRyLCBuYSk7Ci0KLQlEQkcoIk9GOiBkZWZhdWx0IG1hcCwgY3A9IlBSdTY0Iiwgcz0iUFJ1NjQiLCBkYT0iUFJ1NjQiXG4iLAotCSAgICBjcCwgcywgZGEpOwotCi0JaWYgKGRhIDwgY3AgfHwgZGEgPj0gKGNwICsgcykpCi0JCXJldHVybiBPRl9CQURfQUREUjsKLQlyZXR1cm4gZGEgLSBjcDsKLX0KLQotc3RhdGljIGludCBvZl9idXNfZGVmYXVsdF90cmFuc2xhdGUodTMyICphZGRyLCB1NjQgb2Zmc2V0LCBpbnQgbmEpCi17Ci0JdTY0IGEgPSBvZl9yZWFkX251bWJlcihhZGRyLCBuYSk7Ci0JbWVtc2V0KGFkZHIsIDAsIG5hICogNCk7Ci0JYSArPSBvZmZzZXQ7Ci0JaWYgKG5hID4gMSkKLQkJYWRkcltuYSAtIDJdID0gYSA+PiAzMjsKLQlhZGRyW25hIC0gMV0gPSBhICYgMHhmZmZmZmZmZnU7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBvZl9idXNfZGVmYXVsdF9nZXRfZmxhZ3MoY29uc3QgdTMyICphZGRyKQotewotCXJldHVybiBJT1JFU09VUkNFX01FTTsKLX0KLQotCiAjaWZkZWYgQ09ORklHX1BDSQotLyoKLSAqIFBDSSBidXMgc3BlY2lmaWMgdHJhbnNsYXRvcgotICovCi0KLXN0YXRpYyBpbnQgb2ZfYnVzX3BjaV9tYXRjaChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQotewotCS8qICJ2Y2kiIGlzIGZvciB0aGUgL2NoYW9zIGJyaWRnZSBvbiAxc3QtZ2VuIFBDSSBwb3dlcm1hY3MgKi8KLQlyZXR1cm4gIXN0cmNtcChucC0+dHlwZSwgInBjaSIpIHx8ICFzdHJjbXAobnAtPnR5cGUsICJ2Y2kiKTsKLX0KLQotc3RhdGljIHZvaWQgb2ZfYnVzX3BjaV9jb3VudF9jZWxscyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCQkJCSAgIGludCAqYWRkcmMsIGludCAqc2l6ZWMpCi17Ci0JaWYgKGFkZHJjKQotCQkqYWRkcmMgPSAzOwotCWlmIChzaXplYykKLQkJKnNpemVjID0gMjsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBvZl9idXNfcGNpX2dldF9mbGFncyhjb25zdCB1MzIgKmFkZHIpCi17Ci0JdW5zaWduZWQgaW50IGZsYWdzID0gMDsKLQl1MzIgdyA9IGFkZHJbMF07Ci0KLQlzd2l0Y2goKHcgPj4gMjQpICYgMHgwMykgewotCWNhc2UgMHgwMToKLQkJZmxhZ3MgfD0gSU9SRVNPVVJDRV9JTzsKLQkJYnJlYWs7Ci0JY2FzZSAweDAyOiAvKiAzMiBiaXRzICovCi0JY2FzZSAweDAzOiAvKiA2NCBiaXRzICovCi0JCWZsYWdzIHw9IElPUkVTT1VSQ0VfTUVNOwotCQlicmVhazsKLQl9Ci0JaWYgKHcgJiAweDQwMDAwMDAwKQotCQlmbGFncyB8PSBJT1JFU09VUkNFX1BSRUZFVENIOwotCXJldHVybiBmbGFnczsKLX0KLQotc3RhdGljIHU2NCBvZl9idXNfcGNpX21hcCh1MzIgKmFkZHIsIGNvbnN0IHUzMiAqcmFuZ2UsIGludCBuYSwgaW50IG5zLCBpbnQgcG5hKQotewotCXU2NCBjcCwgcywgZGE7Ci0JdW5zaWduZWQgaW50IGFmLCByZjsKLQotCWFmID0gb2ZfYnVzX3BjaV9nZXRfZmxhZ3MoYWRkcik7Ci0JcmYgPSBvZl9idXNfcGNpX2dldF9mbGFncyhyYW5nZSk7Ci0KLQkvKiBDaGVjayBhZGRyZXNzIHR5cGUgbWF0Y2ggKi8KLQlpZiAoKGFmIF4gcmYpICYgKElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9JTykpCi0JCXJldHVybiBPRl9CQURfQUREUjsKLQotCS8qIFJlYWQgYWRkcmVzcyB2YWx1ZXMsIHNraXBwaW5nIGhpZ2ggY2VsbCAqLwotCWNwID0gb2ZfcmVhZF9udW1iZXIocmFuZ2UgKyAxLCBuYSAtIDEpOwotCXMgID0gb2ZfcmVhZF9udW1iZXIocmFuZ2UgKyBuYSArIHBuYSwgbnMpOwotCWRhID0gb2ZfcmVhZF9udW1iZXIoYWRkciArIDEsIG5hIC0gMSk7Ci0KLQlEQkcoIk9GOiBQQ0kgbWFwLCBjcD0iUFJ1NjQiLCBzPSJQUnU2NCIsIGRhPSJQUnU2NCJcbiIsIGNwLCBzLCBkYSk7Ci0KLQlpZiAoZGEgPCBjcCB8fCBkYSA+PSAoY3AgKyBzKSkKLQkJcmV0dXJuIE9GX0JBRF9BRERSOwotCXJldHVybiBkYSAtIGNwOwotfQotCi1zdGF0aWMgaW50IG9mX2J1c19wY2lfdHJhbnNsYXRlKHUzMiAqYWRkciwgdTY0IG9mZnNldCwgaW50IG5hKQotewotCXJldHVybiBvZl9idXNfZGVmYXVsdF90cmFuc2xhdGUoYWRkciArIDEsIG9mZnNldCwgbmEgLSAxKTsKLX0KLQotY29uc3QgdTMyICpvZl9nZXRfcGNpX2FkZHJlc3Moc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGludCBiYXJfbm8sIHU2NCAqc2l6ZSwKLQkJCXVuc2lnbmVkIGludCAqZmxhZ3MpCi17Ci0JY29uc3QgdTMyICpwcm9wOwotCXVuc2lnbmVkIGludCBwc2l6ZTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudDsKLQlzdHJ1Y3Qgb2ZfYnVzICpidXM7Ci0JaW50IG9uZXNpemUsIGksIG5hLCBuczsKLQotCS8qIEdldCBwYXJlbnQgJiBtYXRjaCBidXMgdHlwZSAqLwotCXBhcmVudCA9IG9mX2dldF9wYXJlbnQoZGV2KTsKLQlpZiAocGFyZW50ID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCWJ1cyA9IG9mX21hdGNoX2J1cyhwYXJlbnQpOwotCWlmIChzdHJjbXAoYnVzLT5uYW1lLCAicGNpIikpIHsKLQkJb2Zfbm9kZV9wdXQocGFyZW50KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWJ1cy0+Y291bnRfY2VsbHMoZGV2LCAmbmEsICZucyk7Ci0Jb2Zfbm9kZV9wdXQocGFyZW50KTsKLQlpZiAoIU9GX0NIRUNLX0NPVU5UUyhuYSwgbnMpKQotCQlyZXR1cm4gTlVMTDsKLQotCS8qIEdldCAicmVnIiBvciAiYXNzaWduZWQtYWRkcmVzc2VzIiBwcm9wZXJ0eSAqLwotCXByb3AgPSBvZl9nZXRfcHJvcGVydHkoZGV2LCBidXMtPmFkZHJlc3NlcywgJnBzaXplKTsKLQlpZiAocHJvcCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQlwc2l6ZSAvPSA0OwotCi0Jb25lc2l6ZSA9IG5hICsgbnM7Ci0JZm9yIChpID0gMDsgcHNpemUgPj0gb25lc2l6ZTsgcHNpemUgLT0gb25lc2l6ZSwgcHJvcCArPSBvbmVzaXplLCBpKyspCi0JCWlmICgocHJvcFswXSAmIDB4ZmYpID09ICgoYmFyX25vICogNCkgKyBQQ0lfQkFTRV9BRERSRVNTXzApKSB7Ci0JCQlpZiAoc2l6ZSkKLQkJCQkqc2l6ZSA9IG9mX3JlYWRfbnVtYmVyKHByb3AgKyBuYSwgbnMpOwotCQkJaWYgKGZsYWdzKQotCQkJCSpmbGFncyA9IGJ1cy0+Z2V0X2ZsYWdzKHByb3ApOwotCQkJcmV0dXJuIHByb3A7Ci0JCX0KLQlyZXR1cm4gTlVMTDsKLX0KLUVYUE9SVF9TWU1CT0wob2ZfZ2V0X3BjaV9hZGRyZXNzKTsKLQotaW50IG9mX3BjaV9hZGRyZXNzX3RvX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCBpbnQgYmFyLAotCQkJICAgICAgIHN0cnVjdCByZXNvdXJjZSAqcikKLXsKLQljb25zdCB1MzIJKmFkZHJwOwotCXU2NAkJc2l6ZTsKLQl1bnNpZ25lZCBpbnQJZmxhZ3M7Ci0KLQlhZGRycCA9IG9mX2dldF9wY2lfYWRkcmVzcyhkZXYsIGJhciwgJnNpemUsICZmbGFncyk7Ci0JaWYgKGFkZHJwID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBfX29mX2FkZHJlc3NfdG9fcmVzb3VyY2UoZGV2LCBhZGRycCwgc2l6ZSwgZmxhZ3MsIHIpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwob2ZfcGNpX2FkZHJlc3NfdG9fcmVzb3VyY2UpOwotCiBpbnQgb2ZfaXJxX21hcF9wY2koc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBvZl9pcnEgKm91dF9pcnEpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpkbiwgKnBwbm9kZTsKQEAgLTMxMywzNDUgKzkyLDYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKG9mX2lycV9tYXBfcGNpKTsKICNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKLS8qCi0gKiBJU0EgYnVzIHNwZWNpZmljIHRyYW5zbGF0b3IKLSAqLwotCi1zdGF0aWMgaW50IG9mX2J1c19pc2FfbWF0Y2goc3RydWN0IGRldmljZV9ub2RlICpucCkKLXsKLQlyZXR1cm4gIXN0cmNtcChucC0+bmFtZSwgImlzYSIpOwotfQotCi1zdGF0aWMgdm9pZCBvZl9idXNfaXNhX2NvdW50X2NlbGxzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQsCi0JCQkJICAgaW50ICphZGRyYywgaW50ICpzaXplYykKLXsKLQlpZiAoYWRkcmMpCi0JCSphZGRyYyA9IDI7Ci0JaWYgKHNpemVjKQotCQkqc2l6ZWMgPSAxOwotfQotCi1zdGF0aWMgdTY0IG9mX2J1c19pc2FfbWFwKHUzMiAqYWRkciwgY29uc3QgdTMyICpyYW5nZSwgaW50IG5hLCBpbnQgbnMsIGludCBwbmEpCi17Ci0JdTY0IGNwLCBzLCBkYTsKLQotCS8qIENoZWNrIGFkZHJlc3MgdHlwZSBtYXRjaCAqLwotCWlmICgoYWRkclswXSBeIHJhbmdlWzBdKSAmIDB4MDAwMDAwMDEpCi0JCXJldHVybiBPRl9CQURfQUREUjsKLQotCS8qIFJlYWQgYWRkcmVzcyB2YWx1ZXMsIHNraXBwaW5nIGhpZ2ggY2VsbCAqLwotCWNwID0gb2ZfcmVhZF9udW1iZXIocmFuZ2UgKyAxLCBuYSAtIDEpOwotCXMgID0gb2ZfcmVhZF9udW1iZXIocmFuZ2UgKyBuYSArIHBuYSwgbnMpOwotCWRhID0gb2ZfcmVhZF9udW1iZXIoYWRkciArIDEsIG5hIC0gMSk7Ci0KLQlEQkcoIk9GOiBJU0EgbWFwLCBjcD0iUFJ1NjQiLCBzPSJQUnU2NCIsIGRhPSJQUnU2NCJcbiIsIGNwLCBzLCBkYSk7Ci0KLQlpZiAoZGEgPCBjcCB8fCBkYSA+PSAoY3AgKyBzKSkKLQkJcmV0dXJuIE9GX0JBRF9BRERSOwotCXJldHVybiBkYSAtIGNwOwotfQotCi1zdGF0aWMgaW50IG9mX2J1c19pc2FfdHJhbnNsYXRlKHUzMiAqYWRkciwgdTY0IG9mZnNldCwgaW50IG5hKQotewotCXJldHVybiBvZl9idXNfZGVmYXVsdF90cmFuc2xhdGUoYWRkciArIDEsIG9mZnNldCwgbmEgLSAxKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBvZl9idXNfaXNhX2dldF9mbGFncyhjb25zdCB1MzIgKmFkZHIpCi17Ci0JdW5zaWduZWQgaW50IGZsYWdzID0gMDsKLQl1MzIgdyA9IGFkZHJbMF07Ci0KLQlpZiAodyAmIDEpCi0JCWZsYWdzIHw9IElPUkVTT1VSQ0VfSU87Ci0JZWxzZQotCQlmbGFncyB8PSBJT1JFU09VUkNFX01FTTsKLQlyZXR1cm4gZmxhZ3M7Ci19Ci0KLQotLyoKLSAqIEFycmF5IG9mIGJ1cyBzcGVjaWZpYyB0cmFuc2xhdG9ycwotICovCi0KLXN0YXRpYyBzdHJ1Y3Qgb2ZfYnVzIG9mX2J1c3Nlc1tdID0gewotI2lmZGVmIENPTkZJR19QQ0kKLQkvKiBQQ0kgKi8KLQl7Ci0JCS5uYW1lID0gInBjaSIsCi0JCS5hZGRyZXNzZXMgPSAiYXNzaWduZWQtYWRkcmVzc2VzIiwKLQkJLm1hdGNoID0gb2ZfYnVzX3BjaV9tYXRjaCwKLQkJLmNvdW50X2NlbGxzID0gb2ZfYnVzX3BjaV9jb3VudF9jZWxscywKLQkJLm1hcCA9IG9mX2J1c19wY2lfbWFwLAotCQkudHJhbnNsYXRlID0gb2ZfYnVzX3BjaV90cmFuc2xhdGUsCi0JCS5nZXRfZmxhZ3MgPSBvZl9idXNfcGNpX2dldF9mbGFncywKLQl9LAotI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KLQkvKiBJU0EgKi8KLQl7Ci0JCS5uYW1lID0gImlzYSIsCi0JCS5hZGRyZXNzZXMgPSAicmVnIiwKLQkJLm1hdGNoID0gb2ZfYnVzX2lzYV9tYXRjaCwKLQkJLmNvdW50X2NlbGxzID0gb2ZfYnVzX2lzYV9jb3VudF9jZWxscywKLQkJLm1hcCA9IG9mX2J1c19pc2FfbWFwLAotCQkudHJhbnNsYXRlID0gb2ZfYnVzX2lzYV90cmFuc2xhdGUsCi0JCS5nZXRfZmxhZ3MgPSBvZl9idXNfaXNhX2dldF9mbGFncywKLQl9LAotCS8qIERlZmF1bHQgKi8KLQl7Ci0JCS5uYW1lID0gImRlZmF1bHQiLAotCQkuYWRkcmVzc2VzID0gInJlZyIsCi0JCS5tYXRjaCA9IE5VTEwsCi0JCS5jb3VudF9jZWxscyA9IG9mX2J1c19kZWZhdWx0X2NvdW50X2NlbGxzLAotCQkubWFwID0gb2ZfYnVzX2RlZmF1bHRfbWFwLAotCQkudHJhbnNsYXRlID0gb2ZfYnVzX2RlZmF1bHRfdHJhbnNsYXRlLAotCQkuZ2V0X2ZsYWdzID0gb2ZfYnVzX2RlZmF1bHRfZ2V0X2ZsYWdzLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IG9mX2J1cyAqb2ZfbWF0Y2hfYnVzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvZl9idXNzZXMpOyBpICsrKQotCQlpZiAoIW9mX2J1c3Nlc1tpXS5tYXRjaCB8fCBvZl9idXNzZXNbaV0ubWF0Y2gobnApKQotCQkJcmV0dXJuICZvZl9idXNzZXNbaV07Ci0JQlVHKCk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbnQgb2ZfdHJhbnNsYXRlX29uZShzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCwgc3RydWN0IG9mX2J1cyAqYnVzLAotCQkJICAgIHN0cnVjdCBvZl9idXMgKnBidXMsIHUzMiAqYWRkciwKLQkJCSAgICBpbnQgbmEsIGludCBucywgaW50IHBuYSwgY29uc3QgY2hhciAqcnByb3ApCi17Ci0JY29uc3QgdTMyICpyYW5nZXM7Ci0JdW5zaWduZWQgaW50IHJsZW47Ci0JaW50IHJvbmU7Ci0JdTY0IG9mZnNldCA9IE9GX0JBRF9BRERSOwotCi0JLyogTm9ybWFsbHksIGFuIGFic2VuY2Ugb2YgYSAicmFuZ2VzIiBwcm9wZXJ0eSBtZWFucyB3ZSBhcmUKLQkgKiBjcm9zc2luZyBhIG5vbi10cmFuc2xhdGFibGUgYm91bmRhcnksIGFuZCB0aHVzIHRoZSBhZGRyZXNzZXMKLQkgKiBiZWxvdyB0aGUgY3VycmVudCBub3QgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBDUFUgcGh5c2ljYWwgb25lcy4KLQkgKiBVbmZvcnR1bmF0ZWx5LCB3aGlsZSB0aGlzIGlzIHZlcnkgY2xlYXIgaW4gdGhlIHNwZWMsIGl0J3Mgbm90Ci0JICogd2hhdCBBcHBsZSB1bmRlcnN0b29kLCBhbmQgdGhleSBkbyBoYXZlIHRoaW5ncyBsaWtlIC91bmktbiBvcgotCSAqIC9odCBub2RlcyB3aXRoIG5vICJyYW5nZXMiIHByb3BlcnR5IGFuZCBhIGxvdCBvZiBwZXJmZWN0bHkKLQkgKiB1c2VhYmxlIG1hcHBlZCBkZXZpY2VzIGJlbG93IHRoZW0uIFRodXMgd2UgdHJlYXQgdGhlIGFic2VuY2Ugb2YKLQkgKiAicmFuZ2VzIiBhcyBlcXVpdmFsZW50IHRvIGFuIGVtcHR5ICJyYW5nZXMiIHByb3BlcnR5IHdoaWNoIG1lYW5zCi0JICogYSAxOjEgdHJhbnNsYXRpb24gYXQgdGhhdCBsZXZlbC4gSXQncyB1cCB0byB0aGUgY2FsbGVyIG5vdCB0byB0cnkKLQkgKiB0byB0cmFuc2xhdGUgYWRkcmVzc2VzIHRoYXQgYXJlbid0IHN1cHBvc2VkIHRvIGJlIHRyYW5zbGF0ZWQgaW4KLQkgKiB0aGUgZmlyc3QgcGxhY2UuIC0tQmVuSC4KLQkgKi8KLQlyYW5nZXMgPSBvZl9nZXRfcHJvcGVydHkocGFyZW50LCBycHJvcCwgJnJsZW4pOwotCWlmIChyYW5nZXMgPT0gTlVMTCB8fCBybGVuID09IDApIHsKLQkJb2Zmc2V0ID0gb2ZfcmVhZF9udW1iZXIoYWRkciwgbmEpOwotCQltZW1zZXQoYWRkciwgMCwgcG5hICogNCk7Ci0JCURCRygiT0Y6IG5vIHJhbmdlcywgMToxIHRyYW5zbGF0aW9uXG4iKTsKLQkJZ290byBmaW5pc2g7Ci0JfQotCi0JREJHKCJPRjogd2Fsa2luZyByYW5nZXMuLi5cbiIpOwotCi0JLyogTm93IHdhbGsgdGhyb3VnaCB0aGUgcmFuZ2VzICovCi0JcmxlbiAvPSA0OwotCXJvbmUgPSBuYSArIHBuYSArIG5zOwotCWZvciAoOyBybGVuID49IHJvbmU7IHJsZW4gLT0gcm9uZSwgcmFuZ2VzICs9IHJvbmUpIHsKLQkJb2Zmc2V0ID0gYnVzLT5tYXAoYWRkciwgcmFuZ2VzLCBuYSwgbnMsIHBuYSk7Ci0JCWlmIChvZmZzZXQgIT0gT0ZfQkFEX0FERFIpCi0JCQlicmVhazsKLQl9Ci0JaWYgKG9mZnNldCA9PSBPRl9CQURfQUREUikgewotCQlEQkcoIk9GOiBub3QgZm91bmQgIVxuIik7Ci0JCXJldHVybiAxOwotCX0KLQltZW1jcHkoYWRkciwgcmFuZ2VzICsgbmEsIDQgKiBwbmEpOwotCi0gZmluaXNoOgotCW9mX2R1bXBfYWRkcigiT0Y6IHBhcmVudCB0cmFuc2xhdGlvbiBmb3I6IiwgYWRkciwgcG5hKTsKLQlEQkcoIk9GOiB3aXRoIG9mZnNldDogIlBSdTY0IlxuIiwgb2Zmc2V0KTsKLQotCS8qIFRyYW5zbGF0ZSBpdCBpbnRvIHBhcmVudCBidXMgc3BhY2UgKi8KLQlyZXR1cm4gcGJ1cy0+dHJhbnNsYXRlKGFkZHIsIG9mZnNldCwgcG5hKTsKLX0KLQotCi0vKgotICogVHJhbnNsYXRlIGFuIGFkZHJlc3MgZnJvbSB0aGUgZGV2aWNlLXRyZWUgaW50byBhIENQVSBwaHlzaWNhbCBhZGRyZXNzLAotICogdGhpcyB3YWxrcyB1cCB0aGUgdHJlZSBhbmQgYXBwbGllcyB0aGUgdmFyaW91cyBidXMgbWFwcGluZ3Mgb24gdGhlCi0gKiB3YXkuCi0gKgotICogTm90ZTogV2UgY29uc2lkZXIgdGhhdCBjcm9zc2luZyBhbnkgbGV2ZWwgd2l0aCAjc2l6ZS1jZWxscyA9PSAwIHRvIG1lYW4KLSAqIHRoYXQgdHJhbnNsYXRpb24gaXMgaW1wb3NzaWJsZSAodGhhdCBpcyB3ZSBhcmUgbm90IGRlYWxpbmcgd2l0aCBhIHZhbHVlCi0gKiB0aGF0IGNhbiBiZSBtYXBwZWQgdG8gYSBjcHUgcGh5c2ljYWwgYWRkcmVzcykuIFRoaXMgaXMgbm90IHJlYWxseSBzcGVjaWZpZWQKLSAqIHRoYXQgd2F5LCBidXQgdGhpcyBpcyB0cmFkaXRpb25hbGx5IHRoZSB3YXkgSUJNIGF0IGxlYXN0IGRvIHRoaW5ncwotICovCi11NjQgX19vZl90cmFuc2xhdGVfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgY29uc3QgdTMyICppbl9hZGRyLAotCQkJICAgY29uc3QgY2hhciAqcnByb3ApCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQgPSBOVUxMOwotCXN0cnVjdCBvZl9idXMgKmJ1cywgKnBidXM7Ci0JdTMyIGFkZHJbT0ZfTUFYX0FERFJfQ0VMTFNdOwotCWludCBuYSwgbnMsIHBuYSwgcG5zOwotCXU2NCByZXN1bHQgPSBPRl9CQURfQUREUjsKLQotCURCRygiT0Y6ICoqIHRyYW5zbGF0aW9uIGZvciBkZXZpY2UgJXMgKipcbiIsIGRldi0+ZnVsbF9uYW1lKTsKLQotCS8qIEluY3JlYXNlIHJlZmNvdW50IGF0IGN1cnJlbnQgbGV2ZWwgKi8KLQlvZl9ub2RlX2dldChkZXYpOwotCi0JLyogR2V0IHBhcmVudCAmIG1hdGNoIGJ1cyB0eXBlICovCi0JcGFyZW50ID0gb2ZfZ2V0X3BhcmVudChkZXYpOwotCWlmIChwYXJlbnQgPT0gTlVMTCkKLQkJZ290byBiYWlsOwotCWJ1cyA9IG9mX21hdGNoX2J1cyhwYXJlbnQpOwotCi0JLyogQ291bmQgYWRkcmVzcyBjZWxscyAmIGNvcHkgYWRkcmVzcyBsb2NhbGx5ICovCi0JYnVzLT5jb3VudF9jZWxscyhkZXYsICZuYSwgJm5zKTsKLQlpZiAoIU9GX0NIRUNLX0NPVU5UUyhuYSwgbnMpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicHJvbV9wYXJzZTogQmFkIGNlbGwgY291bnQgZm9yICVzXG4iLAotCQkgICAgICAgZGV2LT5mdWxsX25hbWUpOwotCQlnb3RvIGJhaWw7Ci0JfQotCW1lbWNweShhZGRyLCBpbl9hZGRyLCBuYSAqIDQpOwotCi0JREJHKCJPRjogYnVzIGlzICVzIChuYT0lZCwgbnM9JWQpIG9uICVzXG4iLAotCSAgICBidXMtPm5hbWUsIG5hLCBucywgcGFyZW50LT5mdWxsX25hbWUpOwotCW9mX2R1bXBfYWRkcigiT0Y6IHRyYW5zbGF0aW5nIGFkZHJlc3M6IiwgYWRkciwgbmEpOwotCi0JLyogVHJhbnNsYXRlICovCi0JZm9yICg7OykgewotCQkvKiBTd2l0Y2ggdG8gcGFyZW50IGJ1cyAqLwotCQlvZl9ub2RlX3B1dChkZXYpOwotCQlkZXYgPSBwYXJlbnQ7Ci0JCXBhcmVudCA9IG9mX2dldF9wYXJlbnQoZGV2KTsKLQotCQkvKiBJZiByb290LCB3ZSBoYXZlIGZpbmlzaGVkICovCi0JCWlmIChwYXJlbnQgPT0gTlVMTCkgewotCQkJREJHKCJPRjogcmVhY2hlZCByb290IG5vZGVcbiIpOwotCQkJcmVzdWx0ID0gb2ZfcmVhZF9udW1iZXIoYWRkciwgbmEpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBHZXQgbmV3IHBhcmVudCBidXMgYW5kIGNvdW50cyAqLwotCQlwYnVzID0gb2ZfbWF0Y2hfYnVzKHBhcmVudCk7Ci0JCXBidXMtPmNvdW50X2NlbGxzKGRldiwgJnBuYSwgJnBucyk7Ci0JCWlmICghT0ZfQ0hFQ0tfQ09VTlRTKHBuYSwgcG5zKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJwcm9tX3BhcnNlOiBCYWQgY2VsbCBjb3VudCBmb3IgJXNcbiIsCi0JCQkgICAgICAgZGV2LT5mdWxsX25hbWUpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlEQkcoIk9GOiBwYXJlbnQgYnVzIGlzICVzIChuYT0lZCwgbnM9JWQpIG9uICVzXG4iLAotCQkgICAgcGJ1cy0+bmFtZSwgcG5hLCBwbnMsIHBhcmVudC0+ZnVsbF9uYW1lKTsKLQotCQkvKiBBcHBseSBidXMgdHJhbnNsYXRpb24gKi8KLQkJaWYgKG9mX3RyYW5zbGF0ZV9vbmUoZGV2LCBidXMsIHBidXMsIGFkZHIsIG5hLCBucywgcG5hLCBycHJvcCkpCi0JCQlicmVhazsKLQotCQkvKiBDb21wbGV0ZSB0aGUgbW92ZSB1cCBvbmUgbGV2ZWwgKi8KLQkJbmEgPSBwbmE7Ci0JCW5zID0gcG5zOwotCQlidXMgPSBwYnVzOwotCi0JCW9mX2R1bXBfYWRkcigiT0Y6IG9uZSBsZXZlbCB0cmFuc2xhdGlvbjoiLCBhZGRyLCBuYSk7Ci0JfQotIGJhaWw6Ci0Jb2Zfbm9kZV9wdXQocGFyZW50KTsKLQlvZl9ub2RlX3B1dChkZXYpOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotdTY0IG9mX3RyYW5zbGF0ZV9hZGRyZXNzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCBjb25zdCB1MzIgKmluX2FkZHIpCi17Ci0JcmV0dXJuIF9fb2ZfdHJhbnNsYXRlX2FkZHJlc3MoZGV2LCBpbl9hZGRyLCAicmFuZ2VzIik7Ci19Ci1FWFBPUlRfU1lNQk9MKG9mX3RyYW5zbGF0ZV9hZGRyZXNzKTsKLQotdTY0IG9mX3RyYW5zbGF0ZV9kbWFfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgY29uc3QgdTMyICppbl9hZGRyKQotewotCXJldHVybiBfX29mX3RyYW5zbGF0ZV9hZGRyZXNzKGRldiwgaW5fYWRkciwgImRtYS1yYW5nZXMiKTsKLX0KLUVYUE9SVF9TWU1CT0wob2ZfdHJhbnNsYXRlX2RtYV9hZGRyZXNzKTsKLQotY29uc3QgdTMyICpvZl9nZXRfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgaW50IGluZGV4LCB1NjQgKnNpemUsCi0JCSAgICB1bnNpZ25lZCBpbnQgKmZsYWdzKQotewotCWNvbnN0IHUzMiAqcHJvcDsKLQl1bnNpZ25lZCBpbnQgcHNpemU7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQ7Ci0Jc3RydWN0IG9mX2J1cyAqYnVzOwotCWludCBvbmVzaXplLCBpLCBuYSwgbnM7Ci0KLQkvKiBHZXQgcGFyZW50ICYgbWF0Y2ggYnVzIHR5cGUgKi8KLQlwYXJlbnQgPSBvZl9nZXRfcGFyZW50KGRldik7Ci0JaWYgKHBhcmVudCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQlidXMgPSBvZl9tYXRjaF9idXMocGFyZW50KTsKLQlidXMtPmNvdW50X2NlbGxzKGRldiwgJm5hLCAmbnMpOwotCW9mX25vZGVfcHV0KHBhcmVudCk7Ci0JaWYgKCFPRl9DSEVDS19DT1VOVFMobmEsIG5zKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQkvKiBHZXQgInJlZyIgb3IgImFzc2lnbmVkLWFkZHJlc3NlcyIgcHJvcGVydHkgKi8KLQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KGRldiwgYnVzLT5hZGRyZXNzZXMsICZwc2l6ZSk7Ci0JaWYgKHByb3AgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0JcHNpemUgLz0gNDsKLQotCW9uZXNpemUgPSBuYSArIG5zOwotCWZvciAoaSA9IDA7IHBzaXplID49IG9uZXNpemU7IHBzaXplIC09IG9uZXNpemUsIHByb3AgKz0gb25lc2l6ZSwgaSsrKQotCQlpZiAoaSA9PSBpbmRleCkgewotCQkJaWYgKHNpemUpCi0JCQkJKnNpemUgPSBvZl9yZWFkX251bWJlcihwcm9wICsgbmEsIG5zKTsKLQkJCWlmIChmbGFncykKLQkJCQkqZmxhZ3MgPSBidXMtPmdldF9mbGFncyhwcm9wKTsKLQkJCXJldHVybiBwcm9wOwotCQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci1FWFBPUlRfU1lNQk9MKG9mX2dldF9hZGRyZXNzKTsKLQotc3RhdGljIGludCBfX29mX2FkZHJlc3NfdG9fcmVzb3VyY2Uoc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGNvbnN0IHUzMiAqYWRkcnAsCi0JCQkJICAgIHU2NCBzaXplLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCi0JCQkJICAgIHN0cnVjdCByZXNvdXJjZSAqcikKLXsKLQl1NjQgdGFkZHI7Ci0KLQlpZiAoKGZsYWdzICYgKElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSkpID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCXRhZGRyID0gb2ZfdHJhbnNsYXRlX2FkZHJlc3MoZGV2LCBhZGRycCk7Ci0JaWYgKHRhZGRyID09IE9GX0JBRF9BRERSKQotCQlyZXR1cm4gLUVJTlZBTDsKLQltZW1zZXQociwgMCwgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkpOwotCWlmIChmbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJdW5zaWduZWQgbG9uZyBwb3J0OwotCQlwb3J0ID0gcGNpX2FkZHJlc3NfdG9fcGlvKHRhZGRyKTsKLQkJaWYgKHBvcnQgPT0gKHVuc2lnbmVkIGxvbmcpLTEpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJci0+c3RhcnQgPSBwb3J0OwotCQlyLT5lbmQgPSBwb3J0ICsgc2l6ZSAtIDE7Ci0JfSBlbHNlIHsKLQkJci0+c3RhcnQgPSB0YWRkcjsKLQkJci0+ZW5kID0gdGFkZHIgKyBzaXplIC0gMTsKLQl9Ci0Jci0+ZmxhZ3MgPSBmbGFnczsKLQlyLT5uYW1lID0gZGV2LT5uYW1lOwotCXJldHVybiAwOwotfQotCi1pbnQgb2ZfYWRkcmVzc190b19yZXNvdXJjZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgaW50IGluZGV4LAotCQkJICAgc3RydWN0IHJlc291cmNlICpyKQotewotCWNvbnN0IHUzMgkqYWRkcnA7Ci0JdTY0CQlzaXplOwotCXVuc2lnbmVkIGludAlmbGFnczsKLQotCWFkZHJwID0gb2ZfZ2V0X2FkZHJlc3MoZGV2LCBpbmRleCwgJnNpemUsICZmbGFncyk7Ci0JaWYgKGFkZHJwID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBfX29mX2FkZHJlc3NfdG9fcmVzb3VyY2UoZGV2LCBhZGRycCwgc2l6ZSwgZmxhZ3MsIHIpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwob2ZfYWRkcmVzc190b19yZXNvdXJjZSk7Ci0KIHZvaWQgb2ZfcGFyc2VfZG1hX3dpbmRvdyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBjb25zdCB2b2lkICpkbWFfd2luZG93X3Byb3AsCiAJCXVuc2lnbmVkIGxvbmcgKmJ1c25vLCB1bnNpZ25lZCBsb25nICpwaHlzLCB1bnNpZ25lZCBsb25nICpzaXplKQogewpAQCAtNjc4LDM0MiArMTE4LDYgQEAKIAkqc2l6ZSA9IG9mX3JlYWRfbnVtYmVyKGRtYV93aW5kb3csIGNlbGxzKTsKIH0KIAotLyoKLSAqIEludGVycnVwdCByZW1hcHBlcgotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgb2ZfaXJxX3dvcmthcm91bmRzOwotc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfaXJxX2RmbHRfcGljOwotCi1zdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpvZl9pcnFfZmluZF9wYXJlbnQoc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnA7Ci0JY29uc3QgcGhhbmRsZSAqcGFycDsKLQotCWlmICghb2Zfbm9kZV9nZXQoY2hpbGQpKQotCQlyZXR1cm4gTlVMTDsKLQotCWRvIHsKLQkJcGFycCA9IG9mX2dldF9wcm9wZXJ0eShjaGlsZCwgImludGVycnVwdC1wYXJlbnQiLCBOVUxMKTsKLQkJaWYgKHBhcnAgPT0gTlVMTCkKLQkJCXAgPSBvZl9nZXRfcGFyZW50KGNoaWxkKTsKLQkJZWxzZSB7Ci0JCQlpZiAob2ZfaXJxX3dvcmthcm91bmRzICYgT0ZfSU1BUF9OT19QSEFORExFKQotCQkJCXAgPSBvZl9ub2RlX2dldChvZl9pcnFfZGZsdF9waWMpOwotCQkJZWxzZQotCQkJCXAgPSBvZl9maW5kX25vZGVfYnlfcGhhbmRsZSgqcGFycCk7Ci0JCX0KLQkJb2Zfbm9kZV9wdXQoY2hpbGQpOwotCQljaGlsZCA9IHA7Ci0JfSB3aGlsZSAocCAmJiBvZl9nZXRfcHJvcGVydHkocCwgIiNpbnRlcnJ1cHQtY2VsbHMiLCBOVUxMKSA9PSBOVUxMKTsKLQotCXJldHVybiBwOwotfQotCi0vKiBUaGlzIGRvZXNuJ3QgbmVlZCB0byBiZSBjYWxsZWQgaWYgeW91IGRvbid0IGhhdmUgYW55IHNwZWNpYWwgd29ya2Fyb3VuZAotICogZmxhZ3MgdG8gcGFzcwotICovCi12b2lkIG9mX2lycV9tYXBfaW5pdCh1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0Jb2ZfaXJxX3dvcmthcm91bmRzID0gZmxhZ3M7Ci0KLQkvKiBPbGRXb3JsZCwgZG9uJ3QgYm90aGVyIGxvb2tpbmcgYXQgb3RoZXIgdGhpbmdzICovCi0JaWYgKGZsYWdzICYgT0ZfSU1BUF9PTERXT1JMRF9NQUMpCi0JCXJldHVybjsKLQotCS8qIElmIHdlIGRvbid0IGhhdmUgcGhhbmRsZXMsIGxldCdzIHRyeSB0byBsb2NhdGUgYSBkZWZhdWx0IGludGVycnVwdAotCSAqIGNvbnRyb2xsZXIgKGhhcHBlbnMgd2hlbiBib290aW5nIHdpdGggQm9vdFgpLiBXZSBkbyBhIGZpcnN0IG1hdGNoCi0JICogaGVyZSwgaG9wZWZ1bGx5LCB0aGF0IG9ubHkgZXZlciBoYXBwZW5zIG9uIG1hY2hpbmVzIHdpdGggb25lCi0JICogY29udHJvbGxlci4KLQkgKi8KLQlpZiAoZmxhZ3MgJiBPRl9JTUFQX05PX1BIQU5ETEUpIHsKLQkJc3RydWN0IGRldmljZV9ub2RlICpucDsKLQotCQlmb3JfZWFjaF9ub2RlX3dpdGhfcHJvcGVydHkobnAsICJpbnRlcnJ1cHQtY29udHJvbGxlciIpIHsKLQkJCS8qIFNraXAgL2Nob3Nlbi9pbnRlcnJ1cHQtY29udHJvbGxlciAqLwotCQkJaWYgKHN0cmNtcChucC0+bmFtZSwgImNob3NlbiIpID09IDApCi0JCQkJY29udGludWU7Ci0JCQkvKiBJdCBzZWVtcyBsaWtlIGF0IGxlYXN0IG9uZSBwZXJzb24gb24gdGhpcyBwbGFuZXQgd2FudHMKLQkJCSAqIHRvIHVzZSBCb290WCBvbiBhIG1hY2hpbmUgd2l0aCBhbiBBcHBsZUtpd2kgY29udHJvbGxlcgotCQkJICogd2hpY2ggaGFwcGVucyB0byBwcmV0ZW5kIHRvIGJlIGFuIGludGVycnVwdAotCQkJICogY29udHJvbGxlciB0b28uCi0JCQkgKi8KLQkJCWlmIChzdHJjbXAobnAtPm5hbWUsICJBcHBsZUtpd2kiKSA9PSAwKQotCQkJCWNvbnRpbnVlOwotCQkJLyogSSB0aGluayB3ZSBmb3VuZCBvbmUgISAqLwotCQkJb2ZfaXJxX2RmbHRfcGljID0gbnA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotfQotCi1pbnQgb2ZfaXJxX21hcF9yYXcoc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQsIGNvbnN0IHUzMiAqaW50c3BlYywgdTMyIG9pbnRzaXplLAotCQljb25zdCB1MzIgKmFkZHIsIHN0cnVjdCBvZl9pcnEgKm91dF9pcnEpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICppcGFyLCAqdG5vZGUsICpvbGQgPSBOVUxMLCAqbmV3cGFyID0gTlVMTDsKLQljb25zdCB1MzIgKnRtcCwgKmltYXAsICppbWFzazsKLQl1MzIgaW50c2l6ZSA9IDEsIGFkZHJzaXplLCBuZXdpbnRzaXplID0gMCwgbmV3YWRkcnNpemUgPSAwOwotCWludCBpbWFwbGVuLCBtYXRjaCwgaTsKLQotCURCRygib2ZfaXJxX21hcF9yYXc6IHBhcj0lcyxpbnRzcGVjPVsweCUwOHggMHglMDh4Li4uXSxvaW50c2l6ZT0lZFxuIiwKLQkgICAgcGFyZW50LT5mdWxsX25hbWUsIGludHNwZWNbMF0sIGludHNwZWNbMV0sIG9pbnRzaXplKTsKLQotCWlwYXIgPSBvZl9ub2RlX2dldChwYXJlbnQpOwotCi0JLyogRmlyc3QgZ2V0IHRoZSAjaW50ZXJydXB0LWNlbGxzIHByb3BlcnR5IG9mIHRoZSBjdXJyZW50IGN1cnNvcgotCSAqIHRoYXQgdGVsbHMgdXMgaG93IHRvIGludGVycHJldCB0aGUgcGFzc2VkLWluIGludHNwZWMuIElmIHRoZXJlCi0JICogaXMgbm9uZSwgd2UgYXJlIG5pY2UgYW5kIGp1c3Qgd2FsayB1cCB0aGUgdHJlZQotCSAqLwotCWRvIHsKLQkJdG1wID0gb2ZfZ2V0X3Byb3BlcnR5KGlwYXIsICIjaW50ZXJydXB0LWNlbGxzIiwgTlVMTCk7Ci0JCWlmICh0bXAgIT0gTlVMTCkgewotCQkJaW50c2l6ZSA9ICp0bXA7Ci0JCQlicmVhazsKLQkJfQotCQl0bm9kZSA9IGlwYXI7Ci0JCWlwYXIgPSBvZl9pcnFfZmluZF9wYXJlbnQoaXBhcik7Ci0JCW9mX25vZGVfcHV0KHRub2RlKTsKLQl9IHdoaWxlIChpcGFyKTsKLQlpZiAoaXBhciA9PSBOVUxMKSB7Ci0JCURCRygiIC0+IG5vIHBhcmVudCBmb3VuZCAhXG4iKTsKLQkJZ290byBmYWlsOwotCX0KLQotCURCRygib2ZfaXJxX21hcF9yYXc6IGlwYXI9JXMsIHNpemU9JWRcbiIsIGlwYXItPmZ1bGxfbmFtZSwgaW50c2l6ZSk7Ci0KLQlpZiAob2ludHNpemUgIT0gaW50c2l6ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBMb29rIGZvciB0aGlzICNhZGRyZXNzLWNlbGxzLiBXZSBoYXZlIHRvIGltcGxlbWVudCB0aGUgb2xkIGxpbnV4Ci0JICogdHJpY2sgb2YgbG9va2luZyBmb3IgdGhlIHBhcmVudCBoZXJlIGFzIHNvbWUgZGV2aWNlLXRyZWVzIHJlbHkgb24gaXQKLQkgKi8KLQlvbGQgPSBvZl9ub2RlX2dldChpcGFyKTsKLQlkbyB7Ci0JCXRtcCA9IG9mX2dldF9wcm9wZXJ0eShvbGQsICIjYWRkcmVzcy1jZWxscyIsIE5VTEwpOwotCQl0bm9kZSA9IG9mX2dldF9wYXJlbnQob2xkKTsKLQkJb2Zfbm9kZV9wdXQob2xkKTsKLQkJb2xkID0gdG5vZGU7Ci0JfSB3aGlsZShvbGQgJiYgdG1wID09IE5VTEwpOwotCW9mX25vZGVfcHV0KG9sZCk7Ci0Jb2xkID0gTlVMTDsKLQlhZGRyc2l6ZSA9ICh0bXAgPT0gTlVMTCkgPyAyIDogKnRtcDsKLQotCURCRygiIC0+IGFkZHJzaXplPSVkXG4iLCBhZGRyc2l6ZSk7Ci0KLQkvKiBOb3cgc3RhcnQgdGhlIGFjdHVhbCAicHJvcGVyIiB3YWxrIG9mIHRoZSBpbnRlcnJ1cHQgdHJlZSAqLwotCXdoaWxlIChpcGFyICE9IE5VTEwpIHsKLQkJLyogTm93IGNoZWNrIGlmIGN1cnNvciBpcyBhbiBpbnRlcnJ1cHQtY29udHJvbGxlciBhbmQgaWYgaXQgaXMKLQkJICogdGhlbiB3ZSBhcmUgZG9uZQotCQkgKi8KLQkJaWYgKG9mX2dldF9wcm9wZXJ0eShpcGFyLCAiaW50ZXJydXB0LWNvbnRyb2xsZXIiLCBOVUxMKSAhPQotCQkJCU5VTEwpIHsKLQkJCURCRygiIC0+IGdvdCBpdCAhXG4iKTsKLQkJCW1lbWNweShvdXRfaXJxLT5zcGVjaWZpZXIsIGludHNwZWMsCi0JCQkgICAgICAgaW50c2l6ZSAqIHNpemVvZih1MzIpKTsKLQkJCW91dF9pcnEtPnNpemUgPSBpbnRzaXplOwotCQkJb3V0X2lycS0+Y29udHJvbGxlciA9IGlwYXI7Ci0JCQlvZl9ub2RlX3B1dChvbGQpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQkvKiBOb3cgbG9vayBmb3IgYW4gaW50ZXJydXB0LW1hcCAqLwotCQlpbWFwID0gb2ZfZ2V0X3Byb3BlcnR5KGlwYXIsICJpbnRlcnJ1cHQtbWFwIiwgJmltYXBsZW4pOwotCQkvKiBObyBpbnRlcnJ1cHQgbWFwLCBjaGVjayBmb3IgYW4gaW50ZXJydXB0IHBhcmVudCAqLwotCQlpZiAoaW1hcCA9PSBOVUxMKSB7Ci0JCQlEQkcoIiAtPiBubyBtYXAsIGdldHRpbmcgcGFyZW50XG4iKTsKLQkJCW5ld3BhciA9IG9mX2lycV9maW5kX3BhcmVudChpcGFyKTsKLQkJCWdvdG8gc2tpcGxldmVsOwotCQl9Ci0JCWltYXBsZW4gLz0gc2l6ZW9mKHUzMik7Ci0KLQkJLyogTG9vayBmb3IgYSBtYXNrICovCi0JCWltYXNrID0gb2ZfZ2V0X3Byb3BlcnR5KGlwYXIsICJpbnRlcnJ1cHQtbWFwLW1hc2siLCBOVUxMKTsKLQotCQkvKiBJZiB3ZSB3ZXJlIHBhc3NlZCBubyAicmVnIiBwcm9wZXJ0eSBhbmQgd2UgYXR0ZW1wdCB0byBwYXJzZQotCQkgKiBhbiBpbnRlcnJ1cHQtbWFwLCB0aGVuICNhZGRyZXNzLWNlbGxzIG11c3QgYmUgMC4KLQkJICogRmFpbCBpZiBpdCdzIG5vdC4KLQkJICovCi0JCWlmIChhZGRyID09IE5VTEwgJiYgYWRkcnNpemUgIT0gMCkgewotCQkJREJHKCIgLT4gbm8gcmVnIHBhc3NlZCBpbiB3aGVuIG5lZWRlZCAhXG4iKTsKLQkJCWdvdG8gZmFpbDsKLQkJfQotCi0JCS8qIFBhcnNlIGludGVycnVwdC1tYXAgKi8KLQkJbWF0Y2ggPSAwOwotCQl3aGlsZSAoaW1hcGxlbiA+IChhZGRyc2l6ZSArIGludHNpemUgKyAxKSAmJiAhbWF0Y2gpIHsKLQkJCS8qIENvbXBhcmUgc3BlY2lmaWVycyAqLwotCQkJbWF0Y2ggPSAxOwotCQkJZm9yIChpID0gMDsgaSA8IGFkZHJzaXplICYmIG1hdGNoOyArK2kpIHsKLQkJCQl1MzIgbWFzayA9IGltYXNrID8gaW1hc2tbaV0gOiAweGZmZmZmZmZmdTsKLQkJCQltYXRjaCA9ICgoYWRkcltpXSBeIGltYXBbaV0pICYgbWFzaykgPT0gMDsKLQkJCX0KLQkJCWZvciAoOyBpIDwgKGFkZHJzaXplICsgaW50c2l6ZSkgJiYgbWF0Y2g7ICsraSkgewotCQkJCXUzMiBtYXNrID0gaW1hc2sgPyBpbWFza1tpXSA6IDB4ZmZmZmZmZmZ1OwotCQkJCW1hdGNoID0KLQkJCQkgICAoKGludHNwZWNbaS1hZGRyc2l6ZV0gXiBpbWFwW2ldKSAmIG1hc2spID09IDA7Ci0JCQl9Ci0JCQlpbWFwICs9IGFkZHJzaXplICsgaW50c2l6ZTsKLQkJCWltYXBsZW4gLT0gYWRkcnNpemUgKyBpbnRzaXplOwotCi0JCQlEQkcoIiAtPiBtYXRjaD0lZCAoaW1hcGxlbj0lZClcbiIsIG1hdGNoLCBpbWFwbGVuKTsKLQotCQkJLyogR2V0IHRoZSBpbnRlcnJ1cHQgcGFyZW50ICovCi0JCQlpZiAob2ZfaXJxX3dvcmthcm91bmRzICYgT0ZfSU1BUF9OT19QSEFORExFKQotCQkJCW5ld3BhciA9IG9mX25vZGVfZ2V0KG9mX2lycV9kZmx0X3BpYyk7Ci0JCQllbHNlCi0JCQkJbmV3cGFyID0gb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUoKHBoYW5kbGUpKmltYXApOwotCQkJaW1hcCsrOwotCQkJLS1pbWFwbGVuOwotCi0JCQkvKiBDaGVjayBpZiBub3QgZm91bmQgKi8KLQkJCWlmIChuZXdwYXIgPT0gTlVMTCkgewotCQkJCURCRygiIC0+IGltYXAgcGFyZW50IG5vdCBmb3VuZCAhXG4iKTsKLQkJCQlnb3RvIGZhaWw7Ci0JCQl9Ci0KLQkJCS8qIEdldCAjaW50ZXJydXB0LWNlbGxzIGFuZCAjYWRkcmVzcy1jZWxscyBvZiBuZXcKLQkJCSAqIHBhcmVudAotCQkJICovCi0JCQl0bXAgPSBvZl9nZXRfcHJvcGVydHkobmV3cGFyLCAiI2ludGVycnVwdC1jZWxscyIsIE5VTEwpOwotCQkJaWYgKHRtcCA9PSBOVUxMKSB7Ci0JCQkJREJHKCIgLT4gcGFyZW50IGxhY2tzICNpbnRlcnJ1cHQtY2VsbHMgIVxuIik7Ci0JCQkJZ290byBmYWlsOwotCQkJfQotCQkJbmV3aW50c2l6ZSA9ICp0bXA7Ci0JCQl0bXAgPSBvZl9nZXRfcHJvcGVydHkobmV3cGFyLCAiI2FkZHJlc3MtY2VsbHMiLCBOVUxMKTsKLQkJCW5ld2FkZHJzaXplID0gKHRtcCA9PSBOVUxMKSA/IDAgOiAqdG1wOwotCi0JCQlEQkcoIiAtPiBuZXdpbnRzaXplPSVkLCBuZXdhZGRyc2l6ZT0lZFxuIiwKLQkJCSAgICBuZXdpbnRzaXplLCBuZXdhZGRyc2l6ZSk7Ci0KLQkJCS8qIENoZWNrIGZvciBtYWxmb3JtZWQgcHJvcGVydGllcyAqLwotCQkJaWYgKGltYXBsZW4gPCAobmV3YWRkcnNpemUgKyBuZXdpbnRzaXplKSkKLQkJCQlnb3RvIGZhaWw7Ci0KLQkJCWltYXAgKz0gbmV3YWRkcnNpemUgKyBuZXdpbnRzaXplOwotCQkJaW1hcGxlbiAtPSBuZXdhZGRyc2l6ZSArIG5ld2ludHNpemU7Ci0KLQkJCURCRygiIC0+IGltYXBsZW49JWRcbiIsIGltYXBsZW4pOwotCQl9Ci0JCWlmICghbWF0Y2gpCi0JCQlnb3RvIGZhaWw7Ci0KLQkJb2Zfbm9kZV9wdXQob2xkKTsKLQkJb2xkID0gb2Zfbm9kZV9nZXQobmV3cGFyKTsKLQkJYWRkcnNpemUgPSBuZXdhZGRyc2l6ZTsKLQkJaW50c2l6ZSA9IG5ld2ludHNpemU7Ci0JCWludHNwZWMgPSBpbWFwIC0gaW50c2l6ZTsKLQkJYWRkciA9IGludHNwZWMgLSBhZGRyc2l6ZTsKLQotCXNraXBsZXZlbDoKLQkJLyogSXRlcmF0ZSBhZ2FpbiB3aXRoIG5ldyBwYXJlbnQgKi8KLQkJREJHKCIgLT4gbmV3IHBhcmVudDogJXNcbiIsIG5ld3BhciA/IG5ld3Bhci0+ZnVsbF9uYW1lIDogIjw+Iik7Ci0JCW9mX25vZGVfcHV0KGlwYXIpOwotCQlpcGFyID0gbmV3cGFyOwotCQluZXdwYXIgPSBOVUxMOwotCX0KLSBmYWlsOgotCW9mX25vZGVfcHV0KGlwYXIpOwotCW9mX25vZGVfcHV0KG9sZCk7Ci0Jb2Zfbm9kZV9wdXQobmV3cGFyKTsKLQotCXJldHVybiAtRUlOVkFMOwotfQotRVhQT1JUX1NZTUJPTF9HUEwob2ZfaXJxX21hcF9yYXcpOwotCi0jaWYgZGVmaW5lZChDT05GSUdfUFBDX1BNQUMpICYmIGRlZmluZWQoQ09ORklHX1BQQzMyKQotc3RhdGljIGludCBvZl9pcnFfbWFwX29sZHdvcmxkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlLCBpbnQgaW5kZXgsCi0JCQkgICAgICAgc3RydWN0IG9mX2lycSAqb3V0X2lycSkKLXsKLQljb25zdCB1MzIgKmludHMgPSBOVUxMOwotCWludCBpbnRsZW47Ci0KLQkvKgotCSAqIE9sZCBtYWNoaW5lcyBqdXN0IGhhdmUgYSBsaXN0IG9mIGludGVycnVwdCBudW1iZXJzCi0JICogYW5kIG5vIGludGVycnVwdC1jb250cm9sbGVyIG5vZGVzLiBXZSBhbHNvIGhhdmUgZG9kZ3kKLQkgKiBjYXNlcyB3aGVyZSB0aGUgQVBQTCxpbnRlcnJ1cHRzIHByb3BlcnR5IGlzIGNvbXBsZXRlbHkKLQkgKiBtaXNzaW5nIGJlaGluZCBwY2ktcGNpIGJyaWRnZXMgYW5kIHdlIGhhdmUgdG8gZ2V0IGl0Ci0JICogZnJvbSB0aGUgcGFyZW50ICh0aGUgYnJpZGdlIGl0c2VsZiwgYXMgYXBwbGUganVzdCB3aXJlZAotCSAqIGV2ZXJ5dGhpbmcgdG9nZXRoZXIgb24gdGhlc2UpCi0JICovCi0Jd2hpbGUgKGRldmljZSkgewotCQlpbnRzID0gb2ZfZ2V0X3Byb3BlcnR5KGRldmljZSwgIkFBUEwsaW50ZXJydXB0cyIsICZpbnRsZW4pOwotCQlpZiAoaW50cyAhPSBOVUxMKQotCQkJYnJlYWs7Ci0JCWRldmljZSA9IGRldmljZS0+cGFyZW50OwotCQlpZiAoZGV2aWNlICYmIHN0cmNtcChkZXZpY2UtPnR5cGUsICJwY2kiKSAhPSAwKQotCQkJYnJlYWs7Ci0JfQotCWlmIChpbnRzID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCWludGxlbiAvPSBzaXplb2YodTMyKTsKLQotCWlmIChpbmRleCA+PSBpbnRsZW4pCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jb3V0X2lycS0+Y29udHJvbGxlciA9IE5VTEw7Ci0Jb3V0X2lycS0+c3BlY2lmaWVyWzBdID0gaW50c1tpbmRleF07Ci0Jb3V0X2lycS0+c2l6ZSA9IDE7Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbHNlIC8qIGRlZmluZWQoQ09ORklHX1BQQ19QTUFDKSAmJiBkZWZpbmVkKENPTkZJR19QUEMzMikgKi8KLXN0YXRpYyBpbnQgb2ZfaXJxX21hcF9vbGR3b3JsZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSwgaW50IGluZGV4LAotCQkJICAgICAgIHN0cnVjdCBvZl9pcnEgKm91dF9pcnEpCi17Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0jZW5kaWYgLyogIShkZWZpbmVkKENPTkZJR19QUENfUE1BQykgJiYgZGVmaW5lZChDT05GSUdfUFBDMzIpKSAqLwotCi1pbnQgb2ZfaXJxX21hcF9vbmUoc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2UsIGludCBpbmRleCwgc3RydWN0IG9mX2lycSAqb3V0X2lycSkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnA7Ci0JY29uc3QgdTMyICppbnRzcGVjLCAqdG1wLCAqYWRkcjsKLQl1MzIgaW50c2l6ZSwgaW50bGVuOwotCWludCByZXMgPSAtRUlOVkFMOwotCi0JREJHKCJvZl9pcnFfbWFwX29uZTogZGV2PSVzLCBpbmRleD0lZFxuIiwgZGV2aWNlLT5mdWxsX25hbWUsIGluZGV4KTsKLQotCS8qIE9sZFdvcmxkIG1hYyBzdHVmZiBpcyAic3BlY2lhbCIsIGhhbmRsZSBvdXQgb2YgbGluZSAqLwotCWlmIChvZl9pcnFfd29ya2Fyb3VuZHMgJiBPRl9JTUFQX09MRFdPUkxEX01BQykKLQkJcmV0dXJuIG9mX2lycV9tYXBfb2xkd29ybGQoZGV2aWNlLCBpbmRleCwgb3V0X2lycSk7Ci0KLQkvKiBHZXQgdGhlIGludGVycnVwdHMgcHJvcGVydHkgKi8KLQlpbnRzcGVjID0gb2ZfZ2V0X3Byb3BlcnR5KGRldmljZSwgImludGVycnVwdHMiLCAmaW50bGVuKTsKLQlpZiAoaW50c3BlYyA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpbnRsZW4gLz0gc2l6ZW9mKHUzMik7Ci0KLQkvKiBHZXQgdGhlIHJlZyBwcm9wZXJ0eSAoaWYgYW55KSAqLwotCWFkZHIgPSBvZl9nZXRfcHJvcGVydHkoZGV2aWNlLCAicmVnIiwgTlVMTCk7Ci0KLQkvKiBMb29rIGZvciB0aGUgaW50ZXJydXB0IHBhcmVudC4gKi8KLQlwID0gb2ZfaXJxX2ZpbmRfcGFyZW50KGRldmljZSk7Ci0JaWYgKHAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBHZXQgc2l6ZSBvZiBpbnRlcnJ1cHQgc3BlY2lmaWVyICovCi0JdG1wID0gb2ZfZ2V0X3Byb3BlcnR5KHAsICIjaW50ZXJydXB0LWNlbGxzIiwgTlVMTCk7Ci0JaWYgKHRtcCA9PSBOVUxMKQotCQlnb3RvIG91dDsKLQlpbnRzaXplID0gKnRtcDsKLQotCURCRygiIGludHNpemU9JWQgaW50bGVuPSVkXG4iLCBpbnRzaXplLCBpbnRsZW4pOwotCi0JLyogQ2hlY2sgaW5kZXggKi8KLQlpZiAoKGluZGV4ICsgMSkgKiBpbnRzaXplID4gaW50bGVuKQotCQlnb3RvIG91dDsKLQotCS8qIEdldCBuZXcgc3BlY2lmaWVyIGFuZCBtYXAgaXQgKi8KLQlyZXMgPSBvZl9pcnFfbWFwX3JhdyhwLCBpbnRzcGVjICsgaW5kZXggKiBpbnRzaXplLCBpbnRzaXplLAotCQkJICAgICBhZGRyLCBvdXRfaXJxKTsKLW91dDoKLQlvZl9ub2RlX3B1dChwKTsKLQlyZXR1cm4gcmVzOwotfQotRVhQT1JUX1NZTUJPTF9HUEwob2ZfaXJxX21hcF9vbmUpOwotCiAvKioKICAqIFNlYXJjaCB0aGUgZGV2aWNlIHRyZWUgZm9yIHRoZSBiZXN0IE1BQyBhZGRyZXNzIHRvIHVzZS4gICdtYWMtYWRkcmVzcycgaXMKICAqIGNoZWNrZWQgZmlyc3QsIGJlY2F1c2UgdGhhdCBpcyBzdXBwb3NlZCB0byBjb250YWluIHRvICJtb3N0IHJlY2VudCIgTUFDCkBAIC0xMDUxLDI5ICsxNTUsMyBAQAogCXJldHVybiBOVUxMOwogfQogRVhQT1JUX1NZTUJPTChvZl9nZXRfbWFjX2FkZHJlc3MpOwotCi1pbnQgb2ZfaXJxX3RvX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCBpbnQgaW5kZXgsIHN0cnVjdCByZXNvdXJjZSAqcikKLXsKLQlpbnQgaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoZGV2LCBpbmRleCk7Ci0KLQkvKiBPbmx5IGRlcmVmZXJlbmNlIHRoZSByZXNvdXJjZSBpZiBib3RoIHRoZQotCSAqIHJlc291cmNlIGFuZCB0aGUgaXJxIGFyZSB2YWxpZC4gKi8KLQlpZiAociAmJiBpcnEgIT0gTk9fSVJRKSB7Ci0JCXItPnN0YXJ0ID0gci0+ZW5kID0gaXJxOwotCQlyLT5mbGFncyA9IElPUkVTT1VSQ0VfSVJROwotCX0KLQotCXJldHVybiBpcnE7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChvZl9pcnFfdG9fcmVzb3VyY2UpOwotCi12b2lkIF9faW9tZW0gKm9mX2lvbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGludCBpbmRleCkKLXsKLQlzdHJ1Y3QgcmVzb3VyY2UgcmVzOwotCi0JaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIGluZGV4LCAmcmVzKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gaW9yZW1hcChyZXMuc3RhcnQsIDEgKyByZXMuZW5kIC0gcmVzLnN0YXJ0KTsKLX0KLUVYUE9SVF9TWU1CT0wob2ZfaW9tYXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMKaW5kZXggN2EwYzAxOTkuLjExZjNjZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UuYwpAQCAtMzIsNiArMzIsOCBAQAogI2lmZGVmIENPTkZJR19QUEMzMgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2VuZGlmCisjaW5jbHVkZSA8bGludXgvaHdfYnJlYWtwb2ludC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTg2Niw5ICs4NjgsMzQgQEAKIAljbGVhcl90c2tfdGhyZWFkX2ZsYWcodGFzaywgVElGX1NJTkdMRVNURVApOwogfQogCisjaWZkZWYgQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVAordm9pZCBwdHJhY2VfdHJpZ2dlcmVkKHN0cnVjdCBwZXJmX2V2ZW50ICpicCwgaW50IG5taSwKKwkJICAgICAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cjsKKworCS8qCisJICogRGlzYWJsZSB0aGUgYnJlYWtwb2ludCByZXF1ZXN0IGhlcmUgc2luY2UgcHRyYWNlIGhhcyBkZWZpbmVkIGEKKwkgKiBvbmUtc2hvdCBiZWhhdmlvdXIgZm9yIGJyZWFrcG9pbnQgZXhjZXB0aW9ucyBpbiBQUEM2NC4KKwkgKiBUaGUgU0lHVFJBUCBzaWduYWwgaXMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZm9yIHVzIGluIGRvX2RhYnIoKS4KKwkgKiBXZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIGFib3V0IHRoYXQgaGVyZQorCSAqLworCWF0dHIgPSBicC0+YXR0cjsKKwlhdHRyLmRpc2FibGVkID0gdHJ1ZTsKKwltb2RpZnlfdXNlcl9od19icmVha3BvaW50KGJwLCAmYXR0cik7Cit9CisjZW5kaWYgLyogQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVCAqLworCiBpbnQgcHRyYWNlX3NldF9kZWJ1Z3JlZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGRhdGEpCiB7CisjaWZkZWYgQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVAorCWludCByZXQ7CisJc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnRocmVhZCA9ICYodGFzay0+dGhyZWFkKTsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqYnA7CisJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyOworI2VuZGlmIC8qIENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQgKi8KKwogCS8qIEZvciBwcGM2NCB3ZSBzdXBwb3J0IG9uZSBEQUJSIGFuZCBubyBJQUJSJ3MgYXQgdGhlIG1vbWVudCAocHBjNjQpLgogCSAqICBGb3IgZW1iZWRkZWQgcHJvY2Vzc29ycyB3ZSBzdXBwb3J0IG9uZSBEQUMgYW5kIG5vIElBQydzIGF0IHRoZQogCSAqICBtb21lbnQuCkBAIC04OTYsNiArOTIzLDQzIEBACiAJLyogRW5zdXJlIGJyZWFrcG9pbnQgdHJhbnNsYXRpb24gYml0IGlzIHNldCAqLwogCWlmIChkYXRhICYmICEoZGF0YSAmIERBQlJfVFJBTlNMQVRJT04pKQogCQlyZXR1cm4gLUVJTzsKKyNpZmRlZiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UCisJYnAgPSB0aHJlYWQtPnB0cmFjZV9icHNbMF07CisJaWYgKCghZGF0YSkgfHwgIShkYXRhICYgKERBQlJfREFUQV9XUklURSB8IERBQlJfREFUQV9SRUFEKSkpIHsKKwkJaWYgKGJwKSB7CisJCQl1bnJlZ2lzdGVyX2h3X2JyZWFrcG9pbnQoYnApOworCQkJdGhyZWFkLT5wdHJhY2VfYnBzWzBdID0gTlVMTDsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJaWYgKGJwKSB7CisJCWF0dHIgPSBicC0+YXR0cjsKKwkJYXR0ci5icF9hZGRyID0gZGF0YSAmIH5IV19CUkVBS1BPSU5UX0FMSUdOOworCQlhcmNoX2JwX2dlbmVyaWNfZmllbGRzKGRhdGEgJgorCQkJCQkoREFCUl9EQVRBX1dSSVRFIHwgREFCUl9EQVRBX1JFQUQpLAorCQkJCQkJCSZhdHRyLmJwX3R5cGUpOworCQlyZXQgPSAgbW9kaWZ5X3VzZXJfaHdfYnJlYWtwb2ludChicCwgJmF0dHIpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJdGhyZWFkLT5wdHJhY2VfYnBzWzBdID0gYnA7CisJCXRocmVhZC0+ZGFiciA9IGRhdGE7CisJCXJldHVybiAwOworCX0KKworCS8qIENyZWF0ZSBhIG5ldyBicmVha3BvaW50IHJlcXVlc3QgaWYgb25lIGRvZXNuJ3QgZXhpc3QgYWxyZWFkeSAqLworCWh3X2JyZWFrcG9pbnRfaW5pdCgmYXR0cik7CisJYXR0ci5icF9hZGRyID0gZGF0YSAmIH5IV19CUkVBS1BPSU5UX0FMSUdOOworCWFyY2hfYnBfZ2VuZXJpY19maWVsZHMoZGF0YSAmIChEQUJSX0RBVEFfV1JJVEUgfCBEQUJSX0RBVEFfUkVBRCksCisJCQkJCQkJCSZhdHRyLmJwX3R5cGUpOworCisJdGhyZWFkLT5wdHJhY2VfYnBzWzBdID0gYnAgPSByZWdpc3Rlcl91c2VyX2h3X2JyZWFrcG9pbnQoJmF0dHIsCisJCQkJCQkJcHRyYWNlX3RyaWdnZXJlZCwgdGFzayk7CisJaWYgKElTX0VSUihicCkpIHsKKwkJdGhyZWFkLT5wdHJhY2VfYnBzWzBdID0gTlVMTDsKKwkJcmV0dXJuIFBUUl9FUlIoYnApOworCX0KKworI2VuZGlmIC8qIENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQgKi8KIAogCS8qIE1vdmUgY29udGVudHMgdG8gdGhlIERBQlIgcmVnaXN0ZXIgKi8KIAl0YXNrLT50aHJlYWQuZGFiciA9IGRhdGE7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jCmluZGV4IDBlMWVjNmYuLjQxMDQ4ZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CkBAIC00NywxNCArNDcsNiBAQAogfTsKIEVYUE9SVF9TWU1CT0wocnRhcyk7CiAKLXN0cnVjdCBydGFzX3N1c3BlbmRfbWVfZGF0YSB7Ci0JYXRvbWljX3Qgd29ya2luZzsgLyogbnVtYmVyIG9mIGNwdXMgYWNjZXNzaW5nIHRoaXMgc3RydWN0ICovCi0JYXRvbWljX3QgZG9uZTsKLQlpbnQgdG9rZW47IC8qIGlibSxzdXNwZW5kLW1lICovCi0JaW50IGVycm9yOwotCXN0cnVjdCBjb21wbGV0aW9uICpjb21wbGV0ZTsgLyogd2FpdCBvbiB0aGlzIHVudGlsIHdvcmtpbmcgPT0gMCAqLwotfTsKLQogREVGSU5FX1NQSU5MT0NLKHJ0YXNfZGF0YV9idWZfbG9jayk7CiBFWFBPUlRfU1lNQk9MKHJ0YXNfZGF0YV9idWZfbG9jayk7CiAKQEAgLTcxNCwxNCArNzA2LDUzIEBACiAKIHN0YXRpYyBpbnQgaWJtX3N1c3BlbmRfbWVfdG9rZW4gPSBSVEFTX1VOS05PV05fU0VSVklDRTsKICNpZmRlZiBDT05GSUdfUFBDX1BTRVJJRVMKLXN0YXRpYyB2b2lkIHJ0YXNfcGVyY3B1X3N1c3BlbmRfbWUodm9pZCAqaW5mbykKK3N0YXRpYyBpbnQgX19ydGFzX3N1c3BlbmRfbGFzdF9jcHUoc3RydWN0IHJ0YXNfc3VzcGVuZF9tZV9kYXRhICpkYXRhLCBpbnQgd2FrZV93aGVuX2RvbmUpCit7CisJdTE2IHNsYl9zaXplID0gbW11X3NsYl9zaXplOworCWludCByYyA9IEhfTVVMVElfVEhSRUFEU19BQ1RJVkU7CisJaW50IGNwdTsKKworCXNsYl9zZXRfc2l6ZShTTEJfTUlOX1NJWkUpOworCXByaW50ayhLRVJOX0RFQlVHICJjYWxsaW5nIGlibSxzdXNwZW5kLW1lIG9uIGNwdSAlaVxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKworCXdoaWxlIChyYyA9PSBIX01VTFRJX1RIUkVBRFNfQUNUSVZFICYmICFhdG9taWNfcmVhZCgmZGF0YS0+ZG9uZSkgJiYKKwkgICAgICAgIWF0b21pY19yZWFkKCZkYXRhLT5lcnJvcikpCisJCXJjID0gcnRhc19jYWxsKGRhdGEtPnRva2VuLCAwLCAxLCBOVUxMKTsKKworCWlmIChyYyB8fCBhdG9taWNfcmVhZCgmZGF0YS0+ZXJyb3IpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJpYm0sc3VzcGVuZC1tZSByZXR1cm5lZCAlZFxuIiwgcmMpOworCQlzbGJfc2V0X3NpemUoc2xiX3NpemUpOworCX0KKworCWlmIChhdG9taWNfcmVhZCgmZGF0YS0+ZXJyb3IpKQorCQlyYyA9IGF0b21pY19yZWFkKCZkYXRhLT5lcnJvcik7CisKKwlhdG9taWNfc2V0KCZkYXRhLT5lcnJvciwgcmMpOworCisJaWYgKHdha2Vfd2hlbl9kb25lKSB7CisJCWF0b21pY19zZXQoJmRhdGEtPmRvbmUsIDEpOworCisJCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQorCQkJcGxwYXJfaGNhbGxfbm9yZXRzKEhfUFJPRCwgZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChjcHUpKTsKKwl9CisKKwlpZiAoYXRvbWljX2RlY19yZXR1cm4oJmRhdGEtPndvcmtpbmcpID09IDApCisJCWNvbXBsZXRlKGRhdGEtPmNvbXBsZXRlKTsKKworCXJldHVybiByYzsKK30KKworaW50IHJ0YXNfc3VzcGVuZF9sYXN0X2NwdShzdHJ1Y3QgcnRhc19zdXNwZW5kX21lX2RhdGEgKmRhdGEpCit7CisJYXRvbWljX2luYygmZGF0YS0+d29ya2luZyk7CisJcmV0dXJuIF9fcnRhc19zdXNwZW5kX2xhc3RfY3B1KGRhdGEsIDApOworfQorCitzdGF0aWMgaW50IF9fcnRhc19zdXNwZW5kX2NwdShzdHJ1Y3QgcnRhc19zdXNwZW5kX21lX2RhdGEgKmRhdGEsIGludCB3YWtlX3doZW5fZG9uZSkKIHsKIAlsb25nIHJjID0gSF9TVUNDRVNTOwogCXVuc2lnbmVkIGxvbmcgbXNyX3NhdmU7Ci0JdTE2IHNsYl9zaXplID0gbW11X3NsYl9zaXplOwogCWludCBjcHU7Ci0Jc3RydWN0IHJ0YXNfc3VzcGVuZF9tZV9kYXRhICpkYXRhID0KLQkJKHN0cnVjdCBydGFzX3N1c3BlbmRfbWVfZGF0YSAqKWluZm87CiAKIAlhdG9taWNfaW5jKCZkYXRhLT53b3JraW5nKTsKIApAQCAtNzI5LDcgKzc2MCw3IEBACiAJbXNyX3NhdmUgPSBtZm1zcigpOwogCW10bXNyKG1zcl9zYXZlICYgfihNU1JfRUUpKTsKIAotCXdoaWxlIChyYyA9PSBIX1NVQ0NFU1MgJiYgIWF0b21pY19yZWFkKCZkYXRhLT5kb25lKSkKKwl3aGlsZSAocmMgPT0gSF9TVUNDRVNTICYmICFhdG9taWNfcmVhZCgmZGF0YS0+ZG9uZSkgJiYgIWF0b21pY19yZWFkKCZkYXRhLT5lcnJvcikpCiAJCXJjID0gcGxwYXJfaGNhbGxfbm9yZXRzKEhfSk9JTik7CiAKIAltdG1zcihtc3Jfc2F2ZSk7CkBAIC03NDEsMzMgKzc3MiwzNyBAQAogCQkvKiBBbGwgb3RoZXIgY3B1cyBhcmUgaW4gSF9KT0lOLCB0aGlzIGNwdSBkb2VzCiAJCSAqIHRoZSBzdXNwZW5kLgogCQkgKi8KLQkJc2xiX3NldF9zaXplKFNMQl9NSU5fU0laRSk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJjYWxsaW5nIGlibSxzdXNwZW5kLW1lIG9uIGNwdSAlaVxuIiwKLQkJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JCWRhdGEtPmVycm9yID0gcnRhc19jYWxsKGRhdGEtPnRva2VuLCAwLCAxLCBOVUxMKTsKLQotCQlpZiAoZGF0YS0+ZXJyb3IpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJpYm0sc3VzcGVuZC1tZSByZXR1cm5lZCAlZFxuIiwKLQkJCSAgICAgICBkYXRhLT5lcnJvcik7Ci0JCQlzbGJfc2V0X3NpemUoc2xiX3NpemUpOwotCQl9CisJCXJldHVybiBfX3J0YXNfc3VzcGVuZF9sYXN0X2NwdShkYXRhLCB3YWtlX3doZW5fZG9uZSk7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJIX0pPSU4gb24gY3B1ICVpIGZhaWxlZCB3aXRoIHJjID0gJWxkXG4iLAogCQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLCByYyk7Ci0JCWRhdGEtPmVycm9yID0gcmM7CisJCWF0b21pY19zZXQoJmRhdGEtPmVycm9yLCByYyk7CiAJfQogCi0JYXRvbWljX3NldCgmZGF0YS0+ZG9uZSwgMSk7CisJaWYgKHdha2Vfd2hlbl9kb25lKSB7CisJCWF0b21pY19zZXQoJmRhdGEtPmRvbmUsIDEpOwogCi0JLyogVGhpcyBjcHUgZGlkIHRoZSBzdXNwZW5kIG9yIGdvdCBhbiBlcnJvcjsgaW4gZWl0aGVyIGNhc2UsCi0JICogd2UgbmVlZCB0byBwcm9kIGFsbCBvdGhlciBvdGhlciBjcHVzIG91dCBvZiBqb2luIHN0YXRlLgotCSAqIEV4dHJhIHByb2RzIGFyZSBoYXJtbGVzcy4KLQkgKi8KLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJcGxwYXJfaGNhbGxfbm9yZXRzKEhfUFJPRCwgZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChjcHUpKTsKKwkJLyogVGhpcyBjcHUgZGlkIHRoZSBzdXNwZW5kIG9yIGdvdCBhbiBlcnJvcjsgaW4gZWl0aGVyIGNhc2UsCisJCSAqIHdlIG5lZWQgdG8gcHJvZCBhbGwgb3RoZXIgb3RoZXIgY3B1cyBvdXQgb2Ygam9pbiBzdGF0ZS4KKwkJICogRXh0cmEgcHJvZHMgYXJlIGhhcm1sZXNzLgorCQkgKi8KKwkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCisJCQlwbHBhcl9oY2FsbF9ub3JldHMoSF9QUk9ELCBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGNwdSkpOworCX0KIG91dDoKIAlpZiAoYXRvbWljX2RlY19yZXR1cm4oJmRhdGEtPndvcmtpbmcpID09IDApCiAJCWNvbXBsZXRlKGRhdGEtPmNvbXBsZXRlKTsKKwlyZXR1cm4gcmM7Cit9CisKK2ludCBydGFzX3N1c3BlbmRfY3B1KHN0cnVjdCBydGFzX3N1c3BlbmRfbWVfZGF0YSAqZGF0YSkKK3sKKwlyZXR1cm4gX19ydGFzX3N1c3BlbmRfY3B1KGRhdGEsIDApOworfQorCitzdGF0aWMgdm9pZCBydGFzX3BlcmNwdV9zdXNwZW5kX21lKHZvaWQgKmluZm8pCit7CisJX19ydGFzX3N1c3BlbmRfY3B1KChzdHJ1Y3QgcnRhc19zdXNwZW5kX21lX2RhdGEgKilpbmZvLCAxKTsKIH0KIAogc3RhdGljIGludCBydGFzX2libV9zdXNwZW5kX21lKHN0cnVjdCBydGFzX2FyZ3MgKmFyZ3MpCkBAIC04MDIsMjIgKzgzNywyMiBAQAogCiAJYXRvbWljX3NldCgmZGF0YS53b3JraW5nLCAwKTsKIAlhdG9taWNfc2V0KCZkYXRhLmRvbmUsIDApOworCWF0b21pY19zZXQoJmRhdGEuZXJyb3IsIDApOwogCWRhdGEudG9rZW4gPSBydGFzX3Rva2VuKCJpYm0sc3VzcGVuZC1tZSIpOwotCWRhdGEuZXJyb3IgPSAwOwogCWRhdGEuY29tcGxldGUgPSAmZG9uZTsKIAogCS8qIENhbGwgZnVuY3Rpb24gb24gYWxsIENQVXMuICBPbmUgb2YgdXMgd2lsbCBtYWtlIHRoZQogCSAqIHJ0YXMgY2FsbAogCSAqLwogCWlmIChvbl9lYWNoX2NwdShydGFzX3BlcmNwdV9zdXNwZW5kX21lLCAmZGF0YSwgMCkpCi0JCWRhdGEuZXJyb3IgPSAtRUlOVkFMOworCQlhdG9taWNfc2V0KCZkYXRhLmVycm9yLCAtRUlOVkFMKTsKIAogCXdhaXRfZm9yX2NvbXBsZXRpb24oJmRvbmUpOwogCi0JaWYgKGRhdGEuZXJyb3IgIT0gMCkKKwlpZiAoYXRvbWljX3JlYWQoJmRhdGEuZXJyb3IpICE9IDApCiAJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgZG9pbmcgZ2xvYmFsIGpvaW5cbiIpOwogCi0JcmV0dXJuIGRhdGEuZXJyb3I7CisJcmV0dXJuIGF0b21pY19yZWFkKCZkYXRhLmVycm9yKTsKIH0KICNlbHNlIC8qIENPTkZJR19QUENfUFNFUklFUyAqLwogc3RhdGljIGludCBydGFzX2libV9zdXNwZW5kX21lKHN0cnVjdCBydGFzX2FyZ3MgKmFyZ3MpCkBAIC05MzQsMTEgKzk2OSwxMSBAQAogCSAqLwogI2lmZGVmIENPTkZJR19QUEM2NAogCWlmIChtYWNoaW5lX2lzKHBzZXJpZXMpICYmIGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpIHsKLQkJcnRhc19yZWdpb24gPSBtaW4obG1iLnJtb19zaXplLCBSVEFTX0lOU1RBTlRJQVRFX01BWCk7CisJCXJ0YXNfcmVnaW9uID0gbWluKG1lbWJsb2NrLnJtb19zaXplLCBSVEFTX0lOU1RBTlRJQVRFX01BWCk7CiAJCWlibV9zdXNwZW5kX21lX3Rva2VuID0gcnRhc190b2tlbigiaWJtLHN1c3BlbmQtbWUiKTsKIAl9CiAjZW5kaWYKLQlydGFzX3Jtb19idWYgPSBsbWJfYWxsb2NfYmFzZShSVEFTX1JNT0JVRl9NQVgsIFBBR0VfU0laRSwgcnRhc19yZWdpb24pOworCXJ0YXNfcm1vX2J1ZiA9IG1lbWJsb2NrX2FsbG9jX2Jhc2UoUlRBU19STU9CVUZfTUFYLCBQQUdFX1NJWkUsIHJ0YXNfcmVnaW9uKTsKIAogI2lmZGVmIENPTkZJR19SVEFTX0VSUk9SX0xPR0dJTkcKIAlydGFzX2xhc3RfZXJyb3JfdG9rZW4gPSBydGFzX3Rva2VuKCJydGFzLWxhc3QtZXJyb3IiKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCmluZGV4IDVlNGQ4NTIuLjE1YWRlMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYwpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgotI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgorI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vcGFjYS5oPgpAQCAtOTQsNiArOTQsMTAgQEAKIAkub3JpZ192aWRlb19wb2ludHMgPSAxNgogfTsKIAorLyogVmFyaWFibGVzIHJlcXVpcmVkIHRvIHN0b3JlIGxlZ2FjeSBJTyBpcnEgcm91dGluZyAqLworaW50IG9mX2k4MDQyX2tiZF9pcnE7CitpbnQgb2ZfaTgwNDJfYXV4X2lycTsKKwogI2lmZGVmIF9fRE9fSVJRX0NBTk9OCiAvKiBYWFggc2hvdWxkIGdvIGVsc2V3aGVyZSBldmVudHVhbGx5ICovCiBpbnQgcHBjX2RvX2Nhbm9uaWNhbGl6ZV9pcnFzOwpAQCAtNTc1LDYgKzU3OSwxNSBAQAogCQkJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAicG5wUE5QLGYwMyIpOwogCQlpZiAobnApIHsKIAkJCXBhcmVudCA9IG9mX2dldF9wYXJlbnQobnApOworCisJCQlvZl9pODA0Ml9rYmRfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAocGFyZW50LCAwKTsKKwkJCWlmICghb2ZfaTgwNDJfa2JkX2lycSkKKwkJCQlvZl9pODA0Ml9rYmRfaXJxID0gMTsKKworCQkJb2ZfaTgwNDJfYXV4X2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKHBhcmVudCwgMSk7CisJCQlpZiAoIW9mX2k4MDQyX2F1eF9pcnEpCisJCQkJb2ZfaTgwNDJfYXV4X2lycSA9IDEyOworCiAJCQlvZl9ub2RlX3B1dChucCk7CiAJCQlucCA9IHBhcmVudDsKIAkJCWJyZWFrOwpAQCAtNzAxLDE2ICs3MTQsOSBAQAogCS5wcmlvcml0eSA9IElOVF9NQVgsCiB9OwogCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBwY19kZmx0X29mX2J1c19ub3RpZmllciA9IHsKLQkubm90aWZpZXJfY2FsbCA9IHBwY19kZmx0X2J1c19ub3RpZnksCi0JLnByaW9yaXR5ID0gSU5UX01BWCwKLX07Ci0KIHN0YXRpYyBpbnQgX19pbml0IHNldHVwX2J1c19ub3RpZmllcih2b2lkKQogewogCWJ1c19yZWdpc3Rlcl9ub3RpZmllcigmcGxhdGZvcm1fYnVzX3R5cGUsICZwcGNfZGZsdF9wbGF0X2J1c19ub3RpZmllcik7Ci0JYnVzX3JlZ2lzdGVyX25vdGlmaWVyKCZvZl9wbGF0Zm9ybV9idXNfdHlwZSwgJnBwY19kZmx0X29mX2J1c19ub3RpZmllcik7Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF8zMi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF8zMi5jCmluZGV4IDdkODRiMjEuLmExMGZmYzggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMKQEAgLTE2LDcgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9sbWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KQEAgLTI0NiwxMiArMjQ2LDEyIEBACiAJdW5zaWduZWQgaW50IGk7CiAKIAkvKiBpbnRlcnJ1cHQgc3RhY2tzIG11c3QgYmUgaW4gbG93bWVtLCB3ZSBnZXQgdGhhdCBmb3IgZnJlZSBvbiBwcGMzMgotCSAqIGFzIHRoZSBsbWIgaXMgbGltaXRlZCB0byBsb3dtZW0gYnkgTE1CX1JFQUxfTElNSVQgKi8KKwkgKiBhcyB0aGUgbWVtYmxvY2sgaXMgbGltaXRlZCB0byBsb3dtZW0gYnkgTUVNQkxPQ0tfUkVBTF9MSU1JVCAqLwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXNvZnRpcnFfY3R4W2ldID0gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKQotCQkJX192YShsbWJfYWxsb2MoVEhSRUFEX1NJWkUsIFRIUkVBRF9TSVpFKSk7CisJCQlfX3ZhKG1lbWJsb2NrX2FsbG9jKFRIUkVBRF9TSVpFLCBUSFJFQURfU0laRSkpOwogCQloYXJkaXJxX2N0eFtpXSA9IChzdHJ1Y3QgdGhyZWFkX2luZm8gKikKLQkJCV9fdmEobG1iX2FsbG9jKFRIUkVBRF9TSVpFLCBUSFJFQURfU0laRSkpOworCQkJX192YShtZW1ibG9ja19hbGxvYyhUSFJFQURfU0laRSwgVEhSRUFEX1NJWkUpKTsKIAl9CiB9CiAKQEAgLTI2MSwxNSArMjYxLDE1IEBACiAJdW5zaWduZWQgaW50IGk7CiAKIAkvKiBpbnRlcnJ1cHQgc3RhY2tzIG11c3QgYmUgaW4gbG93bWVtLCB3ZSBnZXQgdGhhdCBmb3IgZnJlZSBvbiBwcGMzMgotCSAqIGFzIHRoZSBsbWIgaXMgbGltaXRlZCB0byBsb3dtZW0gYnkgTE1CX1JFQUxfTElNSVQgKi8KKwkgKiBhcyB0aGUgbWVtYmxvY2sgaXMgbGltaXRlZCB0byBsb3dtZW0gYnkgTUVNQkxPQ0tfUkVBTF9MSU1JVCAqLwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCWNyaXRpcnFfY3R4W2ldID0gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKQotCQkJX192YShsbWJfYWxsb2MoVEhSRUFEX1NJWkUsIFRIUkVBRF9TSVpFKSk7CisJCQlfX3ZhKG1lbWJsb2NrX2FsbG9jKFRIUkVBRF9TSVpFLCBUSFJFQURfU0laRSkpOwogI2lmZGVmIENPTkZJR19CT09LRQogCQlkYmdpcnFfY3R4W2ldID0gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKQotCQkJX192YShsbWJfYWxsb2MoVEhSRUFEX1NJWkUsIFRIUkVBRF9TSVpFKSk7CisJCQlfX3ZhKG1lbWJsb2NrX2FsbG9jKFRIUkVBRF9TSVpFLCBUSFJFQURfU0laRSkpOwogCQltY2hlY2tpcnFfY3R4W2ldID0gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKQotCQkJX192YShsbWJfYWxsb2MoVEhSRUFEX1NJWkUsIFRIUkVBRF9TSVpFKSk7CisJCQlfX3ZhKG1lbWJsb2NrX2FsbG9jKFRIUkVBRF9TSVpFLCBUSFJFQURfU0laRSkpOwogI2VuZGlmCiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCmluZGV4IDY0M2RjYWMuLjFiZWU0YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgotI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgorI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2tkdW1wLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KQEAgLTE0MiwyMyArMTQyLDEzIEBACiAjZGVmaW5lIGNoZWNrX3NtdF9lbmFibGVkKCkKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKLS8qIFB1dCB0aGUgcGFjYSBwb2ludGVyIGludG8gcjEzIGFuZCBTUFJHX1BBQ0EgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9wYWNhKHN0cnVjdCBwYWNhX3N0cnVjdCAqbmV3X3BhY2EpCi17Ci0JbG9jYWxfcGFjYSA9IG5ld19wYWNhOwotCW10c3ByKFNQUk5fU1BSR19QQUNBLCBsb2NhbF9wYWNhKTsKLSNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQotCW10c3ByKFNQUk5fU1BSR19UTEJfRVhGUkFNRSwgbG9jYWxfcGFjYS0+ZXh0bGIpOwotI2VuZGlmCi19Ci0KIC8qCiAgKiBFYXJseSBpbml0aWFsaXphdGlvbiBlbnRyeSBwb2ludC4gVGhpcyBpcyBjYWxsZWQgYnkgaGVhZC5TCiAgKiB3aXRoIE1NVSB0cmFuc2xhdGlvbiBkaXNhYmxlZC4gV2UgcmVseSBvbiB0aGUgImZlYXR1cmUiIG9mCiAgKiB0aGUgQ1BVIHRoYXQgaWdub3JlcyB0aGUgdG9wIDIgYml0cyBvZiB0aGUgYWRkcmVzcyBpbiByZWFsCiAgKiBtb2RlIHNvIHdlIGNhbiBhY2Nlc3Mga2VybmVsIGdsb2JhbHMgbm9ybWFsbHkgcHJvdmlkZWQgd2UKICAqIG9ubHkgdG95IHdpdGggdGhpbmdzIGluIHRoZSBSTU8gcmVnaW9uLiBGcm9tIGhlcmUsIHdlIGRvCi0gKiBzb21lIGVhcmx5IHBhcnNpbmcgb2YgdGhlIGRldmljZS10cmVlIHRvIHNldHVwIG91dCBMTUIKKyAqIHNvbWUgZWFybHkgcGFyc2luZyBvZiB0aGUgZGV2aWNlLXRyZWUgdG8gc2V0dXAgb3V0IE1FTUJMT0NLCiAgKiBkYXRhIHN0cnVjdHVyZXMsIGFuZCBhbGxvY2F0ZSAmIGluaXRpYWxpemUgdGhlIGhhc2ggdGFibGUKICAqIGFuZCBzZWdtZW50IHRhYmxlcyBzbyB3ZSBjYW4gc3RhcnQgcnVubmluZyB3aXRoIHRyYW5zbGF0aW9uCiAgKiBlbmFibGVkLgpAQCAtNDA0LDcgKzM5NCw3IEBACiAKIAlwcmludGsoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIAlwcmludGsoInBwYzY0X3BmdF9zaXplICAgICAgICAgICAgICAgID0gMHglbGx4XG4iLCBwcGM2NF9wZnRfc2l6ZSk7Ci0JcHJpbnRrKCJwaHlzaWNhbE1lbW9yeVNpemUgICAgICAgICAgICA9IDB4JWxseFxuIiwgbG1iX3BoeXNfbWVtX3NpemUoKSk7CisJcHJpbnRrKCJwaHlzaWNhbE1lbW9yeVNpemUgICAgICAgICAgICA9IDB4JWxseFxuIiwgbWVtYmxvY2tfcGh5c19tZW1fc2l6ZSgpKTsKIAlpZiAocHBjNjRfY2FjaGVzLmRsaW5lX3NpemUgIT0gMHg4MCkKIAkJcHJpbnRrKCJwcGM2NF9jYWNoZXMuZGNhY2hlX2xpbmVfc2l6ZSA9IDB4JXhcbiIsCiAJCSAgICAgICBwcGM2NF9jYWNoZXMuZGxpbmVfc2l6ZSk7CkBAIC00NDMsMTAgKzQzMywxMCBAQAogCSAqLwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXNvZnRpcnFfY3R4W2ldID0gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKQotCQkJX192YShsbWJfYWxsb2NfYmFzZShUSFJFQURfU0laRSwKKwkJCV9fdmEobWVtYmxvY2tfYWxsb2NfYmFzZShUSFJFQURfU0laRSwKIAkJCQkJICAgIFRIUkVBRF9TSVpFLCBsaW1pdCkpOwogCQloYXJkaXJxX2N0eFtpXSA9IChzdHJ1Y3QgdGhyZWFkX2luZm8gKikKLQkJCV9fdmEobG1iX2FsbG9jX2Jhc2UoVEhSRUFEX1NJWkUsCisJCQlfX3ZhKG1lbWJsb2NrX2FsbG9jX2Jhc2UoVEhSRUFEX1NJWkUsCiAJCQkJCSAgICBUSFJFQURfU0laRSwgbGltaXQpKTsKIAl9CiB9CkBAIC00NTgsMTEgKzQ0OCwxMSBAQAogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJY3JpdGlycV9jdHhbaV0gPSAoc3RydWN0IHRocmVhZF9pbmZvICopCi0JCQlfX3ZhKGxtYl9hbGxvYyhUSFJFQURfU0laRSwgVEhSRUFEX1NJWkUpKTsKKwkJCV9fdmEobWVtYmxvY2tfYWxsb2MoVEhSRUFEX1NJWkUsIFRIUkVBRF9TSVpFKSk7CiAJCWRiZ2lycV9jdHhbaV0gPSAoc3RydWN0IHRocmVhZF9pbmZvICopCi0JCQlfX3ZhKGxtYl9hbGxvYyhUSFJFQURfU0laRSwgVEhSRUFEX1NJWkUpKTsKKwkJCV9fdmEobWVtYmxvY2tfYWxsb2MoVEhSRUFEX1NJWkUsIFRIUkVBRF9TSVpFKSk7CiAJCW1jaGVja2lycV9jdHhbaV0gPSAoc3RydWN0IHRocmVhZF9pbmZvICopCi0JCQlfX3ZhKGxtYl9hbGxvYyhUSFJFQURfU0laRSwgVEhSRUFEX1NJWkUpKTsKKwkJCV9fdmEobWVtYmxvY2tfYWxsb2MoVEhSRUFEX1NJWkUsIFRIUkVBRF9TSVpFKSk7CiAJfQogfQogI2Vsc2UKQEAgLTQ4NywxMSArNDc3LDExIEBACiAJICogYnJpbmd1cCwgd2UgbmVlZCB0byBnZXQgYXQgdGhlbSBpbiByZWFsIG1vZGUuIFRoaXMgbWVhbnMgdGhleQogCSAqIG11c3QgYWxzbyBiZSB3aXRoaW4gdGhlIFJNTyByZWdpb24uCiAJICovCi0JbGltaXQgPSBtaW4oc2xiMF9saW1pdCgpLCBsbWIucm1vX3NpemUpOworCWxpbWl0ID0gbWluKHNsYjBfbGltaXQoKSwgbWVtYmxvY2sucm1vX3NpemUpOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJdW5zaWduZWQgbG9uZyBzcDsKLQkJc3AgID0gbG1iX2FsbG9jX2Jhc2UoVEhSRUFEX1NJWkUsIFRIUkVBRF9TSVpFLCBsaW1pdCk7CisJCXNwICA9IG1lbWJsb2NrX2FsbG9jX2Jhc2UoVEhSRUFEX1NJWkUsIFRIUkVBRF9TSVpFLCBsaW1pdCk7CiAJCXNwICs9IFRIUkVBRF9TSVpFOwogCQlwYWNhW2ldLmVtZXJnZW5jeV9zcCA9IF9fdmEoc3ApOwogCX0KQEAgLTYwMCw2ICs1OTAsOSBAQAogCQlyZXR1cm4gUkVNT1RFX0RJU1RBTkNFOwogfQogCit1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9vZmZzZXRbTlJfQ1BVU10gX19yZWFkX21vc3RseTsKK0VYUE9SVF9TWU1CT0woX19wZXJfY3B1X29mZnNldCk7CisKIHZvaWQgX19pbml0IHNldHVwX3Blcl9jcHVfYXJlYXModm9pZCkKIHsKIAljb25zdCBzaXplX3QgZHluX3NpemUgPSBQRVJDUFVfTU9EVUxFX1JFU0VSVkUgKyBQRVJDUFVfRFlOQU1JQ19SRVNFUlZFOwpAQCAtNjI0LDggKzYxNywxMCBAQAogCQlwYW5pYygiY2Fubm90IGluaXRpYWxpemUgcGVyY3B1IGFyZWEgKGVycj0lZCkiLCByYyk7CiAKIAlkZWx0YSA9ICh1bnNpZ25lZCBsb25nKXBjcHVfYmFzZV9hZGRyIC0gKHVuc2lnbmVkIGxvbmcpX19wZXJfY3B1X3N0YXJ0OwotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCi0JCXBhY2FbY3B1XS5kYXRhX29mZnNldCA9IGRlbHRhICsgcGNwdV91bml0X29mZnNldHNbY3B1XTsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisgICAgICAgICAgICAgICAgX19wZXJfY3B1X29mZnNldFtjcHVdID0gZGVsdGEgKyBwY3B1X3VuaXRfb2Zmc2V0c1tjcHVdOworCQlwYWNhW2NwdV0uZGF0YV9vZmZzZXQgPSBfX3Blcl9jcHVfb2Zmc2V0W2NwdV07CisJfQogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbC5jCmluZGV4IGEwYWZiNTUuLjcxMDlmNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWwuYwpAQCAtMTEsNiArMTEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHJhY2Vob29rLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8YXNtL2h3X2JyZWFrcG9pbnQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIApAQCAtMTQ5LDYgKzE1MCw4IEBACiAJaWYgKGN1cnJlbnQtPnRocmVhZC5kYWJyKQogCQlzZXRfZGFicihjdXJyZW50LT50aHJlYWQuZGFicik7CiAjZW5kaWYKKwkvKiBSZS1lbmFibGUgdGhlIGJyZWFrcG9pbnRzIGZvciB0aGUgc2lnbmFsIHN0YWNrICovCisJdGhyZWFkX2NoYW5nZV9wYyhjdXJyZW50LCByZWdzKTsKIAogCWlmIChpczMyKSB7CiAgICAgICAgIAlpZiAoa2Euc2Euc2FfZmxhZ3MgJiBTQV9TSUdJTkZPKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMKaW5kZXggNWMxOTZkMS4uYTYxYjNkZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jCkBAIC0yODgsOCArMjg4LDYgQEAKIAkJCW1heF9jcHVzID0gTlJfQ1BVUzsKIAllbHNlCiAJCW1heF9jcHVzID0gMTsKLSAKLQlzbXBfc3BhY2VfdGltZXJzKG1heF9jcHVzKTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCiAJCWlmIChjcHUgIT0gYm9vdF9jcHVpZCkKQEAgLTUwMSwxNCArNDk5LDYgQEAKIAljdXJyZW50LT5hY3RpdmVfbW0gPSAmaW5pdF9tbTsKIAogCXNtcF9zdG9yZV9jcHVfaW5mbyhjcHUpOwotCi0jaWYgZGVmaW5lZChDT05GSUdfQk9PS0UpIHx8IGRlZmluZWQoQ09ORklHXzQweCkKLQkvKiBDbGVhciBhbnkgcGVuZGluZyB0aW1lciBpbnRlcnJ1cHRzICovCi0JbXRzcHIoU1BSTl9UU1IsIFRTUl9FTlcgfCBUU1JfV0lTIHwgVFNSX0RJUyB8IFRTUl9GSVMpOwotCi0JLyogRW5hYmxlIGRlY3JlbWVudGVyIGludGVycnVwdCAqLwotCW10c3ByKFNQUk5fVENSLCBUQ1JfRElFKTsKLSNlbmRpZgogCXNldF9kZWModGJfdGlja3NfcGVyX2ppZmZ5KTsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAljcHVfY2FsbGluX21hcFtjcHVdID0gMTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3VzcGVuZC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zdXNwZW5kLmMKaW5kZXggNmZjNjMyOC4uMDE2N2Q1MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zdXNwZW5kLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zdXNwZW5kLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogRGlzdHJpYnV0ZSB1bmRlciBHUEx2MgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMiBQYXZlbCBNYWNoZWsgPHBhdmVsQHN1c2UuY3o+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgUGF2ZWwgTWFjaGVrIDxwYXZlbEB1Y3cuY3o+CiAgKiBDb3B5cmlnaHQgKGMpIDIwMDEgUGF0cmljayBNb2NoZWwgPG1vY2hlbEBvc2RsLm9yZz4KICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCmluZGV4IDA0NDFiYmQuLmNlNTNkZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCkBAIC0xNDksMTYgKzE0OSw2IEBACiBFWFBPUlRfU1lNQk9MKHRiX3RpY2tzX3Blcl91c2VjKTsKIHVuc2lnbmVkIGxvbmcgdGJfdGlja3NfcGVyX3NlYzsKIEVYUE9SVF9TWU1CT0wodGJfdGlja3NfcGVyX3NlYyk7CS8qIGZvciBjcHV0aW1lX3QgY29udmVyc2lvbnMgKi8KLXU2NCB0Yl90b194czsKLXVuc2lnbmVkIHRiX3RvX3VzOwotCi0jZGVmaW5lIFRJQ0tMRU5fU0NBTEUJTlRQX1NDQUxFX1NISUZUCi1zdGF0aWMgdTY0IGxhc3RfdGlja19sZW47CS8qIHVuaXRzIGFyZSBucyAvIDJeVElDS0xFTl9TQ0FMRSAqLwotc3RhdGljIHU2NCB0aWNrbGVuX3RvX3hzOwkvKiAwLjY0IGZyYWN0aW9uICovCi0KLS8qIElmIGxhc3RfdGlja19sZW4gY29ycmVzcG9uZHMgdG8gYWJvdXQgMS9IWiBzZWNvbmRzLCB0aGVuCi0gICBsYXN0X3RpY2tfbGVuIDw8IFRJQ0tMRU5fU0hJRlQgd2lsbCBiZSBhYm91dCAyXjYzLiAqLwotI2RlZmluZSBUSUNLTEVOX1NISUZUCSg2MyAtIDMwIC0gVElDS0xFTl9TQ0FMRSArIFNISUZUX0haKQogCiBERUZJTkVfU1BJTkxPQ0socnRjX2xvY2spOwogRVhQT1JUX1NZTUJPTF9HUEwocnRjX2xvY2spOwpAQCAtMTc0LDcgKzE2NCw2IEBACiBFWFBPUlRfU1lNQk9MKHBwY19wcm9jX2ZyZXEpOwogdW5zaWduZWQgbG9uZyBwcGNfdGJfZnJlcTsKIAotc3RhdGljIHU2NCB0Yl9sYXN0X2ppZmZ5IF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogc3RhdGljIERFRklORV9QRVJfQ1BVKHU2NCwgbGFzdF9qaWZmeSk7CiAKICNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORwpAQCAtNDIzLDMwICs0MTIsNiBAQAogfQogRVhQT1JUX1NZTUJPTCh1ZGVsYXkpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2d0b2QodTY0IG5ld190Yl9zdGFtcCwgdTY0IG5ld19zdGFtcF94c2VjLAotCQkJICAgICAgIHU2NCBuZXdfdGJfdG9feHMpCi17Ci0JLyoKLQkgKiB0Yl91cGRhdGVfY291bnQgaXMgdXNlZCB0byBhbGxvdyB0aGUgdXNlcnNwYWNlIGdldHRpbWVvZmRheSBjb2RlCi0JICogdG8gYXNzdXJlIGl0c2VsZiB0aGF0IGl0IHNlZXMgYSBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIHRiX3RvX3hzIGFuZAotCSAqIHN0YW1wX3hzZWMgdmFyaWFibGVzLiAgSXQgcmVhZHMgdGhlIHRiX3VwZGF0ZV9jb3VudCwgdGhlbiByZWFkcwotCSAqIHRiX3RvX3hzIGFuZCBzdGFtcF94c2VjIGFuZCB0aGVuIHJlYWRzIHRiX3VwZGF0ZV9jb3VudCBhZ2Fpbi4gIElmCi0JICogdGhlIHR3byB2YWx1ZXMgb2YgdGJfdXBkYXRlX2NvdW50IG1hdGNoIGFuZCBhcmUgZXZlbiB0aGVuIHRoZQotCSAqIHRiX3RvX3hzIGFuZCBzdGFtcF94c2VjIHZhbHVlcyBhcmUgY29uc2lzdGVudC4gIElmIG5vdCwgdGhlbiBpdAotCSAqIGxvb3BzIGJhY2sgYW5kIHJlYWRzIHRoZW0gYWdhaW4gdW50aWwgdGhpcyBjcml0ZXJpYSBpcyBtZXQuCi0JICogV2UgZXhwZWN0IHRoZSBjYWxsZXIgdG8gaGF2ZSBkb25lIHRoZSBmaXJzdCBpbmNyZW1lbnQgb2YKLQkgKiB2ZHNvX2RhdGEtPnRiX3VwZGF0ZV9jb3VudCBhbHJlYWR5LgotCSAqLwotCXZkc29fZGF0YS0+dGJfb3JpZ19zdGFtcCA9IG5ld190Yl9zdGFtcDsKLQl2ZHNvX2RhdGEtPnN0YW1wX3hzZWMgPSBuZXdfc3RhbXBfeHNlYzsKLQl2ZHNvX2RhdGEtPnRiX3RvX3hzID0gbmV3X3RiX3RvX3hzOwotCXZkc29fZGF0YS0+d3RvbV9jbG9ja19zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9zZWM7Ci0JdmRzb19kYXRhLT53dG9tX2Nsb2NrX25zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9uc2VjOwotCXZkc29fZGF0YS0+c3RhbXBfeHRpbWUgPSB4dGltZTsKLQlzbXBfd21iKCk7Ci0JKysodmRzb19kYXRhLT50Yl91cGRhdGVfY291bnQpOwotfQotCiAjaWZkZWYgQ09ORklHX1NNUAogdW5zaWduZWQgbG9uZyBwcm9maWxlX3BjKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpAQCAtNDcwLDcgKzQzNSw2IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGlTZXJpZXNfdGJfcmVjYWwodm9pZCkKIHsKLQlzdHJ1Y3QgZGl2X3Jlc3VsdCBkaXZyZXM7CiAJdW5zaWduZWQgbG9uZyB0aXRhbiwgdGI7CiAKIAkvKiBNYWtlIHN1cmUgd2Ugb25seSBydW4gb24gaVNlcmllcyAqLwpAQCAtNTAxLDEwICs0NjUsNyBAQAogCQkJCXRiX3RpY2tzX3Blcl9qaWZmeSA9IG5ld190Yl90aWNrc19wZXJfamlmZnk7CiAJCQkJdGJfdGlja3NfcGVyX3NlYyAgID0gbmV3X3RiX3RpY2tzX3Blcl9zZWM7CiAJCQkJY2FsY19jcHV0aW1lX2ZhY3RvcnMoKTsKLQkJCQlkaXYxMjhfYnlfMzIoIFhTRUNfUEVSX1NFQywgMCwgdGJfdGlja3NfcGVyX3NlYywgJmRpdnJlcyApOwotCQkJCXRiX3RvX3hzID0gZGl2cmVzLnJlc3VsdF9sb3c7CiAJCQkJdmRzb19kYXRhLT50Yl90aWNrc19wZXJfc2VjID0gdGJfdGlja3NfcGVyX3NlYzsKLQkJCQl2ZHNvX2RhdGEtPnRiX3RvX3hzID0gdGJfdG9feHM7CiAJCQkJc2V0dXBfY3B1dGltZV9vbmVfamlmZnkoKTsKIAkJCX0KIAkJCWVsc2UgewpAQCAtNjY3LDI3ICs2MjgsOSBAQAogCXRyYWNlX3RpbWVyX2ludGVycnVwdF9leGl0KHJlZ3MpOwogfQogCi12b2lkIHdha2V1cF9kZWNyZW1lbnRlcih2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgdGlja3M7Ci0KLQkvKgotCSAqIFRoZSB0aW1lYmFzZSBnZXRzIHNhdmVkIG9uIHNsZWVwIGFuZCByZXN0b3JlZCBvbiB3YWtldXAsCi0JICogc28gYWxsIHdlIG5lZWQgdG8gZG8gaXMgdG8gcmVzZXQgdGhlIGRlY3JlbWVudGVyLgotCSAqLwotCXRpY2tzID0gdGJfdGlja3Nfc2luY2UoX19nZXRfY3B1X3ZhcihsYXN0X2ppZmZ5KSk7Ci0JaWYgKHRpY2tzIDwgdGJfdGlja3NfcGVyX2ppZmZ5KQotCQl0aWNrcyA9IHRiX3RpY2tzX3Blcl9qaWZmeSAtIHRpY2tzOwotCWVsc2UKLQkJdGlja3MgPSAxOwotCXNldF9kZWModGlja3MpOwotfQotCiAjaWZkZWYgQ09ORklHX1NVU1BFTkQKLXZvaWQgZ2VuZXJpY19zdXNwZW5kX2Rpc2FibGVfaXJxcyh2b2lkKQorc3RhdGljIHZvaWQgZ2VuZXJpY19zdXNwZW5kX2Rpc2FibGVfaXJxcyh2b2lkKQogewotCXByZWVtcHRfZGlzYWJsZSgpOwotCiAJLyogRGlzYWJsZSB0aGUgZGVjcmVtZW50ZXIsIHNvIHRoYXQgaXQgZG9lc24ndCBpbnRlcmZlcmUKIAkgKiB3aXRoIHN1c3BlbmRpbmcuCiAJICovCkBAIC02OTcsMTIgKzY0MCw5IEBACiAJc2V0X2RlYygweDdmZmZmZmZmKTsKIH0KIAotdm9pZCBnZW5lcmljX3N1c3BlbmRfZW5hYmxlX2lycXModm9pZCkKK3N0YXRpYyB2b2lkIGdlbmVyaWNfc3VzcGVuZF9lbmFibGVfaXJxcyh2b2lkKQogewotCXdha2V1cF9kZWNyZW1lbnRlcigpOwotCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwotCXByZWVtcHRfZW5hYmxlKCk7CiB9CiAKIC8qIE92ZXJyaWRlcyB0aGUgd2VhayB2ZXJzaW9uIGluIGtlcm5lbC9wb3dlci9tYWluLmMgKi8KQEAgLTcyMiwyMyArNjYyLDYgQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1NNUAotdm9pZCBfX2luaXQgc21wX3NwYWNlX3RpbWVycyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCi17Ci0JaW50IGk7Ci0JdTY0IHByZXZpb3VzX3RiID0gcGVyX2NwdShsYXN0X2ppZmZ5LCBib290X2NwdWlkKTsKLQotCS8qIG1ha2Ugc3VyZSB0YiA+IHBlcl9jcHUobGFzdF9qaWZmeSwgY3B1KSBmb3IgYWxsIGNwdXMgYWx3YXlzICovCi0JcHJldmlvdXNfdGIgLT0gdGJfdGlja3NfcGVyX2ppZmZ5OwotCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKLQkJaWYgKGkgPT0gYm9vdF9jcHVpZCkKLQkJCWNvbnRpbnVlOwotCQlwZXJfY3B1KGxhc3RfamlmZnksIGkpID0gcHJldmlvdXNfdGI7Ci0JfQotfQotI2VuZGlmCi0KIC8qCiAgKiBTY2hlZHVsZXIgY2xvY2sgLSByZXR1cm5zIGN1cnJlbnQgdGltZSBpbiBuYW5vc2VjIHVuaXRzLgogICoKQEAgLTg3MywxMCArNzk2LDExIEBACiAJcmV0dXJuIChjeWNsZV90KWdldF90YigpOwogfQogCi12b2lkIHVwZGF0ZV92c3lzY2FsbChzdHJ1Y3QgdGltZXNwZWMgKndhbGxfdGltZSwgc3RydWN0IGNsb2Nrc291cmNlICpjbG9jaywKLQkJICAgICB1MzIgbXVsdCkKK3ZvaWQgdXBkYXRlX3ZzeXNjYWxsKHN0cnVjdCB0aW1lc3BlYyAqd2FsbF90aW1lLCBzdHJ1Y3QgdGltZXNwZWMgKnd0bSwKKwkJCXN0cnVjdCBjbG9ja3NvdXJjZSAqY2xvY2ssIHUzMiBtdWx0KQogewotCXU2NCB0MngsIHN0YW1wX3hzZWM7CisJdTY0IG5ld190Yl90b194cywgbmV3X3N0YW1wX3hzZWM7CisJdTMyIGZyYWNfc2VjOwogCiAJaWYgKGNsb2NrICE9ICZjbG9ja3NvdXJjZV90aW1lYmFzZSkKIAkJcmV0dXJuOwpAQCAtODg3LDExICs4MTEsMzUgQEAKIAogCS8qIFhYWCB0aGlzIGFzc3VtZXMgY2xvY2stPnNoaWZ0ID09IDIyICovCiAJLyogNDYxMTY4NjAxOCB+PSAyXigyMCs2NC0yMikgLyAxZTkgKi8KLQl0MnggPSAodTY0KSBtdWx0ICogNDYxMTY4NjAxOFVMTDsKLQlzdGFtcF94c2VjID0gKHU2NCkgeHRpbWUudHZfbnNlYyAqIFhTRUNfUEVSX1NFQzsKLQlkb19kaXYoc3RhbXBfeHNlYywgMTAwMDAwMDAwMCk7Ci0Jc3RhbXBfeHNlYyArPSAodTY0KSB4dGltZS50dl9zZWMgKiBYU0VDX1BFUl9TRUM7Ci0JdXBkYXRlX2d0b2QoY2xvY2stPmN5Y2xlX2xhc3QsIHN0YW1wX3hzZWMsIHQyeCk7CisJbmV3X3RiX3RvX3hzID0gKHU2NCkgbXVsdCAqIDQ2MTE2ODYwMThVTEw7CisJbmV3X3N0YW1wX3hzZWMgPSAodTY0KSB3YWxsX3RpbWUtPnR2X25zZWMgKiBYU0VDX1BFUl9TRUM7CisJZG9fZGl2KG5ld19zdGFtcF94c2VjLCAxMDAwMDAwMDAwKTsKKwluZXdfc3RhbXBfeHNlYyArPSAodTY0KSB3YWxsX3RpbWUtPnR2X3NlYyAqIFhTRUNfUEVSX1NFQzsKKworCUJVR19PTih3YWxsX3RpbWUtPnR2X25zZWMgPj0gTlNFQ19QRVJfU0VDKTsKKwkvKiB0aGlzIGlzIHR2X25zZWMgLyAxZTkgYXMgYSAwLjMyIGZyYWN0aW9uICovCisJZnJhY19zZWMgPSAoKHU2NCkgd2FsbF90aW1lLT50dl9uc2VjICogMTg0NDY3NDQwNzNVTEwpID4+IDMyOworCisJLyoKKwkgKiB0Yl91cGRhdGVfY291bnQgaXMgdXNlZCB0byBhbGxvdyB0aGUgdXNlcnNwYWNlIGdldHRpbWVvZmRheSBjb2RlCisJICogdG8gYXNzdXJlIGl0c2VsZiB0aGF0IGl0IHNlZXMgYSBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIHRiX3RvX3hzIGFuZAorCSAqIHN0YW1wX3hzZWMgdmFyaWFibGVzLiAgSXQgcmVhZHMgdGhlIHRiX3VwZGF0ZV9jb3VudCwgdGhlbiByZWFkcworCSAqIHRiX3RvX3hzIGFuZCBzdGFtcF94c2VjIGFuZCB0aGVuIHJlYWRzIHRiX3VwZGF0ZV9jb3VudCBhZ2Fpbi4gIElmCisJICogdGhlIHR3byB2YWx1ZXMgb2YgdGJfdXBkYXRlX2NvdW50IG1hdGNoIGFuZCBhcmUgZXZlbiB0aGVuIHRoZQorCSAqIHRiX3RvX3hzIGFuZCBzdGFtcF94c2VjIHZhbHVlcyBhcmUgY29uc2lzdGVudC4gIElmIG5vdCwgdGhlbiBpdAorCSAqIGxvb3BzIGJhY2sgYW5kIHJlYWRzIHRoZW0gYWdhaW4gdW50aWwgdGhpcyBjcml0ZXJpYSBpcyBtZXQuCisJICogV2UgZXhwZWN0IHRoZSBjYWxsZXIgdG8gaGF2ZSBkb25lIHRoZSBmaXJzdCBpbmNyZW1lbnQgb2YKKwkgKiB2ZHNvX2RhdGEtPnRiX3VwZGF0ZV9jb3VudCBhbHJlYWR5LgorCSAqLworCXZkc29fZGF0YS0+dGJfb3JpZ19zdGFtcCA9IGNsb2NrLT5jeWNsZV9sYXN0OworCXZkc29fZGF0YS0+c3RhbXBfeHNlYyA9IG5ld19zdGFtcF94c2VjOworCXZkc29fZGF0YS0+dGJfdG9feHMgPSBuZXdfdGJfdG9feHM7CisJdmRzb19kYXRhLT53dG9tX2Nsb2NrX3NlYyA9IHd0bS0+dHZfc2VjOworCXZkc29fZGF0YS0+d3RvbV9jbG9ja19uc2VjID0gd3RtLT50dl9uc2VjOworCXZkc29fZGF0YS0+c3RhbXBfeHRpbWUgPSAqd2FsbF90aW1lOworCXZkc29fZGF0YS0+c3RhbXBfc2VjX2ZyYWN0aW9uID0gZnJhY19zZWM7CisJc21wX3dtYigpOworCSsrKHZkc29fZGF0YS0+dGJfdXBkYXRlX2NvdW50KTsKIH0KIAogdm9pZCB1cGRhdGVfdnN5c2NhbGxfdHoodm9pZCkKQEAgLTEwMDcsMTUgKzk1NSwxMyBAQAogLyogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBvbiB0aGUgYm9vdCBwcm9jZXNzb3IgKi8KIHZvaWQgX19pbml0IHRpbWVfaW5pdCh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGRpdl9yZXN1bHQgcmVzOwotCXU2NCBzY2FsZSwgeDsKKwl1NjQgc2NhbGU7CiAJdW5zaWduZWQgc2hpZnQ7CiAKIAlpZiAoX19VU0VfUlRDKCkpIHsKIAkJLyogNjAxIHByb2Nlc3NvcjogZGVjIGNvdW50cyBkb3duIGJ5IDEyOCBldmVyeSAxMjhucyAqLwogCQlwcGNfdGJfZnJlcSA9IDEwMDAwMDAwMDA7Ci0JCXRiX2xhc3RfamlmZnkgPSBnZXRfcnRjbCgpOwogCX0gZWxzZSB7CiAJCS8qIE5vcm1hbCBQb3dlclBDIHdpdGggdGltZWJhc2UgcmVnaXN0ZXIgKi8KIAkJcHBjX21kLmNhbGlicmF0ZV9kZWNyKCk7CkBAIC0xMDIzLDUwICs5NjksMTUgQEAKIAkJICAgICAgIHBwY190Yl9mcmVxIC8gMTAwMDAwMCwgcHBjX3RiX2ZyZXEgJSAxMDAwMDAwKTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInRpbWVfaW5pdDogcHJvY2Vzc29yIGZyZXF1ZW5jeSAgID0gJWx1LiUuNmx1IE1IelxuIiwKIAkJICAgICAgIHBwY19wcm9jX2ZyZXEgLyAxMDAwMDAwLCBwcGNfcHJvY19mcmVxICUgMTAwMDAwMCk7Ci0JCXRiX2xhc3RfamlmZnkgPSBnZXRfdGIoKTsKIAl9CiAKIAl0Yl90aWNrc19wZXJfamlmZnkgPSBwcGNfdGJfZnJlcSAvIEhaOwogCXRiX3RpY2tzX3Blcl9zZWMgPSBwcGNfdGJfZnJlcTsKIAl0Yl90aWNrc19wZXJfdXNlYyA9IHBwY190Yl9mcmVxIC8gMTAwMDAwMDsKLQl0Yl90b191cyA9IG11bGh3dV9zY2FsZV9mYWN0b3IocHBjX3RiX2ZyZXEsIDEwMDAwMDApOwogCWNhbGNfY3B1dGltZV9mYWN0b3JzKCk7CiAJc2V0dXBfY3B1dGltZV9vbmVfamlmZnkoKTsKIAogCS8qCi0JICogQ2FsY3VsYXRlIHRoZSBsZW5ndGggb2YgZWFjaCB0aWNrIGluIG5zLiAgSXQgd2lsbCBub3QgYmUKLQkgKiBleGFjdGx5IDFlOS9IWiB1bmxlc3MgcHBjX3RiX2ZyZXEgaXMgZGl2aXNpYmxlIGJ5IEhaLgotCSAqIFdlIGNvbXB1dGUgMWU5ICogdGJfdGlja3NfcGVyX2ppZmZ5IC8gcHBjX3RiX2ZyZXEsCi0JICogcm91bmRlZCB1cC4KLQkgKi8KLQl4ID0gKHU2NCkgTlNFQ19QRVJfU0VDICogdGJfdGlja3NfcGVyX2ppZmZ5ICsgcHBjX3RiX2ZyZXEgLSAxOwotCWRvX2Rpdih4LCBwcGNfdGJfZnJlcSk7Ci0JdGlja19uc2VjID0geDsKLQlsYXN0X3RpY2tfbGVuID0geCA8PCBUSUNLTEVOX1NDQUxFOwotCi0JLyoKLQkgKiBDb21wdXRlIHRpY2tsZW5fdG9feHMsIHdoaWNoIGlzIGEgZmFjdG9yIHdoaWNoIGdldHMgbXVsdGlwbGllZAotCSAqIGJ5IChsYXN0X3RpY2tfbGVuIDw8IFRJQ0tMRU5fU0hJRlQpIHRvIGdldCBhIHRiX3RvX3hzIHZhbHVlLgotCSAqIEl0IGlzIGNvbXB1dGVkIGFzOgotCSAqIHRpY2tsZW5fdG9feHMgPSAyXk4gLyAodGJfdGlja3NfcGVyX2ppZmZ5ICogMWU5KQotCSAqIHdoZXJlIE4gPSA2NCArIDIwIC0gVElDS0xFTl9TQ0FMRSAtIFRJQ0tMRU5fU0hJRlQKLQkgKiB3aGljaCB0dXJucyBvdXQgdG8gYmUgTiA9IDUxIC0gU0hJRlRfSFouCi0JICogVGhpcyBnaXZlcyB0aGUgcmVzdWx0IGFzIGEgMC42NCBmaXhlZC1wb2ludCBmcmFjdGlvbi4KLQkgKiBUaGF0IHZhbHVlIGlzIHJlZHVjZWQgYnkgYW4gb2Zmc2V0IGFtb3VudGluZyB0byAxIHhzZWMgcGVyCi0JICogMl4zMSB0aW1lYmFzZSB0aWNrcyB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIHRpbWUgZ29pbmcgYmFja3dhcmRzCi0JICogYnkgMSB4c2VjIHdoZW4gd2UgZG8gdGltZXJfcmVjYWxjX29mZnNldCBkdWUgdG8gbG9zaW5nIHRoZQotCSAqIGZyYWN0aW9uYWwgeHNlYy4gIFRoYXQgb2Zmc2V0IGlzIGVxdWFsIHRvIHBwY190Yl9mcmVxLzJeNTEKLQkgKiBzaW5jZSB0aGVyZSBhcmUgMl4yMCB4c2VjIGluIGEgc2Vjb25kLgotCSAqLwotCWRpdjEyOF9ieV8zMigoMVVMTCA8PCA1MSkgLSBwcGNfdGJfZnJlcSwgMCwKLQkJICAgICB0Yl90aWNrc19wZXJfamlmZnkgPDwgU0hJRlRfSFosICZyZXMpOwotCWRpdjEyOF9ieV8zMihyZXMucmVzdWx0X2hpZ2gsIHJlcy5yZXN1bHRfbG93LCBOU0VDX1BFUl9TRUMsICZyZXMpOwotCXRpY2tsZW5fdG9feHMgPSByZXMucmVzdWx0X2xvdzsKLQotCS8qIENvbXB1dGUgdGJfdG9feHMgZnJvbSB0aWNrX25zZWMgKi8KLQl0Yl90b194cyA9IG11bGhkdShsYXN0X3RpY2tfbGVuIDw8IFRJQ0tMRU5fU0hJRlQsIHRpY2tsZW5fdG9feHMpOwotCi0JLyoKIAkgKiBDb21wdXRlIHNjYWxlIGZhY3RvciBmb3Igc2NoZWRfY2xvY2suCiAJICogVGhlIGNhbGlicmF0ZV9kZWNyKCkgZnVuY3Rpb24gaGFzIHNldCB0Yl90aWNrc19wZXJfc2VjLAogCSAqIHdoaWNoIGlzIHRoZSB0aW1lYmFzZSBmcmVxdWVuY3kuCkBAIC0xMDg3LDIxICs5OTgsMTQgQEAKIAkvKiBTYXZlIHRoZSBjdXJyZW50IHRpbWViYXNlIHRvIHByZXR0eSB1cCBDT05GSUdfUFJJTlRLX1RJTUUgKi8KIAlib290X3RiID0gZ2V0X3RiX29yX3J0YygpOwogCi0Jd3JpdGVfc2VxbG9ja19pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7Ci0KIAkvKiBJZiBwbGF0Zm9ybSBwcm92aWRlZCBhIHRpbWV6b25lIChwbWFjKSwgd2UgY29ycmVjdCB0aGUgdGltZSAqLwogICAgICAgICBpZiAodGltZXpvbmVfb2Zmc2V0KSB7CiAJCXN5c190ei50el9taW51dGVzd2VzdCA9IC10aW1lem9uZV9vZmZzZXQgLyA2MDsKIAkJc3lzX3R6LnR6X2RzdHRpbWUgPSAwOwogICAgICAgICB9CiAKLQl2ZHNvX2RhdGEtPnRiX29yaWdfc3RhbXAgPSB0Yl9sYXN0X2ppZmZ5OwogCXZkc29fZGF0YS0+dGJfdXBkYXRlX2NvdW50ID0gMDsKIAl2ZHNvX2RhdGEtPnRiX3RpY2tzX3Blcl9zZWMgPSB0Yl90aWNrc19wZXJfc2VjOwotCXZkc29fZGF0YS0+c3RhbXBfeHNlYyA9ICh1NjQpIHh0aW1lLnR2X3NlYyAqIFhTRUNfUEVSX1NFQzsKLQl2ZHNvX2RhdGEtPnRiX3RvX3hzID0gdGJfdG9feHM7Ci0KLQl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwogCiAJLyogU3RhcnQgdGhlIGRlY3JlbWVudGVyIG9uIENQVXMgdGhhdCBoYXZlIG1hbnVhbCBjb250cm9sCiAJICogc3VjaCBhcyBCb29rRQpAQCAtMTE5NSwzOSArMTA5OSw2IEBACiAJR3JlZ29yaWFuRGF5KHRtKTsKIH0KIAotLyogQXV4aWxpYXJ5IGZ1bmN0aW9uIHRvIGNvbXB1dGUgc2NhbGluZyBmYWN0b3JzICovCi0vKiBBY3R1YWxseSB0aGUgY2hvaWNlIG9mIGEgdGltZWJhc2UgcnVubmluZyBhdCAxLzQgdGhlIG9mIHRoZSBidXMKLSAqIGZyZXF1ZW5jeSBnaXZpbmcgcmVzb2x1dGlvbiBvZiBhIGZldyB0ZW5zIG9mIG5hbm9zZWNvbmRzIGlzIHF1aXRlIG5pY2UuCi0gKiBJdCBtYWtlcyB0aGlzIGNvbXB1dGF0aW9uIHZlcnkgcHJlY2lzZSAoMjctMjggYml0cyB0eXBpY2FsbHkpIHdoaWNoCi0gKiBpcyBvcHRpbWlzdGljIGNvbnNpZGVyaW5nIHRoZSBzdGFiaWxpdHkgb2YgbW9zdCBwcm9jZXNzb3IgY2xvY2sKLSAqIG9zY2lsbGF0b3JzIGFuZCB0aGUgcHJlY2lzaW9uIHdpdGggd2hpY2ggdGhlIHRpbWViYXNlIGZyZXF1ZW5jeQotICogaXMgbWVhc3VyZWQgYnV0IGRvZXMgbm90IGhhcm0uCi0gKi8KLXVuc2lnbmVkIG11bGh3dV9zY2FsZV9mYWN0b3IodW5zaWduZWQgaW5zY2FsZSwgdW5zaWduZWQgb3V0c2NhbGUpCi17Ci0gICAgICAgIHVuc2lnbmVkIG1sdD0wLCB0bXAsIGVycjsKLSAgICAgICAgLyogTm8gY29uY2VybiBmb3IgcGVyZm9ybWFuY2UsIGl0J3MgZG9uZSBvbmNlOiB1c2UgYSBzdHVwaWQKLSAgICAgICAgICogYnV0IHNhZmUgYW5kIGNvbXBhY3QgbWV0aG9kIHRvIGZpbmQgdGhlIG11bHRpcGxpZXIuCi0gICAgICAgICAqLwotICAKLSAgICAgICAgZm9yICh0bXAgPSAxVTw8MzE7IHRtcCAhPSAwOyB0bXAgPj49IDEpIHsKLSAgICAgICAgICAgICAgICBpZiAobXVsaHd1KGluc2NhbGUsIG1sdHx0bXApIDwgb3V0c2NhbGUpCi0JCQltbHQgfD0gdG1wOwotICAgICAgICB9Ci0gIAotICAgICAgICAvKiBXZSBtaWdodCBzdGlsbCBiZSBvZmYgYnkgMSBmb3IgdGhlIGJlc3QgYXBwcm94aW1hdGlvbi4KLSAgICAgICAgICogQSBzaWRlIGVmZmVjdCBvZiB0aGlzIGlzIHRoYXQgaWYgb3V0c2NhbGUgaXMgdG9vIGxhcmdlCi0gICAgICAgICAqIHRoZSByZXR1cm5lZCB2YWx1ZSB3aWxsIGJlIHplcm8uCi0gICAgICAgICAqIE1hbnkgY29ybmVyIGNhc2VzIGhhdmUgYmVlbiBjaGVja2VkIGFuZCBzZWVtIHRvIHdvcmssCi0gICAgICAgICAqIHNvbWUgbWlnaHQgaGF2ZSBiZWVuIGZvcmdvdHRlbiBpbiB0aGUgdGVzdCBob3dldmVyLgotICAgICAgICAgKi8KLSAgCi0gICAgICAgIGVyciA9IGluc2NhbGUgKiAobWx0KzEpOwotICAgICAgICBpZiAoZXJyIDw9IGluc2NhbGUvMikKLQkJbWx0Kys7Ci0gICAgICAgIHJldHVybiBtbHQ7Ci19Ci0KIC8qCiAgKiBEaXZpZGUgYSAxMjgtYml0IGRpdmlkZW5kIGJ5IGEgMzItYml0IGRpdmlzb3IsIGxlYXZpbmcgYSAxMjggYml0CiAgKiByZXN1bHQuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKaW5kZXggMjVmYzMzOS4uYTQ1YTYzYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYwpAQCAtNTUsOSArNTUsNiBAQAogI2VuZGlmCiAjaW5jbHVkZSA8YXNtL2tleGVjLmg+CiAjaW5jbHVkZSA8YXNtL3BwYy1vcGNvZGUuaD4KLSNpZmRlZiBDT05GSUdfRlNMX0JPT0tFCi0jaW5jbHVkZSA8YXNtL2RiZWxsLmg+Ci0jZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHR0VSKSB8fCBkZWZpbmVkKENPTkZJR19LRVhFQykKIGludCAoKl9fZGVidWdnZXIpKHN0cnVjdCBwdF9yZWdzICpyZWdzKSBfX3JlYWRfbW9zdGx5OwpAQCAtNjg4LDcgKzY4NSw3IEBACiAKIHZvaWQgX19rcHJvYmVzIHNpbmdsZV9zdGVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlyZWdzLT5tc3IgJj0gfihNU1JfU0UgfCBNU1JfQkUpOyAgLyogVHVybiBvZmYgJ3RyYWNlJyBiaXRzICovCisJY2xlYXJfc2luZ2xlX3N0ZXAocmVncyk7CiAKIAlpZiAobm90aWZ5X2RpZShESUVfU1NURVAsICJzaW5nbGVfc3RlcCIsIHJlZ3MsIDUsCiAJCQkJCTUsIFNJR1RSQVApID09IE5PVElGWV9TVE9QKQpAQCAtNzA3LDEwICs3MDQsOCBAQAogICovCiBzdGF0aWMgdm9pZCBlbXVsYXRlX3NpbmdsZV9zdGVwKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWlmIChzaW5nbGVfc3RlcHBpbmcocmVncykpIHsKLQkJY2xlYXJfc2luZ2xlX3N0ZXAocmVncyk7Ci0JCV9leGNlcHRpb24oU0lHVFJBUCwgcmVncywgVFJBUF9UUkFDRSwgMCk7Ci0JfQorCWlmIChzaW5nbGVfc3RlcHBpbmcocmVncykpCisJCXNpbmdsZV9zdGVwX2V4Y2VwdGlvbihyZWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgX19wYXJzZV9mcHNjcih1bnNpZ25lZCBsb25nIGZwc2NyKQpAQCAtMTM0NCwyNCArMTMzOSw2IEBACiAjZW5kaWYgLyogQ09ORklHX1ZTWCAqLwogCiAjaWZkZWYgQ09ORklHX0ZTTF9CT09LRQotCi12b2lkIGRvb3JiZWxsX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLSNpZmRlZiBDT05GSUdfU01QCi0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlpbnQgbXNnOwotCi0JaWYgKG51bV9vbmxpbmVfY3B1cygpIDwgMikKLQkJcmV0dXJuOwotCi0JZm9yIChtc2cgPSAwOyBtc2cgPCA0OyBtc2crKykKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChtc2csICZkYmVsbF9zbXBfbWVzc2FnZVtjcHVdKSkKLQkJCXNtcF9tZXNzYWdlX3JlY3YobXNnKTsKLSNlbHNlCi0JcHJpbnRrKEtFUk5fV0FSTklORyAiUmVjZWl2ZWQgZG9vcmJlbGwgb24gbm9uLXNtcCBzeXN0ZW1cbiIpOwotI2VuZGlmCi19Ci0KIHZvaWQgQ2FjaGVMb2NraW5nRXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJCQkgICB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzby5jCmluZGV4IGQ4NGQxOTIuLjEzMDAyZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzby5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzby5jCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZWxmLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1iLmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtNzM0LDcgKzczNCw3IEBACiAJdmRzb19kYXRhLT5wbGF0Zm9ybSA9IG1hY2hpbmVfaXMoaXNlcmllcykgPyAweDIwMCA6IDB4MTAwOwogCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQogCQl2ZHNvX2RhdGEtPnBsYXRmb3JtIHw9IDE7Ci0JdmRzb19kYXRhLT5waHlzaWNhbE1lbW9yeVNpemUgPSBsbWJfcGh5c19tZW1fc2l6ZSgpOworCXZkc29fZGF0YS0+cGh5c2ljYWxNZW1vcnlTaXplID0gbWVtYmxvY2tfcGh5c19tZW1fc2l6ZSgpOwogCXZkc29fZGF0YS0+ZGNhY2hlX3NpemUgPSBwcGM2NF9jYWNoZXMuZHNpemU7CiAJdmRzb19kYXRhLT5kY2FjaGVfbGluZV9zaXplID0gcHBjNjRfY2FjaGVzLmRsaW5lX3NpemU7CiAJdmRzb19kYXRhLT5pY2FjaGVfc2l6ZSA9IHBwYzY0X2NhY2hlcy5pc2l6ZTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL2dldHRpbWVvZmRheS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvZ2V0dGltZW9mZGF5LlMKaW5kZXggZWUwMzhkNC4uNGVlMDllZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvZ2V0dGltZW9mZGF5LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvZ2V0dGltZW9mZGF5LlMKQEAgLTE5LDggKzE5LDEwIEBACiAvKiBPZmZzZXQgZm9yIHRoZSBsb3cgMzItYml0IHBhcnQgb2YgYSBmaWVsZCBvZiBsb25nIHR5cGUgKi8KICNpZmRlZiBDT05GSUdfUFBDNjQKICNkZWZpbmUgTE9QQVJUCTQKKyNkZWZpbmUgVFNQRUNfVFZfU0VDCVRTUEM2NF9UVl9TRUMrTE9QQVJUCiAjZWxzZQogI2RlZmluZSBMT1BBUlQJMAorI2RlZmluZSBUU1BFQ19UVl9TRUMJVFNQQzMyX1RWX1NFQwogI2VuZGlmCiAKIAkudGV4dApAQCAtNDEsMjMgKzQzLDExIEBACiAJbXIJcjksIHIzCQkJLyogZGF0YXBhZ2UgcHRyIGluIHI5ICovCiAJY21wbHdpCXIxMCwwCQkJLyogY2hlY2sgaWYgdHYgaXMgTlVMTCAqLwogCWJlcQkzZgotCWJsCV9fZG9fZ2V0X3hzZWNAbG9jYWwJLyogZ2V0IHhzZWMgZnJvbSB0YiAmIGtlcm5lbCAqLwotCWJuZS0JMmYJCQkvKiBvdXQgb2YgbGluZSAtPiBkbyBzeXNjYWxsICovCi0KLQkvKiBzZWNvbmRzIGFyZSB4c2VjID4+IDIwICovCi0Jcmx3aW5tCXI1LHI0LDEyLDIwLDMxCi0Jcmx3aW1pCXI1LHIzLDEyLDAsMTkKLQlzdHcJcjUsVFZBTDMyX1RWX1NFQyhyMTApCi0KLQkvKiBnZXQgcmVtYWluaW5nIHhzZWMgYW5kIGNvbnZlcnQgdG8gdXNlYy4gd2Ugc2NhbGUKLQkgKiB1cCByZW1haW5pbmcgeHNlYyBieSAxMiBiaXRzIGFuZCBnZXQgdGhlIHRvcCAzMiBiaXRzCi0JICogb2YgdGhlIG11bHRpcGxpY2F0aW9uCi0JICovCi0Jcmx3aW5tCXI1LHI0LDEyLDAsMTkKLQlsaXMJcjYsMTAwMDAwMEBoCi0Jb3JpCXI2LHI2LDEwMDAwMDBAbAotCW11bGh3dQlyNSxyNSxyNgotCXN0dwlyNSxUVkFMMzJfVFZfVVNFQyhyMTApCisJbGlzCXI3LDEwMDAwMDBAaGEJCS8qIGxvYWQgdXAgVVNFQ19QRVJfU0VDICovCisJYWRkaQlyNyxyNywxMDAwMDAwQGwJCS8qIHNvIHdlIGdldCBtaWNyb3NlY29uZHMgaW4gcjQgKi8KKwlibAlfX2RvX2dldF90c3BlY0Bsb2NhbAkvKiBnZXQgc2VjL3VzZWMgZnJvbSB0YiAmIGtlcm5lbCAqLworCXN0dwlyMyxUVkFMMzJfVFZfU0VDKHIxMCkKKwlzdHcJcjQsVFZBTDMyX1RWX1VTRUMocjEwKQogCiAzOgljbXBsd2kJcjExLDAJCQkvKiBjaGVjayBpZiB0eiBpcyBOVUxMICovCiAJYmVxCTFmCkBAIC03MCwxNCArNjAsNiBAQAogCWNyY2xyCWNyMCo0K3NvCiAJbGkJcjMsMAogCWJscgotCi0yOgotCW10bHIJcjEyCi0JbXIJcjMscjEwCi0JbXIJcjQscjExCi0JbGkJcjAsX19OUl9nZXR0aW1lb2ZkYXkKLQlzYwotCWJscgogICAuY2ZpX2VuZHByb2MKIFZfRlVOQ1RJT05fRU5EKF9fa2VybmVsX2dldHRpbWVvZmRheSkKIApAQCAtMTAwLDcgKzgyLDggQEAKIAltcglyMTEscjQJCQkvKiByMTEgc2F2ZXMgdHAgKi8KIAlibAlfX2dldF9kYXRhcGFnZUBsb2NhbAkvKiBnZXQgZGF0YSBwYWdlICovCiAJbXIJcjkscjMJCQkvKiBkYXRhcGFnZSBwdHIgaW4gcjkgKi8KLQorCWxpcwlyNyxOU0VDX1BFUl9TRUNAaAkvKiB3YW50IG5hbm9zZWNvbmRzICovCisJb3JpCXI3LHI3LE5TRUNfUEVSX1NFQ0BsCiA1MDoJYmwJX19kb19nZXRfdHNwZWNAbG9jYWwJLyogZ2V0IHNlYy9uc2VjIGZyb20gdGIgJiBrZXJuZWwgKi8KIAlibmUJY3IxLDgwZgkJCS8qIG5vdCBtb25vdG9uaWMgLT4gYWxsIGRvbmUgKi8KIApAQCAtMTk4LDgzICsxODEsMTIgQEAKIAogCiAvKgotICogVGhpcyBpcyB0aGUgY29yZSBvZiBnZXR0aW1lb2ZkYXkoKSAmIGZyaWVuZHMsIGl0IHJldHVybnMgdGhlIHhzZWMKLSAqIHZhbHVlIGluIHIzICYgcjQgYW5kIGV4cGVjdHMgdGhlIGRhdGFwYWdlIHB0ciAobm9uIGNsb2JiZXJlZCkKLSAqIGluIHI5LiBjbG9iYmVycyByMCxyNCxyNSxyNixyNyxyOC4KLSAqIFdoZW4gcmV0dXJuaW5nLCByOCBjb250YWlucyB0aGUgY291bnRlciB2YWx1ZSB0aGF0IGNhbiBiZSByZXVzZWQKLSAqIGJ5IHRoZSBtb25vdG9uaWMgY2xvY2sgaW1wbGVtZW50YXRpb24KLSAqLwotX19kb19nZXRfeHNlYzoKLSAgLmNmaV9zdGFydHByb2MKLQkvKiBDaGVjayBmb3IgdXBkYXRlIGNvdW50ICYgbG9hZCB2YWx1ZXMuIFdlIHVzZSB0aGUgbG93Ci0JICogb3JkZXIgMzIgYml0cyBvZiB0aGUgdXBkYXRlIGNvdW50Ci0JICovCi0xOglsd3oJcjgsKENGR19UQl9VUERBVEVfQ09VTlQrTE9QQVJUKShyOSkKLQlhbmRpLglyMCxyOCwxCQkJLyogcGVuZGluZyB1cGRhdGUgPyBsb29wICovCi0JYm5lLQkxYgotCXhvcglyMCxyOCxyOAkJLyogY3JlYXRlIGRlcGVuZGVuY3kgKi8KLQlhZGQJcjkscjkscjAKLQotCS8qIExvYWQgb3JpZyBzdGFtcCAob2Zmc2V0IHRvIFRCKSAqLwotCWx3eglyNSxDRkdfVEJfT1JJR19TVEFNUChyOSkKLQlsd3oJcjYsKENGR19UQl9PUklHX1NUQU1QKzQpKHI5KQotCi0JLyogR2V0IGEgc3RhYmxlIFRCIHZhbHVlICovCi0yOgltZnRidQlyMwotCW1mdGJsCXI0Ci0JbWZ0YnUJcjAKLQljbXBsCWNyMCxyMyxyMAotCWJuZS0JMmIKLQotCS8qIFN1YnN0cmFjdCB0YiBvcmlnIHN0YW1wLiBJZiB0aGUgaGlnaCBwYXJ0IGlzIG5vbi16ZXJvLCB3ZSBqdW1wIHRvCi0JICogdGhlIHNsb3cgcGF0aCB3aGljaCBjYWxsIHRoZSBzeXNjYWxsLgotCSAqIElmIGl0J3Mgb2ssIHRoZW4gd2UgaGF2ZSBvdXIgMzIgYml0cyB0Yl90aWNrcyB2YWx1ZSBpbiByNwotCSAqLwotCXN1YmZjCXI3LHI2LHI0Ci0Jc3ViZmUuCXIwLHI1LHIzCi0JYm5lLQkzZgotCi0JLyogTG9hZCBzY2FsZSBmYWN0b3IgJiBkbyBtdWx0aXBsaWNhdGlvbiAqLwotCWx3eglyNSxDRkdfVEJfVE9fWFMocjkpCS8qIGxvYWQgdmFsdWVzICovCi0JbHd6CXI2LChDRkdfVEJfVE9fWFMrNCkocjkpCi0JbXVsaHd1CXI0LHI3LHI1Ci0JbXVsaHd1CXI2LHI3LHI2Ci0JbXVsbHcJcjAscjcscjUKLQlhZGRjCXI2LHI2LHIwCi0KLQkvKiBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIHRoZSBzY2FsZWQgeHNlYyB2YWx1ZSBpbiByNCArIFhFUjpDQQotCSAqIHdlIGxvYWQgJiBhZGQgdGhlIHN0YW1wIHNpbmNlIGVwb2NoCi0JICovCi0JbHd6CXI1LENGR19TVEFNUF9YU0VDKHI5KQotCWx3eglyNiwoQ0ZHX1NUQU1QX1hTRUMrNCkocjkpCi0JYWRkZQlyNCxyNCxyNgotCWFkZHplCXIzLHI1Ci0KLQkvKiBXZSBub3cgaGF2ZSBvdXIgcmVzdWx0IGluIHIzLHI0LiBXZSBjcmVhdGUgYSBmYWtlIGRlcGVuZGVuY3kKLQkgKiBvbiB0aGF0IHJlc3VsdCBhbmQgcmUtY2hlY2sgdGhlIGNvdW50ZXIKLQkgKi8KLQlvcglyNixyNCxyMwotCXhvcglyMCxyNixyNgotCWFkZAlyOSxyOSxyMAotCWx3eglyMCwoQ0ZHX1RCX1VQREFURV9DT1VOVCtMT1BBUlQpKHI5KQotICAgICAgICBjbXBsICAgIGNyMCxyOCxyMAkJLyogY2hlY2sgaWYgdXBkYXRlZCAqLwotCWJuZS0JMWIKLQotCS8qIFdhcm5pbmcgISBUaGUgY2FsbGVyIGV4cGVjdHMgQ1I6RVEgdG8gYmUgc2V0IHRvIGluZGljYXRlIGEKLQkgKiBzdWNjZXNzZnVsIGNhbGN1bGF0aW9uIChzbyBpdCB3b24ndCBmYWxsYmFjayB0byB0aGUgc3lzY2FsbAotCSAqIG1ldGhvZCkuIFdlIGhhdmUgb3ZlcnJpZGVuIHRoYXQgQ1IgYml0IGluIHRoZSBjb3VudGVyIGNoZWNrLAotCSAqIGJ1dCBmb3J0dW5hdGVseSwgdGhlIGxvb3AgZXhpdCBjb25kaXRpb24gX2lzXyBDUjpFUSBzZXQsIHNvCi0JICogd2UgY2FuIGV4aXQgc2FmZWx5IGhlcmUuIElmIHlvdSBjaGFuZ2UgdGhpcyBjb2RlLCBiZSBjYXJlZnVsCi0JICogb2YgdGhhdCBzaWRlIGVmZmVjdC4KLQkgKi8KLTM6CWJscgotICAuY2ZpX2VuZHByb2MKLQotLyoKLSAqIFRoaXMgaXMgdGhlIGNvcmUgb2YgY2xvY2tfZ2V0dGltZSgpLCBpdCByZXR1cm5zIHRoZSBjdXJyZW50Ci0gKiB0aW1lIGluIHNlY29uZHMgYW5kIG5hbm9zZWNvbmRzIGluIHIzIGFuZCByNC4KKyAqIFRoaXMgaXMgdGhlIGNvcmUgb2YgY2xvY2tfZ2V0dGltZSgpIGFuZCBnZXR0aW1lb2ZkYXkoKSwKKyAqIGl0IHJldHVybnMgdGhlIGN1cnJlbnQgdGltZSBpbiByMyAoc2Vjb25kcykgYW5kIHI0LgorICogT24gZW50cnksIHI3IGdpdmVzIHRoZSByZXNvbHV0aW9uIG9mIHI0LCBlaXRoZXIgVVNFQ19QRVJfU0VDCisgKiBvciBOU0VDX1BFUl9TRUMsIGdpdmluZyByNCBpbiBtaWNyb3NlY29uZHMgb3IgbmFub3NlY29uZHMuCiAgKiBJdCBleHBlY3RzIHRoZSBkYXRhcGFnZSBwdHIgaW4gcjkgYW5kIGRvZXNuJ3QgY2xvYmJlciBpdC4KLSAqIEl0IGNsb2JiZXJzIHIwLCByNSwgcjYsIHIxMCBhbmQgcmV0dXJucyBOU0VDX1BFUl9TRUMgaW4gcjcuCisgKiBJdCBjbG9iYmVycyByMCwgcjUgYW5kIHI2LgogICogT24gcmV0dXJuLCByOCBjb250YWlucyB0aGUgY291bnRlciB2YWx1ZSB0aGF0IGNhbiBiZSByZXVzZWQuCiAgKiBUaGlzIGNsb2JiZXJzIGNyMCBidXQgbm90IGFueSBvdGhlciBjciBmaWVsZC4KICAqLwpAQCAtMjk3LDcwICsyMDksNTggQEAKIDI6CW1mdGJ1CXIzCiAJbWZ0YmwJcjQKIAltZnRidQlyMAotCWNtcGwJY3IwLHIzLHIwCisJY21wbHcJY3IwLHIzLHIwCiAJYm5lLQkyYgogCiAJLyogU3VidHJhY3QgdGIgb3JpZyBzdGFtcCBhbmQgc2hpZnQgbGVmdCAxMiBiaXRzLgogCSAqLwotCXN1YmZjCXI3LHI2LHI0CisJc3ViZmMJcjQscjYscjQKIAlzdWJmZQlyMCxyNSxyMwogCXNsd2kJcjAscjAsMTIKLQlybHdpbWkuCXIwLHI3LDEyLDIwLDMxCi0Jc2x3aQlyNyxyNywxMgorCXJsd2ltaS4JcjAscjQsMTIsMjAsMzEKKwlzbHdpCXI0LHI0LDEyCiAKLQkvKiBMb2FkIHNjYWxlIGZhY3RvciAmIGRvIG11bHRpcGxpY2F0aW9uICovCisJLyoKKwkgKiBMb2FkIHNjYWxlIGZhY3RvciAmIGRvIG11bHRpcGxpY2F0aW9uLgorCSAqIFdlIG9ubHkgdXNlIHRoZSBoaWdoIDMyIGJpdHMgb2YgdGhlIHRiX3RvX3hzIHZhbHVlLgorCSAqIEV2ZW4gd2l0aCBhIDFHSHogdGltZWJhc2UgY2xvY2ssIHRoZSBoaWdoIDMyIGJpdHMgb2YKKwkgKiB0Yl90b194cyB3aWxsIGJlIGF0IGxlYXN0IDQgbWlsbGlvbiwgc28gdGhlIGVycm9yIGZyb20KKwkgKiBpZ25vcmluZyB0aGUgbG93IDMyIGJpdHMgd2lsbCBiZSBubyBtb3JlIHRoYW4gMC4yNXBwbS4KKwkgKiBUaGUgZXJyb3Igd2lsbCBqdXN0IG1ha2UgdGhlIGNsb2NrIHJ1biB2ZXJ5IHZlcnkgc2xpZ2h0bHkKKwkgKiBzbG93IHVudGlsIHRoZSBuZXh0IHRpbWUgdGhlIGtlcm5lbCB1cGRhdGVzIHRoZSBWRFNPIGRhdGEsCisJICogYXQgd2hpY2ggcG9pbnQgdGhlIGNsb2NrIHdpbGwgY2F0Y2ggdXAgdG8gdGhlIGtlcm5lbCdzIHZhbHVlLAorCSAqIHNvIHRoZXJlIGlzIG5vIGxvbmctdGVybSBlcnJvciBhY2N1bXVsYXRpb24uCisJICovCiAJbHd6CXI1LENGR19UQl9UT19YUyhyOSkJLyogbG9hZCB2YWx1ZXMgKi8KLQlsd3oJcjYsKENGR19UQl9UT19YUys0KShyOSkKLQltdWxod3UJcjMscjcscjYKLQltdWxsdwlyMTAscjcscjUKLQltdWxod3UJcjQscjcscjUKLQlhZGRjCXIxMCxyMyxyMTAKKwltdWxod3UJcjQscjQscjUKIAlsaQlyMywwCiAKIAliZXErCTRmCQkJLyogc2tpcCBoaWdoIHBhcnQgY29tcHV0YXRpb24gaWYgMCAqLwogCW11bGh3dQlyMyxyMCxyNQotCW11bGx3CXI3LHIwLHI1Ci0JbXVsaHd1CXI1LHIwLHI2Ci0JbXVsbHcJcjYscjAscjYKLQlhZGRlCXI0LHI0LHI3Ci0JYWRkemUJcjMscjMKKwltdWxsdwlyNSxyMCxyNQogCWFkZGMJcjQscjQscjUKIAlhZGR6ZQlyMyxyMwotCWFkZGMJcjEwLHIxMCxyNgotCi00OglhZGR6ZQlyNCxyNAkJCS8qIGFkZCBpbiBjYXJyeSAqLwotCWxpcwlyNyxOU0VDX1BFUl9TRUNAaAotCW9yaQlyNyxyNyxOU0VDX1BFUl9TRUNAbAotCW11bGh3dQlyNCxyNCxyNwkJLyogY29udmVydCB0byBuYW5vc2Vjb25kcyAqLwotCi0JLyogQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBzZWNvbmRzICYgbmFub3NlY29uZHMgc2luY2UgdGhlIHh0aW1lCi0JICogc3RhbXAgaW4gcjMrQ0EgYW5kIHI0LiAgTG9hZCAmIGFkZCB0aGUgeHRpbWUgc3RhbXAuCis0OgorCS8qIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgc2Vjb25kcyBzaW5jZSB0aGUgeHRpbWUgc3RhbXAKKwkgKiBhcyBhIDMyLjMyIGZpeGVkLXBvaW50IG51bWJlciBpbiByMyBhbmQgcjQuCisJICogTG9hZCAmIGFkZCB0aGUgeHRpbWUgc3RhbXAuCiAJICovCi0jaWZkZWYgQ09ORklHX1BQQzY0Ci0JbHd6CXI1LFNUQU1QX1hUSU1FK1RTUEM2NF9UVl9TRUMrTE9QQVJUKHI5KQotCWx3eglyNixTVEFNUF9YVElNRStUU1BDNjRfVFZfTlNFQytMT1BBUlQocjkpCi0jZWxzZQotCWx3eglyNSxTVEFNUF9YVElNRStUU1BDMzJfVFZfU0VDKHI5KQotCWx3eglyNixTVEFNUF9YVElNRStUU1BDMzJfVFZfTlNFQyhyOSkKLSNlbmRpZgotCWFkZAlyNCxyNCxyNgorCWx3eglyNSxTVEFNUF9YVElNRStUU1BFQ19UVl9TRUMocjkpCisJbHd6CXI2LFNUQU1QX1NFQ19GUkFDKHI5KQorCWFkZGMJcjQscjQscjYKIAlhZGRlCXIzLHIzLHI1CiAKLQkvKiBXZSBub3cgaGF2ZSBvdXIgcmVzdWx0IGluIHIzLHI0LiBXZSBjcmVhdGUgYSBmYWtlIGRlcGVuZGVuY3kKLQkgKiBvbiB0aGF0IHJlc3VsdCBhbmQgcmUtY2hlY2sgdGhlIGNvdW50ZXIKKwkvKiBXZSBjcmVhdGUgYSBmYWtlIGRlcGVuZGVuY3kgb24gdGhlIHJlc3VsdCBpbiByMy9yNAorCSAqIGFuZCByZS1jaGVjayB0aGUgY291bnRlcgogCSAqLwogCW9yCXI2LHI0LHIzCiAJeG9yCXIwLHI2LHI2CiAJYWRkCXI5LHI5LHIwCiAJbHd6CXIwLChDRkdfVEJfVVBEQVRFX0NPVU5UK0xPUEFSVCkocjkpCi0gICAgICAgIGNtcGwgICAgY3IwLHI4LHIwCQkvKiBjaGVjayBpZiB1cGRhdGVkICovCisgICAgICAgIGNtcGx3CWNyMCxyOCxyMAkJLyogY2hlY2sgaWYgdXBkYXRlZCAqLwogCWJuZS0JMWIKIAotCS8qIGNoZWNrIGZvciBuYW5vc2Vjb25kIG92ZXJmbG93IGFuZCBhZGp1c3QgaWYgbmVjZXNzYXJ5ICovCi0JY21wdwlyNCxyNwotCWJsdGxyCQkJCS8qIGFsbCBkb25lIGlmIG5vIG92ZXJmbG93ICovCi0Jc3ViZglyNCxyNyxyNAkJLyogYWRqdXN0IGlmIG92ZXJmbG93ICovCi0JYWRkaQlyMyxyMywxCisJbXVsaHd1CXI0LHI0LHI3CQkvKiBjb252ZXJ0IHRvIG1pY3JvIG9yIG5hbm9zZWNvbmRzICovCiAKIAlibHIKICAgLmNmaV9lbmRwcm9jCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9nZXR0aW1lb2ZkYXkuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L2dldHRpbWVvZmRheS5TCmluZGV4IDI2MmNkNTguLmU5N2E5YTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L2dldHRpbWVvZmRheS5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L2dldHRpbWVvZmRheS5TCkBAIC0zMywxOCArMzMsMTEgQEAKIAlibAlWX0xPQ0FMX0ZVTkMoX19nZXRfZGF0YXBhZ2UpCS8qIGdldCBkYXRhIHBhZ2UgKi8KIAljbXBsZGkJcjExLDAJCQkvKiBjaGVjayBpZiB0diBpcyBOVUxMICovCiAJYmVxCTJmCi0JYmwJVl9MT0NBTF9GVU5DKF9fZG9fZ2V0X3hzZWMpCS8qIGdldCB4c2VjIGZyb20gdGIgJiBrZXJuZWwgKi8KLQlsaXMgICAgIHI3LDE1CQkJLyogcjcgPSAxMDAwMDAwID0gVVNFQ19QRVJfU0VDICovCi0Jb3JpICAgICByNyxyNywxNjk2MAotCXJsZGljbCAgcjUscjQsNDQsMjAJCS8qIHI1ID0gc2VjID0geHNlYyAvIFhTRUNfUEVSX1NFQyAqLwotCXJsZGljciAgcjYscjUsMjAsNDMJCS8qIHI2ID0gc2VjICogWFNFQ19QRVJfU0VDICovCi0Jc3RkCXI1LFRWQUw2NF9UVl9TRUMocjExKQkvKiBzdG9yZSBzZWMgaW4gdHYgKi8KLQlzdWJmCXIwLHI2LHI0CQkvKiByMCA9IHhzZWMgPSAoeHNlYyAtIHI2KSAqLwotCW11bGxkICAgcjAscjAscjcJCS8qIHVzZWMgPSAoeHNlYyAqIFVTRUNfUEVSX1NFQykgLwotCQkJCQkgKiBYU0VDX1BFUl9TRUMKLQkJCQkJICovCi0JcmxkaWNsICByMCxyMCw0NCwyMAotCXN0ZAlyMCxUVkFMNjRfVFZfVVNFQyhyMTEpCS8qIHN0b3JlIHVzZWMgaW4gdHYgKi8KKwlsaXMJcjcsMTAwMDAwMEBoYQkJLyogbG9hZCB1cCBVU0VDX1BFUl9TRUMgKi8KKwlhZGRpCXI3LHI3LDEwMDAwMDBAbAorCWJsCVZfTE9DQUxfRlVOQyhfX2RvX2dldF90c3BlYykgLyogZ2V0IHNlYy91cyBmcm9tIHRiICYga2VybmVsICovCisJc3RkCXI0LFRWQUw2NF9UVl9TRUMocjExKQkvKiBzdG9yZSBzZWMgaW4gdHYgKi8KKwlzdGQJcjUsVFZBTDY0X1RWX1VTRUMocjExKQkvKiBzdG9yZSB1c2VjIGluIHR2ICovCiAyOgljbXBsZGkJcjEwLDAJCQkvKiBjaGVjayBpZiB0eiBpcyBOVUxMICovCiAJYmVxCTFmCiAJbHd6CXI0LENGR19UWl9NSU5VVEVXRVNUKHIzKS8qIGZpbGwgdHogKi8KQEAgLTc3LDYgKzcwLDggQEAKICAgLmNmaV9yZWdpc3RlciBscixyMTIKIAltcglyMTEscjQJCQkvKiByMTEgc2F2ZXMgdHAgKi8KIAlibAlWX0xPQ0FMX0ZVTkMoX19nZXRfZGF0YXBhZ2UpCS8qIGdldCBkYXRhIHBhZ2UgKi8KKwlsaXMJcjcsTlNFQ19QRVJfU0VDQGgJLyogd2FudCBuYW5vc2Vjb25kcyAqLworCW9yaQlyNyxyNyxOU0VDX1BFUl9TRUNAbAogNTA6CWJsCVZfTE9DQUxfRlVOQyhfX2RvX2dldF90c3BlYykJLyogZ2V0IHRpbWUgZnJvbSB0YiAmIGtlcm5lbCAqLwogCWJuZQljcjEsODBmCQkJLyogaWYgbm90IG1vbm90b25pYywgYWxsIGRvbmUgKi8KIApAQCAtMTcxLDQ5ICsxNjYsMTIgQEAKIAogCiAvKgotICogVGhpcyBpcyB0aGUgY29yZSBvZiBnZXR0aW1lb2ZkYXkoKSwgaXQgcmV0dXJucyB0aGUgeHNlYwotICogdmFsdWUgaW4gcjQgYW5kIGV4cGVjdHMgdGhlIGRhdGFwYWdlIHB0ciAobm9uIGNsb2JiZXJlZCkKLSAqIGluIHIzLiBjbG9iYmVycyByMCxyNCxyNSxyNixyNyxyOAotICogV2hlbiByZXR1cm5pbmcsIHI4IGNvbnRhaW5zIHRoZSBjb3VudGVyIHZhbHVlIHRoYXQgY2FuIGJlIHJldXNlZAotICovCi1WX0ZVTkNUSU9OX0JFR0lOKF9fZG9fZ2V0X3hzZWMpCi0gIC5jZmlfc3RhcnRwcm9jCi0JLyogY2hlY2sgZm9yIHVwZGF0ZSBjb3VudCAmIGxvYWQgdmFsdWVzICovCi0xOglsZAlyOCxDRkdfVEJfVVBEQVRFX0NPVU5UKHIzKQotCWFuZGkuCXIwLHI4LDEJCQkvKiBwZW5kaW5nIHVwZGF0ZSA/IGxvb3AgKi8KLQlibmUtCTFiCi0JeG9yCXIwLHI4LHI4CQkvKiBjcmVhdGUgZGVwZW5kZW5jeSAqLwotCWFkZAlyMyxyMyxyMAotCi0JLyogR2V0IFRCICYgb2Zmc2V0IGl0LiBXZSB1c2UgdGhlIE1GVEIgbWFjcm8gd2hpY2ggd2lsbCBnZW5lcmF0ZQotCSAqIHdvcmthcm91bmQgY29kZSBmb3IgQ2VsbC4KLQkgKi8KLQlNRlRCKHI3KQotCWxkCXI5LENGR19UQl9PUklHX1NUQU1QKHIzKQotCXN1YmYJcjcscjkscjcKLQotCS8qIFNjYWxlIHJlc3VsdCAqLwotCWxkCXI1LENGR19UQl9UT19YUyhyMykKLQltdWxoZHUJcjcscjcscjUKLQotCS8qIEFkZCBzdGFtcCBzaW5jZSBlcG9jaCAqLwotCWxkCXI2LENGR19TVEFNUF9YU0VDKHIzKQotCWFkZAlyNCxyNixyNwotCi0JeG9yCXIwLHI0LHI0Ci0JYWRkCXIzLHIzLHIwCi0JbGQJcjAsQ0ZHX1RCX1VQREFURV9DT1VOVChyMykKLSAgICAgICAgY21wbGQgICBjcjAscjAscjgJCS8qIGNoZWNrIGlmIHVwZGF0ZWQgKi8KLQlibmUtCTFiCi0JYmxyCi0gIC5jZmlfZW5kcHJvYwotVl9GVU5DVElPTl9FTkQoX19kb19nZXRfeHNlYykKLQotLyoKLSAqIFRoaXMgaXMgdGhlIGNvcmUgb2YgY2xvY2tfZ2V0dGltZSgpLCBpdCByZXR1cm5zIHRoZSBjdXJyZW50Ci0gKiB0aW1lIGluIHNlY29uZHMgYW5kIG5hbm9zZWNvbmRzIGluIHI0IGFuZCByNS4KKyAqIFRoaXMgaXMgdGhlIGNvcmUgb2YgY2xvY2tfZ2V0dGltZSgpIGFuZCBnZXR0aW1lb2ZkYXkoKSwKKyAqIGl0IHJldHVybnMgdGhlIGN1cnJlbnQgdGltZSBpbiByNCAoc2Vjb25kcykgYW5kIHI1LgorICogT24gZW50cnksIHI3IGdpdmVzIHRoZSByZXNvbHV0aW9uIG9mIHI1LCBlaXRoZXIgVVNFQ19QRVJfU0VDCisgKiBvciBOU0VDX1BFUl9TRUMsIGdpdmluZyByNSBpbiBtaWNyb3NlY29uZHMgb3IgbmFub3NlY29uZHMuCiAgKiBJdCBleHBlY3RzIHRoZSBkYXRhcGFnZSBwdHIgaW4gcjMgYW5kIGRvZXNuJ3QgY2xvYmJlciBpdC4KLSAqIEl0IGNsb2JiZXJzIHIwIGFuZCByNiBhbmQgcmV0dXJucyBOU0VDX1BFUl9TRUMgaW4gcjcuCisgKiBJdCBjbG9iYmVycyByMCwgcjYgYW5kIHI5LgogICogT24gcmV0dXJuLCByOCBjb250YWlucyB0aGUgY291bnRlciB2YWx1ZSB0aGF0IGNhbiBiZSByZXVzZWQuCiAgKiBUaGlzIGNsb2JiZXJzIGNyMCBidXQgbm90IGFueSBvdGhlciBjciBmaWVsZC4KICAqLwpAQCAtMjI5LDE4ICsxODcsMTggQEAKIAkvKiBHZXQgVEIgJiBvZmZzZXQgaXQuIFdlIHVzZSB0aGUgTUZUQiBtYWNybyB3aGljaCB3aWxsIGdlbmVyYXRlCiAJICogd29ya2Fyb3VuZCBjb2RlIGZvciBDZWxsLgogCSAqLwotCU1GVEIocjcpCisJTUZUQihyNikKIAlsZAlyOSxDRkdfVEJfT1JJR19TVEFNUChyMykKLQlzdWJmCXI3LHI5LHI3CisJc3ViZglyNixyOSxyNgogCiAJLyogU2NhbGUgcmVzdWx0ICovCiAJbGQJcjUsQ0ZHX1RCX1RPX1hTKHIzKQotCXNsZGkJcjcscjcsMTIJCS8qIGNvbXB1dGUgdGltZSBzaW5jZSBzdGFtcF94dGltZSAqLwotCW11bGhkdQlyNixyNyxyNQkJLyogaW4gdW5pdHMgb2YgMl4tMzIgc2Vjb25kcyAqLworCXNsZGkJcjYscjYsMTIJCS8qIGNvbXB1dGUgdGltZSBzaW5jZSBzdGFtcF94dGltZSAqLworCW11bGhkdQlyNixyNixyNQkJLyogaW4gdW5pdHMgb2YgMl4tMzIgc2Vjb25kcyAqLwogCiAJLyogQWRkIHN0YW1wIHNpbmNlIGVwb2NoICovCiAJbGQJcjQsU1RBTVBfWFRJTUUrVFNQQzY0X1RWX1NFQyhyMykKLQlsZAlyNSxTVEFNUF9YVElNRStUU1BDNjRfVFZfTlNFQyhyMykKKwlsd3oJcjUsU1RBTVBfU0VDX0ZSQUMocjMpCiAJb3IJcjAscjQscjUKIAlvcglyMCxyMCxyNgogCXhvcglyMCxyMCxyMApAQCAtMjUwLDE3ICsyMDgsMTEgQEAKIAlibmUtCTFiCQkJLyogcmVsb2FkIGlmIHNvICovCiAKIAkvKiBjb252ZXJ0IHRvIHNlY29uZHMgJiBuYW5vc2Vjb25kcyBhbmQgYWRkIHRvIHN0YW1wICovCi0JbGlzCXI3LE5TRUNfUEVSX1NFQ0BoCi0Jb3JpCXI3LHI3LE5TRUNfUEVSX1NFQ0BsCi0JbXVsaHd1CXIwLHI2LHI3CQkvKiBjb21wdXRlIG5hbm9zZWNvbmRzIGFuZCAqLworCWFkZAlyNixyNixyNQkJLyogYWRkIG9uIGZyYWN0aW9uYWwgc2Vjb25kcyBvZiB4dGltZSAqLworCW11bGh3dQlyNSxyNixyNwkJLyogY29tcHV0ZSBtaWNybyBvciBuYW5vc2Vjb25kcyBhbmQgKi8KIAlzcmRpCXI2LHI2LDMyCQkvKiBzZWNvbmRzIHNpbmNlIHN0YW1wX3h0aW1lICovCi0JY2xybGRpCXIwLHIwLDMyCi0JYWRkCXI1LHI1LHIwCQkvKiBhZGQgbmFub3NlY29uZHMgdG9nZXRoZXIgKi8KLQljbXBkCXI1LHI3CQkJLyogb3ZlcmZsb3c/ICovCisJY2xybGRpCXI1LHI1LDMyCiAJYWRkCXI0LHI0LHI2Ci0JYmx0bHIJCQkJLyogYWxsIGRvbmUgaWYgbm8gb3ZlcmZsb3cgKi8KLQlzdWJmCXI1LHI3LHI1CQkvKiBpZiBvdmVyZmxvdywgYWRqdXN0ICovCi0JYWRkaQlyNCxyNCwxCiAJYmxyCiAgIC5jZmlfZW5kcHJvYwogVl9GVU5DVElPTl9FTkQoX19kb19nZXRfdHNwZWMpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuYyBiL2FyY2gvcG93ZXJwYy9rdm0vNDR4X3RsYi5jCmluZGV4IDgxMjMxMjUuLjliOWI1Y2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vNDR4X3RsYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vNDR4X3RsYi5jCkBAIC0zMTYsNyArMzE2LDggQEAKIAlnZm4gPSBncGFkZHIgPj4gUEFHRV9TSElGVDsKIAluZXdfcGFnZSA9IGdmbl90b19wYWdlKHZjcHUtPmt2bSwgZ2ZuKTsKIAlpZiAoaXNfZXJyb3JfcGFnZShuZXdfcGFnZSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZG4ndCBnZXQgZ3Vlc3QgcGFnZSBmb3IgZ2ZuICVseCFcbiIsIGdmbik7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgZ2V0IGd1ZXN0IHBhZ2UgZm9yIGdmbiAlbGx4IVxuIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpZ2ZuKTsKIAkJa3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihuZXdfcGFnZSk7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZQppbmRleCBmZjQzNjA2Li5kNDVjODE4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUKQEAgLTQ1LDYgKzQ1LDcgQEAKIAlib29rM3MubyBcCiAJYm9vazNzX2VtdWxhdGUubyBcCiAJYm9vazNzX2ludGVycnVwdHMubyBcCisJYm9vazNzX21tdV9ocHRlLm8gXAogCWJvb2szc182NF9tbXVfaG9zdC5vIFwKIAlib29rM3NfNjRfbW11Lm8gXAogCWJvb2szc18zMl9tbXUubwpAQCAtNTcsNiArNTgsNyBAQAogCWJvb2szcy5vIFwKIAlib29rM3NfZW11bGF0ZS5vIFwKIAlib29rM3NfaW50ZXJydXB0cy5vIFwKKwlib29rM3NfbW11X2hwdGUubyBcCiAJYm9vazNzXzMyX21tdV9ob3N0Lm8gXAogCWJvb2szc18zMl9tbXUubwoga3ZtLW9ianMtJChDT05GSUdfS1ZNX0JPT0szU18zMikgOj0gJChrdm0tYm9vazNzXzMyLW9ianMpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3MuYwppbmRleCBiOTk4YWJmLi5hM2NlZjMwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzLmMKQEAgLTEwNDcsOCArMTA0Nyw2IEBACiB7CiAJaW50IGk7CiAKLQl2Y3B1X2xvYWQodmNwdSk7Ci0KIAlyZWdzLT5wYyA9IGt2bXBwY19nZXRfcGModmNwdSk7CiAJcmVncy0+Y3IgPSBrdm1wcGNfZ2V0X2NyKHZjcHUpOwogCXJlZ3MtPmN0ciA9IGt2bXBwY19nZXRfY3RyKHZjcHUpOwpAQCAtMTA2OSw4ICsxMDY3LDYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWdzLT5ncHIpOyBpKyspCiAJCXJlZ3MtPmdwcltpXSA9IGt2bXBwY19nZXRfZ3ByKHZjcHUsIGkpOwogCi0JdmNwdV9wdXQodmNwdSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA3OCw4ICsxMDc0LDYgQEAKIHsKIAlpbnQgaTsKIAotCXZjcHVfbG9hZCh2Y3B1KTsKLQogCWt2bXBwY19zZXRfcGModmNwdSwgcmVncy0+cGMpOwogCWt2bXBwY19zZXRfY3IodmNwdSwgcmVncy0+Y3IpOwogCWt2bXBwY19zZXRfY3RyKHZjcHUsIHJlZ3MtPmN0cik7CkBAIC0xMDk5LDggKzEwOTMsNiBAQAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZ3MtPmdwcik7IGkrKykKIAkJa3ZtcHBjX3NldF9ncHIodmNwdSwgaSwgcmVncy0+Z3ByW2ldKTsKIAotCXZjcHVfcHV0KHZjcHUpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMTAsOCArMTEwMiw2IEBACiAJc3RydWN0IGt2bXBwY192Y3B1X2Jvb2szcyAqdmNwdTNzID0gdG9fYm9vazNzKHZjcHUpOwogCWludCBpOwogCi0JdmNwdV9sb2FkKHZjcHUpOwotCiAJc3JlZ3MtPnB2ciA9IHZjcHUtPmFyY2gucHZyOwogCiAJc3JlZ3MtPnUucy5zZHIxID0gdG9fYm9vazNzKHZjcHUpLT5zZHIxOwpAQCAtMTEzMSw4ICsxMTIxLDYgQEAKIAkJfQogCX0KIAotCXZjcHVfcHV0KHZjcHUpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExNDIsOCArMTEzMCw2IEBACiAJc3RydWN0IGt2bXBwY192Y3B1X2Jvb2szcyAqdmNwdTNzID0gdG9fYm9vazNzKHZjcHUpOwogCWludCBpOwogCi0JdmNwdV9sb2FkKHZjcHUpOwotCiAJa3ZtcHBjX3NldF9wdnIodmNwdSwgc3JlZ3MtPnB2cik7CiAKIAl2Y3B1M3MtPnNkcjEgPSBzcmVncy0+dS5zLnNkcjE7CkBAIC0xMTcxLDggKzExNTcsNiBAQAogCS8qIEZsdXNoIHRoZSBNTVUgYWZ0ZXIgbWVzc2luZyB3aXRoIHRoZSBzZWdtZW50cyAqLwogCWt2bXBwY19tbXVfcHRlX2ZsdXNoKHZjcHUsIDAsIDApOwogCi0JdmNwdV9wdXQodmNwdSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTMwOSwxMiArMTI5MywxNyBAQAogaW50IF9fa3ZtcHBjX3ZjcHVfcnVuKHN0cnVjdCBrdm1fcnVuICprdm1fcnVuLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJaW50IHJldDsKLQlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCBleHRfYmtwOworCWRvdWJsZSBmcHJbMzJdW1RTX0ZQUldJRFRIXTsKKwl1bnNpZ25lZCBpbnQgZnBzY3I7CisJaW50IGZwZXhjX21vZGU7CiAjaWZkZWYgQ09ORklHX0FMVElWRUMKLQlib29sIHNhdmVfdmVjID0gY3VycmVudC0+dGhyZWFkLnVzZWRfdnI7CisJdmVjdG9yMTI4IHZyWzMyXTsKKwl2ZWN0b3IxMjggdnNjcjsKKwl1bnNpZ25lZCBsb25nIHVuaW5pdGlhbGl6ZWRfdmFyKHZyc2F2ZSk7CisJaW50IHVzZWRfdnI7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfVlNYCi0JYm9vbCBzYXZlX3ZzeCA9IGN1cnJlbnQtPnRocmVhZC51c2VkX3ZzcjsKKwlpbnQgdXNlZF92c3I7CiAjZW5kaWYKIAl1bG9uZyBleHRfbXNyOwogCkBAIC0xMzI3LDI3ICsxMzE2LDI3IEBACiAJLyogU2F2ZSBGUFUgc3RhdGUgaW4gc3RhY2sgKi8KIAlpZiAoY3VycmVudC0+dGhyZWFkLnJlZ3MtPm1zciAmIE1TUl9GUCkKIAkJZ2l2ZXVwX2ZwdShjdXJyZW50KTsKLQltZW1jcHkoZXh0X2JrcC5mcHIsIGN1cnJlbnQtPnRocmVhZC5mcHIsIHNpemVvZihjdXJyZW50LT50aHJlYWQuZnByKSk7Ci0JZXh0X2JrcC5mcHNjciA9IGN1cnJlbnQtPnRocmVhZC5mcHNjcjsKLQlleHRfYmtwLmZwZXhjX21vZGUgPSBjdXJyZW50LT50aHJlYWQuZnBleGNfbW9kZTsKKwltZW1jcHkoZnByLCBjdXJyZW50LT50aHJlYWQuZnByLCBzaXplb2YoY3VycmVudC0+dGhyZWFkLmZwcikpOworCWZwc2NyID0gY3VycmVudC0+dGhyZWFkLmZwc2NyLnZhbDsKKwlmcGV4Y19tb2RlID0gY3VycmVudC0+dGhyZWFkLmZwZXhjX21vZGU7CiAKICNpZmRlZiBDT05GSUdfQUxUSVZFQwogCS8qIFNhdmUgQWx0aXZlYyBzdGF0ZSBpbiBzdGFjayAqLwotCWlmIChzYXZlX3ZlYykgeworCXVzZWRfdnIgPSBjdXJyZW50LT50aHJlYWQudXNlZF92cjsKKwlpZiAodXNlZF92cikgewogCQlpZiAoY3VycmVudC0+dGhyZWFkLnJlZ3MtPm1zciAmIE1TUl9WRUMpCiAJCQlnaXZldXBfYWx0aXZlYyhjdXJyZW50KTsKLQkJbWVtY3B5KGV4dF9ia3AudnIsIGN1cnJlbnQtPnRocmVhZC52ciwgc2l6ZW9mKGV4dF9ia3AudnIpKTsKLQkJZXh0X2JrcC52c2NyID0gY3VycmVudC0+dGhyZWFkLnZzY3I7Ci0JCWV4dF9ia3AudnJzYXZlID0gY3VycmVudC0+dGhyZWFkLnZyc2F2ZTsKKwkJbWVtY3B5KHZyLCBjdXJyZW50LT50aHJlYWQudnIsIHNpemVvZihjdXJyZW50LT50aHJlYWQudnIpKTsKKwkJdnNjciA9IGN1cnJlbnQtPnRocmVhZC52c2NyOworCQl2cnNhdmUgPSBjdXJyZW50LT50aHJlYWQudnJzYXZlOwogCX0KLQlleHRfYmtwLnVzZWRfdnIgPSBjdXJyZW50LT50aHJlYWQudXNlZF92cjsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1ZTWAogCS8qIFNhdmUgVlNYIHN0YXRlIGluIHN0YWNrICovCi0JaWYgKHNhdmVfdnN4ICYmIChjdXJyZW50LT50aHJlYWQucmVncy0+bXNyICYgTVNSX1ZTWCkpCisJdXNlZF92c3IgPSBjdXJyZW50LT50aHJlYWQudXNlZF92c3I7CisJaWYgKHVzZWRfdnNyICYmIChjdXJyZW50LT50aHJlYWQucmVncy0+bXNyICYgTVNSX1ZTWCkpCiAJCQlfX2dpdmV1cF92c3goY3VycmVudCk7Ci0JZXh0X2JrcC51c2VkX3ZzciA9IGN1cnJlbnQtPnRocmVhZC51c2VkX3ZzcjsKICNlbmRpZgogCiAJLyogUmVtZW1iZXIgdGhlIE1TUiB3aXRoIGRpc2FibGVkIGV4dGVuc2lvbnMgKi8KQEAgLTEzNzIsMjIgKzEzNjEsMjIgQEAKIAlrdm1wcGNfZ2l2ZXVwX2V4dCh2Y3B1LCBNU1JfVlNYKTsKIAogCS8qIFJlc3RvcmUgRlBVIHN0YXRlIGZyb20gc3RhY2sgKi8KLQltZW1jcHkoY3VycmVudC0+dGhyZWFkLmZwciwgZXh0X2JrcC5mcHIsIHNpemVvZihleHRfYmtwLmZwcikpOwotCWN1cnJlbnQtPnRocmVhZC5mcHNjciA9IGV4dF9ia3AuZnBzY3I7Ci0JY3VycmVudC0+dGhyZWFkLmZwZXhjX21vZGUgPSBleHRfYmtwLmZwZXhjX21vZGU7CisJbWVtY3B5KGN1cnJlbnQtPnRocmVhZC5mcHIsIGZwciwgc2l6ZW9mKGN1cnJlbnQtPnRocmVhZC5mcHIpKTsKKwljdXJyZW50LT50aHJlYWQuZnBzY3IudmFsID0gZnBzY3I7CisJY3VycmVudC0+dGhyZWFkLmZwZXhjX21vZGUgPSBmcGV4Y19tb2RlOwogCiAjaWZkZWYgQ09ORklHX0FMVElWRUMKIAkvKiBSZXN0b3JlIEFsdGl2ZWMgc3RhdGUgZnJvbSBzdGFjayAqLwotCWlmIChzYXZlX3ZlYyAmJiBjdXJyZW50LT50aHJlYWQudXNlZF92cikgewotCQltZW1jcHkoY3VycmVudC0+dGhyZWFkLnZyLCBleHRfYmtwLnZyLCBzaXplb2YoZXh0X2JrcC52cikpOwotCQljdXJyZW50LT50aHJlYWQudnNjciA9IGV4dF9ia3AudnNjcjsKLQkJY3VycmVudC0+dGhyZWFkLnZyc2F2ZT0gZXh0X2JrcC52cnNhdmU7CisJaWYgKHVzZWRfdnIgJiYgY3VycmVudC0+dGhyZWFkLnVzZWRfdnIpIHsKKwkJbWVtY3B5KGN1cnJlbnQtPnRocmVhZC52ciwgdnIsIHNpemVvZihjdXJyZW50LT50aHJlYWQudnIpKTsKKwkJY3VycmVudC0+dGhyZWFkLnZzY3IgPSB2c2NyOworCQljdXJyZW50LT50aHJlYWQudnJzYXZlID0gdnJzYXZlOwogCX0KLQljdXJyZW50LT50aHJlYWQudXNlZF92ciA9IGV4dF9ia3AudXNlZF92cjsKKwljdXJyZW50LT50aHJlYWQudXNlZF92ciA9IHVzZWRfdnI7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19WU1gKLQljdXJyZW50LT50aHJlYWQudXNlZF92c3IgPSBleHRfYmtwLnVzZWRfdnNyOworCWN1cnJlbnQtPnRocmVhZC51c2VkX3ZzciA9IHVzZWRfdnNyOwogI2VuZGlmCiAKIAlyZXR1cm4gcmV0OwpAQCAtMTM5NSwxMiArMTM4NCwyMiBAQAogCiBzdGF0aWMgaW50IGt2bXBwY19ib29rM3NfaW5pdCh2b2lkKQogewotCXJldHVybiBrdm1faW5pdChOVUxMLCBzaXplb2Yoc3RydWN0IGt2bXBwY192Y3B1X2Jvb2szcyksIDAsCi0JCQlUSElTX01PRFVMRSk7CisJaW50IHI7CisKKwlyID0ga3ZtX2luaXQoTlVMTCwgc2l6ZW9mKHN0cnVjdCBrdm1wcGNfdmNwdV9ib29rM3MpLCAwLAorCQkgICAgIFRISVNfTU9EVUxFKTsKKworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCXIgPSBrdm1wcGNfbW11X2hwdGVfc3lzaW5pdCgpOworCisJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bXBwY19ib29rM3NfZXhpdCh2b2lkKQogeworCWt2bXBwY19tbXVfaHB0ZV9zeXNleGl0KCk7CiAJa3ZtX2V4aXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfMzJfbW11LmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc18zMl9tbXUuYwppbmRleCAwYjEwNTAzLi4zMjkyZDc2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc18zMl9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc18zMl9tbXUuYwpAQCAtMzU0LDEwICszNTQsMTAgQEAKIAkJKnZzaWQgPSBWU0lEX1JFQUxfRFIgfCBndnNpZDsKIAkJYnJlYWs7CiAJY2FzZSBNU1JfRFJ8TVNSX0lSOgotCQlpZiAoIXNyLT52YWxpZCkKLQkJCXJldHVybiAtMTsKLQotCQkqdnNpZCA9IHNyLT52c2lkOworCQlpZiAoc3ItPnZhbGlkKQorCQkJKnZzaWQgPSBzci0+dnNpZDsKKwkJZWxzZQorCQkJKnZzaWQgPSBWU0lEX0JBVCB8IGd2c2lkOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzMyX21tdV9ob3N0LmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc18zMl9tbXVfaG9zdC5jCmluZGV4IDBiYjY2MDAuLjBiNTFlZjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzMyX21tdV9ob3N0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfMzJfbW11X2hvc3QuYwpAQCAtMTksNiArMTksNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KIAogI2luY2x1ZGUgPGFzbS9rdm1fcHBjLmg+CiAjaW5jbHVkZSA8YXNtL2t2bV9ib29rM3MuaD4KQEAgLTU3LDEzOSArNTgsMjYgQEAKIHN0YXRpYyB1bG9uZyBodGFiOwogc3RhdGljIHUzMiBodGFibWFzazsKIAotc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9wdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgaHB0ZV9jYWNoZSAqcHRlKQordm9pZCBrdm1wcGNfbW11X2ludmFsaWRhdGVfcHRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGhwdGVfY2FjaGUgKnB0ZSkKIHsKIAl2b2xhdGlsZSB1MzIgKnB0ZWc7CiAKLQlkcHJpbnRrX21tdSgiS1ZNOiBGbHVzaGluZyBTUFRFOiAweCVsbHggKDB4JWxseCkgLT4gMHglbGx4XG4iLAotCQkgICAgcHRlLT5wdGUuZWFkZHIsIHB0ZS0+cHRlLnZwYWdlLCBwdGUtPmhvc3RfdmEpOwotCisJLyogUmVtb3ZlIGZyb20gaG9zdCBIVEFCICovCiAJcHRlZyA9ICh1MzIqKXB0ZS0+c2xvdDsKLQogCXB0ZWdbMF0gPSAwOworCisJLyogQW5kIG1ha2Ugc3VyZSBpdCdzIGdvbmUgZnJvbSB0aGUgVExCIHRvbyAqLwogCWFzbSB2b2xhdGlsZSAoInN5bmMiKTsKIAlhc20gdm9sYXRpbGUgKCJ0bGJpZSAlMCIgOiA6ICJyIiAocHRlLT5wdGUuZWFkZHIpIDogIm1lbW9yeSIpOwogCWFzbSB2b2xhdGlsZSAoInN5bmMiKTsKIAlhc20gdm9sYXRpbGUgKCJ0bGJzeW5jIik7Ci0KLQlwdGUtPmhvc3RfdmEgPSAwOwotCi0JaWYgKHB0ZS0+cHRlLm1heV93cml0ZSkKLQkJa3ZtX3JlbGVhc2VfcGZuX2RpcnR5KHB0ZS0+cGZuKTsKLQllbHNlCi0JCWt2bV9yZWxlYXNlX3Bmbl9jbGVhbihwdGUtPnBmbik7Ci19Ci0KLXZvaWQga3ZtcHBjX21tdV9wdGVfZmx1c2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bG9uZyBndWVzdF9lYSwgdWxvbmcgZWFfbWFzaykKLXsKLQlpbnQgaTsKLQotCWRwcmludGtfbW11KCJLVk06IEZsdXNoaW5nICVkIFNoYWRvdyBQVEVzOiAweCV4ICYgMHgleFxuIiwKLQkJICAgIHZjcHUtPmFyY2guaHB0ZV9jYWNoZV9vZmZzZXQsIGd1ZXN0X2VhLCBlYV9tYXNrKTsKLQlCVUdfT04odmNwdS0+YXJjaC5ocHRlX2NhY2hlX29mZnNldCA+IEhQVEVHX0NBQ0hFX05VTSk7Ci0KLQlndWVzdF9lYSAmPSBlYV9tYXNrOwotCWZvciAoaSA9IDA7IGkgPCB2Y3B1LT5hcmNoLmhwdGVfY2FjaGVfb2Zmc2V0OyBpKyspIHsKLQkJc3RydWN0IGhwdGVfY2FjaGUgKnB0ZTsKLQotCQlwdGUgPSAmdmNwdS0+YXJjaC5ocHRlX2NhY2hlW2ldOwotCQlpZiAoIXB0ZS0+aG9zdF92YSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICgocHRlLT5wdGUuZWFkZHIgJiBlYV9tYXNrKSA9PSBndWVzdF9lYSkgewotCQkJaW52YWxpZGF0ZV9wdGUodmNwdSwgcHRlKTsKLQkJfQotCX0KLQotCS8qIERvaW5nIGEgY29tcGxldGUgZmx1c2ggLT4gc3RhcnQgZnJvbSBzY3JhdGNoICovCi0JaWYgKCFlYV9tYXNrKQotCQl2Y3B1LT5hcmNoLmhwdGVfY2FjaGVfb2Zmc2V0ID0gMDsKLX0KLQotdm9pZCBrdm1wcGNfbW11X3B0ZV92Zmx1c2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZ3Vlc3RfdnAsIHU2NCB2cF9tYXNrKQotewotCWludCBpOwotCi0JZHByaW50a19tbXUoIktWTTogRmx1c2hpbmcgJWQgU2hhZG93IHZQVEVzOiAweCVsbHggJiAweCVsbHhcbiIsCi0JCSAgICB2Y3B1LT5hcmNoLmhwdGVfY2FjaGVfb2Zmc2V0LCBndWVzdF92cCwgdnBfbWFzayk7Ci0JQlVHX09OKHZjcHUtPmFyY2guaHB0ZV9jYWNoZV9vZmZzZXQgPiBIUFRFR19DQUNIRV9OVU0pOwotCi0JZ3Vlc3RfdnAgJj0gdnBfbWFzazsKLQlmb3IgKGkgPSAwOyBpIDwgdmNwdS0+YXJjaC5ocHRlX2NhY2hlX29mZnNldDsgaSsrKSB7Ci0JCXN0cnVjdCBocHRlX2NhY2hlICpwdGU7Ci0KLQkJcHRlID0gJnZjcHUtPmFyY2guaHB0ZV9jYWNoZVtpXTsKLQkJaWYgKCFwdGUtPmhvc3RfdmEpCi0JCQljb250aW51ZTsKLQotCQlpZiAoKHB0ZS0+cHRlLnZwYWdlICYgdnBfbWFzaykgPT0gZ3Vlc3RfdnApIHsKLQkJCWludmFsaWRhdGVfcHRlKHZjcHUsIHB0ZSk7Ci0JCX0KLQl9Ci19Ci0KLXZvaWQga3ZtcHBjX21tdV9wdGVfcGZsdXNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWxvbmcgcGFfc3RhcnQsIHVsb25nIHBhX2VuZCkKLXsKLQlpbnQgaTsKLQotCWRwcmludGtfbW11KCJLVk06IEZsdXNoaW5nICVkIFNoYWRvdyBwUFRFczogMHglbGx4ICYgMHglbGx4XG4iLAotCQkgICAgdmNwdS0+YXJjaC5ocHRlX2NhY2hlX29mZnNldCwgcGFfc3RhcnQsIHBhX2VuZCk7Ci0JQlVHX09OKHZjcHUtPmFyY2guaHB0ZV9jYWNoZV9vZmZzZXQgPiBIUFRFR19DQUNIRV9OVU0pOwotCi0JZm9yIChpID0gMDsgaSA8IHZjcHUtPmFyY2guaHB0ZV9jYWNoZV9vZmZzZXQ7IGkrKykgewotCQlzdHJ1Y3QgaHB0ZV9jYWNoZSAqcHRlOwotCi0JCXB0ZSA9ICZ2Y3B1LT5hcmNoLmhwdGVfY2FjaGVbaV07Ci0JCWlmICghcHRlLT5ob3N0X3ZhKQotCQkJY29udGludWU7Ci0KLQkJaWYgKChwdGUtPnB0ZS5yYWRkciA+PSBwYV9zdGFydCkgJiYKLQkJICAgIChwdGUtPnB0ZS5yYWRkciA8IHBhX2VuZCkpIHsKLQkJCWludmFsaWRhdGVfcHRlKHZjcHUsIHB0ZSk7Ci0JCX0KLQl9Ci19Ci0KLXN0cnVjdCBrdm1wcGNfcHRlICprdm1wcGNfbW11X2ZpbmRfcHRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGVhLCBib29sIGRhdGEpCi17Ci0JaW50IGk7Ci0JdTY0IGd1ZXN0X3ZwOwotCi0JZ3Vlc3RfdnAgPSB2Y3B1LT5hcmNoLm1tdS5lYV90b192cCh2Y3B1LCBlYSwgZmFsc2UpOwotCWZvciAoaT0wOyBpPHZjcHUtPmFyY2guaHB0ZV9jYWNoZV9vZmZzZXQ7IGkrKykgewotCQlzdHJ1Y3QgaHB0ZV9jYWNoZSAqcHRlOwotCi0JCXB0ZSA9ICZ2Y3B1LT5hcmNoLmhwdGVfY2FjaGVbaV07Ci0JCWlmICghcHRlLT5ob3N0X3ZhKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHB0ZS0+cHRlLnZwYWdlID09IGd1ZXN0X3ZwKQotCQkJcmV0dXJuICZwdGUtPnB0ZTsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGludCBrdm1wcGNfbW11X2hwdGVfY2FjaGVfbmV4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0JaWYgKHZjcHUtPmFyY2guaHB0ZV9jYWNoZV9vZmZzZXQgPT0gSFBURUdfQ0FDSEVfTlVNKQotCQlrdm1wcGNfbW11X3B0ZV9mbHVzaCh2Y3B1LCAwLCAwKTsKLQotCXJldHVybiB2Y3B1LT5hcmNoLmhwdGVfY2FjaGVfb2Zmc2V0Kys7CiB9CiAKIC8qIFdlIGtlZXAgNTEyIGd2c2lkLT5odnNpZCBlbnRyaWVzLCBtYXBwaW5nIHRoZSBndWVzdCBvbmVzIHRvIHRoZSBhcnJheSB1c2luZwogICogYSBoYXNoLCBzbyB3ZSBkb24ndCB3YXN0ZSBjeWNsZXMgb24gbG9vcGluZyAqLwogc3RhdGljIHUxNiBrdm1wcGNfc2lkX2hhc2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZ3ZzaWQpCiB7Ci0JcmV0dXJuICh1MTYpKCgoZ3ZzaWQgPj4gKFNJRF9NQVBfQklUUyAqIDcpKSAmIFNJRF9NQVBfTUFTSykgXgotCQkgICAgICgoZ3ZzaWQgPj4gKFNJRF9NQVBfQklUUyAqIDYpKSAmIFNJRF9NQVBfTUFTSykgXgotCQkgICAgICgoZ3ZzaWQgPj4gKFNJRF9NQVBfQklUUyAqIDUpKSAmIFNJRF9NQVBfTUFTSykgXgotCQkgICAgICgoZ3ZzaWQgPj4gKFNJRF9NQVBfQklUUyAqIDQpKSAmIFNJRF9NQVBfTUFTSykgXgotCQkgICAgICgoZ3ZzaWQgPj4gKFNJRF9NQVBfQklUUyAqIDMpKSAmIFNJRF9NQVBfTUFTSykgXgotCQkgICAgICgoZ3ZzaWQgPj4gKFNJRF9NQVBfQklUUyAqIDIpKSAmIFNJRF9NQVBfTUFTSykgXgotCQkgICAgICgoZ3ZzaWQgPj4gKFNJRF9NQVBfQklUUyAqIDEpKSAmIFNJRF9NQVBfTUFTSykgXgotCQkgICAgICgoZ3ZzaWQgPj4gKFNJRF9NQVBfQklUUyAqIDApKSAmIFNJRF9NQVBfTUFTSykpOworCXJldHVybiBoYXNoXzY0KGd2c2lkLCBTSURfTUFQX0JJVFMpOwogfQogCiAKQEAgLTI1Niw3ICsxNDQsNiBAQAogCXJlZ2lzdGVyIGludCByciA9IDA7CiAJYm9vbCBwcmltYXJ5ID0gZmFsc2U7CiAJYm9vbCBldmljdCA9IGZhbHNlOwotCWludCBocHRlX2lkOwogCXN0cnVjdCBocHRlX2NhY2hlICpwdGU7CiAKIAkvKiBHZXQgaG9zdCBwaHlzaWNhbCBhZGRyZXNzIGZvciBncGEgKi8KQEAgLTM0MSw4ICsyMjgsNyBAQAogCiAJLyogTm93IHRlbGwgb3VyIFNoYWRvdyBQVEUgY29kZSBhYm91dCB0aGUgbmV3IHBhZ2UgKi8KIAotCWhwdGVfaWQgPSBrdm1wcGNfbW11X2hwdGVfY2FjaGVfbmV4dCh2Y3B1KTsKLQlwdGUgPSAmdmNwdS0+YXJjaC5ocHRlX2NhY2hlW2hwdGVfaWRdOworCXB0ZSA9IGt2bXBwY19tbXVfaHB0ZV9jYWNoZV9uZXh0KHZjcHUpOwogCiAJZHByaW50a19tbXUoIktWTTogJWMlYyBNYXAgMHglbGx4OiBbJWx4XSAweCVsbHggKDB4JWxseCkgLT4gJWx4XG4iLAogCQkgICAgb3JpZ19wdGUtPm1heV93cml0ZSA/ICd3JyA6ICctJywKQEAgLTM1NSw2ICsyNDEsOCBAQAogCXB0ZS0+cHRlID0gKm9yaWdfcHRlOwogCXB0ZS0+cGZuID0gaHBhZGRyID4+IFBBR0VfU0hJRlQ7CiAKKwlrdm1wcGNfbW11X2hwdGVfY2FjaGVfbWFwKHZjcHUsIHB0ZSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDM5LDcgKzMyNyw3IEBACiAKIHZvaWQga3ZtcHBjX21tdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlrdm1wcGNfbW11X3B0ZV9mbHVzaCh2Y3B1LCAwLCAwKTsKKwlrdm1wcGNfbW11X2hwdGVfZGVzdHJveSh2Y3B1KTsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlfX2Rlc3Ryb3lfY29udGV4dCh0b19ib29rM3ModmNwdSktPmNvbnRleHRfaWQpOwogCXByZWVtcHRfZW5hYmxlKCk7CkBAIC00NzksNSArMzY3LDcgQEAKIAlodGFibWFzayA9ICgoc2RyMSAmIDB4MUZGKSA8PCAxNikgfCAweEZGQzA7CiAJaHRhYiA9ICh1bG9uZylfX3ZhKHNkcjEgJiAweGZmZmYwMDAwKTsKIAorCWt2bXBwY19tbXVfaHB0ZV9pbml0KHZjcHUpOworCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfaG9zdC5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X2hvc3QuYwppbmRleCBlNGI1NzQ0Li4zODQxNzlhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfaG9zdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9ob3N0LmMKQEAgLTIwLDYgKzIwLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CiAKICNpbmNsdWRlIDxhc20va3ZtX3BwYy5oPgogI2luY2x1ZGUgPGFzbS9rdm1fYm9vazNzLmg+CkBAIC00NiwxMzUgKzQ3LDIwIEBACiAjZGVmaW5lIGRwcmludGtfc2xiKGEsIC4uLikgZG8geyB9IHdoaWxlKDApCiAjZW5kaWYKIAotc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9wdGUoc3RydWN0IGhwdGVfY2FjaGUgKnB0ZSkKK3ZvaWQga3ZtcHBjX21tdV9pbnZhbGlkYXRlX3B0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBocHRlX2NhY2hlICpwdGUpCiB7Ci0JZHByaW50a19tbXUoIktWTTogRmx1c2hpbmcgU1BUOiAweCVseCAoMHglbGx4KSAtPiAweCVsbHhcbiIsCi0JCSAgICBwdGUtPnB0ZS5lYWRkciwgcHRlLT5wdGUudnBhZ2UsIHB0ZS0+aG9zdF92YSk7Ci0KIAlwcGNfbWQuaHB0ZV9pbnZhbGlkYXRlKHB0ZS0+c2xvdCwgcHRlLT5ob3N0X3ZhLAogCQkJICAgICAgIE1NVV9QQUdFXzRLLCBNTVVfU0VHU0laRV8yNTZNLAogCQkJICAgICAgIGZhbHNlKTsKLQlwdGUtPmhvc3RfdmEgPSAwOwotCi0JaWYgKHB0ZS0+cHRlLm1heV93cml0ZSkKLQkJa3ZtX3JlbGVhc2VfcGZuX2RpcnR5KHB0ZS0+cGZuKTsKLQllbHNlCi0JCWt2bV9yZWxlYXNlX3Bmbl9jbGVhbihwdGUtPnBmbik7Ci19Ci0KLXZvaWQga3ZtcHBjX21tdV9wdGVfZmx1c2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bG9uZyBndWVzdF9lYSwgdWxvbmcgZWFfbWFzaykKLXsKLQlpbnQgaTsKLQotCWRwcmludGtfbW11KCJLVk06IEZsdXNoaW5nICVkIFNoYWRvdyBQVEVzOiAweCVseCAmIDB4JWx4XG4iLAotCQkgICAgdmNwdS0+YXJjaC5ocHRlX2NhY2hlX29mZnNldCwgZ3Vlc3RfZWEsIGVhX21hc2spOwotCUJVR19PTih2Y3B1LT5hcmNoLmhwdGVfY2FjaGVfb2Zmc2V0ID4gSFBURUdfQ0FDSEVfTlVNKTsKLQotCWd1ZXN0X2VhICY9IGVhX21hc2s7Ci0JZm9yIChpID0gMDsgaSA8IHZjcHUtPmFyY2guaHB0ZV9jYWNoZV9vZmZzZXQ7IGkrKykgewotCQlzdHJ1Y3QgaHB0ZV9jYWNoZSAqcHRlOwotCi0JCXB0ZSA9ICZ2Y3B1LT5hcmNoLmhwdGVfY2FjaGVbaV07Ci0JCWlmICghcHRlLT5ob3N0X3ZhKQotCQkJY29udGludWU7Ci0KLQkJaWYgKChwdGUtPnB0ZS5lYWRkciAmIGVhX21hc2spID09IGd1ZXN0X2VhKSB7Ci0JCQlpbnZhbGlkYXRlX3B0ZShwdGUpOwotCQl9Ci0JfQotCi0JLyogRG9pbmcgYSBjb21wbGV0ZSBmbHVzaCAtPiBzdGFydCBmcm9tIHNjcmF0Y2ggKi8KLQlpZiAoIWVhX21hc2spCi0JCXZjcHUtPmFyY2guaHB0ZV9jYWNoZV9vZmZzZXQgPSAwOwotfQotCi12b2lkIGt2bXBwY19tbXVfcHRlX3ZmbHVzaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBndWVzdF92cCwgdTY0IHZwX21hc2spCi17Ci0JaW50IGk7Ci0KLQlkcHJpbnRrX21tdSgiS1ZNOiBGbHVzaGluZyAlZCBTaGFkb3cgdlBURXM6IDB4JWxseCAmIDB4JWxseFxuIiwKLQkJICAgIHZjcHUtPmFyY2guaHB0ZV9jYWNoZV9vZmZzZXQsIGd1ZXN0X3ZwLCB2cF9tYXNrKTsKLQlCVUdfT04odmNwdS0+YXJjaC5ocHRlX2NhY2hlX29mZnNldCA+IEhQVEVHX0NBQ0hFX05VTSk7Ci0KLQlndWVzdF92cCAmPSB2cF9tYXNrOwotCWZvciAoaSA9IDA7IGkgPCB2Y3B1LT5hcmNoLmhwdGVfY2FjaGVfb2Zmc2V0OyBpKyspIHsKLQkJc3RydWN0IGhwdGVfY2FjaGUgKnB0ZTsKLQotCQlwdGUgPSAmdmNwdS0+YXJjaC5ocHRlX2NhY2hlW2ldOwotCQlpZiAoIXB0ZS0+aG9zdF92YSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICgocHRlLT5wdGUudnBhZ2UgJiB2cF9tYXNrKSA9PSBndWVzdF92cCkgewotCQkJaW52YWxpZGF0ZV9wdGUocHRlKTsKLQkJfQotCX0KLX0KLQotdm9pZCBrdm1wcGNfbW11X3B0ZV9wZmx1c2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bG9uZyBwYV9zdGFydCwgdWxvbmcgcGFfZW5kKQotewotCWludCBpOwotCi0JZHByaW50a19tbXUoIktWTTogRmx1c2hpbmcgJWQgU2hhZG93IHBQVEVzOiAweCVseCAmIDB4JWx4XG4iLAotCQkgICAgdmNwdS0+YXJjaC5ocHRlX2NhY2hlX29mZnNldCwgcGFfc3RhcnQsIHBhX2VuZCk7Ci0JQlVHX09OKHZjcHUtPmFyY2guaHB0ZV9jYWNoZV9vZmZzZXQgPiBIUFRFR19DQUNIRV9OVU0pOwotCi0JZm9yIChpID0gMDsgaSA8IHZjcHUtPmFyY2guaHB0ZV9jYWNoZV9vZmZzZXQ7IGkrKykgewotCQlzdHJ1Y3QgaHB0ZV9jYWNoZSAqcHRlOwotCi0JCXB0ZSA9ICZ2Y3B1LT5hcmNoLmhwdGVfY2FjaGVbaV07Ci0JCWlmICghcHRlLT5ob3N0X3ZhKQotCQkJY29udGludWU7Ci0KLQkJaWYgKChwdGUtPnB0ZS5yYWRkciA+PSBwYV9zdGFydCkgJiYKLQkJICAgIChwdGUtPnB0ZS5yYWRkciA8IHBhX2VuZCkpIHsKLQkJCWludmFsaWRhdGVfcHRlKHB0ZSk7Ci0JCX0KLQl9Ci19Ci0KLXN0cnVjdCBrdm1wcGNfcHRlICprdm1wcGNfbW11X2ZpbmRfcHRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGVhLCBib29sIGRhdGEpCi17Ci0JaW50IGk7Ci0JdTY0IGd1ZXN0X3ZwOwotCi0JZ3Vlc3RfdnAgPSB2Y3B1LT5hcmNoLm1tdS5lYV90b192cCh2Y3B1LCBlYSwgZmFsc2UpOwotCWZvciAoaT0wOyBpPHZjcHUtPmFyY2guaHB0ZV9jYWNoZV9vZmZzZXQ7IGkrKykgewotCQlzdHJ1Y3QgaHB0ZV9jYWNoZSAqcHRlOwotCi0JCXB0ZSA9ICZ2Y3B1LT5hcmNoLmhwdGVfY2FjaGVbaV07Ci0JCWlmICghcHRlLT5ob3N0X3ZhKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHB0ZS0+cHRlLnZwYWdlID09IGd1ZXN0X3ZwKQotCQkJcmV0dXJuICZwdGUtPnB0ZTsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGludCBrdm1wcGNfbW11X2hwdGVfY2FjaGVfbmV4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0JaWYgKHZjcHUtPmFyY2guaHB0ZV9jYWNoZV9vZmZzZXQgPT0gSFBURUdfQ0FDSEVfTlVNKQotCQlrdm1wcGNfbW11X3B0ZV9mbHVzaCh2Y3B1LCAwLCAwKTsKLQotCXJldHVybiB2Y3B1LT5hcmNoLmhwdGVfY2FjaGVfb2Zmc2V0Kys7CiB9CiAKIC8qIFdlIGtlZXAgNTEyIGd2c2lkLT5odnNpZCBlbnRyaWVzLCBtYXBwaW5nIHRoZSBndWVzdCBvbmVzIHRvIHRoZSBhcnJheSB1c2luZwogICogYSBoYXNoLCBzbyB3ZSBkb24ndCB3YXN0ZSBjeWNsZXMgb24gbG9vcGluZyAqLwogc3RhdGljIHUxNiBrdm1wcGNfc2lkX2hhc2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZ3ZzaWQpCiB7Ci0JcmV0dXJuICh1MTYpKCgoZ3ZzaWQgPj4gKFNJRF9NQVBfQklUUyAqIDcpKSAmIFNJRF9NQVBfTUFTSykgXgotCQkgICAgICgoZ3ZzaWQgPj4gKFNJRF9NQVBfQklUUyAqIDYpKSAmIFNJRF9NQVBfTUFTSykgXgotCQkgICAgICgoZ3ZzaWQgPj4gKFNJRF9NQVBfQklUUyAqIDUpKSAmIFNJRF9NQVBfTUFTSykgXgotCQkgICAgICgoZ3ZzaWQgPj4gKFNJRF9NQVBfQklUUyAqIDQpKSAmIFNJRF9NQVBfTUFTSykgXgotCQkgICAgICgoZ3ZzaWQgPj4gKFNJRF9NQVBfQklUUyAqIDMpKSAmIFNJRF9NQVBfTUFTSykgXgotCQkgICAgICgoZ3ZzaWQgPj4gKFNJRF9NQVBfQklUUyAqIDIpKSAmIFNJRF9NQVBfTUFTSykgXgotCQkgICAgICgoZ3ZzaWQgPj4gKFNJRF9NQVBfQklUUyAqIDEpKSAmIFNJRF9NQVBfTUFTSykgXgotCQkgICAgICgoZ3ZzaWQgPj4gKFNJRF9NQVBfQklUUyAqIDApKSAmIFNJRF9NQVBfTUFTSykpOworCXJldHVybiBoYXNoXzY0KGd2c2lkLCBTSURfTUFQX0JJVFMpOwogfQogCi0KIHN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX3NpZF9tYXAgKmZpbmRfc2lkX3ZzaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZ3ZzaWQpCiB7CiAJc3RydWN0IGt2bXBwY19zaWRfbWFwICptYXA7CkBAIC0yNzMsOCArMTU5LDcgQEAKIAkJYXR0ZW1wdCsrOwogCQlnb3RvIG1hcF9hZ2FpbjsKIAl9IGVsc2UgewotCQlpbnQgaHB0ZV9pZCA9IGt2bXBwY19tbXVfaHB0ZV9jYWNoZV9uZXh0KHZjcHUpOwotCQlzdHJ1Y3QgaHB0ZV9jYWNoZSAqcHRlID0gJnZjcHUtPmFyY2guaHB0ZV9jYWNoZVtocHRlX2lkXTsKKwkJc3RydWN0IGhwdGVfY2FjaGUgKnB0ZSA9IGt2bXBwY19tbXVfaHB0ZV9jYWNoZV9uZXh0KHZjcHUpOwogCiAJCWRwcmludGtfbW11KCJLVk06ICVjJWMgTWFwIDB4JWx4OiBbJWx4XSAweCVseCAoMHglbGx4KSAtPiAlbHhcbiIsCiAJCQkgICAgKChyZmxhZ3MgJiBIUFRFX1JfUFApID09IDMpID8gJy0nIDogJ3cnLApAQCAtMjkyLDYgKzE3Nyw4IEBACiAJCXB0ZS0+aG9zdF92YSA9IHZhOwogCQlwdGUtPnB0ZSA9ICpvcmlnX3B0ZTsKIAkJcHRlLT5wZm4gPSBocGFkZHIgPj4gUEFHRV9TSElGVDsKKworCQlrdm1wcGNfbW11X2hwdGVfY2FjaGVfbWFwKHZjcHUsIHB0ZSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00MTgsNyArMzA1LDcgQEAKIAogdm9pZCBrdm1wcGNfbW11X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCWt2bXBwY19tbXVfcHRlX2ZsdXNoKHZjcHUsIDAsIDApOworCWt2bXBwY19tbXVfaHB0ZV9kZXN0cm95KHZjcHUpOwogCV9fZGVzdHJveV9jb250ZXh0KHRvX2Jvb2szcyh2Y3B1KS0+Y29udGV4dF9pZCk7CiB9CiAKQEAgLTQzNiw1ICszMjMsNyBAQAogCXZjcHUzcy0+dnNpZF9maXJzdCA9IHZjcHUzcy0+Y29udGV4dF9pZCA8PCBVU0VSX0VTSURfQklUUzsKIAl2Y3B1M3MtPnZzaWRfbmV4dCA9IHZjcHUzcy0+dnNpZF9maXJzdDsKIAorCWt2bXBwY19tbXVfaHB0ZV9pbml0KHZjcHUpOworCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19tbXVfaHB0ZS5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfbW11X2hwdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODY4ZDRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfbW11X2hwdGUuYwpAQCAtMCwwICsxLDI3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTVVNFIExpbnV4IFByb2R1Y3RzIEdtYkguIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQXV0aG9yczoKKyAqICAgICBBbGV4YW5kZXIgR3JhZiA8YWdyYWZAc3VzZS5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSA8YXNtL2t2bV9wcGMuaD4KKyNpbmNsdWRlIDxhc20va3ZtX2Jvb2szcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgorCisjZGVmaW5lIFBURV9TSVpFCTEyCisKKy8qICNkZWZpbmUgREVCVUdfTU1VICovCisKKyNpZmRlZiBERUJVR19NTVUKKyNkZWZpbmUgZHByaW50a19tbXUoYSwgLi4uKSBwcmludGsoS0VSTl9JTkZPIGEsIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgZHByaW50a19tbXUoYSwgLi4uKSBkbyB7IH0gd2hpbGUoMCkKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmhwdGVfY2FjaGU7CisKK3N0YXRpYyBpbmxpbmUgdTY0IGt2bXBwY19tbXVfaGFzaF9wdGUodTY0IGVhZGRyKQoreworCXJldHVybiBoYXNoXzY0KGVhZGRyID4+IFBURV9TSVpFLCBIUFRFR19IQVNIX0JJVFNfUFRFKTsKK30KKworc3RhdGljIGlubGluZSB1NjQga3ZtcHBjX21tdV9oYXNoX3ZwdGUodTY0IHZwYWdlKQoreworCXJldHVybiBoYXNoXzY0KHZwYWdlICYgMHhmZmZmZmZmZmZVTEwsIEhQVEVHX0hBU0hfQklUU19WUFRFKTsKK30KKworc3RhdGljIGlubGluZSB1NjQga3ZtcHBjX21tdV9oYXNoX3ZwdGVfbG9uZyh1NjQgdnBhZ2UpCit7CisJcmV0dXJuIGhhc2hfNjQoKHZwYWdlICYgMHhmZmZmZmYwMDBVTEwpID4+IDEyLAorCQkgICAgICAgSFBURUdfSEFTSF9CSVRTX1ZQVEVfTE9ORyk7Cit9CisKK3ZvaWQga3ZtcHBjX21tdV9ocHRlX2NhY2hlX21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBocHRlX2NhY2hlICpwdGUpCit7CisJdTY0IGluZGV4OworCisJLyogQWRkIHRvIGVQVEUgbGlzdCAqLworCWluZGV4ID0ga3ZtcHBjX21tdV9oYXNoX3B0ZShwdGUtPnB0ZS5lYWRkcik7CisJaGxpc3RfYWRkX2hlYWQoJnB0ZS0+bGlzdF9wdGUsICZ2Y3B1LT5hcmNoLmhwdGVfaGFzaF9wdGVbaW5kZXhdKTsKKworCS8qIEFkZCB0byB2UFRFIGxpc3QgKi8KKwlpbmRleCA9IGt2bXBwY19tbXVfaGFzaF92cHRlKHB0ZS0+cHRlLnZwYWdlKTsKKwlobGlzdF9hZGRfaGVhZCgmcHRlLT5saXN0X3ZwdGUsICZ2Y3B1LT5hcmNoLmhwdGVfaGFzaF92cHRlW2luZGV4XSk7CisKKwkvKiBBZGQgdG8gdlBURV9sb25nIGxpc3QgKi8KKwlpbmRleCA9IGt2bXBwY19tbXVfaGFzaF92cHRlX2xvbmcocHRlLT5wdGUudnBhZ2UpOworCWhsaXN0X2FkZF9oZWFkKCZwdGUtPmxpc3RfdnB0ZV9sb25nLAorCQkgICAgICAgJnZjcHUtPmFyY2guaHB0ZV9oYXNoX3ZwdGVfbG9uZ1tpbmRleF0pOworfQorCitzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3B0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBocHRlX2NhY2hlICpwdGUpCit7CisJZHByaW50a19tbXUoIktWTTogRmx1c2hpbmcgU1BUOiAweCVseCAoMHglbGx4KSAtPiAweCVsbHhcbiIsCisJCSAgICBwdGUtPnB0ZS5lYWRkciwgcHRlLT5wdGUudnBhZ2UsIHB0ZS0+aG9zdF92YSk7CisKKwkvKiBEaWZmZXJlbnQgZm9yIDMyIGFuZCA2NCBiaXQgKi8KKwlrdm1wcGNfbW11X2ludmFsaWRhdGVfcHRlKHZjcHUsIHB0ZSk7CisKKwlpZiAocHRlLT5wdGUubWF5X3dyaXRlKQorCQlrdm1fcmVsZWFzZV9wZm5fZGlydHkocHRlLT5wZm4pOworCWVsc2UKKwkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHB0ZS0+cGZuKTsKKworCWhsaXN0X2RlbCgmcHRlLT5saXN0X3B0ZSk7CisJaGxpc3RfZGVsKCZwdGUtPmxpc3RfdnB0ZSk7CisJaGxpc3RfZGVsKCZwdGUtPmxpc3RfdnB0ZV9sb25nKTsKKworCXZjcHUtPmFyY2guaHB0ZV9jYWNoZV9jb3VudC0tOworCWttZW1fY2FjaGVfZnJlZShocHRlX2NhY2hlLCBwdGUpOworfQorCitzdGF0aWMgdm9pZCBrdm1wcGNfbW11X3B0ZV9mbHVzaF9hbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBocHRlX2NhY2hlICpwdGU7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsICp0bXA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSFBURUdfSEFTSF9OVU1fVlBURV9MT05HOyBpKyspIHsKKwkJc3RydWN0IGhsaXN0X2hlYWQgKmxpc3QgPSAmdmNwdS0+YXJjaC5ocHRlX2hhc2hfdnB0ZV9sb25nW2ldOworCisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHRlLCBub2RlLCB0bXAsIGxpc3QsIGxpc3RfdnB0ZV9sb25nKQorCQkJaW52YWxpZGF0ZV9wdGUodmNwdSwgcHRlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGt2bXBwY19tbXVfcHRlX2ZsdXNoX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bG9uZyBndWVzdF9lYSkKK3sKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqbGlzdDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKnRtcDsKKwlzdHJ1Y3QgaHB0ZV9jYWNoZSAqcHRlOworCisJLyogRmluZCB0aGUgbGlzdCBvZiBlbnRyaWVzIGluIHRoZSBtYXAgKi8KKwlsaXN0ID0gJnZjcHUtPmFyY2guaHB0ZV9oYXNoX3B0ZVtrdm1wcGNfbW11X2hhc2hfcHRlKGd1ZXN0X2VhKV07CisKKwkvKiBDaGVjayB0aGUgbGlzdCBmb3IgbWF0Y2hpbmcgZW50cmllcyBhbmQgaW52YWxpZGF0ZSAqLworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHRlLCBub2RlLCB0bXAsIGxpc3QsIGxpc3RfcHRlKQorCQlpZiAoKHB0ZS0+cHRlLmVhZGRyICYgfjB4ZmZmVUwpID09IGd1ZXN0X2VhKQorCQkJaW52YWxpZGF0ZV9wdGUodmNwdSwgcHRlKTsKK30KKwordm9pZCBrdm1wcGNfbW11X3B0ZV9mbHVzaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVsb25nIGd1ZXN0X2VhLCB1bG9uZyBlYV9tYXNrKQoreworCXU2NCBpOworCisJZHByaW50a19tbXUoIktWTTogRmx1c2hpbmcgJWQgU2hhZG93IFBURXM6IDB4JWx4ICYgMHglbHhcbiIsCisJCSAgICB2Y3B1LT5hcmNoLmhwdGVfY2FjaGVfY291bnQsIGd1ZXN0X2VhLCBlYV9tYXNrKTsKKworCWd1ZXN0X2VhICY9IGVhX21hc2s7CisKKwlzd2l0Y2ggKGVhX21hc2spIHsKKwljYXNlIH4weGZmZlVMOgorCQlrdm1wcGNfbW11X3B0ZV9mbHVzaF9wYWdlKHZjcHUsIGd1ZXN0X2VhKTsKKwkJYnJlYWs7CisJY2FzZSAweDBmZmZmMDAwOgorCQkvKiAzMi1iaXQgZmx1c2ggdy9vIHNlZ21lbnQsIGdvIHRocm91Z2ggYWxsIHBvc3NpYmxlIHNlZ21lbnRzICovCisJCWZvciAoaSA9IDA7IGkgPCAweDEwMDAwMDAwMFVMTDsgaSArPSAweDEwMDAwMDAwVUxMKQorCQkJa3ZtcHBjX21tdV9wdGVfZmx1c2godmNwdSwgZ3Vlc3RfZWEgfCBpLCB+MHhmZmZVTCk7CisJCWJyZWFrOworCWNhc2UgMDoKKwkJLyogRG9pbmcgYSBjb21wbGV0ZSBmbHVzaCAtPiBzdGFydCBmcm9tIHNjcmF0Y2ggKi8KKwkJa3ZtcHBjX21tdV9wdGVfZmx1c2hfYWxsKHZjcHUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOworCQlicmVhazsKKwl9Cit9CisKKy8qIEZsdXNoIHdpdGggbWFzayAweGZmZmZmZmZmZiAqLworc3RhdGljIHZvaWQga3ZtcHBjX21tdV9wdGVfdmZsdXNoX3Nob3J0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGd1ZXN0X3ZwKQoreworCXN0cnVjdCBobGlzdF9oZWFkICpsaXN0OworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqdG1wOworCXN0cnVjdCBocHRlX2NhY2hlICpwdGU7CisJdTY0IHZwX21hc2sgPSAweGZmZmZmZmZmZlVMTDsKKworCWxpc3QgPSAmdmNwdS0+YXJjaC5ocHRlX2hhc2hfdnB0ZVtrdm1wcGNfbW11X2hhc2hfdnB0ZShndWVzdF92cCldOworCisJLyogQ2hlY2sgdGhlIGxpc3QgZm9yIG1hdGNoaW5nIGVudHJpZXMgYW5kIGludmFsaWRhdGUgKi8KKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHB0ZSwgbm9kZSwgdG1wLCBsaXN0LCBsaXN0X3ZwdGUpCisJCWlmICgocHRlLT5wdGUudnBhZ2UgJiB2cF9tYXNrKSA9PSBndWVzdF92cCkKKwkJCWludmFsaWRhdGVfcHRlKHZjcHUsIHB0ZSk7Cit9CisKKy8qIEZsdXNoIHdpdGggbWFzayAweGZmZmZmZjAwMCAqLworc3RhdGljIHZvaWQga3ZtcHBjX21tdV9wdGVfdmZsdXNoX2xvbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZ3Vlc3RfdnApCit7CisJc3RydWN0IGhsaXN0X2hlYWQgKmxpc3Q7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsICp0bXA7CisJc3RydWN0IGhwdGVfY2FjaGUgKnB0ZTsKKwl1NjQgdnBfbWFzayA9IDB4ZmZmZmZmMDAwVUxMOworCisJbGlzdCA9ICZ2Y3B1LT5hcmNoLmhwdGVfaGFzaF92cHRlX2xvbmdbCisJCWt2bXBwY19tbXVfaGFzaF92cHRlX2xvbmcoZ3Vlc3RfdnApXTsKKworCS8qIENoZWNrIHRoZSBsaXN0IGZvciBtYXRjaGluZyBlbnRyaWVzIGFuZCBpbnZhbGlkYXRlICovCisJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwdGUsIG5vZGUsIHRtcCwgbGlzdCwgbGlzdF92cHRlX2xvbmcpCisJCWlmICgocHRlLT5wdGUudnBhZ2UgJiB2cF9tYXNrKSA9PSBndWVzdF92cCkKKwkJCWludmFsaWRhdGVfcHRlKHZjcHUsIHB0ZSk7Cit9CisKK3ZvaWQga3ZtcHBjX21tdV9wdGVfdmZsdXNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGd1ZXN0X3ZwLCB1NjQgdnBfbWFzaykKK3sKKwlkcHJpbnRrX21tdSgiS1ZNOiBGbHVzaGluZyAlZCBTaGFkb3cgdlBURXM6IDB4JWxseCAmIDB4JWxseFxuIiwKKwkJICAgIHZjcHUtPmFyY2guaHB0ZV9jYWNoZV9jb3VudCwgZ3Vlc3RfdnAsIHZwX21hc2spOworCWd1ZXN0X3ZwICY9IHZwX21hc2s7CisKKwlzd2l0Y2godnBfbWFzaykgeworCWNhc2UgMHhmZmZmZmZmZmZVTEw6CisJCWt2bXBwY19tbXVfcHRlX3ZmbHVzaF9zaG9ydCh2Y3B1LCBndWVzdF92cCk7CisJCWJyZWFrOworCWNhc2UgMHhmZmZmZmYwMDBVTEw6CisJCWt2bXBwY19tbXVfcHRlX3ZmbHVzaF9sb25nKHZjcHUsIGd1ZXN0X3ZwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuOworCX0KK30KKwordm9pZCBrdm1wcGNfbW11X3B0ZV9wZmx1c2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bG9uZyBwYV9zdGFydCwgdWxvbmcgcGFfZW5kKQoreworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqdG1wOworCXN0cnVjdCBocHRlX2NhY2hlICpwdGU7CisJaW50IGk7CisKKwlkcHJpbnRrX21tdSgiS1ZNOiBGbHVzaGluZyAlZCBTaGFkb3cgcFBURXM6IDB4JWx4IC0gMHglbHhcbiIsCisJCSAgICB2Y3B1LT5hcmNoLmhwdGVfY2FjaGVfY291bnQsIHBhX3N0YXJ0LCBwYV9lbmQpOworCisJZm9yIChpID0gMDsgaSA8IEhQVEVHX0hBU0hfTlVNX1ZQVEVfTE9ORzsgaSsrKSB7CisJCXN0cnVjdCBobGlzdF9oZWFkICpsaXN0ID0gJnZjcHUtPmFyY2guaHB0ZV9oYXNoX3ZwdGVfbG9uZ1tpXTsKKworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHB0ZSwgbm9kZSwgdG1wLCBsaXN0LCBsaXN0X3ZwdGVfbG9uZykKKwkJCWlmICgocHRlLT5wdGUucmFkZHIgPj0gcGFfc3RhcnQpICYmCisJCQkgICAgKHB0ZS0+cHRlLnJhZGRyIDwgcGFfZW5kKSkKKwkJCQlpbnZhbGlkYXRlX3B0ZSh2Y3B1LCBwdGUpOworCX0KK30KKworc3RydWN0IGhwdGVfY2FjaGUgKmt2bXBwY19tbXVfaHB0ZV9jYWNoZV9uZXh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3QgaHB0ZV9jYWNoZSAqcHRlOworCisJcHRlID0ga21lbV9jYWNoZV96YWxsb2MoaHB0ZV9jYWNoZSwgR0ZQX0tFUk5FTCk7CisJdmNwdS0+YXJjaC5ocHRlX2NhY2hlX2NvdW50Kys7CisKKwlpZiAodmNwdS0+YXJjaC5ocHRlX2NhY2hlX2NvdW50ID09IEhQVEVHX0NBQ0hFX05VTSkKKwkJa3ZtcHBjX21tdV9wdGVfZmx1c2hfYWxsKHZjcHUpOworCisJcmV0dXJuIHB0ZTsKK30KKwordm9pZCBrdm1wcGNfbW11X2hwdGVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJa3ZtcHBjX21tdV9wdGVfZmx1c2godmNwdSwgMCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGt2bXBwY19tbXVfaHB0ZV9pbml0X2hhc2goc3RydWN0IGhsaXN0X2hlYWQgKmhhc2hfbGlzdCwgaW50IGxlbikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJSU5JVF9ITElTVF9IRUFEKCZoYXNoX2xpc3RbaV0pOworfQorCitpbnQga3ZtcHBjX21tdV9ocHRlX2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCS8qIGluaXQgaHB0ZSBsb29rdXAgaGFzaGVzICovCisJa3ZtcHBjX21tdV9ocHRlX2luaXRfaGFzaCh2Y3B1LT5hcmNoLmhwdGVfaGFzaF9wdGUsCisJCQkJICBBUlJBWV9TSVpFKHZjcHUtPmFyY2guaHB0ZV9oYXNoX3B0ZSkpOworCWt2bXBwY19tbXVfaHB0ZV9pbml0X2hhc2godmNwdS0+YXJjaC5ocHRlX2hhc2hfdnB0ZSwKKwkJCQkgIEFSUkFZX1NJWkUodmNwdS0+YXJjaC5ocHRlX2hhc2hfdnB0ZSkpOworCWt2bXBwY19tbXVfaHB0ZV9pbml0X2hhc2godmNwdS0+YXJjaC5ocHRlX2hhc2hfdnB0ZV9sb25nLAorCQkJCSAgQVJSQVlfU0laRSh2Y3B1LT5hcmNoLmhwdGVfaGFzaF92cHRlX2xvbmcpKTsKKworCXJldHVybiAwOworfQorCitpbnQga3ZtcHBjX21tdV9ocHRlX3N5c2luaXQodm9pZCkKK3sKKwkvKiBpbml0IGhwdGUgc2xhYiBjYWNoZSAqLworCWhwdGVfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgia3ZtLXNwdCIsIHNpemVvZihzdHJ1Y3QgaHB0ZV9jYWNoZSksCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaHB0ZV9jYWNoZSksIDAsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQga3ZtcHBjX21tdV9ocHRlX3N5c2V4aXQodm9pZCkKK3sKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koaHB0ZV9jYWNoZSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wYWlyZWRfc2luZ2xlcy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcGFpcmVkX3NpbmdsZXMuYwppbmRleCBhOWY2NmFiLi40NzRmMmUyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wYWlyZWRfc2luZ2xlcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3BhaXJlZF9zaW5nbGVzLmMKQEAgLTE1OSwxMCArMTU5LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGt2bXBwY19zeW5jX3FwcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBydCkKIHsKLQlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCB0OwotCi0JdC5mcHNjci52YWwgPSB2Y3B1LT5hcmNoLmZwc2NyOwotCWN2dF9kZigoZG91YmxlKikmdmNwdS0+YXJjaC5mcHJbcnRdLCAoZmxvYXQqKSZ2Y3B1LT5hcmNoLnFwcltydF0sICZ0KTsKKwlrdm1fY3Z0X2RmKCZ2Y3B1LT5hcmNoLmZwcltydF0sICZ2Y3B1LT5hcmNoLnFwcltydF0sICZ2Y3B1LT5hcmNoLmZwc2NyKTsKIH0KIAogc3RhdGljIHZvaWQga3ZtcHBjX2luamVjdF9wZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVsb25nIGVhZGRyLCBib29sIGlzX3N0b3JlKQpAQCAtMTgzLDcgKzE4MCw2IEBACiAJCQkJICAgaW50IHJzLCB1bG9uZyBhZGRyLCBpbnQgbHNfdHlwZSkKIHsKIAlpbnQgZW11bGF0ZWQgPSBFTVVMQVRFX0ZBSUw7Ci0Jc3RydWN0IHRocmVhZF9zdHJ1Y3QgdDsKIAlpbnQgcjsKIAljaGFyIHRtcFs4XTsKIAlpbnQgbGVuID0gc2l6ZW9mKHUzMik7CkBAIC0xOTEsOCArMTg3LDYgQEAKIAlpZiAobHNfdHlwZSA9PSBGUFVfTFNfRE9VQkxFKQogCQlsZW4gPSBzaXplb2YodTY0KTsKIAotCXQuZnBzY3IudmFsID0gdmNwdS0+YXJjaC5mcHNjcjsKLQogCS8qIHJlYWQgZnJvbSBtZW1vcnkgKi8KIAlyID0ga3ZtcHBjX2xkKHZjcHUsICZhZGRyLCBsZW4sIHRtcCwgdHJ1ZSk7CiAJdmNwdS0+YXJjaC5wYWRkcl9hY2Nlc3NlZCA9IGFkZHI7CkBAIC0yMTAsNyArMjA0LDcgQEAKIAkvKiBwdXQgaW4gcmVnaXN0ZXJzICovCiAJc3dpdGNoIChsc190eXBlKSB7CiAJY2FzZSBGUFVfTFNfU0lOR0xFOgotCQljdnRfZmQoKGZsb2F0Kil0bXAsIChkb3VibGUqKSZ2Y3B1LT5hcmNoLmZwcltyc10sICZ0KTsKKwkJa3ZtX2N2dF9mZCgodTMyKil0bXAsICZ2Y3B1LT5hcmNoLmZwcltyc10sICZ2Y3B1LT5hcmNoLmZwc2NyKTsKIAkJdmNwdS0+YXJjaC5xcHJbcnNdID0gKigodTMyKil0bXApOwogCQlicmVhazsKIAljYXNlIEZQVV9MU19ET1VCTEU6CkBAIC0yMjksMTcgKzIyMywxNCBAQAogCQkJCSAgICBpbnQgcnMsIHVsb25nIGFkZHIsIGludCBsc190eXBlKQogewogCWludCBlbXVsYXRlZCA9IEVNVUxBVEVfRkFJTDsKLQlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCB0OwogCWludCByOwogCWNoYXIgdG1wWzhdOwogCXU2NCB2YWw7CiAJaW50IGxlbjsKIAotCXQuZnBzY3IudmFsID0gdmNwdS0+YXJjaC5mcHNjcjsKLQogCXN3aXRjaCAobHNfdHlwZSkgewogCWNhc2UgRlBVX0xTX1NJTkdMRToKLQkJY3Z0X2RmKChkb3VibGUqKSZ2Y3B1LT5hcmNoLmZwcltyc10sIChmbG9hdCopdG1wLCAmdCk7CisJCWt2bV9jdnRfZGYoJnZjcHUtPmFyY2guZnByW3JzXSwgKHUzMiopdG1wLCAmdmNwdS0+YXJjaC5mcHNjcik7CiAJCXZhbCA9ICooKHUzMiopdG1wKTsKIAkJbGVuID0gc2l6ZW9mKHUzMik7CiAJCWJyZWFrOwpAQCAtMjc4LDEzICsyNjksMTAgQEAKIAkJCQkgICBpbnQgcnMsIHVsb25nIGFkZHIsIGJvb2wgdywgaW50IGkpCiB7CiAJaW50IGVtdWxhdGVkID0gRU1VTEFURV9GQUlMOwotCXN0cnVjdCB0aHJlYWRfc3RydWN0IHQ7CiAJaW50IHI7CiAJZmxvYXQgb25lID0gMS4wOwogCXUzMiB0bXBbMl07CiAKLQl0LmZwc2NyLnZhbCA9IHZjcHUtPmFyY2guZnBzY3I7Ci0KIAkvKiByZWFkIGZyb20gbWVtb3J5ICovCiAJaWYgKHcpIHsKIAkJciA9IGt2bXBwY19sZCh2Y3B1LCAmYWRkciwgc2l6ZW9mKHUzMiksIHRtcCwgdHJ1ZSk7CkBAIC0zMDgsNyArMjk2LDcgQEAKIAllbXVsYXRlZCA9IEVNVUxBVEVfRE9ORTsKIAogCS8qIHB1dCBpbiByZWdpc3RlcnMgKi8KLQljdnRfZmQoKGZsb2F0KikmdG1wWzBdLCAoZG91YmxlKikmdmNwdS0+YXJjaC5mcHJbcnNdLCAmdCk7CisJa3ZtX2N2dF9mZCgmdG1wWzBdLCAmdmNwdS0+YXJjaC5mcHJbcnNdLCAmdmNwdS0+YXJjaC5mcHNjcik7CiAJdmNwdS0+YXJjaC5xcHJbcnNdID0gdG1wWzFdOwogCiAJZHByaW50ayhLRVJOX0lORk8gIktWTTogUFNRX0xEIFsweCV4LCAweCV4XSBhdCAweCVseCAoJWQpXG4iLCB0bXBbMF0sCkBAIC0zMjIsMTQgKzMxMCwxMSBAQAogCQkJCSAgICBpbnQgcnMsIHVsb25nIGFkZHIsIGJvb2wgdywgaW50IGkpCiB7CiAJaW50IGVtdWxhdGVkID0gRU1VTEFURV9GQUlMOwotCXN0cnVjdCB0aHJlYWRfc3RydWN0IHQ7CiAJaW50IHI7CiAJdTMyIHRtcFsyXTsKIAlpbnQgbGVuID0gdyA/IHNpemVvZih1MzIpIDogc2l6ZW9mKHU2NCk7CiAKLQl0LmZwc2NyLnZhbCA9IHZjcHUtPmFyY2guZnBzY3I7Ci0KLQljdnRfZGYoKGRvdWJsZSopJnZjcHUtPmFyY2guZnByW3JzXSwgKGZsb2F0KikmdG1wWzBdLCAmdCk7CisJa3ZtX2N2dF9kZigmdmNwdS0+YXJjaC5mcHJbcnNdLCAmdG1wWzBdLCAmdmNwdS0+YXJjaC5mcHNjcik7CiAJdG1wWzFdID0gdmNwdS0+YXJjaC5xcHJbcnNdOwogCiAJciA9IGt2bXBwY19zdCh2Y3B1LCAmYWRkciwgbGVuLCB0bXAsIHRydWUpOwpAQCAtNTE3LDcgKzUwMiw3IEBACiBzdGF0aWMgaW50IGt2bXBwY19wc190aHJlZV9pbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcmMsCiAJCQkJICAgICAgaW50IHJlZ19vdXQsIGludCByZWdfaW4xLCBpbnQgcmVnX2luMiwKIAkJCQkgICAgICBpbnQgcmVnX2luMywgaW50IHNjYWxhciwKLQkJCQkgICAgICB2b2lkICgqZnVuYykoc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQsCisJCQkJICAgICAgdm9pZCAoKmZ1bmMpKHU2NCAqZnBzY3IsCiAJCQkJCQkgdTMyICpkc3QsIHUzMiAqc3JjMSwKIAkJCQkJCSB1MzIgKnNyYzIsIHUzMiAqc3JjMykpCiB7CkBAIC01MjYsMjcgKzUxMSwyNSBAQAogCXUzMiBwczBfb3V0OwogCXUzMiBwczBfaW4xLCBwczBfaW4yLCBwczBfaW4zOwogCXUzMiBwczFfaW4xLCBwczFfaW4yLCBwczFfaW4zOwotCXN0cnVjdCB0aHJlYWRfc3RydWN0IHQ7Ci0JdC5mcHNjci52YWwgPSB2Y3B1LT5hcmNoLmZwc2NyOwogCiAJLyogUkMgKi8KIAlXQVJOX09OKHJjKTsKIAogCS8qIFBTMCAqLwotCWN2dF9kZigoZG91YmxlKikmZnByW3JlZ19pbjFdLCAoZmxvYXQqKSZwczBfaW4xLCAmdCk7Ci0JY3Z0X2RmKChkb3VibGUqKSZmcHJbcmVnX2luMl0sIChmbG9hdCopJnBzMF9pbjIsICZ0KTsKLQljdnRfZGYoKGRvdWJsZSopJmZwcltyZWdfaW4zXSwgKGZsb2F0KikmcHMwX2luMywgJnQpOworCWt2bV9jdnRfZGYoJmZwcltyZWdfaW4xXSwgJnBzMF9pbjEsICZ2Y3B1LT5hcmNoLmZwc2NyKTsKKwlrdm1fY3Z0X2RmKCZmcHJbcmVnX2luMl0sICZwczBfaW4yLCAmdmNwdS0+YXJjaC5mcHNjcik7CisJa3ZtX2N2dF9kZigmZnByW3JlZ19pbjNdLCAmcHMwX2luMywgJnZjcHUtPmFyY2guZnBzY3IpOwogCiAJaWYgKHNjYWxhciAmIFNDQUxBUl9MT1cpCiAJCXBzMF9pbjIgPSBxcHJbcmVnX2luMl07CiAKLQlmdW5jKCZ0LCAmcHMwX291dCwgJnBzMF9pbjEsICZwczBfaW4yLCAmcHMwX2luMyk7CisJZnVuYygmdmNwdS0+YXJjaC5mcHNjciwgJnBzMF9vdXQsICZwczBfaW4xLCAmcHMwX2luMiwgJnBzMF9pbjMpOwogCiAJZHByaW50ayhLRVJOX0lORk8gIlBTMyBwczAgLT4gZigweCV4LCAweCV4LCAweCV4KSA9IDB4JXhcbiIsCiAJCQkgIHBzMF9pbjEsIHBzMF9pbjIsIHBzMF9pbjMsIHBzMF9vdXQpOwogCiAJaWYgKCEoc2NhbGFyICYgU0NBTEFSX05PX1BTMCkpCi0JCWN2dF9mZCgoZmxvYXQqKSZwczBfb3V0LCAoZG91YmxlKikmZnByW3JlZ19vdXRdLCAmdCk7CisJCWt2bV9jdnRfZmQoJnBzMF9vdXQsICZmcHJbcmVnX291dF0sICZ2Y3B1LT5hcmNoLmZwc2NyKTsKIAogCS8qIFBTMSAqLwogCXBzMV9pbjEgPSBxcHJbcmVnX2luMV07CkBAIC01NTcsNyArNTQwLDcgQEAKIAkJcHMxX2luMiA9IHBzMF9pbjI7CiAKIAlpZiAoIShzY2FsYXIgJiBTQ0FMQVJfTk9fUFMxKSkKLQkJZnVuYygmdCwgJnFwcltyZWdfb3V0XSwgJnBzMV9pbjEsICZwczFfaW4yLCAmcHMxX2luMyk7CisJCWZ1bmMoJnZjcHUtPmFyY2guZnBzY3IsICZxcHJbcmVnX291dF0sICZwczFfaW4xLCAmcHMxX2luMiwgJnBzMV9pbjMpOwogCiAJZHByaW50ayhLRVJOX0lORk8gIlBTMyBwczEgLT4gZigweCV4LCAweCV4LCAweCV4KSA9IDB4JXhcbiIsCiAJCQkgIHBzMV9pbjEsIHBzMV9pbjIsIHBzMV9pbjMsIHFwcltyZWdfb3V0XSk7CkBAIC01NjgsNyArNTUxLDcgQEAKIHN0YXRpYyBpbnQga3ZtcHBjX3BzX3R3b19pbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcmMsCiAJCQkJICAgIGludCByZWdfb3V0LCBpbnQgcmVnX2luMSwgaW50IHJlZ19pbjIsCiAJCQkJICAgIGludCBzY2FsYXIsCi0JCQkJICAgIHZvaWQgKCpmdW5jKShzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCwKKwkJCQkgICAgdm9pZCAoKmZ1bmMpKHU2NCAqZnBzY3IsCiAJCQkJCQkgdTMyICpkc3QsIHUzMiAqc3JjMSwKIAkJCQkJCSB1MzIgKnNyYzIpKQogewpAQCAtNTc4LDI3ICs1NjEsMjUgQEAKIAl1MzIgcHMwX2luMSwgcHMwX2luMjsKIAl1MzIgcHMxX291dDsKIAl1MzIgcHMxX2luMSwgcHMxX2luMjsKLQlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCB0OwotCXQuZnBzY3IudmFsID0gdmNwdS0+YXJjaC5mcHNjcjsKIAogCS8qIFJDICovCiAJV0FSTl9PTihyYyk7CiAKIAkvKiBQUzAgKi8KLQljdnRfZGYoKGRvdWJsZSopJmZwcltyZWdfaW4xXSwgKGZsb2F0KikmcHMwX2luMSwgJnQpOworCWt2bV9jdnRfZGYoJmZwcltyZWdfaW4xXSwgJnBzMF9pbjEsICZ2Y3B1LT5hcmNoLmZwc2NyKTsKIAogCWlmIChzY2FsYXIgJiBTQ0FMQVJfTE9XKQogCQlwczBfaW4yID0gcXByW3JlZ19pbjJdOwogCWVsc2UKLQkJY3Z0X2RmKChkb3VibGUqKSZmcHJbcmVnX2luMl0sIChmbG9hdCopJnBzMF9pbjIsICZ0KTsKKwkJa3ZtX2N2dF9kZigmZnByW3JlZ19pbjJdLCAmcHMwX2luMiwgJnZjcHUtPmFyY2guZnBzY3IpOwogCi0JZnVuYygmdCwgJnBzMF9vdXQsICZwczBfaW4xLCAmcHMwX2luMik7CisJZnVuYygmdmNwdS0+YXJjaC5mcHNjciwgJnBzMF9vdXQsICZwczBfaW4xLCAmcHMwX2luMik7CiAKIAlpZiAoIShzY2FsYXIgJiBTQ0FMQVJfTk9fUFMwKSkgewogCQlkcHJpbnRrKEtFUk5fSU5GTyAiUFMyIHBzMCAtPiBmKDB4JXgsIDB4JXgpID0gMHgleFxuIiwKIAkJCQkgIHBzMF9pbjEsIHBzMF9pbjIsIHBzMF9vdXQpOwogCi0JCWN2dF9mZCgoZmxvYXQqKSZwczBfb3V0LCAoZG91YmxlKikmZnByW3JlZ19vdXRdLCAmdCk7CisJCWt2bV9jdnRfZmQoJnBzMF9vdXQsICZmcHJbcmVnX291dF0sICZ2Y3B1LT5hcmNoLmZwc2NyKTsKIAl9CiAKIAkvKiBQUzEgKi8KQEAgLTYwOCw3ICs1ODksNyBAQAogCWlmIChzY2FsYXIgJiBTQ0FMQVJfSElHSCkKIAkJcHMxX2luMiA9IHBzMF9pbjI7CiAKLQlmdW5jKCZ0LCAmcHMxX291dCwgJnBzMV9pbjEsICZwczFfaW4yKTsKKwlmdW5jKCZ2Y3B1LT5hcmNoLmZwc2NyLCAmcHMxX291dCwgJnBzMV9pbjEsICZwczFfaW4yKTsKIAogCWlmICghKHNjYWxhciAmIFNDQUxBUl9OT19QUzEpKSB7CiAJCXFwcltyZWdfb3V0XSA9IHBzMV9vdXQ7CkBAIC02MjIsMzEgKzYwMywyOSBAQAogCiBzdGF0aWMgaW50IGt2bXBwY19wc19vbmVfaW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHJjLAogCQkJCSAgICBpbnQgcmVnX291dCwgaW50IHJlZ19pbiwKLQkJCQkgICAgdm9pZCAoKmZ1bmMpKHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0LAorCQkJCSAgICB2b2lkICgqZnVuYykodTY0ICp0LAogCQkJCQkJIHUzMiAqZHN0LCB1MzIgKnNyYzEpKQogewogCXUzMiAqcXByID0gdmNwdS0+YXJjaC5xcHI7CiAJdTY0ICpmcHIgPSB2Y3B1LT5hcmNoLmZwcjsKIAl1MzIgcHMwX291dCwgcHMwX2luOwogCXUzMiBwczFfaW47Ci0Jc3RydWN0IHRocmVhZF9zdHJ1Y3QgdDsKLQl0LmZwc2NyLnZhbCA9IHZjcHUtPmFyY2guZnBzY3I7CiAKIAkvKiBSQyAqLwogCVdBUk5fT04ocmMpOwogCiAJLyogUFMwICovCi0JY3Z0X2RmKChkb3VibGUqKSZmcHJbcmVnX2luXSwgKGZsb2F0KikmcHMwX2luLCAmdCk7Ci0JZnVuYygmdCwgJnBzMF9vdXQsICZwczBfaW4pOworCWt2bV9jdnRfZGYoJmZwcltyZWdfaW5dLCAmcHMwX2luLCAmdmNwdS0+YXJjaC5mcHNjcik7CisJZnVuYygmdmNwdS0+YXJjaC5mcHNjciwgJnBzMF9vdXQsICZwczBfaW4pOwogCiAJZHByaW50ayhLRVJOX0lORk8gIlBTMSBwczAgLT4gZigweCV4KSA9IDB4JXhcbiIsCiAJCQkgIHBzMF9pbiwgcHMwX291dCk7CiAKLQljdnRfZmQoKGZsb2F0KikmcHMwX291dCwgKGRvdWJsZSopJmZwcltyZWdfb3V0XSwgJnQpOworCWt2bV9jdnRfZmQoJnBzMF9vdXQsICZmcHJbcmVnX291dF0sICZ2Y3B1LT5hcmNoLmZwc2NyKTsKIAogCS8qIFBTMSAqLwogCXBzMV9pbiA9IHFwcltyZWdfaW5dOwotCWZ1bmMoJnQsICZxcHJbcmVnX291dF0sICZwczFfaW4pOworCWZ1bmMoJnZjcHUtPmFyY2guZnBzY3IsICZxcHJbcmVnX291dF0sICZwczFfaW4pOwogCiAJZHByaW50ayhLRVJOX0lORk8gIlBTMSBwczEgLT4gZigweCV4KSA9IDB4JXhcbiIsCiAJCQkgIHBzMV9pbiwgcXByW3JlZ19vdXRdKTsKQEAgLTY3MiwxMyArNjUxLDEwIEBACiAKIAlib29sIHJjb21wID0gKGluc3QgJiAxKSA/IHRydWUgOiBmYWxzZTsKIAl1MzIgY3IgPSBrdm1wcGNfZ2V0X2NyKHZjcHUpOwotCXN0cnVjdCB0aHJlYWRfc3RydWN0IHQ7CiAjaWZkZWYgREVCVUcKIAlpbnQgaTsKICNlbmRpZgogCi0JdC5mcHNjci52YWwgPSB2Y3B1LT5hcmNoLmZwc2NyOwotCiAJaWYgKCFrdm1wcGNfaW5zdF9pc19wYWlyZWRfc2luZ2xlKHZjcHUsIGluc3QpKQogCQlyZXR1cm4gRU1VTEFURV9GQUlMOwogCkBAIC02OTUsNyArNjcxLDcgQEAKICNpZmRlZiBERUJVRwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZjcHUtPmFyY2guZnByKTsgaSsrKSB7CiAJCXUzMiBmOwotCQljdnRfZGYoKGRvdWJsZSopJnZjcHUtPmFyY2guZnByW2ldLCAoZmxvYXQqKSZmLCAmdCk7CisJCWt2bV9jdnRfZGYoJnZjcHUtPmFyY2guZnByW2ldLCAmZiwgJnZjcHUtPmFyY2guZnBzY3IpOwogCQlkcHJpbnRrKEtFUk5fSU5GTyAiRlBSWyVkXSA9IDB4JXggLyAweCVsbHggICAgUVBSWyVkXSA9IDB4JXhcbiIsCiAJCQlpLCBmLCB2Y3B1LT5hcmNoLmZwcltpXSwgaSwgdmNwdS0+YXJjaC5xcHJbaV0pOwogCX0KQEAgLTgxOSw4ICs3OTUsOSBAQAogCQkJV0FSTl9PTihyY29tcCk7CiAJCQl2Y3B1LT5hcmNoLmZwcltheF9yZF0gPSB2Y3B1LT5hcmNoLmZwcltheF9yYV07CiAJCQkvKiB2Y3B1LT5hcmNoLnFwcltheF9yZF0gPSB2Y3B1LT5hcmNoLmZwcltheF9yYl07ICovCi0JCQljdnRfZGYoKGRvdWJsZSopJnZjcHUtPmFyY2guZnByW2F4X3JiXSwKLQkJCSAgICAgICAoZmxvYXQqKSZ2Y3B1LT5hcmNoLnFwcltheF9yZF0sICZ0KTsKKwkJCWt2bV9jdnRfZGYoJnZjcHUtPmFyY2guZnByW2F4X3JiXSwKKwkJCQkgICAmdmNwdS0+YXJjaC5xcHJbYXhfcmRdLAorCQkJCSAgICZ2Y3B1LT5hcmNoLmZwc2NyKTsKIAkJCWJyZWFrOwogCQljYXNlIE9QXzRYX1BTX01FUkdFMDE6CiAJCQlXQVJOX09OKHJjb21wKTsKQEAgLTgzMCwxNyArODA3LDIwIEBACiAJCWNhc2UgT1BfNFhfUFNfTUVSR0UxMDoKIAkJCVdBUk5fT04ocmNvbXApOwogCQkJLyogdmNwdS0+YXJjaC5mcHJbYXhfcmRdID0gdmNwdS0+YXJjaC5xcHJbYXhfcmFdOyAqLwotCQkJY3Z0X2ZkKChmbG9hdCopJnZjcHUtPmFyY2gucXByW2F4X3JhXSwKLQkJCSAgICAgICAoZG91YmxlKikmdmNwdS0+YXJjaC5mcHJbYXhfcmRdLCAmdCk7CisJCQlrdm1fY3Z0X2ZkKCZ2Y3B1LT5hcmNoLnFwcltheF9yYV0sCisJCQkJICAgJnZjcHUtPmFyY2guZnByW2F4X3JkXSwKKwkJCQkgICAmdmNwdS0+YXJjaC5mcHNjcik7CiAJCQkvKiB2Y3B1LT5hcmNoLnFwcltheF9yZF0gPSB2Y3B1LT5hcmNoLmZwcltheF9yYl07ICovCi0JCQljdnRfZGYoKGRvdWJsZSopJnZjcHUtPmFyY2guZnByW2F4X3JiXSwKLQkJCSAgICAgICAoZmxvYXQqKSZ2Y3B1LT5hcmNoLnFwcltheF9yZF0sICZ0KTsKKwkJCWt2bV9jdnRfZGYoJnZjcHUtPmFyY2guZnByW2F4X3JiXSwKKwkJCQkgICAmdmNwdS0+YXJjaC5xcHJbYXhfcmRdLAorCQkJCSAgICZ2Y3B1LT5hcmNoLmZwc2NyKTsKIAkJCWJyZWFrOwogCQljYXNlIE9QXzRYX1BTX01FUkdFMTE6CiAJCQlXQVJOX09OKHJjb21wKTsKIAkJCS8qIHZjcHUtPmFyY2guZnByW2F4X3JkXSA9IHZjcHUtPmFyY2gucXByW2F4X3JhXTsgKi8KLQkJCWN2dF9mZCgoZmxvYXQqKSZ2Y3B1LT5hcmNoLnFwcltheF9yYV0sCi0JCQkgICAgICAgKGRvdWJsZSopJnZjcHUtPmFyY2guZnByW2F4X3JkXSwgJnQpOworCQkJa3ZtX2N2dF9mZCgmdmNwdS0+YXJjaC5xcHJbYXhfcmFdLAorCQkJCSAgICZ2Y3B1LT5hcmNoLmZwcltheF9yZF0sCisJCQkJICAgJnZjcHUtPmFyY2guZnBzY3IpOwogCQkJdmNwdS0+YXJjaC5xcHJbYXhfcmRdID0gdmNwdS0+YXJjaC5xcHJbYXhfcmJdOwogCQkJYnJlYWs7CiAJCX0KQEAgLTEyNzUsNyArMTI1NSw3IEBACiAjaWZkZWYgREVCVUcKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2Y3B1LT5hcmNoLmZwcik7IGkrKykgewogCQl1MzIgZjsKLQkJY3Z0X2RmKChkb3VibGUqKSZ2Y3B1LT5hcmNoLmZwcltpXSwgKGZsb2F0KikmZiwgJnQpOworCQlrdm1fY3Z0X2RmKCZ2Y3B1LT5hcmNoLmZwcltpXSwgJmYsICZ2Y3B1LT5hcmNoLmZwc2NyKTsKIAkJZHByaW50ayhLRVJOX0lORk8gIkZQUlslZF0gPSAweCV4XG4iLCBpLCBmKTsKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9va2UuYyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9va2UuYwppbmRleCBhMzNhYjhjLi44ZDRlMzVmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jCkBAIC0xNDQsNyArMTQ0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcHJpb3JpdHkpCiB7CiAJaW50IGFsbG93ZWQgPSAwOwotCXVsb25nIG1zcl9tYXNrOworCXVsb25nIHVuaW5pdGlhbGl6ZWRfdmFyKG1zcl9tYXNrKTsKIAlib29sIHVwZGF0ZV9lc3IgPSBmYWxzZSwgdXBkYXRlX2RlYXIgPSBmYWxzZTsKIAogCXN3aXRjaCAocHJpb3JpdHkpIHsKQEAgLTQ4NSw4ICs0ODUsNiBAQAogewogCWludCBpOwogCi0JdmNwdV9sb2FkKHZjcHUpOwotCiAJcmVncy0+cGMgPSB2Y3B1LT5hcmNoLnBjOwogCXJlZ3MtPmNyID0ga3ZtcHBjX2dldF9jcih2Y3B1KTsKIAlyZWdzLT5jdHIgPSB2Y3B1LT5hcmNoLmN0cjsKQEAgLTUwNyw4ICs1MDUsNiBAQAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZ3MtPmdwcik7IGkrKykKIAkJcmVncy0+Z3ByW2ldID0ga3ZtcHBjX2dldF9ncHIodmNwdSwgaSk7CiAKLQl2Y3B1X3B1dCh2Y3B1KTsKLQogCXJldHVybiAwOwogfQogCkBAIC01MTYsOCArNTEyLDYgQEAKIHsKIAlpbnQgaTsKIAotCXZjcHVfbG9hZCh2Y3B1KTsKLQogCXZjcHUtPmFyY2gucGMgPSByZWdzLT5wYzsKIAlrdm1wcGNfc2V0X2NyKHZjcHUsIHJlZ3MtPmNyKTsKIAl2Y3B1LT5hcmNoLmN0ciA9IHJlZ3MtPmN0cjsKQEAgLTUzNyw4ICs1MzEsNiBAQAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZ3MtPmdwcik7IGkrKykKIAkJa3ZtcHBjX3NldF9ncHIodmNwdSwgaSwgcmVncy0+Z3ByW2ldKTsKIAotCXZjcHVfcHV0KHZjcHUpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU2OSw5ICs1NjEsNyBAQAogewogCWludCByOwogCi0JdmNwdV9sb2FkKHZjcHUpOwogCXIgPSBrdm1wcGNfY29yZV92Y3B1X3RyYW5zbGF0ZSh2Y3B1LCB0cik7Ci0JdmNwdV9wdXQodmNwdSk7CiAJcmV0dXJuIHI7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vZnB1LlMgYi9hcmNoL3Bvd2VycGMva3ZtL2ZwdS5TCmluZGV4IDJiMzQwYTMuLmNiMzRiYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vZnB1LlMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9mcHUuUwpAQCAtMjcxLDMgKzI3MSwyMSBAQAogRlBEX1RIUkVFX0lOKGZtYWRkKQogRlBEX1RIUkVFX0lOKGZubXN1YikKIEZQRF9USFJFRV9JTihmbm1hZGQpCisKK19HTE9CQUwoa3ZtX2N2dF9mZCkKKwlsZmQJMCwwKHI1KQkJCS8qIGxvYWQgdXAgZnBzY3IgdmFsdWUgKi8KKwlNVEZTRl9MKDApCisJbGZzCTAsMChyMykKKwlzdGZkCTAsMChyNCkKKwltZmZzCTAKKwlzdGZkCTAsMChyNSkJCQkvKiBzYXZlIG5ldyBmcHNjciB2YWx1ZSAqLworCWJscgorCitfR0xPQkFMKGt2bV9jdnRfZGYpCisJbGZkCTAsMChyNSkJCQkvKiBsb2FkIHVwIGZwc2NyIHZhbHVlICovCisJTVRGU0ZfTCgwKQorCWxmZAkwLDAocjMpCisJc3RmcwkwLDAocjQpCisJbWZmcwkwCisJc3RmZAkwLDAocjUpCQkJLyogc2F2ZSBuZXcgZnBzY3IgdmFsdWUgKi8KKwlibHIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKaW5kZXggOWI4NjgzZi4uNzJhNGFkOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKQEAgLTM2LDExICszNiw2IEBACiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKICNpbmNsdWRlICJ0cmFjZS5oIgogCi1nZm5fdCB1bmFsaWFzX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbikKLXsKLQlyZXR1cm4gZ2ZuOwotfQotCiBpbnQga3ZtX2FyY2hfdmNwdV9ydW5uYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnYpCiB7CiAJcmV0dXJuICEodi0+YXJjaC5tc3IgJiBNU1JfV0UpIHx8ICEhKHYtPmFyY2gucGVuZGluZ19leGNlcHRpb25zKTsKQEAgLTI4Nyw3ICsyODIsNyBAQAogc3RhdGljIHZvaWQga3ZtcHBjX2NvbXBsZXRlX21taW9fbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrdm1fcnVuICpydW4pCiB7Ci0JdTY0IGdwcjsKKwl1NjQgdW5pbml0aWFsaXplZF92YXIoZ3ByKTsKIAogCWlmIChydW4tPm1taW8ubGVuID4gc2l6ZW9mKGdwcikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJiYWQgTU1JTyBsZW5ndGg6ICVkXG4iLCBydW4tPm1taW8ubGVuKTsKQEAgLTQyMyw4ICs0MTgsNiBAQAogCWludCByOwogCXNpZ3NldF90IHNpZ3NhdmVkOwogCi0JdmNwdV9sb2FkKHZjcHUpOwotCiAJaWYgKHZjcHUtPnNpZ3NldF9hY3RpdmUpCiAJCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmdmNwdS0+c2lnc2V0LCAmc2lnc2F2ZWQpOwogCkBAIC00NTYsOCArNDQ5LDYgQEAKIAlpZiAodmNwdS0+c2lnc2V0X2FjdGl2ZSkKIAkJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZzaWdzYXZlZCwgTlVMTCk7CiAKLQl2Y3B1X3B1dCh2Y3B1KTsKLQogCXJldHVybiByOwogfQogCkBAIC01MjMsOCArNTE0LDkgQEAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZpcnEsIGFyZ3AsIHNpemVvZihpcnEpKSkKIAkJCWdvdG8gb3V0OwogCQlyID0ga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHZjcHUsICZpcnEpOwotCQlicmVhazsKKwkJZ290byBvdXQ7CiAJfQorCiAJY2FzZSBLVk1fRU5BQkxFX0NBUDoKIAl7CiAJCXN0cnVjdCBrdm1fZW5hYmxlX2NhcCBjYXA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL3RpbWluZy5jIGIvYXJjaC9wb3dlcnBjL2t2bS90aW1pbmcuYwppbmRleCA3MDM3ODU1Li40NmZhMDRmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL3RpbWluZy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vdGltaW5nLmMKQEAgLTE4Miw3ICsxODIsNyBAQAogCX0KIAogCWlmIChjID09ICdjJykgewotCQlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcWYgPSAoc3RydWN0IHNlcV9maWxlICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCQlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcWYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IHNlcWYtPnByaXZhdGU7CiAJCS8qIFdyaXRlIGRvZXMgbm90IGFmZmVjdCBvdXIgYnVmZmVycyBwcmV2aW91c2x5IGdlbmVyYXRlZCB3aXRoCiAJCSAqIHNob3cuIHNlcV9maWxlIGlzIGxvY2tlZCBoZXJlIHRvIHByZXZlbnQgcmFjZXMgb2YgaW5pdCB3aXRoCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2xpYi9NYWtlZmlsZQppbmRleCAzMDQwZGFjLi41YmI4OWM4MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvbGliL01ha2VmaWxlCkBAIC0xMiwxNCArMTIsMTUgQEAKIENGTEFHU19SRU1PVkVfZmVhdHVyZS1maXh1cHMubyA9IC1wZwogCiBvYmoteQkJCTo9IHN0cmluZy5vIGFsbG9jLm8gXAotCQkJICAgY2hlY2tzdW1fJChDT05GSUdfV09SRF9TSVpFKS5vCi1vYmotJChDT05GSUdfUFBDMzIpCSs9IGRpdjY0Lm8gY29weV8zMi5vIGNydHNhdnJlcy5vCisJCQkgICBjaGVja3N1bV8kKENPTkZJR19XT1JEX1NJWkUpLm8gY3J0c2F2cmVzLm8KK29iai0kKENPTkZJR19QUEMzMikJKz0gZGl2NjQubyBjb3B5XzMyLm8KIG9iai0kKENPTkZJR19IQVNfSU9NRU0pCSs9IGRldnJlcy5vCiAKIG9iai0kKENPTkZJR19QUEM2NCkJKz0gY29weXBhZ2VfNjQubyBjb3B5dXNlcl82NC5vIFwKIAkJCSAgIG1lbWNweV82NC5vIHVzZXJjb3B5XzY0Lm8gbWVtXzY0Lm8gc3RyaW5nLm8KLW9iai0kKENPTkZJR19YTU9OKQkrPSBzc3RlcC5vCi1vYmotJChDT05GSUdfS1BST0JFUykJKz0gc3N0ZXAubworb2JqLSQoQ09ORklHX1hNT04pCSs9IHNzdGVwLm8gbGRzdGZwLm8KK29iai0kKENPTkZJR19LUFJPQkVTKQkrPSBzc3RlcC5vIGxkc3RmcC5vCitvYmotJChDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UKQkrPSBzc3RlcC5vIGxkc3RmcC5vCiAKIGlmZXEgKCQoQ09ORklHX1BQQzY0KSx5KQogb2JqLSQoQ09ORklHX1NNUCkJKz0gbG9ja3MubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2xpYi9jcnRzYXZyZXMuUyBiL2FyY2gvcG93ZXJwYy9saWIvY3J0c2F2cmVzLlMKaW5kZXggNzBhOWNkOC4uMWM4OTNmMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9jcnRzYXZyZXMuUworKysgYi9hcmNoL3Bvd2VycGMvbGliL2NydHNhdnJlcy5TCkBAIC02LDYgKzYsNyBAQAogICogICBXcml0dGVuIEJ5IE1pY2hhZWwgTWVpc3NuZXIKICAqCiAgKiBCYXNlZCBvbiBnY2MvY29uZmlnL3JzNjAwMC9jcnRzYXZyZXMuYXNtIGZyb20gZ2NjCisgKiA2NCBiaXQgYWRkaXRpb25zIGZyb20gcmVhZGluZyB0aGUgUFBDIGVsZjY0YWJpIGRvY3VtZW50LgogICoKICAqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTQ0LDYgKzQ1LDggQEAKIAogI2lmZGVmIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRQogCisjaWZuZGVmIENPTkZJR19QUEM2NAorCiAvKiBSb3V0aW5lcyBmb3Igc2F2aW5nIGludGVnZXIgcmVnaXN0ZXJzLCBjYWxsZWQgYnkgdGhlIGNvbXBpbGVyLiAgKi8KIC8qIENhbGxlZCB3aXRoIHIxMSBwb2ludGluZyB0byB0aGUgc3RhY2sgaGVhZGVyIHdvcmQgb2YgdGhlIGNhbGxlciBvZiB0aGUgKi8KIC8qIGZ1bmN0aW9uLCBqdXN0IGJleW9uZCB0aGUgZW5kIG9mIHRoZSBpbnRlZ2VyIHNhdmUgYXJlYS4gICovCkBAIC0yMjYsNCArMjI5LDEzMCBAQAogCW10bHIJMAogCW1yCTEsMTEKIAlibHIKKworI2Vsc2UgLyogQ09ORklHX1BQQzY0ICovCisKKy5nbG9ibAlfc2F2ZWdwcjBfMTQKK19zYXZlZ3ByMF8xNDoKKwlzdGQJcjE0LC0xNDQocjEpCisuZ2xvYmwJX3NhdmVncHIwXzE1Citfc2F2ZWdwcjBfMTU6CisJc3RkCXIxNSwtMTM2KHIxKQorLmdsb2JsCV9zYXZlZ3ByMF8xNgorX3NhdmVncHIwXzE2OgorCXN0ZAlyMTYsLTEyOChyMSkKKy5nbG9ibAlfc2F2ZWdwcjBfMTcKK19zYXZlZ3ByMF8xNzoKKwlzdGQJcjE3LC0xMjAocjEpCisuZ2xvYmwJX3NhdmVncHIwXzE4Citfc2F2ZWdwcjBfMTg6CisJc3RkCXIxOCwtMTEyKHIxKQorLmdsb2JsCV9zYXZlZ3ByMF8xOQorX3NhdmVncHIwXzE5OgorCXN0ZAlyMTksLTEwNChyMSkKKy5nbG9ibAlfc2F2ZWdwcjBfMjAKK19zYXZlZ3ByMF8yMDoKKwlzdGQJcjIwLC05NihyMSkKKy5nbG9ibAlfc2F2ZWdwcjBfMjEKK19zYXZlZ3ByMF8yMToKKwlzdGQJcjIxLC04OChyMSkKKy5nbG9ibAlfc2F2ZWdwcjBfMjIKK19zYXZlZ3ByMF8yMjoKKwlzdGQJcjIyLC04MChyMSkKKy5nbG9ibAlfc2F2ZWdwcjBfMjMKK19zYXZlZ3ByMF8yMzoKKwlzdGQJcjIzLC03MihyMSkKKy5nbG9ibAlfc2F2ZWdwcjBfMjQKK19zYXZlZ3ByMF8yNDoKKwlzdGQJcjI0LC02NChyMSkKKy5nbG9ibAlfc2F2ZWdwcjBfMjUKK19zYXZlZ3ByMF8yNToKKwlzdGQJcjI1LC01NihyMSkKKy5nbG9ibAlfc2F2ZWdwcjBfMjYKK19zYXZlZ3ByMF8yNjoKKwlzdGQJcjI2LC00OChyMSkKKy5nbG9ibAlfc2F2ZWdwcjBfMjcKK19zYXZlZ3ByMF8yNzoKKwlzdGQJcjI3LC00MChyMSkKKy5nbG9ibAlfc2F2ZWdwcjBfMjgKK19zYXZlZ3ByMF8yODoKKwlzdGQJcjI4LC0zMihyMSkKKy5nbG9ibAlfc2F2ZWdwcjBfMjkKK19zYXZlZ3ByMF8yOToKKwlzdGQJcjI5LC0yNChyMSkKKy5nbG9ibAlfc2F2ZWdwcjBfMzAKK19zYXZlZ3ByMF8zMDoKKwlzdGQJcjMwLC0xNihyMSkKKy5nbG9ibAlfc2F2ZWdwcjBfMzEKK19zYXZlZ3ByMF8zMToKKwlzdGQJcjMxLC04KHIxKQorCXN0ZAlyMCwxNihyMSkKKwlibHIKKworLmdsb2JsCV9yZXN0Z3ByMF8xNAorX3Jlc3RncHIwXzE0OgorCWxkCXIxNCwtMTQ0KHIxKQorLmdsb2JsCV9yZXN0Z3ByMF8xNQorX3Jlc3RncHIwXzE1OgorCWxkCXIxNSwtMTM2KHIxKQorLmdsb2JsCV9yZXN0Z3ByMF8xNgorX3Jlc3RncHIwXzE2OgorCWxkCXIxNiwtMTI4KHIxKQorLmdsb2JsCV9yZXN0Z3ByMF8xNworX3Jlc3RncHIwXzE3OgorCWxkCXIxNywtMTIwKHIxKQorLmdsb2JsCV9yZXN0Z3ByMF8xOAorX3Jlc3RncHIwXzE4OgorCWxkCXIxOCwtMTEyKHIxKQorLmdsb2JsCV9yZXN0Z3ByMF8xOQorX3Jlc3RncHIwXzE5OgorCWxkCXIxOSwtMTA0KHIxKQorLmdsb2JsCV9yZXN0Z3ByMF8yMAorX3Jlc3RncHIwXzIwOgorCWxkCXIyMCwtOTYocjEpCisuZ2xvYmwJX3Jlc3RncHIwXzIxCitfcmVzdGdwcjBfMjE6CisJbGQJcjIxLC04OChyMSkKKy5nbG9ibAlfcmVzdGdwcjBfMjIKK19yZXN0Z3ByMF8yMjoKKwlsZAlyMjIsLTgwKHIxKQorLmdsb2JsCV9yZXN0Z3ByMF8yMworX3Jlc3RncHIwXzIzOgorCWxkCXIyMywtNzIocjEpCisuZ2xvYmwJX3Jlc3RncHIwXzI0CitfcmVzdGdwcjBfMjQ6CisJbGQJcjI0LC02NChyMSkKKy5nbG9ibAlfcmVzdGdwcjBfMjUKK19yZXN0Z3ByMF8yNToKKwlsZAlyMjUsLTU2KHIxKQorLmdsb2JsCV9yZXN0Z3ByMF8yNgorX3Jlc3RncHIwXzI2OgorCWxkCXIyNiwtNDgocjEpCisuZ2xvYmwJX3Jlc3RncHIwXzI3CitfcmVzdGdwcjBfMjc6CisJbGQJcjI3LC00MChyMSkKKy5nbG9ibAlfcmVzdGdwcjBfMjgKK19yZXN0Z3ByMF8yODoKKwlsZAlyMjgsLTMyKHIxKQorLmdsb2JsCV9yZXN0Z3ByMF8yOQorX3Jlc3RncHIwXzI5OgorCWxkCXIwLDE2KHIxKQorCWxkCXIyOSwtMjQocjEpCisJbXRscglyMAorCWxkCXIzMCwtMTYocjEpCisJbGQJcjMxLC04KHIxKQorCWJscgorCisuZ2xvYmwJX3Jlc3RncHIwXzMwCitfcmVzdGdwcjBfMzA6CisJbGQJcjMwLC0xNihyMSkKKy5nbG9ibAlfcmVzdGdwcjBfMzEKK19yZXN0Z3ByMF8zMToKKwlsZAlyMCwxNihyMSkKKwlsZAlyMzEsLTgocjEpCisJbXRscglyMAorCWJscgorCisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2xpYi9mZWF0dXJlLWZpeHVwcy5jIGIvYXJjaC9wb3dlcnBjL2xpYi9mZWF0dXJlLWZpeHVwcy5jCmluZGV4IGU2NDAxNzUuLjBkMDhkMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvZmVhdHVyZS1maXh1cHMuYworKysgYi9hcmNoL3Bvd2VycGMvbGliL2ZlYXR1cmUtZml4dXBzLmMKQEAgLTEyLDYgKzEyLDcgQEAKICAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTI4OCw4ICsyODksOCBAQAogCiBzdGF0aWMgdm9pZCB0ZXN0X2NwdV9tYWNyb3Modm9pZCkKIHsKLQlleHRlcm4gdm9pZCBmdHJfZml4dXBfdGVzdF9GVFJfbWFjcm9zOwotCWV4dGVybiB2b2lkIGZ0cl9maXh1cF90ZXN0X0ZUUl9tYWNyb3NfZXhwZWN0ZWQ7CisJZXh0ZXJuIHU4IGZ0cl9maXh1cF90ZXN0X0ZUUl9tYWNyb3M7CisJZXh0ZXJuIHU4IGZ0cl9maXh1cF90ZXN0X0ZUUl9tYWNyb3NfZXhwZWN0ZWQ7CiAJdW5zaWduZWQgbG9uZyBzaXplID0gJmZ0cl9maXh1cF90ZXN0X0ZUUl9tYWNyb3NfZXhwZWN0ZWQgLQogCQkJICAgICAmZnRyX2ZpeHVwX3Rlc3RfRlRSX21hY3JvczsKIApAQCAtMzAxLDggKzMwMiw4IEBACiBzdGF0aWMgdm9pZCB0ZXN0X2Z3X21hY3Jvcyh2b2lkKQogewogI2lmZGVmIENPTkZJR19QUEM2NAotCWV4dGVybiB2b2lkIGZ0cl9maXh1cF90ZXN0X0ZXX0ZUUl9tYWNyb3M7Ci0JZXh0ZXJuIHZvaWQgZnRyX2ZpeHVwX3Rlc3RfRldfRlRSX21hY3Jvc19leHBlY3RlZDsKKwlleHRlcm4gdTggZnRyX2ZpeHVwX3Rlc3RfRldfRlRSX21hY3JvczsKKwlleHRlcm4gdTggZnRyX2ZpeHVwX3Rlc3RfRldfRlRSX21hY3Jvc19leHBlY3RlZDsKIAl1bnNpZ25lZCBsb25nIHNpemUgPSAmZnRyX2ZpeHVwX3Rlc3RfRldfRlRSX21hY3Jvc19leHBlY3RlZCAtCiAJCQkgICAgICZmdHJfZml4dXBfdGVzdF9GV19GVFJfbWFjcm9zOwogCkBAIC0zMTQsMTAgKzMxNSwxMCBAQAogCiBzdGF0aWMgdm9pZCB0ZXN0X2x3c3luY19tYWNyb3Modm9pZCkKIHsKLQlleHRlcm4gdm9pZCBsd3N5bmNfZml4dXBfdGVzdDsKLQlleHRlcm4gdm9pZCBlbmRfbHdzeW5jX2ZpeHVwX3Rlc3Q7Ci0JZXh0ZXJuIHZvaWQgbHdzeW5jX2ZpeHVwX3Rlc3RfZXhwZWN0ZWRfTFdTWU5DOwotCWV4dGVybiB2b2lkIGx3c3luY19maXh1cF90ZXN0X2V4cGVjdGVkX1NZTkM7CisJZXh0ZXJuIHU4IGx3c3luY19maXh1cF90ZXN0OworCWV4dGVybiB1OCBlbmRfbHdzeW5jX2ZpeHVwX3Rlc3Q7CisJZXh0ZXJuIHU4IGx3c3luY19maXh1cF90ZXN0X2V4cGVjdGVkX0xXU1lOQzsKKwlleHRlcm4gdTggbHdzeW5jX2ZpeHVwX3Rlc3RfZXhwZWN0ZWRfU1lOQzsKIAl1bnNpZ25lZCBsb25nIHNpemUgPSAmZW5kX2x3c3luY19maXh1cF90ZXN0IC0KIAkJCSAgICAgJmx3c3luY19maXh1cF90ZXN0OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL2xkc3RmcC5TIGIvYXJjaC9wb3dlcnBjL2xpYi9sZHN0ZnAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjQ0ODYzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2xpYi9sZHN0ZnAuUwpAQCAtMCwwICsxLDM3NSBAQAorLyoKKyAqIEZsb2F0aW5nLXBvaW50LCBWTVgvQWx0aXZlYyBhbmQgVlNYIGxvYWRzIGFuZCBzdG9yZXMKKyAqIGZvciB1c2UgaW4gaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLgorICoKKyAqIENvcHlyaWdodCAyMDEwIFBhdWwgTWFja2VycmFzLCBJQk0gQ29ycC4gPHBhdWx1c0BhdTEuaWJtLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CisjaW5jbHVkZSA8YXNtL3BwYy1vcGNvZGUuaD4KKyNpbmNsdWRlIDxhc20vcmVnLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKworI2RlZmluZSBTVEtGUk0JKFBQQ19NSU5fU1RLRlJNICsgMTYpCisKKwkubWFjcm8JZXh0YWIJaW5zdHIsaGFuZGxlcgorCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCisJUFBDX0xPTkcgXGluc3RyLFxoYW5kbGVyCisJLnByZXZpb3VzCisJLmVuZG0KKworCS5tYWNybwlpbnN0MzIJb3AKK3JlZyA9IDAKKwkucmVwdAkzMgorMjA6CVxvcAlyZWcsMCxyNAorCWIJM2YKKwlleHRhYgkyMGIsOTlmCityZWcgPSByZWcgKyAxCisJLmVuZHIKKwkuZW5kbQorCisvKiBHZXQgdGhlIGNvbnRlbnRzIG9mIGZyTiBpbnRvIGZyMDsgTiBpcyBpbiByMy4gKi8KK19HTE9CQUwoZ2V0X2ZwcikKKwltZmxyCXIwCisJcmx3aW5tCXIzLHIzLDMsMHhmOAorCWJjbAkyMCwzMSwxZgorCWJscgkJCS8qIGZyMCBpcyBhbHJlYWR5IGluIGZyMCAqLworCW5vcAorcmVnID0gMQorCS5yZXB0CTMxCisJZm1yCWZyMCxyZWcKKwlibHIKK3JlZyA9IHJlZyArIDEKKwkuZW5kcgorMToJbWZscglyNQorCWFkZAlyNSxyMyxyNQorCW10Y3RyCXI1CisJbXRscglyMAorCWJjdHIKKworLyogUHV0IHRoZSBjb250ZW50cyBvZiBmcjAgaW50byBmck47IE4gaXMgaW4gcjMuICovCitfR0xPQkFMKHB1dF9mcHIpCisJbWZscglyMAorCXJsd2lubQlyMyxyMywzLDB4ZjgKKwliY2wJMjAsMzEsMWYKKwlibHIJCQkvKiBmcjAgaXMgYWxyZWFkeSBpbiBmcjAgKi8KKwlub3AKK3JlZyA9IDEKKwkucmVwdAkzMQorCWZtcglyZWcsZnIwCisJYmxyCityZWcgPSByZWcgKyAxCisJLmVuZHIKKzE6CW1mbHIJcjUKKwlhZGQJcjUscjMscjUKKwltdGN0cglyNQorCW10bHIJcjAKKwliY3RyCisKKy8qIExvYWQgRlAgcmVnIE4gZnJvbSBmbG9hdCBhdCAqcC4gIE4gaXMgaW4gcjMsIHAgaW4gcjQuICovCitfR0xPQkFMKGRvX2xmcykKKwlQUENfU1RMVSByMSwtU1RLRlJNKHIxKQorCW1mbHIJcjAKKwlQUENfU1RMCXIwLFNUS0ZSTStQUENfTFJfU1RLT0ZGKHIxKQorCW1mbXNyCXI2CisJb3JpCXI3LHI2LE1TUl9GUAorCWNtcHdpCWNyNyxyMywwCisJbXRtc3JkCXI3CisJaXN5bmMKKwliZXEJY3I3LDFmCisJc3RmZAlmcjAsU1RLRlJNLTE2KHIxKQorMToJbGkJcjksLUVGQVVMVAorMjoJbGZzCWZyMCwwKHI0KQorCWxpCXI5LDAKKzM6CWJsCXB1dF9mcHIKKwliZXEJY3I3LDRmCisJbGZkCWZyMCxTVEtGUk0tMTYocjEpCis0OglQUENfTEwJcjAsU1RLRlJNK1BQQ19MUl9TVEtPRkYocjEpCisJbXRscglyMAorCW10bXNyZAlyNgorCWlzeW5jCisJbXIJcjMscjkKKwlhZGRpCXIxLHIxLFNUS0ZSTQorCWJscgorCWV4dGFiCTJiLDNiCisKKy8qIExvYWQgRlAgcmVnIE4gZnJvbSBkb3VibGUgYXQgKnAuICBOIGlzIGluIHIzLCBwIGluIHI0LiAqLworX0dMT0JBTChkb19sZmQpCisJUFBDX1NUTFUgcjEsLVNUS0ZSTShyMSkKKwltZmxyCXIwCisJUFBDX1NUTAlyMCxTVEtGUk0rUFBDX0xSX1NUS09GRihyMSkKKwltZm1zcglyNgorCW9yaQlyNyxyNixNU1JfRlAKKwljbXB3aQljcjcscjMsMAorCW10bXNyZAlyNworCWlzeW5jCisJYmVxCWNyNywxZgorCXN0ZmQJZnIwLFNUS0ZSTS0xNihyMSkKKzE6CWxpCXI5LC1FRkFVTFQKKzI6CWxmZAlmcjAsMChyNCkKKwlsaQlyOSwwCiszOgliZXEJY3I3LDRmCisJYmwJcHV0X2ZwcgorCWxmZAlmcjAsU1RLRlJNLTE2KHIxKQorNDoJUFBDX0xMCXIwLFNUS0ZSTStQUENfTFJfU1RLT0ZGKHIxKQorCW10bHIJcjAKKwltdG1zcmQJcjYKKwlpc3luYworCW1yCXIzLHI5CisJYWRkaQlyMSxyMSxTVEtGUk0KKwlibHIKKwlleHRhYgkyYiwzYgorCisvKiBTdG9yZSBGUCByZWcgTiB0byBmbG9hdCBhdCAqcC4gIE4gaXMgaW4gcjMsIHAgaW4gcjQuICovCitfR0xPQkFMKGRvX3N0ZnMpCisJUFBDX1NUTFUgcjEsLVNUS0ZSTShyMSkKKwltZmxyCXIwCisJUFBDX1NUTAlyMCxTVEtGUk0rUFBDX0xSX1NUS09GRihyMSkKKwltZm1zcglyNgorCW9yaQlyNyxyNixNU1JfRlAKKwljbXB3aQljcjcscjMsMAorCW10bXNyZAlyNworCWlzeW5jCisJYmVxCWNyNywxZgorCXN0ZmQJZnIwLFNUS0ZSTS0xNihyMSkKKwlibAlnZXRfZnByCisxOglsaQlyOSwtRUZBVUxUCisyOglzdGZzCWZyMCwwKHI0KQorCWxpCXI5LDAKKzM6CWJlcQljcjcsNGYKKwlsZmQJZnIwLFNUS0ZSTS0xNihyMSkKKzQ6CVBQQ19MTAlyMCxTVEtGUk0rUFBDX0xSX1NUS09GRihyMSkKKwltdGxyCXIwCisJbXRtc3JkCXI2CisJaXN5bmMKKwltcglyMyxyOQorCWFkZGkJcjEscjEsU1RLRlJNCisJYmxyCisJZXh0YWIJMmIsM2IKKworLyogU3RvcmUgRlAgcmVnIE4gdG8gZG91YmxlIGF0ICpwLiAgTiBpcyBpbiByMywgcCBpbiByNC4gKi8KK19HTE9CQUwoZG9fc3RmZCkKKwlQUENfU1RMVSByMSwtU1RLRlJNKHIxKQorCW1mbHIJcjAKKwlQUENfU1RMCXIwLFNUS0ZSTStQUENfTFJfU1RLT0ZGKHIxKQorCW1mbXNyCXI2CisJb3JpCXI3LHI2LE1TUl9GUAorCWNtcHdpCWNyNyxyMywwCisJbXRtc3JkCXI3CisJaXN5bmMKKwliZXEJY3I3LDFmCisJc3RmZAlmcjAsU1RLRlJNLTE2KHIxKQorCWJsCWdldF9mcHIKKzE6CWxpCXI5LC1FRkFVTFQKKzI6CXN0ZmQJZnIwLDAocjQpCisJbGkJcjksMAorMzoJYmVxCWNyNyw0ZgorCWxmZAlmcjAsU1RLRlJNLTE2KHIxKQorNDoJUFBDX0xMCXIwLFNUS0ZSTStQUENfTFJfU1RLT0ZGKHIxKQorCW10bHIJcjAKKwltdG1zcmQJcjYKKwlpc3luYworCW1yCXIzLHI5CisJYWRkaQlyMSxyMSxTVEtGUk0KKwlibHIKKwlleHRhYgkyYiwzYgorCisjaWZkZWYgQ09ORklHX0FMVElWRUMKKy8qIEdldCB0aGUgY29udGVudHMgb2YgdnJOIGludG8gdnIwOyBOIGlzIGluIHIzLiAqLworX0dMT0JBTChnZXRfdnIpCisJbWZscglyMAorCXJsd2lubQlyMyxyMywzLDB4ZjgKKwliY2wJMjAsMzEsMWYKKwlibHIJCQkvKiB2cjAgaXMgYWxyZWFkeSBpbiB2cjAgKi8KKwlub3AKK3JlZyA9IDEKKwkucmVwdAkzMQorCXZvcgl2cjAscmVnLHJlZwkvKiBhc3NlbWJsZXIgZG9lc24ndCBrbm93IHZtcj8gKi8KKwlibHIKK3JlZyA9IHJlZyArIDEKKwkuZW5kcgorMToJbWZscglyNQorCWFkZAlyNSxyMyxyNQorCW10Y3RyCXI1CisJbXRscglyMAorCWJjdHIKKworLyogUHV0IHRoZSBjb250ZW50cyBvZiB2cjAgaW50byB2ck47IE4gaXMgaW4gcjMuICovCitfR0xPQkFMKHB1dF92cikKKwltZmxyCXIwCisJcmx3aW5tCXIzLHIzLDMsMHhmOAorCWJjbAkyMCwzMSwxZgorCWJscgkJCS8qIHZyMCBpcyBhbHJlYWR5IGluIHZyMCAqLworCW5vcAorcmVnID0gMQorCS5yZXB0CTMxCisJdm9yCXJlZyx2cjAsdnIwCisJYmxyCityZWcgPSByZWcgKyAxCisJLmVuZHIKKzE6CW1mbHIJcjUKKwlhZGQJcjUscjMscjUKKwltdGN0cglyNQorCW10bHIJcjAKKwliY3RyCisKKy8qIExvYWQgdmVjdG9yIHJlZyBOIGZyb20gKnAuICBOIGlzIGluIHIzLCBwIGluIHI0LiAqLworX0dMT0JBTChkb19sdngpCisJUFBDX1NUTFUgcjEsLVNUS0ZSTShyMSkKKwltZmxyCXIwCisJUFBDX1NUTAlyMCxTVEtGUk0rUFBDX0xSX1NUS09GRihyMSkKKwltZm1zcglyNgorCW9yaXMJcjcscjYsTVNSX1ZFQ0BoCisJY21wd2kJY3I3LHIzLDAKKwlsaQlyOCxTVEtGUk0tMTYKKwltdG1zcmQJcjcKKwlpc3luYworCWJlcQljcjcsMWYKKwlzdHZ4CXZyMCxyMSxyOAorMToJbGkJcjksLUVGQVVMVAorMjoJbHZ4CXZyMCwwLHI0CisJbGkJcjksMAorMzoJYmVxCWNyNyw0ZgorCWJsCXB1dF92cgorCWx2eAl2cjAscjEscjgKKzQ6CVBQQ19MTAlyMCxTVEtGUk0rUFBDX0xSX1NUS09GRihyMSkKKwltdGxyCXIwCisJbXRtc3JkCXI2CisJaXN5bmMKKwltcglyMyxyOQorCWFkZGkJcjEscjEsU1RLRlJNCisJYmxyCisJZXh0YWIJMmIsM2IKKworLyogU3RvcmUgdmVjdG9yIHJlZyBOIHRvICpwLiAgTiBpcyBpbiByMywgcCBpbiByNC4gKi8KK19HTE9CQUwoZG9fc3R2eCkKKwlQUENfU1RMVSByMSwtU1RLRlJNKHIxKQorCW1mbHIJcjAKKwlQUENfU1RMCXIwLFNUS0ZSTStQUENfTFJfU1RLT0ZGKHIxKQorCW1mbXNyCXI2CisJb3JpcwlyNyxyNixNU1JfVkVDQGgKKwljbXB3aQljcjcscjMsMAorCWxpCXI4LFNUS0ZSTS0xNgorCW10bXNyZAlyNworCWlzeW5jCisJYmVxCWNyNywxZgorCXN0dngJdnIwLHIxLHI4CisJYmwJZ2V0X3ZyCisxOglsaQlyOSwtRUZBVUxUCisyOglzdHZ4CXZyMCwwLHI0CisJbGkJcjksMAorMzoJYmVxCWNyNyw0ZgorCWx2eAl2cjAscjEscjgKKzQ6CVBQQ19MTAlyMCxTVEtGUk0rUFBDX0xSX1NUS09GRihyMSkKKwltdGxyCXIwCisJbXRtc3JkCXI2CisJaXN5bmMKKwltcglyMyxyOQorCWFkZGkJcjEscjEsU1RLRlJNCisJYmxyCisJZXh0YWIJMmIsM2IKKyNlbmRpZiAvKiBDT05GSUdfQUxUSVZFQyAqLworCisjaWZkZWYgQ09ORklHX1ZTWAorLyogR2V0IHRoZSBjb250ZW50cyBvZiB2c3JOIGludG8gdnNyMDsgTiBpcyBpbiByMy4gKi8KK19HTE9CQUwoZ2V0X3ZzcikKKwltZmxyCXIwCisJcmx3aW5tCXIzLHIzLDMsMHgxZjgKKwliY2wJMjAsMzEsMWYKKwlibHIJCQkvKiB2c3IwIGlzIGFscmVhZHkgaW4gdnNyMCAqLworCW5vcAorcmVnID0gMQorCS5yZXB0CTYzCisJWFhMT1IoMCxyZWcscmVnKQorCWJscgorcmVnID0gcmVnICsgMQorCS5lbmRyCisxOgltZmxyCXI1CisJYWRkCXI1LHIzLHI1CisJbXRjdHIJcjUKKwltdGxyCXIwCisJYmN0cgorCisvKiBQdXQgdGhlIGNvbnRlbnRzIG9mIHZzcjAgaW50byB2c3JOOyBOIGlzIGluIHIzLiAqLworX0dMT0JBTChwdXRfdnNyKQorCW1mbHIJcjAKKwlybHdpbm0JcjMscjMsMywweDFmOAorCWJjbAkyMCwzMSwxZgorCWJscgkJCS8qIHZyMCBpcyBhbHJlYWR5IGluIHZyMCAqLworCW5vcAorcmVnID0gMQorCS5yZXB0CTYzCisJWFhMT1IocmVnLDAsMCkKKwlibHIKK3JlZyA9IHJlZyArIDEKKwkuZW5kcgorMToJbWZscglyNQorCWFkZAlyNSxyMyxyNQorCW10Y3RyCXI1CisJbXRscglyMAorCWJjdHIKKworLyogTG9hZCBWU1ggcmVnIE4gZnJvbSB2ZWN0b3IgZG91Ymxld29yZCAqcC4gIE4gaXMgaW4gcjMsIHAgaW4gcjQuICovCitfR0xPQkFMKGRvX2x4dmQyeCkKKwlQUENfU1RMVSByMSwtU1RLRlJNKHIxKQorCW1mbHIJcjAKKwlQUENfU1RMCXIwLFNUS0ZSTStQUENfTFJfU1RLT0ZGKHIxKQorCW1mbXNyCXI2CisJb3JpcwlyNyxyNixNU1JfVlNYQGgKKwljbXB3aQljcjcscjMsMAorCWxpCXI4LFNUS0ZSTS0xNgorCW10bXNyZAlyNworCWlzeW5jCisJYmVxCWNyNywxZgorCVNUWFZEMlgoMCxyMSxyOCkKKzE6CWxpCXI5LC1FRkFVTFQKKzI6CUxYVkQyWCgwLDAscjQpCisJbGkJcjksMAorMzoJYmVxCWNyNyw0ZgorCWJsCXB1dF92c3IKKwlMWFZEMlgoMCxyMSxyOCkKKzQ6CVBQQ19MTAlyMCxTVEtGUk0rUFBDX0xSX1NUS09GRihyMSkKKwltdGxyCXIwCisJbXRtc3JkCXI2CisJaXN5bmMKKwltcglyMyxyOQorCWFkZGkJcjEscjEsU1RLRlJNCisJYmxyCisJZXh0YWIJMmIsM2IKKworLyogU3RvcmUgVlNYIHJlZyBOIHRvIHZlY3RvciBkb3VibGV3b3JkICpwLiAgTiBpcyBpbiByMywgcCBpbiByNC4gKi8KK19HTE9CQUwoZG9fc3R4dmQyeCkKKwlQUENfU1RMVSByMSwtU1RLRlJNKHIxKQorCW1mbHIJcjAKKwlQUENfU1RMCXIwLFNUS0ZSTStQUENfTFJfU1RLT0ZGKHIxKQorCW1mbXNyCXI2CisJb3JpcwlyNyxyNixNU1JfVlNYQGgKKwljbXB3aQljcjcscjMsMAorCWxpCXI4LFNUS0ZSTS0xNgorCW10bXNyZAlyNworCWlzeW5jCisJYmVxCWNyNywxZgorCVNUWFZEMlgoMCxyMSxyOCkKKwlibAlnZXRfdnNyCisxOglsaQlyOSwtRUZBVUxUCisyOglTVFhWRDJYKDAsMCxyNCkKKwlsaQlyOSwwCiszOgliZXEJY3I3LDRmCisJTFhWRDJYKDAscjEscjgpCis0OglQUENfTEwJcjAsU1RLRlJNK1BQQ19MUl9TVEtPRkYocjEpCisJbXRscglyMAorCW10bXNyZAlyNgorCWlzeW5jCisJbXIJcjMscjkKKwlhZGRpCXIxLHIxLFNUS0ZSTQorCWJscgorCWV4dGFiCTJiLDNiCisKKyNlbmRpZiAvKiBDT05GSUdfVlNYICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL3NzdGVwLmMgYi9hcmNoL3Bvd2VycGMvbGliL3NzdGVwLmMKaW5kZXggMTNiN2Q1NC4uZTBhOTg1OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9zc3RlcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvc3N0ZXAuYwpAQCAtMTMsNiArMTMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9zc3RlcC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogCiBleHRlcm4gY2hhciBzeXN0ZW1fY2FsbF9jb21tb25bXTsKIApAQCAtMjMsNiArMjUsMjMgQEAKICNkZWZpbmUgTVNSX01BU0sJMHg4N2MwZmZmZgogI2VuZGlmCiAKKy8qIEJpdHMgaW4gWEVSICovCisjZGVmaW5lIFhFUl9TTwkJMHg4MDAwMDAwMFUKKyNkZWZpbmUgWEVSX09WCQkweDQwMDAwMDAwVQorI2RlZmluZSBYRVJfQ0EJCTB4MjAwMDAwMDBVCisKKy8qCisgKiBGdW5jdGlvbnMgaW4gbGRzdGZwLlMKKyAqLworZXh0ZXJuIGludCBkb19sZnMoaW50IHJuLCB1bnNpZ25lZCBsb25nIGVhKTsKK2V4dGVybiBpbnQgZG9fbGZkKGludCBybiwgdW5zaWduZWQgbG9uZyBlYSk7CitleHRlcm4gaW50IGRvX3N0ZnMoaW50IHJuLCB1bnNpZ25lZCBsb25nIGVhKTsKK2V4dGVybiBpbnQgZG9fc3RmZChpbnQgcm4sIHVuc2lnbmVkIGxvbmcgZWEpOworZXh0ZXJuIGludCBkb19sdngoaW50IHJuLCB1bnNpZ25lZCBsb25nIGVhKTsKK2V4dGVybiBpbnQgZG9fc3R2eChpbnQgcm4sIHVuc2lnbmVkIGxvbmcgZWEpOworZXh0ZXJuIGludCBkb19seHZkMngoaW50IHJuLCB1bnNpZ25lZCBsb25nIGVhKTsKK2V4dGVybiBpbnQgZG9fc3R4dmQyeChpbnQgcm4sIHVuc2lnbmVkIGxvbmcgZWEpOworCiAvKgogICogRGV0ZXJtaW5lIHdoZXRoZXIgYSBjb25kaXRpb25hbCBicmFuY2ggaW5zdHJ1Y3Rpb24gd291bGQgYnJhbmNoLgogICovCkBAIC00NiwxNiArNjUsNDk5IEBACiAJcmV0dXJuIDE7CiB9CiAKKworc3RhdGljIGxvbmcgX19rcHJvYmVzIGFkZHJlc3Nfb2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZWEsIGludCBuYikKK3sKKwlpZiAoIXVzZXJfbW9kZShyZWdzKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIF9fYWNjZXNzX29rKGVhLCBuYiwgVVNFUl9EUyk7Cit9CisKIC8qCi0gKiBFbXVsYXRlIGluc3RydWN0aW9ucyB0aGF0IGNhdXNlIGEgdHJhbnNmZXIgb2YgY29udHJvbC4KKyAqIENhbGN1bGF0ZSBlZmZlY3RpdmUgYWRkcmVzcyBmb3IgYSBELWZvcm0gaW5zdHJ1Y3Rpb24KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19rcHJvYmVzIGRmb3JtX2VhKHVuc2lnbmVkIGludCBpbnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IHJhOworCXVuc2lnbmVkIGxvbmcgZWE7CisKKwlyYSA9IChpbnN0ciA+PiAxNikgJiAweDFmOworCWVhID0gKHNpZ25lZCBzaG9ydCkgaW5zdHI7CQkvKiBzaWduLWV4dGVuZCAqLworCWlmIChyYSkgeworCQllYSArPSByZWdzLT5ncHJbcmFdOworCQlpZiAoaW5zdHIgJiAweDA0MDAwMDAwKQkJLyogdXBkYXRlIGZvcm1zICovCisJCQlyZWdzLT5ncHJbcmFdID0gZWE7CisJfQorI2lmZGVmIF9fcG93ZXJwYzY0X18KKwlpZiAoIShyZWdzLT5tc3IgJiBNU1JfU0YpKQorCQllYSAmPSAweGZmZmZmZmZmVUw7CisjZW5kaWYKKwlyZXR1cm4gZWE7Cit9CisKKyNpZmRlZiBfX3Bvd2VycGM2NF9fCisvKgorICogQ2FsY3VsYXRlIGVmZmVjdGl2ZSBhZGRyZXNzIGZvciBhIERTLWZvcm0gaW5zdHJ1Y3Rpb24KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19rcHJvYmVzIGRzZm9ybV9lYSh1bnNpZ25lZCBpbnQgaW5zdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCByYTsKKwl1bnNpZ25lZCBsb25nIGVhOworCisJcmEgPSAoaW5zdHIgPj4gMTYpICYgMHgxZjsKKwllYSA9IChzaWduZWQgc2hvcnQpIChpbnN0ciAmIH4zKTsJLyogc2lnbi1leHRlbmQgKi8KKwlpZiAocmEpIHsKKwkJZWEgKz0gcmVncy0+Z3ByW3JhXTsKKwkJaWYgKChpbnN0ciAmIDMpID09IDEpCQkvKiB1cGRhdGUgZm9ybXMgKi8KKwkJCXJlZ3MtPmdwcltyYV0gPSBlYTsKKwl9CisJaWYgKCEocmVncy0+bXNyICYgTVNSX1NGKSkKKwkJZWEgJj0gMHhmZmZmZmZmZlVMOworCXJldHVybiBlYTsKK30KKyNlbmRpZiAvKiBfX3Bvd2VycGM2NCAqLworCisvKgorICogQ2FsY3VsYXRlIGVmZmVjdGl2ZSBhZGRyZXNzIGZvciBhbiBYLWZvcm0gaW5zdHJ1Y3Rpb24KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19rcHJvYmVzIHhmb3JtX2VhKHVuc2lnbmVkIGludCBpbnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJICAgICBpbnQgZG9fdXBkYXRlKQoreworCWludCByYSwgcmI7CisJdW5zaWduZWQgbG9uZyBlYTsKKworCXJhID0gKGluc3RyID4+IDE2KSAmIDB4MWY7CisJcmIgPSAoaW5zdHIgPj4gMTEpICYgMHgxZjsKKwllYSA9IHJlZ3MtPmdwcltyYl07CisJaWYgKHJhKSB7CisJCWVhICs9IHJlZ3MtPmdwcltyYV07CisJCWlmIChkb191cGRhdGUpCQkvKiB1cGRhdGUgZm9ybXMgKi8KKwkJCXJlZ3MtPmdwcltyYV0gPSBlYTsKKwl9CisjaWZkZWYgX19wb3dlcnBjNjRfXworCWlmICghKHJlZ3MtPm1zciAmIE1TUl9TRikpCisJCWVhICY9IDB4ZmZmZmZmZmZVTDsKKyNlbmRpZgorCXJldHVybiBlYTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgbGFyZ2VzdCBwb3dlciBvZiAyLCBub3QgZ3JlYXRlciB0aGFuIHNpemVvZih1bnNpZ25lZCBsb25nKSwKKyAqIHN1Y2ggdGhhdCB4IGlzIGEgbXVsdGlwbGUgb2YgaXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtYXhfYWxpZ24odW5zaWduZWQgbG9uZyB4KQoreworCXggfD0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworCXJldHVybiB4ICYgLXg7CQkvKiBpc29sYXRlcyByaWdodG1vc3QgYml0ICovCit9CisKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGJ5dGVyZXZfMih1bnNpZ25lZCBsb25nIHgpCit7CisJcmV0dXJuICgoeCA+PiA4KSAmIDB4ZmYpIHwgKCh4ICYgMHhmZikgPDwgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBieXRlcmV2XzQodW5zaWduZWQgbG9uZyB4KQoreworCXJldHVybiAoKHggPj4gMjQpICYgMHhmZikgfCAoKHggPj4gOCkgJiAweGZmMDApIHwKKwkJKCh4ICYgMHhmZjAwKSA8PCA4KSB8ICgoeCAmIDB4ZmYpIDw8IDI0KTsKK30KKworI2lmZGVmIF9fcG93ZXJwYzY0X18KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBieXRlcmV2XzgodW5zaWduZWQgbG9uZyB4KQoreworCXJldHVybiAoYnl0ZXJldl80KHgpIDw8IDMyKSB8IGJ5dGVyZXZfNCh4ID4+IDMyKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IF9fa3Byb2JlcyByZWFkX21lbV9hbGlnbmVkKHVuc2lnbmVkIGxvbmcgKmRlc3QsIHVuc2lnbmVkIGxvbmcgZWEsCisJCQkJICAgICAgaW50IG5iKQoreworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGxvbmcgeCA9IDA7CisKKwlzd2l0Y2ggKG5iKSB7CisJY2FzZSAxOgorCQllcnIgPSBfX2dldF91c2VyKHgsICh1bnNpZ25lZCBjaGFyIF9fdXNlciAqKSBlYSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZXJyID0gX19nZXRfdXNlcih4LCAodW5zaWduZWQgc2hvcnQgX191c2VyICopIGVhKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQllcnIgPSBfX2dldF91c2VyKHgsICh1bnNpZ25lZCBpbnQgX191c2VyICopIGVhKTsKKwkJYnJlYWs7CisjaWZkZWYgX19wb3dlcnBjNjRfXworCWNhc2UgODoKKwkJZXJyID0gX19nZXRfdXNlcih4LCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKikgZWEpOworCQlicmVhazsKKyNlbmRpZgorCX0KKwlpZiAoIWVycikKKwkJKmRlc3QgPSB4OworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19rcHJvYmVzIHJlYWRfbWVtX3VuYWxpZ25lZCh1bnNpZ25lZCBsb25nICpkZXN0LCB1bnNpZ25lZCBsb25nIGVhLAorCQkJCQlpbnQgbmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBlcnI7CisJdW5zaWduZWQgbG9uZyB4LCBiLCBjOworCisJLyogdW5hbGlnbmVkLCBkbyB0aGlzIGluIHBpZWNlcyAqLworCXggPSAwOworCWZvciAoOyBuYiA+IDA7IG5iIC09IGMpIHsKKwkJYyA9IG1heF9hbGlnbihlYSk7CisJCWlmIChjID4gbmIpCisJCQljID0gbWF4X2FsaWduKG5iKTsKKwkJZXJyID0gcmVhZF9tZW1fYWxpZ25lZCgmYiwgZWEsIGMpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJeCA9ICh4IDw8ICg4ICogYykpICsgYjsKKwkJZWEgKz0gYzsKKwl9CisJKmRlc3QgPSB4OworCXJldHVybiAwOworfQorCisvKgorICogUmVhZCBtZW1vcnkgYXQgYWRkcmVzcyBlYSBmb3IgbmIgYnl0ZXMsIHJldHVybiAwIGZvciBzdWNjZXNzCisgKiBvciAtRUZBVUxUIGlmIGFuIGVycm9yIG9jY3VycmVkLgorICovCitzdGF0aWMgaW50IF9fa3Byb2JlcyByZWFkX21lbSh1bnNpZ25lZCBsb25nICpkZXN0LCB1bnNpZ25lZCBsb25nIGVhLCBpbnQgbmIsCisJCQkgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpZiAoIWFkZHJlc3Nfb2socmVncywgZWEsIG5iKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKChlYSAmIChuYiAtIDEpKSA9PSAwKQorCQlyZXR1cm4gcmVhZF9tZW1fYWxpZ25lZChkZXN0LCBlYSwgbmIpOworCXJldHVybiByZWFkX21lbV91bmFsaWduZWQoZGVzdCwgZWEsIG5iLCByZWdzKTsKK30KKworc3RhdGljIGludCBfX2twcm9iZXMgd3JpdGVfbWVtX2FsaWduZWQodW5zaWduZWQgbG9uZyB2YWwsIHVuc2lnbmVkIGxvbmcgZWEsCisJCQkJICAgICAgIGludCBuYikKK3sKKwlpbnQgZXJyID0gMDsKKworCXN3aXRjaCAobmIpIHsKKwljYXNlIDE6CisJCWVyciA9IF9fcHV0X3VzZXIodmFsLCAodW5zaWduZWQgY2hhciBfX3VzZXIgKikgZWEpOworCQlicmVhazsKKwljYXNlIDI6CisJCWVyciA9IF9fcHV0X3VzZXIodmFsLCAodW5zaWduZWQgc2hvcnQgX191c2VyICopIGVhKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQllcnIgPSBfX3B1dF91c2VyKHZhbCwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikgZWEpOworCQlicmVhazsKKyNpZmRlZiBfX3Bvd2VycGM2NF9fCisJY2FzZSA4OgorCQllcnIgPSBfX3B1dF91c2VyKHZhbCwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopIGVhKTsKKwkJYnJlYWs7CisjZW5kaWYKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2twcm9iZXMgd3JpdGVfbWVtX3VuYWxpZ25lZCh1bnNpZ25lZCBsb25nIHZhbCwgdW5zaWduZWQgbG9uZyBlYSwKKwkJCQkJIGludCBuYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IGVycjsKKwl1bnNpZ25lZCBsb25nIGM7CisKKwkvKiB1bmFsaWduZWQgb3IgbGl0dGxlLWVuZGlhbiwgZG8gdGhpcyBpbiBwaWVjZXMgKi8KKwlmb3IgKDsgbmIgPiAwOyBuYiAtPSBjKSB7CisJCWMgPSBtYXhfYWxpZ24oZWEpOworCQlpZiAoYyA+IG5iKQorCQkJYyA9IG1heF9hbGlnbihuYik7CisJCWVyciA9IHdyaXRlX21lbV9hbGlnbmVkKHZhbCA+PiAobmIgLSBjKSAqIDgsIGVhLCBjKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCSsrZWE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogV3JpdGUgbWVtb3J5IGF0IGFkZHJlc3MgZWEgZm9yIG5iIGJ5dGVzLCByZXR1cm4gMCBmb3Igc3VjY2VzcworICogb3IgLUVGQVVMVCBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKyAqLworc3RhdGljIGludCBfX2twcm9iZXMgd3JpdGVfbWVtKHVuc2lnbmVkIGxvbmcgdmFsLCB1bnNpZ25lZCBsb25nIGVhLCBpbnQgbmIsCisJCQkgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaWYgKCFhZGRyZXNzX29rKHJlZ3MsIGVhLCBuYikpCisJCXJldHVybiAtRUZBVUxUOworCWlmICgoZWEgJiAobmIgLSAxKSkgPT0gMCkKKwkJcmV0dXJuIHdyaXRlX21lbV9hbGlnbmVkKHZhbCwgZWEsIG5iKTsKKwlyZXR1cm4gd3JpdGVfbWVtX3VuYWxpZ25lZCh2YWwsIGVhLCBuYiwgcmVncyk7Cit9CisKKy8qCisgKiBDaGVjayB0aGUgYWRkcmVzcyBhbmQgYWxpZ25tZW50LCBhbmQgY2FsbCBmdW5jIHRvIGRvIHRoZSBhY3R1YWwKKyAqIGxvYWQgb3Igc3RvcmUuCisgKi8KK3N0YXRpYyBpbnQgX19rcHJvYmVzIGRvX2ZwX2xvYWQoaW50IHJuLCBpbnQgKCpmdW5jKShpbnQsIHVuc2lnbmVkIGxvbmcpLAorCQkJCXVuc2lnbmVkIGxvbmcgZWEsIGludCBuYiwKKwkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgdmFsW3NpemVvZihkb3VibGUpIC8gc2l6ZW9mKGxvbmcpXTsKKwl1bnNpZ25lZCBsb25nIHB0cjsKKworCWlmICghYWRkcmVzc19vayhyZWdzLCBlYSwgbmIpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoKGVhICYgMykgPT0gMCkKKwkJcmV0dXJuICgqZnVuYykocm4sIGVhKTsKKwlwdHIgPSAodW5zaWduZWQgbG9uZykgJnZhbFswXTsKKwlpZiAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpID09IDggfHwgbmIgPT0gNCkgeworCQllcnIgPSByZWFkX21lbV91bmFsaWduZWQoJnZhbFswXSwgZWEsIG5iLCByZWdzKTsKKwkJcHRyICs9IHNpemVvZih1bnNpZ25lZCBsb25nKSAtIG5iOworCX0gZWxzZSB7CisJCS8qIHJlYWRpbmcgYSBkb3VibGUgb24gMzItYml0ICovCisJCWVyciA9IHJlYWRfbWVtX3VuYWxpZ25lZCgmdmFsWzBdLCBlYSwgNCwgcmVncyk7CisJCWlmICghZXJyKQorCQkJZXJyID0gcmVhZF9tZW1fdW5hbGlnbmVkKCZ2YWxbMV0sIGVhICsgNCwgNCwgcmVncyk7CisJfQorCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJcmV0dXJuICgqZnVuYykocm4sIHB0cik7Cit9CisKK3N0YXRpYyBpbnQgX19rcHJvYmVzIGRvX2ZwX3N0b3JlKGludCBybiwgaW50ICgqZnVuYykoaW50LCB1bnNpZ25lZCBsb25nKSwKKwkJCQkgdW5zaWduZWQgbG9uZyBlYSwgaW50IG5iLAorCQkJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgdmFsW3NpemVvZihkb3VibGUpIC8gc2l6ZW9mKGxvbmcpXTsKKwl1bnNpZ25lZCBsb25nIHB0cjsKKworCWlmICghYWRkcmVzc19vayhyZWdzLCBlYSwgbmIpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoKGVhICYgMykgPT0gMCkKKwkJcmV0dXJuICgqZnVuYykocm4sIGVhKTsKKwlwdHIgPSAodW5zaWduZWQgbG9uZykgJnZhbFswXTsKKwlpZiAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpID09IDggfHwgbmIgPT0gNCkgeworCQlwdHIgKz0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gbmI7CisJCWVyciA9ICgqZnVuYykocm4sIHB0cik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQllcnIgPSB3cml0ZV9tZW1fdW5hbGlnbmVkKHZhbFswXSwgZWEsIG5iLCByZWdzKTsKKwl9IGVsc2UgeworCQkvKiB3cml0aW5nIGEgZG91YmxlIG9uIDMyLWJpdCAqLworCQllcnIgPSAoKmZ1bmMpKHJuLCBwdHIpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJZXJyID0gd3JpdGVfbWVtX3VuYWxpZ25lZCh2YWxbMF0sIGVhLCA0LCByZWdzKTsKKwkJaWYgKCFlcnIpCisJCQllcnIgPSB3cml0ZV9tZW1fdW5hbGlnbmVkKHZhbFsxXSwgZWEgKyA0LCA0LCByZWdzKTsKKwl9CisJcmV0dXJuIGVycjsKK30KKworI2lmZGVmIENPTkZJR19BTFRJVkVDCisvKiBGb3IgQWx0aXZlYy9WTVgsIG5vIG5lZWQgdG8gd29ycnkgYWJvdXQgYWxpZ25tZW50ICovCitzdGF0aWMgaW50IF9fa3Byb2JlcyBkb192ZWNfbG9hZChpbnQgcm4sIGludCAoKmZ1bmMpKGludCwgdW5zaWduZWQgbG9uZyksCisJCQkJIHVuc2lnbmVkIGxvbmcgZWEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWlmICghYWRkcmVzc19vayhyZWdzLCBlYSAmIH4weGZVTCwgMTYpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gKCpmdW5jKShybiwgZWEpOworfQorCitzdGF0aWMgaW50IF9fa3Byb2JlcyBkb192ZWNfc3RvcmUoaW50IHJuLCBpbnQgKCpmdW5jKShpbnQsIHVuc2lnbmVkIGxvbmcpLAorCQkJCSAgdW5zaWduZWQgbG9uZyBlYSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaWYgKCFhZGRyZXNzX29rKHJlZ3MsIGVhICYgfjB4ZlVMLCAxNikpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAoKmZ1bmMpKHJuLCBlYSk7Cit9CisjZW5kaWYgLyogQ09ORklHX0FMVElWRUMgKi8KKworI2lmZGVmIENPTkZJR19WU1gKK3N0YXRpYyBpbnQgX19rcHJvYmVzIGRvX3ZzeF9sb2FkKGludCBybiwgaW50ICgqZnVuYykoaW50LCB1bnNpZ25lZCBsb25nKSwKKwkJCQkgdW5zaWduZWQgbG9uZyBlYSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IGVycjsKKwl1bnNpZ25lZCBsb25nIHZhbFsyXTsKKworCWlmICghYWRkcmVzc19vayhyZWdzLCBlYSwgMTYpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoKGVhICYgMykgPT0gMCkKKwkJcmV0dXJuICgqZnVuYykocm4sIGVhKTsKKwllcnIgPSByZWFkX21lbV91bmFsaWduZWQoJnZhbFswXSwgZWEsIDgsIHJlZ3MpOworCWlmICghZXJyKQorCQllcnIgPSByZWFkX21lbV91bmFsaWduZWQoJnZhbFsxXSwgZWEgKyA4LCA4LCByZWdzKTsKKwlpZiAoIWVycikKKwkJZXJyID0gKCpmdW5jKShybiwgKHVuc2lnbmVkIGxvbmcpICZ2YWxbMF0pOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19rcHJvYmVzIGRvX3ZzeF9zdG9yZShpbnQgcm4sIGludCAoKmZ1bmMpKGludCwgdW5zaWduZWQgbG9uZyksCisJCQkJIHVuc2lnbmVkIGxvbmcgZWEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBlcnI7CisJdW5zaWduZWQgbG9uZyB2YWxbMl07CisKKwlpZiAoIWFkZHJlc3Nfb2socmVncywgZWEsIDE2KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKChlYSAmIDMpID09IDApCisJCXJldHVybiAoKmZ1bmMpKHJuLCBlYSk7CisJZXJyID0gKCpmdW5jKShybiwgKHVuc2lnbmVkIGxvbmcpICZ2YWxbMF0pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZXJyID0gd3JpdGVfbWVtX3VuYWxpZ25lZCh2YWxbMF0sIGVhLCA4LCByZWdzKTsKKwlpZiAoIWVycikKKwkJZXJyID0gd3JpdGVfbWVtX3VuYWxpZ25lZCh2YWxbMV0sIGVhICsgOCwgOCwgcmVncyk7CisJcmV0dXJuIGVycjsKK30KKyNlbmRpZiAvKiBDT05GSUdfVlNYICovCisKKyNkZWZpbmUgX19wdXRfdXNlcl9hc214KHgsIGFkZHIsIGVyciwgb3AsIGNyKQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQlcCisJCSIxOgkiIG9wICIgJTIsMCwlM1xuIgkJXAorCQkiCW1mY3IJJTFcbiIJCQlcCisJCSIyOlxuIgkJCQkJXAorCQkiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgkJXAorCQkiMzoJbGkJJTAsJTRcbiIJCVwKKwkJIgliCTJiXG4iCQkJXAorCQkiLnByZXZpb3VzXG4iCQkJCVwKKwkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCVwKKwkJCVBQQ19MT05HX0FMSUdOICJcbiIJCVwKKwkJCVBQQ19MT05HICIxYiwzYlxuIgkJXAorCQkiLnByZXZpb3VzIgkJCQlcCisJCTogIj1yIiAoZXJyKSwgIj1yIiAoY3IpCQkJXAorCQk6ICJyIiAoeCksICJyIiAoYWRkciksICJpIiAoLUVGQVVMVCksICIwIiAoZXJyKSkKKworI2RlZmluZSBfX2dldF91c2VyX2FzbXgoeCwgYWRkciwgZXJyLCBvcCkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJXAorCQkiMToJIm9wIiAlMSwwLCUyXG4iCQkJXAorCQkiMjpcbiIJCQkJCVwKKwkJIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCVwKKwkJIjM6CWxpCSUwLCUzXG4iCQlcCisJCSIJYgkyYlxuIgkJCVwKKwkJIi5wcmV2aW91c1xuIgkJCQlcCisJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQlcCisJCQlQUENfTE9OR19BTElHTiAiXG4iCQlcCisJCQlQUENfTE9ORyAiMWIsM2JcbiIJCVwKKwkJIi5wcmV2aW91cyIJCQkJXAorCQk6ICI9ciIgKGVyciksICI9ciIgKHgpCQkJXAorCQk6ICJyIiAoYWRkciksICJpIiAoLUVGQVVMVCksICIwIiAoZXJyKSkKKworI2RlZmluZSBfX2NhY2hlb3BfdXNlcl9hc214KGFkZHIsIGVyciwgb3ApCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCVwKKwkJIjE6CSJvcCIgMCwlMVxuIgkJCVwKKwkJIjI6XG4iCQkJCQlcCisJCSIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCQlcCisJCSIzOglsaQklMCwlM1xuIgkJXAorCQkiCWIJMmJcbiIJCQlcCisJCSIucHJldmlvdXNcbiIJCQkJXAorCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJXAorCQkJUFBDX0xPTkdfQUxJR04gIlxuIgkJXAorCQkJUFBDX0xPTkcgIjFiLDNiXG4iCQlcCisJCSIucHJldmlvdXMiCQkJCVwKKwkJOiAiPXIiIChlcnIpCQkJCVwKKwkJOiAiciIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMCIgKGVycikpCisKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzZXRfY3IwKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgcmQpCit7CisJbG9uZyB2YWwgPSByZWdzLT5ncHJbcmRdOworCisJcmVncy0+Y2NyID0gKHJlZ3MtPmNjciAmIDB4MGZmZmZmZmYpIHwgKChyZWdzLT54ZXIgPj4gMykgJiAweDEwMDAwMDAwKTsKKyNpZmRlZiBfX3Bvd2VycGM2NF9fCisJaWYgKCEocmVncy0+bXNyICYgTVNSX1NGKSkKKwkJdmFsID0gKGludCkgdmFsOworI2VuZGlmCisJaWYgKHZhbCA8IDApCisJCXJlZ3MtPmNjciB8PSAweDgwMDAwMDAwOworCWVsc2UgaWYgKHZhbCA+IDApCisJCXJlZ3MtPmNjciB8PSAweDQwMDAwMDAwOworCWVsc2UKKwkJcmVncy0+Y2NyIHw9IDB4MjAwMDAwMDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBhZGRfd2l0aF9jYXJyeShzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHJkLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyB2YWwxLCB1bnNpZ25lZCBsb25nIHZhbDIsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGNhcnJ5X2luKQoreworCXVuc2lnbmVkIGxvbmcgdmFsID0gdmFsMSArIHZhbDI7CisKKwlpZiAoY2FycnlfaW4pCisJCSsrdmFsOworCXJlZ3MtPmdwcltyZF0gPSB2YWw7CisjaWZkZWYgX19wb3dlcnBjNjRfXworCWlmICghKHJlZ3MtPm1zciAmIE1TUl9TRikpIHsKKwkJdmFsID0gKHVuc2lnbmVkIGludCkgdmFsOworCQl2YWwxID0gKHVuc2lnbmVkIGludCkgdmFsMTsKKwl9CisjZW5kaWYKKwlpZiAodmFsIDwgdmFsMSB8fCAoY2FycnlfaW4gJiYgdmFsID09IHZhbDEpKQorCQlyZWdzLT54ZXIgfD0gWEVSX0NBOworCWVsc2UKKwkJcmVncy0+eGVyICY9IH5YRVJfQ0E7Cit9CisKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBkb19jbXBfc2lnbmVkKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIHYxLCBsb25nIHYyLAorCQkJCSAgICBpbnQgY3JmbGQpCit7CisJdW5zaWduZWQgaW50IGNydmFsLCBzaGlmdDsKKworCWNydmFsID0gKHJlZ3MtPnhlciA+PiAzMSkgJiAxOwkJLyogZ2V0IFNPIGJpdCAqLworCWlmICh2MSA8IHYyKQorCQljcnZhbCB8PSA4OworCWVsc2UgaWYgKHYxID4gdjIpCisJCWNydmFsIHw9IDQ7CisJZWxzZQorCQljcnZhbCB8PSAyOworCXNoaWZ0ID0gKDcgLSBjcmZsZCkgKiA0OworCXJlZ3MtPmNjciA9IChyZWdzLT5jY3IgJiB+KDB4ZiA8PCBzaGlmdCkpIHwgKGNydmFsIDw8IHNoaWZ0KTsKK30KKworc3RhdGljIHZvaWQgX19rcHJvYmVzIGRvX2NtcF91bnNpZ25lZChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyB2MSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHYyLCBpbnQgY3JmbGQpCit7CisJdW5zaWduZWQgaW50IGNydmFsLCBzaGlmdDsKKworCWNydmFsID0gKHJlZ3MtPnhlciA+PiAzMSkgJiAxOwkJLyogZ2V0IFNPIGJpdCAqLworCWlmICh2MSA8IHYyKQorCQljcnZhbCB8PSA4OworCWVsc2UgaWYgKHYxID4gdjIpCisJCWNydmFsIHw9IDQ7CisJZWxzZQorCQljcnZhbCB8PSAyOworCXNoaWZ0ID0gKDcgLSBjcmZsZCkgKiA0OworCXJlZ3MtPmNjciA9IChyZWdzLT5jY3IgJiB+KDB4ZiA8PCBzaGlmdCkpIHwgKGNydmFsIDw8IHNoaWZ0KTsKK30KKworLyoKKyAqIEVsZW1lbnRzIG9mIDMyLWJpdCByb3RhdGUgYW5kIG1hc2sgaW5zdHJ1Y3Rpb25zLgorICovCisjZGVmaW5lIE1BU0szMihtYiwgbWUpCSgoMHhmZmZmZmZmZlVMID4+IChtYikpICsgXAorCQkJICgoc2lnbmVkIGxvbmcpLTB4ODAwMDAwMDBMID4+IChtZSkpICsgKChtZSkgPj0gKG1iKSkpCisjaWZkZWYgX19wb3dlcnBjNjRfXworI2RlZmluZSBNQVNLNjRfTChtYikJKH4wVUwgPj4gKG1iKSkKKyNkZWZpbmUgTUFTSzY0X1IobWUpCSgoc2lnbmVkIGxvbmcpLTB4ODAwMDAwMDAwMDAwMDAwMEwgPj4gKG1lKSkKKyNkZWZpbmUgTUFTSzY0KG1iLCBtZSkJKE1BU0s2NF9MKG1iKSArIE1BU0s2NF9SKG1lKSArICgobWUpID49IChtYikpKQorI2RlZmluZSBEQVRBMzIoeCkJKCgoeCkgJiAweGZmZmZmZmZmVUwpIHwgKCgoeCkgJiAweGZmZmZmZmZmVUwpIDw8IDMyKSkKKyNlbHNlCisjZGVmaW5lIERBVEEzMih4KQkoeCkKKyNlbmRpZgorI2RlZmluZSBST1RBVEUoeCwgbikJKChuKSA/ICgoKHgpIDw8IChuKSkgfCAoKHgpID4+ICg4ICogc2l6ZW9mKGxvbmcpIC0gKG4pKSkpIDogKHgpKQorCisvKgorICogRW11bGF0ZSBpbnN0cnVjdGlvbnMgdGhhdCBjYXVzZSBhIHRyYW5zZmVyIG9mIGNvbnRyb2wsCisgKiBsb2FkcyBhbmQgc3RvcmVzLCBhbmQgYSBmZXcgb3RoZXIgaW5zdHJ1Y3Rpb25zLgogICogUmV0dXJucyAxIGlmIHRoZSBzdGVwIHdhcyBlbXVsYXRlZCwgMCBpZiBub3QsCiAgKiBvciAtMSBpZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgb25lIHRoYXQgc2hvdWxkIG5vdCBiZSBzdGVwcGVkLAogICogc3VjaCBhcyBhbiByZmlkLCBvciBhIG10bXNyZCB0aGF0IHdvdWxkIGNsZWFyIE1TUl9SSS4KICAqLwogaW50IF9fa3Byb2JlcyBlbXVsYXRlX3N0ZXAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBpbnN0cikKIHsKLQl1bnNpZ25lZCBpbnQgb3Bjb2RlLCBycywgcmIsIHJkLCBzcHI7CisJdW5zaWduZWQgaW50IG9wY29kZSwgcmEsIHJiLCByZCwgc3ByLCB1OwogCXVuc2lnbmVkIGxvbmcgaW50IGltbTsKKwl1bnNpZ25lZCBsb25nIGludCB2YWwsIHZhbDI7CisJdW5zaWduZWQgbG9uZyBpbnQgZWE7CisJdW5zaWduZWQgaW50IGNyLCBtYiwgbWUsIHNoOworCWludCBlcnI7CisJdW5zaWduZWQgbG9uZyBvbGRfcmE7CisJbG9uZyBpdmFsOwogCiAJb3Bjb2RlID0gaW5zdHIgPj4gMjY7CiAJc3dpdGNoIChvcGNvZGUpIHsKQEAgLTc4LDcgKzU4MCwxMyBAQAogCQkgKiBlbnRyeSBjb2RlIHdvcmtzLiAgSWYgdGhhdCBpcyBjaGFuZ2VkLCB0aGlzIHdpbGwKIAkJICogbmVlZCB0byBiZSBjaGFuZ2VkIGFsc28uCiAJCSAqLworCQlpZiAocmVncy0+Z3ByWzBdID09IDB4MWViZSAmJgorCQkgICAgY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfUkVBTF9MRSkpIHsKKwkJCXJlZ3MtPm1zciBePSBNU1JfTEU7CisJCQlnb3RvIGluc3RyX2RvbmU7CisJCX0KIAkJcmVncy0+Z3ByWzldID0gcmVncy0+Z3ByWzEzXTsKKwkJcmVncy0+Z3ByWzEwXSA9IE1TUl9LRVJORUw7CiAJCXJlZ3MtPmdwclsxMV0gPSByZWdzLT5uaXAgKyA0OwogCQlyZWdzLT5ncHJbMTJdID0gcmVncy0+bXNyICYgTVNSX01BU0s7CiAJCXJlZ3MtPmdwclsxM10gPSAodW5zaWduZWQgbG9uZykgZ2V0X3BhY2EoKTsKQEAgLTEwMiw5ICs2MTAsOSBAQAogCQlyZWdzLT5uaXAgPSBpbW07CiAJCXJldHVybiAxOwogCWNhc2UgMTk6Ci0JCXN3aXRjaCAoaW5zdHIgJiAweDdmZSkgewotCQljYXNlIDB4MjA6CS8qIGJjbHIgKi8KLQkJY2FzZSAweDQyMDoJLyogYmNjdHIgKi8KKwkJc3dpdGNoICgoaW5zdHIgPj4gMSkgJiAweDNmZikgeworCQljYXNlIDE2OgkvKiBiY2xyICovCisJCWNhc2UgNTI4OgkvKiBiY2N0ciAqLwogCQkJaW1tID0gKGluc3RyICYgMHg0MDApPyByZWdzLT5jdHI6IHJlZ3MtPmxpbms7CiAJCQlyZWdzLT5uaXAgKz0gNDsKIAkJCWlmICgocmVncy0+bXNyICYgTVNSX1NGKSA9PSAwKSB7CkBAIC0xMTYsMzAgKzYyNCwyMzMgQEAKIAkJCWlmIChicmFuY2hfdGFrZW4oaW5zdHIsIHJlZ3MpKQogCQkJCXJlZ3MtPm5pcCA9IGltbTsKIAkJCXJldHVybiAxOwotCQljYXNlIDB4MjQ6CS8qIHJmaWQsIHNjYXJ5ICovCisKKwkJY2FzZSAxODoJLyogcmZpZCwgc2NhcnkgKi8KIAkJCXJldHVybiAtMTsKKworCQljYXNlIDE1MDoJLyogaXN5bmMgKi8KKwkJCWlzeW5jKCk7CisJCQlnb3RvIGluc3RyX2RvbmU7CisKKwkJY2FzZSAzMzoJLyogY3Jub3IgKi8KKwkJY2FzZSAxMjk6CS8qIGNyYW5kYyAqLworCQljYXNlIDE5MzoJLyogY3J4b3IgKi8KKwkJY2FzZSAyMjU6CS8qIGNybmFuZCAqLworCQljYXNlIDI1NzoJLyogY3JhbmQgKi8KKwkJY2FzZSAyODk6CS8qIGNyZXF2ICovCisJCWNhc2UgNDE3OgkvKiBjcm9yYyAqLworCQljYXNlIDQ0OToJLyogY3JvciAqLworCQkJcmEgPSAoaW5zdHIgPj4gMTYpICYgMHgxZjsKKwkJCXJiID0gKGluc3RyID4+IDExKSAmIDB4MWY7CisJCQlyZCA9IChpbnN0ciA+PiAyMSkgJiAweDFmOworCQkJcmEgPSAocmVncy0+Y2NyID4+ICgzMSAtIHJhKSkgJiAxOworCQkJcmIgPSAocmVncy0+Y2NyID4+ICgzMSAtIHJiKSkgJiAxOworCQkJdmFsID0gKGluc3RyID4+ICg2ICsgcmEgKiAyICsgcmIpKSAmIDE7CisJCQlyZWdzLT5jY3IgPSAocmVncy0+Y2NyICYgfigxVUwgPDwgKDMxIC0gcmQpKSkgfAorCQkJCSh2YWwgPDwgKDMxIC0gcmQpKTsKKwkJCWdvdG8gaW5zdHJfZG9uZTsKIAkJfQorCQlicmVhazsKIAljYXNlIDMxOgotCQlyZCA9IChpbnN0ciA+PiAyMSkgJiAweDFmOwotCQlzd2l0Y2ggKGluc3RyICYgMHg3ZmUpIHsKLQkJY2FzZSAweGE2OgkvKiBtZm1zciAqLworCQlzd2l0Y2ggKChpbnN0ciA+PiAxKSAmIDB4M2ZmKSB7CisJCWNhc2UgNTk4OgkvKiBzeW5jICovCisjaWZkZWYgX19wb3dlcnBjNjRfXworCQkJc3dpdGNoICgoaW5zdHIgPj4gMjEpICYgMykgeworCQkJY2FzZSAxOgkJLyogbHdzeW5jICovCisJCQkJYXNtIHZvbGF0aWxlKCJsd3N5bmMiIDogOiA6ICJtZW1vcnkiKTsKKwkJCQlnb3RvIGluc3RyX2RvbmU7CisJCQljYXNlIDI6CQkvKiBwdGVzeW5jICovCisJCQkJYXNtIHZvbGF0aWxlKCJwdGVzeW5jIiA6IDogOiAibWVtb3J5Iik7CisJCQkJZ290byBpbnN0cl9kb25lOworCQkJfQorI2VuZGlmCisJCQltYigpOworCQkJZ290byBpbnN0cl9kb25lOworCisJCWNhc2UgODU0OgkvKiBlaWVpbyAqLworCQkJZWllaW8oKTsKKwkJCWdvdG8gaW5zdHJfZG9uZTsKKwkJfQorCQlicmVhazsKKwl9CisKKwkvKiBGb2xsb3dpbmcgY2FzZXMgcmVmZXIgdG8gcmVncy0+Z3ByW10sIHNvIHdlIG5lZWQgYWxsIHJlZ3MgKi8KKwlpZiAoIUZVTExfUkVHUyhyZWdzKSkKKwkJcmV0dXJuIDA7CisKKwlyZCA9IChpbnN0ciA+PiAyMSkgJiAweDFmOworCXJhID0gKGluc3RyID4+IDE2KSAmIDB4MWY7CisJcmIgPSAoaW5zdHIgPj4gMTEpICYgMHgxZjsKKworCXN3aXRjaCAob3Bjb2RlKSB7CisJY2FzZSA3OgkJLyogbXVsbGkgKi8KKwkJcmVncy0+Z3ByW3JkXSA9IHJlZ3MtPmdwcltyYV0gKiAoc2hvcnQpIGluc3RyOworCQlnb3RvIGluc3RyX2RvbmU7CisKKwljYXNlIDg6CQkvKiBzdWJmaWMgKi8KKwkJaW1tID0gKHNob3J0KSBpbnN0cjsKKwkJYWRkX3dpdGhfY2FycnkocmVncywgcmQsIH5yZWdzLT5ncHJbcmFdLCBpbW0sIDEpOworCQlnb3RvIGluc3RyX2RvbmU7CisKKwljYXNlIDEwOgkvKiBjbXBsaSAqLworCQlpbW0gPSAodW5zaWduZWQgc2hvcnQpIGluc3RyOworCQl2YWwgPSByZWdzLT5ncHJbcmFdOworI2lmZGVmIF9fcG93ZXJwYzY0X18KKwkJaWYgKChyZCAmIDEpID09IDApCisJCQl2YWwgPSAodW5zaWduZWQgaW50KSB2YWw7CisjZW5kaWYKKwkJZG9fY21wX3Vuc2lnbmVkKHJlZ3MsIHZhbCwgaW1tLCByZCA+PiAyKTsKKwkJZ290byBpbnN0cl9kb25lOworCisJY2FzZSAxMToJLyogY21waSAqLworCQlpbW0gPSAoc2hvcnQpIGluc3RyOworCQl2YWwgPSByZWdzLT5ncHJbcmFdOworI2lmZGVmIF9fcG93ZXJwYzY0X18KKwkJaWYgKChyZCAmIDEpID09IDApCisJCQl2YWwgPSAoaW50KSB2YWw7CisjZW5kaWYKKwkJZG9fY21wX3NpZ25lZChyZWdzLCB2YWwsIGltbSwgcmQgPj4gMik7CisJCWdvdG8gaW5zdHJfZG9uZTsKKworCWNhc2UgMTI6CS8qIGFkZGljICovCisJCWltbSA9IChzaG9ydCkgaW5zdHI7CisJCWFkZF93aXRoX2NhcnJ5KHJlZ3MsIHJkLCByZWdzLT5ncHJbcmFdLCBpbW0sIDApOworCQlnb3RvIGluc3RyX2RvbmU7CisKKwljYXNlIDEzOgkvKiBhZGRpYy4gKi8KKwkJaW1tID0gKHNob3J0KSBpbnN0cjsKKwkJYWRkX3dpdGhfY2FycnkocmVncywgcmQsIHJlZ3MtPmdwcltyYV0sIGltbSwgMCk7CisJCXNldF9jcjAocmVncywgcmQpOworCQlnb3RvIGluc3RyX2RvbmU7CisKKwljYXNlIDE0OgkvKiBhZGRpICovCisJCWltbSA9IChzaG9ydCkgaW5zdHI7CisJCWlmIChyYSkKKwkJCWltbSArPSByZWdzLT5ncHJbcmFdOworCQlyZWdzLT5ncHJbcmRdID0gaW1tOworCQlnb3RvIGluc3RyX2RvbmU7CisKKwljYXNlIDE1OgkvKiBhZGRpcyAqLworCQlpbW0gPSAoKHNob3J0KSBpbnN0cikgPDwgMTY7CisJCWlmIChyYSkKKwkJCWltbSArPSByZWdzLT5ncHJbcmFdOworCQlyZWdzLT5ncHJbcmRdID0gaW1tOworCQlnb3RvIGluc3RyX2RvbmU7CisKKwljYXNlIDIwOgkvKiBybHdpbWkgKi8KKwkJbWIgPSAoaW5zdHIgPj4gNikgJiAweDFmOworCQltZSA9IChpbnN0ciA+PiAxKSAmIDB4MWY7CisJCXZhbCA9IERBVEEzMihyZWdzLT5ncHJbcmRdKTsKKwkJaW1tID0gTUFTSzMyKG1iLCBtZSk7CisJCXJlZ3MtPmdwcltyYV0gPSAocmVncy0+Z3ByW3JhXSAmIH5pbW0pIHwgKFJPVEFURSh2YWwsIHJiKSAmIGltbSk7CisJCWdvdG8gbG9naWNhbF9kb25lOworCisJY2FzZSAyMToJLyogcmx3aW5tICovCisJCW1iID0gKGluc3RyID4+IDYpICYgMHgxZjsKKwkJbWUgPSAoaW5zdHIgPj4gMSkgJiAweDFmOworCQl2YWwgPSBEQVRBMzIocmVncy0+Z3ByW3JkXSk7CisJCXJlZ3MtPmdwcltyYV0gPSBST1RBVEUodmFsLCByYikgJiBNQVNLMzIobWIsIG1lKTsKKwkJZ290byBsb2dpY2FsX2RvbmU7CisKKwljYXNlIDIzOgkvKiBybHdubSAqLworCQltYiA9IChpbnN0ciA+PiA2KSAmIDB4MWY7CisJCW1lID0gKGluc3RyID4+IDEpICYgMHgxZjsKKwkJcmIgPSByZWdzLT5ncHJbcmJdICYgMHgxZjsKKwkJdmFsID0gREFUQTMyKHJlZ3MtPmdwcltyZF0pOworCQlyZWdzLT5ncHJbcmFdID0gUk9UQVRFKHZhbCwgcmIpICYgTUFTSzMyKG1iLCBtZSk7CisJCWdvdG8gbG9naWNhbF9kb25lOworCisJY2FzZSAyNDoJLyogb3JpICovCisJCWltbSA9ICh1bnNpZ25lZCBzaG9ydCkgaW5zdHI7CisJCXJlZ3MtPmdwcltyYV0gPSByZWdzLT5ncHJbcmRdIHwgaW1tOworCQlnb3RvIGluc3RyX2RvbmU7CisKKwljYXNlIDI1OgkvKiBvcmlzICovCisJCWltbSA9ICh1bnNpZ25lZCBzaG9ydCkgaW5zdHI7CisJCXJlZ3MtPmdwcltyYV0gPSByZWdzLT5ncHJbcmRdIHwgKGltbSA8PCAxNik7CisJCWdvdG8gaW5zdHJfZG9uZTsKKworCWNhc2UgMjY6CS8qIHhvcmkgKi8KKwkJaW1tID0gKHVuc2lnbmVkIHNob3J0KSBpbnN0cjsKKwkJcmVncy0+Z3ByW3JhXSA9IHJlZ3MtPmdwcltyZF0gXiBpbW07CisJCWdvdG8gaW5zdHJfZG9uZTsKKworCWNhc2UgMjc6CS8qIHhvcmlzICovCisJCWltbSA9ICh1bnNpZ25lZCBzaG9ydCkgaW5zdHI7CisJCXJlZ3MtPmdwcltyYV0gPSByZWdzLT5ncHJbcmRdIF4gKGltbSA8PCAxNik7CisJCWdvdG8gaW5zdHJfZG9uZTsKKworCWNhc2UgMjg6CS8qIGFuZGkuICovCisJCWltbSA9ICh1bnNpZ25lZCBzaG9ydCkgaW5zdHI7CisJCXJlZ3MtPmdwcltyYV0gPSByZWdzLT5ncHJbcmRdICYgaW1tOworCQlzZXRfY3IwKHJlZ3MsIHJhKTsKKwkJZ290byBpbnN0cl9kb25lOworCisJY2FzZSAyOToJLyogYW5kaXMuICovCisJCWltbSA9ICh1bnNpZ25lZCBzaG9ydCkgaW5zdHI7CisJCXJlZ3MtPmdwcltyYV0gPSByZWdzLT5ncHJbcmRdICYgKGltbSA8PCAxNik7CisJCXNldF9jcjAocmVncywgcmEpOworCQlnb3RvIGluc3RyX2RvbmU7CisKKyNpZmRlZiBfX3Bvd2VycGM2NF9fCisJY2FzZSAzMDoJLyogcmxkKiAqLworCQltYiA9ICgoaW5zdHIgPj4gNikgJiAweDFmKSB8IChpbnN0ciAmIDB4MjApOworCQl2YWwgPSByZWdzLT5ncHJbcmRdOworCQlpZiAoKGluc3RyICYgMHgxMCkgPT0gMCkgeworCQkJc2ggPSByYiB8ICgoaW5zdHIgJiAyKSA8PCA0KTsKKwkJCXZhbCA9IFJPVEFURSh2YWwsIHNoKTsKKwkJCXN3aXRjaCAoKGluc3RyID4+IDIpICYgMykgeworCQkJY2FzZSAwOgkJLyogcmxkaWNsICovCisJCQkJcmVncy0+Z3ByW3JhXSA9IHZhbCAmIE1BU0s2NF9MKG1iKTsKKwkJCQlnb3RvIGxvZ2ljYWxfZG9uZTsKKwkJCWNhc2UgMToJCS8qIHJsZGljciAqLworCQkJCXJlZ3MtPmdwcltyYV0gPSB2YWwgJiBNQVNLNjRfUihtYik7CisJCQkJZ290byBsb2dpY2FsX2RvbmU7CisJCQljYXNlIDI6CQkvKiBybGRpYyAqLworCQkJCXJlZ3MtPmdwcltyYV0gPSB2YWwgJiBNQVNLNjQobWIsIDYzIC0gc2gpOworCQkJCWdvdG8gbG9naWNhbF9kb25lOworCQkJY2FzZSAzOgkJLyogcmxkaW1pICovCisJCQkJaW1tID0gTUFTSzY0KG1iLCA2MyAtIHNoKTsKKwkJCQlyZWdzLT5ncHJbcmFdID0gKHJlZ3MtPmdwcltyYV0gJiB+aW1tKSB8CisJCQkJCSh2YWwgJiBpbW0pOworCQkJCWdvdG8gbG9naWNhbF9kb25lOworCQkJfQorCQl9IGVsc2UgeworCQkJc2ggPSByZWdzLT5ncHJbcmJdICYgMHgzZjsKKwkJCXZhbCA9IFJPVEFURSh2YWwsIHNoKTsKKwkJCXN3aXRjaCAoKGluc3RyID4+IDEpICYgNykgeworCQkJY2FzZSAwOgkJLyogcmxkY2wgKi8KKwkJCQlyZWdzLT5ncHJbcmFdID0gdmFsICYgTUFTSzY0X0wobWIpOworCQkJCWdvdG8gbG9naWNhbF9kb25lOworCQkJY2FzZSAxOgkJLyogcmxkY3IgKi8KKwkJCQlyZWdzLT5ncHJbcmFdID0gdmFsICYgTUFTSzY0X1IobWIpOworCQkJCWdvdG8gbG9naWNhbF9kb25lOworCQkJfQorCQl9CisjZW5kaWYKKworCWNhc2UgMzE6CisJCXN3aXRjaCAoKGluc3RyID4+IDEpICYgMHgzZmYpIHsKKwkJY2FzZSA4MzoJLyogbWZtc3IgKi8KKwkJCWlmIChyZWdzLT5tc3IgJiBNU1JfUFIpCisJCQkJYnJlYWs7CiAJCQlyZWdzLT5ncHJbcmRdID0gcmVncy0+bXNyICYgTVNSX01BU0s7Ci0JCQlyZWdzLT5uaXAgKz0gNDsKLQkJCWlmICgocmVncy0+bXNyICYgTVNSX1NGKSA9PSAwKQotCQkJCXJlZ3MtPm5pcCAmPSAweGZmZmZmZmZmVUw7Ci0JCQlyZXR1cm4gMTsKLQkJY2FzZSAweDEyNDoJLyogbXRtc3IgKi8KKwkJCWdvdG8gaW5zdHJfZG9uZTsKKwkJY2FzZSAxNDY6CS8qIG10bXNyICovCisJCQlpZiAocmVncy0+bXNyICYgTVNSX1BSKQorCQkJCWJyZWFrOwogCQkJaW1tID0gcmVncy0+Z3ByW3JkXTsKIAkJCWlmICgoaW1tICYgTVNSX1JJKSA9PSAwKQogCQkJCS8qIGNhbid0IHN0ZXAgbXRtc3IgdGhhdCB3b3VsZCBjbGVhciBNU1JfUkkgKi8KIAkJCQlyZXR1cm4gLTE7CiAJCQlyZWdzLT5tc3IgPSBpbW07Ci0JCQlyZWdzLT5uaXAgKz0gNDsKLQkJCXJldHVybiAxOworCQkJZ290byBpbnN0cl9kb25lOwogI2lmZGVmIENPTkZJR19QUEM2NAotCQljYXNlIDB4MTY0OgkvKiBtdG1zcmQgKi8KKwkJY2FzZSAxNzg6CS8qIG10bXNyZCAqLwogCQkJLyogb25seSBNU1JfRUUgYW5kIE1TUl9SSSBnZXQgY2hhbmdlZCBpZiBiaXQgMTUgc2V0ICovCiAJCQkvKiBtdG1zcmQgZG9lc24ndCBjaGFuZ2UgTVNSX0hWIGFuZCBNU1JfTUUgKi8KKwkJCWlmIChyZWdzLT5tc3IgJiBNU1JfUFIpCisJCQkJYnJlYWs7CiAJCQlpbW0gPSAoaW5zdHIgJiAweDEwMDAwKT8gMHg4MDAyOiAweGVmZmZmZmZmZmZmZmVmZmZVTDsKIAkJCWltbSA9IChyZWdzLT5tc3IgJiBNU1JfTUFTSyAmIH5pbW0pCiAJCQkJfCAocmVncy0+Z3ByW3JkXSAmIGltbSk7CkBAIC0xNDcsNTcgKzg1OCw3NzAgQEAKIAkJCQkvKiBjYW4ndCBzdGVwIG10bXNyZCB0aGF0IHdvdWxkIGNsZWFyIE1TUl9SSSAqLwogCQkJCXJldHVybiAtMTsKIAkJCXJlZ3MtPm1zciA9IGltbTsKLQkJCXJlZ3MtPm5pcCArPSA0OwotCQkJaWYgKChpbW0gJiBNU1JfU0YpID09IDApCi0JCQkJcmVncy0+bmlwICY9IDB4ZmZmZmZmZmZVTDsKLQkJCXJldHVybiAxOworCQkJZ290byBpbnN0cl9kb25lOwogI2VuZGlmCi0JCWNhc2UgMHgyNjoJLyogbWZjciAqLworCQljYXNlIDE5OgkvKiBtZmNyICovCiAJCQlyZWdzLT5ncHJbcmRdID0gcmVncy0+Y2NyOwogCQkJcmVncy0+Z3ByW3JkXSAmPSAweGZmZmZmZmZmVUw7Ci0JCQlnb3RvIG10c3ByX291dDsKLQkJY2FzZSAweDJhNjoJLyogbWZzcHIgKi8KKwkJCWdvdG8gaW5zdHJfZG9uZTsKKworCQljYXNlIDE0NDoJLyogbXRjcmYgKi8KKwkJCWltbSA9IDB4ZjAwMDAwMDBVTDsKKwkJCXZhbCA9IHJlZ3MtPmdwcltyZF07CisJCQlmb3IgKHNoID0gMDsgc2ggPCA4OyArK3NoKSB7CisJCQkJaWYgKGluc3RyICYgKDB4ODAwMDAgPj4gc2gpKQorCQkJCQlyZWdzLT5jY3IgPSAocmVncy0+Y2NyICYgfmltbSkgfAorCQkJCQkJKHZhbCAmIGltbSk7CisJCQkJaW1tID4+PSA0OworCQkJfQorCQkJZ290byBpbnN0cl9kb25lOworCisJCWNhc2UgMzM5OgkvKiBtZnNwciAqLwogCQkJc3ByID0gKGluc3RyID4+IDExKSAmIDB4M2ZmOwogCQkJc3dpdGNoIChzcHIpIHsKIAkJCWNhc2UgMHgyMDoJLyogbWZ4ZXIgKi8KIAkJCQlyZWdzLT5ncHJbcmRdID0gcmVncy0+eGVyOwogCQkJCXJlZ3MtPmdwcltyZF0gJj0gMHhmZmZmZmZmZlVMOwotCQkJCWdvdG8gbXRzcHJfb3V0OworCQkJCWdvdG8gaW5zdHJfZG9uZTsKIAkJCWNhc2UgMHgxMDA6CS8qIG1mbHIgKi8KIAkJCQlyZWdzLT5ncHJbcmRdID0gcmVncy0+bGluazsKLQkJCQlnb3RvIG10c3ByX291dDsKKwkJCQlnb3RvIGluc3RyX2RvbmU7CiAJCQljYXNlIDB4MTIwOgkvKiBtZmN0ciAqLwogCQkJCXJlZ3MtPmdwcltyZF0gPSByZWdzLT5jdHI7Ci0JCQkJZ290byBtdHNwcl9vdXQ7CisJCQkJZ290byBpbnN0cl9kb25lOwogCQkJfQogCQkJYnJlYWs7Ci0JCWNhc2UgMHgzNzg6CS8qIG9yeCAqLwotCQkJaWYgKGluc3RyICYgMSkKLQkJCQlicmVhazsKLQkJCXJzID0gKGluc3RyID4+IDIxKSAmIDB4MWY7Ci0JCQlyYiA9IChpbnN0ciA+PiAxMSkgJiAweDFmOwotCQkJaWYgKHJzID09IHJiKSB7CQkvKiBtciAqLwotCQkJCXJkID0gKGluc3RyID4+IDE2KSAmIDB4MWY7Ci0JCQkJcmVncy0+Z3ByW3JkXSA9IHJlZ3MtPmdwcltyc107Ci0JCQkJZ290byBtdHNwcl9vdXQ7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSAweDNhNjoJLyogbXRzcHIgKi8KKworCQljYXNlIDQ2NzoJLyogbXRzcHIgKi8KIAkJCXNwciA9IChpbnN0ciA+PiAxMSkgJiAweDNmZjsKIAkJCXN3aXRjaCAoc3ByKSB7CiAJCQljYXNlIDB4MjA6CS8qIG10eGVyICovCiAJCQkJcmVncy0+eGVyID0gKHJlZ3MtPmdwcltyZF0gJiAweGZmZmZmZmZmVUwpOwotCQkJCWdvdG8gbXRzcHJfb3V0OworCQkJCWdvdG8gaW5zdHJfZG9uZTsKIAkJCWNhc2UgMHgxMDA6CS8qIG10bHIgKi8KIAkJCQlyZWdzLT5saW5rID0gcmVncy0+Z3ByW3JkXTsKLQkJCQlnb3RvIG10c3ByX291dDsKKwkJCQlnb3RvIGluc3RyX2RvbmU7CiAJCQljYXNlIDB4MTIwOgkvKiBtdGN0ciAqLwogCQkJCXJlZ3MtPmN0ciA9IHJlZ3MtPmdwcltyZF07Ci1tdHNwcl9vdXQ6Ci0JCQkJcmVncy0+bmlwICs9IDQ7Ci0JCQkJcmV0dXJuIDE7CisJCQkJZ290byBpbnN0cl9kb25lOwogCQkJfQorCQkJYnJlYWs7CisKKy8qCisgKiBDb21wYXJlIGluc3RydWN0aW9ucworICovCisJCWNhc2UgMDoJLyogY21wICovCisJCQl2YWwgPSByZWdzLT5ncHJbcmFdOworCQkJdmFsMiA9IHJlZ3MtPmdwcltyYl07CisjaWZkZWYgX19wb3dlcnBjNjRfXworCQkJaWYgKChyZCAmIDEpID09IDApIHsKKwkJCQkvKiB3b3JkICgzMi1iaXQpIGNvbXBhcmUgKi8KKwkJCQl2YWwgPSAoaW50KSB2YWw7CisJCQkJdmFsMiA9IChpbnQpIHZhbDI7CisJCQl9CisjZW5kaWYKKwkJCWRvX2NtcF9zaWduZWQocmVncywgdmFsLCB2YWwyLCByZCA+PiAyKTsKKwkJCWdvdG8gaW5zdHJfZG9uZTsKKworCQljYXNlIDMyOgkvKiBjbXBsICovCisJCQl2YWwgPSByZWdzLT5ncHJbcmFdOworCQkJdmFsMiA9IHJlZ3MtPmdwcltyYl07CisjaWZkZWYgX19wb3dlcnBjNjRfXworCQkJaWYgKChyZCAmIDEpID09IDApIHsKKwkJCQkvKiB3b3JkICgzMi1iaXQpIGNvbXBhcmUgKi8KKwkJCQl2YWwgPSAodW5zaWduZWQgaW50KSB2YWw7CisJCQkJdmFsMiA9ICh1bnNpZ25lZCBpbnQpIHZhbDI7CisJCQl9CisjZW5kaWYKKwkJCWRvX2NtcF91bnNpZ25lZChyZWdzLCB2YWwsIHZhbDIsIHJkID4+IDIpOworCQkJZ290byBpbnN0cl9kb25lOworCisvKgorICogQXJpdGhtZXRpYyBpbnN0cnVjdGlvbnMKKyAqLworCQljYXNlIDg6CS8qIHN1YmZjICovCisJCQlhZGRfd2l0aF9jYXJyeShyZWdzLCByZCwgfnJlZ3MtPmdwcltyYV0sCisJCQkJICAgICAgIHJlZ3MtPmdwcltyYl0sIDEpOworCQkJZ290byBhcml0aF9kb25lOworI2lmZGVmIF9fcG93ZXJwYzY0X18KKwkJY2FzZSA5OgkvKiBtdWxoZHUgKi8KKwkJCWFzbSgibXVsaGR1ICUwLCUxLCUyIiA6ICI9ciIgKHJlZ3MtPmdwcltyZF0pIDoKKwkJCSAgICAiciIgKHJlZ3MtPmdwcltyYV0pLCAiciIgKHJlZ3MtPmdwcltyYl0pKTsKKwkJCWdvdG8gYXJpdGhfZG9uZTsKKyNlbmRpZgorCQljYXNlIDEwOgkvKiBhZGRjICovCisJCQlhZGRfd2l0aF9jYXJyeShyZWdzLCByZCwgcmVncy0+Z3ByW3JhXSwKKwkJCQkgICAgICAgcmVncy0+Z3ByW3JiXSwgMCk7CisJCQlnb3RvIGFyaXRoX2RvbmU7CisKKwkJY2FzZSAxMToJLyogbXVsaHd1ICovCisJCQlhc20oIm11bGh3dSAlMCwlMSwlMiIgOiAiPXIiIChyZWdzLT5ncHJbcmRdKSA6CisJCQkgICAgInIiIChyZWdzLT5ncHJbcmFdKSwgInIiIChyZWdzLT5ncHJbcmJdKSk7CisJCQlnb3RvIGFyaXRoX2RvbmU7CisKKwkJY2FzZSA0MDoJLyogc3ViZiAqLworCQkJcmVncy0+Z3ByW3JkXSA9IHJlZ3MtPmdwcltyYl0gLSByZWdzLT5ncHJbcmFdOworCQkJZ290byBhcml0aF9kb25lOworI2lmZGVmIF9fcG93ZXJwYzY0X18KKwkJY2FzZSA3MzoJLyogbXVsaGQgKi8KKwkJCWFzbSgibXVsaGQgJTAsJTEsJTIiIDogIj1yIiAocmVncy0+Z3ByW3JkXSkgOgorCQkJICAgICJyIiAocmVncy0+Z3ByW3JhXSksICJyIiAocmVncy0+Z3ByW3JiXSkpOworCQkJZ290byBhcml0aF9kb25lOworI2VuZGlmCisJCWNhc2UgNzU6CS8qIG11bGh3ICovCisJCQlhc20oIm11bGh3ICUwLCUxLCUyIiA6ICI9ciIgKHJlZ3MtPmdwcltyZF0pIDoKKwkJCSAgICAiciIgKHJlZ3MtPmdwcltyYV0pLCAiciIgKHJlZ3MtPmdwcltyYl0pKTsKKwkJCWdvdG8gYXJpdGhfZG9uZTsKKworCQljYXNlIDEwNDoJLyogbmVnICovCisJCQlyZWdzLT5ncHJbcmRdID0gLXJlZ3MtPmdwcltyYV07CisJCQlnb3RvIGFyaXRoX2RvbmU7CisKKwkJY2FzZSAxMzY6CS8qIHN1YmZlICovCisJCQlhZGRfd2l0aF9jYXJyeShyZWdzLCByZCwgfnJlZ3MtPmdwcltyYV0sIHJlZ3MtPmdwcltyYl0sCisJCQkJICAgICAgIHJlZ3MtPnhlciAmIFhFUl9DQSk7CisJCQlnb3RvIGFyaXRoX2RvbmU7CisKKwkJY2FzZSAxMzg6CS8qIGFkZGUgKi8KKwkJCWFkZF93aXRoX2NhcnJ5KHJlZ3MsIHJkLCByZWdzLT5ncHJbcmFdLCByZWdzLT5ncHJbcmJdLAorCQkJCSAgICAgICByZWdzLT54ZXIgJiBYRVJfQ0EpOworCQkJZ290byBhcml0aF9kb25lOworCisJCWNhc2UgMjAwOgkvKiBzdWJmemUgKi8KKwkJCWFkZF93aXRoX2NhcnJ5KHJlZ3MsIHJkLCB+cmVncy0+Z3ByW3JhXSwgMEwsCisJCQkJICAgICAgIHJlZ3MtPnhlciAmIFhFUl9DQSk7CisJCQlnb3RvIGFyaXRoX2RvbmU7CisKKwkJY2FzZSAyMDI6CS8qIGFkZHplICovCisJCQlhZGRfd2l0aF9jYXJyeShyZWdzLCByZCwgcmVncy0+Z3ByW3JhXSwgMEwsCisJCQkJICAgICAgIHJlZ3MtPnhlciAmIFhFUl9DQSk7CisJCQlnb3RvIGFyaXRoX2RvbmU7CisKKwkJY2FzZSAyMzI6CS8qIHN1YmZtZSAqLworCQkJYWRkX3dpdGhfY2FycnkocmVncywgcmQsIH5yZWdzLT5ncHJbcmFdLCAtMUwsCisJCQkJICAgICAgIHJlZ3MtPnhlciAmIFhFUl9DQSk7CisJCQlnb3RvIGFyaXRoX2RvbmU7CisjaWZkZWYgX19wb3dlcnBjNjRfXworCQljYXNlIDIzMzoJLyogbXVsbGQgKi8KKwkJCXJlZ3MtPmdwcltyZF0gPSByZWdzLT5ncHJbcmFdICogcmVncy0+Z3ByW3JiXTsKKwkJCWdvdG8gYXJpdGhfZG9uZTsKKyNlbmRpZgorCQljYXNlIDIzNDoJLyogYWRkbWUgKi8KKwkJCWFkZF93aXRoX2NhcnJ5KHJlZ3MsIHJkLCByZWdzLT5ncHJbcmFdLCAtMUwsCisJCQkJICAgICAgIHJlZ3MtPnhlciAmIFhFUl9DQSk7CisJCQlnb3RvIGFyaXRoX2RvbmU7CisKKwkJY2FzZSAyMzU6CS8qIG11bGx3ICovCisJCQlyZWdzLT5ncHJbcmRdID0gKHVuc2lnbmVkIGludCkgcmVncy0+Z3ByW3JhXSAqCisJCQkJKHVuc2lnbmVkIGludCkgcmVncy0+Z3ByW3JiXTsKKwkJCWdvdG8gYXJpdGhfZG9uZTsKKworCQljYXNlIDI2NjoJLyogYWRkICovCisJCQlyZWdzLT5ncHJbcmRdID0gcmVncy0+Z3ByW3JhXSArIHJlZ3MtPmdwcltyYl07CisJCQlnb3RvIGFyaXRoX2RvbmU7CisjaWZkZWYgX19wb3dlcnBjNjRfXworCQljYXNlIDQ1NzoJLyogZGl2ZHUgKi8KKwkJCXJlZ3MtPmdwcltyZF0gPSByZWdzLT5ncHJbcmFdIC8gcmVncy0+Z3ByW3JiXTsKKwkJCWdvdG8gYXJpdGhfZG9uZTsKKyNlbmRpZgorCQljYXNlIDQ1OToJLyogZGl2d3UgKi8KKwkJCXJlZ3MtPmdwcltyZF0gPSAodW5zaWduZWQgaW50KSByZWdzLT5ncHJbcmFdIC8KKwkJCQkodW5zaWduZWQgaW50KSByZWdzLT5ncHJbcmJdOworCQkJZ290byBhcml0aF9kb25lOworI2lmZGVmIF9fcG93ZXJwYzY0X18KKwkJY2FzZSA0ODk6CS8qIGRpdmQgKi8KKwkJCXJlZ3MtPmdwcltyZF0gPSAobG9uZyBpbnQpIHJlZ3MtPmdwcltyYV0gLworCQkJCShsb25nIGludCkgcmVncy0+Z3ByW3JiXTsKKwkJCWdvdG8gYXJpdGhfZG9uZTsKKyNlbmRpZgorCQljYXNlIDQ5MToJLyogZGl2dyAqLworCQkJcmVncy0+Z3ByW3JkXSA9IChpbnQpIHJlZ3MtPmdwcltyYV0gLworCQkJCShpbnQpIHJlZ3MtPmdwcltyYl07CisJCQlnb3RvIGFyaXRoX2RvbmU7CisKKworLyoKKyAqIExvZ2ljYWwgaW5zdHJ1Y3Rpb25zCisgKi8KKwkJY2FzZSAyNjoJLyogY250bHp3ICovCisJCQlhc20oImNudGx6dyAlMCwlMSIgOiAiPXIiIChyZWdzLT5ncHJbcmFdKSA6CisJCQkgICAgInIiIChyZWdzLT5ncHJbcmRdKSk7CisJCQlnb3RvIGxvZ2ljYWxfZG9uZTsKKyNpZmRlZiBfX3Bvd2VycGM2NF9fCisJCWNhc2UgNTg6CS8qIGNudGx6ZCAqLworCQkJYXNtKCJjbnRsemQgJTAsJTEiIDogIj1yIiAocmVncy0+Z3ByW3JhXSkgOgorCQkJICAgICJyIiAocmVncy0+Z3ByW3JkXSkpOworCQkJZ290byBsb2dpY2FsX2RvbmU7CisjZW5kaWYKKwkJY2FzZSAyODoJLyogYW5kICovCisJCQlyZWdzLT5ncHJbcmFdID0gcmVncy0+Z3ByW3JkXSAmIHJlZ3MtPmdwcltyYl07CisJCQlnb3RvIGxvZ2ljYWxfZG9uZTsKKworCQljYXNlIDYwOgkvKiBhbmRjICovCisJCQlyZWdzLT5ncHJbcmFdID0gcmVncy0+Z3ByW3JkXSAmIH5yZWdzLT5ncHJbcmJdOworCQkJZ290byBsb2dpY2FsX2RvbmU7CisKKwkJY2FzZSAxMjQ6CS8qIG5vciAqLworCQkJcmVncy0+Z3ByW3JhXSA9IH4ocmVncy0+Z3ByW3JkXSB8IHJlZ3MtPmdwcltyYl0pOworCQkJZ290byBsb2dpY2FsX2RvbmU7CisKKwkJY2FzZSAyODQ6CS8qIHhvciAqLworCQkJcmVncy0+Z3ByW3JhXSA9IH4ocmVncy0+Z3ByW3JkXSBeIHJlZ3MtPmdwcltyYl0pOworCQkJZ290byBsb2dpY2FsX2RvbmU7CisKKwkJY2FzZSAzMTY6CS8qIHhvciAqLworCQkJcmVncy0+Z3ByW3JhXSA9IHJlZ3MtPmdwcltyZF0gXiByZWdzLT5ncHJbcmJdOworCQkJZ290byBsb2dpY2FsX2RvbmU7CisKKwkJY2FzZSA0MTI6CS8qIG9yYyAqLworCQkJcmVncy0+Z3ByW3JhXSA9IHJlZ3MtPmdwcltyZF0gfCB+cmVncy0+Z3ByW3JiXTsKKwkJCWdvdG8gbG9naWNhbF9kb25lOworCisJCWNhc2UgNDQ0OgkvKiBvciAqLworCQkJcmVncy0+Z3ByW3JhXSA9IHJlZ3MtPmdwcltyZF0gfCByZWdzLT5ncHJbcmJdOworCQkJZ290byBsb2dpY2FsX2RvbmU7CisKKwkJY2FzZSA0NzY6CS8qIG5hbmQgKi8KKwkJCXJlZ3MtPmdwcltyYV0gPSB+KHJlZ3MtPmdwcltyZF0gJiByZWdzLT5ncHJbcmJdKTsKKwkJCWdvdG8gbG9naWNhbF9kb25lOworCisJCWNhc2UgOTIyOgkvKiBleHRzaCAqLworCQkJcmVncy0+Z3ByW3JhXSA9IChzaWduZWQgc2hvcnQpIHJlZ3MtPmdwcltyZF07CisJCQlnb3RvIGxvZ2ljYWxfZG9uZTsKKworCQljYXNlIDk1NDoJLyogZXh0c2IgKi8KKwkJCXJlZ3MtPmdwcltyYV0gPSAoc2lnbmVkIGNoYXIpIHJlZ3MtPmdwcltyZF07CisJCQlnb3RvIGxvZ2ljYWxfZG9uZTsKKyNpZmRlZiBfX3Bvd2VycGM2NF9fCisJCWNhc2UgOTg2OgkvKiBleHRzdyAqLworCQkJcmVncy0+Z3ByW3JhXSA9IChzaWduZWQgaW50KSByZWdzLT5ncHJbcmRdOworCQkJZ290byBsb2dpY2FsX2RvbmU7CisjZW5kaWYKKworLyoKKyAqIFNoaWZ0IGluc3RydWN0aW9ucworICovCisJCWNhc2UgMjQ6CS8qIHNsdyAqLworCQkJc2ggPSByZWdzLT5ncHJbcmJdICYgMHgzZjsKKwkJCWlmIChzaCA8IDMyKQorCQkJCXJlZ3MtPmdwcltyYV0gPSAocmVncy0+Z3ByW3JkXSA8PCBzaCkgJiAweGZmZmZmZmZmVUw7CisJCQllbHNlCisJCQkJcmVncy0+Z3ByW3JhXSA9IDA7CisJCQlnb3RvIGxvZ2ljYWxfZG9uZTsKKworCQljYXNlIDUzNjoJLyogc3J3ICovCisJCQlzaCA9IHJlZ3MtPmdwcltyYl0gJiAweDNmOworCQkJaWYgKHNoIDwgMzIpCisJCQkJcmVncy0+Z3ByW3JhXSA9IChyZWdzLT5ncHJbcmRdICYgMHhmZmZmZmZmZlVMKSA+PiBzaDsKKwkJCWVsc2UKKwkJCQlyZWdzLT5ncHJbcmFdID0gMDsKKwkJCWdvdG8gbG9naWNhbF9kb25lOworCisJCWNhc2UgNzkyOgkvKiBzcmF3ICovCisJCQlzaCA9IHJlZ3MtPmdwcltyYl0gJiAweDNmOworCQkJaXZhbCA9IChzaWduZWQgaW50KSByZWdzLT5ncHJbcmRdOworCQkJcmVncy0+Z3ByW3JhXSA9IGl2YWwgPj4gKHNoIDwgMzIgPyBzaCA6IDMxKTsKKwkJCWlmIChpdmFsIDwgMCAmJiAoc2ggPj0gMzIgfHwgKGl2YWwgJiAoKDEgPDwgc2gpIC0gMSkpICE9IDApKQorCQkJCXJlZ3MtPnhlciB8PSBYRVJfQ0E7CisJCQllbHNlCisJCQkJcmVncy0+eGVyICY9IH5YRVJfQ0E7CisJCQlnb3RvIGxvZ2ljYWxfZG9uZTsKKworCQljYXNlIDgyNDoJLyogc3Jhd2kgKi8KKwkJCXNoID0gcmI7CisJCQlpdmFsID0gKHNpZ25lZCBpbnQpIHJlZ3MtPmdwcltyZF07CisJCQlyZWdzLT5ncHJbcmFdID0gaXZhbCA+PiBzaDsKKwkJCWlmIChpdmFsIDwgMCAmJiAoaXZhbCAmICgoMSA8PCBzaCkgLSAxKSkgIT0gMCkKKwkJCQlyZWdzLT54ZXIgfD0gWEVSX0NBOworCQkJZWxzZQorCQkJCXJlZ3MtPnhlciAmPSB+WEVSX0NBOworCQkJZ290byBsb2dpY2FsX2RvbmU7CisKKyNpZmRlZiBfX3Bvd2VycGM2NF9fCisJCWNhc2UgMjc6CS8qIHNsZCAqLworCQkJc2ggPSByZWdzLT5ncHJbcmRdICYgMHg3ZjsKKwkJCWlmIChzaCA8IDY0KQorCQkJCXJlZ3MtPmdwcltyYV0gPSByZWdzLT5ncHJbcmRdIDw8IHNoOworCQkJZWxzZQorCQkJCXJlZ3MtPmdwcltyYV0gPSAwOworCQkJZ290byBsb2dpY2FsX2RvbmU7CisKKwkJY2FzZSA1Mzk6CS8qIHNyZCAqLworCQkJc2ggPSByZWdzLT5ncHJbcmJdICYgMHg3ZjsKKwkJCWlmIChzaCA8IDY0KQorCQkJCXJlZ3MtPmdwcltyYV0gPSByZWdzLT5ncHJbcmRdID4+IHNoOworCQkJZWxzZQorCQkJCXJlZ3MtPmdwcltyYV0gPSAwOworCQkJZ290byBsb2dpY2FsX2RvbmU7CisKKwkJY2FzZSA3OTQ6CS8qIHNyYWQgKi8KKwkJCXNoID0gcmVncy0+Z3ByW3JiXSAmIDB4N2Y7CisJCQlpdmFsID0gKHNpZ25lZCBsb25nIGludCkgcmVncy0+Z3ByW3JkXTsKKwkJCXJlZ3MtPmdwcltyYV0gPSBpdmFsID4+IChzaCA8IDY0ID8gc2ggOiA2Myk7CisJCQlpZiAoaXZhbCA8IDAgJiYgKHNoID49IDY0IHx8IChpdmFsICYgKCgxIDw8IHNoKSAtIDEpKSAhPSAwKSkKKwkJCQlyZWdzLT54ZXIgfD0gWEVSX0NBOworCQkJZWxzZQorCQkJCXJlZ3MtPnhlciAmPSB+WEVSX0NBOworCQkJZ290byBsb2dpY2FsX2RvbmU7CisKKwkJY2FzZSA4MjY6CS8qIHNyYWRpIHdpdGggc2hfNSA9IDAgKi8KKwkJY2FzZSA4Mjc6CS8qIHNyYWRpIHdpdGggc2hfNSA9IDEgKi8KKwkJCXNoID0gcmIgfCAoKGluc3RyICYgMikgPDwgNCk7CisJCQlpdmFsID0gKHNpZ25lZCBsb25nIGludCkgcmVncy0+Z3ByW3JkXTsKKwkJCXJlZ3MtPmdwcltyYV0gPSBpdmFsID4+IHNoOworCQkJaWYgKGl2YWwgPCAwICYmIChpdmFsICYgKCgxIDw8IHNoKSAtIDEpKSAhPSAwKQorCQkJCXJlZ3MtPnhlciB8PSBYRVJfQ0E7CisJCQllbHNlCisJCQkJcmVncy0+eGVyICY9IH5YRVJfQ0E7CisJCQlnb3RvIGxvZ2ljYWxfZG9uZTsKKyNlbmRpZiAvKiBfX3Bvd2VycGM2NF9fICovCisKKy8qCisgKiBDYWNoZSBpbnN0cnVjdGlvbnMKKyAqLworCQljYXNlIDU0OgkvKiBkY2JzdCAqLworCQkJZWEgPSB4Zm9ybV9lYShpbnN0ciwgcmVncywgMCk7CisJCQlpZiAoIWFkZHJlc3Nfb2socmVncywgZWEsIDgpKQorCQkJCXJldHVybiAwOworCQkJZXJyID0gMDsKKwkJCV9fY2FjaGVvcF91c2VyX2FzbXgoZWEsIGVyciwgImRjYnN0Iik7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiAwOworCQkJZ290byBpbnN0cl9kb25lOworCisJCWNhc2UgODY6CS8qIGRjYmYgKi8KKwkJCWVhID0geGZvcm1fZWEoaW5zdHIsIHJlZ3MsIDApOworCQkJaWYgKCFhZGRyZXNzX29rKHJlZ3MsIGVhLCA4KSkKKwkJCQlyZXR1cm4gMDsKKwkJCWVyciA9IDA7CisJCQlfX2NhY2hlb3BfdXNlcl9hc214KGVhLCBlcnIsICJkY2JmIik7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiAwOworCQkJZ290byBpbnN0cl9kb25lOworCisJCWNhc2UgMjQ2OgkvKiBkY2J0c3QgKi8KKwkJCWlmIChyZCA9PSAwKSB7CisJCQkJZWEgPSB4Zm9ybV9lYShpbnN0ciwgcmVncywgMCk7CisJCQkJcHJlZmV0Y2h3KCh2b2lkICopIGVhKTsKKwkJCX0KKwkJCWdvdG8gaW5zdHJfZG9uZTsKKworCQljYXNlIDI3ODoJLyogZGNidCAqLworCQkJaWYgKHJkID09IDApIHsKKwkJCQllYSA9IHhmb3JtX2VhKGluc3RyLCByZWdzLCAwKTsKKwkJCQlwcmVmZXRjaCgodm9pZCAqKSBlYSk7CisJCQl9CisJCQlnb3RvIGluc3RyX2RvbmU7CisKIAkJfQorCQlicmVhazsKIAl9Ci0JcmV0dXJuIDA7CisKKwkvKgorCSAqIEZvbGxvd2luZyBjYXNlcyBhcmUgZm9yIGxvYWRzIGFuZCBzdG9yZXMsIHNvIGJhaWwgb3V0CisJICogaWYgd2UncmUgaW4gbGl0dGxlLWVuZGlhbiBtb2RlLgorCSAqLworCWlmIChyZWdzLT5tc3IgJiBNU1JfTEUpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBTYXZlIHJlZ2lzdGVyIFJBIGluIGNhc2UgaXQncyBhbiB1cGRhdGUgZm9ybSBsb2FkIG9yIHN0b3JlCisJICogYW5kIHRoZSBhY2Nlc3MgZmF1bHRzLgorCSAqLworCW9sZF9yYSA9IHJlZ3MtPmdwcltyYV07CisKKwlzd2l0Y2ggKG9wY29kZSkgeworCWNhc2UgMzE6CisJCXUgPSBpbnN0ciAmIDB4NDA7CisJCXN3aXRjaCAoKGluc3RyID4+IDEpICYgMHgzZmYpIHsKKwkJY2FzZSAyMDoJLyogbHdhcnggKi8KKwkJCWVhID0geGZvcm1fZWEoaW5zdHIsIHJlZ3MsIDApOworCQkJaWYgKGVhICYgMykKKwkJCQlicmVhazsJCS8qIGNhbid0IGhhbmRsZSBtaXNhbGlnbmVkICovCisJCQllcnIgPSAtRUZBVUxUOworCQkJaWYgKCFhZGRyZXNzX29rKHJlZ3MsIGVhLCA0KSkKKwkJCQlnb3RvIGxkc3RfZG9uZTsKKwkJCWVyciA9IDA7CisJCQlfX2dldF91c2VyX2FzbXgodmFsLCBlYSwgZXJyLCAibHdhcngiKTsKKwkJCWlmICghZXJyKQorCQkJCXJlZ3MtPmdwcltyZF0gPSB2YWw7CisJCQlnb3RvIGxkc3RfZG9uZTsKKworCQljYXNlIDE1MDoJLyogc3R3Y3guICovCisJCQllYSA9IHhmb3JtX2VhKGluc3RyLCByZWdzLCAwKTsKKwkJCWlmIChlYSAmIDMpCisJCQkJYnJlYWs7CQkvKiBjYW4ndCBoYW5kbGUgbWlzYWxpZ25lZCAqLworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWlmICghYWRkcmVzc19vayhyZWdzLCBlYSwgNCkpCisJCQkJZ290byBsZHN0X2RvbmU7CisJCQllcnIgPSAwOworCQkJX19wdXRfdXNlcl9hc214KHJlZ3MtPmdwcltyZF0sIGVhLCBlcnIsICJzdHdjeC4iLCBjcik7CisJCQlpZiAoIWVycikKKwkJCQlyZWdzLT5jY3IgPSAocmVncy0+Y2NyICYgMHgwZmZmZmZmZikgfAorCQkJCQkoY3IgJiAweGUwMDAwMDAwKSB8CisJCQkJCSgocmVncy0+eGVyID4+IDMpICYgMHgxMDAwMDAwMCk7CisJCQlnb3RvIGxkc3RfZG9uZTsKKworI2lmZGVmIF9fcG93ZXJwYzY0X18KKwkJY2FzZSA4NDoJLyogbGRhcnggKi8KKwkJCWVhID0geGZvcm1fZWEoaW5zdHIsIHJlZ3MsIDApOworCQkJaWYgKGVhICYgNykKKwkJCQlicmVhazsJCS8qIGNhbid0IGhhbmRsZSBtaXNhbGlnbmVkICovCisJCQllcnIgPSAtRUZBVUxUOworCQkJaWYgKCFhZGRyZXNzX29rKHJlZ3MsIGVhLCA4KSkKKwkJCQlnb3RvIGxkc3RfZG9uZTsKKwkJCWVyciA9IDA7CisJCQlfX2dldF91c2VyX2FzbXgodmFsLCBlYSwgZXJyLCAibGRhcngiKTsKKwkJCWlmICghZXJyKQorCQkJCXJlZ3MtPmdwcltyZF0gPSB2YWw7CisJCQlnb3RvIGxkc3RfZG9uZTsKKworCQljYXNlIDIxNDoJLyogc3RkY3guICovCisJCQllYSA9IHhmb3JtX2VhKGluc3RyLCByZWdzLCAwKTsKKwkJCWlmIChlYSAmIDcpCisJCQkJYnJlYWs7CQkvKiBjYW4ndCBoYW5kbGUgbWlzYWxpZ25lZCAqLworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWlmICghYWRkcmVzc19vayhyZWdzLCBlYSwgOCkpCisJCQkJZ290byBsZHN0X2RvbmU7CisJCQllcnIgPSAwOworCQkJX19wdXRfdXNlcl9hc214KHJlZ3MtPmdwcltyZF0sIGVhLCBlcnIsICJzdGRjeC4iLCBjcik7CisJCQlpZiAoIWVycikKKwkJCQlyZWdzLT5jY3IgPSAocmVncy0+Y2NyICYgMHgwZmZmZmZmZikgfAorCQkJCQkoY3IgJiAweGUwMDAwMDAwKSB8CisJCQkJCSgocmVncy0+eGVyID4+IDMpICYgMHgxMDAwMDAwMCk7CisJCQlnb3RvIGxkc3RfZG9uZTsKKworCQljYXNlIDIxOgkvKiBsZHggKi8KKwkJY2FzZSA1MzoJLyogbGR1eCAqLworCQkJZXJyID0gcmVhZF9tZW0oJnJlZ3MtPmdwcltyZF0sIHhmb3JtX2VhKGluc3RyLCByZWdzLCB1KSwKKwkJCQkgICAgICAgOCwgcmVncyk7CisJCQlnb3RvIGxkc3RfZG9uZTsKKyNlbmRpZgorCisJCWNhc2UgMjM6CS8qIGx3enggKi8KKwkJY2FzZSA1NToJLyogbHd6dXggKi8KKwkJCWVyciA9IHJlYWRfbWVtKCZyZWdzLT5ncHJbcmRdLCB4Zm9ybV9lYShpbnN0ciwgcmVncywgdSksCisJCQkJICAgICAgIDQsIHJlZ3MpOworCQkJZ290byBsZHN0X2RvbmU7CisKKwkJY2FzZSA4NzoJLyogbGJ6eCAqLworCQljYXNlIDExOToJLyogbGJ6dXggKi8KKwkJCWVyciA9IHJlYWRfbWVtKCZyZWdzLT5ncHJbcmRdLCB4Zm9ybV9lYShpbnN0ciwgcmVncywgdSksCisJCQkJICAgICAgIDEsIHJlZ3MpOworCQkJZ290byBsZHN0X2RvbmU7CisKKyNpZmRlZiBDT05GSUdfQUxUSVZFQworCQljYXNlIDEwMzoJLyogbHZ4ICovCisJCWNhc2UgMzU5OgkvKiBsdnhsICovCisJCQlpZiAoIShyZWdzLT5tc3IgJiBNU1JfVkVDKSkKKwkJCQlicmVhazsKKwkJCWVhID0geGZvcm1fZWEoaW5zdHIsIHJlZ3MsIDApOworCQkJZXJyID0gZG9fdmVjX2xvYWQocmQsIGRvX2x2eCwgZWEsIHJlZ3MpOworCQkJZ290byBsZHN0X2RvbmU7CisKKwkJY2FzZSAyMzE6CS8qIHN0dnggKi8KKwkJY2FzZSA0ODc6CS8qIHN0dnhsICovCisJCQlpZiAoIShyZWdzLT5tc3IgJiBNU1JfVkVDKSkKKwkJCQlicmVhazsKKwkJCWVhID0geGZvcm1fZWEoaW5zdHIsIHJlZ3MsIDApOworCQkJZXJyID0gZG9fdmVjX3N0b3JlKHJkLCBkb19zdHZ4LCBlYSwgcmVncyk7CisJCQlnb3RvIGxkc3RfZG9uZTsKKyNlbmRpZiAvKiBDT05GSUdfQUxUSVZFQyAqLworCisjaWZkZWYgX19wb3dlcnBjNjRfXworCQljYXNlIDE0OToJLyogc3RkeCAqLworCQljYXNlIDE4MToJLyogc3RkdXggKi8KKwkJCXZhbCA9IHJlZ3MtPmdwcltyZF07CisJCQllcnIgPSB3cml0ZV9tZW0odmFsLCB4Zm9ybV9lYShpbnN0ciwgcmVncywgdSksIDgsIHJlZ3MpOworCQkJZ290byBsZHN0X2RvbmU7CisjZW5kaWYKKworCQljYXNlIDE1MToJLyogc3R3eCAqLworCQljYXNlIDE4MzoJLyogc3R3dXggKi8KKwkJCXZhbCA9IHJlZ3MtPmdwcltyZF07CisJCQllcnIgPSB3cml0ZV9tZW0odmFsLCB4Zm9ybV9lYShpbnN0ciwgcmVncywgdSksIDQsIHJlZ3MpOworCQkJZ290byBsZHN0X2RvbmU7CisKKwkJY2FzZSAyMTU6CS8qIHN0YnggKi8KKwkJY2FzZSAyNDc6CS8qIHN0YnV4ICovCisJCQl2YWwgPSByZWdzLT5ncHJbcmRdOworCQkJZXJyID0gd3JpdGVfbWVtKHZhbCwgeGZvcm1fZWEoaW5zdHIsIHJlZ3MsIHUpLCAxLCByZWdzKTsKKwkJCWdvdG8gbGRzdF9kb25lOworCisJCWNhc2UgMjc5OgkvKiBsaHp4ICovCisJCWNhc2UgMzExOgkvKiBsaHp1eCAqLworCQkJZXJyID0gcmVhZF9tZW0oJnJlZ3MtPmdwcltyZF0sIHhmb3JtX2VhKGluc3RyLCByZWdzLCB1KSwKKwkJCQkgICAgICAgMiwgcmVncyk7CisJCQlnb3RvIGxkc3RfZG9uZTsKKworI2lmZGVmIF9fcG93ZXJwYzY0X18KKwkJY2FzZSAzNDE6CS8qIGx3YXggKi8KKwkJY2FzZSAzNzM6CS8qIGx3YXV4ICovCisJCQllcnIgPSByZWFkX21lbSgmcmVncy0+Z3ByW3JkXSwgeGZvcm1fZWEoaW5zdHIsIHJlZ3MsIHUpLAorCQkJCSAgICAgICA0LCByZWdzKTsKKwkJCWlmICghZXJyKQorCQkJCXJlZ3MtPmdwcltyZF0gPSAoc2lnbmVkIGludCkgcmVncy0+Z3ByW3JkXTsKKwkJCWdvdG8gbGRzdF9kb25lOworI2VuZGlmCisKKwkJY2FzZSAzNDM6CS8qIGxoYXggKi8KKwkJY2FzZSAzNzU6CS8qIGxoYXV4ICovCisJCQllcnIgPSByZWFkX21lbSgmcmVncy0+Z3ByW3JkXSwgeGZvcm1fZWEoaW5zdHIsIHJlZ3MsIHUpLAorCQkJCSAgICAgICAyLCByZWdzKTsKKwkJCWlmICghZXJyKQorCQkJCXJlZ3MtPmdwcltyZF0gPSAoc2lnbmVkIHNob3J0KSByZWdzLT5ncHJbcmRdOworCQkJZ290byBsZHN0X2RvbmU7CisKKwkJY2FzZSA0MDc6CS8qIHN0aHggKi8KKwkJY2FzZSA0Mzk6CS8qIHN0aHV4ICovCisJCQl2YWwgPSByZWdzLT5ncHJbcmRdOworCQkJZXJyID0gd3JpdGVfbWVtKHZhbCwgeGZvcm1fZWEoaW5zdHIsIHJlZ3MsIHUpLCAyLCByZWdzKTsKKwkJCWdvdG8gbGRzdF9kb25lOworCisjaWZkZWYgX19wb3dlcnBjNjRfXworCQljYXNlIDUzMjoJLyogbGRicnggKi8KKwkJCWVyciA9IHJlYWRfbWVtKCZ2YWwsIHhmb3JtX2VhKGluc3RyLCByZWdzLCAwKSwgOCwgcmVncyk7CisJCQlpZiAoIWVycikKKwkJCQlyZWdzLT5ncHJbcmRdID0gYnl0ZXJldl84KHZhbCk7CisJCQlnb3RvIGxkc3RfZG9uZTsKKworI2VuZGlmCisKKwkJY2FzZSA1MzQ6CS8qIGx3YnJ4ICovCisJCQllcnIgPSByZWFkX21lbSgmdmFsLCB4Zm9ybV9lYShpbnN0ciwgcmVncywgMCksIDQsIHJlZ3MpOworCQkJaWYgKCFlcnIpCisJCQkJcmVncy0+Z3ByW3JkXSA9IGJ5dGVyZXZfNCh2YWwpOworCQkJZ290byBsZHN0X2RvbmU7CisKKwkJY2FzZSA1MzU6CS8qIGxmc3ggKi8KKwkJY2FzZSA1Njc6CS8qIGxmc3V4ICovCisJCQlpZiAoIShyZWdzLT5tc3IgJiBNU1JfRlApKQorCQkJCWJyZWFrOworCQkJZWEgPSB4Zm9ybV9lYShpbnN0ciwgcmVncywgdSk7CisJCQllcnIgPSBkb19mcF9sb2FkKHJkLCBkb19sZnMsIGVhLCA0LCByZWdzKTsKKwkJCWdvdG8gbGRzdF9kb25lOworCisJCWNhc2UgNTk5OgkvKiBsZmR4ICovCisJCWNhc2UgNjMxOgkvKiBsZmR1eCAqLworCQkJaWYgKCEocmVncy0+bXNyICYgTVNSX0ZQKSkKKwkJCQlicmVhazsKKwkJCWVhID0geGZvcm1fZWEoaW5zdHIsIHJlZ3MsIHUpOworCQkJZXJyID0gZG9fZnBfbG9hZChyZCwgZG9fbGZkLCBlYSwgOCwgcmVncyk7CisJCQlnb3RvIGxkc3RfZG9uZTsKKworCQljYXNlIDY2MzoJLyogc3Rmc3ggKi8KKwkJY2FzZSA2OTU6CS8qIHN0ZnN1eCAqLworCQkJaWYgKCEocmVncy0+bXNyICYgTVNSX0ZQKSkKKwkJCQlicmVhazsKKwkJCWVhID0geGZvcm1fZWEoaW5zdHIsIHJlZ3MsIHUpOworCQkJZXJyID0gZG9fZnBfc3RvcmUocmQsIGRvX3N0ZnMsIGVhLCA0LCByZWdzKTsKKwkJCWdvdG8gbGRzdF9kb25lOworCisJCWNhc2UgNzI3OgkvKiBzdGZkeCAqLworCQljYXNlIDc1OToJLyogc3RmZHV4ICovCisJCQlpZiAoIShyZWdzLT5tc3IgJiBNU1JfRlApKQorCQkJCWJyZWFrOworCQkJZWEgPSB4Zm9ybV9lYShpbnN0ciwgcmVncywgdSk7CisJCQllcnIgPSBkb19mcF9zdG9yZShyZCwgZG9fc3RmZCwgZWEsIDgsIHJlZ3MpOworCQkJZ290byBsZHN0X2RvbmU7CisKKyNpZmRlZiBfX3Bvd2VycGM2NF9fCisJCWNhc2UgNjYwOgkvKiBzdGRicnggKi8KKwkJCXZhbCA9IGJ5dGVyZXZfOChyZWdzLT5ncHJbcmRdKTsKKwkJCWVyciA9IHdyaXRlX21lbSh2YWwsIHhmb3JtX2VhKGluc3RyLCByZWdzLCAwKSwgOCwgcmVncyk7CisJCQlnb3RvIGxkc3RfZG9uZTsKKworI2VuZGlmCisJCWNhc2UgNjYyOgkvKiBzdHdicnggKi8KKwkJCXZhbCA9IGJ5dGVyZXZfNChyZWdzLT5ncHJbcmRdKTsKKwkJCWVyciA9IHdyaXRlX21lbSh2YWwsIHhmb3JtX2VhKGluc3RyLCByZWdzLCAwKSwgNCwgcmVncyk7CisJCQlnb3RvIGxkc3RfZG9uZTsKKworCQljYXNlIDc5MDoJLyogbGhicnggKi8KKwkJCWVyciA9IHJlYWRfbWVtKCZ2YWwsIHhmb3JtX2VhKGluc3RyLCByZWdzLCAwKSwgMiwgcmVncyk7CisJCQlpZiAoIWVycikKKwkJCQlyZWdzLT5ncHJbcmRdID0gYnl0ZXJldl8yKHZhbCk7CisJCQlnb3RvIGxkc3RfZG9uZTsKKworCQljYXNlIDkxODoJLyogc3RoYnJ4ICovCisJCQl2YWwgPSBieXRlcmV2XzIocmVncy0+Z3ByW3JkXSk7CisJCQllcnIgPSB3cml0ZV9tZW0odmFsLCB4Zm9ybV9lYShpbnN0ciwgcmVncywgMCksIDIsIHJlZ3MpOworCQkJZ290byBsZHN0X2RvbmU7CisKKyNpZmRlZiBDT05GSUdfVlNYCisJCWNhc2UgODQ0OgkvKiBseHZkMnggKi8KKwkJY2FzZSA4NzY6CS8qIGx4dmQydXggKi8KKwkJCWlmICghKHJlZ3MtPm1zciAmIE1TUl9WU1gpKQorCQkJCWJyZWFrOworCQkJcmQgfD0gKGluc3RyICYgMSkgPDwgNTsKKwkJCWVhID0geGZvcm1fZWEoaW5zdHIsIHJlZ3MsIHUpOworCQkJZXJyID0gZG9fdnN4X2xvYWQocmQsIGRvX2x4dmQyeCwgZWEsIHJlZ3MpOworCQkJZ290byBsZHN0X2RvbmU7CisKKwkJY2FzZSA5NzI6CS8qIHN0eHZkMnggKi8KKwkJY2FzZSAxMDA0OgkvKiBzdHh2ZDJ1eCAqLworCQkJaWYgKCEocmVncy0+bXNyICYgTVNSX1ZTWCkpCisJCQkJYnJlYWs7CisJCQlyZCB8PSAoaW5zdHIgJiAxKSA8PCA1OworCQkJZWEgPSB4Zm9ybV9lYShpbnN0ciwgcmVncywgdSk7CisJCQllcnIgPSBkb192c3hfc3RvcmUocmQsIGRvX3N0eHZkMngsIGVhLCByZWdzKTsKKwkJCWdvdG8gbGRzdF9kb25lOworCisjZW5kaWYgLyogQ09ORklHX1ZTWCAqLworCQl9CisJCWJyZWFrOworCisJY2FzZSAzMjoJLyogbHd6ICovCisJY2FzZSAzMzoJLyogbHd6dSAqLworCQllcnIgPSByZWFkX21lbSgmcmVncy0+Z3ByW3JkXSwgZGZvcm1fZWEoaW5zdHIsIHJlZ3MpLCA0LCByZWdzKTsKKwkJZ290byBsZHN0X2RvbmU7CisKKwljYXNlIDM0OgkvKiBsYnogKi8KKwljYXNlIDM1OgkvKiBsYnp1ICovCisJCWVyciA9IHJlYWRfbWVtKCZyZWdzLT5ncHJbcmRdLCBkZm9ybV9lYShpbnN0ciwgcmVncyksIDEsIHJlZ3MpOworCQlnb3RvIGxkc3RfZG9uZTsKKworCWNhc2UgMzY6CS8qIHN0dyAqLworCWNhc2UgMzc6CS8qIHN0d3UgKi8KKwkJdmFsID0gcmVncy0+Z3ByW3JkXTsKKwkJZXJyID0gd3JpdGVfbWVtKHZhbCwgZGZvcm1fZWEoaW5zdHIsIHJlZ3MpLCA0LCByZWdzKTsKKwkJZ290byBsZHN0X2RvbmU7CisKKwljYXNlIDM4OgkvKiBzdGIgKi8KKwljYXNlIDM5OgkvKiBzdGJ1ICovCisJCXZhbCA9IHJlZ3MtPmdwcltyZF07CisJCWVyciA9IHdyaXRlX21lbSh2YWwsIGRmb3JtX2VhKGluc3RyLCByZWdzKSwgMSwgcmVncyk7CisJCWdvdG8gbGRzdF9kb25lOworCisJY2FzZSA0MDoJLyogbGh6ICovCisJY2FzZSA0MToJLyogbGh6dSAqLworCQllcnIgPSByZWFkX21lbSgmcmVncy0+Z3ByW3JkXSwgZGZvcm1fZWEoaW5zdHIsIHJlZ3MpLCAyLCByZWdzKTsKKwkJZ290byBsZHN0X2RvbmU7CisKKwljYXNlIDQyOgkvKiBsaGEgKi8KKwljYXNlIDQzOgkvKiBsaGF1ICovCisJCWVyciA9IHJlYWRfbWVtKCZyZWdzLT5ncHJbcmRdLCBkZm9ybV9lYShpbnN0ciwgcmVncyksIDIsIHJlZ3MpOworCQlpZiAoIWVycikKKwkJCXJlZ3MtPmdwcltyZF0gPSAoc2lnbmVkIHNob3J0KSByZWdzLT5ncHJbcmRdOworCQlnb3RvIGxkc3RfZG9uZTsKKworCWNhc2UgNDQ6CS8qIHN0aCAqLworCWNhc2UgNDU6CS8qIHN0aHUgKi8KKwkJdmFsID0gcmVncy0+Z3ByW3JkXTsKKwkJZXJyID0gd3JpdGVfbWVtKHZhbCwgZGZvcm1fZWEoaW5zdHIsIHJlZ3MpLCAyLCByZWdzKTsKKwkJZ290byBsZHN0X2RvbmU7CisKKwljYXNlIDQ2OgkvKiBsbXcgKi8KKwkJcmEgPSAoaW5zdHIgPj4gMTYpICYgMHgxZjsKKwkJaWYgKHJhID49IHJkKQorCQkJYnJlYWs7CQkvKiBpbnZhbGlkIGZvcm0sIHJhIGluIHJhbmdlIHRvIGxvYWQgKi8KKwkJZWEgPSBkZm9ybV9lYShpbnN0ciwgcmVncyk7CisJCWRvIHsKKwkJCWVyciA9IHJlYWRfbWVtKCZyZWdzLT5ncHJbcmRdLCBlYSwgNCwgcmVncyk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiAwOworCQkJZWEgKz0gNDsKKwkJfSB3aGlsZSAoKytyZCA8IDMyKTsKKwkJZ290byBpbnN0cl9kb25lOworCisJY2FzZSA0NzoJLyogc3RtdyAqLworCQllYSA9IGRmb3JtX2VhKGluc3RyLCByZWdzKTsKKwkJZG8geworCQkJZXJyID0gd3JpdGVfbWVtKHJlZ3MtPmdwcltyZF0sIGVhLCA0LCByZWdzKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIDA7CisJCQllYSArPSA0OworCQl9IHdoaWxlICgrK3JkIDwgMzIpOworCQlnb3RvIGluc3RyX2RvbmU7CisKKwljYXNlIDQ4OgkvKiBsZnMgKi8KKwljYXNlIDQ5OgkvKiBsZnN1ICovCisJCWlmICghKHJlZ3MtPm1zciAmIE1TUl9GUCkpCisJCQlicmVhazsKKwkJZWEgPSBkZm9ybV9lYShpbnN0ciwgcmVncyk7CisJCWVyciA9IGRvX2ZwX2xvYWQocmQsIGRvX2xmcywgZWEsIDQsIHJlZ3MpOworCQlnb3RvIGxkc3RfZG9uZTsKKworCWNhc2UgNTA6CS8qIGxmZCAqLworCWNhc2UgNTE6CS8qIGxmZHUgKi8KKwkJaWYgKCEocmVncy0+bXNyICYgTVNSX0ZQKSkKKwkJCWJyZWFrOworCQllYSA9IGRmb3JtX2VhKGluc3RyLCByZWdzKTsKKwkJZXJyID0gZG9fZnBfbG9hZChyZCwgZG9fbGZkLCBlYSwgOCwgcmVncyk7CisJCWdvdG8gbGRzdF9kb25lOworCisJY2FzZSA1MjoJLyogc3RmcyAqLworCWNhc2UgNTM6CS8qIHN0ZnN1ICovCisJCWlmICghKHJlZ3MtPm1zciAmIE1TUl9GUCkpCisJCQlicmVhazsKKwkJZWEgPSBkZm9ybV9lYShpbnN0ciwgcmVncyk7CisJCWVyciA9IGRvX2ZwX3N0b3JlKHJkLCBkb19zdGZzLCBlYSwgNCwgcmVncyk7CisJCWdvdG8gbGRzdF9kb25lOworCisJY2FzZSA1NDoJLyogc3RmZCAqLworCWNhc2UgNTU6CS8qIHN0ZmR1ICovCisJCWlmICghKHJlZ3MtPm1zciAmIE1TUl9GUCkpCisJCQlicmVhazsKKwkJZWEgPSBkZm9ybV9lYShpbnN0ciwgcmVncyk7CisJCWVyciA9IGRvX2ZwX3N0b3JlKHJkLCBkb19zdGZkLCBlYSwgOCwgcmVncyk7CisJCWdvdG8gbGRzdF9kb25lOworCisjaWZkZWYgX19wb3dlcnBjNjRfXworCWNhc2UgNTg6CS8qIGxkW3VdLCBsd2EgKi8KKwkJc3dpdGNoIChpbnN0ciAmIDMpIHsKKwkJY2FzZSAwOgkJLyogbGQgKi8KKwkJCWVyciA9IHJlYWRfbWVtKCZyZWdzLT5ncHJbcmRdLCBkc2Zvcm1fZWEoaW5zdHIsIHJlZ3MpLAorCQkJCSAgICAgICA4LCByZWdzKTsKKwkJCWdvdG8gbGRzdF9kb25lOworCQljYXNlIDE6CQkvKiBsZHUgKi8KKwkJCWVyciA9IHJlYWRfbWVtKCZyZWdzLT5ncHJbcmRdLCBkc2Zvcm1fZWEoaW5zdHIsIHJlZ3MpLAorCQkJCSAgICAgICA4LCByZWdzKTsKKwkJCWdvdG8gbGRzdF9kb25lOworCQljYXNlIDI6CQkvKiBsd2EgKi8KKwkJCWVyciA9IHJlYWRfbWVtKCZyZWdzLT5ncHJbcmRdLCBkc2Zvcm1fZWEoaW5zdHIsIHJlZ3MpLAorCQkJCSAgICAgICA0LCByZWdzKTsKKwkJCWlmICghZXJyKQorCQkJCXJlZ3MtPmdwcltyZF0gPSAoc2lnbmVkIGludCkgcmVncy0+Z3ByW3JkXTsKKwkJCWdvdG8gbGRzdF9kb25lOworCQl9CisJCWJyZWFrOworCisJY2FzZSA2MjoJLyogc3RkW3VdICovCisJCXZhbCA9IHJlZ3MtPmdwcltyZF07CisJCXN3aXRjaCAoaW5zdHIgJiAzKSB7CisJCWNhc2UgMDoJCS8qIHN0ZCAqLworCQkJZXJyID0gd3JpdGVfbWVtKHZhbCwgZHNmb3JtX2VhKGluc3RyLCByZWdzKSwgOCwgcmVncyk7CisJCQlnb3RvIGxkc3RfZG9uZTsKKwkJY2FzZSAxOgkJLyogc3RkdSAqLworCQkJZXJyID0gd3JpdGVfbWVtKHZhbCwgZHNmb3JtX2VhKGluc3RyLCByZWdzKSwgOCwgcmVncyk7CisJCQlnb3RvIGxkc3RfZG9uZTsKKwkJfQorCQlicmVhazsKKyNlbmRpZiAvKiBfX3Bvd2VycGM2NF9fICovCisKKwl9CisJZXJyID0gLUVJTlZBTDsKKworIGxkc3RfZG9uZToKKwlpZiAoZXJyKSB7CisJCXJlZ3MtPmdwcltyYV0gPSBvbGRfcmE7CisJCXJldHVybiAwOwkvKiBpbnZva2UgRFNJIGlmIC1FRkFVTFQ/ICovCisJfQorIGluc3RyX2RvbmU6CisJcmVncy0+bmlwICs9IDQ7CisjaWZkZWYgX19wb3dlcnBjNjRfXworCWlmICgocmVncy0+bXNyICYgTVNSX1NGKSA9PSAwKQorCQlyZWdzLT5uaXAgJj0gMHhmZmZmZmZmZlVMOworI2VuZGlmCisJcmV0dXJuIDE7CisKKyBsb2dpY2FsX2RvbmU6CisJaWYgKGluc3RyICYgMSkKKwkJc2V0X2NyMChyZWdzLCByYSk7CisJZ290byBpbnN0cl9kb25lOworCisgYXJpdGhfZG9uZToKKwlpZiAoaW5zdHIgJiAxKQorCQlzZXRfY3IwKHJlZ3MsIHJkKTsKKwlnb3RvIGluc3RyX2RvbmU7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vNDB4X21tdS5jIGIvYXJjaC9wb3dlcnBjL21tLzQweF9tbXUuYwppbmRleCA2NWFiZmNmLi4xZGMyZmE1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vNDB4X21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS80MHhfbW11LmMKQEAgLTEzNSw3ICsxMzUsNyBAQAogCS8qIElmIHRoZSBzaXplIG9mIFJBTSBpcyBub3QgYW4gZXhhY3QgcG93ZXIgb2YgdHdvLCB3ZSBtYXkgbm90CiAJICogaGF2ZSBjb3ZlcmVkIFJBTSBpbiBpdHMgZW50aXJldHkgd2l0aCAxNiBhbmQgNCBNaUIKIAkgKiBwYWdlcy4gQ29uc2VxdWVudGx5LCByZXN0cmljdCB0aGUgdG9wIGVuZCBvZiBSQU0gY3VycmVudGx5Ci0JICogYWxsb2NhYmxlIHNvIHRoYXQgY2FsbHMgdG8gdGhlIExNQiB0byBhbGxvY2F0ZSBQVEVzIGZvciAidGFpbCIKKwkgKiBhbGxvY2FibGUgc28gdGhhdCBjYWxscyB0byB0aGUgTUVNQkxPQ0sgdG8gYWxsb2NhdGUgUFRFcyBmb3IgInRhaWwiCiAJICogY292ZXJhZ2Ugd2l0aCBub3JtYWwtc2l6ZWQgcGFnZXMgKG9yIG90aGVyIHJlYXNvbnMpIGRvIG5vdAogCSAqIGF0dGVtcHQgdG8gYWxsb2NhdGUgb3V0c2lkZSB0aGUgYWxsb3dlZCByYW5nZS4KIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9mc2xfYm9va2VfbW11LmMgYi9hcmNoL3Bvd2VycGMvbW0vZnNsX2Jvb2tlX21tdS5jCmluZGV4IGNkYzc1MjYuLjRiNjZhMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9mc2xfYm9va2VfbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2ZzbF9ib29rZV9tbXUuYwpAQCAtMTA0LDkgKzEwNCwxMCBAQAogfQogCiAvKgotICogU2V0IHVwIG9uZSBvZiB0aGUgSS9EIEJBVCAoYmxvY2sgYWRkcmVzcyB0cmFuc2xhdGlvbikgcmVnaXN0ZXIgcGFpcnMuCi0gKiBUaGUgcGFyYW1ldGVycyBhcmUgbm90IGNoZWNrZWQ7IGluIHBhcnRpY3VsYXIgc2l6ZSBtdXN0IGJlIGEgcG93ZXIKLSAqIG9mIDQgYmV0d2VlbiA0ayBhbmQgMjU2TS4KKyAqIFNldCB1cCBhIHZhcmlhYmxlLXNpemUgVExCIGVudHJ5ICh0bGJjYW0pLiBUaGUgcGFyYW1ldGVycyBhcmUgbm90IGNoZWNrZWQ7CisgKiBpbiBwYXJ0aWN1bGFyIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIDQgYmV0d2VlbiA0ayBhbmQgMjU2TSAob3IgMUcsIGZvciBjcHVzCisgKiB0aGF0IHN1cHBvcnQgZXh0ZW5kZWQgcGFnZSBzaXplcykuICBOb3RlIHRoYXQgd2hpbGUgc29tZSBjcHVzIHN1cHBvcnQgYQorICogcGFnZSBzaXplIG9mIDRHLCB3ZSBkb24ndCBhbGxvdyBpdHMgdXNlIGhlcmUuCiAgKi8KIHN0YXRpYyB2b2lkIHNldHRsYmNhbShpbnQgaW5kZXgsIHVuc2lnbmVkIGxvbmcgdmlydCwgcGh5c19hZGRyX3QgcGh5cywKIAkJdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBpbnQgcGlkKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfbG93XzY0LlMgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF9sb3dfNjQuUwppbmRleCBhNzE5ZjUzLi4zMDc5ZjZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF9sb3dfNjQuUworKysgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF9sb3dfNjQuUwpAQCAtNjgsOSArNjgsNiBAQAogCXN0ZAlyOCxTVEtfUEFSTShyOCkocjEpCiAJc3RkCXI5LFNUS19QQVJNKHI5KShyMSkKIAkKLQkvKiBBZGQgX1BBR0VfUFJFU0VOVCB0byBhY2Nlc3MgKi8KLQlvcmkJcjQscjQsX1BBR0VfUFJFU0VOVAotCiAJLyogU2F2ZSBub24tdm9sYXRpbGUgcmVnaXN0ZXJzLgogCSAqIHIzMSB3aWxsIGhvbGQgIm9sZCBQVEUiCiAJICogcjMwIGlzICJuZXcgUFRFIgpAQCAtMzQ3LDkgKzM0NCw2IEBACiAJc3RkCXI4LFNUS19QQVJNKHI4KShyMSkKIAlzdGQJcjksU1RLX1BBUk0ocjkpKHIxKQogCi0JLyogQWRkIF9QQUdFX1BSRVNFTlQgdG8gYWNjZXNzICovCi0Jb3JpCXI0LHI0LF9QQUdFX1BSRVNFTlQKLQogCS8qIFNhdmUgbm9uLXZvbGF0aWxlIHJlZ2lzdGVycy4KIAkgKiByMzEgd2lsbCBob2xkICJvbGQgUFRFIgogCSAqIHIzMCBpcyAibmV3IFBURSIKQEAgLTY4Nyw5ICs2ODEsNiBAQAogCXN0ZAlyOCxTVEtfUEFSTShyOCkocjEpCiAJc3RkCXI5LFNUS19QQVJNKHI5KShyMSkKIAotCS8qIEFkZCBfUEFHRV9QUkVTRU5UIHRvIGFjY2VzcyAqLwotCW9yaQlyNCxyNCxfUEFHRV9QUkVTRU5UCi0KIAkvKiBTYXZlIG5vbi12b2xhdGlsZSByZWdpc3RlcnMuCiAJICogcjMxIHdpbGwgaG9sZCAib2xkIFBURSIKIAkgKiByMzAgaXMgIm5ldyBQVEUiCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYwppbmRleCAzZWNkY2VjLi4wOWRmZmU2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9sbWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC0zODQsOCArMzg0LDggQEAKIAlwcmludGsoS0VSTl9JTkZPICJIdWdlIHBhZ2UoMTZHQikgbWVtb3J5OiAiCiAJCQkiYWRkciA9IDB4JWxYIHNpemUgPSAweCVsWCBwYWdlcyA9ICVkXG4iLAogCQkJcGh5c19hZGRyLCBibG9ja19zaXplLCBleHBlY3RlZF9wYWdlcyk7Ci0JaWYgKHBoeXNfYWRkciArICgxNiAqIEdCKSA8PSBsbWJfZW5kX29mX0RSQU0oKSkgewotCQlsbWJfcmVzZXJ2ZShwaHlzX2FkZHIsIGJsb2NrX3NpemUgKiBleHBlY3RlZF9wYWdlcyk7CisJaWYgKHBoeXNfYWRkciArICgxNiAqIEdCKSA8PSBtZW1ibG9ja19lbmRfb2ZfRFJBTSgpKSB7CisJCW1lbWJsb2NrX3Jlc2VydmUocGh5c19hZGRyLCBibG9ja19zaXplICogZXhwZWN0ZWRfcGFnZXMpOwogCQlhZGRfZ3BhZ2UocGh5c19hZGRyLCBibG9ja19zaXplLCBleHBlY3RlZF9wYWdlcyk7CiAJfQogCXJldHVybiAwOwpAQCAtNDU4LDcgKzQ1OCw3IEBACiAJICogYW5kIHdlIGhhdmUgYXQgbGVhc3QgMUcgb2YgUkFNIGF0IGJvb3QKIAkgKi8KIAlpZiAobW11X3BzaXplX2RlZnNbTU1VX1BBR0VfMTZNXS5zaGlmdCAmJgotCSAgICBsbWJfcGh5c19tZW1fc2l6ZSgpID49IDB4NDAwMDAwMDApCisJICAgIG1lbWJsb2NrX3BoeXNfbWVtX3NpemUoKSA+PSAweDQwMDAwMDAwKQogCQltbXVfdm1lbW1hcF9wc2l6ZSA9IE1NVV9QQUdFXzE2TTsKIAllbHNlIGlmIChtbXVfcHNpemVfZGVmc1tNTVVfUEFHRV82NEtdLnNoaWZ0KQogCQltbXVfdm1lbW1hcF9wc2l6ZSA9IE1NVV9QQUdFXzY0SzsKQEAgLTUyMCw3ICs1MjAsNyBAQAogCQlyZXR1cm4gMVVMIDw8IHBwYzY0X3BmdF9zaXplOwogCiAJLyogcm91bmQgbWVtX3NpemUgdXAgdG8gbmV4dCBwb3dlciBvZiAyICovCi0JbWVtX3NpemUgPSBsbWJfcGh5c19tZW1fc2l6ZSgpOworCW1lbV9zaXplID0gbWVtYmxvY2tfcGh5c19tZW1fc2l6ZSgpOwogCXJuZF9tZW1fc2l6ZSA9IDFVTCA8PCBfX2lsb2cyKG1lbV9zaXplKTsKIAlpZiAocm5kX21lbV9zaXplIDwgbWVtX3NpemUpCiAJCXJuZF9tZW1fc2l6ZSA8PD0gMTsKQEAgLTYyNyw3ICs2MjcsNyBAQAogCQllbHNlCiAJCQlsaW1pdCA9IDA7CiAKLQkJdGFibGUgPSBsbWJfYWxsb2NfYmFzZShodGFiX3NpemVfYnl0ZXMsIGh0YWJfc2l6ZV9ieXRlcywgbGltaXQpOworCQl0YWJsZSA9IG1lbWJsb2NrX2FsbG9jX2Jhc2UoaHRhYl9zaXplX2J5dGVzLCBodGFiX3NpemVfYnl0ZXMsIGxpbWl0KTsKIAogCQlEQkcoIkhhc2ggdGFibGUgYWxsb2NhdGVkIGF0ICVseCwgc2l6ZTogJWx4XG4iLCB0YWJsZSwKIAkJICAgIGh0YWJfc2l6ZV9ieXRlcyk7CkBAIC02NDcsOSArNjQ3LDkgQEAKIAlwcm90ID0gcGdwcm90X3ZhbChQQUdFX0tFUk5FTCk7CiAKICNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCi0JbGluZWFyX21hcF9oYXNoX2NvdW50ID0gbG1iX2VuZF9vZl9EUkFNKCkgPj4gUEFHRV9TSElGVDsKLQlsaW5lYXJfbWFwX2hhc2hfc2xvdHMgPSBfX3ZhKGxtYl9hbGxvY19iYXNlKGxpbmVhcl9tYXBfaGFzaF9jb3VudCwKLQkJCQkJCSAgICAxLCBsbWIucm1vX3NpemUpKTsKKwlsaW5lYXJfbWFwX2hhc2hfY291bnQgPSBtZW1ibG9ja19lbmRfb2ZfRFJBTSgpID4+IFBBR0VfU0hJRlQ7CisJbGluZWFyX21hcF9oYXNoX3Nsb3RzID0gX192YShtZW1ibG9ja19hbGxvY19iYXNlKGxpbmVhcl9tYXBfaGFzaF9jb3VudCwKKwkJCQkJCSAgICAxLCBtZW1ibG9jay5ybW9fc2l6ZSkpOwogCW1lbXNldChsaW5lYXJfbWFwX2hhc2hfc2xvdHMsIDAsIGxpbmVhcl9tYXBfaGFzaF9jb3VudCk7CiAjZW5kaWYgLyogQ09ORklHX0RFQlVHX1BBR0VBTExPQyAqLwogCkBAIC02NTksMTYgKzY1OSwxNiBAQAogCSAqLwogCiAJLyogY3JlYXRlIGJvbHRlZCB0aGUgbGluZWFyIG1hcHBpbmcgaW4gdGhlIGhhc2ggdGFibGUgKi8KLQlmb3IgKGk9MDsgaSA8IGxtYi5tZW1vcnkuY250OyBpKyspIHsKLQkJYmFzZSA9ICh1bnNpZ25lZCBsb25nKV9fdmEobG1iLm1lbW9yeS5yZWdpb25baV0uYmFzZSk7Ci0JCXNpemUgPSBsbWIubWVtb3J5LnJlZ2lvbltpXS5zaXplOworCWZvciAoaT0wOyBpIDwgbWVtYmxvY2subWVtb3J5LmNudDsgaSsrKSB7CisJCWJhc2UgPSAodW5zaWduZWQgbG9uZylfX3ZhKG1lbWJsb2NrLm1lbW9yeS5yZWdpb25baV0uYmFzZSk7CisJCXNpemUgPSBtZW1ibG9jay5tZW1vcnkucmVnaW9uW2ldLnNpemU7CiAKIAkJREJHKCJjcmVhdGluZyBtYXBwaW5nIGZvciByZWdpb246ICVseC4uJWx4IChwcm90OiAlbHgpXG4iLAogCQkgICAgYmFzZSwgc2l6ZSwgcHJvdCk7CiAKICNpZmRlZiBDT05GSUdfVTNfREFSVAogCQkvKiBEbyBub3QgbWFwIHRoZSBEQVJUIHNwYWNlLiBGb3J0dW5hdGVseSwgaXQgd2lsbCBiZSBhbGlnbmVkCi0JCSAqIGluIHN1Y2ggYSB3YXkgdGhhdCBpdCB3aWxsIG5vdCBjcm9zcyB0d28gbG1iIHJlZ2lvbnMgYW5kCisJCSAqIGluIHN1Y2ggYSB3YXkgdGhhdCBpdCB3aWxsIG5vdCBjcm9zcyB0d28gbWVtYmxvY2sgcmVnaW9ucyBhbmQKIAkJICogd2lsbCBmaXQgd2l0aGluIGEgc2luZ2xlIDE2TWIgcGFnZS4KIAkJICogVGhlIERBUlQgc3BhY2UgaXMgYXNzdW1lZCB0byBiZSBhIGZ1bGwgMTZNYiByZWdpb24gZXZlbiBpZgogCQkgKiB3ZSBvbmx5IHVzZSAyTWIgb2YgdGhhdCBzcGFjZS4gV2Ugd2lsbCB1c2UgbW9yZSBvZiBpdCBsYXRlcgpAQCAtODcxLDYgKzg3MSwxOCBAQAogfQogI2VuZGlmCiAKK3ZvaWQgaGFzaF9mYWlsdXJlX2RlYnVnKHVuc2lnbmVkIGxvbmcgZWEsIHVuc2lnbmVkIGxvbmcgYWNjZXNzLAorCQkJdW5zaWduZWQgbG9uZyB2c2lkLCB1bnNpZ25lZCBsb25nIHRyYXAsCisJCQlpbnQgc3NpemUsIGludCBwc2l6ZSwgdW5zaWduZWQgbG9uZyBwdGUpCit7CisJaWYgKCFwcmludGtfcmF0ZWxpbWl0KCkpCisJCXJldHVybjsKKwlwcl9pbmZvKCJtbTogSGFzaGluZyBmYWlsdXJlICEgRUE9MHglbHggYWNjZXNzPTB4JWx4IGN1cnJlbnQ9JXNcbiIsCisJCWVhLCBhY2Nlc3MsIGN1cnJlbnQtPmNvbW0pOworCXByX2luZm8oIiAgICB0cmFwPTB4JWx4IHZzaWQ9MHglbHggc3NpemU9JWQgcHNpemU9JWQgcHRlPTB4JWx4XG4iLAorCQl0cmFwLCB2c2lkLCBzc2l6ZSwgcHNpemUsIHB0ZSk7Cit9CisKIC8qIFJlc3VsdCBjb2RlIGlzOgogICogIDAgLSBoYW5kbGVkCiAgKiAgMSAtIG5vcm1hbCBwYWdlIGZhdWx0CkBAIC05NTUsNiArOTY3LDE3IEBACiAJCXJldHVybiAxOwogCX0KIAorCS8qIEFkZCBfUEFHRV9QUkVTRU5UIHRvIHRoZSByZXF1aXJlZCBhY2Nlc3MgcGVybSAqLworCWFjY2VzcyB8PSBfUEFHRV9QUkVTRU5UOworCisJLyogUHJlLWNoZWNrIGFjY2VzcyBwZXJtaXNzaW9ucyAod2lsbCBiZSByZS1jaGVja2VkIGF0b21pY2FsbHkKKwkgKiBpbiBfX2hhc2hfcGFnZV9YWCBidXQgdGhpcyBwcmUtY2hlY2sgaXMgYSBmYXN0IHBhdGgKKwkgKi8KKwlpZiAoYWNjZXNzICYgfnB0ZV92YWwoKnB0ZXApKSB7CisJCURCR19MT1coIiBubyBhY2Nlc3MgIVxuIik7CisJCXJldHVybiAxOworCX0KKwogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKIAlpZiAoaHVnZXNoaWZ0KQogCQlyZXR1cm4gX19oYXNoX3BhZ2VfaHVnZShlYSwgYWNjZXNzLCB2c2lkLCBwdGVwLCB0cmFwLCBsb2NhbCwKQEAgLTk2NywxNCArOTkwLDYgQEAKIAlEQkdfTE9XKCIgaS1wdGU6ICUwMTZseCAlMDE2bHhcbiIsIHB0ZV92YWwoKnB0ZXApLAogCQlwdGVfdmFsKCoocHRlcCArIFBUUlNfUEVSX1BURSkpKTsKICNlbmRpZgotCS8qIFByZS1jaGVjayBhY2Nlc3MgcGVybWlzc2lvbnMgKHdpbGwgYmUgcmUtY2hlY2tlZCBhdG9taWNhbGx5Ci0JICogaW4gX19oYXNoX3BhZ2VfWFggYnV0IHRoaXMgcHJlLWNoZWNrIGlzIGEgZmFzdCBwYXRoCi0JICovCi0JaWYgKGFjY2VzcyAmIH5wdGVfdmFsKCpwdGVwKSkgewotCQlEQkdfTE9XKCIgbm8gYWNjZXNzICFcbiIpOwotCQlyZXR1cm4gMTsKLQl9Ci0KIAkvKiBEbyBhY3R1YWwgaGFzaGluZyAqLwogI2lmZGVmIENPTkZJR19QUENfNjRLX1BBR0VTCiAJLyogSWYgX1BBR0VfNEtfUEZOIGlzIHNldCwgbWFrZSBzdXJlIHRoaXMgaXMgYSA0ayBzZWdtZW50ICovCkBAIC0xMDMzLDYgKzEwNDgsMTIgQEAKIAkJCQkJICAgIGxvY2FsLCBzc2l6ZSwgc3BwKTsKIAl9CiAKKwkvKiBEdW1wIHNvbWUgaW5mbyBpbiBjYXNlIG9mIGhhc2ggaW5zZXJ0aW9uIGZhaWx1cmUsIHRoZXkgc2hvdWxkCisJICogbmV2ZXIgaGFwcGVuIHNvIGl0IGlzIHJlYWxseSB1c2VmdWwgdG8ga25vdyBpZi93aGVuIHRoZXkgZG8KKwkgKi8KKwlpZiAocmMgPT0gLTEpCisJCWhhc2hfZmFpbHVyZV9kZWJ1ZyhlYSwgYWNjZXNzLCB2c2lkLCB0cmFwLCBzc2l6ZSwgcHNpemUsCisJCQkJICAgcHRlX3ZhbCgqcHRlcCkpOwogI2lmbmRlZiBDT05GSUdfUFBDXzY0S19QQUdFUwogCURCR19MT1coIiBvLXB0ZTogJTAxNmx4XG4iLCBwdGVfdmFsKCpwdGVwKSk7CiAjZWxzZQpAQCAtMTA1MSw4ICsxMDcyLDcgQEAKIAl2b2lkICpwZ2RpcjsKIAlwdGVfdCAqcHRlcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBsb2NhbCA9IDA7Ci0JaW50IHNzaXplOworCWludCByYywgc3NpemUsIGxvY2FsID0gMDsKIAogCUJVR19PTihSRUdJT05fSUQoZWEpICE9IFVTRVJfUkVHSU9OX0lEKTsKIApAQCAtMTA5OCwxMSArMTExOCwxOCBAQAogCS8qIEhhc2ggaXQgaW4gKi8KICNpZmRlZiBDT05GSUdfUFBDX0hBU19IQVNIXzY0SwogCWlmIChtbS0+Y29udGV4dC51c2VyX3BzaXplID09IE1NVV9QQUdFXzY0SykKLQkJX19oYXNoX3BhZ2VfNjRLKGVhLCBhY2Nlc3MsIHZzaWQsIHB0ZXAsIHRyYXAsIGxvY2FsLCBzc2l6ZSk7CisJCXJjID0gX19oYXNoX3BhZ2VfNjRLKGVhLCBhY2Nlc3MsIHZzaWQsIHB0ZXAsIHRyYXAsIGxvY2FsLCBzc2l6ZSk7CiAJZWxzZQogI2VuZGlmIC8qIENPTkZJR19QUENfSEFTX0hBU0hfNjRLICovCi0JCV9faGFzaF9wYWdlXzRLKGVhLCBhY2Nlc3MsIHZzaWQsIHB0ZXAsIHRyYXAsIGxvY2FsLCBzc2l6ZSwKLQkJCSAgICAgICBzdWJwYWdlX3Byb3RlY3Rpb24ocGdkaXIsIGVhKSk7CisJCXJjID0gX19oYXNoX3BhZ2VfNEsoZWEsIGFjY2VzcywgdnNpZCwgcHRlcCwgdHJhcCwgbG9jYWwsIHNzaXplLAorCQkJCSAgICBzdWJwYWdlX3Byb3RlY3Rpb24ocGdkaXIsIGVhKSk7CisKKwkvKiBEdW1wIHNvbWUgaW5mbyBpbiBjYXNlIG9mIGhhc2ggaW5zZXJ0aW9uIGZhaWx1cmUsIHRoZXkgc2hvdWxkCisJICogbmV2ZXIgaGFwcGVuIHNvIGl0IGlzIHJlYWxseSB1c2VmdWwgdG8ga25vdyBpZi93aGVuIHRoZXkgZG8KKwkgKi8KKwlpZiAocmMgPT0gLTEpCisJCWhhc2hfZmFpbHVyZV9kZWJ1ZyhlYSwgYWNjZXNzLCB2c2lkLCB0cmFwLCBzc2l6ZSwKKwkJCQkgICBtbS0+Y29udGV4dC51c2VyX3BzaXplLCBwdGVfdmFsKCpwdGVwKSk7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UtaGFzaDY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UtaGFzaDY0LmMKaW5kZXggMTk5NTM5OC4uY2M1YzI3MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLWhhc2g2NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS1oYXNoNjQuYwpAQCAtMjEsMjEgKzIxLDEzIEBACiAJdW5zaWduZWQgbG9uZyBvbGRfcHRlLCBuZXdfcHRlOwogCXVuc2lnbmVkIGxvbmcgdmEsIHJmbGFncywgcGEsIHN6OwogCWxvbmcgc2xvdDsKLQlpbnQgZXJyID0gMTsKIAogCUJVR19PTihzaGlmdCAhPSBtbXVfcHNpemVfZGVmc1ttbXVfcHNpemVdLnNoaWZ0KTsKIAogCS8qIFNlYXJjaCB0aGUgTGludXggcGFnZSB0YWJsZSBmb3IgYSBtYXRjaCB3aXRoIHZhICovCiAJdmEgPSBocHRfdmEoZWEsIHZzaWQsIHNzaXplKTsKIAotCS8qCi0JICogQ2hlY2sgdGhlIHVzZXIncyBhY2Nlc3MgcmlnaHRzIHRvIHRoZSBwYWdlLiAgSWYgYWNjZXNzIHNob3VsZCBiZQotCSAqIHByZXZlbnRlZCB0aGVuIHNlbmQgdGhlIHByb2JsZW0gdXAgdG8gZG9fcGFnZV9mYXVsdC4KLQkgKi8KLQlpZiAodW5saWtlbHkoYWNjZXNzICYgfnB0ZV92YWwoKnB0ZXApKSkKLQkJZ290byBvdXQ7Ci0JLyoKLQkgKiBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGEgcHRlIChvbGRfcHRlKSB3aGljaCBjYW4gYmUgdXNlZCB0byBidWlsZAorCS8qIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgYSBwdGUgKG9sZF9wdGUpIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGJ1aWxkCiAJICogb3IgdXBkYXRlIGFuIEhQVEUuIFRoZXJlIGFyZSAyIGNhc2VzOgogCSAqCiAJICogMS4gVGhlcmUgaXMgYSB2YWxpZCAocHJlc2VudCkgcHRlIHdpdGggbm8gYXNzb2NpYXRlZCBIUFRFICh0aGlzIGlzCkBAIC00OSw5ICs0MSwxNyBAQAogCiAJZG8gewogCQlvbGRfcHRlID0gcHRlX3ZhbCgqcHRlcCk7Ci0JCWlmIChvbGRfcHRlICYgX1BBR0VfQlVTWSkKLQkJCWdvdG8gb3V0OworCQkvKiBJZiBQVEUgYnVzeSwgcmV0cnkgdGhlIGFjY2VzcyAqLworCQlpZiAodW5saWtlbHkob2xkX3B0ZSAmIF9QQUdFX0JVU1kpKQorCQkJcmV0dXJuIDA7CisJCS8qIElmIFBURSBwZXJtaXNzaW9ucyBkb24ndCBtYXRjaCwgdGFrZSBwYWdlIGZhdWx0ICovCisJCWlmICh1bmxpa2VseShhY2Nlc3MgJiB+b2xkX3B0ZSkpCisJCQlyZXR1cm4gMTsKKwkJLyogVHJ5IHRvIGxvY2sgdGhlIFBURSwgYWRkIEFDQ0VTU0VEIGFuZCBESVJUWSBpZiBpdCB3YXMKKwkJICogYSB3cml0ZSBhY2Nlc3MgKi8KIAkJbmV3X3B0ZSA9IG9sZF9wdGUgfCBfUEFHRV9CVVNZIHwgX1BBR0VfQUNDRVNTRUQ7CisJCWlmIChhY2Nlc3MgJiBfUEFHRV9SVykKKwkJCW5ld19wdGUgfD0gX1BBR0VfRElSVFk7CiAJfSB3aGlsZShvbGRfcHRlICE9IF9fY21weGNoZ191NjQoKHVuc2lnbmVkIGxvbmcgKilwdGVwLAogCQkJCQkgb2xkX3B0ZSwgbmV3X3B0ZSkpOwogCkBAIC0xMjEsOCArMTIxLDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAJCX0KIAotCQlpZiAodW5saWtlbHkoc2xvdCA9PSAtMikpCi0JCQlwYW5pYygiaGFzaF9odWdlX3BhZ2U6IHB0ZV9pbnNlcnQgZmFpbGVkXG4iKTsKKwkJLyoKKwkJICogSHlwZXJ2aXNvciBmYWlsdXJlLiBSZXN0b3JlIG9sZCBwdGUgYW5kIHJldHVybiAtMQorCQkgKiBzaW1pbGFyIHRvIF9faGFzaF9wYWdlXyoKKwkJICovCisJCWlmICh1bmxpa2VseShzbG90ID09IC0yKSkgeworCQkJKnB0ZXAgPSBfX3B0ZShvbGRfcHRlKTsKKwkJCWhhc2hfZmFpbHVyZV9kZWJ1ZyhlYSwgYWNjZXNzLCB2c2lkLCB0cmFwLCBzc2l6ZSwKKwkJCQkJICAgbW11X3BzaXplLCBvbGRfcHRlKTsKKwkJCXJldHVybiAtMTsKKwkJfQogCiAJCW5ld19wdGUgfD0gKHNsb3QgPDwgMTIpICYgKF9QQUdFX0ZfU0VDT05EIHwgX1BBR0VfRl9HSVgpOwogCX0KQEAgLTEzMSw5ICsxMzksNSBAQAogCSAqIE5vIG5lZWQgdG8gdXNlIGxkYXJ4L3N0ZGN4IGhlcmUKIAkgKi8KIAkqcHRlcCA9IF9fcHRlKG5ld19wdGUgJiB+X1BBR0VfQlVTWSk7Ci0KLQllcnIgPSAwOwotCi0gb3V0OgotCXJldHVybiBlcnI7CisJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaW5pdF8zMi5jIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfMzIuYwppbmRleCA3NjczMzMwLi42YTY5NzVkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaW5pdF8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgorI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CiAKICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgpAQCAtMTM2LDE3ICsxMzYsMTcgQEAKIAkvKiBwYXJzZSBhcmdzIGZyb20gY29tbWFuZCBsaW5lICovCiAJTU1VX3NldHVwKCk7CiAKLQlpZiAobG1iLm1lbW9yeS5jbnQgPiAxKSB7CisJaWYgKG1lbWJsb2NrLm1lbW9yeS5jbnQgPiAxKSB7CiAjaWZuZGVmIENPTkZJR19XSUkKLQkJbG1iLm1lbW9yeS5jbnQgPSAxOwotCQlsbWJfYW5hbHl6ZSgpOworCQltZW1ibG9jay5tZW1vcnkuY250ID0gMTsKKwkJbWVtYmxvY2tfYW5hbHl6ZSgpOwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJPbmx5IHVzaW5nIGZpcnN0IGNvbnRpZ3VvdXMgbWVtb3J5IHJlZ2lvbiIpOwogI2Vsc2UKIAkJd2lpX21lbW9yeV9maXh1cHMoKTsKICNlbmRpZgogCX0KIAotCXRvdGFsX2xvd21lbSA9IHRvdGFsX21lbW9yeSA9IGxtYl9lbmRfb2ZfRFJBTSgpIC0gbWVtc3RhcnRfYWRkcjsKKwl0b3RhbF9sb3dtZW0gPSB0b3RhbF9tZW1vcnkgPSBtZW1ibG9ja19lbmRfb2ZfRFJBTSgpIC0gbWVtc3RhcnRfYWRkcjsKIAlsb3dtZW1fZW5kX2FkZHIgPSBtZW1zdGFydF9hZGRyICsgdG90YWxfbG93bWVtOwogCiAjaWZkZWYgQ09ORklHX0ZTTF9CT09LRQpAQCAtMTYxLDggKzE2MSw4IEBACiAJCWxvd21lbV9lbmRfYWRkciA9IG1lbXN0YXJ0X2FkZHIgKyB0b3RhbF9sb3dtZW07CiAjaWZuZGVmIENPTkZJR19ISUdITUVNCiAJCXRvdGFsX21lbW9yeSA9IHRvdGFsX2xvd21lbTsKLQkJbG1iX2VuZm9yY2VfbWVtb3J5X2xpbWl0KGxvd21lbV9lbmRfYWRkcik7Ci0JCWxtYl9hbmFseXplKCk7CisJCW1lbWJsb2NrX2VuZm9yY2VfbWVtb3J5X2xpbWl0KGxvd21lbV9lbmRfYWRkcik7CisJCW1lbWJsb2NrX2FuYWx5emUoKTsKICNlbmRpZiAvKiBDT05GSUdfSElHSE1FTSAqLwogCX0KIApAQCAtMjAwLDcgKzIwMCw3IEBACiAJaWYgKGluaXRfYm9vdG1lbV9kb25lKSB7CiAJCXAgPSBhbGxvY19ib290bWVtX3BhZ2VzKFBBR0VfU0laRSk7CiAJfSBlbHNlIHsKLQkJcCA9IF9fdmEobG1iX2FsbG9jX2Jhc2UoUEFHRV9TSVpFLCBQQUdFX1NJWkUsCisJCXAgPSBfX3ZhKG1lbWJsb2NrX2FsbG9jX2Jhc2UoUEFHRV9TSVpFLCBQQUdFX1NJWkUsCiAJCQkJCV9faW5pdGlhbF9tZW1vcnlfbGltaXRfYWRkcikpOwogCX0KIAlyZXR1cm4gcDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jCmluZGV4IGUyNjdmMjIuLjcxZjE0MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYwpAQCAtNDAsNyArNDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcG9pc29uLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1iLmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbWVtLmMgYi9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKaW5kZXggMGY1OTRkNy4uMWE4NGE4ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL21lbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9tZW0uYwpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1iLmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CiAKICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgpAQCAtODMsMTMgKzgzLDEzIEBACiAjZWxzZQogCXVuc2lnbmVkIGxvbmcgcGFkZHIgPSAocGZuIDw8IFBBR0VfU0hJRlQpOwogCWludCBpOwotCWZvciAoaT0wOyBpIDwgbG1iLm1lbW9yeS5jbnQ7IGkrKykgeworCWZvciAoaT0wOyBpIDwgbWVtYmxvY2subWVtb3J5LmNudDsgaSsrKSB7CiAJCXVuc2lnbmVkIGxvbmcgYmFzZTsKIAotCQliYXNlID0gbG1iLm1lbW9yeS5yZWdpb25baV0uYmFzZTsKKwkJYmFzZSA9IG1lbWJsb2NrLm1lbW9yeS5yZWdpb25baV0uYmFzZTsKIAogCQlpZiAoKHBhZGRyID49IGJhc2UpICYmCi0JCQkocGFkZHIgPCAoYmFzZSArIGxtYi5tZW1vcnkucmVnaW9uW2ldLnNpemUpKSkgeworCQkJKHBhZGRyIDwgKGJhc2UgKyBtZW1ibG9jay5tZW1vcnkucmVnaW9uW2ldLnNpemUpKSkgewogCQkJcmV0dXJuIDE7CiAJCX0KIAl9CkBAIC0xNDIsMTQgKzE0MiwxNCBAQAogLyoKICAqIHdhbGtfbWVtb3J5X3Jlc291cmNlKCkgbmVlZHMgdG8gbWFrZSBzdXJlIHRoZXJlIGlzIG5vIGhvbGVzIGluIGEgZ2l2ZW4KICAqIG1lbW9yeSByYW5nZS4gIFBQQzY0IGRvZXMgbm90IG1haW50YWluIHRoZSBtZW1vcnkgbGF5b3V0IGluIC9wcm9jL2lvbWVtLgotICogSW5zdGVhZCBpdCBtYWludGFpbnMgaXQgaW4gbG1iLm1lbW9yeSBzdHJ1Y3R1cmVzLiAgV2FsayB0aHJvdWdoIHRoZQorICogSW5zdGVhZCBpdCBtYWludGFpbnMgaXQgaW4gbWVtYmxvY2subWVtb3J5IHN0cnVjdHVyZXMuICBXYWxrIHRocm91Z2ggdGhlCiAgKiBtZW1vcnkgcmVnaW9ucywgZmluZCBob2xlcyBhbmQgY2FsbGJhY2sgZm9yIGNvbnRpZ3VvdXMgcmVnaW9ucy4KICAqLwogaW50CiB3YWxrX3N5c3RlbV9yYW1fcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsCiAJCXZvaWQgKmFyZywgaW50ICgqZnVuYykodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdm9pZCAqKSkKIHsKLQlzdHJ1Y3QgbG1iX3Byb3BlcnR5IHJlczsKKwlzdHJ1Y3QgbWVtYmxvY2tfcHJvcGVydHkgcmVzOwogCXVuc2lnbmVkIGxvbmcgcGZuLCBsZW47CiAJdTY0IGVuZDsKIAlpbnQgcmV0ID0gLTE7CkBAIC0xNTgsNyArMTU4LDcgQEAKIAlyZXMuc2l6ZSA9ICh1NjQpIG5yX3BhZ2VzIDw8IFBBR0VfU0hJRlQ7CiAKIAllbmQgPSByZXMuYmFzZSArIHJlcy5zaXplIC0gMTsKLQl3aGlsZSAoKHJlcy5iYXNlIDwgZW5kKSAmJiAobG1iX2ZpbmQoJnJlcykgPj0gMCkpIHsKKwl3aGlsZSAoKHJlcy5iYXNlIDwgZW5kKSAmJiAobWVtYmxvY2tfZmluZCgmcmVzKSA+PSAwKSkgewogCQlwZm4gPSAodW5zaWduZWQgbG9uZykocmVzLmJhc2UgPj4gUEFHRV9TSElGVCk7CiAJCWxlbiA9ICh1bnNpZ25lZCBsb25nKShyZXMuc2l6ZSA+PiBQQUdFX1NISUZUKTsKIAkJcmV0ID0gKCpmdW5jKShwZm4sIGxlbiwgYXJnKTsKQEAgLTE4NCw4ICsxODQsOCBAQAogCXVuc2lnbmVkIGxvbmcgdG90YWxfcGFnZXM7CiAJaW50IGJvb3RfbWFwc2l6ZTsKIAotCW1heF9sb3dfcGZuID0gbWF4X3BmbiA9IGxtYl9lbmRfb2ZfRFJBTSgpID4+IFBBR0VfU0hJRlQ7Ci0JdG90YWxfcGFnZXMgPSAobG1iX2VuZF9vZl9EUkFNKCkgLSBtZW1zdGFydF9hZGRyKSA+PiBQQUdFX1NISUZUOworCW1heF9sb3dfcGZuID0gbWF4X3BmbiA9IG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgPj4gUEFHRV9TSElGVDsKKwl0b3RhbF9wYWdlcyA9IChtZW1ibG9ja19lbmRfb2ZfRFJBTSgpIC0gbWVtc3RhcnRfYWRkcikgPj4gUEFHRV9TSElGVDsKICNpZmRlZiBDT05GSUdfSElHSE1FTQogCXRvdGFsX3BhZ2VzID0gdG90YWxfbG93bWVtID4+IFBBR0VfU0hJRlQ7CiAJbWF4X2xvd19wZm4gPSBsb3dtZW1fZW5kX2FkZHIgPj4gUEFHRV9TSElGVDsKQEAgLTE5OCwxNiArMTk4LDE2IEBACiAJICovCiAJYm9vdG1hcF9wYWdlcyA9IGJvb3RtZW1fYm9vdG1hcF9wYWdlcyh0b3RhbF9wYWdlcyk7CiAKLQlzdGFydCA9IGxtYl9hbGxvYyhib290bWFwX3BhZ2VzIDw8IFBBR0VfU0hJRlQsIFBBR0VfU0laRSk7CisJc3RhcnQgPSBtZW1ibG9ja19hbGxvYyhib290bWFwX3BhZ2VzIDw8IFBBR0VfU0hJRlQsIFBBR0VfU0laRSk7CiAKIAltaW5fbG93X3BmbiA9IE1FTU9SWV9TVEFSVCA+PiBQQUdFX1NISUZUOwogCWJvb3RfbWFwc2l6ZSA9IGluaXRfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgc3RhcnQgPj4gUEFHRV9TSElGVCwgbWluX2xvd19wZm4sIG1heF9sb3dfcGZuKTsKIAogCS8qIEFkZCBhY3RpdmUgcmVnaW9ucyB3aXRoIHZhbGlkIFBGTnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbG1iLm1lbW9yeS5jbnQ7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBtZW1ibG9jay5tZW1vcnkuY250OyBpKyspIHsKIAkJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47Ci0JCXN0YXJ0X3BmbiA9IGxtYi5tZW1vcnkucmVnaW9uW2ldLmJhc2UgPj4gUEFHRV9TSElGVDsKLQkJZW5kX3BmbiA9IHN0YXJ0X3BmbiArIGxtYl9zaXplX3BhZ2VzKCZsbWIubWVtb3J5LCBpKTsKKwkJc3RhcnRfcGZuID0gbWVtYmxvY2subWVtb3J5LnJlZ2lvbltpXS5iYXNlID4+IFBBR0VfU0hJRlQ7CisJCWVuZF9wZm4gPSBzdGFydF9wZm4gKyBtZW1ibG9ja19zaXplX3BhZ2VzKCZtZW1ibG9jay5tZW1vcnksIGkpOwogCQlhZGRfYWN0aXZlX3JhbmdlKDAsIHN0YXJ0X3BmbiwgZW5kX3Bmbik7CiAJfQogCkBAIC0yMTgsMTcgKzIxOCwxNyBAQAogCWZyZWVfYm9vdG1lbV93aXRoX2FjdGl2ZV9yZWdpb25zKDAsIGxvd21lbV9lbmRfYWRkciA+PiBQQUdFX1NISUZUKTsKIAogCS8qIHJlc2VydmUgdGhlIHNlY3Rpb25zIHdlJ3JlIGFscmVhZHkgdXNpbmcgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbG1iLnJlc2VydmVkLmNudDsgaSsrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgYWRkciA9IGxtYi5yZXNlcnZlZC5yZWdpb25baV0uYmFzZSArCi0JCQkJICAgICBsbWJfc2l6ZV9ieXRlcygmbG1iLnJlc2VydmVkLCBpKSAtIDE7CisJZm9yIChpID0gMDsgaSA8IG1lbWJsb2NrLnJlc2VydmVkLmNudDsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgYWRkciA9IG1lbWJsb2NrLnJlc2VydmVkLnJlZ2lvbltpXS5iYXNlICsKKwkJCQkgICAgIG1lbWJsb2NrX3NpemVfYnl0ZXMoJm1lbWJsb2NrLnJlc2VydmVkLCBpKSAtIDE7CiAJCWlmIChhZGRyIDwgbG93bWVtX2VuZF9hZGRyKQotCQkJcmVzZXJ2ZV9ib290bWVtKGxtYi5yZXNlcnZlZC5yZWdpb25baV0uYmFzZSwKLQkJCQkJbG1iX3NpemVfYnl0ZXMoJmxtYi5yZXNlcnZlZCwgaSksCisJCQlyZXNlcnZlX2Jvb3RtZW0obWVtYmxvY2sucmVzZXJ2ZWQucmVnaW9uW2ldLmJhc2UsCisJCQkJCW1lbWJsb2NrX3NpemVfYnl0ZXMoJm1lbWJsb2NrLnJlc2VydmVkLCBpKSwKIAkJCQkJQk9PVE1FTV9ERUZBVUxUKTsKLQkJZWxzZSBpZiAobG1iLnJlc2VydmVkLnJlZ2lvbltpXS5iYXNlIDwgbG93bWVtX2VuZF9hZGRyKSB7CisJCWVsc2UgaWYgKG1lbWJsb2NrLnJlc2VydmVkLnJlZ2lvbltpXS5iYXNlIDwgbG93bWVtX2VuZF9hZGRyKSB7CiAJCQl1bnNpZ25lZCBsb25nIGFkanVzdGVkX3NpemUgPSBsb3dtZW1fZW5kX2FkZHIgLQotCQkJCSAgICAgIGxtYi5yZXNlcnZlZC5yZWdpb25baV0uYmFzZTsKLQkJCXJlc2VydmVfYm9vdG1lbShsbWIucmVzZXJ2ZWQucmVnaW9uW2ldLmJhc2UsCisJCQkJICAgICAgbWVtYmxvY2sucmVzZXJ2ZWQucmVnaW9uW2ldLmJhc2U7CisJCQlyZXNlcnZlX2Jvb3RtZW0obWVtYmxvY2sucmVzZXJ2ZWQucmVnaW9uW2ldLmJhc2UsCiAJCQkJCWFkanVzdGVkX3NpemUsIEJPT1RNRU1fREVGQVVMVCk7CiAJCX0KIAl9CkBAIC0yMzYsOSArMjM2LDkgQEAKIAlmcmVlX2Jvb3RtZW1fd2l0aF9hY3RpdmVfcmVnaW9ucygwLCBtYXhfcGZuKTsKIAogCS8qIHJlc2VydmUgdGhlIHNlY3Rpb25zIHdlJ3JlIGFscmVhZHkgdXNpbmcgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbG1iLnJlc2VydmVkLmNudDsgaSsrKQotCQlyZXNlcnZlX2Jvb3RtZW0obG1iLnJlc2VydmVkLnJlZ2lvbltpXS5iYXNlLAotCQkJCWxtYl9zaXplX2J5dGVzKCZsbWIucmVzZXJ2ZWQsIGkpLAorCWZvciAoaSA9IDA7IGkgPCBtZW1ibG9jay5yZXNlcnZlZC5jbnQ7IGkrKykKKwkJcmVzZXJ2ZV9ib290bWVtKG1lbWJsb2NrLnJlc2VydmVkLnJlZ2lvbltpXS5iYXNlLAorCQkJCW1lbWJsb2NrX3NpemVfYnl0ZXMoJm1lbWJsb2NrLnJlc2VydmVkLCBpKSwKIAkJCQlCT09UTUVNX0RFRkFVTFQpOwogCiAjZW5kaWYKQEAgLTI1MSwyMCArMjUxLDIwIEBACiAvKiBtYXJrIHBhZ2VzIHRoYXQgZG9uJ3QgZXhpc3QgYXMgbm9zYXZlICovCiBzdGF0aWMgaW50IF9faW5pdCBtYXJrX25vbnJhbV9ub3NhdmUodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGxtYl9uZXh0X3JlZ2lvbl9zdGFydF9wZm4sCi0JCSAgICAgIGxtYl9yZWdpb25fbWF4X3BmbjsKKwl1bnNpZ25lZCBsb25nIG1lbWJsb2NrX25leHRfcmVnaW9uX3N0YXJ0X3BmbiwKKwkJICAgICAgbWVtYmxvY2tfcmVnaW9uX21heF9wZm47CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbG1iLm1lbW9yeS5jbnQgLSAxOyBpKyspIHsKLQkJbG1iX3JlZ2lvbl9tYXhfcGZuID0KLQkJCShsbWIubWVtb3J5LnJlZ2lvbltpXS5iYXNlID4+IFBBR0VfU0hJRlQpICsKLQkJCShsbWIubWVtb3J5LnJlZ2lvbltpXS5zaXplID4+IFBBR0VfU0hJRlQpOwotCQlsbWJfbmV4dF9yZWdpb25fc3RhcnRfcGZuID0KLQkJCWxtYi5tZW1vcnkucmVnaW9uW2krMV0uYmFzZSA+PiBQQUdFX1NISUZUOworCWZvciAoaSA9IDA7IGkgPCBtZW1ibG9jay5tZW1vcnkuY250IC0gMTsgaSsrKSB7CisJCW1lbWJsb2NrX3JlZ2lvbl9tYXhfcGZuID0KKwkJCShtZW1ibG9jay5tZW1vcnkucmVnaW9uW2ldLmJhc2UgPj4gUEFHRV9TSElGVCkgKworCQkJKG1lbWJsb2NrLm1lbW9yeS5yZWdpb25baV0uc2l6ZSA+PiBQQUdFX1NISUZUKTsKKwkJbWVtYmxvY2tfbmV4dF9yZWdpb25fc3RhcnRfcGZuID0KKwkJCW1lbWJsb2NrLm1lbW9yeS5yZWdpb25baSsxXS5iYXNlID4+IFBBR0VfU0hJRlQ7CiAKLQkJaWYgKGxtYl9yZWdpb25fbWF4X3BmbiA8IGxtYl9uZXh0X3JlZ2lvbl9zdGFydF9wZm4pCi0JCQlyZWdpc3Rlcl9ub3NhdmVfcmVnaW9uKGxtYl9yZWdpb25fbWF4X3BmbiwKLQkJCQkJICAgICAgIGxtYl9uZXh0X3JlZ2lvbl9zdGFydF9wZm4pOworCQlpZiAobWVtYmxvY2tfcmVnaW9uX21heF9wZm4gPCBtZW1ibG9ja19uZXh0X3JlZ2lvbl9zdGFydF9wZm4pCisJCQlyZWdpc3Rlcl9ub3NhdmVfcmVnaW9uKG1lbWJsb2NrX3JlZ2lvbl9tYXhfcGZuLAorCQkJCQkgICAgICAgbWVtYmxvY2tfbmV4dF9yZWdpb25fc3RhcnRfcGZuKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI3NSw4ICsyNzUsOCBAQAogICovCiB2b2lkIF9faW5pdCBwYWdpbmdfaW5pdCh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgdG90YWxfcmFtID0gbG1iX3BoeXNfbWVtX3NpemUoKTsKLQlwaHlzX2FkZHJfdCB0b3Bfb2ZfcmFtID0gbG1iX2VuZF9vZl9EUkFNKCk7CisJdW5zaWduZWQgbG9uZyB0b3RhbF9yYW0gPSBtZW1ibG9ja19waHlzX21lbV9zaXplKCk7CisJcGh5c19hZGRyX3QgdG9wX29mX3JhbSA9IG1lbWJsb2NrX2VuZF9vZl9EUkFNKCk7CiAJdW5zaWduZWQgbG9uZyBtYXhfem9uZV9wZm5zW01BWF9OUl9aT05FU107CiAKICNpZmRlZiBDT05GSUdfUFBDMzIKQEAgLTMyNyw3ICszMjcsNyBAQAogCQlzd2lvdGxiX2luaXQoMSk7CiAjZW5kaWYKIAotCW51bV9waHlzcGFnZXMgPSBsbWIubWVtb3J5LnNpemUgPj4gUEFHRV9TSElGVDsKKwludW1fcGh5c3BhZ2VzID0gbWVtYmxvY2subWVtb3J5LnNpemUgPj4gUEFHRV9TSElGVDsKIAloaWdoX21lbW9yeSA9ICh2b2lkICopIF9fdmEobWF4X2xvd19wZm4gKiBQQUdFX1NJWkUpOwogCiAjaWZkZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKQEAgLTM2NCw3ICszNjQsNyBAQAogCQloaWdobWVtX21hcG5yID0gbG93bWVtX2VuZF9hZGRyID4+IFBBR0VfU0hJRlQ7CiAJCWZvciAocGZuID0gaGlnaG1lbV9tYXBucjsgcGZuIDwgbWF4X21hcG5yOyArK3BmbikgewogCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotCQkJaWYgKGxtYl9pc19yZXNlcnZlZChwZm4gPDwgUEFHRV9TSElGVCkpCisJCQlpZiAobWVtYmxvY2tfaXNfcmVzZXJ2ZWQocGZuIDw8IFBBR0VfU0hJRlQpKQogCQkJCWNvbnRpbnVlOwogCQkJQ2xlYXJQYWdlUmVzZXJ2ZWQocGFnZSk7CiAJCQlpbml0X3BhZ2VfY291bnQocGFnZSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jIGIvYXJjaC9wb3dlcnBjL21tL251bWEuYwppbmRleCA4MGQxMTA2My4uMDAyODc4YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL251bWEuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCkBAIC0xNyw3ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgotI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgorI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9wZm4uaD4KICNpbmNsdWRlIDxhc20vc3BhcnNlbWVtLmg+CkBAIC00Miw2ICs0MiwxMiBAQAogCiBzdGF0aWMgaW50IG1pbl9jb21tb25fZGVwdGg7CiBzdGF0aWMgaW50IG5fbWVtX2FkZHJfY2VsbHMsIG5fbWVtX3NpemVfY2VsbHM7CitzdGF0aWMgaW50IGZvcm0xX2FmZmluaXR5OworCisjZGVmaW5lIE1BWF9ESVNUQU5DRV9SRUZfUE9JTlRTIDQKK3N0YXRpYyBpbnQgZGlzdGFuY2VfcmVmX3BvaW50c19kZXB0aDsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgKmRpc3RhbmNlX3JlZl9wb2ludHM7CitzdGF0aWMgaW50IGRpc3RhbmNlX2xvb2t1cF90YWJsZVtNQVhfTlVNTk9ERVNdW01BWF9ESVNUQU5DRV9SRUZfUE9JTlRTXTsKIAogLyoKICAqIEFsbG9jYXRlIG5vZGVfdG9fY3B1bWFza19tYXAgYmFzZWQgb24gbnVtYmVyIG9mIGF2YWlsYWJsZSBub2RlcwpAQCAtMjA0LDYgKzIxMCwzOSBAQAogCXJldHVybiBwcm9wOwogfQogCitpbnQgX19ub2RlX2Rpc3RhbmNlKGludCBhLCBpbnQgYikKK3sKKwlpbnQgaTsKKwlpbnQgZGlzdGFuY2UgPSBMT0NBTF9ESVNUQU5DRTsKKworCWlmICghZm9ybTFfYWZmaW5pdHkpCisJCXJldHVybiBkaXN0YW5jZTsKKworCWZvciAoaSA9IDA7IGkgPCBkaXN0YW5jZV9yZWZfcG9pbnRzX2RlcHRoOyBpKyspIHsKKwkJaWYgKGRpc3RhbmNlX2xvb2t1cF90YWJsZVthXVtpXSA9PSBkaXN0YW5jZV9sb29rdXBfdGFibGVbYl1baV0pCisJCQlicmVhazsKKworCQkvKiBEb3VibGUgdGhlIGRpc3RhbmNlIGZvciBlYWNoIE5VTUEgbGV2ZWwgKi8KKwkJZGlzdGFuY2UgKj0gMjsKKwl9CisKKwlyZXR1cm4gZGlzdGFuY2U7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVfZGlzdGFuY2VfbG9va3VwX3RhYmxlKGludCBuaWQsCisJCWNvbnN0IHVuc2lnbmVkIGludCAqYXNzb2NpYXRpdml0eSkKK3sKKwlpbnQgaTsKKworCWlmICghZm9ybTFfYWZmaW5pdHkpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBkaXN0YW5jZV9yZWZfcG9pbnRzX2RlcHRoOyBpKyspIHsKKwkJZGlzdGFuY2VfbG9va3VwX3RhYmxlW25pZF1baV0gPQorCQkJYXNzb2NpYXRpdml0eVtkaXN0YW5jZV9yZWZfcG9pbnRzW2ldXTsKKwl9Cit9CisKIC8qIFJldHVybnMgbmlkIGluIHRoZSByYW5nZSBbMC4uTUFYX05VTU5PREVTLTFdLCBvciAtMSBpZiBubyB1c2VmdWwgbnVtYQogICogaW5mbyBpcyBmb3VuZC4KICAqLwpAQCAtMjI1LDYgKzI2NCwxMCBAQAogCS8qIFBPV0VSNCBMUEFSIHVzZXMgMHhmZmZmIGFzIGludmFsaWQgbm9kZSAqLwogCWlmIChuaWQgPT0gMHhmZmZmIHx8IG5pZCA+PSBNQVhfTlVNTk9ERVMpCiAJCW5pZCA9IC0xOworCisJaWYgKG5pZCA+IDAgJiYgdG1wWzBdID49IGRpc3RhbmNlX3JlZl9wb2ludHNfZGVwdGgpCisJCWluaXRpYWxpemVfZGlzdGFuY2VfbG9va3VwX3RhYmxlKG5pZCwgdG1wKTsKKwogb3V0OgogCXJldHVybiBuaWQ7CiB9CkBAIC0yNTEsMjYgKzI5NCwxMCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwob2Zfbm9kZV90b19uaWQpOwogCi0vKgotICogSW4gdGhlb3J5LCB0aGUgImlibSxhc3NvY2lhdGl2aXR5IiBwcm9wZXJ0eSBtYXkgY29udGFpbiBtdWx0aXBsZQotICogYXNzb2NpYXRpdml0eSBsaXN0cyBiZWNhdXNlIGEgcmVzb3VyY2UgbWF5IGJlIG11bHRpcGx5IGNvbm5lY3RlZAotICogaW50byB0aGUgbWFjaGluZS4gIFRoaXMgcmVzb3VyY2UgdGhlbiBoYXMgZGlmZmVyZW50IGFzc29jaWF0aXZpdHkKLSAqIGNoYXJhY3RlcmlzdGljcyByZWxhdGl2ZSB0byBpdHMgbXVsdGlwbGUgY29ubmVjdGlvbnMuICBXZSBpZ25vcmUKLSAqIHRoaXMgZm9yIG5vdy4gIFdlIGFsc28gYXNzdW1lIHRoYXQgYWxsIGNwdSBhbmQgbWVtb3J5IHNldHMgaGF2ZQotICogdGhlaXIgZGlzdGFuY2VzIHJlcHJlc2VudGVkIGF0IGEgY29tbW9uIGxldmVsLiAgVGhpcyB3b24ndCBiZQotICogdHJ1ZSBmb3IgaGllcmFyY2hpY2FsIE5VTUEuCi0gKgotICogSW4gYW55IGNhc2UgdGhlIGlibSxhc3NvY2lhdGl2aXR5LXJlZmVyZW5jZS1wb2ludHMgc2hvdWxkIGdpdmUKLSAqIHRoZSBjb3JyZWN0IGRlcHRoIGZvciBhIG5vcm1hbCBOVU1BIHN5c3RlbS4KLSAqCi0gKiAtIERhdmUgSGFuc2VuIDxoYXZlYmx1ZUB1cy5pYm0uY29tPgotICovCiBzdGF0aWMgaW50IF9faW5pdCBmaW5kX21pbl9jb21tb25fZGVwdGgodm9pZCkKIHsKLQlpbnQgZGVwdGgsIGluZGV4OwotCWNvbnN0IHVuc2lnbmVkIGludCAqcmVmX3BvaW50czsKKwlpbnQgZGVwdGg7CiAJc3RydWN0IGRldmljZV9ub2RlICpydGFzX3Jvb3Q7Ci0JdW5zaWduZWQgaW50IGxlbjsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNob3NlbjsKIAljb25zdCBjaGFyICp2ZWM1OwogCkBAIC0yODAsMTggKzMwNywyOCBAQAogCQlyZXR1cm4gLTE7CiAKIAkvKgotCSAqIHRoaXMgcHJvcGVydHkgaXMgMiAzMi1iaXQgaW50ZWdlcnMsIGVhY2ggcmVwcmVzZW50aW5nIGEgbGV2ZWwgb2YKLQkgKiBkZXB0aCBpbiB0aGUgYXNzb2NpYXRpdml0eSBub2Rlcy4gIFRoZSBmaXJzdCBpcyBmb3IgYW4gU01QCi0JICogY29uZmlndXJhdGlvbiAoc2hvdWxkIGJlIGFsbCAwJ3MpIGFuZCB0aGUgc2Vjb25kIGlzIGZvciBhIG5vcm1hbAotCSAqIE5VTUEgY29uZmlndXJhdGlvbi4KKwkgKiBUaGlzIHByb3BlcnR5IGlzIGEgc2V0IG9mIDMyLWJpdCBpbnRlZ2VycywgZWFjaCByZXByZXNlbnRpbmcKKwkgKiBhbiBpbmRleCBpbnRvIHRoZSBpYm0sYXNzb2NpYXRpdml0eSBub2Rlcy4KKwkgKgorCSAqIFdpdGggZm9ybSAwIGFmZmluaXR5IHRoZSBmaXJzdCBpbnRlZ2VyIGlzIGZvciBhbiBTTVAgY29uZmlndXJhdGlvbgorCSAqIChzaG91bGQgYmUgYWxsIDAncykgYW5kIHRoZSBzZWNvbmQgaXMgZm9yIGEgbm9ybWFsIE5VTUEKKwkgKiBjb25maWd1cmF0aW9uLiBXZSBoYXZlIG9ubHkgb25lIGxldmVsIG9mIE5VTUEuCisJICoKKwkgKiBXaXRoIGZvcm0gMSBhZmZpbml0eSB0aGUgZmlyc3QgaW50ZWdlciBpcyB0aGUgbW9zdCBzaWduaWZpY2FudAorCSAqIE5VTUEgYm91bmRhcnkgYW5kIHRoZSBmb2xsb3dpbmcgYXJlIHByb2dyZXNzaXZlbHkgbGVzcyBzaWduaWZpY2FudAorCSAqIGJvdW5kYXJpZXMuIFRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIGxldmVsIG9mIE5VTUEuCiAJICovCi0JaW5kZXggPSAxOwotCXJlZl9wb2ludHMgPSBvZl9nZXRfcHJvcGVydHkocnRhc19yb290LAotCQkJImlibSxhc3NvY2lhdGl2aXR5LXJlZmVyZW5jZS1wb2ludHMiLCAmbGVuKTsKKwlkaXN0YW5jZV9yZWZfcG9pbnRzID0gb2ZfZ2V0X3Byb3BlcnR5KHJ0YXNfcm9vdCwKKwkJCQkJImlibSxhc3NvY2lhdGl2aXR5LXJlZmVyZW5jZS1wb2ludHMiLAorCQkJCQkmZGlzdGFuY2VfcmVmX3BvaW50c19kZXB0aCk7CiAKLQkvKgotCSAqIEZvciBmb3JtIDEgYWZmaW5pdHkgaW5mb3JtYXRpb24gd2Ugd2FudCB0aGUgZmlyc3QgZmllbGQKLQkgKi8KKwlpZiAoIWRpc3RhbmNlX3JlZl9wb2ludHMpIHsKKwkJZGJnKCJOVU1BOiBpYm0sYXNzb2NpYXRpdml0eS1yZWZlcmVuY2UtcG9pbnRzIG5vdCBmb3VuZC5cbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlkaXN0YW5jZV9yZWZfcG9pbnRzX2RlcHRoIC89IHNpemVvZihpbnQpOworCiAjZGVmaW5lIFZFQzVfQUZGSU5JVFlfQllURQk1CiAjZGVmaW5lIFZFQzVfQUZGSU5JVFkJCTB4ODAKIAljaG9zZW4gPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL2Nob3NlbiIpOwpAQCAtMjk5LDE5ICszMzYsMzggQEAKIAkJdmVjNSA9IG9mX2dldF9wcm9wZXJ0eShjaG9zZW4sICJpYm0sYXJjaGl0ZWN0dXJlLXZlYy01IiwgTlVMTCk7CiAJCWlmICh2ZWM1ICYmICh2ZWM1W1ZFQzVfQUZGSU5JVFlfQllURV0gJiBWRUM1X0FGRklOSVRZKSkgewogCQkJZGJnKCJVc2luZyBmb3JtIDEgYWZmaW5pdHlcbiIpOwotCQkJaW5kZXggPSAwOworCQkJZm9ybTFfYWZmaW5pdHkgPSAxOwogCQl9CiAJfQogCi0JaWYgKChsZW4gPj0gMiAqIHNpemVvZih1bnNpZ25lZCBpbnQpKSAmJiByZWZfcG9pbnRzKSB7Ci0JCWRlcHRoID0gcmVmX3BvaW50c1tpbmRleF07CisJaWYgKGZvcm0xX2FmZmluaXR5KSB7CisJCWRlcHRoID0gZGlzdGFuY2VfcmVmX3BvaW50c1swXTsKIAl9IGVsc2UgewotCQlkYmcoIk5VTUE6IGlibSxhc3NvY2lhdGl2aXR5LXJlZmVyZW5jZS1wb2ludHMgbm90IGZvdW5kLlxuIik7Ci0JCWRlcHRoID0gLTE7Ci0JfQotCW9mX25vZGVfcHV0KHJ0YXNfcm9vdCk7CisJCWlmIChkaXN0YW5jZV9yZWZfcG9pbnRzX2RlcHRoIDwgMikgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTlVNQTogIgorCQkJCSJzaG9ydCBpYm0sYXNzb2NpYXRpdml0eS1yZWZlcmVuY2UtcG9pbnRzXG4iKTsKKwkJCWdvdG8gZXJyOworCQl9CiAKKwkJZGVwdGggPSBkaXN0YW5jZV9yZWZfcG9pbnRzWzFdOworCX0KKworCS8qCisJICogV2FybiBhbmQgY2FwIGlmIHRoZSBoYXJkd2FyZSBzdXBwb3J0cyBtb3JlIHRoYW4KKwkgKiBNQVhfRElTVEFOQ0VfUkVGX1BPSU5UUyBkb21haW5zLgorCSAqLworCWlmIChkaXN0YW5jZV9yZWZfcG9pbnRzX2RlcHRoID4gTUFYX0RJU1RBTkNFX1JFRl9QT0lOVFMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTlVNQTogZGlzdGFuY2UgYXJyYXkgY2FwcGVkIGF0ICIKKwkJCSIlZCBlbnRyaWVzXG4iLCBNQVhfRElTVEFOQ0VfUkVGX1BPSU5UUyk7CisJCWRpc3RhbmNlX3JlZl9wb2ludHNfZGVwdGggPSBNQVhfRElTVEFOQ0VfUkVGX1BPSU5UUzsKKwl9CisKKwlvZl9ub2RlX3B1dChydGFzX3Jvb3QpOwogCXJldHVybiBkZXB0aDsKKworZXJyOgorCW9mX25vZGVfcHV0KHJ0YXNfcm9vdCk7CisJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgZ2V0X25fbWVtX2NlbGxzKGludCAqbl9hZGRyX2NlbGxzLCBpbnQgKm5fc2l6ZV9jZWxscykKQEAgLTM1MSw3ICs0MDcsNyBAQAogI2RlZmluZSBEUkNPTkZfTUVNX1JFU0VSVkVECTB4MDAwMDAwODAKIAogLyoKLSAqIFJlYWQgdGhlIG5leHQgbG1iIGxpc3QgZW50cnkgZnJvbSB0aGUgaWJtLGR5bmFtaWMtbWVtb3J5IHByb3BlcnR5CisgKiBSZWFkIHRoZSBuZXh0IG1lbWJsb2NrIGxpc3QgZW50cnkgZnJvbSB0aGUgaWJtLGR5bmFtaWMtbWVtb3J5IHByb3BlcnR5CiAgKiBhbmQgcmV0dXJuIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgcHJvdmlkZWQgb2ZfZHJjb25mX2NlbGwgc3RydWN0dXJlLgogICovCiBzdGF0aWMgdm9pZCByZWFkX2RyY29uZl9jZWxsKHN0cnVjdCBvZl9kcmNvbmZfY2VsbCAqZHJtZW0sIGNvbnN0IHUzMiAqKmNlbGxwKQpAQCAtMzcyLDggKzQyOCw4IEBACiAvKgogICogUmV0cmVpdmUgYW5kIHZhbGlkYXRlIHRoZSBpYm0sZHluYW1pYy1tZW1vcnkgcHJvcGVydHkgb2YgdGhlIGRldmljZSB0cmVlLgogICoKLSAqIFRoZSBsYXlvdXQgb2YgdGhlIGlibSxkeW5hbWljLW1lbW9yeSBwcm9wZXJ0eSBpcyBhIG51bWJlciBOIG9mIGxtYgotICogbGlzdCBlbnRyaWVzIGZvbGxvd2VkIGJ5IE4gbG1iIGxpc3QgZW50cmllcy4gIEVhY2ggbG1iIGxpc3QgZW50cnkKKyAqIFRoZSBsYXlvdXQgb2YgdGhlIGlibSxkeW5hbWljLW1lbW9yeSBwcm9wZXJ0eSBpcyBhIG51bWJlciBOIG9mIG1lbWJsb2NrCisgKiBsaXN0IGVudHJpZXMgZm9sbG93ZWQgYnkgTiBtZW1ibG9jayBsaXN0IGVudHJpZXMuICBFYWNoIG1lbWJsb2NrIGxpc3QgZW50cnkKICAqIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFzIGxheWVkIG91dCBpbiB0aGUgb2ZfZHJjb25mX2NlbGwgc3RydWN0IGFib3ZlLgogICovCiBzdGF0aWMgaW50IG9mX2dldF9kcmNvbmZfbWVtb3J5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbWVtb3J5LCBjb25zdCB1MzIgKipkbSkKQEAgLTU0MCwxOSArNTk2LDE5IEBACiAJCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJLyoKLQkgKiBXZSB1c2UgbG1iX2VuZF9vZl9EUkFNKCkgaW4gaGVyZSBpbnN0ZWFkIG9mIG1lbW9yeV9saW1pdCBiZWNhdXNlCisJICogV2UgdXNlIG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgaW4gaGVyZSBpbnN0ZWFkIG9mIG1lbW9yeV9saW1pdCBiZWNhdXNlCiAJICogd2UndmUgYWxyZWFkeSBhZGp1c3RlZCBpdCBmb3IgdGhlIGxpbWl0IGFuZCBpdCB0YWtlcyBjYXJlIG9mCiAJICogaGF2aW5nIG1lbW9yeSBob2xlcyBiZWxvdyB0aGUgbGltaXQuICBBbHNvLCBpbiB0aGUgY2FzZSBvZgogCSAqIGlvbW11X2lzX29mZiwgbWVtb3J5X2xpbWl0IGlzIG5vdCBzZXQgYnV0IGlzIGltcGxpY2l0bHkgZW5mb3JjZWQuCiAJICovCiAKLQlpZiAoc3RhcnQgKyBzaXplIDw9IGxtYl9lbmRfb2ZfRFJBTSgpKQorCWlmIChzdGFydCArIHNpemUgPD0gbWVtYmxvY2tfZW5kX29mX0RSQU0oKSkKIAkJcmV0dXJuIHNpemU7CiAKLQlpZiAoc3RhcnQgPj0gbG1iX2VuZF9vZl9EUkFNKCkpCisJaWYgKHN0YXJ0ID49IG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIGxtYl9lbmRfb2ZfRFJBTSgpIC0gc3RhcnQ7CisJcmV0dXJuIG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgLSBzdGFydDsKIH0KIAogLyoKQEAgLTczMSw3ICs3ODcsNyBAQAogCX0KIAogCS8qCi0JICogTm93IGRvIHRoZSBzYW1lIHRoaW5nIGZvciBlYWNoIExNQiBsaXN0ZWQgaW4gdGhlIGlibSxkeW5hbWljLW1lbW9yeQorCSAqIE5vdyBkbyB0aGUgc2FtZSB0aGluZyBmb3IgZWFjaCBNRU1CTE9DSyBsaXN0ZWQgaW4gdGhlIGlibSxkeW5hbWljLW1lbW9yeQogCSAqIHByb3BlcnR5IGluIHRoZSBpYm0sZHluYW1pYy1yZWNvbmZpZ3VyYXRpb24tbWVtb3J5IG5vZGUuCiAJICovCiAJbWVtb3J5ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9pYm0sZHluYW1pYy1yZWNvbmZpZ3VyYXRpb24tbWVtb3J5Iik7CkBAIC03NDMsOCArNzk5LDggQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHNldHVwX25vbm51bWEodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIHRvcF9vZl9yYW0gPSBsbWJfZW5kX29mX0RSQU0oKTsKLQl1bnNpZ25lZCBsb25nIHRvdGFsX3JhbSA9IGxtYl9waHlzX21lbV9zaXplKCk7CisJdW5zaWduZWQgbG9uZyB0b3Bfb2ZfcmFtID0gbWVtYmxvY2tfZW5kX29mX0RSQU0oKTsKKwl1bnNpZ25lZCBsb25nIHRvdGFsX3JhbSA9IG1lbWJsb2NrX3BoeXNfbWVtX3NpemUoKTsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbjsKIAl1bnNpZ25lZCBpbnQgaSwgbmlkID0gMDsKIApAQCAtNzUzLDkgKzgwOSw5IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgIk1lbW9yeSBob2xlIHNpemU6ICVsZE1CXG4iLAogCSAgICAgICAodG9wX29mX3JhbSAtIHRvdGFsX3JhbSkgPj4gMjApOwogCi0JZm9yIChpID0gMDsgaSA8IGxtYi5tZW1vcnkuY250OyArK2kpIHsKLQkJc3RhcnRfcGZuID0gbG1iLm1lbW9yeS5yZWdpb25baV0uYmFzZSA+PiBQQUdFX1NISUZUOwotCQllbmRfcGZuID0gc3RhcnRfcGZuICsgbG1iX3NpemVfcGFnZXMoJmxtYi5tZW1vcnksIGkpOworCWZvciAoaSA9IDA7IGkgPCBtZW1ibG9jay5tZW1vcnkuY250OyArK2kpIHsKKwkJc3RhcnRfcGZuID0gbWVtYmxvY2subWVtb3J5LnJlZ2lvbltpXS5iYXNlID4+IFBBR0VfU0hJRlQ7CisJCWVuZF9wZm4gPSBzdGFydF9wZm4gKyBtZW1ibG9ja19zaXplX3BhZ2VzKCZtZW1ibG9jay5tZW1vcnksIGkpOwogCiAJCWZha2VfbnVtYV9jcmVhdGVfbmV3X25vZGUoZW5kX3BmbiwgJm5pZCk7CiAJCWFkZF9hY3RpdmVfcmFuZ2UobmlkLCBzdGFydF9wZm4sIGVuZF9wZm4pOwpAQCAtODEzLDcgKzg2OSw3IEBACiAKIAkJY291bnQgPSAwOwogCi0JCWZvciAoaSA9IDA7IGkgPCBsbWJfZW5kX29mX0RSQU0oKTsKKwkJZm9yIChpID0gMDsgaSA8IG1lbWJsb2NrX2VuZF9vZl9EUkFNKCk7CiAJCSAgICAgaSArPSAoMSA8PCBTRUNUSU9OX1NJWkVfQklUUykpIHsKIAkJCWlmIChlYXJseV9wZm5fdG9fbmlkKGkgPj4gUEFHRV9TSElGVCkgPT0gbm9kZSkgewogCQkJCWlmIChjb3VudCA9PSAwKQpAQCAtODMzLDcgKzg4OSw3IEBACiB9CiAKIC8qCi0gKiBBbGxvY2F0ZSBzb21lIG1lbW9yeSwgc2F0aXNmeWluZyB0aGUgbG1iIG9yIGJvb3RtZW0gYWxsb2NhdG9yIHdoZXJlCisgKiBBbGxvY2F0ZSBzb21lIG1lbW9yeSwgc2F0aXNmeWluZyB0aGUgbWVtYmxvY2sgb3IgYm9vdG1lbSBhbGxvY2F0b3Igd2hlcmUKICAqIHJlcXVpcmVkLiBuaWQgaXMgdGhlIHByZWZlcnJlZCBub2RlIGFuZCBlbmQgaXMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YKICAqIHRoZSBoaWdoZXN0IGFkZHJlc3MgaW4gdGhlIG5vZGUuCiAgKgpAQCAtODQ3LDExICs5MDMsMTEgQEAKIAlpbnQgbmV3X25pZDsKIAl1bnNpZ25lZCBsb25nIHJldF9wYWRkcjsKIAotCXJldF9wYWRkciA9IF9fbG1iX2FsbG9jX2Jhc2Uoc2l6ZSwgYWxpZ24sIGVuZF9wZm4gPDwgUEFHRV9TSElGVCk7CisJcmV0X3BhZGRyID0gX19tZW1ibG9ja19hbGxvY19iYXNlKHNpemUsIGFsaWduLCBlbmRfcGZuIDw8IFBBR0VfU0hJRlQpOwogCiAJLyogcmV0cnkgb3ZlciBhbGwgbWVtb3J5ICovCiAJaWYgKCFyZXRfcGFkZHIpCi0JCXJldF9wYWRkciA9IF9fbG1iX2FsbG9jX2Jhc2Uoc2l6ZSwgYWxpZ24sIGxtYl9lbmRfb2ZfRFJBTSgpKTsKKwkJcmV0X3BhZGRyID0gX19tZW1ibG9ja19hbGxvY19iYXNlKHNpemUsIGFsaWduLCBtZW1ibG9ja19lbmRfb2ZfRFJBTSgpKTsKIAogCWlmICghcmV0X3BhZGRyKQogCQlwYW5pYygibnVtYS5jOiBjYW5ub3QgYWxsb2NhdGUgJWx1IGJ5dGVzIGZvciBub2RlICVkIiwKQEAgLTg2MSwxNCArOTE3LDE0IEBACiAKIAkvKgogCSAqIFdlIGluaXRpYWxpemUgdGhlIG5vZGVzIGluIG51bWVyaWMgb3JkZXI6IDAsIDEsIDIuLi4KLQkgKiBhbmQgaGFuZCBvdmVyIGNvbnRyb2wgZnJvbSB0aGUgTE1CIGFsbG9jYXRvciB0byB0aGUKKwkgKiBhbmQgaGFuZCBvdmVyIGNvbnRyb2wgZnJvbSB0aGUgTUVNQkxPQ0sgYWxsb2NhdG9yIHRvIHRoZQogCSAqIGJvb3RtZW0gYWxsb2NhdG9yLiAgSWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yCiAJICogbm9kZSA1LCB0aGVuIHdlIGtub3cgdGhhdCBhbGwgbm9kZXMgPDUgYXJlIHVzaW5nIHRoZQotCSAqIGJvb3RtZW0gYWxsb2NhdG9yIGluc3RlYWQgb2YgdGhlIExNQiBhbGxvY2F0b3IuCisJICogYm9vdG1lbSBhbGxvY2F0b3IgaW5zdGVhZCBvZiB0aGUgTUVNQkxPQ0sgYWxsb2NhdG9yLgogCSAqCiAJICogU28sIGNoZWNrIHRoZSBuaWQgZnJvbSB3aGljaCB0aGlzIGFsbG9jYXRpb24gY2FtZQogCSAqIGFuZCBkb3VibGUgY2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gdXNlIGJvb3RtZW0KLQkgKiBpbnN0ZWFkIG9mIHRoZSBMTUIuICBXZSBkb24ndCBmcmVlIHRoZSBMTUIgbWVtb3J5CisJICogaW5zdGVhZCBvZiB0aGUgTUVNQkxPQ0suICBXZSBkb24ndCBmcmVlIHRoZSBNRU1CTE9DSyBtZW1vcnkKIAkgKiBzaW5jZSBpdCB3b3VsZCBiZSB1c2VsZXNzLgogCSAqLwogCW5ld19uaWQgPSBlYXJseV9wZm5fdG9fbmlkKHJldF9wYWRkciA+PiBQQUdFX1NISUZUKTsKQEAgLTg5Myw5ICs5NDksOSBAQAogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqbm9kZSA9IE5PREVfREFUQShuaWQpOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IGxtYi5yZXNlcnZlZC5jbnQ7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIHBoeXNiYXNlID0gbG1iLnJlc2VydmVkLnJlZ2lvbltpXS5iYXNlOwotCQl1bnNpZ25lZCBsb25nIHNpemUgPSBsbWIucmVzZXJ2ZWQucmVnaW9uW2ldLnNpemU7CisJZm9yIChpID0gMDsgaSA8IG1lbWJsb2NrLnJlc2VydmVkLmNudDsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgcGh5c2Jhc2UgPSBtZW1ibG9jay5yZXNlcnZlZC5yZWdpb25baV0uYmFzZTsKKwkJdW5zaWduZWQgbG9uZyBzaXplID0gbWVtYmxvY2sucmVzZXJ2ZWQucmVnaW9uW2ldLnNpemU7CiAJCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuID0gcGh5c2Jhc2UgPj4gUEFHRV9TSElGVDsKIAkJdW5zaWduZWQgbG9uZyBlbmRfcGZuID0gUEZOX1VQKHBoeXNiYXNlICsgc2l6ZSk7CiAJCXN0cnVjdCBub2RlX2FjdGl2ZV9yZWdpb24gbm9kZV9hcjsKQEAgLTkwMyw3ICs5NTksNyBAQAogCQkJCQkgICAgIG5vZGUtPm5vZGVfc3Bhbm5lZF9wYWdlczsKIAogCQkvKgotCQkgKiBDaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIGxtYi5yZXNlcnZlZCBhcmVhIGlzCisJCSAqIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoaXMgbWVtYmxvY2sucmVzZXJ2ZWQgYXJlYSBpcwogCQkgKiB3aXRoaW4gdGhlIGJvdW5kcyBvZiB0aGUgbm9kZSB0aGF0IHdlIGNhcmUgYWJvdXQuCiAJCSAqIENoZWNraW5nIHRoZSBuaWQgb2YgdGhlIHN0YXJ0IGFuZCBlbmQgcG9pbnRzIGlzIG5vdAogCQkgKiBzdWZmaWNpZW50IGJlY2F1c2UgdGhlIHJlc2VydmVkIGFyZWEgY291bGQgc3BhbiB0aGUKQEAgLTk2MSw3ICsxMDE3LDcgQEAKIAlpbnQgbmlkOwogCiAJbWluX2xvd19wZm4gPSAwOwotCW1heF9sb3dfcGZuID0gbG1iX2VuZF9vZl9EUkFNKCkgPj4gUEFHRV9TSElGVDsKKwltYXhfbG93X3BmbiA9IG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgPj4gUEFHRV9TSElGVDsKIAltYXhfcGZuID0gbWF4X2xvd19wZm47CiAKIAlpZiAocGFyc2VfbnVtYV9wcm9wZXJ0aWVzKCkpCkBAIC0xMDM4LDcgKzEwOTQsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgbWF4X3pvbmVfcGZuc1tNQVhfTlJfWk9ORVNdOwogCW1lbXNldChtYXhfem9uZV9wZm5zLCAwLCBzaXplb2YobWF4X3pvbmVfcGZucykpOwotCW1heF96b25lX3BmbnNbWk9ORV9ETUFdID0gbG1iX2VuZF9vZl9EUkFNKCkgPj4gUEFHRV9TSElGVDsKKwltYXhfem9uZV9wZm5zW1pPTkVfRE1BXSA9IG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgPj4gUEFHRV9TSElGVDsKIAlmcmVlX2FyZWFfaW5pdF9ub2RlcyhtYXhfem9uZV9wZm5zKTsKIH0KIApAQCAtMTExMyw3ICsxMTY5LDcgQEAKIC8qCiAgKiBGaW5kIHRoZSBub2RlIGFzc29jaWF0ZWQgd2l0aCBhIGhvdCBhZGRlZCBtZW1vcnkgc2VjdGlvbiBmb3IgbWVtb3J5CiAgKiByZXByZXNlbnRlZCBpbiB0aGUgZGV2aWNlIHRyZWUgYXMgYSBub2RlIChpLmUuIG1lbW9yeUBYWFhYKSBmb3IKLSAqIGVhY2ggbG1iLgorICogZWFjaCBtZW1ibG9jay4KICAqLwogaW50IGhvdF9hZGRfbm9kZV9zY25fdG9fbmlkKHVuc2lnbmVkIGxvbmcgc2NuX2FkZHIpCiB7CkBAIC0xMTU0LDggKzEyMTAsOCBAQAogCiAvKgogICogRmluZCB0aGUgbm9kZSBhc3NvY2lhdGVkIHdpdGggYSBob3QgYWRkZWQgbWVtb3J5IHNlY3Rpb24uICBTZWN0aW9uCi0gKiBjb3JyZXNwb25kcyB0byBhIFNQQVJTRU1FTSBzZWN0aW9uLCBub3QgYW4gTE1CLiAgSXQgaXMgYXNzdW1lZCB0aGF0Ci0gKiBzZWN0aW9ucyBhcmUgZnVsbHkgY29udGFpbmVkIHdpdGhpbiBhIHNpbmdsZSBMTUIuCisgKiBjb3JyZXNwb25kcyB0byBhIFNQQVJTRU1FTSBzZWN0aW9uLCBub3QgYW4gTUVNQkxPQ0suICBJdCBpcyBhc3N1bWVkIHRoYXQKKyAqIHNlY3Rpb25zIGFyZSBmdWxseSBjb250YWluZWQgd2l0aGluIGEgc2luZ2xlIE1FTUJMT0NLLgogICovCiBpbnQgaG90X2FkZF9zY25fdG9fbmlkKHVuc2lnbmVkIGxvbmcgc2NuX2FkZHIpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYwppbmRleCBlYmMyZjM4Li4yYzdlODAxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmMKQEAgLTkyLDcgKzkyLDYgQEAKIAogc3RhdGljIHZvaWQgcHRlX2ZyZWVfc3VibWl0KHN0cnVjdCBwdGVfZnJlZWxpc3RfYmF0Y2ggKmJhdGNoKQogewotCUlOSVRfUkNVX0hFQUQoJmJhdGNoLT5yY3UpOwogCWNhbGxfcmN1KCZiYXRjaC0+cmN1LCBwdGVfZnJlZV9yY3VfY2FsbGJhY2spOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYwppbmRleCAzNDM0N2IyLi5hODdlYWQwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9sbWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC0xOTgsNyArMTk4LDcgQEAKIAkgKiBtZW1faW5pdCgpIHNldHMgaGlnaF9tZW1vcnkgc28gb25seSBkbyB0aGUgY2hlY2sgYWZ0ZXIgdGhhdC4KIAkgKi8KIAlpZiAobWVtX2luaXRfZG9uZSAmJiAocCA8IHZpcnRfdG9fcGh5cyhoaWdoX21lbW9yeSkpICYmCi0JICAgICEoX19hbGxvd19pb3JlbWFwX3Jlc2VydmVkICYmIGxtYl9pc19yZWdpb25fcmVzZXJ2ZWQocCwgc2l6ZSkpKSB7CisJICAgICEoX19hbGxvd19pb3JlbWFwX3Jlc2VydmVkICYmIG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChwLCBzaXplKSkpIHsKIAkJcHJpbnRrKCJfX2lvcmVtYXAoKTogcGh5cyBhZGRyIDB4JWxseCBpcyBSQU0gbHIgJXBcbiIsCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXAsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAJCXJldHVybiBOVUxMOwpAQCAtMzMxLDcgKzMzMSw3IEBACiAJCXMgPSBtbXVfbWFwaW5fcmFtKHRvcCk7CiAJCV9fbWFwaW5fcmFtX2NodW5rKHMsIHRvcCk7CiAKLQkJdG9wID0gbG1iX2VuZF9vZl9EUkFNKCk7CisJCXRvcCA9IG1lbWJsb2NrX2VuZF9vZl9EUkFNKCk7CiAJCXMgPSB3aWlfbW11X21hcGluX21lbTIodG9wKTsKIAkJX19tYXBpbl9yYW1fY2h1bmsocywgdG9wKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYwppbmRleCBkMDUwZmM4Li4yMWQ2ZGZhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzY0LmMKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9sbWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CkBAIC02Nyw3ICs2Nyw3IEBACiAJaWYgKGluaXRfYm9vdG1lbV9kb25lKQogCQlwdCA9IF9fYWxsb2NfYm9vdG1lbShzaXplLCBzaXplLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpOwogCWVsc2UKLQkJcHQgPSBfX3ZhKGxtYl9hbGxvY19iYXNlKHNpemUsIHNpemUsCisJCXB0ID0gX192YShtZW1ibG9ja19hbGxvY19iYXNlKHNpemUsIHNpemUsCiAJCQkJCSBfX3BhKE1BWF9ETUFfQUREUkVTUykpKTsKIAltZW1zZXQocHQsIDAsIHNpemUpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vcHBjX21tdV8zMi5jIGIvYXJjaC9wb3dlcnBjL21tL3BwY19tbXVfMzIuYwppbmRleCBmMTFjMmNkLi5mOGEwMTgyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vcHBjX21tdV8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9wcGNfbW11XzMyLmMKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1iLmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgpAQCAtMjIzLDcgKzIyMyw3IEBACiAJICogRmluZCBzb21lIG1lbW9yeSBmb3IgdGhlIGhhc2ggdGFibGUuCiAJICovCiAJaWYgKCBwcGNfbWQucHJvZ3Jlc3MgKSBwcGNfbWQucHJvZ3Jlc3MoImhhc2g6ZmluZCBwaWVjZSIsIDB4MzIyKTsKLQlIYXNoID0gX192YShsbWJfYWxsb2NfYmFzZShIYXNoX3NpemUsIEhhc2hfc2l6ZSwKKwlIYXNoID0gX192YShtZW1ibG9ja19hbGxvY19iYXNlKEhhc2hfc2l6ZSwgSGFzaF9zaXplLAogCQkJCSAgIF9faW5pdGlhbF9tZW1vcnlfbGltaXRfYWRkcikpOwogCWNhY2hlYWJsZV9tZW16ZXJvKEhhc2gsIEhhc2hfc2l6ZSk7CiAJX1NEUjEgPSBfX3BhKEhhc2gpIHwgU0RSMV9MT1dfQklUUzsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9zdGFiLmMgYi9hcmNoL3Bvd2VycGMvbW0vc3RhYi5jCmluZGV4IDY4N2ZkZGEuLjQ0NmEwMTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9zdGFiLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3N0YWIuYwpAQCAtMTIsNyArMTIsNyBAQAogICogICAgICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9sbWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+CkBAIC0yNTIsNyArMjUyLDcgQEAKIAkJaWYgKGNwdSA9PSAwKQogCQkJY29udGludWU7IC8qIHN0YWIgZm9yIENQVSAwIGlzIHN0YXRpY2FsbHkgYWxsb2NhdGVkICovCiAKLQkJbmV3c3RhYiA9IGxtYl9hbGxvY19iYXNlKEhXX1BBR0VfU0laRSwgSFdfUEFHRV9TSVpFLAorCQluZXdzdGFiID0gbWVtYmxvY2tfYWxsb2NfYmFzZShIV19QQUdFX1NJWkUsIEhXX1BBR0VfU0laRSwKIAkJCQkJIDE8PFNJRF9TSElGVCk7CiAJCW5ld3N0YWIgPSAodW5zaWduZWQgbG9uZylfX3ZhKG5ld3N0YWIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vdGxiX2hhc2gzMi5jIGIvYXJjaC9wb3dlcnBjL21tL3RsYl9oYXNoMzIuYwppbmRleCA4YWFhOGI3Li42OTA1NjZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vdGxiX2hhc2gzMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfaGFzaDMyLmMKQEAgLTg5LDE3ICs4OSw2IEBACiAgKiAgICAtLSBDb3J0CiAgKi8KIAotLyoKLSAqIDc1MCBTTVAgaXMgYSBCYWQgSWRlYSBiZWNhdXNlIHRoZSA3NTAgZG9lc24ndCBicm9hZGNhc3QgYWxsCi0gKiB0aGUgY2FjaGUgb3BlcmF0aW9ucyBvbiB0aGUgYnVzLiAgSGVuY2Ugd2UgbmVlZCB0byB1c2UgYW4gSVBJCi0gKiB0byBnZXQgdGhlIG90aGVyIENQVShzKSB0byBpbnZhbGlkYXRlIHRoZWlyIFRMQnMuCi0gKi8KLSNpZmRlZiBDT05GSUdfU01QXzc1MAotI2RlZmluZSBGSU5JU0hfRkxVU0gJc21wX3NlbmRfdGxiX2ludmFsaWRhdGUoMCkKLSNlbHNlCi0jZGVmaW5lIEZJTklTSF9GTFVTSAlkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKLQogc3RhdGljIHZvaWQgZmx1c2hfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCQl1bnNpZ25lZCBsb25nIGVuZCkKIHsKQEAgLTEzOCw3ICsxMjcsNiBAQAogdm9pZCBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCWZsdXNoX3JhbmdlKCZpbml0X21tLCBzdGFydCwgZW5kKTsKLQlGSU5JU0hfRkxVU0g7CiB9CiBFWFBPUlRfU1lNQk9MKGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UpOwogCkBAIC0xNjIsNyArMTUwLDYgQEAKIAkgKi8KIAlmb3IgKG1wID0gbW0tPm1tYXA7IG1wICE9IE5VTEw7IG1wID0gbXAtPnZtX25leHQpCiAJCWZsdXNoX3JhbmdlKG1wLT52bV9tbSwgbXAtPnZtX3N0YXJ0LCBtcC0+dm1fZW5kKTsKLQlGSU5JU0hfRkxVU0g7CiB9CiBFWFBPUlRfU1lNQk9MKGZsdXNoX3RsYl9tbSk7CiAKQEAgLTE3OSw3ICsxNjYsNiBAQAogCXBtZCA9IHBtZF9vZmZzZXQocHVkX29mZnNldChwZ2Rfb2Zmc2V0KG1tLCB2bWFkZHIpLCB2bWFkZHIpLCB2bWFkZHIpOwogCWlmICghcG1kX25vbmUoKnBtZCkpCiAJCWZsdXNoX2hhc2hfcGFnZXMobW0tPmNvbnRleHQuaWQsIHZtYWRkciwgcG1kX3ZhbCgqcG1kKSwgMSk7Ci0JRklOSVNIX0ZMVVNIOwogfQogRVhQT1JUX1NZTUJPTChmbHVzaF90bGJfcGFnZSk7CiAKQEAgLTE5Miw2ICsxNzgsNSBAQAogCQkgICAgIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCWZsdXNoX3JhbmdlKHZtYS0+dm1fbW0sIHN0YXJ0LCBlbmQpOwotCUZJTklTSF9GTFVTSDsKIH0KIEVYUE9SVF9TWU1CT0woZmx1c2hfdGxiX3JhbmdlKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoLmMgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX25vaGFzaC5jCmluZGV4IGU4MWQ1ZDYuLmZlMzkxZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3RsYl9ub2hhc2guYwpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3RsYi5oPgpAQCAtNDYsNiArNDYsNyBAQAogc3RydWN0IG1tdV9wc2l6ZV9kZWYgbW11X3BzaXplX2RlZnNbTU1VX1BBR0VfQ09VTlRdID0gewogCVtNTVVfUEFHRV80S10gPSB7CiAJCS5zaGlmdAk9IDEyLAorCQkuaW5kCT0gMjAsCiAJCS5lbmMJPSBCT09LM0VfUEFHRVNaXzRLLAogCX0sCiAJW01NVV9QQUdFXzE2S10gPSB7CkBAIC01NCw2ICs1NSw3IEBACiAJfSwKIAlbTU1VX1BBR0VfNjRLXSA9IHsKIAkJLnNoaWZ0CT0gMTYsCisJCS5pbmQJPSAyOCwKIAkJLmVuYwk9IEJPT0szRV9QQUdFU1pfNjRLLAogCX0sCiAJW01NVV9QQUdFXzFNXSA9IHsKQEAgLTYyLDYgKzY0LDcgQEAKIAl9LAogCVtNTVVfUEFHRV8xNk1dID0gewogCQkuc2hpZnQJPSAyNCwKKwkJLmluZAk9IDM2LAogCQkuZW5jCT0gQk9PSzNFX1BBR0VTWl8xNk0sCiAJfSwKIAlbTU1VX1BBR0VfMjU2TV0gPSB7CkBAIC0zNDQsMTYgKzM0NywxMDggQEAKIAl9CiB9CiAKLS8qCi0gKiBFYXJseSBpbml0aWFsaXphdGlvbiBvZiB0aGUgTU1VIFRMQiBjb2RlCi0gKi8KLXN0YXRpYyB2b2lkIF9fZWFybHlfaW5pdF9tbXUoaW50IGJvb3RfY3B1KQorc3RhdGljIHZvaWQgc2V0dXBfcGFnZV9zaXplcyh2b2lkKQoreworCXVuc2lnbmVkIGludCB0bGIwY2ZnID0gbWZzcHIoU1BSTl9UTEIwQ0ZHKTsKKwl1bnNpZ25lZCBpbnQgdGxiMHBzID0gbWZzcHIoU1BSTl9UTEIwUFMpOworCXVuc2lnbmVkIGludCBlcHRjZmcgPSBtZnNwcihTUFJOX0VQVENGRyk7CisJaW50IGksIHBzaXplOworCisJLyogTG9vayBmb3Igc3VwcG9ydGVkIGRpcmVjdCBzaXplcyAqLworCWZvciAocHNpemUgPSAwOyBwc2l6ZSA8IE1NVV9QQUdFX0NPVU5UOyArK3BzaXplKSB7CisJCXN0cnVjdCBtbXVfcHNpemVfZGVmICpkZWYgPSAmbW11X3BzaXplX2RlZnNbcHNpemVdOworCisJCWlmICh0bGIwcHMgJiAoMVUgPDwgKGRlZi0+c2hpZnQgLSAxMCkpKQorCQkJZGVmLT5mbGFncyB8PSBNTVVfUEFHRV9TSVpFX0RJUkVDVDsKKwl9CisKKwkvKiBJbmRpcmVjdCBwYWdlIHNpemVzIHN1cHBvcnRlZCA/ICovCisJaWYgKCh0bGIwY2ZnICYgVExCbkNGR19JTkQpID09IDApCisJCWdvdG8gbm9faW5kaXJlY3Q7CisKKwkvKiBOb3csIHdlIG9ubHkgZGVhbCB3aXRoIG9uZSBJTkQgcGFnZSBzaXplIGZvciBlYWNoCisJICogZGlyZWN0IHNpemUuIEhvcGVmdWxseSBhbGwgaW1wbGVtZW50YXRpb25zIHRvZGF5IGFyZQorCSAqIHVuYW1iaWd1b3VzLCBidXQgd2UgbWlnaHQgd2FudCB0byBiZSBjYXJlZnVsIGluIHRoZQorCSAqIGZ1dHVyZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBwcywgc3BzOworCisJCXNwcyA9IGVwdGNmZyAmIDB4MWY7CisJCWVwdGNmZyA+Pj0gNTsKKwkJcHMgPSBlcHRjZmcgJiAweDFmOworCQllcHRjZmcgPj49IDU7CisJCWlmICghcHMgfHwgIXNwcykKKwkJCWNvbnRpbnVlOworCQlmb3IgKHBzaXplID0gMDsgcHNpemUgPCBNTVVfUEFHRV9DT1VOVDsgcHNpemUrKykgeworCQkJc3RydWN0IG1tdV9wc2l6ZV9kZWYgKmRlZiA9ICZtbXVfcHNpemVfZGVmc1twc2l6ZV07CisKKwkJCWlmIChwcyA9PSAoZGVmLT5zaGlmdCAtIDEwKSkKKwkJCQlkZWYtPmZsYWdzIHw9IE1NVV9QQUdFX1NJWkVfSU5ESVJFQ1Q7CisJCQlpZiAoc3BzID09IChkZWYtPnNoaWZ0IC0gMTApKQorCQkJCWRlZi0+aW5kID0gcHMgKyAxMDsKKwkJfQorCX0KKyBub19pbmRpcmVjdDoKKworCS8qIENsZWFudXAgYXJyYXkgYW5kIHByaW50IHN1bW1hcnkgKi8KKwlwcl9pbmZvKCJNTVU6IFN1cHBvcnRlZCBwYWdlIHNpemVzXG4iKTsKKwlmb3IgKHBzaXplID0gMDsgcHNpemUgPCBNTVVfUEFHRV9DT1VOVDsgKytwc2l6ZSkgeworCQlzdHJ1Y3QgbW11X3BzaXplX2RlZiAqZGVmID0gJm1tdV9wc2l6ZV9kZWZzW3BzaXplXTsKKwkJY29uc3QgY2hhciAqX19wYWdlX3R5cGVfbmFtZXNbXSA9IHsKKwkJCSJ1bnN1cHBvcnRlZCIsCisJCQkiZGlyZWN0IiwKKwkJCSJpbmRpcmVjdCIsCisJCQkiZGlyZWN0ICYgaW5kaXJlY3QiCisJCX07CisJCWlmIChkZWYtPmZsYWdzID09IDApIHsKKwkJCWRlZi0+c2hpZnQgPSAwOwkKKwkJCWNvbnRpbnVlOworCQl9CisJCXByX2luZm8oIiAgJThsZCBLQiBhcyAlc1xuIiwgMXVsIDw8IChkZWYtPnNoaWZ0IC0gMTApLAorCQkJX19wYWdlX3R5cGVfbmFtZXNbZGVmLT5mbGFncyAmIDB4M10pOworCX0KK30KKworc3RhdGljIHZvaWQgc2V0dXBfbW11X2h0dyh2b2lkKQogewogCWV4dGVybiB1bnNpZ25lZCBpbnQgaW50ZXJydXB0X2Jhc2VfYm9vazNlOwogCWV4dGVybiB1bnNpZ25lZCBpbnQgZXhjX2RhdGFfdGxiX21pc3NfaHR3X2Jvb2szZTsKIAlleHRlcm4gdW5zaWduZWQgaW50IGV4Y19pbnN0cnVjdGlvbl90bGJfbWlzc19odHdfYm9vazNlOwogCiAJdW5zaWduZWQgaW50ICppYmFzZSA9ICZpbnRlcnJ1cHRfYmFzZV9ib29rM2U7CisKKwkvKiBDaGVjayBpZiBIVyB0YWJsZXdhbGsgaXMgcHJlc2VudCwgYW5kIGlmIHllcywgZW5hYmxlIGl0IGJ5OgorCSAqCisJICogLSBwYXRjaGluZyB0aGUgVExCIG1pc3MgaGFuZGxlcnMgdG8gYnJhbmNoIHRvIHRoZQorCSAqICAgb25lIGRlZGljYXRlcyB0byBpdAorCSAqCisJICogLSBzZXR0aW5nIHRoZSBnbG9iYWwgYm9vazNlX2h0d19lbmFibGVkCisgICAgICAgCSAqLworCXVuc2lnbmVkIGludCB0bGIwY2ZnID0gbWZzcHIoU1BSTl9UTEIwQ0ZHKTsKKworCWlmICgodGxiMGNmZyAmIFRMQm5DRkdfSU5EKSAmJgorCSAgICAodGxiMGNmZyAmIFRMQm5DRkdfUFQpKSB7CisJCS8qIE91ciBleGNlcHRpb25zIHZlY3RvcnMgc3RhcnQgd2l0aCBhIE5PUCBhbmQgLXRoZW4tIGEgYnJhbmNoCisJCSAqIHRvIGRlYWwgd2l0aCBzaW5nbGUgc3RlcHBpbmcgZnJvbSB1c2Vyc3BhY2Ugd2hpY2ggc3RvcHMgb24KKwkJICogdGhlIHNlY29uZCBpbnN0cnVjdGlvbi4gVGh1cyB3ZSBuZWVkIHRvIHBhdGNoIHRoZSBzZWNvbmQKKwkJICogaW5zdHJ1Y3Rpb24gb2YgdGhlIGV4Y2VwdGlvbiwgbm90IHRoZSBmaXJzdCBvbmUKKwkJICovCisJCXBhdGNoX2JyYW5jaChpYmFzZSArICgweDFjMCAvIDQpICsgMSwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcpJmV4Y19kYXRhX3RsYl9taXNzX2h0d19ib29rM2UsIDApOworCQlwYXRjaF9icmFuY2goaWJhc2UgKyAoMHgxZTAgLyA0KSArIDEsCisJCQkgICAgICh1bnNpZ25lZCBsb25nKSZleGNfaW5zdHJ1Y3Rpb25fdGxiX21pc3NfaHR3X2Jvb2szZSwgMCk7CisJCWJvb2szZV9odHdfZW5hYmxlZCA9IDE7CisJfQorCXByX2luZm8oIk1NVTogQm9vazNFIFBhZ2UgVGFibGVzICVzXG4iLAorCQlib29rM2VfaHR3X2VuYWJsZWQgPyAiRW5hYmxlZCIgOiAiRGlzYWJsZWQiKTsKK30KKworLyoKKyAqIEVhcmx5IGluaXRpYWxpemF0aW9uIG9mIHRoZSBNTVUgVExCIGNvZGUKKyAqLworc3RhdGljIHZvaWQgX19lYXJseV9pbml0X21tdShpbnQgYm9vdF9jcHUpCit7CiAJdW5zaWduZWQgaW50IG1hczQ7CiAKIAkvKiBYWFggVGhpcyB3aWxsIGhhdmUgdG8gYmUgZGVjaWRlZCBhdCBydW50aW1lLCBidXQgcmlnaHQKQEAgLTM3MCwzNSArNDY1LDE3IEBACiAJICovCiAJbW11X3ZtZW1tYXBfcHNpemUgPSBNTVVfUEFHRV8xNk07CiAKLQkvKiBDaGVjayBpZiBIVyB0YWJsZXdhbGsgaXMgcHJlc2VudCwgYW5kIGlmIHllcywgZW5hYmxlIGl0IGJ5OgotCSAqCi0JICogLSBwYXRjaGluZyB0aGUgVExCIG1pc3MgaGFuZGxlcnMgdG8gYnJhbmNoIHRvIHRoZQotCSAqICAgb25lIGRlZGljYXRlcyB0byBpdAotCSAqCi0JICogLSBzZXR0aW5nIHRoZSBnbG9iYWwgYm9vazNlX2h0d19lbmFibGVkCi0JICoKLQkgKiAtIFNldCBNQVM0OklOREQgYW5kIGRlZmF1bHQgcGFnZSBzaXplCi0JICovCi0KIAkvKiBYWFggVGhpcyBjb2RlIG9ubHkgY2hlY2tzIGZvciBUTEIgMCBjYXBhYmlsaXRpZXMgYW5kIGRvZXNuJ3QKIAkgKiAgICAgY2hlY2sgd2hhdCBwYWdlIHNpemUgY29tYm9zIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIEhXLiBJdAogCSAqICAgICBhbHNvIGRvZXNuJ3QgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGEgc2VwYXJhdGUgYXJyYXkgaG9sZHMKIAkgKiAgICAgdGhlIElORCBlbnRyaWVzIGZyb20gdGhlIGFycmF5IGxvYWRlZCBieSB0aGUgUFQuCiAJICovCiAJaWYgKGJvb3RfY3B1KSB7Ci0JCXVuc2lnbmVkIGludCB0bGIwY2ZnID0gbWZzcHIoU1BSTl9UTEIwQ0ZHKTsKKwkJLyogTG9vayBmb3Igc3VwcG9ydGVkIHBhZ2Ugc2l6ZXMgKi8KKwkJc2V0dXBfcGFnZV9zaXplcygpOwogCi0JCS8qIENoZWNrIGlmIEhXIGxvYWRlciBpcyBzdXBwb3J0ZWQgKi8KLQkJaWYgKCh0bGIwY2ZnICYgVExCbkNGR19JTkQpICYmCi0JCSAgICAodGxiMGNmZyAmIFRMQm5DRkdfUFQpKSB7Ci0JCQlwYXRjaF9icmFuY2goaWJhc2UgKyAoMHgxYzAgLyA0KSwKLQkJCSAgICAgKHVuc2lnbmVkIGxvbmcpJmV4Y19kYXRhX3RsYl9taXNzX2h0d19ib29rM2UsIDApOwotCQkJcGF0Y2hfYnJhbmNoKGliYXNlICsgKDB4MWUwIC8gNCksCi0JCQkgICAgICh1bnNpZ25lZCBsb25nKSZleGNfaW5zdHJ1Y3Rpb25fdGxiX21pc3NfaHR3X2Jvb2szZSwgMCk7Ci0JCQlib29rM2VfaHR3X2VuYWJsZWQgPSAxOwotCQl9Ci0JCXByX2luZm8oIk1NVTogQm9vazNFIFBhZ2UgVGFibGVzICVzXG4iLAotCQkJYm9vazNlX2h0d19lbmFibGVkID8gIkVuYWJsZWQiIDogIkRpc2FibGVkIik7CisJCS8qIExvb2sgZm9yIEhXIHRhYmxld2FsayBzdXBwb3J0ICovCisJCXNldHVwX21tdV9odHcoKTsKIAl9CiAKIAkvKiBTZXQgTUFTNCBiYXNlZCBvbiBwYWdlIHRhYmxlIHNldHRpbmcgKi8KQEAgLTQyNiw3ICs1MDMsNyBAQAogCS8qIFNldCB0aGUgZ2xvYmFsIGNvbnRhaW5pbmcgdGhlIHRvcCBvZiB0aGUgbGluZWFyIG1hcHBpbmcKIAkgKiBmb3IgdXNlIGJ5IHRoZSBUTEIgbWlzcyBjb2RlCiAJICovCi0JbGluZWFyX21hcF90b3AgPSBsbWJfZW5kX29mX0RSQU0oKTsKKwlsaW5lYXJfbWFwX3RvcCA9IG1lbWJsb2NrX2VuZF9vZl9EUkFNKCk7CiAKIAkvKiBBIHN5bmMgd29uJ3QgaHVydCB1cyBhZnRlciBtdWNraW5nIGFyb3VuZCB3aXRoCiAJICogdGhlIE1NVSBjb25maWd1cmF0aW9uCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvTWFrZWZpbGUKaW5kZXggNzNlMWMyYy4uZTIxOWNhNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9NYWtlZmlsZQpAQCAtMTYsNiArMTYsNiBAQAogb3Byb2ZpbGUtJChDT05GSUdfT1BST0ZJTEVfQ0VMTCkgKz0gb3BfbW9kZWxfY2VsbC5vIFwKIAkJY2VsbC9zcHVfcHJvZmlsZXIubyBjZWxsL3ZtYV9tYXAubyBcCiAJCWNlbGwvc3B1X3Rhc2tfc3luYy5vCi1vcHJvZmlsZS0kKENPTkZJR19QUEM2NCkgKz0gb3BfbW9kZWxfcnM2NC5vIG9wX21vZGVsX3Bvd2VyNC5vIG9wX21vZGVsX3BhNnQubworb3Byb2ZpbGUtJChDT05GSUdfUFBDX0JPT0szU182NCkgKz0gb3BfbW9kZWxfcnM2NC5vIG9wX21vZGVsX3Bvd2VyNC5vIG9wX21vZGVsX3BhNnQubwogb3Byb2ZpbGUtJChDT05GSUdfRlNMX0VNQl9QRVJGTU9OKSArPSBvcF9tb2RlbF9mc2xfZW1iLm8KIG9wcm9maWxlLSQoQ09ORklHXzZ4eCkgKz0gb3BfbW9kZWxfNzQ1MC5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvY29tbW9uLmMKaW5kZXggMjFmMTZlZC4uZDY1ZTY4ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL2NvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9jb21tb24uYwpAQCAtMTk5LDcgKzE5OSw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJc3dpdGNoIChjdXJfY3B1X3NwZWMtPm9wcm9maWxlX3R5cGUpIHsKLSNpZmRlZiBDT05GSUdfUFBDNjQKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAogI2lmZGVmIENPTkZJR19PUFJPRklMRV9DRUxMCiAJCWNhc2UgUFBDX09QUk9GSUxFX0NFTEw6CiAJCQlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDB4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQweC9LY29uZmlnCmluZGV4IGVjNjQyNjQuLmI3MjE3NjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDB4L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80MHgvS2NvbmZpZwpAQCAtNzEsMjIgKzcxLDYgQEAKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBBTUNDIFBQQzQwNUVYIGJvYXJkLgogCi0jY29uZmlnIFJFRFdPT0RfNQotIwlib29sICJSZWR3b29kLTUiCi0jCWRlcGVuZHMgb24gNDB4Ci0jCWRlZmF1bHQgbgotIwlzZWxlY3QgU1RCMDN4eHgKLSMJaGVscAotIwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIElCTSBTVEIwNCBldmFsdWF0aW9uIGJvYXJkLgotCi0jY29uZmlnIFJFRFdPT0RfNgotIwlib29sICJSZWR3b29kLTYiCi0jCWRlcGVuZHMgb24gNDB4Ci0jCWRlZmF1bHQgbgotIwlzZWxlY3QgU1RCMDN4eHgKLSMJaGVscAotIwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIElCTSBTVEJ4MjV4eCBldmFsdWF0aW9uIGJvYXJkLgotCiAjY29uZmlnIFNZQ0FNT1JFCiAjCWJvb2wgIlN5Y2Ftb3JlIgogIwlkZXBlbmRzIG9uIDQweApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvS2NvbmZpZwppbmRleCA0ZGFjOWIwLi4yN2IwNjUxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvS2NvbmZpZwpAQCAtMSwzMiArMSwzNCBAQAogY29uZmlnIFBQQ19NUEM1MTJ4Ci0JYm9vbAorCWJvb2wgIjUxMngtYmFzZWQgYm9hcmRzIgorCWRlcGVuZHMgb24gNnh4CiAJc2VsZWN0IEZTTF9TT0MKIAlzZWxlY3QgSVBJQwogCXNlbGVjdCBQUENfQ0xPQ0sKIAlzZWxlY3QgUFBDX1BDSV9DSE9JQ0UKIAlzZWxlY3QgRlNMX1BDSSBpZiBQQ0kKIAotY29uZmlnIFBQQ19NUEM1MTIxCi0JYm9vbAotCXNlbGVjdCBQUENfTVBDNTEyeAotCiBjb25maWcgTVBDNTEyMV9BRFMKIAlib29sICJGcmVlc2NhbGUgTVBDNTEyMUUgQURTIgotCWRlcGVuZHMgb24gNnh4CisJZGVwZW5kcyBvbiBQUENfTVBDNTEyeAogCXNlbGVjdCBERUZBVUxUX1VJTUFHRQotCXNlbGVjdCBQUENfTVBDNTEyMQogCXNlbGVjdCBNUEM1MTIxX0FEU19DUExECiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTVBDNTEyMUUgQURTIGJvYXJkLgogCiBjb25maWcgTVBDNTEyMV9HRU5FUklDCiAJYm9vbCAiR2VuZXJpYyBzdXBwb3J0IGZvciBzaW1wbGUgTVBDNTEyMSBiYXNlZCBib2FyZHMiCi0JZGVwZW5kcyBvbiA2eHgKKwlkZXBlbmRzIG9uIFBQQ19NUEM1MTJ4CiAJc2VsZWN0IERFRkFVTFRfVUlNQUdFCi0Jc2VsZWN0IFBQQ19NUEM1MTIxCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBzaW1wbGUgTVBDNTEyMSBiYXNlZCBib2FyZHMKIAkgIHdoaWNoIGRvIG5vdCBuZWVkIGN1c3RvbSBwbGF0Zm9ybSBzcGVjaWZpYyBzZXR1cC4KIAogCSAgQ29tcGF0aWJsZSBib2FyZHMgaW5jbHVkZTogIFByb3RvbmljIExWVCBiYXNlIGJvYXJkcyAoWkFOTUNVCiAJICBhbmQgVklDVlQyKS4KKworY29uZmlnIFBETTM2ME5HCisJYm9vbCAiaWZtIFBETTM2ME5HIGJvYXJkIgorCWRlcGVuZHMgb24gUFBDX01QQzUxMngKKwlzZWxlY3QgREVGQVVMVF9VSU1BR0UKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBQRE0zNjBORyBib2FyZC4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9NYWtlZmlsZQppbmRleCA5MGJlMmY1Li40ZWZjMWM0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L01ha2VmaWxlCkBAIC00LDMgKzQsNCBAQAogb2JqLXkJCQkJKz0gY2xvY2subyBtcGM1MTJ4X3NoYXJlZC5vCiBvYmotJChDT05GSUdfTVBDNTEyMV9BRFMpCSs9IG1wYzUxMjFfYWRzLm8gbXBjNTEyMV9hZHNfY3BsZC5vCiBvYmotJChDT05GSUdfTVBDNTEyMV9HRU5FUklDKQkrPSBtcGM1MTIxX2dlbmVyaWMubworb2JqLSQoQ09ORklHX1BETTM2ME5HKQkJKz0gcGRtMzYwbmcubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L2Nsb2NrLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvY2xvY2suYwppbmRleCA0YzQyMjQ2Li41YjI0M2JkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvY2xvY2suYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvY2xvY2suYwpAQCAtMjkyLDYgKzI5MiwxNSBAQAogCWNsay0+cmF0ZSA9IHJhdGU7CiB9CiAKK3N0YXRpYyB2b2lkIHZpdV9jbGtfY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyByYXRlOworCisJcmF0ZSA9IHN5c19jbGsucmF0ZTsKKwlyYXRlIC89IDI7CisJY2xrLT5yYXRlID0gcmF0ZTsKK30KKwogc3RhdGljIHZvaWQgaGFsZl9jbGtfY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7CiAJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyAyOwpAQCAtNDEyLDYgKzQyMSwxNCBAQAogCS5jYWxjID0gZGl1X2Nsa19jYWxjLAogfTsKIAorc3RhdGljIHN0cnVjdCBjbGsgdml1X2NsayA9IHsKKwkubmFtZSA9ICJ2aXVfY2xrIiwKKwkuZmxhZ3MgPSBDTEtfSEFTX0NUUkwsCisJLnJlZyA9IDEsCisJLmJpdCA9IDE4LAorCS5jYWxjID0gdml1X2Nsa19jYWxjLAorfTsKKwogc3RhdGljIHN0cnVjdCBjbGsgYXhlX2NsayA9IHsKIAkubmFtZSA9ICJheGVfY2xrIiwKIAkuZmxhZ3MgPSBDTEtfSEFTX0NUUkwsCkBAIC01MzUsNiArNTUyLDcgQEAKIAkmcmVmX2NsaywKIAkmc3lzX2NsaywKIAkmZGl1X2NsaywKKwkmdml1X2NsaywKIAkmY3NiX2NsaywKIAkmZTMwMF9jbGssCiAJJmlwc19jbGssCkBAIC02NjAsNyArNjc4LDcgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwogCWNvbnN0IHUzMiAqY2VsbF9pbmRleDsKLQlzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldjsKIAogCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgTlVMTCwgImZzbCxtcGM1MTIxLXBzYyIpIHsKIAkJY2VsbF9pbmRleCA9IG9mX2dldF9wcm9wZXJ0eShucCwgImNlbGwtaW5kZXgiLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTIxX2Fkcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfYWRzLmMKaW5kZXggZWU2YWUxMi4uZGNlZjZhZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfYWRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfYWRzLmMKQEAgLTQyLDYgKzQyLDcgQEAKIAlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAiZnNsLG1wYzUxMjEtcGNpIikKIAkJbXBjODN4eF9hZGRfYnJpZGdlKG5wKTsKICNlbmRpZgorCW1wYzUxMnhfc2V0dXBfZGl1KCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBtcGM1MTIxX2Fkc19pbml0X0lSUSh2b2lkKQpAQCAtNjUsNiArNjYsNyBAQAogCS5wcm9iZQkJCT0gbXBjNTEyMV9hZHNfcHJvYmUsCiAJLnNldHVwX2FyY2gJCT0gbXBjNTEyMV9hZHNfc2V0dXBfYXJjaCwKIAkuaW5pdAkJCT0gbXBjNTEyeF9pbml0LAorCS5pbml0X2Vhcmx5CQk9IG1wYzUxMnhfaW5pdF9kaXUsCiAJLmluaXRfSVJRCQk9IG1wYzUxMjFfYWRzX2luaXRfSVJRLAogCS5nZXRfaXJxCQk9IGlwaWNfZ2V0X2lycSwKIAkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTIxX2dlbmVyaWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTIxX2dlbmVyaWMuYwppbmRleCBhNmMwZTNhLi5lNDg3ZWIwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9nZW5lcmljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfZ2VuZXJpYy5jCkBAIC01Miw2ICs1Miw4IEBACiAJLm5hbWUJCQk9ICJNUEM1MTIxIGdlbmVyaWMiLAogCS5wcm9iZQkJCT0gbXBjNTEyMV9nZW5lcmljX3Byb2JlLAogCS5pbml0CQkJPSBtcGM1MTJ4X2luaXQsCisJLmluaXRfZWFybHkJCT0gbXBjNTEyeF9pbml0X2RpdSwKKwkuc2V0dXBfYXJjaAkJPSBtcGM1MTJ4X3NldHVwX2RpdSwKIAkuaW5pdF9JUlEJCT0gbXBjNTEyeF9pbml0X0lSUSwKIAkuZ2V0X2lycQkJPSBpcGljX2dldF9pcnEsCiAJLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyeC5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMnguaAppbmRleCBiMmRhY2EwLi4xYWI2ZDExIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyeC5oCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTJ4LmgKQEAgLTE2LDQgKzE2LDYgQEAKIGV4dGVybiBpbnQgX19pbml0IG1wYzUxMjFfY2xrX2luaXQodm9pZCk7CiB2b2lkIF9faW5pdCBtcGM1MTJ4X2RlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyh2b2lkKTsKIGV4dGVybiB2b2lkIG1wYzUxMnhfcmVzdGFydChjaGFyICpjbWQpOworZXh0ZXJuIHZvaWQgbXBjNTEyeF9pbml0X2RpdSh2b2lkKTsKK2V4dGVybiB2b2lkIG1wYzUxMnhfc2V0dXBfZGl1KHZvaWQpOwogI2VuZGlmCQkJCS8qIF9fTVBDNTEyWF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTJ4X3NoYXJlZC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMnhfc2hhcmVkLmMKaW5kZXggNzA3ZTU3Mi4uZTQxZWJiZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMnhfc2hhcmVkLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMnhfc2hhcmVkLmMKQEAgLTE2LDcgKzE2LDExIEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzbC1kaXUtZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KIAorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vaXBpYy5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CkBAIC01NCw2ICs1OCwyODYgQEAKIAkJOwogfQogCitzdHJ1Y3QgZnNsX2RpdV9zaGFyZWRfZmIgeworCXU4CQlnYW1tYVsweDMwMF07CS8qIDMyLWJpdCBhbGlnbmVkISAqLworCXN0cnVjdCBkaXVfYWQJYWQwOwkJLyogMzItYml0IGFsaWduZWQhICovCisJcGh5c19hZGRyX3QJZmJfcGh5czsKKwlzaXplX3QJCWZiX2xlbjsKKwlib29sCQlpbl91c2U7Cit9OworCit1bnNpZ25lZCBpbnQgbXBjNTEyeF9nZXRfcGl4ZWxfZm9ybWF0KHVuc2lnbmVkIGludCBiaXRzX3Blcl9waXhlbCwKKwkJCQkgICAgICBpbnQgbW9uaXRvcl9wb3J0KQoreworCXN3aXRjaCAoYml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDMyOgorCQlyZXR1cm4gMHg4ODg4MzMxNjsKKwljYXNlIDI0OgorCQlyZXR1cm4gMHg4ODA4MjIxOTsKKwljYXNlIDE2OgorCQlyZXR1cm4gMHg2NTA1MzExODsKKwl9CisJcmV0dXJuIDB4MDAwMDA0MDA7Cit9CisKK3ZvaWQgbXBjNTEyeF9zZXRfZ2FtbWFfdGFibGUoaW50IG1vbml0b3JfcG9ydCwgY2hhciAqZ2FtbWFfdGFibGVfYmFzZSkKK3sKK30KKwordm9pZCBtcGM1MTJ4X3NldF9tb25pdG9yX3BvcnQoaW50IG1vbml0b3JfcG9ydCkKK3sKK30KKworI2RlZmluZSBESVVfRElWX01BU0sJMHgwMDAwMDBmZgordm9pZCBtcGM1MTJ4X3NldF9waXhlbF9jbG9jayh1bnNpZ25lZCBpbnQgcGl4Y2xvY2spCit7CisJdW5zaWduZWQgbG9uZyBiZXN0dmFsLCBiZXN0ZnJlcSwgc3BlZWQsIGJ1c2ZyZXE7CisJdW5zaWduZWQgbG9uZyBtaW5waXhjbG9jaywgbWF4cGl4Y2xvY2ssIHBpeHZhbDsKKwlzdHJ1Y3QgbXBjNTEyeF9jY20gX19pb21lbSAqY2NtOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJdTMyIHRlbXA7CisJbG9uZyBlcnI7CisJaW50IGk7CisKKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wsbXBjNTEyMS1jbG9jayIpOworCWlmICghbnApIHsKKwkJcHJfZXJyKCJDYW4ndCBmaW5kIGNsb2NrIGNvbnRyb2wgbW9kdWxlLlxuIik7CisJCXJldHVybjsKKwl9CisKKwljY20gPSBvZl9pb21hcChucCwgMCk7CisJb2Zfbm9kZV9wdXQobnApOworCWlmICghY2NtKSB7CisJCXByX2VycigiQ2FuJ3QgbWFwIGNsb2NrIGNvbnRyb2wgbW9kdWxlIHJlZy5cbiIpOworCQlyZXR1cm47CisJfQorCisJbnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAiY3B1Iik7CisJaWYgKG5wKSB7CisJCWNvbnN0IHVuc2lnbmVkIGludCAqcHJvcCA9CisJCQlvZl9nZXRfcHJvcGVydHkobnAsICJidXMtZnJlcXVlbmN5IiwgTlVMTCk7CisKKwkJb2Zfbm9kZV9wdXQobnApOworCQlpZiAocHJvcCkgeworCQkJYnVzZnJlcSA9ICpwcm9wOworCQl9IGVsc2UgeworCQkJcHJfZXJyKCJDYW4ndCBnZXQgYnVzLWZyZXF1ZW5jeSBwcm9wZXJ0eVxuIik7CisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UgeworCQlwcl9lcnIoIkNhbid0IGZpbmQgJ2NwdScgbm9kZS5cbiIpOworCQlyZXR1cm47CisJfQorCisJLyogUGl4ZWwgQ2xvY2sgY29uZmlndXJhdGlvbiAqLworCXByX2RlYnVnKCJESVU6IEJ1cyBGcmVxdWVuY3kgPSAlbHVcbiIsIGJ1c2ZyZXEpOworCXNwZWVkID0gYnVzZnJlcSAqIDQ7IC8qIERJVV9ESVYgcmF0aW8gaXMgNCAqIENTQl9DTEsgLyBESVVfQ0xLICovCisKKwkvKiBDYWxjdWxhdGUgdGhlIHBpeGVsIGNsb2NrIHdpdGggdGhlIHNtYWxsZXN0IGVycm9yICovCisJLyogY2FsY3VsYXRlIHRoZSBmb2xsb3dpbmcgaW4gc3RlcHMgdG8gYXZvaWQgb3ZlcmZsb3cgKi8KKwlwcl9kZWJ1ZygiRElVIHBpeGNsb2NrIGluIHBzIC0gJWRcbiIsIHBpeGNsb2NrKTsKKwl0ZW1wID0gKDEwMDAwMDAwMDAgLyBwaXhjbG9jaykgKiAxMDAwOworCXBpeGNsb2NrID0gdGVtcDsKKwlwcl9kZWJ1ZygiRElVIHBpeGNsb2NrIGZyZXEgLSAldVxuIiwgcGl4Y2xvY2spOworCisJdGVtcCA9IHRlbXAgLyAyMDsgLyogcGl4Y2xvY2sgKiAwLjA1ICovCisJcHJfZGVidWcoImRldmlhdGlvbiA9ICVkXG4iLCB0ZW1wKTsKKwltaW5waXhjbG9jayA9IHBpeGNsb2NrIC0gdGVtcDsKKwltYXhwaXhjbG9jayA9IHBpeGNsb2NrICsgdGVtcDsKKwlwcl9kZWJ1ZygiRElVIG1pbnBpeGNsb2NrIC0gJWx1XG4iLCBtaW5waXhjbG9jayk7CisJcHJfZGVidWcoIkRJVSBtYXhwaXhjbG9jayAtICVsdVxuIiwgbWF4cGl4Y2xvY2spOworCXBpeHZhbCA9IHNwZWVkL3BpeGNsb2NrOworCXByX2RlYnVnKCJESVUgcGl4dmFsID0gJWx1XG4iLCBwaXh2YWwpOworCisJZXJyID0gTE9OR19NQVg7CisJYmVzdHZhbCA9IHBpeHZhbDsKKwlwcl9kZWJ1ZygiRElVIGJlc3R2YWwgPSAlbHVcbiIsIGJlc3R2YWwpOworCisJYmVzdGZyZXEgPSAwOworCWZvciAoaSA9IC0xOyBpIDw9IDE7IGkrKykgeworCQl0ZW1wID0gc3BlZWQgLyAocGl4dmFsK2kpOworCQlwcl9kZWJ1ZygiRElVIHRlc3QgcGl4dmFsIGk9JWQsIHBpeHZhbD0lbHUsIHRlbXAgZnJlcS4gPSAldVxuIiwKKwkJCWksIHBpeHZhbCwgdGVtcCk7CisJCWlmICgodGVtcCA8IG1pbnBpeGNsb2NrKSB8fCAodGVtcCA+IG1heHBpeGNsb2NrKSkKKwkJCXByX2RlYnVnKCJESVUgZXhjZWVkcyBtb25pdG9yIHJhbmdlICglbHUgdG8gJWx1KVxuIiwKKwkJCQltaW5waXhjbG9jaywgbWF4cGl4Y2xvY2spOworCQllbHNlIGlmIChhYnModGVtcCAtIHBpeGNsb2NrKSA8IGVycikgeworCQkJcHJfZGVidWcoIkVudGVyZWQgdGhlIGVsc2UgaWYgYmxvY2sgJWRcbiIsIGkpOworCQkJZXJyID0gYWJzKHRlbXAgLSBwaXhjbG9jayk7CisJCQliZXN0dmFsID0gcGl4dmFsICsgaTsKKwkJCWJlc3RmcmVxID0gdGVtcDsKKwkJfQorCX0KKworCXByX2RlYnVnKCJESVUgY2hvc2UgPSAlbHhcbiIsIGJlc3R2YWwpOworCXByX2RlYnVnKCJESVUgZXJyb3IgPSAlbGRcbiBOb21QaXhDbGsgIiwgZXJyKTsKKwlwcl9kZWJ1ZygiRElVOiBCZXN0IEZyZXEgPSAlbHhcbiIsIGJlc3RmcmVxKTsKKwkvKiBNb2RpZnkgRElVX0RJViBpbiBDQ00gU0NGUjEgKi8KKwl0ZW1wID0gaW5fYmUzMigmY2NtLT5zY2ZyMSk7CisJcHJfZGVidWcoIkRJVTogQ3VycmVudCB2YWx1ZSBvZiBTQ0ZSMTogMHglMDh4XG4iLCB0ZW1wKTsKKwl0ZW1wICY9IH5ESVVfRElWX01BU0s7CisJdGVtcCB8PSAoYmVzdHZhbCAmIERJVV9ESVZfTUFTSyk7CisJb3V0X2JlMzIoJmNjbS0+c2NmcjEsIHRlbXApOworCXByX2RlYnVnKCJESVU6IE1vZGlmaWVkIHZhbHVlIG9mIFNDRlIxOiAweCUwOHhcbiIsIHRlbXApOworCWlvdW5tYXAoY2NtKTsKK30KKworc3NpemVfdCBtcGM1MTJ4X3Nob3dfbW9uaXRvcl9wb3J0KGludCBtb25pdG9yX3BvcnQsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIwIC0gNTEyMSBMQ0RcbiIpOworfQorCitpbnQgbXBjNTEyeF9zZXRfc3lzZnNfbW9uaXRvcl9wb3J0KGludCB2YWwpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZnNsX2RpdV9zaGFyZWRfZmIgX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKDgpKSkgZGl1X3NoYXJlZF9mYjsKKworI2lmIGRlZmluZWQoQ09ORklHX0ZCX0ZTTF9ESVUpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19GQl9GU0xfRElVX01PRFVMRSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBtcGM1MTJ4X2ZyZWVfYm9vdG1lbShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlfX0NsZWFyUGFnZVJlc2VydmVkKHBhZ2UpOworCUJVR19PTihQYWdlVGFpbChwYWdlKSk7CisJQlVHX09OKGF0b21pY19yZWFkKCZwYWdlLT5fY291bnQpID4gMSk7CisJYXRvbWljX3NldCgmcGFnZS0+X2NvdW50LCAxKTsKKwlfX2ZyZWVfcGFnZShwYWdlKTsKKwl0b3RhbHJhbV9wYWdlcysrOworfQorCit2b2lkIG1wYzUxMnhfcmVsZWFzZV9ib290bWVtKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gZGl1X3NoYXJlZF9mYi5mYl9waHlzICYgUEFHRV9NQVNLOworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGRpdV9zaGFyZWRfZmIuZmJfbGVuOworCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKKworCWlmIChkaXVfc2hhcmVkX2ZiLmluX3VzZSkgeworCQlzdGFydCA9IFBGTl9VUChhZGRyKTsKKwkJZW5kID0gUEZOX0RPV04oYWRkciArIHNpemUpOworCisJCWZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykKKwkJCW1wYzUxMnhfZnJlZV9ib290bWVtKHBmbl90b19wYWdlKHN0YXJ0KSk7CisKKwkJZGl1X3NoYXJlZF9mYi5pbl91c2UgPSBmYWxzZTsKKwl9CisJZGl1X29wcy5yZWxlYXNlX2Jvb3RtZW0JPSBOVUxMOworfQorI2VuZGlmCisKKy8qCisgKiBDaGVjayBpZiBESVUgd2FzIHByZS1pbml0aWFsaXplZC4gSWYgc28sIHBlcmZvcm0gc3RlcHMKKyAqIG5lZWRlZCB0byBjb250aW51ZSBkaXNwbGF5aW5nIHRocm91Z2ggdGhlIHdob2xlIGJvb3QgcHJvY2Vzcy4KKyAqIE1vdmUgYXJlYSBkZXNjcmlwdG9yIGFuZCBnYW1tYSB0YWJsZSBlbHNld2hlcmUsIHRoZXkgYXJlCisgKiBkZXN0cm95ZWQgYnkgYm9vdG1lbSBhbGxvY2F0b3Igb3RoZXJ3aXNlLiBUaGUgZnJhbWUgYnVmZmVyCisgKiBhZGRyZXNzIHJhbmdlIHdpbGwgYmUgcmVzZXJ2ZWQgaW4gc2V0dXBfYXJjaCgpIGFmdGVyIGJvb3RtZW0KKyAqIGFsbG9jYXRvciBpcyB1cC4KKyAqLwordm9pZCBfX2luaXQgbXBjNTEyeF9pbml0X2RpdSh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJc3RydWN0IGRpdSBfX2lvbWVtICpkaXVfcmVnOworCXBoeXNfYWRkcl90IGRlc2M7CisJdm9pZCBfX2lvbWVtICp2YWRkcjsKKwl1bnNpZ25lZCBsb25nIG1vZGUsIHBpeF9mbXQsIHJlcywgYnBwOworCXVuc2lnbmVkIGxvbmcgZHN0OworCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZnNsLG1wYzUxMjEtZGl1Iik7CisJaWYgKCFucCkgeworCQlwcl9lcnIoIk5vIERJVSBub2RlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWRpdV9yZWcgPSBvZl9pb21hcChucCwgMCk7CisJb2Zfbm9kZV9wdXQobnApOworCWlmICghZGl1X3JlZykgeworCQlwcl9lcnIoIkNhbid0IG1hcCBESVVcbiIpOworCQlyZXR1cm47CisJfQorCisJbW9kZSA9IGluX2JlMzIoJmRpdV9yZWctPmRpdV9tb2RlKTsKKwlpZiAobW9kZSAhPSBNRkJfTU9ERTEpIHsKKwkJcHJfaW5mbygiJXM6IERJVSBPRkZcbiIsIF9fZnVuY19fKTsKKwkJZ290byBvdXQ7CisJfQorCisJZGVzYyA9IGluX2JlMzIoJmRpdV9yZWctPmRlc2NbMF0pOworCXZhZGRyID0gaW9yZW1hcChkZXNjLCBzaXplb2Yoc3RydWN0IGRpdV9hZCkpOworCWlmICghdmFkZHIpIHsKKwkJcHJfZXJyKCJDYW4ndCBtYXAgRElVIGFyZWEgZGVzYy5cbiIpOworCQlnb3RvIG91dDsKKwl9CisJbWVtY3B5KCZkaXVfc2hhcmVkX2ZiLmFkMCwgdmFkZHIsIHNpemVvZihzdHJ1Y3QgZGl1X2FkKSk7CisJLyogZmx1c2ggZmIgYXJlYSBkZXNjcmlwdG9yICovCisJZHN0ID0gKHVuc2lnbmVkIGxvbmcpJmRpdV9zaGFyZWRfZmIuYWQwOworCWZsdXNoX2RjYWNoZV9yYW5nZShkc3QsIGRzdCArIHNpemVvZihzdHJ1Y3QgZGl1X2FkKSAtIDEpOworCisJcmVzID0gaW5fYmUzMigmZGl1X3JlZy0+ZGlzcF9zaXplKTsKKwlwaXhfZm10ID0gaW5fbGUzMih2YWRkcik7CisJYnBwID0gKChwaXhfZm10ID4+IDE2KSAmIDB4MykgKyAxOworCWRpdV9zaGFyZWRfZmIuZmJfcGh5cyA9IGluX2xlMzIodmFkZHIgKyA0KTsKKwlkaXVfc2hhcmVkX2ZiLmZiX2xlbiA9ICgocmVzICYgMHhmZmYwMDAwKSA+PiAxNikgKiAocmVzICYgMHhmZmYpICogYnBwOworCWRpdV9zaGFyZWRfZmIuaW5fdXNlID0gdHJ1ZTsKKwlpb3VubWFwKHZhZGRyKTsKKworCWRlc2MgPSBpbl9iZTMyKCZkaXVfcmVnLT5nYW1tYSk7CisJdmFkZHIgPSBpb3JlbWFwKGRlc2MsIHNpemVvZihkaXVfc2hhcmVkX2ZiLmdhbW1hKSk7CisJaWYgKCF2YWRkcikgeworCQlwcl9lcnIoIkNhbid0IG1hcCBESVUgYXJlYSBkZXNjLlxuIik7CisJCWRpdV9zaGFyZWRfZmIuaW5fdXNlID0gZmFsc2U7CisJCWdvdG8gb3V0OworCX0KKwltZW1jcHkoJmRpdV9zaGFyZWRfZmIuZ2FtbWEsIHZhZGRyLCBzaXplb2YoZGl1X3NoYXJlZF9mYi5nYW1tYSkpOworCS8qIGZsdXNoIGdhbW1hIHRhYmxlICovCisJZHN0ID0gKHVuc2lnbmVkIGxvbmcpJmRpdV9zaGFyZWRfZmIuZ2FtbWE7CisJZmx1c2hfZGNhY2hlX3JhbmdlKGRzdCwgZHN0ICsgc2l6ZW9mKGRpdV9zaGFyZWRfZmIuZ2FtbWEpIC0gMSk7CisKKwlpb3VubWFwKHZhZGRyKTsKKwlvdXRfYmUzMigmZGl1X3JlZy0+Z2FtbWEsIHZpcnRfdG9fcGh5cygmZGl1X3NoYXJlZF9mYi5nYW1tYSkpOworCW91dF9iZTMyKCZkaXVfcmVnLT5kZXNjWzFdLCAwKTsKKwlvdXRfYmUzMigmZGl1X3JlZy0+ZGVzY1syXSwgMCk7CisJb3V0X2JlMzIoJmRpdV9yZWctPmRlc2NbMF0sIHZpcnRfdG9fcGh5cygmZGl1X3NoYXJlZF9mYi5hZDApKTsKKworb3V0OgorCWlvdW5tYXAoZGl1X3JlZyk7Cit9CisKK3ZvaWQgX19pbml0IG1wYzUxMnhfc2V0dXBfZGl1KHZvaWQpCit7CisJaW50IHJldDsKKworCS8qCisJICogV2UgZG8gbm90IGFsbG9jYXRlIGFuZCBjb25maWd1cmUgbmV3IGFyZWEgZm9yIGJpdG1hcCBidWZmZXIKKwkgKiBiZWNhdXNlIGl0IHdvdWxkIHJlcXVlcmUgY29weWluZyBiaXRtYXAgZGF0YSAoc3BsYXNoIGltYWdlKQorCSAqIGFuZCBzbyBuZWdhdGl2ZWx5IGFmZmVjdCBib290IHRpbWUuIEluc3RlYWQgd2UgcmVzZXJ2ZSB0aGUKKwkgKiBhbHJlYWR5IGNvbmZpZ3VyZWQgZnJhbWUgYnVmZmVyIGFyZWEgc28gdGhhdCBpdCB3b24ndCBiZQorCSAqIGRlc3Ryb3llZC4gVGhlIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlIGFyZWEgdG8gcmVzZXJ2ZSBhbmQKKwkgKiBhbHNvIGl0J3MgbGVuZ3RoIGlzIHBhc3NlZCB0byByZXNlcnZlX2Jvb3RtZW0oKS4gSXQgd2lsbCBiZQorCSAqIGZyZWVkIGxhdGVyIG9uIGZpcnN0IG9wZW4gb2YgZmJkZXYsIHdoZW4gc3BsYXNoIGltYWdlIGlzIG5vdAorCSAqIG5lZWRlZCBhbnkgbW9yZS4KKwkgKi8KKwlpZiAoZGl1X3NoYXJlZF9mYi5pbl91c2UpIHsKKwkJcmV0ID0gcmVzZXJ2ZV9ib290bWVtKGRpdV9zaGFyZWRfZmIuZmJfcGh5cywKKwkJCQkgICAgICBkaXVfc2hhcmVkX2ZiLmZiX2xlbiwKKwkJCQkgICAgICBCT09UTUVNX0VYQ0xVU0lWRSk7CisJCWlmIChyZXQpIHsKKwkJCXByX2VycigiJXM6IHJlc2VydmUgYm9vdG1lbSBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJCWRpdV9zaGFyZWRfZmIuaW5fdXNlID0gZmFsc2U7CisJCX0KKwl9CisKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9GU0xfRElVKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfRkJfRlNMX0RJVV9NT0RVTEUpCisJZGl1X29wcy5nZXRfcGl4ZWxfZm9ybWF0CT0gbXBjNTEyeF9nZXRfcGl4ZWxfZm9ybWF0OworCWRpdV9vcHMuc2V0X2dhbW1hX3RhYmxlCQk9IG1wYzUxMnhfc2V0X2dhbW1hX3RhYmxlOworCWRpdV9vcHMuc2V0X21vbml0b3JfcG9ydAk9IG1wYzUxMnhfc2V0X21vbml0b3JfcG9ydDsKKwlkaXVfb3BzLnNldF9waXhlbF9jbG9jawkJPSBtcGM1MTJ4X3NldF9waXhlbF9jbG9jazsKKwlkaXVfb3BzLnNob3dfbW9uaXRvcl9wb3J0CT0gbXBjNTEyeF9zaG93X21vbml0b3JfcG9ydDsKKwlkaXVfb3BzLnNldF9zeXNmc19tb25pdG9yX3BvcnQJPSBtcGM1MTJ4X3NldF9zeXNmc19tb25pdG9yX3BvcnQ7CisJZGl1X29wcy5yZWxlYXNlX2Jvb3RtZW0JCT0gbXBjNTEyeF9yZWxlYXNlX2Jvb3RtZW07CisjZW5kaWYKK30KKwogdm9pZCBfX2luaXQgbXBjNTEyeF9pbml0X0lSUSh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvcGRtMzYwbmcuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9wZG0zNjBuZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NzVlODUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvcGRtMzYwbmcuYwpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nCisgKgorICogQW5hdG9saWogR3VzdHNjaGluLCA8YWd1c3RAZGVueC5kZT4KKyAqCisgKiBQRE0zNjBORyBib2FyZCBzZXR1cAorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vaXBpYy5oPgorCisjaW5jbHVkZSAibXBjNTEyeC5oIgorCisjaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NikgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDZfTU9EVUxFKQorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisKK3N0YXRpYyB2b2lkICpwZG0zNjBuZ19ncGlvX2Jhc2U7CisKK3N0YXRpYyBpbnQgcGRtMzYwbmdfZ2V0X3BlbmRvd25fc3RhdGUodm9pZCkKK3sKKwl1MzIgcmVnOworCisJcmVnID0gaW5fYmUzMihwZG0zNjBuZ19ncGlvX2Jhc2UgKyAweGMpOworCWlmIChyZWcgJiAweDQwKQorCQlzZXRiaXRzMzIocGRtMzYwbmdfZ3Bpb19iYXNlICsgMHhjLCAweDQwKTsKKworCXJlZyA9IGluX2JlMzIocGRtMzYwbmdfZ3Bpb19iYXNlICsgMHg4KTsKKworCS8qIHJldHVybiAxIGlmIHBlbiBpcyBkb3duICovCisJcmV0dXJuIChyZWcgJiAweDQwKSA9PSAwOworfQorCitzdGF0aWMgc3RydWN0IGFkczc4NDZfcGxhdGZvcm1fZGF0YSBwZG0zNjBuZ19hZHM3ODQ2X3BkYXRhID0geworCS5tb2RlbAkJCT0gNzg0NSwKKwkuZ2V0X3BlbmRvd25fc3RhdGUJPSBwZG0zNjBuZ19nZXRfcGVuZG93bl9zdGF0ZSwKKwkuaXJxX2ZsYWdzCQk9IElSUUZfVFJJR0dFUl9MT1csCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwZG0zNjBuZ19wZW5pcnFfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisKKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wsbXBjNTEyMS1ncGlvIik7CisJaWYgKCFucCkgeworCQlwcl9lcnIoIiVzOiBDYW4ndCBmaW5kICdtcGM1MTIxLWdwaW8nIG5vZGVcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcGRtMzYwbmdfZ3Bpb19iYXNlID0gb2ZfaW9tYXAobnAsIDApOworCW9mX25vZGVfcHV0KG5wKTsKKwlpZiAoIXBkbTM2MG5nX2dwaW9fYmFzZSkgeworCQlwcl9lcnIoIiVzOiBDYW4ndCBtYXAgZ3BpbyByZWdzLlxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJb3V0X2JlMzIocGRtMzYwbmdfZ3Bpb19iYXNlICsgMHhjLCAweGZmZmZmZmZmKTsKKwlzZXRiaXRzMzIocGRtMzYwbmdfZ3Bpb19iYXNlICsgMHgxOCwgMHgyMDAwKTsKKwlzZXRiaXRzMzIocGRtMzYwbmdfZ3Bpb19iYXNlICsgMHgxMCwgMHg0MCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwZG0zNjBuZ190b3VjaHNjcmVlbl9ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJCXVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKl9fZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IF9fZGV2OworCisJaWYgKChldmVudCA9PSBCVVNfTk9USUZZX0FERF9ERVZJQ0UpICYmCisJICAgIG9mX2RldmljZV9pc19jb21wYXRpYmxlKGRldi0+b2Zfbm9kZSwgInRpLGFkczc4NDYiKSkgeworCQlkZXYtPnBsYXRmb3JtX2RhdGEgPSAmcGRtMzYwbmdfYWRzNzg0Nl9wZGF0YTsKKwkJcmV0dXJuIE5PVElGWV9PSzsKKwl9CisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBkbTM2MG5nX3RvdWNoc2NyZWVuX25iID0geworCS5ub3RpZmllcl9jYWxsID0gcGRtMzYwbmdfdG91Y2hzY3JlZW5fbm90aWZpZXJfY2FsbCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwZG0zNjBuZ190b3VjaHNjcmVlbl9pbml0KHZvaWQpCit7CisJaWYgKHBkbTM2MG5nX3BlbmlycV9pbml0KCkpCisJCXJldHVybjsKKworCWJ1c19yZWdpc3Rlcl9ub3RpZmllcigmc3BpX2J1c190eXBlLCAmcGRtMzYwbmdfdG91Y2hzY3JlZW5fbmIpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgcGRtMzYwbmdfdG91Y2hzY3JlZW5faW5pdCh2b2lkKQoreworfQorI2VuZGlmIC8qIENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2ICovCisKK3ZvaWQgX19pbml0IHBkbTM2MG5nX2luaXQodm9pZCkKK3sKKwltcGM1MTJ4X2luaXQoKTsKKwlwZG0zNjBuZ190b3VjaHNjcmVlbl9pbml0KCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHBkbTM2MG5nX3Byb2JlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOworCisJcmV0dXJuIG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiaWZtLHBkbTM2MG5nIik7Cit9CisKK2RlZmluZV9tYWNoaW5lKHBkbTM2MG5nKSB7CisJLm5hbWUJCQk9ICJQRE0zNjBORyIsCisJLnByb2JlCQkJPSBwZG0zNjBuZ19wcm9iZSwKKwkuc2V0dXBfYXJjaAkJPSBtcGM1MTJ4X3NldHVwX2RpdSwKKwkuaW5pdAkJCT0gcGRtMzYwbmdfaW5pdCwKKwkuaW5pdF9lYXJseQkJPSBtcGM1MTJ4X2luaXRfZGl1LAorCS5pbml0X0lSUQkJPSBtcGM1MTJ4X2luaXRfSVJRLAorCS5nZXRfaXJxCQk9IGlwaWNfZ2V0X2lycSwKKwkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKKwkucmVzdGFydAkJPSBtcGM1MTJ4X3Jlc3RhcnQsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L2xpdGU1MjAwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbGl0ZTUyMDAuYwppbmRleCA2ZDU4NGY0Li5kZTU1YmMwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbGl0ZTUyMDAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbGl0ZTUyMDAuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbGl0ZTUyMDBfcG0uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9saXRlNTIwMF9wbS5jCmluZGV4IGI1Yzc1M2QuLjgwMjM0ZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9saXRlNTIwMF9wbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9saXRlNTIwMF9wbS5jCkBAIC0yMTYsOSArMjE2LDYgQEAKIAogCWxpdGU1MjAwX3Jlc3RvcmVfcmVncygpOwogCi0JLyogcmVzdGFydCBqaWZmaWVzICovCi0Jd2FrZXVwX2RlY3JlbWVudGVyKCk7Ci0KIAlpb3VubWFwKG1iYXIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfZ3Bpby5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfZ3Bpby5jCmluZGV4IGNhNTMwNWEuLjBkYWQ5YTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2dwaW8uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9ncGlvLmMKQEAgLTE0NywyNiArMTQ3LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IG1wYzUyeHhfd2t1cF9ncGlvY2hpcF9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1wYzUyeHhfd2t1cF9ncGlvY2hpcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldiwKIAkJCQkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7CiAJc3RydWN0IG1wYzUyeHhfZ3Bpb2NoaXAgKmNoaXA7CiAJc3RydWN0IG1wYzUyeHhfZ3Bpb193a3VwIF9faW9tZW0gKnJlZ3M7Ci0Jc3RydWN0IG9mX2dwaW9fY2hpcCAqb2ZjaGlwOworCXN0cnVjdCBncGlvX2NoaXAgKmdjOwogCWludCByZXQ7CiAKIAljaGlwID0ga3phbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNoaXApCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jb2ZjaGlwID0gJmNoaXAtPm1tY2hpcC5vZl9nYzsKKwlnYyA9ICZjaGlwLT5tbWNoaXAuZ2M7CiAKLQlvZmNoaXAtPmdwaW9fY2VsbHMgICAgICAgICAgPSAyOwotCW9mY2hpcC0+Z2MubmdwaW8gICAgICAgICAgICA9IDg7Ci0Jb2ZjaGlwLT5nYy5kaXJlY3Rpb25faW5wdXQgID0gbXBjNTJ4eF93a3VwX2dwaW9fZGlyX2luOwotCW9mY2hpcC0+Z2MuZGlyZWN0aW9uX291dHB1dCA9IG1wYzUyeHhfd2t1cF9ncGlvX2Rpcl9vdXQ7Ci0Jb2ZjaGlwLT5nYy5nZXQgICAgICAgICAgICAgID0gbXBjNTJ4eF93a3VwX2dwaW9fZ2V0OwotCW9mY2hpcC0+Z2Muc2V0ICAgICAgICAgICAgICA9IG1wYzUyeHhfd2t1cF9ncGlvX3NldDsKKwlnYy0+bmdwaW8gICAgICAgICAgICA9IDg7CisJZ2MtPmRpcmVjdGlvbl9pbnB1dCAgPSBtcGM1Mnh4X3drdXBfZ3Bpb19kaXJfaW47CisJZ2MtPmRpcmVjdGlvbl9vdXRwdXQgPSBtcGM1Mnh4X3drdXBfZ3Bpb19kaXJfb3V0OworCWdjLT5nZXQgICAgICAgICAgICAgID0gbXBjNTJ4eF93a3VwX2dwaW9fZ2V0OworCWdjLT5zZXQgICAgICAgICAgICAgID0gbXBjNTJ4eF93a3VwX2dwaW9fc2V0OwogCiAJcmV0ID0gb2ZfbW1fZ3Bpb2NoaXBfYWRkKG9mZGV2LT5kZXYub2Zfbm9kZSwgJmNoaXAtPm1tY2hpcCk7CiAJaWYgKHJldCkKQEAgLTE4MCw3ICsxNzksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1wYzUyeHhfZ3Bpb2NoaXBfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KQorc3RhdGljIGludCBtcGM1Mnh4X2dwaW9jaGlwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldikKIHsKIAlyZXR1cm4gLUVCVVNZOwogfQpAQCAtMzExLDExICszMTAsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgbXBjNTJ4eF9zaW1wbGVfZ3Bpb2NoaXBfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtcGM1Mnh4X3NpbXBsZV9ncGlvY2hpcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldiwKIAkJCQkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7CiAJc3RydWN0IG1wYzUyeHhfZ3Bpb2NoaXAgKmNoaXA7Ci0Jc3RydWN0IG9mX2dwaW9fY2hpcCAqb2ZjaGlwOworCXN0cnVjdCBncGlvX2NoaXAgKmdjOwogCXN0cnVjdCBtcGM1Mnh4X2dwaW8gX19pb21lbSAqcmVnczsKIAlpbnQgcmV0OwogCkBAIC0zMjMsMTQgKzMyMiwxMyBAQAogCWlmICghY2hpcCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlvZmNoaXAgPSAmY2hpcC0+bW1jaGlwLm9mX2djOworCWdjID0gJmNoaXAtPm1tY2hpcC5nYzsKIAotCW9mY2hpcC0+Z3Bpb19jZWxscyAgICAgICAgICA9IDI7Ci0Jb2ZjaGlwLT5nYy5uZ3BpbyAgICAgICAgICAgID0gMzI7Ci0Jb2ZjaGlwLT5nYy5kaXJlY3Rpb25faW5wdXQgID0gbXBjNTJ4eF9zaW1wbGVfZ3Bpb19kaXJfaW47Ci0Jb2ZjaGlwLT5nYy5kaXJlY3Rpb25fb3V0cHV0ID0gbXBjNTJ4eF9zaW1wbGVfZ3Bpb19kaXJfb3V0OwotCW9mY2hpcC0+Z2MuZ2V0ICAgICAgICAgICAgICA9IG1wYzUyeHhfc2ltcGxlX2dwaW9fZ2V0OwotCW9mY2hpcC0+Z2Muc2V0ICAgICAgICAgICAgICA9IG1wYzUyeHhfc2ltcGxlX2dwaW9fc2V0OworCWdjLT5uZ3BpbyAgICAgICAgICAgID0gMzI7CisJZ2MtPmRpcmVjdGlvbl9pbnB1dCAgPSBtcGM1Mnh4X3NpbXBsZV9ncGlvX2Rpcl9pbjsKKwlnYy0+ZGlyZWN0aW9uX291dHB1dCA9IG1wYzUyeHhfc2ltcGxlX2dwaW9fZGlyX291dDsKKwlnYy0+Z2V0ICAgICAgICAgICAgICA9IG1wYzUyeHhfc2ltcGxlX2dwaW9fZ2V0OworCWdjLT5zZXQgICAgICAgICAgICAgID0gbXBjNTJ4eF9zaW1wbGVfZ3Bpb19zZXQ7CiAKIAlyZXQgPSBvZl9tbV9ncGlvY2hpcF9hZGQob2ZkZXYtPmRldi5vZl9ub2RlLCAmY2hpcC0+bW1jaGlwKTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfZ3B0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9ncHQuYwppbmRleCA0NmM5MzU3Li5mZWE4MzNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9ncHQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9ncHQuYwpAQCAtNzgsNyArNzgsNyBAQAogICogQGRldjogcG9pbnRlciB0byBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAcmVnczogdmlydHVhbCBhZGRyZXNzIG9mIEdQVCByZWdpc3RlcnMKICAqIEBsb2NrOiBzcGlubG9jayB0byBjb29yZGluYXRlIGJldHdlZW4gZGlmZmVyZW50IGZ1bmN0aW9ucy4KLSAqIEBvZl9nYzogb2ZfZ3Bpb19jaGlwIGluc3RhbmNlIHN0cnVjdHVyZTsgdXNlZCB3aGVuIEdQSU8gaXMgZW5hYmxlZAorICogQGdjOiBncGlvX2NoaXAgaW5zdGFuY2Ugc3RydWN0dXJlOyB1c2VkIHdoZW4gR1BJTyBpcyBlbmFibGVkCiAgKiBAaXJxaG9zdDogUG9pbnRlciB0byBpcnFfaG9zdCBpbnN0YW5jZTsgdXNlZCB3aGVuIElSUSBtb2RlIGlzIHN1cHBvcnRlZAogICogQHdkdF9tb2RlOiBvbmx5IHJlbGV2YW50IGZvciBncHQwOiBiaXQgMCAoTVBDNTJ4eF9HUFRfQ0FOX1dEVCkgaW5kaWNhdGVzCiAgKiAgIGlmIHRoZSBncHQgbWF5IGJlIHVzZWQgYXMgd2R0LCBiaXQgMSAoTVBDNTJ4eF9HUFRfSVNfV0RUKSBpbmRpY2F0ZXMKQEAgLTk0LDcgKzk0LDcgQEAKIAl1OCB3ZHRfbW9kZTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0dQSU9MSUIpCi0Jc3RydWN0IG9mX2dwaW9fY2hpcCBvZl9nYzsKKwlzdHJ1Y3QgZ3Bpb19jaGlwIGdjOwogI2VuZGlmCiB9OwogCkBAIC0yODAsNyArMjgwLDcgQEAKICNpZiBkZWZpbmVkKENPTkZJR19HUElPTElCKQogc3RhdGljIGlubGluZSBzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ2NfdG9fbXBjNTJ4eF9ncHQoc3RydWN0IGdwaW9fY2hpcCAqZ2MpCiB7Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZih0b19vZl9ncGlvX2NoaXAoZ2MpLCBzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdixvZl9nYyk7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihnYywgc3RydWN0IG1wYzUyeHhfZ3B0X3ByaXYsIGdjKTsKIH0KIAogc3RhdGljIGludCBtcGM1Mnh4X2dwdF9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8pCkBAIC0zMzYsMjggKzMzNiwyNSBAQAogCWlmICghb2ZfZmluZF9wcm9wZXJ0eShub2RlLCAiZ3Bpby1jb250cm9sbGVyIiwgTlVMTCkpCiAJCXJldHVybjsKIAotCWdwdC0+b2ZfZ2MuZ2MubGFiZWwgPSBrc3RyZHVwKG5vZGUtPmZ1bGxfbmFtZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFncHQtPm9mX2djLmdjLmxhYmVsKSB7CisJZ3B0LT5nYy5sYWJlbCA9IGtzdHJkdXAobm9kZS0+ZnVsbF9uYW1lLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWdwdC0+Z2MubGFiZWwpIHsKIAkJZGV2X2VycihncHQtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXR1cm47CiAJfQogCi0JZ3B0LT5vZl9nYy5ncGlvX2NlbGxzID0gMjsKLQlncHQtPm9mX2djLmdjLm5ncGlvID0gMTsKLQlncHQtPm9mX2djLmdjLmRpcmVjdGlvbl9pbnB1dCAgPSBtcGM1Mnh4X2dwdF9ncGlvX2Rpcl9pbjsKLQlncHQtPm9mX2djLmdjLmRpcmVjdGlvbl9vdXRwdXQgPSBtcGM1Mnh4X2dwdF9ncGlvX2Rpcl9vdXQ7Ci0JZ3B0LT5vZl9nYy5nYy5nZXQgPSBtcGM1Mnh4X2dwdF9ncGlvX2dldDsKLQlncHQtPm9mX2djLmdjLnNldCA9IG1wYzUyeHhfZ3B0X2dwaW9fc2V0OwotCWdwdC0+b2ZfZ2MuZ2MuYmFzZSA9IC0xOwotCWdwdC0+b2ZfZ2MueGxhdGUgPSBvZl9ncGlvX3NpbXBsZV94bGF0ZTsKLQlub2RlLT5kYXRhID0gJmdwdC0+b2ZfZ2M7Ci0Jb2Zfbm9kZV9nZXQobm9kZSk7CisJZ3B0LT5nYy5uZ3BpbyA9IDE7CisJZ3B0LT5nYy5kaXJlY3Rpb25faW5wdXQgID0gbXBjNTJ4eF9ncHRfZ3Bpb19kaXJfaW47CisJZ3B0LT5nYy5kaXJlY3Rpb25fb3V0cHV0ID0gbXBjNTJ4eF9ncHRfZ3Bpb19kaXJfb3V0OworCWdwdC0+Z2MuZ2V0ID0gbXBjNTJ4eF9ncHRfZ3Bpb19nZXQ7CisJZ3B0LT5nYy5zZXQgPSBtcGM1Mnh4X2dwdF9ncGlvX3NldDsKKwlncHQtPmdjLmJhc2UgPSAtMTsKKwlncHQtPmdjLm9mX25vZGUgPSBub2RlOwogCiAJLyogU2V0dXAgZXh0ZXJuYWwgcGluIGluIEdQSU8gbW9kZSAqLwogCWNscnNldGJpdHNfYmUzMigmZ3B0LT5yZWdzLT5tb2RlLCBNUEM1Mnh4X0dQVF9NT0RFX01TX01BU0ssCiAJCQlNUEM1Mnh4X0dQVF9NT0RFX01TX0dQSU8pOwogCi0JcmMgPSBncGlvY2hpcF9hZGQoJmdwdC0+b2ZfZ2MuZ2MpOworCXJjID0gZ3Bpb2NoaXBfYWRkKCZncHQtPmdjKTsKIAlpZiAocmMpCiAJCWRldl9lcnIoZ3B0LT5kZXYsICJncGlvY2hpcF9hZGQoKSBmYWlsZWQ7IHJjPSVpXG4iLCByYyk7CiAKQEAgLTcyMyw3ICs3MjAsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBvZl9wbGF0Zm9ybSBidXMgYmluZGluZyBjb2RlCiAgKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IG1wYzUyeHhfZ3B0X3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAorc3RhdGljIGludCBfX2RldmluaXQgbXBjNTJ4eF9ncHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYsCiAJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewogCXN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQ7CkBAIC03NjksNyArNzY2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtcGM1Mnh4X2dwdF9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCitzdGF0aWMgaW50IG1wYzUyeHhfZ3B0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldikKIHsKIAlyZXR1cm4gLUVCVVNZOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfbHBiZmlmby5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfbHBiZmlmby5jCmluZGV4IGU4NmFlYzYuLmY0YWMyMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2xwYmZpZm8uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9scGJmaWZvLmMKQEAgLTQzNiw4ICs0MzYsOCBAQAogfQogRVhQT1JUX1NZTUJPTChtcGM1Mnh4X2xwYmZpZm9fYWJvcnQpOwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdAotbXBjNTJ4eF9scGJmaWZvX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9wLCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1wYzUyeHhfbHBiZmlmb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCwKKwkJCQkJICAgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7CiAJc3RydWN0IHJlc291cmNlIHJlczsKIAlpbnQgcmMgPSAtRU5PTUVNOwpAQCAtNTA3LDcgKzUwNyw3IEBACiB9CiAKIAotc3RhdGljIGludCBfX2RldmV4aXQgbXBjNTJ4eF9scGJmaWZvX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1wYzUyeHhfbHBiZmlmb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3ApCiB7CiAJaWYgKGxwYmZpZm8uZGV2ICE9ICZvcC0+ZGV2KQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X3BtLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9wbS5jCmluZGV4IDc2NzIyNTMuLjU2OGNlZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X3BtLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfcG0uYwpAQCAtMTcxLDkgKzE3MSw2IEBACiAJLyogcmVzdG9yZSBTUkFNICovCiAJbWVtY3B5KHNyYW0sIHNhdmVkX3NyYW0sIHNyYW1fc2l6ZSk7CiAKLQkvKiByZXN0YXJ0IGppZmZpZXMgKi8KLQl3YWtldXBfZGVjcmVtZW50ZXIoKTsKLQogCS8qIHJlZW5hYmxlIGludGVycnVwdHMgaW4gUElDICovCiAJb3V0X2JlMzIoJmludHItPm1haW5fbWFzaywgaW50cl9tYWluX21hc2spOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYwppbmRleCA5ZjJlNTJiLi4xNTY1ZTA0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9lcDgyNDhlLmMKQEAgLTExMSw3ICsxMTEsNyBAQAogCS5vcHMgPSAmZXA4MjQ4ZV9tZGlvX29wcywKIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGVwODI0OGVfbWRpb19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKK3N0YXRpYyBpbnQgX19kZXZpbml0IGVwODI0OGVfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKIAlzdHJ1Y3QgbWlpX2J1cyAqYnVzOwpAQCAtMTU0LDcgKzE1NCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBlcDgyNDhlX21kaW9fcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KQorc3RhdGljIGludCBlcDgyNDhlX21kaW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KQogewogCUJVRygpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvS2NvbmZpZwppbmRleCBmNDlhMjU0Li4wMjE3NjNhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvS2NvbmZpZwpAQCAtOSw2ICs5LDE0IEBACiAKIGlmIFBQQ184M3h4CiAKK2NvbmZpZyBNUEM4MzB4X1JEQgorCWJvb2wgIkZyZWVzY2FsZSBNUEM4MzB4IFJEQiIKKwlzZWxlY3QgREVGQVVMVF9VSU1BR0UKKwlzZWxlY3QgUFBDX01QQzgzMXgKKwlzZWxlY3QgRlNMX0dUTQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1QQzgzMDggUkRCIGJvYXJkLgorCiBjb25maWcgTVBDODMxeF9SREIKIAlib29sICJGcmVlc2NhbGUgTVBDODMxeCBSREIiCiAJc2VsZWN0IERFRkFVTFRfVUlNQUdFCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvTWFrZWZpbGUKaW5kZXggZTEzOWMzNi4uNmU4YmJiYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9NYWtlZmlsZQpAQCAtNCw2ICs0LDcgQEAKIG9iai15CQkJCTo9IG1pc2MubyB1c2Iubwogb2JqLSQoQ09ORklHX1NVU1BFTkQpCQkrPSBzdXNwZW5kLm8gc3VzcGVuZC1hc20ubwogb2JqLSQoQ09ORklHX01DVV9NUEM4MzQ5RU1JVFgpCSs9IG1jdV9tcGM4MzQ5ZW1pdHgubworb2JqLSQoQ09ORklHX01QQzgzMHhfUkRCKQkrPSBtcGM4MzB4X3JkYi5vCiBvYmotJChDT05GSUdfTVBDODMxeF9SREIpCSs9IG1wYzgzMXhfcmRiLm8KIG9iai0kKENPTkZJR19NUEM4MzJ4X1JEQikJKz0gbXBjODMyeF9yZGIubwogb2JqLSQoQ09ORklHX01QQzgzNHhfTURTKQkrPSBtcGM4MzR4X21kcy5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbWN1X21wYzgzNDllbWl0eC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21jdV9tcGM4MzQ5ZW1pdHguYwppbmRleCBkMTE5YTdjLi43MDc5OGFjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbWN1X21wYzgzNDllbWl0eC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tY3VfbXBjODM0OWVtaXR4LmMKQEAgLTM1LDkgKzM1LDggQEAKIAogc3RydWN0IG1jdSB7CiAJc3RydWN0IG11dGV4IGxvY2s7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBvZl9ncGlvX2NoaXAgb2ZfZ2M7CisJc3RydWN0IGdwaW9fY2hpcCBnYzsKIAl1OCByZWdfY3RybDsKIH07CiAKQEAgLTU2LDggKzU1LDcgQEAKIAogc3RhdGljIHZvaWQgbWN1X2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbywgaW50IHZhbCkKIHsKLQlzdHJ1Y3Qgb2ZfZ3Bpb19jaGlwICpvZl9nYyA9IHRvX29mX2dwaW9fY2hpcChnYyk7Ci0Jc3RydWN0IG1jdSAqbWN1ID0gY29udGFpbmVyX29mKG9mX2djLCBzdHJ1Y3QgbWN1LCBvZl9nYyk7CisJc3RydWN0IG1jdSAqbWN1ID0gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgbWN1LCBnYyk7CiAJdTggYml0ID0gMSA8PCAoNCArIGdwaW8pOwogCiAJbXV0ZXhfbG9jaygmbWN1LT5sb2NrKTsKQEAgLTc5LDkgKzc3LDcgQEAKIHN0YXRpYyBpbnQgbWN1X2dwaW9jaGlwX2FkZChzdHJ1Y3QgbWN1ICptY3UpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKLQlzdHJ1Y3Qgb2ZfZ3Bpb19jaGlwICpvZl9nYyA9ICZtY3UtPm9mX2djOwotCXN0cnVjdCBncGlvX2NoaXAgKmdjID0gJm9mX2djLT5nYzsKLQlpbnQgcmV0OworCXN0cnVjdCBncGlvX2NoaXAgKmdjID0gJm1jdS0+Z2M7CiAKIAlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wsbWN1LW1wYzgzNDllbWl0eCIpOwogCWlmICghbnApCkBAIC05NCwzMiArOTAsMTQgQEAKIAlnYy0+YmFzZSA9IC0xOwogCWdjLT5zZXQgPSBtY3VfZ3Bpb19zZXQ7CiAJZ2MtPmRpcmVjdGlvbl9vdXRwdXQgPSBtY3VfZ3Bpb19kaXJfb3V0OwotCW9mX2djLT5ncGlvX2NlbGxzID0gMjsKLQlvZl9nYy0+eGxhdGUgPSBvZl9ncGlvX3NpbXBsZV94bGF0ZTsKKwlnYy0+b2Zfbm9kZSA9IG5wOwogCi0JbnAtPmRhdGEgPSBvZl9nYzsKLQltY3UtPm5wID0gbnA7Ci0KLQkvKgotCSAqIFdlIGRvbid0IHdhbnQgdG8gbG9zZSB0aGUgbm9kZSwgaXRzIC0+ZGF0YSBhbmQgLT5mdWxsX25hbWUuLi4KLQkgKiBTbywgaWYgc3VjY2VlZGVkLCB3ZSBkb24ndCBwdXQgdGhlIG5vZGUgaGVyZS4KLQkgKi8KLQlyZXQgPSBncGlvY2hpcF9hZGQoZ2MpOwotCWlmIChyZXQpCi0JCW9mX25vZGVfcHV0KG5wKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiBncGlvY2hpcF9hZGQoZ2MpOwogfQogCiBzdGF0aWMgaW50IG1jdV9ncGlvY2hpcF9yZW1vdmUoc3RydWN0IG1jdSAqbWN1KQogewotCWludCByZXQ7Ci0KLQlyZXQgPSBncGlvY2hpcF9yZW1vdmUoJm1jdS0+b2ZfZ2MuZ2MpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0Jb2Zfbm9kZV9wdXQobWN1LT5ucCk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ3Bpb2NoaXBfcmVtb3ZlKCZtY3UtPmdjKTsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgbWN1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCkBAIC0xODIsMTAgKzE2MCwxNiBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBtY3VfaWRzKTsKIAorc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgbWN1X29mX21hdGNoX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImZzbCxtY3UtbXBjODM0OWVtaXR4IiwgfSwKKwl7IH0sCit9OworCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbWN1X2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZSA9ICJtY3UtbXBjODM0OWVtaXR4IiwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9IG1jdV9vZl9tYXRjaF90YWJsZSwKIAl9LAogCS5wcm9iZSA9IG1jdV9wcm9iZSwKIAkucmVtb3ZlCT0gX19kZXZleGl0X3AobWN1X3JlbW92ZSksCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMweF9yZGIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzB4X3JkYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMTAyZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMweF9yZGIuYwpAQCAtMCwwICsxLDk0IEBACisvKgorICogYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMHhfcmRiLmMKKyAqCisgKiBEZXNjcmlwdGlvbjogTVBDODMweCBSREIgYm9hcmQgc3BlY2lmaWMgcm91dGluZXMuCisgKiBUaGlzIGZpbGUgaXMgYmFzZWQgb24gbXBjODMxeF9yZGIuYworICoKKyAqIENvcHlyaWdodCAoQykgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gMjAwOS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC4gSWx5YSBZYW5vaywgRW1jcmFmdCBTeXN0ZW1zLCB5YW5va0BlbWNyYWZ0LmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vaXBpYy5oPgorI2luY2x1ZGUgPGFzbS91ZGJnLmg+CisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9wY2kuaD4KKyNpbmNsdWRlIDxzeXNkZXYvZnNsX3NvYy5oPgorI2luY2x1ZGUgIm1wYzgzeHguaCIKKworLyoKKyAqIFNldHVwIHRoZSBhcmNoaXRlY3R1cmUKKyAqLworc3RhdGljIHZvaWQgX19pbml0IG1wYzgzMHhfcmRiX3NldHVwX2FyY2godm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfUENJCisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKyNlbmRpZgorCisJaWYgKHBwY19tZC5wcm9ncmVzcykKKwkJcHBjX21kLnByb2dyZXNzKCJtcGM4MzB4X3JkYl9zZXR1cF9hcmNoKCkiLCAwKTsKKworI2lmZGVmIENPTkZJR19QQ0kKKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAiZnNsLG1wYzgzMDgtcGNpZSIpCisJCW1wYzgzeHhfYWRkX2JyaWRnZShucCk7CisjZW5kaWYKKwltcGM4MzF4X3VzYl9jZmcoKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG1wYzgzMHhfcmRiX2luaXRfSVJRKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKworCW5wID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgImlwaWMiKTsKKwlpZiAoIW5wKQorCQlyZXR1cm47CisKKwlpcGljX2luaXQobnAsIDApOworCisJLyogSW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCBpbnRlcnJ1cHQgbWFwcGluZyBwcmlvcml0aWVzLAorCSAqIGluIGNhc2UgdGhlIGJvb3Qgcm9tIGNoYW5nZWQgc29tZXRoaW5nIG9uIHVzLgorCSAqLworCWlwaWNfc2V0X2RlZmF1bHRfcHJpb3JpdHkoKTsKK30KKworLyoKKyAqIENhbGxlZCB2ZXJ5IGVhcmx5LCBNTVUgaXMgb2ZmLCBkZXZpY2UtdHJlZSBpc24ndCB1bmZsYXR0ZW5lZAorICovCitzdGF0aWMgaW50IF9faW5pdCBtcGM4MzB4X3JkYl9wcm9iZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcm9vdCA9IG9mX2dldF9mbGF0X2R0X3Jvb3QoKTsKKworCXJldHVybiBvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgIk1QQzgzMDhSREIiKSB8fAorCSAgICAgICBvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgImZzbCxtcGM4MzA4cmRiIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9faW5pdGRhdGEgb2ZfYnVzX2lkc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiIH0sCisJe30sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXModm9pZCkKK3sKKwlvZl9wbGF0Zm9ybV9idXNfcHJvYmUoTlVMTCwgb2ZfYnVzX2lkcywgTlVMTCk7CisJcmV0dXJuIDA7Cit9CittYWNoaW5lX2RldmljZV9pbml0Y2FsbChtcGM4MzB4X3JkYiwgZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKTsKKworZGVmaW5lX21hY2hpbmUobXBjODMweF9yZGIpIHsKKwkubmFtZQkJCT0gIk1QQzgzMHggUkRCIiwKKwkucHJvYmUJCQk9IG1wYzgzMHhfcmRiX3Byb2JlLAorCS5zZXR1cF9hcmNoCQk9IG1wYzgzMHhfcmRiX3NldHVwX2FyY2gsCisJLmluaXRfSVJRCQk9IG1wYzgzMHhfcmRiX2luaXRfSVJRLAorCS5nZXRfaXJxCQk9IGlwaWNfZ2V0X2lycSwKKwkucmVzdGFydAkJPSBtcGM4M3h4X3Jlc3RhcnQsCisJLnRpbWVfaW5pdAkJPSBtcGM4M3h4X3RpbWVfaW5pdCwKKwkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKKwkucHJvZ3Jlc3MJCT0gdWRiZ19wcm9ncmVzcywKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc3VzcGVuZC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3N1c3BlbmQuYwppbmRleCBlYmU2YzM1Li43NWFlNzdmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc3VzcGVuZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zdXNwZW5kLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAlpbnQgaGFzX2RlZXBfc2xlZXA7CiB9OwogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZSAqcG1jX2RldjsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbWNfZGV2Owogc3RhdGljIGludCBoYXNfZGVlcF9zbGVlcCwgZGVlcF9zbGVlcGluZzsKIHN0YXRpYyBpbnQgcG1jX2lycTsKIHN0YXRpYyBzdHJ1Y3QgbXBjODN4eF9wbWMgX19pb21lbSAqcG1jX3JlZ3M7CkBAIC0zMTgsNyArMzE4LDcgQEAKIAkuZW5kID0gbXBjODN4eF9zdXNwZW5kX2VuZCwKIH07CiAKLXN0YXRpYyBpbnQgcG1jX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAorc3RhdGljIGludCBwbWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZkZXYtPmRldi5vZl9ub2RlOwpAQCAtMzk2LDcgKzM5Niw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBwbWNfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KQorc3RhdGljIGludCBwbWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KQogewogCXJldHVybiAtRVBFUk07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZwppbmRleCAzYTJhZGUyLi5iZWExZjU5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZwpAQCAtNjUsNiArNjUsMTQgQEAKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNUEM4NXh4IFJEQiAoUDIwMjAgUkRCKSBib2FyZAogCitjb25maWcgUDEwMjJfRFMKKwlib29sICJGcmVlc2NhbGUgUDEwMjIgRFMiCisJc2VsZWN0IERFRkFVTFRfVUlNQUdFCisJc2VsZWN0IENPTkZJR19QSFlTXzY0QklUCSMgVGhlIERUUyBoYXMgMzYtYml0IGFkZHJlc3NlcworCXNlbGVjdCBTV0lPVExCCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgRnJlZXNjYWxlIFAxMDIyRFMgcmVmZXJlbmNlIGJvYXJkLgorCiBjb25maWcgU09DUkFURVMKIAlib29sICJTb2NyYXRlcyIKIAlzZWxlY3QgREVGQVVMVF9VSU1BR0UKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9NYWtlZmlsZQppbmRleCAzODdjMTI4Li5hMmVjM2Y4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L01ha2VmaWxlCkBAIC0xMCw2ICsxMCw3IEBACiBvYmotJChDT05GSUdfTVBDODV4eF9EUykgICs9IG1wYzg1eHhfZHMubwogb2JqLSQoQ09ORklHX01QQzg1eHhfTURTKSArPSBtcGM4NXh4X21kcy5vCiBvYmotJChDT05GSUdfTVBDODV4eF9SREIpICs9IG1wYzg1eHhfcmRiLm8KK29iai0kKENPTkZJR19QMTAyMl9EUykgICAgKz0gcDEwMjJfZHMubwogb2JqLSQoQ09ORklHX1A0MDgwX0RTKSAgICArPSBwNDA4MF9kcy5vIGNvcmVuZXRfZHMubwogb2JqLSQoQ09ORklHX1NUWF9HUDMpCSAgKz0gc3R4X2dwMy5vCiBvYmotJChDT05GSUdfVFFNODV4eCkJICArPSB0cW04NXh4Lm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9jb3JlbmV0X2RzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvY29yZW5ldF9kcy5jCmluZGV4IDUzNGMyZWMuLjJhYjMzOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9jb3JlbmV0X2RzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L2NvcmVuZXRfZHMuYwpAQCAtMTYsNyArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbG1iLmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgpAQCAtMTAwLDcgKzEwMCw3IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TV0lPVExCCi0JaWYgKGxtYl9lbmRfb2ZfRFJBTSgpID4gbWF4KSB7CisJaWYgKG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgPiBtYXgpIHsKIAkJcHBjX3N3aW90bGJfZW5hYmxlID0gMTsKIAkJc2V0X3BjaV9kbWFfb3BzKCZzd2lvdGxiX2RtYV9vcHMpOwogCQlwcGNfbWQucGNpX2RtYV9kZXZfc2V0dXAgPSBwY2lfZG1hX2Rldl9zZXR1cF9zd2lvdGxiOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1MzZfZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTM2X2RzLmMKaW5kZXggMDA0YjdkMy4uZjc5ZjJmMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1MzZfZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODUzNl9kcy5jCkBAIC0xNyw3ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgorI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KQEAgLTk0LDcgKzk0LDcgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NXSU9UTEIKLQlpZiAobG1iX2VuZF9vZl9EUkFNKCkgPiBtYXgpIHsKKwlpZiAobWVtYmxvY2tfZW5kX29mX0RSQU0oKSA+IG1heCkgewogCQlwcGNfc3dpb3RsYl9lbmFibGUgPSAxOwogCQlzZXRfcGNpX2RtYV9vcHMoJnN3aW90bGJfZG1hX29wcyk7CiAJCXBwY19tZC5wY2lfZG1hX2Rldl9zZXR1cCA9IHBjaV9kbWFfZGV2X3NldHVwX3N3aW90bGI7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9kcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfZHMuYwppbmRleCA1NDQwMTFhLi44MTkwYmMyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9kcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2RzLmMKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1iLmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgpAQCAtMTkwLDcgKzE5MCw3IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TV0lPVExCCi0JaWYgKGxtYl9lbmRfb2ZfRFJBTSgpID4gbWF4KSB7CisJaWYgKG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgPiBtYXgpIHsKIAkJcHBjX3N3aW90bGJfZW5hYmxlID0gMTsKIAkJc2V0X3BjaV9kbWFfb3BzKCZzd2lvdGxiX2RtYV9vcHMpOwogCQlwcGNfbWQucGNpX2RtYV9kZXZfc2V0dXAgPSBwY2lfZG1hX2Rldl9zZXR1cF9zd2lvdGxiOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfbWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYwppbmRleCA4ZmU4N2ZjLi5kYTY0YmUxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYwpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGh5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbG1iLmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CkBAIC0xNTgsNTEgKzE1OCwxMDggQEAKIGV4dGVybiB2b2lkIF9faW5pdCBtcGM4NXh4X3NtcF9pbml0KHZvaWQpOwogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBtcGM4NXh4X21kc19zZXR1cF9hcmNoKHZvaWQpCisjaWZkZWYgQ09ORklHX1FVSUNDX0VOR0lORQorc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjODV4eF9xZV9pZHNbXSBfX2luaXRkYXRhID0geworCXsgLnR5cGUgPSAicWUiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZnNsLHFlIiwgfSwKKwl7IH0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgbXBjODV4eF9wdWJsaXNoX3FlX2RldmljZXModm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCXN0YXRpYyB1OCBfX2lvbWVtICpiY3NyX3JlZ3MgPSBOVUxMOwotI2lmZGVmIENPTkZJR19QQ0kKLQlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2U7Ci0jZW5kaWYKLQlkbWFfYWRkcl90IG1heCA9IDB4ZmZmZmZmZmY7CiAKLQlpZiAocHBjX21kLnByb2dyZXNzKQotCQlwcGNfbWQucHJvZ3Jlc3MoIm1wYzg1eHhfbWRzX3NldHVwX2FyY2goKSIsIDApOworCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImZzbCxxZSIpOworCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShucCkpIHsKKwkJb2Zfbm9kZV9wdXQobnApOworCQlyZXR1cm47CisJfQorCisJb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIG1wYzg1eHhfcWVfaWRzLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG1wYzg1eHhfbWRzX3Jlc2V0X3VjY19waHlzKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlzdGF0aWMgdTggX19pb21lbSAqYmNzcl9yZWdzOwogCiAJLyogTWFwIEJDU1IgYXJlYSAqLwogCW5wID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgImJjc3IiKTsKLQlpZiAobnAgIT0gTlVMTCkgewotCQlzdHJ1Y3QgcmVzb3VyY2UgcmVzOworCWlmICghbnApCisJCXJldHVybjsKIAotCQlvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmcmVzKTsKLQkJYmNzcl9yZWdzID0gaW9yZW1hcChyZXMuc3RhcnQsIHJlcy5lbmQgLSByZXMuc3RhcnQgKzEpOwotCQlvZl9ub2RlX3B1dChucCk7Ci0JfQorCWJjc3JfcmVncyA9IG9mX2lvbWFwKG5wLCAwKTsKKwlvZl9ub2RlX3B1dChucCk7CisJaWYgKCFiY3NyX3JlZ3MpCisJCXJldHVybjsKIAotI2lmZGVmIENPTkZJR19QQ0kKLQlmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsICJwY2kiKSB7Ci0JCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImZzbCxtcGM4NTQwLXBjaSIpIHx8Ci0JCSAgICBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImZzbCxtcGM4NTQ4LXBjaWUiKSkgewotCQkJc3RydWN0IHJlc291cmNlIHJzcmM7Ci0JCQlvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmcnNyYyk7Ci0JCQlpZiAoKHJzcmMuc3RhcnQgJiAweGZmZmZmKSA9PSAweDgwMDApCi0JCQkJZnNsX2FkZF9icmlkZ2UobnAsIDEpOwotCQkJZWxzZQotCQkJCWZzbF9hZGRfYnJpZGdlKG5wLCAwKTsKKwlpZiAobWFjaGluZV9pcyhtcGM4NTY4X21kcykpIHsKKyNkZWZpbmUgQkNTUl9VQ0MxX0dFVEhfRU4JKDB4MSA8PCA3KQorI2RlZmluZSBCQ1NSX1VDQzJfR0VUSF9FTgkoMHgxIDw8IDcpCisjZGVmaW5lIEJDU1JfVUNDMV9NT0RFX01TSwkoMHgzIDw8IDQpCisjZGVmaW5lIEJDU1JfVUNDMl9NT0RFX01TSwkoMHgzIDw8IDApCiAKLQkJCWhvc2UgPSBwY2lfZmluZF9ob3NlX2Zvcl9PRl9kZXZpY2UobnApOwotCQkJbWF4ID0gbWluKG1heCwgaG9zZS0+ZG1hX3dpbmRvd19iYXNlX2N1ciArCi0JCQkJCWhvc2UtPmRtYV93aW5kb3dfc2l6ZSk7CisJCS8qIFR1cm4gb2ZmIFVDQzEgJiBVQ0MyICovCisJCWNscmJpdHM4KCZiY3NyX3JlZ3NbOF0sIEJDU1JfVUNDMV9HRVRIX0VOKTsKKwkJY2xyYml0czgoJmJjc3JfcmVnc1s5XSwgQkNTUl9VQ0MyX0dFVEhfRU4pOworCisJCS8qIE1vZGUgaXMgUkdNSUksIGFsbCBiaXRzIGNsZWFyICovCisJCWNscmJpdHM4KCZiY3NyX3JlZ3NbMTFdLCBCQ1NSX1VDQzFfTU9ERV9NU0sgfAorCQkJCQkgQkNTUl9VQ0MyX01PREVfTVNLKTsKKworCQkvKiBUdXJuIFVDQzEgJiBVQ0MyIG9uICovCisJCXNldGJpdHM4KCZiY3NyX3JlZ3NbOF0sIEJDU1JfVUNDMV9HRVRIX0VOKTsKKwkJc2V0Yml0czgoJmJjc3JfcmVnc1s5XSwgQkNTUl9VQ0MyX0dFVEhfRU4pOworCX0gZWxzZSBpZiAobWFjaGluZV9pcyhtcGM4NTY5X21kcykpIHsKKyNkZWZpbmUgQkNTUjdfVUNDMTJfR0VUSG5SU1QJKDB4MSA8PCAyKQorI2RlZmluZSBCQ1NSOF9VRU1fTUFSVkVMTF9SU1QJKDB4MSA8PCAxKQorI2RlZmluZSBCQ1NSX1VDQ19SR01JSQkJKDB4MSA8PCA2KQorI2RlZmluZSBCQ1NSX1VDQ19SVEJJCQkoMHgxIDw8IDUpCisJCS8qCisJCSAqIFUtQm9vdCBtYW5nbGVzIGludGVycnVwdCBwb2xhcml0eSBmb3IgTWFydmVsbCBQSFlzLAorCQkgKiBzbyByZXNldCBidWlsdC1pbiBhbmQgVUVNIE1hcnZlbGwgUEhZcywgdGhpcyBwdXRzCisJCSAqIHRoZSBQSFlzIGludG8gdGhlaXIgbm9ybWFsIHN0YXRlLgorCQkgKi8KKwkJY2xyYml0czgoJmJjc3JfcmVnc1s3XSwgQkNTUjdfVUNDMTJfR0VUSG5SU1QpOworCQlzZXRiaXRzOCgmYmNzcl9yZWdzWzhdLCBCQ1NSOF9VRU1fTUFSVkVMTF9SU1QpOworCisJCXNldGJpdHM4KCZiY3NyX3JlZ3NbN10sIEJDU1I3X1VDQzEyX0dFVEhuUlNUKTsKKwkJY2xyYml0czgoJmJjc3JfcmVnc1s4XSwgQkNTUjhfVUVNX01BUlZFTExfUlNUKTsKKworCQlmb3IgKG5wID0gTlVMTDsgKG5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUobnAsCisJCQkJCQkibmV0d29yayIsCisJCQkJCQkidWNjX2dldGgiKSkgIT0gTlVMTDspIHsKKwkJCWNvbnN0IHVuc2lnbmVkIGludCAqcHJvcDsKKwkJCWludCB1Y2NfbnVtOworCisJCQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiY2VsbC1pbmRleCIsIE5VTEwpOworCQkJaWYgKHByb3AgPT0gTlVMTCkKKwkJCQljb250aW51ZTsKKworCQkJdWNjX251bSA9ICpwcm9wIC0gMTsKKworCQkJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInBoeS1jb25uZWN0aW9uLXR5cGUiLCBOVUxMKTsKKwkJCWlmIChwcm9wID09IE5VTEwpCisJCQkJY29udGludWU7CisKKwkJCWlmIChzdHJjbXAoInJ0YmkiLCAoY29uc3QgY2hhciAqKXByb3ApID09IDApCisJCQkJY2xyc2V0Yml0c184KCZiY3NyX3JlZ3NbNyArIHVjY19udW1dLAorCQkJCQlCQ1NSX1VDQ19SR01JSSwgQkNTUl9VQ0NfUlRCSSk7CiAJCX0KKwl9IGVsc2UgaWYgKG1hY2hpbmVfaXMocDEwMjFfbWRzKSkgeworI2RlZmluZSBCQ1NSMTFfRU5FVF9NSUNSU1QgICAgICgweDEgPDwgNSkKKwkJLyogUmVzZXQgTWljcmVsIFBIWSAqLworCQljbHJiaXRzOCgmYmNzcl9yZWdzWzExXSwgQkNTUjExX0VORVRfTUlDUlNUKTsKKwkJc2V0Yml0czgoJmJjc3JfcmVnc1sxMV0sIEJDU1IxMV9FTkVUX01JQ1JTVCk7CiAJfQotI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfU01QCi0JbXBjODV4eF9zbXBfaW5pdCgpOwotI2VuZGlmCisJaW91bm1hcChiY3NyX3JlZ3MpOworfQogCi0jaWZkZWYgQ09ORklHX1FVSUNDX0VOR0lORQorc3RhdGljIHZvaWQgX19pbml0IG1wYzg1eHhfbWRzX3FlX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCiAJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZnNsLHFlIik7CiAJaWYgKCFucCkgewogCQlucCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJxZSIpOwpAQCAtMjEwLDYgKzI2NywxMSBAQAogCQkJcmV0dXJuOwogCX0KIAorCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShucCkpIHsKKwkJb2Zfbm9kZV9wdXQobnApOworCQlyZXR1cm47CisJfQorCiAJcWVfcmVzZXQoKTsKIAlvZl9ub2RlX3B1dChucCk7CiAKQEAgLTIyNCw3MCArMjg2LDcgQEAKIAkJCXBhcl9pb19vZl9jb25maWcodWNjKTsKIAl9CiAKLQlpZiAoYmNzcl9yZWdzKSB7Ci0JCWlmIChtYWNoaW5lX2lzKG1wYzg1NjhfbWRzKSkgewotI2RlZmluZSBCQ1NSX1VDQzFfR0VUSF9FTgkoMHgxIDw8IDcpCi0jZGVmaW5lIEJDU1JfVUNDMl9HRVRIX0VOCSgweDEgPDwgNykKLSNkZWZpbmUgQkNTUl9VQ0MxX01PREVfTVNLCSgweDMgPDwgNCkKLSNkZWZpbmUgQkNTUl9VQ0MyX01PREVfTVNLCSgweDMgPDwgMCkKLQotCQkJLyogVHVybiBvZmYgVUNDMSAmIFVDQzIgKi8KLQkJCWNscmJpdHM4KCZiY3NyX3JlZ3NbOF0sIEJDU1JfVUNDMV9HRVRIX0VOKTsKLQkJCWNscmJpdHM4KCZiY3NyX3JlZ3NbOV0sIEJDU1JfVUNDMl9HRVRIX0VOKTsKLQotCQkJLyogTW9kZSBpcyBSR01JSSwgYWxsIGJpdHMgY2xlYXIgKi8KLQkJCWNscmJpdHM4KCZiY3NyX3JlZ3NbMTFdLCBCQ1NSX1VDQzFfTU9ERV9NU0sgfAotCQkJCQkJIEJDU1JfVUNDMl9NT0RFX01TSyk7Ci0KLQkJCS8qIFR1cm4gVUNDMSAmIFVDQzIgb24gKi8KLQkJCXNldGJpdHM4KCZiY3NyX3JlZ3NbOF0sIEJDU1JfVUNDMV9HRVRIX0VOKTsKLQkJCXNldGJpdHM4KCZiY3NyX3JlZ3NbOV0sIEJDU1JfVUNDMl9HRVRIX0VOKTsKLQkJfSBlbHNlIGlmIChtYWNoaW5lX2lzKG1wYzg1NjlfbWRzKSkgewotI2RlZmluZSBCQ1NSN19VQ0MxMl9HRVRIblJTVAkoMHgxIDw8IDIpCi0jZGVmaW5lIEJDU1I4X1VFTV9NQVJWRUxMX1JTVAkoMHgxIDw8IDEpCi0jZGVmaW5lIEJDU1JfVUNDX1JHTUlJCQkoMHgxIDw8IDYpCi0jZGVmaW5lIEJDU1JfVUNDX1JUQkkJCSgweDEgPDwgNSkKLQkJCS8qCi0JCQkgKiBVLUJvb3QgbWFuZ2xlcyBpbnRlcnJ1cHQgcG9sYXJpdHkgZm9yIE1hcnZlbGwgUEhZcywKLQkJCSAqIHNvIHJlc2V0IGJ1aWx0LWluIGFuZCBVRU0gTWFydmVsbCBQSFlzLCB0aGlzIHB1dHMKLQkJCSAqIHRoZSBQSFlzIGludG8gdGhlaXIgbm9ybWFsIHN0YXRlLgotCQkJICovCi0JCQljbHJiaXRzOCgmYmNzcl9yZWdzWzddLCBCQ1NSN19VQ0MxMl9HRVRIblJTVCk7Ci0JCQlzZXRiaXRzOCgmYmNzcl9yZWdzWzhdLCBCQ1NSOF9VRU1fTUFSVkVMTF9SU1QpOwotCi0JCQlzZXRiaXRzOCgmYmNzcl9yZWdzWzddLCBCQ1NSN19VQ0MxMl9HRVRIblJTVCk7Ci0JCQljbHJiaXRzOCgmYmNzcl9yZWdzWzhdLCBCQ1NSOF9VRU1fTUFSVkVMTF9SU1QpOwotCi0JCQlmb3IgKG5wID0gTlVMTDsgKG5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUobnAsCi0JCQkJCQkJIm5ldHdvcmsiLAotCQkJCQkJCSJ1Y2NfZ2V0aCIpKSAhPSBOVUxMOykgewotCQkJCWNvbnN0IHVuc2lnbmVkIGludCAqcHJvcDsKLQkJCQlpbnQgdWNjX251bTsKLQotCQkJCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJjZWxsLWluZGV4IiwgTlVMTCk7Ci0JCQkJaWYgKHByb3AgPT0gTlVMTCkKLQkJCQkJY29udGludWU7Ci0KLQkJCQl1Y2NfbnVtID0gKnByb3AgLSAxOwotCi0JCQkJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInBoeS1jb25uZWN0aW9uLXR5cGUiLCBOVUxMKTsKLQkJCQlpZiAocHJvcCA9PSBOVUxMKQotCQkJCQljb250aW51ZTsKLQotCQkJCWlmIChzdHJjbXAoInJ0YmkiLCAoY29uc3QgY2hhciAqKXByb3ApID09IDApCi0JCQkJCWNscnNldGJpdHNfOCgmYmNzcl9yZWdzWzcgKyB1Y2NfbnVtXSwKLQkJCQkJCUJDU1JfVUNDX1JHTUlJLCBCQ1NSX1VDQ19SVEJJKTsKLQkJCX0KLQotCQl9IGVsc2UgaWYgKG1hY2hpbmVfaXMocDEwMjFfbWRzKSkgewotI2RlZmluZSBCQ1NSMTFfRU5FVF9NSUNSU1QgICAgICgweDEgPDwgNSkKLQkJCS8qIFJlc2V0IE1pY3JlbCBQSFkgKi8KLQkJCWNscmJpdHM4KCZiY3NyX3JlZ3NbMTFdLCBCQ1NSMTFfRU5FVF9NSUNSU1QpOwotCQkJc2V0Yml0czgoJmJjc3JfcmVnc1sxMV0sIEJDU1IxMV9FTkVUX01JQ1JTVCk7Ci0JCX0KLQotCQlpb3VubWFwKGJjc3JfcmVncyk7Ci0JfQorCW1wYzg1eHhfbWRzX3Jlc2V0X3VjY19waHlzKCk7CiAKIAlpZiAobWFjaGluZV9pcyhwMTAyMV9tZHMpKSB7CiAjZGVmaW5lIE1QQzg1eHhfUE1VWENSX09GRlNFVCAgICAgICAgICAgMHg2MApAQCAtMzIyLDEwICszMjEsNzQgQEAKIAkJfQogCiAJfQorfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbXBjODV4eF9tZHNfcWVpY19pbml0KHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKworCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImZzbCxxZSIpOworCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShucCkpIHsKKwkJb2Zfbm9kZV9wdXQobnApOworCQlyZXR1cm47CisJfQorCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZnNsLHFlLWljIik7CisJaWYgKCFucCkgeworCQlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJxZWljIik7CisJCWlmICghbnApCisJCQlyZXR1cm47CisJfQorCisJaWYgKG1hY2hpbmVfaXMocDEwMjFfbWRzKSkKKwkJcWVfaWNfaW5pdChucCwgMCwgcWVfaWNfY2FzY2FkZV9sb3dfbXBpYywKKwkJCQlxZV9pY19jYXNjYWRlX2hpZ2hfbXBpYyk7CisJZWxzZQorCQlxZV9pY19pbml0KG5wLCAwLCBxZV9pY19jYXNjYWRlX211eGVkX21waWMsIE5VTEwpOworCW9mX25vZGVfcHV0KG5wKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBfX2luaXQgbXBjODV4eF9wdWJsaXNoX3FlX2RldmljZXModm9pZCkgeyB9CitzdGF0aWMgdm9pZCBfX2luaXQgbXBjODV4eF9tZHNfcWVfaW5pdCh2b2lkKSB7IH0KK3N0YXRpYyB2b2lkIF9faW5pdCBtcGM4NXh4X21kc19xZWljX2luaXQodm9pZCkgeyB9CiAjZW5kaWYJLyogQ09ORklHX1FVSUNDX0VOR0lORSAqLwogCitzdGF0aWMgdm9pZCBfX2luaXQgbXBjODV4eF9tZHNfc2V0dXBfYXJjaCh2b2lkKQoreworI2lmZGVmIENPTkZJR19QQ0kKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2U7CisjZW5kaWYKKwlkbWFfYWRkcl90IG1heCA9IDB4ZmZmZmZmZmY7CisKKwlpZiAocHBjX21kLnByb2dyZXNzKQorCQlwcGNfbWQucHJvZ3Jlc3MoIm1wYzg1eHhfbWRzX3NldHVwX2FyY2goKSIsIDApOworCisjaWZkZWYgQ09ORklHX1BDSQorCWZvcl9lYWNoX25vZGVfYnlfdHlwZShucCwgInBjaSIpIHsKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZnNsLG1wYzg1NDAtcGNpIikgfHwKKwkJICAgIG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZnNsLG1wYzg1NDgtcGNpZSIpKSB7CisJCQlzdHJ1Y3QgcmVzb3VyY2UgcnNyYzsKKwkJCW9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyc3JjKTsKKwkJCWlmICgocnNyYy5zdGFydCAmIDB4ZmZmZmYpID09IDB4ODAwMCkKKwkJCQlmc2xfYWRkX2JyaWRnZShucCwgMSk7CisJCQllbHNlCisJCQkJZnNsX2FkZF9icmlkZ2UobnAsIDApOworCisJCQlob3NlID0gcGNpX2ZpbmRfaG9zZV9mb3JfT0ZfZGV2aWNlKG5wKTsKKwkJCW1heCA9IG1pbihtYXgsIGhvc2UtPmRtYV93aW5kb3dfYmFzZV9jdXIgKworCQkJCQlob3NlLT5kbWFfd2luZG93X3NpemUpOworCQl9CisJfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU01QCisJbXBjODV4eF9zbXBfaW5pdCgpOworI2VuZGlmCisKKwltcGM4NXh4X21kc19xZV9pbml0KCk7CisKICNpZmRlZiBDT05GSUdfU1dJT1RMQgotCWlmIChsbWJfZW5kX29mX0RSQU0oKSA+IG1heCkgeworCWlmIChtZW1ibG9ja19lbmRfb2ZfRFJBTSgpID4gbWF4KSB7CiAJCXBwY19zd2lvdGxiX2VuYWJsZSA9IDE7CiAJCXNldF9wY2lfZG1hX29wcygmc3dpb3RsYl9kbWFfb3BzKTsKIAkJcHBjX21kLnBjaV9kbWFfZGV2X3NldHVwID0gcGNpX2RtYV9kZXZfc2V0dXBfc3dpb3RsYjsKQEAgLTM2OSw4ICs0MzIsNiBAQAogCXsgLnR5cGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKLQl7IC50eXBlID0gInFlIiwgfSwKLQl7IC5jb21wYXRpYmxlID0gImZzbCxxZSIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gImZzbCxyYXBpZGlvLWRlbHRhIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LWd1dHMiLCB9LApAQCAtMzgyLDggKzQ0Myw2IEBACiAJeyAudHlwZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAotCXsgLnR5cGUgPSAicWUiLCB9LAotCXsgLmNvbXBhdGlibGUgPSAiZnNsLHFlIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKQEAgLTM5NSwxNiArNDU0LDE2IEBACiAJaWYgKG1hY2hpbmVfaXMobXBjODU2OV9tZHMpKQogCQlzaW1wbGVfZ3Bpb2NoaXBfaW5pdCgiZnNsLG1wYzg1NjltZHMtYmNzci1ncGlvIik7CiAKLQkvKiBQdWJsaXNoIHRoZSBRRSBkZXZpY2VzICovCiAJb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIG1wYzg1eHhfaWRzLCBOVUxMKTsKKwltcGM4NXh4X3B1Ymxpc2hfcWVfZGV2aWNlcygpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHAxMDIxX3B1Ymxpc2hfZGV2aWNlcyh2b2lkKQogewotCS8qIFB1Ymxpc2ggdGhlIFFFIGRldmljZXMgKi8KIAlvZl9wbGF0Zm9ybV9idXNfcHJvYmUoTlVMTCwgcDEwMjFfaWRzLCBOVUxMKTsKKwltcGM4NXh4X3B1Ymxpc2hfcWVfZGV2aWNlcygpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NDEsMjEgKzUwMCw3IEBACiAJb2Zfbm9kZV9wdXQobnApOwogCiAJbXBpY19pbml0KG1waWMpOwotCi0jaWZkZWYgQ09ORklHX1FVSUNDX0VOR0lORQotCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImZzbCxxZS1pYyIpOwotCWlmICghbnApIHsKLQkJbnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAicWVpYyIpOwotCQlpZiAoIW5wKQotCQkJcmV0dXJuOwotCX0KLQlpZiAobWFjaGluZV9pcyhwMTAyMV9tZHMpKQotCQlxZV9pY19pbml0KG5wLCAwLCBxZV9pY19jYXNjYWRlX2xvd19tcGljLAotCQkJCXFlX2ljX2Nhc2NhZGVfaGlnaF9tcGljKTsKLQllbHNlCi0JCXFlX2ljX2luaXQobnAsIDAsIHFlX2ljX2Nhc2NhZGVfbXV4ZWRfbXBpYywgTlVMTCk7Ci0Jb2Zfbm9kZV9wdXQobnApOwotI2VuZGlmCQkJCS8qIENPTkZJR19RVUlDQ19FTkdJTkUgKi8KKwltcGM4NXh4X21kc19xZWljX2luaXQoKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgbXBjODV4eF9tZHNfcHJvYmUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9wMTAyMl9kcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3AxMDIyX2RzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE0NjdjOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9wMTAyMl9kcy5jCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogUDEwMjJEUyBib2FyZCBzcGVjaWZpYyByb3V0aW5lcworICoKKyAqIEF1dGhvcnM6IFRyYXZpcyBXaGVhdGxleSA8dHJhdmlzLndoZWF0bGV5QGZyZWVzY2FsZS5jb20+CisgKiAgICAgICAgICBEYXZlIExpdSA8ZGF2ZWxpdUBmcmVlc2NhbGUuY29tPgorICogICAgICAgICAgVGltdXIgVGFiaSA8dGltdXJAZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyB0YWtlbiBmcm9tIHRoZSBGcmVlc2NhbGUgUDEwMjJEUyBCU1AsIHdpdGggbW9kaWZpY2F0aW9uczoKKyAqIDEpIE5vIERJVSBzdXBwb3J0IChwZW5kaW5nIHJld3JpdGUgb2YgRElVIGNvZGUpCisgKiAyKSBObyBBTVAgc3VwcG9ydAorICogMykgTm8gUENJIGVuZHBvaW50IHN1cHBvcnQKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9sbWIuaD4KKworI2luY2x1ZGUgPGFzbS9tcGljLmg+CisjaW5jbHVkZSA8YXNtL3N3aW90bGIuaD4KKworI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9wY2kuaD4KKwordm9pZCBfX2luaXQgcDEwMjJfZHNfcGljX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgbXBpYyAqbXBpYzsKKwlzdHJ1Y3QgcmVzb3VyY2UgcjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCisJbnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAib3Blbi1waWMiKTsKKwlpZiAoIW5wKSB7CisJCXByX2VycigiQ291bGQgbm90IGZpbmQgb3Blbi1waWMgbm9kZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnIpKSB7CisJCXByX2VycigiRmFpbGVkIHRvIG1hcCBtcGljIHJlZ2lzdGVyIHNwYWNlXG4iKTsKKwkJb2Zfbm9kZV9wdXQobnApOworCQlyZXR1cm47CisJfQorCisJbXBpYyA9IG1waWNfYWxsb2MobnAsIHIuc3RhcnQsCisJCU1QSUNfUFJJTUFSWSB8IE1QSUNfV0FOVFNfUkVTRVQgfAorCQlNUElDX0JJR19FTkRJQU4gfCBNUElDX0JST0tFTl9GUlJfTklSUVMgfAorCQlNUElDX1NJTkdMRV9ERVNUX0NQVSwKKwkJMCwgMjU2LCAiIE9wZW5QSUMgICIpOworCisJQlVHX09OKG1waWMgPT0gTlVMTCk7CisJb2Zfbm9kZV9wdXQobnApOworCisJbXBpY19pbml0KG1waWMpOworfQorCisjaWZkZWYgQ09ORklHX1NNUAordm9pZCBfX2luaXQgbXBjODV4eF9zbXBfaW5pdCh2b2lkKTsKKyNlbmRpZgorCisvKgorICogU2V0dXAgdGhlIGFyY2hpdGVjdHVyZQorICovCitzdGF0aWMgdm9pZCBfX2luaXQgcDEwMjJfZHNfc2V0dXBfYXJjaCh2b2lkKQoreworI2lmZGVmIENPTkZJR19QQ0kKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworI2VuZGlmCisJZG1hX2FkZHJfdCBtYXggPSAweGZmZmZmZmZmOworCisJaWYgKHBwY19tZC5wcm9ncmVzcykKKwkJcHBjX21kLnByb2dyZXNzKCJwMTAyMl9kc19zZXR1cF9hcmNoKCkiLCAwKTsKKworI2lmZGVmIENPTkZJR19QQ0kKKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAiZnNsLHAxMDIyLXBjaWUiKSB7CisJCXN0cnVjdCByZXNvdXJjZSByc3JjOworCQlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2U7CisKKwkJb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnJzcmMpOworCisJCWlmICgocnNyYy5zdGFydCAmIDB4ZmZmZmYpID09IDB4ODAwMCkKKwkJCWZzbF9hZGRfYnJpZGdlKG5wLCAxKTsKKwkJZWxzZQorCQkJZnNsX2FkZF9icmlkZ2UobnAsIDApOworCisJCWhvc2UgPSBwY2lfZmluZF9ob3NlX2Zvcl9PRl9kZXZpY2UobnApOworCQltYXggPSBtaW4obWF4LCBob3NlLT5kbWFfd2luZG93X2Jhc2VfY3VyICsKKwkJCSAgaG9zZS0+ZG1hX3dpbmRvd19zaXplKTsKKwl9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TTVAKKwltcGM4NXh4X3NtcF9pbml0KCk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TV0lPVExCCisJaWYgKGxtYl9lbmRfb2ZfRFJBTSgpID4gbWF4KSB7CisJCXBwY19zd2lvdGxiX2VuYWJsZSA9IDE7CisJCXNldF9wY2lfZG1hX29wcygmc3dpb3RsYl9kbWFfb3BzKTsKKwkJcHBjX21kLnBjaV9kbWFfZGV2X3NldHVwID0gcGNpX2RtYV9kZXZfc2V0dXBfc3dpb3RsYjsKKwl9CisjZW5kaWYKKworCXByX2luZm8oIkZyZWVzY2FsZSBQMTAyMiBEUyByZWZlcmVuY2UgYm9hcmRcbiIpOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBfX2luaXRkYXRhIHAxMDIyX2RzX2lkc1tdID0geworCXsgLnR5cGUgPSAic29jIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gInNvYyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAorCXt9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgcDEwMjJfZHNfcHVibGlzaF9kZXZpY2VzKHZvaWQpCit7CisJcmV0dXJuIG9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCBwMTAyMl9kc19pZHMsIE5VTEwpOworfQorbWFjaGluZV9kZXZpY2VfaW5pdGNhbGwocDEwMjJfZHMsIHAxMDIyX2RzX3B1Ymxpc2hfZGV2aWNlcyk7CisKK21hY2hpbmVfYXJjaF9pbml0Y2FsbChwMTAyMl9kcywgc3dpb3RsYl9zZXR1cF9idXNfbm90aWZpZXIpOworCisvKgorICogQ2FsbGVkIHZlcnkgZWFybHksIGRldmljZS10cmVlIGlzbid0IHVuZmxhdHRlbmVkCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHAxMDIyX2RzX3Byb2JlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOworCisJcmV0dXJuIG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiZnNsLHAxMDIyZHMiKTsKK30KKworZGVmaW5lX21hY2hpbmUocDEwMjJfZHMpIHsKKwkubmFtZQkJCT0gIlAxMDIyIERTIiwKKwkucHJvYmUJCQk9IHAxMDIyX2RzX3Byb2JlLAorCS5zZXR1cF9hcmNoCQk9IHAxMDIyX2RzX3NldHVwX2FyY2gsCisJLmluaXRfSVJRCQk9IHAxMDIyX2RzX3BpY19pbml0LAorI2lmZGVmIENPTkZJR19QQ0kKKwkucGNpYmlvc19maXh1cF9idXMJPSBmc2xfcGNpYmlvc19maXh1cF9idXMsCisjZW5kaWYKKwkuZ2V0X2lycQkJPSBtcGljX2dldF9pcnEsCisJLnJlc3RhcnQJCT0gZnNsX3JzdGNyX3Jlc3RhcnQsCisJLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCisJLnByb2dyZXNzCQk9IHVkYmdfcHJvZ3Jlc3MsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NtcC5jCmluZGV4IGExNWY1ODIuLmE2YjEwNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC0yNCw2ICsyNSw3IEBACiAjaW5jbHVkZSA8YXNtL2RiZWxsLmg+CiAKICNpbmNsdWRlIDxzeXNkZXYvZnNsX3NvYy5oPgorI2luY2x1ZGUgPHN5c2Rldi9tcGljLmg+CiAKIGV4dGVybiB2b2lkIF9fZWFybHlfc3RhcnQodm9pZCk7CiAKQEAgLTk5LDEyICsxMDEsNzAgQEAKIHNtcF84NXh4X3NldHVwX2NwdShpbnQgY3B1X25yKQogewogCW1waWNfc2V0dXBfdGhpc19jcHUoKTsKKwlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfREJFTEwpKQorCQlkb29yYmVsbF9zZXR1cF90aGlzX2NwdSgpOwogfQogCiBzdHJ1Y3Qgc21wX29wc190IHNtcF84NXh4X29wcyA9IHsKIAkua2lja19jcHUgPSBzbXBfODV4eF9raWNrX2NwdSwKKyNpZmRlZiBDT05GSUdfS0VYRUMKKwkuZ2l2ZV90aW1lYmFzZQk9IHNtcF9nZW5lcmljX2dpdmVfdGltZWJhc2UsCisJLnRha2VfdGltZWJhc2UJPSBzbXBfZ2VuZXJpY190YWtlX3RpbWViYXNlLAorI2VuZGlmCiB9OwogCisjaWZkZWYgQ09ORklHX0tFWEVDCitzdGF0aWMgaW50IGtleGVjX2Rvd25fY3B1cyA9IDA7CisKK3ZvaWQgbXBjODV4eF9zbXBfa2V4ZWNfY3B1X2Rvd24oaW50IGNyYXNoX3NodXRkb3duLCBpbnQgc2Vjb25kYXJ5KQoreworCW1waWNfdGVhcmRvd25fdGhpc19jcHUoMSk7CisKKwkvKiBXaGVuIGNyYXNoaW5nLCB0aGlzIGdldHMgY2FsbGVkIG9uIGFsbCBDUFUncyB3ZSBvbmx5CisJICogdGFrZSBkb3duIHRoZSBub24tYm9vdCBjcHVzICovCisJaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSAhPSBib290X2NwdWlkKQorCXsKKwkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwkJa2V4ZWNfZG93bl9jcHVzKys7CisKKwkJd2hpbGUgKDEpOworCX0KK30KKworc3RhdGljIHZvaWQgbXBjODV4eF9zbXBfa2V4ZWNfZG93bih2b2lkICphcmcpCit7CisJaWYgKHBwY19tZC5rZXhlY19jcHVfZG93bikKKwkJcHBjX21kLmtleGVjX2NwdV9kb3duKDAsMSk7Cit9CisKK3N0YXRpYyB2b2lkIG1wYzg1eHhfc21wX21hY2hpbmVfa2V4ZWMoc3RydWN0IGtpbWFnZSAqaW1hZ2UpCit7CisJaW50IHRpbWVvdXQgPSAyMDAwOworCWludCBpOworCisJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdShib290X2NwdWlkKSk7CisKKwlzbXBfY2FsbF9mdW5jdGlvbihtcGM4NXh4X3NtcF9rZXhlY19kb3duLCBOVUxMLCAwKTsKKworCXdoaWxlICggKGtleGVjX2Rvd25fY3B1cyAhPSAobnVtX29ubGluZV9jcHVzKCkgLSAxKSkgJiYKKwkJKCB0aW1lb3V0ID4gMCApICkKKwl7CisJCXRpbWVvdXQtLTsKKwl9CisKKwlpZiAoICF0aW1lb3V0ICkKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYnJpbmcgZG93biBzZWNvbmRhcnkgY3B1KHMpIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3ByZXNlbnRfY3B1cygpOyBpKyspCisJeworCQlpZiAoIGkgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpICkgY29udGludWU7CisJCW1waWNfcmVzZXRfY29yZShpKTsKKwl9CisKKwlkZWZhdWx0X21hY2hpbmVfa2V4ZWMoaW1hZ2UpOworfQorI2VuZGlmIC8qIENPTkZJR19LRVhFQyAqLworCiB2b2lkIF9faW5pdCBtcGM4NXh4X3NtcF9pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKQEAgLTExNyw5ICsxNzcsMTQgQEAKIAl9CiAKIAlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfREJFTEwpKQotCQlzbXBfODV4eF9vcHMubWVzc2FnZV9wYXNzID0gc21wX2RiZWxsX21lc3NhZ2VfcGFzczsKKwkJc21wXzg1eHhfb3BzLm1lc3NhZ2VfcGFzcyA9IGRvb3JiZWxsX21lc3NhZ2VfcGFzczsKIAogCUJVR19PTighc21wXzg1eHhfb3BzLm1lc3NhZ2VfcGFzcyk7CiAKIAlzbXBfb3BzID0gJnNtcF84NXh4X29wczsKKworI2lmZGVmIENPTkZJR19LRVhFQworCXBwY19tZC5rZXhlY19jcHVfZG93biA9IG1wYzg1eHhfc21wX2tleGVjX2NwdV9kb3duOworCXBwY19tZC5tYWNoaW5lX2tleGVjID0gbXBjODV4eF9zbXBfbWFjaGluZV9rZXhlYzsKKyNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3RxbTg1eHguYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC90cW04NXh4LmMKaW5kZXggNWIwYWI5OS4uOGYyOWJiYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3RxbTg1eHguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvdHFtODV4eC5jCkBAIC0xNTEsNiArMTUxLDI3IEBACiAJc2VxX3ByaW50ZihtLCAiUExMIHNldHRpbmdcdDogMHgleFxuIiwgKChwaGlkMSA+PiAyNCkgJiAweDNmKSk7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCB0cW04NXh4X3RpMTUyMF9maXh1cChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJLyogRG8gbm90IGRvIHRoZSBmaXh1cCBvbiBvdGhlciBwbGF0Zm9ybXMhICovCisJaWYgKCFtYWNoaW5lX2lzKHRxbTg1eHgpKQorCQlyZXR1cm47CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiVXNpbmcgVEkgMTUyMCBmaXh1cCBvbiBUUU04NXh4XG4iKTsKKworCS8qCisJICogRW5hYmxlIFAyQ0NMSyBiaXQgaW4gc3lzdGVtIGNvbnRyb2wgcmVnaXN0ZXIKKwkgKiB0byBlbmFibGUgQ0xPQ0sgb3V0cHV0IHRvIHBvd2VyIGNoaXAKKwkgKi8KKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgMHg4MCwgJnZhbCk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweDgwLCB2YWwgfCAoMSA8PCAyNykpOworCit9CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9USSwgUENJX0RFVklDRV9JRF9USV8xNTIwLAorCQl0cW04NXh4X3RpMTUyMF9maXh1cCk7CisKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9faW5pdGRhdGEgb2ZfYnVzX2lkc1tdID0gewogCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfZ3Bpby5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9ncGlvLmMKaW5kZXggYjhjYjA4ZC4uNGZmN2IxZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9ncGlvLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9ncGlvLmMKQEAgLTExOCwxMiArMTE4LDEyIEBACiAJCX0KIAogCQkvKiBTZXR1cCBwb2ludGVycyB0byBjaGlwIGZ1bmN0aW9ucyAqLwotCQlnZWZfZ3Bpb19jaGlwLT5vZl9nYy5ncGlvX2NlbGxzID0gMjsKLQkJZ2VmX2dwaW9fY2hpcC0+b2ZfZ2MuZ2MubmdwaW8gPSAxOTsKLQkJZ2VmX2dwaW9fY2hpcC0+b2ZfZ2MuZ2MuZGlyZWN0aW9uX2lucHV0ID0gZ2VmX2dwaW9fZGlyX2luOwotCQlnZWZfZ3Bpb19jaGlwLT5vZl9nYy5nYy5kaXJlY3Rpb25fb3V0cHV0ID0gZ2VmX2dwaW9fZGlyX291dDsKLQkJZ2VmX2dwaW9fY2hpcC0+b2ZfZ2MuZ2MuZ2V0ID0gZ2VmX2dwaW9fZ2V0OwotCQlnZWZfZ3Bpb19jaGlwLT5vZl9nYy5nYy5zZXQgPSBnZWZfZ3Bpb19zZXQ7CisJCWdlZl9ncGlvX2NoaXAtPmdjLm9mX2dwaW9fbl9jZWxscyA9IDI7CisJCWdlZl9ncGlvX2NoaXAtPmdjLm5ncGlvID0gMTk7CisJCWdlZl9ncGlvX2NoaXAtPmdjLmRpcmVjdGlvbl9pbnB1dCA9IGdlZl9ncGlvX2Rpcl9pbjsKKwkJZ2VmX2dwaW9fY2hpcC0+Z2MuZGlyZWN0aW9uX291dHB1dCA9IGdlZl9ncGlvX2Rpcl9vdXQ7CisJCWdlZl9ncGlvX2NoaXAtPmdjLmdldCA9IGdlZl9ncGlvX2dldDsKKwkJZ2VmX2dwaW9fY2hpcC0+Z2Muc2V0ID0gZ2VmX2dwaW9fc2V0OwogCiAJCS8qIFRoaXMgZnVuY3Rpb24gYWRkcyBhIG1lbW9yeSBtYXBwZWQgR1BJTyBjaGlwICovCiAJCXJldHZhbCA9IG9mX21tX2dwaW9jaGlwX2FkZChucCwgZ2VmX2dwaW9fY2hpcCk7CkBAIC0xNDYsMTIgKzE0NiwxMiBAQAogCQl9CiAKIAkJLyogU2V0dXAgcG9pbnRlcnMgdG8gY2hpcCBmdW5jdGlvbnMgKi8KLQkJZ2VmX2dwaW9fY2hpcC0+b2ZfZ2MuZ3Bpb19jZWxscyA9IDI7Ci0JCWdlZl9ncGlvX2NoaXAtPm9mX2djLmdjLm5ncGlvID0gNjsKLQkJZ2VmX2dwaW9fY2hpcC0+b2ZfZ2MuZ2MuZGlyZWN0aW9uX2lucHV0ID0gZ2VmX2dwaW9fZGlyX2luOwotCQlnZWZfZ3Bpb19jaGlwLT5vZl9nYy5nYy5kaXJlY3Rpb25fb3V0cHV0ID0gZ2VmX2dwaW9fZGlyX291dDsKLQkJZ2VmX2dwaW9fY2hpcC0+b2ZfZ2MuZ2MuZ2V0ID0gZ2VmX2dwaW9fZ2V0OwotCQlnZWZfZ3Bpb19jaGlwLT5vZl9nYy5nYy5zZXQgPSBnZWZfZ3Bpb19zZXQ7CisJCWdlZl9ncGlvX2NoaXAtPmdjLm9mX2dwaW9fbl9jZWxscyA9IDI7CisJCWdlZl9ncGlvX2NoaXAtPmdjLm5ncGlvID0gNjsKKwkJZ2VmX2dwaW9fY2hpcC0+Z2MuZGlyZWN0aW9uX2lucHV0ID0gZ2VmX2dwaW9fZGlyX2luOworCQlnZWZfZ3Bpb19jaGlwLT5nYy5kaXJlY3Rpb25fb3V0cHV0ID0gZ2VmX2dwaW9fZGlyX291dDsKKwkJZ2VmX2dwaW9fY2hpcC0+Z2MuZ2V0ID0gZ2VmX2dwaW9fZ2V0OworCQlnZWZfZ3Bpb19jaGlwLT5nYy5zZXQgPSBnZWZfZ3Bpb19zZXQ7CiAKIAkJLyogVGhpcyBmdW5jdGlvbiBhZGRzIGEgbWVtb3J5IG1hcHBlZCBHUElPIGNoaXAgKi8KIAkJcmV0dmFsID0gb2ZfbW1fZ3Bpb2NoaXBfYWRkKG5wLCBnZWZfZ3Bpb19jaGlwKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X2hwY24uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X2hwY24uYwppbmRleCAyYWE2OWE2Li5iMTFjMzUzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9ocGNuLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1iLmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgpAQCAtMTAzLDcgKzEwMyw3IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TV0lPVExCCi0JaWYgKGxtYl9lbmRfb2ZfRFJBTSgpID4gbWF4KSB7CisJaWYgKG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgPiBtYXgpIHsKIAkJcHBjX3N3aW90bGJfZW5hYmxlID0gMTsKIAkJc2V0X3BjaV9kbWFfb3BzKCZzd2lvdGxiX2RtYV9vcHMpOwogCQlwcGNfbWQucGNpX2RtYV9kZXZfc2V0dXAgPSBwY2lfZG1hX2Rldl9zZXR1cF9zd2lvdGxiOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWcKaW5kZXggNDhhOTIwYS4uZGQzNWNlMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9LY29uZmlnCkBAIC01NSw2ICs1NSwxMiBAQAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgS2V5bWlsZSBNR1NVVkQgYm9hcmQuCiAKK2NvbmZpZyBUUU04WFgKKwlib29sICJUUU04WFgiCisJc2VsZWN0IENQTTEKKwloZWxwCisJICBzdXBwb3J0IGZvciB0aGUgbXBjOHh4IGJhc2VkIGJvYXJkcyBmcm9tIFRRTS4KKwogZW5kY2hvaWNlCiAKIG1lbnUgIkZyZWVzY2FsZSBFdGhlcm5ldCBkcml2ZXIgcGxhdGZvcm0tc3BlY2lmaWMgb3B0aW9ucyIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvTWFrZWZpbGUKaW5kZXggYmRiZmQ3NDkuLmE0OTFmZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L01ha2VmaWxlCkBAIC03LDMgKzcsNCBAQAogb2JqLSQoQ09ORklHX1BQQ19FUDg4WEMpICArPSBlcDg4eGMubwogb2JqLSQoQ09ORklHX1BQQ19BRERFUjg3NSkgKz0gYWRkZXI4NzUubwogb2JqLSQoQ09ORklHX1BQQ19NR1NVVkQpICs9IG1nc3V2ZC5vCitvYmotJChDT05GSUdfVFFNOFhYKSAgICAgICs9IHRxbTh4eF9zZXR1cC5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC90cW04eHhfc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L3RxbTh4eF9zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MWM2NTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC90cW04eHhfc2V0dXAuYwpAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIFBsYXRmb3JtIHNldHVwIGZvciB0aGUgTVBDOHh4IGJhc2VkIGJvYXJkcyBmcm9tIFRRTS4KKyAqCisgKiBIZWlrbyBTY2hvY2hlciA8aHNAZGVueC5kZT4KKyAqIENvcHlyaWdodCAyMDEwIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIGJhc2VkIG9uOgorICogVml0YWx5IEJvcmR1ZyA8dmJvcmR1Z0BydS5tdmlzdGEuY29tPgorICoKKyAqIENvcHlyaWdodCAyMDA1IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqIEhlYXZpbHkgbW9kaWZpZWQgYnkgU2NvdHQgV29vZCA8c2NvdHR3b29kQGZyZWVzY2FsZS5jb20+CisgKiBDb3B5cmlnaHQgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9mc19lbmV0X3BkLmg+CisjaW5jbHVkZSA8bGludXgvZnNfdWFydF9wZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPGFzbS9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21wYzh4eC5oPgorI2luY2x1ZGUgPGFzbS84eHhfaW1tYXAuaD4KKyNpbmNsdWRlIDxhc20vY3BtMS5oPgorI2luY2x1ZGUgPGFzbS9mc19wZC5oPgorI2luY2x1ZGUgPGFzbS91ZGJnLmg+CisKKyNpbmNsdWRlICJtcGM4eHguaCIKKworc3RydWN0IGNwbV9waW4geworCWludCBwb3J0LCBwaW4sIGZsYWdzOworfTsKKworc3RhdGljIHN0cnVjdCBfX2luaXRkYXRhIGNwbV9waW4gdHFtOHh4X3BpbnNbXSA9IHsKKwkvKiBTTUMxICovCisJe0NQTV9QT1JUQiwgMjQsIENQTV9QSU5fSU5QVVR9LCAvKiBSWCAqLworCXtDUE1fUE9SVEIsIDI1LCBDUE1fUElOX0lOUFVUIHwgQ1BNX1BJTl9TRUNPTkRBUll9LCAvKiBUWCAqLworCisJLyogU0NDMSAqLworCXtDUE1fUE9SVEEsIDUsIENQTV9QSU5fSU5QVVR9LCAvKiBDTEsxICovCisJe0NQTV9QT1JUQSwgNywgQ1BNX1BJTl9JTlBVVH0sIC8qIENMSzIgKi8KKwl7Q1BNX1BPUlRBLCAxNCwgQ1BNX1BJTl9JTlBVVH0sIC8qIFRYICovCisJe0NQTV9QT1JUQSwgMTUsIENQTV9QSU5fSU5QVVR9LCAvKiBSWCAqLworCXtDUE1fUE9SVEMsIDE1LCBDUE1fUElOX0lOUFVUIHwgQ1BNX1BJTl9TRUNPTkRBUll9LCAvKiBURU5BICovCisJe0NQTV9QT1JUQywgMTAsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1NFQ09OREFSWSB8IENQTV9QSU5fR1BJT30sCisJe0NQTV9QT1JUQywgMTEsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1NFQ09OREFSWSB8IENQTV9QSU5fR1BJT30sCit9OworCitzdGF0aWMgc3RydWN0IF9faW5pdGRhdGEgY3BtX3BpbiB0cW04eHhfZmVjX3BpbnNbXSA9IHsKKwkvKiBNSUkgKi8KKwl7Q1BNX1BPUlRELCAzLCBDUE1fUElOX09VVFBVVH0sCisJe0NQTV9QT1JURCwgNCwgQ1BNX1BJTl9PVVRQVVR9LAorCXtDUE1fUE9SVEQsIDUsIENQTV9QSU5fT1VUUFVUfSwKKwl7Q1BNX1BPUlRELCA2LCBDUE1fUElOX09VVFBVVH0sCisJe0NQTV9QT1JURCwgNywgQ1BNX1BJTl9PVVRQVVR9LAorCXtDUE1fUE9SVEQsIDgsIENQTV9QSU5fT1VUUFVUfSwKKwl7Q1BNX1BPUlRELCA5LCBDUE1fUElOX09VVFBVVH0sCisJe0NQTV9QT1JURCwgMTAsIENQTV9QSU5fT1VUUFVUfSwKKwl7Q1BNX1BPUlRELCAxMSwgQ1BNX1BJTl9PVVRQVVR9LAorCXtDUE1fUE9SVEQsIDEyLCBDUE1fUElOX09VVFBVVH0sCisJe0NQTV9QT1JURCwgMTMsIENQTV9QSU5fT1VUUFVUfSwKKwl7Q1BNX1BPUlRELCAxNCwgQ1BNX1BJTl9PVVRQVVR9LAorCXtDUE1fUE9SVEQsIDE1LCBDUE1fUElOX09VVFBVVH0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9waW5zKGludCBuLCBzdHJ1Y3QgY3BtX3BpbiAqcGluKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQljcG0xX3NldF9waW4ocGluLT5wb3J0LCBwaW4tPnBpbiwgcGluLT5mbGFncyk7CisJCXBpbisrOworCX0KK30KKworc3RhdGljIHZvaWQgX19pbml0IGluaXRfaW9wb3J0cyh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG5vZGU7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCWludAlsZW47CisKKwlpbml0X3BpbnMoQVJSQVlfU0laRSh0cW04eHhfcGlucyksICZ0cW04eHhfcGluc1swXSk7CisKKwljcG0xX2Nsa19zZXR1cChDUE1fQ0xLX1NNQzEsIENQTV9CUkcxLCBDUE1fQ0xLX1JUWCk7CisKKwlkbm9kZSA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJhbGlhc2VzIik7CisJaWYgKGRub2RlID09IE5VTEwpCisJCXJldHVybjsKKwlwcm9wID0gb2ZfZmluZF9wcm9wZXJ0eShkbm9kZSwgImV0aGVybmV0MSIsICZsZW4pOworCWlmIChwcm9wID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIGluaXQgRkVDIHBpbnMgKi8KKwlpbml0X3BpbnMoQVJSQVlfU0laRSh0cW04eHhfZmVjX3BpbnMpLCAmdHFtOHh4X2ZlY19waW5zWzBdKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHRxbTh4eF9zZXR1cF9hcmNoKHZvaWQpCit7CisJY3BtX3Jlc2V0KCk7CisJaW5pdF9pb3BvcnRzKCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHRxbTh4eF9wcm9iZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbm9kZSA9IG9mX2dldF9mbGF0X2R0X3Jvb3QoKTsKKworCXJldHVybiBvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUobm9kZSwgInRxYyx0cW04eHgiKTsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgX19pbml0ZGF0YSBvZl9idXNfaWRzW10gPSB7CisJeyAubmFtZSA9ICJzb2MiLCB9LAorCXsgLm5hbWUgPSAiY3BtIiwgfSwKKwl7IC5uYW1lID0gImxvY2FsYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiIH0sCisJe30sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXModm9pZCkKK3sKKwlvZl9wbGF0Zm9ybV9idXNfcHJvYmUoTlVMTCwgb2ZfYnVzX2lkcywgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KK21hY2hpbmVfZGV2aWNlX2luaXRjYWxsKHRxbTh4eCwgZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKTsKKworZGVmaW5lX21hY2hpbmUodHFtOHh4KSB7CisJLm5hbWUJCQk9ICJUUU04eHgiLAorCS5wcm9iZQkJCT0gdHFtOHh4X3Byb2JlLAorCS5zZXR1cF9hcmNoCQk9IHRxbTh4eF9zZXR1cF9hcmNoLAorCS5pbml0X0lSUQkJPSBtcGM4eHhfcGljc19pbml0LAorCS5nZXRfaXJxCQk9IG1wYzh4eF9nZXRfaXJxLAorCS5yZXN0YXJ0CQk9IG1wYzh4eF9yZXN0YXJ0LAorCS5jYWxpYnJhdGVfZGVjcgkJPSBtcGM4eHhfY2FsaWJyYXRlX2RlY3IsCisJLnNldF9ydGNfdGltZQkJPSBtcGM4eHhfc2V0X3J0Y190aW1lLAorCS5nZXRfcnRjX3RpbWUJCT0gbXBjOHh4X2dldF9ydGNfdGltZSwKKwkucHJvZ3Jlc3MJCT0gdWRiZ19wcm9ncmVzcywKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2FtaWdhb25lL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2FtaWdhb25lL3NldHVwLmMKaW5kZXggZmI0ZWIwZC4uMDNhYWJjMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9hbWlnYW9uZS9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvYW1pZ2FvbmUvc2V0dXAuYwpAQCAtMTMsMTIgKzEzLDEzIEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8Z2VuZXJhdGVkL3V0c3JlbGVhc2UuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgogI2luY2x1ZGUgPGFzbS9pODI1OS5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYXhvbl9tc2kuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9heG9uX21zaS5jCmluZGV4IDYyNTdlNTMuLjk3MDg1NTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9heG9uX21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9heG9uX21zaS5jCkBAIC0zMjgsNyArMzI4LDcgQEAKIAkubWFwCT0gbXNpY19ob3N0X21hcCwKIH07CiAKLXN0YXRpYyBpbnQgYXhvbl9tc2lfc2h1dGRvd24oc3RydWN0IG9mX2RldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBheG9uX21zaV9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IGF4b25fbXNpYyAqbXNpYyA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2aWNlLT5kZXYpOwogCXUzMiB0bXA7CkBAIC0zNDIsNyArMzQyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBheG9uX21zaV9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXZpY2UsCitzdGF0aWMgaW50IGF4b25fbXNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSwKIAkJCSAgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqZGV2aWNlX2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4gPSBkZXZpY2UtPmRldi5vZl9ub2RlOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2lvbW11LmMKaW5kZXggMzlkMzYxYy4uYmVlYzQwNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaW9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYmVhdF9pb21tdS5jCkBAIC0xMDgsNyArMTA4LDcgQEAKIAljZWxsZWJfaW5pdF9kaXJlY3RfbWFwcGluZygpOwogCXNldF9wY2lfZG1hX29wcygmZG1hX2RpcmVjdF9vcHMpOwogCXBwY19tZC5wY2lfZG1hX2Rldl9zZXR1cCA9IGNlbGxlYl9wY2lfZG1hX2Rldl9zZXR1cDsKLQlidXNfcmVnaXN0ZXJfbm90aWZpZXIoJm9mX3BsYXRmb3JtX2J1c190eXBlLCAmY2VsbGViX29mX2J1c19ub3RpZmllcik7CisJYnVzX3JlZ2lzdGVyX25vdGlmaWVyKCZwbGF0Zm9ybV9idXNfdHlwZSwgJmNlbGxlYl9vZl9idXNfbm90aWZpZXIpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCmluZGV4IDQzMjZiNzMuLjU4YjEzY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9sbWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vaW9tbXUuaD4KQEAgLTg0NSwxMCArODQ1LDEwIEBACiAJLyogSWYgd2UgZm91bmQgYSBETUEgd2luZG93LCB3ZSBjaGVjayBpZiBpdCdzIGJpZyBlbm91Z2ggdG8gZW5jbG9zZQogCSAqIGFsbCBvZiBwaHlzaWNhbCBtZW1vcnkuIElmIG5vdCwgd2UgZm9yY2UgZW5hYmxlIElPTU1VCiAJICovCi0JaWYgKG5wICYmIHNpemUgPCBsbWJfZW5kX29mX0RSQU0oKSkgeworCWlmIChucCAmJiBzaXplIDwgbWVtYmxvY2tfZW5kX29mX0RSQU0oKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJpb21tdTogZm9yY2UtZW5hYmxlZCwgZG1hIHdpbmRvdyIKIAkJICAgICAgICIgKCVsZE1CKSBzbWFsbGVyIHRoYW4gdG90YWwgbWVtb3J5ICglbGxkTUIpXG4iLAotCQkgICAgICAgc2l6ZSA+PiAyMCwgbG1iX2VuZF9vZl9EUkFNKCkgPj4gMjApOworCQkgICAgICAgc2l6ZSA+PiAyMCwgbWVtYmxvY2tfZW5kX29mX0RSQU0oKSA+PiAyMCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMTA2NCw3ICsxMDY0LDcgQEAKIAl9CiAKIAlmYmFzZSA9IF9BTElHTl9VUChmYmFzZSwgMSA8PCBJT19TRUdNRU5UX1NISUZUKTsKLQlmc2l6ZSA9IGxtYl9waHlzX21lbV9zaXplKCk7CisJZnNpemUgPSBtZW1ibG9ja19waHlzX21lbV9zaXplKCk7CiAKIAlpZiAoKGZiYXNlICsgZnNpemUpIDw9IDB4ODAwMDAwMDAwdWwpCiAJCWhiYXNlID0gMDsgLyogdXNlIHRoZSBkZXZpY2UgdHJlZSB3aW5kb3cgKi8KQEAgLTExNjksNyArMTE2OSw3IEBACiAJICogTm90ZTogc2hvdWxkIHdlIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBJT01NVSBhY3R1YWxseSBkaXNhYmxlZCA/CiAJICovCiAJaWYgKGlvbW11X2lzX29mZiB8fAotCSAgICAoIWlvbW11X2ZvcmNlX29uICYmIGxtYl9lbmRfb2ZfRFJBTSgpIDw9IDB4ODAwMDAwMDB1bGwpKQorCSAgICAoIWlvbW11X2ZvcmNlX29uICYmIG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgPD0gMHg4MDAwMDAwMHVsbCkpCiAJCWlmIChjZWxsX2lvbW11X2luaXRfZGlzYWJsZWQoKSA9PSAwKQogCQkJZ290byBiYWlsOwogCkBAIC0xMjA0LDcgKzEyMDQsNyBAQAogCS8qIFJlZ2lzdGVyIGNhbGxiYWNrcyBvbiBPRiBwbGF0Zm9ybSBkZXZpY2UgYWRkaXRpb24vcmVtb3ZhbAogCSAqIHRvIGhhbmRsZSBsaW5raW5nIHRoZW0gdG8gdGhlIHJpZ2h0IERNQSBvcGVyYXRpb25zCiAJICovCi0JYnVzX3JlZ2lzdGVyX25vdGlmaWVyKCZvZl9wbGF0Zm9ybV9idXNfdHlwZSwgJmNlbGxfb2ZfYnVzX25vdGlmaWVyKTsKKwlidXNfcmVnaXN0ZXJfbm90aWZpZXIoJnBsYXRmb3JtX2J1c190eXBlLCAmY2VsbF9vZl9idXNfbm90aWZpZXIpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcXBhY2Vfc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9xcGFjZV9zZXR1cC5jCmluZGV4IGM1Y2UwMmUuLjFiNTc0OTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9xcGFjZV9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9xcGFjZV9zZXR1cC5jCkBAIC02MSwxMiArNjEsMjQgQEAKIAlwcmludGsoIioqKiAlMDR4IDogJXNcbiIsIGhleCwgcyA/IHMgOiAiIik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHFwYWNlX2J1c19pZHNbXSBfX2luaXRkYXRhID0geworCXsgLnR5cGUgPSAic29jIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gInNvYyIsIH0sCisJeyAudHlwZSA9ICJzcGlkZXIiLCB9LAorCXsgLnR5cGUgPSAiYXhvbiIsIH0sCisJeyAudHlwZSA9ICJwbGI1IiwgfSwKKwl7IC50eXBlID0gInBsYjQiLCB9LAorCXsgLnR5cGUgPSAib3BiIiwgfSwKKwl7IC50eXBlID0gImViYyIsIH0sCisJe30sCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBxcGFjZV9wdWJsaXNoX2RldmljZXModm9pZCkKIHsKIAlpbnQgbm9kZTsKIAogCS8qIFB1Ymxpc2ggT0YgcGxhdGZvcm0gZGV2aWNlcyBmb3Igc291dGhicmlkZ2UgSU9zICovCi0Jb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIE5VTEwsIE5VTEwpOworCW9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCBxcGFjZV9idXNfaWRzLCBOVUxMKTsKIAogCS8qIFRoZXJlIGlzIG5vIGRldmljZSBmb3IgdGhlIE1JQyBtZW1vcnkgY29udHJvbGxlciwgdGh1cyB3ZSBjcmVhdGUKIAkgKiBhIHBsYXRmb3JtIGRldmljZSBmb3IgaXQgdG8gYXR0YWNoIHRoZSBFREFDIGRyaXZlciB0by4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NldHVwLmMKaW5kZXggNTAzODVkYi4uNjkxOTk1NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NldHVwLmMKQEAgLTE0MSw2ICsxNDEsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgY2VsbF9idXNfaWRzW10gX19pbml0ZGF0YSA9IHsKKwl7IC50eXBlID0gInNvYyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJzb2MiLCB9LAorCXsgLnR5cGUgPSAic3BpZGVyIiwgfSwKKwl7IC50eXBlID0gImF4b24iLCB9LAorCXsgLnR5cGUgPSAicGxiNSIsIH0sCisJeyAudHlwZSA9ICJwbGI0IiwgfSwKKwl7IC50eXBlID0gIm9wYiIsIH0sCisJeyAudHlwZSA9ICJlYmMiLCB9LAorCXt9LAorfTsKKwogc3RhdGljIGludCBfX2luaXQgY2VsbF9wdWJsaXNoX2RldmljZXModm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3QgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiLyIpOwpAQCAtMTQ4LDcgKzE2MCw3IEBACiAJaW50IG5vZGU7CiAKIAkvKiBQdWJsaXNoIE9GIHBsYXRmb3JtIGRldmljZXMgZm9yIHNvdXRoYnJpZGdlIElPcyAqLwotCW9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCBOVUxMLCBOVUxMKTsKKwlvZl9wbGF0Zm9ybV9idXNfcHJvYmUoTlVMTCwgY2VsbF9idXNfaWRzLCBOVUxMKTsKIAogCS8qIE9uIHNwaWRlciBiYXNlZCBibGFkZXMsIHdlIG5lZWQgdG8gbWFudWFsbHkgY3JlYXRlIHRoZSBPRgogCSAqIHBsYXRmb3JtIGRldmljZXMgZm9yIHRoZSBQQ0kgaG9zdCBicmlkZ2VzCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L3dpaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC93aWkuYwppbmRleCAxNzRhMDRhLi41Y2RjYzdjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L3dpaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvd2lpLmMKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxsaW51eC9sbWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogI2luY2x1ZGUgPG1tL21tdV9kZWNsLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTY1LDcgKzY1LDcgQEAKIAogdm9pZCBfX2luaXQgd2lpX21lbW9yeV9maXh1cHModm9pZCkKIHsKLQlzdHJ1Y3QgbG1iX3Byb3BlcnR5ICpwID0gbG1iLm1lbW9yeS5yZWdpb247CisJc3RydWN0IG1lbWJsb2NrX3Byb3BlcnR5ICpwID0gbWVtYmxvY2subWVtb3J5LnJlZ2lvbjsKIAogCS8qCiAJICogVGhpcyBpcyBwYXJ0IG9mIGEgd29ya2Fyb3VuZCB0byBhbGxvdyB0aGUgdXNlIG9mIHR3bwpAQCAtNzcsNyArNzcsNyBAQAogCSAqIGJldHdlZW4gYm90aCByYW5nZXMuCiAJICovCiAKLQlCVUdfT04obG1iLm1lbW9yeS5jbnQgIT0gMik7CisJQlVHX09OKG1lbWJsb2NrLm1lbW9yeS5jbnQgIT0gMik7CiAJQlVHX09OKCFwYWdlX2FsaWduZWQocFswXS5iYXNlKSB8fCAhcGFnZV9hbGlnbmVkKHBbMV0uYmFzZSkpOwogCiAJcFswXS5zaXplID0gX0FMSUdOX0RPV04ocFswXS5zaXplLCBQQUdFX1NJWkUpOwpAQCAtOTIsMTEgKzkyLDExIEBACiAKIAlwWzBdLnNpemUgKz0gd2lpX2hvbGVfc2l6ZSArIHBbMV0uc2l6ZTsKIAotCWxtYi5tZW1vcnkuY250ID0gMTsKLQlsbWJfYW5hbHl6ZSgpOworCW1lbWJsb2NrLm1lbW9yeS5jbnQgPSAxOworCW1lbWJsb2NrX2FuYWx5emUoKTsKIAogCS8qIHJlc2VydmUgdGhlIGhvbGUgKi8KLQlsbWJfcmVzZXJ2ZSh3aWlfaG9sZV9zdGFydCwgd2lpX2hvbGVfc2l6ZSk7CisJbWVtYmxvY2tfcmVzZXJ2ZSh3aWlfaG9sZV9zdGFydCwgd2lpX2hvbGVfc2l6ZSk7CiAKIAkvKiBhbGxvdyBpb3JlbWFwcGluZyB0aGUgYWRkcmVzcyBzcGFjZSBpbiB0aGUgaG9sZSAqLwogCV9fYWxsb3dfaW9yZW1hcF9yZXNlcnZlZCA9IDE7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWYuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9tZi5jCmluZGV4IGQyYzFkNDkuLjMzZTVmYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9tZi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9tZi5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3BjaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3BjaS5jCmluZGV4IDNmYzJlNjQuLmFiMzk2MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvcGNpLmMKQEAgLTQ0NSw3ICs0NDUsMTEgQEAKIAl9CiAKIAlhbGxvY2F0ZV9kZXZpY2VfYmFycyhwZGV2KTsKLQlpc2VyaWVzX2RldmljZV9pbmZvcm1hdGlvbihwZGV2LCBidXMsICpzdWJfYnVzKTsKKwlpZiAobGlrZWx5KHN1Yl9idXMpKQorCQlpc2VyaWVzX2RldmljZV9pbmZvcm1hdGlvbihwZGV2LCBidXMsICpzdWJfYnVzKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAiUENJOiBEZXZpY2Ugbm9kZSAlcyBoYXMgbWlzc2luZyBvciBpbnZhbGlkICIKKwkJCQkibGludXgsc3ViYnVzIHByb3BlcnR5XG4iLCBub2RlLT5mdWxsX25hbWUpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3Zpby5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3Zpby5jCmluZGV4IDAwYjY3MzAuLmI2ZGI3Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy92aW8uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvdmlvLmMKQEAgLTg3LDEyICs4NywxMSBAQAogCiAJaWYgKCFucCkKIAkJcmV0dXJuIE5VTEw7Ci0JbnAtPmZ1bGxfbmFtZSA9IGttYWxsb2Moc3RybGVuKHBhdGgpICsgMSwgR0ZQX0tFUk5FTCk7CisJbnAtPmZ1bGxfbmFtZSA9IGtzdHJkdXAocGF0aCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFucC0+ZnVsbF9uYW1lKSB7CiAJCWtmcmVlKG5wKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCXN0cmNweShucC0+ZnVsbF9uYW1lLCBwYXRoKTsKIAlvZl9ub2RlX3NldF9mbGFnKG5wLCBPRl9EWU5BTUlDKTsKIAlrcmVmX2luaXQoJm5wLT5rcmVmKTsKIAlucC0+cGFyZW50ID0gb2Zfbm9kZV9nZXQocGFyZW50KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvc2V0dXAuYwppbmRleCAzOWRmNzA1Li4zZmZmOGQ5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9zZXR1cC5jCkBAIC00MSw3ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1iLmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmMKaW5kZXggNjI3ZWUwOC4uYTVkOTA3YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmMKQEAgLTIxNiw3ICsyMTYsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGdwaW9fbWRpb19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKK3N0YXRpYyBpbnQgX19kZXZpbml0IGdwaW9fbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldiwKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZvZmRldi0+ZGV2OwpAQCAtMjc1LDcgKzI3NSw3IEBACiB9CiAKIAotc3RhdGljIGludCBncGlvX21kaW9fcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgZ3Bpb19tZGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG1paV9idXMgKmJ1cyA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvaW9tbXUuYwppbmRleCA3YjFkNjA4Li4xZjlmYjJjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2lvbW11LmMKQEAgLTIwNCw3ICsyMDQsNyBAQAogCXByX2RlYnVnKCIgLT4gJXNcbiIsIF9fZnVuY19fKTsKIAogCS8qIEFsbG9jYXRlIGEgc3BhcmUgcGFnZSB0byBtYXAgYWxsIGludmFsaWQgSU9UTEIgcGFnZXMuICovCi0JdG1wID0gbG1iX2FsbG9jKElPQk1BUF9QQUdFX1NJWkUsIElPQk1BUF9QQUdFX1NJWkUpOworCXRtcCA9IG1lbWJsb2NrX2FsbG9jKElPQk1BUF9QQUdFX1NJWkUsIElPQk1BUF9QQUdFX1NJWkUpOwogCWlmICghdG1wKQogCQlwYW5pYygiSU9CTUFQOiBDYW5ub3QgYWxsb2NhdGUgc3BhcmUgcGFnZSEiKTsKIAkvKiBFbXB0eSBsMSBpcyBtYXJrZWQgaW52YWxpZCAqLwpAQCAtMjc1LDcgKzI3NSw3IEBACiAJcmV0dXJuOwogI2VuZGlmCiAJLyogRm9yIDJHIHNwYWNlLCA4eDY0IHBhZ2VzICgyXjIxIGJ5dGVzKSBpcyBtYXggdG90YWwgbDIgc2l6ZSAqLwotCWlvYl9sMl9iYXNlID0gKHUzMiAqKWFic190b192aXJ0KGxtYl9hbGxvY19iYXNlKDFVTDw8MjEsIDFVTDw8MjEsIDB4ODAwMDAwMDApKTsKKwlpb2JfbDJfYmFzZSA9ICh1MzIgKilhYnNfdG9fdmlydChtZW1ibG9ja19hbGxvY19iYXNlKDFVTDw8MjEsIDFVTDw8MjEsIDB4ODAwMDAwMDApKTsKIAogCXByaW50ayhLRVJOX0lORk8gIklPQk1BUCBMMiBhbGxvY2F0ZWQgYXQ6ICVwXG4iLCBpb2JfbDJfYmFzZSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfMzIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV8zMi5jCmluZGV4IDFlOWViYTEuLjQxNWNhNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV8zMi5jCkBAIC0zMTAsOCArMzEwLDEyIEBACiAJLyogUmVzdG9yZSBsb3cgbGV2ZWwgUE1VIG9wZXJhdGlvbnMgKi8KIAlwbXVfdW5sb2NrKCk7CiAKLQkvKiBSZXN0b3JlIGRlY3JlbWVudGVyICovCi0Jd2FrZXVwX2RlY3JlbWVudGVyKCk7CisJLyoKKwkgKiBSZXN0b3JlIGRlY3JlbWVudGVyOyB3ZSdsbCB0YWtlIGEgZGVjcmVtZW50ZXIgaW50ZXJydXB0CisJICogYXMgc29vbiBhcyBpbnRlcnJ1cHRzIGFyZSByZS1lbmFibGVkIGFuZCB0aGUgZ2VuZXJpYworCSAqIGNsb2NrZXZlbnRzIGNvZGUgd2lsbCByZXByb2dyYW0gaXQgd2l0aCB0aGUgcmlnaHQgdmFsdWUuCisJICovCisJc2V0X2RlYygxKTsKIAogCS8qIFJlc3RvcmUgaW50ZXJydXB0cyAqLwogIAltcGljX2NwdV9zZXRfcHJpb3JpdHkocGljX3ByaW8pOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9mZWF0dXJlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2ZlYXR1cmUuYwppbmRleCA5ZTFiOWZkLi4zOWRmNmFiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2ZlYXR1cmUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2ZlYXR1cmUuYwpAQCAtMjEsNiArMjEsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2FkYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BtdS5oPgpAQCAtMjE5MSw3ICsyMTkzLDExIEBACiAJCVBNQUNfVFlQRV9VTktOT1dOX0lOVFJFUElELAlpbnRyZXBpZF9mZWF0dXJlcywKIAkJUE1BQ19NQl9NQVlfU0xFRVAsCiAJfSwKLQl7CSJpTWFjLDEiLAkJCSJpTWFjIChmaXJzdCBnZW5lcmF0aW9uKSIsCisJeyAgICAgICAiUG93ZXJNYWMxMCwyIiwgICAgICAgICAgICAgICAgICJNYWMgbWluaSAoTGF0ZSAyMDA1KSIsCisJCVBNQUNfVFlQRV9VTktOT1dOX0lOVFJFUElELCAgICAgaW50cmVwaWRfZmVhdHVyZXMsCisJCVBNQUNfTUJfTUFZX1NMRUVQLAorCX0sCisgCXsJImlNYWMsMSIsCQkJImlNYWMgKGZpcnN0IGdlbmVyYXRpb24pIiwKIAkJUE1BQ19UWVBFX09SSUdfSU1BQywJCXBhZGRpbmd0b25fZmVhdHVyZXMsCiAJCTAKIAl9LApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9sb3dfaTJjLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2xvd19pMmMuYwppbmRleCAwNmExMzdjLi40ODA1NjdlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2xvd19pMmMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2xvd19pMmMuYwpAQCAtNTQyLDExICs1NDIsMTIgQEAKIAkvKiBNYWtlIHN1cmUgSVJRIGlzIGRpc2FibGVkICovCiAJa3dfd3JpdGVfcmVnKHJlZ19pZXIsIDApOwogCi0JLyogUmVxdWVzdCBjaGlwIGludGVycnVwdC4gV2Ugc2V0IElSUUZfVElNRVIgYmVjYXVzZSB3ZSBkb24ndAorCS8qIFJlcXVlc3QgY2hpcCBpbnRlcnJ1cHQuIFdlIHNldCBJUlFGX05PX1NVU1BFTkQgYmVjYXVzZSB3ZSBkb24ndAogCSAqIHdhbnQgdGhhdCBpbnRlcnJ1cHQgZGlzYWJsZWQgYmV0d2VlbiB0aGUgMiBwYXNzZXMgb2YgZHJpdmVyCiAJICogc3VzcGVuZCBvciB3ZSdsbCBoYXZlIGlzc3VlcyBydW5uaW5nIHRoZSBwZnVuY3MKIAkgKi8KLQlpZiAocmVxdWVzdF9pcnEoaG9zdC0+aXJxLCBrd19pMmNfaXJxLCBJUlFGX1RJTUVSLCAia2V5d2VzdCBpMmMiLCBob3N0KSkKKwlpZiAocmVxdWVzdF9pcnEoaG9zdC0+aXJxLCBrd19pMmNfaXJxLCBJUlFGX05PX1NVU1BFTkQsCisJCQkia2V5d2VzdCBpMmMiLCBob3N0KSkKIAkJaG9zdC0+aXJxID0gTk9fSVJROwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiS2V5V2VzdCBpMmMgQDB4JTA4eCBpcnEgJWQgJXNcbiIsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYwppbmRleCA2MzBhNTMzLi44OTBkNWY3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMKQEAgLTQ2LDYgKzQ2LDEwIEBACiAgICAgICAgIHVuc2lnbmVkIGludCAgICBsZXZlbDsKIH07CiAKKy8qIFdvcmthcm91bmQgZmxhZ3MgZm9yIDMyYml0IHBvd2VybWFjIG1hY2hpbmVzICovCit1bnNpZ25lZCBpbnQgb2ZfaXJxX3dvcmthcm91bmRzOworc3RydWN0IGRldmljZV9ub2RlICpvZl9pcnFfZGZsdF9waWM7CisKIC8qIERlZmF1bHQgYWRkcmVzc2VzICovCiBzdGF0aWMgdm9sYXRpbGUgc3RydWN0IHBtYWNfaXJxX2h3IF9faW9tZW0gKnBtYWNfaXJxX2h3WzRdOwogCkBAIC00MjgsNiArNDMyLDQyIEBACiAJc2V0dXBfaXJxKGlycV9jcmVhdGVfbWFwcGluZyhOVUxMLCAyMCksICZ4bW9uX2FjdGlvbik7CiAjZW5kaWYKIH0KKworaW50IG9mX2lycV9tYXBfb2xkd29ybGQoc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2UsIGludCBpbmRleCwKKwkJCXN0cnVjdCBvZl9pcnEgKm91dF9pcnEpCit7CisJY29uc3QgdTMyICppbnRzID0gTlVMTDsKKwlpbnQgaW50bGVuOworCisJLyoKKwkgKiBPbGQgbWFjaGluZXMganVzdCBoYXZlIGEgbGlzdCBvZiBpbnRlcnJ1cHQgbnVtYmVycworCSAqIGFuZCBubyBpbnRlcnJ1cHQtY29udHJvbGxlciBub2Rlcy4gV2UgYWxzbyBoYXZlIGRvZGd5CisJICogY2FzZXMgd2hlcmUgdGhlIEFQUEwsaW50ZXJydXB0cyBwcm9wZXJ0eSBpcyBjb21wbGV0ZWx5CisJICogbWlzc2luZyBiZWhpbmQgcGNpLXBjaSBicmlkZ2VzIGFuZCB3ZSBoYXZlIHRvIGdldCBpdAorCSAqIGZyb20gdGhlIHBhcmVudCAodGhlIGJyaWRnZSBpdHNlbGYsIGFzIGFwcGxlIGp1c3Qgd2lyZWQKKwkgKiBldmVyeXRoaW5nIHRvZ2V0aGVyIG9uIHRoZXNlKQorCSAqLworCXdoaWxlIChkZXZpY2UpIHsKKwkJaW50cyA9IG9mX2dldF9wcm9wZXJ0eShkZXZpY2UsICJBQVBMLGludGVycnVwdHMiLCAmaW50bGVuKTsKKwkJaWYgKGludHMgIT0gTlVMTCkKKwkJCWJyZWFrOworCQlkZXZpY2UgPSBkZXZpY2UtPnBhcmVudDsKKwkJaWYgKGRldmljZSAmJiBzdHJjbXAoZGV2aWNlLT50eXBlLCAicGNpIikgIT0gMCkKKwkJCWJyZWFrOworCX0KKwlpZiAoaW50cyA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpbnRsZW4gLz0gc2l6ZW9mKHUzMik7CisKKwlpZiAoaW5kZXggPj0gaW50bGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW91dF9pcnEtPmNvbnRyb2xsZXIgPSBOVUxMOworCW91dF9pcnEtPnNwZWNpZmllclswXSA9IGludHNbaW5kZXhdOworCW91dF9pcnEtPnNpemUgPSAxOworCisJcmV0dXJuIDA7Cit9CiAjZW5kaWYgLyogQ09ORklHX1BQQzMyICovCiAKIHN0YXRpYyB2b2lkIHBtYWNfdTNfY2FzY2FkZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCkBAIC01NTksMTkgKzU5OSwzOSBAQAogCiB2b2lkIF9faW5pdCBwbWFjX3BpY19pbml0KHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGZsYWdzID0gMDsKLQogCS8qIFdlIGNvbmZpZ3VyZSB0aGUgT0YgcGFyc2luZyBiYXNlZCBvbiBvdXIgb2xkd29ybGQgdnMuIG5ld3dvcmxkCiAJICogcGxhdGZvcm0gdHlwZSBhbmQgd2V0aGVyIHdlIHdlcmUgYm9vdGVkIGJ5IEJvb3RYLgogCSAqLwogI2lmZGVmIENPTkZJR19QUEMzMgogCWlmICghcG1hY19uZXd3b3JsZCkKLQkJZmxhZ3MgfD0gT0ZfSU1BUF9PTERXT1JMRF9NQUM7CisJCW9mX2lycV93b3JrYXJvdW5kcyB8PSBPRl9JTUFQX09MRFdPUkxEX01BQzsKIAlpZiAob2ZfZ2V0X3Byb3BlcnR5KG9mX2Nob3NlbiwgImxpbnV4LGJvb3R4IiwgTlVMTCkgIT0gTlVMTCkKLQkJZmxhZ3MgfD0gT0ZfSU1BUF9OT19QSEFORExFOwotI2VuZGlmIC8qIENPTkZJR19QUENfMzIgKi8KKwkJb2ZfaXJxX3dvcmthcm91bmRzIHw9IE9GX0lNQVBfTk9fUEhBTkRMRTsKIAotCW9mX2lycV9tYXBfaW5pdChmbGFncyk7CisJLyogSWYgd2UgZG9uJ3QgaGF2ZSBwaGFuZGxlcyBvbiBhIG5ld3dvcmxkLCB0aGVuIHRyeSB0byBsb2NhdGUgYQorCSAqIGRlZmF1bHQgaW50ZXJydXB0IGNvbnRyb2xsZXIgKGhhcHBlbnMgd2hlbiBib290aW5nIHdpdGggQm9vdFgpLgorCSAqIFdlIGRvIGEgZmlyc3QgbWF0Y2ggaGVyZSwgaG9wZWZ1bGx5LCB0aGF0IG9ubHkgZXZlciBoYXBwZW5zIG9uCisJICogbWFjaGluZXMgd2l0aCBvbmUgY29udHJvbGxlci4KKwkgKi8KKwlpZiAocG1hY19uZXd3b3JsZCAmJiAob2ZfaXJxX3dvcmthcm91bmRzICYgT0ZfSU1BUF9OT19QSEFORExFKSkgeworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCisJCWZvcl9lYWNoX25vZGVfd2l0aF9wcm9wZXJ0eShucCwgImludGVycnVwdC1jb250cm9sbGVyIikgeworCQkJLyogU2tpcCAvY2hvc2VuL2ludGVycnVwdC1jb250cm9sbGVyICovCisJCQlpZiAoc3RyY21wKG5wLT5uYW1lLCAiY2hvc2VuIikgPT0gMCkKKwkJCQljb250aW51ZTsKKwkJCS8qIEl0IHNlZW1zIGxpa2UgYXQgbGVhc3Qgb25lIHBlcnNvbiB3YW50cworCQkJICogdG8gdXNlIEJvb3RYIG9uIGEgbWFjaGluZSB3aXRoIGFuIEFwcGxlS2l3aQorCQkJICogY29udHJvbGxlciB3aGljaCBoYXBwZW5zIHRvIHByZXRlbmQgdG8gYmUgYW4KKwkJCSAqIGludGVycnVwdCBjb250cm9sbGVyIHRvby4gKi8KKwkJCWlmIChzdHJjbXAobnAtPm5hbWUsICJBcHBsZUtpd2kiKSA9PSAwKQorCQkJCWNvbnRpbnVlOworCQkJLyogSSB0aGluayB3ZSBmb3VuZCBvbmUgISAqLworCQkJb2ZfaXJxX2RmbHRfcGljID0gbnA7CisJCQlicmVhazsKKwkJfQorCX0KKyNlbmRpZiAvKiBDT05GSUdfUFBDMzIgKi8KIAogCS8qIFdlIGZpcnN0IHRyeSB0byBkZXRlY3QgQXBwbGUncyBuZXcgQ29yZTk5IGNoaXBzZXQsIHNpbmNlIG1hYy1pbwogCSAqIGlzIHF1aXRlIGRpZmZlcmVudCBvbiB0aG9zZSBtYWNoaW5lcyBhbmQgY29udGFpbnMgYW4gSUJNIE1QSUMyLgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zZXR1cC5jCmluZGV4IGYxZDAxMzIuLjlkZWIyNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NldHVwLmMKQEAgLTUxLDcgKzUxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxsaW51eC9sbWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL3JlZy5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgpAQCAtNjE5LDcgKzYxOSw3IEBACiAJICogZHJpdmVyIG5lZWRzIHRoYXQuIFdlIGhhdmUgdG8gYWxsb2NhdGUgaXQgbm93LiBXZSBhbGxvY2F0ZSA0awogCSAqICgxIHNtYWxsIHBhZ2UpIGZvciBub3cuCiAJICovCi0Jc211X2NtZGJ1Zl9hYnMgPSBsbWJfYWxsb2NfYmFzZSg0MDk2LCA0MDk2LCAweDgwMDAwMDAwVUwpOworCXNtdV9jbWRidWZfYWJzID0gbWVtYmxvY2tfYWxsb2NfYmFzZSg0MDk2LCA0MDk2LCAweDgwMDAwMDAwVUwpOwogI2VuZGlmIC8qIENPTkZJR19QTUFDX1NNVSAqLwogCiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9odGFiLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9odGFiLmMKaW5kZXggMWU4YTFlMy4uMzEyNGNmNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvaHRhYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL2h0YWIuYwpAQCAtMTksNyArMTksNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9sbWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgpAQCAtMTM2LDcgKzEzNiw3IEBACiAJICogQXMgbHYxX3JlYWRfaHRhYl9lbnRyaWVzKCkgZG9lcyBub3QgZ2l2ZSB1cyB0aGUgUlBOLCB3ZSBjYW4KIAkgKiBub3Qgc3ludGhlc2l6ZSB0aGUgbmV3IGhwdGVfciB2YWx1ZSBoZXJlLCBhbmQgdGhlcmVmb3JlIGNhbgogCSAqIG5vdCB1cGRhdGUgdGhlIGhwdGUgd2l0aCBsdjFfaW5zZXJ0X2h0YWJfZW50cnkoKSwgc28gd2UKLQkgKiBpbnN0ZWQgaW52YWxpZGF0ZSBpdCBhbmQgYXNrIHRoZSBjYWxsZXIgdG8gdXBkYXRlIGl0IHZpYQorCSAqIGluc3RlYWQgaW52YWxpZGF0ZSBpdCBhbmQgYXNrIHRoZSBjYWxsZXIgdG8gdXBkYXRlIGl0IHZpYQogCSAqIHBzM19ocHRlX2luc2VydCgpIGJ5IHJldHVybmluZyBhIC0xIHZhbHVlLgogCSAqLwogCWlmICghSFBURV9WX0NPTVBBUkUoaHB0ZV92LCB3YW50X3YpIHx8ICEoaHB0ZV92ICYgSFBURV9WX1ZBTElEKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvbW0uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL21tLmMKaW5kZXggNzkyNTc1MS4uYzIwNDU4OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvbW0uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9tbS5jCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtb3J5X2hvdHBsdWcuaD4KLSNpbmNsdWRlIDxsaW51eC9sbWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPGFzbS9jZWxsLXJlZ3MuaD4KQEAgLTMxOCw4ICszMTgsOCBAQAogCQlyZXR1cm4gcmVzdWx0OwogCX0KIAotCWxtYl9hZGQoc3RhcnRfYWRkciwgbWFwLnIxLnNpemUpOwotCWxtYl9hbmFseXplKCk7CisJbWVtYmxvY2tfYWRkKHN0YXJ0X2FkZHIsIG1hcC5yMS5zaXplKTsKKwltZW1ibG9ja19hbmFseXplKCk7CiAKIAlyZXN1bHQgPSBvbmxpbmVfcGFnZXMoc3RhcnRfcGZuLCBucl9wYWdlcyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL29zLWFyZWEuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL29zLWFyZWEuYwppbmRleCBkZDUyMWExLi41Yjc1OWI2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9vcy1hcmVhLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvb3MtYXJlYS5jCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1iLmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIApAQCAtNzIzLDcgKzcyMyw3IEBACiAgKiBmbGFzaCB0byBhIGhpZ2ggYWRkcmVzcyBpbiB0aGUgYm9vdCBtZW1vcnkgcmVnaW9uIGFuZCB0aGVuIHB1dHMgdGhhdCBSQU0KICAqIGFkZHJlc3MgYW5kIHRoZSBieXRlIGNvdW50IGludG8gdGhlIHJlcG9zaXRvcnkgZm9yIHJldHJpZXZhbCBieSB0aGUgZ3Vlc3QuCiAgKiBXZSBjb3B5IHRoZSBkYXRhIHdlIHdhbnQgaW50byBhIHN0YXRpYyB2YXJpYWJsZSBhbmQgYWxsb3cgdGhlIG1lbW9yeSBzZXR1cAotICogYnkgdGhlIEhWIHRvIGJlIGNsYWltZWQgYnkgdGhlIGxtYiBtYW5hZ2VyLgorICogYnkgdGhlIEhWIHRvIGJlIGNsYWltZWQgYnkgdGhlIG1lbWJsb2NrIG1hbmFnZXIuCiAgKgogICogVGhlIG9zIGFyZWEgbWlycm9yIHdpbGwgbm90IGJlIGF2YWlsYWJsZSB0byBhIHNlY29uZCBzdGFnZSBrZXJuZWwsIGFuZAogICogdGhlIGhlYWRlciB2ZXJpZnkgd2lsbCBmYWlsLiAgSW4gdGhpcyBjYXNlLCB0aGUgc2F2ZWRfcGFyYW1zIHZhbHVlcyB3aWxsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUKaW5kZXggM2RiZWYzMC4uMDQ2YWNlOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZQpAQCAtMjYsMyArMjYsNyBAQAogb2JqLSQoQ09ORklHX1BIWVBfRFVNUCkJKz0gcGh5cF9kdW1wLm8KIG9iai0kKENPTkZJR19DTU0pCQkrPSBjbW0ubwogb2JqLSQoQ09ORklHX0RUTCkJCSs9IGR0bC5vCisKK2lmZXEgKCQoQ09ORklHX1BQQ19QU0VSSUVTKSx5KQorb2JqLSQoQ09ORklHX1NVU1BFTkQpCQkrPSBzdXNwZW5kLm8KK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jCmluZGV4IGQ3MWU1ODUuLjIyN2MxYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jCkBAIC00NjMsNiArNDYzLDcgQEAKIAkJCQlicmVhazsKIAogCQkJaWYgKGdldF9jcHVfY3VycmVudF9zdGF0ZShjcHUpID09IENQVV9TVEFURV9PTkxJTkUpIHsKKwkJCQlzZXRfcHJlZmVycmVkX29mZmxpbmVfc3RhdGUoY3B1LCBDUFVfU1RBVEVfT0ZGTElORSk7CiAJCQkJY3B1X21hcHNfdXBkYXRlX2RvbmUoKTsKIAkJCQlyYyA9IGNwdV9kb3duKGNwdSk7CiAJCQkJaWYgKHJjKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9jYWNoZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9jYWNoZS5jCmluZGV4IDMwYjk4N2IuLjhlZDBkMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfY2FjaGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2NhY2hlLmMKQEAgLTI4OCw4ICsyODgsNyBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJnBjaV9pb19hZGRyX2NhY2hlX3Jvb3QucGlhcl9sb2NrKTsKIAotCXdoaWxlICgoZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZGV2KSkgIT0gTlVMTCkgewotCisJZm9yX2VhY2hfcGNpX2RldihkZXYpIHsKIAkJcGNpX2FkZHJfY2FjaGVfaW5zZXJ0X2RldmljZShkZXYpOwogCiAJCWRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZXZlbnRfc291cmNlcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2V2ZW50X3NvdXJjZXMuYwppbmRleCBlODg5YzlkLi4yNjA1YzMxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZXZlbnRfc291cmNlcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ldmVudF9zb3VyY2VzLmMKQEAgLTQxLDkgKzQxLDEyIEBACiAJCQlpZiAoY291bnQgPiAxNSkKIAkJCQlicmVhazsKIAkJCXZpcnFzW2NvdW50XSA9IGlycV9jcmVhdGVfbWFwcGluZyhOVUxMLCAqKG9waWNwcm9wKyspKTsKLQkJCWlmICh2aXJxc1tjb3VudF0gPT0gTk9fSVJRKQotCQkJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGFsbG9jYXRlIGludGVycnVwdCAiCi0JCQkJICAgICAgICJudW1iZXIgZm9yICVzXG4iLCBucC0+ZnVsbF9uYW1lKTsKKwkJCWlmICh2aXJxc1tjb3VudF0gPT0gTk9fSVJRKSB7CisJCQkJcHJfZXJyKCJldmVudC1zb3VyY2VzOiBVbmFibGUgdG8gYWxsb2NhdGUgIgorCQkJCSAgICAgICAiaW50ZXJydXB0IG51bWJlciBmb3IgJXNcbiIsCisJCQkJICAgICAgIG5wLT5mdWxsX25hbWUpOworCQkJCVdBUk5fT04oMSk7CisJCQl9CiAJCQllbHNlCiAJCQkJY291bnQrKzsKIApAQCAtNTksOSArNjIsMTIgQEAKIAkJCXZpcnFzW2NvdW50XSA9IGlycV9jcmVhdGVfb2ZfbWFwcGluZyhvaXJxLmNvbnRyb2xsZXIsCiAJCQkJCQkJICAgIG9pcnEuc3BlY2lmaWVyLAogCQkJCQkJCSAgICBvaXJxLnNpemUpOwotCQkJaWYgKHZpcnFzW2NvdW50XSA9PSBOT19JUlEpCi0JCQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYWxsb2NhdGUgaW50ZXJydXB0ICIKLQkJCQkgICAgICAgIm51bWJlciBmb3IgJXNcbiIsIG5wLT5mdWxsX25hbWUpOworCQkJaWYgKHZpcnFzW2NvdW50XSA9PSBOT19JUlEpIHsKKwkJCQlwcl9lcnIoImV2ZW50LXNvdXJjZXM6IFVuYWJsZSB0byBhbGxvY2F0ZSAiCisJCQkJICAgICAgICJpbnRlcnJ1cHQgbnVtYmVyIGZvciAlc1xuIiwKKwkJCQkgICAgICAgbnAtPmZ1bGxfbmFtZSk7CisJCQkJV0FSTl9PTigxKTsKKwkJCX0KIAkJCWVsc2UKIAkJCQljb3VudCsrOwogCQl9CkBAIC03MCw4ICs3Niw5IEBACiAJLyogTm93IHJlcXVlc3QgdGhlbSAqLwogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAJCWlmIChyZXF1ZXN0X2lycSh2aXJxc1tpXSwgaGFuZGxlciwgMCwgbmFtZSwgTlVMTCkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlcXVlc3QgaW50ZXJydXB0ICVkIGZvciAiCi0JCQkgICAgICAgIiVzXG4iLCB2aXJxc1tpXSwgbnAtPmZ1bGxfbmFtZSk7CisJCQlwcl9lcnIoImV2ZW50LXNvdXJjZXM6IFVuYWJsZSB0byByZXF1ZXN0IGludGVycnVwdCAiCisJCQkgICAgICAgIiVkIGZvciAlc1xuIiwgdmlycXNbaV0sIG5wLT5mdWxsX25hbWUpOworCQkJV0FSTl9PTigxKTsKIAkJCXJldHVybjsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLWNwdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKaW5kZXggOGY4NWYzOS4uZmQ1MGNjZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKQEAgLTExNiw2ICsxMTYsOSBAQAogCiAJaWYgKGdldF9wcmVmZXJyZWRfb2ZmbGluZV9zdGF0ZShjcHUpID09IENQVV9TVEFURV9JTkFDVElWRSkgewogCQlzZXRfY3B1X2N1cnJlbnRfc3RhdGUoY3B1LCBDUFVfU1RBVEVfSU5BQ1RJVkUpOworCQlpZiAocHBjX21kLnN1c3BlbmRfZGlzYWJsZV9jcHUpCisJCQlwcGNfbWQuc3VzcGVuZF9kaXNhYmxlX2NwdSgpOworCiAJCWNlZGVfbGF0ZW5jeV9oaW50ID0gMjsKIAogCQlnZXRfbHBwYWNhKCktPmlkbGUgPSAxOwpAQCAtMTkwLDEyICsxOTMsMTIgQEAKIAogCWlmIChnZXRfcHJlZmVycmVkX29mZmxpbmVfc3RhdGUoY3B1KSA9PSBDUFVfU1RBVEVfSU5BQ1RJVkUpIHsKIAkJY3B1X3N0YXR1cyA9IDE7Ci0JCWZvciAodHJpZXMgPSAwOyB0cmllcyA8IDEwMDA7IHRyaWVzKyspIHsKKwkJZm9yICh0cmllcyA9IDA7IHRyaWVzIDwgNTAwMDsgdHJpZXMrKykgewogCQkJaWYgKGdldF9jcHVfY3VycmVudF9zdGF0ZShjcHUpID09IENQVV9TVEFURV9JTkFDVElWRSkgewogCQkJCWNwdV9zdGF0dXMgPSAwOwogCQkJCWJyZWFrOwogCQkJfQotCQkJY3B1X3JlbGF4KCk7CisJCQltc2xlZXAoMSk7CiAJCX0KIAl9IGVsc2UgaWYgKGdldF9wcmVmZXJyZWRfb2ZmbGluZV9zdGF0ZShjcHUpID09IENQVV9TVEFURV9PRkZMSU5FKSB7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmMKaW5kZXggMDFlN2I1Yi4uYmM4ODAzNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmMKQEAgLTEwLDE0ICsxMCwxNCBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9vZi5oPgotI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgorI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAjaW5jbHVkZSA8YXNtL3BTZXJpZXNfcmVjb25maWcuaD4KICNpbmNsdWRlIDxhc20vc3BhcnNlbWVtLmg+CiAKLXN0YXRpYyBpbnQgcHNlcmllc19yZW1vdmVfbG1iKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgaW50IGxtYl9zaXplKQorc3RhdGljIGludCBwc2VyaWVzX3JlbW92ZV9tZW1ibG9jayh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGludCBtZW1ibG9ja19zaXplKQogewogCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHN0YXJ0X3BmbjsKIAlzdHJ1Y3Qgem9uZSAqem9uZTsKQEAgLTI2LDcgKzI2LDcgQEAKIAlzdGFydF9wZm4gPSBiYXNlID4+IFBBR0VfU0hJRlQ7CiAKIAlpZiAoIXBmbl92YWxpZChzdGFydF9wZm4pKSB7Ci0JCWxtYl9yZW1vdmUoYmFzZSwgbG1iX3NpemUpOworCQltZW1ibG9ja19yZW1vdmUoYmFzZSwgbWVtYmxvY2tfc2l6ZSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNDEsMjAgKzQxLDIwIEBACiAJICogdG8gc3lzZnMgInN0YXRlIiBmaWxlIGFuZCB3ZSBjYW4ndCByZW1vdmUgc3lzZnMgZW50cmllcwogCSAqIHdoaWxlIHdyaXRpbmcgdG8gaXQuIFNvIHdlIGhhdmUgdG8gZGVmZXIgaXQgdG8gaGVyZS4KIAkgKi8KLQlyZXQgPSBfX3JlbW92ZV9wYWdlcyh6b25lLCBzdGFydF9wZm4sIGxtYl9zaXplID4+IFBBR0VfU0hJRlQpOworCXJldCA9IF9fcmVtb3ZlX3BhZ2VzKHpvbmUsIHN0YXJ0X3BmbiwgbWVtYmxvY2tfc2l6ZSA+PiBQQUdFX1NISUZUKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJLyoKIAkgKiBVcGRhdGUgbWVtb3J5IHJlZ2lvbnMgZm9yIG1lbW9yeSByZW1vdmUKIAkgKi8KLQlsbWJfcmVtb3ZlKGJhc2UsIGxtYl9zaXplKTsKKwltZW1ibG9ja19yZW1vdmUoYmFzZSwgbWVtYmxvY2tfc2l6ZSk7CiAKIAkvKgogCSAqIFJlbW92ZSBodGFiIGJvbHRlZCBtYXBwaW5ncyBmb3IgdGhpcyBzZWN0aW9uIG9mIG1lbW9yeQogCSAqLwogCXN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpX192YShiYXNlKTsKLQlyZXQgPSByZW1vdmVfc2VjdGlvbl9tYXBwaW5nKHN0YXJ0LCBzdGFydCArIGxtYl9zaXplKTsKKwlyZXQgPSByZW1vdmVfc2VjdGlvbl9tYXBwaW5nKHN0YXJ0LCBzdGFydCArIG1lbWJsb2NrX3NpemUpOwogCiAJLyogRW5zdXJlIGFsbCB2bWFsbG9jIG1hcHBpbmdzIGFyZSBmbHVzaGVkIGluIGNhc2UgdGhleSBhbHNvCiAJICogaGl0IHRoYXQgc2VjdGlvbiBvZiBtZW1vcnkKQEAgLTgwLDcgKzgwLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKgotCSAqIEZpbmQgdGhlIGJhZSBhZGRyZXNzIGFuZCBzaXplIG9mIHRoZSBsbWIKKwkgKiBGaW5kIHRoZSBiYWUgYWRkcmVzcyBhbmQgc2l6ZSBvZiB0aGUgbWVtYmxvY2sKIAkgKi8KIAlyZWdzID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgTlVMTCk7CiAJaWYgKCFyZWdzKQpAQCAtODksNyArODksNyBAQAogCWJhc2UgPSAqKHVuc2lnbmVkIGxvbmcgKilyZWdzOwogCWxtYl9zaXplID0gcmVnc1szXTsKIAotCXJldCA9IHBzZXJpZXNfcmVtb3ZlX2xtYihiYXNlLCBsbWJfc2l6ZSk7CisJcmV0ID0gcHNlcmllc19yZW1vdmVfbWVtYmxvY2soYmFzZSwgbG1iX3NpemUpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEwOSw3ICsxMDksNyBAQAogCQlyZXR1cm4gMDsKIAogCS8qCi0JICogRmluZCB0aGUgYmFzZSBhbmQgc2l6ZSBvZiB0aGUgbG1iCisJICogRmluZCB0aGUgYmFzZSBhbmQgc2l6ZSBvZiB0aGUgbWVtYmxvY2sKIAkgKi8KIAlyZWdzID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgTlVMTCk7CiAJaWYgKCFyZWdzKQpAQCAtMTIxLDcgKzEyMSw3IEBACiAJLyoKIAkgKiBVcGRhdGUgbWVtb3J5IHJlZ2lvbiB0byByZXByZXNlbnQgdGhlIG1lbW9yeSBhZGQKIAkgKi8KLQlyZXQgPSBsbWJfYWRkKGJhc2UsIGxtYl9zaXplKTsKKwlyZXQgPSBtZW1ibG9ja19hZGQoYmFzZSwgbG1iX3NpemUpOwogCXJldHVybiAocmV0IDwgMCkgPyAtRUlOVkFMIDogMDsKIH0KIApAQCAtMTQyLDEwICsxNDIsMTAgQEAKIAl9CiAKIAlpZiAoYWN0aW9uID09IFBTRVJJRVNfRFJDT05GX01FTV9BREQpIHsKLQkJcmMgPSBsbWJfYWRkKCpiYXNlLCAqbG1iX3NpemUpOworCQlyYyA9IG1lbWJsb2NrX2FkZCgqYmFzZSwgKmxtYl9zaXplKTsKIAkJcmMgPSAocmMgPCAwKSA/IC1FSU5WQUwgOiAwOwogCX0gZWxzZSBpZiAoYWN0aW9uID09IFBTRVJJRVNfRFJDT05GX01FTV9SRU1PVkUpIHsKLQkJcmMgPSBwc2VyaWVzX3JlbW92ZV9sbWIoKmJhc2UsICpsbWJfc2l6ZSk7CisJCXJjID0gcHNlcmllc19yZW1vdmVfbWVtYmxvY2soKmJhc2UsICpsbWJfc2l6ZSk7CiAJfSBlbHNlIHsKIAkJcmMgPSAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKaW5kZXggZDI2MTgyZC4uMzk1ODQ4ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKQEAgLTY2LDcgKzY2LDcgQEAKIAl0Y2VwID0gKCh1NjQgKil0YmwtPml0X2Jhc2UpICsgaW5kZXg7CiAKIAl3aGlsZSAobnBhZ2VzLS0pIHsKLQkJLyogY2FuJ3QgbW92ZSB0aGlzIG91dCBzaW5jZSB3ZSBtaWdodCBjcm9zcyBMTUIgYm91bmRhcnkgKi8KKwkJLyogY2FuJ3QgbW92ZSB0aGlzIG91dCBzaW5jZSB3ZSBtaWdodCBjcm9zcyBNRU1CTE9DSyBib3VuZGFyeSAqLwogCQlycG4gPSAodmlydF90b19hYnModWFkZHIpKSA+PiBUQ0VfU0hJRlQ7CiAJCSp0Y2VwID0gcHJvdG9fdGNlIHwgKHJwbiAmIFRDRV9SUE5fTUFTSykgPDwgVENFX1JQTl9TSElGVDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BoeXBfZHVtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BoeXBfZHVtcC5jCmluZGV4IDdlYmQ5ZTguLjZlNzc0MmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9waHlwX2R1bXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGh5cF9kdW1wLmMKQEAgLTI1NSwxMiArMjU1LDEyIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qKgotICogcmVsZWFzZV9tZW1vcnlfcmFuZ2UgLS0gcmVsZWFzZSBtZW1vcnkgcHJldmlvdXNseSBsbWJfcmVzZXJ2ZWQKKyAqIHJlbGVhc2VfbWVtb3J5X3JhbmdlIC0tIHJlbGVhc2UgbWVtb3J5IHByZXZpb3VzbHkgbWVtYmxvY2tfcmVzZXJ2ZWQKICAqIEBzdGFydF9wZm46IHN0YXJ0aW5nIHBoeXNpY2FsIGZyYW1lIG51bWJlcgogICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgcGFnZXMgdG8gZnJlZS4KICAqCiAgKiBUaGlzIHJvdXRpbmUgd2lsbCByZWxlYXNlIG1lbW9yeSB0aGF0IGhhZCBiZWVuIHByZXZpb3VzbHkKLSAqIGxtYl9yZXNlcnZlZCBpbiBlYXJseSBib290LiBUaGUgcmVsZWFzZWQgbWVtb3J5IGJlY29tZXMKKyAqIG1lbWJsb2NrX3Jlc2VydmVkIGluIGVhcmx5IGJvb3QuIFRoZSByZWxlYXNlZCBtZW1vcnkgYmVjb21lcwogICogYXZhaWxhYmxlIGZvciBnZW5yZWFsIHVzZS4KICAqLwogc3RhdGljIHZvaWQgcmVsZWFzZV9tZW1vcnlfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcmFzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcmFzLmMKaW5kZXggNDFhM2U5YS4uYTRmYzZkYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Jhcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yYXMuYwpAQCAtNjEsNyArNjEsNiBAQAogCiAjZGVmaW5lIEVQT1dfU0VOU09SX1RPS0VOCTkKICNkZWZpbmUgRVBPV19TRU5TT1JfSU5ERVgJMAotI2RlZmluZSBSQVNfVkVDVE9SX09GRlNFVAkweDUwMAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgcmFzX2Vwb3dfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgaXJxcmV0dXJuX3QgcmFzX2Vycm9yX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwpAQCAtMTIxLDcgKzEyMCw3IEBACiAJc3Bpbl9sb2NrKCZyYXNfbG9nX2J1Zl9sb2NrKTsKIAogCXN0YXR1cyA9IHJ0YXNfY2FsbChyYXNfY2hlY2tfZXhjZXB0aW9uX3Rva2VuLCA2LCAxLCBOVUxMLAotCQkJICAgUkFTX1ZFQ1RPUl9PRkZTRVQsCisJCQkgICBSVEFTX1ZFQ1RPUl9FWFRFUk5BTF9JTlRFUlJVUFQsCiAJCQkgICBpcnFfbWFwW2lycV0uaHdpcnEsCiAJCQkgICBSVEFTX0VQT1dfV0FSTklORyB8IFJUQVNfUE9XRVJNR01fRVZFTlRTLAogCQkJICAgY3JpdGljYWwsIF9fcGEoJnJhc19sb2dfYnVmKSwKQEAgLTE1Niw3ICsxNTUsNyBAQAogCXNwaW5fbG9jaygmcmFzX2xvZ19idWZfbG9jayk7CiAKIAlzdGF0dXMgPSBydGFzX2NhbGwocmFzX2NoZWNrX2V4Y2VwdGlvbl90b2tlbiwgNiwgMSwgTlVMTCwKLQkJCSAgIFJBU19WRUNUT1JfT0ZGU0VULAorCQkJICAgUlRBU19WRUNUT1JfRVhURVJOQUxfSU5URVJSVVBULAogCQkJICAgaXJxX21hcFtpcnFdLmh3aXJxLAogCQkJICAgUlRBU19JTlRFUk5BTF9FUlJPUiwgMSAvKlRpbWUgQ3JpdGljYWwgKi8sCiAJCQkgICBfX3BhKCZyYXNfbG9nX2J1ZiksCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcmVjb25maWcuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yZWNvbmZpZy5jCmluZGV4IDFhNTg2MzcuLjU3ZGRiYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yZWNvbmZpZy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yZWNvbmZpZy5jCkBAIC0xMTgsMTIgKzExOCwxMCBAQAogCWlmICghbnApCiAJCWdvdG8gb3V0X2VycjsKIAotCW5wLT5mdWxsX25hbWUgPSBrbWFsbG9jKHN0cmxlbihwYXRoKSArIDEsIEdGUF9LRVJORUwpOworCW5wLT5mdWxsX25hbWUgPSBrc3RyZHVwKHBhdGgsIEdGUF9LRVJORUwpOwogCWlmICghbnAtPmZ1bGxfbmFtZSkKIAkJZ290byBvdXRfZXJyOwogCi0Jc3RyY3B5KG5wLT5mdWxsX25hbWUsIHBhdGgpOwotCiAJbnAtPnByb3BlcnRpZXMgPSBwcm9wbGlzdDsKIAlvZl9ub2RlX3NldF9mbGFnKG5wLCBPRl9EWU5BTUlDKTsKIAlrcmVmX2luaXQoJm5wLT5rcmVmKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zdXNwZW5kLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc3VzcGVuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNzIwOTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc3VzcGVuZC5jCkBAIC0wLDAgKzEsMjE0IEBACisvKgorICAqIENvcHlyaWdodCAoQykgMjAxMCBCcmlhbiBLaW5nIElCTSBDb3Jwb3JhdGlvbgorICAqCisgICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgKgorICAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICoKKyAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaHZjYWxsLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CisjaW5jbHVkZSA8YXNtL3J0YXMuaD4KKworc3RhdGljIHU2NCBzdHJlYW1faWQ7CitzdGF0aWMgc3RydWN0IHN5c19kZXZpY2Ugc3VzcGVuZF9zeXNkZXY7CitzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKHN1c3BlbmRfd29yayk7CitzdGF0aWMgc3RydWN0IHJ0YXNfc3VzcGVuZF9tZV9kYXRhIHN1c3BlbmRfZGF0YTsKK3N0YXRpYyBhdG9taWNfdCBzdXNwZW5kaW5nOworCisvKioKKyAqIHBzZXJpZXNfc3VzcGVuZF9iZWdpbiAtIEZpcnN0IHBoYXNlIG9mIGhpYmVybmF0aW9uCisgKgorICogQ2hlY2sgdG8gZW5zdXJlIHdlIGFyZSBpbiBhIHZhbGlkIHN0YXRlIHRvIGhpYmVybmF0ZQorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqIAkwIG9uIHN1Y2Nlc3MgLyBvdGhlciBvbiBmYWlsdXJlCisgKiovCitzdGF0aWMgaW50IHBzZXJpZXNfc3VzcGVuZF9iZWdpbihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJbG9uZyB2YXNpX3N0YXRlLCByYzsKKwl1bnNpZ25lZCBsb25nIHJldGJ1ZltQTFBBUl9IQ0FMTF9CVUZTSVpFXTsKKworCS8qIE1ha2Ugc3VyZSB0aGUgc3RhdGUgaXMgdmFsaWQgKi8KKwlyYyA9IHBscGFyX2hjYWxsKEhfVkFTSV9TVEFURSwgcmV0YnVmLCBzdHJlYW1faWQpOworCisJdmFzaV9zdGF0ZSA9IHJldGJ1ZlswXTsKKworCWlmIChyYykgeworCQlwcl9lcnIoInBzZXJpZXNfc3VzcGVuZF9iZWdpbjogdmFzaV9zdGF0ZSByZXR1cm5lZCAlbGRcbiIscmMpOworCQlyZXR1cm4gcmM7CisJfSBlbHNlIGlmICh2YXNpX3N0YXRlID09IEhfVkFTSV9FTkFCTEVEKSB7CisJCXJldHVybiAtRUFHQUlOOworCX0gZWxzZSBpZiAodmFzaV9zdGF0ZSAhPSBIX1ZBU0lfU1VTUEVORElORykgeworCQlwcl9lcnIoInBzZXJpZXNfc3VzcGVuZF9iZWdpbjogdmFzaV9zdGF0ZSByZXR1cm5lZCBzdGF0ZSAlbGRcbiIsCisJCSAgICAgICB2YXNpX3N0YXRlKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHNlcmllc19zdXNwZW5kX2NwdSAtIFN1c3BlbmQgYSBzaW5nbGUgQ1BVCisgKgorICogTWFrZXMgdGhlIEhfSk9JTiBjYWxsIHRvIHN1c3BlbmQgdGhlIENQVQorICoKKyAqKi8KK3N0YXRpYyBpbnQgcHNlcmllc19zdXNwZW5kX2NwdSh2b2lkKQoreworCWlmIChhdG9taWNfcmVhZCgmc3VzcGVuZGluZykpCisJCXJldHVybiBydGFzX3N1c3BlbmRfY3B1KCZzdXNwZW5kX2RhdGEpOworCXJldHVybiAwOworfQorCisvKioKKyAqIHBzZXJpZXNfc3VzcGVuZF9lbnRlciAtIEZpbmFsIHBoYXNlIG9mIGhpYmVybmF0aW9uCisgKgorICogUmV0dXJuIHZhbHVlOgorICogCTAgb24gc3VjY2VzcyAvIG90aGVyIG9uIGZhaWx1cmUKKyAqKi8KK3N0YXRpYyBpbnQgcHNlcmllc19zdXNwZW5kX2VudGVyKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwlpbnQgcmMgPSBydGFzX3N1c3BlbmRfbGFzdF9jcHUoJnN1c3BlbmRfZGF0YSk7CisKKwlhdG9taWNfc2V0KCZzdXNwZW5kaW5nLCAwKTsKKwlhdG9taWNfc2V0KCZzdXNwZW5kX2RhdGEuZG9uZSwgMSk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIHBzZXJpZXNfcHJlcGFyZV9sYXRlIC0gUHJlcGFyZSB0byBzdXNwZW5kIGFsbCBvdGhlciBDUFVzCisgKgorICogUmV0dXJuIHZhbHVlOgorICogCTAgb24gc3VjY2VzcyAvIG90aGVyIG9uIGZhaWx1cmUKKyAqKi8KK3N0YXRpYyBpbnQgcHNlcmllc19wcmVwYXJlX2xhdGUodm9pZCkKK3sKKwlhdG9taWNfc2V0KCZzdXNwZW5kaW5nLCAxKTsKKwlhdG9taWNfc2V0KCZzdXNwZW5kX2RhdGEud29ya2luZywgMCk7CisJYXRvbWljX3NldCgmc3VzcGVuZF9kYXRhLmRvbmUsIDApOworCWF0b21pY19zZXQoJnN1c3BlbmRfZGF0YS5lcnJvciwgMCk7CisJc3VzcGVuZF9kYXRhLmNvbXBsZXRlID0gJnN1c3BlbmRfd29yazsKKwlJTklUX0NPTVBMRVRJT04oc3VzcGVuZF93b3JrKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBzdG9yZV9oaWJlcm5hdGUgLSBJbml0aWF0ZSBwYXJ0aXRpb24gaGliZXJuYXRpb24KKyAqIEBjbGFzc2RldjoJc3lzZGV2IGNsYXNzIHN0cnVjdAorICogQGF0dHI6CQljbGFzcyBkZXZpY2UgYXR0cmlidXRlIHN0cnVjdAorICogQGJ1ZjoJCWJ1ZmZlcgorICogQGNvdW50OgkJYnVmZmVyIHNpemUKKyAqCisgKiBXcml0ZSB0aGUgc3RyZWFtIElEIHJlY2VpdmVkIGZyb20gdGhlIEhNQyB0byB0aGlzIGZpbGUKKyAqIHRvIHRyaWdnZXIgaGliZXJuYXRpbmcgdGhlIHBhcnRpdGlvbgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqIAludW1iZXIgb2YgYnl0ZXMgcHJpbnRlZCB0byBidWZmZXIgLyBvdGhlciBvbiBmYWlsdXJlCisgKiovCitzdGF0aWMgc3NpemVfdCBzdG9yZV9oaWJlcm5hdGUoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3NkZXYsCisJCQkgICAgICAgc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJaW50IHJjOworCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCisJc3RyZWFtX2lkID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxNik7CisKKwlkbyB7CisJCXJjID0gcHNlcmllc19zdXNwZW5kX2JlZ2luKFBNX1NVU1BFTkRfTUVNKTsKKwkJaWYgKHJjID09IC1FQUdBSU4pCisJCQlzc2xlZXAoMSk7CisJfSB3aGlsZSAocmMgPT0gLUVBR0FJTik7CisKKwlpZiAoIXJjKQorCQlyYyA9IHBtX3N1c3BlbmQoUE1fU1VTUEVORF9NRU0pOworCisJc3RyZWFtX2lkID0gMDsKKworCWlmICghcmMpCisJCXJjID0gY291bnQ7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgU1lTREVWX0NMQVNTX0FUVFIoaGliZXJuYXRlLCBTX0lXVVNSLCBOVUxMLCBzdG9yZV9oaWJlcm5hdGUpOworCitzdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBzdXNwZW5kX3N5c2Rldl9jbGFzcyA9IHsKKwkubmFtZSA9ICJwb3dlciIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIHBzZXJpZXNfc3VzcGVuZF9vcHMgPSB7CisJLnZhbGlkCQk9IHN1c3BlbmRfdmFsaWRfb25seV9tZW0sCisJLmJlZ2luCQk9IHBzZXJpZXNfc3VzcGVuZF9iZWdpbiwKKwkucHJlcGFyZV9sYXRlCT0gcHNlcmllc19wcmVwYXJlX2xhdGUsCisJLmVudGVyCQk9IHBzZXJpZXNfc3VzcGVuZF9lbnRlciwKK307CisKKy8qKgorICogcHNlcmllc19zdXNwZW5kX3N5c2ZzX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgd2l0aCBzeXNmcworICoKKyAqIFJldHVybiB2YWx1ZToKKyAqIAkwIG9uIHN1Y2Nlc3MgLyBvdGhlciBvbiBmYWlsdXJlCisgKiovCitzdGF0aWMgaW50IHBzZXJpZXNfc3VzcGVuZF9zeXNmc19yZWdpc3RlcihzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQoreworCWludCByYzsKKworCWlmICgocmMgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnN1c3BlbmRfc3lzZGV2X2NsYXNzKSkpCisJCXJldHVybiByYzsKKworCXN5c2Rldi0+aWQgPSAwOworCXN5c2Rldi0+Y2xzID0gJnN1c3BlbmRfc3lzZGV2X2NsYXNzOworCisJaWYgKChyYyA9IHN5c2Rldl9jbGFzc19jcmVhdGVfZmlsZSgmc3VzcGVuZF9zeXNkZXZfY2xhc3MsICZhdHRyX2hpYmVybmF0ZSkpKQorCQlnb3RvIGNsYXNzX3VucmVnaXN0ZXI7CisKKwlyZXR1cm4gMDsKKworY2xhc3NfdW5yZWdpc3RlcjoKKwlzeXNkZXZfY2xhc3NfdW5yZWdpc3Rlcigmc3VzcGVuZF9zeXNkZXZfY2xhc3MpOworCXJldHVybiByYzsKK30KKworLyoqCisgKiBwc2VyaWVzX3N1c3BlbmRfaW5pdCAtIGluaXRjYWxsIGZvciBwU2VyaWVzIHN1c3BlbmQKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAJMCBvbiBzdWNjZXNzIC8gb3RoZXIgb24gZmFpbHVyZQorICoqLworc3RhdGljIGludCBfX2luaXQgcHNlcmllc19zdXNwZW5kX2luaXQodm9pZCkKK3sKKwlpbnQgcmM7CisKKwlpZiAoIW1hY2hpbmVfaXMocHNlcmllcykgfHwgIWZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCisJCXJldHVybiAwOworCisJc3VzcGVuZF9kYXRhLnRva2VuID0gcnRhc190b2tlbigiaWJtLHN1c3BlbmQtbWUiKTsKKwlpZiAoc3VzcGVuZF9kYXRhLnRva2VuID09IFJUQVNfVU5LTk9XTl9TRVJWSUNFKQorCQlyZXR1cm4gMDsKKworCWlmICgocmMgPSBwc2VyaWVzX3N1c3BlbmRfc3lzZnNfcmVnaXN0ZXIoJnN1c3BlbmRfc3lzZGV2KSkpCisJCXJldHVybiByYzsKKworCXBwY19tZC5zdXNwZW5kX2Rpc2FibGVfY3B1ID0gcHNlcmllc19zdXNwZW5kX2NwdTsKKwlzdXNwZW5kX3NldF9vcHMoJnBzZXJpZXNfc3VzcGVuZF9vcHMpOworCXJldHVybiAwOworfQorCitfX2luaXRjYWxsKHBzZXJpZXNfc3VzcGVuZF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCmluZGV4IGYxOWQxOTQuLjViMjJiMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYwpAQCAtNTQ5LDggKzU0OSw2IEBACiB7CiAJdW5zaWduZWQgbG9uZyAqdGd0ID0gJnBlcl9jcHUoeGljc19pcGlfbWVzc2FnZSwgY3B1KTsKIAotCVdBUk5fT04oY3B1X2lzX29mZmxpbmUoY3B1KSk7Ci0KIAltYigpOwkvKiBvcmRlciBtbWlvIGNsZWFyaW5nIHFpcnIgKi8KIAl3aGlsZSAoKnRndCkgewogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfQ0FMTF9GVU5DVElPTiwgdGd0KSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9heG9ucmFtLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2F4b25yYW0uYwppbmRleCA0MDJkMjIxLi4yNjU5YTYwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2F4b25yYW0uYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2F4b25yYW0uYwpAQCAtNjAsNyArNjAsNyBAQAogc3RhdGljIGludCBhemZzX21ham9yLCBhemZzX21pbm9yOwogCiBzdHJ1Y3QgYXhvbl9yYW1fYmFuayB7Ci0Jc3RydWN0IG9mX2RldmljZQkqZGV2aWNlOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKmRldmljZTsKIAlzdHJ1Y3QgZ2VuZGlzawkJKmRpc2s7CiAJdW5zaWduZWQgaW50CQlpcnFfaWQ7CiAJdW5zaWduZWQgbG9uZwkJcGhfYWRkcjsKQEAgLTcyLDcgKzcyLDcgQEAKIHN0YXRpYyBzc2l6ZV90CiBheG9uX3JhbV9zeXNmc19lY2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBvZl9kZXZpY2UgKmRldmljZSA9IHRvX29mX2RldmljZShkZXYpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBheG9uX3JhbV9iYW5rICpiYW5rID0gZGV2aWNlLT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCUJVR19PTighYmFuayk7CkBAIC05MCw3ICs5MCw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QKIGF4b25fcmFtX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldikKIHsKLQlzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXZpY2UgPSBkZXY7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlID0gZGV2OwogCXN0cnVjdCBheG9uX3JhbV9iYW5rICpiYW5rID0gZGV2aWNlLT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCUJVR19PTighYmFuayk7CkBAIC0xNzQsOCArMTc0LDggQEAKICAqIGF4b25fcmFtX3Byb2JlIC0gcHJvYmUoKSBtZXRob2QgZm9yIHBsYXRmb3JtIGRyaXZlcgogICogQGRldmljZSwgQGRldmljZV9pZDogc2VlIG9mX3BsYXRmb3JtX2RyaXZlciBtZXRob2QKICAqLwotc3RhdGljIGludAotYXhvbl9yYW1fcHJvYmUoc3RydWN0IG9mX2RldmljZSAqZGV2aWNlLCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpkZXZpY2VfaWQpCitzdGF0aWMgaW50IGF4b25fcmFtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSwKKwkJCSAgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqZGV2aWNlX2lkKQogewogCXN0YXRpYyBpbnQgYXhvbl9yYW1fYmFua19pZCA9IC0xOwogCXN0cnVjdCBheG9uX3JhbV9iYW5rICpiYW5rOwpAQCAtMzA0LDcgKzMwNCw3IEBACiAgKiBAZGV2aWNlOiBzZWUgb2ZfcGxhdGZvcm1fZHJpdmVyIG1ldGhvZAogICovCiBzdGF0aWMgaW50Ci1heG9uX3JhbV9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqZGV2aWNlKQorYXhvbl9yYW1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgYXhvbl9yYW1fYmFuayAqYmFuayA9IGRldmljZS0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvYmVzdGNvbW0vYmVzdGNvbW0uYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvYmVzdGNvbW0vYmVzdGNvbW0uYwppbmRleCBhN2M1YzQ3Li42NTAyNTYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2Jlc3Rjb21tL2Jlc3Rjb21tLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9iZXN0Y29tbS9iZXN0Y29tbS5jCkBAIC0zNjUsOCArMzY1LDggQEAKIC8qIE9GIHBsYXRmb3JtIGRyaXZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0Ci1tcGM1Mnh4X2Jjb21fcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb3AsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQorc3RhdGljIGludCBfX2RldmluaXQgbXBjNTJ4eF9iY29tX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wLAorCQkJCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mbl9zcmFtOwogCXN0cnVjdCByZXNvdXJjZSByZXNfYmNvbTsKQEAgLTQ2MSw4ICs0NjEsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQKLW1wYzUyeHhfYmNvbV9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb3ApCitzdGF0aWMgaW50IG1wYzUyeHhfYmNvbV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3ApCiB7CiAJLyogQ2xlYW4gdXAgdGhlIGVuZ2luZSAqLwogCWJjb21fZW5naW5lX2NsZWFudXAoKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvYmVzdGNvbW0vc3JhbS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9iZXN0Y29tbS9zcmFtLmMKaW5kZXggNWQ3NGVmNy4uMTIyNTAxMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9iZXN0Y29tbS9zcmFtLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9iZXN0Y29tbS9zcmFtLmMKQEAgLTExLDYgKzExLDcgQEAKICAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCmluZGV4IDhkMTAzY2EuLjAwODUyMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCkBAIC02MjEsNyArNjIxLDYgQEAKIHsKIAlzdHJ1Y3QgY3BtMV9ncGlvMTZfY2hpcCAqY3BtMV9nYzsKIAlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYzsKLQlzdHJ1Y3Qgb2ZfZ3Bpb19jaGlwICpvZl9nYzsKIAlzdHJ1Y3QgZ3Bpb19jaGlwICpnYzsKIAogCWNwbTFfZ2MgPSBremFsbG9jKHNpemVvZigqY3BtMV9nYyksIEdGUF9LRVJORUwpOwpAQCAtNjMxLDExICs2MzAsOSBAQAogCXNwaW5fbG9ja19pbml0KCZjcG0xX2djLT5sb2NrKTsKIAogCW1tX2djID0gJmNwbTFfZ2MtPm1tX2djOwotCW9mX2djID0gJm1tX2djLT5vZl9nYzsKLQlnYyA9ICZvZl9nYy0+Z2M7CisJZ2MgPSAmbW1fZ2MtPmdjOwogCiAJbW1fZ2MtPnNhdmVfcmVncyA9IGNwbTFfZ3BpbzE2X3NhdmVfcmVnczsKLQlvZl9nYy0+Z3Bpb19jZWxscyA9IDI7CiAJZ2MtPm5ncGlvID0gMTY7CiAJZ2MtPmRpcmVjdGlvbl9pbnB1dCA9IGNwbTFfZ3BpbzE2X2Rpcl9pbjsKIAlnYy0+ZGlyZWN0aW9uX291dHB1dCA9IGNwbTFfZ3BpbzE2X2Rpcl9vdXQ7CkBAIC03NDUsNyArNzQyLDYgQEAKIHsKIAlzdHJ1Y3QgY3BtMV9ncGlvMzJfY2hpcCAqY3BtMV9nYzsKIAlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYzsKLQlzdHJ1Y3Qgb2ZfZ3Bpb19jaGlwICpvZl9nYzsKIAlzdHJ1Y3QgZ3Bpb19jaGlwICpnYzsKIAogCWNwbTFfZ2MgPSBremFsbG9jKHNpemVvZigqY3BtMV9nYyksIEdGUF9LRVJORUwpOwpAQCAtNzU1LDExICs3NTEsOSBAQAogCXNwaW5fbG9ja19pbml0KCZjcG0xX2djLT5sb2NrKTsKIAogCW1tX2djID0gJmNwbTFfZ2MtPm1tX2djOwotCW9mX2djID0gJm1tX2djLT5vZl9nYzsKLQlnYyA9ICZvZl9nYy0+Z2M7CisJZ2MgPSAmbW1fZ2MtPmdjOwogCiAJbW1fZ2MtPnNhdmVfcmVncyA9IGNwbTFfZ3BpbzMyX3NhdmVfcmVnczsKLQlvZl9nYy0+Z3Bpb19jZWxscyA9IDI7CiAJZ2MtPm5ncGlvID0gMzI7CiAJZ2MtPmRpcmVjdGlvbl9pbnB1dCA9IGNwbTFfZ3BpbzMyX2Rpcl9pbjsKIAlnYy0+ZGlyZWN0aW9uX291dHB1dCA9IGNwbTFfZ3BpbzMyX2Rpcl9vdXQ7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbV9jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtX2NvbW1vbi5jCmluZGV4IDg4Yjk4MTIuLjJiNjlhYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtX2NvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtX2NvbW1vbi5jCkBAIC0zMjUsNyArMzI1LDYgQEAKIHsKIAlzdHJ1Y3QgY3BtMl9ncGlvMzJfY2hpcCAqY3BtMl9nYzsKIAlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYzsKLQlzdHJ1Y3Qgb2ZfZ3Bpb19jaGlwICpvZl9nYzsKIAlzdHJ1Y3QgZ3Bpb19jaGlwICpnYzsKIAogCWNwbTJfZ2MgPSBremFsbG9jKHNpemVvZigqY3BtMl9nYyksIEdGUF9LRVJORUwpOwpAQCAtMzM1LDExICszMzQsOSBAQAogCXNwaW5fbG9ja19pbml0KCZjcG0yX2djLT5sb2NrKTsKIAogCW1tX2djID0gJmNwbTJfZ2MtPm1tX2djOwotCW9mX2djID0gJm1tX2djLT5vZl9nYzsKLQlnYyA9ICZvZl9nYy0+Z2M7CisJZ2MgPSAmbW1fZ2MtPmdjOwogCiAJbW1fZ2MtPnNhdmVfcmVncyA9IGNwbTJfZ3BpbzMyX3NhdmVfcmVnczsKLQlvZl9nYy0+Z3Bpb19jZWxscyA9IDI7CiAJZ2MtPm5ncGlvID0gMzI7CiAJZ2MtPmRpcmVjdGlvbl9pbnB1dCA9IGNwbTJfZ3BpbzMyX2Rpcl9pbjsKIAlnYy0+ZGlyZWN0aW9uX291dHB1dCA9IGNwbTJfZ3BpbzMyX2Rpcl9vdXQ7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2RhcnRfaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jCmluZGV4IGM4Yjk2ZWQuLjU1OWRiMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgotI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgorI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KQEAgLTIzMiw3ICsyMzIsNyBAQAogCSAqIHRoYXQgdG8gd29yayBhcm91bmQgd2hhdCBsb29rcyBsaWtlIGEgcHJvYmxlbSB3aXRoIHRoZSBIVCBicmlkZ2UKIAkgKiBwcmVmZXRjaGluZyBpbnRvIGludmFsaWQgcGFnZXMgYW5kIGNvcnJ1cHRpbmcgZGF0YQogCSAqLwotCXRtcCA9IGxtYl9hbGxvYyhEQVJUX1BBR0VfU0laRSwgREFSVF9QQUdFX1NJWkUpOworCXRtcCA9IG1lbWJsb2NrX2FsbG9jKERBUlRfUEFHRV9TSVpFLCBEQVJUX1BBR0VfU0laRSk7CiAJZGFydF9lbXB0eXZhbCA9IERBUlRNQVBfVkFMSUQgfCAoKHRtcCA+PiBEQVJUX1BBR0VfU0hJRlQpICYKIAkJCQkJIERBUlRNQVBfUlBOTUFTSyk7CiAKQEAgLTQwNyw3ICs0MDcsNyBAQAogCWlmIChpb21tdV9pc19vZmYpCiAJCXJldHVybjsKIAotCWlmICghaW9tbXVfZm9yY2Vfb24gJiYgbG1iX2VuZF9vZl9EUkFNKCkgPD0gMHg0MDAwMDAwMHVsbCkKKwlpZiAoIWlvbW11X2ZvcmNlX29uICYmIG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgPD0gMHg0MDAwMDAwMHVsbCkKIAkJcmV0dXJuOwogCiAJLyogNTEyIHBhZ2VzICgyTUIpIGlzIG1heCBEQVJUIHRhYmxlc2l6ZS4gKi8KQEAgLTQxNiw3ICs0MTYsNyBAQAogCSAqIHdpbGwgYmxvdyB1cCBhbiBlbnRpcmUgbGFyZ2UgcGFnZSBhbnl3YXkgaW4gdGhlIGtlcm5lbCBtYXBwaW5nCiAJICovCiAJZGFydF90YWJsZWJhc2UgPSAodW5zaWduZWQgbG9uZykKLQkJYWJzX3RvX3ZpcnQobG1iX2FsbG9jX2Jhc2UoMVVMPDwyNCwgMVVMPDwyNCwgMHg4MDAwMDAwMEwpKTsKKwkJYWJzX3RvX3ZpcnQobWVtYmxvY2tfYWxsb2NfYmFzZSgxVUw8PDI0LCAxVUw8PDI0LCAweDgwMDAwMDAwTCkpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiREFSVCB0YWJsZSBhbGxvY2F0ZWQgYXQ6ICVseFxuIiwgZGFydF90YWJsZWJhc2UpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfZ3RtLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9ndG0uYwppbmRleCBlY2E0NTQ1Li43ZGQyODg1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9ndG0uYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9ndG0uYwpAQCAtMTQsNiArMTQsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbXNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9tc2kuYwppbmRleCA5NjJjMmQ4Li44Nzk5MWQzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9tc2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9tc2kuYwpAQCAtMjUwLDcgKzI1MCw3IEBACiAJcmF3X3NwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKIH0KIAotc3RhdGljIGludCBmc2xfb2ZfbXNpX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKK3N0YXRpYyBpbnQgZnNsX29mX21zaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpCiB7CiAJc3RydWN0IGZzbF9tc2kgKm1zaSA9IG9mZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgdmlycSwgaTsKQEAgLTI3NCw3ICsyNzQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBmc2xfb2ZfbXNpX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKmRldiwKK3N0YXRpYyBpbnQgX19kZXZpbml0IGZzbF9vZl9tc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAogCQkJCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewogCXN0cnVjdCBmc2xfbXNpICptc2k7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wY2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5jCmluZGV4IGExNDc2MGYuLjIwOTM4NGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9sbWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKQEAgLTE5MCw3ICsxOTAsNyBAQAogCXByX2luZm8oIiVzOiBQQ0lDU1JCQVIgQCAweCV4XG4iLCBuYW1lLCBwY2ljc3JiYXIpOwogCiAJLyogU2V0dXAgaW5ib3VuZCBtZW0gd2luZG93ICovCi0JbWVtID0gbG1iX2VuZF9vZl9EUkFNKCk7CisJbWVtID0gbWVtYmxvY2tfZW5kX29mX0RSQU0oKTsKIAlzeiA9IG1pbihtZW0sIHBhZGRyX2xvKTsKIAltZW1fbG9nID0gX19pbG9nMl91NjQoc3opOwogCkBAIC00MTIsNiArNDEyLDcgQEAKICNlbmRpZiAvKiBDT05GSUdfRlNMX1NPQ19CT09LRSB8fCBDT05GSUdfUFBDXzg2eHggKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX1BQQ184M3h4KSB8fCBkZWZpbmVkKENPTkZJR19QUENfTVBDNTEyeCkKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUigweDE5NTcsIFBDSV9ERVZJQ0VfSURfTVBDODMwOCwgcXVpcmtfZnNsX3BjaWVfaGVhZGVyKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUigweDE5NTcsIFBDSV9ERVZJQ0VfSURfTVBDODMxNEUsIHF1aXJrX2ZzbF9wY2llX2hlYWRlcik7CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoMHgxOTU3LCBQQ0lfREVWSUNFX0lEX01QQzgzMTQsIHF1aXJrX2ZzbF9wY2llX2hlYWRlcik7CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoMHgxOTU3LCBQQ0lfREVWSUNFX0lEX01QQzgzMTVFLCBxdWlya19mc2xfcGNpZV9oZWFkZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcG1jLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wbWMuYwppbmRleCA5MDgyZWI5Li40NGRlODU1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wbWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wbWMuYwpAQCAtNTgsNyArNTgsOCBAQAogCS5lbnRlciA9IHBtY19zdXNwZW5kX2VudGVyLAogfTsKIAotc3RhdGljIGludCBwbWNfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKmlkKQorc3RhdGljIGludCBwbWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYsCisJCSAgICAgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqaWQpCiB7CiAJcG1jX3JlZ3MgPSBvZl9pb21hcChvZmRldi0+ZGV2Lm9mX25vZGUsIDApOwogCWlmICghcG1jX3JlZ3MpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9yaW8uYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3Jpby5jCmluZGV4IDMwZTE2MjYuLjhiZDg2NTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3Jpby5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3Jpby5jCkBAIC0xMzM4LDcgKzEzMzgsNyBAQAogICogbWFzdGVyIHBvcnQgd2l0aCBzeXN0ZW0tc3BlY2lmaWMgaW5mbywgYW5kIHJlZ2lzdGVycyB0aGUKICAqIG1hc3RlciBwb3J0IHdpdGggdGhlIFJhcGlkSU8gc3Vic3lzdGVtLgogICovCi1pbnQgZnNsX3Jpb19zZXR1cChzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYpCitpbnQgZnNsX3Jpb19zZXR1cChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJpb19vcHMgKm9wczsKIAlzdHJ1Y3QgcmlvX21wb3J0ICpwb3J0OwpAQCAtMTUzNiw3ICsxNTM2LDcgQEAKIAogLyogVGhlIHByb2JlIGZ1bmN0aW9uIGZvciBSYXBpZElPIHBlZXItdG8tcGVlciBuZXR3b3JrLgogICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBmc2xfb2ZfcmlvX3Jwbl9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYsCitzdGF0aWMgaW50IF9fZGV2aW5pdCBmc2xfb2ZfcmlvX3Jwbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKIAlpbnQgcmM7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuaCBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5oCmluZGV4IDQyMzgxYmIuLjUzNjA5NDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5oCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5oCkBAIC0zMCw2ICszMCw3IEBACiAJdm9pZCAoKnNldF9waXhlbF9jbG9jaykgKHVuc2lnbmVkIGludCBwaXhjbG9jayk7CiAJc3NpemVfdCAoKnNob3dfbW9uaXRvcl9wb3J0KSAoaW50IG1vbml0b3JfcG9ydCwgY2hhciAqYnVmKTsKIAlpbnQgKCpzZXRfc3lzZnNfbW9uaXRvcl9wb3J0KSAoaW50IHZhbCk7CisJdm9pZCAoKnJlbGVhc2VfYm9vdG1lbSkgKHZvaWQpOwogfTsKIAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kaXVfZGF0YV9vcHMgZGl1X29wczsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbWljcm9wYXRjaC5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9taWNyb3BhdGNoLmMKaW5kZXggZDhkNjAyOC4uYzBiYjc2ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9taWNyb3BhdGNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9taWNyb3BhdGNoLmMKQEAgLTQsNiArNCw3IEBACiAgKiBhbHNvIHJlbG9jYXRlcyBTTUMyLCBidXQgdGhpcyB3b3VsZCByZXF1aXJlIGFkZGl0aW9uYWwgY2hhbmdlcwogICogdG8gdWFydC5jLCBzbyBJIGFtIGhvbGRpbmcgb2ZmIG9uIHRoYXQgZm9yIGEgbW9tZW50LgogICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTE2LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtLzh4eF9pbW1hcC5oPgorI2luY2x1ZGUgPGFzbS9jcG0uaD4KICNpbmNsdWRlIDxhc20vY3BtMS5oPgogCiAvKgpAQCAtMjQsNyArMjYsNyBAQAogCiAjaWZkZWYgQ09ORklHX0kyQ19TUElfVUNPREVfUEFUQ0gKIAotdWludCBwYXRjaF8yMDAwW10gPSB7CitzdGF0aWMgdWludCBwYXRjaF8yMDAwW10gX19pbml0ZGF0YSA9IHsKIAkweDdGRkZFRkQ5LAogCTB4M0ZGRDAwMDAsCiAJMHg3RkZCNDlGNywKQEAgLTE0Myw3ICsxNDUsNyBAQAogCTB4NUY4MjQ3RjgKIH07CiAKLXVpbnQgcGF0Y2hfMmYwMFtdID0geworc3RhdGljIHVpbnQgcGF0Y2hfMmYwMFtdIF9faW5pdGRhdGEgPSB7CiAJMHgzRTMwMzQzMCwKIAkweDM0MzQzNzM3LAogCTB4QUJGN0JGOUIsCkBAIC0xODIsNyArMTg0LDcgQEAKIAogI2lmZGVmIENPTkZJR19JMkNfU1BJX1NNQzFfVUNPREVfUEFUQ0gKIAotdWludCBwYXRjaF8yMDAwW10gPSB7CitzdGF0aWMgdWludCBwYXRjaF8yMDAwW10gX19pbml0ZGF0YSA9IHsKIAkweDNmZmYwMDAwLAogCTB4M2ZmZDAwMDAsCiAJMHgzZmZiMDAwMCwKQEAgLTUwNSw3ICs1MDcsNyBAQAogCTB4NjA3OWUyYmIKIH07CiAKLXVpbnQgcGF0Y2hfMmYwMFtdID0geworc3RhdGljIHVpbnQgcGF0Y2hfMmYwMFtdIF9faW5pdGRhdGEgPSB7CiAJMHgzMDMwMzAzMCwKIAkweDNlM2UzNDM0LAogCTB4YWJiZjliOTksCkBAIC01NzIsNyArNTc0LDcgQEAKIAkweGYyMmYzZjIzCiB9OwogCi11aW50IHBhdGNoXzJlMDBbXSA9IHsKK3N0YXRpYyB1aW50IHBhdGNoXzJlMDBbXSBfX2luaXRkYXRhID0gewogCTB4MjdlZWVlZWUsCiAJMHhlZWVlZWVlZSwKIAkweGVlZWVlZWVlLApAQCAtNTk4LDcgKzYwMCw3IEBACiAKICNpZmRlZiBDT05GSUdfVVNCX1NPRl9VQ09ERV9QQVRDSAogCi11aW50IHBhdGNoXzIwMDBbXSA9IHsKK3N0YXRpYyB1aW50IHBhdGNoXzIwMDBbXSBfX2luaXRkYXRhID0gewogCTB4N2ZmZjAwMDAsCiAJMHg3ZmZkMDAwMCwKIAkweDdmZmIwMDAwLApAQCAtNjEzLDIxICs2MTUsMjUgQEAKIAkweDYwNzUwMDAwCiB9OwogCi11aW50IHBhdGNoXzJmMDBbXSA9IHsKK3N0YXRpYyB1aW50IHBhdGNoXzJmMDBbXSBfX2luaXRkYXRhID0gewogCTB4MzAzMDMwNGMsCiAJMHhjYWI5ZTQ0MSwKIAkweGExYWFmMjIwCiB9OwogI2VuZGlmCiAKLXZvaWQKLWNwbV9sb2FkX3BhdGNoKGNwbTh4eF90CSpjcCkKK3ZvaWQgX19pbml0IGNwbV9sb2FkX3BhdGNoKGNwbTh4eF90ICpjcCkKIHsKIAl2b2xhdGlsZSB1aW50CQkqZHA7CQkvKiBEdWFsLXBvcnRlZCBSQU0uICovCiAJdm9sYXRpbGUgY3BtOHh4X3QJKmNvbW1wcm9jOworI2lmIGRlZmluZWQoQ09ORklHX0kyQ19TUElfVUNPREVfUEFUQ0gpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19JMkNfU1BJX1NNQzFfVUNPREVfUEFUQ0gpCiAJdm9sYXRpbGUgaWljX3QJCSppaXA7Ci0Jdm9sYXRpbGUgc3BpX3QJCSpzcHA7CisJdm9sYXRpbGUgc3RydWN0IHNwaV9wcmFtICpzcHA7CisjaWZkZWYgQ09ORklHX0kyQ19TUElfU01DMV9VQ09ERV9QQVRDSAogCXZvbGF0aWxlIHNtY191YXJ0X3QJKnNtcDsKKyNlbmRpZgorI2VuZGlmCiAJaW50CWk7CiAKIAljb21tcHJvYyA9IGNwOwpAQCAtNjY4LDggKzY3NCw4IEBACiAJLyogUHV0IFNQSSBhYm92ZSB0aGUgSUlDLCBhbHNvIDMyLWJ5dGUgYWxpZ25lZC4KIAkqLwogCWkgPSAoUlBCQVNFICsgc2l6ZW9mKGlpY190KSArIDMxKSAmIH4zMTsKLQlzcHAgPSAoc3BpX3QgKikmY29tbXByb2MtPmNwX2RwYXJhbVtQUk9GRl9TUEldOwotCXNwcC0+c3BpX3JwYmFzZSA9IGk7CisJc3BwID0gKHN0cnVjdCBzcGlfcHJhbSAqKSZjb21tcHJvYy0+Y3BfZHBhcmFtW1BST0ZGX1NQSV07CisJc3BwLT5ycGJhc2UgPSBpOwogCiAjIGlmIGRlZmluZWQoQ09ORklHX0kyQ19TUElfVUNPREVfUEFUQ0gpCiAJY29tbXByb2MtPmNwX2NwbWNyMSA9IDB4ODAyYTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4eF9ncGlvLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21wYzh4eHhfZ3Bpby5jCmluZGV4IDgzZjUxOTYuLjJiNjkwODQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4eF9ncGlvLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHh4X2dwaW8uYwpAQCAtMjU3LDcgKzI1Nyw2IEBACiB7CiAJc3RydWN0IG1wYzh4eHhfZ3Bpb19jaGlwICptcGM4eHh4X2djOwogCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djOwotCXN0cnVjdCBvZl9ncGlvX2NoaXAgKm9mX2djOwogCXN0cnVjdCBncGlvX2NoaXAgKmdjOwogCXVuc2lnbmVkIGh3aXJxOwogCWludCByZXQ7CkBAIC0yNzEsMTEgKzI3MCw5IEBACiAJc3Bpbl9sb2NrX2luaXQoJm1wYzh4eHhfZ2MtPmxvY2spOwogCiAJbW1fZ2MgPSAmbXBjOHh4eF9nYy0+bW1fZ2M7Ci0Jb2ZfZ2MgPSAmbW1fZ2MtPm9mX2djOwotCWdjID0gJm9mX2djLT5nYzsKKwlnYyA9ICZtbV9nYy0+Z2M7CiAKIAltbV9nYy0+c2F2ZV9yZWdzID0gbXBjOHh4eF9ncGlvX3NhdmVfcmVnczsKLQlvZl9nYy0+Z3Bpb19jZWxscyA9IDI7CiAJZ2MtPm5ncGlvID0gTVBDOFhYWF9HUElPX1BJTlM7CiAJZ2MtPmRpcmVjdGlvbl9pbnB1dCA9IG1wYzh4eHhfZ3Bpb19kaXJfaW47CiAJZ2MtPmRpcmVjdGlvbl9vdXRwdXQgPSBtcGM4eHh4X2dwaW9fZGlyX291dDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKaW5kZXggMjBiNzNjMC4uN2MxMzQyNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKQEAgLTE2MzYsNiArMTYzNiwyNCBAQAogewogCW1waWNfc2V0dXBfdGhpc19jcHUoKTsKIH0KKwordm9pZCBtcGljX3Jlc2V0X2NvcmUoaW50IGNwdSkKK3sKKwlzdHJ1Y3QgbXBpYyAqbXBpYyA9IG1waWNfcHJpbWFyeTsKKwl1MzIgcGlyOworCWludCBjcHVpZCA9IGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoY3B1KTsKKworCS8qIFNldCB0YXJnZXQgYml0IGZvciBjb3JlIHJlc2V0ICovCisJcGlyID0gbXBpY19yZWFkKG1waWMtPmdyZWdzLCBNUElDX0lORk8oR1JFR19QUk9DRVNTT1JfSU5JVCkpOworCXBpciB8PSAoMSA8PCBjcHVpZCk7CisJbXBpY193cml0ZShtcGljLT5ncmVncywgTVBJQ19JTkZPKEdSRUdfUFJPQ0VTU09SX0lOSVQpLCBwaXIpOworCW1waWNfcmVhZChtcGljLT5ncmVncywgTVBJQ19JTkZPKEdSRUdfUFJPQ0VTU09SX0lOSVQpKTsKKworCS8qIFJlc3RvcmUgdGFyZ2V0IGJpdCBhZnRlciByZXNldCBjb21wbGV0ZSAqLworCXBpciAmPSB+KDEgPDwgY3B1aWQpOworCW1waWNfd3JpdGUobXBpYy0+Z3JlZ3MsIE1QSUNfSU5GTyhHUkVHX1BST0NFU1NPUl9JTklUKSwgcGlyKTsKKwltcGljX3JlYWQobXBpYy0+Z3JlZ3MsIE1QSUNfSU5GTyhHUkVHX1BST0NFU1NPUl9JTklUKSk7Cit9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAjaWZkZWYgQ09ORklHX1BNCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuaCBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5oCmluZGV4IGVmZjQzM2MuLmU0YTZkZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5oCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5oCkBAIC0zNyw1ICszNyw2IEBACiBleHRlcm4gaW50IG1waWNfc2V0X2lycV90eXBlKHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKTsKIGV4dGVybiB2b2lkIG1waWNfc2V0X3ZlY3Rvcih1bnNpZ25lZCBpbnQgdmlycSwgdW5zaWduZWQgaW50IHZlY3Rvcik7CiBleHRlcm4gaW50IG1waWNfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrKTsKK2V4dGVybiB2b2lkIG1waWNfcmVzZXRfY29yZShpbnQgY3B1KTsKIAogI2VuZGlmIC8qIF9QT1dFUlBDX1NZU0RFVl9NUElDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9kZXYuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9kZXYuYwppbmRleCAzMWFjZDNiLi4xMzk4YmM0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L212NjR4NjBfZGV2LmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwX2Rldi5jCkBAIC0yMCwxMiArMjAsNyBAQAogCiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KIAotLyoKLSAqIFRoZXNlIGZ1bmN0aW9ucyBwcm92aWRlIHRoZSBuZWNlc3Nhcnkgc2V0dXAgZm9yIHRoZSBtdjY0eDYwIGRyaXZlcnMuCi0gKiBUaGVzZSBkcml2ZXJzIGFyZSB1bnVzdWFsIGluIHRoYXQgdGhleSB3b3JrIG9uIGJvdGggdGhlIE1JUFMgYW5kIFBvd2VyUEMKLSAqIGFyY2hpdGVjdHVyZXMuICBCZWNhdXNlIG9mIHRoYXQsIHRoZSBkcml2ZXJzIGRvIG5vdCBzdXBwb3J0IHRoZSBub3JtYWwKLSAqIFBvd2VyUEMgb2ZfcGxhdGZvcm1fYnVzX3R5cGUuICBUaGV5IHN1cHBvcnQgcGxhdGZvcm1fYnVzX3R5cGUgaW5zdGVhZC4KLSAqLworLyogVGhlc2UgZnVuY3Rpb25zIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBzZXR1cCBmb3IgdGhlIG12NjR4NjAgZHJpdmVycy4gKi8KIAogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgX19pbml0ZGF0YSBvZl9tdjY0eDYwX2RldmljZXNbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gIm1hcnZlbGwsbXY2NDMwNi1kZXZjdHJsIiwgfSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9wY2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9wY2kuYwppbmRleCAxOThmMjg4Li43N2JiM2Y0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L212NjR4NjBfcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwX3BjaS5jCkBAIC03Myw3ICs3Myw2IEBACiAJLmF0dHIgPSB7CiAJCS5uYW1lID0gImhzX3JlZyIsCiAJCS5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnNpemUgID0gTVY2NFg2MF9WQUxfTEVOX01BWCwKIAkucmVhZCAgPSBtdjY0eDYwX2hzX3JlZ19yZWFkLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wbWkuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcG1pLmMKaW5kZXggZDA3MTM3YS4uMjRhMGJiOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wbWkuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BtaS5jCkBAIC00Myw3ICs0Myw3IEBACiAJc3RydWN0IG11dGV4CQltc2dfbXV0ZXg7CiAJcG1pX21lc3NhZ2VfdAkJbXNnOwogCXN0cnVjdCBjb21wbGV0aW9uCSpjb21wbGV0aW9uOwotCXN0cnVjdCBvZl9kZXZpY2UJKmRldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpkZXY7CiAJaW50CQkJaXJxOwogCXU4IF9faW9tZW0JCSpwbWlfcmVnOwogCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOwpAQCAtMTIxLDcgKzEyMSw3IEBACiAJc3Bpbl91bmxvY2soJmRhdGEtPmhhbmRsZXJfc3BpbmxvY2spOwogfQogCi1zdGF0aWMgaW50IHBtaV9vZl9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYsCitzdGF0aWMgaW50IHBtaV9vZl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCiAJCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5kZXYub2Zfbm9kZTsKQEAgLTE4NSw3ICsxODUsNyBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBwbWlfb2ZfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcG1pX29mX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBtaV9oYW5kbGVyICpoYW5kbGVyLCAqdG1wOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9ncGlvLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9ncGlvLmMKaW5kZXggMzgxMmZjMy4uZmM2NWFkMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfZ3Bpby5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X2dwaW8uYwpAQCAtMTgxLDcgKzE4MSw2IEBACiAJCWludCByZXQ7CiAJCXN0cnVjdCBwcGM0eHhfZ3Bpb19jaGlwICpwcGM0eHhfZ2M7CiAJCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djOwotCQlzdHJ1Y3Qgb2ZfZ3Bpb19jaGlwICpvZl9nYzsKIAkJc3RydWN0IGdwaW9fY2hpcCAqZ2M7CiAKIAkJcHBjNHh4X2djID0ga3phbGxvYyhzaXplb2YoKnBwYzR4eF9nYyksIEdGUF9LRVJORUwpOwpAQCAtMTkzLDEwICsxOTIsOCBAQAogCQlzcGluX2xvY2tfaW5pdCgmcHBjNHh4X2djLT5sb2NrKTsKIAogCQltbV9nYyA9ICZwcGM0eHhfZ2MtPm1tX2djOwotCQlvZl9nYyA9ICZtbV9nYy0+b2ZfZ2M7Ci0JCWdjID0gJm9mX2djLT5nYzsKKwkJZ2MgPSAmbW1fZ2MtPmdjOwogCi0JCW9mX2djLT5ncGlvX2NlbGxzID0gMjsKIAkJZ2MtPm5ncGlvID0gMzI7CiAJCWdjLT5kaXJlY3Rpb25faW5wdXQgPSBwcGM0eHhfZ3Bpb19kaXJfaW47CiAJCWdjLT5kaXJlY3Rpb25fb3V0cHV0ID0gcHBjNHh4X2dwaW9fZGlyX291dDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL2dwaW8uYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL2dwaW8uYwppbmRleCBkYzhmOGQ2Li4zNmJmODQ1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9ncGlvLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvZ3Bpby5jCkBAIC0xMzgsOCArMTM4LDggQEAKIHN0cnVjdCBxZV9waW4gKnFlX3Bpbl9yZXF1ZXN0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGludCBpbmRleCkKIHsKIAlzdHJ1Y3QgcWVfcGluICpxZV9waW47Ci0Jc3RydWN0IGRldmljZV9ub2RlICpnYzsKLQlzdHJ1Y3Qgb2ZfZ3Bpb19jaGlwICpvZl9nYyA9IE5VTEw7CisJc3RydWN0IGRldmljZV9ub2RlICpncGlvX25wOworCXN0cnVjdCBncGlvX2NoaXAgKmdjOwogCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djOwogCXN0cnVjdCBxZV9ncGlvX2NoaXAgKnFlX2djOwogCWludCBlcnI7CkBAIC0xNTUsNDAgKzE1NSw0MCBAQAogCX0KIAogCWVyciA9IG9mX3BhcnNlX3BoYW5kbGVzX3dpdGhfYXJncyhucCwgImdwaW9zIiwgIiNncGlvLWNlbGxzIiwgaW5kZXgsCi0JCQkJCSAgJmdjLCAmZ3Bpb19zcGVjKTsKKwkJCQkJICAmZ3Bpb19ucCwgJmdwaW9fc3BlYyk7CiAJaWYgKGVycikgewogCQlwcl9kZWJ1ZygiJXM6IGNhbid0IHBhcnNlIGdwaW9zIHByb3BlcnR5XG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gZXJyMDsKIAl9CiAKLQlpZiAoIW9mX2RldmljZV9pc19jb21wYXRpYmxlKGdjLCAiZnNsLG1wYzgzMjMtcWUtcGFyaW8tYmFuayIpKSB7CisJaWYgKCFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShncGlvX25wLCAiZnNsLG1wYzgzMjMtcWUtcGFyaW8tYmFuayIpKSB7CiAJCXByX2RlYnVnKCIlczogdHJpZWQgdG8gZ2V0IGEgbm9uLXFlIHBpblxuIiwgX19mdW5jX18pOwogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIGVycjE7CiAJfQogCi0Jb2ZfZ2MgPSBnYy0+ZGF0YTsKLQlpZiAoIW9mX2djKSB7CisJZ2MgPSBvZl9ub2RlX3RvX2dwaW9jaGlwKGdwaW9fbnApOworCWlmICghZ2MpIHsKIAkJcHJfZGVidWcoIiVzOiBncGlvIGNvbnRyb2xsZXIgJXMgaXNuJ3QgcmVnaXN0ZXJlZFxuIiwKLQkJCSBucC0+ZnVsbF9uYW1lLCBnYy0+ZnVsbF9uYW1lKTsKKwkJCSBucC0+ZnVsbF9uYW1lLCBncGlvX25wLT5mdWxsX25hbWUpOwogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIGVycjE7CiAJfQogCi0JZ3Bpb19jZWxscyA9IG9mX2dldF9wcm9wZXJ0eShnYywgIiNncGlvLWNlbGxzIiwgJnNpemUpOworCWdwaW9fY2VsbHMgPSBvZl9nZXRfcHJvcGVydHkoZ3Bpb19ucCwgIiNncGlvLWNlbGxzIiwgJnNpemUpOwogCWlmICghZ3Bpb19jZWxscyB8fCBzaXplICE9IHNpemVvZigqZ3Bpb19jZWxscykgfHwKLQkJCSpncGlvX2NlbGxzICE9IG9mX2djLT5ncGlvX2NlbGxzKSB7CisJCQkqZ3Bpb19jZWxscyAhPSBnYy0+b2ZfZ3Bpb19uX2NlbGxzKSB7CiAJCXByX2RlYnVnKCIlczogd3JvbmcgI2dwaW8tY2VsbHMgZm9yICVzXG4iLAotCQkJIG5wLT5mdWxsX25hbWUsIGdjLT5mdWxsX25hbWUpOworCQkJIG5wLT5mdWxsX25hbWUsIGdwaW9fbnAtPmZ1bGxfbmFtZSk7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyMTsKIAl9CiAKLQllcnIgPSBvZl9nYy0+eGxhdGUob2ZfZ2MsIG5wLCBncGlvX3NwZWMsIE5VTEwpOworCWVyciA9IGdjLT5vZl94bGF0ZShnYywgbnAsIGdwaW9fc3BlYywgTlVMTCk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyMTsKIAotCW1tX2djID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKCZvZl9nYy0+Z2MpOworCW1tX2djID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGdjKTsKIAlxZV9nYyA9IHRvX3FlX2dwaW9fY2hpcChtbV9nYyk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcWVfZ2MtPmxvY2ssIGZsYWdzKTsKQEAgLTIwNiw3ICsyMDYsNyBAQAogCWlmICghZXJyKQogCQlyZXR1cm4gcWVfcGluOwogZXJyMToKLQlvZl9ub2RlX3B1dChnYyk7CisJb2Zfbm9kZV9wdXQoZ3Bpb19ucCk7CiBlcnIwOgogCWtmcmVlKHFlX3Bpbik7CiAJcHJfZGVidWcoIiVzIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwgX19mdW5jX18sIGVycik7CkBAIC0zMDcsNyArMzA3LDYgQEAKIAkJaW50IHJldDsKIAkJc3RydWN0IHFlX2dwaW9fY2hpcCAqcWVfZ2M7CiAJCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djOwotCQlzdHJ1Y3Qgb2ZfZ3Bpb19jaGlwICpvZl9nYzsKIAkJc3RydWN0IGdwaW9fY2hpcCAqZ2M7CiAKIAkJcWVfZ2MgPSBremFsbG9jKHNpemVvZigqcWVfZ2MpLCBHRlBfS0VSTkVMKTsKQEAgLTMxOSwxMSArMzE4LDkgQEAKIAkJc3Bpbl9sb2NrX2luaXQoJnFlX2djLT5sb2NrKTsKIAogCQltbV9nYyA9ICZxZV9nYy0+bW1fZ2M7Ci0JCW9mX2djID0gJm1tX2djLT5vZl9nYzsKLQkJZ2MgPSAmb2ZfZ2MtPmdjOworCQlnYyA9ICZtbV9nYy0+Z2M7CiAKIAkJbW1fZ2MtPnNhdmVfcmVncyA9IHFlX2dwaW9fc2F2ZV9yZWdzOwotCQlvZl9nYy0+Z3Bpb19jZWxscyA9IDI7CiAJCWdjLT5uZ3BpbyA9IFFFX1BJT19QSU5TOwogCQlnYy0+ZGlyZWN0aW9uX2lucHV0ID0gcWVfZ3Bpb19kaXJfaW47CiAJCWdjLT5kaXJlY3Rpb25fb3V0cHV0ID0gcWVfZ3Bpb19kaXJfb3V0OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWUuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlLmMKaW5kZXggMDkzZTBhZS4uM2RhODAxNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWUuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZS5jCkBAIC02NTEsMTQgKzY1MSwxNSBAQAogRVhQT1JUX1NZTUJPTChxZV9nZXRfbnVtX29mX3NudW1zKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1NVU1BFTkQpICYmIGRlZmluZWQoQ09ORklHX1BQQ184NXh4KQotc3RhdGljIGludCBxZV9yZXN1bWUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCitzdGF0aWMgaW50IHFlX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldikKIHsKIAlpZiAoIXFlX2FsaXZlX2R1cmluZ19zbGVlcCgpKQogCQlxZV9yZXNldCgpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHFlX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBpbnQgcWVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYsCisJCSAgICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICppZCkKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvc2ltcGxlX2dwaW8uYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvc2ltcGxlX2dwaW8uYwppbmRleCBkNWZiMTczLi5iNmRlZmRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3NpbXBsZV9ncGlvLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9zaW1wbGVfZ3Bpby5jCkBAIC05MSw3ICs5MSw2IEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgdThfZ3Bpb19jaGlwICp1OF9nYzsKIAlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYzsKLQlzdHJ1Y3Qgb2ZfZ3Bpb19jaGlwICpvZl9nYzsKIAlzdHJ1Y3QgZ3Bpb19jaGlwICpnYzsKIAogCXU4X2djID0ga3phbGxvYyhzaXplb2YoKnU4X2djKSwgR0ZQX0tFUk5FTCk7CkBAIC0xMDEsMTEgKzEwMCw5IEBACiAJc3Bpbl9sb2NrX2luaXQoJnU4X2djLT5sb2NrKTsKIAogCW1tX2djID0gJnU4X2djLT5tbV9nYzsKLQlvZl9nYyA9ICZtbV9nYy0+b2ZfZ2M7Ci0JZ2MgPSAmb2ZfZ2MtPmdjOworCWdjID0gJm1tX2djLT5nYzsKIAogCW1tX2djLT5zYXZlX3JlZ3MgPSB1OF9ncGlvX3NhdmVfcmVnczsKLQlvZl9nYy0+Z3Bpb19jZWxscyA9IDI7CiAJZ2MtPm5ncGlvID0gODsKIAlnYy0+ZGlyZWN0aW9uX2lucHV0ID0gdThfZ3Bpb19kaXJfaW47CiAJZ2MtPmRpcmVjdGlvbl9vdXRwdXQgPSB1OF9ncGlvX2Rpcl9vdXQ7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMgYi9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKaW5kZXggOGJhZDdkNS4uMDU1NDQ0NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYwpAQCAtMTU1LDYgKzE1NSw5IEBACiAjaWZkZWYgQ09ORklHXzQ0eAogc3RhdGljIHZvaWQgZHVtcF90bGJfNDR4KHZvaWQpOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX1BQQ19CT09LM0UKK3N0YXRpYyB2b2lkIGR1bXBfdGxiX2Jvb2szZSh2b2lkKTsKKyNlbmRpZgogCiBzdGF0aWMgaW50IHhtb25fbm9fYXV0b19iYWNrdHJhY2U7CiAKQEAgLTg4OCw2ICs4OTEsMTEgQEAKIAkJCWR1bXBfdGxiXzQ0eCgpOwogCQkJYnJlYWs7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQorCQljYXNlICd1JzoKKwkJCWR1bXBfdGxiX2Jvb2szZSgpOworCQkJYnJlYWs7CisjZW5kaWYKIAkJZGVmYXVsdDoKIAkJCXByaW50ZigiVW5yZWNvZ25pemVkIGNvbW1hbmQ6ICIpOwogCQkgICAgICAgIGRvIHsKQEAgLTI3MDEsNiArMjcwOSwxNTAgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfNDR4ICovCiAKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQorc3RhdGljIHZvaWQgZHVtcF90bGJfYm9vazNlKHZvaWQpCit7CisJdTMyIG1tdWNmZywgcGlkbWFzaywgbHBpZG1hc2s7CisJdTY0IHJhbWFzazsKKwlpbnQgaSwgdGxiLCBudGxicywgcGlkc3osIGxwaWRzeiwgcmFzeiwgbHJhdCA9IDA7CisJaW50IG1tdV92ZXJzaW9uOworCXN0YXRpYyBjb25zdCBjaGFyICpwZ3N6X25hbWVzW10gPSB7CisJCSIgIDFLIiwKKwkJIiAgMksiLAorCQkiICA0SyIsCisJCSIgIDhLIiwKKwkJIiAxNksiLAorCQkiIDMySyIsCisJCSIgNjRLIiwKKwkJIjEyOEsiLAorCQkiMjU2SyIsCisJCSI1MTJLIiwKKwkJIiAgMU0iLAorCQkiICAyTSIsCisJCSIgIDRNIiwKKwkJIiAgOE0iLAorCQkiIDE2TSIsCisJCSIgMzJNIiwKKwkJIiA2NE0iLAorCQkiMTI4TSIsCisJCSIyNTZNIiwKKwkJIjUxMk0iLAorCQkiICAxRyIsCisJCSIgIDJHIiwKKwkJIiAgNEciLAorCQkiICA4RyIsCisJCSIgMTZHIiwKKwkJIiAzMkciLAorCQkiIDY0RyIsCisJCSIxMjhHIiwKKwkJIjI1NkciLAorCQkiNTEyRyIsCisJCSIgIDFUIiwKKwkJIiAgMlQiLAorCX07CisKKwkvKiBHYXRoZXIgc29tZSBpbmZvcyBhYm91dCB0aGUgTU1VICovCisJbW11Y2ZnID0gbWZzcHIoU1BSTl9NTVVDRkcpOworCW1tdV92ZXJzaW9uID0gKG1tdWNmZyAmIDMpICsgMTsKKwludGxicyA9ICgobW11Y2ZnID4+IDIpICYgMykgKyAxOworCXBpZHN6ID0gKChtbXVjZmcgPj4gNikgJiAweDFmKSArIDE7CisJbHBpZHN6ID0gKG1tdWNmZyA+PiAyNCkgJiAweGY7CisJcmFzeiA9IChtbXVjZmcgPj4gMTYpICYgMHg3ZjsKKwlpZiAoKG1tdV92ZXJzaW9uID4gMSkgJiYgKG1tdWNmZyAmIDB4MTAwMDApKQorCQlscmF0ID0gMTsKKwlwcmludGYoIkJvb2szRSBNTVUgTUFWPSVkLjAsJWQgVExCcywlZC1iaXQgUElELCVkLWJpdCBMUElELCVkLWJpdCBSQVxuIiwKKwkgICAgICAgbW11X3ZlcnNpb24sIG50bGJzLCBwaWRzeiwgbHBpZHN6LCByYXN6KTsKKwlwaWRtYXNrID0gKDF1bCA8PCBwaWRzeikgLSAxOworCWxwaWRtYXNrID0gKDF1bCA8PCBscGlkc3opIC0gMTsKKwlyYW1hc2sgPSAoMXVsbCA8PCByYXN6KSAtIDE7CisKKwlmb3IgKHRsYiA9IDA7IHRsYiA8IG50bGJzOyB0bGIrKykgeworCQl1MzIgdGxiY2ZnOworCQlpbnQgbmVudCwgYXNzb2MsIG5ld19jYyA9IDE7CisJCXByaW50ZigiVExCICVkOlxuLS0tLS0tXG4iLCB0bGIpOworCQlzd2l0Y2godGxiKSB7CisJCWNhc2UgMDoKKwkJCXRsYmNmZyA9IG1mc3ByKFNQUk5fVExCMENGRyk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJdGxiY2ZnID0gbWZzcHIoU1BSTl9UTEIxQ0ZHKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQl0bGJjZmcgPSBtZnNwcihTUFJOX1RMQjJDRkcpOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXRsYmNmZyA9IG1mc3ByKFNQUk5fVExCM0NGRyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ZigiVW5zdXBwb3J0ZWQgVExCIG51bWJlciAhXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCW5lbnQgPSB0bGJjZmcgJiAweGZmZjsKKwkJYXNzb2MgPSAodGxiY2ZnID4+IDI0KSAmIDB4ZmY7CisJCWZvciAoaSA9IDA7IGkgPCBuZW50OyBpKyspIHsKKwkJCXUzMiBtYXMwID0gTUFTMF9UTEJTRUwodGxiKTsKKwkJCXUzMiBtYXMxID0gTUFTMV9UU0laRShCT09LM0VfUEFHRVNaXzRLKTsKKwkJCXU2NCBtYXMyID0gMDsKKwkJCXU2NCBtYXM3X21hczM7CisJCQlpbnQgZXNlbCA9IGksIGNjID0gaTsKKworCQkJaWYgKGFzc29jICE9IDApIHsKKwkJCQljYyA9IGkgLyBhc3NvYzsKKwkJCQllc2VsID0gaSAlIGFzc29jOworCQkJCW1hczIgPSBjYyAqIDB4MTAwMDsKKwkJCX0KKworCQkJbWFzMCB8PSBNQVMwX0VTRUwoZXNlbCk7CisJCQltdHNwcihTUFJOX01BUzAsIG1hczApOworCQkJbXRzcHIoU1BSTl9NQVMxLCBtYXMxKTsKKwkJCW10c3ByKFNQUk5fTUFTMiwgbWFzMik7CisJCQlhc20gdm9sYXRpbGUoInRsYnJlICAwLDAsMCIgOiA6IDogIm1lbW9yeSIpOworCQkJbWFzMSA9IG1mc3ByKFNQUk5fTUFTMSk7CisJCQltYXMyID0gbWZzcHIoU1BSTl9NQVMyKTsKKwkJCW1hczdfbWFzMyA9IG1mc3ByKFNQUk5fTUFTN19NQVMzKTsKKwkJCWlmIChhc3NvYyAmJiAoaSAlIGFzc29jKSA9PSAwKQorCQkJCW5ld19jYyA9IDE7CisJCQlpZiAoIShtYXMxICYgTUFTMV9WQUxJRCkpCisJCQkJY29udGludWU7CisJCQlpZiAoYXNzb2MgPT0gMCkKKwkJCQlwcmludGYoIiUwNHgtICIsIGkpOworCQkJZWxzZSBpZiAobmV3X2NjKQorCQkJCXByaW50ZigiJTA0eC0lYyIsIGNjLCAnQScgKyBlc2VsKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoIiAgICB8JWMiLCAnQScgKyBlc2VsKTsKKwkJCW5ld19jYyA9IDA7CisJCQlwcmludGYoIiAlMDE2bGx4ICUwNHggJXMgJWMlYyBBUyVjIiwKKwkJCSAgICAgICBtYXMyICYgfjB4M2ZmdWxsLAorCQkJICAgICAgIChtYXMxID4+IDE2KSAmIDB4M2ZmZiwKKwkJCSAgICAgICBwZ3N6X25hbWVzWyhtYXMxID4+IDcpICYgMHgxZl0sCisJCQkgICAgICAgbWFzMSAmIE1BUzFfSU5EID8gJ0knIDogJyAnLAorCQkJICAgICAgIG1hczEgJiBNQVMxX0lQUk9UID8gJ1AnIDogJyAnLAorCQkJICAgICAgIG1hczEgJiBNQVMxX1RTID8gJzEnIDogJzAnKTsKKwkJCXByaW50ZigiICVjJWMlYyVjJWMlYyVjIiwKKwkJCSAgICAgICBtYXMyICYgTUFTMl9YMCA/ICdhJyA6ICcgJywKKwkJCSAgICAgICBtYXMyICYgTUFTMl9YMSA/ICd2JyA6ICcgJywKKwkJCSAgICAgICBtYXMyICYgTUFTMl9XICA/ICd3JyA6ICcgJywKKwkJCSAgICAgICBtYXMyICYgTUFTMl9JICA/ICdpJyA6ICcgJywKKwkJCSAgICAgICBtYXMyICYgTUFTMl9NICA/ICdtJyA6ICcgJywKKwkJCSAgICAgICBtYXMyICYgTUFTMl9HICA/ICdnJyA6ICcgJywKKwkJCSAgICAgICBtYXMyICYgTUFTMl9FICA/ICdlJyA6ICcgJyk7CisJCQlwcmludGYoIiAlMDE2bGx4IiwgbWFzN19tYXMzICYgcmFtYXNrICYgfjB4N2ZmdWxsKTsKKwkJCWlmIChtYXMxICYgTUFTMV9JTkQpCisJCQkJcHJpbnRmKCIgJXNcbiIsCisJCQkJICAgICAgIHBnc3pfbmFtZXNbKG1hczdfbWFzMyA+PiAxKSAmIDB4MWZdKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoIiBVJWMlYyVjIFMlYyVjJWNcbiIsCisJCQkJICAgICAgIG1hczdfbWFzMyAmIE1BUzNfVVggPyAneCcgOiAnICcsCisJCQkJICAgICAgIG1hczdfbWFzMyAmIE1BUzNfVVcgPyAndycgOiAnICcsCisJCQkJICAgICAgIG1hczdfbWFzMyAmIE1BUzNfVVIgPyAncicgOiAnICcsCisJCQkJICAgICAgIG1hczdfbWFzMyAmIE1BUzNfU1ggPyAneCcgOiAnICcsCisJCQkJICAgICAgIG1hczdfbWFzMyAmIE1BUzNfU1cgPyAndycgOiAnICcsCisJCQkJICAgICAgIG1hczdfbWFzMyAmIE1BUzNfU1IgPyAncicgOiAnICcpOworCQl9CisJfQorfQorI2VuZGlmIC8qIENPTkZJR19QUENfQk9PSzNFICovCisKIHN0YXRpYyB2b2lkIHhtb25faW5pdChpbnQgZW5hYmxlKQogewogI2lmZGVmIENPTkZJR19QUENfSVNFUklFUwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZwppbmRleCBiZWUxYzBmLi5mMDc3N2E0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvS2NvbmZpZworKysgYi9hcmNoL3MzOTAvS2NvbmZpZwpAQCAtNDAsOSArNDAsNiBAQAogY29uZmlnIEdFTkVSSUNfSFdFSUdIVAogCWRlZl9ib29sIHkKIAotY29uZmlnIEdFTkVSSUNfVElNRQotCWRlZl9ib29sIHkKLQogY29uZmlnIEdFTkVSSUNfVElNRV9WU1lTQ0FMTAogCWRlZl9ib29sIHkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL01ha2VmaWxlIGIvYXJjaC9zMzkwL01ha2VmaWxlCmluZGV4IDMwYzVmMDEuLjBjOWU2YzZkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvTWFrZWZpbGUKKysrIGIvYXJjaC9zMzkwL01ha2VmaWxlCkBAIC0yNCw3ICsyNCw4IEBACiBlbHNlCiBMRF9CRkQJCTo9IGVsZjY0LXMzOTAKIExERkxBR1MJCTo9IC1tIGVsZjY0X3MzOTAKLU1PREZMQUdTCSs9IC1mcGljIC1EX19QSUNfXworS0JVSUxEX0FGTEFHU19NT0RVTEUgKz0gLWZwaWMgLURfX1BJQ19fCitLQlVJTERfQ0ZMQUdTX01PRFVMRSArPSAtZnBpYyAtRF9fUElDX18KIEtCVUlMRF9DRkxBR1MJKz0gLW02NAogS0JVSUxEX0FGTEFHUwkrPSAtbTY0CiBVVFNfTUFDSElORQk6PSBzMzkweApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhX25ldF9zdW0uYyBiL2FyY2gvczM5MC9hcHBsZGF0YS9hcHBsZGF0YV9uZXRfc3VtLmMKaW5kZXggOWE5NTg2Zi4uZjAyZTg5YyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhX25ldF9zdW0uYworKysgYi9hcmNoL3MzOTAvYXBwbGRhdGEvYXBwbGRhdGFfbmV0X3N1bS5jCkBAIC04NSw3ICs4NSw4IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yX2VhY2hfbmV0ZGV2X3JjdSgmaW5pdF9uZXQsIGRldikgewotCQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBkZXZfZ2V0X3N0YXRzKGRldik7CisJCXN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCB0ZW1wOworCQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBkZXZfZ2V0X3N0YXRzKGRldiwgJnRlbXApOwogCiAJCXJ4X3BhY2tldHMgKz0gc3RhdHMtPnJ4X3BhY2tldHM7CiAJCXR4X3BhY2tldHMgKz0gc3RhdHMtPnR4X3BhY2tldHM7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL01ha2VmaWxlIGIvYXJjaC9zMzkwL2NyeXB0by9NYWtlZmlsZQppbmRleCA2YTExNTdmLi4xY2Y4MWQ3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL01ha2VmaWxlCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vTWFrZWZpbGUKQEAgLTUsNiArNSw2IEBACiBvYmotJChDT05GSUdfQ1JZUFRPX1NIQTFfUzM5MCkgKz0gc2hhMV9zMzkwLm8gc2hhX2NvbW1vbi5vCiBvYmotJChDT05GSUdfQ1JZUFRPX1NIQTI1Nl9TMzkwKSArPSBzaGEyNTZfczM5MC5vIHNoYV9jb21tb24ubwogb2JqLSQoQ09ORklHX0NSWVBUT19TSEE1MTJfUzM5MCkgKz0gc2hhNTEyX3MzOTAubyBzaGFfY29tbW9uLm8KLW9iai0kKENPTkZJR19DUllQVE9fREVTX1MzOTApICs9IGRlc19zMzkwLm8gZGVzX2NoZWNrX2tleS5vCitvYmotJChDT05GSUdfQ1JZUFRPX0RFU19TMzkwKSArPSBkZXNfczM5MC5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0FFU19TMzkwKSArPSBhZXNfczM5MC5vCiBvYmotJChDT05GSUdfUzM5MF9QUk5HKSArPSBwcm5nLm8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vY3J5cHRvX2Rlcy5oIGIvYXJjaC9zMzkwL2NyeXB0by9jcnlwdG9fZGVzLmgKaW5kZXggYzk2NGI2NC4uNjIxMDQ1NyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9jcnlwdG9fZGVzLmgKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9jcnlwdG9fZGVzLmgKQEAgLTE1LDQgKzE1LDQgQEAKIAogZXh0ZXJuIGludCBjcnlwdG9fZGVzX2NoZWNrX2tleShjb25zdCB1OCosIHVuc2lnbmVkIGludCwgdTMyKik7CiAKLSNlbmRpZiAvL19fQ1JZUFRPX0RFU19IX18KKyNlbmRpZiAvKl9fQ1JZUFRPX0RFU19IX18qLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NyeXB0by9kZXNfczM5MC5jIGIvYXJjaC9zMzkwL2NyeXB0by9kZXNfczM5MC5jCmluZGV4IDJiYzQ3OWEuLmNjNTQyMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vZGVzX3MzOTAuYworKysgYi9hcmNoL3MzOTAvY3J5cHRvL2Rlc19zMzkwLmMKQEAgLTE0LDMyICsxNCwyMSBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8Y3J5cHRvL2FsZ2FwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2Rlcy5oPgogCiAjaW5jbHVkZSAiY3J5cHRfczM5MC5oIgotI2luY2x1ZGUgImNyeXB0b19kZXMuaCIKLQotI2RlZmluZSBERVNfQkxPQ0tfU0laRSA4Ci0jZGVmaW5lIERFU19LRVlfU0laRSA4Ci0KLSNkZWZpbmUgREVTM18xMjhfS0VZX1NJWkUJKDIgKiBERVNfS0VZX1NJWkUpCi0jZGVmaW5lIERFUzNfMTI4X0JMT0NLX1NJWkUJREVTX0JMT0NLX1NJWkUKIAogI2RlZmluZSBERVMzXzE5Ml9LRVlfU0laRQkoMyAqIERFU19LRVlfU0laRSkKLSNkZWZpbmUgREVTM18xOTJfQkxPQ0tfU0laRQlERVNfQkxPQ0tfU0laRQogCiBzdHJ1Y3QgY3J5cHRfczM5MF9kZXNfY3R4IHsKIAl1OCBpdltERVNfQkxPQ0tfU0laRV07CiAJdTgga2V5W0RFU19LRVlfU0laRV07CiB9OwogCi1zdHJ1Y3QgY3J5cHRfczM5MF9kZXMzXzEyOF9jdHggewotCXU4IGl2W0RFU19CTE9DS19TSVpFXTsKLQl1OCBrZXlbREVTM18xMjhfS0VZX1NJWkVdOwotfTsKLQogc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xOTJfY3R4IHsKIAl1OCBpdltERVNfQkxPQ0tfU0laRV07CiAJdTgga2V5W0RFUzNfMTkyX0tFWV9TSVpFXTsKQEAgLTUwLDEzICszOSwxNiBAQAogewogCXN0cnVjdCBjcnlwdF9zMzkwX2Rlc19jdHggKmRjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwogCXUzMiAqZmxhZ3MgPSAmdGZtLT5jcnRfZmxhZ3M7Ci0JaW50IHJldDsKKwl1MzIgdG1wW0RFU19FWFBLRVlfV09SRFNdOwogCi0JLyogdGVzdCBpZiBrZXkgaXMgdmFsaWQgKG5vdCBhIHdlYWsga2V5KSAqLwotCXJldCA9IGNyeXB0b19kZXNfY2hlY2tfa2V5KGtleSwga2V5bGVuLCBmbGFncyk7Ci0JaWYgKHJldCA9PSAwKQotCQltZW1jcHkoZGN0eC0+a2V5LCBrZXksIGtleWxlbik7Ci0JcmV0dXJuIHJldDsKKwkvKiBjaGVjayBmb3Igd2VhayBrZXlzICovCisJaWYgKCFkZXNfZWtleSh0bXAsIGtleSkgJiYgKCpmbGFncyAmIENSWVBUT19URk1fUkVRX1dFQUtfS0VZKSkgeworCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfV0VBS19LRVk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1lbWNweShkY3R4LT5rZXksIGtleSwga2V5bGVuKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgZGVzX2VuY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dCwgY29uc3QgdTggKmluKQpAQCAtMjM3LDE2NSArMjI5LDYgQEAKICAqICAgY29tcGxlbWVudGF0aW9uIGtleXMuICBBbnkgd2Vha25lc3MgaXMgb2J2aWF0ZWQgYnkgdGhlIHVzZSBvZgogICogICBtdWx0aXBsZSBrZXlzLgogICoKLSAqICAgSG93ZXZlciwgaWYgdGhlIHR3byAgaW5kZXBlbmRlbnQgNjQtYml0IGtleXMgYXJlIGVxdWFsLAotICogICB0aGVuIHRoZSBERVMzIG9wZXJhdGlvbiBpcyBzaW1wbHkgdGhlIHNhbWUgYXMgREVTLgotICogICBJbXBsZW1lbnRlcnMgTVVTVCByZWplY3Qga2V5cyB0aGF0IGV4aGliaXQgdGhpcyBwcm9wZXJ0eS4KLSAqCi0gKi8KLXN0YXRpYyBpbnQgZGVzM18xMjhfc2V0a2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICprZXksCi0JCQkgICB1bnNpZ25lZCBpbnQga2V5bGVuKQotewotCWludCBpLCByZXQ7Ci0Jc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xMjhfY3R4ICpkY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKLQljb25zdCB1OCAqdGVtcF9rZXkgPSBrZXk7Ci0JdTMyICpmbGFncyA9ICZ0Zm0tPmNydF9mbGFnczsKLQotCWlmICghKG1lbWNtcChrZXksICZrZXlbREVTX0tFWV9TSVpFXSwgREVTX0tFWV9TSVpFKSkgJiYKLQkgICAgKCpmbGFncyAmIENSWVBUT19URk1fUkVRX1dFQUtfS0VZKSkgewotCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfV0VBS19LRVk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrLCB0ZW1wX2tleSArPSBERVNfS0VZX1NJWkUpIHsKLQkJcmV0ID0gY3J5cHRvX2Rlc19jaGVja19rZXkodGVtcF9rZXksIERFU19LRVlfU0laRSwgZmxhZ3MpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCW1lbWNweShkY3R4LT5rZXksIGtleSwga2V5bGVuKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZGVzM18xMjhfZW5jcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQotewotCXN0cnVjdCBjcnlwdF9zMzkwX2RlczNfMTI4X2N0eCAqZGN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7Ci0KLQljcnlwdF9zMzkwX2ttKEtNX1RERUFfMTI4X0VOQ1JZUFQsIGRjdHgtPmtleSwgZHN0LCAodm9pZCopc3JjLAotCQkgICAgICBERVMzXzEyOF9CTE9DS19TSVpFKTsKLX0KLQotc3RhdGljIHZvaWQgZGVzM18xMjhfZGVjcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQotewotCXN0cnVjdCBjcnlwdF9zMzkwX2RlczNfMTI4X2N0eCAqZGN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7Ci0KLQljcnlwdF9zMzkwX2ttKEtNX1RERUFfMTI4X0RFQ1JZUFQsIGRjdHgtPmtleSwgZHN0LCAodm9pZCopc3JjLAotCQkgICAgICBERVMzXzEyOF9CTE9DS19TSVpFKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGRlczNfMTI4X2FsZyA9IHsKLQkuY3JhX25hbWUJCT0JImRlczNfZWRlMTI4IiwKLQkuY3JhX2RyaXZlcl9uYW1lCT0JImRlczNfZWRlMTI4LXMzOTAiLAotCS5jcmFfcHJpb3JpdHkJCT0JQ1JZUFRfUzM5MF9QUklPUklUWSwKLQkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9DSVBIRVIsCi0JLmNyYV9ibG9ja3NpemUJCT0JREVTM18xMjhfQkxPQ0tfU0laRSwKLQkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBjcnlwdF9zMzkwX2RlczNfMTI4X2N0eCksCi0JLmNyYV9tb2R1bGUJCT0JVEhJU19NT0RVTEUsCi0JLmNyYV9saXN0CQk9CUxJU1RfSEVBRF9JTklUKGRlczNfMTI4X2FsZy5jcmFfbGlzdCksCi0JLmNyYV91CQkJPQl7Ci0JCS5jaXBoZXIgPSB7Ci0JCQkuY2lhX21pbl9rZXlzaXplCT0JREVTM18xMjhfS0VZX1NJWkUsCi0JCQkuY2lhX21heF9rZXlzaXplCT0JREVTM18xMjhfS0VZX1NJWkUsCi0JCQkuY2lhX3NldGtleQkJPQlkZXMzXzEyOF9zZXRrZXksCi0JCQkuY2lhX2VuY3J5cHQJCT0JZGVzM18xMjhfZW5jcnlwdCwKLQkJCS5jaWFfZGVjcnlwdAkJPQlkZXMzXzEyOF9kZWNyeXB0LAotCQl9Ci0JfQotfTsKLQotc3RhdGljIGludCBlY2JfZGVzM18xMjhfZW5jcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCi0JCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCi0JCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsIHVuc2lnbmVkIGludCBuYnl0ZXMpCi17Ci0Jc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xMjhfY3R4ICpzY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsKLQlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKLQotCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOwotCXJldHVybiBlY2JfZGVzYWxsX2NyeXB0KGRlc2MsIEtNX1RERUFfMTI4X0VOQ1JZUFQsIHNjdHgtPmtleSwgJndhbGspOwotfQotCi1zdGF0aWMgaW50IGVjYl9kZXMzXzEyOF9kZWNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKLQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwKLQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywgdW5zaWduZWQgaW50IG5ieXRlcykKLXsKLQlzdHJ1Y3QgY3J5cHRfczM5MF9kZXMzXzEyOF9jdHggKnNjdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pOwotCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOwotCi0JYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7Ci0JcmV0dXJuIGVjYl9kZXNhbGxfY3J5cHQoZGVzYywgS01fVERFQV8xMjhfREVDUllQVCwgc2N0eC0+a2V5LCAmd2Fsayk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBlY2JfZGVzM18xMjhfYWxnID0gewotCS5jcmFfbmFtZQkJPQkiZWNiKGRlczNfZWRlMTI4KSIsCi0JLmNyYV9kcml2ZXJfbmFtZQk9CSJlY2ItZGVzM19lZGUxMjgtczM5MCIsCi0JLmNyYV9wcmlvcml0eQkJPQlDUllQVF9TMzkwX0NPTVBPU0lURV9QUklPUklUWSwKLQkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVIsCi0JLmNyYV9ibG9ja3NpemUJCT0JREVTM18xMjhfQkxPQ0tfU0laRSwKLQkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBjcnlwdF9zMzkwX2RlczNfMTI4X2N0eCksCi0JLmNyYV90eXBlCQk9CSZjcnlwdG9fYmxrY2lwaGVyX3R5cGUsCi0JLmNyYV9tb2R1bGUJCT0JVEhJU19NT0RVTEUsCi0JLmNyYV9saXN0CQk9CUxJU1RfSEVBRF9JTklUKAotCQkJCQkJZWNiX2RlczNfMTI4X2FsZy5jcmFfbGlzdCksCi0JLmNyYV91CQkJPQl7Ci0JCS5ibGtjaXBoZXIgPSB7Ci0JCQkubWluX2tleXNpemUJCT0JREVTM18xMjhfS0VZX1NJWkUsCi0JCQkubWF4X2tleXNpemUJCT0JREVTM18xMjhfS0VZX1NJWkUsCi0JCQkuc2V0a2V5CQkJPQlkZXMzXzEyOF9zZXRrZXksCi0JCQkuZW5jcnlwdAkJPQllY2JfZGVzM18xMjhfZW5jcnlwdCwKLQkJCS5kZWNyeXB0CQk9CWVjYl9kZXMzXzEyOF9kZWNyeXB0LAotCQl9Ci0JfQotfTsKLQotc3RhdGljIGludCBjYmNfZGVzM18xMjhfZW5jcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCi0JCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCi0JCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsIHVuc2lnbmVkIGludCBuYnl0ZXMpCi17Ci0Jc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xMjhfY3R4ICpzY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsKLQlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKLQotCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOwotCXJldHVybiBjYmNfZGVzYWxsX2NyeXB0KGRlc2MsIEtNQ19UREVBXzEyOF9FTkNSWVBULCBzY3R4LT5pdiwgJndhbGspOwotfQotCi1zdGF0aWMgaW50IGNiY19kZXMzXzEyOF9kZWNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKLQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwKLQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywgdW5zaWduZWQgaW50IG5ieXRlcykKLXsKLQlzdHJ1Y3QgY3J5cHRfczM5MF9kZXMzXzEyOF9jdHggKnNjdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pOwotCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOwotCi0JYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7Ci0JcmV0dXJuIGNiY19kZXNhbGxfY3J5cHQoZGVzYywgS01DX1RERUFfMTI4X0RFQ1JZUFQsIHNjdHgtPml2LCAmd2Fsayk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBjYmNfZGVzM18xMjhfYWxnID0gewotCS5jcmFfbmFtZQkJPQkiY2JjKGRlczNfZWRlMTI4KSIsCi0JLmNyYV9kcml2ZXJfbmFtZQk9CSJjYmMtZGVzM19lZGUxMjgtczM5MCIsCi0JLmNyYV9wcmlvcml0eQkJPQlDUllQVF9TMzkwX0NPTVBPU0lURV9QUklPUklUWSwKLQkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVIsCi0JLmNyYV9ibG9ja3NpemUJCT0JREVTM18xMjhfQkxPQ0tfU0laRSwKLQkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBjcnlwdF9zMzkwX2RlczNfMTI4X2N0eCksCi0JLmNyYV90eXBlCQk9CSZjcnlwdG9fYmxrY2lwaGVyX3R5cGUsCi0JLmNyYV9tb2R1bGUJCT0JVEhJU19NT0RVTEUsCi0JLmNyYV9saXN0CQk9CUxJU1RfSEVBRF9JTklUKAotCQkJCQkJY2JjX2RlczNfMTI4X2FsZy5jcmFfbGlzdCksCi0JLmNyYV91CQkJPQl7Ci0JCS5ibGtjaXBoZXIgPSB7Ci0JCQkubWluX2tleXNpemUJCT0JREVTM18xMjhfS0VZX1NJWkUsCi0JCQkubWF4X2tleXNpemUJCT0JREVTM18xMjhfS0VZX1NJWkUsCi0JCQkuaXZzaXplCQkJPQlERVMzXzEyOF9CTE9DS19TSVpFLAotCQkJLnNldGtleQkJCT0JZGVzM18xMjhfc2V0a2V5LAotCQkJLmVuY3J5cHQJCT0JY2JjX2RlczNfMTI4X2VuY3J5cHQsCi0JCQkuZGVjcnlwdAkJPQljYmNfZGVzM18xMjhfZGVjcnlwdCwKLQkJfQotCX0KLX07Ci0KLS8qCi0gKiBSRkMyNDUxOgotICoKLSAqICAgRm9yIERFUy1FREUzLCB0aGVyZSBpcyBubyBrbm93biBuZWVkIHRvIHJlamVjdCB3ZWFrIG9yCi0gKiAgIGNvbXBsZW1lbnRhdGlvbiBrZXlzLiAgQW55IHdlYWtuZXNzIGlzIG9idmlhdGVkIGJ5IHRoZSB1c2Ugb2YKLSAqICAgbXVsdGlwbGUga2V5cy4KLSAqCiAgKiAgIEhvd2V2ZXIsIGlmIHRoZSBmaXJzdCB0d28gb3IgbGFzdCB0d28gaW5kZXBlbmRlbnQgNjQtYml0IGtleXMgYXJlCiAgKiAgIGVxdWFsIChrMSA9PSBrMiBvciBrMiA9PSBrMyksIHRoZW4gdGhlIERFUzMgb3BlcmF0aW9uIGlzIHNpbXBseSB0aGUKICAqICAgc2FtZSBhcyBERVMuICBJbXBsZW1lbnRlcnMgTVVTVCByZWplY3Qga2V5cyB0aGF0IGV4aGliaXQgdGhpcwpAQCAtNDA1LDkgKzIzOCw3IEBACiBzdGF0aWMgaW50IGRlczNfMTkyX3NldGtleShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqa2V5LAogCQkJICAgdW5zaWduZWQgaW50IGtleWxlbikKIHsKLQlpbnQgaSwgcmV0OwogCXN0cnVjdCBjcnlwdF9zMzkwX2RlczNfMTkyX2N0eCAqZGN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7Ci0JY29uc3QgdTggKnRlbXBfa2V5ID0ga2V5OwogCXUzMiAqZmxhZ3MgPSAmdGZtLT5jcnRfZmxhZ3M7CiAKIAlpZiAoIShtZW1jbXAoa2V5LCAma2V5W0RFU19LRVlfU0laRV0sIERFU19LRVlfU0laRSkgJiYKQEAgLTQxNywxMSArMjQ4LDYgQEAKIAkJKmZsYWdzIHw9IENSWVBUT19URk1fUkVTX1dFQUtfS0VZOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JZm9yIChpID0gMDsgaSA8IDM7IGkrKywgdGVtcF9rZXkgKz0gREVTX0tFWV9TSVpFKSB7Ci0JCXJldCA9IGNyeXB0b19kZXNfY2hlY2tfa2V5KHRlbXBfa2V5LCBERVNfS0VZX1NJWkUsIGZsYWdzKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCX0KIAltZW1jcHkoZGN0eC0+a2V5LCBrZXksIGtleWxlbik7CiAJcmV0dXJuIDA7CiB9CkBAIC00MzEsNyArMjU3LDcgQEAKIAlzdHJ1Y3QgY3J5cHRfczM5MF9kZXMzXzE5Ml9jdHggKmRjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwogCiAJY3J5cHRfczM5MF9rbShLTV9UREVBXzE5Ml9FTkNSWVBULCBkY3R4LT5rZXksIGRzdCwgKHZvaWQqKXNyYywKLQkJICAgICAgREVTM18xOTJfQkxPQ0tfU0laRSk7CisJCSAgICAgIERFU19CTE9DS19TSVpFKTsKIH0KIAogc3RhdGljIHZvaWQgZGVzM18xOTJfZGVjcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQpAQCAtNDM5LDcgKzI2NSw3IEBACiAJc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xOTJfY3R4ICpkY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKIAogCWNyeXB0X3MzOTBfa20oS01fVERFQV8xOTJfREVDUllQVCwgZGN0eC0+a2V5LCBkc3QsICh2b2lkKilzcmMsCi0JCSAgICAgIERFUzNfMTkyX0JMT0NLX1NJWkUpOworCQkgICAgICBERVNfQkxPQ0tfU0laRSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBkZXMzXzE5Ml9hbGcgPSB7CkBAIC00NDcsNyArMjczLDcgQEAKIAkuY3JhX2RyaXZlcl9uYW1lCT0JImRlczNfZWRlLXMzOTAiLAogCS5jcmFfcHJpb3JpdHkJCT0JQ1JZUFRfUzM5MF9QUklPUklUWSwKIAkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9DSVBIRVIsCi0JLmNyYV9ibG9ja3NpemUJCT0JREVTM18xOTJfQkxPQ0tfU0laRSwKKwkuY3JhX2Jsb2Nrc2l6ZQkJPQlERVNfQkxPQ0tfU0laRSwKIAkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBjcnlwdF9zMzkwX2RlczNfMTkyX2N0eCksCiAJLmNyYV9tb2R1bGUJCT0JVEhJU19NT0RVTEUsCiAJLmNyYV9saXN0CQk9CUxJU1RfSEVBRF9JTklUKGRlczNfMTkyX2FsZy5jcmFfbGlzdCksCkBAIC00ODksNyArMzE1LDcgQEAKIAkuY3JhX2RyaXZlcl9uYW1lCT0JImVjYi1kZXMzX2VkZS1zMzkwIiwKIAkuY3JhX3ByaW9yaXR5CQk9CUNSWVBUX1MzOTBfQ09NUE9TSVRFX1BSSU9SSVRZLAogCS5jcmFfZmxhZ3MJCT0JQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUiwKLQkuY3JhX2Jsb2Nrc2l6ZQkJPQlERVMzXzE5Ml9CTE9DS19TSVpFLAorCS5jcmFfYmxvY2tzaXplCQk9CURFU19CTE9DS19TSVpFLAogCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xOTJfY3R4KSwKIAkuY3JhX3R5cGUJCT0JJmNyeXB0b19ibGtjaXBoZXJfdHlwZSwKIAkuY3JhX21vZHVsZQkJPQlUSElTX01PRFVMRSwKQEAgLTUzMyw3ICszNTksNyBAQAogCS5jcmFfZHJpdmVyX25hbWUJPQkiY2JjLWRlczNfZWRlLXMzOTAiLAogCS5jcmFfcHJpb3JpdHkJCT0JQ1JZUFRfUzM5MF9DT01QT1NJVEVfUFJJT1JJVFksCiAJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSLAotCS5jcmFfYmxvY2tzaXplCQk9CURFUzNfMTkyX0JMT0NLX1NJWkUsCisJLmNyYV9ibG9ja3NpemUJCT0JREVTX0JMT0NLX1NJWkUsCiAJLmNyYV9jdHhzaXplCQk9CXNpemVvZihzdHJ1Y3QgY3J5cHRfczM5MF9kZXMzXzE5Ml9jdHgpLAogCS5jcmFfdHlwZQkJPQkmY3J5cHRvX2Jsa2NpcGhlcl90eXBlLAogCS5jcmFfbW9kdWxlCQk9CVRISVNfTU9EVUxFLApAQCAtNTQzLDcgKzM2OSw3IEBACiAJCS5ibGtjaXBoZXIgPSB7CiAJCQkubWluX2tleXNpemUJCT0JREVTM18xOTJfS0VZX1NJWkUsCiAJCQkubWF4X2tleXNpemUJCT0JREVTM18xOTJfS0VZX1NJWkUsCi0JCQkuaXZzaXplCQkJPQlERVMzXzE5Ml9CTE9DS19TSVpFLAorCQkJLml2c2l6ZQkJCT0JREVTX0JMT0NLX1NJWkUsCiAJCQkuc2V0a2V5CQkJPQlkZXMzXzE5Ml9zZXRrZXksCiAJCQkuZW5jcnlwdAkJPQljYmNfZGVzM18xOTJfZW5jcnlwdCwKIAkJCS5kZWNyeXB0CQk9CWNiY19kZXMzXzE5Ml9kZWNyeXB0LApAQCAtNTUzLDEwICszNzksOSBAQAogCiBzdGF0aWMgaW50IGRlc19zMzkwX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0OwogCiAJaWYgKCFjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtNX0RFQV9FTkNSWVBUKSB8fAotCSAgICAhY3J5cHRfczM5MF9mdW5jX2F2YWlsYWJsZShLTV9UREVBXzEyOF9FTkNSWVBUKSB8fAogCSAgICAhY3J5cHRfczM5MF9mdW5jX2F2YWlsYWJsZShLTV9UREVBXzE5Ml9FTkNSWVBUKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCkBAIC01NjksMTcgKzM5NCw2IEBACiAJcmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmY2JjX2Rlc19hbGcpOwogCWlmIChyZXQpCiAJCWdvdG8gY2JjX2Rlc19lcnI7Ci0KLQlyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZkZXMzXzEyOF9hbGcpOwotCWlmIChyZXQpCi0JCWdvdG8gZGVzM18xMjhfZXJyOwotCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmVjYl9kZXMzXzEyOF9hbGcpOwotCWlmIChyZXQpCi0JCWdvdG8gZWNiX2RlczNfMTI4X2VycjsKLQlyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZjYmNfZGVzM18xMjhfYWxnKTsKLQlpZiAocmV0KQotCQlnb3RvIGNiY19kZXMzXzEyOF9lcnI7Ci0KIAlyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZkZXMzXzE5Ml9hbGcpOwogCWlmIChyZXQpCiAJCWdvdG8gZGVzM18xOTJfZXJyOwpAQCAtNTg5LDcgKzQwMyw2IEBACiAJcmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmY2JjX2RlczNfMTkyX2FsZyk7CiAJaWYgKHJldCkKIAkJZ290byBjYmNfZGVzM18xOTJfZXJyOwotCiBvdXQ6CiAJcmV0dXJuIHJldDsKIApAQCAtNTk4LDEyICs0MTEsNiBAQAogZWNiX2RlczNfMTkyX2VycjoKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmRlczNfMTkyX2FsZyk7CiBkZXMzXzE5Ml9lcnI6Ci0JY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZjYmNfZGVzM18xMjhfYWxnKTsKLWNiY19kZXMzXzEyOF9lcnI6Ci0JY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZlY2JfZGVzM18xMjhfYWxnKTsKLWVjYl9kZXMzXzEyOF9lcnI6Ci0JY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZkZXMzXzEyOF9hbGcpOwotZGVzM18xMjhfZXJyOgogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmY2JjX2Rlc19hbGcpOwogY2JjX2Rlc19lcnI6CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZlY2JfZGVzX2FsZyk7CkBAIC02MTMsMjEgKzQyMCwxOCBAQAogCWdvdG8gb3V0OwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgZGVzX3MzOTBfZmluaSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGRlc19zMzkwX2V4aXQodm9pZCkKIHsKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmNiY19kZXMzXzE5Ml9hbGcpOwogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmZWNiX2RlczNfMTkyX2FsZyk7CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZkZXMzXzE5Ml9hbGcpOwotCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmY2JjX2RlczNfMTI4X2FsZyk7Ci0JY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZlY2JfZGVzM18xMjhfYWxnKTsKLQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmRlczNfMTI4X2FsZyk7CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZjYmNfZGVzX2FsZyk7CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZlY2JfZGVzX2FsZyk7CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZkZXNfYWxnKTsKIH0KIAogbW9kdWxlX2luaXQoZGVzX3MzOTBfaW5pdCk7Ci1tb2R1bGVfZXhpdChkZXNfczM5MF9maW5pKTsKK21vZHVsZV9leGl0KGRlc19zMzkwX2V4aXQpOwogCiBNT0RVTEVfQUxJQVMoImRlcyIpOwogTU9EVUxFX0FMSUFTKCJkZXMzX2VkZSIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAyNzYwNWI2Li5jZWY3ZGJmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMjYsNyArMjYsNyBAQAogCiBzdHJ1Y3Qgc2NhX2VudHJ5IHsKIAlhdG9taWNfdCBzY247Ci0JX191NjQJcmVzZXJ2ZWQ7CisJX191MzIJcmVzZXJ2ZWQ7CiAJX191NjQJc2RhOwogCV9fdTY0CXJlc2VydmVkMlsyXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CkBAIC00MSw3ICs0MSw4IEBACiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAjZGVmaW5lIEtWTV9OUl9QQUdFX1NJWkVTIDIKLSNkZWZpbmUgS1ZNX0hQQUdFX1NISUZUKHgpIChQQUdFX1NISUZUICsgKCh4KSAtIDEpICogOCkKKyNkZWZpbmUgS1ZNX0hQQUdFX0dGTl9TSElGVCh4KSAoKCh4KSAtIDEpICogOCkKKyNkZWZpbmUgS1ZNX0hQQUdFX1NISUZUKHgpIChQQUdFX1NISUZUICsgS1ZNX0hQQUdFX0dGTl9TSElGVCh4KSkKICNkZWZpbmUgS1ZNX0hQQUdFX1NJWkUoeCkgKDFVTCA8PCBLVk1fSFBBR0VfU0hJRlQoeCkpCiAjZGVmaW5lIEtWTV9IUEFHRV9NQVNLKHgpCSh+KEtWTV9IUEFHRV9TSVpFKHgpIC0gMSkpCiAjZGVmaW5lIEtWTV9QQUdFU19QRVJfSFBBR0UoeCkJKEtWTV9IUEFHRV9TSVpFKHgpIC8gUEFHRV9TSVpFKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvY2FsNjQuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb2NhbDY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjOTNiNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb2NhbDY0LmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsNjQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcWRpby5oCmluZGV4IDBlYWFlNjI2Li4yYmE2MzAyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcWRpby5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmgKQEAgLTg0LDYgKzg0LDcgQEAKIAogI2RlZmluZSBRSUJfQUNfT1VUQk9VTkRfUENJX1NVUFBPUlRFRAkweDQwCiAjZGVmaW5lIFFJQl9SRkxBR1NfRU5BQkxFX1FFQlNNCQkweDgwCisjZGVmaW5lIFFJQl9SRkxBR1NfRU5BQkxFX0RBVEFfRElWCTB4MDIKIAogLyoqCiAgKiBzdHJ1Y3QgcWliIC0gcXVldWUgaW5mb3JtYXRpb24gYmxvY2sgKFFJQikKQEAgLTI4NCw2ICsyODUsOSBAQAogCXU4IHZhbFtRRElPX01BWF9CVUZGRVJTX1BFUl9RXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCwgYWxpZ25lZCgyNTYpKSk7CiAKKyNkZWZpbmUgQ0hTQ19BQzJfREFUQV9ESVZfQVZBSUxBQkxFCTB4MDAxMAorI2RlZmluZSBDSFNDX0FDMl9EQVRBX0RJVl9FTkFCTEVECTB4MDAwMgorCiBzdHJ1Y3QgcWRpb19zc3FkX2Rlc2MgewogCXU4IGZsYWdzOwogCXU4Ojg7CkBAIC0zMzIsNiArMzM2LDcgQEAKICAqIEBhZGFwdGVyX25hbWU6IG5hbWUgZm9yIHRoZSBhZGFwdGVyCiAgKiBAcWliX3BhcmFtX2ZpZWxkX2Zvcm1hdDogZm9ybWF0IGZvciBxaWJfcGFybV9maWVsZAogICogQHFpYl9wYXJhbV9maWVsZDogcG9pbnRlciB0byAxMjggYnl0ZXMgb3IgTlVMTCwgaWYgbm8gcGFyYW0gZmllbGQKKyAqIEBxaWJfcmZsYWdzOiByZmxhZ3MgdG8gc2V0CiAgKiBAaW5wdXRfc2xpYl9lbGVtZW50czogcG9pbnRlciB0byBub19pbnB1dF9xcyAqIDEyOCB3b3JkcyBvZiBkYXRhIG9yIE5VTEwKICAqIEBvdXRwdXRfc2xpYl9lbGVtZW50czogcG9pbnRlciB0byBub19vdXRwdXRfcXMgKiAxMjggd29yZHMgb2YgZGF0YSBvciBOVUxMCiAgKiBAbm9faW5wdXRfcXM6IG51bWJlciBvZiBpbnB1dCBxdWV1ZXMKQEAgLTM0OCw2ICszNTMsNyBAQAogCXVuc2lnbmVkIGNoYXIgYWRhcHRlcl9uYW1lWzhdOwogCXVuc2lnbmVkIGludCBxaWJfcGFyYW1fZmllbGRfZm9ybWF0OwogCXVuc2lnbmVkIGNoYXIgKnFpYl9wYXJhbV9maWVsZDsKKwl1bnNpZ25lZCBjaGFyIHFpYl9yZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyAqaW5wdXRfc2xpYl9lbGVtZW50czsKIAl1bnNpZ25lZCBsb25nICpvdXRwdXRfc2xpYl9lbGVtZW50czsKIAl1bnNpZ25lZCBpbnQgbm9faW5wdXRfcXM7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMKaW5kZXggZDVlM2U2MC4uYmVhOWVlMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUwpAQCAtNTM1LDggKzUzNSwxNiBAQAogCWwJJXIzLF9fTENfUEdNX0lMQwkjIGxvYWQgcHJvZ3JhbSBpbnRlcnJ1cHRpb24gY29kZQogCWxhCSVyOCwweDdmCiAJbnIJJXI4LCVyMyAJCSMgY2xlYXIgcGVyLWV2ZW50LWJpdCBhbmQgaWxjCi0JYmUJQkFTRUQocGdtX2V4aXQpCQkjIG9ubHkgcGVyIG9yIHBlcitjaGVjayA/Ci0JYglCQVNFRChwZ21fZG9fY2FsbCkKKwliZQlCQVNFRChwZ21fZXhpdDIpCSMgb25seSBwZXIgb3IgcGVyK2NoZWNrID8KKwlsCSVyNyxCQVNFRCguTGp1bXBfdGFibGUpCisJc2xsCSVyOCwyCisJbAklcjcsMCglcjgsJXI3KQkJIyBsb2FkIGFkZHJlc3Mgb2YgaGFuZGxlciByb3V0aW5lCisJbGEJJXIyLFNQX1BUUkVHUyglcjE1KQkjIGFkZHJlc3Mgb2YgcmVnaXN0ZXItc2F2ZSBhcmVhCisJYmFzcgklcjE0LCVyNwkJIyBicmFuY2ggdG8gaW50ZXJydXB0LWhhbmRsZXIKK3BnbV9leGl0MjoKKwlUUkFDRV9JUlFTX09OCisJc3Rvc20JX19TRl9FTVBUWSglcjE1KSwweDAzCSMgcmVlbmFibGUgaW50ZXJydXB0cworCWIJQkFTRUQoc3lzY19yZXR1cm4pCiAKICMKICMgaXQgd2FzIGEgc2luZ2xlIHN0ZXBwZWQgU1ZDIHRoYXQgaXMgY2F1c2luZyBhbGwgdGhlIHRyb3VibGUKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMKaW5kZXggZTcxOTJlMS4uOGJjY2VjMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMKQEAgLTU0NCw4ICs1NDQsMTYgQEAKIAlsZ2YJJXIzLF9fTENfUEdNX0lMQwkjIGxvYWQgcHJvZ3JhbSBpbnRlcnJ1cHRpb24gY29kZQogCWxnaGkJJXI4LDB4N2YKIAluZ3IJJXI4LCVyMwkJCSMgY2xlYXIgcGVyLWV2ZW50LWJpdCBhbmQgaWxjCi0JamUJcGdtX2V4aXQKLQlqCXBnbV9kb19jYWxsCisJamUJcGdtX2V4aXQyCisJc2xsCSVyOCwzCisJbGFybAklcjEscGdtX2NoZWNrX3RhYmxlCisJbGcJJXIxLDAoJXI4LCVyMSkJCSMgbG9hZCBhZGRyZXNzIG9mIGhhbmRsZXIgcm91dGluZQorCWxhCSVyMixTUF9QVFJFR1MoJXIxNSkJIyBhZGRyZXNzIG9mIHJlZ2lzdGVyLXNhdmUgYXJlYQorCWJhc3IJJXIxNCwlcjEJCSMgYnJhbmNoIHRvIGludGVycnVwdC1oYW5kbGVyCitwZ21fZXhpdDI6CisJVFJBQ0VfSVJRU19PTgorCXN0b3NtCV9fU0ZfRU1QVFkoJXIxNSksMHgwMwkjIHJlZW5hYmxlIGludGVycnVwdHMKKwlqCXN5c2NfcmV0dXJuCiAKICMKICMgaXQgd2FzIGEgc2luZ2xlIHN0ZXBwZWQgU1ZDIHRoYXQgaXMgY2F1c2luZyBhbGwgdGhlIHRyb3VibGUKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKaW5kZXggYTIxNjNjOS4uMjg5NmNhYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKQEAgLTIwNyw4ICsyMDcsOCBAQAogCXJldHVybiAmY2xvY2tzb3VyY2VfdG9kOwogfQogCi12b2lkIHVwZGF0ZV92c3lzY2FsbChzdHJ1Y3QgdGltZXNwZWMgKndhbGxfdGltZSwgc3RydWN0IGNsb2Nrc291cmNlICpjbG9jaywKLQkJICAgICB1MzIgbXVsdCkKK3ZvaWQgdXBkYXRlX3ZzeXNjYWxsKHN0cnVjdCB0aW1lc3BlYyAqd2FsbF90aW1lLCBzdHJ1Y3QgdGltZXNwZWMgKnd0bSwKKwkJCXN0cnVjdCBjbG9ja3NvdXJjZSAqY2xvY2ssIHUzMiBtdWx0KQogewogCWlmIChjbG9jayAhPSAmY2xvY2tzb3VyY2VfdG9kKQogCQlyZXR1cm47CkBAIC0yMTksOCArMjE5LDggQEAKIAl2ZHNvX2RhdGEtPnh0aW1lX3RvZF9zdGFtcCA9IGNsb2NrLT5jeWNsZV9sYXN0OwogCXZkc29fZGF0YS0+eHRpbWVfY2xvY2tfc2VjID0gd2FsbF90aW1lLT50dl9zZWM7CiAJdmRzb19kYXRhLT54dGltZV9jbG9ja19uc2VjID0gd2FsbF90aW1lLT50dl9uc2VjOwotCXZkc29fZGF0YS0+d3RvbV9jbG9ja19zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9zZWM7Ci0JdmRzb19kYXRhLT53dG9tX2Nsb2NrX25zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9uc2VjOworCXZkc29fZGF0YS0+d3RvbV9jbG9ja19zZWMgPSB3dG0tPnR2X3NlYzsKKwl2ZHNvX2RhdGEtPnd0b21fY2xvY2tfbnNlYyA9IHd0bS0+dHZfbnNlYzsKIAl2ZHNvX2RhdGEtPm50cF9tdWx0ID0gbXVsdDsKIAlzbXBfd21iKCk7CiAJKyt2ZHNvX2RhdGEtPnRiX3VwZGF0ZV9jb3VudDsKQEAgLTUyNCw4ICs1MjQsMTEgQEAKIAlpZiAoIWV0cl9lYWNyLnNsKQogCQlyZXR1cm47CiAJZGlzYWJsZV9zeW5jX2Nsb2NrKE5VTEwpOwotCXNldF9iaXQoRVRSX0VWRU5UX1NXSVRDSF9MT0NBTCwgJmV0cl9ldmVudHMpOwotCXF1ZXVlX3dvcmsodGltZV9zeW5jX3dxLCAmZXRyX3dvcmspOworCWlmICghdGVzdF9hbmRfc2V0X2JpdChFVFJfRVZFTlRfU1dJVENIX0xPQ0FMLCAmZXRyX2V2ZW50cykpIHsKKwkJZXRyX2VhY3IuZXMgPSBldHJfZWFjci5zbCA9IDA7CisJCWV0cl9zZXRyKCZldHJfZWFjcik7CisJCXF1ZXVlX3dvcmsodGltZV9zeW5jX3dxLCAmZXRyX3dvcmspOworCX0KIH0KIAogLyoKQEAgLTUzOSw4ICs1NDIsMTEgQEAKIAlpZiAoIWV0cl9lYWNyLmVzKQogCQlyZXR1cm47CiAJZGlzYWJsZV9zeW5jX2Nsb2NrKE5VTEwpOwotCXNldF9iaXQoRVRSX0VWRU5UX1NZTkNfQ0hFQ0ssICZldHJfZXZlbnRzKTsKLQlxdWV1ZV93b3JrKHRpbWVfc3luY193cSwgJmV0cl93b3JrKTsKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoRVRSX0VWRU5UX1NZTkNfQ0hFQ0ssICZldHJfZXZlbnRzKSkgeworCQlldHJfZWFjci5lcyA9IDA7CisJCWV0cl9zZXRyKCZldHJfZWFjcik7CisJCXF1ZXVlX3dvcmsodGltZV9zeW5jX3dxLCAmZXRyX3dvcmspOworCX0KIH0KIAogLyoKQEAgLTkwMiw3ICs5MDgsNyBAQAogCSAqIERvIG5vdCB0cnkgdG8gZ2V0IHRoZSBhbHRlcm5hdGUgcG9ydCBhaWIgaWYgdGhlIGNsb2NrCiAJICogaXMgbm90IGluIHN5bmMgeWV0LgogCSAqLwotCWlmICghY2hlY2tfc3luY19jbG9jaygpKQorCWlmICghZWFjci5lcyB8fCAhY2hlY2tfc3luY19jbG9jaygpKQogCQlyZXR1cm4gZWFjcjsKIAogCS8qCkBAIC0xMDY0LDcgKzEwNzAsNyBAQAogCSAqIElmIHRoZSBjbG9jayBpcyBpbiBzeW5jIGp1c3QgdXBkYXRlIHRoZSBlYWNyIGFuZCByZXR1cm4uCiAJICogSWYgdGhlcmUgaXMgbm8gdmFsaWQgc3luYyBwb3J0IHdhaXQgZm9yIGEgcG9ydCB1cGRhdGUuCiAJICovCi0JaWYgKGNoZWNrX3N5bmNfY2xvY2soKSB8fCBzeW5jX3BvcnQgPCAwKSB7CisJaWYgKChlYWNyLmVzICYmIGNoZWNrX3N5bmNfY2xvY2soKSkgfHwgc3luY19wb3J0IDwgMCkgewogCQlldHJfdXBkYXRlX2VhY3IoZWFjcik7CiAJCWV0cl9zZXRfdG9sZWNfdGltZW91dChub3cpOwogCQlnb3RvIG91dF91bmxvY2s7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYwppbmRleCAzZGRjMzA4Li5mN2I2ZGY0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jCisrKyBiL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMKQEAgLTEzNSw3ICsxMzUsNyBAQAogCXNwaW5fbG9ja19iaCgmdmNwdS0+YXJjaC5sb2NhbF9pbnQubG9jayk7CiAJaWYgKHZjcHUtPmFyY2gubG9jYWxfaW50LmFjdGlvbl9iaXRzICYgQUNUSU9OX1NUT1JFX09OX1NUT1ApIHsKIAkJdmNwdS0+YXJjaC5sb2NhbF9pbnQuYWN0aW9uX2JpdHMgJj0gfkFDVElPTl9TVE9SRV9PTl9TVE9QOwotCQlyYyA9IF9fa3ZtX3MzOTBfdmNwdV9zdG9yZV9zdGF0dXModmNwdSwKKwkJcmMgPSBrdm1fczM5MF92Y3B1X3N0b3JlX3N0YXR1cyh2Y3B1LAogCQkJCQkJICBLVk1fUzM5MF9TVE9SRV9TVEFUVVNfTk9BRERSKTsKIAkJaWYgKHJjID49IDApCiAJCQlyYyA9IC1FT1BOT1RTVVBQOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCmluZGV4IGFlMzcwNTguLjRmZTY4NjUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYworKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKQEAgLTIwNyw2ICsyMDcsNyBAQAogdm9pZCBrdm1fYXJjaF92Y3B1X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCVZDUFVfRVZFTlQodmNwdSwgMywgIiVzIiwgImZyZWUgY3B1Iik7CisJY2xlYXJfYml0KDYzIC0gdmNwdS0+dmNwdV9pZCwgKHVuc2lnbmVkIGxvbmcgKikgJnZjcHUtPmt2bS0+YXJjaC5zY2EtPm1jbik7CiAJaWYgKHZjcHUtPmt2bS0+YXJjaC5zY2EtPmNwdVt2Y3B1LT52Y3B1X2lkXS5zZGEgPT0KIAkJKF9fdTY0KSB2Y3B1LT5hcmNoLnNpZV9ibG9jaykKIAkJdmNwdS0+a3ZtLT5hcmNoLnNjYS0+Y3B1W3ZjcHUtPnZjcHVfaWRdLnNkYSA9IDA7CkBAIC0yOTYsNyArMjk3LDcgQEAKIHsKIAlhdG9taWNfc2V0KCZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Y3B1ZmxhZ3MsIENQVVNUQVRfWkFSQ0gpOwogCXNldF9iaXQoS1ZNX1JFUV9NTVVfUkVMT0FELCAmdmNwdS0+cmVxdWVzdHMpOwotCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5lY2IgICA9IDI7CisJdmNwdS0+YXJjaC5zaWVfYmxvY2stPmVjYiAgID0gNjsKIAl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+ZWNhICAgPSAweEMxMDAyMDAxVTsKIAl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+ZmFjICAgPSAoaW50KSAobG9uZykgZmFjaWxpdGllczsKIAlocnRpbWVyX2luaXQoJnZjcHUtPmFyY2guY2tjX3RpbWVyLCBDTE9DS19SRUFMVElNRSwgSFJUSU1FUl9NT0RFX0FCUyk7CkBAIC0zMjksNiArMzMwLDcgQEAKIAkJa3ZtLT5hcmNoLnNjYS0+Y3B1W2lkXS5zZGEgPSAoX191NjQpIHZjcHUtPmFyY2guc2llX2Jsb2NrOwogCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5zY2FvaCA9IChfX3UzMikoKChfX3U2NClrdm0tPmFyY2guc2NhKSA+PiAzMik7CiAJdmNwdS0+YXJjaC5zaWVfYmxvY2stPnNjYW9sID0gKF9fdTMyKShfX3U2NClrdm0tPmFyY2guc2NhOworCXNldF9iaXQoNjMgLSBpZCwgKHVuc2lnbmVkIGxvbmcgKikgJmt2bS0+YXJjaC5zY2EtPm1jbik7CiAKIAlzcGluX2xvY2tfaW5pdCgmdmNwdS0+YXJjaC5sb2NhbF9pbnQubG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJnZjcHUtPmFyY2gubG9jYWxfaW50Lmxpc3QpOwpAQCAtMzYzLDYzICszNjUsNDkgQEAKIAogc3RhdGljIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2luaXRpYWxfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXZjcHVfbG9hZCh2Y3B1KTsKIAlrdm1fczM5MF92Y3B1X2luaXRpYWxfcmVzZXQodmNwdSk7Ci0JdmNwdV9wdXQodmNwdSk7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9yZWdzICpyZWdzKQogewotCXZjcHVfbG9hZCh2Y3B1KTsKIAltZW1jcHkoJnZjcHUtPmFyY2guZ3Vlc3RfZ3BycywgJnJlZ3MtPmdwcnMsIHNpemVvZihyZWdzLT5ncHJzKSk7Ci0JdmNwdV9wdXQodmNwdSk7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9yZWdzICpyZWdzKQogewotCXZjcHVfbG9hZCh2Y3B1KTsKIAltZW1jcHkoJnJlZ3MtPmdwcnMsICZ2Y3B1LT5hcmNoLmd1ZXN0X2dwcnMsIHNpemVvZihyZWdzLT5ncHJzKSk7Ci0JdmNwdV9wdXQodmNwdSk7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJICBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncykKIHsKLQl2Y3B1X2xvYWQodmNwdSk7CiAJbWVtY3B5KCZ2Y3B1LT5hcmNoLmd1ZXN0X2FjcnMsICZzcmVncy0+YWNycywgc2l6ZW9mKHNyZWdzLT5hY3JzKSk7CiAJbWVtY3B5KCZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z2NyLCAmc3JlZ3MtPmNycywgc2l6ZW9mKHNyZWdzLT5jcnMpKTsKLQl2Y3B1X3B1dCh2Y3B1KTsKIAlyZXR1cm4gMDsKIH0KIAogaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X3NyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkgIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzKQogewotCXZjcHVfbG9hZCh2Y3B1KTsKIAltZW1jcHkoJnNyZWdzLT5hY3JzLCAmdmNwdS0+YXJjaC5ndWVzdF9hY3JzLCBzaXplb2Yoc3JlZ3MtPmFjcnMpKTsKIAltZW1jcHkoJnNyZWdzLT5jcnMsICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z2NyLCBzaXplb2Yoc3JlZ3MtPmNycykpOwotCXZjcHVfcHV0KHZjcHUpOwogCXJldHVybiAwOwogfQogCiBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfZnB1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9mcHUgKmZwdSkKIHsKLQl2Y3B1X2xvYWQodmNwdSk7CiAJbWVtY3B5KCZ2Y3B1LT5hcmNoLmd1ZXN0X2ZwcmVncy5mcHJzLCAmZnB1LT5mcHJzLCBzaXplb2YoZnB1LT5mcHJzKSk7CiAJdmNwdS0+YXJjaC5ndWVzdF9mcHJlZ3MuZnBjID0gZnB1LT5mcGM7Ci0JdmNwdV9wdXQodmNwdSk7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9mcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ZwdSAqZnB1KQogewotCXZjcHVfbG9hZCh2Y3B1KTsKIAltZW1jcHkoJmZwdS0+ZnBycywgJnZjcHUtPmFyY2guZ3Vlc3RfZnByZWdzLmZwcnMsIHNpemVvZihmcHUtPmZwcnMpKTsKIAlmcHUtPmZwYyA9IHZjcHUtPmFyY2guZ3Vlc3RfZnByZWdzLmZwYzsKLQl2Y3B1X3B1dCh2Y3B1KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDI3LDE0ICs0MTUsMTIgQEAKIHsKIAlpbnQgcmMgPSAwOwogCi0JdmNwdV9sb2FkKHZjcHUpOwogCWlmIChhdG9taWNfcmVhZCgmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmNwdWZsYWdzKSAmIENQVVNUQVRfUlVOTklORykKIAkJcmMgPSAtRUJVU1k7CiAJZWxzZSB7CiAJCXZjcHUtPnJ1bi0+cHN3X21hc2sgPSBwc3cubWFzazsKIAkJdmNwdS0+cnVuLT5wc3dfYWRkciA9IHBzdy5hZGRyOwogCX0KLQl2Y3B1X3B1dCh2Y3B1KTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTQ5OCw4ICs0ODQsNiBAQAogCWludCByYzsKIAlzaWdzZXRfdCBzaWdzYXZlZDsKIAotCXZjcHVfbG9hZCh2Y3B1KTsKLQogcmVydW5fdmNwdToKIAlpZiAodmNwdS0+cmVxdWVzdHMpCiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoS1ZNX1JFUV9NTVVfUkVMT0FELCAmdmNwdS0+cmVxdWVzdHMpKQpAQCAtNTY4LDggKzU1Miw2IEBACiAJaWYgKHZjcHUtPnNpZ3NldF9hY3RpdmUpCiAJCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmc2lnc2F2ZWQsIE5VTEwpOwogCi0JdmNwdV9wdXQodmNwdSk7Ci0KIAl2Y3B1LT5zdGF0LmV4aXRfdXNlcnNwYWNlKys7CiAJcmV0dXJuIHJjOwogfQpAQCAtNTg5LDcgKzU3MSw3IEBACiAgKiBLVk1fUzM5MF9TVE9SRV9TVEFUVVNfTk9BRERSOiAtPiAweDEyMDAgb24gNjQgYml0CiAgKiBLVk1fUzM5MF9TVE9SRV9TVEFUVVNfUFJFRklYRUQ6IC0+IHByZWZpeAogICovCi1pbnQgX19rdm1fczM5MF92Y3B1X3N0b3JlX3N0YXR1cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgYWRkcikKK2ludCBrdm1fczM5MF92Y3B1X3N0b3JlX3N0YXR1cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAljb25zdCB1bnNpZ25lZCBjaGFyIGFyY2htb2RlID0gMTsKIAlpbnQgcHJlZml4OwpAQCAtNjUxLDQ1ICs2MzMsNDIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBrdm1fczM5MF92Y3B1X3N0b3JlX3N0YXR1cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlpbnQgcmM7Ci0KLQl2Y3B1X2xvYWQodmNwdSk7Ci0JcmMgPSBfX2t2bV9zMzkwX3ZjcHVfc3RvcmVfc3RhdHVzKHZjcHUsIGFkZHIpOwotCXZjcHVfcHV0KHZjcHUpOwotCXJldHVybiByYzsKLX0KLQogbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAogCQkJIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOworCWxvbmcgcjsKIAogCXN3aXRjaCAoaW9jdGwpIHsKIAljYXNlIEtWTV9TMzkwX0lOVEVSUlVQVDogewogCQlzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHMzOTBpbnQ7CiAKKwkJciA9IC1FRkFVTFQ7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmczM5MGludCwgYXJncCwgc2l6ZW9mKHMzOTBpbnQpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3ZjcHUodmNwdSwgJnMzOTBpbnQpOworCQkJYnJlYWs7CisJCXIgPSBrdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LCAmczM5MGludCk7CisJCWJyZWFrOwogCX0KIAljYXNlIEtWTV9TMzkwX1NUT1JFX1NUQVRVUzoKLQkJcmV0dXJuIGt2bV9zMzkwX3ZjcHVfc3RvcmVfc3RhdHVzKHZjcHUsIGFyZyk7CisJCXIgPSBrdm1fczM5MF92Y3B1X3N0b3JlX3N0YXR1cyh2Y3B1LCBhcmcpOworCQlicmVhazsKIAljYXNlIEtWTV9TMzkwX1NFVF9JTklUSUFMX1BTVzogewogCQlwc3dfdCBwc3c7CiAKKwkJciA9IC1FRkFVTFQ7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmcHN3LCBhcmdwLCBzaXplb2YocHN3KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJcmV0dXJuIGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2luaXRpYWxfcHN3KHZjcHUsIHBzdyk7CisJCQlicmVhazsKKwkJciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2luaXRpYWxfcHN3KHZjcHUsIHBzdyk7CisJCWJyZWFrOwogCX0KIAljYXNlIEtWTV9TMzkwX0lOSVRJQUxfUkVTRVQ6Ci0JCXJldHVybiBrdm1fYXJjaF92Y3B1X2lvY3RsX2luaXRpYWxfcmVzZXQodmNwdSk7CisJCXIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX2luaXRpYWxfcmVzZXQodmNwdSk7CisJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCTsKKwkJciA9IC1FSU5WQUw7CiAJfQotCXJldHVybiAtRUlOVkFMOworCXJldHVybiByOwogfQogCiAvKiBTZWN0aW9uOiBtZW1vcnkgcmVsYXRlZCAqLwpAQCAtNzQ0LDExICs3MjMsNiBAQAogewogfQogCi1nZm5fdCB1bmFsaWFzX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbikKLXsKLQlyZXR1cm4gZ2ZuOwotfQotCiBzdGF0aWMgaW50IF9faW5pdCBrdm1fczM5MF9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaCBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaAppbmRleCBjZmE5ZDE3Li5hN2I3NTg2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgKKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oCkBAIC05Miw3ICs5Miw3IEBACiBpbnQga3ZtX3MzOTBfaGFuZGxlX3NpZ3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogLyogaW1wbGVtZW50ZWQgaW4ga3ZtLXMzOTAuYyAqLwotaW50IF9fa3ZtX3MzOTBfdmNwdV9zdG9yZV9zdGF0dXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAoraW50IGt2bV9zMzkwX3ZjcHVfc3RvcmVfc3RhdHVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkgdW5zaWduZWQgbG9uZyBhZGRyKTsKIC8qIGltcGxlbWVudGVkIGluIGRpYWcuYyAqLwogaW50IGt2bV9zMzkwX2hhbmRsZV9kaWFnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3Njb3JlL0tjb25maWcgYi9hcmNoL3Njb3JlL0tjb25maWcKaW5kZXggNTVkNDEzZS4uYmU0YTE1NSAxMDA2NDQKLS0tIGEvYXJjaC9zY29yZS9LY29uZmlnCisrKyBiL2FyY2gvc2NvcmUvS2NvbmZpZwpAQCAtNTUsOSArNTUsNiBAQAogY29uZmlnIEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlkZWZfYm9vbCB5CiAKLWNvbmZpZyBHRU5FUklDX1RJTUUKLQlkZWZfYm9vbCB5Ci0KIGNvbmZpZyBTQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVIKIAlkZWZfYm9vbCB5CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2NvcmUvTWFrZWZpbGUgYi9hcmNoL3Njb3JlL01ha2VmaWxlCmluZGV4IDY4ZTBjZDAuLmQ3N2RjNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2NvcmUvTWFrZWZpbGUKKysrIGIvYXJjaC9zY29yZS9NYWtlZmlsZQpAQCAtMjAsNyArMjAsOCBAQAogIwogS0JVSUxEX0FGTEFHUyArPSAkKGNmbGFncy15KQogS0JVSUxEX0NGTEFHUyArPSAkKGNmbGFncy15KQotTU9ERkxBR1MgKz0gLW1sb25nLWNhbGxzCitLQlVJTERfQUZMQUdTX01PRFVMRSArPSAtbWxvbmctY2FsbHMKK0tCVUlMRF9DRkxBR1NfTU9EVUxFICs9IC1tbG9uZy1jYWxscwogTERGTEFHUyArPSAtLW9mb3JtYXQgZWxmMzItbGl0dGxlc2NvcmUKIExERkxBR1Nfdm1saW51eAkrPSAtRzAgLXN0YXRpYyAtbm9zdGRsaWIKIApkaWZmIC0tZ2l0IGEvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS9sb2NhbDY0LmggYi9hcmNoL3Njb3JlL2luY2x1ZGUvYXNtL2xvY2FsNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmM5M2I1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS9sb2NhbDY0LmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsNjQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZyBiL2FyY2gvc2gvS2NvbmZpZwppbmRleCA1NzNmY2ExLi4zMzk5MGZhIDEwMDY0NAotLS0gYS9hcmNoL3NoL0tjb25maWcKKysrIGIvYXJjaC9zaC9LY29uZmlnCkBAIC0xMCw3ICsxMCw3IEBACiAJc2VsZWN0IEVNQkVEREVECiAJc2VsZWN0IEhBVkVfQ0xLCiAJc2VsZWN0IEhBVkVfSURFIGlmIEhBU19JT1BPUlQKLQlzZWxlY3QgSEFWRV9MTUIKKwlzZWxlY3QgSEFWRV9NRU1CTE9DSwogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJc2VsZWN0IEhBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQKIAlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSwpAQCAtOTgsOSArOTgsNiBAQAogY29uZmlnIEdFTkVSSUNfSU9NQVAKIAlib29sCiAKLWNvbmZpZyBHRU5FUklDX1RJTUUKLQlkZWZfYm9vbCB5Ci0KIGNvbmZpZyBHRU5FUklDX0NMT0NLRVZFTlRTCiAJZGVmX2Jvb2wgeQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWFwMzI1cnhhL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWFwMzI1cnhhL3NldHVwLmMKaW5kZXggM2ExNzBiZC4uZGUzNzViNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1hcDMyNXJ4YS9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtYXAzMjVyeGEvc2V0dXAuYwpAQCAtMzE2LDcgKzMxNiw3IEBACiAJLmZvcm1hdF9uYW1lID0gIlVZVlkiLAogCS5mb3JtYXRfZGVwdGggPSAxNiwKIAkuZm9ybWF0ID0gewotCQkuY29kZSA9IFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0JFLAorCQkuY29kZSA9IFY0TDJfTUJVU19GTVRfVVlWWThfMlg4LAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0sCiAJCS5maWVsZCA9IFY0TDJfRklFTERfTk9ORSwKIAkJLndpZHRoID0gNjQwLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9sbWIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbG1iLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliNDM3ZjYuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9sbWIuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9TSF9MTUJfSAotI2RlZmluZSBfX0FTTV9TSF9MTUJfSAotCi0jZGVmaW5lIExNQl9SRUFMX0xJTUlUCTAKLQotI2VuZGlmIC8qIF9fQVNNX1NIX0xNQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2xvY2FsNjQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbG9jYWw2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YzkzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2xvY2FsNjQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWw2NC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tZW1ibG9jay5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tZW1ibG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmZTY4M2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21lbWJsb2NrLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fQVNNX1NIX01FTUJMT0NLX0gKKyNkZWZpbmUgX19BU01fU0hfTUVNQkxPQ0tfSAorCisjZGVmaW5lIE1FTUJMT0NLX1JFQUxfTElNSVQJMAorCisjZW5kaWYgLyogX19BU01fU0hfTUVNQkxPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY2xrZGV2LmMgYi9hcmNoL3NoL2tlcm5lbC9jbGtkZXYuYwppbmRleCBkZWZkZDZlLi5iZWZjMjU1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jbGtkZXYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jbGtkZXYuYwpAQCAtMzYsNyArMzYsNyBAQAogICogIElmIGFuIGVudHJ5IGhhcyBhIGRldmljZSBJRCwgaXQgbXVzdCBtYXRjaAogICogIElmIGFuIGVudHJ5IGhhcyBhIGNvbm5lY3Rpb24gSUQsIGl0IG11c3QgbWF0Y2gKICAqIFRoZW4gd2UgdGFrZSB0aGUgbW9zdCBzcGVjaWZpYyBlbnRyeSAtIHdpdGggdGhlIGZvbGxvd2luZwotICogb3JkZXIgb2YgcHJlY2lkZW5jZTogZGV2K2NvbiA+IGRldiBvbmx5ID4gY29uIG9ubHkuCisgKiBvcmRlciBvZiBwcmVjZWRlbmNlOiBkZXYrY29uID4gZGV2IG9ubHkgPiBjb24gb25seS4KICAqLwogc3RhdGljIHN0cnVjdCBjbGsgKmNsa19maW5kKGNvbnN0IGNoYXIgKmRldl9pZCwgY29uc3QgY2hhciAqY29uX2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jIGIvYXJjaC9zaC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCmluZGV4IDVhNTU5ZTYuLmUyYTNhZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL21hY2hpbmVfa2V4ZWMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9udW1hLmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgotI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgorI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgpAQCAtMTU3LDEwICsxNTcsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcgY3Jhc2hfc2l6ZSwgY3Jhc2hfYmFzZTsKIAlpbnQgcmV0OwogCi0JLyogdGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvZiBsbWJfcGh5c19tZW1fc2l6ZSgpICovCi0JbG1iX2FuYWx5emUoKTsKKwkvKiB0aGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG9mIG1lbWJsb2NrX3BoeXNfbWVtX3NpemUoKSAqLworCW1lbWJsb2NrX2FuYWx5emUoKTsKIAotCXJldCA9IHBhcnNlX2NyYXNoa2VybmVsKGJvb3RfY29tbWFuZF9saW5lLCBsbWJfcGh5c19tZW1fc2l6ZSgpLAorCXJldCA9IHBhcnNlX2NyYXNoa2VybmVsKGJvb3RfY29tbWFuZF9saW5lLCBtZW1ibG9ja19waHlzX21lbV9zaXplKCksCiAJCQkmY3Jhc2hfc2l6ZSwgJmNyYXNoX2Jhc2UpOwogCWlmIChyZXQgPT0gMCAmJiBjcmFzaF9zaXplID4gMCkgewogCQljcmFzaGtfcmVzLnN0YXJ0ID0gY3Jhc2hfYmFzZTsKQEAgLTE3MiwxNCArMTcyLDE0IEBACiAKIAljcmFzaF9zaXplID0gUEFHRV9BTElHTihjcmFzaGtfcmVzLmVuZCAtIGNyYXNoa19yZXMuc3RhcnQgKyAxKTsKIAlpZiAoIWNyYXNoa19yZXMuc3RhcnQpIHsKLQkJdW5zaWduZWQgbG9uZyBtYXggPSBsbWJfZW5kX29mX0RSQU0oKSAtIG1lbW9yeV9saW1pdDsKLQkJY3Jhc2hrX3Jlcy5zdGFydCA9IF9fbG1iX2FsbG9jX2Jhc2UoY3Jhc2hfc2l6ZSwgUEFHRV9TSVpFLCBtYXgpOworCQl1bnNpZ25lZCBsb25nIG1heCA9IG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgLSBtZW1vcnlfbGltaXQ7CisJCWNyYXNoa19yZXMuc3RhcnQgPSBfX21lbWJsb2NrX2FsbG9jX2Jhc2UoY3Jhc2hfc2l6ZSwgUEFHRV9TSVpFLCBtYXgpOwogCQlpZiAoIWNyYXNoa19yZXMuc3RhcnQpIHsKIAkJCXByX2VycigiY3Jhc2hrZXJuZWwgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQkJZ290byBkaXNhYmxlOwogCQl9CiAJfSBlbHNlIHsKLQkJcmV0ID0gbG1iX3Jlc2VydmUoY3Jhc2hrX3Jlcy5zdGFydCwgY3Jhc2hfc2l6ZSk7CisJCXJldCA9IG1lbWJsb2NrX3Jlc2VydmUoY3Jhc2hrX3Jlcy5zdGFydCwgY3Jhc2hfc2l6ZSk7CiAJCWlmICh1bmxpa2VseShyZXQgPCAwKSkgewogCQkJcHJfZXJyKCJjcmFzaGtlcm5lbCByZXNlcnZhdGlvbiBmYWlsZWQgLSAiCiAJCQkgICAgICAgIm1lbW9yeSBpcyBpbiB1c2VcbiIpOwpAQCAtMTkyLDcgKzE5Miw3IEBACiAJLyoKIAkgKiBDcmFzaCBrZXJuZWwgdHJ1bXBzIG1lbW9yeSBsaW1pdAogCSAqLwotCWlmICgobG1iX2VuZF9vZl9EUkFNKCkgLSBtZW1vcnlfbGltaXQpIDw9IGNyYXNoa19yZXMuZW5kKSB7CisJaWYgKChtZW1ibG9ja19lbmRfb2ZfRFJBTSgpIC0gbWVtb3J5X2xpbWl0KSA8PSBjcmFzaGtfcmVzLmVuZCkgewogCQltZW1vcnlfbGltaXQgPSAwOwogCQlwcl9pbmZvKCJEaXNhYmxlZCBtZW1vcnkgbGltaXQgZm9yIGNyYXNoa2VybmVsXG4iKTsKIAl9CkBAIC0yMDEsNyArMjAxLDcgQEAKIAkJImZvciBjcmFzaGtlcm5lbCAoU3lzdGVtIFJBTTogJWxkTUIpXG4iLAogCQkodW5zaWduZWQgbG9uZykoY3Jhc2hfc2l6ZSA+PiAyMCksCiAJCSh1bnNpZ25lZCBsb25nKShjcmFzaGtfcmVzLnN0YXJ0KSwKLQkJKHVuc2lnbmVkIGxvbmcpKGxtYl9waHlzX21lbV9zaXplKCkgPj4gMjApKTsKKwkJKHVuc2lnbmVkIGxvbmcpKG1lbWJsb2NrX3BoeXNfbWVtX3NpemUoKSA+PiAyMCkpOwogCiAJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9hcmNoL3NoL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggODFiNmRlNC4uN2EzZGMzNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMTg1LDEwICsxODUsMTAgQEAKIAkgKiB0aGlzIGlzIHRoZSBzaW1wbGVzdCBhcHByb2FjaCBmb3IgbWFpbnRhaW5pbmcgY29uc2lzdGVuY3kuCiAJICovCiBhZ2FpbjoKLQlwcmV2X3Jhd19jb3VudCA9IGF0b21pYzY0X3JlYWQoJmh3Yy0+cHJldl9jb3VudCk7CisJcHJldl9yYXdfY291bnQgPSBsb2NhbDY0X3JlYWQoJmh3Yy0+cHJldl9jb3VudCk7CiAJbmV3X3Jhd19jb3VudCA9IHNoX3BtdS0+cmVhZChpZHgpOwogCi0JaWYgKGF0b21pYzY0X2NtcHhjaGcoJmh3Yy0+cHJldl9jb3VudCwgcHJldl9yYXdfY291bnQsCisJaWYgKGxvY2FsNjRfY21weGNoZygmaHdjLT5wcmV2X2NvdW50LCBwcmV2X3Jhd19jb3VudCwKIAkJCSAgICAgbmV3X3Jhd19jb3VudCkgIT0gcHJldl9yYXdfY291bnQpCiAJCWdvdG8gYWdhaW47CiAKQEAgLTIwMyw3ICsyMDMsNyBAQAogCWRlbHRhID0gKG5ld19yYXdfY291bnQgPDwgc2hpZnQpIC0gKHByZXZfcmF3X2NvdW50IDw8IHNoaWZ0KTsKIAlkZWx0YSA+Pj0gc2hpZnQ7CiAKLQlhdG9taWM2NF9hZGQoZGVsdGEsICZldmVudC0+Y291bnQpOworCWxvY2FsNjRfYWRkKGRlbHRhLCAmZXZlbnQtPmNvdW50KTsKIH0KIAogc3RhdGljIHZvaWQgc2hfcG11X2Rpc2FibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvc2gva2VybmVsL3NldHVwLmMKaW5kZXggMjcyNzM0Ni4uZTc2OTQwMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9sbWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTE0MSwxMCArMTQxLDEwIEBACiAJCWdvdG8gZGlzYWJsZTsKIAl9CiAKLQlpZiAodW5saWtlbHkoZW5kID4gbG1iX2VuZF9vZl9EUkFNKCkpKSB7CisJaWYgKHVubGlrZWx5KGVuZCA+IG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkpKSB7CiAJCXByX2VycigiaW5pdHJkIGV4dGVuZHMgYmV5b25kIGVuZCBvZiBtZW1vcnkgIgogCQkgICAgICAgIigweCUwOGx4ID4gMHglMDhseClcbmRpc2FibGluZyBpbml0cmRcbiIsCi0JCSAgICAgICBlbmQsICh1bnNpZ25lZCBsb25nKWxtYl9lbmRfb2ZfRFJBTSgpKTsKKwkJICAgICAgIGVuZCwgKHVuc2lnbmVkIGxvbmcpbWVtYmxvY2tfZW5kX29mX0RSQU0oKSk7CiAJCWdvdG8gZGlzYWJsZTsKIAl9CiAKQEAgLTE2MSw3ICsxNjEsNyBAQAogCWluaXRyZF9zdGFydCA9ICh1bnNpZ25lZCBsb25nKV9fdmEoX19wYShzdGFydCkpOwogCWluaXRyZF9lbmQgPSBpbml0cmRfc3RhcnQgKyBJTklUUkRfU0laRTsKIAotCWxtYl9yZXNlcnZlKF9fcGEoaW5pdHJkX3N0YXJ0KSwgSU5JVFJEX1NJWkUpOworCW1lbWJsb2NrX3Jlc2VydmUoX19wYShpbml0cmRfc3RhcnQpLCBJTklUUkRfU0laRSk7CiAKIAlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vaW5pdC5jIGIvYXJjaC9zaC9tbS9pbml0LmMKaW5kZXggNDZmODRkZS4uZDBlMjQ5MTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vaW5pdC5jCisrKyBiL2FyY2gvc2gvbW0vaW5pdC5jCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1iLmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS9tbXpvbmUuaD4KQEAgLTMzLDcgKzMzLDcgQEAKIAogdm9pZCBfX2luaXQgZ2VuZXJpY19tZW1faW5pdCh2b2lkKQogewotCWxtYl9hZGQoX19NRU1PUllfU1RBUlQsIF9fTUVNT1JZX1NJWkUpOworCW1lbWJsb2NrX2FkZChfX01FTU9SWV9TVEFSVCwgX19NRU1PUllfU0laRSk7CiB9CiAKIHZvaWQgX19pbml0IF9fd2VhayBwbGF0X21lbV9zZXR1cCh2b2lkKQpAQCAtMTc2LDEyICsxNzYsMTIgQEAKIAlnZXRfcGZuX3JhbmdlX2Zvcl9uaWQobmlkLCAmc3RhcnRfcGZuLCAmZW5kX3Bmbik7CiAKICNpZmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwotCXBoeXMgPSBfX2xtYl9hbGxvY19iYXNlKHNpemVvZihzdHJ1Y3QgcGdsaXN0X2RhdGEpLAorCXBoeXMgPSBfX21lbWJsb2NrX2FsbG9jX2Jhc2Uoc2l6ZW9mKHN0cnVjdCBwZ2xpc3RfZGF0YSksCiAJCQkJU01QX0NBQ0hFX0JZVEVTLCBlbmRfcGZuIDw8IFBBR0VfU0hJRlQpOwogCS8qIFJldHJ5IHdpdGggYWxsIG9mIHN5c3RlbSBtZW1vcnkgKi8KIAlpZiAoIXBoeXMpCi0JCXBoeXMgPSBfX2xtYl9hbGxvY19iYXNlKHNpemVvZihzdHJ1Y3QgcGdsaXN0X2RhdGEpLAotCQkJCQlTTVBfQ0FDSEVfQllURVMsIGxtYl9lbmRfb2ZfRFJBTSgpKTsKKwkJcGh5cyA9IF9fbWVtYmxvY2tfYWxsb2NfYmFzZShzaXplb2Yoc3RydWN0IHBnbGlzdF9kYXRhKSwKKwkJCQkJU01QX0NBQ0hFX0JZVEVTLCBtZW1ibG9ja19lbmRfb2ZfRFJBTSgpKTsKIAlpZiAoIXBoeXMpCiAJCXBhbmljKCJDYW4ndCBhbGxvY2F0ZSBwZ2RhdCBmb3Igbm9kZSAlZFxuIiwgbmlkKTsKIApAQCAtMjEyLDcgKzIxMiw3IEBACiAKIAl0b3RhbF9wYWdlcyA9IGJvb3RtZW1fYm9vdG1hcF9wYWdlcyhwLT5ub2RlX3NwYW5uZWRfcGFnZXMpOwogCi0JcGFkZHIgPSBsbWJfYWxsb2ModG90YWxfcGFnZXMgPDwgUEFHRV9TSElGVCwgUEFHRV9TSVpFKTsKKwlwYWRkciA9IG1lbWJsb2NrX2FsbG9jKHRvdGFsX3BhZ2VzIDw8IFBBR0VfU0hJRlQsIFBBR0VfU0laRSk7CiAJaWYgKCFwYWRkcikKIAkJcGFuaWMoIkNhbid0IGFsbG9jYXRlIGJvb3RtYXAgZm9yIG5pZFslZF1cbiIsIG5pZCk7CiAKQEAgLTIyNyw5ICsyMjcsOSBAQAogCSAqLwogCWlmIChuaWQgPT0gMCkgewogCQkvKiBSZXNlcnZlIHRoZSBzZWN0aW9ucyB3ZSdyZSBhbHJlYWR5IHVzaW5nLiAqLwotCQlmb3IgKGkgPSAwOyBpIDwgbG1iLnJlc2VydmVkLmNudDsgaSsrKQotCQkJcmVzZXJ2ZV9ib290bWVtKGxtYi5yZXNlcnZlZC5yZWdpb25baV0uYmFzZSwKLQkJCQkJbG1iX3NpemVfYnl0ZXMoJmxtYi5yZXNlcnZlZCwgaSksCisJCWZvciAoaSA9IDA7IGkgPCBtZW1ibG9jay5yZXNlcnZlZC5jbnQ7IGkrKykKKwkJCXJlc2VydmVfYm9vdG1lbShtZW1ibG9jay5yZXNlcnZlZC5yZWdpb25baV0uYmFzZSwKKwkJCQkJbWVtYmxvY2tfc2l6ZV9ieXRlcygmbWVtYmxvY2sucmVzZXJ2ZWQsIGkpLAogCQkJCQlCT09UTUVNX0RFRkFVTFQpOwogCX0KIApAQCAtMjQxLDEwICsyNDEsMTAgQEAKIAlpbnQgaTsKIAogCS8qIEFkZCBhY3RpdmUgcmVnaW9ucyB3aXRoIHZhbGlkIFBGTnMuICovCi0JZm9yIChpID0gMDsgaSA8IGxtYi5tZW1vcnkuY250OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbWVtYmxvY2subWVtb3J5LmNudDsgaSsrKSB7CiAJCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuOwotCQlzdGFydF9wZm4gPSBsbWIubWVtb3J5LnJlZ2lvbltpXS5iYXNlID4+IFBBR0VfU0hJRlQ7Ci0JCWVuZF9wZm4gPSBzdGFydF9wZm4gKyBsbWJfc2l6ZV9wYWdlcygmbG1iLm1lbW9yeSwgaSk7CisJCXN0YXJ0X3BmbiA9IG1lbWJsb2NrLm1lbW9yeS5yZWdpb25baV0uYmFzZSA+PiBQQUdFX1NISUZUOworCQllbmRfcGZuID0gc3RhcnRfcGZuICsgbWVtYmxvY2tfc2l6ZV9wYWdlcygmbWVtYmxvY2subWVtb3J5LCBpKTsKIAkJX19hZGRfYWN0aXZlX3JhbmdlKDAsIHN0YXJ0X3BmbiwgZW5kX3Bmbik7CiAJfQogCkBAIC0yNzYsNyArMjc2LDcgQEAKIAkgKiB0aGlzIGNhdGNoZXMgdGhlIChkZWZpbml0ZWx5IGJ1Z2d5KSBjYXNlIG9mIHVzIGFjY2lkZW50YWxseQogCSAqIGluaXRpYWxpemluZyB0aGUgYm9vdG1lbSBhbGxvY2F0b3Igd2l0aCBhbiBpbnZhbGlkIFJBTSBhcmVhLgogCSAqLwotCWxtYl9yZXNlcnZlKF9fTUVNT1JZX1NUQVJUICsgQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQsCisJbWVtYmxvY2tfcmVzZXJ2ZShfX01FTU9SWV9TVEFSVCArIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VULAogCQkgICAgKFBGTl9QSFlTKHN0YXJ0X3BmbikgKyBQQUdFX1NJWkUgLSAxKSAtCiAJCSAgICAoX19NRU1PUllfU1RBUlQgKyBDT05GSUdfWkVST19QQUdFX09GRlNFVCkpOwogCkBAIC0yODQsNyArMjg0LDcgQEAKIAkgKiBSZXNlcnZlIHBoeXNpY2FsIHBhZ2VzIGJlbG93IENPTkZJR19aRVJPX1BBR0VfT0ZGU0VULgogCSAqLwogCWlmIChDT05GSUdfWkVST19QQUdFX09GRlNFVCAhPSAwKQotCQlsbWJfcmVzZXJ2ZShfX01FTU9SWV9TVEFSVCwgQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQpOworCQltZW1ibG9ja19yZXNlcnZlKF9fTUVNT1JZX1NUQVJULCBDT05GSUdfWkVST19QQUdFX09GRlNFVCk7CiAKIAkvKgogCSAqIEhhbmRsZSBhZGRpdGlvbmFsIGVhcmx5IHJlc2VydmF0aW9ucwpAQCAtMjk5LDI3ICsyOTksMjcgQEAKIAl1bnNpZ25lZCBsb25nIHZhZGRyLCBlbmQ7CiAJaW50IG5pZDsKIAotCWxtYl9pbml0KCk7CisJbWVtYmxvY2tfaW5pdCgpOwogCiAJc2hfbXYubXZfbWVtX2luaXQoKTsKIAogCWVhcmx5X3Jlc2VydmVfbWVtKCk7CiAKLQlsbWJfZW5mb3JjZV9tZW1vcnlfbGltaXQobWVtb3J5X2xpbWl0KTsKLQlsbWJfYW5hbHl6ZSgpOworCW1lbWJsb2NrX2VuZm9yY2VfbWVtb3J5X2xpbWl0KG1lbW9yeV9saW1pdCk7CisJbWVtYmxvY2tfYW5hbHl6ZSgpOwogCi0JbG1iX2R1bXBfYWxsKCk7CisJbWVtYmxvY2tfZHVtcF9hbGwoKTsKIAogCS8qCiAJICogRGV0ZXJtaW5lIGxvdyBhbmQgaGlnaCBtZW1vcnkgcmFuZ2VzOgogCSAqLwotCW1heF9sb3dfcGZuID0gbWF4X3BmbiA9IGxtYl9lbmRfb2ZfRFJBTSgpID4+IFBBR0VfU0hJRlQ7CisJbWF4X2xvd19wZm4gPSBtYXhfcGZuID0gbWVtYmxvY2tfZW5kX29mX0RSQU0oKSA+PiBQQUdFX1NISUZUOwogCW1pbl9sb3dfcGZuID0gX19NRU1PUllfU1RBUlQgPj4gUEFHRV9TSElGVDsKIAogCW5vZGVzX2NsZWFyKG5vZGVfb25saW5lX21hcCk7CiAKIAltZW1vcnlfc3RhcnQgPSAodW5zaWduZWQgbG9uZylfX3ZhKF9fTUVNT1JZX1NUQVJUKTsKLQltZW1vcnlfZW5kID0gbWVtb3J5X3N0YXJ0ICsgKG1lbW9yeV9saW1pdCA/OiBsbWJfcGh5c19tZW1fc2l6ZSgpKTsKKwltZW1vcnlfZW5kID0gbWVtb3J5X3N0YXJ0ICsgKG1lbW9yeV9saW1pdCA/OiBtZW1ibG9ja19waHlzX21lbV9zaXplKCkpOwogCiAJdW5jYWNoZWRfaW5pdCgpOwogCXBtYl9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL251bWEuYyBiL2FyY2gvc2gvbW0vbnVtYS5jCmluZGV4IGEyZTY0NWYuLjNkODUyMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vbnVtYS5jCisrKyBiL2FyY2gvc2gvbW0vbnVtYS5jCkBAIC05LDcgKzksNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgorI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9udW1hLmg+CiAjaW5jbHVkZSA8bGludXgvcGZuLmg+CkBAIC0zOSwxMiArMzksMTIgQEAKIAlwbWJfYm9sdF9tYXBwaW5nKCh1bnNpZ25lZCBsb25nKV9fdmEoc3RhcnQpLCBzdGFydCwgZW5kIC0gc3RhcnQsCiAJCQkgUEFHRV9LRVJORUwpOwogCi0JbG1iX2FkZChzdGFydCwgZW5kIC0gc3RhcnQpOworCW1lbWJsb2NrX2FkZChzdGFydCwgZW5kIC0gc3RhcnQpOwogCiAJX19hZGRfYWN0aXZlX3JhbmdlKG5pZCwgc3RhcnRfcGZuLCBlbmRfcGZuKTsKIAogCS8qIE5vZGUtbG9jYWwgcGdkYXQgKi8KLQlOT0RFX0RBVEEobmlkKSA9IF9fdmEobG1iX2FsbG9jX2Jhc2Uoc2l6ZW9mKHN0cnVjdCBwZ2xpc3RfZGF0YSksCisJTk9ERV9EQVRBKG5pZCkgPSBfX3ZhKG1lbWJsb2NrX2FsbG9jX2Jhc2Uoc2l6ZW9mKHN0cnVjdCBwZ2xpc3RfZGF0YSksCiAJCQkJCSAgICAgU01QX0NBQ0hFX0JZVEVTLCBlbmQpKTsKIAltZW1zZXQoTk9ERV9EQVRBKG5pZCksIDAsIHNpemVvZihzdHJ1Y3QgcGdsaXN0X2RhdGEpKTsKIApAQCAtNTQsNyArNTQsNyBAQAogCiAJLyogTm9kZS1sb2NhbCBib290bWFwICovCiAJYm9vdG1hcF9wYWdlcyA9IGJvb3RtZW1fYm9vdG1hcF9wYWdlcyhlbmRfcGZuIC0gc3RhcnRfcGZuKTsKLQlib290bWVtX3BhZGRyID0gbG1iX2FsbG9jX2Jhc2UoYm9vdG1hcF9wYWdlcyA8PCBQQUdFX1NISUZULAorCWJvb3RtZW1fcGFkZHIgPSBtZW1ibG9ja19hbGxvY19iYXNlKGJvb3RtYXBfcGFnZXMgPDwgUEFHRV9TSElGVCwKIAkJCQkgICAgICAgUEFHRV9TSVpFLCBlbmQpOwogCWluaXRfYm9vdG1lbV9ub2RlKE5PREVfREFUQShuaWQpLCBib290bWVtX3BhZGRyID4+IFBBR0VfU0hJRlQsCiAJCQkgIHN0YXJ0X3BmbiwgZW5kX3Bmbik7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL0tjb25maWcgYi9hcmNoL3NwYXJjL0tjb25maWcKaW5kZXggNmYxNDcwYi4uNDkxZTlkNiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9LY29uZmlnCisrKyBiL2FyY2gvc3BhcmMvS2NvbmZpZwpAQCAtMTgsNiArMTgsNyBAQAogY29uZmlnIFNQQVJDCiAJYm9vbAogCWRlZmF1bHQgeQorCXNlbGVjdCBPRgogCXNlbGVjdCBIQVZFX0lERQogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJc2VsZWN0IEhBVkVfQVJDSF9LR0RCIGlmICFTTVAgfHwgU1BBUkM2NApAQCAtNDIsNyArNDMsNyBAQAogCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUCiAJc2VsZWN0IEhBVkVfS1JFVFBST0JFUwogCXNlbGVjdCBIQVZFX0tQUk9CRVMKLQlzZWxlY3QgSEFWRV9MTUIKKwlzZWxlY3QgSEFWRV9NRU1CTE9DSwogCXNlbGVjdCBIQVZFX1NZU0NBTExfV1JBUFBFUlMKIAlzZWxlY3QgSEFWRV9EWU5BTUlDX0ZUUkFDRQogCXNlbGVjdCBIQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JECkBAIC02Niw5ICs2Nyw2IEBACiAJZGVmYXVsdCAzMiBpZiBTUEFSQzMyCiAJZGVmYXVsdCA2NCBpZiBTUEFSQzY0CiAKLWNvbmZpZyBHRU5FUklDX1RJTUUKLQlkZWZfYm9vbCB5Ci0KIGNvbmZpZyBBUkNIX1VTRVNfR0VUVElNRU9GRlNFVAogCWJvb2wKIAlkZWZhdWx0IHkgaWYgU1BBUkMzMgpAQCAtMTQ4LDkgKzE0Niw2IEBACiBjb25maWcgQVJDSF9OT19WSVJUX1RPX0JVUwogCWRlZl9ib29sIHkKIAotY29uZmlnIE9GCi0JZGVmX2Jvb2wgeQotCiBjb25maWcgQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0MKIAlkZWZfYm9vbCB5IGlmIFNQQVJDNjQKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9ib290L2J0Zml4dXBwcmVwLmMgYi9hcmNoL3NwYXJjL2Jvb3QvYnRmaXh1cHByZXAuYwppbmRleCBlN2YyOTQwLi5kYTAzMTE1IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2Jvb3QvYnRmaXh1cHByZXAuYworKysgYi9hcmNoL3NwYXJjL2Jvb3QvYnRmaXh1cHByZXAuYwpAQCAtMjE2LDcgKzIxNiw3IEBACiAJCXN3aXRjaCAoYnVmZmVyW25iYXNlKzNdKSB7CiAJCWNhc2UgJ2YnOgogCQkJaWYgKGluaXR2YWwpIHsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIkNhbm5vdCB1c2UgcHJlLWluaXRhbGl6ZWQgZml4dXBzIGZvciBjYWxsc1xuJXNcbiIsIGJ1ZmZlcik7CisJCQkJZnByaW50ZihzdGRlcnIsICJDYW5ub3QgdXNlIHByZS1pbml0aWFsaXplZCBmaXh1cHMgZm9yIGNhbGxzXG4lc1xuIiwgYnVmZmVyKTsKIAkJCQlleGl0KDEpOwogCQkJfQogCQkJaWYgKCFzdHJjbXAgKHNlY3QsICJfX2tzeW10YWIiKSkgewpAQCAtMjczLDcgKzI3Myw3IEBACiAJCQlicmVhazsKIAkJY2FzZSAnaSc6CiAJCQlpZiAoaW5pdHZhbCkgewotCQkJCWZwcmludGYoc3RkZXJyLCAiQ2Fubm90IHVzZSBwcmUtaW5pdGFsaXplZCBmaXh1cHMgZm9yIElOVFxuJXNcbiIsIGJ1ZmZlcik7CisJCQkJZnByaW50ZihzdGRlcnIsICJDYW5ub3QgdXNlIHByZS1pbml0aWFsaXplZCBmaXh1cHMgZm9yIElOVFxuJXNcbiIsIGJ1ZmZlcik7CiAJCQkJZXhpdCgxKTsKIAkJCX0KIAkJCWlmIChzdHJuY21wIChidWZmZXIgKyBtb2RlKzksICJISTIyICAgICAgIiwgMTApICYmIHN0cm5jbXAgKGJ1ZmZlciArIG1vZGUrOSwgIkxPMTAgICAgICAiLCAxMCkpIHsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvY29uZmlncy9zcGFyYzY0X2RlZmNvbmZpZyBiL2FyY2gvc3BhcmMvY29uZmlncy9zcGFyYzY0X2RlZmNvbmZpZwppbmRleCAyNTllM2ZkLi4xZGMwN2EwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2NvbmZpZ3Mvc3BhcmM2NF9kZWZjb25maWcKKysrIGIvYXJjaC9zcGFyYy9jb25maWdzL3NwYXJjNjRfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjMwotIyBTYXQgQXByICAzIDE1OjQ5OjU2IDIwMTAKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNAorIyBXZWQgTWF5IDI2IDIxOjE0OjAxIDIwMTAKICMKIENPTkZJR182NEJJVD15CiBDT05GSUdfU1BBUkM9eQpAQCAtMTA3LDEwICsxMDcsOSBAQAogIyBDT05GSUdfREVCVUdfUEVSRl9VU0VfVk1BTExPQyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX1NMVUJfREVCVUc9eQogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15CkBAIC0yMzksNiArMjM4LDcgQEAKIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUD15CiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19NSUdSQVRJT049eQogQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKQEAgLTM1MSw2ICszNTEsNyBAQAogIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0wyVFAgaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogQ09ORklHX1ZMQU5fODAyMVE9bQpAQCAtMzY3LDYgKzM2OCw3IEBACiAjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAorQ09ORklHX1JQUz15CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCkBAIC0zODYsOSArMzg4LDE0IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCisKKyMKKyMgU29tZSB3aXJlbGVzcyBkcml2ZXJzIHJlcXVpcmUgYSByYXRlIGNvbnRyb2wgYWxnb3JpdGhtCisjCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBSUYgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC02NTgsNiArNjY1LDcgQEAKICMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NSUNSRUxfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9bQpAQCAtNzM0LDYgKzc0Miw4IEBACiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKIENPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQogIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UNF9ERVBFTkRTPXkKKyMgQ09ORklHX0NIRUxTSU9fVDQgaXMgbm90IHNldAogIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCRVZGIGlzIG5vdCBzZXQKQEAgLTc2Niw2ICs3NzYsNyBAQAogIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVBIRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKQEAgLTc3OCw3ICs3ODksNiBAQAogQ09ORklHX1BQUF9CU0RDT01QPW0KIENPTkZJR19QUFBfTVBQRT1tCiBDT05GSUdfUFBQT0U9bQotIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiBDT05GSUdfU0xIQz1tCiAjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldApAQCAtODE2LDYgKzgyNiw3IEBACiBDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQogIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9MS0tCRD1tCisjIENPTkZJR19LRVlCT0FSRF9UQ0E2NDE2IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CkBAIC04NDAsNiArODUxLDcgQEAKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTUlTQz15CisjIENPTkZJR19JTlBVVF9BRDcxNFggaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1NQQVJDU1BLUj15CiAjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKQEAgLTg0OCw2ICs4NjAsNyBAQAogIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9DTTEwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9VSU5QVVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUENGODU3NCBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCkBAIC04NzEsNiArODg0LDcgQEAKICMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OX0dTTSBpcyBub3Qgc2V0CiAjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAogCiAjCkBAIC04OTMsNiArOTA3LDggQEAKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfQUxURVJBX0pUQUdVQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9BTFRFUkFfVUFSVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CkBAIC0xMzA2LDExICsxMzIyLDE0IEBACiBDT05GSUdfSElEX0E0VEVDSD15CiBDT05GSUdfSElEX0FQUExFPXkKIENPTkZJR19ISURfQkVMS0lOPXkKKyMgQ09ORklHX0hJRF9DQU5ETyBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0NIRVJSWT15CiBDT05GSUdfSElEX0NISUNPTlk9eQorIyBDT05GSUdfSElEX1BST0RJS0VZUyBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0NZUFJFU1M9eQogQ09ORklHX0hJRF9EUkFHT05SSVNFPXkKICMgQ09ORklHX0RSQUdPTlJJU0VfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0VHQUxBWCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0VaS0VZPXkKIENPTkZJR19ISURfS1lFPXkKIENPTkZJR19ISURfR1lSQVRJT049eQpAQCAtMTMyOCw3ICsxMzQ3LDkgQEAKIENPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQogIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9QRVRBTFlOWD15CisjIENPTkZJR19ISURfUElDT0xDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUVVBTlRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9ST0NDQVRfS09ORSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NBTVNVTkc9eQogQ09ORklHX0hJRF9TT05ZPXkKICMgQ09ORklHX0hJRF9TVEFOVFVNIGlzIG5vdCBzZXQKQEAgLTEzNDIsNiArMTM2Myw3IEBACiAjIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9aRVJPUExVUz15CiAjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfWllEQUNST04gaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC0xMzU2LDcgKzEzNzgsNiBAQAogIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKQEAgLTE1MjEsMTAgKzE1NDIsNiBAQAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC0xNzA2LDggKzE3MjMsOCBAQAogQ09ORklHX1NDSEVEU1RBVFM9eQogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNzQyLDYgKzE3NTksOSBAQAogIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfRlBfVEVTVD15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKQEAgLTE3NjksMTIgKzE3ODksMTIgQEAKICMgQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQVRPTUlDNjRfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19EQ0ZMVVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUUklDVF9VU0VSX0NPUFlfQ0hFQ0tTIGlzIG5vdCBzZXQKIAogIwpAQCAtMTg5NSw2ICsxOTE1LDcgQEAKICMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9OSUFHQVJBMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CiBDT05GSUdfQklOQVJZX1BSSU5URj15CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vY2FjaGUuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vY2FjaGUuaAppbmRleCAwNTg4YjhjLi42OTM1OGI1IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2NhY2hlLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9jYWNoZS5oCkBAIC0xMSw3ICsxMSw2IEBACiAKICNkZWZpbmUgTDFfQ0FDSEVfU0hJRlQgNQogI2RlZmluZSBMMV9DQUNIRV9CWVRFUyAzMgotI2RlZmluZSBMMV9DQUNIRV9BTElHTih4KSAoKCgoeCkrKEwxX0NBQ0hFX0JZVEVTLTEpKSZ+KEwxX0NBQ0hFX0JZVEVTLTEpKSkKIAogI2lmZGVmIENPTkZJR19TUEFSQzMyCiAjZGVmaW5lIFNNUF9DQUNIRV9CWVRFU19TSElGVCA1CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2RldmljZS5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9kZXZpY2UuaAppbmRleCBkNGM0NTIxLi5kYWE2YThhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2RldmljZS5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZGV2aWNlLmgKQEAgLTYsMTggKzYsMjUgQEAKICNpZm5kZWYgX0FTTV9TUEFSQ19ERVZJQ0VfSAogI2RlZmluZSBfQVNNX1NQQVJDX0RFVklDRV9ICiAKKyNpbmNsdWRlIDxhc20vb3BlbnByb20uaD4KKwogc3RydWN0IGRldmljZV9ub2RlOwotc3RydWN0IG9mX2RldmljZTsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2U7CiAKIHN0cnVjdCBkZXZfYXJjaGRhdGEgewogCXZvaWQJCQkqaW9tbXU7CiAJdm9pZAkJCSpzdGM7CiAJdm9pZAkJCSpob3N0X2NvbnRyb2xsZXI7Ci0Jc3RydWN0IG9mX2RldmljZQkqb3A7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqb3A7CiAJaW50CQkJbnVtYV9ub2RlOwogfTsKIAorZXh0ZXJuIHZvaWQgb2ZfcHJvcGFnYXRlX2FyY2hkYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmJ1cyk7CisKIHN0cnVjdCBwZGV2X2FyY2hkYXRhIHsKKwlzdHJ1Y3QgcmVzb3VyY2UJCXJlc291cmNlW1BST01SRUdfTUFYXTsKKwl1bnNpZ25lZCBpbnQJCWlycXNbUFJPTUlOVFJfTUFYXTsKKwlpbnQJCQludW1faXJxczsKIH07CiAKICNlbmRpZiAvKiBfQVNNX1NQQVJDX0RFVklDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2Zsb3BweV82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9mbG9wcHlfNjQuaAppbmRleCA4ZmFjM2FiLi42NTk3Y2U4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2Zsb3BweV82NC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZmxvcHB5XzY0LmgKQEAgLTQzLDcgKzQzLDcgQEAKIC8qIFlvdSdsbCBvbmx5IGV2ZXIgZmluZCBvbmUgY29udHJvbGxlciBvbiBhbiBVbHRyYSBhbnl3YXlzLiAqLwogc3RhdGljIHN0cnVjdCBzdW5fZmxweV9jb250cm9sbGVyICpzdW5fZmRjID0gKHN0cnVjdCBzdW5fZmxweV9jb250cm9sbGVyICopLTE7CiB1bnNpZ25lZCBsb25nIGZkY19zdGF0dXM7Ci1zdGF0aWMgc3RydWN0IG9mX2RldmljZSAqZmxvcHB5X29wID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpmbG9wcHlfb3AgPSBOVUxMOwogCiBzdHJ1Y3Qgc3VuX2Zsb3BweV9vcHMgewogCXVuc2lnbmVkIGNoYXIJKCpmZF9pbmIpICh1bnNpZ25lZCBsb25nIHBvcnQpOwpAQCAtNTQ4LDcgKzU0OCw3IEBACiB7CiAJc3RhdGljIGludCBpbml0aWFsaXplZCA9IDA7CiAJc3RydWN0IGRldmljZV9ub2RlICpkcDsKLQlzdHJ1Y3Qgb2ZfZGV2aWNlICpvcDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcDsKIAljb25zdCBjaGFyICpwcm9wOwogCWNoYXIgc3RhdGVbMTI4XTsKIApAQCAtNTY3LDcgKzU2Nyw3IEBACiAJfQogCWlmIChvcCkgewogCQlmbG9wcHlfb3AgPSBvcDsKLQkJRkxPUFBZX0lSUSA9IG9wLT5pcnFzWzBdOworCQlGTE9QUFlfSVJRID0gb3AtPmFyY2hkYXRhLmlycXNbMF07CiAJfSBlbHNlIHsKIAkJc3RydWN0IGRldmljZV9ub2RlICplYnVzX2RwOwogCQl2b2lkIF9faW9tZW0gKmF1eGlvX3JlZzsKQEAgLTU5Myw3ICs1OTMsNyBAQAogCQlpZiAoc3RhdGVfcHJvcCAmJiAhc3RybmNtcChzdGF0ZV9wcm9wLCAiZGlzYWJsZWQiLCA4KSkKIAkJCXJldHVybiAwOwogCi0JCUZMT1BQWV9JUlEgPSBvcC0+aXJxc1swXTsKKwkJRkxPUFBZX0lSUSA9IG9wLT5hcmNoZGF0YS5pcnFzWzBdOwogCiAJCS8qIE1ha2Ugc3VyZSB0aGUgaGlnaCBkZW5zaXR5IGJpdCBpcyBzZXQsIHNvbWUgc3lzdGVtcwogCQkgKiAobW9zdCBub3RhYmx5IFVsdHJhNS9VbHRyYTEwKSBjb21lIHVwIHdpdGggaXQgY2xlYXIuCkBAIC02NjEsNyArNjYxLDcgQEAKIAkJY29uZmlnID0gMDsKIAkJZm9yIChkcCA9IGVidXNfZHAtPmNoaWxkOyBkcDsgZHAgPSBkcC0+c2libGluZykgewogCQkJaWYgKCFzdHJjbXAoZHAtPm5hbWUsICJlY3BwIikpIHsKLQkJCQlzdHJ1Y3Qgb2ZfZGV2aWNlICplY3BwX29wOworCQkJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmVjcHBfb3A7CiAKIAkJCQllY3BwX29wID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShkcCk7CiAJCQkJaWYgKGVjcHBfb3ApCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2xtYi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9sbWIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmEzNTJjYi4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2xtYi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotI2lmbmRlZiBfU1BBUkM2NF9MTUJfSAotI2RlZmluZSBfU1BBUkM2NF9MTUJfSAotCi0jaW5jbHVkZSA8YXNtL29wbGliLmg+Ci0KLSNkZWZpbmUgTE1CX0RCRyhmbXQuLi4pIHByb21fcHJpbnRmKGZtdCkKLQotI2RlZmluZSBMTUJfUkVBTF9MSU1JVAkwCi0KLSNlbmRpZiAvKiAhKF9TUEFSQzY0X0xNQl9IKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9sb2NhbDY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2xvY2FsNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmM5M2I1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9sb2NhbDY0LmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsNjQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbWVtYmxvY2suaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbWVtYmxvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTJhZjg4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tZW1ibG9jay5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX1NQQVJDNjRfTUVNQkxPQ0tfSAorI2RlZmluZSBfU1BBUkM2NF9NRU1CTE9DS19ICisKKyNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKworI2RlZmluZSBNRU1CTE9DS19EQkcoZm10Li4uKSBwcm9tX3ByaW50ZihmbXQpCisKKyNkZWZpbmUgTUVNQkxPQ0tfUkVBTF9MSU1JVAkwCisKKyNlbmRpZiAvKiAhKF9TUEFSQzY0X01FTUJMT0NLX0gpICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL29mX2RldmljZS5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9vZl9kZXZpY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjMyMDI0Ni4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL29mX2RldmljZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotI2lmbmRlZiBfQVNNX1NQQVJDX09GX0RFVklDRV9ICi0jZGVmaW5lIF9BU01fU1BBUkNfT0ZfREVWSUNFX0gKLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9vZi5oPgotI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9vcGVucHJvbS5oPgotCi0vKgotICogVGhlIG9mX2RldmljZSBpcyBhIGtpbmQgb2YgImJhc2UgY2xhc3MiIHRoYXQgaXMgYSBzdXBlcnNldCBvZgotICogc3RydWN0IGRldmljZSBmb3IgdXNlIGJ5IGRldmljZXMgYXR0YWNoZWQgdG8gYW4gT0Ygbm9kZSBhbmQKLSAqIHByb2JlZCB1c2luZyBPRiBwcm9wZXJ0aWVzLgotICovCi1zdHJ1Y3Qgb2ZfZGV2aWNlCi17Ci0Jc3RydWN0IGRldmljZQkJCWRldjsKLQlzdHJ1Y3QgcmVzb3VyY2UJCQlyZXNvdXJjZVtQUk9NUkVHX01BWF07Ci0JdW5zaWduZWQgaW50CQkJaXJxc1tQUk9NSU5UUl9NQVhdOwotCWludAkJCQludW1faXJxczsKLQotCXZvaWQJCQkJKnN5c2RhdGE7Ci0KLQlpbnQJCQkJc2xvdDsKLQlpbnQJCQkJcG9ydGlkOwotCWludAkJCQljbG9ja19mcmVxOwotfTsKLQotZXh0ZXJuIHZvaWQgX19pb21lbSAqb2ZfaW9yZW1hcChzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY2hhciAqbmFtZSk7Ci1leHRlcm4gdm9pZCBvZl9pb3VubWFwKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci0KLWV4dGVybiB2b2lkIG9mX3Byb3BhZ2F0ZV9hcmNoZGF0YShzdHJ1Y3Qgb2ZfZGV2aWNlICpidXMpOwotCi0vKiBUaGlzIGlzIGp1c3QgaGVyZSBkdXJpbmcgdGhlIHRyYW5zaXRpb24gKi8KLSNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotI2VuZGlmIC8qIF9BU01fU1BBUkNfT0ZfREVWSUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vb2ZfcGxhdGZvcm0uaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vb2ZfcGxhdGZvcm0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBkYTk5MC4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL29mX3BsYXRmb3JtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jaWZuZGVmIF9fX0FTTV9TUEFSQ19PRl9QTEFURk9STV9ICi0jZGVmaW5lIF9fX0FTTV9TUEFSQ19PRl9QTEFURk9STV9ICi0vKgotICogICAgQ29weXJpZ2h0IChDKSAyMDA2IEJlbmphbWluIEhlcnJlbnNjaG1pZHQsIElCTSBDb3JwLgotICoJCQkgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4KLSAqICAgIE1vZGlmaWVkIGZvciBTcGFyYyBieSBtZXJnaW5nIHBhcnRzIG9mIGFzbS9vZl9kZXZpY2UuaAotICoJCWJ5IFN0ZXBoZW4gUm90aHdlbGwKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLQotI2RlZmluZSBvZl9idXNfdHlwZQlvZl9wbGF0Zm9ybV9idXNfdHlwZQkvKiBmb3IgY29tcGF0aWJpbGl0eSAqLwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGFycG9ydC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wYXJwb3J0LmgKaW5kZXggYzMzM2I4ZC4uNGY3YWZhMCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wYXJwb3J0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wYXJwb3J0LmgKQEAgLTEwMyw3ICsxMDMsNyBAQAogCXJldHVybiBlYnVzX2RtYV9yZXNpZHVlKCZzcGFyY19lYnVzX2RtYXNbZG1hbnJdLmluZm8pOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBlY3BwX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9wLCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGVjcHBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3AsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewogCXVuc2lnbmVkIGxvbmcgYmFzZSA9IG9wLT5yZXNvdXJjZVswXS5zdGFydDsKIAl1bnNpZ25lZCBsb25nIGNvbmZpZyA9IG9wLT5yZXNvdXJjZVsxXS5zdGFydDsKQEAgLTExNiw3ICsxMTYsNyBAQAogCXBhcmVudCA9IG9wLT5kZXYub2Zfbm9kZS0+cGFyZW50OwogCWlmICghc3RyY21wKHBhcmVudC0+bmFtZSwgImRtYSIpKSB7CiAJCXAgPSBwYXJwb3J0X3BjX3Byb2JlX3BvcnQoYmFzZSwgYmFzZSArIDB4NDAwLAotCQkJCQkgIG9wLT5pcnFzWzBdLCBQQVJQT1JUX0RNQV9OT0ZJRk8sCisJCQkJCSAgb3AtPmFyY2hkYXRhLmlycXNbMF0sIFBBUlBPUlRfRE1BX05PRklGTywKIAkJCQkJICBvcC0+ZGV2LnBhcmVudC0+cGFyZW50LCAwKTsKIAkJaWYgKCFwKQogCQkJcmV0dXJuIC1FTk9NRU07CkBAIC0xNjYsNyArMTY2LDcgQEAKIAkJICAgICAgIDAsIFBUUl9MUFRfUkVHX0RJUik7CiAKIAlwID0gcGFycG9ydF9wY19wcm9iZV9wb3J0KGJhc2UsIGJhc2UgKyAweDQwMCwKLQkJCQkgIG9wLT5pcnFzWzBdLAorCQkJCSAgb3AtPmFyY2hkYXRhLmlycXNbMF0sCiAJCQkJICBzbG90LAogCQkJCSAgb3AtPmRldi5wYXJlbnQsCiAJCQkJICAwKTsKQEAgLTE5Miw3ICsxOTIsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IGVjcHBfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQorc3RhdGljIGludCBfX2RldmV4aXQgZWNwcF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3ApCiB7CiAJc3RydWN0IHBhcnBvcnQgKnAgPSBkZXZfZ2V0X2RydmRhdGEoJm9wLT5kZXYpOwogCWludCBzbG90ID0gcC0+ZG1hOwpAQCAtMjQzLDkgKzI0Myw3IEBACiAKIHN0YXRpYyBpbnQgcGFycG9ydF9wY19maW5kX25vbnBjaV9wb3J0cyhpbnQgYXV0b2lycSwgaW50IGF1dG9kbWEpCiB7Ci0Jb2ZfcmVnaXN0ZXJfZHJpdmVyKCZlY3BwX2RyaXZlciwgJm9mX2J1c190eXBlKTsKLQotCXJldHVybiAwOworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmVjcHBfZHJpdmVyKTsKIH0KIAogI2VuZGlmIC8qICEoX0FTTV9TUEFSQzY0X1BBUlBPUlRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaAppbmRleCA3ZTI2Njk4Li43NGM0ZTBjIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaApAQCAtNiw3ICs2LDE1IEBACiAjZGVmaW5lCVBFUkZfRVZFTlRfSU5ERVhfT0ZGU0VUCTAKIAogI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKwogZXh0ZXJuIHZvaWQgaW5pdF9od19wZXJmX2V2ZW50cyh2b2lkKTsKKworZXh0ZXJuIHZvaWQKK19fcGVyZl9hcmNoX2ZldGNoX2NhbGxlcl9yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGlwLCBpbnQgc2tpcCk7CisKKyNkZWZpbmUgcGVyZl9hcmNoX2ZldGNoX2NhbGxlcl9yZWdzKHB0X3JlZ3MsIGlwKQlcCisJX19wZXJmX2FyY2hfZmV0Y2hfY2FsbGVyX3JlZ3MocHRfcmVncywgaXAsIDEpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2h3X3BlcmZfZXZlbnRzKHZvaWQpCXsgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCmluZGV4IDc3ZjkwNmQuLjBlY2U3N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCkBAIC0xNDIsMTMgKzE0MiwxMiBAQAogI2RlZmluZSBwbWRfcGFnZShwbWQpIEJURklYVVBfQ0FMTChwbWRfcGFnZSkocG1kKQogI2RlZmluZSBwZ2RfcGFnZV92YWRkcihwZ2QpIEJURklYVVBfQ0FMTChwZ2RfcGFnZV92YWRkcikocGdkKQogCi1CVEZJWFVQREVGX1NFVEhJKG5vbmVfbWFzaykKIEJURklYVVBERUZfQ0FMTF9DT05TVChpbnQsIHB0ZV9wcmVzZW50LCBwdGVfdCkKIEJURklYVVBERUZfQ0FMTCh2b2lkLCBwdGVfY2xlYXIsIHB0ZV90ICopCiAKIHN0YXRpYyBpbmxpbmUgaW50IHB0ZV9ub25lKHB0ZV90IHB0ZSkKIHsKLQlyZXR1cm4gIShwdGVfdmFsKHB0ZSkgJiB+QlRGSVhVUF9TRVRISShub25lX21hc2spKTsKKwlyZXR1cm4gIXB0ZV92YWwocHRlKTsKIH0KIAogI2RlZmluZSBwdGVfcHJlc2VudChwdGUpIEJURklYVVBfQ0FMTChwdGVfcHJlc2VudCkocHRlKQpAQCAtMTYwLDcgKzE1OSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IHBtZF9ub25lKHBtZF90IHBtZCkKIHsKLQlyZXR1cm4gIShwbWRfdmFsKHBtZCkgJiB+QlRGSVhVUF9TRVRISShub25lX21hc2spKTsKKwlyZXR1cm4gIXBtZF92YWwocG1kKTsKIH0KIAogI2RlZmluZSBwbWRfYmFkKHBtZCkgQlRGSVhVUF9DQUxMKHBtZF9iYWQpKHBtZCkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcHJvbS5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wcm9tLmgKaW5kZXggZjg0NTgyOC4uMjkxZjEyNSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wcm9tLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wcm9tLmgKQEAgLTQzLDIwICs0MywyMiBAQAogZXh0ZXJuIGludCBvZl9maW5kX2luX3Byb3BsaXN0KGNvbnN0IGNoYXIgKmxpc3QsIGNvbnN0IGNoYXIgKm1hdGNoLCBpbnQgbGVuKTsKICNpZmRlZiBDT05GSUdfTlVNQQogZXh0ZXJuIGludCBvZl9ub2RlX3RvX25pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKTsKLSNlbHNlCi0jZGVmaW5lIG9mX25vZGVfdG9fbmlkKGRwKQkoLTEpCisjZGVmaW5lIG9mX25vZGVfdG9fbmlkIG9mX25vZGVfdG9fbmlkCiAjZW5kaWYKIAogZXh0ZXJuIHZvaWQgcHJvbV9idWlsZF9kZXZpY2V0cmVlKHZvaWQpOwogZXh0ZXJuIHZvaWQgb2ZfcG9wdWxhdGVfcHJlc2VudF9tYXNrKHZvaWQpOwogZXh0ZXJuIHZvaWQgb2ZfZmlsbF9pbl9jcHVfZGF0YSh2b2lkKTsKIAorc3RydWN0IHJlc291cmNlOworZXh0ZXJuIHZvaWQgX19pb21lbSAqb2ZfaW9yZW1hcChzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY2hhciAqbmFtZSk7CitleHRlcm4gdm9pZCBvZl9pb3VubWFwKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKIC8qIFRoZXNlIHJvdXRpbmVzIGFyZSBoZXJlIHRvIHByb3ZpZGUgY29tcGF0aWJpbGl0eSB3aXRoIGhvdyBwb3dlcnBjCiAgKiBoYW5kbGVzIElSUSBtYXBwaW5nIGZvciBPRiBkZXZpY2Ugbm9kZXMuICBXZSBwcmVjb21wdXRlIGFuZCBwZXJtYW5lbnRseQotICogcmVnaXN0ZXIgdGhlbSBpbiB0aGUgb2ZfZGV2aWNlIG9iamVjdHMsIHdoZXJlYXMgcG93ZXJwYyBjb21wdXRlcyB0aGVtCisgKiByZWdpc3RlciB0aGVtIGluIHRoZSBwbGF0Zm9ybV9kZXZpY2Ugb2JqZWN0cywgd2hlcmVhcyBwb3dlcnBjIGNvbXB1dGVzIHRoZW0KICAqIG9uIHJlcXVlc3QuCiAgKi8KLWV4dGVybiB1bnNpZ25lZCBpbnQgaXJxX29mX3BhcnNlX2FuZF9tYXAoc3RydWN0IGRldmljZV9ub2RlICpub2RlLCBpbnQgaW5kZXgpOwogc3RhdGljIGlubGluZSB2b2lkIGlycV9kaXNwb3NlX21hcHBpbmcodW5zaWduZWQgaW50IHZpcnEpCiB7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9hcGMuYyBiL2FyY2gvc3BhcmMva2VybmVsL2FwYy5jCmluZGV4IGIyNzQ3NmMuLjJjMDA0NmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2FwYy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2FwYy5jCkBAIC02OCw3ICs2OCw3IEBACiAjZW5kaWYKIH0gCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcGNfZnJlZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcGNfZnJlZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCkKIHsKIAlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbMF0sIHJlZ3MsIHJlc291cmNlX3NpemUoJm9wLT5yZXNvdXJjZVswXSkpOwogfQpAQCAtMTM2LDcgKzEzNiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBhcGNfbWlzY2RldiA9IHsgQVBDX01JTk9SLCBBUENfREVWTkFNRSwgJmFwY19mb3BzIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGFwY19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFwY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKIAlpbnQgZXJyOwpAQCAtMTg0LDcgKzE4NCw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFwY19pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIG9mX3JlZ2lzdGVyX2RyaXZlcigmYXBjX2RyaXZlciwgJm9mX2J1c190eXBlKTsKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZhcGNfZHJpdmVyKTsKIH0KIAogLyogVGhpcyBkcml2ZXIgaXMgbm90IGNyaXRpY2FsIHRvIHRoZSBib290IHByb2Nlc3MKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2F1eGlvXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9hdXhpb182NC5jCmluZGV4IGRkYzg0MTIuLjNlZmQzYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2F1eGlvXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvYXV4aW9fNjQuYwpAQCAtMTAyLDcgKzEwMiw4IEBACiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGF1eGlvX21hdGNoKTsKIAotc3RhdGljIGludCBfX2RldmluaXQgYXV4aW9fcHJvYmUoc3RydWN0IG9mX2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGF1eGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJCQkgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpkcCA9IGRldi0+ZGV2Lm9mX25vZGU7CiAJdW5zaWduZWQgbG9uZyBzaXplOwpAQCAtMTQyLDcgKzE0Myw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGF1eGlvX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gb2ZfcmVnaXN0ZXJfZHJpdmVyKCZhdXhpb19kcml2ZXIsICZvZl9wbGF0Zm9ybV9idXNfdHlwZSk7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmYXV4aW9fZHJpdmVyKTsKIH0KIAogLyogTXVzdCBiZSBhZnRlciBzdWJzeXNfaW5pdGNhbGwoKSBzbyB0aGF0IGJ1c3NlcyBhcmUgcHJvYmVkLiAgTXVzdApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvY2VudHJhbC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvY2VudHJhbC5jCmluZGV4IDQzNDMzNWYuLmNmYTI2MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2NlbnRyYWwuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9jZW50cmFsLmMKQEAgLTU5LDcgKzU5LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGNsb2NrX2JvYXJkX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9wLAorc3RhdGljIGludCBfX2RldmluaXQgY2xvY2tfYm9hcmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3AsCiAJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewogCXN0cnVjdCBjbG9ja19ib2FyZCAqcCA9IGt6YWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CkBAIC0xNTcsNyArMTU3LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCBfX2RldmluaXQgZmhjX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9wLAorc3RhdGljIGludCBfX2RldmluaXQgZmhjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewogCXN0cnVjdCBmaGMgKnAgPSBremFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOwpAQCAtMjY1LDggKzI2NSw4IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHN1bmZpcmVfaW5pdCh2b2lkKQogewotCSh2b2lkKSBvZl9yZWdpc3Rlcl9kcml2ZXIoJmZoY19kcml2ZXIsICZvZl9wbGF0Zm9ybV9idXNfdHlwZSk7Ci0JKHZvaWQpIG9mX3JlZ2lzdGVyX2RyaXZlcigmY2xvY2tfYm9hcmRfZHJpdmVyLCAmb2ZfcGxhdGZvcm1fYnVzX3R5cGUpOworCSh2b2lkKSBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmZoY19kcml2ZXIpOworCSh2b2lkKSBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmNsb2NrX2JvYXJkX2RyaXZlcik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2NobWMuYyBiL2FyY2gvc3BhcmMva2VybmVsL2NobWMuYwppbmRleCA4NzBjYjY1Li4wOGM0NjZlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9jaG1jLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvY2htYy5jCkBAIC0zOTIsNyArMzkyLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGpidXNtY19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwKK3N0YXRpYyBpbnQgX19kZXZpbml0IGpidXNtY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCwKIAkJCQkgIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewogCWNvbnN0IHN0cnVjdCBsaW51eF9wcm9tNjRfcmVnaXN0ZXJzICptZW1fcmVnczsKQEAgLTY5MCw3ICs2OTAsNyBAQAogCQkJCSAgICAgIGNobWNfcmVhZF9tY3JlZyhwLCBDSE1DVFJMX0RFQ09ERTQpKTsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgY2htY19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwKK3N0YXRpYyBpbnQgX19kZXZpbml0IGNobWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3AsCiAJCQkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpkcCA9IG9wLT5kZXYub2Zfbm9kZTsKQEAgLTc2NSw3ICs3NjUsNyBAQAogCWdvdG8gb3V0OwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB1czNtY19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwKK3N0YXRpYyBpbnQgX19kZXZpbml0IHVzM21jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wLAogCQkJCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewogCWlmIChtY190eXBlID09IE1DX1RZUEVfU0FGQVJJKQpAQCAtNzc1LDIxICs3NzUsMjEgQEAKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZleGl0IGNobWNfZGVzdHJveShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwgc3RydWN0IGNobWMgKnApCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgY2htY19kZXN0cm95KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wLCBzdHJ1Y3QgY2htYyAqcCkKIHsKIAlsaXN0X2RlbCgmcC0+bGlzdCk7CiAJb2ZfaW91bm1hcCgmb3AtPnJlc291cmNlWzBdLCBwLT5yZWdzLCAweDQ4KTsKIAlrZnJlZShwKTsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZleGl0IGpidXNtY19kZXN0cm95KHN0cnVjdCBvZl9kZXZpY2UgKm9wLCBzdHJ1Y3QgamJ1c21jICpwKQorc3RhdGljIHZvaWQgX19kZXZleGl0IGpidXNtY19kZXN0cm95KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wLCBzdHJ1Y3QgamJ1c21jICpwKQogewogCW1jX2xpc3RfZGVsKCZwLT5saXN0KTsKIAlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbMF0sIHAtPnJlZ3MsIEpCVVNNQ19SRUdTX1NJWkUpOwogCWtmcmVlKHApOwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCB1czNtY19yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb3ApCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB1czNtY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3ApCiB7CiAJdm9pZCAqcCA9IGRldl9nZXRfZHJ2ZGF0YSgmb3AtPmRldik7CiAKQEAgLTg0OCw3ICs4NDgsNyBAQAogCXJldCA9IHJlZ2lzdGVyX2RpbW1fcHJpbnRlcih1czNtY19kaW1tX3ByaW50ZXIpOwogCiAJaWYgKCFyZXQpIHsKLQkJcmV0ID0gb2ZfcmVnaXN0ZXJfZHJpdmVyKCZ1czNtY19kcml2ZXIsICZvZl9idXNfdHlwZSk7CisJCXJldCA9IG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmdXMzbWNfZHJpdmVyKTsKIAkJaWYgKHJldCkKIAkJCXVucmVnaXN0ZXJfZGltbV9wcmludGVyKHVzM21jX2RpbW1fcHJpbnRlcik7CiAJfQpAQCAtODU5LDcgKzg1OSw3IEBACiB7CiAJaWYgKHVzM21jX3BsYXRmb3JtKCkpIHsKIAkJdW5yZWdpc3Rlcl9kaW1tX3ByaW50ZXIodXMzbWNfZGltbV9wcmludGVyKTsKLQkJb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoJnVzM21jX2RyaXZlcik7CisJCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZ1czNtY19kcml2ZXIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaGVscGVycy5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvaGVscGVycy5TCmluZGV4IDkyMDkwY2MuLjY4MmZlZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2hlbHBlcnMuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9oZWxwZXJzLlMKQEAgLTQ3LDkgKzQ3LDkgQEAKIAkuc2l6ZQkJc3RhY2tfdHJhY2VfZmx1c2gsLi1zdGFja190cmFjZV9mbHVzaAogCiAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCi0JLmdsb2JsCQlwZXJmX2FyY2hfZmV0Y2hfY2FsbGVyX3JlZ3MKLQkudHlwZQkJcGVyZl9hcmNoX2ZldGNoX2NhbGxlcl9yZWdzLCNmdW5jdGlvbgotcGVyZl9hcmNoX2ZldGNoX2NhbGxlcl9yZWdzOgorCS5nbG9ibAkJX19wZXJmX2FyY2hfZmV0Y2hfY2FsbGVyX3JlZ3MKKwkudHlwZQkJX19wZXJmX2FyY2hfZmV0Y2hfY2FsbGVyX3JlZ3MsI2Z1bmN0aW9uCitfX3BlcmZfYXJjaF9mZXRjaF9jYWxsZXJfcmVnczoKIAkvKiBXZSBhbHdheXMgcmVhZCB0aGUgJXBzdGF0ZSBpbnRvICVvNSBzaW5jZSB3ZSB3aWxsIHVzZQogCSAqIHRoYXQgdG8gY29uc3RydWN0IGEgZmFrZSAldHN0YXRlIHRvIHN0b3JlIGludG8gdGhlIHJlZ3MuCiAJICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9pb3BvcnQuYyBiL2FyY2gvc3BhcmMva2VybmVsL2lvcG9ydC5jCmluZGV4IDcwM2U0YWEuLjQxZjdlNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2lvcG9ydC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2lvcG9ydC5jCkBAIC0yNTMsNyArMjUzLDcgQEAKIHN0YXRpYyB2b2lkICpzYnVzX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IGxlbiwKIAkJCQkgZG1hX2FkZHJfdCAqZG1hX2FkZHJwLCBnZnBfdCBnZnApCiB7Ci0Jc3RydWN0IG9mX2RldmljZSAqb3AgPSB0b19vZl9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXVuc2lnbmVkIGxvbmcgbGVuX3RvdGFsID0gKGxlbiArIFBBR0VfU0laRS0xKSAmIFBBR0VfTUFTSzsKIAl1bnNpZ25lZCBsb25nIHZhOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvbWRlc2MuYyBiL2FyY2gvc3BhcmMva2VybmVsL21kZXNjLmMKaW5kZXggY2RjOTFkOS4uODNlODVjMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvbWRlc2MuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9tZGVzYy5jCkBAIC00LDcgKzQsNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9sbWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtODYsNyArODYsNyBAQAogCWhwLT5oYW5kbGVfc2l6ZSA9IGhhbmRsZV9zaXplOwogfQogCi1zdGF0aWMgc3RydWN0IG1kZXNjX2hhbmRsZSAqIF9faW5pdCBtZGVzY19sbWJfYWxsb2ModW5zaWduZWQgaW50IG1kZXNjX3NpemUpCitzdGF0aWMgc3RydWN0IG1kZXNjX2hhbmRsZSAqIF9faW5pdCBtZGVzY19tZW1ibG9ja19hbGxvYyh1bnNpZ25lZCBpbnQgbWRlc2Nfc2l6ZSkKIHsKIAl1bnNpZ25lZCBpbnQgaGFuZGxlX3NpemUsIGFsbG9jX3NpemU7CiAJc3RydWN0IG1kZXNjX2hhbmRsZSAqaHA7CkBAIC05Nyw3ICs5Nyw3IEBACiAJCSAgICAgICBtZGVzY19zaXplKTsKIAlhbGxvY19zaXplID0gUEFHRV9BTElHTihoYW5kbGVfc2l6ZSk7CiAKLQlwYWRkciA9IGxtYl9hbGxvYyhhbGxvY19zaXplLCBQQUdFX1NJWkUpOworCXBhZGRyID0gbWVtYmxvY2tfYWxsb2MoYWxsb2Nfc2l6ZSwgUEFHRV9TSVpFKTsKIAogCWhwID0gTlVMTDsKIAlpZiAocGFkZHIpIHsKQEAgLTEwNyw3ICsxMDcsNyBAQAogCXJldHVybiBocDsKIH0KIAotc3RhdGljIHZvaWQgbWRlc2NfbG1iX2ZyZWUoc3RydWN0IG1kZXNjX2hhbmRsZSAqaHApCitzdGF0aWMgdm9pZCBtZGVzY19tZW1ibG9ja19mcmVlKHN0cnVjdCBtZGVzY19oYW5kbGUgKmhwKQogewogCXVuc2lnbmVkIGludCBhbGxvY19zaXplOwogCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CkBAIC0xMjAsOSArMTIwLDkgQEAKIAlmcmVlX2Jvb3RtZW1fbGF0ZShzdGFydCwgYWxsb2Nfc2l6ZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbWRlc2NfbWVtX29wcyBsbWJfbWRlc2Nfb3BzID0gewotCS5hbGxvYyA9IG1kZXNjX2xtYl9hbGxvYywKLQkuZnJlZSAgPSBtZGVzY19sbWJfZnJlZSwKK3N0YXRpYyBzdHJ1Y3QgbWRlc2NfbWVtX29wcyBtZW1ibG9ja19tZGVzY19vcHMgPSB7CisJLmFsbG9jID0gbWRlc2NfbWVtYmxvY2tfYWxsb2MsCisJLmZyZWUgID0gbWRlc2NfbWVtYmxvY2tfZnJlZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWRlc2NfaGFuZGxlICptZGVzY19rbWFsbG9jKHVuc2lnbmVkIGludCBtZGVzY19zaXplKQpAQCAtOTE0LDcgKzkxNCw3IEBACiAKIAlwcmludGsoIk1ERVNDOiBTaXplIGlzICVsdSBieXRlcy5cbiIsIGxlbik7CiAKLQlocCA9IG1kZXNjX2FsbG9jKGxlbiwgJmxtYl9tZGVzY19vcHMpOworCWhwID0gbWRlc2NfYWxsb2MobGVuLCAmbWVtYmxvY2tfbWRlc2Nfb3BzKTsKIAlpZiAoaHAgPT0gTlVMTCkgewogCQlwcm9tX3ByaW50ZigiTURFU0M6IGFsbG9jIG9mICVsdSBieXRlcyBmYWlsZWQuXG4iLCBsZW4pOwogCQlwcm9tX2hhbHQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV8zMi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzMyLmMKaW5kZXggNDdlNjNmMS4uMmQwNTVhMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzMyLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzMyLmMKQEAgLTI0MSwxMCArMjQxLDEwIEBACiAKIHN0YXRpYyBpbnQgb2ZfcmVzb3VyY2VfdmVyYm9zZTsKIAotc3RhdGljIHZvaWQgX19pbml0IGJ1aWxkX2RldmljZV9yZXNvdXJjZXMoc3RydWN0IG9mX2RldmljZSAqb3AsCitzdGF0aWMgdm9pZCBfX2luaXQgYnVpbGRfZGV2aWNlX3Jlc291cmNlcyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCwKIAkJCQkJICBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpCiB7Ci0Jc3RydWN0IG9mX2RldmljZSAqcF9vcDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwX29wOwogCXN0cnVjdCBvZl9idXMgKmJ1czsKIAlpbnQgbmEsIG5zOwogCWludCBpbmRleCwgbnVtX3JlZzsKQEAgLTI1Myw3ICsyNTMsNyBAQAogCWlmICghcGFyZW50KQogCQlyZXR1cm47CiAKLQlwX29wID0gdG9fb2ZfZGV2aWNlKHBhcmVudCk7CisJcF9vcCA9IHRvX3BsYXRmb3JtX2RldmljZShwYXJlbnQpOwogCWJ1cyA9IG9mX21hdGNoX2J1cyhwX29wLT5kZXYub2Zfbm9kZSk7CiAJYnVzLT5jb3VudF9jZWxscyhvcC0+ZGV2Lm9mX25vZGUsICZuYSwgJm5zKTsKIApAQCAtMjY3LDYgKzI2Nyw4IEBACiAJLyogQ29udmVyIHRvIG51bS1lbnRyaWVzLiAgKi8KIAludW1fcmVnIC89IG5hICsgbnM7CiAKKwlvcC0+cmVzb3VyY2UgPSBvcC0+YXJjaGRhdGEucmVzb3VyY2U7CisJb3AtPm51bV9yZXNvdXJjZXMgPSBudW1fcmVnOwogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IG51bV9yZWc7IGluZGV4KyspIHsKIAkJc3RydWN0IHJlc291cmNlICpyID0gJm9wLT5yZXNvdXJjZVtpbmRleF07CiAJCXUzMiBhZGRyW09GX01BWF9BRERSX0NFTExTXTsKQEAgLTMzMywxMCArMzM1LDEwIEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZSAqIF9faW5pdCBzY2FuX29uZV9kZXZpY2Uoc3RydWN0IGRldmljZV9ub2RlICpkcCwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICogX19pbml0IHNjYW5fb25lX2RldmljZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLAogCQkJCQkJIHN0cnVjdCBkZXZpY2UgKnBhcmVudCkKIHsKLQlzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCA9IGt6YWxsb2Moc2l6ZW9mKCpvcCksIEdGUF9LRVJORUwpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wID0ga3phbGxvYyhzaXplb2YoKm9wKSwgR0ZQX0tFUk5FTCk7CiAJY29uc3Qgc3RydWN0IGxpbnV4X3Byb21faXJxcyAqaW50cjsKIAlzdHJ1Y3QgZGV2X2FyY2hkYXRhICpzZDsKIAlpbnQgbGVuLCBpOwpAQCAtMzQ5LDI3ICszNTEsMjEgQEAKIAogCW9wLT5kZXYub2Zfbm9kZSA9IGRwOwogCi0Jb3AtPmNsb2NrX2ZyZXEgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJjbG9jay1mcmVxdWVuY3kiLAotCQkJCQkgICAgICAgKDI1KjEwMDAqMTAwMCkpOwotCW9wLT5wb3J0aWQgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJ1cGEtcG9ydGlkIiwgLTEpOwotCWlmIChvcC0+cG9ydGlkID09IC0xKQotCQlvcC0+cG9ydGlkID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAicG9ydGlkIiwgLTEpOwotCiAJaW50ciA9IG9mX2dldF9wcm9wZXJ0eShkcCwgImludHIiLCAmbGVuKTsKIAlpZiAoaW50cikgewotCQlvcC0+bnVtX2lycXMgPSBsZW4gLyBzaXplb2Yoc3RydWN0IGxpbnV4X3Byb21faXJxcyk7Ci0JCWZvciAoaSA9IDA7IGkgPCBvcC0+bnVtX2lycXM7IGkrKykKLQkJCW9wLT5pcnFzW2ldID0gaW50cltpXS5wcmk7CisJCW9wLT5hcmNoZGF0YS5udW1faXJxcyA9IGxlbiAvIHNpemVvZihzdHJ1Y3QgbGludXhfcHJvbV9pcnFzKTsKKwkJZm9yIChpID0gMDsgaSA8IG9wLT5hcmNoZGF0YS5udW1faXJxczsgaSsrKQorCQkJb3AtPmFyY2hkYXRhLmlycXNbaV0gPSBpbnRyW2ldLnByaTsKIAl9IGVsc2UgewogCQljb25zdCB1bnNpZ25lZCBpbnQgKmlycSA9CiAJCQlvZl9nZXRfcHJvcGVydHkoZHAsICJpbnRlcnJ1cHRzIiwgJmxlbik7CiAKIAkJaWYgKGlycSkgewotCQkJb3AtPm51bV9pcnFzID0gbGVuIC8gc2l6ZW9mKHVuc2lnbmVkIGludCk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgb3AtPm51bV9pcnFzOyBpKyspCi0JCQkJb3AtPmlycXNbaV0gPSBpcnFbaV07CisJCQlvcC0+YXJjaGRhdGEubnVtX2lycXMgPSBsZW4gLyBzaXplb2YodW5zaWduZWQgaW50KTsKKwkJCWZvciAoaSA9IDA7IGkgPCBvcC0+YXJjaGRhdGEubnVtX2lycXM7IGkrKykKKwkJCQlvcC0+YXJjaGRhdGEuaXJxc1tpXSA9IGlycVtpXTsKIAkJfSBlbHNlIHsKLQkJCW9wLT5udW1faXJxcyA9IDA7CisJCQlvcC0+YXJjaGRhdGEubnVtX2lycXMgPSAwOwogCQl9CiAJfQogCWlmIChzcGFyY19jcHVfbW9kZWwgPT0gc3VuNGQpIHsKQEAgLTQxMSw4ICs0MDcsOCBAQAogCQkJZ290byBidWlsZF9yZXNvdXJjZXM7CiAJCX0KIAotCQlmb3IgKGkgPSAwOyBpIDwgb3AtPm51bV9pcnFzOyBpKyspIHsKLQkJCWludCB0aGlzX2lycSA9IG9wLT5pcnFzW2ldOworCQlmb3IgKGkgPSAwOyBpIDwgb3AtPmFyY2hkYXRhLm51bV9pcnFzOyBpKyspIHsKKwkJCWludCB0aGlzX2lycSA9IG9wLT5hcmNoZGF0YS5pcnFzW2ldOwogCQkJaW50IHNidXNsID0gcGlsX3RvX3NidXNbdGhpc19pcnFdOwogCiAJCQlpZiAoc2J1c2wpCkBAIC00MjAsNyArNDE2LDcgQEAKIAkJCQkJICAgIChzYnVzbCA8PCAyKSArCiAJCQkJCSAgICBzbG90KTsKIAotCQkJb3AtPmlycXNbaV0gPSB0aGlzX2lycTsKKwkJCW9wLT5hcmNoZGF0YS5pcnFzW2ldID0gdGhpc19pcnE7CiAJCX0KIAl9CiAKQEAgLTQyOCw3ICs0MjQsNyBAQAogCWJ1aWxkX2RldmljZV9yZXNvdXJjZXMob3AsIHBhcmVudCk7CiAKIAlvcC0+ZGV2LnBhcmVudCA9IHBhcmVudDsKLQlvcC0+ZGV2LmJ1cyA9ICZvZl9wbGF0Zm9ybV9idXNfdHlwZTsKKwlvcC0+ZGV2LmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZTsKIAlpZiAoIXBhcmVudCkKIAkJZGV2X3NldF9uYW1lKCZvcC0+ZGV2LCAicm9vdCIpOwogCWVsc2UKQEAgLTQ0Nyw3ICs0NDMsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IHNjYW5fdHJlZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpCiB7CiAJd2hpbGUgKGRwKSB7Ci0JCXN0cnVjdCBvZl9kZXZpY2UgKm9wID0gc2Nhbl9vbmVfZGV2aWNlKGRwLCBwYXJlbnQpOworCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCA9IHNjYW5fb25lX2RldmljZShkcCwgcGFyZW50KTsKIAogCQlpZiAob3ApCiAJCQlzY2FuX3RyZWUoZHAtPmNoaWxkLCAmb3AtPmRldik7CkBAIC00NTYsMzAgKzQ1MiwxOSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHNjYW5fb2ZfZGV2aWNlcyh2b2lkKQorc3RhdGljIGludCBfX2luaXQgc2Nhbl9vZl9kZXZpY2VzKHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKLQlzdHJ1Y3Qgb2ZfZGV2aWNlICpwYXJlbnQ7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGFyZW50OwogCiAJcGFyZW50ID0gc2Nhbl9vbmVfZGV2aWNlKHJvb3QsIE5VTEwpOwogCWlmICghcGFyZW50KQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCiAJc2Nhbl90cmVlKHJvb3QtPmNoaWxkLCAmcGFyZW50LT5kZXYpOworCXJldHVybiAwOwogfQotCi1zdGF0aWMgaW50IF9faW5pdCBvZl9idXNfZHJpdmVyX2luaXQodm9pZCkKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gb2ZfYnVzX3R5cGVfaW5pdCgmb2ZfcGxhdGZvcm1fYnVzX3R5cGUsICJvZiIpOwotCWlmICghZXJyKQotCQlzY2FuX29mX2RldmljZXMoKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXBvc3Rjb3JlX2luaXRjYWxsKG9mX2J1c19kcml2ZXJfaW5pdCk7Citwb3N0Y29yZV9pbml0Y2FsbChzY2FuX29mX2RldmljZXMpOwogCiBzdGF0aWMgaW50IF9faW5pdCBvZl9kZWJ1ZyhjaGFyICpzdHIpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9vZl9kZXZpY2VfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV82NC5jCmluZGV4IDFkYWU4MDcuLjYzY2Q0ZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV82NC5jCkBAIC0zMTAsMTAgKzMxMCwxMCBAQAogCiBzdGF0aWMgaW50IG9mX3Jlc291cmNlX3ZlcmJvc2U7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBidWlsZF9kZXZpY2VfcmVzb3VyY2VzKHN0cnVjdCBvZl9kZXZpY2UgKm9wLAorc3RhdGljIHZvaWQgX19pbml0IGJ1aWxkX2RldmljZV9yZXNvdXJjZXMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3AsCiAJCQkJCSAgc3RydWN0IGRldmljZSAqcGFyZW50KQogewotCXN0cnVjdCBvZl9kZXZpY2UgKnBfb3A7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcF9vcDsKIAlzdHJ1Y3Qgb2ZfYnVzICpidXM7CiAJaW50IG5hLCBuczsKIAlpbnQgaW5kZXgsIG51bV9yZWc7CkBAIC0zMjIsNyArMzIyLDcgQEAKIAlpZiAoIXBhcmVudCkKIAkJcmV0dXJuOwogCi0JcF9vcCA9IHRvX29mX2RldmljZShwYXJlbnQpOworCXBfb3AgPSB0b19wbGF0Zm9ybV9kZXZpY2UocGFyZW50KTsKIAlidXMgPSBvZl9tYXRjaF9idXMocF9vcC0+ZGV2Lm9mX25vZGUpOwogCWJ1cy0+Y291bnRfY2VsbHMob3AtPmRldi5vZl9ub2RlLCAmbmEsICZucyk7CiAKQEAgLTM0NCw2ICszNDQsOCBAQAogCQludW1fcmVnID0gUFJPTVJFR19NQVg7CiAJfQogCisJb3AtPnJlc291cmNlID0gb3AtPmFyY2hkYXRhLnJlc291cmNlOworCW9wLT5udW1fcmVzb3VyY2VzID0gbnVtX3JlZzsKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBudW1fcmVnOyBpbmRleCsrKSB7CiAJCXN0cnVjdCByZXNvdXJjZSAqciA9ICZvcC0+cmVzb3VyY2VbaW5kZXhdOwogCQl1MzIgYWRkcltPRl9NQVhfQUREUl9DRUxMU107CkBAIC01MjYsNyArNTI4LDcgQEAKIAogc3RhdGljIGludCBvZl9pcnFfdmVyYm9zZTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgYnVpbGRfb25lX2RldmljZV9pcnEoc3RydWN0IG9mX2RldmljZSAqb3AsCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBidWlsZF9vbmVfZGV2aWNlX2lycShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCwKIAkJCQkJCXN0cnVjdCBkZXZpY2UgKnBhcmVudCwKIAkJCQkJCXVuc2lnbmVkIGludCBpcnEpCiB7CkBAIC02MjgsMTAgKzYzMCwxMCBAQAogCXJldHVybiBpcnE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlICogX19pbml0IHNjYW5fb25lX2RldmljZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiBfX2luaXQgc2Nhbl9vbmVfZGV2aWNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsCiAJCQkJCQkgc3RydWN0IGRldmljZSAqcGFyZW50KQogewotCXN0cnVjdCBvZl9kZXZpY2UgKm9wID0ga3phbGxvYyhzaXplb2YoKm9wKSwgR0ZQX0tFUk5FTCk7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3AgPSBremFsbG9jKHNpemVvZigqb3ApLCBHRlBfS0VSTkVMKTsKIAljb25zdCB1bnNpZ25lZCBpbnQgKmlycTsKIAlzdHJ1Y3QgZGV2X2FyY2hkYXRhICpzZDsKIAlpbnQgbGVuLCBpOwpAQCAtNjQ0LDM0ICs2NDYsMjggQEAKIAogCW9wLT5kZXYub2Zfbm9kZSA9IGRwOwogCi0Jb3AtPmNsb2NrX2ZyZXEgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJjbG9jay1mcmVxdWVuY3kiLAotCQkJCQkgICAgICAgKDI1KjEwMDAqMTAwMCkpOwotCW9wLT5wb3J0aWQgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJ1cGEtcG9ydGlkIiwgLTEpOwotCWlmIChvcC0+cG9ydGlkID09IC0xKQotCQlvcC0+cG9ydGlkID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAicG9ydGlkIiwgLTEpOwotCiAJaXJxID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAiaW50ZXJydXB0cyIsICZsZW4pOwogCWlmIChpcnEpIHsKLQkJb3AtPm51bV9pcnFzID0gbGVuIC8gNDsKKwkJb3AtPmFyY2hkYXRhLm51bV9pcnFzID0gbGVuIC8gNDsKIAogCQkvKiBQcmV2ZW50IG92ZXJydW5uaW5nIHRoZSBvcC0+aXJxc1tdIGFycmF5LiAgKi8KLQkJaWYgKG9wLT5udW1faXJxcyA+IFBST01JTlRSX01BWCkgeworCQlpZiAob3AtPmFyY2hkYXRhLm51bV9pcnFzID4gUFJPTUlOVFJfTUFYKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVG9vIG1hbnkgaXJxcyAoJWQpLCAiCiAJCQkgICAgICAgImxpbWl0aW5nIHRvICVkLlxuIiwKLQkJCSAgICAgICBkcC0+ZnVsbF9uYW1lLCBvcC0+bnVtX2lycXMsIFBST01JTlRSX01BWCk7Ci0JCQlvcC0+bnVtX2lycXMgPSBQUk9NSU5UUl9NQVg7CisJCQkgICAgICAgZHAtPmZ1bGxfbmFtZSwgb3AtPmFyY2hkYXRhLm51bV9pcnFzLCBQUk9NSU5UUl9NQVgpOworCQkJb3AtPmFyY2hkYXRhLm51bV9pcnFzID0gUFJPTUlOVFJfTUFYOwogCQl9Ci0JCW1lbWNweShvcC0+aXJxcywgaXJxLCBvcC0+bnVtX2lycXMgKiA0KTsKKwkJbWVtY3B5KG9wLT5hcmNoZGF0YS5pcnFzLCBpcnEsIG9wLT5hcmNoZGF0YS5udW1faXJxcyAqIDQpOwogCX0gZWxzZSB7Ci0JCW9wLT5udW1faXJxcyA9IDA7CisJCW9wLT5hcmNoZGF0YS5udW1faXJxcyA9IDA7CiAJfQogCiAJYnVpbGRfZGV2aWNlX3Jlc291cmNlcyhvcCwgcGFyZW50KTsKLQlmb3IgKGkgPSAwOyBpIDwgb3AtPm51bV9pcnFzOyBpKyspCi0JCW9wLT5pcnFzW2ldID0gYnVpbGRfb25lX2RldmljZV9pcnEob3AsIHBhcmVudCwgb3AtPmlycXNbaV0pOworCWZvciAoaSA9IDA7IGkgPCBvcC0+YXJjaGRhdGEubnVtX2lycXM7IGkrKykKKwkJb3AtPmFyY2hkYXRhLmlycXNbaV0gPSBidWlsZF9vbmVfZGV2aWNlX2lycShvcCwgcGFyZW50LCBvcC0+YXJjaGRhdGEuaXJxc1tpXSk7CiAKIAlvcC0+ZGV2LnBhcmVudCA9IHBhcmVudDsKLQlvcC0+ZGV2LmJ1cyA9ICZvZl9wbGF0Zm9ybV9idXNfdHlwZTsKKwlvcC0+ZGV2LmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZTsKIAlpZiAoIXBhcmVudCkKIAkJZGV2X3NldF9uYW1lKCZvcC0+ZGV2LCAicm9vdCIpOwogCWVsc2UKQEAgLTY5MCw3ICs2ODYsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IHNjYW5fdHJlZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpCiB7CiAJd2hpbGUgKGRwKSB7Ci0JCXN0cnVjdCBvZl9kZXZpY2UgKm9wID0gc2Nhbl9vbmVfZGV2aWNlKGRwLCBwYXJlbnQpOworCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCA9IHNjYW5fb25lX2RldmljZShkcCwgcGFyZW50KTsKIAogCQlpZiAob3ApCiAJCQlzY2FuX3RyZWUoZHAtPmNoaWxkLCAmb3AtPmRldik7CkBAIC02OTksMzAgKzY5NSwxOSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHNjYW5fb2ZfZGV2aWNlcyh2b2lkKQorc3RhdGljIGludCBfX2luaXQgc2Nhbl9vZl9kZXZpY2VzKHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKLQlzdHJ1Y3Qgb2ZfZGV2aWNlICpwYXJlbnQ7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGFyZW50OwogCiAJcGFyZW50ID0gc2Nhbl9vbmVfZGV2aWNlKHJvb3QsIE5VTEwpOwogCWlmICghcGFyZW50KQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCiAJc2Nhbl90cmVlKHJvb3QtPmNoaWxkLCAmcGFyZW50LT5kZXYpOworCXJldHVybiAwOwogfQotCi1zdGF0aWMgaW50IF9faW5pdCBvZl9idXNfZHJpdmVyX2luaXQodm9pZCkKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gb2ZfYnVzX3R5cGVfaW5pdCgmb2ZfcGxhdGZvcm1fYnVzX3R5cGUsICJvZiIpOwotCWlmICghZXJyKQotCQlzY2FuX29mX2RldmljZXMoKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXBvc3Rjb3JlX2luaXRjYWxsKG9mX2J1c19kcml2ZXJfaW5pdCk7Citwb3N0Y29yZV9pbml0Y2FsbChzY2FuX29mX2RldmljZXMpOwogCiBzdGF0aWMgaW50IF9faW5pdCBvZl9kZWJ1ZyhjaGFyICpzdHIpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9vZl9kZXZpY2VfY29tbW9uLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9vZl9kZXZpY2VfY29tbW9uLmMKaW5kZXggMTBjNmMzNi4uNDlkZGZmNSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlX2NvbW1vbi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV9jb21tb24uYwpAQCAtMTEsNDggKzExLDI4IEBACiAKICNpbmNsdWRlICJvZl9kZXZpY2VfY29tbW9uLmgiCiAKLXN0YXRpYyBpbnQgbm9kZV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IG9mX2RldmljZSAqb3AgPSB0b19vZl9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gZGF0YTsKLQotCXJldHVybiAob3AtPmRldi5vZl9ub2RlID09IGRwKTsKLX0KLQotc3RydWN0IG9mX2RldmljZSAqb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKQotewotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGJ1c19maW5kX2RldmljZSgmb2ZfcGxhdGZvcm1fYnVzX3R5cGUsIE5VTEwsCi0JCQkJCSAgICAgZHAsIG5vZGVfbWF0Y2gpOwotCi0JaWYgKGRldikKLQkJcmV0dXJuIHRvX29mX2RldmljZShkZXYpOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci1FWFBPUlRfU1lNQk9MKG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUpOwotCiB1bnNpZ25lZCBpbnQgaXJxX29mX3BhcnNlX2FuZF9tYXAoc3RydWN0IGRldmljZV9ub2RlICpub2RlLCBpbnQgaW5kZXgpCiB7Ci0Jc3RydWN0IG9mX2RldmljZSAqb3AgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKG5vZGUpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShub2RlKTsKIAotCWlmICghb3AgfHwgaW5kZXggPj0gb3AtPm51bV9pcnFzKQorCWlmICghb3AgfHwgaW5kZXggPj0gb3AtPmFyY2hkYXRhLm51bV9pcnFzKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBvcC0+aXJxc1tpbmRleF07CisJcmV0dXJuIG9wLT5hcmNoZGF0YS5pcnFzW2luZGV4XTsKIH0KIEVYUE9SVF9TWU1CT0woaXJxX29mX3BhcnNlX2FuZF9tYXApOwogCiAvKiBUYWtlIHRoZSBhcmNoZGF0YSB2YWx1ZXMgZm9yIElPTU1VLCBTVEMsIGFuZCBIT1NUREFUQSBmb3VuZCBpbgotICogQlVTIGFuZCBwcm9wYWdhdGUgdG8gYWxsIGNoaWxkIG9mX2RldmljZSBvYmplY3RzLgorICogQlVTIGFuZCBwcm9wYWdhdGUgdG8gYWxsIGNoaWxkIHBsYXRmb3JtX2RldmljZSBvYmplY3RzLgogICovCi12b2lkIG9mX3Byb3BhZ2F0ZV9hcmNoZGF0YShzdHJ1Y3Qgb2ZfZGV2aWNlICpidXMpCit2b2lkIG9mX3Byb3BhZ2F0ZV9hcmNoZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpidXMpCiB7CiAJc3RydWN0IGRldl9hcmNoZGF0YSAqYnVzX3NkID0gJmJ1cy0+ZGV2LmFyY2hkYXRhOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqYnVzX2RwID0gYnVzLT5kZXYub2Zfbm9kZTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwOwogCiAJZm9yIChkcCA9IGJ1c19kcC0+Y2hpbGQ7IGRwOyBkcCA9IGRwLT5zaWJsaW5nKSB7Ci0JCXN0cnVjdCBvZl9kZXZpY2UgKm9wID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShkcCk7CisJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShkcCk7CiAKIAkJb3AtPmRldi5hcmNoZGF0YS5pb21tdSA9IGJ1c19zZC0+aW9tbXU7CiAJCW9wLT5kZXYuYXJjaGRhdGEuc3RjID0gYnVzX3NkLT5zdGM7CkBAIC02NCw5ICs0NCw2IEBACiAJfQogfQogCi1zdHJ1Y3QgYnVzX3R5cGUgb2ZfcGxhdGZvcm1fYnVzX3R5cGU7Ci1FWFBPUlRfU1lNQk9MKG9mX3BsYXRmb3JtX2J1c190eXBlKTsKLQogc3RhdGljIHZvaWQgZ2V0X2NlbGxzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIGludCAqYWRkcmMsIGludCAqc2l6ZWMpCiB7CiAJaWYgKGFkZHJjKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2kuYwppbmRleCA4YTgzNjNhLi40MTM3NTc5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2kuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2kuYwpAQCAtMTk4LDcgKzE5OCw3IEBACiAgKiBpbnRvIHBoeXNpY2FsIGFkZHJlc3MgcmVzb3VyY2VzLCB3ZSBvbmx5IGhhdmUgdG8gZmlndXJlIG91dCB0aGUgcmVnaXN0ZXIKICAqIG1hcHBpbmcuCiAgKi8KLXN0YXRpYyB2b2lkIHBjaV9wYXJzZV9vZl9hZGRycyhzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwKK3N0YXRpYyB2b2lkIHBjaV9wYXJzZV9vZl9hZGRycyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCwKIAkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCiAJCQkgICAgICAgc3RydWN0IHBjaV9kZXYgKmRldikKIHsKQEAgLTI0OCw3ICsyNDgsNyBAQAogewogCXN0cnVjdCBkZXZfYXJjaGRhdGEgKnNkOwogCXN0cnVjdCBwY2lfc2xvdCAqc2xvdDsKLQlzdHJ1Y3Qgb2ZfZGV2aWNlICpvcDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcDsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCWNvbnN0IGNoYXIgKnR5cGU7CiAJdTMyIGNsYXNzOwpAQCAtMzQwLDcgKzM0MCw3IEBACiAJCWRldi0+aGRyX3R5cGUgPSBQQ0lfSEVBREVSX1RZUEVfTk9STUFMOwogCQlkZXYtPnJvbV9iYXNlX3JlZyA9IFBDSV9ST01fQUREUkVTUzsKIAotCQlkZXYtPmlycSA9IHNkLT5vcC0+aXJxc1swXTsKKwkJZGV2LT5pcnEgPSBzZC0+b3AtPmFyY2hkYXRhLmlycXNbMF07CiAJCWlmIChkZXYtPmlycSA9PSAweGZmZmZmZmZmKQogCQkJZGV2LT5pcnEgPSBQQ0lfSVJRX05PTkU7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX2ZpcmUuYyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaV9maXJlLmMKaW5kZXggNTFjZmEwOS4uZWZiODk2ZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX2ZpcmUuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfZmlyZS5jCkBAIC00MTAsNyArNDEwLDcgQEAKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgcGNpX2ZpcmVfcGJtX2luaXQoc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtLAotCQkJCSAgICAgICBzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwgdTMyIHBvcnRpZCkKKwkJCQkgICAgICAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3AsIHUzMiBwb3J0aWQpCiB7CiAJY29uc3Qgc3RydWN0IGxpbnV4X3Byb202NF9yZWdpc3RlcnMgKnJlZ3M7CiAJc3RydWN0IGRldmljZV9ub2RlICpkcCA9IG9wLT5kZXYub2Zfbm9kZTsKQEAgLTQ1NSw3ICs0NTUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBmaXJlX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9wLAorc3RhdGljIGludCBfX2RldmluaXQgZmlyZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCwKIAkJCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gb3AtPmRldi5vZl9ub2RlOwpAQCAtNTE4LDcgKzUxOCw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGZpcmVfaW5pdCh2b2lkKQogewotCXJldHVybiBvZl9yZWdpc3Rlcl9kcml2ZXIoJmZpcmVfZHJpdmVyLCAmb2ZfYnVzX3R5cGUpOworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmZpcmVfZHJpdmVyKTsKIH0KIAogc3Vic3lzX2luaXRjYWxsKGZpcmVfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfaW1wbC5oIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX2ltcGwuaAppbmRleCAwMzE4NjgyLi5lMjBlZDVmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfaW1wbC5oCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaV9pbXBsLmgKQEAgLTkxLDcgKzkxLDcgQEAKIAljaGFyCQkJCSpuYW1lOwogCiAJLyogT0JQIHNwZWNpZmljIGluZm9ybWF0aW9uLiAqLwotCXN0cnVjdCBvZl9kZXZpY2UJCSpvcDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqb3A7CiAJdTY0CQkJCWlub19iaXRtYXA7CiAKIAkvKiBQQk0gSS9PIGFuZCBNZW1vcnkgc3BhY2UgcmVzb3VyY2VzLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX3BzeWNoby5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX3BzeWNoby5jCmluZGV4IDU1OGE3MDUuLjIyZWFiN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BjaV9wc3ljaG8uYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfcHN5Y2hvLmMKQEAgLTI4NSw3ICsyODUsNyBAQAogI2RlZmluZSAgUFNZQ0hPX0VDQ0NUUkxfQ0UJIDB4MjAwMDAwMDAwMDAwMDAwMFVMIC8qIEVuYWJsZSBDRSBJTnRlcnJ1cHRzICovCiBzdGF0aWMgdm9pZCBwc3ljaG9fcmVnaXN0ZXJfZXJyb3JfaGFuZGxlcnMoc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtKQogewotCXN0cnVjdCBvZl9kZXZpY2UgKm9wID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShwYm0tPm9wLT5kZXYub2Zfbm9kZSk7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3AgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKHBibS0+b3AtPmRldi5vZl9ub2RlKTsKIAl1bnNpZ25lZCBsb25nIGJhc2UgPSBwYm0tPmNvbnRyb2xsZXJfcmVnczsKIAl1NjQgdG1wOwogCWludCBlcnI7CkBAIC0zMDIsMjMgKzMwMiwyMyBAQAogCSAqIDU6IFBPV0VSIE1BTkFHRU1FTlQKIAkgKi8KIAotCWlmIChvcC0+bnVtX2lycXMgPCA2KQorCWlmIChvcC0+YXJjaGRhdGEubnVtX2lycXMgPCA2KQogCQlyZXR1cm47CiAKIAkvKiBXZSByZWFsbHkgbWVhbiB0byBpZ25vcmUgdGhlIHJldHVybiByZXN1bHQgaGVyZS4gIFR3bwogCSAqIFBDSSBjb250cm9sbGVyIHNoYXJlIHRoZSBzYW1lIGludGVycnVwdCBudW1iZXJzIGFuZAogCSAqIGRyaXZlIHRoZSBzYW1lIGZyb250LWVuZCBoYXJkd2FyZS4KIAkgKi8KLQllcnIgPSByZXF1ZXN0X2lycShvcC0+aXJxc1sxXSwgcHN5Y2hvX3VlX2ludHIsIElSUUZfU0hBUkVELAorCWVyciA9IHJlcXVlc3RfaXJxKG9wLT5hcmNoZGF0YS5pcnFzWzFdLCBwc3ljaG9fdWVfaW50ciwgSVJRRl9TSEFSRUQsCiAJCQkgICJQU1lDSE9fVUUiLCBwYm0pOwotCWVyciA9IHJlcXVlc3RfaXJxKG9wLT5pcnFzWzJdLCBwc3ljaG9fY2VfaW50ciwgSVJRRl9TSEFSRUQsCisJZXJyID0gcmVxdWVzdF9pcnEob3AtPmFyY2hkYXRhLmlycXNbMl0sIHBzeWNob19jZV9pbnRyLCBJUlFGX1NIQVJFRCwKIAkJCSAgIlBTWUNIT19DRSIsIHBibSk7CiAKIAkvKiBUaGlzIG9uZSwgaG93ZXZlciwgb3VnaHQgbm90IHRvIGZhaWwuICBXZSBjYW4ganVzdCB3YXJuCiAJICogYWJvdXQgaXQgc2luY2UgdGhlIHN5c3RlbSBjYW4gc3RpbGwgb3BlcmF0ZSBwcm9wZXJseSBldmVuCiAJICogaWYgdGhpcyBmYWlscy4KIAkgKi8KLQllcnIgPSByZXF1ZXN0X2lycShvcC0+aXJxc1swXSwgcHN5Y2hvX3BjaWVycl9pbnRyLCBJUlFGX1NIQVJFRCwKKwllcnIgPSByZXF1ZXN0X2lycShvcC0+YXJjaGRhdGEuaXJxc1swXSwgcHN5Y2hvX3BjaWVycl9pbnRyLCBJUlFGX1NIQVJFRCwKIAkJCSAgIlBTWUNIT19QQ0lFUlIiLCBwYm0pOwogCWlmIChlcnIpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDb3VsZCBub3QgcmVnaXN0ZXIgUENJRVJSLCAiCkBAIC00ODMsNyArNDgzLDcgQEAKICNkZWZpbmUgUFNZQ0hPX01FTVNQQUNFX1NJWkUJMHgwN2ZmZmZmZmZVTAogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgcHN5Y2hvX3BibV9pbml0KHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSwKLQkJCQkgICAgICBzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwgaW50IGlzX3BibV9hKQorCQkJCSAgICAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wLCBpbnQgaXNfcGJtX2EpCiB7CiAJcHN5Y2hvX3BibV9pbml0X2NvbW1vbihwYm0sIG9wLCAiUFNZQ0hPIiwgUEJNX0NISVBfVFlQRV9QU1lDSE8pOwogCXBzeWNob19wYm1fc3RyYnVmX2luaXQocGJtLCBpc19wYm1fYSk7CkBAIC01MDMsNyArNTAzLDcgQEAKIAogI2RlZmluZSBQU1lDSE9fQ09ORklHU1BBQ0UJMHgwMDEwMDAwMDBVTAogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBwc3ljaG9fcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb3AsCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwc3ljaG9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3AsCiAJCQkJICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKIAljb25zdCBzdHJ1Y3QgbGludXhfcHJvbTY0X3JlZ2lzdGVycyAqcHJfcmVnczsKQEAgLTYxMiw3ICs2MTIsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBwc3ljaG9faW5pdCh2b2lkKQogewotCXJldHVybiBvZl9yZWdpc3Rlcl9kcml2ZXIoJnBzeWNob19kcml2ZXIsICZvZl9idXNfdHlwZSk7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmcHN5Y2hvX2RyaXZlcik7CiB9CiAKIHN1YnN5c19pbml0Y2FsbChwc3ljaG9faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfc2FicmUuYyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaV9zYWJyZS5jCmluZGV4IDZkYWQ4ZTMuLjVjM2Y1ZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BjaV9zYWJyZS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaV9zYWJyZS5jCkBAIC0zMTEsNyArMzExLDcgQEAKIHN0YXRpYyB2b2lkIHNhYnJlX3JlZ2lzdGVyX2Vycm9yX2hhbmRsZXJzKHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gcGJtLT5vcC0+ZGV2Lm9mX25vZGU7Ci0Jc3RydWN0IG9mX2RldmljZSAqb3A7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3A7CiAJdW5zaWduZWQgbG9uZyBiYXNlID0gcGJtLT5jb250cm9sbGVyX3JlZ3M7CiAJdTY0IHRtcDsKIAlpbnQgZXJyOwpAQCAtMzI5LDcgKzMyOSw3IEBACiAJICogMjogQ0UgRVJSCiAJICogMzogUE9XRVIgRkFJTAogCSAqLwotCWlmIChvcC0+bnVtX2lycXMgPCA0KQorCWlmIChvcC0+YXJjaGRhdGEubnVtX2lycXMgPCA0KQogCQlyZXR1cm47CiAKIAkvKiBXZSBjbGVhciB0aGUgZXJyb3IgYml0cyBpbiB0aGUgYXBwcm9wcmlhdGUgQUZTUiBiZWZvcmUKQEAgLTM0MSw3ICszNDEsNyBAQAogCQkgICAgU0FCUkVfVUVBRlNSX1NEVEUgfCBTQUJSRV9VRUFGU1JfUERURSksCiAJCSAgIGJhc2UgKyBTQUJSRV9VRV9BRlNSKTsKIAotCWVyciA9IHJlcXVlc3RfaXJxKG9wLT5pcnFzWzFdLCBzYWJyZV91ZV9pbnRyLCAwLCAiU0FCUkVfVUUiLCBwYm0pOworCWVyciA9IHJlcXVlc3RfaXJxKG9wLT5hcmNoZGF0YS5pcnFzWzFdLCBzYWJyZV91ZV9pbnRyLCAwLCAiU0FCUkVfVUUiLCBwYm0pOwogCWlmIChlcnIpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDb3VsZG4ndCByZWdpc3RlciBVRSwgZXJyPSVkLlxuIiwKIAkJICAgICAgIHBibS0+bmFtZSwgZXJyKTsKQEAgLTM1MSwxMSArMzUxLDExIEBACiAJCSAgIGJhc2UgKyBTQUJSRV9DRV9BRlNSKTsKIAogCi0JZXJyID0gcmVxdWVzdF9pcnEob3AtPmlycXNbMl0sIHNhYnJlX2NlX2ludHIsIDAsICJTQUJSRV9DRSIsIHBibSk7CisJZXJyID0gcmVxdWVzdF9pcnEob3AtPmFyY2hkYXRhLmlycXNbMl0sIHNhYnJlX2NlX2ludHIsIDAsICJTQUJSRV9DRSIsIHBibSk7CiAJaWYgKGVycikKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENvdWxkbid0IHJlZ2lzdGVyIENFLCBlcnI9JWQuXG4iLAogCQkgICAgICAgcGJtLT5uYW1lLCBlcnIpOwotCWVyciA9IHJlcXVlc3RfaXJxKG9wLT5pcnFzWzBdLCBwc3ljaG9fcGNpZXJyX2ludHIsIDAsCisJZXJyID0gcmVxdWVzdF9pcnEob3AtPmFyY2hkYXRhLmlycXNbMF0sIHBzeWNob19wY2llcnJfaW50ciwgMCwKIAkJCSAgIlNBQlJFX1BDSUVSUiIsIHBibSk7CiAJaWYgKGVycikKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENvdWxkbid0IHJlZ2lzdGVyIFBDSUVSUiwgZXJyPSVkLlxuIiwKQEAgLTQ0Myw3ICs0NDMsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgc2FicmVfcGJtX2luaXQoc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtLAotCQkJCSAgICAgc3RydWN0IG9mX2RldmljZSAqb3ApCisJCQkJICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCkKIHsKIAlwc3ljaG9fcGJtX2luaXRfY29tbW9uKHBibSwgb3AsICJTQUJSRSIsIFBCTV9DSElQX1RZUEVfU0FCUkUpOwogCXBibS0+cGNpX2Fmc3IgPSBwYm0tPmNvbnRyb2xsZXJfcmVncyArIFNBQlJFX1BJT0FGU1I7CkBAIC00NTIsNyArNDUyLDcgQEAKIAlzYWJyZV9zY2FuX2J1cyhwYm0sICZvcC0+ZGV2KTsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgc2FicmVfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb3AsCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzYWJyZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCwKIAkJCQkgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7CiAJY29uc3Qgc3RydWN0IGxpbnV4X3Byb202NF9yZWdpc3RlcnMgKnByX3JlZ3M7CkBAIC02MDYsNyArNjA2LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgc2FicmVfaW5pdCh2b2lkKQogewotCXJldHVybiBvZl9yZWdpc3Rlcl9kcml2ZXIoJnNhYnJlX2RyaXZlciwgJm9mX2J1c190eXBlKTsKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZzYWJyZV9kcml2ZXIpOwogfQogCiBzdWJzeXNfaW5pdGNhbGwoc2FicmVfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfc2NoaXpvLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfc2NoaXpvLmMKaW5kZXggOTdhMWFlMi4uNDQ1YTQ3YSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX3NjaGl6by5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaV9zY2hpem8uYwpAQCAtODQ0LDcgKzg0NCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHRvbWF0aWxsb19yZWdpc3Rlcl9lcnJvcl9oYW5kbGVycyhzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0pCiB7Ci0Jc3RydWN0IG9mX2RldmljZSAqb3AgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKHBibS0+b3AtPmRldi5vZl9ub2RlKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocGJtLT5vcC0+ZGV2Lm9mX25vZGUpOwogCXU2NCB0bXAsIGVycl9tYXNrLCBlcnJfbm9fbWFzazsKIAlpbnQgZXJyOwogCkBAIC04NTcsMTQgKzg1NywxNCBAQAogCSAqLwogCiAJaWYgKHBibV9yb3V0ZXNfdGhpc19pbm8ocGJtLCBTQ0hJWk9fVUVfSU5PKSkgewotCQllcnIgPSByZXF1ZXN0X2lycShvcC0+aXJxc1sxXSwgc2NoaXpvX3VlX2ludHIsIDAsCisJCWVyciA9IHJlcXVlc3RfaXJxKG9wLT5hcmNoZGF0YS5pcnFzWzFdLCBzY2hpem9fdWVfaW50ciwgMCwKIAkJCQkgICJUT01BVElMTE9fVUUiLCBwYm0pOwogCQlpZiAoZXJyKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENvdWxkIG5vdCByZWdpc3RlciBVRSwgIgogCQkJICAgICAgICJlcnI9JWRcbiIsIHBibS0+bmFtZSwgZXJyKTsKIAl9CiAJaWYgKHBibV9yb3V0ZXNfdGhpc19pbm8ocGJtLCBTQ0hJWk9fQ0VfSU5PKSkgewotCQllcnIgPSByZXF1ZXN0X2lycShvcC0+aXJxc1syXSwgc2NoaXpvX2NlX2ludHIsIDAsCisJCWVyciA9IHJlcXVlc3RfaXJxKG9wLT5hcmNoZGF0YS5pcnFzWzJdLCBzY2hpem9fY2VfaW50ciwgMCwKIAkJCQkgICJUT01BVElMTE9fQ0UiLCBwYm0pOwogCQlpZiAoZXJyKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENvdWxkIG5vdCByZWdpc3RlciBDRSwgIgpAQCAtODcyLDEwICs4NzIsMTAgQEAKIAl9CiAJZXJyID0gMDsKIAlpZiAocGJtX3JvdXRlc190aGlzX2lubyhwYm0sIFNDSElaT19QQ0lFUlJfQV9JTk8pKSB7Ci0JCWVyciA9IHJlcXVlc3RfaXJxKG9wLT5pcnFzWzBdLCBzY2hpem9fcGNpZXJyX2ludHIsIDAsCisJCWVyciA9IHJlcXVlc3RfaXJxKG9wLT5hcmNoZGF0YS5pcnFzWzBdLCBzY2hpem9fcGNpZXJyX2ludHIsIDAsCiAJCQkJICAiVE9NQVRJTExPX1BDSUVSUiIsIHBibSk7CiAJfSBlbHNlIGlmIChwYm1fcm91dGVzX3RoaXNfaW5vKHBibSwgU0NISVpPX1BDSUVSUl9CX0lOTykpIHsKLQkJZXJyID0gcmVxdWVzdF9pcnEob3AtPmlycXNbMF0sIHNjaGl6b19wY2llcnJfaW50ciwgMCwKKwkJZXJyID0gcmVxdWVzdF9pcnEob3AtPmFyY2hkYXRhLmlycXNbMF0sIHNjaGl6b19wY2llcnJfaW50ciwgMCwKIAkJCQkgICJUT01BVElMTE9fUENJRVJSIiwgcGJtKTsKIAl9CiAJaWYgKGVycikKQEAgLTg4Myw3ICs4ODMsNyBAQAogCQkgICAgICAgImVycj0lZFxuIiwgcGJtLT5uYW1lLCBlcnIpOwogCiAJaWYgKHBibV9yb3V0ZXNfdGhpc19pbm8ocGJtLCBTQ0hJWk9fU0VSUl9JTk8pKSB7Ci0JCWVyciA9IHJlcXVlc3RfaXJxKG9wLT5pcnFzWzNdLCBzY2hpem9fc2FmYXJpZXJyX2ludHIsIDAsCisJCWVyciA9IHJlcXVlc3RfaXJxKG9wLT5hcmNoZGF0YS5pcnFzWzNdLCBzY2hpem9fc2FmYXJpZXJyX2ludHIsIDAsCiAJCQkJICAiVE9NQVRJTExPX1NFUlIiLCBwYm0pOwogCQlpZiAoZXJyKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENvdWxkIG5vdCByZWdpc3RlciBTRVJSLCAiCkBAIC05MzksNyArOTM5LDcgQEAKIAogc3RhdGljIHZvaWQgc2NoaXpvX3JlZ2lzdGVyX2Vycm9yX2hhbmRsZXJzKHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSkKIHsKLQlzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocGJtLT5vcC0+ZGV2Lm9mX25vZGUpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShwYm0tPm9wLT5kZXYub2Zfbm9kZSk7CiAJdTY0IHRtcCwgZXJyX21hc2ssIGVycl9ub19tYXNrOwogCWludCBlcnI7CiAKQEAgLTk1MiwxNCArOTUyLDE0IEBACiAJICovCiAKIAlpZiAocGJtX3JvdXRlc190aGlzX2lubyhwYm0sIFNDSElaT19VRV9JTk8pKSB7Ci0JCWVyciA9IHJlcXVlc3RfaXJxKG9wLT5pcnFzWzFdLCBzY2hpem9fdWVfaW50ciwgMCwKKwkJZXJyID0gcmVxdWVzdF9pcnEob3AtPmFyY2hkYXRhLmlycXNbMV0sIHNjaGl6b191ZV9pbnRyLCAwLAogCQkJCSAgIlNDSElaT19VRSIsIHBibSk7CiAJCWlmIChlcnIpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ291bGQgbm90IHJlZ2lzdGVyIFVFLCAiCiAJCQkgICAgICAgImVycj0lZFxuIiwgcGJtLT5uYW1lLCBlcnIpOwogCX0KIAlpZiAocGJtX3JvdXRlc190aGlzX2lubyhwYm0sIFNDSElaT19DRV9JTk8pKSB7Ci0JCWVyciA9IHJlcXVlc3RfaXJxKG9wLT5pcnFzWzJdLCBzY2hpem9fY2VfaW50ciwgMCwKKwkJZXJyID0gcmVxdWVzdF9pcnEob3AtPmFyY2hkYXRhLmlycXNbMl0sIHNjaGl6b19jZV9pbnRyLCAwLAogCQkJCSAgIlNDSElaT19DRSIsIHBibSk7CiAJCWlmIChlcnIpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ291bGQgbm90IHJlZ2lzdGVyIENFLCAiCkBAIC05NjcsMTAgKzk2NywxMCBAQAogCX0KIAllcnIgPSAwOwogCWlmIChwYm1fcm91dGVzX3RoaXNfaW5vKHBibSwgU0NISVpPX1BDSUVSUl9BX0lOTykpIHsKLQkJZXJyID0gcmVxdWVzdF9pcnEob3AtPmlycXNbMF0sIHNjaGl6b19wY2llcnJfaW50ciwgMCwKKwkJZXJyID0gcmVxdWVzdF9pcnEob3AtPmFyY2hkYXRhLmlycXNbMF0sIHNjaGl6b19wY2llcnJfaW50ciwgMCwKIAkJCQkgICJTQ0hJWk9fUENJRVJSIiwgcGJtKTsKIAl9IGVsc2UgaWYgKHBibV9yb3V0ZXNfdGhpc19pbm8ocGJtLCBTQ0hJWk9fUENJRVJSX0JfSU5PKSkgewotCQllcnIgPSByZXF1ZXN0X2lycShvcC0+aXJxc1swXSwgc2NoaXpvX3BjaWVycl9pbnRyLCAwLAorCQllcnIgPSByZXF1ZXN0X2lycShvcC0+YXJjaGRhdGEuaXJxc1swXSwgc2NoaXpvX3BjaWVycl9pbnRyLCAwLAogCQkJCSAgIlNDSElaT19QQ0lFUlIiLCBwYm0pOwogCX0KIAlpZiAoZXJyKQpAQCAtOTc4LDcgKzk3OCw3IEBACiAJCSAgICAgICAiZXJyPSVkXG4iLCBwYm0tPm5hbWUsIGVycik7CiAKIAlpZiAocGJtX3JvdXRlc190aGlzX2lubyhwYm0sIFNDSElaT19TRVJSX0lOTykpIHsKLQkJZXJyID0gcmVxdWVzdF9pcnEob3AtPmlycXNbM10sIHNjaGl6b19zYWZhcmllcnJfaW50ciwgMCwKKwkJZXJyID0gcmVxdWVzdF9pcnEob3AtPmFyY2hkYXRhLmlycXNbM10sIHNjaGl6b19zYWZhcmllcnJfaW50ciwgMCwKIAkJCQkgICJTQ0hJWk9fU0VSUiIsIHBibSk7CiAJCWlmIChlcnIpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ291bGQgbm90IHJlZ2lzdGVyIFNFUlIsICIKQEAgLTEzMDcsNyArMTMwNyw3IEBACiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNjaGl6b19wYm1faW5pdChzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0sCi0JCQkJICAgICBzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwgdTMyIHBvcnRpZCwKKwkJCQkgICAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wLCB1MzIgcG9ydGlkLAogCQkJCSAgICAgaW50IGNoaXBfdHlwZSkKIHsKIAljb25zdCBzdHJ1Y3QgbGludXhfcHJvbTY0X3JlZ2lzdGVycyAqcmVnczsKQEAgLTE0MTMsNyArMTQxMyw3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IF9fc2NoaXpvX2luaXQoc3RydWN0IG9mX2RldmljZSAqb3AsIHVuc2lnbmVkIGxvbmcgY2hpcF90eXBlKQorc3RhdGljIGludCBfX2RldmluaXQgX19zY2hpem9faW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCwgdW5zaWduZWQgbG9uZyBjaGlwX3R5cGUpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpkcCA9IG9wLT5kZXYub2Zfbm9kZTsKIAlzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm07CkBAIC0xNDYwLDcgKzE0NjAsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHNjaGl6b19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNjaGl6b19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCwKIAkJCQkgIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewogCXJldHVybiBfX3NjaGl6b19pbml0KG9wLCAodW5zaWduZWQgbG9uZykgbWF0Y2gtPmRhdGEpOwpAQCAtMTUwMSw3ICsxNTAxLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgc2NoaXpvX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gb2ZfcmVnaXN0ZXJfZHJpdmVyKCZzY2hpem9fZHJpdmVyLCAmb2ZfYnVzX3R5cGUpOworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnNjaGl6b19kcml2ZXIpOwogfQogCiBzdWJzeXNfaW5pdGNhbGwoc2NoaXpvX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX3N1bjR2LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfc3VuNHYuYwppbmRleCBhMjRhZjZmLi43NDMzNDRhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfc3VuNHYuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfc3VuNHYuYwpAQCAtODc5LDcgKzg3OSw3IEBACiAjZW5kaWYgLyogIShDT05GSUdfUENJX01TSSkgKi8KIAogc3RhdGljIGludCBfX2RldmluaXQgcGNpX3N1bjR2X3BibV9pbml0KHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSwKLQkJCQkJc3RydWN0IG9mX2RldmljZSAqb3AsIHUzMiBkZXZoYW5kbGUpCisJCQkJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wLCB1MzIgZGV2aGFuZGxlKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBvcC0+ZGV2Lm9mX25vZGU7CiAJaW50IGVycjsKQEAgLTkxOCw3ICs5MTgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBwY2lfc3VuNHZfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb3AsCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwY2lfc3VuNHZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3AsCiAJCQkJICAgICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKIAljb25zdCBzdHJ1Y3QgbGludXhfcHJvbTY0X3JlZ2lzdGVycyAqcmVnczsKQEAgLTEwMTksNyArMTAxOSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHBjaV9zdW40dl9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIG9mX3JlZ2lzdGVyX2RyaXZlcigmcGNpX3N1bjR2X2RyaXZlciwgJm9mX2J1c190eXBlKTsKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZwY2lfc3VuNHZfZHJpdmVyKTsKIH0KIAogc3Vic3lzX2luaXRjYWxsKHBjaV9zdW40dl9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCAwZWM5MmM4Li4zNTdjZWQzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC01NzIsMTggKzU3MiwxOCBAQAogCXM2NCBkZWx0YTsKIAogYWdhaW46Ci0JcHJldl9yYXdfY291bnQgPSBhdG9taWM2NF9yZWFkKCZod2MtPnByZXZfY291bnQpOworCXByZXZfcmF3X2NvdW50ID0gbG9jYWw2NF9yZWFkKCZod2MtPnByZXZfY291bnQpOwogCW5ld19yYXdfY291bnQgPSByZWFkX3BtYyhpZHgpOwogCi0JaWYgKGF0b21pYzY0X2NtcHhjaGcoJmh3Yy0+cHJldl9jb3VudCwgcHJldl9yYXdfY291bnQsCisJaWYgKGxvY2FsNjRfY21weGNoZygmaHdjLT5wcmV2X2NvdW50LCBwcmV2X3Jhd19jb3VudCwKIAkJCSAgICAgbmV3X3Jhd19jb3VudCkgIT0gcHJldl9yYXdfY291bnQpCiAJCWdvdG8gYWdhaW47CiAKIAlkZWx0YSA9IChuZXdfcmF3X2NvdW50IDw8IHNoaWZ0KSAtIChwcmV2X3Jhd19jb3VudCA8PCBzaGlmdCk7CiAJZGVsdGEgPj49IHNoaWZ0OwogCi0JYXRvbWljNjRfYWRkKGRlbHRhLCAmZXZlbnQtPmNvdW50KTsKLQlhdG9taWM2NF9zdWIoZGVsdGEsICZod2MtPnBlcmlvZF9sZWZ0KTsKKwlsb2NhbDY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7CisJbG9jYWw2NF9zdWIoZGVsdGEsICZod2MtPnBlcmlvZF9sZWZ0KTsKIAogCXJldHVybiBuZXdfcmF3X2NvdW50OwogfQpAQCAtNTkxLDI3ICs1OTEsMjcgQEAKIHN0YXRpYyBpbnQgc3BhcmNfcGVyZl9ldmVudF9zZXRfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKIAkJCQkgICAgICAgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKIHsKLQlzNjQgbGVmdCA9IGF0b21pYzY0X3JlYWQoJmh3Yy0+cGVyaW9kX2xlZnQpOworCXM2NCBsZWZ0ID0gbG9jYWw2NF9yZWFkKCZod2MtPnBlcmlvZF9sZWZ0KTsKIAlzNjQgcGVyaW9kID0gaHdjLT5zYW1wbGVfcGVyaW9kOwogCWludCByZXQgPSAwOwogCiAJaWYgKHVubGlrZWx5KGxlZnQgPD0gLXBlcmlvZCkpIHsKIAkJbGVmdCA9IHBlcmlvZDsKLQkJYXRvbWljNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCBsZWZ0KTsKKwkJbG9jYWw2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGxlZnQpOwogCQlod2MtPmxhc3RfcGVyaW9kID0gcGVyaW9kOwogCQlyZXQgPSAxOwogCX0KIAogCWlmICh1bmxpa2VseShsZWZ0IDw9IDApKSB7CiAJCWxlZnQgKz0gcGVyaW9kOwotCQlhdG9taWM2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGxlZnQpOworCQlsb2NhbDY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgbGVmdCk7CiAJCWh3Yy0+bGFzdF9wZXJpb2QgPSBwZXJpb2Q7CiAJCXJldCA9IDE7CiAJfQogCWlmIChsZWZ0ID4gTUFYX1BFUklPRCkKIAkJbGVmdCA9IE1BWF9QRVJJT0Q7CiAKLQlhdG9taWM2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgKHU2NCktbGVmdCk7CisJbG9jYWw2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgKHU2NCktbGVmdCk7CiAKIAl3cml0ZV9wbWMoaWR4LCAodTY0KSgtbGVmdCkgJiAweGZmZmZmZmZmKTsKIApAQCAtNjU3LDYgKzY1Nyw3IEBACiAJCWNwdWMtPmN1cnJlbnRfaWR4W2ldID0gaWR4OwogCiAJCWVuYyA9IHBlcmZfZXZlbnRfZ2V0X2VuYyhjcHVjLT5ldmVudHNbaV0pOworCQlwY3IgJj0gfm1hc2tfZm9yX2luZGV4KGlkeCk7CiAJCXBjciB8PSBldmVudF9lbmNvZGluZyhlbmMsIGlkeCk7CiAJfQogb3V0OgpAQCAtMTAwNSw3ICsxMDA2LDcgQEAKIAkgKiBza2lwIHRoZSBzY2hlZHVsYWJpbGl0eSB0ZXN0IGhlcmUsIGl0IHdpbGwgYmUgcGVmb3JtZWQKIAkgKiBhdCBjb21taXQgdGltZSgtPmNvbW1pdF90eG4pIGFzIGEgd2hvbGUKIAkgKi8KLQlpZiAoY3B1Yy0+Z3JvdXBfZmxhZyAmIFBFUkZfRVZFTlRfVFhOX1NUQVJURUQpCisJaWYgKGNwdWMtPmdyb3VwX2ZsYWcgJiBQRVJGX0VWRU5UX1RYTikKIAkJZ290byBub2NoZWNrOwogCiAJaWYgKGNoZWNrX2V4Y2x1ZGVzKGNwdWMtPmV2ZW50LCBuMCwgMSkpCkBAIC0xMDg3LDcgKzEwODgsNyBAQAogCWlmICghaHdjLT5zYW1wbGVfcGVyaW9kKSB7CiAJCWh3Yy0+c2FtcGxlX3BlcmlvZCA9IE1BWF9QRVJJT0Q7CiAJCWh3Yy0+bGFzdF9wZXJpb2QgPSBod2MtPnNhbXBsZV9wZXJpb2Q7Ci0JCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgaHdjLT5zYW1wbGVfcGVyaW9kKTsKKwkJbG9jYWw2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMTAyLDcgKzExMDMsNyBAQAogewogCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVodyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCi0JY3B1aHctPmdyb3VwX2ZsYWcgfD0gUEVSRl9FVkVOVF9UWE5fU1RBUlRFRDsKKwljcHVody0+Z3JvdXBfZmxhZyB8PSBQRVJGX0VWRU5UX1RYTjsKIH0KIAogLyoKQEAgLTExMTQsNyArMTExNSw3IEBACiB7CiAJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWh3ID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CiAKLQljcHVody0+Z3JvdXBfZmxhZyAmPSB+UEVSRl9FVkVOVF9UWE5fU1RBUlRFRDsKKwljcHVody0+Z3JvdXBfZmxhZyAmPSB+UEVSRl9FVkVOVF9UWE47CiB9CiAKIC8qCkBAIC0xMTM3LDYgKzExMzgsNyBAQAogCWlmIChzcGFyY19jaGVja19jb25zdHJhaW50cyhjcHVjLT5ldmVudCwgY3B1Yy0+ZXZlbnRzLCBuKSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKKwljcHVjLT5ncm91cF9mbGFnICY9IH5QRVJGX0VWRU5UX1RYTjsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcG1jLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wbWMuYwppbmRleCA5NTg5ZDhiLi45NDUzNmE4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wbWMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wbWMuYwpAQCAtNTEsNyArNTEsNyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHBtY19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBtY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKIAlyZWdzID0gb2ZfaW9yZW1hcCgmb3AtPnJlc291cmNlWzBdLCAwLApAQCAtODksNyArODksNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBwbWNfaW5pdCh2b2lkKQogewotCXJldHVybiBvZl9yZWdpc3Rlcl9kcml2ZXIoJnBtY19kcml2ZXIsICZvZl9idXNfdHlwZSk7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmcG1jX2RyaXZlcik7CiB9CiAKIC8qIFRoaXMgZHJpdmVyIGlzIG5vdCBjcml0aWNhbCB0byB0aGUgYm9vdCBwcm9jZXNzCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wb3dlci5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcG93ZXIuYwppbmRleCAxNjhkNGNiLi4yYzU5ZjRkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wb3dlci5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Bvd2VyLmMKQEAgLTMzLDEwICszMywxMCBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBwb3dlcl9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwb3dlcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7CiAJc3RydWN0IHJlc291cmNlICpyZXMgPSAmb3AtPnJlc291cmNlWzBdOwotCXVuc2lnbmVkIGludCBpcnE9IG9wLT5pcnFzWzBdOworCXVuc2lnbmVkIGludCBpcnEgPSBvcC0+YXJjaGRhdGEuaXJxc1swXTsKIAogCXBvd2VyX3JlZyA9IG9mX2lvcmVtYXAocmVzLCAwLCAweDQsICJwb3dlciIpOwogCkBAIC03MCw3ICs3MCw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHBvd2VyX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gb2ZfcmVnaXN0ZXJfZHJpdmVyKCZwb3dlcl9kcml2ZXIsICZvZl9wbGF0Zm9ybV9idXNfdHlwZSk7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmcG93ZXJfZHJpdmVyKTsKIH0KIAogZGV2aWNlX2luaXRjYWxsKHBvd2VyX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbS5oIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbS5oCmluZGV4IGE4NTkxZWYuLmVlYjA0YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3Byb20uaAorKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tLmgKQEAgLTksMTQgKzksNiBAQAogCiBleHRlcm4gdW5zaWduZWQgaW50IHByb21fdW5pcXVlX2lkOwogCi1zdGF0aWMgaW5saW5lIGludCBpc19yb290X25vZGUoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpkcCkKLXsKLQlpZiAoIWRwKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAoZHAtPnBhcmVudCA9PSBOVUxMKTsKLX0KLQogZXh0ZXJuIGNoYXIgKmJ1aWxkX3BhdGhfY29tcG9uZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApOwogZXh0ZXJuIHZvaWQgb2ZfY29uc29sZV9pbml0KHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tXzY0LmMKaW5kZXggZmIwNmFjMi4uODY1OTdkOSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb21fNjQuYwpAQCAtMjAsOCArMjAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1iLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgogCiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vb3BsaWIuaD4KQEAgLTM0LDcgKzM0LDcgQEAKIAogdm9pZCAqIF9faW5pdCBwcm9tX2Vhcmx5X2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLQl1bnNpZ25lZCBsb25nIHBhZGRyID0gbG1iX2FsbG9jKHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7CisJdW5zaWduZWQgbG9uZyBwYWRkciA9IG1lbWJsb2NrX2FsbG9jKHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7CiAJdm9pZCAqcmV0OwogCiAJaWYgKCFwYWRkcikgewpAQCAtODEsNyArODEsNyBAQAogCQlyZXR1cm47CiAKIAlyZWdzID0gcnByb3AtPnZhbHVlOwotCWlmICghaXNfcm9vdF9ub2RlKGRwLT5wYXJlbnQpKSB7CisJaWYgKCFvZl9ub2RlX2lzX3Jvb3QoZHAtPnBhcmVudCkpIHsKIAkJc3ByaW50Zih0bXBfYnVmLCAiJXNAJXgsJXgiLAogCQkJZHAtPm5hbWUsCiAJCQkodW5zaWduZWQgaW50KSAocmVncy0+cGh5c19hZGRyID4+IDMyVUwpLApAQCAtMTIxLDcgKzEyMSw3IEBACiAJCXJldHVybjsKIAogCXJlZ3MgPSBwcm9wLT52YWx1ZTsKLQlpZiAoIWlzX3Jvb3Rfbm9kZShkcC0+cGFyZW50KSkgeworCWlmICghb2Zfbm9kZV9pc19yb290KGRwLT5wYXJlbnQpKSB7CiAJCXNwcmludGYodG1wX2J1ZiwgIiVzQCV4LCV4IiwKIAkJCWRwLT5uYW1lLAogCQkJKHVuc2lnbmVkIGludCkgKHJlZ3MtPnBoeXNfYWRkciA+PiAzMlVMKSwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Byb21fY29tbW9uLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2NvbW1vbi5jCmluZGV4IDU3YWM5ZTIuLjFmODMwZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3Byb21fY29tbW9uLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV9jb21tb24uYwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAKIAluID0gcHJvbV9lYXJseV9hbGxvYyhsZW4pOwogCXN0cmNweShuLCBkcC0+cGFyZW50LT5mdWxsX25hbWUpOwotCWlmICghaXNfcm9vdF9ub2RlKGRwLT5wYXJlbnQpKSB7CisJaWYgKCFvZl9ub2RlX2lzX3Jvb3QoZHAtPnBhcmVudCkpIHsKIAkJc3RyY3B5KG4gKyBwbGVuLCAiLyIpOwogCQlwbGVuKys7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV9pcnF0cmFucy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV9pcnF0cmFucy5jCmluZGV4IDU3MDJhZDQuLmNlNjUxMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3Byb21faXJxdHJhbnMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2lycXRyYW5zLmMKQEAgLTcxOSw3ICs3MTksNyBAQAogCQkJCSAgICAgIHZvaWQgKl9kYXRhKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2VudHJhbF9kcCA9IF9kYXRhOwotCXN0cnVjdCBvZl9kZXZpY2UgKmNlbnRyYWxfb3AgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKGNlbnRyYWxfZHApOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmNlbnRyYWxfb3AgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKGNlbnRyYWxfZHApOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXVuc2lnbmVkIGxvbmcgaW1hcCwgaWNscjsKIAl1MzIgdG1wOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcHN5Y2hvX2NvbW1vbi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHN5Y2hvX2NvbW1vbi5jCmluZGV4IDNmMzRhYzguLmZlMmFmNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BzeWNob19jb21tb24uYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wc3ljaG9fY29tbW9uLmMKQEAgLTQ0Nyw3ICs0NDcsNyBAQAogCiB9CiAKLXZvaWQgcHN5Y2hvX3BibV9pbml0X2NvbW1vbihzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0sIHN0cnVjdCBvZl9kZXZpY2UgKm9wLAordm9pZCBwc3ljaG9fcGJtX2luaXRfY29tbW9uKHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3AsCiAJCQkgICAgY29uc3QgY2hhciAqY2hpcF9uYW1lLCBpbnQgY2hpcF90eXBlKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBvcC0+ZGV2Lm9mX25vZGU7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wc3ljaG9fY29tbW9uLmggYi9hcmNoL3NwYXJjL2tlcm5lbC9wc3ljaG9fY29tbW9uLmgKaW5kZXggMDkyYzI3OC4uNTkwYjRlZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHN5Y2hvX2NvbW1vbi5oCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BzeWNob19jb21tb24uaApAQCAtNDIsNyArNDIsNyBAQAogCQkJICAgICB1bnNpZ25lZCBsb25nIHdyaXRlX2NvbXBsZXRlX29mZnNldCk7CiAKIGV4dGVybiB2b2lkIHBzeWNob19wYm1faW5pdF9jb21tb24oc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtLAotCQkJCSAgIHN0cnVjdCBvZl9kZXZpY2UgKm9wLAorCQkJCSAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wLAogCQkJCSAgIGNvbnN0IGNoYXIgKmNoaXBfbmFtZSwgaW50IGNoaXBfdHlwZSk7CiAKICNlbmRpZiAvKiBfUFNZQ0hPX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zYnVzLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zYnVzLmMKaW5kZXggY2ZlYWYwNC4uMmNhMzJkMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc2J1cy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NidXMuYwpAQCAtNTcsNyArNTcsNyBAQAogdm9pZCBzYnVzX3NldF9zYnVzNjQoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgYnVyc3RzKQogewogCXN0cnVjdCBpb21tdSAqaW9tbXUgPSBkZXYtPmFyY2hkYXRhLmlvbW11OwotCXN0cnVjdCBvZl9kZXZpY2UgKm9wID0gdG9fb2ZfZGV2aWNlKGRldik7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3AgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAljb25zdCBzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMgKnJlZ3M7CiAJdW5zaWduZWQgbG9uZyBjZmdfcmVnOwogCWludCBzbG90OwpAQCAtMjA0LDcgKzIwNCw3IEBACiAJcmV0dXJuIGltYXAgKyBkaWZmOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHNidXNfYnVpbGRfaXJxKHN0cnVjdCBvZl9kZXZpY2UgKm9wLCB1bnNpZ25lZCBpbnQgaW5vKQorc3RhdGljIHVuc2lnbmVkIGludCBzYnVzX2J1aWxkX2lycShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCwgdW5zaWduZWQgaW50IGlubykKIHsKIAlzdHJ1Y3QgaW9tbXUgKmlvbW11ID0gb3AtPmRldi5hcmNoZGF0YS5pb21tdTsKIAl1bnNpZ25lZCBsb25nIHJlZ19iYXNlID0gaW9tbXUtPndyaXRlX2NvbXBsZXRlX3JlZyAtIDB4MjAwMFVMOwpAQCAtMjY3LDcgKzI2Nyw3IEBACiAjZGVmaW5lICBTWVNJT19VRUFGU1JfUkVTVjIgMHgwMDAwMDAxZmZmZmZmZmZmVUwgLyogUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAqLwogc3RhdGljIGlycXJldHVybl90IHN5c2lvX3VlX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBvZl9kZXZpY2UgKm9wID0gZGV2X2lkOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wID0gZGV2X2lkOwogCXN0cnVjdCBpb21tdSAqaW9tbXUgPSBvcC0+ZGV2LmFyY2hkYXRhLmlvbW11OwogCXVuc2lnbmVkIGxvbmcgcmVnX2Jhc2UgPSBpb21tdS0+d3JpdGVfY29tcGxldGVfcmVnIC0gMHgyMDAwVUw7CiAJdW5zaWduZWQgbG9uZyBhZnNyX3JlZywgYWZhcl9yZWc7CkBAIC0zNDEsNyArMzQxLDcgQEAKICNkZWZpbmUgIFNZU0lPX0NFQUZTUl9SRVNWMiAweDAwMDAwMDFmZmZmZmZmZmZVTCAvKiBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICovCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc3lzaW9fY2VfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IG9mX2RldmljZSAqb3AgPSBkZXZfaWQ7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3AgPSBkZXZfaWQ7CiAJc3RydWN0IGlvbW11ICppb21tdSA9IG9wLT5kZXYuYXJjaGRhdGEuaW9tbXU7CiAJdW5zaWduZWQgbG9uZyByZWdfYmFzZSA9IGlvbW11LT53cml0ZV9jb21wbGV0ZV9yZWcgLSAweDIwMDBVTDsKIAl1bnNpZ25lZCBsb25nIGFmc3JfcmVnLCBhZmFyX3JlZzsKQEAgLTQyMCw3ICs0MjAsNyBAQAogI2RlZmluZSAgU1lTSU9fU0JBRlNSX1JFU1YzIDB4MDAwMDAwMWZmZmZmZmZmZlVMIC8qIFJlc2VydmVkICAgICAgICAgICAgICAgICAgKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCBzeXNpb19zYnVzX2Vycm9yX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBvZl9kZXZpY2UgKm9wID0gZGV2X2lkOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wID0gZGV2X2lkOwogCXN0cnVjdCBpb21tdSAqaW9tbXUgPSBvcC0+ZGV2LmFyY2hkYXRhLmlvbW11OwogCXVuc2lnbmVkIGxvbmcgYWZzcl9yZWcsIGFmYXJfcmVnLCByZWdfYmFzZTsKIAl1bnNpZ25lZCBsb25nIGFmc3IsIGFmYXIsIGVycm9yX2JpdHM7CkBAIC00ODgsNyArNDg4LDcgQEAKICNkZWZpbmUgU1lTSU9fQ0VfSU5PCQkweDM1CiAjZGVmaW5lIFNZU0lPX1NCVVNFUlJfSU5PCTB4MzYKIAotc3RhdGljIHZvaWQgX19pbml0IHN5c2lvX3JlZ2lzdGVyX2Vycm9yX2hhbmRsZXJzKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQorc3RhdGljIHZvaWQgX19pbml0IHN5c2lvX3JlZ2lzdGVyX2Vycm9yX2hhbmRsZXJzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wKQogewogCXN0cnVjdCBpb21tdSAqaW9tbXUgPSBvcC0+ZGV2LmFyY2hkYXRhLmlvbW11OwogCXVuc2lnbmVkIGxvbmcgcmVnX2Jhc2UgPSBpb21tdS0+d3JpdGVfY29tcGxldGVfcmVnIC0gMHgyMDAwVUw7CkBAIC01MzQsNyArNTM0LDcgQEAKIH0KIAogLyogQm9vdCB0aW1lIGluaXRpYWxpemF0aW9uLiAqLwotc3RhdGljIHZvaWQgX19pbml0IHNidXNfaW9tbXVfaW5pdChzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKK3N0YXRpYyB2b2lkIF9faW5pdCBzYnVzX2lvbW11X2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3ApCiB7CiAJY29uc3Qgc3RydWN0IGxpbnV4X3Byb202NF9yZWdpc3RlcnMgKnByOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBvcC0+ZGV2Lm9mX25vZGU7CkBAIC02NjMsNyArNjYzLDcgQEAKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwOwogCiAJZm9yX2VhY2hfbm9kZV9ieV9uYW1lKGRwLCAic2J1cyIpIHsKLQkJc3RydWN0IG9mX2RldmljZSAqb3AgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKGRwKTsKKwkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3AgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKGRwKTsKIAogCQlzYnVzX2lvbW11X2luaXQob3ApOwogCQlvZl9wcm9wYWdhdGVfYXJjaGRhdGEob3ApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfaXJxLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9pcnEuYwppbmRleCBhYjAzNmE3Li5lMTFiNDYxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9pcnEuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9pcnEuYwpAQCAtMTgzLDcgKzE4Myw3IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJCi0JaWYgKGFjdGlvbiAmJiB0bXApCisJaWYgKHRtcCkKIAkJdG1wLT5uZXh0ID0gYWN0aW9uLT5uZXh0OwogCWVsc2UKIAkJKmFjdGlvbnAgPSBhY3Rpb24tPm5leHQ7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC90aW1lXzMyLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC90aW1lXzMyLmMKaW5kZXggZTQwNGIwNi4uOWM3NDNiMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvdGltZV8zMi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3RpbWVfMzIuYwpAQCAtMTQyLDcgKzE0Miw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGNsb2NrX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9wLCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGNsb2NrX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wLCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gb3AtPmRldi5vZl9ub2RlOwogCWNvbnN0IGNoYXIgKm1vZGVsID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAibW9kZWwiLCBOVUxMKTsKQEAgLTE4OSw3ICsxODksNyBAQAogLyogUHJvYmUgZm9yIHRoZSBtb3N0ZWsgcmVhbCB0aW1lIGNsb2NrIGNoaXAuICovCiBzdGF0aWMgaW50IF9faW5pdCBjbG9ja19pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIG9mX3JlZ2lzdGVyX2RyaXZlcigmY2xvY2tfZHJpdmVyLCAmb2ZfcGxhdGZvcm1fYnVzX3R5cGUpOworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmNsb2NrX2RyaXZlcik7CiB9CiAvKiBNdXN0IGJlIGFmdGVyIHN1YnN5c19pbml0Y2FsbCgpIHNvIHRoYXQgYnVzc2VzIGFyZSBwcm9iZWQuICBNdXN0CiAgKiBiZSBiZWZvcmUgZGV2aWNlX2luaXRjYWxsKCkgYmVjYXVzZSB0aGluZ3MgbGlrZSB0aGUgUlRDIGRyaXZlcgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdGltZV82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdGltZV82NC5jCmluZGV4IDIxZTlmY2EuLjNiYzljOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3RpbWVfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC90aW1lXzY0LmMKQEAgLTQxOSw3ICs0MTksNyBAQAogCS5udW1fcmVzb3VyY2VzCT0gMSwKIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHJ0Y19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3AsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewogCXN0cnVjdCByZXNvdXJjZSAqcjsKIApAQCAtNDc3LDcgKzQ3Nyw3IEBACiAJLm51bV9yZXNvdXJjZXMJPSAxLAogfTsKIAotc3RhdGljIGludCBfX2RldmluaXQgYnE0ODAyX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9wLCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGJxNDgwMl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7CiAKIAlwcmludGsoS0VSTl9JTkZPICIlczogQlE0ODAyIHJlZ3MgYXQgMHglbGx4XG4iLApAQCAtNTM0LDcgKzUzNCw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IG1vc3Rla19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtb3N0ZWtfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3AsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBvcC0+ZGV2Lm9mX25vZGU7CiAKQEAgLTU4Niw5ICs1ODYsOSBAQAogCWlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKQogCQlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZydGNfc3VuNHZfZGV2aWNlKTsKIAotCSh2b2lkKSBvZl9yZWdpc3Rlcl9kcml2ZXIoJnJ0Y19kcml2ZXIsICZvZl9wbGF0Zm9ybV9idXNfdHlwZSk7Ci0JKHZvaWQpIG9mX3JlZ2lzdGVyX2RyaXZlcigmbW9zdGVrX2RyaXZlciwgJm9mX3BsYXRmb3JtX2J1c190eXBlKTsKLQkodm9pZCkgb2ZfcmVnaXN0ZXJfZHJpdmVyKCZicTQ4MDJfZHJpdmVyLCAmb2ZfcGxhdGZvcm1fYnVzX3R5cGUpOworCSh2b2lkKSBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnJ0Y19kcml2ZXIpOworCSh2b2lkKSBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm1vc3Rla19kcml2ZXIpOworCSh2b2lkKSBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmJxNDgwMl9kcml2ZXIpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC90dGFibGUuUyBiL2FyY2gvc3BhcmMva2VybmVsL3R0YWJsZS5TCmluZGV4IDc2ZDgzN2YuLmM2ZGZkYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3R0YWJsZS5TCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3R0YWJsZS5TCkBAIC02NCw3ICs2NCw3IEBACiB0bDBfaXJxNjoJQlRSQVAoMHg0NikKICNlbmRpZgogdGwwX2lycTc6CVRSQVBfSVJRKGRlZmVycmVkX3Bjcl93b3JrX2lycSwgNykKLSNpZmRlZiBDT05GSUdfS0dEQgorI2lmIGRlZmluZWQoQ09ORklHX0tHREIpICYmIGRlZmluZWQoQ09ORklHX1NNUCkKIHRsMF9pcnE4OglUUkFQX0lSUShzbXBfa2dkYl9jYXB0dXJlX2NsaWVudCwgOCkKICNlbHNlCiB0bDBfaXJxODoJQlRSQVAoMHg0OCkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jIGIvYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMKaW5kZXggYjI4MzFkYy4uZjA0MzQ1MSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9sbWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogCkBAIC03MjYsNyArNzI2LDcgQEAKIAkJaW5pdHJkX3N0YXJ0ID0gcmFtZGlza19pbWFnZTsKIAkJaW5pdHJkX2VuZCA9IHJhbWRpc2tfaW1hZ2UgKyBzcGFyY19yYW1kaXNrX3NpemU7CiAKLQkJbG1iX3Jlc2VydmUoaW5pdHJkX3N0YXJ0LCBzcGFyY19yYW1kaXNrX3NpemUpOworCQltZW1ibG9ja19yZXNlcnZlKGluaXRyZF9zdGFydCwgc3BhcmNfcmFtZGlza19zaXplKTsKIAogCQlpbml0cmRfc3RhcnQgKz0gUEFHRV9PRkZTRVQ7CiAJCWluaXRyZF9lbmQgKz0gUEFHRV9PRkZTRVQ7CkBAIC04MjIsNyArODIyLDcgQEAKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnA7CiAKICNpZmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwotCXBhZGRyID0gbG1iX2FsbG9jX25pZChzaXplb2Yoc3RydWN0IHBnbGlzdF9kYXRhKSwKKwlwYWRkciA9IG1lbWJsb2NrX2FsbG9jX25pZChzaXplb2Yoc3RydWN0IHBnbGlzdF9kYXRhKSwKIAkJCSAgICAgIFNNUF9DQUNIRV9CWVRFUywgbmlkLCBuaWRfcmFuZ2UpOwogCWlmICghcGFkZHIpIHsKIAkJcHJvbV9wcmludGYoIkNhbm5vdCBhbGxvY2F0ZSBwZ2xpc3RfZGF0YSBmb3IgbmlkWyVkXVxuIiwgbmlkKTsKQEAgLTg0Myw3ICs4NDMsNyBAQAogCWlmIChwLT5ub2RlX3NwYW5uZWRfcGFnZXMpIHsKIAkJbnVtX3BhZ2VzID0gYm9vdG1lbV9ib290bWFwX3BhZ2VzKHAtPm5vZGVfc3Bhbm5lZF9wYWdlcyk7CiAKLQkJcGFkZHIgPSBsbWJfYWxsb2NfbmlkKG51bV9wYWdlcyA8PCBQQUdFX1NISUZULCBQQUdFX1NJWkUsIG5pZCwKKwkJcGFkZHIgPSBtZW1ibG9ja19hbGxvY19uaWQobnVtX3BhZ2VzIDw8IFBBR0VfU0hJRlQsIFBBR0VfU0laRSwgbmlkLAogCQkJCSAgICAgIG5pZF9yYW5nZSk7CiAJCWlmICghcGFkZHIpIHsKIAkJCXByb21fcHJpbnRmKCJDYW5ub3QgYWxsb2NhdGUgYm9vdG1hcCBmb3IgbmlkWyVkXVxuIiwKQEAgLTk3NCwxMSArOTc0LDExIEBACiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbG1iLm1lbW9yeS5jbnQ7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIHNpemUgPSBsbWJfc2l6ZV9ieXRlcygmbG1iLm1lbW9yeSwgaSk7CisJZm9yIChpID0gMDsgaSA8IG1lbWJsb2NrLm1lbW9yeS5jbnQ7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIHNpemUgPSBtZW1ibG9ja19zaXplX2J5dGVzKCZtZW1ibG9jay5tZW1vcnksIGkpOwogCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CiAKLQkJc3RhcnQgPSBsbWIubWVtb3J5LnJlZ2lvbltpXS5iYXNlOworCQlzdGFydCA9IG1lbWJsb2NrLm1lbW9yeS5yZWdpb25baV0uYmFzZTsKIAkJZW5kID0gc3RhcnQgKyBzaXplOwogCQl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKIAkJCXVuc2lnbmVkIGxvbmcgdGhpc19lbmQ7CkBAIC0xMDEwLDcgKzEwMTAsNyBAQAogCWlmICghY291bnQpCiAJCXJldHVybiAtRU5PRU5UOwogCi0JcGFkZHIgPSBsbWJfYWxsb2MoY291bnQgKiBzaXplb2Yoc3RydWN0IG1kZXNjX21sZ3JvdXApLAorCXBhZGRyID0gbWVtYmxvY2tfYWxsb2MoY291bnQgKiBzaXplb2Yoc3RydWN0IG1kZXNjX21sZ3JvdXApLAogCQkJICBTTVBfQ0FDSEVfQllURVMpOwogCWlmICghcGFkZHIpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTA1MSw3ICsxMDUxLDcgQEAKIAlpZiAoIWNvdW50KQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCXBhZGRyID0gbG1iX2FsbG9jKGNvdW50ICogc2l6ZW9mKHN0cnVjdCBtZGVzY19tYmxvY2spLAorCXBhZGRyID0gbWVtYmxvY2tfYWxsb2MoY291bnQgKiBzaXplb2Yoc3RydWN0IG1kZXNjX21ibG9jayksCiAJCQkgIFNNUF9DQUNIRV9CWVRFUyk7CiAJaWYgKCFwYWRkcikKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMjc5LDggKzEyNzksOCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgYm9vdG1lbV9pbml0X25vbm51bWEodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIHRvcF9vZl9yYW0gPSBsbWJfZW5kX29mX0RSQU0oKTsKLQl1bnNpZ25lZCBsb25nIHRvdGFsX3JhbSA9IGxtYl9waHlzX21lbV9zaXplKCk7CisJdW5zaWduZWQgbG9uZyB0b3Bfb2ZfcmFtID0gbWVtYmxvY2tfZW5kX29mX0RSQU0oKTsKKwl1bnNpZ25lZCBsb25nIHRvdGFsX3JhbSA9IG1lbWJsb2NrX3BoeXNfbWVtX3NpemUoKTsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCW51bWFkYmcoImJvb3RtZW1faW5pdF9ub25udW1hKClcbiIpOwpAQCAtMTI5MiwxNSArMTI5MiwxNSBAQAogCiAJaW5pdF9ub2RlX21hc2tzX25vbm51bWEoKTsKIAotCWZvciAoaSA9IDA7IGkgPCBsbWIubWVtb3J5LmNudDsgaSsrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGxtYl9zaXplX2J5dGVzKCZsbWIubWVtb3J5LCBpKTsKKwlmb3IgKGkgPSAwOyBpIDwgbWVtYmxvY2subWVtb3J5LmNudDsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IG1lbWJsb2NrX3NpemVfYnl0ZXMoJm1lbWJsb2NrLm1lbW9yeSwgaSk7CiAJCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuOwogCiAJCWlmICghc2l6ZSkKIAkJCWNvbnRpbnVlOwogCi0JCXN0YXJ0X3BmbiA9IGxtYi5tZW1vcnkucmVnaW9uW2ldLmJhc2UgPj4gUEFHRV9TSElGVDsKLQkJZW5kX3BmbiA9IHN0YXJ0X3BmbiArIGxtYl9zaXplX3BhZ2VzKCZsbWIubWVtb3J5LCBpKTsKKwkJc3RhcnRfcGZuID0gbWVtYmxvY2subWVtb3J5LnJlZ2lvbltpXS5iYXNlID4+IFBBR0VfU0hJRlQ7CisJCWVuZF9wZm4gPSBzdGFydF9wZm4gKyBtZW1ibG9ja19zaXplX3BhZ2VzKCZtZW1ibG9jay5tZW1vcnksIGkpOwogCQlhZGRfYWN0aXZlX3JhbmdlKDAsIHN0YXJ0X3BmbiwgZW5kX3Bmbik7CiAJfQogCkBAIC0xMzM4LDkgKzEzMzgsOSBAQAogCiAJbnVtYWRiZygiICB0cmltX3Jlc2VydmVkX2luX25vZGUoJWQpXG4iLCBuaWQpOwogCi0JZm9yIChpID0gMDsgaSA8IGxtYi5yZXNlcnZlZC5jbnQ7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gbG1iLnJlc2VydmVkLnJlZ2lvbltpXS5iYXNlOwotCQl1bnNpZ25lZCBsb25nIHNpemUgPSBsbWJfc2l6ZV9ieXRlcygmbG1iLnJlc2VydmVkLCBpKTsKKwlmb3IgKGkgPSAwOyBpIDwgbWVtYmxvY2sucmVzZXJ2ZWQuY250OyBpKyspIHsKKwkJdW5zaWduZWQgbG9uZyBzdGFydCA9IG1lbWJsb2NrLnJlc2VydmVkLnJlZ2lvbltpXS5iYXNlOworCQl1bnNpZ25lZCBsb25nIHNpemUgPSBtZW1ibG9ja19zaXplX2J5dGVzKCZtZW1ibG9jay5yZXNlcnZlZCwgaSk7CiAJCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBzaXplOwogCiAJCXJlc2VydmVfcmFuZ2VfaW5fbm9kZShuaWQsIHN0YXJ0LCBlbmQpOwpAQCAtMTM4NCw3ICsxMzg0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGVuZF9wZm47CiAJaW50IG5pZDsKIAotCWVuZF9wZm4gPSBsbWJfZW5kX29mX0RSQU0oKSA+PiBQQUdFX1NISUZUOworCWVuZF9wZm4gPSBtZW1ibG9ja19lbmRfb2ZfRFJBTSgpID4+IFBBR0VfU0hJRlQ7CiAJbWF4X3BmbiA9IG1heF9sb3dfcGZuID0gZW5kX3BmbjsKIAltaW5fbG93X3BmbiA9IChwaHlzX2Jhc2UgPj4gUEFHRV9TSElGVCk7CiAKQEAgLTE3MzQsNyArMTczNCw3IEBACiAJCXN1bjR2X2t0c2JfaW5pdCgpOwogCX0KIAotCWxtYl9pbml0KCk7CisJbWVtYmxvY2tfaW5pdCgpOwogCiAJLyogRmluZCBhdmFpbGFibGUgcGh5c2ljYWwgbWVtb3J5Li4uCiAJICoKQEAgLTE3NTIsMTcgKzE3NTIsMTcgQEAKIAlwaHlzX2Jhc2UgPSAweGZmZmZmZmZmZmZmZmZmZmZVTDsKIAlmb3IgKGkgPSAwOyBpIDwgcGF2YWlsX2VudHM7IGkrKykgewogCQlwaHlzX2Jhc2UgPSBtaW4ocGh5c19iYXNlLCBwYXZhaWxbaV0ucGh5c19hZGRyKTsKLQkJbG1iX2FkZChwYXZhaWxbaV0ucGh5c19hZGRyLCBwYXZhaWxbaV0ucmVnX3NpemUpOworCQltZW1ibG9ja19hZGQocGF2YWlsW2ldLnBoeXNfYWRkciwgcGF2YWlsW2ldLnJlZ19zaXplKTsKIAl9CiAKLQlsbWJfcmVzZXJ2ZShrZXJuX2Jhc2UsIGtlcm5fc2l6ZSk7CisJbWVtYmxvY2tfcmVzZXJ2ZShrZXJuX2Jhc2UsIGtlcm5fc2l6ZSk7CiAKIAlmaW5kX3JhbWRpc2socGh5c19iYXNlKTsKIAotCWxtYl9lbmZvcmNlX21lbW9yeV9saW1pdChjbWRsaW5lX21lbW9yeV9zaXplKTsKKwltZW1ibG9ja19lbmZvcmNlX21lbW9yeV9saW1pdChjbWRsaW5lX21lbW9yeV9zaXplKTsKIAotCWxtYl9hbmFseXplKCk7Ci0JbG1iX2R1bXBfYWxsKCk7CisJbWVtYmxvY2tfYW5hbHl6ZSgpOworCW1lbWJsb2NrX2R1bXBfYWxsKCk7CiAKIAlzZXRfYml0KDAsIG1tdV9jb250ZXh0X2JtYXApOwogCkBAIC0xODE2LDggKzE4MTYsOCBAQAogCSAqLwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCS8qIFhYWCBVc2Ugbm9kZSBsb2NhbCBhbGxvY2F0aW9ucy4uLiBYWFggKi8KLQkJc29mdGlycV9zdGFja1tpXSA9IF9fdmEobG1iX2FsbG9jKFRIUkVBRF9TSVpFLCBUSFJFQURfU0laRSkpOwotCQloYXJkaXJxX3N0YWNrW2ldID0gX192YShsbWJfYWxsb2MoVEhSRUFEX1NJWkUsIFRIUkVBRF9TSVpFKSk7CisJCXNvZnRpcnFfc3RhY2tbaV0gPSBfX3ZhKG1lbWJsb2NrX2FsbG9jKFRIUkVBRF9TSVpFLCBUSFJFQURfU0laRSkpOworCQloYXJkaXJxX3N0YWNrW2ldID0gX192YShtZW1ibG9ja19hbGxvYyhUSFJFQURfU0laRSwgVEhSRUFEX1NJWkUpKTsKIAl9CiAKIAkvKiBTZXR1cCBib290bWVtLi4uICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2lvLXVuaXQuYyBiL2FyY2gvc3BhcmMvbW0vaW8tdW5pdC5jCmluZGV4IDAwNWU3NTguLmZjNThjM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vaW8tdW5pdC5jCisrKyBiL2FyY2gvc3BhcmMvbW0vaW8tdW5pdC5jCkBAIC0zNSw3ICszNSw3IEBACiAjZGVmaW5lIElPUEVSTSAgICAgICAgKElPVVBURV9DQUNIRSB8IElPVVBURV9XUklURSB8IElPVVBURV9WQUxJRCkKICNkZWZpbmUgTUtJT1BURShwaHlzKSBfX2lvcHRlKCgoKHBoeXMpPj40KSAmIElPVVBURV9QQUdFKSB8IElPUEVSTSkKIAotc3RhdGljIHZvaWQgX19pbml0IGlvdW5pdF9pb21tdV9pbml0KHN0cnVjdCBvZl9kZXZpY2UgKm9wKQorc3RhdGljIHZvaWQgX19pbml0IGlvdW5pdF9pb21tdV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wKQogewogCXN0cnVjdCBpb3VuaXRfc3RydWN0ICppb3VuaXQ7CiAJaW9wdGVfdCAqeHB0LCAqeHB0ZW5kOwpAQCAtNzQsNyArNzQsNyBAQAogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHA7CiAKIAlmb3JfZWFjaF9ub2RlX2J5X25hbWUoZHAsICJzYmkiKSB7Ci0JCXN0cnVjdCBvZl9kZXZpY2UgKm9wID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShkcCk7CisJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShkcCk7CiAKIAkJaW91bml0X2lvbW11X2luaXQob3ApOwogCQlvZl9wcm9wYWdhdGVfYXJjaGRhdGEob3ApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9pb21tdS5jIGIvYXJjaC9zcGFyYy9tbS9pb21tdS5jCmluZGV4IGIyZTZlNzMuLjA3ZmM2YTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vaW9tbXUuYworKysgYi9hcmNoL3NwYXJjL21tL2lvbW11LmMKQEAgLTU2LDE0ICs1NiwxNCBAQAogI2RlZmluZSBJT1BFUk0gICAgICAgIChJT1BURV9DQUNIRSB8IElPUFRFX1dSSVRFIHwgSU9QVEVfVkFMSUQpCiAjZGVmaW5lIE1LSU9QVEUocGZuLCBwZXJtKSAoKCgoKHBmbik8PDgpICYgSU9QVEVfUEFHRSkgfCAocGVybSkpICYgfklPUFRFX1dBWikKIAotc3RhdGljIHZvaWQgX19pbml0IHNidXNfaW9tbXVfaW5pdChzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKK3N0YXRpYyB2b2lkIF9faW5pdCBzYnVzX2lvbW11X2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3ApCiB7CiAJc3RydWN0IGlvbW11X3N0cnVjdCAqaW9tbXU7CiAJdW5zaWduZWQgaW50IGltcGwsIHZlcnM7CiAJdW5zaWduZWQgbG9uZyAqYml0bWFwOwogCXVuc2lnbmVkIGxvbmcgdG1wOwogCi0JaW9tbXUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW9tbXVfc3RydWN0KSwgR0ZQX0FUT01JQyk7CisJaW9tbXUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW9tbXVfc3RydWN0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpb21tdSkgewogCQlwcm9tX3ByaW50ZigiVW5hYmxlIHRvIGFsbG9jYXRlIGlvbW11IHN0cnVjdHVyZVxuIik7CiAJCXByb21faGFsdCgpOwpAQCAtMTMyLDcgKzEzMiw3IEBACiAJc3RydWN0IGRldmljZV9ub2RlICpkcDsKIAogCWZvcl9lYWNoX25vZGVfYnlfbmFtZShkcCwgImlvbW11IikgewotCQlzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUoZHApOworCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUoZHApOwogCiAJCXNidXNfaW9tbXVfaW5pdChvcCk7CiAJCW9mX3Byb3BhZ2F0ZV9hcmNoZGF0YShvcCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL3NybW11LmMgYi9hcmNoL3NwYXJjL21tL3NybW11LmMKaW5kZXggZjVmNzVhNS4uYjBiNDNhYSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9zcm1tdS5jCisrKyBiL2FyY2gvc3BhcmMvbW0vc3JtbXUuYwpAQCAtMjIxNSw4ICsyMjE1LDYgQEAKIAlCVEZJWFVQU0VUX0NBTEwocG1kX3BhZ2UsIHNybW11X3BtZF9wYWdlLCBCVEZJWFVQQ0FMTF9OT1JNKTsKIAlCVEZJWFVQU0VUX0NBTEwocGdkX3BhZ2VfdmFkZHIsIHNybW11X3BnZF9wYWdlLCBCVEZJWFVQQ0FMTF9OT1JNKTsKIAotCUJURklYVVBTRVRfU0VUSEkobm9uZV9tYXNrLCAweEYwMDAwMDAwKTsKLQogCUJURklYVVBTRVRfQ0FMTChwdGVfcHJlc2VudCwgc3JtbXVfcHRlX3ByZXNlbnQsIEJURklYVVBDQUxMX05PUk0pOwogCUJURklYVVBTRVRfQ0FMTChwdGVfY2xlYXIsIHNybW11X3B0ZV9jbGVhciwgQlRGSVhVUENBTExfU1dBUE8wRzApOwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL3N1bjRjLmMgYi9hcmNoL3NwYXJjL21tL3N1bjRjLmMKaW5kZXggY2YzODg0Ni4uNDI4OWY5MCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9zdW40Yy5jCisrKyBiL2FyY2gvc3BhcmMvbW0vc3VuNGMuYwpAQCAtMjA4Nyw5ICsyMDg3LDYgQEAKIAogCUJURklYVVBTRVRfQ0FMTChzZXRfcHRlLCBzdW40Y19zZXRfcHRlLCBCVEZJWFVQQ0FMTF9TVE8xTzApOwogCi0JLyogVGhlIDIuNC4xOCBjb2RlIGRvZXMgbm90IHNldCB0aGlzIG9uIHN1bjRjLCBob3cgZG9lcyBpdCB3b3JrPyBYWFggKi8KLQkvKiBCVEZJWFVQU0VUX1NFVEhJKG5vbmVfbWFzaywgMHgwMDAwMDAwMCk7ICovCS8qIERlZmF1bHRzIHRvIHplcm8/ICovCi0KIAlCVEZJWFVQU0VUX0NBTEwocHRlX3Bmbiwgc3VuNGNfcHRlX3BmbiwgQlRGSVhVUENBTExfTk9STSk7CiAjaWYgMCAvKiBQQUdFX1NISUZUIDw9IDEyICovIC8qIEVlay4gSW52ZXN0aWdhdGUuIFhYWCAqLwogCUJURklYVVBTRVRfQ0FMTChwbWRfcGFnZSwgc3VuNGNfcG1kX3BhZ2UsIEJURklYVVBDQUxMX0FORE5JTlQoUEFHRV9TSVpFIC0gMSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9LY29uZmlnLmNvbW1vbiBiL2FyY2gvdW0vS2NvbmZpZy5jb21tb24KaW5kZXggMGQyMDdlNy4uN2M4ZTI3NyAxMDA2NDQKLS0tIGEvYXJjaC91bS9LY29uZmlnLmNvbW1vbgorKysgYi9hcmNoL3VtL0tjb25maWcuY29tbW9uCkBAIC01NSwxMCArNTUsNiBAQAogCWRlZmF1bHQgeQogCWRlcGVuZHMgb24gQlVHCiAKLWNvbmZpZyBHRU5FUklDX1RJTUUKLQlib29sCi0JZGVmYXVsdCB5Ci0KIGNvbmZpZyBHRU5FUklDX0NMT0NLRVZFTlRTCiAJYm9vbAogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYwppbmRleCBmMDUzNzI2Li4yYWIyMzNiIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYwpAQCAtMjUsMTEgKzI1LDYgQEAKICNpbmNsdWRlICJuZXRfa2Vybi5oIgogI2luY2x1ZGUgIm5ldF91c2VyLmgiCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZXRoZXJfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgKmFkZHIpCi17Ci0JbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHIsIEVUSF9BTEVOKTsKLX0KLQogI2RlZmluZSBEUklWRVJfTkFNRSAidW1sLW5ldGRldiIKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhvcGVuZWRfbG9jayk7CkBAIC0yNjYsNyArMjYxLDcgQEAKIAlzdHJ1Y3Qgc29ja2FkZHIgKmh3YWRkciA9IGFkZHI7CiAKIAlzcGluX2xvY2tfaXJxKCZscC0+bG9jayk7Ci0Jc2V0X2V0aGVyX21hYyhkZXYsIGh3YWRkci0+c2FfZGF0YSk7CisJZXRoX21hY19hZGRyKGRldiwgaHdhZGRyLT5zYV9kYXRhKTsKIAlzcGluX3VubG9ja19pcnEoJmxwLT5sb2NrKTsKIAogCXJldHVybiAwOwpAQCAtMzgwLDcgKzM3NSw2IEBACiAJLm5kb190eF90aW1lb3V0IAk9IHVtbF9uZXRfdHhfdGltZW91dCwKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHVtbF9uZXRfc2V0X21hYywKIAkubmRvX2NoYW5nZV9tdHUgCT0gdW1sX25ldF9jaGFuZ2VfbXR1LAotCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIH07CiAKQEAgLTQ3OCw3ICs0NzIsNyBAQAogCSAgICAoKCp0cmFuc3BvcnQtPnVzZXItPmluaXQpKCZscC0+dXNlciwgZGV2KSAhPSAwKSkKIAkJZ290byBvdXRfdW5yZWdpc3RlcjsKIAotCXNldF9ldGhlcl9tYWMoZGV2LCBkZXZpY2UtPm1hYyk7CisJZXRoX21hY19hZGRyKGRldiwgZGV2aWNlLT5tYWMpOwogCWRldi0+bXR1ID0gdHJhbnNwb3J0LT51c2VyLT5tdHU7CiAJZGV2LT5uZXRkZXZfb3BzID0gJnVtbF9uZXRkZXZfb3BzOwogCWRldi0+ZXRodG9vbF9vcHMgPSAmdW1sX25ldF9ldGh0b29sX29wczsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaAppbmRleCAwODRkZTRhLi4wMDMyZjkyIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oCkBAIC02MCw3ICs2MCw3IEBACiAJc2V0X3B1ZChwdWQsIF9fcHVkKF9QQUdFX1RBQkxFICsgX19wYShwbWQpKSkKIAogI2lmZGVmIENPTkZJR182NEJJVAotI2RlZmluZSBzZXRfcHVkKHB1ZHB0ciwgcHVkdmFsKSBzZXRfNjRiaXQoKHBoeXNfdCAqKSAocHVkcHRyKSwgcHVkX3ZhbChwdWR2YWwpKQorI2RlZmluZSBzZXRfcHVkKHB1ZHB0ciwgcHVkdmFsKSBzZXRfNjRiaXQoKHU2NCAqKSAocHVkcHRyKSwgcHVkX3ZhbChwdWR2YWwpKQogI2Vsc2UKICNkZWZpbmUgc2V0X3B1ZChwdWRwdHIsIHB1ZHZhbCkgKCoocHVkcHRyKSA9IChwdWR2YWwpKQogI2VuZGlmCkBAIC03Myw3ICs3Myw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgcGdkX21rdXB0b2RhdGUocGdkX3QgcGdkKSB7IHBnZF92YWwocGdkKSAmPSB+X1BBR0VfTkVXUEFHRTsgfQogCiAjaWZkZWYgQ09ORklHXzY0QklUCi0jZGVmaW5lIHNldF9wbWQocG1kcHRyLCBwbWR2YWwpIHNldF82NGJpdCgocGh5c190ICopIChwbWRwdHIpLCBwbWRfdmFsKHBtZHZhbCkpCisjZGVmaW5lIHNldF9wbWQocG1kcHRyLCBwbWR2YWwpIHNldF82NGJpdCgodTY0ICopIChwbWRwdHIpLCBwbWRfdmFsKHBtZHZhbCkpCiAjZWxzZQogI2RlZmluZSBzZXRfcG1kKHBtZHB0ciwgcG1kdmFsKSAoKihwbWRwdHIpID0gKHBtZHZhbCkpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3RpbWUuYyBiL2FyY2gvdW0va2VybmVsL3RpbWUuYwppbmRleCBjOGI5YzQ2Li5hMDhkOWZhIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvdGltZS5jCkBAIC0xMDIsMTYgKzEwMiwxNiBAQAogCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmaXRpbWVyX2Nsb2NrZXZlbnQpOwogfQogCit2b2lkIHJlYWRfcGVyc2lzdGVudF9jbG9jayhzdHJ1Y3QgdGltZXNwZWMgKnRzKQoreworCWxvbmcgbG9uZyBuc2VjcyA9IG9zX25zZWNzKCk7CisKKwlzZXRfbm9ybWFsaXplZF90aW1lc3BlYyh0cywgbnNlY3MgLyBOU0VDX1BFUl9TRUMsCisJCQkJbnNlY3MgJSBOU0VDX1BFUl9TRUMpOworfQorCiB2b2lkIF9faW5pdCB0aW1lX2luaXQodm9pZCkKIHsKLQlsb25nIGxvbmcgbnNlY3M7Ci0KIAl0aW1lcl9pbml0KCk7Ci0KLQluc2VjcyA9IG9zX25zZWNzKCk7Ci0Jc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJndhbGxfdG9fbW9ub3RvbmljLCAtbnNlY3MgLyBOU0VDX1BFUl9TRUMsCi0JCQkJLW5zZWNzICUgTlNFQ19QRVJfU0VDKTsKLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmeHRpbWUsIG5zZWNzIC8gTlNFQ19QRVJfU0VDLAotCQkJCW5zZWNzICUgTlNFQ19QRVJfU0VDKTsKIAlsYXRlX3RpbWVfaW5pdCA9IHNldHVwX2l0aW1lcjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IGRjYjA1OTMuLmJhYTM0ZTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtNTUsNiArNTUsNyBAQAogCXNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlQKIAlzZWxlY3QgSEFWRV9NSVhFRF9CUkVBS1BPSU5UU19SRUdTCiAJc2VsZWN0IFBFUkZfRVZFTlRTCisJc2VsZWN0IEhBVkVfUEVSRl9FVkVOVFNfTk1JCiAJc2VsZWN0IEFOT05fSU5PREVTCiAJc2VsZWN0IEhBVkVfQVJDSF9LTUVNQ0hFQ0sKIAlzZWxlY3QgSEFWRV9VU0VSX1JFVFVSTl9OT1RJRklFUgpAQCAtNzIsOSArNzMsNiBAQAogCWRlZmF1bHQgImFyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWciIGlmIFg4Nl8zMgogCWRlZmF1bHQgImFyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZyIgaWYgWDg2XzY0CiAKLWNvbmZpZyBHRU5FUklDX1RJTUUKLQlkZWZfYm9vbCB5Ci0KIGNvbmZpZyBHRU5FUklDX0NNT1NfVVBEQVRFCiAJZGVmX2Jvb2wgeQogCkBAIC0yMDQ2LDcgKzIwNDQsNyBAQAogCiBjb25maWcgU0N4MjAwSFJfVElNRVIKIAl0cmlzdGF0ZSAiTmF0U2VtaSBTQ3gyMDAgMjdNSHogSGlnaC1SZXNvbHV0aW9uIFRpbWVyIFN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTQ3gyMDAgJiYgR0VORVJJQ19USU1FCisJZGVwZW5kcyBvbiBTQ3gyMDAKIAlkZWZhdWx0IHkKIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBwcm92aWRlcyBhIGNsb2Nrc291cmNlIGJ1aWx0IHVwb24gdGhlIG9uLWNoaXAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3g4Ni9ib290L01ha2VmaWxlCmluZGV4IGVjNzQ5YzIuLmY3Y2IwODYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvYm9vdC9NYWtlZmlsZQpAQCAtMjYsMTAgKzI2LDEwIEBACiB0YXJnZXRzCQkrPSBmZGltYWdlIGZkaW1hZ2UxNDQgZmRpbWFnZTI4OCBpbWFnZS5pc28gbXRvb2xzLmNvbmYKIHN1YmRpci0JCTo9IGNvbXByZXNzZWQKIAotc2V0dXAteQkJKz0gYTIwLm8gYmlvc2NhbGwubyBjbWRsaW5lLm8gY29weS5vIGNwdS5vIGNwdWNoZWNrLm8gZWRkLm8KLXNldHVwLXkJCSs9IGhlYWRlci5vIG1haW4ubyBtY2EubyBtZW1vcnkubyBwbS5vIHBtanVtcC5vCi1zZXR1cC15CQkrPSBwcmludGYubyByZWdzLm8gc3RyaW5nLm8gdHR5Lm8gdmlkZW8ubyB2aWRlby1tb2RlLm8KLXNldHVwLXkJCSs9IHZlcnNpb24ubworc2V0dXAteQkJKz0gYTIwLm8gYmlvc2NhbGwubyBjbWRsaW5lLm8gY29weS5vIGNwdS5vIGNwdWNoZWNrLm8KK3NldHVwLXkJCSs9IGVhcmx5X3NlcmlhbF9jb25zb2xlLm8gZWRkLm8gaGVhZGVyLm8gbWFpbi5vIG1jYS5vIG1lbW9yeS5vCitzZXR1cC15CQkrPSBwbS5vIHBtanVtcC5vIHByaW50Zi5vIHJlZ3MubyBzdHJpbmcubyB0dHkubyB2aWRlby5vCitzZXR1cC15CQkrPSB2aWRlby1tb2RlLm8gdmVyc2lvbi5vCiBzZXR1cC0kKENPTkZJR19YODZfQVBNX0JPT1QpICs9IGFwbS5vCiAKICMgVGhlIGxpbmsgb3JkZXIgb2YgdGhlIHZpZGVvLSoubyBtb2R1bGVzIGNhbiBtYXR0ZXIuICBJbiBwYXJ0aWN1bGFyLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9ib290LmggYi9hcmNoL3g4Ni9ib290L2Jvb3QuaAppbmRleCA5ODIzOWQyLi5jNzA5M2JkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2Jvb3QuaAorKysgYi9hcmNoL3g4Ni9ib290L2Jvb3QuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgImJpdG9wcy5oIgogI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1mbGFncy5oPgorI2luY2x1ZGUgImN0eXBlLmgiCiAKIC8qIFVzZWZ1bCBtYWNyb3MgKi8KICNkZWZpbmUgQlVJTERfQlVHX09OKGNvbmRpdGlvbikgKCh2b2lkKXNpemVvZihjaGFyWzEgLSAyKiEhKGNvbmRpdGlvbildKSkKQEAgLTM3LDYgKzM4LDggQEAKIGV4dGVybiBzdHJ1Y3Qgc2V0dXBfaGVhZGVyIGhkcjsKIGV4dGVybiBzdHJ1Y3QgYm9vdF9wYXJhbXMgYm9vdF9wYXJhbXM7CiAKKyNkZWZpbmUgY3B1X3JlbGF4KCkJYXNtIHZvbGF0aWxlKCJyZXA7IG5vcCIpCisKIC8qIEJhc2ljIHBvcnQgSS9PICovCiBzdGF0aWMgaW5saW5lIHZvaWQgb3V0Yih1OCB2LCB1MTYgcG9ydCkKIHsKQEAgLTE5OCwxMSArMjAxLDYgQEAKIAlyZXR1cm4gZGlmZjsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgaXNkaWdpdChpbnQgY2gpCi17Ci0JcmV0dXJuIChjaCA+PSAnMCcpICYmIChjaCA8PSAnOScpOwotfQotCiAvKiBIZWFwIC0tIGF2YWlsYWJsZSBmb3IgZHluYW1pYyBsaXN0cy4gKi8KIGV4dGVybiBjaGFyIF9lbmRbXTsKIGV4dGVybiBjaGFyICpIRUFQOwpAQCAtMjg3LDggKzI4NSwxOCBAQAogdm9pZCBpbnRjYWxsKHU4IGludF9ubywgY29uc3Qgc3RydWN0IGJpb3NyZWdzICppcmVnLCBzdHJ1Y3QgYmlvc3JlZ3MgKm9yZWcpOwogCiAvKiBjbWRsaW5lLmMgKi8KLWludCBjbWRsaW5lX2ZpbmRfb3B0aW9uKGNvbnN0IGNoYXIgKm9wdGlvbiwgY2hhciAqYnVmZmVyLCBpbnQgYnVmc2l6ZSk7Ci1pbnQgY21kbGluZV9maW5kX29wdGlvbl9ib29sKGNvbnN0IGNoYXIgKm9wdGlvbik7CitpbnQgX19jbWRsaW5lX2ZpbmRfb3B0aW9uKHUzMiBjbWRsaW5lX3B0ciwgY29uc3QgY2hhciAqb3B0aW9uLCBjaGFyICpidWZmZXIsIGludCBidWZzaXplKTsKK2ludCBfX2NtZGxpbmVfZmluZF9vcHRpb25fYm9vbCh1MzIgY21kbGluZV9wdHIsIGNvbnN0IGNoYXIgKm9wdGlvbik7CitzdGF0aWMgaW5saW5lIGludCBjbWRsaW5lX2ZpbmRfb3B0aW9uKGNvbnN0IGNoYXIgKm9wdGlvbiwgY2hhciAqYnVmZmVyLCBpbnQgYnVmc2l6ZSkKK3sKKwlyZXR1cm4gX19jbWRsaW5lX2ZpbmRfb3B0aW9uKGJvb3RfcGFyYW1zLmhkci5jbWRfbGluZV9wdHIsIG9wdGlvbiwgYnVmZmVyLCBidWZzaXplKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY21kbGluZV9maW5kX29wdGlvbl9ib29sKGNvbnN0IGNoYXIgKm9wdGlvbikKK3sKKwlyZXR1cm4gX19jbWRsaW5lX2ZpbmRfb3B0aW9uX2Jvb2woYm9vdF9wYXJhbXMuaGRyLmNtZF9saW5lX3B0ciwgb3B0aW9uKTsKK30KKwogCiAvKiBjcHUuYywgY3B1Y2hlY2suYyAqLwogc3RydWN0IGNwdV9mZWF0dXJlcyB7CkBAIC0zMDAsNiArMzA4LDEwIEBACiBpbnQgY2hlY2tfY3B1KGludCAqY3B1X2xldmVsX3B0ciwgaW50ICpyZXFfbGV2ZWxfcHRyLCB1MzIgKiplcnJfZmxhZ3NfcHRyKTsKIGludCB2YWxpZGF0ZV9jcHUodm9pZCk7CiAKKy8qIGVhcmx5X3NlcmlhbF9jb25zb2xlLmMgKi8KK2V4dGVybiBpbnQgZWFybHlfc2VyaWFsX2Jhc2U7Cit2b2lkIGNvbnNvbGVfaW5pdCh2b2lkKTsKKwogLyogZWRkLmMgKi8KIHZvaWQgcXVlcnlfZWRkKHZvaWQpOwogCkBAIC0zMjksOCArMzQxLDEwIEBACiAKIC8qIHN0cmluZy5jICovCiBpbnQgc3RyY21wKGNvbnN0IGNoYXIgKnN0cjEsIGNvbnN0IGNoYXIgKnN0cjIpOworaW50IHN0cm5jbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0LCBzaXplX3QgY291bnQpOwogc2l6ZV90IHN0cm5sZW4oY29uc3QgY2hhciAqcywgc2l6ZV90IG1heGxlbik7CiB1bnNpZ25lZCBpbnQgYXRvdShjb25zdCBjaGFyICpzKTsKK3Vuc2lnbmVkIGxvbmcgbG9uZyBzaW1wbGVfc3RydG91bGwoY29uc3QgY2hhciAqY3AsIGNoYXIgKiplbmRwLCB1bnNpZ25lZCBpbnQgYmFzZSk7CiAKIC8qIHR0eS5jICovCiB2b2lkIHB1dHMoY29uc3QgY2hhciAqKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY21kbGluZS5jIGIvYXJjaC94ODYvYm9vdC9jbWRsaW5lLmMKaW5kZXggYTFkMzU2My4uNmIzYjZmNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jbWRsaW5lLmMKKysrIGIvYXJjaC94ODYvYm9vdC9jbWRsaW5lLmMKQEAgLTI3LDkgKzI3LDggQEAKICAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgYXJndW1lbnQgKHJlZ2FyZGxlc3Mgb2YgaWYgaXQgd2FzCiAgKiB0cnVuY2F0ZWQgdG8gZml0IGluIHRoZSBidWZmZXIpLCBvciAtMSBvbiBub3QgZm91bmQuCiAgKi8KLWludCBjbWRsaW5lX2ZpbmRfb3B0aW9uKGNvbnN0IGNoYXIgKm9wdGlvbiwgY2hhciAqYnVmZmVyLCBpbnQgYnVmc2l6ZSkKK2ludCBfX2NtZGxpbmVfZmluZF9vcHRpb24odTMyIGNtZGxpbmVfcHRyLCBjb25zdCBjaGFyICpvcHRpb24sIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZnNpemUpCiB7Ci0JdTMyIGNtZGxpbmVfcHRyID0gYm9vdF9wYXJhbXMuaGRyLmNtZF9saW5lX3B0cjsKIAlhZGRyX3QgY3B0cjsKIAljaGFyIGM7CiAJaW50IGxlbiA9IC0xOwpAQCAtMTAwLDkgKzk5LDggQEAKICAqIFJldHVybnMgdGhlIHBvc2l0aW9uIG9mIHRoYXQgb3B0aW9uIChzdGFydHMgY291bnRpbmcgd2l0aCAxKQogICogb3IgMCBvbiBub3QgZm91bmQKICAqLwotaW50IGNtZGxpbmVfZmluZF9vcHRpb25fYm9vbChjb25zdCBjaGFyICpvcHRpb24pCitpbnQgX19jbWRsaW5lX2ZpbmRfb3B0aW9uX2Jvb2wodTMyIGNtZGxpbmVfcHRyLCBjb25zdCBjaGFyICpvcHRpb24pCiB7Ci0JdTMyIGNtZGxpbmVfcHRyID0gYm9vdF9wYXJhbXMuaGRyLmNtZF9saW5lX3B0cjsKIAlhZGRyX3QgY3B0cjsKIAljaGFyIGM7CiAJaW50IHBvcyA9IDAsIHdzdGFydCA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKaW5kZXggZmJiNDdkYS4uMGMyMjk1NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKICMgY3JlYXRlIGEgY29tcHJlc3NlZCB2bWxpbnV4IGltYWdlIGZyb20gdGhlIG9yaWdpbmFsIHZtbGludXgKICMKIAotdGFyZ2V0cyA6PSB2bWxpbnV4LmxkcyB2bWxpbnV4IHZtbGludXguYmluIHZtbGludXguYmluLmd6IHZtbGludXguYmluLmJ6MiB2bWxpbnV4LmJpbi5sem1hIHZtbGludXguYmluLmx6byBoZWFkXyQoQklUUykubyBtaXNjLm8gcGlnZ3kubwordGFyZ2V0cyA6PSB2bWxpbnV4LmxkcyB2bWxpbnV4IHZtbGludXguYmluIHZtbGludXguYmluLmd6IHZtbGludXguYmluLmJ6MiB2bWxpbnV4LmJpbi5sem1hIHZtbGludXguYmluLmx6byBoZWFkXyQoQklUUykubyBtaXNjLm8gc3RyaW5nLm8gY21kbGluZS5vIGVhcmx5X3NlcmlhbF9jb25zb2xlLm8gcGlnZ3kubwogCiBLQlVJTERfQ0ZMQUdTIDo9IC1tJChCSVRTKSAtRF9fS0VSTkVMX18gJChMSU5VWF9JTkNMVURFKSAtTzIKIEtCVUlMRF9DRkxBR1MgKz0gLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZQSUMKQEAgLTIzLDcgKzIzLDcgQEAKIAogaG9zdHByb2dzLXkJOj0gbWtwaWdneQogCi0kKG9iaikvdm1saW51eDogJChvYmopL3ZtbGludXgubGRzICQob2JqKS9oZWFkXyQoQklUUykubyAkKG9iaikvbWlzYy5vICQob2JqKS9waWdneS5vIEZPUkNFCiskKG9iaikvdm1saW51eDogJChvYmopL3ZtbGludXgubGRzICQob2JqKS9oZWFkXyQoQklUUykubyAkKG9iaikvbWlzYy5vICQob2JqKS9zdHJpbmcubyAkKG9iaikvY21kbGluZS5vICQob2JqKS9lYXJseV9zZXJpYWxfY29uc29sZS5vICQob2JqKS9waWdneS5vIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsbGQpCiAJQDoKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2NtZGxpbmUuYyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9jbWRsaW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I2MmY3OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9jbWRsaW5lLmMKQEAgLTAsMCArMSwyMSBAQAorI2luY2x1ZGUgIm1pc2MuaCIKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZnM7CitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ZzKHVuc2lnbmVkIGxvbmcgc2VnKQoreworCWZzID0gc2VnIDw8IDQ7ICAvKiBzaGlmdCBpdCBiYWNrICovCit9Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgYWRkcl90Oworc3RhdGljIGlubGluZSBjaGFyIHJkZnM4KGFkZHJfdCBhZGRyKQoreworCXJldHVybiAqKChjaGFyICopKGZzICsgYWRkcikpOworfQorI2luY2x1ZGUgIi4uL2NtZGxpbmUuYyIKK2ludCBjbWRsaW5lX2ZpbmRfb3B0aW9uKGNvbnN0IGNoYXIgKm9wdGlvbiwgY2hhciAqYnVmZmVyLCBpbnQgYnVmc2l6ZSkKK3sKKwlyZXR1cm4gX19jbWRsaW5lX2ZpbmRfb3B0aW9uKHJlYWxfbW9kZS0+aGRyLmNtZF9saW5lX3B0ciwgb3B0aW9uLCBidWZmZXIsIGJ1ZnNpemUpOworfQoraW50IGNtZGxpbmVfZmluZF9vcHRpb25fYm9vbChjb25zdCBjaGFyICpvcHRpb24pCit7CisJcmV0dXJuIF9fY21kbGluZV9maW5kX29wdGlvbl9ib29sKHJlYWxfbW9kZS0+aGRyLmNtZF9saW5lX3B0ciwgb3B0aW9uKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9lYXJseV9zZXJpYWxfY29uc29sZS5jIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2Vhcmx5X3NlcmlhbF9jb25zb2xlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYxZTgxZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9lYXJseV9zZXJpYWxfY29uc29sZS5jCkBAIC0wLDAgKzEsNSBAQAorI2luY2x1ZGUgIm1pc2MuaCIKKworaW50IGVhcmx5X3NlcmlhbF9iYXNlOworCisjaW5jbHVkZSAiLi4vZWFybHlfc2VyaWFsX2NvbnNvbGUuYyIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzMyLlMgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF8zMi5TCmluZGV4IGY1NDNiNzAuLjY3YTY1NWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzMyLlMKKysrIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfMzIuUwpAQCAtMTI0LDYgKzEyNCwxOSBAQAogCXJlcAlzdG9zbAogCiAvKgorICogQWRqdXN0IG91ciBvd24gR09UCisgKi8KKwlsZWFsCV9nb3QoJWVieCksICVlZHgKKwlsZWFsCV9lZ290KCVlYngpLCAlZWN4CisxOgorCWNtcGwJJWVjeCwgJWVkeAorCWphZQkyZgorCWFkZGwJJWVieCwgKCVlZHgpCisJYWRkbAkkNCwgJWVkeAorCWptcAkxYgorMjoKKworLyoKICAqIERvIHRoZSBkZWNvbXByZXNzaW9uLCBhbmQganVtcCB0byB0aGUgbmV3IGtlcm5lbC4uCiAgKi8KIAlsZWFsCXpfZXh0cmFjdF9vZmZzZXRfbmVnYXRpdmUoJWVieCksICVlYnAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzY0LlMgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF82NC5TCmluZGV4IGZhZmYwZGMuLjUyZjg1YTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzY0LlMKKysrIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfNjQuUwpAQCAtMjgwLDYgKzI4MCwxOSBAQAogCXJlcAlzdG9zcQogCiAvKgorICogQWRqdXN0IG91ciBvd24gR09UCisgKi8KKwlsZWFxCV9nb3QoJXJpcCksICVyZHgKKwlsZWFxCV9lZ290KCVyaXApLCAlcmN4CisxOgorCWNtcHEJJXJjeCwgJXJkeAorCWphZQkyZgorCWFkZHEJJXJieCwgKCVyZHgpCisJYWRkcQkkOCwgJXJkeAorCWptcAkxYgorMjoKKwkKKy8qCiAgKiBEbyB0aGUgZGVjb21wcmVzc2lvbiwgYW5kIGp1bXAgdG8gdGhlIG5ldyBrZXJuZWwuLgogICovCiAJcHVzaHEJJXJzaQkJCS8qIFNhdmUgdGhlIHJlYWwgbW9kZSBhcmd1bWVudCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuYyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKaW5kZXggNTFlMjQwNy4uOGY3YmVmOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jCkBAIC05LDIzICs5LDcgQEAKICAqIEhpZ2ggbG9hZGVkIHN0dWZmIGJ5IEhhbnMgTGVybWVuICYgV2VybmVyIEFsbWVzYmVyZ2VyLCBGZWIuIDE5OTYKICAqLwogCi0vKgotICogd2UgaGF2ZSB0byBiZSBjYXJlZnVsLCBiZWNhdXNlIG5vIGluZGlyZWN0aW9ucyBhcmUgYWxsb3dlZCBoZXJlLCBhbmQKLSAqIHBhcmF2aXJ0X29wcyBpcyBhIGtpbmQgb2Ygb25lLiBBcyBpdCB3aWxsIG9ubHkgcnVuIGluIGJhcmVtZXRhbCBhbnl3YXksCi0gKiB3ZSBqdXN0IGtlZXAgaXQgZnJvbSBoYXBwZW5pbmcKLSAqLwotI3VuZGVmIENPTkZJR19QQVJBVklSVAotI2lmZGVmIENPTkZJR19YODZfMzIKLSNkZWZpbmUgX0FTTV9YODZfREVTQ19IIDEKLSNlbmRpZgotCi0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjcmVlbl9pbmZvLmg+Ci0jaW5jbHVkZSA8bGludXgvZWxmLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9ib290Lmg+Ci0jaW5jbHVkZSA8YXNtL2Jvb3RwYXJhbS5oPgorI2luY2x1ZGUgIm1pc2MuaCIKIAogLyogV0FSTklORyEhCiAgKiBUaGlzIGNvZGUgaXMgY29tcGlsZWQgd2l0aCAtZlBJQyBhbmQgaXQgaXMgcmVsb2NhdGVkIGR5bmFtaWNhbGx5CkBAIC0xMjMsMTUgKzEwNywxMyBAQAogLyoKICAqIFRoaXMgaXMgc2V0IHVwIGJ5IHRoZSBzZXR1cC1yb3V0aW5lIGF0IGJvb3QtdGltZQogICovCi1zdGF0aWMgc3RydWN0IGJvb3RfcGFyYW1zICpyZWFsX21vZGU7CQkvKiBQb2ludGVyIHRvIHJlYWwtbW9kZSBkYXRhICovCitzdHJ1Y3QgYm9vdF9wYXJhbXMgKnJlYWxfbW9kZTsJCS8qIFBvaW50ZXIgdG8gcmVhbC1tb2RlIGRhdGEgKi8KIHN0YXRpYyBpbnQgcXVpZXQ7CitzdGF0aWMgaW50IGRlYnVnOwogCiB2b2lkICptZW1zZXQodm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTsKIHZvaWQgKm1lbWNweSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKTsKIAotc3RhdGljIHZvaWQgX19wdXRzdHIoaW50LCBjb25zdCBjaGFyICopOwotI2RlZmluZSBwdXRzdHIoX194KSAgX19wdXRzdHIoMCwgX194KQotCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogI2RlZmluZSBtZW1wdHIgbG9uZwogI2Vsc2UKQEAgLTE3MCw3ICsxNTIsMjEgQEAKIAkJdmlkbWVtW2ldID0gJyAnOwogfQogCi1zdGF0aWMgdm9pZCBfX3B1dHN0cihpbnQgZXJyb3IsIGNvbnN0IGNoYXIgKnMpCisjZGVmaW5lIFhNVFJEWSAgICAgICAgICAweDIwCisKKyNkZWZpbmUgVFhSICAgICAgICAgICAgIDAgICAgICAgLyogIFRyYW5zbWl0IHJlZ2lzdGVyIChXUklURSkgKi8KKyNkZWZpbmUgTFNSICAgICAgICAgICAgIDUgICAgICAgLyogIExpbmUgU3RhdHVzICAgICAgICAgICAgICAgKi8KK3N0YXRpYyB2b2lkIHNlcmlhbF9wdXRjaGFyKGludCBjaCkKK3sKKwl1bnNpZ25lZCB0aW1lb3V0ID0gMHhmZmZmOworCisJd2hpbGUgKChpbmIoZWFybHlfc2VyaWFsX2Jhc2UgKyBMU1IpICYgWE1UUkRZKSA9PSAwICYmIC0tdGltZW91dCkKKwkJY3B1X3JlbGF4KCk7CisKKwlvdXRiKGNoLCBlYXJseV9zZXJpYWxfYmFzZSArIFRYUik7Cit9CisKK3ZvaWQgX19wdXRzdHIoaW50IGVycm9yLCBjb25zdCBjaGFyICpzKQogewogCWludCB4LCB5LCBwb3M7CiAJY2hhciBjOwpAQCAtMTc5LDYgKzE3NSwxNCBAQAogCWlmICghZXJyb3IpCiAJCXJldHVybjsKICNlbmRpZgorCWlmIChlYXJseV9zZXJpYWxfYmFzZSkgeworCQljb25zdCBjaGFyICpzdHIgPSBzOworCQl3aGlsZSAoKnN0cikgeworCQkJaWYgKCpzdHIgPT0gJ1xuJykKKwkJCQlzZXJpYWxfcHV0Y2hhcignXHInKTsKKwkJCXNlcmlhbF9wdXRjaGFyKCpzdHIrKyk7CisJCX0KKwl9CiAKIAlpZiAocmVhbF9tb2RlLT5zY3JlZW5faW5mby5vcmlnX3ZpZGVvX21vZGUgPT0gMCAmJgogCSAgICBsaW5lcyA9PSAwICYmIGNvbHMgPT0gMCkKQEAgLTMwNSw4ICszMDksMTAgQEAKIHsKIAlyZWFsX21vZGUgPSBybW9kZTsKIAotCWlmIChyZWFsX21vZGUtPmhkci5sb2FkZmxhZ3MgJiBRVUlFVF9GTEFHKQorCWlmIChjbWRsaW5lX2ZpbmRfb3B0aW9uX2Jvb2woInF1aWV0IikpCiAJCXF1aWV0ID0gMTsKKwlpZiAoY21kbGluZV9maW5kX29wdGlvbl9ib29sKCJkZWJ1ZyIpKQorCQlkZWJ1ZyA9IDE7CiAKIAlpZiAocmVhbF9tb2RlLT5zY3JlZW5faW5mby5vcmlnX3ZpZGVvX21vZGUgPT0gNykgewogCQl2aWRtZW0gPSAoY2hhciAqKSAweGIwMDAwOwpAQCAtMzE5LDYgKzMyNSwxMCBAQAogCWxpbmVzID0gcmVhbF9tb2RlLT5zY3JlZW5faW5mby5vcmlnX3ZpZGVvX2xpbmVzOwogCWNvbHMgPSByZWFsX21vZGUtPnNjcmVlbl9pbmZvLm9yaWdfdmlkZW9fY29sczsKIAorCWNvbnNvbGVfaW5pdCgpOworCWlmIChkZWJ1ZykKKwkJcHV0c3RyKCJlYXJseSBjb25zb2xlIGluIGRlY29tcHJlc3Nfa2VybmVsXG4iKTsKKwogCWZyZWVfbWVtX3B0ciAgICAgPSBoZWFwOwkvKiBIZWFwICovCiAJZnJlZV9tZW1fZW5kX3B0ciA9IGhlYXAgKyBCT09UX0hFQVBfU0laRTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuaCBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YxOWM4MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmgKQEAgLTAsMCArMSwzOSBAQAorI2lmbmRlZiBCT09UX0NPTVBSRVNTRURfTUlTQ19ICisjZGVmaW5lIEJPT1RfQ09NUFJFU1NFRF9NSVNDX0gKKworLyoKKyAqIHdlIGhhdmUgdG8gYmUgY2FyZWZ1bCwgYmVjYXVzZSBubyBpbmRpcmVjdGlvbnMgYXJlIGFsbG93ZWQgaGVyZSwgYW5kCisgKiBwYXJhdmlydF9vcHMgaXMgYSBraW5kIG9mIG9uZS4gQXMgaXQgd2lsbCBvbmx5IHJ1biBpbiBiYXJlbWV0YWwgYW55d2F5LAorICogd2UganVzdCBrZWVwIGl0IGZyb20gaGFwcGVuaW5nCisgKi8KKyN1bmRlZiBDT05GSUdfUEFSQVZJUlQKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjZGVmaW5lIF9BU01fWDg2X0RFU0NfSCAxCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zY3JlZW5faW5mby5oPgorI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vYm9vdC5oPgorI2luY2x1ZGUgPGFzbS9ib290cGFyYW0uaD4KKworI2RlZmluZSBCT09UX0JPT1RfSAorI2luY2x1ZGUgIi4uL2N0eXBlLmgiCisKKy8qIG1pc2MuYyAqLworZXh0ZXJuIHN0cnVjdCBib290X3BhcmFtcyAqcmVhbF9tb2RlOwkJLyogUG9pbnRlciB0byByZWFsLW1vZGUgZGF0YSAqLwordm9pZCBfX3B1dHN0cihpbnQgZXJyb3IsIGNvbnN0IGNoYXIgKnMpOworI2RlZmluZSBwdXRzdHIoX194KSAgX19wdXRzdHIoMCwgX194KQorI2RlZmluZSBwdXRzKF9feCkgIF9fcHV0c3RyKDAsIF9feCkKKworLyogY21kbGluZS5jICovCitpbnQgY21kbGluZV9maW5kX29wdGlvbihjb25zdCBjaGFyICpvcHRpb24sIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZnNpemUpOworaW50IGNtZGxpbmVfZmluZF9vcHRpb25fYm9vbChjb25zdCBjaGFyICpvcHRpb24pOworCisvKiBlYXJseV9zZXJpYWxfY29uc29sZS5jICovCitleHRlcm4gaW50IGVhcmx5X3NlcmlhbF9iYXNlOwordm9pZCBjb25zb2xlX2luaXQodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3N0cmluZy5jIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3N0cmluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YjNlNjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvc3RyaW5nLmMKQEAgLTAsMCArMSwyIEBACisjaW5jbHVkZSAibWlzYy5oIgorI2luY2x1ZGUgIi4uL3N0cmluZy5jIgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLlMgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuUwppbmRleCA1ZGRhYmNlLi4zNGQwNDdjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuUwpAQCAtNDEsNiArNDEsMTIgQEAKIAkJKigucm9kYXRhLiopCiAJCV9lcm9kYXRhID0gLiA7CiAJfQorCS5nb3QgOiB7CisJCV9nb3QgPSAuOworCQlLRUVQKCooLmdvdC5wbHQpKQorCQlLRUVQKCooLmdvdCkpCisJCV9lZ290ID0gLjsKKwl9CiAJLmRhdGEgOgl7CiAJCV9kYXRhID0gLiA7CiAJCSooLmRhdGEpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2N0eXBlLmggYi9hcmNoL3g4Ni9ib290L2N0eXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVlMTM0MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2Jvb3QvY3R5cGUuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIEJPT1RfSVNESUdJVF9ICisKKyNkZWZpbmUgQk9PVF9JU0RJR0lUX0gKKworc3RhdGljIGlubGluZSBpbnQgaXNkaWdpdChpbnQgY2gpCit7CisJcmV0dXJuIChjaCA+PSAnMCcpICYmIChjaCA8PSAnOScpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc3hkaWdpdChpbnQgY2gpCit7CisJaWYgKGlzZGlnaXQoY2gpKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmICgoY2ggPj0gJ2EnKSAmJiAoY2ggPD0gJ2YnKSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gKGNoID49ICdBJykgJiYgKGNoIDw9ICdGJyk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9lYXJseV9zZXJpYWxfY29uc29sZS5jIGIvYXJjaC94ODYvYm9vdC9lYXJseV9zZXJpYWxfY29uc29sZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMGY0YjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9ib290L2Vhcmx5X3NlcmlhbF9jb25zb2xlLmMKQEAgLTAsMCArMSwxMzkgQEAKKyNpbmNsdWRlICJib290LmgiCisKKyNkZWZpbmUgREVGQVVMVF9TRVJJQUxfUE9SVCAweDNmOCAvKiB0dHlTMCAqLworCisjZGVmaW5lIFhNVFJEWSAgICAgICAgICAweDIwCisKKyNkZWZpbmUgRExBQgkJMHg4MAorCisjZGVmaW5lIFRYUiAgICAgICAgICAgICAwICAgICAgIC8qICBUcmFuc21pdCByZWdpc3RlciAoV1JJVEUpICovCisjZGVmaW5lIFJYUiAgICAgICAgICAgICAwICAgICAgIC8qICBSZWNlaXZlIHJlZ2lzdGVyICAoUkVBRCkgICovCisjZGVmaW5lIElFUiAgICAgICAgICAgICAxICAgICAgIC8qICBJbnRlcnJ1cHQgRW5hYmxlICAgICAgICAgICovCisjZGVmaW5lIElJUiAgICAgICAgICAgICAyICAgICAgIC8qICBJbnRlcnJ1cHQgSUQgICAgICAgICAgICAgICovCisjZGVmaW5lIEZDUiAgICAgICAgICAgICAyICAgICAgIC8qICBGSUZPIGNvbnRyb2wgICAgICAgICAgICAgICovCisjZGVmaW5lIExDUiAgICAgICAgICAgICAzICAgICAgIC8qICBMaW5lIGNvbnRyb2wgICAgICAgICAgICAgICovCisjZGVmaW5lIE1DUiAgICAgICAgICAgICA0ICAgICAgIC8qICBNb2RlbSBjb250cm9sICAgICAgICAgICAgICovCisjZGVmaW5lIExTUiAgICAgICAgICAgICA1ICAgICAgIC8qICBMaW5lIFN0YXR1cyAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1TUiAgICAgICAgICAgICA2ICAgICAgIC8qICBNb2RlbSBTdGF0dXMgICAgICAgICAgICAgICovCisjZGVmaW5lIERMTCAgICAgICAgICAgICAwICAgICAgIC8qICBEaXZpc29yIExhdGNoIExvdyAgICAgICAgICovCisjZGVmaW5lIERMSCAgICAgICAgICAgICAxICAgICAgIC8qICBEaXZpc29yIGxhdGNoIEhpZ2ggICAgICAgICovCisKKyNkZWZpbmUgREVGQVVMVF9CQVVEIDk2MDAKKworc3RhdGljIHZvaWQgZWFybHlfc2VyaWFsX2luaXQoaW50IHBvcnQsIGludCBiYXVkKQoreworCXVuc2lnbmVkIGNoYXIgYzsKKwl1bnNpZ25lZCBkaXZpc29yOworCisJb3V0YigweDMsIHBvcnQgKyBMQ1IpOwkvKiA4bjEgKi8KKwlvdXRiKDAsIHBvcnQgKyBJRVIpOwkvKiBubyBpbnRlcnJ1cHQgKi8KKwlvdXRiKDAsIHBvcnQgKyBGQ1IpOwkvKiBubyBmaWZvICovCisJb3V0YigweDMsIHBvcnQgKyBNQ1IpOwkvKiBEVFIgKyBSVFMgKi8KKworCWRpdmlzb3IJPSAxMTUyMDAgLyBiYXVkOworCWMgPSBpbmIocG9ydCArIExDUik7CisJb3V0YihjIHwgRExBQiwgcG9ydCArIExDUik7CisJb3V0YihkaXZpc29yICYgMHhmZiwgcG9ydCArIERMTCk7CisJb3V0YigoZGl2aXNvciA+PiA4KSAmIDB4ZmYsIHBvcnQgKyBETEgpOworCW91dGIoYyAmIH5ETEFCLCBwb3J0ICsgTENSKTsKKworCWVhcmx5X3NlcmlhbF9iYXNlID0gcG9ydDsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfZWFybHlwcmludGsodm9pZCkKK3sKKwlpbnQgYmF1ZCA9IERFRkFVTFRfQkFVRDsKKwljaGFyIGFyZ1szMl07CisJaW50IHBvcyA9IDA7CisJaW50IHBvcnQgPSAwOworCisJaWYgKGNtZGxpbmVfZmluZF9vcHRpb24oImVhcmx5cHJpbnRrIiwgYXJnLCBzaXplb2YgYXJnKSA+IDApIHsKKwkJY2hhciAqZTsKKworCQlpZiAoIXN0cm5jbXAoYXJnLCAic2VyaWFsIiwgNikpIHsKKwkJCXBvcnQgPSBERUZBVUxUX1NFUklBTF9QT1JUOworCQkJcG9zICs9IDY7CisJCX0KKworCQlpZiAoYXJnW3Bvc10gPT0gJywnKQorCQkJcG9zKys7CisKKwkJaWYgKCFzdHJuY21wKGFyZywgInR0eVMiLCA0KSkgeworCQkJc3RhdGljIGNvbnN0IGludCBiYXNlc1tdID0geyAweDNmOCwgMHgyZjggfTsKKwkJCWludCBpZHggPSAwOworCisJCQlpZiAoIXN0cm5jbXAoYXJnICsgcG9zLCAidHR5UyIsIDQpKQorCQkJCXBvcyArPSA0OworCisJCQlpZiAoYXJnW3BvcysrXSA9PSAnMScpCisJCQkJaWR4ID0gMTsKKworCQkJcG9ydCA9IGJhc2VzW2lkeF07CisJCX0KKworCQlpZiAoYXJnW3Bvc10gPT0gJywnKQorCQkJcG9zKys7CisKKwkJYmF1ZCA9IHNpbXBsZV9zdHJ0b3VsbChhcmcgKyBwb3MsICZlLCAwKTsKKwkJaWYgKGJhdWQgPT0gMCB8fCBhcmcgKyBwb3MgPT0gZSkKKwkJCWJhdWQgPSBERUZBVUxUX0JBVUQ7CisJfQorCisJaWYgKHBvcnQpCisJCWVhcmx5X3NlcmlhbF9pbml0KHBvcnQsIGJhdWQpOworfQorCisjZGVmaW5lIEJBU0VfQkFVRCAoMTg0MzIwMC8xNikKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcHJvYmVfYmF1ZChpbnQgcG9ydCkKK3sKKwl1bnNpZ25lZCBjaGFyIGxjciwgZGxsLCBkbGg7CisJdW5zaWduZWQgaW50IHF1b3Q7CisKKwlsY3IgPSBpbmIocG9ydCArIExDUik7CisJb3V0YihsY3IgfCBETEFCLCBwb3J0ICsgTENSKTsKKwlkbGwgPSBpbmIocG9ydCArIERMTCk7CisJZGxoID0gaW5iKHBvcnQgKyBETEgpOworCW91dGIobGNyLCBwb3J0ICsgTENSKTsKKwlxdW90ID0gKGRsaCA8PCA4KSB8IGRsbDsKKworCXJldHVybiBCQVNFX0JBVUQgLyBxdW90OworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9jb25zb2xlX3VhcnQ4MjUwKHZvaWQpCit7CisJY2hhciBvcHRzdHJbNjRdLCAqb3B0aW9uczsKKwlpbnQgYmF1ZCA9IERFRkFVTFRfQkFVRDsKKwlpbnQgcG9ydCA9IDA7CisKKwkvKgorCSAqIGNvbnNvbGU9dWFydDgyNTAsaW8sMHgzZjgsMTE1MjAwbjgKKwkgKiBuZWVkIHRvIG1ha2Ugc3VyZSBpdCBpcyBsYXN0IG9uZSBjb25zb2xlICEKKwkgKi8KKwlpZiAoY21kbGluZV9maW5kX29wdGlvbigiY29uc29sZSIsIG9wdHN0ciwgc2l6ZW9mIG9wdHN0cikgPD0gMCkKKwkJcmV0dXJuOworCisJb3B0aW9ucyA9IG9wdHN0cjsKKworCWlmICghc3RybmNtcChvcHRpb25zLCAidWFydDgyNTAsaW8sIiwgMTIpKQorCQlwb3J0ID0gc2ltcGxlX3N0cnRvdWxsKG9wdGlvbnMgKyAxMiwgJm9wdGlvbnMsIDApOworCWVsc2UgaWYgKCFzdHJuY21wKG9wdGlvbnMsICJ1YXJ0LGlvLCIsIDgpKQorCQlwb3J0ID0gc2ltcGxlX3N0cnRvdWxsKG9wdGlvbnMgKyA4LCAmb3B0aW9ucywgMCk7CisJZWxzZQorCQlyZXR1cm47CisKKwlpZiAob3B0aW9ucyAmJiAob3B0aW9uc1swXSA9PSAnLCcpKQorCQliYXVkID0gc2ltcGxlX3N0cnRvdWxsKG9wdGlvbnMgKyAxLCAmb3B0aW9ucywgMCk7CisJZWxzZQorCQliYXVkID0gcHJvYmVfYmF1ZChwb3J0KTsKKworCWlmIChwb3J0KQorCQllYXJseV9zZXJpYWxfaW5pdChwb3J0LCBiYXVkKTsKK30KKwordm9pZCBjb25zb2xlX2luaXQodm9pZCkKK3sKKwlwYXJzZV9lYXJseXByaW50aygpOworCisJaWYgKCFlYXJseV9zZXJpYWxfYmFzZSkKKwkJcGFyc2VfY29uc29sZV91YXJ0ODI1MCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9tYWluLmMgYi9hcmNoL3g4Ni9ib290L21haW4uYwppbmRleCAxNDAxNzJiLi40MDM1OGM4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L21haW4uYworKysgYi9hcmNoL3g4Ni9ib290L21haW4uYwpAQCAtMTMwLDYgKzEzMCwxMSBAQAogCS8qIEZpcnN0LCBjb3B5IHRoZSBib290IGhlYWRlciBpbnRvIHRoZSAiemVyb3BhZ2UiICovCiAJY29weV9ib290X3BhcmFtcygpOwogCisJLyogSW5pdGlhbGl6ZSB0aGUgZWFybHktYm9vdCBjb25zb2xlICovCisJY29uc29sZV9pbml0KCk7CisJaWYgKGNtZGxpbmVfZmluZF9vcHRpb25fYm9vbCgiZGVidWciKSkKKwkJcHV0cygiZWFybHkgY29uc29sZSBpbiBzZXR1cCBjb2RlXG4iKTsKKwogCS8qIEVuZCBvZiBoZWFwIGNoZWNrICovCiAJaW5pdF9oZWFwKCk7CiAKQEAgLTE2OCwxMCArMTczLDYgQEAKIAkvKiBTZXQgdGhlIHZpZGVvIG1vZGUgKi8KIAlzZXRfdmlkZW8oKTsKIAotCS8qIFBhcnNlIGNvbW1hbmQgbGluZSBmb3IgJ3F1aWV0JyBhbmQgcGFzcyBpdCB0byBkZWNvbXByZXNzb3IuICovCi0JaWYgKGNtZGxpbmVfZmluZF9vcHRpb25fYm9vbCgicXVpZXQiKSkKLQkJYm9vdF9wYXJhbXMuaGRyLmxvYWRmbGFncyB8PSBRVUlFVF9GTEFHOwotCiAJLyogRG8gdGhlIGxhc3QgdGhpbmdzIGFuZCBpbnZva2UgcHJvdGVjdGVkIG1vZGUgKi8KIAlnb190b19wcm90ZWN0ZWRfbW9kZSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9wcmludGYuYyBiL2FyY2gveDg2L2Jvb3QvcHJpbnRmLmMKaW5kZXggNTBlNDdjZC4uY2RhYzkxYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9wcmludGYuYworKysgYi9hcmNoL3g4Ni9ib290L3ByaW50Zi5jCkBAIC0zNCw3ICszNCw3IEBACiAjZGVmaW5lIFNNQUxMCTMyCQkvKiBNdXN0IGJlIDMyID09IDB4MjAgKi8KICNkZWZpbmUgU1BFQ0lBTAk2NAkJLyogMHggKi8KIAotI2RlZmluZSBkb19kaXYobixiYXNlKSAoeyBcCisjZGVmaW5lIF9fZG9fZGl2KG4sIGJhc2UpICh7IFwKIGludCBfX3JlczsgXAogX19yZXMgPSAoKHVuc2lnbmVkIGxvbmcpIG4pICUgKHVuc2lnbmVkKSBiYXNlOyBcCiBuID0gKCh1bnNpZ25lZCBsb25nKSBuKSAvICh1bnNpZ25lZCkgYmFzZTsgXApAQCAtODMsNyArODMsNyBAQAogCQl0bXBbaSsrXSA9ICcwJzsKIAllbHNlCiAJCXdoaWxlIChudW0gIT0gMCkKLQkJCXRtcFtpKytdID0gKGRpZ2l0c1tkb19kaXYobnVtLCBiYXNlKV0gfCBsb2Nhc2UpOworCQkJdG1wW2krK10gPSAoZGlnaXRzW19fZG9fZGl2KG51bSwgYmFzZSldIHwgbG9jYXNlKTsKIAlpZiAoaSA+IHByZWNpc2lvbikKIAkJcHJlY2lzaW9uID0gaTsKIAlzaXplIC09IHByZWNpc2lvbjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3Qvc3RyaW5nLmMgYi9hcmNoL3g4Ni9ib290L3N0cmluZy5jCmluZGV4IGY5NGI3YTAuLjNjYmM0MDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3Qvc3RyaW5nLmMKKysrIGIvYXJjaC94ODYvYm9vdC9zdHJpbmcuYwpAQCAtMzAsNiArMzAsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IHN0cm5jbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0LCBzaXplX3QgY291bnQpCit7CisJdW5zaWduZWQgY2hhciBjMSwgYzI7CisKKwl3aGlsZSAoY291bnQpIHsKKwkJYzEgPSAqY3MrKzsKKwkJYzIgPSAqY3QrKzsKKwkJaWYgKGMxICE9IGMyKQorCQkJcmV0dXJuIGMxIDwgYzIgPyAtMSA6IDE7CisJCWlmICghYzEpCisJCQlicmVhazsKKwkJY291bnQtLTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHNpemVfdCBzdHJubGVuKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBtYXhsZW4pCiB7CiAJY29uc3QgY2hhciAqZXMgPSBzOwpAQCAtNDgsMyArNjQsNTAgQEAKIAkJaSA9IGkgKiAxMCArICgqcysrIC0gJzAnKTsKIAlyZXR1cm4gaTsKIH0KKworLyogV29ya3Mgb25seSBmb3IgZGlnaXRzIGFuZCBsZXR0ZXJzLCBidXQgc21hbGwgYW5kIGZhc3QgKi8KKyNkZWZpbmUgVE9MT1dFUih4KSAoKHgpIHwgMHgyMCkKKworc3RhdGljIHVuc2lnbmVkIGludCBzaW1wbGVfZ3Vlc3NfYmFzZShjb25zdCBjaGFyICpjcCkKK3sKKwlpZiAoY3BbMF0gPT0gJzAnKSB7CisJCWlmIChUT0xPV0VSKGNwWzFdKSA9PSAneCcgJiYgaXN4ZGlnaXQoY3BbMl0pKQorCQkJcmV0dXJuIDE2OworCQllbHNlCisJCQlyZXR1cm4gODsKKwl9IGVsc2UgeworCQlyZXR1cm4gMTA7CisJfQorfQorCisvKioKKyAqIHNpbXBsZV9zdHJ0b3VsbCAtIGNvbnZlcnQgYSBzdHJpbmcgdG8gYW4gdW5zaWduZWQgbG9uZyBsb25nCisgKiBAY3A6IFRoZSBzdGFydCBvZiB0aGUgc3RyaW5nCisgKiBAZW5kcDogQSBwb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhlIHBhcnNlZCBzdHJpbmcgd2lsbCBiZSBwbGFjZWQgaGVyZQorICogQGJhc2U6IFRoZSBudW1iZXIgYmFzZSB0byB1c2UKKyAqLworCit1bnNpZ25lZCBsb25nIGxvbmcgc2ltcGxlX3N0cnRvdWxsKGNvbnN0IGNoYXIgKmNwLCBjaGFyICoqZW5kcCwgdW5zaWduZWQgaW50IGJhc2UpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHJlc3VsdCA9IDA7CisKKwlpZiAoIWJhc2UpCisJCWJhc2UgPSBzaW1wbGVfZ3Vlc3NfYmFzZShjcCk7CisKKwlpZiAoYmFzZSA9PSAxNiAmJiBjcFswXSA9PSAnMCcgJiYgVE9MT1dFUihjcFsxXSkgPT0gJ3gnKQorCQljcCArPSAyOworCisJd2hpbGUgKGlzeGRpZ2l0KCpjcCkpIHsKKwkJdW5zaWduZWQgaW50IHZhbHVlOworCisJCXZhbHVlID0gaXNkaWdpdCgqY3ApID8gKmNwIC0gJzAnIDogVE9MT1dFUigqY3ApIC0gJ2EnICsgMTA7CisJCWlmICh2YWx1ZSA+PSBiYXNlKQorCQkJYnJlYWs7CisJCXJlc3VsdCA9IHJlc3VsdCAqIGJhc2UgKyB2YWx1ZTsKKwkJY3ArKzsKKwl9CisJaWYgKGVuZHApCisJCSplbmRwID0gKGNoYXIgKiljcDsKKworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3R0eS5jIGIvYXJjaC94ODYvYm9vdC90dHkuYwppbmRleCAwMWVjNjljLi5kZWYyNDUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L3R0eS5jCisrKyBiL2FyY2gveDg2L2Jvb3QvdHR5LmMKQEAgLTEwLDI0ICsxMCwzNyBAQAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyoKLSAqIFZlcnkgc2ltcGxlIHNjcmVlbiBJL08KLSAqIFhYWDogUHJvYmFibHkgc2hvdWxkIGFkZCB2ZXJ5IHNpbXBsZSBzZXJpYWwgSS9PPworICogVmVyeSBzaW1wbGUgc2NyZWVuIGFuZCBzZXJpYWwgSS9PCiAgKi8KIAogI2luY2x1ZGUgImJvb3QuaCIKIAoraW50IGVhcmx5X3NlcmlhbF9iYXNlOworCisjZGVmaW5lIFhNVFJEWSAgICAgICAgICAweDIwCisKKyNkZWZpbmUgVFhSICAgICAgICAgICAgIDAgICAgICAgLyogIFRyYW5zbWl0IHJlZ2lzdGVyIChXUklURSkgKi8KKyNkZWZpbmUgTFNSICAgICAgICAgICAgIDUgICAgICAgLyogIExpbmUgU3RhdHVzICAgICAgICAgICAgICAgKi8KKwogLyoKICAqIFRoZXNlIGZ1bmN0aW9ucyBhcmUgaW4gLmluaXR0ZXh0IHNvIHRoZXkgY2FuIGJlIHVzZWQgdG8gc2lnbmFsCiAgKiBlcnJvciBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCiAgKi8KIAotdm9pZCBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuaW5pdHRleHQiKSkpIHB1dGNoYXIoaW50IGNoKQorc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLmluaXR0ZXh0IikpKSBzZXJpYWxfcHV0Y2hhcihpbnQgY2gpCit7CisJdW5zaWduZWQgdGltZW91dCA9IDB4ZmZmZjsKKworCXdoaWxlICgoaW5iKGVhcmx5X3NlcmlhbF9iYXNlICsgTFNSKSAmIFhNVFJEWSkgPT0gMCAmJiAtLXRpbWVvdXQpCisJCWNwdV9yZWxheCgpOworCisJb3V0YihjaCwgZWFybHlfc2VyaWFsX2Jhc2UgKyBUWFIpOworfQorCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuaW5pdHRleHQiKSkpIGJpb3NfcHV0Y2hhcihpbnQgY2gpCiB7CiAJc3RydWN0IGJpb3NyZWdzIGlyZWc7CiAKLQlpZiAoY2ggPT0gJ1xuJykKLQkJcHV0Y2hhcignXHInKTsJLyogXG4gLT4gXHJcbiAqLwotCiAJaW5pdHJlZ3MoJmlyZWcpOwogCWlyZWcuYnggPSAweDAwMDc7CiAJaXJlZy5jeCA9IDB4MDAwMTsKQEAgLTM2LDYgKzQ5LDE3IEBACiAJaW50Y2FsbCgweDEwLCAmaXJlZywgTlVMTCk7CiB9CiAKK3ZvaWQgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLmluaXR0ZXh0IikpKSBwdXRjaGFyKGludCBjaCkKK3sKKwlpZiAoY2ggPT0gJ1xuJykKKwkJcHV0Y2hhcignXHInKTsJLyogXG4gLT4gXHJcbiAqLworCisJYmlvc19wdXRjaGFyKGNoKTsKKworCWlmIChlYXJseV9zZXJpYWxfYmFzZSAhPSAwKQorCQlzZXJpYWxfcHV0Y2hhcihjaCk7Cit9CisKIHZvaWQgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLmluaXR0ZXh0IikpKSBwdXRzKGNvbnN0IGNoYXIgKnN0cikKIHsKIAl3aGlsZSAoKnN0cikKQEAgLTExMiwzICsxMzYsNCBAQAogCiAJcmV0dXJuIDA7CQkvKiBUaW1lb3V0ISAqLwogfQorCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnIGIvYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZwppbmRleCBkMjhmYWQxLi5lM2EzMjQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnCisrKyBiL2FyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWcKQEAgLTE0NzEsNiArMTQ3MSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQ09SRVRFTVAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QS0dURU1QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZyBiL2FyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZwppbmRleCA2Yzg2YWNkLi40MjUxZjgzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWcKKysrIGIvYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnCkBAIC0xNDU2LDYgKzE0NTYsNyBAQAogIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0NPUkVURU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEtHVEVNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3BpLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3BpLmgKaW5kZXggYWEyYzM5ZC4uOTIwOTFkZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNwaS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FjcGkuaApAQCAtMTM0LDcgKzEzNCw3IEBACiAJICAgIGJvb3RfY3B1X2RhdGEueDg2X21vZGVsIDw9IDB4MDUgJiYKIAkgICAgYm9vdF9jcHVfZGF0YS54ODZfbWFzayA8IDB4MEEpCiAJCXJldHVybiAxOwotCWVsc2UgaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BTURDMUUpKQorCWVsc2UgaWYgKGMxZV9kZXRlY3RlZCkKIAkJcmV0dXJuIDE7CiAJZWxzZQogCQlyZXR1cm4gbWF4X2NzdGF0ZTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwYl90aW1lci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBiX3RpbWVyLmgKaW5kZXggYzc0YTJlZS4uYTY5YjFhYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBiX3RpbWVyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBiX3RpbWVyLmgKQEAgLTU1LDcgKzU1LDYgQEAKIGV4dGVybiBpbnQgYXJjaF9zZXR1cF9hcGJ0X2lycXMoaW50IGlycSwgaW50IHRyaWdnZXIsIGludCBtYXNrLCBpbnQgY3B1KTsKIGV4dGVybiB2b2lkIGFwYnRfc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrKHZvaWQpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBib290X2NwdV9pZDsKLWV4dGVybiBpbnQgZGlzYWJsZV9hcGJ0X3BlcmNwdTsKIAogZXh0ZXJuIHN0cnVjdCBzZmlfdGltZXJfdGFibGVfZW50cnkgKnNmaV9nZXRfbXRtcihpbnQgaGludCk7CiBleHRlcm4gdm9pZCBzZmlfZnJlZV9tdG1yKHN0cnVjdCBzZmlfdGltZXJfdGFibGVfZW50cnkgKm10bXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY21weGNoZ18zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY21weGNoZ18zMi5oCmluZGV4IDg4NTllMTIuLjI4NGE2ZTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NtcHhjaGdfMzIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jbXB4Y2hnXzMyLmgKQEAgLTExLDM4ICsxMSw0MiBAQAogZXh0ZXJuIHZvaWQgX194Y2hnX3dyb25nX3NpemUodm9pZCk7CiAKIC8qCi0gKiBOb3RlOiBubyAibG9jayIgcHJlZml4IGV2ZW4gb24gU01QOiB4Y2hnIGFsd2F5cyBpbXBsaWVzIGxvY2sgYW55d2F5Ci0gKiBOb3RlIDI6IHhjaGcgaGFzIHNpZGUgZWZmZWN0LCBzbyB0aGF0IGF0dHJpYnV0ZSB2b2xhdGlsZSBpcyBuZWNlc3NhcnksCi0gKgkgIGJ1dCBnZW5lcmFsbHkgdGhlIHByaW1pdGl2ZSBpcyBpbnZhbGlkLCAqcHRyIGlzIG91dHB1dCBhcmd1bWVudC4gLS1BTksKKyAqIE5vdGU6IG5vICJsb2NrIiBwcmVmaXggZXZlbiBvbiBTTVA6IHhjaGcgYWx3YXlzIGltcGxpZXMgbG9jayBhbnl3YXkuCisgKiBTaW5jZSB0aGlzIGlzIGdlbmVyYWxseSB1c2VkIHRvIHByb3RlY3Qgb3RoZXIgbWVtb3J5IGluZm9ybWF0aW9uLCB3ZQorICogdXNlICJhc20gdm9sYXRpbGUiIGFuZCAibWVtb3J5IiBjbG9iYmVycyB0byBwcmV2ZW50IGdjYyBmcm9tIG1vdmluZworICogaW5mb3JtYXRpb24gYXJvdW5kLgogICovCi0KLXN0cnVjdCBfX3hjaGdfZHVtbXkgewotCXVuc2lnbmVkIGxvbmcgYVsxMDBdOwotfTsKLSNkZWZpbmUgX194Zyh4KSAoKHN0cnVjdCBfX3hjaGdfZHVtbXkgKikoeCkpCi0KICNkZWZpbmUgX194Y2hnKHgsIHB0ciwgc2l6ZSkJCQkJCQlcCiAoewkJCQkJCQkJCVwKIAlfX3R5cGVvZigqKHB0cikpIF9feCA9ICh4KTsJCQkJCVwKIAlzd2l0Y2ggKHNpemUpIHsJCQkJCQkJXAogCWNhc2UgMToJCQkJCQkJCVwKLQkJYXNtIHZvbGF0aWxlKCJ4Y2hnYiAlYjAsJTEiCQkJCVwKLQkJCSAgICAgOiAiPXEiIChfX3gpCQkJCVwKLQkJCSAgICAgOiAibSIgKCpfX3hnKHB0cikpLCAiMCIgKF9feCkJCVwKKwl7CQkJCQkJCQlcCisJCXZvbGF0aWxlIHU4ICpfX3B0ciA9ICh2b2xhdGlsZSB1OCAqKShwdHIpOwkJXAorCQlhc20gdm9sYXRpbGUoInhjaGdiICUwLCUxIgkJCQlcCisJCQkgICAgIDogIj1xIiAoX194KSwgIittIiAoKl9fcHRyKQkJXAorCQkJICAgICA6ICIwIiAoX194KQkJCQlcCiAJCQkgICAgIDogIm1lbW9yeSIpOwkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCisJfQkJCQkJCQkJXAogCWNhc2UgMjoJCQkJCQkJCVwKLQkJYXNtIHZvbGF0aWxlKCJ4Y2hndyAldzAsJTEiCQkJCVwKLQkJCSAgICAgOiAiPXIiIChfX3gpCQkJCVwKLQkJCSAgICAgOiAibSIgKCpfX3hnKHB0cikpLCAiMCIgKF9feCkJCVwKKwl7CQkJCQkJCQlcCisJCXZvbGF0aWxlIHUxNiAqX19wdHIgPSAodm9sYXRpbGUgdTE2ICopKHB0cik7CQlcCisJCWFzbSB2b2xhdGlsZSgieGNoZ3cgJTAsJTEiCQkJCVwKKwkJCSAgICAgOiAiPXIiIChfX3gpLCAiK20iICgqX19wdHIpCQlcCisJCQkgICAgIDogIjAiIChfX3gpCQkJCVwKIAkJCSAgICAgOiAibWVtb3J5Iik7CQkJCVwKIAkJYnJlYWs7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCiAJY2FzZSA0OgkJCQkJCQkJXAorCXsJCQkJCQkJCVwKKwkJdm9sYXRpbGUgdTMyICpfX3B0ciA9ICh2b2xhdGlsZSB1MzIgKikocHRyKTsJCVwKIAkJYXNtIHZvbGF0aWxlKCJ4Y2hnbCAlMCwlMSIJCQkJXAotCQkJICAgICA6ICI9ciIgKF9feCkJCQkJXAotCQkJICAgICA6ICJtIiAoKl9feGcocHRyKSksICIwIiAoX194KQkJXAorCQkJICAgICA6ICI9ciIgKF9feCksICIrbSIgKCpfX3B0cikJCVwKKwkJCSAgICAgOiAiMCIgKF9feCkJCQkJXAogCQkJICAgICA6ICJtZW1vcnkiKTsJCQkJXAogCQlicmVhazsJCQkJCQkJXAorCX0JCQkJCQkJCVwKIAlkZWZhdWx0OgkJCQkJCQlcCiAJCV9feGNoZ193cm9uZ19zaXplKCk7CQkJCQlcCiAJfQkJCQkJCQkJXApAQCAtNTMsNjAgKzU3LDMzIEBACiAJX194Y2hnKCh2KSwgKHB0ciksIHNpemVvZigqcHRyKSkKIAogLyoKLSAqIFRoZSBzZW1hbnRpY3Mgb2YgWENIR0NNUDhCIGFyZSBhIGJpdCBzdHJhbmdlLCB0aGlzIGlzIHdoeQotICogdGhlcmUgaXMgYSBsb29wIGFuZCB0aGUgbG9hZGluZyBvZiAlJWVheCBhbmQgJSVlZHggaGFzIHRvCi0gKiBiZSBpbnNpZGUuIFRoaXMgaW5saW5lcyB3ZWxsIGluIG1vc3QgY2FzZXMsIHRoZSBjYWNoZWQKLSAqIGNvc3QgaXMgYXJvdW5kIH4zOCBjeWNsZXMuIChpbiB0aGUgZnV0dXJlIHdlIG1pZ2h0IHdhbnQKLSAqIHRvIGRvIGFuIFNJTUQvM0ROT1chL01NWC9GUFUgNjQtYml0IHN0b3JlIGhlcmUsIGJ1dCB0aGF0Ci0gKiBtaWdodCBoYXZlIGFuIGltcGxpY2l0IEZQVS1zYXZlIGFzIGEgY29zdCwgc28gaXQncyBub3QKLSAqIGNsZWFyIHdoaWNoIHBhdGggdG8gZ28uKQorICogQ01QWENIRzhCIG9ubHkgd3JpdGVzIHRvIHRoZSB0YXJnZXQgaWYgd2UgaGFkIHRoZSBwcmV2aW91cworICogdmFsdWUgaW4gcmVnaXN0ZXJzLCBvdGhlcndpc2UgaXQgYWN0cyBhcyBhIHJlYWQgYW5kIGdpdmVzIHVzIHRoZQorICogIm5ldyBwcmV2aW91cyIgdmFsdWUuICBUaGF0IGlzIHdoeSB0aGVyZSBpcyBhIGxvb3AuICBQcmVsb2FkaW5nCisgKiBFRFg6RUFYIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOiBpbiB0aGUgY29tbW9uIGNhc2UgaXQgbWVhbnMKKyAqIHdlIG5lZWQgb25seSBvbmUgbG9ja2VkIG9wZXJhdGlvbi4KICAqCi0gKiBjbXB4Y2hnOGIgbXVzdCBiZSB1c2VkIHdpdGggdGhlIGxvY2sgcHJlZml4IGhlcmUgdG8gYWxsb3cKLSAqIHRoZSBpbnN0cnVjdGlvbiB0byBiZSBleGVjdXRlZCBhdG9taWNhbGx5LCBzZWUgcGFnZSAzLTEwMgotICogb2YgdGhlIGluc3RydWN0aW9uIHNldCByZWZlcmVuY2UgMjQzMTkxMDIucGRmLiBXZSBuZWVkCi0gKiB0aGUgcmVhZGVyIHNpZGUgdG8gc2VlIHRoZSBjb2hlcmVudCA2NGJpdCB2YWx1ZS4KKyAqIEEgU0lNRC8zRE5PVyEvTU1YL0ZQVSA2NC1iaXQgc3RvcmUgaGVyZSB3b3VsZCByZXF1aXJlIGF0IHRoZSB2ZXJ5CisgKiBsZWFzdCBhbiBGUFUgc2F2ZSBhbmQvb3IgJWNyMC50cyBtYW5pcHVsYXRpb24uCisgKgorICogY21weGNoZzhiIG11c3QgYmUgdXNlZCB3aXRoIHRoZSBsb2NrIHByZWZpeCBoZXJlIHRvIGFsbG93IHRoZQorICogaW5zdHJ1Y3Rpb24gdG8gYmUgZXhlY3V0ZWQgYXRvbWljYWxseS4gIFdlIG5lZWQgdG8gaGF2ZSB0aGUgcmVhZGVyCisgKiBzaWRlIHRvIHNlZSB0aGUgY29oZXJlbnQgNjRiaXQgdmFsdWUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF82NGJpdCh1bnNpZ25lZCBsb25nIGxvbmcgKnB0ciwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbG93LCB1bnNpZ25lZCBpbnQgaGlnaCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfNjRiaXQodm9sYXRpbGUgdTY0ICpwdHIsIHU2NCB2YWx1ZSkKIHsKKwl1MzIgbG93ICA9IHZhbHVlOworCXUzMiBoaWdoID0gdmFsdWUgPj4gMzI7CisJdTY0IHByZXYgPSAqcHRyOworCiAJYXNtIHZvbGF0aWxlKCJcbjE6XHQiCi0JCSAgICAgIm1vdmwgKCUwKSwgJSVlYXhcblx0IgotCQkgICAgICJtb3ZsIDQoJTApLCAlJWVkeFxuXHQiCi0JCSAgICAgTE9DS19QUkVGSVggImNtcHhjaGc4YiAoJTApXG5cdCIKKwkJICAgICBMT0NLX1BSRUZJWCAiY21weGNoZzhiICUwXG5cdCIKIAkJICAgICAiam56IDFiIgotCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLwotCQkgICAgIDogIkQiKHB0ciksCi0JCSAgICAgICAiYiIobG93KSwKLQkJICAgICAgICJjIihoaWdoKQotCQkgICAgIDogImF4IiwgImR4IiwgIm1lbW9yeSIpOworCQkgICAgIDogIj1tIiAoKnB0ciksICIrQSIgKHByZXYpCisJCSAgICAgOiAiYiIgKGxvdyksICJjIiAoaGlnaCkKKwkJICAgICA6ICJtZW1vcnkiKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fc2V0XzY0Yml0X2NvbnN0YW50KHVuc2lnbmVkIGxvbmcgbG9uZyAqcHRyLAotCQkJCQl1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUpCi17Ci0JX19zZXRfNjRiaXQocHRyLCAodW5zaWduZWQgaW50KXZhbHVlLCAodW5zaWduZWQgaW50KSh2YWx1ZSA+PiAzMikpOwotfQotCi0jZGVmaW5lIGxsX2xvdyh4KQkqKCgodW5zaWduZWQgaW50ICopJih4KSkgKyAwKQotI2RlZmluZSBsbF9oaWdoKHgpCSooKCh1bnNpZ25lZCBpbnQgKikmKHgpKSArIDEpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF82NGJpdF92YXIodW5zaWduZWQgbG9uZyBsb25nICpwdHIsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlKQotewotCV9fc2V0XzY0Yml0KHB0ciwgbGxfbG93KHZhbHVlKSwgbGxfaGlnaCh2YWx1ZSkpOwotfQotCi0jZGVmaW5lIHNldF82NGJpdChwdHIsIHZhbHVlKQkJCVwKLQkoX19idWlsdGluX2NvbnN0YW50X3AoKHZhbHVlKSkJCVwKLQkgPyBfX3NldF82NGJpdF9jb25zdGFudCgocHRyKSwgKHZhbHVlKSkJXAotCSA6IF9fc2V0XzY0Yml0X3ZhcigocHRyKSwgKHZhbHVlKSkpCi0KLSNkZWZpbmUgX3NldF82NGJpdChwdHIsIHZhbHVlKQkJCQkJCVwKLQkoX19idWlsdGluX2NvbnN0YW50X3AodmFsdWUpCQkJCQlcCi0JID8gX19zZXRfNjRiaXQocHRyLCAodW5zaWduZWQgaW50KSh2YWx1ZSksCQkJXAotCQkgICAgICAgKHVuc2lnbmVkIGludCkoKHZhbHVlKSA+PiAzMikpCQkJXAotCSA6IF9fc2V0XzY0Yml0KHB0ciwgbGxfbG93KCh2YWx1ZSkpLCBsbF9oaWdoKCh2YWx1ZSkpKSkKLQogZXh0ZXJuIHZvaWQgX19jbXB4Y2hnX3dyb25nX3NpemUodm9pZCk7CiAKIC8qCkBAIC0xMjEsMjMgKzk4LDMyIEBACiAJX190eXBlb2ZfXygqKHB0cikpIF9fbmV3ID0gKG5ldyk7CQkJCVwKIAlzd2l0Y2ggKHNpemUpIHsJCQkJCQkJXAogCWNhc2UgMToJCQkJCQkJCVwKLQkJYXNtIHZvbGF0aWxlKGxvY2sgImNtcHhjaGdiICViMSwlMiIJCQlcCi0JCQkgICAgIDogIj1hIihfX3JldCkJCQkJXAotCQkJICAgICA6ICJxIihfX25ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKF9fb2xkKQlcCisJewkJCQkJCQkJXAorCQl2b2xhdGlsZSB1OCAqX19wdHIgPSAodm9sYXRpbGUgdTggKikocHRyKTsJCVwKKwkJYXNtIHZvbGF0aWxlKGxvY2sgImNtcHhjaGdiICUyLCUxIgkJCVwKKwkJCSAgICAgOiAiPWEiIChfX3JldCksICIrbSIgKCpfX3B0cikJCVwKKwkJCSAgICAgOiAicSIgKF9fbmV3KSwgIjAiIChfX29sZCkJCQlcCiAJCQkgICAgIDogIm1lbW9yeSIpOwkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCisJfQkJCQkJCQkJXAogCWNhc2UgMjoJCQkJCQkJCVwKLQkJYXNtIHZvbGF0aWxlKGxvY2sgImNtcHhjaGd3ICV3MSwlMiIJCQlcCi0JCQkgICAgIDogIj1hIihfX3JldCkJCQkJXAotCQkJICAgICA6ICJyIihfX25ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKF9fb2xkKQlcCisJewkJCQkJCQkJXAorCQl2b2xhdGlsZSB1MTYgKl9fcHRyID0gKHZvbGF0aWxlIHUxNiAqKShwdHIpOwkJXAorCQlhc20gdm9sYXRpbGUobG9jayAiY21weGNoZ3cgJTIsJTEiCQkJXAorCQkJICAgICA6ICI9YSIgKF9fcmV0KSwgIittIiAoKl9fcHRyKQkJXAorCQkJICAgICA6ICJyIiAoX19uZXcpLCAiMCIgKF9fb2xkKQkJCVwKIAkJCSAgICAgOiAibWVtb3J5Iik7CQkJCVwKIAkJYnJlYWs7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCiAJY2FzZSA0OgkJCQkJCQkJXAotCQlhc20gdm9sYXRpbGUobG9jayAiY21weGNoZ2wgJTEsJTIiCQkJXAotCQkJICAgICA6ICI9YSIoX19yZXQpCQkJCVwKLQkJCSAgICAgOiAiciIoX19uZXcpLCAibSIoKl9feGcocHRyKSksICIwIihfX29sZCkJXAorCXsJCQkJCQkJCVwKKwkJdm9sYXRpbGUgdTMyICpfX3B0ciA9ICh2b2xhdGlsZSB1MzIgKikocHRyKTsJCVwKKwkJYXNtIHZvbGF0aWxlKGxvY2sgImNtcHhjaGdsICUyLCUxIgkJCVwKKwkJCSAgICAgOiAiPWEiIChfX3JldCksICIrbSIgKCpfX3B0cikJCVwKKwkJCSAgICAgOiAiciIgKF9fbmV3KSwgIjAiIChfX29sZCkJCQlcCiAJCQkgICAgIDogIm1lbW9yeSIpOwkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCisJfQkJCQkJCQkJXAogCWRlZmF1bHQ6CQkJCQkJCVwKIAkJX19jbXB4Y2hnX3dyb25nX3NpemUoKTsJCQkJCVwKIAl9CQkJCQkJCQlcCkBAIC0xNzUsMzIgKzE2MSwyOCBAQAogCQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykobikpKQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIF9fY21weGNoZzY0KHZvbGF0aWxlIHZvaWQgKnB0ciwKLQkJCQkJICAgICB1bnNpZ25lZCBsb25nIGxvbmcgb2xkLAotCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuZXcpCitzdGF0aWMgaW5saW5lIHU2NCBfX2NtcHhjaGc2NCh2b2xhdGlsZSB1NjQgKnB0ciwgdTY0IG9sZCwgdTY0IG5ldykKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgcHJldjsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImNtcHhjaGc4YiAlMyIKLQkJICAgICA6ICI9QSIocHJldikKLQkJICAgICA6ICJiIigodW5zaWduZWQgbG9uZyluZXcpLAotCQkgICAgICAgImMiKCh1bnNpZ25lZCBsb25nKShuZXcgPj4gMzIpKSwKLQkJICAgICAgICJtIigqX194ZyhwdHIpKSwKLQkJICAgICAgICIwIihvbGQpCisJdTY0IHByZXY7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJjbXB4Y2hnOGIgJTEiCisJCSAgICAgOiAiPUEiIChwcmV2KSwKKwkJICAgICAgICIrbSIgKCpwdHIpCisJCSAgICAgOiAiYiIgKCh1MzIpbmV3KSwKKwkJICAgICAgICJjIiAoKHUzMikobmV3ID4+IDMyKSksCisJCSAgICAgICAiMCIgKG9sZCkKIAkJICAgICA6ICJtZW1vcnkiKTsKIAlyZXR1cm4gcHJldjsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgX19jbXB4Y2hnNjRfbG9jYWwodm9sYXRpbGUgdm9pZCAqcHRyLAotCQkJCQkJICAgdW5zaWduZWQgbG9uZyBsb25nIG9sZCwKLQkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuZXcpCitzdGF0aWMgaW5saW5lIHU2NCBfX2NtcHhjaGc2NF9sb2NhbCh2b2xhdGlsZSB1NjQgKnB0ciwgdTY0IG9sZCwgdTY0IG5ldykKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgcHJldjsKLQlhc20gdm9sYXRpbGUoImNtcHhjaGc4YiAlMyIKLQkJICAgICA6ICI9QSIocHJldikKLQkJICAgICA6ICJiIigodW5zaWduZWQgbG9uZyluZXcpLAotCQkgICAgICAgImMiKCh1bnNpZ25lZCBsb25nKShuZXcgPj4gMzIpKSwKLQkJICAgICAgICJtIigqX194ZyhwdHIpKSwKLQkJICAgICAgICIwIihvbGQpCisJdTY0IHByZXY7CisJYXNtIHZvbGF0aWxlKCJjbXB4Y2hnOGIgJTEiCisJCSAgICAgOiAiPUEiIChwcmV2KSwKKwkJICAgICAgICIrbSIgKCpwdHIpCisJCSAgICAgOiAiYiIgKCh1MzIpbmV3KSwKKwkJICAgICAgICJjIiAoKHUzMikobmV3ID4+IDMyKSksCisJCSAgICAgICAiMCIgKG9sZCkKIAkJICAgICA6ICJtZW1vcnkiKTsKIAlyZXR1cm4gcHJldjsKIH0KQEAgLTI2NCw4ICsyNDYsNiBAQAogICogdG8gc2ltdWxhdGUgdGhlIGNtcHhjaGc4YiBvbiB0aGUgODAzODYgYW5kIDgwNDg2IENQVS4KICAqLwogCi1leHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGNtcHhjaGdfNDg2X3U2NCh2b2xhdGlsZSB2b2lkICosIHU2NCwgdTY0KTsKLQogI2RlZmluZSBjbXB4Y2hnNjQocHRyLCBvLCBuKQkJCQkJXAogKHsJCQkJCQkJCVwKIAlfX3R5cGVvZl9fKCoocHRyKSkgX19yZXQ7CQkJCVwKQEAgLTI4MywyMCArMjYzLDIwIEBACiAJX19yZXQ7IH0pCiAKIAotCi0jZGVmaW5lIGNtcHhjaGc2NF9sb2NhbChwdHIsIG8sIG4pCQkJCQlcCi0oewkJCQkJCQkJCVwKLQlfX3R5cGVvZl9fKCoocHRyKSkgX19yZXQ7CQkJCQlcCi0JaWYgKGxpa2VseShib290X2NwdV9kYXRhLng4NiA+IDQpKQkJCQlcCi0JCV9fcmV0ID0gKF9fdHlwZW9mX18oKihwdHIpKSlfX2NtcHhjaGc2NF9sb2NhbCgocHRyKSwJXAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKG8pLAkJXAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKG4pKTsJCVwKLQllbHNlCQkJCQkJCQlcCi0JCV9fcmV0ID0gKF9fdHlwZW9mX18oKihwdHIpKSljbXB4Y2hnXzQ4Nl91NjQoKHB0ciksCVwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKShvKSwJCVwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKShuKSk7CQlcCi0JX19yZXQ7CQkJCQkJCQlcCi19KQorI2RlZmluZSBjbXB4Y2hnNjRfbG9jYWwocHRyLCBvLCBuKQkJCQlcCisoewkJCQkJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSBfX3JldDsJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSBfX29sZCA9IChvKTsJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSBfX25ldyA9IChuKTsJCQkJXAorCWFsdGVybmF0aXZlX2lvKCJjYWxsIGNtcHhjaGc4Yl9lbXUiLAkJCVwKKwkJICAgICAgICJjbXB4Y2hnOGIgKCUlZXNpKSIgLAkJCVwKKwkJICAgICAgIFg4Nl9GRUFUVVJFX0NYOCwJCQkJXAorCQkgICAgICAgIj1BIiAoX19yZXQpLAkJCQlcCisJCSAgICAgICAiUyIgKChwdHIpKSwgIjAiIChfX29sZCksCQlcCisJCSAgICAgICAiYiIgKCh1bnNpZ25lZCBpbnQpX19uZXcpLAkJXAorCQkgICAgICAgImMiICgodW5zaWduZWQgaW50KShfX25ldz4+MzIpKQkJXAorCQkgICAgICAgOiAibWVtb3J5Iik7CQkJCVwKKwlfX3JldDsgfSkKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NtcHhjaGdfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NtcHhjaGdfNjQuaAppbmRleCA0ODVhZTQxLi40MjNhZTU4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jbXB4Y2hnXzY0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY21weGNoZ182NC5oCkBAIC0zLDUxICszLDYwIEBACiAKICNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4gLyogUHJvdmlkZXMgTE9DS19QUkVGSVggKi8KIAotI2RlZmluZSBfX3hnKHgpICgodm9sYXRpbGUgbG9uZyAqKSh4KSkKLQotc3RhdGljIGlubGluZSB2b2lkIHNldF82NGJpdCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpwdHIsIHVuc2lnbmVkIGxvbmcgdmFsKQorc3RhdGljIGlubGluZSB2b2lkIHNldF82NGJpdCh2b2xhdGlsZSB1NjQgKnB0ciwgdTY0IHZhbCkKIHsKIAkqcHRyID0gdmFsOwogfQogCi0jZGVmaW5lIF9zZXRfNjRiaXQgc2V0XzY0Yml0Ci0KIGV4dGVybiB2b2lkIF9feGNoZ193cm9uZ19zaXplKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19jbXB4Y2hnX3dyb25nX3NpemUodm9pZCk7CiAKIC8qCi0gKiBOb3RlOiBubyAibG9jayIgcHJlZml4IGV2ZW4gb24gU01QOiB4Y2hnIGFsd2F5cyBpbXBsaWVzIGxvY2sgYW55d2F5Ci0gKiBOb3RlIDI6IHhjaGcgaGFzIHNpZGUgZWZmZWN0LCBzbyB0aGF0IGF0dHJpYnV0ZSB2b2xhdGlsZSBpcyBuZWNlc3NhcnksCi0gKgkgIGJ1dCBnZW5lcmFsbHkgdGhlIHByaW1pdGl2ZSBpcyBpbnZhbGlkLCAqcHRyIGlzIG91dHB1dCBhcmd1bWVudC4gLS1BTksKKyAqIE5vdGU6IG5vICJsb2NrIiBwcmVmaXggZXZlbiBvbiBTTVA6IHhjaGcgYWx3YXlzIGltcGxpZXMgbG9jayBhbnl3YXkuCisgKiBTaW5jZSB0aGlzIGlzIGdlbmVyYWxseSB1c2VkIHRvIHByb3RlY3Qgb3RoZXIgbWVtb3J5IGluZm9ybWF0aW9uLCB3ZQorICogdXNlICJhc20gdm9sYXRpbGUiIGFuZCAibWVtb3J5IiBjbG9iYmVycyB0byBwcmV2ZW50IGdjYyBmcm9tIG1vdmluZworICogaW5mb3JtYXRpb24gYXJvdW5kLgogICovCiAjZGVmaW5lIF9feGNoZyh4LCBwdHIsIHNpemUpCQkJCQkJXAogKHsJCQkJCQkJCQlcCiAJX190eXBlb2YoKihwdHIpKSBfX3ggPSAoeCk7CQkJCQlcCiAJc3dpdGNoIChzaXplKSB7CQkJCQkJCVwKIAljYXNlIDE6CQkJCQkJCQlcCi0JCWFzbSB2b2xhdGlsZSgieGNoZ2IgJWIwLCUxIgkJCQlcCi0JCQkgICAgIDogIj1xIiAoX194KQkJCQlcCi0JCQkgICAgIDogIm0iICgqX194ZyhwdHIpKSwgIjAiIChfX3gpCQlcCisJewkJCQkJCQkJXAorCQl2b2xhdGlsZSB1OCAqX19wdHIgPSAodm9sYXRpbGUgdTggKikocHRyKTsJCVwKKwkJYXNtIHZvbGF0aWxlKCJ4Y2hnYiAlMCwlMSIJCQkJXAorCQkJICAgICA6ICI9cSIgKF9feCksICIrbSIgKCpfX3B0cikJCVwKKwkJCSAgICAgOiAiMCIgKF9feCkJCQkJXAogCQkJICAgICA6ICJtZW1vcnkiKTsJCQkJXAogCQlicmVhazsJCQkJCQkJXAorCX0JCQkJCQkJCVwKIAljYXNlIDI6CQkJCQkJCQlcCi0JCWFzbSB2b2xhdGlsZSgieGNoZ3cgJXcwLCUxIgkJCQlcCi0JCQkgICAgIDogIj1yIiAoX194KQkJCQlcCi0JCQkgICAgIDogIm0iICgqX194ZyhwdHIpKSwgIjAiIChfX3gpCQlcCisJewkJCQkJCQkJXAorCQl2b2xhdGlsZSB1MTYgKl9fcHRyID0gKHZvbGF0aWxlIHUxNiAqKShwdHIpOwkJXAorCQlhc20gdm9sYXRpbGUoInhjaGd3ICUwLCUxIgkJCQlcCisJCQkgICAgIDogIj1yIiAoX194KSwgIittIiAoKl9fcHRyKQkJXAorCQkJICAgICA6ICIwIiAoX194KQkJCQlcCiAJCQkgICAgIDogIm1lbW9yeSIpOwkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCisJfQkJCQkJCQkJXAogCWNhc2UgNDoJCQkJCQkJCVwKLQkJYXNtIHZvbGF0aWxlKCJ4Y2hnbCAlazAsJTEiCQkJCVwKLQkJCSAgICAgOiAiPXIiIChfX3gpCQkJCVwKLQkJCSAgICAgOiAibSIgKCpfX3hnKHB0cikpLCAiMCIgKF9feCkJCVwKKwl7CQkJCQkJCQlcCisJCXZvbGF0aWxlIHUzMiAqX19wdHIgPSAodm9sYXRpbGUgdTMyICopKHB0cik7CQlcCisJCWFzbSB2b2xhdGlsZSgieGNoZ2wgJTAsJTEiCQkJCVwKKwkJCSAgICAgOiAiPXIiIChfX3gpLCAiK20iICgqX19wdHIpCQlcCisJCQkgICAgIDogIjAiIChfX3gpCQkJCVwKIAkJCSAgICAgOiAibWVtb3J5Iik7CQkJCVwKIAkJYnJlYWs7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCiAJY2FzZSA4OgkJCQkJCQkJXAorCXsJCQkJCQkJCVwKKwkJdm9sYXRpbGUgdTY0ICpfX3B0ciA9ICh2b2xhdGlsZSB1NjQgKikocHRyKTsJCVwKIAkJYXNtIHZvbGF0aWxlKCJ4Y2hncSAlMCwlMSIJCQkJXAotCQkJICAgICA6ICI9ciIgKF9feCkJCQkJXAotCQkJICAgICA6ICJtIiAoKl9feGcocHRyKSksICIwIiAoX194KQkJXAorCQkJICAgICA6ICI9ciIgKF9feCksICIrbSIgKCpfX3B0cikJCVwKKwkJCSAgICAgOiAiMCIgKF9feCkJCQkJXAogCQkJICAgICA6ICJtZW1vcnkiKTsJCQkJXAogCQlicmVhazsJCQkJCQkJXAorCX0JCQkJCQkJCVwKIAlkZWZhdWx0OgkJCQkJCQlcCiAJCV9feGNoZ193cm9uZ19zaXplKCk7CQkJCQlcCiAJfQkJCQkJCQkJXApAQCAtNzEsMjkgKzgwLDQxIEBACiAJX190eXBlb2ZfXygqKHB0cikpIF9fbmV3ID0gKG5ldyk7CQkJCVwKIAlzd2l0Y2ggKHNpemUpIHsJCQkJCQkJXAogCWNhc2UgMToJCQkJCQkJCVwKLQkJYXNtIHZvbGF0aWxlKGxvY2sgImNtcHhjaGdiICViMSwlMiIJCQlcCi0JCQkgICAgIDogIj1hIihfX3JldCkJCQkJXAotCQkJICAgICA6ICJxIihfX25ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKF9fb2xkKQlcCisJewkJCQkJCQkJXAorCQl2b2xhdGlsZSB1OCAqX19wdHIgPSAodm9sYXRpbGUgdTggKikocHRyKTsJCVwKKwkJYXNtIHZvbGF0aWxlKGxvY2sgImNtcHhjaGdiICUyLCUxIgkJCVwKKwkJCSAgICAgOiAiPWEiIChfX3JldCksICIrbSIgKCpfX3B0cikJCVwKKwkJCSAgICAgOiAicSIgKF9fbmV3KSwgIjAiIChfX29sZCkJCQlcCiAJCQkgICAgIDogIm1lbW9yeSIpOwkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCisJfQkJCQkJCQkJXAogCWNhc2UgMjoJCQkJCQkJCVwKLQkJYXNtIHZvbGF0aWxlKGxvY2sgImNtcHhjaGd3ICV3MSwlMiIJCQlcCi0JCQkgICAgIDogIj1hIihfX3JldCkJCQkJXAotCQkJICAgICA6ICJyIihfX25ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKF9fb2xkKQlcCisJewkJCQkJCQkJXAorCQl2b2xhdGlsZSB1MTYgKl9fcHRyID0gKHZvbGF0aWxlIHUxNiAqKShwdHIpOwkJXAorCQlhc20gdm9sYXRpbGUobG9jayAiY21weGNoZ3cgJTIsJTEiCQkJXAorCQkJICAgICA6ICI9YSIgKF9fcmV0KSwgIittIiAoKl9fcHRyKQkJXAorCQkJICAgICA6ICJyIiAoX19uZXcpLCAiMCIgKF9fb2xkKQkJCVwKIAkJCSAgICAgOiAibWVtb3J5Iik7CQkJCVwKIAkJYnJlYWs7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCiAJY2FzZSA0OgkJCQkJCQkJXAotCQlhc20gdm9sYXRpbGUobG9jayAiY21weGNoZ2wgJWsxLCUyIgkJCVwKLQkJCSAgICAgOiAiPWEiKF9fcmV0KQkJCQlcCi0JCQkgICAgIDogInIiKF9fbmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIoX19vbGQpCVwKKwl7CQkJCQkJCQlcCisJCXZvbGF0aWxlIHUzMiAqX19wdHIgPSAodm9sYXRpbGUgdTMyICopKHB0cik7CQlcCisJCWFzbSB2b2xhdGlsZShsb2NrICJjbXB4Y2hnbCAlMiwlMSIJCQlcCisJCQkgICAgIDogIj1hIiAoX19yZXQpLCAiK20iICgqX19wdHIpCQlcCisJCQkgICAgIDogInIiIChfX25ldyksICIwIiAoX19vbGQpCQkJXAogCQkJICAgICA6ICJtZW1vcnkiKTsJCQkJXAogCQlicmVhazsJCQkJCQkJXAorCX0JCQkJCQkJCVwKIAljYXNlIDg6CQkJCQkJCQlcCi0JCWFzbSB2b2xhdGlsZShsb2NrICJjbXB4Y2hncSAlMSwlMiIJCQlcCi0JCQkgICAgIDogIj1hIihfX3JldCkJCQkJXAotCQkJICAgICA6ICJyIihfX25ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKF9fb2xkKQlcCisJewkJCQkJCQkJXAorCQl2b2xhdGlsZSB1NjQgKl9fcHRyID0gKHZvbGF0aWxlIHU2NCAqKShwdHIpOwkJXAorCQlhc20gdm9sYXRpbGUobG9jayAiY21weGNoZ3EgJTIsJTEiCQkJXAorCQkJICAgICA6ICI9YSIgKF9fcmV0KSwgIittIiAoKl9fcHRyKQkJXAorCQkJICAgICA6ICJyIiAoX19uZXcpLCAiMCIgKF9fb2xkKQkJCVwKIAkJCSAgICAgOiAibWVtb3J5Iik7CQkJCVwKIAkJYnJlYWs7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCiAJZGVmYXVsdDoJCQkJCQkJXAogCQlfX2NtcHhjaGdfd3Jvbmdfc2l6ZSgpOwkJCQkJXAogCX0JCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaAppbmRleCA0NjgxNDU5Li4wYjIwNWI4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCkBAIC02LDcgKzYsNyBAQAogCiAjaW5jbHVkZSA8YXNtL3JlcXVpcmVkLWZlYXR1cmVzLmg+CiAKLSNkZWZpbmUgTkNBUElOVFMJOQkvKiBOIDMyLWJpdCB3b3JkcyB3b3J0aCBvZiBpbmZvICovCisjZGVmaW5lIE5DQVBJTlRTCTEwCS8qIE4gMzItYml0IHdvcmRzIHdvcnRoIG9mIGluZm8gKi8KIAogLyoKICAqIE5vdGU6IElmIHRoZSBjb21tZW50IGJlZ2lucyB3aXRoIGEgcXVvdGVkIHN0cmluZywgdGhhdCBzdHJpbmcgaXMgdXNlZApAQCAtODksNyArODksNyBAQAogI2RlZmluZSBYODZfRkVBVFVSRV9MRkVOQ0VfUkRUU0MgKDMqMzIrMTgpIC8qICIiIExmZW5jZSBzeW5jaHJvbml6ZXMgUkRUU0MgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfMTFBUAkoMyozMisxOSkgLyogIiIgQmFkIGxvY2FsIEFQSUMgYWthIDExQVAgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfTk9QTAkoMyozMisyMCkgLyogVGhlIE5PUEwgKDBGIDFGKSBpbnN0cnVjdGlvbnMgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfQU1EQzFFCSgzKjMyKzIxKSAvKiBBTUQgQzFFIGRldGVjdGVkICovCisJCQkJCSAgLyogMjEgYXZhaWxhYmxlLCB3YXMgQU1EX0MxRSAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9YVE9QT0xPR1kJKDMqMzIrMjIpIC8qIGNwdSB0b3BvbG9neSBlbnVtIGV4dGVuc2lvbnMgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFICgzKjMyKzIzKSAvKiBUU0MgaXMga25vd24gdG8gYmUgcmVsaWFibGUgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfTk9OU1RPUF9UU0MJKDMqMzIrMjQpIC8qIFRTQyBkb2VzIG5vdCBzdG9wIGluIEMgc3RhdGVzICovCkBAIC0xMjQsNiArMTI0LDggQEAKICNkZWZpbmUgWDg2X0ZFQVRVUkVfWFNBVkUJKDQqMzIrMjYpIC8qIFhTQVZFL1hSU1RPUi9YU0VUQlYvWEdFVEJWICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX09TWFNBVkUJKDQqMzIrMjcpIC8qICIiIFhTQVZFIGVuYWJsZWQgaW4gdGhlIE9TICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0FWWAkJKDQqMzIrMjgpIC8qIEFkdmFuY2VkIFZlY3RvciBFeHRlbnNpb25zICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0YxNkMJKDQqMzIrMjkpIC8qIDE2LWJpdCBmcCBjb252ZXJzaW9ucyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9SRFJORAkoNCozMiszMCkgLyogVGhlIFJEUkFORCBpbnN0cnVjdGlvbiAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9IWVBFUlZJU09SCSg0KjMyKzMxKSAvKiBSdW5uaW5nIG9uIGEgaHlwZXJ2aXNvciAqLwogCiAvKiBWSUEvQ3lyaXgvQ2VudGF1ci1kZWZpbmVkIENQVSBmZWF0dXJlcywgQ1BVSUQgbGV2ZWwgMHhDMDAwMDAwMSwgd29yZCA1ICovCkBAIC0xNTcsMjIgKzE1OSwyOSBAQAogCiAvKgogICogQXV4aWxpYXJ5IGZsYWdzOiBMaW51eCBkZWZpbmVkIC0gRm9yIGZlYXR1cmVzIHNjYXR0ZXJlZCBpbiB2YXJpb3VzCi0gKiBDUFVJRCBsZXZlbHMgbGlrZSAweDYsIDB4QSBldGMKKyAqIENQVUlEIGxldmVscyBsaWtlIDB4NiwgMHhBIGV0Yywgd29yZCA3CiAgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfSURBCQkoNyozMisgMCkgLyogSW50ZWwgRHluYW1pYyBBY2NlbGVyYXRpb24gKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfQVJBVAkoNyozMisgMSkgLyogQWx3YXlzIFJ1bm5pbmcgQVBJQyBUaW1lciAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9DUEIJCSg3KjMyKyAyKSAvKiBBTUQgQ29yZSBQZXJmb3JtYW5jZSBCb29zdCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9FUEIJCSg3KjMyKyAzKSAvKiBJQTMyX0VORVJHWV9QRVJGX0JJQVMgc3VwcG9ydCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9YU0FWRU9QVAkoNyozMisgNCkgLyogT3B0aW1pemVkIFhzYXZlICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1BMTgkJKDcqMzIrIDUpIC8qIEludGVsIFBvd2VyIExpbWl0IE5vdGlmaWNhdGlvbiAqLworI2RlZmluZSBYODZfRkVBVFVSRV9QVFMJCSg3KjMyKyA2KSAvKiBJbnRlbCBQYWNrYWdlIFRoZXJtYWwgU3RhdHVzICovCiAKLS8qIFZpcnR1YWxpemF0aW9uIGZsYWdzOiBMaW51eCBkZWZpbmVkICovCisvKiBWaXJ0dWFsaXphdGlvbiBmbGFnczogTGludXggZGVmaW5lZCwgd29yZCA4ICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1RQUl9TSEFET1cgICg4KjMyKyAwKSAvKiBJbnRlbCBUUFIgU2hhZG93ICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1ZOTUkgICAgICAgICg4KjMyKyAxKSAvKiBJbnRlbCBWaXJ0dWFsIE5NSSAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9GTEVYUFJJT1JJVFkgKDgqMzIrIDIpIC8qIEludGVsIEZsZXhQcmlvcml0eSAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9FUFQgICAgICAgICAoOCozMisgMykgLyogSW50ZWwgRXh0ZW5kZWQgUGFnZSBUYWJsZSAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9WUElEICAgICAgICAoOCozMisgNCkgLyogSW50ZWwgVmlydHVhbCBQcm9jZXNzb3IgSUQgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfTlBUCQkoOCozMis1KSAgLyogQU1EIE5lc3RlZCBQYWdlIFRhYmxlIHN1cHBvcnQgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfTEJSVgkoOCozMis2KSAgLyogQU1EIExCUiBWaXJ0dWFsaXphdGlvbiBzdXBwb3J0ICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1NWTUwJKDgqMzIrNykgIC8qICJzdm1fbG9jayIgQU1EIFNWTSBsb2NraW5nIE1TUiAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9OUklQUwkoOCozMis4KSAgLyogIm5yaXBfc2F2ZSIgQU1EIFNWTSBuZXh0X3JpcCBzYXZlICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX05QVAkJKDgqMzIrIDUpIC8qIEFNRCBOZXN0ZWQgUGFnZSBUYWJsZSBzdXBwb3J0ICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0xCUlYJKDgqMzIrIDYpIC8qIEFNRCBMQlIgVmlydHVhbGl6YXRpb24gc3VwcG9ydCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9TVk1MCSg4KjMyKyA3KSAvKiAic3ZtX2xvY2siIEFNRCBTVk0gbG9ja2luZyBNU1IgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTlJJUFMJKDgqMzIrIDgpIC8qICJucmlwX3NhdmUiIEFNRCBTVk0gbmV4dF9yaXAgc2F2ZSAqLworCisvKiBJbnRlbC1kZWZpbmVkIENQVSBmZWF0dXJlcywgQ1BVSUQgbGV2ZWwgMHgwMDAwMDAwNzowIChlYngpLCB3b3JkIDkgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfRlNHU0JBU0UJKDkqMzIrIDApIC8qIHtSRC9XUn17RlMvR1N9QkFTRSBpbnN0cnVjdGlvbnMqLwogCiAjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfX0FTU0VNQkxZX18pCiAKQEAgLTE5NCw3ICsyMDMsOSBAQAogCSAgICgoKGJpdCk+PjUpPT00ICYmICgxVUw8PCgoYml0KSYzMSkgJiBSRVFVSVJFRF9NQVNLNCkpIHx8CVwKIAkgICAoKChiaXQpPj41KT09NSAmJiAoMVVMPDwoKGJpdCkmMzEpICYgUkVRVUlSRURfTUFTSzUpKSB8fAlcCiAJICAgKCgoYml0KT4+NSk9PTYgJiYgKDFVTDw8KChiaXQpJjMxKSAmIFJFUVVJUkVEX01BU0s2KSkgfHwJXAotCSAgICgoKGJpdCk+PjUpPT03ICYmICgxVUw8PCgoYml0KSYzMSkgJiBSRVFVSVJFRF9NQVNLNykpICkJXAorCSAgICgoKGJpdCk+PjUpPT03ICYmICgxVUw8PCgoYml0KSYzMSkgJiBSRVFVSVJFRF9NQVNLNykpIHx8CVwKKwkgICAoKChiaXQpPj41KT09OCAmJiAoMVVMPDwoKGJpdCkmMzEpICYgUkVRVUlSRURfTUFTSzgpKSB8fAlcCisJICAgKCgoYml0KT4+NSk9PTkgJiYgKDFVTDw8KChiaXQpJjMxKSAmIFJFUVVJUkVEX01BU0s5KSkgKQlcCiAJICA/IDEgOgkJCQkJCQkJXAogCSB0ZXN0X2NwdV9jYXAoYywgYml0KSkKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaHdfYnJlYWtwb2ludC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaHdfYnJlYWtwb2ludC5oCmluZGV4IDk0MjI1NTMuLjUyOGExMWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2h3X2JyZWFrcG9pbnQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19icmVha3BvaW50LmgKQEAgLTIwLDEwICsyMCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAogLyogQXZhaWxhYmxlIEhXIGJyZWFrcG9pbnQgbGVuZ3RoIGVuY29kaW5ncyAqLworI2RlZmluZSBYODZfQlJFQUtQT0lOVF9MRU5fWAkJMHgwMAogI2RlZmluZSBYODZfQlJFQUtQT0lOVF9MRU5fMQkJMHg0MAogI2RlZmluZSBYODZfQlJFQUtQT0lOVF9MRU5fMgkJMHg0NAogI2RlZmluZSBYODZfQlJFQUtQT0lOVF9MRU5fNAkJMHg0YwotI2RlZmluZSBYODZfQlJFQUtQT0lOVF9MRU5fRVhFQ1VURQkweDQwCiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAjZGVmaW5lIFg4Nl9CUkVBS1BPSU5UX0xFTl84CQkweDQ4CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oeXBlcnZpc29yLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oeXBlcnZpc29yLmgKaW5kZXggNzBhYmRhNy4uZmYyNTQ2YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaHlwZXJ2aXNvci5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaApAQCAtNDUsNSArNDUsNiBAQAogLyogUmVjb2duaXplZCBoeXBlcnZpc29ycyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBoeXBlcnZpc29yX3g4NiB4ODZfaHlwZXJfdm13YXJlOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBoeXBlcnZpc29yX3g4NiB4ODZfaHlwZXJfbXNfaHlwZXJ2OworZXh0ZXJuIGNvbnN0IHN0cnVjdCBoeXBlcnZpc29yX3g4NiB4ODZfaHlwZXJfeGVuX2h2bTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pMzg3LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pMzg3LmgKaW5kZXggYzk5MWIzYS4uZjFhY2NjNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaTM4Ny5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2kzODcuaApAQCAtMTI3LDYgKzEyNywxNSBAQAogewogCWludCBlcnI7CiAKKwkvKgorCSAqIENsZWFyIHRoZSBieXRlcyBub3QgdG91Y2hlZCBieSB0aGUgZnhzYXZlIGFuZCByZXNlcnZlZAorCSAqIGZvciB0aGUgU1cgdXNhZ2UuCisJICovCisJZXJyID0gX19jbGVhcl91c2VyKCZmeC0+c3dfcmVzZXJ2ZWQsCisJCQkgICBzaXplb2Yoc3RydWN0IF9mcHhfc3dfYnl0ZXMpKTsKKwlpZiAodW5saWtlbHkoZXJyKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKIAlhc20gdm9sYXRpbGUoIjE6ICByZXg2NC9meHNhdmUgKCVbZnhdKVxuXHQiCiAJCSAgICAgIjI6XG4iCiAJCSAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKQEAgLTQ4Miw2ICs0OTEsOCBAQAogCW1lbWNweShkc3QtPnN0YXRlLCBzcmMtPnN0YXRlLCB4c3RhdGVfc2l6ZSk7CiB9CiAKK2V4dGVybiB2b2lkIGZwdV9maW5pdChzdHJ1Y3QgZnB1ICpmcHUpOworCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKICNkZWZpbmUgUFNIVUZCX1hNTTVfWE1NMCAuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweDAwLCAweGM1CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pbnRlbF9zY3VfaXBjLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pbnRlbF9zY3VfaXBjLmgKaW5kZXggNDQ3MGM5YS4uMjlmNjY3OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW50ZWxfc2N1X2lwYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ludGVsX3NjdV9pcGMuaApAQCAtMSw2ICsxLDEyIEBACiAjaWZuZGVmIF9BU01fWDg2X0lOVEVMX1NDVV9JUENfSF8KICNkZWZpbmUgIF9BU01fWDg2X0lOVEVMX1NDVV9JUENfSF8KIAorI2RlZmluZSBJUENNU0dfVlJUQwkweEZBCSAvKiBTZXQgdlJUQyBkZXZpY2UgKi8KKworLyogQ29tbWFuZCBpZCBhc3NvY2lhdGVkIHdpdGggbWVzc2FnZSBJUENNU0dfVlJUQyAqLworI2RlZmluZSBJUENfQ01EX1ZSVENfU0VUVElNRSAgICAgIDEgLyogU2V0IHRpbWUgKi8KKyNkZWZpbmUgSVBDX0NNRF9WUlRDX1NFVEFMQVJNICAgICAyIC8qIFNldCBhbGFybSAqLworCiAvKiBSZWFkIHNpbmdsZSByZWdpc3RlciAqLwogaW50IGludGVsX3NjdV9pcGNfaW9yZWFkOCh1MTYgYWRkciwgdTggKmRhdGEpOwogCkBAIC0yOCwyMCArMzQsNiBAQAogLyogVXBkYXRlIHNpbmdsZSByZWdpc3RlciBiYXNlZCBvbiB0aGUgbWFzayAqLwogaW50IGludGVsX3NjdV9pcGNfdXBkYXRlX3JlZ2lzdGVyKHUxNiBhZGRyLCB1OCBkYXRhLCB1OCBtYXNrKTsKIAotLyoKLSAqIEluZGlyZWN0IHJlZ2lzdGVyIHJlYWQKLSAqIENhbiBiZSB1c2VkIHdoZW4gU0NDQihTeXN0ZW0gQ29udHJvbGxlciBDb25maWd1cmF0aW9uIEJsb2NrKSByZWdpc3RlcgotICogSFJJTShIb25vciBSZXN0cmljdGVkIElQQyBNZXNzYWdlcykgaXMgc2V0IChiaXQgMjMpCi0gKi8KLWludCBpbnRlbF9zY3VfaXBjX3JlZ2lzdGVyX3JlYWQodTMyIGFkZHIsIHUzMiAqZGF0YSk7Ci0KLS8qCi0gKiBJbmRpcmVjdCByZWdpc3RlciB3cml0ZQotICogQ2FuIGJlIHVzZWQgd2hlbiBTQ0NCKFN5c3RlbSBDb250cm9sbGVyIENvbmZpZ3VyYXRpb24gQmxvY2spIHJlZ2lzdGVyCi0gKiBIUklNKEhvbm9yIFJlc3RyaWN0ZWQgSVBDIE1lc3NhZ2VzKSBpcyBzZXQgKGJpdCAyMykKLSAqLwotaW50IGludGVsX3NjdV9pcGNfcmVnaXN0ZXJfd3JpdGUodTMyIGFkZHIsIHUzMiBkYXRhKTsKLQogLyogSXNzdWUgY29tbWFuZHMgdG8gdGhlIFNDVSB3aXRoIG9yIHdpdGhvdXQgZGF0YSAqLwogaW50IGludGVsX3NjdV9pcGNfc2ltcGxlX2NvbW1hbmQoaW50IGNtZCwgaW50IHN1Yik7CiBpbnQgaW50ZWxfc2N1X2lwY19jb21tYW5kKGludCBjbWQsIGludCBzdWIsIHUzMiAqaW4sIGludCBpbmxlbiwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV92ZWN0b3JzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfdmVjdG9ycy5oCmluZGV4IDg3NjdkOTkuLmUyY2EzMDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV92ZWN0b3JzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3ZlY3RvcnMuaApAQCAtMTI1LDYgKzEyNSw5IEBACiAgKi8KICNkZWZpbmUgTUNFX1NFTEZfVkVDVE9SCQkJMHhlYgogCisvKiBYZW4gdmVjdG9yIGNhbGxiYWNrIHRvIHJlY2VpdmUgZXZlbnRzIGluIGEgSFZNIGRvbWFpbiAqLworI2RlZmluZSBYRU5fSFZNX0VWVENITl9DQUxMQkFDSwkJMHhlOQorCiAjZGVmaW5lIE5SX1ZFQ1RPUlMJCQkgMjU2CiAKICNkZWZpbmUgRlBVX0lSUQkJCQkgIDEzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rZ2RiLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rZ2RiLmgKaW5kZXggMDA2ZGEzNi4uMzk2ZjViNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va2dkYi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2tnZGIuaApAQCAtMzksOSArMzksMTEgQEAKIAlHREJfRlMsCQkJLyogMTQgKi8KIAlHREJfR1MsCQkJLyogMTUgKi8KIH07CisjZGVmaW5lIEdEQl9PUklHX0FYCQk0MQorI2RlZmluZSBEQkdfTUFYX1JFR19OVU0JCTE2CiAjZGVmaW5lIE5VTVJFR0JZVEVTCQkoKEdEQl9HUysxKSo0KQogI2Vsc2UgLyogISBDT05GSUdfWDg2XzMyICovCi1lbnVtIHJlZ25hbWVzNjQgeworZW51bSByZWduYW1lcyB7CiAJR0RCX0FYLAkJCS8qIDAgKi8KIAlHREJfQlgsCQkJLyogMSAqLwogCUdEQl9DWCwJCQkvKiAyICovCkBAIC01OSwxNSArNjEsMTUgQEAKIAlHREJfUjE0LAkJLyogMTQgKi8KIAlHREJfUjE1LAkJLyogMTUgKi8KIAlHREJfUEMsCQkJLyogMTYgKi8KKwlHREJfUFMsCQkJLyogMTcgKi8KKwlHREJfQ1MsCQkJLyogMTggKi8KKwlHREJfU1MsCQkJLyogMTkgKi8KIH07Ci0KLWVudW0gcmVnbmFtZXMzMiB7Ci0JR0RCX1BTID0gMzQsCi0JR0RCX0NTLAotCUdEQl9TUywKLX07Ci0jZGVmaW5lIE5VTVJFR0JZVEVTCQkoKEdEQl9TUysxKSo0KQotI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KKyNkZWZpbmUgR0RCX09SSUdfQVgJCTU3CisjZGVmaW5lIERCR19NQVhfUkVHX05VTQkJMjAKKy8qIDE3IDY0IGJpdCByZWdzIGFuZCAzIDMyIGJpdCByZWdzICovCisjZGVmaW5lIE5VTVJFR0JZVEVTCQkoKDE3ICogOCkgKyAoMyAqIDQpKQorI2VuZGlmIC8qICEgQ09ORklHX1g4Nl8zMiAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9rZ2RiX2JyZWFrcG9pbnQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLmgKaW5kZXggZmY5MDA1NS4uNGQ4ZGNiZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLmgKQEAgLTIyLDYgKzIyLDggQEAKICNkZWZpbmUgX19LVk1fSEFWRV9YRU5fSFZNCiAjZGVmaW5lIF9fS1ZNX0hBVkVfVkNQVV9FVkVOVFMKICNkZWZpbmUgX19LVk1fSEFWRV9ERUJVR1JFR1MKKyNkZWZpbmUgX19LVk1fSEFWRV9YU0FWRQorI2RlZmluZSBfX0tWTV9IQVZFX1hDUlMKIAogLyogQXJjaGl0ZWN0dXJhbCBpbnRlcnJ1cHQgbGluZSBjb3VudC4gKi8KICNkZWZpbmUgS1ZNX05SX0lOVEVSUlVQVFMgMjU2CkBAIC0yOTksNCArMzAxLDI0IEBACiAJX191NjQgcmVzZXJ2ZWRbOV07CiB9OwogCisvKiBmb3IgS1ZNX0NBUF9YU0FWRSAqLworc3RydWN0IGt2bV94c2F2ZSB7CisJX191MzIgcmVnaW9uWzEwMjRdOworfTsKKworI2RlZmluZSBLVk1fTUFYX1hDUlMJMTYKKworc3RydWN0IGt2bV94Y3IgeworCV9fdTMyIHhjcjsKKwlfX3UzMiByZXNlcnZlZDsKKwlfX3U2NCB2YWx1ZTsKK307CisKK3N0cnVjdCBrdm1feGNycyB7CisJX191MzIgbnJfeGNyczsKKwlfX3UzMiBmbGFnczsKKwlzdHJ1Y3Qga3ZtX3hjciB4Y3JzW0tWTV9NQVhfWENSU107CisJX191NjQgcGFkZGluZ1sxNl07Cit9OworCiAjZW5kaWYgLyogX0FTTV9YODZfS1ZNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oCmluZGV4IDBiMjcyOWIuLjUxY2ZkNzMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaApAQCAtNTEsOCArNTEsMTAgQEAKICNkZWZpbmUgWDg2RU1VTF9VTkhBTkRMRUFCTEUgICAgMQogLyogVGVybWluYXRlIGVtdWxhdGlvbiBidXQgcmV0dXJuIHN1Y2Nlc3MgdG8gdGhlIGNhbGxlci4gKi8KICNkZWZpbmUgWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQgMiAvKiBwcm9wYWdhdGUgYSBnZW5lcmF0ZWQgZmF1bHQgdG8gZ3Vlc3QgKi8KLSNkZWZpbmUgWDg2RU1VTF9SRVRSWV9JTlNUUiAgICAgMiAvKiByZXRyeSB0aGUgaW5zdHJ1Y3Rpb24gZm9yIHNvbWUgcmVhc29uICovCi0jZGVmaW5lIFg4NkVNVUxfQ01QWENIR19GQUlMRUQgIDIgLyogY21weGNoZyBkaWQgbm90IHNlZSBleHBlY3RlZCB2YWx1ZSAqLworI2RlZmluZSBYODZFTVVMX1JFVFJZX0lOU1RSICAgICAzIC8qIHJldHJ5IHRoZSBpbnN0cnVjdGlvbiBmb3Igc29tZSByZWFzb24gKi8KKyNkZWZpbmUgWDg2RU1VTF9DTVBYQ0hHX0ZBSUxFRCAgNCAvKiBjbXB4Y2hnIGRpZCBub3Qgc2VlIGV4cGVjdGVkIHZhbHVlICovCisjZGVmaW5lIFg4NkVNVUxfSU9fTkVFREVEICAgICAgIDUgLyogSU8gaXMgbmVlZGVkIHRvIGNvbXBsZXRlIGVtdWxhdGlvbiAqLworCiBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIHsKIAkvKgogCSAqIHJlYWRfc3RkOiBSZWFkIGJ5dGVzIG9mIHN0YW5kYXJkIChub24tZW11bGF0ZWQvc3BlY2lhbCkgbWVtb3J5LgpAQCAtOTIsNiArOTQsNyBAQAogCWludCAoKnJlYWRfZW11bGF0ZWQpKHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgICAgdm9pZCAqdmFsLAogCQkJICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCisJCQkgICAgIHVuc2lnbmVkIGludCAqZXJyb3IsCiAJCQkgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIAkvKgpAQCAtMTA0LDYgKzEwNyw3IEBACiAJaW50ICgqd3JpdGVfZW11bGF0ZWQpKHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgICAgIGNvbnN0IHZvaWQgKnZhbCwKIAkJCSAgICAgIHVuc2lnbmVkIGludCBieXRlcywKKwkJCSAgICAgIHVuc2lnbmVkIGludCAqZXJyb3IsCiAJCQkgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiAJLyoKQEAgLTExOCw2ICsxMjIsNyBAQAogCQkJCWNvbnN0IHZvaWQgKm9sZCwKIAkJCQljb25zdCB2b2lkICpuZXcsCiAJCQkJdW5zaWduZWQgaW50IGJ5dGVzLAorCQkJCXVuc2lnbmVkIGludCAqZXJyb3IsCiAJCQkJc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogCWludCAoKnBpb19pbl9lbXVsYXRlZCkoaW50IHNpemUsIHVuc2lnbmVkIHNob3J0IHBvcnQsIHZvaWQgKnZhbCwKQEAgLTEzMiwxOCArMTM3LDI2IEBACiAJCQkJICAgICAgaW50IHNlZywgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAl1MTYgKCpnZXRfc2VnbWVudF9zZWxlY3RvcikoaW50IHNlZywgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAl2b2lkICgqc2V0X3NlZ21lbnRfc2VsZWN0b3IpKHUxNiBzZWwsIGludCBzZWcsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisJdW5zaWduZWQgbG9uZyAoKmdldF9jYWNoZWRfc2VnbWVudF9iYXNlKShpbnQgc2VnLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCXZvaWQgKCpnZXRfZ2R0KShzdHJ1Y3QgZGVzY19wdHIgKmR0LCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCXVsb25nICgqZ2V0X2NyKShpbnQgY3IsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci0Jdm9pZCAoKnNldF9jcikoaW50IGNyLCB1bG9uZyB2YWwsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisJaW50ICgqc2V0X2NyKShpbnQgY3IsIHVsb25nIHZhbCwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAlpbnQgKCpjcGwpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci0Jdm9pZCAoKnNldF9yZmxhZ3MpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyByZmxhZ3MpOworCWludCAoKmdldF9kcikoaW50IGRyLCB1bnNpZ25lZCBsb25nICpkZXN0LCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCWludCAoKnNldF9kcikoaW50IGRyLCB1bnNpZ25lZCBsb25nIHZhbHVlLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCWludCAoKnNldF9tc3IpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcl9pbmRleCwgdTY0IGRhdGEpOworCWludCAoKmdldF9tc3IpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcl9pbmRleCwgdTY0ICpwZGF0YSk7CiB9OwogCiAvKiBUeXBlLCBhZGRyZXNzLW9mLCBhbmQgdmFsdWUgb2YgYW4gaW5zdHJ1Y3Rpb24ncyBvcGVyYW5kLiAqLwogc3RydWN0IG9wZXJhbmQgewogCWVudW0geyBPUF9SRUcsIE9QX01FTSwgT1BfSU1NLCBPUF9OT05FIH0gdHlwZTsKIAl1bnNpZ25lZCBpbnQgYnl0ZXM7Ci0JdW5zaWduZWQgbG9uZyB2YWwsIG9yaWdfdmFsLCAqcHRyOworCXVuc2lnbmVkIGxvbmcgb3JpZ192YWwsICpwdHI7CisJdW5pb24geworCQl1bnNpZ25lZCBsb25nIHZhbDsKKwkJY2hhciB2YWxwdHJbc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICsgMl07CisJfTsKIH07CiAKIHN0cnVjdCBmZXRjaF9jYWNoZSB7CkBAIC0xODYsNiArMTk5LDcgQEAKIAl1bnNpZ25lZCBsb25nIG1vZHJtX3ZhbDsKIAlzdHJ1Y3QgZmV0Y2hfY2FjaGUgZmV0Y2g7CiAJc3RydWN0IHJlYWRfY2FjaGUgaW9fcmVhZDsKKwlzdHJ1Y3QgcmVhZF9jYWNoZSBtZW1fcmVhZDsKIH07CiAKIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0IHsKQEAgLTIwMiw2ICsyMTYsMTIgQEAKIAlpbnQgaW50ZXJydXB0aWJpbGl0eTsKIAogCWJvb2wgcmVzdGFydDsgLyogcmVzdGFydCBzdHJpbmcgaW5zdHJ1Y3Rpb24gYWZ0ZXIgd3JpdGViYWNrICovCisKKwlpbnQgZXhjZXB0aW9uOyAvKiBleGNlcHRpb24gdGhhdCBoYXBwZW5zIGR1cmluZyBlbXVsYXRpb24gb3IgLTEgKi8KKwl1MzIgZXJyb3JfY29kZTsgLyogZXJyb3IgY29kZSBmb3IgZXhjZXB0aW9uICovCisJYm9vbCBlcnJvcl9jb2RlX3ZhbGlkOworCXVuc2lnbmVkIGxvbmcgY3IyOyAvKiBmYXVsdGVkIGFkZHJlc3MgaW4gY2FzZSBvZiAjUEYgKi8KKwogCS8qIGRlY29kZSBjYWNoZSAqLwogCXN0cnVjdCBkZWNvZGVfY2FjaGUgZGVjb2RlOwogfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDc2ZjU0ODMuLjUwMmU1M2YgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW11X25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KIAogI2luY2x1ZGUgPGxpbnV4L2t2bS5oPgogI2luY2x1ZGUgPGxpbnV4L2t2bV9wYXJhLmg+CkBAIC0zOSwxMSArNDAsMTQgQEAKIAkJCQkgIDB4RkZGRkZGMDAwMDAwMDAwMFVMTCkKIAogI2RlZmluZSBJTlZBTElEX1BBR0UgKH4oaHBhX3QpMCkKKyNkZWZpbmUgVkFMSURfUEFHRSh4KSAoKHgpICE9IElOVkFMSURfUEFHRSkKKwogI2RlZmluZSBVTk1BUFBFRF9HVkEgKH4oZ3BhX3QpMCkKIAogLyogS1ZNIEh1Z2VwYWdlIGRlZmluaXRpb25zIGZvciB4ODYgKi8KICNkZWZpbmUgS1ZNX05SX1BBR0VfU0laRVMJMwotI2RlZmluZSBLVk1fSFBBR0VfU0hJRlQoeCkJKFBBR0VfU0hJRlQgKyAoKCh4KSAtIDEpICogOSkpCisjZGVmaW5lIEtWTV9IUEFHRV9HRk5fU0hJRlQoeCkJKCgoeCkgLSAxKSAqIDkpCisjZGVmaW5lIEtWTV9IUEFHRV9TSElGVCh4KQkoUEFHRV9TSElGVCArIEtWTV9IUEFHRV9HRk5fU0hJRlQoeCkpCiAjZGVmaW5lIEtWTV9IUEFHRV9TSVpFKHgpCSgxVUwgPDwgS1ZNX0hQQUdFX1NISUZUKHgpKQogI2RlZmluZSBLVk1fSFBBR0VfTUFTSyh4KQkofihLVk1fSFBBR0VfU0laRSh4KSAtIDEpKQogI2RlZmluZSBLVk1fUEFHRVNfUEVSX0hQQUdFKHgpCShLVk1fSFBBR0VfU0laRSh4KSAvIFBBR0VfU0laRSkKQEAgLTY5LDggKzczLDYgQEAKIAogI2RlZmluZSBJT1BMX1NISUZUIDEyCiAKLSNkZWZpbmUgS1ZNX0FMSUFTX1NMT1RTIDQKLQogI2RlZmluZSBLVk1fUEVSTUlMTEVfTU1VX1BBR0VTIDIwCiAjZGVmaW5lIEtWTV9NSU5fQUxMT0NfTU1VX1BBR0VTIDY0CiAjZGVmaW5lIEtWTV9NTVVfSEFTSF9TSElGVCAxMApAQCAtMjQxLDcgKzI0Myw3IEBACiAJdm9pZCAoKnByZWZldGNoX3BhZ2UpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCSAgICAgIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnBhZ2UpOwogCWludCAoKnN5bmNfcGFnZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKTsKKwkJCSBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwgYm9vbCBjbGVhcl91bnN5bmMpOwogCXZvaWQgKCppbnZscGcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhKTsKIAlocGFfdCByb290X2hwYTsKIAlpbnQgcm9vdF9sZXZlbDsKQEAgLTMwMSw4ICszMDMsOCBAQAogCQl1bnNpZ25lZCBsb25nIG1tdV9zZXE7CiAJfSB1cGRhdGVfcHRlOwogCi0Jc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCBob3N0X2Z4X2ltYWdlOwotCXN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QgZ3Vlc3RfZnhfaW1hZ2U7CisJc3RydWN0IGZwdSBndWVzdF9mcHU7CisJdTY0IHhjcjA7CiAKIAlndmFfdCBtbWlvX2ZhdWx0X2NyMjsKIAlzdHJ1Y3Qga3ZtX3Bpb19yZXF1ZXN0IHBpbzsKQEAgLTM2MCwyNiArMzYyLDExIEBACiAKIAkvKiBmaWVsZHMgdXNlZCBieSBIWVBFUi1WIGVtdWxhdGlvbiAqLwogCXU2NCBodl92YXBpYzsKLX07CiAKLXN0cnVjdCBrdm1fbWVtX2FsaWFzIHsKLQlnZm5fdCBiYXNlX2dmbjsKLQl1bnNpZ25lZCBsb25nIG5wYWdlczsKLQlnZm5fdCB0YXJnZXRfZ2ZuOwotI2RlZmluZSBLVk1fQUxJQVNfSU5WQUxJRCAgICAgMVVMCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLX07Ci0KLSNkZWZpbmUgS1ZNX0FSQ0hfSEFTX1VOQUxJQVNfSU5TVEFOVElBVElPTgotCi1zdHJ1Y3Qga3ZtX21lbV9hbGlhc2VzIHsKLQlzdHJ1Y3Qga3ZtX21lbV9hbGlhcyBhbGlhc2VzW0tWTV9BTElBU19TTE9UU107Ci0JaW50IG5hbGlhc2VzOworCWNwdW1hc2tfdmFyX3Qgd2JpbnZkX2RpcnR5X21hc2s7CiB9OwogCiBzdHJ1Y3Qga3ZtX2FyY2ggewotCXN0cnVjdCBrdm1fbWVtX2FsaWFzZXMgKmFsaWFzZXM7Ci0KIAl1bnNpZ25lZCBpbnQgbl9mcmVlX21tdV9wYWdlczsKIAl1bnNpZ25lZCBpbnQgbl9yZXF1ZXN0ZWRfbW11X3BhZ2VzOwogCXVuc2lnbmVkIGludCBuX2FsbG9jX21tdV9wYWdlczsKQEAgLTUzMyw2ICs1MjAsOCBAQAogCiAJdm9pZCAoKnNldF9zdXBwb3J0ZWRfY3B1aWQpKHUzMiBmdW5jLCBzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqZW50cnkpOwogCisJYm9vbCAoKmhhc193YmludmRfZXhpdCkodm9pZCk7CisKIAljb25zdCBzdHJ1Y3QgdHJhY2VfcHJpbnRfZmxhZ3MgKmV4aXRfcmVhc29uc19zdHI7CiB9OwogCkBAIC01NzYsNyArNTY1LDYgQEAKICNkZWZpbmUgRU1VTFRZUEVfU0tJUAkJICAgICgxIDw8IDIpCiBpbnQgZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQl1bnNpZ25lZCBsb25nIGNyMiwgdTE2IGVycm9yX2NvZGUsIGludCBlbXVsYXRpb25fdHlwZSk7Ci12b2lkIGt2bV9yZXBvcnRfZW11bGF0aW9uX2ZhaWx1cmUoc3RydWN0IGt2bV92Y3B1ICpjdnB1LCBjb25zdCBjaGFyICpjb250ZXh0KTsKIHZvaWQgcmVhbG1vZGVfbGdkdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBzaXplLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwogdm9pZCByZWFsbW9kZV9saWR0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IHNpemUsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CiAKQEAgLTU5MSwxMCArNTc5LDcgQEAKIGludCBrdm1fZW11bGF0ZV9oYWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQgZW11bGF0ZV9pbnZscGcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBhZGRyZXNzKTsKIGludCBlbXVsYXRlX2NsdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLWludCBlbXVsYXRvcl9nZXRfZHIoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGludCBkciwKLQkJICAgIHVuc2lnbmVkIGxvbmcgKmRlc3QpOwotaW50IGVtdWxhdG9yX3NldF9kcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IGRyLAotCQkgICAgdW5zaWduZWQgbG9uZyB2YWx1ZSk7CitpbnQga3ZtX2VtdWxhdGVfd2JpbnZkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIHZvaWQga3ZtX2dldF9zZWdtZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zZWdtZW50ICp2YXIsIGludCBzZWcpOwogaW50IGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBzZWxlY3RvciwgaW50IHNlZyk7CkBAIC02MDIsMTUgKzU4NywxNiBAQAogaW50IGt2bV90YXNrX3N3aXRjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiB0c3Nfc2VsZWN0b3IsIGludCByZWFzb24sCiAJCSAgICBib29sIGhhc19lcnJvcl9jb2RlLCB1MzIgZXJyb3JfY29kZSk7CiAKLXZvaWQga3ZtX3NldF9jcjAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMCk7Ci12b2lkIGt2bV9zZXRfY3IzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjMpOwotdm9pZCBrdm1fc2V0X2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KTsKK2ludCBrdm1fc2V0X2NyMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IwKTsKK2ludCBrdm1fc2V0X2NyMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IzKTsKK2ludCBrdm1fc2V0X2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KTsKIHZvaWQga3ZtX3NldF9jcjgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyOCk7CiBpbnQga3ZtX3NldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkciwgdW5zaWduZWQgbG9uZyB2YWwpOwogaW50IGt2bV9nZXRfZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZHIsIHVuc2lnbmVkIGxvbmcgKnZhbCk7CiB1bnNpZ25lZCBsb25nIGt2bV9nZXRfY3I4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIGt2bV9sbXN3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBtc3cpOwogdm9pZCBrdm1fZ2V0X2NzX2RiX2xfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCAqZGIsIGludCAqbCk7CitpbnQga3ZtX3NldF94Y3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaW5kZXgsIHU2NCB4Y3IpOwogCiBpbnQga3ZtX2dldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0ICpwZGF0YSk7CiBpbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0IGRhdGEpOwpAQCAtNjMwLDEyICs2MTYsNyBAQAogCiB2b2lkIGt2bV9pbmplY3Rfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKLXZvaWQgZnhfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotCi1pbnQgZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQodW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgIGNvbnN0IHZvaWQgKnZhbCwKLQkJCSAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCi0JCQkgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2ludCBmeF9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIHZvaWQga3ZtX21tdV9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX21tdV9wdGVfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsCkBAIC02NjQsOCArNjQ1LDYgQEAKIGludCBjb21wbGV0ZV9waW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGJvb2wga3ZtX2NoZWNrX2lvcGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAotc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqZ2ZuX3RvX21lbXNsb3RfdW5hbGlhc2VkKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKTsKLQogc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpwYWdlX2hlYWRlcihocGFfdCBzaGFkb3dfcGFnZSkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHNoYWRvd19wYWdlID4+IFBBR0VfU0hJRlQpOwpAQCAtNzE5LDIxICs2OTgsNiBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZnhfc2F2ZShzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0ICppbWFnZSkKLXsKLQlhc20oImZ4c2F2ZSAoJTApIjo6ICJyIiAoaW1hZ2UpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGt2bV9meF9yZXN0b3JlKHN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QgKmltYWdlKQotewotCWFzbSgiZnhyc3RvciAoJTApIjo6ICJyIiAoaW1hZ2UpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGt2bV9meF9maW5pdCh2b2lkKQotewotCWFzbSgiZmluaXQiKTsKLX0KLQogc3RhdGljIGlubGluZSB1MzIgZ2V0X3JkeF9pbml0X3ZhbCh2b2lkKQogewogCXJldHVybiAweDYwMDsgLyogUDYgZmFtaWx5ICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9sb2NhbDY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9sb2NhbDY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjOTNiNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2xvY2FsNjQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWw2NC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXJzdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXJzdC5oCmluZGV4IDQ1MWQzMGUuLjE2MzUwNzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21yc3QuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tcnN0LmgKQEAgLTEzLDYgKzEzLDMyIEBACiBleHRlcm4gaW50IHBjaV9tcnN0X2luaXQodm9pZCk7CiBpbnQgX19pbml0IHNmaV9wYXJzZV9tcnRjKHN0cnVjdCBzZmlfdGFibGVfaGVhZGVyICp0YWJsZSk7CiAKKy8qCisgKiBNZWRmaWVsZCBpcyB0aGUgZm9sbG93LXVwIG9mIE1vb3Jlc3Rvd24sIGl0IGNvbWJpbmVzIHR3byBjaGlwIHNvbHV0aW9uIGludG8KKyAqIG9uZS4gT3RoZXIgdGhhbiB0aGF0IGl0IGFsc28gYWRkZWQgYWx3YXlzLW9uIGFuZCBjb25zdGFudCB0c2MgYW5kIGxhcGljCisgKiB0aW1lcnMuIE1lZGZpZWxkIGlzIHRoZSBwbGF0Zm9ybSBuYW1lLCBhbmQgdGhlIGNoaXAgbmFtZSBpcyBjYWxsZWQgUGVud2VsbAorICogd2UgdHJlYXQgTWVkZmllbGQvUGVud2VsbCBhcyBhIHZhcmlhbnQgb2YgTW9vcmVzdG93bi4gUGVud2VsbCBjYW4gYmUKKyAqIGlkZW50aWZpZWQgdmlhIE1TUnMuCisgKi8KK2VudW0gbXJzdF9jcHVfdHlwZSB7CisJTVJTVF9DUFVfQ0hJUF9MSU5DUk9GVCA9IDEsCisJTVJTVF9DUFVfQ0hJUF9QRU5XRUxMLAorfTsKKworZXh0ZXJuIGVudW0gbXJzdF9jcHVfdHlwZSBfX21yc3RfY3B1X2NoaXA7CitzdGF0aWMgZW51bSBtcnN0X2NwdV90eXBlIG1yc3RfaWRlbnRpZnlfY3B1KHZvaWQpCit7CisJcmV0dXJuIF9fbXJzdF9jcHVfY2hpcDsKK30KKworZW51bSBtcnN0X3RpbWVyX29wdGlvbnMgeworCU1SU1RfVElNRVJfREVGQVVMVCwKKwlNUlNUX1RJTUVSX0FQQlRfT05MWSwKKwlNUlNUX1RJTUVSX0xBUElDX0FQQlQsCit9OworCitleHRlcm4gZW51bSBtcnN0X3RpbWVyX29wdGlvbnMgbXJzdF90aW1lcl9vcHRpb25zOworCiAjZGVmaW5lIFNGSV9NVE1SX01BWF9OVU0gOAogI2RlZmluZSBTRklfTVJUQ19NQVgJOAogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCmluZGV4IDhjN2FlNDMuLjY1YmJlYzIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCkBAIC0yMCw2ICsyMCw3IEBACiAjZGVmaW5lIF9FRkVSX0xNQQkJMTAgLyogTG9uZyBtb2RlIGFjdGl2ZSAocmVhZC1vbmx5KSAqLwogI2RlZmluZSBfRUZFUl9OWAkJMTEgLyogTm8gZXhlY3V0ZSBlbmFibGUgKi8KICNkZWZpbmUgX0VGRVJfU1ZNRQkJMTIgLyogRW5hYmxlIHZpcnR1YWxpemF0aW9uICovCisjZGVmaW5lIF9FRkVSX0xNU0xFCQkxMyAvKiBMb25nIE1vZGUgU2VnbWVudCBMaW1pdCBFbmFibGUgKi8KICNkZWZpbmUgX0VGRVJfRkZYU1IJCTE0IC8qIEVuYWJsZSBGYXN0IEZYU0FWRS9GWFJTVE9SICovCiAKICNkZWZpbmUgRUZFUl9TQ0UJCSgxPDxfRUZFUl9TQ0UpCkBAIC0yNyw2ICsyOCw3IEBACiAjZGVmaW5lIEVGRVJfTE1BCQkoMTw8X0VGRVJfTE1BKQogI2RlZmluZSBFRkVSX05YCQkJKDE8PF9FRkVSX05YKQogI2RlZmluZSBFRkVSX1NWTUUJCSgxPDxfRUZFUl9TVk1FKQorI2RlZmluZSBFRkVSX0xNU0xFCQkoMTw8X0VGRVJfTE1TTEUpCiAjZGVmaW5lIEVGRVJfRkZYU1IJCSgxPDxfRUZFUl9GRlhTUikKIAogLyogSW50ZWwgTVNScy4gU29tZSBhbHNvIGF2YWlsYWJsZSBvbiBvdGhlciBDUFVzICovCkBAIC0xNTksOCArMTYxLDYgQEAKICNkZWZpbmUgTVNSX0s3X0ZJRF9WSURfU1RBVFVTCQkweGMwMDEwMDQyCiAKIC8qIEs2IE1TUnMgKi8KLSNkZWZpbmUgTVNSX0s2X0VGRVIJCQkweGMwMDAwMDgwCi0jZGVmaW5lIE1TUl9LNl9TVEFSCQkJMHhjMDAwMDA4MQogI2RlZmluZSBNU1JfSzZfV0hDUgkJCTB4YzAwMDAwODIKICNkZWZpbmUgTVNSX0s2X1VXQ0NSCQkJMHhjMDAwMDA4NQogI2RlZmluZSBNU1JfSzZfRVBNUgkJCTB4YzAwMDAwODYKQEAgLTIyNCwxMiArMjI0LDE0IEBACiAjZGVmaW5lIE1TUl9JQTMyX1RIRVJNX0NPTlRST0wJCTB4MDAwMDAxOWEKICNkZWZpbmUgTVNSX0lBMzJfVEhFUk1fSU5URVJSVVBUCTB4MDAwMDAxOWIKIAotI2RlZmluZSBUSEVSTV9JTlRfTE9XX0VOQUJMRQkJKDEgPDwgMCkKLSNkZWZpbmUgVEhFUk1fSU5UX0hJR0hfRU5BQkxFCQkoMSA8PCAxKQorI2RlZmluZSBUSEVSTV9JTlRfSElHSF9FTkFCTEUJCSgxIDw8IDApCisjZGVmaW5lIFRIRVJNX0lOVF9MT1dfRU5BQkxFCQkoMSA8PCAxKQorI2RlZmluZSBUSEVSTV9JTlRfUExOX0VOQUJMRQkJKDEgPDwgMjQpCiAKICNkZWZpbmUgTVNSX0lBMzJfVEhFUk1fU1RBVFVTCQkweDAwMDAwMTljCiAKICNkZWZpbmUgVEhFUk1fU1RBVFVTX1BST0NIT1QJCSgxIDw8IDApCisjZGVmaW5lIFRIRVJNX1NUQVRVU19QT1dFUl9MSU1JVAkoMSA8PCAxMCkKIAogI2RlZmluZSBNU1JfVEhFUk0yX0NUTAkJCTB4MDAwMDAxOWQKIApAQCAtMjM5LDYgKzI0MSwxOSBAQAogCiAjZGVmaW5lIE1TUl9JQTMyX1RFTVBFUkFUVVJFX1RBUkdFVAkweDAwMDAwMWEyCiAKKyNkZWZpbmUgTVNSX0lBMzJfRU5FUkdZX1BFUkZfQklBUwkweDAwMDAwMWIwCisKKyNkZWZpbmUgTVNSX0lBMzJfUEFDS0FHRV9USEVSTV9TVEFUVVMJCTB4MDAwMDAxYjEKKworI2RlZmluZSBQQUNLQUdFX1RIRVJNX1NUQVRVU19QUk9DSE9UCQkoMSA8PCAwKQorI2RlZmluZSBQQUNLQUdFX1RIRVJNX1NUQVRVU19QT1dFUl9MSU1JVAkoMSA8PCAxMCkKKworI2RlZmluZSBNU1JfSUEzMl9QQUNLQUdFX1RIRVJNX0lOVEVSUlVQVAkweDAwMDAwMWIyCisKKyNkZWZpbmUgUEFDS0FHRV9USEVSTV9JTlRfSElHSF9FTkFCTEUJCSgxIDw8IDApCisjZGVmaW5lIFBBQ0tBR0VfVEhFUk1fSU5UX0xPV19FTkFCTEUJCSgxIDw8IDEpCisjZGVmaW5lIFBBQ0tBR0VfVEhFUk1fSU5UX1BMTl9FTkFCTEUJCSgxIDw8IDI0KQorCiAvKiBNSVNDX0VOQUJMRSBiaXRzOiBhcmNoaXRlY3R1cmFsICovCiAjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX0ZBU1RfU1RSSU5HCSgxVUxMIDw8IDApCiAjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX1RDQwkJKDFVTEwgPDwgMSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLmgKaW5kZXggYzViYzRjMi4uMDg0ZWY5NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLmgKQEAgLTE0OCw4ICsxNDgsOCBAQAogI2RlZmluZSByZG1zcihtc3IsIHZhbDEsIHZhbDIpCQkJCQlcCiBkbyB7CQkJCQkJCQlcCiAJdTY0IF9fdmFsID0gbmF0aXZlX3JlYWRfbXNyKChtc3IpKTsJCQlcCi0JKHZhbDEpID0gKHUzMilfX3ZhbDsJCQkJCVwKLQkodmFsMikgPSAodTMyKShfX3ZhbCA+PiAzMik7CQkJCVwKKwkodm9pZCkoKHZhbDEpID0gKHUzMilfX3ZhbCk7CQkJCVwKKwkodm9pZCkoKHZhbDIpID0gKHUzMikoX192YWwgPj4gMzIpKTsJCQlcCiB9IHdoaWxlICgwKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgd3Jtc3IodW5zaWduZWQgbXNyLCB1bnNpZ25lZCBsb3csIHVuc2lnbmVkIGhpZ2gpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ubWkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL25taS5oCmluZGV4IDkzZGE5YzMuLjkzMmYwZjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL25taS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL25taS5oCkBAIC0xNyw3ICsxNyw5IEBACiAKIGV4dGVybiB2b2lkIGRpZV9ubWkoY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGRvX3BhbmljKTsKIGV4dGVybiBpbnQgY2hlY2tfbm1pX3dhdGNoZG9nKHZvaWQpOworI2lmICFkZWZpbmVkKENPTkZJR19MT0NLVVBfREVURUNUT1IpCiBleHRlcm4gaW50IG5taV93YXRjaGRvZ19lbmFibGVkOworI2VuZGlmCiBleHRlcm4gaW50IGF2YWlsX3RvX3Jlc3J2X3BlcmZjdHJfbm1pX2JpdCh1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIGludCByZXNlcnZlX3BlcmZjdHJfbm1pKHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCByZWxlYXNlX3BlcmZjdHJfbm1pKHVuc2lnbmVkIGludCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfeDg2LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfeDg2LmgKaW5kZXggY2QyYTMxZC4uNDljNzIxOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpX3g4Ni5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaV94ODYuaApAQCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBQQ0lfSEFTX0lPX0VDUwkJMHg0MDAwMAogI2RlZmluZSBQQ0lfTk9BU1NJR05fUk9NUwkweDgwMDAwCiAjZGVmaW5lIFBDSV9ST09UX05PX0NSUwkJMHgxMDAwMDAKKyNkZWZpbmUgUENJX05PQVNTSUdOX0JBUlMJMHgyMDAwMDAKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBwY2lfcHJvYmU7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBwaXJxX3RhYmxlX2FkZHI7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKaW5kZXggMjU0ODgzZC4uNmU3NDJjYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaApAQCAtNjgsOCArNjgsOSBAQAogCiB1bmlvbiBjcHVpZDEwX2VkeCB7CiAJc3RydWN0IHsKLQkJdW5zaWduZWQgaW50IG51bV9jb3VudGVyc19maXhlZDo0OwotCQl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQ6Mjg7CisJCXVuc2lnbmVkIGludCBudW1fY291bnRlcnNfZml4ZWQ6NTsKKwkJdW5zaWduZWQgaW50IGJpdF93aWR0aF9maXhlZDo4OworCQl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQ6MTk7CiAJfSBzcGxpdDsKIAl1bnNpZ25lZCBpbnQgZnVsbDsKIH07CkBAIC0xNDAsNiArMTQxLDE5IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBwZXJmX21pc2NfZmxhZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogI2RlZmluZSBwZXJmX21pc2NfZmxhZ3MocmVncykJcGVyZl9taXNjX2ZsYWdzKHJlZ3MpCiAKKyNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgorCisvKgorICogV2UgYWJ1c2UgYml0IDMgZnJvbSBmbGFncyB0byBwYXNzIGV4YWN0IGluZm9ybWF0aW9uLCBzZWUgcGVyZl9taXNjX2ZsYWdzCisgKiBhbmQgdGhlIGNvbW1lbnQgd2l0aCBQRVJGX0VGTEFHU19FWEFDVC4KKyAqLworI2RlZmluZSBwZXJmX2FyY2hfZmV0Y2hfY2FsbGVyX3JlZ3MocmVncywgX19pcCkJCXsJXAorCShyZWdzKS0+aXAgPSAoX19pcCk7CQkJCQlcCisJKHJlZ3MpLT5icCA9IGNhbGxlcl9mcmFtZV9wb2ludGVyKCk7CQkJXAorCShyZWdzKS0+Y3MgPSBfX0tFUk5FTF9DUzsJCQkJXAorCXJlZ3MtPmZsYWdzID0gMDsJCQkJCVwKK30KKwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2h3X3BlcmZfZXZlbnRzKHZvaWQpCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50c19sYXBpY19pbml0KHZvaWQpCXsgfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudF9wNC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudF9wNC5oCmluZGV4IDY0YThlYmYuLmRlZjUwMDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnRfcDQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50X3A0LmgKQEAgLTE5LDcgKzE5LDYgQEAKICNkZWZpbmUgQVJDSF9QNF9SRVNFUlZFRF9FU0NSCSgyKSAvKiBJUV9FU0NSKDAsMSkgbm90IGFsd2F5cyBwcmVzZW50ICovCiAjZGVmaW5lIEFSQ0hfUDRfTUFYX0VTQ1IJKEFSQ0hfUDRfVE9UQUxfRVNDUiAtIEFSQ0hfUDRfUkVTRVJWRURfRVNDUikKICNkZWZpbmUgQVJDSF9QNF9NQVhfQ0NDUgkoMTgpCi0jZGVmaW5lIEFSQ0hfUDRfTUFYX0NPVU5URVIJKEFSQ0hfUDRfTUFYX0NDQ1IgLyAyKQogCiAjZGVmaW5lIFA0X0VTQ1JfRVZFTlRfTUFTSwkweDdlMDAwMDAwVQogI2RlZmluZSBQNF9FU0NSX0VWRU5UX1NISUZUCTI1CkBAIC03MSwxMCArNzAsNiBAQAogI2RlZmluZSBQNF9DQ0NSX1RIUkVTSE9MRCh2KQkJKCh2KSA8PCBQNF9DQ0NSX1RIUkVTSE9MRF9TSElGVCkKICNkZWZpbmUgUDRfQ0NDUl9FU0VMKHYpCQkJKCh2KSA8PCBQNF9DQ0NSX0VTQ1JfU0VMRUNUX1NISUZUKQogCi0vKiBDdXN0b20gYml0cyBpbiByZWVydmVkIENDQ1IgYXJlYSAqLwotI2RlZmluZSBQNF9DQ0NSX0NBQ0hFX09QU19NQVNLCQkweDAwMDAwMDNmVQotCi0KIC8qIE5vbiBIVCBtYXNrICovCiAjZGVmaW5lIFA0X0NDQ1JfTUFTSwkJCQlcCiAJKFA0X0NDQ1JfT1ZGCQkJfAlcCkBAIC0xMDYsOCArMTAxLDcgQEAKICAqIEVTQ1IgYW5kIENDQ1IgYnV0IHJhdGhlciBhbiBvbmx5IHBhY2tlZCB2YWx1ZSBzaG91bGQKICAqIGJlIHVucGFja2VkIGFuZCB3cml0dGVuIHRvIGEgcHJvcGVyIGFkZHJlc3NlcwogICoKLSAqIHRoZSBiYXNlIGlkZWEgaXMgdG8gcGFjayBhcyBtdWNoIGluZm8gYXMKLSAqIHBvc3NpYmxlCisgKiB0aGUgYmFzZSBpZGVhIGlzIHRvIHBhY2sgYXMgbXVjaCBpbmZvIGFzIHBvc3NpYmxlCiAgKi8KICNkZWZpbmUgcDRfY29uZmlnX3BhY2tfZXNjcih2KQkJKCgodTY0KSh2KSkgPDwgMzIpCiAjZGVmaW5lIHA0X2NvbmZpZ19wYWNrX2NjY3IodikJCSgoKHU2NCkodikpICYgMHhmZmZmZmZmZlVMTCkKQEAgLTEzMCw4ICsxMjQsNiBAQAogCQl0OwkJCQkJXAogCX0pCiAKLSNkZWZpbmUgcDRfY29uZmlnX3VucGFja19jYWNoZV9ldmVudCh2KQkoKCh1NjQpKHYpKSAmIFA0X0NDQ1JfQ0FDSEVfT1BTX01BU0spCi0KICNkZWZpbmUgUDRfQ09ORklHX0hUX1NISUZUCQk2MwogI2RlZmluZSBQNF9DT05GSUdfSFQJCQkoMVVMTCA8PCBQNF9DT05GSUdfSFRfU0hJRlQpCiAKQEAgLTIxNCw2ICsyMDYsMTIgQEAKIAlyZXR1cm4gZXNjcjsKIH0KIAorLyoKKyAqIFRoaXMgYXJlIHRoZSBldmVudHMgd2hpY2ggc2hvdWxkIGJlIHVzZWQgaW4gIkV2ZW50IFNlbGVjdCIKKyAqIGZpZWxkIG9mIEVTQ1IgcmVnaXN0ZXIsIHRoZXkgYXJlIGxpa2UgdW5pcXVlIGtleXMgd2hpY2ggYWxsb3cKKyAqIHRoZSBrZXJuZWwgdG8gZGV0ZXJtaW5hdGUgd2hpY2ggQ0NDUiBhbmQgQ09VTlRFUiBzaG91bGQgYmUKKyAqIHVzZWQgdG8gdHJhY2sgYW4gZXZlbnQKKyAqLwogZW51bSBQNF9FVkVOVFMgewogCVA0X0VWRU5UX1RDX0RFTElWRVJfTU9ERSwKIAlQNF9FVkVOVF9CUFVfRkVUQ0hfUkVRVUVTVCwKQEAgLTU2MSw3ICs1NTksNyBAQAogICogYSBjYWxsZXIgc2hvdWxkIHVzZSBQNF9FU0NSX0VNQVNLX05BTUUgaGVscGVyIHRvCiAgKiBwaWNrIHRoZSBFdmVudE1hc2sgbmVlZGVkLCBmb3IgZXhhbXBsZQogICoKLSAqCVA0X0VTQ1JfRU1BU0tfTkFNRShQNF9FVkVOVF9UQ19ERUxJVkVSX01PREUsIEREKQorICoJUDRfRVNDUl9FTUFTS19CSVQoUDRfRVZFTlRfVENfREVMSVZFUl9NT0RFLCBERCkKICAqLwogZW51bSBQNF9FU0NSX0VNQVNLUyB7CiAJUDRfR0VOX0VTQ1JfRU1BU0soUDRfRVZFTlRfVENfREVMSVZFUl9NT0RFLCBERCwgMCksCkBAIC03NTMsNDMgKzc1MSw1MCBAQAogCVA0X0dFTl9FU0NSX0VNQVNLKFA0X0VWRU5UX0lOU1RSX0NPTVBMRVRFRCwgQk9HVVMsIDEpLAogfTsKIAotLyogUDQgUEVCUzogc3RhbGUgZm9yIGEgd2hpbGUgKi8KLSNkZWZpbmUgUDRfUEVCU19NRVRSSUNfTUFTSwkweDAwMDAxZmZmVQotI2RlZmluZSBQNF9QRUJTX1VPQl9UQUcJCTB4MDEwMDAwMDBVCi0jZGVmaW5lIFA0X1BFQlNfRU5BQkxFCQkweDAyMDAwMDAwVQorLyoKKyAqIFA0IFBFQlMgc3BlY2lmaWNzIChSZXBsYXkgRXZlbnQgb25seSkKKyAqCisgKiBGb3JtYXQgKGJpdHMpOgorICogICAwLTY6IG1ldHJpYyBmcm9tIFA0X1BFQlNfTUVUUklDIGVudW0KKyAqICAgIDcgOiByZXNlcnZlZAorICogICAgOCA6IHJlc2VydmVkCisgKiA5LTExIDogcmVzZXJ2ZWQKKyAqCisgKiBOb3RlIHdlIGhhdmUgVU9QIGFuZCBQRUJTIGJpdHMgcmVzZXJ2ZWQgZm9yIG5vdworICoganVzdCBpbiBjYXNlIGlmIHdlIHdpbGwgbmVlZCB0aGVtIG9uY2UKKyAqLworI2RlZmluZSBQNF9QRUJTX0NPTkZJR19FTkFCTEUJCSgxIDw8IDcpCisjZGVmaW5lIFA0X1BFQlNfQ09ORklHX1VPUF9UQUcJCSgxIDw8IDgpCisjZGVmaW5lIFA0X1BFQlNfQ09ORklHX01FVFJJQ19NQVNLCTB4M2YKKyNkZWZpbmUgUDRfUEVCU19DT05GSUdfTUFTSwkJMHhmZgogCi0vKiBSZXBsYXkgbWV0cmljcyBmb3IgTVNSX0lBMzJfUEVCU19FTkFCTEUgYW5kIE1TUl9QNF9QRUJTX01BVFJJWF9WRVJUICovCi0jZGVmaW5lIFA0X1BFQlNfXzFzdGxfY2FjaGVfbG9hZF9taXNzX3JldGlyZWQJMHgzMDAwMDAxCi0jZGVmaW5lIFA0X1BFQlNfXzJuZGxfY2FjaGVfbG9hZF9taXNzX3JldGlyZWQJMHgzMDAwMDAyCi0jZGVmaW5lIFA0X1BFQlNfX2R0bGJfbG9hZF9taXNzX3JldGlyZWQJCTB4MzAwMDAwNAotI2RlZmluZSBQNF9QRUJTX19kdGxiX3N0b3JlX21pc3NfcmV0aXJlZAkweDMwMDAwMDQKLSNkZWZpbmUgUDRfUEVCU19fZHRsYl9hbGxfbWlzc19yZXRpcmVkCQkweDMwMDAwMDQKLSNkZWZpbmUgUDRfUEVCU19fdGFnZ2VkX21pc3ByZWRfYnJhbmNoCQkweDMwMTgwMDAKLSNkZWZpbmUgUDRfUEVCU19fbW9iX2xvYWRfcmVwbGF5X3JldGlyZWQJMHgzMDAwMjAwCi0jZGVmaW5lIFA0X1BFQlNfX3NwbGl0X2xvYWRfcmV0aXJlZAkJMHgzMDAwNDAwCi0jZGVmaW5lIFA0X1BFQlNfX3NwbGl0X3N0b3JlX3JldGlyZWQJCTB4MzAwMDQwMAorLyoKKyAqIG1lbTogT25seSBjb3VudGVycyBNU1JfSVFfQ09VTlRFUjQgKDE2KSBhbmQKKyAqIE1TUl9JUV9DT1VOVEVSNSAoMTcpIGFyZSBhbGxvd2VkIGZvciBQRUJTIHNhbXBsaW5nCisgKi8KKyNkZWZpbmUgUDRfUEVCU19FTkFCTEUJCQkweDAyMDAwMDAwVQorI2RlZmluZSBQNF9QRUJTX0VOQUJMRV9VT1BfVEFHCQkweDAxMDAwMDAwVQogCi0jZGVmaW5lIFA0X1ZFUlRfXzFzdGxfY2FjaGVfbG9hZF9taXNzX3JldGlyZWQJMHgwMDAwMDAxCi0jZGVmaW5lIFA0X1ZFUlRfXzJuZGxfY2FjaGVfbG9hZF9taXNzX3JldGlyZWQJMHgwMDAwMDAxCi0jZGVmaW5lIFA0X1ZFUlRfX2R0bGJfbG9hZF9taXNzX3JldGlyZWQJCTB4MDAwMDAwMQotI2RlZmluZSBQNF9WRVJUX19kdGxiX3N0b3JlX21pc3NfcmV0aXJlZAkweDAwMDAwMDIKLSNkZWZpbmUgUDRfVkVSVF9fZHRsYl9hbGxfbWlzc19yZXRpcmVkCQkweDAwMDAwMDMKLSNkZWZpbmUgUDRfVkVSVF9fdGFnZ2VkX21pc3ByZWRfYnJhbmNoCQkweDAwMDAwMTAKLSNkZWZpbmUgUDRfVkVSVF9fbW9iX2xvYWRfcmVwbGF5X3JldGlyZWQJMHgwMDAwMDAxCi0jZGVmaW5lIFA0X1ZFUlRfX3NwbGl0X2xvYWRfcmV0aXJlZAkJMHgwMDAwMDAxCi0jZGVmaW5lIFA0X1ZFUlRfX3NwbGl0X3N0b3JlX3JldGlyZWQJCTB4MDAwMDAwMgorI2RlZmluZSBwNF9jb25maWdfdW5wYWNrX21ldHJpYyh2KQkoKCh1NjQpKHYpKSAmIFA0X1BFQlNfQ09ORklHX01FVFJJQ19NQVNLKQorI2RlZmluZSBwNF9jb25maWdfdW5wYWNrX3BlYnModikJKCgodTY0KSh2KSkgJiBQNF9QRUJTX0NPTkZJR19NQVNLKQogCi1lbnVtIFA0X0NBQ0hFX0VWRU5UUyB7Ci0JUDRfQ0FDSEVfX05PTkUsCisjZGVmaW5lIHA0X2NvbmZpZ19wZWJzX2hhcyh2LCBtYXNrKQkocDRfY29uZmlnX3VucGFja19wZWJzKHYpICYgKG1hc2spKQogCi0JUDRfQ0FDSEVfXzFzdGxfY2FjaGVfbG9hZF9taXNzX3JldGlyZWQsCi0JUDRfQ0FDSEVfXzJuZGxfY2FjaGVfbG9hZF9taXNzX3JldGlyZWQsCi0JUDRfQ0FDSEVfX2R0bGJfbG9hZF9taXNzX3JldGlyZWQsCi0JUDRfQ0FDSEVfX2R0bGJfc3RvcmVfbWlzc19yZXRpcmVkLAotCVA0X0NBQ0hFX19pdGxiX3JlZmVyZW5jZV9oaXQsCi0JUDRfQ0FDSEVfX2l0bGJfcmVmZXJlbmNlX21pc3MsCitlbnVtIFA0X1BFQlNfTUVUUklDIHsKKwlQNF9QRUJTX01FVFJJQ19fbm9uZSwKIAotCVA0X0NBQ0hFX19NQVgKKwlQNF9QRUJTX01FVFJJQ19fMXN0bF9jYWNoZV9sb2FkX21pc3NfcmV0aXJlZCwKKwlQNF9QRUJTX01FVFJJQ19fMm5kbF9jYWNoZV9sb2FkX21pc3NfcmV0aXJlZCwKKwlQNF9QRUJTX01FVFJJQ19fZHRsYl9sb2FkX21pc3NfcmV0aXJlZCwKKwlQNF9QRUJTX01FVFJJQ19fZHRsYl9zdG9yZV9taXNzX3JldGlyZWQsCisJUDRfUEVCU19NRVRSSUNfX2R0bGJfYWxsX21pc3NfcmV0aXJlZCwKKwlQNF9QRUJTX01FVFJJQ19fdGFnZ2VkX21pc3ByZWRfYnJhbmNoLAorCVA0X1BFQlNfTUVUUklDX19tb2JfbG9hZF9yZXBsYXlfcmV0aXJlZCwKKwlQNF9QRUJTX01FVFJJQ19fc3BsaXRfbG9hZF9yZXRpcmVkLAorCVA0X1BFQlNfTUVUUklDX19zcGxpdF9zdG9yZV9yZXRpcmVkLAorCisJUDRfUEVCU19NRVRSSUNfX21heAogfTsKIAogI2VuZGlmIC8qIFBFUkZfRVZFTlRfUDRfSCAqLworCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IDdlNWM2YTYuLjMyNWI3YmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC03NjIsNiArNzYyLDcgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nCQlib290X29wdGlvbl9pZGxlX292ZXJyaWRlOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcJCWlkbGVfaGFsdDsKIGV4dGVybiB1bnNpZ25lZCBsb25nCQlpZGxlX25vbXdhaXQ7CitleHRlcm4gYm9vbAkJCWMxZV9kZXRlY3RlZDsKIAogLyoKICAqIG9uIHN5c3RlbXMgd2l0aCBjYWNoZXMsIGNhY2hlcyBtdXN0IGJlIGZsYXNoZWQgYXMgdGhlIGFic29sdXRlCkBAIC0xMDI1LDQgKzEwMjYsMjQgQEAKIAlyZXR1cm4gcmF0aW87CiB9CiAKKy8qCisgKiBBTUQgZXJyYXRhIGNoZWNraW5nCisgKi8KKyNpZmRlZiBDT05GSUdfQ1BVX1NVUF9BTUQKK2V4dGVybiBjb25zdCBpbnQgYW1kX2VycmF0dW1fMzgzW107CitleHRlcm4gY29uc3QgaW50IGFtZF9lcnJhdHVtXzQwMFtdOworZXh0ZXJuIGJvb2wgY3B1X2hhc19hbWRfZXJyYXR1bShjb25zdCBpbnQgKik7CisKKyNkZWZpbmUgQU1EX0xFR0FDWV9FUlJBVFVNKC4uLikJCXsgLTEsIF9fVkFfQVJHU19fLCAwIH0KKyNkZWZpbmUgQU1EX09TVldfRVJSQVRVTShvc3Z3X2lkLCAuLi4pCXsgb3N2d19pZCwgX19WQV9BUkdTX18sIDAgfQorI2RlZmluZSBBTURfTU9ERUxfUkFOR0UoZiwgbV9zdGFydCwgc19zdGFydCwgbV9lbmQsIHNfZW5kKSBcCisJKChmIDw8IDI0KSB8IChtX3N0YXJ0IDw8IDE2KSB8IChzX3N0YXJ0IDw8IDEyKSB8IChtX2VuZCA8PCA0KSB8IChzX2VuZCkpCisjZGVmaW5lIEFNRF9NT0RFTF9SQU5HRV9GQU1JTFkocmFuZ2UpCSgoKHJhbmdlKSA+PiAyNCkgJiAweGZmKQorI2RlZmluZSBBTURfTU9ERUxfUkFOR0VfU1RBUlQocmFuZ2UpCSgoKHJhbmdlKSA+PiAxMikgJiAweGZmZikKKyNkZWZpbmUgQU1EX01PREVMX1JBTkdFX0VORChyYW5nZSkJKChyYW5nZSkgJiAweGZmZikKKworI2Vsc2UKKyNkZWZpbmUgY3B1X2hhc19hbWRfZXJyYXR1bSh4KQkoZmFsc2UpCisjZW5kaWYgLyogQ09ORklHX0NQVV9TVVBfQU1EICovCisKICNlbmRpZiAvKiBfQVNNX1g4Nl9QUk9DRVNTT1JfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcmVxdWlyZWQtZmVhdHVyZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3JlcXVpcmVkLWZlYXR1cmVzLmgKaW5kZXggNjRjZjJkMi4uNmM3ZmMyNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcmVxdWlyZWQtZmVhdHVyZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9yZXF1aXJlZC1mZWF0dXJlcy5oCkBAIC04NCw1ICs4NCw3IEBACiAjZGVmaW5lIFJFUVVJUkVEX01BU0s1CTAKICNkZWZpbmUgUkVRVUlSRURfTUFTSzYJMAogI2RlZmluZSBSRVFVSVJFRF9NQVNLNwkwCisjZGVmaW5lIFJFUVVJUkVEX01BU0s4CTAKKyNkZWZpbmUgUkVRVUlSRURfTUFTSzkJMAogCiAjZW5kaWYgLyogX0FTTV9YODZfUkVRVUlSRURfRkVBVFVSRVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcndzZW0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3J3c2VtLmgKaW5kZXggNjA2ZWRlMS4uZDFlNDFiMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcndzZW0uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9yd3NlbS5oCkBAIC0xMTgsNyArMTE4LDcgQEAKIHsKIAlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIGRvd25fcmVhZFxuXHQiCiAJCSAgICAgTE9DS19QUkVGSVggX0FTTV9JTkMgIiglMSlcblx0IgotCQkgICAgIC8qIGFkZHMgMHgwMDAwMDAwMSwgcmV0dXJucyB0aGUgb2xkIHZhbHVlICovCisJCSAgICAgLyogYWRkcyAweDAwMDAwMDAxICovCiAJCSAgICAgIiAgam5zICAgICAgICAxZlxuIgogCQkgICAgICIgIGNhbGwgY2FsbF9yd3NlbV9kb3duX3JlYWRfZmFpbGVkXG4iCiAJCSAgICAgIjE6XG5cdCIKQEAgLTE1NiwxMSArMTU2LDkgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rvd25fd3JpdGVfbmVzdGVkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSwgaW50IHN1YmNsYXNzKQogewogCXJ3c2VtX2NvdW50X3QgdG1wOwotCi0JdG1wID0gUldTRU1fQUNUSVZFX1dSSVRFX0JJQVM7CiAJYXNtIHZvbGF0aWxlKCIjIGJlZ2lubmluZyBkb3duX3dyaXRlXG5cdCIKIAkJICAgICBMT0NLX1BSRUZJWCAiICB4YWRkICAgICAgJTEsKCUyKVxuXHQiCi0JCSAgICAgLyogc3VidHJhY3QgMHgwMDAwZmZmZiwgcmV0dXJucyB0aGUgb2xkIHZhbHVlICovCisJCSAgICAgLyogYWRkcyAweGZmZmYwMDAxLCByZXR1cm5zIHRoZSBvbGQgdmFsdWUgKi8KIAkJICAgICAiICB0ZXN0ICAgICAgJTEsJTFcblx0IgogCQkgICAgIC8qIHdhcyB0aGUgY291bnQgMCBiZWZvcmU/ICovCiAJCSAgICAgIiAganogICAgICAgIDFmXG4iCkBAIC0xNjgsNyArMTY2LDcgQEAKIAkJICAgICAiMTpcbiIKIAkJICAgICAiIyBlbmRpbmcgZG93bl93cml0ZSIKIAkJICAgICA6ICIrbSIgKHNlbS0+Y291bnQpLCAiPWQiICh0bXApCi0JCSAgICAgOiAiYSIgKHNlbSksICIxIiAodG1wKQorCQkgICAgIDogImEiIChzZW0pLCAiMSIgKFJXU0VNX0FDVElWRV9XUklURV9CSUFTKQogCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOwogfQogCkBAIC0xOTUsMTYgKzE5MywxNiBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgX191cF9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKIHsKLQlyd3NlbV9jb3VudF90IHRtcCA9IC1SV1NFTV9BQ1RJVkVfUkVBRF9CSUFTOworCXJ3c2VtX2NvdW50X3QgdG1wOwogCWFzbSB2b2xhdGlsZSgiIyBiZWdpbm5pbmcgX191cF9yZWFkXG5cdCIKIAkJICAgICBMT0NLX1BSRUZJWCAiICB4YWRkICAgICAgJTEsKCUyKVxuXHQiCiAJCSAgICAgLyogc3VidHJhY3RzIDEsIHJldHVybnMgdGhlIG9sZCB2YWx1ZSAqLwogCQkgICAgICIgIGpucyAgICAgICAgMWZcblx0IgotCQkgICAgICIgIGNhbGwgY2FsbF9yd3NlbV93YWtlXG4iCisJCSAgICAgIiAgY2FsbCBjYWxsX3J3c2VtX3dha2VcbiIgLyogZXhwZWN0cyBvbGQgdmFsdWUgaW4gJWVkeCAqLwogCQkgICAgICIxOlxuIgogCQkgICAgICIjIGVuZGluZyBfX3VwX3JlYWRcbiIKIAkJICAgICA6ICIrbSIgKHNlbS0+Y291bnQpLCAiPWQiICh0bXApCi0JCSAgICAgOiAiYSIgKHNlbSksICIxIiAodG1wKQorCQkgICAgIDogImEiIChzZW0pLCAiMSIgKC1SV1NFTV9BQ1RJVkVfUkVBRF9CSUFTKQogCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOwogfQogCkBAIC0yMTYsMTAgKzIxNCw5IEBACiAJcndzZW1fY291bnRfdCB0bXA7CiAJYXNtIHZvbGF0aWxlKCIjIGJlZ2lubmluZyBfX3VwX3dyaXRlXG5cdCIKIAkJICAgICBMT0NLX1BSRUZJWCAiICB4YWRkICAgICAgJTEsKCUyKVxuXHQiCi0JCSAgICAgLyogdHJpZXMgdG8gdHJhbnNpdGlvbgotCQkJMHhmZmZmMDAwMSAtPiAweDAwMDAwMDAwICovCi0JCSAgICAgIiAganogICAgICAgMWZcbiIKLQkJICAgICAiICBjYWxsIGNhbGxfcndzZW1fd2FrZVxuIgorCQkgICAgIC8qIHN1YnRyYWN0cyAweGZmZmYwMDAxLCByZXR1cm5zIHRoZSBvbGQgdmFsdWUgKi8KKwkJICAgICAiICBqbnMgICAgICAgIDFmXG5cdCIKKwkJICAgICAiICBjYWxsIGNhbGxfcndzZW1fd2FrZVxuIiAvKiBleHBlY3RzIG9sZCB2YWx1ZSBpbiAlZWR4ICovCiAJCSAgICAgIjE6XG5cdCIKIAkJICAgICAiIyBlbmRpbmcgX191cF93cml0ZVxuIgogCQkgICAgIDogIittIiAoc2VtLT5jb3VudCksICI9ZCIgKHRtcCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldHVwLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cC5oCmluZGV4IDg2YjE1MDYuLmVmMjkyYzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldHVwLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0dXAuaApAQCAtODIsNyArODIsNyBAQAogICogZXhlY3V0YWJsZS4pCiAgKi8KICNkZWZpbmUgUkVTRVJWRV9CUksobmFtZSxzeikJCQkJCQlcCi0Jc3RhdGljIHZvaWQgX19zZWN0aW9uKC5kaXNjYXJkKSBfX3VzZWQJCQkJXAorCXN0YXRpYyB2b2lkIF9fc2VjdGlvbiguZGlzY2FyZC50ZXh0KSBfX3VzZWQJCQlcCiAJX19icmtfcmVzZXJ2YXRpb25fZm5fIyNuYW1lIyNfXyh2b2lkKSB7CQkJCVwKIAkJYXNtIHZvbGF0aWxlICgJCQkJCQlcCiAJCQkiLnB1c2hzZWN0aW9uIC5icmtfcmVzZXJ2YXRpb24sXCJhd1wiLEBub2JpdHM7IiBcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmgKaW5kZXggNGRhYjc4ZS4uMmIxNmEyYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaApAQCAtMSw2ICsxLDEzIEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgQW5kaSBLbGVlbiwgU3VTRSBMYWJzCisgKi8KKwogI2lmbmRlZiBfQVNNX1g4Nl9TVEFDS1RSQUNFX0gKICNkZWZpbmUgX0FTTV9YODZfU1RBQ0tUUkFDRV9ICiAKKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisKIGV4dGVybiBpbnQga3N0YWNrX2RlcHRoX3RvX3ByaW50OwogCiBzdHJ1Y3QgdGhyZWFkX2luZm87CkBAIC00Miw0ICs0OSw0NiBAQAogCQl1bnNpZ25lZCBsb25nICpzdGFjaywgdW5zaWduZWQgbG9uZyBicCwKIAkJY29uc3Qgc3RydWN0IHN0YWNrdHJhY2Vfb3BzICpvcHMsIHZvaWQgKmRhdGEpOwogCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorI2RlZmluZSBTVEFDS1NMT1RTX1BFUl9MSU5FIDgKKyNkZWZpbmUgZ2V0X2JwKGJwKSBhc20oIm1vdmwgJSVlYnAsICUwIiA6ICI9ciIgKGJwKSA6KQorI2Vsc2UKKyNkZWZpbmUgU1RBQ0tTTE9UU19QRVJfTElORSA0CisjZGVmaW5lIGdldF9icChicCkgYXNtKCJtb3ZxICUlcmJwLCAlMCIgOiAiPXIiIChicCkgOikKKyNlbmRpZgorCitleHRlcm4gdm9pZAorc2hvd190cmFjZV9sb2dfbHZsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCXVuc2lnbmVkIGxvbmcgKnN0YWNrLCB1bnNpZ25lZCBsb25nIGJwLCBjaGFyICpsb2dfbHZsKTsKKworZXh0ZXJuIHZvaWQKK3Nob3dfc3RhY2tfbG9nX2x2bChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQl1bnNpZ25lZCBsb25nICpzcCwgdW5zaWduZWQgbG9uZyBicCwgY2hhciAqbG9nX2x2bCk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgY29kZV9ieXRlczsKKworLyogVGhlIGZvcm0gb2YgdGhlIHRvcCBvZiB0aGUgZnJhbWUgb24gdGhlIHN0YWNrICovCitzdHJ1Y3Qgc3RhY2tfZnJhbWUgeworCXN0cnVjdCBzdGFja19mcmFtZSAqbmV4dF9mcmFtZTsKKwl1bnNpZ25lZCBsb25nIHJldHVybl9hZGRyZXNzOworfTsKKworc3RydWN0IHN0YWNrX2ZyYW1lX2lhMzIgeworICAgIHUzMiBuZXh0X2ZyYW1lOworICAgIHUzMiByZXR1cm5fYWRkcmVzczsKK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjYWxsZXJfZnJhbWVfcG9pbnRlcih2b2lkKQoreworCXN0cnVjdCBzdGFja19mcmFtZSAqZnJhbWU7CisKKwlnZXRfYnAoZnJhbWUpOworCisjaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKKwlmcmFtZSA9IGZyYW1lLT5uZXh0X2ZyYW1lOworI2VuZGlmCisKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpZnJhbWU7Cit9CisKICNlbmRpZiAvKiBfQVNNX1g4Nl9TVEFDS1RSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzdGVtLmgKaW5kZXggZTdmNGQzMy4uMzNlY2MzZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTQ1Nyw0ICs0NTcsMTEgQEAKIAlhbHRlcm5hdGl2ZShBU01fTk9QMywgImxmZW5jZSIsIFg4Nl9GRUFUVVJFX0xGRU5DRV9SRFRTQyk7CiB9CiAKKy8qCisgKiBXZSBoYW5kbGUgbW9zdCB1bmFsaWduZWQgYWNjZXNzZXMgaW4gaGFyZHdhcmUuICBPbiB0aGUgb3RoZXIgaGFuZAorICogdW5hbGlnbmVkIERNQSBjYW4gYmUgcXVpdGUgZXhwZW5zaXZlIG9uIHNvbWUgTmVoYWxlbSBwcm9jZXNzb3JzLgorICoKKyAqIEJhc2VkIG9uIHRoaXMgd2UgZGlzYWJsZSB0aGUgSVAgaGVhZGVyIGFsaWdubWVudCBpbiBuZXR3b3JrIGRyaXZlcnMuCisgKi8KKyNkZWZpbmUgTkVUX0lQX0FMSUdOCTAKICNlbmRpZiAvKiBfQVNNX1g4Nl9TWVNURU1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdm14LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXguaAppbmRleCA5ZTY3NzlmLi45ZjBjYmQ5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXguaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXguaApAQCAtMjU3LDYgKzI1Nyw3IEBACiAjZGVmaW5lIEVYSVRfUkVBU09OX0lPX0lOU1RSVUNUSU9OICAgICAgMzAKICNkZWZpbmUgRVhJVF9SRUFTT05fTVNSX1JFQUQgICAgICAgICAgICAzMQogI2RlZmluZSBFWElUX1JFQVNPTl9NU1JfV1JJVEUgICAgICAgICAgIDMyCisjZGVmaW5lIEVYSVRfUkVBU09OX0lOVkFMSURfU1RBVEUJMzMKICNkZWZpbmUgRVhJVF9SRUFTT05fTVdBSVRfSU5TVFJVQ1RJT04gICAzNgogI2RlZmluZSBFWElUX1JFQVNPTl9NT05JVE9SX0lOU1RSVUNUSU9OIDM5CiAjZGVmaW5lIEVYSVRfUkVBU09OX1BBVVNFX0lOU1RSVUNUSU9OICAgNDAKQEAgLTI2Niw2ICsyNjcsNyBAQAogI2RlZmluZSBFWElUX1JFQVNPTl9FUFRfVklPTEFUSU9OICAgICAgIDQ4CiAjZGVmaW5lIEVYSVRfUkVBU09OX0VQVF9NSVNDT05GSUcgICAgICAgNDkKICNkZWZpbmUgRVhJVF9SRUFTT05fV0JJTlZECQk1NAorI2RlZmluZSBFWElUX1JFQVNPTl9YU0VUQlYJCTU1CiAKIC8qCiAgKiBJbnRlcnJ1cHRpb24taW5mb3JtYXRpb24gZm9ybWF0CkBAIC0zNzUsNiArMzc3LDkgQEAKICNkZWZpbmUgVk1YX0VQVF9FWFRFTlRfQ09OVEVYVF9CSVQJCSgxdWxsIDw8IDI1KQogI2RlZmluZSBWTVhfRVBUX0VYVEVOVF9HTE9CQUxfQklUCQkoMXVsbCA8PCAyNikKIAorI2RlZmluZSBWTVhfVlBJRF9FWFRFTlRfU0lOR0xFX0NPTlRFWFRfQklUICAgICAgKDF1bGwgPDwgOSkgLyogKDQxIC0gMzIpICovCisjZGVmaW5lIFZNWF9WUElEX0VYVEVOVF9HTE9CQUxfQ09OVEVYVF9CSVQgICAgICAoMXVsbCA8PCAxMCkgLyogKDQyIC0gMzIpICovCisKICNkZWZpbmUgVk1YX0VQVF9ERUZBVUxUX0dBVwkJCTMKICNkZWZpbmUgVk1YX0VQVF9NQVhfR0FXCQkJCTB4NAogI2RlZmluZSBWTVhfRVBUX01UX0VQVEVfU0hJRlQJCQkzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaAppbmRleCA1MTliNTQzLi5iYWE1NzljIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgKQEAgLTE0Miw2ICsxNDIsNyBAQAogICogQHNldF93YWxsY2xvY2s6CQlzZXQgdGltZSBiYWNrIHRvIEhXIGNsb2NrCiAgKiBAaXNfdW50cmFja2VkX3BhdF9yYW5nZQlleGNsdWRlIGZyb20gUEFUIGxvZ2ljCiAgKiBAbm1pX2luaXQJCQllbmFibGUgTk1JIG9uIGNwdXMKKyAqIEBpODA0Ml9kZXRlY3QJCXByZS1kZXRlY3QgaWYgaTgwNDIgY29udHJvbGxlciBleGlzdHMKICAqLwogc3RydWN0IHg4Nl9wbGF0Zm9ybV9vcHMgewogCXVuc2lnbmVkIGxvbmcgKCpjYWxpYnJhdGVfdHNjKSh2b2lkKTsKQEAgLTE1MCw2ICsxNTEsNyBAQAogCXZvaWQgKCppb21tdV9zaHV0ZG93bikodm9pZCk7CiAJYm9vbCAoKmlzX3VudHJhY2tlZF9wYXRfcmFuZ2UpKHU2NCBzdGFydCwgdTY0IGVuZCk7CiAJdm9pZCAoKm5taV9pbml0KSh2b2lkKTsKKwlpbnQgKCppODA0Ml9kZXRlY3QpKHZvaWQpOwogfTsKIAogZXh0ZXJuIHN0cnVjdCB4ODZfaW5pdF9vcHMgeDg2X2luaXQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaHlwZXJjYWxsLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaHlwZXJjYWxsLmgKaW5kZXggOWMzNzFlNC4uN2ZkYTA0MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2h5cGVyY2FsbC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9oeXBlcmNhbGwuaApAQCAtNDE3LDYgKzQxNywxMiBAQAogCXJldHVybiBfaHlwZXJjYWxsMihpbnQsIG5taV9vcCwgb3AsIGFyZyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sKK0hZUEVSVklTT1JfaHZtX29wKGludCBvcCwgdm9pZCAqYXJnKQoreworICAgICAgIHJldHVybiBfaHlwZXJjYWxsMih1bnNpZ25lZCBsb25nLCBodm1fb3AsIG9wLCBhcmcpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQKIE1VTFRJX2ZwdV90YXNrc3dpdGNoKHN0cnVjdCBtdWx0aWNhbGxfZW50cnkgKm1jbCwgaW50IHNldCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hzYXZlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94c2F2ZS5oCmluZGV4IDJjNDM5MGMuLjA2YWNkYmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hzYXZlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veHNhdmUuaApAQCAtMTMsNiArMTMsMTIgQEAKIAogI2RlZmluZSBGWFNBVkVfU0laRQk1MTIKIAorI2RlZmluZSBYU0FWRV9IRFJfU0laRQkgICAgNjQKKyNkZWZpbmUgWFNBVkVfSERSX09GRlNFVCAgICBGWFNBVkVfU0laRQorCisjZGVmaW5lIFhTQVZFX1lNTV9TSVpFCSAgICAyNTYKKyNkZWZpbmUgWFNBVkVfWU1NX09GRlNFVCAgICAoWFNBVkVfSERSX1NJWkUgKyBYU0FWRV9IRFJfT0ZGU0VUKQorCiAvKgogICogVGhlc2UgYXJlIHRoZSBmZWF0dXJlcyB0aGF0IHRoZSBPUyBjYW4gaGFuZGxlIGN1cnJlbnRseS4KICAqLwpAQCAtNTksNiArNjUsMTYgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHhzYXZlX3VzZXIoc3RydWN0IHhzYXZlX3N0cnVjdCBfX3VzZXIgKmJ1ZikKIHsKIAlpbnQgZXJyOworCisJLyoKKwkgKiBDbGVhciB0aGUgeHNhdmUgaGVhZGVyIGZpcnN0LCBzbyB0aGF0IHJlc2VydmVkIGZpZWxkcyBhcmUKKwkgKiBpbml0aWFsaXplZCB0byB6ZXJvLgorCSAqLworCWVyciA9IF9fY2xlYXJfdXNlcigmYnVmLT54c2F2ZV9oZHIsCisJCQkgICBzaXplb2Yoc3RydWN0IHhzYXZlX2hkcl9zdHJ1Y3QpKTsKKwlpZiAodW5saWtlbHkoZXJyKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygiMTogLmJ5dGUgIiBSRVhfUFJFRklYICIweDBmLDB4YWUsMHgyN1xuIgogCQkJICAgICAiMjpcbiIKIAkJCSAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2NzdGF0ZS5jIGIvYXJjaC94ODYva2VybmVsL2FjcGkvY3N0YXRlLmMKaW5kZXggMmU4MzdmNS4uZmI3YTVmMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvY3N0YXRlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvY3N0YXRlLmMKQEAgLTE0NSw2ICsxNDUsMTUgQEAKIAkJcGVyY3B1X2VudHJ5LT5zdGF0ZXNbY3gtPmluZGV4XS5lYXggPSBjeC0+YWRkcmVzczsKIAkJcGVyY3B1X2VudHJ5LT5zdGF0ZXNbY3gtPmluZGV4XS5lY3ggPSBNV0FJVF9FQ1hfSU5URVJSVVBUX0JSRUFLOwogCX0KKworCS8qCisJICogRm9yIF9DU1QgRkZIIG9uIEludGVsLCBpZiBHQVMuYWNjZXNzX3NpemUgYml0IDEgaXMgY2xlYXJlZCwKKwkgKiB0aGVuIHdlIHNob3VsZCBza2lwIGNoZWNraW5nIEJNX1NUUyBmb3IgdGhpcyBDLXN0YXRlLgorCSAqIHJlZjogIkludGVsIFByb2Nlc3NvciBWZW5kb3ItU3BlY2lmaWMgQUNQSSBJbnRlcmZhY2UgU3BlY2lmaWNhdGlvbiIKKwkgKi8KKwlpZiAoKGMtPng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkgJiYgIShyZWctPmFjY2Vzc19zaXplICYgMHgyKSkKKwkJY3gtPmJtX3N0c19za2lwID0gMTsKKwogCXJldHVybiByZXR2YWw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChhY3BpX3Byb2Nlc3Nvcl9mZmhfY3N0YXRlX3Byb2JlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3dha2V1cC5TIGIvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvd2FrZXVwLlMKaW5kZXggNTgwYjRlMi4uMjg1OTVkNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvd2FrZXVwLlMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvd2FrZXVwLlMKQEAgLTEwNCw3ICsxMDQsNyBAQAogCW1vdmwJJWVheCwgJWVjeAogCW9ybAklZWR4LCAlZWN4CiAJanoJMWYKLQltb3ZsCSQweGMwMDAwMDgwLCAlZWN4CisJbW92bAkkTVNSX0VGRVIsICVlY3gKIAl3cm1zcgogMToKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvc2xlZXAuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmMKaW5kZXggODJlNTA4Ni4uMzNjZWMxNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvc2xlZXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcC5jCkBAIC0yLDcgKzIsNyBAQAogICogc2xlZXAuYyAtIHg4Ni1zcGVjaWZpYyBBQ1BJIHNsZWVwIHN1cHBvcnQuCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwMS0yMDAzIFBhdHJpY2sgTW9jaGVsCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PgorICogIENvcHlyaWdodCAoQykgMjAwMS0yMDAzIFBhdmVsIE1hY2hlayA8cGF2ZWxAdWN3LmN6PgogICovCiAKICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CkBAIC0xNTcsOSArMTU3LDE0IEBACiAjaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OCiAJCWlmIChzdHJuY21wKHN0ciwgInM0X25vaHdzaWciLCAxMCkgPT0gMCkKIAkJCWFjcGlfbm9fczRfaHdfc2lnbmF0dXJlKCk7Ci0JCWlmIChzdHJuY21wKHN0ciwgInM0X25vbnZzIiwgOCkgPT0gMCkKLQkJCWFjcGlfczRfbm9fbnZzKCk7CisJCWlmIChzdHJuY21wKHN0ciwgInM0X25vbnZzIiwgOCkgPT0gMCkgeworCQkJcHJfd2FybmluZygiQUNQSTogYWNwaV9zbGVlcD1zNF9ub252cyBpcyBkZXByZWNhdGVkLCAiCisJCQkJCSJwbGVhc2UgdXNlIGFjcGlfc2xlZXA9bm9udnMgaW5zdGVhZCIpOworCQkJYWNwaV9udnNfbm9zYXZlKCk7CisJCX0KICNlbmRpZgorCQlpZiAoc3RybmNtcChzdHIsICJub252cyIsIDUpID09IDApCisJCQlhY3BpX252c19ub3NhdmUoKTsKIAkJaWYgKHN0cm5jbXAoc3RyLCAib2xkX29yZGVyaW5nIiwgMTIpID09IDApCiAJCQlhY3BpX29sZF9zdXNwZW5kX29yZGVyaW5nKCk7CiAJCXN0ciA9IHN0cmNocihzdHIsICcsJyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKaW5kZXggMGQyMDI4Ni4uZmEwNDRlMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYwpAQCAtMjU3Miw2ICsyNTcyLDExIEBACiBzdGF0aWMgaW50IGFtZF9pb21tdV9kb21haW5faGFzX2NhcChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgY2FwKQogeworCXN3aXRjaCAoY2FwKSB7CisJY2FzZSBJT01NVV9DQVBfQ0FDSEVfQ09IRVJFTkNZOgorCQlyZXR1cm4gMTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjYwOSw4ICsyNjE0LDcgQEAKIAogCXB0X2RvbWFpbi0+bW9kZSB8PSBQQUdFX01PREVfTk9ORTsKIAotCXdoaWxlICgoZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZGV2KSkgIT0gTlVMTCkgewotCisJZm9yX2VhY2hfcGNpX2RldihkZXYpIHsKIAkJaWYgKCFjaGVja19kZXZpY2UoJmRldi0+ZGV2KSkKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBiX3RpbWVyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBiX3RpbWVyLmMKaW5kZXggYTM1MzQ3NS4uOGRkNzc4MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwYl90aW1lci5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGJfdGltZXIuYwpAQCAtNDMsMTAgKzQzLDExIEBACiAKICNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAjaW5jbHVkZSA8YXNtL2FwYl90aW1lci5oPgorI2luY2x1ZGUgPGFzbS9tcnN0Lmg+CiAKICNkZWZpbmUgQVBCVF9NQVNLCQkJQ0xPQ0tTT1VSQ0VfTUFTSygzMikKICNkZWZpbmUgQVBCVF9TSElGVAkJCTIyCi0jZGVmaW5lIEFQQlRfQ0xPQ0tFVkVOVF9SQVRJTkcJCTE1MAorI2RlZmluZSBBUEJUX0NMT0NLRVZFTlRfUkFUSU5HCQkxMTAKICNkZWZpbmUgQVBCVF9DTE9DS1NPVVJDRV9SQVRJTkcJCTI1MAogI2RlZmluZSBBUEJUX01JTl9ERUxUQV9VU0VDCQkyMDAKIApAQCAtODMsOCArODQsNiBAQAogCWNoYXIgbmFtZVsxMF07CiB9OwogCi1pbnQgZGlzYWJsZV9hcGJ0X3BlcmNwdSBfX2NwdWluaXRkYXRhOwotCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGFwYnRfZGV2LCBjcHVfYXBidF9kZXYpOwogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtMTk1LDI5ICsxOTQsNiBAQAogfTsKIAogLyoKLSAqIGlmIHVzZXIgZG9lcyBub3Qgd2FudCB0byB1c2UgcGVyIENQVSBhcGIgdGltZXIsIGp1c3QgZ2l2ZSBpdCBhIGxvd2VyIHJhdGluZwotICogdGhhbiBsb2NhbCBhcGljIHRpbWVyIGFuZCBza2lwIHRoZSBsYXRlIHBlciBjcHUgdGltZXIgaW5pdC4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgX19pbml0IHNldHVwX3g4Nl9tcnN0X3RpbWVyKGNoYXIgKmFyZykKLXsKLQlpZiAoIWFyZykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoc3RyY21wKCJhcGJ0X29ubHkiLCBhcmcpID09IDApCi0JCWRpc2FibGVfYXBidF9wZXJjcHUgPSAwOwotCWVsc2UgaWYgKHN0cmNtcCgibGFwaWNfYW5kX2FwYnQiLCBhcmcpID09IDApCi0JCWRpc2FibGVfYXBidF9wZXJjcHUgPSAxOwotCWVsc2UgewotCQlwcl93YXJuaW5nKCJYODYgTVJTVCB0aW1lciBvcHRpb24gJXMgbm90IHJlY29nbmlzZWQiCi0JCQkgICAiIHVzZSB4ODZfbXJzdF90aW1lcj1hcGJ0X29ubHkgb3IgbGFwaWNfYW5kX2FwYnRcbiIsCi0JCQkgICBhcmcpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci1fX3NldHVwKCJ4ODZfbXJzdF90aW1lcj0iLCBzZXR1cF94ODZfbXJzdF90aW1lcik7Ci0KLS8qCiAgKiBzdGFydCBjb3VudCBkb3duIGZyb20gMHhmZmZmX2ZmZmYuIHRoaXMgaXMgZG9uZSBieSB0b2dnbGluZyB0aGUgZW5hYmxlIGJpdAogICogdGhlbiBsb2FkIGluaXRpYWwgbG9hZCBjb3VudCB0byB+MC4KICAqLwpAQCAtMzM1LDcgKzMxMSw3IEBACiAJYWRldi0+bnVtID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCW1lbWNweSgmYWRldi0+ZXZ0LCAmYXBidF9jbG9ja2V2ZW50LCBzaXplb2Yoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSkpOwogCi0JaWYgKGRpc2FibGVfYXBidF9wZXJjcHUpIHsKKwlpZiAobXJzdF90aW1lcl9vcHRpb25zID09IE1SU1RfVElNRVJfTEFQSUNfQVBCVCkgewogCQlhcGJ0X2Nsb2NrZXZlbnQucmF0aW5nID0gQVBCVF9DTE9DS0VWRU5UX1JBVElORyAtIDEwMDsKIAkJZ2xvYmFsX2Nsb2NrX2V2ZW50ID0gJmFkZXYtPmV2dDsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzIGNsb2NrZXZlbnQgcmVnaXN0ZXJlZCBhcyBnbG9iYWxcbiIsCkBAIC00MjksNyArNDA1LDggQEAKIAogc3RhdGljIF9faW5pdCBpbnQgYXBidF9sYXRlX2luaXQodm9pZCkKIHsKLQlpZiAoZGlzYWJsZV9hcGJ0X3BlcmNwdSB8fCAhYXBiX3RpbWVyX2Jsb2NrX2VuYWJsZWQpCisJaWYgKG1yc3RfdGltZXJfb3B0aW9ucyA9PSBNUlNUX1RJTUVSX0xBUElDX0FQQlQgfHwKKwkJIWFwYl90aW1lcl9ibG9ja19lbmFibGVkKQogCQlyZXR1cm4gMDsKIAkvKiBUaGlzIG5vdGlmaWVyIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgd29ya3F1ZXVlIGlzIHJlYWR5ICovCiAJaG90Y3B1X25vdGlmaWVyKGFwYnRfY3B1aHBfbm90aWZ5LCAtMjApOwpAQCAtNDUwLDYgKzQyNyw4IEBACiAJaW50IHRpbWVyX251bTsKIAlzdHJ1Y3QgYXBidF9kZXYgKmFkZXYgPSBFVlRfVE9fQVBCVF9ERVYoZXZ0KTsKIAorCUJVR19PTighYXBidF92aXJ0X2FkZHJlc3MpOworCiAJdGltZXJfbnVtID0gYWRldi0+bnVtOwogCXByX2RlYnVnKCIlcyBDUFUgJWQgdGltZXIgJWQgbW9kZT0lZFxuIiwKIAkJIF9fZnVuY19fLCBmaXJzdF9jcHUoKmV2dC0+Y3B1bWFzayksIHRpbWVyX251bSwgbW9kZSk7CkBAIC02NzYsNyArNjU1LDcgQEAKIAl9CiAjaWZkZWYgQ09ORklHX1NNUAogCS8qIGtlcm5lbCBjbWRsaW5lIGRpc2FibGUgYXBiIHRpbWVyLCBzbyB3ZSB3aWxsIHVzZSBsYXBpYyB0aW1lcnMgKi8KLQlpZiAoZGlzYWJsZV9hcGJ0X3BlcmNwdSkgeworCWlmIChtcnN0X3RpbWVyX29wdGlvbnMgPT0gTVJTVF9USU1FUl9MQVBJQ19BUEJUKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImFwYnQ6IGRpc2FibGVkIHBlciBjcHUgdGltZXJcbiIpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwZXJ0dXJlXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBlcnR1cmVfNjQuYwppbmRleCBiNWQ4YjBiLi5hMmUwY2FmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBlcnR1cmVfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBlcnR1cmVfNjQuYwpAQCAtMjgwLDcgKzI4MCw3IEBACiAJICogb3IgQklPUyBmb3JnZXQgdG8gcHV0IHRoYXQgaW4gcmVzZXJ2ZWQuCiAJICogdHJ5IHRvIHVwZGF0ZSBlODIwIHRvIG1ha2UgdGhhdCByZWdpb24gYXMgcmVzZXJ2ZWQuCiAJICovCi0JdTMyIGFncF9hcGVyX2Jhc2UgPSAwLCBhZ3BfYXBlcl9vcmRlciA9IDA7CisJdTMyIGFncF9hcGVyX29yZGVyID0gMDsKIAlpbnQgaSwgZml4LCBzbG90LCB2YWxpZF9hZ3AgPSAwOwogCXUzMiBjdGw7CiAJdTMyIGFwZXJfc2l6ZSA9IDAsIGFwZXJfb3JkZXIgPSAwLCBsYXN0X2FwZXJfb3JkZXIgPSAwOwpAQCAtMjkxLDcgKzI5MSw3IEBACiAJCXJldHVybjsKIAogCS8qIFRoaXMgaXMgbW9zdGx5IGR1cGxpY2F0ZSBvZiBpb21tdV9ob2xlX2luaXQgKi8KLQlhZ3BfYXBlcl9iYXNlID0gc2VhcmNoX2FncF9icmlkZ2UoJmFncF9hcGVyX29yZGVyLCAmdmFsaWRfYWdwKTsKKwlzZWFyY2hfYWdwX2JyaWRnZSgmYWdwX2FwZXJfb3JkZXIsICZ2YWxpZF9hZ3ApOwogCiAJZml4ID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidXNfZGV2X3Jhbmdlcyk7IGkrKykgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9NYWtlZmlsZQppbmRleCA1NjVjMWJmLi45MTBmMjBiNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvTWFrZWZpbGUKQEAgLTIsNyArMiwxMiBAQAogIyBNYWtlZmlsZSBmb3IgbG9jYWwgQVBJQyBkcml2ZXJzIGFuZCBmb3IgdGhlIElPLUFQSUMgY29kZQogIwogCi1vYmotJChDT05GSUdfWDg2X0xPQ0FMX0FQSUMpCSs9IGFwaWMubyBhcGljX25vb3AubyBwcm9iZV8kKEJJVFMpLm8gaXBpLm8gbm1pLm8KK29iai0kKENPTkZJR19YODZfTE9DQUxfQVBJQykJKz0gYXBpYy5vIGFwaWNfbm9vcC5vIHByb2JlXyQoQklUUykubyBpcGkubworaWZuZXEgKCQoQ09ORklHX0hBUkRMT0NLVVBfREVURUNUT1IpLHkpCitvYmotJChDT05GSUdfWDg2X0xPQ0FMX0FQSUMpCSs9IG5taS5vCitlbmRpZgorb2JqLSQoQ09ORklHX0hBUkRMT0NLVVBfREVURUNUT1IpCSs9IGh3X25taS5vCisKIG9iai0kKENPTkZJR19YODZfSU9fQVBJQykJKz0gaW9fYXBpYy5vCiBvYmotJChDT05GSUdfU01QKQkJKz0gaXBpLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCmluZGV4IGMwMmNjNjkuLjk4MDUwOGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKQEAgLTQ2MCw3ICs0NjAsNyBAQAogfQogCiAvKgotICogU2V0dXAgdGhlIGxvY2FsIEFQSUMgdGltZXIgZm9yIHRoaXMgQ1BVLiBDb3B5IHRoZSBpbml0aWxpemVkIHZhbHVlcworICogU2V0dXAgdGhlIGxvY2FsIEFQSUMgdGltZXIgZm9yIHRoaXMgQ1BVLiBDb3B5IHRoZSBpbml0aWFsaXplZCB2YWx1ZXMKICAqIG9mIHRoZSBib290IENQVSBhbmQgcmVnaXN0ZXIgdGhlIGNsb2NrIGV2ZW50IGluIHRoZSBmcmFtZXdvcmsuCiAgKi8KIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBzZXR1cF9BUElDX3RpbWVyKHZvaWQpCkBAIC05MjEsNyArOTIxLDcgQEAKIAl1bnNpZ25lZCBpbnQgdmFsdWU7CiAKIAkvKiBBUElDIGhhc24ndCBiZWVuIG1hcHBlZCB5ZXQgKi8KLQlpZiAoIWFwaWNfcGh5cykKKwlpZiAoIXgyYXBpY19tb2RlICYmICFhcGljX3BoeXMpCiAJCXJldHVybjsKIAogCWNsZWFyX2xvY2FsX0FQSUMoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2h3X25taS5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaHdfbm1pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VmZDY5NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2h3X25taS5jCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogIEhXIE5NSSB3YXRjaGRvZyBzdXBwb3J0CisgKgorICogIHN0YXJ0ZWQgYnkgRG9uIFppY2t1cywgQ29weXJpZ2h0IChDKSAyMDEwIFJlZCBIYXQsIEluYy4KKyAqCisgKiAgQXJjaCBzcGVjaWZpYyBjYWxscyB0byBzdXBwb3J0IE5NSSB3YXRjaGRvZworICoKKyAqICBCaXRzIGNvcGllZCBmcm9tIG9yaWdpbmFsIG5taS5jIGZpbGUKKyAqCisgKi8KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorCisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25taS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisvKiBGb3IgcmVsaWFiaWxpdHksIHdlJ3JlIHByZXBhcmVkIHRvIHdhc3RlIGJpdHMgaGVyZS4gKi8KK3N0YXRpYyBERUNMQVJFX0JJVE1BUChiYWNrdHJhY2VfbWFzaywgTlJfQ1BVUykgX19yZWFkX21vc3RseTsKKwordTY0IGh3X25taV9nZXRfc2FtcGxlX3BlcmlvZCh2b2lkKQoreworCXJldHVybiAodTY0KShjcHVfa2h6KSAqIDEwMDAgKiA2MDsKK30KKworI2lmZGVmIEFSQ0hfSEFTX05NSV9XQVRDSERPRwordm9pZCBhcmNoX3RyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2Uodm9pZCkKK3sKKwlpbnQgaTsKKworCWNwdW1hc2tfY29weSh0b19jcHVtYXNrKGJhY2t0cmFjZV9tYXNrKSwgY3B1X29ubGluZV9tYXNrKTsKKworCXByaW50ayhLRVJOX0lORk8gInNlbmRpbmcgTk1JIHRvIGFsbCBDUFVzOlxuIik7CisJYXBpYy0+c2VuZF9JUElfYWxsKE5NSV9WRUNUT1IpOworCisJLyogV2FpdCBmb3IgdXAgdG8gMTAgc2Vjb25kcyBmb3IgYWxsIENQVXMgdG8gZG8gdGhlIGJhY2t0cmFjZSAqLworCWZvciAoaSA9IDA7IGkgPCAxMCAqIDEwMDA7IGkrKykgeworCQlpZiAoY3B1bWFza19lbXB0eSh0b19jcHVtYXNrKGJhY2t0cmFjZV9tYXNrKSkpCisJCQlicmVhazsKKwkJbWRlbGF5KDEpOworCX0KK30KKworc3RhdGljIGludCBfX2twcm9iZXMKK2FyY2hfdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZV9oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCSB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqX19hcmdzKQoreworCXN0cnVjdCBkaWVfYXJncyAqYXJncyA9IF9fYXJnczsKKwlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIERJRV9OTUk6CisJY2FzZSBESUVfTk1JX0lQSToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisJfQorCisJcmVncyA9IGFyZ3MtPnJlZ3M7CisKKwlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIHRvX2NwdW1hc2soYmFja3RyYWNlX21hc2spKSkgeworCQlzdGF0aWMgYXJjaF9zcGlubG9ja190IGxvY2sgPSBfX0FSQ0hfU1BJTl9MT0NLX1VOTE9DS0VEOworCisJCWFyY2hfc3Bpbl9sb2NrKCZsb2NrKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTk1JIGJhY2t0cmFjZSBmb3IgY3B1ICVkXG4iLCBjcHUpOworCQlzaG93X3JlZ3MocmVncyk7CisJCWR1bXBfc3RhY2soKTsKKwkJYXJjaF9zcGluX3VubG9jaygmbG9jayk7CisJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgdG9fY3B1bWFzayhiYWNrdHJhY2VfbWFzaykpOworCQlyZXR1cm4gTk9USUZZX1NUT1A7CisJfQorCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgX19yZWFkX21vc3RseSBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgYmFja3RyYWNlX25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsICAgICAgICAgID0gYXJjaF90cmlnZ2VyX2FsbF9jcHVfYmFja3RyYWNlX2hhbmRsZXIsCisJLm5leHQgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorCS5wcmlvcml0eSAgICAgICAgICAgICAgID0gMQorfTsKKworc3RhdGljIGludCBfX2luaXQgcmVnaXN0ZXJfdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZSh2b2lkKQoreworCXJlZ2lzdGVyX2RpZV9ub3RpZmllcigmYmFja3RyYWNlX25vdGlmaWVyKTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X2luaXRjYWxsKHJlZ2lzdGVyX3RyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2UpOworI2VuZGlmCisKKy8qIFNUVUIgY2FsbHMgdG8gbWltaWMgb2xkIG5taV93YXRjaGRvZyBiZWhhdmlvdXIgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19YODZfTE9DQUxfQVBJQykKK3Vuc2lnbmVkIGludCBubWlfd2F0Y2hkb2cgPSBOTUlfTk9ORTsKK0VYUE9SVF9TWU1CT0wobm1pX3dhdGNoZG9nKTsKK3ZvaWQgYWNwaV9ubWlfZW5hYmxlKHZvaWQpIHsgcmV0dXJuOyB9Cit2b2lkIGFjcGlfbm1pX2Rpc2FibGUodm9pZCkgeyByZXR1cm47IH0KKyNlbmRpZgorYXRvbWljX3Qgbm1pX2FjdGl2ZSA9IEFUT01JQ19JTklUKDApOyAgICAgICAgICAgLyogb3Byb2ZpbGUgdXNlcyB0aGlzICovCitFWFBPUlRfU1lNQk9MKG5taV9hY3RpdmUpOworaW50IHVua25vd25fbm1pX3BhbmljOwordm9pZCBjcHVfbm1pX3NldF93ZF9lbmFibGVkKHZvaWQpIHsgcmV0dXJuOyB9Cit2b2lkIHN0b3BfYXBpY19ubWlfd2F0Y2hkb2codm9pZCAqdW51c2VkKSB7IHJldHVybjsgfQordm9pZCBzZXR1cF9hcGljX25taV93YXRjaGRvZyh2b2lkICp1bnVzZWQpIHsgcmV0dXJuOyB9CitpbnQgX19pbml0IGNoZWNrX25taV93YXRjaGRvZyh2b2lkKSB7IHJldHVybiAwOyB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKaW5kZXggZTQxZWQyNC4uNGRjMDA4NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwpAQCAtMzM5Nyw3ICszMzk3LDcgQEAKIAogCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKIAotCXJlYWRfbXNpX21zZ19kZXNjKGRlc2MsICZtc2cpOworCWdldF9jYWNoZWRfbXNpX21zZ19kZXNjKGRlc2MsICZtc2cpOwogCiAJbXNnLmRhdGEgJj0gfk1TSV9EQVRBX1ZFQ1RPUl9NQVNLOwogCW1zZy5kYXRhIHw9IE1TSV9EQVRBX1ZFQ1RPUihjZmctPnZlY3Rvcik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9ubWkuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL25taS5jCmluZGV4IDFlZGFmMTUuLmE0M2Y3MWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL25taS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL25taS5jCkBAIC00MDEsMTMgKzQwMSw2IEBACiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlpbnQgcmMgPSAwOwogCi0JLyogY2hlY2sgZm9yIG90aGVyIHVzZXJzIGZpcnN0ICovCi0JaWYgKG5vdGlmeV9kaWUoRElFX05NSSwgIm5taSIsIHJlZ3MsIHJlYXNvbiwgMiwgU0lHSU5UKQotCQkJPT0gTk9USUZZX1NUT1ApIHsKLQkJcmMgPSAxOwotCQl0b3VjaGVkID0gMTsKLQl9Ci0KIAlzdW0gPSBnZXRfdGltZXJfaXJxcyhjcHUpOwogCiAJaWYgKF9fZ2V0X2NwdV92YXIobm1pX3RvdWNoKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jIGIvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCmluZGV4IGM0ZjkxODIuLjRjOWM2N2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogICogICAgICAgICBpcyBub3cgdGhlIHdheSBsaWZlIHdvcmtzKS4KICAqICAgICAgICAgRml4IHRoaW5rbyBpbiBzdXNwZW5kKCkgKHdyb25nIHJldHVybikuCiAgKiAgICAgICAgIE5vdGlmeSBkcml2ZXJzIG9uIGNyaXRpY2FsIHN1c3BlbmQuCi0gKiAgICAgICAgIE1ha2Uga2FwbWQgYWJzb3JiIG1vcmUgaWRsZSB0aW1lIChQYXZlbCBNYWNoZWsgPHBhdmVsQHN1c2UuY3o+CisgKiAgICAgICAgIE1ha2Uga2FwbWQgYWJzb3JiIG1vcmUgaWRsZSB0aW1lIChQYXZlbCBNYWNoZWsgPHBhdmVsQHVjdy5jej4KICAqICAgICAgICAgbW9kaWZpZWQgYnkgc2ZyKS4KICAqICAgICAgICAgRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWxlIHdlIGFyZSBzdXNwZW5kZWQgKEFuZHkgSGVucm9pZAogICogICAgICAgICA8YW5keV9oZW5yb2lkQHlhaG9vLmNvbT4gZml4ZWQgYnkgc2ZyKS4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L01ha2VmaWxlCmluZGV4IDNhNzg1ZGEuLjNmMGViZTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9NYWtlZmlsZQpAQCAtMTIsMTEgKzEyLDExIEBACiBub3N0YWNrcCA6PSAkKGNhbGwgY2Mtb3B0aW9uLCAtZm5vLXN0YWNrLXByb3RlY3RvcikKIENGTEFHU19jb21tb24ubwkJOj0gJChub3N0YWNrcCkKIAotb2JqLXkJCQk6PSBpbnRlbF9jYWNoZWluZm8ubyBhZGRvbl9jcHVpZF9mZWF0dXJlcy5vCitvYmoteQkJCTo9IGludGVsX2NhY2hlaW5mby5vIHNjYXR0ZXJlZC5vIHRvcG9sb2d5Lm8KIG9iai15CQkJKz0gcHJvYy5vIGNhcGZsYWdzLm8gcG93ZXJmbGFncy5vIGNvbW1vbi5vCiBvYmoteQkJCSs9IHZtd2FyZS5vIGh5cGVydmlzb3IubyBzY2hlZC5vIG1zaHlwZXJ2Lm8KIAotb2JqLSQoQ09ORklHX1g4Nl8zMikJKz0gYnVncy5vIGNtcHhjaGcubworb2JqLSQoQ09ORklHX1g4Nl8zMikJKz0gYnVncy5vCiBvYmotJChDT05GSUdfWDg2XzY0KQkrPSBidWdzXzY0Lm8KIAogb2JqLSQoQ09ORklHX0NQVV9TVVBfSU5URUwpCQkrPSBpbnRlbC5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FkZG9uX2NwdWlkX2ZlYXR1cmVzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FkZG9uX2NwdWlkX2ZlYXR1cmVzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwZmE1NjguLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9hZGRvbl9jcHVpZF9mZWF0dXJlcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKglSb3V0aW5lcyB0byBpbmRlbnRpZnkgYWRkaXRpb25hbCBjcHUgZmVhdHVyZXMgdGhhdCBhcmUgc2NhdHRlcmVkIGluCi0gKgljcHVpZCBzcGFjZS4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgotCi0jaW5jbHVkZSA8YXNtL3BhdC5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLQotI2luY2x1ZGUgPGFzbS9hcGljLmg+Ci0KLXN0cnVjdCBjcHVpZF9iaXQgewotCXUxNiBmZWF0dXJlOwotCXU4IHJlZzsKLQl1OCBiaXQ7Ci0JdTMyIGxldmVsOwotfTsKLQotZW51bSBjcHVpZF9yZWdzIHsKLQlDUl9FQVggPSAwLAotCUNSX0VDWCwKLQlDUl9FRFgsCi0JQ1JfRUJYCi19OwotCi12b2lkIF9fY3B1aW5pdCBpbml0X3NjYXR0ZXJlZF9jcHVpZF9mZWF0dXJlcyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCi17Ci0JdTMyIG1heF9sZXZlbDsKLQl1MzIgcmVnc1s0XTsKLQljb25zdCBzdHJ1Y3QgY3B1aWRfYml0ICpjYjsKLQotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfYml0IF9fY3B1aW5pdGNvbnN0IGNwdWlkX2JpdHNbXSA9IHsKLQkJeyBYODZfRkVBVFVSRV9JREEsICAgCQlDUl9FQVgsIDEsIDB4MDAwMDAwMDYgfSwKLQkJeyBYODZfRkVBVFVSRV9BUkFULCAgCQlDUl9FQVgsIDIsIDB4MDAwMDAwMDYgfSwKLQkJeyBYODZfRkVBVFVSRV9BUEVSRk1QRVJGLAlDUl9FQ1gsIDAsIDB4MDAwMDAwMDYgfSwKLQkJeyBYODZfRkVBVFVSRV9DUEIsICAgCQlDUl9FRFgsIDksIDB4ODAwMDAwMDcgfSwKLQkJeyBYODZfRkVBVFVSRV9OUFQsICAgCQlDUl9FRFgsIDAsIDB4ODAwMDAwMGEgfSwKLQkJeyBYODZfRkVBVFVSRV9MQlJWLCAgCQlDUl9FRFgsIDEsIDB4ODAwMDAwMGEgfSwKLQkJeyBYODZfRkVBVFVSRV9TVk1MLCAgCQlDUl9FRFgsIDIsIDB4ODAwMDAwMGEgfSwKLQkJeyBYODZfRkVBVFVSRV9OUklQUywgCQlDUl9FRFgsIDMsIDB4ODAwMDAwMGEgfSwKLQkJeyAwLCAwLCAwLCAwIH0KLQl9OwotCi0JZm9yIChjYiA9IGNwdWlkX2JpdHM7IGNiLT5mZWF0dXJlOyBjYisrKSB7Ci0KLQkJLyogVmVyaWZ5IHRoYXQgdGhlIGxldmVsIGlzIHZhbGlkICovCi0JCW1heF9sZXZlbCA9IGNwdWlkX2VheChjYi0+bGV2ZWwgJiAweGZmZmYwMDAwKTsKLQkJaWYgKG1heF9sZXZlbCA8IGNiLT5sZXZlbCB8fAotCQkgICAgbWF4X2xldmVsID4gKGNiLT5sZXZlbCB8IDB4ZmZmZikpCi0JCQljb250aW51ZTsKLQotCQljcHVpZChjYi0+bGV2ZWwsICZyZWdzW0NSX0VBWF0sICZyZWdzW0NSX0VCWF0sCi0JCQkmcmVnc1tDUl9FQ1hdLCAmcmVnc1tDUl9FRFhdKTsKLQotCQlpZiAocmVnc1tjYi0+cmVnXSAmICgxIDw8IGNiLT5iaXQpKQotCQkJc2V0X2NwdV9jYXAoYywgY2ItPmZlYXR1cmUpOwotCX0KLX0KLQotLyogbGVhZiAweGIgU01UIGxldmVsICovCi0jZGVmaW5lIFNNVF9MRVZFTAkwCi0KLS8qIGxlYWYgMHhiIHN1Yi1sZWFmIHR5cGVzICovCi0jZGVmaW5lIElOVkFMSURfVFlQRQkwCi0jZGVmaW5lIFNNVF9UWVBFCTEKLSNkZWZpbmUgQ09SRV9UWVBFCTIKLQotI2RlZmluZSBMRUFGQl9TVUJUWVBFKGVjeCkJCSgoKGVjeCkgPj4gOCkgJiAweGZmKQotI2RlZmluZSBCSVRTX1NISUZUX05FWFRfTEVWRUwoZWF4KQkoKGVheCkgJiAweDFmKQotI2RlZmluZSBMRVZFTF9NQVhfU0lCTElOR1MoZWJ4KQkJKChlYngpICYgMHhmZmZmKQotCi0vKgotICogQ2hlY2sgZm9yIGV4dGVuZGVkIHRvcG9sb2d5IGVudW1lcmF0aW9uIGNwdWlkIGxlYWYgMHhiIGFuZCBpZiBpdAotICogZXhpc3RzLCB1c2UgaXQgZm9yIHBvcHVsYXRpbmcgaW5pdGlhbF9hcGljaWQgYW5kIGNwdSB0b3BvbG9neQotICogZGV0ZWN0aW9uLgotICovCi12b2lkIF9fY3B1aW5pdCBkZXRlY3RfZXh0ZW5kZWRfdG9wb2xvZ3koc3RydWN0IGNwdWluZm9feDg2ICpjKQotewotI2lmZGVmIENPTkZJR19TTVAKLQl1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4LCBzdWJfaW5kZXg7Ci0JdW5zaWduZWQgaW50IGh0X21hc2tfd2lkdGgsIGNvcmVfcGx1c19tYXNrX3dpZHRoOwotCXVuc2lnbmVkIGludCBjb3JlX3NlbGVjdF9tYXNrLCBjb3JlX2xldmVsX3NpYmxpbmdzOwotCXN0YXRpYyBib29sIHByaW50ZWQ7Ci0KLQlpZiAoYy0+Y3B1aWRfbGV2ZWwgPCAweGIpCi0JCXJldHVybjsKLQotCWNwdWlkX2NvdW50KDB4YiwgU01UX0xFVkVMLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKLQotCS8qCi0JICogY2hlY2sgaWYgdGhlIGNwdWlkIGxlYWYgMHhiIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLgotCSAqLwotCWlmIChlYnggPT0gMCB8fCAoTEVBRkJfU1VCVFlQRShlY3gpICE9IFNNVF9UWVBFKSkKLQkJcmV0dXJuOwotCi0Jc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfWFRPUE9MT0dZKTsKLQotCS8qCi0JICogaW5pdGlhbCBhcGljIGlkLCB3aGljaCBhbHNvIHJlcHJlc2VudHMgMzItYml0IGV4dGVuZGVkIHgyYXBpYyBpZC4KLQkgKi8KLQljLT5pbml0aWFsX2FwaWNpZCA9IGVkeDsKLQotCS8qCi0JICogUG9wdWxhdGUgSFQgcmVsYXRlZCBpbmZvcm1hdGlvbiBmcm9tIHN1Yi1sZWFmIGxldmVsIDAuCi0JICovCi0JY29yZV9sZXZlbF9zaWJsaW5ncyA9IHNtcF9udW1fc2libGluZ3MgPSBMRVZFTF9NQVhfU0lCTElOR1MoZWJ4KTsKLQljb3JlX3BsdXNfbWFza193aWR0aCA9IGh0X21hc2tfd2lkdGggPSBCSVRTX1NISUZUX05FWFRfTEVWRUwoZWF4KTsKLQotCXN1Yl9pbmRleCA9IDE7Ci0JZG8gewotCQljcHVpZF9jb3VudCgweGIsIHN1Yl9pbmRleCwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7Ci0KLQkJLyoKLQkJICogQ2hlY2sgZm9yIHRoZSBDb3JlIHR5cGUgaW4gdGhlIGltcGxlbWVudGVkIHN1YiBsZWF2ZXMuCi0JCSAqLwotCQlpZiAoTEVBRkJfU1VCVFlQRShlY3gpID09IENPUkVfVFlQRSkgewotCQkJY29yZV9sZXZlbF9zaWJsaW5ncyA9IExFVkVMX01BWF9TSUJMSU5HUyhlYngpOwotCQkJY29yZV9wbHVzX21hc2tfd2lkdGggPSBCSVRTX1NISUZUX05FWFRfTEVWRUwoZWF4KTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJc3ViX2luZGV4Kys7Ci0JfSB3aGlsZSAoTEVBRkJfU1VCVFlQRShlY3gpICE9IElOVkFMSURfVFlQRSk7Ci0KLQljb3JlX3NlbGVjdF9tYXNrID0gKH4oLTEgPDwgY29yZV9wbHVzX21hc2tfd2lkdGgpKSA+PiBodF9tYXNrX3dpZHRoOwotCi0JYy0+Y3B1X2NvcmVfaWQgPSBhcGljLT5waHlzX3BrZ19pZChjLT5pbml0aWFsX2FwaWNpZCwgaHRfbWFza193aWR0aCkKLQkJCQkJCSAmIGNvcmVfc2VsZWN0X21hc2s7Ci0JYy0+cGh5c19wcm9jX2lkID0gYXBpYy0+cGh5c19wa2dfaWQoYy0+aW5pdGlhbF9hcGljaWQsIGNvcmVfcGx1c19tYXNrX3dpZHRoKTsKLQkvKgotCSAqIFJlaW5pdCB0aGUgYXBpY2lkLCBub3cgdGhhdCB3ZSBoYXZlIGV4dGVuZGVkIGluaXRpYWxfYXBpY2lkLgotCSAqLwotCWMtPmFwaWNpZCA9IGFwaWMtPnBoeXNfcGtnX2lkKGMtPmluaXRpYWxfYXBpY2lkLCAwKTsKLQotCWMtPng4Nl9tYXhfY29yZXMgPSAoY29yZV9sZXZlbF9zaWJsaW5ncyAvIHNtcF9udW1fc2libGluZ3MpOwotCi0JaWYgKCFwcmludGVkKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gICJDUFU6IFBoeXNpY2FsIFByb2Nlc3NvciBJRDogJWRcbiIsCi0JCSAgICAgICBjLT5waHlzX3Byb2NfaWQpOwotCQlpZiAoYy0+eDg2X21heF9jb3JlcyA+IDEpCi0JCQlwcmludGsoS0VSTl9JTkZPICAiQ1BVOiBQcm9jZXNzb3IgQ29yZSBJRDogJWRcbiIsCi0JCQkgICAgICAgYy0+Y3B1X2NvcmVfaWQpOwotCQlwcmludGVkID0gMTsKLQl9Ci0JcmV0dXJuOwotI2VuZGlmCi19CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYwppbmRleCBlNDg1ODI1Li42MGE1N2IxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKQEAgLTQ2Niw3ICs0NjYsNyBAQAogCQl9CiAKIAl9Ci0JaWYgKGMtPng4NiA9PSAweDEwIHx8IGMtPng4NiA9PSAweDExKQorCWlmIChjLT54ODYgPj0gMHgxMCkKIAkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfUkVQX0dPT0QpOwogCiAJLyogZ2V0IGFwaWNpZCBpbnN0ZWFkIG9mIGluaXRpYWwgYXBpYyBpZCBmcm9tIGNwdWlkICovCkBAIC01MjksNyArNTI5LDcgQEAKIAkJCW51bV9jYWNoZV9sZWF2ZXMgPSAzOwogCX0KIAotCWlmIChjLT54ODYgPj0gMHhmICYmIGMtPng4NiA8PSAweDExKQorCWlmIChjLT54ODYgPj0gMHhmKQogCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9LOCk7CiAKIAlpZiAoY3B1X2hhc194bW0yKSB7CkBAIC01NDYsNyArNTQ2LDcgQEAKIAkJZmFtMTBoX2NoZWNrX2VuYWJsZV9tbWNmZygpOwogCX0KIAotCWlmIChjID09ICZib290X2NwdV9kYXRhICYmIGMtPng4NiA+PSAweGYgJiYgYy0+eDg2IDw9IDB4MTEpIHsKKwlpZiAoYyA9PSAmYm9vdF9jcHVfZGF0YSAmJiBjLT54ODYgPj0gMHhmKSB7CiAJCXVuc2lnbmVkIGxvbmcgbG9uZyB0c2VnOwogCiAJCS8qCkBAIC02MDksMyArNjA5LDc0IEBACiB9OwogCiBjcHVfZGV2X3JlZ2lzdGVyKGFtZF9jcHVfZGV2KTsKKworLyoKKyAqIEFNRCBlcnJhdGEgY2hlY2tpbmcKKyAqCisgKiBFcnJhdGEgYXJlIGRlZmluZWQgYXMgYXJyYXlzIG9mIGludHMgdXNpbmcgdGhlIEFNRF9MRUdBQ1lfRVJSQVRVTSgpIG9yCisgKiBBTURfT1NWV19FUlJBVFVNKCkgbWFjcm9zLiBUaGUgbGF0dGVyIGlzIGludGVuZGVkIGZvciBuZXdlciBlcnJhdGEgdGhhdAorICogaGF2ZSBhbiBPU1ZXIGlkIGFzc2lnbmVkLCB3aGljaCBpdCB0YWtlcyBhcyBmaXJzdCBhcmd1bWVudC4gQm90aCB0YWtlIGEKKyAqIHZhcmlhYmxlIG51bWJlciBvZiBmYW1pbHktc3BlY2lmaWMgbW9kZWwtc3RlcHBpbmcgcmFuZ2VzIGNyZWF0ZWQgYnkKKyAqIEFNRF9NT0RFTF9SQU5HRSgpLiBFYWNoIGVycmF0dW0gYWxzbyBoYXMgdG8gYmUgZGVjbGFyZWQgYXMgZXh0ZXJuIGNvbnN0CisgKiBpbnRbXSBpbiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC4KKyAqCisgKiBFeGFtcGxlOgorICoKKyAqIGNvbnN0IGludCBhbWRfZXJyYXR1bV8zMTlbXSA9CisgKglBTURfTEVHQUNZX0VSUkFUVU0oQU1EX01PREVMX1JBTkdFKDB4MTAsIDB4MiwgMHgxLCAweDQsIDB4MiksCisgKgkJCSAgIEFNRF9NT0RFTF9SQU5HRSgweDEwLCAweDgsIDB4MCwgMHg4LCAweDApLAorICoJCQkgICBBTURfTU9ERUxfUkFOR0UoMHgxMCwgMHg5LCAweDAsIDB4OSwgMHgwKSk7CisgKi8KKworY29uc3QgaW50IGFtZF9lcnJhdHVtXzQwMFtdID0KKwlBTURfT1NWV19FUlJBVFVNKDEsIEFNRF9NT0RFTF9SQU5HRSgweGYsIDB4NDEsIDB4MiwgMHhmZiwgMHhmKSwKKwkJCSAgICBBTURfTU9ERUxfUkFOR0UoMHgxMCwgMHgyLCAweDEsIDB4ZmYsIDB4ZikpOworRVhQT1JUX1NZTUJPTF9HUEwoYW1kX2VycmF0dW1fNDAwKTsKKworY29uc3QgaW50IGFtZF9lcnJhdHVtXzM4M1tdID0KKwlBTURfT1NWV19FUlJBVFVNKDMsIEFNRF9NT0RFTF9SQU5HRSgweDEwLCAwLCAwLCAweGZmLCAweGYpKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGFtZF9lcnJhdHVtXzM4Myk7CisKK2Jvb2wgY3B1X2hhc19hbWRfZXJyYXR1bShjb25zdCBpbnQgKmVycmF0dW0pCit7CisJc3RydWN0IGNwdWluZm9feDg2ICpjcHUgPSAmY3VycmVudF9jcHVfZGF0YTsKKwlpbnQgb3N2d19pZCA9ICplcnJhdHVtKys7CisJdTMyIHJhbmdlOworCXUzMiBtczsKKworCS8qCisJICogSWYgY2FsbGVkIGVhcmx5IGVub3VnaCB0aGF0IGN1cnJlbnRfY3B1X2RhdGEgaGFzbid0IGJlZW4gaW5pdGlhbGl6ZWQKKwkgKiB5ZXQsIGZhbGwgYmFjayB0byBib290X2NwdV9kYXRhLgorCSAqLworCWlmIChjcHUtPng4NiA9PSAwKQorCQljcHUgPSAmYm9vdF9jcHVfZGF0YTsKKworCWlmIChjcHUtPng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9BTUQpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChvc3Z3X2lkID49IDAgJiYgb3N2d19pZCA8IDY1NTM2ICYmCisJICAgIGNwdV9oYXMoY3B1LCBYODZfRkVBVFVSRV9PU1ZXKSkgeworCQl1NjQgb3N2d19sZW47CisKKwkJcmRtc3JsKE1TUl9BTUQ2NF9PU1ZXX0lEX0xFTkdUSCwgb3N2d19sZW4pOworCQlpZiAob3N2d19pZCA8IG9zdndfbGVuKSB7CisJCQl1NjQgb3N2d19iaXRzOworCisJCQlyZG1zcmwoTVNSX0FNRDY0X09TVldfU1RBVFVTICsgKG9zdndfaWQgPj4gNiksCisJCQkgICAgb3N2d19iaXRzKTsKKwkJCXJldHVybiBvc3Z3X2JpdHMgJiAoMVVMTCA8PCAob3N2d19pZCAmIDB4M2YpKTsKKwkJfQorCX0KKworCS8qIE9TVlcgdW5hdmFpbGFibGUgb3IgSUQgdW5rbm93biwgbWF0Y2ggZmFtaWx5LW1vZGVsLXN0ZXBwaW5nIHJhbmdlICovCisJbXMgPSAoY3B1LT54ODZfbW9kZWwgPDwgOCkgfCBjcHUtPng4Nl9tYXNrOworCXdoaWxlICgocmFuZ2UgPSAqZXJyYXR1bSsrKSkKKwkJaWYgKChjcHUtPng4NiA9PSBBTURfTU9ERUxfUkFOR0VfRkFNSUxZKHJhbmdlKSkgJiYKKwkJICAgIChtcyA+PSBBTURfTU9ERUxfUkFOR0VfU1RBUlQocmFuZ2UpKSAmJgorCQkgICAgKG1zIDw9IEFNRF9NT0RFTF9SQU5HRV9FTkQocmFuZ2UpKSkKKwkJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChjcHVfaGFzX2FtZF9lcnJhdHVtKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY21weGNoZy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jbXB4Y2hnLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwNTZjY2YuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jbXB4Y2hnLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKgotICogY21weGNoZyooKSBmYWxsYmFja3MgZm9yIENQVSBub3Qgc3VwcG9ydGluZyB0aGVzZSBpbnN0cnVjdGlvbnMKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0KLSNpZm5kZWYgQ09ORklHX1g4Nl9DTVBYQ0hHCi11bnNpZ25lZCBsb25nIGNtcHhjaGdfMzg2X3U4KHZvbGF0aWxlIHZvaWQgKnB0ciwgdTggb2xkLCB1OCBuZXcpCi17Ci0JdTggcHJldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogUG9vciBtYW4ncyBjbXB4Y2hnIGZvciAzODYuIFVuc3VpdGFibGUgZm9yIFNNUCAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlwcmV2ID0gKih1OCAqKXB0cjsKLQlpZiAocHJldiA9PSBvbGQpCi0JCSoodTggKilwdHIgPSBuZXc7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybiBwcmV2OwotfQotRVhQT1JUX1NZTUJPTChjbXB4Y2hnXzM4Nl91OCk7Ci0KLXVuc2lnbmVkIGxvbmcgY21weGNoZ18zODZfdTE2KHZvbGF0aWxlIHZvaWQgKnB0ciwgdTE2IG9sZCwgdTE2IG5ldykKLXsKLQl1MTYgcHJldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogUG9vciBtYW4ncyBjbXB4Y2hnIGZvciAzODYuIFVuc3VpdGFibGUgZm9yIFNNUCAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlwcmV2ID0gKih1MTYgKilwdHI7Ci0JaWYgKHByZXYgPT0gb2xkKQotCQkqKHUxNiAqKXB0ciA9IG5ldzsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuIHByZXY7Ci19Ci1FWFBPUlRfU1lNQk9MKGNtcHhjaGdfMzg2X3UxNik7Ci0KLXVuc2lnbmVkIGxvbmcgY21weGNoZ18zODZfdTMyKHZvbGF0aWxlIHZvaWQgKnB0ciwgdTMyIG9sZCwgdTMyIG5ldykKLXsKLQl1MzIgcHJldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogUG9vciBtYW4ncyBjbXB4Y2hnIGZvciAzODYuIFVuc3VpdGFibGUgZm9yIFNNUCAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlwcmV2ID0gKih1MzIgKilwdHI7Ci0JaWYgKHByZXYgPT0gb2xkKQotCQkqKHUzMiAqKXB0ciA9IG5ldzsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuIHByZXY7Ci19Ci1FWFBPUlRfU1lNQk9MKGNtcHhjaGdfMzg2X3UzMik7Ci0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfWDg2X0NNUFhDSEc2NAotdW5zaWduZWQgbG9uZyBsb25nIGNtcHhjaGdfNDg2X3U2NCh2b2xhdGlsZSB2b2lkICpwdHIsIHU2NCBvbGQsIHU2NCBuZXcpCi17Ci0JdTY0IHByZXY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIFBvb3IgbWFuJ3MgY21weGNoZzhiIGZvciAzODYgYW5kIDQ4Ni4gVW5zdWl0YWJsZSBmb3IgU01QICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXByZXYgPSAqKHU2NCAqKXB0cjsKLQlpZiAocHJldiA9PSBvbGQpCi0JCSoodTY0ICopcHRyID0gbmV3OwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlyZXR1cm4gcHJldjsKLX0KLUVYUE9SVF9TWU1CT0woY21weGNoZ180ODZfdTY0KTsKLSNlbmRpZgotCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwppbmRleCA2OGU0YTZmLi5mMTAyNzMxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKQEAgLTU1MSw2ICs1NTEsMTYgQEAKIAkJYy0+eDg2X2NhcGFiaWxpdHlbNF0gPSBleGNhcDsKIAl9CiAKKwkvKiBBZGRpdGlvbmFsIEludGVsLWRlZmluZWQgZmxhZ3M6IGxldmVsIDB4MDAwMDAwMDcgKi8KKwlpZiAoYy0+Y3B1aWRfbGV2ZWwgPj0gMHgwMDAwMDAwNykgeworCQl1MzIgZWF4LCBlYngsIGVjeCwgZWR4OworCisJCWNwdWlkX2NvdW50KDB4MDAwMDAwMDcsIDAsICZlYXgsICZlYngsICZlY3gsICZlZHgpOworCisJCWlmIChlYXggPiAwKQorCQkJYy0+eDg2X2NhcGFiaWxpdHlbOV0gPSBlYng7CisJfQorCiAJLyogQU1ELWRlZmluZWQgZmxhZ3M6IGxldmVsIDB4ODAwMDAwMDEgKi8KIAl4bHZsID0gY3B1aWRfZWF4KDB4ODAwMDAwMDApOwogCWMtPmV4dGVuZGVkX2NwdWlkX2xldmVsID0geGx2bDsKQEAgLTU3Niw2ICs1ODYsNyBAQAogCWlmIChjLT5leHRlbmRlZF9jcHVpZF9sZXZlbCA+PSAweDgwMDAwMDA3KQogCQljLT54ODZfcG93ZXIgPSBjcHVpZF9lZHgoMHg4MDAwMDAwNyk7CiAKKwlpbml0X3NjYXR0ZXJlZF9jcHVpZF9mZWF0dXJlcyhjKTsKIH0KIAogc3RhdGljIHZvaWQgX19jcHVpbml0IGlkZW50aWZ5X2NwdV93aXRob3V0X2NwdWlkKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKQEAgLTczMSw3ICs3NDIsNiBAQAogCiAJZ2V0X21vZGVsX25hbWUoYyk7IC8qIERlZmF1bHQgbmFtZSAqLwogCi0JaW5pdF9zY2F0dGVyZWRfY3B1aWRfZmVhdHVyZXMoYyk7CiAJZGV0ZWN0X25vcGwoYyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwppbmRleCAxZDNjZGRhLi4yNDZjZDNhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8dHJhY2UvZXZlbnRzL3Bvd2VyLmg+CiAKICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KQEAgLTMyNCw4ICszMjMsNiBAQAogCQl9CiAJfQogCi0JdHJhY2VfcG93ZXJfZnJlcXVlbmN5KFBPV0VSX1BTVEFURSwgZGF0YS0+ZnJlcV90YWJsZVtuZXh0X3N0YXRlXS5mcmVxdWVuY3kpOwotCiAJc3dpdGNoIChkYXRhLT5jcHVfZmVhdHVyZSkgewogCWNhc2UgU1lTVEVNX0lOVEVMX01TUl9DQVBBQkxFOgogCQljbWQudHlwZSA9IFNZU1RFTV9JTlRFTF9NU1JfQ0FQQUJMRTsKQEAgLTM1MSw3ICszNDgsNyBAQAogCiAJZnJlcXMub2xkID0gcGVyZi0+c3RhdGVzW3BlcmYtPnN0YXRlXS5jb3JlX2ZyZXF1ZW5jeSAqIDEwMDA7CiAJZnJlcXMubmV3ID0gZGF0YS0+ZnJlcV90YWJsZVtuZXh0X3N0YXRlXS5mcmVxdWVuY3k7Ci0JZm9yX2VhY2hfY3B1KGksIGNtZC5tYXNrKSB7CisJZm9yX2VhY2hfY3B1KGksIHBvbGljeS0+Y3B1cykgewogCQlmcmVxcy5jcHUgPSBpOwogCQljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QUkVDSEFOR0UpOwogCX0KQEAgLTM2Nyw3ICszNjQsNyBAQAogCQl9CiAJfQogCi0JZm9yX2VhY2hfY3B1KGksIGNtZC5tYXNrKSB7CisJZm9yX2VhY2hfY3B1KGksIHBvbGljeS0+Y3B1cykgewogCQlmcmVxcy5jcHUgPSBpOwogCQljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QT1NUQ0hBTkdFKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZ3gtc3VzcG1vZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2d4LXN1c3Btb2QuYwppbmRleCAxNmUzNDgzLi4zMjk3NGNmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZ3gtc3VzcG1vZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9neC1zdXNwbW9kLmMKQEAgLTE2OSwxMiArMTY5LDkgQEAKICAqCUxvdyBMZXZlbCBjaGlwc2V0IGludGVyZmFjZQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBneF9jaGlwc2V0X3RibFtdIF9faW5pdGRhdGEgPSB7Ci0JeyBQQ0lfVkVORE9SX0lEX0NZUklYLCBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MzBfTEVHQUNZLAotCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCi0JeyBQQ0lfVkVORE9SX0lEX0NZUklYLCBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MjAsCi0JCVBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKLQl7IFBDSV9WRU5ET1JfSURfQ1lSSVgsIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUxMCwKLQkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAorCXsgUENJX1ZERVZJQ0UoQ1lSSVgsIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUzMF9MRUdBQ1kpLCB9LAorCXsgUENJX1ZERVZJQ0UoQ1lSSVgsIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUyMCksIH0sCisJeyBQQ0lfVkRFVklDRShDWVJJWCwgUENJX0RFVklDRV9JRF9DWVJJWF81NTEwKSwgfSwKIAl7IDAsIH0sCiB9OwogCkBAIC0xOTksNyArMTk2LDcgQEAKIAl9CiAKIAkvKiBkZXRlY3Qgd2hpY2ggY29tcGFuaW9uIGNoaXAgaXMgdXNlZCAqLwotCXdoaWxlICgoZ3hfcGNpID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZ3hfcGNpKSkgIT0gTlVMTCkgeworCWZvcl9lYWNoX3BjaV9kZXYoZ3hfcGNpKSB7CiAJCWlmICgocGNpX21hdGNoX2lkKGd4X2NoaXBzZXRfdGJsLCBneF9wY2kpKSAhPSBOVUxMKQogCQkJcmV0dXJuIGd4X3BjaTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCmluZGV4IDdlN2VlYTQuLjAzMTYyZGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCkBAIC00MjYsNyArNDI2LDcgQEAKIH0KIAogCi1zdGF0aWMgaW50IF9faW5pdCBsb25naGF1bF9nZXRfcmFuZ2VzKHZvaWQpCitzdGF0aWMgaW50IF9fY3B1aW5pdCBsb25naGF1bF9nZXRfcmFuZ2VzKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGksIGosIGsgPSAwOwogCXVuc2lnbmVkIGludCByYXRpbzsKQEAgLTUzMCw3ICs1MzAsNyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBsb25naGF1bF9zZXR1cF92b2x0YWdlc2NhbGluZyh2b2lkKQorc3RhdGljIHZvaWQgX19jcHVpbml0IGxvbmdoYXVsX3NldHVwX3ZvbHRhZ2VzY2FsaW5nKHZvaWQpCiB7CiAJdW5pb24gbXNyX2xvbmdoYXVsIGxvbmdoYXVsOwogCXN0cnVjdCBtVl9wb3MgbWludmlkLCBtYXh2aWQsIHZpZDsKQEAgLTc4NCw3ICs3ODQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBsb25naGF1bF9jcHVfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3N0YXRpYyBpbnQgX19jcHVpbml0IGxvbmdoYXVsX2NwdV9pbml0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogewogCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YSgwKTsKIAljaGFyICpjcHVuYW1lID0gTlVMTDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5oIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmgKaW5kZXggZTIzNjBhNC4uY2JmNDhmYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmgKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmgKQEAgLTU2LDcgKzU2LDcgQEAKIC8qCiAgKiBWSUEgQzMgU2FtdWVsIDEgICYgU2FtdWVsIDIgKHN0ZXBwaW5nIDApCiAgKi8KLXN0YXRpYyBjb25zdCBpbnQgX19pbml0ZGF0YSBzYW11ZWwxX211bHRzWzE2XSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgX19jcHVpbml0ZGF0YSBzYW11ZWwxX211bHRzWzE2XSA9IHsKIAktMSwgLyogMDAwMCAtPiBSRVNFUlZFRCAqLwogCTMwLCAvKiAwMDAxIC0+ICAzLjB4ICovCiAJNDAsIC8qIDAwMTAgLT4gIDQuMHggKi8KQEAgLTc1LDcgKzc1LDcgQEAKIAktMSwgLyogMTExMSAtPiBSRVNFUlZFRCAqLwogfTsKIAotc3RhdGljIGNvbnN0IGludCBfX2luaXRkYXRhIHNhbXVlbDFfZWJsY3JbMTZdID0geworc3RhdGljIGNvbnN0IGludCBfX2NwdWluaXRkYXRhIHNhbXVlbDFfZWJsY3JbMTZdID0gewogCTUwLCAvKiAwMDAwIC0+IFJFU0VSVkVEICovCiAJMzAsIC8qIDAwMDEgLT4gIDMuMHggKi8KIAk0MCwgLyogMDAxMCAtPiAgNC4weCAqLwpAQCAtOTcsNyArOTcsNyBAQAogLyoKICAqIFZJQSBDMyBTYW11ZWwyIFN0ZXBwaW5nIDEtPjE1CiAgKi8KLXN0YXRpYyBjb25zdCBpbnQgX19pbml0ZGF0YSBzYW11ZWwyX2VibGNyWzE2XSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgX19jcHVpbml0ZGF0YSBzYW11ZWwyX2VibGNyWzE2XSA9IHsKIAk1MCwgIC8qIDAwMDAgLT4gIDUuMHggKi8KIAkzMCwgIC8qIDAwMDEgLT4gIDMuMHggKi8KIAk0MCwgIC8qIDAwMTAgLT4gIDQuMHggKi8KQEAgLTExOSw3ICsxMTksNyBAQAogLyoKICAqIFZJQSBDMyBFenJhCiAgKi8KLXN0YXRpYyBjb25zdCBpbnQgX19pbml0ZGF0YSBlenJhX211bHRzWzE2XSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgX19jcHVpbml0ZGF0YSBlenJhX211bHRzWzE2XSA9IHsKIAkxMDAsIC8qIDAwMDAgLT4gMTAuMHggKi8KIAkzMCwgIC8qIDAwMDEgLT4gIDMuMHggKi8KIAk0MCwgIC8qIDAwMTAgLT4gIDQuMHggKi8KQEAgLTEzOCw3ICsxMzgsNyBAQAogCTEyMCwgLyogMTExMSAtPiAxMi4weCAqLwogfTsKIAotc3RhdGljIGNvbnN0IGludCBfX2luaXRkYXRhIGV6cmFfZWJsY3JbMTZdID0geworc3RhdGljIGNvbnN0IGludCBfX2NwdWluaXRkYXRhIGV6cmFfZWJsY3JbMTZdID0gewogCTUwLCAgLyogMDAwMCAtPiAgNS4weCAqLwogCTMwLCAgLyogMDAwMSAtPiAgMy4weCAqLwogCTQwLCAgLyogMDAxMCAtPiAgNC4weCAqLwpAQCAtMTYwLDcgKzE2MCw3IEBACiAvKgogICogVklBIEMzIChFenJhLVQpIFtDNU1dLgogICovCi1zdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgZXpyYXRfbXVsdHNbMzJdID0geworc3RhdGljIGNvbnN0IGludCBfX2NwdWluaXRkYXRhIGV6cmF0X211bHRzWzMyXSA9IHsKIAkxMDAsIC8qIDAwMDAgLT4gMTAuMHggKi8KIAkzMCwgIC8qIDAwMDEgLT4gIDMuMHggKi8KIAk0MCwgIC8qIDAwMTAgLT4gIDQuMHggKi8KQEAgLTE5Niw3ICsxOTYsNyBAQAogCS0xLCAgLyogMTExMSAtPiBSRVNFUlZFRCAoMTIuMHgpICovCiB9OwogCi1zdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgZXpyYXRfZWJsY3JbMzJdID0geworc3RhdGljIGNvbnN0IGludCBfX2NwdWluaXRkYXRhIGV6cmF0X2VibGNyWzMyXSA9IHsKIAk1MCwgIC8qIDAwMDAgLT4gIDUuMHggKi8KIAkzMCwgIC8qIDAwMDEgLT4gIDMuMHggKi8KIAk0MCwgIC8qIDAwMTAgLT4gIDQuMHggKi8KQEAgLTIzNSw3ICsyMzUsNyBAQAogLyoKICAqIFZJQSBDMyBOZWhlbWlhaCAqLwogCi1zdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgIG5laGVtaWFoX211bHRzWzMyXSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgX19jcHVpbml0ZGF0YSBuZWhlbWlhaF9tdWx0c1szMl0gPSB7CiAJMTAwLCAvKiAwMDAwIC0+IDEwLjB4ICovCiAJLTEsIC8qIDAwMDEgLT4gMTYuMHggKi8KIAk0MCwgIC8qIDAwMTAgLT4gIDQuMHggKi8KQEAgLTI3MCw3ICsyNzAsNyBAQAogCS0xLCAvKiAxMTExIC0+IDEyLjB4ICovCiB9OwogCi1zdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgbmVoZW1pYWhfZWJsY3JbMzJdID0geworc3RhdGljIGNvbnN0IGludCBfX2NwdWluaXRkYXRhIG5laGVtaWFoX2VibGNyWzMyXSA9IHsKIAk1MCwgIC8qIDAwMDAgLT4gIDUuMHggKi8KIAkxNjAsIC8qIDAwMDEgLT4gMTYuMHggKi8KIAk0MCwgIC8qIDAwMTAgLT4gIDQuMHggKi8KQEAgLTMxNSw3ICszMTUsNyBAQAogCXVuc2lnbmVkIHNob3J0IHBvczsKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbVZfcG9zIF9faW5pdGRhdGEgdnJtODVfbVZbMzJdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBtVl9wb3MgX19jcHVpbml0ZGF0YSB2cm04NV9tVlszMl0gPSB7CiAJezEyNTAsIDh9LAl7MTIwMCwgNn0sCXsxMTUwLCA0fSwJezExMDAsIDJ9LAogCXsxMDUwLCAwfSwJezE4MDAsIDMwfSwJezE3NTAsIDI4fSwJezE3MDAsIDI2fSwKIAl7MTY1MCwgMjR9LAl7MTYwMCwgMjJ9LAl7MTU1MCwgMjB9LAl7MTUwMCwgMTh9LApAQCAtMzI2LDE0ICszMjYsMTQgQEAKIAl7MTQ3NSwgMTd9LAl7MTQyNSwgMTV9LAl7MTM3NSwgMTN9LAl7MTMyNSwgMTF9CiB9OwogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBfX2luaXRkYXRhIG1WX3ZybTg1WzMyXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIF9fY3B1aW5pdGRhdGEgbVZfdnJtODVbMzJdID0gewogCTB4MDQsCTB4MTQsCTB4MDMsCTB4MTMsCTB4MDIsCTB4MTIsCTB4MDEsCTB4MTEsCiAJMHgwMCwJMHgxMCwJMHgwZiwJMHgxZiwJMHgwZSwJMHgxZSwJMHgwZCwJMHgxZCwKIAkweDBjLAkweDFjLAkweDBiLAkweDFiLAkweDBhLAkweDFhLAkweDA5LAkweDE5LAogCTB4MDgsCTB4MTgsCTB4MDcsCTB4MTcsCTB4MDYsCTB4MTYsCTB4MDUsCTB4MTUKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbVZfcG9zIF9faW5pdGRhdGEgbW9iaWxldnJtX21WWzMyXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbVZfcG9zIF9fY3B1aW5pdGRhdGEgbW9iaWxldnJtX21WWzMyXSA9IHsKIAl7MTc1MCwgMzF9LAl7MTcwMCwgMzB9LAl7MTY1MCwgMjl9LAl7MTYwMCwgMjh9LAogCXsxNTUwLCAyN30sCXsxNTAwLCAyNn0sCXsxNDUwLCAyNX0sCXsxNDAwLCAyNH0sCiAJezEzNTAsIDIzfSwJezEzMDAsIDIyfSwJezEyNTAsIDIxfSwJezEyMDAsIDIwfSwKQEAgLTM0NCw3ICszNDQsNyBAQAogCXs2NzUsIDN9LAl7NjUwLCAyfSwJezYyNSwgMX0sCXs2MDAsIDB9CiB9OwogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBfX2luaXRkYXRhIG1WX21vYmlsZXZybVszMl0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBfX2NwdWluaXRkYXRhIG1WX21vYmlsZXZybVszMl0gPSB7CiAJMHgxZiwJMHgxZSwJMHgxZCwJMHgxYywJMHgxYiwJMHgxYSwJMHgxOSwJMHgxOCwKIAkweDE3LAkweDE2LAkweDE1LAkweDE0LAkweDEzLAkweDEyLAkweDExLAkweDEwLAogCTB4MGYsCTB4MGUsCTB4MGQsCTB4MGMsCTB4MGIsCTB4MGEsCTB4MDksCTB4MDgsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ3J1bi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdydW4uYwppbmRleCBlN2I1NTlkLi5mYzA5ZjE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ3J1bi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25ncnVuLmMKQEAgLTE2NSw4ICsxNjUsOCBAQAogICogVE1UQSBydWxlczoKICAqIHBlcmZvcm1hbmNlX3BjdGcgPSAodGFyZ2V0X2ZyZXEgLSBsb3dfZnJlcSkvKGhpZ2hfZnJlcSAtIGxvd19mcmVxKQogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBsb25ncnVuX2RldGVybWluZV9mcmVxcyh1bnNpZ25lZCBpbnQgKmxvd19mcmVxLAotCQkJCQkJICAgdW5zaWduZWQgaW50ICpoaWdoX2ZyZXEpCitzdGF0aWMgdW5zaWduZWQgaW50IF9fY3B1aW5pdCBsb25ncnVuX2RldGVybWluZV9mcmVxcyh1bnNpZ25lZCBpbnQgKmxvd19mcmVxLAorCQkJCQkJICAgICAgdW5zaWduZWQgaW50ICpoaWdoX2ZyZXEpCiB7CiAJdTMyIG1zcl9sbywgbXNyX2hpOwogCXUzMiBzYXZlX2xvLCBzYXZlX2hpOwpAQCAtMjU4LDcgKzI1OCw3IEBACiB9CiAKIAotc3RhdGljIGludCBfX2luaXQgbG9uZ3J1bl9jcHVfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3N0YXRpYyBpbnQgX19jcHVpbml0IGxvbmdydW5fY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3A0LWNsb2NrbW9kLmMKaW5kZXggN2I4YThiYS4uYmQxY2FjNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3A0LWNsb2NrbW9kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3A0LWNsb2NrbW9kLmMKQEAgLTE3OCwxMyArMTc4LDggQEAKIAkJfQogCX0KIAotCWlmIChjLT54ODYgIT0gMHhGKSB7Ci0JCWlmICghY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9FU1QpKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIlVua25vd24gQ1BVLiAiCi0JCQkJIlBsZWFzZSBzZW5kIGFuIGUtbWFpbCB0byAiCi0JCQkJIjxjcHVmcmVxQHZnZXIua2VybmVsLm9yZz5cbiIpOworCWlmIChjLT54ODYgIT0gMHhGKQogCQlyZXR1cm4gMDsKLQl9CiAKIAkvKiBvbiBQLTRzLCB0aGUgVFNDIHJ1bnMgd2l0aCBjb25zdGFudCBmcmVxdWVuY3kgaW5kZXBlbmRlbnQgd2hldGhlcgogCSAqIHRocm90dGxpbmcgaXMgYWN0aXZlIG9yIG5vdC4gKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wY2MtY3B1ZnJlcS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3BjYy1jcHVmcmVxLmMKaW5kZXggY2U3Y2RlNy4uYTM2ZGU1YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3BjYy1jcHVmcmVxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3BjYy1jcHVmcmVxLmMKQEAgLTM2OCwyMiArMzY4LDE2IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJb3V0X29iaiA9IG91dHB1dC5wb2ludGVyOwotCWlmIChvdXRfb2JqLT50eXBlICE9IEFDUElfVFlQRV9CVUZGRVIpIHsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBvdXRfZnJlZTsKLQl9CisJaWYgKG91dF9vYmotPnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUikKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAllcnJvcnMgPSAqKCh1MzIgKilvdXRfb2JqLT5idWZmZXIucG9pbnRlcikgJiB+KDEgPDwgMCk7Ci0JaWYgKGVycm9ycykgewotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIG91dF9mcmVlOwotCX0KKwlpZiAoZXJyb3JzKQorCQlyZXR1cm4gLUVOT0RFVjsKIAogCXN1cHBvcnRlZCA9ICooKHUzMiAqKShvdXRfb2JqLT5idWZmZXIucG9pbnRlciArIDQpKTsKLQlpZiAoIShzdXBwb3J0ZWQgJiAweDEpKSB7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQorCWlmICghKHN1cHBvcnRlZCAmIDB4MSkpCisJCXJldHVybiAtRU5PREVWOwogCiBvdXRfZnJlZToKIAlrZnJlZShvdXRwdXQucG9pbnRlcik7CkBAIC0zOTcsMTMgKzM5MSwxNyBAQAogCXN0cnVjdCBwY2NfbWVtb3J5X3Jlc291cmNlICptZW1fcmVzb3VyY2U7CiAJc3RydWN0IHBjY19yZWdpc3Rlcl9yZXNvdXJjZSAqcmVnX3Jlc291cmNlOwogCXVuaW9uIGFjcGlfb2JqZWN0ICpvdXRfb2JqLCAqbWVtYmVyOwotCWFjcGlfaGFuZGxlIGhhbmRsZSwgb3NjX2hhbmRsZTsKKwlhY3BpX2hhbmRsZSBoYW5kbGUsIG9zY19oYW5kbGUsIHBjY2hfaGFuZGxlOwogCWludCByZXQgPSAwOwogCiAJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKE5VTEwsICJcXF9TQiIsICZoYW5kbGUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoaGFuZGxlLCAiUENDSCIsICZwY2NoX2hhbmRsZSk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShoYW5kbGUsICJfT1NDIiwgJm9zY19oYW5kbGUpOwogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewogCQlyZXQgPSBwY2NfY3B1ZnJlcV9kb19vc2MoJm9zY19oYW5kbGUpOwpAQCAtNTQzLDEzICs1NDEsMTMgQEAKIAogCWlmICghcGNjaF92aXJ0X2FkZHIpIHsKIAkJcmVzdWx0ID0gLTE7Ci0JCWdvdG8gcGNjaF9udWxsOworCQlnb3RvIG91dDsKIAl9CiAKIAlyZXN1bHQgPSBwY2NfZ2V0X29mZnNldChjcHUpOwogCWlmIChyZXN1bHQpIHsKIAkJZHByaW50aygiaW5pdDogUENDUCBldmFsdWF0aW9uIGZhaWxlZFxuIik7Ci0JCWdvdG8gZnJlZTsKKwkJZ290byBvdXQ7CiAJfQogCiAJcG9saWN5LT5tYXggPSBwb2xpY3ktPmNwdWluZm8ubWF4X2ZyZXEgPQpAQCAtNTU4LDE0ICs1NTYsMTUgQEAKIAkJaW9yZWFkMzIoJnBjY2hfaGRyLT5taW5pbXVtX2ZyZXF1ZW5jeSkgKiAxMDAwOwogCXBvbGljeS0+Y3VyID0gcGNjX2dldF9mcmVxKGNwdSk7CiAKKwlpZiAoIXBvbGljeS0+Y3VyKSB7CisJCWRwcmludGsoImluaXQ6IFVuYWJsZSB0byBnZXQgY3VycmVudCBDUFUgZnJlcXVlbmN5XG4iKTsKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCiAJZHByaW50aygiaW5pdDogcG9saWN5LT5tYXggaXMgJWQsIHBvbGljeS0+bWluIGlzICVkXG4iLAogCQlwb2xpY3ktPm1heCwgcG9saWN5LT5taW4pOwotCi0JcmV0dXJuIDA7Ci1mcmVlOgotCXBjY19jbGVhcl9tYXBwaW5nKCk7Ci0JZnJlZV9wZXJjcHUocGNjX2NwdV9pbmZvKTsKLXBjY2hfbnVsbDoKK291dDoKIAlyZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazcuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNy5jCmluZGV4IDlhOTcxMTYuLjRhNDVmZDYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNy5jCkBAIC01NjksNyArNTY5LDcgQEAKICAqIFdlIHdpbGwgdGhlbiBnZXQgdGhlIHNhbWUga2luZCBvZiBiZWhhdmlvdXIgYWxyZWFkeSB0ZXN0ZWQgdW5kZXIKICAqIHRoZSAid2VsbC1rbm93biIgb3RoZXIgT1MuCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IGZpeHVwX3NndGModm9pZCkKK3N0YXRpYyBpbnQgX19jcHVpbml0IGZpeHVwX3NndGModm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgc2d0YzsKIAl1bnNpZ25lZCBpbnQgbTsKQEAgLTYwMyw3ICs2MDMsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgX19pbml0IGFjZXJfY3B1ZnJlcV9wc3QoY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmQpCitzdGF0aWMgaW50IF9fY3B1aW5pdCBhY2VyX2NwdWZyZXFfcHN0KGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICpkKQogewogCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCiAJCSIlcyBsYXB0b3Agd2l0aCBicm9rZW4gUFNUIHRhYmxlcyBpbiBCSU9TIGRldGVjdGVkLlxuIiwKQEAgLTYyMSw3ICs2MjEsNyBAQAogICogQSBCSU9TIHVwZGF0ZSBpcyBhbGwgdGhhdCBjYW4gc2F2ZSB0aGVtLgogICogTWVudGlvbiB0aGlzLCBhbmQgZGlzYWJsZSBjcHVmcmVxLgogICovCi1zdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19pbml0ZGF0YSBwb3dlcm5vd19kbWlfdGFibGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2NwdWluaXRkYXRhIHBvd2Vybm93X2RtaV90YWJsZVtdID0gewogCXsKIAkJLmNhbGxiYWNrID0gYWNlcl9jcHVmcmVxX3BzdCwKIAkJLmlkZW50ID0gIkFjZXIgQXNwaXJlIiwKQEAgLTYzMyw3ICs2MzMsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIGludCBfX2luaXQgcG93ZXJub3dfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCitzdGF0aWMgaW50IF9fY3B1aW5pdCBwb3dlcm5vd19jcHVfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKIAl1bmlvbiBtc3JfZmlkdmlkc3RhdHVzIGZpZHZpZHN0YXR1czsKIAlpbnQgcmVzdWx0OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwppbmRleCA3ZWMyMTIzLi40OTE5NzdiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwpAQCAtOSw3ICs5LDcgQEAKICAqICBCYXNlZCBvbiB0aGUgcG93ZXJub3ctazcuYyBtb2R1bGUgd3JpdHRlbiBieSBEYXZlIEpvbmVzLgogICogIChDKSAyMDAzIERhdmUgSm9uZXMgb24gYmVoYWxmIG9mIFN1U0UgTGFicwogICogIChDKSAyMDA0IERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4KLSAqICAoQykgMjAwNCBQYXZlbCBNYWNoZWsgPHBhdmVsQHN1c2UuY3o+CisgKiAgKEMpIDIwMDQgUGF2ZWwgTWFjaGVrIDxwYXZlbEB1Y3cuY3o+CiAgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgogICogIEJhc2VkIHVwb24gZGF0YXNoZWV0cyAmIHNhbXBsZSBDUFVzIGtpbmRseSBwcm92aWRlZCBieSBBTUQuCiAgKgpAQCAtODA2LDYgKzgwNiw4IEBACiAJICogd3d3LmFtZC5jb20KIAkgKi8KIAlwcmludGsoS0VSTl9FUlIgRldfQlVHIFBGWCAiTm8gUFNCIG9yIEFDUEkgX1BTUyBvYmplY3RzXG4iKTsKKwlwcmludGsoS0VSTl9FUlIgUEZYICJNYWtlIHN1cmUgdGhhdCB5b3VyIEJJT1MgaXMgdXAgdG8gZGF0ZSIKKwkJIiBhbmQgQ29vbCdOJ1F1aWV0IHN1cHBvcnQgaXMgZW5hYmxlZCBpbiBCSU9TIHNldHVwXG4iKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIApAQCAtOTEwLDggKzkxMiw4IEBACiB7CiAJaW50IGk7CiAJdTMyIGhpID0gMCwgbG8gPSAwOwotCXJkbXNyKE1TUl9QU1RBVEVfQ1VSX0xJTUlULCBoaSwgbG8pOwotCWRhdGEtPm1heF9od19wc3RhdGUgPSAoaGkgJiBIV19QU1RBVEVfTUFYX01BU0spID4+IEhXX1BTVEFURV9NQVhfU0hJRlQ7CisJcmRtc3IoTVNSX1BTVEFURV9DVVJfTElNSVQsIGxvLCBoaSk7CisJZGF0YS0+bWF4X2h3X3BzdGF0ZSA9IChsbyAmIEhXX1BTVEFURV9NQVhfTUFTSykgPj4gSFdfUFNUQVRFX01BWF9TSElGVDsKIAogCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnQ7IGkrKykgewogCQl1MzIgaW5kZXg7CkBAIC0xMDIzLDEzICsxMDI1LDEyIEBACiAJfQogCWlmIChtYXhfbGF0ZW5jeSA9PSAwKSB7CiAJCS8qCi0JCSAqIEZhbSAxMWggYWx3YXlzIHJldHVybnMgMCBhcyB0cmFuc2l0aW9uIGxhdGVuY3kuCi0JCSAqIFRoaXMgaXMgaW50ZW5kZWQgYW5kIG1lYW5zICJ2ZXJ5IGZhc3QiLiBXaGlsZSBjcHVmcmVxIGNvcmUKLQkJICogYW5kIGdvdmVybm9ycyBjdXJyZW50bHkgY2FuIGhhbmRsZSB0aGF0IGdyYWNlZnVsbHksIGJldHRlcgotCQkgKiBzZXQgaXQgdG8gMSB0byBhdm9pZCBwcm9ibGVtcyBpbiB0aGUgZnV0dXJlLgotCQkgKiBGb3IgYWxsIG90aGVycyBpdCdzIGEgQklPUyBidWcuCisJCSAqIEZhbSAxMWggYW5kIGxhdGVyIG1heSByZXR1cm4gMCBhcyB0cmFuc2l0aW9uIGxhdGVuY3kuIFRoaXMKKwkJICogaXMgaW50ZW5kZWQgYW5kIG1lYW5zICJ2ZXJ5IGZhc3QiLiBXaGlsZSBjcHVmcmVxIGNvcmUgYW5kCisJCSAqIGdvdmVybm9ycyBjdXJyZW50bHkgY2FuIGhhbmRsZSB0aGF0IGdyYWNlZnVsbHksIGJldHRlciBzZXQgaXQKKwkJICogdG8gMSB0byBhdm9pZCBwcm9ibGVtcyBpbiB0aGUgZnV0dXJlLgogCQkgKi8KLQkJaWYgKGJvb3RfY3B1X2RhdGEueDg2ICE9IDB4MTEpCisJCWlmIChib290X2NwdV9kYXRhLng4NiA8IDB4MTEpCiAJCQlwcmludGsoS0VSTl9FUlIgRldfV0FSTiBQRlggIkludmFsaWQgemVybyB0cmFuc2l0aW9uICIKIAkJCQkibGF0ZW5jeVxuIik7CiAJCW1heF9sYXRlbmN5ID0gMTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaHlwZXJ2aXNvci5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9oeXBlcnZpc29yLmMKaW5kZXggZGQ1MzFjYy4uODA5NWY4NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9oeXBlcnZpc29yLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9oeXBlcnZpc29yLmMKQEAgLTM0LDYgKzM0LDkgQEAKIHsKIAkmeDg2X2h5cGVyX3Ztd2FyZSwKIAkmeDg2X2h5cGVyX21zX2h5cGVydiwKKyNpZmRlZiBDT05GSUdfWEVOX1BWSFZNCisJJng4Nl9oeXBlcl94ZW5faHZtLAorI2VuZGlmCiB9OwogCiBjb25zdCBzdHJ1Y3QgaHlwZXJ2aXNvcl94ODYgKng4Nl9oeXBlcjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCmluZGV4IDMzZWFlMjAuLjg5OGMyZjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYwpAQCAtMzQ3LDggKzM0Nyw4IEBACiAJcmV0dXJuIGwzOwogfQogCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQKLWFtZF9jaGVja19sM19kaXNhYmxlKGludCBpbmRleCwgc3RydWN0IF9jcHVpZDRfaW5mb19yZWdzICp0aGlzX2xlYWYpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgYW1kX2NoZWNrX2wzX2Rpc2FibGUoc3RydWN0IF9jcHVpZDRfaW5mb19yZWdzICp0aGlzX2xlYWYsCisJCQkJCSAgIGludCBpbmRleCkKIHsKIAlpbnQgbm9kZTsKIApAQCAtMzk2LDIwICszOTYsMzkgQEAKIAl0aGlzX2xlYWYtPmwzID0gbDNfY2FjaGVzW25vZGVdOwogfQogCisvKgorICogY2hlY2sgd2hldGhlciBhIHNsb3QgdXNlZCBmb3IgZGlzYWJsaW5nIGFuIEwzIGluZGV4IGlzIG9jY3VwaWVkLgorICogQGwzOiBMMyBjYWNoZSBkZXNjcmlwdG9yCisgKiBAc2xvdDogc2xvdCBudW1iZXIgKDAuLjEpCisgKgorICogQHJldHVybnM6IHRoZSBkaXNhYmxlZCBpbmRleCBpZiB1c2VkIG9yIG5lZ2F0aXZlIHZhbHVlIGlmIHNsb3QgZnJlZS4KKyAqLworaW50IGFtZF9nZXRfbDNfZGlzYWJsZV9zbG90KHN0cnVjdCBhbWRfbDNfY2FjaGUgKmwzLCB1bnNpZ25lZCBzbG90KQoreworCXVuc2lnbmVkIGludCByZWcgPSAwOworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGwzLT5kZXYsIDB4MUJDICsgc2xvdCAqIDQsICZyZWcpOworCisJLyogY2hlY2sgd2hldGhlciB0aGlzIHNsb3QgaXMgYWN0aXZhdGVkIGFscmVhZHkgKi8KKwlpZiAocmVnICYgKDNVTCA8PCAzMCkpCisJCXJldHVybiByZWcgJiAweGZmZjsKKworCXJldHVybiAtMTsKK30KKwogc3RhdGljIHNzaXplX3Qgc2hvd19jYWNoZV9kaXNhYmxlKHN0cnVjdCBfY3B1aWQ0X2luZm8gKnRoaXNfbGVhZiwgY2hhciAqYnVmLAogCQkJCSAgdW5zaWduZWQgaW50IHNsb3QpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHRoaXNfbGVhZi0+bDMtPmRldjsKLQl1bnNpZ25lZCBpbnQgcmVnID0gMDsKKwlpbnQgaW5kZXg7CiAKIAlpZiAoIXRoaXNfbGVhZi0+bDMgfHwgIXRoaXNfbGVhZi0+bDMtPmNhbl9kaXNhYmxlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghZGV2KQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpbmRleCA9IGFtZF9nZXRfbDNfZGlzYWJsZV9zbG90KHRoaXNfbGVhZi0+bDMsIHNsb3QpOworCWlmIChpbmRleCA+PSAwKQorCQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgaW5kZXgpOwogCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHgxQkMgKyBzbG90ICogNCwgJnJlZyk7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDh4XG4iLCByZWcpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIkZSRUVcbiIpOwogfQogCiAjZGVmaW5lIFNIT1dfQ0FDSEVfRElTQUJMRShzbG90KQkJCQkJXApAQCAtNDUxLDM3ICs0NzAsNzQgQEAKIAl9CiB9CiAKLQotc3RhdGljIHNzaXplX3Qgc3RvcmVfY2FjaGVfZGlzYWJsZShzdHJ1Y3QgX2NwdWlkNF9pbmZvICp0aGlzX2xlYWYsCi0JCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsCi0JCQkJICAgdW5zaWduZWQgaW50IHNsb3QpCisvKgorICogZGlzYWJsZSBhIEwzIGNhY2hlIGluZGV4IGJ5IHVzaW5nIGEgZGlzYWJsZS1zbG90CisgKgorICogQGwzOiAgICBMMyBjYWNoZSBkZXNjcmlwdG9yCisgKiBAY3B1OiAgIEEgQ1BVIG9uIHRoZSBub2RlIGNvbnRhaW5pbmcgdGhlIEwzIGNhY2hlCisgKiBAc2xvdDogIHNsb3QgbnVtYmVyICgwLi4xKQorICogQGluZGV4OiBpbmRleCB0byBkaXNhYmxlCisgKgorICogQHJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvciBzdGF0dXMgb24gZmFpbHVyZQorICovCitpbnQgYW1kX3NldF9sM19kaXNhYmxlX3Nsb3Qoc3RydWN0IGFtZF9sM19jYWNoZSAqbDMsIGludCBjcHUsIHVuc2lnbmVkIHNsb3QsCisJCQkgICAgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdGhpc19sZWFmLT5sMy0+ZGV2OwotCWludCBjcHUgPSBjcHVtYXNrX2ZpcnN0KHRvX2NwdW1hc2sodGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcCkpOwotCXVuc2lnbmVkIGxvbmcgdmFsID0gMDsKKwlpbnQgcmV0ID0gMDsKIAogI2RlZmluZSBTVUJDQUNIRV9NQVNLCSgzVUwgPDwgMjApCiAjZGVmaW5lIFNVQkNBQ0hFX0lOREVYCTB4ZmZmCiAKLQlpZiAoIXRoaXNfbGVhZi0+bDMgfHwgIXRoaXNfbGVhZi0+bDMtPmNhbl9kaXNhYmxlKQorCS8qCisJICogY2hlY2sgd2hldGhlciB0aGlzIHNsb3QgaXMgYWxyZWFkeSB1c2VkIG9yCisJICogdGhlIGluZGV4IGlzIGFscmVhZHkgZGlzYWJsZWQKKwkgKi8KKwlyZXQgPSBhbWRfZ2V0X2wzX2Rpc2FibGVfc2xvdChsMywgc2xvdCk7CisJaWYgKHJldCA+PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCS8qCisJICogY2hlY2sgd2hldGhlciB0aGUgb3RoZXIgc2xvdCBoYXMgZGlzYWJsZWQgdGhlCisJICogc2FtZSBpbmRleCBhbHJlYWR5CisJICovCisJaWYgKGluZGV4ID09IGFtZF9nZXRfbDNfZGlzYWJsZV9zbG90KGwzLCAhc2xvdCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogZG8gbm90IGFsbG93IHdyaXRlcyBvdXRzaWRlIG9mIGFsbG93ZWQgYml0cyAqLworCWlmICgoaW5kZXggJiB+KFNVQkNBQ0hFX01BU0sgfCBTVUJDQUNIRV9JTkRFWCkpIHx8CisJICAgICgoaW5kZXggJiBTVUJDQUNIRV9JTkRFWCkgPiBsMy0+aW5kaWNlcykpCisJCXJldHVybiAtRUlOVkFMOworCisJYW1kX2wzX2Rpc2FibGVfaW5kZXgobDMsIGNwdSwgc2xvdCwgaW5kZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2NhY2hlX2Rpc2FibGUoc3RydWN0IF9jcHVpZDRfaW5mbyAqdGhpc19sZWFmLAorCQkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsCisJCQkJICB1bnNpZ25lZCBpbnQgc2xvdCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbCA9IDA7CisJaW50IGNwdSwgZXJyID0gMDsKKwogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCWlmICghZGV2KQorCWlmICghdGhpc19sZWFmLT5sMyB8fCAhdGhpc19sZWFmLT5sMy0+Y2FuX2Rpc2FibGUpCiAJCXJldHVybiAtRUlOVkFMOwogCisJY3B1ID0gY3B1bWFza19maXJzdCh0b19jcHVtYXNrKHRoaXNfbGVhZi0+c2hhcmVkX2NwdV9tYXApKTsKKwogCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyogZG8gbm90IGFsbG93IHdyaXRlcyBvdXRzaWRlIG9mIGFsbG93ZWQgYml0cyAqLwotCWlmICgodmFsICYgfihTVUJDQUNIRV9NQVNLIHwgU1VCQ0FDSEVfSU5ERVgpKSB8fAotCSAgICAoKHZhbCAmIFNVQkNBQ0hFX0lOREVYKSA+IHRoaXNfbGVhZi0+bDMtPmluZGljZXMpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWFtZF9sM19kaXNhYmxlX2luZGV4KHRoaXNfbGVhZi0+bDMsIGNwdSwgc2xvdCwgdmFsKTsKLQorCWVyciA9IGFtZF9zZXRfbDNfZGlzYWJsZV9zbG90KHRoaXNfbGVhZi0+bDMsIGNwdSwgc2xvdCwgdmFsKTsKKwlpZiAoZXJyKSB7CisJCWlmIChlcnIgPT0gLUVFWElTVCkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkwzIGRpc2FibGUgc2xvdCAlZCBpbiB1c2UhXG4iLAorCQkJCQkgICAgc2xvdCk7CisJCXJldHVybiBlcnI7CisJfQogCXJldHVybiBjb3VudDsKIH0KIApAQCAtNTAyLDcgKzU1OCw3IEBACiAKICNlbHNlCS8qIENPTkZJR19DUFVfU1VQX0FNRCAqLwogc3RhdGljIHZvaWQgX19jcHVpbml0Ci1hbWRfY2hlY2tfbDNfZGlzYWJsZShpbnQgaW5kZXgsIHN0cnVjdCBfY3B1aWQ0X2luZm9fcmVncyAqdGhpc19sZWFmKQorYW1kX2NoZWNrX2wzX2Rpc2FibGUoc3RydWN0IF9jcHVpZDRfaW5mb19yZWdzICp0aGlzX2xlYWYsIGludCBpbmRleCkKIHsKIH07CiAjZW5kaWYgLyogQ09ORklHX0NQVV9TVVBfQU1EICovCkBAIC01MTgsNyArNTc0LDcgQEAKIAogCWlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpIHsKIAkJYW1kX2NwdWlkNChpbmRleCwgJmVheCwgJmVieCwgJmVjeCk7Ci0JCWFtZF9jaGVja19sM19kaXNhYmxlKGluZGV4LCB0aGlzX2xlYWYpOworCQlhbWRfY2hlY2tfbDNfZGlzYWJsZSh0aGlzX2xlYWYsIGluZGV4KTsKIAl9IGVsc2UgewogCQljcHVpZF9jb3VudCg0LCBpbmRleCwgJmVheC5mdWxsLCAmZWJ4LmZ1bGwsICZlY3guZnVsbCwgJmVkeCk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYwppbmRleCAxOGNjNDI1Li5lMTI2OWQ2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYwpAQCAtNTEsNyArNTEsNyBAQAogc3RhdGljIERFRklORV9NVVRFWChtY2VfcmVhZF9tdXRleCk7CiAKICNkZWZpbmUgcmN1X2RlcmVmZXJlbmNlX2NoZWNrX21jZShwKSBcCi0JcmN1X2RlcmVmZXJlbmNlX2NoZWNrKChwKSwgXAorCXJjdV9kZXJlZmVyZW5jZV9pbmRleF9jaGVjaygocCksIFwKIAkJCSAgICAgIHJjdV9yZWFkX2xvY2tfc2NoZWRfaGVsZCgpIHx8IFwKIAkJCSAgICAgIGxvY2tkZXBfaXNfaGVsZCgmbWNlX3JlYWRfbXV0ZXgpKQogCkBAIC02MDAsNiArNjAwLDcgQEAKIAkJICovCiAJCWlmICghKGZsYWdzICYgTUNQX0RPTlRMT0cpICYmICFtY2VfZG9udF9sb2dfY2UpIHsKIAkJCW1jZV9sb2coJm0pOworCQkJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJng4Nl9tY2VfZGVjb2Rlcl9jaGFpbiwgMCwgJm0pOwogCQkJYWRkX3RhaW50KFRBSU5UX01BQ0hJTkVfQ0hFQ0spOwogCQl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCmluZGV4IGUxYTBhM2IuLmMyYThiMjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYwpAQCAtMzQsMTUgKzM0LDI1IEBACiAvKiBIb3cgbG9uZyB0byB3YWl0IGJldHdlZW4gcmVwb3J0aW5nIHRoZXJtYWwgZXZlbnRzICovCiAjZGVmaW5lIENIRUNLX0lOVEVSVkFMCQkoMzAwICogSFopCiAKLS8qCi0gKiBDdXJyZW50IHRoZXJtYWwgdGhyb3R0bGluZyBzdGF0ZToKLSAqLwotc3RydWN0IHRoZXJtYWxfc3RhdGUgewotCWJvb2wJCQlpc190aHJvdHRsZWQ7CisjZGVmaW5lIFRIRVJNQUxfVEhST1RUTElOR19FVkVOVAkwCisjZGVmaW5lIFBPV0VSX0xJTUlUX0VWRU5UCQkxCiAKKy8qCisgKiBDdXJyZW50IHRoZXJtYWwgZXZlbnQgc3RhdGU6CisgKi8KK3N0cnVjdCBfdGhlcm1hbF9zdGF0ZSB7CisJYm9vbAkJCW5ld19ldmVudDsKKwlpbnQJCQlldmVudDsKIAl1NjQJCQluZXh0X2NoZWNrOwotCXVuc2lnbmVkIGxvbmcJCXRocm90dGxlX2NvdW50OwotCXVuc2lnbmVkIGxvbmcJCWxhc3RfdGhyb3R0bGVfY291bnQ7CisJdW5zaWduZWQgbG9uZwkJY291bnQ7CisJdW5zaWduZWQgbG9uZwkJbGFzdF9jb3VudDsKK307CisKK3N0cnVjdCB0aGVybWFsX3N0YXRlIHsKKwlzdHJ1Y3QgX3RoZXJtYWxfc3RhdGUgY29yZV90aHJvdHRsZTsKKwlzdHJ1Y3QgX3RoZXJtYWxfc3RhdGUgY29yZV9wb3dlcl9saW1pdDsKKwlzdHJ1Y3QgX3RoZXJtYWxfc3RhdGUgcGFja2FnZV90aHJvdHRsZTsKKwlzdHJ1Y3QgX3RoZXJtYWxfc3RhdGUgcGFja2FnZV9wb3dlcl9saW1pdDsKIH07CiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGhlcm1hbF9zdGF0ZSwgdGhlcm1hbF9zdGF0ZSk7CkBAIC01MywxMSArNjMsMTMgQEAKIAogI2lmZGVmIENPTkZJR19TWVNGUwogI2RlZmluZSBkZWZpbmVfdGhlcm1fdGhyb3Rfc3lzZGV2X29uZV9ybyhfbmFtZSkJCQkJXAotCXN0YXRpYyBTWVNERVZfQVRUUihfbmFtZSwgMDQ0NCwgdGhlcm1fdGhyb3Rfc3lzZGV2X3Nob3dfIyNfbmFtZSwgTlVMTCkKKwlzdGF0aWMgU1lTREVWX0FUVFIoX25hbWUsIDA0NDQsCQkJCQlcCisJCQkgICB0aGVybV90aHJvdF9zeXNkZXZfc2hvd18jI19uYW1lLAkJXAorCQkJCSAgIE5VTEwpCQkJCVwKIAotI2RlZmluZSBkZWZpbmVfdGhlcm1fdGhyb3Rfc3lzZGV2X3Nob3dfZnVuYyhuYW1lKQkJCVwKKyNkZWZpbmUgZGVmaW5lX3RoZXJtX3Rocm90X3N5c2Rldl9zaG93X2Z1bmMoZXZlbnQsIG5hbWUpCQlcCiAJCQkJCQkJCQlcCi1zdGF0aWMgc3NpemVfdCB0aGVybV90aHJvdF9zeXNkZXZfc2hvd18jI25hbWUoCQkJCVwKK3N0YXRpYyBzc2l6ZV90IHRoZXJtX3Rocm90X3N5c2Rldl9zaG93XyMjZXZlbnQjI18jI25hbWUoCQlcCiAJCQlzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAkJCQlcCiAJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwJCQlcCiAJCQljaGFyICpidWYpCQkJCQlcCkBAIC02NiwzMCArNzgsNDIgQEAKIAlzc2l6ZV90IHJldDsJCQkJCQkJXAogCQkJCQkJCQkJXAogCXByZWVtcHRfZGlzYWJsZSgpOwkvKiBDUFUgaG90cGx1ZyAqLwkJCVwKLQlpZiAoY3B1X29ubGluZShjcHUpKQkJCQkJCVwKKwlpZiAoY3B1X29ubGluZShjcHUpKSB7CQkJCQkJXAogCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwJCQkJXAotCQkJICAgICAgcGVyX2NwdSh0aGVybWFsX3N0YXRlLCBjcHUpLm5hbWUpOwlcCi0JZWxzZQkJCQkJCQkJXAorCQkJICAgICAgcGVyX2NwdSh0aGVybWFsX3N0YXRlLCBjcHUpLmV2ZW50Lm5hbWUpOwlcCisJfSBlbHNlCQkJCQkJCQlcCiAJCXJldCA9IDA7CQkJCQkJXAogCXByZWVtcHRfZW5hYmxlKCk7CQkJCQkJXAogCQkJCQkJCQkJXAogCXJldHVybiByZXQ7CQkJCQkJCVwKIH0KIAotZGVmaW5lX3RoZXJtX3Rocm90X3N5c2Rldl9zaG93X2Z1bmModGhyb3R0bGVfY291bnQpOwotZGVmaW5lX3RoZXJtX3Rocm90X3N5c2Rldl9vbmVfcm8odGhyb3R0bGVfY291bnQpOworZGVmaW5lX3RoZXJtX3Rocm90X3N5c2Rldl9zaG93X2Z1bmMoY29yZV90aHJvdHRsZSwgY291bnQpOworZGVmaW5lX3RoZXJtX3Rocm90X3N5c2Rldl9vbmVfcm8oY29yZV90aHJvdHRsZV9jb3VudCk7CisKK2RlZmluZV90aGVybV90aHJvdF9zeXNkZXZfc2hvd19mdW5jKGNvcmVfcG93ZXJfbGltaXQsIGNvdW50KTsKK2RlZmluZV90aGVybV90aHJvdF9zeXNkZXZfb25lX3JvKGNvcmVfcG93ZXJfbGltaXRfY291bnQpOworCitkZWZpbmVfdGhlcm1fdGhyb3Rfc3lzZGV2X3Nob3dfZnVuYyhwYWNrYWdlX3Rocm90dGxlLCBjb3VudCk7CitkZWZpbmVfdGhlcm1fdGhyb3Rfc3lzZGV2X29uZV9ybyhwYWNrYWdlX3Rocm90dGxlX2NvdW50KTsKKworZGVmaW5lX3RoZXJtX3Rocm90X3N5c2Rldl9zaG93X2Z1bmMocGFja2FnZV9wb3dlcl9saW1pdCwgY291bnQpOworZGVmaW5lX3RoZXJtX3Rocm90X3N5c2Rldl9vbmVfcm8ocGFja2FnZV9wb3dlcl9saW1pdF9jb3VudCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp0aGVybWFsX3Rocm90dGxlX2F0dHJzW10gPSB7Ci0JJmF0dHJfdGhyb3R0bGVfY291bnQuYXR0ciwKKwkmYXR0cl9jb3JlX3Rocm90dGxlX2NvdW50LmF0dHIsCiAJTlVMTAogfTsKIAotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdGhlcm1hbF90aHJvdHRsZV9hdHRyX2dyb3VwID0geworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdGhlcm1hbF9hdHRyX2dyb3VwID0gewogCS5hdHRycwk9IHRoZXJtYWxfdGhyb3R0bGVfYXR0cnMsCiAJLm5hbWUJPSAidGhlcm1hbF90aHJvdHRsZSIKIH07CiAjZW5kaWYgLyogQ09ORklHX1NZU0ZTICovCiAKKyNkZWZpbmUgQ09SRV9MRVZFTAkwCisjZGVmaW5lIFBBQ0tBR0VfTEVWRUwJMQorCiAvKioqCiAgKiB0aGVybV90aHJvdF9wcm9jZXNzIC0gUHJvY2VzcyB0aGVybWFsIHRocm90dGxpbmcgZXZlbnQgZnJvbSBpbnRlcnJ1cHQKICAqIEBjdXJyOiBXaGV0aGVyIHRoZSBjb25kaXRpb24gaXMgY3VycmVudCBvciBub3QgKGJvb2xlYW4pLCBzaW5jZSB0aGUKQEAgLTEwNiwzOSArMTMwLDcwIEBACiAgKiAgICAgICAgICAxIDogRXZlbnQgc2hvdWxkIGJlIGxvZ2dlZCBmdXJ0aGVyLCBhbmQgYSBtZXNzYWdlIGhhcyBiZWVuCiAgKiAgICAgICAgICAgICAgcHJpbnRlZCB0byB0aGUgc3lzbG9nLgogICovCi1zdGF0aWMgaW50IHRoZXJtX3Rocm90X3Byb2Nlc3MoYm9vbCBpc190aHJvdHRsZWQpCitzdGF0aWMgaW50IHRoZXJtX3Rocm90X3Byb2Nlc3MoYm9vbCBuZXdfZXZlbnQsIGludCBldmVudCwgaW50IGxldmVsKQogewotCXN0cnVjdCB0aGVybWFsX3N0YXRlICpzdGF0ZTsKLQl1bnNpZ25lZCBpbnQgdGhpc19jcHU7Ci0JYm9vbCB3YXNfdGhyb3R0bGVkOworCXN0cnVjdCBfdGhlcm1hbF9zdGF0ZSAqc3RhdGU7CisJdW5zaWduZWQgaW50IHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWJvb2wgb2xkX2V2ZW50OwogCXU2NCBub3c7CisJc3RydWN0IHRoZXJtYWxfc3RhdGUgKnBzdGF0ZSA9ICZwZXJfY3B1KHRoZXJtYWxfc3RhdGUsIHRoaXNfY3B1KTsKIAotCXRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCW5vdyA9IGdldF9qaWZmaWVzXzY0KCk7Ci0Jc3RhdGUgPSAmcGVyX2NwdSh0aGVybWFsX3N0YXRlLCB0aGlzX2NwdSk7CisJaWYgKGxldmVsID09IENPUkVfTEVWRUwpIHsKKwkJaWYgKGV2ZW50ID09IFRIRVJNQUxfVEhST1RUTElOR19FVkVOVCkKKwkJCXN0YXRlID0gJnBzdGF0ZS0+Y29yZV90aHJvdHRsZTsKKwkJZWxzZSBpZiAoZXZlbnQgPT0gUE9XRVJfTElNSVRfRVZFTlQpCisJCQlzdGF0ZSA9ICZwc3RhdGUtPmNvcmVfcG93ZXJfbGltaXQ7CisJCWVsc2UKKwkJCSByZXR1cm4gMDsKKwl9IGVsc2UgaWYgKGxldmVsID09IFBBQ0tBR0VfTEVWRUwpIHsKKwkJaWYgKGV2ZW50ID09IFRIRVJNQUxfVEhST1RUTElOR19FVkVOVCkKKwkJCXN0YXRlID0gJnBzdGF0ZS0+cGFja2FnZV90aHJvdHRsZTsKKwkJZWxzZSBpZiAoZXZlbnQgPT0gUE9XRVJfTElNSVRfRVZFTlQpCisJCQlzdGF0ZSA9ICZwc3RhdGUtPnBhY2thZ2VfcG93ZXJfbGltaXQ7CisJCWVsc2UKKwkJCXJldHVybiAwOworCX0gZWxzZQorCQlyZXR1cm4gMDsKIAotCXdhc190aHJvdHRsZWQgPSBzdGF0ZS0+aXNfdGhyb3R0bGVkOwotCXN0YXRlLT5pc190aHJvdHRsZWQgPSBpc190aHJvdHRsZWQ7CisJb2xkX2V2ZW50ID0gc3RhdGUtPm5ld19ldmVudDsKKwlzdGF0ZS0+bmV3X2V2ZW50ID0gbmV3X2V2ZW50OwogCi0JaWYgKGlzX3Rocm90dGxlZCkKLQkJc3RhdGUtPnRocm90dGxlX2NvdW50Kys7CisJaWYgKG5ld19ldmVudCkKKwkJc3RhdGUtPmNvdW50Kys7CiAKIAlpZiAodGltZV9iZWZvcmU2NChub3csIHN0YXRlLT5uZXh0X2NoZWNrKSAmJgotCQkJc3RhdGUtPnRocm90dGxlX2NvdW50ICE9IHN0YXRlLT5sYXN0X3Rocm90dGxlX2NvdW50KQorCQkJc3RhdGUtPmNvdW50ICE9IHN0YXRlLT5sYXN0X2NvdW50KQogCQlyZXR1cm4gMDsKIAogCXN0YXRlLT5uZXh0X2NoZWNrID0gbm93ICsgQ0hFQ0tfSU5URVJWQUw7Ci0Jc3RhdGUtPmxhc3RfdGhyb3R0bGVfY291bnQgPSBzdGF0ZS0+dGhyb3R0bGVfY291bnQ7CisJc3RhdGUtPmxhc3RfY291bnQgPSBzdGF0ZS0+Y291bnQ7CiAKIAkvKiBpZiB3ZSBqdXN0IGVudGVyZWQgdGhlIHRoZXJtYWwgZXZlbnQgKi8KLQlpZiAoaXNfdGhyb3R0bGVkKSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgIkNQVSVkOiBUZW1wZXJhdHVyZSBhYm92ZSB0aHJlc2hvbGQsIGNwdSBjbG9jayB0aHJvdHRsZWQgKHRvdGFsIGV2ZW50cyA9ICVsdSlcbiIsIHRoaXNfY3B1LCBzdGF0ZS0+dGhyb3R0bGVfY291bnQpOworCWlmIChuZXdfZXZlbnQpIHsKKwkJaWYgKGV2ZW50ID09IFRIRVJNQUxfVEhST1RUTElOR19FVkVOVCkKKwkJCXByaW50ayhLRVJOX0NSSVQgIkNQVSVkOiAlcyB0ZW1wZXJhdHVyZSBhYm92ZSB0aHJlc2hvbGQsIGNwdSBjbG9jayB0aHJvdHRsZWQgKHRvdGFsIGV2ZW50cyA9ICVsdSlcbiIsCisJCQkJdGhpc19jcHUsCisJCQkJbGV2ZWwgPT0gQ09SRV9MRVZFTCA/ICJDb3JlIiA6ICJQYWNrYWdlIiwKKwkJCQlzdGF0ZS0+Y291bnQpOworCQllbHNlCisJCQlwcmludGsoS0VSTl9DUklUICJDUFUlZDogJXMgcG93ZXIgbGltaXQgbm90aWZpY2F0aW9uICh0b3RhbCBldmVudHMgPSAlbHUpXG4iLAorCQkJCXRoaXNfY3B1LAorCQkJCWxldmVsID09IENPUkVfTEVWRUwgPyAiQ29yZSIgOiAiUGFja2FnZSIsCisJCQkJc3RhdGUtPmNvdW50KTsKIAogCQlhZGRfdGFpbnQoVEFJTlRfTUFDSElORV9DSEVDSyk7CiAJCXJldHVybiAxOwogCX0KLQlpZiAod2FzX3Rocm90dGxlZCkgewotCQlwcmludGsoS0VSTl9JTkZPICJDUFUlZDogVGVtcGVyYXR1cmUvc3BlZWQgbm9ybWFsXG4iLCB0aGlzX2NwdSk7CisJaWYgKG9sZF9ldmVudCkgeworCQlpZiAoZXZlbnQgPT0gVEhFUk1BTF9USFJPVFRMSU5HX0VWRU5UKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVJWQ6ICVzIHRlbXBlcmF0dXJlL3NwZWVkIG5vcm1hbFxuIiwKKwkJCQl0aGlzX2NwdSwKKwkJCQlsZXZlbCA9PSBDT1JFX0xFVkVMID8gIkNvcmUiIDogIlBhY2thZ2UiKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVJWQ6ICVzIHBvd2VyIGxpbWl0IG5vcm1hbFxuIiwKKwkJCQl0aGlzX2NwdSwKKwkJCQlsZXZlbCA9PSBDT1JFX0xFVkVMID8gIkNvcmUiIDogIlBhY2thZ2UiKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0xNDksMTMgKzIwNCwzMiBAQAogLyogQWRkL1JlbW92ZSB0aGVybWFsX3Rocm90dGxlIGludGVyZmFjZSBmb3IgQ1BVIGRldmljZTogKi8KIHN0YXRpYyBfX2NwdWluaXQgaW50IHRoZXJtYWxfdGhyb3R0bGVfYWRkX2RldihzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzX2RldikKIHsKLQlyZXR1cm4gc3lzZnNfY3JlYXRlX2dyb3VwKCZzeXNfZGV2LT5rb2JqLAotCQkJCSAgJnRoZXJtYWxfdGhyb3R0bGVfYXR0cl9ncm91cCk7CisJaW50IGVycjsKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKworCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmc3lzX2Rldi0+a29iaiwgJnRoZXJtYWxfYXR0cl9ncm91cCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX1BMTikpCisJCWVyciA9IHN5c2ZzX2FkZF9maWxlX3RvX2dyb3VwKCZzeXNfZGV2LT5rb2JqLAorCQkJCQkgICAgICAmYXR0cl9jb3JlX3Bvd2VyX2xpbWl0X2NvdW50LmF0dHIsCisJCQkJCSAgICAgIHRoZXJtYWxfYXR0cl9ncm91cC5uYW1lKTsKKwlpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9QVFMpKQorCQllcnIgPSBzeXNmc19hZGRfZmlsZV90b19ncm91cCgmc3lzX2Rldi0+a29iaiwKKwkJCQkJICAgICAgJmF0dHJfcGFja2FnZV90aHJvdHRsZV9jb3VudC5hdHRyLAorCQkJCQkgICAgICB0aGVybWFsX2F0dHJfZ3JvdXAubmFtZSk7CisJCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX1BMTikpCisJCQllcnIgPSBzeXNmc19hZGRfZmlsZV90b19ncm91cCgmc3lzX2Rldi0+a29iaiwKKwkJCQkJJmF0dHJfcGFja2FnZV9wb3dlcl9saW1pdF9jb3VudC5hdHRyLAorCQkJCQl0aGVybWFsX2F0dHJfZ3JvdXAubmFtZSk7CisKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgX19jcHVpbml0IHZvaWQgdGhlcm1hbF90aHJvdHRsZV9yZW1vdmVfZGV2KHN0cnVjdCBzeXNfZGV2aWNlICpzeXNfZGV2KQogewotCXN5c2ZzX3JlbW92ZV9ncm91cCgmc3lzX2Rldi0+a29iaiwgJnRoZXJtYWxfdGhyb3R0bGVfYXR0cl9ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzeXNfZGV2LT5rb2JqLCAmdGhlcm1hbF9hdHRyX2dyb3VwKTsKIH0KIAogLyogTXV0ZXggcHJvdGVjdGluZyBkZXZpY2UgY3JlYXRpb24gYWdhaW5zdCBDUFUgaG90cGx1ZzogKi8KQEAgLTIyNiwxNCArMzAwLDUwIEBACiAKICNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi8KIAorLyoKKyAqIFNldCB1cCB0aGUgbW9zdCB0d28gc2lnbmlmaWNhbnQgYml0IHRvIG5vdGlmeSBtY2UgbG9nIHRoYXQgdGhpcyB0aGVybWFsCisgKiBldmVudCB0eXBlLgorICogVGhpcyBpcyBhIHRlbXAgc29sdXRpb24uIE1heSBiZSBjaGFuZ2VkIGluIHRoZSBmdXR1cmUgd2l0aCBtY2UgbG9nCisgKiBpbmZyYXN0dXJlLgorICovCisjZGVmaW5lIENPUkVfVEhST1RUTEVECQkoMCkKKyNkZWZpbmUgQ09SRV9QT1dFUl9MSU1JVAkoKF9fdTY0KTEgPDwgNjIpCisjZGVmaW5lIFBBQ0tBR0VfVEhST1RUTEVECSgoX191NjQpMiA8PCA2MikKKyNkZWZpbmUgUEFDS0FHRV9QT1dFUl9MSU1JVAkoKF9fdTY0KTMgPDwgNjIpCisKIC8qIFRoZXJtYWwgdHJhbnNpdGlvbiBpbnRlcnJ1cHQgaGFuZGxlciAqLwogc3RhdGljIHZvaWQgaW50ZWxfdGhlcm1hbF9pbnRlcnJ1cHQodm9pZCkKIHsKIAlfX3U2NCBtc3JfdmFsOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShzbXBfcHJvY2Vzc29yX2lkKCkpOwogCiAJcmRtc3JsKE1TUl9JQTMyX1RIRVJNX1NUQVRVUywgbXNyX3ZhbCk7Ci0JaWYgKHRoZXJtX3Rocm90X3Byb2Nlc3MoKG1zcl92YWwgJiBUSEVSTV9TVEFUVVNfUFJPQ0hPVCkgIT0gMCkpCi0JCW1jZV9sb2dfdGhlcm1fdGhyb3RfZXZlbnQobXNyX3ZhbCk7CisKKwlpZiAodGhlcm1fdGhyb3RfcHJvY2Vzcyhtc3JfdmFsICYgVEhFUk1fU1RBVFVTX1BST0NIT1QsCisJCQkJVEhFUk1BTF9USFJPVFRMSU5HX0VWRU5ULAorCQkJCUNPUkVfTEVWRUwpICE9IDApCisJCW1jZV9sb2dfdGhlcm1fdGhyb3RfZXZlbnQoQ09SRV9USFJPVFRMRUQgfCBtc3JfdmFsKTsKKworCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX1BMTikpCisJCWlmICh0aGVybV90aHJvdF9wcm9jZXNzKG1zcl92YWwgJiBUSEVSTV9TVEFUVVNfUE9XRVJfTElNSVQsCisJCQkJCVBPV0VSX0xJTUlUX0VWRU5ULAorCQkJCQlDT1JFX0xFVkVMKSAhPSAwKQorCQkJbWNlX2xvZ190aGVybV90aHJvdF9ldmVudChDT1JFX1BPV0VSX0xJTUlUIHwgbXNyX3ZhbCk7CisKKwlpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9QVFMpKSB7CisJCXJkbXNybChNU1JfSUEzMl9QQUNLQUdFX1RIRVJNX1NUQVRVUywgbXNyX3ZhbCk7CisJCWlmICh0aGVybV90aHJvdF9wcm9jZXNzKG1zcl92YWwgJiBQQUNLQUdFX1RIRVJNX1NUQVRVU19QUk9DSE9ULAorCQkJCQlUSEVSTUFMX1RIUk9UVExJTkdfRVZFTlQsCisJCQkJCVBBQ0tBR0VfTEVWRUwpICE9IDApCisJCQltY2VfbG9nX3RoZXJtX3Rocm90X2V2ZW50KFBBQ0tBR0VfVEhST1RUTEVEIHwgbXNyX3ZhbCk7CisJCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX1BMTikpCisJCQlpZiAodGhlcm1fdGhyb3RfcHJvY2Vzcyhtc3JfdmFsICYKKwkJCQkJUEFDS0FHRV9USEVSTV9TVEFUVVNfUE9XRVJfTElNSVQsCisJCQkJCVBPV0VSX0xJTUlUX0VWRU5ULAorCQkJCQlQQUNLQUdFX0xFVkVMKSAhPSAwKQorCQkJCW1jZV9sb2dfdGhlcm1fdGhyb3RfZXZlbnQoUEFDS0FHRV9QT1dFUl9MSU1JVAorCQkJCQkJCSAgfCBtc3JfdmFsKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHVuZXhwZWN0ZWRfdGhlcm1hbF9pbnRlcnJ1cHQodm9pZCkKQEAgLTMzNSw4ICs0NDUsMjYgQEAKIAlhcGljX3dyaXRlKEFQSUNfTFZUVEhNUiwgaCk7CiAKIAlyZG1zcihNU1JfSUEzMl9USEVSTV9JTlRFUlJVUFQsIGwsIGgpOwotCXdybXNyKE1TUl9JQTMyX1RIRVJNX0lOVEVSUlVQVCwKLQkJbCB8IChUSEVSTV9JTlRfTE9XX0VOQUJMRSB8IFRIRVJNX0lOVF9ISUdIX0VOQUJMRSksIGgpOworCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX1BMTikpCisJCXdybXNyKE1TUl9JQTMyX1RIRVJNX0lOVEVSUlVQVCwKKwkJICAgICAgbCB8IChUSEVSTV9JTlRfTE9XX0VOQUJMRQorCQkJfCBUSEVSTV9JTlRfSElHSF9FTkFCTEUgfCBUSEVSTV9JTlRfUExOX0VOQUJMRSksIGgpOworCWVsc2UKKwkJd3Jtc3IoTVNSX0lBMzJfVEhFUk1fSU5URVJSVVBULAorCQkgICAgICBsIHwgKFRIRVJNX0lOVF9MT1dfRU5BQkxFIHwgVEhFUk1fSU5UX0hJR0hfRU5BQkxFKSwgaCk7CisKKwlpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9QVFMpKSB7CisJCXJkbXNyKE1TUl9JQTMyX1BBQ0tBR0VfVEhFUk1fSU5URVJSVVBULCBsLCBoKTsKKwkJaWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfUExOKSkKKwkJCXdybXNyKE1TUl9JQTMyX1BBQ0tBR0VfVEhFUk1fSU5URVJSVVBULAorCQkJICAgICAgbCB8IChQQUNLQUdFX1RIRVJNX0lOVF9MT1dfRU5BQkxFCisJCQkJfCBQQUNLQUdFX1RIRVJNX0lOVF9ISUdIX0VOQUJMRQorCQkJCXwgUEFDS0FHRV9USEVSTV9JTlRfUExOX0VOQUJMRSksIGgpOworCQllbHNlCisJCQl3cm1zcihNU1JfSUEzMl9QQUNLQUdFX1RIRVJNX0lOVEVSUlVQVCwKKwkJCSAgICAgIGwgfCAoUEFDS0FHRV9USEVSTV9JTlRfTE9XX0VOQUJMRQorCQkJCXwgUEFDS0FHRV9USEVSTV9JTlRfSElHSF9FTkFCTEUpLCBoKTsKKwl9CiAKIAlzbXBfdGhlcm1hbF92ZWN0b3IgPSBpbnRlbF90aGVybWFsX2ludGVycnVwdDsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tc2h5cGVydi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tc2h5cGVydi5jCmluZGV4IDE2ZjQxYmIuLmQ5NDRiZjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21zaHlwZXJ2LmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxhc20vbXNoeXBlcnYuaD4KIAogc3RydWN0IG1zX2h5cGVydl9pbmZvIG1zX2h5cGVydjsKK0VYUE9SVF9TWU1CT0xfR1BMKG1zX2h5cGVydik7CiAKIHN0YXRpYyBib29sIF9faW5pdCBtc19oeXBlcnZfcGxhdGZvcm0odm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jbGVhbnVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2xlYW51cC5jCmluZGV4IDA2MTMwYjUuLmM1ZjU5ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jbGVhbnVwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NsZWFudXAuYwpAQCAtNjMyLDkgKzYzMiw5IEBACiAJdW5zaWduZWQgbG9uZyBncmFuX2Jhc2UsIGNodW5rX2Jhc2UsIGxvc2VfYmFzZTsKIAljaGFyIGdyYW5fZmFjdG9yLCBjaHVua19mYWN0b3IsIGxvc2VfZmFjdG9yOwogCi0JZ3Jhbl9iYXNlID0gdG9fc2l6ZV9mYWN0b3IocmVzdWx0W2ldLmdyYW5fc2l6ZWssICZncmFuX2ZhY3RvciksCi0JY2h1bmtfYmFzZSA9IHRvX3NpemVfZmFjdG9yKHJlc3VsdFtpXS5jaHVua19zaXplaywgJmNodW5rX2ZhY3RvciksCi0JbG9zZV9iYXNlID0gdG9fc2l6ZV9mYWN0b3IocmVzdWx0W2ldLmxvc2VfY292ZXJfc2l6ZWssICZsb3NlX2ZhY3RvciksCisJZ3Jhbl9iYXNlID0gdG9fc2l6ZV9mYWN0b3IocmVzdWx0W2ldLmdyYW5fc2l6ZWssICZncmFuX2ZhY3Rvcik7CisJY2h1bmtfYmFzZSA9IHRvX3NpemVfZmFjdG9yKHJlc3VsdFtpXS5jaHVua19zaXplaywgJmNodW5rX2ZhY3Rvcik7CisJbG9zZV9iYXNlID0gdG9fc2l6ZV9mYWN0b3IocmVzdWx0W2ldLmxvc2VfY292ZXJfc2l6ZWssICZsb3NlX2ZhY3Rvcik7CiAKIAlwcl9pbmZvKCIlc2dyYW5fc2l6ZTogJWxkJWMgXHRjaHVua19zaXplOiAlbGQlYyBcdCIsCiAJCXJlc3VsdFtpXS5iYWQgPyAiKkJBRCoiIDogIiAiLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMKaW5kZXggZmQzMWE0NC4uN2QyOGQ3ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jCkBAIC00MzMsMTMgKzQzMywxMiBAQAogewogCXVuc2lnbmVkIGludCBtYXNrX2xvLCBtYXNrX2hpLCBiYXNlX2xvLCBiYXNlX2hpOwogCXVuc2lnbmVkIGludCB0bXAsIGhpOwotCWludCBjcHU7CiAKIAkvKgogCSAqIGdldF9tdHJyIGRvZXNuJ3QgbmVlZCB0byB1cGRhdGUgbXRycl9zdGF0ZSwgYWxzbyBpdCBjb3VsZCBiZSBjYWxsZWQKIAkgKiBmcm9tIGFueSBjcHUsIHNvIHRyeSB0byBwcmludCBpdCBvdXQgZGlyZWN0bHkuCiAJICovCi0JY3B1ID0gZ2V0X2NwdSgpOworCWdldF9jcHUoKTsKIAogCXJkbXNyKE1UUlJwaHlzTWFza19NU1IocmVnKSwgbWFza19sbywgbWFza19oaSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCmluZGV4IDc5NTU2YmQuLjAxYzBmM2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYwpAQCAtMzUsNiArMzUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4gLyogRklYTUU6IGt2bV9wYXJhLmggbmVlZHMgdGhpcyAqLwogCisjaW5jbHVkZSA8bGludXgvc3RvcF9tYWNoaW5lLmg+CiAjaW5jbHVkZSA8bGludXgva3ZtX3BhcmEuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0xNDMsMjIgKzE0NCwyOCBAQAogCW10cnJfdHlwZQlzbXBfdHlwZTsKIH07CiAKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1X3N0b3Bfd29yaywgbXRycl93b3JrKTsKKwogLyoqCi0gKiBpcGlfaGFuZGxlciAtIFN5bmNocm9uaXNhdGlvbiBoYW5kbGVyLiBFeGVjdXRlZCBieSAib3RoZXIiIENQVXMuCisgKiBtdHJyX3dvcmtfaGFuZGxlciAtIFN5bmNocm9uaXNhdGlvbiBoYW5kbGVyLiBFeGVjdXRlZCBieSAib3RoZXIiIENQVXMuCiAgKiBAaW5mbzogcG9pbnRlciB0byBtdHJyIGNvbmZpZ3VyYXRpb24gZGF0YQogICoKICAqIFJldHVybnMgbm90aGluZy4KICAqLwotc3RhdGljIHZvaWQgaXBpX2hhbmRsZXIodm9pZCAqaW5mbykKK3N0YXRpYyBpbnQgbXRycl93b3JrX2hhbmRsZXIodm9pZCAqaW5mbykKIHsKICNpZmRlZiBDT05GSUdfU01QCiAJc3RydWN0IHNldF9tdHJyX2RhdGEgKmRhdGEgPSBpbmZvOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlhdG9taWNfZGVjKCZkYXRhLT5jb3VudCk7CisJd2hpbGUgKCFhdG9taWNfcmVhZCgmZGF0YS0+Z2F0ZSkpCisJCWNwdV9yZWxheCgpOworCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCiAJYXRvbWljX2RlYygmZGF0YS0+Y291bnQpOwotCXdoaWxlICghYXRvbWljX3JlYWQoJmRhdGEtPmdhdGUpKQorCXdoaWxlIChhdG9taWNfcmVhZCgmZGF0YS0+Z2F0ZSkpCiAJCWNwdV9yZWxheCgpOwogCiAJLyogIFRoZSBtYXN0ZXIgaGFzIGNsZWFyZWQgbWUgdG8gZXhlY3V0ZSAgKi8KQEAgLTE3MywxMiArMTgwLDEzIEBACiAJfQogCiAJYXRvbWljX2RlYygmZGF0YS0+Y291bnQpOwotCXdoaWxlIChhdG9taWNfcmVhZCgmZGF0YS0+Z2F0ZSkpCisJd2hpbGUgKCFhdG9taWNfcmVhZCgmZGF0YS0+Z2F0ZSkpCiAJCWNwdV9yZWxheCgpOwogCiAJYXRvbWljX2RlYygmZGF0YS0+Y291bnQpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKICNlbmRpZgorCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludCB0eXBlc19jb21wYXRpYmxlKG10cnJfdHlwZSB0eXBlMSwgbXRycl90eXBlIHR5cGUyKQpAQCAtMTk4LDcgKzIwNiw3IEBACiAgKgogICogVGhpcyBpcyBraW5kYSB0cmlja3ksIGJ1dCBmb3J0dW5hdGVseSwgSW50ZWwgc3BlbGxlZCBpdCBvdXQgZm9yIHVzIGNsZWFubHk6CiAgKgotICogMS4gU2VuZCBJUEkgdG8gZG8gdGhlIGZvbGxvd2luZzoKKyAqIDEuIFF1ZXVlIHdvcmsgdG8gZG8gdGhlIGZvbGxvd2luZyBvbiBhbGwgcHJvY2Vzc29yczoKICAqIDIuIERpc2FibGUgSW50ZXJydXB0cwogICogMy4gV2FpdCBmb3IgYWxsIHByb2NzIHRvIGRvIHNvCiAgKiA0LiBFbnRlciBuby1maWxsIGNhY2hlIG1vZGUKQEAgLTIxNSwxNCArMjIzLDE3IEBACiAgKiAxNS4gRW5hYmxlIGludGVycnVwdHMuCiAgKgogICogV2hhdCBkb2VzIHRoYXQgbWVhbiBmb3IgdXM/IFdlbGwsIGZpcnN0IHdlIHNldCBkYXRhLmNvdW50IHRvIHRoZSBudW1iZXIKLSAqIG9mIENQVXMuIEFzIGVhY2ggQ1BVIGRpc2FibGVzIGludGVycnVwdHMsIGl0J2xsIGRlY3JlbWVudCBpdCBvbmNlLiBXZSB3YWl0Ci0gKiB1bnRpbCBpdCBoaXRzIDAgYW5kIHByb2NlZWQuIFdlIHNldCB0aGUgZGF0YS5nYXRlIGZsYWcgYW5kIHJlc2V0IGRhdGEuY291bnQuCi0gKiBNZWFud2hpbGUsIHRoZXkgYXJlIHdhaXRpbmcgZm9yIHRoYXQgZmxhZyB0byBiZSBzZXQuIE9uY2UgaXQncyBzZXQsIGVhY2gKKyAqIG9mIENQVXMuIEFzIGVhY2ggQ1BVIGFubm91bmNlcyB0aGF0IGl0IHN0YXJ0ZWQgdGhlIHJlbmRlenZvdXMgaGFuZGxlciBieQorICogZGVjcmVtZW50aW5nIHRoZSBjb3VudCwgV2UgcmVzZXQgZGF0YS5jb3VudCBhbmQgc2V0IHRoZSBkYXRhLmdhdGUgZmxhZworICogYWxsb3dpbmcgYWxsIHRoZSBjcHUncyB0byBwcm9jZWVkIHdpdGggdGhlIHdvcmsuIEFzIGVhY2ggY3B1IGRpc2FibGVzCisgKiBpbnRlcnJ1cHRzLCBpdCdsbCBkZWNyZW1lbnQgZGF0YS5jb3VudCBvbmNlLiBXZSB3YWl0IHVudGlsIGl0IGhpdHMgMCBhbmQKKyAqIHByb2NlZWQuIFdlIGNsZWFyIHRoZSBkYXRhLmdhdGUgZmxhZyBhbmQgcmVzZXQgZGF0YS5jb3VudC4gTWVhbndoaWxlLCB0aGV5CisgKiBhcmUgd2FpdGluZyBmb3IgdGhhdCBmbGFnIHRvIGJlIGNsZWFyZWQuIE9uY2UgaXQncyBjbGVhcmVkLCBlYWNoCiAgKiBDUFUgZ29lcyB0aHJvdWdoIHRoZSB0cmFuc2l0aW9uIG9mIHVwZGF0aW5nIE1UUlJzLgogICogVGhlIENQVSB2ZW5kb3JzIG1heSBlYWNoIGRvIGl0IGRpZmZlcmVudGx5LAogICogc28gd2UgY2FsbCBtdHJyX2lmLT5zZXQoKSBjYWxsYmFjayBhbmQgbGV0IHRoZW0gdGFrZSBjYXJlIG9mIGl0LgogICogV2hlbiB0aGV5J3JlIGRvbmUsIHRoZXkgYWdhaW4gZGVjcmVtZW50IGRhdGEtPmNvdW50IGFuZCB3YWl0IGZvciBkYXRhLmdhdGUKLSAqIHRvIGJlIHJlc2V0LgorICogdG8gYmUgc2V0LgogICogV2hlbiB3ZSBmaW5pc2gsIHdlIHdhaXQgZm9yIGRhdGEuY291bnQgdG8gaGl0IDAgYW5kIHRvZ2dsZSB0aGUgZGF0YS5nYXRlIGZsYWcKICAqIEV2ZXJ5b25lIHRoZW4gZW5hYmxlcyBpbnRlcnJ1cHRzIGFuZCB3ZSBhbGwgY29udGludWUgb24uCiAgKgpAQCAtMjM0LDYgKzI0NSw5IEBACiB7CiAJc3RydWN0IHNldF9tdHJyX2RhdGEgZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjcHU7CisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKIAogCWRhdGEuc21wX3JlZyA9IHJlZzsKIAlkYXRhLnNtcF9iYXNlID0gYmFzZTsKQEAgLTI0Niw4ICsyNjAsMjMgQEAKIAlhdG9taWNfc2V0KCZkYXRhLmdhdGUsIDApOwogCiAJLyogU3RhcnQgdGhlIGJhbGwgcm9sbGluZyBvbiBvdGhlciBDUFVzICovCi0JaWYgKHNtcF9jYWxsX2Z1bmN0aW9uKGlwaV9oYW5kbGVyLCAmZGF0YSwgMCkgIT0gMCkKLQkJcGFuaWMoIm10cnI6IHRpbWVkIG91dCB3YWl0aW5nIGZvciBvdGhlciBDUFVzXG4iKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlzdHJ1Y3QgY3B1X3N0b3Bfd29yayAqd29yayA9ICZwZXJfY3B1KG10cnJfd29yaywgY3B1KTsKKworCQlpZiAoY3B1ID09IHNtcF9wcm9jZXNzb3JfaWQoKSkKKwkJCWNvbnRpbnVlOworCisJCXN0b3Bfb25lX2NwdV9ub3dhaXQoY3B1LCBtdHJyX3dvcmtfaGFuZGxlciwgJmRhdGEsIHdvcmspOworCX0KKworCisJd2hpbGUgKGF0b21pY19yZWFkKCZkYXRhLmNvdW50KSkKKwkJY3B1X3JlbGF4KCk7CisKKwkvKiBPaywgcmVzZXQgY291bnQgYW5kIHRvZ2dsZSBnYXRlICovCisJYXRvbWljX3NldCgmZGF0YS5jb3VudCwgbnVtX2Jvb3RpbmdfY3B1cygpIC0gMSk7CisJc21wX3dtYigpOworCWF0b21pY19zZXQoJmRhdGEuZ2F0ZSwgMSk7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKQEAgLTI1Nyw3ICsyODYsNyBAQAogCS8qIE9rLCByZXNldCBjb3VudCBhbmQgdG9nZ2xlIGdhdGUgKi8KIAlhdG9taWNfc2V0KCZkYXRhLmNvdW50LCBudW1fYm9vdGluZ19jcHVzKCkgLSAxKTsKIAlzbXBfd21iKCk7Ci0JYXRvbWljX3NldCgmZGF0YS5nYXRlLCAxKTsKKwlhdG9taWNfc2V0KCZkYXRhLmdhdGUsIDApOwogCiAJLyogRG8gb3VyIE1UUlIgYnVzaW5lc3MgKi8KIApAQCAtMjc5LDcgKzMwOCw3IEBACiAKIAlhdG9taWNfc2V0KCZkYXRhLmNvdW50LCBudW1fYm9vdGluZ19jcHVzKCkgLSAxKTsKIAlzbXBfd21iKCk7Ci0JYXRvbWljX3NldCgmZGF0YS5nYXRlLCAwKTsKKwlhdG9taWNfc2V0KCZkYXRhLmdhdGUsIDEpOwogCiAJLyoKIAkgKiBXYWl0IGhlcmUgZm9yIGV2ZXJ5b25lIHRvIGhhdmUgc2VlbiB0aGUgZ2F0ZSBjaGFuZ2UKQEAgLTI4OSw2ICszMTgsNyBAQAogCQljcHVfcmVsYXgoKTsKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlwcmVlbXB0X2VuYWJsZSgpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKaW5kZXggNWRiNWI3ZC4uZjJkYTIwZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKQEAgLTIyMCw2ICsyMjAsNyBAQAogCQkJCQkJIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CiAJc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgKmV2ZW50X2NvbnN0cmFpbnRzOwogCXZvaWQJCSgqcXVpcmtzKSh2b2lkKTsKKwlpbnQJCXBlcmZjdHJfc2Vjb25kX3dyaXRlOwogCiAJaW50CQkoKmNwdV9wcmVwYXJlKShpbnQgY3B1KTsKIAl2b2lkCQkoKmNwdV9zdGFydGluZykoaW50IGNwdSk7CkBAIC0yOTUsMTAgKzI5NiwxMCBAQAogCSAqIGNvdW50IHRvIHRoZSBnZW5lcmljIGV2ZW50IGF0b21pY2FsbHk6CiAJICovCiBhZ2FpbjoKLQlwcmV2X3Jhd19jb3VudCA9IGF0b21pYzY0X3JlYWQoJmh3Yy0+cHJldl9jb3VudCk7CisJcHJldl9yYXdfY291bnQgPSBsb2NhbDY0X3JlYWQoJmh3Yy0+cHJldl9jb3VudCk7CiAJcmRtc3JsKGh3Yy0+ZXZlbnRfYmFzZSArIGlkeCwgbmV3X3Jhd19jb3VudCk7CiAKLQlpZiAoYXRvbWljNjRfY21weGNoZygmaHdjLT5wcmV2X2NvdW50LCBwcmV2X3Jhd19jb3VudCwKKwlpZiAobG9jYWw2NF9jbXB4Y2hnKCZod2MtPnByZXZfY291bnQsIHByZXZfcmF3X2NvdW50LAogCQkJCQluZXdfcmF3X2NvdW50KSAhPSBwcmV2X3Jhd19jb3VudCkKIAkJZ290byBhZ2FpbjsKIApAQCAtMzEzLDggKzMxNCw4IEBACiAJZGVsdGEgPSAobmV3X3Jhd19jb3VudCA8PCBzaGlmdCkgLSAocHJldl9yYXdfY291bnQgPDwgc2hpZnQpOwogCWRlbHRhID4+PSBzaGlmdDsKIAotCWF0b21pYzY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7Ci0JYXRvbWljNjRfc3ViKGRlbHRhLCAmaHdjLT5wZXJpb2RfbGVmdCk7CisJbG9jYWw2NF9hZGQoZGVsdGEsICZldmVudC0+Y291bnQpOworCWxvY2FsNjRfc3ViKGRlbHRhLCAmaHdjLT5wZXJpb2RfbGVmdCk7CiAKIAlyZXR1cm4gbmV3X3Jhd19jb3VudDsKIH0KQEAgLTQzOCw3ICs0MzksNyBAQAogCWlmICghaHdjLT5zYW1wbGVfcGVyaW9kKSB7CiAJCWh3Yy0+c2FtcGxlX3BlcmlvZCA9IHg4Nl9wbXUubWF4X3BlcmlvZDsKIAkJaHdjLT5sYXN0X3BlcmlvZCA9IGh3Yy0+c2FtcGxlX3BlcmlvZDsKLQkJYXRvbWljNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCBod2MtPnNhbXBsZV9wZXJpb2QpOworCQlsb2NhbDY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgaHdjLT5zYW1wbGVfcGVyaW9kKTsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBJZiB3ZSBoYXZlIGEgUE1VIGluaXRpYWxpemVkIGJ1dCBubyBBUElDCkBAIC04ODUsNyArODg2LDcgQEAKIHg4Nl9wZXJmX2V2ZW50X3NldF9wZXJpb2Qoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OwotCXM2NCBsZWZ0ID0gYXRvbWljNjRfcmVhZCgmaHdjLT5wZXJpb2RfbGVmdCk7CisJczY0IGxlZnQgPSBsb2NhbDY0X3JlYWQoJmh3Yy0+cGVyaW9kX2xlZnQpOwogCXM2NCBwZXJpb2QgPSBod2MtPnNhbXBsZV9wZXJpb2Q7CiAJaW50IHJldCA9IDAsIGlkeCA9IGh3Yy0+aWR4OwogCkBAIC04OTcsMTQgKzg5OCwxNCBAQAogCSAqLwogCWlmICh1bmxpa2VseShsZWZ0IDw9IC1wZXJpb2QpKSB7CiAJCWxlZnQgPSBwZXJpb2Q7Ci0JCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgbGVmdCk7CisJCWxvY2FsNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCBsZWZ0KTsKIAkJaHdjLT5sYXN0X3BlcmlvZCA9IHBlcmlvZDsKIAkJcmV0ID0gMTsKIAl9CiAKIAlpZiAodW5saWtlbHkobGVmdCA8PSAwKSkgewogCQlsZWZ0ICs9IHBlcmlvZDsKLQkJYXRvbWljNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCBsZWZ0KTsKKwkJbG9jYWw2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGxlZnQpOwogCQlod2MtPmxhc3RfcGVyaW9kID0gcGVyaW9kOwogCQlyZXQgPSAxOwogCX0KQEAgLTkyMywxMCArOTI0LDE5IEBACiAJICogVGhlIGh3IGV2ZW50IHN0YXJ0cyBjb3VudGluZyBmcm9tIHRoaXMgZXZlbnQgb2Zmc2V0LAogCSAqIG1hcmsgaXQgdG8gYmUgYWJsZSB0byBleHRyYSBmdXR1cmUgZGVsdGFzOgogCSAqLwotCWF0b21pYzY0X3NldCgmaHdjLT5wcmV2X2NvdW50LCAodTY0KS1sZWZ0KTsKKwlsb2NhbDY0X3NldCgmaHdjLT5wcmV2X2NvdW50LCAodTY0KS1sZWZ0KTsKIAotCXdybXNybChod2MtPmV2ZW50X2Jhc2UgKyBpZHgsCisJd3Jtc3JsKGh3Yy0+ZXZlbnRfYmFzZSArIGlkeCwgKHU2NCkoLWxlZnQpICYgeDg2X3BtdS5jbnR2YWxfbWFzayk7CisKKwkvKgorCSAqIER1ZSB0byBlcnJhdHVtIG9uIGNlcnRhbiBjcHUgd2UgbmVlZAorCSAqIGEgc2Vjb25kIHdyaXRlIHRvIGJlIHN1cmUgdGhlIHJlZ2lzdGVyCisJICogaXMgdXBkYXRlZCBwcm9wZXJseQorCSAqLworCWlmICh4ODZfcG11LnBlcmZjdHJfc2Vjb25kX3dyaXRlKSB7CisJCXdybXNybChod2MtPmV2ZW50X2Jhc2UgKyBpZHgsCiAJCQkodTY0KSgtbGVmdCkgJiB4ODZfcG11LmNudHZhbF9tYXNrKTsKKwl9CiAKIAlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7CiAKQEAgLTk2OSw3ICs5NzksNyBAQAogCSAqIHNraXAgdGhlIHNjaGVkdWxhYmlsaXR5IHRlc3QgaGVyZSwgaXQgd2lsbCBiZSBwZWZvcm1lZAogCSAqIGF0IGNvbW1pdCB0aW1lKC0+Y29tbWl0X3R4bikgYXMgYSB3aG9sZQogCSAqLwotCWlmIChjcHVjLT5ncm91cF9mbGFnICYgUEVSRl9FVkVOVF9UWE5fU1RBUlRFRCkKKwlpZiAoY3B1Yy0+Z3JvdXBfZmxhZyAmIFBFUkZfRVZFTlRfVFhOKQogCQlnb3RvIG91dDsKIAogCXJldCA9IHg4Nl9wbXUuc2NoZWR1bGVfZXZlbnRzKGNwdWMsIG4sIGFzc2lnbik7CkBAIC0xMDk2LDcgKzExMDYsNyBAQAogCSAqIFRoZSBldmVudHMgbmV2ZXIgZ290IHNjaGVkdWxlZCBhbmQgLT5jYW5jZWxfdHhuIHdpbGwgdHJ1bmNhdGUKIAkgKiB0aGUgZXZlbnRfbGlzdC4KIAkgKi8KLQlpZiAoY3B1Yy0+Z3JvdXBfZmxhZyAmIFBFUkZfRVZFTlRfVFhOX1NUQVJURUQpCisJaWYgKGNwdWMtPmdyb3VwX2ZsYWcgJiBQRVJGX0VWRU5UX1RYTikKIAkJcmV0dXJuOwogCiAJeDg2X3BtdV9zdG9wKGV2ZW50KTsKQEAgLTEzODgsNyArMTM5OCw3IEBACiB7CiAJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKIAotCWNwdWMtPmdyb3VwX2ZsYWcgfD0gUEVSRl9FVkVOVF9UWE5fU1RBUlRFRDsKKwljcHVjLT5ncm91cF9mbGFnIHw9IFBFUkZfRVZFTlRfVFhOOwogCWNwdWMtPm5fdHhuID0gMDsKIH0KIApAQCAtMTQwMSw3ICsxNDExLDcgQEAKIHsKIAlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCi0JY3B1Yy0+Z3JvdXBfZmxhZyAmPSB+UEVSRl9FVkVOVF9UWE5fU1RBUlRFRDsKKwljcHVjLT5ncm91cF9mbGFnICY9IH5QRVJGX0VWRU5UX1RYTjsKIAkvKgogCSAqIFRydW5jYXRlIHRoZSBjb2xsZWN0ZWQgZXZlbnRzLgogCSAqLwpAQCAtMTQzNSwxMSArMTQ0NSw3IEBACiAJICovCiAJbWVtY3B5KGNwdWMtPmFzc2lnbiwgYXNzaWduLCBuKnNpemVvZihpbnQpKTsKIAotCS8qCi0JICogQ2xlYXIgb3V0IHRoZSB0eG4gY291bnQgc28gdGhhdCAtPmNhbmNlbF90eG4oKSB3aGljaCBnZXRzCi0JICogcnVuIGFmdGVyIC0+Y29tbWl0X3R4bigpIGRvZXNuJ3QgdW5kbyB0aGluZ3MuCi0JICovCi0JY3B1Yy0+bl90eG4gPSAwOworCWNwdWMtPmdyb3VwX2ZsYWcgJj0gflBFUkZfRVZFTlRfVFhOOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjA3LDggKzE2MTMsNiBAQAogCS53YWxrX3N0YWNrCQk9IHByaW50X2NvbnRleHRfc3RhY2tfYnAsCiB9OwogCi0jaW5jbHVkZSAiLi4vZHVtcHN0YWNrLmgiCi0KIHN0YXRpYyB2b2lkCiBwZXJmX2NhbGxjaGFpbl9rZXJuZWwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqZW50cnkpCiB7CkBAIC0xNzMwLDIyICsxNzM0LDYgQEAKIAlyZXR1cm4gZW50cnk7CiB9CiAKLXZvaWQgcGVyZl9hcmNoX2ZldGNoX2NhbGxlcl9yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGlwLCBpbnQgc2tpcCkKLXsKLQlyZWdzLT5pcCA9IGlwOwotCS8qCi0JICogcGVyZl9hcmNoX2ZldGNoX2NhbGxlcl9yZWdzIGFkZHMgYW5vdGhlciBjYWxsLCB3ZSBuZWVkIHRvIGluY3JlbWVudAotCSAqIHRoZSBza2lwIGxldmVsCi0JICovCi0JcmVncy0+YnAgPSByZXdpbmRfZnJhbWVfcG9pbnRlcihza2lwICsgMSk7Ci0JcmVncy0+Y3MgPSBfX0tFUk5FTF9DUzsKLQkvKgotCSAqIFdlIGFidXNlIGJpdCAzIHRvIHBhc3MgZXhhY3QgaW5mb3JtYXRpb24sIHNlZSBwZXJmX21pc2NfZmxhZ3MKLQkgKiBhbmQgdGhlIGNvbW1lbnQgd2l0aCBQRVJGX0VGTEFHU19FWEFDVC4KLQkgKi8KLQlyZWdzLT5mbGFncyA9IDA7Ci19Ci0KIHVuc2lnbmVkIGxvbmcgcGVyZl9pbnN0cnVjdGlvbl9wb2ludGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGxvbmcgaXA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfcDQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9wNC5jCmluZGV4IGFlODVkNjkuLjEwNzcxMWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9wNC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9wNC5jCkBAIC0yMSwyMiArMjEsMzYgQEAKIAljaGFyIGNudHJbMl1bUDRfQ05UUl9MSU1JVF07CQkvKiBjb3VudGVyIGluZGV4IChvZmZzZXQpLCAtMSBvbiBhYnNjZW5jZSAqLwogfTsKIAotc3RydWN0IHA0X2NhY2hlX2V2ZW50X2JpbmQgeworc3RydWN0IHA0X3BlYnNfYmluZCB7CiAJdW5zaWduZWQgaW50IG1ldHJpY19wZWJzOwogCXVuc2lnbmVkIGludCBtZXRyaWNfdmVydDsKIH07CiAKLSNkZWZpbmUgUDRfR0VOX0NBQ0hFX0VWRU5UX0JJTkQobmFtZSkJCVwKLQlbUDRfQ0FDSEVfXyMjbmFtZV0gPSB7CQkJXAotCQkubWV0cmljX3BlYnMgPSBQNF9QRUJTX18jI25hbWUsCVwKLQkJLm1ldHJpY192ZXJ0ID0gUDRfVkVSVF9fIyNuYW1lLAlcCisvKiBpdCBzZXRzIFA0X1BFQlNfRU5BQkxFX1VPUF9UQUcgYXMgd2VsbCAqLworI2RlZmluZSBQNF9HRU5fUEVCU19CSU5EKG5hbWUsIHBlYnMsIHZlcnQpCQkJXAorCVtQNF9QRUJTX01FVFJJQ19fIyNuYW1lXSA9IHsJCQkJXAorCQkubWV0cmljX3BlYnMgPSBwZWJzIHwgUDRfUEVCU19FTkFCTEVfVU9QX1RBRywJXAorCQkubWV0cmljX3ZlcnQgPSB2ZXJ0LAkJCQlcCiAJfQogCi1zdGF0aWMgc3RydWN0IHA0X2NhY2hlX2V2ZW50X2JpbmQgcDRfY2FjaGVfZXZlbnRfYmluZF9tYXBbXSA9IHsKLQlQNF9HRU5fQ0FDSEVfRVZFTlRfQklORCgxc3RsX2NhY2hlX2xvYWRfbWlzc19yZXRpcmVkKSwKLQlQNF9HRU5fQ0FDSEVfRVZFTlRfQklORCgybmRsX2NhY2hlX2xvYWRfbWlzc19yZXRpcmVkKSwKLQlQNF9HRU5fQ0FDSEVfRVZFTlRfQklORChkdGxiX2xvYWRfbWlzc19yZXRpcmVkKSwKLQlQNF9HRU5fQ0FDSEVfRVZFTlRfQklORChkdGxiX3N0b3JlX21pc3NfcmV0aXJlZCksCisvKgorICogbm90ZSB3ZSBoYXZlIFA0X1BFQlNfRU5BQkxFX1VPUF9UQUcgYWx3YXlzIHNldCBoZXJlCisgKgorICogaXQncyBuZWVkZWQgZm9yIG1hcHBpbmcgUDRfUEVCU19DT05GSUdfTUVUUklDX01BU0sgYml0cyBvZgorICogZXZlbnQgY29uZmlndXJhdGlvbiB0byBmaW5kIG91dCB3aGljaCB2YWx1ZXMgYXJlIHRvIGJlCisgKiB3cml0dGVuIGludG8gTVNSX0lBMzJfUEVCU19FTkFCTEUgYW5kIE1TUl9QNF9QRUJTX01BVFJJWF9WRVJUCisgKiByZXNnaXN0ZXJzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcDRfcGVic19iaW5kIHA0X3BlYnNfYmluZF9tYXBbXSA9IHsKKwlQNF9HRU5fUEVCU19CSU5EKDFzdGxfY2FjaGVfbG9hZF9taXNzX3JldGlyZWQsCTB4MDAwMDAwMSwgMHgwMDAwMDAxKSwKKwlQNF9HRU5fUEVCU19CSU5EKDJuZGxfY2FjaGVfbG9hZF9taXNzX3JldGlyZWQsCTB4MDAwMDAwMiwgMHgwMDAwMDAxKSwKKwlQNF9HRU5fUEVCU19CSU5EKGR0bGJfbG9hZF9taXNzX3JldGlyZWQsCTB4MDAwMDAwNCwgMHgwMDAwMDAxKSwKKwlQNF9HRU5fUEVCU19CSU5EKGR0bGJfc3RvcmVfbWlzc19yZXRpcmVkLAkweDAwMDAwMDQsIDB4MDAwMDAwMiksCisJUDRfR0VOX1BFQlNfQklORChkdGxiX2FsbF9taXNzX3JldGlyZWQsCQkweDAwMDAwMDQsIDB4MDAwMDAwMyksCisJUDRfR0VOX1BFQlNfQklORCh0YWdnZWRfbWlzcHJlZF9icmFuY2gsCQkweDAwMTgwMDAsIDB4MDAwMDAxMCksCisJUDRfR0VOX1BFQlNfQklORChtb2JfbG9hZF9yZXBsYXlfcmV0aXJlZCwJMHgwMDAwMjAwLCAweDAwMDAwMDEpLAorCVA0X0dFTl9QRUJTX0JJTkQoc3BsaXRfbG9hZF9yZXRpcmVkLAkJMHgwMDAwNDAwLCAweDAwMDAwMDEpLAorCVA0X0dFTl9QRUJTX0JJTkQoc3BsaXRfc3RvcmVfcmV0aXJlZCwJCTB4MDAwMDQwMCwgMHgwMDAwMDAyKSwKIH07CiAKIC8qCkBAIC0yODEsMTAgKzI5NSwxMCBAQAogCX0sCiB9OwogCi0jZGVmaW5lIFA0X0dFTl9DQUNIRV9FVkVOVChldmVudCwgYml0LCBjYWNoZV9ldmVudCkJCQkgIFwKKyNkZWZpbmUgUDRfR0VOX0NBQ0hFX0VWRU5UKGV2ZW50LCBiaXQsIG1ldHJpYykJCQkJICBcCiAJcDRfY29uZmlnX3BhY2tfZXNjcihQNF9FU0NSX0VWRU5UKGV2ZW50KQkJCXwgXAogCQkJICAgIFA0X0VTQ1JfRU1BU0tfQklUKGV2ZW50LCBiaXQpKQkJfCBcCi0JcDRfY29uZmlnX3BhY2tfY2NjcihjYWNoZV9ldmVudAkJCQkJfCBcCisJcDRfY29uZmlnX3BhY2tfY2NjcihtZXRyaWMJCQkJCXwgXAogCQkJICAgIFA0X0NDQ1JfRVNFTChQNF9PUENPREVfRVNFTChQNF9PUENPREUoZXZlbnQpKSkpCiAKIHN0YXRpYyBfX2luaXRjb25zdCBjb25zdCB1NjQgcDRfaHdfY2FjaGVfZXZlbnRfaWRzCkBAIC0yOTYsMzQgKzMxMCwzNCBAQAogCVsgQyhPUF9SRUFEKSBdID0gewogCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MCwKIAkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSBQNF9HRU5fQ0FDSEVfRVZFTlQoUDRfRVZFTlRfUkVQTEFZX0VWRU5ULCBOQk9HVVMsCi0JCQkJCQlQNF9DQUNIRV9fMXN0bF9jYWNoZV9sb2FkX21pc3NfcmV0aXJlZCksCisJCQkJCQlQNF9QRUJTX01FVFJJQ19fMXN0bF9jYWNoZV9sb2FkX21pc3NfcmV0aXJlZCksCiAJfSwKICB9LAogIFsgQyhMTCAgKSBdID0gewogCVsgQyhPUF9SRUFEKSBdID0gewogCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MCwKIAkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSBQNF9HRU5fQ0FDSEVfRVZFTlQoUDRfRVZFTlRfUkVQTEFZX0VWRU5ULCBOQk9HVVMsCi0JCQkJCQlQNF9DQUNIRV9fMm5kbF9jYWNoZV9sb2FkX21pc3NfcmV0aXJlZCksCisJCQkJCQlQNF9QRUJTX01FVFJJQ19fMm5kbF9jYWNoZV9sb2FkX21pc3NfcmV0aXJlZCksCiAJfSwKIH0sCiAgWyBDKERUTEIpIF0gPSB7CiAJWyBDKE9QX1JFQUQpIF0gPSB7CiAJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwLAogCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IFA0X0dFTl9DQUNIRV9FVkVOVChQNF9FVkVOVF9SRVBMQVlfRVZFTlQsIE5CT0dVUywKLQkJCQkJCVA0X0NBQ0hFX19kdGxiX2xvYWRfbWlzc19yZXRpcmVkKSwKKwkJCQkJCVA0X1BFQlNfTUVUUklDX19kdGxiX2xvYWRfbWlzc19yZXRpcmVkKSwKIAl9LAogCVsgQyhPUF9XUklURSkgXSA9IHsKIAkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAsCiAJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gUDRfR0VOX0NBQ0hFX0VWRU5UKFA0X0VWRU5UX1JFUExBWV9FVkVOVCwgTkJPR1VTLAotCQkJCQkJUDRfQ0FDSEVfX2R0bGJfc3RvcmVfbWlzc19yZXRpcmVkKSwKKwkJCQkJCVA0X1BFQlNfTUVUUklDX19kdGxiX3N0b3JlX21pc3NfcmV0aXJlZCksCiAJfSwKICB9LAogIFsgQyhJVExCKSBdID0gewogCVsgQyhPUF9SRUFEKSBdID0gewogCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IFA0X0dFTl9DQUNIRV9FVkVOVChQNF9FVkVOVF9JVExCX1JFRkVSRU5DRSwgSElULAotCQkJCQkJUDRfQ0FDSEVfX2l0bGJfcmVmZXJlbmNlX2hpdCksCisJCQkJCQlQNF9QRUJTX01FVFJJQ19fbm9uZSksCiAJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gUDRfR0VOX0NBQ0hFX0VWRU5UKFA0X0VWRU5UX0lUTEJfUkVGRVJFTkNFLCBNSVNTLAotCQkJCQkJUDRfQ0FDSEVfX2l0bGJfcmVmZXJlbmNlX21pc3MpLAorCQkJCQkJUDRfUEVCU19NRVRSSUNfX25vbmUpLAogCX0sCiAJWyBDKE9QX1dSSVRFKSBdID0gewogCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLApAQCAtNDE0LDExICs0MjgsMzcgQEAKIAlyZXR1cm4gY29uZmlnOwogfQogCitzdGF0aWMgaW50IHA0X3ZhbGlkYXRlX3Jhd19ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJdW5zaWduZWQgaW50IHY7CisKKwkvKiB1c2VyIGRhdGEgbWF5IGhhdmUgb3V0LW9mLWJvdW5kIGV2ZW50IGluZGV4ICovCisJdiA9IHA0X2NvbmZpZ191bnBhY2tfZXZlbnQoZXZlbnQtPmF0dHIuY29uZmlnKTsKKwlpZiAodiA+PSBBUlJBWV9TSVpFKHA0X2V2ZW50X2JpbmRfbWFwKSkgeworCQlwcl93YXJuaW5nKCJQNCBQTVU6IFVua25vd24gZXZlbnQgY29kZTogJWRcbiIsIHYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIGl0IG1heSBoYXZlIHNvbWUgc2NyZXdlZCBQRUJTIGJpdHMKKwkgKi8KKwlpZiAocDRfY29uZmlnX3BlYnNfaGFzKGV2ZW50LT5hdHRyLmNvbmZpZywgUDRfUEVCU19DT05GSUdfRU5BQkxFKSkgeworCQlwcl93YXJuaW5nKCJQNCBQTVU6IFBFQlMgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXYgPSBwNF9jb25maWdfdW5wYWNrX21ldHJpYyhldmVudC0+YXR0ci5jb25maWcpOworCWlmICh2ID49IEFSUkFZX1NJWkUocDRfcGVic19iaW5kX21hcCkpIHsKKwkJcHJfd2FybmluZygiUDQgUE1VOiBVbmtub3duIG1ldHJpYyBjb2RlOiAlZFxuIiwgdik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHA0X2h3X2NvbmZpZyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CiAJaW50IGNwdSA9IGdldF9jcHUoKTsKIAlpbnQgcmMgPSAwOwotCXVuc2lnbmVkIGludCBldm50OwogCXUzMiBlc2NyLCBjY2NyOwogCiAJLyoKQEAgLTQzOCwxMiArNDc4LDkgQEAKIAogCWlmIChldmVudC0+YXR0ci50eXBlID09IFBFUkZfVFlQRV9SQVcpIHsKIAotCQkvKiB1c2VyIGRhdGEgbWF5IGhhdmUgb3V0LW9mLWJvdW5kIGV2ZW50IGluZGV4ICovCi0JCWV2bnQgPSBwNF9jb25maWdfdW5wYWNrX2V2ZW50KGV2ZW50LT5hdHRyLmNvbmZpZyk7Ci0JCWlmIChldm50ID49IEFSUkFZX1NJWkUocDRfZXZlbnRfYmluZF9tYXApKSB7Ci0JCQlyYyA9IC1FSU5WQUw7CisJCXJjID0gcDRfdmFsaWRhdGVfcmF3X2V2ZW50KGV2ZW50KTsKKwkJaWYgKHJjKQogCQkJZ290byBvdXQ7Ci0JCX0KIAogCQkvKgogCQkgKiBXZSBkb24ndCBjb250cm9sIHJhdyBldmVudHMgc28gaXQncyB1cCB0byB0aGUgY2FsbGVyCkBAIC00NTEsMTIgKzQ4OCwxNSBAQAogCQkgKiBvbiBIVCBtYWNoaW5lIGJ1dCBhbGxvdyBIVC1jb21wYXRpYmxlIHNwZWNpZmljcyB0byBiZQogCQkgKiBwYXNzZWQgb24pCiAJCSAqCisJCSAqIE5vdGUgdGhhdCBmb3IgUkFXIGV2ZW50cyB3ZSBhbGxvdyB1c2VyIHRvIHVzZSBQNF9DQ0NSX1JFU0VSVkVECisJCSAqIGJpdHMgc2luY2Ugd2Uga2VlcCBhZGRpdGlvbmFsIGluZm8gaGVyZSAoZm9yIGNhY2hlIGV2ZW50cyBhbmQgZXRjKQorCQkgKgogCQkgKiBYWFg6IEhUIHdpZGUgdGhpbmdzIHNob3VsZCBjaGVjayBwZXJmX3BhcmFub2lkX2NwdSgpICYmCiAJCSAqICAgICAgQ0FQX1NZU19BRE1JTgogCQkgKi8KIAkJZXZlbnQtPmh3LmNvbmZpZyB8PSBldmVudC0+YXR0ci5jb25maWcgJgogCQkJKHA0X2NvbmZpZ19wYWNrX2VzY3IoUDRfRVNDUl9NQVNLX0hUKSB8Ci0JCQkgcDRfY29uZmlnX3BhY2tfY2NjcihQNF9DQ0NSX01BU0tfSFQpKTsKKwkJCSBwNF9jb25maWdfcGFja19jY2NyKFA0X0NDQ1JfTUFTS19IVCB8IFA0X0NDQ1JfUkVTRVJWRUQpKTsKIAl9CiAKIAlyYyA9IHg4Nl9zZXR1cF9wZXJmY3RyKGV2ZW50KTsKQEAgLTQ4Miw2ICs1MjIsMjkgQEAKIAlyZXR1cm4gb3ZlcmZsb3c7CiB9CiAKK3N0YXRpYyB2b2lkIHA0X3BtdV9kaXNhYmxlX3BlYnModm9pZCkKK3sKKwkvKgorCSAqIEZJWE1FCisJICoKKwkgKiBJdCdzIHN0aWxsIGFsbG93ZWQgdGhhdCB0d28gdGhyZWFkcyBzZXR1cCBzYW1lIGNhY2hlCisJICogZXZlbnRzIHNvIHdlIGNhbid0IHNpbXBseSBjbGVhciBtZXRyaWNzIHVudGlsIHdlIGtuZXcKKwkgKiBub29uZSBpcyBkZXBlbmRpbmcgb24gdXMsIHNvIHdlIG5lZWQga2luZCBvZiBjb3VudGVyCisJICogZm9yICJSZXBsYXlFdmVudCIgdXNlcnMuCisJICoKKwkgKiBXaGF0IGlzIG1vcmUgY29tcGxleCAtLSBSQVcgZXZlbnRzLCBpZiB1c2VyIChmb3Igc29tZQorCSAqIHJlYXNvbikgd2lsbCBwYXNzIHNvbWUgY2FjaGUgZXZlbnQgbWV0cmljIHdpdGggaW1wcm9wZXIKKwkgKiBldmVudCBvcGNvZGUgLS0gaXQncyBmaW5lIGZyb20gaGFyZHdhcmUgcG9pbnQgb2YgdmlldworCSAqIGJ1dCBjb21wbGV0ZWx5IG5vbnNlbmNlIGZyb20gIm1lYW5pbmciIG9mIHN1Y2ggYWN0aW9uLgorCSAqCisJICogU28gYXQgbW9tZW50IGxldCBsZWF2ZSBtZXRyaWNzIHR1cm5lZCBvbiBmb3JldmVyIC0tIGl0J3MKKwkgKiBvayBmb3Igbm93IGJ1dCBuZWVkIHRvIGJlIHJldmlzaXRlZCEKKwkgKgorCSAqICh2b2lkKWNoZWNraW5nX3dybXNybChNU1JfSUEzMl9QRUJTX0VOQUJMRSwgKHU2NCkwKTsKKwkgKiAodm9pZCljaGVja2luZ193cm1zcmwoTVNSX1A0X1BFQlNfTUFUUklYX1ZFUlQsICh1NjQpMCk7CisJICovCit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBwNF9wbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CkBAIC01MDcsNiArNTcwLDI2IEBACiAJCQljb250aW51ZTsKIAkJcDRfcG11X2Rpc2FibGVfZXZlbnQoZXZlbnQpOwogCX0KKworCXA0X3BtdV9kaXNhYmxlX3BlYnMoKTsKK30KKworLyogY29uZmlndXJhdGlvbiBtdXN0IGJlIHZhbGlkICovCitzdGF0aWMgdm9pZCBwNF9wbXVfZW5hYmxlX3BlYnModTY0IGNvbmZpZykKK3sKKwlzdHJ1Y3QgcDRfcGVic19iaW5kICpiaW5kOworCXVuc2lnbmVkIGludCBpZHg7CisKKwlCVUlMRF9CVUdfT04oUDRfUEVCU19NRVRSSUNfX21heCA+IFA0X1BFQlNfQ09ORklHX01FVFJJQ19NQVNLKTsKKworCWlkeCA9IHA0X2NvbmZpZ191bnBhY2tfbWV0cmljKGNvbmZpZyk7CisJaWYgKGlkeCA9PSBQNF9QRUJTX01FVFJJQ19fbm9uZSkKKwkJcmV0dXJuOworCisJYmluZCA9ICZwNF9wZWJzX2JpbmRfbWFwW2lkeF07CisKKwkodm9pZCljaGVja2luZ193cm1zcmwoTVNSX0lBMzJfUEVCU19FTkFCTEUsCSh1NjQpYmluZC0+bWV0cmljX3BlYnMpOworCSh2b2lkKWNoZWNraW5nX3dybXNybChNU1JfUDRfUEVCU19NQVRSSVhfVkVSVCwJKHU2NCliaW5kLT5tZXRyaWNfdmVydCk7CiB9CiAKIHN0YXRpYyB2b2lkIHA0X3BtdV9lbmFibGVfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQpAQCAtNTE1LDkgKzU5OCw3IEBACiAJaW50IHRocmVhZCA9IHA0X2h0X2NvbmZpZ190aHJlYWQoaHdjLT5jb25maWcpOwogCXU2NCBlc2NyX2NvbmYgPSBwNF9jb25maWdfdW5wYWNrX2VzY3IocDRfY2xlYXJfaHRfYml0KGh3Yy0+Y29uZmlnKSk7CiAJdW5zaWduZWQgaW50IGlkeCA9IHA0X2NvbmZpZ191bnBhY2tfZXZlbnQoaHdjLT5jb25maWcpOwotCXVuc2lnbmVkIGludCBpZHhfY2FjaGUgPSBwNF9jb25maWdfdW5wYWNrX2NhY2hlX2V2ZW50KGh3Yy0+Y29uZmlnKTsKIAlzdHJ1Y3QgcDRfZXZlbnRfYmluZCAqYmluZDsKLQlzdHJ1Y3QgcDRfY2FjaGVfZXZlbnRfYmluZCAqYmluZF9jYWNoZTsKIAl1NjQgZXNjcl9hZGRyLCBjY2NyOwogCiAJYmluZCA9ICZwNF9ldmVudF9iaW5kX21hcFtpZHhdOwpAQCAtNTM3LDE2ICs2MTgsMTAgQEAKIAljY2NyID0gcDRfY29uZmlnX3VucGFja19jY2NyKGh3Yy0+Y29uZmlnKTsKIAogCS8qCi0JICogaXQgY291bGQgYmUgQ2FjaGUgZXZlbnQgc28gdGhhdCB3ZSBuZWVkIHRvCi0JICogc2V0IG1ldHJpY3MgaW50byBhZGRpdGlvbmFsIE1TUnMKKwkgKiBpdCBjb3VsZCBiZSBDYWNoZSBldmVudCBzbyB3ZSBuZWVkIHRvIHdyaXRlIG1ldHJpY3MKKwkgKiBpbnRvIGFkZGl0aW9uYWwgTVNScwogCSAqLwotCUJVSUxEX0JVR19PTihQNF9DQUNIRV9fTUFYID4gUDRfQ0NDUl9DQUNIRV9PUFNfTUFTSyk7Ci0JaWYgKGlkeF9jYWNoZSA+IFA0X0NBQ0hFX19OT05FICYmCi0JCWlkeF9jYWNoZSA8IEFSUkFZX1NJWkUocDRfY2FjaGVfZXZlbnRfYmluZF9tYXApKSB7Ci0JCWJpbmRfY2FjaGUgPSAmcDRfY2FjaGVfZXZlbnRfYmluZF9tYXBbaWR4X2NhY2hlXTsKLQkJKHZvaWQpY2hlY2tpbmdfd3Jtc3JsKE1TUl9JQTMyX1BFQlNfRU5BQkxFLCAodTY0KWJpbmRfY2FjaGUtPm1ldHJpY19wZWJzKTsKLQkJKHZvaWQpY2hlY2tpbmdfd3Jtc3JsKE1TUl9QNF9QRUJTX01BVFJJWF9WRVJULCAodTY0KWJpbmRfY2FjaGUtPm1ldHJpY192ZXJ0KTsKLQl9CisJcDRfcG11X2VuYWJsZV9wZWJzKGh3Yy0+Y29uZmlnKTsKIAogCSh2b2lkKWNoZWNraW5nX3dybXNybChlc2NyX2FkZHIsIGVzY3JfY29uZik7CiAJKHZvaWQpY2hlY2tpbmdfd3Jtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UgKyBod2MtPmlkeCwKQEAgLTgyOSw2ICs5MDQsMTUgQEAKIAkubWF4X3BlcmlvZAkJPSAoMVVMTCA8PCAzOSkgLSAxLAogCS5od19jb25maWcJCT0gcDRfaHdfY29uZmlnLAogCS5zY2hlZHVsZV9ldmVudHMJPSBwNF9wbXVfc2NoZWR1bGVfZXZlbnRzLAorCS8qCisJICogVGhpcyBoYW5kbGVzIGVycmF0dW0gTjE1IGluIGludGVsIGRvYyAyNDkxOTktMDI5LAorCSAqIHRoZSBjb3VudGVyIG1heSBub3QgYmUgdXBkYXRlZCBjb3JyZWN0bHkgb24gd3JpdGUKKwkgKiBzbyB3ZSBuZWVkIGEgc2Vjb25kIHdyaXRlIG9wZXJhdGlvbiB0byBkbyB0aGUgdHJpY2sKKwkgKiAodGhlIG9mZmljaWFsIHdvcmthcm91bmQgZGlkbid0IHdvcmspCisJICoKKwkgKiB0aGUgZm9ybWVyIGlkZWEgaXMgdGFrZW4gZnJvbSBPUHJvZmlsZSBjb2RlCisJICovCisJLnBlcmZjdHJfc2Vjb25kX3dyaXRlCT0gMSwKIH07CiAKIHN0YXRpYyBfX2luaXQgaW50IHA0X3BtdV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGI0ZGFkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYwpAQCAtMCwwICsxLDYzIEBACisvKgorICoJUm91dGluZXMgdG8gaW5kZW50aWZ5IGFkZGl0aW9uYWwgY3B1IGZlYXR1cmVzIHRoYXQgYXJlIHNjYXR0ZXJlZCBpbgorICoJY3B1aWQgc3BhY2UuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKworI2luY2x1ZGUgPGFzbS9wYXQuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorCitzdHJ1Y3QgY3B1aWRfYml0IHsKKwl1MTYgZmVhdHVyZTsKKwl1OCByZWc7CisJdTggYml0OworCXUzMiBsZXZlbDsKKwl1MzIgc3ViX2xlYWY7Cit9OworCitlbnVtIGNwdWlkX3JlZ3MgeworCUNSX0VBWCA9IDAsCisJQ1JfRUNYLAorCUNSX0VEWCwKKwlDUl9FQlgKK307CisKK3ZvaWQgX19jcHVpbml0IGluaXRfc2NhdHRlcmVkX2NwdWlkX2ZlYXR1cmVzKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKK3sKKwl1MzIgbWF4X2xldmVsOworCXUzMiByZWdzWzRdOworCWNvbnN0IHN0cnVjdCBjcHVpZF9iaXQgKmNiOworCisJc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVpZF9iaXQgX19jcHVpbml0Y29uc3QgY3B1aWRfYml0c1tdID0geworCQl7IFg4Nl9GRUFUVVJFX0lEQSwJCUNSX0VBWCwgMSwgMHgwMDAwMDAwNiwgMCB9LAorCQl7IFg4Nl9GRUFUVVJFX0FSQVQsCQlDUl9FQVgsIDIsIDB4MDAwMDAwMDYsIDAgfSwKKwkJeyBYODZfRkVBVFVSRV9QTE4sCQlDUl9FQVgsIDQsIDB4MDAwMDAwMDYsIDAgfSwKKwkJeyBYODZfRkVBVFVSRV9QVFMsCQlDUl9FQVgsIDYsIDB4MDAwMDAwMDYsIDAgfSwKKwkJeyBYODZfRkVBVFVSRV9BUEVSRk1QRVJGLAlDUl9FQ1gsIDAsIDB4MDAwMDAwMDYsIDAgfSwKKwkJeyBYODZfRkVBVFVSRV9FUEIsCQlDUl9FQ1gsIDMsIDB4MDAwMDAwMDYsIDAgfSwKKwkJeyBYODZfRkVBVFVSRV9YU0FWRU9QVCwJCUNSX0VBWCwJMCwgMHgwMDAwMDAwZCwgMSB9LAorCQl7IFg4Nl9GRUFUVVJFX0NQQiwJCUNSX0VEWCwgOSwgMHg4MDAwMDAwNywgMCB9LAorCQl7IFg4Nl9GRUFUVVJFX05QVCwJCUNSX0VEWCwgMCwgMHg4MDAwMDAwYSwgMCB9LAorCQl7IFg4Nl9GRUFUVVJFX0xCUlYsCQlDUl9FRFgsIDEsIDB4ODAwMDAwMGEsIDAgfSwKKwkJeyBYODZfRkVBVFVSRV9TVk1MLAkJQ1JfRURYLCAyLCAweDgwMDAwMDBhLCAwIH0sCisJCXsgWDg2X0ZFQVRVUkVfTlJJUFMsCQlDUl9FRFgsIDMsIDB4ODAwMDAwMGEsIDAgfSwKKwkJeyAwLCAwLCAwLCAwLCAwIH0KKwl9OworCisJZm9yIChjYiA9IGNwdWlkX2JpdHM7IGNiLT5mZWF0dXJlOyBjYisrKSB7CisKKwkJLyogVmVyaWZ5IHRoYXQgdGhlIGxldmVsIGlzIHZhbGlkICovCisJCW1heF9sZXZlbCA9IGNwdWlkX2VheChjYi0+bGV2ZWwgJiAweGZmZmYwMDAwKTsKKwkJaWYgKG1heF9sZXZlbCA8IGNiLT5sZXZlbCB8fAorCQkgICAgbWF4X2xldmVsID4gKGNiLT5sZXZlbCB8IDB4ZmZmZikpCisJCQljb250aW51ZTsKKworCQljcHVpZF9jb3VudChjYi0+bGV2ZWwsIGNiLT5zdWJfbGVhZiwgJnJlZ3NbQ1JfRUFYXSwKKwkJCSAgICAmcmVnc1tDUl9FQlhdLCAmcmVnc1tDUl9FQ1hdLCAmcmVnc1tDUl9FRFhdKTsKKworCQlpZiAocmVnc1tjYi0+cmVnXSAmICgxIDw8IGNiLT5iaXQpKQorCQkJc2V0X2NwdV9jYXAoYywgY2ItPmZlYXR1cmUpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvdG9wb2xvZ3kuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvdG9wb2xvZ3kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mzk3ZTk4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS90b3BvbG9neS5jCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDaGVjayBmb3IgZXh0ZW5kZWQgdG9wb2xvZ3kgZW51bWVyYXRpb24gY3B1aWQgbGVhZiAweGIgYW5kIGlmIGl0CisgKiBleGlzdHMsIHVzZSBpdCBmb3IgcG9wdWxhdGluZyBpbml0aWFsX2FwaWNpZCBhbmQgY3B1IHRvcG9sb2d5CisgKiBkZXRlY3Rpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL3BhdC5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworLyogbGVhZiAweGIgU01UIGxldmVsICovCisjZGVmaW5lIFNNVF9MRVZFTAkwCisKKy8qIGxlYWYgMHhiIHN1Yi1sZWFmIHR5cGVzICovCisjZGVmaW5lIElOVkFMSURfVFlQRQkwCisjZGVmaW5lIFNNVF9UWVBFCTEKKyNkZWZpbmUgQ09SRV9UWVBFCTIKKworI2RlZmluZSBMRUFGQl9TVUJUWVBFKGVjeCkJCSgoKGVjeCkgPj4gOCkgJiAweGZmKQorI2RlZmluZSBCSVRTX1NISUZUX05FWFRfTEVWRUwoZWF4KQkoKGVheCkgJiAweDFmKQorI2RlZmluZSBMRVZFTF9NQVhfU0lCTElOR1MoZWJ4KQkJKChlYngpICYgMHhmZmZmKQorCisvKgorICogQ2hlY2sgZm9yIGV4dGVuZGVkIHRvcG9sb2d5IGVudW1lcmF0aW9uIGNwdWlkIGxlYWYgMHhiIGFuZCBpZiBpdAorICogZXhpc3RzLCB1c2UgaXQgZm9yIHBvcHVsYXRpbmcgaW5pdGlhbF9hcGljaWQgYW5kIGNwdSB0b3BvbG9neQorICogZGV0ZWN0aW9uLgorICovCit2b2lkIF9fY3B1aW5pdCBkZXRlY3RfZXh0ZW5kZWRfdG9wb2xvZ3koc3RydWN0IGNwdWluZm9feDg2ICpjKQoreworI2lmZGVmIENPTkZJR19TTVAKKwl1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4LCBzdWJfaW5kZXg7CisJdW5zaWduZWQgaW50IGh0X21hc2tfd2lkdGgsIGNvcmVfcGx1c19tYXNrX3dpZHRoOworCXVuc2lnbmVkIGludCBjb3JlX3NlbGVjdF9tYXNrLCBjb3JlX2xldmVsX3NpYmxpbmdzOworCXN0YXRpYyBib29sIHByaW50ZWQ7CisKKwlpZiAoYy0+Y3B1aWRfbGV2ZWwgPCAweGIpCisJCXJldHVybjsKKworCWNwdWlkX2NvdW50KDB4YiwgU01UX0xFVkVMLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKKworCS8qCisJICogY2hlY2sgaWYgdGhlIGNwdWlkIGxlYWYgMHhiIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLgorCSAqLworCWlmIChlYnggPT0gMCB8fCAoTEVBRkJfU1VCVFlQRShlY3gpICE9IFNNVF9UWVBFKSkKKwkJcmV0dXJuOworCisJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfWFRPUE9MT0dZKTsKKworCS8qCisJICogaW5pdGlhbCBhcGljIGlkLCB3aGljaCBhbHNvIHJlcHJlc2VudHMgMzItYml0IGV4dGVuZGVkIHgyYXBpYyBpZC4KKwkgKi8KKwljLT5pbml0aWFsX2FwaWNpZCA9IGVkeDsKKworCS8qCisJICogUG9wdWxhdGUgSFQgcmVsYXRlZCBpbmZvcm1hdGlvbiBmcm9tIHN1Yi1sZWFmIGxldmVsIDAuCisJICovCisJY29yZV9sZXZlbF9zaWJsaW5ncyA9IHNtcF9udW1fc2libGluZ3MgPSBMRVZFTF9NQVhfU0lCTElOR1MoZWJ4KTsKKwljb3JlX3BsdXNfbWFza193aWR0aCA9IGh0X21hc2tfd2lkdGggPSBCSVRTX1NISUZUX05FWFRfTEVWRUwoZWF4KTsKKworCXN1Yl9pbmRleCA9IDE7CisJZG8geworCQljcHVpZF9jb3VudCgweGIsIHN1Yl9pbmRleCwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CisKKwkJLyoKKwkJICogQ2hlY2sgZm9yIHRoZSBDb3JlIHR5cGUgaW4gdGhlIGltcGxlbWVudGVkIHN1YiBsZWF2ZXMuCisJCSAqLworCQlpZiAoTEVBRkJfU1VCVFlQRShlY3gpID09IENPUkVfVFlQRSkgeworCQkJY29yZV9sZXZlbF9zaWJsaW5ncyA9IExFVkVMX01BWF9TSUJMSU5HUyhlYngpOworCQkJY29yZV9wbHVzX21hc2tfd2lkdGggPSBCSVRTX1NISUZUX05FWFRfTEVWRUwoZWF4KTsKKwkJCWJyZWFrOworCQl9CisKKwkJc3ViX2luZGV4Kys7CisJfSB3aGlsZSAoTEVBRkJfU1VCVFlQRShlY3gpICE9IElOVkFMSURfVFlQRSk7CisKKwljb3JlX3NlbGVjdF9tYXNrID0gKH4oLTEgPDwgY29yZV9wbHVzX21hc2tfd2lkdGgpKSA+PiBodF9tYXNrX3dpZHRoOworCisJYy0+Y3B1X2NvcmVfaWQgPSBhcGljLT5waHlzX3BrZ19pZChjLT5pbml0aWFsX2FwaWNpZCwgaHRfbWFza193aWR0aCkKKwkJCQkJCSAmIGNvcmVfc2VsZWN0X21hc2s7CisJYy0+cGh5c19wcm9jX2lkID0gYXBpYy0+cGh5c19wa2dfaWQoYy0+aW5pdGlhbF9hcGljaWQsIGNvcmVfcGx1c19tYXNrX3dpZHRoKTsKKwkvKgorCSAqIFJlaW5pdCB0aGUgYXBpY2lkLCBub3cgdGhhdCB3ZSBoYXZlIGV4dGVuZGVkIGluaXRpYWxfYXBpY2lkLgorCSAqLworCWMtPmFwaWNpZCA9IGFwaWMtPnBoeXNfcGtnX2lkKGMtPmluaXRpYWxfYXBpY2lkLCAwKTsKKworCWMtPng4Nl9tYXhfY29yZXMgPSAoY29yZV9sZXZlbF9zaWJsaW5ncyAvIHNtcF9udW1fc2libGluZ3MpOworCisJaWYgKCFwcmludGVkKSB7CisJCXByaW50ayhLRVJOX0lORk8gICJDUFU6IFBoeXNpY2FsIFByb2Nlc3NvciBJRDogJWRcbiIsCisJCSAgICAgICBjLT5waHlzX3Byb2NfaWQpOworCQlpZiAoYy0+eDg2X21heF9jb3JlcyA+IDEpCisJCQlwcmludGsoS0VSTl9JTkZPICAiQ1BVOiBQcm9jZXNzb3IgQ29yZSBJRDogJWRcbiIsCisJCQkgICAgICAgYy0+Y3B1X2NvcmVfaWQpOworCQlwcmludGVkID0gMTsKKwl9CisJcmV0dXJuOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Ztd2FyZS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuYwppbmRleCBiOWQxZmY1Li4yMjdiMDQ0OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Ztd2FyZS5jCkBAIC01MSw3ICs1MSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHZtd2FyZV9nZXRfdHNjX2toeih2b2lkKQogewotCXVpbnQ2NF90IHRzY19oejsKKwl1aW50NjRfdCB0c2NfaHosIGxwajsKIAl1aW50MzJfdCBlYXgsIGVieCwgZWN4LCBlZHg7CiAKIAlWTVdBUkVfUE9SVChHRVRIWiwgZWF4LCBlYngsIGVjeCwgZWR4KTsKQEAgLTYyLDYgKzYyLDEzIEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiVFNDIGZyZXEgcmVhZCBmcm9tIGh5cGVydmlzb3IgOiAlbHUuJTAzbHUgTUh6XG4iLAogCQkJICh1bnNpZ25lZCBsb25nKSB0c2NfaHogLyAxMDAwLAogCQkJICh1bnNpZ25lZCBsb25nKSB0c2NfaHogJSAxMDAwKTsKKworCWlmICghcHJlc2V0X2xwaikgeworCQlscGogPSAoKHU2NCl0c2NfaHogKiAxMDAwKTsKKwkJZG9fZGl2KGxwaiwgSFopOworCQlwcmVzZXRfbHBqID0gbHBqOworCX0KKwogCXJldHVybiB0c2NfaHo7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYwppbmRleCBjODlhMzg2Li42ZTg3NTJjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jCkBAIC0xOCw3ICsxOCw2IEBACiAKICNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgogCi0jaW5jbHVkZSAiZHVtcHN0YWNrLmgiCiAKIGludCBwYW5pY19vbl91bnJlY292ZXJlZF9ubWk7CiBpbnQgcGFuaWNfb25faW9fbm1pOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5oIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWE5M2JlLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcwotICogIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBBbmRpIEtsZWVuLCBTdVNFIExhYnMKLSAqLwotCi0jaWZuZGVmIERVTVBTVEFDS19ICi0jZGVmaW5lIERVTVBTVEFDS19ICi0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jZGVmaW5lIFNUQUNLU0xPVFNfUEVSX0xJTkUgOAotI2RlZmluZSBnZXRfYnAoYnApIGFzbSgibW92bCAlJWVicCwgJTAiIDogIj1yIiAoYnApIDopCi0jZWxzZQotI2RlZmluZSBTVEFDS1NMT1RTX1BFUl9MSU5FIDQKLSNkZWZpbmUgZ2V0X2JwKGJwKSBhc20oIm1vdnEgJSVyYnAsICUwIiA6ICI9ciIgKGJwKSA6KQotI2VuZGlmCi0KLSNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0KLWV4dGVybiB2b2lkCi1zaG93X3RyYWNlX2xvZ19sdmwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsIGNoYXIgKmxvZ19sdmwpOwotCi1leHRlcm4gdm9pZAotc2hvd19zdGFja19sb2dfbHZsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCXVuc2lnbmVkIGxvbmcgKnNwLCB1bnNpZ25lZCBsb25nIGJwLCBjaGFyICpsb2dfbHZsKTsKLQotZXh0ZXJuIHVuc2lnbmVkIGludCBjb2RlX2J5dGVzOwotCi0vKiBUaGUgZm9ybSBvZiB0aGUgdG9wIG9mIHRoZSBmcmFtZSBvbiB0aGUgc3RhY2sgKi8KLXN0cnVjdCBzdGFja19mcmFtZSB7Ci0Jc3RydWN0IHN0YWNrX2ZyYW1lICpuZXh0X2ZyYW1lOwotCXVuc2lnbmVkIGxvbmcgcmV0dXJuX2FkZHJlc3M7Ci19OwotCi1zdHJ1Y3Qgc3RhY2tfZnJhbWVfaWEzMiB7Ci0gICAgdTMyIG5leHRfZnJhbWU7Ci0gICAgdTMyIHJldHVybl9hZGRyZXNzOwotfTsKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJld2luZF9mcmFtZV9wb2ludGVyKGludCBuKQotewotCXN0cnVjdCBzdGFja19mcmFtZSAqZnJhbWU7Ci0KLQlnZXRfYnAoZnJhbWUpOwotCi0jaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKLQl3aGlsZSAobi0tKSB7Ci0JCWlmIChwcm9iZV9rZXJuZWxfYWRkcmVzcygmZnJhbWUtPm5leHRfZnJhbWUsIGZyYW1lKSkKLQkJCWJyZWFrOwotCX0KLSNlbmRpZgotCi0JcmV0dXJuICh1bnNpZ25lZCBsb25nKWZyYW1lOwotfQotCi0jZW5kaWYgLyogRFVNUFNUQUNLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfMzIuYwppbmRleCAxMTU0MGExLi4wZjYzNzZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja18zMi5jCkBAIC0xNiw4ICsxNiw2IEBACiAKICNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgogCi0jaW5jbHVkZSAiZHVtcHN0YWNrLmgiCi0KIAogdm9pZCBkdW1wX3RyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJCXVuc2lnbmVkIGxvbmcgKnN0YWNrLCB1bnNpZ25lZCBsb25nIGJwLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jCmluZGV4IDI3MmM5ZjEuLjU3YTIxZjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMKQEAgLTE2LDcgKzE2LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+CiAKLSNpbmNsdWRlICJkdW1wc3RhY2suaCIKIAogI2RlZmluZSBOX0VYQ0VQVElPTl9TVEFDS1NfRU5EIFwKIAkJKE5fRVhDRVBUSU9OX1NUQUNLUyArIERFQlVHX1NUS1NaL0VYQ0VQVElPTl9TVEtTWiAtIDIpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZWFybHktcXVpcmtzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZWFybHktcXVpcmtzLmMKaW5kZXggZWJkYjg1Yy4uZTVjYzdlOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2Vhcmx5LXF1aXJrcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lYXJseS1xdWlya3MuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAjaW5jbHVkZSA8YXNtL2dhcnQuaD4KKyNpbmNsdWRlIDxhc20vaHBldC5oPgogCiBzdGF0aWMgdm9pZCBfX2luaXQgZml4X2h5cGVydHJhbnNwb3J0X2NvbmZpZyhpbnQgbnVtLCBpbnQgc2xvdCwgaW50IGZ1bmMpCiB7CkBAIC0xOTEsNiArMTkyLDIxIEBACiB9CiAjZW5kaWYKIAorLyoKKyAqIEZvcmNlIHRoZSByZWFkIGJhY2sgb2YgdGhlIENNUCByZWdpc3RlciBpbiBocGV0X25leHRfZXZlbnQoKQorICogdG8gd29yayBhcm91bmQgdGhlIHByb2JsZW0gdGhhdCB0aGUgQ01QIHJlZ2lzdGVyIHdyaXRlIHNlZW1zIHRvIGJlCisgKiBkZWxheWVkLiBTZWUgaHBldF9uZXh0X2V2ZW50KCkgZm9yIGRldGFpbHMuCisgKgorICogV2UgZG8gdGhpcyBvbiBhbGwgU01CVVMgaW5jYXJuYXRpb25zIGZvciBub3cgdW50aWwgd2UgaGF2ZSBtb3JlCisgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWZmZWN0ZWQgY2hpcHNldHMuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBhdGlfaHBldF9idWdzKGludCBudW0sIGludCBzbG90LCBpbnQgZnVuYykKK3sKKyNpZmRlZiBDT05GSUdfSFBFVF9USU1FUgorCWhwZXRfcmVhZGJhY2tfY21wID0gMTsKKyNlbmRpZgorfQorCiAjZGVmaW5lIFFGTEFHX0FQUExZX09OQ0UgCTB4MQogI2RlZmluZSBRRkxBR19BUFBMSUVECQkweDIKICNkZWZpbmUgUUZMQUdfRE9ORQkJKFFGTEFHX0FQUExZX09OQ0V8UUZMQUdfQVBQTElFRCkKQEAgLTIyMCw2ICsyMzYsOCBAQAogCSAgUENJX0NMQVNTX1NFUklBTF9TTUJVUywgUENJX0FOWV9JRCwgMCwgYXRpX2J1Z3MgfSwKIAl7IFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9TQlgwMF9TTUJVUywKIAkgIFBDSV9DTEFTU19TRVJJQUxfU01CVVMsIFBDSV9BTllfSUQsIDAsIGF0aV9idWdzX2NvbnRkIH0sCisJeyBQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0FOWV9JRCwKKwkgIFBDSV9DTEFTU19TRVJJQUxfU01CVVMsIFBDSV9BTllfSUQsIDAsIGF0aV9ocGV0X2J1Z3MgfSwKIAl7fQogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2VudHJ5XzMyLlMgYi9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfMzIuUwppbmRleCBjZDQ5MTQxLi4yNThlOTNmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfMzIuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfMzIuUwpAQCAtNjExLDE0ICs2MTEsMTQgQEAKICAqIGNvbXBlbnNhdGluZyBmb3IgdGhlIG9mZnNldCBieSBjaGFuZ2luZyB0byB0aGUgRVNQRklYIHNlZ21lbnQgd2l0aAogICogYSBiYXNlIGFkZHJlc3MgdGhhdCBtYXRjaGVzIGZvciB0aGUgZGlmZmVyZW5jZS4KICAqLworI2RlZmluZSBHRFRfRVNQRklYX1NTIFBFUl9DUFVfVkFSKGdkdF9wYWdlKSArIChHRFRfRU5UUllfRVNQRklYX1NTICogOCkKIAltb3YgJWVzcCwgJWVkeAkJCS8qIGxvYWQga2VybmVsIGVzcCAqLwogCW1vdiBQVF9PTERFU1AoJWVzcCksICVlYXgJLyogbG9hZCB1c2Vyc3BhY2UgZXNwICovCiAJbW92ICVkeCwgJWF4CQkJLyogZWF4OiBuZXcga2VybmVsIGVzcCAqLwogCXN1YiAlZWF4LCAlZWR4CQkJLyogb2Zmc2V0IChsb3cgd29yZCBpcyAwKSAqLwotCVBFUl9DUFUoZ2R0X3BhZ2UsICVlYngpCiAJc2hyICQxNiwgJWVkeAotCW1vdiAlZGwsIEdEVF9FTlRSWV9FU1BGSVhfU1MgKiA4ICsgNCglZWJ4KSAvKiBiaXRzIDE2Li4yMyAqLwotCW1vdiAlZGgsIEdEVF9FTlRSWV9FU1BGSVhfU1MgKiA4ICsgNyglZWJ4KSAvKiBiaXRzIDI0Li4zMSAqLworCW1vdiAlZGwsIEdEVF9FU1BGSVhfU1MgKyA0IC8qIGJpdHMgMTYuLjIzICovCisJbW92ICVkaCwgR0RUX0VTUEZJWF9TUyArIDcgLyogYml0cyAyNC4uMzEgKi8KIAlwdXNobCAkX19FU1BGSVhfU1MKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAogCXB1c2ggJWVheAkJCS8qIG5ldyBrZXJuZWwgZXNwICovCkBAIC03OTEsOSArNzkxLDggQEAKICAqIG5vcm1hbCBzdGFjayBhbmQgYWRqdXN0cyBFU1Agd2l0aCB0aGUgbWF0Y2hpbmcgb2Zmc2V0LgogICovCiAJLyogZml4dXAgdGhlIHN0YWNrICovCi0JUEVSX0NQVShnZHRfcGFnZSwgJWVieCkKLQltb3YgR0RUX0VOVFJZX0VTUEZJWF9TUyAqIDggKyA0KCVlYngpLCAlYWwgLyogYml0cyAxNi4uMjMgKi8KLQltb3YgR0RUX0VOVFJZX0VTUEZJWF9TUyAqIDggKyA3KCVlYngpLCAlYWggLyogYml0cyAyNC4uMzEgKi8KKwltb3YgR0RUX0VTUEZJWF9TUyArIDQsICVhbCAvKiBiaXRzIDE2Li4yMyAqLworCW1vdiBHRFRfRVNQRklYX1NTICsgNywgJWFoIC8qIGJpdHMgMjQuLjMxICovCiAJc2hsICQxNiwgJWVheAogCWFkZGwgJWVzcCwgJWVheAkJCS8qIHRoZSBhZGp1c3RlZCBzdGFjayBwb2ludGVyICovCiAJcHVzaGwgJF9fS0VSTkVMX0RTCkBAIC0xMTY2LDYgKzExNjUsOSBAQAogLnByZXZpb3VzCiBFTkRQUk9DKHhlbl9mYWlsc2FmZV9jYWxsYmFjaykKIAorQlVJTERfSU5URVJSVVBUMyh4ZW5faHZtX2NhbGxiYWNrX3ZlY3RvciwgWEVOX0hWTV9FVlRDSE5fQ0FMTEJBQ0ssCisJCXhlbl9ldnRjaG5fZG9fdXBjYWxsKQorCiAjZW5kaWYJLyogQ09ORklHX1hFTiAqLwogCiAjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMgYi9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfNjQuUwppbmRleCAwNjk3ZmYxLi5jNWVhNWNkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfNjQuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfNjQuUwpAQCAtNTcxLDggKzU3MSw4IEBACiAJICogbWFza2VkIG9mZi4KIAkgKi8KIHN5c3JldF9hdWRpdDoKLQltb3ZxICVyYXgsJXJzaQkJLyogc2Vjb25kIGFyZywgc3lzY2FsbCByZXR1cm4gdmFsdWUgKi8KLQljbXBxICQwLCVyYXgJCS8qIGlzIGl0IDwgMD8gKi8KKwltb3ZxIFJBWC1BUkdPRkZTRVQoJXJzcCksJXJzaQkvKiBzZWNvbmQgYXJnLCBzeXNjYWxsIHJldHVybiB2YWx1ZSAqLworCWNtcHEgJDAsJXJzaQkJLyogaXMgaXQgPCAwPyAqLwogCXNldGwgJWFsCQkvKiAxIGlmIHNvLCAwIGlmIG5vdCAqLwogCW1vdnpibCAlYWwsJWVkaQkJLyogemVyby1leHRlbmQgdGhhdCBpbnRvICVlZGkgKi8KIAlpbmMgJWVkaSAvKiBmaXJzdCBhcmcsIDAtPjEoQVVESVRTQ19TVUNDRVNTKSwgMS0+MihBVURJVFNDX0ZBSUxVUkUpICovCkBAIC0xMDY1LDYgKzEwNjUsNyBAQAogRU5EKFxzeW0pCiAuZW5kbQogCisjZGVmaW5lIElOSVRfVFNTX0lTVCh4KSBQRVJfQ1BVX1ZBUihpbml0X3RzcykgKyAoVFNTX2lzdCArICgoeCkgLSAxKSAqIDgpCiAubWFjcm8gcGFyYW5vaWR6ZXJvZW50cnlfaXN0IHN5bSBkb19zeW0gaXN0CiBFTlRSWShcc3ltKQogCUlOVFJfRlJBTUUKQEAgLTEwNzYsMTAgKzEwNzcsOSBAQAogCVRSQUNFX0lSUVNfT0ZGCiAJbW92cSAlcnNwLCVyZGkJCS8qIHB0X3JlZ3MgcG9pbnRlciAqLwogCXhvcmwgJWVzaSwlZXNpCQkvKiBubyBlcnJvciBjb2RlICovCi0JUEVSX0NQVShpbml0X3RzcywgJXIxMikKLQlzdWJxICRFWENFUFRJT05fU1RLU1osIFRTU19pc3QgKyAoXGlzdCAtIDEpICogOCglcjEyKQorCXN1YnEgJEVYQ0VQVElPTl9TVEtTWiwgSU5JVF9UU1NfSVNUKFxpc3QpCiAJY2FsbCBcZG9fc3ltCi0JYWRkcSAkRVhDRVBUSU9OX1NUS1NaLCBUU1NfaXN0ICsgKFxpc3QgLSAxKSAqIDgoJXIxMikKKwlhZGRxICRFWENFUFRJT05fU1RLU1osIElOSVRfVFNTX0lTVChcaXN0KQogCWptcCBwYXJhbm9pZF9leGl0CS8qICVlYng6IG5vIHN3YXBncyBmbGFnICovCiAJQ0ZJX0VORFBST0MKIEVORChcc3ltKQpAQCAtMTMyOSw2ICsxMzI5LDkgQEAKIAlDRklfRU5EUFJPQwogRU5EKHhlbl9mYWlsc2FmZV9jYWxsYmFjaykKIAorYXBpY2ludGVycnVwdCBYRU5fSFZNX0VWVENITl9DQUxMQkFDSyBcCisJeGVuX2h2bV9jYWxsYmFja192ZWN0b3IgeGVuX2V2dGNobl9kb191cGNhbGwKKwogI2VuZGlmIC8qIENPTkZJR19YRU4gKi8KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9oZWFkMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkMzIuYwppbmRleCBiMmUyNDYwLi43ODQzNjBjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZDMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2hlYWQzMi5jCkBAIC0yMCw3ICsyMCw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpMzg2X2RlZmF1bHRfZWFybHlfc2V0dXAodm9pZCkKIHsKLQkvKiBJbml0aWxpemUgMzJiaXQgc3BlY2lmaWMgc2V0dXAgZnVuY3Rpb25zICovCisJLyogSW5pdGlhbGl6ZSAzMmJpdCBzcGVjaWZpYyBzZXR1cCBmdW5jdGlvbnMgKi8KIAl4ODZfaW5pdC5yZXNvdXJjZXMucHJvYmVfcm9tcyA9IHByb2JlX3JvbXM7CiAJeDg2X2luaXQucmVzb3VyY2VzLnJlc2VydmVfcmVzb3VyY2VzID0gaTM4Nl9yZXNlcnZlX3Jlc291cmNlczsKIAl4ODZfaW5pdC5tcHBhcnNlLnNldHVwX2lvYXBpY19pZHMgPSBzZXR1cF9pb2FwaWNfaWRzX2Zyb21fbXBjOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hlYWRfNjQuUyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMKaW5kZXggM2QxZTZmMS4uMjM5MDQ2YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hlYWRfNjQuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TCkBAIC0yMzQsOSArMjM0LDggQEAKIAkgKiBpbml0IGRhdGEgc2VjdGlvbiB0aWxsIHBlciBjcHUgYXJlYXMgYXJlIHNldCB1cC4KIAkgKi8KIAltb3ZsCSRNU1JfR1NfQkFTRSwlZWN4Ci0JbW92cQlpbml0aWFsX2dzKCVyaXApLCVyYXgKLQltb3ZxICAgICVyYXgsJXJkeAotCXNocnEJJDMyLCVyZHgKKwltb3ZsCWluaXRpYWxfZ3MoJXJpcCksJWVheAorCW1vdmwJaW5pdGlhbF9ncys0KCVyaXApLCVlZHgKIAl3cm1zcgkKIAogCS8qIGVzaSBpcyBwb2ludGVyIHRvIHJlYWwgbW9kZSBzdHJ1Y3R1cmUgd2l0aCBpbnRlcmVzdGluZyBpbmZvLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hwZXQuYyBiL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMKaW5kZXggYTE5OGI3Yy4uMzNkYmNjNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hwZXQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSA8YXNtL2hwZXQuaD4KIAogI2RlZmluZSBIUEVUX01BU0sJCQlDTE9DS1NPVVJDRV9NQVNLKDMyKQotI2RlZmluZSBIUEVUX1NISUZUCQkJMjIKIAogLyogRlNFQyA9IDEwXi0xNQogICAgTlNFQyA9IDEwXi05ICovCkBAIC03ODcsNyArNzg2LDYgQEAKIAkucmF0aW5nCQk9IDI1MCwKIAkucmVhZAkJPSByZWFkX2hwZXQsCiAJLm1hc2sJCT0gSFBFVF9NQVNLLAotCS5zaGlmdAkJPSBIUEVUX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIAkucmVzdW1lCQk9IGhwZXRfcmVzdW1lX2NvdW50ZXIsCiAjaWZkZWYgQ09ORklHX1g4Nl82NApAQCAtNzk4LDYgKzc5Niw3IEBACiBzdGF0aWMgaW50IGhwZXRfY2xvY2tzb3VyY2VfcmVnaXN0ZXIodm9pZCkKIHsKIAl1NjQgc3RhcnQsIG5vdzsKKwl1NjQgaHBldF9mcmVxOwogCWN5Y2xlX3QgdDE7CiAKIAkvKiBTdGFydCB0aGUgY291bnRlciAqLwpAQCAtODMyLDkgKzgzMSwxNSBAQAogCSAqICBtdWx0ID0gKGhwZXRfcGVyaW9kICogMl5zaGlmdCkvMTBeNgogCSAqICBtdWx0ID0gKGhwZXRfcGVyaW9kIDw8IHNoaWZ0KS9GU0VDX1BFUl9OU0VDCiAJICovCi0JY2xvY2tzb3VyY2VfaHBldC5tdWx0ID0gZGl2X3NjKGhwZXRfcGVyaW9kLCBGU0VDX1BFUl9OU0VDLCBIUEVUX1NISUZUKTsKIAotCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9ocGV0KTsKKwkvKiBOZWVkIHRvIGNvbnZlcnQgaHBldF9wZXJpb2QgKGZzZWMvY3ljKSB0byBjeWMvc2VjOgorCSAqCisJICogY3ljL3NlYyA9IEZTRUNfUEVSX1NFQy9ocGV0X3BlcmlvZChmc2VjL2N5YykKKwkgKiBjeWMvc2VjID0gKEZTRUNfUEVSX05TRUMgKiBOU0VDX1BFUl9TRUMpL2hwZXRfcGVyaW9kCisJICovCisJaHBldF9mcmVxID0gRlNFQ19QRVJfTlNFQyAqIE5TRUNfUEVSX1NFQzsKKwlkb19kaXYoaHBldF9mcmVxLCBocGV0X3BlcmlvZCk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNsb2Nrc291cmNlX2hwZXQsICh1MzIpaHBldF9mcmVxKTsKIAogCXJldHVybiAwOwogfQpAQCAtOTY0LDcgKzk2OSw3IEBACiAKIHZvaWQgaHBldF9kaXNhYmxlKHZvaWQpCiB7Ci0JaWYgKGlzX2hwZXRfY2FwYWJsZSgpKSB7CisJaWYgKGlzX2hwZXRfY2FwYWJsZSgpICYmIGhwZXRfdmlydF9hZGRyZXNzKSB7CiAJCXVuc2lnbmVkIGludCBjZmcgPSBocGV0X3JlYWRsKEhQRVRfQ0ZHKTsKIAogCQlpZiAoaHBldF9sZWdhY3lfaW50X2VuYWJsZWQpIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9od19icmVha3BvaW50LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCmluZGV4IGE4ZjFiODAuLmE0NzRlYzMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9od19icmVha3BvaW50LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2h3X2JyZWFrcG9pbnQuYwpAQCAtMjA4LDYgKzIwOCw5IEBACiB7CiAJLyogTGVuICovCiAJc3dpdGNoICh4ODZfbGVuKSB7CisJY2FzZSBYODZfQlJFQUtQT0lOVF9MRU5fWDoKKwkJKmdlbl9sZW4gPSBzaXplb2YobG9uZyk7CisJCWJyZWFrOwogCWNhc2UgWDg2X0JSRUFLUE9JTlRfTEVOXzE6CiAJCSpnZW5fbGVuID0gSFdfQlJFQUtQT0lOVF9MRU5fMTsKIAkJYnJlYWs7CkBAIC0yNTEsNiArMjU0LDI5IEBACiAKIAlpbmZvLT5hZGRyZXNzID0gYnAtPmF0dHIuYnBfYWRkcjsKIAorCS8qIFR5cGUgKi8KKwlzd2l0Y2ggKGJwLT5hdHRyLmJwX3R5cGUpIHsKKwljYXNlIEhXX0JSRUFLUE9JTlRfVzoKKwkJaW5mby0+dHlwZSA9IFg4Nl9CUkVBS1BPSU5UX1dSSVRFOworCQlicmVhazsKKwljYXNlIEhXX0JSRUFLUE9JTlRfVyB8IEhXX0JSRUFLUE9JTlRfUjoKKwkJaW5mby0+dHlwZSA9IFg4Nl9CUkVBS1BPSU5UX1JXOworCQlicmVhazsKKwljYXNlIEhXX0JSRUFLUE9JTlRfWDoKKwkJaW5mby0+dHlwZSA9IFg4Nl9CUkVBS1BPSU5UX0VYRUNVVEU7CisJCS8qCisJCSAqIHg4NiBpbnN0IGJyZWFrcG9pbnRzIG5lZWQgdG8gaGF2ZSBhIHNwZWNpZmljIHVuZGVmaW5lZCBsZW4uCisJCSAqIEJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGNoZWNrIHVzZXJzcGFjZSBpcyBub3QgdHJ5aW5nIHRvIHNldHVwCisJCSAqIGFuIHVuc3VwcG9ydGVkIGxlbmd0aCwgdG8gZ2V0IGEgcmFuZ2UgYnJlYWtwb2ludCBmb3IgZXhhbXBsZS4KKwkJICovCisJCWlmIChicC0+YXR0ci5icF9sZW4gPT0gc2l6ZW9mKGxvbmcpKSB7CisJCQlpbmZvLT5sZW4gPSBYODZfQlJFQUtQT0lOVF9MRU5fWDsKKwkJCXJldHVybiAwOworCQl9CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJLyogTGVuICovCiAJc3dpdGNoIChicC0+YXR0ci5icF9sZW4pIHsKIAljYXNlIEhXX0JSRUFLUE9JTlRfTEVOXzE6CkBAIC0yNzEsMjEgKzI5Nyw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIFR5cGUgKi8KLQlzd2l0Y2ggKGJwLT5hdHRyLmJwX3R5cGUpIHsKLQljYXNlIEhXX0JSRUFLUE9JTlRfVzoKLQkJaW5mby0+dHlwZSA9IFg4Nl9CUkVBS1BPSU5UX1dSSVRFOwotCQlicmVhazsKLQljYXNlIEhXX0JSRUFLUE9JTlRfVyB8IEhXX0JSRUFLUE9JTlRfUjoKLQkJaW5mby0+dHlwZSA9IFg4Nl9CUkVBS1BPSU5UX1JXOwotCQlicmVhazsKLQljYXNlIEhXX0JSRUFLUE9JTlRfWDoKLQkJaW5mby0+dHlwZSA9IFg4Nl9CUkVBS1BPSU5UX0VYRUNVVEU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCXJldHVybiAwOwogfQogLyoKQEAgLTMwNSw2ICszMTYsOSBAQAogCXJldCA9IC1FSU5WQUw7CiAKIAlzd2l0Y2ggKGluZm8tPmxlbikgeworCWNhc2UgWDg2X0JSRUFLUE9JTlRfTEVOX1g6CisJCWFsaWduID0gc2l6ZW9mKGxvbmcpIC0xOworCQlicmVhazsKIAljYXNlIFg4Nl9CUkVBS1BPSU5UX0xFTl8xOgogCQlhbGlnbiA9IDA7CiAJCWJyZWFrOwpAQCAtNDY2LDYgKzQ4MCwxMyBAQAogCiAJCXBlcmZfYnBfZXZlbnQoYnAsIGFyZ3MtPnJlZ3MpOwogCisJCS8qCisJCSAqIFNldCB1cCByZXN1bWUgZmxhZyB0byBhdm9pZCBicmVha3BvaW50IHJlY3Vyc2lvbiB3aGVuCisJCSAqIHJldHVybmluZyBiYWNrIHRvIG9yaWdpbi4KKwkJICovCisJCWlmIChicC0+aHcuaW5mby50eXBlID09IFg4Nl9CUkVBS1BPSU5UX0VYRUNVVEUpCisJCQlhcmdzLT5yZWdzLT5mbGFncyB8PSBYODZfRUZMQUdTX1JGOworCiAJCXJjdV9yZWFkX3VubG9jaygpOwogCX0KIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2kzODcuYyBiL2FyY2gveDg2L2tlcm5lbC9pMzg3LmMKaW5kZXggODZjZWY2Yi4uYzQ0NDRiYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2kzODcuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaTM4Ny5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIH0KICNlbmRpZgkvKiBDT05GSUdfWDg2XzY0ICovCiAKLXN0YXRpYyB2b2lkIGZwdV9maW5pdChzdHJ1Y3QgZnB1ICpmcHUpCit2b2lkIGZwdV9maW5pdChzdHJ1Y3QgZnB1ICpmcHUpCiB7CiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCWlmICghSEFWRV9IV0ZQKSB7CkBAIC0xMzIsNiArMTMyLDcgQEAKIAkJZnAtPmZvcyA9IDB4ZmZmZjAwMDB1OwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGZwdV9maW5pdCk7CiAKIC8qCiAgKiBUaGUgX2N1cnJlbnRfIHRhc2sgaXMgdXNpbmcgdGhlIEZQVSBmb3IgdGhlIGZpcnN0IHRpbWUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pODI1OS5jIGIvYXJjaC94ODYva2VybmVsL2k4MjU5LmMKaW5kZXggN2M5ZjAyYy4uY2FmYTdjOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2k4MjU5LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2k4MjU5LmMKQEAgLTI3NiwxNiArMjc2LDYgQEAKIAkuY2xzCT0gJmk4MjU5X3N5c2Rldl9jbGFzcywKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGk4MjU5QV9pbml0X3N5c2ZzKHZvaWQpCi17Ci0JaW50IGVycm9yID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZpODI1OV9zeXNkZXZfY2xhc3MpOwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gc3lzZGV2X3JlZ2lzdGVyKCZkZXZpY2VfaTgyNTlBKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLWRldmljZV9pbml0Y2FsbChpODI1OUFfaW5pdF9zeXNmcyk7Ci0KIHN0YXRpYyB2b2lkIG1hc2tfODI1OUEodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNDA3LDMgKzM5NywxOCBAQAogfTsKIAogc3RydWN0IGxlZ2FjeV9waWMgKmxlZ2FjeV9waWMgPSAmZGVmYXVsdF9sZWdhY3lfcGljOworCitzdGF0aWMgaW50IF9faW5pdCBpODI1OUFfaW5pdF9zeXNmcyh2b2lkKQoreworCWludCBlcnJvcjsKKworCWlmIChsZWdhY3lfcGljICE9ICZkZWZhdWx0X2xlZ2FjeV9waWMpCisJCXJldHVybiAwOworCisJZXJyb3IgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJmk4MjU5X3N5c2Rldl9jbGFzcyk7CisJaWYgKCFlcnJvcikKKwkJZXJyb3IgPSBzeXNkZXZfcmVnaXN0ZXIoJmRldmljZV9pODI1OUEpOworCXJldHVybiBlcnJvcjsKK30KKworZGV2aWNlX2luaXRjYWxsKGk4MjU5QV9pbml0X3N5c2ZzKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rZ2RiLmMgYi9hcmNoL3g4Ni9rZXJuZWwva2dkYi5jCmluZGV4IDRmNGFmNzUuLmVmMTA5NDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rZ2RiLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2tnZGIuYwpAQCAtNDksNTUgKzQ5LDk0IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAKLS8qKgotICoJcHRfcmVnc190b19nZGJfcmVncyAtIENvbnZlcnQgcHRyYWNlIHJlZ3MgdG8gR0RCIHJlZ3MKLSAqCUBnZGJfcmVnczogQSBwb2ludGVyIHRvIGhvbGQgdGhlIHJlZ2lzdGVycyBpbiB0aGUgb3JkZXIgR0RCIHdhbnRzLgotICoJQHJlZ3M6IFRoZSAmc3RydWN0IHB0X3JlZ3Mgb2YgdGhlIGN1cnJlbnQgcHJvY2Vzcy4KLSAqCi0gKglDb252ZXJ0IHRoZSBwdF9yZWdzIGluIEByZWdzIGludG8gdGhlIGZvcm1hdCBmb3IgcmVnaXN0ZXJzIHRoYXQKLSAqCUdEQiBleHBlY3RzLCBzdG9yZWQgaW4gQGdkYl9yZWdzLgotICovCi12b2lkIHB0X3JlZ3NfdG9fZ2RiX3JlZ3ModW5zaWduZWQgbG9uZyAqZ2RiX3JlZ3MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RydWN0IGRiZ19yZWdfZGVmX3QgZGJnX3JlZ19kZWZbREJHX01BWF9SRUdfTlVNXSA9CiB7Ci0jaWZuZGVmIENPTkZJR19YODZfMzIKLQl1MzIgKmdkYl9yZWdzMzIgPSAodTMyICopZ2RiX3JlZ3M7Ci0jZW5kaWYKLQlnZGJfcmVnc1tHREJfQVhdCT0gcmVncy0+YXg7Ci0JZ2RiX3JlZ3NbR0RCX0JYXQk9IHJlZ3MtPmJ4OwotCWdkYl9yZWdzW0dEQl9DWF0JPSByZWdzLT5jeDsKLQlnZGJfcmVnc1tHREJfRFhdCT0gcmVncy0+ZHg7Ci0JZ2RiX3JlZ3NbR0RCX1NJXQk9IHJlZ3MtPnNpOwotCWdkYl9yZWdzW0dEQl9ESV0JPSByZWdzLT5kaTsKLQlnZGJfcmVnc1tHREJfQlBdCT0gcmVncy0+YnA7Ci0JZ2RiX3JlZ3NbR0RCX1BDXQk9IHJlZ3MtPmlwOwogI2lmZGVmIENPTkZJR19YODZfMzIKLQlnZGJfcmVnc1tHREJfUFNdCT0gcmVncy0+ZmxhZ3M7Ci0JZ2RiX3JlZ3NbR0RCX0RTXQk9IHJlZ3MtPmRzOwotCWdkYl9yZWdzW0dEQl9FU10JPSByZWdzLT5lczsKLQlnZGJfcmVnc1tHREJfQ1NdCT0gcmVncy0+Y3M7Ci0JZ2RiX3JlZ3NbR0RCX0ZTXQk9IDB4RkZGRjsKLQlnZGJfcmVnc1tHREJfR1NdCT0gMHhGRkZGOwotCWlmICh1c2VyX21vZGVfdm0ocmVncykpIHsKLQkJZ2RiX3JlZ3NbR0RCX1NTXSA9IHJlZ3MtPnNzOwotCQlnZGJfcmVnc1tHREJfU1BdID0gcmVncy0+c3A7Ci0JfSBlbHNlIHsKLQkJZ2RiX3JlZ3NbR0RCX1NTXSA9IF9fS0VSTkVMX0RTOwotCQlnZGJfcmVnc1tHREJfU1BdID0ga2VybmVsX3N0YWNrX3BvaW50ZXIocmVncyk7Ci0JfQorCXsgImF4IiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGF4KSB9LAorCXsgImN4IiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGN4KSB9LAorCXsgImR4IiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGR4KSB9LAorCXsgImJ4IiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGJ4KSB9LAorCXsgInNwIiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHNwKSB9LAorCXsgImJwIiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGJwKSB9LAorCXsgInNpIiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHNpKSB9LAorCXsgImRpIiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGRpKSB9LAorCXsgImlwIiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGlwKSB9LAorCXsgImZsYWdzIiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGZsYWdzKSB9LAorCXsgImNzIiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGNzKSB9LAorCXsgInNzIiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHNzKSB9LAorCXsgImRzIiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGRzKSB9LAorCXsgImVzIiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGVzKSB9LAorCXsgImZzIiwgNCwgLTEgfSwKKwl7ICJncyIsIDQsIC0xIH0sCiAjZWxzZQotCWdkYl9yZWdzW0dEQl9SOF0JPSByZWdzLT5yODsKLQlnZGJfcmVnc1tHREJfUjldCT0gcmVncy0+cjk7Ci0JZ2RiX3JlZ3NbR0RCX1IxMF0JPSByZWdzLT5yMTA7Ci0JZ2RiX3JlZ3NbR0RCX1IxMV0JPSByZWdzLT5yMTE7Ci0JZ2RiX3JlZ3NbR0RCX1IxMl0JPSByZWdzLT5yMTI7Ci0JZ2RiX3JlZ3NbR0RCX1IxM10JPSByZWdzLT5yMTM7Ci0JZ2RiX3JlZ3NbR0RCX1IxNF0JPSByZWdzLT5yMTQ7Ci0JZ2RiX3JlZ3NbR0RCX1IxNV0JPSByZWdzLT5yMTU7Ci0JZ2RiX3JlZ3MzMltHREJfUFNdCT0gcmVncy0+ZmxhZ3M7Ci0JZ2RiX3JlZ3MzMltHREJfQ1NdCT0gcmVncy0+Y3M7Ci0JZ2RiX3JlZ3MzMltHREJfU1NdCT0gcmVncy0+c3M7Ci0JZ2RiX3JlZ3NbR0RCX1NQXQk9IGtlcm5lbF9zdGFja19wb2ludGVyKHJlZ3MpOworCXsgImF4IiwgOCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGF4KSB9LAorCXsgImJ4IiwgOCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGJ4KSB9LAorCXsgImN4IiwgOCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGN4KSB9LAorCXsgImR4IiwgOCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGR4KSB9LAorCXsgInNpIiwgOCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGR4KSB9LAorCXsgImRpIiwgOCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGRpKSB9LAorCXsgImJwIiwgOCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGJwKSB9LAorCXsgInNwIiwgOCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHNwKSB9LAorCXsgInI4IiwgOCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHI4KSB9LAorCXsgInI5IiwgOCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHI5KSB9LAorCXsgInIxMCIsIDgsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByMTApIH0sCisJeyAicjExIiwgOCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHIxMSkgfSwKKwl7ICJyMTIiLCA4LCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcjEyKSB9LAorCXsgInIxMyIsIDgsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByMTMpIH0sCisJeyAicjE0IiwgOCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHIxNCkgfSwKKwl7ICJyMTUiLCA4LCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcjE1KSB9LAorCXsgImlwIiwgOCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGlwKSB9LAorCXsgImZsYWdzIiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGZsYWdzKSB9LAorCXsgImNzIiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGNzKSB9LAorCXsgInNzIiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHNzKSB9LAogI2VuZGlmCit9OworCitpbnQgZGJnX3NldF9yZWcoaW50IHJlZ25vLCB2b2lkICptZW0sIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWlmICgKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJICAgIHJlZ25vID09IEdEQl9TUyB8fCByZWdubyA9PSBHREJfRlMgfHwgcmVnbm8gPT0gR0RCX0dTIHx8CisjZW5kaWYKKwkgICAgcmVnbm8gPT0gR0RCX1NQIHx8IHJlZ25vID09IEdEQl9PUklHX0FYKQorCQlyZXR1cm4gMDsKKworCWlmIChkYmdfcmVnX2RlZltyZWdub10ub2Zmc2V0ICE9IC0xKQorCQltZW1jcHkoKHZvaWQgKilyZWdzICsgZGJnX3JlZ19kZWZbcmVnbm9dLm9mZnNldCwgbWVtLAorCQkgICAgICAgZGJnX3JlZ19kZWZbcmVnbm9dLnNpemUpOworCXJldHVybiAwOworfQorCitjaGFyICpkYmdfZ2V0X3JlZyhpbnQgcmVnbm8sIHZvaWQgKm1lbSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaWYgKHJlZ25vID09IEdEQl9PUklHX0FYKSB7CisJCW1lbWNweShtZW0sICZyZWdzLT5vcmlnX2F4LCBzaXplb2YocmVncy0+b3JpZ19heCkpOworCQlyZXR1cm4gIm9yaWdfYXgiOworCX0KKwlpZiAocmVnbm8gPj0gREJHX01BWF9SRUdfTlVNIHx8IHJlZ25vIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoZGJnX3JlZ19kZWZbcmVnbm9dLm9mZnNldCAhPSAtMSkKKwkJbWVtY3B5KG1lbSwgKHZvaWQgKilyZWdzICsgZGJnX3JlZ19kZWZbcmVnbm9dLm9mZnNldCwKKwkJICAgICAgIGRiZ19yZWdfZGVmW3JlZ25vXS5zaXplKTsKKworCXN3aXRjaCAocmVnbm8pIHsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJY2FzZSBHREJfU1M6CisJCWlmICghdXNlcl9tb2RlX3ZtKHJlZ3MpKQorCQkJKih1bnNpZ25lZCBsb25nICopbWVtID0gX19LRVJORUxfRFM7CisJCWJyZWFrOworCWNhc2UgR0RCX1NQOgorCQlpZiAoIXVzZXJfbW9kZV92bShyZWdzKSkKKwkJCSoodW5zaWduZWQgbG9uZyAqKW1lbSA9IGtlcm5lbF9zdGFja19wb2ludGVyKHJlZ3MpOworCQlicmVhazsKKwljYXNlIEdEQl9HUzoKKwljYXNlIEdEQl9GUzoKKwkJKih1bnNpZ25lZCBsb25nICopbWVtID0gMHhGRkZGOworCQlicmVhazsKKyNlbmRpZgorCX0KKwlyZXR1cm4gZGJnX3JlZ19kZWZbcmVnbm9dLm5hbWU7CiB9CiAKIC8qKgpAQCAtMTUwLDU0ICsxODksMTMgQEAKIAlnZGJfcmVnc1tHREJfU1BdCT0gcC0+dGhyZWFkLnNwOwogfQogCi0vKioKLSAqCWdkYl9yZWdzX3RvX3B0X3JlZ3MgLSBDb252ZXJ0IEdEQiByZWdzIHRvIHB0cmFjZSByZWdzLgotICoJQGdkYl9yZWdzOiBBIHBvaW50ZXIgdG8gaG9sZCB0aGUgcmVnaXN0ZXJzIHdlJ3ZlIHJlY2VpdmVkIGZyb20gR0RCLgotICoJQHJlZ3M6IEEgcG9pbnRlciB0byBhICZzdHJ1Y3QgcHRfcmVncyB0byBob2xkIHRoZXNlIHZhbHVlcyBpbi4KLSAqCi0gKglDb252ZXJ0IHRoZSBHREIgcmVncyBpbiBAZ2RiX3JlZ3MgaW50byB0aGUgcHRfcmVncywgYW5kIHN0b3JlIHRoZW0KLSAqCWluIEByZWdzLgotICovCi12b2lkIGdkYl9yZWdzX3RvX3B0X3JlZ3ModW5zaWduZWQgbG9uZyAqZ2RiX3JlZ3MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotI2lmbmRlZiBDT05GSUdfWDg2XzMyCi0JdTMyICpnZGJfcmVnczMyID0gKHUzMiAqKWdkYl9yZWdzOwotI2VuZGlmCi0JcmVncy0+YXgJCT0gZ2RiX3JlZ3NbR0RCX0FYXTsKLQlyZWdzLT5ieAkJPSBnZGJfcmVnc1tHREJfQlhdOwotCXJlZ3MtPmN4CQk9IGdkYl9yZWdzW0dEQl9DWF07Ci0JcmVncy0+ZHgJCT0gZ2RiX3JlZ3NbR0RCX0RYXTsKLQlyZWdzLT5zaQkJPSBnZGJfcmVnc1tHREJfU0ldOwotCXJlZ3MtPmRpCQk9IGdkYl9yZWdzW0dEQl9ESV07Ci0JcmVncy0+YnAJCT0gZ2RiX3JlZ3NbR0RCX0JQXTsKLQlyZWdzLT5pcAkJPSBnZGJfcmVnc1tHREJfUENdOwotI2lmZGVmIENPTkZJR19YODZfMzIKLQlyZWdzLT5mbGFncwkJPSBnZGJfcmVnc1tHREJfUFNdOwotCXJlZ3MtPmRzCQk9IGdkYl9yZWdzW0dEQl9EU107Ci0JcmVncy0+ZXMJCT0gZ2RiX3JlZ3NbR0RCX0VTXTsKLQlyZWdzLT5jcwkJPSBnZGJfcmVnc1tHREJfQ1NdOwotI2Vsc2UKLQlyZWdzLT5yOAkJPSBnZGJfcmVnc1tHREJfUjhdOwotCXJlZ3MtPnI5CQk9IGdkYl9yZWdzW0dEQl9SOV07Ci0JcmVncy0+cjEwCQk9IGdkYl9yZWdzW0dEQl9SMTBdOwotCXJlZ3MtPnIxMQkJPSBnZGJfcmVnc1tHREJfUjExXTsKLQlyZWdzLT5yMTIJCT0gZ2RiX3JlZ3NbR0RCX1IxMl07Ci0JcmVncy0+cjEzCQk9IGdkYl9yZWdzW0dEQl9SMTNdOwotCXJlZ3MtPnIxNAkJPSBnZGJfcmVnc1tHREJfUjE0XTsKLQlyZWdzLT5yMTUJCT0gZ2RiX3JlZ3NbR0RCX1IxNV07Ci0JcmVncy0+ZmxhZ3MJCT0gZ2RiX3JlZ3MzMltHREJfUFNdOwotCXJlZ3MtPmNzCQk9IGdkYl9yZWdzMzJbR0RCX0NTXTsKLQlyZWdzLT5zcwkJPSBnZGJfcmVnczMyW0dEQl9TU107Ci0jZW5kaWYKLX0KLQogc3RhdGljIHN0cnVjdCBod19icmVha3BvaW50IHsKIAl1bnNpZ25lZAkJZW5hYmxlZDsKIAl1bnNpZ25lZCBsb25nCQlhZGRyOwogCWludAkJCWxlbjsKIAlpbnQJCQl0eXBlOwogCXN0cnVjdCBwZXJmX2V2ZW50CSoqcGV2OwotfSBicmVha2luZm9bNF07Cit9IGJyZWFraW5mb1tIQlBfTlVNXTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZWFybHlfZHI3OwogCkBAIC0yMDUsNyArMjAzLDcgQEAKIHsKIAlpbnQgYnJlYWtubzsKIAotCWZvciAoYnJlYWtubyA9IDA7IGJyZWFrbm8gPCA0OyBicmVha25vKyspIHsKKwlmb3IgKGJyZWFrbm8gPSAwOyBicmVha25vIDwgSEJQX05VTTsgYnJlYWtubysrKSB7CiAJCXN0cnVjdCBwZXJmX2V2ZW50ICpicDsKIAkJc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCAqaW5mbzsKIAkJaW50IHZhbDsKQEAgLTI5MiwxMCArMjkwLDEwIEBACiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBIQlBfTlVNOyBpKyspCiAJCWlmIChicmVha2luZm9baV0uYWRkciA9PSBhZGRyICYmIGJyZWFraW5mb1tpXS5lbmFibGVkKQogCQkJYnJlYWs7Ci0JaWYgKGkgPT0gNCkKKwlpZiAoaSA9PSBIQlBfTlVNKQogCQlyZXR1cm4gLTE7CiAKIAlpZiAoaHdfYnJlYWtfcmVsZWFzZV9zbG90KGkpKSB7CkBAIC0zMTMsNyArMzExLDcgQEAKIAlpbnQgY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqYnA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEhCUF9OVU07IGkrKykgewogCQlpZiAoIWJyZWFraW5mb1tpXS5lbmFibGVkKQogCQkJY29udGludWU7CiAJCWJwID0gKnBlcl9jcHVfcHRyKGJyZWFraW5mb1tpXS5wZXYsIGNwdSk7CkBAIC0zMzMsMTAgKzMzMSwxMCBAQAogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgSEJQX05VTTsgaSsrKQogCQlpZiAoIWJyZWFraW5mb1tpXS5lbmFibGVkKQogCQkJYnJlYWs7Ci0JaWYgKGkgPT0gNCkKKwlpZiAoaSA9PSBIQlBfTlVNKQogCQlyZXR1cm4gLTE7CiAKIAlzd2l0Y2ggKGJwdHlwZSkgewpAQCAtMzk3LDcgKzM5NSw3IEBACiAKIAkvKiBEaXNhYmxlIGhhcmR3YXJlIGRlYnVnZ2luZyB3aGlsZSB3ZSBhcmUgaW4ga2dkYjogKi8KIAlzZXRfZGVidWdyZWcoMFVMLCA3KTsKLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEhCUF9OVU07IGkrKykgewogCQlpZiAoIWJyZWFraW5mb1tpXS5lbmFibGVkKQogCQkJY29udGludWU7CiAJCWlmIChkYmdfaXNfZWFybHkpIHsKQEAgLTQ1OCw3ICs0NTYsNiBAQAogewogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAljaGFyICpwdHI7Ci0JaW50IG5ld1BDOwogCiAJc3dpdGNoIChyZW1jb21JbkJ1ZmZlclswXSkgewogCWNhc2UgJ2MnOgpAQCAtNDY5LDggKzQ2Niw2IEBACiAJCQlsaW51eF9yZWdzLT5pcCA9IGFkZHI7CiAJY2FzZSAnRCc6CiAJY2FzZSAnayc6Ci0JCW5ld1BDID0gbGludXhfcmVncy0+aXA7Ci0KIAkJLyogY2xlYXIgdGhlIHRyYWNlIGJpdCAqLwogCQlsaW51eF9yZWdzLT5mbGFncyAmPSB+WDg2X0VGTEFHU19URjsKIAkJYXRvbWljX3NldCgma2dkYl9jcHVfZG9pbmdfc2luZ2xlX3N0ZXAsIC0xKTsKQEAgLTU3Miw3ICs1NjcsNiBAQAogCXJldHVybiBOT1RJRllfU1RPUDsKIH0KIAotI2lmZGVmIENPTkZJR19LR0RCX0xPV19MRVZFTF9UUkFQCiBpbnQga2dkYl9sbF90cmFwKGludCBjbWQsIGNvbnN0IGNoYXIgKnN0ciwKIAkJIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVyciwgaW50IHRyYXAsIGludCBzaWcpCiB7CkBAIC01OTAsNyArNTg0LDYgQEAKIAogCXJldHVybiBfX2tnZGJfbm90aWZ5KCZhcmdzLCBjbWQpOwogfQotI2VuZGlmIC8qIENPTkZJR19LR0RCX0xPV19MRVZFTF9UUkFQICovCiAKIHN0YXRpYyBpbnQKIGtnZGJfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKnB0cikKQEAgLTYyNSw2ICs2MTgsMTIgQEAKIAlyZXR1cm4gcmVnaXN0ZXJfZGllX25vdGlmaWVyKCZrZ2RiX25vdGlmaWVyKTsKIH0KIAorc3RhdGljIHZvaWQga2dkYl9od19vdmVyZmxvd19oYW5kbGVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IG5taSwKKwkJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWtnZGJfbGxfdHJhcChESUVfREVCVUcsICJkZWJ1ZyIsIHJlZ3MsIDAsIDAsIFNJR1RSQVApOworfQorCiB2b2lkIGtnZGJfYXJjaF9sYXRlKHZvaWQpCiB7CiAJaW50IGksIGNwdTsKQEAgLTY0MSw3ICs2NDAsNyBAQAogCWF0dHIuYnBfbGVuID0gSFdfQlJFQUtQT0lOVF9MRU5fMTsKIAlhdHRyLmJwX3R5cGUgPSBIV19CUkVBS1BPSU5UX1c7CiAJYXR0ci5kaXNhYmxlZCA9IDE7Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBIQlBfTlVNOyBpKyspIHsKIAkJaWYgKGJyZWFraW5mb1tpXS5wZXYpCiAJCQljb250aW51ZTsKIAkJYnJlYWtpbmZvW2ldLnBldiA9IHJlZ2lzdGVyX3dpZGVfaHdfYnJlYWtwb2ludCgmYXR0ciwgTlVMTCk7CkBAIC02NTUsNiArNjU0LDcgQEAKIAkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJCXBldmVudCA9IHBlcl9jcHVfcHRyKGJyZWFraW5mb1tpXS5wZXYsIGNwdSk7CiAJCQlwZXZlbnRbMF0tPmh3LnNhbXBsZV9wZXJpb2QgPSAxOworCQkJcGV2ZW50WzBdLT5vdmVyZmxvd19oYW5kbGVyID0ga2dkYl9od19vdmVyZmxvd19oYW5kbGVyOwogCQkJaWYgKHBldmVudFswXS0+ZGVzdHJveSAhPSBOVUxMKSB7CiAJCQkJcGV2ZW50WzBdLT5kZXN0cm95ID0gTlVMTDsKIAkJCQlyZWxlYXNlX2JwX3Nsb3QoKnBldmVudCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYwppbmRleCAzNDVhNGIxLi4xYmZiNmNmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMKQEAgLTEyNiwxNiArMTI2LDIyIEBACiB9CiAKIC8qCi0gKiBDaGVjayBmb3IgdGhlIFJFWCBwcmVmaXggd2hpY2ggY2FuIG9ubHkgZXhpc3Qgb24gWDg2XzY0Ci0gKiBYODZfMzIgYWx3YXlzIHJldHVybnMgMAorICogU2tpcCB0aGUgcHJlZml4ZXMgb2YgdGhlIGluc3RydWN0aW9uLgogICovCi1zdGF0aWMgaW50IF9fa3Byb2JlcyBpc19SRVhfcHJlZml4KGtwcm9iZV9vcGNvZGVfdCAqaW5zbikKK3N0YXRpYyBrcHJvYmVfb3Bjb2RlX3QgKl9fa3Byb2JlcyBza2lwX3ByZWZpeGVzKGtwcm9iZV9vcGNvZGVfdCAqaW5zbikKIHsKKwlpbnNuX2F0dHJfdCBhdHRyOworCisJYXR0ciA9IGluYXRfZ2V0X29wY29kZV9hdHRyaWJ1dGUoKGluc25fYnl0ZV90KSppbnNuKTsKKwl3aGlsZSAoaW5hdF9pc19sZWdhY3lfcHJlZml4KGF0dHIpKSB7CisJCWluc24rKzsKKwkJYXR0ciA9IGluYXRfZ2V0X29wY29kZV9hdHRyaWJ1dGUoKGluc25fYnl0ZV90KSppbnNuKTsKKwl9CiAjaWZkZWYgQ09ORklHX1g4Nl82NAotCWlmICgoKmluc24gJiAweGYwKSA9PSAweDQwKQotCQlyZXR1cm4gMTsKKwlpZiAoaW5hdF9pc19yZXhfcHJlZml4KGF0dHIpKQorCQlpbnNuKys7CiAjZW5kaWYKLQlyZXR1cm4gMDsKKwlyZXR1cm4gaW5zbjsKIH0KIAogLyoKQEAgLTI3Miw2ICsyNzgsOSBAQAogICovCiBzdGF0aWMgaW50IF9fa3Byb2JlcyBpc19JRl9tb2RpZmllcihrcHJvYmVfb3Bjb2RlX3QgKmluc24pCiB7CisJLyogU2tpcCBwcmVmaXhlcyAqLworCWluc24gPSBza2lwX3ByZWZpeGVzKGluc24pOworCiAJc3dpdGNoICgqaW5zbikgewogCWNhc2UgMHhmYToJCS8qIGNsaSAqLwogCWNhc2UgMHhmYjoJCS8qIHN0aSAqLwpAQCAtMjgwLDEzICsyODksNiBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQkvKgotCSAqIG9uIFg4Nl82NCwgMHg0MC0weDRmIGFyZSBSRVggcHJlZml4ZXMgc28gd2UgbmVlZCB0byBsb29rCi0JICogYXQgdGhlIG5leHQgYnl0ZSBpbnN0ZWFkLi4gYnV0IG9mIGNvdXJzZSBub3QgcmVjdXJzZSBpbmZpbml0ZWx5Ci0JICovCi0JaWYgKGlzX1JFWF9wcmVmaXgoaW5zbikpCi0JCXJldHVybiBpc19JRl9tb2RpZmllcigrK2luc24pOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY0MCw4ICs2NDIsOCBAQAogCS8qIFNraXAgY3MsIGlwLCBvcmlnX2F4IGFuZCBncy4gKi8JXAogCSIJc3VibCAkMTYsICVlc3BcbiIJXAogCSIJcHVzaGwgJWZzXG4iCQlcCi0JIglwdXNobCAlZHNcbiIJCVwKIAkiCXB1c2hsICVlc1xuIgkJXAorCSIJcHVzaGwgJWRzXG4iCQlcCiAJIglwdXNobCAlZWF4XG4iCQlcCiAJIglwdXNobCAlZWJwXG4iCQlcCiAJIglwdXNobCAlZWRpXG4iCQlcCkBAIC04MDMsOSArODA1LDggQEAKIAl1bnNpZ25lZCBsb25nIG9yaWdfaXAgPSAodW5zaWduZWQgbG9uZylwLT5hZGRyOwogCWtwcm9iZV9vcGNvZGVfdCAqaW5zbiA9IHAtPmFpbnNuLmluc247CiAKLQkvKnNraXAgdGhlIFJFWCBwcmVmaXgqLwotCWlmIChpc19SRVhfcHJlZml4KGluc24pKQotCQlpbnNuKys7CisJLyogU2tpcCBwcmVmaXhlcyAqLworCWluc24gPSBza2lwX3ByZWZpeGVzKGluc24pOwogCiAJcmVncy0+ZmxhZ3MgJj0gflg4Nl9FRkxBR1NfVEY7CiAJc3dpdGNoICgqaW5zbikgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21yc3QuYyBiL2FyY2gveDg2L2tlcm5lbC9tcnN0LmMKaW5kZXggZTc5NjQ0OC4uNzlhZTY4MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21yc3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbXJzdC5jCkBAIC0yNSw4ICsyNSwzNCBAQAogI2luY2x1ZGUgPGFzbS9pODI1OS5oPgogI2luY2x1ZGUgPGFzbS9hcGJfdGltZXIuaD4KIAorLyoKKyAqIHRoZSBjbG9ja2V2ZW50IGRldmljZXMgb24gTW9vcmVzdG93bi9NZWRmaWVsZCBjYW4gYmUgQVBCVCBvciBMQVBJQyBjbG9jaywKKyAqIGNtZGxpbmUgb3B0aW9uIHg4Nl9tcnN0X3RpbWVyIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBjb25maWd1cmF0aW9uCisgKiB0byBwcmVmZXIgb25lIG9yIHRoZSBvdGhlci4KKyAqIGF0IHJ1bnRpbWUsIHRoZXJlIGFyZSBiYXNpY2FsbHkgdGhyZWUgdGltZXIgY29uZmlndXJhdGlvbnM6CisgKiAxLiBwZXIgY3B1IGFwYnQgY2xvY2sgb25seQorICogMi4gcGVyIGNwdSBhbHdheXMtb24gbGFwaWMgY2xvY2tzIG9ubHksIHRoaXMgaXMgUGVud2VsbC9NZWRmaWVsZCBvbmx5CisgKiAzLiBwZXIgY3B1IGxhcGljIGNsb2NrIChDM1NUT1ApIGFuZCBvbmUgYXBidCBjbG9jaywgd2l0aCBicm9hZGNhc3QuCisgKgorICogYnkgZGVmYXVsdCAod2l0aG91dCBjbWRsaW5lIG9wdGlvbiksIHBsYXRmb3JtIGNvZGUgZmlyc3QgZGV0ZWN0cyBjcHUgdHlwZQorICogdG8gc2VlIGlmIHdlIGFyZSBvbiBsaW5jcm9mdCBvciBwZW53ZWxsLCB0aGVuIHNldCB1cCBib3RoIGxhcGljIG9yIGFwYnQKKyAqIGNsb2NrcyBhY2NvcmRpbmdseS4KKyAqIGkuZS4gYnkgZGVmYXVsdCwgbWVkZmllbGQgdXNlcyBjb25maWd1cmF0aW9uICMyLCBtb29yZXN0b3duIHVzZXMgIzEuCisgKiBjb25maWcgIzMgaXMgc3VwcG9ydGVkIGJ1dCBub3QgcmVjb21tZW5kZWQgb24gbWVkZmllbGQuCisgKgorICogcmF0aW5nIGFuZCBmZWF0dXJlIHN1bW1hcnk6CisgKiBsYXBpYyAod2l0aCBDM1NUT1ApIC0tLS0tLS0tLSAxMDAKKyAqIGFwYnQgKGFsd2F5cy1vbikgLS0tLS0tLS0tLS0tIDExMAorICogbGFwaWMgKGFsd2F5cy1vbixBUkFUKSAtLS0tLS0gMTUwCisgKi8KKworX19jcHVpbml0ZGF0YSBlbnVtIG1yc3RfdGltZXJfb3B0aW9ucyBtcnN0X3RpbWVyX29wdGlvbnM7CisKIHN0YXRpYyB1MzIgc2ZpX210aW1lcl91c2FnZVtTRklfTVRNUl9NQVhfTlVNXTsKIHN0YXRpYyBzdHJ1Y3Qgc2ZpX3RpbWVyX3RhYmxlX2VudHJ5IHNmaV9tdGltZXJfYXJyYXlbU0ZJX01UTVJfTUFYX05VTV07CitlbnVtIG1yc3RfY3B1X3R5cGUgX19tcnN0X2NwdV9jaGlwOworRVhQT1JUX1NZTUJPTF9HUEwoX19tcnN0X2NwdV9jaGlwKTsKKwogaW50IHNmaV9tdGltZXJfbnVtOwogCiBzdHJ1Y3Qgc2ZpX3J0Y190YWJsZV9lbnRyeSBzZmlfbXJ0Y19hcnJheVtTRklfTVJUQ19NQVhdOwpAQCAtMTY3LDE4ICsxOTMsNiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogdGhlIHNlY29uZGFyeSBjbG9jayBpbiBNb29yZXN0b3duIGNhbiBiZSBBUEJUIG9yIExBUElDIGNsb2NrLCBkZWZhdWx0IHRvCi0gKiBBUEJUIGJ1dCBjbWRsaW5lIG9wdGlvbiBjYW4gYWxzbyBvdmVycmlkZSBpdC4KLSAqLwotc3RhdGljIHZvaWQgX19jcHVpbml0IG1yc3Rfc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrKHZvaWQpCi17Ci0JLyogcmVzdG9yZSBkZWZhdWx0IGxhcGljIGNsb2NrIGlmIGRpc2FibGVkIGJ5IGNtZGxpbmUgKi8KLQlpZiAoZGlzYWJsZV9hcGJ0X3BlcmNwdSkKLQkJcmV0dXJuIHNldHVwX3NlY29uZGFyeV9BUElDX2Nsb2NrKCk7Ci0JYXBidF9zZXR1cF9zZWNvbmRhcnlfY2xvY2soKTsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IG1yc3RfY2FsaWJyYXRlX3RzYyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGZhc3RfY2FsaWJyYXRlOwpAQCAtMTk1LDYgKzIwOSwyMSBAQAogCiB2b2lkIF9faW5pdCBtcnN0X3RpbWVfaW5pdCh2b2lkKQogeworCXN3aXRjaCAobXJzdF90aW1lcl9vcHRpb25zKSB7CisJY2FzZSBNUlNUX1RJTUVSX0FQQlRfT05MWToKKwkJYnJlYWs7CisJY2FzZSBNUlNUX1RJTUVSX0xBUElDX0FQQlQ6CisJCXg4Nl9pbml0LnRpbWVycy5zZXR1cF9wZXJjcHVfY2xvY2tldiA9IHNldHVwX2Jvb3RfQVBJQ19jbG9jazsKKwkJeDg2X2NwdWluaXQuc2V0dXBfcGVyY3B1X2Nsb2NrZXYgPSBzZXR1cF9zZWNvbmRhcnlfQVBJQ19jbG9jazsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVJBVCkpCisJCQlicmVhazsKKwkJeDg2X2luaXQudGltZXJzLnNldHVwX3BlcmNwdV9jbG9ja2V2ID0gc2V0dXBfYm9vdF9BUElDX2Nsb2NrOworCQl4ODZfY3B1aW5pdC5zZXR1cF9wZXJjcHVfY2xvY2tldiA9IHNldHVwX3NlY29uZGFyeV9BUElDX2Nsb2NrOworCQlyZXR1cm47CisJfQorCS8qIHdlIG5lZWQgYXQgbGVhc3Qgb25lIEFQQiB0aW1lciAqLwogCXNmaV90YWJsZV9wYXJzZShTRklfU0lHX01UTVIsIE5VTEwsIE5VTEwsIHNmaV9wYXJzZV9tdG1yKTsKIAlwcmVfaW5pdF9hcGljX0lSUTAoKTsKIAlhcGJ0X3RpbWVfaW5pdCgpOwpAQCAtMjA1LDE2ICsyMzQsMjcgQEAKIAlzZmlfdGFibGVfcGFyc2UoU0ZJX1NJR19NUlRDLCBOVUxMLCBOVUxMLCBzZmlfcGFyc2VfbXJ0Yyk7CiB9CiAKLS8qCi0gKiBpZiB3ZSB1c2UgcGVyIGNwdSBhcGIgdGltZXIsIHRoZSBib290Y2xvY2sgYWxyZWFkeSBzZXR1cC4gaWYgd2UgdXNlIGxhcGljCi0gKiB0aW1lciBhbmQgb25lIGFwYnQgdGltZXIgZm9yIGJyb2FkY2FzdCwgd2UgbmVlZCB0byBzZXQgdXAgbGFwaWMgYm9vdCBjbG9jay4KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IG1yc3Rfc2V0dXBfYm9vdF9jbG9jayh2b2lkKQordm9pZCBfX2NwdWluaXQgbXJzdF9hcmNoX3NldHVwKHZvaWQpCiB7Ci0JcHJfaW5mbygiJXM6IHBlciBjcHUgYXBidCBmbGFnICVkIFxuIiwgX19mdW5jX18sIGRpc2FibGVfYXBidF9wZXJjcHUpOwotCWlmIChkaXNhYmxlX2FwYnRfcGVyY3B1KQotCQlzZXR1cF9ib290X0FQSUNfY2xvY2soKTsKLX07CisJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDYgJiYgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPT0gMHgyNykKKwkJX19tcnN0X2NwdV9jaGlwID0gTVJTVF9DUFVfQ0hJUF9QRU5XRUxMOworCWVsc2UgaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDYgJiYgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPT0gMHgyNikKKwkJX19tcnN0X2NwdV9jaGlwID0gTVJTVF9DUFVfQ0hJUF9MSU5DUk9GVDsKKwllbHNlIHsKKwkJcHJfZXJyKCJVbmtub3duIE1vb3Jlc3Rvd24gQ1BVICglZDolZCksIGRlZmF1bHQgdG8gTGluY3JvZnRcbiIsCisJCQlib290X2NwdV9kYXRhLng4NiwgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwpOworCQlfX21yc3RfY3B1X2NoaXAgPSBNUlNUX0NQVV9DSElQX0xJTkNST0ZUOworCX0KKwlwcl9kZWJ1ZygiTW9vcmVzdG93biBDUFUgJXMgaWRlbnRpZmllZFxuIiwKKwkJKF9fbXJzdF9jcHVfY2hpcCA9PSBNUlNUX0NQVV9DSElQX0xJTkNST0ZUKSA/CisJCSJMaW5jcm9mdCIgOiAiUGVud2VsbCIpOworfQorCisvKiBNSUQgc3lzdGVtcyBkb24ndCBoYXZlIGk4MDQyIGNvbnRyb2xsZXIgKi8KK3N0YXRpYyBpbnQgbXJzdF9pODA0Ml9kZXRlY3Qodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KIAogLyoKICAqIE1vb3Jlc3Rvd24gc3BlY2lmaWMgeDg2X2luaXQgZnVuY3Rpb24gb3ZlcnJpZGVzIGFuZCBlYXJseSBzZXR1cApAQCAtMjI2LDEzICsyNjYsMTYgQEAKIAl4ODZfaW5pdC5yZXNvdXJjZXMucmVzZXJ2ZV9yZXNvdXJjZXMgPSB4ODZfaW5pdF9ub29wOwogCiAJeDg2X2luaXQudGltZXJzLnRpbWVyX2luaXQgPSBtcnN0X3RpbWVfaW5pdDsKLQl4ODZfaW5pdC50aW1lcnMuc2V0dXBfcGVyY3B1X2Nsb2NrZXYgPSBtcnN0X3NldHVwX2Jvb3RfY2xvY2s7CisJeDg2X2luaXQudGltZXJzLnNldHVwX3BlcmNwdV9jbG9ja2V2ID0geDg2X2luaXRfbm9vcDsKIAogCXg4Nl9pbml0LmlycXMucHJlX3ZlY3Rvcl9pbml0ID0geDg2X2luaXRfbm9vcDsKIAotCXg4Nl9jcHVpbml0LnNldHVwX3BlcmNwdV9jbG9ja2V2ID0gbXJzdF9zZXR1cF9zZWNvbmRhcnlfY2xvY2s7CisJeDg2X2luaXQub2VtLmFyY2hfc2V0dXAgPSBtcnN0X2FyY2hfc2V0dXA7CisKKwl4ODZfY3B1aW5pdC5zZXR1cF9wZXJjcHVfY2xvY2tldiA9IGFwYnRfc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrOwogCiAJeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MgPSBtcnN0X2NhbGlicmF0ZV90c2M7CisJeDg2X3BsYXRmb3JtLmk4MDQyX2RldGVjdCA9IG1yc3RfaTgwNDJfZGV0ZWN0OwogCXg4Nl9pbml0LnBjaS5pbml0ID0gcGNpX21yc3RfaW5pdDsKIAl4ODZfaW5pdC5wY2kuZml4dXBfaXJxcyA9IHg4Nl9pbml0X25vb3A7CiAKQEAgLTI0MywzICsyODYsMjYgQEAKIAl4ODZfaW5pdC5tcHBhcnNlLmdldF9zbXBfY29uZmlnID0geDg2X2luaXRfdWludF9ub29wOwogCiB9CisKKy8qCisgKiBpZiB1c2VyIGRvZXMgbm90IHdhbnQgdG8gdXNlIHBlciBDUFUgYXBiIHRpbWVyLCBqdXN0IGdpdmUgaXQgYSBsb3dlciByYXRpbmcKKyAqIHRoYW4gbG9jYWwgYXBpYyB0aW1lciBhbmQgc2tpcCB0aGUgbGF0ZSBwZXIgY3B1IHRpbWVyIGluaXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBzZXR1cF94ODZfbXJzdF90aW1lcihjaGFyICphcmcpCit7CisJaWYgKCFhcmcpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHN0cmNtcCgiYXBidF9vbmx5IiwgYXJnKSA9PSAwKQorCQltcnN0X3RpbWVyX29wdGlvbnMgPSBNUlNUX1RJTUVSX0FQQlRfT05MWTsKKwllbHNlIGlmIChzdHJjbXAoImxhcGljX2FuZF9hcGJ0IiwgYXJnKSA9PSAwKQorCQltcnN0X3RpbWVyX29wdGlvbnMgPSBNUlNUX1RJTUVSX0xBUElDX0FQQlQ7CisJZWxzZSB7CisJCXByX3dhcm5pbmcoIlg4NiBNUlNUIHRpbWVyIG9wdGlvbiAlcyBub3QgcmVjb2duaXNlZCIKKwkJCSAgICIgdXNlIHg4Nl9tcnN0X3RpbWVyPWFwYnRfb25seSBvciBsYXBpY19hbmRfYXBidFxuIiwKKwkJCSAgIGFyZyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KK19fc2V0dXAoIng4Nl9tcnN0X3RpbWVyPSIsIHNldHVwX3g4Nl9tcnN0X3RpbWVyKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGU3ZTM1MjEuLmQ0MDFmMWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYwpAQCAtMjgsNiArMjgsNyBAQAogRVhQT1JUX1NZTUJPTChpZGxlX25vbXdhaXQpOwogCiBzdHJ1Y3Qga21lbV9jYWNoZSAqdGFza194c3RhdGVfY2FjaGVwOworRVhQT1JUX1NZTUJPTF9HUEwodGFza194c3RhdGVfY2FjaGVwKTsKIAogaW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYykKIHsKQEAgLTM3MSw3ICszNzIsNyBAQAogdm9pZCBkZWZhdWx0X2lkbGUodm9pZCkKIHsKIAlpZiAoaGx0X3VzZV9oYWx0KCkpIHsKLQkJdHJhY2VfcG93ZXJfc3RhcnQoUE9XRVJfQ1NUQVRFLCAxKTsKKwkJdHJhY2VfcG93ZXJfc3RhcnQoUE9XRVJfQ1NUQVRFLCAxLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyAmPSB+VFNfUE9MTElORzsKIAkJLyoKIAkJICogVFNfUE9MTElORy1jbGVhcmVkIHN0YXRlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgd2UKQEAgLTQ0MSw3ICs0NDIsNyBAQAogICovCiB2b2lkIG13YWl0X2lkbGVfd2l0aF9oaW50cyh1bnNpZ25lZCBsb25nIGF4LCB1bnNpZ25lZCBsb25nIGN4KQogewotCXRyYWNlX3Bvd2VyX3N0YXJ0KFBPV0VSX0NTVEFURSwgKGF4Pj40KSsxKTsKKwl0cmFjZV9wb3dlcl9zdGFydChQT1dFUl9DU1RBVEUsIChheD4+NCkrMSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlpZiAoIW5lZWRfcmVzY2hlZCgpKSB7CiAJCWlmIChjcHVfaGFzKCZjdXJyZW50X2NwdV9kYXRhLCBYODZfRkVBVFVSRV9DTEZMVVNIX01PTklUT1IpKQogCQkJY2xmbHVzaCgodm9pZCAqKSZjdXJyZW50X3RocmVhZF9pbmZvKCktPmZsYWdzKTsKQEAgLTQ1Nyw3ICs0NTgsNyBAQAogc3RhdGljIHZvaWQgbXdhaXRfaWRsZSh2b2lkKQogewogCWlmICghbmVlZF9yZXNjaGVkKCkpIHsKLQkJdHJhY2VfcG93ZXJfc3RhcnQoUE9XRVJfQ1NUQVRFLCAxKTsKKwkJdHJhY2VfcG93ZXJfc3RhcnQoUE9XRVJfQ1NUQVRFLCAxLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCQlpZiAoY3B1X2hhcygmY3VycmVudF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfQ0xGTFVTSF9NT05JVE9SKSkKIAkJCWNsZmx1c2goKHZvaWQgKikmY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFncyk7CiAKQEAgLTQ3OCw3ICs0NzksNyBAQAogICovCiBzdGF0aWMgdm9pZCBwb2xsX2lkbGUodm9pZCkKIHsKLQl0cmFjZV9wb3dlcl9zdGFydChQT1dFUl9DU1RBVEUsIDApOworCXRyYWNlX3Bvd2VyX3N0YXJ0KFBPV0VSX0NTVEFURSwgMCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkKIAkJY3B1X3JlbGF4KCk7CkBAIC01MjUsNDQgKzUyNiwxMCBAQAogCXJldHVybiAoZWR4ICYgTVdBSVRfRURYX0MxKTsKIH0KIAotLyoKLSAqIENoZWNrIGZvciBBTUQgQ1BVcywgd2hlcmUgQVBJQyB0aW1lciBpbnRlcnJ1cHQgZG9lcyBub3Qgd2FrZSB1cCBDUFUgZnJvbSBDMWUuCi0gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUKLSAqIC0gRXJyYXR1bSAjNDAwIGZvciBOUFQgZmFtaWx5IDB4ZiBhbmQgZmFtaWx5IDB4MTAgQ1BVcwotICogLSBFcnJhdHVtICMzNjUgZm9yIGZhbWlseSAweDExIChub3QgYWZmZWN0ZWQgYmVjYXVzZSBDMWUgbm90IGluIHVzZSkKLSAqLwotc3RhdGljIGludCBfX2NwdWluaXQgY2hlY2tfYzFlX2lkbGUoY29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICpjKQotewotCXU2NCB2YWw7Ci0JaWYgKGMtPng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9BTUQpCi0JCWdvdG8gbm9fYzFlX2lkbGU7Ci0KLQkvKiBGYW1pbHkgMHgwZiBtb2RlbHMgPCByZXYgRiBkbyBub3QgaGF2ZSBDMUUgKi8KLQlpZiAoYy0+eDg2ID09IDB4MEYgJiYgYy0+eDg2X21vZGVsID49IDB4NDApCi0JCXJldHVybiAxOwotCi0JaWYgKGMtPng4NiA9PSAweDEwKSB7Ci0JCS8qCi0JCSAqIGNoZWNrIE9TVlcgYml0IGZvciBDUFVzIHRoYXQgYXJlIG5vdCBhZmZlY3RlZAotCQkgKiBieSBlcnJhdHVtICM0MDAKLQkJICovCi0JCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX09TVlcpKSB7Ci0JCQlyZG1zcmwoTVNSX0FNRDY0X09TVldfSURfTEVOR1RILCB2YWwpOwotCQkJaWYgKHZhbCA+PSAyKSB7Ci0JCQkJcmRtc3JsKE1TUl9BTUQ2NF9PU1ZXX1NUQVRVUywgdmFsKTsKLQkJCQlpZiAoISh2YWwgJiBCSVQoMSkpKQotCQkJCQlnb3RvIG5vX2MxZV9pZGxlOwotCQkJfQotCQl9Ci0JCXJldHVybiAxOwotCX0KLQotbm9fYzFlX2lkbGU6Ci0JcmV0dXJuIDA7Ci19Citib29sIGMxZV9kZXRlY3RlZDsKK0VYUE9SVF9TWU1CT0woYzFlX2RldGVjdGVkKTsKIAogc3RhdGljIGNwdW1hc2tfdmFyX3QgYzFlX21hc2s7Ci1zdGF0aWMgaW50IGMxZV9kZXRlY3RlZDsKIAogdm9pZCBjMWVfcmVtb3ZlX2NwdShpbnQgY3B1KQogewpAQCAtNTg0LDEyICs1NTEsMTIgQEAKIAkJdTMyIGxvLCBoaTsKIAogCQlyZG1zcihNU1JfSzhfSU5UX1BFTkRJTkdfTVNHLCBsbywgaGkpOworCiAJCWlmIChsbyAmIEs4X0lOVFBfQzFFX0FDVElWRV9NQVNLKSB7Ci0JCQljMWVfZGV0ZWN0ZWQgPSAxOworCQkJYzFlX2RldGVjdGVkID0gdHJ1ZTsKIAkJCWlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05PTlNUT1BfVFNDKSkKIAkJCQltYXJrX3RzY191bnN0YWJsZSgiVFNDIGhhbHQgaW4gQU1EIEMxRSIpOwogCQkJcHJpbnRrKEtFUk5fSU5GTyAiU3lzdGVtIGhhcyBBTUQgQzFFIGVuYWJsZWRcbiIpOwotCQkJc2V0X2NwdV9jYXAoJmJvb3RfY3B1X2RhdGEsIFg4Nl9GRUFUVVJFX0FNREMxRSk7CiAJCX0KIAl9CiAKQEAgLTYzOCw3ICs2MDUsOCBAQAogCQkgKi8KIAkJcHJpbnRrKEtFUk5fSU5GTyAidXNpbmcgbXdhaXQgaW4gaWRsZSB0aHJlYWRzLlxuIik7CiAJCXBtX2lkbGUgPSBtd2FpdF9pZGxlOwotCX0gZWxzZSBpZiAoY2hlY2tfYzFlX2lkbGUoYykpIHsKKwl9IGVsc2UgaWYgKGNwdV9oYXNfYW1kX2VycmF0dW0oYW1kX2VycmF0dW1fNDAwKSkgeworCQkvKiBFNDAwOiBBUElDIHRpbWVyIGludGVycnVwdCBkb2VzIG5vdCB3YWtlIHVwIENQVSBmcm9tIEMxZSAqLwogCQlwcmludGsoS0VSTl9JTkZPICJ1c2luZyBDMUUgYXdhcmUgaWRsZSByb3V0aW5lXG4iKTsKIAkJcG1faWRsZSA9IGMxZV9pZGxlOwogCX0gZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKaW5kZXggOGQxMjg3OC4uOTY1ODZjMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCkBAIC01Nyw2ICs1Nyw4IEBACiAjaW5jbHVkZSA8YXNtL3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8YXNtL2RlYnVncmVnLmg+CiAKKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMvcG93ZXIuaD4KKwogYXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCkgX19hc21fXygicmV0X2Zyb21fZm9yayIpOwogCiAvKgpAQCAtMTExLDYgKzExMyw4IEBACiAJCQlzdG9wX2NyaXRpY2FsX3RpbWluZ3MoKTsKIAkJCXBtX2lkbGUoKTsKIAkJCXN0YXJ0X2NyaXRpY2FsX3RpbWluZ3MoKTsKKworCQkJdHJhY2VfcG93ZXJfZW5kKHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJCX0KIAkJdGlja19ub2h6X3Jlc3RhcnRfc2NoZWRfdGljaygpOwogCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwppbmRleCAzYzI0MjJhLi4zZDllYTUzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKQEAgLTUxLDYgKzUxLDggQEAKICNpbmNsdWRlIDxhc20vc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxhc20vZGVidWdyZWcuaD4KIAorI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9wb3dlci5oPgorCiBhc21saW5rYWdlIGV4dGVybiB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCk7CiAKIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIG9sZF9yc3ApOwpAQCAtMTM4LDYgKzE0MCw5IEBACiAJCQlzdG9wX2NyaXRpY2FsX3RpbWluZ3MoKTsKIAkJCXBtX2lkbGUoKTsKIAkJCXN0YXJ0X2NyaXRpY2FsX3RpbWluZ3MoKTsKKworCQkJdHJhY2VfcG93ZXJfZW5kKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisKIAkJCS8qIEluIG1hbnkgY2FzZXMgdGhlIGludGVycnVwdCB0aGF0IGVuZGVkIGlkbGUKIAkJCSAgIGhhcyBhbHJlYWR5IGNhbGxlZCBleGl0X2lkbGUuIEJ1dCBzb21lIGlkbGUKIAkJCSAgIGxvb3BzIGNhbiBiZSB3b2tlbiB1cCB3aXRob3V0IGludGVycnVwdC4gKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9xdWlya3MuYyBiL2FyY2gveDg2L2tlcm5lbC9xdWlya3MuYwppbmRleCBlNzJkM2ZjLi45MzliOWU5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcXVpcmtzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3F1aXJrcy5jCkBAIC00OTgsMTUgKzQ5OCwxMCBAQAogICogU2VlIGVycmF0dW0gIzI3IChNaXNpbnRlcnByZXRlZCBNU0kgUmVxdWVzdHMgTWF5IFJlc3VsdCBpbgogICogQ29ycnVwdGVkIExQQyBETUEgRGF0YSkgaW4gQU1EIFB1YmxpY2F0aW9uICM0NjgzNywKICAqICJTQjcwMCBGYW1pbHkgUHJvZHVjdCBFcnJhdGEiLCBSZXYuIDEuMCwgTWFyY2ggMjAxMC4KLSAqCi0gKiBBbHNvIGZvcmNlIHRoZSByZWFkIGJhY2sgb2YgdGhlIENNUCByZWdpc3RlciBpbiBocGV0X25leHRfZXZlbnQoKQotICogdG8gd29yayBhcm91bmQgdGhlIHByb2JsZW0gdGhhdCB0aGUgQ01QIHJlZ2lzdGVyIHdyaXRlIHNlZW1zIHRvIGJlCi0gKiBkZWxheWVkLiBTZWUgaHBldF9uZXh0X2V2ZW50KCkgZm9yIGRldGFpbHMuCiAgKi8KIHN0YXRpYyB2b2lkIGZvcmNlX2Rpc2FibGVfaHBldF9tc2koc3RydWN0IHBjaV9kZXYgKnVudXNlZCkKIHsKIAlocGV0X21zaV9kaXNhYmxlID0gMTsKLQlocGV0X3JlYWRiYWNrX2NtcCA9IDE7CiB9CiAKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfU0JYMDBfU01CVVMsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMKaW5kZXggZGUzYjYzYWUuLmE2MGRmOWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMKQEAgLTIzOCw2ICsyMzgsMTUgQEAKICNpZmRlZiBDT05GSUdfTlVNQQogCQlwZXJfY3B1KHg4Nl9jcHVfdG9fbm9kZV9tYXAsIGNwdSkgPQogCQkJZWFybHlfcGVyX2NwdV9tYXAoeDg2X2NwdV90b19ub2RlX21hcCwgY3B1KTsKKwkJLyoKKwkJICogRW5zdXJlIHRoYXQgdGhlIGJvb3QgY3B1IG51bWFfbm9kZSBpcyBjb3JyZWN0IHdoZW4gdGhlIGJvb3QKKwkJICogY3B1IGlzIG9uIGEgbm9kZSB0aGF0IGRvZXNuJ3QgaGF2ZSBtZW1vcnkgaW5zdGFsbGVkLgorCQkgKiBBbHNvIGNwdV91cCgpIHdpbGwgY2FsbCBjcHVfdG9fbm9kZSgpIGZvciBBUHMgd2hlbgorCQkgKiBNRU1PUllfSE9UUExVRyBpcyBkZWZpbmVkLCBiZWZvcmUgcGVyX2NwdShudW1hX25vZGUpIGlzIHNldAorCQkgKiB1cCBsYXRlciB3aXRoIGNfaW5pdCBha2EgaW50ZWxfaW5pdC9hbWRfaW5pdC4KKwkJICogU28gc2V0IHRoZW0gYWxsIChib290IGNwdSBhbmQgYWxsIEFQcykuCisJCSAqLworCQlzZXRfY3B1X251bWFfbm9kZShjcHUsIGVhcmx5X2NwdV90b19ub2RlKGNwdSkpOwogI2VuZGlmCiAjZW5kaWYKIAkJLyoKQEAgLTI1NywxNCArMjY2LDYgQEAKIAllYXJseV9wZXJfY3B1X3B0cih4ODZfY3B1X3RvX25vZGVfbWFwKSA9IE5VTEw7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgJiYgZGVmaW5lZChDT05GSUdfTlVNQSkKLQkvKgotCSAqIG1ha2Ugc3VyZSBib290IGNwdSBudW1hX25vZGUgaXMgcmlnaHQsIHdoZW4gYm9vdCBjcHUgaXMgb24gdGhlCi0JICogbm9kZSB0aGF0IGRvZXNuJ3QgaGF2ZSBtZW0gaW5zdGFsbGVkCi0JICovCi0Jc2V0X2NwdV9udW1hX25vZGUoYm9vdF9jcHVfaWQsIGVhcmx5X2NwdV90b19ub2RlKGJvb3RfY3B1X2lkKSk7Ci0jZW5kaWYKLQogCS8qIFNldHVwIG5vZGUgdG8gY3B1bWFzayBtYXAgKi8KIAlzZXR1cF9ub2RlX3RvX2NwdW1hc2tfbWFwKCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IGM0ZjMzYjIuLjExMDE1ZmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwpAQCAtODE2LDYgKzgxNiwxMyBAQAogCQkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBjcHVfY2FsbGluX21hc2spKQogCQkJCWJyZWFrOwkvKiBJdCBoYXMgYm9vdGVkICovCiAJCQl1ZGVsYXkoMTAwKTsKKwkJCS8qCisJCQkgKiBBbGxvdyBvdGhlciB0YXNrcyB0byBydW4gd2hpbGUgd2Ugd2FpdCBmb3IgdGhlCisJCQkgKiBBUCB0byBjb21lIG9ubGluZS4gVGhpcyBhbHNvIGdpdmVzIGEgY2hhbmNlCisJCQkgKiBmb3IgdGhlIE1UUlIgd29yayh0cmlnZ2VyZWQgYnkgdGhlIEFQIGNvbWluZyBvbmxpbmUpCisJCQkgKiB0byBiZSBjb21wbGV0ZWQgaW4gdGhlIHN0b3AgbWFjaGluZSBjb250ZXh0LgorCQkJICovCisJCQlzY2hlZHVsZSgpOwogCQl9CiAKIAkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBjcHVfY2FsbGluX21hc2spKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3N0YWNrdHJhY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9zdGFja3RyYWNlLmMKaW5kZXggOTIyZWVmYi4uYjUzYzUyNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3N0YWNrdHJhY2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc3RhY2t0cmFjZS5jCkBAIC0yMywxMSArMjMsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc2F2ZV9zdGFja19hZGRyZXNzKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IHJlbGlhYmxlKQorc3RhdGljIHZvaWQKK19fc2F2ZV9zdGFja19hZGRyZXNzKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCByZWxpYWJsZSwgYm9vbCBub3NjaGVkKQogewogCXN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UgPSBkYXRhOworI2lmZGVmIENPTkZJR19GUkFNRV9QT0lOVEVSCiAJaWYgKCFyZWxpYWJsZSkKIAkJcmV0dXJuOworI2VuZGlmCisJaWYgKG5vc2NoZWQgJiYgaW5fc2NoZWRfZnVuY3Rpb25zKGFkZHIpKQorCQlyZXR1cm47CiAJaWYgKHRyYWNlLT5za2lwID4gMCkgewogCQl0cmFjZS0+c2tpcC0tOwogCQlyZXR1cm47CkBAIC0zNiwyMCArNDEsMTUgQEAKIAkJdHJhY2UtPmVudHJpZXNbdHJhY2UtPm5yX2VudHJpZXMrK10gPSBhZGRyOwogfQogCitzdGF0aWMgdm9pZCBzYXZlX3N0YWNrX2FkZHJlc3Modm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgcmVsaWFibGUpCit7CisJcmV0dXJuIF9fc2F2ZV9zdGFja19hZGRyZXNzKGRhdGEsIGFkZHIsIHJlbGlhYmxlLCBmYWxzZSk7Cit9CisKIHN0YXRpYyB2b2lkCiBzYXZlX3N0YWNrX2FkZHJlc3Nfbm9zY2hlZCh2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCByZWxpYWJsZSkKIHsKLQlzdHJ1Y3Qgc3RhY2tfdHJhY2UgKnRyYWNlID0gKHN0cnVjdCBzdGFja190cmFjZSAqKWRhdGE7Ci0JaWYgKCFyZWxpYWJsZSkKLQkJcmV0dXJuOwotCWlmIChpbl9zY2hlZF9mdW5jdGlvbnMoYWRkcikpCi0JCXJldHVybjsKLQlpZiAodHJhY2UtPnNraXAgPiAwKSB7Ci0JCXRyYWNlLT5za2lwLS07Ci0JCXJldHVybjsKLQl9Ci0JaWYgKHRyYWNlLT5ucl9lbnRyaWVzIDwgdHJhY2UtPm1heF9lbnRyaWVzKQotCQl0cmFjZS0+ZW50cmllc1t0cmFjZS0+bnJfZW50cmllcysrXSA9IGFkZHI7CisJcmV0dXJuIF9fc2F2ZV9zdGFja19hZGRyZXNzKGRhdGEsIGFkZHIsIHJlbGlhYmxlLCB0cnVlKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyBzYXZlX3N0YWNrX29wcyA9IHsKQEAgLTk2LDEyICs5NiwxMyBAQAogCiAvKiBVc2Vyc3BhY2Ugc3RhY2t0cmFjZSAtIGJhc2VkIG9uIGtlcm5lbC90cmFjZS90cmFjZV9zeXNwcm9mLmMgKi8KIAotc3RydWN0IHN0YWNrX2ZyYW1lIHsKK3N0cnVjdCBzdGFja19mcmFtZV91c2VyIHsKIAljb25zdCB2b2lkIF9fdXNlcgkqbmV4dF9mcDsKIAl1bnNpZ25lZCBsb25nCQlyZXRfYWRkcjsKIH07CiAKLXN0YXRpYyBpbnQgY29weV9zdGFja19mcmFtZShjb25zdCB2b2lkIF9fdXNlciAqZnAsIHN0cnVjdCBzdGFja19mcmFtZSAqZnJhbWUpCitzdGF0aWMgaW50Citjb3B5X3N0YWNrX2ZyYW1lKGNvbnN0IHZvaWQgX191c2VyICpmcCwgc3RydWN0IHN0YWNrX2ZyYW1lX3VzZXIgKmZyYW1lKQogewogCWludCByZXQ7CiAKQEAgLTEyNiw3ICsxMjcsNyBAQAogCQl0cmFjZS0+ZW50cmllc1t0cmFjZS0+bnJfZW50cmllcysrXSA9IHJlZ3MtPmlwOwogCiAJd2hpbGUgKHRyYWNlLT5ucl9lbnRyaWVzIDwgdHJhY2UtPm1heF9lbnRyaWVzKSB7Ci0JCXN0cnVjdCBzdGFja19mcmFtZSBmcmFtZTsKKwkJc3RydWN0IHN0YWNrX2ZyYW1lX3VzZXIgZnJhbWU7CiAKIAkJZnJhbWUubmV4dF9mcCA9IE5VTEw7CiAJCWZyYW1lLnJldF9hZGRyID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKaW5kZXggNzI1ZWY0ZC4uNjA3ODhkZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKQEAgLTM5Miw3ICszOTIsMTMgQEAKIAkJaWYgKG5vdGlmeV9kaWUoRElFX05NSV9JUEksICJubWlfaXBpIiwgcmVncywgcmVhc29uLCAyLCBTSUdJTlQpCiAJCQkJCQkJCT09IE5PVElGWV9TVE9QKQogCQkJcmV0dXJuOworCiAjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisJCWlmIChub3RpZnlfZGllKERJRV9OTUksICJubWkiLCByZWdzLCByZWFzb24sIDIsIFNJR0lOVCkKKwkJCQkJCQk9PSBOT1RJRllfU1RPUCkKKwkJCXJldHVybjsKKworI2lmbmRlZiBDT05GSUdfTE9DS1VQX0RFVEVDVE9SCiAJCS8qCiAJCSAqIE9rLCBzbyB0aGlzIGlzIG5vbmUgb2YgdGhlIGRvY3VtZW50ZWQgTk1JIHNvdXJjZXMsCiAJCSAqIHNvIGl0IG11c3QgYmUgdGhlIE5NSSB3YXRjaGRvZy4KQEAgLTQwMCw2ICs0MDYsNyBAQAogCQlpZiAobm1pX3dhdGNoZG9nX3RpY2socmVncywgcmVhc29uKSkKIAkJCXJldHVybjsKIAkJaWYgKCFkb19ubWlfY2FsbGJhY2socmVncywgY3B1KSkKKyNlbmRpZiAvKiAhQ09ORklHX0xPQ0tVUF9ERVRFQ1RPUiAqLwogCQkJdW5rbm93bl9ubWlfZXJyb3IocmVhc29uLCByZWdzKTsKICNlbHNlCiAJCXVua25vd25fbm1pX2Vycm9yKHJlYXNvbiwgcmVncyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKaW5kZXggOWZhZjkxYS4uY2U4ZTUwMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RzYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90c2MuYwpAQCAtNzUxLDcgKzc1MSw2IEBACiAJLnJlYWQgICAgICAgICAgICAgICAgICAgPSByZWFkX3RzYywKIAkucmVzdW1lCQkJPSByZXN1bWVfdHNjLAogCS5tYXNrICAgICAgICAgICAgICAgICAgID0gQ0xPQ0tTT1VSQ0VfTUFTSyg2NCksCi0JLnNoaWZ0ICAgICAgICAgICAgICAgICAgPSAyMiwKIAkuZmxhZ3MgICAgICAgICAgICAgICAgICA9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTIHwKIAkJCQkgIENMT0NLX1NPVVJDRV9NVVNUX1ZFUklGWSwKICNpZmRlZiBDT05GSUdfWDg2XzY0CkBAIC04NDUsOCArODQ0LDYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGluaXRfdHNjX2Nsb2Nrc291cmNlKHZvaWQpCiB7Ci0JY2xvY2tzb3VyY2VfdHNjLm11bHQgPSBjbG9ja3NvdXJjZV9raHoybXVsdCh0c2Nfa2h6LAotCQkJY2xvY2tzb3VyY2VfdHNjLnNoaWZ0KTsKIAlpZiAodHNjX2Nsb2Nrc291cmNlX3JlbGlhYmxlKQogCQljbG9ja3NvdXJjZV90c2MuZmxhZ3MgJj0gfkNMT0NLX1NPVVJDRV9NVVNUX1ZFUklGWTsKIAkvKiBsb3dlciB0aGUgcmF0aW5nIGlmIHdlIGFscmVhZHkga25vdyBpdHMgdW5zdGFibGU6ICovCkBAIC04NTQsNyArODUxLDcgQEAKIAkJY2xvY2tzb3VyY2VfdHNjLnJhdGluZyA9IDA7CiAJCWNsb2Nrc291cmNlX3RzYy5mbGFncyAmPSB+Q0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVM7CiAJfQotCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV90c2MpOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyX2toeigmY2xvY2tzb3VyY2VfdHNjLCB0c2Nfa2h6KTsKIH0KIAogI2lmZGVmIENPTkZJR19YODZfNjQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92ZXJpZnlfY3B1XzY0LlMgYi9hcmNoL3g4Ni9rZXJuZWwvdmVyaWZ5X2NwdV82NC5TCmluZGV4IDQ1YjZmOGEuLjU2YThjMmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC92ZXJpZnlfY3B1XzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZlcmlmeV9jcHVfNjQuUwpAQCAtMzEsNiArMzEsNyBAQAogICovCiAKICNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgorI2luY2x1ZGUgPGFzbS9tc3ItaW5kZXguaD4KIAogdmVyaWZ5X2NwdToKIAlwdXNoZmwJCQkJIyBTYXZlIGNhbGxlciBwYXNzZWQgZmxhZ3MKQEAgLTg4LDcgKzg5LDcgQEAKIAlqZQl2ZXJpZnlfY3B1X3NzZV9vawogCXRlc3QJJWRpLCVkaQogCWp6CXZlcmlmeV9jcHVfbm9fbG9uZ21vZGUJIyBvbmx5IHRyeSB0byBmb3JjZSBTU0Ugb24gQU1ECi0JbW92bAkkMHhjMDAxMDAxNSwlZWN4CSMgSFdDUgorCW1vdmwJJE1TUl9LN19IV0NSLCVlY3gKIAlyZG1zcgogCWJ0cgkkMTUsJWVheAkJIyBlbmFibGUgU1NFCiAJd3Jtc3IKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92c3lzY2FsbF82NC5jIGIvYXJjaC94ODYva2VybmVsL3ZzeXNjYWxsXzY0LmMKaW5kZXggMWMwYzZhYi4uZGNiYjI4YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZzeXNjYWxsXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZzeXNjYWxsXzY0LmMKQEAgLTczLDggKzczLDggQEAKIAl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmdnN5c2NhbGxfZ3RvZF9kYXRhLmxvY2ssIGZsYWdzKTsKIH0KIAotdm9pZCB1cGRhdGVfdnN5c2NhbGwoc3RydWN0IHRpbWVzcGVjICp3YWxsX3RpbWUsIHN0cnVjdCBjbG9ja3NvdXJjZSAqY2xvY2ssCi0JCSAgICAgdTMyIG11bHQpCit2b2lkIHVwZGF0ZV92c3lzY2FsbChzdHJ1Y3QgdGltZXNwZWMgKndhbGxfdGltZSwgc3RydWN0IHRpbWVzcGVjICp3dG0sCisJCQlzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNsb2NrLCB1MzIgbXVsdCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC04Nyw3ICs4Nyw3IEBACiAJdnN5c2NhbGxfZ3RvZF9kYXRhLmNsb2NrLnNoaWZ0ID0gY2xvY2stPnNoaWZ0OwogCXZzeXNjYWxsX2d0b2RfZGF0YS53YWxsX3RpbWVfc2VjID0gd2FsbF90aW1lLT50dl9zZWM7CiAJdnN5c2NhbGxfZ3RvZF9kYXRhLndhbGxfdGltZV9uc2VjID0gd2FsbF90aW1lLT50dl9uc2VjOwotCXZzeXNjYWxsX2d0b2RfZGF0YS53YWxsX3RvX21vbm90b25pYyA9IHdhbGxfdG9fbW9ub3RvbmljOworCXZzeXNjYWxsX2d0b2RfZGF0YS53YWxsX3RvX21vbm90b25pYyA9ICp3dG07CiAJdnN5c2NhbGxfZ3RvZF9kYXRhLndhbGxfdGltZV9jb2Fyc2UgPSBfX2N1cnJlbnRfa2VybmVsX3RpbWUoKTsKIAl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmdnN5c2NhbGxfZ3RvZF9kYXRhLmxvY2ssIGZsYWdzKTsKIH0KQEAgLTE2OSwxMyArMTY5LDE4IEBACiAgKiB1bmxpa2VseSAqLwogdGltZV90IF9fdnN5c2NhbGwoMSkgdnRpbWUodGltZV90ICp0KQogewotCXN0cnVjdCB0aW1ldmFsIHR2OworCXVuc2lnbmVkIHNlcTsKIAl0aW1lX3QgcmVzdWx0OwogCWlmICh1bmxpa2VseSghX192c3lzY2FsbF9ndG9kX2RhdGEuc3lzY3RsX2VuYWJsZWQpKQogCQlyZXR1cm4gdGltZV9zeXNjYWxsKHQpOwogCi0JdmdldHRpbWVvZmRheSgmdHYsIE5VTEwpOwotCXJlc3VsdCA9IHR2LnR2X3NlYzsKKwlkbyB7CisJCXNlcSA9IHJlYWRfc2VxYmVnaW4oJl9fdnN5c2NhbGxfZ3RvZF9kYXRhLmxvY2spOworCisJCXJlc3VsdCA9IF9fdnN5c2NhbGxfZ3RvZF9kYXRhLndhbGxfdGltZV9zZWM7CisKKwl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZfX3ZzeXNjYWxsX2d0b2RfZGF0YS5sb2NrLCBzZXEpKTsKKwogCWlmICh0KQogCQkqdCA9IHJlc3VsdDsKIAlyZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmMgYi9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYwppbmRleCA2MWExZThjLi5jZDZkYTZiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYwpAQCAtNSw2ICs1LDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGFzbS9iaW9zX2ViZGEuaD4KICNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KQEAgLTg1LDYgKzg2LDcgQEAKIH07CiAKIHN0YXRpYyB2b2lkIGRlZmF1bHRfbm1pX2luaXQodm9pZCkgeyB9Oworc3RhdGljIGludCBkZWZhdWx0X2k4MDQyX2RldGVjdCh2b2lkKSB7IHJldHVybiAxOyB9OwogCiBzdHJ1Y3QgeDg2X3BsYXRmb3JtX29wcyB4ODZfcGxhdGZvcm0gPSB7CiAJLmNhbGlicmF0ZV90c2MJCQk9IG5hdGl2ZV9jYWxpYnJhdGVfdHNjLApAQCAtOTIsNSArOTQsOCBAQAogCS5zZXRfd2FsbGNsb2NrCQkJPSBtYWNoX3NldF9ydGNfbW1zcywKIAkuaW9tbXVfc2h1dGRvd24JCQk9IGlvbW11X3NodXRkb3duX25vb3AsCiAJLmlzX3VudHJhY2tlZF9wYXRfcmFuZ2UJCT0gaXNfSVNBX3JhbmdlLAotCS5ubWlfaW5pdAkJCT0gZGVmYXVsdF9ubWlfaW5pdAorCS5ubWlfaW5pdAkJCT0gZGVmYXVsdF9ubWlfaW5pdCwKKwkuaTgwNDJfZGV0ZWN0CQkJPSBkZWZhdWx0X2k4MDQyX2RldGVjdAogfTsKKworRVhQT1JUX1NZTUJPTF9HUEwoeDg2X3BsYXRmb3JtKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC94c2F2ZS5jIGIvYXJjaC94ODYva2VybmVsL3hzYXZlLmMKaW5kZXggMzdlNjhmYy4uYTRhZTMwMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3hzYXZlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3hzYXZlLmMKQEAgLTM2LDE1ICszNiwxNCBAQAogCiAJZXJyID0gX19jb3B5X2Zyb21fdXNlcihmeF9zd191c2VyLCAmYnVmLT5zd19yZXNlcnZlZFswXSwKIAkJCSAgICAgICBzaXplb2Yoc3RydWN0IF9mcHhfc3dfYnl0ZXMpKTsKLQogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCXJldHVybiAtRUZBVUxUOwogCiAJLyoKIAkgKiBGaXJzdCBNYWdpYyBjaGVjayBmYWlsZWQuCiAJICovCiAJaWYgKGZ4X3N3X3VzZXItPm1hZ2ljMSAhPSBGUF9YU1RBVEVfTUFHSUMxKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRUlOVkFMOwogCiAJLyoKIAkgKiBDaGVjayBmb3IgZXJyb3Igc2NlbmFyaW9zLgpAQCAtNTIsMTkgKzUxLDIxIEBACiAJaWYgKGZ4X3N3X3VzZXItPnhzdGF0ZV9zaXplIDwgbWluX3hzdGF0ZV9zaXplIHx8CiAJICAgIGZ4X3N3X3VzZXItPnhzdGF0ZV9zaXplID4geHN0YXRlX3NpemUgfHwKIAkgICAgZnhfc3dfdXNlci0+eHN0YXRlX3NpemUgPiBmeF9zd191c2VyLT5leHRlbmRlZF9zaXplKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRUlOVkFMOwogCiAJZXJyID0gX19nZXRfdXNlcihtYWdpYzIsIChfX3UzMiAqKSAoKCh2b2lkICopZnBzdGF0ZSkgKwogCQkJCQkgICAgZnhfc3dfdXNlci0+ZXh0ZW5kZWRfc2l6ZSAtCiAJCQkJCSAgICBGUF9YU1RBVEVfTUFHSUMyX1NJWkUpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCS8qCiAJICogQ2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiBzZWNvbmQgbWFnaWMgd29yZCBhdCB0aGUgZW5kIG9mIG1lbW9yeQogCSAqIGxheW91dC4gVGhpcyBkZXRlY3RzIHRoZSBjYXNlIHdoZXJlIHRoZSB1c2VyIGp1c3QgY29waWVkIHRoZSBsZWdhY3kKIAkgKiBmcHN0YXRlIGxheW91dCB3aXRoIG91dCBjb3B5aW5nIHRoZSBleHRlbmRlZCBzdGF0ZSBpbmZvcm1hdGlvbgogCSAqIGluIHRoZSBtZW1vcnkgbGF5b3V0LgogCSAqLwotCWlmIChlcnIgfHwgbWFnaWMyICE9IEZQX1hTVEFURV9NQUdJQzIpCi0JCXJldHVybiAtMTsKKwlpZiAobWFnaWMyICE9IEZQX1hTVEFURV9NQUdJQzIpCisJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05MSwxNCArOTIsNiBAQAogCQlyZXR1cm4gMDsKIAogCWlmICh0YXNrX3RocmVhZF9pbmZvKHRzayktPnN0YXR1cyAmIFRTX1VTRURGUFUpIHsKLQkJLyoKLQkgCSAqIFN0YXJ0IHdpdGggY2xlYXJpbmcgdGhlIHVzZXIgYnVmZmVyLiBUaGlzIHdpbGwgcHJlc2VudCBhCi0JIAkgKiBjbGVhbiBjb250ZXh0IGZvciB0aGUgYnl0ZXMgbm90IHRvdWNoZWQgYnkgdGhlIGZ4c2F2ZS94c2F2ZS4KLQkJICovCi0JCWVyciA9IF9fY2xlYXJfdXNlcihidWYsIHNpZ194c3RhdGVfc2l6ZSk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCiAJCWlmICh1c2VfeHNhdmUoKSkKIAkJCWVyciA9IHhzYXZlX3VzZXIoYnVmKTsKIAkJZWxzZQpAQCAtMTg0LDggKzE3Nyw4IEBACiAJICogaW5pdCB0aGUgc3RhdGUgc2tpcHBlZCBieSB0aGUgdXNlci4KIAkgKi8KIAltYXNrID0gcGNudHh0X21hc2sgJiB+bWFzazsKLQotCXhyc3Rvcl9zdGF0ZShpbml0X3hzdGF0ZV9idWYsIG1hc2spOworCWlmICh1bmxpa2VseShtYXNrKSkKKwkJeHJzdG9yX3N0YXRlKGluaXRfeHN0YXRlX2J1ZiwgbWFzayk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYyBiL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMKaW5kZXggNWFjMGJiNC4uYjM4YmQ4YjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMKKysrIGIvYXJjaC94ODYva3ZtL2VtdWxhdGUuYwpAQCAtOSw2ICs5LDcgQEAKICAqIHByaXZpbGVnZWQgaW5zdHJ1Y3Rpb25zOgogICoKICAqIENvcHlyaWdodCAoQykgMjAwNiBRdW1yYW5ldAorICogQ29weXJpZ2h0IDIwMTAgUmVkIEhhdCwgSW5jLiBhbmQvb3IgaXRzIGFmZmlsYXRlcy4KICAqCiAgKiAgIEF2aSBLaXZpdHkgPGF2aUBxdW1yYW5ldC5jb20+CiAgKiAgIFlhbml2IEthbWF5IDx5YW5pdkBxdW1yYW5ldC5jb20+CkBAIC02Nyw2ICs2OCw5IEBACiAjZGVmaW5lIFNyY0ltbVVCeXRlICg4PDw0KSAgICAgIC8qIDgtYml0IHVuc2lnbmVkIGltbWVkaWF0ZSBvcGVyYW5kLiAqLwogI2RlZmluZSBTcmNJbW1VICAgICAoOTw8NCkgICAgICAvKiBJbW1lZGlhdGUgb3BlcmFuZCwgdW5zaWduZWQgKi8KICNkZWZpbmUgU3JjU0kgICAgICAgKDB4YTw8NCkJLyogU291cmNlIGlzIGluIHRoZSBEUzpSU0kgKi8KKyNkZWZpbmUgU3JjSW1tRkFkZHIgKDB4Yjw8NCkJLyogU291cmNlIGlzIGltbWVkaWF0ZSBmYXIgYWRkcmVzcyAqLworI2RlZmluZSBTcmNNZW1GQWRkciAoMHhjPDw0KQkvKiBTb3VyY2UgaXMgZmFyIGFkZHJlc3MgaW4gbWVtb3J5ICovCisjZGVmaW5lIFNyY0FjYyAgICAgICgweGQ8PDQpCS8qIFNvdXJjZSBBY2N1bXVsYXRvciAqLwogI2RlZmluZSBTcmNNYXNrICAgICAoMHhmPDw0KQogLyogR2VuZXJpYyBNb2RSTSBkZWNvZGUuICovCiAjZGVmaW5lIE1vZFJNICAgICAgICgxPDw4KQpAQCAtODgsMTAgKzkyLDYgQEAKICNkZWZpbmUgU3JjMkNMICAgICAgKDE8PDI5KQogI2RlZmluZSBTcmMySW1tQnl0ZSAoMjw8MjkpCiAjZGVmaW5lIFNyYzJPbmUgICAgICgzPDwyOSkKLSNkZWZpbmUgU3JjMkltbTE2ICAgKDQ8PDI5KQotI2RlZmluZSBTcmMyTWVtMTYgICAoNTw8MjkpIC8qIFVzZWQgZm9yIEVwIGVuY29kaW5nLiBGaXJzdCBhcmd1bWVudCBoYXMgdG8gYmUKLQkJCSAgICAgICBpbiBtZW1vcnkgYW5kIHNlY29uZCBhcmd1bWVudCBpcyBsb2NhdGVkCi0JCQkgICAgICAgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGZpcnN0IG9uZSBpbiBtZW1vcnkuICovCiAjZGVmaW5lIFNyYzJNYXNrICAgICg3PDwyOSkKIAogZW51bSB7CkBAIC0xMjQsMTUgKzEyNCwxNSBAQAogCS8qIDB4MjAgLSAweDI3ICovCiAJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0gfCBMb2NrLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSB8IExvY2ssCiAJQnl0ZU9wIHwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sIERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLAotCURzdEFjYyB8IFNyY0ltbUJ5dGUsIERzdEFjYyB8IFNyY0ltbSwgMCwgMCwKKwlCeXRlT3AgfCBEc3RBY2MgfCBTcmNJbW1CeXRlLCBEc3RBY2MgfCBTcmNJbW0sIDAsIDAsCiAJLyogMHgyOCAtIDB4MkYgKi8KIAlCeXRlT3AgfCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSB8IExvY2ssIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNIHwgTG9jaywKIAlCeXRlT3AgfCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sCi0JMCwgMCwgMCwgMCwKKwlCeXRlT3AgfCBEc3RBY2MgfCBTcmNJbW1CeXRlLCBEc3RBY2MgfCBTcmNJbW0sIDAsIDAsCiAJLyogMHgzMCAtIDB4MzcgKi8KIAlCeXRlT3AgfCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSB8IExvY2ssIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNIHwgTG9jaywKIAlCeXRlT3AgfCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sCi0JMCwgMCwgMCwgMCwKKwlCeXRlT3AgfCBEc3RBY2MgfCBTcmNJbW1CeXRlLCBEc3RBY2MgfCBTcmNJbW0sIDAsIDAsCiAJLyogMHgzOCAtIDB4M0YgKi8KIAlCeXRlT3AgfCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sCiAJQnl0ZU9wIHwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sIERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLApAQCAtMTcwLDIwICsxNzAsMjAgQEAKIAkvKiAweDg4IC0gMHg4RiAqLwogCUJ5dGVPcCB8IERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNIHwgTW92LCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSB8IE1vdiwKIAlCeXRlT3AgfCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0gfCBNb3YsCi0JRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0gfCBNb3YsIE1vZFJNIHwgRHN0UmVnLAotCURzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgTW92LCBHcm91cCB8IEdyb3VwMUEsCisJRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNIHwgTW92LCBNb2RSTSB8IERzdFJlZywKKwlJbXBsaWNpdE9wcyB8IFNyY01lbTE2IHwgTW9kUk0sIEdyb3VwIHwgR3JvdXAxQSwKIAkvKiAweDkwIC0gMHg5NyAqLwogCURzdFJlZywgRHN0UmVnLCBEc3RSZWcsIERzdFJlZywJRHN0UmVnLCBEc3RSZWcsIERzdFJlZywgRHN0UmVnLAogCS8qIDB4OTggLSAweDlGICovCi0JMCwgMCwgU3JjSW1tIHwgU3JjMkltbTE2IHwgTm82NCwgMCwKKwkwLCAwLCBTcmNJbW1GQWRkciB8IE5vNjQsIDAsCiAJSW1wbGljaXRPcHMgfCBTdGFjaywgSW1wbGljaXRPcHMgfCBTdGFjaywgMCwgMCwKIAkvKiAweEEwIC0gMHhBNyAqLwotCUJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vdiB8IE1lbUFicywgRHN0UmVnIHwgU3JjTWVtIHwgTW92IHwgTWVtQWJzLAotCUJ5dGVPcCB8IERzdE1lbSB8IFNyY1JlZyB8IE1vdiB8IE1lbUFicywgRHN0TWVtIHwgU3JjUmVnIHwgTW92IHwgTWVtQWJzLAorCUJ5dGVPcCB8IERzdEFjYyB8IFNyY01lbSB8IE1vdiB8IE1lbUFicywgRHN0QWNjIHwgU3JjTWVtIHwgTW92IHwgTWVtQWJzLAorCUJ5dGVPcCB8IERzdE1lbSB8IFNyY0FjYyB8IE1vdiB8IE1lbUFicywgRHN0TWVtIHwgU3JjQWNjIHwgTW92IHwgTWVtQWJzLAogCUJ5dGVPcCB8IFNyY1NJIHwgRHN0REkgfCBNb3YgfCBTdHJpbmcsIFNyY1NJIHwgRHN0REkgfCBNb3YgfCBTdHJpbmcsCiAJQnl0ZU9wIHwgU3JjU0kgfCBEc3RESSB8IFN0cmluZywgU3JjU0kgfCBEc3RESSB8IFN0cmluZywKIAkvKiAweEE4IC0gMHhBRiAqLwotCTAsIDAsIEJ5dGVPcCB8IERzdERJIHwgTW92IHwgU3RyaW5nLCBEc3RESSB8IE1vdiB8IFN0cmluZywKKwlEc3RBY2MgfCBTcmNJbW1CeXRlIHwgQnl0ZU9wLCBEc3RBY2MgfCBTcmNJbW0sIEJ5dGVPcCB8IERzdERJIHwgTW92IHwgU3RyaW5nLCBEc3RESSB8IE1vdiB8IFN0cmluZywKIAlCeXRlT3AgfCBTcmNTSSB8IERzdEFjYyB8IE1vdiB8IFN0cmluZywgU3JjU0kgfCBEc3RBY2MgfCBNb3YgfCBTdHJpbmcsCiAJQnl0ZU9wIHwgRHN0REkgfCBTdHJpbmcsIERzdERJIHwgU3RyaW5nLAogCS8qIDB4QjAgLSAweEI3ICovCkBAIC0yMTUsNyArMjE1LDcgQEAKIAlCeXRlT3AgfCBTcmNJbW1VQnl0ZSB8IERzdEFjYywgU3JjSW1tVUJ5dGUgfCBEc3RBY2MsCiAJLyogMHhFOCAtIDB4RUYgKi8KIAlTcmNJbW0gfCBTdGFjaywgU3JjSW1tIHwgSW1wbGljaXRPcHMsCi0JU3JjSW1tVSB8IFNyYzJJbW0xNiB8IE5vNjQsIFNyY0ltbUJ5dGUgfCBJbXBsaWNpdE9wcywKKwlTcmNJbW1GQWRkciB8IE5vNjQsIFNyY0ltbUJ5dGUgfCBJbXBsaWNpdE9wcywKIAlTcmNOb25lIHwgQnl0ZU9wIHwgRHN0QWNjLCBTcmNOb25lIHwgRHN0QWNjLAogCVNyY05vbmUgfCBCeXRlT3AgfCBEc3RBY2MsIFNyY05vbmUgfCBEc3RBY2MsCiAJLyogMHhGMCAtIDB4RjcgKi8KQEAgLTMzNywyMCArMzM3LDIwIEBACiAJW0dyb3VwMUEqOF0gPQogCURzdE1lbSB8IFNyY05vbmUgfCBNb2RSTSB8IE1vdiB8IFN0YWNrLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAogCVtHcm91cDNfQnl0ZSo4XSA9Ci0JQnl0ZU9wIHwgU3JjSW1tIHwgRHN0TWVtIHwgTW9kUk0sIDAsCisJQnl0ZU9wIHwgU3JjSW1tIHwgRHN0TWVtIHwgTW9kUk0sIEJ5dGVPcCB8IFNyY0ltbSB8IERzdE1lbSB8IE1vZFJNLAogCUJ5dGVPcCB8IERzdE1lbSB8IFNyY05vbmUgfCBNb2RSTSwgQnl0ZU9wIHwgRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNLAogCTAsIDAsIDAsIDAsCiAJW0dyb3VwMyo4XSA9Ci0JRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sIDAsCisJRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sIERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLAogCURzdE1lbSB8IFNyY05vbmUgfCBNb2RSTSwgRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNLAogCTAsIDAsIDAsIDAsCiAJW0dyb3VwNCo4XSA9Ci0JQnl0ZU9wIHwgRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNLCBCeXRlT3AgfCBEc3RNZW0gfCBTcmNOb25lIHwgTW9kUk0sCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNIHwgTG9jaywgQnl0ZU9wIHwgRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNIHwgTG9jaywKIAkwLCAwLCAwLCAwLCAwLCAwLAogCVtHcm91cDUqOF0gPQotCURzdE1lbSB8IFNyY05vbmUgfCBNb2RSTSwgRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNLAorCURzdE1lbSB8IFNyY05vbmUgfCBNb2RSTSB8IExvY2ssIERzdE1lbSB8IFNyY05vbmUgfCBNb2RSTSB8IExvY2ssCiAJU3JjTWVtIHwgTW9kUk0gfCBTdGFjaywgMCwKLQlTcmNNZW0gfCBNb2RSTSB8IFN0YWNrLCBTcmNNZW0gfCBNb2RSTSB8IFNyYzJNZW0xNiB8IEltcGxpY2l0T3BzLAorCVNyY01lbSB8IE1vZFJNIHwgU3RhY2ssIFNyY01lbUZBZGRyIHwgTW9kUk0gfCBJbXBsaWNpdE9wcywKIAlTcmNNZW0gfCBNb2RSTSB8IFN0YWNrLCAwLAogCVtHcm91cDcqOF0gPQogCTAsIDAsIE1vZFJNIHwgU3JjTWVtIHwgUHJpdiwgTW9kUk0gfCBTcmNNZW0gfCBQcml2LApAQCAtNTc2LDYgKzU3NiwxMyBAQAogCShfdHlwZSlfeDsJCQkJCQkJXAogfSkKIAorI2RlZmluZSBpbnNuX2ZldGNoX2FycihfYXJyLCBfc2l6ZSwgX2VpcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyh7CXJjID0gZG9faW5zbl9mZXRjaChjdHh0LCBvcHMsIChfZWlwKSwgX2FyciwgKF9zaXplKSk7CQlcCisJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCQkJCQlcCisJCWdvdG8gZG9uZTsJCQkJCQlcCisJKF9laXApICs9IChfc2l6ZSk7CQkJCQkJXAorfSkKKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFkX21hc2soc3RydWN0IGRlY29kZV9jYWNoZSAqYykKIHsKIAlyZXR1cm4gKDFVTCA8PCAoYy0+YWRfYnl0ZXMgPDwgMykpIC0gMTsKQEAgLTYxNywzMSArNjI0LDY2IEBACiAJYy0+c2VnX292ZXJyaWRlID0gc2VnOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzZWdfYmFzZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IHNlZykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNlZ19iYXNlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAorCQkJICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzLCBpbnQgc2VnKQogewogCWlmIChjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9QUk9UNjQgJiYgc2VnIDwgVkNQVV9TUkVHX0ZTKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBrdm1feDg2X29wcy0+Z2V0X3NlZ21lbnRfYmFzZShjdHh0LT52Y3B1LCBzZWcpOworCXJldHVybiBvcHMtPmdldF9jYWNoZWRfc2VnbWVudF9iYXNlKHNlZywgY3R4dC0+dmNwdSk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNlZ19vdmVycmlkZV9iYXNlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAorCQkJCSAgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMsCiAJCQkJICAgICAgIHN0cnVjdCBkZWNvZGVfY2FjaGUgKmMpCiB7CiAJaWYgKCFjLT5oYXNfc2VnX292ZXJyaWRlKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBzZWdfYmFzZShjdHh0LCBjLT5zZWdfb3ZlcnJpZGUpOworCXJldHVybiBzZWdfYmFzZShjdHh0LCBvcHMsIGMtPnNlZ19vdmVycmlkZSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGVzX2Jhc2Uoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBlc19iYXNlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAorCQkJICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMpCiB7Ci0JcmV0dXJuIHNlZ19iYXNlKGN0eHQsIFZDUFVfU1JFR19FUyk7CisJcmV0dXJuIHNlZ19iYXNlKGN0eHQsIG9wcywgVkNQVV9TUkVHX0VTKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgc3NfYmFzZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNzX2Jhc2Uoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJCQkgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcykKIHsKLQlyZXR1cm4gc2VnX2Jhc2UoY3R4dCwgVkNQVV9TUkVHX1NTKTsKKwlyZXR1cm4gc2VnX2Jhc2UoY3R4dCwgb3BzLCBWQ1BVX1NSRUdfU1MpOworfQorCitzdGF0aWMgdm9pZCBlbXVsYXRlX2V4Y2VwdGlvbihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IHZlYywKKwkJCQkgICAgICB1MzIgZXJyb3IsIGJvb2wgdmFsaWQpCit7CisJY3R4dC0+ZXhjZXB0aW9uID0gdmVjOworCWN0eHQtPmVycm9yX2NvZGUgPSBlcnJvcjsKKwljdHh0LT5lcnJvcl9jb2RlX3ZhbGlkID0gdmFsaWQ7CisJY3R4dC0+cmVzdGFydCA9IGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBlbXVsYXRlX2dwKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBpbnQgZXJyKQoreworCWVtdWxhdGVfZXhjZXB0aW9uKGN0eHQsIEdQX1ZFQ1RPUiwgZXJyLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgZW11bGF0ZV9wZihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkgICAgICAgaW50IGVycikKK3sKKwljdHh0LT5jcjIgPSBhZGRyOworCWVtdWxhdGVfZXhjZXB0aW9uKGN0eHQsIFBGX1ZFQ1RPUiwgZXJyLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgZW11bGF0ZV91ZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKwllbXVsYXRlX2V4Y2VwdGlvbihjdHh0LCBVRF9WRUNUT1IsIDAsIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgZW11bGF0ZV90cyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IGVycikKK3sKKwllbXVsYXRlX2V4Y2VwdGlvbihjdHh0LCBUU19WRUNUT1IsIGVyciwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBpbnQgZG9fZmV0Y2hfaW5zbl9ieXRlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LApAQCAtOTMyLDEyICs5NzQsOSBAQAogCS8qIHdlIGNhbm5vdCBkZWNvZGUgaW5zbiBiZWZvcmUgd2UgY29tcGxldGUgcHJldmlvdXMgcmVwIGluc24gKi8KIAlXQVJOX09OKGN0eHQtPnJlc3RhcnQpOwogCi0JLyogU2hhZG93IGNvcHkgb2YgcmVnaXN0ZXIgc3RhdGUuIENvbW1pdHRlZCBvbiBzdWNjZXNzZnVsIGVtdWxhdGlvbi4gKi8KLQltZW1zZXQoYywgMCwgc2l6ZW9mKHN0cnVjdCBkZWNvZGVfY2FjaGUpKTsKIAljLT5laXAgPSBjdHh0LT5laXA7CiAJYy0+ZmV0Y2guc3RhcnQgPSBjLT5mZXRjaC5lbmQgPSBjLT5laXA7Ci0JY3R4dC0+Y3NfYmFzZSA9IHNlZ19iYXNlKGN0eHQsIFZDUFVfU1JFR19DUyk7Ci0JbWVtY3B5KGMtPnJlZ3MsIGN0eHQtPnZjcHUtPmFyY2gucmVncywgc2l6ZW9mIGMtPnJlZ3MpOworCWN0eHQtPmNzX2Jhc2UgPSBzZWdfYmFzZShjdHh0LCBvcHMsIFZDUFVfU1JFR19DUyk7CiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIFg4NkVNVUxfTU9ERV9SRUFMOgpAQCAtMTA2MCw3ICsxMDk5LDcgQEAKIAkJc2V0X3NlZ19vdmVycmlkZShjLCBWQ1BVX1NSRUdfRFMpOwogCiAJaWYgKCEoIWMtPnR3b2J5dGUgJiYgYy0+YiA9PSAweDhkKSkKLQkJYy0+bW9kcm1fZWEgKz0gc2VnX292ZXJyaWRlX2Jhc2UoY3R4dCwgYyk7CisJCWMtPm1vZHJtX2VhICs9IHNlZ19vdmVycmlkZV9iYXNlKGN0eHQsIG9wcywgYyk7CiAKIAlpZiAoYy0+YWRfYnl0ZXMgIT0gOCkKIAkJYy0+bW9kcm1fZWEgPSAodTMyKWMtPm1vZHJtX2VhOwpAQCAtMTE0OCw2ICsxMTg3LDI1IEBACiAJCWVsc2UKIAkJCWMtPnNyYy52YWwgPSBpbnNuX2ZldGNoKHU4LCAxLCBjLT5laXApOwogCQlicmVhazsKKwljYXNlIFNyY0FjYzoKKwkJYy0+c3JjLnR5cGUgPSBPUF9SRUc7CisJCWMtPnNyYy5ieXRlcyA9IChjLT5kICYgQnl0ZU9wKSA/IDEgOiBjLT5vcF9ieXRlczsKKwkJYy0+c3JjLnB0ciA9ICZjLT5yZWdzW1ZDUFVfUkVHU19SQVhdOworCQlzd2l0Y2ggKGMtPnNyYy5ieXRlcykgeworCQkJY2FzZSAxOgorCQkJCWMtPnNyYy52YWwgPSAqKHU4ICopYy0+c3JjLnB0cjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQljLT5zcmMudmFsID0gKih1MTYgKiljLT5zcmMucHRyOworCQkJCWJyZWFrOworCQkJY2FzZSA0OgorCQkJCWMtPnNyYy52YWwgPSAqKHUzMiAqKWMtPnNyYy5wdHI7CisJCQkJYnJlYWs7CisJCQljYXNlIDg6CisJCQkJYy0+c3JjLnZhbCA9ICoodTY0ICopYy0+c3JjLnB0cjsKKwkJCQlicmVhazsKKwkJfQorCQlicmVhazsKIAljYXNlIFNyY09uZToKIAkJYy0+c3JjLmJ5dGVzID0gMTsKIAkJYy0+c3JjLnZhbCA9IDE7CkBAIC0xMTU2LDEwICsxMjE0LDIxIEBACiAJCWMtPnNyYy50eXBlID0gT1BfTUVNOwogCQljLT5zcmMuYnl0ZXMgPSAoYy0+ZCAmIEJ5dGVPcCkgPyAxIDogYy0+b3BfYnl0ZXM7CiAJCWMtPnNyYy5wdHIgPSAodW5zaWduZWQgbG9uZyAqKQotCQkJcmVnaXN0ZXJfYWRkcmVzcyhjLCAgc2VnX292ZXJyaWRlX2Jhc2UoY3R4dCwgYyksCisJCQlyZWdpc3Rlcl9hZGRyZXNzKGMsICBzZWdfb3ZlcnJpZGVfYmFzZShjdHh0LCBvcHMsIGMpLAogCQkJCQkgYy0+cmVnc1tWQ1BVX1JFR1NfUlNJXSk7CiAJCWMtPnNyYy52YWwgPSAwOwogCQlicmVhazsKKwljYXNlIFNyY0ltbUZBZGRyOgorCQljLT5zcmMudHlwZSA9IE9QX0lNTTsKKwkJYy0+c3JjLnB0ciA9ICh1bnNpZ25lZCBsb25nICopYy0+ZWlwOworCQljLT5zcmMuYnl0ZXMgPSBjLT5vcF9ieXRlcyArIDI7CisJCWluc25fZmV0Y2hfYXJyKGMtPnNyYy52YWxwdHIsIGMtPnNyYy5ieXRlcywgYy0+ZWlwKTsKKwkJYnJlYWs7CisJY2FzZSBTcmNNZW1GQWRkcjoKKwkJYy0+c3JjLnR5cGUgPSBPUF9NRU07CisJCWMtPnNyYy5wdHIgPSAodW5zaWduZWQgbG9uZyAqKWMtPm1vZHJtX2VhOworCQljLT5zcmMuYnl0ZXMgPSBjLT5vcF9ieXRlcyArIDI7CisJCWJyZWFrOwogCX0KIAogCS8qCkBAIC0xMTc5LDIyICsxMjQ4LDEwIEBACiAJCWMtPnNyYzIuYnl0ZXMgPSAxOwogCQljLT5zcmMyLnZhbCA9IGluc25fZmV0Y2godTgsIDEsIGMtPmVpcCk7CiAJCWJyZWFrOwotCWNhc2UgU3JjMkltbTE2OgotCQljLT5zcmMyLnR5cGUgPSBPUF9JTU07Ci0JCWMtPnNyYzIucHRyID0gKHVuc2lnbmVkIGxvbmcgKiljLT5laXA7Ci0JCWMtPnNyYzIuYnl0ZXMgPSAyOwotCQljLT5zcmMyLnZhbCA9IGluc25fZmV0Y2godTE2LCAyLCBjLT5laXApOwotCQlicmVhazsKIAljYXNlIFNyYzJPbmU6CiAJCWMtPnNyYzIuYnl0ZXMgPSAxOwogCQljLT5zcmMyLnZhbCA9IDE7CiAJCWJyZWFrOwotCWNhc2UgU3JjMk1lbTE2OgotCQljLT5zcmMyLnR5cGUgPSBPUF9NRU07Ci0JCWMtPnNyYzIuYnl0ZXMgPSAyOwotCQljLT5zcmMyLnB0ciA9ICh1bnNpZ25lZCBsb25nICopKGMtPm1vZHJtX2VhICsgYy0+c3JjLmJ5dGVzKTsKLQkJYy0+c3JjMi52YWwgPSAwOwotCQlicmVhazsKIAl9CiAKIAkvKiBEZWNvZGUgYW5kIGZldGNoIHRoZSBkZXN0aW5hdGlvbiBvcGVyYW5kOiByZWdpc3RlciBvciBtZW1vcnkuICovCkBAIC0xMjUzLDcgKzEzMTAsNyBAQAogCQljLT5kc3QudHlwZSA9IE9QX01FTTsKIAkJYy0+ZHN0LmJ5dGVzID0gKGMtPmQgJiBCeXRlT3ApID8gMSA6IGMtPm9wX2J5dGVzOwogCQljLT5kc3QucHRyID0gKHVuc2lnbmVkIGxvbmcgKikKLQkJCXJlZ2lzdGVyX2FkZHJlc3MoYywgZXNfYmFzZShjdHh0KSwKKwkJCXJlZ2lzdGVyX2FkZHJlc3MoYywgZXNfYmFzZShjdHh0LCBvcHMpLAogCQkJCQkgYy0+cmVnc1tWQ1BVX1JFR1NfUkRJXSk7CiAJCWMtPmRzdC52YWwgPSAwOwogCQlicmVhazsKQEAgLTEyNjMsNiArMTMyMCwzNyBAQAogCXJldHVybiAocmMgPT0gWDg2RU1VTF9VTkhBTkRMRUFCTEUpID8gLTEgOiAwOwogfQogCitzdGF0aWMgaW50IHJlYWRfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJCQkgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzLAorCQkJIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGVzdCwgdW5zaWduZWQgc2l6ZSkKK3sKKwlpbnQgcmM7CisJc3RydWN0IHJlYWRfY2FjaGUgKm1jID0gJmN0eHQtPmRlY29kZS5tZW1fcmVhZDsKKwl1MzIgZXJyOworCisJd2hpbGUgKHNpemUpIHsKKwkJaW50IG4gPSBtaW4oc2l6ZSwgOHUpOworCQlzaXplIC09IG47CisJCWlmIChtYy0+cG9zIDwgbWMtPmVuZCkKKwkJCWdvdG8gcmVhZF9jYWNoZWQ7CisKKwkJcmMgPSBvcHMtPnJlYWRfZW11bGF0ZWQoYWRkciwgbWMtPmRhdGEgKyBtYy0+ZW5kLCBuLCAmZXJyLAorCQkJCQljdHh0LT52Y3B1KTsKKwkJaWYgKHJjID09IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUKQorCQkJZW11bGF0ZV9wZihjdHh0LCBhZGRyLCBlcnIpOworCQlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKKwkJCXJldHVybiByYzsKKwkJbWMtPmVuZCArPSBuOworCisJcmVhZF9jYWNoZWQ6CisJCW1lbWNweShkZXN0LCBtYy0+ZGF0YSArIG1jLT5wb3MsIG4pOworCQltYy0+cG9zICs9IG47CisJCWRlc3QgKz0gbjsKKwkJYWRkciArPSBuOworCX0KKwlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKK30KKwogc3RhdGljIGludCBwaW9faW5fZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCiAJCQkgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMsCiAJCQkgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgc2hvcnQgcG9ydCwKQEAgLTEzMzAsMTMgKzE0MTgsMTMgQEAKIAlnZXRfZGVzY3JpcHRvcl90YWJsZV9wdHIoY3R4dCwgb3BzLCBzZWxlY3RvciwgJmR0KTsKIAogCWlmIChkdC5zaXplIDwgaW5kZXggKiA4ICsgNykgewotCQlrdm1faW5qZWN0X2dwKGN0eHQtPnZjcHUsIHNlbGVjdG9yICYgMHhmZmZjKTsKKwkJZW11bGF0ZV9ncChjdHh0LCBzZWxlY3RvciAmIDB4ZmZmYyk7CiAJCXJldHVybiBYODZFTVVMX1BST1BBR0FURV9GQVVMVDsKIAl9CiAJYWRkciA9IGR0LmFkZHJlc3MgKyBpbmRleCAqIDg7CiAJcmV0ID0gb3BzLT5yZWFkX3N0ZChhZGRyLCBkZXNjLCBzaXplb2YgKmRlc2MsIGN0eHQtPnZjcHUsICAmZXJyKTsKIAlpZiAocmV0ID09IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUKQotCQlrdm1faW5qZWN0X3BhZ2VfZmF1bHQoY3R4dC0+dmNwdSwgYWRkciwgZXJyKTsKKwkJZW11bGF0ZV9wZihjdHh0LCBhZGRyLCBlcnIpOwogCiAgICAgICAgcmV0dXJuIHJldDsKIH0KQEAgLTEzNTUsMTQgKzE0NDMsMTQgQEAKIAlnZXRfZGVzY3JpcHRvcl90YWJsZV9wdHIoY3R4dCwgb3BzLCBzZWxlY3RvciwgJmR0KTsKIAogCWlmIChkdC5zaXplIDwgaW5kZXggKiA4ICsgNykgewotCQlrdm1faW5qZWN0X2dwKGN0eHQtPnZjcHUsIHNlbGVjdG9yICYgMHhmZmZjKTsKKwkJZW11bGF0ZV9ncChjdHh0LCBzZWxlY3RvciAmIDB4ZmZmYyk7CiAJCXJldHVybiBYODZFTVVMX1BST1BBR0FURV9GQVVMVDsKIAl9CiAKIAlhZGRyID0gZHQuYWRkcmVzcyArIGluZGV4ICogODsKIAlyZXQgPSBvcHMtPndyaXRlX3N0ZChhZGRyLCBkZXNjLCBzaXplb2YgKmRlc2MsIGN0eHQtPnZjcHUsICZlcnIpOwogCWlmIChyZXQgPT0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQpCi0JCWt2bV9pbmplY3RfcGFnZV9mYXVsdChjdHh0LT52Y3B1LCBhZGRyLCBlcnIpOworCQllbXVsYXRlX3BmKGN0eHQsIGFkZHIsIGVycik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTQ4MSwxMSArMTU2OSw3MCBAQAogCW9wcy0+c2V0X2NhY2hlZF9kZXNjcmlwdG9yKCZzZWdfZGVzYywgc2VnLCBjdHh0LT52Y3B1KTsKIAlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKIGV4Y2VwdGlvbjoKLQlrdm1fcXVldWVfZXhjZXB0aW9uX2UoY3R4dC0+dmNwdSwgZXJyX3ZlYywgZXJyX2NvZGUpOworCWVtdWxhdGVfZXhjZXB0aW9uKGN0eHQsIGVycl92ZWMsIGVycl9jb2RlLCB0cnVlKTsKIAlyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBlbXVsYXRlX3B1c2goc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCitzdGF0aWMgaW5saW5lIGludCB3cml0ZWJhY2soc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJCQkgICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzKQoreworCWludCByYzsKKwlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKKwl1MzIgZXJyOworCisJc3dpdGNoIChjLT5kc3QudHlwZSkgeworCWNhc2UgT1BfUkVHOgorCQkvKiBUaGUgNC1ieXRlIGNhc2UgKmlzKiBjb3JyZWN0OgorCQkgKiBpbiA2NC1iaXQgbW9kZSB3ZSB6ZXJvLWV4dGVuZC4KKwkJICovCisJCXN3aXRjaCAoYy0+ZHN0LmJ5dGVzKSB7CisJCWNhc2UgMToKKwkJCSoodTggKiljLT5kc3QucHRyID0gKHU4KWMtPmRzdC52YWw7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJKih1MTYgKiljLT5kc3QucHRyID0gKHUxNiljLT5kc3QudmFsOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCSpjLT5kc3QucHRyID0gKHUzMiljLT5kc3QudmFsOworCQkJYnJlYWs7CS8qIDY0YjogemVyby1leHQgKi8KKwkJY2FzZSA4OgorCQkJKmMtPmRzdC5wdHIgPSBjLT5kc3QudmFsOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBPUF9NRU06CisJCWlmIChjLT5sb2NrX3ByZWZpeCkKKwkJCXJjID0gb3BzLT5jbXB4Y2hnX2VtdWxhdGVkKAorCQkJCQkodW5zaWduZWQgbG9uZyljLT5kc3QucHRyLAorCQkJCQkmYy0+ZHN0Lm9yaWdfdmFsLAorCQkJCQkmYy0+ZHN0LnZhbCwKKwkJCQkJYy0+ZHN0LmJ5dGVzLAorCQkJCQkmZXJyLAorCQkJCQljdHh0LT52Y3B1KTsKKwkJZWxzZQorCQkJcmMgPSBvcHMtPndyaXRlX2VtdWxhdGVkKAorCQkJCQkodW5zaWduZWQgbG9uZyljLT5kc3QucHRyLAorCQkJCQkmYy0+ZHN0LnZhbCwKKwkJCQkJYy0+ZHN0LmJ5dGVzLAorCQkJCQkmZXJyLAorCQkJCQljdHh0LT52Y3B1KTsKKwkJaWYgKHJjID09IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUKQorCQkJZW11bGF0ZV9wZihjdHh0LAorCQkJCQkgICAgICAodW5zaWduZWQgbG9uZyljLT5kc3QucHRyLCBlcnIpOworCQlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKKwkJCXJldHVybiByYzsKKwkJYnJlYWs7CisJY2FzZSBPUF9OT05FOgorCQkvKiBubyB3cml0ZWJhY2sgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZW11bGF0ZV9wdXNoKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAorCQkJCXN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcykKIHsKIAlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKIApAQCAtMTQ5Myw3ICsxNjQwLDcgQEAKIAljLT5kc3QuYnl0ZXMgPSBjLT5vcF9ieXRlczsKIAljLT5kc3QudmFsID0gYy0+c3JjLnZhbDsKIAlyZWdpc3Rlcl9hZGRyZXNzX2luY3JlbWVudChjLCAmYy0+cmVnc1tWQ1BVX1JFR1NfUlNQXSwgLWMtPm9wX2J5dGVzKTsKLQljLT5kc3QucHRyID0gKHZvaWQgKikgcmVnaXN0ZXJfYWRkcmVzcyhjLCBzc19iYXNlKGN0eHQpLAorCWMtPmRzdC5wdHIgPSAodm9pZCAqKSByZWdpc3Rlcl9hZGRyZXNzKGMsIHNzX2Jhc2UoY3R4dCwgb3BzKSwKIAkJCQkJICAgICAgIGMtPnJlZ3NbVkNQVV9SRUdTX1JTUF0pOwogfQogCkBAIC0xNTA0LDkgKzE2NTEsOSBAQAogCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOwogCWludCByYzsKIAotCXJjID0gb3BzLT5yZWFkX2VtdWxhdGVkKHJlZ2lzdGVyX2FkZHJlc3MoYywgc3NfYmFzZShjdHh0KSwKLQkJCQkJCSBjLT5yZWdzW1ZDUFVfUkVHU19SU1BdKSwKLQkJCQlkZXN0LCBsZW4sIGN0eHQtPnZjcHUpOworCXJjID0gcmVhZF9lbXVsYXRlZChjdHh0LCBvcHMsIHJlZ2lzdGVyX2FkZHJlc3MoYywgc3NfYmFzZShjdHh0LCBvcHMpLAorCQkJCQkJICAgICAgIGMtPnJlZ3NbVkNQVV9SRUdTX1JTUF0pLAorCQkJICAgZGVzdCwgbGVuKTsKIAlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJcmV0dXJuIHJjOwogCkBAIC0xNTQxLDcgKzE2ODgsNyBAQAogCQlicmVhazsKIAljYXNlIFg4NkVNVUxfTU9ERV9WTTg2OgogCQlpZiAoaW9wbCA8IDMpIHsKLQkJCWt2bV9pbmplY3RfZ3AoY3R4dC0+dmNwdSwgMCk7CisJCQllbXVsYXRlX2dwKGN0eHQsIDApOwogCQkJcmV0dXJuIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwogCQl9CiAJCWNoYW5nZV9tYXNrIHw9IEVGTEdfSUY7CkBAIC0xNTU3LDE1ICsxNzA0LDE0IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgdm9pZCBlbXVsYXRlX3B1c2hfc3JlZyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IHNlZykKK3N0YXRpYyB2b2lkIGVtdWxhdGVfcHVzaF9zcmVnKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAorCQkJICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzLCBpbnQgc2VnKQogewogCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOwotCXN0cnVjdCBrdm1fc2VnbWVudCBzZWdtZW50OwogCi0Ja3ZtX3g4Nl9vcHMtPmdldF9zZWdtZW50KGN0eHQtPnZjcHUsICZzZWdtZW50LCBzZWcpOworCWMtPnNyYy52YWwgPSBvcHMtPmdldF9zZWdtZW50X3NlbGVjdG9yKHNlZywgY3R4dC0+dmNwdSk7CiAKLQljLT5zcmMudmFsID0gc2VnbWVudC5zZWxlY3RvcjsKLQllbXVsYXRlX3B1c2goY3R4dCk7CisJZW11bGF0ZV9wdXNoKGN0eHQsIG9wcyk7CiB9CiAKIHN0YXRpYyBpbnQgZW11bGF0ZV9wb3Bfc3JlZyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKQEAgLTE1ODMsMTkgKzE3MjksMzEgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyB2b2lkIGVtdWxhdGVfcHVzaGEoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCitzdGF0aWMgaW50IGVtdWxhdGVfcHVzaGEoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJCQkgIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcykKIHsKIAlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKIAl1bnNpZ25lZCBsb25nIG9sZF9lc3AgPSBjLT5yZWdzW1ZDUFVfUkVHU19SU1BdOworCWludCByYyA9IFg4NkVNVUxfQ09OVElOVUU7CiAJaW50IHJlZyA9IFZDUFVfUkVHU19SQVg7CiAKIAl3aGlsZSAocmVnIDw9IFZDUFVfUkVHU19SREkpIHsKIAkJKHJlZyA9PSBWQ1BVX1JFR1NfUlNQKSA/CiAJCShjLT5zcmMudmFsID0gb2xkX2VzcCkgOiAoYy0+c3JjLnZhbCA9IGMtPnJlZ3NbcmVnXSk7CiAKLQkJZW11bGF0ZV9wdXNoKGN0eHQpOworCQllbXVsYXRlX3B1c2goY3R4dCwgb3BzKTsKKworCQlyYyA9IHdyaXRlYmFjayhjdHh0LCBvcHMpOworCQlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKKwkJCXJldHVybiByYzsKKwogCQkrK3JlZzsKIAl9CisKKwkvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KKwljLT5kc3QudHlwZSA9IE9QX05PTkU7CisKKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgZW11bGF0ZV9wb3BhKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LApAQCAtMTY5NSwxNCArMTg1MywxNCBAQAogCQlvbGRfZWlwID0gYy0+ZWlwOwogCQljLT5laXAgPSBjLT5zcmMudmFsOwogCQljLT5zcmMudmFsID0gb2xkX2VpcDsKLQkJZW11bGF0ZV9wdXNoKGN0eHQpOworCQllbXVsYXRlX3B1c2goY3R4dCwgb3BzKTsKIAkJYnJlYWs7CiAJfQogCWNhc2UgNDogLyogam1wIGFicyAqLwogCQljLT5laXAgPSBjLT5zcmMudmFsOwogCQlicmVhazsKIAljYXNlIDY6CS8qIHB1c2ggKi8KLQkJZW11bGF0ZV9wdXNoKGN0eHQpOworCQllbXVsYXRlX3B1c2goY3R4dCwgb3BzKTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOwpAQCAtMTc0OCwxNDUgKzE5MDYsODIgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHdyaXRlYmFjayhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKLQkJCSAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMpCi17Ci0JaW50IHJjOwotCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOwotCi0Jc3dpdGNoIChjLT5kc3QudHlwZSkgewotCWNhc2UgT1BfUkVHOgotCQkvKiBUaGUgNC1ieXRlIGNhc2UgKmlzKiBjb3JyZWN0OgotCQkgKiBpbiA2NC1iaXQgbW9kZSB3ZSB6ZXJvLWV4dGVuZC4KLQkJICovCi0JCXN3aXRjaCAoYy0+ZHN0LmJ5dGVzKSB7Ci0JCWNhc2UgMToKLQkJCSoodTggKiljLT5kc3QucHRyID0gKHU4KWMtPmRzdC52YWw7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJKih1MTYgKiljLT5kc3QucHRyID0gKHUxNiljLT5kc3QudmFsOwotCQkJYnJlYWs7Ci0JCWNhc2UgNDoKLQkJCSpjLT5kc3QucHRyID0gKHUzMiljLT5kc3QudmFsOwotCQkJYnJlYWs7CS8qIDY0YjogemVyby1leHQgKi8KLQkJY2FzZSA4OgotCQkJKmMtPmRzdC5wdHIgPSBjLT5kc3QudmFsOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBPUF9NRU06Ci0JCWlmIChjLT5sb2NrX3ByZWZpeCkKLQkJCXJjID0gb3BzLT5jbXB4Y2hnX2VtdWxhdGVkKAotCQkJCQkodW5zaWduZWQgbG9uZyljLT5kc3QucHRyLAotCQkJCQkmYy0+ZHN0Lm9yaWdfdmFsLAotCQkJCQkmYy0+ZHN0LnZhbCwKLQkJCQkJYy0+ZHN0LmJ5dGVzLAotCQkJCQljdHh0LT52Y3B1KTsKLQkJZWxzZQotCQkJcmMgPSBvcHMtPndyaXRlX2VtdWxhdGVkKAotCQkJCQkodW5zaWduZWQgbG9uZyljLT5kc3QucHRyLAotCQkJCQkmYy0+ZHN0LnZhbCwKLQkJCQkJYy0+ZHN0LmJ5dGVzLAotCQkJCQljdHh0LT52Y3B1KTsKLQkJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCi0JCQlyZXR1cm4gcmM7Ci0JCWJyZWFrOwotCWNhc2UgT1BfTk9ORToKLQkJLyogbm8gd3JpdGViYWNrICovCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKLX0KLQotc3RhdGljIHZvaWQgdG9nZ2xlX2ludGVycnVwdGliaWxpdHkoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHUzMiBtYXNrKQotewotCXUzMiBpbnRfc2hhZG93ID0ga3ZtX3g4Nl9vcHMtPmdldF9pbnRlcnJ1cHRfc2hhZG93KGN0eHQtPnZjcHUsIG1hc2spOwotCS8qCi0JICogYW4gc3RpOyBzdGk7IHNlcXVlbmNlIG9ubHkgZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciB0aGUgZmlyc3QKLQkgKiBpbnN0cnVjdGlvbi4gU28sIGlmIHRoZSBsYXN0IGluc3RydWN0aW9uLCBiZSBpdCBlbXVsYXRlZCBvcgotCSAqIG5vdCwgbGVmdCB0aGUgc3lzdGVtIHdpdGggdGhlIElOVF9TVEkgZmxhZyBlbmFibGVkLCBpdAotCSAqIG1lYW5zIHRoYXQgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gaXMgYW4gc3RpLiBXZSBzaG91bGQgbm90Ci0JICogbGVhdmUgdGhlIGZsYWcgb24gaW4gdGhpcyBjYXNlLiBUaGUgc2FtZSBnb2VzIGZvciBtb3Ygc3MKLQkgKi8KLQlpZiAoIShpbnRfc2hhZG93ICYgbWFzaykpCi0JCWN0eHQtPmludGVycnVwdGliaWxpdHkgPSBtYXNrOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQKIHNldHVwX3N5c2NhbGxzX3NlZ21lbnRzKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAotCXN0cnVjdCBrdm1fc2VnbWVudCAqY3MsIHN0cnVjdCBrdm1fc2VnbWVudCAqc3MpCisJCQlzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMsIHN0cnVjdCBkZXNjX3N0cnVjdCAqY3MsCisJCQlzdHJ1Y3QgZGVzY19zdHJ1Y3QgKnNzKQogewotCW1lbXNldChjcywgMCwgc2l6ZW9mKHN0cnVjdCBrdm1fc2VnbWVudCkpOwotCWt2bV94ODZfb3BzLT5nZXRfc2VnbWVudChjdHh0LT52Y3B1LCBjcywgVkNQVV9TUkVHX0NTKTsKLQltZW1zZXQoc3MsIDAsIHNpemVvZihzdHJ1Y3Qga3ZtX3NlZ21lbnQpKTsKKwltZW1zZXQoY3MsIDAsIHNpemVvZihzdHJ1Y3QgZGVzY19zdHJ1Y3QpKTsKKwlvcHMtPmdldF9jYWNoZWRfZGVzY3JpcHRvcihjcywgVkNQVV9TUkVHX0NTLCBjdHh0LT52Y3B1KTsKKwltZW1zZXQoc3MsIDAsIHNpemVvZihzdHJ1Y3QgZGVzY19zdHJ1Y3QpKTsKIAogCWNzLT5sID0gMDsJCS8qIHdpbGwgYmUgYWRqdXN0ZWQgbGF0ZXIgKi8KLQljcy0+YmFzZSA9IDA7CQkvKiBmbGF0IHNlZ21lbnQgKi8KKwlzZXRfZGVzY19iYXNlKGNzLCAwKTsJLyogZmxhdCBzZWdtZW50ICovCiAJY3MtPmcgPSAxOwkJLyogNGtiIGdyYW51bGFyaXR5ICovCi0JY3MtPmxpbWl0ID0gMHhmZmZmZmZmZjsJLyogNEdCIGxpbWl0ICovCisJc2V0X2Rlc2NfbGltaXQoY3MsIDB4ZmZmZmYpOwkvKiA0R0IgbGltaXQgKi8KIAljcy0+dHlwZSA9IDB4MGI7CS8qIFJlYWQsIEV4ZWN1dGUsIEFjY2Vzc2VkICovCiAJY3MtPnMgPSAxOwogCWNzLT5kcGwgPSAwOwkJLyogd2lsbCBiZSBhZGp1c3RlZCBsYXRlciAqLwotCWNzLT5wcmVzZW50ID0gMTsKLQljcy0+ZGIgPSAxOworCWNzLT5wID0gMTsKKwljcy0+ZCA9IDE7CiAKLQlzcy0+dW51c2FibGUgPSAwOwotCXNzLT5iYXNlID0gMDsJCS8qIGZsYXQgc2VnbWVudCAqLwotCXNzLT5saW1pdCA9IDB4ZmZmZmZmZmY7CS8qIDRHQiBsaW1pdCAqLworCXNldF9kZXNjX2Jhc2Uoc3MsIDApOwkvKiBmbGF0IHNlZ21lbnQgKi8KKwlzZXRfZGVzY19saW1pdChzcywgMHhmZmZmZik7CS8qIDRHQiBsaW1pdCAqLwogCXNzLT5nID0gMTsJCS8qIDRrYiBncmFudWxhcml0eSAqLwogCXNzLT5zID0gMTsKIAlzcy0+dHlwZSA9IDB4MDM7CS8qIFJlYWQvV3JpdGUsIEFjY2Vzc2VkICovCi0Jc3MtPmRiID0gMTsJCS8qIDMyYml0IHN0YWNrIHNlZ21lbnQgKi8KKwlzcy0+ZCA9IDE7CQkvKiAzMmJpdCBzdGFjayBzZWdtZW50ICovCiAJc3MtPmRwbCA9IDA7Ci0Jc3MtPnByZXNlbnQgPSAxOworCXNzLT5wID0gMTsKIH0KIAogc3RhdGljIGludAotZW11bGF0ZV9zeXNjYWxsKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQorZW11bGF0ZV9zeXNjYWxsKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMpCiB7CiAJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7Ci0Jc3RydWN0IGt2bV9zZWdtZW50IGNzLCBzczsKKwlzdHJ1Y3QgZGVzY19zdHJ1Y3QgY3MsIHNzOwogCXU2NCBtc3JfZGF0YTsKKwl1MTYgY3Nfc2VsLCBzc19zZWw7CiAKIAkvKiBzeXNjYWxsIGlzIG5vdCBhdmFpbGFibGUgaW4gcmVhbCBtb2RlICovCiAJaWYgKGN0eHQtPm1vZGUgPT0gWDg2RU1VTF9NT0RFX1JFQUwgfHwKIAkgICAgY3R4dC0+bW9kZSA9PSBYODZFTVVMX01PREVfVk04NikgewotCQlrdm1fcXVldWVfZXhjZXB0aW9uKGN0eHQtPnZjcHUsIFVEX1ZFQ1RPUik7CisJCWVtdWxhdGVfdWQoY3R4dCk7CiAJCXJldHVybiBYODZFTVVMX1BST1BBR0FURV9GQVVMVDsKIAl9CiAKLQlzZXR1cF9zeXNjYWxsc19zZWdtZW50cyhjdHh0LCAmY3MsICZzcyk7CisJc2V0dXBfc3lzY2FsbHNfc2VnbWVudHMoY3R4dCwgb3BzLCAmY3MsICZzcyk7CiAKLQlrdm1feDg2X29wcy0+Z2V0X21zcihjdHh0LT52Y3B1LCBNU1JfU1RBUiwgJm1zcl9kYXRhKTsKKwlvcHMtPmdldF9tc3IoY3R4dC0+dmNwdSwgTVNSX1NUQVIsICZtc3JfZGF0YSk7CiAJbXNyX2RhdGEgPj49IDMyOwotCWNzLnNlbGVjdG9yID0gKHUxNikobXNyX2RhdGEgJiAweGZmZmMpOwotCXNzLnNlbGVjdG9yID0gKHUxNikobXNyX2RhdGEgKyA4KTsKKwljc19zZWwgPSAodTE2KShtc3JfZGF0YSAmIDB4ZmZmYyk7CisJc3Nfc2VsID0gKHUxNikobXNyX2RhdGEgKyA4KTsKIAogCWlmIChpc19sb25nX21vZGUoY3R4dC0+dmNwdSkpIHsKLQkJY3MuZGIgPSAwOworCQljcy5kID0gMDsKIAkJY3MubCA9IDE7CiAJfQotCWt2bV94ODZfb3BzLT5zZXRfc2VnbWVudChjdHh0LT52Y3B1LCAmY3MsIFZDUFVfU1JFR19DUyk7Ci0Ja3ZtX3g4Nl9vcHMtPnNldF9zZWdtZW50KGN0eHQtPnZjcHUsICZzcywgVkNQVV9TUkVHX1NTKTsKKwlvcHMtPnNldF9jYWNoZWRfZGVzY3JpcHRvcigmY3MsIFZDUFVfU1JFR19DUywgY3R4dC0+dmNwdSk7CisJb3BzLT5zZXRfc2VnbWVudF9zZWxlY3Rvcihjc19zZWwsIFZDUFVfU1JFR19DUywgY3R4dC0+dmNwdSk7CisJb3BzLT5zZXRfY2FjaGVkX2Rlc2NyaXB0b3IoJnNzLCBWQ1BVX1NSRUdfU1MsIGN0eHQtPnZjcHUpOworCW9wcy0+c2V0X3NlZ21lbnRfc2VsZWN0b3Ioc3Nfc2VsLCBWQ1BVX1NSRUdfU1MsIGN0eHQtPnZjcHUpOwogCiAJYy0+cmVnc1tWQ1BVX1JFR1NfUkNYXSA9IGMtPmVpcDsKIAlpZiAoaXNfbG9uZ19tb2RlKGN0eHQtPnZjcHUpKSB7CiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCQljLT5yZWdzW1ZDUFVfUkVHU19SMTFdID0gY3R4dC0+ZWZsYWdzICYgfkVGTEdfUkY7CiAKLQkJa3ZtX3g4Nl9vcHMtPmdldF9tc3IoY3R4dC0+dmNwdSwKLQkJCWN0eHQtPm1vZGUgPT0gWDg2RU1VTF9NT0RFX1BST1Q2NCA/Ci0JCQlNU1JfTFNUQVIgOiBNU1JfQ1NUQVIsICZtc3JfZGF0YSk7CisJCW9wcy0+Z2V0X21zcihjdHh0LT52Y3B1LAorCQkJICAgICBjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9QUk9UNjQgPworCQkJICAgICBNU1JfTFNUQVIgOiBNU1JfQ1NUQVIsICZtc3JfZGF0YSk7CiAJCWMtPmVpcCA9IG1zcl9kYXRhOwogCi0JCWt2bV94ODZfb3BzLT5nZXRfbXNyKGN0eHQtPnZjcHUsIE1TUl9TWVNDQUxMX01BU0ssICZtc3JfZGF0YSk7CisJCW9wcy0+Z2V0X21zcihjdHh0LT52Y3B1LCBNU1JfU1lTQ0FMTF9NQVNLLCAmbXNyX2RhdGEpOwogCQljdHh0LT5lZmxhZ3MgJj0gfihtc3JfZGF0YSB8IEVGTEdfUkYpOwogI2VuZGlmCiAJfSBlbHNlIHsKIAkJLyogbGVnYWN5IG1vZGUgKi8KLQkJa3ZtX3g4Nl9vcHMtPmdldF9tc3IoY3R4dC0+dmNwdSwgTVNSX1NUQVIsICZtc3JfZGF0YSk7CisJCW9wcy0+Z2V0X21zcihjdHh0LT52Y3B1LCBNU1JfU1RBUiwgJm1zcl9kYXRhKTsKIAkJYy0+ZWlwID0gKHUzMiltc3JfZGF0YTsKIAogCQljdHh0LT5lZmxhZ3MgJj0gfihFRkxHX1ZNIHwgRUZMR19JRiB8IEVGTEdfUkYpOwpAQCAtMTg5NiwxNSArMTk5MSwxNiBAQAogfQogCiBzdGF0aWMgaW50Ci1lbXVsYXRlX3N5c2VudGVyKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQorZW11bGF0ZV9zeXNlbnRlcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzKQogewogCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOwotCXN0cnVjdCBrdm1fc2VnbWVudCBjcywgc3M7CisJc3RydWN0IGRlc2Nfc3RydWN0IGNzLCBzczsKIAl1NjQgbXNyX2RhdGE7CisJdTE2IGNzX3NlbCwgc3Nfc2VsOwogCiAJLyogaW5qZWN0ICNHUCBpZiBpbiByZWFsIG1vZGUgKi8KIAlpZiAoY3R4dC0+bW9kZSA9PSBYODZFTVVMX01PREVfUkVBTCkgewotCQlrdm1faW5qZWN0X2dwKGN0eHQtPnZjcHUsIDApOworCQllbXVsYXRlX2dwKGN0eHQsIDApOwogCQlyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7CiAJfQogCkBAIC0xOTEyLDY3ICsyMDA4LDcwIEBACiAJKiBUaGVyZWZvcmUsIHdlIGluamVjdCBhbiAjVUQuCiAJKi8KIAlpZiAoY3R4dC0+bW9kZSA9PSBYODZFTVVMX01PREVfUFJPVDY0KSB7Ci0JCWt2bV9xdWV1ZV9leGNlcHRpb24oY3R4dC0+dmNwdSwgVURfVkVDVE9SKTsKKwkJZW11bGF0ZV91ZChjdHh0KTsKIAkJcmV0dXJuIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwogCX0KIAotCXNldHVwX3N5c2NhbGxzX3NlZ21lbnRzKGN0eHQsICZjcywgJnNzKTsKKwlzZXR1cF9zeXNjYWxsc19zZWdtZW50cyhjdHh0LCBvcHMsICZjcywgJnNzKTsKIAotCWt2bV94ODZfb3BzLT5nZXRfbXNyKGN0eHQtPnZjcHUsIE1TUl9JQTMyX1NZU0VOVEVSX0NTLCAmbXNyX2RhdGEpOworCW9wcy0+Z2V0X21zcihjdHh0LT52Y3B1LCBNU1JfSUEzMl9TWVNFTlRFUl9DUywgJm1zcl9kYXRhKTsKIAlzd2l0Y2ggKGN0eHQtPm1vZGUpIHsKIAljYXNlIFg4NkVNVUxfTU9ERV9QUk9UMzI6CiAJCWlmICgobXNyX2RhdGEgJiAweGZmZmMpID09IDB4MCkgewotCQkJa3ZtX2luamVjdF9ncChjdHh0LT52Y3B1LCAwKTsKKwkJCWVtdWxhdGVfZ3AoY3R4dCwgMCk7CiAJCQlyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBYODZFTVVMX01PREVfUFJPVDY0OgogCQlpZiAobXNyX2RhdGEgPT0gMHgwKSB7Ci0JCQlrdm1faW5qZWN0X2dwKGN0eHQtPnZjcHUsIDApOworCQkJZW11bGF0ZV9ncChjdHh0LCAwKTsKIAkJCXJldHVybiBYODZFTVVMX1BST1BBR0FURV9GQVVMVDsKIAkJfQogCQlicmVhazsKIAl9CiAKIAljdHh0LT5lZmxhZ3MgJj0gfihFRkxHX1ZNIHwgRUZMR19JRiB8IEVGTEdfUkYpOwotCWNzLnNlbGVjdG9yID0gKHUxNiltc3JfZGF0YTsKLQljcy5zZWxlY3RvciAmPSB+U0VMRUNUT1JfUlBMX01BU0s7Ci0Jc3Muc2VsZWN0b3IgPSBjcy5zZWxlY3RvciArIDg7Ci0Jc3Muc2VsZWN0b3IgJj0gflNFTEVDVE9SX1JQTF9NQVNLOworCWNzX3NlbCA9ICh1MTYpbXNyX2RhdGE7CisJY3Nfc2VsICY9IH5TRUxFQ1RPUl9SUExfTUFTSzsKKwlzc19zZWwgPSBjc19zZWwgKyA4OworCXNzX3NlbCAmPSB+U0VMRUNUT1JfUlBMX01BU0s7CiAJaWYgKGN0eHQtPm1vZGUgPT0gWDg2RU1VTF9NT0RFX1BST1Q2NAogCQl8fCBpc19sb25nX21vZGUoY3R4dC0+dmNwdSkpIHsKLQkJY3MuZGIgPSAwOworCQljcy5kID0gMDsKIAkJY3MubCA9IDE7CiAJfQogCi0Ja3ZtX3g4Nl9vcHMtPnNldF9zZWdtZW50KGN0eHQtPnZjcHUsICZjcywgVkNQVV9TUkVHX0NTKTsKLQlrdm1feDg2X29wcy0+c2V0X3NlZ21lbnQoY3R4dC0+dmNwdSwgJnNzLCBWQ1BVX1NSRUdfU1MpOworCW9wcy0+c2V0X2NhY2hlZF9kZXNjcmlwdG9yKCZjcywgVkNQVV9TUkVHX0NTLCBjdHh0LT52Y3B1KTsKKwlvcHMtPnNldF9zZWdtZW50X3NlbGVjdG9yKGNzX3NlbCwgVkNQVV9TUkVHX0NTLCBjdHh0LT52Y3B1KTsKKwlvcHMtPnNldF9jYWNoZWRfZGVzY3JpcHRvcigmc3MsIFZDUFVfU1JFR19TUywgY3R4dC0+dmNwdSk7CisJb3BzLT5zZXRfc2VnbWVudF9zZWxlY3Rvcihzc19zZWwsIFZDUFVfU1JFR19TUywgY3R4dC0+dmNwdSk7CiAKLQlrdm1feDg2X29wcy0+Z2V0X21zcihjdHh0LT52Y3B1LCBNU1JfSUEzMl9TWVNFTlRFUl9FSVAsICZtc3JfZGF0YSk7CisJb3BzLT5nZXRfbXNyKGN0eHQtPnZjcHUsIE1TUl9JQTMyX1NZU0VOVEVSX0VJUCwgJm1zcl9kYXRhKTsKIAljLT5laXAgPSBtc3JfZGF0YTsKIAotCWt2bV94ODZfb3BzLT5nZXRfbXNyKGN0eHQtPnZjcHUsIE1TUl9JQTMyX1NZU0VOVEVSX0VTUCwgJm1zcl9kYXRhKTsKKwlvcHMtPmdldF9tc3IoY3R4dC0+dmNwdSwgTVNSX0lBMzJfU1lTRU5URVJfRVNQLCAmbXNyX2RhdGEpOwogCWMtPnJlZ3NbVkNQVV9SRUdTX1JTUF0gPSBtc3JfZGF0YTsKIAogCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOwogfQogCiBzdGF0aWMgaW50Ci1lbXVsYXRlX3N5c2V4aXQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCitlbXVsYXRlX3N5c2V4aXQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcykKIHsKIAlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKLQlzdHJ1Y3Qga3ZtX3NlZ21lbnQgY3MsIHNzOworCXN0cnVjdCBkZXNjX3N0cnVjdCBjcywgc3M7CiAJdTY0IG1zcl9kYXRhOwogCWludCB1c2VybW9kZTsKKwl1MTYgY3Nfc2VsLCBzc19zZWw7CiAKIAkvKiBpbmplY3QgI0dQIGlmIGluIHJlYWwgbW9kZSBvciBWaXJ0dWFsIDgwODYgbW9kZSAqLwogCWlmIChjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9SRUFMIHx8CiAJICAgIGN0eHQtPm1vZGUgPT0gWDg2RU1VTF9NT0RFX1ZNODYpIHsKLQkJa3ZtX2luamVjdF9ncChjdHh0LT52Y3B1LCAwKTsKKwkJZW11bGF0ZV9ncChjdHh0LCAwKTsKIAkJcmV0dXJuIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwogCX0KIAotCXNldHVwX3N5c2NhbGxzX3NlZ21lbnRzKGN0eHQsICZjcywgJnNzKTsKKwlzZXR1cF9zeXNjYWxsc19zZWdtZW50cyhjdHh0LCBvcHMsICZjcywgJnNzKTsKIAogCWlmICgoYy0+cmV4X3ByZWZpeCAmIDB4OCkgIT0gMHgwKQogCQl1c2VybW9kZSA9IFg4NkVNVUxfTU9ERV9QUk9UNjQ7CkBAIC0xOTgxLDM1ICsyMDgwLDM3IEBACiAKIAljcy5kcGwgPSAzOwogCXNzLmRwbCA9IDM7Ci0Ja3ZtX3g4Nl9vcHMtPmdldF9tc3IoY3R4dC0+dmNwdSwgTVNSX0lBMzJfU1lTRU5URVJfQ1MsICZtc3JfZGF0YSk7CisJb3BzLT5nZXRfbXNyKGN0eHQtPnZjcHUsIE1TUl9JQTMyX1NZU0VOVEVSX0NTLCAmbXNyX2RhdGEpOwogCXN3aXRjaCAodXNlcm1vZGUpIHsKIAljYXNlIFg4NkVNVUxfTU9ERV9QUk9UMzI6Ci0JCWNzLnNlbGVjdG9yID0gKHUxNikobXNyX2RhdGEgKyAxNik7CisJCWNzX3NlbCA9ICh1MTYpKG1zcl9kYXRhICsgMTYpOwogCQlpZiAoKG1zcl9kYXRhICYgMHhmZmZjKSA9PSAweDApIHsKLQkJCWt2bV9pbmplY3RfZ3AoY3R4dC0+dmNwdSwgMCk7CisJCQllbXVsYXRlX2dwKGN0eHQsIDApOwogCQkJcmV0dXJuIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwogCQl9Ci0JCXNzLnNlbGVjdG9yID0gKHUxNikobXNyX2RhdGEgKyAyNCk7CisJCXNzX3NlbCA9ICh1MTYpKG1zcl9kYXRhICsgMjQpOwogCQlicmVhazsKIAljYXNlIFg4NkVNVUxfTU9ERV9QUk9UNjQ6Ci0JCWNzLnNlbGVjdG9yID0gKHUxNikobXNyX2RhdGEgKyAzMik7CisJCWNzX3NlbCA9ICh1MTYpKG1zcl9kYXRhICsgMzIpOwogCQlpZiAobXNyX2RhdGEgPT0gMHgwKSB7Ci0JCQlrdm1faW5qZWN0X2dwKGN0eHQtPnZjcHUsIDApOworCQkJZW11bGF0ZV9ncChjdHh0LCAwKTsKIAkJCXJldHVybiBYODZFTVVMX1BST1BBR0FURV9GQVVMVDsKIAkJfQotCQlzcy5zZWxlY3RvciA9IGNzLnNlbGVjdG9yICsgODsKLQkJY3MuZGIgPSAwOworCQlzc19zZWwgPSBjc19zZWwgKyA4OworCQljcy5kID0gMDsKIAkJY3MubCA9IDE7CiAJCWJyZWFrOwogCX0KLQljcy5zZWxlY3RvciB8PSBTRUxFQ1RPUl9SUExfTUFTSzsKLQlzcy5zZWxlY3RvciB8PSBTRUxFQ1RPUl9SUExfTUFTSzsKKwljc19zZWwgfD0gU0VMRUNUT1JfUlBMX01BU0s7CisJc3Nfc2VsIHw9IFNFTEVDVE9SX1JQTF9NQVNLOwogCi0Ja3ZtX3g4Nl9vcHMtPnNldF9zZWdtZW50KGN0eHQtPnZjcHUsICZjcywgVkNQVV9TUkVHX0NTKTsKLQlrdm1feDg2X29wcy0+c2V0X3NlZ21lbnQoY3R4dC0+dmNwdSwgJnNzLCBWQ1BVX1NSRUdfU1MpOworCW9wcy0+c2V0X2NhY2hlZF9kZXNjcmlwdG9yKCZjcywgVkNQVV9TUkVHX0NTLCBjdHh0LT52Y3B1KTsKKwlvcHMtPnNldF9zZWdtZW50X3NlbGVjdG9yKGNzX3NlbCwgVkNQVV9TUkVHX0NTLCBjdHh0LT52Y3B1KTsKKwlvcHMtPnNldF9jYWNoZWRfZGVzY3JpcHRvcigmc3MsIFZDUFVfU1JFR19TUywgY3R4dC0+dmNwdSk7CisJb3BzLT5zZXRfc2VnbWVudF9zZWxlY3Rvcihzc19zZWwsIFZDUFVfU1JFR19TUywgY3R4dC0+dmNwdSk7CiAKLQljLT5laXAgPSBjdHh0LT52Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JEWF07Ci0JYy0+cmVnc1tWQ1BVX1JFR1NfUlNQXSA9IGN0eHQtPnZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkNYXTsKKwljLT5laXAgPSBjLT5yZWdzW1ZDUFVfUkVHU19SRFhdOworCWMtPnJlZ3NbVkNQVV9SRUdTX1JTUF0gPSBjLT5yZWdzW1ZDUFVfUkVHU19SQ1hdOwogCiAJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7CiB9CkBAIC0yMDMwLDI1ICsyMTMxLDI1IEBACiAJCQkJCSAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMsCiAJCQkJCSAgICB1MTYgcG9ydCwgdTE2IGxlbikKIHsKLQlzdHJ1Y3Qga3ZtX3NlZ21lbnQgdHJfc2VnOworCXN0cnVjdCBkZXNjX3N0cnVjdCB0cl9zZWc7CiAJaW50IHI7CiAJdTE2IGlvX2JpdG1hcF9wdHI7CiAJdTggcGVybSwgYml0X2lkeCA9IHBvcnQgJiAweDc7CiAJdW5zaWduZWQgbWFzayA9ICgxIDw8IGxlbikgLSAxOwogCi0Ja3ZtX2dldF9zZWdtZW50KGN0eHQtPnZjcHUsICZ0cl9zZWcsIFZDUFVfU1JFR19UUik7Ci0JaWYgKHRyX3NlZy51bnVzYWJsZSkKKwlvcHMtPmdldF9jYWNoZWRfZGVzY3JpcHRvcigmdHJfc2VnLCBWQ1BVX1NSRUdfVFIsIGN0eHQtPnZjcHUpOworCWlmICghdHJfc2VnLnApCiAJCXJldHVybiBmYWxzZTsKLQlpZiAodHJfc2VnLmxpbWl0IDwgMTAzKQorCWlmIChkZXNjX2xpbWl0X3NjYWxlZCgmdHJfc2VnKSA8IDEwMykKIAkJcmV0dXJuIGZhbHNlOwotCXIgPSBvcHMtPnJlYWRfc3RkKHRyX3NlZy5iYXNlICsgMTAyLCAmaW9fYml0bWFwX3B0ciwgMiwgY3R4dC0+dmNwdSwKLQkJCSAgTlVMTCk7CisJciA9IG9wcy0+cmVhZF9zdGQoZ2V0X2Rlc2NfYmFzZSgmdHJfc2VnKSArIDEwMiwgJmlvX2JpdG1hcF9wdHIsIDIsCisJCQkgIGN0eHQtPnZjcHUsIE5VTEwpOwogCWlmIChyICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCXJldHVybiBmYWxzZTsKLQlpZiAoaW9fYml0bWFwX3B0ciArIHBvcnQvOCA+IHRyX3NlZy5saW1pdCkKKwlpZiAoaW9fYml0bWFwX3B0ciArIHBvcnQvOCA+IGRlc2NfbGltaXRfc2NhbGVkKCZ0cl9zZWcpKQogCQlyZXR1cm4gZmFsc2U7Ci0JciA9IG9wcy0+cmVhZF9zdGQodHJfc2VnLmJhc2UgKyBpb19iaXRtYXBfcHRyICsgcG9ydC84LCAmcGVybSwgMSwKLQkJCSAgY3R4dC0+dmNwdSwgTlVMTCk7CisJciA9IG9wcy0+cmVhZF9zdGQoZ2V0X2Rlc2NfYmFzZSgmdHJfc2VnKSArIGlvX2JpdG1hcF9wdHIgKyBwb3J0LzgsCisJCQkgICZwZXJtLCAxLCBjdHh0LT52Y3B1LCBOVUxMKTsKIAlpZiAociAhPSBYODZFTVVMX0NPTlRJTlVFKQogCQlyZXR1cm4gZmFsc2U7CiAJaWYgKChwZXJtID4+IGJpdF9pZHgpICYgbWFzaykKQEAgLTIwNjYsMTcgKzIxNjcsNiBAQAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdTMyIGdldF9jYWNoZWRfZGVzY3JpcHRvcl9iYXNlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAotCQkJCSAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcywKLQkJCQkgICAgICBpbnQgc2VnKQotewotCXN0cnVjdCBkZXNjX3N0cnVjdCBkZXNjOwotCWlmIChvcHMtPmdldF9jYWNoZWRfZGVzY3JpcHRvcigmZGVzYywgc2VnLCBjdHh0LT52Y3B1KSkKLQkJcmV0dXJuIGdldF9kZXNjX2Jhc2UoJmRlc2MpOwotCWVsc2UKLQkJcmV0dXJuIH4wOwotfQotCiBzdGF0aWMgdm9pZCBzYXZlX3N0YXRlX3RvX3RzczE2KHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAogCQkJCXN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcywKIAkJCQlzdHJ1Y3QgdHNzX3NlZ21lbnRfMTYgKnRzcykKQEAgLTIxNjUsNyArMjI1NSw3IEBACiAJCQkgICAgJmVycik7CiAJaWYgKHJldCA9PSBYODZFTVVMX1BST1BBR0FURV9GQVVMVCkgewogCQkvKiBGSVhNRTogbmVlZCB0byBwcm92aWRlIHByZWNpc2UgZmF1bHQgYWRkcmVzcyAqLwotCQlrdm1faW5qZWN0X3BhZ2VfZmF1bHQoY3R4dC0+dmNwdSwgb2xkX3Rzc19iYXNlLCBlcnIpOworCQllbXVsYXRlX3BmKGN0eHQsIG9sZF90c3NfYmFzZSwgZXJyKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTIxNzUsNyArMjI2NSw3IEBACiAJCQkgICAgICZlcnIpOwogCWlmIChyZXQgPT0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQpIHsKIAkJLyogRklYTUU6IG5lZWQgdG8gcHJvdmlkZSBwcmVjaXNlIGZhdWx0IGFkZHJlc3MgKi8KLQkJa3ZtX2luamVjdF9wYWdlX2ZhdWx0KGN0eHQtPnZjcHUsIG9sZF90c3NfYmFzZSwgZXJyKTsKKwkJZW11bGF0ZV9wZihjdHh0LCBvbGRfdHNzX2Jhc2UsIGVycik7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0yMTgzLDcgKzIyNzMsNyBAQAogCQkJICAgICZlcnIpOwogCWlmIChyZXQgPT0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQpIHsKIAkJLyogRklYTUU6IG5lZWQgdG8gcHJvdmlkZSBwcmVjaXNlIGZhdWx0IGFkZHJlc3MgKi8KLQkJa3ZtX2luamVjdF9wYWdlX2ZhdWx0KGN0eHQtPnZjcHUsIG5ld190c3NfYmFzZSwgZXJyKTsKKwkJZW11bGF0ZV9wZihjdHh0LCBuZXdfdHNzX2Jhc2UsIGVycik7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0yMTk2LDcgKzIyODYsNyBAQAogCQkJCSAgICAgY3R4dC0+dmNwdSwgJmVycik7CiAJCWlmIChyZXQgPT0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQpIHsKIAkJCS8qIEZJWE1FOiBuZWVkIHRvIHByb3ZpZGUgcHJlY2lzZSBmYXVsdCBhZGRyZXNzICovCi0JCQlrdm1faW5qZWN0X3BhZ2VfZmF1bHQoY3R4dC0+dmNwdSwgbmV3X3Rzc19iYXNlLCBlcnIpOworCQkJZW11bGF0ZV9wZihjdHh0LCBuZXdfdHNzX2Jhc2UsIGVycik7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQpAQCAtMjIzOCw3ICsyMzI4LDEwIEBACiAJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CiAJaW50IHJldDsKIAotCW9wcy0+c2V0X2NyKDMsIHRzcy0+Y3IzLCBjdHh0LT52Y3B1KTsKKwlpZiAob3BzLT5zZXRfY3IoMywgdHNzLT5jcjMsIGN0eHQtPnZjcHUpKSB7CisJCWVtdWxhdGVfZ3AoY3R4dCwgMCk7CisJCXJldHVybiBYODZFTVVMX1BST1BBR0FURV9GQVVMVDsKKwl9CiAJYy0+ZWlwID0gdHNzLT5laXA7CiAJY3R4dC0+ZWZsYWdzID0gdHNzLT5lZmxhZ3MgfCAyOwogCWMtPnJlZ3NbVkNQVV9SRUdTX1JBWF0gPSB0c3MtPmVheDsKQEAgLTIzMDQsNyArMjM5Nyw3IEBACiAJCQkgICAgJmVycik7CiAJaWYgKHJldCA9PSBYODZFTVVMX1BST1BBR0FURV9GQVVMVCkgewogCQkvKiBGSVhNRTogbmVlZCB0byBwcm92aWRlIHByZWNpc2UgZmF1bHQgYWRkcmVzcyAqLwotCQlrdm1faW5qZWN0X3BhZ2VfZmF1bHQoY3R4dC0+dmNwdSwgb2xkX3Rzc19iYXNlLCBlcnIpOworCQllbXVsYXRlX3BmKGN0eHQsIG9sZF90c3NfYmFzZSwgZXJyKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTIzMTQsNyArMjQwNyw3IEBACiAJCQkgICAgICZlcnIpOwogCWlmIChyZXQgPT0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQpIHsKIAkJLyogRklYTUU6IG5lZWQgdG8gcHJvdmlkZSBwcmVjaXNlIGZhdWx0IGFkZHJlc3MgKi8KLQkJa3ZtX2luamVjdF9wYWdlX2ZhdWx0KGN0eHQtPnZjcHUsIG9sZF90c3NfYmFzZSwgZXJyKTsKKwkJZW11bGF0ZV9wZihjdHh0LCBvbGRfdHNzX2Jhc2UsIGVycik7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0yMzIyLDcgKzI0MTUsNyBAQAogCQkJICAgICZlcnIpOwogCWlmIChyZXQgPT0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQpIHsKIAkJLyogRklYTUU6IG5lZWQgdG8gcHJvdmlkZSBwcmVjaXNlIGZhdWx0IGFkZHJlc3MgKi8KLQkJa3ZtX2luamVjdF9wYWdlX2ZhdWx0KGN0eHQtPnZjcHUsIG5ld190c3NfYmFzZSwgZXJyKTsKKwkJZW11bGF0ZV9wZihjdHh0LCBuZXdfdHNzX2Jhc2UsIGVycik7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0yMzM1LDcgKzI0MjgsNyBAQAogCQkJCSAgICAgY3R4dC0+dmNwdSwgJmVycik7CiAJCWlmIChyZXQgPT0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQpIHsKIAkJCS8qIEZJWE1FOiBuZWVkIHRvIHByb3ZpZGUgcHJlY2lzZSBmYXVsdCBhZGRyZXNzICovCi0JCQlrdm1faW5qZWN0X3BhZ2VfZmF1bHQoY3R4dC0+dmNwdSwgbmV3X3Rzc19iYXNlLCBlcnIpOworCQkJZW11bGF0ZV9wZihjdHh0LCBuZXdfdHNzX2Jhc2UsIGVycik7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQpAQCAtMjM1Miw3ICsyNDQ1LDcgQEAKIAlpbnQgcmV0OwogCXUxNiBvbGRfdHNzX3NlbCA9IG9wcy0+Z2V0X3NlZ21lbnRfc2VsZWN0b3IoVkNQVV9TUkVHX1RSLCBjdHh0LT52Y3B1KTsKIAl1bG9uZyBvbGRfdHNzX2Jhc2UgPQotCQlnZXRfY2FjaGVkX2Rlc2NyaXB0b3JfYmFzZShjdHh0LCBvcHMsIFZDUFVfU1JFR19UUik7CisJCW9wcy0+Z2V0X2NhY2hlZF9zZWdtZW50X2Jhc2UoVkNQVV9TUkVHX1RSLCBjdHh0LT52Y3B1KTsKIAl1MzIgZGVzY19saW1pdDsKIAogCS8qIEZJWE1FOiBvbGRfdHNzX2Jhc2UgPT0gfjAgPyAqLwpAQCAtMjM2OSw3ICsyNDYyLDcgQEAKIAlpZiAocmVhc29uICE9IFRBU0tfU1dJVENIX0lSRVQpIHsKIAkJaWYgKCh0c3Nfc2VsZWN0b3IgJiAzKSA+IG5leHRfdHNzX2Rlc2MuZHBsIHx8CiAJCSAgICBvcHMtPmNwbChjdHh0LT52Y3B1KSA+IG5leHRfdHNzX2Rlc2MuZHBsKSB7Ci0JCQlrdm1faW5qZWN0X2dwKGN0eHQtPnZjcHUsIDApOworCQkJZW11bGF0ZV9ncChjdHh0LCAwKTsKIAkJCXJldHVybiBYODZFTVVMX1BST1BBR0FURV9GQVVMVDsKIAkJfQogCX0KQEAgLTIzNzgsOCArMjQ3MSw3IEBACiAJaWYgKCFuZXh0X3Rzc19kZXNjLnAgfHwKIAkgICAgKChkZXNjX2xpbWl0IDwgMHg2NyAmJiAobmV4dF90c3NfZGVzYy50eXBlICYgOCkpIHx8CiAJICAgICBkZXNjX2xpbWl0IDwgMHgyYikpIHsKLQkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbl9lKGN0eHQtPnZjcHUsIFRTX1ZFQ1RPUiwKLQkJCQkgICAgICB0c3Nfc2VsZWN0b3IgJiAweGZmZmMpOworCQllbXVsYXRlX3RzKGN0eHQsIHRzc19zZWxlY3RvciAmIDB4ZmZmYyk7CiAJCXJldHVybiBYODZFTVVMX1BST1BBR0FURV9GQVVMVDsKIAl9CiAKQEAgLTI0MjUsNyArMjUxNyw3IEBACiAJCWMtPm9wX2J5dGVzID0gYy0+YWRfYnl0ZXMgPSAobmV4dF90c3NfZGVzYy50eXBlICYgOCkgPyA0IDogMjsKIAkJYy0+bG9ja19wcmVmaXggPSAwOwogCQljLT5zcmMudmFsID0gKHVuc2lnbmVkIGxvbmcpIGVycm9yX2NvZGU7Ci0JCWVtdWxhdGVfcHVzaChjdHh0KTsKKwkJZW11bGF0ZV9wdXNoKGN0eHQsIG9wcyk7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTI0MzksMTggKzI1MzEsMTYgQEAKIAlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKIAlpbnQgcmM7CiAKLQltZW1zZXQoYywgMCwgc2l6ZW9mKHN0cnVjdCBkZWNvZGVfY2FjaGUpKTsKIAljLT5laXAgPSBjdHh0LT5laXA7Ci0JbWVtY3B5KGMtPnJlZ3MsIGN0eHQtPnZjcHUtPmFyY2gucmVncywgc2l6ZW9mIGMtPnJlZ3MpOwogCWMtPmRzdC50eXBlID0gT1BfTk9ORTsKIAogCXJjID0gZW11bGF0b3JfZG9fdGFza19zd2l0Y2goY3R4dCwgb3BzLCB0c3Nfc2VsZWN0b3IsIHJlYXNvbiwKIAkJCQkgICAgIGhhc19lcnJvcl9jb2RlLCBlcnJvcl9jb2RlKTsKIAogCWlmIChyYyA9PSBYODZFTVVMX0NPTlRJTlVFKSB7Ci0JCW1lbWNweShjdHh0LT52Y3B1LT5hcmNoLnJlZ3MsIGMtPnJlZ3MsIHNpemVvZiBjLT5yZWdzKTsKLQkJa3ZtX3JpcF93cml0ZShjdHh0LT52Y3B1LCBjLT5laXApOwogCQlyYyA9IHdyaXRlYmFjayhjdHh0LCBvcHMpOworCQlpZiAocmMgPT0gWDg2RU1VTF9DT05USU5VRSkKKwkJCWN0eHQtPmVpcCA9IGMtPmVpcDsKIAl9CiAKIAlyZXR1cm4gKHJjID09IFg4NkVNVUxfVU5IQU5ETEVBQkxFKSA/IC0xIDogMDsKQEAgLTI0NzQsMjkgKzI1NjQsMjIgQEAKIAlpbnQgcmMgPSBYODZFTVVMX0NPTlRJTlVFOwogCWludCBzYXZlZF9kc3RfdHlwZSA9IGMtPmRzdC50eXBlOwogCi0JY3R4dC0+aW50ZXJydXB0aWJpbGl0eSA9IDA7Ci0KLQkvKiBTaGFkb3cgY29weSBvZiByZWdpc3RlciBzdGF0ZS4gQ29tbWl0dGVkIG9uIHN1Y2Nlc3NmdWwgZW11bGF0aW9uLgotCSAqIE5PVEU6IHdlIGNhbiBjb3B5IHRoZW0gZnJvbSB2Y3B1IGFzIHg4Nl9kZWNvZGVfaW5zbigpIGRvZXNuJ3QKLQkgKiBtb2RpZnkgdGhlbS4KLQkgKi8KLQotCW1lbWNweShjLT5yZWdzLCBjdHh0LT52Y3B1LT5hcmNoLnJlZ3MsIHNpemVvZiBjLT5yZWdzKTsKKwljdHh0LT5kZWNvZGUubWVtX3JlYWQucG9zID0gMDsKIAogCWlmIChjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9QUk9UNjQgJiYgKGMtPmQgJiBObzY0KSkgewotCQlrdm1fcXVldWVfZXhjZXB0aW9uKGN0eHQtPnZjcHUsIFVEX1ZFQ1RPUik7CisJCWVtdWxhdGVfdWQoY3R4dCk7CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAkvKiBMT0NLIHByZWZpeCBpcyBhbGxvd2VkIG9ubHkgd2l0aCBzb21lIGluc3RydWN0aW9ucyAqLwogCWlmIChjLT5sb2NrX3ByZWZpeCAmJiAoIShjLT5kICYgTG9jaykgfHwgYy0+ZHN0LnR5cGUgIT0gT1BfTUVNKSkgewotCQlrdm1fcXVldWVfZXhjZXB0aW9uKGN0eHQtPnZjcHUsIFVEX1ZFQ1RPUik7CisJCWVtdWxhdGVfdWQoY3R4dCk7CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAkvKiBQcml2aWxlZ2VkIGluc3RydWN0aW9uIGNhbiBiZSBleGVjdXRlZCBvbmx5IGluIENQTD0wICovCiAJaWYgKChjLT5kICYgUHJpdikgJiYgb3BzLT5jcGwoY3R4dC0+dmNwdSkpIHsKLQkJa3ZtX2luamVjdF9ncChjdHh0LT52Y3B1LCAwKTsKKwkJZW11bGF0ZV9ncChjdHh0LCAwKTsKIAkJZ290byBkb25lOwogCX0KIApAQCAtMjUwNiw3ICsyNTg5LDcgQEAKIAkJaWYgKGFkZHJlc3NfbWFzayhjLCBjLT5yZWdzW1ZDUFVfUkVHU19SQ1hdKSA9PSAwKSB7CiAJCXN0cmluZ19kb25lOgogCQkJY3R4dC0+cmVzdGFydCA9IGZhbHNlOwotCQkJa3ZtX3JpcF93cml0ZShjdHh0LT52Y3B1LCBjLT5laXApOworCQkJY3R4dC0+ZWlwID0gYy0+ZWlwOwogCQkJZ290byBkb25lOwogCQl9CiAJCS8qIFRoZSBzZWNvbmQgdGVybWluYXRpb24gY29uZGl0aW9uIG9ubHkgYXBwbGllcyBmb3IgUkVQRQpAQCAtMjUyOSwyMCArMjYxMiwxNiBAQAogCX0KIAogCWlmIChjLT5zcmMudHlwZSA9PSBPUF9NRU0pIHsKLQkJcmMgPSBvcHMtPnJlYWRfZW11bGF0ZWQoKHVuc2lnbmVkIGxvbmcpYy0+c3JjLnB0ciwKLQkJCQkJJmMtPnNyYy52YWwsCi0JCQkJCWMtPnNyYy5ieXRlcywKLQkJCQkJY3R4dC0+dmNwdSk7CisJCXJjID0gcmVhZF9lbXVsYXRlZChjdHh0LCBvcHMsICh1bnNpZ25lZCBsb25nKWMtPnNyYy5wdHIsCisJCQkJCWMtPnNyYy52YWxwdHIsIGMtPnNyYy5ieXRlcyk7CiAJCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQogCQkJZ290byBkb25lOwogCQljLT5zcmMub3JpZ192YWwgPSBjLT5zcmMudmFsOwogCX0KIAogCWlmIChjLT5zcmMyLnR5cGUgPT0gT1BfTUVNKSB7Ci0JCXJjID0gb3BzLT5yZWFkX2VtdWxhdGVkKCh1bnNpZ25lZCBsb25nKWMtPnNyYzIucHRyLAotCQkJCQkmYy0+c3JjMi52YWwsCi0JCQkJCWMtPnNyYzIuYnl0ZXMsCi0JCQkJCWN0eHQtPnZjcHUpOworCQlyYyA9IHJlYWRfZW11bGF0ZWQoY3R4dCwgb3BzLCAodW5zaWduZWQgbG9uZyljLT5zcmMyLnB0ciwKKwkJCQkJJmMtPnNyYzIudmFsLCBjLT5zcmMyLmJ5dGVzKTsKIAkJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCQlnb3RvIGRvbmU7CiAJfQpAQCAtMjU1Myw4ICsyNjMyLDggQEAKIAogCWlmICgoYy0+ZHN0LnR5cGUgPT0gT1BfTUVNKSAmJiAhKGMtPmQgJiBNb3YpKSB7CiAJCS8qIG9wdGltaXNhdGlvbiAtIGF2b2lkIHNsb3cgZW11bGF0ZWQgcmVhZCBpZiBNb3YgKi8KLQkJcmMgPSBvcHMtPnJlYWRfZW11bGF0ZWQoKHVuc2lnbmVkIGxvbmcpYy0+ZHN0LnB0ciwgJmMtPmRzdC52YWwsCi0JCQkJCWMtPmRzdC5ieXRlcywgY3R4dC0+dmNwdSk7CisJCXJjID0gcmVhZF9lbXVsYXRlZChjdHh0LCBvcHMsICh1bnNpZ25lZCBsb25nKWMtPmRzdC5wdHIsCisJCQkJICAgJmMtPmRzdC52YWwsIGMtPmRzdC5ieXRlcyk7CiAJCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQogCQkJZ290byBkb25lOwogCX0KQEAgLTI1NzEsNyArMjY1MCw3IEBACiAJCWVtdWxhdGVfMm9wX1NyY1YoImFkZCIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwogCQlicmVhazsKIAljYXNlIDB4MDY6CQkvKiBwdXNoIGVzICovCi0JCWVtdWxhdGVfcHVzaF9zcmVnKGN0eHQsIFZDUFVfU1JFR19FUyk7CisJCWVtdWxhdGVfcHVzaF9zcmVnKGN0eHQsIG9wcywgVkNQVV9TUkVHX0VTKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA3OgkJLyogcG9wIGVzICovCiAJCXJjID0gZW11bGF0ZV9wb3Bfc3JlZyhjdHh0LCBvcHMsIFZDUFVfU1JFR19FUyk7CkBAIC0yNTgzLDE0ICsyNjYyLDE0IEBACiAJCWVtdWxhdGVfMm9wX1NyY1YoIm9yIiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CiAJCWJyZWFrOwogCWNhc2UgMHgwZToJCS8qIHB1c2ggY3MgKi8KLQkJZW11bGF0ZV9wdXNoX3NyZWcoY3R4dCwgVkNQVV9TUkVHX0NTKTsKKwkJZW11bGF0ZV9wdXNoX3NyZWcoY3R4dCwgb3BzLCBWQ1BVX1NSRUdfQ1MpOwogCQlicmVhazsKIAljYXNlIDB4MTAgLi4uIDB4MTU6CiAJICAgICAgYWRjOgkJLyogYWRjICovCiAJCWVtdWxhdGVfMm9wX1NyY1YoImFkYyIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwogCQlicmVhazsKIAljYXNlIDB4MTY6CQkvKiBwdXNoIHNzICovCi0JCWVtdWxhdGVfcHVzaF9zcmVnKGN0eHQsIFZDUFVfU1JFR19TUyk7CisJCWVtdWxhdGVfcHVzaF9zcmVnKGN0eHQsIG9wcywgVkNQVV9TUkVHX1NTKTsKIAkJYnJlYWs7CiAJY2FzZSAweDE3OgkJLyogcG9wIHNzICovCiAJCXJjID0gZW11bGF0ZV9wb3Bfc3JlZyhjdHh0LCBvcHMsIFZDUFVfU1JFR19TUyk7CkBAIC0yNjAyLDcgKzI2ODEsNyBAQAogCQllbXVsYXRlXzJvcF9TcmNWKCJzYmIiLCBjLT5zcmMsIGMtPmRzdCwgY3R4dC0+ZWZsYWdzKTsKIAkJYnJlYWs7CiAJY2FzZSAweDFlOgkJLyogcHVzaCBkcyAqLwotCQllbXVsYXRlX3B1c2hfc3JlZyhjdHh0LCBWQ1BVX1NSRUdfRFMpOworCQllbXVsYXRlX3B1c2hfc3JlZyhjdHh0LCBvcHMsIFZDUFVfU1JFR19EUyk7CiAJCWJyZWFrOwogCWNhc2UgMHgxZjoJCS8qIHBvcCBkcyAqLwogCQlyYyA9IGVtdWxhdGVfcG9wX3NyZWcoY3R4dCwgb3BzLCBWQ1BVX1NSRUdfRFMpOwpAQCAtMjYzMiw3ICsyNzExLDcgQEAKIAkJZW11bGF0ZV8xb3AoImRlYyIsIGMtPmRzdCwgY3R4dC0+ZWZsYWdzKTsKIAkJYnJlYWs7CiAJY2FzZSAweDUwIC4uLiAweDU3OiAgLyogcHVzaCByZWcgKi8KLQkJZW11bGF0ZV9wdXNoKGN0eHQpOworCQllbXVsYXRlX3B1c2goY3R4dCwgb3BzKTsKIAkJYnJlYWs7CiAJY2FzZSAweDU4IC4uLiAweDVmOiAvKiBwb3AgcmVnICovCiAJcG9wX2luc3RydWN0aW9uOgpAQCAtMjY0MSw3ICsyNzIwLDkgQEAKIAkJCWdvdG8gZG9uZTsKIAkJYnJlYWs7CiAJY2FzZSAweDYwOgkvKiBwdXNoYSAqLwotCQllbXVsYXRlX3B1c2hhKGN0eHQpOworCQlyYyA9IGVtdWxhdGVfcHVzaGEoY3R4dCwgb3BzKTsKKwkJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCisJCQlnb3RvIGRvbmU7CiAJCWJyZWFrOwogCWNhc2UgMHg2MToJLyogcG9wYSAqLwogCQlyYyA9IGVtdWxhdGVfcG9wYShjdHh0LCBvcHMpOwpAQCAtMjY1NSwxNCArMjczNiwxNCBAQAogCQlicmVhazsKIAljYXNlIDB4Njg6IC8qIHB1c2ggaW1tICovCiAJY2FzZSAweDZhOiAvKiBwdXNoIGltbTggKi8KLQkJZW11bGF0ZV9wdXNoKGN0eHQpOworCQllbXVsYXRlX3B1c2goY3R4dCwgb3BzKTsKIAkJYnJlYWs7CiAJY2FzZSAweDZjOgkJLyogaW5zYiAqLwogCWNhc2UgMHg2ZDoJCS8qIGluc3cvaW5zZCAqLwogCQljLT5kc3QuYnl0ZXMgPSBtaW4oYy0+ZHN0LmJ5dGVzLCA0dSk7CiAJCWlmICghZW11bGF0b3JfaW9fcGVybWl0ZWQoY3R4dCwgb3BzLCBjLT5yZWdzW1ZDUFVfUkVHU19SRFhdLAogCQkJCQkgIGMtPmRzdC5ieXRlcykpIHsKLQkJCWt2bV9pbmplY3RfZ3AoY3R4dC0+dmNwdSwgMCk7CisJCQllbXVsYXRlX2dwKGN0eHQsIDApOwogCQkJZ290byBkb25lOwogCQl9CiAJCWlmICghcGlvX2luX2VtdWxhdGVkKGN0eHQsIG9wcywgYy0+ZHN0LmJ5dGVzLApAQCAtMjY3NCw3ICsyNzU1LDcgQEAKIAkJYy0+c3JjLmJ5dGVzID0gbWluKGMtPnNyYy5ieXRlcywgNHUpOwogCQlpZiAoIWVtdWxhdG9yX2lvX3Blcm1pdGVkKGN0eHQsIG9wcywgYy0+cmVnc1tWQ1BVX1JFR1NfUkRYXSwKIAkJCQkJICBjLT5zcmMuYnl0ZXMpKSB7Ci0JCQlrdm1faW5qZWN0X2dwKGN0eHQtPnZjcHUsIDApOworCQkJZW11bGF0ZV9ncChjdHh0LCAwKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCQlvcHMtPnBpb19vdXRfZW11bGF0ZWQoYy0+c3JjLmJ5dGVzLCBjLT5yZWdzW1ZDUFVfUkVHU19SRFhdLApAQCAtMjcwNyw2ICsyNzg4LDcgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIDB4ODQgLi4uIDB4ODU6CisJdGVzdDoKIAkJZW11bGF0ZV8yb3BfU3JjVigidGVzdCIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwogCQlicmVhazsKIAljYXNlIDB4ODYgLi4uIDB4ODc6CS8qIHhjaGcgKi8KQEAgLTI3MzUsMTggKzI4MTcsMTMgQEAKIAkJYnJlYWs7CiAJY2FzZSAweDg4IC4uLiAweDhiOgkvKiBtb3YgKi8KIAkJZ290byBtb3Y7Ci0JY2FzZSAweDhjOiB7IC8qIG1vdiByL20sIHNyZWcgKi8KLQkJc3RydWN0IGt2bV9zZWdtZW50IHNlZ3JlZzsKLQotCQlpZiAoYy0+bW9kcm1fcmVnIDw9IFZDUFVfU1JFR19HUykKLQkJCWt2bV9nZXRfc2VnbWVudChjdHh0LT52Y3B1LCAmc2VncmVnLCBjLT5tb2RybV9yZWcpOwotCQllbHNlIHsKLQkJCWt2bV9xdWV1ZV9leGNlcHRpb24oY3R4dC0+dmNwdSwgVURfVkVDVE9SKTsKKwljYXNlIDB4OGM6ICAvKiBtb3Ygci9tLCBzcmVnICovCisJCWlmIChjLT5tb2RybV9yZWcgPiBWQ1BVX1NSRUdfR1MpIHsKKwkJCWVtdWxhdGVfdWQoY3R4dCk7CiAJCQlnb3RvIGRvbmU7CiAJCX0KLQkJYy0+ZHN0LnZhbCA9IHNlZ3JlZy5zZWxlY3RvcjsKKwkJYy0+ZHN0LnZhbCA9IG9wcy0+Z2V0X3NlZ21lbnRfc2VsZWN0b3IoYy0+bW9kcm1fcmVnLCBjdHh0LT52Y3B1KTsKIAkJYnJlYWs7Ci0JfQogCWNhc2UgMHg4ZDogLyogbGVhIHIxNi9yMzIsIG0gKi8KIAkJYy0+ZHN0LnZhbCA9IGMtPm1vZHJtX2VhOwogCQlicmVhazsKQEAgLTI3NTcsMTIgKzI4MzQsMTIgQEAKIAogCQlpZiAoYy0+bW9kcm1fcmVnID09IFZDUFVfU1JFR19DUyB8fAogCQkgICAgYy0+bW9kcm1fcmVnID4gVkNQVV9TUkVHX0dTKSB7Ci0JCQlrdm1fcXVldWVfZXhjZXB0aW9uKGN0eHQtPnZjcHUsIFVEX1ZFQ1RPUik7CisJCQllbXVsYXRlX3VkKGN0eHQpOwogCQkJZ290byBkb25lOwogCQl9CiAKIAkJaWYgKGMtPm1vZHJtX3JlZyA9PSBWQ1BVX1NSRUdfU1MpCi0JCQl0b2dnbGVfaW50ZXJydXB0aWJpbGl0eShjdHh0LCBLVk1fWDg2X1NIQURPV19JTlRfTU9WX1NTKTsKKwkJCWN0eHQtPmludGVycnVwdGliaWxpdHkgPSBLVk1fWDg2X1NIQURPV19JTlRfTU9WX1NTOwogCiAJCXJjID0gbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IoY3R4dCwgb3BzLCBzZWwsIGMtPm1vZHJtX3JlZyk7CiAKQEAgLTI3NzUsMTkgKzI4NTIsMTkgQEAKIAkJCWdvdG8gZG9uZTsKIAkJYnJlYWs7CiAJY2FzZSAweDkwOiAvKiBub3AgLyB4Y2hnIHI4LHJheCAqLwotCQlpZiAoIShjLT5yZXhfcHJlZml4ICYgMSkpIHsgLyogbm9wICovCi0JCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CisJCWlmIChjLT5kc3QucHRyID09ICh1bnNpZ25lZCBsb25nICopJmMtPnJlZ3NbVkNQVV9SRUdTX1JBWF0pIHsKKwkJCWMtPmRzdC50eXBlID0gT1BfTk9ORTsgIC8qIG5vcCAqLwogCQkJYnJlYWs7CiAJCX0KIAljYXNlIDB4OTEgLi4uIDB4OTc6IC8qIHhjaGcgcmVnLHJheCAqLwotCQljLT5zcmMudHlwZSA9IGMtPmRzdC50eXBlID0gT1BfUkVHOwotCQljLT5zcmMuYnl0ZXMgPSBjLT5kc3QuYnl0ZXMgPSBjLT5vcF9ieXRlczsKKwkJYy0+c3JjLnR5cGUgPSBPUF9SRUc7CisJCWMtPnNyYy5ieXRlcyA9IGMtPm9wX2J5dGVzOwogCQljLT5zcmMucHRyID0gKHVuc2lnbmVkIGxvbmcgKikgJmMtPnJlZ3NbVkNQVV9SRUdTX1JBWF07CiAJCWMtPnNyYy52YWwgPSAqKGMtPnNyYy5wdHIpOwogCQlnb3RvIHhjaGc7CiAJY2FzZSAweDljOiAvKiBwdXNoZiAqLwogCQljLT5zcmMudmFsID0gICh1bnNpZ25lZCBsb25nKSBjdHh0LT5lZmxhZ3M7Ci0JCWVtdWxhdGVfcHVzaChjdHh0KTsKKwkJZW11bGF0ZV9wdXNoKGN0eHQsIG9wcyk7CiAJCWJyZWFrOwogCWNhc2UgMHg5ZDogLyogcG9wZiAqLwogCQljLT5kc3QudHlwZSA9IE9QX1JFRzsKQEAgLTI3OTcsMTkgKzI4NzQsMTUgQEAKIAkJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCQlnb3RvIGRvbmU7CiAJCWJyZWFrOwotCWNhc2UgMHhhMCAuLi4gMHhhMToJLyogbW92ICovCi0JCWMtPmRzdC5wdHIgPSAodW5zaWduZWQgbG9uZyAqKSZjLT5yZWdzW1ZDUFVfUkVHU19SQVhdOwotCQljLT5kc3QudmFsID0gYy0+c3JjLnZhbDsKLQkJYnJlYWs7Ci0JY2FzZSAweGEyIC4uLiAweGEzOgkvKiBtb3YgKi8KLQkJYy0+ZHN0LnZhbCA9ICh1bnNpZ25lZCBsb25nKWMtPnJlZ3NbVkNQVV9SRUdTX1JBWF07Ci0JCWJyZWFrOworCWNhc2UgMHhhMCAuLi4gMHhhMzoJLyogbW92ICovCiAJY2FzZSAweGE0IC4uLiAweGE1OgkvKiBtb3ZzICovCiAJCWdvdG8gbW92OwogCWNhc2UgMHhhNiAuLi4gMHhhNzoJLyogY21wcyAqLwogCQljLT5kc3QudHlwZSA9IE9QX05PTkU7IC8qIERpc2FibGUgd3JpdGViYWNrLiAqLwogCQlEUFJJTlRGKCJjbXBzOiBtZW0xPTB4JXAgbWVtMj0weCVwXG4iLCBjLT5zcmMucHRyLCBjLT5kc3QucHRyKTsKIAkJZ290byBjbXA7CisJY2FzZSAweGE4IC4uLiAweGE5OgkvKiB0ZXN0IGF4LCBpbW0gKi8KKwkJZ290byB0ZXN0OwogCWNhc2UgMHhhYSAuLi4gMHhhYjoJLyogc3RvcyAqLwogCQljLT5kc3QudmFsID0gYy0+cmVnc1tWQ1BVX1JFR1NfUkFYXTsKIAkJYnJlYWs7CkBAIC0yODU1LDE5ICsyOTI4LDIzIEBACiAJCWxvbmcgaW50IHJlbCA9IGMtPnNyYy52YWw7CiAJCWMtPnNyYy52YWwgPSAodW5zaWduZWQgbG9uZykgYy0+ZWlwOwogCQlqbXBfcmVsKGMsIHJlbCk7Ci0JCWVtdWxhdGVfcHVzaChjdHh0KTsKKwkJZW11bGF0ZV9wdXNoKGN0eHQsIG9wcyk7CiAJCWJyZWFrOwogCX0KIAljYXNlIDB4ZTk6IC8qIGptcCByZWwgKi8KIAkJZ290byBqbXA7Ci0JY2FzZSAweGVhOiAvKiBqbXAgZmFyICovCisJY2FzZSAweGVhOiB7IC8qIGptcCBmYXIgKi8KKwkJdW5zaWduZWQgc2hvcnQgc2VsOwogCWp1bXBfZmFyOgotCQlpZiAobG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IoY3R4dCwgb3BzLCBjLT5zcmMyLnZhbCwKLQkJCQkJICAgIFZDUFVfU1JFR19DUykpCisJCW1lbWNweSgmc2VsLCBjLT5zcmMudmFscHRyICsgYy0+b3BfYnl0ZXMsIDIpOworCisJCWlmIChsb2FkX3NlZ21lbnRfZGVzY3JpcHRvcihjdHh0LCBvcHMsIHNlbCwgVkNQVV9TUkVHX0NTKSkKIAkJCWdvdG8gZG9uZTsKIAotCQljLT5laXAgPSBjLT5zcmMudmFsOworCQljLT5laXAgPSAwOworCQltZW1jcHkoJmMtPmVpcCwgYy0+c3JjLnZhbHB0ciwgYy0+b3BfYnl0ZXMpOwogCQlicmVhazsKKwl9CiAJY2FzZSAweGViOgogCSAgICAgIGptcDoJCS8qIGptcCByZWwgc2hvcnQgKi8KIAkJam1wX3JlbChjLCBjLT5zcmMudmFsKTsKQEAgLTI4NzksMjAgKzI5NTYsMjAgQEAKIAlkb19pb19pbjoKIAkJYy0+ZHN0LmJ5dGVzID0gbWluKGMtPmRzdC5ieXRlcywgNHUpOwogCQlpZiAoIWVtdWxhdG9yX2lvX3Blcm1pdGVkKGN0eHQsIG9wcywgYy0+c3JjLnZhbCwgYy0+ZHN0LmJ5dGVzKSkgewotCQkJa3ZtX2luamVjdF9ncChjdHh0LT52Y3B1LCAwKTsKKwkJCWVtdWxhdGVfZ3AoY3R4dCwgMCk7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIAkJaWYgKCFwaW9faW5fZW11bGF0ZWQoY3R4dCwgb3BzLCBjLT5kc3QuYnl0ZXMsIGMtPnNyYy52YWwsCiAJCQkJICAgICAmYy0+ZHN0LnZhbCkpCiAJCQlnb3RvIGRvbmU7IC8qIElPIGlzIG5lZWRlZCAqLwogCQlicmVhazsKLQljYXNlIDB4ZWU6IC8qIG91dCBhbCxkeCAqLwotCWNhc2UgMHhlZjogLyogb3V0IChlL3IpYXgsZHggKi8KKwljYXNlIDB4ZWU6IC8qIG91dCBkeCxhbCAqLworCWNhc2UgMHhlZjogLyogb3V0IGR4LChlL3IpYXggKi8KIAkJYy0+c3JjLnZhbCA9IGMtPnJlZ3NbVkNQVV9SRUdTX1JEWF07CiAJZG9faW9fb3V0OgogCQljLT5kc3QuYnl0ZXMgPSBtaW4oYy0+ZHN0LmJ5dGVzLCA0dSk7CiAJCWlmICghZW11bGF0b3JfaW9fcGVybWl0ZWQoY3R4dCwgb3BzLCBjLT5zcmMudmFsLCBjLT5kc3QuYnl0ZXMpKSB7Ci0JCQlrdm1faW5qZWN0X2dwKGN0eHQtPnZjcHUsIDApOworCQkJZW11bGF0ZV9ncChjdHh0LCAwKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCQlvcHMtPnBpb19vdXRfZW11bGF0ZWQoYy0+ZHN0LmJ5dGVzLCBjLT5zcmMudmFsLCAmYy0+ZHN0LnZhbCwgMSwKQEAgLTI5MTYsMTggKzI5OTMsMjAgQEAKIAkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwkvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KIAkJYnJlYWs7CiAJY2FzZSAweGZhOiAvKiBjbGkgKi8KLQkJaWYgKGVtdWxhdG9yX2JhZF9pb3BsKGN0eHQsIG9wcykpCi0JCQlrdm1faW5qZWN0X2dwKGN0eHQtPnZjcHUsIDApOwotCQllbHNlIHsKKwkJaWYgKGVtdWxhdG9yX2JhZF9pb3BsKGN0eHQsIG9wcykpIHsKKwkJCWVtdWxhdGVfZ3AoY3R4dCwgMCk7CisJCQlnb3RvIGRvbmU7CisJCX0gZWxzZSB7CiAJCQljdHh0LT5lZmxhZ3MgJj0gflg4Nl9FRkxBR1NfSUY7CiAJCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CS8qIERpc2FibGUgd3JpdGViYWNrLiAqLwogCQl9CiAJCWJyZWFrOwogCWNhc2UgMHhmYjogLyogc3RpICovCi0JCWlmIChlbXVsYXRvcl9iYWRfaW9wbChjdHh0LCBvcHMpKQotCQkJa3ZtX2luamVjdF9ncChjdHh0LT52Y3B1LCAwKTsKLQkJZWxzZSB7Ci0JCQl0b2dnbGVfaW50ZXJydXB0aWJpbGl0eShjdHh0LCBLVk1fWDg2X1NIQURPV19JTlRfU1RJKTsKKwkJaWYgKGVtdWxhdG9yX2JhZF9pb3BsKGN0eHQsIG9wcykpIHsKKwkJCWVtdWxhdGVfZ3AoY3R4dCwgMCk7CisJCQlnb3RvIGRvbmU7CisJCX0gZWxzZSB7CisJCQljdHh0LT5pbnRlcnJ1cHRpYmlsaXR5ID0gS1ZNX1g4Nl9TSEFET1dfSU5UX1NUSTsKIAkJCWN0eHQtPmVmbGFncyB8PSBYODZfRUZMQUdTX0lGOwogCQkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwkvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KIAkJfQpAQCAtMjk2NCwxMSArMzA0MywxMiBAQAogCWMtPmRzdC50eXBlID0gc2F2ZWRfZHN0X3R5cGU7CiAKIAlpZiAoKGMtPmQgJiBTcmNNYXNrKSA9PSBTcmNTSSkKLQkJc3RyaW5nX2FkZHJfaW5jKGN0eHQsIHNlZ19vdmVycmlkZV9iYXNlKGN0eHQsIGMpLCBWQ1BVX1JFR1NfUlNJLAotCQkJCSZjLT5zcmMpOworCQlzdHJpbmdfYWRkcl9pbmMoY3R4dCwgc2VnX292ZXJyaWRlX2Jhc2UoY3R4dCwgb3BzLCBjKSwKKwkJCQlWQ1BVX1JFR1NfUlNJLCAmYy0+c3JjKTsKIAogCWlmICgoYy0+ZCAmIERzdE1hc2spID09IERzdERJKQotCQlzdHJpbmdfYWRkcl9pbmMoY3R4dCwgZXNfYmFzZShjdHh0KSwgVkNQVV9SRUdTX1JESSwgJmMtPmRzdCk7CisJCXN0cmluZ19hZGRyX2luYyhjdHh0LCBlc19iYXNlKGN0eHQsIG9wcyksIFZDUFVfUkVHU19SREksCisJCQkJJmMtPmRzdCk7CiAKIAlpZiAoYy0+cmVwX3ByZWZpeCAmJiAoYy0+ZCAmIFN0cmluZykpIHsKIAkJc3RydWN0IHJlYWRfY2FjaGUgKnJjID0gJmN0eHQtPmRlY29kZS5pb19yZWFkOwpAQCAtMjk4MSwxMSArMzA2MSwxMiBAQAogCQkgICAgKHJjLT5lbmQgIT0gMCAmJiByYy0+ZW5kID09IHJjLT5wb3MpKQogCQkJY3R4dC0+cmVzdGFydCA9IGZhbHNlOwogCX0KLQotCS8qIENvbW1pdCBzaGFkb3cgcmVnaXN0ZXIgc3RhdGUuICovCi0JbWVtY3B5KGN0eHQtPnZjcHUtPmFyY2gucmVncywgYy0+cmVncywgc2l6ZW9mIGMtPnJlZ3MpOwotCWt2bV9yaXBfd3JpdGUoY3R4dC0+dmNwdSwgYy0+ZWlwKTsKLQlvcHMtPnNldF9yZmxhZ3MoY3R4dC0+dmNwdSwgY3R4dC0+ZWZsYWdzKTsKKwkvKgorCSAqIHJlc2V0IHJlYWQgY2FjaGUgaGVyZSBpbiBjYXNlIHN0cmluZyBpbnN0cnVjdGlvbiBpcyByZXN0YXJlZAorCSAqIHdpdGhvdXQgZGVjb2RpbmcKKwkgKi8KKwljdHh0LT5kZWNvZGUubWVtX3JlYWQuZW5kID0gMDsKKwljdHh0LT5laXAgPSBjLT5laXA7CiAKIGRvbmU6CiAJcmV0dXJuIChyYyA9PSBYODZFTVVMX1VOSEFORExFQUJMRSkgPyAtMSA6IDA7CkBAIC0zMDUxLDcgKzMxMzIsNyBAQAogCQkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwogCQkJYnJlYWs7CiAJCWNhc2UgNTogLyogbm90IGRlZmluZWQgKi8KLQkJCWt2bV9xdWV1ZV9leGNlcHRpb24oY3R4dC0+dmNwdSwgVURfVkVDVE9SKTsKKwkJCWVtdWxhdGVfdWQoY3R4dCk7CiAJCQlnb3RvIGRvbmU7CiAJCWNhc2UgNzogLyogaW52bHBnKi8KIAkJCWVtdWxhdGVfaW52bHBnKGN0eHQtPnZjcHUsIGMtPm1vZHJtX2VhKTsKQEAgLTMwNjMsNyArMzE0NCw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSAweDA1OiAJCS8qIHN5c2NhbGwgKi8KLQkJcmMgPSBlbXVsYXRlX3N5c2NhbGwoY3R4dCk7CisJCXJjID0gZW11bGF0ZV9zeXNjYWxsKGN0eHQsIG9wcyk7CiAJCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQogCQkJZ290byBkb25lOwogCQllbHNlCkBAIC0zMDczLDggKzMxNTQsMTEgQEAKIAkJZW11bGF0ZV9jbHRzKGN0eHQtPnZjcHUpOwogCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CiAJCWJyZWFrOwotCWNhc2UgMHgwODoJCS8qIGludmQgKi8KIAljYXNlIDB4MDk6CQkvKiB3YmludmQgKi8KKwkJa3ZtX2VtdWxhdGVfd2JpbnZkKGN0eHQtPnZjcHUpOworCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CisJCWJyZWFrOworCWNhc2UgMHgwODoJCS8qIGludmQgKi8KIAljYXNlIDB4MGQ6CQkvKiBHcnBQIChwcmVmZXRjaCkgKi8KIAljYXNlIDB4MTg6CQkvKiBHcnAxNiAocHJlZmV0Y2gvbm9wKSAqLwogCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CkBAIC0zMDg0LDcgKzMxNjgsNyBAQAogCQljYXNlIDE6CiAJCWNhc2UgNSAuLi4gNzoKIAkJY2FzZSA5IC4uLiAxNToKLQkJCWt2bV9xdWV1ZV9leGNlcHRpb24oY3R4dC0+dmNwdSwgVURfVkVDVE9SKTsKKwkJCWVtdWxhdGVfdWQoY3R4dCk7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIAkJYy0+cmVnc1tjLT5tb2RybV9ybV0gPSBvcHMtPmdldF9jcihjLT5tb2RybV9yZWcsIGN0eHQtPnZjcHUpOwpAQCAtMzA5MywzMSArMzE3Nyw0MiBAQAogCWNhc2UgMHgyMTogLyogbW92IGZyb20gZHIgdG8gcmVnICovCiAJCWlmICgob3BzLT5nZXRfY3IoNCwgY3R4dC0+dmNwdSkgJiBYODZfQ1I0X0RFKSAmJgogCQkgICAgKGMtPm1vZHJtX3JlZyA9PSA0IHx8IGMtPm1vZHJtX3JlZyA9PSA1KSkgewotCQkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbihjdHh0LT52Y3B1LCBVRF9WRUNUT1IpOworCQkJZW11bGF0ZV91ZChjdHh0KTsKIAkJCWdvdG8gZG9uZTsKIAkJfQotCQllbXVsYXRvcl9nZXRfZHIoY3R4dCwgYy0+bW9kcm1fcmVnLCAmYy0+cmVnc1tjLT5tb2RybV9ybV0pOworCQlvcHMtPmdldF9kcihjLT5tb2RybV9yZWcsICZjLT5yZWdzW2MtPm1vZHJtX3JtXSwgY3R4dC0+dmNwdSk7CiAJCWMtPmRzdC50eXBlID0gT1BfTk9ORTsJLyogbm8gd3JpdGViYWNrICovCiAJCWJyZWFrOwogCWNhc2UgMHgyMjogLyogbW92IHJlZywgY3IgKi8KLQkJb3BzLT5zZXRfY3IoYy0+bW9kcm1fcmVnLCBjLT5tb2RybV92YWwsIGN0eHQtPnZjcHUpOworCQlpZiAob3BzLT5zZXRfY3IoYy0+bW9kcm1fcmVnLCBjLT5tb2RybV92YWwsIGN0eHQtPnZjcHUpKSB7CisJCQllbXVsYXRlX2dwKGN0eHQsIDApOworCQkJZ290byBkb25lOworCQl9CiAJCWMtPmRzdC50eXBlID0gT1BfTk9ORTsKIAkJYnJlYWs7CiAJY2FzZSAweDIzOiAvKiBtb3YgZnJvbSByZWcgdG8gZHIgKi8KIAkJaWYgKChvcHMtPmdldF9jcig0LCBjdHh0LT52Y3B1KSAmIFg4Nl9DUjRfREUpICYmCiAJCSAgICAoYy0+bW9kcm1fcmVnID09IDQgfHwgYy0+bW9kcm1fcmVnID09IDUpKSB7Ci0JCQlrdm1fcXVldWVfZXhjZXB0aW9uKGN0eHQtPnZjcHUsIFVEX1ZFQ1RPUik7CisJCQllbXVsYXRlX3VkKGN0eHQpOwogCQkJZ290byBkb25lOwogCQl9Ci0JCWVtdWxhdG9yX3NldF9kcihjdHh0LCBjLT5tb2RybV9yZWcsIGMtPnJlZ3NbYy0+bW9kcm1fcm1dKTsKKworCQlpZiAob3BzLT5zZXRfZHIoYy0+bW9kcm1fcmVnLCBjLT5yZWdzW2MtPm1vZHJtX3JtXSAmCisJCQkJKChjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9QUk9UNjQpID8KKwkJCQkgfjBVTEwgOiB+MFUpLCBjdHh0LT52Y3B1KSA8IDApIHsKKwkJCS8qICNVRCBjb25kaXRpb24gaXMgYWxyZWFkeSBoYW5kbGVkIGJ5IHRoZSBjb2RlIGFib3ZlICovCisJCQllbXVsYXRlX2dwKGN0eHQsIDApOworCQkJZ290byBkb25lOworCQl9CisKIAkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwkvKiBubyB3cml0ZWJhY2sgKi8KIAkJYnJlYWs7CiAJY2FzZSAweDMwOgogCQkvKiB3cm1zciAqLwogCQltc3JfZGF0YSA9ICh1MzIpYy0+cmVnc1tWQ1BVX1JFR1NfUkFYXQogCQkJfCAoKHU2NCljLT5yZWdzW1ZDUFVfUkVHU19SRFhdIDw8IDMyKTsKLQkJaWYgKGt2bV9zZXRfbXNyKGN0eHQtPnZjcHUsIGMtPnJlZ3NbVkNQVV9SRUdTX1JDWF0sIG1zcl9kYXRhKSkgewotCQkJa3ZtX2luamVjdF9ncChjdHh0LT52Y3B1LCAwKTsKKwkJaWYgKG9wcy0+c2V0X21zcihjdHh0LT52Y3B1LCBjLT5yZWdzW1ZDUFVfUkVHU19SQ1hdLCBtc3JfZGF0YSkpIHsKKwkJCWVtdWxhdGVfZ3AoY3R4dCwgMCk7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIAkJcmMgPSBYODZFTVVMX0NPTlRJTlVFOwpAQCAtMzEyNSw4ICszMjIwLDggQEAKIAkJYnJlYWs7CiAJY2FzZSAweDMyOgogCQkvKiByZG1zciAqLwotCQlpZiAoa3ZtX2dldF9tc3IoY3R4dC0+dmNwdSwgYy0+cmVnc1tWQ1BVX1JFR1NfUkNYXSwgJm1zcl9kYXRhKSkgewotCQkJa3ZtX2luamVjdF9ncChjdHh0LT52Y3B1LCAwKTsKKwkJaWYgKG9wcy0+Z2V0X21zcihjdHh0LT52Y3B1LCBjLT5yZWdzW1ZDUFVfUkVHU19SQ1hdLCAmbXNyX2RhdGEpKSB7CisJCQllbXVsYXRlX2dwKGN0eHQsIDApOwogCQkJZ290byBkb25lOwogCQl9IGVsc2UgewogCQkJYy0+cmVnc1tWQ1BVX1JFR1NfUkFYXSA9ICh1MzIpbXNyX2RhdGE7CkBAIC0zMTM2LDE0ICszMjMxLDE0IEBACiAJCWMtPmRzdC50eXBlID0gT1BfTk9ORTsKIAkJYnJlYWs7CiAJY2FzZSAweDM0OgkJLyogc3lzZW50ZXIgKi8KLQkJcmMgPSBlbXVsYXRlX3N5c2VudGVyKGN0eHQpOworCQlyYyA9IGVtdWxhdGVfc3lzZW50ZXIoY3R4dCwgb3BzKTsKIAkJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCQlnb3RvIGRvbmU7CiAJCWVsc2UKIAkJCWdvdG8gd3JpdGViYWNrOwogCQlicmVhazsKIAljYXNlIDB4MzU6CQkvKiBzeXNleGl0ICovCi0JCXJjID0gZW11bGF0ZV9zeXNleGl0KGN0eHQpOworCQlyYyA9IGVtdWxhdGVfc3lzZXhpdChjdHh0LCBvcHMpOwogCQlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJCWdvdG8gZG9uZTsKIAkJZWxzZQpAQCAtMzE2MCw3ICszMjU1LDcgQEAKIAkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwogCQlicmVhazsKIAljYXNlIDB4YTA6CSAgLyogcHVzaCBmcyAqLwotCQllbXVsYXRlX3B1c2hfc3JlZyhjdHh0LCBWQ1BVX1NSRUdfRlMpOworCQllbXVsYXRlX3B1c2hfc3JlZyhjdHh0LCBvcHMsIFZDUFVfU1JFR19GUyk7CiAJCWJyZWFrOwogCWNhc2UgMHhhMToJIC8qIHBvcCBmcyAqLwogCQlyYyA9IGVtdWxhdGVfcG9wX3NyZWcoY3R4dCwgb3BzLCBWQ1BVX1NSRUdfRlMpOwpAQCAtMzE3OSw3ICszMjc0LDcgQEAKIAkJZW11bGF0ZV8yb3BfY2woInNobGQiLCBjLT5zcmMyLCBjLT5zcmMsIGMtPmRzdCwgY3R4dC0+ZWZsYWdzKTsKIAkJYnJlYWs7CiAJY2FzZSAweGE4OgkvKiBwdXNoIGdzICovCi0JCWVtdWxhdGVfcHVzaF9zcmVnKGN0eHQsIFZDUFVfU1JFR19HUyk7CisJCWVtdWxhdGVfcHVzaF9zcmVnKGN0eHQsIG9wcywgVkNQVV9TUkVHX0dTKTsKIAkJYnJlYWs7CiAJY2FzZSAweGE5OgkvKiBwb3AgZ3MgKi8KIAkJcmMgPSBlbXVsYXRlX3BvcF9zcmVnKGN0eHQsIG9wcywgVkNQVV9TUkVHX0dTKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pODI1NC5jIGIvYXJjaC94ODYva3ZtL2k4MjU0LmMKaW5kZXggMDE1MGFmZi4uMGZkNjM3OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2k4MjU0LmMKKysrIGIvYXJjaC94ODYva3ZtL2k4MjU0LmMKQEAgLTUsNiArNSw3IEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24KICAqIENvcHlyaWdodCAoYykgMjAwNyBLZWlyIEZyYXNlciwgWGVuU291cmNlIEluYwogICogQ29weXJpZ2h0IChjKSAyMDA4IEludGVsIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgMjAwOSBSZWQgSGF0LCBJbmMuIGFuZC9vciBpdHMgYWZmaWxhdGVzLgogICoKICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKICAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCkBAIC0zMyw2ICszNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2luY2x1ZGUgImlycS5oIgogI2luY2x1ZGUgImk4MjU0LmgiCkBAIC0yNDMsMTEgKzI0NSwyMiBAQAogewogCXN0cnVjdCBrdm1fa3BpdF9zdGF0ZSAqcHMgPSBjb250YWluZXJfb2Yoa2lhbiwgc3RydWN0IGt2bV9rcGl0X3N0YXRlLAogCQkJCQkJIGlycV9hY2tfbm90aWZpZXIpOwotCXJhd19zcGluX2xvY2soJnBzLT5pbmplY3RfbG9jayk7Ci0JaWYgKGF0b21pY19kZWNfcmV0dXJuKCZwcy0+cGl0X3RpbWVyLnBlbmRpbmcpIDwgMCkKKwlpbnQgdmFsdWU7CisKKwlzcGluX2xvY2soJnBzLT5pbmplY3RfbG9jayk7CisJdmFsdWUgPSBhdG9taWNfZGVjX3JldHVybigmcHMtPnBpdF90aW1lci5wZW5kaW5nKTsKKwlpZiAodmFsdWUgPCAwKQorCQkvKiBzcHVyaW91cyBhY2tzIGNhbiBiZSBnZW5lcmF0ZWQgaWYsIGZvciBleGFtcGxlLCB0aGUKKwkJICogUElDIGlzIGJlaW5nIHJlc2V0LiAgSGFuZGxlIGl0IGdyYWNlZnVsbHkgaGVyZQorCQkgKi8KIAkJYXRvbWljX2luYygmcHMtPnBpdF90aW1lci5wZW5kaW5nKTsKKwllbHNlIGlmICh2YWx1ZSA+IDApCisJCS8qIGluIHRoaXMgY2FzZSwgd2UgaGFkIG11bHRpcGxlIG91dHN0YW5kaW5nIHBpdCBpbnRlcnJ1cHRzCisJCSAqIHRoYXQgd2UgbmVlZGVkIHRvIGluamVjdC4gIFJlaW5qZWN0CisJCSAqLworCQlxdWV1ZV93b3JrKHBzLT5waXQtPndxLCAmcHMtPnBpdC0+ZXhwaXJlZCk7CiAJcHMtPmlycV9hY2sgPSAxOwotCXJhd19zcGluX3VubG9jaygmcHMtPmluamVjdF9sb2NrKTsKKwlzcGluX3VubG9jaygmcHMtPmluamVjdF9sb2NrKTsKIH0KIAogdm9pZCBfX2t2bV9taWdyYXRlX3BpdF90aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0yNjMsMTAgKzI3NiwxMCBAQAogCQlocnRpbWVyX3N0YXJ0X2V4cGlyZXModGltZXIsIEhSVElNRVJfTU9ERV9BQlMpOwogfQogCi1zdGF0aWMgdm9pZCBkZXN0cm95X3BpdF90aW1lcihzdHJ1Y3Qga3ZtX3RpbWVyICpwdCkKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfcGl0X3RpbWVyKHN0cnVjdCBrdm1fcGl0ICpwaXQpCiB7Ci0JcHJfZGVidWcoImV4ZWN1dGUgZGVsIHRpbWVyIVxuIik7Ci0JaHJ0aW1lcl9jYW5jZWwoJnB0LT50aW1lcik7CisJaHJ0aW1lcl9jYW5jZWwoJnBpdC0+cGl0X3N0YXRlLnBpdF90aW1lci50aW1lcik7CisJY2FuY2VsX3dvcmtfc3luYygmcGl0LT5leHBpcmVkKTsKIH0KIAogc3RhdGljIGJvb2wga3BpdF9pc19wZXJpb2RpYyhzdHJ1Y3Qga3ZtX3RpbWVyICprdGltZXIpCkBAIC0yODAsNiArMjkzLDYwIEBACiAJLmlzX3BlcmlvZGljID0ga3BpdF9pc19wZXJpb2RpYywKIH07CiAKK3N0YXRpYyB2b2lkIHBpdF9kb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qga3ZtX3BpdCAqcGl0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBrdm1fcGl0LCBleHBpcmVkKTsKKwlzdHJ1Y3Qga3ZtICprdm0gPSBwaXQtPmt2bTsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CisJaW50IGk7CisJc3RydWN0IGt2bV9rcGl0X3N0YXRlICpwcyA9ICZwaXQtPnBpdF9zdGF0ZTsKKwlpbnQgaW5qZWN0ID0gMDsKKworCS8qIFRyeSB0byBpbmplY3QgcGVuZGluZyBpbnRlcnJ1cHRzIHdoZW4KKwkgKiBsYXN0IG9uZSBoYXMgYmVlbiBhY2tlZC4KKwkgKi8KKwlzcGluX2xvY2soJnBzLT5pbmplY3RfbG9jayk7CisJaWYgKHBzLT5pcnFfYWNrKSB7CisJCXBzLT5pcnFfYWNrID0gMDsKKwkJaW5qZWN0ID0gMTsKKwl9CisJc3Bpbl91bmxvY2soJnBzLT5pbmplY3RfbG9jayk7CisJaWYgKGluamVjdCkgeworCQlrdm1fc2V0X2lycShrdm0sIGt2bS0+YXJjaC52cGl0LT5pcnFfc291cmNlX2lkLCAwLCAxKTsKKwkJa3ZtX3NldF9pcnEoa3ZtLCBrdm0tPmFyY2gudnBpdC0+aXJxX3NvdXJjZV9pZCwgMCwgMCk7CisKKwkJLyoKKwkJICogUHJvdmlkZXMgTk1JIHdhdGNoZG9nIHN1cHBvcnQgdmlhIFZpcnR1YWwgV2lyZSBtb2RlLgorCQkgKiBUaGUgcm91dGUgaXM6IFBJVCAtPiBQSUMgLT4gTFZUMCBpbiBOTUkgbW9kZS4KKwkJICoKKwkJICogTm90ZTogT3VyIFZpcnR1YWwgV2lyZSBpbXBsZW1lbnRhdGlvbiBpcyBzaW1wbGlmaWVkLCBvbmx5CisJCSAqIHByb3BhZ2F0aW5nIFBJVCBpbnRlcnJ1cHRzIHRvIGFsbCBWQ1BVcyB3aGVuIHRoZXkgaGF2ZSBzZXQKKwkJICogTFZUMCB0byBOTUkgZGVsaXZlcnkuIE90aGVyIFBJQyBpbnRlcnJ1cHRzIGFyZSBqdXN0IHNlbnQgdG8KKwkJICogVkNQVTAsIGFuZCBvbmx5IGlmIGl0cyBMVlQwIGlzIGluIEVYVElOVCBtb2RlLgorCQkgKi8KKwkJaWYgKGt2bS0+YXJjaC52YXBpY3NfaW5fbm1pX21vZGUgPiAwKQorCQkJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKQorCQkJCWt2bV9hcGljX25taV93ZF9kZWxpdmVyKHZjcHUpOworCX0KK30KKworc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHBpdF90aW1lcl9mbihzdHJ1Y3QgaHJ0aW1lciAqZGF0YSkKK3sKKwlzdHJ1Y3Qga3ZtX3RpbWVyICprdGltZXIgPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGt2bV90aW1lciwgdGltZXIpOworCXN0cnVjdCBrdm1fcGl0ICpwdCA9IGt0aW1lci0+a3ZtLT5hcmNoLnZwaXQ7CisKKwlpZiAoa3RpbWVyLT5yZWluamVjdCB8fCAhYXRvbWljX3JlYWQoJmt0aW1lci0+cGVuZGluZykpIHsKKwkJYXRvbWljX2luYygma3RpbWVyLT5wZW5kaW5nKTsKKwkJcXVldWVfd29yayhwdC0+d3EsICZwdC0+ZXhwaXJlZCk7CisJfQorCisJaWYgKGt0aW1lci0+dF9vcHMtPmlzX3BlcmlvZGljKGt0aW1lcikpIHsKKwkJaHJ0aW1lcl9hZGRfZXhwaXJlc19ucygma3RpbWVyLT50aW1lciwga3RpbWVyLT5wZXJpb2QpOworCQlyZXR1cm4gSFJUSU1FUl9SRVNUQVJUOworCX0gZWxzZQorCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7Cit9CisKIHN0YXRpYyB2b2lkIGNyZWF0ZV9waXRfdGltZXIoc3RydWN0IGt2bV9rcGl0X3N0YXRlICpwcywgdTMyIHZhbCwgaW50IGlzX3BlcmlvZCkKIHsKIAlzdHJ1Y3Qga3ZtX3RpbWVyICpwdCA9ICZwcy0+cGl0X3RpbWVyOwpAQCAtMjkxLDEzICszNTgsMTMgQEAKIAogCS8qIFRPRE8gVGhlIG5ldyB2YWx1ZSBvbmx5IGFmZmVjdGVkIGFmdGVyIHRoZSByZXRyaWdnZXJlZCAqLwogCWhydGltZXJfY2FuY2VsKCZwdC0+dGltZXIpOworCWNhbmNlbF93b3JrX3N5bmMoJnBzLT5waXQtPmV4cGlyZWQpOwogCXB0LT5wZXJpb2QgPSBpbnRlcnZhbDsKIAlwcy0+aXNfcGVyaW9kaWMgPSBpc19wZXJpb2Q7CiAKLQlwdC0+dGltZXIuZnVuY3Rpb24gPSBrdm1fdGltZXJfZm47CisJcHQtPnRpbWVyLmZ1bmN0aW9uID0gcGl0X3RpbWVyX2ZuOwogCXB0LT50X29wcyA9ICZrcGl0X29wczsKIAlwdC0+a3ZtID0gcHMtPnBpdC0+a3ZtOwotCXB0LT52Y3B1ID0gcHQtPmt2bS0+YnNwX3ZjcHU7CiAKIAlhdG9taWNfc2V0KCZwdC0+cGVuZGluZywgMCk7CiAJcHMtPmlycV9hY2sgPSAxOwpAQCAtMzQ2LDcgKzQxMyw3IEBACiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZGVzdHJveV9waXRfdGltZXIoJnBzLT5waXRfdGltZXIpOworCQlkZXN0cm95X3BpdF90aW1lcihrdm0tPmFyY2gudnBpdCk7CiAJfQogfQogCkBAIC02MjUsNyArNjkyLDE1IEBACiAKIAltdXRleF9pbml0KCZwaXQtPnBpdF9zdGF0ZS5sb2NrKTsKIAltdXRleF9sb2NrKCZwaXQtPnBpdF9zdGF0ZS5sb2NrKTsKLQlyYXdfc3Bpbl9sb2NrX2luaXQoJnBpdC0+cGl0X3N0YXRlLmluamVjdF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcGl0LT5waXRfc3RhdGUuaW5qZWN0X2xvY2spOworCisJcGl0LT53cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJrdm0tcGl0LXdxIik7CisJaWYgKCFwaXQtPndxKSB7CisJCW11dGV4X3VubG9jaygmcGl0LT5waXRfc3RhdGUubG9jayk7CisJCWtmcmVlKHBpdCk7CisJCXJldHVybiBOVUxMOworCX0KKwlJTklUX1dPUksoJnBpdC0+ZXhwaXJlZCwgcGl0X2RvX3dvcmspOwogCiAJa3ZtLT5hcmNoLnZwaXQgPSBwaXQ7CiAJcGl0LT5rdm0gPSBrdm07CkBAIC02NzcsNiArNzUyLDkgQEAKIAlzdHJ1Y3QgaHJ0aW1lciAqdGltZXI7CiAKIAlpZiAoa3ZtLT5hcmNoLnZwaXQpIHsKKwkJa3ZtX2lvX2J1c191bnJlZ2lzdGVyX2Rldihrdm0sIEtWTV9QSU9fQlVTLCAma3ZtLT5hcmNoLnZwaXQtPmRldik7CisJCWt2bV9pb19idXNfdW5yZWdpc3Rlcl9kZXYoa3ZtLCBLVk1fUElPX0JVUywKKwkJCQkJICAgICAgJmt2bS0+YXJjaC52cGl0LT5zcGVha2VyX2Rldik7CiAJCWt2bV91bnJlZ2lzdGVyX2lycV9tYXNrX25vdGlmaWVyKGt2bSwgMCwKIAkJCQkJICAgICAgICZrdm0tPmFyY2gudnBpdC0+bWFza19ub3RpZmllcik7CiAJCWt2bV91bnJlZ2lzdGVyX2lycV9hY2tfbm90aWZpZXIoa3ZtLApAQCAtNjg0LDU0ICs3NjIsMTAgQEAKIAkJbXV0ZXhfbG9jaygma3ZtLT5hcmNoLnZwaXQtPnBpdF9zdGF0ZS5sb2NrKTsKIAkJdGltZXIgPSAma3ZtLT5hcmNoLnZwaXQtPnBpdF9zdGF0ZS5waXRfdGltZXIudGltZXI7CiAJCWhydGltZXJfY2FuY2VsKHRpbWVyKTsKKwkJY2FuY2VsX3dvcmtfc3luYygma3ZtLT5hcmNoLnZwaXQtPmV4cGlyZWQpOwogCQlrdm1fZnJlZV9pcnFfc291cmNlX2lkKGt2bSwga3ZtLT5hcmNoLnZwaXQtPmlycV9zb3VyY2VfaWQpOwogCQltdXRleF91bmxvY2soJmt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUubG9jayk7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKGt2bS0+YXJjaC52cGl0LT53cSk7CiAJCWtmcmVlKGt2bS0+YXJjaC52cGl0KTsKIAl9CiB9Ci0KLXN0YXRpYyB2b2lkIF9faW5qZWN0X3BpdF90aW1lcl9pbnRyKHN0cnVjdCBrdm0gKmt2bSkKLXsKLQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7Ci0JaW50IGk7Ci0KLQlrdm1fc2V0X2lycShrdm0sIGt2bS0+YXJjaC52cGl0LT5pcnFfc291cmNlX2lkLCAwLCAxKTsKLQlrdm1fc2V0X2lycShrdm0sIGt2bS0+YXJjaC52cGl0LT5pcnFfc291cmNlX2lkLCAwLCAwKTsKLQotCS8qCi0JICogUHJvdmlkZXMgTk1JIHdhdGNoZG9nIHN1cHBvcnQgdmlhIFZpcnR1YWwgV2lyZSBtb2RlLgotCSAqIFRoZSByb3V0ZSBpczogUElUIC0+IFBJQyAtPiBMVlQwIGluIE5NSSBtb2RlLgotCSAqCi0JICogTm90ZTogT3VyIFZpcnR1YWwgV2lyZSBpbXBsZW1lbnRhdGlvbiBpcyBzaW1wbGlmaWVkLCBvbmx5Ci0JICogcHJvcGFnYXRpbmcgUElUIGludGVycnVwdHMgdG8gYWxsIFZDUFVzIHdoZW4gdGhleSBoYXZlIHNldAotCSAqIExWVDAgdG8gTk1JIGRlbGl2ZXJ5LiBPdGhlciBQSUMgaW50ZXJydXB0cyBhcmUganVzdCBzZW50IHRvCi0JICogVkNQVTAsIGFuZCBvbmx5IGlmIGl0cyBMVlQwIGlzIGluIEVYVElOVCBtb2RlLgotCSAqLwotCWlmIChrdm0tPmFyY2gudmFwaWNzX2luX25taV9tb2RlID4gMCkKLQkJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKQotCQkJa3ZtX2FwaWNfbm1pX3dkX2RlbGl2ZXIodmNwdSk7Ci19Ci0KLXZvaWQga3ZtX2luamVjdF9waXRfdGltZXJfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0Jc3RydWN0IGt2bV9waXQgKnBpdCA9IHZjcHUtPmt2bS0+YXJjaC52cGl0OwotCXN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtPmt2bTsKLQlzdHJ1Y3Qga3ZtX2twaXRfc3RhdGUgKnBzOwotCi0JaWYgKHBpdCkgewotCQlpbnQgaW5qZWN0ID0gMDsKLQkJcHMgPSAmcGl0LT5waXRfc3RhdGU7Ci0KLQkJLyogVHJ5IHRvIGluamVjdCBwZW5kaW5nIGludGVycnVwdHMgd2hlbgotCQkgKiBsYXN0IG9uZSBoYXMgYmVlbiBhY2tlZC4KLQkJICovCi0JCXJhd19zcGluX2xvY2soJnBzLT5pbmplY3RfbG9jayk7Ci0JCWlmIChhdG9taWNfcmVhZCgmcHMtPnBpdF90aW1lci5wZW5kaW5nKSAmJiBwcy0+aXJxX2FjaykgewotCQkJcHMtPmlycV9hY2sgPSAwOwotCQkJaW5qZWN0ID0gMTsKLQkJfQotCQlyYXdfc3Bpbl91bmxvY2soJnBzLT5pbmplY3RfbG9jayk7Ci0JCWlmIChpbmplY3QpCi0JCQlfX2luamVjdF9waXRfdGltZXJfaW50cihrdm0pOwotCX0KLX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pODI1NC5oIGIvYXJjaC94ODYva3ZtL2k4MjU0LmgKaW5kZXggOTAwZDZiMC4uNDZkMDhjYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2k4MjU0LmgKKysrIGIvYXJjaC94ODYva3ZtL2k4MjU0LmgKQEAgLTI3LDcgKzI3LDcgQEAKIAl1MzIgICAgc3BlYWtlcl9kYXRhX29uOwogCXN0cnVjdCBtdXRleCBsb2NrOwogCXN0cnVjdCBrdm1fcGl0ICpwaXQ7Ci0JcmF3X3NwaW5sb2NrX3QgaW5qZWN0X2xvY2s7CisJc3BpbmxvY2tfdCBpbmplY3RfbG9jazsKIAl1bnNpZ25lZCBsb25nIGlycV9hY2s7CiAJc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyIGlycV9hY2tfbm90aWZpZXI7CiB9OwpAQCAtNDAsNiArNDAsOCBAQAogCXN0cnVjdCBrdm1fa3BpdF9zdGF0ZSBwaXRfc3RhdGU7CiAJaW50IGlycV9zb3VyY2VfaWQ7CiAJc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciBtYXNrX25vdGlmaWVyOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZXhwaXJlZDsKIH07CiAKICNkZWZpbmUgS1ZNX1BJVF9CQVNFX0FERFJFU1MJICAgIDB4NDAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pODI1OS5jIGIvYXJjaC94ODYva3ZtL2k4MjU5LmMKaW5kZXggOTM4MjVmZi4uOGQxMGMwNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2k4MjU5LmMKKysrIGIvYXJjaC94ODYva3ZtL2k4MjU5LmMKQEAgLTMsNiArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDQgRmFicmljZSBCZWxsYXJkCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAyMDA5IFJlZCBIYXQsIEluYy4gYW5kL29yIGl0cyBhZmZpbGF0ZXMuCiAgKgogICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQogICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKQEAgLTMzLDYgKzM0LDggQEAKICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgogI2luY2x1ZGUgInRyYWNlLmgiCiAKK3N0YXRpYyB2b2lkIHBpY19pcnFfcmVxdWVzdChzdHJ1Y3Qga3ZtICprdm0sIGludCBsZXZlbCk7CisKIHN0YXRpYyB2b2lkIHBpY19sb2NrKHN0cnVjdCBrdm1fcGljICpzKQogCV9fYWNxdWlyZXMoJnMtPmxvY2spCiB7CkBAIC00MywxNiArNDYsMjUgQEAKIAlfX3JlbGVhc2VzKCZzLT5sb2NrKQogewogCWJvb2wgd2FrZXVwID0gcy0+d2FrZXVwX25lZWRlZDsKLQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCAqZm91bmQgPSBOVUxMOworCWludCBpOwogCiAJcy0+d2FrZXVwX25lZWRlZCA9IGZhbHNlOwogCiAJcmF3X3NwaW5fdW5sb2NrKCZzLT5sb2NrKTsKIAogCWlmICh3YWtldXApIHsKLQkJdmNwdSA9IHMtPmt2bS0+YnNwX3ZjcHU7Ci0JCWlmICh2Y3B1KQotCQkJa3ZtX3ZjcHVfa2ljayh2Y3B1KTsKKwkJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwgcy0+a3ZtKSB7CisJCQlpZiAoa3ZtX2FwaWNfYWNjZXB0X3BpY19pbnRyKHZjcHUpKSB7CisJCQkJZm91bmQgPSB2Y3B1OworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKCFmb3VuZCkKKwkJCWZvdW5kID0gcy0+a3ZtLT5ic3BfdmNwdTsKKworCQlrdm1fdmNwdV9raWNrKGZvdW5kKTsKIAl9CiB9CiAKQEAgLTE3MywxMCArMTg1LDcgQEAKIAkJcGljX3NldF9pcnExKCZzLT5waWNzWzBdLCAyLCAwKTsKIAl9CiAJaXJxID0gcGljX2dldF9pcnEoJnMtPnBpY3NbMF0pOwotCWlmIChpcnEgPj0gMCkKLQkJcy0+aXJxX3JlcXVlc3Qocy0+aXJxX3JlcXVlc3Rfb3BhcXVlLCAxKTsKLQllbHNlCi0JCXMtPmlycV9yZXF1ZXN0KHMtPmlycV9yZXF1ZXN0X29wYXF1ZSwgMCk7CisJcGljX2lycV9yZXF1ZXN0KHMtPmt2bSwgaXJxID49IDApOwogfQogCiB2b2lkIGt2bV9waWNfdXBkYXRlX2lycShzdHJ1Y3Qga3ZtX3BpYyAqcykKQEAgLTI2MSw4ICsyNzAsNyBAQAogdm9pZCBrdm1fcGljX3Jlc2V0KHN0cnVjdCBrdm1fa3BpY19zdGF0ZSAqcykKIHsKIAlpbnQgaXJxOwotCXN0cnVjdCBrdm0gKmt2bSA9IHMtPnBpY3Nfc3RhdGUtPmlycV9yZXF1ZXN0X29wYXF1ZTsKLQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUwID0ga3ZtLT5ic3BfdmNwdTsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUwID0gcy0+cGljc19zdGF0ZS0+a3ZtLT5ic3BfdmNwdTsKIAl1OCBpcnIgPSBzLT5pcnIsIGlzciA9IHMtPmltcjsKIAogCXMtPmxhc3RfaXJyID0gMDsKQEAgLTMwMSw4ICszMDksNyBAQAogCQkJLyoKIAkJCSAqIGRlYXNzZXJ0IGEgcGVuZGluZyBpbnRlcnJ1cHQKIAkJCSAqLwotCQkJcy0+cGljc19zdGF0ZS0+aXJxX3JlcXVlc3Qocy0+cGljc19zdGF0ZS0+Ci0JCQkJCQkgICBpcnFfcmVxdWVzdF9vcGFxdWUsIDApOworCQkJcGljX2lycV9yZXF1ZXN0KHMtPnBpY3Nfc3RhdGUtPmt2bSwgMCk7CiAJCQlzLT5pbml0X3N0YXRlID0gMTsKIAkJCXMtPmluaXQ0ID0gdmFsICYgMTsKIAkJCWlmICh2YWwgJiAweDAyKQpAQCAtMzU2LDEwICszNjMsMjAgQEAKIAkJfQogCX0gZWxzZQogCQlzd2l0Y2ggKHMtPmluaXRfc3RhdGUpIHsKLQkJY2FzZSAwOgkJLyogbm9ybWFsIG1vZGUgKi8KKwkJY2FzZSAwOiB7IC8qIG5vcm1hbCBtb2RlICovCisJCQl1OCBpbXJfZGlmZiA9IHMtPmltciBeIHZhbCwKKwkJCQlvZmYgPSAocyA9PSAmcy0+cGljc19zdGF0ZS0+cGljc1swXSkgPyAwIDogODsKIAkJCXMtPmltciA9IHZhbDsKKwkJCWZvciAoaXJxID0gMDsgaXJxIDwgUElDX05VTV9QSU5TLzI7IGlycSsrKQorCQkJCWlmIChpbXJfZGlmZiAmICgxIDw8IGlycSkpCisJCQkJCWt2bV9maXJlX21hc2tfbm90aWZpZXJzKAorCQkJCQkJcy0+cGljc19zdGF0ZS0+a3ZtLAorCQkJCQkJU0VMRUNUX1BJQyhpcnEgKyBvZmYpLAorCQkJCQkJaXJxICsgb2ZmLAorCQkJCQkJISEocy0+aW1yICYgKDEgPDwgaXJxKSkpOwogCQkJcGljX3VwZGF0ZV9pcnEocy0+cGljc19zdGF0ZSk7CiAJCQlicmVhazsKKwkJfQogCQljYXNlIDE6CiAJCQlzLT5pcnFfYmFzZSA9IHZhbCAmIDB4Zjg7CiAJCQlzLT5pbml0X3N0YXRlID0gMjsKQEAgLTUxOCw5ICs1MzUsOCBAQAogLyoKICAqIGNhbGxiYWNrIHdoZW4gUElDMCBpcnEgc3RhdHVzIGNoYW5nZWQKICAqLwotc3RhdGljIHZvaWQgcGljX2lycV9yZXF1ZXN0KHZvaWQgKm9wYXF1ZSwgaW50IGxldmVsKQorc3RhdGljIHZvaWQgcGljX2lycV9yZXF1ZXN0KHN0cnVjdCBrdm0gKmt2bSwgaW50IGxldmVsKQogewotCXN0cnVjdCBrdm0gKmt2bSA9IG9wYXF1ZTsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm0tPmJzcF92Y3B1OwogCXN0cnVjdCBrdm1fcGljICpzID0gcGljX2lycWNoaXAoa3ZtKTsKIAlpbnQgaXJxID0gcGljX2dldF9pcnEoJnMtPnBpY3NbMF0pOwpAQCAtNTQ5LDggKzU2NSw2IEBACiAJcy0+a3ZtID0ga3ZtOwogCXMtPnBpY3NbMF0uZWxjcl9tYXNrID0gMHhmODsKIAlzLT5waWNzWzFdLmVsY3JfbWFzayA9IDB4ZGU7Ci0Jcy0+aXJxX3JlcXVlc3QgPSBwaWNfaXJxX3JlcXVlc3Q7Ci0Jcy0+aXJxX3JlcXVlc3Rfb3BhcXVlID0ga3ZtOwogCXMtPnBpY3NbMF0ucGljc19zdGF0ZSA9IHM7CiAJcy0+cGljc1sxXS5waWNzX3N0YXRlID0gczsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lycS5jIGIvYXJjaC94ODYva3ZtL2lycS5jCmluZGV4IDk2ZGZiYjYuLjIwOTVhMDQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pcnEuYworKysgYi9hcmNoL3g4Ni9rdm0vaXJxLmMKQEAgLTEsNiArMSw3IEBACiAvKgogICogaXJxLmM6IEFQSSBmb3IgaW4ga2VybmVsIGludGVycnVwdCBjb250cm9sbGVyCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIEludGVsIENvcnBvcmF0aW9uLgorICogQ29weXJpZ2h0IDIwMDkgUmVkIEhhdCwgSW5jLiBhbmQvb3IgaXRzIGFmZmlsYXRlcy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTg5LDcgKzkwLDYgQEAKIHZvaWQga3ZtX2luamVjdF9wZW5kaW5nX3RpbWVyX2lycXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCWt2bV9pbmplY3RfYXBpY190aW1lcl9pcnFzKHZjcHUpOwotCWt2bV9pbmplY3RfcGl0X3RpbWVyX2lycXModmNwdSk7CiAJLyogVE9ETzogUElULCBSVEMgZXRjLiAqLwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2luamVjdF9wZW5kaW5nX3RpbWVyX2lycXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lycS5oIGIvYXJjaC94ODYva3ZtL2lycS5oCmluZGV4IGNkMWYzNjIuLmZmZWQwNjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pcnEuaAorKysgYi9hcmNoL3g4Ni9rdm0vaXJxLmgKQEAgLTM4LDggKzM4LDYgQEAKIHN0cnVjdCBrdm07CiBzdHJ1Y3Qga3ZtX3ZjcHU7CiAKLXR5cGVkZWYgdm9pZCBpcnFfcmVxdWVzdF9mdW5jKHZvaWQgKm9wYXF1ZSwgaW50IGxldmVsKTsKLQogc3RydWN0IGt2bV9rcGljX3N0YXRlIHsKIAl1OCBsYXN0X2lycjsJLyogZWRnZSBkZXRlY3Rpb24gKi8KIAl1OCBpcnI7CQkvKiBpbnRlcnJ1cHQgcmVxdWVzdCByZWdpc3RlciAqLwpAQCAtNjcsOCArNjUsNiBAQAogCXVuc2lnbmVkIHBlbmRpbmdfYWNrczsKIAlzdHJ1Y3Qga3ZtICprdm07CiAJc3RydWN0IGt2bV9rcGljX3N0YXRlIHBpY3NbMl07IC8qIDAgaXMgbWFzdGVyIHBpYywgMSBpcyBzbGF2ZSBwaWMgKi8KLQlpcnFfcmVxdWVzdF9mdW5jICppcnFfcmVxdWVzdDsKLQl2b2lkICppcnFfcmVxdWVzdF9vcGFxdWU7CiAJaW50IG91dHB1dDsJCS8qIGludHIgZnJvbSBtYXN0ZXIgUElDICovCiAJc3RydWN0IGt2bV9pb19kZXZpY2UgZGV2OwogCXZvaWQgKCphY2tfbm90aWZpZXIpKHZvaWQgKm9wYXF1ZSwgaW50IGlycSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0va3ZtX2NhY2hlX3JlZ3MuaCBiL2FyY2gveDg2L2t2bS9rdm1fY2FjaGVfcmVncy5oCmluZGV4IGNmZjg1MWMuLjY0OTFhYzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9rdm1fY2FjaGVfcmVncy5oCisrKyBiL2FyY2gveDg2L2t2bS9rdm1fY2FjaGVfcmVncy5oCkBAIC0zNiw2ICszNiw4IEBACiAKIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9wZHB0cl9yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGluZGV4KQogeworCW1pZ2h0X3NsZWVwKCk7ICAvKiBvbiBzdm0gKi8KKwogCWlmICghdGVzdF9iaXQoVkNQVV9FWFJFR19QRFBUUiwKIAkJICAgICAgKHVuc2lnbmVkIGxvbmcgKikmdmNwdS0+YXJjaC5yZWdzX2F2YWlsKSkKIAkJa3ZtX3g4Nl9vcHMtPmNhY2hlX3JlZyh2Y3B1LCBWQ1BVX0VYUkVHX1BEUFRSKTsKQEAgLTY5LDQgKzcxLDEwIEBACiAJcmV0dXJuIGt2bV9yZWFkX2NyNF9iaXRzKHZjcHUsIH4wVUwpOwogfQogCitzdGF0aWMgaW5saW5lIHU2NCBrdm1fcmVhZF9lZHhfZWF4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlyZXR1cm4gKGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQVgpICYgLTF1KQorCQl8ICgodTY0KShrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkRYKSAmIC0xdSkgPDwgMzIpOworfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9sYXBpYy5jIGIvYXJjaC94ODYva3ZtL2xhcGljLmMKaW5kZXggMWViN2E0YS4uNzdkOGMwZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2xhcGljLmMKKysrIGIvYXJjaC94ODYva3ZtL2xhcGljLmMKQEAgLTUsNiArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUXVtcmFuZXQsIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAwNyBOb3ZlbGwKICAqIENvcHlyaWdodCAoQykgMjAwNyBJbnRlbAorICogQ29weXJpZ2h0IDIwMDkgUmVkIEhhdCwgSW5jLiBhbmQvb3IgaXRzIGFmZmlsYXRlcy4KICAqCiAgKiBBdXRob3JzOgogICogICBEb3IgTGFvciA8ZG9yLmxhb3JAcXVtcmFuZXQuY29tPgpAQCAtMzI4LDcgKzMyOSw3IEBACiAJCSAgICJkZXN0X21vZGUgMHgleCwgc2hvcnRfaGFuZCAweCV4XG4iLAogCQkgICB0YXJnZXQsIHNvdXJjZSwgZGVzdCwgZGVzdF9tb2RlLCBzaG9ydF9oYW5kKTsKIAotCUFTU0VSVCghdGFyZ2V0KTsKKwlBU1NFUlQodGFyZ2V0KTsKIAlzd2l0Y2ggKHNob3J0X2hhbmQpIHsKIAljYXNlIEFQSUNfREVTVF9OT1NIT1JUOgogCQlpZiAoZGVzdF9tb2RlID09IDApCkBAIC01MzMsNyArNTM0LDcgQEAKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBhcGljLT52Y3B1OwogCXN0cnVjdCBrdm1fcnVuICpydW4gPSB2Y3B1LT5ydW47CiAKLQlzZXRfYml0KEtWTV9SRVFfUkVQT1JUX1RQUl9BQ0NFU1MsICZ2Y3B1LT5yZXF1ZXN0cyk7CisJa3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFUE9SVF9UUFJfQUNDRVNTLCB2Y3B1KTsKIAlydW4tPnRwcl9hY2Nlc3MucmlwID0ga3ZtX3JpcF9yZWFkKHZjcHUpOwogCXJ1bi0+dHByX2FjY2Vzcy5pc193cml0ZSA9IHdyaXRlOwogfQpAQCAtMTEwNiwxMyArMTEwNywxMSBAQAogCXUzMiBsdnQwID0gYXBpY19nZXRfcmVnKHZjcHUtPmFyY2guYXBpYywgQVBJQ19MVlQwKTsKIAlpbnQgciA9IDA7CiAKLQlpZiAoa3ZtX3ZjcHVfaXNfYnNwKHZjcHUpKSB7Ci0JCWlmICghYXBpY19od19lbmFibGVkKHZjcHUtPmFyY2guYXBpYykpCi0JCQlyID0gMTsKLQkJaWYgKChsdnQwICYgQVBJQ19MVlRfTUFTS0VEKSA9PSAwICYmCi0JCSAgICBHRVRfQVBJQ19ERUxJVkVSWV9NT0RFKGx2dDApID09IEFQSUNfTU9ERV9FWFRJTlQpCi0JCQlyID0gMTsKLQl9CisJaWYgKCFhcGljX2h3X2VuYWJsZWQodmNwdS0+YXJjaC5hcGljKSkKKwkJciA9IDE7CisJaWYgKChsdnQwICYgQVBJQ19MVlRfTUFTS0VEKSA9PSAwICYmCisJICAgIEdFVF9BUElDX0RFTElWRVJZX01PREUobHZ0MCkgPT0gQVBJQ19NT0RFX0VYVElOVCkKKwkJciA9IDE7CiAJcmV0dXJuIHI7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUuYwppbmRleCBhNmY2OTVkLi4zMTFmNmRhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11LmMKKysrIGIvYXJjaC94ODYva3ZtL21tdS5jCkBAIC03LDYgKzcsNyBAQAogICogTU1VIHN1cHBvcnQKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUXVtcmFuZXQsIEluYy4KKyAqIENvcHlyaWdodCAyMDEwIFJlZCBIYXQsIEluYy4gYW5kL29yIGl0cyBhZmZpbGF0ZXMuCiAgKgogICogQXV0aG9yczoKICAqICAgWWFuaXYgS2FtYXkgIDx5YW5pdkBxdW1yYW5ldC5jb20+CkBAIC0zMiw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zcmN1Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KQEAgLTkwLDggKzkyLDYgQEAKICNkZWZpbmUgUFRfRklSU1RfQVZBSUxfQklUU19TSElGVCA5CiAjZGVmaW5lIFBUNjRfU0VDT05EX0FWQUlMX0JJVFNfU0hJRlQgNTIKIAotI2RlZmluZSBWQUxJRF9QQUdFKHgpICgoeCkgIT0gSU5WQUxJRF9QQUdFKQotCiAjZGVmaW5lIFBUNjRfTEVWRUxfQklUUyA5CiAKICNkZWZpbmUgUFQ2NF9MRVZFTF9TSElGVChsZXZlbCkgXApAQCAtMTczLDcgKzE3Myw3IEBACiAJICAgICBzaGFkb3dfd2Fsa19va2F5KCYoX3dhbGtlcikpOwkJCVwKIAkgICAgIHNoYWRvd193YWxrX25leHQoJihfd2Fsa2VyKSkpCiAKLXR5cGVkZWYgaW50ICgqbW11X3BhcmVudF93YWxrX2ZuKSAoc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApOwordHlwZWRlZiB2b2lkICgqbW11X3BhcmVudF93YWxrX2ZuKSAoc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsIHU2NCAqc3B0ZSk7CiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcHRlX2NoYWluX2NhY2hlOwogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpybWFwX2Rlc2NfY2FjaGU7CkBAIC0yODEsMTMgKzI4MSwzOCBAQAogCiBzdGF0aWMgdm9pZCBfX3NldF9zcHRlKHU2NCAqc3B0ZXAsIHU2NCBzcHRlKQogeworCXNldF82NGJpdChzcHRlcCwgc3B0ZSk7Cit9CisKK3N0YXRpYyB1NjQgX194Y2hnX3NwdGUodTY0ICpzcHRlcCwgdTY0IG5ld19zcHRlKQorewogI2lmZGVmIENPTkZJR19YODZfNjQKLQlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgKilzcHRlcCwgc3B0ZSk7CisJcmV0dXJuIHhjaGcoc3B0ZXAsIG5ld19zcHRlKTsKICNlbHNlCi0Jc2V0XzY0Yml0KCh1bnNpZ25lZCBsb25nIGxvbmcgKilzcHRlcCwgc3B0ZSk7CisJdTY0IG9sZF9zcHRlOworCisJZG8geworCQlvbGRfc3B0ZSA9ICpzcHRlcDsKKwl9IHdoaWxlIChjbXB4Y2hnNjQoc3B0ZXAsIG9sZF9zcHRlLCBuZXdfc3B0ZSkgIT0gb2xkX3NwdGUpOworCisJcmV0dXJuIG9sZF9zcHRlOwogI2VuZGlmCiB9CiAKK3N0YXRpYyB2b2lkIHVwZGF0ZV9zcHRlKHU2NCAqc3B0ZXAsIHU2NCBuZXdfc3B0ZSkKK3sKKwl1NjQgb2xkX3NwdGU7CisKKwlpZiAoIXNoYWRvd19hY2Nlc3NlZF9tYXNrIHx8IChuZXdfc3B0ZSAmIHNoYWRvd19hY2Nlc3NlZF9tYXNrKSB8fAorCSAgICAgICFpc19ybWFwX3NwdGUoKnNwdGVwKSkKKwkJX19zZXRfc3B0ZShzcHRlcCwgbmV3X3NwdGUpOworCWVsc2UgeworCQlvbGRfc3B0ZSA9IF9feGNoZ19zcHRlKHNwdGVwLCBuZXdfc3B0ZSk7CisJCWlmIChvbGRfc3B0ZSAmIHNoYWRvd19hY2Nlc3NlZF9tYXNrKQorCQkJbWFya19wYWdlX2FjY2Vzc2VkKHBmbl90b19wYWdlKHNwdGVfdG9fcGZuKG9sZF9zcHRlKSkpOworCX0KK30KKwogc3RhdGljIGludCBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlKHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqY2FjaGUsCiAJCQkJICBzdHJ1Y3Qga21lbV9jYWNoZSAqYmFzZV9jYWNoZSwgaW50IG1pbikKIHsKQEAgLTMwNCwxMCArMzI5LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG1tdV9mcmVlX21lbW9yeV9jYWNoZShzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKm1jKQorc3RhdGljIHZvaWQgbW11X2ZyZWVfbWVtb3J5X2NhY2hlKHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqbWMsCisJCQkJICBzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUpCiB7CiAJd2hpbGUgKG1jLT5ub2JqcykKLQkJa2ZyZWUobWMtPm9iamVjdHNbLS1tYy0+bm9ianNdKTsKKwkJa21lbV9jYWNoZV9mcmVlKGNhY2hlLCBtYy0+b2JqZWN0c1stLW1jLT5ub2Jqc10pOwogfQogCiBzdGF0aWMgaW50IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVfcGFnZShzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKmNhY2hlLApAQCAtMzU1LDEwICszODEsMTEgQEAKIAogc3RhdGljIHZvaWQgbW11X2ZyZWVfbWVtb3J5X2NhY2hlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JbW11X2ZyZWVfbWVtb3J5X2NhY2hlKCZ2Y3B1LT5hcmNoLm1tdV9wdGVfY2hhaW5fY2FjaGUpOwotCW1tdV9mcmVlX21lbW9yeV9jYWNoZSgmdmNwdS0+YXJjaC5tbXVfcm1hcF9kZXNjX2NhY2hlKTsKKwltbXVfZnJlZV9tZW1vcnlfY2FjaGUoJnZjcHUtPmFyY2gubW11X3B0ZV9jaGFpbl9jYWNoZSwgcHRlX2NoYWluX2NhY2hlKTsKKwltbXVfZnJlZV9tZW1vcnlfY2FjaGUoJnZjcHUtPmFyY2gubW11X3JtYXBfZGVzY19jYWNoZSwgcm1hcF9kZXNjX2NhY2hlKTsKIAltbXVfZnJlZV9tZW1vcnlfY2FjaGVfcGFnZSgmdmNwdS0+YXJjaC5tbXVfcGFnZV9jYWNoZSk7Ci0JbW11X2ZyZWVfbWVtb3J5X2NhY2hlKCZ2Y3B1LT5hcmNoLm1tdV9wYWdlX2hlYWRlcl9jYWNoZSk7CisJbW11X2ZyZWVfbWVtb3J5X2NhY2hlKCZ2Y3B1LT5hcmNoLm1tdV9wYWdlX2hlYWRlcl9jYWNoZSwKKwkJCQltbXVfcGFnZV9oZWFkZXJfY2FjaGUpOwogfQogCiBzdGF0aWMgdm9pZCAqbW11X21lbW9yeV9jYWNoZV9hbGxvYyhzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKm1jLApAQCAtMzc5LDcgKzQwNiw3IEBACiAKIHN0YXRpYyB2b2lkIG1tdV9mcmVlX3B0ZV9jaGFpbihzdHJ1Y3Qga3ZtX3B0ZV9jaGFpbiAqcGMpCiB7Ci0Ja2ZyZWUocGMpOworCWttZW1fY2FjaGVfZnJlZShwdGVfY2hhaW5fY2FjaGUsIHBjKTsKIH0KIAogc3RhdGljIHN0cnVjdCBrdm1fcm1hcF9kZXNjICptbXVfYWxsb2Nfcm1hcF9kZXNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTM5MCw3ICs0MTcsMjMgQEAKIAogc3RhdGljIHZvaWQgbW11X2ZyZWVfcm1hcF9kZXNjKHN0cnVjdCBrdm1fcm1hcF9kZXNjICpyZCkKIHsKLQlrZnJlZShyZCk7CisJa21lbV9jYWNoZV9mcmVlKHJtYXBfZGVzY19jYWNoZSwgcmQpOworfQorCitzdGF0aWMgZ2ZuX3Qga3ZtX21tdV9wYWdlX2dldF9nZm4oc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsIGludCBpbmRleCkKK3sKKwlpZiAoIXNwLT5yb2xlLmRpcmVjdCkKKwkJcmV0dXJuIHNwLT5nZm5zW2luZGV4XTsKKworCXJldHVybiBzcC0+Z2ZuICsgKGluZGV4IDw8ICgoc3AtPnJvbGUubGV2ZWwgLSAxKSAqIFBUNjRfTEVWRUxfQklUUykpOworfQorCitzdGF0aWMgdm9pZCBrdm1fbW11X3BhZ2Vfc2V0X2dmbihzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwgaW50IGluZGV4LCBnZm5fdCBnZm4pCit7CisJaWYgKHNwLT5yb2xlLmRpcmVjdCkKKwkJQlVHX09OKGdmbiAhPSBrdm1fbW11X3BhZ2VfZ2V0X2dmbihzcCwgaW5kZXgpKTsKKwllbHNlCisJCXNwLT5nZm5zW2luZGV4XSA9IGdmbjsKIH0KIAogLyoKQEAgLTQwMyw4ICs0NDYsOCBAQAogewogCXVuc2lnbmVkIGxvbmcgaWR4OwogCi0JaWR4ID0gKGdmbiAvIEtWTV9QQUdFU19QRVJfSFBBR0UobGV2ZWwpKSAtCi0JICAgICAgKHNsb3QtPmJhc2VfZ2ZuIC8gS1ZNX1BBR0VTX1BFUl9IUEFHRShsZXZlbCkpOworCWlkeCA9IChnZm4gPj4gS1ZNX0hQQUdFX0dGTl9TSElGVChsZXZlbCkpIC0KKwkgICAgICAoc2xvdC0+YmFzZV9nZm4gPj4gS1ZNX0hQQUdFX0dGTl9TSElGVChsZXZlbCkpOwogCXJldHVybiAmc2xvdC0+bHBhZ2VfaW5mb1tsZXZlbCAtIDJdW2lkeF0ud3JpdGVfY291bnQ7CiB9CiAKQEAgLTQxNCw5ICs0NTcsNyBAQAogCWludCAqd3JpdGVfY291bnQ7CiAJaW50IGk7CiAKLQlnZm4gPSB1bmFsaWFzX2dmbihrdm0sIGdmbik7Ci0KLQlzbG90ID0gZ2ZuX3RvX21lbXNsb3RfdW5hbGlhc2VkKGt2bSwgZ2ZuKTsKKwlzbG90ID0gZ2ZuX3RvX21lbXNsb3Qoa3ZtLCBnZm4pOwogCWZvciAoaSA9IFBUX0RJUkVDVE9SWV9MRVZFTDsKIAkgICAgIGkgPCBQVF9QQUdFX1RBQkxFX0xFVkVMICsgS1ZNX05SX1BBR0VfU0laRVM7ICsraSkgewogCQl3cml0ZV9jb3VudCAgID0gc2xvdF9sYXJnZXBhZ2VfaWR4KGdmbiwgc2xvdCwgaSk7CkBAIC00MzAsOCArNDcxLDcgQEAKIAlpbnQgKndyaXRlX2NvdW50OwogCWludCBpOwogCi0JZ2ZuID0gdW5hbGlhc19nZm4oa3ZtLCBnZm4pOwotCXNsb3QgPSBnZm5fdG9fbWVtc2xvdF91bmFsaWFzZWQoa3ZtLCBnZm4pOworCXNsb3QgPSBnZm5fdG9fbWVtc2xvdChrdm0sIGdmbik7CiAJZm9yIChpID0gUFRfRElSRUNUT1JZX0xFVkVMOwogCSAgICAgaSA8IFBUX1BBR0VfVEFCTEVfTEVWRUwgKyBLVk1fTlJfUEFHRV9TSVpFUzsgKytpKSB7CiAJCXdyaXRlX2NvdW50ICAgPSBzbG90X2xhcmdlcGFnZV9pZHgoZ2ZuLCBzbG90LCBpKTsKQEAgLTQ0Nyw4ICs0ODcsNyBAQAogCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7CiAJaW50ICpsYXJnZXBhZ2VfaWR4OwogCi0JZ2ZuID0gdW5hbGlhc19nZm4oa3ZtLCBnZm4pOwotCXNsb3QgPSBnZm5fdG9fbWVtc2xvdF91bmFsaWFzZWQoa3ZtLCBnZm4pOworCXNsb3QgPSBnZm5fdG9fbWVtc2xvdChrdm0sIGdmbik7CiAJaWYgKHNsb3QpIHsKIAkJbGFyZ2VwYWdlX2lkeCA9IHNsb3RfbGFyZ2VwYWdlX2lkeChnZm4sIHNsb3QsIGxldmVsKTsKIAkJcmV0dXJuICpsYXJnZXBhZ2VfaWR4OwpAQCAtNTAxLDcgKzU0MCw2IEBACiAKIC8qCiAgKiBUYWtlIGdmbiBhbmQgcmV0dXJuIHRoZSByZXZlcnNlIG1hcHBpbmcgdG8gaXQuCi0gKiBOb3RlOiBnZm4gbXVzdCBiZSB1bmFsaWFzZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gZ2V0IGNhbGxlZAogICovCiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nICpnZm5fdG9fcm1hcChzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgaW50IGxldmVsKQpAQCAtNTEzLDggKzU1MSw4IEBACiAJaWYgKGxpa2VseShsZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMKSkKIAkJcmV0dXJuICZzbG90LT5ybWFwW2dmbiAtIHNsb3QtPmJhc2VfZ2ZuXTsKIAotCWlkeCA9IChnZm4gLyBLVk1fUEFHRVNfUEVSX0hQQUdFKGxldmVsKSkgLQotCQkoc2xvdC0+YmFzZV9nZm4gLyBLVk1fUEFHRVNfUEVSX0hQQUdFKGxldmVsKSk7CisJaWR4ID0gKGdmbiA+PiBLVk1fSFBBR0VfR0ZOX1NISUZUKGxldmVsKSkgLQorCQkoc2xvdC0+YmFzZV9nZm4gPj4gS1ZNX0hQQUdFX0dGTl9TSElGVChsZXZlbCkpOwogCiAJcmV0dXJuICZzbG90LT5scGFnZV9pbmZvW2xldmVsIC0gMl1baWR4XS5ybWFwX3BkZTsKIH0KQEAgLTU0MSw5ICs1NzksOCBAQAogCiAJaWYgKCFpc19ybWFwX3NwdGUoKnNwdGUpKQogCQlyZXR1cm4gY291bnQ7Ci0JZ2ZuID0gdW5hbGlhc19nZm4odmNwdS0+a3ZtLCBnZm4pOwogCXNwID0gcGFnZV9oZWFkZXIoX19wYShzcHRlKSk7Ci0Jc3AtPmdmbnNbc3B0ZSAtIHNwLT5zcHRdID0gZ2ZuOworCWt2bV9tbXVfcGFnZV9zZXRfZ2ZuKHNwLCBzcHRlIC0gc3AtPnNwdCwgZ2ZuKTsKIAlybWFwcCA9IGdmbl90b19ybWFwKHZjcHUtPmt2bSwgZ2ZuLCBzcC0+cm9sZS5sZXZlbCk7CiAJaWYgKCEqcm1hcHApIHsKIAkJcm1hcF9wcmludGsoInJtYXBfYWRkOiAlcCAlbGx4IDAtPjFcbiIsIHNwdGUsICpzcHRlKTsKQEAgLTYwMCwxOSArNjM3LDEzIEBACiAJc3RydWN0IGt2bV9ybWFwX2Rlc2MgKmRlc2M7CiAJc3RydWN0IGt2bV9ybWFwX2Rlc2MgKnByZXZfZGVzYzsKIAlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKLQlwZm5fdCBwZm47CisJZ2ZuX3QgZ2ZuOwogCXVuc2lnbmVkIGxvbmcgKnJtYXBwOwogCWludCBpOwogCi0JaWYgKCFpc19ybWFwX3NwdGUoKnNwdGUpKQotCQlyZXR1cm47CiAJc3AgPSBwYWdlX2hlYWRlcihfX3BhKHNwdGUpKTsKLQlwZm4gPSBzcHRlX3RvX3Bmbigqc3B0ZSk7Ci0JaWYgKCpzcHRlICYgc2hhZG93X2FjY2Vzc2VkX21hc2spCi0JCWt2bV9zZXRfcGZuX2FjY2Vzc2VkKHBmbik7Ci0JaWYgKGlzX3dyaXRhYmxlX3B0ZSgqc3B0ZSkpCi0JCWt2bV9zZXRfcGZuX2RpcnR5KHBmbik7Ci0Jcm1hcHAgPSBnZm5fdG9fcm1hcChrdm0sIHNwLT5nZm5zW3NwdGUgLSBzcC0+c3B0XSwgc3AtPnJvbGUubGV2ZWwpOworCWdmbiA9IGt2bV9tbXVfcGFnZV9nZXRfZ2ZuKHNwLCBzcHRlIC0gc3AtPnNwdCk7CisJcm1hcHAgPSBnZm5fdG9fcm1hcChrdm0sIGdmbiwgc3AtPnJvbGUubGV2ZWwpOwogCWlmICghKnJtYXBwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAicm1hcF9yZW1vdmU6ICVwICVsbHggMC0+QlVHXG4iLCBzcHRlLCAqc3B0ZSk7CiAJCUJVRygpOwpAQCAtNjQ0LDYgKzY3NSwzMiBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgc2V0X3NwdGVfdHJhY2tfYml0cyh1NjQgKnNwdGVwLCB1NjQgbmV3X3NwdGUpCit7CisJcGZuX3QgcGZuOworCXU2NCBvbGRfc3B0ZSA9ICpzcHRlcDsKKworCWlmICghc2hhZG93X2FjY2Vzc2VkX21hc2sgfHwgIWlzX3NoYWRvd19wcmVzZW50X3B0ZShvbGRfc3B0ZSkgfHwKKwkgICAgICBvbGRfc3B0ZSAmIHNoYWRvd19hY2Nlc3NlZF9tYXNrKSB7CisJCV9fc2V0X3NwdGUoc3B0ZXAsIG5ld19zcHRlKTsKKwl9IGVsc2UKKwkJb2xkX3NwdGUgPSBfX3hjaGdfc3B0ZShzcHRlcCwgbmV3X3NwdGUpOworCisJaWYgKCFpc19ybWFwX3NwdGUob2xkX3NwdGUpKQorCQlyZXR1cm47CisJcGZuID0gc3B0ZV90b19wZm4ob2xkX3NwdGUpOworCWlmICghc2hhZG93X2FjY2Vzc2VkX21hc2sgfHwgb2xkX3NwdGUgJiBzaGFkb3dfYWNjZXNzZWRfbWFzaykKKwkJa3ZtX3NldF9wZm5fYWNjZXNzZWQocGZuKTsKKwlpZiAoaXNfd3JpdGFibGVfcHRlKG9sZF9zcHRlKSkKKwkJa3ZtX3NldF9wZm5fZGlydHkocGZuKTsKK30KKworc3RhdGljIHZvaWQgZHJvcF9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICpzcHRlcCwgdTY0IG5ld19zcHRlKQoreworCXNldF9zcHRlX3RyYWNrX2JpdHMoc3B0ZXAsIG5ld19zcHRlKTsKKwlybWFwX3JlbW92ZShrdm0sIHNwdGVwKTsKK30KKwogc3RhdGljIHU2NCAqcm1hcF9uZXh0KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqcm1hcHAsIHU2NCAqc3B0ZSkKIHsKIAlzdHJ1Y3Qga3ZtX3JtYXBfZGVzYyAqZGVzYzsKQEAgLTY3Niw3ICs3MzMsNiBAQAogCXU2NCAqc3B0ZTsKIAlpbnQgaSwgd3JpdGVfcHJvdGVjdGVkID0gMDsKIAotCWdmbiA9IHVuYWxpYXNfZ2ZuKGt2bSwgZ2ZuKTsKIAlybWFwcCA9IGdmbl90b19ybWFwKGt2bSwgZ2ZuLCBQVF9QQUdFX1RBQkxFX0xFVkVMKTsKIAogCXNwdGUgPSBybWFwX25leHQoa3ZtLCBybWFwcCwgTlVMTCk7CkBAIC02ODUsNyArNzQxLDcgQEAKIAkJQlVHX09OKCEoKnNwdGUgJiBQVF9QUkVTRU5UX01BU0spKTsKIAkJcm1hcF9wcmludGsoInJtYXBfd3JpdGVfcHJvdGVjdDogc3B0ZSAlcCAlbGx4XG4iLCBzcHRlLCAqc3B0ZSk7CiAJCWlmIChpc193cml0YWJsZV9wdGUoKnNwdGUpKSB7Ci0JCQlfX3NldF9zcHRlKHNwdGUsICpzcHRlICYgflBUX1dSSVRBQkxFX01BU0spOworCQkJdXBkYXRlX3NwdGUoc3B0ZSwgKnNwdGUgJiB+UFRfV1JJVEFCTEVfTUFTSyk7CiAJCQl3cml0ZV9wcm90ZWN0ZWQgPSAxOwogCQl9CiAJCXNwdGUgPSBybWFwX25leHQoa3ZtLCBybWFwcCwgc3B0ZSk7CkBAIC03MDksOSArNzY1LDkgQEAKIAkJCUJVR19PTigoKnNwdGUgJiAoUFRfUEFHRV9TSVpFX01BU0t8UFRfUFJFU0VOVF9NQVNLKSkgIT0gKFBUX1BBR0VfU0laRV9NQVNLfFBUX1BSRVNFTlRfTUFTSykpOwogCQkJcGdwcmludGsoInJtYXBfd3JpdGVfcHJvdGVjdChsYXJnZSk6IHNwdGUgJXAgJWxseCAlbGxkXG4iLCBzcHRlLCAqc3B0ZSwgZ2ZuKTsKIAkJCWlmIChpc193cml0YWJsZV9wdGUoKnNwdGUpKSB7Ci0JCQkJcm1hcF9yZW1vdmUoa3ZtLCBzcHRlKTsKKwkJCQlkcm9wX3NwdGUoa3ZtLCBzcHRlLAorCQkJCQkgIHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKTsKIAkJCQktLWt2bS0+c3RhdC5scGFnZXM7Ci0JCQkJX19zZXRfc3B0ZShzcHRlLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CiAJCQkJc3B0ZSA9IE5VTEw7CiAJCQkJd3JpdGVfcHJvdGVjdGVkID0gMTsKIAkJCX0KQEAgLTczMSw4ICs3ODcsNyBAQAogCXdoaWxlICgoc3B0ZSA9IHJtYXBfbmV4dChrdm0sIHJtYXBwLCBOVUxMKSkpIHsKIAkJQlVHX09OKCEoKnNwdGUgJiBQVF9QUkVTRU5UX01BU0spKTsKIAkJcm1hcF9wcmludGsoImt2bV9ybWFwX3VubWFwX2h2YTogc3B0ZSAlcCAlbGx4XG4iLCBzcHRlLCAqc3B0ZSk7Ci0JCXJtYXBfcmVtb3ZlKGt2bSwgc3B0ZSk7Ci0JCV9fc2V0X3NwdGUoc3B0ZSwgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOworCQlkcm9wX3NwdGUoa3ZtLCBzcHRlLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CiAJCW5lZWRfdGxiX2ZsdXNoID0gMTsKIAl9CiAJcmV0dXJuIG5lZWRfdGxiX2ZsdXNoOwpAQCAtNzU0LDggKzgwOSw3IEBACiAJCXJtYXBfcHJpbnRrKCJrdm1fc2V0X3B0ZV9ybWFwcDogc3B0ZSAlcCAlbGx4XG4iLCBzcHRlLCAqc3B0ZSk7CiAJCW5lZWRfZmx1c2ggPSAxOwogCQlpZiAocHRlX3dyaXRlKCpwdGVwKSkgewotCQkJcm1hcF9yZW1vdmUoa3ZtLCBzcHRlKTsKLQkJCV9fc2V0X3NwdGUoc3B0ZSwgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOworCQkJZHJvcF9zcHRlKGt2bSwgc3B0ZSwgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOwogCQkJc3B0ZSA9IHJtYXBfbmV4dChrdm0sIHJtYXBwLCBOVUxMKTsKIAkJfSBlbHNlIHsKIAkJCW5ld19zcHRlID0gKnNwdGUgJn4gKFBUNjRfQkFTRV9BRERSX01BU0spOwpAQCAtNzYzLDkgKzgxNyw4IEBACiAKIAkJCW5ld19zcHRlICY9IH5QVF9XUklUQUJMRV9NQVNLOwogCQkJbmV3X3NwdGUgJj0gflNQVEVfSE9TVF9XUklURUFCTEU7Ci0JCQlpZiAoaXNfd3JpdGFibGVfcHRlKCpzcHRlKSkKLQkJCQlrdm1fc2V0X3Bmbl9kaXJ0eShzcHRlX3RvX3Bmbigqc3B0ZSkpOwotCQkJX19zZXRfc3B0ZShzcHRlLCBuZXdfc3B0ZSk7CisJCQluZXdfc3B0ZSAmPSB+c2hhZG93X2FjY2Vzc2VkX21hc2s7CisJCQlzZXRfc3B0ZV90cmFja19iaXRzKHNwdGUsIG5ld19zcHRlKTsKIAkJCXNwdGUgPSBybWFwX25leHQoa3ZtLCBybWFwcCwgc3B0ZSk7CiAJCX0KIAl9CkBAIC03OTksOCArODUyLDEyIEBACiAJCQlyZXQgPSBoYW5kbGVyKGt2bSwgJm1lbXNsb3QtPnJtYXBbZ2ZuX29mZnNldF0sIGRhdGEpOwogCiAJCQlmb3IgKGogPSAwOyBqIDwgS1ZNX05SX1BBR0VfU0laRVMgLSAxOyArK2opIHsKLQkJCQlpbnQgaWR4ID0gZ2ZuX29mZnNldDsKLQkJCQlpZHggLz0gS1ZNX1BBR0VTX1BFUl9IUEFHRShQVF9ESVJFQ1RPUllfTEVWRUwgKyBqKTsKKwkJCQl1bnNpZ25lZCBsb25nIGlkeDsKKwkJCQlpbnQgc2g7CisKKwkJCQlzaCA9IEtWTV9IUEFHRV9HRk5fU0hJRlQoUFRfRElSRUNUT1JZX0xFVkVMK2opOworCQkJCWlkeCA9ICgobWVtc2xvdC0+YmFzZV9nZm4rZ2ZuX29mZnNldCkgPj4gc2gpIC0KKwkJCQkJKG1lbXNsb3QtPmJhc2VfZ2ZuID4+IHNoKTsKIAkJCQlyZXQgfD0gaGFuZGxlcihrdm0sCiAJCQkJCSZtZW1zbG90LT5scGFnZV9pbmZvW2pdW2lkeF0ucm1hcF9wZGUsCiAJCQkJCWRhdGEpOwpAQCAtODYzLDcgKzkyMCw2IEBACiAKIAlzcCA9IHBhZ2VfaGVhZGVyKF9fcGEoc3B0ZSkpOwogCi0JZ2ZuID0gdW5hbGlhc19nZm4odmNwdS0+a3ZtLCBnZm4pOwogCXJtYXBwID0gZ2ZuX3RvX3JtYXAodmNwdS0+a3ZtLCBnZm4sIHNwLT5yb2xlLmxldmVsKTsKIAogCWt2bV91bm1hcF9ybWFwcCh2Y3B1LT5rdm0sIHJtYXBwLCAwKTsKQEAgLTg5NCwxMCArOTUwLDEyIEBACiBzdGF0aWMgdm9pZCBrdm1fbW11X2ZyZWVfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQogewogCUFTU0VSVChpc19lbXB0eV9zaGFkb3dfcGFnZShzcC0+c3B0KSk7CisJaGxpc3RfZGVsKCZzcC0+aGFzaF9saW5rKTsKIAlsaXN0X2RlbCgmc3AtPmxpbmspOwogCV9fZnJlZV9wYWdlKHZpcnRfdG9fcGFnZShzcC0+c3B0KSk7Ci0JX19mcmVlX3BhZ2UodmlydF90b19wYWdlKHNwLT5nZm5zKSk7Ci0Ja2ZyZWUoc3ApOworCWlmICghc3AtPnJvbGUuZGlyZWN0KQorCQlfX2ZyZWVfcGFnZSh2aXJ0X3RvX3BhZ2Uoc3AtPmdmbnMpKTsKKwlrbWVtX2NhY2hlX2ZyZWUobW11X3BhZ2VfaGVhZGVyX2NhY2hlLCBzcCk7CiAJKytrdm0tPmFyY2gubl9mcmVlX21tdV9wYWdlczsKIH0KIApAQCAtOTA3LDEzICs5NjUsMTUgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBrdm1fbW11X3BhZ2UgKmt2bV9tbXVfYWxsb2NfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkJCSAgICAgICB1NjQgKnBhcmVudF9wdGUpCisJCQkJCSAgICAgICB1NjQgKnBhcmVudF9wdGUsIGludCBkaXJlY3QpCiB7CiAJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7CiAKIAlzcCA9IG1tdV9tZW1vcnlfY2FjaGVfYWxsb2MoJnZjcHUtPmFyY2gubW11X3BhZ2VfaGVhZGVyX2NhY2hlLCBzaXplb2YgKnNwKTsKIAlzcC0+c3B0ID0gbW11X21lbW9yeV9jYWNoZV9hbGxvYygmdmNwdS0+YXJjaC5tbXVfcGFnZV9jYWNoZSwgUEFHRV9TSVpFKTsKLQlzcC0+Z2ZucyA9IG1tdV9tZW1vcnlfY2FjaGVfYWxsb2MoJnZjcHUtPmFyY2gubW11X3BhZ2VfY2FjaGUsIFBBR0VfU0laRSk7CisJaWYgKCFkaXJlY3QpCisJCXNwLT5nZm5zID0gbW11X21lbW9yeV9jYWNoZV9hbGxvYygmdmNwdS0+YXJjaC5tbXVfcGFnZV9jYWNoZSwKKwkJCQkJCSAgUEFHRV9TSVpFKTsKIAlzZXRfcGFnZV9wcml2YXRlKHZpcnRfdG9fcGFnZShzcC0+c3B0KSwgKHVuc2lnbmVkIGxvbmcpc3ApOwogCWxpc3RfYWRkKCZzcC0+bGluaywgJnZjcHUtPmt2bS0+YXJjaC5hY3RpdmVfbW11X3BhZ2VzKTsKIAliaXRtYXBfemVybyhzcC0+c2xvdF9iaXRtYXAsIEtWTV9NRU1PUllfU0xPVFMgKyBLVk1fUFJJVkFURV9NRU1fU0xPVFMpOwpAQCAtOTk4LDcgKzEwNTgsNiBAQAogCUJVRygpOwogfQogCi0KIHN0YXRpYyB2b2lkIG1tdV9wYXJlbnRfd2FsayhzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwgbW11X3BhcmVudF93YWxrX2ZuIGZuKQogewogCXN0cnVjdCBrdm1fcHRlX2NoYWluICpwdGVfY2hhaW47CkBAIC0xMDA4LDYzICsxMDY3LDM3IEBACiAKIAlpZiAoIXNwLT5tdWx0aW1hcHBlZCAmJiBzcC0+cGFyZW50X3B0ZSkgewogCQlwYXJlbnRfc3AgPSBwYWdlX2hlYWRlcihfX3BhKHNwLT5wYXJlbnRfcHRlKSk7Ci0JCWZuKHBhcmVudF9zcCk7Ci0JCW1tdV9wYXJlbnRfd2FsayhwYXJlbnRfc3AsIGZuKTsKLQkJcmV0dXJuOwotCX0KLQlobGlzdF9mb3JfZWFjaF9lbnRyeShwdGVfY2hhaW4sIG5vZGUsICZzcC0+cGFyZW50X3B0ZXMsIGxpbmspCi0JCWZvciAoaSA9IDA7IGkgPCBOUl9QVEVfQ0hBSU5fRU5UUklFUzsgKytpKSB7Ci0JCQlpZiAoIXB0ZV9jaGFpbi0+cGFyZW50X3B0ZXNbaV0pCi0JCQkJYnJlYWs7Ci0JCQlwYXJlbnRfc3AgPSBwYWdlX2hlYWRlcihfX3BhKHB0ZV9jaGFpbi0+cGFyZW50X3B0ZXNbaV0pKTsKLQkJCWZuKHBhcmVudF9zcCk7Ci0JCQltbXVfcGFyZW50X3dhbGsocGFyZW50X3NwLCBmbik7Ci0JCX0KLX0KLQotc3RhdGljIHZvaWQga3ZtX21tdV91cGRhdGVfdW5zeW5jX2JpdG1hcCh1NjQgKnNwdGUpCi17Ci0JdW5zaWduZWQgaW50IGluZGV4OwotCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwID0gcGFnZV9oZWFkZXIoX19wYShzcHRlKSk7Ci0KLQlpbmRleCA9IHNwdGUgLSBzcC0+c3B0OwotCWlmICghX190ZXN0X2FuZF9zZXRfYml0KGluZGV4LCBzcC0+dW5zeW5jX2NoaWxkX2JpdG1hcCkpCi0JCXNwLT51bnN5bmNfY2hpbGRyZW4rKzsKLQlXQVJOX09OKCFzcC0+dW5zeW5jX2NoaWxkcmVuKTsKLX0KLQotc3RhdGljIHZvaWQga3ZtX21tdV91cGRhdGVfcGFyZW50c191bnN5bmMoc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApCi17Ci0Jc3RydWN0IGt2bV9wdGVfY2hhaW4gKnB0ZV9jaGFpbjsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQlpbnQgaTsKLQotCWlmICghc3AtPnBhcmVudF9wdGUpCi0JCXJldHVybjsKLQotCWlmICghc3AtPm11bHRpbWFwcGVkKSB7Ci0JCWt2bV9tbXVfdXBkYXRlX3Vuc3luY19iaXRtYXAoc3AtPnBhcmVudF9wdGUpOworCQlmbihwYXJlbnRfc3AsIHNwLT5wYXJlbnRfcHRlKTsKIAkJcmV0dXJuOwogCX0KIAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ZV9jaGFpbiwgbm9kZSwgJnNwLT5wYXJlbnRfcHRlcywgbGluaykKIAkJZm9yIChpID0gMDsgaSA8IE5SX1BURV9DSEFJTl9FTlRSSUVTOyArK2kpIHsKLQkJCWlmICghcHRlX2NoYWluLT5wYXJlbnRfcHRlc1tpXSkKKwkJCXU2NCAqc3B0ZSA9IHB0ZV9jaGFpbi0+cGFyZW50X3B0ZXNbaV07CisKKwkJCWlmICghc3B0ZSkKIAkJCQlicmVhazsKLQkJCWt2bV9tbXVfdXBkYXRlX3Vuc3luY19iaXRtYXAocHRlX2NoYWluLT5wYXJlbnRfcHRlc1tpXSk7CisJCQlwYXJlbnRfc3AgPSBwYWdlX2hlYWRlcihfX3BhKHNwdGUpKTsKKwkJCWZuKHBhcmVudF9zcCwgc3B0ZSk7CiAJCX0KIH0KIAotc3RhdGljIGludCB1bnN5bmNfd2Fsa19mbihzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkKLXsKLQlrdm1fbW11X3VwZGF0ZV9wYXJlbnRzX3Vuc3luYyhzcCk7Ci0JcmV0dXJuIDE7Ci19Ci0KK3N0YXRpYyB2b2lkIG1hcmtfdW5zeW5jKHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLCB1NjQgKnNwdGUpOwogc3RhdGljIHZvaWQga3ZtX21tdV9tYXJrX3BhcmVudHNfdW5zeW5jKHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQogewotCW1tdV9wYXJlbnRfd2FsayhzcCwgdW5zeW5jX3dhbGtfZm4pOwotCWt2bV9tbXVfdXBkYXRlX3BhcmVudHNfdW5zeW5jKHNwKTsKKwltbXVfcGFyZW50X3dhbGsoc3AsIG1hcmtfdW5zeW5jKTsKK30KKworc3RhdGljIHZvaWQgbWFya191bnN5bmMoc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsIHU2NCAqc3B0ZSkKK3sKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CisKKwlpbmRleCA9IHNwdGUgLSBzcC0+c3B0OworCWlmIChfX3Rlc3RfYW5kX3NldF9iaXQoaW5kZXgsIHNwLT51bnN5bmNfY2hpbGRfYml0bWFwKSkKKwkJcmV0dXJuOworCWlmIChzcC0+dW5zeW5jX2NoaWxkcmVuKyspCisJCXJldHVybjsKKwlrdm1fbW11X21hcmtfcGFyZW50c191bnN5bmMoc3ApOwogfQogCiBzdGF0aWMgdm9pZCBub25wYWdpbmdfcHJlZmV0Y2hfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCkBAIC0xMDc3LDcgKzExMTAsNyBAQAogfQogCiBzdGF0aWMgaW50IG5vbnBhZ2luZ19zeW5jX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJICAgICAgIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQorCQkJICAgICAgIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLCBib29sIGNsZWFyX3Vuc3luYykKIHsKIAlyZXR1cm4gMTsKIH0KQEAgLTExMjMsMzUgKzExNTYsNDAgQEAKIAlpbnQgaSwgcmV0LCBucl91bnN5bmNfbGVhZiA9IDA7CiAKIAlmb3JfZWFjaF91bnN5bmNfY2hpbGRyZW4oc3AtPnVuc3luY19jaGlsZF9iaXRtYXAsIGkpIHsKKwkJc3RydWN0IGt2bV9tbXVfcGFnZSAqY2hpbGQ7CiAJCXU2NCBlbnQgPSBzcC0+c3B0W2ldOwogCi0JCWlmIChpc19zaGFkb3dfcHJlc2VudF9wdGUoZW50KSAmJiAhaXNfbGFyZ2VfcHRlKGVudCkpIHsKLQkJCXN0cnVjdCBrdm1fbW11X3BhZ2UgKmNoaWxkOwotCQkJY2hpbGQgPSBwYWdlX2hlYWRlcihlbnQgJiBQVDY0X0JBU0VfQUREUl9NQVNLKTsKKwkJaWYgKCFpc19zaGFkb3dfcHJlc2VudF9wdGUoZW50KSB8fCBpc19sYXJnZV9wdGUoZW50KSkKKwkJCWdvdG8gY2xlYXJfY2hpbGRfYml0bWFwOwogCi0JCQlpZiAoY2hpbGQtPnVuc3luY19jaGlsZHJlbikgewotCQkJCWlmIChtbXVfcGFnZXNfYWRkKHB2ZWMsIGNoaWxkLCBpKSkKLQkJCQkJcmV0dXJuIC1FTk9TUEM7CisJCWNoaWxkID0gcGFnZV9oZWFkZXIoZW50ICYgUFQ2NF9CQVNFX0FERFJfTUFTSyk7CiAKLQkJCQlyZXQgPSBfX21tdV91bnN5bmNfd2FsayhjaGlsZCwgcHZlYyk7Ci0JCQkJaWYgKCFyZXQpCi0JCQkJCV9fY2xlYXJfYml0KGksIHNwLT51bnN5bmNfY2hpbGRfYml0bWFwKTsKLQkJCQllbHNlIGlmIChyZXQgPiAwKQotCQkJCQlucl91bnN5bmNfbGVhZiArPSByZXQ7Ci0JCQkJZWxzZQotCQkJCQlyZXR1cm4gcmV0OwotCQkJfQorCQlpZiAoY2hpbGQtPnVuc3luY19jaGlsZHJlbikgeworCQkJaWYgKG1tdV9wYWdlc19hZGQocHZlYywgY2hpbGQsIGkpKQorCQkJCXJldHVybiAtRU5PU1BDOwogCi0JCQlpZiAoY2hpbGQtPnVuc3luYykgewotCQkJCW5yX3Vuc3luY19sZWFmKys7Ci0JCQkJaWYgKG1tdV9wYWdlc19hZGQocHZlYywgY2hpbGQsIGkpKQotCQkJCQlyZXR1cm4gLUVOT1NQQzsKLQkJCX0KLQkJfQorCQkJcmV0ID0gX19tbXVfdW5zeW5jX3dhbGsoY2hpbGQsIHB2ZWMpOworCQkJaWYgKCFyZXQpCisJCQkJZ290byBjbGVhcl9jaGlsZF9iaXRtYXA7CisJCQllbHNlIGlmIChyZXQgPiAwKQorCQkJCW5yX3Vuc3luY19sZWFmICs9IHJldDsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gcmV0OworCQl9IGVsc2UgaWYgKGNoaWxkLT51bnN5bmMpIHsKKwkJCW5yX3Vuc3luY19sZWFmKys7CisJCQlpZiAobW11X3BhZ2VzX2FkZChwdmVjLCBjaGlsZCwgaSkpCisJCQkJcmV0dXJuIC1FTk9TUEM7CisJCX0gZWxzZQorCQkJIGdvdG8gY2xlYXJfY2hpbGRfYml0bWFwOworCisJCWNvbnRpbnVlOworCitjbGVhcl9jaGlsZF9iaXRtYXA6CisJCV9fY2xlYXJfYml0KGksIHNwLT51bnN5bmNfY2hpbGRfYml0bWFwKTsKKwkJc3AtPnVuc3luY19jaGlsZHJlbi0tOworCQlXQVJOX09OKChpbnQpc3AtPnVuc3luY19jaGlsZHJlbiA8IDApOwogCX0KIAotCWlmIChmaW5kX2ZpcnN0X2JpdChzcC0+dW5zeW5jX2NoaWxkX2JpdG1hcCwgNTEyKSA9PSA1MTIpCi0JCXNwLT51bnN5bmNfY2hpbGRyZW4gPSAwOwogCiAJcmV0dXJuIG5yX3Vuc3luY19sZWFmOwogfQpAQCAtMTE2NiwyNiArMTIwNCw2IEBACiAJcmV0dXJuIF9fbW11X3Vuc3luY193YWxrKHNwLCBwdmVjKTsKIH0KIAotc3RhdGljIHN0cnVjdCBrdm1fbW11X3BhZ2UgKmt2bV9tbXVfbG9va3VwX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCi17Ci0JdW5zaWduZWQgaW5kZXg7Ci0Jc3RydWN0IGhsaXN0X2hlYWQgKmJ1Y2tldDsKLQlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQotCXBncHJpbnRrKCIlczogbG9va2luZyBmb3IgZ2ZuICVseFxuIiwgX19mdW5jX18sIGdmbik7Ci0JaW5kZXggPSBrdm1fcGFnZV90YWJsZV9oYXNoZm4oZ2ZuKTsKLQlidWNrZXQgPSAma3ZtLT5hcmNoLm1tdV9wYWdlX2hhc2hbaW5kZXhdOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHNwLCBub2RlLCBidWNrZXQsIGhhc2hfbGluaykKLQkJaWYgKHNwLT5nZm4gPT0gZ2ZuICYmICFzcC0+cm9sZS5kaXJlY3QKLQkJICAgICYmICFzcC0+cm9sZS5pbnZhbGlkKSB7Ci0JCQlwZ3ByaW50aygiJXM6IGZvdW5kIHJvbGUgJXhcbiIsCi0JCQkJIF9fZnVuY19fLCBzcC0+cm9sZS53b3JkKTsKLQkJCXJldHVybiBzcDsKLQkJfQotCXJldHVybiBOVUxMOwotfQotCiBzdGF0aWMgdm9pZCBrdm1fdW5saW5rX3Vuc3luY19wYWdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApCiB7CiAJV0FSTl9PTighc3AtPnVuc3luYyk7CkBAIC0xMTk0LDIwICsxMjEyLDM2IEBACiAJLS1rdm0tPnN0YXQubW11X3Vuc3luYzsKIH0KIAotc3RhdGljIGludCBrdm1fbW11X3phcF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApOworc3RhdGljIGludCBrdm1fbW11X3ByZXBhcmVfemFwX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwKKwkJCQkgICAgc3RydWN0IGxpc3RfaGVhZCAqaW52YWxpZF9saXN0KTsKK3N0YXRpYyB2b2lkIGt2bV9tbXVfY29tbWl0X3phcF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwKKwkJCQkgICAgc3RydWN0IGxpc3RfaGVhZCAqaW52YWxpZF9saXN0KTsKIAotc3RhdGljIGludCBrdm1fc3luY19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApCisjZGVmaW5lIGZvcl9lYWNoX2dmbl9zcChrdm0sIHNwLCBnZm4sIHBvcykJCQkJXAorICBobGlzdF9mb3JfZWFjaF9lbnRyeShzcCwgcG9zLAkJCQkJCVwKKyAgICYoa3ZtKS0+YXJjaC5tbXVfcGFnZV9oYXNoW2t2bV9wYWdlX3RhYmxlX2hhc2hmbihnZm4pXSwgaGFzaF9saW5rKQlcCisJaWYgKChzcCktPmdmbiAhPSAoZ2ZuKSkge30gZWxzZQorCisjZGVmaW5lIGZvcl9lYWNoX2dmbl9pbmRpcmVjdF92YWxpZF9zcChrdm0sIHNwLCBnZm4sIHBvcykJCVwKKyAgaGxpc3RfZm9yX2VhY2hfZW50cnkoc3AsIHBvcywJCQkJCQlcCisgICAmKGt2bSktPmFyY2gubW11X3BhZ2VfaGFzaFtrdm1fcGFnZV90YWJsZV9oYXNoZm4oZ2ZuKV0sIGhhc2hfbGluaykJXAorCQlpZiAoKHNwKS0+Z2ZuICE9IChnZm4pIHx8IChzcCktPnJvbGUuZGlyZWN0IHx8CQlcCisJCQkoc3ApLT5yb2xlLmludmFsaWQpIHt9IGVsc2UKKworLyogQHNwLT5nZm4gc2hvdWxkIGJlIHdyaXRlLXByb3RlY3RlZCBhdCB0aGUgY2FsbCBzaXRlICovCitzdGF0aWMgaW50IF9fa3ZtX3N5bmNfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLAorCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqaW52YWxpZF9saXN0LCBib29sIGNsZWFyX3Vuc3luYykKIHsKIAlpZiAoc3AtPnJvbGUuY3I0X3BhZSAhPSAhIWlzX3BhZSh2Y3B1KSkgewotCQlrdm1fbW11X3phcF9wYWdlKHZjcHUtPmt2bSwgc3ApOworCQlrdm1fbW11X3ByZXBhcmVfemFwX3BhZ2UodmNwdS0+a3ZtLCBzcCwgaW52YWxpZF9saXN0KTsKIAkJcmV0dXJuIDE7CiAJfQogCi0JaWYgKHJtYXBfd3JpdGVfcHJvdGVjdCh2Y3B1LT5rdm0sIHNwLT5nZm4pKQotCQlrdm1fZmx1c2hfcmVtb3RlX3RsYnModmNwdS0+a3ZtKTsKLQlrdm1fdW5saW5rX3Vuc3luY19wYWdlKHZjcHUtPmt2bSwgc3ApOwotCWlmICh2Y3B1LT5hcmNoLm1tdS5zeW5jX3BhZ2UodmNwdSwgc3ApKSB7Ci0JCWt2bV9tbXVfemFwX3BhZ2UodmNwdS0+a3ZtLCBzcCk7CisJaWYgKGNsZWFyX3Vuc3luYykKKwkJa3ZtX3VubGlua191bnN5bmNfcGFnZSh2Y3B1LT5rdm0sIHNwKTsKKworCWlmICh2Y3B1LT5hcmNoLm1tdS5zeW5jX3BhZ2UodmNwdSwgc3AsIGNsZWFyX3Vuc3luYykpIHsKKwkJa3ZtX21tdV9wcmVwYXJlX3phcF9wYWdlKHZjcHUtPmt2bSwgc3AsIGludmFsaWRfbGlzdCk7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMTIxNSw2ICsxMjQ5LDUyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQga3ZtX3N5bmNfcGFnZV90cmFuc2llbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCSAgIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQoreworCUxJU1RfSEVBRChpbnZhbGlkX2xpc3QpOworCWludCByZXQ7CisKKwlyZXQgPSBfX2t2bV9zeW5jX3BhZ2UodmNwdSwgc3AsICZpbnZhbGlkX2xpc3QsIGZhbHNlKTsKKwlpZiAocmV0KQorCQlrdm1fbW11X2NvbW1pdF96YXBfcGFnZSh2Y3B1LT5rdm0sICZpbnZhbGlkX2xpc3QpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBrdm1fc3luY19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsCisJCQkgc3RydWN0IGxpc3RfaGVhZCAqaW52YWxpZF9saXN0KQoreworCXJldHVybiBfX2t2bV9zeW5jX3BhZ2UodmNwdSwgc3AsIGludmFsaWRfbGlzdCwgdHJ1ZSk7Cit9CisKKy8qIEBnZm4gc2hvdWxkIGJlIHdyaXRlLXByb3RlY3RlZCBhdCB0aGUgY2FsbCBzaXRlICovCitzdGF0aWMgdm9pZCBrdm1fc3luY19wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsICBnZm5fdCBnZm4pCit7CisJc3RydWN0IGt2bV9tbXVfcGFnZSAqczsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlMSVNUX0hFQUQoaW52YWxpZF9saXN0KTsKKwlib29sIGZsdXNoID0gZmFsc2U7CisKKwlmb3JfZWFjaF9nZm5faW5kaXJlY3RfdmFsaWRfc3AodmNwdS0+a3ZtLCBzLCBnZm4sIG5vZGUpIHsKKwkJaWYgKCFzLT51bnN5bmMpCisJCQljb250aW51ZTsKKworCQlXQVJOX09OKHMtPnJvbGUubGV2ZWwgIT0gUFRfUEFHRV9UQUJMRV9MRVZFTCk7CisJCWlmICgocy0+cm9sZS5jcjRfcGFlICE9ICEhaXNfcGFlKHZjcHUpKSB8fAorCQkJKHZjcHUtPmFyY2gubW11LnN5bmNfcGFnZSh2Y3B1LCBzLCB0cnVlKSkpIHsKKwkJCWt2bV9tbXVfcHJlcGFyZV96YXBfcGFnZSh2Y3B1LT5rdm0sIHMsICZpbnZhbGlkX2xpc3QpOworCQkJY29udGludWU7CisJCX0KKwkJa3ZtX3VubGlua191bnN5bmNfcGFnZSh2Y3B1LT5rdm0sIHMpOworCQlmbHVzaCA9IHRydWU7CisJfQorCisJa3ZtX21tdV9jb21taXRfemFwX3BhZ2UodmNwdS0+a3ZtLCAmaW52YWxpZF9saXN0KTsKKwlpZiAoZmx1c2gpCisJCWt2bV9tbXVfZmx1c2hfdGxiKHZjcHUpOworfQorCiBzdHJ1Y3QgbW11X3BhZ2VfcGF0aCB7CiAJc3RydWN0IGt2bV9tbXVfcGFnZSAqcGFyZW50W1BUNjRfUk9PVF9MRVZFTC0xXTsKIAl1bnNpZ25lZCBpbnQgaWR4W1BUNjRfUk9PVF9MRVZFTC0xXTsKQEAgLTEyODEsNiArMTM2MSw3IEBACiAJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7CiAJc3RydWN0IG1tdV9wYWdlX3BhdGggcGFyZW50czsKIAlzdHJ1Y3Qga3ZtX21tdV9wYWdlcyBwYWdlczsKKwlMSVNUX0hFQUQoaW52YWxpZF9saXN0KTsKIAogCWt2bV9tbXVfcGFnZXNfaW5pdChwYXJlbnQsICZwYXJlbnRzLCAmcGFnZXMpOwogCXdoaWxlIChtbXVfdW5zeW5jX3dhbGsocGFyZW50LCAmcGFnZXMpKSB7CkBAIC0xMjkzLDkgKzEzNzQsMTAgQEAKIAkJCWt2bV9mbHVzaF9yZW1vdGVfdGxicyh2Y3B1LT5rdm0pOwogCiAJCWZvcl9lYWNoX3NwKHBhZ2VzLCBzcCwgcGFyZW50cywgaSkgewotCQkJa3ZtX3N5bmNfcGFnZSh2Y3B1LCBzcCk7CisJCQlrdm1fc3luY19wYWdlKHZjcHUsIHNwLCAmaW52YWxpZF9saXN0KTsKIAkJCW1tdV9wYWdlc19jbGVhcl9wYXJlbnRzKCZwYXJlbnRzKTsKIAkJfQorCQlrdm1fbW11X2NvbW1pdF96YXBfcGFnZSh2Y3B1LT5rdm0sICZpbnZhbGlkX2xpc3QpOwogCQljb25kX3Jlc2NoZWRfbG9jaygmdmNwdS0+a3ZtLT5tbXVfbG9jayk7CiAJCWt2bV9tbXVfcGFnZXNfaW5pdChwYXJlbnQsICZwYXJlbnRzLCAmcGFnZXMpOwogCX0KQEAgLTEzMTAsMTEgKzEzOTIsMTAgQEAKIAkJCQkJICAgICB1NjQgKnBhcmVudF9wdGUpCiB7CiAJdW5pb24ga3ZtX21tdV9wYWdlX3JvbGUgcm9sZTsKLQl1bnNpZ25lZCBpbmRleDsKIAl1bnNpZ25lZCBxdWFkcmFudDsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqYnVja2V0OwogCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqdG1wOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCWJvb2wgbmVlZF9zeW5jID0gZmFsc2U7CiAKIAlyb2xlID0gdmNwdS0+YXJjaC5tbXUuYmFzZV9yb2xlOwogCXJvbGUubGV2ZWwgPSBsZXZlbDsKQEAgLTEzMjIsNDAgKzE0MDMsNDUgQEAKIAlpZiAocm9sZS5kaXJlY3QpCiAJCXJvbGUuY3I0X3BhZSA9IDA7CiAJcm9sZS5hY2Nlc3MgPSBhY2Nlc3M7Ci0JaWYgKHZjcHUtPmFyY2gubW11LnJvb3RfbGV2ZWwgPD0gUFQzMl9ST09UX0xFVkVMKSB7CisJaWYgKCF0ZHBfZW5hYmxlZCAmJiB2Y3B1LT5hcmNoLm1tdS5yb290X2xldmVsIDw9IFBUMzJfUk9PVF9MRVZFTCkgewogCQlxdWFkcmFudCA9IGdhZGRyID4+IChQQUdFX1NISUZUICsgKFBUNjRfUFRfQklUUyAqIGxldmVsKSk7CiAJCXF1YWRyYW50ICY9ICgxIDw8ICgoUFQzMl9QVF9CSVRTIC0gUFQ2NF9QVF9CSVRTKSAqIGxldmVsKSkgLSAxOwogCQlyb2xlLnF1YWRyYW50ID0gcXVhZHJhbnQ7CiAJfQotCWluZGV4ID0ga3ZtX3BhZ2VfdGFibGVfaGFzaGZuKGdmbik7Ci0JYnVja2V0ID0gJnZjcHUtPmt2bS0+YXJjaC5tbXVfcGFnZV9oYXNoW2luZGV4XTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNwLCBub2RlLCB0bXAsIGJ1Y2tldCwgaGFzaF9saW5rKQotCQlpZiAoc3AtPmdmbiA9PSBnZm4pIHsKLQkJCWlmIChzcC0+dW5zeW5jKQotCQkJCWlmIChrdm1fc3luY19wYWdlKHZjcHUsIHNwKSkKLQkJCQkJY29udGludWU7CisJZm9yX2VhY2hfZ2ZuX3NwKHZjcHUtPmt2bSwgc3AsIGdmbiwgbm9kZSkgeworCQlpZiAoIW5lZWRfc3luYyAmJiBzcC0+dW5zeW5jKQorCQkJbmVlZF9zeW5jID0gdHJ1ZTsKIAotCQkJaWYgKHNwLT5yb2xlLndvcmQgIT0gcm9sZS53b3JkKQotCQkJCWNvbnRpbnVlOworCQlpZiAoc3AtPnJvbGUud29yZCAhPSByb2xlLndvcmQpCisJCQljb250aW51ZTsKIAotCQkJbW11X3BhZ2VfYWRkX3BhcmVudF9wdGUodmNwdSwgc3AsIHBhcmVudF9wdGUpOwotCQkJaWYgKHNwLT51bnN5bmNfY2hpbGRyZW4pIHsKLQkJCQlzZXRfYml0KEtWTV9SRVFfTU1VX1NZTkMsICZ2Y3B1LT5yZXF1ZXN0cyk7Ci0JCQkJa3ZtX21tdV9tYXJrX3BhcmVudHNfdW5zeW5jKHNwKTsKLQkJCX0KLQkJCXRyYWNlX2t2bV9tbXVfZ2V0X3BhZ2Uoc3AsIGZhbHNlKTsKLQkJCXJldHVybiBzcDsKLQkJfQorCQlpZiAoc3AtPnVuc3luYyAmJiBrdm1fc3luY19wYWdlX3RyYW5zaWVudCh2Y3B1LCBzcCkpCisJCQlicmVhazsKKworCQltbXVfcGFnZV9hZGRfcGFyZW50X3B0ZSh2Y3B1LCBzcCwgcGFyZW50X3B0ZSk7CisJCWlmIChzcC0+dW5zeW5jX2NoaWxkcmVuKSB7CisJCQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfTU1VX1NZTkMsIHZjcHUpOworCQkJa3ZtX21tdV9tYXJrX3BhcmVudHNfdW5zeW5jKHNwKTsKKwkJfSBlbHNlIGlmIChzcC0+dW5zeW5jKQorCQkJa3ZtX21tdV9tYXJrX3BhcmVudHNfdW5zeW5jKHNwKTsKKworCQl0cmFjZV9rdm1fbW11X2dldF9wYWdlKHNwLCBmYWxzZSk7CisJCXJldHVybiBzcDsKKwl9CiAJKyt2Y3B1LT5rdm0tPnN0YXQubW11X2NhY2hlX21pc3M7Ci0Jc3AgPSBrdm1fbW11X2FsbG9jX3BhZ2UodmNwdSwgcGFyZW50X3B0ZSk7CisJc3AgPSBrdm1fbW11X2FsbG9jX3BhZ2UodmNwdSwgcGFyZW50X3B0ZSwgZGlyZWN0KTsKIAlpZiAoIXNwKQogCQlyZXR1cm4gc3A7CiAJc3AtPmdmbiA9IGdmbjsKIAlzcC0+cm9sZSA9IHJvbGU7Ci0JaGxpc3RfYWRkX2hlYWQoJnNwLT5oYXNoX2xpbmssIGJ1Y2tldCk7CisJaGxpc3RfYWRkX2hlYWQoJnNwLT5oYXNoX2xpbmssCisJCSZ2Y3B1LT5rdm0tPmFyY2gubW11X3BhZ2VfaGFzaFtrdm1fcGFnZV90YWJsZV9oYXNoZm4oZ2ZuKV0pOwogCWlmICghZGlyZWN0KSB7CiAJCWlmIChybWFwX3dyaXRlX3Byb3RlY3QodmNwdS0+a3ZtLCBnZm4pKQogCQkJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKHZjcHUtPmt2bSk7CisJCWlmIChsZXZlbCA+IFBUX1BBR0VfVEFCTEVfTEVWRUwgJiYgbmVlZF9zeW5jKQorCQkJa3ZtX3N5bmNfcGFnZXModmNwdSwgZ2ZuKTsKKwogCQlhY2NvdW50X3NoYWRvd2VkKHZjcHUtPmt2bSwgZ2ZuKTsKIAl9CiAJaWYgKHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlICE9IHNoYWRvd19ub3RyYXBfbm9ucHJlc2VudF9wdGUpCkBAIC0xNDAyLDYgKzE0ODgsNDcgQEAKIAktLWl0ZXJhdG9yLT5sZXZlbDsKIH0KIAorc3RhdGljIHZvaWQgbGlua19zaGFkb3dfcGFnZSh1NjQgKnNwdGVwLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkKK3sKKwl1NjQgc3B0ZTsKKworCXNwdGUgPSBfX3BhKHNwLT5zcHQpCisJCXwgUFRfUFJFU0VOVF9NQVNLIHwgUFRfQUNDRVNTRURfTUFTSworCQl8IFBUX1dSSVRBQkxFX01BU0sgfCBQVF9VU0VSX01BU0s7CisJX19zZXRfc3B0ZShzcHRlcCwgc3B0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRyb3BfbGFyZ2Vfc3B0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqc3B0ZXApCit7CisJaWYgKGlzX2xhcmdlX3B0ZSgqc3B0ZXApKSB7CisJCWRyb3Bfc3B0ZSh2Y3B1LT5rdm0sIHNwdGVwLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CisJCWt2bV9mbHVzaF9yZW1vdGVfdGxicyh2Y3B1LT5rdm0pOworCX0KK30KKworc3RhdGljIHZvaWQgdmFsaWRhdGVfZGlyZWN0X3NwdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKnNwdGVwLAorCQkJCSAgIHVuc2lnbmVkIGRpcmVjdF9hY2Nlc3MpCit7CisJaWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZSgqc3B0ZXApICYmICFpc19sYXJnZV9wdGUoKnNwdGVwKSkgeworCQlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpjaGlsZDsKKworCQkvKgorCQkgKiBGb3IgdGhlIGRpcmVjdCBzcCwgaWYgdGhlIGd1ZXN0IHB0ZSdzIGRpcnR5IGJpdAorCQkgKiBjaGFuZ2VkIGZvcm0gY2xlYW4gdG8gZGlydHksIGl0IHdpbGwgY29ycnVwdCB0aGUKKwkJICogc3AncyBhY2Nlc3M6IGFsbG93IHdyaXRhYmxlIGluIHRoZSByZWFkLW9ubHkgc3AsCisJCSAqIHNvIHdlIHNob3VsZCB1cGRhdGUgdGhlIHNwdGUgYXQgdGhpcyBwb2ludCB0byBnZXQKKwkJICogYSBuZXcgc3Agd2l0aCB0aGUgY29ycmVjdCBhY2Nlc3MuCisJCSAqLworCQljaGlsZCA9IHBhZ2VfaGVhZGVyKCpzcHRlcCAmIFBUNjRfQkFTRV9BRERSX01BU0spOworCQlpZiAoY2hpbGQtPnJvbGUuYWNjZXNzID09IGRpcmVjdF9hY2Nlc3MpCisJCQlyZXR1cm47CisKKwkJbW11X3BhZ2VfcmVtb3ZlX3BhcmVudF9wdGUoY2hpbGQsIHNwdGVwKTsKKwkJX19zZXRfc3B0ZShzcHRlcCwgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOworCQlrdm1fZmx1c2hfcmVtb3RlX3RsYnModmNwdS0+a3ZtKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIGt2bV9tbXVfcGFnZV91bmxpbmtfY2hpbGRyZW4oc3RydWN0IGt2bSAqa3ZtLAogCQkJCQkgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApCiB7CkBAIC0xNDIyLDcgKzE1NDksOCBAQAogCQkJfSBlbHNlIHsKIAkJCQlpZiAoaXNfbGFyZ2VfcHRlKGVudCkpCiAJCQkJCS0ta3ZtLT5zdGF0LmxwYWdlczsKLQkJCQlybWFwX3JlbW92ZShrdm0sICZwdFtpXSk7CisJCQkJZHJvcF9zcHRlKGt2bSwgJnB0W2ldLAorCQkJCQkgIHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKTsKIAkJCX0KIAkJfQogCQlwdFtpXSA9IHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlOwpAQCAtMTQ2NCw3ICsxNTkyLDggQEAKIH0KIAogc3RhdGljIGludCBtbXVfemFwX3Vuc3luY19jaGlsZHJlbihzdHJ1Y3Qga3ZtICprdm0sCi0JCQkJICAgc3RydWN0IGt2bV9tbXVfcGFnZSAqcGFyZW50KQorCQkJCSAgIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnBhcmVudCwKKwkJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICppbnZhbGlkX2xpc3QpCiB7CiAJaW50IGksIHphcHBlZCA9IDA7CiAJc3RydWN0IG1tdV9wYWdlX3BhdGggcGFyZW50czsKQEAgLTE0NzgsNyArMTYwNyw3IEBACiAJCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwOwogCiAJCWZvcl9lYWNoX3NwKHBhZ2VzLCBzcCwgcGFyZW50cywgaSkgewotCQkJa3ZtX21tdV96YXBfcGFnZShrdm0sIHNwKTsKKwkJCWt2bV9tbXVfcHJlcGFyZV96YXBfcGFnZShrdm0sIHNwLCBpbnZhbGlkX2xpc3QpOwogCQkJbW11X3BhZ2VzX2NsZWFyX3BhcmVudHMoJnBhcmVudHMpOwogCQkJemFwcGVkKys7CiAJCX0KQEAgLTE0ODgsMzIgKzE2MTcsNTIgQEAKIAlyZXR1cm4gemFwcGVkOwogfQogCi1zdGF0aWMgaW50IGt2bV9tbXVfemFwX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkKK3N0YXRpYyBpbnQga3ZtX21tdV9wcmVwYXJlX3phcF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsCisJCQkJICAgIHN0cnVjdCBsaXN0X2hlYWQgKmludmFsaWRfbGlzdCkKIHsKIAlpbnQgcmV0OwogCi0JdHJhY2Vfa3ZtX21tdV96YXBfcGFnZShzcCk7CisJdHJhY2Vfa3ZtX21tdV9wcmVwYXJlX3phcF9wYWdlKHNwKTsKIAkrK2t2bS0+c3RhdC5tbXVfc2hhZG93X3phcHBlZDsKLQlyZXQgPSBtbXVfemFwX3Vuc3luY19jaGlsZHJlbihrdm0sIHNwKTsKKwlyZXQgPSBtbXVfemFwX3Vuc3luY19jaGlsZHJlbihrdm0sIHNwLCBpbnZhbGlkX2xpc3QpOwogCWt2bV9tbXVfcGFnZV91bmxpbmtfY2hpbGRyZW4oa3ZtLCBzcCk7CiAJa3ZtX21tdV91bmxpbmtfcGFyZW50cyhrdm0sIHNwKTsKLQlrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTsKIAlpZiAoIXNwLT5yb2xlLmludmFsaWQgJiYgIXNwLT5yb2xlLmRpcmVjdCkKIAkJdW5hY2NvdW50X3NoYWRvd2VkKGt2bSwgc3AtPmdmbik7CiAJaWYgKHNwLT51bnN5bmMpCiAJCWt2bV91bmxpbmtfdW5zeW5jX3BhZ2Uoa3ZtLCBzcCk7CiAJaWYgKCFzcC0+cm9vdF9jb3VudCkgewotCQlobGlzdF9kZWwoJnNwLT5oYXNoX2xpbmspOwotCQlrdm1fbW11X2ZyZWVfcGFnZShrdm0sIHNwKTsKKwkJLyogQ291bnQgc2VsZiAqLworCQlyZXQrKzsKKwkJbGlzdF9tb3ZlKCZzcC0+bGluaywgaW52YWxpZF9saXN0KTsKIAl9IGVsc2UgewotCQlzcC0+cm9sZS5pbnZhbGlkID0gMTsKIAkJbGlzdF9tb3ZlKCZzcC0+bGluaywgJmt2bS0+YXJjaC5hY3RpdmVfbW11X3BhZ2VzKTsKIAkJa3ZtX3JlbG9hZF9yZW1vdGVfbW11cyhrdm0pOwogCX0KKworCXNwLT5yb2xlLmludmFsaWQgPSAxOwogCWt2bV9tbXVfcmVzZXRfbGFzdF9wdGVfdXBkYXRlZChrdm0pOwogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIGt2bV9tbXVfY29tbWl0X3phcF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwKKwkJCQkgICAgc3RydWN0IGxpc3RfaGVhZCAqaW52YWxpZF9saXN0KQoreworCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwOworCisJaWYgKGxpc3RfZW1wdHkoaW52YWxpZF9saXN0KSkKKwkJcmV0dXJuOworCisJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7CisKKwlkbyB7CisJCXNwID0gbGlzdF9maXJzdF9lbnRyeShpbnZhbGlkX2xpc3QsIHN0cnVjdCBrdm1fbW11X3BhZ2UsIGxpbmspOworCQlXQVJOX09OKCFzcC0+cm9sZS5pbnZhbGlkIHx8IHNwLT5yb290X2NvdW50KTsKKwkJa3ZtX21tdV9mcmVlX3BhZ2Uoa3ZtLCBzcCk7CisJfSB3aGlsZSAoIWxpc3RfZW1wdHkoaW52YWxpZF9saXN0KSk7CisKK30KKwogLyoKICAqIENoYW5naW5nIHRoZSBudW1iZXIgb2YgbW11IHBhZ2VzIGFsbG9jYXRlZCB0byB0aGUgdm0KICAqIE5vdGU6IGlmIGt2bV9ucl9tbXVfcGFnZXMgaXMgdG9vIHNtYWxsLCB5b3Ugd2lsbCBnZXQgZGVhZCBsb2NrCkBAIC0xNTIxLDYgKzE2NzAsNyBAQAogdm9pZCBrdm1fbW11X2NoYW5nZV9tbXVfcGFnZXMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQga3ZtX25yX21tdV9wYWdlcykKIHsKIAlpbnQgdXNlZF9wYWdlczsKKwlMSVNUX0hFQUQoaW52YWxpZF9saXN0KTsKIAogCXVzZWRfcGFnZXMgPSBrdm0tPmFyY2gubl9hbGxvY19tbXVfcGFnZXMgLSBrdm0tPmFyY2gubl9mcmVlX21tdV9wYWdlczsKIAl1c2VkX3BhZ2VzID0gbWF4KDAsIHVzZWRfcGFnZXMpOwpAQCAtMTUzOCw5ICsxNjg4LDEwIEBACiAKIAkJCXBhZ2UgPSBjb250YWluZXJfb2Yoa3ZtLT5hcmNoLmFjdGl2ZV9tbXVfcGFnZXMucHJldiwKIAkJCQkJICAgIHN0cnVjdCBrdm1fbW11X3BhZ2UsIGxpbmspOwotCQkJdXNlZF9wYWdlcyAtPSBrdm1fbW11X3phcF9wYWdlKGt2bSwgcGFnZSk7Ci0JCQl1c2VkX3BhZ2VzLS07CisJCQl1c2VkX3BhZ2VzIC09IGt2bV9tbXVfcHJlcGFyZV96YXBfcGFnZShrdm0sIHBhZ2UsCisJCQkJCQkJICAgICAgICZpbnZhbGlkX2xpc3QpOwogCQl9CisJCWt2bV9tbXVfY29tbWl0X3phcF9wYWdlKGt2bSwgJmludmFsaWRfbGlzdCk7CiAJCWt2bV9ucl9tbXVfcGFnZXMgPSB1c2VkX3BhZ2VzOwogCQlrdm0tPmFyY2gubl9mcmVlX21tdV9wYWdlcyA9IDA7CiAJfQpAQCAtMTU1Myw0NyArMTcwNCwzNiBAQAogCiBzdGF0aWMgaW50IGt2bV9tbXVfdW5wcm90ZWN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCiB7Ci0JdW5zaWduZWQgaW5kZXg7Ci0Jc3RydWN0IGhsaXN0X2hlYWQgKmJ1Y2tldDsKIAlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKm47CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisJTElTVF9IRUFEKGludmFsaWRfbGlzdCk7CiAJaW50IHI7CiAKIAlwZ3ByaW50aygiJXM6IGxvb2tpbmcgZm9yIGdmbiAlbHhcbiIsIF9fZnVuY19fLCBnZm4pOwogCXIgPSAwOwotCWluZGV4ID0ga3ZtX3BhZ2VfdGFibGVfaGFzaGZuKGdmbik7Ci0JYnVja2V0ID0gJmt2bS0+YXJjaC5tbXVfcGFnZV9oYXNoW2luZGV4XTsKLXJlc3RhcnQ6Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzcCwgbm9kZSwgbiwgYnVja2V0LCBoYXNoX2xpbmspCi0JCWlmIChzcC0+Z2ZuID09IGdmbiAmJiAhc3AtPnJvbGUuZGlyZWN0KSB7Ci0JCQlwZ3ByaW50aygiJXM6IGdmbiAlbHggcm9sZSAleFxuIiwgX19mdW5jX18sIGdmbiwKLQkJCQkgc3AtPnJvbGUud29yZCk7Ci0JCQlyID0gMTsKLQkJCWlmIChrdm1fbW11X3phcF9wYWdlKGt2bSwgc3ApKQotCQkJCWdvdG8gcmVzdGFydDsKLQkJfQorCisJZm9yX2VhY2hfZ2ZuX2luZGlyZWN0X3ZhbGlkX3NwKGt2bSwgc3AsIGdmbiwgbm9kZSkgeworCQlwZ3ByaW50aygiJXM6IGdmbiAlbHggcm9sZSAleFxuIiwgX19mdW5jX18sIGdmbiwKKwkJCSBzcC0+cm9sZS53b3JkKTsKKwkJciA9IDE7CisJCWt2bV9tbXVfcHJlcGFyZV96YXBfcGFnZShrdm0sIHNwLCAmaW52YWxpZF9saXN0KTsKKwl9CisJa3ZtX21tdV9jb21taXRfemFwX3BhZ2Uoa3ZtLCAmaW52YWxpZF9saXN0KTsKIAlyZXR1cm4gcjsKIH0KIAogc3RhdGljIHZvaWQgbW11X3Vuc2hhZG93KHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQogewotCXVuc2lnbmVkIGluZGV4OwotCXN0cnVjdCBobGlzdF9oZWFkICpidWNrZXQ7CiAJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsICpubjsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlMSVNUX0hFQUQoaW52YWxpZF9saXN0KTsKIAotCWluZGV4ID0ga3ZtX3BhZ2VfdGFibGVfaGFzaGZuKGdmbik7Ci0JYnVja2V0ID0gJmt2bS0+YXJjaC5tbXVfcGFnZV9oYXNoW2luZGV4XTsKLXJlc3RhcnQ6Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzcCwgbm9kZSwgbm4sIGJ1Y2tldCwgaGFzaF9saW5rKSB7Ci0JCWlmIChzcC0+Z2ZuID09IGdmbiAmJiAhc3AtPnJvbGUuZGlyZWN0Ci0JCSAgICAmJiAhc3AtPnJvbGUuaW52YWxpZCkgewotCQkJcGdwcmludGsoIiVzOiB6YXAgJWx4ICV4XG4iLAotCQkJCSBfX2Z1bmNfXywgZ2ZuLCBzcC0+cm9sZS53b3JkKTsKLQkJCWlmIChrdm1fbW11X3phcF9wYWdlKGt2bSwgc3ApKQotCQkJCWdvdG8gcmVzdGFydDsKLQkJfQorCWZvcl9lYWNoX2dmbl9pbmRpcmVjdF92YWxpZF9zcChrdm0sIHNwLCBnZm4sIG5vZGUpIHsKKwkJcGdwcmludGsoIiVzOiB6YXAgJWx4ICV4XG4iLAorCQkJIF9fZnVuY19fLCBnZm4sIHNwLT5yb2xlLndvcmQpOworCQlrdm1fbW11X3ByZXBhcmVfemFwX3BhZ2Uoa3ZtLCBzcCwgJmludmFsaWRfbGlzdCk7CiAJfQorCWt2bV9tbXVfY29tbWl0X3phcF9wYWdlKGt2bSwgJmludmFsaWRfbGlzdCk7CiB9CiAKIHN0YXRpYyB2b2lkIHBhZ2VfaGVhZGVyX3VwZGF0ZV9zbG90KHN0cnVjdCBrdm0gKmt2bSwgdm9pZCAqcHRlLCBnZm5fdCBnZm4pCkBAIC0xNzIzLDQ3ICsxODYzLDUxIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fZ2V0X2d1ZXN0X21lbW9yeV90eXBlKTsKIAotc3RhdGljIGludCBrdm1fdW5zeW5jX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkKK3N0YXRpYyB2b2lkIF9fa3ZtX3Vuc3luY19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApCiB7Ci0JdW5zaWduZWQgaW5kZXg7Ci0Jc3RydWN0IGhsaXN0X2hlYWQgKmJ1Y2tldDsKLQlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqbjsKLQotCWluZGV4ID0ga3ZtX3BhZ2VfdGFibGVfaGFzaGZuKHNwLT5nZm4pOwotCWJ1Y2tldCA9ICZ2Y3B1LT5rdm0tPmFyY2gubW11X3BhZ2VfaGFzaFtpbmRleF07Ci0JLyogZG9uJ3QgdW5zeW5jIGlmIHBhZ2V0YWJsZSBpcyBzaGFkb3dlZCB3aXRoIG11bHRpcGxlIHJvbGVzICovCi0JaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzLCBub2RlLCBuLCBidWNrZXQsIGhhc2hfbGluaykgewotCQlpZiAocy0+Z2ZuICE9IHNwLT5nZm4gfHwgcy0+cm9sZS5kaXJlY3QpCi0JCQljb250aW51ZTsKLQkJaWYgKHMtPnJvbGUud29yZCAhPSBzcC0+cm9sZS53b3JkKQotCQkJcmV0dXJuIDE7Ci0JfQogCXRyYWNlX2t2bV9tbXVfdW5zeW5jX3BhZ2Uoc3ApOwogCSsrdmNwdS0+a3ZtLT5zdGF0Lm1tdV91bnN5bmM7CiAJc3AtPnVuc3luYyA9IDE7CiAKIAlrdm1fbW11X21hcmtfcGFyZW50c191bnN5bmMoc3ApOwotCiAJbW11X2NvbnZlcnRfbm90cmFwKHNwKTsKLQlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQga3ZtX3Vuc3luY19wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsICBnZm5fdCBnZm4pCit7CisJc3RydWN0IGt2bV9tbXVfcGFnZSAqczsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKworCWZvcl9lYWNoX2dmbl9pbmRpcmVjdF92YWxpZF9zcCh2Y3B1LT5rdm0sIHMsIGdmbiwgbm9kZSkgeworCQlpZiAocy0+dW5zeW5jKQorCQkJY29udGludWU7CisJCVdBUk5fT04ocy0+cm9sZS5sZXZlbCAhPSBQVF9QQUdFX1RBQkxFX0xFVkVMKTsKKwkJX19rdm1fdW5zeW5jX3BhZ2UodmNwdSwgcyk7CisJfQogfQogCiBzdGF0aWMgaW50IG1tdV9uZWVkX3dyaXRlX3Byb3RlY3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sCiAJCQkJICBib29sIGNhbl91bnN5bmMpCiB7Ci0Jc3RydWN0IGt2bV9tbXVfcGFnZSAqc2hhZG93OworCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnM7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisJYm9vbCBuZWVkX3Vuc3luYyA9IGZhbHNlOwogCi0Jc2hhZG93ID0ga3ZtX21tdV9sb29rdXBfcGFnZSh2Y3B1LT5rdm0sIGdmbik7Ci0JaWYgKHNoYWRvdykgewotCQlpZiAoc2hhZG93LT5yb2xlLmxldmVsICE9IFBUX1BBR0VfVEFCTEVfTEVWRUwpCisJZm9yX2VhY2hfZ2ZuX2luZGlyZWN0X3ZhbGlkX3NwKHZjcHUtPmt2bSwgcywgZ2ZuLCBub2RlKSB7CisJCWlmICghY2FuX3Vuc3luYykKIAkJCXJldHVybiAxOwotCQlpZiAoc2hhZG93LT51bnN5bmMpCi0JCQlyZXR1cm4gMDsKLQkJaWYgKGNhbl91bnN5bmMgJiYgb29zX3NoYWRvdykKLQkJCXJldHVybiBrdm1fdW5zeW5jX3BhZ2UodmNwdSwgc2hhZG93KTsKLQkJcmV0dXJuIDE7CisKKwkJaWYgKHMtPnJvbGUubGV2ZWwgIT0gUFRfUEFHRV9UQUJMRV9MRVZFTCkKKwkJCXJldHVybiAxOworCisJCWlmICghbmVlZF91bnN5bmMgJiYgIXMtPnVuc3luYykgeworCQkJaWYgKCFvb3Nfc2hhZG93KQorCQkJCXJldHVybiAxOworCQkJbmVlZF91bnN5bmMgPSB0cnVlOworCQl9CiAJfQorCWlmIChuZWVkX3Vuc3luYykKKwkJa3ZtX3Vuc3luY19wYWdlcyh2Y3B1LCBnZm4pOwogCXJldHVybiAwOwogfQogCkBAIC0xODA0LDEzICsxOTQ4LDE0IEBACiAJc3B0ZSB8PSAodTY0KXBmbiA8PCBQQUdFX1NISUZUOwogCiAJaWYgKChwdGVfYWNjZXNzICYgQUNDX1dSSVRFX01BU0spCi0JICAgIHx8ICh3cml0ZV9mYXVsdCAmJiAhaXNfd3JpdGVfcHJvdGVjdGlvbih2Y3B1KSAmJiAhdXNlcl9mYXVsdCkpIHsKKwkgICAgfHwgKCF0ZHBfZW5hYmxlZCAmJiB3cml0ZV9mYXVsdCAmJiAhaXNfd3JpdGVfcHJvdGVjdGlvbih2Y3B1KQorCQkmJiAhdXNlcl9mYXVsdCkpIHsKIAogCQlpZiAobGV2ZWwgPiBQVF9QQUdFX1RBQkxFX0xFVkVMICYmCiAJCSAgICBoYXNfd3Jwcm90ZWN0ZWRfcGFnZSh2Y3B1LT5rdm0sIGdmbiwgbGV2ZWwpKSB7CiAJCQlyZXQgPSAxOwotCQkJc3B0ZSA9IHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlOwotCQkJZ290byBzZXRfcHRlOworCQkJZHJvcF9zcHRlKHZjcHUtPmt2bSwgc3B0ZXAsIHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKTsKKwkJCWdvdG8gZG9uZTsKIAkJfQogCiAJCXNwdGUgfD0gUFRfV1JJVEFCTEVfTUFTSzsKQEAgLTE4NDEsNyArMTk4NiwxMCBAQAogCQltYXJrX3BhZ2VfZGlydHkodmNwdS0+a3ZtLCBnZm4pOwogCiBzZXRfcHRlOgotCV9fc2V0X3NwdGUoc3B0ZXAsIHNwdGUpOworCWlmIChpc193cml0YWJsZV9wdGUoKnNwdGVwKSAmJiAhaXNfd3JpdGFibGVfcHRlKHNwdGUpKQorCQlrdm1fc2V0X3Bmbl9kaXJ0eShwZm4pOworCXVwZGF0ZV9zcHRlKHNwdGVwLCBzcHRlKTsKK2RvbmU6CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTg1Myw3ICsyMDAxLDYgQEAKIAkJCSBib29sIHJlc2V0X2hvc3RfcHJvdGVjdGlvbikKIHsKIAlpbnQgd2FzX3JtYXBwZWQgPSAwOwotCWludCB3YXNfd3JpdGFibGUgPSBpc193cml0YWJsZV9wdGUoKnNwdGVwKTsKIAlpbnQgcm1hcF9jb3VudDsKIAogCXBncHJpbnRrKCIlczogc3B0ZSAlbGx4IGFjY2VzcyAleCB3cml0ZV9mYXVsdCAlZCIKQEAgLTE4NzgsNyArMjAyNSw4IEBACiAJCX0gZWxzZSBpZiAocGZuICE9IHNwdGVfdG9fcGZuKCpzcHRlcCkpIHsKIAkJCXBncHJpbnRrKCJoZm4gb2xkICVseCBuZXcgJWx4XG4iLAogCQkJCSBzcHRlX3RvX3Bmbigqc3B0ZXApLCBwZm4pOwotCQkJcm1hcF9yZW1vdmUodmNwdS0+a3ZtLCBzcHRlcCk7CisJCQlkcm9wX3NwdGUodmNwdS0+a3ZtLCBzcHRlcCwgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOworCQkJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKHZjcHUtPmt2bSk7CiAJCX0gZWxzZQogCQkJd2FzX3JtYXBwZWQgPSAxOwogCX0KQEAgLTE4ODgsNyArMjAzNiw3IEBACiAJCSAgICAgIHJlc2V0X2hvc3RfcHJvdGVjdGlvbikpIHsKIAkJaWYgKHdyaXRlX2ZhdWx0KQogCQkJKnB0d3JpdGUgPSAxOwotCQlrdm1feDg2X29wcy0+dGxiX2ZsdXNoKHZjcHUpOworCQlrdm1fbW11X2ZsdXNoX3RsYih2Y3B1KTsKIAl9CiAKIAlwZ3ByaW50aygiJXM6IHNldHRpbmcgc3B0ZSAlbGx4XG4iLCBfX2Z1bmNfXywgKnNwdGVwKTsKQEAgLTE5MDIsMTUgKzIwNTAsMTAgQEAKIAlwYWdlX2hlYWRlcl91cGRhdGVfc2xvdCh2Y3B1LT5rdm0sIHNwdGVwLCBnZm4pOwogCWlmICghd2FzX3JtYXBwZWQpIHsKIAkJcm1hcF9jb3VudCA9IHJtYXBfYWRkKHZjcHUsIHNwdGVwLCBnZm4pOwotCQlrdm1fcmVsZWFzZV9wZm5fY2xlYW4ocGZuKTsKIAkJaWYgKHJtYXBfY291bnQgPiBSTUFQX1JFQ1lDTEVfVEhSRVNIT0xEKQogCQkJcm1hcF9yZWN5Y2xlKHZjcHUsIHNwdGVwLCBnZm4pOwotCX0gZWxzZSB7Ci0JCWlmICh3YXNfd3JpdGFibGUpCi0JCQlrdm1fcmVsZWFzZV9wZm5fZGlydHkocGZuKTsKLQkJZWxzZQotCQkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbik7CiAJfQorCWt2bV9yZWxlYXNlX3Bmbl9jbGVhbihwZm4pOwogCWlmIChzcGVjdWxhdGl2ZSkgewogCQl2Y3B1LT5hcmNoLmxhc3RfcHRlX3VwZGF0ZWQgPSBzcHRlcDsKIAkJdmNwdS0+YXJjaC5sYXN0X3B0ZV9nZm4gPSBnZm47CkBAIC0xOTM5LDcgKzIwODIsMTAgQEAKIAkJfQogCiAJCWlmICgqaXRlcmF0b3Iuc3B0ZXAgPT0gc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpIHsKLQkJCXBzZXVkb19nZm4gPSAoaXRlcmF0b3IuYWRkciAmIFBUNjRfRElSX0JBU0VfQUREUl9NQVNLKSA+PiBQQUdFX1NISUZUOworCQkJdTY0IGJhc2VfYWRkciA9IGl0ZXJhdG9yLmFkZHI7CisKKwkJCWJhc2VfYWRkciAmPSBQVDY0X0xWTF9BRERSX01BU0soaXRlcmF0b3IubGV2ZWwpOworCQkJcHNldWRvX2dmbiA9IGJhc2VfYWRkciA+PiBQQUdFX1NISUZUOwogCQkJc3AgPSBrdm1fbW11X2dldF9wYWdlKHZjcHUsIHBzZXVkb19nZm4sIGl0ZXJhdG9yLmFkZHIsCiAJCQkJCSAgICAgIGl0ZXJhdG9yLmxldmVsIC0gMSwKIAkJCQkJICAgICAgMSwgQUNDX0FMTCwgaXRlcmF0b3Iuc3B0ZXApOwpAQCAtMTk1OCw2ICsyMTA0LDI5IEBACiAJcmV0dXJuIHB0X3dyaXRlOwogfQogCitzdGF0aWMgdm9pZCBrdm1fc2VuZF9od3BvaXNvbl9zaWduYWwoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCit7CisJY2hhciBidWZbMV07CisJdm9pZCBfX3VzZXIgKmh2YTsKKwlpbnQgcjsKKworCS8qIFRvdWNoIHRoZSBwYWdlLCBzbyBzZW5kIFNJR0JVUyAqLworCWh2YSA9ICh2b2lkIF9fdXNlciAqKWdmbl90b19odmEoa3ZtLCBnZm4pOworCXIgPSBjb3B5X2Zyb21fdXNlcihidWYsIGh2YSwgMSk7Cit9CisKK3N0YXRpYyBpbnQga3ZtX2hhbmRsZV9iYWRfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgcGZuX3QgcGZuKQoreworCWt2bV9yZWxlYXNlX3Bmbl9jbGVhbihwZm4pOworCWlmIChpc19od3BvaXNvbl9wZm4ocGZuKSkgeworCQlrdm1fc2VuZF9od3BvaXNvbl9zaWduYWwoa3ZtLCBnZm4pOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKGlzX2ZhdWx0X3BmbihwZm4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAxOworfQorCiBzdGF0aWMgaW50IG5vbnBhZ2luZ19tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCB2LCBpbnQgd3JpdGUsIGdmbl90IGdmbikKIHsKIAlpbnQgcjsKQEAgLTE5ODEsMTAgKzIxNTAsOCBAQAogCXBmbiA9IGdmbl90b19wZm4odmNwdS0+a3ZtLCBnZm4pOwogCiAJLyogbW1pbyAqLwotCWlmIChpc19lcnJvcl9wZm4ocGZuKSkgewotCQlrdm1fcmVsZWFzZV9wZm5fY2xlYW4ocGZuKTsKLQkJcmV0dXJuIDE7Ci0JfQorCWlmIChpc19lcnJvcl9wZm4ocGZuKSkKKwkJcmV0dXJuIGt2bV9oYW5kbGVfYmFkX3BhZ2UodmNwdS0+a3ZtLCBnZm4sIHBmbik7CiAKIAlzcGluX2xvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOwogCWlmIChtbXVfbm90aWZpZXJfcmV0cnkodmNwdSwgbW11X3NlcSkpCkBAIC0yMDA3LDYgKzIxNzQsNyBAQAogewogCWludCBpOwogCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwOworCUxJU1RfSEVBRChpbnZhbGlkX2xpc3QpOwogCiAJaWYgKCFWQUxJRF9QQUdFKHZjcHUtPmFyY2gubW11LnJvb3RfaHBhKSkKIAkJcmV0dXJuOwpAQCAtMjAxNiw4ICsyMTg0LDEwIEBACiAKIAkJc3AgPSBwYWdlX2hlYWRlcihyb290KTsKIAkJLS1zcC0+cm9vdF9jb3VudDsKLQkJaWYgKCFzcC0+cm9vdF9jb3VudCAmJiBzcC0+cm9sZS5pbnZhbGlkKQotCQkJa3ZtX21tdV96YXBfcGFnZSh2Y3B1LT5rdm0sIHNwKTsKKwkJaWYgKCFzcC0+cm9vdF9jb3VudCAmJiBzcC0+cm9sZS5pbnZhbGlkKSB7CisJCQlrdm1fbW11X3ByZXBhcmVfemFwX3BhZ2UodmNwdS0+a3ZtLCBzcCwgJmludmFsaWRfbGlzdCk7CisJCQlrdm1fbW11X2NvbW1pdF96YXBfcGFnZSh2Y3B1LT5rdm0sICZpbnZhbGlkX2xpc3QpOworCQl9CiAJCXZjcHUtPmFyY2gubW11LnJvb3RfaHBhID0gSU5WQUxJRF9QQUdFOwogCQlzcGluX3VubG9jaygmdmNwdS0+a3ZtLT5tbXVfbG9jayk7CiAJCXJldHVybjsKQEAgLTIwMzAsMTAgKzIyMDAsMTIgQEAKIAkJCXNwID0gcGFnZV9oZWFkZXIocm9vdCk7CiAJCQktLXNwLT5yb290X2NvdW50OwogCQkJaWYgKCFzcC0+cm9vdF9jb3VudCAmJiBzcC0+cm9sZS5pbnZhbGlkKQotCQkJCWt2bV9tbXVfemFwX3BhZ2UodmNwdS0+a3ZtLCBzcCk7CisJCQkJa3ZtX21tdV9wcmVwYXJlX3phcF9wYWdlKHZjcHUtPmt2bSwgc3AsCisJCQkJCQkJICZpbnZhbGlkX2xpc3QpOwogCQl9CiAJCXZjcHUtPmFyY2gubW11LnBhZV9yb290W2ldID0gSU5WQUxJRF9QQUdFOwogCX0KKwlrdm1fbW11X2NvbW1pdF96YXBfcGFnZSh2Y3B1LT5rdm0sICZpbnZhbGlkX2xpc3QpOwogCXNwaW5fdW5sb2NrKCZ2Y3B1LT5rdm0tPm1tdV9sb2NrKTsKIAl2Y3B1LT5hcmNoLm1tdS5yb290X2hwYSA9IElOVkFMSURfUEFHRTsKIH0KQEAgLTIwNDMsNyArMjIxNSw3IEBACiAJaW50IHJldCA9IDA7CiAKIAlpZiAoIWt2bV9pc192aXNpYmxlX2dmbih2Y3B1LT5rdm0sIHJvb3RfZ2ZuKSkgewotCQlzZXRfYml0KEtWTV9SRVFfVFJJUExFX0ZBVUxULCAmdmNwdS0+cmVxdWVzdHMpOworCQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVFJJUExFX0ZBVUxULCB2Y3B1KTsKIAkJcmV0ID0gMTsKIAl9CiAKQEAgLTIwNzEsNiArMjI0Myw3IEBACiAJCQlyb290X2dmbiA9IDA7CiAJCX0KIAkJc3Bpbl9sb2NrKCZ2Y3B1LT5rdm0tPm1tdV9sb2NrKTsKKwkJa3ZtX21tdV9mcmVlX3NvbWVfcGFnZXModmNwdSk7CiAJCXNwID0ga3ZtX21tdV9nZXRfcGFnZSh2Y3B1LCByb290X2dmbiwgMCwKIAkJCQkgICAgICBQVDY0X1JPT1RfTEVWRUwsIGRpcmVjdCwKIAkJCQkgICAgICBBQ0NfQUxMLCBOVUxMKTsKQEAgLTIxMDEsNiArMjI3NCw3IEBACiAJCQlyb290X2dmbiA9IGkgPDwgMzA7CiAJCX0KIAkJc3Bpbl9sb2NrKCZ2Y3B1LT5rdm0tPm1tdV9sb2NrKTsKKwkJa3ZtX21tdV9mcmVlX3NvbWVfcGFnZXModmNwdSk7CiAJCXNwID0ga3ZtX21tdV9nZXRfcGFnZSh2Y3B1LCByb290X2dmbiwgaSA8PCAzMCwKIAkJCQkgICAgICBQVDMyX1JPT1RfTEVWRUwsIGRpcmVjdCwKIAkJCQkgICAgICBBQ0NfQUxMLCBOVUxMKTsKQEAgLTIxOTYsMTAgKzIzNzAsOCBAQAogCW1tdV9zZXEgPSB2Y3B1LT5rdm0tPm1tdV9ub3RpZmllcl9zZXE7CiAJc21wX3JtYigpOwogCXBmbiA9IGdmbl90b19wZm4odmNwdS0+a3ZtLCBnZm4pOwotCWlmIChpc19lcnJvcl9wZm4ocGZuKSkgewotCQlrdm1fcmVsZWFzZV9wZm5fY2xlYW4ocGZuKTsKLQkJcmV0dXJuIDE7Ci0JfQorCWlmIChpc19lcnJvcl9wZm4ocGZuKSkKKwkJcmV0dXJuIGt2bV9oYW5kbGVfYmFkX3BhZ2UodmNwdS0+a3ZtLCBnZm4sIHBmbik7CiAJc3Bpbl9sb2NrKCZ2Y3B1LT5rdm0tPm1tdV9sb2NrKTsKIAlpZiAobW11X25vdGlmaWVyX3JldHJ5KHZjcHUsIG1tdV9zZXEpKQogCQlnb3RvIG91dF91bmxvY2s7CkBAIC0yMjQxLDcgKzI0MTMsNyBAQAogdm9pZCBrdm1fbW11X2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJKyt2Y3B1LT5zdGF0LnRsYl9mbHVzaDsKLQlrdm1feDg2X29wcy0+dGxiX2ZsdXNoKHZjcHUpOworCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0gsIHZjcHUpOwogfQogCiBzdGF0aWMgdm9pZCBwYWdpbmdfbmV3X2NyMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0yNDU1LDEwICsyNjI3LDkgQEAKIHN0YXRpYyB2b2lkIGRlc3Ryb3lfa3ZtX21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJQVNTRVJUKHZjcHUpOwotCWlmIChWQUxJRF9QQUdFKHZjcHUtPmFyY2gubW11LnJvb3RfaHBhKSkgeworCWlmIChWQUxJRF9QQUdFKHZjcHUtPmFyY2gubW11LnJvb3RfaHBhKSkKKwkJLyogbW11LmZyZWUoKSBzaG91bGQgc2V0IHJvb3RfaHBhID0gSU5WQUxJRF9QQUdFICovCiAJCXZjcHUtPmFyY2gubW11LmZyZWUodmNwdSk7Ci0JCXZjcHUtPmFyY2gubW11LnJvb3RfaHBhID0gSU5WQUxJRF9QQUdFOwotCX0KIH0KIAogaW50IGt2bV9tbXVfcmVzZXRfY29udGV4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0yNDc1LDkgKzI2NDYsNiBAQAogCXIgPSBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1KTsKIAlpZiAocikKIAkJZ290byBvdXQ7Ci0Jc3Bpbl9sb2NrKCZ2Y3B1LT5rdm0tPm1tdV9sb2NrKTsKLQlrdm1fbW11X2ZyZWVfc29tZV9wYWdlcyh2Y3B1KTsKLQlzcGluX3VubG9jaygmdmNwdS0+a3ZtLT5tbXVfbG9jayk7CiAJciA9IG1tdV9hbGxvY19yb290cyh2Y3B1KTsKIAlzcGluX2xvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOwogCW1tdV9zeW5jX3Jvb3RzKHZjcHUpOwpAQCAtMjUwNiw3ICsyNjc0LDcgQEAKIAlwdGUgPSAqc3B0ZTsKIAlpZiAoaXNfc2hhZG93X3ByZXNlbnRfcHRlKHB0ZSkpIHsKIAkJaWYgKGlzX2xhc3Rfc3B0ZShwdGUsIHNwLT5yb2xlLmxldmVsKSkKLQkJCXJtYXBfcmVtb3ZlKHZjcHUtPmt2bSwgc3B0ZSk7CisJCQlkcm9wX3NwdGUodmNwdS0+a3ZtLCBzcHRlLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CiAJCWVsc2UgewogCQkJY2hpbGQgPSBwYWdlX2hlYWRlcihwdGUgJiBQVDY0X0JBU0VfQUREUl9NQVNLKTsKIAkJCW1tdV9wYWdlX3JlbW92ZV9wYXJlbnRfcHRlKGNoaWxkLCBzcHRlKTsKQEAgLTI1MjcsNiArMjY5NSw5IEBACiAJCXJldHVybjsKICAgICAgICAgfQogCisJaWYgKGlzX3JzdmRfYml0c19zZXQodmNwdSwgKih1NjQgKiluZXcsIFBUX1BBR0VfVEFCTEVfTEVWRUwpKQorCQlyZXR1cm47CisKIAkrK3ZjcHUtPmt2bS0+c3RhdC5tbXVfcHRlX3VwZGF0ZWQ7CiAJaWYgKCFzcC0+cm9sZS5jcjRfcGFlKQogCQlwYWdpbmczMl91cGRhdGVfcHRlKHZjcHUsIHNwLCBzcHRlLCBuZXcpOwpAQCAtMjU0NywxMSArMjcxOCwxNSBAQAogCXJldHVybiAob2xkICYgfm5ldyAmIFBUNjRfUEVSTV9NQVNLKSAhPSAwOwogfQogCi1zdGF0aWMgdm9pZCBtbXVfcHRlX3dyaXRlX2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvbGQsIHU2NCBuZXcpCitzdGF0aWMgdm9pZCBtbXVfcHRlX3dyaXRlX2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgemFwX3BhZ2UsCisJCQkJICAgIGJvb2wgcmVtb3RlX2ZsdXNoLCBib29sIGxvY2FsX2ZsdXNoKQogewotCWlmIChuZWVkX3JlbW90ZV9mbHVzaChvbGQsIG5ldykpCisJaWYgKHphcF9wYWdlKQorCQlyZXR1cm47CisKKwlpZiAocmVtb3RlX2ZsdXNoKQogCQlrdm1fZmx1c2hfcmVtb3RlX3RsYnModmNwdS0+a3ZtKTsKLQllbHNlCisJZWxzZSBpZiAobG9jYWxfZmx1c2gpCiAJCWt2bV9tbXVfZmx1c2hfdGxiKHZjcHUpOwogfQogCkBAIC0yNjAxLDEwICsyNzc2LDEwIEBACiAJCSAgICAgICBib29sIGd1ZXN0X2luaXRpYXRlZCkKIHsKIAlnZm5fdCBnZm4gPSBncGEgPj4gUEFHRV9TSElGVDsKKwl1bmlvbiBrdm1fbW11X3BhZ2Vfcm9sZSBtYXNrID0geyAud29yZCA9IDAgfTsKIAlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKm47Ci0Jc3RydWN0IGhsaXN0X2hlYWQgKmJ1Y2tldDsKLQl1bnNpZ25lZCBpbmRleDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlMSVNUX0hFQUQoaW52YWxpZF9saXN0KTsKIAl1NjQgZW50cnksIGdlbnRyeTsKIAl1NjQgKnNwdGU7CiAJdW5zaWduZWQgb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoZ3BhKTsKQEAgLTI2MTcsNiArMjc5Miw5IEBACiAJaW50IG5wdGU7CiAJaW50IHI7CiAJaW50IGludmxwZ19jb3VudGVyOworCWJvb2wgcmVtb3RlX2ZsdXNoLCBsb2NhbF9mbHVzaCwgemFwX3BhZ2U7CisKKwl6YXBfcGFnZSA9IHJlbW90ZV9mbHVzaCA9IGxvY2FsX2ZsdXNoID0gZmFsc2U7CiAKIAlwZ3ByaW50aygiJXM6IGdwYSAlbGx4IGJ5dGVzICVkXG4iLCBfX2Z1bmNfXywgZ3BhLCBieXRlcyk7CiAKQEAgLTI2NzIsMTMgKzI4NTAsOSBAQAogCQkJdmNwdS0+YXJjaC5sYXN0X3B0ZV91cGRhdGVkID0gTlVMTDsKIAkJfQogCX0KLQlpbmRleCA9IGt2bV9wYWdlX3RhYmxlX2hhc2hmbihnZm4pOwotCWJ1Y2tldCA9ICZ2Y3B1LT5rdm0tPmFyY2gubW11X3BhZ2VfaGFzaFtpbmRleF07CiAKLXJlc3RhcnQ6Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzcCwgbm9kZSwgbiwgYnVja2V0LCBoYXNoX2xpbmspIHsKLQkJaWYgKHNwLT5nZm4gIT0gZ2ZuIHx8IHNwLT5yb2xlLmRpcmVjdCB8fCBzcC0+cm9sZS5pbnZhbGlkKQotCQkJY29udGludWU7CisJbWFzay5jcjBfd3AgPSBtYXNrLmNyNF9wYWUgPSBtYXNrLm54ZSA9IDE7CisJZm9yX2VhY2hfZ2ZuX2luZGlyZWN0X3ZhbGlkX3NwKHZjcHUtPmt2bSwgc3AsIGdmbiwgbm9kZSkgewogCQlwdGVfc2l6ZSA9IHNwLT5yb2xlLmNyNF9wYWUgPyA4IDogNDsKIAkJbWlzYWxpZ25lZCA9IChvZmZzZXQgXiAob2Zmc2V0ICsgYnl0ZXMgLSAxKSkgJiB+KHB0ZV9zaXplIC0gMSk7CiAJCW1pc2FsaWduZWQgfD0gYnl0ZXMgPCA0OwpAQCAtMjY5NSw4ICsyODY5LDggQEAKIAkJCSAqLwogCQkJcGdwcmludGsoIm1pc2FsaWduZWQ6IGdwYSAlbGx4IGJ5dGVzICVkIHJvbGUgJXhcbiIsCiAJCQkJIGdwYSwgYnl0ZXMsIHNwLT5yb2xlLndvcmQpOwotCQkJaWYgKGt2bV9tbXVfemFwX3BhZ2UodmNwdS0+a3ZtLCBzcCkpCi0JCQkJZ290byByZXN0YXJ0OworCQkJemFwX3BhZ2UgfD0gISFrdm1fbW11X3ByZXBhcmVfemFwX3BhZ2UodmNwdS0+a3ZtLCBzcCwKKwkJCQkJCSAgICAgJmludmFsaWRfbGlzdCk7CiAJCQkrK3ZjcHUtPmt2bS0+c3RhdC5tbXVfZmxvb2RlZDsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0yNzIwLDE2ICsyODk0LDIyIEBACiAJCQlpZiAocXVhZHJhbnQgIT0gc3AtPnJvbGUucXVhZHJhbnQpCiAJCQkJY29udGludWU7CiAJCX0KKwkJbG9jYWxfZmx1c2ggPSB0cnVlOwogCQlzcHRlID0gJnNwLT5zcHRbcGFnZV9vZmZzZXQgLyBzaXplb2YoKnNwdGUpXTsKIAkJd2hpbGUgKG5wdGUtLSkgewogCQkJZW50cnkgPSAqc3B0ZTsKIAkJCW1tdV9wdGVfd3JpdGVfemFwX3B0ZSh2Y3B1LCBzcCwgc3B0ZSk7Ci0JCQlpZiAoZ2VudHJ5KQorCQkJaWYgKGdlbnRyeSAmJgorCQkJICAgICAgISgoc3AtPnJvbGUud29yZCBeIHZjcHUtPmFyY2gubW11LmJhc2Vfcm9sZS53b3JkKQorCQkJICAgICAgJiBtYXNrLndvcmQpKQogCQkJCW1tdV9wdGVfd3JpdGVfbmV3X3B0ZSh2Y3B1LCBzcCwgc3B0ZSwgJmdlbnRyeSk7Ci0JCQltbXVfcHRlX3dyaXRlX2ZsdXNoX3RsYih2Y3B1LCBlbnRyeSwgKnNwdGUpOworCQkJaWYgKCFyZW1vdGVfZmx1c2ggJiYgbmVlZF9yZW1vdGVfZmx1c2goZW50cnksICpzcHRlKSkKKwkJCQlyZW1vdGVfZmx1c2ggPSB0cnVlOwogCQkJKytzcHRlOwogCQl9CiAJfQorCW1tdV9wdGVfd3JpdGVfZmx1c2hfdGxiKHZjcHUsIHphcF9wYWdlLCByZW1vdGVfZmx1c2gsIGxvY2FsX2ZsdXNoKTsKKwlrdm1fbW11X2NvbW1pdF96YXBfcGFnZSh2Y3B1LT5rdm0sICZpbnZhbGlkX2xpc3QpOwogCWt2bV9tbXVfYXVkaXQodmNwdSwgInBvc3QgcHRlIHdyaXRlIik7CiAJc3Bpbl91bmxvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOwogCWlmICghaXNfZXJyb3JfcGZuKHZjcHUtPmFyY2gudXBkYXRlX3B0ZS5wZm4pKSB7CkBAIC0yNzU3LDE1ICsyOTM3LDIxIEBACiAKIHZvaWQgX19rdm1fbW11X2ZyZWVfc29tZV9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Jd2hpbGUgKHZjcHUtPmt2bS0+YXJjaC5uX2ZyZWVfbW11X3BhZ2VzIDwgS1ZNX1JFRklMTF9QQUdFUyAmJgorCWludCBmcmVlX3BhZ2VzOworCUxJU1RfSEVBRChpbnZhbGlkX2xpc3QpOworCisJZnJlZV9wYWdlcyA9IHZjcHUtPmt2bS0+YXJjaC5uX2ZyZWVfbW11X3BhZ2VzOworCXdoaWxlIChmcmVlX3BhZ2VzIDwgS1ZNX1JFRklMTF9QQUdFUyAmJgogCSAgICAgICAhbGlzdF9lbXB0eSgmdmNwdS0+a3ZtLT5hcmNoLmFjdGl2ZV9tbXVfcGFnZXMpKSB7CiAJCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwOwogCiAJCXNwID0gY29udGFpbmVyX29mKHZjcHUtPmt2bS0+YXJjaC5hY3RpdmVfbW11X3BhZ2VzLnByZXYsCiAJCQkJICBzdHJ1Y3Qga3ZtX21tdV9wYWdlLCBsaW5rKTsKLQkJa3ZtX21tdV96YXBfcGFnZSh2Y3B1LT5rdm0sIHNwKTsKKwkJZnJlZV9wYWdlcyArPSBrdm1fbW11X3ByZXBhcmVfemFwX3BhZ2UodmNwdS0+a3ZtLCBzcCwKKwkJCQkJCSAgICAgICAmaW52YWxpZF9saXN0KTsKIAkJKyt2Y3B1LT5rdm0tPnN0YXQubW11X3JlY3ljbGVkOwogCX0KKwlrdm1fbW11X2NvbW1pdF96YXBfcGFnZSh2Y3B1LT5rdm0sICZpbnZhbGlkX2xpc3QpOwogfQogCiBpbnQga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgY3IyLCB1MzIgZXJyb3JfY29kZSkKQEAgLTI3OTMsMTEgKzI5NzksOCBAQAogCQlyZXR1cm4gMTsKIAljYXNlIEVNVUxBVEVfRE9fTU1JTzoKIAkJKyt2Y3B1LT5zdGF0Lm1taW9fZXhpdHM7Ci0JCXJldHVybiAwOworCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIEVNVUxBVEVfRkFJTDoKLQkJdmNwdS0+cnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0lOVEVSTkFMX0VSUk9SOwotCQl2Y3B1LT5ydW4tPmludGVybmFsLnN1YmVycm9yID0gS1ZNX0lOVEVSTkFMX0VSUk9SX0VNVUxBVElPTjsKLQkJdmNwdS0+cnVuLT5pbnRlcm5hbC5uZGF0YSA9IDA7CiAJCXJldHVybiAwOwogCWRlZmF1bHQ6CiAJCUJVRygpOwpAQCAtMjg5NCw3ICszMDc3LDcgQEAKIAkJcHQgPSBzcC0+c3B0OwogCQlmb3IgKGkgPSAwOyBpIDwgUFQ2NF9FTlRfUEVSX1BBR0U7ICsraSkKIAkJCS8qIGF2b2lkIFJNVyAqLwotCQkJaWYgKHB0W2ldICYgUFRfV1JJVEFCTEVfTUFTSykKKwkJCWlmIChpc193cml0YWJsZV9wdGUocHRbaV0pKQogCQkJCXB0W2ldICY9IH5QVF9XUklUQUJMRV9NQVNLOwogCX0KIAlrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTsKQEAgLTI5MDMsMjggKzMwODYsMjkgQEAKIHZvaWQga3ZtX21tdV96YXBfYWxsKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwgKm5vZGU7CisJTElTVF9IRUFEKGludmFsaWRfbGlzdCk7CiAKIAlzcGluX2xvY2soJmt2bS0+bW11X2xvY2spOwogcmVzdGFydDoKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3AsIG5vZGUsICZrdm0tPmFyY2guYWN0aXZlX21tdV9wYWdlcywgbGluaykKLQkJaWYgKGt2bV9tbXVfemFwX3BhZ2Uoa3ZtLCBzcCkpCisJCWlmIChrdm1fbW11X3ByZXBhcmVfemFwX3BhZ2Uoa3ZtLCBzcCwgJmludmFsaWRfbGlzdCkpCiAJCQlnb3RvIHJlc3RhcnQ7CiAKKwlrdm1fbW11X2NvbW1pdF96YXBfcGFnZShrdm0sICZpbnZhbGlkX2xpc3QpOwogCXNwaW5fdW5sb2NrKCZrdm0tPm1tdV9sb2NrKTsKLQotCWt2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pOwogfQogCi1zdGF0aWMgaW50IGt2bV9tbXVfcmVtb3ZlX3NvbWVfYWxsb2NfbW11X3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSkKK3N0YXRpYyBpbnQga3ZtX21tdV9yZW1vdmVfc29tZV9hbGxvY19tbXVfcGFnZXMoc3RydWN0IGt2bSAqa3ZtLAorCQkJCQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqaW52YWxpZF9saXN0KQogewogCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnBhZ2U7CiAKIAlwYWdlID0gY29udGFpbmVyX29mKGt2bS0+YXJjaC5hY3RpdmVfbW11X3BhZ2VzLnByZXYsCiAJCQkgICAgc3RydWN0IGt2bV9tbXVfcGFnZSwgbGluayk7Ci0JcmV0dXJuIGt2bV9tbXVfemFwX3BhZ2Uoa3ZtLCBwYWdlKSArIDE7CisJcmV0dXJuIGt2bV9tbXVfcHJlcGFyZV96YXBfcGFnZShrdm0sIHBhZ2UsIGludmFsaWRfbGlzdCk7CiB9CiAKLXN0YXRpYyBpbnQgbW11X3NocmluayhpbnQgbnJfdG9fc2NhbiwgZ2ZwX3QgZ2ZwX21hc2spCitzdGF0aWMgaW50IG1tdV9zaHJpbmsoc3RydWN0IHNocmlua2VyICpzaHJpbmssIGludCBucl90b19zY2FuLCBnZnBfdCBnZnBfbWFzaykKIHsKIAlzdHJ1Y3Qga3ZtICprdm07CiAJc3RydWN0IGt2bSAqa3ZtX2ZyZWVkID0gTlVMTDsKQEAgLTI5MzQsNiArMzExOCw3IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGt2bSwgJnZtX2xpc3QsIHZtX2xpc3QpIHsKIAkJaW50IG5wYWdlcywgaWR4LCBmcmVlZF9wYWdlczsKKwkJTElTVF9IRUFEKGludmFsaWRfbGlzdCk7CiAKIAkJaWR4ID0gc3JjdV9yZWFkX2xvY2soJmt2bS0+c3JjdSk7CiAJCXNwaW5fbG9jaygma3ZtLT5tbXVfbG9jayk7CkBAIC0yOTQxLDEyICszMTI2LDE0IEBACiAJCQkga3ZtLT5hcmNoLm5fZnJlZV9tbXVfcGFnZXM7CiAJCWNhY2hlX2NvdW50ICs9IG5wYWdlczsKIAkJaWYgKCFrdm1fZnJlZWQgJiYgbnJfdG9fc2NhbiA+IDAgJiYgbnBhZ2VzID4gMCkgewotCQkJZnJlZWRfcGFnZXMgPSBrdm1fbW11X3JlbW92ZV9zb21lX2FsbG9jX21tdV9wYWdlcyhrdm0pOworCQkJZnJlZWRfcGFnZXMgPSBrdm1fbW11X3JlbW92ZV9zb21lX2FsbG9jX21tdV9wYWdlcyhrdm0sCisJCQkJCQkJICAmaW52YWxpZF9saXN0KTsKIAkJCWNhY2hlX2NvdW50IC09IGZyZWVkX3BhZ2VzOwogCQkJa3ZtX2ZyZWVkID0ga3ZtOwogCQl9CiAJCW5yX3RvX3NjYW4tLTsKIAorCQlrdm1fbW11X2NvbW1pdF96YXBfcGFnZShrdm0sICZpbnZhbGlkX2xpc3QpOwogCQlzcGluX3VubG9jaygma3ZtLT5tbXVfbG9jayk7CiAJCXNyY3VfcmVhZF91bmxvY2soJmt2bS0+c3JjdSwgaWR4KTsKIAl9CkBAIC0zMDcyLDcgKzMyNTksNyBAQAogCiBzdGF0aWMgaW50IGt2bV9wdl9tbXVfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlrdm1fc2V0X2NyMyh2Y3B1LCB2Y3B1LT5hcmNoLmNyMyk7CisJKHZvaWQpa3ZtX3NldF9jcjModmNwdSwgdmNwdS0+YXJjaC5jcjMpOwogCXJldHVybiAxOwogfQogCkBAIC0zMzI5LDkgKzM1MTYsOSBAQAogCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnJldl9zcDsKIAlnZm5fdCBnZm47CiAKLQlpZiAoKnNwdGVwICYgUFRfV1JJVEFCTEVfTUFTSykgeworCWlmIChpc193cml0YWJsZV9wdGUoKnNwdGVwKSkgewogCQlyZXZfc3AgPSBwYWdlX2hlYWRlcihfX3BhKHNwdGVwKSk7Ci0JCWdmbiA9IHJldl9zcC0+Z2Zuc1tzcHRlcCAtIHJldl9zcC0+c3B0XTsKKwkJZ2ZuID0ga3ZtX21tdV9wYWdlX2dldF9nZm4ocmV2X3NwLCBzcHRlcCAtIHJldl9zcC0+c3B0KTsKIAogCQlpZiAoIWdmbl90b19tZW1zbG90KGt2bSwgZ2ZuKSkgewogCQkJaWYgKCFwcmludGtfcmF0ZWxpbWl0KCkpCkBAIC0zMzQ1LDggKzM1MzIsNyBAQAogCQkJcmV0dXJuOwogCQl9CiAKLQkJcm1hcHAgPSBnZm5fdG9fcm1hcChrdm0sIHJldl9zcC0+Z2Zuc1tzcHRlcCAtIHJldl9zcC0+c3B0XSwKLQkJCQkgICAgcmV2X3NwLT5yb2xlLmxldmVsKTsKKwkJcm1hcHAgPSBnZm5fdG9fcm1hcChrdm0sIGdmbiwgcmV2X3NwLT5yb2xlLmxldmVsKTsKIAkJaWYgKCEqcm1hcHApIHsKIAkJCWlmICghcHJpbnRrX3JhdGVsaW1pdCgpKQogCQkJCXJldHVybjsKQEAgLTMzNzksNyArMzU2NSw3IEBACiAKIAkJCWlmICghKGVudCAmIFBUX1BSRVNFTlRfTUFTSykpCiAJCQkJY29udGludWU7Ci0JCQlpZiAoIShlbnQgJiBQVF9XUklUQUJMRV9NQVNLKSkKKwkJCWlmICghaXNfd3JpdGFibGVfcHRlKGVudCkpCiAJCQkJY29udGludWU7CiAJCQlpbnNwZWN0X3NwdGVfaGFzX3JtYXAodmNwdS0+a3ZtLCAmcHRbaV0pOwogCQl9CkBAIC0zNDA3LDEzICszNTkzLDEyIEBACiAJCWlmIChzcC0+dW5zeW5jKQogCQkJY29udGludWU7CiAKLQkJZ2ZuID0gdW5hbGlhc19nZm4odmNwdS0+a3ZtLCBzcC0+Z2ZuKTsKLQkJc2xvdCA9IGdmbl90b19tZW1zbG90X3VuYWxpYXNlZCh2Y3B1LT5rdm0sIHNwLT5nZm4pOworCQlzbG90ID0gZ2ZuX3RvX21lbXNsb3QodmNwdS0+a3ZtLCBzcC0+Z2ZuKTsKIAkJcm1hcHAgPSAmc2xvdC0+cm1hcFtnZm4gLSBzbG90LT5iYXNlX2dmbl07CiAKIAkJc3B0ZSA9IHJtYXBfbmV4dCh2Y3B1LT5rdm0sIHJtYXBwLCBOVUxMKTsKIAkJd2hpbGUgKHNwdGUpIHsKLQkJCWlmICgqc3B0ZSAmIFBUX1dSSVRBQkxFX01BU0spCisJCQlpZiAoaXNfd3JpdGFibGVfcHRlKCpzcHRlKSkKIAkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiAoJXMpIHNoYWRvdyBwYWdlIGhhcyAiCiAJCQkJIndyaXRhYmxlIG1hcHBpbmdzOiBnZm4gJWx4IHJvbGUgJXhcbiIsCiAJCQkgICAgICAgX19mdW5jX18sIGF1ZGl0X21zZywgc3AtPmdmbiwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXV0cmFjZS5oIGIvYXJjaC94ODYva3ZtL21tdXRyYWNlLmgKaW5kZXggNDJmMDdiMS4uM2FhYjBmMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdXRyYWNlLmgKKysrIGIvYXJjaC94ODYva3ZtL21tdXRyYWNlLmgKQEAgLTE5MCw3ICsxOTAsNyBAQAogCVRQX0FSR1Moc3ApCiApOwogCi1ERUZJTkVfRVZFTlQoa3ZtX21tdV9wYWdlX2NsYXNzLCBrdm1fbW11X3phcF9wYWdlLAorREVGSU5FX0VWRU5UKGt2bV9tbXVfcGFnZV9jbGFzcywga3ZtX21tdV9wcmVwYXJlX3phcF9wYWdlLAogCVRQX1BST1RPKHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKSwKIAogCVRQX0FSR1Moc3ApCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaCBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCmluZGV4IDg5ZDY2Y2EuLjUxZWY5MDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCisrKyBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCkBAIC03LDYgKzcsNyBAQAogICogTU1VIHN1cHBvcnQKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUXVtcmFuZXQsIEluYy4KKyAqIENvcHlyaWdodCAyMDEwIFJlZCBIYXQsIEluYy4gYW5kL29yIGl0cyBhZmZpbGF0ZXMuCiAgKgogICogQXV0aG9yczoKICAqICAgWWFuaXYgS2FtYXkgIDx5YW5pdkBxdW1yYW5ldC5jb20+CkBAIC0xMTgsMjEgKzExOSwyNSBAQAogewogCXB0X2VsZW1lbnRfdCBwdGU7CiAJZ2ZuX3QgdGFibGVfZ2ZuOwotCXVuc2lnbmVkIGluZGV4LCBwdF9hY2Nlc3MsIHB0ZV9hY2Nlc3M7CisJdW5zaWduZWQgaW5kZXgsIHB0X2FjY2VzcywgdW5pbml0aWFsaXplZF92YXIocHRlX2FjY2Vzcyk7CiAJZ3BhX3QgcHRlX2dwYTsKLQlpbnQgcnN2ZF9mYXVsdCA9IDA7CisJYm9vbCBlcGVybSwgcHJlc2VudCwgcnN2ZF9mYXVsdDsKIAogCXRyYWNlX2t2bV9tbXVfcGFnZXRhYmxlX3dhbGsoYWRkciwgd3JpdGVfZmF1bHQsIHVzZXJfZmF1bHQsCiAJCQkJICAgICBmZXRjaF9mYXVsdCk7CiB3YWxrOgorCXByZXNlbnQgPSB0cnVlOworCWVwZXJtID0gcnN2ZF9mYXVsdCA9IGZhbHNlOwogCXdhbGtlci0+bGV2ZWwgPSB2Y3B1LT5hcmNoLm1tdS5yb290X2xldmVsOwogCXB0ZSA9IHZjcHUtPmFyY2guY3IzOwogI2lmIFBUVFlQRSA9PSA2NAogCWlmICghaXNfbG9uZ19tb2RlKHZjcHUpKSB7CiAJCXB0ZSA9IGt2bV9wZHB0cl9yZWFkKHZjcHUsIChhZGRyID4+IDMwKSAmIDMpOwogCQl0cmFjZV9rdm1fbW11X3BhZ2luZ19lbGVtZW50KHB0ZSwgd2Fsa2VyLT5sZXZlbCk7Ci0JCWlmICghaXNfcHJlc2VudF9ncHRlKHB0ZSkpCi0JCQlnb3RvIG5vdF9wcmVzZW50OworCQlpZiAoIWlzX3ByZXNlbnRfZ3B0ZShwdGUpKSB7CisJCQlwcmVzZW50ID0gZmFsc2U7CisJCQlnb3RvIGVycm9yOworCQl9CiAJCS0td2Fsa2VyLT5sZXZlbDsKIAl9CiAjZW5kaWYKQEAgLTE1MCwzNyArMTU1LDQyIEBACiAJCXdhbGtlci0+dGFibGVfZ2ZuW3dhbGtlci0+bGV2ZWwgLSAxXSA9IHRhYmxlX2dmbjsKIAkJd2Fsa2VyLT5wdGVfZ3BhW3dhbGtlci0+bGV2ZWwgLSAxXSA9IHB0ZV9ncGE7CiAKLQkJaWYgKGt2bV9yZWFkX2d1ZXN0KHZjcHUtPmt2bSwgcHRlX2dwYSwgJnB0ZSwgc2l6ZW9mKHB0ZSkpKQotCQkJZ290byBub3RfcHJlc2VudDsKKwkJaWYgKGt2bV9yZWFkX2d1ZXN0KHZjcHUtPmt2bSwgcHRlX2dwYSwgJnB0ZSwgc2l6ZW9mKHB0ZSkpKSB7CisJCQlwcmVzZW50ID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQogCiAJCXRyYWNlX2t2bV9tbXVfcGFnaW5nX2VsZW1lbnQocHRlLCB3YWxrZXItPmxldmVsKTsKIAotCQlpZiAoIWlzX3ByZXNlbnRfZ3B0ZShwdGUpKQotCQkJZ290byBub3RfcHJlc2VudDsKKwkJaWYgKCFpc19wcmVzZW50X2dwdGUocHRlKSkgeworCQkJcHJlc2VudCA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KIAotCQlyc3ZkX2ZhdWx0ID0gaXNfcnN2ZF9iaXRzX3NldCh2Y3B1LCBwdGUsIHdhbGtlci0+bGV2ZWwpOwotCQlpZiAocnN2ZF9mYXVsdCkKLQkJCWdvdG8gYWNjZXNzX2Vycm9yOworCQlpZiAoaXNfcnN2ZF9iaXRzX3NldCh2Y3B1LCBwdGUsIHdhbGtlci0+bGV2ZWwpKSB7CisJCQlyc3ZkX2ZhdWx0ID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CiAKIAkJaWYgKHdyaXRlX2ZhdWx0ICYmICFpc193cml0YWJsZV9wdGUocHRlKSkKIAkJCWlmICh1c2VyX2ZhdWx0IHx8IGlzX3dyaXRlX3Byb3RlY3Rpb24odmNwdSkpCi0JCQkJZ290byBhY2Nlc3NfZXJyb3I7CisJCQkJZXBlcm0gPSB0cnVlOwogCiAJCWlmICh1c2VyX2ZhdWx0ICYmICEocHRlICYgUFRfVVNFUl9NQVNLKSkKLQkJCWdvdG8gYWNjZXNzX2Vycm9yOworCQkJZXBlcm0gPSB0cnVlOwogCiAjaWYgUFRUWVBFID09IDY0CiAJCWlmIChmZXRjaF9mYXVsdCAmJiAocHRlICYgUFQ2NF9OWF9NQVNLKSkKLQkJCWdvdG8gYWNjZXNzX2Vycm9yOworCQkJZXBlcm0gPSB0cnVlOwogI2VuZGlmCiAKLQkJaWYgKCEocHRlICYgUFRfQUNDRVNTRURfTUFTSykpIHsKKwkJaWYgKCFlcGVybSAmJiAhcnN2ZF9mYXVsdCAmJiAhKHB0ZSAmIFBUX0FDQ0VTU0VEX01BU0spKSB7CiAJCQl0cmFjZV9rdm1fbW11X3NldF9hY2Nlc3NlZF9iaXQodGFibGVfZ2ZuLCBpbmRleCwKIAkJCQkJCSAgICAgICBzaXplb2YocHRlKSk7Ci0JCQltYXJrX3BhZ2VfZGlydHkodmNwdS0+a3ZtLCB0YWJsZV9nZm4pOwogCQkJaWYgKEZOQU1FKGNtcHhjaGdfZ3B0ZSkodmNwdS0+a3ZtLCB0YWJsZV9nZm4sCiAJCQkgICAgaW5kZXgsIHB0ZSwgcHRlfFBUX0FDQ0VTU0VEX01BU0spKQogCQkJCWdvdG8gd2FsazsKKwkJCW1hcmtfcGFnZV9kaXJ0eSh2Y3B1LT5rdm0sIHRhYmxlX2dmbik7CiAJCQlwdGUgfD0gUFRfQUNDRVNTRURfTUFTSzsKIAkJfQogCkBAIC0yMTMsMTUgKzIyMywxOCBAQAogCQktLXdhbGtlci0+bGV2ZWw7CiAJfQogCisJaWYgKCFwcmVzZW50IHx8IGVwZXJtIHx8IHJzdmRfZmF1bHQpCisJCWdvdG8gZXJyb3I7CisKIAlpZiAod3JpdGVfZmF1bHQgJiYgIWlzX2RpcnR5X2dwdGUocHRlKSkgewogCQlib29sIHJldDsKIAogCQl0cmFjZV9rdm1fbW11X3NldF9kaXJ0eV9iaXQodGFibGVfZ2ZuLCBpbmRleCwgc2l6ZW9mKHB0ZSkpOwotCQltYXJrX3BhZ2VfZGlydHkodmNwdS0+a3ZtLCB0YWJsZV9nZm4pOwogCQlyZXQgPSBGTkFNRShjbXB4Y2hnX2dwdGUpKHZjcHUtPmt2bSwgdGFibGVfZ2ZuLCBpbmRleCwgcHRlLAogCQkJICAgIHB0ZXxQVF9ESVJUWV9NQVNLKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gd2FsazsKKwkJbWFya19wYWdlX2RpcnR5KHZjcHUtPmt2bSwgdGFibGVfZ2ZuKTsKIAkJcHRlIHw9IFBUX0RJUlRZX01BU0s7CiAJCXdhbGtlci0+cHRlc1t3YWxrZXItPmxldmVsIC0gMV0gPSBwdGU7CiAJfQpAQCAtMjI5LDIyICsyNDIsMTggQEAKIAl3YWxrZXItPnB0X2FjY2VzcyA9IHB0X2FjY2VzczsKIAl3YWxrZXItPnB0ZV9hY2Nlc3MgPSBwdGVfYWNjZXNzOwogCXBncHJpbnRrKCIlczogcHRlICVsbHggcHRlX2FjY2VzcyAleCBwdF9hY2Nlc3MgJXhcbiIsCi0JCSBfX2Z1bmNfXywgKHU2NClwdGUsIHB0X2FjY2VzcywgcHRlX2FjY2Vzcyk7CisJCSBfX2Z1bmNfXywgKHU2NClwdGUsIHB0ZV9hY2Nlc3MsIHB0X2FjY2Vzcyk7CiAJcmV0dXJuIDE7CiAKLW5vdF9wcmVzZW50OgorZXJyb3I6CiAJd2Fsa2VyLT5lcnJvcl9jb2RlID0gMDsKLQlnb3RvIGVycjsKLQotYWNjZXNzX2Vycm9yOgotCXdhbGtlci0+ZXJyb3JfY29kZSA9IFBGRVJSX1BSRVNFTlRfTUFTSzsKLQotZXJyOgorCWlmIChwcmVzZW50KQorCQl3YWxrZXItPmVycm9yX2NvZGUgfD0gUEZFUlJfUFJFU0VOVF9NQVNLOwogCWlmICh3cml0ZV9mYXVsdCkKIAkJd2Fsa2VyLT5lcnJvcl9jb2RlIHw9IFBGRVJSX1dSSVRFX01BU0s7CiAJaWYgKHVzZXJfZmF1bHQpCiAJCXdhbGtlci0+ZXJyb3JfY29kZSB8PSBQRkVSUl9VU0VSX01BU0s7Ci0JaWYgKGZldGNoX2ZhdWx0KQorCWlmIChmZXRjaF9mYXVsdCAmJiBpc19ueCh2Y3B1KSkKIAkJd2Fsa2VyLT5lcnJvcl9jb2RlIHw9IFBGRVJSX0ZFVENIX01BU0s7CiAJaWYgKHJzdmRfZmF1bHQpCiAJCXdhbGtlci0+ZXJyb3JfY29kZSB8PSBQRkVSUl9SU1ZEX01BU0s7CkBAIC0yNTIsNyArMjYxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgRk5BTUUodXBkYXRlX3B0ZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpwYWdlLAorc3RhdGljIHZvaWQgRk5BTUUodXBkYXRlX3B0ZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwKIAkJCSAgICAgIHU2NCAqc3B0ZSwgY29uc3Qgdm9pZCAqcHRlKQogewogCXB0X2VsZW1lbnRfdCBncHRlOwpAQCAtMjYzLDcgKzI3Miw3IEBACiAJZ3B0ZSA9ICooY29uc3QgcHRfZWxlbWVudF90ICopcHRlOwogCWlmICh+Z3B0ZSAmIChQVF9QUkVTRU5UX01BU0sgfCBQVF9BQ0NFU1NFRF9NQVNLKSkgewogCQlpZiAoIWlzX3ByZXNlbnRfZ3B0ZShncHRlKSkgewotCQkJaWYgKHBhZ2UtPnVuc3luYykKKwkJCWlmIChzcC0+dW5zeW5jKQogCQkJCW5ld19zcHRlID0gc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGU7CiAJCQllbHNlCiAJCQkJbmV3X3NwdGUgPSBzaGFkb3dfbm90cmFwX25vbnByZXNlbnRfcHRlOwpAQCAtMjcyLDcgKzI4MSw3IEBACiAJCXJldHVybjsKIAl9CiAJcGdwcmludGsoIiVzOiBncHRlICVsbHggc3B0ZSAlcFxuIiwgX19mdW5jX18sICh1NjQpZ3B0ZSwgc3B0ZSk7Ci0JcHRlX2FjY2VzcyA9IHBhZ2UtPnJvbGUuYWNjZXNzICYgRk5BTUUoZ3B0ZV9hY2Nlc3MpKHZjcHUsIGdwdGUpOworCXB0ZV9hY2Nlc3MgPSBzcC0+cm9sZS5hY2Nlc3MgJiBGTkFNRShncHRlX2FjY2VzcykodmNwdSwgZ3B0ZSk7CiAJaWYgKGdwdGVfdG9fZ2ZuKGdwdGUpICE9IHZjcHUtPmFyY2gudXBkYXRlX3B0ZS5nZm4pCiAJCXJldHVybjsKIAlwZm4gPSB2Y3B1LT5hcmNoLnVwZGF0ZV9wdGUucGZuOwpAQCAtMjg1LDExICsyOTQsMjIgQEAKIAkgKiB3ZSBjYWxsIG1tdV9zZXRfc3B0ZSgpIHdpdGggcmVzZXRfaG9zdF9wcm90ZWN0aW9uID0gdHJ1ZSBiZWFjdXNlIHRoYXQKIAkgKiB2Y3B1LT5hcmNoLnVwZGF0ZV9wdGUucGZuIHdhcyBmZXRjaGVkIGZyb20gZ2V0X3VzZXJfcGFnZXMod3JpdGUgPSAxKS4KIAkgKi8KLQltbXVfc2V0X3NwdGUodmNwdSwgc3B0ZSwgcGFnZS0+cm9sZS5hY2Nlc3MsIHB0ZV9hY2Nlc3MsIDAsIDAsCi0JCSAgICAgZ3B0ZSAmIFBUX0RJUlRZX01BU0ssIE5VTEwsIFBUX1BBR0VfVEFCTEVfTEVWRUwsCisJbW11X3NldF9zcHRlKHZjcHUsIHNwdGUsIHNwLT5yb2xlLmFjY2VzcywgcHRlX2FjY2VzcywgMCwgMCwKKwkJICAgICBpc19kaXJ0eV9ncHRlKGdwdGUpLCBOVUxMLCBQVF9QQUdFX1RBQkxFX0xFVkVMLAogCQkgICAgIGdwdGVfdG9fZ2ZuKGdwdGUpLCBwZm4sIHRydWUsIHRydWUpOwogfQogCitzdGF0aWMgYm9vbCBGTkFNRShncHRlX2NoYW5nZWQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQlzdHJ1Y3QgZ3Vlc3Rfd2Fsa2VyICpndywgaW50IGxldmVsKQoreworCWludCByOworCXB0X2VsZW1lbnRfdCBjdXJyX3B0ZTsKKworCXIgPSBrdm1fcmVhZF9ndWVzdF9hdG9taWModmNwdS0+a3ZtLCBndy0+cHRlX2dwYVtsZXZlbCAtIDFdLAorCQkJCSAgJmN1cnJfcHRlLCBzaXplb2YoY3Vycl9wdGUpKTsKKwlyZXR1cm4gciB8fCBjdXJyX3B0ZSAhPSBndy0+cHRlc1tsZXZlbCAtIDFdOworfQorCiAvKgogICogRmV0Y2ggYSBzaGFkb3cgcHRlIGZvciBhIHNwZWNpZmljIGxldmVsIGluIHRoZSBwYWdpbmcgaGllcmFyY2h5LgogICovCkBAIC0yOTksNzQgKzMxOSw4NiBAQAogCQkJIGludCAqcHR3cml0ZSwgcGZuX3QgcGZuKQogewogCXVuc2lnbmVkIGFjY2VzcyA9IGd3LT5wdF9hY2Nlc3M7Ci0Jc3RydWN0IGt2bV9tbXVfcGFnZSAqc2hhZG93X3BhZ2U7Ci0JdTY0IHNwdGUsICpzcHRlcCA9IE5VTEw7Ci0JaW50IGRpcmVjdDsKLQlnZm5fdCB0YWJsZV9nZm47Ci0JaW50IHI7Ci0JaW50IGxldmVsOwotCXB0X2VsZW1lbnRfdCBjdXJyX3B0ZTsKLQlzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrX2l0ZXJhdG9yIGl0ZXJhdG9yOworCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwID0gTlVMTDsKKwlib29sIGRpcnR5ID0gaXNfZGlydHlfZ3B0ZShndy0+cHRlc1tndy0+bGV2ZWwgLSAxXSk7CisJaW50IHRvcF9sZXZlbDsKKwl1bnNpZ25lZCBkaXJlY3RfYWNjZXNzOworCXN0cnVjdCBrdm1fc2hhZG93X3dhbGtfaXRlcmF0b3IgaXQ7CiAKIAlpZiAoIWlzX3ByZXNlbnRfZ3B0ZShndy0+cHRlc1tndy0+bGV2ZWwgLSAxXSkpCiAJCXJldHVybiBOVUxMOwogCi0JZm9yX2VhY2hfc2hhZG93X2VudHJ5KHZjcHUsIGFkZHIsIGl0ZXJhdG9yKSB7Ci0JCWxldmVsID0gaXRlcmF0b3IubGV2ZWw7Ci0JCXNwdGVwID0gaXRlcmF0b3Iuc3B0ZXA7Ci0JCWlmIChpdGVyYXRvci5sZXZlbCA9PSBobGV2ZWwpIHsKLQkJCW1tdV9zZXRfc3B0ZSh2Y3B1LCBzcHRlcCwgYWNjZXNzLAotCQkJCSAgICAgZ3ctPnB0ZV9hY2Nlc3MgJiBhY2Nlc3MsCi0JCQkJICAgICB1c2VyX2ZhdWx0LCB3cml0ZV9mYXVsdCwKLQkJCQkgICAgIGd3LT5wdGVzW2d3LT5sZXZlbC0xXSAmIFBUX0RJUlRZX01BU0ssCi0JCQkJICAgICBwdHdyaXRlLCBsZXZlbCwKLQkJCQkgICAgIGd3LT5nZm4sIHBmbiwgZmFsc2UsIHRydWUpOwotCQkJYnJlYWs7CisJZGlyZWN0X2FjY2VzcyA9IGd3LT5wdF9hY2Nlc3MgJiBndy0+cHRlX2FjY2VzczsKKwlpZiAoIWRpcnR5KQorCQlkaXJlY3RfYWNjZXNzICY9IH5BQ0NfV1JJVEVfTUFTSzsKKworCXRvcF9sZXZlbCA9IHZjcHUtPmFyY2gubW11LnJvb3RfbGV2ZWw7CisJaWYgKHRvcF9sZXZlbCA9PSBQVDMyRV9ST09UX0xFVkVMKQorCQl0b3BfbGV2ZWwgPSBQVDMyX1JPT1RfTEVWRUw7CisJLyoKKwkgKiBWZXJpZnkgdGhhdCB0aGUgdG9wLWxldmVsIGdwdGUgaXMgc3RpbGwgdGhlcmUuICBTaW5jZSB0aGUgcGFnZQorCSAqIGlzIGEgcm9vdCBwYWdlLCBpdCBpcyBlaXRoZXIgd3JpdGUgcHJvdGVjdGVkIChhbmQgY2Fubm90IGJlCisJICogY2hhbmdlZCBmcm9tIG5vdyBvbikgb3IgaXQgaXMgaW52YWxpZCAoaW4gd2hpY2ggY2FzZSwgd2UgZG9uJ3QKKwkgKiByZWFsbHkgY2FyZSBpZiBpdCBjaGFuZ2VzIHVuZGVybmVhdGggdXMgYWZ0ZXIgdGhpcyBwb2ludCkuCisJICovCisJaWYgKEZOQU1FKGdwdGVfY2hhbmdlZCkodmNwdSwgZ3csIHRvcF9sZXZlbCkpCisJCWdvdG8gb3V0X2dwdGVfY2hhbmdlZDsKKworCWZvciAoc2hhZG93X3dhbGtfaW5pdCgmaXQsIHZjcHUsIGFkZHIpOworCSAgICAgc2hhZG93X3dhbGtfb2theSgmaXQpICYmIGl0LmxldmVsID4gZ3ctPmxldmVsOworCSAgICAgc2hhZG93X3dhbGtfbmV4dCgmaXQpKSB7CisJCWdmbl90IHRhYmxlX2dmbjsKKworCQlkcm9wX2xhcmdlX3NwdGUodmNwdSwgaXQuc3B0ZXApOworCisJCXNwID0gTlVMTDsKKwkJaWYgKCFpc19zaGFkb3dfcHJlc2VudF9wdGUoKml0LnNwdGVwKSkgeworCQkJdGFibGVfZ2ZuID0gZ3ctPnRhYmxlX2dmbltpdC5sZXZlbCAtIDJdOworCQkJc3AgPSBrdm1fbW11X2dldF9wYWdlKHZjcHUsIHRhYmxlX2dmbiwgYWRkciwgaXQubGV2ZWwtMSwKKwkJCQkJICAgICAgZmFsc2UsIGFjY2VzcywgaXQuc3B0ZXApOwogCQl9CiAKLQkJaWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZSgqc3B0ZXApICYmICFpc19sYXJnZV9wdGUoKnNwdGVwKSkKLQkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBWZXJpZnkgdGhhdCB0aGUgZ3B0ZSBpbiB0aGUgcGFnZSB3ZSd2ZSBqdXN0IHdyaXRlCisJCSAqIHByb3RlY3RlZCBpcyBzdGlsbCB0aGVyZS4KKwkJICovCisJCWlmIChGTkFNRShncHRlX2NoYW5nZWQpKHZjcHUsIGd3LCBpdC5sZXZlbCAtIDEpKQorCQkJZ290byBvdXRfZ3B0ZV9jaGFuZ2VkOwogCi0JCWlmIChpc19sYXJnZV9wdGUoKnNwdGVwKSkgewotCQkJcm1hcF9yZW1vdmUodmNwdS0+a3ZtLCBzcHRlcCk7Ci0JCQlfX3NldF9zcHRlKHNwdGVwLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7Ci0JCQlrdm1fZmx1c2hfcmVtb3RlX3RsYnModmNwdS0+a3ZtKTsKLQkJfQotCi0JCWlmIChsZXZlbCA8PSBndy0+bGV2ZWwpIHsKLQkJCWludCBkZWx0YSA9IGxldmVsIC0gZ3ctPmxldmVsICsgMTsKLQkJCWRpcmVjdCA9IDE7Ci0JCQlpZiAoIWlzX2RpcnR5X2dwdGUoZ3ctPnB0ZXNbbGV2ZWwgLSBkZWx0YV0pKQotCQkJCWFjY2VzcyAmPSB+QUNDX1dSSVRFX01BU0s7Ci0JCQl0YWJsZV9nZm4gPSBncHRlX3RvX2dmbihndy0+cHRlc1tsZXZlbCAtIGRlbHRhXSk7Ci0JCQkvKiBhZHZhbmNlIHRhYmxlX2dmbiB3aGVuIGVtdWxhdGluZyAxZ2IgcGFnZXMgd2l0aCA0ayAqLwotCQkJaWYgKGRlbHRhID09IDApCi0JCQkJdGFibGVfZ2ZuICs9IFBUX0lOREVYKGFkZHIsIGxldmVsKTsKLQkJfSBlbHNlIHsKLQkJCWRpcmVjdCA9IDA7Ci0JCQl0YWJsZV9nZm4gPSBndy0+dGFibGVfZ2ZuW2xldmVsIC0gMl07Ci0JCX0KLQkJc2hhZG93X3BhZ2UgPSBrdm1fbW11X2dldF9wYWdlKHZjcHUsIHRhYmxlX2dmbiwgYWRkciwgbGV2ZWwtMSwKLQkJCQkJICAgICAgIGRpcmVjdCwgYWNjZXNzLCBzcHRlcCk7Ci0JCWlmICghZGlyZWN0KSB7Ci0JCQlyID0ga3ZtX3JlYWRfZ3Vlc3RfYXRvbWljKHZjcHUtPmt2bSwKLQkJCQkJCSAgZ3ctPnB0ZV9ncGFbbGV2ZWwgLSAyXSwKLQkJCQkJCSAgJmN1cnJfcHRlLCBzaXplb2YoY3Vycl9wdGUpKTsKLQkJCWlmIChyIHx8IGN1cnJfcHRlICE9IGd3LT5wdGVzW2xldmVsIC0gMl0pIHsKLQkJCQlrdm1fbW11X3B1dF9wYWdlKHNoYWRvd19wYWdlLCBzcHRlcCk7Ci0JCQkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbik7Ci0JCQkJc3B0ZXAgPSBOVUxMOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJc3B0ZSA9IF9fcGEoc2hhZG93X3BhZ2UtPnNwdCkKLQkJCXwgUFRfUFJFU0VOVF9NQVNLIHwgUFRfQUNDRVNTRURfTUFTSwotCQkJfCBQVF9XUklUQUJMRV9NQVNLIHwgUFRfVVNFUl9NQVNLOwotCQkqc3B0ZXAgPSBzcHRlOworCQlpZiAoc3ApCisJCQlsaW5rX3NoYWRvd19wYWdlKGl0LnNwdGVwLCBzcCk7CiAJfQogCi0JcmV0dXJuIHNwdGVwOworCWZvciAoOworCSAgICAgc2hhZG93X3dhbGtfb2theSgmaXQpICYmIGl0LmxldmVsID4gaGxldmVsOworCSAgICAgc2hhZG93X3dhbGtfbmV4dCgmaXQpKSB7CisJCWdmbl90IGRpcmVjdF9nZm47CisKKwkJdmFsaWRhdGVfZGlyZWN0X3NwdGUodmNwdSwgaXQuc3B0ZXAsIGRpcmVjdF9hY2Nlc3MpOworCisJCWRyb3BfbGFyZ2Vfc3B0ZSh2Y3B1LCBpdC5zcHRlcCk7CisKKwkJaWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZSgqaXQuc3B0ZXApKQorCQkJY29udGludWU7CisKKwkJZGlyZWN0X2dmbiA9IGd3LT5nZm4gJiB+KEtWTV9QQUdFU19QRVJfSFBBR0UoaXQubGV2ZWwpIC0gMSk7CisKKwkJc3AgPSBrdm1fbW11X2dldF9wYWdlKHZjcHUsIGRpcmVjdF9nZm4sIGFkZHIsIGl0LmxldmVsLTEsCisJCQkJICAgICAgdHJ1ZSwgZGlyZWN0X2FjY2VzcywgaXQuc3B0ZXApOworCQlsaW5rX3NoYWRvd19wYWdlKGl0LnNwdGVwLCBzcCk7CisJfQorCisJbW11X3NldF9zcHRlKHZjcHUsIGl0LnNwdGVwLCBhY2Nlc3MsIGd3LT5wdGVfYWNjZXNzICYgYWNjZXNzLAorCQkgICAgIHVzZXJfZmF1bHQsIHdyaXRlX2ZhdWx0LCBkaXJ0eSwgcHR3cml0ZSwgaXQubGV2ZWwsCisJCSAgICAgZ3ctPmdmbiwgcGZuLCBmYWxzZSwgdHJ1ZSk7CisKKwlyZXR1cm4gaXQuc3B0ZXA7CisKK291dF9ncHRlX2NoYW5nZWQ6CisJaWYgKHNwKQorCQlrdm1fbW11X3B1dF9wYWdlKHNwLCBpdC5zcHRlcCk7CisJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbik7CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qCkBAIC00MzAsMTEgKzQ2Miw4IEBACiAJcGZuID0gZ2ZuX3RvX3Bmbih2Y3B1LT5rdm0sIHdhbGtlci5nZm4pOwogCiAJLyogbW1pbyAqLwotCWlmIChpc19lcnJvcl9wZm4ocGZuKSkgewotCQlwZ3ByaW50aygiZ2ZuICVseCBpcyBtbWlvXG4iLCB3YWxrZXIuZ2ZuKTsKLQkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbik7Ci0JCXJldHVybiAxOwotCX0KKwlpZiAoaXNfZXJyb3JfcGZuKHBmbikpCisJCXJldHVybiBrdm1faGFuZGxlX2JhZF9wYWdlKHZjcHUtPmt2bSwgd2Fsa2VyLmdmbiwgcGZuKTsKIAogCXNwaW5fbG9jaygmdmNwdS0+a3ZtLT5tbXVfbG9jayk7CiAJaWYgKG1tdV9ub3RpZmllcl9yZXRyeSh2Y3B1LCBtbXVfc2VxKSkKQEAgLTQ0Miw2ICs0NzEsNyBAQAogCWt2bV9tbXVfZnJlZV9zb21lX3BhZ2VzKHZjcHUpOwogCXNwdGVwID0gRk5BTUUoZmV0Y2gpKHZjcHUsIGFkZHIsICZ3YWxrZXIsIHVzZXJfZmF1bHQsIHdyaXRlX2ZhdWx0LAogCQkJICAgICBsZXZlbCwgJndyaXRlX3B0LCBwZm4pOworCSh2b2lkKXNwdGVwOwogCXBncHJpbnRrKCIlczogc2hhZG93IHB0ZSAlcCAlbGx4IHB0d3JpdGUgJWRcbiIsIF9fZnVuY19fLAogCQkgc3B0ZXAsICpzcHRlcCwgd3JpdGVfcHQpOwogCkBAIC00NjMsNiArNDkzLDcgQEAKIHN0YXRpYyB2b2lkIEZOQU1FKGludmxwZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEpCiB7CiAJc3RydWN0IGt2bV9zaGFkb3dfd2Fsa19pdGVyYXRvciBpdGVyYXRvcjsKKwlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKIAlncGFfdCBwdGVfZ3BhID0gLTE7CiAJaW50IGxldmVsOwogCXU2NCAqc3B0ZXA7CkBAIC00NzQsMTAgKzUwNSwxMyBAQAogCQlsZXZlbCA9IGl0ZXJhdG9yLmxldmVsOwogCQlzcHRlcCA9IGl0ZXJhdG9yLnNwdGVwOwogCisJCXNwID0gcGFnZV9oZWFkZXIoX19wYShzcHRlcCkpOwogCQlpZiAoaXNfbGFzdF9zcHRlKCpzcHRlcCwgbGV2ZWwpKSB7Ci0JCQlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCA9IHBhZ2VfaGVhZGVyKF9fcGEoc3B0ZXApKTsKIAkJCWludCBvZmZzZXQsIHNoaWZ0OwogCisJCQlpZiAoIXNwLT51bnN5bmMpCisJCQkJYnJlYWs7CisKIAkJCXNoaWZ0ID0gUEFHRV9TSElGVCAtCiAJCQkJICAoUFRfTEVWRUxfQklUUyAtIFBUNjRfTEVWRUxfQklUUykgKiBsZXZlbDsKIAkJCW9mZnNldCA9IHNwLT5yb2xlLnF1YWRyYW50IDw8IHNoaWZ0OwpAQCAtNDg2LDE2ICs1MjAsMTcgQEAKIAkJCXB0ZV9ncGEgKz0gKHNwdGVwIC0gc3AtPnNwdCkgKiBzaXplb2YocHRfZWxlbWVudF90KTsKIAogCQkJaWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZSgqc3B0ZXApKSB7Ci0JCQkJcm1hcF9yZW1vdmUodmNwdS0+a3ZtLCBzcHRlcCk7CiAJCQkJaWYgKGlzX2xhcmdlX3B0ZSgqc3B0ZXApKQogCQkJCQktLXZjcHUtPmt2bS0+c3RhdC5scGFnZXM7CisJCQkJZHJvcF9zcHRlKHZjcHUtPmt2bSwgc3B0ZXAsCisJCQkJCSAgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOwogCQkJCW5lZWRfZmx1c2ggPSAxOwotCQkJfQotCQkJX19zZXRfc3B0ZShzcHRlcCwgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOworCQkJfSBlbHNlCisJCQkJX19zZXRfc3B0ZShzcHRlcCwgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOwogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoIWlzX3NoYWRvd19wcmVzZW50X3B0ZSgqc3B0ZXApKQorCQlpZiAoIWlzX3NoYWRvd19wcmVzZW50X3B0ZSgqc3B0ZXApIHx8ICFzcC0+dW5zeW5jX2NoaWxkcmVuKQogCQkJYnJlYWs7CiAJfQogCkBAIC01NjksOSArNjA0LDkgQEAKICAqIFVzaW5nIHRoZSBjYWNoZWQgaW5mb3JtYXRpb24gZnJvbSBzcC0+Z2ZucyBpcyBzYWZlIGJlY2F1c2U6CiAgKiAtIFRoZSBzcHRlIGhhcyBhIHJlZmVyZW5jZSB0byB0aGUgc3RydWN0IHBhZ2UsIHNvIHRoZSBwZm4gZm9yIGEgZ2l2ZW4gZ2ZuCiAgKiAgIGNhbid0IGNoYW5nZSB1bmxlc3MgYWxsIHNwdGVzIHBvaW50aW5nIHRvIGl0IGFyZSBudWtlZCBmaXJzdC4KLSAqIC0gQWxpYXMgY2hhbmdlcyB6YXAgdGhlIGVudGlyZSBzaGFkb3cgY2FjaGUuCiAgKi8KLXN0YXRpYyBpbnQgRk5BTUUoc3luY19wYWdlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQorc3RhdGljIGludCBGTkFNRShzeW5jX3BhZ2UpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsCisJCQkgICAgYm9vbCBjbGVhcl91bnN5bmMpCiB7CiAJaW50IGksIG9mZnNldCwgbnJfcHJlc2VudDsKIAlib29sIHJlc2V0X2hvc3RfcHJvdGVjdGlvbjsKQEAgLTU3OSw2ICs2MTQsOSBAQAogCiAJb2Zmc2V0ID0gbnJfcHJlc2VudCA9IDA7CiAKKwkvKiBkaXJlY3Qga3ZtX21tdV9wYWdlIGNhbiBub3QgYmUgdW5zeW5jLiAqLworCUJVR19PTihzcC0+cm9sZS5kaXJlY3QpOworCiAJaWYgKFBUVFlQRSA9PSAzMikKIAkJb2Zmc2V0ID0gc3AtPnJvbGUucXVhZHJhbnQgPDwgUFQ2NF9MRVZFTF9CSVRTOwogCkBAIC01ODgsNyArNjI2LDcgQEAKIAkJdW5zaWduZWQgcHRlX2FjY2VzczsKIAkJcHRfZWxlbWVudF90IGdwdGU7CiAJCWdwYV90IHB0ZV9ncGE7Ci0JCWdmbl90IGdmbiA9IHNwLT5nZm5zW2ldOworCQlnZm5fdCBnZm47CiAKIAkJaWYgKCFpc19zaGFkb3dfcHJlc2VudF9wdGUoc3AtPnNwdFtpXSkpCiAJCQljb250aW51ZTsKQEAgLTU5OSwxNiArNjM3LDE3IEBACiAJCQkJCSAgc2l6ZW9mKHB0X2VsZW1lbnRfdCkpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJaWYgKGdwdGVfdG9fZ2ZuKGdwdGUpICE9IGdmbiB8fCAhaXNfcHJlc2VudF9ncHRlKGdwdGUpIHx8Ci0JCSAgICAhKGdwdGUgJiBQVF9BQ0NFU1NFRF9NQVNLKSkgeworCQlnZm4gPSBncHRlX3RvX2dmbihncHRlKTsKKwkJaWYgKGlzX3JzdmRfYml0c19zZXQodmNwdSwgZ3B0ZSwgUFRfUEFHRV9UQUJMRV9MRVZFTCkKKwkJICAgICAgfHwgZ2ZuICE9IHNwLT5nZm5zW2ldIHx8ICFpc19wcmVzZW50X2dwdGUoZ3B0ZSkKKwkJICAgICAgfHwgIShncHRlICYgUFRfQUNDRVNTRURfTUFTSykpIHsKIAkJCXU2NCBub25wcmVzZW50OwogCi0JCQlybWFwX3JlbW92ZSh2Y3B1LT5rdm0sICZzcC0+c3B0W2ldKTsKLQkJCWlmIChpc19wcmVzZW50X2dwdGUoZ3B0ZSkpCisJCQlpZiAoaXNfcHJlc2VudF9ncHRlKGdwdGUpIHx8ICFjbGVhcl91bnN5bmMpCiAJCQkJbm9ucHJlc2VudCA9IHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlOwogCQkJZWxzZQogCQkJCW5vbnByZXNlbnQgPSBzaGFkb3dfbm90cmFwX25vbnByZXNlbnRfcHRlOwotCQkJX19zZXRfc3B0ZSgmc3AtPnNwdFtpXSwgbm9ucHJlc2VudCk7CisJCQlkcm9wX3NwdGUodmNwdS0+a3ZtLCAmc3AtPnNwdFtpXSwgbm9ucHJlc2VudCk7CiAJCQljb250aW51ZTsKIAkJfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtLmMKaW5kZXggY2U0MzhlMC4uYmM1YjliOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS5jCisrKyBiL2FyY2gveDg2L2t2bS9zdm0uYwpAQCAtNCw2ICs0LDcgQEAKICAqIEFNRCBTVk0gc3VwcG9ydAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNiBRdW1yYW5ldCwgSW5jLgorICogQ29weXJpZ2h0IDIwMTAgUmVkIEhhdCwgSW5jLiBhbmQvb3IgaXRzIGFmZmlsYXRlcy4KICAqCiAgKiBBdXRob3JzOgogICogICBZYW5pdiBLYW1heSAgPHlhbml2QHF1bXJhbmV0LmNvbT4KQEAgLTEzMCw3ICsxMzEsNyBAQAogCXUzMiBpbmRleDsgICAvKiBJbmRleCBvZiB0aGUgTVNSICovCiAJYm9vbCBhbHdheXM7IC8qIFRydWUgaWYgaW50ZXJjZXB0IGlzIGFsd2F5cyBvbiAqLwogfSBkaXJlY3RfYWNjZXNzX21zcnNbXSA9IHsKLQl7IC5pbmRleCA9IE1TUl9LNl9TVEFSLAkJCQkuYWx3YXlzID0gdHJ1ZSAgfSwKKwl7IC5pbmRleCA9IE1TUl9TVEFSLAkJCQkuYWx3YXlzID0gdHJ1ZSAgfSwKIAl7IC5pbmRleCA9IE1TUl9JQTMyX1NZU0VOVEVSX0NTLAkJLmFsd2F5cyA9IHRydWUgIH0sCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCXsgLmluZGV4ID0gTVNSX0dTX0JBU0UsCQkJCS5hbHdheXMgPSB0cnVlICB9LApAQCAtMjg1LDExICsyODYsMTEgQEAKIAogc3RhdGljIHZvaWQgc3ZtX3NldF9lZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGVmZXIpCiB7CisJdmNwdS0+YXJjaC5lZmVyID0gZWZlcjsKIAlpZiAoIW5wdF9lbmFibGVkICYmICEoZWZlciAmIEVGRVJfTE1BKSkKIAkJZWZlciAmPSB+RUZFUl9MTUU7CiAKIAl0b19zdm0odmNwdSktPnZtY2ItPnNhdmUuZWZlciA9IGVmZXIgfCBFRkVSX1NWTUU7Ci0JdmNwdS0+YXJjaC5lZmVyID0gZWZlcjsKIH0KIAogc3RhdGljIGludCBpc19leHRlcm5hbF9pbnRlcnJ1cHQodTMyIGluZm8pCkBAIC0zODMsOCArMzg0LDcgQEAKIAlpbnQgZXJyOwogCXU2NCB2YWw7CiAKLQkvKiBPbmx5IEZhbTEwaCBpcyBhZmZlY3RlZCAqLwotCWlmIChib290X2NwdV9kYXRhLng4NiAhPSAweDEwKQorCWlmICghY3B1X2hhc19hbWRfZXJyYXR1bShhbWRfZXJyYXR1bV8zODMpKQogCQlyZXR1cm47CiAKIAkvKiBVc2UgX3NhZmUgdmFyaWFudHMgdG8gbm90IGJyZWFrIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiAqLwpAQCAtNjQwLDcgKzY0MCw3IEBACiAKIAlpZiAobmVzdGVkKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImt2bTogTmVzdGVkIFZpcnR1YWxpemF0aW9uIGVuYWJsZWRcbiIpOwotCQlrdm1fZW5hYmxlX2VmZXJfYml0cyhFRkVSX1NWTUUpOworCQlrdm1fZW5hYmxlX2VmZXJfYml0cyhFRkVSX1NWTUUgfCBFRkVSX0xNU0xFKTsKIAl9CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CkBAIC04MDYsNyArODA2LDcgQEAKIAkgKiBzdm1fc2V0X2NyMCgpIHNldHMgUEcgYW5kIFdQIGFuZCBjbGVhcnMgTlcgYW5kIENEIG9uIHNhdmUtPmNyMC4KIAkgKi8KIAlzdm0tPnZjcHUuYXJjaC5jcjAgPSBYODZfQ1IwX05XIHwgWDg2X0NSMF9DRCB8IFg4Nl9DUjBfRVQ7Ci0Ja3ZtX3NldF9jcjAoJnN2bS0+dmNwdSwgc3ZtLT52Y3B1LmFyY2guY3IwKTsKKwkodm9pZClrdm1fc2V0X2NyMCgmc3ZtLT52Y3B1LCBzdm0tPnZjcHUuYXJjaC5jcjApOwogCiAJc2F2ZS0+Y3I0ID0gWDg2X0NSNF9QQUU7CiAJLyogcmR4ID0gPz8gKi8KQEAgLTkwMywxMyArOTAzLDE4IEBACiAJc3ZtLT5hc2lkX2dlbmVyYXRpb24gPSAwOwogCWluaXRfdm1jYihzdm0pOwogCi0JZnhfaW5pdCgmc3ZtLT52Y3B1KTsKKwllcnIgPSBmeF9pbml0KCZzdm0tPnZjcHUpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZV9wYWdlNDsKKwogCXN2bS0+dmNwdS5hcmNoLmFwaWNfYmFzZSA9IDB4ZmVlMDAwMDAgfCBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEU7CiAJaWYgKGt2bV92Y3B1X2lzX2JzcCgmc3ZtLT52Y3B1KSkKIAkJc3ZtLT52Y3B1LmFyY2guYXBpY19iYXNlIHw9IE1TUl9JQTMyX0FQSUNCQVNFX0JTUDsKIAogCXJldHVybiAmc3ZtLT52Y3B1OwogCitmcmVlX3BhZ2U0OgorCV9fZnJlZV9wYWdlKGhzYXZlX3BhZ2UpOwogZnJlZV9wYWdlMzoKIAlfX2ZyZWVfcGFnZXMobmVzdGVkX21zcnBtX3BhZ2VzLCBNU1JQTV9BTExPQ19PUkRFUik7CiBmcmVlX3BhZ2UyOgpAQCAtMTQ4OCw3ICsxNDkzLDcgQEAKIAkJICovCiAJCXByX2VycigiS1ZNOiBHdWVzdCB0cmlnZ2VyZWQgQU1EIEVycmF0dW0gMzgzXG4iKTsKIAotCQlzZXRfYml0KEtWTV9SRVFfVFJJUExFX0ZBVUxULCAmc3ZtLT52Y3B1LnJlcXVlc3RzKTsKKwkJa3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1RSSVBMRV9GQVVMVCwgJnN2bS0+dmNwdSk7CiAKIAkJcmV0dXJuOwogCX0KQEAgLTE1MzUsNyArMTU0MCw3IEBACiAJc3RyaW5nID0gKGlvX2luZm8gJiBTVk1fSU9JT19TVFJfTUFTSykgIT0gMDsKIAlpbiA9IChpb19pbmZvICYgU1ZNX0lPSU9fVFlQRV9NQVNLKSAhPSAwOwogCWlmIChzdHJpbmcgfHwgaW4pCi0JCXJldHVybiAhKGVtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgMCwgMCwgMCkgPT0gRU1VTEFURV9ET19NTUlPKTsKKwkJcmV0dXJuIGVtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgMCwgMCwgMCkgPT0gRU1VTEFURV9ET05FOwogCiAJcG9ydCA9IGlvX2luZm8gPj4gMTY7CiAJc2l6ZSA9IChpb19pbmZvICYgU1ZNX0lPSU9fU0laRV9NQVNLKSA+PiBTVk1fSU9JT19TSVpFX1NISUZUOwpAQCAtMTk1Nyw3ICsxOTYyLDcgQEAKIAkJc3ZtLT52bWNiLT5zYXZlLmNyMyA9IGhzYXZlLT5zYXZlLmNyMzsKIAkJc3ZtLT52Y3B1LmFyY2guY3IzID0gaHNhdmUtPnNhdmUuY3IzOwogCX0gZWxzZSB7Ci0JCWt2bV9zZXRfY3IzKCZzdm0tPnZjcHUsIGhzYXZlLT5zYXZlLmNyMyk7CisJCSh2b2lkKWt2bV9zZXRfY3IzKCZzdm0tPnZjcHUsIGhzYXZlLT5zYXZlLmNyMyk7CiAJfQogCWt2bV9yZWdpc3Rlcl93cml0ZSgmc3ZtLT52Y3B1LCBWQ1BVX1JFR1NfUkFYLCBoc2F2ZS0+c2F2ZS5yYXgpOwogCWt2bV9yZWdpc3Rlcl93cml0ZSgmc3ZtLT52Y3B1LCBWQ1BVX1JFR1NfUlNQLCBoc2F2ZS0+c2F2ZS5yc3ApOwpAQCAtMjA4MCw3ICsyMDg1LDcgQEAKIAkJc3ZtLT52bWNiLT5zYXZlLmNyMyA9IG5lc3RlZF92bWNiLT5zYXZlLmNyMzsKIAkJc3ZtLT52Y3B1LmFyY2guY3IzID0gbmVzdGVkX3ZtY2ItPnNhdmUuY3IzOwogCX0gZWxzZQotCQlrdm1fc2V0X2NyMygmc3ZtLT52Y3B1LCBuZXN0ZWRfdm1jYi0+c2F2ZS5jcjMpOworCQkodm9pZClrdm1fc2V0X2NyMygmc3ZtLT52Y3B1LCBuZXN0ZWRfdm1jYi0+c2F2ZS5jcjMpOwogCiAJLyogR3Vlc3QgcGFnaW5nIG1vZGUgaXMgYWN0aXZlIC0gcmVzZXQgbW11ICovCiAJa3ZtX21tdV9yZXNldF9jb250ZXh0KCZzdm0tPnZjcHUpOwpAQCAtMjM4NiwxNiArMjM5MSwxMiBAQAogCiBzdGF0aWMgaW50IGludmxwZ19pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pCiB7Ci0JaWYgKGVtdWxhdGVfaW5zdHJ1Y3Rpb24oJnN2bS0+dmNwdSwgMCwgMCwgMCkgIT0gRU1VTEFURV9ET05FKQotCQlwcl91bmltcGwoJnN2bS0+dmNwdSwgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQlyZXR1cm4gMTsKKwlyZXR1cm4gZW11bGF0ZV9pbnN0cnVjdGlvbigmc3ZtLT52Y3B1LCAwLCAwLCAwKSA9PSBFTVVMQVRFX0RPTkU7CiB9CiAKIHN0YXRpYyBpbnQgZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pCiB7Ci0JaWYgKGVtdWxhdGVfaW5zdHJ1Y3Rpb24oJnN2bS0+dmNwdSwgMCwgMCwgMCkgIT0gRU1VTEFURV9ET05FKQotCQlwcl91bmltcGwoJnN2bS0+dmNwdSwgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQlyZXR1cm4gMTsKKwlyZXR1cm4gZW11bGF0ZV9pbnN0cnVjdGlvbigmc3ZtLT52Y3B1LCAwLCAwLCAwKSA9PSBFTVVMQVRFX0RPTkU7CiB9CiAKIHN0YXRpYyBpbnQgY3I4X3dyaXRlX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKQEAgLTI0MzEsNyArMjQzMiw3IEBACiAJCSpkYXRhID0gdHNjX29mZnNldCArIG5hdGl2ZV9yZWFkX3RzYygpOwogCQlicmVhazsKIAl9Ci0JY2FzZSBNU1JfSzZfU1RBUjoKKwljYXNlIE1TUl9TVEFSOgogCQkqZGF0YSA9IHN2bS0+dm1jYi0+c2F2ZS5zdGFyOwogCQlicmVhazsKICNpZmRlZiBDT05GSUdfWDg2XzY0CkBAIC0yNTU1LDcgKzI1NTYsNyBAQAogCiAJCWJyZWFrOwogCX0KLQljYXNlIE1TUl9LNl9TVEFSOgorCWNhc2UgTVNSX1NUQVI6CiAJCXN2bS0+dm1jYi0+c2F2ZS5zdGFyID0gZGF0YTsKIAkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX1g4Nl82NApAQCAtMjcyNiw2ICsyNzI3LDk5IEBACiAJW1NWTV9FWElUX05QRl0JCQkJPSBwZl9pbnRlcmNlcHRpb24sCiB9OwogCit2b2lkIGR1bXBfdm1jYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CisJc3RydWN0IHZtY2JfY29udHJvbF9hcmVhICpjb250cm9sID0gJnN2bS0+dm1jYi0+Y29udHJvbDsKKwlzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnNhdmUgPSAmc3ZtLT52bWNiLT5zYXZlOworCisJcHJfZXJyKCJWTUNCIENvbnRyb2wgQXJlYTpcbiIpOworCXByX2VycigiY3JfcmVhZDogICAgICAgICAgICAlMDR4XG4iLCBjb250cm9sLT5pbnRlcmNlcHRfY3JfcmVhZCk7CisJcHJfZXJyKCJjcl93cml0ZTogICAgICAgICAgICUwNHhcbiIsIGNvbnRyb2wtPmludGVyY2VwdF9jcl93cml0ZSk7CisJcHJfZXJyKCJkcl9yZWFkOiAgICAgICAgICAgICUwNHhcbiIsIGNvbnRyb2wtPmludGVyY2VwdF9kcl9yZWFkKTsKKwlwcl9lcnIoImRyX3dyaXRlOiAgICAgICAgICAgJTA0eFxuIiwgY29udHJvbC0+aW50ZXJjZXB0X2RyX3dyaXRlKTsKKwlwcl9lcnIoImV4Y2VwdGlvbnM6ICAgICAgICAgJTA4eFxuIiwgY29udHJvbC0+aW50ZXJjZXB0X2V4Y2VwdGlvbnMpOworCXByX2VycigiaW50ZXJjZXB0czogICAgICAgICAlMDE2bGx4XG4iLCBjb250cm9sLT5pbnRlcmNlcHQpOworCXByX2VycigicGF1c2UgZmlsdGVyIGNvdW50OiAlZFxuIiwgY29udHJvbC0+cGF1c2VfZmlsdGVyX2NvdW50KTsKKwlwcl9lcnIoImlvcG1fYmFzZV9wYTogICAgICAgJTAxNmxseFxuIiwgY29udHJvbC0+aW9wbV9iYXNlX3BhKTsKKwlwcl9lcnIoIm1zcnBtX2Jhc2VfcGE6ICAgICAgJTAxNmxseFxuIiwgY29udHJvbC0+bXNycG1fYmFzZV9wYSk7CisJcHJfZXJyKCJ0c2Nfb2Zmc2V0OiAgICAgICAgICUwMTZsbHhcbiIsIGNvbnRyb2wtPnRzY19vZmZzZXQpOworCXByX2VycigiYXNpZDogICAgICAgICAgICAgICAlZFxuIiwgY29udHJvbC0+YXNpZCk7CisJcHJfZXJyKCJ0bGJfY3RsOiAgICAgICAgICAgICVkXG4iLCBjb250cm9sLT50bGJfY3RsKTsKKwlwcl9lcnIoImludF9jdGw6ICAgICAgICAgICAgJTA4eFxuIiwgY29udHJvbC0+aW50X2N0bCk7CisJcHJfZXJyKCJpbnRfdmVjdG9yOiAgICAgICAgICUwOHhcbiIsIGNvbnRyb2wtPmludF92ZWN0b3IpOworCXByX2VycigiaW50X3N0YXRlOiAgICAgICAgICAlMDh4XG4iLCBjb250cm9sLT5pbnRfc3RhdGUpOworCXByX2VycigiZXhpdF9jb2RlOiAgICAgICAgICAlMDh4XG4iLCBjb250cm9sLT5leGl0X2NvZGUpOworCXByX2VycigiZXhpdF9pbmZvMTogICAgICAgICAlMDE2bGx4XG4iLCBjb250cm9sLT5leGl0X2luZm9fMSk7CisJcHJfZXJyKCJleGl0X2luZm8yOiAgICAgICAgICUwMTZsbHhcbiIsIGNvbnRyb2wtPmV4aXRfaW5mb18yKTsKKwlwcl9lcnIoImV4aXRfaW50X2luZm86ICAgICAgJTA4eFxuIiwgY29udHJvbC0+ZXhpdF9pbnRfaW5mbyk7CisJcHJfZXJyKCJleGl0X2ludF9pbmZvX2VycjogICUwOHhcbiIsIGNvbnRyb2wtPmV4aXRfaW50X2luZm9fZXJyKTsKKwlwcl9lcnIoIm5lc3RlZF9jdGw6ICAgICAgICAgJWxsZFxuIiwgY29udHJvbC0+bmVzdGVkX2N0bCk7CisJcHJfZXJyKCJuZXN0ZWRfY3IzOiAgICAgICAgICUwMTZsbHhcbiIsIGNvbnRyb2wtPm5lc3RlZF9jcjMpOworCXByX2VycigiZXZlbnRfaW5qOiAgICAgICAgICAlMDh4XG4iLCBjb250cm9sLT5ldmVudF9pbmopOworCXByX2VycigiZXZlbnRfaW5qX2VycjogICAgICAlMDh4XG4iLCBjb250cm9sLT5ldmVudF9pbmpfZXJyKTsKKwlwcl9lcnIoImxicl9jdGw6ICAgICAgICAgICAgJWxsZFxuIiwgY29udHJvbC0+bGJyX2N0bCk7CisJcHJfZXJyKCJuZXh0X3JpcDogICAgICAgICAgICUwMTZsbHhcbiIsIGNvbnRyb2wtPm5leHRfcmlwKTsKKwlwcl9lcnIoIlZNQ0IgU3RhdGUgU2F2ZSBBcmVhOlxuIik7CisJcHJfZXJyKCJlczogICBzOiAlMDR4IGE6ICUwNHggbDogJTA4eCBiOiAlMDE2bGx4XG4iLAorCQlzYXZlLT5lcy5zZWxlY3Rvciwgc2F2ZS0+ZXMuYXR0cmliLAorCQlzYXZlLT5lcy5saW1pdCwgc2F2ZS0+ZXMuYmFzZSk7CisJcHJfZXJyKCJjczogICBzOiAlMDR4IGE6ICUwNHggbDogJTA4eCBiOiAlMDE2bGx4XG4iLAorCQlzYXZlLT5jcy5zZWxlY3Rvciwgc2F2ZS0+Y3MuYXR0cmliLAorCQlzYXZlLT5jcy5saW1pdCwgc2F2ZS0+Y3MuYmFzZSk7CisJcHJfZXJyKCJzczogICBzOiAlMDR4IGE6ICUwNHggbDogJTA4eCBiOiAlMDE2bGx4XG4iLAorCQlzYXZlLT5zcy5zZWxlY3Rvciwgc2F2ZS0+c3MuYXR0cmliLAorCQlzYXZlLT5zcy5saW1pdCwgc2F2ZS0+c3MuYmFzZSk7CisJcHJfZXJyKCJkczogICBzOiAlMDR4IGE6ICUwNHggbDogJTA4eCBiOiAlMDE2bGx4XG4iLAorCQlzYXZlLT5kcy5zZWxlY3Rvciwgc2F2ZS0+ZHMuYXR0cmliLAorCQlzYXZlLT5kcy5saW1pdCwgc2F2ZS0+ZHMuYmFzZSk7CisJcHJfZXJyKCJmczogICBzOiAlMDR4IGE6ICUwNHggbDogJTA4eCBiOiAlMDE2bGx4XG4iLAorCQlzYXZlLT5mcy5zZWxlY3Rvciwgc2F2ZS0+ZnMuYXR0cmliLAorCQlzYXZlLT5mcy5saW1pdCwgc2F2ZS0+ZnMuYmFzZSk7CisJcHJfZXJyKCJnczogICBzOiAlMDR4IGE6ICUwNHggbDogJTA4eCBiOiAlMDE2bGx4XG4iLAorCQlzYXZlLT5ncy5zZWxlY3Rvciwgc2F2ZS0+Z3MuYXR0cmliLAorCQlzYXZlLT5ncy5saW1pdCwgc2F2ZS0+Z3MuYmFzZSk7CisJcHJfZXJyKCJnZHRyOiBzOiAlMDR4IGE6ICUwNHggbDogJTA4eCBiOiAlMDE2bGx4XG4iLAorCQlzYXZlLT5nZHRyLnNlbGVjdG9yLCBzYXZlLT5nZHRyLmF0dHJpYiwKKwkJc2F2ZS0+Z2R0ci5saW1pdCwgc2F2ZS0+Z2R0ci5iYXNlKTsKKwlwcl9lcnIoImxkdHI6IHM6ICUwNHggYTogJTA0eCBsOiAlMDh4IGI6ICUwMTZsbHhcbiIsCisJCXNhdmUtPmxkdHIuc2VsZWN0b3IsIHNhdmUtPmxkdHIuYXR0cmliLAorCQlzYXZlLT5sZHRyLmxpbWl0LCBzYXZlLT5sZHRyLmJhc2UpOworCXByX2VycigiaWR0cjogczogJTA0eCBhOiAlMDR4IGw6ICUwOHggYjogJTAxNmxseFxuIiwKKwkJc2F2ZS0+aWR0ci5zZWxlY3Rvciwgc2F2ZS0+aWR0ci5hdHRyaWIsCisJCXNhdmUtPmlkdHIubGltaXQsIHNhdmUtPmlkdHIuYmFzZSk7CisJcHJfZXJyKCJ0cjogICBzOiAlMDR4IGE6ICUwNHggbDogJTA4eCBiOiAlMDE2bGx4XG4iLAorCQlzYXZlLT50ci5zZWxlY3Rvciwgc2F2ZS0+dHIuYXR0cmliLAorCQlzYXZlLT50ci5saW1pdCwgc2F2ZS0+dHIuYmFzZSk7CisJcHJfZXJyKCJjcGw6ICAgICAgICAgICAgJWQgICAgICAgICAgICAgICAgZWZlcjogICAgICAgICAlMDE2bGx4XG4iLAorCQlzYXZlLT5jcGwsIHNhdmUtPmVmZXIpOworCXByX2VycigiY3IwOiAgICAgICAgICAgICUwMTZsbHggY3IyOiAgICAgICAgICAlMDE2bGx4XG4iLAorCQlzYXZlLT5jcjAsIHNhdmUtPmNyMik7CisJcHJfZXJyKCJjcjM6ICAgICAgICAgICAgJTAxNmxseCBjcjQ6ICAgICAgICAgICUwMTZsbHhcbiIsCisJCXNhdmUtPmNyMywgc2F2ZS0+Y3I0KTsKKwlwcl9lcnIoImRyNjogICAgICAgICAgICAlMDE2bGx4IGRyNzogICAgICAgICAgJTAxNmxseFxuIiwKKwkJc2F2ZS0+ZHI2LCBzYXZlLT5kcjcpOworCXByX2VycigicmlwOiAgICAgICAgICAgICUwMTZsbHggcmZsYWdzOiAgICAgICAlMDE2bGx4XG4iLAorCQlzYXZlLT5yaXAsIHNhdmUtPnJmbGFncyk7CisJcHJfZXJyKCJyc3A6ICAgICAgICAgICAgJTAxNmxseCByYXg6ICAgICAgICAgICUwMTZsbHhcbiIsCisJCXNhdmUtPnJzcCwgc2F2ZS0+cmF4KTsKKwlwcl9lcnIoInN0YXI6ICAgICAgICAgICAlMDE2bGx4IGxzdGFyOiAgICAgICAgJTAxNmxseFxuIiwKKwkJc2F2ZS0+c3Rhciwgc2F2ZS0+bHN0YXIpOworCXByX2VycigiY3N0YXI6ICAgICAgICAgICUwMTZsbHggc2ZtYXNrOiAgICAgICAlMDE2bGx4XG4iLAorCQlzYXZlLT5jc3Rhciwgc2F2ZS0+c2ZtYXNrKTsKKwlwcl9lcnIoImtlcm5lbF9nc19iYXNlOiAlMDE2bGx4IHN5c2VudGVyX2NzOiAgJTAxNmxseFxuIiwKKwkJc2F2ZS0+a2VybmVsX2dzX2Jhc2UsIHNhdmUtPnN5c2VudGVyX2NzKTsKKwlwcl9lcnIoInN5c2VudGVyX2VzcDogICAlMDE2bGx4IHN5c2VudGVyX2VpcDogJTAxNmxseFxuIiwKKwkJc2F2ZS0+c3lzZW50ZXJfZXNwLCBzYXZlLT5zeXNlbnRlcl9laXApOworCXByX2VycigiZ3BhdDogICAgICAgICAgICUwMTZsbHggZGJnY3RsOiAgICAgICAlMDE2bGx4XG4iLAorCQlzYXZlLT5nX3BhdCwgc2F2ZS0+ZGJnY3RsKTsKKwlwcl9lcnIoImJyX2Zyb206ICAgICAgICAlMDE2bGx4IGJyX3RvOiAgICAgICAgJTAxNmxseFxuIiwKKwkJc2F2ZS0+YnJfZnJvbSwgc2F2ZS0+YnJfdG8pOworCXByX2VycigiZXhjcF9mcm9tOiAgICAgICUwMTZsbHggZXhjcF90bzogICAgICAlMDE2bGx4XG4iLAorCQlzYXZlLT5sYXN0X2V4Y3BfZnJvbSwgc2F2ZS0+bGFzdF9leGNwX3RvKTsKKworfQorCiBzdGF0aWMgaW50IGhhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKQEAgLTI3NzAsNiArMjg2NCw4IEBACiAJCWt2bV9ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfRkFJTF9FTlRSWTsKIAkJa3ZtX3J1bi0+ZmFpbF9lbnRyeS5oYXJkd2FyZV9lbnRyeV9mYWlsdXJlX3JlYXNvbgogCQkJPSBzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlOworCQlwcl9lcnIoIktWTTogRkFJTEVEIFZNUlVOIFdJVEggVk1DQjpcbiIpOworCQlkdW1wX3ZtY2IodmNwdSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjgyNiw5ICsyOTIyLDYgQEAKIHsKIAlzdHJ1Y3Qgdm1jYl9jb250cm9sX2FyZWEgKmNvbnRyb2w7CiAKLQl0cmFjZV9rdm1faW5qX3ZpcnEoaXJxKTsKLQotCSsrc3ZtLT52Y3B1LnN0YXQuaXJxX2luamVjdGlvbnM7CiAJY29udHJvbCA9ICZzdm0tPnZtY2ItPmNvbnRyb2w7CiAJY29udHJvbC0+aW50X3ZlY3RvciA9IGlycTsKIAljb250cm9sLT5pbnRfY3RsICY9IH5WX0lOVFJfUFJJT19NQVNLOwpAQCAtMjg0Miw2ICsyOTM1LDkgQEAKIAogCUJVR19PTighKGdpZl9zZXQoc3ZtKSkpOwogCisJdHJhY2Vfa3ZtX2lual92aXJxKHZjcHUtPmFyY2guaW50ZXJydXB0Lm5yKTsKKwkrK3ZjcHUtPnN0YXQuaXJxX2luamVjdGlvbnM7CisKIAlzdm0tPnZtY2ItPmNvbnRyb2wuZXZlbnRfaW5qID0gdmNwdS0+YXJjaC5pbnRlcnJ1cHQubnIgfAogCQlTVk1fRVZUSU5KX1ZBTElEIHwgU1ZNX0VWVElOSl9UWVBFX0lOVFI7CiB9CkBAIC0zMzI3LDYgKzM0MjMsMTEgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKK3N0YXRpYyBib29sIHN2bV9oYXNfd2JpbnZkX2V4aXQodm9pZCkKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIHZvaWQgc3ZtX2ZwdV9kZWFjdGl2YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKQEAgLTM0MTEsNiArMzUxMiw4IEBACiAJLnJkdHNjcF9zdXBwb3J0ZWQgPSBzdm1fcmR0c2NwX3N1cHBvcnRlZCwKIAogCS5zZXRfc3VwcG9ydGVkX2NwdWlkID0gc3ZtX3NldF9zdXBwb3J0ZWRfY3B1aWQsCisKKwkuaGFzX3diaW52ZF9leGl0ID0gc3ZtX2hhc193YmludmRfZXhpdCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHN2bV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdGltZXIuYyBiL2FyY2gveDg2L2t2bS90aW1lci5jCmluZGV4IDRkZGFkYjEuLmUxNmEwZGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS90aW1lci5jCisrKyBiL2FyY2gveDg2L2t2bS90aW1lci5jCkBAIC0xLDMgKzEsMTcgQEAKKy8qCisgKiBLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIGRyaXZlciBmb3IgTGludXgKKyAqCisgKiBUaGlzIG1vZHVsZSBlbmFibGVzIG1hY2hpbmVzIHdpdGggSW50ZWwgVlQteCBleHRlbnNpb25zIHRvIHJ1biB2aXJ0dWFsCisgKiBtYWNoaW5lcyB3aXRob3V0IGVtdWxhdGlvbiBvciBiaW5hcnkgdHJhbnNsYXRpb24uCisgKgorICogdGltZXIgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAyMDEwIFJlZCBIYXQsIEluYy4gYW5kL29yIGl0cyBhZmZpbGF0ZXMuCisgKgorICogVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCwgdmVyc2lvbiAyLiAgU2VlCisgKiB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5LgorICovCisKICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L2t2bS5oPgogI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KQEAgLTE4LDcgKzMyLDcgQEAKIAlpZiAoa3RpbWVyLT5yZWluamVjdCB8fCAhYXRvbWljX3JlYWQoJmt0aW1lci0+cGVuZGluZykpIHsKIAkJYXRvbWljX2luYygma3RpbWVyLT5wZW5kaW5nKTsKIAkJLyogRklYTUU6IHRoaXMgY29kZSBzaG91bGQgbm90IGtub3cgYW55dGhpbmcgYWJvdXQgdmNwdXMgKi8KLQkJc2V0X2JpdChLVk1fUkVRX1BFTkRJTkdfVElNRVIsICZ2Y3B1LT5yZXF1ZXN0cyk7CisJCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9QRU5ESU5HX1RJTUVSLCB2Y3B1KTsKIAl9CiAKIAlpZiAod2FpdHF1ZXVlX2FjdGl2ZShxKSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXguYyBiL2FyY2gveDg2L2t2bS92bXguYwppbmRleCA4NTlhMDFhLi40OWIyNWVlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14LmMKKysrIGIvYXJjaC94ODYva3ZtL3ZteC5jCkBAIC01LDYgKzUsNyBAQAogICogbWFjaGluZXMgd2l0aG91dCBlbXVsYXRpb24gb3IgYmluYXJ5IHRyYW5zbGF0aW9uLgogICoKICAqIENvcHlyaWdodCAoQykgMjAwNiBRdW1yYW5ldCwgSW5jLgorICogQ29weXJpZ2h0IDIwMTAgUmVkIEhhdCwgSW5jLiBhbmQvb3IgaXRzIGFmZmlsYXRlcy4KICAqCiAgKiBBdXRob3JzOgogICogICBBdmkgS2l2aXR5ICAgPGF2aUBxdW1yYW5ldC5jb20+CkBAIC0zNiw2ICszNyw4IEBACiAjaW5jbHVkZSA8YXNtL3ZteC5oPgogI2luY2x1ZGUgPGFzbS92aXJ0ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL21jZS5oPgorI2luY2x1ZGUgPGFzbS9pMzg3Lmg+CisjaW5jbHVkZSA8YXNtL3hjci5oPgogCiAjaW5jbHVkZSAidHJhY2UuaCIKIApAQCAtNjMsNiArNjYsOSBAQAogc3RhdGljIGludCBfX3JlYWRfbW9zdGx5IGVtdWxhdGVfaW52YWxpZF9ndWVzdF9zdGF0ZSA9IDA7CiBtb2R1bGVfcGFyYW0oZW11bGF0ZV9pbnZhbGlkX2d1ZXN0X3N0YXRlLCBib29sLCBTX0lSVUdPKTsKIAorc3RhdGljIGludCBfX3JlYWRfbW9zdGx5IHZtbV9leGNsdXNpdmUgPSAxOworbW9kdWxlX3BhcmFtKHZtbV9leGNsdXNpdmUsIGJvb2wsIFNfSVJVR08pOworCiAjZGVmaW5lIEtWTV9HVUVTVF9DUjBfTUFTS19VTlJFU1RSSUNURURfR1VFU1QJCQkJXAogCShYODZfQ1IwX1dQIHwgWDg2X0NSMF9ORSB8IFg4Nl9DUjBfTlcgfCBYODZfQ1IwX0NEKQogI2RlZmluZSBLVk1fR1VFU1RfQ1IwX01BU0sJCQkJCQlcCkBAIC0xNzMsMTAgKzE3OSwxMyBAQAogCiBzdGF0aWMgaW50IGluaXRfcm1vZGUoc3RydWN0IGt2bSAqa3ZtKTsKIHN0YXRpYyB1NjQgY29uc3RydWN0X2VwdHAodW5zaWduZWQgbG9uZyByb290X2hwYSk7CitzdGF0aWMgdm9pZCBrdm1fY3B1X3ZteG9uKHU2NCBhZGRyKTsKK3N0YXRpYyB2b2lkIGt2bV9jcHVfdm14b2ZmKHZvaWQpOwogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHZtY3MgKiwgdm14YXJlYSk7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHZtY3MgKiwgY3VycmVudF92bWNzKTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbGlzdF9oZWFkLCB2Y3B1c19vbl9jcHUpOworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBkZXNjX3B0ciwgaG9zdF9nZHQpOwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyAqdm14X2lvX2JpdG1hcF9hOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgKnZteF9pb19iaXRtYXBfYjsKQEAgLTIzMSwxNCArMjQwLDE0IEBACiBzdGF0aWMgdm9pZCBlcHRfc2F2ZV9wZHB0cnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogLyoKLSAqIEtlZXAgTVNSX0s2X1NUQVIgYXQgdGhlIGVuZCwgYXMgc2V0dXBfbXNycygpIHdpbGwgdHJ5IHRvIG9wdGltaXplIGl0CisgKiBLZWVwIE1TUl9TVEFSIGF0IHRoZSBlbmQsIGFzIHNldHVwX21zcnMoKSB3aWxsIHRyeSB0byBvcHRpbWl6ZSBpdAogICogYXdheSBieSBkZWNyZW1lbnRpbmcgdGhlIGFycmF5IHNpemUuCiAgKi8KIHN0YXRpYyBjb25zdCB1MzIgdm14X21zcl9pbmRleFtdID0gewogI2lmZGVmIENPTkZJR19YODZfNjQKIAlNU1JfU1lTQ0FMTF9NQVNLLCBNU1JfTFNUQVIsIE1TUl9DU1RBUiwKICNlbmRpZgotCU1TUl9FRkVSLCBNU1JfVFNDX0FVWCwgTVNSX0s2X1NUQVIsCisJTVNSX0VGRVIsIE1TUl9UU0NfQVVYLCBNU1JfU1RBUiwKIH07CiAjZGVmaW5lIE5SX1ZNWF9NU1IgQVJSQVlfU0laRSh2bXhfbXNyX2luZGV4KQogCkBAIC0zMzQsNiArMzQzLDExIEBACiAJcmV0dXJuIHZteF9jYXBhYmlsaXR5LmVwdCAmIFZNWF9FUFRfMUdCX1BBR0VfQklUOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgY3B1X2hhc192bXhfZXB0XzRsZXZlbHModm9pZCkKK3sKKwlyZXR1cm4gdm14X2NhcGFiaWxpdHkuZXB0ICYgVk1YX0VQVF9QQUdFX1dBTEtfNF9CSVQ7Cit9CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBjcHVfaGFzX3ZteF9pbnZlcHRfaW5kaXZpZHVhbF9hZGRyKHZvaWQpCiB7CiAJcmV0dXJuIHZteF9jYXBhYmlsaXR5LmVwdCAmIFZNWF9FUFRfRVhURU5UX0lORElWSURVQUxfQklUOwpAQCAtMzQ5LDYgKzM2MywxNiBAQAogCXJldHVybiB2bXhfY2FwYWJpbGl0eS5lcHQgJiBWTVhfRVBUX0VYVEVOVF9HTE9CQUxfQklUOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgY3B1X2hhc192bXhfaW52dnBpZF9zaW5nbGUodm9pZCkKK3sKKwlyZXR1cm4gdm14X2NhcGFiaWxpdHkudnBpZCAmIFZNWF9WUElEX0VYVEVOVF9TSU5HTEVfQ09OVEVYVF9CSVQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjcHVfaGFzX3ZteF9pbnZ2cGlkX2dsb2JhbCh2b2lkKQoreworCXJldHVybiB2bXhfY2FwYWJpbGl0eS52cGlkICYgVk1YX1ZQSURfRVhURU5UX0dMT0JBTF9DT05URVhUX0JJVDsKK30KKwogc3RhdGljIGlubGluZSBib29sIGNwdV9oYXNfdm14X2VwdCh2b2lkKQogewogCXJldHVybiB2bWNzX2NvbmZpZy5jcHVfYmFzZWRfMm5kX2V4ZWNfY3RybCAmCkBAIC0zODksNiArNDEzLDEyIEBACiAJcmV0dXJuIHZtY3NfY29uZmlnLnBpbl9iYXNlZF9leGVjX2N0cmwgJiBQSU5fQkFTRURfVklSVFVBTF9OTUlTOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgY3B1X2hhc192bXhfd2JpbnZkX2V4aXQodm9pZCkKK3sKKwlyZXR1cm4gdm1jc19jb25maWcuY3B1X2Jhc2VkXzJuZF9leGVjX2N0cmwgJgorCQlTRUNPTkRBUllfRVhFQ19XQklOVkRfRVhJVElORzsKK30KKwogc3RhdGljIGlubGluZSBib29sIHJlcG9ydF9mbGV4cHJpb3JpdHkodm9pZCkKIHsKIAlyZXR1cm4gZmxleHByaW9yaXR5X2VuYWJsZWQ7CkBAIC00NTMsNiArNDgzLDE5IEBACiAJCSAgICAgICB2bWNzLCBwaHlzX2FkZHIpOwogfQogCitzdGF0aWMgdm9pZCB2bWNzX2xvYWQoc3RydWN0IHZtY3MgKnZtY3MpCit7CisJdTY0IHBoeXNfYWRkciA9IF9fcGEodm1jcyk7CisJdTggZXJyb3I7CisKKwlhc20gdm9sYXRpbGUgKF9fZXgoQVNNX1ZNWF9WTVBUUkxEX1JBWCkgIjsgc2V0bmEgJTAiCisJCQk6ICI9ZyIoZXJyb3IpIDogImEiKCZwaHlzX2FkZHIpLCAibSIocGh5c19hZGRyKQorCQkJOiAiY2MiLCAibWVtb3J5Iik7CisJaWYgKGVycm9yKQorCQlwcmludGsoS0VSTl9FUlIgImt2bTogdm1wdHJsZCAlcC8lbGx4IGZhaWxcbiIsCisJCSAgICAgICB2bWNzLCBwaHlzX2FkZHIpOworfQorCiBzdGF0aWMgdm9pZCBfX3ZjcHVfY2xlYXIodm9pZCAqYXJnKQogewogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gYXJnOwpAQCAtNDc1LDEyICs1MTgsMjcgQEAKIAlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUodm14LT52Y3B1LmNwdSwgX192Y3B1X2NsZWFyLCB2bXgsIDEpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdnBpZF9zeW5jX3ZjcHVfYWxsKHN0cnVjdCB2Y3B1X3ZteCAqdm14KQorc3RhdGljIGlubGluZSB2b2lkIHZwaWRfc3luY192Y3B1X3NpbmdsZShzdHJ1Y3QgdmNwdV92bXggKnZteCkKIHsKIAlpZiAodm14LT52cGlkID09IDApCiAJCXJldHVybjsKIAotCV9faW52dnBpZChWTVhfVlBJRF9FWFRFTlRfU0lOR0xFX0NPTlRFWFQsIHZteC0+dnBpZCwgMCk7CisJaWYgKGNwdV9oYXNfdm14X2ludnZwaWRfc2luZ2xlKCkpCisJCV9faW52dnBpZChWTVhfVlBJRF9FWFRFTlRfU0lOR0xFX0NPTlRFWFQsIHZteC0+dnBpZCwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2cGlkX3N5bmNfdmNwdV9nbG9iYWwodm9pZCkKK3sKKwlpZiAoY3B1X2hhc192bXhfaW52dnBpZF9nbG9iYWwoKSkKKwkJX19pbnZ2cGlkKFZNWF9WUElEX0VYVEVOVF9BTExfQ09OVEVYVCwgMCwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2cGlkX3N5bmNfY29udGV4dChzdHJ1Y3QgdmNwdV92bXggKnZteCkKK3sKKwlpZiAoY3B1X2hhc192bXhfaW52dnBpZF9zaW5nbGUoKSkKKwkJdnBpZF9zeW5jX3ZjcHVfc2luZ2xlKHZteCk7CisJZWxzZQorCQl2cGlkX3N5bmNfdmNwdV9nbG9iYWwoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGVwdF9zeW5jX2dsb2JhbCh2b2lkKQpAQCAtODEyLDYgKzg3MCw5IEBACiAJCXdybXNybChNU1JfS0VSTkVMX0dTX0JBU0UsIHZteC0+bXNyX2hvc3Rfa2VybmVsX2dzX2Jhc2UpOwogCX0KICNlbmRpZgorCWlmIChjdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyAmIFRTX1VTRURGUFUpCisJCWNsdHMoKTsKKwlsb2FkX2dkdCgmX19nZXRfY3B1X3Zhcihob3N0X2dkdCkpOwogfQogCiBzdGF0aWMgdm9pZCB2bXhfbG9hZF9ob3N0X3N0YXRlKHN0cnVjdCB2Y3B1X3ZteCAqdm14KQpAQCAtODI4LDM1ICs4ODksMzAgQEAKIHN0YXRpYyB2b2lkIHZteF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQogewogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwotCXU2NCBwaHlzX2FkZHIgPSBfX3BhKHZteC0+dm1jcyk7CiAJdTY0IHRzY190aGlzLCBkZWx0YSwgbmV3X29mZnNldDsKKwl1NjQgcGh5c19hZGRyID0gX19wYShwZXJfY3B1KHZteGFyZWEsIGNwdSkpOwogCi0JaWYgKHZjcHUtPmNwdSAhPSBjcHUpIHsKKwlpZiAoIXZtbV9leGNsdXNpdmUpCisJCWt2bV9jcHVfdm14b24ocGh5c19hZGRyKTsKKwllbHNlIGlmICh2Y3B1LT5jcHUgIT0gY3B1KQogCQl2Y3B1X2NsZWFyKHZteCk7Ci0JCWt2bV9taWdyYXRlX3RpbWVycyh2Y3B1KTsKLQkJc2V0X2JpdChLVk1fUkVRX1RMQl9GTFVTSCwgJnZjcHUtPnJlcXVlc3RzKTsKLQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQkJbGlzdF9hZGQoJnZteC0+bG9jYWxfdmNwdXNfbGluaywKLQkJCSAmcGVyX2NwdSh2Y3B1c19vbl9jcHUsIGNwdSkpOwotCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JfQogCiAJaWYgKHBlcl9jcHUoY3VycmVudF92bWNzLCBjcHUpICE9IHZteC0+dm1jcykgewotCQl1OCBlcnJvcjsKLQogCQlwZXJfY3B1KGN1cnJlbnRfdm1jcywgY3B1KSA9IHZteC0+dm1jczsKLQkJYXNtIHZvbGF0aWxlIChfX2V4KEFTTV9WTVhfVk1QVFJMRF9SQVgpICI7IHNldG5hICUwIgotCQkJICAgICAgOiAiPWciKGVycm9yKSA6ICJhIigmcGh5c19hZGRyKSwgIm0iKHBoeXNfYWRkcikKLQkJCSAgICAgIDogImNjIik7Ci0JCWlmIChlcnJvcikKLQkJCXByaW50ayhLRVJOX0VSUiAia3ZtOiB2bXB0cmxkICVwLyVsbHggZmFpbFxuIiwKLQkJCSAgICAgICB2bXgtPnZtY3MsIHBoeXNfYWRkcik7CisJCXZtY3NfbG9hZCh2bXgtPnZtY3MpOwogCX0KIAogCWlmICh2Y3B1LT5jcHUgIT0gY3B1KSB7CiAJCXN0cnVjdCBkZXNjX3B0ciBkdDsKIAkJdW5zaWduZWQgbG9uZyBzeXNlbnRlcl9lc3A7CiAKKwkJa3ZtX21pZ3JhdGVfdGltZXJzKHZjcHUpOworCQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTsKKwkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwkJbGlzdF9hZGQoJnZteC0+bG9jYWxfdmNwdXNfbGluaywKKwkJCSAmcGVyX2NwdSh2Y3B1c19vbl9jcHUsIGNwdSkpOworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisKIAkJdmNwdS0+Y3B1ID0gY3B1OwogCQkvKgogCQkgKiBMaW51eCB1c2VzIHBlci1jcHUgVFNTIGFuZCBHRFQsIHNvIHNldCB0aGVzZSB3aGVuIHN3aXRjaGluZwpAQCAtODg0LDYgKzk0MCwxMCBAQAogc3RhdGljIHZvaWQgdm14X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlfX3ZteF9sb2FkX2hvc3Rfc3RhdGUodG9fdm14KHZjcHUpKTsKKwlpZiAoIXZtbV9leGNsdXNpdmUpIHsKKwkJX192Y3B1X2NsZWFyKHRvX3ZteCh2Y3B1KSk7CisJCWt2bV9jcHVfdm14b2ZmKCk7CisJfQogfQogCiBzdGF0aWMgdm9pZCB2bXhfZnB1X2FjdGl2YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTEwNTcsMTAgKzExMTcsMTAgQEAKIAkJaWYgKGluZGV4ID49IDAgJiYgdm14LT5yZHRzY3BfZW5hYmxlZCkKIAkJCW1vdmVfbXNyX3VwKHZteCwgaW5kZXgsIHNhdmVfbm1zcnMrKyk7CiAJCS8qCi0JCSAqIE1TUl9LNl9TVEFSIGlzIG9ubHkgbmVlZGVkIG9uIGxvbmcgbW9kZSBndWVzdHMsIGFuZCBvbmx5CisJCSAqIE1TUl9TVEFSIGlzIG9ubHkgbmVlZGVkIG9uIGxvbmcgbW9kZSBndWVzdHMsIGFuZCBvbmx5CiAJCSAqIGlmIGVmZXIuc2NlIGlzIGVuYWJsZWQuCiAJCSAqLwotCQlpbmRleCA9IF9fZmluZF9tc3JfaW5kZXgodm14LCBNU1JfSzZfU1RBUik7CisJCWluZGV4ID0gX19maW5kX21zcl9pbmRleCh2bXgsIE1TUl9TVEFSKTsKIAkJaWYgKChpbmRleCA+PSAwKSAmJiAodm14LT52Y3B1LmFyY2guZWZlciAmIEVGRVJfU0NFKSkKIAkJCW1vdmVfbXNyX3VwKHZteCwgaW5kZXgsIHNhdmVfbm1zcnMrKyk7CiAJfQpAQCAtMTI4Niw2ICsxMzQ2LDEzIEBACiAJLyogbG9ja2VkIGJ1dCBub3QgZW5hYmxlZCAqLwogfQogCitzdGF0aWMgdm9pZCBrdm1fY3B1X3ZteG9uKHU2NCBhZGRyKQoreworCWFzbSB2b2xhdGlsZSAoQVNNX1ZNWF9WTVhPTl9SQVgKKwkJCTogOiAiYSIoJmFkZHIpLCAibSIoYWRkcikKKwkJCTogIm1lbW9yeSIsICJjYyIpOworfQorCiBzdGF0aWMgaW50IGhhcmR3YXJlX2VuYWJsZSh2b2lkICpnYXJiYWdlKQogewogCWludCBjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwpAQCAtMTMwOCwxMSArMTM3NSwxMyBAQAogCQl3cm1zcmwoTVNSX0lBMzJfRkVBVFVSRV9DT05UUk9MLCBvbGQgfCB0ZXN0X2JpdHMpOwogCX0KIAl3cml0ZV9jcjQocmVhZF9jcjQoKSB8IFg4Nl9DUjRfVk1YRSk7IC8qIEZJWE1FOiBub3QgY3B1IGhvdHBsdWcgc2FmZSAqLwotCWFzbSB2b2xhdGlsZSAoQVNNX1ZNWF9WTVhPTl9SQVgKLQkJICAgICAgOiA6ICJhIigmcGh5c19hZGRyKSwgIm0iKHBoeXNfYWRkcikKLQkJICAgICAgOiAibWVtb3J5IiwgImNjIik7CiAKLQllcHRfc3luY19nbG9iYWwoKTsKKwlpZiAodm1tX2V4Y2x1c2l2ZSkgeworCQlrdm1fY3B1X3ZteG9uKHBoeXNfYWRkcik7CisJCWVwdF9zeW5jX2dsb2JhbCgpOworCX0KKworCXN0b3JlX2dkdCgmX19nZXRfY3B1X3Zhcihob3N0X2dkdCkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzM0LDEzICsxNDAzLDE1IEBACiBzdGF0aWMgdm9pZCBrdm1fY3B1X3ZteG9mZih2b2lkKQogewogCWFzbSB2b2xhdGlsZSAoX19leChBU01fVk1YX1ZNWE9GRikgOiA6IDogImNjIik7Ci0Jd3JpdGVfY3I0KHJlYWRfY3I0KCkgJiB+WDg2X0NSNF9WTVhFKTsKIH0KIAogc3RhdGljIHZvaWQgaGFyZHdhcmVfZGlzYWJsZSh2b2lkICpnYXJiYWdlKQogewotCXZtY2xlYXJfbG9jYWxfdmNwdXMoKTsKLQlrdm1fY3B1X3ZteG9mZigpOworCWlmICh2bW1fZXhjbHVzaXZlKSB7CisJCXZtY2xlYXJfbG9jYWxfdmNwdXMoKTsKKwkJa3ZtX2NwdV92bXhvZmYoKTsKKwl9CisJd3JpdGVfY3I0KHJlYWRfY3I0KCkgJiB+WDg2X0NSNF9WTVhFKTsKIH0KIAogc3RhdGljIF9faW5pdCBpbnQgYWRqdXN0X3ZteF9jb250cm9scyh1MzIgY3RsX21pbiwgdTMyIGN0bF9vcHQsCkBAIC0xNTM5LDcgKzE2MTAsOCBAQAogCWlmICghY3B1X2hhc192bXhfdnBpZCgpKQogCQllbmFibGVfdnBpZCA9IDA7CiAKLQlpZiAoIWNwdV9oYXNfdm14X2VwdCgpKSB7CisJaWYgKCFjcHVfaGFzX3ZteF9lcHQoKSB8fAorCSAgICAhY3B1X2hhc192bXhfZXB0XzRsZXZlbHMoKSkgewogCQllbmFibGVfZXB0ID0gMDsKIAkJZW5hYmxlX3VucmVzdHJpY3RlZF9ndWVzdCA9IDA7CiAJfQpAQCAtMTYyOCw3ICsxNzAwLDcgQEAKIAkJZ2ZuX3QgYmFzZV9nZm47CiAKIAkJc2xvdHMgPSBrdm1fbWVtc2xvdHMoa3ZtKTsKLQkJYmFzZV9nZm4gPSBrdm0tPm1lbXNsb3RzLT5tZW1zbG90c1swXS5iYXNlX2dmbiArCisJCWJhc2VfZ2ZuID0gc2xvdHMtPm1lbXNsb3RzWzBdLmJhc2VfZ2ZuICsKIAkJCQkga3ZtLT5tZW1zbG90cy0+bWVtc2xvdHNbMF0ubnBhZ2VzIC0gMzsKIAkJcmV0dXJuIGJhc2VfZ2ZuIDw8IFBBR0VfU0hJRlQ7CiAJfQpAQCAtMTc0NCwyNyArMTgxNiwyNyBAQAogCQkJICAgICAoZ3Vlc3RfdHJfYXIgJiB+QVJfVFlQRV9NQVNLKQogCQkJICAgICB8IEFSX1RZUEVfQlVTWV82NF9UU1MpOwogCX0KLQl2Y3B1LT5hcmNoLmVmZXIgfD0gRUZFUl9MTUE7Ci0Jdm14X3NldF9lZmVyKHZjcHUsIHZjcHUtPmFyY2guZWZlcik7CisJdm14X3NldF9lZmVyKHZjcHUsIHZjcHUtPmFyY2guZWZlciB8IEVGRVJfTE1BKTsKIH0KIAogc3RhdGljIHZvaWQgZXhpdF9sbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JdmNwdS0+YXJjaC5lZmVyICY9IH5FRkVSX0xNQTsKLQogCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9DT05UUk9MUywKIAkJICAgICB2bWNzX3JlYWQzMihWTV9FTlRSWV9DT05UUk9MUykKIAkJICAgICAmIH5WTV9FTlRSWV9JQTMyRV9NT0RFKTsKLQl2bXhfc2V0X2VmZXIodmNwdSwgdmNwdS0+YXJjaC5lZmVyKTsKKwl2bXhfc2V0X2VmZXIodmNwdSwgdmNwdS0+YXJjaC5lZmVyICYgfkVGRVJfTE1BKTsKIH0KIAogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIHZteF9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXZwaWRfc3luY192Y3B1X2FsbCh0b192bXgodmNwdSkpOwotCWlmIChlbmFibGVfZXB0KQorCXZwaWRfc3luY19jb250ZXh0KHRvX3ZteCh2Y3B1KSk7CisJaWYgKGVuYWJsZV9lcHQpIHsKKwkJaWYgKCFWQUxJRF9QQUdFKHZjcHUtPmFyY2gubW11LnJvb3RfaHBhKSkKKwkJCXJldHVybjsKIAkJZXB0X3N5bmNfY29udGV4dChjb25zdHJ1Y3RfZXB0cCh2Y3B1LT5hcmNoLm1tdS5yb290X2hwYSkpOworCX0KIH0KIAogc3RhdGljIHZvaWQgdm14X2RlY2FjaGVfY3IwX2d1ZXN0X2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMjUxMCw3ICsyNTgyLDcgQEAKIAl2bWNzX3dyaXRlMzIoUEFHRV9GQVVMVF9FUlJPUl9DT0RFX01BVENILCAhIWJ5cGFzc19ndWVzdF9wZik7CiAJdm1jc193cml0ZTMyKENSM19UQVJHRVRfQ09VTlQsIDApOyAgICAgICAgICAgLyogMjIuMi4xICovCiAKLQl2bWNzX3dyaXRlbChIT1NUX0NSMCwgcmVhZF9jcjAoKSk7ICAvKiAyMi4yLjMgKi8KKwl2bWNzX3dyaXRlbChIT1NUX0NSMCwgcmVhZF9jcjAoKSB8IFg4Nl9DUjBfVFMpOyAgLyogMjIuMi4zICovCiAJdm1jc193cml0ZWwoSE9TVF9DUjQsIHJlYWRfY3I0KCkpOyAgLyogMjIuMi4zLCAyMi4yLjUgKi8KIAl2bWNzX3dyaXRlbChIT1NUX0NSMywgcmVhZF9jcjMoKSk7ICAvKiAyMi4yLjMgIEZJWE1FOiBzaGFkb3cgdGFibGVzICovCiAKQEAgLTI2MDIsMjEgKzI2NzQsMjcgQEAKIAogc3RhdGljIGludCBpbml0X3Jtb2RlKHN0cnVjdCBrdm0gKmt2bSkKIHsKKwlpbnQgaWR4LCByZXQgPSAwOworCisJaWR4ID0gc3JjdV9yZWFkX2xvY2soJmt2bS0+c3JjdSk7CiAJaWYgKCFpbml0X3Jtb2RlX3Rzcyhrdm0pKQotCQlyZXR1cm4gMDsKKwkJZ290byBleGl0OwogCWlmICghaW5pdF9ybW9kZV9pZGVudGl0eV9tYXAoa3ZtKSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIDE7CisJCWdvdG8gZXhpdDsKKworCXJldCA9IDE7CitleGl0OgorCXNyY3VfcmVhZF91bmxvY2soJmt2bS0+c3JjdSwgaWR4KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHZteF92Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKIAl1NjQgbXNyOwotCWludCByZXQsIGlkeDsKKwlpbnQgcmV0OwogCiAJdmNwdS0+YXJjaC5yZWdzX2F2YWlsID0gfigoMSA8PCBWQ1BVX1JFR1NfUklQKSB8ICgxIDw8IFZDUFVfUkVHU19SU1ApKTsKLQlpZHggPSBzcmN1X3JlYWRfbG9jaygmdmNwdS0+a3ZtLT5zcmN1KTsKIAlpZiAoIWluaXRfcm1vZGUodm14LT52Y3B1Lmt2bSkpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC0yNjMzLDcgKzI3MTEsOSBAQAogCQltc3IgfD0gTVNSX0lBMzJfQVBJQ0JBU0VfQlNQOwogCWt2bV9zZXRfYXBpY19iYXNlKCZ2bXgtPnZjcHUsIG1zcik7CiAKLQlmeF9pbml0KCZ2bXgtPnZjcHUpOworCXJldCA9IGZ4X2luaXQoJnZteC0+dmNwdSk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIG91dDsKIAogCXNlZ19zZXR1cChWQ1BVX1NSRUdfQ1MpOwogCS8qCkBAIC0yNzE2LDcgKzI3OTYsNyBAQAogCXZteF9mcHVfYWN0aXZhdGUoJnZteC0+dmNwdSk7CiAJdXBkYXRlX2V4Y2VwdGlvbl9iaXRtYXAoJnZteC0+dmNwdSk7CiAKLQl2cGlkX3N5bmNfdmNwdV9hbGwodm14KTsKKwl2cGlkX3N5bmNfY29udGV4dCh2bXgpOwogCiAJcmV0ID0gMDsKIApAQCAtMjcyNCw3ICsyODA0LDYgQEAKIAl2bXgtPmVtdWxhdGlvbl9yZXF1aXJlZCA9IDA7CiAKIG91dDoKLQlzcmN1X3JlYWRfdW5sb2NrKCZ2Y3B1LT5rdm0tPnNyY3UsIGlkeCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjgyOSw5ICsyOTA4LDcgQEAKIHsKIAlpZiAoIWNwdV9oYXNfdmlydHVhbF9ubWlzKCkpCiAJCXJldHVybiB0b192bXgodmNwdSktPnNvZnRfdm5taV9ibG9ja2VkOwotCWVsc2UKLQkJcmV0dXJuICEhKHZtY3NfcmVhZDMyKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTykgJgotCQkJICBHVUVTVF9JTlRSX1NUQVRFX05NSSk7CisJcmV0dXJuIHZtY3NfcmVhZDMyKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTykJJiBHVUVTVF9JTlRSX1NUQVRFX05NSTsKIH0KIAogc3RhdGljIHZvaWQgdm14X3NldF9ubWlfbWFzayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbWFza2VkKQpAQCAtMzA3Myw3ICszMTUwLDcgQEAKIAkrK3ZjcHUtPnN0YXQuaW9fZXhpdHM7CiAKIAlpZiAoc3RyaW5nIHx8IGluKQotCQlyZXR1cm4gIShlbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIDAsIDAsIDApID09IEVNVUxBVEVfRE9fTU1JTyk7CisJCXJldHVybiBlbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIDAsIDAsIDApID09IEVNVUxBVEVfRE9ORTsKIAogCXBvcnQgPSBleGl0X3F1YWxpZmljYXRpb24gPj4gMTY7CiAJc2l6ZSA9IChleGl0X3F1YWxpZmljYXRpb24gJiA3KSArIDE7CkBAIC0zMDkzLDExICszMTcwLDIwIEBACiAJaHlwZXJjYWxsWzJdID0gMHhjMTsKIH0KIAorc3RhdGljIHZvaWQgY29tcGxldGVfaW5zbl9ncChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlcnIpCit7CisJaWYgKGVycikKKwkJa3ZtX2luamVjdF9ncCh2Y3B1LCAwKTsKKwllbHNlCisJCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7Cit9CisKIHN0YXRpYyBpbnQgaGFuZGxlX2NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiwgdmFsOwogCWludCBjcjsKIAlpbnQgcmVnOworCWludCBlcnI7CiAKIAlleGl0X3F1YWxpZmljYXRpb24gPSB2bWNzX3JlYWRsKEVYSVRfUVVBTElGSUNBVElPTik7CiAJY3IgPSBleGl0X3F1YWxpZmljYXRpb24gJiAxNTsKQEAgLTMxMDgsMTYgKzMxOTQsMTYgQEAKIAkJdHJhY2Vfa3ZtX2NyX3dyaXRlKGNyLCB2YWwpOwogCQlzd2l0Y2ggKGNyKSB7CiAJCWNhc2UgMDoKLQkJCWt2bV9zZXRfY3IwKHZjcHUsIHZhbCk7Ci0JCQlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOworCQkJZXJyID0ga3ZtX3NldF9jcjAodmNwdSwgdmFsKTsKKwkJCWNvbXBsZXRlX2luc25fZ3AodmNwdSwgZXJyKTsKIAkJCXJldHVybiAxOwogCQljYXNlIDM6Ci0JCQlrdm1fc2V0X2NyMyh2Y3B1LCB2YWwpOwotCQkJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKKwkJCWVyciA9IGt2bV9zZXRfY3IzKHZjcHUsIHZhbCk7CisJCQljb21wbGV0ZV9pbnNuX2dwKHZjcHUsIGVycik7CiAJCQlyZXR1cm4gMTsKIAkJY2FzZSA0OgotCQkJa3ZtX3NldF9jcjQodmNwdSwgdmFsKTsKLQkJCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CisJCQllcnIgPSBrdm1fc2V0X2NyNCh2Y3B1LCB2YWwpOworCQkJY29tcGxldGVfaW5zbl9ncCh2Y3B1LCBlcnIpOwogCQkJcmV0dXJuIDE7CiAJCWNhc2UgODogewogCQkJCXU4IGNyOF9wcmV2ID0ga3ZtX2dldF9jcjgodmNwdSk7CkBAIC0zMzI0LDI4ICszNDEwLDIzIEBACiBzdGF0aWMgaW50IGhhbmRsZV93YmludmQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7Ci0JLyogVE9ETzogQWRkIHN1cHBvcnQgZm9yIFZULWQvcGFzcy10aHJvdWdoIGRldmljZSAqLworCWt2bV9lbXVsYXRlX3diaW52ZCh2Y3B1KTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBoYW5kbGVfeHNldGJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl1NjQgbmV3X2J2ID0ga3ZtX3JlYWRfZWR4X2VheCh2Y3B1KTsKKwl1MzIgaW5kZXggPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkNYKTsKKworCWlmIChrdm1fc2V0X3hjcih2Y3B1LCBpbmRleCwgbmV3X2J2KSA9PSAwKQorCQlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOwogCXJldHVybiAxOwogfQogCiBzdGF0aWMgaW50IGhhbmRsZV9hcGljX2FjY2VzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb247Ci0JZW51bSBlbXVsYXRpb25fcmVzdWx0IGVyOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwotCi0JZXhpdF9xdWFsaWZpY2F0aW9uID0gdm1jc19yZWFkbChFWElUX1FVQUxJRklDQVRJT04pOwotCW9mZnNldCA9IGV4aXRfcXVhbGlmaWNhdGlvbiAmIDB4ZmZmdWw7Ci0KLQllciA9IGVtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgMCwgMCwgMCk7Ci0KLQlpZiAoZXIgIT0gIEVNVUxBVEVfRE9ORSkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJGYWlsIHRvIGhhbmRsZSBhcGljIGFjY2VzcyB2bWV4aXQhIE9mZnNldCBpcyAweCVseFxuIiwKLQkJICAgICAgIG9mZnNldCk7Ci0JCXJldHVybiAtRU5PRVhFQzsKLQl9Ci0JcmV0dXJuIDE7CisJcmV0dXJuIGVtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgMCwgMCwgMCkgPT0gRU1VTEFURV9ET05FOwogfQogCiBzdGF0aWMgaW50IGhhbmRsZV90YXNrX3N3aXRjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0zNTU3LDEzICszNjM4LDggQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJaWYgKGVyciAhPSBFTVVMQVRFX0RPTkUpIHsKLQkJCXZjcHUtPnJ1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTlRFUk5BTF9FUlJPUjsKLQkJCXZjcHUtPnJ1bi0+aW50ZXJuYWwuc3ViZXJyb3IgPSBLVk1fSU5URVJOQUxfRVJST1JfRU1VTEFUSU9OOwotCQkJdmNwdS0+cnVuLT5pbnRlcm5hbC5uZGF0YSA9IDA7Ci0JCQlyZXQgPSAwOwotCQkJZ290byBvdXQ7Ci0JCX0KKwkJaWYgKGVyciAhPSBFTVVMQVRFX0RPTkUpCisJCQlyZXR1cm4gMDsKIAogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQlnb3RvIG91dDsKQEAgLTM2MjYsNiArMzcwMiw3IEBACiAJW0VYSVRfUkVBU09OX1RQUl9CRUxPV19USFJFU0hPTERdICAgICA9IGhhbmRsZV90cHJfYmVsb3dfdGhyZXNob2xkLAogCVtFWElUX1JFQVNPTl9BUElDX0FDQ0VTU10gICAgICAgICAgICAgPSBoYW5kbGVfYXBpY19hY2Nlc3MsCiAJW0VYSVRfUkVBU09OX1dCSU5WRF0gICAgICAgICAgICAgICAgICA9IGhhbmRsZV93YmludmQsCisJW0VYSVRfUkVBU09OX1hTRVRCVl0gICAgICAgICAgICAgICAgICA9IGhhbmRsZV94c2V0YnYsCiAJW0VYSVRfUkVBU09OX1RBU0tfU1dJVENIXSAgICAgICAgICAgICA9IGhhbmRsZV90YXNrX3N3aXRjaCwKIAlbRVhJVF9SRUFTT05fTUNFX0RVUklOR19WTUVOVFJZXSAgICAgID0gaGFuZGxlX21hY2hpbmVfY2hlY2ssCiAJW0VYSVRfUkVBU09OX0VQVF9WSU9MQVRJT05dCSAgICAgID0gaGFuZGxlX2VwdF92aW9sYXRpb24sCkBAIC0zNjU5LDYgKzM3MzYsMTMgQEAKIAlpZiAoZW5hYmxlX2VwdCAmJiBpc19wYWdpbmcodmNwdSkpCiAJCXZjcHUtPmFyY2guY3IzID0gdm1jc19yZWFkbChHVUVTVF9DUjMpOwogCisJaWYgKGV4aXRfcmVhc29uICYgVk1YX0VYSVRfUkVBU09OU19GQUlMRURfVk1FTlRSWSkgeworCQl2Y3B1LT5ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfRkFJTF9FTlRSWTsKKwkJdmNwdS0+cnVuLT5mYWlsX2VudHJ5LmhhcmR3YXJlX2VudHJ5X2ZhaWx1cmVfcmVhc29uCisJCQk9IGV4aXRfcmVhc29uOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAodW5saWtlbHkodm14LT5mYWlsKSkgewogCQl2Y3B1LT5ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfRkFJTF9FTlRSWTsKIAkJdmNwdS0+cnVuLT5mYWlsX2VudHJ5LmhhcmR3YXJlX2VudHJ5X2ZhaWx1cmVfcmVhc29uCkBAIC0zODY0LDExICszOTQ4LDYgQEAKIAlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfU0lOR0xFU1RFUCkKIAkJdm14X3NldF9pbnRlcnJ1cHRfc2hhZG93KHZjcHUsIDApOwogCi0JLyoKLQkgKiBMb2FkaW5nIGd1ZXN0IGZwdSBtYXkgaGF2ZSBjbGVhcmVkIGhvc3QgY3IwLnRzCi0JICovCi0Jdm1jc193cml0ZWwoSE9TVF9DUjAsIHJlYWRfY3IwKCkpOwotCiAJYXNtKAogCQkvKiBTdG9yZSBob3N0IHJlZ2lzdGVycyAqLwogCQkicHVzaCAlJSJSImR4OyBwdXNoICUlIlIiYnA7IgpAQCAtNDAwNCw2ICs0MDgzLDE5IEBACiAJa21lbV9jYWNoZV9mcmVlKGt2bV92Y3B1X2NhY2hlLCB2bXgpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgdm1jc19pbml0KHN0cnVjdCB2bWNzICp2bWNzKQoreworCXU2NCBwaHlzX2FkZHIgPSBfX3BhKHBlcl9jcHUodm14YXJlYSwgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSkpOworCisJaWYgKCF2bW1fZXhjbHVzaXZlKQorCQlrdm1fY3B1X3ZteG9uKHBoeXNfYWRkcik7CisKKwl2bWNzX2NsZWFyKHZtY3MpOworCisJaWYgKCF2bW1fZXhjbHVzaXZlKQorCQlrdm1fY3B1X3ZteG9mZigpOworfQorCiBzdGF0aWMgc3RydWN0IGt2bV92Y3B1ICp2bXhfY3JlYXRlX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpCiB7CiAJaW50IGVycjsKQEAgLTQwMjksNyArNDEyMSw3IEBACiAJaWYgKCF2bXgtPnZtY3MpCiAJCWdvdG8gZnJlZV9tc3JzOwogCi0Jdm1jc19jbGVhcih2bXgtPnZtY3MpOworCXZtY3NfaW5pdCh2bXgtPnZtY3MpOwogCiAJY3B1ID0gZ2V0X2NwdSgpOwogCXZteF92Y3B1X2xvYWQoJnZteC0+dmNwdSwgY3B1KTsKQEAgLTQyNjgsNiArNDM2MCw4IEBACiAJLnJkdHNjcF9zdXBwb3J0ZWQgPSB2bXhfcmR0c2NwX3N1cHBvcnRlZCwKIAogCS5zZXRfc3VwcG9ydGVkX2NwdWlkID0gdm14X3NldF9zdXBwb3J0ZWRfY3B1aWQsCisKKwkuaGFzX3diaW52ZF9leGl0ID0gY3B1X2hhc192bXhfd2JpbnZkX2V4aXQsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCB2bXhfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDA1ZDU3MWYuLjI1ZjE5MDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYworKysgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTYsNiArNiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUXVtcmFuZXQsIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAwOCBRdW1yYW5ldCwgSW5jLgogICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiwgMjAwOAorICogQ29weXJpZ2h0IDIwMTAgUmVkIEhhdCwgSW5jLiBhbmQvb3IgaXRzIGFmZmlsYXRlcy4KICAqCiAgKiBBdXRob3JzOgogICogICBBdmkgS2l2aXR5ICAgPGF2aUBxdW1yYW5ldC5jb20+CkBAIC00MSwxNyArNDIsMTkgQEAKICNpbmNsdWRlIDxsaW51eC9zcmN1Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2t2bS5oPgogCiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKICNpbmNsdWRlICJ0cmFjZS5oIgogCiAjaW5jbHVkZSA8YXNtL2RlYnVncmVnLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KICNpbmNsdWRlIDxhc20vbXRyci5oPgogI2luY2x1ZGUgPGFzbS9tY2UuaD4KKyNpbmNsdWRlIDxhc20vaTM4Ny5oPgorI2luY2x1ZGUgPGFzbS94Y3IuaD4KIAogI2RlZmluZSBNQVhfSU9fTVNSUyAyNTYKICNkZWZpbmUgQ1IwX1JFU0VSVkVEX0JJVFMJCQkJCQlcCkBAIC02Miw2ICs2NSw3IEBACiAJKH4odW5zaWduZWQgbG9uZykoWDg2X0NSNF9WTUUgfCBYODZfQ1I0X1BWSSB8IFg4Nl9DUjRfVFNEIHwgWDg2X0NSNF9ERVwKIAkJCSAgfCBYODZfQ1I0X1BTRSB8IFg4Nl9DUjRfUEFFIHwgWDg2X0NSNF9NQ0UJXAogCQkJICB8IFg4Nl9DUjRfUEdFIHwgWDg2X0NSNF9QQ0UgfCBYODZfQ1I0X09TRlhTUglcCisJCQkgIHwgWDg2X0NSNF9PU1hTQVZFIFwKIAkJCSAgfCBYODZfQ1I0X09TWE1NRVhDUFQgfCBYODZfQ1I0X1ZNWEUpKQogCiAjZGVmaW5lIENSOF9SRVNFUlZFRF9CSVRTICh+KHVuc2lnbmVkIGxvbmcpWDg2X0NSOF9UUFIpCkBAIC0xNDcsNiArMTUxLDEzIEBACiAJeyBOVUxMIH0KIH07CiAKK3U2NCBfX3JlYWRfbW9zdGx5IGhvc3RfeGNyMDsKKworc3RhdGljIGlubGluZSB1MzIgYml0KGludCBiaXRubykKK3sKKwlyZXR1cm4gMSA8PCAoYml0bm8gJiAzMSk7Cit9CisKIHN0YXRpYyB2b2lkIGt2bV9vbl91c2VyX3JldHVybihzdHJ1Y3QgdXNlcl9yZXR1cm5fbm90aWZpZXIgKnVybikKIHsKIAl1bnNpZ25lZCBzbG90OwpAQCAtMjg1LDcgKzI5Niw3IEBACiAJcHJldl9uciA9IHZjcHUtPmFyY2guZXhjZXB0aW9uLm5yOwogCWlmIChwcmV2X25yID09IERGX1ZFQ1RPUikgewogCQkvKiB0cmlwbGUgZmF1bHQgLT4gc2h1dGRvd24gKi8KLQkJc2V0X2JpdChLVk1fUkVRX1RSSVBMRV9GQVVMVCwgJnZjcHUtPnJlcXVlc3RzKTsKKwkJa3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1RSSVBMRV9GQVVMVCwgdmNwdSk7CiAJCXJldHVybjsKIAl9CiAJY2xhc3MxID0gZXhjZXB0aW9uX2NsYXNzKHByZXZfbnIpOwpAQCAtNDE0LDEyMSArNDI1LDE2MyBAQAogCXJldHVybiBjaGFuZ2VkOwogfQogCi12b2lkIGt2bV9zZXRfY3IwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjApCitpbnQga3ZtX3NldF9jcjAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMCkKIHsKKwl1bnNpZ25lZCBsb25nIG9sZF9jcjAgPSBrdm1fcmVhZF9jcjAodmNwdSk7CisJdW5zaWduZWQgbG9uZyB1cGRhdGVfYml0cyA9IFg4Nl9DUjBfUEcgfCBYODZfQ1IwX1dQIHwKKwkJCQkgICAgWDg2X0NSMF9DRCB8IFg4Nl9DUjBfTlc7CisKIAljcjAgfD0gWDg2X0NSMF9FVDsKIAogI2lmZGVmIENPTkZJR19YODZfNjQKLQlpZiAoY3IwICYgMHhmZmZmZmZmZjAwMDAwMDAwVUwpIHsKLQkJa3ZtX2luamVjdF9ncCh2Y3B1LCAwKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAoY3IwICYgMHhmZmZmZmZmZjAwMDAwMDAwVUwpCisJCXJldHVybiAxOwogI2VuZGlmCiAKIAljcjAgJj0gfkNSMF9SRVNFUlZFRF9CSVRTOwogCi0JaWYgKChjcjAgJiBYODZfQ1IwX05XKSAmJiAhKGNyMCAmIFg4Nl9DUjBfQ0QpKSB7Ci0JCWt2bV9pbmplY3RfZ3AodmNwdSwgMCk7Ci0JCXJldHVybjsKLQl9CisJaWYgKChjcjAgJiBYODZfQ1IwX05XKSAmJiAhKGNyMCAmIFg4Nl9DUjBfQ0QpKQorCQlyZXR1cm4gMTsKIAotCWlmICgoY3IwICYgWDg2X0NSMF9QRykgJiYgIShjcjAgJiBYODZfQ1IwX1BFKSkgewotCQlrdm1faW5qZWN0X2dwKHZjcHUsIDApOwotCQlyZXR1cm47Ci0JfQorCWlmICgoY3IwICYgWDg2X0NSMF9QRykgJiYgIShjcjAgJiBYODZfQ1IwX1BFKSkKKwkJcmV0dXJuIDE7CiAKIAlpZiAoIWlzX3BhZ2luZyh2Y3B1KSAmJiAoY3IwICYgWDg2X0NSMF9QRykpIHsKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJCWlmICgodmNwdS0+YXJjaC5lZmVyICYgRUZFUl9MTUUpKSB7CiAJCQlpbnQgY3NfZGIsIGNzX2w7CiAKLQkJCWlmICghaXNfcGFlKHZjcHUpKSB7Ci0JCQkJa3ZtX2luamVjdF9ncCh2Y3B1LCAwKTsKLQkJCQlyZXR1cm47Ci0JCQl9CisJCQlpZiAoIWlzX3BhZSh2Y3B1KSkKKwkJCQlyZXR1cm4gMTsKIAkJCWt2bV94ODZfb3BzLT5nZXRfY3NfZGJfbF9iaXRzKHZjcHUsICZjc19kYiwgJmNzX2wpOwotCQkJaWYgKGNzX2wpIHsKLQkJCQlrdm1faW5qZWN0X2dwKHZjcHUsIDApOwotCQkJCXJldHVybjsKLQotCQkJfQorCQkJaWYgKGNzX2wpCisJCQkJcmV0dXJuIDE7CiAJCX0gZWxzZQogI2VuZGlmCi0JCWlmIChpc19wYWUodmNwdSkgJiYgIWxvYWRfcGRwdHJzKHZjcHUsIHZjcHUtPmFyY2guY3IzKSkgewotCQkJa3ZtX2luamVjdF9ncCh2Y3B1LCAwKTsKLQkJCXJldHVybjsKLQkJfQotCisJCWlmIChpc19wYWUodmNwdSkgJiYgIWxvYWRfcGRwdHJzKHZjcHUsIHZjcHUtPmFyY2guY3IzKSkKKwkJCXJldHVybiAxOwogCX0KIAogCWt2bV94ODZfb3BzLT5zZXRfY3IwKHZjcHUsIGNyMCk7CiAKLQlrdm1fbW11X3Jlc2V0X2NvbnRleHQodmNwdSk7Ci0JcmV0dXJuOworCWlmICgoY3IwIF4gb2xkX2NyMCkgJiB1cGRhdGVfYml0cykKKwkJa3ZtX21tdV9yZXNldF9jb250ZXh0KHZjcHUpOworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3NldF9jcjApOwogCiB2b2lkIGt2bV9sbXN3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBtc3cpCiB7Ci0Ja3ZtX3NldF9jcjAodmNwdSwga3ZtX3JlYWRfY3IwX2JpdHModmNwdSwgfjB4MGV1bCkgfCAobXN3ICYgMHgwZikpOworCSh2b2lkKWt2bV9zZXRfY3IwKHZjcHUsIGt2bV9yZWFkX2NyMF9iaXRzKHZjcHUsIH4weDBldWwpIHwgKG1zdyAmIDB4MGYpKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9sbXN3KTsKIAotdm9pZCBrdm1fc2V0X2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KQoraW50IF9fa3ZtX3NldF94Y3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaW5kZXgsIHU2NCB4Y3IpCit7CisJdTY0IHhjcjA7CisKKwkvKiBPbmx5IHN1cHBvcnQgWENSX1hGRUFUVVJFX0VOQUJMRURfTUFTSyh4Y3IwKSBub3cgICovCisJaWYgKGluZGV4ICE9IFhDUl9YRkVBVFVSRV9FTkFCTEVEX01BU0spCisJCXJldHVybiAxOworCXhjcjAgPSB4Y3I7CisJaWYgKGt2bV94ODZfb3BzLT5nZXRfY3BsKHZjcHUpICE9IDApCisJCXJldHVybiAxOworCWlmICghKHhjcjAgJiBYU1RBVEVfRlApKQorCQlyZXR1cm4gMTsKKwlpZiAoKHhjcjAgJiBYU1RBVEVfWU1NKSAmJiAhKHhjcjAgJiBYU1RBVEVfU1NFKSkKKwkJcmV0dXJuIDE7CisJaWYgKHhjcjAgJiB+aG9zdF94Y3IwKQorCQlyZXR1cm4gMTsKKwl2Y3B1LT5hcmNoLnhjcjAgPSB4Y3IwOworCXZjcHUtPmd1ZXN0X3hjcjBfbG9hZGVkID0gMDsKKwlyZXR1cm4gMDsKK30KKworaW50IGt2bV9zZXRfeGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGluZGV4LCB1NjQgeGNyKQoreworCWlmIChfX2t2bV9zZXRfeGNyKHZjcHUsIGluZGV4LCB4Y3IpKSB7CisJCWt2bV9pbmplY3RfZ3AodmNwdSwgMCk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGt2bV9zZXRfeGNyKTsKKworc3RhdGljIGJvb2wgZ3Vlc3RfY3B1aWRfaGFzX3hzYXZlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqYmVzdDsKKworCWJlc3QgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAxLCAwKTsKKwlyZXR1cm4gYmVzdCAmJiAoYmVzdC0+ZWN4ICYgYml0KFg4Nl9GRUFUVVJFX1hTQVZFKSk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmJlc3Q7CisKKwliZXN0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMSwgMCk7CisJaWYgKCFiZXN0KQorCQlyZXR1cm47CisKKwkvKiBVcGRhdGUgT1NYU0FWRSBiaXQgKi8KKwlpZiAoY3B1X2hhc194c2F2ZSAmJiBiZXN0LT5mdW5jdGlvbiA9PSAweDEpIHsKKwkJYmVzdC0+ZWN4ICY9IH4oYml0KFg4Nl9GRUFUVVJFX09TWFNBVkUpKTsKKwkJaWYgKGt2bV9yZWFkX2NyNF9iaXRzKHZjcHUsIFg4Nl9DUjRfT1NYU0FWRSkpCisJCQliZXN0LT5lY3ggfD0gYml0KFg4Nl9GRUFUVVJFX09TWFNBVkUpOworCX0KK30KKworaW50IGt2bV9zZXRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpCiB7CiAJdW5zaWduZWQgbG9uZyBvbGRfY3I0ID0ga3ZtX3JlYWRfY3I0KHZjcHUpOwogCXVuc2lnbmVkIGxvbmcgcGRwdHJfYml0cyA9IFg4Nl9DUjRfUEdFIHwgWDg2X0NSNF9QU0UgfCBYODZfQ1I0X1BBRTsKIAotCWlmIChjcjQgJiBDUjRfUkVTRVJWRURfQklUUykgewotCQlrdm1faW5qZWN0X2dwKHZjcHUsIDApOwotCQlyZXR1cm47Ci0JfQorCWlmIChjcjQgJiBDUjRfUkVTRVJWRURfQklUUykKKwkJcmV0dXJuIDE7CisKKwlpZiAoIWd1ZXN0X2NwdWlkX2hhc194c2F2ZSh2Y3B1KSAmJiAoY3I0ICYgWDg2X0NSNF9PU1hTQVZFKSkKKwkJcmV0dXJuIDE7CiAKIAlpZiAoaXNfbG9uZ19tb2RlKHZjcHUpKSB7Ci0JCWlmICghKGNyNCAmIFg4Nl9DUjRfUEFFKSkgewotCQkJa3ZtX2luamVjdF9ncCh2Y3B1LCAwKTsKLQkJCXJldHVybjsKLQkJfQorCQlpZiAoIShjcjQgJiBYODZfQ1I0X1BBRSkpCisJCQlyZXR1cm4gMTsKIAl9IGVsc2UgaWYgKGlzX3BhZ2luZyh2Y3B1KSAmJiAoY3I0ICYgWDg2X0NSNF9QQUUpCiAJCSAgICYmICgoY3I0IF4gb2xkX2NyNCkgJiBwZHB0cl9iaXRzKQotCQkgICAmJiAhbG9hZF9wZHB0cnModmNwdSwgdmNwdS0+YXJjaC5jcjMpKSB7Ci0JCWt2bV9pbmplY3RfZ3AodmNwdSwgMCk7Ci0JCXJldHVybjsKLQl9CisJCSAgICYmICFsb2FkX3BkcHRycyh2Y3B1LCB2Y3B1LT5hcmNoLmNyMykpCisJCXJldHVybiAxOwogCi0JaWYgKGNyNCAmIFg4Nl9DUjRfVk1YRSkgewotCQlrdm1faW5qZWN0X2dwKHZjcHUsIDApOwotCQlyZXR1cm47Ci0JfQorCWlmIChjcjQgJiBYODZfQ1I0X1ZNWEUpCisJCXJldHVybiAxOworCiAJa3ZtX3g4Nl9vcHMtPnNldF9jcjQodmNwdSwgY3I0KTsKLQl2Y3B1LT5hcmNoLmNyNCA9IGNyNDsKLQlrdm1fbW11X3Jlc2V0X2NvbnRleHQodmNwdSk7CisKKwlpZiAoKGNyNCBeIG9sZF9jcjQpICYgcGRwdHJfYml0cykKKwkJa3ZtX21tdV9yZXNldF9jb250ZXh0KHZjcHUpOworCisJaWYgKChjcjQgXiBvbGRfY3I0KSAmIFg4Nl9DUjRfT1NYU0FWRSkKKwkJdXBkYXRlX2NwdWlkKHZjcHUpOworCisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fc2V0X2NyNCk7CiAKLXZvaWQga3ZtX3NldF9jcjMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMykKK2ludCBrdm1fc2V0X2NyMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IzKQogewogCWlmIChjcjMgPT0gdmNwdS0+YXJjaC5jcjMgJiYgIXBkcHRyc19jaGFuZ2VkKHZjcHUpKSB7CiAJCWt2bV9tbXVfc3luY19yb290cyh2Y3B1KTsKIAkJa3ZtX21tdV9mbHVzaF90bGIodmNwdSk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKGlzX2xvbmdfbW9kZSh2Y3B1KSkgewotCQlpZiAoY3IzICYgQ1IzX0xfTU9ERV9SRVNFUlZFRF9CSVRTKSB7Ci0JCQlrdm1faW5qZWN0X2dwKHZjcHUsIDApOwotCQkJcmV0dXJuOwotCQl9CisJCWlmIChjcjMgJiBDUjNfTF9NT0RFX1JFU0VSVkVEX0JJVFMpCisJCQlyZXR1cm4gMTsKIAl9IGVsc2UgewogCQlpZiAoaXNfcGFlKHZjcHUpKSB7Ci0JCQlpZiAoY3IzICYgQ1IzX1BBRV9SRVNFUlZFRF9CSVRTKSB7Ci0JCQkJa3ZtX2luamVjdF9ncCh2Y3B1LCAwKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlpZiAoaXNfcGFnaW5nKHZjcHUpICYmICFsb2FkX3BkcHRycyh2Y3B1LCBjcjMpKSB7Ci0JCQkJa3ZtX2luamVjdF9ncCh2Y3B1LCAwKTsKLQkJCQlyZXR1cm47Ci0JCQl9CisJCQlpZiAoY3IzICYgQ1IzX1BBRV9SRVNFUlZFRF9CSVRTKQorCQkJCXJldHVybiAxOworCQkJaWYgKGlzX3BhZ2luZyh2Y3B1KSAmJiAhbG9hZF9wZHB0cnModmNwdSwgY3IzKSkKKwkJCQlyZXR1cm4gMTsKIAkJfQogCQkvKgogCQkgKiBXZSBkb24ndCBjaGVjayByZXNlcnZlZCBiaXRzIGluIG5vbnBhZSBtb2RlLCBiZWNhdXNlCkBAIC01NDYsMjQgKzU5OSwyOCBAQAogCSAqIHRvIGRlYnVnKSBiZWhhdmlvciBvbiB0aGUgZ3Vlc3Qgc2lkZS4KIAkgKi8KIAlpZiAodW5saWtlbHkoIWdmbl90b19tZW1zbG90KHZjcHUtPmt2bSwgY3IzID4+IFBBR0VfU0hJRlQpKSkKLQkJa3ZtX2luamVjdF9ncCh2Y3B1LCAwKTsKLQllbHNlIHsKLQkJdmNwdS0+YXJjaC5jcjMgPSBjcjM7Ci0JCXZjcHUtPmFyY2gubW11Lm5ld19jcjModmNwdSk7Ci0JfQorCQlyZXR1cm4gMTsKKwl2Y3B1LT5hcmNoLmNyMyA9IGNyMzsKKwl2Y3B1LT5hcmNoLm1tdS5uZXdfY3IzKHZjcHUpOworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3NldF9jcjMpOwogCi12b2lkIGt2bV9zZXRfY3I4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjgpCitpbnQgX19rdm1fc2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I4KQogewotCWlmIChjcjggJiBDUjhfUkVTRVJWRURfQklUUykgewotCQlrdm1faW5qZWN0X2dwKHZjcHUsIDApOwotCQlyZXR1cm47Ci0JfQorCWlmIChjcjggJiBDUjhfUkVTRVJWRURfQklUUykKKwkJcmV0dXJuIDE7CiAJaWYgKGlycWNoaXBfaW5fa2VybmVsKHZjcHUtPmt2bSkpCiAJCWt2bV9sYXBpY19zZXRfdHByKHZjcHUsIGNyOCk7CiAJZWxzZQogCQl2Y3B1LT5hcmNoLmNyOCA9IGNyODsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBrdm1fc2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I4KQoreworCWlmIChfX2t2bV9zZXRfY3I4KHZjcHUsIGNyOCkpCisJCWt2bV9pbmplY3RfZ3AodmNwdSwgMCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fc2V0X2NyOCk7CiAKQEAgLTU3Niw3ICs2MzMsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2dldF9jcjgpOwogCi1pbnQga3ZtX3NldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkciwgdW5zaWduZWQgbG9uZyB2YWwpCitzdGF0aWMgaW50IF9fa3ZtX3NldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkciwgdW5zaWduZWQgbG9uZyB2YWwpCiB7CiAJc3dpdGNoIChkcikgewogCWNhc2UgMCAuLi4gMzoKQEAgLTU4NSwyOSArNjQyLDIxIEBACiAJCQl2Y3B1LT5hcmNoLmVmZl9kYltkcl0gPSB2YWw7CiAJCWJyZWFrOwogCWNhc2UgNDoKLQkJaWYgKGt2bV9yZWFkX2NyNF9iaXRzKHZjcHUsIFg4Nl9DUjRfREUpKSB7Ci0JCQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIFVEX1ZFQ1RPUik7Ci0JCQlyZXR1cm4gMTsKLQkJfQorCQlpZiAoa3ZtX3JlYWRfY3I0X2JpdHModmNwdSwgWDg2X0NSNF9ERSkpCisJCQlyZXR1cm4gMTsgLyogI1VEICovCiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgNjoKLQkJaWYgKHZhbCAmIDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkgewotCQkJa3ZtX2luamVjdF9ncCh2Y3B1LCAwKTsKLQkJCXJldHVybiAxOwotCQl9CisJCWlmICh2YWwgJiAweGZmZmZmZmZmMDAwMDAwMDBVTEwpCisJCQlyZXR1cm4gLTE7IC8qICNHUCAqLwogCQl2Y3B1LT5hcmNoLmRyNiA9ICh2YWwgJiBEUjZfVk9MQVRJTEUpIHwgRFI2X0ZJWEVEXzE7CiAJCWJyZWFrOwogCWNhc2UgNToKLQkJaWYgKGt2bV9yZWFkX2NyNF9iaXRzKHZjcHUsIFg4Nl9DUjRfREUpKSB7Ci0JCQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIFVEX1ZFQ1RPUik7Ci0JCQlyZXR1cm4gMTsKLQkJfQorCQlpZiAoa3ZtX3JlYWRfY3I0X2JpdHModmNwdSwgWDg2X0NSNF9ERSkpCisJCQlyZXR1cm4gMTsgLyogI1VEICovCiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWRlZmF1bHQ6IC8qIDcgKi8KLQkJaWYgKHZhbCAmIDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkgewotCQkJa3ZtX2luamVjdF9ncCh2Y3B1LCAwKTsKLQkJCXJldHVybiAxOwotCQl9CisJCWlmICh2YWwgJiAweGZmZmZmZmZmMDAwMDAwMDBVTEwpCisJCQlyZXR1cm4gLTE7IC8qICNHUCAqLwogCQl2Y3B1LT5hcmNoLmRyNyA9ICh2YWwgJiBEUjdfVk9MQVRJTEUpIHwgRFI3X0ZJWEVEXzE7CiAJCWlmICghKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpIHsKIAkJCWt2bV94ODZfb3BzLT5zZXRfZHI3KHZjcHUsIHZjcHUtPmFyY2guZHI3KTsKQEAgLTYxOCwyOCArNjY3LDM3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworaW50IGt2bV9zZXRfZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZHIsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCWludCByZXM7CisKKwlyZXMgPSBfX2t2bV9zZXRfZHIodmNwdSwgZHIsIHZhbCk7CisJaWYgKHJlcyA+IDApCisJCWt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgVURfVkVDVE9SKTsKKwllbHNlIGlmIChyZXMgPCAwKQorCQlrdm1faW5qZWN0X2dwKHZjcHUsIDApOworCisJcmV0dXJuIHJlczsKK30KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9zZXRfZHIpOwogCi1pbnQga3ZtX2dldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkciwgdW5zaWduZWQgbG9uZyAqdmFsKQorc3RhdGljIGludCBfa3ZtX2dldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkciwgdW5zaWduZWQgbG9uZyAqdmFsKQogewogCXN3aXRjaCAoZHIpIHsKIAljYXNlIDAgLi4uIDM6CiAJCSp2YWwgPSB2Y3B1LT5hcmNoLmRiW2RyXTsKIAkJYnJlYWs7CiAJY2FzZSA0OgotCQlpZiAoa3ZtX3JlYWRfY3I0X2JpdHModmNwdSwgWDg2X0NSNF9ERSkpIHsKLQkJCWt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgVURfVkVDVE9SKTsKKwkJaWYgKGt2bV9yZWFkX2NyNF9iaXRzKHZjcHUsIFg4Nl9DUjRfREUpKQogCQkJcmV0dXJuIDE7Ci0JCX0KIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSA2OgogCQkqdmFsID0gdmNwdS0+YXJjaC5kcjY7CiAJCWJyZWFrOwogCWNhc2UgNToKLQkJaWYgKGt2bV9yZWFkX2NyNF9iaXRzKHZjcHUsIFg4Nl9DUjRfREUpKSB7Ci0JCQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIFVEX1ZFQ1RPUik7CisJCWlmIChrdm1fcmVhZF9jcjRfYml0cyh2Y3B1LCBYODZfQ1I0X0RFKSkKIAkJCXJldHVybiAxOwotCQl9CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWRlZmF1bHQ6IC8qIDcgKi8KIAkJKnZhbCA9IHZjcHUtPmFyY2guZHI3OwpAQCAtNjQ4LDEyICs3MDYsMTYgQEAKIAogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2dldF9kcik7CiAKLXN0YXRpYyBpbmxpbmUgdTMyIGJpdChpbnQgYml0bm8pCitpbnQga3ZtX2dldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkciwgdW5zaWduZWQgbG9uZyAqdmFsKQogewotCXJldHVybiAxIDw8IChiaXRubyAmIDMxKTsKKwlpZiAoX2t2bV9nZXRfZHIodmNwdSwgZHIsIHZhbCkpIHsKKwkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBVRF9WRUNUT1IpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChrdm1fZ2V0X2RyKTsKIAogLyoKICAqIExpc3Qgb2YgbXNyIG51bWJlcnMgd2hpY2ggd2UgZXhwb3NlIHRvIHVzZXJzcGFjZSB0aHJvdWdoIEtWTV9HRVRfTVNSUwpAQCAtNjcxLDcgKzczMyw3IEBACiAJSFZfWDY0X01TUl9HVUVTVF9PU19JRCwgSFZfWDY0X01TUl9IWVBFUkNBTEwsCiAJSFZfWDY0X01TUl9BUElDX0FTU0lTVF9QQUdFLAogCU1TUl9JQTMyX1NZU0VOVEVSX0NTLCBNU1JfSUEzMl9TWVNFTlRFUl9FU1AsIE1TUl9JQTMyX1NZU0VOVEVSX0VJUCwKLQlNU1JfSzZfU1RBUiwKKwlNU1JfU1RBUiwKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJTVNSX0NTVEFSLCBNU1JfS0VSTkVMX0dTX0JBU0UsIE1TUl9TWVNDQUxMX01BU0ssIE1TUl9MU1RBUiwKICNlbmRpZgpAQCAtNjgyLDEwICs3NDQsMTQgQEAKIAogc3RhdGljIHUzMiBlbXVsYXRlZF9tc3JzW10gPSB7CiAJTVNSX0lBMzJfTUlTQ19FTkFCTEUsCisJTVNSX0lBMzJfTUNHX1NUQVRVUywKKwlNU1JfSUEzMl9NQ0dfQ1RMLAogfTsKIAogc3RhdGljIGludCBzZXRfZWZlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBlZmVyKQogeworCXU2NCBvbGRfZWZlciA9IHZjcHUtPmFyY2guZWZlcjsKKwogCWlmIChlZmVyICYgZWZlcl9yZXNlcnZlZF9iaXRzKQogCQlyZXR1cm4gMTsKIApAQCAtNzE0LDExICs3ODAsMTMgQEAKIAogCWt2bV94ODZfb3BzLT5zZXRfZWZlcih2Y3B1LCBlZmVyKTsKIAotCXZjcHUtPmFyY2guZWZlciA9IGVmZXI7Ci0KIAl2Y3B1LT5hcmNoLm1tdS5iYXNlX3JvbGUubnhlID0gKGVmZXIgJiBFRkVSX05YKSAmJiAhdGRwX2VuYWJsZWQ7CiAJa3ZtX21tdV9yZXNldF9jb250ZXh0KHZjcHUpOwogCisJLyogVXBkYXRlIHJlc2VydmVkIGJpdHMgKi8KKwlpZiAoKGVmZXIgXiBvbGRfZWZlcikgJiBFRkVSX05YKQorCQlrdm1fbW11X3Jlc2V0X2NvbnRleHQodmNwdSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtODgyLDcgKzk1MCw3IEBACiAKIAlpZiAoIXZjcHUtPnRpbWVfcGFnZSkKIAkJcmV0dXJuIDA7Ci0Jc2V0X2JpdChLVk1fUkVRX0tWTUNMT0NLX1VQREFURSwgJnYtPnJlcXVlc3RzKTsKKwlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfS1ZNQ0xPQ0tfVVBEQVRFLCB2KTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMTUyNCwxNiArMTU5MiwxMiBAQAogewogCWludCBpLCBpZHg7CiAKLQl2Y3B1X2xvYWQodmNwdSk7Ci0KIAlpZHggPSBzcmN1X3JlYWRfbG9jaygmdmNwdS0+a3ZtLT5zcmN1KTsKIAlmb3IgKGkgPSAwOyBpIDwgbXNycy0+bm1zcnM7ICsraSkKIAkJaWYgKGRvX21zcih2Y3B1LCBlbnRyaWVzW2ldLmluZGV4LCAmZW50cmllc1tpXS5kYXRhKSkKIAkJCWJyZWFrOwogCXNyY3VfcmVhZF91bmxvY2soJnZjcHUtPmt2bS0+c3JjdSwgaWR4KTsKIAotCXZjcHVfcHV0KHZjcHUpOwotCiAJcmV0dXJuIGk7CiB9CiAKQEAgLTE1NjIsNyArMTYyNiw3IEBACiAKIAlyID0gLUVOT01FTTsKIAlzaXplID0gc2l6ZW9mKHN0cnVjdCBrdm1fbXNyX2VudHJ5KSAqIG1zcnMubm1zcnM7Ci0JZW50cmllcyA9IHZtYWxsb2Moc2l6ZSk7CisJZW50cmllcyA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFlbnRyaWVzKQogCQlnb3RvIG91dDsKIApAQCAtMTU4MSw3ICsxNjQ1LDcgQEAKIAlyID0gbjsKIAogb3V0X2ZyZWU6Ci0JdmZyZWUoZW50cmllcyk7CisJa2ZyZWUoZW50cmllcyk7CiBvdXQ6CiAJcmV0dXJuIHI7CiB9CkBAIC0xNjE4LDYgKzE2ODIsNyBAQAogCWNhc2UgS1ZNX0NBUF9QQ0lfU0VHTUVOVDoKIAljYXNlIEtWTV9DQVBfREVCVUdSRUdTOgogCWNhc2UgS1ZNX0NBUF9YODZfUk9CVVNUX1NJTkdMRVNURVA6CisJY2FzZSBLVk1fQ0FQX1hTQVZFOgogCQlyID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fQ0FQX0NPQUxFU0NFRF9NTUlPOgpAQCAtMTY0MSw2ICsxNzA2LDkgQEAKIAljYXNlIEtWTV9DQVBfTUNFOgogCQlyID0gS1ZNX01BWF9NQ0VfQkFOS1M7CiAJCWJyZWFrOworCWNhc2UgS1ZNX0NBUF9YQ1JTOgorCQlyID0gY3B1X2hhc194c2F2ZTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJciA9IDA7CiAJCWJyZWFrOwpAQCAtMTcxNyw4ICsxNzg1LDI4IEBACiAJcmV0dXJuIHI7CiB9CiAKK3N0YXRpYyB2b2lkIHdiaW52ZF9pcGkodm9pZCAqZ2FyYmFnZSkKK3sKKwl3YmludmQoKTsKK30KKworc3RhdGljIGJvb2wgbmVlZF9lbXVsYXRlX3diaW52ZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcmV0dXJuIHZjcHUtPmt2bS0+YXJjaC5pb21tdV9kb21haW4gJiYKKwkJISh2Y3B1LT5rdm0tPmFyY2guaW9tbXVfZmxhZ3MgJiBLVk1fSU9NTVVfQ0FDSEVfQ09IRVJFTkNZKTsKK30KKwogdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQogeworCS8qIEFkZHJlc3MgV0JJTlZEIG1heSBiZSBleGVjdXRlZCBieSBndWVzdCAqLworCWlmIChuZWVkX2VtdWxhdGVfd2JpbnZkKHZjcHUpKSB7CisJCWlmIChrdm1feDg2X29wcy0+aGFzX3diaW52ZF9leGl0KCkpCisJCQljcHVtYXNrX3NldF9jcHUoY3B1LCB2Y3B1LT5hcmNoLndiaW52ZF9kaXJ0eV9tYXNrKTsKKwkJZWxzZSBpZiAodmNwdS0+Y3B1ICE9IC0xICYmIHZjcHUtPmNwdSAhPSBjcHUpCisJCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUodmNwdS0+Y3B1LAorCQkJCQl3YmludmRfaXBpLCBOVUxMLCAxKTsKKwl9CisKIAlrdm1feDg2X29wcy0+dmNwdV9sb2FkKHZjcHUsIGNwdSk7CiAJaWYgKHVubGlrZWx5KHBlcl9jcHUoY3B1X3RzY19raHosIGNwdSkgPT0gMCkpIHsKIAkJdW5zaWduZWQgbG9uZyBraHogPSBjcHVmcmVxX3F1aWNrX2dldChjcHUpOwpAQCAtMTczMSw4ICsxODE5LDggQEAKIAogdm9pZCBrdm1fYXJjaF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Ja3ZtX3B1dF9ndWVzdF9mcHUodmNwdSk7CiAJa3ZtX3g4Nl9vcHMtPnZjcHVfcHV0KHZjcHUpOworCWt2bV9wdXRfZ3Vlc3RfZnB1KHZjcHUpOwogfQogCiBzdGF0aWMgaW50IGlzX2VmZXJfbngodm9pZCkKQEAgLTE3ODEsNyArMTg2OSw2IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKGNwdWlkX2VudHJpZXMsIGVudHJpZXMsCiAJCQkgICBjcHVpZC0+bmVudCAqIHNpemVvZihzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5KSkpCiAJCWdvdG8gb3V0X2ZyZWU7Ci0JdmNwdV9sb2FkKHZjcHUpOwogCWZvciAoaSA9IDA7IGkgPCBjcHVpZC0+bmVudDsgaSsrKSB7CiAJCXZjcHUtPmFyY2guY3B1aWRfZW50cmllc1tpXS5mdW5jdGlvbiA9IGNwdWlkX2VudHJpZXNbaV0uZnVuY3Rpb247CiAJCXZjcHUtPmFyY2guY3B1aWRfZW50cmllc1tpXS5lYXggPSBjcHVpZF9lbnRyaWVzW2ldLmVheDsKQEAgLTE3OTksNyArMTg4Niw3IEBACiAJciA9IDA7CiAJa3ZtX2FwaWNfc2V0X3ZlcnNpb24odmNwdSk7CiAJa3ZtX3g4Nl9vcHMtPmNwdWlkX3VwZGF0ZSh2Y3B1KTsKLQl2Y3B1X3B1dCh2Y3B1KTsKKwl1cGRhdGVfY3B1aWQodmNwdSk7CiAKIG91dF9mcmVlOgogCXZmcmVlKGNwdWlkX2VudHJpZXMpOwpAQCAtMTgyMCwxMSArMTkwNywxMCBAQAogCWlmIChjb3B5X2Zyb21fdXNlcigmdmNwdS0+YXJjaC5jcHVpZF9lbnRyaWVzLCBlbnRyaWVzLAogCQkJICAgY3B1aWQtPm5lbnQgKiBzaXplb2Yoc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIpKSkKIAkJZ290byBvdXQ7Ci0JdmNwdV9sb2FkKHZjcHUpOwogCXZjcHUtPmFyY2guY3B1aWRfbmVudCA9IGNwdWlkLT5uZW50OwogCWt2bV9hcGljX3NldF92ZXJzaW9uKHZjcHUpOwogCWt2bV94ODZfb3BzLT5jcHVpZF91cGRhdGUodmNwdSk7Ci0JdmNwdV9wdXQodmNwdSk7CisJdXBkYXRlX2NwdWlkKHZjcHUpOwogCXJldHVybiAwOwogCiBvdXQ6CkBAIC0xODM3LDcgKzE5MjMsNiBAQAogewogCWludCByOwogCi0JdmNwdV9sb2FkKHZjcHUpOwogCXIgPSAtRTJCSUc7CiAJaWYgKGNwdWlkLT5uZW50IDwgdmNwdS0+YXJjaC5jcHVpZF9uZW50KQogCQlnb3RvIG91dDsKQEAgLTE4NDksNyArMTkzNCw2IEBACiAKIG91dDoKIAljcHVpZC0+bmVudCA9IHZjcHUtPmFyY2guY3B1aWRfbmVudDsKLQl2Y3B1X3B1dCh2Y3B1KTsKIAlyZXR1cm4gcjsKIH0KIApAQCAtMTkwMSwxMyArMTk4NSwxMyBAQAogCQkwIC8qIFJlc2VydmVkICovIHwgZl9sbSB8IEYoM0ROT1dFWFQpIHwgRigzRE5PVyk7CiAJLyogY3B1aWQgMS5lY3ggKi8KIAljb25zdCB1MzIga3ZtX3N1cHBvcnRlZF93b3JkNF94ODZfZmVhdHVyZXMgPQotCQlGKFhNTTMpIHwgMCAvKiBSZXNlcnZlZCwgRFRFUzY0LCBNT05JVE9SICovIHwKKwkJRihYTU0zKSB8IEYoUENMTVVMUURRKSB8IDAgLyogRFRFUzY0LCBNT05JVE9SICovIHwKIAkJMCAvKiBEUy1DUEwsIFZNWCwgU01YLCBFU1QgKi8gfAogCQkwIC8qIFRNMiAqLyB8IEYoU1NTRTMpIHwgMCAvKiBDTlhULUlEICovIHwgMCAvKiBSZXNlcnZlZCAqLyB8CiAJCTAgLyogUmVzZXJ2ZWQgKi8gfCBGKENYMTYpIHwgMCAvKiB4VFBSIFVwZGF0ZSwgUERDTSAqLyB8CiAJCTAgLyogUmVzZXJ2ZWQsIERDQSAqLyB8IEYoWE1NNF8xKSB8CiAJCUYoWE1NNF8yKSB8IEYoWDJBUElDKSB8IEYoTU9WQkUpIHwgRihQT1BDTlQpIHwKLQkJMCAvKiBSZXNlcnZlZCwgWFNBVkUsIE9TWFNBVkUgKi87CisJCTAgLyogUmVzZXJ2ZWQsIEFFUyAqLyB8IEYoWFNBVkUpIHwgMCAvKiBPU1hTQVZFICovIHwgRihBVlgpOwogCS8qIGNwdWlkIDB4ODAwMDAwMDEuZWN4ICovCiAJY29uc3QgdTMyIGt2bV9zdXBwb3J0ZWRfd29yZDZfeDg2X2ZlYXR1cmVzID0KIAkJRihMQUhGX0xNKSB8IEYoQ01QX0xFR0FDWSkgfCBGKFNWTSkgfCAwIC8qIEV4dEFwaWNTcGFjZSAqLyB8CkBAIC0xOTIyLDcgKzIwMDYsNyBAQAogCiAJc3dpdGNoIChmdW5jdGlvbikgewogCWNhc2UgMDoKLQkJZW50cnktPmVheCA9IG1pbihlbnRyeS0+ZWF4LCAodTMyKTB4Yik7CisJCWVudHJ5LT5lYXggPSBtaW4oZW50cnktPmVheCwgKHUzMikweGQpOwogCQlicmVhazsKIAljYXNlIDE6CiAJCWVudHJ5LT5lZHggJj0ga3ZtX3N1cHBvcnRlZF93b3JkMF94ODZfZmVhdHVyZXM7CkBAIC0xOTgwLDYgKzIwNjQsMjAgQEAKIAkJfQogCQlicmVhazsKIAl9CisJY2FzZSAweGQ6IHsKKwkJaW50IGk7CisKKwkJZW50cnktPmZsYWdzIHw9IEtWTV9DUFVJRF9GTEFHX1NJR05JRkNBTlRfSU5ERVg7CisJCWZvciAoaSA9IDE7ICpuZW50IDwgbWF4bmVudDsgKytpKSB7CisJCQlpZiAoZW50cnlbaSAtIDFdLmVheCA9PSAwICYmIGkgIT0gMikKKwkJCQlicmVhazsKKwkJCWRvX2NwdWlkXzFfZW50KCZlbnRyeVtpXSwgZnVuY3Rpb24sIGkpOworCQkJZW50cnlbaV0uZmxhZ3MgfD0KKwkJCSAgICAgICBLVk1fQ1BVSURfRkxBR19TSUdOSUZDQU5UX0lOREVYOworCQkJKysqbmVudDsKKwkJfQorCQlicmVhazsKKwl9CiAJY2FzZSBLVk1fQ1BVSURfU0lHTkFUVVJFOiB7CiAJCWNoYXIgc2lnbmF0dXJlWzEyXSA9ICJLVk1LVk1LVk1cMFwwIjsKIAkJdTMyICpzaWdwdHIgPSAodTMyICopc2lnbmF0dXJlOwpAQCAtMjA4MSw5ICsyMTc5LDcgQEAKIHN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfZ2V0X2xhcGljKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkgICAgc3RydWN0IGt2bV9sYXBpY19zdGF0ZSAqcykKIHsKLQl2Y3B1X2xvYWQodmNwdSk7CiAJbWVtY3B5KHMtPnJlZ3MsIHZjcHUtPmFyY2guYXBpYy0+cmVncywgc2l6ZW9mICpzKTsKLQl2Y3B1X3B1dCh2Y3B1KTsKIAogCXJldHVybiAwOwogfQpAQCAtMjA5MSwxMSArMjE4Nyw5IEBACiBzdGF0aWMgaW50IGt2bV92Y3B1X2lvY3RsX3NldF9sYXBpYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJICAgIHN0cnVjdCBrdm1fbGFwaWNfc3RhdGUgKnMpCiB7Ci0JdmNwdV9sb2FkKHZjcHUpOwogCW1lbWNweSh2Y3B1LT5hcmNoLmFwaWMtPnJlZ3MsIHMtPnJlZ3MsIHNpemVvZiAqcyk7CiAJa3ZtX2FwaWNfcG9zdF9zdGF0ZV9yZXN0b3JlKHZjcHUpOwogCXVwZGF0ZV9jcjhfaW50ZXJjZXB0KHZjcHUpOwotCXZjcHVfcHV0KHZjcHUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMTA3LDIwICsyMjAxLDE1IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChpcnFjaGlwX2luX2tlcm5lbCh2Y3B1LT5rdm0pKQogCQlyZXR1cm4gLUVOWElPOwotCXZjcHVfbG9hZCh2Y3B1KTsKIAogCWt2bV9xdWV1ZV9pbnRlcnJ1cHQodmNwdSwgaXJxLT5pcnEsIGZhbHNlKTsKIAotCXZjcHVfcHV0KHZjcHUpOwotCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQl2Y3B1X2xvYWQodmNwdSk7CiAJa3ZtX2luamVjdF9ubWkodmNwdSk7Ci0JdmNwdV9wdXQodmNwdSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIxNDAsNyArMjIyOSw2IEBACiAJaW50IHI7CiAJdW5zaWduZWQgYmFua19udW0gPSBtY2dfY2FwICYgMHhmZiwgYmFuazsKIAotCXZjcHVfbG9hZCh2Y3B1KTsKIAlyID0gLUVJTlZBTDsKIAlpZiAoIWJhbmtfbnVtIHx8IGJhbmtfbnVtID49IEtWTV9NQVhfTUNFX0JBTktTKQogCQlnb3RvIG91dDsKQEAgLTIxNTUsNyArMjI0Myw2IEBACiAJZm9yIChiYW5rID0gMDsgYmFuayA8IGJhbmtfbnVtOyBiYW5rKyspCiAJCXZjcHUtPmFyY2gubWNlX2JhbmtzW2JhbmsqNF0gPSB+KHU2NCkwOwogb3V0OgotCXZjcHVfcHV0KHZjcHUpOwogCXJldHVybiByOwogfQogCkBAIC0yMTg4LDcgKzIyNzUsNyBAQAogCQkJcHJpbnRrKEtFUk5fREVCVUcgImt2bTogc2V0X21jZTogIgogCQkJICAgICAgICJpbmplY3RzIG1jZSBleGNlcHRpb24gd2hpbGUgIgogCQkJICAgICAgICJwcmV2aW91cyBvbmUgaXMgaW4gcHJvZ3Jlc3MhXG4iKTsKLQkJCXNldF9iaXQoS1ZNX1JFUV9UUklQTEVfRkFVTFQsICZ2Y3B1LT5yZXF1ZXN0cyk7CisJCQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVFJJUExFX0ZBVUxULCB2Y3B1KTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWlmIChiYW5rc1sxXSAmIE1DSV9TVEFUVVNfVkFMKQpAQCAtMjIxMyw4ICsyMzAwLDYgQEAKIHN0YXRpYyB2b2lkIGt2bV92Y3B1X2lvY3RsX3g4Nl9nZXRfdmNwdV9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCQkgICAgICAgc3RydWN0IGt2bV92Y3B1X2V2ZW50cyAqZXZlbnRzKQogewotCXZjcHVfbG9hZCh2Y3B1KTsKLQogCWV2ZW50cy0+ZXhjZXB0aW9uLmluamVjdGVkID0KIAkJdmNwdS0+YXJjaC5leGNlcHRpb24ucGVuZGluZyAmJgogCQkha3ZtX2V4Y2VwdGlvbl9pc19zb2Z0KHZjcHUtPmFyY2guZXhjZXB0aW9uLm5yKTsKQEAgLTIyMzksOCArMjMyNCw2IEBACiAJZXZlbnRzLT5mbGFncyA9IChLVk1fVkNQVUVWRU5UX1ZBTElEX05NSV9QRU5ESU5HCiAJCQkgfCBLVk1fVkNQVUVWRU5UX1ZBTElEX1NJUElfVkVDVE9SCiAJCQkgfCBLVk1fVkNQVUVWRU5UX1ZBTElEX1NIQURPVyk7Ci0KLQl2Y3B1X3B1dCh2Y3B1KTsKIH0KIAogc3RhdGljIGludCBrdm1fdmNwdV9pb2N0bF94ODZfc2V0X3ZjcHVfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKQEAgLTIyNTEsOCArMjMzNCw2IEBACiAJCQkgICAgICB8IEtWTV9WQ1BVRVZFTlRfVkFMSURfU0hBRE9XKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl2Y3B1X2xvYWQodmNwdSk7Ci0KIAl2Y3B1LT5hcmNoLmV4Y2VwdGlvbi5wZW5kaW5nID0gZXZlbnRzLT5leGNlcHRpb24uaW5qZWN0ZWQ7CiAJdmNwdS0+YXJjaC5leGNlcHRpb24ubnIgPSBldmVudHMtPmV4Y2VwdGlvbi5ucjsKIAl2Y3B1LT5hcmNoLmV4Y2VwdGlvbi5oYXNfZXJyb3JfY29kZSA9IGV2ZW50cy0+ZXhjZXB0aW9uLmhhc19lcnJvcl9jb2RlOwpAQCAtMjI3NSwyMiArMjM1NiwxNiBAQAogCWlmIChldmVudHMtPmZsYWdzICYgS1ZNX1ZDUFVFVkVOVF9WQUxJRF9TSVBJX1ZFQ1RPUikKIAkJdmNwdS0+YXJjaC5zaXBpX3ZlY3RvciA9IGV2ZW50cy0+c2lwaV92ZWN0b3I7CiAKLQl2Y3B1X3B1dCh2Y3B1KTsKLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBrdm1fdmNwdV9pb2N0bF94ODZfZ2V0X2RlYnVncmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJCSAgICAgc3RydWN0IGt2bV9kZWJ1Z3JlZ3MgKmRiZ3JlZ3MpCiB7Ci0JdmNwdV9sb2FkKHZjcHUpOwotCiAJbWVtY3B5KGRiZ3JlZ3MtPmRiLCB2Y3B1LT5hcmNoLmRiLCBzaXplb2YodmNwdS0+YXJjaC5kYikpOwogCWRiZ3JlZ3MtPmRyNiA9IHZjcHUtPmFyY2guZHI2OwogCWRiZ3JlZ3MtPmRyNyA9IHZjcHUtPmFyY2guZHI3OwogCWRiZ3JlZ3MtPmZsYWdzID0gMDsKLQotCXZjcHVfcHV0KHZjcHUpOwogfQogCiBzdGF0aWMgaW50IGt2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfZGVidWdyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKQEAgLTIyOTksNDAgKzIzNzQsMTEzIEBACiAJaWYgKGRiZ3JlZ3MtPmZsYWdzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXZjcHVfbG9hZCh2Y3B1KTsKLQogCW1lbWNweSh2Y3B1LT5hcmNoLmRiLCBkYmdyZWdzLT5kYiwgc2l6ZW9mKHZjcHUtPmFyY2guZGIpKTsKIAl2Y3B1LT5hcmNoLmRyNiA9IGRiZ3JlZ3MtPmRyNjsKIAl2Y3B1LT5hcmNoLmRyNyA9IGRiZ3JlZ3MtPmRyNzsKIAotCXZjcHVfcHV0KHZjcHUpOwotCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGt2bV92Y3B1X2lvY3RsX3g4Nl9nZXRfeHNhdmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCQkgc3RydWN0IGt2bV94c2F2ZSAqZ3Vlc3RfeHNhdmUpCit7CisJaWYgKGNwdV9oYXNfeHNhdmUpCisJCW1lbWNweShndWVzdF94c2F2ZS0+cmVnaW9uLAorCQkJJnZjcHUtPmFyY2guZ3Vlc3RfZnB1LnN0YXRlLT54c2F2ZSwKKwkJCXNpemVvZihzdHJ1Y3QgeHNhdmVfc3RydWN0KSk7CisJZWxzZSB7CisJCW1lbWNweShndWVzdF94c2F2ZS0+cmVnaW9uLAorCQkJJnZjcHUtPmFyY2guZ3Vlc3RfZnB1LnN0YXRlLT5meHNhdmUsCisJCQlzaXplb2Yoc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCkpOworCQkqKHU2NCAqKSZndWVzdF94c2F2ZS0+cmVnaW9uW1hTQVZFX0hEUl9PRkZTRVQgLyBzaXplb2YodTMyKV0gPQorCQkJWFNUQVRFX0ZQU1NFOworCX0KK30KKworc3RhdGljIGludCBrdm1fdmNwdV9pb2N0bF94ODZfc2V0X3hzYXZlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkJc3RydWN0IGt2bV94c2F2ZSAqZ3Vlc3RfeHNhdmUpCit7CisJdTY0IHhzdGF0ZV9idiA9CisJCSoodTY0ICopJmd1ZXN0X3hzYXZlLT5yZWdpb25bWFNBVkVfSERSX09GRlNFVCAvIHNpemVvZih1MzIpXTsKKworCWlmIChjcHVfaGFzX3hzYXZlKQorCQltZW1jcHkoJnZjcHUtPmFyY2guZ3Vlc3RfZnB1LnN0YXRlLT54c2F2ZSwKKwkJCWd1ZXN0X3hzYXZlLT5yZWdpb24sIHNpemVvZihzdHJ1Y3QgeHNhdmVfc3RydWN0KSk7CisJZWxzZSB7CisJCWlmICh4c3RhdGVfYnYgJiB+WFNUQVRFX0ZQU1NFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW1lbWNweSgmdmNwdS0+YXJjaC5ndWVzdF9mcHUuc3RhdGUtPmZ4c2F2ZSwKKwkJCWd1ZXN0X3hzYXZlLT5yZWdpb24sIHNpemVvZihzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0KSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBrdm1fdmNwdV9pb2N0bF94ODZfZ2V0X3hjcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCQlzdHJ1Y3Qga3ZtX3hjcnMgKmd1ZXN0X3hjcnMpCit7CisJaWYgKCFjcHVfaGFzX3hzYXZlKSB7CisJCWd1ZXN0X3hjcnMtPm5yX3hjcnMgPSAwOworCQlyZXR1cm47CisJfQorCisJZ3Vlc3RfeGNycy0+bnJfeGNycyA9IDE7CisJZ3Vlc3RfeGNycy0+ZmxhZ3MgPSAwOworCWd1ZXN0X3hjcnMtPnhjcnNbMF0ueGNyID0gWENSX1hGRUFUVVJFX0VOQUJMRURfTUFTSzsKKwlndWVzdF94Y3JzLT54Y3JzWzBdLnZhbHVlID0gdmNwdS0+YXJjaC54Y3IwOworfQorCitzdGF0aWMgaW50IGt2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfeGNycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJICAgICAgIHN0cnVjdCBrdm1feGNycyAqZ3Vlc3RfeGNycykKK3sKKwlpbnQgaSwgciA9IDA7CisKKwlpZiAoIWNwdV9oYXNfeHNhdmUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGd1ZXN0X3hjcnMtPm5yX3hjcnMgPiBLVk1fTUFYX1hDUlMgfHwgZ3Vlc3RfeGNycy0+ZmxhZ3MpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IGd1ZXN0X3hjcnMtPm5yX3hjcnM7IGkrKykKKwkJLyogT25seSBzdXBwb3J0IFhDUjAgY3VycmVudGx5ICovCisJCWlmIChndWVzdF94Y3JzLT54Y3JzWzBdLnhjciA9PSBYQ1JfWEZFQVRVUkVfRU5BQkxFRF9NQVNLKSB7CisJCQlyID0gX19rdm1fc2V0X3hjcih2Y3B1LCBYQ1JfWEZFQVRVUkVfRU5BQkxFRF9NQVNLLAorCQkJCWd1ZXN0X3hjcnMtPnhjcnNbMF0udmFsdWUpOworCQkJYnJlYWs7CisJCX0KKwlpZiAocikKKwkJciA9IC1FSU5WQUw7CisJcmV0dXJuIHI7Cit9CisKIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJCSB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlpbnQgcjsKLQlzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlICpsYXBpYyA9IE5VTEw7CisJdW5pb24geworCQlzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlICpsYXBpYzsKKwkJc3RydWN0IGt2bV94c2F2ZSAqeHNhdmU7CisJCXN0cnVjdCBrdm1feGNycyAqeGNyczsKKwkJdm9pZCAqYnVmZmVyOworCX0gdTsKIAorCXUuYnVmZmVyID0gTlVMTDsKIAlzd2l0Y2ggKGlvY3RsKSB7CiAJY2FzZSBLVk1fR0VUX0xBUElDOiB7CiAJCXIgPSAtRUlOVkFMOwogCQlpZiAoIXZjcHUtPmFyY2guYXBpYykKIAkJCWdvdG8gb3V0OwotCQlsYXBpYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1fbGFwaWNfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwkJdS5sYXBpYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1fbGFwaWNfc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAogCQlyID0gLUVOT01FTTsKLQkJaWYgKCFsYXBpYykKKwkJaWYgKCF1LmxhcGljKQogCQkJZ290byBvdXQ7Ci0JCXIgPSBrdm1fdmNwdV9pb2N0bF9nZXRfbGFwaWModmNwdSwgbGFwaWMpOworCQlyID0ga3ZtX3ZjcHVfaW9jdGxfZ2V0X2xhcGljKHZjcHUsIHUubGFwaWMpOwogCQlpZiAocikKIAkJCWdvdG8gb3V0OwogCQlyID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCBsYXBpYywgc2l6ZW9mKHN0cnVjdCBrdm1fbGFwaWNfc3RhdGUpKSkKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCB1LmxhcGljLCBzaXplb2Yoc3RydWN0IGt2bV9sYXBpY19zdGF0ZSkpKQogCQkJZ290byBvdXQ7CiAJCXIgPSAwOwogCQlicmVhazsKQEAgLTIzNDEsMTQgKzI0ODksMTQgQEAKIAkJciA9IC1FSU5WQUw7CiAJCWlmICghdmNwdS0+YXJjaC5hcGljKQogCQkJZ290byBvdXQ7Ci0JCWxhcGljID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGt2bV9sYXBpY19zdGF0ZSksIEdGUF9LRVJORUwpOworCQl1LmxhcGljID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGt2bV9sYXBpY19zdGF0ZSksIEdGUF9LRVJORUwpOwogCQlyID0gLUVOT01FTTsKLQkJaWYgKCFsYXBpYykKKwkJaWYgKCF1LmxhcGljKQogCQkJZ290byBvdXQ7CiAJCXIgPSAtRUZBVUxUOwotCQlpZiAoY29weV9mcm9tX3VzZXIobGFwaWMsIGFyZ3AsIHNpemVvZihzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlKSkpCisJCWlmIChjb3B5X2Zyb21fdXNlcih1LmxhcGljLCBhcmdwLCBzaXplb2Yoc3RydWN0IGt2bV9sYXBpY19zdGF0ZSkpKQogCQkJZ290byBvdXQ7Ci0JCXIgPSBrdm1fdmNwdV9pb2N0bF9zZXRfbGFwaWModmNwdSwgbGFwaWMpOworCQlyID0ga3ZtX3ZjcHVfaW9jdGxfc2V0X2xhcGljKHZjcHUsIHUubGFwaWMpOwogCQlpZiAocikKIAkJCWdvdG8gb3V0OwogCQlyID0gMDsKQEAgLTI0NjQsOSArMjYxMiw3IEBACiAJCXIgPSAtRUZBVUxUOwogCQlpZiAoY29weV9mcm9tX3VzZXIoJm1jZSwgYXJncCwgc2l6ZW9mIG1jZSkpCiAJCQlnb3RvIG91dDsKLQkJdmNwdV9sb2FkKHZjcHUpOwogCQlyID0ga3ZtX3ZjcHVfaW9jdGxfeDg2X3NldF9tY2UodmNwdSwgJm1jZSk7Ci0JCXZjcHVfcHV0KHZjcHUpOwogCQlicmVhazsKIAl9CiAJY2FzZSBLVk1fR0VUX1ZDUFVfRVZFTlRTOiB7CkBAIC0yNTEzLDExICsyNjU5LDY3IEBACiAJCXIgPSBrdm1fdmNwdV9pb2N0bF94ODZfc2V0X2RlYnVncmVncyh2Y3B1LCAmZGJncmVncyk7CiAJCWJyZWFrOwogCX0KKwljYXNlIEtWTV9HRVRfWFNBVkU6IHsKKwkJdS54c2F2ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1feHNhdmUpLCBHRlBfS0VSTkVMKTsKKwkJciA9IC1FTk9NRU07CisJCWlmICghdS54c2F2ZSkKKwkJCWJyZWFrOworCisJCWt2bV92Y3B1X2lvY3RsX3g4Nl9nZXRfeHNhdmUodmNwdSwgdS54c2F2ZSk7CisKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgdS54c2F2ZSwgc2l6ZW9mKHN0cnVjdCBrdm1feHNhdmUpKSkKKwkJCWJyZWFrOworCQlyID0gMDsKKwkJYnJlYWs7CisJfQorCWNhc2UgS1ZNX1NFVF9YU0FWRTogeworCQl1LnhzYXZlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGt2bV94c2F2ZSksIEdGUF9LRVJORUwpOworCQlyID0gLUVOT01FTTsKKwkJaWYgKCF1LnhzYXZlKQorCQkJYnJlYWs7CisKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcih1LnhzYXZlLCBhcmdwLCBzaXplb2Yoc3RydWN0IGt2bV94c2F2ZSkpKQorCQkJYnJlYWs7CisKKwkJciA9IGt2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfeHNhdmUodmNwdSwgdS54c2F2ZSk7CisJCWJyZWFrOworCX0KKwljYXNlIEtWTV9HRVRfWENSUzogeworCQl1LnhjcnMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX3hjcnMpLCBHRlBfS0VSTkVMKTsKKwkJciA9IC1FTk9NRU07CisJCWlmICghdS54Y3JzKQorCQkJYnJlYWs7CisKKwkJa3ZtX3ZjcHVfaW9jdGxfeDg2X2dldF94Y3JzKHZjcHUsIHUueGNycyk7CisKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgdS54Y3JzLAorCQkJCSBzaXplb2Yoc3RydWN0IGt2bV94Y3JzKSkpCisJCQlicmVhazsKKwkJciA9IDA7CisJCWJyZWFrOworCX0KKwljYXNlIEtWTV9TRVRfWENSUzogeworCQl1LnhjcnMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX3hjcnMpLCBHRlBfS0VSTkVMKTsKKwkJciA9IC1FTk9NRU07CisJCWlmICghdS54Y3JzKQorCQkJYnJlYWs7CisKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcih1LnhjcnMsIGFyZ3AsCisJCQkJICAgc2l6ZW9mKHN0cnVjdCBrdm1feGNycykpKQorCQkJYnJlYWs7CisKKwkJciA9IGt2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfeGNycyh2Y3B1LCB1LnhjcnMpOworCQlicmVhazsKKwl9CiAJZGVmYXVsdDoKIAkJciA9IC1FSU5WQUw7CiAJfQogb3V0OgotCWtmcmVlKGxhcGljKTsKKwlrZnJlZSh1LmJ1ZmZlcik7CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTI1NjAsMTE1ICsyNzYyLDYgQEAKIAlyZXR1cm4ga3ZtLT5hcmNoLm5fYWxsb2NfbW11X3BhZ2VzOwogfQogCi1nZm5fdCB1bmFsaWFzX2dmbl9pbnN0YW50aWF0aW9uKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQotewotCWludCBpOwotCXN0cnVjdCBrdm1fbWVtX2FsaWFzICphbGlhczsKLQlzdHJ1Y3Qga3ZtX21lbV9hbGlhc2VzICphbGlhc2VzOwotCi0JYWxpYXNlcyA9IGt2bV9hbGlhc2VzKGt2bSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgYWxpYXNlcy0+bmFsaWFzZXM7ICsraSkgewotCQlhbGlhcyA9ICZhbGlhc2VzLT5hbGlhc2VzW2ldOwotCQlpZiAoYWxpYXMtPmZsYWdzICYgS1ZNX0FMSUFTX0lOVkFMSUQpCi0JCQljb250aW51ZTsKLQkJaWYgKGdmbiA+PSBhbGlhcy0+YmFzZV9nZm4KLQkJICAgICYmIGdmbiA8IGFsaWFzLT5iYXNlX2dmbiArIGFsaWFzLT5ucGFnZXMpCi0JCQlyZXR1cm4gYWxpYXMtPnRhcmdldF9nZm4gKyBnZm4gLSBhbGlhcy0+YmFzZV9nZm47Ci0JfQotCXJldHVybiBnZm47Ci19Ci0KLWdmbl90IHVuYWxpYXNfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQotewotCWludCBpOwotCXN0cnVjdCBrdm1fbWVtX2FsaWFzICphbGlhczsKLQlzdHJ1Y3Qga3ZtX21lbV9hbGlhc2VzICphbGlhc2VzOwotCi0JYWxpYXNlcyA9IGt2bV9hbGlhc2VzKGt2bSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgYWxpYXNlcy0+bmFsaWFzZXM7ICsraSkgewotCQlhbGlhcyA9ICZhbGlhc2VzLT5hbGlhc2VzW2ldOwotCQlpZiAoZ2ZuID49IGFsaWFzLT5iYXNlX2dmbgotCQkgICAgJiYgZ2ZuIDwgYWxpYXMtPmJhc2VfZ2ZuICsgYWxpYXMtPm5wYWdlcykKLQkJCXJldHVybiBhbGlhcy0+dGFyZ2V0X2dmbiArIGdmbiAtIGFsaWFzLT5iYXNlX2dmbjsKLQl9Ci0JcmV0dXJuIGdmbjsKLX0KLQotLyoKLSAqIFNldCBhIG5ldyBhbGlhcyByZWdpb24uICBBbGlhc2VzIG1hcCBhIHBvcnRpb24gb2YgcGh5c2ljYWwgbWVtb3J5IGludG8KLSAqIGFub3RoZXIgcG9ydGlvbi4gIFRoaXMgaXMgdXNlZnVsIGZvciBtZW1vcnkgd2luZG93cywgZm9yIGV4YW1wbGUgdGhlIFBDCi0gKiBWR0EgcmVnaW9uLgotICovCi1zdGF0aWMgaW50IGt2bV92bV9pb2N0bF9zZXRfbWVtb3J5X2FsaWFzKHN0cnVjdCBrdm0gKmt2bSwKLQkJCQkJIHN0cnVjdCBrdm1fbWVtb3J5X2FsaWFzICphbGlhcykKLXsKLQlpbnQgciwgbjsKLQlzdHJ1Y3Qga3ZtX21lbV9hbGlhcyAqcDsKLQlzdHJ1Y3Qga3ZtX21lbV9hbGlhc2VzICphbGlhc2VzLCAqb2xkX2FsaWFzZXM7Ci0KLQlyID0gLUVJTlZBTDsKLQkvKiBHZW5lcmFsIHNhbml0eSBjaGVja3MgKi8KLQlpZiAoYWxpYXMtPm1lbW9yeV9zaXplICYgKFBBR0VfU0laRSAtIDEpKQotCQlnb3RvIG91dDsKLQlpZiAoYWxpYXMtPmd1ZXN0X3BoeXNfYWRkciAmIChQQUdFX1NJWkUgLSAxKSkKLQkJZ290byBvdXQ7Ci0JaWYgKGFsaWFzLT5zbG90ID49IEtWTV9BTElBU19TTE9UUykKLQkJZ290byBvdXQ7Ci0JaWYgKGFsaWFzLT5ndWVzdF9waHlzX2FkZHIgKyBhbGlhcy0+bWVtb3J5X3NpemUKLQkgICAgPCBhbGlhcy0+Z3Vlc3RfcGh5c19hZGRyKQotCQlnb3RvIG91dDsKLQlpZiAoYWxpYXMtPnRhcmdldF9waHlzX2FkZHIgKyBhbGlhcy0+bWVtb3J5X3NpemUKLQkgICAgPCBhbGlhcy0+dGFyZ2V0X3BoeXNfYWRkcikKLQkJZ290byBvdXQ7Ci0KLQlyID0gLUVOT01FTTsKLQlhbGlhc2VzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGt2bV9tZW1fYWxpYXNlcyksIEdGUF9LRVJORUwpOwotCWlmICghYWxpYXNlcykKLQkJZ290byBvdXQ7Ci0KLQltdXRleF9sb2NrKCZrdm0tPnNsb3RzX2xvY2spOwotCi0JLyogaW52YWxpZGF0ZSBhbnkgZ2ZuIHJlZmVyZW5jZSBpbiBjYXNlIG9mIGRlbGV0aW9uL3Nocmlua2luZyAqLwotCW1lbWNweShhbGlhc2VzLCBrdm0tPmFyY2guYWxpYXNlcywgc2l6ZW9mKHN0cnVjdCBrdm1fbWVtX2FsaWFzZXMpKTsKLQlhbGlhc2VzLT5hbGlhc2VzW2FsaWFzLT5zbG90XS5mbGFncyB8PSBLVk1fQUxJQVNfSU5WQUxJRDsKLQlvbGRfYWxpYXNlcyA9IGt2bS0+YXJjaC5hbGlhc2VzOwotCXJjdV9hc3NpZ25fcG9pbnRlcihrdm0tPmFyY2guYWxpYXNlcywgYWxpYXNlcyk7Ci0Jc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoJmt2bS0+c3JjdSk7Ci0Ja3ZtX21tdV96YXBfYWxsKGt2bSk7Ci0Ja2ZyZWUob2xkX2FsaWFzZXMpOwotCi0JciA9IC1FTk9NRU07Ci0JYWxpYXNlcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1fbWVtX2FsaWFzZXMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFsaWFzZXMpCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCW1lbWNweShhbGlhc2VzLCBrdm0tPmFyY2guYWxpYXNlcywgc2l6ZW9mKHN0cnVjdCBrdm1fbWVtX2FsaWFzZXMpKTsKLQotCXAgPSAmYWxpYXNlcy0+YWxpYXNlc1thbGlhcy0+c2xvdF07Ci0JcC0+YmFzZV9nZm4gPSBhbGlhcy0+Z3Vlc3RfcGh5c19hZGRyID4+IFBBR0VfU0hJRlQ7Ci0JcC0+bnBhZ2VzID0gYWxpYXMtPm1lbW9yeV9zaXplID4+IFBBR0VfU0hJRlQ7Ci0JcC0+dGFyZ2V0X2dmbiA9IGFsaWFzLT50YXJnZXRfcGh5c19hZGRyID4+IFBBR0VfU0hJRlQ7Ci0JcC0+ZmxhZ3MgJj0gfihLVk1fQUxJQVNfSU5WQUxJRCk7Ci0KLQlmb3IgKG4gPSBLVk1fQUxJQVNfU0xPVFM7IG4gPiAwOyAtLW4pCi0JCWlmIChhbGlhc2VzLT5hbGlhc2VzW24gLSAxXS5ucGFnZXMpCi0JCQlicmVhazsKLQlhbGlhc2VzLT5uYWxpYXNlcyA9IG47Ci0KLQlvbGRfYWxpYXNlcyA9IGt2bS0+YXJjaC5hbGlhc2VzOwotCXJjdV9hc3NpZ25fcG9pbnRlcihrdm0tPmFyY2guYWxpYXNlcywgYWxpYXNlcyk7Ci0Jc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoJmt2bS0+c3JjdSk7Ci0Ja2ZyZWUob2xkX2FsaWFzZXMpOwotCXIgPSAwOwotCi1vdXRfdW5sb2NrOgotCW11dGV4X3VubG9jaygma3ZtLT5zbG90c19sb2NrKTsKLW91dDoKLQlyZXR1cm4gcjsKLX0KLQogc3RhdGljIGludCBrdm1fdm1faW9jdGxfZ2V0X2lycWNoaXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lycWNoaXAgKmNoaXApCiB7CiAJaW50IHI7CkBAIC0yNzk3LDcgKzI4OTAsNiBAQAogCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7CiAJdW5zaWduZWQgbG9uZyBuOwogCXVuc2lnbmVkIGxvbmcgaXNfZGlydHkgPSAwOwotCXVuc2lnbmVkIGxvbmcgKmRpcnR5X2JpdG1hcCA9IE5VTEw7CiAKIAltdXRleF9sb2NrKCZrdm0tPnNsb3RzX2xvY2spOwogCkBAIC0yODEyLDI3ICsyOTA0LDMwIEBACiAKIAluID0ga3ZtX2RpcnR5X2JpdG1hcF9ieXRlcyhtZW1zbG90KTsKIAotCXIgPSAtRU5PTUVNOwotCWRpcnR5X2JpdG1hcCA9IHZtYWxsb2Mobik7Ci0JaWYgKCFkaXJ0eV9iaXRtYXApCi0JCWdvdG8gb3V0OwotCW1lbXNldChkaXJ0eV9iaXRtYXAsIDAsIG4pOwotCiAJZm9yIChpID0gMDsgIWlzX2RpcnR5ICYmIGkgPCBuL3NpemVvZihsb25nKTsgaSsrKQogCQlpc19kaXJ0eSA9IG1lbXNsb3QtPmRpcnR5X2JpdG1hcFtpXTsKIAogCS8qIElmIG5vdGhpbmcgaXMgZGlydHksIGRvbid0IGJvdGhlciBtZXNzaW5nIHdpdGggcGFnZSB0YWJsZXMuICovCiAJaWYgKGlzX2RpcnR5KSB7CiAJCXN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzLCAqb2xkX3Nsb3RzOworCQl1bnNpZ25lZCBsb25nICpkaXJ0eV9iaXRtYXA7CiAKIAkJc3Bpbl9sb2NrKCZrdm0tPm1tdV9sb2NrKTsKIAkJa3ZtX21tdV9zbG90X3JlbW92ZV93cml0ZV9hY2Nlc3Moa3ZtLCBsb2ctPnNsb3QpOwogCQlzcGluX3VubG9jaygma3ZtLT5tbXVfbG9jayk7CiAKLQkJc2xvdHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX21lbXNsb3RzKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghc2xvdHMpCi0JCQlnb3RvIG91dF9mcmVlOworCQlyID0gLUVOT01FTTsKKwkJZGlydHlfYml0bWFwID0gdm1hbGxvYyhuKTsKKwkJaWYgKCFkaXJ0eV9iaXRtYXApCisJCQlnb3RvIG91dDsKKwkJbWVtc2V0KGRpcnR5X2JpdG1hcCwgMCwgbik7CiAKKwkJciA9IC1FTk9NRU07CisJCXNsb3RzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGt2bV9tZW1zbG90cyksIEdGUF9LRVJORUwpOworCQlpZiAoIXNsb3RzKSB7CisJCQl2ZnJlZShkaXJ0eV9iaXRtYXApOworCQkJZ290byBvdXQ7CisJCX0KIAkJbWVtY3B5KHNsb3RzLCBrdm0tPm1lbXNsb3RzLCBzaXplb2Yoc3RydWN0IGt2bV9tZW1zbG90cykpOwogCQlzbG90cy0+bWVtc2xvdHNbbG9nLT5zbG90XS5kaXJ0eV9iaXRtYXAgPSBkaXJ0eV9iaXRtYXA7CiAKQEAgLTI4NDEsMTMgKzI5MzYsMjAgQEAKIAkJc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoJmt2bS0+c3JjdSk7CiAJCWRpcnR5X2JpdG1hcCA9IG9sZF9zbG90cy0+bWVtc2xvdHNbbG9nLT5zbG90XS5kaXJ0eV9iaXRtYXA7CiAJCWtmcmVlKG9sZF9zbG90cyk7CisKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X3RvX3VzZXIobG9nLT5kaXJ0eV9iaXRtYXAsIGRpcnR5X2JpdG1hcCwgbikpIHsKKwkJCXZmcmVlKGRpcnR5X2JpdG1hcCk7CisJCQlnb3RvIG91dDsKKwkJfQorCQl2ZnJlZShkaXJ0eV9iaXRtYXApOworCX0gZWxzZSB7CisJCXIgPSAtRUZBVUxUOworCQlpZiAoY2xlYXJfdXNlcihsb2ctPmRpcnR5X2JpdG1hcCwgbikpCisJCQlnb3RvIG91dDsKIAl9CiAKIAlyID0gMDsKLQlpZiAoY29weV90b191c2VyKGxvZy0+ZGlydHlfYml0bWFwLCBkaXJ0eV9iaXRtYXAsIG4pKQotCQlyID0gLUVGQVVMVDsKLW91dF9mcmVlOgotCXZmcmVlKGRpcnR5X2JpdG1hcCk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZrdm0tPnNsb3RzX2xvY2spOwogCXJldHVybiByOwpAQCAtMjg2Nyw3ICsyOTY5LDYgQEAKIAl1bmlvbiB7CiAJCXN0cnVjdCBrdm1fcGl0X3N0YXRlIHBzOwogCQlzdHJ1Y3Qga3ZtX3BpdF9zdGF0ZTIgcHMyOwotCQlzdHJ1Y3Qga3ZtX21lbW9yeV9hbGlhcyBhbGlhczsKIAkJc3RydWN0IGt2bV9waXRfY29uZmlnIHBpdF9jb25maWc7CiAJfSB1OwogCkBAIC0yODg4LDIyICsyOTg5LDYgQEAKIAkJCWdvdG8gb3V0OwogCQlicmVhazsKIAl9Ci0JY2FzZSBLVk1fU0VUX01FTU9SWV9SRUdJT046IHsKLQkJc3RydWN0IGt2bV9tZW1vcnlfcmVnaW9uIGt2bV9tZW07Ci0JCXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24ga3ZtX3VzZXJzcGFjZV9tZW07Ci0KLQkJciA9IC1FRkFVTFQ7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigma3ZtX21lbSwgYXJncCwgc2l6ZW9mIGt2bV9tZW0pKQotCQkJZ290byBvdXQ7Ci0JCWt2bV91c2Vyc3BhY2VfbWVtLnNsb3QgPSBrdm1fbWVtLnNsb3Q7Ci0JCWt2bV91c2Vyc3BhY2VfbWVtLmZsYWdzID0ga3ZtX21lbS5mbGFnczsKLQkJa3ZtX3VzZXJzcGFjZV9tZW0uZ3Vlc3RfcGh5c19hZGRyID0ga3ZtX21lbS5ndWVzdF9waHlzX2FkZHI7Ci0JCWt2bV91c2Vyc3BhY2VfbWVtLm1lbW9yeV9zaXplID0ga3ZtX21lbS5tZW1vcnlfc2l6ZTsKLQkJciA9IGt2bV92bV9pb2N0bF9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sICZrdm1fdXNlcnNwYWNlX21lbSwgMCk7Ci0JCWlmIChyKQotCQkJZ290byBvdXQ7Ci0JCWJyZWFrOwotCX0KIAljYXNlIEtWTV9TRVRfTlJfTU1VX1BBR0VTOgogCQlyID0ga3ZtX3ZtX2lvY3RsX3NldF9ucl9tbXVfcGFnZXMoa3ZtLCBhcmcpOwogCQlpZiAocikKQEAgLTI5MTIsMTQgKzI5OTcsNiBAQAogCWNhc2UgS1ZNX0dFVF9OUl9NTVVfUEFHRVM6CiAJCXIgPSBrdm1fdm1faW9jdGxfZ2V0X25yX21tdV9wYWdlcyhrdm0pOwogCQlicmVhazsKLQljYXNlIEtWTV9TRVRfTUVNT1JZX0FMSUFTOgotCQlyID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ1LmFsaWFzLCBhcmdwLCBzaXplb2Yoc3RydWN0IGt2bV9tZW1vcnlfYWxpYXMpKSkKLQkJCWdvdG8gb3V0OwotCQlyID0ga3ZtX3ZtX2lvY3RsX3NldF9tZW1vcnlfYWxpYXMoa3ZtLCAmdS5hbGlhcyk7Ci0JCWlmIChyKQotCQkJZ290byBvdXQ7Ci0JCWJyZWFrOwogCWNhc2UgS1ZNX0NSRUFURV9JUlFDSElQOiB7CiAJCXN0cnVjdCBrdm1fcGljICp2cGljOwogCkBAIC0zMjU5LDcgKzMzMzYsNyBAQAogCQl9CiAJCXJldCA9IGt2bV9yZWFkX2d1ZXN0KHZjcHUtPmt2bSwgZ3BhLCBkYXRhLCB0b3JlYWQpOwogCQlpZiAocmV0IDwgMCkgewotCQkJciA9IFg4NkVNVUxfVU5IQU5ETEVBQkxFOworCQkJciA9IFg4NkVNVUxfSU9fTkVFREVEOwogCQkJZ290byBvdXQ7CiAJCX0KIApAQCAtMzMxNSw3ICszMzkyLDcgQEAKIAkJfQogCQlyZXQgPSBrdm1fd3JpdGVfZ3Vlc3QodmNwdS0+a3ZtLCBncGEsIGRhdGEsIHRvd3JpdGUpOwogCQlpZiAocmV0IDwgMCkgewotCQkJciA9IFg4NkVNVUxfVU5IQU5ETEVBQkxFOworCQkJciA9IFg4NkVNVUxfSU9fTkVFREVEOwogCQkJZ290byBvdXQ7CiAJCX0KIApAQCAtMzMzMCwxMCArMzQwNywxMCBAQAogc3RhdGljIGludCBlbXVsYXRvcl9yZWFkX2VtdWxhdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkgIHZvaWQgKnZhbCwKIAkJCQkgIHVuc2lnbmVkIGludCBieXRlcywKKwkJCQkgIHVuc2lnbmVkIGludCAqZXJyb3JfY29kZSwKIAkJCQkgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlncGFfdCAgICAgICAgICAgICAgICAgZ3BhOwotCXUzMiBlcnJvcl9jb2RlOwogCiAJaWYgKHZjcHUtPm1taW9fcmVhZF9jb21wbGV0ZWQpIHsKIAkJbWVtY3B5KHZhbCwgdmNwdS0+bW1pb19kYXRhLCBieXRlcyk7CkBAIC0zMzQzLDEyICszNDIwLDEwIEBACiAJCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOwogCX0KIAotCWdwYSA9IGt2bV9tbXVfZ3ZhX3RvX2dwYV9yZWFkKHZjcHUsIGFkZHIsICZlcnJvcl9jb2RlKTsKKwlncGEgPSBrdm1fbW11X2d2YV90b19ncGFfcmVhZCh2Y3B1LCBhZGRyLCBlcnJvcl9jb2RlKTsKIAotCWlmIChncGEgPT0gVU5NQVBQRURfR1ZBKSB7Ci0JCWt2bV9pbmplY3RfcGFnZV9mYXVsdCh2Y3B1LCBhZGRyLCBlcnJvcl9jb2RlKTsKKwlpZiAoZ3BhID09IFVOTUFQUEVEX0dWQSkKIAkJcmV0dXJuIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwotCX0KIAogCS8qIEZvciBBUElDIGFjY2VzcyB2bWV4aXQgKi8KIAlpZiAoKGdwYSAmIFBBR0VfTUFTSykgPT0gQVBJQ19ERUZBVUxUX1BIWVNfQkFTRSkKQEAgLTMzNzAsMTEgKzM0NDUsMTIgQEAKIAl0cmFjZV9rdm1fbW1pbyhLVk1fVFJBQ0VfTU1JT19SRUFEX1VOU0FUSVNGSUVELCBieXRlcywgZ3BhLCAwKTsKIAogCXZjcHUtPm1taW9fbmVlZGVkID0gMTsKLQl2Y3B1LT5tbWlvX3BoeXNfYWRkciA9IGdwYTsKLQl2Y3B1LT5tbWlvX3NpemUgPSBieXRlczsKLQl2Y3B1LT5tbWlvX2lzX3dyaXRlID0gMDsKKwl2Y3B1LT5ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfTU1JTzsKKwl2Y3B1LT5ydW4tPm1taW8ucGh5c19hZGRyID0gdmNwdS0+bW1pb19waHlzX2FkZHIgPSBncGE7CisJdmNwdS0+cnVuLT5tbWlvLmxlbiA9IHZjcHUtPm1taW9fc2l6ZSA9IGJ5dGVzOworCXZjcHUtPnJ1bi0+bW1pby5pc193cml0ZSA9IHZjcHUtPm1taW9faXNfd3JpdGUgPSAwOwogCi0JcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOworCXJldHVybiBYODZFTVVMX0lPX05FRURFRDsKIH0KIAogaW50IGVtdWxhdG9yX3dyaXRlX3BoeXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsCkBAIC0zMzkyLDE3ICszNDY4LDE1IEBACiBzdGF0aWMgaW50IGVtdWxhdG9yX3dyaXRlX2VtdWxhdGVkX29uZXBhZ2UodW5zaWduZWQgbG9uZyBhZGRyLAogCQkJCQkgICBjb25zdCB2b2lkICp2YWwsCiAJCQkJCSAgIHVuc2lnbmVkIGludCBieXRlcywKKwkJCQkJICAgdW5zaWduZWQgaW50ICplcnJvcl9jb2RlLAogCQkJCQkgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJZ3BhX3QgICAgICAgICAgICAgICAgIGdwYTsKLQl1MzIgZXJyb3JfY29kZTsKIAotCWdwYSA9IGt2bV9tbXVfZ3ZhX3RvX2dwYV93cml0ZSh2Y3B1LCBhZGRyLCAmZXJyb3JfY29kZSk7CisJZ3BhID0ga3ZtX21tdV9ndmFfdG9fZ3BhX3dyaXRlKHZjcHUsIGFkZHIsIGVycm9yX2NvZGUpOwogCi0JaWYgKGdwYSA9PSBVTk1BUFBFRF9HVkEpIHsKLQkJa3ZtX2luamVjdF9wYWdlX2ZhdWx0KHZjcHUsIGFkZHIsIGVycm9yX2NvZGUpOworCWlmIChncGEgPT0gVU5NQVBQRURfR1ZBKQogCQlyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7Ci0JfQogCiAJLyogRm9yIEFQSUMgYWNjZXNzIHZtZXhpdCAqLwogCWlmICgoZ3BhICYgUEFHRV9NQVNLKSA9PSBBUElDX0RFRkFVTFRfUEhZU19CQVNFKQpAQCAtMzQyMCwxMCArMzQ5NCwxMSBAQAogCQlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKIAogCXZjcHUtPm1taW9fbmVlZGVkID0gMTsKLQl2Y3B1LT5tbWlvX3BoeXNfYWRkciA9IGdwYTsKLQl2Y3B1LT5tbWlvX3NpemUgPSBieXRlczsKLQl2Y3B1LT5tbWlvX2lzX3dyaXRlID0gMTsKLQltZW1jcHkodmNwdS0+bW1pb19kYXRhLCB2YWwsIGJ5dGVzKTsKKwl2Y3B1LT5ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfTU1JTzsKKwl2Y3B1LT5ydW4tPm1taW8ucGh5c19hZGRyID0gdmNwdS0+bW1pb19waHlzX2FkZHIgPSBncGE7CisJdmNwdS0+cnVuLT5tbWlvLmxlbiA9IHZjcHUtPm1taW9fc2l6ZSA9IGJ5dGVzOworCXZjcHUtPnJ1bi0+bW1pby5pc193cml0ZSA9IHZjcHUtPm1taW9faXNfd3JpdGUgPSAxOworCW1lbWNweSh2Y3B1LT5ydW4tPm1taW8uZGF0YSwgdmFsLCBieXRlcyk7CiAKIAlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKIH0KQEAgLTM0MzEsNiArMzUwNiw3IEBACiBpbnQgZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQodW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICAgIGNvbnN0IHZvaWQgKnZhbCwKIAkJCSAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCisJCQkgICAgdW5zaWduZWQgaW50ICplcnJvcl9jb2RlLAogCQkJICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAkvKiBDcm9zc2luZyBhIHBhZ2UgYm91bmRhcnk/ICovCkBAIC0zNDM4LDE2ICszNTE0LDE3IEBACiAJCWludCByYywgbm93OwogCiAJCW5vdyA9IC1hZGRyICYgflBBR0VfTUFTSzsKLQkJcmMgPSBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZF9vbmVwYWdlKGFkZHIsIHZhbCwgbm93LCB2Y3B1KTsKKwkJcmMgPSBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZF9vbmVwYWdlKGFkZHIsIHZhbCwgbm93LCBlcnJvcl9jb2RlLAorCQkJCQkJICAgICB2Y3B1KTsKIAkJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCQlyZXR1cm4gcmM7CiAJCWFkZHIgKz0gbm93OwogCQl2YWwgKz0gbm93OwogCQlieXRlcyAtPSBub3c7CiAJfQotCXJldHVybiBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZF9vbmVwYWdlKGFkZHIsIHZhbCwgYnl0ZXMsIHZjcHUpOworCXJldHVybiBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZF9vbmVwYWdlKGFkZHIsIHZhbCwgYnl0ZXMsIGVycm9yX2NvZGUsCisJCQkJCSAgICAgICB2Y3B1KTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGVtdWxhdG9yX3dyaXRlX2VtdWxhdGVkKTsKIAogI2RlZmluZSBDTVBYQ0hHX1RZUEUodCwgcHRyLCBvbGQsIG5ldykgXAogCShjbXB4Y2hnKCh0ICopKHB0ciksICoodCAqKShvbGQpLCAqKHQgKikobmV3KSkgPT0gKih0ICopKG9sZCkpCkBAIC0zNDYzLDYgKzM1NDAsNyBAQAogCQkJCSAgICAgY29uc3Qgdm9pZCAqb2xkLAogCQkJCSAgICAgY29uc3Qgdm9pZCAqbmV3LAogCQkJCSAgICAgdW5zaWduZWQgaW50IGJ5dGVzLAorCQkJCSAgICAgdW5zaWduZWQgaW50ICplcnJvcl9jb2RlLAogCQkJCSAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCWdwYV90IGdwYTsKQEAgLTM0ODQsNiArMzU2MiwxMCBAQAogCQlnb3RvIGVtdWxfd3JpdGU7CiAKIAlwYWdlID0gZ2ZuX3RvX3BhZ2UodmNwdS0+a3ZtLCBncGEgPj4gUEFHRV9TSElGVCk7CisJaWYgKGlzX2Vycm9yX3BhZ2UocGFnZSkpIHsKKwkJa3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihwYWdlKTsKKwkJZ290byBlbXVsX3dyaXRlOworCX0KIAogCWthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwogCWthZGRyICs9IG9mZnNldF9pbl9wYWdlKGdwYSk7CkBAIC0zNTE2LDcgKzM1OTgsNyBAQAogZW11bF93cml0ZToKIAlwcmludGtfb25jZShLRVJOX1dBUk5JTkcgImt2bTogZW11bGF0aW5nIGV4Y2hhbmdlIGFzIHdyaXRlXG4iKTsKIAotCXJldHVybiBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZChhZGRyLCBuZXcsIGJ5dGVzLCB2Y3B1KTsKKwlyZXR1cm4gZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQoYWRkciwgbmV3LCBieXRlcywgZXJyb3JfY29kZSwgdmNwdSk7CiB9CiAKIHN0YXRpYyBpbnQga2VybmVsX3BpbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHZvaWQgKnBkKQpAQCAtMzYwNCw2ICszNjg2LDIxIEBACiAJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7CiB9CiAKK2ludCBrdm1fZW11bGF0ZV93YmludmQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWlmICghbmVlZF9lbXVsYXRlX3diaW52ZCh2Y3B1KSkKKwkJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7CisKKwlpZiAoa3ZtX3g4Nl9vcHMtPmhhc193YmludmRfZXhpdCgpKSB7CisJCXNtcF9jYWxsX2Z1bmN0aW9uX21hbnkodmNwdS0+YXJjaC53YmludmRfZGlydHlfbWFzaywKKwkJCQl3YmludmRfaXBpLCBOVUxMLCAxKTsKKwkJY3B1bWFza19jbGVhcih2Y3B1LT5hcmNoLndiaW52ZF9kaXJ0eV9tYXNrKTsKKwl9CisJd2JpbnZkKCk7CisJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrdm1fZW11bGF0ZV93YmludmQpOworCiBpbnQgZW11bGF0ZV9jbHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlrdm1feDg2X29wcy0+c2V0X2NyMCh2Y3B1LCBrdm1fcmVhZF9jcjBfYml0cyh2Y3B1LCB+WDg2X0NSMF9UUykpOwpAQCAtMzYxMSwzNiArMzcwOCwxNyBAQAogCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOwogfQogCi1pbnQgZW11bGF0b3JfZ2V0X2RyKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBpbnQgZHIsIHVuc2lnbmVkIGxvbmcgKmRlc3QpCitpbnQgZW11bGF0b3JfZ2V0X2RyKGludCBkciwgdW5zaWduZWQgbG9uZyAqZGVzdCwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXJldHVybiBrdm1fZ2V0X2RyKGN0eHQtPnZjcHUsIGRyLCBkZXN0KTsKKwlyZXR1cm4gX2t2bV9nZXRfZHIodmNwdSwgZHIsIGRlc3QpOwogfQogCi1pbnQgZW11bGF0b3Jfc2V0X2RyKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBpbnQgZHIsIHVuc2lnbmVkIGxvbmcgdmFsdWUpCitpbnQgZW11bGF0b3Jfc2V0X2RyKGludCBkciwgdW5zaWduZWQgbG9uZyB2YWx1ZSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXVuc2lnbmVkIGxvbmcgbWFzayA9IChjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9QUk9UNjQpID8gfjBVTEwgOiB+MFU7CiAKLQlyZXR1cm4ga3ZtX3NldF9kcihjdHh0LT52Y3B1LCBkciwgdmFsdWUgJiBtYXNrKTsKKwlyZXR1cm4gX19rdm1fc2V0X2RyKHZjcHUsIGRyLCB2YWx1ZSk7CiB9CiAKLXZvaWQga3ZtX3JlcG9ydF9lbXVsYXRpb25fZmFpbHVyZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IGNoYXIgKmNvbnRleHQpCi17Ci0JdTggb3Bjb2Rlc1s0XTsKLQl1bnNpZ25lZCBsb25nIHJpcCA9IGt2bV9yaXBfcmVhZCh2Y3B1KTsKLQl1bnNpZ25lZCBsb25nIHJpcF9saW5lYXI7Ci0KLQlpZiAoIXByaW50a19yYXRlbGltaXQoKSkKLQkJcmV0dXJuOwotCi0JcmlwX2xpbmVhciA9IHJpcCArIGdldF9zZWdtZW50X2Jhc2UodmNwdSwgVkNQVV9TUkVHX0NTKTsKLQotCWt2bV9yZWFkX2d1ZXN0X3ZpcnQocmlwX2xpbmVhciwgKHZvaWQgKilvcGNvZGVzLCA0LCB2Y3B1LCBOVUxMKTsKLQotCXByaW50ayhLRVJOX0VSUiAiZW11bGF0aW9uIGZhaWxlZCAoJXMpIHJpcCAlbHggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKLQkgICAgICAgY29udGV4dCwgcmlwLCBvcGNvZGVzWzBdLCBvcGNvZGVzWzFdLCBvcGNvZGVzWzJdLCBvcGNvZGVzWzNdKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGt2bV9yZXBvcnRfZW11bGF0aW9uX2ZhaWx1cmUpOwotCiBzdGF0aWMgdTY0IG1rX2NyXzY0KHU2NCBjdXJyX2NyLCB1MzIgbmV3X3ZhbCkKIHsKIAlyZXR1cm4gKGN1cnJfY3IgJiB+KCgxVUxMIDw8IDMyKSAtIDEpKSB8IG5ld192YWw7CkBAIC0zNjc0LDI3ICszNzUyLDMyIEBACiAJcmV0dXJuIHZhbHVlOwogfQogCi1zdGF0aWMgdm9pZCBlbXVsYXRvcl9zZXRfY3IoaW50IGNyLCB1bnNpZ25lZCBsb25nIHZhbCwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorc3RhdGljIGludCBlbXVsYXRvcl9zZXRfY3IoaW50IGNyLCB1bnNpZ25lZCBsb25nIHZhbCwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogeworCWludCByZXMgPSAwOworCiAJc3dpdGNoIChjcikgewogCWNhc2UgMDoKLQkJa3ZtX3NldF9jcjAodmNwdSwgbWtfY3JfNjQoa3ZtX3JlYWRfY3IwKHZjcHUpLCB2YWwpKTsKKwkJcmVzID0ga3ZtX3NldF9jcjAodmNwdSwgbWtfY3JfNjQoa3ZtX3JlYWRfY3IwKHZjcHUpLCB2YWwpKTsKIAkJYnJlYWs7CiAJY2FzZSAyOgogCQl2Y3B1LT5hcmNoLmNyMiA9IHZhbDsKIAkJYnJlYWs7CiAJY2FzZSAzOgotCQlrdm1fc2V0X2NyMyh2Y3B1LCB2YWwpOworCQlyZXMgPSBrdm1fc2V0X2NyMyh2Y3B1LCB2YWwpOwogCQlicmVhazsKIAljYXNlIDQ6Ci0JCWt2bV9zZXRfY3I0KHZjcHUsIG1rX2NyXzY0KGt2bV9yZWFkX2NyNCh2Y3B1KSwgdmFsKSk7CisJCXJlcyA9IGt2bV9zZXRfY3I0KHZjcHUsIG1rX2NyXzY0KGt2bV9yZWFkX2NyNCh2Y3B1KSwgdmFsKSk7CiAJCWJyZWFrOwogCWNhc2UgODoKLQkJa3ZtX3NldF9jcjgodmNwdSwgdmFsICYgMHhmVUwpOworCQlyZXMgPSBfX2t2bV9zZXRfY3I4KHZjcHUsIHZhbCAmIDB4ZlVMKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJdmNwdV9wcmludGYodmNwdSwgIiVzOiB1bmV4cGVjdGVkIGNyICV1XG4iLCBfX2Z1bmNfXywgY3IpOworCQlyZXMgPSAtMTsKIAl9CisKKwlyZXR1cm4gcmVzOwogfQogCiBzdGF0aWMgaW50IGVtdWxhdG9yX2dldF9jcGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMzcwNyw2ICszNzkwLDEyIEBACiAJa3ZtX3g4Nl9vcHMtPmdldF9nZHQodmNwdSwgZHQpOwogfQogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBlbXVsYXRvcl9nZXRfY2FjaGVkX3NlZ21lbnRfYmFzZShpbnQgc2VnLAorCQkJCQkJICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXJldHVybiBnZXRfc2VnbWVudF9iYXNlKHZjcHUsIHNlZyk7Cit9CisKIHN0YXRpYyBib29sIGVtdWxhdG9yX2dldF9jYWNoZWRfZGVzY3JpcHRvcihzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmRlc2MsIGludCBzZWcsCiAJCQkJCSAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKQEAgLTM3NzksMTEgKzM4NjgsNiBAQAogCWt2bV9zZXRfc2VnbWVudCh2Y3B1LCAma3ZtX3NlZywgc2VnKTsKIH0KIAotc3RhdGljIHZvaWQgZW11bGF0b3Jfc2V0X3JmbGFncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgcmZsYWdzKQotewotCWt2bV94ODZfb3BzLT5zZXRfcmZsYWdzKHZjcHUsIHJmbGFncyk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIGVtdWxhdGVfb3BzID0gewogCS5yZWFkX3N0ZCAgICAgICAgICAgID0ga3ZtX3JlYWRfZ3Vlc3RfdmlydF9zeXN0ZW0sCiAJLndyaXRlX3N0ZCAgICAgICAgICAgPSBrdm1fd3JpdGVfZ3Vlc3RfdmlydF9zeXN0ZW0sCkBAIC0zNzk3LDExICszODgxLDE1IEBACiAJLnNldF9jYWNoZWRfZGVzY3JpcHRvciA9IGVtdWxhdG9yX3NldF9jYWNoZWRfZGVzY3JpcHRvciwKIAkuZ2V0X3NlZ21lbnRfc2VsZWN0b3IgPSBlbXVsYXRvcl9nZXRfc2VnbWVudF9zZWxlY3RvciwKIAkuc2V0X3NlZ21lbnRfc2VsZWN0b3IgPSBlbXVsYXRvcl9zZXRfc2VnbWVudF9zZWxlY3RvciwKKwkuZ2V0X2NhY2hlZF9zZWdtZW50X2Jhc2UgPSBlbXVsYXRvcl9nZXRfY2FjaGVkX3NlZ21lbnRfYmFzZSwKIAkuZ2V0X2dkdCAgICAgICAgICAgICA9IGVtdWxhdG9yX2dldF9nZHQsCiAJLmdldF9jciAgICAgICAgICAgICAgPSBlbXVsYXRvcl9nZXRfY3IsCiAJLnNldF9jciAgICAgICAgICAgICAgPSBlbXVsYXRvcl9zZXRfY3IsCiAJLmNwbCAgICAgICAgICAgICAgICAgPSBlbXVsYXRvcl9nZXRfY3BsLAotCS5zZXRfcmZsYWdzICAgICAgICAgID0gZW11bGF0b3Jfc2V0X3JmbGFncywKKwkuZ2V0X2RyICAgICAgICAgICAgICA9IGVtdWxhdG9yX2dldF9kciwKKwkuc2V0X2RyICAgICAgICAgICAgICA9IGVtdWxhdG9yX3NldF9kciwKKwkuc2V0X21zciAgICAgICAgICAgICA9IGt2bV9zZXRfbXNyLAorCS5nZXRfbXNyICAgICAgICAgICAgID0ga3ZtX2dldF9tc3IsCiB9OwogCiBzdGF0aWMgdm9pZCBjYWNoZV9hbGxfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0zODEyLDE0ICszOTAwLDc1IEBACiAJdmNwdS0+YXJjaC5yZWdzX2RpcnR5ID0gfjA7CiB9CiAKK3N0YXRpYyB2b2lkIHRvZ2dsZV9pbnRlcnJ1cHRpYmlsaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1hc2spCit7CisJdTMyIGludF9zaGFkb3cgPSBrdm1feDg2X29wcy0+Z2V0X2ludGVycnVwdF9zaGFkb3codmNwdSwgbWFzayk7CisJLyoKKwkgKiBhbiBzdGk7IHN0aTsgc2VxdWVuY2Ugb25seSBkaXNhYmxlIGludGVycnVwdHMgZm9yIHRoZSBmaXJzdAorCSAqIGluc3RydWN0aW9uLiBTbywgaWYgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24sIGJlIGl0IGVtdWxhdGVkIG9yCisJICogbm90LCBsZWZ0IHRoZSBzeXN0ZW0gd2l0aCB0aGUgSU5UX1NUSSBmbGFnIGVuYWJsZWQsIGl0CisJICogbWVhbnMgdGhhdCB0aGUgbGFzdCBpbnN0cnVjdGlvbiBpcyBhbiBzdGkuIFdlIHNob3VsZCBub3QKKwkgKiBsZWF2ZSB0aGUgZmxhZyBvbiBpbiB0aGlzIGNhc2UuIFRoZSBzYW1lIGdvZXMgZm9yIG1vdiBzcworCSAqLworCWlmICghKGludF9zaGFkb3cgJiBtYXNrKSkKKwkJa3ZtX3g4Nl9vcHMtPnNldF9pbnRlcnJ1cHRfc2hhZG93KHZjcHUsIG1hc2spOworfQorCitzdGF0aWMgdm9pZCBpbmplY3RfZW11bGF0ZWRfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCA9ICZ2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dDsKKwlpZiAoY3R4dC0+ZXhjZXB0aW9uID09IFBGX1ZFQ1RPUikKKwkJa3ZtX2luamVjdF9wYWdlX2ZhdWx0KHZjcHUsIGN0eHQtPmNyMiwgY3R4dC0+ZXJyb3JfY29kZSk7CisJZWxzZSBpZiAoY3R4dC0+ZXJyb3JfY29kZV92YWxpZCkKKwkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbl9lKHZjcHUsIGN0eHQtPmV4Y2VwdGlvbiwgY3R4dC0+ZXJyb3JfY29kZSk7CisJZWxzZQorCQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIGN0eHQtPmV4Y2VwdGlvbik7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2VtdWxhdGlvbl9mYWlsdXJlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwkrK3ZjcHUtPnN0YXQuaW5zbl9lbXVsYXRpb25fZmFpbDsKKwl0cmFjZV9rdm1fZW11bGF0ZV9pbnNuX2ZhaWxlZCh2Y3B1KTsKKwl2Y3B1LT5ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfSU5URVJOQUxfRVJST1I7CisJdmNwdS0+cnVuLT5pbnRlcm5hbC5zdWJlcnJvciA9IEtWTV9JTlRFUk5BTF9FUlJPUl9FTVVMQVRJT047CisJdmNwdS0+cnVuLT5pbnRlcm5hbC5uZGF0YSA9IDA7CisJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBVRF9WRUNUT1IpOworCXJldHVybiBFTVVMQVRFX0ZBSUw7Cit9CisKK3N0YXRpYyBib29sIHJlZXhlY3V0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSkKK3sKKwlncGFfdCBncGE7CisKKwlpZiAodGRwX2VuYWJsZWQpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogaWYgZW11bGF0aW9uIHdhcyBkdWUgdG8gYWNjZXNzIHRvIHNoYWRvd2VkIHBhZ2UgdGFibGUKKwkgKiBhbmQgaXQgZmFpbGVkIHRyeSB0byB1bnNoYWRvdyBwYWdlIGFuZCByZS1lbnRldHIgdGhlCisJICogZ3Vlc3QgdG8gbGV0IENQVSBleGVjdXRlIHRoZSBpbnN0cnVjdGlvbi4KKwkgKi8KKwlpZiAoa3ZtX21tdV91bnByb3RlY3RfcGFnZV92aXJ0KHZjcHUsIGd2YSkpCisJCXJldHVybiB0cnVlOworCisJZ3BhID0ga3ZtX21tdV9ndmFfdG9fZ3BhX3N5c3RlbSh2Y3B1LCBndmEsIE5VTEwpOworCisJaWYgKGdwYSA9PSBVTk1BUFBFRF9HVkEpCisJCXJldHVybiB0cnVlOyAvKiBsZXQgY3B1IGdlbmVyYXRlIGZhdWx0ICovCisKKwlpZiAoIWt2bV9pc19lcnJvcl9odmEoZ2ZuX3RvX2h2YSh2Y3B1LT5rdm0sIGdwYSA+PiBQQUdFX1NISUZUKSkpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCiBpbnQgZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQl1bnNpZ25lZCBsb25nIGNyMiwKIAkJCXUxNiBlcnJvcl9jb2RlLAogCQkJaW50IGVtdWxhdGlvbl90eXBlKQogewotCWludCByLCBzaGFkb3dfbWFzazsKLQlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjOwotCXN0cnVjdCBrdm1fcnVuICpydW4gPSB2Y3B1LT5ydW47CisJaW50IHI7CisJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZ2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dC5kZWNvZGU7CiAKIAlrdm1fY2xlYXJfZXhjZXB0aW9uX3F1ZXVlKHZjcHUpOwogCXZjcHUtPmFyY2gubW1pb19mYXVsdF9jcjIgPSBjcjI7CkBAIC0zODMxLDggKzM5ODAsNiBAQAogCSAqLwogCWNhY2hlX2FsbF9yZWdzKHZjcHUpOwogCi0JdmNwdS0+bW1pb19pc193cml0ZSA9IDA7Ci0KIAlpZiAoIShlbXVsYXRpb25fdHlwZSAmIEVNVUxUWVBFX05PX0RFQ09ERSkpIHsKIAkJaW50IGNzX2RiLCBjc19sOwogCQlrdm1feDg2X29wcy0+Z2V0X2NzX2RiX2xfYml0cyh2Y3B1LCAmY3NfZGIsICZjc19sKTsKQEAgLTM4NDYsMTMgKzM5OTMsMTYgQEAKIAkJCT8gWDg2RU1VTF9NT0RFX1ZNODYgOiBjc19sCiAJCQk/IFg4NkVNVUxfTU9ERV9QUk9UNjQgOgljc19kYgogCQkJPyBYODZFTVVMX01PREVfUFJPVDMyIDogWDg2RU1VTF9NT0RFX1BST1QxNjsKKwkJbWVtc2V0KGMsIDAsIHNpemVvZihzdHJ1Y3QgZGVjb2RlX2NhY2hlKSk7CisJCW1lbWNweShjLT5yZWdzLCB2Y3B1LT5hcmNoLnJlZ3MsIHNpemVvZiBjLT5yZWdzKTsKKwkJdmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQuaW50ZXJydXB0aWJpbGl0eSA9IDA7CisJCXZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LmV4Y2VwdGlvbiA9IC0xOwogCiAJCXIgPSB4ODZfZGVjb2RlX2luc24oJnZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LCAmZW11bGF0ZV9vcHMpOwogCQl0cmFjZV9rdm1fZW11bGF0ZV9pbnNuX3N0YXJ0KHZjcHUpOwogCiAJCS8qIE9ubHkgYWxsb3cgZW11bGF0aW9uIG9mIHNwZWNpZmljIGluc3RydWN0aW9ucyBvbiAjVUQKIAkJICogKG5hbWVseSBWTU1DQUxMLCBzeXNlbnRlciwgc3lzZXhpdCwgc3lzY2FsbCkqLwotCQljID0gJnZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LmRlY29kZTsKIAkJaWYgKGVtdWxhdGlvbl90eXBlICYgRU1VTFRZUEVfVFJBUF9VRCkgewogCQkJaWYgKCFjLT50d29ieXRlKQogCQkJCXJldHVybiBFTVVMQVRFX0ZBSUw7CkBAIC0zODgwLDExICs0MDMwLDExIEBACiAKIAkJKyt2Y3B1LT5zdGF0Lmluc25fZW11bGF0aW9uOwogCQlpZiAocikgIHsKLQkJCSsrdmNwdS0+c3RhdC5pbnNuX2VtdWxhdGlvbl9mYWlsOwotCQkJdHJhY2Vfa3ZtX2VtdWxhdGVfaW5zbl9mYWlsZWQodmNwdSk7Ci0JCQlpZiAoa3ZtX21tdV91bnByb3RlY3RfcGFnZV92aXJ0KHZjcHUsIGNyMikpCisJCQlpZiAocmVleGVjdXRlX2luc3RydWN0aW9uKHZjcHUsIGNyMikpCiAJCQkJcmV0dXJuIEVNVUxBVEVfRE9ORTsKLQkJCXJldHVybiBFTVVMQVRFX0ZBSUw7CisJCQlpZiAoZW11bGF0aW9uX3R5cGUgJiBFTVVMVFlQRV9TS0lQKQorCQkJCXJldHVybiBFTVVMQVRFX0ZBSUw7CisJCQlyZXR1cm4gaGFuZGxlX2VtdWxhdGlvbl9mYWlsdXJlKHZjcHUpOwogCQl9CiAJfQogCkBAIC0zODkzLDEyICs0MDQzLDI5IEBACiAJCXJldHVybiBFTVVMQVRFX0RPTkU7CiAJfQogCisJLyogdGhpcyBpcyBuZWVkZWQgZm9yIHZtd2FyZSBiYWNrZG9yIGludGVyZmFjZSB0byB3b3JrIHNpbmNlIGl0CisJICAgY2hhbmdlcyByZWdpc3RlcnMgdmFsdWVzICBkdXJpbmcgSU8gb3BlcmF0aW9uICovCisJbWVtY3B5KGMtPnJlZ3MsIHZjcHUtPmFyY2gucmVncywgc2l6ZW9mIGMtPnJlZ3MpOworCiByZXN0YXJ0OgogCXIgPSB4ODZfZW11bGF0ZV9pbnNuKCZ2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dCwgJmVtdWxhdGVfb3BzKTsKLQlzaGFkb3dfbWFzayA9IHZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LmludGVycnVwdGliaWxpdHk7CiAKLQlpZiAociA9PSAwKQotCQlrdm1feDg2X29wcy0+c2V0X2ludGVycnVwdF9zaGFkb3codmNwdSwgc2hhZG93X21hc2spOworCWlmIChyKSB7IC8qIGVtdWxhdGlvbiBmYWlsZWQgKi8KKwkJaWYgKHJlZXhlY3V0ZV9pbnN0cnVjdGlvbih2Y3B1LCBjcjIpKQorCQkJcmV0dXJuIEVNVUxBVEVfRE9ORTsKKworCQlyZXR1cm4gaGFuZGxlX2VtdWxhdGlvbl9mYWlsdXJlKHZjcHUpOworCX0KKworCXRvZ2dsZV9pbnRlcnJ1cHRpYmlsaXR5KHZjcHUsIHZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LmludGVycnVwdGliaWxpdHkpOworCWt2bV94ODZfb3BzLT5zZXRfcmZsYWdzKHZjcHUsIHZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LmVmbGFncyk7CisJbWVtY3B5KHZjcHUtPmFyY2gucmVncywgYy0+cmVncywgc2l6ZW9mIGMtPnJlZ3MpOworCWt2bV9yaXBfd3JpdGUodmNwdSwgdmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQuZWlwKTsKKworCWlmICh2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dC5leGNlcHRpb24gPj0gMCkgeworCQlpbmplY3RfZW11bGF0ZWRfZXhjZXB0aW9uKHZjcHUpOworCQlyZXR1cm4gRU1VTEFURV9ET05FOworCX0KIAogCWlmICh2Y3B1LT5hcmNoLnBpby5jb3VudCkgewogCQlpZiAoIXZjcHUtPmFyY2gucGlvLmluKQpAQCAtMzkwNiwzNSArNDA3MywxMiBAQAogCQlyZXR1cm4gRU1VTEFURV9ET19NTUlPOwogCX0KIAotCWlmIChyIHx8IHZjcHUtPm1taW9faXNfd3JpdGUpIHsKLQkJcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX01NSU87Ci0JCXJ1bi0+bW1pby5waHlzX2FkZHIgPSB2Y3B1LT5tbWlvX3BoeXNfYWRkcjsKLQkJbWVtY3B5KHJ1bi0+bW1pby5kYXRhLCB2Y3B1LT5tbWlvX2RhdGEsIDgpOwotCQlydW4tPm1taW8ubGVuID0gdmNwdS0+bW1pb19zaXplOwotCQlydW4tPm1taW8uaXNfd3JpdGUgPSB2Y3B1LT5tbWlvX2lzX3dyaXRlOwotCX0KLQotCWlmIChyKSB7Ci0JCWlmIChrdm1fbW11X3VucHJvdGVjdF9wYWdlX3ZpcnQodmNwdSwgY3IyKSkKLQkJCWdvdG8gZG9uZTsKLQkJaWYgKCF2Y3B1LT5tbWlvX25lZWRlZCkgewotCQkJKyt2Y3B1LT5zdGF0Lmluc25fZW11bGF0aW9uX2ZhaWw7Ci0JCQl0cmFjZV9rdm1fZW11bGF0ZV9pbnNuX2ZhaWxlZCh2Y3B1KTsKLQkJCWt2bV9yZXBvcnRfZW11bGF0aW9uX2ZhaWx1cmUodmNwdSwgIm1taW8iKTsKLQkJCXJldHVybiBFTVVMQVRFX0ZBSUw7Ci0JCX0KKwlpZiAodmNwdS0+bW1pb19uZWVkZWQpIHsKKwkJaWYgKHZjcHUtPm1taW9faXNfd3JpdGUpCisJCQl2Y3B1LT5tbWlvX25lZWRlZCA9IDA7CiAJCXJldHVybiBFTVVMQVRFX0RPX01NSU87CiAJfQogCi0JaWYgKHZjcHUtPm1taW9faXNfd3JpdGUpIHsKLQkJdmNwdS0+bW1pb19uZWVkZWQgPSAwOwotCQlyZXR1cm4gRU1VTEFURV9ET19NTUlPOwotCX0KLQotZG9uZToKLQlpZiAodmNwdS0+YXJjaC5leGNlcHRpb24ucGVuZGluZykKLQkJdmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQucmVzdGFydCA9IGZhbHNlOwotCiAJaWYgKHZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LnJlc3RhcnQpCiAJCWdvdG8gcmVzdGFydDsKIApAQCAtNDEwOCw2ICs0MjUyLDkgQEAKIAogCXBlcmZfcmVnaXN0ZXJfZ3Vlc3RfaW5mb19jYWxsYmFja3MoJmt2bV9ndWVzdF9jYnMpOwogCisJaWYgKGNwdV9oYXNfeHNhdmUpCisJCWhvc3RfeGNyMCA9IHhnZXRidihYQ1JfWEZFQVRVUkVfRU5BQkxFRF9NQVNLKTsKKwogCXJldHVybiAwOwogCiBvdXQ6CkBAIC00MjcwLDcgKzQ0MTcsNyBAQAogCiAJa3ZtX3g4Nl9vcHMtPnBhdGNoX2h5cGVyY2FsbCh2Y3B1LCBpbnN0cnVjdGlvbik7CiAKLQlyZXR1cm4gZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQocmlwLCBpbnN0cnVjdGlvbiwgMywgdmNwdSk7CisJcmV0dXJuIGVtdWxhdG9yX3dyaXRlX2VtdWxhdGVkKHJpcCwgaW5zdHJ1Y3Rpb24sIDMsIE5VTEwsIHZjcHUpOwogfQogCiB2b2lkIHJlYWxtb2RlX2xnZHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgbGltaXQsIHVuc2lnbmVkIGxvbmcgYmFzZSkKQEAgLTQ1MDYsNTkgKzQ2NTMsNzggQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGt2bV9sb2FkX2d1ZXN0X3hjcjAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWlmIChrdm1fcmVhZF9jcjRfYml0cyh2Y3B1LCBYODZfQ1I0X09TWFNBVkUpICYmCisJCQkhdmNwdS0+Z3Vlc3RfeGNyMF9sb2FkZWQpIHsKKwkJLyoga3ZtX3NldF94Y3IoKSBhbHNvIGRlcGVuZHMgb24gdGhpcyAqLworCQl4c2V0YnYoWENSX1hGRUFUVVJFX0VOQUJMRURfTUFTSywgdmNwdS0+YXJjaC54Y3IwKTsKKwkJdmNwdS0+Z3Vlc3RfeGNyMF9sb2FkZWQgPSAxOworCX0KK30KKworc3RhdGljIHZvaWQga3ZtX3B1dF9ndWVzdF94Y3IwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlpZiAodmNwdS0+Z3Vlc3RfeGNyMF9sb2FkZWQpIHsKKwkJaWYgKHZjcHUtPmFyY2gueGNyMCAhPSBob3N0X3hjcjApCisJCQl4c2V0YnYoWENSX1hGRUFUVVJFX0VOQUJMRURfTUFTSywgaG9zdF94Y3IwKTsKKwkJdmNwdS0+Z3Vlc3RfeGNyMF9sb2FkZWQgPSAwOworCX0KK30KKwogc3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlpbnQgcjsKIAlib29sIHJlcV9pbnRfd2luID0gIWlycWNoaXBfaW5fa2VybmVsKHZjcHUtPmt2bSkgJiYKIAkJdmNwdS0+cnVuLT5yZXF1ZXN0X2ludGVycnVwdF93aW5kb3c7CiAKLQlpZiAodmNwdS0+cmVxdWVzdHMpCi0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoS1ZNX1JFUV9NTVVfUkVMT0FELCAmdmNwdS0+cmVxdWVzdHMpKQotCQkJa3ZtX21tdV91bmxvYWQodmNwdSk7Ci0KLQlyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7Ci0JaWYgKHVubGlrZWx5KHIpKQotCQlnb3RvIG91dDsKLQogCWlmICh2Y3B1LT5yZXF1ZXN0cykgewotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEtWTV9SRVFfTUlHUkFURV9USU1FUiwgJnZjcHUtPnJlcXVlc3RzKSkKKwkJaWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfTU1VX1JFTE9BRCwgdmNwdSkpCisJCQlrdm1fbW11X3VubG9hZCh2Y3B1KTsKKwkJaWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfTUlHUkFURV9USU1FUiwgdmNwdSkpCiAJCQlfX2t2bV9taWdyYXRlX3RpbWVycyh2Y3B1KTsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChLVk1fUkVRX0tWTUNMT0NLX1VQREFURSwgJnZjcHUtPnJlcXVlc3RzKSkKKwkJaWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfS1ZNQ0xPQ0tfVVBEQVRFLCB2Y3B1KSkKIAkJCWt2bV93cml0ZV9ndWVzdF90aW1lKHZjcHUpOwotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEtWTV9SRVFfTU1VX1NZTkMsICZ2Y3B1LT5yZXF1ZXN0cykpCisJCWlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX01NVV9TWU5DLCB2Y3B1KSkKIAkJCWt2bV9tbXVfc3luY19yb290cyh2Y3B1KTsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChLVk1fUkVRX1RMQl9GTFVTSCwgJnZjcHUtPnJlcXVlc3RzKSkKKwkJaWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KSkKIAkJCWt2bV94ODZfb3BzLT50bGJfZmx1c2godmNwdSk7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoS1ZNX1JFUV9SRVBPUlRfVFBSX0FDQ0VTUywKLQkJCQkgICAgICAgJnZjcHUtPnJlcXVlc3RzKSkgeworCQlpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9SRVBPUlRfVFBSX0FDQ0VTUywgdmNwdSkpIHsKIAkJCXZjcHUtPnJ1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9UUFJfQUNDRVNTOwogCQkJciA9IDA7CiAJCQlnb3RvIG91dDsKIAkJfQotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEtWTV9SRVFfVFJJUExFX0ZBVUxULCAmdmNwdS0+cmVxdWVzdHMpKSB7CisJCWlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1RSSVBMRV9GQVVMVCwgdmNwdSkpIHsKIAkJCXZjcHUtPnJ1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9TSFVURE9XTjsKIAkJCXIgPSAwOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChLVk1fUkVRX0RFQUNUSVZBVEVfRlBVLCAmdmNwdS0+cmVxdWVzdHMpKSB7CisJCWlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0RFQUNUSVZBVEVfRlBVLCB2Y3B1KSkgewogCQkJdmNwdS0+ZnB1X2FjdGl2ZSA9IDA7CiAJCQlrdm1feDg2X29wcy0+ZnB1X2RlYWN0aXZhdGUodmNwdSk7CiAJCX0KIAl9CiAKKwlyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7CisJaWYgKHVubGlrZWx5KHIpKQorCQlnb3RvIG91dDsKKwogCXByZWVtcHRfZGlzYWJsZSgpOwogCiAJa3ZtX3g4Nl9vcHMtPnByZXBhcmVfZ3Vlc3Rfc3dpdGNoKHZjcHUpOwogCWlmICh2Y3B1LT5mcHVfYWN0aXZlKQogCQlrdm1fbG9hZF9ndWVzdF9mcHUodmNwdSk7CisJa3ZtX2xvYWRfZ3Vlc3RfeGNyMCh2Y3B1KTsKKworCWF0b21pY19zZXQoJnZjcHUtPmd1ZXN0X21vZGUsIDEpOworCXNtcF93bWIoKTsKIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKLQljbGVhcl9iaXQoS1ZNX1JFUV9LSUNLLCAmdmNwdS0+cmVxdWVzdHMpOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7Ci0KLQlpZiAodmNwdS0+cmVxdWVzdHMgfHwgbmVlZF9yZXNjaGVkKCkgfHwgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJc2V0X2JpdChLVk1fUkVRX0tJQ0ssICZ2Y3B1LT5yZXF1ZXN0cyk7CisJaWYgKCFhdG9taWNfcmVhZCgmdmNwdS0+Z3Vlc3RfbW9kZSkgfHwgdmNwdS0+cmVxdWVzdHMKKwkgICAgfHwgbmVlZF9yZXNjaGVkKCkgfHwgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJYXRvbWljX3NldCgmdmNwdS0+Z3Vlc3RfbW9kZSwgMCk7CisJCXNtcF93bWIoKTsKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCQlwcmVlbXB0X2VuYWJsZSgpOwogCQlyID0gMTsKQEAgLTQ2MDMsNyArNDc2OSw4IEBACiAJaWYgKGh3X2JyZWFrcG9pbnRfYWN0aXZlKCkpCiAJCWh3X2JyZWFrcG9pbnRfcmVzdG9yZSgpOwogCi0Jc2V0X2JpdChLVk1fUkVRX0tJQ0ssICZ2Y3B1LT5yZXF1ZXN0cyk7CisJYXRvbWljX3NldCgmdmNwdS0+Z3Vlc3RfbW9kZSwgMCk7CisJc21wX3dtYigpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKIAogCSsrdmNwdS0+c3RhdC5leGl0czsKQEAgLTQ2NjUsNyArNDgzMiw3IEBACiAJCQlzcmN1X3JlYWRfdW5sb2NrKCZrdm0tPnNyY3UsIHZjcHUtPnNyY3VfaWR4KTsKIAkJCWt2bV92Y3B1X2Jsb2NrKHZjcHUpOwogCQkJdmNwdS0+c3JjdV9pZHggPSBzcmN1X3JlYWRfbG9jaygma3ZtLT5zcmN1KTsKLQkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoS1ZNX1JFUV9VTkhBTFQsICZ2Y3B1LT5yZXF1ZXN0cykpCisJCQlpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9VTkhBTFQsIHZjcHUpKQogCQkJewogCQkJCXN3aXRjaCh2Y3B1LT5hcmNoLm1wX3N0YXRlKSB7CiAJCQkJY2FzZSBLVk1fTVBfU1RBVEVfSEFMVEVEOgpAQCAtNDcxNyw4ICs0ODg0LDYgQEAKIAlpbnQgcjsKIAlzaWdzZXRfdCBzaWdzYXZlZDsKIAotCXZjcHVfbG9hZCh2Y3B1KTsKLQogCWlmICh2Y3B1LT5zaWdzZXRfYWN0aXZlKQogCQlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJnZjcHUtPnNpZ3NldCwgJnNpZ3NhdmVkKTsKIApAQCAtNDc0Myw3ICs0OTA4LDcgQEAKIAkJdmNwdS0+c3JjdV9pZHggPSBzcmN1X3JlYWRfbG9jaygmdmNwdS0+a3ZtLT5zcmN1KTsKIAkJciA9IGVtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgMCwgMCwgRU1VTFRZUEVfTk9fREVDT0RFKTsKIAkJc3JjdV9yZWFkX3VubG9jaygmdmNwdS0+a3ZtLT5zcmN1LCB2Y3B1LT5zcmN1X2lkeCk7Ci0JCWlmIChyID09IEVNVUxBVEVfRE9fTU1JTykgeworCQlpZiAociAhPSBFTVVMQVRFX0RPTkUpIHsKIAkJCXIgPSAwOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTQ3NTksMTQgKzQ5MjQsMTEgQEAKIAlpZiAodmNwdS0+c2lnc2V0X2FjdGl2ZSkKIAkJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZzaWdzYXZlZCwgTlVMTCk7CiAKLQl2Y3B1X3B1dCh2Y3B1KTsKIAlyZXR1cm4gcjsKIH0KIAogaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3JlZ3MgKnJlZ3MpCiB7Ci0JdmNwdV9sb2FkKHZjcHUpOwotCiAJcmVncy0+cmF4ID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JBWCk7CiAJcmVncy0+cmJ4ID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JCWCk7CiAJcmVncy0+cmN4ID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JDWCk7CkBAIC00Nzg5LDE1ICs0OTUxLDExIEBACiAJcmVncy0+cmlwID0ga3ZtX3JpcF9yZWFkKHZjcHUpOwogCXJlZ3MtPnJmbGFncyA9IGt2bV9nZXRfcmZsYWdzKHZjcHUpOwogCi0JdmNwdV9wdXQodmNwdSk7Ci0KIAlyZXR1cm4gMDsKIH0KIAogaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3JlZ3MgKnJlZ3MpCiB7Ci0JdmNwdV9sb2FkKHZjcHUpOwotCiAJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQVgsIHJlZ3MtPnJheCk7CiAJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQlgsIHJlZ3MtPnJieCk7CiAJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQ1gsIHJlZ3MtPnJjeCk7CkBAIC00ODIyLDggKzQ5ODAsNiBAQAogCiAJdmNwdS0+YXJjaC5leGNlcHRpb24ucGVuZGluZyA9IGZhbHNlOwogCi0JdmNwdV9wdXQodmNwdSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDg0Miw4ICs0OTk4LDYgQEAKIHsKIAlzdHJ1Y3QgZGVzY19wdHIgZHQ7CiAKLQl2Y3B1X2xvYWQodmNwdSk7Ci0KIAlrdm1fZ2V0X3NlZ21lbnQodmNwdSwgJnNyZWdzLT5jcywgVkNQVV9TUkVHX0NTKTsKIAlrdm1fZ2V0X3NlZ21lbnQodmNwdSwgJnNyZWdzLT5kcywgVkNQVV9TUkVHX0RTKTsKIAlrdm1fZ2V0X3NlZ21lbnQodmNwdSwgJnNyZWdzLT5lcywgVkNQVV9TUkVHX0VTKTsKQEAgLTQ4NzUsMzIgKzUwMjksMjcgQEAKIAkJc2V0X2JpdCh2Y3B1LT5hcmNoLmludGVycnVwdC5uciwKIAkJCSh1bnNpZ25lZCBsb25nICopc3JlZ3MtPmludGVycnVwdF9iaXRtYXApOwogCi0JdmNwdV9wdXQodmNwdSk7Ci0KIAlyZXR1cm4gMDsKIH0KIAogaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X21wc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCSAgICBzdHJ1Y3Qga3ZtX21wX3N0YXRlICptcF9zdGF0ZSkKIHsKLQl2Y3B1X2xvYWQodmNwdSk7CiAJbXBfc3RhdGUtPm1wX3N0YXRlID0gdmNwdS0+YXJjaC5tcF9zdGF0ZTsKLQl2Y3B1X3B1dCh2Y3B1KTsKIAlyZXR1cm4gMDsKIH0KIAogaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X21wc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCSAgICBzdHJ1Y3Qga3ZtX21wX3N0YXRlICptcF9zdGF0ZSkKIHsKLQl2Y3B1X2xvYWQodmNwdSk7CiAJdmNwdS0+YXJjaC5tcF9zdGF0ZSA9IG1wX3N0YXRlLT5tcF9zdGF0ZTsKLQl2Y3B1X3B1dCh2Y3B1KTsKIAlyZXR1cm4gMDsKIH0KIAogaW50IGt2bV90YXNrX3N3aXRjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiB0c3Nfc2VsZWN0b3IsIGludCByZWFzb24sCiAJCSAgICBib29sIGhhc19lcnJvcl9jb2RlLCB1MzIgZXJyb3JfY29kZSkKIHsKKwlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJnZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LmRlY29kZTsKIAlpbnQgY3NfZGIsIGNzX2wsIHJldDsKIAljYWNoZV9hbGxfcmVncyh2Y3B1KTsKIApAQCAtNDkxNSw2ICs1MDY0LDggQEAKIAkJPyBYODZFTVVMX01PREVfVk04NiA6IGNzX2wKIAkJPyBYODZFTVVMX01PREVfUFJPVDY0IDoJY3NfZGIKIAkJPyBYODZFTVVMX01PREVfUFJPVDMyIDogWDg2RU1VTF9NT0RFX1BST1QxNjsKKwltZW1zZXQoYywgMCwgc2l6ZW9mKHN0cnVjdCBkZWNvZGVfY2FjaGUpKTsKKwltZW1jcHkoYy0+cmVncywgdmNwdS0+YXJjaC5yZWdzLCBzaXplb2YgYy0+cmVncyk7CiAKIAlyZXQgPSBlbXVsYXRvcl90YXNrX3N3aXRjaCgmdmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQsICZlbXVsYXRlX29wcywKIAkJCQkgICB0c3Nfc2VsZWN0b3IsIHJlYXNvbiwgaGFzX2Vycm9yX2NvZGUsCkBAIC00OTIzLDYgKzUwNzQsOCBAQAogCWlmIChyZXQpCiAJCXJldHVybiBFTVVMQVRFX0ZBSUw7CiAKKwltZW1jcHkodmNwdS0+YXJjaC5yZWdzLCBjLT5yZWdzLCBzaXplb2YgYy0+cmVncyk7CisJa3ZtX3JpcF93cml0ZSh2Y3B1LCB2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dC5laXApOwogCWt2bV94ODZfb3BzLT5zZXRfcmZsYWdzKHZjcHUsIHZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LmVmbGFncyk7CiAJcmV0dXJuIEVNVUxBVEVfRE9ORTsKIH0KQEAgLTQ5MzUsOCArNTA4OCw2IEBACiAJaW50IHBlbmRpbmdfdmVjLCBtYXhfYml0czsKIAlzdHJ1Y3QgZGVzY19wdHIgZHQ7CiAKLQl2Y3B1X2xvYWQodmNwdSk7Ci0KIAlkdC5zaXplID0gc3JlZ3MtPmlkdC5saW1pdDsKIAlkdC5hZGRyZXNzID0gc3JlZ3MtPmlkdC5iYXNlOwogCWt2bV94ODZfb3BzLT5zZXRfaWR0KHZjcHUsICZkdCk7CkBAIC00OTk2LDggKzUxNDcsNiBAQAogCSAgICAhaXNfcHJvdG1vZGUodmNwdSkpCiAJCXZjcHUtPmFyY2gubXBfc3RhdGUgPSBLVk1fTVBfU1RBVEVfUlVOTkFCTEU7CiAKLQl2Y3B1X3B1dCh2Y3B1KTsKLQogCXJldHVybiAwOwogfQogCkBAIC01MDA3LDEyICs1MTU2LDEwIEBACiAJdW5zaWduZWQgbG9uZyByZmxhZ3M7CiAJaW50IGksIHI7CiAKLQl2Y3B1X2xvYWQodmNwdSk7Ci0KIAlpZiAoZGJnLT5jb250cm9sICYgKEtWTV9HVUVTVERCR19JTkpFQ1RfREIgfCBLVk1fR1VFU1REQkdfSU5KRUNUX0JQKSkgewogCQlyID0gLUVCVVNZOwogCQlpZiAodmNwdS0+YXJjaC5leGNlcHRpb24ucGVuZGluZykKLQkJCWdvdG8gdW5sb2NrX291dDsKKwkJCWdvdG8gb3V0OwogCQlpZiAoZGJnLT5jb250cm9sICYgS1ZNX0dVRVNUREJHX0lOSkVDVF9EQikKIAkJCWt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgREJfVkVDVE9SKTsKIAkJZWxzZQpAQCAtNTA1NCwzNCArNTIwMSwxMiBAQAogCiAJciA9IDA7CiAKLXVubG9ja19vdXQ6Ci0JdmNwdV9wdXQodmNwdSk7CitvdXQ6CiAKIAlyZXR1cm4gcjsKIH0KIAogLyoKLSAqIGZ4c2F2ZSBmcHUgc3RhdGUuICBUYWtlbiBmcm9tIHg4Nl82NC9wcm9jZXNzb3IuaC4gIFRvIGJlIGtpbGxlZCB3aGVuCi0gKiB3ZSBoYXZlIGFzbS94ODYvcHJvY2Vzc29yLmgKLSAqLwotc3RydWN0IGZ4c2F2ZSB7Ci0JdTE2CWN3ZDsKLQl1MTYJc3dkOwotCXUxNgl0d2Q7Ci0JdTE2CWZvcDsKLQl1NjQJcmlwOwotCXU2NAlyZHA7Ci0JdTMyCW14Y3NyOwotCXUzMglteGNzcl9tYXNrOwotCXUzMglzdF9zcGFjZVszMl07CS8qIDgqMTYgYnl0ZXMgZm9yIGVhY2ggRlAtcmVnID0gMTI4IGJ5dGVzICovCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCXUzMgl4bW1fc3BhY2VbNjRdOwkvKiAxNioxNiBieXRlcyBmb3IgZWFjaCBYTU0tcmVnID0gMjU2IGJ5dGVzICovCi0jZWxzZQotCXUzMgl4bW1fc3BhY2VbMzJdOwkvKiA4KjE2IGJ5dGVzIGZvciBlYWNoIFhNTS1yZWcgPSAxMjggYnl0ZXMgKi8KLSNlbmRpZgotfTsKLQotLyoKICAqIFRyYW5zbGF0ZSBhIGd1ZXN0IHZpcnR1YWwgYWRkcmVzcyB0byBhIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MuCiAgKi8KIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3RyYW5zbGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCkBAIC01MDkxLDcgKzUyMTYsNiBAQAogCWdwYV90IGdwYTsKIAlpbnQgaWR4OwogCi0JdmNwdV9sb2FkKHZjcHUpOwogCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZ2Y3B1LT5rdm0tPnNyY3UpOwogCWdwYSA9IGt2bV9tbXVfZ3ZhX3RvX2dwYV9zeXN0ZW0odmNwdSwgdmFkZHIsIE5VTEwpOwogCXNyY3VfcmVhZF91bmxvY2soJnZjcHUtPmt2bS0+c3JjdSwgaWR4KTsKQEAgLTUwOTksMTYgKzUyMjMsMTQgQEAKIAl0ci0+dmFsaWQgPSBncGEgIT0gVU5NQVBQRURfR1ZBOwogCXRyLT53cml0ZWFibGUgPSAxOwogCXRyLT51c2VybW9kZSA9IDA7Ci0JdmNwdV9wdXQodmNwdSk7CiAKIAlyZXR1cm4gMDsKIH0KIAogaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X2ZwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZnB1ICpmcHUpCiB7Ci0Jc3RydWN0IGZ4c2F2ZSAqZnhzYXZlID0gKHN0cnVjdCBmeHNhdmUgKikmdmNwdS0+YXJjaC5ndWVzdF9meF9pbWFnZTsKLQotCXZjcHVfbG9hZCh2Y3B1KTsKKwlzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0ICpmeHNhdmUgPQorCQkJJnZjcHUtPmFyY2guZ3Vlc3RfZnB1LnN0YXRlLT5meHNhdmU7CiAKIAltZW1jcHkoZnB1LT5mcHIsIGZ4c2F2ZS0+c3Rfc3BhY2UsIDEyOCk7CiAJZnB1LT5mY3cgPSBmeHNhdmUtPmN3ZDsKQEAgLTUxMTksMTYgKzUyNDEsMTMgQEAKIAlmcHUtPmxhc3RfZHAgPSBmeHNhdmUtPnJkcDsKIAltZW1jcHkoZnB1LT54bW0sIGZ4c2F2ZS0+eG1tX3NwYWNlLCBzaXplb2YgZnhzYXZlLT54bW1fc3BhY2UpOwogCi0JdmNwdV9wdXQodmNwdSk7Ci0KIAlyZXR1cm4gMDsKIH0KIAogaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2ZwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZnB1ICpmcHUpCiB7Ci0Jc3RydWN0IGZ4c2F2ZSAqZnhzYXZlID0gKHN0cnVjdCBmeHNhdmUgKikmdmNwdS0+YXJjaC5ndWVzdF9meF9pbWFnZTsKLQotCXZjcHVfbG9hZCh2Y3B1KTsKKwlzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0ICpmeHNhdmUgPQorCQkJJnZjcHUtPmFyY2guZ3Vlc3RfZnB1LnN0YXRlLT5meHNhdmU7CiAKIAltZW1jcHkoZnhzYXZlLT5zdF9zcGFjZSwgZnB1LT5mcHIsIDEyOCk7CiAJZnhzYXZlLT5jd2QgPSBmcHUtPmZjdzsKQEAgLTUxMzksNjEgKzUyNTgsNjMgQEAKIAlmeHNhdmUtPnJkcCA9IGZwdS0+bGFzdF9kcDsKIAltZW1jcHkoZnhzYXZlLT54bW1fc3BhY2UsIGZwdS0+eG1tLCBzaXplb2YgZnhzYXZlLT54bW1fc3BhY2UpOwogCi0JdmNwdV9wdXQodmNwdSk7Ci0KIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBmeF9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK2ludCBmeF9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQl1bnNpZ25lZCBhZnRlcl9teGNzcl9tYXNrOworCWludCBlcnI7CisKKwllcnIgPSBmcHVfYWxsb2MoJnZjcHUtPmFyY2guZ3Vlc3RfZnB1KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZnB1X2Zpbml0KCZ2Y3B1LT5hcmNoLmd1ZXN0X2ZwdSk7CiAKIAkvKgotCSAqIFRvdWNoIHRoZSBmcHUgdGhlIGZpcnN0IHRpbWUgaW4gbm9uIGF0b21pYyBjb250ZXh0IGFzIGlmCi0JICogdGhpcyBpcyB0aGUgZmlyc3QgZnB1IGluc3RydWN0aW9uIHRoZSBleGNlcHRpb24gaGFuZGxlcgotCSAqIHdpbGwgZmlyZSBiZWZvcmUgdGhlIGluc3RydWN0aW9uIHJldHVybnMgYW5kIGl0J2xsIGhhdmUgdG8KLQkgKiBhbGxvY2F0ZSByYW0gd2l0aCBHRlBfS0VSTkVMLgorCSAqIEVuc3VyZSBndWVzdCB4Y3IwIGlzIHZhbGlkIGZvciBsb2FkaW5nCiAJICovCi0JaWYgKCF1c2VkX21hdGgoKSkKLQkJa3ZtX2Z4X3NhdmUoJnZjcHUtPmFyY2guaG9zdF9meF9pbWFnZSk7Ci0KLQkvKiBJbml0aWFsaXplIGd1ZXN0IEZQVSBieSByZXNldHRpbmcgb3VycyBhbmQgc2F2aW5nIGludG8gZ3Vlc3QncyAqLwotCXByZWVtcHRfZGlzYWJsZSgpOwotCWt2bV9meF9zYXZlKCZ2Y3B1LT5hcmNoLmhvc3RfZnhfaW1hZ2UpOwotCWt2bV9meF9maW5pdCgpOwotCWt2bV9meF9zYXZlKCZ2Y3B1LT5hcmNoLmd1ZXN0X2Z4X2ltYWdlKTsKLQlrdm1fZnhfcmVzdG9yZSgmdmNwdS0+YXJjaC5ob3N0X2Z4X2ltYWdlKTsKLQlwcmVlbXB0X2VuYWJsZSgpOworCXZjcHUtPmFyY2gueGNyMCA9IFhTVEFURV9GUDsKIAogCXZjcHUtPmFyY2guY3IwIHw9IFg4Nl9DUjBfRVQ7Ci0JYWZ0ZXJfbXhjc3JfbWFzayA9IG9mZnNldG9mKHN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QsIHN0X3NwYWNlKTsKLQl2Y3B1LT5hcmNoLmd1ZXN0X2Z4X2ltYWdlLm14Y3NyID0gMHgxZjgwOwotCW1lbXNldCgodm9pZCAqKSZ2Y3B1LT5hcmNoLmd1ZXN0X2Z4X2ltYWdlICsgYWZ0ZXJfbXhjc3JfbWFzaywKLQkgICAgICAgMCwgc2l6ZW9mKHN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QpIC0gYWZ0ZXJfbXhjc3JfbWFzayk7CisKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGZ4X2luaXQpOwogCitzdGF0aWMgdm9pZCBmeF9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlmcHVfZnJlZSgmdmNwdS0+YXJjaC5ndWVzdF9mcHUpOworfQorCiB2b2lkIGt2bV9sb2FkX2d1ZXN0X2ZwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJaWYgKHZjcHUtPmd1ZXN0X2ZwdV9sb2FkZWQpCiAJCXJldHVybjsKIAorCS8qCisJICogUmVzdG9yZSBhbGwgcG9zc2libGUgc3RhdGVzIGluIHRoZSBndWVzdCwKKwkgKiBhbmQgYXNzdW1lIGhvc3Qgd291bGQgdXNlIGFsbCBhdmFpbGFibGUgYml0cy4KKwkgKiBHdWVzdCB4Y3IwIHdvdWxkIGJlIGxvYWRlZCBsYXRlci4KKwkgKi8KKwlrdm1fcHV0X2d1ZXN0X3hjcjAodmNwdSk7CiAJdmNwdS0+Z3Vlc3RfZnB1X2xvYWRlZCA9IDE7Ci0Ja3ZtX2Z4X3NhdmUoJnZjcHUtPmFyY2guaG9zdF9meF9pbWFnZSk7Ci0Ja3ZtX2Z4X3Jlc3RvcmUoJnZjcHUtPmFyY2guZ3Vlc3RfZnhfaW1hZ2UpOworCXVubGF6eV9mcHUoY3VycmVudCk7CisJZnB1X3Jlc3RvcmVfY2hlY2tpbmcoJnZjcHUtPmFyY2guZ3Vlc3RfZnB1KTsKIAl0cmFjZV9rdm1fZnB1KDEpOwogfQogCiB2b2lkIGt2bV9wdXRfZ3Vlc3RfZnB1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKKwlrdm1fcHV0X2d1ZXN0X3hjcjAodmNwdSk7CisKIAlpZiAoIXZjcHUtPmd1ZXN0X2ZwdV9sb2FkZWQpCiAJCXJldHVybjsKIAogCXZjcHUtPmd1ZXN0X2ZwdV9sb2FkZWQgPSAwOwotCWt2bV9meF9zYXZlKCZ2Y3B1LT5hcmNoLmd1ZXN0X2Z4X2ltYWdlKTsKLQlrdm1fZnhfcmVzdG9yZSgmdmNwdS0+YXJjaC5ob3N0X2Z4X2ltYWdlKTsKKwlmcHVfc2F2ZV9pbml0KCZ2Y3B1LT5hcmNoLmd1ZXN0X2ZwdSk7CiAJKyt2Y3B1LT5zdGF0LmZwdV9yZWxvYWQ7Ci0Jc2V0X2JpdChLVk1fUkVRX0RFQUNUSVZBVEVfRlBVLCAmdmNwdS0+cmVxdWVzdHMpOworCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9ERUFDVElWQVRFX0ZQVSwgdmNwdSk7CiAJdHJhY2Vfa3ZtX2ZwdSgwKTsKIH0KIApAQCAtNTIwNCw2ICs1MzI1LDggQEAKIAkJdmNwdS0+YXJjaC50aW1lX3BhZ2UgPSBOVUxMOwogCX0KIAorCWZyZWVfY3B1bWFza192YXIodmNwdS0+YXJjaC53YmludmRfZGlydHlfbWFzayk7CisJZnhfZnJlZSh2Y3B1KTsKIAlrdm1feDg2X29wcy0+dmNwdV9mcmVlKHZjcHUpOwogfQogCkBAIC01MjE3LDkgKzUzNDAsNiBAQAogewogCWludCByOwogCi0JLyogV2UgZG8gZnhzYXZlOiB0aGlzIG11c3QgYmUgYWxpZ25lZC4gKi8KLQlCVUdfT04oKHVuc2lnbmVkIGxvbmcpJnZjcHUtPmFyY2guaG9zdF9meF9pbWFnZSAmIDB4Rik7Ci0KIAl2Y3B1LT5hcmNoLm10cnJfc3RhdGUuaGF2ZV9maXhlZCA9IDE7CiAJdmNwdV9sb2FkKHZjcHUpOwogCXIgPSBrdm1fYXJjaF92Y3B1X3Jlc2V0KHZjcHUpOwpAQCAtNTI0MSw2ICs1MzYxLDcgQEAKIAlrdm1fbW11X3VubG9hZCh2Y3B1KTsKIAl2Y3B1X3B1dCh2Y3B1KTsKIAorCWZ4X2ZyZWUodmNwdSk7CiAJa3ZtX3g4Nl9vcHMtPnZjcHVfZnJlZSh2Y3B1KTsKIH0KIApAQCAtNTMzNCw3ICs1NDU1LDEyIEBACiAJfQogCXZjcHUtPmFyY2gubWNnX2NhcCA9IEtWTV9NQVhfTUNFX0JBTktTOwogCisJaWYgKCF6YWxsb2NfY3B1bWFza192YXIoJnZjcHUtPmFyY2gud2JpbnZkX2RpcnR5X21hc2ssIEdGUF9LRVJORUwpKQorCQlnb3RvIGZhaWxfZnJlZV9tY2VfYmFua3M7CisKIAlyZXR1cm4gMDsKK2ZhaWxfZnJlZV9tY2VfYmFua3M6CisJa2ZyZWUodmNwdS0+YXJjaC5tY2VfYmFua3MpOwogZmFpbF9mcmVlX2xhcGljOgogCWt2bV9mcmVlX2xhcGljKHZjcHUpOwogZmFpbF9tbXVfZGVzdHJveToKQEAgLTUzNjQsMTIgKzU0OTAsNiBAQAogCWlmICgha3ZtKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCWt2bS0+YXJjaC5hbGlhc2VzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGt2bV9tZW1fYWxpYXNlcyksIEdGUF9LRVJORUwpOwotCWlmICgha3ZtLT5hcmNoLmFsaWFzZXMpIHsKLQkJa2ZyZWUoa3ZtKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotCiAJSU5JVF9MSVNUX0hFQUQoJmt2bS0+YXJjaC5hY3RpdmVfbW11X3BhZ2VzKTsKIAlJTklUX0xJU1RfSEVBRCgma3ZtLT5hcmNoLmFzc2lnbmVkX2Rldl9oZWFkKTsKIApAQCAtNTQxMiwxMiArNTUzMiwxMiBAQAogdm9pZCBrdm1fYXJjaF9zeW5jX2V2ZW50cyhzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJa3ZtX2ZyZWVfYWxsX2Fzc2lnbmVkX2RldmljZXMoa3ZtKTsKKwlrdm1fZnJlZV9waXQoa3ZtKTsKIH0KIAogdm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlrdm1faW9tbXVfdW5tYXBfZ3Vlc3Qoa3ZtKTsKLQlrdm1fZnJlZV9waXQoa3ZtKTsKIAlrZnJlZShrdm0tPmFyY2gudnBpYyk7CiAJa2ZyZWUoa3ZtLT5hcmNoLnZpb2FwaWMpOwogCWt2bV9mcmVlX3ZjcHVzKGt2bSk7CkBAIC01NDI3LDcgKzU1NDcsNiBAQAogCWlmIChrdm0tPmFyY2guZXB0X2lkZW50aXR5X3BhZ2V0YWJsZSkKIAkJcHV0X3BhZ2Uoa3ZtLT5hcmNoLmVwdF9pZGVudGl0eV9wYWdldGFibGUpOwogCWNsZWFudXBfc3JjdV9zdHJ1Y3QoJmt2bS0+c3JjdSk7Ci0Ja2ZyZWUoa3ZtLT5hcmNoLmFsaWFzZXMpOwogCWtmcmVlKGt2bSk7CiB9CiAKQEAgLTU0MzgsNiArNTU1NywxMSBAQAogCQkJCWludCB1c2VyX2FsbG9jKQogewogCWludCBucGFnZXMgPSBtZW1zbG90LT5ucGFnZXM7CisJaW50IG1hcF9mbGFncyA9IE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUzsKKworCS8qIFByZXZlbnQgaW50ZXJuYWwgc2xvdCBwYWdlcyBmcm9tIGJlaW5nIG1vdmVkIGJ5IGZvcmsoKS9DT1cuICovCisJaWYgKG1lbXNsb3QtPmlkID49IEtWTV9NRU1PUllfU0xPVFMpCisJCW1hcF9mbGFncyA9IE1BUF9TSEFSRUQgfCBNQVBfQU5PTllNT1VTOwogCiAJLypUbyBrZWVwIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB1c2Vyc3BhY2UsCiAJICp4ODYgbmVlZHMgdG8gaGFubGRlICF1c2VyX2FsbG9jIGNhc2UuCkBAIC01NDUwLDcgKzU1NzQsNyBAQAogCQkJdXNlcnNwYWNlX2FkZHIgPSBkb19tbWFwKE5VTEwsIDAsCiAJCQkJCQkgbnBhZ2VzICogUEFHRV9TSVpFLAogCQkJCQkJIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCi0JCQkJCQkgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLAorCQkJCQkJIG1hcF9mbGFncywKIAkJCQkJCSAwKTsKIAkJCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCkBAIC01NTIzLDcgKzU2NDcsNyBAQAogCiAJbWUgPSBnZXRfY3B1KCk7CiAJaWYgKGNwdSAhPSBtZSAmJiAodW5zaWduZWQpY3B1IDwgbnJfY3B1X2lkcyAmJiBjcHVfb25saW5lKGNwdSkpCi0JCWlmICghdGVzdF9hbmRfc2V0X2JpdChLVk1fUkVRX0tJQ0ssICZ2Y3B1LT5yZXF1ZXN0cykpCisJCWlmIChhdG9taWNfeGNoZygmdmNwdS0+Z3Vlc3RfbW9kZSwgMCkpCiAJCQlzbXBfc2VuZF9yZXNjaGVkdWxlKGNwdSk7CiAJcHV0X2NwdSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5oIGIvYXJjaC94ODYva3ZtL3g4Ni5oCmluZGV4IGY0YjU0NDUuLmI3YTQwNDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuaAorKysgYi9hcmNoL3g4Ni9rdm0veDg2LmgKQEAgLTY1LDEzICs2NSw2IEBACiAJcmV0dXJuIGt2bV9yZWFkX2NyMF9iaXRzKHZjcHUsIFg4Nl9DUjBfUEcpOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fbWVtX2FsaWFzZXMgKmt2bV9hbGlhc2VzKHN0cnVjdCBrdm0gKmt2bSkKLXsKLQlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKGt2bS0+YXJjaC5hbGlhc2VzLAotCQkJc3JjdV9yZWFkX2xvY2tfaGVsZCgma3ZtLT5zcmN1KQotCQkJfHwgbG9ja2RlcF9pc19oZWxkKCZrdm0tPnNsb3RzX2xvY2spKTsKLX0KLQogdm9pZCBrdm1fYmVmb3JlX2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX2FmdGVyX2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL01ha2VmaWxlIGIvYXJjaC94ODYvbGliL01ha2VmaWxlCmluZGV4IGY4NzFlMDQuLmUxMGNmMDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9saWIvTWFrZWZpbGUKQEAgLTMwLDYgKzMwLDcgQEAKICAgICAgICAgbGliLXkgKz0gY2hlY2tzdW1fMzIubwogICAgICAgICBsaWIteSArPSBzdHJzdHJfMzIubwogICAgICAgICBsaWIteSArPSBzZW1hcGhvcmVfMzIubyBzdHJpbmdfMzIubworICAgICAgICBsaWIteSArPSBjbXB4Y2hnLm8KIGlmbmVxICgkKENPTkZJR19YODZfQ01QWENIRzY0KSx5KQogICAgICAgICBsaWIteSArPSBjbXB4Y2hnOGJfZW11Lm8gYXRvbWljNjRfMzg2XzMyLm8KIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvY21weGNoZy5jIGIvYXJjaC94ODYvbGliL2NtcHhjaGcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDYxOWY2ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2xpYi9jbXB4Y2hnLmMKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIGNtcHhjaGcqKCkgZmFsbGJhY2tzIGZvciBDUFUgbm90IHN1cHBvcnRpbmcgdGhlc2UgaW5zdHJ1Y3Rpb25zCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaWZuZGVmIENPTkZJR19YODZfQ01QWENIRwordW5zaWduZWQgbG9uZyBjbXB4Y2hnXzM4Nl91OCh2b2xhdGlsZSB2b2lkICpwdHIsIHU4IG9sZCwgdTggbmV3KQoreworCXU4IHByZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIFBvb3IgbWFuJ3MgY21weGNoZyBmb3IgMzg2LiBVbnN1aXRhYmxlIGZvciBTTVAgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcHJldiA9ICoodTggKilwdHI7CisJaWYgKHByZXYgPT0gb2xkKQorCQkqKHU4ICopcHRyID0gbmV3OworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gcHJldjsKK30KK0VYUE9SVF9TWU1CT0woY21weGNoZ18zODZfdTgpOworCit1bnNpZ25lZCBsb25nIGNtcHhjaGdfMzg2X3UxNih2b2xhdGlsZSB2b2lkICpwdHIsIHUxNiBvbGQsIHUxNiBuZXcpCit7CisJdTE2IHByZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIFBvb3IgbWFuJ3MgY21weGNoZyBmb3IgMzg2LiBVbnN1aXRhYmxlIGZvciBTTVAgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcHJldiA9ICoodTE2ICopcHRyOworCWlmIChwcmV2ID09IG9sZCkKKwkJKih1MTYgKilwdHIgPSBuZXc7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiBwcmV2OworfQorRVhQT1JUX1NZTUJPTChjbXB4Y2hnXzM4Nl91MTYpOworCit1bnNpZ25lZCBsb25nIGNtcHhjaGdfMzg2X3UzMih2b2xhdGlsZSB2b2lkICpwdHIsIHUzMiBvbGQsIHUzMiBuZXcpCit7CisJdTMyIHByZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIFBvb3IgbWFuJ3MgY21weGNoZyBmb3IgMzg2LiBVbnN1aXRhYmxlIGZvciBTTVAgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcHJldiA9ICoodTMyICopcHRyOworCWlmIChwcmV2ID09IG9sZCkKKwkJKih1MzIgKilwdHIgPSBuZXc7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiBwcmV2OworfQorRVhQT1JUX1NZTUJPTChjbXB4Y2hnXzM4Nl91MzIpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYyBiL2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jCmluZGV4IGE3MjViN2YuLjAwMDJhM2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jCisrKyBiL2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jCkBAIC0zNyw2ICszNywyOCBAQAogCWNvbnN0IGNoYXIgKm5hbWU7CiB9OwogCisvKiBpbmRpY2VzIGZvciBhZGRyZXNzX21hcmtlcnM7IGtlZXAgc3luYydkIHcvIGFkZHJlc3NfbWFya2VycyBiZWxvdyAqLworZW51bSBhZGRyZXNzX21hcmtlcnNfaWR4IHsKKwlVU0VSX1NQQUNFX05SID0gMCwKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJS0VSTkVMX1NQQUNFX05SLAorCUxPV19LRVJORUxfTlIsCisJVk1BTExPQ19TVEFSVF9OUiwKKwlWTUVNTUFQX1NUQVJUX05SLAorCUhJR0hfS0VSTkVMX05SLAorCU1PRFVMRVNfVkFERFJfTlIsCisJTU9EVUxFU19FTkRfTlIsCisjZWxzZQorCUtFUk5FTF9TUEFDRV9OUiwKKwlWTUFMTE9DX1NUQVJUX05SLAorCVZNQUxMT0NfRU5EX05SLAorIyBpZmRlZiBDT05GSUdfSElHSE1FTQorCVBLTUFQX0JBU0VfTlIsCisjIGVuZGlmCisJRklYQUREUl9TVEFSVF9OUiwKKyNlbmRpZgorfTsKKwogLyogQWRkcmVzcyBzcGFjZSBtYXJrZXJzIGhpbnRzICovCiBzdGF0aWMgc3RydWN0IGFkZHJfbWFya2VyIGFkZHJlc3NfbWFya2Vyc1tdID0gewogCXsgMCwgIlVzZXIgU3BhY2UiIH0sCkBAIC0zMzEsMTQgKzM1MywxMiBAQAogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCS8qIE5vdCBhIGNvbXBpbGUtdGltZSBjb25zdGFudCBvbiB4ODYtMzIgKi8KLQlhZGRyZXNzX21hcmtlcnNbMl0uc3RhcnRfYWRkcmVzcyA9IFZNQUxMT0NfU1RBUlQ7Ci0JYWRkcmVzc19tYXJrZXJzWzNdLnN0YXJ0X2FkZHJlc3MgPSBWTUFMTE9DX0VORDsKKwlhZGRyZXNzX21hcmtlcnNbVk1BTExPQ19TVEFSVF9OUl0uc3RhcnRfYWRkcmVzcyA9IFZNQUxMT0NfU1RBUlQ7CisJYWRkcmVzc19tYXJrZXJzW1ZNQUxMT0NfRU5EX05SXS5zdGFydF9hZGRyZXNzID0gVk1BTExPQ19FTkQ7CiAjIGlmZGVmIENPTkZJR19ISUdITUVNCi0JYWRkcmVzc19tYXJrZXJzWzRdLnN0YXJ0X2FkZHJlc3MgPSBQS01BUF9CQVNFOwotCWFkZHJlc3NfbWFya2Vyc1s1XS5zdGFydF9hZGRyZXNzID0gRklYQUREUl9TVEFSVDsKLSMgZWxzZQotCWFkZHJlc3NfbWFya2Vyc1s0XS5zdGFydF9hZGRyZXNzID0gRklYQUREUl9TVEFSVDsKKwlhZGRyZXNzX21hcmtlcnNbUEtNQVBfQkFTRV9OUl0uc3RhcnRfYWRkcmVzcyA9IFBLTUFQX0JBU0U7CiAjIGVuZGlmCisJYWRkcmVzc19tYXJrZXJzW0ZJWEFERFJfU1RBUlRfTlJdLnN0YXJ0X2FkZHJlc3MgPSBGSVhBRERSX1NUQVJUOwogI2VuZGlmCiAKIAlwZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImtlcm5lbF9wYWdlX3RhYmxlcyIsIDA2MDAsIE5VTEwsIE5VTEwsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0XzY0LmMgYi9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKaW5kZXggZWU0MWJiYS4uOWE2Njc0NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW5pdF82NC5jCisrKyBiL2FyY2gveDg2L21tL2luaXRfNjQuYwpAQCAtMiw3ICsyLDcgQEAKICAqICBsaW51eC9hcmNoL3g4Nl82NC9tbS9pbml0LmMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk1ICBMaW51cyBUb3J2YWxkcwotICogIENvcHlyaWdodCAoQykgMjAwMCAgUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PgorICogIENvcHlyaWdodCAoQykgMjAwMCAgUGF2ZWwgTWFjaGVrIDxwYXZlbEB1Y3cuY3o+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDAyLDIwMDMgQW5kaSBLbGVlbiA8YWtAc3VzZS5kZT4KICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMgYi9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKaW5kZXggMTJlNGQyZC4uM2JhNmUwNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gveDg2L21tL2lvcmVtYXAuYwpAQCAtNjIsOCArNjIsOCBAQAogc3RhdGljIHZvaWQgX19pb21lbSAqX19pb3JlbWFwX2NhbGxlcihyZXNvdXJjZV9zaXplX3QgcGh5c19hZGRyLAogCQl1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgcHJvdF92YWwsIHZvaWQgKmNhbGxlcikKIHsKLQl1bnNpZ25lZCBsb25nIHBmbiwgb2Zmc2V0LCB2YWRkcjsKLQlyZXNvdXJjZV9zaXplX3QgbGFzdF9hZGRyOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB2YWRkcjsKKwlyZXNvdXJjZV9zaXplX3QgcGZuLCBsYXN0X3BmbiwgbGFzdF9hZGRyOwogCWNvbnN0IHJlc291cmNlX3NpemVfdCB1bmFsaWduZWRfcGh5c19hZGRyID0gcGh5c19hZGRyOwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgdW5hbGlnbmVkX3NpemUgPSBzaXplOwogCXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CkBAIC0xMDAsMTAgKzEwMCw4IEBACiAJLyoKIAkgKiBEb24ndCBhbGxvdyBhbnlib2R5IHRvIHJlbWFwIG5vcm1hbCBSQU0gdGhhdCB3ZSdyZSB1c2luZy4uCiAJICovCi0JZm9yIChwZm4gPSBwaHlzX2FkZHIgPj4gUEFHRV9TSElGVDsKLQkJCQkocGZuIDw8IFBBR0VfU0hJRlQpIDwgKGxhc3RfYWRkciAmIFBBR0VfTUFTSyk7Ci0JCQkJcGZuKyspIHsKLQorCWxhc3RfcGZuID0gbGFzdF9hZGRyID4+IFBBR0VfU0hJRlQ7CisJZm9yIChwZm4gPSBwaHlzX2FkZHIgPj4gUEFHRV9TSElGVDsgcGZuIDw9IGxhc3RfcGZuOyBwZm4rKykgewogCQlpbnQgaXNfcmFtID0gcGFnZV9pc19yYW0ocGZuKTsKIAogCQlpZiAoaXNfcmFtICYmIHBmbl92YWxpZChwZm4pICYmICFQYWdlUmVzZXJ2ZWQocGZuX3RvX3BhZ2UocGZuKSkpCkBAIC0xMTUsNyArMTEzLDcgQEAKIAkgKiBNYXBwaW5ncyBoYXZlIHRvIGJlIHBhZ2UtYWxpZ25lZAogCSAqLwogCW9mZnNldCA9IHBoeXNfYWRkciAmIH5QQUdFX01BU0s7Ci0JcGh5c19hZGRyICY9IFBBR0VfTUFTSzsKKwlwaHlzX2FkZHIgJj0gUEhZU0lDQUxfUEFHRV9NQVNLOwogCXNpemUgPSBQQUdFX0FMSUdOKGxhc3RfYWRkcisxKSAtIHBoeXNfYWRkcjsKIAogCXJldHZhbCA9IHJlc2VydmVfbWVtdHlwZShwaHlzX2FkZHIsICh1NjQpcGh5c19hZGRyICsgc2l6ZSwKQEAgLTYxMyw3ICs2MTEsNyBAQAogCQlyZXR1cm47CiAJfQogCW9mZnNldCA9IHZpcnRfYWRkciAmIH5QQUdFX01BU0s7Ci0JbnJwYWdlcyA9IFBBR0VfQUxJR04ob2Zmc2V0ICsgc2l6ZSAtIDEpID4+IFBBR0VfU0hJRlQ7CisJbnJwYWdlcyA9IFBBR0VfQUxJR04ob2Zmc2V0ICsgc2l6ZSkgPj4gUEFHRV9TSElGVDsKIAogCWlkeCA9IEZJWF9CVE1BUF9CRUdJTiAtIE5SX0ZJWF9CVE1BUFMqc2xvdDsKIAl3aGlsZSAobnJwYWdlcyA+IDApIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2ttbWlvLmMgYi9hcmNoL3g4Ni9tbS9rbW1pby5jCmluZGV4IDVkMGU2N2YuLmU1ZDVlMmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2ttbWlvLmMKKysrIGIvYXJjaC94ODYvbW0va21taW8uYwpAQCAtNDUsNiArNDUsOCBAQAogCSAqIFByb3RlY3RlZCBieSBrbW1pb19sb2NrLCB3aGVuIGxpbmtlZCBpbnRvIGttbWlvX3BhZ2VfdGFibGUuCiAJICovCiAJaW50IGNvdW50OworCisJYm9vbCBzY2hlZHVsZWRfZm9yX3JlbGVhc2U7CiB9OwogCiBzdHJ1Y3Qga21taW9fZGVsYXllZF9yZWxlYXNlIHsKQEAgLTM5OCw4ICs0MDAsMTEgQEAKIAlCVUdfT04oZi0+Y291bnQgPCAwKTsKIAlpZiAoIWYtPmNvdW50KSB7CiAJCWRpc2FybV9rbW1pb19mYXVsdF9wYWdlKGYpOwotCQlmLT5yZWxlYXNlX25leHQgPSAqcmVsZWFzZV9saXN0OwotCQkqcmVsZWFzZV9saXN0ID0gZjsKKwkJaWYgKCFmLT5zY2hlZHVsZWRfZm9yX3JlbGVhc2UpIHsKKwkJCWYtPnJlbGVhc2VfbmV4dCA9ICpyZWxlYXNlX2xpc3Q7CisJCQkqcmVsZWFzZV9saXN0ID0gZjsKKwkJCWYtPnNjaGVkdWxlZF9mb3JfcmVsZWFzZSA9IHRydWU7CisJCX0KIAl9CiB9CiAKQEAgLTQ3MSw4ICs0NzYsMTAgQEAKIAkJCXByZXZwID0gJmYtPnJlbGVhc2VfbmV4dDsKIAkJfSBlbHNlIHsKIAkJCSpwcmV2cCA9IGYtPnJlbGVhc2VfbmV4dDsKKwkJCWYtPnJlbGVhc2VfbmV4dCA9IE5VTEw7CisJCQlmLT5zY2hlZHVsZWRfZm9yX3JlbGVhc2UgPSBmYWxzZTsKIAkJfQotCQlmID0gZi0+cmVsZWFzZV9uZXh0OworCQlmID0gKnByZXZwOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZrbW1pb19sb2NrLCBmbGFncyk7CiAKQEAgLTUxMCw2ICs1MTcsOSBAQAogCWttbWlvX2NvdW50LS07CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgma21taW9fbG9jaywgZmxhZ3MpOwogCisJaWYgKCFyZWxlYXNlX2xpc3QpCisJCXJldHVybjsKKwogCWRyZWxlYXNlID0ga21hbGxvYyhzaXplb2YoKmRyZWxlYXNlKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFkcmVsZWFzZSkgewogCQlwcl9jcml0KCJsZWFraW5nIGttbWlvX2ZhdWx0X3BhZ2Ugb2JqZWN0cy5cbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0LmMgYi9hcmNoL3g4Ni9tbS9wYXQuYwppbmRleCA2NDEyMWExLi5mNmZmNTdiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYXQuYworKysgYi9hcmNoL3g4Ni9tbS9wYXQuYwpAQCAtMTU4LDcgKzE1OCw3IEBACiAJcmV0dXJuIHJlcV90eXBlOwogfQogCi1zdGF0aWMgaW50IHBhdF9wYWdlcmFuZ2VfaXNfcmFtKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQorc3RhdGljIGludCBwYXRfcGFnZXJhbmdlX2lzX3JhbShyZXNvdXJjZV9zaXplX3Qgc3RhcnQsIHJlc291cmNlX3NpemVfdCBlbmQpCiB7CiAJaW50IHJhbV9wYWdlID0gMCwgbm90X3JhbXBhZ2UgPSAwOwogCXVuc2lnbmVkIGxvbmcgcGFnZV9ucjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BmX2luLmMgYi9hcmNoL3g4Ni9tbS9wZl9pbi5jCmluZGV4IDMwOGUzMjUuLjM4ZTZkMTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BmX2luLmMKKysrIGIvYXJjaC94ODYvbW0vcGZfaW4uYwpAQCAtNDAsMTYgKzQwLDE2IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHJlZ19yb3BbXSA9IHsKIAkweDhBLCAweDhCLCAweEI2MEYsIDB4QjcwRiwgMHhCRTBGLCAweEJGMEYKIH07Ci1zdGF0aWMgdW5zaWduZWQgaW50IHJlZ193b3BbXSA9IHsgMHg4OCwgMHg4OSB9Oworc3RhdGljIHVuc2lnbmVkIGludCByZWdfd29wW10gPSB7IDB4ODgsIDB4ODksIDB4QUEsIDB4QUIgfTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW1tX3dvcFtdID0geyAweEM2LCAweEM3IH07CiAvKiBJQTMyIE1hbnVhbCAzLCAzLTQzMiovCi1zdGF0aWMgdW5zaWduZWQgaW50IHJ3OFtdID0geyAweDg4LCAweDhBLCAweEM2IH07CitzdGF0aWMgdW5zaWduZWQgaW50IHJ3OFtdID0geyAweDg4LCAweDhBLCAweEM2LCAweEFBIH07CiBzdGF0aWMgdW5zaWduZWQgaW50IHJ3MzJbXSA9IHsKLQkweDg5LCAweDhCLCAweEM3LCAweEI2MEYsIDB4QjcwRiwgMHhCRTBGLCAweEJGMEYKKwkweDg5LCAweDhCLCAweEM3LCAweEI2MEYsIDB4QjcwRiwgMHhCRTBGLCAweEJGMEYsIDB4QUIKIH07Ci1zdGF0aWMgdW5zaWduZWQgaW50IG13OFtdID0geyAweDg4LCAweDhBLCAweEM2LCAweEI2MEYsIDB4QkUwRiB9Oworc3RhdGljIHVuc2lnbmVkIGludCBtdzhbXSA9IHsgMHg4OCwgMHg4QSwgMHhDNiwgMHhCNjBGLCAweEJFMEYsIDB4QUEgfTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbXcxNltdID0geyAweEI3MEYsIDB4QkYwRiB9Owotc3RhdGljIHVuc2lnbmVkIGludCBtdzMyW10gPSB7IDB4ODksIDB4OEIsIDB4QzcgfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXczMltdID0geyAweDg5LCAweDhCLCAweEM3LCAweEFCIH07CiBzdGF0aWMgdW5zaWduZWQgaW50IG13NjRbXSA9IHt9OwogI2Vsc2UgLyogbm90IF9faTM4Nl9fICovCiBzdGF0aWMgdW5zaWduZWQgY2hhciBwcmVmaXhfY29kZXNbXSA9IHsKQEAgLTYzLDIwICs2MywyMCBAQAogc3RhdGljIHVuc2lnbmVkIGludCByZWdfcm9wW10gPSB7CiAJMHg4QSwgMHg4QiwgMHhCNjBGLCAweEI3MEYsIDB4QkUwRiwgMHhCRjBGCiB9Owotc3RhdGljIHVuc2lnbmVkIGludCByZWdfd29wW10gPSB7IDB4ODgsIDB4ODkgfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmVnX3dvcFtdID0geyAweDg4LCAweDg5LCAweEFBLCAweEFCIH07CiBzdGF0aWMgdW5zaWduZWQgaW50IGltbV93b3BbXSA9IHsgMHhDNiwgMHhDNyB9Owotc3RhdGljIHVuc2lnbmVkIGludCBydzhbXSA9IHsgMHhDNiwgMHg4OCwgMHg4QSB9Oworc3RhdGljIHVuc2lnbmVkIGludCBydzhbXSA9IHsgMHhDNiwgMHg4OCwgMHg4QSwgMHhBQSB9Owogc3RhdGljIHVuc2lnbmVkIGludCBydzMyW10gPSB7Ci0JMHhDNywgMHg4OSwgMHg4QiwgMHhCNjBGLCAweEI3MEYsIDB4QkUwRiwgMHhCRjBGCisJMHhDNywgMHg4OSwgMHg4QiwgMHhCNjBGLCAweEI3MEYsIDB4QkUwRiwgMHhCRjBGLCAweEFCCiB9OwogLyogOCBiaXQgb25seSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBtdzhbXSA9IHsgMHhDNiwgMHg4OCwgMHg4QSwgMHhCNjBGLCAweEJFMEYgfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXc4W10gPSB7IDB4QzYsIDB4ODgsIDB4OEEsIDB4QjYwRiwgMHhCRTBGLCAweEFBIH07CiAvKiAxNiBiaXQgb25seSAqLwogc3RhdGljIHVuc2lnbmVkIGludCBtdzE2W10gPSB7IDB4QjcwRiwgMHhCRjBGIH07CiAvKiAxNiBvciAzMiBiaXQgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgbXczMltdID0geyAweEM3IH07CiAvKiAxNiwgMzIgb3IgNjQgYml0ICovCi1zdGF0aWMgdW5zaWduZWQgaW50IG13NjRbXSA9IHsgMHg4OSwgMHg4QiB9Oworc3RhdGljIHVuc2lnbmVkIGludCBtdzY0W10gPSB7IDB4ODksIDB4OEIsIDB4QUIgfTsKICNlbmRpZiAvKiBub3QgX19pMzg2X18gKi8KIAogc3RydWN0IHByZWZpeF9iaXRzIHsKQEAgLTQxMCw3ICs0MTAsNiBAQAogdW5zaWduZWQgbG9uZyBnZXRfaW5zX3JlZ192YWwodW5zaWduZWQgbG9uZyBpbnNfYWRkciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgaW50IG9wY29kZTsKLQl1bnNpZ25lZCBjaGFyIG1vZF9ybTsKIAlpbnQgcmVnOwogCXVuc2lnbmVkIGNoYXIgKnA7CiAJc3RydWN0IHByZWZpeF9iaXRzIHByZjsKQEAgLTQzNyw4ICs0MzYsMTMgQEAKIAlnb3RvIGVycjsKIAogZG9fd29yazoKLQltb2Rfcm0gPSAqcDsKLQlyZWcgPSAoKG1vZF9ybSA+PiAzKSAmIDB4NykgfCAocHJmLnJleHIgPDwgMyk7CisJLyogZm9yIFNUT1MsIHNvdXJjZSByZWdpc3RlciBpcyBmaXhlZCAqLworCWlmIChvcGNvZGUgPT0gMHhBQSB8fCBvcGNvZGUgPT0gMHhBQikgeworCQlyZWcgPSBhcmdfQVg7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgY2hhciBtb2Rfcm0gPSAqcDsKKwkJcmVnID0gKChtb2Rfcm0gPj4gMykgJiAweDcpIHwgKHByZi5yZXhyIDw8IDMpOworCX0KIAlzd2l0Y2ggKGdldF9pbnNfcmVnX3dpZHRoKGluc19hZGRyKSkgewogCWNhc2UgMToKIAkJcmV0dXJuICpnZXRfcmVnX3c4KHJlZywgcHJmLnJleCwgcmVncyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS90ZXN0bW1pb3RyYWNlLmMgYi9hcmNoL3g4Ni9tbS90ZXN0bW1pb3RyYWNlLmMKaW5kZXggODU2NWQ5NC4uMzg4NjhhZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vdGVzdG1taW90cmFjZS5jCisrKyBiL2FyY2gveDg2L21tL3Rlc3RtbWlvdHJhY2UuYwpAQCAtOTAsNiArOTAsMjcgQEAKIAlpb3VubWFwKHApOwogfQogCisvKgorICogVGVzdHMgaG93IG1taW90cmFjZSBiZWhhdmVzIGluIGZhY2Ugb2YgbXVsdGlwbGUgaW9yZW1hcCAvIGlvdW5tYXBzIGluCisgKiBhIHNob3J0IHRpbWUuIFdlIGhhZCBhIGJ1ZyBpbiBkZWZlcnJlZCBmcmVlaW5nIHByb2NlZHVyZSB3aGljaCB0cmllZAorICogdG8gZnJlZSB0aGlzIHJlZ2lvbiBtdWx0aXBsZSB0aW1lcyAoaW9yZW1hcCBjYW4gcmV1c2UgdGhlIHNhbWUgYWRkcmVzcworICogZm9yIG1hbnkgbWFwcGluZ3MpLgorICovCitzdGF0aWMgdm9pZCBkb190ZXN0X2J1bGtfaW9yZW1hcHBpbmcodm9pZCkKK3sKKwl2b2lkIF9faW9tZW0gKnA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7ICsraSkgeworCQlwID0gaW9yZW1hcF9ub2NhY2hlKG1taW9fYWRkcmVzcywgUEFHRV9TSVpFKTsKKwkJaWYgKHApCisJCQlpb3VubWFwKHApOworCX0KKworCS8qIEZvcmNlIGZyZWVpbmcuIElmIGl0IHdpbGwgY3Jhc2ggd2Ugd2lsbCBrbm93IHdoeS4gKi8KKwlzeW5jaHJvbml6ZV9yY3UoKTsKK30KKwogc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IChyZWFkX2ZhcikgPyAoOCA8PCAyMCkgOiAoMTYgPDwgMTApOwpAQCAtMTA0LDYgKzEyNSw3IEBACiAJCSAgICJhbmQgd3JpdGluZyAxNiBrQiBvZiBydWJiaXNoIGluIHRoZXJlLlxuIiwKIAkJICAgc2l6ZSA+PiAxMCwgbW1pb19hZGRyZXNzKTsKIAlkb190ZXN0KHNpemUpOworCWRvX3Rlc3RfYnVsa19pb3JlbWFwcGluZygpOwogCXByX2luZm8oIkFsbCBkb25lLlxuIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS90bGIuYyBiL2FyY2gveDg2L21tL3RsYi5jCmluZGV4IDQyNmYzYTEuLmMwM2YxNGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3RsYi5jCisrKyBiL2FyY2gveDg2L21tL3RsYi5jCkBAIC0yNzgsMTEgKzI3OCw5IEBACiAKIHN0YXRpYyB2b2lkIGRvX2ZsdXNoX3RsYl9hbGwodm9pZCAqaW5mbykKIHsKLQl1bnNpZ25lZCBsb25nIGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQogCV9fZmx1c2hfdGxiX2FsbCgpOwogCWlmIChwZXJjcHVfcmVhZChjcHVfdGxic3RhdGUuc3RhdGUpID09IFRMQlNUQVRFX0xBWlkpCi0JCWxlYXZlX21tKGNwdSk7CisJCWxlYXZlX21tKHNtcF9wcm9jZXNzb3JfaWQoKSk7CiB9CiAKIHZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5jIGIvYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5jCmluZGV4IGIyOGQyZjEuLjFiYTY3ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL25taV9pbnQuYworKysgYi9hcmNoL3g4Ni9vcHJvZmlsZS9ubWlfaW50LmMKQEAgLTYzNCw2ICs2MzQsMTggQEAKIAlpZiAoZm9yY2VfYXJjaF9wZXJmbW9uICYmIGNwdV9oYXNfYXJjaF9wZXJmbW9uKQogCQlyZXR1cm4gMDsKIAorCS8qCisJICogRG9jdW1lbnRhdGlvbiBvbiBpZGVudGlmeWluZyBJbnRlbCBwcm9jZXNzb3JzIGJ5IENQVSBmYW1pbHkKKwkgKiBhbmQgbW9kZWwgY2FuIGJlIGZvdW5kIGluIHRoZSBJbnRlbCBTb2Z0d2FyZSBEZXZlbG9wZXIncworCSAqIE1hbnVhbHMgKFNETSk6CisJICoKKwkgKiAgaHR0cDovL3d3dy5pbnRlbC5jb20vcHJvZHVjdHMvcHJvY2Vzc29yL21hbnVhbHMvCisJICoKKwkgKiBBcyBvZiBNYXkgMjAxMCB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhpcyB3YXMgaW4gdGhlOgorCSAqICJJbnRlbCA2NCBhbmQgSUEtMzIgQXJjaGl0ZWN0dXJlcyBTb2Z0d2FyZSBEZXZlbG9wZXIncworCSAqIE1hbnVhbCBWb2x1bWUgM0I6IFN5c3RlbSBQcm9ncmFtbWluZyBHdWlkZSIsICJUYWJsZSBCLTEKKwkgKiBDUFVJRCBTaWduYXR1cmUgVmFsdWVzIG9mIERpc3BsYXlGYW1pbHlfRGlzcGxheU1vZGVsIi4KKwkgKi8KIAlzd2l0Y2ggKGNwdV9tb2RlbCkgewogCWNhc2UgMCAuLi4gMjoKIAkJKmNwdV90eXBlID0gImkzODYvcHBybyI7CkBAIC02NTUsMTIgKzY2NywxMiBAQAogCWNhc2UgMTU6IGNhc2UgMjM6CiAJCSpjcHVfdHlwZSA9ICJpMzg2L2NvcmVfMiI7CiAJCWJyZWFrOworCWNhc2UgMHgxYToKIAljYXNlIDB4MmU6Ci0JY2FzZSAyNjoKIAkJc3BlYyA9ICZvcF9hcmNoX3BlcmZtb25fc3BlYzsKIAkJKmNwdV90eXBlID0gImkzODYvY29yZV9pNyI7CiAJCWJyZWFrOwotCWNhc2UgMjg6CisJY2FzZSAweDFjOgogCQkqY3B1X3R5cGUgPSAiaTM4Ni9hdG9tIjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9hY3BpLmMgYi9hcmNoL3g4Ni9wY2kvYWNwaS5jCmluZGV4IDJlYzA0YzQuLjE1NDY2YzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9hY3BpLmMKKysrIGIvYXJjaC94ODYvcGNpL2FjcGkuYwpAQCAtMzQsNiArMzQsMTUgQEAKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAieDM4MDAiKSwKIAkJfSwKIAl9LAorCS8qIGh0dHBzOi8vYnVnemlsbGEua2VybmVsLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwMDcgKi8KKwkvKiAyMDA2IEFNRCBIVC9WSUEgc3lzdGVtIHdpdGggdHdvIGhvc3QgYnJpZGdlcyAqLworICAgICAgICB7CisJCS5jYWxsYmFjayA9IHNldF91c2VfY3JzLAorCQkuaWRlbnQgPSAiQVNSb2NrIEFMaXZlU0FUQTItR0xBTiIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBTGl2ZVNBVEEyLUdMQU4iKSwKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICB9LAogCXt9CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvY29tbW9uLmMgYi9hcmNoL3g4Ni9wY2kvY29tbW9uLmMKaW5kZXggMjE1YTI3YS4uYTA3NzJhZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2NvbW1vbi5jCisrKyBiL2FyY2gveDg2L3BjaS9jb21tb24uYwpAQCAtMTI1LDYgKzEyNSwyMyBAQAogc3RhdGljIHZvaWQgX19kZXZpbml0IHBjaWJpb3NfZml4dXBfZGV2aWNlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXN0cnVjdCByZXNvdXJjZSAqcm9tX3IgPSAmZGV2LT5yZXNvdXJjZVtQQ0lfUk9NX1JFU09VUkNFXTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmJhcl9yOworCWludCBiYXI7CisKKwlpZiAocGNpX3Byb2JlICYgUENJX05PQVNTSUdOX0JBUlMpIHsKKwkJLyoKKwkJKiBJZiB0aGUgQklPUyBkaWQgbm90IGFzc2lnbiB0aGUgQkFSLCB6ZXJvIG91dCB0aGUKKwkJKiByZXNvdXJjZSBzbyB0aGUga2VybmVsIGRvZXNuJ3QgYXR0bWVwdCB0byBhc3NpZ24KKwkJKiBpdCBsYXRlciBvbiBpbiBwY2lfYXNzaWduX3VuYXNzaWduZWRfcmVzb3VyY2VzCisJCSovCisJCWZvciAoYmFyID0gMDsgYmFyIDw9IFBDSV9TVERfUkVTT1VSQ0VfRU5EOyBiYXIrKykgeworCQkJYmFyX3IgPSAmZGV2LT5yZXNvdXJjZVtiYXJdOworCQkJaWYgKGJhcl9yLT5zdGFydCA9PSAwICYmIGJhcl9yLT5lbmQgIT0gMCkgeworCQkJCWJhcl9yLT5mbGFncyA9IDA7CisJCQkJYmFyX3ItPmVuZCA9IDA7CisJCQl9CisJCX0KKwl9CiAKIAlpZiAocGNpX3Byb2JlICYgUENJX05PQVNTSUdOX1JPTVMpIHsKIAkJaWYgKHJvbV9yLT5wYXJlbnQpCkBAIC01MDksNiArNTI2LDkgQEAKIAl9IGVsc2UgaWYgKCFzdHJjbXAoc3RyLCAibm9yb20iKSkgewogCQlwY2lfcHJvYmUgfD0gUENJX05PQVNTSUdOX1JPTVM7CiAJCXJldHVybiBOVUxMOworCX0gZWxzZSBpZiAoIXN0cmNtcChzdHIsICJub2JhciIpKSB7CisJCXBjaV9wcm9iZSB8PSBQQ0lfTk9BU1NJR05fQkFSUzsKKwkJcmV0dXJuIE5VTEw7CiAJfSBlbHNlIGlmICghc3RyY21wKHN0ciwgImFzc2lnbi1idXNzZXMiKSkgewogCQlwY2lfcHJvYmUgfD0gUENJX0FTU0lHTl9BTExfQlVTU0VTOwogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9pMzg2LmMgYi9hcmNoL3g4Ni9wY2kvaTM4Ni5jCmluZGV4IDZmZGIzZWMuLjU1MjUzMDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9pMzg2LmMKKysrIGIvYXJjaC94ODYvcGNpL2kzODYuYwpAQCAtMTg0LDYgKzE4NCw3IEBACiAJCQkJCWlkeCwgciwgZGlzYWJsZWQsIHBhc3MpOwogCQkJCWlmIChwY2lfY2xhaW1fcmVzb3VyY2UoZGV2LCBpZHgpIDwgMCkgewogCQkJCQkvKiBXZSdsbCBhc3NpZ24gYSBuZXcgYWRkcmVzcyBsYXRlciAqLworCQkJCQlkZXYtPmZ3X2FkZHJbaWR4XSA9IHItPnN0YXJ0OwogCQkJCQlyLT5lbmQgLT0gci0+c3RhcnQ7CiAJCQkJCXItPnN0YXJ0ID0gMDsKIAkJCQl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvaXJxLmMgYi9hcmNoL3g4Ni9wY2kvaXJxLmMKaW5kZXggOTgxMGEwZi4uZjU0N2VlMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2lycS5jCisrKyBiL2FyY2gveDg2L3BjaS9pcnEuYwpAQCAtOTg5LDcgKzk4OSw3IEBACiAJZGV2X2luZm8oJmRldi0+ZGV2LCAiJXMgUENJIElOVCAlYyAtPiBJUlEgJWRcbiIsIG1zZywgJ0EnICsgcGluIC0gMSwgaXJxKTsKIAogCS8qIFVwZGF0ZSBJUlEgZm9yIGFsbCBkZXZpY2VzIHdpdGggdGhlIHNhbWUgcGlycSB2YWx1ZSAqLwotCXdoaWxlICgoZGV2MiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGRldjIpKSAhPSBOVUxMKSB7CisJZm9yX2VhY2hfcGNpX2RldihkZXYyKSB7CiAJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldjIsIFBDSV9JTlRFUlJVUFRfUElOLCAmcGluKTsKIAkJaWYgKCFwaW4pCiAJCQljb250aW51ZTsKQEAgLTEwMjgsNyArMTAyOCw3IEBACiAJdTggcGluOwogCiAJREJHKEtFUk5fREVCVUcgIlBDSTogSVJRIGZpeHVwXG4iKTsKLQl3aGlsZSAoKGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGRldikpICE9IE5VTEwpIHsKKwlmb3JfZWFjaF9wY2lfZGV2KGRldikgewogCQkvKgogCQkgKiBJZiB0aGUgQklPUyBoYXMgc2V0IGFuIG91dCBvZiByYW5nZSBJUlEgbnVtYmVyLCBqdXN0CiAJCSAqIGlnbm9yZSBpdC4gIEFsc28ga2VlcCB0cmFjayBvZiB3aGljaCBJUlEncyBhcmUKQEAgLTEwNTIsNyArMTA1Miw3IEBACiAJCXJldHVybjsKIAogCWRldiA9IE5VTEw7Ci0Jd2hpbGUgKChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkZXYpKSAhPSBOVUxMKSB7CisJZm9yX2VhY2hfcGNpX2RldihkZXYpIHsKIAkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSU5URVJSVVBUX1BJTiwgJnBpbik7CiAJCWlmICghcGluKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvbGVnYWN5LmMgYi9hcmNoL3g4Ni9wY2kvbGVnYWN5LmMKaW5kZXggOGQ0NjBlYS4uYzg5MjY2YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2xlZ2FjeS5jCisrKyBiL2FyY2gveDg2L3BjaS9sZWdhY3kuYwpAQCAtMzYsNyArMzYsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIHBjaWJpb3Nfc2Nhbl9zcGVjaWZpY19idXMoaW50IGJ1c24pCit2b2lkIF9fZGV2aW5pdCBwY2liaW9zX3NjYW5fc3BlY2lmaWNfYnVzKGludCBidXNuKQogewogCWludCBkZXZmbjsKIAlsb25nIG5vZGU7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvbXJzdC5jIGIvYXJjaC94ODYvcGNpL21yc3QuYwppbmRleCA3ZWYzYTI3Li5jYjI5MTkxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvbXJzdC5jCisrKyBiL2FyY2gveDg2L3BjaS9tcnN0LmMKQEAgLTY2LDggKzY2LDkgQEAKIAkJCQkJICBkZXZmbiwgcG9zLCA0LCAmcGNpZV9jYXApKQogCQkJcmV0dXJuIDA7CiAKLQkJaWYgKHBjaWVfY2FwID09IDB4ZmZmZmZmZmYpCi0JCQlyZXR1cm4gMDsKKwkJaWYgKFBDSV9FWFRfQ0FQX0lEKHBjaWVfY2FwKSA9PSAweDAwMDAgfHwKKwkJCVBDSV9FWFRfQ0FQX0lEKHBjaWVfY2FwKSA9PSAweGZmZmYpCisJCQlicmVhazsKIAogCQlpZiAoUENJX0VYVF9DQVBfSUQocGNpZV9jYXApID09IFBDSV9FWFRfQ0FQX0lEX1ZORFIpIHsKIAkJCXJhd19wY2lfZXh0X29wcy0+cmVhZChwY2lfZG9tYWluX25yKGJ1cyksIGJ1cy0+bnVtYmVyLApAQCAtNzYsNyArNzcsNyBAQAogCQkJCXJldHVybiBwb3M7CiAJCX0KIAotCQlwb3MgPSBwY2llX2NhcCA+PiAyMDsKKwkJcG9zID0gUENJX0VYVF9DQVBfTkVYVChwY2llX2NhcCk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wb3dlci9jcHUuYyBiL2FyY2gveDg2L3Bvd2VyL2NwdS5jCmluZGV4IDEyOTBiYTUuLmU3ZThjNWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Bvd2VyL2NwdS5jCisrKyBiL2FyY2gveDg2L3Bvd2VyL2NwdS5jCkBAIC00LDcgKzQsNyBAQAogICogRGlzdHJpYnV0ZSB1bmRlciBHUEx2MgogICoKICAqIENvcHlyaWdodCAoYykgMjAwNyBSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDIgUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PgorICogQ29weXJpZ2h0IChjKSAyMDAyIFBhdmVsIE1hY2hlayA8cGF2ZWxAdWN3LmN6PgogICogQ29weXJpZ2h0IChjKSAyMDAxIFBhdHJpY2sgTW9jaGVsIDxtb2NoZWxAb3NkbC5vcmc+CiAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcG93ZXIvaGliZXJuYXRlXzY0LmMgYi9hcmNoL3g4Ni9wb3dlci9oaWJlcm5hdGVfNjQuYwppbmRleCBkMjRmOTgzLi40NjBmMzE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wb3dlci9oaWJlcm5hdGVfNjQuYworKysgYi9hcmNoL3g4Ni9wb3dlci9oaWJlcm5hdGVfNjQuYwpAQCAtNCw3ICs0LDcgQEAKICAqIERpc3RyaWJ1dGUgdW5kZXIgR1BMdjIKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDcgUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPgotICogQ29weXJpZ2h0IChjKSAyMDAyIFBhdmVsIE1hY2hlayA8cGF2ZWxAc3VzZS5jej4KKyAqIENvcHlyaWdodCAoYykgMjAwMiBQYXZlbCBNYWNoZWsgPHBhdmVsQHVjdy5jej4KICAqIENvcHlyaWdodCAoYykgMjAwMSBQYXRyaWNrIE1vY2hlbCA8bW9jaGVsQG9zZGwub3JnPgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Zkc28vTWFrZWZpbGUgYi9hcmNoL3g4Ni92ZHNvL01ha2VmaWxlCmluZGV4IDZiNGZmZWQuLjRhMmFmYTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Zkc28vTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvdmRzby9NYWtlZmlsZQpAQCAtMTIwLDcgKzEyMCw4IEBACiBxdWlldF9jbWRfdmRzbyA9IFZEU08gICAgJEAKICAgICAgIGNtZF92ZHNvID0gJChDQykgLW5vc3RkbGliIC1vICRAIFwKIAkJICAgICAgICQoVkRTT19MREZMQUdTKSAkKFZEU09fTERGTEFHU18kKGZpbHRlciAlLmxkcywkKF5GKSkpIFwKLQkJICAgICAgIC1XbCwtVCwkKGZpbHRlciAlLmxkcywkXikgJChmaWx0ZXIgJS5vLCReKQorCQkgICAgICAgLVdsLC1ULCQoZmlsdGVyICUubGRzLCReKSAkKGZpbHRlciAlLm8sJF4pICYmIFwKKwkJIHNoICQoc3JjdHJlZSkvJChzcmMpL2NoZWNrdW5kZWYuc2ggJyQoTk0pJyAnJEAnCiAKIFZEU09fTERGTEFHUyA9IC1mUElDIC1zaGFyZWQgJChjYWxsIGNjLWxkb3B0aW9uLCAtV2wkKGNvbW1hKS0taGFzaC1zdHlsZT1zeXN2KQogR0NPVl9QUk9GSUxFIDo9IG4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Zkc28vY2hlY2t1bmRlZi5zaCBiL2FyY2gveDg2L3Zkc28vY2hlY2t1bmRlZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZWU5MGE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvdmRzby9jaGVja3VuZGVmLnNoCkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9zaAorbm09IiQxIgorZmlsZT0iJDIiCiskbm0gIiRmaWxlIiB8IGdyZXAgJ14gKlUnID4gL2Rldi9udWxsIDI+JjEKK2lmIFsgJD8gLWVxIDEgXTsgdGhlbgorICAgIGV4aXQgMAorZWxzZQorICAgIGVjaG8gIiRmaWxlOiB1bmRlZmluZWQgc3ltYm9scyBmb3VuZCIgPiYyCisgICAgZXhpdCAxCitmaQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmRzby92ZHNvMzItc2V0dXAuYyBiL2FyY2gveDg2L3Zkc28vdmRzbzMyLXNldHVwLmMKaW5kZXggMDJiNDQyZS4uMzZkZjk5MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdmRzby92ZHNvMzItc2V0dXAuYworKysgYi9hcmNoL3g4Ni92ZHNvL3Zkc28zMi1zZXR1cC5jCkBAIC0zNzQsNyArMzc0LDcgQEAKIAogI2lmZGVmIENPTkZJR19YODZfNjQKIAotX19pbml0Y2FsbChzeXNlbnRlcl9zZXR1cCk7CitzdWJzeXNfaW5pdGNhbGwoc3lzZW50ZXJfc2V0dXApOwogCiAjaWZkZWYgQ09ORklHX1NZU0NUTAogLyogUmVnaXN0ZXIgdnN5c2NhbGwzMiBpbnRvIHRoZSBBQkkgdGFibGUgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Zkc28vdm1hLmMgYi9hcmNoL3g4Ni92ZHNvL3ZtYS5jCmluZGV4IGFjNzQ4NjkuLjRiNWQyNmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Zkc28vdm1hLmMKKysrIGIvYXJjaC94ODYvdmRzby92bWEuYwpAQCAtNjcsNiArNjcsNyBAQAogCSoodHlwZW9mKF9fICMjIHgpICoqKSB2YXJfcmVmKFZEU082NF9TWU1CT0wodmJhc2UsIHgpLCAjeCkgPSAmX18gIyMgeDsKICNpbmNsdWRlICJ2ZXh0ZXJuLmgiCiAjdW5kZWYgVkVYVEVSTgorCXZ1bm1hcCh2YmFzZSk7CiAJcmV0dXJuIDA7CiAKICBvb206CkBAIC03NCw3ICs3NSw3IEBACiAJdmRzb19lbmFibGVkID0gMDsKIAlyZXR1cm4gLUVOT01FTTsKIH0KLV9faW5pdGNhbGwoaW5pdF92ZHNvX3ZhcnMpOworc3Vic3lzX2luaXRjYWxsKGluaXRfdmRzb192YXJzKTsKIAogc3RydWN0IGxpbnV4X2JpbnBybTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL0tjb25maWcgYi9hcmNoL3g4Ni94ZW4vS2NvbmZpZwppbmRleCBiODNlMTE5Li42ODEyOGExIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vS2NvbmZpZworKysgYi9hcmNoL3g4Ni94ZW4vS2NvbmZpZwpAQCAtMTMsNiArMTMsMTEgQEAKIAkgIGtlcm5lbCB0byBib290IGluIGEgcGFyYXZpcnR1YWxpemVkIGVudmlyb25tZW50IHVuZGVyIHRoZQogCSAgWGVuIGh5cGVydmlzb3IuCiAKK2NvbmZpZyBYRU5fUFZIVk0KKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBYRU4KKwlkZXBlbmRzIG9uIFg4Nl9MT0NBTF9BUElDCisKIGNvbmZpZyBYRU5fTUFYX0RPTUFJTl9NRU1PUlkKICAgICAgICBpbnQgIk1heGltdW0gYWxsb3dlZCBzaXplIG9mIGEgZG9tYWluIGluIGdpZ2FieXRlcyIKICAgICAgICBkZWZhdWx0IDggaWYgWDg2XzMyCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vTWFrZWZpbGUgYi9hcmNoL3g4Ni94ZW4vTWFrZWZpbGUKaW5kZXggM2JiNGZjMi4uOTMwOTU0NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L3hlbi9NYWtlZmlsZQpAQCAtMTIsNyArMTIsNyBAQAogCiBvYmoteQkJOj0gZW5saWdodGVuLm8gc2V0dXAubyBtdWx0aWNhbGxzLm8gbW11Lm8gaXJxLm8gXAogCQkJdGltZS5vIHhlbi1hc20ubyB4ZW4tYXNtXyQoQklUUykubyBcCi0JCQlncmFudC10YWJsZS5vIHN1c3BlbmQubworCQkJZ3JhbnQtdGFibGUubyBzdXNwZW5kLm8gcGxhdGZvcm0tcGNpLXVucGx1Zy5vCiAKIG9iai0kKENPTkZJR19TTVApCQkrPSBzbXAubwogb2JqLSQoQ09ORklHX1BBUkFWSVJUX1NQSU5MT0NLUykrPSBzcGlubG9jay5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKaW5kZXggNjVkOGQ3OS4uZDRmZjVlOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCisrKyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwpAQCAtMTEsNiArMTEsNyBAQAogICogSmVyZW15IEZpdHpoYXJkaW5nZSA8amVyZW15QHhlbnNvdXJjZS5jb20+LCBYZW5Tb3VyY2UgSW5jLCAyMDA3CiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KQEAgLTM1LDggKzM2LDEwIEBACiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9waHlzZGV2Lmg+CiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS92Y3B1Lmg+CisjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9tZW1vcnkuaD4KICNpbmNsdWRlIDx4ZW4vZmVhdHVyZXMuaD4KICNpbmNsdWRlIDx4ZW4vcGFnZS5oPgorI2luY2x1ZGUgPHhlbi9odm0uaD4KICNpbmNsdWRlIDx4ZW4vaHZjLWNvbnNvbGUuaD4KIAogI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgpAQCAtNTUsNyArNTgsOSBAQAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9zdGFja3Byb3RlY3Rvci5oPgorI2luY2x1ZGUgPGFzbS9oeXBlcnZpc29yLmg+CiAKICNpbmNsdWRlICJ4ZW4tb3BzLmgiCiAjaW5jbHVkZSAibW11LmgiCkBAIC03Niw2ICs4MSwxMCBAQAogCiB2b2lkICp4ZW5faW5pdGlhbF9nZHQ7CiAKK1JFU0VSVkVfQlJLKHNoYXJlZF9pbmZvX3BhZ2VfYnJrLCBQQUdFX1NJWkUpOworX19yZWFkX21vc3RseSBpbnQgeGVuX2hhdmVfdmVjdG9yX2NhbGxiYWNrOworRVhQT1JUX1NZTUJPTF9HUEwoeGVuX2hhdmVfdmVjdG9yX2NhbGxiYWNrKTsKKwogLyoKICAqIFBvaW50IGF0IHNvbWUgZW1wdHkgbWVtb3J5IHRvIHN0YXJ0IHdpdGguIFdlIG1hcCB0aGUgcmVhbCBzaGFyZWRfaW5mbwogICogcGFnZSBhcyBzb29uIGFzIGZpeG1hcCBpcyB1cCBhbmQgcnVubmluZy4KQEAgLTk3LDYgKzEwNiwxNCBAQAogICovCiBzdGF0aWMgaW50IGhhdmVfdmNwdV9pbmZvX3BsYWNlbWVudCA9IDE7CiAKK3N0YXRpYyB2b2lkIGNsYW1wX21heF9jcHVzKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCWlmIChzZXR1cF9tYXhfY3B1cyA+IE1BWF9WSVJUX0NQVVMpCisJCXNldHVwX21heF9jcHVzID0gTUFYX1ZJUlRfQ1BVUzsKKyNlbmRpZgorfQorCiBzdGF0aWMgdm9pZCB4ZW5fdmNwdV9zZXR1cChpbnQgY3B1KQogewogCXN0cnVjdCB2Y3B1X3JlZ2lzdGVyX3ZjcHVfaW5mbyBpbmZvOwpAQCAtMTA0LDEzICsxMjEsMTcgQEAKIAlzdHJ1Y3QgdmNwdV9pbmZvICp2Y3B1cDsKIAogCUJVR19PTihIWVBFUlZJU09SX3NoYXJlZF9pbmZvID09ICZ4ZW5fZHVtbXlfc2hhcmVkX2luZm8pOwotCXBlcl9jcHUoeGVuX3ZjcHUsIGNwdSkgPSAmSFlQRVJWSVNPUl9zaGFyZWRfaW5mby0+dmNwdV9pbmZvW2NwdV07CiAKLQlpZiAoIWhhdmVfdmNwdV9pbmZvX3BsYWNlbWVudCkKLQkJcmV0dXJuOwkJLyogYWxyZWFkeSB0ZXN0ZWQsIG5vdCBhdmFpbGFibGUgKi8KKwlpZiAoY3B1IDwgTUFYX1ZJUlRfQ1BVUykKKwkJcGVyX2NwdSh4ZW5fdmNwdSxjcHUpID0gJkhZUEVSVklTT1Jfc2hhcmVkX2luZm8tPnZjcHVfaW5mb1tjcHVdOworCisJaWYgKCFoYXZlX3ZjcHVfaW5mb19wbGFjZW1lbnQpIHsKKwkJaWYgKGNwdSA+PSBNQVhfVklSVF9DUFVTKQorCQkJY2xhbXBfbWF4X2NwdXMoKTsKKwkJcmV0dXJuOworCX0KIAogCXZjcHVwID0gJnBlcl9jcHUoeGVuX3ZjcHVfaW5mbywgY3B1KTsKLQogCWluZm8ubWZuID0gYXJiaXRyYXJ5X3ZpcnRfdG9fbWZuKHZjcHVwKTsKIAlpbmZvLm9mZnNldCA9IG9mZnNldF9pbl9wYWdlKHZjcHVwKTsKIApAQCAtMTI1LDYgKzE0Niw3IEBACiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9ERUJVRyAicmVnaXN0ZXJfdmNwdV9pbmZvIGZhaWxlZDogZXJyPSVkXG4iLCBlcnIpOwogCQloYXZlX3ZjcHVfaW5mb19wbGFjZW1lbnQgPSAwOworCQljbGFtcF9tYXhfY3B1cygpOwogCX0gZWxzZSB7CiAJCS8qIFRoaXMgY3B1IGlzIHVzaW5nIHRoZSByZWdpc3RlcmVkIHZjcHUgaW5mbywgZXZlbiBpZgogCQkgICBsYXRlciBvbmVzIGZhaWwgdG8uICovCkBAIC03MzEsNyArNzUzLDYgQEAKIAogI2VuZGlmCiAKLQogc3RhdGljIHZvaWQgeGVuX2NsdHModm9pZCkKIHsKIAlzdHJ1Y3QgbXVsdGljYWxsX3NwYWNlIG1jczsKQEAgLTkyNiwxMCArOTQ3LDYgQEAKIAkucGF0Y2ggPSB4ZW5fcGF0Y2gsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHB2X3RpbWVfb3BzIHhlbl90aW1lX29wcyBfX2luaXRkYXRhID0gewotCS5zY2hlZF9jbG9jayA9IHhlbl9zY2hlZF9jbG9jaywKLX07Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZfY3B1X29wcyB4ZW5fY3B1X29wcyBfX2luaXRkYXRhID0gewogCS5jcHVpZCA9IHhlbl9jcHVpZCwKIApAQCAtMTAyOCw2ICsxMDQ1LDIzIEBACiAJeGVuX3JlYm9vdChTSFVURE9XTl9jcmFzaCk7CiB9CiAKK3N0YXRpYyBpbnQKK3hlbl9wYW5pY19ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKK3sKKwl4ZW5fcmVib290KFNIVVRET1dOX2NyYXNoKTsKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgeGVuX3BhbmljX2Jsb2NrID0geworCS5ub3RpZmllcl9jYWxsPSB4ZW5fcGFuaWNfZXZlbnQsCit9OworCitpbnQgeGVuX3BhbmljX2hhbmRsZXJfaW5pdCh2b2lkKQoreworCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwgJnhlbl9wYW5pY19ibG9jayk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjaGluZV9vcHMgX19pbml0ZGF0YSB4ZW5fbWFjaGluZV9vcHMgPSB7CiAJLnJlc3RhcnQgPSB4ZW5fcmVzdGFydCwKIAkuaGFsdCA9IHhlbl9tYWNoaW5lX2hhbHQsCkBAIC0xMDY3LDcgKzExMDEsNiBAQAogCS8qIEluc3RhbGwgWGVuIHBhcmF2aXJ0IG9wcyAqLwogCXB2X2luZm8gPSB4ZW5faW5mbzsKIAlwdl9pbml0X29wcyA9IHhlbl9pbml0X29wczsKLQlwdl90aW1lX29wcyA9IHhlbl90aW1lX29wczsKIAlwdl9jcHVfb3BzID0geGVuX2NwdV9vcHM7CiAJcHZfYXBpY19vcHMgPSB4ZW5fYXBpY19vcHM7CiAKQEAgLTEwNzUsMTMgKzExMDgsNyBAQAogCXg4Nl9pbml0Lm9lbS5hcmNoX3NldHVwID0geGVuX2FyY2hfc2V0dXA7CiAJeDg2X2luaXQub2VtLmJhbm5lciA9IHhlbl9iYW5uZXI7CiAKLQl4ODZfaW5pdC50aW1lcnMudGltZXJfaW5pdCA9IHhlbl90aW1lX2luaXQ7Ci0JeDg2X2luaXQudGltZXJzLnNldHVwX3BlcmNwdV9jbG9ja2V2ID0geDg2X2luaXRfbm9vcDsKLQl4ODZfY3B1aW5pdC5zZXR1cF9wZXJjcHVfY2xvY2tldiA9IHg4Nl9pbml0X25vb3A7Ci0KLQl4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX3RzYyA9IHhlbl90c2Nfa2h6OwotCXg4Nl9wbGF0Zm9ybS5nZXRfd2FsbGNsb2NrID0geGVuX2dldF93YWxsY2xvY2s7Ci0JeDg2X3BsYXRmb3JtLnNldF93YWxsY2xvY2sgPSB4ZW5fc2V0X3dhbGxjbG9jazsKKwl4ZW5faW5pdF90aW1lX29wcygpOwogCiAJLyoKIAkgKiBTZXQgdXAgc29tZSBwYWdldGFibGUgc3RhdGUgYmVmb3JlIHN0YXJ0aW5nIHRvIHNldCBhbnkgcHRlcy4KQEAgLTEyMDYsMyArMTIzMywxMzkgQEAKIAl4ODZfNjRfc3RhcnRfcmVzZXJ2YXRpb25zKChjaGFyICopX19wYV9zeW1ib2woJmJvb3RfcGFyYW1zKSk7CiAjZW5kaWYKIH0KKworc3RhdGljIHVpbnQzMl90IHhlbl9jcHVpZF9iYXNlKHZvaWQpCit7CisJdWludDMyX3QgYmFzZSwgZWF4LCBlYngsIGVjeCwgZWR4OworCWNoYXIgc2lnbmF0dXJlWzEzXTsKKworCWZvciAoYmFzZSA9IDB4NDAwMDAwMDA7IGJhc2UgPCAweDQwMDEwMDAwOyBiYXNlICs9IDB4MTAwKSB7CisJCWNwdWlkKGJhc2UsICZlYXgsICZlYngsICZlY3gsICZlZHgpOworCQkqKHVpbnQzMl90ICopKHNpZ25hdHVyZSArIDApID0gZWJ4OworCQkqKHVpbnQzMl90ICopKHNpZ25hdHVyZSArIDQpID0gZWN4OworCQkqKHVpbnQzMl90ICopKHNpZ25hdHVyZSArIDgpID0gZWR4OworCQlzaWduYXR1cmVbMTJdID0gMDsKKworCQlpZiAoIXN0cmNtcCgiWGVuVk1NWGVuVk1NIiwgc2lnbmF0dXJlKSAmJiAoKGVheCAtIGJhc2UpID49IDIpKQorCQkJcmV0dXJuIGJhc2U7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9odm1fcHZfaW5mbyhpbnQgKm1ham9yLCBpbnQgKm1pbm9yKQoreworCXVpbnQzMl90IGVheCwgZWJ4LCBlY3gsIGVkeCwgcGFnZXMsIG1zciwgYmFzZTsKKwl1NjQgcGZuOworCisJYmFzZSA9IHhlbl9jcHVpZF9iYXNlKCk7CisJY3B1aWQoYmFzZSArIDEsICZlYXgsICZlYngsICZlY3gsICZlZHgpOworCisJKm1ham9yID0gZWF4ID4+IDE2OworCSptaW5vciA9IGVheCAmIDB4ZmZmZjsKKwlwcmludGsoS0VSTl9JTkZPICJYZW4gdmVyc2lvbiAlZC4lZC5cbiIsICptYWpvciwgKm1pbm9yKTsKKworCWNwdWlkKGJhc2UgKyAyLCAmcGFnZXMsICZtc3IsICZlY3gsICZlZHgpOworCisJcGZuID0gX19wYShoeXBlcmNhbGxfcGFnZSk7CisJd3Jtc3Jfc2FmZShtc3IsICh1MzIpcGZuLCAodTMyKShwZm4gPj4gMzIpKTsKKworCXhlbl9zZXR1cF9mZWF0dXJlcygpOworCisJcHZfaW5mbyA9IHhlbl9pbmZvOworCXB2X2luZm8ua2VybmVsX3JwbCA9IDA7CisKKwl4ZW5fZG9tYWluX3R5cGUgPSBYRU5fSFZNX0RPTUFJTjsKKworCXJldHVybiAwOworfQorCit2b2lkIHhlbl9odm1faW5pdF9zaGFyZWRfaW5mbyh2b2lkKQoreworCWludCBjcHU7CisJc3RydWN0IHhlbl9hZGRfdG9fcGh5c21hcCB4YXRwOworCXN0YXRpYyBzdHJ1Y3Qgc2hhcmVkX2luZm8gKnNoYXJlZF9pbmZvX3BhZ2UgPSAwOworCisJaWYgKCFzaGFyZWRfaW5mb19wYWdlKQorCQlzaGFyZWRfaW5mb19wYWdlID0gKHN0cnVjdCBzaGFyZWRfaW5mbyAqKQorCQkJZXh0ZW5kX2JyayhQQUdFX1NJWkUsIFBBR0VfU0laRSk7CisJeGF0cC5kb21pZCA9IERPTUlEX1NFTEY7CisJeGF0cC5pZHggPSAwOworCXhhdHAuc3BhY2UgPSBYRU5NQVBTUEFDRV9zaGFyZWRfaW5mbzsKKwl4YXRwLmdwZm4gPSBfX3BhKHNoYXJlZF9pbmZvX3BhZ2UpID4+IFBBR0VfU0hJRlQ7CisJaWYgKEhZUEVSVklTT1JfbWVtb3J5X29wKFhFTk1FTV9hZGRfdG9fcGh5c21hcCwgJnhhdHApKQorCQlCVUcoKTsKKworCUhZUEVSVklTT1Jfc2hhcmVkX2luZm8gPSAoc3RydWN0IHNoYXJlZF9pbmZvICopc2hhcmVkX2luZm9fcGFnZTsKKworCS8qIHhlbl92Y3B1IGlzIGEgcG9pbnRlciB0byB0aGUgdmNwdV9pbmZvIHN0cnVjdCBpbiB0aGUgc2hhcmVkX2luZm8KKwkgKiBwYWdlLCB3ZSB1c2UgaXQgaW4gdGhlIGV2ZW50IGNoYW5uZWwgdXBjYWxsIGFuZCBpbiBzb21lIHB2Y2xvY2sKKwkgKiByZWxhdGVkIGZ1bmN0aW9ucy4gV2UgZG9uJ3QgbmVlZCB0aGUgdmNwdV9pbmZvIHBsYWNlbWVudAorCSAqIG9wdGltaXphdGlvbnMgYmVjYXVzZSB3ZSBkb24ndCB1c2UgYW55IHB2X21tdSBvciBwdl9pcnEgb3Agb24KKwkgKiBIVk0uCisJICogV2hlbiB4ZW5faHZtX2luaXRfc2hhcmVkX2luZm8gaXMgcnVuIGF0IGJvb3QgdGltZSBvbmx5IHZjcHUgMCBpcworCSAqIG9ubGluZSBidXQgeGVuX2h2bV9pbml0X3NoYXJlZF9pbmZvIGlzIHJ1biBhdCByZXN1bWUgdGltZSB0b28gYW5kCisJICogaW4gdGhhdCBjYXNlIG11bHRpcGxlIHZjcHVzIG1pZ2h0IGJlIG9ubGluZS4gKi8KKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlwZXJfY3B1KHhlbl92Y3B1LCBjcHUpID0gJkhZUEVSVklTT1Jfc2hhcmVkX2luZm8tPnZjcHVfaW5mb1tjcHVdOworCX0KK30KKworI2lmZGVmIENPTkZJR19YRU5fUFZIVk0KK3N0YXRpYyBpbnQgX19jcHVpbml0IHhlbl9odm1fY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQoreworCWludCBjcHUgPSAobG9uZyloY3B1OworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBDUFVfVVBfUFJFUEFSRToKKwkJcGVyX2NwdSh4ZW5fdmNwdSwgY3B1KSA9ICZIWVBFUlZJU09SX3NoYXJlZF9pbmZvLT52Y3B1X2luZm9bY3B1XTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiBOT1RJRllfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19jcHVpbml0ZGF0YSB4ZW5faHZtX2NwdV9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbAk9IHhlbl9odm1fY3B1X25vdGlmeSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCB4ZW5faHZtX2d1ZXN0X2luaXQodm9pZCkKK3sKKwlpbnQgcjsKKwlpbnQgbWFqb3IsIG1pbm9yOworCisJciA9IGluaXRfaHZtX3B2X2luZm8oJm1ham9yLCAmbWlub3IpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuOworCisJeGVuX2h2bV9pbml0X3NoYXJlZF9pbmZvKCk7CisKKwlpZiAoeGVuX2ZlYXR1cmUoWEVORkVBVF9odm1fY2FsbGJhY2tfdmVjdG9yKSkKKwkJeGVuX2hhdmVfdmVjdG9yX2NhbGxiYWNrID0gMTsKKwlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJnhlbl9odm1fY3B1X25vdGlmaWVyKTsKKwl4ZW5fdW5wbHVnX2VtdWxhdGVkX2RldmljZXMoKTsKKwloYXZlX3ZjcHVfaW5mb19wbGFjZW1lbnQgPSAwOworCXg4Nl9pbml0LmlycXMuaW50cl9pbml0ID0geGVuX2luaXRfSVJROworCXhlbl9odm1faW5pdF90aW1lX29wcygpOworCXhlbl9odm1faW5pdF9tbXVfb3BzKCk7Cit9CisKK3N0YXRpYyBib29sIF9faW5pdCB4ZW5faHZtX3BsYXRmb3JtKHZvaWQpCit7CisJaWYgKHhlbl9wdl9kb21haW4oKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCF4ZW5fY3B1aWRfYmFzZSgpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworY29uc3QgX19yZWZjb25zdCBzdHJ1Y3QgaHlwZXJ2aXNvcl94ODYgeDg2X2h5cGVyX3hlbl9odm0gPSB7CisJLm5hbWUJCQk9ICJYZW4gSFZNIiwKKwkuZGV0ZWN0CQkJPSB4ZW5faHZtX3BsYXRmb3JtLAorCS5pbml0X3BsYXRmb3JtCQk9IHhlbl9odm1fZ3Vlc3RfaW5pdCwKK307CitFWFBPUlRfU1lNQk9MKHg4Nl9oeXBlcl94ZW5faHZtKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL21tdS5jIGIvYXJjaC94ODYveGVuL21tdS5jCmluZGV4IDkxNGYwNDYuLjQxM2IxOWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9tbXUuYworKysgYi9hcmNoL3g4Ni94ZW4vbW11LmMKQEAgLTU4LDYgKzU4LDcgQEAKIAogI2luY2x1ZGUgPHhlbi9wYWdlLmg+CiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS94ZW4uaD4KKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL2h2bS9odm1fb3AuaD4KICNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3ZlcnNpb24uaD4KICNpbmNsdWRlIDx4ZW4vaHZjLWNvbnNvbGUuaD4KIApAQCAtMTk0MSw2ICsxOTQyLDQwIEBACiAJcHZfbW11X29wcyA9IHhlbl9tbXVfb3BzOwogfQogCisjaWZkZWYgQ09ORklHX1hFTl9QVkhWTQorc3RhdGljIHZvaWQgeGVuX2h2bV9leGl0X21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJc3RydWN0IHhlbl9odm1fcGFnZXRhYmxlX2R5aW5nIGE7CisJaW50IHJjOworCisJYS5kb21pZCA9IERPTUlEX1NFTEY7CisJYS5ncGEgPSBfX3BhKG1tLT5wZ2QpOworCXJjID0gSFlQRVJWSVNPUl9odm1fb3AoSFZNT1BfcGFnZXRhYmxlX2R5aW5nLCAmYSk7CisJV0FSTl9PTl9PTkNFKHJjIDwgMCk7Cit9CisKK3N0YXRpYyBpbnQgaXNfcGFnZXRhYmxlX2R5aW5nX3N1cHBvcnRlZCh2b2lkKQoreworCXN0cnVjdCB4ZW5faHZtX3BhZ2V0YWJsZV9keWluZyBhOworCWludCByYyA9IDA7CisKKwlhLmRvbWlkID0gRE9NSURfU0VMRjsKKwlhLmdwYSA9IDB4MDA7CisJcmMgPSBIWVBFUlZJU09SX2h2bV9vcChIVk1PUF9wYWdldGFibGVfZHlpbmcsICZhKTsKKwlpZiAocmMgPCAwKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJIVk1PUF9wYWdldGFibGVfZHlpbmcgbm90IHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKwordm9pZCBfX2luaXQgeGVuX2h2bV9pbml0X21tdV9vcHModm9pZCkKK3sKKwlpZiAoaXNfcGFnZXRhYmxlX2R5aW5nX3N1cHBvcnRlZCgpKQorCQlwdl9tbXVfb3BzLmV4aXRfbW1hcCA9IHhlbl9odm1fZXhpdF9tbWFwOworfQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfWEVOX0RFQlVHX0ZTCiAKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkX21tdV9kZWJ1ZzsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9tbXUuaCBiL2FyY2gveDg2L3hlbi9tbXUuaAppbmRleCA1ZmU2YmM3Li5mYTkzOGM0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vbW11LmgKKysrIGIvYXJjaC94ODYveGVuL21tdS5oCkBAIC02MCw0ICs2MCw1IEBACiB1bnNpZ25lZCBsb25nIHhlbl9yZWFkX2NyMl9kaXJlY3Qodm9pZCk7CiAKIGV4dGVybiB2b2lkIHhlbl9pbml0X21tdV9vcHModm9pZCk7CitleHRlcm4gdm9pZCB4ZW5faHZtX2luaXRfbW11X29wcyh2b2lkKTsKICNlbmRpZgkvKiBfWEVOX01NVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vcGxhdGZvcm0tcGNpLXVucGx1Zy5jIGIvYXJjaC94ODYveGVuL3BsYXRmb3JtLXBjaS11bnBsdWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTRjMDAyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYveGVuL3BsYXRmb3JtLXBjaS11bnBsdWcuYwpAQCAtMCwwICsxLDEzNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcGxhdGZvcm0tcGNpLXVucGx1Zy5jCisgKgorICogWGVuIHBsYXRmb3JtIFBDSSBkZXZpY2UgZHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIENpdHJpeAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCisgKiBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8eGVuL3BsYXRmb3JtX3BjaS5oPgorCisjZGVmaW5lIFhFTl9QTEFURk9STV9FUlJfTUFHSUMgLTEKKyNkZWZpbmUgWEVOX1BMQVRGT1JNX0VSUl9QUk9UT0NPTCAtMgorI2RlZmluZSBYRU5fUExBVEZPUk1fRVJSX0JMQUNLTElTVCAtMworCisvKiBzdG9yZSB0aGUgdmFsdWUgb2YgeGVuX2VtdWxfdW5wbHVnIGFmdGVyIHRoZSB1bnBsdWcgaXMgZG9uZSAqLworaW50IHhlbl9wbGF0Zm9ybV9wY2lfdW5wbHVnOworRVhQT1JUX1NZTUJPTF9HUEwoeGVuX3BsYXRmb3JtX3BjaV91bnBsdWcpOworI2lmZGVmIENPTkZJR19YRU5fUFZIVk0KK3N0YXRpYyBpbnQgeGVuX2VtdWxfdW5wbHVnOworCitzdGF0aWMgaW50IF9faW5pdCBjaGVja19wbGF0Zm9ybV9tYWdpYyh2b2lkKQoreworCXNob3J0IG1hZ2ljOworCWNoYXIgcHJvdG9jb2w7CisKKwltYWdpYyA9IGludyhYRU5fSU9QT1JUX01BR0lDKTsKKwlpZiAobWFnaWMgIT0gWEVOX0lPUE9SVF9NQUdJQ19WQUwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJYZW4gUGxhdGZvcm0gUENJOiB1bnJlY29nbmlzZWQgbWFnaWMgdmFsdWVcbiIpOworCQlyZXR1cm4gWEVOX1BMQVRGT1JNX0VSUl9NQUdJQzsKKwl9CisKKwlwcm90b2NvbCA9IGluYihYRU5fSU9QT1JUX1BST1RPVkVSKTsKKworCXByaW50ayhLRVJOX0RFQlVHICJYZW4gUGxhdGZvcm0gUENJOiBJL08gcHJvdG9jb2wgdmVyc2lvbiAlZFxuIiwKKwkJCXByb3RvY29sKTsKKworCXN3aXRjaCAocHJvdG9jb2wpIHsKKwljYXNlIDE6CisJCW91dHcoWEVOX0lPUE9SVF9MSU5VWF9QUk9ETlVNLCBYRU5fSU9QT1JUX1BST0ROVU0pOworCQlvdXRsKFhFTl9JT1BPUlRfTElOVVhfRFJWVkVSLCBYRU5fSU9QT1JUX0RSVlZFUik7CisJCWlmIChpbncoWEVOX0lPUE9SVF9NQUdJQykgIT0gWEVOX0lPUE9SVF9NQUdJQ19WQUwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiWGVuIFBsYXRmb3JtOiBibGFja2xpc3RlZCBieSBob3N0XG4iKTsKKwkJCXJldHVybiBYRU5fUExBVEZPUk1fRVJSX0JMQUNLTElTVDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJYZW4gUGxhdGZvcm0gUENJOiB1bmtub3duIEkvTyBwcm90b2NvbCB2ZXJzaW9uIik7CisJCXJldHVybiBYRU5fUExBVEZPUk1fRVJSX1BST1RPQ09MOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIF9faW5pdCB4ZW5fdW5wbHVnX2VtdWxhdGVkX2RldmljZXModm9pZCkKK3sKKwlpbnQgcjsKKworCS8qIGNoZWNrIHRoZSB2ZXJzaW9uIG9mIHRoZSB4ZW4gcGxhdGZvcm0gUENJIGRldmljZSAqLworCXIgPSBjaGVja19wbGF0Zm9ybV9tYWdpYygpOworCS8qIElmIHRoZSB2ZXJzaW9uIG1hdGNoZXMgZW5hYmxlIHRoZSBYZW4gcGxhdGZvcm0gUENJIGRyaXZlci4KKwkgKiBBbHNvIGVuYWJsZSB0aGUgWGVuIHBsYXRmb3JtIFBDSSBkcml2ZXIgaWYgdGhlIHZlcnNpb24gaXMgcmVhbGx5IG9sZAorCSAqIGFuZCB0aGUgdXNlciB0b2xkIHVzIHRvIGlnbm9yZSBpdC4gKi8KKwlpZiAociAmJiAhKHIgPT0gWEVOX1BMQVRGT1JNX0VSUl9NQUdJQyAmJgorCQkJKHhlbl9lbXVsX3VucGx1ZyAmIFhFTl9VTlBMVUdfSUdOT1JFKSkpCisJCXJldHVybjsKKwkvKiBTZXQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgeGVuX2VtdWxfdW5wbHVnIGRlcGVuZGluZyBvbiB3aGV0aGVyIG9yCisJICogbm90IHRoZSBYZW4gUFYgZnJvbnRlbmRzIGFuZCB0aGUgWGVuIHBsYXRmb3JtIFBDSSBkcml2ZXIgaGF2ZQorCSAqIGJlZW4gY29tcGlsZWQgZm9yIHRoaXMga2VybmVsIChtb2R1bGVzIG9yIGJ1aWx0LWluIGFyZSBib3RoIE9LKS4gKi8KKwlpZiAoIXhlbl9lbXVsX3VucGx1ZykgeworCQlpZiAoeGVuX211c3RfdW5wbHVnX25pY3MoKSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiTmV0ZnJvbnQgYW5kIHRoZSBYZW4gcGxhdGZvcm0gUENJIGRyaXZlciBoYXZlICIKKwkJCQkJImJlZW4gY29tcGlsZWQgZm9yIHRoaXMga2VybmVsOiB1bnBsdWcgZW11bGF0ZWQgTklDcy5cbiIpOworCQkJeGVuX2VtdWxfdW5wbHVnIHw9IFhFTl9VTlBMVUdfQUxMX05JQ1M7CisJCX0KKwkJaWYgKHhlbl9tdXN0X3VucGx1Z19kaXNrcygpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJCbGtmcm9udCBhbmQgdGhlIFhlbiBwbGF0Zm9ybSBQQ0kgZHJpdmVyIGhhdmUgIgorCQkJCQkiYmVlbiBjb21waWxlZCBmb3IgdGhpcyBrZXJuZWw6IHVucGx1ZyBlbXVsYXRlZCBkaXNrcy5cbiIKKwkJCQkJIllvdSBtaWdodCBoYXZlIHRvIGNoYW5nZSB0aGUgcm9vdCBkZXZpY2VcbiIKKwkJCQkJImZyb20gL2Rldi9oZFthLWRdIHRvIC9kZXYveHZkW2EtZF1cbiIKKwkJCQkJImluIHlvdXIgcm9vdD0ga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb25cbiIpOworCQkJeGVuX2VtdWxfdW5wbHVnIHw9IFhFTl9VTlBMVUdfQUxMX0lERV9ESVNLUzsKKwkJfQorCX0KKwkvKiBOb3cgdW5wbHVnIHRoZSBlbXVsYXRlZCBkZXZpY2VzICovCisJaWYgKCEoeGVuX2VtdWxfdW5wbHVnICYgWEVOX1VOUExVR19JR05PUkUpKQorCQlvdXR3KHhlbl9lbXVsX3VucGx1ZywgWEVOX0lPUE9SVF9VTlBMVUcpOworCXhlbl9wbGF0Zm9ybV9wY2lfdW5wbHVnID0geGVuX2VtdWxfdW5wbHVnOworfQorCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV94ZW5fZW11bF91bnBsdWcoY2hhciAqYXJnKQoreworCWNoYXIgKnAsICpxOworCWludCBsOworCisJZm9yIChwID0gYXJnOyBwOyBwID0gcSkgeworCQlxID0gc3RyY2hyKHAsICcsJyk7CisJCWlmIChxKSB7CisJCQlsID0gcSAtIHA7CisJCQlxKys7CisJCX0gZWxzZSB7CisJCQlsID0gc3RybGVuKHApOworCQl9CisJCWlmICghc3RybmNtcChwLCAiYWxsIiwgbCkpCisJCQl4ZW5fZW11bF91bnBsdWcgfD0gWEVOX1VOUExVR19BTEw7CisJCWVsc2UgaWYgKCFzdHJuY21wKHAsICJpZGUtZGlza3MiLCBsKSkKKwkJCXhlbl9lbXVsX3VucGx1ZyB8PSBYRU5fVU5QTFVHX0FMTF9JREVfRElTS1M7CisJCWVsc2UgaWYgKCFzdHJuY21wKHAsICJhdXgtaWRlLWRpc2tzIiwgbCkpCisJCQl4ZW5fZW11bF91bnBsdWcgfD0gWEVOX1VOUExVR19BVVhfSURFX0RJU0tTOworCQllbHNlIGlmICghc3RybmNtcChwLCAibmljcyIsIGwpKQorCQkJeGVuX2VtdWxfdW5wbHVnIHw9IFhFTl9VTlBMVUdfQUxMX05JQ1M7CisJCWVsc2UgaWYgKCFzdHJuY21wKHAsICJpZ25vcmUiLCBsKSkKKwkJCXhlbl9lbXVsX3VucGx1ZyB8PSBYRU5fVU5QTFVHX0lHTk9SRTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAidW5yZWNvZ25pc2VkIG9wdGlvbiAnJXMnICIKKwkJCQkgImluIHBhcmFtZXRlciAneGVuX2VtdWxfdW5wbHVnJ1xuIiwgcCk7CisJfQorCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oInhlbl9lbXVsX3VucGx1ZyIsIHBhcnNlX3hlbl9lbXVsX3VucGx1Zyk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9zZXR1cC5jIGIvYXJjaC94ODYveGVuL3NldHVwLmMKaW5kZXggYWQwMDQ3Zi4uMzI4YjAwMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3NldHVwLmMKKysrIGIvYXJjaC94ODYveGVuL3NldHVwLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDx4ZW4vcGFnZS5oPgogI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvY2FsbGJhY2suaD4KICNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3BoeXNkZXYuaD4KKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL21lbW9yeS5oPgogI2luY2x1ZGUgPHhlbi9mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSAieGVuLW9wcy5oIgpAQCAtMzIsNiArMzMsNzMgQEAKIGV4dGVybiB2b2lkIHhlbl9zeXNjYWxsX3RhcmdldCh2b2lkKTsKIGV4dGVybiB2b2lkIHhlbl9zeXNjYWxsMzJfdGFyZ2V0KHZvaWQpOwogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgeGVuX3JlbGVhc2VfY2h1bmsocGh5c19hZGRyX3Qgc3RhcnRfYWRkciwKKwkJCQkJICAgICAgcGh5c19hZGRyX3QgZW5kX2FkZHIpCit7CisJc3RydWN0IHhlbl9tZW1vcnlfcmVzZXJ2YXRpb24gcmVzZXJ2YXRpb24gPSB7CisJCS5hZGRyZXNzX2JpdHMgPSAwLAorCQkuZXh0ZW50X29yZGVyID0gMCwKKwkJLmRvbWlkICAgICAgICA9IERPTUlEX1NFTEYKKwl9OworCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKKwl1bnNpZ25lZCBsb25nIGxlbiA9IDA7CisJdW5zaWduZWQgbG9uZyBwZm47CisJaW50IHJldDsKKworCXN0YXJ0ID0gUEZOX1VQKHN0YXJ0X2FkZHIpOworCWVuZCA9IFBGTl9ET1dOKGVuZF9hZGRyKTsKKworCWlmIChlbmQgPD0gc3RhcnQpCisJCXJldHVybiAwOworCisJcHJpbnRrKEtFUk5fSU5GTyAieGVuX3JlbGVhc2VfY2h1bms6IGxvb2tpbmcgYXQgYXJlYSBwZm4gJWx4LSVseDogIiwKKwkgICAgICAgc3RhcnQsIGVuZCk7CisJZm9yKHBmbiA9IHN0YXJ0OyBwZm4gPCBlbmQ7IHBmbisrKSB7CisJCXVuc2lnbmVkIGxvbmcgbWZuID0gcGZuX3RvX21mbihwZm4pOworCisJCS8qIE1ha2Ugc3VyZSBwZm4gZXhpc3RzIHRvIHN0YXJ0IHdpdGggKi8KKwkJaWYgKG1mbiA9PSBJTlZBTElEX1AyTV9FTlRSWSB8fCBtZm5fdG9fcGZuKG1mbikgIT0gcGZuKQorCQkJY29udGludWU7CisKKwkJc2V0X3hlbl9ndWVzdF9oYW5kbGUocmVzZXJ2YXRpb24uZXh0ZW50X3N0YXJ0LCAmbWZuKTsKKwkJcmVzZXJ2YXRpb24ubnJfZXh0ZW50cyA9IDE7CisKKwkJcmV0ID0gSFlQRVJWSVNPUl9tZW1vcnlfb3AoWEVOTUVNX2RlY3JlYXNlX3Jlc2VydmF0aW9uLAorCQkJCQkgICAmcmVzZXJ2YXRpb24pOworCQlXQVJOKHJldCAhPSAxLCAiRmFpbGVkIHRvIHJlbGVhc2UgbWVtb3J5ICVseC0lbHggZXJyPSVkXG4iLAorCQkgICAgIHN0YXJ0LCBlbmQsIHJldCk7CisJCWlmIChyZXQgPT0gMSkgeworCQkJc2V0X3BoeXNfdG9fbWFjaGluZShwZm4sIElOVkFMSURfUDJNX0VOVFJZKTsKKwkJCWxlbisrOworCQl9CisJfQorCXByaW50ayhLRVJOX0NPTlQgIiVsZCBwYWdlcyBmcmVlZFxuIiwgbGVuKTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB4ZW5fcmV0dXJuX3VudXNlZF9tZW1vcnkodW5zaWduZWQgbG9uZyBtYXhfcGZuLAorCQkJCQkJICAgICBjb25zdCBzdHJ1Y3QgZTgyMG1hcCAqZTgyMCkKK3sKKwlwaHlzX2FkZHJfdCBtYXhfYWRkciA9IFBGTl9QSFlTKG1heF9wZm4pOworCXBoeXNfYWRkcl90IGxhc3RfZW5kID0gMDsKKwl1bnNpZ25lZCBsb25nIHJlbGVhc2VkID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBlODIwLT5ucl9tYXAgJiYgbGFzdF9lbmQgPCBtYXhfYWRkcjsgaSsrKSB7CisJCXBoeXNfYWRkcl90IGVuZCA9IGU4MjAtPm1hcFtpXS5hZGRyOworCQllbmQgPSBtaW4obWF4X2FkZHIsIGVuZCk7CisKKwkJcmVsZWFzZWQgKz0geGVuX3JlbGVhc2VfY2h1bmsobGFzdF9lbmQsIGVuZCk7CisJCWxhc3RfZW5kID0gZTgyMC0+bWFwW2ldLmFkZHIgKyBlODIwLT5tYXBbaV0uc2l6ZTsKKwl9CisKKwlpZiAobGFzdF9lbmQgPCBtYXhfYWRkcikKKwkJcmVsZWFzZWQgKz0geGVuX3JlbGVhc2VfY2h1bmsobGFzdF9lbmQsIG1heF9hZGRyKTsKKworCXByaW50ayhLRVJOX0lORk8gInJlbGVhc2VkICVsZCBwYWdlcyBvZiB1bnVzZWQgbWVtb3J5XG4iLCByZWxlYXNlZCk7CisJcmV0dXJuIHJlbGVhc2VkOworfQogCiAvKioKICAqIG1hY2hpbmVfc3BlY2lmaWNfbWVtb3J5X3NldHVwIC0gSG9vayBmb3IgbWFjaGluZSBzcGVjaWZpYyBtZW1vcnkgc2V0dXAuCkBAIC02Nyw2ICsxMzUsOCBAQAogCiAJc2FuaXRpemVfZTgyMF9tYXAoZTgyMC5tYXAsIEFSUkFZX1NJWkUoZTgyMC5tYXApLCAmZTgyMC5ucl9tYXApOwogCisJeGVuX3JldHVybl91bnVzZWRfbWVtb3J5KHhlbl9zdGFydF9pbmZvLT5ucl9wYWdlcywgJmU4MjApOworCiAJcmV0dXJuICJYZW4iOwogfQogCkBAIC0xNTYsNiArMjI2LDggQEAKIAlzdHJ1Y3QgcGh5c2Rldl9zZXRfaW9wbCBzZXRfaW9wbDsKIAlpbnQgcmM7CiAKKwl4ZW5fcGFuaWNfaGFuZGxlcl9pbml0KCk7CisKIAlIWVBFUlZJU09SX3ZtX2Fzc2lzdChWTUFTU1RfQ01EX2VuYWJsZSwgVk1BU1NUX1RZUEVfNGdiX3NlZ21lbnRzKTsKIAlIWVBFUlZJU09SX3ZtX2Fzc2lzdChWTUFTU1RfQ01EX2VuYWJsZSwgVk1BU1NUX1RZUEVfd3JpdGFibGVfcGFnZXRhYmxlcyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9zbXAuYyBiL2FyY2gveDg2L3hlbi9zbXAuYwppbmRleCBhMjk2OTNmLi4yNWYyMzJiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vc21wLmMKKysrIGIvYXJjaC94ODYveGVuL3NtcC5jCkBAIC0zOTQsNiArMzk0LDggQEAKIAlsb2FkX2NyMyhzd2FwcGVyX3BnX2Rpcik7CiAJLyogc2hvdWxkIHNldCB1cCBhIG1pbmltYWwgZ2R0ICovCiAKKwlzZXRfY3B1X29ubGluZShjcHUsIGZhbHNlKTsKKwogCUhZUEVSVklTT1JfdmNwdV9vcChWQ1BVT1BfZG93biwgY3B1LCBOVUxMKTsKIAlCVUcoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9zdXNwZW5kLmMgYi9hcmNoL3g4Ni94ZW4vc3VzcGVuZC5jCmluZGV4IGE5YzY2MTEuLjFkNzg5ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9zdXNwZW5kLmMKKysrIGIvYXJjaC94ODYveGVuL3N1c3BlbmQuYwpAQCAtMjYsNiArMjYsMTggQEAKIAkJQlVHKCk7CiB9CiAKK3ZvaWQgeGVuX2h2bV9wb3N0X3N1c3BlbmQoaW50IHN1c3BlbmRfY2FuY2VsbGVkKQoreworCWludCBjcHU7CisJeGVuX2h2bV9pbml0X3NoYXJlZF9pbmZvKCk7CisJeGVuX2NhbGxiYWNrX3ZlY3RvcigpOworCWlmICh4ZW5fZmVhdHVyZShYRU5GRUFUX2h2bV9zYWZlX3B2Y2xvY2spKSB7CisJCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCQl4ZW5fc2V0dXBfcnVuc3RhdGVfaW5mbyhjcHUpOworCQl9CisJfQorfQorCiB2b2lkIHhlbl9wb3N0X3N1c3BlbmQoaW50IHN1c3BlbmRfY2FuY2VsbGVkKQogewogCXhlbl9idWlsZF9tZm5fbGlzdF9saXN0KCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vdGltZS5jIGIvYXJjaC94ODYveGVuL3RpbWUuYwppbmRleCBiM2M2YzU5Li4xYTUzNTNhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vdGltZS5jCisrKyBiL2FyY2gveDg2L3hlbi90aW1lLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxhc20veGVuL2h5cGVyY2FsbC5oPgogCiAjaW5jbHVkZSA8eGVuL2V2ZW50cy5oPgorI2luY2x1ZGUgPHhlbi9mZWF0dXJlcy5oPgogI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UveGVuLmg+CiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS92Y3B1Lmg+CiAKQEAgLTE1NSw0NyArMTU2LDggQEAKIAlhY2NvdW50X2lkbGVfdGlja3ModGlja3MpOwogfQogCi0vKgotICogWGVuIHNjaGVkX2Nsb2NrIGltcGxlbWVudGF0aW9uLiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIHVuc3RvbGVuCi0gKiBuYW5vc2Vjb25kcywgd2hpY2ggaXMgbmFub3NlY29uZHMgdGhlIFZDUFUgc3BlbnQgaW4gUlVOTklORytCTE9DS0VECi0gKiBzdGF0ZXMuCi0gKi8KLXVuc2lnbmVkIGxvbmcgbG9uZyB4ZW5fc2NoZWRfY2xvY2sodm9pZCkKLXsKLQlzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvIHN0YXRlOwotCWN5Y2xlX3Qgbm93OwotCXU2NCByZXQ7Ci0JczY0IG9mZnNldDsKLQotCS8qCi0JICogSWRlYWxseSBzY2hlZF9jbG9jayBzaG91bGQgYmUgY2FsbGVkIG9uIGEgcGVyLWNwdSBiYXNpcwotCSAqIGFueXdheSwgc28gcHJlZW1wdCBzaG91bGQgYWxyZWFkeSBiZSBkaXNhYmxlZCwgYnV0IHRoYXQncwotCSAqIG5vdCBjdXJyZW50IHByYWN0aWNlIGF0IHRoZSBtb21lbnQuCi0JICovCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0KLQlub3cgPSB4ZW5fY2xvY2tzb3VyY2VfcmVhZCgpOwotCi0JZ2V0X3J1bnN0YXRlX3NuYXBzaG90KCZzdGF0ZSk7Ci0KLQlXQVJOX09OKHN0YXRlLnN0YXRlICE9IFJVTlNUQVRFX3J1bm5pbmcpOwotCi0Jb2Zmc2V0ID0gbm93IC0gc3RhdGUuc3RhdGVfZW50cnlfdGltZTsKLQlpZiAob2Zmc2V0IDwgMCkKLQkJb2Zmc2V0ID0gMDsKLQotCXJldCA9IHN0YXRlLnRpbWVbUlVOU1RBVEVfYmxvY2tlZF0gKwotCQlzdGF0ZS50aW1lW1JVTlNUQVRFX3J1bm5pbmddICsKLQkJb2Zmc2V0OwotCi0JcHJlZW1wdF9lbmFibGUoKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLQogLyogR2V0IHRoZSBUU0Mgc3BlZWQgZnJvbSBYZW4gKi8KLXVuc2lnbmVkIGxvbmcgeGVuX3RzY19raHoodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHhlbl90c2Nfa2h6KHZvaWQpCiB7CiAJc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gKmluZm8gPQogCQkmSFlQRVJWSVNPUl9zaGFyZWRfaW5mby0+dmNwdV9pbmZvWzBdLnRpbWU7CkBAIC0yMzAsNyArMTkyLDcgQEAKIAlwdXRfY3B1X3Zhcih4ZW5fdmNwdSk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgeGVuX2dldF93YWxsY2xvY2sodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHhlbl9nZXRfd2FsbGNsb2NrKHZvaWQpCiB7CiAJc3RydWN0IHRpbWVzcGVjIHRzOwogCkBAIC0yMzgsNyArMjAwLDcgQEAKIAlyZXR1cm4gdHMudHZfc2VjOwogfQogCi1pbnQgeGVuX3NldF93YWxsY2xvY2sodW5zaWduZWQgbG9uZyBub3cpCitzdGF0aWMgaW50IHhlbl9zZXRfd2FsbGNsb2NrKHVuc2lnbmVkIGxvbmcgbm93KQogewogCS8qIGRvIG5vdGhpbmcgZm9yIGRvbVUgKi8KIAlyZXR1cm4gLTE7CkBAIC00NzMsNyArNDM1LDExIEBACiAJfQogfQogCi1fX2luaXQgdm9pZCB4ZW5fdGltZV9pbml0KHZvaWQpCitzdGF0aWMgY29uc3Qgc3RydWN0IHB2X3RpbWVfb3BzIHhlbl90aW1lX29wcyBfX2luaXRkYXRhID0geworCS5zY2hlZF9jbG9jayA9IHhlbl9jbG9ja3NvdXJjZV9yZWFkLAorfTsKKworc3RhdGljIF9faW5pdCB2b2lkIHhlbl90aW1lX2luaXQodm9pZCkKIHsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXN0cnVjdCB0aW1lc3BlYyB0cDsKQEAgLTQ5NywzICs0NjMsNDcgQEAKIAl4ZW5fc2V0dXBfdGltZXIoY3B1KTsKIAl4ZW5fc2V0dXBfY3B1X2Nsb2NrZXZlbnRzKCk7CiB9CisKK19faW5pdCB2b2lkIHhlbl9pbml0X3RpbWVfb3BzKHZvaWQpCit7CisJcHZfdGltZV9vcHMgPSB4ZW5fdGltZV9vcHM7CisKKwl4ODZfaW5pdC50aW1lcnMudGltZXJfaW5pdCA9IHhlbl90aW1lX2luaXQ7CisJeDg2X2luaXQudGltZXJzLnNldHVwX3BlcmNwdV9jbG9ja2V2ID0geDg2X2luaXRfbm9vcDsKKwl4ODZfY3B1aW5pdC5zZXR1cF9wZXJjcHVfY2xvY2tldiA9IHg4Nl9pbml0X25vb3A7CisKKwl4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX3RzYyA9IHhlbl90c2Nfa2h6OworCXg4Nl9wbGF0Zm9ybS5nZXRfd2FsbGNsb2NrID0geGVuX2dldF93YWxsY2xvY2s7CisJeDg2X3BsYXRmb3JtLnNldF93YWxsY2xvY2sgPSB4ZW5fc2V0X3dhbGxjbG9jazsKK30KKworI2lmZGVmIENPTkZJR19YRU5fUFZIVk0KK3N0YXRpYyB2b2lkIHhlbl9odm1fc2V0dXBfY3B1X2Nsb2NrZXZlbnRzKHZvaWQpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwl4ZW5fc2V0dXBfcnVuc3RhdGVfaW5mbyhjcHUpOworCXhlbl9zZXR1cF90aW1lcihjcHUpOworCXhlbl9zZXR1cF9jcHVfY2xvY2tldmVudHMoKTsKK30KKworX19pbml0IHZvaWQgeGVuX2h2bV9pbml0X3RpbWVfb3BzKHZvaWQpCit7CisJLyogdmVjdG9yIGNhbGxiYWNrIGlzIG5lZWRlZCBvdGhlcndpc2Ugd2UgY2Fubm90IHJlY2VpdmUgaW50ZXJydXB0cworCSAqIG9uIGNwdSA+IDAgKi8KKwlpZiAoIXhlbl9oYXZlX3ZlY3Rvcl9jYWxsYmFjayAmJiBudW1fcHJlc2VudF9jcHVzKCkgPiAxKQorCQlyZXR1cm47CisJaWYgKCF4ZW5fZmVhdHVyZShYRU5GRUFUX2h2bV9zYWZlX3B2Y2xvY2spKSB7CisJCXByaW50ayhLRVJOX0lORk8gIlhlbiBkb2Vzbid0IHN1cHBvcnQgcHZjbG9jayBvbiBIVk0sIgorCQkJCSJkaXNhYmxlIHB2IHRpbWVyXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXB2X3RpbWVfb3BzID0geGVuX3RpbWVfb3BzOworCXg4Nl9pbml0LnRpbWVycy5zZXR1cF9wZXJjcHVfY2xvY2tldiA9IHhlbl90aW1lX2luaXQ7CisJeDg2X2NwdWluaXQuc2V0dXBfcGVyY3B1X2Nsb2NrZXYgPSB4ZW5faHZtX3NldHVwX2NwdV9jbG9ja2V2ZW50czsKKworCXg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjID0geGVuX3RzY19raHo7CisJeDg2X3BsYXRmb3JtLmdldF93YWxsY2xvY2sgPSB4ZW5fZ2V0X3dhbGxjbG9jazsKKwl4ODZfcGxhdGZvcm0uc2V0X3dhbGxjbG9jayA9IHhlbl9zZXRfd2FsbGNsb2NrOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4veGVuLW9wcy5oIGIvYXJjaC94ODYveGVuL3hlbi1vcHMuaAppbmRleCBmOTE1M2EzLi43YzhhYjg2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4veGVuLW9wcy5oCisrKyBiL2FyY2gveDg2L3hlbi94ZW4tb3BzLmgKQEAgLTM4LDYgKzM4LDEwIEBACiB2b2lkIHhlbl9lbmFibGVfc3lzY2FsbCh2b2lkKTsKIHZvaWQgeGVuX3ZjcHVfcmVzdG9yZSh2b2lkKTsKIAordm9pZCB4ZW5fY2FsbGJhY2tfdmVjdG9yKHZvaWQpOwordm9pZCB4ZW5faHZtX2luaXRfc2hhcmVkX2luZm8odm9pZCk7Cit2b2lkIF9faW5pdCB4ZW5fdW5wbHVnX2VtdWxhdGVkX2RldmljZXModm9pZCk7CisKIHZvaWQgX19pbml0IHhlbl9idWlsZF9keW5hbWljX3BoeXNfdG9fbWFjaGluZSh2b2lkKTsKIAogdm9pZCB4ZW5faW5pdF9pcnFfb3BzKHZvaWQpOwpAQCAtNDYsMTEgKzUwLDggQEAKIHZvaWQgeGVuX3RlYXJkb3duX3RpbWVyKGludCBjcHUpOwogY3ljbGVfdCB4ZW5fY2xvY2tzb3VyY2VfcmVhZCh2b2lkKTsKIHZvaWQgeGVuX3NldHVwX2NwdV9jbG9ja2V2ZW50cyh2b2lkKTsKLXVuc2lnbmVkIGxvbmcgeGVuX3RzY19raHoodm9pZCk7Ci12b2lkIF9faW5pdCB4ZW5fdGltZV9pbml0KHZvaWQpOwotdW5zaWduZWQgbG9uZyB4ZW5fZ2V0X3dhbGxjbG9jayh2b2lkKTsKLWludCB4ZW5fc2V0X3dhbGxjbG9jayh1bnNpZ25lZCBsb25nIHRpbWUpOwotdW5zaWduZWQgbG9uZyBsb25nIHhlbl9zY2hlZF9jbG9jayh2b2lkKTsKK3ZvaWQgX19pbml0IHhlbl9pbml0X3RpbWVfb3BzKHZvaWQpOwordm9pZCBfX2luaXQgeGVuX2h2bV9pbml0X3RpbWVfb3BzKHZvaWQpOwogCiBpcnFyZXR1cm5fdCB4ZW5fZGVidWdfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiAKQEAgLTEwMSw0ICsxMDIsNiBAQAogdm9pZCB4ZW5fc3lzcmV0NjQodm9pZCk7CiB2b2lkIHhlbl9hZGp1c3RfZXhjZXB0aW9uX2ZyYW1lKHZvaWQpOwogCitleHRlcm4gaW50IHhlbl9wYW5pY19oYW5kbGVyX2luaXQodm9pZCk7CisKICNlbmRpZiAvKiBYRU5fT1BTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL0tjb25maWcgYi9hcmNoL3h0ZW5zYS9LY29uZmlnCmluZGV4IGViZTIyOGQuLjA4NTliZmQgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL0tjb25maWcKKysrIGIvYXJjaC94dGVuc2EvS2NvbmZpZwpAQCAtNDgsOSArNDgsNiBAQAogCWludAogCWRlZmF1bHQgMTAwCiAKLWNvbmZpZyBHRU5FUklDX1RJTUUKLQlkZWZfYm9vbCB5Ci0KIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgogCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9NYWtlZmlsZSBiL2FyY2gveHRlbnNhL01ha2VmaWxlCmluZGV4IDRjYWZmYWMuLjc2MDg1NTkgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL01ha2VmaWxlCisrKyBiL2FyY2gveHRlbnNhL01ha2VmaWxlCkBAIC0zNSw2ICszNSw4IEBACiAKIEtCVUlMRF9DRkxBR1MgKz0gLXBpcGUgLW1sb25nY2FsbHMKIAorS0JVSUxEX0NGTEFHUyArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tZm9yY2Utbm8tcGljLCkKKwogdmFyZGlycyA6PSAkKHBhdHN1YnN0ICUsYXJjaC94dGVuc2EvdmFyaWFudHMvJS8sJCh2YXJpYW50LXkpKQogcGxmZGlycyA6PSAkKHBhdHN1YnN0ICUsYXJjaC94dGVuc2EvcGxhdGZvcm1zLyUvLCQocGxhdGZvcm0teSkpCiAKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2NvbmZpZ3MvaXNzX2RlZmNvbmZpZyBiL2FyY2gveHRlbnNhL2NvbmZpZ3MvaXNzX2RlZmNvbmZpZwppbmRleCBmMTk4NTQwLi43MzY4MTY0IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9jb25maWdzL2lzc19kZWZjb25maWcKKysrIGIvYXJjaC94dGVuc2EvY29uZmlncy9pc3NfZGVmY29uZmlnCkBAIC0xLDE5MyArMSwyMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMS1yYzIKLSMgRnJpIEZlYiAyNSAxOToyMToyNCAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzQtcmM2CisjIFR1ZSBBdWcgIDMgMDA6MTA6NTQgMjAxMAogIwotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUE9eQogQ09ORklHX1hURU5TQT15Ci0jIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0hBVkVfREVDX0xPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19OT19JT1BPUlQ9eQorQ09ORklHX0haPTEwMAorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cAogIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tPQkpFQ1RfVUVWRU5UIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCi0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19BSU89eQogCiAjCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorQ09ORklHX0NPTVBBVF9CUks9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCREFGPXkKK0NPTkZJR19CTEtfREVWX0JTRz15CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorQ09ORklHX01NVT15CisjIENPTkZJR19WQVJJQU5UX0lSUV9TV0lUQ0ggaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcwogIwogQ09ORklHX1hURU5TQV9WQVJJQU5UX0ZTRj15Ci1DT05GSUdfTU1VPXkKKyMgQ09ORklHX1hURU5TQV9WQVJJQU5UX0RDMjMyQiBpcyBub3Qgc2V0CisjIENPTkZJR19YVEVOU0FfVkFSSUFOVF9TNjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19YVEVOU0FfVU5BTElHTkVEX1VTRVIgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBvcHRpb25zCi0jCi1DT05GSUdfWFRFTlNBX1BMQVRGT1JNX0lTUz15Ci0jIENPTkZJR19YVEVOU0FfUExBVEZPUk1fWFQyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hURU5TQV9QTEFURk9STV9BUlVCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YVEVOU0FfQ0FMSUJSQVRFX0NDT1VOVCBpcyBub3Qgc2V0Ci1DT05GSUdfWFRFTlNBX0NQVV9DTE9DSz0xMAotIyBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVkgaXMgbm90IHNldAotQ09ORklHX0NNRExJTkVfQk9PTD15Ci1DT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwzODQwMCBldGgwPXR1bnRhcCwsdGFwMCBpcD0xOTIuMTY4LjE2OC41OjE5Mi4xNjguMTY4LjEgcm9vdD1uZnMgbmZzcm9vdD0xOTIuMTY4LjE2OC4xOi9vcHQvbW9udGF2aXN0YS9wcm8vZGV2a2l0L3h0ZW5zYS9saW51eF9iZS90YXJnZXQiCitDT05GSUdfWFRFTlNBX0NBTElCUkFURV9DQ09VTlQ9eQogQ09ORklHX1NFUklBTF9DT05TT0xFPXkKIENPTkZJR19YVEVOU0FfSVNTX05FVFdPUks9eQogCiAjCiAjIEJ1cyBvcHRpb25zCiAjCisjIENPTkZJR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogCiAjCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMgUGxhdGZvcm0gb3B0aW9ucwogIwotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19YVEVOU0FfUExBVEZPUk1fSVNTPXkKKyMgQ09ORklHX1hURU5TQV9QTEFURk9STV9YVDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfWFRFTlNBX1BMQVRGT1JNX1M2MTA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAsMzg0MDAgZXRoMD10dW50YXAsLHRhcDAgaXA9MTkyLjE2OC4xNjguNToxOTIuMTY4LjE2OC4xIHJvb3Q9bmZzIG5mc3Jvb3Q9MTkyLjE2OC4xNjguMTovb3B0L21vbnRhdmlzdGEvcHJvL2RldmtpdC94dGVuc2EvbGludXhfYmUvdGFyZ2V0IgorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCi0jIFBDLWNhcmQgYnJpZGdlcwotIwotCi0jCi0jIFBDSSBIb3RwbHVnIFN1cHBvcnQKLSMKLQotIwotIyBFeGVjdHVhYmxlIGZpbGUgZm9ybWF0cworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0tDT1JFX0VMRj15CiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCi0jIENPTkZJR19NVEQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIwotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29ya2luZyBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15CkBAIC0xOTksMjEgKzIyMCwyOCBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1RDUERJQUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CitDT05GSUdfSU5FVF9MUk89eQorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfSE1BQ19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtMjIxLDc3ICsyNDksMTI2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIX0NMS19KSUZGSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hfQ0xLX0dFVFRJTUVPRkRBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIX0NMS19DUFUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIworIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCisjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19TQ1NJX01PRD15CisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgVGVsZXBob255IFN1cHBvcnQKLSMKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCiAjCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCiAjCi0jIElucHV0IEkvTyBkcml2ZXJzCi0jCi0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfR0FNRVBPUlQ9eQotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAotCi0jCiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKIENPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTMwMiwxOCArMzc5LDQ3IEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKKyMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CiAKICMKLSMgV2F0Y2hkb2cgQ2FyZHMKKyMgUFBTIHN1cHBvcnQKICMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIworIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSFQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKIENPTkZJR19XQVRDSERPR19OT1dBWU9VVD15CiAKQEAgLTMyMSw5OCArNDI3LDExMSBAQAogIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX1NPRlRfV0FUQ0hET0c9eQotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCi0jIEkyQyBzdXBwb3J0CisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cwotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKICMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIAogIwotIyBVU0Igc3VwcG9ydAorIyBTcGVjaWFsIEhJRCBkcml2ZXJzCiAjCitDT05GSUdfVVNCX1NVUFBPUlQ9eQogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucwogIwogCiAjCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAorIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQogIwogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCi0jIEluZmluaUJhbmQgc3VwcG9ydAorIyBUSSBWTFlOUQogIwotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKICMKICMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTQzMiwxOSArNTUxLDE0IEBACiAjCiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15Ci1DT05GSUdfREVWRlNfRlM9eQotQ09ORklHX0RFVkZTX01PVU5UPXkKLSMgQ09ORklHX0RFVkZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldApAQCAtNDUyLDI5ICs1NjYsMjIgQEAKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTX0RJUkVDVElPPXkKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLSMgQ09ORklHX0VYUE9SVEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NFUEhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CkBAIC00ODUsNDMgKzU5MiwxNzUgQEAKICMKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKLUNPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUj15CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorQ09ORklHX0NSWVBUTz15CiAKICMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX1JORz15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKIAogIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKICMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworQ09ORklHX0NSWVBUT19BRVM9eQorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HPXkKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMzIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAppbmRleCBhNTA4ZjJmLi4zNzZjZDlkIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC0xMTUsNiArMTE1LDcgQEAKICNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCxlbmQpCQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9jYWNoZV92dW5tYXAoc3RhcnQsZW5kKQkJCWRvIHsgfSB3aGlsZSAoMCkKIAorI2RlZmluZSBBUkNIX0lNUExFTUVOVFNfRkxVU0hfRENBQ0hFX1BBR0UgMAogI2RlZmluZSBmbHVzaF9kY2FjaGVfcGFnZShwYWdlKQkJCQlkbyB7IH0gd2hpbGUgKDApCiAKICNkZWZpbmUgZmx1c2hfY2FjaGVfcGFnZSh2bWEsYWRkcixwZm4pCQkJZG8geyB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vY29wcm9jZXNzb3IuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2NvcHJvY2Vzc29yLmgKaW5kZXggNjVhMjg1ZC4uNzVjOTRhMSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vY29wcm9jZXNzb3IuaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9jb3Byb2Nlc3Nvci5oCkBAIC0xMyw2ICsxMyw3IEBACiAjZGVmaW5lIF9YVEVOU0FfQ09QUk9DRVNTT1JfSAogCiAjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CisjaW5jbHVkZSA8dmFyaWFudC9jb3JlLmg+CiAjaW5jbHVkZSA8dmFyaWFudC90aWUuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCA1ZWI2ZDY5Li42ZTY1ZWFkIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9lbGYuaApAQCAtMTQsNiArMTQsNyBAQAogI2RlZmluZSBfWFRFTlNBX0VMRl9ICiAKICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL2NvcHJvY2Vzc29yLmg+CiAKIC8qIFh0ZW5zYSBwcm9jZXNzb3IgRUxGIGFyY2hpdGVjdHVyZS1tYWdpYyBudW1iZXIgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbG9jYWw2NC5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbG9jYWw2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YzkzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9sb2NhbDY0LmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsNjQuaD4KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCA0ZjRhNzk4Li40MGNmOWJjIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGdhbGxvYy5oCkBAIC0xNCw2ICsxNCw3IEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogLyoKICAqIEFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgYSBwbWQgaXMgdHJpdmlhbDogdGhlIDEtZW50cnkgcG1kIGlzCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IDBlYTQ5MzcuLjNhY2IyNmUgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0xMiw3ICsxMiw2IEBACiAjZGVmaW5lIF9YVEVOU0FfUFJPQ0VTU09SX0gKIAogI2luY2x1ZGUgPHZhcmlhbnQvY29yZS5oPgotI2luY2x1ZGUgPGFzbS9jb3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPHBsYXRmb3JtL2hhcmR3YXJlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCAzYzU0OWY3Li4wZDQyYzkzIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtNzcsNiArNzcsOCBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCisjaW5jbHVkZSA8YXNtL2NvcHJvY2Vzc29yLmg+CisKIC8qCiAgKiBUaGlzIHN0cnVjdCBkZWZpbmVzIHRoZSB3YXkgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIG9uIHRoZQogICoga2VybmVsIHN0YWNrIGR1cmluZyBhIHN5c3RlbSBjYWxsIG9yIG90aGVyIGtlcm5lbCBlbnRyeS4KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gveHRlbnNhL2tlcm5lbC9NYWtlZmlsZQppbmRleCA2ZjU2ZDk1Li4yZDI3MjhiIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL01ha2VmaWxlCkBAIC0yMyw4ICsyMyw4IEBACiAjCiAjIFJlcGxpY2F0ZSBydWxlcyBpbiBzY3JpcHRzL01ha2VmaWxlLmJ1aWxkCiAKLXNlZC15ID0gLWUgJ3MvKFwoXC5bYS16XSppdFx8XC5yZWZcfFwpXC50ZXh0KS8oXDEubGl0ZXJhbCBcMS50ZXh0KS9nJwlcCi0JLWUgJ3MvKFwoXC50ZXh0XC5bYS16XSpcKSkvKFwxLmxpdGVyYWwgXDEpL2cnCitzZWQteSA9IC1lICdzL1wqKFwoXC5bYS16XSppdFx8XC5yZWZcfFwpXC50ZXh0KS8qKFwxLmxpdGVyYWwgXDEudGV4dCkvZycgICAgXAorCS1lICdzL1wqKFwoXC50ZXh0XC5bYS16XSpcKSkvKihcMS5saXRlcmFsIFwxKS9nJwogCiBxdWlldF9jbWRfX2NwcF9sZHNfUyA9IExEUyAgICAgJEAKICAgICAgIGNtZF9fY3BwX2xkc19TID0gJChDUFApICQoY3BwX2ZsYWdzKSAtUCAtQyAtVXh0ZW5zYSAtRF9fQVNTRU1CTFlfXyAkPCBcCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDA3MGZmOGEuLjdkYzNmOTEgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0xMyw2ICsxMyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vY29wcm9jZXNzb3IuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvZW50cnkuUyBiL2FyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TCmluZGV4IDc3ZmM5ZjYuLjVmZDAxZjYgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vY29wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9oZWFkLlMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvaGVhZC5TCmluZGV4IGQyMTVhZGMuLjNlZjkxYTcgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL2hlYWQuUwpAQCAtMTg0LDggKzE4NCw4IEBACiAJICogTm93IGNsZWFyIHRoZSBCU1Mgc2VnbWVudC4KIAkgKi8KIAotCW1vdmkJYTIsIF9ic3Nfc3RhcnQJIyBzdGFydCBvZiBCU1MKLQltb3ZpCWEzLCBfYnNzX2VuZAkjIGVuZCBvZiBCU1MKKwltb3ZpCWEyLCBfX2Jzc19zdGFydAkjIHN0YXJ0IG9mIEJTUworCW1vdmkJYTMsIF9fYnNzX3N0b3AJIyBlbmQgb2YgQlNTCiAKIAlfX2xvb3B0CWEyLCBhMywgYTQsIDIKIAlzMzJpCWEwLCBhMiwgMApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9uZXR3b3JrLmMgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL25ldHdvcmsuYwppbmRleCA4N2UyMThmLi5mNzE3ZTIwIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL25ldHdvcmsuYworKysgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL25ldHdvcmsuYwpAQCAtNjIzLDYgKzYyMywxOSBAQAogCiBzdGF0aWMgaW50IGRyaXZlcl9yZWdpc3RlcmVkOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlzc19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBpc3NfbmV0X29wZW4sCisJLm5kb19zdG9wCQk9IGlzc19uZXRfY2xvc2UsCisJLm5kb19nZXRfc3RhdHMJCT0gaXNzX25ldF9nZXRfc3RhdHMsCisJLm5kb19zdGFydF94bWl0CQk9IGlzc19uZXRfc3RhcnRfeG1pdCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX2NoYW5nZV9tdHUJCT0gaXNzX25ldF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gaXNzX25ldF9zZXRfbWFjLAorCS8vLm5kb19kb19pb2N0bAkJPSBpc3NfbmV0X2lvY3RsLAorCS5uZG9fdHhfdGltZW91dAkJPSBpc3NfbmV0X3R4X3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBpc3NfbmV0X3NldF9tdWx0aWNhc3RfbGlzdCwKK307CisKIHN0YXRpYyBpbnQgaXNzX25ldF9jb25maWd1cmUoaW50IGluZGV4LCBjaGFyICppbml0KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC02ODYsMTUgKzY5OSw4IEBACiAJICovCiAJc25wcmludGYoZGV2LT5uYW1lLCBzaXplb2YgZGV2LT5uYW1lLCAiZXRoJWQiLCBpbmRleCk7CiAKKwlkZXYtPm5ldGRldl9vcHMgPSAmaXNzX25ldGRldl9vcHM7CiAJZGV2LT5tdHUgPSBscC0+bXR1OwotCWRldi0+b3BlbiA9IGlzc19uZXRfb3BlbjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGlzc19uZXRfc3RhcnRfeG1pdDsKLQlkZXYtPnN0b3AgPSBpc3NfbmV0X2Nsb3NlOwotCWRldi0+Z2V0X3N0YXRzID0gaXNzX25ldF9nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBpc3NfbmV0X3NldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPnR4X3RpbWVvdXQgPSBpc3NfbmV0X3R4X3RpbWVvdXQ7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBpc3NfbmV0X3NldF9tYWM7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gaXNzX25ldF9jaGFuZ2VfbXR1OwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAoSFogPj4gMSk7CiAJZGV2LT5pcnEgPSAtMTsKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL0tjb25maWcgYi9jcnlwdG8vS2NvbmZpZwppbmRleCA5ZDk0MzRmLi4xY2Q0OTdkIDEwMDY0NAotLS0gYS9jcnlwdG8vS2NvbmZpZworKysgYi9jcnlwdG8vS2NvbmZpZwpAQCAtODAsNiArODAsMTEgQEAKIAogY29uZmlnIENSWVBUT19QQ09NUAogCXRyaXN0YXRlCisJc2VsZWN0IENSWVBUT19QQ09NUDIKKwlzZWxlY3QgQ1JZUFRPX0FMR0FQSQorCitjb25maWcgQ1JZUFRPX1BDT01QMgorCXRyaXN0YXRlCiAJc2VsZWN0IENSWVBUT19BTEdBUEkyCiAKIGNvbmZpZyBDUllQVE9fTUFOQUdFUgpAQCAtOTQsNyArOTksMTUgQEAKIAlzZWxlY3QgQ1JZUFRPX0FFQUQyCiAJc2VsZWN0IENSWVBUT19IQVNIMgogCXNlbGVjdCBDUllQVE9fQkxLQ0lQSEVSMgotCXNlbGVjdCBDUllQVE9fUENPTVAKKwlzZWxlY3QgQ1JZUFRPX1BDT01QMgorCitjb25maWcgQ1JZUFRPX01BTkFHRVJfVEVTVFMKKwlib29sICJSdW4gYWxnb2xpdGhtcycgc2VsZi10ZXN0cyIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIENSWVBUT19NQU5BR0VSMgorCWhlbHAKKwkgIFJ1biBjcnlwdG9tYW5hZ2VyJ3MgdGVzdHMgZm9yIHRoZSBuZXcgY3J5cHRvIGFsZ29yaXRobXMgYmVpbmcKKwkgIHJlZ2lzdGVyZWQuCiAKIGNvbmZpZyBDUllQVE9fR0YxMjhNVUwKIAl0cmlzdGF0ZSAiR0YoMl4xMjgpIG11bHRpcGxpY2F0aW9uIGZ1bmN0aW9ucyAoRVhQRVJJTUVOVEFMKSIKZGlmZiAtLWdpdCBhL2NyeXB0by9NYWtlZmlsZSBiL2NyeXB0by9NYWtlZmlsZQppbmRleCBkN2U2NDQxLi40MjNiN2RlIDEwMDY0NAotLS0gYS9jcnlwdG8vTWFrZWZpbGUKKysrIGIvY3J5cHRvL01ha2VmaWxlCkBAIC0yNiw3ICsyNiw3IEBACiBjcnlwdG9faGFzaC1vYmpzICs9IHNoYXNoLm8KIG9iai0kKENPTkZJR19DUllQVE9fSEFTSDIpICs9IGNyeXB0b19oYXNoLm8KIAotb2JqLSQoQ09ORklHX0NSWVBUT19QQ09NUCkgKz0gcGNvbXByZXNzLm8KK29iai0kKENPTkZJR19DUllQVE9fUENPTVAyKSArPSBwY29tcHJlc3MubwogCiBjcnlwdG9tZ3Itb2JqcyA6PSBhbGdib3NzLm8gdGVzdG1nci5vCiAKQEAgLTYxLDcgKzYxLDcgQEAKIG9iai0kKENPTkZJR19DUllQVE9fREVTKSArPSBkZXNfZ2VuZXJpYy5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0ZDUllQVCkgKz0gZmNyeXB0Lm8KIG9iai0kKENPTkZJR19DUllQVE9fQkxPV0ZJU0gpICs9IGJsb3dmaXNoLm8KLW9iai0kKENPTkZJR19DUllQVE9fVFdPRklTSCkgKz0gdHdvZmlzaC5vCitvYmotJChDT05GSUdfQ1JZUFRPX1RXT0ZJU0gpICs9IHR3b2Zpc2hfZ2VuZXJpYy5vCiBvYmotJChDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OKSArPSB0d29maXNoX2NvbW1vbi5vCiBvYmotJChDT05GSUdfQ1JZUFRPX1NFUlBFTlQpICs9IHNlcnBlbnQubwogb2JqLSQoQ09ORklHX0NSWVBUT19BRVMpICs9IGFlc19nZW5lcmljLm8KZGlmZiAtLWdpdCBhL2NyeXB0by9hYmxrY2lwaGVyLmMgYi9jcnlwdG8vYWJsa2NpcGhlci5jCmluZGV4IDk4YTY2MTAuLmE4NTRkZjJhIDEwMDY0NAotLS0gYS9jcnlwdG8vYWJsa2NpcGhlci5jCisrKyBiL2NyeXB0by9hYmxrY2lwaGVyLmMKQEAgLTE2NSw3ICsxNjUsNyBAQAogCiAJcCA9IGttYWxsb2MobiwgR0ZQX0FUT01JQyk7CiAJaWYgKCFwKQotCQlhYmxrY2lwaGVyX3dhbGtfZG9uZShyZXEsIHdhbGssIC1FTk9NRU0pOworCQlyZXR1cm4gYWJsa2NpcGhlcl93YWxrX2RvbmUocmVxLCB3YWxrLCAtRU5PTUVNKTsKIAogCWJhc2UgPSBwICsgMTsKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2FsZ2Jvc3MuYyBiL2NyeXB0by9hbGdib3NzLmMKaW5kZXggYzNjMTk2Yi4uNDBiZDM5MSAxMDA2NDQKLS0tIGEvY3J5cHRvL2FsZ2Jvc3MuYworKysgYi9jcnlwdG8vYWxnYm9zcy5jCkBAIC0yMDYsNiArMjA2LDcgQEAKIAlyZXR1cm4gTk9USUZZX09LOwogfQogCisjaWZkZWYgQ09ORklHX0NSWVBUT19NQU5BR0VSX1RFU1RTCiBzdGF0aWMgaW50IGNyeXB0b21ncl90ZXN0KHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGNyeXB0b190ZXN0X3BhcmFtICpwYXJhbSA9IGRhdGE7CkBAIC0yNjYsNiArMjY3LDcgQEAKIGVycjoKIAlyZXR1cm4gTk9USUZZX09LOwogfQorI2VuZGlmIC8qIENPTkZJR19DUllQVE9fTUFOQUdFUl9URVNUUyAqLwogCiBzdGF0aWMgaW50IGNyeXB0b21ncl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIG1zZywKIAkJCSAgICB2b2lkICpkYXRhKQpAQCAtMjczLDggKzI3NSwxMCBAQAogCXN3aXRjaCAobXNnKSB7CiAJY2FzZSBDUllQVE9fTVNHX0FMR19SRVFVRVNUOgogCQlyZXR1cm4gY3J5cHRvbWdyX3NjaGVkdWxlX3Byb2JlKGRhdGEpOworI2lmZGVmIENPTkZJR19DUllQVE9fTUFOQUdFUl9URVNUUwogCWNhc2UgQ1JZUFRPX01TR19BTEdfUkVHSVNURVI6CiAJCXJldHVybiBjcnlwdG9tZ3Jfc2NoZWR1bGVfdGVzdChkYXRhKTsKKyNlbmRpZgogCX0KIAogCXJldHVybiBOT1RJRllfRE9ORTsKZGlmZiAtLWdpdCBhL2NyeXB0by9hdXRoZW5jLmMgYi9jcnlwdG8vYXV0aGVuYy5jCmluZGV4IGI5ODg0ZWUuLmE1YTIyY2YgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hdXRoZW5jLmMKKysrIGIvY3J5cHRvL2F1dGhlbmMuYwpAQCAtNjE2LDcgKzYxNiw3IEBACiAJYXV0aCA9IGFoYXNoX2F0dHJfYWxnKHRiWzFdLCBDUllQVE9fQUxHX1RZUEVfSEFTSCwKIAkJCSAgICAgICBDUllQVE9fQUxHX1RZUEVfQUhBU0hfTUFTSyk7CiAJaWYgKElTX0VSUihhdXRoKSkKLQkJcmV0dXJuIEVSUl9QVFIoUFRSX0VSUihhdXRoKSk7CisJCXJldHVybiBFUlJfQ0FTVChhdXRoKTsKIAogCWF1dGhfYmFzZSA9ICZhdXRoLT5iYXNlOwogCmRpZmYgLS1naXQgYS9jcnlwdG8vY3RyLmMgYi9jcnlwdG8vY3RyLmMKaW5kZXggNmMzYmZhYi4uNGNhNzIyMiAxMDA2NDQKLS0tIGEvY3J5cHRvL2N0ci5jCisrKyBiL2NyeXB0by9jdHIuYwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJYWxnID0gY3J5cHRvX2F0dHJfYWxnKHRiWzFdLCBDUllQVE9fQUxHX1RZUEVfQ0lQSEVSLAogCQkJCSAgQ1JZUFRPX0FMR19UWVBFX01BU0spOwogCWlmIChJU19FUlIoYWxnKSkKLQkJcmV0dXJuIEVSUl9QVFIoUFRSX0VSUihhbGcpKTsKKwkJcmV0dXJuIEVSUl9DQVNUKGFsZyk7CiAKIAkvKiBCbG9jayBzaXplIG11c3QgYmUgPj0gNCBieXRlcy4gKi8KIAllcnIgPSAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3BjcnlwdC5jIGIvY3J5cHRvL3BjcnlwdC5jCmluZGV4IDI0NzE3OGMuLmRlMzA3ODIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9wY3J5cHQuYworKysgYi9jcnlwdG8vcGNyeXB0LmMKQEAgLTI0LDEyICsyNCw0MCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8Y3J5cHRvL3BjcnlwdC5oPgogCi1zdGF0aWMgc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGNyeXB0X2VuY19wYWRhdGE7Ci1zdGF0aWMgc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGNyeXB0X2RlY19wYWRhdGE7Ci1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmVuY3dxOwotc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkZWN3cTsKK3N0cnVjdCBwYWRhdGFfcGNyeXB0IHsKKwlzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdDsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CisKKwkvKgorCSAqIENwdW1hc2sgZm9yIGNhbGxiYWNrIENQVXMuIEl0IHNob3VsZCBiZQorCSAqIGVxdWFsIHRvIHNlcmlhbCBjcHVtYXNrIG9mIGNvcnJlc3BvbmRpbmcgcGFkYXRhIGluc3RhbmNlLAorCSAqIHNvIGl0IGlzIHVwZGF0ZWQgd2hlbiBwYWRhdGEgbm90aWZpZXMgdXMgYWJvdXQgc2VyaWFsCisJICogY3B1bWFzayBjaGFuZ2UuCisJICoKKwkgKiBjYl9jcHVtYXNrIGlzIHByb3RlY3RlZCBieSBSQ1UuIFRoaXMgZmFjdCBwcmV2ZW50cyB1cyBmcm9tCisJICogdXNpbmcgY3B1bWFza192YXJfdCBkaXJlY3RseSBiZWNhdXNlIHRoZSBhY3R1YWwgdHlwZSBvZgorCSAqIGNwdW1zYWtfdmFyX3QgZGVwZW5kcyBvbiBrZXJuZWwgY29uZmlndXJhdGlvbihwYXJ0aWN1bGFybHkgb24KKwkgKiBDT05GSUdfQ1BVTUFTS19PRkZTVEFDSyBtYWNybykuIERlcGVuZGluZyBvbiB0aGUgY29uZmlndXJhdGlvbgorCSAqIGNwdW1hc2tfdmFyX3QgbWF5IGJlIGVpdGhlciBhIHBvaW50ZXIgdG8gdGhlIHN0cnVjdCBjcHVtYXNrCisJICogb3IgYSB2YXJpYWJsZSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrLiBUaHVzIHdlIGNhbiBub3Qgc2FmZWx5IHVzZQorCSAqIGNwdW1hc2tfdmFyX3Qgd2l0aCBSQ1Ugb3BlcmF0aW9ucyBzdWNoIGFzIHJjdV9hc3NpZ25fcG9pbnRlciBvcgorCSAqIHJjdV9kZXJlZmVyZW5jZS4gU28gY3B1bWFza192YXJfdCBpcyB3cmFwcGVkIHdpdGggc3RydWN0CisJICogcGNyeXB0X2NwdW1hc2sgd2hpY2ggbWFrZXMgcG9zc2libGUgdG8gdXNlIGl0IHdpdGggUkNVLgorCSAqLworCXN0cnVjdCBwY3J5cHRfY3B1bWFzayB7CisJCWNwdW1hc2tfdmFyX3QgbWFzazsKKwl9ICpjYl9jcHVtYXNrOworCXN0cnVjdCBub3RpZmllcl9ibG9jayBuYmxvY2s7Cit9OworCitzdGF0aWMgc3RydWN0IHBhZGF0YV9wY3J5cHQgcGVuY3J5cHQ7CitzdGF0aWMgc3RydWN0IHBhZGF0YV9wY3J5cHQgcGRlY3J5cHQ7CitzdGF0aWMgc3RydWN0IGtzZXQgICAgICAgICAgICpwY3J5cHRfa3NldDsKIAogc3RydWN0IHBjcnlwdF9pbnN0YW5jZV9jdHggewogCXN0cnVjdCBjcnlwdG9fc3Bhd24gc3Bhd247CkBAIC00MiwyNSArNzAsMzIgQEAKIH07CiAKIHN0YXRpYyBpbnQgcGNyeXB0X2RvX3BhcmFsbGVsKHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhLCB1bnNpZ25lZCBpbnQgKmNiX2NwdSwKLQkJCSAgICAgIHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KQorCQkJICAgICAgc3RydWN0IHBhZGF0YV9wY3J5cHQgKnBjcnlwdCkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1X2luZGV4LCBjcHUsIGk7CisJc3RydWN0IHBjcnlwdF9jcHVtYXNrICpjcHVtYXNrOwogCiAJY3B1ID0gKmNiX2NwdTsKIAotCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1X2FjdGl2ZV9tYXNrKSkKKwlyY3VfcmVhZF9sb2NrX2JoKCk7CisJY3B1bWFzayA9IHJjdV9kZXJlZmVyZW5jZShwY3J5cHQtPmNiX2NwdW1hc2spOworCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1bWFzay0+bWFzaykpCiAJCQlnb3RvIG91dDsKIAotCWNwdV9pbmRleCA9IGNwdSAlIGNwdW1hc2tfd2VpZ2h0KGNwdV9hY3RpdmVfbWFzayk7CisJaWYgKCFjcHVtYXNrX3dlaWdodChjcHVtYXNrLT5tYXNrKSkKKwkJCWdvdG8gb3V0OwogCi0JY3B1ID0gY3B1bWFza19maXJzdChjcHVfYWN0aXZlX21hc2spOworCWNwdV9pbmRleCA9IGNwdSAlIGNwdW1hc2tfd2VpZ2h0KGNwdW1hc2stPm1hc2spOworCisJY3B1ID0gY3B1bWFza19maXJzdChjcHVtYXNrLT5tYXNrKTsKIAlmb3IgKGkgPSAwOyBpIDwgY3B1X2luZGV4OyBpKyspCi0JCWNwdSA9IGNwdW1hc2tfbmV4dChjcHUsIGNwdV9hY3RpdmVfbWFzayk7CisJCWNwdSA9IGNwdW1hc2tfbmV4dChjcHUsIGNwdW1hc2stPm1hc2spOwogCiAJKmNiX2NwdSA9IGNwdTsKIAogb3V0OgotCXJldHVybiBwYWRhdGFfZG9fcGFyYWxsZWwocGluc3QsIHBhZGF0YSwgY3B1KTsKKwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKKwlyZXR1cm4gcGFkYXRhX2RvX3BhcmFsbGVsKHBjcnlwdC0+cGluc3QsIHBhZGF0YSwgY3B1KTsKIH0KIAogc3RhdGljIGludCBwY3J5cHRfYWVhZF9zZXRrZXkoc3RydWN0IGNyeXB0b19hZWFkICpwYXJlbnQsCkBAIC0xNDIsMTEgKzE3Nyw5IEBACiAJCQkgICAgICAgcmVxLT5jcnlwdGxlbiwgcmVxLT5pdik7CiAJYWVhZF9yZXF1ZXN0X3NldF9hc3NvYyhjcmVxLCByZXEtPmFzc29jLCByZXEtPmFzc29jbGVuKTsKIAotCWVyciA9IHBjcnlwdF9kb19wYXJhbGxlbChwYWRhdGEsICZjdHgtPmNiX2NwdSwgcGNyeXB0X2VuY19wYWRhdGEpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JZWxzZQotCQllcnIgPSBjcnlwdG9fYWVhZF9lbmNyeXB0KGNyZXEpOworCWVyciA9IHBjcnlwdF9kb19wYXJhbGxlbChwYWRhdGEsICZjdHgtPmNiX2NwdSwgJnBlbmNyeXB0KTsKKwlpZiAoIWVycikKKwkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0xODYsMTEgKzIxOSw5IEBACiAJCQkgICAgICAgcmVxLT5jcnlwdGxlbiwgcmVxLT5pdik7CiAJYWVhZF9yZXF1ZXN0X3NldF9hc3NvYyhjcmVxLCByZXEtPmFzc29jLCByZXEtPmFzc29jbGVuKTsKIAotCWVyciA9IHBjcnlwdF9kb19wYXJhbGxlbChwYWRhdGEsICZjdHgtPmNiX2NwdSwgcGNyeXB0X2RlY19wYWRhdGEpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JZWxzZQotCQllcnIgPSBjcnlwdG9fYWVhZF9kZWNyeXB0KGNyZXEpOworCWVyciA9IHBjcnlwdF9kb19wYXJhbGxlbChwYWRhdGEsICZjdHgtPmNiX2NwdSwgJnBkZWNyeXB0KTsKKwlpZiAoIWVycikKKwkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0yMzIsMTEgKzI2Myw5IEBACiAJYWVhZF9naXZjcnlwdF9zZXRfYXNzb2MoY3JlcSwgYXJlcS0+YXNzb2MsIGFyZXEtPmFzc29jbGVuKTsKIAlhZWFkX2dpdmNyeXB0X3NldF9naXYoY3JlcSwgcmVxLT5naXYsIHJlcS0+c2VxKTsKIAotCWVyciA9IHBjcnlwdF9kb19wYXJhbGxlbChwYWRhdGEsICZjdHgtPmNiX2NwdSwgcGNyeXB0X2VuY19wYWRhdGEpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JZWxzZQotCQllcnIgPSBjcnlwdG9fYWVhZF9naXZlbmNyeXB0KGNyZXEpOworCWVyciA9IHBjcnlwdF9kb19wYXJhbGxlbChwYWRhdGEsICZjdHgtPmNiX2NwdSwgJnBlbmNyeXB0KTsKKwlpZiAoIWVycikKKwkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0zNzYsNiArNDA1LDExNSBAQAogCWtmcmVlKGluc3QpOwogfQogCitzdGF0aWMgaW50IHBjcnlwdF9jcHVtYXNrX2NoYW5nZV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQkJCQl1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGFkYXRhX3BjcnlwdCAqcGNyeXB0OworCXN0cnVjdCBwY3J5cHRfY3B1bWFzayAqbmV3X21hc2ssICpvbGRfbWFzazsKKwlzdHJ1Y3QgcGFkYXRhX2NwdW1hc2sgKmNwdW1hc2sgPSAoc3RydWN0IHBhZGF0YV9jcHVtYXNrICopZGF0YTsKKworCWlmICghKHZhbCAmIFBBREFUQV9DUFVfU0VSSUFMKSkKKwkJcmV0dXJuIDA7CisKKwlwY3J5cHQgPSBjb250YWluZXJfb2Yoc2VsZiwgc3RydWN0IHBhZGF0YV9wY3J5cHQsIG5ibG9jayk7CisJbmV3X21hc2sgPSBrbWFsbG9jKHNpemVvZigqbmV3X21hc2spLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ld19tYXNrKQorCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZuZXdfbWFzay0+bWFzaywgR0ZQX0tFUk5FTCkpIHsKKwkJa2ZyZWUobmV3X21hc2spOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlvbGRfbWFzayA9IHBjcnlwdC0+Y2JfY3B1bWFzazsKKworCWNwdW1hc2tfY29weShuZXdfbWFzay0+bWFzaywgY3B1bWFzay0+Y2JjcHUpOworCXJjdV9hc3NpZ25fcG9pbnRlcihwY3J5cHQtPmNiX2NwdW1hc2ssIG5ld19tYXNrKTsKKwlzeW5jaHJvbml6ZV9yY3VfYmgoKTsKKworCWZyZWVfY3B1bWFza192YXIob2xkX21hc2stPm1hc2spOworCWtmcmVlKG9sZF9tYXNrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY3J5cHRfc3lzZnNfYWRkKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LCBjb25zdCBjaGFyICpuYW1lKQoreworCWludCByZXQ7CisKKwlwaW5zdC0+a29iai5rc2V0ID0gcGNyeXB0X2tzZXQ7CisJcmV0ID0ga29iamVjdF9hZGQoJnBpbnN0LT5rb2JqLCBOVUxMLCBuYW1lKTsKKwlpZiAoIXJldCkKKwkJa29iamVjdF91ZXZlbnQoJnBpbnN0LT5rb2JqLCBLT0JKX0FERCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBjcnlwdF9pbml0X3BhZGF0YShzdHJ1Y3QgcGFkYXRhX3BjcnlwdCAqcGNyeXB0LAorCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgcmV0ID0gLUVOT01FTTsKKwlzdHJ1Y3QgcGNyeXB0X2NwdW1hc2sgKm1hc2s7CisKKwlnZXRfb25saW5lX2NwdXMoKTsKKworCXBjcnlwdC0+d3EgPSBjcmVhdGVfd29ya3F1ZXVlKG5hbWUpOworCWlmICghcGNyeXB0LT53cSkKKwkJZ290byBlcnI7CisKKwlwY3J5cHQtPnBpbnN0ID0gcGFkYXRhX2FsbG9jX3Bvc3NpYmxlKHBjcnlwdC0+d3EpOworCWlmICghcGNyeXB0LT5waW5zdCkKKwkJZ290byBlcnJfZGVzdHJveV93b3JrcXVldWU7CisKKwltYXNrID0ga21hbGxvYyhzaXplb2YoKm1hc2spLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1hc2spCisJCWdvdG8gZXJyX2ZyZWVfcGFkYXRhOworCWlmICghYWxsb2NfY3B1bWFza192YXIoJm1hc2stPm1hc2ssIEdGUF9LRVJORUwpKSB7CisJCWtmcmVlKG1hc2spOworCQlnb3RvIGVycl9mcmVlX3BhZGF0YTsKKwl9CisKKwljcHVtYXNrX2FuZChtYXNrLT5tYXNrLCBjcHVfcG9zc2libGVfbWFzaywgY3B1X2FjdGl2ZV9tYXNrKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIocGNyeXB0LT5jYl9jcHVtYXNrLCBtYXNrKTsKKworCXBjcnlwdC0+bmJsb2NrLm5vdGlmaWVyX2NhbGwgPSBwY3J5cHRfY3B1bWFza19jaGFuZ2Vfbm90aWZ5OworCXJldCA9IHBhZGF0YV9yZWdpc3Rlcl9jcHVtYXNrX25vdGlmaWVyKHBjcnlwdC0+cGluc3QsICZwY3J5cHQtPm5ibG9jayk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZV9jcHVtYXNrOworCisJcmV0ID0gcGNyeXB0X3N5c2ZzX2FkZChwY3J5cHQtPnBpbnN0LCBuYW1lKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl91bnJlZ2lzdGVyX25vdGlmaWVyOworCisJcHV0X29ubGluZV9jcHVzKCk7CisKKwlyZXR1cm4gcmV0OworCitlcnJfdW5yZWdpc3Rlcl9ub3RpZmllcjoKKwlwYWRhdGFfdW5yZWdpc3Rlcl9jcHVtYXNrX25vdGlmaWVyKHBjcnlwdC0+cGluc3QsICZwY3J5cHQtPm5ibG9jayk7CitlcnJfZnJlZV9jcHVtYXNrOgorCWZyZWVfY3B1bWFza192YXIobWFzay0+bWFzayk7CisJa2ZyZWUobWFzayk7CitlcnJfZnJlZV9wYWRhdGE6CisJcGFkYXRhX2ZyZWUocGNyeXB0LT5waW5zdCk7CitlcnJfZGVzdHJveV93b3JrcXVldWU6CisJZGVzdHJveV93b3JrcXVldWUocGNyeXB0LT53cSk7CitlcnI6CisJcHV0X29ubGluZV9jcHVzKCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwY3J5cHRfZmluaV9wYWRhdGEoc3RydWN0IHBhZGF0YV9wY3J5cHQgKnBjcnlwdCkKK3sKKwlrb2JqZWN0X3B1dCgmcGNyeXB0LT5waW5zdC0+a29iaik7CisJZnJlZV9jcHVtYXNrX3ZhcihwY3J5cHQtPmNiX2NwdW1hc2stPm1hc2spOworCWtmcmVlKHBjcnlwdC0+Y2JfY3B1bWFzayk7CisKKwlwYWRhdGFfc3RvcChwY3J5cHQtPnBpbnN0KTsKKwlwYWRhdGFfdW5yZWdpc3Rlcl9jcHVtYXNrX25vdGlmaWVyKHBjcnlwdC0+cGluc3QsICZwY3J5cHQtPm5ibG9jayk7CisJZGVzdHJveV93b3JrcXVldWUocGNyeXB0LT53cSk7CisJcGFkYXRhX2ZyZWUocGNyeXB0LT5waW5zdCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY3J5cHRvX3RlbXBsYXRlIHBjcnlwdF90bXBsID0gewogCS5uYW1lID0gInBjcnlwdCIsCiAJLmFsbG9jID0gcGNyeXB0X2FsbG9jLApAQCAtMzg1LDUyICs1MjMsMzkgQEAKIAogc3RhdGljIGludCBfX2luaXQgcGNyeXB0X2luaXQodm9pZCkKIHsKLQllbmN3cSA9IGNyZWF0ZV93b3JrcXVldWUoInBlbmNyeXB0Iik7Ci0JaWYgKCFlbmN3cSkKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCXBjcnlwdF9rc2V0ID0ga3NldF9jcmVhdGVfYW5kX2FkZCgicGNyeXB0IiwgTlVMTCwga2VybmVsX2tvYmopOworCWlmICghcGNyeXB0X2tzZXQpCiAJCWdvdG8gZXJyOwogCi0JZGVjd3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJwZGVjcnlwdCIpOwotCWlmICghZGVjd3EpCi0JCWdvdG8gZXJyX2Rlc3Ryb3lfZW5jd3E7CisJZXJyID0gcGNyeXB0X2luaXRfcGFkYXRhKCZwZW5jcnlwdCwgInBlbmNyeXB0Iik7CisJaWYgKGVycikKKwkJZ290byBlcnJfdW5yZWdfa3NldDsKIAorCWVyciA9IHBjcnlwdF9pbml0X3BhZGF0YSgmcGRlY3J5cHQsICJwZGVjcnlwdCIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2RlaW5pdF9wZW5jcnlwdDsKIAotCXBjcnlwdF9lbmNfcGFkYXRhID0gcGFkYXRhX2FsbG9jKGNwdV9wb3NzaWJsZV9tYXNrLCBlbmN3cSk7Ci0JaWYgKCFwY3J5cHRfZW5jX3BhZGF0YSkKLQkJZ290byBlcnJfZGVzdHJveV9kZWN3cTsKLQotCXBjcnlwdF9kZWNfcGFkYXRhID0gcGFkYXRhX2FsbG9jKGNwdV9wb3NzaWJsZV9tYXNrLCBkZWN3cSk7Ci0JaWYgKCFwY3J5cHRfZGVjX3BhZGF0YSkKLQkJZ290byBlcnJfZnJlZV9wYWRhdGE7Ci0KLQlwYWRhdGFfc3RhcnQocGNyeXB0X2VuY19wYWRhdGEpOwotCXBhZGF0YV9zdGFydChwY3J5cHRfZGVjX3BhZGF0YSk7CisJcGFkYXRhX3N0YXJ0KHBlbmNyeXB0LnBpbnN0KTsKKwlwYWRhdGFfc3RhcnQocGRlY3J5cHQucGluc3QpOwogCiAJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl90ZW1wbGF0ZSgmcGNyeXB0X3RtcGwpOwogCi1lcnJfZnJlZV9wYWRhdGE6Ci0JcGFkYXRhX2ZyZWUocGNyeXB0X2VuY19wYWRhdGEpOwotCi1lcnJfZGVzdHJveV9kZWN3cToKLQlkZXN0cm95X3dvcmtxdWV1ZShkZWN3cSk7Ci0KLWVycl9kZXN0cm95X2VuY3dxOgotCWRlc3Ryb3lfd29ya3F1ZXVlKGVuY3dxKTsKLQorZXJyX2RlaW5pdF9wZW5jcnlwdDoKKwlwY3J5cHRfZmluaV9wYWRhdGEoJnBlbmNyeXB0KTsKK2Vycl91bnJlZ19rc2V0OgorCWtzZXRfdW5yZWdpc3RlcihwY3J5cHRfa3NldCk7CiBlcnI6Ci0JcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHBjcnlwdF9leGl0KHZvaWQpCiB7Ci0JcGFkYXRhX3N0b3AocGNyeXB0X2VuY19wYWRhdGEpOwotCXBhZGF0YV9zdG9wKHBjcnlwdF9kZWNfcGFkYXRhKTsKKwlwY3J5cHRfZmluaV9wYWRhdGEoJnBlbmNyeXB0KTsKKwlwY3J5cHRfZmluaV9wYWRhdGEoJnBkZWNyeXB0KTsKIAotCWRlc3Ryb3lfd29ya3F1ZXVlKGVuY3dxKTsKLQlkZXN0cm95X3dvcmtxdWV1ZShkZWN3cSk7Ci0KLQlwYWRhdGFfZnJlZShwY3J5cHRfZW5jX3BhZGF0YSk7Ci0JcGFkYXRhX2ZyZWUocGNyeXB0X2RlY19wYWRhdGEpOwotCisJa3NldF91bnJlZ2lzdGVyKHBjcnlwdF9rc2V0KTsKIAljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmcGNyeXB0X3RtcGwpOwogfQogCmRpZmYgLS1naXQgYS9jcnlwdG8vdGVzdG1nci5jIGIvY3J5cHRvL3Rlc3RtZ3IuYwppbmRleCA1YzhhYWEwLi5hYmQ5ODBjNyAxMDA2NDQKLS0tIGEvY3J5cHRvL3Rlc3RtZ3IuYworKysgYi9jcnlwdG8vdGVzdG1nci5jCkBAIC0yMiw2ICsyMiwxNyBAQAogI2luY2x1ZGUgPGNyeXB0by9ybmcuaD4KIAogI2luY2x1ZGUgImludGVybmFsLmgiCisKKyNpZm5kZWYgQ09ORklHX0NSWVBUT19NQU5BR0VSX1RFU1RTCisKKy8qIGEgcGVyZmVjdCBub3AgKi8KK2ludCBhbGdfdGVzdChjb25zdCBjaGFyICpkcml2ZXIsIGNvbnN0IGNoYXIgKmFsZywgdTMyIHR5cGUsIHUzMiBtYXNrKQoreworCXJldHVybiAwOworfQorCisjZWxzZQorCiAjaW5jbHVkZSAidGVzdG1nci5oIgogCiAvKgpAQCAtMjUzMCw0ICsyNTQxLDcgQEAKIG5vbl9maXBzX2FsZzoKIAlyZXR1cm4gLUVJTlZBTDsKIH0KKworI2VuZGlmIC8qIENPTkZJR19DUllQVE9fTUFOQUdFUl9URVNUUyAqLworCiBFWFBPUlRfU1lNQk9MX0dQTChhbGdfdGVzdCk7CmRpZmYgLS1naXQgYS9jcnlwdG8vdHdvZmlzaC5jIGIvY3J5cHRvL3R3b2Zpc2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZjZGEyMy4uMDAwMDAwMAotLS0gYS9jcnlwdG8vdHdvZmlzaC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjE0ICswLDAgQEAKLS8qCi0gKiBUd29maXNoIGZvciBDcnlwdG9BUEkKLSAqCi0gKiBPcmlnaW5hbGx5IFR3b2Zpc2ggZm9yIEdQRwotICogQnkgTWF0dGhldyBTa2FsYSA8bXNrYWxhQGFuc3V6LnNvb2tlLmJjLmNhPiwgSnVseSAyNiwgMTk5OAotICogMjU2LWJpdCBrZXkgbGVuZ3RoIGFkZGVkIE1hcmNoIDIwLCAxOTk5Ci0gKiBTb21lIG1vZGlmaWNhdGlvbnMgdG8gcmVkdWNlIHRoZSB0ZXh0IHNpemUgYnkgV2VybmVyIEtvY2gsIEFwcmlsLCAxOTk4Ci0gKiBQb3J0ZWQgdG8gdGhlIGtlcm5lbGkgcGF0Y2ggYnkgTWFyYyBNdXR6IDxNYXJjQE11dHouY29tPgotICogUG9ydGVkIHRvIENyeXB0b0FQSSBieSBDb2xpbiBTbGF0ZXIgPGhvaG9AdGFjb21lYXQubmV0PgotICoKLSAqIFRoZSBvcmlnaW5hbCBhdXRob3IgaGFzIGRpc2NsYWltZWQgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGlzCi0gKiBjb2RlIGFuZCB0aHVzIHB1dCBpdCBpbiB0aGUgcHVibGljIGRvbWFpbi4gVGhlIHN1YnNlcXVlbnQgYXV0aG9ycyAKLSAqIGhhdmUgcHV0IHRoaXMgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNwotICogVVNBCi0gKgotICogVGhpcyBjb2RlIGlzIGEgImNsZWFuIHJvb20iIGltcGxlbWVudGF0aW9uLCB3cml0dGVuIGZyb20gdGhlIHBhcGVyCi0gKiBfVHdvZmlzaDogQSAxMjgtQml0IEJsb2NrIENpcGhlcl8gYnkgQnJ1Y2UgU2NobmVpZXIsIEpvaG4gS2Vsc2V5LAotICogRG91ZyBXaGl0aW5nLCBEYXZpZCBXYWduZXIsIENocmlzIEhhbGwsIGFuZCBOaWVscyBGZXJndXNvbiwgYXZhaWxhYmxlCi0gKiB0aHJvdWdoIGh0dHA6Ly93d3cuY291bnRlcnBhbmUuY29tL3R3b2Zpc2guaHRtbAotICoKLSAqIEZvciBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIG9uIG11bHRpcGxpY2F0aW9uIGluIGZpbml0ZSBmaWVsZHMsIHVzZWQgZm9yCi0gKiB0aGUgbWF0cml4IG9wZXJhdGlvbnMgaW4gdGhlIGtleSBzY2hlZHVsZSwgc2VlIHRoZSBib29rIF9Db250ZW1wb3JhcnkKLSAqIEFic3RyYWN0IEFsZ2VicmFfIGJ5IEpvc2VwaCBBLiBHYWxsaWFuLCBlc3BlY2lhbGx5IGNoYXB0ZXIgMjIgaW4gdGhlCi0gKiBUaGlyZCBFZGl0aW9uLgotICovCi0KLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+Ci0jaW5jbHVkZSA8Y3J5cHRvL3R3b2Zpc2guaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotCi0vKiBNYWNyb3MgdG8gY29tcHV0ZSB0aGUgZygpIGZ1bmN0aW9uIGluIHRoZSBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uCi0gKiByb3VuZHMuICBHMSBpcyB0aGUgc3RyYWlnaHQgZygpIGZ1bmN0aW9uOyBHMiBpbmNsdWRlcyB0aGUgOC1iaXQKLSAqIHJvdGF0aW9uIGZvciB0aGUgaGlnaCAzMi1iaXQgd29yZC4gKi8KLQotI2RlZmluZSBHMShhKSBcCi0gICAgIChjdHgtPnNbMF1bKGEpICYgMHhGRl0pIF4gKGN0eC0+c1sxXVsoKGEpID4+IDgpICYgMHhGRl0pIFwKLSAgIF4gKGN0eC0+c1syXVsoKGEpID4+IDE2KSAmIDB4RkZdKSBeIChjdHgtPnNbM11bKGEpID4+IDI0XSkKLQotI2RlZmluZSBHMihiKSBcCi0gICAgIChjdHgtPnNbMV1bKGIpICYgMHhGRl0pIF4gKGN0eC0+c1syXVsoKGIpID4+IDgpICYgMHhGRl0pIFwKLSAgIF4gKGN0eC0+c1szXVsoKGIpID4+IDE2KSAmIDB4RkZdKSBeIChjdHgtPnNbMF1bKGIpID4+IDI0XSkKLQotLyogRW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbiBGZWlzdGVsIHJvdW5kcy4gIEVhY2ggb25lIGNhbGxzIHRoZSB0d28gZygpCi0gKiBtYWNyb3MsIGRvZXMgdGhlIFBIVCwgYW5kIHBlcmZvcm1zIHRoZSBYT1IgYW5kIHRoZSBhcHByb3ByaWF0ZSBiaXQKLSAqIHJvdGF0aW9ucy4gIFRoZSBwYXJhbWV0ZXJzIGFyZSB0aGUgcm91bmQgbnVtYmVyICh1c2VkIHRvIHNlbGVjdCBzdWJrZXlzKSwKLSAqIGFuZCB0aGUgZm91ciAzMi1iaXQgY2h1bmtzIG9mIHRoZSB0ZXh0LiAqLwotCi0jZGVmaW5lIEVOQ1JPVU5EKG4sIGEsIGIsIGMsIGQpIFwKLSAgIHggPSBHMSAoYSk7IHkgPSBHMiAoYik7IFwKLSAgIHggKz0geTsgeSArPSB4ICsgY3R4LT5rWzIgKiAobikgKyAxXTsgXAotICAgKGMpIF49IHggKyBjdHgtPmtbMiAqIChuKV07IFwKLSAgIChjKSA9IHJvcjMyKChjKSwgMSk7IFwKLSAgIChkKSA9IHJvbDMyKChkKSwgMSkgXiB5Ci0KLSNkZWZpbmUgREVDUk9VTkQobiwgYSwgYiwgYywgZCkgXAotICAgeCA9IEcxIChhKTsgeSA9IEcyIChiKTsgXAotICAgeCArPSB5OyB5ICs9IHg7IFwKLSAgIChkKSBePSB5ICsgY3R4LT5rWzIgKiAobikgKyAxXTsgXAotICAgKGQpID0gcm9yMzIoKGQpLCAxKTsgXAotICAgKGMpID0gcm9sMzIoKGMpLCAxKTsgXAotICAgKGMpIF49ICh4ICsgY3R4LT5rWzIgKiAobildKQotCi0vKiBFbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uIGN5Y2xlczsgZWFjaCBvbmUgaXMgc2ltcGx5IHR3byBGZWlzdGVsIHJvdW5kcwotICogd2l0aCB0aGUgMzItYml0IGNodW5rcyByZS1vcmRlcmVkIHRvIHNpbXVsYXRlIHRoZSAic3dhcCIgKi8KLQotI2RlZmluZSBFTkNDWUNMRShuKSBcCi0gICBFTkNST1VORCAoMiAqIChuKSwgYSwgYiwgYywgZCk7IFwKLSAgIEVOQ1JPVU5EICgyICogKG4pICsgMSwgYywgZCwgYSwgYikKLQotI2RlZmluZSBERUNDWUNMRShuKSBcCi0gICBERUNST1VORCAoMiAqIChuKSArIDEsIGMsIGQsIGEsIGIpOyBcCi0gICBERUNST1VORCAoMiAqIChuKSwgYSwgYiwgYywgZCkKLQotLyogTWFjcm9zIHRvIGNvbnZlcnQgdGhlIGlucHV0IGFuZCBvdXRwdXQgYnl0ZXMgaW50byAzMi1iaXQgd29yZHMsCi0gKiBhbmQgc2ltdWx0YW5lb3VzbHkgcGVyZm9ybSB0aGUgd2hpdGVuaW5nIHN0ZXAuICBJTlBBQ0sgcGFja3Mgd29yZAotICogbnVtYmVyIG4gaW50byB0aGUgdmFyaWFibGUgbmFtZWQgYnkgeCwgdXNpbmcgd2hpdGVuaW5nIHN1YmtleSBudW1iZXIgbS4KLSAqIE9VVFVOUEFDSyB1bnBhY2tzIHdvcmQgbnVtYmVyIG4gZnJvbSB0aGUgdmFyaWFibGUgbmFtZWQgYnkgeCwgdXNpbmcKLSAqIHdoaXRlbmluZyBzdWJrZXkgbnVtYmVyIG0uICovCi0KLSNkZWZpbmUgSU5QQUNLKG4sIHgsIG0pIFwKLSAgIHggPSBsZTMyX3RvX2NwdShzcmNbbl0pIF4gY3R4LT53W21dCi0KLSNkZWZpbmUgT1VUVU5QQUNLKG4sIHgsIG0pIFwKLSAgIHggXj0gY3R4LT53W21dOyBcCi0gICBkc3Rbbl0gPSBjcHVfdG9fbGUzMih4KQotCi0KLQotLyogRW5jcnlwdCBvbmUgYmxvY2suICBpbiBhbmQgb3V0IG1heSBiZSB0aGUgc2FtZS4gKi8KLXN0YXRpYyB2b2lkIHR3b2Zpc2hfZW5jcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0LCBjb25zdCB1OCAqaW4pCi17Ci0Jc3RydWN0IHR3b2Zpc2hfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwotCWNvbnN0IF9fbGUzMiAqc3JjID0gKGNvbnN0IF9fbGUzMiAqKWluOwotCV9fbGUzMiAqZHN0ID0gKF9fbGUzMiAqKW91dDsKLQotCS8qIFRoZSBmb3VyIDMyLWJpdCBjaHVua3Mgb2YgdGhlIHRleHQuICovCi0JdTMyIGEsIGIsIGMsIGQ7Ci0JCi0JLyogVGVtcG9yYXJpZXMgdXNlZCBieSB0aGUgcm91bmQgZnVuY3Rpb24uICovCi0JdTMyIHgsIHk7Ci0KLQkvKiBJbnB1dCB3aGl0ZW5pbmcgYW5kIHBhY2tpbmcuICovCi0JSU5QQUNLICgwLCBhLCAwKTsKLQlJTlBBQ0sgKDEsIGIsIDEpOwotCUlOUEFDSyAoMiwgYywgMik7Ci0JSU5QQUNLICgzLCBkLCAzKTsKLQkKLQkvKiBFbmNyeXB0aW9uIEZlaXN0ZWwgY3ljbGVzLiAqLwotCUVOQ0NZQ0xFICgwKTsKLQlFTkNDWUNMRSAoMSk7Ci0JRU5DQ1lDTEUgKDIpOwotCUVOQ0NZQ0xFICgzKTsKLQlFTkNDWUNMRSAoNCk7Ci0JRU5DQ1lDTEUgKDUpOwotCUVOQ0NZQ0xFICg2KTsKLQlFTkNDWUNMRSAoNyk7Ci0JCi0JLyogT3V0cHV0IHdoaXRlbmluZyBhbmQgdW5wYWNraW5nLiAqLwotCU9VVFVOUEFDSyAoMCwgYywgNCk7Ci0JT1VUVU5QQUNLICgxLCBkLCA1KTsKLQlPVVRVTlBBQ0sgKDIsIGEsIDYpOwotCU9VVFVOUEFDSyAoMywgYiwgNyk7Ci0JCi19Ci0KLS8qIERlY3J5cHQgb25lIGJsb2NrLiAgaW4gYW5kIG91dCBtYXkgYmUgdGhlIHNhbWUuICovCi1zdGF0aWMgdm9pZCB0d29maXNoX2RlY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dCwgY29uc3QgdTggKmluKQotewotCXN0cnVjdCB0d29maXNoX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKLQljb25zdCBfX2xlMzIgKnNyYyA9IChjb25zdCBfX2xlMzIgKilpbjsKLQlfX2xlMzIgKmRzdCA9IChfX2xlMzIgKilvdXQ7Ci0gIAotCS8qIFRoZSBmb3VyIDMyLWJpdCBjaHVua3Mgb2YgdGhlIHRleHQuICovCi0JdTMyIGEsIGIsIGMsIGQ7Ci0JCi0JLyogVGVtcG9yYXJpZXMgdXNlZCBieSB0aGUgcm91bmQgZnVuY3Rpb24uICovCi0JdTMyIHgsIHk7Ci0JCi0JLyogSW5wdXQgd2hpdGVuaW5nIGFuZCBwYWNraW5nLiAqLwotCUlOUEFDSyAoMCwgYywgNCk7Ci0JSU5QQUNLICgxLCBkLCA1KTsKLQlJTlBBQ0sgKDIsIGEsIDYpOwotCUlOUEFDSyAoMywgYiwgNyk7Ci0JCi0JLyogRW5jcnlwdGlvbiBGZWlzdGVsIGN5Y2xlcy4gKi8KLQlERUNDWUNMRSAoNyk7Ci0JREVDQ1lDTEUgKDYpOwotCURFQ0NZQ0xFICg1KTsKLQlERUNDWUNMRSAoNCk7Ci0JREVDQ1lDTEUgKDMpOwotCURFQ0NZQ0xFICgyKTsKLQlERUNDWUNMRSAoMSk7Ci0JREVDQ1lDTEUgKDApOwotCi0JLyogT3V0cHV0IHdoaXRlbmluZyBhbmQgdW5wYWNraW5nLiAqLwotCU9VVFVOUEFDSyAoMCwgYSwgMCk7Ci0JT1VUVU5QQUNLICgxLCBiLCAxKTsKLQlPVVRVTlBBQ0sgKDIsIGMsIDIpOwotCU9VVFVOUEFDSyAoMywgZCwgMyk7Ci0KLX0KLQotc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGFsZyA9IHsKLQkuY3JhX25hbWUgICAgICAgICAgID0gICAidHdvZmlzaCIsCi0JLmNyYV9kcml2ZXJfbmFtZSAgICA9ICAgInR3b2Zpc2gtZ2VuZXJpYyIsCi0JLmNyYV9wcmlvcml0eSAgICAgICA9ICAgMTAwLAotCS5jcmFfZmxhZ3MgICAgICAgICAgPSAgIENSWVBUT19BTEdfVFlQRV9DSVBIRVIsCi0JLmNyYV9ibG9ja3NpemUgICAgICA9ICAgVEZfQkxPQ0tfU0laRSwKLQkuY3JhX2N0eHNpemUgICAgICAgID0gICBzaXplb2Yoc3RydWN0IHR3b2Zpc2hfY3R4KSwKLQkuY3JhX2FsaWdubWFzayAgICAgID0JMywKLQkuY3JhX21vZHVsZSAgICAgICAgID0gICBUSElTX01PRFVMRSwKLQkuY3JhX2xpc3QgICAgICAgICAgID0gICBMSVNUX0hFQURfSU5JVChhbGcuY3JhX2xpc3QpLAotCS5jcmFfdSAgICAgICAgICAgICAgPSAgIHsgLmNpcGhlciA9IHsKLQkuY2lhX21pbl9rZXlzaXplICAgID0gICBURl9NSU5fS0VZX1NJWkUsCi0JLmNpYV9tYXhfa2V5c2l6ZSAgICA9ICAgVEZfTUFYX0tFWV9TSVpFLAotCS5jaWFfc2V0a2V5ICAgICAgICAgPSAgIHR3b2Zpc2hfc2V0a2V5LAotCS5jaWFfZW5jcnlwdCAgICAgICAgPSAgIHR3b2Zpc2hfZW5jcnlwdCwKLQkuY2lhX2RlY3J5cHQgICAgICAgID0gICB0d29maXNoX2RlY3J5cHQgfSB9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCB0d29maXNoX21vZF9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFsZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB0d29maXNoX21vZF9maW5pKHZvaWQpCi17Ci0JY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhbGcpOwotfQotCi1tb2R1bGVfaW5pdCh0d29maXNoX21vZF9pbml0KTsKLW1vZHVsZV9leGl0KHR3b2Zpc2hfbW9kX2ZpbmkpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCJUd29maXNoIENpcGhlciBBbGdvcml0aG0iKTsKZGlmZiAtLWdpdCBhL2NyeXB0by90d29maXNoX2dlbmVyaWMuYyBiL2NyeXB0by90d29maXNoX2dlbmVyaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjA3Yjg0Ci0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL3R3b2Zpc2hfZ2VuZXJpYy5jCkBAIC0wLDAgKzEsMjE1IEBACisvKgorICogVHdvZmlzaCBmb3IgQ3J5cHRvQVBJCisgKgorICogT3JpZ2luYWxseSBUd29maXNoIGZvciBHUEcKKyAqIEJ5IE1hdHRoZXcgU2thbGEgPG1za2FsYUBhbnN1ei5zb29rZS5iYy5jYT4sIEp1bHkgMjYsIDE5OTgKKyAqIDI1Ni1iaXQga2V5IGxlbmd0aCBhZGRlZCBNYXJjaCAyMCwgMTk5OQorICogU29tZSBtb2RpZmljYXRpb25zIHRvIHJlZHVjZSB0aGUgdGV4dCBzaXplIGJ5IFdlcm5lciBLb2NoLCBBcHJpbCwgMTk5OAorICogUG9ydGVkIHRvIHRoZSBrZXJuZWxpIHBhdGNoIGJ5IE1hcmMgTXV0eiA8TWFyY0BNdXR6LmNvbT4KKyAqIFBvcnRlZCB0byBDcnlwdG9BUEkgYnkgQ29saW4gU2xhdGVyIDxob2hvQHRhY29tZWF0Lm5ldD4KKyAqCisgKiBUaGUgb3JpZ2luYWwgYXV0aG9yIGhhcyBkaXNjbGFpbWVkIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhpcworICogY29kZSBhbmQgdGh1cyBwdXQgaXQgaW4gdGhlIHB1YmxpYyBkb21haW4uIFRoZSBzdWJzZXF1ZW50IGF1dGhvcnMgCisgKiBoYXZlIHB1dCB0aGlzIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcKKyAqIFVTQQorICoKKyAqIFRoaXMgY29kZSBpcyBhICJjbGVhbiByb29tIiBpbXBsZW1lbnRhdGlvbiwgd3JpdHRlbiBmcm9tIHRoZSBwYXBlcgorICogX1R3b2Zpc2g6IEEgMTI4LUJpdCBCbG9jayBDaXBoZXJfIGJ5IEJydWNlIFNjaG5laWVyLCBKb2huIEtlbHNleSwKKyAqIERvdWcgV2hpdGluZywgRGF2aWQgV2FnbmVyLCBDaHJpcyBIYWxsLCBhbmQgTmllbHMgRmVyZ3Vzb24sIGF2YWlsYWJsZQorICogdGhyb3VnaCBodHRwOi8vd3d3LmNvdW50ZXJwYW5lLmNvbS90d29maXNoLmh0bWwKKyAqCisgKiBGb3IgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBvbiBtdWx0aXBsaWNhdGlvbiBpbiBmaW5pdGUgZmllbGRzLCB1c2VkIGZvcgorICogdGhlIG1hdHJpeCBvcGVyYXRpb25zIGluIHRoZSBrZXkgc2NoZWR1bGUsIHNlZSB0aGUgYm9vayBfQ29udGVtcG9yYXJ5CisgKiBBYnN0cmFjdCBBbGdlYnJhXyBieSBKb3NlcGggQS4gR2FsbGlhbiwgZXNwZWNpYWxseSBjaGFwdGVyIDIyIGluIHRoZQorICogVGhpcmQgRWRpdGlvbi4KKyAqLworCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGNyeXB0by90d29maXNoLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworLyogTWFjcm9zIHRvIGNvbXB1dGUgdGhlIGcoKSBmdW5jdGlvbiBpbiB0aGUgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbgorICogcm91bmRzLiAgRzEgaXMgdGhlIHN0cmFpZ2h0IGcoKSBmdW5jdGlvbjsgRzIgaW5jbHVkZXMgdGhlIDgtYml0CisgKiByb3RhdGlvbiBmb3IgdGhlIGhpZ2ggMzItYml0IHdvcmQuICovCisKKyNkZWZpbmUgRzEoYSkgXAorICAgICAoY3R4LT5zWzBdWyhhKSAmIDB4RkZdKSBeIChjdHgtPnNbMV1bKChhKSA+PiA4KSAmIDB4RkZdKSBcCisgICBeIChjdHgtPnNbMl1bKChhKSA+PiAxNikgJiAweEZGXSkgXiAoY3R4LT5zWzNdWyhhKSA+PiAyNF0pCisKKyNkZWZpbmUgRzIoYikgXAorICAgICAoY3R4LT5zWzFdWyhiKSAmIDB4RkZdKSBeIChjdHgtPnNbMl1bKChiKSA+PiA4KSAmIDB4RkZdKSBcCisgICBeIChjdHgtPnNbM11bKChiKSA+PiAxNikgJiAweEZGXSkgXiAoY3R4LT5zWzBdWyhiKSA+PiAyNF0pCisKKy8qIEVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gRmVpc3RlbCByb3VuZHMuICBFYWNoIG9uZSBjYWxscyB0aGUgdHdvIGcoKQorICogbWFjcm9zLCBkb2VzIHRoZSBQSFQsIGFuZCBwZXJmb3JtcyB0aGUgWE9SIGFuZCB0aGUgYXBwcm9wcmlhdGUgYml0CisgKiByb3RhdGlvbnMuICBUaGUgcGFyYW1ldGVycyBhcmUgdGhlIHJvdW5kIG51bWJlciAodXNlZCB0byBzZWxlY3Qgc3Via2V5cyksCisgKiBhbmQgdGhlIGZvdXIgMzItYml0IGNodW5rcyBvZiB0aGUgdGV4dC4gKi8KKworI2RlZmluZSBFTkNST1VORChuLCBhLCBiLCBjLCBkKSBcCisgICB4ID0gRzEgKGEpOyB5ID0gRzIgKGIpOyBcCisgICB4ICs9IHk7IHkgKz0geCArIGN0eC0+a1syICogKG4pICsgMV07IFwKKyAgIChjKSBePSB4ICsgY3R4LT5rWzIgKiAobildOyBcCisgICAoYykgPSByb3IzMigoYyksIDEpOyBcCisgICAoZCkgPSByb2wzMigoZCksIDEpIF4geQorCisjZGVmaW5lIERFQ1JPVU5EKG4sIGEsIGIsIGMsIGQpIFwKKyAgIHggPSBHMSAoYSk7IHkgPSBHMiAoYik7IFwKKyAgIHggKz0geTsgeSArPSB4OyBcCisgICAoZCkgXj0geSArIGN0eC0+a1syICogKG4pICsgMV07IFwKKyAgIChkKSA9IHJvcjMyKChkKSwgMSk7IFwKKyAgIChjKSA9IHJvbDMyKChjKSwgMSk7IFwKKyAgIChjKSBePSAoeCArIGN0eC0+a1syICogKG4pXSkKKworLyogRW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbiBjeWNsZXM7IGVhY2ggb25lIGlzIHNpbXBseSB0d28gRmVpc3RlbCByb3VuZHMKKyAqIHdpdGggdGhlIDMyLWJpdCBjaHVua3MgcmUtb3JkZXJlZCB0byBzaW11bGF0ZSB0aGUgInN3YXAiICovCisKKyNkZWZpbmUgRU5DQ1lDTEUobikgXAorICAgRU5DUk9VTkQgKDIgKiAobiksIGEsIGIsIGMsIGQpOyBcCisgICBFTkNST1VORCAoMiAqIChuKSArIDEsIGMsIGQsIGEsIGIpCisKKyNkZWZpbmUgREVDQ1lDTEUobikgXAorICAgREVDUk9VTkQgKDIgKiAobikgKyAxLCBjLCBkLCBhLCBiKTsgXAorICAgREVDUk9VTkQgKDIgKiAobiksIGEsIGIsIGMsIGQpCisKKy8qIE1hY3JvcyB0byBjb252ZXJ0IHRoZSBpbnB1dCBhbmQgb3V0cHV0IGJ5dGVzIGludG8gMzItYml0IHdvcmRzLAorICogYW5kIHNpbXVsdGFuZW91c2x5IHBlcmZvcm0gdGhlIHdoaXRlbmluZyBzdGVwLiAgSU5QQUNLIHBhY2tzIHdvcmQKKyAqIG51bWJlciBuIGludG8gdGhlIHZhcmlhYmxlIG5hbWVkIGJ5IHgsIHVzaW5nIHdoaXRlbmluZyBzdWJrZXkgbnVtYmVyIG0uCisgKiBPVVRVTlBBQ0sgdW5wYWNrcyB3b3JkIG51bWJlciBuIGZyb20gdGhlIHZhcmlhYmxlIG5hbWVkIGJ5IHgsIHVzaW5nCisgKiB3aGl0ZW5pbmcgc3Via2V5IG51bWJlciBtLiAqLworCisjZGVmaW5lIElOUEFDSyhuLCB4LCBtKSBcCisgICB4ID0gbGUzMl90b19jcHUoc3JjW25dKSBeIGN0eC0+d1ttXQorCisjZGVmaW5lIE9VVFVOUEFDSyhuLCB4LCBtKSBcCisgICB4IF49IGN0eC0+d1ttXTsgXAorICAgZHN0W25dID0gY3B1X3RvX2xlMzIoeCkKKworCisKKy8qIEVuY3J5cHQgb25lIGJsb2NrLiAgaW4gYW5kIG91dCBtYXkgYmUgdGhlIHNhbWUuICovCitzdGF0aWMgdm9pZCB0d29maXNoX2VuY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dCwgY29uc3QgdTggKmluKQoreworCXN0cnVjdCB0d29maXNoX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwljb25zdCBfX2xlMzIgKnNyYyA9IChjb25zdCBfX2xlMzIgKilpbjsKKwlfX2xlMzIgKmRzdCA9IChfX2xlMzIgKilvdXQ7CisKKwkvKiBUaGUgZm91ciAzMi1iaXQgY2h1bmtzIG9mIHRoZSB0ZXh0LiAqLworCXUzMiBhLCBiLCBjLCBkOworCQorCS8qIFRlbXBvcmFyaWVzIHVzZWQgYnkgdGhlIHJvdW5kIGZ1bmN0aW9uLiAqLworCXUzMiB4LCB5OworCisJLyogSW5wdXQgd2hpdGVuaW5nIGFuZCBwYWNraW5nLiAqLworCUlOUEFDSyAoMCwgYSwgMCk7CisJSU5QQUNLICgxLCBiLCAxKTsKKwlJTlBBQ0sgKDIsIGMsIDIpOworCUlOUEFDSyAoMywgZCwgMyk7CisJCisJLyogRW5jcnlwdGlvbiBGZWlzdGVsIGN5Y2xlcy4gKi8KKwlFTkNDWUNMRSAoMCk7CisJRU5DQ1lDTEUgKDEpOworCUVOQ0NZQ0xFICgyKTsKKwlFTkNDWUNMRSAoMyk7CisJRU5DQ1lDTEUgKDQpOworCUVOQ0NZQ0xFICg1KTsKKwlFTkNDWUNMRSAoNik7CisJRU5DQ1lDTEUgKDcpOworCQorCS8qIE91dHB1dCB3aGl0ZW5pbmcgYW5kIHVucGFja2luZy4gKi8KKwlPVVRVTlBBQ0sgKDAsIGMsIDQpOworCU9VVFVOUEFDSyAoMSwgZCwgNSk7CisJT1VUVU5QQUNLICgyLCBhLCA2KTsKKwlPVVRVTlBBQ0sgKDMsIGIsIDcpOworCQorfQorCisvKiBEZWNyeXB0IG9uZSBibG9jay4gIGluIGFuZCBvdXQgbWF5IGJlIHRoZSBzYW1lLiAqLworc3RhdGljIHZvaWQgdHdvZmlzaF9kZWNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXQsIGNvbnN0IHU4ICppbikKK3sKKwlzdHJ1Y3QgdHdvZmlzaF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisJY29uc3QgX19sZTMyICpzcmMgPSAoY29uc3QgX19sZTMyICopaW47CisJX19sZTMyICpkc3QgPSAoX19sZTMyICopb3V0OworICAKKwkvKiBUaGUgZm91ciAzMi1iaXQgY2h1bmtzIG9mIHRoZSB0ZXh0LiAqLworCXUzMiBhLCBiLCBjLCBkOworCQorCS8qIFRlbXBvcmFyaWVzIHVzZWQgYnkgdGhlIHJvdW5kIGZ1bmN0aW9uLiAqLworCXUzMiB4LCB5OworCQorCS8qIElucHV0IHdoaXRlbmluZyBhbmQgcGFja2luZy4gKi8KKwlJTlBBQ0sgKDAsIGMsIDQpOworCUlOUEFDSyAoMSwgZCwgNSk7CisJSU5QQUNLICgyLCBhLCA2KTsKKwlJTlBBQ0sgKDMsIGIsIDcpOworCQorCS8qIEVuY3J5cHRpb24gRmVpc3RlbCBjeWNsZXMuICovCisJREVDQ1lDTEUgKDcpOworCURFQ0NZQ0xFICg2KTsKKwlERUNDWUNMRSAoNSk7CisJREVDQ1lDTEUgKDQpOworCURFQ0NZQ0xFICgzKTsKKwlERUNDWUNMRSAoMik7CisJREVDQ1lDTEUgKDEpOworCURFQ0NZQ0xFICgwKTsKKworCS8qIE91dHB1dCB3aGl0ZW5pbmcgYW5kIHVucGFja2luZy4gKi8KKwlPVVRVTlBBQ0sgKDAsIGEsIDApOworCU9VVFVOUEFDSyAoMSwgYiwgMSk7CisJT1VUVU5QQUNLICgyLCBjLCAyKTsKKwlPVVRVTlBBQ0sgKDMsIGQsIDMpOworCit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhbGcgPSB7CisJLmNyYV9uYW1lICAgICAgICAgICA9ICAgInR3b2Zpc2giLAorCS5jcmFfZHJpdmVyX25hbWUgICAgPSAgICJ0d29maXNoLWdlbmVyaWMiLAorCS5jcmFfcHJpb3JpdHkgICAgICAgPSAgIDEwMCwKKwkuY3JhX2ZsYWdzICAgICAgICAgID0gICBDUllQVE9fQUxHX1RZUEVfQ0lQSEVSLAorCS5jcmFfYmxvY2tzaXplICAgICAgPSAgIFRGX0JMT0NLX1NJWkUsCisJLmNyYV9jdHhzaXplICAgICAgICA9ICAgc2l6ZW9mKHN0cnVjdCB0d29maXNoX2N0eCksCisJLmNyYV9hbGlnbm1hc2sgICAgICA9CTMsCisJLmNyYV9tb2R1bGUgICAgICAgICA9ICAgVEhJU19NT0RVTEUsCisJLmNyYV9saXN0ICAgICAgICAgICA9ICAgTElTVF9IRUFEX0lOSVQoYWxnLmNyYV9saXN0KSwKKwkuY3JhX3UgICAgICAgICAgICAgID0gICB7IC5jaXBoZXIgPSB7CisJLmNpYV9taW5fa2V5c2l6ZSAgICA9ICAgVEZfTUlOX0tFWV9TSVpFLAorCS5jaWFfbWF4X2tleXNpemUgICAgPSAgIFRGX01BWF9LRVlfU0laRSwKKwkuY2lhX3NldGtleSAgICAgICAgID0gICB0d29maXNoX3NldGtleSwKKwkuY2lhX2VuY3J5cHQgICAgICAgID0gICB0d29maXNoX2VuY3J5cHQsCisJLmNpYV9kZWNyeXB0ICAgICAgICA9ICAgdHdvZmlzaF9kZWNyeXB0IH0gfQorfTsKKworc3RhdGljIGludCBfX2luaXQgdHdvZmlzaF9tb2RfaW5pdCh2b2lkKQoreworCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhbGcpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdHdvZmlzaF9tb2RfZmluaSh2b2lkKQoreworCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWxnKTsKK30KKworbW9kdWxlX2luaXQodHdvZmlzaF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdCh0d29maXNoX21vZF9maW5pKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OICgiVHdvZmlzaCBDaXBoZXIgQWxnb3JpdGhtIik7CitNT0RVTEVfQUxJQVMoInR3b2Zpc2giKTsKZGlmZiAtLWdpdCBhL2NyeXB0by94dHMuYyBiL2NyeXB0by94dHMuYwppbmRleCBkODdiMGYzLi41NTVlY2FhIDEwMDY0NAotLS0gYS9jcnlwdG8veHRzLmMKKysrIGIvY3J5cHRvL3h0cy5jCkBAIC0yMjQsNyArMjI0LDcgQEAKIAlhbGcgPSBjcnlwdG9fZ2V0X2F0dHJfYWxnKHRiLCBDUllQVE9fQUxHX1RZUEVfQ0lQSEVSLAogCQkJCSAgQ1JZUFRPX0FMR19UWVBFX01BU0spOwogCWlmIChJU19FUlIoYWxnKSkKLQkJcmV0dXJuIEVSUl9QVFIoUFRSX0VSUihhbGcpKTsKKwkJcmV0dXJuIEVSUl9DQVNUKGFsZyk7CiAKIAlpbnN0ID0gY3J5cHRvX2FsbG9jX2luc3RhbmNlKCJ4dHMiLCBhbGcpOwogCWlmIChJU19FUlIoaW5zdCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9NYWtlZmlsZQppbmRleCA5MTg3NGUwLi5hZTQ3MzQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvTWFrZWZpbGUKQEAgLTEwMSw3ICsxMDEsOSBAQAogb2JqLSQoQ09ORklHX0NSWVBUTykJCSs9IGNyeXB0by8KIG9iai0kKENPTkZJR19TVVBFUkgpCQkrPSBzaC8KIG9iai0kKENPTkZJR19BUkNIX1NITU9CSUxFKQkrPSBzaC8KLW9iai0kKENPTkZJR19HRU5FUklDX1RJTUUpCSs9IGNsb2Nrc291cmNlLworaWZuZGVmIENPTkZJR19BUkNIX1VTRVNfR0VUVElNRU9GRlNFVAorb2JqLXkJCQkJKz0gY2xvY2tzb3VyY2UvCitlbmRpZgogb2JqLSQoQ09ORklHX0RNQV9FTkdJTkUpCSs9IGRtYS8KIG9iai0kKENPTkZJR19EQ0EpCQkrPSBkY2EvCiBvYmotJChDT05GSUdfSElEKQkJKz0gaGlkLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL0tjb25maWcgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZwppbmRleCA3NDY0MTE1Li4wOGUwMTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvS2NvbmZpZworKysgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZwpAQCAtMTA0LDYgKzEwNCwyNCBAQAogCWhlbHAKIAkgIFNheSBOIHRvIGRpc2FibGUgcG93ZXIgL3N5cyBpbnRlcmZhY2UKIAorY29uZmlnIEFDUElfRUNfREVCVUdGUworCXRyaXN0YXRlICJFQyByZWFkL3dyaXRlIGFjY2VzcyB0aHJvdWdoIC9zeXMva2VybmVsL2RlYnVnL2VjIgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFNheSBOIHRvIGRpc2FibGUgRW1iZWRkZWQgQ29udHJvbGxlciAvc3lzL2tlcm5lbC9kZWJ1ZyBpbnRlcmZhY2UKKworCSAgQmUgYXdhcmUgdGhhdCB1c2luZyB0aGlzIGludGVyZmFjZSBjYW4gY29uZnVzZSB5b3VyIEVtYmVkZGVkCisJICBDb250cm9sbGVyIGluIGEgd2F5IHRoYXQgYSBub3JtYWwgcmVib290IGlzIG5vdCBlbm91Z2guIFlvdSB0aGVuCisJICBoYXZlIHRvIHBvd2VyIG9mIHlvdXIgc3lzdGVtLCBhbmQgcmVtb3ZlIHRoZSBsYXB0b3AgYmF0dGVyeSBmb3IKKwkgIHNvbWUgc2Vjb25kcy4KKwkgIEFuIEVtYmVkZGVkIENvbnRyb2xsZXIgdHlwaWNhbGx5IGlzIGF2YWlsYWJsZSBvbiBsYXB0b3BzIGFuZCByZWFkcworCSAgc2Vuc29yIHZhbHVlcyBsaWtlIGJhdHRlcnkgc3RhdGUgYW5kIHRlbXBlcmF0dXJlLgorCSAgVGhlIGtlcm5lbCBhY2Nlc3NlcyB0aGUgRUMgdGhyb3VnaCBBQ1BJIHBhcnNlZCBjb2RlIHByb3ZpZGVkIGJ5IEJJT1MKKwkgIHRhYmxlcy4gVGhpcyBvcHRpb24gYWxsb3dzIHRvIGFjY2VzcyB0aGUgRUMgZGlyZWN0bHkgd2l0aG91dCBBQ1BJCisJICBjb2RlIGJlaW5nIGludm9sdmVkLgorCSAgVGh1cyB0aGlzIG9wdGlvbiBpcyBhIGRlYnVnIG9wdGlvbiB0aGF0IGhlbHBzIHRvIHdyaXRlIEFDUEkgZHJpdmVycworCSAgYW5kIGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5IEFDUEkgY29kZSBvciBFQyBmaXJtd2FyZSBidWdzLgorCiBjb25maWcgQUNQSV9QUk9DX0VWRU5UCiAJYm9vbCAiRGVwcmVjYXRlZCAvcHJvYy9hY3BpL2V2ZW50IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQUk9DX0ZTCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGUgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKaW5kZXggNmVlMzMxNi4uODMzYjU4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQpAQCAtNjAsNiArNjAsNyBAQAogb2JqLSQoQ09ORklHX0FDUElfU0JTKQkJKz0gc2JzLm8KIG9iai0kKENPTkZJR19BQ1BJX1BPV0VSX01FVEVSKQkrPSBwb3dlcl9tZXRlci5vCiBvYmotJChDT05GSUdfQUNQSV9IRUQpCQkrPSBoZWQubworb2JqLSQoQ09ORklHX0FDUElfRUNfREVCVUdGUykJKz0gZWNfc3lzLm8KIAogIyBwcm9jZXNzb3IgaGFzIGl0cyBvd24gInByb2Nlc3Nvci4iIG1vZHVsZV9wYXJhbSBuYW1lc3BhY2UKIHByb2Nlc3Nvci15CQkJOj0gcHJvY2Vzc29yX2RyaXZlci5vIHByb2Nlc3Nvcl90aHJvdHRsaW5nLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpX3BhZC5jIGIvZHJpdmVycy9hY3BpL2FjcGlfcGFkLmMKaW5kZXggNDQ2YWNlZC4uYjc2ODQ4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGlfcGFkLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGlfcGFkLmMKQEAgLTc3LDcgKzc3LDcgQEAKIAlwb3dlcl9zYXZpbmdfbXdhaXRfZWF4ID0gKGhpZ2hlc3RfY3N0YXRlIDw8IE1XQUlUX1NVQlNUQVRFX1NJWkUpIHwKIAkJKGhpZ2hlc3Rfc3ViY3N0YXRlIC0gMSk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19HRU5FUklDX1RJTUUpICYmIGRlZmluZWQoQ09ORklHX1g4NikKKyNpZiBkZWZpbmVkKENPTkZJR19YODYpCiAJc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IpIHsKIAljYXNlIFg4Nl9WRU5ET1JfQU1EOgogCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmV2bnQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmV2bnQuYwppbmRleCBkOTdiOGRjLi4xOGIzZjE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZldm50LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmZXZudC5jCkBAIC03MCw2ICs3MCw3IEBACiBhY3BpX3N0YXR1cyBhY3BpX2VuYWJsZSh2b2lkKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlpbnQgcmV0cnk7CiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZW5hYmxlKTsKIApAQCAtOTgsMTYgKzk5LDE4IEBACiAKIAkvKiBTYW5pdHkgY2hlY2sgdGhhdCB0cmFuc2l0aW9uIHN1Y2NlZWRlZCAqLwogCi0JaWYgKGFjcGlfaHdfZ2V0X21vZGUoKSAhPSBBQ1BJX1NZU19NT0RFX0FDUEkpIHsKLQkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCSAgICAiSGFyZHdhcmUgZGlkIG5vdCBlbnRlciBBQ1BJIG1vZGUiKSk7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19IQVJEV0FSRV9SRVNQT05TRSk7CisJZm9yIChyZXRyeSA9IDA7IHJldHJ5IDwgMzAwMDA7ICsrcmV0cnkpIHsKKwkJaWYgKGFjcGlfaHdfZ2V0X21vZGUoKSA9PSBBQ1BJX1NZU19NT0RFX0FDUEkpIHsKKwkJCWlmIChyZXRyeSAhPSAwKQorCQkJCUFDUElfV0FSTklORygoQUVfSU5GTywKKwkJCQkiUGxhdGZvcm0gdG9vayA+ICVkMDAgdXNlYyB0byBlbnRlciBBQ1BJIG1vZGUiLCByZXRyeSkpOworCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKKwkJfQorCQlhY3BpX29zX3N0YWxsKDEwMCk7CS8qIDEwMCB1c2VjICovCiAJfQogCi0JQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTklULAotCQkJICAiVHJhbnNpdGlvbiB0byBBQ1BJIG1vZGUgc3VjY2Vzc2Z1bFxuIikpOwotCi0JcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKKwlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiSGFyZHdhcmUgZGlkIG5vdCBlbnRlciBBQ1BJIG1vZGUiKSk7CisJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX0hBUkRXQVJFX1JFU1BPTlNFKTsKIH0KIAogQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZW5hYmxlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYyBiL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKaW5kZXggMzAyNmUzZi4uZGM1ODQwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYworKysgYi9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jCkBAIC04NjgsOSArODY4LDE1IEBACiBzdGF0aWMgdm9pZCBhY3BpX2JhdHRlcnlfbm90aWZ5KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCB1MzIgZXZlbnQpCiB7CiAJc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKKyNpZmRlZiBDT05GSUdfQUNQSV9TWVNGU19QT1dFUgorCXN0cnVjdCBkZXZpY2UgKm9sZDsKKyNlbmRpZgogCiAJaWYgKCFiYXR0ZXJ5KQogCQlyZXR1cm47CisjaWZkZWYgQ09ORklHX0FDUElfU1lTRlNfUE9XRVIKKwlvbGQgPSBiYXR0ZXJ5LT5iYXQuZGV2OworI2VuZGlmCiAJYWNwaV9iYXR0ZXJ5X3VwZGF0ZShiYXR0ZXJ5KTsKIAlhY3BpX2J1c19nZW5lcmF0ZV9wcm9jX2V2ZW50KGRldmljZSwgZXZlbnQsCiAJCQkJICAgICBhY3BpX2JhdHRlcnlfcHJlc2VudChiYXR0ZXJ5KSk7CkBAIC04NzksNyArODg1LDcgQEAKIAkJCQkJYWNwaV9iYXR0ZXJ5X3ByZXNlbnQoYmF0dGVyeSkpOwogI2lmZGVmIENPTkZJR19BQ1BJX1NZU0ZTX1BPV0VSCiAJLyogYWNwaV9iYXR0ZXJ5X3VwZGF0ZSBjb3VsZCByZW1vdmUgcG93ZXJfc3VwcGx5IG9iamVjdCAqLwotCWlmIChiYXR0ZXJ5LT5iYXQuZGV2KQorCWlmIChvbGQgJiYgYmF0dGVyeS0+YmF0LmRldikKIAkJcG93ZXJfc3VwcGx5X2NoYW5nZWQoJmJhdHRlcnktPmJhdCk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9ibGFja2xpc3QuYyBiL2RyaXZlcnMvYWNwaS9ibGFja2xpc3QuYwppbmRleCAwMTM4MWJlLi4yYmIyOGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYmxhY2tsaXN0LmMKKysrIGIvZHJpdmVycy9hY3BpL2JsYWNrbGlzdC5jCkBAIC0yMTQsNyArMjE0LDcgQEAKIAkuaWRlbnQgPSAiU29ueSBWR04tU1IyOTBKIiwKIAkubWF0Y2hlcyA9IHsKIAkJICAgICBETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJTb255IENvcnBvcmF0aW9uIiksCi0JCSAgICAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJTb255IFZHTi1TUjI5MEoiKSwKKwkJICAgICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlZHTi1TUjI5MEoiKSwKIAkJfSwKIAl9LAogCXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9lYy5jIGIvZHJpdmVycy9hY3BpL2VjLmMKaW5kZXggNWYyMDI3ZC4uMWZhMGFhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2VjLmMKKysrIGIvZHJpdmVycy9hY3BpL2VjLmMKQEAgLTM0LDggKzM0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpAQCAtNDUsMTAgKzQzLDEzIEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KIAorI2luY2x1ZGUgImludGVybmFsLmgiCisKICNkZWZpbmUgQUNQSV9FQ19DTEFTUwkJCSJlbWJlZGRlZF9jb250cm9sbGVyIgogI2RlZmluZSBBQ1BJX0VDX0RFVklDRV9OQU1FCQkiRW1iZWRkZWQgQ29udHJvbGxlciIKICNkZWZpbmUgQUNQSV9FQ19GSUxFX0lORk8JCSJpbmZvIgogCisjdW5kZWYgUFJFRklYCiAjZGVmaW5lIFBSRUZJWAkJCQkiQUNQSTogRUM6ICIKIAogLyogRUMgc3RhdHVzIHJlZ2lzdGVyICovCkBAIC0xMDYsMTkgKzEwNyw4IEBACiAJYm9vbCBkb25lOwogfTsKIAotc3RhdGljIHN0cnVjdCBhY3BpX2VjIHsKLQlhY3BpX2hhbmRsZSBoYW5kbGU7Ci0JdW5zaWduZWQgbG9uZyBncGU7Ci0JdW5zaWduZWQgbG9uZyBjb21tYW5kX2FkZHI7Ci0JdW5zaWduZWQgbG9uZyBkYXRhX2FkZHI7Ci0JdW5zaWduZWQgbG9uZyBnbG9iYWxfbG9jazsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBtdXRleCBsb2NrOwotCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCB0cmFuc2FjdGlvbiAqY3VycjsKLQlzcGlubG9ja190IGN1cnJfbG9jazsKLX0gKmJvb3RfZWMsICpmaXJzdF9lYzsKK3N0cnVjdCBhY3BpX2VjICpib290X2VjLCAqZmlyc3RfZWM7CitFWFBPUlRfU1lNQk9MKGZpcnN0X2VjKTsKIAogc3RhdGljIGludCBFQ19GTEFHU19NU0k7IC8qIE91dC1vZi1zcGVjIE1TSSBjb250cm9sbGVyICovCiBzdGF0aWMgaW50IEVDX0ZMQUdTX1ZBTElEQVRFX0VDRFQ7IC8qIEFTVVN0ZWMgRUNEVHMgbmVlZCB0byBiZSB2YWxpZGF0ZWQgKi8KQEAgLTY3OSw3MiArNjY5LDYgQEAKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTIEludGVyZmFjZSAoL3Byb2MpCi0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICphY3BpX2VjX2RpcjsKLQotc3RhdGljIGludCBhY3BpX2VjX3JlYWRfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQotewotCXN0cnVjdCBhY3BpX2VjICplYyA9IHNlcS0+cHJpdmF0ZTsKLQotCWlmICghZWMpCi0JCWdvdG8gZW5kOwotCi0Jc2VxX3ByaW50ZihzZXEsICJncGU6XHRcdFx0MHglMDJ4XG4iLCAodTMyKSBlYy0+Z3BlKTsKLQlzZXFfcHJpbnRmKHNlcSwgInBvcnRzOlx0XHRcdDB4JTAyeCwgMHglMDJ4XG4iLAotCQkgICAodW5zaWduZWQpZWMtPmNvbW1hbmRfYWRkciwgKHVuc2lnbmVkKWVjLT5kYXRhX2FkZHIpOwotCXNlcV9wcmludGYoc2VxLCAidXNlIGdsb2JhbCBsb2NrOlx0JXNcbiIsCi0JCSAgIGVjLT5nbG9iYWxfbG9jayA/ICJ5ZXMiIDogIm5vIik7Ci0gICAgICBlbmQ6Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWNwaV9lY19pbmZvX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGFjcGlfZWNfcmVhZF9pbmZvLCBQREUoaW5vZGUpLT5kYXRhKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV9lY19pbmZvX29wcyA9IHsKLQkub3BlbiA9IGFjcGlfZWNfaW5mb19vcGVuX2ZzLAotCS5yZWFkID0gc2VxX3JlYWQsCi0JLmxsc2VlayA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAotfTsKLQotc3RhdGljIGludCBhY3BpX2VjX2FkZF9mcyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKLXsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5ID0gTlVMTDsKLQotCWlmICghYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpIHsKLQkJYWNwaV9kZXZpY2VfZGlyKGRldmljZSkgPSBwcm9jX21rZGlyKGFjcGlfZGV2aWNlX2JpZChkZXZpY2UpLAotCQkJCQkJICAgICBhY3BpX2VjX2Rpcik7Ci0JCWlmICghYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQllbnRyeSA9IHByb2NfY3JlYXRlX2RhdGEoQUNQSV9FQ19GSUxFX0lORk8sIFNfSVJVR08sCi0JCQkJIGFjcGlfZGV2aWNlX2RpcihkZXZpY2UpLAotCQkJCSAmYWNwaV9lY19pbmZvX29wcywgYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKTsKLQlpZiAoIWVudHJ5KQotCQlyZXR1cm4gLUVOT0RFVjsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhY3BpX2VjX3JlbW92ZV9mcyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKLXsKLQotCWlmIChhY3BpX2RldmljZV9kaXIoZGV2aWNlKSkgewotCQlyZW1vdmVfcHJvY19lbnRyeShBQ1BJX0VDX0ZJTEVfSU5GTywgYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpOwotCQlyZW1vdmVfcHJvY19lbnRyeShhY3BpX2RldmljZV9iaWQoZGV2aWNlKSwgYWNwaV9lY19kaXIpOwotCQlhY3BpX2RldmljZV9kaXIoZGV2aWNlKSA9IE5VTEw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJpdmVyIEludGVyZmFjZQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHN0YXRpYyBhY3BpX3N0YXR1cwpAQCAtODk0LDcgKzgxOCwxMiBAQAogCWlmICghZmlyc3RfZWMpCiAJCWZpcnN0X2VjID0gZWM7CiAJZGV2aWNlLT5kcml2ZXJfZGF0YSA9IGVjOwotCWFjcGlfZWNfYWRkX2ZzKGRldmljZSk7CisKKwlXQVJOKCFyZXF1ZXN0X3JlZ2lvbihlYy0+ZGF0YV9hZGRyLCAxLCAiRUMgZGF0YSIpLAorCSAgICAgIkNvdWxkIG5vdCByZXF1ZXN0IEVDIGRhdGEgaW8gcG9ydCAweCVseCIsIGVjLT5kYXRhX2FkZHIpOworCVdBUk4oIXJlcXVlc3RfcmVnaW9uKGVjLT5jb21tYW5kX2FkZHIsIDEsICJFQyBjbWQiKSwKKwkgICAgICJDb3VsZCBub3QgcmVxdWVzdCBFQyBjbWQgaW8gcG9ydCAweCVseCIsIGVjLT5jb21tYW5kX2FkZHIpOworCiAJcHJfaW5mbyhQUkVGSVggIkdQRSA9IDB4JWx4LCBJL086IGNvbW1hbmQvc3RhdHVzID0gMHglbHgsIGRhdGEgPSAweCVseFxuIiwKIAkJCSAgZWMtPmdwZSwgZWMtPmNvbW1hbmRfYWRkciwgZWMtPmRhdGFfYWRkcik7CiAKQEAgLTkyMSw3ICs4NTAsOCBAQAogCQlrZnJlZShoYW5kbGVyKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZlYy0+bG9jayk7Ci0JYWNwaV9lY19yZW1vdmVfZnMoZGV2aWNlKTsKKwlyZWxlYXNlX3JlZ2lvbihlYy0+ZGF0YV9hZGRyLCAxKTsKKwlyZWxlYXNlX3JlZ2lvbihlYy0+Y29tbWFuZF9hZGRyLCAxKTsKIAlkZXZpY2UtPmRyaXZlcl9kYXRhID0gTlVMTDsKIAlpZiAoZWMgPT0gZmlyc3RfZWMpCiAJCWZpcnN0X2VjID0gTlVMTDsKQEAgLTExMjAsMTYgKzEwNTAsMTAgQEAKIHsKIAlpbnQgcmVzdWx0ID0gMDsKIAotCWFjcGlfZWNfZGlyID0gcHJvY19ta2RpcihBQ1BJX0VDX0NMQVNTLCBhY3BpX3Jvb3RfZGlyKTsKLQlpZiAoIWFjcGlfZWNfZGlyKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCS8qIE5vdyByZWdpc3RlciB0aGUgZHJpdmVyIGZvciB0aGUgRUMgKi8KIAlyZXN1bHQgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfZWNfZHJpdmVyKTsKLQlpZiAocmVzdWx0IDwgMCkgewotCQlyZW1vdmVfcHJvY19lbnRyeShBQ1BJX0VDX0NMQVNTLCBhY3BpX3Jvb3RfZGlyKTsKKwlpZiAocmVzdWx0IDwgMCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JfQogCiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTExNDAsOSArMTA2NCw2IEBACiB7CiAKIAlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmYWNwaV9lY19kcml2ZXIpOwotCi0JcmVtb3ZlX3Byb2NfZW50cnkoQUNQSV9FQ19DTEFTUywgYWNwaV9yb290X2Rpcik7Ci0KIAlyZXR1cm47CiB9CiAjZW5kaWYJLyogMCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2VjX3N5cy5jIGIvZHJpdmVycy9hY3BpL2VjX3N5cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlODY5YjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2FjcGkvZWNfc3lzLmMKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBlY19zeXMuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTVVNFIFByb2R1Y3RzIEdtYkgvTm92ZWxsCisgKiBBdXRob3I6CisgKiAgICAgIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+CisgKgorICogVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCwgdmVyc2lvbiAyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK01PRFVMRV9BVVRIT1IoIlRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFDUEkgRUMgc3lzZnMgYWNjZXNzIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgYm9vbCB3cml0ZV9zdXBwb3J0OworbW9kdWxlX3BhcmFtKHdyaXRlX3N1cHBvcnQsIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyh3cml0ZV9zdXBwb3J0LCAiRGFuZ2Vyb3VzLCByZWJvb3QgYW5kIHJlbW92YWwgb2YgYmF0dGVyeSBtYXkgIgorCQkgImJlIG5lZWRlZC4iKTsKKworI2RlZmluZSBFQ19TUEFDRV9TSVpFIDI1NgorCitzdHJ1Y3Qgc3lzZGV2X2NsYXNzIGFjcGlfZWNfc3lzZGV2X2NsYXNzID0geworCS5uYW1lID0gImVjIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphY3BpX2VjX2RlYnVnZnNfZGlyOworCitzdGF0aWMgaW50IGFjcGlfZWNfb3Blbl9pbyhzdHJ1Y3QgaW5vZGUgKmksIHN0cnVjdCBmaWxlICpmKQoreworCWYtPnByaXZhdGVfZGF0YSA9IGktPmlfcHJpdmF0ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgYWNwaV9lY19yZWFkX2lvKHN0cnVjdCBmaWxlICpmLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpCit7CisJLyogVXNlIHRoaXMgaWYgc3VwcG9ydCByZWFkaW5nL3dyaXRpbmcgbXVsdGlwbGUgRUNzIGV4aXN0cyBpbiBlYy5jOgorCSAqIHN0cnVjdCBhY3BpX2VjICplYyA9ICgoc3RydWN0IHNlcV9maWxlICopZi0+cHJpdmF0ZV9kYXRhKS0+cHJpdmF0ZTsKKwkgKi8KKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IEVDX1NQQUNFX1NJWkU7CisJdTggKmRhdGEgPSAodTggKikgYnVmOworCWxvZmZfdCBpbml0X29mZiA9ICpvZmY7CisJaW50IGVyciA9IDA7CisKKwlpZiAoKm9mZiA+PSBzaXplKQorCQlyZXR1cm4gMDsKKwlpZiAoKm9mZiArIGNvdW50ID49IHNpemUpIHsKKwkJc2l6ZSAtPSAqb2ZmOworCQljb3VudCA9IHNpemU7CisJfSBlbHNlCisJCXNpemUgPSBjb3VudDsKKworCXdoaWxlIChzaXplKSB7CisJCWVyciA9IGVjX3JlYWQoKm9mZiwgJmRhdGFbKm9mZiAtIGluaXRfb2ZmXSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQkqb2ZmICs9IDE7CisJCXNpemUtLTsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBhY3BpX2VjX3dyaXRlX2lvKHN0cnVjdCBmaWxlICpmLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpCit7CisJLyogVXNlIHRoaXMgaWYgc3VwcG9ydCByZWFkaW5nL3dyaXRpbmcgbXVsdGlwbGUgRUNzIGV4aXN0cyBpbiBlYy5jOgorCSAqIHN0cnVjdCBhY3BpX2VjICplYyA9ICgoc3RydWN0IHNlcV9maWxlICopZi0+cHJpdmF0ZV9kYXRhKS0+cHJpdmF0ZTsKKwkgKi8KKworCXVuc2lnbmVkIGludCBzaXplID0gY291bnQ7CisJbG9mZl90IGluaXRfb2ZmID0gKm9mZjsKKwl1OCAqZGF0YSA9ICh1OCAqKSBidWY7CisJaW50IGVyciA9IDA7CisKKwlpZiAoKm9mZiA+PSBFQ19TUEFDRV9TSVpFKQorCQlyZXR1cm4gMDsKKwlpZiAoKm9mZiArIGNvdW50ID49IEVDX1NQQUNFX1NJWkUpIHsKKwkJc2l6ZSA9IEVDX1NQQUNFX1NJWkUgLSAqb2ZmOworCQljb3VudCA9IHNpemU7CisJfQorCisJd2hpbGUgKHNpemUpIHsKKwkJdTggYnl0ZV93cml0ZSA9IGRhdGFbKm9mZiAtIGluaXRfb2ZmXTsKKwkJZXJyID0gZWNfd3JpdGUoKm9mZiwgYnl0ZV93cml0ZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCSpvZmYgKz0gMTsKKwkJc2l6ZS0tOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfZWNfaW9fb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuICA9IGFjcGlfZWNfb3Blbl9pbywKKwkucmVhZCAgPSBhY3BpX2VjX3JlYWRfaW8sCisJLndyaXRlID0gYWNwaV9lY193cml0ZV9pbywKK307CisKK2ludCBhY3BpX2VjX2FkZF9kZWJ1Z2ZzKHN0cnVjdCBhY3BpX2VjICplYywgdW5zaWduZWQgaW50IGVjX2RldmljZV9jb3VudCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkZXZfZGlyOworCWNoYXIgbmFtZVs2NF07CisJbW9kZV90IG1vZGUgPSAwNDAwOworCisJaWYgKGVjX2RldmljZV9jb3VudCA9PSAwKSB7CisJCWFjcGlfZWNfZGVidWdmc19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImVjIiwgTlVMTCk7CisJCWlmICghYWNwaV9lY19kZWJ1Z2ZzX2RpcikKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKworCXNwcmludGYobmFtZSwgImVjJXUiLCBlY19kZXZpY2VfY291bnQpOworCWRldl9kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIobmFtZSwgYWNwaV9lY19kZWJ1Z2ZzX2Rpcik7CisJaWYgKCFkZXZfZGlyKSB7CisJCWlmIChlY19kZXZpY2VfY291bnQgIT0gMCkKKwkJCWdvdG8gZXJyb3I7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmICghZGVidWdmc19jcmVhdGVfeDMyKCJncGUiLCAwNDQ0LCBkZXZfZGlyLCAodTMyICopJmZpcnN0X2VjLT5ncGUpKQorCQlnb3RvIGVycm9yOworCWlmICghZGVidWdmc19jcmVhdGVfYm9vbCgidXNlX2dsb2JhbF9sb2NrIiwgMDQ0NCwgZGV2X2RpciwKKwkJCQkgKHUzMiAqKSZmaXJzdF9lYy0+Z2xvYmFsX2xvY2spKQorCQlnb3RvIGVycm9yOworCisJaWYgKHdyaXRlX3N1cHBvcnQpCisJCW1vZGUgPSAwNjAwOworCWlmICghZGVidWdmc19jcmVhdGVfZmlsZSgiaW8iLCBtb2RlLCBkZXZfZGlyLCBlYywgJmFjcGlfZWNfaW9fb3BzKSkKKwkJZ290byBlcnJvcjsKKworCXJldHVybiAwOworCitlcnJvcjoKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoYWNwaV9lY19kZWJ1Z2ZzX2Rpcik7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFjcGlfZWNfc3lzX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpZiAoZmlyc3RfZWMpCisJCWVyciA9IGFjcGlfZWNfYWRkX2RlYnVnZnMoZmlyc3RfZWMsIDApOworCWVsc2UKKwkJZXJyID0gLUVOT0RFVjsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWNwaV9lY19zeXNfZXhpdCh2b2lkKQoreworCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShhY3BpX2VjX2RlYnVnZnNfZGlyKTsKK30KKworbW9kdWxlX2luaXQoYWNwaV9lY19zeXNfaW5pdCk7Cittb2R1bGVfZXhpdChhY3BpX2VjX3N5c19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9pbnRlcm5hbC5oIGIvZHJpdmVycy9hY3BpL2ludGVybmFsLmgKaW5kZXggZjhmMTkwZS4uOGFlMjcyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2ludGVybmFsLmgKKysrIGIvZHJpdmVycy9hY3BpL2ludGVybmFsLmgKQEAgLTE4LDYgKzE4LDExIEBACiAgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgogICovCiAKKyNpZm5kZWYgX0FDUElfSU5URVJOQUxfSF8KKyNkZWZpbmUgX0FDUElfSU5URVJOQUxfSF8KKworI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorCiAjZGVmaW5lIFBSRUZJWCAiQUNQSTogIgogCiBpbnQgaW5pdF9hY3BpX2RldmljZV9ub3RpZnkodm9pZCk7CkBAIC00Niw2ICs1MSwyMyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbWJlZGRlZCBDb250cm9sbGVyCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RydWN0IGFjcGlfZWMgeworCWFjcGlfaGFuZGxlIGhhbmRsZTsKKwl1bnNpZ25lZCBsb25nIGdwZTsKKwl1bnNpZ25lZCBsb25nIGNvbW1hbmRfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGRhdGFfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGdsb2JhbF9sb2NrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IG11dGV4IGxvY2s7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHRyYW5zYWN0aW9uICpjdXJyOworCXNwaW5sb2NrX3QgY3Vycl9sb2NrOworCXN0cnVjdCBzeXNfZGV2aWNlIHN5c2RldjsKK307CisKK2V4dGVybiBzdHJ1Y3QgYWNwaV9lYyAqZmlyc3RfZWM7CisKIGludCBhY3BpX2VjX2luaXQodm9pZCk7CiBpbnQgYWNwaV9lY19lY2R0X3Byb2JlKHZvaWQpOwogaW50IGFjcGlfYm9vdF9lY19lbmFibGUodm9pZCk7CkBAIC02MywzICs4NSw1IEBACiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgYWNwaV9zbGVlcF9wcm9jX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQogI2VuZGlmCisKKyNlbmRpZiAvKiBfQUNQSV9JTlRFUk5BTF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3BjaV9yb290LmMgYi9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYwppbmRleCA0ZWFjNTkzLi4xZjY3MDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYworKysgYi9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9wY2ktYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS1hc3BtLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CkBAIC01NDMsNiArNTQ0LDE0IEBACiAJaWYgKGZsYWdzICE9IGJhc2VfZmxhZ3MpCiAJCWFjcGlfcGNpX29zY19zdXBwb3J0KHJvb3QsIGZsYWdzKTsKIAorCXN0YXR1cyA9IGFjcGlfcGNpX29zY19jb250cm9sX3NldChyb290LT5kZXZpY2UtPmhhbmRsZSwKKwkJCQkJICBPU0NfUENJX0VYUFJFU1NfQ0FQX1NUUlVDVFVSRV9DT05UUk9MKTsKKworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJVbmFibGUgdG8gYXNzdW1lIFBDSWUgY29udHJvbDogRGlzYWJsaW5nIEFTUE1cbiIpOworCQlwY2llX25vX2FzcG0oKTsKKwl9CisKIAlwY2lfYWNwaV9hZGRfYnVzX3BtX25vdGlmaWVyKGRldmljZSwgcm9vdC0+YnVzKTsKIAlpZiAoZGV2aWNlLT53YWtldXAuZmxhZ3MucnVuX3dha2UpCiAJCWRldmljZV9zZXRfcnVuX3dha2Uocm9vdC0+YnVzLT5icmlkZ2UsIHRydWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYwppbmRleCA1MTI4NDM1Li5lOTY5OWFhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKQEAgLTIyMyw3ICsyMjMsNyBAQAogCXR5cGUgPSAoYWNwaV90eXBlID09IEFDUElfVFlQRV9ERVZJQ0UpID8gMSA6IDA7CiAJY3B1aWQgPSBhY3BpX2dldF9jcHVpZChoYW5kbGUsIHR5cGUsIGFjcGlfaWQpOwogCi0JaWYgKGNwdWlkID09IC0xKQorCWlmICgoY3B1aWQgPT0gLTEpICYmIChudW1fcG9zc2libGVfY3B1cygpID4gMSkpCiAJCXJldHVybiBmYWxzZTsKIAogCXJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwppbmRleCBiMWIzODU2Li5iNGMyZjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwpAQCAtNzYsMTQgKzc2LDE5IEBACiBtb2R1bGVfcGFyYW0obWF4X2NzdGF0ZSwgdWludCwgMDAwMCk7CiBzdGF0aWMgdW5zaWduZWQgaW50IG5vY3N0IF9fcmVhZF9tb3N0bHk7CiBtb2R1bGVfcGFyYW0obm9jc3QsIHVpbnQsIDAwMDApOworc3RhdGljIGludCBibV9jaGVja19kaXNhYmxlIF9fcmVhZF9tb3N0bHk7Cittb2R1bGVfcGFyYW0oYm1fY2hlY2tfZGlzYWJsZSwgdWludCwgMDAwMCk7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbGF0ZW5jeV9mYWN0b3IgX19yZWFkX21vc3RseSA9IDI7CiBtb2R1bGVfcGFyYW0obGF0ZW5jeV9mYWN0b3IsIHVpbnQsIDA2NDQpOwogCisjaWZkZWYgQ09ORklHX0FDUElfUFJPQ0ZTCiBzdGF0aWMgdTY0IHVzX3RvX3BtX3RpbWVyX3RpY2tzKHM2NCB0KQogewogCXJldHVybiBkaXY2NF91NjQodCAqIFBNX1RJTUVSX0ZSRVFVRU5DWSwgMTAwMDAwMCk7CiB9CisjZW5kaWYKKwogLyoKICAqIElCTSBUaGlua1BhZCBSNDBlIGNyYXNoZXMgbXlzdGVyaW91c2x5IHdoZW4gZ29pbmcgaW50byBDMiBvciBDMy4KICAqIEZvciBub3cgZGlzYWJsZSB0aGlzLiBQcm9iYWJseSBhIGJ1ZyBzb21ld2hlcmUgZWxzZS4KQEAgLTE1OSw3ICsxNjQsNyBAQAogCWlmIChjcHVfaGFzKCZjcHVfZGF0YShwci0+aWQpLCBYODZfRkVBVFVSRV9BUkFUKSkKIAkJcmV0dXJuOwogCi0JaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BTURDMUUpKQorCWlmIChjMWVfZGV0ZWN0ZWQpCiAJCXR5cGUgPSBBQ1BJX1NUQVRFX0MxOwogCiAJLyoKQEAgLTI1OSw3ICsyNjQsNyBAQAogCXJldHVybiAwOwogfQogCi0jaWYgZGVmaW5lZCAoQ09ORklHX0dFTkVSSUNfVElNRSkgJiYgZGVmaW5lZCAoQ09ORklHX1g4NikKKyNpZiBkZWZpbmVkKENPTkZJR19YODYpCiBzdGF0aWMgdm9pZCB0c2NfY2hlY2tfc3RhdGUoaW50IHN0YXRlKQogewogCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yKSB7CkBAIC03NjMsNiArNzY4LDkgQEAKIHsKIAl1MzIgYm1fc3RhdHVzID0gMDsKIAorCWlmIChibV9jaGVja19kaXNhYmxlKQorCQlyZXR1cm4gMDsKKwogCWFjcGlfcmVhZF9iaXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfQlVTX01BU1RFUl9TVEFUVVMsICZibV9zdGF0dXMpOwogCWlmIChibV9zdGF0dXMpCiAJCWFjcGlfd3JpdGVfYml0X3JlZ2lzdGVyKEFDUElfQklUUkVHX0JVU19NQVNURVJfU1RBVFVTLCAxKTsKQEAgLTk0Nyw3ICs5NTUsNyBAQAogCWlmIChhY3BpX2lkbGVfc3VzcGVuZCkKIAkJcmV0dXJuKGFjcGlfaWRsZV9lbnRlcl9jMShkZXYsIHN0YXRlKSk7CiAKLQlpZiAoYWNwaV9pZGxlX2JtX2NoZWNrKCkpIHsKKwlpZiAoIWN4LT5ibV9zdHNfc2tpcCAmJiBhY3BpX2lkbGVfYm1fY2hlY2soKSkgewogCQlpZiAoZGV2LT5zYWZlX3N0YXRlKSB7CiAJCQlkZXYtPmxhc3Rfc3RhdGUgPSBkZXYtPnNhZmVfc3RhdGU7CiAJCQlyZXR1cm4gZGV2LT5zYWZlX3N0YXRlLT5lbnRlcihkZXYsIGRldi0+c2FmZV9zdGF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2xlZXAuYyBiL2RyaXZlcnMvYWNwaS9zbGVlcC5jCmluZGV4IDViN2M1MmUuLjI4NjJjNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zbGVlcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9zbGVlcC5jCkBAIC04Miw2ICs4MiwyMCBAQAogc3RhdGljIHUzMiBhY3BpX3RhcmdldF9zbGVlcF9zdGF0ZSA9IEFDUElfU1RBVEVfUzA7CiAKIC8qCisgKiBUaGUgQUNQSSBzcGVjaWZpY2F0aW9uIHdhbnRzIHVzIHRvIHNhdmUgTlZTIG1lbW9yeSByZWdpb25zIGR1cmluZyBoaWJlcm5hdGlvbgorICogYW5kIHRvIHJlc3RvcmUgdGhlbSBkdXJpbmcgdGhlIHN1YnNlcXVlbnQgcmVzdW1lLiAgV2luZG93cyBkb2VzIHRoYXQgYWxzbyBmb3IKKyAqIHN1c3BlbmQgdG8gUkFNLiAgSG93ZXZlciwgaXQgaXMga25vd24gdGhhdCB0aGlzIG1lY2hhbmlzbSBkb2VzIG5vdCB3b3JrIG9uCisgKiBhbGwgbWFjaGluZXMsIHNvIHdlIGFsbG93IHRoZSB1c2VyIHRvIGRpc2FibGUgaXQgd2l0aCB0aGUgaGVscCBvZiB0aGUKKyAqICdhY3BpX3NsZWVwPW5vbnZzJyBrZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbi4KKyAqLworc3RhdGljIGJvb2wgbnZzX25vc2F2ZTsKKwordm9pZCBfX2luaXQgYWNwaV9udnNfbm9zYXZlKHZvaWQpCit7CisJbnZzX25vc2F2ZSA9IHRydWU7Cit9CisKKy8qCiAgKiBBQ1BJIDEuMCB3YW50cyB1cyB0byBleGVjdXRlIF9QVFMgYmVmb3JlIHN1c3BlbmRpbmcgZGV2aWNlcywgc28gd2UgYWxsb3cgdGhlCiAgKiB1c2VyIHRvIHJlcXVlc3QgdGhhdCBiZWhhdmlvciBieSB1c2luZyB0aGUgJ2FjcGlfb2xkX3N1c3BlbmRfb3JkZXJpbmcnCiAgKiBrZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbiB0aGF0IGNhdXNlcyB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIHRvIGJlIHNldC4KQEAgLTE5Nyw4ICsyMTEsNyBAQAogCXUzMiBhY3BpX3N0YXRlID0gYWNwaV9zdXNwZW5kX3N0YXRlc1twbV9zdGF0ZV07CiAJaW50IGVycm9yID0gMDsKIAotCWVycm9yID0gc3VzcGVuZF9udnNfYWxsb2MoKTsKLQorCWVycm9yID0gbnZzX25vc2F2ZSA/IDAgOiBzdXNwZW5kX252c19hbGxvYygpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCkBAIC0zODgsMjAgKzQwMSw2IEBACiAjZW5kaWYgLyogQ09ORklHX1NVU1BFTkQgKi8KIAogI2lmZGVmIENPTkZJR19ISUJFUk5BVElPTgotLyoKLSAqIFRoZSBBQ1BJIHNwZWNpZmljYXRpb24gd2FudHMgdXMgdG8gc2F2ZSBOVlMgbWVtb3J5IHJlZ2lvbnMgZHVyaW5nIGhpYmVybmF0aW9uCi0gKiBhbmQgdG8gcmVzdG9yZSB0aGVtIGR1cmluZyB0aGUgc3Vic2VxdWVudCByZXN1bWUuICBIb3dldmVyLCBpdCBpcyBub3QgY2VydGFpbgotICogaWYgdGhpcyBtZWNoYW5pc20gaXMgZ29pbmcgdG8gd29yayBvbiBhbGwgbWFjaGluZXMsIHNvIHdlIGFsbG93IHRoZSB1c2VyIHRvCi0gKiBkaXNhYmxlIHRoaXMgbWVjaGFuaXNtIHVzaW5nIHRoZSAnYWNwaV9zbGVlcD1zNF9ub252cycga2VybmVsIGNvbW1hbmQgbGluZQotICogb3B0aW9uLgotICovCi1zdGF0aWMgYm9vbCBzNF9ub19udnM7Ci0KLXZvaWQgX19pbml0IGFjcGlfczRfbm9fbnZzKHZvaWQpCi17Ci0JczRfbm9fbnZzID0gdHJ1ZTsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGxvbmcgczRfaGFyZHdhcmVfc2lnbmF0dXJlOwogc3RhdGljIHN0cnVjdCBhY3BpX3RhYmxlX2ZhY3MgKmZhY3M7CiBzdGF0aWMgYm9vbCBub3NpZ2NoZWNrOwpAQCAtNDE1LDcgKzQxNCw3IEBACiB7CiAJaW50IGVycm9yOwogCi0JZXJyb3IgPSBzNF9ub19udnMgPyAwIDogc3VzcGVuZF9udnNfYWxsb2MoKTsKKwllcnJvciA9IG52c19ub3NhdmUgPyAwIDogc3VzcGVuZF9udnNfYWxsb2MoKTsKIAlpZiAoIWVycm9yKSB7CiAJCWFjcGlfdGFyZ2V0X3NsZWVwX3N0YXRlID0gQUNQSV9TVEFURV9TNDsKIAkJYWNwaV9zbGVlcF90dHNfc3dpdGNoKGFjcGlfdGFyZ2V0X3NsZWVwX3N0YXRlKTsKQEAgLTUxMCw3ICs1MDksNyBAQAogCWVycm9yID0gYWNwaV9zbGVlcF9wcmVwYXJlKEFDUElfU1RBVEVfUzQpOwogCiAJaWYgKCFlcnJvcikgewotCQlpZiAoIXM0X25vX252cykKKwkJaWYgKCFudnNfbm9zYXZlKQogCQkJZXJyb3IgPSBzdXNwZW5kX252c19hbGxvYygpOwogCQlpZiAoIWVycm9yKQogCQkJYWNwaV90YXJnZXRfc2xlZXBfc3RhdGUgPSBBQ1BJX1NUQVRFX1M0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hbWJhL2J1cy5jIGIvZHJpdmVycy9hbWJhL2J1cy5jCmluZGV4IGY2MGIyYjYuLmQzMTU5MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYW1iYS9idXMuYworKysgYi9kcml2ZXJzL2FtYmEvYnVzLmMKQEAgLTEyMiw2ICsxMjIsMzEgQEAKIAogcG9zdGNvcmVfaW5pdGNhbGwoYW1iYV9pbml0KTsKIAorc3RhdGljIGludCBhbWJhX2dldF9lbmFibGVfcGNsayhzdHJ1Y3QgYW1iYV9kZXZpY2UgKnBjZGV2KQoreworCXN0cnVjdCBjbGsgKnBjbGsgPSBjbGtfZ2V0KCZwY2Rldi0+ZGV2LCAiYXBiX3BjbGsiKTsKKwlpbnQgcmV0OworCisJcGNkZXYtPnBjbGsgPSBwY2xrOworCisJaWYgKElTX0VSUihwY2xrKSkKKwkJcmV0dXJuIFBUUl9FUlIocGNsayk7CisKKwlyZXQgPSBjbGtfZW5hYmxlKHBjbGspOworCWlmIChyZXQpCisJCWNsa19wdXQocGNsayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhbWJhX3B1dF9kaXNhYmxlX3BjbGsoc3RydWN0IGFtYmFfZGV2aWNlICpwY2RldikKK3sKKwlzdHJ1Y3QgY2xrICpwY2xrID0gcGNkZXYtPnBjbGs7CisKKwljbGtfZGlzYWJsZShwY2xrKTsKKwljbGtfcHV0KHBjbGspOworfQorCiAvKgogICogVGhlc2UgYXJlIHRoZSBkZXZpY2UgbW9kZWwgY29udmVyc2lvbiB2ZW5lZXJzOyB0aGV5IGNvbnZlcnQgdGhlCiAgKiBkZXZpY2UgbW9kZWwgc3RydWN0dXJlcyB0byBvdXIgbW9yZSBzcGVjaWZpYyBzdHJ1Y3R1cmVzLgpAQCAtMTMwLDE3ICsxNTUsMzMgQEAKIHsKIAlzdHJ1Y3QgYW1iYV9kZXZpY2UgKnBjZGV2ID0gdG9fYW1iYV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgYW1iYV9kcml2ZXIgKnBjZHJ2ID0gdG9fYW1iYV9kcml2ZXIoZGV2LT5kcml2ZXIpOwotCXN0cnVjdCBhbWJhX2lkICppZDsKKwlzdHJ1Y3QgYW1iYV9pZCAqaWQgPSBhbWJhX2xvb2t1cChwY2Rydi0+aWRfdGFibGUsIHBjZGV2KTsKKwlpbnQgcmV0OwogCi0JaWQgPSBhbWJhX2xvb2t1cChwY2Rydi0+aWRfdGFibGUsIHBjZGV2KTsKKwlkbyB7CisJCXJldCA9IGFtYmFfZ2V0X2VuYWJsZV9wY2xrKHBjZGV2KTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOwogCi0JcmV0dXJuIHBjZHJ2LT5wcm9iZShwY2RldiwgaWQpOworCQlyZXQgPSBwY2Rydi0+cHJvYmUocGNkZXYsIGlkKTsKKwkJaWYgKHJldCA9PSAwKQorCQkJYnJlYWs7CisKKwkJYW1iYV9wdXRfZGlzYWJsZV9wY2xrKHBjZGV2KTsKKwl9IHdoaWxlICgwKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgYW1iYV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBhbWJhX2RldmljZSAqcGNkZXYgPSB0b19hbWJhX2RldmljZShkZXYpOwogCXN0cnVjdCBhbWJhX2RyaXZlciAqZHJ2ID0gdG9fYW1iYV9kcml2ZXIoZGV2LT5kcml2ZXIpOwotCXJldHVybiBkcnYtPnJlbW92ZSh0b19hbWJhX2RldmljZShkZXYpKTsKKwlpbnQgcmV0ID0gZHJ2LT5yZW1vdmUocGNkZXYpOworCisJYW1iYV9wdXRfZGlzYWJsZV9wY2xrKHBjZGV2KTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGFtYmFfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMjAzLDcgKzI0NCw2IEBACiAgKi8KIGludCBhbWJhX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgYW1iYV9kZXZpY2UgKmRldiwgc3RydWN0IHJlc291cmNlICpwYXJlbnQpCiB7Ci0JdTMyIHBpZCwgY2lkOwogCXUzMiBzaXplOwogCXZvaWQgX19pb21lbSAqdG1wOwogCWludCBpLCByZXQ7CkBAIC0yNDEsMjQgKzI4MSwzNCBAQAogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KIAotCS8qCi0JICogUmVhZCBwaWQgYW5kIGNpZCBiYXNlZCBvbiBzaXplIG9mIHJlc291cmNlCi0JICogdGhleSBhcmUgbG9jYXRlZCBhdCBlbmQgb2YgcmVnaW9uCi0JICovCi0JZm9yIChwaWQgPSAwLCBpID0gMDsgaSA8IDQ7IGkrKykKLQkJcGlkIHw9IChyZWFkbCh0bXAgKyBzaXplIC0gMHgyMCArIDQgKiBpKSAmIDI1NSkgPDwgKGkgKiA4KTsKLQlmb3IgKGNpZCA9IDAsIGkgPSAwOyBpIDwgNDsgaSsrKQotCQljaWQgfD0gKHJlYWRsKHRtcCArIHNpemUgLSAweDEwICsgNCAqIGkpICYgMjU1KSA8PCAoaSAqIDgpOworCXJldCA9IGFtYmFfZ2V0X2VuYWJsZV9wY2xrKGRldik7CisJaWYgKHJldCA9PSAwKSB7CisJCXUzMiBwaWQsIGNpZDsKKworCQkvKgorCQkgKiBSZWFkIHBpZCBhbmQgY2lkIGJhc2VkIG9uIHNpemUgb2YgcmVzb3VyY2UKKwkJICogdGhleSBhcmUgbG9jYXRlZCBhdCBlbmQgb2YgcmVnaW9uCisJCSAqLworCQlmb3IgKHBpZCA9IDAsIGkgPSAwOyBpIDwgNDsgaSsrKQorCQkJcGlkIHw9IChyZWFkbCh0bXAgKyBzaXplIC0gMHgyMCArIDQgKiBpKSAmIDI1NSkgPDwKKwkJCQkoaSAqIDgpOworCQlmb3IgKGNpZCA9IDAsIGkgPSAwOyBpIDwgNDsgaSsrKQorCQkJY2lkIHw9IChyZWFkbCh0bXAgKyBzaXplIC0gMHgxMCArIDQgKiBpKSAmIDI1NSkgPDwKKwkJCQkoaSAqIDgpOworCisJCWFtYmFfcHV0X2Rpc2FibGVfcGNsayhkZXYpOworCisJCWlmIChjaWQgPT0gMHhiMTA1ZjAwZCkKKwkJCWRldi0+cGVyaXBoaWQgPSBwaWQ7CisKKwkJaWYgKCFkZXYtPnBlcmlwaGlkKQorCQkJcmV0ID0gLUVOT0RFVjsKKwl9CiAKIAlpb3VubWFwKHRtcCk7CiAKLQlpZiAoY2lkID09IDB4YjEwNWYwMGQpCi0JCWRldi0+cGVyaXBoaWQgPSBwaWQ7Ci0KLQlpZiAoIWRldi0+cGVyaXBoaWQpIHsKLQkJcmV0ID0gLUVOT0RFVjsKKwlpZiAocmV0KQogCQlnb3RvIGVycl9yZWxlYXNlOwotCX0KIAogCXJldCA9IGRldmljZV9hZGQoJmRldi0+ZGV2KTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvS2NvbmZpZyBiL2RyaXZlcnMvYXRhL0tjb25maWcKaW5kZXggYWE4NWE5OC4uOGZhZTZhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvS2NvbmZpZworKysgYi9kcml2ZXJzL2F0YS9LY29uZmlnCkBAIC0xODcsNiArMTg3LDE1IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBTQVRBX0RXQworCXRyaXN0YXRlICJEZXNpZ25XYXJlIENvcmVzIFNBVEEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIDQ2MEVYCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgb24tY2hpcCBTQVRBIGNvbnRyb2xsZXIgb2YgdGhlCisJICBBcHBsaWVkTWljcm8gcHJvY2Vzc29yIDQ2MEVYLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgU0FUQV9NVgogCXRyaXN0YXRlICJNYXJ2ZWxsIFNBVEEgc3VwcG9ydCIKIAloZWxwCkBAIC03OTYsNiArODA1LDE1IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBQQVRBX1NBTVNVTkdfQ0YKKwl0cmlzdGF0ZSAiU2Ftc3VuZyBTb0MgUEFUQSBzdXBwb3J0IgorCWRlcGVuZHMgb24gU0FNU1VOR19ERVZfSURFCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBiYXNpYyBzdXBwb3J0IGZvciBTYW1zdW5nJ3MgUzNDL1M1UCBib2FyZAorCSAgUEFUQSBjb250cm9sbGVycyB2aWEgdGhlIG5ldyBBVEEgbGF5ZXIKKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIFBBVEFfV0lOQk9ORF9WTEIKIAl0cmlzdGF0ZSAiV2luYm9uZCBXODM3NTlBIFZMQiBQQVRBIHN1cHBvcnQgKEV4cGVyaW1lbnRhbCkiCiAJZGVwZW5kcyBvbiBJU0EgJiYgRVhQRVJJTUVOVEFMCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9NYWtlZmlsZSBiL2RyaXZlcnMvYXRhL01ha2VmaWxlCmluZGV4IDdlZjg5ZDcuLjY1NDA2MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYXRhL01ha2VmaWxlCkBAIC03LDYgKzcsNyBAQAogb2JqLSQoQ09ORklHX1NBVEFfRlNMKQkJKz0gc2F0YV9mc2wubwogb2JqLSQoQ09ORklHX1NBVEFfSU5JQzE2MlgpCSs9IHNhdGFfaW5pYzE2Mngubwogb2JqLSQoQ09ORklHX1NBVEFfU0lMMjQpCSs9IHNhdGFfc2lsMjQubworb2JqLSQoQ09ORklHX1NBVEFfRFdDKQkJKz0gc2F0YV9kd2NfNDYwZXgubwogCiAjIFNGRiB3LyBjdXN0b20gRE1BCiBvYmotJChDT05GSUdfUERDX0FETUEpCQkrPSBwZGNfYWRtYS5vCkBAIC04Nyw2ICs4OCw3IEBACiBvYmotJChDT05GSUdfUEFUQV9RREkpCQkrPSBwYXRhX3FkaS5vCiBvYmotJChDT05GSUdfUEFUQV9SQjUzMikJKz0gcGF0YV9yYjUzMl9jZi5vCiBvYmotJChDT05GSUdfUEFUQV9SWjEwMDApCSs9IHBhdGFfcnoxMDAwLm8KK29iai0kKENPTkZJR19QQVRBX1NBTVNVTkdfQ0YpCSs9IHBhdGFfc2Ftc3VuZ19jZi5vCiBvYmotJChDT05GSUdfUEFUQV9XSU5CT05EX1ZMQikJKz0gcGF0YV93aW5ib25kLm8KIAogIyBTaG91bGQgYmUgbGFzdCBidXQgdHdvIGxpYmF0YSBkcml2ZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2FoY2kuYyBiL2RyaXZlcnMvYXRhL2FoY2kuYwppbmRleCBmMjUyMjUzLi5mZTc1ZDhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9haGNpLmMKKysrIGIvZHJpdmVycy9hdGEvYWhjaS5jCkBAIC0xMDQyLDcgKzEwNDIsNyBAQAogCiAJVlBSSU5USygiRU5URVJcbiIpOwogCi0JV0FSTl9PTihBVEFfTUFYX1FVRVVFID4gQUhDSV9NQVhfQ01EUyk7CisJV0FSTl9PTigoaW50KUFUQV9NQVhfUVVFVUUgPiBBSENJX01BWF9DTURTKTsKIAogCWlmICghcHJpbnRlZF92ZXJzaW9uKyspCiAJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBkZXYtPmRldiwgInZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2FoY2lfcGxhdGZvcm0uYyBiL2RyaXZlcnMvYXRhL2FoY2lfcGxhdGZvcm0uYwppbmRleCA1ZTExYjE2Li40ZTk3ZjMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9haGNpX3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9hdGEvYWhjaV9wbGF0Zm9ybS5jCkBAIC01NCwxOSArNTQsMTMgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKHBkYXRhICYmIHBkYXRhLT5pbml0KSB7Ci0JCXJjID0gcGRhdGEtPmluaXQoZGV2KTsKLQkJaWYgKHJjKQotCQkJcmV0dXJuIHJjOwotCX0KLQogCWlmIChwZGF0YSAmJiBwZGF0YS0+YXRhX3BvcnRfaW5mbykKIAkJcGkgPSAqcGRhdGEtPmF0YV9wb3J0X2luZm87CiAKIAlocHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqaHByaXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWhwcml2KSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBlcnIwOworCQlkZXZfZXJyKGRldiwgImNhbid0IGFsbG9jIGFoY2lfaG9zdF9wcml2XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJaHByaXYtPmZsYWdzIHw9ICh1bnNpZ25lZCBsb25nKXBpLnByaXZhdGVfZGF0YTsKQEAgLTc0LDggKzY4LDE5IEBACiAJaHByaXYtPm1taW8gPSBkZXZtX2lvcmVtYXAoZGV2LCBtZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbSkpOwogCWlmICghaHByaXYtPm1taW8pIHsKIAkJZGV2X2VycihkZXYsICJjYW4ndCBtYXAgJXBSXG4iLCBtZW0pOwotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyMDsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyoKKwkgKiBTb21lIHBsYXRmb3JtcyBtaWdodCBuZWVkIHRvIHByZXBhcmUgZm9yIG1taW8gcmVnaW9uIGFjY2VzcywKKwkgKiB3aGljaCBjb3VsZCBiZSBkb25lIGluIHRoZSBmb2xsb3dpbmcgaW5pdCBjYWxsLiBTbywgdGhlIG1taW8KKwkgKiByZWdpb24gc2hvdWxkbid0IGJlIGFjY2Vzc2VkIGJlZm9yZSBpbml0IChpZiBwcm92aWRlZCkgaGFzCisJICogcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LgorCSAqLworCWlmIChwZGF0YSAmJiBwZGF0YS0+aW5pdCkgeworCQlyYyA9IHBkYXRhLT5pbml0KGRldiwgaHByaXYtPm1taW8pOworCQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CiAJfQogCiAJYWhjaV9zYXZlX2luaXRpYWxfY29uZmlnKGRldiwgaHByaXYsCkBAIC0xNjYsNyArMTcxLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWhjaV9kcml2ZXIgPSB7Ci0JLnByb2JlID0gYWhjaV9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3AoYWhjaV9yZW1vdmUpLAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gImFoY2kiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuYyBiL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmMKaW5kZXggNzEwN2E2OS4uY2M1Zjc3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jCkBAIC01NCw3ICs1NCw2IEBACiAJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKIAlpbnQgZG1hX2VuYWJsZWQgPSAwOwogCXN0cnVjdCBhdGFfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwogCiAJaWYgKGlkLT5kcml2ZXJfZGF0YSAmIEFUQV9HRU5fRk9SQ0VfRE1BKSB7CiAJCWRtYV9lbmFibGVkID0gMHhmZjsKQEAgLTYzLDkgKzYyLDYgQEAKIAkJZG1hX2VuYWJsZWQgPSBpb3JlYWQ4KGFwLT5pb2FkZHIuYm1kbWFfYWRkciArIEFUQV9ETUFfU1RBVFVTKTsKIAl9CiAKLQlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQ0VOQVRFSykKLQkJZG1hX2VuYWJsZWQgPSAweEZGOwotCiAJYXRhX2Zvcl9lYWNoX2RldihkZXYsIGxpbmssIEVOQUJMRUQpIHsKIAkJLyogV2UgZG9uJ3QgcmVhbGx5IGNhcmUgKi8KIAkJZGV2LT5waW9fbW9kZSA9IFhGRVJfUElPXzA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9hdGFfcGlpeC5jIGIvZHJpdmVycy9hdGEvYXRhX3BpaXguYwppbmRleCA3NDA5Zjk4Li4zOTcxYmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9hdGFfcGlpeC5jCisrKyBiL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMKQEAgLTE1OCw2ICsxNTgsNyBAQAogc3RydWN0IHBpaXhfaG9zdF9wcml2IHsKIAljb25zdCBpbnQgKm1hcDsKIAl1MzIgc2F2ZWRfaW9jZmc7CisJc3BpbmxvY2tfdCBzaWRwcl9sb2NrOwkvKiBGSVhNRTogcmVtb3ZlIG9uY2UgbG9ja2luZyBpbiBFSCBpcyBmaXhlZCAqLwogCXZvaWQgX19pb21lbSAqc2lkcHI7CiB9OwogCkBAIC05NTEsMTIgKzk1MiwxNSBAQAogCQkJICAgICAgIHVuc2lnbmVkIGludCByZWcsIHUzMiAqdmFsKQogewogCXN0cnVjdCBwaWl4X2hvc3RfcHJpdiAqaHByaXYgPSBsaW5rLT5hcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAocmVnID49IEFSUkFZX1NJWkUocGlpeF9zaWR4X21hcCkpCiAJCXJldHVybiAtRUlOVkFMOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhwcml2LT5zaWRwcl9sb2NrLCBmbGFncyk7CiAJcGlpeF9zaWRwcl9zZWwobGluaywgcmVnKTsKIAkqdmFsID0gaW9yZWFkMzIoaHByaXYtPnNpZHByICsgUElJWF9TSURQUl9EQVRBKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZocHJpdi0+c2lkcHJfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC05NjQsMTIgKzk2OCwxNSBAQAogCQkJCXVuc2lnbmVkIGludCByZWcsIHUzMiB2YWwpCiB7CiAJc3RydWN0IHBpaXhfaG9zdF9wcml2ICpocHJpdiA9IGxpbmstPmFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChyZWcgPj0gQVJSQVlfU0laRShwaWl4X3NpZHhfbWFwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHByaXYtPnNpZHByX2xvY2ssIGZsYWdzKTsKIAlwaWl4X3NpZHByX3NlbChsaW5rLCByZWcpOwogCWlvd3JpdGUzMih2YWwsIGhwcml2LT5zaWRwciArIFBJSVhfU0lEUFJfREFUQSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHByaXYtPnNpZHByX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTU2Niw2ICsxNTczLDcgQEAKIAlocHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqaHByaXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWhwcml2KQogCQlyZXR1cm4gLUVOT01FTTsKKwlzcGluX2xvY2tfaW5pdCgmaHByaXYtPnNpZHByX2xvY2spOwogCiAJLyogU2F2ZSBJT0NGRywgdGhpcyB3aWxsIGJlIHVzZWQgZm9yIGNhYmxlIGRldGVjdGlvbiwgcXVpcmsKIAkgKiBkZXRlY3Rpb24gYW5kIHJlc3RvcmF0aW9uIG9uIGRldGFjaC4gIFRoaXMgaXMgbmVjZXNzYXJ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwppbmRleCBkZGY4ZTQ4Li5hMGE0ZDY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKQEAgLTQxNjcsMTUgKzQxNjcsMTMgQEAKIAl7ICJXREMgQUMyMzIwMEwiLAkiMjEuMTBOMjEiLAlBVEFfSE9SS0FHRV9OT0RNQSB9LAogCXsgIkNvbXBhcSBDUkQtODI0MUIiLCAJTlVMTCwJCUFUQV9IT1JLQUdFX05PRE1BIH0sCiAJeyAiQ1JELTg0MDBCIiwJCU5VTEwsIAkJQVRBX0hPUktBR0VfTk9ETUEgfSwKLQl7ICJDUkQtODQ4MEIiLAkJTlVMTCwJCUFUQV9IT1JLQUdFX05PRE1BIH0sCi0JeyAiQ1JELTg0ODJCIiwJCU5VTEwsCQlBVEFfSE9SS0FHRV9OT0RNQSB9LAorCXsgIkNSRC04NDhbMDJdQiIsCU5VTEwsCQlBVEFfSE9SS0FHRV9OT0RNQSB9LAogCXsgIkNSRC04NCIsCQlOVUxMLAkJQVRBX0hPUktBR0VfTk9ETUEgfSwKIAl7ICJTYW5EaXNrIFNEUDNCIiwJTlVMTCwJCUFUQV9IT1JLQUdFX05PRE1BIH0sCiAJeyAiU2FuRGlzayBTRFAzQi02NCIsCU5VTEwsCQlBVEFfSE9SS0FHRV9OT0RNQSB9LAogCXsgIlNBTllPIENELVJPTSBDUkQiLAlOVUxMLAkJQVRBX0hPUktBR0VfTk9ETUEgfSwKIAl7ICJISVRBQ0hJIENEUi04IiwJTlVMTCwJCUFUQV9IT1JLQUdFX05PRE1BIH0sCi0JeyAiSElUQUNISSBDRFItODMzNSIsCU5VTEwsCQlBVEFfSE9SS0FHRV9OT0RNQSB9LAotCXsgIkhJVEFDSEkgQ0RSLTg0MzUiLAlOVUxMLAkJQVRBX0hPUktBR0VfTk9ETUEgfSwKKwl7ICJISVRBQ0hJIENEUi04WzM0XTM1IixOVUxMLAkJQVRBX0hPUktBR0VfTk9ETUEgfSwKIAl7ICJUb3NoaWJhIENELVJPTSBYTS02MjAyQiIsIE5VTEwsCUFUQV9IT1JLQUdFX05PRE1BIH0sCiAJeyAiVE9TSElCQSBDRC1ST00gWE0tMTcwMkJDIiwgTlVMTCwJQVRBX0hPUktBR0VfTk9ETUEgfSwKIAl7ICJDRC01MzJFLUEiLCAJCU5VTEwsCQlBVEFfSE9SS0FHRV9OT0RNQSB9LApAQCAtNDIxMSw3MCArNDIwOSwxNiBAQAogCXsgIk9DWiBDT1JFX1NTRCIsCSIwMi4xMDEwNCIsCUFUQV9IT1JLQUdFX05PTkNRIH0sCiAKIAkvKiBTZWFnYXRlIE5DUSArIEZMVVNIIENBQ0hFIGZpcm13YXJlIGJ1ZyAqLwotCXsgIlNUMzE1MDAzNDFBUyIsCSJTRDE1IiwJCUFUQV9IT1JLQUdFX05PTkNRIHwKLQkJCQkJCUFUQV9IT1JLQUdFX0ZJUk1XQVJFX1dBUk4gfSwKLQl7ICJTVDMxNTAwMzQxQVMiLAkiU0QxNiIsCQlBVEFfSE9SS0FHRV9OT05DUSB8Ci0JCQkJCQlBVEFfSE9SS0FHRV9GSVJNV0FSRV9XQVJOIH0sCi0JeyAiU1QzMTUwMDM0MUFTIiwJIlNEMTciLAkJQVRBX0hPUktBR0VfTk9OQ1EgfAotCQkJCQkJQVRBX0hPUktBR0VfRklSTVdBUkVfV0FSTiB9LAotCXsgIlNUMzE1MDAzNDFBUyIsCSJTRDE4IiwJCUFUQV9IT1JLQUdFX05PTkNRIHwKLQkJCQkJCUFUQV9IT1JLQUdFX0ZJUk1XQVJFX1dBUk4gfSwKLQl7ICJTVDMxNTAwMzQxQVMiLAkiU0QxOSIsCQlBVEFfSE9SS0FHRV9OT05DUSB8CisJeyAiU1QzMTUwMDM0MUFTIiwJIlNEMVs1LTldIiwJQVRBX0hPUktBR0VfTk9OQ1EgfAogCQkJCQkJQVRBX0hPUktBR0VfRklSTVdBUkVfV0FSTiB9LAogCi0JeyAiU1QzMTAwMDMzM0FTIiwJIlNEMTUiLAkJQVRBX0hPUktBR0VfTk9OQ1EgfAotCQkJCQkJQVRBX0hPUktBR0VfRklSTVdBUkVfV0FSTiB9LAotCXsgIlNUMzEwMDAzMzNBUyIsCSJTRDE2IiwJCUFUQV9IT1JLQUdFX05PTkNRIHwKLQkJCQkJCUFUQV9IT1JLQUdFX0ZJUk1XQVJFX1dBUk4gfSwKLQl7ICJTVDMxMDAwMzMzQVMiLAkiU0QxNyIsCQlBVEFfSE9SS0FHRV9OT05DUSB8Ci0JCQkJCQlBVEFfSE9SS0FHRV9GSVJNV0FSRV9XQVJOIH0sCi0JeyAiU1QzMTAwMDMzM0FTIiwJIlNEMTgiLAkJQVRBX0hPUktBR0VfTk9OQ1EgfAotCQkJCQkJQVRBX0hPUktBR0VfRklSTVdBUkVfV0FSTiB9LAotCXsgIlNUMzEwMDAzMzNBUyIsCSJTRDE5IiwJCUFUQV9IT1JLQUdFX05PTkNRIHwKKwl7ICJTVDMxMDAwMzMzQVMiLAkiU0QxWzUtOV0iLAlBVEFfSE9SS0FHRV9OT05DUSB8CiAJCQkJCQlBVEFfSE9SS0FHRV9GSVJNV0FSRV9XQVJOIH0sCiAKLQl7ICJTVDM2NDA2MjNBUyIsCSJTRDE1IiwJCUFUQV9IT1JLQUdFX05PTkNRIHwKLQkJCQkJCUFUQV9IT1JLQUdFX0ZJUk1XQVJFX1dBUk4gfSwKLQl7ICJTVDM2NDA2MjNBUyIsCSJTRDE2IiwJCUFUQV9IT1JLQUdFX05PTkNRIHwKLQkJCQkJCUFUQV9IT1JLQUdFX0ZJUk1XQVJFX1dBUk4gfSwKLQl7ICJTVDM2NDA2MjNBUyIsCSJTRDE3IiwJCUFUQV9IT1JLQUdFX05PTkNRIHwKLQkJCQkJCUFUQV9IT1JLQUdFX0ZJUk1XQVJFX1dBUk4gfSwKLQl7ICJTVDM2NDA2MjNBUyIsCSJTRDE4IiwJCUFUQV9IT1JLQUdFX05PTkNRIHwKLQkJCQkJCUFUQV9IT1JLQUdFX0ZJUk1XQVJFX1dBUk4gfSwKLQl7ICJTVDM2NDA2MjNBUyIsCSJTRDE5IiwJCUFUQV9IT1JLQUdFX05PTkNRIHwKKwl7ICJTVDM2NDBbMzZdMjNBUyIsCSJTRDFbNS05XSIsCUFUQV9IT1JLQUdFX05PTkNRIHwKIAkJCQkJCUFUQV9IT1JLQUdFX0ZJUk1XQVJFX1dBUk4gfSwKIAotCXsgIlNUMzY0MDMyM0FTIiwJIlNEMTUiLAkJQVRBX0hPUktBR0VfTk9OQ1EgfAotCQkJCQkJQVRBX0hPUktBR0VfRklSTVdBUkVfV0FSTiB9LAotCXsgIlNUMzY0MDMyM0FTIiwJIlNEMTYiLAkJQVRBX0hPUktBR0VfTk9OQ1EgfAotCQkJCQkJQVRBX0hPUktBR0VfRklSTVdBUkVfV0FSTiB9LAotCXsgIlNUMzY0MDMyM0FTIiwJIlNEMTciLAkJQVRBX0hPUktBR0VfTk9OQ1EgfAotCQkJCQkJQVRBX0hPUktBR0VfRklSTVdBUkVfV0FSTiB9LAotCXsgIlNUMzY0MDMyM0FTIiwJIlNEMTgiLAkJQVRBX0hPUktBR0VfTk9OQ1EgfAotCQkJCQkJQVRBX0hPUktBR0VfRklSTVdBUkVfV0FSTiB9LAotCXsgIlNUMzY0MDMyM0FTIiwJIlNEMTkiLAkJQVRBX0hPUktBR0VfTk9OQ1EgfAotCQkJCQkJQVRBX0hPUktBR0VfRklSTVdBUkVfV0FSTiB9LAotCi0JeyAiU1QzMzIwODEzQVMiLAkiU0QxNSIsCQlBVEFfSE9SS0FHRV9OT05DUSB8Ci0JCQkJCQlBVEFfSE9SS0FHRV9GSVJNV0FSRV9XQVJOIH0sCi0JeyAiU1QzMzIwODEzQVMiLAkiU0QxNiIsCQlBVEFfSE9SS0FHRV9OT05DUSB8Ci0JCQkJCQlBVEFfSE9SS0FHRV9GSVJNV0FSRV9XQVJOIH0sCi0JeyAiU1QzMzIwODEzQVMiLAkiU0QxNyIsCQlBVEFfSE9SS0FHRV9OT05DUSB8Ci0JCQkJCQlBVEFfSE9SS0FHRV9GSVJNV0FSRV9XQVJOIH0sCi0JeyAiU1QzMzIwODEzQVMiLAkiU0QxOCIsCQlBVEFfSE9SS0FHRV9OT05DUSB8Ci0JCQkJCQlBVEFfSE9SS0FHRV9GSVJNV0FSRV9XQVJOIH0sCi0JeyAiU1QzMzIwODEzQVMiLAkiU0QxOSIsCQlBVEFfSE9SS0FHRV9OT05DUSB8Ci0JCQkJCQlBVEFfSE9SS0FHRV9GSVJNV0FSRV9XQVJOIH0sCi0KLQl7ICJTVDMzMjA2MTNBUyIsCSJTRDE1IiwJCUFUQV9IT1JLQUdFX05PTkNRIHwKLQkJCQkJCUFUQV9IT1JLQUdFX0ZJUk1XQVJFX1dBUk4gfSwKLQl7ICJTVDMzMjA2MTNBUyIsCSJTRDE2IiwJCUFUQV9IT1JLQUdFX05PTkNRIHwKLQkJCQkJCUFUQV9IT1JLQUdFX0ZJUk1XQVJFX1dBUk4gfSwKLQl7ICJTVDMzMjA2MTNBUyIsCSJTRDE3IiwJCUFUQV9IT1JLQUdFX05PTkNRIHwKLQkJCQkJCUFUQV9IT1JLQUdFX0ZJUk1XQVJFX1dBUk4gfSwKLQl7ICJTVDMzMjA2MTNBUyIsCSJTRDE4IiwJCUFUQV9IT1JLQUdFX05PTkNRIHwKLQkJCQkJCUFUQV9IT1JLQUdFX0ZJUk1XQVJFX1dBUk4gfSwKLQl7ICJTVDMzMjA2MTNBUyIsCSJTRDE5IiwJCUFUQV9IT1JLQUdFX05PTkNRIHwKKwl7ICJTVDMzMjBbNjhdMTNBUyIsCSJTRDFbNS05XSIsCUFUQV9IT1JLQUdFX05PTkNRIHwKIAkJCQkJCUFUQV9IT1JLQUdFX0ZJUk1XQVJFX1dBUk4gfSwKIAogCS8qIEJsYWNrbGlzdCBlbnRyaWVzIHRha2VuIGZyb20gU2lsaWNvbiBJbWFnZSAzMTI0LzMxMzIKQEAgLTQzMDMsMTIgKzQyNDcsNyBAQAogCS8qIERldmljZXMgd2hpY2ggZ2V0IHRoZSBJVkIgd3JvbmcgKi8KIAl7ICJRVUFOVFVNIEZJUkVCQUxMbGN0MTAgMDUiLCAiQTAzLjA5MDAiLCBBVEFfSE9SS0FHRV9JVkIsIH0sCiAJLyogTWF5YmUgd2Ugc2hvdWxkIGp1c3QgYmxhY2tsaXN0IFRTU1Rjb3JwLi4uICovCi0JeyAiVFNTVGNvcnAgQ0REVkRXIFNILVMyMDJIIiwgIlNCMDAiLAkgIEFUQV9IT1JLQUdFX0lWQiwgfSwKLQl7ICJUU1NUY29ycCBDRERWRFcgU0gtUzIwMkgiLCAiU0IwMSIsCSAgQVRBX0hPUktBR0VfSVZCLCB9LAotCXsgIlRTU1Rjb3JwIENERFZEVyBTSC1TMjAySiIsICJTQjAwIiwJICBBVEFfSE9SS0FHRV9JVkIsIH0sCi0JeyAiVFNTVGNvcnAgQ0REVkRXIFNILVMyMDJKIiwgIlNCMDEiLAkgIEFUQV9IT1JLQUdFX0lWQiwgfSwKLQl7ICJUU1NUY29ycCBDRERWRFcgU0gtUzIwMk4iLCAiU0IwMCIsCSAgQVRBX0hPUktBR0VfSVZCLCB9LAotCXsgIlRTU1Rjb3JwIENERFZEVyBTSC1TMjAyTiIsICJTQjAxIiwJICBBVEFfSE9SS0FHRV9JVkIsIH0sCisJeyAiVFNTVGNvcnAgQ0REVkRXIFNILVMyMDJbSEpOXSIsICJTQjBbMDFdIiwgIEFUQV9IT1JLQUdFX0lWQiwgfSwKIAogCS8qIERldmljZXMgdGhhdCBkbyBub3QgbmVlZCBicmlkZ2luZyBsaW1pdHMgYXBwbGllZCAqLwogCXsgIk1UUk9OIE1TUC1TQVRBKiIsCQlOVUxMLAlBVEFfSE9SS0FHRV9CUklER0VfT0ssIH0sCkBAIC00MzI2LDI5ICs0MjY1LDczIEBACiAJeyB9CiB9OwogCi1zdGF0aWMgaW50IHN0cm5fcGF0dGVybl9jbXAoY29uc3QgY2hhciAqcGF0dCwgY29uc3QgY2hhciAqbmFtZSwgaW50IHdpbGRjaGFyKQorLyoqCisgKglnbG9iX21hdGNoIC0gbWF0Y2ggYSB0ZXh0IHN0cmluZyBhZ2FpbnN0IGEgZ2xvYi1zdHlsZSBwYXR0ZXJuCisgKglAdGV4dDogdGhlIHN0cmluZyB0byBiZSBleGFtaW5lZAorICoJQHBhdHRlcm46IHRoZSBnbG9iLXN0eWxlIHBhdHRlcm4gdG8gYmUgbWF0Y2hlZCBhZ2FpbnN0CisgKgorICoJRWl0aGVyL2JvdGggb2YgdGV4dCBhbmQgcGF0dGVybiBjYW4gYmUgZW1wdHkgc3RyaW5ncy4KKyAqCisgKglNYXRjaCB0ZXh0IGFnYWluc3QgYSBnbG9iLXN0eWxlIHBhdHRlcm4sIHdpdGggd2lsZGNhcmRzIGFuZCBzaW1wbGUgc2V0czoKKyAqCisgKgkJPwltYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyLgorICoJCSoJbWF0Y2hlcyBhbnkgcnVuIG9mIGNoYXJhY3RlcnMuCisgKgkJW3h5el0JbWF0Y2hlcyBhIHNpbmdsZSBjaGFyYWN0ZXIgZnJvbSB0aGUgc2V0OiB4LCB5LCBvciB6LgorICoJCVthLWRdCW1hdGNoZXMgYSBzaW5nbGUgY2hhcmFjdGVyIGZyb20gdGhlIHJhbmdlOiBhLCBiLCBjLCBvciBkLgorICoJCVthLWQwLTldIG1hdGNoZXMgYSBzaW5nbGUgY2hhcmFjdGVyIGZyb20gZWl0aGVyIHJhbmdlLgorICoKKyAqCVRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgPywgWywgLSwgb3IgKiwgY2FuIGJlIG1hdGNoZWQgdXNpbmcgYSBzZXQsIGVnLiBbKl0KKyAqCUJlaGF2aW91ciB3aXRoIG1hbGZvcm1lZCBwYXR0ZXJucyBpcyB1bmRlZmluZWQsIHRob3VnaCBnZW5lcmFsbHkgcmVhc29uYWJsZS4KKyAqCisgKglFeGFtcGxlIHBhdHRlcm5zOiAgIlNEMT8iLCAgIlNEMVswLTVdIiwgICIqUjAiLCAgU0QqMT9bMDEyXSp4eCIKKyAqCisgKglUaGlzIGZ1bmN0aW9uIHVzZXMgb25lIGxldmVsIG9mIHJlY3Vyc2lvbiBwZXIgJyonIGluIHBhdHRlcm4uCisgKglTaW5jZSBpdCBjYWxscyBfbm90aGluZ18gZWxzZSwgYW5kIGhhcyBfbm9fIGV4cGxpY2l0IGxvY2FsIHZhcmlhYmxlcywKKyAqCXRoaXMgd2lsbCBub3QgY2F1c2Ugc3RhY2sgcHJvYmxlbXMgZm9yIGFueSByZWFzb25hYmxlIHVzZSBoZXJlLgorICoKKyAqCVJFVFVSTlM6CisgKgkwIG9uIG1hdGNoLCAxIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCBnbG9iX21hdGNoIChjb25zdCBjaGFyICp0ZXh0LCBjb25zdCBjaGFyICpwYXR0ZXJuKQogewotCWNvbnN0IGNoYXIgKnA7Ci0JaW50IGxlbjsKKwlkbyB7CisJCS8qIE1hdGNoIHNpbmdsZSBjaGFyYWN0ZXIgb3IgYSAnPycgd2lsZGNhcmQgKi8KKwkJaWYgKCp0ZXh0ID09ICpwYXR0ZXJuIHx8ICpwYXR0ZXJuID09ICc/JykgeworCQkJaWYgKCEqcGF0dGVybisrKQorCQkJCXJldHVybiAwOyAgLyogRW5kIG9mIGJvdGggc3RyaW5nczogbWF0Y2ggKi8KKwkJfSBlbHNlIHsKKwkJCS8qIE1hdGNoIHNpbmdsZSBjaGFyIGFnYWluc3QgYSAnWycgYnJhY2tldGVkICddJyBwYXR0ZXJuIHNldCAqLworCQkJaWYgKCEqdGV4dCB8fCAqcGF0dGVybiAhPSAnWycpCisJCQkJYnJlYWs7ICAvKiBOb3QgYSBwYXR0ZXJuIHNldCAqLworCQkJd2hpbGUgKCorK3BhdHRlcm4gJiYgKnBhdHRlcm4gIT0gJ10nICYmICp0ZXh0ICE9ICpwYXR0ZXJuKSB7CisJCQkJaWYgKCpwYXR0ZXJuID09ICctJyAmJiAqKHBhdHRlcm4gLSAxKSAhPSAnWycpCisJCQkJCWlmICgqdGV4dCA+ICoocGF0dGVybiAtIDEpICYmICp0ZXh0IDwgKihwYXR0ZXJuICsgMSkpIHsKKwkJCQkJCSsrcGF0dGVybjsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQl9CisJCQlpZiAoISpwYXR0ZXJuIHx8ICpwYXR0ZXJuID09ICddJykKKwkJCQlyZXR1cm4gMTsgIC8qIE5vIG1hdGNoICovCisJCQl3aGlsZSAoKnBhdHRlcm4gJiYgKnBhdHRlcm4rKyAhPSAnXScpOworCQl9CisJfSB3aGlsZSAoKisrdGV4dCAmJiAqcGF0dGVybik7CiAKLQkvKgotCSAqIGNoZWNrIGZvciB0cmFpbGluZyB3aWxkY2FyZDogKlwwCi0JICovCi0JcCA9IHN0cmNocihwYXR0LCB3aWxkY2hhcik7Ci0JaWYgKHAgJiYgKCgqKHAgKyAxKSkgPT0gMCkpCi0JCWxlbiA9IHAgLSBwYXR0OwotCWVsc2UgewotCQlsZW4gPSBzdHJsZW4obmFtZSk7Ci0JCWlmICghbGVuKSB7Ci0JCQlpZiAoISpwYXR0KQotCQkJCXJldHVybiAwOwotCQkJcmV0dXJuIC0xOworCS8qIE1hdGNoIGFueSBydW4gb2YgY2hhcnMgYWdhaW5zdCBhICcqJyB3aWxkY2FyZCAqLworCWlmICgqcGF0dGVybiA9PSAnKicpIHsKKwkJaWYgKCEqKytwYXR0ZXJuKQorCQkJcmV0dXJuIDA7ICAvKiBNYXRjaDogYXZvaWQgcmVjdXJzaW9uIGF0IGVuZCBvZiBwYXR0ZXJuICovCisJCS8qIExvb3AgdG8gaGFuZGxlIGFkZGl0aW9uYWwgcGF0dGVybiBjaGFycyBhZnRlciB0aGUgd2lsZGNhcmQgKi8KKwkJd2hpbGUgKCp0ZXh0KSB7CisJCQlpZiAoZ2xvYl9tYXRjaCh0ZXh0LCBwYXR0ZXJuKSA9PSAwKQorCQkJCXJldHVybiAwOyAgLyogUmVtYWluZGVyIG1hdGNoZWQgKi8KKwkJCSsrdGV4dDsgIC8qIEFic29yYiAobWF0Y2gpIHRoaXMgY2hhciBhbmQgdHJ5IGFnYWluICovCiAJCX0KIAl9Ci0KLQlyZXR1cm4gc3RybmNtcChwYXR0LCBuYW1lLCBsZW4pOworCWlmICghKnRleHQgJiYgISpwYXR0ZXJuKQorCQlyZXR1cm4gMDsgIC8qIEVuZCBvZiBib3RoIHN0cmluZ3M6IG1hdGNoICovCisJcmV0dXJuIDE7ICAvKiBObyBtYXRjaCAqLwogfQotCisgCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBhdGFfZGV2X2JsYWNrbGlzdGVkKGNvbnN0IHN0cnVjdCBhdGFfZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgY2hhciBtb2RlbF9udW1bQVRBX0lEX1BST0RfTEVOICsgMV07CkBAIC00MzU5LDEwICs0MzQyLDEwIEBACiAJYXRhX2lkX2Nfc3RyaW5nKGRldi0+aWQsIG1vZGVsX3JldiwgQVRBX0lEX0ZXX1JFViwgc2l6ZW9mKG1vZGVsX3JldikpOwogCiAJd2hpbGUgKGFkLT5tb2RlbF9udW0pIHsKLQkJaWYgKCFzdHJuX3BhdHRlcm5fY21wKGFkLT5tb2RlbF9udW0sIG1vZGVsX251bSwgJyonKSkgeworCQlpZiAoIWdsb2JfbWF0Y2gobW9kZWxfbnVtLCBhZC0+bW9kZWxfbnVtKSkgewogCQkJaWYgKGFkLT5tb2RlbF9yZXYgPT0gTlVMTCkKIAkJCQlyZXR1cm4gYWQtPmhvcmthZ2U7Ci0JCQlpZiAoIXN0cm5fcGF0dGVybl9jbXAoYWQtPm1vZGVsX3JldiwgbW9kZWxfcmV2LCAnKicpKQorCQkJaWYgKCFnbG9iX21hdGNoKG1vZGVsX3JldiwgYWQtPm1vZGVsX3JldikpCiAJCQkJcmV0dXJuIGFkLT5ob3JrYWdlOwogCQl9CiAJCWFkKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtZWguYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCmluZGV4IGY3N2E2NzMuLjY5NzQ3NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCkBAIC0yMjE0LDYgKzIyMTQsNyBAQAogCQl7IEFUQV9DTURfU01BUlQsCQkiU01BUlQiIH0sCiAJCXsgQVRBX0NNRF9NRURJQV9MT0NLLAkJIkRPT1IgTE9DSyIgfSwKIAkJeyBBVEFfQ01EX01FRElBX1VOTE9DSywJCSJET09SIFVOTE9DSyIgfSwKKwkJeyBBVEFfQ01EX0RTTSwJCQkiREFUQSBTRVQgTUFOQUdFTUVOVCIgfSwKIAkJeyBBVEFfQ01EX0NIS19NRURfQ1JEX1RZUCwgCSJDSEVDSyBNRURJQSBDQVJEIFRZUEUiIH0sCiAJCXsgQVRBX0NNRF9DRkFfUkVRX0VYVF9FUlIsIAkiQ0ZBIFJFUVVFU1QgRVhURU5ERUQgRVJST1IiIH0sCiAJCXsgQVRBX0NNRF9DRkFfV1JJVEVfTkUsCQkiQ0ZBIFdSSVRFIFNFQ1RPUlMgV0lUSE9VVCBFUkFTRSIgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3BjbWNpYS5jCmluZGV4IDExOGMyOGUuLmU5NDRhYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9wY21jaWEuYwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2F0YS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgpAQCAtMjAxLDIzICsyMDAsMjUgQEAKIAogCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQtPmlvLm53aW4gPiAwKSkgewogCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQtPmlvOwotCQlwZGV2LT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7Ci0JCXBkZXYtPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCi0JCQlwZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OworCQlwZGV2LT5pb19saW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQlwZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBpby0+d2luWzBdLmJhc2U7CisJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpIHsKKwkJCXBkZXYtPnJlc291cmNlWzBdLT5mbGFncyAmPSB+SU9fREFUQV9QQVRIX1dJRFRIOworCQkJcGRldi0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF84OworCQl9CiAJCWlmIChpby0+bndpbiA9PSAyKSB7Ci0JCQlwZGV2LT5pby5OdW1Qb3J0czEgPSA4OwotCQkJcGRldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOwotCQkJcGRldi0+aW8uTnVtUG9ydHMyID0gKHN0ay0+aXNfa21lKSA/IDIgOiAxOwotCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBkZXYsICZwZGV2LT5pbykgIT0gMCkKKwkJCXBkZXYtPnJlc291cmNlWzBdLT5lbmQgPSA4OworCQkJcGRldi0+cmVzb3VyY2VbMV0tPnN0YXJ0ID0gaW8tPndpblsxXS5iYXNlOworCQkJcGRldi0+cmVzb3VyY2VbMV0tPmVuZCA9IChzdGstPmlzX2ttZSkgPyAyIDogMTsKKwkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwZGV2KSAhPSAwKQogCQkJCXJldHVybiAtRU5PREVWOwotCQkJc3RrLT5jdGxfYmFzZSA9IHBkZXYtPmlvLkJhc2VQb3J0MjsKKwkJCXN0ay0+Y3RsX2Jhc2UgPSBwZGV2LT5yZXNvdXJjZVsxXS0+c3RhcnQ7CiAJCX0gZWxzZSBpZiAoKGlvLT5ud2luID09IDEpICYmIChpby0+d2luWzBdLmxlbiA+PSAxNikpIHsKLQkJCXBkZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOwotCQkJcGRldi0+aW8uTnVtUG9ydHMyID0gMDsKLQkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwZGV2LCAmcGRldi0+aW8pICE9IDApCisJCQlwZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gaW8tPndpblswXS5sZW47CisJCQlwZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gMDsKKwkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwZGV2KSAhPSAwKQogCQkJCXJldHVybiAtRU5PREVWOwotCQkJc3RrLT5jdGxfYmFzZSA9IHBkZXYtPmlvLkJhc2VQb3J0MSArIDB4MGU7CisJCQlzdGstPmN0bF9iYXNlID0gcGRldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ICsgMHgwZTsKIAkJfSBlbHNlCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJLyogSWYgd2UndmUgZ290IHRoaXMgZmFyLCB3ZSdyZSBkb25lICovCkBAIC0yNDYsOSArMjQ3LDggQEAKIAlzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyAqb3BzID0gJnBjbWNpYV9wb3J0X29wczsKIAogCS8qIFNldCB1cCBhdHRyaWJ1dGVzIGluIG9yZGVyIHRvIHByb2JlIGNhcmQgYW5kIGdldCByZXNvdXJjZXMgKi8KLQlwZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCXBkZXYtPmlvLkF0dHJpYnV0ZXMyID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JcGRldi0+aW8uSU9BZGRyTGluZXMgPSAzOworCXBkZXYtPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKKwlwZGV2LT5yZXNvdXJjZVsxXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CiAJcGRldi0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogCXBkZXYtPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCkBAIC0yNzEsNyArMjcxLDcgQEAKIAkJaWYgKHBjbWNpYV9sb29wX2NvbmZpZyhwZGV2LCBwY21jaWFfY2hlY2tfb25lX2NvbmZpZywgc3RrKSkKIAkJCWdvdG8gZmFpbGVkOyAvKiBObyBzdWl0YWJsZSBjb25maWcgZm91bmQgKi8KIAl9Ci0JaW9fYmFzZSA9IHBkZXYtPmlvLkJhc2VQb3J0MTsKKwlpb19iYXNlID0gcGRldi0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCWN0bF9iYXNlID0gc3RrLT5jdGxfYmFzZTsKIAlpZiAoIXBkZXYtPmlycSkKIAkJZ290byBmYWlsZWQ7CkBAIC0yOTQsNyArMjk0LDcgQEAKIAogCS8qIEZJWE1FOiBDb3VsZCBiZSBtb3JlIHBvcnRzIGF0IGJhc2UgKyAweDEwIGJ1dCB3ZSBvbmx5IGRlYWwgd2l0aAogCSAgIG9uZSByaWdodCBub3cgKi8KLQlpZiAocGRldi0+aW8uTnVtUG9ydHMxID49IDB4MjApCisJaWYgKHJlc291cmNlX3NpemUocGRldi0+cmVzb3VyY2VbMF0pID49IDB4MjApCiAJCW5fcG9ydHMgPSAyOwogCiAJaWYgKHBkZXYtPm1hbmZfaWQgPT0gMHgwMDk3ICYmIHBkZXYtPmNhcmRfaWQgPT0gMHgxNjIwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zYW1zdW5nX2NmLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NhbXN1bmdfY2YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjljZmIyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zYW1zdW5nX2NmLmMKQEAgLTAsMCArMSw2ODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogUEFUQSBkcml2ZXIgZm9yIFNhbXN1bmcgU29Dcy4KKyAqIFN1cHBvcnRzIENGIEludGVyZmFjZSBpbiBUcnVlIElERSBtb2RlLiBDdXJyZW50bHkgb25seSBQSU8gbW9kZSBoYXMgYmVlbgorICogaW1wbGVtZW50ZWQ7IFVETUEgc3VwcG9ydCBoYXMgdG8gYmUgYWRkZWQuCisgKgorICogQmFzZWQgb246CisgKglQQVRBIGRyaXZlciBmb3IgQVQ5MVNBTTkyNjAgU3RhdGljIE1lbW9yeSBDb250cm9sbGVyCisgKglQQVRBIGRyaXZlciBmb3IgVG9zaGliYSBTQ0MgY29udHJvbGxlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPHBsYXQvYXRhLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLWF0YS5oPgorCisjZGVmaW5lIERSVl9OQU1FICJwYXRhX3NhbXN1bmdfY2YiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjEiCisKK2VudW0gczNjX2NwdV90eXBlIHsKKwlUWVBFX1MzQzY0WFgsCisJVFlQRV9TNVBDMTAwLAorCVRZUEVfUzVQVjIxMCwKK307CisKKy8qCisgKiBzdHJ1Y3QgczNjX2lkZV9pbmZvIC0gUzNDIFBBVEEgaW5zdGFuY2UuCisgKiBAY2xrOiBUaGUgY2xvY2sgcmVzb3VyY2UgZm9yIHRoaXMgY29udHJvbGxlci4KKyAqIEBpZGVfYWRkcjogVGhlIGFyZWEgbWFwcGVkIGZvciB0aGUgaGFyZHdhcmUgcmVnaXN0ZXJzLgorICogQHNmcl9hZGRyOiBUaGUgYXJlYSBtYXBwZWQgZm9yIHRoZSBzcGVjaWFsIGZ1bmN0aW9uIHJlZ2lzdGVycy4KKyAqIEBpcnE6IFRoZSBJUlEgbnVtYmVyIHdlIGFyZSB1c2luZy4KKyAqIEBjcHVfdHlwZTogVGhlIGV4YWN0IHR5cGUgb2YgdGhpcyBjb250cm9sbGVyLgorICogQGZpZm9fc3RhdHVzX3JlZzogVGhlIEFUQV9GSUZPX1NUQVRVUyByZWdpc3RlciBvZmZzZXQuCisgKi8KK3N0cnVjdCBzM2NfaWRlX2luZm8geworCXN0cnVjdCBjbGsgKmNsazsKKwl2b2lkIF9faW9tZW0gKmlkZV9hZGRyOworCXZvaWQgX19pb21lbSAqc2ZyX2FkZHI7CisJdW5zaWduZWQgaW50IGlycTsKKwllbnVtIHMzY19jcHVfdHlwZSBjcHVfdHlwZTsKKwl1bnNpZ25lZCBpbnQgZmlmb19zdGF0dXNfcmVnOworfTsKKworc3RhdGljIHZvaWQgcGF0YV9zM2Nfc2V0X2VuZGlhbih2b2lkIF9faW9tZW0gKnMzY19pZGVfcmVnYmFzZSwgdTggbW9kZSkKK3sKKwl1MzIgcmVnID0gcmVhZGwoczNjX2lkZV9yZWdiYXNlICsgUzNDX0FUQV9DRkcpOworCXJlZyA9IG1vZGUgPyAocmVnICYgflMzQ19BVEFfQ0ZHX1NXQVApIDogKHJlZyB8IFMzQ19BVEFfQ0ZHX1NXQVApOworCXdyaXRlbChyZWcsIHMzY19pZGVfcmVnYmFzZSArIFMzQ19BVEFfQ0ZHKTsKK30KKworc3RhdGljIHZvaWQgcGF0YV9zM2NfY2ZnX21vZGUodm9pZCBfX2lvbWVtICpzM2NfaWRlX3NmcmJhc2UpCit7CisJLyogU2VsZWN0IHRydWUtaWRlIGFzIHRoZSBpbnRlcm5hbCBvcGVyYXRpbmcgbW9kZSAqLworCXdyaXRlbChyZWFkbChzM2NfaWRlX3NmcmJhc2UgKyBTM0NfQ0ZBVEFfTVVYKSB8IFMzQ19DRkFUQV9NVVhfVFJVRUlERSwKKwkJczNjX2lkZV9zZnJiYXNlICsgUzNDX0NGQVRBX01VWCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nCitwYXRhX3MzY19zZXR1cF90aW1pbmcoc3RydWN0IHMzY19pZGVfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGF0YV90aW1pbmcgKmF0YSkKK3sKKwlpbnQgdDEgPSBhdGEtPnNldHVwOworCWludCB0MiA9IGF0YS0+YWN0OGI7CisJaW50IHQyaSA9IGF0YS0+cmVjOGI7CisJdWxvbmcgcGlvdGltZTsKKworCXBpb3RpbWUgPSAoKHQyaSAmIDB4ZmYpIDw8IDEyKSB8ICgodDIgJiAweGZmKSA8PCA0KSB8ICh0MSAmIDB4Zik7CisKKwlyZXR1cm4gcGlvdGltZTsKK30KKworc3RhdGljIHZvaWQgcGF0YV9zM2Nfc2V0X3Bpb21vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpCit7CisJc3RydWN0IHMzY19pZGVfaW5mbyAqaW5mbyA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGF0YV90aW1pbmcgdGltaW5nOworCWludCBjeWNsZV90aW1lOworCXVsb25nIGF0YV9jZmcgPSByZWFkbChpbmZvLT5pZGVfYWRkciArIFMzQ19BVEFfQ0ZHKTsKKwl1bG9uZyBwaW90aW1lOworCisJLyogRW5hYmxlcyBJT1JEWSBpZiBtb2RlIHJlcXVpcmVzIGl0ICovCisJaWYgKGF0YV9waW9fbmVlZF9pb3JkeShhZGV2KSkKKwkJYXRhX2NmZyB8PSBTM0NfQVRBX0NGR19JT1JEWUVOOworCWVsc2UKKwkJYXRhX2NmZyAmPSB+UzNDX0FUQV9DRkdfSU9SRFlFTjsKKworCWN5Y2xlX3RpbWUgPSAoaW50KSgxMDAwMDAwMDAwVUwgLyBjbGtfZ2V0X3JhdGUoaW5mby0+Y2xrKSk7CisKKwlhdGFfdGltaW5nX2NvbXB1dGUoYWRldiwgYWRldi0+cGlvX21vZGUsICZ0aW1pbmcsCisJCQkJCWN5Y2xlX3RpbWUgKiAxMDAwLCAwKTsKKworCXBpb3RpbWUgPSBwYXRhX3MzY19zZXR1cF90aW1pbmcoaW5mbywgJnRpbWluZyk7CisKKwl3cml0ZWwoYXRhX2NmZywgaW5mby0+aWRlX2FkZHIgKyBTM0NfQVRBX0NGRyk7CisJd3JpdGVsKHBpb3RpbWUsIGluZm8tPmlkZV9hZGRyICsgUzNDX0FUQV9QSU9fVElNRSk7Cit9CisKKy8qCisgKiBXYWl0cyB1bnRpbCB0aGUgSURFIGNvbnRyb2xsZXIgaXMgYWJsZSB0byBwZXJmb3JtIG5leHQgcmVhZC93cml0ZQorICogb3BlcmF0aW9uIHRvIHRoZSBkaXNrLiBOZWVkZWQgZm9yIDY0WFggc2VyaWVzIGJvYXJkcyBvbmx5LgorICovCitzdGF0aWMgaW50IHdhaXRfZm9yX2hvc3RfcmVhZHkoc3RydWN0IHMzY19pZGVfaW5mbyAqaW5mbykKK3sKKwl1bG9uZyB0aW1lb3V0OworCXZvaWQgX19pb21lbSAqZmlmb19yZWcgPSBpbmZvLT5pZGVfYWRkciArIGluZm8tPmZpZm9fc3RhdHVzX3JlZzsKKworCS8qIHdhaXQgZm9yIG1heGltdW0gb2YgMjAgbXNlYyAqLworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyMCk7CisJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCWlmICgocmVhZGwoZmlmb19yZWcpID4+IDI4KSA9PSAwKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUJVU1k7Cit9CisKKy8qCisgKiBXcml0ZXMgdG8gb25lIG9mIHRoZSB0YXNrIGZpbGUgcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBhdGFfb3V0YihzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QsIHU4IGFkZHIsIHZvaWQgX19pb21lbSAqcmVnKQoreworCXN0cnVjdCBzM2NfaWRlX2luZm8gKmluZm8gPSBob3N0LT5wcml2YXRlX2RhdGE7CisKKwl3YWl0X2Zvcl9ob3N0X3JlYWR5KGluZm8pOworCXdyaXRlYihhZGRyLCByZWcpOworfQorCisvKgorICogUmVhZHMgZnJvbSBvbmUgb2YgdGhlIHRhc2sgZmlsZSByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyB1OCBhdGFfaW5iKHN0cnVjdCBhdGFfaG9zdCAqaG9zdCwgdm9pZCBfX2lvbWVtICpyZWcpCit7CisJc3RydWN0IHMzY19pZGVfaW5mbyAqaW5mbyA9IGhvc3QtPnByaXZhdGVfZGF0YTsKKwl1OCB0ZW1wOworCisJd2FpdF9mb3JfaG9zdF9yZWFkeShpbmZvKTsKKwkodm9pZCkgcmVhZGIocmVnKTsKKwl3YWl0X2Zvcl9ob3N0X3JlYWR5KGluZm8pOworCXRlbXAgPSByZWFkYihpbmZvLT5pZGVfYWRkciArIFMzQ19BVEFfUElPX1JEQVRBKTsKKwlyZXR1cm4gdGVtcDsKK30KKworLyoKKyAqIHBhdGFfczNjX3RmX2xvYWQgLSBzZW5kIHRhc2tmaWxlIHJlZ2lzdGVycyB0byBob3N0IGNvbnRyb2xsZXIKKyAqLworc3RhdGljIHZvaWQgcGF0YV9zM2NfdGZfbG9hZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLAorCQkJCWNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKQoreworCXN0cnVjdCBhdGFfaW9wb3J0cyAqaW9hZGRyID0gJmFwLT5pb2FkZHI7CisJdW5zaWduZWQgaW50IGlzX2FkZHIgPSB0Zi0+ZmxhZ3MgJiBBVEFfVEZMQUdfSVNBRERSOworCisJaWYgKHRmLT5jdGwgIT0gYXAtPmxhc3RfY3RsKSB7CisJCWF0YV9vdXRiKGFwLT5ob3N0LCB0Zi0+Y3RsLCBpb2FkZHItPmN0bF9hZGRyKTsKKwkJYXAtPmxhc3RfY3RsID0gdGYtPmN0bDsKKwkJYXRhX3dhaXRfaWRsZShhcCk7CisJfQorCisJaWYgKGlzX2FkZHIgJiYgKHRmLT5mbGFncyAmIEFUQV9URkxBR19MQkE0OCkpIHsKKwkJYXRhX291dGIoYXAtPmhvc3QsIHRmLT5ob2JfZmVhdHVyZSwgaW9hZGRyLT5mZWF0dXJlX2FkZHIpOworCQlhdGFfb3V0YihhcC0+aG9zdCwgdGYtPmhvYl9uc2VjdCwgaW9hZGRyLT5uc2VjdF9hZGRyKTsKKwkJYXRhX291dGIoYXAtPmhvc3QsIHRmLT5ob2JfbGJhbCwgaW9hZGRyLT5sYmFsX2FkZHIpOworCQlhdGFfb3V0YihhcC0+aG9zdCwgdGYtPmhvYl9sYmFtLCBpb2FkZHItPmxiYW1fYWRkcik7CisJCWF0YV9vdXRiKGFwLT5ob3N0LCB0Zi0+aG9iX2xiYWgsIGlvYWRkci0+bGJhaF9hZGRyKTsKKwl9CisKKwlpZiAoaXNfYWRkcikgeworCQlhdGFfb3V0YihhcC0+aG9zdCwgdGYtPmZlYXR1cmUsIGlvYWRkci0+ZmVhdHVyZV9hZGRyKTsKKwkJYXRhX291dGIoYXAtPmhvc3QsIHRmLT5uc2VjdCwgaW9hZGRyLT5uc2VjdF9hZGRyKTsKKwkJYXRhX291dGIoYXAtPmhvc3QsIHRmLT5sYmFsLCBpb2FkZHItPmxiYWxfYWRkcik7CisJCWF0YV9vdXRiKGFwLT5ob3N0LCB0Zi0+bGJhbSwgaW9hZGRyLT5sYmFtX2FkZHIpOworCQlhdGFfb3V0YihhcC0+aG9zdCwgdGYtPmxiYWgsIGlvYWRkci0+bGJhaF9hZGRyKTsKKwl9CisKKwlpZiAodGYtPmZsYWdzICYgQVRBX1RGTEFHX0RFVklDRSkKKwkJYXRhX291dGIoYXAtPmhvc3QsIHRmLT5kZXZpY2UsIGlvYWRkci0+ZGV2aWNlX2FkZHIpOworCisJYXRhX3dhaXRfaWRsZShhcCk7Cit9CisKKy8qCisgKiBwYXRhX3MzY190Zl9yZWFkIC0gaW5wdXQgZGV2aWNlJ3MgQVRBIHRhc2tmaWxlIHNoYWRvdyByZWdpc3RlcnMKKyAqLworc3RhdGljIHZvaWQgcGF0YV9zM2NfdGZfcmVhZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZikKK3sKKwlzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkciA9ICZhcC0+aW9hZGRyOworCisJdGYtPmZlYXR1cmUgPSBhdGFfaW5iKGFwLT5ob3N0LCBpb2FkZHItPmVycm9yX2FkZHIpOworCXRmLT5uc2VjdCA9IGF0YV9pbmIoYXAtPmhvc3QsIGlvYWRkci0+bnNlY3RfYWRkcik7CisJdGYtPmxiYWwgPSBhdGFfaW5iKGFwLT5ob3N0LCBpb2FkZHItPmxiYWxfYWRkcik7CisJdGYtPmxiYW0gPSBhdGFfaW5iKGFwLT5ob3N0LCBpb2FkZHItPmxiYW1fYWRkcik7CisJdGYtPmxiYWggPSBhdGFfaW5iKGFwLT5ob3N0LCBpb2FkZHItPmxiYWhfYWRkcik7CisJdGYtPmRldmljZSA9IGF0YV9pbmIoYXAtPmhvc3QsIGlvYWRkci0+ZGV2aWNlX2FkZHIpOworCisJaWYgKHRmLT5mbGFncyAmIEFUQV9URkxBR19MQkE0OCkgeworCQlhdGFfb3V0YihhcC0+aG9zdCwgdGYtPmN0bCB8IEFUQV9IT0IsIGlvYWRkci0+Y3RsX2FkZHIpOworCQl0Zi0+aG9iX2ZlYXR1cmUgPSBhdGFfaW5iKGFwLT5ob3N0LCBpb2FkZHItPmVycm9yX2FkZHIpOworCQl0Zi0+aG9iX25zZWN0ID0gYXRhX2luYihhcC0+aG9zdCwgaW9hZGRyLT5uc2VjdF9hZGRyKTsKKwkJdGYtPmhvYl9sYmFsID0gYXRhX2luYihhcC0+aG9zdCwgaW9hZGRyLT5sYmFsX2FkZHIpOworCQl0Zi0+aG9iX2xiYW0gPSBhdGFfaW5iKGFwLT5ob3N0LCBpb2FkZHItPmxiYW1fYWRkcik7CisJCXRmLT5ob2JfbGJhaCA9IGF0YV9pbmIoYXAtPmhvc3QsIGlvYWRkci0+bGJhaF9hZGRyKTsKKwkJYXRhX291dGIoYXAtPmhvc3QsIHRmLT5jdGwsIGlvYWRkci0+Y3RsX2FkZHIpOworCQlhcC0+bGFzdF9jdGwgPSB0Zi0+Y3RsOworCX0KK30KKworLyoKKyAqIHBhdGFfczNjX2V4ZWNfY29tbWFuZCAtIGlzc3VlIEFUQSBjb21tYW5kIHRvIGhvc3QgY29udHJvbGxlcgorICovCitzdGF0aWMgdm9pZCBwYXRhX3MzY19leGVjX2NvbW1hbmQoc3RydWN0IGF0YV9wb3J0ICphcCwKKwkJCQljb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZikKK3sKKwlhdGFfb3V0YihhcC0+aG9zdCwgdGYtPmNvbW1hbmQsIGFwLT5pb2FkZHIuY29tbWFuZF9hZGRyKTsKKwlhdGFfc2ZmX3BhdXNlKGFwKTsKK30KKworLyoKKyAqIHBhdGFfczNjX2NoZWNrX3N0YXR1cyAtIFJlYWQgZGV2aWNlIHN0YXR1cyByZWdpc3RlcgorICovCitzdGF0aWMgdTggcGF0YV9zM2NfY2hlY2tfc3RhdHVzKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJcmV0dXJuIGF0YV9pbmIoYXAtPmhvc3QsIGFwLT5pb2FkZHIuc3RhdHVzX2FkZHIpOworfQorCisvKgorICogcGF0YV9zM2NfY2hlY2tfYWx0c3RhdHVzIC0gUmVhZCBhbHRlcm5hdGUgZGV2aWNlIHN0YXR1cyByZWdpc3RlcgorICovCitzdGF0aWMgdTggcGF0YV9zM2NfY2hlY2tfYWx0c3RhdHVzKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJcmV0dXJuIGF0YV9pbmIoYXAtPmhvc3QsIGFwLT5pb2FkZHIuYWx0c3RhdHVzX2FkZHIpOworfQorCisvKgorICogcGF0YV9zM2NfZGF0YV94ZmVyIC0gVHJhbnNmZXIgZGF0YSBieSBQSU8KKyAqLwordW5zaWduZWQgaW50IHBhdGFfczNjX2RhdGFfeGZlcihzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyICpidWYsCisJCQkJdW5zaWduZWQgaW50IGJ1ZmxlbiwgaW50IHJ3KQoreworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBkZXYtPmxpbmstPmFwOworCXN0cnVjdCBzM2NfaWRlX2luZm8gKmluZm8gPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX19pb21lbSAqZGF0YV9hZGRyID0gYXAtPmlvYWRkci5kYXRhX2FkZHI7CisJdW5zaWduZWQgaW50IHdvcmRzID0gYnVmbGVuID4+IDEsIGk7CisJdTE2ICpkYXRhX3B0ciA9ICh1MTYgKilidWY7CisKKwkvKiBSZXF1aXJlcyB3YWl0IHNhbWUgYXMgaW4gYXRhX2luYi9hdGFfb3V0YiAqLworCWlmIChydyA9PSBSRUFEKQorCQlmb3IgKGkgPSAwOyBpIDwgd29yZHM7IGkrKywgZGF0YV9wdHIrKykgeworCQkJd2FpdF9mb3JfaG9zdF9yZWFkeShpbmZvKTsKKwkJCSh2b2lkKSByZWFkdyhkYXRhX2FkZHIpOworCQkJd2FpdF9mb3JfaG9zdF9yZWFkeShpbmZvKTsKKwkJCSpkYXRhX3B0ciA9IHJlYWR3KGluZm8tPmlkZV9hZGRyCisJCQkJCSsgUzNDX0FUQV9QSU9fUkRBVEEpOworCQl9CisJZWxzZQorCQlmb3IgKGkgPSAwOyBpIDwgd29yZHM7IGkrKywgZGF0YV9wdHIrKykgeworCQkJd2FpdF9mb3JfaG9zdF9yZWFkeShpbmZvKTsKKwkJCXdyaXRldygqZGF0YV9wdHIsIGRhdGFfYWRkcik7CisJCX0KKworCWlmIChidWZsZW4gJiAweDAxKQorCQlkZXZfZXJyKGFwLT5kZXYsICJ1bmV4cGVjdGVkIHRyYWlsaW5nIGRhdGFcbiIpOworCisJcmV0dXJuIHdvcmRzIDw8IDE7Cit9CisKKy8qCisgKiBwYXRhX3MzY19kZXZfc2VsZWN0IC0gU2VsZWN0IGRldmljZSBvbiBBVEEgYnVzCisgKi8KK3N0YXRpYyB2b2lkIHBhdGFfczNjX2Rldl9zZWxlY3Qoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGRldmljZSkKK3sKKwl1OCB0bXAgPSBBVEFfREVWSUNFX09CUzsKKworCWlmIChkZXZpY2UgIT0gMCkKKwkJdG1wIHw9IEFUQV9ERVYxOworCisJYXRhX291dGIoYXAtPmhvc3QsIHRtcCwgYXAtPmlvYWRkci5kZXZpY2VfYWRkcik7CisJYXRhX3NmZl9wYXVzZShhcCk7Cit9CisKKy8qCisgKiBwYXRhX3MzY19kZXZjaGsgLSBQQVRBIGRldmljZSBwcmVzZW5jZSBkZXRlY3Rpb24KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBwYXRhX3MzY19kZXZjaGsoc3RydWN0IGF0YV9wb3J0ICphcCwKKwkJCQl1bnNpZ25lZCBpbnQgZGV2aWNlKQoreworCXN0cnVjdCBhdGFfaW9wb3J0cyAqaW9hZGRyID0gJmFwLT5pb2FkZHI7CisJdTggbnNlY3QsIGxiYWw7CisKKwlwYXRhX3MzY19kZXZfc2VsZWN0KGFwLCBkZXZpY2UpOworCisJYXRhX291dGIoYXAtPmhvc3QsIDB4NTUsIGlvYWRkci0+bnNlY3RfYWRkcik7CisJYXRhX291dGIoYXAtPmhvc3QsIDB4YWEsIGlvYWRkci0+bGJhbF9hZGRyKTsKKworCWF0YV9vdXRiKGFwLT5ob3N0LCAweGFhLCBpb2FkZHItPm5zZWN0X2FkZHIpOworCWF0YV9vdXRiKGFwLT5ob3N0LCAweDU1LCBpb2FkZHItPmxiYWxfYWRkcik7CisKKwlhdGFfb3V0YihhcC0+aG9zdCwgMHg1NSwgaW9hZGRyLT5uc2VjdF9hZGRyKTsKKwlhdGFfb3V0YihhcC0+aG9zdCwgMHhhYSwgaW9hZGRyLT5sYmFsX2FkZHIpOworCisJbnNlY3QgPSBhdGFfaW5iKGFwLT5ob3N0LCBpb2FkZHItPm5zZWN0X2FkZHIpOworCWxiYWwgPSBhdGFfaW5iKGFwLT5ob3N0LCBpb2FkZHItPmxiYWxfYWRkcik7CisKKwlpZiAoKG5zZWN0ID09IDB4NTUpICYmIChsYmFsID09IDB4YWEpKQorCQlyZXR1cm4gMTsJLyogd2UgZm91bmQgYSBkZXZpY2UgKi8KKworCXJldHVybiAwOwkJLyogbm90aGluZyBmb3VuZCAqLworfQorCisvKgorICogcGF0YV9zM2Nfd2FpdF9hZnRlcl9yZXNldCAtIHdhaXQgZm9yIGRldmljZXMgdG8gYmVjb21lIHJlYWR5IGFmdGVyIHJlc2V0CisgKi8KK3N0YXRpYyBpbnQgcGF0YV9zM2Nfd2FpdF9hZnRlcl9yZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssCisJCXVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCit7CisJaW50IHJjOworCisJbXNsZWVwKEFUQV9XQUlUX0FGVEVSX1JFU0VUKTsKKworCS8qIGFsd2F5cyBjaGVjayByZWFkaW5lc3Mgb2YgdGhlIG1hc3RlciBkZXZpY2UgKi8KKwlyYyA9IGF0YV9zZmZfd2FpdF9yZWFkeShsaW5rLCBkZWFkbGluZSk7CisJLyogLUVOT0RFViBtZWFucyB0aGUgb2RkIGNsb3duIGZvcmdvdCB0aGUgRDcgcHVsbGRvd24gcmVzaXN0b3IKKwkgKiBhbmQgVEYgc3RhdHVzIGlzIDB4ZmYsIGJhaWwgb3V0IG9uIGl0IHRvby4KKwkgKi8KKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXJldHVybiAwOworfQorCisvKgorICogcGF0YV9zM2NfYnVzX3NvZnRyZXNldCAtIFBBVEEgZGV2aWNlIHNvZnR3YXJlIHJlc2V0CisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGF0YV9zM2NfYnVzX3NvZnRyZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLAorCQl1bnNpZ25lZCBsb25nIGRlYWRsaW5lKQoreworCXN0cnVjdCBhdGFfaW9wb3J0cyAqaW9hZGRyID0gJmFwLT5pb2FkZHI7CisKKwkvKiBzb2Z0d2FyZSByZXNldC4gIGNhdXNlcyBkZXYwIHRvIGJlIHNlbGVjdGVkICovCisJYXRhX291dGIoYXAtPmhvc3QsIGFwLT5jdGwsIGlvYWRkci0+Y3RsX2FkZHIpOworCXVkZWxheSgyMCk7CisJYXRhX291dGIoYXAtPmhvc3QsIGFwLT5jdGwgfCBBVEFfU1JTVCwgaW9hZGRyLT5jdGxfYWRkcik7CisJdWRlbGF5KDIwKTsKKwlhdGFfb3V0YihhcC0+aG9zdCwgYXAtPmN0bCwgaW9hZGRyLT5jdGxfYWRkcik7CisJYXAtPmxhc3RfY3RsID0gYXAtPmN0bDsKKworCXJldHVybiBwYXRhX3MzY193YWl0X2FmdGVyX3Jlc2V0KCZhcC0+bGluaywgZGVhZGxpbmUpOworfQorCisvKgorICogcGF0YV9zM2Nfc29mdHJlc2V0IC0gcmVzZXQgaG9zdCBwb3J0IHZpYSBBVEEgU1JTVAorICovCitzdGF0aWMgaW50IHBhdGFfczNjX3NvZnRyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3NlcywKKwkJCSB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKQoreworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBsaW5rLT5hcDsKKwl1bnNpZ25lZCBpbnQgZGV2bWFzayA9IDA7CisJaW50IHJjOworCXU4IGVycjsKKworCS8qIGRldGVybWluZSBpZiBkZXZpY2UgMCBpcyBwcmVzZW50ICovCisJaWYgKHBhdGFfczNjX2RldmNoayhhcCwgMCkpCisJCWRldm1hc2sgfD0gKDEgPDwgMCk7CisKKwkvKiBzZWxlY3QgZGV2aWNlIDAgYWdhaW4gKi8KKwlwYXRhX3MzY19kZXZfc2VsZWN0KGFwLCAwKTsKKworCS8qIGlzc3VlIGJ1cyByZXNldCAqLworCXJjID0gcGF0YV9zM2NfYnVzX3NvZnRyZXNldChhcCwgZGVhZGxpbmUpOworCS8qIGlmIGxpbmsgaXMgb2NjdXBpZWQsIC1FTk9ERVYgdG9vIGlzIGFuIGVycm9yICovCisJaWYgKHJjICYmIHJjICE9IC1FTk9ERVYpIHsKKwkJYXRhX2xpbmtfcHJpbnRrKGxpbmssIEtFUk5fRVJSLCAiU1JTVCBmYWlsZWQgKGVycm5vPSVkKVxuIiwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJLyogZGV0ZXJtaW5lIGJ5IHNpZ25hdHVyZSB3aGV0aGVyIHdlIGhhdmUgQVRBIG9yIEFUQVBJIGRldmljZXMgKi8KKwljbGFzc2VzWzBdID0gYXRhX3NmZl9kZXZfY2xhc3NpZnkoJmFwLT5saW5rLmRldmljZVswXSwKKwkJCQkJICBkZXZtYXNrICYgKDEgPDwgMCksICZlcnIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBwYXRhX3MzY19zZXRfZGV2Y3RsIC0gV3JpdGUgZGV2aWNlIGNvbnRyb2wgcmVnaXN0ZXIKKyAqLworc3RhdGljIHZvaWQgcGF0YV9zM2Nfc2V0X2RldmN0bChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1OCBjdGwpCit7CisJYXRhX291dGIoYXAtPmhvc3QsIGN0bCwgYXAtPmlvYWRkci5jdGxfYWRkcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHBhdGFfczNjX3NodCA9IHsKKwlBVEFfUElPX1NIVChEUlZfTkFNRSksCit9OworCitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgcGF0YV9zM2NfcG9ydF9vcHMgPSB7CisJLmluaGVyaXRzCQk9ICZhdGFfc2ZmX3BvcnRfb3BzLAorCS5zZmZfY2hlY2tfc3RhdHVzCT0gcGF0YV9zM2NfY2hlY2tfc3RhdHVzLAorCS5zZmZfY2hlY2tfYWx0c3RhdHVzICAgID0gcGF0YV9zM2NfY2hlY2tfYWx0c3RhdHVzLAorCS5zZmZfdGZfbG9hZAkJPSBwYXRhX3MzY190Zl9sb2FkLAorCS5zZmZfdGZfcmVhZAkJPSBwYXRhX3MzY190Zl9yZWFkLAorCS5zZmZfZGF0YV94ZmVyCQk9IHBhdGFfczNjX2RhdGFfeGZlciwKKwkuc2ZmX2V4ZWNfY29tbWFuZAk9IHBhdGFfczNjX2V4ZWNfY29tbWFuZCwKKwkuc2ZmX2Rldl9zZWxlY3QgICAgICAgICA9IHBhdGFfczNjX2Rldl9zZWxlY3QsCisJLnNmZl9zZXRfZGV2Y3RsICAgICAgICAgPSBwYXRhX3MzY19zZXRfZGV2Y3RsLAorCS5zb2Z0cmVzZXQJCT0gcGF0YV9zM2Nfc29mdHJlc2V0LAorCS5zZXRfcGlvbW9kZQkJPSBwYXRhX3MzY19zZXRfcGlvbW9kZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBwYXRhX3M1cF9wb3J0X29wcyA9IHsKKwkuaW5oZXJpdHMJCT0gJmF0YV9zZmZfcG9ydF9vcHMsCisJLnNldF9waW9tb2RlCQk9IHBhdGFfczNjX3NldF9waW9tb2RlLAorfTsKKworc3RhdGljIHZvaWQgcGF0YV9zM2NfZW5hYmxlKHZvaWQgKnMzY19pZGVfcmVnYmFzZSwgYm9vbCBzdGF0ZSkKK3sKKwl1MzIgdGVtcCA9IHJlYWRsKHMzY19pZGVfcmVnYmFzZSArIFMzQ19BVEFfQ1RSTCk7CisJdGVtcCA9IHN0YXRlID8gKHRlbXAgfCAxKSA6ICh0ZW1wICYgfjEpOworCXdyaXRlbCh0ZW1wLCBzM2NfaWRlX3JlZ2Jhc2UgKyBTM0NfQVRBX0NUUkwpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgcGF0YV9zM2NfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKK3sKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBkZXZfaW5zdGFuY2U7CisJc3RydWN0IHMzY19pZGVfaW5mbyAqaW5mbyA9IGhvc3QtPnByaXZhdGVfZGF0YTsKKwl1MzIgcmVnOworCisJcmVnID0gcmVhZGwoaW5mby0+aWRlX2FkZHIgKyBTM0NfQVRBX0lSUSk7CisJd3JpdGVsKHJlZywgaW5mby0+aWRlX2FkZHIgKyBTM0NfQVRBX0lSUSk7CisKKwlyZXR1cm4gYXRhX3NmZl9pbnRlcnJ1cHQoaXJxLCBkZXZfaW5zdGFuY2UpOworfQorCitzdGF0aWMgdm9pZCBwYXRhX3MzY19od2luaXQoc3RydWN0IHMzY19pZGVfaW5mbyAqaW5mbywKKwkJCQlzdHJ1Y3QgczNjX2lkZV9wbGF0ZGF0YSAqcGRhdGEpCit7CisJc3dpdGNoIChpbmZvLT5jcHVfdHlwZSkgeworCWNhc2UgVFlQRV9TM0M2NFhYOgorCQkvKiBDb25maWd1cmUgYXMgYmlnIGVuZGlhbiAqLworCQlwYXRhX3MzY19jZmdfbW9kZShpbmZvLT5zZnJfYWRkcik7CisJCXBhdGFfczNjX3NldF9lbmRpYW4oaW5mby0+aWRlX2FkZHIsIDEpOworCQlwYXRhX3MzY19lbmFibGUoaW5mby0+aWRlX2FkZHIsIHRydWUpOworCQltc2xlZXAoMTAwKTsKKworCQkvKiBSZW1vdmUgSVJRIFN0YXR1cyAqLworCQl3cml0ZWwoMHgxZiwgaW5mby0+aWRlX2FkZHIgKyBTM0NfQVRBX0lSUSk7CisJCXdyaXRlbCgweDFiLCBpbmZvLT5pZGVfYWRkciArIFMzQ19BVEFfSVJRX01TSyk7CisJCWJyZWFrOworCisJY2FzZSBUWVBFX1M1UEMxMDA6CisJCXBhdGFfczNjX2NmZ19tb2RlKGluZm8tPnNmcl9hZGRyKTsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKworCWNhc2UgVFlQRV9TNVBWMjEwOgorCQkvKiBDb25maWd1cmUgYXMgbGl0dGxlIGVuZGlhbiAqLworCQlwYXRhX3MzY19zZXRfZW5kaWFuKGluZm8tPmlkZV9hZGRyLCAwKTsKKwkJcGF0YV9zM2NfZW5hYmxlKGluZm8tPmlkZV9hZGRyLCB0cnVlKTsKKwkJbXNsZWVwKDEwMCk7CisKKwkJLyogUmVtb3ZlIElSUSBTdGF0dXMgKi8KKwkJd3JpdGVsKDB4M2YsIGluZm8tPmlkZV9hZGRyICsgUzNDX0FUQV9JUlEpOworCQl3cml0ZWwoMHgzZiwgaW5mby0+aWRlX2FkZHIgKyBTM0NfQVRBX0lSUV9NU0spOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KK30KKworc3RhdGljIGludCBfX2luaXQgcGF0YV9zM2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgczNjX2lkZV9wbGF0ZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBzM2NfaWRlX2luZm8gKmluZm87CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IGF0YV9wb3J0ICphcDsKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3Q7CisJZW51bSBzM2NfY3B1X3R5cGUgY3B1X3R5cGU7CisJaW50IHJldDsKKworCWNwdV90eXBlID0gcGxhdGZvcm1fZ2V0X2RldmljZV9pZChwZGV2KS0+ZHJpdmVyX2RhdGE7CisKKwlpbmZvID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZGV2aWNlIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpbmZvLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAocmVzID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IG1lbSByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oZGV2LCByZXMtPnN0YXJ0LAorCQkJCXJlc291cmNlX3NpemUocmVzKSwgRFJWX05BTUUpKSB7CisJCWRldl9lcnIoZGV2LCAiZXJyb3IgcmVxdWVzdGluZyByZWdpc3RlciByZWdpb25cbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWluZm8tPmlkZV9hZGRyID0gZGV2bV9pb3JlbWFwKGRldiwgcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIWluZm8tPmlkZV9hZGRyKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIG1hcCBJTyBiYXNlIGFkZHJlc3NcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpbmZvLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJjZmNvbiIpOworCWlmIChJU19FUlIoaW5mby0+Y2xrKSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgYWNjZXNzIHRvIGNmIGNvbnRyb2xsZXIgY2xvY2tcbiIpOworCQlyZXQgPSBQVFJfRVJSKGluZm8tPmNsayk7CisJCWluZm8tPmNsayA9IE5VTEw7CisJCXJldHVybiByZXQ7CisJfQorCisJY2xrX2VuYWJsZShpbmZvLT5jbGspOworCisJLyogaW5pdCBhdGEgaG9zdCAqLworCWhvc3QgPSBhdGFfaG9zdF9hbGxvYyhkZXYsIDEpOworCWlmICghaG9zdCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBpZGUgaG9zdFxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gc3RvcF9jbGs7CisJfQorCisJYXAgPSBob3N0LT5wb3J0c1swXTsKKwlhcC0+ZmxhZ3MgfD0gQVRBX0ZMQUdfTU1JTzsKKwlhcC0+cGlvX21hc2sgPSBBVEFfUElPNDsKKworCWlmIChjcHVfdHlwZSA9PSBUWVBFX1MzQzY0WFgpIHsKKwkJYXAtPm9wcyA9ICZwYXRhX3MzY19wb3J0X29wczsKKwkJaW5mby0+c2ZyX2FkZHIgPSBpbmZvLT5pZGVfYWRkciArIDB4MTgwMDsKKwkJaW5mby0+aWRlX2FkZHIgKz0gMHgxOTAwOworCQlpbmZvLT5maWZvX3N0YXR1c19yZWcgPSAweDk0OworCX0gZWxzZSBpZiAoY3B1X3R5cGUgPT0gVFlQRV9TNVBDMTAwKSB7CisJCWFwLT5vcHMgPSAmcGF0YV9zNXBfcG9ydF9vcHM7CisJCWluZm8tPnNmcl9hZGRyID0gaW5mby0+aWRlX2FkZHIgKyAweDE4MDA7CisJCWluZm8tPmlkZV9hZGRyICs9IDB4MTkwMDsKKwkJaW5mby0+Zmlmb19zdGF0dXNfcmVnID0gMHg4NDsKKwl9IGVsc2UgeworCQlhcC0+b3BzID0gJnBhdGFfczVwX3BvcnRfb3BzOworCQlpbmZvLT5maWZvX3N0YXR1c19yZWcgPSAweDg0OworCX0KKworCWluZm8tPmNwdV90eXBlID0gY3B1X3R5cGU7CisKKwlpZiAoaW5mby0+aXJxIDw9IDApIHsKKwkJYXAtPmZsYWdzIHw9IEFUQV9GTEFHX1BJT19QT0xMSU5HOworCQlpbmZvLT5pcnEgPSAwOworCQlhdGFfcG9ydF9kZXNjKGFwLCAibm8gSVJRLCB1c2luZyBQSU8gcG9sbGluZ1xuIik7CisJfQorCisJYXAtPmlvYWRkci5jbWRfYWRkciA9ICBpbmZvLT5pZGVfYWRkciArIFMzQ19BVEFfQ01EOworCWFwLT5pb2FkZHIuZGF0YV9hZGRyID0gaW5mby0+aWRlX2FkZHIgKyBTM0NfQVRBX1BJT19EVFI7CisJYXAtPmlvYWRkci5lcnJvcl9hZGRyID0gaW5mby0+aWRlX2FkZHIgKyBTM0NfQVRBX1BJT19GRUQ7CisJYXAtPmlvYWRkci5mZWF0dXJlX2FkZHIgPSBpbmZvLT5pZGVfYWRkciArIFMzQ19BVEFfUElPX0ZFRDsKKwlhcC0+aW9hZGRyLm5zZWN0X2FkZHIgPSBpbmZvLT5pZGVfYWRkciArIFMzQ19BVEFfUElPX1NDUjsKKwlhcC0+aW9hZGRyLmxiYWxfYWRkciA9IGluZm8tPmlkZV9hZGRyICsgUzNDX0FUQV9QSU9fTExSOworCWFwLT5pb2FkZHIubGJhbV9hZGRyID0gaW5mby0+aWRlX2FkZHIgKyBTM0NfQVRBX1BJT19MTVI7CisJYXAtPmlvYWRkci5sYmFoX2FkZHIgPSBpbmZvLT5pZGVfYWRkciArIFMzQ19BVEFfUElPX0xIUjsKKwlhcC0+aW9hZGRyLmRldmljZV9hZGRyID0gaW5mby0+aWRlX2FkZHIgKyBTM0NfQVRBX1BJT19EVlI7CisJYXAtPmlvYWRkci5zdGF0dXNfYWRkciA9IGluZm8tPmlkZV9hZGRyICsgUzNDX0FUQV9QSU9fQ1NEOworCWFwLT5pb2FkZHIuY29tbWFuZF9hZGRyID0gaW5mby0+aWRlX2FkZHIgKyBTM0NfQVRBX1BJT19DU0Q7CisJYXAtPmlvYWRkci5hbHRzdGF0dXNfYWRkciA9IGluZm8tPmlkZV9hZGRyICsgUzNDX0FUQV9QSU9fREFEOworCWFwLT5pb2FkZHIuY3RsX2FkZHIgPSBpbmZvLT5pZGVfYWRkciArIFMzQ19BVEFfUElPX0RBRDsKKworCWF0YV9wb3J0X2Rlc2MoYXAsICJtbWlvIGNtZCAweCVsbHggIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5zdGFydCk7CisKKwlob3N0LT5wcml2YXRlX2RhdGEgPSBpbmZvOworCisJaWYgKHBkYXRhICYmIHBkYXRhLT5zZXR1cF9ncGlvKQorCQlwZGF0YS0+c2V0dXBfZ3BpbygpOworCisJLyogU2V0IGVuZGlhbm5lc3MgYW5kIGVuYWJsZSB0aGUgaW50ZXJmYWNlICovCisJcGF0YV9zM2NfaHdpbml0KGluZm8sIHBkYXRhKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhvc3QpOworCisJcmV0dXJuIGF0YV9ob3N0X2FjdGl2YXRlKGhvc3QsIGluZm8tPmlycSwKKwkJCWluZm8tPmlycSA/IHBhdGFfczNjX2lycSA6IE5VTEwsCisJCQkwLCAmcGF0YV9zM2Nfc2h0KTsKKworc3RvcF9jbGs6CisJY2xrX2Rpc2FibGUoaW5mby0+Y2xrKTsKKwljbGtfcHV0KGluZm8tPmNsayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2V4aXQgcGF0YV9zM2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHMzY19pZGVfaW5mbyAqaW5mbyA9IGhvc3QtPnByaXZhdGVfZGF0YTsKKworCWF0YV9ob3N0X2RldGFjaChob3N0KTsKKworCWNsa19kaXNhYmxlKGluZm8tPmNsayk7CisJY2xrX3B1dChpbmZvLT5jbGspOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgcGF0YV9zM2Nfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcmV0dXJuIGF0YV9ob3N0X3N1c3BlbmQoaG9zdCwgUE1TR19TVVNQRU5EKTsKK30KKworc3RhdGljIGludCBwYXRhX3MzY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgczNjX2lkZV9wbGF0ZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgczNjX2lkZV9pbmZvICppbmZvID0gaG9zdC0+cHJpdmF0ZV9kYXRhOworCisJcGF0YV9zM2NfaHdpbml0KGluZm8sIHBkYXRhKTsKKwlhdGFfaG9zdF9yZXN1bWUoaG9zdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHBhdGFfczNjX3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IHBhdGFfczNjX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBwYXRhX3MzY19yZXN1bWUsCit9OworI2VuZGlmCisKKy8qIGRyaXZlciBkZXZpY2UgcmVnaXN0cmF0aW9uICovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCBwYXRhX3MzY19kcml2ZXJfaWRzW10gPSB7CisJeworCQkubmFtZQkJPSAiczNjNjR4eC1wYXRhIiwKKwkJLmRyaXZlcl9kYXRhCT0gVFlQRV9TM0M2NFhYLAorCX0sIHsKKwkJLm5hbWUJCT0gInM1cGMxMDAtcGF0YSIsCisJCS5kcml2ZXJfZGF0YQk9IFRZUEVfUzVQQzEwMCwKKwl9LCB7CisJCS5uYW1lCQk9ICJzNXB2MjEwLXBhdGEiLAorCQkuZHJpdmVyX2RhdGEJPSBUWVBFX1M1UFYyMTAsCisJfSwKKwl7IH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGxhdGZvcm0sIHBhdGFfczNjX2RyaXZlcl9pZHMpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwYXRhX3MzY19kcml2ZXIgPSB7CisJLnJlbW92ZQkJPSBfX2V4aXRfcChwYXRhX3MzY19yZW1vdmUpLAorCS5pZF90YWJsZQk9IHBhdGFfczNjX2RyaXZlcl9pZHMsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gRFJWX05BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0JPSAmcGF0YV9zM2NfcG1fb3BzLAorI2VuZGlmCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBhdGFfczNjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZwYXRhX3MzY19kcml2ZXIsIHBhdGFfczNjX3Byb2JlKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHBhdGFfczNjX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGF0YV9zM2NfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocGF0YV9zM2NfaW5pdCk7Cittb2R1bGVfZXhpdChwYXRhX3MzY19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQWJoaWxhc2ggS2VzYXZhbiwgPGEua2VzYXZhbkBzYW1zdW5nLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigibG93LWxldmVsIGRyaXZlciBmb3IgU2Ftc3VuZyBQQVRBIGNvbnRyb2xsZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2NjLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NjYy5jCmluZGV4IGQ5ZGIzZjguLmZlMzY5NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2NjLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zY2MuYwpAQCAtMTY4LDggKzE2OCw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2NjX3BjaV90YmxbXSA9IHsKLQl7UENJX1ZFTkRPUl9JRF9UT1NISUJBXzIsIFBDSV9ERVZJQ0VfSURfVE9TSElCQV9TQ0NfQVRBLAotCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7IFBDSV9WREVWSUNFKFRPU0hJQkFfMiwgUENJX0RFVklDRV9JRF9UT1NISUJBX1NDQ19BVEEpLCAwfSwKIAl7IH0JLyogdGVybWluYXRlIGxpc3QgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfZHdjXzQ2MGV4LmMgYi9kcml2ZXJzL2F0YS9zYXRhX2R3Y180NjBleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMjRjMWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2F0YS9zYXRhX2R3Y180NjBleC5jCkBAIC0wLDAgKzEsMTc1NiBAQAorLyoKKyAqIGRyaXZlcnMvYXRhL3NhdGFfZHdjXzQ2MGV4LmMKKyAqCisgKiBTeW5vcHN5cyBEZXNpZ25XYXJlIENvcmVzIChEV0MpIFNBVEEgaG9zdCBkcml2ZXIKKyAqCisgKiBBdXRob3I6IE1hcmsgTWllc2ZlbGQgPG1taWVzZmVsZEBhbWNjLmNvbT4KKyAqCisgKiBQb3J0ZWQgZnJvbSAyLjYuMTkuMiB0byAyLjYuMjUvMjYgYnkgU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorICogQ29weXJpZ2h0IDIwMDggREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZworICoKKyAqIEJhc2VkIG9uIHZlcnNpb25zIHByb3ZpZGVkIGJ5IEFNQ0MgYW5kIFN5bm9wc3lzIHdoaWNoIGFyZToKKyAqICAgICAgICAgIENvcHlyaWdodCAyMDA2IEFwcGxpZWQgTWljcm8gQ2lyY3VpdHMgQ29ycG9yYXRpb24KKyAqICAgICAgICAgIENPUFlSSUdIVCAoQykgMjAwNSAgU1lOT1BTWVMsIElOQy4gIEFMTCBSSUdIVFMgUkVTRVJWRUQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZmRlZiBDT05GSUdfU0FUQV9EV0NfREVCVUcKKyNkZWZpbmUgREVCVUcKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NBVEFfRFdDX1ZERUJVRworI2RlZmluZSBWRVJCT1NFX0RFQlVHCisjZGVmaW5lIERFQlVHX05DUQorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSAibGliYXRhLmgiCisKKyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisKKyNkZWZpbmUgRFJWX05BTUUgICAgICAgICJzYXRhLWR3YyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gICAgICIxLjAiCisKKy8qIFNBVEEgRE1BIGRyaXZlciBHbG9iYWxzICovCisjZGVmaW5lIERNQV9OVU1fQ0hBTlMJCTEKKyNkZWZpbmUgRE1BX05VTV9DSEFOX1JFR1MJOAorCisvKiBTQVRBIERNQSBSZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBBSEJfRE1BX0JSU1RfREZMVAk2NAkvKiAxNiBkYXRhIGl0ZW1zIGJ1cnN0IGxlbmd0aCovCisKK3N0cnVjdCBkbWFyZWcgeworCXUzMiBsb3c7CQkvKiBMb3cgYml0cyAwLTMxICovCisJdTMyIGhpZ2g7CQkvKiBIaWdoIGJpdHMgMzItNjMgKi8KK307CisKKy8qIERNQSBQZXIgQ2hhbm5lbCByZWdpc3RlcnMgKi8KK3N0cnVjdCBkbWFfY2hhbl9yZWdzIHsKKwlzdHJ1Y3QgZG1hcmVnIHNhcjsJLyogU291cmNlIEFkZHJlc3MgKi8KKwlzdHJ1Y3QgZG1hcmVnIGRhcjsJLyogRGVzdGluYXRpb24gYWRkcmVzcyAqLworCXN0cnVjdCBkbWFyZWcgbGxwOwkvKiBMaW5rZWQgTGlzdCBQb2ludGVyICovCisJc3RydWN0IGRtYXJlZyBjdGw7CS8qIENvbnRyb2wgKi8KKwlzdHJ1Y3QgZG1hcmVnIHNzdGF0OwkvKiBTb3VyY2UgU3RhdHVzIG5vdCBpbXBsZW1lbnRlZCBpbiBjb3JlICovCisJc3RydWN0IGRtYXJlZyBkc3RhdDsJLyogRGVzdGluYXRpb24gU3RhdHVzIG5vdCBpbXBsZW1lbnRlZCBpbiBjb3JlKi8KKwlzdHJ1Y3QgZG1hcmVnIHNzdGF0YXI7CS8qIFNvdXJjZSBTdGF0dXMgQWRkcmVzcyBub3QgaW1wbCBpbiBjb3JlICovCisJc3RydWN0IGRtYXJlZyBkc3RhdGFyOwkvKiBEZXN0aW5hdGlvbiBTdGF0dXMgQWRkcmVzcyBub3QgaW1wbGVtZW50ZSAqLworCXN0cnVjdCBkbWFyZWcgY2ZnOwkvKiBDb25maWcgKi8KKwlzdHJ1Y3QgZG1hcmVnIHNncjsJLyogU291cmNlIEdhdGhlciAqLworCXN0cnVjdCBkbWFyZWcgZHNyOwkvKiBEZXN0aW5hdGlvbiBTY2F0dGVyICovCit9OworCisvKiBHZW5lcmljIEludGVycnVwdCBSZWdpc3RlcnMgKi8KK3N0cnVjdCBkbWFfaW50ZXJydXB0X3JlZ3MgeworCXN0cnVjdCBkbWFyZWcgdGZyOwkvKiBUcmFuc2ZlciBJbnRlcnJ1cHQgKi8KKwlzdHJ1Y3QgZG1hcmVnIGJsb2NrOwkvKiBCbG9jayBJbnRlcnJ1cHQgKi8KKwlzdHJ1Y3QgZG1hcmVnIHNyY3RyYW47CS8qIFNvdXJjZSBUcmFuc2ZlciBJbnRlcnJ1cHQgKi8KKwlzdHJ1Y3QgZG1hcmVnIGRzdHRyYW47CS8qIERlc3QgVHJhbnNmZXIgSW50ZXJydXB0ICovCisJc3RydWN0IGRtYXJlZyBlcnJvcjsJLyogRXJyb3IgKi8KK307CisKK3N0cnVjdCBhaGJfZG1hX3JlZ3MgeworCXN0cnVjdCBkbWFfY2hhbl9yZWdzCWNoYW5fcmVnc1tETUFfTlVNX0NIQU5fUkVHU107CisJc3RydWN0IGRtYV9pbnRlcnJ1cHRfcmVncyBpbnRlcnJ1cHRfcmF3OwkvKiBSYXcgSW50ZXJydXB0ICovCisJc3RydWN0IGRtYV9pbnRlcnJ1cHRfcmVncyBpbnRlcnJ1cHRfc3RhdHVzOwkvKiBJbnRlcnJ1cHQgU3RhdHVzICovCisJc3RydWN0IGRtYV9pbnRlcnJ1cHRfcmVncyBpbnRlcnJ1cHRfbWFzazsJLyogSW50ZXJydXB0IE1hc2sgKi8KKwlzdHJ1Y3QgZG1hX2ludGVycnVwdF9yZWdzIGludGVycnVwdF9jbGVhcjsJLyogSW50ZXJydXB0IENsZWFyICovCisJc3RydWN0IGRtYXJlZwkJc3RhdHVzSW50OwkvKiBJbnRlcnJ1cHQgY29tYmluZWQqLworCXN0cnVjdCBkbWFyZWcJCXJxX3NyY3JlZzsJLyogU3JjIFRyYW5zIFJlcSAqLworCXN0cnVjdCBkbWFyZWcJCXJxX2RzdHJlZzsJLyogRHN0IFRyYW5zIFJlcSAqLworCXN0cnVjdCBkbWFyZWcJCXJxX3NnbF9zcmNyZWc7CS8qIFNuZ2wgU3JjIFRyYW5zIFJlcSovCisJc3RydWN0IGRtYXJlZwkJcnFfc2dsX2RzdHJlZzsJLyogU25nbCBEc3QgVHJhbnMgUmVxKi8KKwlzdHJ1Y3QgZG1hcmVnCQlycV9sc3Rfc3JjcmVnOwkvKiBMYXN0IFNyYyBUcmFucyBSZXEqLworCXN0cnVjdCBkbWFyZWcJCXJxX2xzdF9kc3RyZWc7CS8qIExhc3QgRHN0IFRyYW5zIFJlcSovCisJc3RydWN0IGRtYXJlZwkJZG1hX2NmZzsJCS8qIERNQSBDb25maWcgKi8KKwlzdHJ1Y3QgZG1hcmVnCQlkbWFfY2hhbl9lbjsJCS8qIERNQSBDaGFubmVsIEVuYWJsZSovCisJc3RydWN0IGRtYXJlZwkJZG1hX2lkOwkJCS8qIERNQSBJRCAqLworCXN0cnVjdCBkbWFyZWcJCWRtYV90ZXN0OwkJLyogRE1BIFRlc3QgKi8KKwlzdHJ1Y3QgZG1hcmVnCQlyZXMxOwkJCS8qIHJlc2VydmVkICovCisJc3RydWN0IGRtYXJlZwkJcmVzMjsJCQkvKiByZXNlcnZlZCAqLworCS8qCisJICogRE1BIENvbXAgUGFyYW1zCisJICogUGFyYW0gNiA9IGRtYV9wYXJhbVswXSwgUGFyYW0gNSA9IGRtYV9wYXJhbVsxXSwKKwkgKiBQYXJhbSA0ID0gZG1hX3BhcmFtWzJdIC4uLgorCSAqLworCXN0cnVjdCBkbWFyZWcJCWRtYV9wYXJhbXNbNl07Cit9OworCisvKiBEYXRhIHN0cnVjdHVyZSBmb3IgbGlua2VkIGxpc3QgaXRlbSAqLworc3RydWN0IGxsaSB7CisJdTMyCQlzYXI7CQkvKiBTb3VyY2UgQWRkcmVzcyAqLworCXUzMgkJZGFyOwkJLyogRGVzdGluYXRpb24gYWRkcmVzcyAqLworCXUzMgkJbGxwOwkJLyogTGlua2VkIExpc3QgUG9pbnRlciAqLworCXN0cnVjdCBkbWFyZWcJY3RsOwkJLyogQ29udHJvbCAqLworCXN0cnVjdCBkbWFyZWcJZHN0YXQ7CQkvKiBEZXN0aW5hdGlvbiBTdGF0dXMgKi8KK307CisKK2VudW0geworCVNBVEFfRFdDX0RNQUNfTExJX1NaID0JKHNpemVvZihzdHJ1Y3QgbGxpKSksCisJU0FUQV9EV0NfRE1BQ19MTElfTlVNID0JMjU2LAorCVNBVEFfRFdDX0RNQUNfTExJX1RCTF9TWiA9IChTQVRBX0RXQ19ETUFDX0xMSV9TWiAqIFwKKwkJCQkJU0FUQV9EV0NfRE1BQ19MTElfTlVNKSwKKwlTQVRBX0RXQ19ETUFDX1RXSURUSF9CWVRFUyA9IDQsCisJU0FUQV9EV0NfRE1BQ19DVFJMX1RTSVpFX01BWCA9ICgweDAwMDAwODAwICogXAorCQkJCQkJU0FUQV9EV0NfRE1BQ19UV0lEVEhfQllURVMpLAorfTsKKworLyogRE1BIFJlZ2lzdGVyIE9wZXJhdGlvbiBCaXRzICovCitlbnVtIHsKKwlETUFfRU4JPQkJMHgwMDAwMDAwMSwgLyogRW5hYmxlIEFIQiBETUEgKi8KKwlETUFfQ1RMX0xMUF9TUkNFTiA9CTB4MTAwMDAwMDAsIC8qIEJsayBjaGFpbiBlbmFibGUgU3JjICovCisJRE1BX0NUTF9MTFBfRFNURU4gPQkweDA4MDAwMDAwLCAvKiBCbGsgY2hhaW4gZW5hYmxlIERzdCAqLworfTsKKworI2RlZmluZQlETUFfQ1RMX0JMS19UUyhzaXplKQkoKHNpemUpICYgMHgwMDAwMDBGRkYpCS8qIEJsayBUcmFuc2ZlciBzaXplICovCisjZGVmaW5lIERNQV9DSEFOTkVMKGNoKQkJKDB4MDAwMDAwMDEgPDwgKGNoKSkJLyogU2VsZWN0IGNoYW5uZWwgKi8KKwkvKiBFbmFibGUgY2hhbm5lbCAqLworI2RlZmluZQlETUFfRU5BQkxFX0NIQU4oY2gpCSgoMHgwMDAwMDAwMSA8PCAoY2gpKSB8CQkJXAorCQkJCSAoKDB4MDAwMDAwMDAxIDw8IChjaCkpIDw8IDgpKQorCS8qIERpc2FibGUgY2hhbm5lbCAqLworI2RlZmluZQlETUFfRElTQUJMRV9DSEFOKGNoKQkoMHgwMDAwMDAwMCB8ICgoMHgwMDAwMDAwMDEgPDwgKGNoKSkgPDwgOCkpCisJLyogVHJhbnNmZXIgVHlwZSAmIEZsb3cgQ29udHJvbGxlciAqLworI2RlZmluZQlETUFfQ1RMX1RURkModHlwZSkJKCgodHlwZSkgJiAweDcpIDw8IDIwKQorI2RlZmluZQlETUFfQ1RMX1NNUyhudW0pCSgoKG51bSkgJiAweDMpIDw8IDI1KSAvKiBTcmMgTWFzdGVyIFNlbGVjdCAqLworI2RlZmluZQlETUFfQ1RMX0RNUyhudW0pCSgoKG51bSkgJiAweDMpIDw8IDIzKS8qIERzdCBNYXN0ZXIgU2VsZWN0ICovCisJLyogU3JjIEJ1cnN0IFRyYW5zYWN0aW9uIExlbmd0aCAqLworI2RlZmluZSBETUFfQ1RMX1NSQ19NU0laRShzaXplKSAoKChzaXplKSAmIDB4NykgPDwgMTQpCisJLyogRHN0IEJ1cnN0IFRyYW5zYWN0aW9uIExlbmd0aCAqLworI2RlZmluZQlETUFfQ1RMX0RTVF9NU0laRShzaXplKSAoKChzaXplKSAmIDB4NykgPDwgMTEpCisJLyogU291cmNlIFRyYW5zZmVyIFdpZHRoICovCisjZGVmaW5lCURNQV9DVExfU1JDX1RSV0lEKHNpemUpICgoKHNpemUpICYgMHg3KSA8PCA0KQorCS8qIERlc3RpbmF0aW9uIFRyYW5zZmVyIFdpZHRoICovCisjZGVmaW5lCURNQV9DVExfRFNUX1RSV0lEKHNpemUpICgoKHNpemUpICYgMHg3KSA8PCAxKQorCisvKiBBc3NpZ24gSFcgaGFuZHNoYWtpbmcgaW50ZXJmYWNlICh4KSB0byBkZXN0aW5hdGlvbiAvIHNvdXJjZSBwZXJpcGhlcmFsICovCisjZGVmaW5lCURNQV9DRkdfSFdfSFNfREVTVChpbnRfbnVtKSAoKChpbnRfbnVtKSAmIDB4RikgPDwgMTEpCisjZGVmaW5lCURNQV9DRkdfSFdfSFNfU1JDKGludF9udW0pICgoKGludF9udW0pICYgMHhGKSA8PCA3KQorI2RlZmluZQlETUFfTExQX0xNUyhhZGRyLCBtYXN0ZXIpICgoKGFkZHIpICYgMHhmZmZmZmZmYykgfCAobWFzdGVyKSkKKworLyoKKyAqIFRoaXMgZGVmaW5lIGlzIHVzZWQgdG8gc2V0IGJsb2NrIGNoYWluaW5nIGRpc2FibGVkIGluIHRoZSBjb250cm9sIGxvdworICogcmVnaXN0ZXIuICBJdCBpcyBhbHJlYWR5IGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IHNvIGl0IGNhbiBiZSAmJ2QgZGlyY3RseS4KKyAqIEl0IGlzIGVzc2VudGlhbGx5OiBjcHVfdG9fbGUzMih+KERNQV9DVExfTExQX1NSQ0VOIHwgRE1BX0NUTF9MTFBfRFNURU4pKQorICovCitlbnVtIHsKKwlETUFfQ1RMX0xMUF9ESVNBQkxFX0xFMzIgPSAweGZmZmZmZmU3LAorCURNQV9DVExfVFRGQ19QMk1fRE1BQyA9CTB4MDAwMDAwMDIsIC8qIFBlciB0byBtZW0sIERNQUMgY250ciAqLworCURNQV9DVExfVFRGQ19NMlBfUEVSID0JMHgwMDAwMDAwMywgLyogTWVtIHRvIHBlciwgcGVyaXBoZXJhbCBjbnRyICovCisJRE1BX0NUTF9TSU5DX0lOQyA9CTB4MDAwMDAwMDAsIC8qIFNvdXJjZSBBZGRyZXNzIEluY3JlbWVudCAqLworCURNQV9DVExfU0lOQ19ERUMgPQkweDAwMDAwMjAwLAorCURNQV9DVExfU0lOQ19OT0NIQU5HRSA9CTB4MDAwMDA0MDAsCisJRE1BX0NUTF9ESU5DX0lOQyA9CTB4MDAwMDAwMDAsIC8qIERlc3RpbmF0aW9uIEFkZHJlc3MgSW5jcmVtZW50ICovCisJRE1BX0NUTF9ESU5DX0RFQyA9CTB4MDAwMDAwODAsCisJRE1BX0NUTF9ESU5DX05PQ0hBTkdFID0JMHgwMDAwMDEwMCwKKwlETUFfQ1RMX0lOVF9FTiA9CTB4MDAwMDAwMDEsIC8qIEludGVycnVwdCBFbmFibGUgKi8KKworLyogQ2hhbm5lbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIGhpZ2ggYml0cyAqLworCURNQV9DRkdfRkNNT0RfUkVRID0JMHgwMDAwMDAwMSwgLyogRmxvdyBDb250cm9sIC0gcmVxdWVzdCBiYXNlZCAqLworCURNQV9DRkdfUFJPVENUTAk9CSgweDAwMDAwMDAzIDw8IDIpLC8qIFByb3RlY3Rpb24gQ29udHJvbCAqLworCisvKiBDaGFubmVsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgbG93IGJpdHMgKi8KKwlETUFfQ0ZHX1JFTERfRFNUID0JMHg4MDAwMDAwMCwgLyogUmVsb2FkIERlc3QgLyBTcmMgQWRkciAqLworCURNQV9DRkdfUkVMRF9TUkMgPQkweDQwMDAwMDAwLAorCURNQV9DRkdfSFNfU0VMU1JDID0JMHgwMDAwMDgwMCwgLyogU29mdHdhcmUgaGFuZHNoYWtlIFNyYy8gRGVzdCAqLworCURNQV9DRkdfSFNfU0VMRFNUID0JMHgwMDAwMDQwMCwKKwlETUFfQ0ZHX0ZJRk9FTVBUWSA9ICAgICAoMHgwMDAwMDAwMSA8PCA5KSwgLyogRklGTyBFbXB0eSBiaXQgKi8KKworLyogQ2hhbm5lbCBMaW5rZWQgTGlzdCBQb2ludGVyIFJlZ2lzdGVyICovCisJRE1BX0xMUF9BSEJNQVNURVIxID0JMCwJLyogTGlzdCBNYXN0ZXIgU2VsZWN0ICovCisJRE1BX0xMUF9BSEJNQVNURVIyID0JMSwKKworCVNBVEFfRFdDX01BWF9QT1JUUyA9IDEsCisKKwlTQVRBX0RXQ19TQ1JfT0ZGU0VUID0gMHgyNCwKKwlTQVRBX0RXQ19SRUdfT0ZGU0VUID0gMHg2NCwKK307CisKKy8qIERXQyBTQVRBIFJlZ2lzdGVycyAqLworc3RydWN0IHNhdGFfZHdjX3JlZ3MgeworCXUzMiBmcHRhZ3I7CQkvKiAxc3QgcGFydHkgRE1BIHRhZyAqLworCXUzMiBmcGJvcjsJCS8qIDFzdCBwYXJ0eSBETUEgYnVmZmVyIG9mZnNldCAqLworCXUzMiBmcHRjcjsJCS8qIDFzdCBwYXJ0eSBETUEgWGZyIGNvdW50ICovCisJdTMyIGRtYWNyOwkJLyogRE1BIENvbnRyb2wgKi8KKwl1MzIgZGJ0c3I7CQkvKiBETUEgQnVyc3QgVHJhbnNhYyBzaXplICovCisJdTMyIGludHByOwkJLyogSW50ZXJydXB0IFBlbmRpbmcgKi8KKwl1MzIgaW50bXI7CQkvKiBJbnRlcnJ1cHQgTWFzayAqLworCXUzMiBlcnJtcjsJCS8qIEVycm9yIE1hc2sgKi8KKwl1MzIgbGxjcjsJCS8qIExpbmsgTGF5ZXIgQ29udHJvbCAqLworCXUzMiBwaHljcjsJCS8qIFBIWSBDb250cm9sICovCisJdTMyIHBoeXNyOwkJLyogUEhZIFN0YXR1cyAqLworCXUzMiByeGJpc3RwZDsJCS8qIFJlY3ZkIEJJU1QgcGF0dGVybiBkZWYgcmVnaXN0ZXIgKi8KKwl1MzIgcnhiaXN0cGQxOwkJLyogUmVjdmQgQklTVCBkYXRhIGR3b3JkMSAqLworCXUzMiByeGJpc3RwZDI7CQkvKiBSZWN2ZCBCSVNUIHBhdHRlcm4gZGF0YSBkd29yZDIgKi8KKwl1MzIgdHhiaXN0cGQ7CQkvKiBUcmFucyBCSVNUIHBhdHRlcm4gZGVmIHJlZ2lzdGVyICovCisJdTMyIHR4YmlzdHBkMTsJCS8qIFRyYW5zIEJJU1QgZGF0YSBkd29yZDEgKi8KKwl1MzIgdHhiaXN0cGQyOwkJLyogVHJhbnMgQklTVCBkYXRhIGR3b3JkMiAqLworCXUzMiBiaXN0Y3I7CQkvKiBCSVNUIENvbnRyb2wgUmVnaXN0ZXIgKi8KKwl1MzIgYmlzdGZjdHI7CQkvKiBCSVNUIEZJUyBDb3VudCBSZWdpc3RlciAqLworCXUzMiBiaXN0c3I7CQkvKiBCSVNUIFN0YXR1cyBSZWdpc3RlciAqLworCXUzMiBiaXN0ZGVjcjsJCS8qIEJJU1QgRHdvcmQgRXJyb3IgY291bnQgcmVnaXN0ZXIgKi8KKwl1MzIgcmVzWzE1XTsJCS8qIFJlc2VydmVkIGxvY2F0aW9ucyAqLworCXUzMiB0ZXN0cjsJCS8qIFRlc3QgUmVnaXN0ZXIgKi8KKwl1MzIgdmVyc2lvbnI7CQkvKiBWZXJzaW9uIFJlZ2lzdGVyICovCisJdTMyIGlkcjsJCS8qIElEIFJlZ2lzdGVyICovCisJdTMyIHVuaW1wbFsxOTJdOwkvKiBVbmltcGxlbWVudGVkICovCisJdTMyIGRtYWRyWzI1Nl07CS8qIEZJRk8gTG9jYXRpb25zIGluIERNQSBNb2RlICovCit9OworCitlbnVtIHsKKwlTQ1JfU0NPTlRST0xfREVUX0VOQUJMRQk9CTB4MDAwMDAwMDEsCisJU0NSX1NTVEFUVVNfREVUX1BSRVNFTlQJPQkweDAwMDAwMDAxLAorCVNDUl9TRVJST1JfRElBR19YCT0JMHgwNDAwMDAwMCwKKy8qIERXQyBTQVRBIFJlZ2lzdGVyIE9wZXJhdGlvbnMgKi8KKwlTQVRBX0RXQ19UWEZJRk9fREVQVEgJPQkweDAxRkYsCisJU0FUQV9EV0NfUlhGSUZPX0RFUFRICT0JMHgwMUZGLAorCVNBVEFfRFdDX0RNQUNSX1RNT0RfVFhDSEVOID0JMHgwMDAwMDAwNCwKKwlTQVRBX0RXQ19ETUFDUl9UWENIRU4JPSAoMHgwMDAwMDAwMSB8IFNBVEFfRFdDX0RNQUNSX1RNT0RfVFhDSEVOKSwKKwlTQVRBX0RXQ19ETUFDUl9SWENIRU4JPSAoMHgwMDAwMDAwMiB8IFNBVEFfRFdDX0RNQUNSX1RNT0RfVFhDSEVOKSwKKwlTQVRBX0RXQ19ETUFDUl9UWFJYQ0hfQ0xFQVIgPQlTQVRBX0RXQ19ETUFDUl9UTU9EX1RYQ0hFTiwKKwlTQVRBX0RXQ19JTlRQUl9ETUFUCT0JMHgwMDAwMDAwMSwKKwlTQVRBX0RXQ19JTlRQUl9ORVdGUAk9CTB4MDAwMDAwMDIsCisJU0FUQV9EV0NfSU5UUFJfUE1BQlJUCT0JMHgwMDAwMDAwNCwKKwlTQVRBX0RXQ19JTlRQUl9FUlIJPQkweDAwMDAwMDA4LAorCVNBVEFfRFdDX0lOVFBSX05FV0JJU1QJPQkweDAwMDAwMDEwLAorCVNBVEFfRFdDX0lOVFBSX0lQRgk9CTB4MTAwMDAwMDAsCisJU0FUQV9EV0NfSU5UTVJfRE1BVE0JPQkweDAwMDAwMDAxLAorCVNBVEFfRFdDX0lOVE1SX05FV0ZQTQk9CTB4MDAwMDAwMDIsCisJU0FUQV9EV0NfSU5UTVJfUE1BQlJUTQk9CTB4MDAwMDAwMDQsCisJU0FUQV9EV0NfSU5UTVJfRVJSTQk9CTB4MDAwMDAwMDgsCisJU0FUQV9EV0NfSU5UTVJfTkVXQklTVE0JPQkweDAwMDAwMDEwLAorCVNBVEFfRFdDX0xMQ1JfU0NSQU1FTgk9CTB4MDAwMDAwMDEsCisJU0FUQV9EV0NfTExDUl9ERVNDUkFNRU4JPQkweDAwMDAwMDAyLAorCVNBVEFfRFdDX0xMQ1JfUlBERU4JPQkweDAwMDAwMDA0LAorLyogVGhpcyBpcyBhbGwgZXJyb3IgYml0cywgemVybydzIGFyZSByZXNlcnZlZCBmaWVsZHMuICovCisJU0FUQV9EV0NfU0VSUk9SX0VSUl9CSVRTID0JMHgwRkZGMEYwMworfTsKKworI2RlZmluZSBTQVRBX0RXQ19TQ1IwX1NQRF9HRVQodikJKCgodikgPj4gNCkgJiAweDAwMDAwMDBGKQorI2RlZmluZSBTQVRBX0RXQ19ETUFDUl9UWF9DTEVBUih2KQkoKCh2KSAmIH5TQVRBX0RXQ19ETUFDUl9UWENIRU4pIHxcCisJCQkJCQkgU0FUQV9EV0NfRE1BQ1JfVE1PRF9UWENIRU4pCisjZGVmaW5lIFNBVEFfRFdDX0RNQUNSX1JYX0NMRUFSKHYpCSgoKHYpICYgflNBVEFfRFdDX0RNQUNSX1JYQ0hFTikgfFwKKwkJCQkJCSBTQVRBX0RXQ19ETUFDUl9UTU9EX1RYQ0hFTikKKyNkZWZpbmUgU0FUQV9EV0NfREJUU1JfTVdSKHNpemUpCSgoKHNpemUpLzQpICYgU0FUQV9EV0NfVFhGSUZPX0RFUFRIKQorI2RlZmluZSBTQVRBX0RXQ19EQlRTUl9NUkQoc2l6ZSkJKCgoKHNpemUpLzQpICYgU0FUQV9EV0NfUlhGSUZPX0RFUFRIKVwKKwkJCQkJCSA8PCAxNikKK3N0cnVjdCBzYXRhX2R3Y19kZXZpY2UgeworCXN0cnVjdCBkZXZpY2UJCSpkZXY7CQkvKiBnZW5lcmljIGRldmljZSBzdHJ1Y3QgKi8KKwlzdHJ1Y3QgYXRhX3Byb2JlX2VudAkqcGU7CQkvKiBwdHIgdG8gcHJvYmUtZW50ICovCisJc3RydWN0IGF0YV9ob3N0CQkqaG9zdDsKKwl1OAkJCSpyZWdfYmFzZTsKKwlzdHJ1Y3Qgc2F0YV9kd2NfcmVncwkqc2F0YV9kd2NfcmVnczsJLyogRFcgU3lub3BzeXMgU0FUQSBzcGVjaWZpYyAqLworCWludAkJCWlycV9kbWE7Cit9OworCisjZGVmaW5lIFNBVEFfRFdDX1FDTURfTUFYCTMyCisKK3N0cnVjdCBzYXRhX2R3Y19kZXZpY2VfcG9ydCB7CisJc3RydWN0IHNhdGFfZHdjX2RldmljZQkqaHNkZXY7CisJaW50CQkJY21kX2lzc3VlZFtTQVRBX0RXQ19RQ01EX01BWF07CisJc3RydWN0IGxsaQkJKmxsaXRbU0FUQV9EV0NfUUNNRF9NQVhdOyAgLyogRE1BIExMSSB0YWJsZSAqLworCWRtYV9hZGRyX3QJCWxsaXRfZG1hW1NBVEFfRFdDX1FDTURfTUFYXTsKKwl1MzIJCQlkbWFfY2hhbltTQVRBX0RXQ19RQ01EX01BWF07CisJaW50CQkJZG1hX3BlbmRpbmdbU0FUQV9EV0NfUUNNRF9NQVhdOworfTsKKworLyoKKyAqIENvbW1vbmx5IHVzZWQgRFdDIFNBVEEgZHJpdmVyIE1hY3JvcworICovCisjZGVmaW5lIEhTREVWX0ZST01fSE9TVChob3N0KSAgKChzdHJ1Y3Qgc2F0YV9kd2NfZGV2aWNlICopXAorCQkJCQkoaG9zdCktPnByaXZhdGVfZGF0YSkKKyNkZWZpbmUgSFNERVZfRlJPTV9BUChhcCkgICgoc3RydWN0IHNhdGFfZHdjX2RldmljZSAqKVwKKwkJCQkJKGFwKS0+aG9zdC0+cHJpdmF0ZV9kYXRhKQorI2RlZmluZSBIU0RFVlBfRlJPTV9BUChhcCkgICAoKHN0cnVjdCBzYXRhX2R3Y19kZXZpY2VfcG9ydCAqKVwKKwkJCQkJKGFwKS0+cHJpdmF0ZV9kYXRhKQorI2RlZmluZSBIU0RFVl9GUk9NX1FDKHFjKQkoKHN0cnVjdCBzYXRhX2R3Y19kZXZpY2UgKilcCisJCQkJCShxYyktPmFwLT5ob3N0LT5wcml2YXRlX2RhdGEpCisjZGVmaW5lIEhTREVWX0ZST01fSFNERVZQKHApCSgoc3RydWN0IHNhdGFfZHdjX2RldmljZSAqKVwKKwkJCQkJCShoc2RldnApLT5oc2RldikKKworZW51bSB7CisJU0FUQV9EV0NfQ01EX0lTU1VFRF9OT1QJCT0gMCwKKwlTQVRBX0RXQ19DTURfSVNTVUVEX1BFTkQJPSAxLAorCVNBVEFfRFdDX0NNRF9JU1NVRURfRVhFQwk9IDIsCisJU0FUQV9EV0NfQ01EX0lTU1VFRF9OT0RBVEEJPSAzLAorCisJU0FUQV9EV0NfRE1BX1BFTkRJTkdfTk9ORQk9IDAsCisJU0FUQV9EV0NfRE1BX1BFTkRJTkdfVFgJCT0gMSwKKwlTQVRBX0RXQ19ETUFfUEVORElOR19SWAkJPSAyLAorfTsKKworc3RydWN0IHNhdGFfZHdjX2hvc3RfcHJpdiB7CisJdm9pZAlfX2lvbWVtCSAqc2NyX2FkZHJfc3N0YXR1czsKKwl1MzIJc2F0YV9kd2Nfc2FjdGl2ZV9pc3N1ZWQgOworCXUzMglzYXRhX2R3Y19zYWN0aXZlX3F1ZXVlZCA7CisJdTMyCWRtYV9pbnRlcnJ1cHRfY291bnQ7CisJc3RydWN0CWFoYl9kbWFfcmVncwkqc2F0YV9kbWFfcmVnczsKKwlzdHJ1Y3QJZGV2aWNlCSpkd2NfZGV2OworfTsKK3N0cnVjdCBzYXRhX2R3Y19ob3N0X3ByaXYgaG9zdF9wdnQ7CisvKgorICogUHJvdG90eXBlcworICovCitzdGF0aWMgdm9pZCBzYXRhX2R3Y19ibWRtYV9zdGFydF9ieV90YWcoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYywgdTggdGFnKTsKK3N0YXRpYyBpbnQgc2F0YV9kd2NfcWNfY29tcGxldGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYywKKwkJCQl1MzIgY2hlY2tfc3RhdHVzKTsKK3N0YXRpYyB2b2lkIHNhdGFfZHdjX2RtYV94ZmVyX2NvbXBsZXRlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHUzMiBjaGVja19zdGF0dXMpOworc3RhdGljIHZvaWQgc2F0YV9kd2NfcG9ydF9zdG9wKHN0cnVjdCBhdGFfcG9ydCAqYXApOworc3RhdGljIHZvaWQgc2F0YV9kd2NfY2xlYXJfZG1hY3Ioc3RydWN0IHNhdGFfZHdjX2RldmljZV9wb3J0ICpoc2RldnAsIHU4IHRhZyk7CitzdGF0aWMgaW50IGRtYV9kd2NfaW5pdChzdHJ1Y3Qgc2F0YV9kd2NfZGV2aWNlICpoc2RldiwgaW50IGlycSk7CitzdGF0aWMgdm9pZCBkbWFfZHdjX2V4aXQoc3RydWN0IHNhdGFfZHdjX2RldmljZSAqaHNkZXYpOworc3RhdGljIGludCBkbWFfZHdjX3hmZXJfc2V0dXAoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG51bV9lbGVtcywKKwkJCSAgICAgIHN0cnVjdCBsbGkgKmxsaSwgZG1hX2FkZHJfdCBkbWFfbGxpLAorCQkJICAgICAgdm9pZCBfX2lvbWVtICphZGRyLCBpbnQgZGlyKTsKK3N0YXRpYyB2b2lkIGRtYV9kd2NfeGZlcl9zdGFydChpbnQgZG1hX2NoKTsKKworc3RhdGljIHZvaWQgc2F0YV9kd2NfdGZfZHVtcChzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZikKK3sKKwlkZXZfdmRiZyhob3N0X3B2dC5kd2NfZGV2LCAidGFza2ZpbGUgY21kOiAweCUwMnggcHJvdG9jb2w6ICVzIGZsYWdzOiIKKwkJIjB4JWx4IGRldmljZTogJXhcbiIsIHRmLT5jb21tYW5kLCBhdGFfZ2V0X2NtZF9kZXNjcmlwdFwKKwkJKHRmLT5wcm90b2NvbCksIHRmLT5mbGFncywgdGYtPmRldmljZSk7CisJZGV2X3ZkYmcoaG9zdF9wdnQuZHdjX2RldiwgImZlYXR1cmU6IDB4JTAyeCBuc2VjdDogMHgleCBsYmFsOiAweCV4ICIKKwkJImxiYW06IDB4JXggbGJhaDogMHgleFxuIiwgdGYtPmZlYXR1cmUsIHRmLT5uc2VjdCwgdGYtPmxiYWwsCisJCSB0Zi0+bGJhbSwgdGYtPmxiYWgpOworCWRldl92ZGJnKGhvc3RfcHZ0LmR3Y19kZXYsICJob2JfZmVhdHVyZTogMHglMDJ4IGhvYl9uc2VjdDogMHgleCAiCisJCSJob2JfbGJhbDogMHgleCBob2JfbGJhbTogMHgleCBob2JfbGJhaDogMHgleFxuIiwKKwkJdGYtPmhvYl9mZWF0dXJlLCB0Zi0+aG9iX25zZWN0LCB0Zi0+aG9iX2xiYWwsIHRmLT5ob2JfbGJhbSwKKwkJdGYtPmhvYl9sYmFoKTsKK30KKworLyoKKyAqIEZ1bmN0aW9uOiBnZXRfYnVyc3RfbGVuZ3RoX2VuY29kZQorICogYXJndW1lbnRzOiBkYXRhbGVuZ3RoOiBsZW5ndGggaW4gYnl0ZXMgb2YgZGF0YQorICogcmV0dXJucyB2YWx1ZSB0byBiZSBwcm9ncmFtbWVkIGluIHJlZ2lzdGVyIGNvcnJyZXNwb25kaW5nIHRvIGRhdGEgbGVuZ3RoCisgKiBUaGlzIHZhbHVlIGlzIGVmZmVjdGl2ZWx5IHRoZSBsb2coYmFzZSAyKSBvZiB0aGUgbGVuZ3RoCisgKi8KK3N0YXRpYyAgaW50IGdldF9idXJzdF9sZW5ndGhfZW5jb2RlKGludCBkYXRhbGVuZ3RoKQoreworCWludCBpdGVtcyA9IGRhdGFsZW5ndGggPj4gMjsJLyogZGl2IGJ5IDQgdG8gZ2V0IGx3b3JkIGNvdW50ICovCisKKwlpZiAoaXRlbXMgPj0gNjQpCisJCXJldHVybiA1OworCisJaWYgKGl0ZW1zID49IDMyKQorCQlyZXR1cm4gNDsKKworCWlmIChpdGVtcyA+PSAxNikKKwkJcmV0dXJuIDM7CisKKwlpZiAoaXRlbXMgPj0gOCkKKwkJcmV0dXJuIDI7CisKKwlpZiAoaXRlbXMgPj0gNCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljICB2b2lkIGNsZWFyX2NoYW5faW50ZXJydXB0cyhpbnQgYykKK3sKKwlvdXRfbGUzMigmKGhvc3RfcHZ0LnNhdGFfZG1hX3JlZ3MtPmludGVycnVwdF9jbGVhci50ZnIubG93KSwKKwkJIERNQV9DSEFOTkVMKGMpKTsKKwlvdXRfbGUzMigmKGhvc3RfcHZ0LnNhdGFfZG1hX3JlZ3MtPmludGVycnVwdF9jbGVhci5ibG9jay5sb3cpLAorCQkgRE1BX0NIQU5ORUwoYykpOworCW91dF9sZTMyKCYoaG9zdF9wdnQuc2F0YV9kbWFfcmVncy0+aW50ZXJydXB0X2NsZWFyLnNyY3RyYW4ubG93KSwKKwkJIERNQV9DSEFOTkVMKGMpKTsKKwlvdXRfbGUzMigmKGhvc3RfcHZ0LnNhdGFfZG1hX3JlZ3MtPmludGVycnVwdF9jbGVhci5kc3R0cmFuLmxvdyksCisJCSBETUFfQ0hBTk5FTChjKSk7CisJb3V0X2xlMzIoJihob3N0X3B2dC5zYXRhX2RtYV9yZWdzLT5pbnRlcnJ1cHRfY2xlYXIuZXJyb3IubG93KSwKKwkJIERNQV9DSEFOTkVMKGMpKTsKK30KKworLyoKKyAqIEZ1bmN0aW9uOiBkbWFfcmVxdWVzdF9jaGFubmVsCisgKiBhcmd1bWVudHM6IE5vbmUKKyAqIHJldHVybnMgY2hhbm5lbCBudW1iZXIgaWYgYXZhaWxhYmxlIGVsc2UgLTEKKyAqIFRoaXMgZnVuY3Rpb24gYXNzaWducyB0aGUgbmV4dCBhdmFpbGFibGUgRE1BIGNoYW5uZWwgZnJvbSB0aGUgbGlzdCB0byB0aGUKKyAqIHJlcXVlc3RlcgorICovCitzdGF0aWMgaW50IGRtYV9yZXF1ZXN0X2NoYW5uZWwodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBETUFfTlVNX0NIQU5TOyBpKyspIHsKKwkJaWYgKCEoaW5fbGUzMigmKGhvc3RfcHZ0LnNhdGFfZG1hX3JlZ3MtPmRtYV9jaGFuX2VuLmxvdykpICZcCisJCQlETUFfQ0hBTk5FTChpKSkpCisJCQlyZXR1cm4gaTsKKwl9CisJZGV2X2Vycihob3N0X3B2dC5kd2NfZGV2LCAiJXMgTk8gY2hhbm5lbCBjaGFuX2VuOiAweCUwOHhcbiIsIF9fZnVuY19fLAorCQlpbl9sZTMyKCYoaG9zdF9wdnQuc2F0YV9kbWFfcmVncy0+ZG1hX2NoYW5fZW4ubG93KSkpOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIEZ1bmN0aW9uOiBkbWFfZHdjX2ludGVycnVwdAorICogYXJndW1lbnRzOiBpcnEsIGRldl9pZCwgcHRfcmVncworICogcmV0dXJucyBjaGFubmVsIG51bWJlciBpZiBhdmFpbGFibGUgZWxzZSAtMQorICogSW50ZXJydXB0IEhhbmRsZXIgZm9yIERXIEFIQiBTQVRBIERNQQorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgZG1hX2R3Y19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqaHNkZXZfaW5zdGFuY2UpCit7CisJaW50IGNoYW47CisJdTMyIHRmcl9yZWcsIGVycl9yZWc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc2F0YV9kd2NfZGV2aWNlICpoc2RldiA9CisJCShzdHJ1Y3Qgc2F0YV9kd2NfZGV2aWNlICopaHNkZXZfaW5zdGFuY2U7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gKHN0cnVjdCBhdGFfaG9zdCAqKWhzZGV2LT5ob3N0OworCXN0cnVjdCBhdGFfcG9ydCAqYXA7CisJc3RydWN0IHNhdGFfZHdjX2RldmljZV9wb3J0ICpoc2RldnA7CisJdTggdGFnID0gMDsKKwl1bnNpZ25lZCBpbnQgcG9ydCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCWFwID0gaG9zdC0+cG9ydHNbcG9ydF07CisJaHNkZXZwID0gSFNERVZQX0ZST01fQVAoYXApOworCXRhZyA9IGFwLT5saW5rLmFjdGl2ZV90YWc7CisKKwl0ZnJfcmVnID0gaW5fbGUzMigmKGhvc3RfcHZ0LnNhdGFfZG1hX3JlZ3MtPmludGVycnVwdF9zdGF0dXMudGZyXAorCQkJLmxvdykpOworCWVycl9yZWcgPSBpbl9sZTMyKCYoaG9zdF9wdnQuc2F0YV9kbWFfcmVncy0+aW50ZXJydXB0X3N0YXR1cy5lcnJvclwKKwkJCS5sb3cpKTsKKworCWRldl9kYmcoYXAtPmRldiwgImVvdD0weCUwOHggZXJyPTB4JTA4eCBwZW5kaW5nPSVkIGFjdGl2ZSBwb3J0PSVkXG4iLAorCQl0ZnJfcmVnLCBlcnJfcmVnLCBoc2RldnAtPmRtYV9wZW5kaW5nW3RhZ10sIHBvcnQpOworCisJZm9yIChjaGFuID0gMDsgY2hhbiA8IERNQV9OVU1fQ0hBTlM7IGNoYW4rKykgeworCQkvKiBDaGVjayBmb3IgZW5kLW9mLXRyYW5zZmVyIGludGVycnVwdC4gKi8KKwkJaWYgKHRmcl9yZWcgJiBETUFfQ0hBTk5FTChjaGFuKSkgeworCQkJLyoKKwkJCSAqIEVhY2ggRE1BIGNvbW1hbmQgcHJvZHVjZXMgMiBpbnRlcnJ1cHRzLiAgT25seQorCQkJICogY29tcGxldGUgdGhlIGNvbW1hbmQgYWZ0ZXIgYm90aCBpbnRlcnJ1cHRzIGhhdmUgYmVlbgorCQkJICogc2Vlbi4gKFNlZSBzYXRhX2R3Y19pc3IoKSkKKwkJCSAqLworCQkJaG9zdF9wdnQuZG1hX2ludGVycnVwdF9jb3VudCsrOworCQkJc2F0YV9kd2NfY2xlYXJfZG1hY3IoaHNkZXZwLCB0YWcpOworCisJCQlpZiAoaHNkZXZwLT5kbWFfcGVuZGluZ1t0YWddID09CisJCQkgICAgU0FUQV9EV0NfRE1BX1BFTkRJTkdfTk9ORSkgeworCQkJCWRldl9lcnIoYXAtPmRldiwgIkRNQSBub3QgcGVuZGluZyBlb3Q9MHglMDh4ICIKKwkJCQkJImVycj0weCUwOHggdGFnPTB4JTAyeCBwZW5kaW5nPSVkXG4iLAorCQkJCQl0ZnJfcmVnLCBlcnJfcmVnLCB0YWcsCisJCQkJCWhzZGV2cC0+ZG1hX3BlbmRpbmdbdGFnXSk7CisJCQl9CisKKwkJCWlmICgoaG9zdF9wdnQuZG1hX2ludGVycnVwdF9jb3VudCAlIDIpID09IDApCisJCQkJc2F0YV9kd2NfZG1hX3hmZXJfY29tcGxldGUoYXAsIDEpOworCisJCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0ICovCisJCQlvdXRfbGUzMigmKGhvc3RfcHZ0LnNhdGFfZG1hX3JlZ3MtPmludGVycnVwdF9jbGVhclwKKwkJCQkudGZyLmxvdyksCisJCQkJIERNQV9DSEFOTkVMKGNoYW4pKTsKKwkJfQorCisJCS8qIENoZWNrIGZvciBlcnJvciBpbnRlcnJ1cHQuICovCisJCWlmIChlcnJfcmVnICYgRE1BX0NIQU5ORUwoY2hhbikpIHsKKwkJCS8qIFRPRE8gTmVlZCBlcnJvciBoYW5kbGVyICEgKi8KKwkJCWRldl9lcnIoYXAtPmRldiwgImVycm9yIGludGVycnVwdCBlcnJfcmVnPTB4JTA4eFxuIiwKKwkJCQllcnJfcmVnKTsKKworCQkJLyogQ2xlYXIgdGhlIGludGVycnVwdC4gKi8KKwkJCW91dF9sZTMyKCYoaG9zdF9wdnQuc2F0YV9kbWFfcmVncy0+aW50ZXJydXB0X2NsZWFyXAorCQkJCS5lcnJvci5sb3cpLAorCQkJCSBETUFfQ0hBTk5FTChjaGFuKSk7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqIEZ1bmN0aW9uOiBkbWFfcmVxdWVzdF9pbnRlcnJ1cHRzCisgKiBhcmd1bWVudHM6IGhzZGV2CisgKiByZXR1cm5zIHN0YXR1cworICogVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgSVNSIGZvciBhIHBhcnRpY3VsYXIgRE1BIGNoYW5uZWwgaW50ZXJydXB0CisgKi8KK3N0YXRpYyBpbnQgZG1hX3JlcXVlc3RfaW50ZXJydXB0cyhzdHJ1Y3Qgc2F0YV9kd2NfZGV2aWNlICpoc2RldiwgaW50IGlycSkKK3sKKwlpbnQgcmV0dmFsID0gMDsKKwlpbnQgY2hhbjsKKworCWZvciAoY2hhbiA9IDA7IGNoYW4gPCBETUFfTlVNX0NIQU5TOyBjaGFuKyspIHsKKwkJLyogVW5tYXNrIGVycm9yIGludGVycnVwdCAqLworCQlvdXRfbGUzMigmKGhvc3RfcHZ0LnNhdGFfZG1hX3JlZ3MpLT5pbnRlcnJ1cHRfbWFzay5lcnJvci5sb3csCisJCQkgRE1BX0VOQUJMRV9DSEFOKGNoYW4pKTsKKworCQkvKiBVbm1hc2sgZW5kLW9mLXRyYW5zZmVyIGludGVycnVwdCAqLworCQlvdXRfbGUzMigmKGhvc3RfcHZ0LnNhdGFfZG1hX3JlZ3MpLT5pbnRlcnJ1cHRfbWFzay50ZnIubG93LAorCQkJIERNQV9FTkFCTEVfQ0hBTihjaGFuKSk7CisJfQorCisJcmV0dmFsID0gcmVxdWVzdF9pcnEoaXJxLCBkbWFfZHdjX2ludGVycnVwdCwgMCwgIlNBVEEgRE1BIiwgaHNkZXYpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2Vycihob3N0X3B2dC5kd2NfZGV2LCAiJXM6IGNvdWxkIG5vdCBnZXQgSVJRICVkXG4iLAorCQlfX2Z1bmNfXywgaXJxKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogTWFyayB0aGlzIGludGVycnVwdCBhcyByZXF1ZXN0ZWQgKi8KKwloc2Rldi0+aXJxX2RtYSA9IGlycTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZ1bmN0aW9uOiBtYXBfc2dfdG9fbGxpCisgKiBUaGUgU3lub3BzaXMgZHJpdmVyIGhhcyBhIGNvbW1lbnQgcHJvcG9zaW5nIHRoYXQgYmV0dGVyIHBlcmZvcm1hbmNlCisgKiBpcyBwb3NzaWJsZSBieSBvbmx5IGVuYWJsaW5nIGludGVycnVwdHMgb24gdGhlIGxhc3QgaXRlbSBpbiB0aGUgbGlua2VkIGxpc3QuCisgKiBIb3dldmVyLCBpdCBzZWVtcyB0aGF0IGNvdWxkIGJlIGEgcHJvYmxlbSBpZiBhbiBlcnJvciBoYXBwZW5lZCBvbiBvbmUgb2YgdGhlCisgKiBmaXJzdCBpdGVtcy4gIFRoZSB0cmFuc2ZlciB3b3VsZCBoYWx0LCBidXQgbm8gZXJyb3IgaW50ZXJydXB0IHdvdWxkIG9jY3VyLgorICogQ3VycmVudGx5IHRoaXMgZnVuY3Rpb24gc2V0cyBpbnRlcnJ1cHRzIGVuYWJsZWQgZm9yIGVhY2ggbGlua2VkIGxpc3QgaXRlbToKKyAqIERNQV9DVExfSU5UX0VOLgorICovCitzdGF0aWMgaW50IG1hcF9zZ190b19sbGkoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG51bV9lbGVtcywKKwkJCXN0cnVjdCBsbGkgKmxsaSwgZG1hX2FkZHJfdCBkbWFfbGxpLAorCQkJdm9pZCBfX2lvbWVtICpkbWFkcl9hZGRyLCBpbnQgZGlyKQoreworCWludCBpLCBpZHggPSAwOworCWludCBmaXNfbGVuID0gMDsKKwlkbWFfYWRkcl90IG5leHRfbGxwOworCWludCBibDsKKworCWRldl9kYmcoaG9zdF9wdnQuZHdjX2RldiwgIiVzOiBzZz0lcCBuZWxlbT0lZCBsbGk9JXAgZG1hX2xsaT0weCUwOHgiCisJCSIgZG1hZHI9MHglMDh4XG4iLCBfX2Z1bmNfXywgc2csIG51bV9lbGVtcywgbGxpLCAodTMyKWRtYV9sbGksCisJCSh1MzIpZG1hZHJfYWRkcik7CisKKwlibCA9IGdldF9idXJzdF9sZW5ndGhfZW5jb2RlKEFIQl9ETUFfQlJTVF9ERkxUKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fZWxlbXM7IGkrKywgc2crKykgeworCQl1MzIgYWRkciwgb2Zmc2V0OworCQl1MzIgc2dfbGVuLCBsZW47CisKKwkJYWRkciA9ICh1MzIpIHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7CisKKwkJZGV2X2RiZyhob3N0X3B2dC5kd2NfZGV2LCAiJXM6IGVsZW09JWQgc2dfYWRkcj0weCV4IHNnX2xlbiIKKwkJCSI9JWRcbiIsIF9fZnVuY19fLCBpLCBhZGRyLCBzZ19sZW4pOworCisJCXdoaWxlIChzZ19sZW4pIHsKKwkJCWlmIChpZHggPj0gU0FUQV9EV0NfRE1BQ19MTElfTlVNKSB7CisJCQkJLyogVGhlIExMSSB0YWJsZSBpcyBub3QgbGFyZ2UgZW5vdWdoLiAqLworCQkJCWRldl9lcnIoaG9zdF9wdnQuZHdjX2RldiwgIkxMSSB0YWJsZSBvdmVycnVuICIKKwkJCQkiKGlkeD0lZClcbiIsIGlkeCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlsZW4gPSAoc2dfbGVuID4gU0FUQV9EV0NfRE1BQ19DVFJMX1RTSVpFX01BWCkgPworCQkJCVNBVEFfRFdDX0RNQUNfQ1RSTF9UU0laRV9NQVggOiBzZ19sZW47CisKKwkJCW9mZnNldCA9IGFkZHIgJiAweGZmZmY7CisJCQlpZiAoKG9mZnNldCArIHNnX2xlbikgPiAweDEwMDAwKQorCQkJCWxlbiA9IDB4MTAwMDAgLSBvZmZzZXQ7CisKKwkJCS8qCisJCQkgKiBNYWtlIHN1cmUgYSBMTEkgYmxvY2sgaXMgbm90IGNyZWF0ZWQgdGhhdCB3aWxsIHNwYW4KKwkJCSAqIDhLIG1heCBGSVMgYm91bmRhcnkuICBJZiB0aGUgYmxvY2sgc3BhbnMgc3VjaCBhIEZJUworCQkJICogYm91bmRhcnksIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgYSBETUEgYnVyc3Qgd2lsbAorCQkJICogY3Jvc3MgdGhhdCBib3VuZGFyeSAtLSB0aGlzIHJlc3VsdHMgaW4gYW4gZXJyb3IgaW4KKwkJCSAqIHRoZSBob3N0IGNvbnRyb2xsZXIuCisJCQkgKi8KKwkJCWlmIChmaXNfbGVuICsgbGVuID4gODE5MikgeworCQkJCWRldl9kYmcoaG9zdF9wdnQuZHdjX2RldiwgIlNQTElUVElORzogZmlzX2xlbj0iCisJCQkJCSIlZCgweCV4KSBsZW49JWQoMHgleClcbiIsIGZpc19sZW4sCisJCQkJCSBmaXNfbGVuLCBsZW4sIGxlbik7CisJCQkJbGVuID0gODE5MiAtIGZpc19sZW47CisJCQkJZmlzX2xlbiA9IDA7CisJCQl9IGVsc2UgeworCQkJCWZpc19sZW4gKz0gbGVuOworCQkJfQorCQkJaWYgKGZpc19sZW4gPT0gODE5MikKKwkJCQlmaXNfbGVuID0gMDsKKworCQkJLyoKKwkJCSAqIFNldCBETUEgYWRkcmVzc2VzIGFuZCBsb3dlciBoYWxmIG9mIGNvbnRyb2wgcmVnaXN0ZXIKKwkJCSAqIGJhc2VkIG9uIGRpcmVjdGlvbi4KKwkJCSAqLworCQkJaWYgKGRpciA9PSBETUFfRlJPTV9ERVZJQ0UpIHsKKwkJCQlsbGlbaWR4XS5kYXIgPSBjcHVfdG9fbGUzMihhZGRyKTsKKwkJCQlsbGlbaWR4XS5zYXIgPSBjcHVfdG9fbGUzMigodTMyKWRtYWRyX2FkZHIpOworCisJCQkJbGxpW2lkeF0uY3RsLmxvdyA9IGNwdV90b19sZTMyKAorCQkJCQlETUFfQ1RMX1RURkMoRE1BX0NUTF9UVEZDX1AyTV9ETUFDKSB8CisJCQkJCURNQV9DVExfU01TKDApIHwKKwkJCQkJRE1BX0NUTF9ETVMoMSkgfAorCQkJCQlETUFfQ1RMX1NSQ19NU0laRShibCkgfAorCQkJCQlETUFfQ1RMX0RTVF9NU0laRShibCkgfAorCQkJCQlETUFfQ1RMX1NJTkNfTk9DSEFOR0UgfAorCQkJCQlETUFfQ1RMX1NSQ19UUldJRCgyKSB8CisJCQkJCURNQV9DVExfRFNUX1RSV0lEKDIpIHwKKwkJCQkJRE1BX0NUTF9JTlRfRU4gfAorCQkJCQlETUFfQ1RMX0xMUF9TUkNFTiB8CisJCQkJCURNQV9DVExfTExQX0RTVEVOKTsKKwkJCX0gZWxzZSB7CS8qIERNQV9UT19ERVZJQ0UgKi8KKwkJCQlsbGlbaWR4XS5zYXIgPSBjcHVfdG9fbGUzMihhZGRyKTsKKwkJCQlsbGlbaWR4XS5kYXIgPSBjcHVfdG9fbGUzMigodTMyKWRtYWRyX2FkZHIpOworCisJCQkJbGxpW2lkeF0uY3RsLmxvdyA9IGNwdV90b19sZTMyKAorCQkJCQlETUFfQ1RMX1RURkMoRE1BX0NUTF9UVEZDX00yUF9QRVIpIHwKKwkJCQkJRE1BX0NUTF9TTVMoMSkgfAorCQkJCQlETUFfQ1RMX0RNUygwKSB8CisJCQkJCURNQV9DVExfU1JDX01TSVpFKGJsKSB8CisJCQkJCURNQV9DVExfRFNUX01TSVpFKGJsKSB8CisJCQkJCURNQV9DVExfRElOQ19OT0NIQU5HRSB8CisJCQkJCURNQV9DVExfU1JDX1RSV0lEKDIpIHwKKwkJCQkJRE1BX0NUTF9EU1RfVFJXSUQoMikgfAorCQkJCQlETUFfQ1RMX0lOVF9FTiB8CisJCQkJCURNQV9DVExfTExQX1NSQ0VOIHwKKwkJCQkJRE1BX0NUTF9MTFBfRFNURU4pOworCQkJfQorCisJCQlkZXZfZGJnKGhvc3RfcHZ0LmR3Y19kZXYsICIlcyBzZXR0aW5nIGN0bC5oaWdoIGxlbjogIgorCQkJCSIweCUwOHggdmFsOiAweCUwOHhcbiIsIF9fZnVuY19fLAorCQkJCWxlbiwgRE1BX0NUTF9CTEtfVFMobGVuIC8gNCkpOworCisJCQkvKiBQcm9ncmFtIHRoZSBMTEkgQ1RMIGhpZ2ggcmVnaXN0ZXIgKi8KKwkJCWxsaVtpZHhdLmN0bC5oaWdoID0gY3B1X3RvX2xlMzIoRE1BX0NUTF9CTEtfVFNcCisJCQkJCQkobGVuIC8gNCkpOworCisJCQkvKiBQcm9ncmFtIHRoZSBuZXh0IHBvaW50ZXIuICBUaGUgbmV4dCBwb2ludGVyIG11c3QgYmUKKwkJCSAqIHRoZSBwaHlzaWNhbCBhZGRyZXNzLCBub3QgdGhlIHZpcnR1YWwgYWRkcmVzcy4KKwkJCSAqLworCQkJbmV4dF9sbHAgPSAoZG1hX2xsaSArICgoaWR4ICsgMSkgKiBzaXplb2Yoc3RydWN0IFwKKwkJCQkJCQlsbGkpKSk7CisKKwkJCS8qIFRoZSBsYXN0IDIgYml0cyBlbmNvZGUgdGhlIGxpc3QgbWFzdGVyIHNlbGVjdC4gKi8KKwkJCW5leHRfbGxwID0gRE1BX0xMUF9MTVMobmV4dF9sbHAsIERNQV9MTFBfQUhCTUFTVEVSMik7CisKKwkJCWxsaVtpZHhdLmxscCA9IGNwdV90b19sZTMyKG5leHRfbGxwKTsKKwkJCWlkeCsrOworCQkJc2dfbGVuIC09IGxlbjsKKwkJCWFkZHIgKz0gbGVuOworCQl9CisJfQorCisJLyoKKwkgKiBUaGUgbGFzdCBuZXh0IHB0ciBoYXMgdG8gYmUgemVybyBhbmQgdGhlIGxhc3QgY29udHJvbCBsb3cgcmVnaXN0ZXIKKwkgKiBoYXMgdG8gaGF2ZSBMTFBfU1JDX0VOIGFuZCBMTFBfRFNUX0VOIChsaW5rZWQgbGlzdCBwb2ludGVyIHNvdXJjZQorCSAqIGFuZCBkZXN0aW5hdGlvbiBlbmFibGUpIHNldCBiYWNrIHRvIDAgKGRpc2FibGVkLikgVGhpcyBpcyB3aGF0IHRlbGxzCisJICogdGhlIGNvcmUgdGhhdCB0aGlzIGlzIHRoZSBsYXN0IGl0ZW0gaW4gdGhlIGxpbmtlZCBsaXN0LgorCSAqLworCWlmIChpZHgpIHsKKwkJbGxpW2lkeC0xXS5sbHAgPSAweDAwMDAwMDAwOworCQlsbGlbaWR4LTFdLmN0bC5sb3cgJj0gRE1BX0NUTF9MTFBfRElTQUJMRV9MRTMyOworCisJCS8qIEZsdXNoIGNhY2hlIHRvIG1lbW9yeSAqLworCQlkbWFfY2FjaGVfc3luYyhOVUxMLCBsbGksIChzaXplb2Yoc3RydWN0IGxsaSkgKiBpZHgpLAorCQkJICAgICAgIERNQV9CSURJUkVDVElPTkFMKTsKKwl9CisKKwlyZXR1cm4gaWR4OworfQorCisvKgorICogRnVuY3Rpb246IGRtYV9kd2NfeGZlcl9zdGFydAorICogYXJndW1lbnRzOiBDaGFubmVsIG51bWJlcgorICogUmV0dXJuIDogTm9uZQorICogRW5hYmxlcyB0aGUgRE1BIGNoYW5uZWwKKyAqLworc3RhdGljIHZvaWQgZG1hX2R3Y194ZmVyX3N0YXJ0KGludCBkbWFfY2gpCit7CisJLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLworCW91dF9sZTMyKCYoaG9zdF9wdnQuc2F0YV9kbWFfcmVncy0+ZG1hX2NoYW5fZW4ubG93KSwKKwkJIGluX2xlMzIoJihob3N0X3B2dC5zYXRhX2RtYV9yZWdzLT5kbWFfY2hhbl9lbi5sb3cpKSB8CisJCSBETUFfRU5BQkxFX0NIQU4oZG1hX2NoKSk7Cit9CisKK3N0YXRpYyBpbnQgZG1hX2R3Y194ZmVyX3NldHVwKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBudW1fZWxlbXMsCisJCQkgICAgICBzdHJ1Y3QgbGxpICpsbGksIGRtYV9hZGRyX3QgZG1hX2xsaSwKKwkJCSAgICAgIHZvaWQgX19pb21lbSAqYWRkciwgaW50IGRpcikKK3sKKwlpbnQgZG1hX2NoOworCWludCBudW1fbGxpOworCS8qIEFjcXVpcmUgRE1BIGNoYW5uZWwgKi8KKwlkbWFfY2ggPSBkbWFfcmVxdWVzdF9jaGFubmVsKCk7CisJaWYgKGRtYV9jaCA9PSAtMSkgeworCQlkZXZfZXJyKGhvc3RfcHZ0LmR3Y19kZXYsICIlczogZG1hIGNoYW5uZWwgdW5hdmFpbGFibGVcbiIsCisJCQkgX19mdW5jX18pOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKwkvKiBDb252ZXJ0IFNHIGxpc3QgdG8gbGlua2VkIGxpc3Qgb2YgaXRlbXMgKExMSXMpIGZvciBBSEIgRE1BICovCisJbnVtX2xsaSA9IG1hcF9zZ190b19sbGkoc2csIG51bV9lbGVtcywgbGxpLCBkbWFfbGxpLCBhZGRyLCBkaXIpOworCisJZGV2X2RiZyhob3N0X3B2dC5kd2NfZGV2LCAiJXMgc2c6IDB4JXAsIGNvdW50OiAlZCBsbGk6ICVwIGRtYV9sbGk6IgorCQkiIDB4JTB4bHggYWRkcjogJXAgbGxpIGNvdW50OiAlZFxuIiwgX19mdW5jX18sIHNnLCBudW1fZWxlbXMsCisJCSBsbGksICh1MzIpZG1hX2xsaSwgYWRkciwgbnVtX2xsaSk7CisKKwljbGVhcl9jaGFuX2ludGVycnVwdHMoZG1hX2NoKTsKKworCS8qIFByb2dyYW0gdGhlIENGRyByZWdpc3Rlci4gKi8KKwlvdXRfbGUzMigmKGhvc3RfcHZ0LnNhdGFfZG1hX3JlZ3MtPmNoYW5fcmVnc1tkbWFfY2hdLmNmZy5oaWdoKSwKKwkJIERNQV9DRkdfUFJPVENUTCB8IERNQV9DRkdfRkNNT0RfUkVRKTsKKwlvdXRfbGUzMigmKGhvc3RfcHZ0LnNhdGFfZG1hX3JlZ3MtPmNoYW5fcmVnc1tkbWFfY2hdLmNmZy5sb3cpLCAwKTsKKworCS8qIFByb2dyYW0gdGhlIGFkZHJlc3Mgb2YgdGhlIGxpbmtlZCBsaXN0ICovCisJb3V0X2xlMzIoJihob3N0X3B2dC5zYXRhX2RtYV9yZWdzLT5jaGFuX3JlZ3NbZG1hX2NoXS5sbHAubG93KSwKKwkJIERNQV9MTFBfTE1TKGRtYV9sbGksIERNQV9MTFBfQUhCTUFTVEVSMikpOworCisJLyogUHJvZ3JhbSB0aGUgQ1RMIHJlZ2lzdGVyIHdpdGggc3JjIGVuYWJsZSAvIGRzdCBlbmFibGUgKi8KKwlvdXRfbGUzMigmKGhvc3RfcHZ0LnNhdGFfZG1hX3JlZ3MtPmNoYW5fcmVnc1tkbWFfY2hdLmN0bC5sb3cpLAorCQkgRE1BX0NUTF9MTFBfU1JDRU4gfCBETUFfQ1RMX0xMUF9EU1RFTik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGdW5jdGlvbjogZG1hX2R3Y19leGl0CisgKiBhcmd1bWVudHM6IE5vbmUKKyAqIHJldHVybnMgc3RhdHVzCisgKiBUaGlzIGZ1bmN0aW9uIGV4aXRzIHRoZSBTQVRBIERNQSBkcml2ZXIKKyAqLworc3RhdGljIHZvaWQgZG1hX2R3Y19leGl0KHN0cnVjdCBzYXRhX2R3Y19kZXZpY2UgKmhzZGV2KQoreworCWRldl9kYmcoaG9zdF9wdnQuZHdjX2RldiwgIiVzOlxuIiwgX19mdW5jX18pOworCWlmIChob3N0X3B2dC5zYXRhX2RtYV9yZWdzKQorCQlpb3VubWFwKGhvc3RfcHZ0LnNhdGFfZG1hX3JlZ3MpOworCisJaWYgKGhzZGV2LT5pcnFfZG1hKQorCQlmcmVlX2lycShoc2Rldi0+aXJxX2RtYSwgaHNkZXYpOworfQorCisvKgorICogRnVuY3Rpb246IGRtYV9kd2NfaW5pdAorICogYXJndW1lbnRzOiBoc2RldgorICogcmV0dXJucyBzdGF0dXMKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIFNBVEEgRE1BIGRyaXZlcgorICovCitzdGF0aWMgaW50IGRtYV9kd2NfaW5pdChzdHJ1Y3Qgc2F0YV9kd2NfZGV2aWNlICpoc2RldiwgaW50IGlycSkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gZG1hX3JlcXVlc3RfaW50ZXJydXB0cyhoc2RldiwgaXJxKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoaG9zdF9wdnQuZHdjX2RldiwgIiVzOiBkbWFfcmVxdWVzdF9pbnRlcnJ1cHRzIHJldHVybnMiCisJCQkiICVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKKwkJZ290byBlcnJvcl9vdXQ7CisJfQorCisJLyogRW5hYmUgRE1BICovCisJb3V0X2xlMzIoJihob3N0X3B2dC5zYXRhX2RtYV9yZWdzLT5kbWFfY2ZnLmxvdyksIERNQV9FTik7CisKKwlkZXZfbm90aWNlKGhvc3RfcHZ0LmR3Y19kZXYsICJETUEgaW5pdGlhbGl6ZWRcbiIpOworCWRldl9kYmcoaG9zdF9wdnQuZHdjX2RldiwgIlNBVEEgRE1BIHJlZ2lzdGVycz0weCVwXG4iLCBob3N0X3B2dC5cCisJCXNhdGFfZG1hX3JlZ3MpOworCisJcmV0dXJuIDA7CisKK2Vycm9yX291dDoKKwlkbWFfZHdjX2V4aXQoaHNkZXYpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzYXRhX2R3Y19zY3JfcmVhZChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCBzY3IsIHUzMiAqdmFsKQoreworCWlmIChzY3IgPiBTQ1JfTk9USUZJQ0FUSU9OKSB7CisJCWRldl9lcnIobGluay0+YXAtPmRldiwgIiVzOiBJbmNvcnJlY3QgU0NSIG9mZnNldCAweCUwMnhcbiIsCisJCQlfX2Z1bmNfXywgc2NyKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJKnZhbCA9IGluX2xlMzIoKHZvaWQgKilsaW5rLT5hcC0+aW9hZGRyLnNjcl9hZGRyICsgKHNjciAqIDQpKTsKKwlkZXZfZGJnKGxpbmstPmFwLT5kZXYsICIlczogaWQ9JWQgcmVnPSVkIHZhbD12YWw9MHglMDh4XG4iLAorCQlfX2Z1bmNfXywgbGluay0+YXAtPnByaW50X2lkLCBzY3IsICp2YWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2F0YV9kd2Nfc2NyX3dyaXRlKHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50IHNjciwgdTMyIHZhbCkKK3sKKwlkZXZfZGJnKGxpbmstPmFwLT5kZXYsICIlczogaWQ9JWQgcmVnPSVkIHZhbD12YWw9MHglMDh4XG4iLAorCQlfX2Z1bmNfXywgbGluay0+YXAtPnByaW50X2lkLCBzY3IsIHZhbCk7CisJaWYgKHNjciA+IFNDUl9OT1RJRklDQVRJT04pIHsKKwkJZGV2X2VycihsaW5rLT5hcC0+ZGV2LCAiJXM6IEluY29ycmVjdCBTQ1Igb2Zmc2V0IDB4JTAyeFxuIiwKKwkJCSBfX2Z1bmNfXywgc2NyKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW91dF9sZTMyKCh2b2lkICopbGluay0+YXAtPmlvYWRkci5zY3JfYWRkciArIChzY3IgKiA0KSwgdmFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGNvcmVfc2NyX3JlYWQodW5zaWduZWQgaW50IHNjcikKK3sKKwlyZXR1cm4gaW5fbGUzMigodm9pZCBfX2lvbWVtICopKGhvc3RfcHZ0LnNjcl9hZGRyX3NzdGF0dXMpICtcCisJCQkoc2NyICogNCkpOworfQorCitzdGF0aWMgdm9pZCBjb3JlX3Njcl93cml0ZSh1bnNpZ25lZCBpbnQgc2NyLCB1MzIgdmFsKQoreworCW91dF9sZTMyKCh2b2lkIF9faW9tZW0gKikoaG9zdF9wdnQuc2NyX2FkZHJfc3N0YXR1cykgKyAoc2NyICogNCksCisJCXZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX3NlcnJvcih2b2lkKQoreworCXUzMiB2YWw7CisJdmFsID0gY29yZV9zY3JfcmVhZChTQ1JfRVJST1IpOworCWNvcmVfc2NyX3dyaXRlKFNDUl9FUlJPUiwgdmFsKTsKKworfQorCitzdGF0aWMgdm9pZCBjbGVhcl9pbnRlcnJ1cHRfYml0KHN0cnVjdCBzYXRhX2R3Y19kZXZpY2UgKmhzZGV2LCB1MzIgYml0KQoreworCW91dF9sZTMyKCZoc2Rldi0+c2F0YV9kd2NfcmVncy0+aW50cHIsCisJCSBpbl9sZTMyKCZoc2Rldi0+c2F0YV9kd2NfcmVncy0+aW50cHIpKTsKK30KKworc3RhdGljIHUzMiBxY21kX3RhZ190b19tYXNrKHU4IHRhZykKK3sKKwlyZXR1cm4gMHgwMDAwMDAwMSA8PCAodGFnICYgMHgxZik7Cit9CisKKy8qIFNlZSBhaGNpLmMgKi8KK3N0YXRpYyB2b2lkIHNhdGFfZHdjX2Vycm9yX2ludHIoc3RydWN0IGF0YV9wb3J0ICphcCwKKwkJCQlzdHJ1Y3Qgc2F0YV9kd2NfZGV2aWNlICpoc2RldiwgdWludCBpbnRwcikKK3sKKwlzdHJ1Y3Qgc2F0YV9kd2NfZGV2aWNlX3BvcnQgKmhzZGV2cCA9IEhTREVWUF9GUk9NX0FQKGFwKTsKKwlzdHJ1Y3QgYXRhX2VoX2luZm8gKmVoaSA9ICZhcC0+bGluay5laF9pbmZvOworCXVuc2lnbmVkIGludCBlcnJfbWFzayA9IDAsIGFjdGlvbiA9IDA7CisJc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYzsKKwl1MzIgc2Vycm9yOworCXU4IHN0YXR1cywgdGFnOworCXUzMiBlcnJfcmVnOworCisJYXRhX2VoaV9jbGVhcl9kZXNjKGVoaSk7CisKKwlzZXJyb3IgPSBjb3JlX3Njcl9yZWFkKFNDUl9FUlJPUik7CisJc3RhdHVzID0gYXAtPm9wcy0+c2ZmX2NoZWNrX3N0YXR1cyhhcCk7CisKKwllcnJfcmVnID0gaW5fbGUzMigmKGhvc3RfcHZ0LnNhdGFfZG1hX3JlZ3MtPmludGVycnVwdF9zdGF0dXMuZXJyb3IuXAorCQkJbG93KSk7CisJdGFnID0gYXAtPmxpbmsuYWN0aXZlX3RhZzsKKworCWRldl9lcnIoYXAtPmRldiwgIiVzIFNDUl9FUlJPUj0weCUwOHggaW50cHI9MHglMDh4IHN0YXR1cz0weCUwOHggIgorCQkiZG1hX2ludHA9JWQgcGVuZGluZz0lZCBpc3N1ZWQ9JWQgZG1hX2Vycl9zdGF0dXM9MHglMDh4XG4iLAorCQlfX2Z1bmNfXywgc2Vycm9yLCBpbnRwciwgc3RhdHVzLCBob3N0X3B2dC5kbWFfaW50ZXJydXB0X2NvdW50LAorCQloc2RldnAtPmRtYV9wZW5kaW5nW3RhZ10sIGhzZGV2cC0+Y21kX2lzc3VlZFt0YWddLCBlcnJfcmVnKTsKKworCS8qIENsZWFyIGVycm9yIHJlZ2lzdGVyIGFuZCBpbnRlcnJ1cHQgYml0ICovCisJY2xlYXJfc2Vycm9yKCk7CisJY2xlYXJfaW50ZXJydXB0X2JpdChoc2RldiwgU0FUQV9EV0NfSU5UUFJfRVJSKTsKKworCS8qIFRoaXMgaXMgdGhlIG9ubHkgZXJyb3IgaGFwcGVuaW5nIG5vdy4gIFRPRE8gY2hlY2sgZm9yIGV4YWN0IGVycm9yICovCisKKwllcnJfbWFzayB8PSBBQ19FUlJfSE9TVF9CVVM7CisJYWN0aW9uIHw9IEFUQV9FSF9SRVNFVDsKKworCS8qIFBhc3MgdGhpcyBvbiB0byBFSCAqLworCWVoaS0+c2Vycm9yIHw9IHNlcnJvcjsKKwllaGktPmFjdGlvbiB8PSBhY3Rpb247CisKKwlxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgdGFnKTsKKwlpZiAocWMpCisJCXFjLT5lcnJfbWFzayB8PSBlcnJfbWFzazsKKwllbHNlCisJCWVoaS0+ZXJyX21hc2sgfD0gZXJyX21hc2s7CisKKwlhdGFfcG9ydF9hYm9ydChhcCk7Cit9CisKKy8qCisgKiBGdW5jdGlvbiA6IHNhdGFfZHdjX2lzcgorICogYXJndW1lbnRzIDogaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UsIHN0cnVjdCBwdF9yZWdzICpyZWdzCisgKiBSZXR1cm4gdmFsdWUgOiBpcnFyZXR1cm5fdCAtIHN0YXR1cyBvZiBJUlEKKyAqIFRoaXMgSW50ZXJydXB0IGhhbmRsZXIgY2FsbGVkIHZpYSBwb3J0IG9wcyByZWdpc3RlcmVkIGZ1bmN0aW9uLgorICogLmlycV9oYW5kbGVyID0gc2F0YV9kd2NfaXNyCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBzYXRhX2R3Y19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQoreworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IChzdHJ1Y3QgYXRhX2hvc3QgKilkZXZfaW5zdGFuY2U7CisJc3RydWN0IHNhdGFfZHdjX2RldmljZSAqaHNkZXYgPSBIU0RFVl9GUk9NX0hPU1QoaG9zdCk7CisJc3RydWN0IGF0YV9wb3J0ICphcDsKKwlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggc3RhdHVzLCB0YWc7CisJaW50IGhhbmRsZWQsIG51bV9wcm9jZXNzZWQsIHBvcnQgPSAwOworCXVpbnQgaW50cHIsIHNhY3RpdmUsIHNhY3RpdmUyLCB0YWdfbWFzazsKKwlzdHJ1Y3Qgc2F0YV9kd2NfZGV2aWNlX3BvcnQgKmhzZGV2cDsKKwlob3N0X3B2dC5zYXRhX2R3Y19zYWN0aXZlX2lzc3VlZCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCisJLyogUmVhZCB0aGUgaW50ZXJydXB0IHJlZ2lzdGVyICovCisJaW50cHIgPSBpbl9sZTMyKCZoc2Rldi0+c2F0YV9kd2NfcmVncy0+aW50cHIpOworCisJYXAgPSBob3N0LT5wb3J0c1twb3J0XTsKKwloc2RldnAgPSBIU0RFVlBfRlJPTV9BUChhcCk7CisKKwlkZXZfZGJnKGFwLT5kZXYsICIlcyBpbnRwcj0weCUwOHggYWN0aXZlX3RhZz0lZFxuIiwgX19mdW5jX18sIGludHByLAorCQlhcC0+bGluay5hY3RpdmVfdGFnKTsKKworCS8qIENoZWNrIGZvciBlcnJvciBpbnRlcnJ1cHQgKi8KKwlpZiAoaW50cHIgJiBTQVRBX0RXQ19JTlRQUl9FUlIpIHsKKwkJc2F0YV9kd2NfZXJyb3JfaW50cihhcCwgaHNkZXYsIGludHByKTsKKwkJaGFuZGxlZCA9IDE7CisJCWdvdG8gRE9ORTsKKwl9CisKKwkvKiBDaGVjayBmb3IgRE1BIFNFVFVQIEZJUyAoRlAgRE1BKSBpbnRlcnJ1cHQgKi8KKwlpZiAoaW50cHIgJiBTQVRBX0RXQ19JTlRQUl9ORVdGUCkgeworCQljbGVhcl9pbnRlcnJ1cHRfYml0KGhzZGV2LCBTQVRBX0RXQ19JTlRQUl9ORVdGUCk7CisKKwkJdGFnID0gKHU4KShpbl9sZTMyKCZoc2Rldi0+c2F0YV9kd2NfcmVncy0+ZnB0YWdyKSk7CisJCWRldl9kYmcoYXAtPmRldiwgIiVzOiBORVdGUCB0YWc9JWRcbiIsIF9fZnVuY19fLCB0YWcpOworCQlpZiAoaHNkZXZwLT5jbWRfaXNzdWVkW3RhZ10gIT0gU0FUQV9EV0NfQ01EX0lTU1VFRF9QRU5EKQorCQkJZGV2X3dhcm4oYXAtPmRldiwgIkNNRCB0YWc9JWQgbm90IHBlbmRpbmc/XG4iLCB0YWcpOworCisJCWhvc3RfcHZ0LnNhdGFfZHdjX3NhY3RpdmVfaXNzdWVkIHw9IHFjbWRfdGFnX3RvX21hc2sodGFnKTsKKworCQlxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgdGFnKTsKKwkJLyoKKwkJICogU3RhcnQgRlAgRE1BIGZvciBOQ1EgY29tbWFuZC4gIEF0IHRoaXMgcG9pbnQgdGhlIHRhZyBpcyB0aGUKKwkJICogYWN0aXZlIHRhZy4gIEl0IGlzIHRoZSB0YWcgdGhhdCBtYXRjaGVzIHRoZSBjb21tYW5kIGFib3V0IHRvCisJCSAqIGJlIGNvbXBsZXRlZC4KKwkJICovCisJCXFjLT5hcC0+bGluay5hY3RpdmVfdGFnID0gdGFnOworCQlzYXRhX2R3Y19ibWRtYV9zdGFydF9ieV90YWcocWMsIHRhZyk7CisKKwkJaGFuZGxlZCA9IDE7CisJCWdvdG8gRE9ORTsKKwl9CisJc2FjdGl2ZSA9IGNvcmVfc2NyX3JlYWQoU0NSX0FDVElWRSk7CisJdGFnX21hc2sgPSAoaG9zdF9wdnQuc2F0YV9kd2Nfc2FjdGl2ZV9pc3N1ZWQgfCBzYWN0aXZlKSBeIHNhY3RpdmU7CisKKwkvKiBJZiBubyBzYWN0aXZlIGlzc3VlZCBhbmQgdGFnX21hc2sgaXMgemVybyB0aGVuIHRoaXMgaXMgbm90IE5DUSAqLworCWlmIChob3N0X3B2dC5zYXRhX2R3Y19zYWN0aXZlX2lzc3VlZCA9PSAwICYmIHRhZ19tYXNrID09IDApIHsKKwkJaWYgKGFwLT5saW5rLmFjdGl2ZV90YWcgPT0gQVRBX1RBR19QT0lTT04pCisJCQl0YWcgPSAwOworCQllbHNlCisJCQl0YWcgPSBhcC0+bGluay5hY3RpdmVfdGFnOworCQlxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgdGFnKTsKKworCQkvKiBERVYgaW50ZXJydXB0IHcvIG5vIGFjdGl2ZSBxYz8gKi8KKwkJaWYgKHVubGlrZWx5KCFxYyB8fCAocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1BPTExJTkcpKSkgeworCQkJZGV2X2VycihhcC0+ZGV2LCAiJXMgaW50ZXJydXB0IHdpdGggbm8gYWN0aXZlIHFjICIKKwkJCQkicWM9JXBcbiIsIF9fZnVuY19fLCBxYyk7CisJCQlhcC0+b3BzLT5zZmZfY2hlY2tfc3RhdHVzKGFwKTsKKwkJCWhhbmRsZWQgPSAxOworCQkJZ290byBET05FOworCQl9CisJCXN0YXR1cyA9IGFwLT5vcHMtPnNmZl9jaGVja19zdGF0dXMoYXApOworCisJCXFjLT5hcC0+bGluay5hY3RpdmVfdGFnID0gdGFnOworCQloc2RldnAtPmNtZF9pc3N1ZWRbdGFnXSA9IFNBVEFfRFdDX0NNRF9JU1NVRURfTk9UOworCisJCWlmIChzdGF0dXMgJiBBVEFfRVJSKSB7CisJCQlkZXZfZGJnKGFwLT5kZXYsICJpbnRlcnJ1cHQgQVRBX0VSUiAoMHgleClcbiIsIHN0YXR1cyk7CisJCQlzYXRhX2R3Y19xY19jb21wbGV0ZShhcCwgcWMsIDEpOworCQkJaGFuZGxlZCA9IDE7CisJCQlnb3RvIERPTkU7CisJCX0KKworCQlkZXZfZGJnKGFwLT5kZXYsICIlcyBub24tTkNRIGNtZCBpbnRlcnJ1cHQsIHByb3RvY29sOiAlc1xuIiwKKwkJCV9fZnVuY19fLCBhdGFfZ2V0X2NtZF9kZXNjcmlwdChxYy0+dGYucHJvdG9jb2wpKTsKK0RSVlNUSUxMQlVTWToKKwkJaWYgKGF0YV9pc19kbWEocWMtPnRmLnByb3RvY29sKSkgeworCQkJLyoKKwkJCSAqIEVhY2ggRE1BIHRyYW5zYWN0aW9uIHByb2R1Y2VzIDIgaW50ZXJydXB0cy4gVGhlIERNQUMKKwkJCSAqIHRyYW5zZmVyIGNvbXBsZXRlIGludGVycnVwdCBhbmQgdGhlIFNBVEEgY29udHJvbGxlcgorCQkJICogb3BlcmF0aW9uIGRvbmUgaW50ZXJydXB0LiBUaGUgY29tbWFuZCBzaG91bGQgYmUKKwkJCSAqIGNvbXBsZXRlZCBvbmx5IGFmdGVyIGJvdGggaW50ZXJydXB0cyBhcmUgc2Vlbi4KKwkJCSAqLworCQkJaG9zdF9wdnQuZG1hX2ludGVycnVwdF9jb3VudCsrOworCQkJaWYgKGhzZGV2cC0+ZG1hX3BlbmRpbmdbdGFnXSA9PSBcCisJCQkJCVNBVEFfRFdDX0RNQV9QRU5ESU5HX05PTkUpIHsKKwkJCQlkZXZfZXJyKGFwLT5kZXYsICIlczogRE1BIG5vdCBwZW5kaW5nICIKKwkJCQkJImludHByPTB4JTA4eCBzdGF0dXM9MHglMDh4IHBlbmRpbmciCisJCQkJCSI9JWRcbiIsIF9fZnVuY19fLCBpbnRwciwgc3RhdHVzLAorCQkJCQloc2RldnAtPmRtYV9wZW5kaW5nW3RhZ10pOworCQkJfQorCisJCQlpZiAoKGhvc3RfcHZ0LmRtYV9pbnRlcnJ1cHRfY291bnQgJSAyKSA9PSAwKQorCQkJCXNhdGFfZHdjX2RtYV94ZmVyX2NvbXBsZXRlKGFwLCAxKTsKKwkJfSBlbHNlIGlmIChhdGFfaXNfcGlvKHFjLT50Zi5wcm90b2NvbCkpIHsKKwkJCWF0YV9zZmZfaHNtX21vdmUoYXAsIHFjLCBzdGF0dXMsIDApOworCQkJaGFuZGxlZCA9IDE7CisJCQlnb3RvIERPTkU7CisJCX0gZWxzZSB7CisJCQlpZiAodW5saWtlbHkoc2F0YV9kd2NfcWNfY29tcGxldGUoYXAsIHFjLCAxKSkpCisJCQkJZ290byBEUlZTVElMTEJVU1k7CisJCX0KKworCQloYW5kbGVkID0gMTsKKwkJZ290byBET05FOworCX0KKworCS8qCisJICogVGhpcyBpcyBhIE5DUSBjb21tYW5kLiBBdCB0aGlzIHBvaW50IHdlIG5lZWQgdG8gZmlndXJlIG91dCBmb3Igd2hpY2gKKwkgKiB0YWdzIHdlIGhhdmUgZ290dGVuIGEgY29tcGxldGlvbiBpbnRlcnJ1cHQuICBPbmUgaW50ZXJydXB0IG1heSBzZXJ2ZQorCSAqIGFzIGNvbXBsZXRpb24gZm9yIG1vcmUgdGhhbiBvbmUgb3BlcmF0aW9uIHdoZW4gY29tbWFuZHMgYXJlIHF1ZXVlZAorCSAqIChOQ1EpLiAgV2UgbmVlZCB0byBwcm9jZXNzIGVhY2ggY29tcGxldGVkIGNvbW1hbmQuCisJICovCisKKwkgLyogcHJvY2VzcyBjb21wbGV0ZWQgY29tbWFuZHMgKi8KKwlzYWN0aXZlID0gY29yZV9zY3JfcmVhZChTQ1JfQUNUSVZFKTsKKwl0YWdfbWFzayA9IChob3N0X3B2dC5zYXRhX2R3Y19zYWN0aXZlX2lzc3VlZCB8IHNhY3RpdmUpIF4gc2FjdGl2ZTsKKworCWlmIChzYWN0aXZlICE9IDAgfHwgKGhvc3RfcHZ0LnNhdGFfZHdjX3NhY3RpdmVfaXNzdWVkKSA+IDEgfHwgXAorCQkJCQkJCXRhZ19tYXNrID4gMSkgeworCQlkZXZfZGJnKGFwLT5kZXYsICIlcyBOQ1E6c2FjdGl2ZT0weCUwOHggIHNhY3RpdmVfaXNzdWVkPTB4JTA4eCIKKwkJCSJ0YWdfbWFzaz0weCUwOHhcbiIsIF9fZnVuY19fLCBzYWN0aXZlLAorCQkJaG9zdF9wdnQuc2F0YV9kd2Nfc2FjdGl2ZV9pc3N1ZWQsIHRhZ19tYXNrKTsKKwl9CisKKwlpZiAoKHRhZ19tYXNrIHwgKGhvc3RfcHZ0LnNhdGFfZHdjX3NhY3RpdmVfaXNzdWVkKSkgIT0gXAorCQkJCQkoaG9zdF9wdnQuc2F0YV9kd2Nfc2FjdGl2ZV9pc3N1ZWQpKSB7CisJCWRldl93YXJuKGFwLT5kZXYsICJCYWQgdGFnIG1hc2s/ICBzYWN0aXZlPTB4JTA4eCAiCisJCQkgIihob3N0X3B2dC5zYXRhX2R3Y19zYWN0aXZlX2lzc3VlZCk9MHglMDh4ICB0YWdfbWFzayIKKwkJCSAiPTB4JTA4eFxuIiwgc2FjdGl2ZSwgaG9zdF9wdnQuc2F0YV9kd2Nfc2FjdGl2ZV9pc3N1ZWQsCisJCQkgIHRhZ19tYXNrKTsKKwl9CisKKwkvKiByZWFkIGp1c3QgdG8gY2xlYXIgLi4uIG5vdCBiYWQgaWYgY3VycmVudGx5IHN0aWxsIGJ1c3kgKi8KKwlzdGF0dXMgPSBhcC0+b3BzLT5zZmZfY2hlY2tfc3RhdHVzKGFwKTsKKwlkZXZfZGJnKGFwLT5kZXYsICIlcyBBVEEgc3RhdHVzIHJlZ2lzdGVyPTB4JXhcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCisJdGFnID0gMDsKKwludW1fcHJvY2Vzc2VkID0gMDsKKwl3aGlsZSAodGFnX21hc2spIHsKKwkJbnVtX3Byb2Nlc3NlZCsrOworCQl3aGlsZSAoISh0YWdfbWFzayAmIDB4MDAwMDAwMDEpKSB7CisJCQl0YWcrKzsKKwkJCXRhZ19tYXNrIDw8PSAxOworCQl9CisKKwkJdGFnX21hc2sgJj0gKH4weDAwMDAwMDAxKTsKKwkJcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIHRhZyk7CisKKwkJLyogVG8gYmUgcGlja2VkIHVwIGJ5IGNvbXBsZXRpb24gZnVuY3Rpb25zICovCisJCXFjLT5hcC0+bGluay5hY3RpdmVfdGFnID0gdGFnOworCQloc2RldnAtPmNtZF9pc3N1ZWRbdGFnXSA9IFNBVEFfRFdDX0NNRF9JU1NVRURfTk9UOworCisJCS8qIExldCBsaWJhdGEvc2NzaSBsYXllcnMgaGFuZGxlIGVycm9yICovCisJCWlmIChzdGF0dXMgJiBBVEFfRVJSKSB7CisJCQlkZXZfZGJnKGFwLT5kZXYsICIlcyBBVEFfRVJSICgweCV4KVxuIiwgX19mdW5jX18sCisJCQkJc3RhdHVzKTsKKwkJCXNhdGFfZHdjX3FjX2NvbXBsZXRlKGFwLCBxYywgMSk7CisJCQloYW5kbGVkID0gMTsKKwkJCWdvdG8gRE9ORTsKKwkJfQorCisJCS8qIFByb2Nlc3MgY29tcGxldGVkIGNvbW1hbmQgKi8KKwkJZGV2X2RiZyhhcC0+ZGV2LCAiJXMgTkNRIGNvbW1hbmQsIHByb3RvY29sOiAlc1xuIiwgX19mdW5jX18sCisJCQlhdGFfZ2V0X2NtZF9kZXNjcmlwdChxYy0+dGYucHJvdG9jb2wpKTsKKwkJaWYgKGF0YV9pc19kbWEocWMtPnRmLnByb3RvY29sKSkgeworCQkJaG9zdF9wdnQuZG1hX2ludGVycnVwdF9jb3VudCsrOworCQkJaWYgKGhzZGV2cC0+ZG1hX3BlbmRpbmdbdGFnXSA9PSBcCisJCQkJCVNBVEFfRFdDX0RNQV9QRU5ESU5HX05PTkUpCisJCQkJZGV2X3dhcm4oYXAtPmRldiwgIiVzOiBETUEgbm90IHBlbmRpbmc/XG4iLAorCQkJCQlfX2Z1bmNfXyk7CisJCQlpZiAoKGhvc3RfcHZ0LmRtYV9pbnRlcnJ1cHRfY291bnQgJSAyKSA9PSAwKQorCQkJCXNhdGFfZHdjX2RtYV94ZmVyX2NvbXBsZXRlKGFwLCAxKTsKKwkJfSBlbHNlIHsKKwkJCWlmICh1bmxpa2VseShzYXRhX2R3Y19xY19jb21wbGV0ZShhcCwgcWMsIDEpKSkKKwkJCQlnb3RvIFNUSUxMQlVTWTsKKwkJfQorCQljb250aW51ZTsKKworU1RJTExCVVNZOgorCQlhcC0+c3RhdHMuaWRsZV9pcnErKzsKKwkJZGV2X3dhcm4oYXAtPmRldiwgIlNUSUxMIEJVU1kgSVJRIGF0YSVkOiBpcnEgdHJhcFxuIiwKKwkJCWFwLT5wcmludF9pZCk7CisJfSAvKiB3aGlsZSB0YWdfbWFzayAqLworCisJLyoKKwkgKiBDaGVjayB0byBzZWUgaWYgYW55IGNvbW1hbmRzIGNvbXBsZXRlZCB3aGlsZSB3ZSB3ZXJlIHByb2Nlc3Npbmcgb3VyCisJICogaW5pdGlhbCBzZXQgb2YgY29tcGxldGVkIGNvbW1hbmRzIChyZWFkIHN0YXR1cyBjbGVhcnMgaW50ZXJydXB0cywKKwkgKiBzbyB3ZSBtaWdodCBtaXNzIGEgY29tcGxldGVkIGNvbW1hbmQgaW50ZXJydXB0IGlmIG9uZSBjYW1lIGluIHdoaWxlCisJICogd2Ugd2VyZSBwcm9jZXNzaW5nIC0td2UgcmVhZCBzdGF0dXMgYXMgcGFydCBvZiBwcm9jZXNzaW5nIGEgY29tcGxldGVkCisJICogY29tbWFuZCkuCisJICovCisJc2FjdGl2ZTIgPSBjb3JlX3Njcl9yZWFkKFNDUl9BQ1RJVkUpOworCWlmIChzYWN0aXZlMiAhPSBzYWN0aXZlKSB7CisJCWRldl9kYmcoYXAtPmRldiwgIk1vcmUgY29tcGxldGVkIC0gc2FjdGl2ZT0weCV4IHNhY3RpdmUyIgorCQkJIj0weCV4XG4iLCBzYWN0aXZlLCBzYWN0aXZlMik7CisJfQorCWhhbmRsZWQgPSAxOworCitET05FOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKK30KKworc3RhdGljIHZvaWQgc2F0YV9kd2NfY2xlYXJfZG1hY3Ioc3RydWN0IHNhdGFfZHdjX2RldmljZV9wb3J0ICpoc2RldnAsIHU4IHRhZykKK3sKKwlzdHJ1Y3Qgc2F0YV9kd2NfZGV2aWNlICpoc2RldiA9IEhTREVWX0ZST01fSFNERVZQKGhzZGV2cCk7CisKKwlpZiAoaHNkZXZwLT5kbWFfcGVuZGluZ1t0YWddID09IFNBVEFfRFdDX0RNQV9QRU5ESU5HX1JYKSB7CisJCW91dF9sZTMyKCYoaHNkZXYtPnNhdGFfZHdjX3JlZ3MtPmRtYWNyKSwKKwkJCSBTQVRBX0RXQ19ETUFDUl9SWF9DTEVBUigKKwkJCQkgaW5fbGUzMigmKGhzZGV2LT5zYXRhX2R3Y19yZWdzLT5kbWFjcikpKSk7CisJfSBlbHNlIGlmIChoc2RldnAtPmRtYV9wZW5kaW5nW3RhZ10gPT0gU0FUQV9EV0NfRE1BX1BFTkRJTkdfVFgpIHsKKwkJb3V0X2xlMzIoJihoc2Rldi0+c2F0YV9kd2NfcmVncy0+ZG1hY3IpLAorCQkJIFNBVEFfRFdDX0RNQUNSX1RYX0NMRUFSKAorCQkJCSBpbl9sZTMyKCYoaHNkZXYtPnNhdGFfZHdjX3JlZ3MtPmRtYWNyKSkpKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBpdCBpbmRpY2F0ZXMgdGhlIGRyaXZlciBpcyBvdXQgb2YKKwkJICogc3luYy4gIElmIGl0IGRvZXMgaGFwcGVuLCBjbGVhciBkbWFjciBhbnl3YXkuCisJCSAqLworCQlkZXZfZXJyKGhvc3RfcHZ0LmR3Y19kZXYsICIlcyBETUEgcHJvdG9jb2wgUlggYW5kIgorCQkJIlRYIERNQSBub3QgcGVuZGluZyB0YWc9MHglMDJ4IHBlbmRpbmc9JWQiCisJCQkiIGRtYWNyOiAweCUwOHhcbiIsIF9fZnVuY19fLCB0YWcsCisJCQloc2RldnAtPmRtYV9wZW5kaW5nW3RhZ10sCisJCQlpbl9sZTMyKCYoaHNkZXYtPnNhdGFfZHdjX3JlZ3MtPmRtYWNyKSkpOworCQlvdXRfbGUzMigmKGhzZGV2LT5zYXRhX2R3Y19yZWdzLT5kbWFjciksCisJCQlTQVRBX0RXQ19ETUFDUl9UWFJYQ0hfQ0xFQVIpOworCX0KK30KKworc3RhdGljIHZvaWQgc2F0YV9kd2NfZG1hX3hmZXJfY29tcGxldGUoc3RydWN0IGF0YV9wb3J0ICphcCwgdTMyIGNoZWNrX3N0YXR1cykKK3sKKwlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjOworCXN0cnVjdCBzYXRhX2R3Y19kZXZpY2VfcG9ydCAqaHNkZXZwID0gSFNERVZQX0ZST01fQVAoYXApOworCXN0cnVjdCBzYXRhX2R3Y19kZXZpY2UgKmhzZGV2ID0gSFNERVZfRlJPTV9BUChhcCk7CisJdTggdGFnID0gMDsKKworCXRhZyA9IGFwLT5saW5rLmFjdGl2ZV90YWc7CisJcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIHRhZyk7CisJaWYgKCFxYykgeworCQlkZXZfZXJyKGFwLT5kZXYsICJmYWlsZWQgdG8gZ2V0IHFjIik7CisJCXJldHVybjsKKwl9CisKKyNpZmRlZiBERUJVR19OQ1EKKwlpZiAodGFnID4gMCkgeworCQlkZXZfaW5mbyhhcC0+ZGV2LCAiJXMgdGFnPSV1IGNtZD0weCUwMnggZG1hIGRpcj0lcyBwcm90bz0lcyAiCisJCQkgImRtYWNyPTB4JTA4eFxuIiwgX19mdW5jX18sIHFjLT50YWcsIHFjLT50Zi5jb21tYW5kLAorCQkJIGF0YV9nZXRfY21kX2Rlc2NyaXB0KHFjLT5kbWFfZGlyKSwKKwkJCSBhdGFfZ2V0X2NtZF9kZXNjcmlwdChxYy0+dGYucHJvdG9jb2wpLAorCQkJIGluX2xlMzIoJihoc2Rldi0+c2F0YV9kd2NfcmVncy0+ZG1hY3IpKSk7CisJfQorI2VuZGlmCisKKwlpZiAoYXRhX2lzX2RtYShxYy0+dGYucHJvdG9jb2wpKSB7CisJCWlmIChoc2RldnAtPmRtYV9wZW5kaW5nW3RhZ10gPT0gU0FUQV9EV0NfRE1BX1BFTkRJTkdfTk9ORSkgeworCQkJZGV2X2VycihhcC0+ZGV2LCAiJXMgRE1BIHByb3RvY29sIFJYIGFuZCBUWCBETUEgbm90ICIKKwkJCQkicGVuZGluZyBkbWFjcjogMHglMDh4XG4iLCBfX2Z1bmNfXywKKwkJCQlpbl9sZTMyKCYoaHNkZXYtPnNhdGFfZHdjX3JlZ3MtPmRtYWNyKSkpOworCQl9CisKKwkJaHNkZXZwLT5kbWFfcGVuZGluZ1t0YWddID0gU0FUQV9EV0NfRE1BX1BFTkRJTkdfTk9ORTsKKwkJc2F0YV9kd2NfcWNfY29tcGxldGUoYXAsIHFjLCBjaGVja19zdGF0dXMpOworCQlhcC0+bGluay5hY3RpdmVfdGFnID0gQVRBX1RBR19QT0lTT047CisJfSBlbHNlIHsKKwkJc2F0YV9kd2NfcWNfY29tcGxldGUoYXAsIHFjLCBjaGVja19zdGF0dXMpOworCX0KK30KKworc3RhdGljIGludCBzYXRhX2R3Y19xY19jb21wbGV0ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjLAorCQkJCXUzMiBjaGVja19zdGF0dXMpCit7CisJdTggc3RhdHVzID0gMDsKKwl1MzIgbWFzayA9IDB4MDsKKwl1OCB0YWcgPSBxYy0+dGFnOworCXN0cnVjdCBzYXRhX2R3Y19kZXZpY2VfcG9ydCAqaHNkZXZwID0gSFNERVZQX0ZST01fQVAoYXApOworCWhvc3RfcHZ0LnNhdGFfZHdjX3NhY3RpdmVfcXVldWVkID0gMDsKKwlkZXZfZGJnKGFwLT5kZXYsICIlcyBjaGVja3N0YXR1cz8gJXhcbiIsIF9fZnVuY19fLCBjaGVja19zdGF0dXMpOworCisJaWYgKGhzZGV2cC0+ZG1hX3BlbmRpbmdbdGFnXSA9PSBTQVRBX0RXQ19ETUFfUEVORElOR19UWCkKKwkJZGV2X2VycihhcC0+ZGV2LCAiVFggRE1BIFBFTkRJTkdcbiIpOworCWVsc2UgaWYgKGhzZGV2cC0+ZG1hX3BlbmRpbmdbdGFnXSA9PSBTQVRBX0RXQ19ETUFfUEVORElOR19SWCkKKwkJZGV2X2VycihhcC0+ZGV2LCAiUlggRE1BIFBFTkRJTkdcbiIpOworCWRldl9kYmcoYXAtPmRldiwgIlFDIGNvbXBsZXRlIGNtZD0weCUwMnggc3RhdHVzPTB4JTAyeCBhdGEldToiCisJCSIgcHJvdG9jb2w9JWRcbiIsIHFjLT50Zi5jb21tYW5kLCBzdGF0dXMsIGFwLT5wcmludF9pZCwKKwkJIHFjLT50Zi5wcm90b2NvbCk7CisKKwkvKiBjbGVhciBhY3RpdmUgYml0ICovCisJbWFzayA9ICh+KHFjbWRfdGFnX3RvX21hc2sodGFnKSkpOworCWhvc3RfcHZ0LnNhdGFfZHdjX3NhY3RpdmVfcXVldWVkID0gKGhvc3RfcHZ0LnNhdGFfZHdjX3NhY3RpdmVfcXVldWVkKSBcCisJCQkJCQkmIG1hc2s7CisJaG9zdF9wdnQuc2F0YV9kd2Nfc2FjdGl2ZV9pc3N1ZWQgPSAoaG9zdF9wdnQuc2F0YV9kd2Nfc2FjdGl2ZV9pc3N1ZWQpIFwKKwkJCQkJCSYgbWFzazsKKwlhdGFfcWNfY29tcGxldGUocWMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzYXRhX2R3Y19lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3Qgc2F0YV9kd2NfZGV2aWNlICpoc2RldikKK3sKKwkvKiBFbmFibGUgc2VsZWN0aXZlIGludGVycnVwdHMgYnkgc2V0dGluZyB0aGUgaW50ZXJydXB0IG1hc2tyZWdpc3RlciovCisJb3V0X2xlMzIoJmhzZGV2LT5zYXRhX2R3Y19yZWdzLT5pbnRtciwKKwkJIFNBVEFfRFdDX0lOVE1SX0VSUk0gfAorCQkgU0FUQV9EV0NfSU5UTVJfTkVXRlBNIHwKKwkJIFNBVEFfRFdDX0lOVE1SX1BNQUJSVE0gfAorCQkgU0FUQV9EV0NfSU5UTVJfRE1BVE0pOworCS8qCisJICogVW5tYXNrIHRoZSBlcnJvciBiaXRzIHRoYXQgc2hvdWxkIHRyaWdnZXIgYW4gZXJyb3IgaW50ZXJydXB0IGJ5CisJICogc2V0dGluZyB0aGUgZXJyb3IgbWFzayByZWdpc3Rlci4KKwkgKi8KKwlvdXRfbGUzMigmaHNkZXYtPnNhdGFfZHdjX3JlZ3MtPmVycm1yLCBTQVRBX0RXQ19TRVJST1JfRVJSX0JJVFMpOworCisJZGV2X2RiZyhob3N0X3B2dC5kd2NfZGV2LCAiJXM6IElOVE1SID0gMHglMDh4LCBFUlJNUiA9IDB4JTA4eFxuIiwKKwkJIF9fZnVuY19fLCBpbl9sZTMyKCZoc2Rldi0+c2F0YV9kd2NfcmVncy0+aW50bXIpLAorCQlpbl9sZTMyKCZoc2Rldi0+c2F0YV9kd2NfcmVncy0+ZXJybXIpKTsKK30KKworc3RhdGljIHZvaWQgc2F0YV9kd2Nfc2V0dXBfcG9ydChzdHJ1Y3QgYXRhX2lvcG9ydHMgKnBvcnQsIHVuc2lnbmVkIGxvbmcgYmFzZSkKK3sKKwlwb3J0LT5jbWRfYWRkciA9ICh2b2lkICopYmFzZSArIDB4MDA7CisJcG9ydC0+ZGF0YV9hZGRyID0gKHZvaWQgKiliYXNlICsgMHgwMDsKKworCXBvcnQtPmVycm9yX2FkZHIgPSAodm9pZCAqKWJhc2UgKyAweDA0OworCXBvcnQtPmZlYXR1cmVfYWRkciA9ICh2b2lkICopYmFzZSArIDB4MDQ7CisKKwlwb3J0LT5uc2VjdF9hZGRyID0gKHZvaWQgKiliYXNlICsgMHgwODsKKworCXBvcnQtPmxiYWxfYWRkciA9ICh2b2lkICopYmFzZSArIDB4MGM7CisJcG9ydC0+bGJhbV9hZGRyID0gKHZvaWQgKiliYXNlICsgMHgxMDsKKwlwb3J0LT5sYmFoX2FkZHIgPSAodm9pZCAqKWJhc2UgKyAweDE0OworCisJcG9ydC0+ZGV2aWNlX2FkZHIgPSAodm9pZCAqKWJhc2UgKyAweDE4OworCXBvcnQtPmNvbW1hbmRfYWRkciA9ICh2b2lkICopYmFzZSArIDB4MWM7CisJcG9ydC0+c3RhdHVzX2FkZHIgPSAodm9pZCAqKWJhc2UgKyAweDFjOworCisJcG9ydC0+YWx0c3RhdHVzX2FkZHIgPSAodm9pZCAqKWJhc2UgKyAweDIwOworCXBvcnQtPmN0bF9hZGRyID0gKHZvaWQgKiliYXNlICsgMHgyMDsKK30KKworLyoKKyAqIEZ1bmN0aW9uIDogc2F0YV9kd2NfcG9ydF9zdGFydAorICogYXJndW1lbnRzIDogc3RydWN0IGF0YV9pb3BvcnRzICpwb3J0CisgKiBSZXR1cm4gdmFsdWUgOiByZXR1cm5zIDAgaWYgc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2UKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHRoZSBzY2F0dGVyIGdhdGhlciBMTEkgdGFibGUgZm9yIEFIQiBETUEKKyAqLworc3RhdGljIGludCBzYXRhX2R3Y19wb3J0X3N0YXJ0KHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJaW50IGVyciA9IDA7CisJc3RydWN0IHNhdGFfZHdjX2RldmljZSAqaHNkZXY7CisJc3RydWN0IHNhdGFfZHdjX2RldmljZV9wb3J0ICpoc2RldnAgPSBOVUxMOworCXN0cnVjdCBkZXZpY2UgKnBkZXY7CisJaW50IGk7CisKKwloc2RldiA9IEhTREVWX0ZST01fQVAoYXApOworCisJZGV2X2RiZyhhcC0+ZGV2LCAiJXM6IHBvcnRfbm89JWRcbiIsIF9fZnVuY19fLCBhcC0+cG9ydF9ubyk7CisKKwloc2Rldi0+aG9zdCA9IGFwLT5ob3N0OworCXBkZXYgPSBhcC0+aG9zdC0+ZGV2OworCWlmICghcGRldikgeworCQlkZXZfZXJyKGFwLT5kZXYsICIlczogbm8gYXAtPmhvc3QtPmRldlxuIiwgX19mdW5jX18pOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIENMRUFOVVA7CisJfQorCisJLyogQWxsb2NhdGUgUG9ydCBTdHJ1Y3QgKi8KKwloc2RldnAgPSBremFsbG9jKHNpemVvZigqaHNkZXZwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFoc2RldnApIHsKKwkJZGV2X2VycihhcC0+ZGV2LCAiJXM6IGttYWxsb2MgZmFpbGVkIGZvciBoc2RldnBcbiIsIF9fZnVuY19fKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBDTEVBTlVQOworCX0KKwloc2RldnAtPmhzZGV2ID0gaHNkZXY7CisKKwlmb3IgKGkgPSAwOyBpIDwgU0FUQV9EV0NfUUNNRF9NQVg7IGkrKykKKwkJaHNkZXZwLT5jbWRfaXNzdWVkW2ldID0gU0FUQV9EV0NfQ01EX0lTU1VFRF9OT1Q7CisKKwlhcC0+Ym1kbWFfcHJkID0gMDsJLyogc2V0IHRoZXNlIHNvIGxpYmF0YSBkb2Vzbid0IHVzZSB0aGVtICovCisJYXAtPmJtZG1hX3ByZF9kbWEgPSAwOworCisJLyoKKwkgKiBETUEgLSBBc3NpZ24gc2NhdHRlciBnYXRoZXIgTExJIHRhYmxlLiBXZSBjYW4ndCB1c2UgdGhlIGxpYmF0YQorCSAqIHZlcnNpb24gc2luY2UgaXQncyBQUkQgaXMgSURFIFBDSSBzcGVjaWZpYy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgU0FUQV9EV0NfUUNNRF9NQVg7IGkrKykgeworCQloc2RldnAtPmxsaXRbaV0gPSBkbWFfYWxsb2NfY29oZXJlbnQocGRldiwKKwkJCQkJCSAgICAgU0FUQV9EV0NfRE1BQ19MTElfVEJMX1NaLAorCQkJCQkJICAgICAmKGhzZGV2cC0+bGxpdF9kbWFbaV0pLAorCQkJCQkJICAgICBHRlBfQVRPTUlDKTsKKwkJaWYgKCFoc2RldnAtPmxsaXRbaV0pIHsKKwkJCWRldl9lcnIoYXAtPmRldiwgIiVzOiBkbWFfYWxsb2NfY29oZXJlbnQgZmFpbGVkXG4iLAorCQkJCSBfX2Z1bmNfXyk7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBDTEVBTlVQOworCQl9CisJfQorCisJaWYgKGFwLT5wb3J0X25vID09IDApICB7CisJCWRldl9kYmcoYXAtPmRldiwgIiVzOiBjbGVhcmluZyBUWENIRU4sIFJYQ0hFTiBpbiBETUFDXG4iLAorCQkJX19mdW5jX18pOworCQlvdXRfbGUzMigmaHNkZXYtPnNhdGFfZHdjX3JlZ3MtPmRtYWNyLAorCQkJIFNBVEFfRFdDX0RNQUNSX1RYUlhDSF9DTEVBUik7CisKKwkJZGV2X2RiZyhhcC0+ZGV2LCAiJXM6IHNldHRpbmcgYnVyc3Qgc2l6ZSBpbiBEQlRTUlxuIiwKKwkJCSBfX2Z1bmNfXyk7CisJCW91dF9sZTMyKCZoc2Rldi0+c2F0YV9kd2NfcmVncy0+ZGJ0c3IsCisJCQkgKFNBVEFfRFdDX0RCVFNSX01XUihBSEJfRE1BX0JSU1RfREZMVCkgfAorCQkJICBTQVRBX0RXQ19EQlRTUl9NUkQoQUhCX0RNQV9CUlNUX0RGTFQpKSk7CisJfQorCisJLyogQ2xlYXIgYW55IGVycm9yIGJpdHMgYmVmb3JlIGxpYmF0YSBzdGFydHMgaXNzdWluZyBjb21tYW5kcyAqLworCWNsZWFyX3NlcnJvcigpOworCWFwLT5wcml2YXRlX2RhdGEgPSBoc2RldnA7CisKK0NMRUFOVVA6CisJaWYgKGVycikgeworCQlzYXRhX2R3Y19wb3J0X3N0b3AoYXApOworCQlkZXZfZGJnKGFwLT5kZXYsICIlczogZmFpbFxuIiwgX19mdW5jX18pOworCX0gZWxzZSB7CisJCWRldl9kYmcoYXAtPmRldiwgIiVzOiBkb25lXG4iLCBfX2Z1bmNfXyk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgc2F0YV9kd2NfcG9ydF9zdG9wKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJaW50IGk7CisJc3RydWN0IHNhdGFfZHdjX2RldmljZSAqaHNkZXYgPSBIU0RFVl9GUk9NX0FQKGFwKTsKKwlzdHJ1Y3Qgc2F0YV9kd2NfZGV2aWNlX3BvcnQgKmhzZGV2cCA9IEhTREVWUF9GUk9NX0FQKGFwKTsKKworCWRldl9kYmcoYXAtPmRldiwgIiVzOiBhcC0+aWQgPSAlZFxuIiwgX19mdW5jX18sIGFwLT5wcmludF9pZCk7CisKKwlpZiAoaHNkZXZwICYmIGhzZGV2KSB7CisJCS8qIGRlYWxsb2NhdGUgTExJIHRhYmxlICovCisJCWZvciAoaSA9IDA7IGkgPCBTQVRBX0RXQ19RQ01EX01BWDsgaSsrKSB7CisJCQlkbWFfZnJlZV9jb2hlcmVudChhcC0+aG9zdC0+ZGV2LAorCQkJCQkgIFNBVEFfRFdDX0RNQUNfTExJX1RCTF9TWiwKKwkJCQkJIGhzZGV2cC0+bGxpdFtpXSwgaHNkZXZwLT5sbGl0X2RtYVtpXSk7CisJCX0KKworCQlrZnJlZShoc2RldnApOworCX0KKwlhcC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKK30KKworLyoKKyAqIEZ1bmN0aW9uIDogc2F0YV9kd2NfZXhlY19jb21tYW5kX2J5X3RhZworICogYXJndW1lbnRzIDogYXRhX3BvcnQgKmFwLCBhdGFfdGFza2ZpbGUgKnRmLCB1OCB0YWcsIHUzMiBjbWRfaXNzdWVkCisgKiBSZXR1cm4gdmFsdWUgOiBOb25lCisgKiBUaGlzIGZ1bmN0aW9uIGtlZXBzIHRyYWNrIG9mIGluZGl2aWR1YWwgY29tbWFuZCB0YWcgaWRzIGFuZCBjYWxscworICogYXRhX2V4ZWNfY29tbWFuZCBpbiBsaWJhdGEKKyAqLworc3RhdGljIHZvaWQgc2F0YV9kd2NfZXhlY19jb21tYW5kX2J5X3RhZyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLAorCQkJCQkgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYsCisJCQkJCSB1OCB0YWcsIHUzMiBjbWRfaXNzdWVkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHNhdGFfZHdjX2RldmljZV9wb3J0ICpoc2RldnAgPSBIU0RFVlBfRlJPTV9BUChhcCk7CisKKwlkZXZfZGJnKGFwLT5kZXYsICIlcyBjbWQoMHglMDJ4KTogJXMgdGFnPSVkXG4iLCBfX2Z1bmNfXywgdGYtPmNvbW1hbmQsCisJCWF0YV9nZXRfY21kX2Rlc2NyaXB0KHRmKSwgdGFnKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhcC0+aG9zdC0+bG9jaywgZmxhZ3MpOworCWhzZGV2cC0+Y21kX2lzc3VlZFt0YWddID0gY21kX2lzc3VlZDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcC0+aG9zdC0+bG9jaywgZmxhZ3MpOworCS8qCisJICogQ2xlYXIgU0Vycm9yIGJlZm9yZSBleGVjdXRpbmcgYSBuZXcgY29tbWFuZC4KKwkgKiBzYXRhX2R3Y19zY3Jfd3JpdGUgYW5kIHJlYWQgY2FuIG5vdCBiZSB1c2VkIGhlcmUuIENsZWFyaW5nIHRoZSBQTQorCSAqIG1hbmFnZWQgU0Vycm9yIHJlZ2lzdGVyIGZvciB0aGUgZGlzayBuZWVkcyB0byBiZSBkb25lIGJlZm9yZSB0aGUKKwkgKiB0YXNrIGZpbGUgaXMgbG9hZGVkLgorCSAqLworCWNsZWFyX3NlcnJvcigpOworCWF0YV9zZmZfZXhlY19jb21tYW5kKGFwLCB0Zik7Cit9CisKK3N0YXRpYyB2b2lkIHNhdGFfZHdjX2JtZG1hX3NldHVwX2J5X3RhZyhzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjLCB1OCB0YWcpCit7CisJc2F0YV9kd2NfZXhlY19jb21tYW5kX2J5X3RhZyhxYy0+YXAsICZxYy0+dGYsIHRhZywKKwkJCQkgICAgIFNBVEFfRFdDX0NNRF9JU1NVRURfUEVORCk7Cit9CisKK3N0YXRpYyB2b2lkIHNhdGFfZHdjX2JtZG1hX3NldHVwKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJdTggdGFnID0gcWMtPnRhZzsKKworCWlmIChhdGFfaXNfbmNxKHFjLT50Zi5wcm90b2NvbCkpIHsKKwkJZGV2X2RiZyhxYy0+YXAtPmRldiwgIiVzOiBhcC0+bGluay5zYWN0aXZlPTB4JTA4eCB0YWc9JWRcbiIsCisJCQlfX2Z1bmNfXywgcWMtPmFwLT5saW5rLnNhY3RpdmUsIHRhZyk7CisJfSBlbHNlIHsKKwkJdGFnID0gMDsKKwl9CisJc2F0YV9kd2NfYm1kbWFfc2V0dXBfYnlfdGFnKHFjLCB0YWcpOworfQorCitzdGF0aWMgdm9pZCBzYXRhX2R3Y19ibWRtYV9zdGFydF9ieV90YWcoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYywgdTggdGFnKQoreworCWludCBzdGFydF9kbWE7CisJdTMyIHJlZywgZG1hX2NoYW47CisJc3RydWN0IHNhdGFfZHdjX2RldmljZSAqaHNkZXYgPSBIU0RFVl9GUk9NX1FDKHFjKTsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCXN0cnVjdCBzYXRhX2R3Y19kZXZpY2VfcG9ydCAqaHNkZXZwID0gSFNERVZQX0ZST01fQVAoYXApOworCWludCBkaXIgPSBxYy0+ZG1hX2RpcjsKKwlkbWFfY2hhbiA9IGhzZGV2cC0+ZG1hX2NoYW5bdGFnXTsKKworCWlmIChoc2RldnAtPmNtZF9pc3N1ZWRbdGFnXSAhPSBTQVRBX0RXQ19DTURfSVNTVUVEX05PVCkgeworCQlzdGFydF9kbWEgPSAxOworCQlpZiAoZGlyID09IERNQV9UT19ERVZJQ0UpCisJCQloc2RldnAtPmRtYV9wZW5kaW5nW3RhZ10gPSBTQVRBX0RXQ19ETUFfUEVORElOR19UWDsKKwkJZWxzZQorCQkJaHNkZXZwLT5kbWFfcGVuZGluZ1t0YWddID0gU0FUQV9EV0NfRE1BX1BFTkRJTkdfUlg7CisJfSBlbHNlIHsKKwkJZGV2X2VycihhcC0+ZGV2LCAiJXM6IENvbW1hbmQgbm90IHBlbmRpbmcgY21kX2lzc3VlZD0lZCAiCisJCQkiKHRhZz0lZCkgRE1BIE5PVCBzdGFydGVkXG4iLCBfX2Z1bmNfXywKKwkJCWhzZGV2cC0+Y21kX2lzc3VlZFt0YWddLCB0YWcpOworCQlzdGFydF9kbWEgPSAwOworCX0KKworCWRldl9kYmcoYXAtPmRldiwgIiVzIHFjPSVwIHRhZzogJXggY21kOiAweCUwMnggZG1hX2RpcjogJXMgIgorCQkic3RhcnRfZG1hPyAleFxuIiwgX19mdW5jX18sIHFjLCB0YWcsIHFjLT50Zi5jb21tYW5kLAorCQlhdGFfZ2V0X2NtZF9kZXNjcmlwdChxYy0+ZG1hX2RpciksIHN0YXJ0X2RtYSk7CisJc2F0YV9kd2NfdGZfZHVtcCgmKHFjLT50ZikpOworCisJaWYgKHN0YXJ0X2RtYSkgeworCQlyZWcgPSBjb3JlX3Njcl9yZWFkKFNDUl9FUlJPUik7CisJCWlmIChyZWcgJiBTQVRBX0RXQ19TRVJST1JfRVJSX0JJVFMpIHsKKwkJCWRldl9lcnIoYXAtPmRldiwgIiVzOiAqKioqKiogU0Vycm9yPTB4JTA4eCAqKioqKipcbiIsCisJCQkJX19mdW5jX18sIHJlZyk7CisJCX0KKworCQlpZiAoZGlyID09IERNQV9UT19ERVZJQ0UpCisJCQlvdXRfbGUzMigmaHNkZXYtPnNhdGFfZHdjX3JlZ3MtPmRtYWNyLAorCQkJCVNBVEFfRFdDX0RNQUNSX1RYQ0hFTik7CisJCWVsc2UKKwkJCW91dF9sZTMyKCZoc2Rldi0+c2F0YV9kd2NfcmVncy0+ZG1hY3IsCisJCQkJU0FUQV9EV0NfRE1BQ1JfUlhDSEVOKTsKKworCQkvKiBFbmFibGUgQUhCIERNQSB0cmFuc2ZlciBvbiB0aGUgc3BlY2lmaWVkIGNoYW5uZWwgKi8KKwkJZG1hX2R3Y194ZmVyX3N0YXJ0KGRtYV9jaGFuKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNhdGFfZHdjX2JtZG1hX3N0YXJ0KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJdTggdGFnID0gcWMtPnRhZzsKKworCWlmIChhdGFfaXNfbmNxKHFjLT50Zi5wcm90b2NvbCkpIHsKKwkJZGV2X2RiZyhxYy0+YXAtPmRldiwgIiVzOiBhcC0+bGluay5zYWN0aXZlPTB4JTA4eCB0YWc9JWRcbiIsCisJCQlfX2Z1bmNfXywgcWMtPmFwLT5saW5rLnNhY3RpdmUsIHRhZyk7CisJfSBlbHNlIHsKKwkJdGFnID0gMDsKKwl9CisJZGV2X2RiZyhxYy0+YXAtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJc2F0YV9kd2NfYm1kbWFfc3RhcnRfYnlfdGFnKHFjLCB0YWcpOworfQorCisvKgorICogRnVuY3Rpb24gOiBzYXRhX2R3Y19xY19wcmVwX2J5X3RhZworICogYXJndW1lbnRzIDogYXRhX3F1ZXVlZF9jbWQgKnFjLCB1OCB0YWcKKyAqIFJldHVybiB2YWx1ZSA6IE5vbmUKKyAqIHFjX3ByZXAgZm9yIGEgcGFydGljdWxhciBxdWV1ZWQgY29tbWFuZCBiYXNlZCBvbiB0YWcKKyAqLworc3RhdGljIHZvaWQgc2F0YV9kd2NfcWNfcHJlcF9ieV90YWcoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYywgdTggdGFnKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBxYy0+c2c7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKKwl1MzIgZG1hX2NoYW47CisJc3RydWN0IHNhdGFfZHdjX2RldmljZSAqaHNkZXYgPSBIU0RFVl9GUk9NX0FQKGFwKTsKKwlzdHJ1Y3Qgc2F0YV9kd2NfZGV2aWNlX3BvcnQgKmhzZGV2cCA9IEhTREVWUF9GUk9NX0FQKGFwKTsKKwlpbnQgZXJyOworCisJZGV2X2RiZyhhcC0+ZGV2LCAiJXM6IHBvcnQ9JWQgZG1hIGRpcj0lcyBuX2VsZW09JWRcbiIsCisJCV9fZnVuY19fLCBhcC0+cG9ydF9ubywgYXRhX2dldF9jbWRfZGVzY3JpcHQocWMtPmRtYV9kaXIpLAorCQkgcWMtPm5fZWxlbSk7CisKKwlkbWFfY2hhbiA9IGRtYV9kd2NfeGZlcl9zZXR1cChzZywgcWMtPm5fZWxlbSwgaHNkZXZwLT5sbGl0W3RhZ10sCisJCQkJICAgICAgaHNkZXZwLT5sbGl0X2RtYVt0YWddLAorCQkJCSAgICAgICh2b2lkICpfX2lvbWVtKSgmaHNkZXYtPnNhdGFfZHdjX3JlZ3MtPlwKKwkJCQkgICAgICBkbWFkciksIHFjLT5kbWFfZGlyKTsKKwlpZiAoZG1hX2NoYW4gPCAwKSB7CisJCWRldl9lcnIoYXAtPmRldiwgIiVzOiBkbWFfZHdjX3hmZXJfc2V0dXAgcmV0dXJucyBlcnIgJWRcbiIsCisJCQlfX2Z1bmNfXywgZXJyKTsKKwkJcmV0dXJuOworCX0KKwloc2RldnAtPmRtYV9jaGFuW3RhZ10gPSBkbWFfY2hhbjsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBzYXRhX2R3Y19xY19pc3N1ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXUzMiBzYWN0aXZlOworCXU4IHRhZyA9IHFjLT50YWc7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKKworI2lmZGVmIERFQlVHX05DUQorCWlmIChxYy0+dGFnID4gMCB8fCBhcC0+bGluay5zYWN0aXZlID4gMSkKKwkJZGV2X2luZm8oYXAtPmRldiwgIiVzIGFwIGlkPSVkIGNtZCgweCUwMngpPSVzIHFjIHRhZz0lZCAiCisJCQkgInByb3Q9JXMgYXAgYWN0aXZlX3RhZz0weCUwOHggYXAgc2FjdGl2ZT0weCUwOHhcbiIsCisJCQkgX19mdW5jX18sIGFwLT5wcmludF9pZCwgcWMtPnRmLmNvbW1hbmQsCisJCQkgYXRhX2dldF9jbWRfZGVzY3JpcHQoJnFjLT50ZiksCisJCQkgcWMtPnRhZywgYXRhX2dldF9jbWRfZGVzY3JpcHQocWMtPnRmLnByb3RvY29sKSwKKwkJCSBhcC0+bGluay5hY3RpdmVfdGFnLCBhcC0+bGluay5zYWN0aXZlKTsKKyNlbmRpZgorCisJaWYgKCFhdGFfaXNfbmNxKHFjLT50Zi5wcm90b2NvbCkpCisJCXRhZyA9IDA7CisJc2F0YV9kd2NfcWNfcHJlcF9ieV90YWcocWMsIHRhZyk7CisKKwlpZiAoYXRhX2lzX25jcShxYy0+dGYucHJvdG9jb2wpKSB7CisJCXNhY3RpdmUgPSBjb3JlX3Njcl9yZWFkKFNDUl9BQ1RJVkUpOworCQlzYWN0aXZlIHw9ICgweDAwMDAwMDAxIDw8IHRhZyk7CisJCWNvcmVfc2NyX3dyaXRlKFNDUl9BQ1RJVkUsIHNhY3RpdmUpOworCisJCWRldl9kYmcocWMtPmFwLT5kZXYsICIlczogdGFnPSVkIGFwLT5saW5rLnNhY3RpdmUgPSAweCUwOHggIgorCQkJInNhY3RpdmU9MHglMDh4XG4iLCBfX2Z1bmNfXywgdGFnLCBxYy0+YXAtPmxpbmsuc2FjdGl2ZSwKKwkJCXNhY3RpdmUpOworCisJCWFwLT5vcHMtPnNmZl90Zl9sb2FkKGFwLCAmcWMtPnRmKTsKKwkJc2F0YV9kd2NfZXhlY19jb21tYW5kX2J5X3RhZyhhcCwgJnFjLT50ZiwgcWMtPnRhZywKKwkJCQkJICAgICBTQVRBX0RXQ19DTURfSVNTVUVEX1BFTkQpOworCX0gZWxzZSB7CisJCWF0YV9zZmZfcWNfaXNzdWUocWMpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZ1bmN0aW9uIDogc2F0YV9kd2NfcWNfcHJlcAorICogYXJndW1lbnRzIDogYXRhX3F1ZXVlZF9jbWQgKnFjCisgKiBSZXR1cm4gdmFsdWUgOiBOb25lCisgKiBxY19wcmVwIGZvciBhIHBhcnRpY3VsYXIgcXVldWVkIGNvbW1hbmQKKyAqLworCitzdGF0aWMgdm9pZCBzYXRhX2R3Y19xY19wcmVwKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJaWYgKChxYy0+ZG1hX2RpciA9PSBETUFfTk9ORSkgfHwgKHFjLT50Zi5wcm90b2NvbCA9PSBBVEFfUFJPVF9QSU8pKQorCQlyZXR1cm47CisKKyNpZmRlZiBERUJVR19OQ1EKKwlpZiAocWMtPnRhZyA+IDApCisJCWRldl9pbmZvKHFjLT5hcC0+ZGV2LCAiJXM6IHFjLT50YWc9JWQgYXAtPmFjdGl2ZV90YWc9MHglMDh4XG4iLAorCQkJIF9fZnVuY19fLCB0YWcsIHFjLT5hcC0+bGluay5hY3RpdmVfdGFnKTsKKworCXJldHVybiA7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgc2F0YV9kd2NfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCWFwLT5saW5rLmZsYWdzIHw9IEFUQV9MRkxBR19OT19IUlNUOworCWF0YV9zZmZfZXJyb3JfaGFuZGxlcihhcCk7Cit9CisKKy8qCisgKiBzY3NpIG1pZC1sYXllciBhbmQgbGliYXRhIGludGVyZmFjZSBzdHJ1Y3R1cmVzCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHNhdGFfZHdjX3NodCA9IHsKKwlBVEFfTkNRX1NIVChEUlZfTkFNRSksCisJLyoKKwkgKiB0ZXN0LW9ubHk6IEN1cnJlbnRseSB0aGlzIGRyaXZlciBkb2Vzbid0IGhhbmRsZSBOQ1EKKwkgKiBjb3JyZWN0bHkuIFdlIGVuYWJsZSBOQ1EgYnV0IHNldCB0aGUgcXVldWUgZGVwdGggdG8gYQorCSAqIG1heCBvZiAxLiBUaGlzIHdpbGwgZ2V0IGZpeGVkIGluIGluIGEgZnV0dXJlIHJlbGVhc2UuCisJICovCisJLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKKwkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCS8qIEFUQV9NQVhfUVVFVUUgKi8KKwkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCit9OworCitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgc2F0YV9kd2Nfb3BzID0geworCS5pbmhlcml0cwkJPSAmYXRhX3NmZl9wb3J0X29wcywKKworCS5lcnJvcl9oYW5kbGVyCQk9IHNhdGFfZHdjX2Vycm9yX2hhbmRsZXIsCisKKwkucWNfcHJlcAkJPSBzYXRhX2R3Y19xY19wcmVwLAorCS5xY19pc3N1ZQkJPSBzYXRhX2R3Y19xY19pc3N1ZSwKKworCS5zY3JfcmVhZAkJPSBzYXRhX2R3Y19zY3JfcmVhZCwKKwkuc2NyX3dyaXRlCQk9IHNhdGFfZHdjX3Njcl93cml0ZSwKKworCS5wb3J0X3N0YXJ0CQk9IHNhdGFfZHdjX3BvcnRfc3RhcnQsCisJLnBvcnRfc3RvcAkJPSBzYXRhX2R3Y19wb3J0X3N0b3AsCisKKwkuYm1kbWFfc2V0dXAJCT0gc2F0YV9kd2NfYm1kbWFfc2V0dXAsCisJLmJtZG1hX3N0YXJ0CQk9IHNhdGFfZHdjX2JtZG1hX3N0YXJ0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNhdGFfZHdjX3BvcnRfaW5mb1tdID0geworCXsKKwkJLmZsYWdzCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1kgfAorCQkJCSAgQVRBX0ZMQUdfTU1JTyB8IEFUQV9GTEFHX05DUSwKKwkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvIDAtNCAqLworCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAorCQkucG9ydF9vcHMJPSAmc2F0YV9kd2Nfb3BzLAorCX0sCit9OworCitzdGF0aWMgaW50IHNhdGFfZHdjX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAorCQkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCit7CisJc3RydWN0IHNhdGFfZHdjX2RldmljZSAqaHNkZXY7CisJdTMyIGlkciwgdmVyc2lvbnI7CisJY2hhciAqdmVyID0gKGNoYXIgKikmdmVyc2lvbnI7CisJdTggKmJhc2UgPSBOVUxMOworCWludCBlcnIgPSAwOworCWludCBpcnEsIHJjOworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdDsKKwlzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBwaSA9IHNhdGFfZHdjX3BvcnRfaW5mb1swXTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZwaSwgTlVMTCB9OworCisJLyogQWxsb2NhdGUgRFdDIFNBVEEgZGV2aWNlICovCisJaHNkZXYgPSBrbWFsbG9jKHNpemVvZigqaHNkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoaHNkZXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZvZmRldi0+ZGV2LCAia21hbGxvYyBmYWlsZWQgZm9yIGhzZGV2XG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJvcl9vdXQ7CisJfQorCW1lbXNldChoc2RldiwgMCwgc2l6ZW9mKCpoc2RldikpOworCisJLyogSW9yZW1hcCBTQVRBIHJlZ2lzdGVycyAqLworCWJhc2UgPSBvZl9pb21hcChvZmRldi0+ZGV2Lm9mX25vZGUsIDApOworCWlmICghYmFzZSkgeworCQlkZXZfZXJyKCZvZmRldi0+ZGV2LCAiaW9yZW1hcCBmYWlsZWQgZm9yIFNBVEEgcmVnaXN0ZXIiCisJCQkiIGFkZHJlc3NcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycm9yX291dDsKKwl9CisJaHNkZXYtPnJlZ19iYXNlID0gYmFzZTsKKwlkZXZfZGJnKCZvZmRldi0+ZGV2LCAiaW9yZW1hcCBkb25lIGZvciBTQVRBIHJlZ2lzdGVyIGFkZHJlc3NcbiIpOworCisJLyogU3lub3BzeXMgRFdDIFNBVEEgc3BlY2lmaWMgUmVnaXN0ZXJzICovCisJaHNkZXYtPnNhdGFfZHdjX3JlZ3MgPSAodm9pZCAqX19pb21lbSkoYmFzZSArIFNBVEFfRFdDX1JFR19PRkZTRVQpOworCisJLyogQWxsb2NhdGUgYW5kIGZpbGwgaG9zdCAqLworCWhvc3QgPSBhdGFfaG9zdF9hbGxvY19waW5mbygmb2ZkZXYtPmRldiwgcHBpLCBTQVRBX0RXQ19NQVhfUE9SVFMpOworCWlmICghaG9zdCkgeworCQlkZXZfZXJyKCZvZmRldi0+ZGV2LCAiYXRhX2hvc3RfYWxsb2NfcGluZm8gZmFpbGVkXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJvcl9vdXQ7CisJfQorCisJaG9zdC0+cHJpdmF0ZV9kYXRhID0gaHNkZXY7CisKKwkvKiBTZXR1cCBwb3J0ICovCisJaG9zdC0+cG9ydHNbMF0tPmlvYWRkci5jbWRfYWRkciA9IGJhc2U7CisJaG9zdC0+cG9ydHNbMF0tPmlvYWRkci5zY3JfYWRkciA9IGJhc2UgKyBTQVRBX0RXQ19TQ1JfT0ZGU0VUOworCWhvc3RfcHZ0LnNjcl9hZGRyX3NzdGF0dXMgPSBiYXNlICsgU0FUQV9EV0NfU0NSX09GRlNFVDsKKwlzYXRhX2R3Y19zZXR1cF9wb3J0KCZob3N0LT5wb3J0c1swXS0+aW9hZGRyLCAodW5zaWduZWQgbG9uZyliYXNlKTsKKworCS8qIFJlYWQgdGhlIElEIGFuZCBWZXJzaW9uIFJlZ2lzdGVycyAqLworCWlkciA9IGluX2xlMzIoJmhzZGV2LT5zYXRhX2R3Y19yZWdzLT5pZHIpOworCXZlcnNpb25yID0gaW5fbGUzMigmaHNkZXYtPnNhdGFfZHdjX3JlZ3MtPnZlcnNpb25yKTsKKwlkZXZfbm90aWNlKCZvZmRldi0+ZGV2LCAiaWQgJWQsIGNvbnRyb2xsZXIgdmVyc2lvbiAlYy4lYyVjXG4iLAorCQkgICBpZHIsIHZlclswXSwgdmVyWzFdLCB2ZXJbMl0pOworCisJLyogR2V0IFNBVEEgRE1BIGludGVycnVwdCBudW1iZXIgKi8KKwlpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChvZmRldi0+ZGV2Lm9mX25vZGUsIDEpOworCWlmIChpcnEgPT0gTk9fSVJRKSB7CisJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJubyBTQVRBIERNQSBpcnFcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycm9yX291dDsKKwl9CisKKwkvKiBHZXQgcGh5c2ljYWwgU0FUQSBETUEgcmVnaXN0ZXIgYmFzZSBhZGRyZXNzICovCisJaG9zdF9wdnQuc2F0YV9kbWFfcmVncyA9IG9mX2lvbWFwKG9mZGV2LT5kZXYub2Zfbm9kZSwgMSk7CisJaWYgKCEoaG9zdF9wdnQuc2F0YV9kbWFfcmVncykpIHsKKwkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkIGZvciBBSEJETUEgcmVnaXN0ZXIiCisJCQkiIGFkZHJlc3NcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycm9yX291dDsKKwl9CisKKwkvKiBTYXZlIGRldiBmb3IgbGF0ZXIgdXNlIGluIGRldl94eHgoKSByb3V0aW5lcyAqLworCWhvc3RfcHZ0LmR3Y19kZXYgPSAmb2ZkZXYtPmRldjsKKworCS8qIEluaXRpYWxpemUgQUhCIERNQUMgKi8KKwlkbWFfZHdjX2luaXQoaHNkZXYsIGlycSk7CisKKwkvKiBFbmFibGUgU0FUQSBJbnRlcnJ1cHRzICovCisJc2F0YV9kd2NfZW5hYmxlX2ludGVycnVwdHMoaHNkZXYpOworCisJLyogR2V0IFNBVEEgaW50ZXJydXB0IG51bWJlciAqLworCWlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG9mZGV2LT5kZXYub2Zfbm9kZSwgMCk7CisJaWYgKGlycSA9PSBOT19JUlEpIHsKKwkJZGV2X2Vycigmb2ZkZXYtPmRldiwgIm5vIFNBVEEgRE1BIGlycVxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3Jfb3V0OworCX0KKworCS8qCisJICogTm93LCByZWdpc3RlciB3aXRoIGxpYkFUQSBjb3JlLCB0aGlzIHdpbGwgYWxzbyBpbml0aWF0ZSB0aGUKKwkgKiBkZXZpY2UgZGlzY292ZXJ5IHByb2Nlc3MsIGludm9raW5nIG91ciBwb3J0X3N0YXJ0KCkgaGFuZGxlciAmCisJICogZXJyb3JfaGFuZGxlcigpIHRvIGV4ZWN1dGUgYSBkdW1teSBTb2Z0cmVzZXQgRUggc2Vzc2lvbgorCSAqLworCXJjID0gYXRhX2hvc3RfYWN0aXZhdGUoaG9zdCwgaXJxLCBzYXRhX2R3Y19pc3IsIDAsICZzYXRhX2R3Y19zaHQpOworCisJaWYgKHJjICE9IDApCisJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJmYWlsZWQgdG8gYWN0aXZhdGUgaG9zdCIpOworCisJZGV2X3NldF9kcnZkYXRhKCZvZmRldi0+ZGV2LCBob3N0KTsKKwlyZXR1cm4gMDsKKworZXJyb3Jfb3V0OgorCS8qIEZyZWUgU0FUQSBETUEgcmVzb3VyY2VzICovCisJZG1hX2R3Y19leGl0KGhzZGV2KTsKKworCWlmIChiYXNlKQorCQlpb3VubWFwKGJhc2UpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc2F0YV9kd2NfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZvZmRldi0+ZGV2OworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzYXRhX2R3Y19kZXZpY2UgKmhzZGV2ID0gaG9zdC0+cHJpdmF0ZV9kYXRhOworCisJYXRhX2hvc3RfZGV0YWNoKGhvc3QpOworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCisJLyogRnJlZSBTQVRBIERNQSByZXNvdXJjZXMgKi8KKwlkbWFfZHdjX2V4aXQoaHNkZXYpOworCisJaW91bm1hcChoc2Rldi0+cmVnX2Jhc2UpOworCWtmcmVlKGhzZGV2KTsKKwlrZnJlZShob3N0KTsKKwlkZXZfZGJnKCZvZmRldi0+ZGV2LCAiZG9uZVxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNhdGFfZHdjX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJhbWNjLHNhdGEtNDYwZXgiLCB9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgc2F0YV9kd2NfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBzYXRhX2R3Y19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBEUlZfTkFNRSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9IHNhdGFfZHdjX21hdGNoLAorCX0sCisJLnByb2JlID0gc2F0YV9kd2NfcHJvYmUsCisJLnJlbW92ZSA9IHNhdGFfZHdjX3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNhdGFfZHdjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4Jb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZzYXRhX2R3Y19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2F0YV9kd2NfZXhpdCh2b2lkKQoreworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZzYXRhX2R3Y19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzYXRhX2R3Y19pbml0KTsKK21vZHVsZV9leGl0KHNhdGFfZHdjX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXJrIE1pZXNmZWxkIDxtbWllc2ZlbGRAYW1jYy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRlc2lnbldhcmUgQ29yZXMgU0FUQSBjb250cm9sbGVyIGxvdyBsZXZlciBkcml2ZXIiKTsKK01PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMgYi9kcml2ZXJzL2F0YS9zYXRhX2ZzbC5jCmluZGV4IDYxYzg5YjUuLjE4Yzk4NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9mc2wuYwpAQCAtMTA5Niw3ICsxMDk2LDcgQEAKIHsKIAlzdHJ1Y3Qgc2F0YV9mc2xfaG9zdF9wcml2ICpob3N0X3ByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOwogCXZvaWQgX19pb21lbSAqaGNyX2Jhc2UgPSBob3N0X3ByaXYtPmhjcl9iYXNlOwotCXUzMiBoc3RhdHVzLCBxY19hY3RpdmUgPSAwOworCXUzMiBoc3RhdHVzLCBkb25lX21hc2sgPSAwOwogCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWM7CiAJdTMyIFNFcnJvcjsKIApAQCAtMTExNiwyOCArMTExNiwyOCBAQAogCX0KIAogCS8qIFJlYWQgY29tbWFuZCBjb21wbGV0ZWQgcmVnaXN0ZXIgKi8KLQlxY19hY3RpdmUgPSBpb3JlYWQzMihoY3JfYmFzZSArIENDKTsKKwlkb25lX21hc2sgPSBpb3JlYWQzMihoY3JfYmFzZSArIENDKTsKIAogCVZQUklOVEsoIlN0YXR1cyBvZiBhbGwgcXVldWVzIDpcbiIpOwotCVZQUklOVEsoInFjX2FjdGl2ZS9DQyA9IDB4JXgsIENBID0gMHgleCwgQ0U9MHgleCxDUT0weCV4LGFwcWE9MHgleFxuIiwKLQkJcWNfYWN0aXZlLAorCVZQUklOVEsoImRvbmVfbWFzay9DQyA9IDB4JXgsIENBID0gMHgleCwgQ0U9MHgleCxDUT0weCV4LGFwcWE9MHgleFxuIiwKKwkJZG9uZV9tYXNrLAogCQlpb3JlYWQzMihoY3JfYmFzZSArIENBKSwKIAkJaW9yZWFkMzIoaGNyX2Jhc2UgKyBDRSksCiAJCWlvcmVhZDMyKGhjcl9iYXNlICsgQ1EpLAogCQlhcC0+cWNfYWN0aXZlKTsKIAotCWlmIChxY19hY3RpdmUgJiBhcC0+cWNfYWN0aXZlKSB7CisJaWYgKGRvbmVfbWFzayAmIGFwLT5xY19hY3RpdmUpIHsKIAkJaW50IGk7CiAJCS8qIGNsZWFyIENDIGJpdCwgdGhpcyB3aWxsIGFsc28gY29tcGxldGUgdGhlIGludGVycnVwdCAqLwotCQlpb3dyaXRlMzIocWNfYWN0aXZlLCBoY3JfYmFzZSArIENDKTsKKwkJaW93cml0ZTMyKGRvbmVfbWFzaywgaGNyX2Jhc2UgKyBDQyk7CiAKIAkJRFBSSU5USygiU3RhdHVzIG9mIGFsbCBxdWV1ZXMgOlxuIik7Ci0JCURQUklOVEsoInFjX2FjdGl2ZS9DQyA9IDB4JXgsIENBID0gMHgleCwgQ0U9MHgleFxuIiwKLQkJCXFjX2FjdGl2ZSwgaW9yZWFkMzIoaGNyX2Jhc2UgKyBDQSksCisJCURQUklOVEsoImRvbmVfbWFzay9DQyA9IDB4JXgsIENBID0gMHgleCwgQ0U9MHgleFxuIiwKKwkJCWRvbmVfbWFzaywgaW9yZWFkMzIoaGNyX2Jhc2UgKyBDQSksCiAJCQlpb3JlYWQzMihoY3JfYmFzZSArIENFKSk7CiAKIAkJZm9yIChpID0gMDsgaSA8IFNBVEFfRlNMX1FVRVVFX0RFUFRIOyBpKyspIHsKLQkJCWlmIChxY19hY3RpdmUgJiAoMSA8PCBpKSkgeworCQkJaWYgKGRvbmVfbWFzayAmICgxIDw8IGkpKSB7CiAJCQkJcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIGkpOwogCQkJCWlmIChxYykgewogCQkJCQlhdGFfcWNfY29tcGxldGUocWMpOwpAQCAtMTE2NCw3ICsxMTY0LDcgQEAKIAkJLyogU3B1cmlvdXMgSW50ZXJydXB0ISEgKi8KIAkJRFBSSU5USygic3B1cmlvdXMgaW50ZXJydXB0ISEsIENDID0gMHgleFxuIiwKIAkJCWlvcmVhZDMyKGhjcl9iYXNlICsgQ0MpKTsKLQkJaW93cml0ZTMyKHFjX2FjdGl2ZSwgaGNyX2Jhc2UgKyBDQyk7CisJCWlvd3JpdGUzMihkb25lX21hc2ssIGhjcl9iYXNlICsgQ0MpOwogCQlyZXR1cm47CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9tdi5jIGIvZHJpdmVycy9hdGEvc2F0YV9tdi5jCmluZGV4IGE0NzZjZDkuLjk0NjNjNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfbXYuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX212LmMKQEAgLTI3MTYsMzQgKzI3MTYsMzUgQEAKIHN0YXRpYyB2b2lkIG12X3Byb2Nlc3NfY3JwYl9yZXNwb25zZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLAogCQlzdHJ1Y3QgbXZfY3JwYiAqcmVzcG9uc2UsIHVuc2lnbmVkIGludCB0YWcsIGludCBuY3FfZW5hYmxlZCkKIHsKKwl1OCBhdGFfc3RhdHVzOworCXUxNiBlZG1hX3N0YXR1cyA9IGxlMTZfdG9fY3B1KHJlc3BvbnNlLT5mbGFncyk7CiAJc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgdGFnKTsKIAotCWlmIChxYykgewotCQl1OCBhdGFfc3RhdHVzOwotCQl1MTYgZWRtYV9zdGF0dXMgPSBsZTE2X3RvX2NwdShyZXNwb25zZS0+ZmxhZ3MpOwotCQkvKgotCQkgKiBlZG1hX3N0YXR1cyBmcm9tIGEgcmVzcG9uc2UgcXVldWUgZW50cnk6Ci0JCSAqICAgTFNCIGlzIGZyb20gRURNQV9FUlJfSVJRX0NBVVNFIChub24tTkNRIG9ubHkpLgotCQkgKiAgIE1TQiBpcyBzYXZlZCBBVEEgc3RhdHVzIGZyb20gY29tbWFuZCBjb21wbGV0aW9uLgotCQkgKi8KLQkJaWYgKCFuY3FfZW5hYmxlZCkgewotCQkJdTggZXJyX2NhdXNlID0gZWRtYV9zdGF0dXMgJiAweGZmICYgfkVETUFfRVJSX0RFVjsKLQkJCWlmIChlcnJfY2F1c2UpIHsKLQkJCQkvKgotCQkJCSAqIEVycm9yIHdpbGwgYmUgc2Vlbi9oYW5kbGVkIGJ5IG12X2Vycl9pbnRyKCkuCi0JCQkJICogU28gZG8gbm90aGluZyBhdCBhbGwgaGVyZS4KLQkJCQkgKi8KLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXRhX3N0YXR1cyA9IGVkbWFfc3RhdHVzID4+IENSUEJfRkxBR19TVEFUVVNfU0hJRlQ7Ci0JCWlmICghYWNfZXJyX21hc2soYXRhX3N0YXR1cykpCi0JCQlhdGFfcWNfY29tcGxldGUocWMpOwotCQkvKiBlbHNlOiBsZWF2ZSBpdCBmb3IgbXZfZXJyX2ludHIoKSAqLwotCX0gZWxzZSB7CisJaWYgKHVubGlrZWx5KCFxYykpIHsKIAkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX0VSUiwgIiVzOiBubyBxYyBmb3IgdGFnPSVkXG4iLAogCQkJCV9fZnVuY19fLCB0YWcpOworCQlyZXR1cm47CiAJfQorCisJLyoKKwkgKiBlZG1hX3N0YXR1cyBmcm9tIGEgcmVzcG9uc2UgcXVldWUgZW50cnk6CisJICogICBMU0IgaXMgZnJvbSBFRE1BX0VSUl9JUlFfQ0FVU0UgKG5vbi1OQ1Egb25seSkuCisJICogICBNU0IgaXMgc2F2ZWQgQVRBIHN0YXR1cyBmcm9tIGNvbW1hbmQgY29tcGxldGlvbi4KKwkgKi8KKwlpZiAoIW5jcV9lbmFibGVkKSB7CisJCXU4IGVycl9jYXVzZSA9IGVkbWFfc3RhdHVzICYgMHhmZiAmIH5FRE1BX0VSUl9ERVY7CisJCWlmIChlcnJfY2F1c2UpIHsKKwkJCS8qCisJCQkgKiBFcnJvciB3aWxsIGJlIHNlZW4vaGFuZGxlZCBieQorCQkJICogbXZfZXJyX2ludHIoKS4gIFNvIGRvIG5vdGhpbmcgYXQgYWxsIGhlcmUuCisJCQkgKi8KKwkJCXJldHVybjsKKwkJfQorCX0KKwlhdGFfc3RhdHVzID0gZWRtYV9zdGF0dXMgPj4gQ1JQQl9GTEFHX1NUQVRVU19TSElGVDsKKwlpZiAoIWFjX2Vycl9tYXNrKGF0YV9zdGF0dXMpKQorCQlhdGFfcWNfY29tcGxldGUocWMpOworCS8qIGVsc2U6IGxlYXZlIGl0IGZvciBtdl9lcnJfaW50cigpICovCiB9CiAKIHN0YXRpYyB2b2lkIG12X3Byb2Nlc3NfY3JwYl9lbnRyaWVzKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9udi5jIGIvZHJpdmVycy9hdGEvc2F0YV9udi5jCmluZGV4IDIxMTYxMTMuLmNiODllZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfbnYuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX252LmMKQEAgLTEwMTgsNyArMTAxOCw3IEBACiAJCQkgICAgICBOVl9BRE1BX1NUQVRfQ1BCRVJSIHwKIAkJCSAgICAgIE5WX0FETUFfU1RBVF9DTURfQ09NUExFVEUpKSB7CiAJCQl1MzIgY2hlY2tfY29tbWFuZHMgPSBub3RpZmllcl9jbGVhcnNbaV07Ci0JCQlpbnQgcG9zLCBlcnJvciA9IDA7CisJCQlpbnQgcG9zLCByYzsKIAogCQkJaWYgKHN0YXR1cyAmIE5WX0FETUFfU1RBVF9DUEJFUlIpIHsKIAkJCQkvKiBjaGVjayBhbGwgYWN0aXZlIGNvbW1hbmRzICovCkBAIC0xMDMwLDEwICsxMDMwLDEyIEBACiAJCQl9CiAKIAkJCS8qIGNoZWNrIENQQnMgZm9yIGNvbXBsZXRlZCBjb21tYW5kcyAqLwotCQkJd2hpbGUgKChwb3MgPSBmZnMoY2hlY2tfY29tbWFuZHMpKSAmJiAhZXJyb3IpIHsKKwkJCXdoaWxlICgocG9zID0gZmZzKGNoZWNrX2NvbW1hbmRzKSkpIHsKIAkJCQlwb3MtLTsKLQkJCQllcnJvciA9IG52X2FkbWFfY2hlY2tfY3BiKGFwLCBwb3MsCisJCQkJcmMgPSBudl9hZG1hX2NoZWNrX2NwYihhcCwgcG9zLAogCQkJCQkJbm90aWZpZXJfZXJyb3IgJiAoMSA8PCBwb3MpKTsKKwkJCQlpZiAodW5saWtlbHkocmMpKQorCQkJCQljaGVja19jb21tYW5kcyA9IDA7CiAJCQkJY2hlY2tfY29tbWFuZHMgJj0gfigxIDw8IHBvcyk7CiAJCQl9CiAJCX0KQEAgLTIxMjksNyArMjEzMSw2IEBACiAJc3RydWN0IG52X3N3bmNxX3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBhdGFfZWhfaW5mbyAqZWhpID0gJmFwLT5saW5rLmVoX2luZm87CiAJdTMyIHNhY3RpdmU7Ci0JaW50IG5yX2RvbmUgPSAwOwogCXUzMiBkb25lX21hc2s7CiAJaW50IGk7CiAJdTggaG9zdF9zdGF0OwpAQCAtMjE3MCwyMiArMjE3MSwyMSBAQAogCQkJcHAtPmRoZmlzX2JpdHMgJj0gfigxIDw8IGkpOwogCQkJcHAtPmRtYWZpc19iaXRzICY9IH4oMSA8PCBpKTsKIAkJCXBwLT5zZGJmaXNfYml0cyB8PSAoMSA8PCBpKTsKLQkJCW5yX2RvbmUrKzsKIAkJfQogCX0KIAogCWlmICghYXAtPnFjX2FjdGl2ZSkgewogCQlEUFJJTlRLKCJvdmVyXG4iKTsKIAkJbnZfc3duY3FfcHBfcmVpbml0KGFwKTsKLQkJcmV0dXJuIG5yX2RvbmU7CisJCXJldHVybiAwOwogCX0KIAogCWlmIChwcC0+cWNfYWN0aXZlICYgcHAtPmRoZmlzX2JpdHMpCi0JCXJldHVybiBucl9kb25lOworCQlyZXR1cm4gMDsKIAogCWlmICgocHAtPm5jcV9mbGFncyAmIG5jcV9zYXdfYmFja291dCkgfHwKIAkgICAgKHBwLT5xY19hY3RpdmUgXiBwcC0+ZGhmaXNfYml0cykpCi0JCS8qIGlmIHRoZSBjb250cm9sbGVyIGNhbm4ndCBnZXQgYSBkZXZpY2UgdG8gaG9zdCByZWdpc3RlciBGSVMsCisJCS8qIGlmIHRoZSBjb250cm9sbGVyIGNhbid0IGdldCBhIGRldmljZSB0byBob3N0IHJlZ2lzdGVyIEZJUywKIAkJICogVGhlIGRyaXZlciBuZWVkcyB0byByZWlzc3VlIHRoZSBuZXcgY29tbWFuZC4KIAkJICovCiAJCWxhY2tfZGhmaXMgPSAxOwpAQCAtMjIwMiw3ICsyMjAyLDcgQEAKIAlpZiAobGFja19kaGZpcykgewogCQlxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgcHAtPmxhc3RfaXNzdWVfdGFnKTsKIAkJbnZfc3duY3FfaXNzdWVfYXRhY21kKGFwLCBxYyk7Ci0JCXJldHVybiBucl9kb25lOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAocHAtPmRlZmVyX3F1ZXVlLmRlZmVyX2JpdHMpIHsKQEAgLTIyMTIsNyArMjIxMiw3IEBACiAJCW52X3N3bmNxX2lzc3VlX2F0YWNtZChhcCwgcWMpOwogCX0KIAotCXJldHVybiBucl9kb25lOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHUzMiBudl9zd25jcV90YWcoc3RydWN0IGF0YV9wb3J0ICphcCkKQEAgLTIyMjQsNyArMjIyNCw3IEBACiAJcmV0dXJuICh0YWcgJiAweDFmKTsKIH0KIAotc3RhdGljIGludCBudl9zd25jcV9kbWFmaXMoc3RydWN0IGF0YV9wb3J0ICphcCkKK3N0YXRpYyB2b2lkIG52X3N3bmNxX2RtYWZpcyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewogCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWM7CiAJdW5zaWduZWQgaW50IHJ3OwpAQCAtMjIzOSw3ICsyMjM5LDcgQEAKIAlxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgdGFnKTsKIAogCWlmICh1bmxpa2VseSghcWMpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCiAJcncgPSBxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEU7CiAKQEAgLTIyNTQsOCArMjI1NCw2IEBACiAJCWRtYWN0bCB8PSBBVEFfRE1BX1dSOwogCiAJaW93cml0ZTgoZG1hY3RsIHwgQVRBX0RNQV9TVEFSVCwgYXAtPmlvYWRkci5ibWRtYV9hZGRyICsgQVRBX0RNQV9DTUQpOwotCi0JcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyB2b2lkIG52X3N3bmNxX2hvc3RfaW50ZXJydXB0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHUxNiBmaXMpCkBAIC0yMjY1LDcgKzIyNjMsNiBAQAogCXN0cnVjdCBhdGFfZWhfaW5mbyAqZWhpID0gJmFwLT5saW5rLmVoX2luZm87CiAJdTMyIHNlcnJvcjsKIAl1OCBhdGFfc3RhdDsKLQlpbnQgcmMgPSAwOwogCiAJYXRhX3N0YXQgPSBhcC0+b3BzLT5zZmZfY2hlY2tfc3RhdHVzKGFwKTsKIAludl9zd25jcV9pcnFfY2xlYXIoYXAsIGZpcyk7CkBAIC0yMzEwLDggKzIzMDcsNyBAQAogCQkJImRoZmlzIDB4JVggZG1hZmlzIDB4JVggc2FjdGl2ZSAweCVYXG4iLAogCQkJYXAtPnByaW50X2lkLCBwcC0+cWNfYWN0aXZlLCBwcC0+ZGhmaXNfYml0cywKIAkJCXBwLT5kbWFmaXNfYml0cywgcmVhZGwocHAtPnNhY3RpdmVfYmxvY2spKTsKLQkJcmMgPSBudl9zd25jcV9zZGJmaXMoYXApOwotCQlpZiAocmMgPCAwKQorCQlpZiAobnZfc3duY3Ffc2RiZmlzKGFwKSA8IDApCiAJCQlnb3RvIGlycV9lcnJvcjsKIAl9CiAKQEAgLTIzNDgsNyArMjM0NCw3IEBACiAJCSAqLwogCQlwcC0+ZG1hZmlzX2JpdHMgfD0gKDB4MSA8PCBudl9zd25jcV90YWcoYXApKTsKIAkJcHAtPm5jcV9mbGFncyB8PSBuY3Ffc2F3X2RtYXM7Ci0JCXJjID0gbnZfc3duY3FfZG1hZmlzKGFwKTsKKwkJbnZfc3duY3FfZG1hZmlzKGFwKTsKIAl9CiAKIGlycV9leGl0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vS2NvbmZpZyBiL2RyaXZlcnMvYXRtL0tjb25maWcKaW5kZXggZjFhMGEwMC4uYmU3NDYxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vS2NvbmZpZworKysgYi9kcml2ZXJzL2F0bS9LY29uZmlnCkBAIC0xNzcsNyArMTc3LDcgQEAKIAogY29uZmlnIEFUTV9OSUNTVEFSCiAJdHJpc3RhdGUgIklEVCA3NzIwMSAoTklDU3RBUikgKEZvcmVSdW5uZXJMRSkiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgITY0QklUICYmIFZJUlRfVE9fQlVTCisJZGVwZW5kcyBvbiBQQ0kKIAloZWxwCiAJICBUaGUgTklDU3RBUiBjaGlwc2V0IGZhbWlseSBpcyB1c2VkIGluIGEgbGFyZ2UgbnVtYmVyIG9mIEFUTSBOSUNzIGZvcgogCSAgMjUgYW5kIGZvciAxNTUgTWJwcywgaW5jbHVkaW5nIElEVCBjYXJkcyBhbmQgdGhlIEZvcmUgRm9yZVJ1bm5lckxFCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9hZHVtbXkuYyBiL2RyaXZlcnMvYXRtL2FkdW1teS5jCmluZGV4IDZkNDRmMDcuLjQ2Yjk0NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2FkdW1teS5jCisrKyBiL2RyaXZlcnMvYXRtL2FkdW1teS5jCkBAIC00MCw2ICs0MCw0MiBAQAogCiBzdGF0aWMgTElTVF9IRUFEKGFkdW1teV9kZXZzKTsKIAorc3RhdGljIHNzaXplX3QgX19zZXRfc2lnbmFsKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgYXRtX2RldiAqYXRtX2RldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBhdG1fZGV2LCBjbGFzc19kZXYpOworCWludCBzaWduYWw7CisKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJnNpZ25hbCkgPT0gMSkgeworCisJCWlmIChzaWduYWwgPCBBVE1fUEhZX1NJR19MT1NUIHx8IHNpZ25hbCA+IEFUTV9QSFlfU0lHX0ZPVU5EKQorCQkJc2lnbmFsID0gQVRNX1BIWV9TSUdfVU5LTk9XTjsKKworCQlhdG1fZGV2X3NpZ25hbF9jaGFuZ2UoYXRtX2Rldiwgc2lnbmFsKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgc3NpemVfdCBfX3Nob3dfc2lnbmFsKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhdG1fZGV2ICphdG1fZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGF0bV9kZXYsIGNsYXNzX2Rldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGF0bV9kZXYtPnNpZ25hbCk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoc2lnbmFsLCAwNjQ0LCBfX3Nob3dfc2lnbmFsLCBfX3NldF9zaWduYWwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWR1bW15X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX3NpZ25hbC5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkdW1teV9ncm91cF9hdHRycyA9IHsKKwkubmFtZSA9IE5VTEwsIC8qIFdlIHdhbnQgdGhlbSBpbiBkZXYncyByb290IGZvbGRlciAqLworCS5hdHRycyA9IGFkdW1teV9hdHRycworfTsKKwogc3RhdGljIGludCBfX2luaXQKIGFkdW1teV9zdGFydChzdHJ1Y3QgYXRtX2RldiAqZGV2KQogewpAQCAtMTI4LDYgKzE2NCw5IEBACiAJYWR1bW15X2Rldi0+YXRtX2RldiA9IGF0bV9kZXY7CiAJYXRtX2Rldi0+ZGV2X2RhdGEgPSBhZHVtbXlfZGV2OwogCisJaWYgKHN5c2ZzX2NyZWF0ZV9ncm91cCgmYXRtX2Rldi0+Y2xhc3NfZGV2LmtvYmosICZhZHVtbXlfZ3JvdXBfYXR0cnMpKQorCQlkZXZfZXJyKCZhdG1fZGV2LT5jbGFzc19kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgYXR0cnMgZm9yIGFkdW1teVxuIik7CisKIAlpZiAoYWR1bW15X3N0YXJ0KGF0bV9kZXYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBERVZfTEFCRUwgIjogYWR1bW15X3N0YXJ0KCkgZmFpbGVkXG4iKTsKIAkJZXJyID0gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2FtYmFzc2Fkb3IuYyBiL2RyaXZlcnMvYXRtL2FtYmFzc2Fkb3IuYwppbmRleCA5ZDE4NjQ0Li5hMzM4OTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9hbWJhc3NhZG9yLmMKKysrIGIvZHJpdmVycy9hdG0vYW1iYXNzYWRvci5jCkBAIC0yMzcxLDEwICsyMzcxLDggQEAKIC8qKioqKioqKioqIG1vZHVsZSBlbnRyeSAqKioqKioqKioqLwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYW1iX3BjaV90YmxbXSA9IHsKLQl7IFBDSV9WRU5ET1JfSURfTUFER0UsIFBDSV9ERVZJQ0VfSURfTUFER0VfQU1CQVNTQURPUiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKLQkgIDAsIDAsIDAgfSwKLQl7IFBDSV9WRU5ET1JfSURfTUFER0UsIFBDSV9ERVZJQ0VfSURfTUFER0VfQU1CQVNTQURPUl9CQUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCi0JICAwLCAwLCAwIH0sCisJeyBQQ0lfVkRFVklDRShNQURHRSwgUENJX0RFVklDRV9JRF9NQURHRV9BTUJBU1NBRE9SKSwgMCB9LAorCXsgUENJX1ZERVZJQ0UoTUFER0UsIFBDSV9ERVZJQ0VfSURfTUFER0VfQU1CQVNTQURPUl9CQUQpLCAwIH0sCiAJeyAwLCB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9lbmkuYyBiL2RyaXZlcnMvYXRtL2VuaS5jCmluZGV4IDkwYTVhN2MuLjgwZjlmMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2VuaS5jCisrKyBiL2RyaXZlcnMvYXRtL2VuaS5jCkBAIC0yMjY5LDEwICsyMjY5LDggQEAKIAogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZW5pX3BjaV90YmxbXSA9IHsKLQl7IFBDSV9WRU5ET1JfSURfRUYsIFBDSV9ERVZJQ0VfSURfRUZfQVRNX0ZQR0EsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCi0JICAwLCAwLCAwIC8qIEZQR0EgKi8gfSwKLQl7IFBDSV9WRU5ET1JfSURfRUYsIFBDSV9ERVZJQ0VfSURfRUZfQVRNX0FTSUMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCi0JICAwLCAwLCAxIC8qIEFTSUMgKi8gfSwKKwl7IFBDSV9WREVWSUNFKEVGLCBQQ0lfREVWSUNFX0lEX0VGX0FUTV9GUEdBKSwgMCAvKiBGUEdBICovIH0sCisJeyBQQ0lfVkRFVklDRShFRiwgUENJX0RFVklDRV9JRF9FRl9BVE1fQVNJQyksIDEgLyogQVNJQyAqLyB9LAogCXsgMCwgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLGVuaV9wY2lfdGJsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2ZpcmVzdHJlYW0uYyBiL2RyaXZlcnMvYXRtL2ZpcmVzdHJlYW0uYwppbmRleCA2ZTYwMGFmLi44NzE3ODA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9maXJlc3RyZWFtLmMKKysrIGIvZHJpdmVycy9hdG0vZmlyZXN0cmVhbS5jCkBAIC0yMDI3LDEwICsyMDI3LDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGZpcmVzdHJlYW1fcGNpX3RibFtdID0gewotCXsgUENJX1ZFTkRPUl9JRF9GVUpJVFNVX01FLCBQQ0lfREVWSUNFX0lEX0ZVSklUU1VfRlM1MCwgCi0JICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBGU19JUzUwfSwKLQl7IFBDSV9WRU5ET1JfSURfRlVKSVRTVV9NRSwgUENJX0RFVklDRV9JRF9GVUpJVFNVX0ZTMTU1LCAKLQkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEZTX0lTMTU1fSwKKwl7IFBDSV9WREVWSUNFKEZVSklUU1VfTUUsIFBDSV9ERVZJQ0VfSURfRlVKSVRTVV9GUzUwKSwgRlNfSVM1MH0sCisJeyBQQ0lfVkRFVklDRShGVUpJVFNVX01FLCBQQ0lfREVWSUNFX0lEX0ZVSklUU1VfRlMxNTUpLCBGU19JUzE1NX0sCiAJeyAwLCB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9mb3JlMjAwZS5jIGIvZHJpdmVycy9hdG0vZm9yZTIwMGUuYwppbmRleCBkYThmMTc2Li5iNzM4NWUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9mb3JlMjAwZS5jCisrKyBiL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmMKQEAgLTI2NTcsNyArMjY1Nyw3IEBACiAKIAlmb3JlMjAwZS0+YnVzID0gYnVzOwogCWZvcmUyMDBlLT5idXNfZGV2ID0gb3A7Ci0JZm9yZTIwMGUtPmlycSA9IG9wLT5pcnFzWzBdOworCWZvcmUyMDBlLT5pcnEgPSBvcC0+YXJjaGRhdGEuaXJxc1swXTsKIAlmb3JlMjAwZS0+cGh5c19iYXNlID0gb3AtPnJlc291cmNlWzBdLnN0YXJ0OwogCiAJc3ByaW50Zihmb3JlMjAwZS0+bmFtZSwgIiVzLSVkIiwgYnVzLT5tb2RlbF9uYW1lLCBpbmRleCk7CkBAIC0yNzk1LDcgKzI3OTUsNyBAQAogCXByaW50ayhGT1JFMjAwRSAiRk9SRSBTeXN0ZW1zIDIwMEUtc2VyaWVzIEFUTSBkcml2ZXIgLSB2ZXJzaW9uICIgRk9SRTIwMEVfVkVSU0lPTiAiXG4iKTsKIAogI2lmZGVmIENPTkZJR19TQlVTCi0JZXJyID0gb2ZfcmVnaXN0ZXJfZHJpdmVyKCZmb3JlMjAwZV9zYmFfZHJpdmVyLCAmb2ZfYnVzX3R5cGUpOworCWVyciA9IG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZm9yZTIwMGVfc2JhX2RyaXZlcik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKICNlbmRpZgpAQCAtMjgwNiw3ICsyODA2LDcgQEAKIAogI2lmZGVmIENPTkZJR19TQlVTCiAJaWYgKGVycikKLQkJb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoJmZvcmUyMDBlX3NiYV9kcml2ZXIpOworCQlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZm9yZTIwMGVfc2JhX2RyaXZlcik7CiAjZW5kaWYKIAogCXJldHVybiBlcnI7CkBAIC0yODE4LDcgKzI4MTgsNyBAQAogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZm9yZTIwMGVfcGNhX2RyaXZlcik7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfU0JVUwotCW9mX3VucmVnaXN0ZXJfZHJpdmVyKCZmb3JlMjAwZV9zYmFfZHJpdmVyKTsKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZm9yZTIwMGVfc2JhX2RyaXZlcik7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaGUuYyBiL2RyaXZlcnMvYXRtL2hlLmMKaW5kZXggNTZjMmU5OS4uODAxZThiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vaGUuYworKysgYi9kcml2ZXJzL2F0bS9oZS5jCkBAIC02Nyw2ICs2Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CkBAIC03NzgsNjEgKzc3OSwzOSBAQAogc3RhdGljIGludCBfX2RldmluaXQKIGhlX2luaXRfZ3JvdXAoc3RydWN0IGhlX2RldiAqaGVfZGV2LCBpbnQgZ3JvdXApCiB7CisJc3RydWN0IGhlX2J1ZmYgKmhlYiwgKm5leHQ7CisJZG1hX2FkZHJfdCBtYXBwaW5nOwogCWludCBpOwogCi0JLyogc21hbGwgYnVmZmVyIHBvb2wgKi8KLQloZV9kZXYtPnJicHNfcG9vbCA9IHBjaV9wb29sX2NyZWF0ZSgicmJwcyIsIGhlX2Rldi0+cGNpX2RldiwKLQkJCUNPTkZJR19SQlBTX0JVRlNJWkUsIDgsIDApOwotCWlmIChoZV9kZXYtPnJicHNfcG9vbCA9PSBOVUxMKSB7Ci0JCWhwcmludGsoInVuYWJsZSB0byBjcmVhdGUgcmJwcyBwYWdlc1xuIik7CisJaGVfd3JpdGVsKGhlX2RldiwgMHgwLCBHMF9SQlBTX1MgKyAoZ3JvdXAgKiAzMikpOworCWhlX3dyaXRlbChoZV9kZXYsIDB4MCwgRzBfUkJQU19UICsgKGdyb3VwICogMzIpKTsKKwloZV93cml0ZWwoaGVfZGV2LCAweDAsIEcwX1JCUFNfUUkgKyAoZ3JvdXAgKiAzMikpOworCWhlX3dyaXRlbChoZV9kZXYsIFJCUF9USFJFU0goMHgxKSB8IFJCUF9RU0laRSgweDApLAorCQkgIEcwX1JCUFNfQlMgKyAoZ3JvdXAgKiAzMikpOworCisJLyogYml0bWFwIHRhYmxlICovCisJaGVfZGV2LT5yYnBsX3RhYmxlID0ga21hbGxvYyhCSVRTX1RPX0xPTkdTKFJCUExfVEFCTEVfU0laRSkKKwkJCQkgICAgICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhlX2Rldi0+cmJwbF90YWJsZSkgeworCQlocHJpbnRrKCJ1bmFibGUgdG8gYWxsb2NhdGUgcmJwbCBiaXRtYXAgdGFibGVcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJYml0bWFwX3plcm8oaGVfZGV2LT5yYnBsX3RhYmxlLCBSQlBMX1RBQkxFX1NJWkUpOwogCi0JaGVfZGV2LT5yYnBzX2Jhc2UgPSBwY2lfYWxsb2NfY29uc2lzdGVudChoZV9kZXYtPnBjaV9kZXYsCi0JCUNPTkZJR19SQlBTX1NJWkUgKiBzaXplb2Yoc3RydWN0IGhlX3JicCksICZoZV9kZXYtPnJicHNfcGh5cyk7Ci0JaWYgKGhlX2Rldi0+cmJwc19iYXNlID09IE5VTEwpIHsKLQkJaHByaW50aygiZmFpbGVkIHRvIGFsbG9jIHJicHNfYmFzZVxuIik7Ci0JCWdvdG8gb3V0X2Rlc3Ryb3lfcmJwc19wb29sOworCS8qIHJicGxfdmlydCA2NC1iaXQgcG9pbnRlcnMgKi8KKwloZV9kZXYtPnJicGxfdmlydCA9IGttYWxsb2MoUkJQTF9UQUJMRV9TSVpFCisJCQkJICAgICogc2l6ZW9mKHN0cnVjdCBoZV9idWZmICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhlX2Rldi0+cmJwbF92aXJ0KSB7CisJCWhwcmludGsoInVuYWJsZSB0byBhbGxvY2F0ZSByYnBsIHZpcnQgdGFibGVcbiIpOworCQlnb3RvIG91dF9mcmVlX3JicGxfdGFibGU7CiAJfQotCW1lbXNldChoZV9kZXYtPnJicHNfYmFzZSwgMCwgQ09ORklHX1JCUFNfU0laRSAqIHNpemVvZihzdHJ1Y3QgaGVfcmJwKSk7Ci0JaGVfZGV2LT5yYnBzX3ZpcnQgPSBrbWFsbG9jKENPTkZJR19SQlBTX1NJWkUgKiBzaXplb2Yoc3RydWN0IGhlX3ZpcnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoaGVfZGV2LT5yYnBzX3ZpcnQgPT0gTlVMTCkgewotCQlocHJpbnRrKCJmYWlsZWQgdG8gYWxsb2MgcmJwc192aXJ0XG4iKTsKLQkJZ290byBvdXRfZnJlZV9yYnBzX2Jhc2U7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IENPTkZJR19SQlBTX1NJWkU7ICsraSkgewotCQlkbWFfYWRkcl90IGRtYV9oYW5kbGU7Ci0JCXZvaWQgKmNwdWFkZHI7Ci0KLQkJY3B1YWRkciA9IHBjaV9wb29sX2FsbG9jKGhlX2Rldi0+cmJwc19wb29sLCBHRlBfS0VSTkVMfEdGUF9ETUEsICZkbWFfaGFuZGxlKTsKLQkJaWYgKGNwdWFkZHIgPT0gTlVMTCkKLQkJCWdvdG8gb3V0X2ZyZWVfcmJwc192aXJ0OwotCi0JCWhlX2Rldi0+cmJwc192aXJ0W2ldLnZpcnQgPSBjcHVhZGRyOwotCQloZV9kZXYtPnJicHNfYmFzZVtpXS5zdGF0dXMgPSBSQlBfTE9BTkVEIHwgUkJQX1NNQUxMQlVGIHwgKGkgPDwgUkJQX0lOREVYX09GRik7Ci0JCWhlX2Rldi0+cmJwc19iYXNlW2ldLnBoeXMgPSBkbWFfaGFuZGxlOwotCi0JfQotCWhlX2Rldi0+cmJwc190YWlsID0gJmhlX2Rldi0+cmJwc19iYXNlW0NPTkZJR19SQlBTX1NJWkUgLSAxXTsKLQotCWhlX3dyaXRlbChoZV9kZXYsIGhlX2Rldi0+cmJwc19waHlzLCBHMF9SQlBTX1MgKyAoZ3JvdXAgKiAzMikpOwotCWhlX3dyaXRlbChoZV9kZXYsIFJCUFNfTUFTSyhoZV9kZXYtPnJicHNfdGFpbCksCi0JCQkJCQlHMF9SQlBTX1QgKyAoZ3JvdXAgKiAzMikpOwotCWhlX3dyaXRlbChoZV9kZXYsIENPTkZJR19SQlBTX0JVRlNJWkUvNCwKLQkJCQkJCUcwX1JCUFNfQlMgKyAoZ3JvdXAgKiAzMikpOwotCWhlX3dyaXRlbChoZV9kZXYsCi0JCQlSQlBfVEhSRVNIKENPTkZJR19SQlBTX1RIUkVTSCkgfAotCQkJUkJQX1FTSVpFKENPTkZJR19SQlBTX1NJWkUgLSAxKSB8Ci0JCQlSQlBfSU5UX0VOQiwKLQkJCQkJCUcwX1JCUFNfUUkgKyAoZ3JvdXAgKiAzMikpOwogCiAJLyogbGFyZ2UgYnVmZmVyIHBvb2wgKi8KIAloZV9kZXYtPnJicGxfcG9vbCA9IHBjaV9wb29sX2NyZWF0ZSgicmJwbCIsIGhlX2Rldi0+cGNpX2RldiwKLQkJCUNPTkZJR19SQlBMX0JVRlNJWkUsIDgsIDApOworCQkJCQkgICAgQ09ORklHX1JCUExfQlVGU0laRSwgNjQsIDApOwogCWlmIChoZV9kZXYtPnJicGxfcG9vbCA9PSBOVUxMKSB7CiAJCWhwcmludGsoInVuYWJsZSB0byBjcmVhdGUgcmJwbCBwb29sXG4iKTsKLQkJZ290byBvdXRfZnJlZV9yYnBzX3ZpcnQ7CisJCWdvdG8gb3V0X2ZyZWVfcmJwbF92aXJ0OwogCX0KIAogCWhlX2Rldi0+cmJwbF9iYXNlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaGVfZGV2LT5wY2lfZGV2LApAQCAtODQyLDMwICs4MjEsMjkgQEAKIAkJZ290byBvdXRfZGVzdHJveV9yYnBsX3Bvb2w7CiAJfQogCW1lbXNldChoZV9kZXYtPnJicGxfYmFzZSwgMCwgQ09ORklHX1JCUExfU0laRSAqIHNpemVvZihzdHJ1Y3QgaGVfcmJwKSk7Ci0JaGVfZGV2LT5yYnBsX3ZpcnQgPSBrbWFsbG9jKENPTkZJR19SQlBMX1NJWkUgKiBzaXplb2Yoc3RydWN0IGhlX3ZpcnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoaGVfZGV2LT5yYnBsX3ZpcnQgPT0gTlVMTCkgewotCQlocHJpbnRrKCJmYWlsZWQgdG8gYWxsb2MgcmJwbF92aXJ0XG4iKTsKLQkJZ290byBvdXRfZnJlZV9yYnBsX2Jhc2U7Ci0JfQorCisJSU5JVF9MSVNUX0hFQUQoJmhlX2Rldi0+cmJwbF9vdXRzdGFuZGluZyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQ09ORklHX1JCUExfU0laRTsgKytpKSB7Ci0JCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKLQkJdm9pZCAqY3B1YWRkcjsKIAotCQljcHVhZGRyID0gcGNpX3Bvb2xfYWxsb2MoaGVfZGV2LT5yYnBsX3Bvb2wsIEdGUF9LRVJORUx8R0ZQX0RNQSwgJmRtYV9oYW5kbGUpOwotCQlpZiAoY3B1YWRkciA9PSBOVUxMKQotCQkJZ290byBvdXRfZnJlZV9yYnBsX3ZpcnQ7CisJCWhlYiA9IHBjaV9wb29sX2FsbG9jKGhlX2Rldi0+cmJwbF9wb29sLCBHRlBfS0VSTkVMfEdGUF9ETUEsICZtYXBwaW5nKTsKKwkJaWYgKCFoZWIpCisJCQlnb3RvIG91dF9mcmVlX3JicGw7CisJCWhlYi0+bWFwcGluZyA9IG1hcHBpbmc7CisJCWxpc3RfYWRkKCZoZWItPmVudHJ5LCAmaGVfZGV2LT5yYnBsX291dHN0YW5kaW5nKTsKIAotCQloZV9kZXYtPnJicGxfdmlydFtpXS52aXJ0ID0gY3B1YWRkcjsKLQkJaGVfZGV2LT5yYnBsX2Jhc2VbaV0uc3RhdHVzID0gUkJQX0xPQU5FRCB8IChpIDw8IFJCUF9JTkRFWF9PRkYpOwotCQloZV9kZXYtPnJicGxfYmFzZVtpXS5waHlzID0gZG1hX2hhbmRsZTsKKwkJc2V0X2JpdChpLCBoZV9kZXYtPnJicGxfdGFibGUpOworCQloZV9kZXYtPnJicGxfdmlydFtpXSA9IGhlYjsKKwkJaGVfZGV2LT5yYnBsX2hpbnQgPSBpICsgMTsKKwkJaGVfZGV2LT5yYnBsX2Jhc2VbaV0uaWR4ID0gIGkgPDwgUkJQX0lEWF9PRkZTRVQ7CisJCWhlX2Rldi0+cmJwbF9iYXNlW2ldLnBoeXMgPSBtYXBwaW5nICsgb2Zmc2V0b2Yoc3RydWN0IGhlX2J1ZmYsIGRhdGEpOwogCX0KIAloZV9kZXYtPnJicGxfdGFpbCA9ICZoZV9kZXYtPnJicGxfYmFzZVtDT05GSUdfUkJQTF9TSVpFIC0gMV07CiAKIAloZV93cml0ZWwoaGVfZGV2LCBoZV9kZXYtPnJicGxfcGh5cywgRzBfUkJQTF9TICsgKGdyb3VwICogMzIpKTsKIAloZV93cml0ZWwoaGVfZGV2LCBSQlBMX01BU0soaGVfZGV2LT5yYnBsX3RhaWwpLAogCQkJCQkJRzBfUkJQTF9UICsgKGdyb3VwICogMzIpKTsKLQloZV93cml0ZWwoaGVfZGV2LCBDT05GSUdfUkJQTF9CVUZTSVpFLzQsCisJaGVfd3JpdGVsKGhlX2RldiwgKENPTkZJR19SQlBMX0JVRlNJWkUgLSBzaXplb2Yoc3RydWN0IGhlX2J1ZmYpKS80LAogCQkJCQkJRzBfUkJQTF9CUyArIChncm91cCAqIDMyKSk7CiAJaGVfd3JpdGVsKGhlX2RldiwKIAkJCVJCUF9USFJFU0goQ09ORklHX1JCUExfVEhSRVNIKSB8CkBAIC04NzksNyArODU3LDcgQEAKIAkJQ09ORklHX1JCUlFfU0laRSAqIHNpemVvZihzdHJ1Y3QgaGVfcmJycSksICZoZV9kZXYtPnJicnFfcGh5cyk7CiAJaWYgKGhlX2Rldi0+cmJycV9iYXNlID09IE5VTEwpIHsKIAkJaHByaW50aygiZmFpbGVkIHRvIGFsbG9jYXRlIHJicnFcbiIpOwotCQlnb3RvIG91dF9mcmVlX3JicGxfdmlydDsKKwkJZ290byBvdXRfZnJlZV9yYnBsOwogCX0KIAltZW1zZXQoaGVfZGV2LT5yYnJxX2Jhc2UsIDAsIENPTkZJR19SQlJRX1NJWkUgKiBzaXplb2Yoc3RydWN0IGhlX3JicnEpKTsKIApAQCAtOTIwLDMzICs4OTgsMjAgQEAKIAlwY2lfZnJlZV9jb25zaXN0ZW50KGhlX2Rldi0+cGNpX2RldiwgQ09ORklHX1JCUlFfU0laRSAqCiAJCQlzaXplb2Yoc3RydWN0IGhlX3JicnEpLCBoZV9kZXYtPnJicnFfYmFzZSwKIAkJCWhlX2Rldi0+cmJycV9waHlzKTsKLQlpID0gQ09ORklHX1JCUExfU0laRTsKLW91dF9mcmVlX3JicGxfdmlydDoKLQl3aGlsZSAoaS0tKQotCQlwY2lfcG9vbF9mcmVlKGhlX2Rldi0+cmJwbF9wb29sLCBoZV9kZXYtPnJicGxfdmlydFtpXS52aXJ0LAotCQkJCWhlX2Rldi0+cmJwbF9iYXNlW2ldLnBoeXMpOwotCWtmcmVlKGhlX2Rldi0+cmJwbF92aXJ0KTsKK291dF9mcmVlX3JicGw6CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhlYiwgbmV4dCwgJmhlX2Rldi0+cmJwbF9vdXRzdGFuZGluZywgZW50cnkpCisJCXBjaV9wb29sX2ZyZWUoaGVfZGV2LT5yYnBsX3Bvb2wsIGhlYiwgaGViLT5tYXBwaW5nKTsKIAotb3V0X2ZyZWVfcmJwbF9iYXNlOgogCXBjaV9mcmVlX2NvbnNpc3RlbnQoaGVfZGV2LT5wY2lfZGV2LCBDT05GSUdfUkJQTF9TSVpFICoKIAkJCXNpemVvZihzdHJ1Y3QgaGVfcmJwKSwgaGVfZGV2LT5yYnBsX2Jhc2UsCiAJCQloZV9kZXYtPnJicGxfcGh5cyk7CiBvdXRfZGVzdHJveV9yYnBsX3Bvb2w6CiAJcGNpX3Bvb2xfZGVzdHJveShoZV9kZXYtPnJicGxfcG9vbCk7CitvdXRfZnJlZV9yYnBsX3ZpcnQ6CisJa2ZyZWUoaGVfZGV2LT5yYnBsX3ZpcnQpOworb3V0X2ZyZWVfcmJwbF90YWJsZToKKwlrZnJlZShoZV9kZXYtPnJicGxfdGFibGUpOwogCi0JaSA9IENPTkZJR19SQlBTX1NJWkU7Ci1vdXRfZnJlZV9yYnBzX3ZpcnQ6Ci0Jd2hpbGUgKGktLSkKLQkJcGNpX3Bvb2xfZnJlZShoZV9kZXYtPnJicHNfcG9vbCwgaGVfZGV2LT5yYnBzX3ZpcnRbaV0udmlydCwKLQkJCQloZV9kZXYtPnJicHNfYmFzZVtpXS5waHlzKTsKLQlrZnJlZShoZV9kZXYtPnJicHNfdmlydCk7Ci0KLW91dF9mcmVlX3JicHNfYmFzZToKLQlwY2lfZnJlZV9jb25zaXN0ZW50KGhlX2Rldi0+cGNpX2RldiwgQ09ORklHX1JCUFNfU0laRSAqCi0JCQlzaXplb2Yoc3RydWN0IGhlX3JicCksIGhlX2Rldi0+cmJwc19iYXNlLAotCQkJaGVfZGV2LT5yYnBzX3BoeXMpOwotb3V0X2Rlc3Ryb3lfcmJwc19wb29sOgotCXBjaV9wb29sX2Rlc3Ryb3koaGVfZGV2LT5yYnBzX3Bvb2wpOwogCXJldHVybiAtRU5PTUVNOwogfQogCkBAIC0xMDAyLDcgKzk2Nyw4IEBACiAJaGVfd3JpdGVsKGhlX2RldiwgMHgwLCBHUlBfNTRfTUFQKTsKIAloZV93cml0ZWwoaGVfZGV2LCAweDAsIEdSUF83Nl9NQVApOwogCi0JaWYgKHJlcXVlc3RfaXJxKGhlX2Rldi0+cGNpX2Rldi0+aXJxLCBoZV9pcnFfaGFuZGxlciwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwgREVWX0xBQkVMLCBoZV9kZXYpKSB7CisJaWYgKHJlcXVlc3RfaXJxKGhlX2Rldi0+cGNpX2Rldi0+aXJxLAorCQkJaGVfaXJxX2hhbmRsZXIsIElSUUZfU0hBUkVELCBERVZfTEFCRUwsIGhlX2RldikpIHsKIAkJaHByaW50aygiaXJxICVkIGFscmVhZHkgaW4gdXNlXG4iLCBoZV9kZXYtPnBjaV9kZXYtPmlycSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0gICAKQEAgLTE1NzYsOSArMTU0MiwxMCBAQAogc3RhdGljIHZvaWQKIGhlX3N0b3Aoc3RydWN0IGhlX2RldiAqaGVfZGV2KQogewotCXUxNiBjb21tYW5kOwotCXUzMiBnZW5fY250bF8wLCByZWc7CisJc3RydWN0IGhlX2J1ZmYgKmhlYiwgKm5leHQ7CiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CisJdTMyIGdlbl9jbnRsXzAsIHJlZzsKKwl1MTYgY29tbWFuZDsKIAogCXBjaV9kZXYgPSBoZV9kZXYtPnBjaV9kZXY7CiAKQEAgLTE2MTksMzcgKzE1ODYsMTkgQEAKIAkJCQkJCWhlX2Rldi0+aHNwLCBoZV9kZXYtPmhzcF9waHlzKTsKIAogCWlmIChoZV9kZXYtPnJicGxfYmFzZSkgewotCQlpbnQgaTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhlYiwgbmV4dCwgJmhlX2Rldi0+cmJwbF9vdXRzdGFuZGluZywgZW50cnkpCisJCQlwY2lfcG9vbF9mcmVlKGhlX2Rldi0+cmJwbF9wb29sLCBoZWIsIGhlYi0+bWFwcGluZyk7CiAKLQkJZm9yIChpID0gMDsgaSA8IENPTkZJR19SQlBMX1NJWkU7ICsraSkgewotCQkJdm9pZCAqY3B1YWRkciA9IGhlX2Rldi0+cmJwbF92aXJ0W2ldLnZpcnQ7Ci0JCQlkbWFfYWRkcl90IGRtYV9oYW5kbGUgPSBoZV9kZXYtPnJicGxfYmFzZVtpXS5waHlzOwotCi0JCQlwY2lfcG9vbF9mcmVlKGhlX2Rldi0+cmJwbF9wb29sLCBjcHVhZGRyLCBkbWFfaGFuZGxlKTsKLQkJfQogCQlwY2lfZnJlZV9jb25zaXN0ZW50KGhlX2Rldi0+cGNpX2RldiwgQ09ORklHX1JCUExfU0laRQogCQkJKiBzaXplb2Yoc3RydWN0IGhlX3JicCksIGhlX2Rldi0+cmJwbF9iYXNlLCBoZV9kZXYtPnJicGxfcGh5cyk7CiAJfQogCisJa2ZyZWUoaGVfZGV2LT5yYnBsX3ZpcnQpOworCWtmcmVlKGhlX2Rldi0+cmJwbF90YWJsZSk7CisKIAlpZiAoaGVfZGV2LT5yYnBsX3Bvb2wpCiAJCXBjaV9wb29sX2Rlc3Ryb3koaGVfZGV2LT5yYnBsX3Bvb2wpOwogCi0JaWYgKGhlX2Rldi0+cmJwc19iYXNlKSB7Ci0JCWludCBpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBDT05GSUdfUkJQU19TSVpFOyArK2kpIHsKLQkJCXZvaWQgKmNwdWFkZHIgPSBoZV9kZXYtPnJicHNfdmlydFtpXS52aXJ0OwotCQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlID0gaGVfZGV2LT5yYnBzX2Jhc2VbaV0ucGh5czsKLQotCQkJcGNpX3Bvb2xfZnJlZShoZV9kZXYtPnJicHNfcG9vbCwgY3B1YWRkciwgZG1hX2hhbmRsZSk7Ci0JCX0KLQkJcGNpX2ZyZWVfY29uc2lzdGVudChoZV9kZXYtPnBjaV9kZXYsIENPTkZJR19SQlBTX1NJWkUKLQkJCSogc2l6ZW9mKHN0cnVjdCBoZV9yYnApLCBoZV9kZXYtPnJicHNfYmFzZSwgaGVfZGV2LT5yYnBzX3BoeXMpOwotCX0KLQotCWlmIChoZV9kZXYtPnJicHNfcG9vbCkKLQkJcGNpX3Bvb2xfZGVzdHJveShoZV9kZXYtPnJicHNfcG9vbCk7Ci0KIAlpZiAoaGVfZGV2LT5yYnJxX2Jhc2UpCiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaGVfZGV2LT5wY2lfZGV2LCBDT05GSUdfUkJSUV9TSVpFICogc2l6ZW9mKHN0cnVjdCBoZV9yYnJxKSwKIAkJCQkJCQloZV9kZXYtPnJicnFfYmFzZSwgaGVfZGV2LT5yYnJxX3BoeXMpOwpAQCAtMTY3OSwxMyArMTYyOCwxMyBAQAogX19hbGxvY190cGQoc3RydWN0IGhlX2RldiAqaGVfZGV2KQogewogCXN0cnVjdCBoZV90cGQgKnRwZDsKLQlkbWFfYWRkcl90IGRtYV9oYW5kbGU7IAorCWRtYV9hZGRyX3QgbWFwcGluZzsKIAotCXRwZCA9IHBjaV9wb29sX2FsbG9jKGhlX2Rldi0+dHBkX3Bvb2wsIEdGUF9BVE9NSUN8R0ZQX0RNQSwgJmRtYV9oYW5kbGUpOworCXRwZCA9IHBjaV9wb29sX2FsbG9jKGhlX2Rldi0+dHBkX3Bvb2wsIEdGUF9BVE9NSUN8R0ZQX0RNQSwgJm1hcHBpbmcpOwogCWlmICh0cGQgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAJCQkKLQl0cGQtPnN0YXR1cyA9IFRQRF9BRERSKGRtYV9oYW5kbGUpOworCXRwZC0+c3RhdHVzID0gVFBEX0FERFIobWFwcGluZyk7CiAJdHBkLT5yZXNlcnZlZCA9IDA7IAogCXRwZC0+aW92ZWNbMF0uYWRkciA9IDA7IHRwZC0+aW92ZWNbMF0ubGVuID0gMDsKIAl0cGQtPmlvdmVjWzFdLmFkZHIgPSAwOyB0cGQtPmlvdmVjWzFdLmxlbiA9IDA7CkBAIC0xNzE0LDEzICsxNjYzLDEyIEBACiAJc3RydWN0IGhlX3JicnEgKnJicnFfdGFpbCA9IChzdHJ1Y3QgaGVfcmJycSAqKQogCQkJCSgodW5zaWduZWQgbG9uZyloZV9kZXYtPnJicnFfYmFzZSB8CiAJCQkJCWhlX2Rldi0+aHNwLT5ncm91cFtncm91cF0ucmJycV90YWlsKTsKLQlzdHJ1Y3QgaGVfcmJwICpyYnAgPSBOVUxMOwogCXVuc2lnbmVkIGNpZCwgbGFzdGNpZCA9IC0xOwotCXVuc2lnbmVkIGJ1Zl9sZW4gPSAwOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGF0bV92Y2MgKnZjYyA9IE5VTEw7CiAJc3RydWN0IGhlX3ZjYyAqaGVfdmNjOwotCXN0cnVjdCBoZV9pb3ZlYyAqaW92OworCXN0cnVjdCBoZV9idWZmICpoZWIsICpuZXh0OworCWludCBpOwogCWludCBwZHVzX2Fzc2VtYmxlZCA9IDA7CiAJaW50IHVwZGF0ZWQgPSAwOwogCkBAIC0xNzQwLDQ0ICsxNjg4LDM1IEBACiAJCQlSQlJRX0NPTl9DTE9TRUQoaGVfZGV2LT5yYnJxX2hlYWQpID8gIiBDT05fQ0xPU0VEIiA6ICIiLAogCQkJUkJSUV9IQlVGX0VSUihoZV9kZXYtPnJicnFfaGVhZCkgPyAiIEhCVUZfRVJSIiA6ICIiKTsKIAotCQlpZiAoUkJSUV9BRERSKGhlX2Rldi0+cmJycV9oZWFkKSAmIFJCUF9TTUFMTEJVRikKLQkJCXJicCA9ICZoZV9kZXYtPnJicHNfYmFzZVtSQlBfSU5ERVgoUkJSUV9BRERSKGhlX2Rldi0+cmJycV9oZWFkKSldOwotCQllbHNlCi0JCQlyYnAgPSAmaGVfZGV2LT5yYnBsX2Jhc2VbUkJQX0lOREVYKFJCUlFfQUREUihoZV9kZXYtPnJicnFfaGVhZCkpXTsKLQkJCi0JCWJ1Zl9sZW4gPSBSQlJRX0JVRkxFTihoZV9kZXYtPnJicnFfaGVhZCkgKiA0OwotCQljaWQgPSBSQlJRX0NJRChoZV9kZXYtPnJicnFfaGVhZCk7CisJCWkgPSBSQlJRX0FERFIoaGVfZGV2LT5yYnJxX2hlYWQpID4+IFJCUF9JRFhfT0ZGU0VUOworCQloZWIgPSBoZV9kZXYtPnJicGxfdmlydFtpXTsKIAorCQljaWQgPSBSQlJRX0NJRChoZV9kZXYtPnJicnFfaGVhZCk7CiAJCWlmIChjaWQgIT0gbGFzdGNpZCkKIAkJCXZjYyA9IF9fZmluZF92Y2MoaGVfZGV2LCBjaWQpOwogCQlsYXN0Y2lkID0gY2lkOwogCi0JCWlmICh2Y2MgPT0gTlVMTCkgewotCQkJaHByaW50aygidmNjID09IE5VTEwgIChjaWQgMHgleClcbiIsIGNpZCk7Ci0JCQlpZiAoIVJCUlFfSEJVRl9FUlIoaGVfZGV2LT5yYnJxX2hlYWQpKQotCQkJCQlyYnAtPnN0YXR1cyAmPSB+UkJQX0xPQU5FRDsKKwkJaWYgKHZjYyA9PSBOVUxMIHx8IChoZV92Y2MgPSBIRV9WQ0ModmNjKSkgPT0gTlVMTCkgeworCQkJaHByaW50aygidmNjL2hlX3ZjYyA9PSBOVUxMICAoY2lkIDB4JXgpXG4iLCBjaWQpOworCQkJaWYgKCFSQlJRX0hCVUZfRVJSKGhlX2Rldi0+cmJycV9oZWFkKSkgeworCQkJCWNsZWFyX2JpdChpLCBoZV9kZXYtPnJicGxfdGFibGUpOworCQkJCWxpc3RfZGVsKCZoZWItPmVudHJ5KTsKKwkJCQlwY2lfcG9vbF9mcmVlKGhlX2Rldi0+cmJwbF9wb29sLCBoZWIsIGhlYi0+bWFwcGluZyk7CisJCQl9CiAJCQkJCQogCQkJZ290byBuZXh0X3JicnFfZW50cnk7CiAJCX0KIAotCQloZV92Y2MgPSBIRV9WQ0ModmNjKTsKLQkJaWYgKGhlX3ZjYyA9PSBOVUxMKSB7Ci0JCQlocHJpbnRrKCJoZV92Y2MgPT0gTlVMTCAgKGNpZCAweCV4KVxuIiwgY2lkKTsKLQkJCWlmICghUkJSUV9IQlVGX0VSUihoZV9kZXYtPnJicnFfaGVhZCkpCi0JCQkJCXJicC0+c3RhdHVzICY9IH5SQlBfTE9BTkVEOwotCQkJZ290byBuZXh0X3JicnFfZW50cnk7Ci0JCX0KLQogCQlpZiAoUkJSUV9IQlVGX0VSUihoZV9kZXYtPnJicnFfaGVhZCkpIHsKIAkJCWhwcmludGsoIkhCVUZfRVJSISAgKGNpZCAweCV4KVxuIiwgY2lkKTsKIAkJCQlhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT5yeF9kcm9wKTsKIAkJCWdvdG8gcmV0dXJuX2hvc3RfYnVmZmVyczsKIAkJfQogCi0JCWhlX3ZjYy0+aW92X3RhaWwtPmlvdl9iYXNlID0gUkJSUV9BRERSKGhlX2Rldi0+cmJycV9oZWFkKTsKLQkJaGVfdmNjLT5pb3ZfdGFpbC0+aW92X2xlbiA9IGJ1Zl9sZW47Ci0JCWhlX3ZjYy0+cGR1X2xlbiArPSBidWZfbGVuOwotCQkrK2hlX3ZjYy0+aW92X3RhaWw7CisJCWhlYi0+bGVuID0gUkJSUV9CVUZMRU4oaGVfZGV2LT5yYnJxX2hlYWQpICogNDsKKwkJY2xlYXJfYml0KGksIGhlX2Rldi0+cmJwbF90YWJsZSk7CisJCWxpc3RfbW92ZV90YWlsKCZoZWItPmVudHJ5LCAmaGVfdmNjLT5idWZmZXJzKTsKKwkJaGVfdmNjLT5wZHVfbGVuICs9IGhlYi0+bGVuOwogCiAJCWlmIChSQlJRX0NPTl9DTE9TRUQoaGVfZGV2LT5yYnJxX2hlYWQpKSB7CiAJCQlsYXN0Y2lkID0gLTE7CkBAIC0xNzg2LDEyICsxNzI1LDYgQEAKIAkJCWdvdG8gcmV0dXJuX2hvc3RfYnVmZmVyczsKIAkJfQogCi0jaWZkZWYgbm90ZGVmCi0JCWlmICgoaGVfdmNjLT5pb3ZfdGFpbCAtIGhlX3ZjYy0+aW92X2hlYWQpID4gSEVfTUFYSU9WKSB7Ci0JCQlocHJpbnRrKCJpb3ZlYyBmdWxsISAgY2lkIDB4JXhcbiIsIGNpZCk7Ci0JCQlnb3RvIHJldHVybl9ob3N0X2J1ZmZlcnM7Ci0JCX0KLSNlbmRpZgogCQlpZiAoIVJCUlFfRU5EX1BEVShoZV9kZXYtPnJicnFfaGVhZCkpCiAJCQlnb3RvIG5leHRfcmJycV9lbnRyeTsKIApAQCAtMTgxOSwxNSArMTc1Miw4IEBACiAKIAkJX19uZXRfdGltZXN0YW1wKHNrYik7CiAKLQkJZm9yIChpb3YgPSBoZV92Y2MtPmlvdl9oZWFkOwotCQkJCWlvdiA8IGhlX3ZjYy0+aW92X3RhaWw7ICsraW92KSB7Ci0JCQlpZiAoaW92LT5pb3ZfYmFzZSAmIFJCUF9TTUFMTEJVRikKLQkJCQltZW1jcHkoc2tiX3B1dChza2IsIGlvdi0+aW92X2xlbiksCi0JCQkJCWhlX2Rldi0+cmJwc192aXJ0W1JCUF9JTkRFWChpb3YtPmlvdl9iYXNlKV0udmlydCwgaW92LT5pb3ZfbGVuKTsKLQkJCWVsc2UKLQkJCQltZW1jcHkoc2tiX3B1dChza2IsIGlvdi0+aW92X2xlbiksCi0JCQkJCWhlX2Rldi0+cmJwbF92aXJ0W1JCUF9JTkRFWChpb3YtPmlvdl9iYXNlKV0udmlydCwgaW92LT5pb3ZfbGVuKTsKLQkJfQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhlYiwgJmhlX3ZjYy0+YnVmZmVycywgZW50cnkpCisJCQltZW1jcHkoc2tiX3B1dChza2IsIGhlYi0+bGVuKSwgJmhlYi0+ZGF0YSwgaGViLT5sZW4pOwogCiAJCXN3aXRjaCAodmNjLT5xb3MuYWFsKSB7CiAJCQljYXNlIEFUTV9BQUwwOgpAQCAtMTg2NywxNyArMTc5Myw5IEBACiByZXR1cm5faG9zdF9idWZmZXJzOgogCQkrK3BkdXNfYXNzZW1ibGVkOwogCi0JCWZvciAoaW92ID0gaGVfdmNjLT5pb3ZfaGVhZDsKLQkJCQlpb3YgPCBoZV92Y2MtPmlvdl90YWlsOyArK2lvdikgewotCQkJaWYgKGlvdi0+aW92X2Jhc2UgJiBSQlBfU01BTExCVUYpCi0JCQkJcmJwID0gJmhlX2Rldi0+cmJwc19iYXNlW1JCUF9JTkRFWChpb3YtPmlvdl9iYXNlKV07Ci0JCQllbHNlCi0JCQkJcmJwID0gJmhlX2Rldi0+cmJwbF9iYXNlW1JCUF9JTkRFWChpb3YtPmlvdl9iYXNlKV07Ci0KLQkJCXJicC0+c3RhdHVzICY9IH5SQlBfTE9BTkVEOwotCQl9Ci0KLQkJaGVfdmNjLT5pb3ZfdGFpbCA9IGhlX3ZjYy0+aW92X2hlYWQ7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShoZWIsIG5leHQsICZoZV92Y2MtPmJ1ZmZlcnMsIGVudHJ5KQorCQkJcGNpX3Bvb2xfZnJlZShoZV9kZXYtPnJicGxfcG9vbCwgaGViLCBoZWItPm1hcHBpbmcpOworCQlJTklUX0xJU1RfSEVBRCgmaGVfdmNjLT5idWZmZXJzKTsKIAkJaGVfdmNjLT5wZHVfbGVuID0gMDsKIAogbmV4dF9yYnJxX2VudHJ5OgpAQCAtMTk3OCwyNyArMTg5Niw0NiBAQAogCX0KIH0KIAotCiBzdGF0aWMgdm9pZAogaGVfc2VydmljZV9yYnBsKHN0cnVjdCBoZV9kZXYgKmhlX2RldiwgaW50IGdyb3VwKQogewotCXN0cnVjdCBoZV9yYnAgKm5ld3RhaWw7CisJc3RydWN0IGhlX3JicCAqbmV3X3RhaWw7CiAJc3RydWN0IGhlX3JicCAqcmJwbF9oZWFkOworCXN0cnVjdCBoZV9idWZmICpoZWI7CisJZG1hX2FkZHJfdCBtYXBwaW5nOworCWludCBpOwogCWludCBtb3ZlZCA9IDA7CiAKIAlyYnBsX2hlYWQgPSAoc3RydWN0IGhlX3JicCAqKSAoKHVuc2lnbmVkIGxvbmcpaGVfZGV2LT5yYnBsX2Jhc2UgfAogCQkJCQlSQlBMX01BU0soaGVfcmVhZGwoaGVfZGV2LCBHMF9SQlBMX1MpKSk7CiAKIAlmb3IgKDs7KSB7Ci0JCW5ld3RhaWwgPSAoc3RydWN0IGhlX3JicCAqKSAoKHVuc2lnbmVkIGxvbmcpaGVfZGV2LT5yYnBsX2Jhc2UgfAorCQluZXdfdGFpbCA9IChzdHJ1Y3QgaGVfcmJwICopICgodW5zaWduZWQgbG9uZyloZV9kZXYtPnJicGxfYmFzZSB8CiAJCQkJCQlSQlBMX01BU0soaGVfZGV2LT5yYnBsX3RhaWwrMSkpOwogCiAJCS8qIHRhYmxlIDMuNDIgLS0gcmJwbF90YWlsIHNob3VsZCBuZXZlciBiZSBzZXQgdG8gcmJwbF9oZWFkICovCi0JCWlmICgobmV3dGFpbCA9PSByYnBsX2hlYWQpIHx8IChuZXd0YWlsLT5zdGF0dXMgJiBSQlBfTE9BTkVEKSkKKwkJaWYgKG5ld190YWlsID09IHJicGxfaGVhZCkKIAkJCWJyZWFrOwogCi0JCW5ld3RhaWwtPnN0YXR1cyB8PSBSQlBfTE9BTkVEOwotCQloZV9kZXYtPnJicGxfdGFpbCA9IG5ld3RhaWw7CisJCWkgPSBmaW5kX25leHRfemVyb19iaXQoaGVfZGV2LT5yYnBsX3RhYmxlLCBSQlBMX1RBQkxFX1NJWkUsIGhlX2Rldi0+cmJwbF9oaW50KTsKKwkJaWYgKGkgPiAoUkJQTF9UQUJMRV9TSVpFIC0gMSkpIHsKKwkJCWkgPSBmaW5kX2ZpcnN0X3plcm9fYml0KGhlX2Rldi0+cmJwbF90YWJsZSwgUkJQTF9UQUJMRV9TSVpFKTsKKwkJCWlmIChpID4gKFJCUExfVEFCTEVfU0laRSAtIDEpKQorCQkJCWJyZWFrOworCQl9CisJCWhlX2Rldi0+cmJwbF9oaW50ID0gaSArIDE7CisKKwkJaGViID0gcGNpX3Bvb2xfYWxsb2MoaGVfZGV2LT5yYnBsX3Bvb2wsIEdGUF9BVE9NSUN8R0ZQX0RNQSwgJm1hcHBpbmcpOworCQlpZiAoIWhlYikKKwkJCWJyZWFrOworCQloZWItPm1hcHBpbmcgPSBtYXBwaW5nOworCQlsaXN0X2FkZCgmaGViLT5lbnRyeSwgJmhlX2Rldi0+cmJwbF9vdXRzdGFuZGluZyk7CisJCWhlX2Rldi0+cmJwbF92aXJ0W2ldID0gaGViOworCQlzZXRfYml0KGksIGhlX2Rldi0+cmJwbF90YWJsZSk7CisJCW5ld190YWlsLT5pZHggPSBpIDw8IFJCUF9JRFhfT0ZGU0VUOworCQluZXdfdGFpbC0+cGh5cyA9IG1hcHBpbmcgKyBvZmZzZXRvZihzdHJ1Y3QgaGVfYnVmZiwgZGF0YSk7CisKKwkJaGVfZGV2LT5yYnBsX3RhaWwgPSBuZXdfdGFpbDsKIAkJKyttb3ZlZDsKIAl9IAogCkBAIC0yMDA3LDMzICsxOTQ0LDYgQEAKIH0KIAogc3RhdGljIHZvaWQKLWhlX3NlcnZpY2VfcmJwcyhzdHJ1Y3QgaGVfZGV2ICpoZV9kZXYsIGludCBncm91cCkKLXsKLQlzdHJ1Y3QgaGVfcmJwICpuZXd0YWlsOwotCXN0cnVjdCBoZV9yYnAgKnJicHNfaGVhZDsKLQlpbnQgbW92ZWQgPSAwOwotCi0JcmJwc19oZWFkID0gKHN0cnVjdCBoZV9yYnAgKikgKCh1bnNpZ25lZCBsb25nKWhlX2Rldi0+cmJwc19iYXNlIHwKLQkJCQkJUkJQU19NQVNLKGhlX3JlYWRsKGhlX2RldiwgRzBfUkJQU19TKSkpOwotCi0JZm9yICg7OykgewotCQluZXd0YWlsID0gKHN0cnVjdCBoZV9yYnAgKikgKCh1bnNpZ25lZCBsb25nKWhlX2Rldi0+cmJwc19iYXNlIHwKLQkJCQkJCVJCUFNfTUFTSyhoZV9kZXYtPnJicHNfdGFpbCsxKSk7Ci0KLQkJLyogdGFibGUgMy40MiAtLSByYnBzX3RhaWwgc2hvdWxkIG5ldmVyIGJlIHNldCB0byByYnBzX2hlYWQgKi8KLQkJaWYgKChuZXd0YWlsID09IHJicHNfaGVhZCkgfHwgKG5ld3RhaWwtPnN0YXR1cyAmIFJCUF9MT0FORUQpKQotCQkJYnJlYWs7Ci0KLQkJbmV3dGFpbC0+c3RhdHVzIHw9IFJCUF9MT0FORUQ7Ci0JCWhlX2Rldi0+cmJwc190YWlsID0gbmV3dGFpbDsKLQkJKyttb3ZlZDsKLQl9IAotCi0JaWYgKG1vdmVkKQotCQloZV93cml0ZWwoaGVfZGV2LCBSQlBTX01BU0soaGVfZGV2LT5yYnBzX3RhaWwpLCBHMF9SQlBTX1QpOwotfQotCi1zdGF0aWMgdm9pZAogaGVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTIwNTUsMTAgKzE5NjUsOCBAQAogCQkJCUhQUklOVEsoInJicnElZCB0aHJlc2hvbGRcbiIsIGdyb3VwKTsKIAkJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAkJCWNhc2UgSVRZUEVfUkJSUV9USU1FUjoKLQkJCQlpZiAoaGVfc2VydmljZV9yYnJxKGhlX2RldiwgZ3JvdXApKSB7CisJCQkJaWYgKGhlX3NlcnZpY2VfcmJycShoZV9kZXYsIGdyb3VwKSkKIAkJCQkJaGVfc2VydmljZV9yYnBsKGhlX2RldiwgZ3JvdXApOwotCQkJCQloZV9zZXJ2aWNlX3JicHMoaGVfZGV2LCBncm91cCk7Ci0JCQkJfQogCQkJCWJyZWFrOwogCQkJY2FzZSBJVFlQRV9UQlJRX1RIUkVTSDoKIAkJCQlIUFJJTlRLKCJ0YnJxJWQgdGhyZXNob2xkXG4iLCBncm91cCk7CkBAIC0yMDcwLDcgKzE5NzgsNyBAQAogCQkJCWhlX3NlcnZpY2VfcmJwbChoZV9kZXYsIGdyb3VwKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgSVRZUEVfUkJQU19USFJFU0g6Ci0JCQkJaGVfc2VydmljZV9yYnBzKGhlX2RldiwgZ3JvdXApOworCQkJCS8qIHNob3VsZG4ndCBoYXBwZW4gdW5sZXNzIHNtYWxsIGJ1ZmZlcnMgZW5hYmxlZCAqLwogCQkJCWJyZWFrOwogCQkJY2FzZSBJVFlQRV9QSFk6CiAJCQkJSFBSSU5USygicGh5IGludGVycnVwdFxuIik7CkBAIC0yMDk4LDcgKzIwMDYsNiBAQAogCiAJCQkJaGVfc2VydmljZV9yYnJxKGhlX2RldiwgMCk7CiAJCQkJaGVfc2VydmljZV9yYnBsKGhlX2RldiwgMCk7Ci0JCQkJaGVfc2VydmljZV9yYnBzKGhlX2RldiwgMCk7CiAJCQkJaGVfc2VydmljZV90YnJxKGhlX2RldiwgMCk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgpAQCAtMjI1Miw3ICsyMTU5LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaGVfdmNjLT5pb3ZfdGFpbCA9IGhlX3ZjYy0+aW92X2hlYWQ7CisJSU5JVF9MSVNUX0hFQUQoJmhlX3ZjYy0+YnVmZmVycyk7CiAJaGVfdmNjLT5wZHVfbGVuID0gMDsKIAloZV92Y2MtPnJjX2luZGV4ID0gLTE7CiAKQEAgLTI0MDYsOCArMjMxMyw4IEBACiAJCQlnb3RvIG9wZW5fZmFpbGVkOwogCQl9CiAKLQkJcnNyMSA9IFJTUjFfR1JPVVAoMCk7Ci0JCXJzcjQgPSBSU1I0X0dST1VQKDApOworCQlyc3IxID0gUlNSMV9HUk9VUCgwKSB8IFJTUjFfUkJQTF9PTkxZOworCQlyc3I0ID0gUlNSNF9HUk9VUCgwKSB8IFJTUjRfUkJQTF9PTkxZOwogCQlyc3IwID0gdmNjLT5xb3Mucnh0cC50cmFmZmljX2NsYXNzID09IEFUTV9VQlIgPyAKIAkJCQkoUlNSMF9FUERfRU5BQkxFfFJTUjBfUFBEX0VOQUJMRSkgOiAwOwogCkBAIC0yOTYzLDggKzI4NzAsNyBAQAogTU9EVUxFX1BBUk1fREVTQyhzZGgsICJ1c2UgU0RIIGZyYW1pbmcgKGRlZmF1bHQgMCkiKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhlX3BjaV90YmxbXSA9IHsKLQl7IFBDSV9WRU5ET1JfSURfRk9SRSwgUENJX0RFVklDRV9JRF9GT1JFX0hFLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAotCSAgMCwgMCwgMCB9LAorCXsgUENJX1ZERVZJQ0UoRk9SRSwgUENJX0RFVklDRV9JRF9GT1JFX0hFKSwgMCB9LAogCXsgMCwgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaGUuaCBiL2RyaXZlcnMvYXRtL2hlLmgKaW5kZXggYzI5ODNlMC4uMTEwYTI3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vaGUuaAorKysgYi9kcml2ZXJzL2F0bS9oZS5oCkBAIC02NywxMSArNjcsNiBAQAogI2RlZmluZSBDT05GSUdfUkJQTF9CVUZTSVpFCTQwOTYKICNkZWZpbmUgUkJQTF9NQVNLKHgpCQkoKCh1bnNpZ25lZCBsb25nKSh4KSkmKChDT05GSUdfUkJQTF9TSVpFPDwzKS0xKSkKIAotI2RlZmluZSBDT05GSUdfUkJQU19TSVpFCTEwMjQKLSNkZWZpbmUgQ09ORklHX1JCUFNfVEhSRVNICTY0Ci0jZGVmaW5lIENPTkZJR19SQlBTX0JVRlNJWkUJMTI4Ci0jZGVmaW5lIFJCUFNfTUFTSyh4KQkJKCgodW5zaWduZWQgbG9uZykoeCkpJigoQ09ORklHX1JCUFNfU0laRTw8MyktMSkpCi0KIC8qIDUuMS4zIGluaXRpYWxpemUgY29ubmVjdGlvbiBtZW1vcnkgKi8KIAogI2RlZmluZSBDT05GSUdfUlNSQQkJMHgwMDAwMApAQCAtMjAzLDM2ICsxOTgsMzcgQEAKIAl9IGdyb3VwW0hFX05VTV9HUk9VUFNdOwogfTsKIAotLyogZmlndXJlIDIuOSByZWNlaXZlIGJ1ZmZlciBwb29scyAqLworLyoKKyAqIGZpZ3VyZSAyLjkgcmVjZWl2ZSBidWZmZXIgcG9vbHMKKyAqCisgKiBzaW5jZSBhIHZpcnR1YWwgYWRkcmVzcyBtaWdodCBiZSBtb3JlIHRoYW4gMzIgYml0cywgd2Ugc3RvcmUgYW4gaW5kZXgKKyAqIGluIHRoZSB2aXJ0IG1lbWJlciBvZiBoZV9yYnAuICBOT1RFOiB0aGUgbG93ZXIgc2l4IGJpdHMgaW4gdGhlICByYnJxCisgKiBhZGRyIG1lbWJlciBhcmUgdXNlZCBmb3IgYnVmZmVyIHN0YXR1cyBmdXJ0aGVyIGxpbWl0aW5nIHVzIHRvIDI2IGJpdHMuCisgKi8KIAogc3RydWN0IGhlX3JicCB7CiAJdm9sYXRpbGUgdTMyIHBoeXM7Ci0Jdm9sYXRpbGUgdTMyIHN0YXR1czsKKwl2b2xhdGlsZSB1MzIgaWR4OwkvKiB2aXJ0ICovCiB9OwogCi0vKiBOT1RFOiBpdCBpcyBzdWdnZXN0ZWQgdGhhdCB2aXJ0IGJlIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGhvc3QKLSAgIGJ1ZmZlci4gIG9uIGEgNjQtYml0IG1hY2hpbmUsIHRoaXMgd291bGQgbm90IHdvcmsuICBJbnN0ZWFkLCB3ZQotICAgc3RvcmUgdGhlIHJlYWwgdmlydHVhbCBhZGRyZXNzIGluIGFub3RoZXIgbGlzdCwgYW5kIHN0b3JlIGFuIGluZGV4Ci0gICAoYW5kIGJ1ZmZlciBzdGF0dXMpIGluIHRoZSB2aXJ0IG1lbWJlci4KLSovCisjZGVmaW5lIFJCUF9JRFhfT0ZGU0VUIDYKIAotI2RlZmluZSBSQlBfSU5ERVhfT0ZGCTYKLSNkZWZpbmUgUkJQX0lOREVYKHgpCSgoKGxvbmcpKHgpID4+IFJCUF9JTkRFWF9PRkYpICYgMHhmZmZmKQotI2RlZmluZSBSQlBfTE9BTkVECTB4ODAwMDAwMDAKLSNkZWZpbmUgUkJQX1NNQUxMQlVGCTB4NDAwMDAwMDAKKy8qCisgKiB0aGUgaGUgZG1hIGVuZ2luZSB3aWxsIHRyeSB0byBob2xkIGFuIGV4dHJhIDE2IGJ1ZmZlcnMgaW4gaXRzIGxvY2FsCisgKiBjYWNoZXMuICBhbmQgYWRkIGEgY291cGxlIGJ1ZmZlcnMgZm9yIHNhZmV0eS4KKyAqLwogCi1zdHJ1Y3QgaGVfdmlydCB7Ci0Jdm9pZCAqdmlydDsKKyNkZWZpbmUgUkJQTF9UQUJMRV9TSVpFIChDT05GSUdfUkJQTF9TSVpFICsgMTYgKyAyKQorCitzdHJ1Y3QgaGVfYnVmZiB7CisJc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKKwlkbWFfYWRkcl90IG1hcHBpbmc7CisJdW5zaWduZWQgbG9uZyBsZW47CisJdTggZGF0YVtdOwogfTsKIAotI2RlZmluZSBSQlBMX0FMSUdOTUVOVCBDT05GSUdfUkJQTF9TSVpFCi0jZGVmaW5lIFJCUFNfQUxJR05NRU5UIENPTkZJR19SQlBTX1NJWkUKLQogI2lmZGVmIG5vdHlldAogc3RydWN0IGhlX2dyb3VwIHsKLQl1MzIgcnBic19zaXplLCBycGJzX3FzaXplOwotCXN0cnVjdCBoZV9yYnAgcmJwc19iYTsKLQogCXUzMiBycGJsX3NpemUsIHJwYmxfcXNpemU7CiAJc3RydWN0IGhlX3JwYl9lbnRyeSAqcmJwbF9iYTsKIH07CkBAIC0yOTcsMTggKzI5MywxNSBAQAogCXN0cnVjdCBoZV9yYnJxICpyYnJxX2Jhc2UsICpyYnJxX2hlYWQ7CiAJaW50IHJicnFfcGVhazsKIAorCXN0cnVjdCBoZV9idWZmICoqcmJwbF92aXJ0OworCXVuc2lnbmVkIGxvbmcgKnJicGxfdGFibGU7CisJdW5zaWduZWQgbG9uZyByYnBsX2hpbnQ7CiAJc3RydWN0IHBjaV9wb29sICpyYnBsX3Bvb2w7CiAJZG1hX2FkZHJfdCByYnBsX3BoeXM7CiAJc3RydWN0IGhlX3JicCAqcmJwbF9iYXNlLCAqcmJwbF90YWlsOwotCXN0cnVjdCBoZV92aXJ0ICpyYnBsX3ZpcnQ7CisJc3RydWN0IGxpc3RfaGVhZCByYnBsX291dHN0YW5kaW5nOwogCWludCByYnBsX3BlYWs7CiAKLQlzdHJ1Y3QgcGNpX3Bvb2wgKnJicHNfcG9vbDsKLQlkbWFfYWRkcl90IHJicHNfcGh5czsKLQlzdHJ1Y3QgaGVfcmJwICpyYnBzX2Jhc2UsICpyYnBzX3RhaWw7Ci0Jc3RydWN0IGhlX3ZpcnQgKnJicHNfdmlydDsKLQlpbnQgcmJwc19wZWFrOwotCiAJZG1hX2FkZHJfdCB0YnJxX3BoeXM7CiAJc3RydWN0IGhlX3RicnEgKnRicnFfYmFzZSwgKnRicnFfaGVhZDsKIAlpbnQgdGJycV9wZWFrOwpAQCAtMzIxLDIwICszMTQsMTIgQEAKIAlzdHJ1Y3QgaGVfZGV2ICpuZXh0OwogfTsKIAotc3RydWN0IGhlX2lvdmVjCi17Ci0JdTMyIGlvdl9iYXNlOwotCXUzMiBpb3ZfbGVuOwotfTsKLQogI2RlZmluZSBIRV9NQVhJT1YgMjAKIAogc3RydWN0IGhlX3ZjYwogewotCXN0cnVjdCBoZV9pb3ZlYyBpb3ZfaGVhZFtIRV9NQVhJT1ZdOwotCXN0cnVjdCBoZV9pb3ZlYyAqaW92X3RhaWw7CisJc3RydWN0IGxpc3RfaGVhZCBidWZmZXJzOwogCWludCBwZHVfbGVuOwotCiAJaW50IHJjX2luZGV4OwogCiAJd2FpdF9xdWV1ZV9oZWFkX3Qgcnhfd2FpdHE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9pZHQ3NzEwNS5jIGIvZHJpdmVycy9hdG0vaWR0NzcxMDUuYwppbmRleCBkYWI1Y2Y1Li5iY2E5Y2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9pZHQ3NzEwNS5jCisrKyBiL2RyaXZlcnMvYXRtL2lkdDc3MTA1LmMKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICAgICAgICAgIGlzdGF0ID0gR0VUKElTVEFUKTsgLyogc2lkZSBlZmZlY3Q6IGNsZWFycyBhbGwgaW50ZXJydXB0IHN0YXR1cyBiaXRzICovCiAgICAgICAgICAgICAgICAgaWYgKGlzdGF0ICYgSURUNzcxMDVfSVNUQVRfR09PRFNJRykgewogICAgICAgICAgICAgICAgICAgICAvKiBGb3VuZCBzaWduYWwgYWdhaW4gKi8KLSAgICAgICAgICAgICAgICAgICAgZGV2LT5zaWduYWwgPSBBVE1fUEhZX1NJR19GT1VORDsKKyAgICAgICAgICAgICAgICAgICAgYXRtX2Rldl9zaWduYWxfY2hhbmdlKGRldiwgQVRNX1BIWV9TSUdfRk9VTkQpOwogCSAgICAgICAgICAgIHByaW50ayhLRVJOX05PVElDRSAiJXMoaXRmICVkKTogc2lnbmFsIGRldGVjdGVkIGFnYWluXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT50eXBlLGRldi0+bnVtYmVyKTsKICAgICAgICAgICAgICAgICAgICAgLyogZmx1c2ggdGhlIHJlY2VpdmUgRklGTyAqLwpAQCAtMjIyLDcgKzIyMiw3IEBACiAgICAgICAgICAgICAvKiBSeCBTaWduYWwgQ29uZGl0aW9uIENoYW5nZSAtIGxpbmUgd2VudCB1cCBvciBkb3duICovCiAgICAgICAgICAgICBpZiAoaXN0YXQgJiBJRFQ3NzEwNV9JU1RBVF9HT09EU0lHKSB7ICAgLyogc2lnbmFsIGRldGVjdGVkIGFnYWluICovCiAgICAgICAgICAgICAgICAgLyogVGhpcyBzaG91bGQgbm90IGhhcHBlbiAocmVzdGFydCB0aW1lciBkb2VzIGl0KSBidXQgSklDICovCi0gICAgICAgICAgICAgICAgZGV2LT5zaWduYWwgPSBBVE1fUEhZX1NJR19GT1VORDsKKwkJYXRtX2Rldl9zaWduYWxfY2hhbmdlKGRldiwgQVRNX1BIWV9TSUdfRk9VTkQpOwogICAgICAgICAgICAgfSBlbHNlIHsgICAgLyogc2lnbmFsIGxvc3QgKi8KICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIERpc2FibGUgaW50ZXJydXB0cyBhbmQgc3RvcCBhbGwgdHJhbnNtaXNzaW9uIGFuZApAQCAtMjM1LDcgKzIzNSw3IEBACiAgICAgICAgICAgICAgICAgICAgIElEVDc3MTA1X01DUl9EUklDfAogICAgICAgICAgICAgICAgICAgICBJRFQ3NzEwNV9NQ1JfSEFMVFRYCiAgICAgICAgICAgICAgICAgICAgICkgJiB+SURUNzcxMDVfTUNSX0VJUCwgTUNSKTsKLSAgICAgICAgICAgICAgICBkZXYtPnNpZ25hbCA9IEFUTV9QSFlfU0lHX0xPU1Q7CisJCWF0bV9kZXZfc2lnbmFsX2NoYW5nZShkZXYsIEFUTV9QSFlfU0lHX0xPU1QpOwogCSAgICAgICAgcHJpbnRrKEtFUk5fTk9USUNFICIlcyhpdGYgJWQpOiBzaWduYWwgbG9zdFxuIiwKICAgICAgICAgICAgICAgICAgICAgZGV2LT50eXBlLGRldi0+bnVtYmVyKTsKICAgICAgICAgICAgIH0KQEAgLTI3Miw4ICsyNzIsOSBAQAogCW1lbXNldCgmUFJJVihkZXYpLT5zdGF0cywwLHNpemVvZihzdHJ1Y3QgaWR0NzcxMDVfc3RhdHMpKTsKICAgICAgICAgCiAgICAgICAgIC8qIGluaXRpYWxpc2UgZGV2LT5zaWduYWwgZnJvbSBHb29kIFNpZ25hbCBCaXQgKi8KLSAgICAgICAgZGV2LT5zaWduYWwgPSBHRVQoSVNUQVQpICYgSURUNzcxMDVfSVNUQVRfR09PRFNJRyA/IEFUTV9QSFlfU0lHX0ZPVU5EIDoKLQkgIEFUTV9QSFlfU0lHX0xPU1Q7CisJYXRtX2Rldl9zaWduYWxfY2hhbmdlKGRldiwKKwkJR0VUKElTVEFUKSAmIElEVDc3MTA1X0lTVEFUX0dPT0RTSUcgPworCQlBVE1fUEhZX1NJR19GT1VORCA6IEFUTV9QSFlfU0lHX0xPU1QpOwogCWlmIChkZXYtPnNpZ25hbCA9PSBBVE1fUEhZX1NJR19MT1NUKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyhpdGYgJWQpOiBubyBzaWduYWxcbiIsZGV2LT50eXBlLAogCQkgICAgZGV2LT5udW1iZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaWR0NzcyNTIuYyBiL2RyaXZlcnMvYXRtL2lkdDc3MjUyLmMKaW5kZXggOTg2NTdhNi4uMTY3OWNiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vaWR0NzcyNTIuYworKysgYi9kcml2ZXJzL2F0bS9pZHQ3NzI1Mi5jCkBAIC0zMzY0LDcgKzMzNjQsNyBAQAogCQl3cml0ZWwoU0FSX1NUQVRfVE1ST0YsIFNBUl9SRUdfU1RBVCk7CiAJfQogCUlQUklOVEsoIiVzOiBSZXF1ZXN0IElSUSAuLi4gIiwgY2FyZC0+bmFtZSk7Ci0JaWYgKHJlcXVlc3RfaXJxKHBjaWRldi0+aXJxLCBpZHQ3NzI1Ml9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsCisJaWYgKHJlcXVlc3RfaXJxKHBjaWRldi0+aXJxLCBpZHQ3NzI1Ml9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJY2FyZC0+bmFtZSwgY2FyZCkgIT0gMCkgewogCQlwcmludGsoIiVzOiBjYW4ndCBhbGxvY2F0ZSBJUlEuXG4iLCBjYXJkLT5uYW1lKTsKIAkJZGVpbml0X2NhcmQoY2FyZCk7CkBAIC0zNzc5LDggKzM3NzksNyBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaWR0NzcyNTJfcGNpX3RibFtdID0KIHsKLQl7IFBDSV9WRU5ET1JfSURfSURULCBQQ0lfREVWSUNFX0lEX0lEVF9JRFQ3NzI1MiwKLQkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKKwl7IFBDSV9WREVWSUNFKElEVCwgUENJX0RFVklDRV9JRF9JRFRfSURUNzcyNTIpLCAwIH0sCiAJeyAwLCB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9uaWNzdGFyLmMgYi9kcml2ZXJzL2F0bS9uaWNzdGFyLmMKaW5kZXggYjc0NzNhNi4uMmYzNTE2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vbmljc3Rhci5jCisrKyBiL2RyaXZlcnMvYXRtL25pY3N0YXIuYwpAQCAtMSw1ICsxLDQgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCisvKgogICogbmljc3Rhci5jCiAgKgogICogRGV2aWNlIGRyaXZlciBzdXBwb3J0aW5nIENCUiBmb3IgSURUIDc3MjAxLzc3MjExICJOSUNTdEFSIiBiYXNlZCBjYXJkcy4KQEAgLTE2LDEyICsxNSwxMCBAQAogICoKICAqCiAgKiAoQykgSU5FU0MgMTk5OQotICoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICovCiAKLQotLyoqKiogSU1QT1JUQU5UIElORk9STUFUSU9OICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyoKKyAqIElNUE9SVEFOVCBJTkZPUk1BVElPTgogICoKICAqIFRoZXJlIGFyZSBjdXJyZW50bHkgdGhyZWUgdHlwZXMgb2Ygc3BpbmxvY2tzOgogICoKQEAgLTMxLDkgKzI4LDkgQEAKICAqCiAgKiBUaGVzZSBtdXN0IE5FVkVSIGJlIGdyYWJiZWQgaW4gcmV2ZXJzZSBvcmRlci4KICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICovCiAKLS8qIEhlYWRlciBmaWxlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBIZWFkZXIgZmlsZXMgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNDEsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2F0bWRldi5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtNTAsNiArNDgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pZHIuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KQEAgLTYxLDE2ICs2MCwxMSBAQAogI2luY2x1ZGUgImlkdDc3MTA1LmgiCiAjZW5kaWYgLyogQ09ORklHX0FUTV9OSUNTVEFSX1VTRV9JRFQ3NzEwNSAqLwogCi0jaWYgQklUU19QRVJfTE9ORyAhPSAzMgotIyAgZXJyb3IgRklYTUU6IHRoaXMgZHJpdmVyIHJlcXVpcmVzIGEgMzItYml0IHBsYXRmb3JtCi0jZW5kaWYKLQotLyogQWRkaXRpb25hbCBjb2RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEFkZGl0aW9uYWwgY29kZSAqLwogCiAjaW5jbHVkZSAibmljc3Rhcm1hYy5jIgogCi0KLS8qIENvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDb25maWd1cmFibGUgcGFyYW1ldGVycyAqLwogCiAjdW5kZWYgUEhZX0xPT1BCQUNLCiAjdW5kZWYgVFhfREVCVUcKQEAgLTc4LDExICs3MiwxMCBAQAogI3VuZGVmIEdFTkVSQUxfREVCVUcKICN1bmRlZiBFWFRSQV9ERUJVRwogCi0jdW5kZWYgTlNfVVNFX0RFU1RSVUNUT1JTIC8qIEZvciBub3cga2VlcCB0aGlzIHVuZGVmaW5lZCB1bmxlc3MgeW91IGtub3cKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91J3JlIGdvaW5nIHRvIHVzZSBvbmx5IHJhdyBBVE0gKi8KKyN1bmRlZiBOU19VU0VfREVTVFJVQ1RPUlMJLyogRm9yIG5vdyBrZWVwIHRoaXMgdW5kZWZpbmVkIHVubGVzcyB5b3Uga25vdworCQkJCSAgIHlvdSdyZSBnb2luZyB0byB1c2Ugb25seSByYXcgQVRNICovCiAKLQotLyogRG8gbm90IHRvdWNoIHRoZXNlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERvIG5vdCB0b3VjaCB0aGVzZSAqLwogCiAjaWZkZWYgVFhfREVCVUcKICNkZWZpbmUgVFhQUklOVEsoYXJncy4uLikgcHJpbnRrKGFyZ3MpCkBAIC0xMDgsMjkwOCArMTAxLDI3NzMgQEAKICNkZWZpbmUgWFBSSU5USyhhcmdzLi4uKQogI2VuZGlmIC8qIEVYVFJBX0RFQlVHICovCiAKLQotLyogTWFjcm9zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE1hY3JvcyAqLwogCiAjZGVmaW5lIENNRF9CVVNZKGNhcmQpIChyZWFkbCgoY2FyZCktPm1lbWJhc2UgKyBTVEFUKSAmIE5TX1NUQVRfQ01EQlopCiAKICNkZWZpbmUgTlNfREVMQVkgbWRlbGF5KDEpCiAKLSNkZWZpbmUgQUxJR05fQlVTX0FERFIoYWRkciwgYWxpZ25tZW50KSBcCi0gICAgICAgICgoKCh1MzIpIChhZGRyKSkgKyAoKCh1MzIpIChhbGlnbm1lbnQpKSAtIDEpKSAmIH4oKCh1MzIpIChhbGlnbm1lbnQpKSAtIDEpKQotI2RlZmluZSBBTElHTl9BRERSRVNTKGFkZHIsIGFsaWdubWVudCkgXAotICAgICAgICBidXNfdG9fdmlydChBTElHTl9CVVNfQUREUih2aXJ0X3RvX2J1cyhhZGRyKSwgYWxpZ25tZW50KSkKLQotI3VuZGVmIENFSUwKKyNkZWZpbmUgUFRSX0RJRkYoYSwgYikJKCh1MzIpKCh1bnNpZ25lZCBsb25nKShhKSAtICh1bnNpZ25lZCBsb25nKShiKSkpCiAKICNpZm5kZWYgQVRNX1NLQgogI2RlZmluZSBBVE1fU0tCKHMpICgmKHMpLT5hdG0pCiAjZW5kaWYKIAorI2RlZmluZSBzY3FfdmlydF90b19idXMoc2NxLCBwKSBcCisJCShzY3EtPmRtYSArICgodW5zaWduZWQgbG9uZykocCkgLSAodW5zaWduZWQgbG9uZykoc2NxKS0+b3JnKSkKIAotLyogRnVuY3Rpb24gZGVjbGFyYXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAqLwogCi1zdGF0aWMgdTMyIG5zX3JlYWRfc3JhbShuc19kZXYgKmNhcmQsIHUzMiBzcmFtX2FkZHJlc3MpOwotc3RhdGljIHZvaWQgbnNfd3JpdGVfc3JhbShuc19kZXYgKmNhcmQsIHUzMiBzcmFtX2FkZHJlc3MsIHUzMiAqdmFsdWUsIGludCBjb3VudCk7CitzdGF0aWMgdTMyIG5zX3JlYWRfc3JhbShuc19kZXYgKiBjYXJkLCB1MzIgc3JhbV9hZGRyZXNzKTsKK3N0YXRpYyB2b2lkIG5zX3dyaXRlX3NyYW0obnNfZGV2ICogY2FyZCwgdTMyIHNyYW1fYWRkcmVzcywgdTMyICogdmFsdWUsCisJCQkgIGludCBjb3VudCk7CiBzdGF0aWMgaW50IF9fZGV2aW5pdCBuc19pbml0X2NhcmQoaW50IGksIHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpOwotc3RhdGljIHZvaWQgX19kZXZpbml0IG5zX2luaXRfY2FyZF9lcnJvcihuc19kZXYgKmNhcmQsIGludCBlcnJvcik7Ci1zdGF0aWMgc2NxX2luZm8gKmdldF9zY3EoaW50IHNpemUsIHUzMiBzY2QpOwotc3RhdGljIHZvaWQgZnJlZV9zY3Eoc2NxX2luZm8gKnNjcSwgc3RydWN0IGF0bV92Y2MgKnZjYyk7CitzdGF0aWMgdm9pZCBfX2RldmluaXQgbnNfaW5pdF9jYXJkX2Vycm9yKG5zX2RldiAqIGNhcmQsIGludCBlcnJvcik7CitzdGF0aWMgc2NxX2luZm8gKmdldF9zY3EobnNfZGV2ICpjYXJkLCBpbnQgc2l6ZSwgdTMyIHNjZCk7CitzdGF0aWMgdm9pZCBmcmVlX3NjcShuc19kZXYgKmNhcmQsIHNjcV9pbmZvICogc2NxLCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjKTsKIHN0YXRpYyB2b2lkIHB1c2hfcnhidWZzKG5zX2RldiAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBuc19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIGludCBuc19vcGVuKHN0cnVjdCBhdG1fdmNjICp2Y2MpOwogc3RhdGljIHZvaWQgbnNfY2xvc2Uoc3RydWN0IGF0bV92Y2MgKnZjYyk7Ci1zdGF0aWMgdm9pZCBmaWxsX3RzdChuc19kZXYgKmNhcmQsIGludCBuLCB2Y19tYXAgKnZjKTsKK3N0YXRpYyB2b2lkIGZpbGxfdHN0KG5zX2RldiAqIGNhcmQsIGludCBuLCB2Y19tYXAgKiB2Yyk7CiBzdGF0aWMgaW50IG5zX3NlbmQoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1zdGF0aWMgaW50IHB1c2hfc2NxZShuc19kZXYgKmNhcmQsIHZjX21hcCAqdmMsIHNjcV9pbmZvICpzY3EsIG5zX3NjcWUgKnRiZCwKLSAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IpOwotc3RhdGljIHZvaWQgcHJvY2Vzc190c3EobnNfZGV2ICpjYXJkKTsKLXN0YXRpYyB2b2lkIGRyYWluX3NjcShuc19kZXYgKmNhcmQsIHNjcV9pbmZvICpzY3EsIGludCBwb3MpOwotc3RhdGljIHZvaWQgcHJvY2Vzc19yc3EobnNfZGV2ICpjYXJkKTsKLXN0YXRpYyB2b2lkIGRlcXVldWVfcngobnNfZGV2ICpjYXJkLCBuc19yc3FlICpyc3FlKTsKK3N0YXRpYyBpbnQgcHVzaF9zY3FlKG5zX2RldiAqIGNhcmQsIHZjX21hcCAqIHZjLCBzY3FfaW5mbyAqIHNjcSwgbnNfc2NxZSAqIHRiZCwKKwkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3N0YXRpYyB2b2lkIHByb2Nlc3NfdHNxKG5zX2RldiAqIGNhcmQpOworc3RhdGljIHZvaWQgZHJhaW5fc2NxKG5zX2RldiAqIGNhcmQsIHNjcV9pbmZvICogc2NxLCBpbnQgcG9zKTsKK3N0YXRpYyB2b2lkIHByb2Nlc3NfcnNxKG5zX2RldiAqIGNhcmQpOworc3RhdGljIHZvaWQgZGVxdWV1ZV9yeChuc19kZXYgKiBjYXJkLCBuc19yc3FlICogcnNxZSk7CiAjaWZkZWYgTlNfVVNFX0RFU1RSVUNUT1JTCiBzdGF0aWMgdm9pZCBuc19zYl9kZXN0cnVjdG9yKHN0cnVjdCBza19idWZmICpzYik7CiBzdGF0aWMgdm9pZCBuc19sYl9kZXN0cnVjdG9yKHN0cnVjdCBza19idWZmICpsYik7CiBzdGF0aWMgdm9pZCBuc19oYl9kZXN0cnVjdG9yKHN0cnVjdCBza19idWZmICpoYik7CiAjZW5kaWYgLyogTlNfVVNFX0RFU1RSVUNUT1JTICovCi1zdGF0aWMgdm9pZCByZWN5Y2xlX3J4X2J1Zihuc19kZXYgKmNhcmQsIHN0cnVjdCBza19idWZmICpza2IpOwotc3RhdGljIHZvaWQgcmVjeWNsZV9pb3ZlY19yeF9idWZzKG5zX2RldiAqY2FyZCwgc3RydWN0IGlvdmVjICppb3YsIGludCBjb3VudCk7Ci1zdGF0aWMgdm9pZCByZWN5Y2xlX2lvdl9idWYobnNfZGV2ICpjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqaW92Yik7Ci1zdGF0aWMgdm9pZCBkZXF1ZXVlX3NtX2J1Zihuc19kZXYgKmNhcmQsIHN0cnVjdCBza19idWZmICpzYik7Ci1zdGF0aWMgdm9pZCBkZXF1ZXVlX2xnX2J1Zihuc19kZXYgKmNhcmQsIHN0cnVjdCBza19idWZmICpsYik7Ci1zdGF0aWMgaW50IG5zX3Byb2NfcmVhZChzdHJ1Y3QgYXRtX2RldiAqZGV2LCBsb2ZmX3QgKnBvcywgY2hhciAqcGFnZSk7Ci1zdGF0aWMgaW50IG5zX2lvY3RsKHN0cnVjdCBhdG1fZGV2ICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOwotc3RhdGljIHZvaWQgd2hpY2hfbGlzdChuc19kZXYgKmNhcmQsIHN0cnVjdCBza19idWZmICpza2IpOworc3RhdGljIHZvaWQgcmVjeWNsZV9yeF9idWYobnNfZGV2ICogY2FyZCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitzdGF0aWMgdm9pZCByZWN5Y2xlX2lvdmVjX3J4X2J1ZnMobnNfZGV2ICogY2FyZCwgc3RydWN0IGlvdmVjICppb3YsIGludCBjb3VudCk7CitzdGF0aWMgdm9pZCByZWN5Y2xlX2lvdl9idWYobnNfZGV2ICogY2FyZCwgc3RydWN0IHNrX2J1ZmYgKmlvdmIpOworc3RhdGljIHZvaWQgZGVxdWV1ZV9zbV9idWYobnNfZGV2ICogY2FyZCwgc3RydWN0IHNrX2J1ZmYgKnNiKTsKK3N0YXRpYyB2b2lkIGRlcXVldWVfbGdfYnVmKG5zX2RldiAqIGNhcmQsIHN0cnVjdCBza19idWZmICpsYik7CitzdGF0aWMgaW50IG5zX3Byb2NfcmVhZChzdHJ1Y3QgYXRtX2RldiAqZGV2LCBsb2ZmX3QgKiBwb3MsIGNoYXIgKnBhZ2UpOworc3RhdGljIGludCBuc19pb2N0bChzdHJ1Y3QgYXRtX2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqIGFyZyk7CisjaWZkZWYgRVhUUkFfREVCVUcKK3N0YXRpYyB2b2lkIHdoaWNoX2xpc3QobnNfZGV2ICogY2FyZCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisjZW5kaWYKIHN0YXRpYyB2b2lkIG5zX3BvbGwodW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIGludCBuc19wYXJzZV9tYWMoY2hhciAqbWFjLCB1bnNpZ25lZCBjaGFyICplc2kpOwotc3RhdGljIHNob3J0IG5zX2gyaShjaGFyIGMpOwogc3RhdGljIHZvaWQgbnNfcGh5X3B1dChzdHJ1Y3QgYXRtX2RldiAqZGV2LCB1bnNpZ25lZCBjaGFyIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIpOworCQkgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyKTsKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG5zX3BoeV9nZXQoc3RydWN0IGF0bV9kZXYgKmRldiwgdW5zaWduZWQgbG9uZyBhZGRyKTsKIAotCi0KLS8qIEdsb2JhbCB2YXJpYWJsZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBHbG9iYWwgdmFyaWFibGVzICovCiAKIHN0YXRpYyBzdHJ1Y3QgbnNfZGV2ICpjYXJkc1tOU19NQVhfQ0FSRFNdOwogc3RhdGljIHVuc2lnbmVkIG51bV9jYXJkczsKLXN0YXRpYyBzdHJ1Y3QgYXRtZGV2X29wcyBhdG1fb3BzID0KLXsKLSAgIC5vcGVuCT0gbnNfb3BlbiwKLSAgIC5jbG9zZQk9IG5zX2Nsb3NlLAotICAgLmlvY3RsCT0gbnNfaW9jdGwsCi0gICAuc2VuZAk9IG5zX3NlbmQsCi0gICAucGh5X3B1dAk9IG5zX3BoeV9wdXQsCi0gICAucGh5X2dldAk9IG5zX3BoeV9nZXQsCi0gICAucHJvY19yZWFkCT0gbnNfcHJvY19yZWFkLAotICAgLm93bmVyCT0gVEhJU19NT0RVTEUsCitzdGF0aWMgc3RydWN0IGF0bWRldl9vcHMgYXRtX29wcyA9IHsKKwkub3BlbiA9IG5zX29wZW4sCisJLmNsb3NlID0gbnNfY2xvc2UsCisJLmlvY3RsID0gbnNfaW9jdGwsCisJLnNlbmQgPSBuc19zZW5kLAorCS5waHlfcHV0ID0gbnNfcGh5X3B1dCwKKwkucGh5X2dldCA9IG5zX3BoeV9nZXQsCisJLnByb2NfcmVhZCA9IG5zX3Byb2NfcmVhZCwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIH07CisKIHN0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBuc190aW1lcjsKIHN0YXRpYyBjaGFyICptYWNbTlNfTUFYX0NBUkRTXTsKIG1vZHVsZV9wYXJhbV9hcnJheShtYWMsIGNoYXJwLCBOVUxMLCAwKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotCi0vKiBGdW5jdGlvbnMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRnVuY3Rpb25zICovCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IG5pY3N0YXJfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBjaWRldiwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewotICAgc3RhdGljIGludCBpbmRleCA9IC0xOwotICAgdW5zaWduZWQgaW50IGVycm9yOworCXN0YXRpYyBpbnQgaW5kZXggPSAtMTsKKwl1bnNpZ25lZCBpbnQgZXJyb3I7CiAKLSAgIGluZGV4Kys7Ci0gICBjYXJkc1tpbmRleF0gPSBOVUxMOworCWluZGV4Kys7CisJY2FyZHNbaW5kZXhdID0gTlVMTDsKIAotICAgZXJyb3IgPSBuc19pbml0X2NhcmQoaW5kZXgsIHBjaWRldik7Ci0gICBpZiAoZXJyb3IpIHsKLSAgICAgIGNhcmRzW2luZGV4LS1dID0gTlVMTDsJLyogZG9uJ3QgaW5jcmVtZW50IGluZGV4ICovCi0gICAgICBnb3RvIGVycl9vdXQ7Ci0gICB9CisJZXJyb3IgPSBuc19pbml0X2NhcmQoaW5kZXgsIHBjaWRldik7CisJaWYgKGVycm9yKSB7CisJCWNhcmRzW2luZGV4LS1dID0gTlVMTDsJLyogZG9uJ3QgaW5jcmVtZW50IGluZGV4ICovCisJCWdvdG8gZXJyX291dDsKKwl9CiAKLSAgIHJldHVybiAwOworCXJldHVybiAwOwogZXJyX291dDoKLSAgIHJldHVybiAtRU5PREVWOworCXJldHVybiAtRU5PREVWOwogfQogCi0KLQogc3RhdGljIHZvaWQgX19kZXZleGl0IG5pY3N0YXJfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KQogewotICAgaW50IGksIGo7Ci0gICBuc19kZXYgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGNpZGV2KTsKLSAgIHN0cnVjdCBza19idWZmICpoYjsKLSAgIHN0cnVjdCBza19idWZmICppb3ZiOwotICAgc3RydWN0IHNrX2J1ZmYgKmxiOwotICAgc3RydWN0IHNrX2J1ZmYgKnNiOwotICAgCi0gICBpID0gY2FyZC0+aW5kZXg7CisJaW50IGksIGo7CisJbnNfZGV2ICpjYXJkID0gcGNpX2dldF9kcnZkYXRhKHBjaWRldik7CisJc3RydWN0IHNrX2J1ZmYgKmhiOworCXN0cnVjdCBza19idWZmICppb3ZiOworCXN0cnVjdCBza19idWZmICpsYjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2I7CiAKLSAgIGlmIChjYXJkc1tpXSA9PSBOVUxMKQotICAgICAgcmV0dXJuOworCWkgPSBjYXJkLT5pbmRleDsKIAotICAgaWYgKGNhcmQtPmF0bWRldi0+cGh5ICYmIGNhcmQtPmF0bWRldi0+cGh5LT5zdG9wKQotICAgICAgY2FyZC0+YXRtZGV2LT5waHktPnN0b3AoY2FyZC0+YXRtZGV2KTsKKwlpZiAoY2FyZHNbaV0gPT0gTlVMTCkKKwkJcmV0dXJuOwogCi0gICAvKiBTdG9wIGV2ZXJ5dGhpbmcgKi8KLSAgIHdyaXRlbCgweDAwMDAwMDAwLCBjYXJkLT5tZW1iYXNlICsgQ0ZHKTsKKwlpZiAoY2FyZC0+YXRtZGV2LT5waHkgJiYgY2FyZC0+YXRtZGV2LT5waHktPnN0b3ApCisJCWNhcmQtPmF0bWRldi0+cGh5LT5zdG9wKGNhcmQtPmF0bWRldik7CiAKLSAgIC8qIERlLXJlZ2lzdGVyIGRldmljZSAqLwotICAgYXRtX2Rldl9kZXJlZ2lzdGVyKGNhcmQtPmF0bWRldik7CisJLyogU3RvcCBldmVyeXRoaW5nICovCisJd3JpdGVsKDB4MDAwMDAwMDAsIGNhcmQtPm1lbWJhc2UgKyBDRkcpOwogCi0gICAvKiBEaXNhYmxlIFBDSSBkZXZpY2UgKi8KLSAgIHBjaV9kaXNhYmxlX2RldmljZShwY2lkZXYpOwotICAgCi0gICAvKiBGcmVlIHVwIHJlc291cmNlcyAqLwotICAgaiA9IDA7Ci0gICBQUklOVEsoIm5pY3N0YXIlZDogZnJlZWluZyAlZCBodWdlIGJ1ZmZlcnMuXG4iLCBpLCBjYXJkLT5oYnBvb2wuY291bnQpOwotICAgd2hpbGUgKChoYiA9IHNrYl9kZXF1ZXVlKCZjYXJkLT5oYnBvb2wucXVldWUpKSAhPSBOVUxMKQotICAgewotICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoaGIpOwotICAgICAgaisrOwotICAgfQotICAgUFJJTlRLKCJuaWNzdGFyJWQ6ICVkIGh1Z2UgYnVmZmVycyBmcmVlZC5cbiIsIGksIGopOwotICAgaiA9IDA7Ci0gICBQUklOVEsoIm5pY3N0YXIlZDogZnJlZWluZyAlZCBpb3ZlYyBidWZmZXJzLlxuIiwgaSwgY2FyZC0+aW92cG9vbC5jb3VudCk7Ci0gICB3aGlsZSAoKGlvdmIgPSBza2JfZGVxdWV1ZSgmY2FyZC0+aW92cG9vbC5xdWV1ZSkpICE9IE5VTEwpCi0gICB7Ci0gICAgICBkZXZfa2ZyZWVfc2tiX2FueShpb3ZiKTsKLSAgICAgIGorKzsKLSAgIH0KLSAgIFBSSU5USygibmljc3RhciVkOiAlZCBpb3ZlYyBidWZmZXJzIGZyZWVkLlxuIiwgaSwgaik7Ci0gICB3aGlsZSAoKGxiID0gc2tiX2RlcXVldWUoJmNhcmQtPmxicG9vbC5xdWV1ZSkpICE9IE5VTEwpCi0gICAgICBkZXZfa2ZyZWVfc2tiX2FueShsYik7Ci0gICB3aGlsZSAoKHNiID0gc2tiX2RlcXVldWUoJmNhcmQtPnNicG9vbC5xdWV1ZSkpICE9IE5VTEwpCi0gICAgICBkZXZfa2ZyZWVfc2tiX2FueShzYik7Ci0gICBmcmVlX3NjcShjYXJkLT5zY3EwLCBOVUxMKTsKLSAgIGZvciAoaiA9IDA7IGogPCBOU19GUlNDRF9OVU07IGorKykKLSAgIHsKLSAgICAgIGlmIChjYXJkLT5zY2QydmNbal0gIT0gTlVMTCkKLSAgICAgICAgIGZyZWVfc2NxKGNhcmQtPnNjZDJ2Y1tqXS0+c2NxLCBjYXJkLT5zY2QydmNbal0tPnR4X3ZjYyk7Ci0gICB9Ci0gICBrZnJlZShjYXJkLT5yc3Eub3JnKTsKLSAgIGtmcmVlKGNhcmQtPnRzcS5vcmcpOwotICAgZnJlZV9pcnEoY2FyZC0+cGNpZGV2LT5pcnEsIGNhcmQpOwotICAgaW91bm1hcChjYXJkLT5tZW1iYXNlKTsKLSAgIGtmcmVlKGNhcmQpOworCS8qIERlLXJlZ2lzdGVyIGRldmljZSAqLworCWF0bV9kZXZfZGVyZWdpc3RlcihjYXJkLT5hdG1kZXYpOworCisJLyogRGlzYWJsZSBQQ0kgZGV2aWNlICovCisJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaWRldik7CisKKwkvKiBGcmVlIHVwIHJlc291cmNlcyAqLworCWogPSAwOworCVBSSU5USygibmljc3RhciVkOiBmcmVlaW5nICVkIGh1Z2UgYnVmZmVycy5cbiIsIGksIGNhcmQtPmhicG9vbC5jb3VudCk7CisJd2hpbGUgKChoYiA9IHNrYl9kZXF1ZXVlKCZjYXJkLT5oYnBvb2wucXVldWUpKSAhPSBOVUxMKSB7CisJCWRldl9rZnJlZV9za2JfYW55KGhiKTsKKwkJaisrOworCX0KKwlQUklOVEsoIm5pY3N0YXIlZDogJWQgaHVnZSBidWZmZXJzIGZyZWVkLlxuIiwgaSwgaik7CisJaiA9IDA7CisJUFJJTlRLKCJuaWNzdGFyJWQ6IGZyZWVpbmcgJWQgaW92ZWMgYnVmZmVycy5cbiIsIGksCisJICAgICAgIGNhcmQtPmlvdnBvb2wuY291bnQpOworCXdoaWxlICgoaW92YiA9IHNrYl9kZXF1ZXVlKCZjYXJkLT5pb3Zwb29sLnF1ZXVlKSkgIT0gTlVMTCkgeworCQlkZXZfa2ZyZWVfc2tiX2FueShpb3ZiKTsKKwkJaisrOworCX0KKwlQUklOVEsoIm5pY3N0YXIlZDogJWQgaW92ZWMgYnVmZmVycyBmcmVlZC5cbiIsIGksIGopOworCXdoaWxlICgobGIgPSBza2JfZGVxdWV1ZSgmY2FyZC0+bGJwb29sLnF1ZXVlKSkgIT0gTlVMTCkKKwkJZGV2X2tmcmVlX3NrYl9hbnkobGIpOworCXdoaWxlICgoc2IgPSBza2JfZGVxdWV1ZSgmY2FyZC0+c2Jwb29sLnF1ZXVlKSkgIT0gTlVMTCkKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2IpOworCWZyZWVfc2NxKGNhcmQsIGNhcmQtPnNjcTAsIE5VTEwpOworCWZvciAoaiA9IDA7IGogPCBOU19GUlNDRF9OVU07IGorKykgeworCQlpZiAoY2FyZC0+c2NkMnZjW2pdICE9IE5VTEwpCisJCQlmcmVlX3NjcShjYXJkLCBjYXJkLT5zY2QydmNbal0tPnNjcSwgY2FyZC0+c2NkMnZjW2pdLT50eF92Y2MpOworCX0KKwlpZHJfcmVtb3ZlX2FsbCgmY2FyZC0+aWRyKTsKKwlpZHJfZGVzdHJveSgmY2FyZC0+aWRyKTsKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGNhcmQtPnBjaWRldiwgTlNfUlNRU0laRSArIE5TX1JTUV9BTElHTk1FTlQsCisJCQkgICAgY2FyZC0+cnNxLm9yZywgY2FyZC0+cnNxLmRtYSk7CisJcGNpX2ZyZWVfY29uc2lzdGVudChjYXJkLT5wY2lkZXYsIE5TX1RTUVNJWkUgKyBOU19UU1FfQUxJR05NRU5ULAorCQkJICAgIGNhcmQtPnRzcS5vcmcsIGNhcmQtPnRzcS5kbWEpOworCWZyZWVfaXJxKGNhcmQtPnBjaWRldi0+aXJxLCBjYXJkKTsKKwlpb3VubWFwKGNhcmQtPm1lbWJhc2UpOworCWtmcmVlKGNhcmQpOwogfQogCi0KLQotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5pY3N0YXJfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPQotewotCXtQQ0lfVkVORE9SX0lEX0lEVCwgUENJX0RFVklDRV9JRF9JRFRfSURUNzcyMDEsCi0JIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5pY3N0YXJfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CisJeyBQQ0lfVkRFVklDRShJRFQsIFBDSV9ERVZJQ0VfSURfSURUX0lEVDc3MjAxKSwgMCB9LAogCXswLH0JCQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKKwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG5pY3N0YXJfcGNpX3RibCk7CiAKLQotCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmljc3Rhcl9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gIm5pY3N0YXIiLAotCS5pZF90YWJsZQk9IG5pY3N0YXJfcGNpX3RibCwKLQkucHJvYmUJCT0gbmljc3Rhcl9pbml0X29uZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG5pY3N0YXJfcmVtb3ZlX29uZSksCisJLm5hbWUgPSAibmljc3RhciIsCisJLmlkX3RhYmxlID0gbmljc3Rhcl9wY2lfdGJsLAorCS5wcm9iZSA9IG5pY3N0YXJfaW5pdF9vbmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG5pY3N0YXJfcmVtb3ZlX29uZSksCiB9OwogCi0KLQogc3RhdGljIGludCBfX2luaXQgbmljc3Rhcl9pbml0KHZvaWQpCiB7Ci0gICB1bnNpZ25lZCBlcnJvciA9IDA7CS8qIEluaXRpYWxpemVkIHRvIHJlbW92ZSBjb21waWxlIHdhcm5pbmcgKi8KKwl1bnNpZ25lZCBlcnJvciA9IDA7CS8qIEluaXRpYWxpemVkIHRvIHJlbW92ZSBjb21waWxlIHdhcm5pbmcgKi8KIAotICAgWFBSSU5USygibmljc3Rhcjogbmljc3Rhcl9pbml0KCkgY2FsbGVkLlxuIik7CisJWFBSSU5USygibmljc3Rhcjogbmljc3Rhcl9pbml0KCkgY2FsbGVkLlxuIik7CiAKLSAgIGVycm9yID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmbmljc3Rhcl9kcml2ZXIpOwotICAgCi0gICBUWFBSSU5USygibmljc3RhcjogVFggZGVidWcgZW5hYmxlZC5cbiIpOwotICAgUlhQUklOVEsoIm5pY3N0YXI6IFJYIGRlYnVnIGVuYWJsZWQuXG4iKTsKLSAgIFBSSU5USygibmljc3RhcjogR2VuZXJhbCBkZWJ1ZyBlbmFibGVkLlxuIik7CisJZXJyb3IgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZuaWNzdGFyX2RyaXZlcik7CisKKwlUWFBSSU5USygibmljc3RhcjogVFggZGVidWcgZW5hYmxlZC5cbiIpOworCVJYUFJJTlRLKCJuaWNzdGFyOiBSWCBkZWJ1ZyBlbmFibGVkLlxuIik7CisJUFJJTlRLKCJuaWNzdGFyOiBHZW5lcmFsIGRlYnVnIGVuYWJsZWQuXG4iKTsKICNpZmRlZiBQSFlfTE9PUEJBQ0sKLSAgIHByaW50aygibmljc3RhcjogdXNpbmcgUEhZIGxvb3BiYWNrLlxuIik7CisJcHJpbnRrKCJuaWNzdGFyOiB1c2luZyBQSFkgbG9vcGJhY2suXG4iKTsKICNlbmRpZiAvKiBQSFlfTE9PUEJBQ0sgKi8KLSAgIFhQUklOVEsoIm5pY3N0YXI6IG5pY3N0YXJfaW5pdCgpIHJldHVybmVkLlxuIik7CisJWFBSSU5USygibmljc3Rhcjogbmljc3Rhcl9pbml0KCkgcmV0dXJuZWQuXG4iKTsKIAotICAgaWYgKCFlcnJvcikgewotICAgICAgaW5pdF90aW1lcigmbnNfdGltZXIpOwotICAgICAgbnNfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBOU19QT0xMX1BFUklPRDsKLSAgICAgIG5zX3RpbWVyLmRhdGEgPSAwVUw7Ci0gICAgICBuc190aW1lci5mdW5jdGlvbiA9IG5zX3BvbGw7Ci0gICAgICBhZGRfdGltZXIoJm5zX3RpbWVyKTsKLSAgIH0KLSAgIAotICAgcmV0dXJuIGVycm9yOworCWlmICghZXJyb3IpIHsKKwkJaW5pdF90aW1lcigmbnNfdGltZXIpOworCQluc190aW1lci5leHBpcmVzID0gamlmZmllcyArIE5TX1BPTExfUEVSSU9EOworCQluc190aW1lci5kYXRhID0gMFVMOworCQluc190aW1lci5mdW5jdGlvbiA9IG5zX3BvbGw7CisJCWFkZF90aW1lcigmbnNfdGltZXIpOworCX0KKworCXJldHVybiBlcnJvcjsKIH0KIAotCi0KIHN0YXRpYyB2b2lkIF9fZXhpdCBuaWNzdGFyX2NsZWFudXAodm9pZCkKIHsKLSAgIFhQUklOVEsoIm5pY3N0YXI6IG5pY3N0YXJfY2xlYW51cCgpIGNhbGxlZC5cbiIpOworCVhQUklOVEsoIm5pY3N0YXI6IG5pY3N0YXJfY2xlYW51cCgpIGNhbGxlZC5cbiIpOwogCi0gICBkZWxfdGltZXIoJm5zX3RpbWVyKTsKKwlkZWxfdGltZXIoJm5zX3RpbWVyKTsKIAotICAgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZuaWNzdGFyX2RyaXZlcik7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZuaWNzdGFyX2RyaXZlcik7CiAKLSAgIFhQUklOVEsoIm5pY3N0YXI6IG5pY3N0YXJfY2xlYW51cCgpIHJldHVybmVkLlxuIik7CisJWFBSSU5USygibmljc3Rhcjogbmljc3Rhcl9jbGVhbnVwKCkgcmV0dXJuZWQuXG4iKTsKIH0KIAotCi0KLXN0YXRpYyB1MzIgbnNfcmVhZF9zcmFtKG5zX2RldiAqY2FyZCwgdTMyIHNyYW1fYWRkcmVzcykKK3N0YXRpYyB1MzIgbnNfcmVhZF9zcmFtKG5zX2RldiAqIGNhcmQsIHUzMiBzcmFtX2FkZHJlc3MpCiB7Ci0gICB1bnNpZ25lZCBsb25nIGZsYWdzOwotICAgdTMyIGRhdGE7Ci0gICBzcmFtX2FkZHJlc3MgPDw9IDI7Ci0gICBzcmFtX2FkZHJlc3MgJj0gMHgwMDA3RkZGQzsJLyogYWRkcmVzcyBtdXN0IGJlIGR3b3JkIGFsaWduZWQgKi8KLSAgIHNyYW1fYWRkcmVzcyB8PSAweDUwMDAwMDAwOwkvKiBTUkFNIHJlYWQgY29tbWFuZCAqLwotICAgc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnJlc19sb2NrLCBmbGFncyk7Ci0gICB3aGlsZSAoQ01EX0JVU1koY2FyZCkpOwotICAgd3JpdGVsKHNyYW1fYWRkcmVzcywgY2FyZC0+bWVtYmFzZSArIENNRCk7Ci0gICB3aGlsZSAoQ01EX0JVU1koY2FyZCkpOwotICAgZGF0YSA9IHJlYWRsKGNhcmQtPm1lbWJhc2UgKyBEUjApOwotICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+cmVzX2xvY2ssIGZsYWdzKTsKLSAgIHJldHVybiBkYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGRhdGE7CisJc3JhbV9hZGRyZXNzIDw8PSAyOworCXNyYW1fYWRkcmVzcyAmPSAweDAwMDdGRkZDOwkvKiBhZGRyZXNzIG11c3QgYmUgZHdvcmQgYWxpZ25lZCAqLworCXNyYW1fYWRkcmVzcyB8PSAweDUwMDAwMDAwOwkvKiBTUkFNIHJlYWQgY29tbWFuZCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5yZXNfbG9jaywgZmxhZ3MpOworCXdoaWxlIChDTURfQlVTWShjYXJkKSkgOworCXdyaXRlbChzcmFtX2FkZHJlc3MsIGNhcmQtPm1lbWJhc2UgKyBDTUQpOworCXdoaWxlIChDTURfQlVTWShjYXJkKSkgOworCWRhdGEgPSByZWFkbChjYXJkLT5tZW1iYXNlICsgRFIwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5yZXNfbG9jaywgZmxhZ3MpOworCXJldHVybiBkYXRhOwogfQogCi0KLSAgIAotc3RhdGljIHZvaWQgbnNfd3JpdGVfc3JhbShuc19kZXYgKmNhcmQsIHUzMiBzcmFtX2FkZHJlc3MsIHUzMiAqdmFsdWUsIGludCBjb3VudCkKK3N0YXRpYyB2b2lkIG5zX3dyaXRlX3NyYW0obnNfZGV2ICogY2FyZCwgdTMyIHNyYW1fYWRkcmVzcywgdTMyICogdmFsdWUsCisJCQkgIGludCBjb3VudCkKIHsKLSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gICBpbnQgaSwgYzsKLSAgIGNvdW50LS07CS8qIGNvdW50IHJhbmdlIG5vdyBpcyAwLi4zIGluc3RlYWQgb2YgMS4uNCAqLwotICAgYyA9IGNvdW50OwotICAgYyA8PD0gMjsJLyogdG8gdXNlIGluY3JlbWVudHMgb2YgNCAqLwotICAgc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnJlc19sb2NrLCBmbGFncyk7Ci0gICB3aGlsZSAoQ01EX0JVU1koY2FyZCkpOwotICAgZm9yIChpID0gMDsgaSA8PSBjOyBpICs9IDQpCi0gICAgICB3cml0ZWwoKih2YWx1ZSsrKSwgY2FyZC0+bWVtYmFzZSArIGkpOwotICAgLyogTm90ZTogRFIjIHJlZ2lzdGVycyBhcmUgdGhlIGZpcnN0IDQgZHdvcmRzIGluIG5pY3N0YXIncyBtZW1zcGFjZSwKLSAgICAgICAgICAgIHNvIGNhcmQtPm1lbWJhc2UgKyBEUjAgPT0gY2FyZC0+bWVtYmFzZSAqLwotICAgc3JhbV9hZGRyZXNzIDw8PSAyOwotICAgc3JhbV9hZGRyZXNzICY9IDB4MDAwN0ZGRkM7Ci0gICBzcmFtX2FkZHJlc3MgfD0gKDB4NDAwMDAwMDAgfCBjb3VudCk7Ci0gICB3cml0ZWwoc3JhbV9hZGRyZXNzLCBjYXJkLT5tZW1iYXNlICsgQ01EKTsKLSAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPnJlc19sb2NrLCBmbGFncyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaSwgYzsKKwljb3VudC0tOwkJLyogY291bnQgcmFuZ2Ugbm93IGlzIDAuLjMgaW5zdGVhZCBvZiAxLi40ICovCisJYyA9IGNvdW50OworCWMgPDw9IDI7CQkvKiB0byB1c2UgaW5jcmVtZW50cyBvZiA0ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnJlc19sb2NrLCBmbGFncyk7CisJd2hpbGUgKENNRF9CVVNZKGNhcmQpKSA7CisJZm9yIChpID0gMDsgaSA8PSBjOyBpICs9IDQpCisJCXdyaXRlbCgqKHZhbHVlKyspLCBjYXJkLT5tZW1iYXNlICsgaSk7CisJLyogTm90ZTogRFIjIHJlZ2lzdGVycyBhcmUgdGhlIGZpcnN0IDQgZHdvcmRzIGluIG5pY3N0YXIncyBtZW1zcGFjZSwKKwkgICBzbyBjYXJkLT5tZW1iYXNlICsgRFIwID09IGNhcmQtPm1lbWJhc2UgKi8KKwlzcmFtX2FkZHJlc3MgPDw9IDI7CisJc3JhbV9hZGRyZXNzICY9IDB4MDAwN0ZGRkM7CisJc3JhbV9hZGRyZXNzIHw9ICgweDQwMDAwMDAwIHwgY291bnQpOworCXdyaXRlbChzcmFtX2FkZHJlc3MsIGNhcmQtPm1lbWJhc2UgKyBDTUQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPnJlc19sb2NrLCBmbGFncyk7CiB9CiAKLQogc3RhdGljIGludCBfX2RldmluaXQgbnNfaW5pdF9jYXJkKGludCBpLCBzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KQogewotICAgaW50IGo7Ci0gICBzdHJ1Y3QgbnNfZGV2ICpjYXJkID0gTlVMTDsKLSAgIHVuc2lnbmVkIGNoYXIgcGNpX2xhdGVuY3k7Ci0gICB1bnNpZ25lZCBlcnJvcjsKLSAgIHUzMiBkYXRhOwotICAgdTMyIHUzMmRbNF07Ci0gICB1MzIgbnNfY2ZnX3JjdHNpemU7Ci0gICBpbnQgYmNvdW50OwotICAgdW5zaWduZWQgbG9uZyBtZW1iYXNlOworCWludCBqOworCXN0cnVjdCBuc19kZXYgKmNhcmQgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgcGNpX2xhdGVuY3k7CisJdW5zaWduZWQgZXJyb3I7CisJdTMyIGRhdGE7CisJdTMyIHUzMmRbNF07CisJdTMyIG5zX2NmZ19yY3RzaXplOworCWludCBiY291bnQ7CisJdW5zaWduZWQgbG9uZyBtZW1iYXNlOwogCi0gICBlcnJvciA9IDA7CisJZXJyb3IgPSAwOwogCi0gICBpZiAocGNpX2VuYWJsZV9kZXZpY2UocGNpZGV2KSkKLSAgIHsKLSAgICAgIHByaW50aygibmljc3RhciVkOiBjYW4ndCBlbmFibGUgUENJIGRldmljZVxuIiwgaSk7Ci0gICAgICBlcnJvciA9IDI7Ci0gICAgICBuc19pbml0X2NhcmRfZXJyb3IoY2FyZCwgZXJyb3IpOwotICAgICAgcmV0dXJuIGVycm9yOwotICAgfQorCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2lkZXYpKSB7CisJCXByaW50aygibmljc3RhciVkOiBjYW4ndCBlbmFibGUgUENJIGRldmljZVxuIiwgaSk7CisJCWVycm9yID0gMjsKKwkJbnNfaW5pdF9jYXJkX2Vycm9yKGNhcmQsIGVycm9yKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKyAgICAgICAgaWYgKChwY2lfc2V0X2RtYV9tYXNrKHBjaWRldiwgRE1BX0JJVF9NQVNLKDMyKSkgIT0gMCkgfHwKKwkgICAgKHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2lkZXYsIERNQV9CSVRfTUFTSygzMikpICE9IDApKSB7CisgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIm5pY3N0YXIlZDogTm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZS5cbiIsIGkpOworCQllcnJvciA9IDI7CisJCW5zX2luaXRfY2FyZF9lcnJvcihjYXJkLCBlcnJvcik7CisJCXJldHVybiBlcnJvcjsKKyAgICAgICAgfQogCi0gICBpZiAoKGNhcmQgPSBrbWFsbG9jKHNpemVvZihuc19kZXYpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKLSAgIHsKLSAgICAgIHByaW50aygibmljc3RhciVkOiBjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRldmljZSBzdHJ1Y3R1cmUuXG4iLCBpKTsKLSAgICAgIGVycm9yID0gMjsKLSAgICAgIG5zX2luaXRfY2FyZF9lcnJvcihjYXJkLCBlcnJvcik7Ci0gICAgICByZXR1cm4gZXJyb3I7Ci0gICB9Ci0gICBjYXJkc1tpXSA9IGNhcmQ7Ci0gICBzcGluX2xvY2tfaW5pdCgmY2FyZC0+aW50X2xvY2spOwotICAgc3Bpbl9sb2NrX2luaXQoJmNhcmQtPnJlc19sb2NrKTsKLSAgICAgIAotICAgcGNpX3NldF9kcnZkYXRhKHBjaWRldiwgY2FyZCk7Ci0gICAKLSAgIGNhcmQtPmluZGV4ID0gaTsKLSAgIGNhcmQtPmF0bWRldiA9IE5VTEw7Ci0gICBjYXJkLT5wY2lkZXYgPSBwY2lkZXY7Ci0gICBtZW1iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMSk7Ci0gICBjYXJkLT5tZW1iYXNlID0gaW9yZW1hcChtZW1iYXNlLCBOU19JT1JFTUFQX1NJWkUpOwotICAgaWYgKCFjYXJkLT5tZW1iYXNlKQotICAgewotICAgICAgcHJpbnRrKCJuaWNzdGFyJWQ6IGNhbid0IGlvcmVtYXAoKSBtZW1iYXNlLlxuIixpKTsKLSAgICAgIGVycm9yID0gMzsKLSAgICAgIG5zX2luaXRfY2FyZF9lcnJvcihjYXJkLCBlcnJvcik7Ci0gICAgICByZXR1cm4gZXJyb3I7Ci0gICB9Ci0gICBQUklOVEsoIm5pY3N0YXIlZDogbWVtYmFzZSBhdCAweCV4LlxuIiwgaSwgY2FyZC0+bWVtYmFzZSk7CisJaWYgKChjYXJkID0ga21hbGxvYyhzaXplb2YobnNfZGV2KSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwkJcHJpbnRrCisJCSAgICAoIm5pY3N0YXIlZDogY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBkZXZpY2Ugc3RydWN0dXJlLlxuIiwKKwkJICAgICBpKTsKKwkJZXJyb3IgPSAyOworCQluc19pbml0X2NhcmRfZXJyb3IoY2FyZCwgZXJyb3IpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCWNhcmRzW2ldID0gY2FyZDsKKwlzcGluX2xvY2tfaW5pdCgmY2FyZC0+aW50X2xvY2spOworCXNwaW5fbG9ja19pbml0KCZjYXJkLT5yZXNfbG9jayk7CiAKLSAgIHBjaV9zZXRfbWFzdGVyKHBjaWRldik7CisJcGNpX3NldF9kcnZkYXRhKHBjaWRldiwgY2FyZCk7CiAKLSAgIGlmIChwY2lfcmVhZF9jb25maWdfYnl0ZShwY2lkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAmcGNpX2xhdGVuY3kpICE9IDApCi0gICB7Ci0gICAgICBwcmludGsoIm5pY3N0YXIlZDogY2FuJ3QgcmVhZCBQQ0kgbGF0ZW5jeSB0aW1lci5cbiIsIGkpOwotICAgICAgZXJyb3IgPSA2OwotICAgICAgbnNfaW5pdF9jYXJkX2Vycm9yKGNhcmQsIGVycm9yKTsKLSAgICAgIHJldHVybiBlcnJvcjsKLSAgIH0KKwljYXJkLT5pbmRleCA9IGk7CisJY2FyZC0+YXRtZGV2ID0gTlVMTDsKKwljYXJkLT5wY2lkZXYgPSBwY2lkZXY7CisJbWVtYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDEpOworCWNhcmQtPm1lbWJhc2UgPSBpb3JlbWFwKG1lbWJhc2UsIE5TX0lPUkVNQVBfU0laRSk7CisJaWYgKCFjYXJkLT5tZW1iYXNlKSB7CisJCXByaW50aygibmljc3RhciVkOiBjYW4ndCBpb3JlbWFwKCkgbWVtYmFzZS5cbiIsIGkpOworCQllcnJvciA9IDM7CisJCW5zX2luaXRfY2FyZF9lcnJvcihjYXJkLCBlcnJvcik7CisJCXJldHVybiBlcnJvcjsKKwl9CisJUFJJTlRLKCJuaWNzdGFyJWQ6IG1lbWJhc2UgYXQgMHglcC5cbiIsIGksIGNhcmQtPm1lbWJhc2UpOworCisJcGNpX3NldF9tYXN0ZXIocGNpZGV2KTsKKworCWlmIChwY2lfcmVhZF9jb25maWdfYnl0ZShwY2lkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAmcGNpX2xhdGVuY3kpICE9IDApIHsKKwkJcHJpbnRrKCJuaWNzdGFyJWQ6IGNhbid0IHJlYWQgUENJIGxhdGVuY3kgdGltZXIuXG4iLCBpKTsKKwkJZXJyb3IgPSA2OworCQluc19pbml0X2NhcmRfZXJyb3IoY2FyZCwgZXJyb3IpOworCQlyZXR1cm4gZXJyb3I7CisJfQogI2lmZGVmIE5TX1BDSV9MQVRFTkNZCi0gICBpZiAocGNpX2xhdGVuY3kgPCBOU19QQ0lfTEFURU5DWSkKLSAgIHsKLSAgICAgIFBSSU5USygibmljc3RhciVkOiBzZXR0aW5nIFBDSSBsYXRlbmN5IHRpbWVyIHRvICVkLlxuIiwgaSwgTlNfUENJX0xBVEVOQ1kpOwotICAgICAgZm9yIChqID0gMTsgaiA8IDQ7IGorKykKLSAgICAgIHsKLSAgICAgICAgIGlmIChwY2lfd3JpdGVfY29uZmlnX2J5dGUocGNpZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgTlNfUENJX0xBVEVOQ1kpICE9IDApCi0JICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaWYgKGogPT0gNCkKLSAgICAgIHsKLSAgICAgICAgIHByaW50aygibmljc3RhciVkOiBjYW4ndCBzZXQgUENJIGxhdGVuY3kgdGltZXIgdG8gJWQuXG4iLCBpLCBOU19QQ0lfTEFURU5DWSk7Ci0gICAgICAgICBlcnJvciA9IDc7Ci0gICAgICAgICBuc19pbml0X2NhcmRfZXJyb3IoY2FyZCwgZXJyb3IpOwotCSByZXR1cm4gZXJyb3I7Ci0gICAgICB9Ci0gICB9CisJaWYgKHBjaV9sYXRlbmN5IDwgTlNfUENJX0xBVEVOQ1kpIHsKKwkJUFJJTlRLKCJuaWNzdGFyJWQ6IHNldHRpbmcgUENJIGxhdGVuY3kgdGltZXIgdG8gJWQuXG4iLCBpLAorCQkgICAgICAgTlNfUENJX0xBVEVOQ1kpOworCQlmb3IgKGogPSAxOyBqIDwgNDsgaisrKSB7CisJCQlpZiAocGNpX3dyaXRlX2NvbmZpZ19ieXRlCisJCQkgICAgKHBjaWRldiwgUENJX0xBVEVOQ1lfVElNRVIsIE5TX1BDSV9MQVRFTkNZKSAhPSAwKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChqID09IDQpIHsKKwkJCXByaW50aworCQkJICAgICgibmljc3RhciVkOiBjYW4ndCBzZXQgUENJIGxhdGVuY3kgdGltZXIgdG8gJWQuXG4iLAorCQkJICAgICBpLCBOU19QQ0lfTEFURU5DWSk7CisJCQllcnJvciA9IDc7CisJCQluc19pbml0X2NhcmRfZXJyb3IoY2FyZCwgZXJyb3IpOworCQkJcmV0dXJuIGVycm9yOworCQl9CisJfQogI2VuZGlmIC8qIE5TX1BDSV9MQVRFTkNZICovCi0gICAgICAKLSAgIC8qIENsZWFyIHRpbWVyIG92ZXJmbG93ICovCi0gICBkYXRhID0gcmVhZGwoY2FyZC0+bWVtYmFzZSArIFNUQVQpOwotICAgaWYgKGRhdGEgJiBOU19TVEFUX1RNUk9GKQotICAgICAgd3JpdGVsKE5TX1NUQVRfVE1ST0YsIGNhcmQtPm1lbWJhc2UgKyBTVEFUKTsKIAotICAgLyogU29mdHdhcmUgcmVzZXQgKi8KLSAgIHdyaXRlbChOU19DRkdfU1dSU1QsIGNhcmQtPm1lbWJhc2UgKyBDRkcpOwotICAgTlNfREVMQVk7Ci0gICB3cml0ZWwoMHgwMDAwMDAwMCwgY2FyZC0+bWVtYmFzZSArIENGRyk7CisJLyogQ2xlYXIgdGltZXIgb3ZlcmZsb3cgKi8KKwlkYXRhID0gcmVhZGwoY2FyZC0+bWVtYmFzZSArIFNUQVQpOworCWlmIChkYXRhICYgTlNfU1RBVF9UTVJPRikKKwkJd3JpdGVsKE5TX1NUQVRfVE1ST0YsIGNhcmQtPm1lbWJhc2UgKyBTVEFUKTsKIAotICAgLyogUEhZIHJlc2V0ICovCi0gICB3cml0ZWwoMHgwMDAwMDAwOCwgY2FyZC0+bWVtYmFzZSArIEdQKTsKLSAgIE5TX0RFTEFZOwotICAgd3JpdGVsKDB4MDAwMDAwMDEsIGNhcmQtPm1lbWJhc2UgKyBHUCk7Ci0gICBOU19ERUxBWTsKLSAgIHdoaWxlIChDTURfQlVTWShjYXJkKSk7Ci0gICB3cml0ZWwoTlNfQ01EX1dSSVRFX1VUSUxJVFkgfCAweDAwMDAwMTAwLCBjYXJkLT5tZW1iYXNlICsgQ01EKTsJLyogU3luYyBVVE9QSUEgd2l0aCBTQVIgY2xvY2sgKi8KLSAgIE5TX0RFTEFZOwotICAgICAgCi0gICAvKiBEZXRlY3QgUEhZIHR5cGUgKi8KLSAgIHdoaWxlIChDTURfQlVTWShjYXJkKSk7Ci0gICB3cml0ZWwoTlNfQ01EX1JFQURfVVRJTElUWSB8IDB4MDAwMDAyMDAsIGNhcmQtPm1lbWJhc2UgKyBDTUQpOwotICAgd2hpbGUgKENNRF9CVVNZKGNhcmQpKTsKLSAgIGRhdGEgPSByZWFkbChjYXJkLT5tZW1iYXNlICsgRFIwKTsKLSAgIHN3aXRjaChkYXRhKSB7Ci0gICAgICBjYXNlIDB4MDAwMDAwMDk6Ci0gICAgICAgICBwcmludGsoIm5pY3N0YXIlZDogUEhZIHNlZW1zIHRvIGJlIDI1IE1icHMuXG4iLCBpKTsKLSAgICAgICAgIGNhcmQtPm1heF9wY3IgPSBBVE1fMjVfUENSOwotICAgICAgICAgd2hpbGUoQ01EX0JVU1koY2FyZCkpOwotICAgICAgICAgd3JpdGVsKDB4MDAwMDAwMDgsIGNhcmQtPm1lbWJhc2UgKyBEUjApOwotICAgICAgICAgd3JpdGVsKE5TX0NNRF9XUklURV9VVElMSVRZIHwgMHgwMDAwMDIwMCwgY2FyZC0+bWVtYmFzZSArIENNRCk7Ci0gICAgICAgICAvKiBDbGVhciBhbiBldmVudHVhbCBwZW5kaW5nIGludGVycnVwdCAqLwotICAgICAgICAgd3JpdGVsKE5TX1NUQVRfU0ZCUUYsIGNhcmQtPm1lbWJhc2UgKyBTVEFUKTsKKwkvKiBTb2Z0d2FyZSByZXNldCAqLworCXdyaXRlbChOU19DRkdfU1dSU1QsIGNhcmQtPm1lbWJhc2UgKyBDRkcpOworCU5TX0RFTEFZOworCXdyaXRlbCgweDAwMDAwMDAwLCBjYXJkLT5tZW1iYXNlICsgQ0ZHKTsKKworCS8qIFBIWSByZXNldCAqLworCXdyaXRlbCgweDAwMDAwMDA4LCBjYXJkLT5tZW1iYXNlICsgR1ApOworCU5TX0RFTEFZOworCXdyaXRlbCgweDAwMDAwMDAxLCBjYXJkLT5tZW1iYXNlICsgR1ApOworCU5TX0RFTEFZOworCXdoaWxlIChDTURfQlVTWShjYXJkKSkgOworCXdyaXRlbChOU19DTURfV1JJVEVfVVRJTElUWSB8IDB4MDAwMDAxMDAsIGNhcmQtPm1lbWJhc2UgKyBDTUQpOwkvKiBTeW5jIFVUT1BJQSB3aXRoIFNBUiBjbG9jayAqLworCU5TX0RFTEFZOworCisJLyogRGV0ZWN0IFBIWSB0eXBlICovCisJd2hpbGUgKENNRF9CVVNZKGNhcmQpKSA7CisJd3JpdGVsKE5TX0NNRF9SRUFEX1VUSUxJVFkgfCAweDAwMDAwMjAwLCBjYXJkLT5tZW1iYXNlICsgQ01EKTsKKwl3aGlsZSAoQ01EX0JVU1koY2FyZCkpIDsKKwlkYXRhID0gcmVhZGwoY2FyZC0+bWVtYmFzZSArIERSMCk7CisJc3dpdGNoIChkYXRhKSB7CisJY2FzZSAweDAwMDAwMDA5OgorCQlwcmludGsoIm5pY3N0YXIlZDogUEhZIHNlZW1zIHRvIGJlIDI1IE1icHMuXG4iLCBpKTsKKwkJY2FyZC0+bWF4X3BjciA9IEFUTV8yNV9QQ1I7CisJCXdoaWxlIChDTURfQlVTWShjYXJkKSkgOworCQl3cml0ZWwoMHgwMDAwMDAwOCwgY2FyZC0+bWVtYmFzZSArIERSMCk7CisJCXdyaXRlbChOU19DTURfV1JJVEVfVVRJTElUWSB8IDB4MDAwMDAyMDAsIGNhcmQtPm1lbWJhc2UgKyBDTUQpOworCQkvKiBDbGVhciBhbiBldmVudHVhbCBwZW5kaW5nIGludGVycnVwdCAqLworCQl3cml0ZWwoTlNfU1RBVF9TRkJRRiwgY2FyZC0+bWVtYmFzZSArIFNUQVQpOwogI2lmZGVmIFBIWV9MT09QQkFDSwotICAgICAgICAgd2hpbGUoQ01EX0JVU1koY2FyZCkpOwotICAgICAgICAgd3JpdGVsKDB4MDAwMDAwMjIsIGNhcmQtPm1lbWJhc2UgKyBEUjApOwotICAgICAgICAgd3JpdGVsKE5TX0NNRF9XUklURV9VVElMSVRZIHwgMHgwMDAwMDIwMiwgY2FyZC0+bWVtYmFzZSArIENNRCk7CisJCXdoaWxlIChDTURfQlVTWShjYXJkKSkgOworCQl3cml0ZWwoMHgwMDAwMDAyMiwgY2FyZC0+bWVtYmFzZSArIERSMCk7CisJCXdyaXRlbChOU19DTURfV1JJVEVfVVRJTElUWSB8IDB4MDAwMDAyMDIsIGNhcmQtPm1lbWJhc2UgKyBDTUQpOwogI2VuZGlmIC8qIFBIWV9MT09QQkFDSyAqLwotCSBicmVhazsKLSAgICAgIGNhc2UgMHgwMDAwMDAzMDoKLSAgICAgIGNhc2UgMHgwMDAwMDAzMToKLSAgICAgICAgIHByaW50aygibmljc3RhciVkOiBQSFkgc2VlbXMgdG8gYmUgMTU1IE1icHMuXG4iLCBpKTsKLSAgICAgICAgIGNhcmQtPm1heF9wY3IgPSBBVE1fT0MzX1BDUjsKKwkJYnJlYWs7CisJY2FzZSAweDAwMDAwMDMwOgorCWNhc2UgMHgwMDAwMDAzMToKKwkJcHJpbnRrKCJuaWNzdGFyJWQ6IFBIWSBzZWVtcyB0byBiZSAxNTUgTWJwcy5cbiIsIGkpOworCQljYXJkLT5tYXhfcGNyID0gQVRNX09DM19QQ1I7CiAjaWZkZWYgUEhZX0xPT1BCQUNLCi0gICAgICAgICB3aGlsZShDTURfQlVTWShjYXJkKSk7Ci0gICAgICAgICB3cml0ZWwoMHgwMDAwMDAwMiwgY2FyZC0+bWVtYmFzZSArIERSMCk7Ci0gICAgICAgICB3cml0ZWwoTlNfQ01EX1dSSVRFX1VUSUxJVFkgfCAweDAwMDAwMjA1LCBjYXJkLT5tZW1iYXNlICsgQ01EKTsKKwkJd2hpbGUgKENNRF9CVVNZKGNhcmQpKSA7CisJCXdyaXRlbCgweDAwMDAwMDAyLCBjYXJkLT5tZW1iYXNlICsgRFIwKTsKKwkJd3JpdGVsKE5TX0NNRF9XUklURV9VVElMSVRZIHwgMHgwMDAwMDIwNSwgY2FyZC0+bWVtYmFzZSArIENNRCk7CiAjZW5kaWYgLyogUEhZX0xPT1BCQUNLICovCi0JIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgIHByaW50aygibmljc3RhciVkOiB1bmtub3duIFBIWSB0eXBlICgweCUwOFgpLlxuIiwgaSwgZGF0YSk7Ci0gICAgICAgICBlcnJvciA9IDg7Ci0gICAgICAgICBuc19pbml0X2NhcmRfZXJyb3IoY2FyZCwgZXJyb3IpOwotICAgICAgICAgcmV0dXJuIGVycm9yOwotICAgfQotICAgd3JpdGVsKDB4MDAwMDAwMDAsIGNhcmQtPm1lbWJhc2UgKyBHUCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygibmljc3RhciVkOiB1bmtub3duIFBIWSB0eXBlICgweCUwOFgpLlxuIiwgaSwgZGF0YSk7CisJCWVycm9yID0gODsKKwkJbnNfaW5pdF9jYXJkX2Vycm9yKGNhcmQsIGVycm9yKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKwl3cml0ZWwoMHgwMDAwMDAwMCwgY2FyZC0+bWVtYmFzZSArIEdQKTsKIAotICAgLyogRGV0ZXJtaW5lIFNSQU0gc2l6ZSAqLwotICAgZGF0YSA9IDB4NzY1NDMyMTA7Ci0gICBuc193cml0ZV9zcmFtKGNhcmQsIDB4MUMwMDMsICZkYXRhLCAxKTsKLSAgIGRhdGEgPSAweDg5QUJDREVGOwotICAgbnNfd3JpdGVfc3JhbShjYXJkLCAweDE0MDAzLCAmZGF0YSwgMSk7Ci0gICBpZiAobnNfcmVhZF9zcmFtKGNhcmQsIDB4MTQwMDMpID09IDB4ODlBQkNERUYgJiYKLSAgICAgICBuc19yZWFkX3NyYW0oY2FyZCwgMHgxQzAwMykgPT0gMHg3NjU0MzIxMCkKLSAgICAgICBjYXJkLT5zcmFtX3NpemUgPSAxMjg7Ci0gICBlbHNlCi0gICAgICBjYXJkLT5zcmFtX3NpemUgPSAzMjsKLSAgIFBSSU5USygibmljc3RhciVkOiAlZEsgeCAzMmJpdCBTUkFNIHNpemUuXG4iLCBpLCBjYXJkLT5zcmFtX3NpemUpOworCS8qIERldGVybWluZSBTUkFNIHNpemUgKi8KKwlkYXRhID0gMHg3NjU0MzIxMDsKKwluc193cml0ZV9zcmFtKGNhcmQsIDB4MUMwMDMsICZkYXRhLCAxKTsKKwlkYXRhID0gMHg4OUFCQ0RFRjsKKwluc193cml0ZV9zcmFtKGNhcmQsIDB4MTQwMDMsICZkYXRhLCAxKTsKKwlpZiAobnNfcmVhZF9zcmFtKGNhcmQsIDB4MTQwMDMpID09IDB4ODlBQkNERUYgJiYKKwkgICAgbnNfcmVhZF9zcmFtKGNhcmQsIDB4MUMwMDMpID09IDB4NzY1NDMyMTApCisJCWNhcmQtPnNyYW1fc2l6ZSA9IDEyODsKKwllbHNlCisJCWNhcmQtPnNyYW1fc2l6ZSA9IDMyOworCVBSSU5USygibmljc3RhciVkOiAlZEsgeCAzMmJpdCBTUkFNIHNpemUuXG4iLCBpLCBjYXJkLT5zcmFtX3NpemUpOwogCi0gICBjYXJkLT5yY3Rfc2l6ZSA9IE5TX01BWF9SQ1RTSVpFOworCWNhcmQtPnJjdF9zaXplID0gTlNfTUFYX1JDVFNJWkU7CiAKICNpZiAoTlNfTUFYX1JDVFNJWkUgPT0gNDA5NikKLSAgIGlmIChjYXJkLT5zcmFtX3NpemUgPT0gMTI4KQotICAgICAgcHJpbnRrKCJuaWNzdGFyJWQ6IGxpbWl0aW5nIG1heGltdW0gVkNJLiBTZWUgTlNfTUFYX1JDVFNJWkUgaW4gbmljc3Rhci5oXG4iLCBpKTsKKwlpZiAoY2FyZC0+c3JhbV9zaXplID09IDEyOCkKKwkJcHJpbnRrCisJCSAgICAoIm5pY3N0YXIlZDogbGltaXRpbmcgbWF4aW11bSBWQ0kuIFNlZSBOU19NQVhfUkNUU0laRSBpbiBuaWNzdGFyLmhcbiIsCisJCSAgICAgaSk7CiAjZWxpZiAoTlNfTUFYX1JDVFNJWkUgPT0gMTYzODQpCi0gICBpZiAoY2FyZC0+c3JhbV9zaXplID09IDMyKQotICAgewotICAgICAgcHJpbnRrKCJuaWNzdGFyJWQ6IHdhc3RpbmcgbWVtb3J5LiBTZWUgTlNfTUFYX1JDVFNJWkUgaW4gbmljc3Rhci5oXG4iLCBpKTsKLSAgICAgIGNhcmQtPnJjdF9zaXplID0gNDA5NjsKLSAgIH0KKwlpZiAoY2FyZC0+c3JhbV9zaXplID09IDMyKSB7CisJCXByaW50aworCQkgICAgKCJuaWNzdGFyJWQ6IHdhc3RpbmcgbWVtb3J5LiBTZWUgTlNfTUFYX1JDVFNJWkUgaW4gbmljc3Rhci5oXG4iLAorCQkgICAgIGkpOworCQljYXJkLT5yY3Rfc2l6ZSA9IDQwOTY7CisJfQogI2Vsc2UKICNlcnJvciBOU19NQVhfUkNUU0laRSBtdXN0IGJlIGVpdGhlciA0MDk2IG9yIDE2Mzg0IGluIG5pY3N0YXIuYwogI2VuZGlmCiAKLSAgIGNhcmQtPnZwaWJpdHMgPSBOU19WUElCSVRTOwotICAgaWYgKGNhcmQtPnJjdF9zaXplID09IDQwOTYpCi0gICAgICBjYXJkLT52Y2liaXRzID0gMTIgLSBOU19WUElCSVRTOwotICAgZWxzZSAvKiBjYXJkLT5yY3Rfc2l6ZSA9PSAxNjM4NCAqLwotICAgICAgY2FyZC0+dmNpYml0cyA9IDE0IC0gTlNfVlBJQklUUzsKKwljYXJkLT52cGliaXRzID0gTlNfVlBJQklUUzsKKwlpZiAoY2FyZC0+cmN0X3NpemUgPT0gNDA5NikKKwkJY2FyZC0+dmNpYml0cyA9IDEyIC0gTlNfVlBJQklUUzsKKwllbHNlCQkJLyogY2FyZC0+cmN0X3NpemUgPT0gMTYzODQgKi8KKwkJY2FyZC0+dmNpYml0cyA9IDE0IC0gTlNfVlBJQklUUzsKIAotICAgLyogSW5pdGlhbGl6ZSB0aGUgbmljc3RhciBlZXByb20vZXByb20gc3R1ZmYsIGZvciB0aGUgTUFDIGFkZHIgKi8KLSAgIGlmIChtYWNbaV0gPT0gTlVMTCkKLSAgICAgIG5pY3N0YXJfaW5pdF9lcHJvbShjYXJkLT5tZW1iYXNlKTsKKwkvKiBJbml0aWFsaXplIHRoZSBuaWNzdGFyIGVlcHJvbS9lcHJvbSBzdHVmZiwgZm9yIHRoZSBNQUMgYWRkciAqLworCWlmIChtYWNbaV0gPT0gTlVMTCkKKwkJbmljc3Rhcl9pbml0X2Vwcm9tKGNhcmQtPm1lbWJhc2UpOwogCi0gICAvKiBTZXQgdGhlIFZQSS9WQ0kgTVNiIG1hc2sgdG8gemVybyBzbyB3ZSBjYW4gcmVjZWl2ZSBPQU0gY2VsbHMgKi8KLSAgIHdyaXRlbCgweDAwMDAwMDAwLCBjYXJkLT5tZW1iYXNlICsgVlBNKTsKLSAgICAgIAotICAgLyogSW5pdGlhbGl6ZSBUU1EgKi8KLSAgIGNhcmQtPnRzcS5vcmcgPSBrbWFsbG9jKE5TX1RTUVNJWkUgKyBOU19UU1FfQUxJR05NRU5ULCBHRlBfS0VSTkVMKTsKLSAgIGlmIChjYXJkLT50c3Eub3JnID09IE5VTEwpCi0gICB7Ci0gICAgICBwcmludGsoIm5pY3N0YXIlZDogY2FuJ3QgYWxsb2NhdGUgVFNRLlxuIiwgaSk7Ci0gICAgICBlcnJvciA9IDEwOwotICAgICAgbnNfaW5pdF9jYXJkX2Vycm9yKGNhcmQsIGVycm9yKTsKLSAgICAgIHJldHVybiBlcnJvcjsKLSAgIH0KLSAgIGNhcmQtPnRzcS5iYXNlID0gKG5zX3RzaSAqKSBBTElHTl9BRERSRVNTKGNhcmQtPnRzcS5vcmcsIE5TX1RTUV9BTElHTk1FTlQpOwotICAgY2FyZC0+dHNxLm5leHQgPSBjYXJkLT50c3EuYmFzZTsKLSAgIGNhcmQtPnRzcS5sYXN0ID0gY2FyZC0+dHNxLmJhc2UgKyAoTlNfVFNRX05VTV9FTlRSSUVTIC0gMSk7Ci0gICBmb3IgKGogPSAwOyBqIDwgTlNfVFNRX05VTV9FTlRSSUVTOyBqKyspCi0gICAgICBuc190c2lfaW5pdChjYXJkLT50c3EuYmFzZSArIGopOwotICAgd3JpdGVsKDB4MDAwMDAwMDAsIGNhcmQtPm1lbWJhc2UgKyBUU1FIKTsKLSAgIHdyaXRlbCgodTMyKSB2aXJ0X3RvX2J1cyhjYXJkLT50c3EuYmFzZSksIGNhcmQtPm1lbWJhc2UgKyBUU1FCKTsKLSAgIFBSSU5USygibmljc3RhciVkOiBUU1EgYmFzZSBhdCAweCV4ICAweCV4ICAweCV4LlxuIiwgaSwgKHUzMikgY2FyZC0+dHNxLmJhc2UsCi0gICAgICAgICAgKHUzMikgdmlydF90b19idXMoY2FyZC0+dHNxLmJhc2UpLCByZWFkbChjYXJkLT5tZW1iYXNlICsgVFNRQikpOwotICAgICAgCi0gICAvKiBJbml0aWFsaXplIFJTUSAqLwotICAgY2FyZC0+cnNxLm9yZyA9IGttYWxsb2MoTlNfUlNRU0laRSArIE5TX1JTUV9BTElHTk1FTlQsIEdGUF9LRVJORUwpOwotICAgaWYgKGNhcmQtPnJzcS5vcmcgPT0gTlVMTCkKLSAgIHsKLSAgICAgIHByaW50aygibmljc3RhciVkOiBjYW4ndCBhbGxvY2F0ZSBSU1EuXG4iLCBpKTsKLSAgICAgIGVycm9yID0gMTE7Ci0gICAgICBuc19pbml0X2NhcmRfZXJyb3IoY2FyZCwgZXJyb3IpOwotICAgICAgcmV0dXJuIGVycm9yOwotICAgfQotICAgY2FyZC0+cnNxLmJhc2UgPSAobnNfcnNxZSAqKSBBTElHTl9BRERSRVNTKGNhcmQtPnJzcS5vcmcsIE5TX1JTUV9BTElHTk1FTlQpOwotICAgY2FyZC0+cnNxLm5leHQgPSBjYXJkLT5yc3EuYmFzZTsKLSAgIGNhcmQtPnJzcS5sYXN0ID0gY2FyZC0+cnNxLmJhc2UgKyAoTlNfUlNRX05VTV9FTlRSSUVTIC0gMSk7Ci0gICBmb3IgKGogPSAwOyBqIDwgTlNfUlNRX05VTV9FTlRSSUVTOyBqKyspCi0gICAgICBuc19yc3FlX2luaXQoY2FyZC0+cnNxLmJhc2UgKyBqKTsKLSAgIHdyaXRlbCgweDAwMDAwMDAwLCBjYXJkLT5tZW1iYXNlICsgUlNRSCk7Ci0gICB3cml0ZWwoKHUzMikgdmlydF90b19idXMoY2FyZC0+cnNxLmJhc2UpLCBjYXJkLT5tZW1iYXNlICsgUlNRQik7Ci0gICBQUklOVEsoIm5pY3N0YXIlZDogUlNRIGJhc2UgYXQgMHgleC5cbiIsIGksICh1MzIpIGNhcmQtPnJzcS5iYXNlKTsKLSAgICAgIAotICAgLyogSW5pdGlhbGl6ZSBTQ1EwLCB0aGUgb25seSBWQlIgU0NRIHVzZWQgKi8KLSAgIGNhcmQtPnNjcTEgPSBOVUxMOwotICAgY2FyZC0+c2NxMiA9IE5VTEw7Ci0gICBjYXJkLT5zY3EwID0gZ2V0X3NjcShWQlJfU0NRU0laRSwgTlNfVlJTQ0QwKTsKLSAgIGlmIChjYXJkLT5zY3EwID09IE5VTEwpCi0gICB7Ci0gICAgICBwcmludGsoIm5pY3N0YXIlZDogY2FuJ3QgZ2V0IFNDUTAuXG4iLCBpKTsKLSAgICAgIGVycm9yID0gMTI7Ci0gICAgICBuc19pbml0X2NhcmRfZXJyb3IoY2FyZCwgZXJyb3IpOwotICAgICAgcmV0dXJuIGVycm9yOwotICAgfQotICAgdTMyZFswXSA9ICh1MzIpIHZpcnRfdG9fYnVzKGNhcmQtPnNjcTAtPmJhc2UpOwotICAgdTMyZFsxXSA9ICh1MzIpIDB4MDAwMDAwMDA7Ci0gICB1MzJkWzJdID0gKHUzMikgMHhmZmZmZmZmZjsKLSAgIHUzMmRbM10gPSAodTMyKSAweDAwMDAwMDAwOwotICAgbnNfd3JpdGVfc3JhbShjYXJkLCBOU19WUlNDRDAsIHUzMmQsIDQpOwotICAgbnNfd3JpdGVfc3JhbShjYXJkLCBOU19WUlNDRDEsIHUzMmQsIDQpOwkvKiBUaGVzZSBsYXN0IHR3byB3b24ndCBiZSB1c2VkICovCi0gICBuc193cml0ZV9zcmFtKGNhcmQsIE5TX1ZSU0NEMiwgdTMyZCwgNCk7CS8qIGJ1dCBhcmUgaW5pdGlhbGl6ZWQsIGp1c3QgaW4gY2FzZS4uLiAqLwotICAgY2FyZC0+c2NxMC0+c2NkID0gTlNfVlJTQ0QwOwotICAgUFJJTlRLKCJuaWNzdGFyJWQ6IFZCUi1TQ1EwIGJhc2UgYXQgMHgleC5cbiIsIGksICh1MzIpIGNhcmQtPnNjcTAtPmJhc2UpOworCS8qIFNldCB0aGUgVlBJL1ZDSSBNU2IgbWFzayB0byB6ZXJvIHNvIHdlIGNhbiByZWNlaXZlIE9BTSBjZWxscyAqLworCXdyaXRlbCgweDAwMDAwMDAwLCBjYXJkLT5tZW1iYXNlICsgVlBNKTsKIAotICAgLyogSW5pdGlhbGl6ZSBUU1RzICovCi0gICBjYXJkLT50c3RfYWRkciA9IE5TX1RTVDA7Ci0gICBjYXJkLT50c3RfZnJlZV9lbnRyaWVzID0gTlNfVFNUX05VTV9FTlRSSUVTOwotICAgZGF0YSA9IE5TX1RTVF9PUENPREVfVkFSSUFCTEU7Ci0gICBmb3IgKGogPSAwOyBqIDwgTlNfVFNUX05VTV9FTlRSSUVTOyBqKyspCi0gICAgICBuc193cml0ZV9zcmFtKGNhcmQsIE5TX1RTVDAgKyBqLCAmZGF0YSwgMSk7Ci0gICBkYXRhID0gbnNfdHN0ZV9tYWtlKE5TX1RTVF9PUENPREVfRU5ELCBOU19UU1QwKTsKLSAgIG5zX3dyaXRlX3NyYW0oY2FyZCwgTlNfVFNUMCArIE5TX1RTVF9OVU1fRU5UUklFUywgJmRhdGEsIDEpOwotICAgZm9yIChqID0gMDsgaiA8IE5TX1RTVF9OVU1fRU5UUklFUzsgaisrKQotICAgICAgbnNfd3JpdGVfc3JhbShjYXJkLCBOU19UU1QxICsgaiwgJmRhdGEsIDEpOwotICAgZGF0YSA9IG5zX3RzdGVfbWFrZShOU19UU1RfT1BDT0RFX0VORCwgTlNfVFNUMSk7Ci0gICBuc193cml0ZV9zcmFtKGNhcmQsIE5TX1RTVDEgKyBOU19UU1RfTlVNX0VOVFJJRVMsICZkYXRhLCAxKTsKLSAgIGZvciAoaiA9IDA7IGogPCBOU19UU1RfTlVNX0VOVFJJRVM7IGorKykKLSAgICAgIGNhcmQtPnRzdGUydmNbal0gPSBOVUxMOwotICAgd3JpdGVsKE5TX1RTVDAgPDwgMiwgY2FyZC0+bWVtYmFzZSArIFRTVEIpOworCS8qIEluaXRpYWxpemUgVFNRICovCisJY2FyZC0+dHNxLm9yZyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGNhcmQtPnBjaWRldiwKKwkJCQkJICAgICBOU19UU1FTSVpFICsgTlNfVFNRX0FMSUdOTUVOVCwKKwkJCQkJICAgICAmY2FyZC0+dHNxLmRtYSk7CisJaWYgKGNhcmQtPnRzcS5vcmcgPT0gTlVMTCkgeworCQlwcmludGsoIm5pY3N0YXIlZDogY2FuJ3QgYWxsb2NhdGUgVFNRLlxuIiwgaSk7CisJCWVycm9yID0gMTA7CisJCW5zX2luaXRfY2FyZF9lcnJvcihjYXJkLCBlcnJvcik7CisJCXJldHVybiBlcnJvcjsKKwl9CisJY2FyZC0+dHNxLmJhc2UgPSBQVFJfQUxJR04oY2FyZC0+dHNxLm9yZywgTlNfVFNRX0FMSUdOTUVOVCk7CisJY2FyZC0+dHNxLm5leHQgPSBjYXJkLT50c3EuYmFzZTsKKwljYXJkLT50c3EubGFzdCA9IGNhcmQtPnRzcS5iYXNlICsgKE5TX1RTUV9OVU1fRU5UUklFUyAtIDEpOworCWZvciAoaiA9IDA7IGogPCBOU19UU1FfTlVNX0VOVFJJRVM7IGorKykKKwkJbnNfdHNpX2luaXQoY2FyZC0+dHNxLmJhc2UgKyBqKTsKKwl3cml0ZWwoMHgwMDAwMDAwMCwgY2FyZC0+bWVtYmFzZSArIFRTUUgpOworCXdyaXRlbChBTElHTihjYXJkLT50c3EuZG1hLCBOU19UU1FfQUxJR05NRU5UKSwgY2FyZC0+bWVtYmFzZSArIFRTUUIpOworCVBSSU5USygibmljc3RhciVkOiBUU1EgYmFzZSBhdCAweCVwLlxuIiwgaSwgY2FyZC0+dHNxLmJhc2UpOwogCisJLyogSW5pdGlhbGl6ZSBSU1EgKi8KKwljYXJkLT5yc3Eub3JnID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoY2FyZC0+cGNpZGV2LAorCQkJCQkgICAgIE5TX1JTUVNJWkUgKyBOU19SU1FfQUxJR05NRU5ULAorCQkJCQkgICAgICZjYXJkLT5yc3EuZG1hKTsKKwlpZiAoY2FyZC0+cnNxLm9yZyA9PSBOVUxMKSB7CisJCXByaW50aygibmljc3RhciVkOiBjYW4ndCBhbGxvY2F0ZSBSU1EuXG4iLCBpKTsKKwkJZXJyb3IgPSAxMTsKKwkJbnNfaW5pdF9jYXJkX2Vycm9yKGNhcmQsIGVycm9yKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKwljYXJkLT5yc3EuYmFzZSA9IFBUUl9BTElHTihjYXJkLT5yc3Eub3JnLCBOU19SU1FfQUxJR05NRU5UKTsKKwljYXJkLT5yc3EubmV4dCA9IGNhcmQtPnJzcS5iYXNlOworCWNhcmQtPnJzcS5sYXN0ID0gY2FyZC0+cnNxLmJhc2UgKyAoTlNfUlNRX05VTV9FTlRSSUVTIC0gMSk7CisJZm9yIChqID0gMDsgaiA8IE5TX1JTUV9OVU1fRU5UUklFUzsgaisrKQorCQluc19yc3FlX2luaXQoY2FyZC0+cnNxLmJhc2UgKyBqKTsKKwl3cml0ZWwoMHgwMDAwMDAwMCwgY2FyZC0+bWVtYmFzZSArIFJTUUgpOworCXdyaXRlbChBTElHTihjYXJkLT5yc3EuZG1hLCBOU19SU1FfQUxJR05NRU5UKSwgY2FyZC0+bWVtYmFzZSArIFJTUUIpOworCVBSSU5USygibmljc3RhciVkOiBSU1EgYmFzZSBhdCAweCVwLlxuIiwgaSwgY2FyZC0+cnNxLmJhc2UpOwogCi0gICAvKiBJbml0aWFsaXplIFJDVC4gQUFMIHR5cGUgaXMgc2V0IG9uIG9wZW5pbmcgdGhlIFZDLiAqLworCS8qIEluaXRpYWxpemUgU0NRMCwgdGhlIG9ubHkgVkJSIFNDUSB1c2VkICovCisJY2FyZC0+c2NxMSA9IE5VTEw7CisJY2FyZC0+c2NxMiA9IE5VTEw7CisJY2FyZC0+c2NxMCA9IGdldF9zY3EoY2FyZCwgVkJSX1NDUVNJWkUsIE5TX1ZSU0NEMCk7CisJaWYgKGNhcmQtPnNjcTAgPT0gTlVMTCkgeworCQlwcmludGsoIm5pY3N0YXIlZDogY2FuJ3QgZ2V0IFNDUTAuXG4iLCBpKTsKKwkJZXJyb3IgPSAxMjsKKwkJbnNfaW5pdF9jYXJkX2Vycm9yKGNhcmQsIGVycm9yKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKwl1MzJkWzBdID0gc2NxX3ZpcnRfdG9fYnVzKGNhcmQtPnNjcTAsIGNhcmQtPnNjcTAtPmJhc2UpOworCXUzMmRbMV0gPSAodTMyKSAweDAwMDAwMDAwOworCXUzMmRbMl0gPSAodTMyKSAweGZmZmZmZmZmOworCXUzMmRbM10gPSAodTMyKSAweDAwMDAwMDAwOworCW5zX3dyaXRlX3NyYW0oY2FyZCwgTlNfVlJTQ0QwLCB1MzJkLCA0KTsKKwluc193cml0ZV9zcmFtKGNhcmQsIE5TX1ZSU0NEMSwgdTMyZCwgNCk7CS8qIFRoZXNlIGxhc3QgdHdvIHdvbid0IGJlIHVzZWQgKi8KKwluc193cml0ZV9zcmFtKGNhcmQsIE5TX1ZSU0NEMiwgdTMyZCwgNCk7CS8qIGJ1dCBhcmUgaW5pdGlhbGl6ZWQsIGp1c3QgaW4gY2FzZS4uLiAqLworCWNhcmQtPnNjcTAtPnNjZCA9IE5TX1ZSU0NEMDsKKwlQUklOVEsoIm5pY3N0YXIlZDogVkJSLVNDUTAgYmFzZSBhdCAweCVwLlxuIiwgaSwgY2FyZC0+c2NxMC0+YmFzZSk7CisKKwkvKiBJbml0aWFsaXplIFRTVHMgKi8KKwljYXJkLT50c3RfYWRkciA9IE5TX1RTVDA7CisJY2FyZC0+dHN0X2ZyZWVfZW50cmllcyA9IE5TX1RTVF9OVU1fRU5UUklFUzsKKwlkYXRhID0gTlNfVFNUX09QQ09ERV9WQVJJQUJMRTsKKwlmb3IgKGogPSAwOyBqIDwgTlNfVFNUX05VTV9FTlRSSUVTOyBqKyspCisJCW5zX3dyaXRlX3NyYW0oY2FyZCwgTlNfVFNUMCArIGosICZkYXRhLCAxKTsKKwlkYXRhID0gbnNfdHN0ZV9tYWtlKE5TX1RTVF9PUENPREVfRU5ELCBOU19UU1QwKTsKKwluc193cml0ZV9zcmFtKGNhcmQsIE5TX1RTVDAgKyBOU19UU1RfTlVNX0VOVFJJRVMsICZkYXRhLCAxKTsKKwlmb3IgKGogPSAwOyBqIDwgTlNfVFNUX05VTV9FTlRSSUVTOyBqKyspCisJCW5zX3dyaXRlX3NyYW0oY2FyZCwgTlNfVFNUMSArIGosICZkYXRhLCAxKTsKKwlkYXRhID0gbnNfdHN0ZV9tYWtlKE5TX1RTVF9PUENPREVfRU5ELCBOU19UU1QxKTsKKwluc193cml0ZV9zcmFtKGNhcmQsIE5TX1RTVDEgKyBOU19UU1RfTlVNX0VOVFJJRVMsICZkYXRhLCAxKTsKKwlmb3IgKGogPSAwOyBqIDwgTlNfVFNUX05VTV9FTlRSSUVTOyBqKyspCisJCWNhcmQtPnRzdGUydmNbal0gPSBOVUxMOworCXdyaXRlbChOU19UU1QwIDw8IDIsIGNhcmQtPm1lbWJhc2UgKyBUU1RCKTsKKworCS8qIEluaXRpYWxpemUgUkNULiBBQUwgdHlwZSBpcyBzZXQgb24gb3BlbmluZyB0aGUgVkMuICovCiAjaWZkZWYgUkNRX1NVUFBPUlQKLSAgIHUzMmRbMF0gPSBOU19SQ1RFX1JBV0NFTExJTlRFTjsKKwl1MzJkWzBdID0gTlNfUkNURV9SQVdDRUxMSU5URU47CiAjZWxzZQotICAgdTMyZFswXSA9IDB4MDAwMDAwMDA7CisJdTMyZFswXSA9IDB4MDAwMDAwMDA7CiAjZW5kaWYgLyogUkNRX1NVUFBPUlQgKi8KLSAgIHUzMmRbMV0gPSAweDAwMDAwMDAwOwotICAgdTMyZFsyXSA9IDB4MDAwMDAwMDA7Ci0gICB1MzJkWzNdID0gMHhGRkZGRkZGRjsKLSAgIGZvciAoaiA9IDA7IGogPCBjYXJkLT5yY3Rfc2l6ZTsgaisrKQotICAgICAgbnNfd3JpdGVfc3JhbShjYXJkLCBqICogNCwgdTMyZCwgNCk7ICAgICAgCi0gICAgICAKLSAgIG1lbXNldChjYXJkLT52Y21hcCwgMCwgTlNfTUFYX1JDVFNJWkUgKiBzaXplb2YodmNfbWFwKSk7Ci0gICAgICAKLSAgIGZvciAoaiA9IDA7IGogPCBOU19GUlNDRF9OVU07IGorKykKLSAgICAgIGNhcmQtPnNjZDJ2Y1tqXSA9IE5VTEw7CisJdTMyZFsxXSA9IDB4MDAwMDAwMDA7CisJdTMyZFsyXSA9IDB4MDAwMDAwMDA7CisJdTMyZFszXSA9IDB4RkZGRkZGRkY7CisJZm9yIChqID0gMDsgaiA8IGNhcmQtPnJjdF9zaXplOyBqKyspCisJCW5zX3dyaXRlX3NyYW0oY2FyZCwgaiAqIDQsIHUzMmQsIDQpOwogCi0gICAvKiBJbml0aWFsaXplIGJ1ZmZlciBsZXZlbHMgKi8KLSAgIGNhcmQtPnNibnIubWluID0gTUlOX1NCOwotICAgY2FyZC0+c2Juci5pbml0ID0gTlVNX1NCOwotICAgY2FyZC0+c2Juci5tYXggPSBNQVhfU0I7Ci0gICBjYXJkLT5sYm5yLm1pbiA9IE1JTl9MQjsKLSAgIGNhcmQtPmxibnIuaW5pdCA9IE5VTV9MQjsKLSAgIGNhcmQtPmxibnIubWF4ID0gTUFYX0xCOwotICAgY2FyZC0+aW92bnIubWluID0gTUlOX0lPVkI7Ci0gICBjYXJkLT5pb3Zuci5pbml0ID0gTlVNX0lPVkI7Ci0gICBjYXJkLT5pb3Zuci5tYXggPSBNQVhfSU9WQjsKLSAgIGNhcmQtPmhibnIubWluID0gTUlOX0hCOwotICAgY2FyZC0+aGJuci5pbml0ID0gTlVNX0hCOwotICAgY2FyZC0+aGJuci5tYXggPSBNQVhfSEI7Ci0gICAKLSAgIGNhcmQtPnNtX2hhbmRsZSA9IDB4MDAwMDAwMDA7Ci0gICBjYXJkLT5zbV9hZGRyID0gMHgwMDAwMDAwMDsKLSAgIGNhcmQtPmxnX2hhbmRsZSA9IDB4MDAwMDAwMDA7Ci0gICBjYXJkLT5sZ19hZGRyID0gMHgwMDAwMDAwMDsKLSAgIAotICAgY2FyZC0+ZWZiaWUgPSAxOwkvKiBUbyBwcmV2ZW50IHB1c2hfcnhidWZzIGZyb20gZW5hYmxpbmcgdGhlIGludGVycnVwdCAqLworCW1lbXNldChjYXJkLT52Y21hcCwgMCwgTlNfTUFYX1JDVFNJWkUgKiBzaXplb2YodmNfbWFwKSk7CiAKLSAgIC8qIFByZS1hbGxvY2F0ZSBzb21lIGh1Z2UgYnVmZmVycyAqLwotICAgc2tiX3F1ZXVlX2hlYWRfaW5pdCgmY2FyZC0+aGJwb29sLnF1ZXVlKTsKLSAgIGNhcmQtPmhicG9vbC5jb3VudCA9IDA7Ci0gICBmb3IgKGogPSAwOyBqIDwgTlVNX0hCOyBqKyspCi0gICB7Ci0gICAgICBzdHJ1Y3Qgc2tfYnVmZiAqaGI7Ci0gICAgICBoYiA9IF9fZGV2X2FsbG9jX3NrYihOU19IQlVGU0laRSwgR0ZQX0tFUk5FTCk7Ci0gICAgICBpZiAoaGIgPT0gTlVMTCkKLSAgICAgIHsKLSAgICAgICAgIHByaW50aygibmljc3RhciVkOiBjYW4ndCBhbGxvY2F0ZSAlZHRoIG9mICVkIGh1Z2UgYnVmZmVycy5cbiIsCi0gICAgICAgICAgICAgICAgaSwgaiwgTlVNX0hCKTsKLSAgICAgICAgIGVycm9yID0gMTM7Ci0gICAgICAgICBuc19pbml0X2NhcmRfZXJyb3IoY2FyZCwgZXJyb3IpOwotCSByZXR1cm4gZXJyb3I7Ci0gICAgICB9Ci0gICAgICBOU19TS0JfQ0IoaGIpLT5idWZfdHlwZSA9IEJVRl9OT05FOwotICAgICAgc2tiX3F1ZXVlX3RhaWwoJmNhcmQtPmhicG9vbC5xdWV1ZSwgaGIpOwotICAgICAgY2FyZC0+aGJwb29sLmNvdW50Kys7Ci0gICB9CisJZm9yIChqID0gMDsgaiA8IE5TX0ZSU0NEX05VTTsgaisrKQorCQljYXJkLT5zY2QydmNbal0gPSBOVUxMOwogCisJLyogSW5pdGlhbGl6ZSBidWZmZXIgbGV2ZWxzICovCisJY2FyZC0+c2Juci5taW4gPSBNSU5fU0I7CisJY2FyZC0+c2Juci5pbml0ID0gTlVNX1NCOworCWNhcmQtPnNibnIubWF4ID0gTUFYX1NCOworCWNhcmQtPmxibnIubWluID0gTUlOX0xCOworCWNhcmQtPmxibnIuaW5pdCA9IE5VTV9MQjsKKwljYXJkLT5sYm5yLm1heCA9IE1BWF9MQjsKKwljYXJkLT5pb3Zuci5taW4gPSBNSU5fSU9WQjsKKwljYXJkLT5pb3Zuci5pbml0ID0gTlVNX0lPVkI7CisJY2FyZC0+aW92bnIubWF4ID0gTUFYX0lPVkI7CisJY2FyZC0+aGJuci5taW4gPSBNSU5fSEI7CisJY2FyZC0+aGJuci5pbml0ID0gTlVNX0hCOworCWNhcmQtPmhibnIubWF4ID0gTUFYX0hCOwogCi0gICAvKiBBbGxvY2F0ZSBsYXJnZSBidWZmZXJzICovCi0gICBza2JfcXVldWVfaGVhZF9pbml0KCZjYXJkLT5sYnBvb2wucXVldWUpOwotICAgY2FyZC0+bGJwb29sLmNvdW50ID0gMDsJCQkvKiBOb3QgdXNlZCAqLwotICAgZm9yIChqID0gMDsgaiA8IE5VTV9MQjsgaisrKQotICAgewotICAgICAgc3RydWN0IHNrX2J1ZmYgKmxiOwotICAgICAgbGIgPSBfX2Rldl9hbGxvY19za2IoTlNfTEdTS0JTSVpFLCBHRlBfS0VSTkVMKTsKLSAgICAgIGlmIChsYiA9PSBOVUxMKQotICAgICAgewotICAgICAgICAgcHJpbnRrKCJuaWNzdGFyJWQ6IGNhbid0IGFsbG9jYXRlICVkdGggb2YgJWQgbGFyZ2UgYnVmZmVycy5cbiIsCi0gICAgICAgICAgICAgICAgaSwgaiwgTlVNX0xCKTsKLSAgICAgICAgIGVycm9yID0gMTQ7Ci0gICAgICAgICBuc19pbml0X2NhcmRfZXJyb3IoY2FyZCwgZXJyb3IpOwotCSByZXR1cm4gZXJyb3I7Ci0gICAgICB9Ci0gICAgICBOU19TS0JfQ0IobGIpLT5idWZfdHlwZSA9IEJVRl9MRzsKLSAgICAgIHNrYl9xdWV1ZV90YWlsKCZjYXJkLT5sYnBvb2wucXVldWUsIGxiKTsKLSAgICAgIHNrYl9yZXNlcnZlKGxiLCBOU19TTUJVRlNJWkUpOwotICAgICAgcHVzaF9yeGJ1ZnMoY2FyZCwgbGIpOwotICAgICAgLyogRHVlIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBwdXNoX3J4YnVmcygpIHRoaXMgaXMgMSwgbm90IDAgKi8KLSAgICAgIGlmIChqID09IDEpCi0gICAgICB7Ci0gICAgICAgICBjYXJkLT5yY2J1ZiA9IGxiOwotICAgICAgICAgY2FyZC0+cmF3Y2ggPSAodTMyKSB2aXJ0X3RvX2J1cyhsYi0+ZGF0YSk7Ci0gICAgICB9Ci0gICB9Ci0gICAvKiBUZXN0IGZvciBzdHJhbmdlIGJlaGF2aW91ciB3aGljaCBsZWFkcyB0byBjcmFzaGVzICovCi0gICBpZiAoKGJjb3VudCA9IG5zX3N0YXRfbGZicWNfZ2V0KHJlYWRsKGNhcmQtPm1lbWJhc2UgKyBTVEFUKSkpIDwgY2FyZC0+bGJuci5taW4pCi0gICB7Ci0gICAgICBwcmludGsoIm5pY3N0YXIlZDogU3RyYW5nZS4uLiBKdXN0IGFsbG9jYXRlZCAlZCBsYXJnZSBidWZmZXJzIGFuZCBsZmJxYyA9ICVkLlxuIiwKLSAgICAgICAgICAgICBpLCBqLCBiY291bnQpOwotICAgICAgZXJyb3IgPSAxNDsKLSAgICAgIG5zX2luaXRfY2FyZF9lcnJvcihjYXJkLCBlcnJvcik7Ci0gICAgICByZXR1cm4gZXJyb3I7Ci0gICB9Ci0gICAgICAKKwljYXJkLT5zbV9oYW5kbGUgPSAweDAwMDAwMDAwOworCWNhcmQtPnNtX2FkZHIgPSAweDAwMDAwMDAwOworCWNhcmQtPmxnX2hhbmRsZSA9IDB4MDAwMDAwMDA7CisJY2FyZC0+bGdfYWRkciA9IDB4MDAwMDAwMDA7CiAKLSAgIC8qIEFsbG9jYXRlIHNtYWxsIGJ1ZmZlcnMgKi8KLSAgIHNrYl9xdWV1ZV9oZWFkX2luaXQoJmNhcmQtPnNicG9vbC5xdWV1ZSk7Ci0gICBjYXJkLT5zYnBvb2wuY291bnQgPSAwOwkJCS8qIE5vdCB1c2VkICovCi0gICBmb3IgKGogPSAwOyBqIDwgTlVNX1NCOyBqKyspCi0gICB7Ci0gICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2I7Ci0gICAgICBzYiA9IF9fZGV2X2FsbG9jX3NrYihOU19TTVNLQlNJWkUsIEdGUF9LRVJORUwpOwotICAgICAgaWYgKHNiID09IE5VTEwpCi0gICAgICB7Ci0gICAgICAgICBwcmludGsoIm5pY3N0YXIlZDogY2FuJ3QgYWxsb2NhdGUgJWR0aCBvZiAlZCBzbWFsbCBidWZmZXJzLlxuIiwKLSAgICAgICAgICAgICAgICBpLCBqLCBOVU1fU0IpOwotICAgICAgICAgZXJyb3IgPSAxNTsKLSAgICAgICAgIG5zX2luaXRfY2FyZF9lcnJvcihjYXJkLCBlcnJvcik7Ci0JIHJldHVybiBlcnJvcjsKLSAgICAgIH0KLSAgICAgIE5TX1NLQl9DQihzYiktPmJ1Zl90eXBlID0gQlVGX1NNOwotICAgICAgc2tiX3F1ZXVlX3RhaWwoJmNhcmQtPnNicG9vbC5xdWV1ZSwgc2IpOwotICAgICAgc2tiX3Jlc2VydmUoc2IsIE5TX0FBTDBfSEVBREVSKTsKLSAgICAgIHB1c2hfcnhidWZzKGNhcmQsIHNiKTsKLSAgIH0KLSAgIC8qIFRlc3QgZm9yIHN0cmFuZ2UgYmVoYXZpb3VyIHdoaWNoIGxlYWRzIHRvIGNyYXNoZXMgKi8KLSAgIGlmICgoYmNvdW50ID0gbnNfc3RhdF9zZmJxY19nZXQocmVhZGwoY2FyZC0+bWVtYmFzZSArIFNUQVQpKSkgPCBjYXJkLT5zYm5yLm1pbikKLSAgIHsKLSAgICAgIHByaW50aygibmljc3RhciVkOiBTdHJhbmdlLi4uIEp1c3QgYWxsb2NhdGVkICVkIHNtYWxsIGJ1ZmZlcnMgYW5kIHNmYnFjID0gJWQuXG4iLAotICAgICAgICAgICAgIGksIGosIGJjb3VudCk7Ci0gICAgICBlcnJvciA9IDE1OwotICAgICAgbnNfaW5pdF9jYXJkX2Vycm9yKGNhcmQsIGVycm9yKTsKLSAgICAgIHJldHVybiBlcnJvcjsKLSAgIH0KLSAgICAgIAorCWNhcmQtPmVmYmllID0gMTsJLyogVG8gcHJldmVudCBwdXNoX3J4YnVmcyBmcm9tIGVuYWJsaW5nIHRoZSBpbnRlcnJ1cHQgKi8KIAotICAgLyogQWxsb2NhdGUgaW92ZWMgYnVmZmVycyAqLwotICAgc2tiX3F1ZXVlX2hlYWRfaW5pdCgmY2FyZC0+aW92cG9vbC5xdWV1ZSk7Ci0gICBjYXJkLT5pb3Zwb29sLmNvdW50ID0gMDsKLSAgIGZvciAoaiA9IDA7IGogPCBOVU1fSU9WQjsgaisrKQotICAgewotICAgICAgc3RydWN0IHNrX2J1ZmYgKmlvdmI7Ci0gICAgICBpb3ZiID0gYWxsb2Nfc2tiKE5TX0lPVkJVRlNJWkUsIEdGUF9LRVJORUwpOwotICAgICAgaWYgKGlvdmIgPT0gTlVMTCkKLSAgICAgIHsKLSAgICAgICAgIHByaW50aygibmljc3RhciVkOiBjYW4ndCBhbGxvY2F0ZSAlZHRoIG9mICVkIGlvdmVjIGJ1ZmZlcnMuXG4iLAotICAgICAgICAgICAgICAgIGksIGosIE5VTV9JT1ZCKTsKLSAgICAgICAgIGVycm9yID0gMTY7Ci0gICAgICAgICBuc19pbml0X2NhcmRfZXJyb3IoY2FyZCwgZXJyb3IpOwotCSByZXR1cm4gZXJyb3I7Ci0gICAgICB9Ci0gICAgICBOU19TS0JfQ0IoaW92YiktPmJ1Zl90eXBlID0gQlVGX05PTkU7Ci0gICAgICBza2JfcXVldWVfdGFpbCgmY2FyZC0+aW92cG9vbC5xdWV1ZSwgaW92Yik7Ci0gICAgICBjYXJkLT5pb3Zwb29sLmNvdW50Kys7Ci0gICB9CisJaWRyX2luaXQoJmNhcmQtPmlkcik7CiAKLSAgIC8qIENvbmZpZ3VyZSBOSUNTdEFSICovCi0gICBpZiAoY2FyZC0+cmN0X3NpemUgPT0gNDA5NikKLSAgICAgIG5zX2NmZ19yY3RzaXplID0gTlNfQ0ZHX1JDVFNJWkVfNDA5Nl9FTlRSSUVTOwotICAgZWxzZSAvKiAoY2FyZC0+cmN0X3NpemUgPT0gMTYzODQpICovCi0gICAgICBuc19jZmdfcmN0c2l6ZSA9IE5TX0NGR19SQ1RTSVpFXzE2Mzg0X0VOVFJJRVM7CisJLyogUHJlLWFsbG9jYXRlIHNvbWUgaHVnZSBidWZmZXJzICovCisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmY2FyZC0+aGJwb29sLnF1ZXVlKTsKKwljYXJkLT5oYnBvb2wuY291bnQgPSAwOworCWZvciAoaiA9IDA7IGogPCBOVU1fSEI7IGorKykgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqaGI7CisJCWhiID0gX19kZXZfYWxsb2Nfc2tiKE5TX0hCVUZTSVpFLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGhiID09IE5VTEwpIHsKKwkJCXByaW50aworCQkJICAgICgibmljc3RhciVkOiBjYW4ndCBhbGxvY2F0ZSAlZHRoIG9mICVkIGh1Z2UgYnVmZmVycy5cbiIsCisJCQkgICAgIGksIGosIE5VTV9IQik7CisJCQllcnJvciA9IDEzOworCQkJbnNfaW5pdF9jYXJkX2Vycm9yKGNhcmQsIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCQlOU19QUlZfQlVGVFlQRShoYikgPSBCVUZfTk9ORTsKKwkJc2tiX3F1ZXVlX3RhaWwoJmNhcmQtPmhicG9vbC5xdWV1ZSwgaGIpOworCQljYXJkLT5oYnBvb2wuY291bnQrKzsKKwl9CiAKLSAgIGNhcmQtPmVmYmllID0gMTsKKwkvKiBBbGxvY2F0ZSBsYXJnZSBidWZmZXJzICovCisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmY2FyZC0+bGJwb29sLnF1ZXVlKTsKKwljYXJkLT5sYnBvb2wuY291bnQgPSAwOwkvKiBOb3QgdXNlZCAqLworCWZvciAoaiA9IDA7IGogPCBOVU1fTEI7IGorKykgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqbGI7CisJCWxiID0gX19kZXZfYWxsb2Nfc2tiKE5TX0xHU0tCU0laRSwgR0ZQX0tFUk5FTCk7CisJCWlmIChsYiA9PSBOVUxMKSB7CisJCQlwcmludGsKKwkJCSAgICAoIm5pY3N0YXIlZDogY2FuJ3QgYWxsb2NhdGUgJWR0aCBvZiAlZCBsYXJnZSBidWZmZXJzLlxuIiwKKwkJCSAgICAgaSwgaiwgTlVNX0xCKTsKKwkJCWVycm9yID0gMTQ7CisJCQluc19pbml0X2NhcmRfZXJyb3IoY2FyZCwgZXJyb3IpOworCQkJcmV0dXJuIGVycm9yOworCQl9CisJCU5TX1BSVl9CVUZUWVBFKGxiKSA9IEJVRl9MRzsKKwkJc2tiX3F1ZXVlX3RhaWwoJmNhcmQtPmxicG9vbC5xdWV1ZSwgbGIpOworCQlza2JfcmVzZXJ2ZShsYiwgTlNfU01CVUZTSVpFKTsKKwkJcHVzaF9yeGJ1ZnMoY2FyZCwgbGIpOworCQkvKiBEdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHB1c2hfcnhidWZzKCkgdGhpcyBpcyAxLCBub3QgMCAqLworCQlpZiAoaiA9PSAxKSB7CisJCQljYXJkLT5yY2J1ZiA9IGxiOworCQkJY2FyZC0+cmF3Y2VsbCA9IChzdHJ1Y3QgbnNfcmNxZSAqKSBsYi0+ZGF0YTsKKwkJCWNhcmQtPnJhd2NoID0gTlNfUFJWX0RNQShsYik7CisJCX0KKwl9CisJLyogVGVzdCBmb3Igc3RyYW5nZSBiZWhhdmlvdXIgd2hpY2ggbGVhZHMgdG8gY3Jhc2hlcyAqLworCWlmICgoYmNvdW50ID0KKwkgICAgIG5zX3N0YXRfbGZicWNfZ2V0KHJlYWRsKGNhcmQtPm1lbWJhc2UgKyBTVEFUKSkpIDwgY2FyZC0+bGJuci5taW4pIHsKKwkJcHJpbnRrCisJCSAgICAoIm5pY3N0YXIlZDogU3RyYW5nZS4uLiBKdXN0IGFsbG9jYXRlZCAlZCBsYXJnZSBidWZmZXJzIGFuZCBsZmJxYyA9ICVkLlxuIiwKKwkJICAgICBpLCBqLCBiY291bnQpOworCQllcnJvciA9IDE0OworCQluc19pbml0X2NhcmRfZXJyb3IoY2FyZCwgZXJyb3IpOworCQlyZXR1cm4gZXJyb3I7CisJfQogCi0gICBjYXJkLT5pbnRjbnQgPSAwOwotICAgaWYgKHJlcXVlc3RfaXJxKHBjaWRldi0+aXJxLCAmbnNfaXJxX2hhbmRsZXIsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwgIm5pY3N0YXIiLCBjYXJkKSAhPSAwKQotICAgewotICAgICAgcHJpbnRrKCJuaWNzdGFyJWQ6IGNhbid0IGFsbG9jYXRlIElSUSAlZC5cbiIsIGksIHBjaWRldi0+aXJxKTsKLSAgICAgIGVycm9yID0gOTsKLSAgICAgIG5zX2luaXRfY2FyZF9lcnJvcihjYXJkLCBlcnJvcik7Ci0gICAgICByZXR1cm4gZXJyb3I7Ci0gICB9CisJLyogQWxsb2NhdGUgc21hbGwgYnVmZmVycyAqLworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmNhcmQtPnNicG9vbC5xdWV1ZSk7CisJY2FyZC0+c2Jwb29sLmNvdW50ID0gMDsJLyogTm90IHVzZWQgKi8KKwlmb3IgKGogPSAwOyBqIDwgTlVNX1NCOyBqKyspIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNiOworCQlzYiA9IF9fZGV2X2FsbG9jX3NrYihOU19TTVNLQlNJWkUsIEdGUF9LRVJORUwpOworCQlpZiAoc2IgPT0gTlVMTCkgeworCQkJcHJpbnRrCisJCQkgICAgKCJuaWNzdGFyJWQ6IGNhbid0IGFsbG9jYXRlICVkdGggb2YgJWQgc21hbGwgYnVmZmVycy5cbiIsCisJCQkgICAgIGksIGosIE5VTV9TQik7CisJCQllcnJvciA9IDE1OworCQkJbnNfaW5pdF9jYXJkX2Vycm9yKGNhcmQsIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCQlOU19QUlZfQlVGVFlQRShzYikgPSBCVUZfU007CisJCXNrYl9xdWV1ZV90YWlsKCZjYXJkLT5zYnBvb2wucXVldWUsIHNiKTsKKwkJc2tiX3Jlc2VydmUoc2IsIE5TX0FBTDBfSEVBREVSKTsKKwkJcHVzaF9yeGJ1ZnMoY2FyZCwgc2IpOworCX0KKwkvKiBUZXN0IGZvciBzdHJhbmdlIGJlaGF2aW91ciB3aGljaCBsZWFkcyB0byBjcmFzaGVzICovCisJaWYgKChiY291bnQgPQorCSAgICAgbnNfc3RhdF9zZmJxY19nZXQocmVhZGwoY2FyZC0+bWVtYmFzZSArIFNUQVQpKSkgPCBjYXJkLT5zYm5yLm1pbikgeworCQlwcmludGsKKwkJICAgICgibmljc3RhciVkOiBTdHJhbmdlLi4uIEp1c3QgYWxsb2NhdGVkICVkIHNtYWxsIGJ1ZmZlcnMgYW5kIHNmYnFjID0gJWQuXG4iLAorCQkgICAgIGksIGosIGJjb3VudCk7CisJCWVycm9yID0gMTU7CisJCW5zX2luaXRfY2FyZF9lcnJvcihjYXJkLCBlcnJvcik7CisJCXJldHVybiBlcnJvcjsKKwl9CiAKLSAgIC8qIFJlZ2lzdGVyIGRldmljZSAqLwotICAgY2FyZC0+YXRtZGV2ID0gYXRtX2Rldl9yZWdpc3Rlcigibmljc3RhciIsICZhdG1fb3BzLCAtMSwgTlVMTCk7Ci0gICBpZiAoY2FyZC0+YXRtZGV2ID09IE5VTEwpCi0gICB7Ci0gICAgICBwcmludGsoIm5pY3N0YXIlZDogY2FuJ3QgcmVnaXN0ZXIgZGV2aWNlLlxuIiwgaSk7Ci0gICAgICBlcnJvciA9IDE3OwotICAgICAgbnNfaW5pdF9jYXJkX2Vycm9yKGNhcmQsIGVycm9yKTsKLSAgICAgIHJldHVybiBlcnJvcjsKLSAgIH0KLSAgICAgIAotICAgaWYgKG5zX3BhcnNlX21hYyhtYWNbaV0sIGNhcmQtPmF0bWRldi0+ZXNpKSkgewotICAgICAgbmljc3Rhcl9yZWFkX2Vwcm9tKGNhcmQtPm1lbWJhc2UsIE5JQ1NUQVJfRVBST01fTUFDX0FERFJfT0ZGU0VULAotICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPmF0bWRldi0+ZXNpLCA2KTsKLSAgICAgIGlmIChtZW1jbXAoY2FyZC0+YXRtZGV2LT5lc2ksICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLCA2KSA9PSAwKSB7Ci0gICAgICAgICBuaWNzdGFyX3JlYWRfZXByb20oY2FyZC0+bWVtYmFzZSwgTklDU1RBUl9FUFJPTV9NQUNfQUREUl9PRkZTRVRfQUxULAotICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPmF0bWRldi0+ZXNpLCA2KTsKLSAgICAgIH0KLSAgIH0KKwkvKiBBbGxvY2F0ZSBpb3ZlYyBidWZmZXJzICovCisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmY2FyZC0+aW92cG9vbC5xdWV1ZSk7CisJY2FyZC0+aW92cG9vbC5jb3VudCA9IDA7CisJZm9yIChqID0gMDsgaiA8IE5VTV9JT1ZCOyBqKyspIHsKKwkJc3RydWN0IHNrX2J1ZmYgKmlvdmI7CisJCWlvdmIgPSBhbGxvY19za2IoTlNfSU9WQlVGU0laRSwgR0ZQX0tFUk5FTCk7CisJCWlmIChpb3ZiID09IE5VTEwpIHsKKwkJCXByaW50aworCQkJICAgICgibmljc3RhciVkOiBjYW4ndCBhbGxvY2F0ZSAlZHRoIG9mICVkIGlvdmVjIGJ1ZmZlcnMuXG4iLAorCQkJICAgICBpLCBqLCBOVU1fSU9WQik7CisJCQllcnJvciA9IDE2OworCQkJbnNfaW5pdF9jYXJkX2Vycm9yKGNhcmQsIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCQlOU19QUlZfQlVGVFlQRShpb3ZiKSA9IEJVRl9OT05FOworCQlza2JfcXVldWVfdGFpbCgmY2FyZC0+aW92cG9vbC5xdWV1ZSwgaW92Yik7CisJCWNhcmQtPmlvdnBvb2wuY291bnQrKzsKKwl9CiAKLSAgIHByaW50aygibmljc3RhciVkOiBNQUMgYWRkcmVzcyAlcE1cbiIsIGksIGNhcmQtPmF0bWRldi0+ZXNpKTsKKwkvKiBDb25maWd1cmUgTklDU3RBUiAqLworCWlmIChjYXJkLT5yY3Rfc2l6ZSA9PSA0MDk2KQorCQluc19jZmdfcmN0c2l6ZSA9IE5TX0NGR19SQ1RTSVpFXzQwOTZfRU5UUklFUzsKKwllbHNlCQkJLyogKGNhcmQtPnJjdF9zaXplID09IDE2Mzg0KSAqLworCQluc19jZmdfcmN0c2l6ZSA9IE5TX0NGR19SQ1RTSVpFXzE2Mzg0X0VOVFJJRVM7CiAKLSAgIGNhcmQtPmF0bWRldi0+ZGV2X2RhdGEgPSBjYXJkOwotICAgY2FyZC0+YXRtZGV2LT5jaV9yYW5nZS52cGlfYml0cyA9IGNhcmQtPnZwaWJpdHM7Ci0gICBjYXJkLT5hdG1kZXYtPmNpX3JhbmdlLnZjaV9iaXRzID0gY2FyZC0+dmNpYml0czsKLSAgIGNhcmQtPmF0bWRldi0+bGlua19yYXRlID0gY2FyZC0+bWF4X3BjcjsKLSAgIGNhcmQtPmF0bWRldi0+cGh5ID0gTlVMTDsKKwljYXJkLT5lZmJpZSA9IDE7CisKKwljYXJkLT5pbnRjbnQgPSAwOworCWlmIChyZXF1ZXN0X2lycQorCSAgICAocGNpZGV2LT5pcnEsICZuc19pcnFfaGFuZGxlciwgSVJRRl9TSEFSRUQsICJuaWNzdGFyIiwgY2FyZCkgIT0gMCkgeworCQlwcmludGsoIm5pY3N0YXIlZDogY2FuJ3QgYWxsb2NhdGUgSVJRICVkLlxuIiwgaSwgcGNpZGV2LT5pcnEpOworCQllcnJvciA9IDk7CisJCW5zX2luaXRfY2FyZF9lcnJvcihjYXJkLCBlcnJvcik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwkvKiBSZWdpc3RlciBkZXZpY2UgKi8KKwljYXJkLT5hdG1kZXYgPSBhdG1fZGV2X3JlZ2lzdGVyKCJuaWNzdGFyIiwgJmF0bV9vcHMsIC0xLCBOVUxMKTsKKwlpZiAoY2FyZC0+YXRtZGV2ID09IE5VTEwpIHsKKwkJcHJpbnRrKCJuaWNzdGFyJWQ6IGNhbid0IHJlZ2lzdGVyIGRldmljZS5cbiIsIGkpOworCQllcnJvciA9IDE3OworCQluc19pbml0X2NhcmRfZXJyb3IoY2FyZCwgZXJyb3IpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJaWYgKG5zX3BhcnNlX21hYyhtYWNbaV0sIGNhcmQtPmF0bWRldi0+ZXNpKSkgeworCQluaWNzdGFyX3JlYWRfZXByb20oY2FyZC0+bWVtYmFzZSwgTklDU1RBUl9FUFJPTV9NQUNfQUREUl9PRkZTRVQsCisJCQkJICAgY2FyZC0+YXRtZGV2LT5lc2ksIDYpOworCQlpZiAobWVtY21wKGNhcmQtPmF0bWRldi0+ZXNpLCAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwgNikgPT0KKwkJICAgIDApIHsKKwkJCW5pY3N0YXJfcmVhZF9lcHJvbShjYXJkLT5tZW1iYXNlLAorCQkJCQkgICBOSUNTVEFSX0VQUk9NX01BQ19BRERSX09GRlNFVF9BTFQsCisJCQkJCSAgIGNhcmQtPmF0bWRldi0+ZXNpLCA2KTsKKwkJfQorCX0KKworCXByaW50aygibmljc3RhciVkOiBNQUMgYWRkcmVzcyAlcE1cbiIsIGksIGNhcmQtPmF0bWRldi0+ZXNpKTsKKworCWNhcmQtPmF0bWRldi0+ZGV2X2RhdGEgPSBjYXJkOworCWNhcmQtPmF0bWRldi0+Y2lfcmFuZ2UudnBpX2JpdHMgPSBjYXJkLT52cGliaXRzOworCWNhcmQtPmF0bWRldi0+Y2lfcmFuZ2UudmNpX2JpdHMgPSBjYXJkLT52Y2liaXRzOworCWNhcmQtPmF0bWRldi0+bGlua19yYXRlID0gY2FyZC0+bWF4X3BjcjsKKwljYXJkLT5hdG1kZXYtPnBoeSA9IE5VTEw7CiAKICNpZmRlZiBDT05GSUdfQVRNX05JQ1NUQVJfVVNFX1NVTkkKLSAgIGlmIChjYXJkLT5tYXhfcGNyID09IEFUTV9PQzNfUENSKQotICAgICAgc3VuaV9pbml0KGNhcmQtPmF0bWRldik7CisJaWYgKGNhcmQtPm1heF9wY3IgPT0gQVRNX09DM19QQ1IpCisJCXN1bmlfaW5pdChjYXJkLT5hdG1kZXYpOwogI2VuZGlmIC8qIENPTkZJR19BVE1fTklDU1RBUl9VU0VfU1VOSSAqLwogCiAjaWZkZWYgQ09ORklHX0FUTV9OSUNTVEFSX1VTRV9JRFQ3NzEwNQotICAgaWYgKGNhcmQtPm1heF9wY3IgPT0gQVRNXzI1X1BDUikKLSAgICAgIGlkdDc3MTA1X2luaXQoY2FyZC0+YXRtZGV2KTsKKwlpZiAoY2FyZC0+bWF4X3BjciA9PSBBVE1fMjVfUENSKQorCQlpZHQ3NzEwNV9pbml0KGNhcmQtPmF0bWRldik7CiAjZW5kaWYgLyogQ09ORklHX0FUTV9OSUNTVEFSX1VTRV9JRFQ3NzEwNSAqLwogCi0gICBpZiAoY2FyZC0+YXRtZGV2LT5waHkgJiYgY2FyZC0+YXRtZGV2LT5waHktPnN0YXJ0KQotICAgICAgY2FyZC0+YXRtZGV2LT5waHktPnN0YXJ0KGNhcmQtPmF0bWRldik7CisJaWYgKGNhcmQtPmF0bWRldi0+cGh5ICYmIGNhcmQtPmF0bWRldi0+cGh5LT5zdGFydCkKKwkJY2FyZC0+YXRtZGV2LT5waHktPnN0YXJ0KGNhcmQtPmF0bWRldik7CiAKLSAgIHdyaXRlbChOU19DRkdfUlhQQVRIIHwKLSAgICAgICAgICBOU19DRkdfU01CVUZTSVpFIHwKLSAgICAgICAgICBOU19DRkdfTEdCVUZTSVpFIHwKLSAgICAgICAgICBOU19DRkdfRUZCSUUgfAotICAgICAgICAgIE5TX0NGR19SU1FTSVpFIHwKLSAgICAgICAgICBOU19DRkdfVlBJQklUUyB8Ci0gICAgICAgICAgbnNfY2ZnX3JjdHNpemUgfAotICAgICAgICAgIE5TX0NGR19SWElOVF9OT0RFTEFZIHwKLSAgICAgICAgICBOU19DRkdfUkFXSUUgfAkJLyogT25seSBlbmFibGVkIGlmIFJDUV9TVVBQT1JUICovCi0gICAgICAgICAgTlNfQ0ZHX1JTUUFGSUUgfAotICAgICAgICAgIE5TX0NGR19UWEVOIHwKLSAgICAgICAgICBOU19DRkdfVFhJRSB8Ci0gICAgICAgICAgTlNfQ0ZHX1RTUUZJRV9PUFQgfAkJLyogT25seSBlbmFibGVkIGlmIEVOQUJMRV9UU1FGSUUgKi8gCi0gICAgICAgICAgTlNfQ0ZHX1BIWUlFLAotICAgICAgICAgIGNhcmQtPm1lbWJhc2UgKyBDRkcpOworCXdyaXRlbChOU19DRkdfUlhQQVRIIHwgTlNfQ0ZHX1NNQlVGU0laRSB8IE5TX0NGR19MR0JVRlNJWkUgfCBOU19DRkdfRUZCSUUgfCBOU19DRkdfUlNRU0laRSB8IE5TX0NGR19WUElCSVRTIHwgbnNfY2ZnX3JjdHNpemUgfCBOU19DRkdfUlhJTlRfTk9ERUxBWSB8IE5TX0NGR19SQVdJRSB8CS8qIE9ubHkgZW5hYmxlZCBpZiBSQ1FfU1VQUE9SVCAqLworCSAgICAgICBOU19DRkdfUlNRQUZJRSB8IE5TX0NGR19UWEVOIHwgTlNfQ0ZHX1RYSUUgfCBOU19DRkdfVFNRRklFX09QVCB8CS8qIE9ubHkgZW5hYmxlZCBpZiBFTkFCTEVfVFNRRklFICovCisJICAgICAgIE5TX0NGR19QSFlJRSwgY2FyZC0+bWVtYmFzZSArIENGRyk7CiAKLSAgIG51bV9jYXJkcysrOworCW51bV9jYXJkcysrOwogCi0gICByZXR1cm4gZXJyb3I7CisJcmV0dXJuIGVycm9yOwogfQogCi0KLQotc3RhdGljIHZvaWQgX19kZXZpbml0IG5zX2luaXRfY2FyZF9lcnJvcihuc19kZXYgKmNhcmQsIGludCBlcnJvcikKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBuc19pbml0X2NhcmRfZXJyb3IobnNfZGV2ICogY2FyZCwgaW50IGVycm9yKQogewotICAgaWYgKGVycm9yID49IDE3KQotICAgewotICAgICAgd3JpdGVsKDB4MDAwMDAwMDAsIGNhcmQtPm1lbWJhc2UgKyBDRkcpOwotICAgfQotICAgaWYgKGVycm9yID49IDE2KQotICAgewotICAgICAgc3RydWN0IHNrX2J1ZmYgKmlvdmI7Ci0gICAgICB3aGlsZSAoKGlvdmIgPSBza2JfZGVxdWV1ZSgmY2FyZC0+aW92cG9vbC5xdWV1ZSkpICE9IE5VTEwpCi0gICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShpb3ZiKTsKLSAgIH0KLSAgIGlmIChlcnJvciA+PSAxNSkKLSAgIHsKLSAgICAgIHN0cnVjdCBza19idWZmICpzYjsKLSAgICAgIHdoaWxlICgoc2IgPSBza2JfZGVxdWV1ZSgmY2FyZC0+c2Jwb29sLnF1ZXVlKSkgIT0gTlVMTCkKLSAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KHNiKTsKLSAgICAgIGZyZWVfc2NxKGNhcmQtPnNjcTAsIE5VTEwpOwotICAgfQotICAgaWYgKGVycm9yID49IDE0KQotICAgewotICAgICAgc3RydWN0IHNrX2J1ZmYgKmxiOwotICAgICAgd2hpbGUgKChsYiA9IHNrYl9kZXF1ZXVlKCZjYXJkLT5sYnBvb2wucXVldWUpKSAhPSBOVUxMKQotICAgICAgICAgZGV2X2tmcmVlX3NrYl9hbnkobGIpOwotICAgfQotICAgaWYgKGVycm9yID49IDEzKQotICAgewotICAgICAgc3RydWN0IHNrX2J1ZmYgKmhiOwotICAgICAgd2hpbGUgKChoYiA9IHNrYl9kZXF1ZXVlKCZjYXJkLT5oYnBvb2wucXVldWUpKSAhPSBOVUxMKQotICAgICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoaGIpOwotICAgfQotICAgaWYgKGVycm9yID49IDEyKQotICAgewotICAgICAga2ZyZWUoY2FyZC0+cnNxLm9yZyk7Ci0gICB9Ci0gICBpZiAoZXJyb3IgPj0gMTEpCi0gICB7Ci0gICAgICBrZnJlZShjYXJkLT50c3Eub3JnKTsKLSAgIH0KLSAgIGlmIChlcnJvciA+PSAxMCkKLSAgIHsKLSAgICAgIGZyZWVfaXJxKGNhcmQtPnBjaWRldi0+aXJxLCBjYXJkKTsKLSAgIH0KLSAgIGlmIChlcnJvciA+PSA0KQotICAgewotICAgICAgaW91bm1hcChjYXJkLT5tZW1iYXNlKTsKLSAgIH0KLSAgIGlmIChlcnJvciA+PSAzKQotICAgewotICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKGNhcmQtPnBjaWRldik7Ci0gICAgICBrZnJlZShjYXJkKTsKLSAgIH0KKwlpZiAoZXJyb3IgPj0gMTcpIHsKKwkJd3JpdGVsKDB4MDAwMDAwMDAsIGNhcmQtPm1lbWJhc2UgKyBDRkcpOworCX0KKwlpZiAoZXJyb3IgPj0gMTYpIHsKKwkJc3RydWN0IHNrX2J1ZmYgKmlvdmI7CisJCXdoaWxlICgoaW92YiA9IHNrYl9kZXF1ZXVlKCZjYXJkLT5pb3Zwb29sLnF1ZXVlKSkgIT0gTlVMTCkKKwkJCWRldl9rZnJlZV9za2JfYW55KGlvdmIpOworCX0KKwlpZiAoZXJyb3IgPj0gMTUpIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNiOworCQl3aGlsZSAoKHNiID0gc2tiX2RlcXVldWUoJmNhcmQtPnNicG9vbC5xdWV1ZSkpICE9IE5VTEwpCisJCQlkZXZfa2ZyZWVfc2tiX2FueShzYik7CisJCWZyZWVfc2NxKGNhcmQsIGNhcmQtPnNjcTAsIE5VTEwpOworCX0KKwlpZiAoZXJyb3IgPj0gMTQpIHsKKwkJc3RydWN0IHNrX2J1ZmYgKmxiOworCQl3aGlsZSAoKGxiID0gc2tiX2RlcXVldWUoJmNhcmQtPmxicG9vbC5xdWV1ZSkpICE9IE5VTEwpCisJCQlkZXZfa2ZyZWVfc2tiX2FueShsYik7CisJfQorCWlmIChlcnJvciA+PSAxMykgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqaGI7CisJCXdoaWxlICgoaGIgPSBza2JfZGVxdWV1ZSgmY2FyZC0+aGJwb29sLnF1ZXVlKSkgIT0gTlVMTCkKKwkJCWRldl9rZnJlZV9za2JfYW55KGhiKTsKKwl9CisJaWYgKGVycm9yID49IDEyKSB7CisJCWtmcmVlKGNhcmQtPnJzcS5vcmcpOworCX0KKwlpZiAoZXJyb3IgPj0gMTEpIHsKKwkJa2ZyZWUoY2FyZC0+dHNxLm9yZyk7CisJfQorCWlmIChlcnJvciA+PSAxMCkgeworCQlmcmVlX2lycShjYXJkLT5wY2lkZXYtPmlycSwgY2FyZCk7CisJfQorCWlmIChlcnJvciA+PSA0KSB7CisJCWlvdW5tYXAoY2FyZC0+bWVtYmFzZSk7CisJfQorCWlmIChlcnJvciA+PSAzKSB7CisJCXBjaV9kaXNhYmxlX2RldmljZShjYXJkLT5wY2lkZXYpOworCQlrZnJlZShjYXJkKTsKKwl9CiB9CiAKLQotCi1zdGF0aWMgc2NxX2luZm8gKmdldF9zY3EoaW50IHNpemUsIHUzMiBzY2QpCitzdGF0aWMgc2NxX2luZm8gKmdldF9zY3EobnNfZGV2ICpjYXJkLCBpbnQgc2l6ZSwgdTMyIHNjZCkKIHsKLSAgIHNjcV9pbmZvICpzY3E7Ci0gICBpbnQgaTsKKwlzY3FfaW5mbyAqc2NxOworCWludCBpOwogCi0gICBpZiAoc2l6ZSAhPSBWQlJfU0NRU0laRSAmJiBzaXplICE9IENCUl9TQ1FTSVpFKQotICAgICAgcmV0dXJuIE5VTEw7CisJaWYgKHNpemUgIT0gVkJSX1NDUVNJWkUgJiYgc2l6ZSAhPSBDQlJfU0NRU0laRSkKKwkJcmV0dXJuIE5VTEw7CiAKLSAgIHNjcSA9IGttYWxsb2Moc2l6ZW9mKHNjcV9pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0gICBpZiAoc2NxID09IE5VTEwpCi0gICAgICByZXR1cm4gTlVMTDsKLSAgIHNjcS0+b3JnID0ga21hbGxvYygyICogc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0gICBpZiAoc2NxLT5vcmcgPT0gTlVMTCkKLSAgIHsKLSAgICAgIGtmcmVlKHNjcSk7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgIH0KLSAgIHNjcS0+c2tiID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNrX2J1ZmYgKikgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemUgLyBOU19TQ1FFX1NJWkUpLCBHRlBfS0VSTkVMKTsKLSAgIGlmIChzY3EtPnNrYiA9PSBOVUxMKQotICAgewotICAgICAga2ZyZWUoc2NxLT5vcmcpOwotICAgICAga2ZyZWUoc2NxKTsKLSAgICAgIHJldHVybiBOVUxMOwotICAgfQotICAgc2NxLT5udW1fZW50cmllcyA9IHNpemUgLyBOU19TQ1FFX1NJWkU7Ci0gICBzY3EtPmJhc2UgPSAobnNfc2NxZSAqKSBBTElHTl9BRERSRVNTKHNjcS0+b3JnLCBzaXplKTsKLSAgIHNjcS0+bmV4dCA9IHNjcS0+YmFzZTsKLSAgIHNjcS0+bGFzdCA9IHNjcS0+YmFzZSArIChzY3EtPm51bV9lbnRyaWVzIC0gMSk7Ci0gICBzY3EtPnRhaWwgPSBzY3EtPmxhc3Q7Ci0gICBzY3EtPnNjZCA9IHNjZDsKLSAgIHNjcS0+bnVtX2VudHJpZXMgPSBzaXplIC8gTlNfU0NRRV9TSVpFOwotICAgc2NxLT50YmRfY291bnQgPSAwOwotICAgaW5pdF93YWl0cXVldWVfaGVhZCgmc2NxLT5zY3FmdWxsX3dhaXRxKTsKLSAgIHNjcS0+ZnVsbCA9IDA7Ci0gICBzcGluX2xvY2tfaW5pdCgmc2NxLT5sb2NrKTsKKwlzY3EgPSBrbWFsbG9jKHNpemVvZihzY3FfaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghc2NxKQorCQlyZXR1cm4gTlVMTDsKKyAgICAgICAgc2NxLT5vcmcgPSBwY2lfYWxsb2NfY29uc2lzdGVudChjYXJkLT5wY2lkZXYsIDIgKiBzaXplLCAmc2NxLT5kbWEpOworCWlmICghc2NxLT5vcmcpIHsKKwkJa2ZyZWUoc2NxKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXNjcS0+c2tiID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNrX2J1ZmYgKikgKgorCQkJICAgKHNpemUgLyBOU19TQ1FFX1NJWkUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNjcS0+c2tiKSB7CisJCWtmcmVlKHNjcS0+b3JnKTsKKwkJa2ZyZWUoc2NxKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXNjcS0+bnVtX2VudHJpZXMgPSBzaXplIC8gTlNfU0NRRV9TSVpFOworCXNjcS0+YmFzZSA9IFBUUl9BTElHTihzY3EtPm9yZywgc2l6ZSk7CisJc2NxLT5uZXh0ID0gc2NxLT5iYXNlOworCXNjcS0+bGFzdCA9IHNjcS0+YmFzZSArIChzY3EtPm51bV9lbnRyaWVzIC0gMSk7CisJc2NxLT50YWlsID0gc2NxLT5sYXN0OworCXNjcS0+c2NkID0gc2NkOworCXNjcS0+bnVtX2VudHJpZXMgPSBzaXplIC8gTlNfU0NRRV9TSVpFOworCXNjcS0+dGJkX2NvdW50ID0gMDsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzY3EtPnNjcWZ1bGxfd2FpdHEpOworCXNjcS0+ZnVsbCA9IDA7CisJc3Bpbl9sb2NrX2luaXQoJnNjcS0+bG9jayk7CiAKLSAgIGZvciAoaSA9IDA7IGkgPCBzY3EtPm51bV9lbnRyaWVzOyBpKyspCi0gICAgICBzY3EtPnNrYltpXSA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IHNjcS0+bnVtX2VudHJpZXM7IGkrKykKKwkJc2NxLT5za2JbaV0gPSBOVUxMOwogCi0gICByZXR1cm4gc2NxOworCXJldHVybiBzY3E7CiB9CiAKLQotCiAvKiBGb3IgdmFyaWFibGUgcmF0ZSBTQ1EgdmNjIG11c3QgYmUgTlVMTCAqLwotc3RhdGljIHZvaWQgZnJlZV9zY3Eoc2NxX2luZm8gKnNjcSwgc3RydWN0IGF0bV92Y2MgKnZjYykKK3N0YXRpYyB2b2lkIGZyZWVfc2NxKG5zX2RldiAqY2FyZCwgc2NxX2luZm8gKnNjcSwgc3RydWN0IGF0bV92Y2MgKnZjYykKIHsKLSAgIGludCBpOworCWludCBpOwogCi0gICBpZiAoc2NxLT5udW1fZW50cmllcyA9PSBWQlJfU0NRX05VTV9FTlRSSUVTKQotICAgICAgZm9yIChpID0gMDsgaSA8IHNjcS0+bnVtX2VudHJpZXM7IGkrKykKLSAgICAgIHsKLSAgICAgICAgIGlmIChzY3EtPnNrYltpXSAhPSBOVUxMKQotCSB7Ci0gICAgICAgICAgICB2Y2MgPSBBVE1fU0tCKHNjcS0+c2tiW2ldKS0+dmNjOwotICAgICAgICAgICAgaWYgKHZjYy0+cG9wICE9IE5VTEwpCi0JICAgICAgIHZjYy0+cG9wKHZjYywgc2NxLT5za2JbaV0pOwotCSAgICBlbHNlCi0gICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShzY3EtPnNrYltpXSk7Ci0gICAgICAgICB9Ci0gICAgICB9Ci0gICBlbHNlIC8qIHZjYyBtdXN0IGJlICE9IE5VTEwgKi8KLSAgIHsKLSAgICAgIGlmICh2Y2MgPT0gTlVMTCkKLSAgICAgIHsKLSAgICAgICAgIHByaW50aygibmljc3RhcjogZnJlZV9zY3EoKSBjYWxsZWQgd2l0aCB2Y2MgPT0gTlVMTCBmb3IgZml4ZWQgcmF0ZSBzY3EuIik7Ci0gICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2NxLT5udW1fZW50cmllczsgaSsrKQotICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoc2NxLT5za2JbaV0pOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNjcS0+bnVtX2VudHJpZXM7IGkrKykKLSAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzY3EtPnNrYltpXSAhPSBOVUxMKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgaWYgKHZjYy0+cG9wICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgICB2Y2MtPnBvcCh2Y2MsIHNjcS0+c2tiW2ldKTsKLSAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KHNjcS0+c2tiW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgIH0KLSAgIH0KLSAgIGtmcmVlKHNjcS0+c2tiKTsKLSAgIGtmcmVlKHNjcS0+b3JnKTsKLSAgIGtmcmVlKHNjcSk7CisJaWYgKHNjcS0+bnVtX2VudHJpZXMgPT0gVkJSX1NDUV9OVU1fRU5UUklFUykKKwkJZm9yIChpID0gMDsgaSA8IHNjcS0+bnVtX2VudHJpZXM7IGkrKykgeworCQkJaWYgKHNjcS0+c2tiW2ldICE9IE5VTEwpIHsKKwkJCQl2Y2MgPSBBVE1fU0tCKHNjcS0+c2tiW2ldKS0+dmNjOworCQkJCWlmICh2Y2MtPnBvcCAhPSBOVUxMKQorCQkJCQl2Y2MtPnBvcCh2Y2MsIHNjcS0+c2tiW2ldKTsKKwkJCQllbHNlCisJCQkJCWRldl9rZnJlZV9za2JfYW55KHNjcS0+c2tiW2ldKTsKKwkJCX0KKwl9IGVsc2UgewkJLyogdmNjIG11c3QgYmUgIT0gTlVMTCAqLworCisJCWlmICh2Y2MgPT0gTlVMTCkgeworCQkJcHJpbnRrCisJCQkgICAgKCJuaWNzdGFyOiBmcmVlX3NjcSgpIGNhbGxlZCB3aXRoIHZjYyA9PSBOVUxMIGZvciBmaXhlZCByYXRlIHNjcS4iKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBzY3EtPm51bV9lbnRyaWVzOyBpKyspCisJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2NxLT5za2JbaV0pOworCQl9IGVsc2UKKwkJCWZvciAoaSA9IDA7IGkgPCBzY3EtPm51bV9lbnRyaWVzOyBpKyspIHsKKwkJCQlpZiAoc2NxLT5za2JbaV0gIT0gTlVMTCkgeworCQkJCQlpZiAodmNjLT5wb3AgIT0gTlVMTCkKKwkJCQkJCXZjYy0+cG9wKHZjYywgc2NxLT5za2JbaV0pOworCQkJCQllbHNlCisJCQkJCQlkZXZfa2ZyZWVfc2tiX2FueShzY3EtPnNrYltpXSk7CisJCQkJfQorCQkJfQorCX0KKwlrZnJlZShzY3EtPnNrYik7CisJcGNpX2ZyZWVfY29uc2lzdGVudChjYXJkLT5wY2lkZXYsCisJCQkgICAgMiAqIChzY3EtPm51bV9lbnRyaWVzID09IFZCUl9TQ1FfTlVNX0VOVFJJRVMgPworCQkJCSBWQlJfU0NRU0laRSA6IENCUl9TQ1FTSVpFKSwKKwkJCSAgICBzY3EtPm9yZywgc2NxLT5kbWEpOworCWtmcmVlKHNjcSk7CiB9CiAKLQotCiAvKiBUaGUgaGFuZGxlcyBwYXNzZWQgbXVzdCBiZSBwb2ludGVycyB0byB0aGUgc2tfYnVmZiBjb250YWluaW5nIHRoZSBzbWFsbAogICAgb3IgbGFyZ2UgYnVmZmVyKHMpIGNhc3QgdG8gdTMyLiAqLwotc3RhdGljIHZvaWQgcHVzaF9yeGJ1ZnMobnNfZGV2ICpjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgcHVzaF9yeGJ1ZnMobnNfZGV2ICogY2FyZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLSAgIHN0cnVjdCBuc19za2JfY2IgKmNiID0gTlNfU0tCX0NCKHNrYik7Ci0gICB1MzIgaGFuZGxlMSwgYWRkcjE7Ci0gICB1MzIgaGFuZGxlMiwgYWRkcjI7Ci0gICB1MzIgc3RhdDsKLSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gICAKLSAgIC8qICpCQVJGKiAqLwotICAgaGFuZGxlMiA9IGFkZHIyID0gMDsKLSAgIGhhbmRsZTEgPSAodTMyKXNrYjsKLSAgIGFkZHIxID0gKHUzMil2aXJ0X3RvX2J1cyhza2ItPmRhdGEpOworCXN0cnVjdCBza19idWZmICpoYW5kbGUxLCAqaGFuZGxlMjsKKwl1MzIgaWQxID0gMCwgaWQyID0gMDsKKwl1MzIgYWRkcjEsIGFkZHIyOworCXUzMiBzdGF0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVycjsKKworCS8qICpCQVJGKiAqLworCWhhbmRsZTIgPSBOVUxMOworCWFkZHIyID0gMDsKKwloYW5kbGUxID0gc2tiOworCWFkZHIxID0gcGNpX21hcF9zaW5nbGUoY2FyZC0+cGNpZGV2LAorCQkJICAgICAgIHNrYi0+ZGF0YSwKKwkJCSAgICAgICAoTlNfUFJWX0JVRlRZUEUoc2tiKSA9PSBCVUZfU00KKwkJCQk/IE5TX1NNU0tCU0laRSA6IE5TX0xHU0tCU0laRSksCisJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CisJTlNfUFJWX0RNQShza2IpID0gYWRkcjE7IC8qIHNhdmUgc28gd2UgY2FuIHVubWFwIGxhdGVyICovCiAKICNpZmRlZiBHRU5FUkFMX0RFQlVHCi0gICBpZiAoIWFkZHIxKQotICAgICAgcHJpbnRrKCJuaWNzdGFyJWQ6IHB1c2hfcnhidWZzIGNhbGxlZCB3aXRoIGFkZHIxID0gMC5cbiIsIGNhcmQtPmluZGV4KTsKKwlpZiAoIWFkZHIxKQorCQlwcmludGsoIm5pY3N0YXIlZDogcHVzaF9yeGJ1ZnMgY2FsbGVkIHdpdGggYWRkcjEgPSAwLlxuIiwKKwkJICAgICAgIGNhcmQtPmluZGV4KTsKICNlbmRpZiAvKiBHRU5FUkFMX0RFQlVHICovCiAKLSAgIHN0YXQgPSByZWFkbChjYXJkLT5tZW1iYXNlICsgU1RBVCk7Ci0gICBjYXJkLT5zYmZxYyA9IG5zX3N0YXRfc2ZicWNfZ2V0KHN0YXQpOwotICAgY2FyZC0+bGJmcWMgPSBuc19zdGF0X2xmYnFjX2dldChzdGF0KTsKLSAgIGlmIChjYi0+YnVmX3R5cGUgPT0gQlVGX1NNKQotICAgewotICAgICAgaWYgKCFhZGRyMikKLSAgICAgIHsKLSAgICAgICAgIGlmIChjYXJkLT5zbV9hZGRyKQotCSB7Ci0JICAgIGFkZHIyID0gY2FyZC0+c21fYWRkcjsKLQkgICAgaGFuZGxlMiA9IGNhcmQtPnNtX2hhbmRsZTsKLQkgICAgY2FyZC0+c21fYWRkciA9IDB4MDAwMDAwMDA7Ci0JICAgIGNhcmQtPnNtX2hhbmRsZSA9IDB4MDAwMDAwMDA7Ci0JIH0KLQkgZWxzZSAvKiAoIXNtX2FkZHIpICovCi0JIHsKLQkgICAgY2FyZC0+c21fYWRkciA9IGFkZHIxOwotCSAgICBjYXJkLT5zbV9oYW5kbGUgPSBoYW5kbGUxOwotCSB9Ci0gICAgICB9ICAgICAgCi0gICB9Ci0gICBlbHNlIC8qIGJ1Zl90eXBlID09IEJVRl9MRyAqLwotICAgewotICAgICAgaWYgKCFhZGRyMikKLSAgICAgIHsKLSAgICAgICAgIGlmIChjYXJkLT5sZ19hZGRyKQotCSB7Ci0JICAgIGFkZHIyID0gY2FyZC0+bGdfYWRkcjsKLQkgICAgaGFuZGxlMiA9IGNhcmQtPmxnX2hhbmRsZTsKLQkgICAgY2FyZC0+bGdfYWRkciA9IDB4MDAwMDAwMDA7Ci0JICAgIGNhcmQtPmxnX2hhbmRsZSA9IDB4MDAwMDAwMDA7Ci0JIH0KLQkgZWxzZSAvKiAoIWxnX2FkZHIpICovCi0JIHsKLQkgICAgY2FyZC0+bGdfYWRkciA9IGFkZHIxOwotCSAgICBjYXJkLT5sZ19oYW5kbGUgPSBoYW5kbGUxOwotCSB9Ci0gICAgICB9ICAgICAgCi0gICB9CisJc3RhdCA9IHJlYWRsKGNhcmQtPm1lbWJhc2UgKyBTVEFUKTsKKwljYXJkLT5zYmZxYyA9IG5zX3N0YXRfc2ZicWNfZ2V0KHN0YXQpOworCWNhcmQtPmxiZnFjID0gbnNfc3RhdF9sZmJxY19nZXQoc3RhdCk7CisJaWYgKE5TX1BSVl9CVUZUWVBFKHNrYikgPT0gQlVGX1NNKSB7CisJCWlmICghYWRkcjIpIHsKKwkJCWlmIChjYXJkLT5zbV9hZGRyKSB7CisJCQkJYWRkcjIgPSBjYXJkLT5zbV9hZGRyOworCQkJCWhhbmRsZTIgPSBjYXJkLT5zbV9oYW5kbGU7CisJCQkJY2FyZC0+c21fYWRkciA9IDB4MDAwMDAwMDA7CisJCQkJY2FyZC0+c21faGFuZGxlID0gMHgwMDAwMDAwMDsKKwkJCX0gZWxzZSB7CS8qICghc21fYWRkcikgKi8KIAotICAgaWYgKGFkZHIyKQotICAgewotICAgICAgaWYgKGNiLT5idWZfdHlwZSA9PSBCVUZfU00pCi0gICAgICB7Ci0gICAgICAgICBpZiAoY2FyZC0+c2JmcWMgPj0gY2FyZC0+c2Juci5tYXgpCi0gICAgICAgICB7Ci0gICAgICAgICAgICBza2JfdW5saW5rKChzdHJ1Y3Qgc2tfYnVmZiAqKSBoYW5kbGUxLCAmY2FyZC0+c2Jwb29sLnF1ZXVlKTsKLSAgICAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KChzdHJ1Y3Qgc2tfYnVmZiAqKSBoYW5kbGUxKTsKLSAgICAgICAgICAgIHNrYl91bmxpbmsoKHN0cnVjdCBza19idWZmICopIGhhbmRsZTIsICZjYXJkLT5zYnBvb2wucXVldWUpOwotICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoKHN0cnVjdCBza19idWZmICopIGhhbmRsZTIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgfQotCSBlbHNlCi0gICAgICAgICAgICBjYXJkLT5zYmZxYyArPSAyOwotICAgICAgfQotICAgICAgZWxzZSAvKiAoYnVmX3R5cGUgPT0gQlVGX0xHKSAqLwotICAgICAgewotICAgICAgICAgaWYgKGNhcmQtPmxiZnFjID49IGNhcmQtPmxibnIubWF4KQotICAgICAgICAgewotICAgICAgICAgICAgc2tiX3VubGluaygoc3RydWN0IHNrX2J1ZmYgKikgaGFuZGxlMSwgJmNhcmQtPmxicG9vbC5xdWV1ZSk7Ci0gICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueSgoc3RydWN0IHNrX2J1ZmYgKikgaGFuZGxlMSk7Ci0gICAgICAgICAgICBza2JfdW5saW5rKChzdHJ1Y3Qgc2tfYnVmZiAqKSBoYW5kbGUyLCAmY2FyZC0+bGJwb29sLnF1ZXVlKTsKLSAgICAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KChzdHJ1Y3Qgc2tfYnVmZiAqKSBoYW5kbGUyKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgIH0KLSAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhcmQtPmxiZnFjICs9IDI7Ci0gICAgICB9CisJCQkJY2FyZC0+c21fYWRkciA9IGFkZHIxOworCQkJCWNhcmQtPnNtX2hhbmRsZSA9IGhhbmRsZTE7CisJCQl9CisJCX0KKwl9IGVsc2UgewkJLyogYnVmX3R5cGUgPT0gQlVGX0xHICovCiAKLSAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5yZXNfbG9jaywgZmxhZ3MpOworCQlpZiAoIWFkZHIyKSB7CisJCQlpZiAoY2FyZC0+bGdfYWRkcikgeworCQkJCWFkZHIyID0gY2FyZC0+bGdfYWRkcjsKKwkJCQloYW5kbGUyID0gY2FyZC0+bGdfaGFuZGxlOworCQkJCWNhcmQtPmxnX2FkZHIgPSAweDAwMDAwMDAwOworCQkJCWNhcmQtPmxnX2hhbmRsZSA9IDB4MDAwMDAwMDA7CisJCQl9IGVsc2UgewkvKiAoIWxnX2FkZHIpICovCiAKLSAgICAgIHdoaWxlIChDTURfQlVTWShjYXJkKSk7Ci0gICAgICB3cml0ZWwoYWRkcjIsIGNhcmQtPm1lbWJhc2UgKyBEUjMpOwotICAgICAgd3JpdGVsKGhhbmRsZTIsIGNhcmQtPm1lbWJhc2UgKyBEUjIpOwotICAgICAgd3JpdGVsKGFkZHIxLCBjYXJkLT5tZW1iYXNlICsgRFIxKTsKLSAgICAgIHdyaXRlbChoYW5kbGUxLCBjYXJkLT5tZW1iYXNlICsgRFIwKTsKLSAgICAgIHdyaXRlbChOU19DTURfV1JJVEVfRlJFRUJVRlEgfCBjYi0+YnVmX3R5cGUsIGNhcmQtPm1lbWJhc2UgKyBDTUQpOwotIAotICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+cmVzX2xvY2ssIGZsYWdzKTsKKwkJCQljYXJkLT5sZ19hZGRyID0gYWRkcjE7CisJCQkJY2FyZC0+bGdfaGFuZGxlID0gaGFuZGxlMTsKKwkJCX0KKwkJfQorCX0KIAotICAgICAgWFBSSU5USygibmljc3RhciVkOiBQdXNoaW5nICVzIGJ1ZmZlcnMgYXQgMHgleCBhbmQgMHgleC5cbiIsIGNhcmQtPmluZGV4LAotICAgICAgICAgICAgICAoY2ItPmJ1Zl90eXBlID09IEJVRl9TTSA/ICJzbWFsbCIgOiAibGFyZ2UiKSwgYWRkcjEsIGFkZHIyKTsKLSAgIH0KKwlpZiAoYWRkcjIpIHsKKwkJaWYgKE5TX1BSVl9CVUZUWVBFKHNrYikgPT0gQlVGX1NNKSB7CisJCQlpZiAoY2FyZC0+c2JmcWMgPj0gY2FyZC0+c2Juci5tYXgpIHsKKwkJCQlza2JfdW5saW5rKGhhbmRsZTEsICZjYXJkLT5zYnBvb2wucXVldWUpOworCQkJCWRldl9rZnJlZV9za2JfYW55KGhhbmRsZTEpOworCQkJCXNrYl91bmxpbmsoaGFuZGxlMiwgJmNhcmQtPnNicG9vbC5xdWV1ZSk7CisJCQkJZGV2X2tmcmVlX3NrYl9hbnkoaGFuZGxlMik7CisJCQkJcmV0dXJuOworCQkJfSBlbHNlCisJCQkJY2FyZC0+c2JmcWMgKz0gMjsKKwkJfSBlbHNlIHsJLyogKGJ1Zl90eXBlID09IEJVRl9MRykgKi8KIAotICAgaWYgKCFjYXJkLT5lZmJpZSAmJiBjYXJkLT5zYmZxYyA+PSBjYXJkLT5zYm5yLm1pbiAmJgotICAgICAgIGNhcmQtPmxiZnFjID49IGNhcmQtPmxibnIubWluKQotICAgewotICAgICAgY2FyZC0+ZWZiaWUgPSAxOwotICAgICAgd3JpdGVsKChyZWFkbChjYXJkLT5tZW1iYXNlICsgQ0ZHKSB8IE5TX0NGR19FRkJJRSksIGNhcmQtPm1lbWJhc2UgKyBDRkcpOwotICAgfQorCQkJaWYgKGNhcmQtPmxiZnFjID49IGNhcmQtPmxibnIubWF4KSB7CisJCQkJc2tiX3VubGluayhoYW5kbGUxLCAmY2FyZC0+bGJwb29sLnF1ZXVlKTsKKwkJCQlkZXZfa2ZyZWVfc2tiX2FueShoYW5kbGUxKTsKKwkJCQlza2JfdW5saW5rKGhhbmRsZTIsICZjYXJkLT5sYnBvb2wucXVldWUpOworCQkJCWRldl9rZnJlZV9za2JfYW55KGhhbmRsZTIpOworCQkJCXJldHVybjsKKwkJCX0gZWxzZQorCQkJCWNhcmQtPmxiZnFjICs9IDI7CisJCX0KIAotICAgcmV0dXJuOworCQlkbyB7CisJCQlpZiAoIWlkcl9wcmVfZ2V0KCZjYXJkLT5pZHIsIEdGUF9BVE9NSUMpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJuaWNzdGFyJWQ6IG5vIGZyZWUgbWVtb3J5IGZvciBpZHJcbiIsCisJCQkJICAgICAgIGNhcmQtPmluZGV4KTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJaWYgKCFpZDEpCisJCQkJZXJyID0gaWRyX2dldF9uZXdfYWJvdmUoJmNhcmQtPmlkciwgaGFuZGxlMSwgMCwgJmlkMSk7CisKKwkJCWlmICghaWQyICYmIGVyciA9PSAwKQorCQkJCWVyciA9IGlkcl9nZXRfbmV3X2Fib3ZlKCZjYXJkLT5pZHIsIGhhbmRsZTIsIDAsICZpZDIpOworCisJCX0gd2hpbGUgKGVyciA9PSAtRUFHQUlOKTsKKworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnJlc19sb2NrLCBmbGFncyk7CisJCXdoaWxlIChDTURfQlVTWShjYXJkKSkgOworCQl3cml0ZWwoYWRkcjIsIGNhcmQtPm1lbWJhc2UgKyBEUjMpOworCQl3cml0ZWwoaWQyLCBjYXJkLT5tZW1iYXNlICsgRFIyKTsKKwkJd3JpdGVsKGFkZHIxLCBjYXJkLT5tZW1iYXNlICsgRFIxKTsKKwkJd3JpdGVsKGlkMSwgY2FyZC0+bWVtYmFzZSArIERSMCk7CisJCXdyaXRlbChOU19DTURfV1JJVEVfRlJFRUJVRlEgfCBOU19QUlZfQlVGVFlQRShza2IpLAorCQkgICAgICAgY2FyZC0+bWVtYmFzZSArIENNRCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPnJlc19sb2NrLCBmbGFncyk7CisKKwkJWFBSSU5USygibmljc3RhciVkOiBQdXNoaW5nICVzIGJ1ZmZlcnMgYXQgMHgleCBhbmQgMHgleC5cbiIsCisJCQljYXJkLT5pbmRleCwKKwkJCShOU19QUlZfQlVGVFlQRShza2IpID09IEJVRl9TTSA/ICJzbWFsbCIgOiAibGFyZ2UiKSwKKwkJCWFkZHIxLCBhZGRyMik7CisJfQorCisJaWYgKCFjYXJkLT5lZmJpZSAmJiBjYXJkLT5zYmZxYyA+PSBjYXJkLT5zYm5yLm1pbiAmJgorCSAgICBjYXJkLT5sYmZxYyA+PSBjYXJkLT5sYm5yLm1pbikgeworCQljYXJkLT5lZmJpZSA9IDE7CisJCXdyaXRlbCgocmVhZGwoY2FyZC0+bWVtYmFzZSArIENGRykgfCBOU19DRkdfRUZCSUUpLAorCQkgICAgICAgY2FyZC0+bWVtYmFzZSArIENGRyk7CisJfQorCitvdXQ6CisJcmV0dXJuOwogfQogCi0KLQogc3RhdGljIGlycXJldHVybl90IG5zX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLSAgIHUzMiBzdGF0X3I7Ci0gICBuc19kZXYgKmNhcmQ7Ci0gICBzdHJ1Y3QgYXRtX2RldiAqZGV2OwotICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgc3RhdF9yOworCW5zX2RldiAqY2FyZDsKKwlzdHJ1Y3QgYXRtX2RldiAqZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLSAgIGNhcmQgPSAobnNfZGV2ICopIGRldl9pZDsKLSAgIGRldiA9IGNhcmQtPmF0bWRldjsKLSAgIGNhcmQtPmludGNudCsrOworCWNhcmQgPSAobnNfZGV2ICopIGRldl9pZDsKKwlkZXYgPSBjYXJkLT5hdG1kZXY7CisJY2FyZC0+aW50Y250Kys7CiAKLSAgIFBSSU5USygibmljc3RhciVkOiBOSUNTdEFSIGdlbmVyYXRlZCBhbiBpbnRlcnJ1cHRcbiIsIGNhcmQtPmluZGV4KTsKKwlQUklOVEsoIm5pY3N0YXIlZDogTklDU3RBUiBnZW5lcmF0ZWQgYW4gaW50ZXJydXB0XG4iLCBjYXJkLT5pbmRleCk7CiAKLSAgIHNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5pbnRfbG9jaywgZmxhZ3MpOwotICAgCi0gICBzdGF0X3IgPSByZWFkbChjYXJkLT5tZW1iYXNlICsgU1RBVCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmludF9sb2NrLCBmbGFncyk7CiAKLSAgIC8qIFRyYW5zbWl0IFN0YXR1cyBJbmRpY2F0b3IgaGFzIGJlZW4gd3JpdHRlbiB0byBULiBTLiBRdWV1ZSAqLwotICAgaWYgKHN0YXRfciAmIE5TX1NUQVRfVFNJRikKLSAgIHsKLSAgICAgIFRYUFJJTlRLKCJuaWNzdGFyJWQ6IFRTSSBpbnRlcnJ1cHRcbiIsIGNhcmQtPmluZGV4KTsKLSAgICAgIHByb2Nlc3NfdHNxKGNhcmQpOwotICAgICAgd3JpdGVsKE5TX1NUQVRfVFNJRiwgY2FyZC0+bWVtYmFzZSArIFNUQVQpOwotICAgfQotICAgCi0gICAvKiBJbmNvbXBsZXRlIENTLVBEVSBoYXMgYmVlbiB0cmFuc21pdHRlZCAqLwotICAgaWYgKHN0YXRfciAmIE5TX1NUQVRfVFhJQ1ApCi0gICB7Ci0gICAgICB3cml0ZWwoTlNfU1RBVF9UWElDUCwgY2FyZC0+bWVtYmFzZSArIFNUQVQpOwotICAgICAgVFhQUklOVEsoIm5pY3N0YXIlZDogSW5jb21wbGV0ZSBDUy1QRFUgdHJhbnNtaXR0ZWQuXG4iLAotICAgICAgICAgICAgICAgY2FyZC0+aW5kZXgpOwotICAgfQotICAgCi0gICAvKiBUcmFuc21pdCBTdGF0dXMgUXVldWUgNy84IGZ1bGwgKi8KLSAgIGlmIChzdGF0X3IgJiBOU19TVEFUX1RTUUYpCi0gICB7Ci0gICAgICB3cml0ZWwoTlNfU1RBVF9UU1FGLCBjYXJkLT5tZW1iYXNlICsgU1RBVCk7Ci0gICAgICBQUklOVEsoIm5pY3N0YXIlZDogVFNRIGZ1bGwuXG4iLCBjYXJkLT5pbmRleCk7Ci0gICAgICBwcm9jZXNzX3RzcShjYXJkKTsKLSAgIH0KLSAgIAotICAgLyogVGltZXIgb3ZlcmZsb3cgKi8KLSAgIGlmIChzdGF0X3IgJiBOU19TVEFUX1RNUk9GKQotICAgewotICAgICAgd3JpdGVsKE5TX1NUQVRfVE1ST0YsIGNhcmQtPm1lbWJhc2UgKyBTVEFUKTsKLSAgICAgIFBSSU5USygibmljc3RhciVkOiBUaW1lciBvdmVyZmxvdy5cbiIsIGNhcmQtPmluZGV4KTsKLSAgIH0KLSAgIAotICAgLyogUEhZIGRldmljZSBpbnRlcnJ1cHQgc2lnbmFsIGFjdGl2ZSAqLwotICAgaWYgKHN0YXRfciAmIE5TX1NUQVRfUEhZSSkKLSAgIHsKLSAgICAgIHdyaXRlbChOU19TVEFUX1BIWUksIGNhcmQtPm1lbWJhc2UgKyBTVEFUKTsKLSAgICAgIFBSSU5USygibmljc3RhciVkOiBQSFkgaW50ZXJydXB0LlxuIiwgY2FyZC0+aW5kZXgpOwotICAgICAgaWYgKGRldi0+cGh5ICYmIGRldi0+cGh5LT5pbnRlcnJ1cHQpIHsKLSAgICAgICAgIGRldi0+cGh5LT5pbnRlcnJ1cHQoZGV2KTsKLSAgICAgIH0KLSAgIH0KKwlzdGF0X3IgPSByZWFkbChjYXJkLT5tZW1iYXNlICsgU1RBVCk7CiAKLSAgIC8qIFNtYWxsIEJ1ZmZlciBRdWV1ZSBpcyBmdWxsICovCi0gICBpZiAoc3RhdF9yICYgTlNfU1RBVF9TRkJRRikKLSAgIHsKLSAgICAgIHdyaXRlbChOU19TVEFUX1NGQlFGLCBjYXJkLT5tZW1iYXNlICsgU1RBVCk7Ci0gICAgICBwcmludGsoIm5pY3N0YXIlZDogU21hbGwgZnJlZSBidWZmZXIgcXVldWUgaXMgZnVsbC5cbiIsIGNhcmQtPmluZGV4KTsKLSAgIH0KLSAgIAotICAgLyogTGFyZ2UgQnVmZmVyIFF1ZXVlIGlzIGZ1bGwgKi8KLSAgIGlmIChzdGF0X3IgJiBOU19TVEFUX0xGQlFGKQotICAgewotICAgICAgd3JpdGVsKE5TX1NUQVRfTEZCUUYsIGNhcmQtPm1lbWJhc2UgKyBTVEFUKTsKLSAgICAgIHByaW50aygibmljc3RhciVkOiBMYXJnZSBmcmVlIGJ1ZmZlciBxdWV1ZSBpcyBmdWxsLlxuIiwgY2FyZC0+aW5kZXgpOwotICAgfQorCS8qIFRyYW5zbWl0IFN0YXR1cyBJbmRpY2F0b3IgaGFzIGJlZW4gd3JpdHRlbiB0byBULiBTLiBRdWV1ZSAqLworCWlmIChzdGF0X3IgJiBOU19TVEFUX1RTSUYpIHsKKwkJVFhQUklOVEsoIm5pY3N0YXIlZDogVFNJIGludGVycnVwdFxuIiwgY2FyZC0+aW5kZXgpOworCQlwcm9jZXNzX3RzcShjYXJkKTsKKwkJd3JpdGVsKE5TX1NUQVRfVFNJRiwgY2FyZC0+bWVtYmFzZSArIFNUQVQpOworCX0KIAotICAgLyogUmVjZWl2ZSBTdGF0dXMgUXVldWUgaXMgZnVsbCAqLwotICAgaWYgKHN0YXRfciAmIE5TX1NUQVRfUlNRRikKLSAgIHsKLSAgICAgIHdyaXRlbChOU19TVEFUX1JTUUYsIGNhcmQtPm1lbWJhc2UgKyBTVEFUKTsKLSAgICAgIHByaW50aygibmljc3RhciVkOiBSU1EgZnVsbC5cbiIsIGNhcmQtPmluZGV4KTsKLSAgICAgIHByb2Nlc3NfcnNxKGNhcmQpOwotICAgfQorCS8qIEluY29tcGxldGUgQ1MtUERVIGhhcyBiZWVuIHRyYW5zbWl0dGVkICovCisJaWYgKHN0YXRfciAmIE5TX1NUQVRfVFhJQ1ApIHsKKwkJd3JpdGVsKE5TX1NUQVRfVFhJQ1AsIGNhcmQtPm1lbWJhc2UgKyBTVEFUKTsKKwkJVFhQUklOVEsoIm5pY3N0YXIlZDogSW5jb21wbGV0ZSBDUy1QRFUgdHJhbnNtaXR0ZWQuXG4iLAorCQkJIGNhcmQtPmluZGV4KTsKKwl9CiAKLSAgIC8qIENvbXBsZXRlIENTLVBEVSByZWNlaXZlZCAqLwotICAgaWYgKHN0YXRfciAmIE5TX1NUQVRfRU9QRFUpCi0gICB7Ci0gICAgICBSWFBSSU5USygibmljc3RhciVkOiBFbmQgb2YgQ1MtUERVIHJlY2VpdmVkLlxuIiwgY2FyZC0+aW5kZXgpOwotICAgICAgcHJvY2Vzc19yc3EoY2FyZCk7Ci0gICAgICB3cml0ZWwoTlNfU1RBVF9FT1BEVSwgY2FyZC0+bWVtYmFzZSArIFNUQVQpOwotICAgfQorCS8qIFRyYW5zbWl0IFN0YXR1cyBRdWV1ZSA3LzggZnVsbCAqLworCWlmIChzdGF0X3IgJiBOU19TVEFUX1RTUUYpIHsKKwkJd3JpdGVsKE5TX1NUQVRfVFNRRiwgY2FyZC0+bWVtYmFzZSArIFNUQVQpOworCQlQUklOVEsoIm5pY3N0YXIlZDogVFNRIGZ1bGwuXG4iLCBjYXJkLT5pbmRleCk7CisJCXByb2Nlc3NfdHNxKGNhcmQpOworCX0KIAotICAgLyogUmF3IGNlbGwgcmVjZWl2ZWQgKi8KLSAgIGlmIChzdGF0X3IgJiBOU19TVEFUX1JBV0NGKQotICAgewotICAgICAgd3JpdGVsKE5TX1NUQVRfUkFXQ0YsIGNhcmQtPm1lbWJhc2UgKyBTVEFUKTsKKwkvKiBUaW1lciBvdmVyZmxvdyAqLworCWlmIChzdGF0X3IgJiBOU19TVEFUX1RNUk9GKSB7CisJCXdyaXRlbChOU19TVEFUX1RNUk9GLCBjYXJkLT5tZW1iYXNlICsgU1RBVCk7CisJCVBSSU5USygibmljc3RhciVkOiBUaW1lciBvdmVyZmxvdy5cbiIsIGNhcmQtPmluZGV4KTsKKwl9CisKKwkvKiBQSFkgZGV2aWNlIGludGVycnVwdCBzaWduYWwgYWN0aXZlICovCisJaWYgKHN0YXRfciAmIE5TX1NUQVRfUEhZSSkgeworCQl3cml0ZWwoTlNfU1RBVF9QSFlJLCBjYXJkLT5tZW1iYXNlICsgU1RBVCk7CisJCVBSSU5USygibmljc3RhciVkOiBQSFkgaW50ZXJydXB0LlxuIiwgY2FyZC0+aW5kZXgpOworCQlpZiAoZGV2LT5waHkgJiYgZGV2LT5waHktPmludGVycnVwdCkgeworCQkJZGV2LT5waHktPmludGVycnVwdChkZXYpOworCQl9CisJfQorCisJLyogU21hbGwgQnVmZmVyIFF1ZXVlIGlzIGZ1bGwgKi8KKwlpZiAoc3RhdF9yICYgTlNfU1RBVF9TRkJRRikgeworCQl3cml0ZWwoTlNfU1RBVF9TRkJRRiwgY2FyZC0+bWVtYmFzZSArIFNUQVQpOworCQlwcmludGsoIm5pY3N0YXIlZDogU21hbGwgZnJlZSBidWZmZXIgcXVldWUgaXMgZnVsbC5cbiIsCisJCSAgICAgICBjYXJkLT5pbmRleCk7CisJfQorCisJLyogTGFyZ2UgQnVmZmVyIFF1ZXVlIGlzIGZ1bGwgKi8KKwlpZiAoc3RhdF9yICYgTlNfU1RBVF9MRkJRRikgeworCQl3cml0ZWwoTlNfU1RBVF9MRkJRRiwgY2FyZC0+bWVtYmFzZSArIFNUQVQpOworCQlwcmludGsoIm5pY3N0YXIlZDogTGFyZ2UgZnJlZSBidWZmZXIgcXVldWUgaXMgZnVsbC5cbiIsCisJCSAgICAgICBjYXJkLT5pbmRleCk7CisJfQorCisJLyogUmVjZWl2ZSBTdGF0dXMgUXVldWUgaXMgZnVsbCAqLworCWlmIChzdGF0X3IgJiBOU19TVEFUX1JTUUYpIHsKKwkJd3JpdGVsKE5TX1NUQVRfUlNRRiwgY2FyZC0+bWVtYmFzZSArIFNUQVQpOworCQlwcmludGsoIm5pY3N0YXIlZDogUlNRIGZ1bGwuXG4iLCBjYXJkLT5pbmRleCk7CisJCXByb2Nlc3NfcnNxKGNhcmQpOworCX0KKworCS8qIENvbXBsZXRlIENTLVBEVSByZWNlaXZlZCAqLworCWlmIChzdGF0X3IgJiBOU19TVEFUX0VPUERVKSB7CisJCVJYUFJJTlRLKCJuaWNzdGFyJWQ6IEVuZCBvZiBDUy1QRFUgcmVjZWl2ZWQuXG4iLCBjYXJkLT5pbmRleCk7CisJCXByb2Nlc3NfcnNxKGNhcmQpOworCQl3cml0ZWwoTlNfU1RBVF9FT1BEVSwgY2FyZC0+bWVtYmFzZSArIFNUQVQpOworCX0KKworCS8qIFJhdyBjZWxsIHJlY2VpdmVkICovCisJaWYgKHN0YXRfciAmIE5TX1NUQVRfUkFXQ0YpIHsKKwkJd3JpdGVsKE5TX1NUQVRfUkFXQ0YsIGNhcmQtPm1lbWJhc2UgKyBTVEFUKTsKICNpZm5kZWYgUkNRX1NVUFBPUlQKLSAgICAgIHByaW50aygibmljc3RhciVkOiBSYXcgY2VsbCByZWNlaXZlZCBhbmQgbm8gc3VwcG9ydCB5ZXQuLi5cbiIsCi0gICAgICAgICAgICAgY2FyZC0+aW5kZXgpOworCQlwcmludGsoIm5pY3N0YXIlZDogUmF3IGNlbGwgcmVjZWl2ZWQgYW5kIG5vIHN1cHBvcnQgeWV0Li4uXG4iLAorCQkgICAgICAgY2FyZC0+aW5kZXgpOwogI2VuZGlmIC8qIFJDUV9TVVBQT1JUICovCi0gICAgICAvKiBOT1RFOiB0aGUgZm9sbG93aW5nIHByb2NlZHVyZSBtYXkga2VlcCBhIHJhdyBjZWxsIHBlbmRpbmcgdW50aWwgdGhlCi0gICAgICAgICAgICAgICBuZXh0IGludGVycnVwdC4gQXMgdGhpcyBwcmVsaW1pbmFyeSBzdXBwb3J0IGlzIG9ubHkgbWVhbnQgdG8KLSAgICAgICAgICAgICAgIGF2b2lkIGJ1ZmZlciBsZWFrYWdlLCB0aGlzIGlzIG5vdCBhbiBpc3N1ZS4gKi8KLSAgICAgIHdoaWxlIChyZWFkbChjYXJkLT5tZW1iYXNlICsgUkFXQ1QpICE9IGNhcmQtPnJhd2NoKQotICAgICAgewotICAgICAgICAgbnNfcmNxZSAqcmF3Y2VsbDsKKwkJLyogTk9URTogdGhlIGZvbGxvd2luZyBwcm9jZWR1cmUgbWF5IGtlZXAgYSByYXcgY2VsbCBwZW5kaW5nIHVudGlsIHRoZQorCQkgICBuZXh0IGludGVycnVwdC4gQXMgdGhpcyBwcmVsaW1pbmFyeSBzdXBwb3J0IGlzIG9ubHkgbWVhbnQgdG8KKwkJICAgYXZvaWQgYnVmZmVyIGxlYWthZ2UsIHRoaXMgaXMgbm90IGFuIGlzc3VlLiAqLworCQl3aGlsZSAocmVhZGwoY2FyZC0+bWVtYmFzZSArIFJBV0NUKSAhPSBjYXJkLT5yYXdjaCkgewogCi0gICAgICAgICByYXdjZWxsID0gKG5zX3JjcWUgKikgYnVzX3RvX3ZpcnQoY2FyZC0+cmF3Y2gpOwotICAgICAgICAgaWYgKG5zX3JjcWVfaXNsYXN0KHJhd2NlbGwpKQotICAgICAgICAgewotICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKm9sZGJ1ZjsKKwkJCWlmIChuc19yY3FlX2lzbGFzdChjYXJkLT5yYXdjZWxsKSkgeworCQkJCXN0cnVjdCBza19idWZmICpvbGRidWY7CiAKLSAgICAgICAgICAgIG9sZGJ1ZiA9IGNhcmQtPnJjYnVmOwotICAgICAgICAgICAgY2FyZC0+cmNidWYgPSAoc3RydWN0IHNrX2J1ZmYgKikgbnNfcmNxZV9uZXh0YnVmaGFuZGxlKHJhd2NlbGwpOwotICAgICAgICAgICAgY2FyZC0+cmF3Y2ggPSAodTMyKSB2aXJ0X3RvX2J1cyhjYXJkLT5yY2J1Zi0+ZGF0YSk7Ci0gICAgICAgICAgICByZWN5Y2xlX3J4X2J1ZihjYXJkLCBvbGRidWYpOwotICAgICAgICAgfQotICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FyZC0+cmF3Y2ggKz0gTlNfUkNRRV9TSVpFOwotICAgICAgfQotICAgfQorCQkJCW9sZGJ1ZiA9IGNhcmQtPnJjYnVmOworCQkJCWNhcmQtPnJjYnVmID0gaWRyX2ZpbmQoJmNhcmQtPmlkciwKKwkJCQkJCSAgICAgICBuc19yY3FlX25leHRidWZoYW5kbGUoY2FyZC0+cmF3Y2VsbCkpOworCQkJCWNhcmQtPnJhd2NoID0gTlNfUFJWX0RNQShjYXJkLT5yY2J1Zik7CisJCQkJY2FyZC0+cmF3Y2VsbCA9IChzdHJ1Y3QgbnNfcmNxZSAqKQorCQkJCQkJY2FyZC0+cmNidWYtPmRhdGE7CisJCQkJcmVjeWNsZV9yeF9idWYoY2FyZCwgb2xkYnVmKTsKKwkJCX0gZWxzZSB7CisJCQkJY2FyZC0+cmF3Y2ggKz0gTlNfUkNRRV9TSVpFOworCQkJCWNhcmQtPnJhd2NlbGwrKzsKKwkJCX0KKwkJfQorCX0KIAotICAgLyogU21hbGwgYnVmZmVyIHF1ZXVlIGlzIGVtcHR5ICovCi0gICBpZiAoc3RhdF9yICYgTlNfU1RBVF9TRkJRRSkKLSAgIHsKLSAgICAgIGludCBpOwotICAgICAgc3RydWN0IHNrX2J1ZmYgKnNiOworCS8qIFNtYWxsIGJ1ZmZlciBxdWV1ZSBpcyBlbXB0eSAqLworCWlmIChzdGF0X3IgJiBOU19TVEFUX1NGQlFFKSB7CisJCWludCBpOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2I7CiAKLSAgICAgIHdyaXRlbChOU19TVEFUX1NGQlFFLCBjYXJkLT5tZW1iYXNlICsgU1RBVCk7Ci0gICAgICBwcmludGsoIm5pY3N0YXIlZDogU21hbGwgZnJlZSBidWZmZXIgcXVldWUgZW1wdHkuXG4iLAotICAgICAgICAgICAgIGNhcmQtPmluZGV4KTsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBjYXJkLT5zYm5yLm1pbjsgaSsrKQotICAgICAgewotICAgICAgICAgc2IgPSBkZXZfYWxsb2Nfc2tiKE5TX1NNU0tCU0laRSk7Ci0gICAgICAgICBpZiAoc2IgPT0gTlVMTCkKLSAgICAgICAgIHsKLSAgICAgICAgICAgIHdyaXRlbChyZWFkbChjYXJkLT5tZW1iYXNlICsgQ0ZHKSAmIH5OU19DRkdfRUZCSUUsIGNhcmQtPm1lbWJhc2UgKyBDRkcpOwotICAgICAgICAgICAgY2FyZC0+ZWZiaWUgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICB9Ci0gICAgICAgICBOU19TS0JfQ0Ioc2IpLT5idWZfdHlwZSA9IEJVRl9TTTsKLSAgICAgICAgIHNrYl9xdWV1ZV90YWlsKCZjYXJkLT5zYnBvb2wucXVldWUsIHNiKTsKLSAgICAgICAgIHNrYl9yZXNlcnZlKHNiLCBOU19BQUwwX0hFQURFUik7Ci0gICAgICAgICBwdXNoX3J4YnVmcyhjYXJkLCBzYik7Ci0gICAgICB9Ci0gICAgICBjYXJkLT5zYmZxYyA9IGk7Ci0gICAgICBwcm9jZXNzX3JzcShjYXJkKTsKLSAgIH0KKwkJd3JpdGVsKE5TX1NUQVRfU0ZCUUUsIGNhcmQtPm1lbWJhc2UgKyBTVEFUKTsKKwkJcHJpbnRrKCJuaWNzdGFyJWQ6IFNtYWxsIGZyZWUgYnVmZmVyIHF1ZXVlIGVtcHR5LlxuIiwKKwkJICAgICAgIGNhcmQtPmluZGV4KTsKKwkJZm9yIChpID0gMDsgaSA8IGNhcmQtPnNibnIubWluOyBpKyspIHsKKwkJCXNiID0gZGV2X2FsbG9jX3NrYihOU19TTVNLQlNJWkUpOworCQkJaWYgKHNiID09IE5VTEwpIHsKKwkJCQl3cml0ZWwocmVhZGwoY2FyZC0+bWVtYmFzZSArIENGRykgJgorCQkJCSAgICAgICB+TlNfQ0ZHX0VGQklFLCBjYXJkLT5tZW1iYXNlICsgQ0ZHKTsKKwkJCQljYXJkLT5lZmJpZSA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQlOU19QUlZfQlVGVFlQRShzYikgPSBCVUZfU007CisJCQlza2JfcXVldWVfdGFpbCgmY2FyZC0+c2Jwb29sLnF1ZXVlLCBzYik7CisJCQlza2JfcmVzZXJ2ZShzYiwgTlNfQUFMMF9IRUFERVIpOworCQkJcHVzaF9yeGJ1ZnMoY2FyZCwgc2IpOworCQl9CisJCWNhcmQtPnNiZnFjID0gaTsKKwkJcHJvY2Vzc19yc3EoY2FyZCk7CisJfQogCi0gICAvKiBMYXJnZSBidWZmZXIgcXVldWUgZW1wdHkgKi8KLSAgIGlmIChzdGF0X3IgJiBOU19TVEFUX0xGQlFFKQotICAgewotICAgICAgaW50IGk7Ci0gICAgICBzdHJ1Y3Qgc2tfYnVmZiAqbGI7CisJLyogTGFyZ2UgYnVmZmVyIHF1ZXVlIGVtcHR5ICovCisJaWYgKHN0YXRfciAmIE5TX1NUQVRfTEZCUUUpIHsKKwkJaW50IGk7CisJCXN0cnVjdCBza19idWZmICpsYjsKIAotICAgICAgd3JpdGVsKE5TX1NUQVRfTEZCUUUsIGNhcmQtPm1lbWJhc2UgKyBTVEFUKTsKLSAgICAgIHByaW50aygibmljc3RhciVkOiBMYXJnZSBmcmVlIGJ1ZmZlciBxdWV1ZSBlbXB0eS5cbiIsCi0gICAgICAgICAgICAgY2FyZC0+aW5kZXgpOwotICAgICAgZm9yIChpID0gMDsgaSA8IGNhcmQtPmxibnIubWluOyBpKyspCi0gICAgICB7Ci0gICAgICAgICBsYiA9IGRldl9hbGxvY19za2IoTlNfTEdTS0JTSVpFKTsKLSAgICAgICAgIGlmIChsYiA9PSBOVUxMKQotICAgICAgICAgewotICAgICAgICAgICAgd3JpdGVsKHJlYWRsKGNhcmQtPm1lbWJhc2UgKyBDRkcpICYgfk5TX0NGR19FRkJJRSwgY2FyZC0+bWVtYmFzZSArIENGRyk7Ci0gICAgICAgICAgICBjYXJkLT5lZmJpZSA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgIH0KLSAgICAgICAgIE5TX1NLQl9DQihsYiktPmJ1Zl90eXBlID0gQlVGX0xHOwotICAgICAgICAgc2tiX3F1ZXVlX3RhaWwoJmNhcmQtPmxicG9vbC5xdWV1ZSwgbGIpOwotICAgICAgICAgc2tiX3Jlc2VydmUobGIsIE5TX1NNQlVGU0laRSk7Ci0gICAgICAgICBwdXNoX3J4YnVmcyhjYXJkLCBsYik7Ci0gICAgICB9Ci0gICAgICBjYXJkLT5sYmZxYyA9IGk7Ci0gICAgICBwcm9jZXNzX3JzcShjYXJkKTsKLSAgIH0KKwkJd3JpdGVsKE5TX1NUQVRfTEZCUUUsIGNhcmQtPm1lbWJhc2UgKyBTVEFUKTsKKwkJcHJpbnRrKCJuaWNzdGFyJWQ6IExhcmdlIGZyZWUgYnVmZmVyIHF1ZXVlIGVtcHR5LlxuIiwKKwkJICAgICAgIGNhcmQtPmluZGV4KTsKKwkJZm9yIChpID0gMDsgaSA8IGNhcmQtPmxibnIubWluOyBpKyspIHsKKwkJCWxiID0gZGV2X2FsbG9jX3NrYihOU19MR1NLQlNJWkUpOworCQkJaWYgKGxiID09IE5VTEwpIHsKKwkJCQl3cml0ZWwocmVhZGwoY2FyZC0+bWVtYmFzZSArIENGRykgJgorCQkJCSAgICAgICB+TlNfQ0ZHX0VGQklFLCBjYXJkLT5tZW1iYXNlICsgQ0ZHKTsKKwkJCQljYXJkLT5lZmJpZSA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQlOU19QUlZfQlVGVFlQRShsYikgPSBCVUZfTEc7CisJCQlza2JfcXVldWVfdGFpbCgmY2FyZC0+bGJwb29sLnF1ZXVlLCBsYik7CisJCQlza2JfcmVzZXJ2ZShsYiwgTlNfU01CVUZTSVpFKTsKKwkJCXB1c2hfcnhidWZzKGNhcmQsIGxiKTsKKwkJfQorCQljYXJkLT5sYmZxYyA9IGk7CisJCXByb2Nlc3NfcnNxKGNhcmQpOworCX0KIAotICAgLyogUmVjZWl2ZSBTdGF0dXMgUXVldWUgaXMgNy84IGZ1bGwgKi8KLSAgIGlmIChzdGF0X3IgJiBOU19TVEFUX1JTUUFGKQotICAgewotICAgICAgd3JpdGVsKE5TX1NUQVRfUlNRQUYsIGNhcmQtPm1lbWJhc2UgKyBTVEFUKTsKLSAgICAgIFJYUFJJTlRLKCJuaWNzdGFyJWQ6IFJTUSBhbG1vc3QgZnVsbC5cbiIsIGNhcmQtPmluZGV4KTsKLSAgICAgIHByb2Nlc3NfcnNxKGNhcmQpOwotICAgfQotICAgCi0gICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5pbnRfbG9jaywgZmxhZ3MpOwotICAgUFJJTlRLKCJuaWNzdGFyJWQ6IGVuZCBvZiBpbnRlcnJ1cHQgc2VydmljZVxuIiwgY2FyZC0+aW5kZXgpOwotICAgcmV0dXJuIElSUV9IQU5ETEVEOworCS8qIFJlY2VpdmUgU3RhdHVzIFF1ZXVlIGlzIDcvOCBmdWxsICovCisJaWYgKHN0YXRfciAmIE5TX1NUQVRfUlNRQUYpIHsKKwkJd3JpdGVsKE5TX1NUQVRfUlNRQUYsIGNhcmQtPm1lbWJhc2UgKyBTVEFUKTsKKwkJUlhQUklOVEsoIm5pY3N0YXIlZDogUlNRIGFsbW9zdCBmdWxsLlxuIiwgY2FyZC0+aW5kZXgpOworCQlwcm9jZXNzX3JzcShjYXJkKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5pbnRfbG9jaywgZmxhZ3MpOworCVBSSU5USygibmljc3RhciVkOiBlbmQgb2YgaW50ZXJydXB0IHNlcnZpY2VcbiIsIGNhcmQtPmluZGV4KTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLQotCiBzdGF0aWMgaW50IG5zX29wZW4oc3RydWN0IGF0bV92Y2MgKnZjYykKIHsKLSAgIG5zX2RldiAqY2FyZDsKLSAgIHZjX21hcCAqdmM7Ci0gICB1bnNpZ25lZCBsb25nIHRtcGwsIG1vZGw7Ci0gICBpbnQgdGNyLCB0Y3JhOwkvKiB0YXJnZXQgY2VsbCByYXRlLCBhbmQgYWJzb2x1dGUgdmFsdWUgKi8KLSAgIGludCBuID0gMDsJCS8qIE51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBUU1QuIEluaXRpYWxpemVkIHRvIHJlbW92ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbXBpbGVyIHdhcm5pbmcuICovCi0gICB1MzIgdTMyZFs0XTsKLSAgIGludCBmcnNjZGkgPSAwOwkvKiBJbmRleCBvZiB0aGUgU0NELiBJbml0aWFsaXplZCB0byByZW1vdmUgdGhlIGNvbXBpbGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nLiBIb3cgSSB3aXNoIGNvbXBpbGVycyB3ZXJlIGNsZXZlciBlbm91Z2ggdG8KLQkJCSAgIHRlbGwgd2hpY2ggdmFyaWFibGVzIGNhbiB0cnVseSBiZSB1c2VkCi0JCQkgICB1bmluaXRpYWxpemVkLi4uICovCi0gICBpbnQgaW51c2U7CQkvKiB0eCBvciByeCB2YyBhbHJlYWR5IGluIHVzZSBieSBhbm90aGVyIHZjYyAqLwotICAgc2hvcnQgdnBpID0gdmNjLT52cGk7Ci0gICBpbnQgdmNpID0gdmNjLT52Y2k7CisJbnNfZGV2ICpjYXJkOworCXZjX21hcCAqdmM7CisJdW5zaWduZWQgbG9uZyB0bXBsLCBtb2RsOworCWludCB0Y3IsIHRjcmE7CQkvKiB0YXJnZXQgY2VsbCByYXRlLCBhbmQgYWJzb2x1dGUgdmFsdWUgKi8KKwlpbnQgbiA9IDA7CQkvKiBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgVFNULiBJbml0aWFsaXplZCB0byByZW1vdmUKKwkJCQkgICB0aGUgY29tcGlsZXIgd2FybmluZy4gKi8KKwl1MzIgdTMyZFs0XTsKKwlpbnQgZnJzY2RpID0gMDsJCS8qIEluZGV4IG9mIHRoZSBTQ0QuIEluaXRpYWxpemVkIHRvIHJlbW92ZSB0aGUgY29tcGlsZXIKKwkJCQkgICB3YXJuaW5nLiBIb3cgSSB3aXNoIGNvbXBpbGVycyB3ZXJlIGNsZXZlciBlbm91Z2ggdG8KKwkJCQkgICB0ZWxsIHdoaWNoIHZhcmlhYmxlcyBjYW4gdHJ1bHkgYmUgdXNlZAorCQkJCSAgIHVuaW5pdGlhbGl6ZWQuLi4gKi8KKwlpbnQgaW51c2U7CQkvKiB0eCBvciByeCB2YyBhbHJlYWR5IGluIHVzZSBieSBhbm90aGVyIHZjYyAqLworCXNob3J0IHZwaSA9IHZjYy0+dnBpOworCWludCB2Y2kgPSB2Y2MtPnZjaTsKIAotICAgY2FyZCA9IChuc19kZXYgKikgdmNjLT5kZXYtPmRldl9kYXRhOwotICAgUFJJTlRLKCJuaWNzdGFyJWQ6IG9wZW5pbmcgdnBpLnZjaSAlZC4lZCBcbiIsIGNhcmQtPmluZGV4LCAoaW50KSB2cGksIHZjaSk7Ci0gICBpZiAodmNjLT5xb3MuYWFsICE9IEFUTV9BQUw1ICYmIHZjYy0+cW9zLmFhbCAhPSBBVE1fQUFMMCkKLSAgIHsKLSAgICAgIFBSSU5USygibmljc3RhciVkOiB1bnN1cHBvcnRlZCBBQUwuXG4iLCBjYXJkLT5pbmRleCk7Ci0gICAgICByZXR1cm4gLUVJTlZBTDsKLSAgIH0KKwljYXJkID0gKG5zX2RldiAqKSB2Y2MtPmRldi0+ZGV2X2RhdGE7CisJUFJJTlRLKCJuaWNzdGFyJWQ6IG9wZW5pbmcgdnBpLnZjaSAlZC4lZCBcbiIsIGNhcmQtPmluZGV4LCAoaW50KXZwaSwKKwkgICAgICAgdmNpKTsKKwlpZiAodmNjLT5xb3MuYWFsICE9IEFUTV9BQUw1ICYmIHZjYy0+cW9zLmFhbCAhPSBBVE1fQUFMMCkgeworCQlQUklOVEsoIm5pY3N0YXIlZDogdW5zdXBwb3J0ZWQgQUFMLlxuIiwgY2FyZC0+aW5kZXgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKLSAgIHZjID0gJihjYXJkLT52Y21hcFt2cGkgPDwgY2FyZC0+dmNpYml0cyB8IHZjaV0pOwotICAgdmNjLT5kZXZfZGF0YSA9IHZjOworCXZjID0gJihjYXJkLT52Y21hcFt2cGkgPDwgY2FyZC0+dmNpYml0cyB8IHZjaV0pOworCXZjYy0+ZGV2X2RhdGEgPSB2YzsKIAotICAgaW51c2UgPSAwOwotICAgaWYgKHZjYy0+cW9zLnR4dHAudHJhZmZpY19jbGFzcyAhPSBBVE1fTk9ORSAmJiB2Yy0+dHgpCi0gICAgICBpbnVzZSA9IDE7Ci0gICBpZiAodmNjLT5xb3Mucnh0cC50cmFmZmljX2NsYXNzICE9IEFUTV9OT05FICYmIHZjLT5yeCkKLSAgICAgIGludXNlICs9IDI7Ci0gICBpZiAoaW51c2UpCi0gICB7Ci0gICAgICBwcmludGsoIm5pY3N0YXIlZDogJXMgdmNpIGFscmVhZHkgaW4gdXNlLlxuIiwgY2FyZC0+aW5kZXgsCi0gICAgICAgICAgICAgaW51c2UgPT0gMSA/ICJ0eCIgOiBpbnVzZSA9PSAyID8gInJ4IiA6ICJ0eCBhbmQgcngiKTsKLSAgICAgIHJldHVybiAtRUlOVkFMOwotICAgfQorCWludXNlID0gMDsKKwlpZiAodmNjLT5xb3MudHh0cC50cmFmZmljX2NsYXNzICE9IEFUTV9OT05FICYmIHZjLT50eCkKKwkJaW51c2UgPSAxOworCWlmICh2Y2MtPnFvcy5yeHRwLnRyYWZmaWNfY2xhc3MgIT0gQVRNX05PTkUgJiYgdmMtPnJ4KQorCQlpbnVzZSArPSAyOworCWlmIChpbnVzZSkgeworCQlwcmludGsoIm5pY3N0YXIlZDogJXMgdmNpIGFscmVhZHkgaW4gdXNlLlxuIiwgY2FyZC0+aW5kZXgsCisJCSAgICAgICBpbnVzZSA9PSAxID8gInR4IiA6IGludXNlID09IDIgPyAicngiIDogInR4IGFuZCByeCIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKLSAgIHNldF9iaXQoQVRNX1ZGX0FERFIsJnZjYy0+ZmxhZ3MpOworCXNldF9iaXQoQVRNX1ZGX0FERFIsICZ2Y2MtPmZsYWdzKTsKIAotICAgLyogTk9URTogWW91IGFyZSBub3QgYWxsb3dlZCB0byBtb2RpZnkgYW4gb3BlbiBjb25uZWN0aW9uJ3MgUU9TLiBUbyBjaGFuZ2UKLSAgICAgIHRoYXQsIHJlbW92ZSB0aGUgQVRNX1ZGX1BBUlRJQUwgZmxhZyBjaGVja2luZy4gVGhlcmUgbWF5IGJlIG90aGVyIGNoYW5nZXMKLSAgICAgIG5lZWRlZCB0byBkbyB0aGF0LiAqLwotICAgaWYgKCF0ZXN0X2JpdChBVE1fVkZfUEFSVElBTCwmdmNjLT5mbGFncykpCi0gICB7Ci0gICAgICBzY3FfaW5mbyAqc2NxOwotICAgICAgCi0gICAgICBzZXRfYml0KEFUTV9WRl9QQVJUSUFMLCZ2Y2MtPmZsYWdzKTsKLSAgICAgIGlmICh2Y2MtPnFvcy50eHRwLnRyYWZmaWNfY2xhc3MgPT0gQVRNX0NCUikKLSAgICAgIHsKLSAgICAgICAgIC8qIENoZWNrIHJlcXVlc3RlZCBjZWxsIHJhdGUgYW5kIGF2YWlsYWJpbGl0eSBvZiBTQ0QgKi8KLSAgICAgICAgIGlmICh2Y2MtPnFvcy50eHRwLm1heF9wY3IgPT0gMCAmJiB2Y2MtPnFvcy50eHRwLnBjciA9PSAwICYmCi0gICAgICAgICAgICAgdmNjLT5xb3MudHh0cC5taW5fcGNyID09IDApCi0gICAgICAgICB7Ci0gICAgICAgICAgICBQUklOVEsoIm5pY3N0YXIlZDogdHJ5aW5nIHRvIG9wZW4gYSBDQlIgdmMgd2l0aCBjZWxsIHJhdGUgPSAwIFxuIiwKLQkgICAgICAgICAgIGNhcmQtPmluZGV4KTsKLQkgICAgY2xlYXJfYml0KEFUTV9WRl9QQVJUSUFMLCZ2Y2MtPmZsYWdzKTsKLQkgICAgY2xlYXJfYml0KEFUTV9WRl9BRERSLCZ2Y2MtPmZsYWdzKTsKLSAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgfQorCS8qIE5PVEU6IFlvdSBhcmUgbm90IGFsbG93ZWQgdG8gbW9kaWZ5IGFuIG9wZW4gY29ubmVjdGlvbidzIFFPUy4gVG8gY2hhbmdlCisJICAgdGhhdCwgcmVtb3ZlIHRoZSBBVE1fVkZfUEFSVElBTCBmbGFnIGNoZWNraW5nLiBUaGVyZSBtYXkgYmUgb3RoZXIgY2hhbmdlcworCSAgIG5lZWRlZCB0byBkbyB0aGF0LiAqLworCWlmICghdGVzdF9iaXQoQVRNX1ZGX1BBUlRJQUwsICZ2Y2MtPmZsYWdzKSkgeworCQlzY3FfaW5mbyAqc2NxOwogCi0gICAgICAgICB0Y3IgPSBhdG1fcGNyX2dvYWwoJih2Y2MtPnFvcy50eHRwKSk7Ci0gICAgICAgICB0Y3JhID0gdGNyID49IDAgPyB0Y3IgOiAtdGNyOwotICAgICAgCi0gICAgICAgICBQUklOVEsoIm5pY3N0YXIlZDogdGFyZ2V0IGNlbGwgcmF0ZSA9ICVkLlxuIiwgY2FyZC0+aW5kZXgsCi0gICAgICAgICAgICAgICAgdmNjLT5xb3MudHh0cC5tYXhfcGNyKTsKKwkJc2V0X2JpdChBVE1fVkZfUEFSVElBTCwgJnZjYy0+ZmxhZ3MpOworCQlpZiAodmNjLT5xb3MudHh0cC50cmFmZmljX2NsYXNzID09IEFUTV9DQlIpIHsKKwkJCS8qIENoZWNrIHJlcXVlc3RlZCBjZWxsIHJhdGUgYW5kIGF2YWlsYWJpbGl0eSBvZiBTQ0QgKi8KKwkJCWlmICh2Y2MtPnFvcy50eHRwLm1heF9wY3IgPT0gMCAmJiB2Y2MtPnFvcy50eHRwLnBjciA9PSAwCisJCQkgICAgJiYgdmNjLT5xb3MudHh0cC5taW5fcGNyID09IDApIHsKKwkJCQlQUklOVEsKKwkJCQkgICAgKCJuaWNzdGFyJWQ6IHRyeWluZyB0byBvcGVuIGEgQ0JSIHZjIHdpdGggY2VsbCByYXRlID0gMCBcbiIsCisJCQkJICAgICBjYXJkLT5pbmRleCk7CisJCQkJY2xlYXJfYml0KEFUTV9WRl9QQVJUSUFMLCAmdmNjLT5mbGFncyk7CisJCQkJY2xlYXJfYml0KEFUTV9WRl9BRERSLCAmdmNjLT5mbGFncyk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CiAKLSAgICAgICAgIHRtcGwgPSAodW5zaWduZWQgbG9uZyl0Y3JhICogKHVuc2lnbmVkIGxvbmcpTlNfVFNUX05VTV9FTlRSSUVTOwotICAgICAgICAgbW9kbCA9IHRtcGwgJSBjYXJkLT5tYXhfcGNyOworCQkJdGNyID0gYXRtX3Bjcl9nb2FsKCYodmNjLT5xb3MudHh0cCkpOworCQkJdGNyYSA9IHRjciA+PSAwID8gdGNyIDogLXRjcjsKIAotICAgICAgICAgbiA9IChpbnQpKHRtcGwgLyBjYXJkLT5tYXhfcGNyKTsKLSAgICAgICAgIGlmICh0Y3IgPiAwKQotICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1vZGwgPiAwKSBuKys7Ci0gICAgICAgICB9Ci0gICAgICAgICBlbHNlIGlmICh0Y3IgPT0gMCkKLSAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICgobiA9IChjYXJkLT50c3RfZnJlZV9lbnRyaWVzIC0gTlNfVFNUX1JFU0VSVkVEKSkgPD0gMCkKLQkgICAgewotICAgICAgICAgICAgICAgUFJJTlRLKCJuaWNzdGFyJWQ6IG5vIENCUiBiYW5kd2lkdGggZnJlZS5cbiIsIGNhcmQtPmluZGV4KTsKLQkgICAgICAgY2xlYXJfYml0KEFUTV9WRl9QQVJUSUFMLCZ2Y2MtPmZsYWdzKTsKLQkgICAgICAgY2xlYXJfYml0KEFUTV9WRl9BRERSLCZ2Y2MtPmZsYWdzKTsKLSAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgfQotICAgICAgICAgfQorCQkJUFJJTlRLKCJuaWNzdGFyJWQ6IHRhcmdldCBjZWxsIHJhdGUgPSAlZC5cbiIsCisJCQkgICAgICAgY2FyZC0+aW5kZXgsIHZjYy0+cW9zLnR4dHAubWF4X3Bjcik7CiAKLSAgICAgICAgIGlmIChuID09IDApCi0gICAgICAgICB7Ci0gICAgICAgICAgICBwcmludGsoIm5pY3N0YXIlZDogc2VsZWN0ZWQgYmFuZHdpZHRoIDwgZ3JhbnVsYXJpdHkuXG4iLCBjYXJkLT5pbmRleCk7Ci0JICAgIGNsZWFyX2JpdChBVE1fVkZfUEFSVElBTCwmdmNjLT5mbGFncyk7Ci0JICAgIGNsZWFyX2JpdChBVE1fVkZfQUREUiwmdmNjLT5mbGFncyk7Ci0gICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgIH0KKwkJCXRtcGwgPQorCQkJICAgICh1bnNpZ25lZCBsb25nKXRjcmEgKih1bnNpZ25lZCBsb25nKQorCQkJICAgIE5TX1RTVF9OVU1fRU5UUklFUzsKKwkJCW1vZGwgPSB0bXBsICUgY2FyZC0+bWF4X3BjcjsKIAotICAgICAgICAgaWYgKG4gPiAoY2FyZC0+dHN0X2ZyZWVfZW50cmllcyAtIE5TX1RTVF9SRVNFUlZFRCkpCi0gICAgICAgICB7Ci0gICAgICAgICAgICBQUklOVEsoIm5pY3N0YXIlZDogbm90IGVub3VnaCBmcmVlIENCUiBiYW5kd2lkdGguXG4iLCBjYXJkLT5pbmRleCk7Ci0JICAgIGNsZWFyX2JpdChBVE1fVkZfUEFSVElBTCwmdmNjLT5mbGFncyk7Ci0JICAgIGNsZWFyX2JpdChBVE1fVkZfQUREUiwmdmNjLT5mbGFncyk7Ci0gICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgIH0KLSAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhcmQtPnRzdF9mcmVlX2VudHJpZXMgLT0gbjsKKwkJCW4gPSAoaW50KSh0bXBsIC8gY2FyZC0+bWF4X3Bjcik7CisJCQlpZiAodGNyID4gMCkgeworCQkJCWlmIChtb2RsID4gMCkKKwkJCQkJbisrOworCQkJfSBlbHNlIGlmICh0Y3IgPT0gMCkgeworCQkJCWlmICgobiA9CisJCQkJICAgICAoY2FyZC0+dHN0X2ZyZWVfZW50cmllcyAtCisJCQkJICAgICAgTlNfVFNUX1JFU0VSVkVEKSkgPD0gMCkgeworCQkJCQlQUklOVEsKKwkJCQkJICAgICgibmljc3RhciVkOiBubyBDQlIgYmFuZHdpZHRoIGZyZWUuXG4iLAorCQkJCQkgICAgIGNhcmQtPmluZGV4KTsKKwkJCQkJY2xlYXJfYml0KEFUTV9WRl9QQVJUSUFMLCAmdmNjLT5mbGFncyk7CisJCQkJCWNsZWFyX2JpdChBVE1fVkZfQUREUiwgJnZjYy0+ZmxhZ3MpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CisJCQl9CiAKLSAgICAgICAgIFhQUklOVEsoIm5pY3N0YXIlZDogd3JpdGluZyAlZCB0c3QgZW50cmllcy5cbiIsIGNhcmQtPmluZGV4LCBuKTsKLSAgICAgICAgIGZvciAoZnJzY2RpID0gMDsgZnJzY2RpIDwgTlNfRlJTQ0RfTlVNOyBmcnNjZGkrKykKLSAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjYXJkLT5zY2QydmNbZnJzY2RpXSA9PSBOVUxMKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgY2FyZC0+c2NkMnZjW2Zyc2NkaV0gPSB2YzsKLSAgICAgICAgICAgICAgIGJyZWFrOwotCSAgICB9Ci0gICAgICAgICB9Ci0gICAgICAgICBpZiAoZnJzY2RpID09IE5TX0ZSU0NEX05VTSkKLSAgICAgICAgIHsKLSAgICAgICAgICAgIFBSSU5USygibmljc3RhciVkOiBubyBTQ0QgYXZhaWxhYmxlIGZvciBDQlIgY2hhbm5lbC5cbiIsIGNhcmQtPmluZGV4KTsKLSAgICAgICAgICAgIGNhcmQtPnRzdF9mcmVlX2VudHJpZXMgKz0gbjsKLQkgICAgY2xlYXJfYml0KEFUTV9WRl9QQVJUSUFMLCZ2Y2MtPmZsYWdzKTsKLQkgICAgY2xlYXJfYml0KEFUTV9WRl9BRERSLCZ2Y2MtPmZsYWdzKTsKLQkgICAgcmV0dXJuIC1FQlVTWTsKLSAgICAgICAgIH0KKwkJCWlmIChuID09IDApIHsKKwkJCQlwcmludGsKKwkJCQkgICAgKCJuaWNzdGFyJWQ6IHNlbGVjdGVkIGJhbmR3aWR0aCA8IGdyYW51bGFyaXR5LlxuIiwKKwkJCQkgICAgIGNhcmQtPmluZGV4KTsKKwkJCQljbGVhcl9iaXQoQVRNX1ZGX1BBUlRJQUwsICZ2Y2MtPmZsYWdzKTsKKwkJCQljbGVhcl9iaXQoQVRNX1ZGX0FERFIsICZ2Y2MtPmZsYWdzKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KIAotICAgICAgICAgdmMtPmNicl9zY2QgPSBOU19GUlNDRCArIGZyc2NkaSAqIE5TX0ZSU0NEX1NJWkU7CisJCQlpZiAobiA+IChjYXJkLT50c3RfZnJlZV9lbnRyaWVzIC0gTlNfVFNUX1JFU0VSVkVEKSkgeworCQkJCVBSSU5USworCQkJCSAgICAoIm5pY3N0YXIlZDogbm90IGVub3VnaCBmcmVlIENCUiBiYW5kd2lkdGguXG4iLAorCQkJCSAgICAgY2FyZC0+aW5kZXgpOworCQkJCWNsZWFyX2JpdChBVE1fVkZfUEFSVElBTCwgJnZjYy0+ZmxhZ3MpOworCQkJCWNsZWFyX2JpdChBVE1fVkZfQUREUiwgJnZjYy0+ZmxhZ3MpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfSBlbHNlCisJCQkJY2FyZC0+dHN0X2ZyZWVfZW50cmllcyAtPSBuOwogCi0gICAgICAgICBzY3EgPSBnZXRfc2NxKENCUl9TQ1FTSVpFLCB2Yy0+Y2JyX3NjZCk7Ci0gICAgICAgICBpZiAoc2NxID09IE5VTEwpCi0gICAgICAgICB7Ci0gICAgICAgICAgICBQUklOVEsoIm5pY3N0YXIlZDogY2FuJ3QgZ2V0IGZpeGVkIHJhdGUgU0NRLlxuIiwgY2FyZC0+aW5kZXgpOwotICAgICAgICAgICAgY2FyZC0+c2NkMnZjW2Zyc2NkaV0gPSBOVUxMOwotICAgICAgICAgICAgY2FyZC0+dHN0X2ZyZWVfZW50cmllcyArPSBuOwotCSAgICBjbGVhcl9iaXQoQVRNX1ZGX1BBUlRJQUwsJnZjYy0+ZmxhZ3MpOwotCSAgICBjbGVhcl9iaXQoQVRNX1ZGX0FERFIsJnZjYy0+ZmxhZ3MpOwotICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Ci0gICAgICAgICB9Ci0JIHZjLT5zY3EgPSBzY3E7Ci0gICAgICAgICB1MzJkWzBdID0gKHUzMikgdmlydF90b19idXMoc2NxLT5iYXNlKTsKLSAgICAgICAgIHUzMmRbMV0gPSAodTMyKSAweDAwMDAwMDAwOwotICAgICAgICAgdTMyZFsyXSA9ICh1MzIpIDB4ZmZmZmZmZmY7Ci0gICAgICAgICB1MzJkWzNdID0gKHUzMikgMHgwMDAwMDAwMDsKLSAgICAgICAgIG5zX3dyaXRlX3NyYW0oY2FyZCwgdmMtPmNicl9zY2QsIHUzMmQsIDQpOwotICAgICAgICAgCi0JIGZpbGxfdHN0KGNhcmQsIG4sIHZjKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHZjYy0+cW9zLnR4dHAudHJhZmZpY19jbGFzcyA9PSBBVE1fVUJSKQotICAgICAgewotICAgICAgICAgdmMtPmNicl9zY2QgPSAweDAwMDAwMDAwOwotCSB2Yy0+c2NxID0gY2FyZC0+c2NxMDsKLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYgKHZjYy0+cW9zLnR4dHAudHJhZmZpY19jbGFzcyAhPSBBVE1fTk9ORSkKLSAgICAgIHsKLSAgICAgICAgIHZjLT50eCA9IDE7Ci0JIHZjLT50eF92Y2MgPSB2Y2M7Ci0JIHZjLT50YmRfY291bnQgPSAwOwotICAgICAgfQotICAgICAgaWYgKHZjYy0+cW9zLnJ4dHAudHJhZmZpY19jbGFzcyAhPSBBVE1fTk9ORSkKLSAgICAgIHsKLSAgICAgICAgIHUzMiBzdGF0dXM7Ci0gICAgICAKLSAgICAgICAgIHZjLT5yeCA9IDE7Ci0gICAgICAgICB2Yy0+cnhfdmNjID0gdmNjOwotICAgICAgICAgdmMtPnJ4X2lvdiA9IE5VTEw7CisJCQlYUFJJTlRLKCJuaWNzdGFyJWQ6IHdyaXRpbmcgJWQgdHN0IGVudHJpZXMuXG4iLAorCQkJCWNhcmQtPmluZGV4LCBuKTsKKwkJCWZvciAoZnJzY2RpID0gMDsgZnJzY2RpIDwgTlNfRlJTQ0RfTlVNOyBmcnNjZGkrKykgeworCQkJCWlmIChjYXJkLT5zY2QydmNbZnJzY2RpXSA9PSBOVUxMKSB7CisJCQkJCWNhcmQtPnNjZDJ2Y1tmcnNjZGldID0gdmM7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmIChmcnNjZGkgPT0gTlNfRlJTQ0RfTlVNKSB7CisJCQkJUFJJTlRLCisJCQkJICAgICgibmljc3RhciVkOiBubyBTQ0QgYXZhaWxhYmxlIGZvciBDQlIgY2hhbm5lbC5cbiIsCisJCQkJICAgICBjYXJkLT5pbmRleCk7CisJCQkJY2FyZC0+dHN0X2ZyZWVfZW50cmllcyArPSBuOworCQkJCWNsZWFyX2JpdChBVE1fVkZfUEFSVElBTCwgJnZjYy0+ZmxhZ3MpOworCQkJCWNsZWFyX2JpdChBVE1fVkZfQUREUiwgJnZjYy0+ZmxhZ3MpOworCQkJCXJldHVybiAtRUJVU1k7CisJCQl9CiAKLQkgLyogT3BlbiB0aGUgY29ubmVjdGlvbiBpbiBoYXJkd2FyZSAqLwotCSBpZiAodmNjLT5xb3MuYWFsID09IEFUTV9BQUw1KQotCSAgICBzdGF0dXMgPSBOU19SQ1RFX0FBTDUgfCBOU19SQ1RFX0NPTk5FQ1RPUEVOOwotCSBlbHNlIC8qIHZjYy0+cW9zLmFhbCA9PSBBVE1fQUFMMCAqLwotCSAgICBzdGF0dXMgPSBOU19SQ1RFX0FBTDAgfCBOU19SQ1RFX0NPTk5FQ1RPUEVOOworCQkJdmMtPmNicl9zY2QgPSBOU19GUlNDRCArIGZyc2NkaSAqIE5TX0ZSU0NEX1NJWkU7CisKKwkJCXNjcSA9IGdldF9zY3EoY2FyZCwgQ0JSX1NDUVNJWkUsIHZjLT5jYnJfc2NkKTsKKwkJCWlmIChzY3EgPT0gTlVMTCkgeworCQkJCVBSSU5USygibmljc3RhciVkOiBjYW4ndCBnZXQgZml4ZWQgcmF0ZSBTQ1EuXG4iLAorCQkJCSAgICAgICBjYXJkLT5pbmRleCk7CisJCQkJY2FyZC0+c2NkMnZjW2Zyc2NkaV0gPSBOVUxMOworCQkJCWNhcmQtPnRzdF9mcmVlX2VudHJpZXMgKz0gbjsKKwkJCQljbGVhcl9iaXQoQVRNX1ZGX1BBUlRJQUwsICZ2Y2MtPmZsYWdzKTsKKwkJCQljbGVhcl9iaXQoQVRNX1ZGX0FERFIsICZ2Y2MtPmZsYWdzKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJCXZjLT5zY3EgPSBzY3E7CisJCQl1MzJkWzBdID0gc2NxX3ZpcnRfdG9fYnVzKHNjcSwgc2NxLT5iYXNlKTsKKwkJCXUzMmRbMV0gPSAodTMyKSAweDAwMDAwMDAwOworCQkJdTMyZFsyXSA9ICh1MzIpIDB4ZmZmZmZmZmY7CisJCQl1MzJkWzNdID0gKHUzMikgMHgwMDAwMDAwMDsKKwkJCW5zX3dyaXRlX3NyYW0oY2FyZCwgdmMtPmNicl9zY2QsIHUzMmQsIDQpOworCisJCQlmaWxsX3RzdChjYXJkLCBuLCB2Yyk7CisJCX0gZWxzZSBpZiAodmNjLT5xb3MudHh0cC50cmFmZmljX2NsYXNzID09IEFUTV9VQlIpIHsKKwkJCXZjLT5jYnJfc2NkID0gMHgwMDAwMDAwMDsKKwkJCXZjLT5zY3EgPSBjYXJkLT5zY3EwOworCQl9CisKKwkJaWYgKHZjYy0+cW9zLnR4dHAudHJhZmZpY19jbGFzcyAhPSBBVE1fTk9ORSkgeworCQkJdmMtPnR4ID0gMTsKKwkJCXZjLT50eF92Y2MgPSB2Y2M7CisJCQl2Yy0+dGJkX2NvdW50ID0gMDsKKwkJfQorCQlpZiAodmNjLT5xb3Mucnh0cC50cmFmZmljX2NsYXNzICE9IEFUTV9OT05FKSB7CisJCQl1MzIgc3RhdHVzOworCisJCQl2Yy0+cnggPSAxOworCQkJdmMtPnJ4X3ZjYyA9IHZjYzsKKwkJCXZjLT5yeF9pb3YgPSBOVUxMOworCisJCQkvKiBPcGVuIHRoZSBjb25uZWN0aW9uIGluIGhhcmR3YXJlICovCisJCQlpZiAodmNjLT5xb3MuYWFsID09IEFUTV9BQUw1KQorCQkJCXN0YXR1cyA9IE5TX1JDVEVfQUFMNSB8IE5TX1JDVEVfQ09OTkVDVE9QRU47CisJCQllbHNlCS8qIHZjYy0+cW9zLmFhbCA9PSBBVE1fQUFMMCAqLworCQkJCXN0YXR1cyA9IE5TX1JDVEVfQUFMMCB8IE5TX1JDVEVfQ09OTkVDVE9QRU47CiAjaWZkZWYgUkNRX1NVUFBPUlQKLSAgICAgICAgIHN0YXR1cyB8PSBOU19SQ1RFX1JBV0NFTExJTlRFTjsKKwkJCXN0YXR1cyB8PSBOU19SQ1RFX1JBV0NFTExJTlRFTjsKICNlbmRpZiAvKiBSQ1FfU1VQUE9SVCAqLwotICAgICAgICAgbnNfd3JpdGVfc3JhbShjYXJkLCBOU19SQ1QgKyAodnBpIDw8IGNhcmQtPnZjaWJpdHMgfCB2Y2kpICoKLQkgICAgICAgICAgICAgICBOU19SQ1RfRU5UUllfU0laRSwgJnN0YXR1cywgMSk7Ci0gICAgICB9Ci0gICAgICAKLSAgIH0KLSAgIAotICAgc2V0X2JpdChBVE1fVkZfUkVBRFksJnZjYy0+ZmxhZ3MpOwotICAgcmV0dXJuIDA7CisJCQluc193cml0ZV9zcmFtKGNhcmQsCisJCQkJICAgICAgTlNfUkNUICsKKwkJCQkgICAgICAodnBpIDw8IGNhcmQtPnZjaWJpdHMgfCB2Y2kpICoKKwkJCQkgICAgICBOU19SQ1RfRU5UUllfU0laRSwgJnN0YXR1cywgMSk7CisJCX0KKworCX0KKworCXNldF9iaXQoQVRNX1ZGX1JFQURZLCAmdmNjLT5mbGFncyk7CisJcmV0dXJuIDA7CiB9CiAKLQotCiBzdGF0aWMgdm9pZCBuc19jbG9zZShzdHJ1Y3QgYXRtX3ZjYyAqdmNjKQogewotICAgdmNfbWFwICp2YzsKLSAgIG5zX2RldiAqY2FyZDsKLSAgIHUzMiBkYXRhOwotICAgaW50IGk7Ci0gICAKLSAgIHZjID0gdmNjLT5kZXZfZGF0YTsKLSAgIGNhcmQgPSB2Y2MtPmRldi0+ZGV2X2RhdGE7Ci0gICBQUklOVEsoIm5pY3N0YXIlZDogY2xvc2luZyB2cGkudmNpICVkLiVkIFxuIiwgY2FyZC0+aW5kZXgsCi0gICAgICAgICAgKGludCkgdmNjLT52cGksIHZjYy0+dmNpKTsKKwl2Y19tYXAgKnZjOworCW5zX2RldiAqY2FyZDsKKwl1MzIgZGF0YTsKKwlpbnQgaTsKIAotICAgY2xlYXJfYml0KEFUTV9WRl9SRUFEWSwmdmNjLT5mbGFncyk7Ci0gICAKLSAgIGlmICh2Y2MtPnFvcy5yeHRwLnRyYWZmaWNfY2xhc3MgIT0gQVRNX05PTkUpCi0gICB7Ci0gICAgICB1MzIgYWRkcjsKLSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gICAgICAKLSAgICAgIGFkZHIgPSBOU19SQ1QgKyAodmNjLT52cGkgPDwgY2FyZC0+dmNpYml0cyB8IHZjYy0+dmNpKSAqIE5TX1JDVF9FTlRSWV9TSVpFOwotICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnJlc19sb2NrLCBmbGFncyk7Ci0gICAgICB3aGlsZShDTURfQlVTWShjYXJkKSk7Ci0gICAgICB3cml0ZWwoTlNfQ01EX0NMT1NFX0NPTk5FQ1RJT04gfCBhZGRyIDw8IDIsIGNhcmQtPm1lbWJhc2UgKyBDTUQpOwotICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+cmVzX2xvY2ssIGZsYWdzKTsKLSAgICAgIAotICAgICAgdmMtPnJ4ID0gMDsKLSAgICAgIGlmICh2Yy0+cnhfaW92ICE9IE5VTEwpCi0gICAgICB7Ci0JIHN0cnVjdCBza19idWZmICppb3ZiOwotCSB1MzIgc3RhdDsKLSAgIAotICAgICAgICAgc3RhdCA9IHJlYWRsKGNhcmQtPm1lbWJhc2UgKyBTVEFUKTsKLSAgICAgICAgIGNhcmQtPnNiZnFjID0gbnNfc3RhdF9zZmJxY19nZXQoc3RhdCk7ICAgCi0gICAgICAgICBjYXJkLT5sYmZxYyA9IG5zX3N0YXRfbGZicWNfZ2V0KHN0YXQpOworCXZjID0gdmNjLT5kZXZfZGF0YTsKKwljYXJkID0gdmNjLT5kZXYtPmRldl9kYXRhOworCVBSSU5USygibmljc3RhciVkOiBjbG9zaW5nIHZwaS52Y2kgJWQuJWQgXG4iLCBjYXJkLT5pbmRleCwKKwkgICAgICAgKGludCl2Y2MtPnZwaSwgdmNjLT52Y2kpOwogCi0gICAgICAgICBQUklOVEsoIm5pY3N0YXIlZDogY2xvc2luZyBhIFZDIHdpdGggcGVuZGluZyByeCBidWZmZXJzLlxuIiwKLQkgICAgICAgIGNhcmQtPmluZGV4KTsKLSAgICAgICAgIGlvdmIgPSB2Yy0+cnhfaW92OwotICAgICAgICAgcmVjeWNsZV9pb3ZlY19yeF9idWZzKGNhcmQsIChzdHJ1Y3QgaW92ZWMgKikgaW92Yi0+ZGF0YSwKLQkgICAgICAgICAgICAgICAgICAgICAgIE5TX1NLQihpb3ZiKS0+aW92Y250KTsKLSAgICAgICAgIE5TX1NLQihpb3ZiKS0+aW92Y250ID0gMDsKLSAgICAgICAgIE5TX1NLQihpb3ZiKS0+dmNjID0gTlVMTDsKLSAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5pbnRfbG9jaywgZmxhZ3MpOwotICAgICAgICAgcmVjeWNsZV9pb3ZfYnVmKGNhcmQsIGlvdmIpOwotICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+aW50X2xvY2ssIGZsYWdzKTsKLSAgICAgICAgIHZjLT5yeF9pb3YgPSBOVUxMOwotICAgICAgfQotICAgfQorCWNsZWFyX2JpdChBVE1fVkZfUkVBRFksICZ2Y2MtPmZsYWdzKTsKIAotICAgaWYgKHZjYy0+cW9zLnR4dHAudHJhZmZpY19jbGFzcyAhPSBBVE1fTk9ORSkKLSAgIHsKLSAgICAgIHZjLT50eCA9IDA7Ci0gICB9CisJaWYgKHZjYy0+cW9zLnJ4dHAudHJhZmZpY19jbGFzcyAhPSBBVE1fTk9ORSkgeworCQl1MzIgYWRkcjsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotICAgaWYgKHZjYy0+cW9zLnR4dHAudHJhZmZpY19jbGFzcyA9PSBBVE1fQ0JSKQotICAgewotICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgICAgIG5zX3NjcWUgKnNjcWVwOwotICAgICAgc2NxX2luZm8gKnNjcTsKKwkJYWRkciA9CisJCSAgICBOU19SQ1QgKworCQkgICAgKHZjYy0+dnBpIDw8IGNhcmQtPnZjaWJpdHMgfCB2Y2MtPnZjaSkgKiBOU19SQ1RfRU5UUllfU0laRTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnJlc19sb2NrLCBmbGFncyk7CisJCXdoaWxlIChDTURfQlVTWShjYXJkKSkgOworCQl3cml0ZWwoTlNfQ01EX0NMT1NFX0NPTk5FQ1RJT04gfCBhZGRyIDw8IDIsCisJCSAgICAgICBjYXJkLT5tZW1iYXNlICsgQ01EKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+cmVzX2xvY2ssIGZsYWdzKTsKIAotICAgICAgc2NxID0gdmMtPnNjcTsKKwkJdmMtPnJ4ID0gMDsKKwkJaWYgKHZjLT5yeF9pb3YgIT0gTlVMTCkgeworCQkJc3RydWN0IHNrX2J1ZmYgKmlvdmI7CisJCQl1MzIgc3RhdDsKIAotICAgICAgZm9yICg7OykKLSAgICAgIHsKLSAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZzY3EtPmxvY2ssIGZsYWdzKTsKLSAgICAgICAgIHNjcWVwID0gc2NxLT5uZXh0OwotICAgICAgICAgaWYgKHNjcWVwID09IHNjcS0+YmFzZSkKLSAgICAgICAgICAgIHNjcWVwID0gc2NxLT5sYXN0OwotICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2NxZXAtLTsKLSAgICAgICAgIGlmIChzY3FlcCA9PSBzY3EtPnRhaWwpCi0gICAgICAgICB7Ci0gICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY3EtPmxvY2ssIGZsYWdzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfQotICAgICAgICAgLyogSWYgdGhlIGxhc3QgZW50cnkgaXMgbm90IGEgVFNSLCBwbGFjZSBvbmUgaW4gdGhlIFNDUSBpbiBvcmRlciB0bwotICAgICAgICAgICAgYmUgYWJsZSB0byBjb21wbGV0ZWx5IGRyYWluIGl0IGFuZCB0aGVuIGNsb3NlLiAqLwotICAgICAgICAgaWYgKCFuc19zY3FlX2lzX3RzcihzY3FlcCkgJiYgc2NxLT50YWlsICE9IHNjcS0+bmV4dCkKLSAgICAgICAgIHsKLSAgICAgICAgICAgIG5zX3NjcWUgdHNyOwotICAgICAgICAgICAgdTMyIHNjZGksIHNjcWk7Ci0gICAgICAgICAgICB1MzIgZGF0YTsKLSAgICAgICAgICAgIGludCBpbmRleDsKKwkJCXN0YXQgPSByZWFkbChjYXJkLT5tZW1iYXNlICsgU1RBVCk7CisJCQljYXJkLT5zYmZxYyA9IG5zX3N0YXRfc2ZicWNfZ2V0KHN0YXQpOworCQkJY2FyZC0+bGJmcWMgPSBuc19zdGF0X2xmYnFjX2dldChzdGF0KTsKIAotICAgICAgICAgICAgdHNyLndvcmRfMSA9IG5zX3Rzcl9ta3dvcmRfMShOU19UU1JfSU5URU5BQkxFKTsKLSAgICAgICAgICAgIHNjZGkgPSAodmMtPmNicl9zY2QgLSBOU19GUlNDRCkgLyBOU19GUlNDRF9TSVpFOwotICAgICAgICAgICAgc2NxaSA9IHNjcS0+bmV4dCAtIHNjcS0+YmFzZTsKLSAgICAgICAgICAgIHRzci53b3JkXzIgPSBuc190c3JfbWt3b3JkXzIoc2NkaSwgc2NxaSk7Ci0gICAgICAgICAgICB0c3Iud29yZF8zID0gMHgwMDAwMDAwMDsKLSAgICAgICAgICAgIHRzci53b3JkXzQgPSAweDAwMDAwMDAwOwotICAgICAgICAgICAgKnNjcS0+bmV4dCA9IHRzcjsKLSAgICAgICAgICAgIGluZGV4ID0gKGludCkgc2NxaTsKLSAgICAgICAgICAgIHNjcS0+c2tiW2luZGV4XSA9IE5VTEw7Ci0gICAgICAgICAgICBpZiAoc2NxLT5uZXh0ID09IHNjcS0+bGFzdCkKLSAgICAgICAgICAgICAgIHNjcS0+bmV4dCA9IHNjcS0+YmFzZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgIHNjcS0+bmV4dCsrOwotICAgICAgICAgICAgZGF0YSA9ICh1MzIpIHZpcnRfdG9fYnVzKHNjcS0+bmV4dCk7Ci0gICAgICAgICAgICBuc193cml0ZV9zcmFtKGNhcmQsIHNjcS0+c2NkLCAmZGF0YSwgMSk7Ci0gICAgICAgICB9Ci0gICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY3EtPmxvY2ssIGZsYWdzKTsKLSAgICAgICAgIHNjaGVkdWxlKCk7Ci0gICAgICB9CisJCQlQUklOVEsKKwkJCSAgICAoIm5pY3N0YXIlZDogY2xvc2luZyBhIFZDIHdpdGggcGVuZGluZyByeCBidWZmZXJzLlxuIiwKKwkJCSAgICAgY2FyZC0+aW5kZXgpOworCQkJaW92YiA9IHZjLT5yeF9pb3Y7CisJCQlyZWN5Y2xlX2lvdmVjX3J4X2J1ZnMoY2FyZCwgKHN0cnVjdCBpb3ZlYyAqKWlvdmItPmRhdGEsCisJCQkJCSAgICAgIE5TX1BSVl9JT1ZDTlQoaW92YikpOworCQkJTlNfUFJWX0lPVkNOVChpb3ZiKSA9IDA7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aW50X2xvY2ssIGZsYWdzKTsKKwkJCXJlY3ljbGVfaW92X2J1ZihjYXJkLCBpb3ZiKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmludF9sb2NrLCBmbGFncyk7CisJCQl2Yy0+cnhfaW92ID0gTlVMTDsKKwkJfQorCX0KIAotICAgICAgLyogRnJlZSBhbGwgVFNUIGVudHJpZXMgKi8KLSAgICAgIGRhdGEgPSBOU19UU1RfT1BDT0RFX1ZBUklBQkxFOwotICAgICAgZm9yIChpID0gMDsgaSA8IE5TX1RTVF9OVU1fRU5UUklFUzsgaSsrKQotICAgICAgewotICAgICAgICAgaWYgKGNhcmQtPnRzdGUydmNbaV0gPT0gdmMpCi0JIHsKLSAgICAgICAgICAgIG5zX3dyaXRlX3NyYW0oY2FyZCwgY2FyZC0+dHN0X2FkZHIgKyBpLCAmZGF0YSwgMSk7Ci0gICAgICAgICAgICBjYXJkLT50c3RlMnZjW2ldID0gTlVMTDsKLSAgICAgICAgICAgIGNhcmQtPnRzdF9mcmVlX2VudHJpZXMrKzsKLQkgfQotICAgICAgfQotICAgICAgCi0gICAgICBjYXJkLT5zY2QydmNbKHZjLT5jYnJfc2NkIC0gTlNfRlJTQ0QpIC8gTlNfRlJTQ0RfU0laRV0gPSBOVUxMOwotICAgICAgZnJlZV9zY3EodmMtPnNjcSwgdmNjKTsKLSAgIH0KKwlpZiAodmNjLT5xb3MudHh0cC50cmFmZmljX2NsYXNzICE9IEFUTV9OT05FKSB7CisJCXZjLT50eCA9IDA7CisJfQogCi0gICAvKiByZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gdmNjIGJlZm9yZSBkZWxldGluZyBpdCAqLwotICAgaWYgKHZjYy0+cW9zLnR4dHAudHJhZmZpY19jbGFzcyAhPSBBVE1fTk9ORSkKLSAgIHsKLSAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgICAgc2NxX2luZm8gKnNjcSA9IGNhcmQtPnNjcTA7CisJaWYgKHZjYy0+cW9zLnR4dHAudHJhZmZpY19jbGFzcyA9PSBBVE1fQ0JSKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCW5zX3NjcWUgKnNjcWVwOworCQlzY3FfaW5mbyAqc2NxOwogCi0gICAgIHNwaW5fbG9ja19pcnFzYXZlKCZzY3EtPmxvY2ssIGZsYWdzKTsKKwkJc2NxID0gdmMtPnNjcTsKIAotICAgICBmb3IoaSA9IDA7IGkgPCBzY3EtPm51bV9lbnRyaWVzOyBpKyspIHsKLSAgICAgICBpZihzY3EtPnNrYltpXSAmJiBBVE1fU0tCKHNjcS0+c2tiW2ldKS0+dmNjID09IHZjYykgewotICAgICAgICBBVE1fU0tCKHNjcS0+c2tiW2ldKS0+dmNjID0gTlVMTDsKLQlhdG1fcmV0dXJuKHZjYywgc2NxLT5za2JbaV0tPnRydWVzaXplKTsKLSAgICAgICAgUFJJTlRLKCJuaWNzdGFyOiBkZWxldGVkIHBlbmRpbmcgdmNjIG1hcHBpbmdcbiIpOwotICAgICAgIH0KLSAgICAgfQorCQlmb3IgKDs7KSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2NxLT5sb2NrLCBmbGFncyk7CisJCQlzY3FlcCA9IHNjcS0+bmV4dDsKKwkJCWlmIChzY3FlcCA9PSBzY3EtPmJhc2UpCisJCQkJc2NxZXAgPSBzY3EtPmxhc3Q7CisJCQllbHNlCisJCQkJc2NxZXAtLTsKKwkJCWlmIChzY3FlcCA9PSBzY3EtPnRhaWwpIHsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY3EtPmxvY2ssIGZsYWdzKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIElmIHRoZSBsYXN0IGVudHJ5IGlzIG5vdCBhIFRTUiwgcGxhY2Ugb25lIGluIHRoZSBTQ1EgaW4gb3JkZXIgdG8KKwkJCSAgIGJlIGFibGUgdG8gY29tcGxldGVseSBkcmFpbiBpdCBhbmQgdGhlbiBjbG9zZS4gKi8KKwkJCWlmICghbnNfc2NxZV9pc190c3Ioc2NxZXApICYmIHNjcS0+dGFpbCAhPSBzY3EtPm5leHQpIHsKKwkJCQluc19zY3FlIHRzcjsKKwkJCQl1MzIgc2NkaSwgc2NxaTsKKwkJCQl1MzIgZGF0YTsKKwkJCQlpbnQgaW5kZXg7CiAKLSAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NxLT5sb2NrLCBmbGFncyk7Ci0gICB9CisJCQkJdHNyLndvcmRfMSA9IG5zX3Rzcl9ta3dvcmRfMShOU19UU1JfSU5URU5BQkxFKTsKKwkJCQlzY2RpID0gKHZjLT5jYnJfc2NkIC0gTlNfRlJTQ0QpIC8gTlNfRlJTQ0RfU0laRTsKKwkJCQlzY3FpID0gc2NxLT5uZXh0IC0gc2NxLT5iYXNlOworCQkJCXRzci53b3JkXzIgPSBuc190c3JfbWt3b3JkXzIoc2NkaSwgc2NxaSk7CisJCQkJdHNyLndvcmRfMyA9IDB4MDAwMDAwMDA7CisJCQkJdHNyLndvcmRfNCA9IDB4MDAwMDAwMDA7CisJCQkJKnNjcS0+bmV4dCA9IHRzcjsKKwkJCQlpbmRleCA9IChpbnQpc2NxaTsKKwkJCQlzY3EtPnNrYltpbmRleF0gPSBOVUxMOworCQkJCWlmIChzY3EtPm5leHQgPT0gc2NxLT5sYXN0KQorCQkJCQlzY3EtPm5leHQgPSBzY3EtPmJhc2U7CisJCQkJZWxzZQorCQkJCQlzY3EtPm5leHQrKzsKKwkJCQlkYXRhID0gc2NxX3ZpcnRfdG9fYnVzKHNjcSwgc2NxLT5uZXh0KTsKKwkJCQluc193cml0ZV9zcmFtKGNhcmQsIHNjcS0+c2NkLCAmZGF0YSwgMSk7CisJCQl9CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY3EtPmxvY2ssIGZsYWdzKTsKKwkJCXNjaGVkdWxlKCk7CisJCX0KIAotICAgdmNjLT5kZXZfZGF0YSA9IE5VTEw7Ci0gICBjbGVhcl9iaXQoQVRNX1ZGX1BBUlRJQUwsJnZjYy0+ZmxhZ3MpOwotICAgY2xlYXJfYml0KEFUTV9WRl9BRERSLCZ2Y2MtPmZsYWdzKTsKKwkJLyogRnJlZSBhbGwgVFNUIGVudHJpZXMgKi8KKwkJZGF0YSA9IE5TX1RTVF9PUENPREVfVkFSSUFCTEU7CisJCWZvciAoaSA9IDA7IGkgPCBOU19UU1RfTlVNX0VOVFJJRVM7IGkrKykgeworCQkJaWYgKGNhcmQtPnRzdGUydmNbaV0gPT0gdmMpIHsKKwkJCQluc193cml0ZV9zcmFtKGNhcmQsIGNhcmQtPnRzdF9hZGRyICsgaSwgJmRhdGEsCisJCQkJCSAgICAgIDEpOworCQkJCWNhcmQtPnRzdGUydmNbaV0gPSBOVUxMOworCQkJCWNhcmQtPnRzdF9mcmVlX2VudHJpZXMrKzsKKwkJCX0KKwkJfQorCisJCWNhcmQtPnNjZDJ2Y1sodmMtPmNicl9zY2QgLSBOU19GUlNDRCkgLyBOU19GUlNDRF9TSVpFXSA9IE5VTEw7CisJCWZyZWVfc2NxKGNhcmQsIHZjLT5zY3EsIHZjYyk7CisJfQorCisJLyogcmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIHZjYyBiZWZvcmUgZGVsZXRpbmcgaXQgKi8KKwlpZiAodmNjLT5xb3MudHh0cC50cmFmZmljX2NsYXNzICE9IEFUTV9OT05FKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXNjcV9pbmZvICpzY3EgPSBjYXJkLT5zY3EwOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZzY3EtPmxvY2ssIGZsYWdzKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2NxLT5udW1fZW50cmllczsgaSsrKSB7CisJCQlpZiAoc2NxLT5za2JbaV0gJiYgQVRNX1NLQihzY3EtPnNrYltpXSktPnZjYyA9PSB2Y2MpIHsKKwkJCQlBVE1fU0tCKHNjcS0+c2tiW2ldKS0+dmNjID0gTlVMTDsKKwkJCQlhdG1fcmV0dXJuKHZjYywgc2NxLT5za2JbaV0tPnRydWVzaXplKTsKKwkJCQlQUklOVEsKKwkJCQkgICAgKCJuaWNzdGFyOiBkZWxldGVkIHBlbmRpbmcgdmNjIG1hcHBpbmdcbiIpOworCQkJfQorCQl9CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NxLT5sb2NrLCBmbGFncyk7CisJfQorCisJdmNjLT5kZXZfZGF0YSA9IE5VTEw7CisJY2xlYXJfYml0KEFUTV9WRl9QQVJUSUFMLCAmdmNjLT5mbGFncyk7CisJY2xlYXJfYml0KEFUTV9WRl9BRERSLCAmdmNjLT5mbGFncyk7CiAKICNpZmRlZiBSWF9ERUJVRwotICAgewotICAgICAgdTMyIHN0YXQsIGNmZzsKLSAgICAgIHN0YXQgPSByZWFkbChjYXJkLT5tZW1iYXNlICsgU1RBVCk7Ci0gICAgICBjZmcgPSByZWFkbChjYXJkLT5tZW1iYXNlICsgQ0ZHKTsKLSAgICAgIHByaW50aygiU1RBVCA9IDB4JTA4WCAgQ0ZHID0gMHglMDhYICBcbiIsIHN0YXQsIGNmZyk7Ci0gICAgICBwcmludGsoIlRTUTogYmFzZSA9IDB4JTA4WCAgbmV4dCA9IDB4JTA4WCAgbGFzdCA9IDB4JTA4WCAgVFNRVCA9IDB4JTA4WCBcbiIsCi0gICAgICAgICAgICAgKHUzMikgY2FyZC0+dHNxLmJhc2UsICh1MzIpIGNhcmQtPnRzcS5uZXh0LCh1MzIpIGNhcmQtPnRzcS5sYXN0LAotCSAgICAgcmVhZGwoY2FyZC0+bWVtYmFzZSArIFRTUVQpKTsKLSAgICAgIHByaW50aygiUlNROiBiYXNlID0gMHglMDhYICBuZXh0ID0gMHglMDhYICBsYXN0ID0gMHglMDhYICBSU1FUID0gMHglMDhYIFxuIiwKLSAgICAgICAgICAgICAodTMyKSBjYXJkLT5yc3EuYmFzZSwgKHUzMikgY2FyZC0+cnNxLm5leHQsKHUzMikgY2FyZC0+cnNxLmxhc3QsCi0JICAgICByZWFkbChjYXJkLT5tZW1iYXNlICsgUlNRVCkpOwotICAgICAgcHJpbnRrKCJFbXB0eSBmcmVlIGJ1ZmZlciBxdWV1ZSBpbnRlcnJ1cHQgJXMgXG4iLAotICAgICAgICAgICAgIGNhcmQtPmVmYmllID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7Ci0gICAgICBwcmludGsoIlNCQ05UID0gJWQgIGNvdW50ID0gJWQgICBMQkNOVCA9ICVkIGNvdW50ID0gJWQgXG4iLAotICAgICAgICAgICAgIG5zX3N0YXRfc2ZicWNfZ2V0KHN0YXQpLCBjYXJkLT5zYnBvb2wuY291bnQsCi0JICAgICBuc19zdGF0X2xmYnFjX2dldChzdGF0KSwgY2FyZC0+bGJwb29sLmNvdW50KTsKLSAgICAgIHByaW50aygiaGJwb29sLmNvdW50ID0gJWQgIGlvdnBvb2wuY291bnQgPSAlZCBcbiIsCi0gICAgICAgICAgICAgY2FyZC0+aGJwb29sLmNvdW50LCBjYXJkLT5pb3Zwb29sLmNvdW50KTsKLSAgIH0KKwl7CisJCXUzMiBzdGF0LCBjZmc7CisJCXN0YXQgPSByZWFkbChjYXJkLT5tZW1iYXNlICsgU1RBVCk7CisJCWNmZyA9IHJlYWRsKGNhcmQtPm1lbWJhc2UgKyBDRkcpOworCQlwcmludGsoIlNUQVQgPSAweCUwOFggIENGRyA9IDB4JTA4WCAgXG4iLCBzdGF0LCBjZmcpOworCQlwcmludGsKKwkJICAgICgiVFNROiBiYXNlID0gMHglcCAgbmV4dCA9IDB4JXAgIGxhc3QgPSAweCVwICBUU1FUID0gMHglMDhYIFxuIiwKKwkJICAgICBjYXJkLT50c3EuYmFzZSwgY2FyZC0+dHNxLm5leHQsCisJCSAgICAgY2FyZC0+dHNxLmxhc3QsIHJlYWRsKGNhcmQtPm1lbWJhc2UgKyBUU1FUKSk7CisJCXByaW50aworCQkgICAgKCJSU1E6IGJhc2UgPSAweCVwICBuZXh0ID0gMHglcCAgbGFzdCA9IDB4JXAgIFJTUVQgPSAweCUwOFggXG4iLAorCQkgICAgIGNhcmQtPnJzcS5iYXNlLCBjYXJkLT5yc3EubmV4dCwKKwkJICAgICBjYXJkLT5yc3EubGFzdCwgcmVhZGwoY2FyZC0+bWVtYmFzZSArIFJTUVQpKTsKKwkJcHJpbnRrKCJFbXB0eSBmcmVlIGJ1ZmZlciBxdWV1ZSBpbnRlcnJ1cHQgJXMgXG4iLAorCQkgICAgICAgY2FyZC0+ZWZiaWUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKKwkJcHJpbnRrKCJTQkNOVCA9ICVkICBjb3VudCA9ICVkICAgTEJDTlQgPSAlZCBjb3VudCA9ICVkIFxuIiwKKwkJICAgICAgIG5zX3N0YXRfc2ZicWNfZ2V0KHN0YXQpLCBjYXJkLT5zYnBvb2wuY291bnQsCisJCSAgICAgICBuc19zdGF0X2xmYnFjX2dldChzdGF0KSwgY2FyZC0+bGJwb29sLmNvdW50KTsKKwkJcHJpbnRrKCJoYnBvb2wuY291bnQgPSAlZCAgaW92cG9vbC5jb3VudCA9ICVkIFxuIiwKKwkJICAgICAgIGNhcmQtPmhicG9vbC5jb3VudCwgY2FyZC0+aW92cG9vbC5jb3VudCk7CisJfQogI2VuZGlmIC8qIFJYX0RFQlVHICovCiB9CiAKLQotCi1zdGF0aWMgdm9pZCBmaWxsX3RzdChuc19kZXYgKmNhcmQsIGludCBuLCB2Y19tYXAgKnZjKQorc3RhdGljIHZvaWQgZmlsbF90c3QobnNfZGV2ICogY2FyZCwgaW50IG4sIHZjX21hcCAqIHZjKQogewotICAgdTMyIG5ld190c3Q7Ci0gICB1bnNpZ25lZCBsb25nIGNsOwotICAgaW50IGUsIHI7Ci0gICB1MzIgZGF0YTsKLSAgICAgIAotICAgLyogSXQgd291bGQgYmUgdmVyeSBjb21wbGljYXRlZCB0byBrZWVwIHRoZSB0d28gVFNUcyBzeW5jaHJvbml6ZWQgd2hpbGUKLSAgICAgIGFzc3VyaW5nIHRoYXQgd3JpdGVzIGFyZSBvbmx5IG1hZGUgdG8gdGhlIGluYWN0aXZlIFRTVC4gU28sIGZvciBub3cgSQotICAgICAgd2lsbCB1c2Ugb25seSBvbmUgVFNULiBJZiBwcm9ibGVtcyBvY2N1ciwgSSB3aWxsIGNoYW5nZSB0aGlzIGFnYWluICovCi0gICAKLSAgIG5ld190c3QgPSBjYXJkLT50c3RfYWRkcjsKKwl1MzIgbmV3X3RzdDsKKwl1bnNpZ25lZCBsb25nIGNsOworCWludCBlLCByOworCXUzMiBkYXRhOwogCi0gICAvKiBGaWxsIHByb2NlZHVyZSAqLworCS8qIEl0IHdvdWxkIGJlIHZlcnkgY29tcGxpY2F0ZWQgdG8ga2VlcCB0aGUgdHdvIFRTVHMgc3luY2hyb25pemVkIHdoaWxlCisJICAgYXNzdXJpbmcgdGhhdCB3cml0ZXMgYXJlIG9ubHkgbWFkZSB0byB0aGUgaW5hY3RpdmUgVFNULiBTbywgZm9yIG5vdyBJCisJICAgd2lsbCB1c2Ugb25seSBvbmUgVFNULiBJZiBwcm9ibGVtcyBvY2N1ciwgSSB3aWxsIGNoYW5nZSB0aGlzIGFnYWluICovCiAKLSAgIGZvciAoZSA9IDA7IGUgPCBOU19UU1RfTlVNX0VOVFJJRVM7IGUrKykKLSAgIHsKLSAgICAgIGlmIChjYXJkLT50c3RlMnZjW2VdID09IE5VTEwpCi0gICAgICAgICBicmVhazsKLSAgIH0KLSAgIGlmIChlID09IE5TX1RTVF9OVU1fRU5UUklFUykgewotICAgICAgcHJpbnRrKCJuaWNzdGFyJWQ6IE5vIGZyZWUgVFNUIGVudHJpZXMgZm91bmQuIFxuIiwgY2FyZC0+aW5kZXgpOwotICAgICAgcmV0dXJuOwotICAgfQorCW5ld190c3QgPSBjYXJkLT50c3RfYWRkcjsKIAotICAgciA9IG47Ci0gICBjbCA9IE5TX1RTVF9OVU1fRU5UUklFUzsKLSAgIGRhdGEgPSBuc190c3RlX21ha2UoTlNfVFNUX09QQ09ERV9GSVhFRCwgdmMtPmNicl9zY2QpOwotICAgICAgCi0gICB3aGlsZSAociA+IDApCi0gICB7Ci0gICAgICBpZiAoY2wgPj0gTlNfVFNUX05VTV9FTlRSSUVTICYmIGNhcmQtPnRzdGUydmNbZV0gPT0gTlVMTCkKLSAgICAgIHsKLSAgICAgICAgIGNhcmQtPnRzdGUydmNbZV0gPSB2YzsKLSAgICAgICAgIG5zX3dyaXRlX3NyYW0oY2FyZCwgbmV3X3RzdCArIGUsICZkYXRhLCAxKTsKLSAgICAgICAgIGNsIC09IE5TX1RTVF9OVU1fRU5UUklFUzsKLSAgICAgICAgIHItLTsKLSAgICAgIH0KKwkvKiBGaWxsIHByb2NlZHVyZSAqLwogCi0gICAgICBpZiAoKytlID09IE5TX1RTVF9OVU1fRU5UUklFUykgewotICAgICAgICAgZSA9IDA7Ci0gICAgICB9Ci0gICAgICBjbCArPSBuOwotICAgfQotICAgCi0gICAvKiBFbmQgb2YgZmlsbCBwcm9jZWR1cmUgKi8KLSAgIAotICAgZGF0YSA9IG5zX3RzdGVfbWFrZShOU19UU1RfT1BDT0RFX0VORCwgbmV3X3RzdCk7Ci0gICBuc193cml0ZV9zcmFtKGNhcmQsIG5ld190c3QgKyBOU19UU1RfTlVNX0VOVFJJRVMsICZkYXRhLCAxKTsKLSAgIG5zX3dyaXRlX3NyYW0oY2FyZCwgY2FyZC0+dHN0X2FkZHIgKyBOU19UU1RfTlVNX0VOVFJJRVMsICZkYXRhLCAxKTsKLSAgIGNhcmQtPnRzdF9hZGRyID0gbmV3X3RzdDsKKwlmb3IgKGUgPSAwOyBlIDwgTlNfVFNUX05VTV9FTlRSSUVTOyBlKyspIHsKKwkJaWYgKGNhcmQtPnRzdGUydmNbZV0gPT0gTlVMTCkKKwkJCWJyZWFrOworCX0KKwlpZiAoZSA9PSBOU19UU1RfTlVNX0VOVFJJRVMpIHsKKwkJcHJpbnRrKCJuaWNzdGFyJWQ6IE5vIGZyZWUgVFNUIGVudHJpZXMgZm91bmQuIFxuIiwgY2FyZC0+aW5kZXgpOworCQlyZXR1cm47CisJfQorCisJciA9IG47CisJY2wgPSBOU19UU1RfTlVNX0VOVFJJRVM7CisJZGF0YSA9IG5zX3RzdGVfbWFrZShOU19UU1RfT1BDT0RFX0ZJWEVELCB2Yy0+Y2JyX3NjZCk7CisKKwl3aGlsZSAociA+IDApIHsKKwkJaWYgKGNsID49IE5TX1RTVF9OVU1fRU5UUklFUyAmJiBjYXJkLT50c3RlMnZjW2VdID09IE5VTEwpIHsKKwkJCWNhcmQtPnRzdGUydmNbZV0gPSB2YzsKKwkJCW5zX3dyaXRlX3NyYW0oY2FyZCwgbmV3X3RzdCArIGUsICZkYXRhLCAxKTsKKwkJCWNsIC09IE5TX1RTVF9OVU1fRU5UUklFUzsKKwkJCXItLTsKKwkJfQorCisJCWlmICgrK2UgPT0gTlNfVFNUX05VTV9FTlRSSUVTKSB7CisJCQllID0gMDsKKwkJfQorCQljbCArPSBuOworCX0KKworCS8qIEVuZCBvZiBmaWxsIHByb2NlZHVyZSAqLworCisJZGF0YSA9IG5zX3RzdGVfbWFrZShOU19UU1RfT1BDT0RFX0VORCwgbmV3X3RzdCk7CisJbnNfd3JpdGVfc3JhbShjYXJkLCBuZXdfdHN0ICsgTlNfVFNUX05VTV9FTlRSSUVTLCAmZGF0YSwgMSk7CisJbnNfd3JpdGVfc3JhbShjYXJkLCBjYXJkLT50c3RfYWRkciArIE5TX1RTVF9OVU1fRU5UUklFUywgJmRhdGEsIDEpOworCWNhcmQtPnRzdF9hZGRyID0gbmV3X3RzdDsKIH0KIAotCi0KIHN0YXRpYyBpbnQgbnNfc2VuZChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotICAgbnNfZGV2ICpjYXJkOwotICAgdmNfbWFwICp2YzsKLSAgIHNjcV9pbmZvICpzY3E7Ci0gICB1bnNpZ25lZCBsb25nIGJ1ZmxlbjsKLSAgIG5zX3NjcWUgc2NxZTsKLSAgIHUzMiBmbGFnczsJCS8qIFRCRCBmbGFncywgbm90IENQVSBmbGFncyAqLwotICAgCi0gICBjYXJkID0gdmNjLT5kZXYtPmRldl9kYXRhOwotICAgVFhQUklOVEsoIm5pY3N0YXIlZDogbnNfc2VuZCgpIGNhbGxlZC5cbiIsIGNhcmQtPmluZGV4KTsKLSAgIGlmICgodmMgPSAodmNfbWFwICopIHZjYy0+ZGV2X2RhdGEpID09IE5VTEwpCi0gICB7Ci0gICAgICBwcmludGsoIm5pY3N0YXIlZDogdmNjLT5kZXZfZGF0YSA9PSBOVUxMIG9uIG5zX3NlbmQoKS5cbiIsIGNhcmQtPmluZGV4KTsKLSAgICAgIGF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnR4X2Vycik7Ci0gICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICB9Ci0gICAKLSAgIGlmICghdmMtPnR4KQotICAgewotICAgICAgcHJpbnRrKCJuaWNzdGFyJWQ6IFRyeWluZyB0byB0cmFuc21pdCBvbiBhIG5vbi10eCBWQy5cbiIsIGNhcmQtPmluZGV4KTsKLSAgICAgIGF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnR4X2Vycik7Ci0gICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICB9Ci0gICAKLSAgIGlmICh2Y2MtPnFvcy5hYWwgIT0gQVRNX0FBTDUgJiYgdmNjLT5xb3MuYWFsICE9IEFUTV9BQUwwKQotICAgewotICAgICAgcHJpbnRrKCJuaWNzdGFyJWQ6IE9ubHkgQUFMMCBhbmQgQUFMNSBhcmUgc3VwcG9ydGVkLlxuIiwgY2FyZC0+aW5kZXgpOwotICAgICAgYXRvbWljX2luYygmdmNjLT5zdGF0cy0+dHhfZXJyKTsKLSAgICAgIGRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0gICAgICByZXR1cm4gLUVJTlZBTDsKLSAgIH0KLSAgIAotICAgaWYgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgIT0gMCkKLSAgIHsKLSAgICAgIHByaW50aygibmljc3RhciVkOiBObyBzY2F0dGVyLWdhdGhlciB5ZXQuXG4iLCBjYXJkLT5pbmRleCk7Ci0gICAgICBhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT50eF9lcnIpOwotICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLSAgICAgIHJldHVybiAtRUlOVkFMOwotICAgfQotICAgCi0gICBBVE1fU0tCKHNrYiktPnZjYyA9IHZjYzsKKwluc19kZXYgKmNhcmQ7CisJdmNfbWFwICp2YzsKKwlzY3FfaW5mbyAqc2NxOworCXVuc2lnbmVkIGxvbmcgYnVmbGVuOworCW5zX3NjcWUgc2NxZTsKKwl1MzIgZmxhZ3M7CQkvKiBUQkQgZmxhZ3MsIG5vdCBDUFUgZmxhZ3MgKi8KIAotICAgaWYgKHZjYy0+cW9zLmFhbCA9PSBBVE1fQUFMNSkKLSAgIHsKLSAgICAgIGJ1ZmxlbiA9IChza2ItPmxlbiArIDQ3ICsgOCkgLyA0OCAqIDQ4OwkvKiBNdWx0aXBsZSBvZiA0OCAqLwotICAgICAgZmxhZ3MgPSBOU19UQkRfQUFMNTsKLSAgICAgIHNjcWUud29yZF8yID0gY3B1X3RvX2xlMzIoKHUzMikgdmlydF90b19idXMoc2tiLT5kYXRhKSk7Ci0gICAgICBzY3FlLndvcmRfMyA9IGNwdV90b19sZTMyKCh1MzIpIHNrYi0+bGVuKTsKLSAgICAgIHNjcWUud29yZF80ID0gbnNfdGJkX21rd29yZF80KDAsICh1MzIpIHZjYy0+dnBpLCAodTMyKSB2Y2MtPnZjaSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUTV9TS0Ioc2tiKS0+YXRtX29wdGlvbnMgJiBBVE1fQVRNT1BUX0NMUCA/IDEgOiAwKTsKLSAgICAgIGZsYWdzIHw9IE5TX1RCRF9FT1BEVTsKLSAgIH0KLSAgIGVsc2UgLyogKHZjYy0+cW9zLmFhbCA9PSBBVE1fQUFMMCkgKi8KLSAgIHsKLSAgICAgIGJ1ZmxlbiA9IEFUTV9DRUxMX1BBWUxPQUQ7CS8qIGkuZS4sIDQ4IGJ5dGVzICovCi0gICAgICBmbGFncyA9IE5TX1RCRF9BQUwwOwotICAgICAgc2NxZS53b3JkXzIgPSBjcHVfdG9fbGUzMigodTMyKSB2aXJ0X3RvX2J1cyhza2ItPmRhdGEpICsgTlNfQUFMMF9IRUFERVIpOwotICAgICAgc2NxZS53b3JkXzMgPSBjcHVfdG9fbGUzMigweDAwMDAwMDAwKTsKLSAgICAgIGlmICgqc2tiLT5kYXRhICYgMHgwMikJLyogUGF5bG9hZCB0eXBlIDEgLSBlbmQgb2YgcGR1ICovCi0gICAgICAgICBmbGFncyB8PSBOU19UQkRfRU9QRFU7Ci0gICAgICBzY3FlLndvcmRfNCA9IGNwdV90b19sZTMyKCooKHUzMiAqKSBza2ItPmRhdGEpICYgfk5TX1RCRF9WQ19NQVNLKTsKLSAgICAgIC8qIEZvcmNlIHRoZSBWUEkvVkNJIHRvIGJlIHRoZSBzYW1lIGFzIGluIFZDQyBzdHJ1Y3QgKi8KLSAgICAgIHNjcWUud29yZF80IHw9IGNwdV90b19sZTMyKCgoKHUzMikgdmNjLT52cGkpIDw8IE5TX1RCRF9WUElfU0hJRlQgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1MzIpIHZjYy0+dmNpKSA8PCBOU19UQkRfVkNJX1NISUZUKSAmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU19UQkRfVkNfTUFTSyk7Ci0gICB9CisJY2FyZCA9IHZjYy0+ZGV2LT5kZXZfZGF0YTsKKwlUWFBSSU5USygibmljc3RhciVkOiBuc19zZW5kKCkgY2FsbGVkLlxuIiwgY2FyZC0+aW5kZXgpOworCWlmICgodmMgPSAodmNfbWFwICopIHZjYy0+ZGV2X2RhdGEpID09IE5VTEwpIHsKKwkJcHJpbnRrKCJuaWNzdGFyJWQ6IHZjYy0+ZGV2X2RhdGEgPT0gTlVMTCBvbiBuc19zZW5kKCkuXG4iLAorCQkgICAgICAgY2FyZC0+aW5kZXgpOworCQlhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT50eF9lcnIpOworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKLSAgIGlmICh2Y2MtPnFvcy50eHRwLnRyYWZmaWNfY2xhc3MgPT0gQVRNX0NCUikKLSAgIHsKLSAgICAgIHNjcWUud29yZF8xID0gbnNfdGJkX21rd29yZF8xX25vdmJyKGZsYWdzLCAodTMyKSBidWZsZW4pOwotICAgICAgc2NxID0gKCh2Y19tYXAgKikgdmNjLT5kZXZfZGF0YSktPnNjcTsKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgIHNjcWUud29yZF8xID0gbnNfdGJkX21rd29yZF8xKGZsYWdzLCAodTMyKSAxLCAodTMyKSAxLCAodTMyKSBidWZsZW4pOwotICAgICAgc2NxID0gY2FyZC0+c2NxMDsKLSAgIH0KKwlpZiAoIXZjLT50eCkgeworCQlwcmludGsoIm5pY3N0YXIlZDogVHJ5aW5nIHRvIHRyYW5zbWl0IG9uIGEgbm9uLXR4IFZDLlxuIiwKKwkJICAgICAgIGNhcmQtPmluZGV4KTsKKwkJYXRvbWljX2luYygmdmNjLT5zdGF0cy0+dHhfZXJyKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCi0gICBpZiAocHVzaF9zY3FlKGNhcmQsIHZjLCBzY3EsICZzY3FlLCBza2IpICE9IDApCi0gICB7Ci0gICAgICBhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT50eF9lcnIpOwotICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLSAgICAgIHJldHVybiAtRUlPOwotICAgfQotICAgYXRvbWljX2luYygmdmNjLT5zdGF0cy0+dHgpOworCWlmICh2Y2MtPnFvcy5hYWwgIT0gQVRNX0FBTDUgJiYgdmNjLT5xb3MuYWFsICE9IEFUTV9BQUwwKSB7CisJCXByaW50aygibmljc3RhciVkOiBPbmx5IEFBTDAgYW5kIEFBTDUgYXJlIHN1cHBvcnRlZC5cbiIsCisJCSAgICAgICBjYXJkLT5pbmRleCk7CisJCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnR4X2Vycik7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAotICAgcmV0dXJuIDA7CisJaWYgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgIT0gMCkgeworCQlwcmludGsoIm5pY3N0YXIlZDogTm8gc2NhdHRlci1nYXRoZXIgeWV0LlxuIiwgY2FyZC0+aW5kZXgpOworCQlhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT50eF9lcnIpOworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlBVE1fU0tCKHNrYiktPnZjYyA9IHZjYzsKKworCU5TX1BSVl9ETUEoc2tiKSA9IHBjaV9tYXBfc2luZ2xlKGNhcmQtPnBjaWRldiwgc2tiLT5kYXRhLAorCQkJCQkgc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCisJaWYgKHZjYy0+cW9zLmFhbCA9PSBBVE1fQUFMNSkgeworCQlidWZsZW4gPSAoc2tiLT5sZW4gKyA0NyArIDgpIC8gNDggKiA0ODsJLyogTXVsdGlwbGUgb2YgNDggKi8KKwkJZmxhZ3MgPSBOU19UQkRfQUFMNTsKKwkJc2NxZS53b3JkXzIgPSBjcHVfdG9fbGUzMihOU19QUlZfRE1BKHNrYikpOworCQlzY3FlLndvcmRfMyA9IGNwdV90b19sZTMyKHNrYi0+bGVuKTsKKwkJc2NxZS53b3JkXzQgPQorCQkgICAgbnNfdGJkX21rd29yZF80KDAsICh1MzIpIHZjYy0+dnBpLCAodTMyKSB2Y2MtPnZjaSwgMCwKKwkJCQkgICAgQVRNX1NLQihza2IpLT4KKwkJCQkgICAgYXRtX29wdGlvbnMgJiBBVE1fQVRNT1BUX0NMUCA/IDEgOiAwKTsKKwkJZmxhZ3MgfD0gTlNfVEJEX0VPUERVOworCX0gZWxzZSB7CQkvKiAodmNjLT5xb3MuYWFsID09IEFUTV9BQUwwKSAqLworCisJCWJ1ZmxlbiA9IEFUTV9DRUxMX1BBWUxPQUQ7CS8qIGkuZS4sIDQ4IGJ5dGVzICovCisJCWZsYWdzID0gTlNfVEJEX0FBTDA7CisJCXNjcWUud29yZF8yID0gY3B1X3RvX2xlMzIoTlNfUFJWX0RNQShza2IpICsgTlNfQUFMMF9IRUFERVIpOworCQlzY3FlLndvcmRfMyA9IGNwdV90b19sZTMyKDB4MDAwMDAwMDApOworCQlpZiAoKnNrYi0+ZGF0YSAmIDB4MDIpCS8qIFBheWxvYWQgdHlwZSAxIC0gZW5kIG9mIHBkdSAqLworCQkJZmxhZ3MgfD0gTlNfVEJEX0VPUERVOworCQlzY3FlLndvcmRfNCA9CisJCSAgICBjcHVfdG9fbGUzMigqKCh1MzIgKikgc2tiLT5kYXRhKSAmIH5OU19UQkRfVkNfTUFTSyk7CisJCS8qIEZvcmNlIHRoZSBWUEkvVkNJIHRvIGJlIHRoZSBzYW1lIGFzIGluIFZDQyBzdHJ1Y3QgKi8KKwkJc2NxZS53b3JkXzQgfD0KKwkJICAgIGNwdV90b19sZTMyKCgoKHUzMikgdmNjLT4KKwkJCQkgIHZwaSkgPDwgTlNfVEJEX1ZQSV9TSElGVCB8ICgodTMyKSB2Y2MtPgorCQkJCQkJCSAgICAgIHZjaSkgPDwKKwkJCQkgTlNfVEJEX1ZDSV9TSElGVCkgJiBOU19UQkRfVkNfTUFTSyk7CisJfQorCisJaWYgKHZjYy0+cW9zLnR4dHAudHJhZmZpY19jbGFzcyA9PSBBVE1fQ0JSKSB7CisJCXNjcWUud29yZF8xID0gbnNfdGJkX21rd29yZF8xX25vdmJyKGZsYWdzLCAodTMyKSBidWZsZW4pOworCQlzY3EgPSAoKHZjX21hcCAqKSB2Y2MtPmRldl9kYXRhKS0+c2NxOworCX0gZWxzZSB7CisJCXNjcWUud29yZF8xID0KKwkJICAgIG5zX3RiZF9ta3dvcmRfMShmbGFncywgKHUzMikgMSwgKHUzMikgMSwgKHUzMikgYnVmbGVuKTsKKwkJc2NxID0gY2FyZC0+c2NxMDsKKwl9CisKKwlpZiAocHVzaF9zY3FlKGNhcmQsIHZjLCBzY3EsICZzY3FlLCBza2IpICE9IDApIHsKKwkJYXRvbWljX2luYygmdmNjLT5zdGF0cy0+dHhfZXJyKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnR4KTsKKworCXJldHVybiAwOwogfQogCi0KLQotc3RhdGljIGludCBwdXNoX3NjcWUobnNfZGV2ICpjYXJkLCB2Y19tYXAgKnZjLCBzY3FfaW5mbyAqc2NxLCBuc19zY3FlICp0YmQsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCBwdXNoX3NjcWUobnNfZGV2ICogY2FyZCwgdmNfbWFwICogdmMsIHNjcV9pbmZvICogc2NxLCBuc19zY3FlICogdGJkLAorCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0gICB1bnNpZ25lZCBsb25nIGZsYWdzOwotICAgbnNfc2NxZSB0c3I7Ci0gICB1MzIgc2NkaSwgc2NxaTsKLSAgIGludCBzY3FfaXNfdmJyOwotICAgdTMyIGRhdGE7Ci0gICBpbnQgaW5kZXg7Ci0gICAKLSAgIHNwaW5fbG9ja19pcnFzYXZlKCZzY3EtPmxvY2ssIGZsYWdzKTsKLSAgIHdoaWxlIChzY3EtPnRhaWwgPT0gc2NxLT5uZXh0KQotICAgewotICAgICAgaWYgKGluX2ludGVycnVwdCgpKSB7Ci0gICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY3EtPmxvY2ssIGZsYWdzKTsKLSAgICAgICAgIHByaW50aygibmljc3RhciVkOiBFcnJvciBwdXNoaW5nIFRCRC5cbiIsIGNhcmQtPmluZGV4KTsKLSAgICAgICAgIHJldHVybiAxOwotICAgICAgfQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbnNfc2NxZSB0c3I7CisJdTMyIHNjZGksIHNjcWk7CisJaW50IHNjcV9pc192YnI7CisJdTMyIGRhdGE7CisJaW50IGluZGV4OwogCi0gICAgICBzY3EtPmZ1bGwgPSAxOwotICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NxLT5sb2NrLCBmbGFncyk7Ci0gICAgICBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJnNjcS0+c2NxZnVsbF93YWl0cSwgU0NRRlVMTF9USU1FT1VUKTsKLSAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZzY3EtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2NxLT5sb2NrLCBmbGFncyk7CisJd2hpbGUgKHNjcS0+dGFpbCA9PSBzY3EtPm5leHQpIHsKKwkJaWYgKGluX2ludGVycnVwdCgpKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY3EtPmxvY2ssIGZsYWdzKTsKKwkJCXByaW50aygibmljc3RhciVkOiBFcnJvciBwdXNoaW5nIFRCRC5cbiIsIGNhcmQtPmluZGV4KTsKKwkJCXJldHVybiAxOworCQl9CiAKLSAgICAgIGlmIChzY3EtPmZ1bGwpIHsKLSAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjcS0+bG9jaywgZmxhZ3MpOwotICAgICAgICAgcHJpbnRrKCJuaWNzdGFyJWQ6IFRpbWVvdXQgcHVzaGluZyBUQkQuXG4iLCBjYXJkLT5pbmRleCk7Ci0gICAgICAgICByZXR1cm4gMTsKLSAgICAgIH0KLSAgIH0KLSAgICpzY3EtPm5leHQgPSAqdGJkOwotICAgaW5kZXggPSAoaW50KSAoc2NxLT5uZXh0IC0gc2NxLT5iYXNlKTsKLSAgIHNjcS0+c2tiW2luZGV4XSA9IHNrYjsKLSAgIFhQUklOVEsoIm5pY3N0YXIlZDogc2VuZGluZyBza2IgYXQgMHgleCAocG9zICVkKS5cbiIsCi0gICAgICAgICAgIGNhcmQtPmluZGV4LCAodTMyKSBza2IsIGluZGV4KTsKLSAgIFhQUklOVEsoIm5pY3N0YXIlZDogVEJEIHdyaXR0ZW46XG4weCV4XG4weCV4XG4weCV4XG4weCV4XG4gYXQgMHgleC5cbiIsCi0gICAgICAgICAgIGNhcmQtPmluZGV4LCBsZTMyX3RvX2NwdSh0YmQtPndvcmRfMSksIGxlMzJfdG9fY3B1KHRiZC0+d29yZF8yKSwKLSAgICAgICAgICAgbGUzMl90b19jcHUodGJkLT53b3JkXzMpLCBsZTMyX3RvX2NwdSh0YmQtPndvcmRfNCksCi0gICAgICAgICAgICh1MzIpIHNjcS0+bmV4dCk7Ci0gICBpZiAoc2NxLT5uZXh0ID09IHNjcS0+bGFzdCkKLSAgICAgIHNjcS0+bmV4dCA9IHNjcS0+YmFzZTsKLSAgIGVsc2UKLSAgICAgIHNjcS0+bmV4dCsrOworCQlzY3EtPmZ1bGwgPSAxOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY3EtPmxvY2ssIGZsYWdzKTsKKwkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KCZzY3EtPnNjcWZ1bGxfd2FpdHEsCisJCQkJCSAgICAgICBTQ1FGVUxMX1RJTUVPVVQpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2NxLT5sb2NrLCBmbGFncyk7CiAKLSAgIHZjLT50YmRfY291bnQrKzsKLSAgIGlmIChzY3EtPm51bV9lbnRyaWVzID09IFZCUl9TQ1FfTlVNX0VOVFJJRVMpCi0gICB7Ci0gICAgICBzY3EtPnRiZF9jb3VudCsrOwotICAgICAgc2NxX2lzX3ZiciA9IDE7Ci0gICB9Ci0gICBlbHNlCi0gICAgICBzY3FfaXNfdmJyID0gMDsKKwkJaWYgKHNjcS0+ZnVsbCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NxLT5sb2NrLCBmbGFncyk7CisJCQlwcmludGsoIm5pY3N0YXIlZDogVGltZW91dCBwdXNoaW5nIFRCRC5cbiIsCisJCQkgICAgICAgY2FyZC0+aW5kZXgpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJKnNjcS0+bmV4dCA9ICp0YmQ7CisJaW5kZXggPSAoaW50KShzY3EtPm5leHQgLSBzY3EtPmJhc2UpOworCXNjcS0+c2tiW2luZGV4XSA9IHNrYjsKKwlYUFJJTlRLKCJuaWNzdGFyJWQ6IHNlbmRpbmcgc2tiIGF0IDB4JXAgKHBvcyAlZCkuXG4iLAorCQljYXJkLT5pbmRleCwgc2tiLCBpbmRleCk7CisJWFBSSU5USygibmljc3RhciVkOiBUQkQgd3JpdHRlbjpcbjB4JXhcbjB4JXhcbjB4JXhcbjB4JXhcbiBhdCAweCVwLlxuIiwKKwkJY2FyZC0+aW5kZXgsIGxlMzJfdG9fY3B1KHRiZC0+d29yZF8xKSwgbGUzMl90b19jcHUodGJkLT53b3JkXzIpLAorCQlsZTMyX3RvX2NwdSh0YmQtPndvcmRfMyksIGxlMzJfdG9fY3B1KHRiZC0+d29yZF80KSwKKwkJc2NxLT5uZXh0KTsKKwlpZiAoc2NxLT5uZXh0ID09IHNjcS0+bGFzdCkKKwkJc2NxLT5uZXh0ID0gc2NxLT5iYXNlOworCWVsc2UKKwkJc2NxLT5uZXh0Kys7CiAKLSAgIGlmICh2Yy0+dGJkX2NvdW50ID49IE1BWF9UQkRfUEVSX1ZDIHx8IHNjcS0+dGJkX2NvdW50ID49IE1BWF9UQkRfUEVSX1NDUSkKLSAgIHsKLSAgICAgIGludCBoYXNfcnVuID0gMDsKKwl2Yy0+dGJkX2NvdW50Kys7CisJaWYgKHNjcS0+bnVtX2VudHJpZXMgPT0gVkJSX1NDUV9OVU1fRU5UUklFUykgeworCQlzY3EtPnRiZF9jb3VudCsrOworCQlzY3FfaXNfdmJyID0gMTsKKwl9IGVsc2UKKwkJc2NxX2lzX3ZiciA9IDA7CiAKLSAgICAgIHdoaWxlIChzY3EtPnRhaWwgPT0gc2NxLT5uZXh0KQotICAgICAgewotICAgICAgICAgaWYgKGluX2ludGVycnVwdCgpKSB7Ci0gICAgICAgICAgICBkYXRhID0gKHUzMikgdmlydF90b19idXMoc2NxLT5uZXh0KTsKLSAgICAgICAgICAgIG5zX3dyaXRlX3NyYW0oY2FyZCwgc2NxLT5zY2QsICZkYXRhLCAxKTsKLSAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjcS0+bG9jaywgZmxhZ3MpOwotICAgICAgICAgICAgcHJpbnRrKCJuaWNzdGFyJWQ6IEVycm9yIHB1c2hpbmcgVFNSLlxuIiwgY2FyZC0+aW5kZXgpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICB9CisJaWYgKHZjLT50YmRfY291bnQgPj0gTUFYX1RCRF9QRVJfVkMKKwkgICAgfHwgc2NxLT50YmRfY291bnQgPj0gTUFYX1RCRF9QRVJfU0NRKSB7CisJCWludCBoYXNfcnVuID0gMDsKIAotICAgICAgICAgc2NxLT5mdWxsID0gMTsKLSAgICAgICAgIGlmIChoYXNfcnVuKyspIGJyZWFrOwotICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NxLT5sb2NrLCBmbGFncyk7Ci0gICAgICAgICBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJnNjcS0+c2NxZnVsbF93YWl0cSwgU0NRRlVMTF9USU1FT1VUKTsKLSAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZzY3EtPmxvY2ssIGZsYWdzKTsKLSAgICAgIH0KKwkJd2hpbGUgKHNjcS0+dGFpbCA9PSBzY3EtPm5leHQpIHsKKwkJCWlmIChpbl9pbnRlcnJ1cHQoKSkgeworCQkJCWRhdGEgPSBzY3FfdmlydF90b19idXMoc2NxLCBzY3EtPm5leHQpOworCQkJCW5zX3dyaXRlX3NyYW0oY2FyZCwgc2NxLT5zY2QsICZkYXRhLCAxKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY3EtPmxvY2ssIGZsYWdzKTsKKwkJCQlwcmludGsoIm5pY3N0YXIlZDogRXJyb3IgcHVzaGluZyBUU1IuXG4iLAorCQkJCSAgICAgICBjYXJkLT5pbmRleCk7CisJCQkJcmV0dXJuIDA7CisJCQl9CiAKLSAgICAgIGlmICghc2NxLT5mdWxsKQotICAgICAgewotICAgICAgICAgdHNyLndvcmRfMSA9IG5zX3Rzcl9ta3dvcmRfMShOU19UU1JfSU5URU5BQkxFKTsKLSAgICAgICAgIGlmIChzY3FfaXNfdmJyKQotICAgICAgICAgICAgc2NkaSA9IE5TX1RTUl9TQ0RJU1ZCUjsKLSAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNjZGkgPSAodmMtPmNicl9zY2QgLSBOU19GUlNDRCkgLyBOU19GUlNDRF9TSVpFOwotICAgICAgICAgc2NxaSA9IHNjcS0+bmV4dCAtIHNjcS0+YmFzZTsKLSAgICAgICAgIHRzci53b3JkXzIgPSBuc190c3JfbWt3b3JkXzIoc2NkaSwgc2NxaSk7Ci0gICAgICAgICB0c3Iud29yZF8zID0gMHgwMDAwMDAwMDsKLSAgICAgICAgIHRzci53b3JkXzQgPSAweDAwMDAwMDAwOworCQkJc2NxLT5mdWxsID0gMTsKKwkJCWlmIChoYXNfcnVuKyspCisJCQkJYnJlYWs7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY3EtPmxvY2ssIGZsYWdzKTsKKwkJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmc2NxLT5zY3FmdWxsX3dhaXRxLAorCQkJCQkJICAgICAgIFNDUUZVTExfVElNRU9VVCk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2NxLT5sb2NrLCBmbGFncyk7CisJCX0KIAotICAgICAgICAgKnNjcS0+bmV4dCA9IHRzcjsKLSAgICAgICAgIGluZGV4ID0gKGludCkgc2NxaTsKLSAgICAgICAgIHNjcS0+c2tiW2luZGV4XSA9IE5VTEw7Ci0gICAgICAgICBYUFJJTlRLKCJuaWNzdGFyJWQ6IFRTUiB3cml0dGVuOlxuMHgleFxuMHgleFxuMHgleFxuMHgleFxuIGF0IDB4JXguXG4iLAotICAgICAgICAgICAgICAgICBjYXJkLT5pbmRleCwgbGUzMl90b19jcHUodHNyLndvcmRfMSksIGxlMzJfdG9fY3B1KHRzci53b3JkXzIpLAotICAgICAgICAgICAgICAgICBsZTMyX3RvX2NwdSh0c3Iud29yZF8zKSwgbGUzMl90b19jcHUodHNyLndvcmRfNCksCi0JCSAodTMyKSBzY3EtPm5leHQpOwotICAgICAgICAgaWYgKHNjcS0+bmV4dCA9PSBzY3EtPmxhc3QpCi0gICAgICAgICAgICBzY3EtPm5leHQgPSBzY3EtPmJhc2U7Ci0gICAgICAgICBlbHNlCi0gICAgICAgICAgICBzY3EtPm5leHQrKzsKLSAgICAgICAgIHZjLT50YmRfY291bnQgPSAwOwotICAgICAgICAgc2NxLT50YmRfY291bnQgPSAwOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICAgUFJJTlRLKCJuaWNzdGFyJWQ6IFRpbWVvdXQgcHVzaGluZyBUU1IuXG4iLCBjYXJkLT5pbmRleCk7Ci0gICB9Ci0gICBkYXRhID0gKHUzMikgdmlydF90b19idXMoc2NxLT5uZXh0KTsKLSAgIG5zX3dyaXRlX3NyYW0oY2FyZCwgc2NxLT5zY2QsICZkYXRhLCAxKTsKLSAgIAotICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NxLT5sb2NrLCBmbGFncyk7Ci0gICAKLSAgIHJldHVybiAwOworCQlpZiAoIXNjcS0+ZnVsbCkgeworCQkJdHNyLndvcmRfMSA9IG5zX3Rzcl9ta3dvcmRfMShOU19UU1JfSU5URU5BQkxFKTsKKwkJCWlmIChzY3FfaXNfdmJyKQorCQkJCXNjZGkgPSBOU19UU1JfU0NESVNWQlI7CisJCQllbHNlCisJCQkJc2NkaSA9ICh2Yy0+Y2JyX3NjZCAtIE5TX0ZSU0NEKSAvIE5TX0ZSU0NEX1NJWkU7CisJCQlzY3FpID0gc2NxLT5uZXh0IC0gc2NxLT5iYXNlOworCQkJdHNyLndvcmRfMiA9IG5zX3Rzcl9ta3dvcmRfMihzY2RpLCBzY3FpKTsKKwkJCXRzci53b3JkXzMgPSAweDAwMDAwMDAwOworCQkJdHNyLndvcmRfNCA9IDB4MDAwMDAwMDA7CisKKwkJCSpzY3EtPm5leHQgPSB0c3I7CisJCQlpbmRleCA9IChpbnQpc2NxaTsKKwkJCXNjcS0+c2tiW2luZGV4XSA9IE5VTEw7CisJCQlYUFJJTlRLCisJCQkgICAgKCJuaWNzdGFyJWQ6IFRTUiB3cml0dGVuOlxuMHgleFxuMHgleFxuMHgleFxuMHgleFxuIGF0IDB4JXAuXG4iLAorCQkJICAgICBjYXJkLT5pbmRleCwgbGUzMl90b19jcHUodHNyLndvcmRfMSksCisJCQkgICAgIGxlMzJfdG9fY3B1KHRzci53b3JkXzIpLCBsZTMyX3RvX2NwdSh0c3Iud29yZF8zKSwKKwkJCSAgICAgbGUzMl90b19jcHUodHNyLndvcmRfNCksIHNjcS0+bmV4dCk7CisJCQlpZiAoc2NxLT5uZXh0ID09IHNjcS0+bGFzdCkKKwkJCQlzY3EtPm5leHQgPSBzY3EtPmJhc2U7CisJCQllbHNlCisJCQkJc2NxLT5uZXh0Kys7CisJCQl2Yy0+dGJkX2NvdW50ID0gMDsKKwkJCXNjcS0+dGJkX2NvdW50ID0gMDsKKwkJfSBlbHNlCisJCQlQUklOVEsoIm5pY3N0YXIlZDogVGltZW91dCBwdXNoaW5nIFRTUi5cbiIsCisJCQkgICAgICAgY2FyZC0+aW5kZXgpOworCX0KKwlkYXRhID0gc2NxX3ZpcnRfdG9fYnVzKHNjcSwgc2NxLT5uZXh0KTsKKwluc193cml0ZV9zcmFtKGNhcmQsIHNjcS0+c2NkLCAmZGF0YSwgMSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY3EtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOwogfQogCi0KLQotc3RhdGljIHZvaWQgcHJvY2Vzc190c3EobnNfZGV2ICpjYXJkKQorc3RhdGljIHZvaWQgcHJvY2Vzc190c3EobnNfZGV2ICogY2FyZCkKIHsKLSAgIHUzMiBzY2RpOwotICAgc2NxX2luZm8gKnNjcTsKLSAgIG5zX3RzaSAqcHJldmlvdXMgPSBOVUxMLCAqb25lX2FoZWFkLCAqdHdvX2FoZWFkOwotICAgaW50IHNlcnZpY2VkX2VudHJpZXM7ICAgLyogZmxhZyBpbmRpY2F0aW5nIGF0IGxlYXN0IG9uIGVudHJ5IHdhcyBzZXJ2aWNlZCAqLwotICAgCi0gICBzZXJ2aWNlZF9lbnRyaWVzID0gMDsKLSAgIAotICAgaWYgKGNhcmQtPnRzcS5uZXh0ID09IGNhcmQtPnRzcS5sYXN0KQotICAgICAgb25lX2FoZWFkID0gY2FyZC0+dHNxLmJhc2U7Ci0gICBlbHNlCi0gICAgICBvbmVfYWhlYWQgPSBjYXJkLT50c3EubmV4dCArIDE7CisJdTMyIHNjZGk7CisJc2NxX2luZm8gKnNjcTsKKwluc190c2kgKnByZXZpb3VzID0gTlVMTCwgKm9uZV9haGVhZCwgKnR3b19haGVhZDsKKwlpbnQgc2VydmljZWRfZW50cmllczsJLyogZmxhZyBpbmRpY2F0aW5nIGF0IGxlYXN0IG9uIGVudHJ5IHdhcyBzZXJ2aWNlZCAqLwogCi0gICBpZiAob25lX2FoZWFkID09IGNhcmQtPnRzcS5sYXN0KQotICAgICAgdHdvX2FoZWFkID0gY2FyZC0+dHNxLmJhc2U7Ci0gICBlbHNlCi0gICAgICB0d29fYWhlYWQgPSBvbmVfYWhlYWQgKyAxOwotICAgCi0gICB3aGlsZSAoIW5zX3RzaV9pc2VtcHR5KGNhcmQtPnRzcS5uZXh0KSB8fCAhbnNfdHNpX2lzZW1wdHkob25lX2FoZWFkKSB8fAotICAgICAgICAgICFuc190c2lfaXNlbXB0eSh0d29fYWhlYWQpKQotICAgICAgICAgIC8qIEF0IG1vc3QgdHdvIGVtcHR5LCBhcyBzdGF0ZWQgaW4gdGhlIDc3MjAxIGVycmF0YSAqLwotICAgewotICAgICAgc2VydmljZWRfZW50cmllcyA9IDE7Ci0gICAgCi0gICAgICAvKiBTa2lwIHRoZSBvbmUgb3IgdHdvIHBvc3NpYmxlIGVtcHR5IGVudHJpZXMgKi8KLSAgICAgIHdoaWxlIChuc190c2lfaXNlbXB0eShjYXJkLT50c3EubmV4dCkpIHsKLSAgICAgICAgIGlmIChjYXJkLT50c3EubmV4dCA9PSBjYXJkLT50c3EubGFzdCkKLSAgICAgICAgICAgIGNhcmQtPnRzcS5uZXh0ID0gY2FyZC0+dHNxLmJhc2U7Ci0gICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYXJkLT50c3EubmV4dCsrOwotICAgICAgfQotICAgIAotICAgICAgaWYgKCFuc190c2lfdG1yb2YoY2FyZC0+dHNxLm5leHQpKQotICAgICAgewotICAgICAgICAgc2NkaSA9IG5zX3RzaV9nZXRzY2RpbmRleChjYXJkLT50c3EubmV4dCk7Ci0JIGlmIChzY2RpID09IE5TX1RTSV9TQ0RJU1ZCUikKLQkgICAgc2NxID0gY2FyZC0+c2NxMDsKLQkgZWxzZQotCSB7Ci0JICAgIGlmIChjYXJkLT5zY2QydmNbc2NkaV0gPT0gTlVMTCkKLQkgICAgewotCSAgICAgICBwcmludGsoIm5pY3N0YXIlZDogY291bGQgbm90IGZpbmQgVkMgZnJvbSBTQ0QgaW5kZXguXG4iLAotCSAgICAgICAgICAgICAgY2FyZC0+aW5kZXgpOwotICAgICAgICAgICAgICAgbnNfdHNpX2luaXQoY2FyZC0+dHNxLm5leHQpOwotICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2NxID0gY2FyZC0+c2NkMnZjW3NjZGldLT5zY3E7Ci0gICAgICAgICB9Ci0gICAgICAgICBkcmFpbl9zY3EoY2FyZCwgc2NxLCBuc190c2lfZ2V0c2NxcG9zKGNhcmQtPnRzcS5uZXh0KSk7Ci0gICAgICAgICBzY3EtPmZ1bGwgPSAwOwotICAgICAgICAgd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCYoc2NxLT5zY3FmdWxsX3dhaXRxKSk7Ci0gICAgICB9CisJc2VydmljZWRfZW50cmllcyA9IDA7CiAKLSAgICAgIG5zX3RzaV9pbml0KGNhcmQtPnRzcS5uZXh0KTsKLSAgICAgIHByZXZpb3VzID0gY2FyZC0+dHNxLm5leHQ7Ci0gICAgICBpZiAoY2FyZC0+dHNxLm5leHQgPT0gY2FyZC0+dHNxLmxhc3QpCi0gICAgICAgICBjYXJkLT50c3EubmV4dCA9IGNhcmQtPnRzcS5iYXNlOwotICAgICAgZWxzZQotICAgICAgICAgY2FyZC0+dHNxLm5leHQrKzsKKwlpZiAoY2FyZC0+dHNxLm5leHQgPT0gY2FyZC0+dHNxLmxhc3QpCisJCW9uZV9haGVhZCA9IGNhcmQtPnRzcS5iYXNlOworCWVsc2UKKwkJb25lX2FoZWFkID0gY2FyZC0+dHNxLm5leHQgKyAxOwogCi0gICAgICBpZiAoY2FyZC0+dHNxLm5leHQgPT0gY2FyZC0+dHNxLmxhc3QpCi0gICAgICAgICBvbmVfYWhlYWQgPSBjYXJkLT50c3EuYmFzZTsKLSAgICAgIGVsc2UKLSAgICAgICAgIG9uZV9haGVhZCA9IGNhcmQtPnRzcS5uZXh0ICsgMTsKKwlpZiAob25lX2FoZWFkID09IGNhcmQtPnRzcS5sYXN0KQorCQl0d29fYWhlYWQgPSBjYXJkLT50c3EuYmFzZTsKKwllbHNlCisJCXR3b19haGVhZCA9IG9uZV9haGVhZCArIDE7CiAKLSAgICAgIGlmIChvbmVfYWhlYWQgPT0gY2FyZC0+dHNxLmxhc3QpCi0gICAgICAgICB0d29fYWhlYWQgPSBjYXJkLT50c3EuYmFzZTsKLSAgICAgIGVsc2UKLSAgICAgICAgIHR3b19haGVhZCA9IG9uZV9haGVhZCArIDE7Ci0gICB9CisJd2hpbGUgKCFuc190c2lfaXNlbXB0eShjYXJkLT50c3EubmV4dCkgfHwgIW5zX3RzaV9pc2VtcHR5KG9uZV9haGVhZCkgfHwKKwkgICAgICAgIW5zX3RzaV9pc2VtcHR5KHR3b19haGVhZCkpCisJCS8qIEF0IG1vc3QgdHdvIGVtcHR5LCBhcyBzdGF0ZWQgaW4gdGhlIDc3MjAxIGVycmF0YSAqLworCXsKKwkJc2VydmljZWRfZW50cmllcyA9IDE7CiAKLSAgIGlmIChzZXJ2aWNlZF9lbnRyaWVzKSB7Ci0gICAgICB3cml0ZWwoKCgodTMyKSBwcmV2aW91cykgLSAoKHUzMikgY2FyZC0+dHNxLmJhc2UpKSwKLSAgICAgICAgICAgICBjYXJkLT5tZW1iYXNlICsgVFNRSCk7Ci0gICB9CisJCS8qIFNraXAgdGhlIG9uZSBvciB0d28gcG9zc2libGUgZW1wdHkgZW50cmllcyAqLworCQl3aGlsZSAobnNfdHNpX2lzZW1wdHkoY2FyZC0+dHNxLm5leHQpKSB7CisJCQlpZiAoY2FyZC0+dHNxLm5leHQgPT0gY2FyZC0+dHNxLmxhc3QpCisJCQkJY2FyZC0+dHNxLm5leHQgPSBjYXJkLT50c3EuYmFzZTsKKwkJCWVsc2UKKwkJCQljYXJkLT50c3EubmV4dCsrOworCQl9CisKKwkJaWYgKCFuc190c2lfdG1yb2YoY2FyZC0+dHNxLm5leHQpKSB7CisJCQlzY2RpID0gbnNfdHNpX2dldHNjZGluZGV4KGNhcmQtPnRzcS5uZXh0KTsKKwkJCWlmIChzY2RpID09IE5TX1RTSV9TQ0RJU1ZCUikKKwkJCQlzY3EgPSBjYXJkLT5zY3EwOworCQkJZWxzZSB7CisJCQkJaWYgKGNhcmQtPnNjZDJ2Y1tzY2RpXSA9PSBOVUxMKSB7CisJCQkJCXByaW50aworCQkJCQkgICAgKCJuaWNzdGFyJWQ6IGNvdWxkIG5vdCBmaW5kIFZDIGZyb20gU0NEIGluZGV4LlxuIiwKKwkJCQkJICAgICBjYXJkLT5pbmRleCk7CisJCQkJCW5zX3RzaV9pbml0KGNhcmQtPnRzcS5uZXh0KTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCQlzY3EgPSBjYXJkLT5zY2QydmNbc2NkaV0tPnNjcTsKKwkJCX0KKwkJCWRyYWluX3NjcShjYXJkLCBzY3EsIG5zX3RzaV9nZXRzY3Fwb3MoY2FyZC0+dHNxLm5leHQpKTsKKwkJCXNjcS0+ZnVsbCA9IDA7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJihzY3EtPnNjcWZ1bGxfd2FpdHEpKTsKKwkJfQorCisJCW5zX3RzaV9pbml0KGNhcmQtPnRzcS5uZXh0KTsKKwkJcHJldmlvdXMgPSBjYXJkLT50c3EubmV4dDsKKwkJaWYgKGNhcmQtPnRzcS5uZXh0ID09IGNhcmQtPnRzcS5sYXN0KQorCQkJY2FyZC0+dHNxLm5leHQgPSBjYXJkLT50c3EuYmFzZTsKKwkJZWxzZQorCQkJY2FyZC0+dHNxLm5leHQrKzsKKworCQlpZiAoY2FyZC0+dHNxLm5leHQgPT0gY2FyZC0+dHNxLmxhc3QpCisJCQlvbmVfYWhlYWQgPSBjYXJkLT50c3EuYmFzZTsKKwkJZWxzZQorCQkJb25lX2FoZWFkID0gY2FyZC0+dHNxLm5leHQgKyAxOworCisJCWlmIChvbmVfYWhlYWQgPT0gY2FyZC0+dHNxLmxhc3QpCisJCQl0d29fYWhlYWQgPSBjYXJkLT50c3EuYmFzZTsKKwkJZWxzZQorCQkJdHdvX2FoZWFkID0gb25lX2FoZWFkICsgMTsKKwl9CisKKwlpZiAoc2VydmljZWRfZW50cmllcykKKwkJd3JpdGVsKFBUUl9ESUZGKHByZXZpb3VzLCBjYXJkLT50c3EuYmFzZSksCisJCSAgICAgICBjYXJkLT5tZW1iYXNlICsgVFNRSCk7CiB9CiAKLQotCi1zdGF0aWMgdm9pZCBkcmFpbl9zY3EobnNfZGV2ICpjYXJkLCBzY3FfaW5mbyAqc2NxLCBpbnQgcG9zKQorc3RhdGljIHZvaWQgZHJhaW5fc2NxKG5zX2RldiAqIGNhcmQsIHNjcV9pbmZvICogc2NxLCBpbnQgcG9zKQogewotICAgc3RydWN0IGF0bV92Y2MgKnZjYzsKLSAgIHN0cnVjdCBza19idWZmICpza2I7Ci0gICBpbnQgaTsKLSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gICAKLSAgIFhQUklOVEsoIm5pY3N0YXIlZDogZHJhaW5fc2NxKCkgY2FsbGVkLCBzY3EgYXQgMHgleCwgcG9zICVkLlxuIiwKLSAgICAgICAgICAgY2FyZC0+aW5kZXgsICh1MzIpIHNjcSwgcG9zKTsKLSAgIGlmIChwb3MgPj0gc2NxLT5udW1fZW50cmllcykKLSAgIHsKLSAgICAgIHByaW50aygibmljc3RhciVkOiBCYWQgaW5kZXggb24gZHJhaW5fc2NxKCkuXG4iLCBjYXJkLT5pbmRleCk7Ci0gICAgICByZXR1cm47Ci0gICB9CisJc3RydWN0IGF0bV92Y2MgKnZjYzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLSAgIHNwaW5fbG9ja19pcnFzYXZlKCZzY3EtPmxvY2ssIGZsYWdzKTsKLSAgIGkgPSAoaW50KSAoc2NxLT50YWlsIC0gc2NxLT5iYXNlKTsKLSAgIGlmICgrK2kgPT0gc2NxLT5udW1fZW50cmllcykKLSAgICAgIGkgPSAwOwotICAgd2hpbGUgKGkgIT0gcG9zKQotICAgewotICAgICAgc2tiID0gc2NxLT5za2JbaV07Ci0gICAgICBYUFJJTlRLKCJuaWNzdGFyJWQ6IGZyZWVpbmcgc2tiIGF0IDB4JXggKGluZGV4ICVkKS5cbiIsCi0gICAgICAgICAgICAgIGNhcmQtPmluZGV4LCAodTMyKSBza2IsIGkpOwotICAgICAgaWYgKHNrYiAhPSBOVUxMKQotICAgICAgewotICAgICAgICAgdmNjID0gQVRNX1NLQihza2IpLT52Y2M7Ci0JIGlmICh2Y2MgJiYgdmNjLT5wb3AgIT0gTlVMTCkgewotCSAgICB2Y2MtPnBvcCh2Y2MsIHNrYik7Ci0JIH0gZWxzZSB7Ci0JICAgIGRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci0gICAgICAgICB9Ci0JIHNjcS0+c2tiW2ldID0gTlVMTDsKLSAgICAgIH0KLSAgICAgIGlmICgrK2kgPT0gc2NxLT5udW1fZW50cmllcykKLSAgICAgICAgIGkgPSAwOwotICAgfQotICAgc2NxLT50YWlsID0gc2NxLT5iYXNlICsgcG9zOwotICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NxLT5sb2NrLCBmbGFncyk7CisJWFBSSU5USygibmljc3RhciVkOiBkcmFpbl9zY3EoKSBjYWxsZWQsIHNjcSBhdCAweCVwLCBwb3MgJWQuXG4iLAorCQljYXJkLT5pbmRleCwgc2NxLCBwb3MpOworCWlmIChwb3MgPj0gc2NxLT5udW1fZW50cmllcykgeworCQlwcmludGsoIm5pY3N0YXIlZDogQmFkIGluZGV4IG9uIGRyYWluX3NjcSgpLlxuIiwgY2FyZC0+aW5kZXgpOworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNjcS0+bG9jaywgZmxhZ3MpOworCWkgPSAoaW50KShzY3EtPnRhaWwgLSBzY3EtPmJhc2UpOworCWlmICgrK2kgPT0gc2NxLT5udW1fZW50cmllcykKKwkJaSA9IDA7CisJd2hpbGUgKGkgIT0gcG9zKSB7CisJCXNrYiA9IHNjcS0+c2tiW2ldOworCQlYUFJJTlRLKCJuaWNzdGFyJWQ6IGZyZWVpbmcgc2tiIGF0IDB4JXAgKGluZGV4ICVkKS5cbiIsCisJCQljYXJkLT5pbmRleCwgc2tiLCBpKTsKKwkJaWYgKHNrYiAhPSBOVUxMKSB7CisJCQlwY2lfdW5tYXBfc2luZ2xlKGNhcmQtPnBjaWRldiwKKwkJCQkJIE5TX1BSVl9ETUEoc2tiKSwKKwkJCQkJIHNrYi0+bGVuLAorCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CisJCQl2Y2MgPSBBVE1fU0tCKHNrYiktPnZjYzsKKwkJCWlmICh2Y2MgJiYgdmNjLT5wb3AgIT0gTlVMTCkgeworCQkJCXZjYy0+cG9wKHZjYywgc2tiKTsKKwkJCX0gZWxzZSB7CisJCQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKwkJCX0KKwkJCXNjcS0+c2tiW2ldID0gTlVMTDsKKwkJfQorCQlpZiAoKytpID09IHNjcS0+bnVtX2VudHJpZXMpCisJCQlpID0gMDsKKwl9CisJc2NxLT50YWlsID0gc2NxLT5iYXNlICsgcG9zOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjcS0+bG9jaywgZmxhZ3MpOwogfQogCi0KLQotc3RhdGljIHZvaWQgcHJvY2Vzc19yc3EobnNfZGV2ICpjYXJkKQorc3RhdGljIHZvaWQgcHJvY2Vzc19yc3EobnNfZGV2ICogY2FyZCkKIHsKLSAgIG5zX3JzcWUgKnByZXZpb3VzOworCW5zX3JzcWUgKnByZXZpb3VzOwogCi0gICBpZiAoIW5zX3JzcWVfdmFsaWQoY2FyZC0+cnNxLm5leHQpKQotICAgICAgcmV0dXJuOwotICAgZG8gewotICAgICAgZGVxdWV1ZV9yeChjYXJkLCBjYXJkLT5yc3EubmV4dCk7Ci0gICAgICBuc19yc3FlX2luaXQoY2FyZC0+cnNxLm5leHQpOwotICAgICAgcHJldmlvdXMgPSBjYXJkLT5yc3EubmV4dDsKLSAgICAgIGlmIChjYXJkLT5yc3EubmV4dCA9PSBjYXJkLT5yc3EubGFzdCkKLSAgICAgICAgIGNhcmQtPnJzcS5uZXh0ID0gY2FyZC0+cnNxLmJhc2U7Ci0gICAgICBlbHNlCi0gICAgICAgICBjYXJkLT5yc3EubmV4dCsrOwotICAgfSB3aGlsZSAobnNfcnNxZV92YWxpZChjYXJkLT5yc3EubmV4dCkpOwotICAgd3JpdGVsKCgoKHUzMikgcHJldmlvdXMpIC0gKCh1MzIpIGNhcmQtPnJzcS5iYXNlKSksCi0gICAgICAgICAgY2FyZC0+bWVtYmFzZSArIFJTUUgpOworCWlmICghbnNfcnNxZV92YWxpZChjYXJkLT5yc3EubmV4dCkpCisJCXJldHVybjsKKwlkbyB7CisJCWRlcXVldWVfcngoY2FyZCwgY2FyZC0+cnNxLm5leHQpOworCQluc19yc3FlX2luaXQoY2FyZC0+cnNxLm5leHQpOworCQlwcmV2aW91cyA9IGNhcmQtPnJzcS5uZXh0OworCQlpZiAoY2FyZC0+cnNxLm5leHQgPT0gY2FyZC0+cnNxLmxhc3QpCisJCQljYXJkLT5yc3EubmV4dCA9IGNhcmQtPnJzcS5iYXNlOworCQllbHNlCisJCQljYXJkLT5yc3EubmV4dCsrOworCX0gd2hpbGUgKG5zX3JzcWVfdmFsaWQoY2FyZC0+cnNxLm5leHQpKTsKKwl3cml0ZWwoUFRSX0RJRkYocHJldmlvdXMsIGNhcmQtPnJzcS5iYXNlKSwgY2FyZC0+bWVtYmFzZSArIFJTUUgpOwogfQogCi0KLQotc3RhdGljIHZvaWQgZGVxdWV1ZV9yeChuc19kZXYgKmNhcmQsIG5zX3JzcWUgKnJzcWUpCitzdGF0aWMgdm9pZCBkZXF1ZXVlX3J4KG5zX2RldiAqIGNhcmQsIG5zX3JzcWUgKiByc3FlKQogewotICAgdTMyIHZwaSwgdmNpOwotICAgdmNfbWFwICp2YzsKLSAgIHN0cnVjdCBza19idWZmICppb3ZiOwotICAgc3RydWN0IGlvdmVjICppb3Y7Ci0gICBzdHJ1Y3QgYXRtX3ZjYyAqdmNjOwotICAgc3RydWN0IHNrX2J1ZmYgKnNrYjsKLSAgIHVuc2lnbmVkIHNob3J0IGFhbDVfbGVuOwotICAgaW50IGxlbjsKLSAgIHUzMiBzdGF0OworCXUzMiB2cGksIHZjaTsKKwl2Y19tYXAgKnZjOworCXN0cnVjdCBza19idWZmICppb3ZiOworCXN0cnVjdCBpb3ZlYyAqaW92OworCXN0cnVjdCBhdG1fdmNjICp2Y2M7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1bnNpZ25lZCBzaG9ydCBhYWw1X2xlbjsKKwlpbnQgbGVuOworCXUzMiBzdGF0OworCXUzMiBpZDsKIAotICAgc3RhdCA9IHJlYWRsKGNhcmQtPm1lbWJhc2UgKyBTVEFUKTsKLSAgIGNhcmQtPnNiZnFjID0gbnNfc3RhdF9zZmJxY19nZXQoc3RhdCk7ICAgCi0gICBjYXJkLT5sYmZxYyA9IG5zX3N0YXRfbGZicWNfZ2V0KHN0YXQpOworCXN0YXQgPSByZWFkbChjYXJkLT5tZW1iYXNlICsgU1RBVCk7CisJY2FyZC0+c2JmcWMgPSBuc19zdGF0X3NmYnFjX2dldChzdGF0KTsKKwljYXJkLT5sYmZxYyA9IG5zX3N0YXRfbGZicWNfZ2V0KHN0YXQpOwogCi0gICBza2IgPSAoc3RydWN0IHNrX2J1ZmYgKikgbGUzMl90b19jcHUocnNxZS0+YnVmZmVyX2hhbmRsZSk7Ci0gICB2cGkgPSBuc19yc3FlX3ZwaShyc3FlKTsKLSAgIHZjaSA9IG5zX3JzcWVfdmNpKHJzcWUpOwotICAgaWYgKHZwaSA+PSAxVUwgPDwgY2FyZC0+dnBpYml0cyB8fCB2Y2kgPj0gMVVMIDw8IGNhcmQtPnZjaWJpdHMpCi0gICB7Ci0gICAgICBwcmludGsoIm5pY3N0YXIlZDogU0RVIHJlY2VpdmVkIGZvciBvdXQtb2YtcmFuZ2UgdmMgJWQuJWQuXG4iLAotICAgICAgICAgICAgIGNhcmQtPmluZGV4LCB2cGksIHZjaSk7Ci0gICAgICByZWN5Y2xlX3J4X2J1ZihjYXJkLCBza2IpOwotICAgICAgcmV0dXJuOwotICAgfQotICAgCi0gICB2YyA9ICYoY2FyZC0+dmNtYXBbdnBpIDw8IGNhcmQtPnZjaWJpdHMgfCB2Y2ldKTsKLSAgIGlmICghdmMtPnJ4KQotICAgewotICAgICAgUlhQUklOVEsoIm5pY3N0YXIlZDogU0RVIHJlY2VpdmVkIG9uIG5vbi1yeCB2YyAlZC4lZC5cbiIsCi0gICAgICAgICAgICAgY2FyZC0+aW5kZXgsIHZwaSwgdmNpKTsKLSAgICAgIHJlY3ljbGVfcnhfYnVmKGNhcmQsIHNrYik7Ci0gICAgICByZXR1cm47Ci0gICB9CisJaWQgPSBsZTMyX3RvX2NwdShyc3FlLT5idWZmZXJfaGFuZGxlKTsKKwlza2IgPSBpZHJfZmluZCgmY2FyZC0+aWRyLCBpZCk7CisJaWYgKCFza2IpIHsKKwkJUlhQUklOVEsoS0VSTl9FUlIKKwkJCSAibmljc3RhciVkOiBpZHJfZmluZCgpIGZhaWxlZCFcbiIsIGNhcmQtPmluZGV4KTsKKwkJcmV0dXJuOworCX0KKwlpZHJfcmVtb3ZlKCZjYXJkLT5pZHIsIGlkKTsKKyAgICAgICAgcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGNhcmQtPnBjaWRldiwKKwkJCQkgICAgTlNfUFJWX0RNQShza2IpLAorCQkJCSAgICAoTlNfUFJWX0JVRlRZUEUoc2tiKSA9PSBCVUZfU00KKwkJCQkgICAgID8gTlNfU01TS0JTSVpFIDogTlNfTEdTS0JTSVpFKSwKKwkJCQkgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwlwY2lfdW5tYXBfc2luZ2xlKGNhcmQtPnBjaWRldiwKKwkJCSBOU19QUlZfRE1BKHNrYiksCisJCQkgKE5TX1BSVl9CVUZUWVBFKHNrYikgPT0gQlVGX1NNCisJCQkgID8gTlNfU01TS0JTSVpFIDogTlNfTEdTS0JTSVpFKSwKKwkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCXZwaSA9IG5zX3JzcWVfdnBpKHJzcWUpOworCXZjaSA9IG5zX3JzcWVfdmNpKHJzcWUpOworCWlmICh2cGkgPj0gMVVMIDw8IGNhcmQtPnZwaWJpdHMgfHwgdmNpID49IDFVTCA8PCBjYXJkLT52Y2liaXRzKSB7CisJCXByaW50aygibmljc3RhciVkOiBTRFUgcmVjZWl2ZWQgZm9yIG91dC1vZi1yYW5nZSB2YyAlZC4lZC5cbiIsCisJCSAgICAgICBjYXJkLT5pbmRleCwgdnBpLCB2Y2kpOworCQlyZWN5Y2xlX3J4X2J1ZihjYXJkLCBza2IpOworCQlyZXR1cm47CisJfQogCi0gICB2Y2MgPSB2Yy0+cnhfdmNjOworCXZjID0gJihjYXJkLT52Y21hcFt2cGkgPDwgY2FyZC0+dmNpYml0cyB8IHZjaV0pOworCWlmICghdmMtPnJ4KSB7CisJCVJYUFJJTlRLKCJuaWNzdGFyJWQ6IFNEVSByZWNlaXZlZCBvbiBub24tcnggdmMgJWQuJWQuXG4iLAorCQkJIGNhcmQtPmluZGV4LCB2cGksIHZjaSk7CisJCXJlY3ljbGVfcnhfYnVmKGNhcmQsIHNrYik7CisJCXJldHVybjsKKwl9CiAKLSAgIGlmICh2Y2MtPnFvcy5hYWwgPT0gQVRNX0FBTDApCi0gICB7Ci0gICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2I7Ci0gICAgICB1bnNpZ25lZCBjaGFyICpjZWxsOwotICAgICAgaW50IGk7CisJdmNjID0gdmMtPnJ4X3ZjYzsKIAotICAgICAgY2VsbCA9IHNrYi0+ZGF0YTsKLSAgICAgIGZvciAoaSA9IG5zX3JzcWVfY2VsbGNvdW50KHJzcWUpOyBpOyBpLS0pCi0gICAgICB7Ci0gICAgICAgICBpZiAoKHNiID0gZGV2X2FsbG9jX3NrYihOU19TTVNLQlNJWkUpKSA9PSBOVUxMKQotICAgICAgICAgewotICAgICAgICAgICAgcHJpbnRrKCJuaWNzdGFyJWQ6IENhbid0IGFsbG9jYXRlIGJ1ZmZlcnMgZm9yIGFhbDAuXG4iLAotICAgICAgICAgICAgICAgICAgIGNhcmQtPmluZGV4KTsKLSAgICAgICAgICAgIGF0b21pY19hZGQoaSwmdmNjLT5zdGF0cy0+cnhfZHJvcCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgIH0KLSAgICAgICAgIGlmICghYXRtX2NoYXJnZSh2Y2MsIHNiLT50cnVlc2l6ZSkpCi0gICAgICAgICB7Ci0gICAgICAgICAgICBSWFBSSU5USygibmljc3RhciVkOiBhdG1fY2hhcmdlKCkgZHJvcHBlZCBhYWwwIHBhY2tldHMuXG4iLAotICAgICAgICAgICAgICAgICAgICAgY2FyZC0+aW5kZXgpOwotICAgICAgICAgICAgYXRvbWljX2FkZChpLTEsJnZjYy0+c3RhdHMtPnJ4X2Ryb3ApOyAvKiBhbHJlYWR5IGluY3JlYXNlZCBieSAxICovCi0gICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShzYik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgIH0KLSAgICAgICAgIC8qIFJlYnVpbGQgdGhlIGhlYWRlciAqLwotICAgICAgICAgKigodTMyICopIHNiLT5kYXRhKSA9IGxlMzJfdG9fY3B1KHJzcWUtPndvcmRfMSkgPDwgNCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5zX3JzcWVfY2xwKHJzcWUpID8gMHgwMDAwMDAwMSA6IDB4MDAwMDAwMDApOwotICAgICAgICAgaWYgKGkgPT0gMSAmJiBuc19yc3FlX2VvcGR1KHJzcWUpKQotICAgICAgICAgICAgKigodTMyICopIHNiLT5kYXRhKSB8PSAweDAwMDAwMDAyOwotICAgICAgICAgc2tiX3B1dChzYiwgTlNfQUFMMF9IRUFERVIpOwotICAgICAgICAgbWVtY3B5KHNrYl90YWlsX3BvaW50ZXIoc2IpLCBjZWxsLCBBVE1fQ0VMTF9QQVlMT0FEKTsKLSAgICAgICAgIHNrYl9wdXQoc2IsIEFUTV9DRUxMX1BBWUxPQUQpOwotICAgICAgICAgQVRNX1NLQihzYiktPnZjYyA9IHZjYzsKLQkgX19uZXRfdGltZXN0YW1wKHNiKTsKLSAgICAgICAgIHZjYy0+cHVzaCh2Y2MsIHNiKTsKLSAgICAgICAgIGF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnJ4KTsKLSAgICAgICAgIGNlbGwgKz0gQVRNX0NFTExfUEFZTE9BRDsKLSAgICAgIH0KKwlpZiAodmNjLT5xb3MuYWFsID09IEFUTV9BQUwwKSB7CisJCXN0cnVjdCBza19idWZmICpzYjsKKwkJdW5zaWduZWQgY2hhciAqY2VsbDsKKwkJaW50IGk7CiAKLSAgICAgIHJlY3ljbGVfcnhfYnVmKGNhcmQsIHNrYik7Ci0gICAgICByZXR1cm47Ci0gICB9CisJCWNlbGwgPSBza2ItPmRhdGE7CisJCWZvciAoaSA9IG5zX3JzcWVfY2VsbGNvdW50KHJzcWUpOyBpOyBpLS0pIHsKKwkJCWlmICgoc2IgPSBkZXZfYWxsb2Nfc2tiKE5TX1NNU0tCU0laRSkpID09IE5VTEwpIHsKKwkJCQlwcmludGsKKwkJCQkgICAgKCJuaWNzdGFyJWQ6IENhbid0IGFsbG9jYXRlIGJ1ZmZlcnMgZm9yIGFhbDAuXG4iLAorCQkJCSAgICAgY2FyZC0+aW5kZXgpOworCQkJCWF0b21pY19hZGQoaSwgJnZjYy0+c3RhdHMtPnJ4X2Ryb3ApOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKCFhdG1fY2hhcmdlKHZjYywgc2ItPnRydWVzaXplKSkgeworCQkJCVJYUFJJTlRLCisJCQkJICAgICgibmljc3RhciVkOiBhdG1fY2hhcmdlKCkgZHJvcHBlZCBhYWwwIHBhY2tldHMuXG4iLAorCQkJCSAgICAgY2FyZC0+aW5kZXgpOworCQkJCWF0b21pY19hZGQoaSAtIDEsICZ2Y2MtPnN0YXRzLT5yeF9kcm9wKTsJLyogYWxyZWFkeSBpbmNyZWFzZWQgYnkgMSAqLworCQkJCWRldl9rZnJlZV9za2JfYW55KHNiKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIFJlYnVpbGQgdGhlIGhlYWRlciAqLworCQkJKigodTMyICopIHNiLT5kYXRhKSA9IGxlMzJfdG9fY3B1KHJzcWUtPndvcmRfMSkgPDwgNCB8CisJCQkgICAgKG5zX3JzcWVfY2xwKHJzcWUpID8gMHgwMDAwMDAwMSA6IDB4MDAwMDAwMDApOworCQkJaWYgKGkgPT0gMSAmJiBuc19yc3FlX2VvcGR1KHJzcWUpKQorCQkJCSooKHUzMiAqKSBzYi0+ZGF0YSkgfD0gMHgwMDAwMDAwMjsKKwkJCXNrYl9wdXQoc2IsIE5TX0FBTDBfSEVBREVSKTsKKwkJCW1lbWNweShza2JfdGFpbF9wb2ludGVyKHNiKSwgY2VsbCwgQVRNX0NFTExfUEFZTE9BRCk7CisJCQlza2JfcHV0KHNiLCBBVE1fQ0VMTF9QQVlMT0FEKTsKKwkJCUFUTV9TS0Ioc2IpLT52Y2MgPSB2Y2M7CisJCQlfX25ldF90aW1lc3RhbXAoc2IpOworCQkJdmNjLT5wdXNoKHZjYywgc2IpOworCQkJYXRvbWljX2luYygmdmNjLT5zdGF0cy0+cngpOworCQkJY2VsbCArPSBBVE1fQ0VMTF9QQVlMT0FEOworCQl9CiAKLSAgIC8qIFRvIHJlYWNoIHRoaXMgcG9pbnQsIHRoZSBBQUwgbGF5ZXIgY2FuIG9ubHkgYmUgQUFMNSAqLworCQlyZWN5Y2xlX3J4X2J1ZihjYXJkLCBza2IpOworCQlyZXR1cm47CisJfQogCi0gICBpZiAoKGlvdmIgPSB2Yy0+cnhfaW92KSA9PSBOVUxMKQotICAgewotICAgICAgaW92YiA9IHNrYl9kZXF1ZXVlKCYoY2FyZC0+aW92cG9vbC5xdWV1ZSkpOwotICAgICAgaWYgKGlvdmIgPT0gTlVMTCkJCS8qIE5vIGJ1ZmZlcnMgaW4gdGhlIHF1ZXVlICovCi0gICAgICB7Ci0gICAgICAgICBpb3ZiID0gYWxsb2Nfc2tiKE5TX0lPVkJVRlNJWkUsIEdGUF9BVE9NSUMpOwotCSBpZiAoaW92YiA9PSBOVUxMKQotCSB7Ci0JICAgIHByaW50aygibmljc3RhciVkOiBPdXQgb2YgaW92ZWMgYnVmZmVycy5cbiIsIGNhcmQtPmluZGV4KTsKLSAgICAgICAgICAgIGF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnJ4X2Ryb3ApOwotICAgICAgICAgICAgcmVjeWNsZV9yeF9idWYoY2FyZCwgc2tiKTsKLSAgICAgICAgICAgIHJldHVybjsKLQkgfQotICAgICAgICAgTlNfU0tCX0NCKGlvdmIpLT5idWZfdHlwZSA9IEJVRl9OT05FOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICAgaWYgKC0tY2FyZC0+aW92cG9vbC5jb3VudCA8IGNhcmQtPmlvdm5yLm1pbikKLQkgewotCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqbmV3X2lvdmI7Ci0JICAgIGlmICgobmV3X2lvdmIgPSBhbGxvY19za2IoTlNfSU9WQlVGU0laRSwgR0ZQX0FUT01JQykpICE9IE5VTEwpCi0JICAgIHsKLSAgICAgICAgICAgICAgIE5TX1NLQl9DQihpb3ZiKS0+YnVmX3R5cGUgPSBCVUZfTk9ORTsKLSAgICAgICAgICAgICAgIHNrYl9xdWV1ZV90YWlsKCZjYXJkLT5pb3Zwb29sLnF1ZXVlLCBuZXdfaW92Yik7Ci0gICAgICAgICAgICAgICBjYXJkLT5pb3Zwb29sLmNvdW50Kys7Ci0JICAgIH0KLQkgfQotICAgICAgdmMtPnJ4X2lvdiA9IGlvdmI7Ci0gICAgICBOU19TS0IoaW92YiktPmlvdmNudCA9IDA7Ci0gICAgICBpb3ZiLT5sZW4gPSAwOwotICAgICAgaW92Yi0+ZGF0YSA9IGlvdmItPmhlYWQ7Ci0gICAgICBza2JfcmVzZXRfdGFpbF9wb2ludGVyKGlvdmIpOwotICAgICAgTlNfU0tCKGlvdmIpLT52Y2MgPSB2Y2M7Ci0gICAgICAvKiBJTVBPUlRBTlQ6IGEgcG9pbnRlciB0byB0aGUgc2tfYnVmZiBjb250YWluaW5nIHRoZSBzbWFsbCBvciBsYXJnZQotICAgICAgICAgICAgICAgICAgICBidWZmZXIgaXMgc3RvcmVkIGFzIGlvdmVjIGJhc2UsIE5PVCBhIHBvaW50ZXIgdG8gdGhlIAotCSAgICAgICAgICAgIHNtYWxsIG9yIGxhcmdlIGJ1ZmZlciBpdHNlbGYuICovCi0gICB9Ci0gICBlbHNlIGlmIChOU19TS0IoaW92YiktPmlvdmNudCA+PSBOU19NQVhfSU9WRUNTKQotICAgewotICAgICAgcHJpbnRrKCJuaWNzdGFyJWQ6IHJlY2VpdmVkIHRvbyBiaWcgQUFMNSBTRFUuXG4iLCBjYXJkLT5pbmRleCk7Ci0gICAgICBhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT5yeF9lcnIpOwotICAgICAgcmVjeWNsZV9pb3ZlY19yeF9idWZzKGNhcmQsIChzdHJ1Y3QgaW92ZWMgKikgaW92Yi0+ZGF0YSwgTlNfTUFYX0lPVkVDUyk7Ci0gICAgICBOU19TS0IoaW92YiktPmlvdmNudCA9IDA7Ci0gICAgICBpb3ZiLT5sZW4gPSAwOwotICAgICAgaW92Yi0+ZGF0YSA9IGlvdmItPmhlYWQ7Ci0gICAgICBza2JfcmVzZXRfdGFpbF9wb2ludGVyKGlvdmIpOwotICAgICAgTlNfU0tCKGlvdmIpLT52Y2MgPSB2Y2M7Ci0gICB9Ci0gICBpb3YgPSAmKChzdHJ1Y3QgaW92ZWMgKikgaW92Yi0+ZGF0YSlbTlNfU0tCKGlvdmIpLT5pb3ZjbnQrK107Ci0gICBpb3YtPmlvdl9iYXNlID0gKHZvaWQgKikgc2tiOwotICAgaW92LT5pb3ZfbGVuID0gbnNfcnNxZV9jZWxsY291bnQocnNxZSkgKiA0ODsKLSAgIGlvdmItPmxlbiArPSBpb3YtPmlvdl9sZW47CisJLyogVG8gcmVhY2ggdGhpcyBwb2ludCwgdGhlIEFBTCBsYXllciBjYW4gb25seSBiZSBBQUw1ICovCiAKLSAgIGlmIChOU19TS0IoaW92YiktPmlvdmNudCA9PSAxKQotICAgewotICAgICAgaWYgKE5TX1NLQl9DQihza2IpLT5idWZfdHlwZSAhPSBCVUZfU00pCi0gICAgICB7Ci0gICAgICAgICBwcmludGsoIm5pY3N0YXIlZDogRXhwZWN0ZWQgYSBzbWFsbCBidWZmZXIsIGFuZCB0aGlzIGlzIG5vdCBvbmUuXG4iLAotCSAgICAgICAgY2FyZC0+aW5kZXgpOwotICAgICAgICAgd2hpY2hfbGlzdChjYXJkLCBza2IpOwotICAgICAgICAgYXRvbWljX2luYygmdmNjLT5zdGF0cy0+cnhfZXJyKTsKLSAgICAgICAgIHJlY3ljbGVfcnhfYnVmKGNhcmQsIHNrYik7Ci0gICAgICAgICB2Yy0+cnhfaW92ID0gTlVMTDsKLSAgICAgICAgIHJlY3ljbGVfaW92X2J1ZihjYXJkLCBpb3ZiKTsKLSAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgIH0KLSAgIGVsc2UgLyogTlNfU0tCKGlvdmIpLT5pb3ZjbnQgPj0gMiAqLwotICAgewotICAgICAgaWYgKE5TX1NLQl9DQihza2IpLT5idWZfdHlwZSAhPSBCVUZfTEcpCi0gICAgICB7Ci0gICAgICAgICBwcmludGsoIm5pY3N0YXIlZDogRXhwZWN0ZWQgYSBsYXJnZSBidWZmZXIsIGFuZCB0aGlzIGlzIG5vdCBvbmUuXG4iLAotCSAgICAgICAgY2FyZC0+aW5kZXgpOwotICAgICAgICAgd2hpY2hfbGlzdChjYXJkLCBza2IpOwotICAgICAgICAgYXRvbWljX2luYygmdmNjLT5zdGF0cy0+cnhfZXJyKTsKLSAgICAgICAgIHJlY3ljbGVfaW92ZWNfcnhfYnVmcyhjYXJkLCAoc3RydWN0IGlvdmVjICopIGlvdmItPmRhdGEsCi0JICAgICAgICAgICAgICAgICAgICAgICBOU19TS0IoaW92YiktPmlvdmNudCk7Ci0gICAgICAgICB2Yy0+cnhfaW92ID0gTlVMTDsKLSAgICAgICAgIHJlY3ljbGVfaW92X2J1ZihjYXJkLCBpb3ZiKTsKLQkgcmV0dXJuOwotICAgICAgfQotICAgfQorCWlmICgoaW92YiA9IHZjLT5yeF9pb3YpID09IE5VTEwpIHsKKwkJaW92YiA9IHNrYl9kZXF1ZXVlKCYoY2FyZC0+aW92cG9vbC5xdWV1ZSkpOworCQlpZiAoaW92YiA9PSBOVUxMKSB7CS8qIE5vIGJ1ZmZlcnMgaW4gdGhlIHF1ZXVlICovCisJCQlpb3ZiID0gYWxsb2Nfc2tiKE5TX0lPVkJVRlNJWkUsIEdGUF9BVE9NSUMpOworCQkJaWYgKGlvdmIgPT0gTlVMTCkgeworCQkJCXByaW50aygibmljc3RhciVkOiBPdXQgb2YgaW92ZWMgYnVmZmVycy5cbiIsCisJCQkJICAgICAgIGNhcmQtPmluZGV4KTsKKwkJCQlhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT5yeF9kcm9wKTsKKwkJCQlyZWN5Y2xlX3J4X2J1ZihjYXJkLCBza2IpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCU5TX1BSVl9CVUZUWVBFKGlvdmIpID0gQlVGX05PTkU7CisJCX0gZWxzZSBpZiAoLS1jYXJkLT5pb3Zwb29sLmNvdW50IDwgY2FyZC0+aW92bnIubWluKSB7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X2lvdmI7CisJCQlpZiAoKG5ld19pb3ZiID0KKwkJCSAgICAgYWxsb2Nfc2tiKE5TX0lPVkJVRlNJWkUsIEdGUF9BVE9NSUMpKSAhPSBOVUxMKSB7CisJCQkJTlNfUFJWX0JVRlRZUEUoaW92YikgPSBCVUZfTk9ORTsKKwkJCQlza2JfcXVldWVfdGFpbCgmY2FyZC0+aW92cG9vbC5xdWV1ZSwgbmV3X2lvdmIpOworCQkJCWNhcmQtPmlvdnBvb2wuY291bnQrKzsKKwkJCX0KKwkJfQorCQl2Yy0+cnhfaW92ID0gaW92YjsKKwkJTlNfUFJWX0lPVkNOVChpb3ZiKSA9IDA7CisJCWlvdmItPmxlbiA9IDA7CisJCWlvdmItPmRhdGEgPSBpb3ZiLT5oZWFkOworCQlza2JfcmVzZXRfdGFpbF9wb2ludGVyKGlvdmIpOworCQkvKiBJTVBPUlRBTlQ6IGEgcG9pbnRlciB0byB0aGUgc2tfYnVmZiBjb250YWluaW5nIHRoZSBzbWFsbCBvciBsYXJnZQorCQkgICBidWZmZXIgaXMgc3RvcmVkIGFzIGlvdmVjIGJhc2UsIE5PVCBhIHBvaW50ZXIgdG8gdGhlCisJCSAgIHNtYWxsIG9yIGxhcmdlIGJ1ZmZlciBpdHNlbGYuICovCisJfSBlbHNlIGlmIChOU19QUlZfSU9WQ05UKGlvdmIpID49IE5TX01BWF9JT1ZFQ1MpIHsKKwkJcHJpbnRrKCJuaWNzdGFyJWQ6IHJlY2VpdmVkIHRvbyBiaWcgQUFMNSBTRFUuXG4iLCBjYXJkLT5pbmRleCk7CisJCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnJ4X2Vycik7CisJCXJlY3ljbGVfaW92ZWNfcnhfYnVmcyhjYXJkLCAoc3RydWN0IGlvdmVjICopaW92Yi0+ZGF0YSwKKwkJCQkgICAgICBOU19NQVhfSU9WRUNTKTsKKwkJTlNfUFJWX0lPVkNOVChpb3ZiKSA9IDA7CisJCWlvdmItPmxlbiA9IDA7CisJCWlvdmItPmRhdGEgPSBpb3ZiLT5oZWFkOworCQlza2JfcmVzZXRfdGFpbF9wb2ludGVyKGlvdmIpOworCX0KKwlpb3YgPSAmKChzdHJ1Y3QgaW92ZWMgKilpb3ZiLT5kYXRhKVtOU19QUlZfSU9WQ05UKGlvdmIpKytdOworCWlvdi0+aW92X2Jhc2UgPSAodm9pZCAqKXNrYjsKKwlpb3YtPmlvdl9sZW4gPSBuc19yc3FlX2NlbGxjb3VudChyc3FlKSAqIDQ4OworCWlvdmItPmxlbiArPSBpb3YtPmlvdl9sZW47CiAKLSAgIGlmIChuc19yc3FlX2VvcGR1KHJzcWUpKQotICAgewotICAgICAgLyogVGhpcyB3b3JrcyBjb3JyZWN0bHkgcmVnYXJkbGVzcyBvZiB0aGUgZW5kaWFubmVzcyBvZiB0aGUgaG9zdCAqLwotICAgICAgdW5zaWduZWQgY2hhciAqTDFMMiA9ICh1bnNpZ25lZCBjaGFyICopKCh1MzIpc2tiLT5kYXRhICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3YtPmlvdl9sZW4gLSA2KTsKLSAgICAgIGFhbDVfbGVuID0gTDFMMlswXSA8PCA4IHwgTDFMMlsxXTsKLSAgICAgIGxlbiA9IChhYWw1X2xlbiA9PSAweDAwMDApID8gMHgxMDAwMCA6IGFhbDVfbGVuOwotICAgICAgaWYgKG5zX3JzcWVfY3JjZXJyKHJzcWUpIHx8Ci0gICAgICAgICAgbGVuICsgOCA+IGlvdmItPmxlbiB8fCBsZW4gKyAoNDcgKyA4KSA8IGlvdmItPmxlbikKLSAgICAgIHsKLSAgICAgICAgIHByaW50aygibmljc3RhciVkOiBBQUw1IENSQyBlcnJvciIsIGNhcmQtPmluZGV4KTsKLSAgICAgICAgIGlmIChsZW4gKyA4ID4gaW92Yi0+bGVuIHx8IGxlbiArICg0NyArIDgpIDwgaW92Yi0+bGVuKQotICAgICAgICAgICAgcHJpbnRrKCIgLSBQRFUgc2l6ZSBtaXNtYXRjaC5cbiIpOwotICAgICAgICAgZWxzZQotICAgICAgICAgICAgcHJpbnRrKCIuXG4iKTsKLSAgICAgICAgIGF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnJ4X2Vycik7Ci0gICAgICAgICByZWN5Y2xlX2lvdmVjX3J4X2J1ZnMoY2FyZCwgKHN0cnVjdCBpb3ZlYyAqKSBpb3ZiLT5kYXRhLAotCSAgIE5TX1NLQihpb3ZiKS0+aW92Y250KTsKLQkgdmMtPnJ4X2lvdiA9IE5VTEw7Ci0gICAgICAgICByZWN5Y2xlX2lvdl9idWYoY2FyZCwgaW92Yik7Ci0JIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgLyogQnkgdGhpcyBwb2ludCB3ZSAoaG9wZWZ1bGx5KSBoYXZlIGEgY29tcGxldGUgU0RVIHdpdGhvdXQgZXJyb3JzLiAqLwotCi0gICAgICBpZiAoTlNfU0tCKGlvdmIpLT5pb3ZjbnQgPT0gMSkJLyogSnVzdCBhIHNtYWxsIGJ1ZmZlciAqLwotICAgICAgewotICAgICAgICAgLyogc2tiIHBvaW50cyB0byBhIHNtYWxsIGJ1ZmZlciAqLwotICAgICAgICAgaWYgKCFhdG1fY2hhcmdlKHZjYywgc2tiLT50cnVlc2l6ZSkpCi0gICAgICAgICB7Ci0gICAgICAgICAgICBwdXNoX3J4YnVmcyhjYXJkLCBza2IpOwotICAgICAgICAgICAgYXRvbWljX2luYygmdmNjLT5zdGF0cy0+cnhfZHJvcCk7Ci0gICAgICAgICB9Ci0gICAgICAgICBlbHNlCi0JIHsKLSAgICAgICAgICAgIHNrYl9wdXQoc2tiLCBsZW4pOwotICAgICAgICAgICAgZGVxdWV1ZV9zbV9idWYoY2FyZCwgc2tiKTsKLSNpZmRlZiBOU19VU0VfREVTVFJVQ1RPUlMKLSAgICAgICAgICAgIHNrYi0+ZGVzdHJ1Y3RvciA9IG5zX3NiX2Rlc3RydWN0b3I7Ci0jZW5kaWYgLyogTlNfVVNFX0RFU1RSVUNUT1JTICovCi0gICAgICAgICAgICBBVE1fU0tCKHNrYiktPnZjYyA9IHZjYzsKLQkgICAgX19uZXRfdGltZXN0YW1wKHNrYik7Ci0gICAgICAgICAgICB2Y2MtPnB1c2godmNjLCBza2IpOwotICAgICAgICAgICAgYXRvbWljX2luYygmdmNjLT5zdGF0cy0+cngpOwotICAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSBpZiAoTlNfU0tCKGlvdmIpLT5pb3ZjbnQgPT0gMikJLyogT25lIHNtYWxsIHBsdXMgb25lIGxhcmdlIGJ1ZmZlciAqLwotICAgICAgewotICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNiOwotCi0gICAgICAgICBzYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKSAoaW92IC0gMSktPmlvdl9iYXNlOwotICAgICAgICAgLyogc2tiIHBvaW50cyB0byBhIGxhcmdlIGJ1ZmZlciAqLwotCi0gICAgICAgICBpZiAobGVuIDw9IE5TX1NNQlVGU0laRSkKLQkgewotICAgICAgICAgICAgaWYgKCFhdG1fY2hhcmdlKHZjYywgc2ItPnRydWVzaXplKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHB1c2hfcnhidWZzKGNhcmQsIHNiKTsKLSAgICAgICAgICAgICAgIGF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnJ4X2Ryb3ApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotCSAgICB7Ci0gICAgICAgICAgICAgICBza2JfcHV0KHNiLCBsZW4pOwotICAgICAgICAgICAgICAgZGVxdWV1ZV9zbV9idWYoY2FyZCwgc2IpOwotI2lmZGVmIE5TX1VTRV9ERVNUUlVDVE9SUwotICAgICAgICAgICAgICAgc2ItPmRlc3RydWN0b3IgPSBuc19zYl9kZXN0cnVjdG9yOwotI2VuZGlmIC8qIE5TX1VTRV9ERVNUUlVDVE9SUyAqLwotICAgICAgICAgICAgICAgQVRNX1NLQihzYiktPnZjYyA9IHZjYzsKLQkgICAgICAgX19uZXRfdGltZXN0YW1wKHNiKTsKLSAgICAgICAgICAgICAgIHZjYy0+cHVzaCh2Y2MsIHNiKTsKLSAgICAgICAgICAgICAgIGF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnJ4KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVzaF9yeGJ1ZnMoY2FyZCwgc2tiKTsKLQotCSB9Ci0JIGVsc2UJCQkvKiBsZW4gPiBOU19TTUJVRlNJWkUsIHRoZSB1c3VhbCBjYXNlICovCi0JIHsKLSAgICAgICAgICAgIGlmICghYXRtX2NoYXJnZSh2Y2MsIHNrYi0+dHJ1ZXNpemUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgcHVzaF9yeGJ1ZnMoY2FyZCwgc2tiKTsKLSAgICAgICAgICAgICAgIGF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnJ4X2Ryb3ApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgZGVxdWV1ZV9sZ19idWYoY2FyZCwgc2tiKTsKLSNpZmRlZiBOU19VU0VfREVTVFJVQ1RPUlMKLSAgICAgICAgICAgICAgIHNrYi0+ZGVzdHJ1Y3RvciA9IG5zX2xiX2Rlc3RydWN0b3I7Ci0jZW5kaWYgLyogTlNfVVNFX0RFU1RSVUNUT1JTICovCi0gICAgICAgICAgICAgICBza2JfcHVzaChza2IsIE5TX1NNQlVGU0laRSk7Ci0gICAgICAgICAgICAgICBza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNiLCBza2ItPmRhdGEsIE5TX1NNQlVGU0laRSk7Ci0gICAgICAgICAgICAgICBza2JfcHV0KHNrYiwgbGVuIC0gTlNfU01CVUZTSVpFKTsKLSAgICAgICAgICAgICAgIEFUTV9TS0Ioc2tiKS0+dmNjID0gdmNjOwotCSAgICAgICBfX25ldF90aW1lc3RhbXAoc2tiKTsKLSAgICAgICAgICAgICAgIHZjYy0+cHVzaCh2Y2MsIHNrYik7Ci0gICAgICAgICAgICAgICBhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT5yeCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHB1c2hfcnhidWZzKGNhcmQsIHNiKTsKLQotICAgICAgICAgfQotCSAKLSAgICAgIH0KLSAgICAgIGVsc2UJCQkJLyogTXVzdCBwdXNoIGEgaHVnZSBidWZmZXIgKi8KLSAgICAgIHsKLSAgICAgICAgIHN0cnVjdCBza19idWZmICpoYiwgKnNiLCAqbGI7Ci0JIGludCByZW1haW5pbmcsIHRvY29weTsKLSAgICAgICAgIGludCBqOwotCi0gICAgICAgICBoYiA9IHNrYl9kZXF1ZXVlKCYoY2FyZC0+aGJwb29sLnF1ZXVlKSk7Ci0gICAgICAgICBpZiAoaGIgPT0gTlVMTCkJCS8qIE5vIGJ1ZmZlcnMgaW4gdGhlIHF1ZXVlICovCi0gICAgICAgICB7Ci0KLSAgICAgICAgICAgIGhiID0gZGV2X2FsbG9jX3NrYihOU19IQlVGU0laRSk7Ci0gICAgICAgICAgICBpZiAoaGIgPT0gTlVMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHByaW50aygibmljc3RhciVkOiBPdXQgb2YgaHVnZSBidWZmZXJzLlxuIiwgY2FyZC0+aW5kZXgpOwotICAgICAgICAgICAgICAgYXRvbWljX2luYygmdmNjLT5zdGF0cy0+cnhfZHJvcCk7Ci0gICAgICAgICAgICAgICByZWN5Y2xlX2lvdmVjX3J4X2J1ZnMoY2FyZCwgKHN0cnVjdCBpb3ZlYyAqKSBpb3ZiLT5kYXRhLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNfU0tCKGlvdmIpLT5pb3ZjbnQpOwotICAgICAgICAgICAgICAgdmMtPnJ4X2lvdiA9IE5VTEw7Ci0gICAgICAgICAgICAgICByZWN5Y2xlX2lvdl9idWYoY2FyZCwgaW92Yik7Ci0gICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChjYXJkLT5oYnBvb2wuY291bnQgPCBjYXJkLT5oYm5yLm1pbikKLQkgICAgewotICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKm5ld19oYjsKLSAgICAgICAgICAgICAgIGlmICgobmV3X2hiID0gZGV2X2FsbG9jX3NrYihOU19IQlVGU0laRSkpICE9IE5VTEwpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBza2JfcXVldWVfdGFpbCgmY2FyZC0+aGJwb29sLnF1ZXVlLCBuZXdfaGIpOwotICAgICAgICAgICAgICAgICAgY2FyZC0+aGJwb29sLmNvdW50Kys7Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBOU19TS0JfQ0IoaGIpLT5idWZfdHlwZSA9IEJVRl9OT05FOwotCSB9Ci0JIGVsc2UKLSAgICAgICAgIGlmICgtLWNhcmQtPmhicG9vbC5jb3VudCA8IGNhcmQtPmhibnIubWluKQotICAgICAgICAgewotICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKm5ld19oYjsKLSAgICAgICAgICAgIGlmICgobmV3X2hiID0gZGV2X2FsbG9jX3NrYihOU19IQlVGU0laRSkpICE9IE5VTEwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBOU19TS0JfQ0IobmV3X2hiKS0+YnVmX3R5cGUgPSBCVUZfTk9ORTsKLSAgICAgICAgICAgICAgIHNrYl9xdWV1ZV90YWlsKCZjYXJkLT5oYnBvb2wucXVldWUsIG5ld19oYik7Ci0gICAgICAgICAgICAgICBjYXJkLT5oYnBvb2wuY291bnQrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjYXJkLT5oYnBvb2wuY291bnQgPCBjYXJkLT5oYm5yLm1pbikKLQkgICAgewotICAgICAgICAgICAgICAgaWYgKChuZXdfaGIgPSBkZXZfYWxsb2Nfc2tiKE5TX0hCVUZTSVpFKSkgIT0gTlVMTCkKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIE5TX1NLQl9DQihuZXdfaGIpLT5idWZfdHlwZSA9IEJVRl9OT05FOwotICAgICAgICAgICAgICAgICAgc2tiX3F1ZXVlX3RhaWwoJmNhcmQtPmhicG9vbC5xdWV1ZSwgbmV3X2hiKTsKLSAgICAgICAgICAgICAgICAgIGNhcmQtPmhicG9vbC5jb3VudCsrOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgfQotCi0gICAgICAgICBpb3YgPSAoc3RydWN0IGlvdmVjICopIGlvdmItPmRhdGE7Ci0KLSAgICAgICAgIGlmICghYXRtX2NoYXJnZSh2Y2MsIGhiLT50cnVlc2l6ZSkpCi0JIHsKLSAgICAgICAgICAgIHJlY3ljbGVfaW92ZWNfcnhfYnVmcyhjYXJkLCBpb3YsIE5TX1NLQihpb3ZiKS0+aW92Y250KTsKLSAgICAgICAgICAgIGlmIChjYXJkLT5oYnBvb2wuY291bnQgPCBjYXJkLT5oYm5yLm1heCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHNrYl9xdWV1ZV90YWlsKCZjYXJkLT5oYnBvb2wucXVldWUsIGhiKTsKLSAgICAgICAgICAgICAgIGNhcmQtPmhicG9vbC5jb3VudCsrOwotICAgICAgICAgICAgfQotCSAgICBlbHNlCi0JICAgICAgIGRldl9rZnJlZV9za2JfYW55KGhiKTsKLQkgICAgYXRvbWljX2luYygmdmNjLT5zdGF0cy0+cnhfZHJvcCk7Ci0gICAgICAgICB9Ci0gICAgICAgICBlbHNlCi0JIHsKLSAgICAgICAgICAgIC8qIENvcHkgdGhlIHNtYWxsIGJ1ZmZlciB0byB0aGUgaHVnZSBidWZmZXIgKi8KLSAgICAgICAgICAgIHNiID0gKHN0cnVjdCBza19idWZmICopIGlvdi0+aW92X2Jhc2U7Ci0gICAgICAgICAgICBza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNiLCBoYi0+ZGF0YSwgaW92LT5pb3ZfbGVuKTsKLSAgICAgICAgICAgIHNrYl9wdXQoaGIsIGlvdi0+aW92X2xlbik7Ci0gICAgICAgICAgICByZW1haW5pbmcgPSBsZW4gLSBpb3YtPmlvdl9sZW47Ci0gICAgICAgICAgICBpb3YrKzsKLSAgICAgICAgICAgIC8qIEZyZWUgdGhlIHNtYWxsIGJ1ZmZlciAqLwotICAgICAgICAgICAgcHVzaF9yeGJ1ZnMoY2FyZCwgc2IpOwotCi0gICAgICAgICAgICAvKiBDb3B5IGFsbCBsYXJnZSBidWZmZXJzIHRvIHRoZSBodWdlIGJ1ZmZlciBhbmQgZnJlZSB0aGVtICovCi0gICAgICAgICAgICBmb3IgKGogPSAxOyBqIDwgTlNfU0tCKGlvdmIpLT5pb3ZjbnQ7IGorKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIGxiID0gKHN0cnVjdCBza19idWZmICopIGlvdi0+aW92X2Jhc2U7Ci0gICAgICAgICAgICAgICB0b2NvcHkgPSBtaW5fdChpbnQsIHJlbWFpbmluZywgaW92LT5pb3ZfbGVuKTsKLSAgICAgICAgICAgICAgIHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEobGIsIHNrYl90YWlsX3BvaW50ZXIoaGIpLCB0b2NvcHkpOwotICAgICAgICAgICAgICAgc2tiX3B1dChoYiwgdG9jb3B5KTsKLSAgICAgICAgICAgICAgIGlvdisrOwotICAgICAgICAgICAgICAgcmVtYWluaW5nIC09IHRvY29weTsKLSAgICAgICAgICAgICAgIHB1c2hfcnhidWZzKGNhcmQsIGxiKTsKLSAgICAgICAgICAgIH0KICNpZmRlZiBFWFRSQV9ERUJVRwotICAgICAgICAgICAgaWYgKHJlbWFpbmluZyAhPSAwIHx8IGhiLT5sZW4gIT0gbGVuKQotICAgICAgICAgICAgICAgcHJpbnRrKCJuaWNzdGFyJWQ6IEh1Z2UgYnVmZmVyIGxlbiBtaXNtYXRjaC5cbiIsIGNhcmQtPmluZGV4KTsKLSNlbmRpZiAvKiBFWFRSQV9ERUJVRyAqLwotICAgICAgICAgICAgQVRNX1NLQihoYiktPnZjYyA9IHZjYzsKLSNpZmRlZiBOU19VU0VfREVTVFJVQ1RPUlMKLSAgICAgICAgICAgIGhiLT5kZXN0cnVjdG9yID0gbnNfaGJfZGVzdHJ1Y3RvcjsKLSNlbmRpZiAvKiBOU19VU0VfREVTVFJVQ1RPUlMgKi8KLQkgICAgX19uZXRfdGltZXN0YW1wKGhiKTsKLSAgICAgICAgICAgIHZjYy0+cHVzaCh2Y2MsIGhiKTsKLSAgICAgICAgICAgIGF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnJ4KTsKLSAgICAgICAgIH0KLSAgICAgIH0KKwlpZiAoTlNfUFJWX0lPVkNOVChpb3ZiKSA9PSAxKSB7CisJCWlmIChOU19QUlZfQlVGVFlQRShza2IpICE9IEJVRl9TTSkgeworCQkJcHJpbnRrCisJCQkgICAgKCJuaWNzdGFyJWQ6IEV4cGVjdGVkIGEgc21hbGwgYnVmZmVyLCBhbmQgdGhpcyBpcyBub3Qgb25lLlxuIiwKKwkJCSAgICAgY2FyZC0+aW5kZXgpOworCQkJd2hpY2hfbGlzdChjYXJkLCBza2IpOworCQkJYXRvbWljX2luYygmdmNjLT5zdGF0cy0+cnhfZXJyKTsKKwkJCXJlY3ljbGVfcnhfYnVmKGNhcmQsIHNrYik7CisJCQl2Yy0+cnhfaW92ID0gTlVMTDsKKwkJCXJlY3ljbGVfaW92X2J1ZihjYXJkLCBpb3ZiKTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZSB7CQkvKiBOU19QUlZfSU9WQ05UKGlvdmIpID49IDIgKi8KIAotICAgICAgdmMtPnJ4X2lvdiA9IE5VTEw7Ci0gICAgICByZWN5Y2xlX2lvdl9idWYoY2FyZCwgaW92Yik7Ci0gICB9CisJCWlmIChOU19QUlZfQlVGVFlQRShza2IpICE9IEJVRl9MRykgeworCQkJcHJpbnRrCisJCQkgICAgKCJuaWNzdGFyJWQ6IEV4cGVjdGVkIGEgbGFyZ2UgYnVmZmVyLCBhbmQgdGhpcyBpcyBub3Qgb25lLlxuIiwKKwkJCSAgICAgY2FyZC0+aW5kZXgpOworCQkJd2hpY2hfbGlzdChjYXJkLCBza2IpOworCQkJYXRvbWljX2luYygmdmNjLT5zdGF0cy0+cnhfZXJyKTsKKwkJCXJlY3ljbGVfaW92ZWNfcnhfYnVmcyhjYXJkLCAoc3RydWN0IGlvdmVjICopaW92Yi0+ZGF0YSwKKwkJCQkJICAgICAgTlNfUFJWX0lPVkNOVChpb3ZiKSk7CisJCQl2Yy0+cnhfaW92ID0gTlVMTDsKKwkJCXJlY3ljbGVfaW92X2J1ZihjYXJkLCBpb3ZiKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKyNlbmRpZiAvKiBFWFRSQV9ERUJVRyAqLworCisJaWYgKG5zX3JzcWVfZW9wZHUocnNxZSkpIHsKKwkJLyogVGhpcyB3b3JrcyBjb3JyZWN0bHkgcmVnYXJkbGVzcyBvZiB0aGUgZW5kaWFubmVzcyBvZiB0aGUgaG9zdCAqLworCQl1bnNpZ25lZCBjaGFyICpMMUwyID0gKHVuc2lnbmVkIGNoYXIgKikKKwkJCQkJCShza2ItPmRhdGEgKyBpb3YtPmlvdl9sZW4gLSA2KTsKKwkJYWFsNV9sZW4gPSBMMUwyWzBdIDw8IDggfCBMMUwyWzFdOworCQlsZW4gPSAoYWFsNV9sZW4gPT0gMHgwMDAwKSA/IDB4MTAwMDAgOiBhYWw1X2xlbjsKKwkJaWYgKG5zX3JzcWVfY3JjZXJyKHJzcWUpIHx8CisJCSAgICBsZW4gKyA4ID4gaW92Yi0+bGVuIHx8IGxlbiArICg0NyArIDgpIDwgaW92Yi0+bGVuKSB7CisJCQlwcmludGsoIm5pY3N0YXIlZDogQUFMNSBDUkMgZXJyb3IiLCBjYXJkLT5pbmRleCk7CisJCQlpZiAobGVuICsgOCA+IGlvdmItPmxlbiB8fCBsZW4gKyAoNDcgKyA4KSA8IGlvdmItPmxlbikKKwkJCQlwcmludGsoIiAtIFBEVSBzaXplIG1pc21hdGNoLlxuIik7CisJCQllbHNlCisJCQkJcHJpbnRrKCIuXG4iKTsKKwkJCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnJ4X2Vycik7CisJCQlyZWN5Y2xlX2lvdmVjX3J4X2J1ZnMoY2FyZCwgKHN0cnVjdCBpb3ZlYyAqKWlvdmItPmRhdGEsCisJCQkJCSAgICAgIE5TX1BSVl9JT1ZDTlQoaW92YikpOworCQkJdmMtPnJ4X2lvdiA9IE5VTEw7CisJCQlyZWN5Y2xlX2lvdl9idWYoY2FyZCwgaW92Yik7CisJCQlyZXR1cm47CisJCX0KKworCQkvKiBCeSB0aGlzIHBvaW50IHdlIChob3BlZnVsbHkpIGhhdmUgYSBjb21wbGV0ZSBTRFUgd2l0aG91dCBlcnJvcnMuICovCisKKwkJaWYgKE5TX1BSVl9JT1ZDTlQoaW92YikgPT0gMSkgewkvKiBKdXN0IGEgc21hbGwgYnVmZmVyICovCisJCQkvKiBza2IgcG9pbnRzIHRvIGEgc21hbGwgYnVmZmVyICovCisJCQlpZiAoIWF0bV9jaGFyZ2UodmNjLCBza2ItPnRydWVzaXplKSkgeworCQkJCXB1c2hfcnhidWZzKGNhcmQsIHNrYik7CisJCQkJYXRvbWljX2luYygmdmNjLT5zdGF0cy0+cnhfZHJvcCk7CisJCQl9IGVsc2UgeworCQkJCXNrYl9wdXQoc2tiLCBsZW4pOworCQkJCWRlcXVldWVfc21fYnVmKGNhcmQsIHNrYik7CisjaWZkZWYgTlNfVVNFX0RFU1RSVUNUT1JTCisJCQkJc2tiLT5kZXN0cnVjdG9yID0gbnNfc2JfZGVzdHJ1Y3RvcjsKKyNlbmRpZiAvKiBOU19VU0VfREVTVFJVQ1RPUlMgKi8KKwkJCQlBVE1fU0tCKHNrYiktPnZjYyA9IHZjYzsKKwkJCQlfX25ldF90aW1lc3RhbXAoc2tiKTsKKwkJCQl2Y2MtPnB1c2godmNjLCBza2IpOworCQkJCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnJ4KTsKKwkJCX0KKwkJfSBlbHNlIGlmIChOU19QUlZfSU9WQ05UKGlvdmIpID09IDIpIHsJLyogT25lIHNtYWxsIHBsdXMgb25lIGxhcmdlIGJ1ZmZlciAqLworCQkJc3RydWN0IHNrX2J1ZmYgKnNiOworCisJCQlzYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKShpb3YgLSAxKS0+aW92X2Jhc2U7CisJCQkvKiBza2IgcG9pbnRzIHRvIGEgbGFyZ2UgYnVmZmVyICovCisKKwkJCWlmIChsZW4gPD0gTlNfU01CVUZTSVpFKSB7CisJCQkJaWYgKCFhdG1fY2hhcmdlKHZjYywgc2ItPnRydWVzaXplKSkgeworCQkJCQlwdXNoX3J4YnVmcyhjYXJkLCBzYik7CisJCQkJCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnJ4X2Ryb3ApOworCQkJCX0gZWxzZSB7CisJCQkJCXNrYl9wdXQoc2IsIGxlbik7CisJCQkJCWRlcXVldWVfc21fYnVmKGNhcmQsIHNiKTsKKyNpZmRlZiBOU19VU0VfREVTVFJVQ1RPUlMKKwkJCQkJc2ItPmRlc3RydWN0b3IgPSBuc19zYl9kZXN0cnVjdG9yOworI2VuZGlmIC8qIE5TX1VTRV9ERVNUUlVDVE9SUyAqLworCQkJCQlBVE1fU0tCKHNiKS0+dmNjID0gdmNjOworCQkJCQlfX25ldF90aW1lc3RhbXAoc2IpOworCQkJCQl2Y2MtPnB1c2godmNjLCBzYik7CisJCQkJCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnJ4KTsKKwkJCQl9CisKKwkJCQlwdXNoX3J4YnVmcyhjYXJkLCBza2IpOworCisJCQl9IGVsc2UgewkvKiBsZW4gPiBOU19TTUJVRlNJWkUsIHRoZSB1c3VhbCBjYXNlICovCisKKwkJCQlpZiAoIWF0bV9jaGFyZ2UodmNjLCBza2ItPnRydWVzaXplKSkgeworCQkJCQlwdXNoX3J4YnVmcyhjYXJkLCBza2IpOworCQkJCQlhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT5yeF9kcm9wKTsKKwkJCQl9IGVsc2UgeworCQkJCQlkZXF1ZXVlX2xnX2J1ZihjYXJkLCBza2IpOworI2lmZGVmIE5TX1VTRV9ERVNUUlVDVE9SUworCQkJCQlza2ItPmRlc3RydWN0b3IgPSBuc19sYl9kZXN0cnVjdG9yOworI2VuZGlmIC8qIE5TX1VTRV9ERVNUUlVDVE9SUyAqLworCQkJCQlza2JfcHVzaChza2IsIE5TX1NNQlVGU0laRSk7CisJCQkJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2IsIHNrYi0+ZGF0YSwKKwkJCQkJCQkJICBOU19TTUJVRlNJWkUpOworCQkJCQlza2JfcHV0KHNrYiwgbGVuIC0gTlNfU01CVUZTSVpFKTsKKwkJCQkJQVRNX1NLQihza2IpLT52Y2MgPSB2Y2M7CisJCQkJCV9fbmV0X3RpbWVzdGFtcChza2IpOworCQkJCQl2Y2MtPnB1c2godmNjLCBza2IpOworCQkJCQlhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT5yeCk7CisJCQkJfQorCisJCQkJcHVzaF9yeGJ1ZnMoY2FyZCwgc2IpOworCisJCQl9CisKKwkJfSBlbHNlIHsJLyogTXVzdCBwdXNoIGEgaHVnZSBidWZmZXIgKi8KKworCQkJc3RydWN0IHNrX2J1ZmYgKmhiLCAqc2IsICpsYjsKKwkJCWludCByZW1haW5pbmcsIHRvY29weTsKKwkJCWludCBqOworCisJCQloYiA9IHNrYl9kZXF1ZXVlKCYoY2FyZC0+aGJwb29sLnF1ZXVlKSk7CisJCQlpZiAoaGIgPT0gTlVMTCkgewkvKiBObyBidWZmZXJzIGluIHRoZSBxdWV1ZSAqLworCisJCQkJaGIgPSBkZXZfYWxsb2Nfc2tiKE5TX0hCVUZTSVpFKTsKKwkJCQlpZiAoaGIgPT0gTlVMTCkgeworCQkJCQlwcmludGsKKwkJCQkJICAgICgibmljc3RhciVkOiBPdXQgb2YgaHVnZSBidWZmZXJzLlxuIiwKKwkJCQkJICAgICBjYXJkLT5pbmRleCk7CisJCQkJCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnJ4X2Ryb3ApOworCQkJCQlyZWN5Y2xlX2lvdmVjX3J4X2J1ZnMoY2FyZCwKKwkJCQkJCQkgICAgICAoc3RydWN0IGlvdmVjICopCisJCQkJCQkJICAgICAgaW92Yi0+ZGF0YSwKKwkJCQkJCQkgICAgICBOU19QUlZfSU9WQ05UKGlvdmIpKTsKKwkJCQkJdmMtPnJ4X2lvdiA9IE5VTEw7CisJCQkJCXJlY3ljbGVfaW92X2J1ZihjYXJkLCBpb3ZiKTsKKwkJCQkJcmV0dXJuOworCQkJCX0gZWxzZSBpZiAoY2FyZC0+aGJwb29sLmNvdW50IDwgY2FyZC0+aGJuci5taW4pIHsKKwkJCQkJc3RydWN0IHNrX2J1ZmYgKm5ld19oYjsKKwkJCQkJaWYgKChuZXdfaGIgPQorCQkJCQkgICAgIGRldl9hbGxvY19za2IoTlNfSEJVRlNJWkUpKSAhPQorCQkJCQkgICAgTlVMTCkgeworCQkJCQkJc2tiX3F1ZXVlX3RhaWwoJmNhcmQtPmhicG9vbC4KKwkJCQkJCQkgICAgICAgcXVldWUsIG5ld19oYik7CisJCQkJCQljYXJkLT5oYnBvb2wuY291bnQrKzsKKwkJCQkJfQorCQkJCX0KKwkJCQlOU19QUlZfQlVGVFlQRShoYikgPSBCVUZfTk9ORTsKKwkJCX0gZWxzZSBpZiAoLS1jYXJkLT5oYnBvb2wuY291bnQgPCBjYXJkLT5oYm5yLm1pbikgeworCQkJCXN0cnVjdCBza19idWZmICpuZXdfaGI7CisJCQkJaWYgKChuZXdfaGIgPQorCQkJCSAgICAgZGV2X2FsbG9jX3NrYihOU19IQlVGU0laRSkpICE9IE5VTEwpIHsKKwkJCQkJTlNfUFJWX0JVRlRZUEUobmV3X2hiKSA9IEJVRl9OT05FOworCQkJCQlza2JfcXVldWVfdGFpbCgmY2FyZC0+aGJwb29sLnF1ZXVlLAorCQkJCQkJICAgICAgIG5ld19oYik7CisJCQkJCWNhcmQtPmhicG9vbC5jb3VudCsrOworCQkJCX0KKwkJCQlpZiAoY2FyZC0+aGJwb29sLmNvdW50IDwgY2FyZC0+aGJuci5taW4pIHsKKwkJCQkJaWYgKChuZXdfaGIgPQorCQkJCQkgICAgIGRldl9hbGxvY19za2IoTlNfSEJVRlNJWkUpKSAhPQorCQkJCQkgICAgTlVMTCkgeworCQkJCQkJTlNfUFJWX0JVRlRZUEUobmV3X2hiKSA9CisJCQkJCQkgICAgQlVGX05PTkU7CisJCQkJCQlza2JfcXVldWVfdGFpbCgmY2FyZC0+aGJwb29sLgorCQkJCQkJCSAgICAgICBxdWV1ZSwgbmV3X2hiKTsKKwkJCQkJCWNhcmQtPmhicG9vbC5jb3VudCsrOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpb3YgPSAoc3RydWN0IGlvdmVjICopaW92Yi0+ZGF0YTsKKworCQkJaWYgKCFhdG1fY2hhcmdlKHZjYywgaGItPnRydWVzaXplKSkgeworCQkJCXJlY3ljbGVfaW92ZWNfcnhfYnVmcyhjYXJkLCBpb3YsCisJCQkJCQkgICAgICBOU19QUlZfSU9WQ05UKGlvdmIpKTsKKwkJCQlpZiAoY2FyZC0+aGJwb29sLmNvdW50IDwgY2FyZC0+aGJuci5tYXgpIHsKKwkJCQkJc2tiX3F1ZXVlX3RhaWwoJmNhcmQtPmhicG9vbC5xdWV1ZSwgaGIpOworCQkJCQljYXJkLT5oYnBvb2wuY291bnQrKzsKKwkJCQl9IGVsc2UKKwkJCQkJZGV2X2tmcmVlX3NrYl9hbnkoaGIpOworCQkJCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnJ4X2Ryb3ApOworCQkJfSBlbHNlIHsKKwkJCQkvKiBDb3B5IHRoZSBzbWFsbCBidWZmZXIgdG8gdGhlIGh1Z2UgYnVmZmVyICovCisJCQkJc2IgPSAoc3RydWN0IHNrX2J1ZmYgKilpb3YtPmlvdl9iYXNlOworCQkJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2IsIGhiLT5kYXRhLAorCQkJCQkJCSAgaW92LT5pb3ZfbGVuKTsKKwkJCQlza2JfcHV0KGhiLCBpb3YtPmlvdl9sZW4pOworCQkJCXJlbWFpbmluZyA9IGxlbiAtIGlvdi0+aW92X2xlbjsKKwkJCQlpb3YrKzsKKwkJCQkvKiBGcmVlIHRoZSBzbWFsbCBidWZmZXIgKi8KKwkJCQlwdXNoX3J4YnVmcyhjYXJkLCBzYik7CisKKwkJCQkvKiBDb3B5IGFsbCBsYXJnZSBidWZmZXJzIHRvIHRoZSBodWdlIGJ1ZmZlciBhbmQgZnJlZSB0aGVtICovCisJCQkJZm9yIChqID0gMTsgaiA8IE5TX1BSVl9JT1ZDTlQoaW92Yik7IGorKykgeworCQkJCQlsYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKWlvdi0+aW92X2Jhc2U7CisJCQkJCXRvY29weSA9CisJCQkJCSAgICBtaW5fdChpbnQsIHJlbWFpbmluZywgaW92LT5pb3ZfbGVuKTsKKwkJCQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShsYiwKKwkJCQkJCQkJICBza2JfdGFpbF9wb2ludGVyCisJCQkJCQkJCSAgKGhiKSwgdG9jb3B5KTsKKwkJCQkJc2tiX3B1dChoYiwgdG9jb3B5KTsKKwkJCQkJaW92Kys7CisJCQkJCXJlbWFpbmluZyAtPSB0b2NvcHk7CisJCQkJCXB1c2hfcnhidWZzKGNhcmQsIGxiKTsKKwkJCQl9CisjaWZkZWYgRVhUUkFfREVCVUcKKwkJCQlpZiAocmVtYWluaW5nICE9IDAgfHwgaGItPmxlbiAhPSBsZW4pCisJCQkJCXByaW50aworCQkJCQkgICAgKCJuaWNzdGFyJWQ6IEh1Z2UgYnVmZmVyIGxlbiBtaXNtYXRjaC5cbiIsCisJCQkJCSAgICAgY2FyZC0+aW5kZXgpOworI2VuZGlmIC8qIEVYVFJBX0RFQlVHICovCisJCQkJQVRNX1NLQihoYiktPnZjYyA9IHZjYzsKKyNpZmRlZiBOU19VU0VfREVTVFJVQ1RPUlMKKwkJCQloYi0+ZGVzdHJ1Y3RvciA9IG5zX2hiX2Rlc3RydWN0b3I7CisjZW5kaWYgLyogTlNfVVNFX0RFU1RSVUNUT1JTICovCisJCQkJX19uZXRfdGltZXN0YW1wKGhiKTsKKwkJCQl2Y2MtPnB1c2godmNjLCBoYik7CisJCQkJYXRvbWljX2luYygmdmNjLT5zdGF0cy0+cngpOworCQkJfQorCQl9CisKKwkJdmMtPnJ4X2lvdiA9IE5VTEw7CisJCXJlY3ljbGVfaW92X2J1ZihjYXJkLCBpb3ZiKTsKKwl9CiAKIH0KIAotCi0KICNpZmRlZiBOU19VU0VfREVTVFJVQ1RPUlMKIAogc3RhdGljIHZvaWQgbnNfc2JfZGVzdHJ1Y3RvcihzdHJ1Y3Qgc2tfYnVmZiAqc2IpCiB7Ci0gICBuc19kZXYgKmNhcmQ7Ci0gICB1MzIgc3RhdDsKKwluc19kZXYgKmNhcmQ7CisJdTMyIHN0YXQ7CiAKLSAgIGNhcmQgPSAobnNfZGV2ICopIEFUTV9TS0Ioc2IpLT52Y2MtPmRldi0+ZGV2X2RhdGE7Ci0gICBzdGF0ID0gcmVhZGwoY2FyZC0+bWVtYmFzZSArIFNUQVQpOwotICAgY2FyZC0+c2JmcWMgPSBuc19zdGF0X3NmYnFjX2dldChzdGF0KTsgICAKLSAgIGNhcmQtPmxiZnFjID0gbnNfc3RhdF9sZmJxY19nZXQoc3RhdCk7CisJY2FyZCA9IChuc19kZXYgKikgQVRNX1NLQihzYiktPnZjYy0+ZGV2LT5kZXZfZGF0YTsKKwlzdGF0ID0gcmVhZGwoY2FyZC0+bWVtYmFzZSArIFNUQVQpOworCWNhcmQtPnNiZnFjID0gbnNfc3RhdF9zZmJxY19nZXQoc3RhdCk7CisJY2FyZC0+bGJmcWMgPSBuc19zdGF0X2xmYnFjX2dldChzdGF0KTsKIAotICAgZG8KLSAgIHsKLSAgICAgIHNiID0gX19kZXZfYWxsb2Nfc2tiKE5TX1NNU0tCU0laRSwgR0ZQX0tFUk5FTCk7Ci0gICAgICBpZiAoc2IgPT0gTlVMTCkKLSAgICAgICAgIGJyZWFrOwotICAgICAgTlNfU0tCX0NCKHNiKS0+YnVmX3R5cGUgPSBCVUZfU007Ci0gICAgICBza2JfcXVldWVfdGFpbCgmY2FyZC0+c2Jwb29sLnF1ZXVlLCBzYik7Ci0gICAgICBza2JfcmVzZXJ2ZShzYiwgTlNfQUFMMF9IRUFERVIpOwotICAgICAgcHVzaF9yeGJ1ZnMoY2FyZCwgc2IpOwotICAgfSB3aGlsZSAoY2FyZC0+c2JmcWMgPCBjYXJkLT5zYm5yLm1pbik7CisJZG8geworCQlzYiA9IF9fZGV2X2FsbG9jX3NrYihOU19TTVNLQlNJWkUsIEdGUF9LRVJORUwpOworCQlpZiAoc2IgPT0gTlVMTCkKKwkJCWJyZWFrOworCQlOU19QUlZfQlVGVFlQRShzYikgPSBCVUZfU007CisJCXNrYl9xdWV1ZV90YWlsKCZjYXJkLT5zYnBvb2wucXVldWUsIHNiKTsKKwkJc2tiX3Jlc2VydmUoc2IsIE5TX0FBTDBfSEVBREVSKTsKKwkJcHVzaF9yeGJ1ZnMoY2FyZCwgc2IpOworCX0gd2hpbGUgKGNhcmQtPnNiZnFjIDwgY2FyZC0+c2Juci5taW4pOwogfQogCi0KLQogc3RhdGljIHZvaWQgbnNfbGJfZGVzdHJ1Y3RvcihzdHJ1Y3Qgc2tfYnVmZiAqbGIpCiB7Ci0gICBuc19kZXYgKmNhcmQ7Ci0gICB1MzIgc3RhdDsKKwluc19kZXYgKmNhcmQ7CisJdTMyIHN0YXQ7CiAKLSAgIGNhcmQgPSAobnNfZGV2ICopIEFUTV9TS0IobGIpLT52Y2MtPmRldi0+ZGV2X2RhdGE7Ci0gICBzdGF0ID0gcmVhZGwoY2FyZC0+bWVtYmFzZSArIFNUQVQpOwotICAgY2FyZC0+c2JmcWMgPSBuc19zdGF0X3NmYnFjX2dldChzdGF0KTsgICAKLSAgIGNhcmQtPmxiZnFjID0gbnNfc3RhdF9sZmJxY19nZXQoc3RhdCk7CisJY2FyZCA9IChuc19kZXYgKikgQVRNX1NLQihsYiktPnZjYy0+ZGV2LT5kZXZfZGF0YTsKKwlzdGF0ID0gcmVhZGwoY2FyZC0+bWVtYmFzZSArIFNUQVQpOworCWNhcmQtPnNiZnFjID0gbnNfc3RhdF9zZmJxY19nZXQoc3RhdCk7CisJY2FyZC0+bGJmcWMgPSBuc19zdGF0X2xmYnFjX2dldChzdGF0KTsKIAotICAgZG8KLSAgIHsKLSAgICAgIGxiID0gX19kZXZfYWxsb2Nfc2tiKE5TX0xHU0tCU0laRSwgR0ZQX0tFUk5FTCk7Ci0gICAgICBpZiAobGIgPT0gTlVMTCkKLSAgICAgICAgIGJyZWFrOwotICAgICAgTlNfU0tCX0NCKGxiKS0+YnVmX3R5cGUgPSBCVUZfTEc7Ci0gICAgICBza2JfcXVldWVfdGFpbCgmY2FyZC0+bGJwb29sLnF1ZXVlLCBsYik7Ci0gICAgICBza2JfcmVzZXJ2ZShsYiwgTlNfU01CVUZTSVpFKTsKLSAgICAgIHB1c2hfcnhidWZzKGNhcmQsIGxiKTsKLSAgIH0gd2hpbGUgKGNhcmQtPmxiZnFjIDwgY2FyZC0+bGJuci5taW4pOworCWRvIHsKKwkJbGIgPSBfX2Rldl9hbGxvY19za2IoTlNfTEdTS0JTSVpFLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGxiID09IE5VTEwpCisJCQlicmVhazsKKwkJTlNfUFJWX0JVRlRZUEUobGIpID0gQlVGX0xHOworCQlza2JfcXVldWVfdGFpbCgmY2FyZC0+bGJwb29sLnF1ZXVlLCBsYik7CisJCXNrYl9yZXNlcnZlKGxiLCBOU19TTUJVRlNJWkUpOworCQlwdXNoX3J4YnVmcyhjYXJkLCBsYik7CisJfSB3aGlsZSAoY2FyZC0+bGJmcWMgPCBjYXJkLT5sYm5yLm1pbik7CiB9CiAKLQotCiBzdGF0aWMgdm9pZCBuc19oYl9kZXN0cnVjdG9yKHN0cnVjdCBza19idWZmICpoYikKIHsKLSAgIG5zX2RldiAqY2FyZDsKKwluc19kZXYgKmNhcmQ7CiAKLSAgIGNhcmQgPSAobnNfZGV2ICopIEFUTV9TS0IoaGIpLT52Y2MtPmRldi0+ZGV2X2RhdGE7CisJY2FyZCA9IChuc19kZXYgKikgQVRNX1NLQihoYiktPnZjYy0+ZGV2LT5kZXZfZGF0YTsKIAotICAgd2hpbGUgKGNhcmQtPmhicG9vbC5jb3VudCA8IGNhcmQtPmhibnIuaW5pdCkKLSAgIHsKLSAgICAgIGhiID0gX19kZXZfYWxsb2Nfc2tiKE5TX0hCVUZTSVpFLCBHRlBfS0VSTkVMKTsKLSAgICAgIGlmIChoYiA9PSBOVUxMKQotICAgICAgICAgYnJlYWs7Ci0gICAgICBOU19TS0JfQ0IoaGIpLT5idWZfdHlwZSA9IEJVRl9OT05FOwotICAgICAgc2tiX3F1ZXVlX3RhaWwoJmNhcmQtPmhicG9vbC5xdWV1ZSwgaGIpOwotICAgICAgY2FyZC0+aGJwb29sLmNvdW50Kys7Ci0gICB9CisJd2hpbGUgKGNhcmQtPmhicG9vbC5jb3VudCA8IGNhcmQtPmhibnIuaW5pdCkgeworCQloYiA9IF9fZGV2X2FsbG9jX3NrYihOU19IQlVGU0laRSwgR0ZQX0tFUk5FTCk7CisJCWlmIChoYiA9PSBOVUxMKQorCQkJYnJlYWs7CisJCU5TX1BSVl9CVUZUWVBFKGhiKSA9IEJVRl9OT05FOworCQlza2JfcXVldWVfdGFpbCgmY2FyZC0+aGJwb29sLnF1ZXVlLCBoYik7CisJCWNhcmQtPmhicG9vbC5jb3VudCsrOworCX0KIH0KIAogI2VuZGlmIC8qIE5TX1VTRV9ERVNUUlVDVE9SUyAqLwogCi0KLXN0YXRpYyB2b2lkIHJlY3ljbGVfcnhfYnVmKG5zX2RldiAqY2FyZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIHJlY3ljbGVfcnhfYnVmKG5zX2RldiAqIGNhcmQsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IG5zX3NrYl9jYiAqY2IgPSBOU19TS0JfQ0Ioc2tiKTsKLQotCWlmICh1bmxpa2VseShjYi0+YnVmX3R5cGUgPT0gQlVGX05PTkUpKSB7Ci0JCXByaW50aygibmljc3RhciVkOiBXaGF0IGtpbmQgb2YgcnggYnVmZmVyIGlzIHRoaXM/XG4iLCBjYXJkLT5pbmRleCk7CisJaWYgKHVubGlrZWx5KE5TX1BSVl9CVUZUWVBFKHNrYikgPT0gQlVGX05PTkUpKSB7CisJCXByaW50aygibmljc3RhciVkOiBXaGF0IGtpbmQgb2YgcnggYnVmZmVyIGlzIHRoaXM/XG4iLAorCQkgICAgICAgY2FyZC0+aW5kZXgpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCX0gZWxzZQogCQlwdXNoX3J4YnVmcyhjYXJkLCBza2IpOwogfQogCi0KLXN0YXRpYyB2b2lkIHJlY3ljbGVfaW92ZWNfcnhfYnVmcyhuc19kZXYgKmNhcmQsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCByZWN5Y2xlX2lvdmVjX3J4X2J1ZnMobnNfZGV2ICogY2FyZCwgc3RydWN0IGlvdmVjICppb3YsIGludCBjb3VudCkKIHsKIAl3aGlsZSAoY291bnQtLSA+IDApCi0JCXJlY3ljbGVfcnhfYnVmKGNhcmQsIChzdHJ1Y3Qgc2tfYnVmZiAqKSAoaW92KyspLT5pb3ZfYmFzZSk7CisJCXJlY3ljbGVfcnhfYnVmKGNhcmQsIChzdHJ1Y3Qgc2tfYnVmZiAqKShpb3YrKyktPmlvdl9iYXNlKTsKIH0KIAotCi1zdGF0aWMgdm9pZCByZWN5Y2xlX2lvdl9idWYobnNfZGV2ICpjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqaW92YikKK3N0YXRpYyB2b2lkIHJlY3ljbGVfaW92X2J1Zihuc19kZXYgKiBjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqaW92YikKIHsKLSAgIGlmIChjYXJkLT5pb3Zwb29sLmNvdW50IDwgY2FyZC0+aW92bnIubWF4KQotICAgewotICAgICAgc2tiX3F1ZXVlX3RhaWwoJmNhcmQtPmlvdnBvb2wucXVldWUsIGlvdmIpOwotICAgICAgY2FyZC0+aW92cG9vbC5jb3VudCsrOwotICAgfQotICAgZWxzZQotICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoaW92Yik7CisJaWYgKGNhcmQtPmlvdnBvb2wuY291bnQgPCBjYXJkLT5pb3Zuci5tYXgpIHsKKwkJc2tiX3F1ZXVlX3RhaWwoJmNhcmQtPmlvdnBvb2wucXVldWUsIGlvdmIpOworCQljYXJkLT5pb3Zwb29sLmNvdW50Kys7CisJfSBlbHNlCisJCWRldl9rZnJlZV9za2JfYW55KGlvdmIpOwogfQogCi0KLQotc3RhdGljIHZvaWQgZGVxdWV1ZV9zbV9idWYobnNfZGV2ICpjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2IpCitzdGF0aWMgdm9pZCBkZXF1ZXVlX3NtX2J1Zihuc19kZXYgKiBjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2IpCiB7Ci0gICBza2JfdW5saW5rKHNiLCAmY2FyZC0+c2Jwb29sLnF1ZXVlKTsKKwlza2JfdW5saW5rKHNiLCAmY2FyZC0+c2Jwb29sLnF1ZXVlKTsKICNpZmRlZiBOU19VU0VfREVTVFJVQ1RPUlMKLSAgIGlmIChjYXJkLT5zYmZxYyA8IGNhcmQtPnNibnIubWluKQorCWlmIChjYXJkLT5zYmZxYyA8IGNhcmQtPnNibnIubWluKQogI2Vsc2UKLSAgIGlmIChjYXJkLT5zYmZxYyA8IGNhcmQtPnNibnIuaW5pdCkKLSAgIHsKLSAgICAgIHN0cnVjdCBza19idWZmICpuZXdfc2I7Ci0gICAgICBpZiAoKG5ld19zYiA9IGRldl9hbGxvY19za2IoTlNfU01TS0JTSVpFKSkgIT0gTlVMTCkKLSAgICAgIHsKLSAgICAgICAgIE5TX1NLQl9DQihuZXdfc2IpLT5idWZfdHlwZSA9IEJVRl9TTTsKLSAgICAgICAgIHNrYl9xdWV1ZV90YWlsKCZjYXJkLT5zYnBvb2wucXVldWUsIG5ld19zYik7Ci0gICAgICAgICBza2JfcmVzZXJ2ZShuZXdfc2IsIE5TX0FBTDBfSEVBREVSKTsKLSAgICAgICAgIHB1c2hfcnhidWZzKGNhcmQsIG5ld19zYik7Ci0gICAgICB9Ci0gICB9Ci0gICBpZiAoY2FyZC0+c2JmcWMgPCBjYXJkLT5zYm5yLmluaXQpCisJaWYgKGNhcmQtPnNiZnFjIDwgY2FyZC0+c2Juci5pbml0KSB7CisJCXN0cnVjdCBza19idWZmICpuZXdfc2I7CisJCWlmICgobmV3X3NiID0gZGV2X2FsbG9jX3NrYihOU19TTVNLQlNJWkUpKSAhPSBOVUxMKSB7CisJCQlOU19QUlZfQlVGVFlQRShuZXdfc2IpID0gQlVGX1NNOworCQkJc2tiX3F1ZXVlX3RhaWwoJmNhcmQtPnNicG9vbC5xdWV1ZSwgbmV3X3NiKTsKKwkJCXNrYl9yZXNlcnZlKG5ld19zYiwgTlNfQUFMMF9IRUFERVIpOworCQkJcHVzaF9yeGJ1ZnMoY2FyZCwgbmV3X3NiKTsKKwkJfQorCX0KKwlpZiAoY2FyZC0+c2JmcWMgPCBjYXJkLT5zYm5yLmluaXQpCiAjZW5kaWYgLyogTlNfVVNFX0RFU1RSVUNUT1JTICovCi0gICB7Ci0gICAgICBzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NiOwotICAgICAgaWYgKChuZXdfc2IgPSBkZXZfYWxsb2Nfc2tiKE5TX1NNU0tCU0laRSkpICE9IE5VTEwpCi0gICAgICB7Ci0gICAgICAgICBOU19TS0JfQ0IobmV3X3NiKS0+YnVmX3R5cGUgPSBCVUZfU007Ci0gICAgICAgICBza2JfcXVldWVfdGFpbCgmY2FyZC0+c2Jwb29sLnF1ZXVlLCBuZXdfc2IpOwotICAgICAgICAgc2tiX3Jlc2VydmUobmV3X3NiLCBOU19BQUwwX0hFQURFUik7Ci0gICAgICAgICBwdXNoX3J4YnVmcyhjYXJkLCBuZXdfc2IpOwotICAgICAgfQotICAgfQorCXsKKwkJc3RydWN0IHNrX2J1ZmYgKm5ld19zYjsKKwkJaWYgKChuZXdfc2IgPSBkZXZfYWxsb2Nfc2tiKE5TX1NNU0tCU0laRSkpICE9IE5VTEwpIHsKKwkJCU5TX1BSVl9CVUZUWVBFKG5ld19zYikgPSBCVUZfU007CisJCQlza2JfcXVldWVfdGFpbCgmY2FyZC0+c2Jwb29sLnF1ZXVlLCBuZXdfc2IpOworCQkJc2tiX3Jlc2VydmUobmV3X3NiLCBOU19BQUwwX0hFQURFUik7CisJCQlwdXNoX3J4YnVmcyhjYXJkLCBuZXdfc2IpOworCQl9CisJfQogfQogCi0KLQotc3RhdGljIHZvaWQgZGVxdWV1ZV9sZ19idWYobnNfZGV2ICpjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqbGIpCitzdGF0aWMgdm9pZCBkZXF1ZXVlX2xnX2J1Zihuc19kZXYgKiBjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqbGIpCiB7Ci0gICBza2JfdW5saW5rKGxiLCAmY2FyZC0+bGJwb29sLnF1ZXVlKTsKKwlza2JfdW5saW5rKGxiLCAmY2FyZC0+bGJwb29sLnF1ZXVlKTsKICNpZmRlZiBOU19VU0VfREVTVFJVQ1RPUlMKLSAgIGlmIChjYXJkLT5sYmZxYyA8IGNhcmQtPmxibnIubWluKQorCWlmIChjYXJkLT5sYmZxYyA8IGNhcmQtPmxibnIubWluKQogI2Vsc2UKLSAgIGlmIChjYXJkLT5sYmZxYyA8IGNhcmQtPmxibnIuaW5pdCkKLSAgIHsKLSAgICAgIHN0cnVjdCBza19idWZmICpuZXdfbGI7Ci0gICAgICBpZiAoKG5ld19sYiA9IGRldl9hbGxvY19za2IoTlNfTEdTS0JTSVpFKSkgIT0gTlVMTCkKLSAgICAgIHsKLSAgICAgICAgIE5TX1NLQl9DQihuZXdfbGIpLT5idWZfdHlwZSA9IEJVRl9MRzsKLSAgICAgICAgIHNrYl9xdWV1ZV90YWlsKCZjYXJkLT5sYnBvb2wucXVldWUsIG5ld19sYik7Ci0gICAgICAgICBza2JfcmVzZXJ2ZShuZXdfbGIsIE5TX1NNQlVGU0laRSk7Ci0gICAgICAgICBwdXNoX3J4YnVmcyhjYXJkLCBuZXdfbGIpOwotICAgICAgfQotICAgfQotICAgaWYgKGNhcmQtPmxiZnFjIDwgY2FyZC0+bGJuci5pbml0KQorCWlmIChjYXJkLT5sYmZxYyA8IGNhcmQtPmxibnIuaW5pdCkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X2xiOworCQlpZiAoKG5ld19sYiA9IGRldl9hbGxvY19za2IoTlNfTEdTS0JTSVpFKSkgIT0gTlVMTCkgeworCQkJTlNfUFJWX0JVRlRZUEUobmV3X2xiKSA9IEJVRl9MRzsKKwkJCXNrYl9xdWV1ZV90YWlsKCZjYXJkLT5sYnBvb2wucXVldWUsIG5ld19sYik7CisJCQlza2JfcmVzZXJ2ZShuZXdfbGIsIE5TX1NNQlVGU0laRSk7CisJCQlwdXNoX3J4YnVmcyhjYXJkLCBuZXdfbGIpOworCQl9CisJfQorCWlmIChjYXJkLT5sYmZxYyA8IGNhcmQtPmxibnIuaW5pdCkKICNlbmRpZiAvKiBOU19VU0VfREVTVFJVQ1RPUlMgKi8KLSAgIHsKLSAgICAgIHN0cnVjdCBza19idWZmICpuZXdfbGI7Ci0gICAgICBpZiAoKG5ld19sYiA9IGRldl9hbGxvY19za2IoTlNfTEdTS0JTSVpFKSkgIT0gTlVMTCkKLSAgICAgIHsKLSAgICAgICAgIE5TX1NLQl9DQihuZXdfbGIpLT5idWZfdHlwZSA9IEJVRl9MRzsKLSAgICAgICAgIHNrYl9xdWV1ZV90YWlsKCZjYXJkLT5sYnBvb2wucXVldWUsIG5ld19sYik7Ci0gICAgICAgICBza2JfcmVzZXJ2ZShuZXdfbGIsIE5TX1NNQlVGU0laRSk7Ci0gICAgICAgICBwdXNoX3J4YnVmcyhjYXJkLCBuZXdfbGIpOwotICAgICAgfQotICAgfQorCXsKKwkJc3RydWN0IHNrX2J1ZmYgKm5ld19sYjsKKwkJaWYgKChuZXdfbGIgPSBkZXZfYWxsb2Nfc2tiKE5TX0xHU0tCU0laRSkpICE9IE5VTEwpIHsKKwkJCU5TX1BSVl9CVUZUWVBFKG5ld19sYikgPSBCVUZfTEc7CisJCQlza2JfcXVldWVfdGFpbCgmY2FyZC0+bGJwb29sLnF1ZXVlLCBuZXdfbGIpOworCQkJc2tiX3Jlc2VydmUobmV3X2xiLCBOU19TTUJVRlNJWkUpOworCQkJcHVzaF9yeGJ1ZnMoY2FyZCwgbmV3X2xiKTsKKwkJfQorCX0KIH0KIAotCi0KLXN0YXRpYyBpbnQgbnNfcHJvY19yZWFkKHN0cnVjdCBhdG1fZGV2ICpkZXYsIGxvZmZfdCAqcG9zLCBjaGFyICpwYWdlKQorc3RhdGljIGludCBuc19wcm9jX3JlYWQoc3RydWN0IGF0bV9kZXYgKmRldiwgbG9mZl90ICogcG9zLCBjaGFyICpwYWdlKQogewotICAgdTMyIHN0YXQ7Ci0gICBuc19kZXYgKmNhcmQ7Ci0gICBpbnQgbGVmdDsKKwl1MzIgc3RhdDsKKwluc19kZXYgKmNhcmQ7CisJaW50IGxlZnQ7CiAKLSAgIGxlZnQgPSAoaW50KSAqcG9zOwotICAgY2FyZCA9IChuc19kZXYgKikgZGV2LT5kZXZfZGF0YTsKLSAgIHN0YXQgPSByZWFkbChjYXJkLT5tZW1iYXNlICsgU1RBVCk7Ci0gICBpZiAoIWxlZnQtLSkKLSAgICAgIHJldHVybiBzcHJpbnRmKHBhZ2UsICJQb29sICAgY291bnQgICAgbWluICAgaW5pdCAgICBtYXggXG4iKTsKLSAgIGlmICghbGVmdC0tKQotICAgICAgcmV0dXJuIHNwcmludGYocGFnZSwgIlNtYWxsICAlNWQgICU1ZCAgJTVkICAlNWQgXG4iLAotICAgICAgICAgICAgICAgICAgICAgbnNfc3RhdF9zZmJxY19nZXQoc3RhdCksIGNhcmQtPnNibnIubWluLCBjYXJkLT5zYm5yLmluaXQsCi0JCSAgICAgY2FyZC0+c2Juci5tYXgpOwotICAgaWYgKCFsZWZ0LS0pCi0gICAgICByZXR1cm4gc3ByaW50ZihwYWdlLCAiTGFyZ2UgICU1ZCAgJTVkICAlNWQgICU1ZCBcbiIsCi0gICAgICAgICAgICAgICAgICAgICBuc19zdGF0X2xmYnFjX2dldChzdGF0KSwgY2FyZC0+bGJuci5taW4sIGNhcmQtPmxibnIuaW5pdCwKLQkJICAgICBjYXJkLT5sYm5yLm1heCk7Ci0gICBpZiAoIWxlZnQtLSkKLSAgICAgIHJldHVybiBzcHJpbnRmKHBhZ2UsICJIdWdlICAgJTVkICAlNWQgICU1ZCAgJTVkIFxuIiwgY2FyZC0+aGJwb29sLmNvdW50LAotICAgICAgICAgICAgICAgICAgICAgY2FyZC0+aGJuci5taW4sIGNhcmQtPmhibnIuaW5pdCwgY2FyZC0+aGJuci5tYXgpOwotICAgaWYgKCFsZWZ0LS0pCi0gICAgICByZXR1cm4gc3ByaW50ZihwYWdlLCAiSW92ZWMgICU1ZCAgJTVkICAlNWQgICU1ZCBcbiIsIGNhcmQtPmlvdnBvb2wuY291bnQsCi0gICAgICAgICAgICAgICAgICAgICBjYXJkLT5pb3Zuci5taW4sIGNhcmQtPmlvdm5yLmluaXQsIGNhcmQtPmlvdm5yLm1heCk7Ci0gICBpZiAoIWxlZnQtLSkKLSAgIHsKLSAgICAgIGludCByZXR2YWw7Ci0gICAgICByZXR2YWwgPSBzcHJpbnRmKHBhZ2UsICJJbnRlcnJ1cHQgY291bnRlcjogJXUgXG4iLCBjYXJkLT5pbnRjbnQpOwotICAgICAgY2FyZC0+aW50Y250ID0gMDsKLSAgICAgIHJldHVybiByZXR2YWw7Ci0gICB9CisJbGVmdCA9IChpbnQpKnBvczsKKwljYXJkID0gKG5zX2RldiAqKSBkZXYtPmRldl9kYXRhOworCXN0YXQgPSByZWFkbChjYXJkLT5tZW1iYXNlICsgU1RBVCk7CisJaWYgKCFsZWZ0LS0pCisJCXJldHVybiBzcHJpbnRmKHBhZ2UsICJQb29sICAgY291bnQgICAgbWluICAgaW5pdCAgICBtYXggXG4iKTsKKwlpZiAoIWxlZnQtLSkKKwkJcmV0dXJuIHNwcmludGYocGFnZSwgIlNtYWxsICAlNWQgICU1ZCAgJTVkICAlNWQgXG4iLAorCQkJICAgICAgIG5zX3N0YXRfc2ZicWNfZ2V0KHN0YXQpLCBjYXJkLT5zYm5yLm1pbiwKKwkJCSAgICAgICBjYXJkLT5zYm5yLmluaXQsIGNhcmQtPnNibnIubWF4KTsKKwlpZiAoIWxlZnQtLSkKKwkJcmV0dXJuIHNwcmludGYocGFnZSwgIkxhcmdlICAlNWQgICU1ZCAgJTVkICAlNWQgXG4iLAorCQkJICAgICAgIG5zX3N0YXRfbGZicWNfZ2V0KHN0YXQpLCBjYXJkLT5sYm5yLm1pbiwKKwkJCSAgICAgICBjYXJkLT5sYm5yLmluaXQsIGNhcmQtPmxibnIubWF4KTsKKwlpZiAoIWxlZnQtLSkKKwkJcmV0dXJuIHNwcmludGYocGFnZSwgIkh1Z2UgICAlNWQgICU1ZCAgJTVkICAlNWQgXG4iLAorCQkJICAgICAgIGNhcmQtPmhicG9vbC5jb3VudCwgY2FyZC0+aGJuci5taW4sCisJCQkgICAgICAgY2FyZC0+aGJuci5pbml0LCBjYXJkLT5oYm5yLm1heCk7CisJaWYgKCFsZWZ0LS0pCisJCXJldHVybiBzcHJpbnRmKHBhZ2UsICJJb3ZlYyAgJTVkICAlNWQgICU1ZCAgJTVkIFxuIiwKKwkJCSAgICAgICBjYXJkLT5pb3Zwb29sLmNvdW50LCBjYXJkLT5pb3Zuci5taW4sCisJCQkgICAgICAgY2FyZC0+aW92bnIuaW5pdCwgY2FyZC0+aW92bnIubWF4KTsKKwlpZiAoIWxlZnQtLSkgeworCQlpbnQgcmV0dmFsOworCQlyZXR2YWwgPQorCQkgICAgc3ByaW50ZihwYWdlLCAiSW50ZXJydXB0IGNvdW50ZXI6ICV1IFxuIiwgY2FyZC0+aW50Y250KTsKKwkJY2FyZC0+aW50Y250ID0gMDsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CiAjaWYgMAotICAgLyogRHVtcCAyNS42IE1icHMgUEhZIHJlZ2lzdGVycyAqLwotICAgLyogTm93IHRoZXJlJ3MgYSAyNS42IE1icHMgUEhZIGRyaXZlciB0aGlzIGNvZGUgaXNuJ3QgbmVlZGVkLiBJIGxlZnQgaXQKLSAgICAgIGhlcmUganVzdCBpbiBjYXNlIGl0J3MgbmVlZGVkIGZvciBkZWJ1Z2dpbmcuICovCi0gICBpZiAoY2FyZC0+bWF4X3BjciA9PSBBVE1fMjVfUENSICYmICFsZWZ0LS0pCi0gICB7Ci0gICAgICB1MzIgcGh5X3JlZ3NbNF07Ci0gICAgICB1MzIgaTsKKwkvKiBEdW1wIDI1LjYgTWJwcyBQSFkgcmVnaXN0ZXJzICovCisJLyogTm93IHRoZXJlJ3MgYSAyNS42IE1icHMgUEhZIGRyaXZlciB0aGlzIGNvZGUgaXNuJ3QgbmVlZGVkLiBJIGxlZnQgaXQKKwkgICBoZXJlIGp1c3QgaW4gY2FzZSBpdCdzIG5lZWRlZCBmb3IgZGVidWdnaW5nLiAqLworCWlmIChjYXJkLT5tYXhfcGNyID09IEFUTV8yNV9QQ1IgJiYgIWxlZnQtLSkgeworCQl1MzIgcGh5X3JlZ3NbNF07CisJCXUzMiBpOwogCi0gICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotICAgICAgewotICAgICAgICAgd2hpbGUgKENNRF9CVVNZKGNhcmQpKTsKLSAgICAgICAgIHdyaXRlbChOU19DTURfUkVBRF9VVElMSVRZIHwgMHgwMDAwMDIwMCB8IGksIGNhcmQtPm1lbWJhc2UgKyBDTUQpOwotICAgICAgICAgd2hpbGUgKENNRF9CVVNZKGNhcmQpKTsKLSAgICAgICAgIHBoeV9yZWdzW2ldID0gcmVhZGwoY2FyZC0+bWVtYmFzZSArIERSMCkgJiAweDAwMDAwMEZGOwotICAgICAgfQorCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQl3aGlsZSAoQ01EX0JVU1koY2FyZCkpIDsKKwkJCXdyaXRlbChOU19DTURfUkVBRF9VVElMSVRZIHwgMHgwMDAwMDIwMCB8IGksCisJCQkgICAgICAgY2FyZC0+bWVtYmFzZSArIENNRCk7CisJCQl3aGlsZSAoQ01EX0JVU1koY2FyZCkpIDsKKwkJCXBoeV9yZWdzW2ldID0gcmVhZGwoY2FyZC0+bWVtYmFzZSArIERSMCkgJiAweDAwMDAwMEZGOworCQl9CiAKLSAgICAgIHJldHVybiBzcHJpbnRmKHBhZ2UsICJQSFkgcmVnczogMHglMDJYIDB4JTAyWCAweCUwMlggMHglMDJYIFxuIiwKLSAgICAgICAgICAgICAgICAgICAgIHBoeV9yZWdzWzBdLCBwaHlfcmVnc1sxXSwgcGh5X3JlZ3NbMl0sIHBoeV9yZWdzWzNdKTsKLSAgIH0KKwkJcmV0dXJuIHNwcmludGYocGFnZSwgIlBIWSByZWdzOiAweCUwMlggMHglMDJYIDB4JTAyWCAweCUwMlggXG4iLAorCQkJICAgICAgIHBoeV9yZWdzWzBdLCBwaHlfcmVnc1sxXSwgcGh5X3JlZ3NbMl0sCisJCQkgICAgICAgcGh5X3JlZ3NbM10pOworCX0KICNlbmRpZiAvKiAwIC0gRHVtcCAyNS42IE1icHMgUEhZIHJlZ2lzdGVycyAqLwogI2lmIDAKLSAgIC8qIER1bXAgVFNUICovCi0gICBpZiAobGVmdC0tIDwgTlNfVFNUX05VTV9FTlRSSUVTKQotICAgewotICAgICAgaWYgKGNhcmQtPnRzdGUydmNbbGVmdCArIDFdID09IE5VTEwpCi0gICAgICAgICByZXR1cm4gc3ByaW50ZihwYWdlLCAiJTVkIC0gVkJSL1VCUiBcbiIsIGxlZnQgKyAxKTsKLSAgICAgIGVsc2UKLSAgICAgICAgIHJldHVybiBzcHJpbnRmKHBhZ2UsICIlNWQgLSAlZCAlZCBcbiIsIGxlZnQgKyAxLAotICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+dHN0ZTJ2Y1tsZWZ0ICsgMV0tPnR4X3ZjYy0+dnBpLAotICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+dHN0ZTJ2Y1tsZWZ0ICsgMV0tPnR4X3ZjYy0+dmNpKTsKLSAgIH0KKwkvKiBEdW1wIFRTVCAqLworCWlmIChsZWZ0LS0gPCBOU19UU1RfTlVNX0VOVFJJRVMpIHsKKwkJaWYgKGNhcmQtPnRzdGUydmNbbGVmdCArIDFdID09IE5VTEwpCisJCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJTVkIC0gVkJSL1VCUiBcbiIsIGxlZnQgKyAxKTsKKwkJZWxzZQorCQkJcmV0dXJuIHNwcmludGYocGFnZSwgIiU1ZCAtICVkICVkIFxuIiwgbGVmdCArIDEsCisJCQkJICAgICAgIGNhcmQtPnRzdGUydmNbbGVmdCArIDFdLT50eF92Y2MtPnZwaSwKKwkJCQkgICAgICAgY2FyZC0+dHN0ZTJ2Y1tsZWZ0ICsgMV0tPnR4X3ZjYy0+dmNpKTsKKwl9CiAjZW5kaWYgLyogMCAqLwotICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKLQotCi1zdGF0aWMgaW50IG5zX2lvY3RsKHN0cnVjdCBhdG1fZGV2ICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpCitzdGF0aWMgaW50IG5zX2lvY3RsKHN0cnVjdCBhdG1fZGV2ICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICogYXJnKQogewotICAgbnNfZGV2ICpjYXJkOwotICAgcG9vbF9sZXZlbHMgcGw7Ci0gICBsb25nIGJ0eXBlOwotICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKwluc19kZXYgKmNhcmQ7CisJcG9vbF9sZXZlbHMgcGw7CisJbG9uZyBidHlwZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0gICBjYXJkID0gZGV2LT5kZXZfZGF0YTsKLSAgIHN3aXRjaCAoY21kKQotICAgewotICAgICAgY2FzZSBOU19HRVRQU1RBVDoKLSAgICAgICAgIGlmIChnZXRfdXNlcihwbC5idWZ0eXBlLCAmKChwb29sX2xldmVscyBfX3VzZXIgKikgYXJnKS0+YnVmdHlwZSkpCi0JICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICAgc3dpdGNoIChwbC5idWZ0eXBlKQotCSB7Ci0JICAgIGNhc2UgTlNfQlVGVFlQRV9TTUFMTDoKLQkgICAgICAgcGwuY291bnQgPSBuc19zdGF0X3NmYnFjX2dldChyZWFkbChjYXJkLT5tZW1iYXNlICsgU1RBVCkpOwotCSAgICAgICBwbC5sZXZlbC5taW4gPSBjYXJkLT5zYm5yLm1pbjsKLQkgICAgICAgcGwubGV2ZWwuaW5pdCA9IGNhcmQtPnNibnIuaW5pdDsKLQkgICAgICAgcGwubGV2ZWwubWF4ID0gY2FyZC0+c2Juci5tYXg7Ci0JICAgICAgIGJyZWFrOworCWNhcmQgPSBkZXYtPmRldl9kYXRhOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBOU19HRVRQU1RBVDoKKwkJaWYgKGdldF91c2VyCisJCSAgICAocGwuYnVmdHlwZSwgJigocG9vbF9sZXZlbHMgX191c2VyICopIGFyZyktPmJ1ZnR5cGUpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXN3aXRjaCAocGwuYnVmdHlwZSkgeworCQljYXNlIE5TX0JVRlRZUEVfU01BTEw6CisJCQlwbC5jb3VudCA9CisJCQkgICAgbnNfc3RhdF9zZmJxY19nZXQocmVhZGwoY2FyZC0+bWVtYmFzZSArIFNUQVQpKTsKKwkJCXBsLmxldmVsLm1pbiA9IGNhcmQtPnNibnIubWluOworCQkJcGwubGV2ZWwuaW5pdCA9IGNhcmQtPnNibnIuaW5pdDsKKwkJCXBsLmxldmVsLm1heCA9IGNhcmQtPnNibnIubWF4OworCQkJYnJlYWs7CiAKLQkgICAgY2FzZSBOU19CVUZUWVBFX0xBUkdFOgotCSAgICAgICBwbC5jb3VudCA9IG5zX3N0YXRfbGZicWNfZ2V0KHJlYWRsKGNhcmQtPm1lbWJhc2UgKyBTVEFUKSk7Ci0JICAgICAgIHBsLmxldmVsLm1pbiA9IGNhcmQtPmxibnIubWluOwotCSAgICAgICBwbC5sZXZlbC5pbml0ID0gY2FyZC0+bGJuci5pbml0OwotCSAgICAgICBwbC5sZXZlbC5tYXggPSBjYXJkLT5sYm5yLm1heDsKLQkgICAgICAgYnJlYWs7CisJCWNhc2UgTlNfQlVGVFlQRV9MQVJHRToKKwkJCXBsLmNvdW50ID0KKwkJCSAgICBuc19zdGF0X2xmYnFjX2dldChyZWFkbChjYXJkLT5tZW1iYXNlICsgU1RBVCkpOworCQkJcGwubGV2ZWwubWluID0gY2FyZC0+bGJuci5taW47CisJCQlwbC5sZXZlbC5pbml0ID0gY2FyZC0+bGJuci5pbml0OworCQkJcGwubGV2ZWwubWF4ID0gY2FyZC0+bGJuci5tYXg7CisJCQlicmVhazsKIAotCSAgICBjYXNlIE5TX0JVRlRZUEVfSFVHRToKLQkgICAgICAgcGwuY291bnQgPSBjYXJkLT5oYnBvb2wuY291bnQ7Ci0JICAgICAgIHBsLmxldmVsLm1pbiA9IGNhcmQtPmhibnIubWluOwotCSAgICAgICBwbC5sZXZlbC5pbml0ID0gY2FyZC0+aGJuci5pbml0OwotCSAgICAgICBwbC5sZXZlbC5tYXggPSBjYXJkLT5oYm5yLm1heDsKLQkgICAgICAgYnJlYWs7CisJCWNhc2UgTlNfQlVGVFlQRV9IVUdFOgorCQkJcGwuY291bnQgPSBjYXJkLT5oYnBvb2wuY291bnQ7CisJCQlwbC5sZXZlbC5taW4gPSBjYXJkLT5oYm5yLm1pbjsKKwkJCXBsLmxldmVsLmluaXQgPSBjYXJkLT5oYm5yLmluaXQ7CisJCQlwbC5sZXZlbC5tYXggPSBjYXJkLT5oYm5yLm1heDsKKwkJCWJyZWFrOwogCi0JICAgIGNhc2UgTlNfQlVGVFlQRV9JT1ZFQzoKLQkgICAgICAgcGwuY291bnQgPSBjYXJkLT5pb3Zwb29sLmNvdW50OwotCSAgICAgICBwbC5sZXZlbC5taW4gPSBjYXJkLT5pb3Zuci5taW47Ci0JICAgICAgIHBsLmxldmVsLmluaXQgPSBjYXJkLT5pb3Zuci5pbml0OwotCSAgICAgICBwbC5sZXZlbC5tYXggPSBjYXJkLT5pb3Zuci5tYXg7Ci0JICAgICAgIGJyZWFrOworCQljYXNlIE5TX0JVRlRZUEVfSU9WRUM6CisJCQlwbC5jb3VudCA9IGNhcmQtPmlvdnBvb2wuY291bnQ7CisJCQlwbC5sZXZlbC5taW4gPSBjYXJkLT5pb3Zuci5taW47CisJCQlwbC5sZXZlbC5pbml0ID0gY2FyZC0+aW92bnIuaW5pdDsKKwkJCXBsLmxldmVsLm1heCA9IGNhcmQtPmlvdm5yLm1heDsKKwkJCWJyZWFrOwogCi0gICAgICAgICAgICBkZWZhdWx0OgotCSAgICAgICByZXR1cm4gLUVOT0lPQ1RMQ01EOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKIAotCSB9Ci0gICAgICAgICBpZiAoIWNvcHlfdG9fdXNlcigocG9vbF9sZXZlbHMgX191c2VyICopIGFyZywgJnBsLCBzaXplb2YocGwpKSkKLQkgICAgcmV0dXJuIChzaXplb2YocGwpKTsKLQkgZWxzZQotCSAgICByZXR1cm4gLUVGQVVMVDsKKwkJfQorCQlpZiAoIWNvcHlfdG9fdXNlcigocG9vbF9sZXZlbHMgX191c2VyICopIGFyZywgJnBsLCBzaXplb2YocGwpKSkKKwkJCXJldHVybiAoc2l6ZW9mKHBsKSk7CisJCWVsc2UKKwkJCXJldHVybiAtRUZBVUxUOwogCi0gICAgICBjYXNlIE5TX1NFVEJVRkxFVjoKLSAgICAgICAgIGlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkgICAgcmV0dXJuIC1FUEVSTTsKLSAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmcGwsIChwb29sX2xldmVscyBfX3VzZXIgKikgYXJnLCBzaXplb2YocGwpKSkKLQkgICAgcmV0dXJuIC1FRkFVTFQ7Ci0JIGlmIChwbC5sZXZlbC5taW4gPj0gcGwubGV2ZWwuaW5pdCB8fCBwbC5sZXZlbC5pbml0ID49IHBsLmxldmVsLm1heCkKLQkgICAgcmV0dXJuIC1FSU5WQUw7Ci0JIGlmIChwbC5sZXZlbC5taW4gPT0gMCkKLQkgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICBzd2l0Y2ggKHBsLmJ1ZnR5cGUpCi0JIHsKLQkgICAgY2FzZSBOU19CVUZUWVBFX1NNQUxMOgotICAgICAgICAgICAgICAgaWYgKHBsLmxldmVsLm1heCA+IFRPUF9TQikKLQkgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0JICAgICAgIGNhcmQtPnNibnIubWluID0gcGwubGV2ZWwubWluOwotCSAgICAgICBjYXJkLT5zYm5yLmluaXQgPSBwbC5sZXZlbC5pbml0OwotCSAgICAgICBjYXJkLT5zYm5yLm1heCA9IHBsLmxldmVsLm1heDsKLQkgICAgICAgYnJlYWs7CisJY2FzZSBOU19TRVRCVUZMRVY6CisJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKKwkJCXJldHVybiAtRVBFUk07CisJCWlmIChjb3B5X2Zyb21fdXNlcigmcGwsIChwb29sX2xldmVscyBfX3VzZXIgKikgYXJnLCBzaXplb2YocGwpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAocGwubGV2ZWwubWluID49IHBsLmxldmVsLmluaXQKKwkJICAgIHx8IHBsLmxldmVsLmluaXQgPj0gcGwubGV2ZWwubWF4KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChwbC5sZXZlbC5taW4gPT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlzd2l0Y2ggKHBsLmJ1ZnR5cGUpIHsKKwkJY2FzZSBOU19CVUZUWVBFX1NNQUxMOgorCQkJaWYgKHBsLmxldmVsLm1heCA+IFRPUF9TQikKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWNhcmQtPnNibnIubWluID0gcGwubGV2ZWwubWluOworCQkJY2FyZC0+c2Juci5pbml0ID0gcGwubGV2ZWwuaW5pdDsKKwkJCWNhcmQtPnNibnIubWF4ID0gcGwubGV2ZWwubWF4OworCQkJYnJlYWs7CiAKLQkgICAgY2FzZSBOU19CVUZUWVBFX0xBUkdFOgotICAgICAgICAgICAgICAgaWYgKHBsLmxldmVsLm1heCA+IFRPUF9MQikKLQkgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0JICAgICAgIGNhcmQtPmxibnIubWluID0gcGwubGV2ZWwubWluOwotCSAgICAgICBjYXJkLT5sYm5yLmluaXQgPSBwbC5sZXZlbC5pbml0OwotCSAgICAgICBjYXJkLT5sYm5yLm1heCA9IHBsLmxldmVsLm1heDsKLQkgICAgICAgYnJlYWs7CisJCWNhc2UgTlNfQlVGVFlQRV9MQVJHRToKKwkJCWlmIChwbC5sZXZlbC5tYXggPiBUT1BfTEIpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQljYXJkLT5sYm5yLm1pbiA9IHBsLmxldmVsLm1pbjsKKwkJCWNhcmQtPmxibnIuaW5pdCA9IHBsLmxldmVsLmluaXQ7CisJCQljYXJkLT5sYm5yLm1heCA9IHBsLmxldmVsLm1heDsKKwkJCWJyZWFrOwogCi0JICAgIGNhc2UgTlNfQlVGVFlQRV9IVUdFOgotICAgICAgICAgICAgICAgaWYgKHBsLmxldmVsLm1heCA+IFRPUF9IQikKLQkgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0JICAgICAgIGNhcmQtPmhibnIubWluID0gcGwubGV2ZWwubWluOwotCSAgICAgICBjYXJkLT5oYm5yLmluaXQgPSBwbC5sZXZlbC5pbml0OwotCSAgICAgICBjYXJkLT5oYm5yLm1heCA9IHBsLmxldmVsLm1heDsKLQkgICAgICAgYnJlYWs7CisJCWNhc2UgTlNfQlVGVFlQRV9IVUdFOgorCQkJaWYgKHBsLmxldmVsLm1heCA+IFRPUF9IQikKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWNhcmQtPmhibnIubWluID0gcGwubGV2ZWwubWluOworCQkJY2FyZC0+aGJuci5pbml0ID0gcGwubGV2ZWwuaW5pdDsKKwkJCWNhcmQtPmhibnIubWF4ID0gcGwubGV2ZWwubWF4OworCQkJYnJlYWs7CiAKLQkgICAgY2FzZSBOU19CVUZUWVBFX0lPVkVDOgotICAgICAgICAgICAgICAgaWYgKHBsLmxldmVsLm1heCA+IFRPUF9JT1ZCKQotCSAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLQkgICAgICAgY2FyZC0+aW92bnIubWluID0gcGwubGV2ZWwubWluOwotCSAgICAgICBjYXJkLT5pb3Zuci5pbml0ID0gcGwubGV2ZWwuaW5pdDsKLQkgICAgICAgY2FyZC0+aW92bnIubWF4ID0gcGwubGV2ZWwubWF4OwotCSAgICAgICBicmVhazsKKwkJY2FzZSBOU19CVUZUWVBFX0lPVkVDOgorCQkJaWYgKHBsLmxldmVsLm1heCA+IFRPUF9JT1ZCKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJY2FyZC0+aW92bnIubWluID0gcGwubGV2ZWwubWluOworCQkJY2FyZC0+aW92bnIuaW5pdCA9IHBsLmxldmVsLmluaXQ7CisJCQljYXJkLT5pb3Zuci5tYXggPSBwbC5sZXZlbC5tYXg7CisJCQlicmVhazsKIAotICAgICAgICAgICAgZGVmYXVsdDoKLQkgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgICAgICAgfQkgCi0gICAgICAgICByZXR1cm4gMDsKKwkJfQorCQlyZXR1cm4gMDsKIAotICAgICAgY2FzZSBOU19BREpCVUZMRVY6Ci0gICAgICAgICBpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JICAgIHJldHVybiAtRVBFUk07Ci0gICAgICAgICBidHlwZSA9IChsb25nKSBhcmc7CS8qIGEgbG9uZyBpcyB0aGUgc2FtZSBzaXplIGFzIGEgcG9pbnRlciBvciBiaWdnZXIgKi8KLSAgICAgICAgIHN3aXRjaCAoYnR5cGUpCi0JIHsKLQkgICAgY2FzZSBOU19CVUZUWVBFX1NNQUxMOgotCSAgICAgICB3aGlsZSAoY2FyZC0+c2JmcWMgPCBjYXJkLT5zYm5yLmluaXQpCi0JICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpzYjsKKwljYXNlIE5TX0FESkJVRkxFVjoKKwkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQkJcmV0dXJuIC1FUEVSTTsKKwkJYnR5cGUgPSAobG9uZylhcmc7CS8qIGEgbG9uZyBpcyB0aGUgc2FtZSBzaXplIGFzIGEgcG9pbnRlciBvciBiaWdnZXIgKi8KKwkJc3dpdGNoIChidHlwZSkgeworCQljYXNlIE5TX0JVRlRZUEVfU01BTEw6CisJCQl3aGlsZSAoY2FyZC0+c2JmcWMgPCBjYXJkLT5zYm5yLmluaXQpIHsKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2I7CiAKLSAgICAgICAgICAgICAgICAgIHNiID0gX19kZXZfYWxsb2Nfc2tiKE5TX1NNU0tCU0laRSwgR0ZQX0tFUk5FTCk7Ci0gICAgICAgICAgICAgICAgICBpZiAoc2IgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwotICAgICAgICAgICAgICAgICAgTlNfU0tCX0NCKHNiKS0+YnVmX3R5cGUgPSBCVUZfU007Ci0gICAgICAgICAgICAgICAgICBza2JfcXVldWVfdGFpbCgmY2FyZC0+c2Jwb29sLnF1ZXVlLCBzYik7Ci0gICAgICAgICAgICAgICAgICBza2JfcmVzZXJ2ZShzYiwgTlNfQUFMMF9IRUFERVIpOwotICAgICAgICAgICAgICAgICAgcHVzaF9yeGJ1ZnMoY2FyZCwgc2IpOwotCSAgICAgICB9Ci0JICAgICAgIGJyZWFrOworCQkJCXNiID0gX19kZXZfYWxsb2Nfc2tiKE5TX1NNU0tCU0laRSwgR0ZQX0tFUk5FTCk7CisJCQkJaWYgKHNiID09IE5VTEwpCisJCQkJCXJldHVybiAtRU5PTUVNOworCQkJCU5TX1BSVl9CVUZUWVBFKHNiKSA9IEJVRl9TTTsKKwkJCQlza2JfcXVldWVfdGFpbCgmY2FyZC0+c2Jwb29sLnF1ZXVlLCBzYik7CisJCQkJc2tiX3Jlc2VydmUoc2IsIE5TX0FBTDBfSEVBREVSKTsKKwkJCQlwdXNoX3J4YnVmcyhjYXJkLCBzYik7CisJCQl9CisJCQlicmVhazsKIAotICAgICAgICAgICAgY2FzZSBOU19CVUZUWVBFX0xBUkdFOgotCSAgICAgICB3aGlsZSAoY2FyZC0+bGJmcWMgPCBjYXJkLT5sYm5yLmluaXQpCi0JICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpsYjsKKwkJY2FzZSBOU19CVUZUWVBFX0xBUkdFOgorCQkJd2hpbGUgKGNhcmQtPmxiZnFjIDwgY2FyZC0+bGJuci5pbml0KSB7CisJCQkJc3RydWN0IHNrX2J1ZmYgKmxiOwogCi0gICAgICAgICAgICAgICAgICBsYiA9IF9fZGV2X2FsbG9jX3NrYihOU19MR1NLQlNJWkUsIEdGUF9LRVJORUwpOwotICAgICAgICAgICAgICAgICAgaWYgKGxiID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKLSAgICAgICAgICAgICAgICAgIE5TX1NLQl9DQihsYiktPmJ1Zl90eXBlID0gQlVGX0xHOwotICAgICAgICAgICAgICAgICAgc2tiX3F1ZXVlX3RhaWwoJmNhcmQtPmxicG9vbC5xdWV1ZSwgbGIpOwotICAgICAgICAgICAgICAgICAgc2tiX3Jlc2VydmUobGIsIE5TX1NNQlVGU0laRSk7Ci0gICAgICAgICAgICAgICAgICBwdXNoX3J4YnVmcyhjYXJkLCBsYik7Ci0JICAgICAgIH0KLQkgICAgICAgYnJlYWs7CisJCQkJbGIgPSBfX2Rldl9hbGxvY19za2IoTlNfTEdTS0JTSVpFLCBHRlBfS0VSTkVMKTsKKwkJCQlpZiAobGIgPT0gTlVMTCkKKwkJCQkJcmV0dXJuIC1FTk9NRU07CisJCQkJTlNfUFJWX0JVRlRZUEUobGIpID0gQlVGX0xHOworCQkJCXNrYl9xdWV1ZV90YWlsKCZjYXJkLT5sYnBvb2wucXVldWUsIGxiKTsKKwkJCQlza2JfcmVzZXJ2ZShsYiwgTlNfU01CVUZTSVpFKTsKKwkJCQlwdXNoX3J4YnVmcyhjYXJkLCBsYik7CisJCQl9CisJCQlicmVhazsKIAotICAgICAgICAgICAgY2FzZSBOU19CVUZUWVBFX0hVR0U6Ci0gICAgICAgICAgICAgICB3aGlsZSAoY2FyZC0+aGJwb29sLmNvdW50ID4gY2FyZC0+aGJuci5pbml0KQotCSAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqaGI7CisJCWNhc2UgTlNfQlVGVFlQRV9IVUdFOgorCQkJd2hpbGUgKGNhcmQtPmhicG9vbC5jb3VudCA+IGNhcmQtPmhibnIuaW5pdCkgeworCQkJCXN0cnVjdCBza19idWZmICpoYjsKIAotICAgICAgICAgICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmludF9sb2NrLCBmbGFncyk7Ci0JCSAgaGIgPSBza2JfZGVxdWV1ZSgmY2FyZC0+aGJwb29sLnF1ZXVlKTsKLQkJICBjYXJkLT5oYnBvb2wuY291bnQtLTsKLSAgICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmludF9sb2NrLCBmbGFncyk7Ci0gICAgICAgICAgICAgICAgICBpZiAoaGIgPT0gTlVMTCkKLQkJICAgICBwcmludGsoIm5pY3N0YXIlZDogaHVnZSBidWZmZXIgY291bnQgaW5jb25zaXN0ZW50LlxuIiwKLQkJICAgICAgICAgICAgY2FyZC0+aW5kZXgpOwotICAgICAgICAgICAgICAgICAgZWxzZQotCQkgICAgIGRldl9rZnJlZV9za2JfYW55KGhiKTsKLQkJICAKLQkgICAgICAgfQotICAgICAgICAgICAgICAgd2hpbGUgKGNhcmQtPmhicG9vbC5jb3VudCA8IGNhcmQtPmhibnIuaW5pdCkKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpoYjsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aW50X2xvY2ssIGZsYWdzKTsKKwkJCQloYiA9IHNrYl9kZXF1ZXVlKCZjYXJkLT5oYnBvb2wucXVldWUpOworCQkJCWNhcmQtPmhicG9vbC5jb3VudC0tOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmludF9sb2NrLCBmbGFncyk7CisJCQkJaWYgKGhiID09IE5VTEwpCisJCQkJCXByaW50aworCQkJCQkgICAgKCJuaWNzdGFyJWQ6IGh1Z2UgYnVmZmVyIGNvdW50IGluY29uc2lzdGVudC5cbiIsCisJCQkJCSAgICAgY2FyZC0+aW5kZXgpOworCQkJCWVsc2UKKwkJCQkJZGV2X2tmcmVlX3NrYl9hbnkoaGIpOwogCi0gICAgICAgICAgICAgICAgICBoYiA9IF9fZGV2X2FsbG9jX3NrYihOU19IQlVGU0laRSwgR0ZQX0tFUk5FTCk7Ci0gICAgICAgICAgICAgICAgICBpZiAoaGIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwotICAgICAgICAgICAgICAgICAgTlNfU0tCX0NCKGhiKS0+YnVmX3R5cGUgPSBCVUZfTk9ORTsKLSAgICAgICAgICAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5pbnRfbG9jaywgZmxhZ3MpOwotICAgICAgICAgICAgICAgICAgc2tiX3F1ZXVlX3RhaWwoJmNhcmQtPmhicG9vbC5xdWV1ZSwgaGIpOwotICAgICAgICAgICAgICAgICAgY2FyZC0+aGJwb29sLmNvdW50Kys7Ci0gICAgICAgICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5pbnRfbG9jaywgZmxhZ3MpOwotICAgICAgICAgICAgICAgfQotCSAgICAgICBicmVhazsKKwkJCX0KKwkJCXdoaWxlIChjYXJkLT5oYnBvb2wuY291bnQgPCBjYXJkLT5oYm5yLmluaXQpIHsKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqaGI7CiAKLSAgICAgICAgICAgIGNhc2UgTlNfQlVGVFlQRV9JT1ZFQzoKLQkgICAgICAgd2hpbGUgKGNhcmQtPmlvdnBvb2wuY291bnQgPiBjYXJkLT5pb3Zuci5pbml0KQotCSAgICAgICB7Ci0JICAgICAgICAgIHN0cnVjdCBza19idWZmICppb3ZiOworCQkJCWhiID0gX19kZXZfYWxsb2Nfc2tiKE5TX0hCVUZTSVpFLCBHRlBfS0VSTkVMKTsKKwkJCQlpZiAoaGIgPT0gTlVMTCkKKwkJCQkJcmV0dXJuIC1FTk9NRU07CisJCQkJTlNfUFJWX0JVRlRZUEUoaGIpID0gQlVGX05PTkU7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmludF9sb2NrLCBmbGFncyk7CisJCQkJc2tiX3F1ZXVlX3RhaWwoJmNhcmQtPmhicG9vbC5xdWV1ZSwgaGIpOworCQkJCWNhcmQtPmhicG9vbC5jb3VudCsrOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmludF9sb2NrLCBmbGFncyk7CisJCQl9CisJCQlicmVhazsKIAotICAgICAgICAgICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmludF9sb2NrLCBmbGFncyk7Ci0JCSAgaW92YiA9IHNrYl9kZXF1ZXVlKCZjYXJkLT5pb3Zwb29sLnF1ZXVlKTsKLQkJICBjYXJkLT5pb3Zwb29sLmNvdW50LS07Ci0gICAgICAgICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5pbnRfbG9jaywgZmxhZ3MpOwotICAgICAgICAgICAgICAgICAgaWYgKGlvdmIgPT0gTlVMTCkKLQkJICAgICBwcmludGsoIm5pY3N0YXIlZDogaW92ZWMgYnVmZmVyIGNvdW50IGluY29uc2lzdGVudC5cbiIsCi0JCSAgICAgICAgICAgIGNhcmQtPmluZGV4KTsKLSAgICAgICAgICAgICAgICAgIGVsc2UKLQkJICAgICBkZXZfa2ZyZWVfc2tiX2FueShpb3ZiKTsKKwkJY2FzZSBOU19CVUZUWVBFX0lPVkVDOgorCQkJd2hpbGUgKGNhcmQtPmlvdnBvb2wuY291bnQgPiBjYXJkLT5pb3Zuci5pbml0KSB7CisJCQkJc3RydWN0IHNrX2J1ZmYgKmlvdmI7CiAKLQkgICAgICAgfQotICAgICAgICAgICAgICAgd2hpbGUgKGNhcmQtPmlvdnBvb2wuY291bnQgPCBjYXJkLT5pb3Zuci5pbml0KQotCSAgICAgICB7Ci0JICAgICAgICAgIHN0cnVjdCBza19idWZmICppb3ZiOworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5pbnRfbG9jaywgZmxhZ3MpOworCQkJCWlvdmIgPSBza2JfZGVxdWV1ZSgmY2FyZC0+aW92cG9vbC5xdWV1ZSk7CisJCQkJY2FyZC0+aW92cG9vbC5jb3VudC0tOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmludF9sb2NrLCBmbGFncyk7CisJCQkJaWYgKGlvdmIgPT0gTlVMTCkKKwkJCQkJcHJpbnRrCisJCQkJCSAgICAoIm5pY3N0YXIlZDogaW92ZWMgYnVmZmVyIGNvdW50IGluY29uc2lzdGVudC5cbiIsCisJCQkJCSAgICAgY2FyZC0+aW5kZXgpOworCQkJCWVsc2UKKwkJCQkJZGV2X2tmcmVlX3NrYl9hbnkoaW92Yik7CiAKLSAgICAgICAgICAgICAgICAgIGlvdmIgPSBhbGxvY19za2IoTlNfSU9WQlVGU0laRSwgR0ZQX0tFUk5FTCk7Ci0gICAgICAgICAgICAgICAgICBpZiAoaW92YiA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Ci0gICAgICAgICAgICAgICAgICBOU19TS0JfQ0IoaW92YiktPmJ1Zl90eXBlID0gQlVGX05PTkU7Ci0gICAgICAgICAgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aW50X2xvY2ssIGZsYWdzKTsKLSAgICAgICAgICAgICAgICAgIHNrYl9xdWV1ZV90YWlsKCZjYXJkLT5pb3Zwb29sLnF1ZXVlLCBpb3ZiKTsKLSAgICAgICAgICAgICAgICAgIGNhcmQtPmlvdnBvb2wuY291bnQrKzsKLSAgICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmludF9sb2NrLCBmbGFncyk7Ci0JICAgICAgIH0KLQkgICAgICAgYnJlYWs7CisJCQl9CisJCQl3aGlsZSAoY2FyZC0+aW92cG9vbC5jb3VudCA8IGNhcmQtPmlvdm5yLmluaXQpIHsKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqaW92YjsKIAotICAgICAgICAgICAgZGVmYXVsdDoKLQkgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJCQkJaW92YiA9IGFsbG9jX3NrYihOU19JT1ZCVUZTSVpFLCBHRlBfS0VSTkVMKTsKKwkJCQlpZiAoaW92YiA9PSBOVUxMKQorCQkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCQlOU19QUlZfQlVGVFlQRShpb3ZiKSA9IEJVRl9OT05FOworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5pbnRfbG9jaywgZmxhZ3MpOworCQkJCXNrYl9xdWV1ZV90YWlsKCZjYXJkLT5pb3Zwb29sLnF1ZXVlLCBpb3ZiKTsKKwkJCQljYXJkLT5pb3Zwb29sLmNvdW50Kys7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+aW50X2xvY2ssIGZsYWdzKTsKKwkJCX0KKwkJCWJyZWFrOwogCi0JIH0KLSAgICAgICAgIHJldHVybiAwOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICBpZiAoZGV2LT5waHkgJiYgZGV2LT5waHktPmlvY3RsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZGV2LT5waHktPmlvY3RsKGRldiwgY21kLCBhcmcpOwotICAgICAgICAgfQotICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBwcmludGsoIm5pY3N0YXIlZDogJXMgPT0gTlVMTCBcbiIsIGNhcmQtPmluZGV4LAotICAgICAgICAgICAgICAgICAgIGRldi0+cGh5ID8gImRldi0+cGh5LT5pb2N0bCIgOiAiZGV2LT5waHkiKTsKLSAgICAgICAgICAgIHJldHVybiAtRU5PSU9DVExDTUQ7Ci0gICAgICAgICB9Ci0gICB9CisJCX0KKwkJcmV0dXJuIDA7CisKKwlkZWZhdWx0OgorCQlpZiAoZGV2LT5waHkgJiYgZGV2LT5waHktPmlvY3RsKSB7CisJCQlyZXR1cm4gZGV2LT5waHktPmlvY3RsKGRldiwgY21kLCBhcmcpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKCJuaWNzdGFyJWQ6ICVzID09IE5VTEwgXG4iLCBjYXJkLT5pbmRleCwKKwkJCSAgICAgICBkZXYtPnBoeSA/ICJkZXYtPnBoeS0+aW9jdGwiIDogImRldi0+cGh5Iik7CisJCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCQl9CisJfQogfQogCi0KLXN0YXRpYyB2b2lkIHdoaWNoX2xpc3QobnNfZGV2ICpjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorI2lmZGVmIEVYVFJBX0RFQlVHCitzdGF0aWMgdm9pZCB3aGljaF9saXN0KG5zX2RldiAqIGNhcmQsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JcHJpbnRrKCJza2IgYnVmX3R5cGU6IDB4JTA4eFxuIiwgTlNfU0tCX0NCKHNrYiktPmJ1Zl90eXBlKTsKKwlwcmludGsoInNrYiBidWZfdHlwZTogMHglMDh4XG4iLCBOU19QUlZfQlVGVFlQRShza2IpKTsKIH0KLQorI2VuZGlmIC8qIEVYVFJBX0RFQlVHICovCiAKIHN0YXRpYyB2b2lkIG5zX3BvbGwodW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0gICBpbnQgaTsKLSAgIG5zX2RldiAqY2FyZDsKLSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gICB1MzIgc3RhdF9yLCBzdGF0X3c7CisJaW50IGk7CisJbnNfZGV2ICpjYXJkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHN0YXRfciwgc3RhdF93OwogCi0gICBQUklOVEsoIm5pY3N0YXI6IEVudGVyaW5nIG5zX3BvbGwoKS5cbiIpOwotICAgZm9yIChpID0gMDsgaSA8IG51bV9jYXJkczsgaSsrKQotICAgewotICAgICAgY2FyZCA9IGNhcmRzW2ldOwotICAgICAgaWYgKHNwaW5faXNfbG9ja2VkKCZjYXJkLT5pbnRfbG9jaykpIHsKLSAgICAgIC8qIFByb2JhYmx5IGl0IGlzbid0IHdvcnRoIHNwaW5uaW5nICovCi0gICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5pbnRfbG9jaywgZmxhZ3MpOworCVBSSU5USygibmljc3RhcjogRW50ZXJpbmcgbnNfcG9sbCgpLlxuIik7CisJZm9yIChpID0gMDsgaSA8IG51bV9jYXJkczsgaSsrKSB7CisJCWNhcmQgPSBjYXJkc1tpXTsKKwkJaWYgKHNwaW5faXNfbG9ja2VkKCZjYXJkLT5pbnRfbG9jaykpIHsKKwkJCS8qIFByb2JhYmx5IGl0IGlzbid0IHdvcnRoIHNwaW5uaW5nICovCisJCQljb250aW51ZTsKKwkJfQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aW50X2xvY2ssIGZsYWdzKTsKIAotICAgICAgc3RhdF93ID0gMDsKLSAgICAgIHN0YXRfciA9IHJlYWRsKGNhcmQtPm1lbWJhc2UgKyBTVEFUKTsKLSAgICAgIGlmIChzdGF0X3IgJiBOU19TVEFUX1RTSUYpCi0gICAgICAgICBzdGF0X3cgfD0gTlNfU1RBVF9UU0lGOwotICAgICAgaWYgKHN0YXRfciAmIE5TX1NUQVRfRU9QRFUpCi0gICAgICAgICBzdGF0X3cgfD0gTlNfU1RBVF9FT1BEVTsKKwkJc3RhdF93ID0gMDsKKwkJc3RhdF9yID0gcmVhZGwoY2FyZC0+bWVtYmFzZSArIFNUQVQpOworCQlpZiAoc3RhdF9yICYgTlNfU1RBVF9UU0lGKQorCQkJc3RhdF93IHw9IE5TX1NUQVRfVFNJRjsKKwkJaWYgKHN0YXRfciAmIE5TX1NUQVRfRU9QRFUpCisJCQlzdGF0X3cgfD0gTlNfU1RBVF9FT1BEVTsKIAotICAgICAgcHJvY2Vzc190c3EoY2FyZCk7Ci0gICAgICBwcm9jZXNzX3JzcShjYXJkKTsKKwkJcHJvY2Vzc190c3EoY2FyZCk7CisJCXByb2Nlc3NfcnNxKGNhcmQpOwogCi0gICAgICB3cml0ZWwoc3RhdF93LCBjYXJkLT5tZW1iYXNlICsgU1RBVCk7Ci0gICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5pbnRfbG9jaywgZmxhZ3MpOwotICAgfQotICAgbW9kX3RpbWVyKCZuc190aW1lciwgamlmZmllcyArIE5TX1BPTExfUEVSSU9EKTsKLSAgIFBSSU5USygibmljc3RhcjogTGVhdmluZyBuc19wb2xsKCkuXG4iKTsKKwkJd3JpdGVsKHN0YXRfdywgY2FyZC0+bWVtYmFzZSArIFNUQVQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5pbnRfbG9jaywgZmxhZ3MpOworCX0KKwltb2RfdGltZXIoJm5zX3RpbWVyLCBqaWZmaWVzICsgTlNfUE9MTF9QRVJJT0QpOworCVBSSU5USygibmljc3RhcjogTGVhdmluZyBuc19wb2xsKCkuXG4iKTsKIH0KIAotCi0KIHN0YXRpYyBpbnQgbnNfcGFyc2VfbWFjKGNoYXIgKm1hYywgdW5zaWduZWQgY2hhciAqZXNpKQogewotICAgaW50IGksIGo7Ci0gICBzaG9ydCBieXRlMSwgYnl0ZTA7CisJaW50IGksIGo7CisJc2hvcnQgYnl0ZTEsIGJ5dGUwOwogCi0gICBpZiAobWFjID09IE5VTEwgfHwgZXNpID09IE5VTEwpCi0gICAgICByZXR1cm4gLTE7Ci0gICBqID0gMDsKLSAgIGZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0gICB7Ci0gICAgICBpZiAoKGJ5dGUxID0gbnNfaDJpKG1hY1tqKytdKSkgPCAwKQotICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgaWYgKChieXRlMCA9IG5zX2gyaShtYWNbaisrXSkpIDwgMCkKLSAgICAgICAgIHJldHVybiAtMTsKLSAgICAgIGVzaVtpXSA9ICh1bnNpZ25lZCBjaGFyKSAoYnl0ZTEgKiAxNiArIGJ5dGUwKTsKLSAgICAgIGlmIChpIDwgNSkKLSAgICAgIHsKLSAgICAgICAgIGlmIChtYWNbaisrXSAhPSAnOicpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICB9Ci0gICB9Ci0gICByZXR1cm4gMDsKKwlpZiAobWFjID09IE5VTEwgfHwgZXNpID09IE5VTEwpCisJCXJldHVybiAtMTsKKwlqID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCWlmICgoYnl0ZTEgPSBoZXhfdG9fYmluKG1hY1tqKytdKSkgPCAwKQorCQkJcmV0dXJuIC0xOworCQlpZiAoKGJ5dGUwID0gaGV4X3RvX2JpbihtYWNbaisrXSkpIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJZXNpW2ldID0gKHVuc2lnbmVkIGNoYXIpKGJ5dGUxICogMTYgKyBieXRlMCk7CisJCWlmIChpIDwgNSkgeworCQkJaWYgKG1hY1tqKytdICE9ICc6JykKKwkJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJcmV0dXJuIDA7CiB9CiAKIAotCi1zdGF0aWMgc2hvcnQgbnNfaDJpKGNoYXIgYykKLXsKLSAgIGlmIChjID49ICcwJyAmJiBjIDw9ICc5JykKLSAgICAgIHJldHVybiAoc2hvcnQpIChjIC0gJzAnKTsKLSAgIGlmIChjID49ICdBJyAmJiBjIDw9ICdGJykKLSAgICAgIHJldHVybiAoc2hvcnQpIChjIC0gJ0EnICsgMTApOwotICAgaWYgKGMgPj0gJ2EnICYmIGMgPD0gJ2YnKQotICAgICAgcmV0dXJuIChzaG9ydCkgKGMgLSAnYScgKyAxMCk7Ci0gICByZXR1cm4gLTE7Ci19Ci0KLQotCiBzdGF0aWMgdm9pZCBuc19waHlfcHV0KHN0cnVjdCBhdG1fZGV2ICpkZXYsIHVuc2lnbmVkIGNoYXIgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcikKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLSAgIG5zX2RldiAqY2FyZDsKLSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbnNfZGV2ICpjYXJkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLSAgIGNhcmQgPSBkZXYtPmRldl9kYXRhOwotICAgc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnJlc19sb2NrLCBmbGFncyk7Ci0gICB3aGlsZShDTURfQlVTWShjYXJkKSk7Ci0gICB3cml0ZWwoKHVuc2lnbmVkIGxvbmcpIHZhbHVlLCBjYXJkLT5tZW1iYXNlICsgRFIwKTsKLSAgIHdyaXRlbChOU19DTURfV1JJVEVfVVRJTElUWSB8IDB4MDAwMDAyMDAgfCAoYWRkciAmIDB4MDAwMDAwRkYpLAotICAgICAgICAgIGNhcmQtPm1lbWJhc2UgKyBDTUQpOwotICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+cmVzX2xvY2ssIGZsYWdzKTsKKwljYXJkID0gZGV2LT5kZXZfZGF0YTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+cmVzX2xvY2ssIGZsYWdzKTsKKwl3aGlsZSAoQ01EX0JVU1koY2FyZCkpIDsKKwl3cml0ZWwoKHUzMikgdmFsdWUsIGNhcmQtPm1lbWJhc2UgKyBEUjApOworCXdyaXRlbChOU19DTURfV1JJVEVfVVRJTElUWSB8IDB4MDAwMDAyMDAgfCAoYWRkciAmIDB4MDAwMDAwRkYpLAorCSAgICAgICBjYXJkLT5tZW1iYXNlICsgQ01EKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5yZXNfbG9jaywgZmxhZ3MpOwogfQogCi0KLQogc3RhdGljIHVuc2lnbmVkIGNoYXIgbnNfcGh5X2dldChzdHJ1Y3QgYXRtX2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0gICBuc19kZXYgKmNhcmQ7Ci0gICB1bnNpZ25lZCBsb25nIGZsYWdzOwotICAgdW5zaWduZWQgbG9uZyBkYXRhOworCW5zX2RldiAqY2FyZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBkYXRhOwogCi0gICBjYXJkID0gZGV2LT5kZXZfZGF0YTsKLSAgIHNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5yZXNfbG9jaywgZmxhZ3MpOwotICAgd2hpbGUoQ01EX0JVU1koY2FyZCkpOwotICAgd3JpdGVsKE5TX0NNRF9SRUFEX1VUSUxJVFkgfCAweDAwMDAwMjAwIHwgKGFkZHIgJiAweDAwMDAwMEZGKSwKLSAgICAgICAgICBjYXJkLT5tZW1iYXNlICsgQ01EKTsKLSAgIHdoaWxlKENNRF9CVVNZKGNhcmQpKTsKLSAgIGRhdGEgPSByZWFkbChjYXJkLT5tZW1iYXNlICsgRFIwKSAmIDB4MDAwMDAwRkY7Ci0gICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5yZXNfbG9jaywgZmxhZ3MpOwotICAgcmV0dXJuICh1bnNpZ25lZCBjaGFyKSBkYXRhOworCWNhcmQgPSBkZXYtPmRldl9kYXRhOworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5yZXNfbG9jaywgZmxhZ3MpOworCXdoaWxlIChDTURfQlVTWShjYXJkKSkgOworCXdyaXRlbChOU19DTURfUkVBRF9VVElMSVRZIHwgMHgwMDAwMDIwMCB8IChhZGRyICYgMHgwMDAwMDBGRiksCisJICAgICAgIGNhcmQtPm1lbWJhc2UgKyBDTUQpOworCXdoaWxlIChDTURfQlVTWShjYXJkKSkgOworCWRhdGEgPSByZWFkbChjYXJkLT5tZW1iYXNlICsgRFIwKSAmIDB4MDAwMDAwRkY7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+cmVzX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gKHVuc2lnbmVkIGNoYXIpZGF0YTsKIH0KIAotCi0KIG1vZHVsZV9pbml0KG5pY3N0YXJfaW5pdCk7CiBtb2R1bGVfZXhpdChuaWNzdGFyX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vbmljc3Rhci5oIGIvZHJpdmVycy9hdG0vbmljc3Rhci5oCmluZGV4IDYwMTBlM2QuLjliYzI3ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL25pY3N0YXIuaAorKysgYi9kcml2ZXJzL2F0bS9uaWNzdGFyLmgKQEAgLTEsNSArMSw0IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgorLyoKICAqIG5pY3N0YXIuaAogICoKICAqIEhlYWRlciBmaWxlIGZvciB0aGUgbmljc3RhciBkZXZpY2UgZHJpdmVyLgpAQCAtOCwyOSArNywyNiBAQAogICogUG93ZXJQQyBzdXBwb3J0IGJ5IEpheSBUYWxib3R0IChqYXlfdGFsYm90dEBtY2cubW90LmNvbSkgQXByaWwgMTk5OQogICoKICAqIChDKSBJTkVTQyAxOTk4Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQorICovCiAKICNpZm5kZWYgX0xJTlVYX05JQ1NUQVJfSF8KICNkZWZpbmUgX0xJTlVYX05JQ1NUQVJfSF8KIAotCi0vKiBJbmNsdWRlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSW5jbHVkZXMgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaWRyLmg+CiAjaW5jbHVkZSA8bGludXgvdWlvLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYXRtX25pY3N0YXIuaD4KIAotCi0vKiBPcHRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogT3B0aW9ucyAqLwogCiAjZGVmaW5lIE5TX01BWF9DQVJEUyA0CQkvKiBNYXhpbXVtIG51bWJlciBvZiBOSUNTdEFSIGJhc2VkIGNhcmRzCiAJCQkJICAgY29udHJvbGxlZCBieSB0aGUgZGV2aWNlIGRyaXZlci4gTXVzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSA8PSA1ICovCisJCQkJICAgYmUgPD0gNSAqLwogCiAjdW5kZWYgUkNRX1NVUFBPUlQJCS8qIERvIG5vdCBkZWZpbmUgdGhpcyBmb3Igbm93ICovCiAKQEAgLTQzLDcgKzM5LDcgQEAKICNkZWZpbmUgTlNfVlBJQklUUyAyCQkvKiAwLCAxLCAyLCBvciA4ICovCiAKICNkZWZpbmUgTlNfTUFYX1JDVFNJWkUgNDA5NgkvKiBOdW1iZXIgb2YgZW50cmllcy4gNDA5NiBvciAxNjM4NC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmaW5lIDQwOTYgb25seSBpZiAoYWxsKSB5b3VyIGNhcmQocykKKwkJCQkgICBEZWZpbmUgNDA5NiBvbmx5IGlmIChhbGwpIHlvdXIgY2FyZChzKQogCQkJCSAgIGhhdmUgMzJLIHggMzJiaXQgU1JBTSwgaW4gd2hpY2ggY2FzZQogCQkJCSAgIHNldHRpbmcgdGhpcyB0byAxNjM4NCB3aWxsIGp1c3Qgd2FzdGUgYQogCQkJCSAgIGxvdCBvZiBtZW1vcnkuCkBAIC01MSwzMyArNDcsMzIgQEAKIAkJCQkgICAxMjhLIHggMzJiaXQgU1JBTSB3aWxsIGxpbWl0IHRoZSBtYXhpbXVtCiAJCQkJICAgVkNJLiAqLwogCi0vKiNkZWZpbmUgTlNfUENJX0xBVEVOQ1kgNjQqLwkvKiBNdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzIgKi8KKwkJCQkvKiNkZWZpbmUgTlNfUENJX0xBVEVOQ1kgNjQqLy8qIE11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMiAqLwogCiAJLyogTnVtYmVyIG9mIGJ1ZmZlcnMgaW5pdGlhbGx5IGFsbG9jYXRlZCAqLwotI2RlZmluZSBOVU1fU0IgMzIJLyogTXVzdCBiZSBldmVuICovCi0jZGVmaW5lIE5VTV9MQiAyNAkvKiBNdXN0IGJlIGV2ZW4gKi8KLSNkZWZpbmUgTlVNX0hCIDgJLyogUHJlLWFsbG9jYXRlZCBodWdlIGJ1ZmZlcnMgKi8KLSNkZWZpbmUgTlVNX0lPVkIgNDgJLyogSW92ZWMgYnVmZmVycyAqLworI2RlZmluZSBOVU1fU0IgMzIJCS8qIE11c3QgYmUgZXZlbiAqLworI2RlZmluZSBOVU1fTEIgMjQJCS8qIE11c3QgYmUgZXZlbiAqLworI2RlZmluZSBOVU1fSEIgOAkJLyogUHJlLWFsbG9jYXRlZCBodWdlIGJ1ZmZlcnMgKi8KKyNkZWZpbmUgTlVNX0lPVkIgNDgJCS8qIElvdmVjIGJ1ZmZlcnMgKi8KIAogCS8qIExvd2VyIGxldmVsIGZvciBjb3VudCBvZiBidWZmZXJzICovCi0jZGVmaW5lIE1JTl9TQiA4CS8qIE11c3QgYmUgZXZlbiAqLwotI2RlZmluZSBNSU5fTEIgOAkvKiBNdXN0IGJlIGV2ZW4gKi8KKyNkZWZpbmUgTUlOX1NCIDgJCS8qIE11c3QgYmUgZXZlbiAqLworI2RlZmluZSBNSU5fTEIgOAkJLyogTXVzdCBiZSBldmVuICovCiAjZGVmaW5lIE1JTl9IQiA2CiAjZGVmaW5lIE1JTl9JT1ZCIDgKIAogCS8qIFVwcGVyIGxldmVsIGZvciBjb3VudCBvZiBidWZmZXJzICovCi0jZGVmaW5lIE1BWF9TQiA2NAkvKiBNdXN0IGJlIGV2ZW4sIDw9IDUwOCAqLwotI2RlZmluZSBNQVhfTEIgNDgJLyogTXVzdCBiZSBldmVuLCA8PSA1MDggKi8KKyNkZWZpbmUgTUFYX1NCIDY0CQkvKiBNdXN0IGJlIGV2ZW4sIDw9IDUwOCAqLworI2RlZmluZSBNQVhfTEIgNDgJCS8qIE11c3QgYmUgZXZlbiwgPD0gNTA4ICovCiAjZGVmaW5lIE1BWF9IQiAxMAogI2RlZmluZSBNQVhfSU9WQiA4MAogCiAJLyogVGhlc2UgYXJlIHRoZSBhYnNvbHV0ZSBtYXhpbXVtIGFsbG93ZWQgZm9yIHRoZSBpb2N0bCgpICovCi0jZGVmaW5lIFRPUF9TQiAyNTYJLyogTXVzdCBiZSBldmVuLCA8PSA1MDggKi8KLSNkZWZpbmUgVE9QX0xCIDEyOAkvKiBNdXN0IGJlIGV2ZW4sIDw9IDUwOCAqLworI2RlZmluZSBUT1BfU0IgMjU2CQkvKiBNdXN0IGJlIGV2ZW4sIDw9IDUwOCAqLworI2RlZmluZSBUT1BfTEIgMTI4CQkvKiBNdXN0IGJlIGV2ZW4sIDw9IDUwOCAqLwogI2RlZmluZSBUT1BfSEIgNjQKICNkZWZpbmUgVE9QX0lPVkIgMjU2CiAKLQogI2RlZmluZSBNQVhfVEJEX1BFUl9WQyAxCS8qIE51bWJlciBvZiBUQkRzIGJlZm9yZSBhIFRTUiAqLwogI2RlZmluZSBNQVhfVEJEX1BFUl9TQ1EgMTAJLyogT25seSBtZWFuaW5nZnVsIGZvciB2YXJpYWJsZSByYXRlIFNDUXMgKi8KIApAQCAtODksMTUgKzg0LDEyIEBACiAKICNkZWZpbmUgUENSX1RPTEVSQU5DRSAoMS4wMDAxKQogCi0KLQotLyogRVNJIHN0dWZmICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEVTSSBzdHVmZiAqLwogCiAjZGVmaW5lIE5JQ1NUQVJfRVBST01fTUFDX0FERFJfT0ZGU0VUIDB4NkMKICNkZWZpbmUgTklDU1RBUl9FUFJPTV9NQUNfQUREUl9PRkZTRVRfQUxUIDB4RjYKIAotCi0vKiAjZGVmaW5lcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogI2RlZmluZXMgKi8KIAogI2RlZmluZSBOU19JT1JFTUFQX1NJWkUgNDA5NgogCkBAIC0xMjMsMjIgKzExNSwxOSBAQAogI2RlZmluZSBOU19TTVNLQlNJWkUgKE5TX1NNQlVGU0laRSArIE5TX0FBTDBfSEVBREVSKQogI2RlZmluZSBOU19MR1NLQlNJWkUgKE5TX1NNQlVGU0laRSArIE5TX0xHQlVGU0laRSkKIAorLyogTklDU3RBUiBzdHJ1Y3R1cmVzIGxvY2F0ZWQgaW4gaG9zdCBtZW1vcnkgKi8KIAotLyogTklDU3RBUiBzdHJ1Y3R1cmVzIGxvY2F0ZWQgaW4gaG9zdCBtZW1vcnkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0KLS8qIFJTUSAtIFJlY2VpdmUgU3RhdHVzIFF1ZXVlIAorLyoKKyAqIFJTUSAtIFJlY2VpdmUgU3RhdHVzIFF1ZXVlCiAgKgogICogV3JpdHRlbiBieSB0aGUgTklDU3RBUiwgcmVhZCBieSB0aGUgZGV2aWNlIGRyaXZlci4KICAqLwogCi10eXBlZGVmIHN0cnVjdCBuc19yc3FlCi17Ci0gICB1MzIgd29yZF8xOwotICAgdTMyIGJ1ZmZlcl9oYW5kbGU7Ci0gICB1MzIgZmluYWxfYWFsNV9jcmMzMjsKLSAgIHUzMiB3b3JkXzQ7Cit0eXBlZGVmIHN0cnVjdCBuc19yc3FlIHsKKwl1MzIgd29yZF8xOworCXUzMiBidWZmZXJfaGFuZGxlOworCXUzMiBmaW5hbF9hYWw1X2NyYzMyOworCXUzMiB3b3JkXzQ7CiB9IG5zX3JzcWU7CiAKICNkZWZpbmUgbnNfcnNxZV92cGkobnNfcnNxZXApIFwKQEAgLTE3NSwzMCArMTY0LDI3IEBACiAjZGVmaW5lIG5zX3JzcWVfY2VsbGNvdW50KG5zX3JzcWVwKSBcCiAgICAgICAgIChsZTMyX3RvX2NwdSgobnNfcnNxZXApLT53b3JkXzQpICYgMHgwMDAwMDFGRikKICNkZWZpbmUgbnNfcnNxZV9pbml0KG5zX3JzcWVwKSBcCi0gICAgICAgICgobnNfcnNxZXApLT53b3JkXzQgPSBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSkgCisgICAgICAgICgobnNfcnNxZXApLT53b3JkXzQgPSBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSkKIAogI2RlZmluZSBOU19SU1FfTlVNX0VOVFJJRVMgKE5TX1JTUVNJWkUgLyAxNikKICNkZWZpbmUgTlNfUlNRX0FMSUdOTUVOVCBOU19SU1FTSVpFCiAKLQotCi0vKiBSQ1EgLSBSYXcgQ2VsbCBRdWV1ZQorLyoKKyAqIFJDUSAtIFJhdyBDZWxsIFF1ZXVlCiAgKgogICogV3JpdHRlbiBieSB0aGUgTklDU3RBUiwgcmVhZCBieSB0aGUgZGV2aWNlIGRyaXZlci4KICAqLwogCi10eXBlZGVmIHN0cnVjdCBjZWxsX3BheWxvYWQKLXsKLSAgIHUzMiB3b3JkWzEyXTsKK3R5cGVkZWYgc3RydWN0IGNlbGxfcGF5bG9hZCB7CisJdTMyIHdvcmRbMTJdOwogfSBjZWxsX3BheWxvYWQ7CiAKLXR5cGVkZWYgc3RydWN0IG5zX3JjcWUKLXsKLSAgIHUzMiB3b3JkXzE7Ci0gICB1MzIgd29yZF8yOwotICAgdTMyIHdvcmRfMzsKLSAgIHUzMiB3b3JkXzQ7Ci0gICBjZWxsX3BheWxvYWQgcGF5bG9hZDsKK3R5cGVkZWYgc3RydWN0IG5zX3JjcWUgeworCXUzMiB3b3JkXzE7CisJdTMyIHdvcmRfMjsKKwl1MzIgd29yZF8zOworCXUzMiB3b3JkXzQ7CisJY2VsbF9wYXlsb2FkIHBheWxvYWQ7CiB9IG5zX3JjcWU7CiAKICNkZWZpbmUgTlNfUkNRRV9TSVpFIDY0CQkvKiBieXRlcyAqLwpAQCAtMjEwLDI4ICsxOTYsMjUgQEAKICNkZWZpbmUgbnNfcmNxZV9uZXh0YnVmaGFuZGxlKG5zX3JjcWVwKSBcCiAgICAgICAgIChsZTMyX3RvX2NwdSgobnNfcmNxZXApLT53b3JkXzIpKQogCi0KLQotLyogU0NRIC0gU2VnbWVudGF0aW9uIENoYW5uZWwgUXVldWUgCisvKgorICogU0NRIC0gU2VnbWVudGF0aW9uIENoYW5uZWwgUXVldWUKICAqCiAgKiBXcml0dGVuIGJ5IHRoZSBkZXZpY2UgZHJpdmVyLCByZWFkIGJ5IHRoZSBOSUNTdEFSLgogICovCiAKLXR5cGVkZWYgc3RydWN0IG5zX3NjcWUKLXsKLSAgIHUzMiB3b3JkXzE7Ci0gICB1MzIgd29yZF8yOwotICAgdTMyIHdvcmRfMzsKLSAgIHUzMiB3b3JkXzQ7Cit0eXBlZGVmIHN0cnVjdCBuc19zY3FlIHsKKwl1MzIgd29yZF8xOworCXUzMiB3b3JkXzI7CisJdTMyIHdvcmRfMzsKKwl1MzIgd29yZF80OwogfSBuc19zY3FlOwogCiAgICAvKiBOT1RFOiBTQ1EgZW50cmllcyBjYW4gYmUgZWl0aGVyIGEgVEJEIChUcmFuc21pdCBCdWZmZXIgRGVzY3JpcHRvcnMpCi0gICAgICAgICAgICBvciBUU1IgKFRyYW5zbWl0IFN0YXR1cyBSZXF1ZXN0cykgKi8KKyAgICAgIG9yIFRTUiAoVHJhbnNtaXQgU3RhdHVzIFJlcXVlc3RzKSAqLwogCiAjZGVmaW5lIE5TX1NDUUVfVFlQRV9UQkQgMHgwMDAwMDAwMAogI2RlZmluZSBOU19TQ1FFX1RZUEVfVFNSIDB4ODAwMDAwMDAKIAotCiAjZGVmaW5lIE5TX1RCRF9FT1BEVSAweDQwMDAwMDAwCiAjZGVmaW5lIE5TX1RCRF9BQUwwICAweDAwMDAwMDAwCiAjZGVmaW5lIE5TX1RCRF9BQUwzNCAweDA0MDAwMDAwCkBAIC0yNTMsMTAgKzIzNiw5IEBACiAjZGVmaW5lIG5zX3RiZF9ta3dvcmRfNChnZmMsIHZwaSwgdmNpLCBwdCwgY2xwKSBcCiAgICAgICAoY3B1X3RvX2xlMzIoKGdmYykgPDwgMjggfCAodnBpKSA8PCAyMCB8ICh2Y2kpIDw8IDQgfCAocHQpIDw8IDEgfCAoY2xwKSkpCiAKLQogI2RlZmluZSBOU19UU1JfSU5URU5BQkxFIDB4MjAwMDAwMDAKIAotI2RlZmluZSBOU19UU1JfU0NESVNWQlIgMHhGRkZGCQkvKiBVc2UgYXMgc2NkaSBmb3IgVkJSIFNDRCAqLworI2RlZmluZSBOU19UU1JfU0NESVNWQlIgMHhGRkZGCS8qIFVzZSBhcyBzY2RpIGZvciBWQlIgU0NEICovCiAKICNkZWZpbmUgbnNfdHNyX21rd29yZF8xKGZsYWdzKSBcCiAgICAgICAgIChjcHVfdG9fbGUzMihOU19TQ1FFX1RZUEVfVFNSIHwgKGZsYWdzKSkpCkBAIC0yNzMsMjIgKzI1NSwyMCBAQAogCiAjZGVmaW5lIE5TX1NDUUVfU0laRSAxNgogCi0KLQotLyogVFNRIC0gVHJhbnNtaXQgU3RhdHVzIFF1ZXVlCisvKgorICogVFNRIC0gVHJhbnNtaXQgU3RhdHVzIFF1ZXVlCiAgKgogICogV3JpdHRlbiBieSB0aGUgTklDU3RBUiwgcmVhZCBieSB0aGUgZGV2aWNlIGRyaXZlci4KICAqLwogCi10eXBlZGVmIHN0cnVjdCBuc190c2kKLXsKLSAgIHUzMiB3b3JkXzE7Ci0gICB1MzIgd29yZF8yOwordHlwZWRlZiBzdHJ1Y3QgbnNfdHNpIHsKKwl1MzIgd29yZF8xOworCXUzMiB3b3JkXzI7CiB9IG5zX3RzaTsKIAogICAgLyogTk9URTogVGhlIGZpcnN0IHdvcmQgY2FuIGJlIGEgc3RhdHVzIHdvcmQgY29waWVkIGZyb20gdGhlIFRTUiB3aGljaAotICAgICAgICAgICAgb3JpZ2luYXRlZCB0aGUgVFNJLCBvciBhIHRpbWVyIG92ZXJmbG93IGluZGljYXRvci4gSW4gdGhpcyBsYXN0Ci0JICAgIGNhc2UsIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3Qgd29yZCBpcyBhbGwgemVyb2VzLiAqLworICAgICAgb3JpZ2luYXRlZCB0aGUgVFNJLCBvciBhIHRpbWVyIG92ZXJmbG93IGluZGljYXRvci4gSW4gdGhpcyBsYXN0CisgICAgICBjYXNlLCB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IHdvcmQgaXMgYWxsIHplcm9lcy4gKi8KIAogI2RlZmluZSBOU19UU0lfRU1QVFkgICAgICAgICAgMHg4MDAwMDAwMAogI2RlZmluZSBOU19UU0lfVElNRVNUQU1QX01BU0sgMHgwMEZGRkZGRgpAQCAtMzAxLDEyICsyODEsMTAgQEAKICNkZWZpbmUgbnNfdHNpX2luaXQobnNfdHNpcCkgXAogICAgICAgICAoKG5zX3RzaXApLT53b3JkXzIgPSBjcHVfdG9fbGUzMihOU19UU0lfRU1QVFkpKQogCi0KICNkZWZpbmUgTlNfVFNRU0laRSA4MTkyCiAjZGVmaW5lIE5TX1RTUV9OVU1fRU5UUklFUyAxMDI0CiAjZGVmaW5lIE5TX1RTUV9BTElHTk1FTlQgODE5MgogCi0KICNkZWZpbmUgTlNfVFNJX1NDRElTVkJSIE5TX1RTUl9TQ0RJU1ZCUgogCiAjZGVmaW5lIG5zX3RzaV90bXJvZihuc190c2lwKSBcCkBAIC0zMTYsMjYgKzI5NCwyMiBAQAogI2RlZmluZSBuc190c2lfZ2V0c2NxcG9zKG5zX3RzaXApIFwKICAgICAgICAgKGxlMzJfdG9fY3B1KChuc190c2lwKS0+d29yZF8xKSAmIDB4MDAwMDdGRkYpCiAKKy8qIE5JQ1N0QVIgc3RydWN0dXJlcyBsb2NhdGVkIGluIGxvY2FsIFNSQU0gKi8KIAotCi0vKiBOSUNTdEFSIHN0cnVjdHVyZXMgbG9jYXRlZCBpbiBsb2NhbCBTUkFNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLQotLyogUkNUIC0gUmVjZWl2ZSBDb25uZWN0aW9uIFRhYmxlCisvKgorICogUkNUIC0gUmVjZWl2ZSBDb25uZWN0aW9uIFRhYmxlCiAgKgogICogV3JpdHRlbiBieSBib3RoIHRoZSBOSUNTdEFSIGFuZCB0aGUgZGV2aWNlIGRyaXZlci4KICAqLwogCi10eXBlZGVmIHN0cnVjdCBuc19yY3RlCi17Ci0gICB1MzIgd29yZF8xOwotICAgdTMyIGJ1ZmZlcl9oYW5kbGU7Ci0gICB1MzIgZG1hX2FkZHJlc3M7Ci0gICB1MzIgYWFsNV9jcmMzMjsKK3R5cGVkZWYgc3RydWN0IG5zX3JjdGUgeworCXUzMiB3b3JkXzE7CisJdTMyIGJ1ZmZlcl9oYW5kbGU7CisJdTMyIGRtYV9hZGRyZXNzOworCXUzMiBhYWw1X2NyYzMyOwogfSBuc19yY3RlOwogCi0jZGVmaW5lIE5TX1JDVEVfQlNGQiAgICAgICAgICAgIDB4MDAyMDAwMDAgIC8qIFJldi4gRCBvbmx5ICovCisjZGVmaW5lIE5TX1JDVEVfQlNGQiAgICAgICAgICAgIDB4MDAyMDAwMDAJLyogUmV2LiBEIG9ubHkgKi8KICNkZWZpbmUgTlNfUkNURV9OWkdGQyAgICAgICAgICAgMHgwMDEwMDAwMAogI2RlZmluZSBOU19SQ1RFX0NPTk5FQ1RPUEVOICAgICAweDAwMDgwMDAwCiAjZGVmaW5lIE5TX1JDVEVfQUFMTUFTSyAgICAgICAgIDB4MDAwNzAwMDAKQEAgLTM1OCwyNSArMzMyLDIxIEBACiAjZGVmaW5lIE5TX1JDVF9FTlRSWV9TSVpFIDQJLyogTnVtYmVyIG9mIGR3b3JkcyAqLwogCiAgICAvKiBOT1RFOiBXZSBjb3VsZCBtYWtlIG1hY3JvcyB0byBjb250cnVjdCB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgUkNURSwKLSAgICAgICAgICAgIGJ1dCB0aGF0IGRvZXNuJ3Qgc2VlbSB0byBtYWtlIG11Y2ggc2Vuc2UuLi4gKi8KKyAgICAgIGJ1dCB0aGF0IGRvZXNuJ3Qgc2VlbSB0byBtYWtlIG11Y2ggc2Vuc2UuLi4gKi8KIAotCi0KLS8qIEZCRCAtIEZyZWUgQnVmZmVyIERlc2NyaXB0b3IKKy8qCisgKiBGQkQgLSBGcmVlIEJ1ZmZlciBEZXNjcmlwdG9yCiAgKgogICogV3JpdHRlbiBieSB0aGUgZGV2aWNlIGRyaXZlciB1c2luZyB2aWEgdGhlIGNvbW1hbmQgcmVnaXN0ZXIuCiAgKi8KIAotdHlwZWRlZiBzdHJ1Y3QgbnNfZmJkCi17Ci0gICB1MzIgYnVmZmVyX2hhbmRsZTsKLSAgIHUzMiBkbWFfYWRkcmVzczsKK3R5cGVkZWYgc3RydWN0IG5zX2ZiZCB7CisJdTMyIGJ1ZmZlcl9oYW5kbGU7CisJdTMyIGRtYV9hZGRyZXNzOwogfSBuc19mYmQ7CiAKLQotCi0KLS8qIFRTVCAtIFRyYW5zbWl0IFNjaGVkdWxlIFRhYmxlCisvKgorICogVFNUIC0gVHJhbnNtaXQgU2NoZWR1bGUgVGFibGUKICAqCiAgKiBXcml0dGVuIGJ5IHRoZSBkZXZpY2UgZHJpdmVyLgogICovCkBAIC0zODUsNDAgKzM1NSwzOCBAQAogCiAjZGVmaW5lIE5TX1RTVF9PUENPREVfTUFTSyAweDYwMDAwMDAwCiAKLSNkZWZpbmUgTlNfVFNUX09QQ09ERV9OVUxMICAgICAweDAwMDAwMDAwIC8qIEluc2VydCBudWxsIGNlbGwgKi8KLSNkZWZpbmUgTlNfVFNUX09QQ09ERV9GSVhFRCAgICAweDIwMDAwMDAwIC8qIENlbGwgZnJvbSBhIGZpeGVkIHJhdGUgY2hhbm5lbCAqLworI2RlZmluZSBOU19UU1RfT1BDT0RFX05VTEwgICAgIDB4MDAwMDAwMDAJLyogSW5zZXJ0IG51bGwgY2VsbCAqLworI2RlZmluZSBOU19UU1RfT1BDT0RFX0ZJWEVEICAgIDB4MjAwMDAwMDAJLyogQ2VsbCBmcm9tIGEgZml4ZWQgcmF0ZSBjaGFubmVsICovCiAjZGVmaW5lIE5TX1RTVF9PUENPREVfVkFSSUFCTEUgMHg0MDAwMDAwMAotI2RlZmluZSBOU19UU1RfT1BDT0RFX0VORCAgICAgIDB4NjAwMDAwMDAgLyogSnVtcCAqLworI2RlZmluZSBOU19UU1RfT1BDT0RFX0VORCAgICAgIDB4NjAwMDAwMDAJLyogSnVtcCAqLwogCiAjZGVmaW5lIG5zX3RzdGVfbWFrZShvcGNvZGUsIHNyYW1hZCkgKG9wY29kZSB8IHNyYW1hZCkKIAogICAgLyogTk9URToKIAogICAgICAgLSBXaGVuIHRoZSBvcGNvZGUgaXMgRklYRUQsIHNyYW1hZCBzcGVjaWZpZXMgdGhlIFNSQU0gYWRkcmVzcyBvZiB0aGUKLSAgICAgICAgU0NEIGZvciB0aGF0IGZpeGVkIHJhdGUgY2hhbm5lbC4KKyAgICAgIFNDRCBmb3IgdGhhdCBmaXhlZCByYXRlIGNoYW5uZWwuCiAgICAgICAtIFdoZW4gdGhlIG9wY29kZSBpcyBFTkQsIHNyYW1hZCBzcGVjaWZpZXMgdGhlIFNSQU0gYWRkcmVzcyBvZiB0aGUKLSAgICAgICAgbG9jYXRpb24gb2YgdGhlIG5leHQgVFNUIGVudHJ5IHRvIHJlYWQuCisgICAgICBsb2NhdGlvbiBvZiB0aGUgbmV4dCBUU1QgZW50cnkgdG8gcmVhZC4KICAgICAqLwogCi0KLQotLyogU0NEIC0gU2VnbWVudGF0aW9uIENoYW5uZWwgRGVzY3JpcHRvcgorLyoKKyAqIFNDRCAtIFNlZ21lbnRhdGlvbiBDaGFubmVsIERlc2NyaXB0b3IKICAqCiAgKiBXcml0dGVuIGJ5IGJvdGggdGhlIGRldmljZSBkcml2ZXIgYW5kIHRoZSBOSUNTdEFSCiAgKi8KIAotdHlwZWRlZiBzdHJ1Y3QgbnNfc2NkCi17Ci0gICB1MzIgd29yZF8xOwotICAgdTMyIHdvcmRfMjsKLSAgIHUzMiBwYXJ0aWFsX2FhbDVfY3JjOwotICAgdTMyIHJlc2VydmVkOwotICAgbnNfc2NxZSBjYWNoZV9hOwotICAgbnNfc2NxZSBjYWNoZV9iOwordHlwZWRlZiBzdHJ1Y3QgbnNfc2NkIHsKKwl1MzIgd29yZF8xOworCXUzMiB3b3JkXzI7CisJdTMyIHBhcnRpYWxfYWFsNV9jcmM7CisJdTMyIHJlc2VydmVkOworCW5zX3NjcWUgY2FjaGVfYTsKKwluc19zY3FlIGNhY2hlX2I7CiB9IG5zX3NjZDsKIAotI2RlZmluZSBOU19TQ0RfQkFTRV9NQVNLX1ZBUiAweEZGRkZFMDAwCQkvKiBWYXJpYWJsZSByYXRlICovCi0jZGVmaW5lIE5TX1NDRF9CQVNFX01BU0tfRklYIDB4RkZGRkZDMDAJCS8qIEZpeGVkIHJhdGUgKi8KKyNkZWZpbmUgTlNfU0NEX0JBU0VfTUFTS19WQVIgMHhGRkZGRTAwMAkvKiBWYXJpYWJsZSByYXRlICovCisjZGVmaW5lIE5TX1NDRF9CQVNFX01BU0tfRklYIDB4RkZGRkZDMDAJLyogRml4ZWQgcmF0ZSAqLwogI2RlZmluZSBOU19TQ0RfVEFJTF9NQVNLX1ZBUiAweDAwMDAxRkYwCiAjZGVmaW5lIE5TX1NDRF9UQUlMX01BU0tfRklYIDB4MDAwMDAzRjAKICNkZWZpbmUgTlNfU0NEX0hFQURfTUFTS19WQVIgMHgwMDAwMUZGMApAQCAtNDI2LDEzICszOTQsOSBAQAogI2RlZmluZSBOU19TQ0RfWE1JVEZPUkVWRVIgICAweDAyMDAwMDAwCiAKICAgIC8qIE5PVEU6IFRoZXJlIGFyZSBvdGhlciBmaWVsZHMgaW4gd29yZCAyIG9mIHRoZSBTQ0QsIGJ1dCBhcyB0aGV5IHNob3VsZAotICAgICAgICAgICAgbm90IGJlIG5lZWRlZCBpbiB0aGUgZGV2aWNlIGRyaXZlciB0aGV5IGFyZSBub3QgZGVmaW5lZCBoZXJlLiAqLworICAgICAgbm90IGJlIG5lZWRlZCBpbiB0aGUgZGV2aWNlIGRyaXZlciB0aGV5IGFyZSBub3QgZGVmaW5lZCBoZXJlLiAqLwogCi0KLQotCi0vKiBOSUNTdEFSIGxvY2FsIFNSQU0gbWVtb3J5IG1hcCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCisvKiBOSUNTdEFSIGxvY2FsIFNSQU0gbWVtb3J5IG1hcCAqLwogCiAjZGVmaW5lIE5TX1JDVCAgICAgICAgICAgMHgwMDAwMAogI2RlZmluZSBOU19SQ1RfMzJfRU5EICAgIDB4MDNGRkYKQEAgLTQ1NSwxMDAgKzQxOSw5MyBAQAogI2RlZmluZSBOU19MR0ZCUSAgICAgICAgIDB4MUZDMDAKICNkZWZpbmUgTlNfTEdGQlFfRU5EICAgICAweDFGRkZGCiAKLQotCi0vKiBOSVNDdEFSIG9wZXJhdGlvbiByZWdpc3RlcnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCisvKiBOSVNDdEFSIG9wZXJhdGlvbiByZWdpc3RlcnMgKi8KIAogLyogU2VlIFNlY3Rpb24gMy40IG9mIGBJRFQ3NzIxMSBOSUNTdEFSIFVzZXIgTWFudWFsJyBmcm9tIHd3dy5pZHQuY29tICovCiAKLWVudW0gbnNfcmVncwotewotICAgRFIwICAgPSAweDAwLCAgICAgIC8qIERhdGEgUmVnaXN0ZXIgMCBSL1cqLwotICAgRFIxICAgPSAweDA0LCAgICAgIC8qIERhdGEgUmVnaXN0ZXIgMSBXICovCi0gICBEUjIgICA9IDB4MDgsICAgICAgLyogRGF0YSBSZWdpc3RlciAyIFcgKi8KLSAgIERSMyAgID0gMHgwQywgICAgICAvKiBEYXRhIFJlZ2lzdGVyIDMgVyAqLwotICAgQ01EICAgPSAweDEwLCAgICAgIC8qIENvbW1hbmQgVyAqLwotICAgQ0ZHICAgPSAweDE0LCAgICAgIC8qIENvbmZpZ3VyYXRpb24gUi9XICovCi0gICBTVEFUICA9IDB4MTgsICAgICAgLyogU3RhdHVzIFIvVyAqLwotICAgUlNRQiAgPSAweDFDLCAgICAgIC8qIFJlY2VpdmUgU3RhdHVzIFF1ZXVlIEJhc2UgVyAqLwotICAgUlNRVCAgPSAweDIwLCAgICAgIC8qIFJlY2VpdmUgU3RhdHVzIFF1ZXVlIFRhaWwgUiAqLwotICAgUlNRSCAgPSAweDI0LCAgICAgIC8qIFJlY2VpdmUgU3RhdHVzIFF1ZXVlIEhlYWQgVyAqLwotICAgQ0RDICAgPSAweDI4LCAgICAgIC8qIENlbGwgRHJvcCBDb3VudGVyIFIvY2xlYXIgKi8KLSAgIFZQRUMgID0gMHgyQywgICAgICAvKiBWUEkvVkNJIExvb2t1cCBFcnJvciBDb3VudCBSL2NsZWFyICovCi0gICBJQ0MgICA9IDB4MzAsICAgICAgLyogSW52YWxpZCBDZWxsIENvdW50IFIvY2xlYXIgKi8KLSAgIFJBV0NUID0gMHgzNCwgICAgICAvKiBSYXcgQ2VsbCBUYWlsIFIgKi8KLSAgIFRNUiAgID0gMHgzOCwgICAgICAvKiBUaW1lciBSICovCi0gICBUU1RCICA9IDB4M0MsICAgICAgLyogVHJhbnNtaXQgU2NoZWR1bGUgVGFibGUgQmFzZSBSL1cgKi8KLSAgIFRTUUIgID0gMHg0MCwgICAgICAvKiBUcmFuc21pdCBTdGF0dXMgUXVldWUgQmFzZSBXICovCi0gICBUU1FUICA9IDB4NDQsICAgICAgLyogVHJhbnNtaXQgU3RhdHVzIFF1ZXVlIFRhaWwgUiAqLwotICAgVFNRSCAgPSAweDQ4LCAgICAgIC8qIFRyYW5zbWl0IFN0YXR1cyBRdWV1ZSBIZWFkIFcgKi8KLSAgIEdQICAgID0gMHg0QywgICAgICAvKiBHZW5lcmFsIFB1cnBvc2UgUi9XICovCi0gICBWUE0gICA9IDB4NTAgICAgICAgLyogVlBJL1ZDSSBNYXNrIFcgKi8KK2VudW0gbnNfcmVncyB7CisJRFIwID0gMHgwMCwJCS8qIERhdGEgUmVnaXN0ZXIgMCBSL1cgKi8KKwlEUjEgPSAweDA0LAkJLyogRGF0YSBSZWdpc3RlciAxIFcgKi8KKwlEUjIgPSAweDA4LAkJLyogRGF0YSBSZWdpc3RlciAyIFcgKi8KKwlEUjMgPSAweDBDLAkJLyogRGF0YSBSZWdpc3RlciAzIFcgKi8KKwlDTUQgPSAweDEwLAkJLyogQ29tbWFuZCBXICovCisJQ0ZHID0gMHgxNCwJCS8qIENvbmZpZ3VyYXRpb24gUi9XICovCisJU1RBVCA9IDB4MTgsCQkvKiBTdGF0dXMgUi9XICovCisJUlNRQiA9IDB4MUMsCQkvKiBSZWNlaXZlIFN0YXR1cyBRdWV1ZSBCYXNlIFcgKi8KKwlSU1FUID0gMHgyMCwJCS8qIFJlY2VpdmUgU3RhdHVzIFF1ZXVlIFRhaWwgUiAqLworCVJTUUggPSAweDI0LAkJLyogUmVjZWl2ZSBTdGF0dXMgUXVldWUgSGVhZCBXICovCisJQ0RDID0gMHgyOCwJCS8qIENlbGwgRHJvcCBDb3VudGVyIFIvY2xlYXIgKi8KKwlWUEVDID0gMHgyQywJCS8qIFZQSS9WQ0kgTG9va3VwIEVycm9yIENvdW50IFIvY2xlYXIgKi8KKwlJQ0MgPSAweDMwLAkJLyogSW52YWxpZCBDZWxsIENvdW50IFIvY2xlYXIgKi8KKwlSQVdDVCA9IDB4MzQsCQkvKiBSYXcgQ2VsbCBUYWlsIFIgKi8KKwlUTVIgPSAweDM4LAkJLyogVGltZXIgUiAqLworCVRTVEIgPSAweDNDLAkJLyogVHJhbnNtaXQgU2NoZWR1bGUgVGFibGUgQmFzZSBSL1cgKi8KKwlUU1FCID0gMHg0MCwJCS8qIFRyYW5zbWl0IFN0YXR1cyBRdWV1ZSBCYXNlIFcgKi8KKwlUU1FUID0gMHg0NCwJCS8qIFRyYW5zbWl0IFN0YXR1cyBRdWV1ZSBUYWlsIFIgKi8KKwlUU1FIID0gMHg0OCwJCS8qIFRyYW5zbWl0IFN0YXR1cyBRdWV1ZSBIZWFkIFcgKi8KKwlHUCA9IDB4NEMsCQkvKiBHZW5lcmFsIFB1cnBvc2UgUi9XICovCisJVlBNID0gMHg1MAkJLyogVlBJL1ZDSSBNYXNrIFcgKi8KIH07CiAKLQotLyogTklDU3RBUiBjb21tYW5kcyBpc3N1ZWQgdG8gdGhlIENNRCByZWdpc3RlciAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQorLyogTklDU3RBUiBjb21tYW5kcyBpc3N1ZWQgdG8gdGhlIENNRCByZWdpc3RlciAqLwogCiAvKiBUb3AgNCBiaXRzIGFyZSBjb21tYW5kIG9wY29kZSwgbG93ZXIgMjggYXJlIHBhcmFtZXRlcnMuICovCiAKICNkZWZpbmUgTlNfQ01EX05PX09QRVJBVElPTiAgICAgICAgIDB4MDAwMDAwMDAKLSAgICAgICAgLyogcGFyYW1zIGFsd2F5cyAwICovCisJLyogcGFyYW1zIGFsd2F5cyAwICovCiAKICNkZWZpbmUgTlNfQ01EX09QRU5DTE9TRV9DT05ORUNUSU9OIDB4MjAwMDAwMDAKLSAgICAgICAgLyogYjE5ezE9b3BlbiwwPWNsb3NlfSBiMTgtMntTUkFNIGFkZHJ9ICovCisJLyogYjE5ezE9b3BlbiwwPWNsb3NlfSBiMTgtMntTUkFNIGFkZHJ9ICovCiAKICNkZWZpbmUgTlNfQ01EX1dSSVRFX1NSQU0gICAgICAgICAgIDB4NDAwMDAwMDAKLSAgICAgICAgLyogYjE4LTJ7U1JBTSBhZGRyfSBiMS0we2J1cnN0IHNpemV9ICovCisJLyogYjE4LTJ7U1JBTSBhZGRyfSBiMS0we2J1cnN0IHNpemV9ICovCiAKICNkZWZpbmUgTlNfQ01EX1JFQURfU1JBTSAgICAgICAgICAgIDB4NTAwMDAwMDAKLSAgICAgICAgLyogYjE4LTJ7U1JBTSBhZGRyfSAqLworCS8qIGIxOC0ye1NSQU0gYWRkcn0gKi8KIAogI2RlZmluZSBOU19DTURfV1JJVEVfRlJFRUJVRlEgICAgICAgMHg2MDAwMDAwMAotICAgICAgICAvKiBiMHtsYXJnZSBidWYgaW5kaWNhdG9yfSAqLworCS8qIGIwe2xhcmdlIGJ1ZiBpbmRpY2F0b3J9ICovCiAKICNkZWZpbmUgTlNfQ01EX1JFQURfVVRJTElUWSAgICAgICAgIDB4ODAwMDAwMDAKLSAgICAgICAgLyogYjh7MT1zZWxlY3QgVVRMX0NTMX0gYjl7MT1zZWxlY3QgVVRMX0NTMH0gYjctMHtidXMgYWRkcn0gKi8KKwkvKiBiOHsxPXNlbGVjdCBVVExfQ1MxfSBiOXsxPXNlbGVjdCBVVExfQ1MwfSBiNy0we2J1cyBhZGRyfSAqLwogCiAjZGVmaW5lIE5TX0NNRF9XUklURV9VVElMSVRZICAgICAgICAweDkwMDAwMDAwCi0gICAgICAgIC8qIGI4ezE9c2VsZWN0IFVUTF9DUzF9IGI5ezE9c2VsZWN0IFVUTF9DUzB9IGI3LTB7YnVzIGFkZHJ9ICovCisJLyogYjh7MT1zZWxlY3QgVVRMX0NTMX0gYjl7MT1zZWxlY3QgVVRMX0NTMH0gYjctMHtidXMgYWRkcn0gKi8KIAogI2RlZmluZSBOU19DTURfT1BFTl9DT05ORUNUSU9OIChOU19DTURfT1BFTkNMT1NFX0NPTk5FQ1RJT04gfCAweDAwMDgwMDAwKQogI2RlZmluZSBOU19DTURfQ0xPU0VfQ09OTkVDVElPTiBOU19DTURfT1BFTkNMT1NFX0NPTk5FQ1RJT04KIAorLyogTklDU3RBUiBjb25maWd1cmF0aW9uIGJpdHMgKi8KIAotLyogTklDU3RBUiBjb25maWd1cmF0aW9uIGJpdHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBOU19DRkdfU1dSU1QgICAgICAgICAgMHg4MDAwMDAwMCAgICAvKiBTb2Z0d2FyZSBSZXNldCAqLwotI2RlZmluZSBOU19DRkdfUlhQQVRIICAgICAgICAgMHgyMDAwMDAwMCAgICAvKiBSZWNlaXZlIFBhdGggRW5hYmxlICovCi0jZGVmaW5lIE5TX0NGR19TTUJVRlNJWkVfTUFTSyAweDE4MDAwMDAwICAgIC8qIFNtYWxsIFJlY2VpdmUgQnVmZmVyIFNpemUgKi8KLSNkZWZpbmUgTlNfQ0ZHX0xHQlVGU0laRV9NQVNLIDB4MDYwMDAwMDAgICAgLyogTGFyZ2UgUmVjZWl2ZSBCdWZmZXIgU2l6ZSAqLwotI2RlZmluZSBOU19DRkdfRUZCSUUgICAgICAgICAgMHgwMTAwMDAwMCAgICAvKiBFbXB0eSBGcmVlIEJ1ZmZlciBRdWV1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lIE5TX0NGR19SU1FTSVpFX01BU0sgICAweDAwQzAwMDAwICAgIC8qIFJlY2VpdmUgU3RhdHVzIFF1ZXVlIFNpemUgKi8KLSNkZWZpbmUgTlNfQ0ZHX0lDQUNDRVBUICAgICAgIDB4MDAyMDAwMDAgICAgLyogSW52YWxpZCBDZWxsIEFjY2VwdCAqLwotI2RlZmluZSBOU19DRkdfSUdOT1JFR0ZDICAgICAgMHgwMDEwMDAwMCAgICAvKiBJZ25vcmUgR2VuZXJhbCBGbG93IENvbnRyb2wgKi8KLSNkZWZpbmUgTlNfQ0ZHX1ZQSUJJVFNfTUFTSyAgIDB4MDAwQzAwMDAgICAgLyogVlBJL1ZDSSBCaXRzIFNpemUgU2VsZWN0ICovCi0jZGVmaW5lIE5TX0NGR19SQ1RTSVpFX01BU0sgICAweDAwMDMwMDAwICAgIC8qIFJlY2VpdmUgQ29ubmVjdGlvbiBUYWJsZSBTaXplICovCi0jZGVmaW5lIE5TX0NGR19WQ0VSUkFDQ0VQVCAgICAweDAwMDA4MDAwICAgIC8qIFZQSS9WQ0kgRXJyb3IgQ2VsbCBBY2NlcHQgKi8KLSNkZWZpbmUgTlNfQ0ZHX1JYSU5UX01BU0sgICAgIDB4MDAwMDcwMDAgICAgLyogRW5kIG9mIFJlY2VpdmUgUERVIEludGVycnVwdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGluZyAqLwotI2RlZmluZSBOU19DRkdfUkFXSUUgICAgICAgICAgMHgwMDAwMDgwMCAgICAvKiBSYXcgQ2VsbCBRdScgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSBOU19DRkdfUlNRQUZJRSAgICAgICAgMHgwMDAwMDQwMCAgICAvKiBSZWNlaXZlIFF1ZXVlIEFsbW9zdCBGdWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgTlNfQ0ZHX1JYUk0gICAgICAgICAgIDB4MDAwMDAyMDAgICAgLyogUmVjZWl2ZSBSTSBDZWxscyAqLwotI2RlZmluZSBOU19DRkdfVE1SUk9JRSAgICAgICAgMHgwMDAwMDA4MCAgICAvKiBUaW1lciBSb2xsIE92ZXIgSW50ZXJydXB0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSAqLwotI2RlZmluZSBOU19DRkdfVFhFTiAgICAgICAgICAgMHgwMDAwMDAyMCAgICAvKiBUcmFuc21pdCBPcGVyYXRpb24gRW5hYmxlICovCi0jZGVmaW5lIE5TX0NGR19UWElFICAgICAgICAgICAweDAwMDAwMDEwICAgIC8qIFRyYW5zbWl0IFN0YXR1cyBJbnRlcnJ1cHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlICovCi0jZGVmaW5lIE5TX0NGR19UWFVSSUUgICAgICAgICAweDAwMDAwMDA4ICAgIC8qIFRyYW5zbWl0IFVuZGVyLXJ1biBJbnRlcnJ1cHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlICovCi0jZGVmaW5lIE5TX0NGR19VTU9ERSAgICAgICAgICAweDAwMDAwMDA0ICAgIC8qIFV0b3BpYSBNb2RlIChjZWxsL2J5dGUpIFNlbGVjdCAqLwotI2RlZmluZSBOU19DRkdfVFNRRklFICAgICAgICAgMHgwMDAwMDAwMiAgICAvKiBUcmFuc21pdCBTdGF0dXMgUXVldWUgRnVsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lIE5TX0NGR19QSFlJRSAgICAgICAgICAweDAwMDAwMDAxICAgIC8qIFBIWSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIE5TX0NGR19TV1JTVCAgICAgICAgICAweDgwMDAwMDAwCS8qIFNvZnR3YXJlIFJlc2V0ICovCisjZGVmaW5lIE5TX0NGR19SWFBBVEggICAgICAgICAweDIwMDAwMDAwCS8qIFJlY2VpdmUgUGF0aCBFbmFibGUgKi8KKyNkZWZpbmUgTlNfQ0ZHX1NNQlVGU0laRV9NQVNLIDB4MTgwMDAwMDAJLyogU21hbGwgUmVjZWl2ZSBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBOU19DRkdfTEdCVUZTSVpFX01BU0sgMHgwNjAwMDAwMAkvKiBMYXJnZSBSZWNlaXZlIEJ1ZmZlciBTaXplICovCisjZGVmaW5lIE5TX0NGR19FRkJJRSAgICAgICAgICAweDAxMDAwMDAwCS8qIEVtcHR5IEZyZWUgQnVmZmVyIFF1ZXVlCisJCQkJCQkgICBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIE5TX0NGR19SU1FTSVpFX01BU0sgICAweDAwQzAwMDAwCS8qIFJlY2VpdmUgU3RhdHVzIFF1ZXVlIFNpemUgKi8KKyNkZWZpbmUgTlNfQ0ZHX0lDQUNDRVBUICAgICAgIDB4MDAyMDAwMDAJLyogSW52YWxpZCBDZWxsIEFjY2VwdCAqLworI2RlZmluZSBOU19DRkdfSUdOT1JFR0ZDICAgICAgMHgwMDEwMDAwMAkvKiBJZ25vcmUgR2VuZXJhbCBGbG93IENvbnRyb2wgKi8KKyNkZWZpbmUgTlNfQ0ZHX1ZQSUJJVFNfTUFTSyAgIDB4MDAwQzAwMDAJLyogVlBJL1ZDSSBCaXRzIFNpemUgU2VsZWN0ICovCisjZGVmaW5lIE5TX0NGR19SQ1RTSVpFX01BU0sgICAweDAwMDMwMDAwCS8qIFJlY2VpdmUgQ29ubmVjdGlvbiBUYWJsZSBTaXplICovCisjZGVmaW5lIE5TX0NGR19WQ0VSUkFDQ0VQVCAgICAweDAwMDA4MDAwCS8qIFZQSS9WQ0kgRXJyb3IgQ2VsbCBBY2NlcHQgKi8KKyNkZWZpbmUgTlNfQ0ZHX1JYSU5UX01BU0sgICAgIDB4MDAwMDcwMDAJLyogRW5kIG9mIFJlY2VpdmUgUERVIEludGVycnVwdAorCQkJCQkJICAgSGFuZGxpbmcgKi8KKyNkZWZpbmUgTlNfQ0ZHX1JBV0lFICAgICAgICAgIDB4MDAwMDA4MDAJLyogUmF3IENlbGwgUXUnIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgTlNfQ0ZHX1JTUUFGSUUgICAgICAgIDB4MDAwMDA0MDAJLyogUmVjZWl2ZSBRdWV1ZSBBbG1vc3QgRnVsbAorCQkJCQkJICAgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBOU19DRkdfUlhSTSAgICAgICAgICAgMHgwMDAwMDIwMAkvKiBSZWNlaXZlIFJNIENlbGxzICovCisjZGVmaW5lIE5TX0NGR19UTVJST0lFICAgICAgICAweDAwMDAwMDgwCS8qIFRpbWVyIFJvbGwgT3ZlciBJbnRlcnJ1cHQKKwkJCQkJCSAgIEVuYWJsZSAqLworI2RlZmluZSBOU19DRkdfVFhFTiAgICAgICAgICAgMHgwMDAwMDAyMAkvKiBUcmFuc21pdCBPcGVyYXRpb24gRW5hYmxlICovCisjZGVmaW5lIE5TX0NGR19UWElFICAgICAgICAgICAweDAwMDAwMDEwCS8qIFRyYW5zbWl0IFN0YXR1cyBJbnRlcnJ1cHQKKwkJCQkJCSAgIEVuYWJsZSAqLworI2RlZmluZSBOU19DRkdfVFhVUklFICAgICAgICAgMHgwMDAwMDAwOAkvKiBUcmFuc21pdCBVbmRlci1ydW4gSW50ZXJydXB0CisJCQkJCQkgICBFbmFibGUgKi8KKyNkZWZpbmUgTlNfQ0ZHX1VNT0RFICAgICAgICAgIDB4MDAwMDAwMDQJLyogVXRvcGlhIE1vZGUgKGNlbGwvYnl0ZSkgU2VsZWN0ICovCisjZGVmaW5lIE5TX0NGR19UU1FGSUUgICAgICAgICAweDAwMDAwMDAyCS8qIFRyYW5zbWl0IFN0YXR1cyBRdWV1ZSBGdWxsCisJCQkJCQkgICBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIE5TX0NGR19QSFlJRSAgICAgICAgICAweDAwMDAwMDAxCS8qIFBIWSBJbnRlcnJ1cHQgRW5hYmxlICovCiAKICNkZWZpbmUgTlNfQ0ZHX1NNQlVGU0laRV80OCAgICAweDAwMDAwMDAwCiAjZGVmaW5lIE5TX0NGR19TTUJVRlNJWkVfOTYgICAgMHgwODAwMDAwMApAQCAtNTc5LDMzICs1MzYsMjkgQEAKICNkZWZpbmUgTlNfQ0ZHX1JYSU5UXzYyNFVTICAgMHgwMDAwMzAwMAogI2RlZmluZSBOU19DRkdfUlhJTlRfODk5VVMgICAweDAwMDA0MDAwCiAKKy8qIE5JQ1N0QVIgU1RBVHVzIGJpdHMgKi8KIAotLyogTklDU3RBUiBTVEFUdXMgYml0cyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBOU19TVEFUX1NGQlFDX01BU0sgMHhGRjAwMDAwMCAgIC8qIGhpIDggYml0cyBTbWFsbCBCdWZmZXIgUXVldWUgQ291bnQgKi8KLSNkZWZpbmUgTlNfU1RBVF9MRkJRQ19NQVNLIDB4MDBGRjAwMDAgICAvKiBoaSA4IGJpdHMgTGFyZ2UgQnVmZmVyIFF1ZXVlIENvdW50ICovCi0jZGVmaW5lIE5TX1NUQVRfVFNJRiAgICAgICAweDAwMDA4MDAwICAgLyogVHJhbnNtaXQgU3RhdHVzIFF1ZXVlIEluZGljYXRvciAqLwotI2RlZmluZSBOU19TVEFUX1RYSUNQICAgICAgMHgwMDAwNDAwMCAgIC8qIFRyYW5zbWl0IEluY29tcGxldGUgUERVICovCi0jZGVmaW5lIE5TX1NUQVRfVFNRRiAgICAgICAweDAwMDAxMDAwICAgLyogVHJhbnNtaXQgU3RhdHVzIFF1ZXVlIEZ1bGwgKi8KLSNkZWZpbmUgTlNfU1RBVF9UTVJPRiAgICAgIDB4MDAwMDA4MDAgICAvKiBUaW1lciBPdmVyZmxvdyAqLwotI2RlZmluZSBOU19TVEFUX1BIWUkgICAgICAgMHgwMDAwMDQwMCAgIC8qIFBIWSBEZXZpY2UgSW50ZXJydXB0ICovCi0jZGVmaW5lIE5TX1NUQVRfQ01EQlogICAgICAweDAwMDAwMjAwICAgLyogQ29tbWFuZCBCdXN5ICovCi0jZGVmaW5lIE5TX1NUQVRfU0ZCUUYgICAgICAweDAwMDAwMTAwICAgLyogU21hbGwgQnVmZmVyIFF1ZXVlIEZ1bGwgKi8KLSNkZWZpbmUgTlNfU1RBVF9MRkJRRiAgICAgIDB4MDAwMDAwODAgICAvKiBMYXJnZSBCdWZmZXIgUXVldWUgRnVsbCAqLwotI2RlZmluZSBOU19TVEFUX1JTUUYgICAgICAgMHgwMDAwMDA0MCAgIC8qIFJlY2VpdmUgU3RhdHVzIFF1ZXVlIEZ1bGwgKi8KLSNkZWZpbmUgTlNfU1RBVF9FT1BEVSAgICAgIDB4MDAwMDAwMjAgICAvKiBFbmQgb2YgUERVICovCi0jZGVmaW5lIE5TX1NUQVRfUkFXQ0YgICAgICAweDAwMDAwMDEwICAgLyogUmF3IENlbGwgRmxhZyAqLwotI2RlZmluZSBOU19TVEFUX1NGQlFFICAgICAgMHgwMDAwMDAwOCAgIC8qIFNtYWxsIEJ1ZmZlciBRdWV1ZSBFbXB0eSAqLwotI2RlZmluZSBOU19TVEFUX0xGQlFFICAgICAgMHgwMDAwMDAwNCAgIC8qIExhcmdlIEJ1ZmZlciBRdWV1ZSBFbXB0eSAqLwotI2RlZmluZSBOU19TVEFUX1JTUUFGICAgICAgMHgwMDAwMDAwMiAgIC8qIFJlY2VpdmUgU3RhdHVzIFF1ZXVlIEFsbW9zdCBGdWxsICovCisjZGVmaW5lIE5TX1NUQVRfU0ZCUUNfTUFTSyAweEZGMDAwMDAwCS8qIGhpIDggYml0cyBTbWFsbCBCdWZmZXIgUXVldWUgQ291bnQgKi8KKyNkZWZpbmUgTlNfU1RBVF9MRkJRQ19NQVNLIDB4MDBGRjAwMDAJLyogaGkgOCBiaXRzIExhcmdlIEJ1ZmZlciBRdWV1ZSBDb3VudCAqLworI2RlZmluZSBOU19TVEFUX1RTSUYgICAgICAgMHgwMDAwODAwMAkvKiBUcmFuc21pdCBTdGF0dXMgUXVldWUgSW5kaWNhdG9yICovCisjZGVmaW5lIE5TX1NUQVRfVFhJQ1AgICAgICAweDAwMDA0MDAwCS8qIFRyYW5zbWl0IEluY29tcGxldGUgUERVICovCisjZGVmaW5lIE5TX1NUQVRfVFNRRiAgICAgICAweDAwMDAxMDAwCS8qIFRyYW5zbWl0IFN0YXR1cyBRdWV1ZSBGdWxsICovCisjZGVmaW5lIE5TX1NUQVRfVE1ST0YgICAgICAweDAwMDAwODAwCS8qIFRpbWVyIE92ZXJmbG93ICovCisjZGVmaW5lIE5TX1NUQVRfUEhZSSAgICAgICAweDAwMDAwNDAwCS8qIFBIWSBEZXZpY2UgSW50ZXJydXB0ICovCisjZGVmaW5lIE5TX1NUQVRfQ01EQlogICAgICAweDAwMDAwMjAwCS8qIENvbW1hbmQgQnVzeSAqLworI2RlZmluZSBOU19TVEFUX1NGQlFGICAgICAgMHgwMDAwMDEwMAkvKiBTbWFsbCBCdWZmZXIgUXVldWUgRnVsbCAqLworI2RlZmluZSBOU19TVEFUX0xGQlFGICAgICAgMHgwMDAwMDA4MAkvKiBMYXJnZSBCdWZmZXIgUXVldWUgRnVsbCAqLworI2RlZmluZSBOU19TVEFUX1JTUUYgICAgICAgMHgwMDAwMDA0MAkvKiBSZWNlaXZlIFN0YXR1cyBRdWV1ZSBGdWxsICovCisjZGVmaW5lIE5TX1NUQVRfRU9QRFUgICAgICAweDAwMDAwMDIwCS8qIEVuZCBvZiBQRFUgKi8KKyNkZWZpbmUgTlNfU1RBVF9SQVdDRiAgICAgIDB4MDAwMDAwMTAJLyogUmF3IENlbGwgRmxhZyAqLworI2RlZmluZSBOU19TVEFUX1NGQlFFICAgICAgMHgwMDAwMDAwOAkvKiBTbWFsbCBCdWZmZXIgUXVldWUgRW1wdHkgKi8KKyNkZWZpbmUgTlNfU1RBVF9MRkJRRSAgICAgIDB4MDAwMDAwMDQJLyogTGFyZ2UgQnVmZmVyIFF1ZXVlIEVtcHR5ICovCisjZGVmaW5lIE5TX1NUQVRfUlNRQUYgICAgICAweDAwMDAwMDAyCS8qIFJlY2VpdmUgU3RhdHVzIFF1ZXVlIEFsbW9zdCBGdWxsICovCiAKICNkZWZpbmUgbnNfc3RhdF9zZmJxY19nZXQoc3RhdCkgKCgoc3RhdCkgJiBOU19TVEFUX1NGQlFDX01BU0spID4+IDIzKQogI2RlZmluZSBuc19zdGF0X2xmYnFjX2dldChzdGF0KSAoKChzdGF0KSAmIE5TX1NUQVRfTEZCUUNfTUFTSykgPj4gMTUpCiAKLQotCi0vKiAjZGVmaW5lcyB3aGljaCBkZXBlbmQgb24gb3RoZXIgI2RlZmluZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCisvKiAjZGVmaW5lcyB3aGljaCBkZXBlbmQgb24gb3RoZXIgI2RlZmluZXMgKi8KIAogI2RlZmluZSBOU19UU1QwIE5TX1RTVF9GUlNDRAogI2RlZmluZSBOU19UU1QxIChOU19UU1RfRlJTQ0QgKyBOU19UU1RfTlVNX0VOVFJJRVMgKyAxKQpAQCAtNjcyLDggKzYyNSw3IEBACiAjZGVmaW5lIE5TX0NGR19UU1FGSUVfT1BUIDB4MDAwMDAwMDAKICNlbmRpZiAvKiBFTkFCTEVfVFNRRklFICovCiAKLQotLyogUENJIHN0dWZmICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFBDSSBzdHVmZiAqLwogCiAjaWZuZGVmIFBDSV9WRU5ET1JfSURfSURUCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfSURUIDB4MTExRApAQCAtNjgzLDEzOCArNjM1LDEyNCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lEVF9JRFQ3NzIwMSAweDAwMDEKICNlbmRpZiAvKiBQQ0lfREVWSUNFX0lEX0lEVF9JRFQ3NzIwMSAqLwogCisvKiBEZXZpY2UgZHJpdmVyIHN0cnVjdHVyZXMgKi8KIAotCi0vKiBEZXZpY2UgZHJpdmVyIHN0cnVjdHVyZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLXN0cnVjdCBuc19za2JfY2IgewotCXUzMiBidWZfdHlwZTsJCQkvKiBCVUZfU00vQlVGX0xHL0JVRl9OT05FICovCitzdHJ1Y3QgbnNfc2tiX3BydiB7CisJdTMyIGJ1Zl90eXBlOwkJLyogQlVGX1NNL0JVRl9MRy9CVUZfTk9ORSAqLworCXUzMiBkbWE7CisJaW50IGlvdmNudDsKIH07CiAKLSNkZWZpbmUgTlNfU0tCX0NCKHNrYikJKChzdHJ1Y3QgbnNfc2tiX2NiICopKChza2IpLT5jYikpCisjZGVmaW5lIE5TX1BSVl9CVUZUWVBFKHNrYikgICBcCisgICAgICAgICgoKHN0cnVjdCBuc19za2JfcHJ2ICopKEFUTV9TS0Ioc2tiKSsxKSktPmJ1Zl90eXBlKQorI2RlZmluZSBOU19QUlZfRE1BKHNrYikgXAorICAgICAgICAoKChzdHJ1Y3QgbnNfc2tiX3BydiAqKShBVE1fU0tCKHNrYikrMSkpLT5kbWEpCisjZGVmaW5lIE5TX1BSVl9JT1ZDTlQoc2tiKSBcCisgICAgICAgICgoKHN0cnVjdCBuc19za2JfcHJ2ICopKEFUTV9TS0Ioc2tiKSsxKSktPmlvdmNudCkKIAotdHlwZWRlZiBzdHJ1Y3QgdHNxX2luZm8KLXsKLSAgIHZvaWQgKm9yZzsKLSAgIG5zX3RzaSAqYmFzZTsKLSAgIG5zX3RzaSAqbmV4dDsKLSAgIG5zX3RzaSAqbGFzdDsKK3R5cGVkZWYgc3RydWN0IHRzcV9pbmZvIHsKKwl2b2lkICpvcmc7CisgICAgICAgIGRtYV9hZGRyX3QgZG1hOworCW5zX3RzaSAqYmFzZTsKKwluc190c2kgKm5leHQ7CisJbnNfdHNpICpsYXN0OwogfSB0c3FfaW5mbzsKIAotCi10eXBlZGVmIHN0cnVjdCBzY3FfaW5mbwotewotICAgdm9pZCAqb3JnOwotICAgbnNfc2NxZSAqYmFzZTsKLSAgIG5zX3NjcWUgKmxhc3Q7Ci0gICBuc19zY3FlICpuZXh0OwotICAgdm9sYXRpbGUgbnNfc2NxZSAqdGFpbDsJCS8qIE5vdCByZWxhdGVkIHRvIHRoZSBuaWNzdGFyIHJlZ2lzdGVyICovCi0gICB1bnNpZ25lZCBudW1fZW50cmllczsKLSAgIHN0cnVjdCBza19idWZmICoqc2tiOwkJLyogUG9pbnRlciB0byBhbiBhcnJheSBvZiBwb2ludGVycwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBza19idWZmcyB1c2VkIGZvciB0eCAqLwotICAgdTMyIHNjZDsJCQkJLyogU1JBTSBhZGRyZXNzIG9mIHRoZSBjb3JyZXNwb25kaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NEICovCi0gICBpbnQgdGJkX2NvdW50OwkJCS8qIE9ubHkgbWVhbmluZ2Z1bCBvbiB2YXJpYWJsZSByYXRlICovCi0gICB3YWl0X3F1ZXVlX2hlYWRfdCBzY3FmdWxsX3dhaXRxOwotICAgdm9sYXRpbGUgY2hhciBmdWxsOwkJCS8qIFNDUSBmdWxsIGluZGljYXRvciAqLwotICAgc3BpbmxvY2tfdCBsb2NrOwkJCS8qIFNDUSBzcGlubG9jayAqLwordHlwZWRlZiBzdHJ1Y3Qgc2NxX2luZm8geworCXZvaWQgKm9yZzsKKwlkbWFfYWRkcl90IGRtYTsKKwluc19zY3FlICpiYXNlOworCW5zX3NjcWUgKmxhc3Q7CisJbnNfc2NxZSAqbmV4dDsKKwl2b2xhdGlsZSBuc19zY3FlICp0YWlsOwkvKiBOb3QgcmVsYXRlZCB0byB0aGUgbmljc3RhciByZWdpc3RlciAqLworCXVuc2lnbmVkIG51bV9lbnRyaWVzOworCXN0cnVjdCBza19idWZmICoqc2tiOwkvKiBQb2ludGVyIHRvIGFuIGFycmF5IG9mIHBvaW50ZXJzCisJCQkJICAgdG8gdGhlIHNrX2J1ZmZzIHVzZWQgZm9yIHR4ICovCisJdTMyIHNjZDsJCS8qIFNSQU0gYWRkcmVzcyBvZiB0aGUgY29ycmVzcG9uZGluZworCQkJCSAgIFNDRCAqLworCWludCB0YmRfY291bnQ7CQkvKiBPbmx5IG1lYW5pbmdmdWwgb24gdmFyaWFibGUgcmF0ZSAqLworCXdhaXRfcXVldWVfaGVhZF90IHNjcWZ1bGxfd2FpdHE7CisJdm9sYXRpbGUgY2hhciBmdWxsOwkvKiBTQ1EgZnVsbCBpbmRpY2F0b3IgKi8KKwlzcGlubG9ja190IGxvY2s7CS8qIFNDUSBzcGlubG9jayAqLwogfSBzY3FfaW5mbzsKIAotCi0KLXR5cGVkZWYgc3RydWN0IHJzcV9pbmZvCi17Ci0gICB2b2lkICpvcmc7Ci0gICBuc19yc3FlICpiYXNlOwotICAgbnNfcnNxZSAqbmV4dDsKLSAgIG5zX3JzcWUgKmxhc3Q7Cit0eXBlZGVmIHN0cnVjdCByc3FfaW5mbyB7CisJdm9pZCAqb3JnOworICAgICAgICBkbWFfYWRkcl90IGRtYTsKKwluc19yc3FlICpiYXNlOworCW5zX3JzcWUgKm5leHQ7CisJbnNfcnNxZSAqbGFzdDsKIH0gcnNxX2luZm87CiAKLQotdHlwZWRlZiBzdHJ1Y3Qgc2tiX3Bvb2wKLXsKLSAgIHZvbGF0aWxlIGludCBjb3VudDsJCQkvKiBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcXVldWUgKi8KLSAgIHN0cnVjdCBza19idWZmX2hlYWQgcXVldWU7Cit0eXBlZGVmIHN0cnVjdCBza2JfcG9vbCB7CisJdm9sYXRpbGUgaW50IGNvdW50OwkvKiBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcXVldWUgKi8KKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHF1ZXVlOwogfSBza2JfcG9vbDsKIAogLyogTk9URTogZm9yIHNtYWxsIGFuZCBsYXJnZSBidWZmZXIgcG9vbHMsIHRoZSBjb3VudCBpcyBub3QgdXNlZCwgYXMgdGhlCiAgICAgICAgICBhY3R1YWwgdmFsdWUgdXNlZCBmb3IgYnVmZmVyIG1hbmFnZW1lbnQgaXMgdGhlIG9uZSByZWFkIGZyb20gdGhlCiAJIGNhcmQuICovCiAKLQotdHlwZWRlZiBzdHJ1Y3QgdmNfbWFwCi17Ci0gICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdHg6MTsJCQkJLyogVFggdmM/ICovCi0gICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcng6MTsJCQkJLyogUlggdmM/ICovCi0gICBzdHJ1Y3QgYXRtX3ZjYyAqdHhfdmNjLCAqcnhfdmNjOwotICAgc3RydWN0IHNrX2J1ZmYgKnJ4X2lvdjsJCS8qIFJYIGlvdmVjdG9yIHNrYiAqLwotICAgc2NxX2luZm8gKnNjcTsJCQkvKiBUbyBrZWVwIHRyYWNrIG9mIHRoZSBTQ1EgKi8KLSAgIHUzMiBjYnJfc2NkOwkJCQkvKiBTUkFNIGFkZHJlc3Mgb2YgdGhlIGNvcnJlc3BvbmRpbmcKLSAgICAgICAgICAgICAgIAkJCQkgICBTQ0QuIDB4MDAwMDAwMDAgZm9yIFVCUi9WQlIvQUJSICovCi0gICBpbnQgdGJkX2NvdW50OwordHlwZWRlZiBzdHJ1Y3QgdmNfbWFwIHsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdHg6MTsJLyogVFggdmM/ICovCisJdm9sYXRpbGUgdW5zaWduZWQgaW50IHJ4OjE7CS8qIFJYIHZjPyAqLworCXN0cnVjdCBhdG1fdmNjICp0eF92Y2MsICpyeF92Y2M7CisJc3RydWN0IHNrX2J1ZmYgKnJ4X2lvdjsJLyogUlggaW92ZWN0b3Igc2tiICovCisJc2NxX2luZm8gKnNjcTsJCS8qIFRvIGtlZXAgdHJhY2sgb2YgdGhlIFNDUSAqLworCXUzMiBjYnJfc2NkOwkJLyogU1JBTSBhZGRyZXNzIG9mIHRoZSBjb3JyZXNwb25kaW5nCisJCQkJICAgU0NELiAweDAwMDAwMDAwIGZvciBVQlIvVkJSL0FCUiAqLworCWludCB0YmRfY291bnQ7CiB9IHZjX21hcDsKIAotCi1zdHJ1Y3QgbnNfc2tiX2RhdGEKLXsKLQlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOwotCWludCBpb3ZjbnQ7Ci19OwotCi0jZGVmaW5lIE5TX1NLQihza2IpICgoKHN0cnVjdCBuc19za2JfZGF0YSAqKSAoc2tiKS0+Y2IpKQotCi0KLXR5cGVkZWYgc3RydWN0IG5zX2RldgotewotICAgaW50IGluZGV4OwkJCQkvKiBDYXJkIElEIHRvIHRoZSBkZXZpY2UgZHJpdmVyICovCi0gICBpbnQgc3JhbV9zaXplOwkJCS8qIEluIGsgeCAzMmJpdCB3b3Jkcy4gMzIgb3IgMTI4ICovCi0gICB2b2lkIF9faW9tZW0gKm1lbWJhc2U7CQkvKiBDYXJkJ3MgbWVtb3J5IGJhc2UgYWRkcmVzcyAqLwotICAgdW5zaWduZWQgbG9uZyBtYXhfcGNyOwotICAgaW50IHJjdF9zaXplOwkJCS8qIE51bWJlciBvZiBlbnRyaWVzICovCi0gICBpbnQgdnBpYml0czsKLSAgIGludCB2Y2liaXRzOwotICAgc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKLSAgIHN0cnVjdCBhdG1fZGV2ICphdG1kZXY7Ci0gICB0c3FfaW5mbyB0c3E7Ci0gICByc3FfaW5mbyByc3E7Ci0gICBzY3FfaW5mbyAqc2NxMCwgKnNjcTEsICpzY3EyOwkvKiBWQlIgU0NRcyAqLwotICAgc2tiX3Bvb2wgc2Jwb29sOwkJCS8qIFNtYWxsIGJ1ZmZlcnMgKi8KLSAgIHNrYl9wb29sIGxicG9vbDsJCQkvKiBMYXJnZSBidWZmZXJzICovCi0gICBza2JfcG9vbCBoYnBvb2w7CQkJLyogUHJlLWFsbG9jYXRlZCBodWdlIGJ1ZmZlcnMgKi8KLSAgIHNrYl9wb29sIGlvdnBvb2w7CQkJLyogaW92ZWN0b3IgYnVmZmVycyAqLwotICAgdm9sYXRpbGUgaW50IGVmYmllOwkJCS8qIEVtcHR5IGZyZWUgYnVmLiBxdWV1ZSBpbnQuIGVuYWJsZWQgKi8KLSAgIHZvbGF0aWxlIHUzMiB0c3RfYWRkcjsJCS8qIFNSQU0gYWRkcmVzcyBvZiB0aGUgVFNUIGluIHVzZSAqLwotICAgdm9sYXRpbGUgaW50IHRzdF9mcmVlX2VudHJpZXM7Ci0gICB2Y19tYXAgdmNtYXBbTlNfTUFYX1JDVFNJWkVdOwotICAgdmNfbWFwICp0c3RlMnZjW05TX1RTVF9OVU1fRU5UUklFU107Ci0gICB2Y19tYXAgKnNjZDJ2Y1tOU19GUlNDRF9OVU1dOwotICAgYnVmX25yIHNibnI7Ci0gICBidWZfbnIgbGJucjsKLSAgIGJ1Zl9uciBoYm5yOwotICAgYnVmX25yIGlvdm5yOwotICAgaW50IHNiZnFjOwotICAgaW50IGxiZnFjOwotICAgdTMyIHNtX2hhbmRsZTsKLSAgIHUzMiBzbV9hZGRyOwotICAgdTMyIGxnX2hhbmRsZTsKLSAgIHUzMiBsZ19hZGRyOwotICAgc3RydWN0IHNrX2J1ZmYgKnJjYnVmOwkJLyogQ3VycmVudCByYXcgY2VsbCBidWZmZXIgKi8KLSAgIHUzMiByYXdjaDsJCQkJLyogUmF3IGNlbGwgcXVldWUgaGVhZCAqLwotICAgdW5zaWduZWQgaW50Y250OwkJCS8qIEludGVycnVwdCBjb3VudGVyICovCi0gICBzcGlubG9ja190IGludF9sb2NrOwkJLyogSW50ZXJydXB0IGxvY2sgKi8KLSAgIHNwaW5sb2NrX3QgcmVzX2xvY2s7CQkvKiBDYXJkIHJlc291cmNlIGxvY2sgKi8KK3R5cGVkZWYgc3RydWN0IG5zX2RldiB7CisJaW50IGluZGV4OwkJLyogQ2FyZCBJRCB0byB0aGUgZGV2aWNlIGRyaXZlciAqLworCWludCBzcmFtX3NpemU7CQkvKiBJbiBrIHggMzJiaXQgd29yZHMuIDMyIG9yIDEyOCAqLworCXZvaWQgX19pb21lbSAqbWVtYmFzZTsJLyogQ2FyZCdzIG1lbW9yeSBiYXNlIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nIG1heF9wY3I7CisJaW50IHJjdF9zaXplOwkJLyogTnVtYmVyIG9mIGVudHJpZXMgKi8KKwlpbnQgdnBpYml0czsKKwlpbnQgdmNpYml0czsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCXN0cnVjdCBpZHIgaWRyOworCXN0cnVjdCBhdG1fZGV2ICphdG1kZXY7CisJdHNxX2luZm8gdHNxOworCXJzcV9pbmZvIHJzcTsKKwlzY3FfaW5mbyAqc2NxMCwgKnNjcTEsICpzY3EyOwkvKiBWQlIgU0NRcyAqLworCXNrYl9wb29sIHNicG9vbDsJLyogU21hbGwgYnVmZmVycyAqLworCXNrYl9wb29sIGxicG9vbDsJLyogTGFyZ2UgYnVmZmVycyAqLworCXNrYl9wb29sIGhicG9vbDsJLyogUHJlLWFsbG9jYXRlZCBodWdlIGJ1ZmZlcnMgKi8KKwlza2JfcG9vbCBpb3Zwb29sOwkvKiBpb3ZlY3RvciBidWZmZXJzICovCisJdm9sYXRpbGUgaW50IGVmYmllOwkvKiBFbXB0eSBmcmVlIGJ1Zi4gcXVldWUgaW50LiBlbmFibGVkICovCisJdm9sYXRpbGUgdTMyIHRzdF9hZGRyOwkvKiBTUkFNIGFkZHJlc3Mgb2YgdGhlIFRTVCBpbiB1c2UgKi8KKwl2b2xhdGlsZSBpbnQgdHN0X2ZyZWVfZW50cmllczsKKwl2Y19tYXAgdmNtYXBbTlNfTUFYX1JDVFNJWkVdOworCXZjX21hcCAqdHN0ZTJ2Y1tOU19UU1RfTlVNX0VOVFJJRVNdOworCXZjX21hcCAqc2NkMnZjW05TX0ZSU0NEX05VTV07CisJYnVmX25yIHNibnI7CisJYnVmX25yIGxibnI7CisJYnVmX25yIGhibnI7CisJYnVmX25yIGlvdm5yOworCWludCBzYmZxYzsKKwlpbnQgbGJmcWM7CisJc3RydWN0IHNrX2J1ZmYgKnNtX2hhbmRsZTsKKwl1MzIgc21fYWRkcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbGdfaGFuZGxlOworCXUzMiBsZ19hZGRyOworCXN0cnVjdCBza19idWZmICpyY2J1ZjsJLyogQ3VycmVudCByYXcgY2VsbCBidWZmZXIgKi8KKyAgICAgICAgc3RydWN0IG5zX3JjcWUgKnJhd2NlbGw7CisJdTMyIHJhd2NoOwkJLyogUmF3IGNlbGwgcXVldWUgaGVhZCAqLworCXVuc2lnbmVkIGludGNudDsJLyogSW50ZXJydXB0IGNvdW50ZXIgKi8KKwlzcGlubG9ja190IGludF9sb2NrOwkvKiBJbnRlcnJ1cHQgbG9jayAqLworCXNwaW5sb2NrX3QgcmVzX2xvY2s7CS8qIENhcmQgcmVzb3VyY2UgbG9jayAqLwogfSBuc19kZXY7CiAKLQogICAgLyogTk9URTogRWFjaCB0c3RlMnZjIGVudHJ5IHJlbGF0ZXMgYSBnaXZlbiBUU1QgZW50cnkgdG8gdGhlIGNvcnJlc3BvbmRpbmcKLSAgICAgICAgICAgIENCUiB2Yy4gSWYgdGhlIGVudHJ5IGlzIG5vdCBhbGxvY2F0ZWQsIGl0IG11c3QgYmUgTlVMTC4KLQkgICAgCi0JICAgIFRoZXJlIGFyZSB0d28gVFNUcyBzbyB0aGUgZHJpdmVyIGNhbiBtb2RpZnkgdGhlbSBvbiB0aGUgZmx5Ci0JICAgIHdpdGhvdXQgc3RvcHBpbmcgdGhlIHRyYW5zbWlzc2lvbi4KLQkgICAgCi0JICAgIHNjZDJ2YyBhbGxvd3MgdXMgdG8gZmluZCBvdXQgdW51c2VkIGZpeGVkIHJhdGUgU0NEcywgYmVjYXVzZQotCSAgICB0aGV5IG11c3QgaGF2ZSBhIE5VTEwgcG9pbnRlciBoZXJlLiAqLworICAgICAgQ0JSIHZjLiBJZiB0aGUgZW50cnkgaXMgbm90IGFsbG9jYXRlZCwgaXQgbXVzdCBiZSBOVUxMLgogCisgICAgICBUaGVyZSBhcmUgdHdvIFRTVHMgc28gdGhlIGRyaXZlciBjYW4gbW9kaWZ5IHRoZW0gb24gdGhlIGZseQorICAgICAgd2l0aG91dCBzdG9wcGluZyB0aGUgdHJhbnNtaXNzaW9uLgorCisgICAgICBzY2QydmMgYWxsb3dzIHVzIHRvIGZpbmQgb3V0IHVudXNlZCBmaXhlZCByYXRlIFNDRHMsIGJlY2F1c2UKKyAgICAgIHRoZXkgbXVzdCBoYXZlIGEgTlVMTCBwb2ludGVyIGhlcmUuICovCiAKICNlbmRpZiAvKiBfTElOVVhfTklDU1RBUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vbmljc3Rhcm1hYy5jIGIvZHJpdmVycy9hdG0vbmljc3Rhcm1hYy5jCmluZGV4IDg0MmUyNmMuLmY1OTQ1MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL25pY3N0YXJtYWMuYworKysgYi9kcml2ZXJzL2F0bS9uaWNzdGFybWFjLmMKQEAgLTEzLDE1ICsxMywxNSBAQAogCiAjZGVmaW5lIENZQ0xFX0RFTEFZIDUKIAotLyogVGhpcyB3YXMgdGhlIG9yaWdpbmFsIGRlZmluaXRpb24KKy8qCisgICBUaGlzIHdhcyB0aGUgb3JpZ2luYWwgZGVmaW5pdGlvbgogI2RlZmluZSBvc3BfTWljcm9EZWxheShtaWNyb3NlYykgXAogICAgIGRvIHsgaW50IF9pID0gNCptaWNyb3NlYzsgd2hpbGUgKC0tX2kgPiAwKSB7IF9fU0xPV19ET1dOX0lPOyB9fSB3aGlsZSAoMCkKICovCiAjZGVmaW5lIG9zcF9NaWNyb0RlbGF5KG1pY3Jvc2VjKSB7dW5zaWduZWQgbG9uZyB1c2Vjb25kcyA9IChtaWNyb3NlYyk7IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZGVsYXkoKHVzZWNvbmRzKSk7fQotCi0KLS8qIFRoZSBmb2xsb3dpbmcgdGFibGVzIHJlcHJlc2VudCB0aGUgdGltaW5nIGRpYWdyYW1zIGZvdW5kIGluCisvKgorICogVGhlIGZvbGxvd2luZyB0YWJsZXMgcmVwcmVzZW50IHRoZSB0aW1pbmcgZGlhZ3JhbXMgZm91bmQgaW4KICAqIHRoZSBEYXRhIFNoZWV0IGZvciB0aGUgWGljb3IgWDI1MDIwIEVFUHJvbS4gIFRoZSAjZGVmaW5lcyBiZWxvdwogICogcmVwcmVzZW50IHRoZSBiaXRzIGluIHRoZSBOSUNTdEFSJ3MgR2VuZXJhbCBQdXJwb3NlIHJlZ2lzdGVyCiAgKiB0aGF0IG11c3QgYmUgdG9nZ2xlZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgYWN0aW9ucyBvbiB0aGUgRUVQcm9tCkBAIC0zMSw4NiArMzEsODAgQEAKIC8qIFdyaXRlIERhdGEgVG8gRUVQcm9tIGZyb20gU0kgbGluZSBvbiByaXNpbmcgZWRnZSBvZiBDTEsgKi8KIC8qIFJlYWQgRGF0YSBGcm9tIEVFUHJvbSBvbiBmYWxsaW5nIGVkZ2Ugb2YgQ0xLICovCiAKLSNkZWZpbmUgQ1NfSElHSAkJMHgwMDAyCQkvKiBDaGlwIHNlbGVjdCBoaWdoICovCi0jZGVmaW5lIENTX0xPVwkJMHgwMDAwCQkvKiBDaGlwIHNlbGVjdCBsb3cgKGFjdGl2ZSBsb3cpKi8KLSNkZWZpbmUgQ0xLX0hJR0gJMHgwMDA0CQkvKiBDbG9jayBoaWdoICovCi0jZGVmaW5lIENMS19MT1cJCTB4MDAwMAkJLyogQ2xvY2sgbG93ICAqLwotI2RlZmluZSBTSV9ISUdICQkweDAwMDEJCS8qIFNlcmlhbCBpbnB1dCBkYXRhIGhpZ2ggKi8KLSNkZWZpbmUgU0lfTE9XCQkweDAwMDAJCS8qIFNlcmlhbCBpbnB1dCBkYXRhIGxvdyAqLworI2RlZmluZSBDU19ISUdICQkweDAwMDIJLyogQ2hpcCBzZWxlY3QgaGlnaCAqLworI2RlZmluZSBDU19MT1cJCTB4MDAwMAkvKiBDaGlwIHNlbGVjdCBsb3cgKGFjdGl2ZSBsb3cpICovCisjZGVmaW5lIENMS19ISUdICTB4MDAwNAkvKiBDbG9jayBoaWdoICovCisjZGVmaW5lIENMS19MT1cJCTB4MDAwMAkvKiBDbG9jayBsb3cgICovCisjZGVmaW5lIFNJX0hJR0gJCTB4MDAwMQkvKiBTZXJpYWwgaW5wdXQgZGF0YSBoaWdoICovCisjZGVmaW5lIFNJX0xPVwkJMHgwMDAwCS8qIFNlcmlhbCBpbnB1dCBkYXRhIGxvdyAqLwogCiAvKiBSZWFkIFN0YXR1cyBSZWdpc3RlciA9IDAwMDAgMDEwMWIgKi8KICNpZiAwCi1zdGF0aWMgdV9pbnQzMl90IHJkc3J0YWJbXSA9Ci17Ci0gICAgQ1NfSElHSCB8IENMS19ISUdILCAKLSAgICBDU19MT1cgfCBDTEtfTE9XLCAKLSAgICBDTEtfSElHSCwgICAgICAgICAgICAgLyogMCAqLwotICAgIENMS19MT1csIAotICAgIENMS19ISUdILCAgICAgICAgICAgICAvKiAwICovCi0gICAgQ0xLX0xPVywgCi0gICAgQ0xLX0hJR0gsICAgICAgICAgICAgIC8qIDAgKi8KLSAgICBDTEtfTE9XLAotICAgIENMS19ISUdILCAgICAgICAgICAgICAvKiAwICovCi0gICAgQ0xLX0xPVywgCi0gICAgQ0xLX0hJR0gsICAgICAgICAgICAgIC8qIDAgKi8KLSAgICBDTEtfTE9XIHwgU0lfSElHSCwgCi0gICAgQ0xLX0hJR0ggfCBTSV9ISUdILCAgIC8qIDEgKi8KLSAgICBDTEtfTE9XIHwgU0lfTE9XLCAKLSAgICBDTEtfSElHSCwgICAgICAgICAgICAgLyogMCAqLwotICAgIENMS19MT1cgfCBTSV9ISUdILCAKLSAgICBDTEtfSElHSCB8IFNJX0hJR0ggICAvKiAxICovCitzdGF0aWMgdV9pbnQzMl90IHJkc3J0YWJbXSA9IHsKKwlDU19ISUdIIHwgQ0xLX0hJR0gsCisJQ1NfTE9XIHwgQ0xLX0xPVywKKwlDTEtfSElHSCwJCS8qIDAgKi8KKwlDTEtfTE9XLAorCUNMS19ISUdILAkJLyogMCAqLworCUNMS19MT1csCisJQ0xLX0hJR0gsCQkvKiAwICovCisJQ0xLX0xPVywKKwlDTEtfSElHSCwJCS8qIDAgKi8KKwlDTEtfTE9XLAorCUNMS19ISUdILAkJLyogMCAqLworCUNMS19MT1cgfCBTSV9ISUdILAorCUNMS19ISUdIIHwgU0lfSElHSCwJLyogMSAqLworCUNMS19MT1cgfCBTSV9MT1csCisJQ0xLX0hJR0gsCQkvKiAwICovCisJQ0xLX0xPVyB8IFNJX0hJR0gsCisJQ0xLX0hJR0ggfCBTSV9ISUdICS8qIDEgKi8KIH07Ci0jZW5kaWYgIC8qICAwICAqLwotCisjZW5kaWYgLyogIDAgICovCiAKIC8qIFJlYWQgZnJvbSBFRVBST00gPSAwMDAwIDAwMTFiICovCi1zdGF0aWMgdV9pbnQzMl90IHJlYWR0YWJbXSA9Ci17Ci0gICAgLyoKLSAgICBDU19ISUdIIHwgQ0xLX0hJR0gsIAotICAgICovCi0gICAgQ1NfTE9XIHwgQ0xLX0xPVywgCi0gICAgQ0xLX0hJR0gsICAgICAgICAgICAgIC8qIDAgKi8KLSAgICBDTEtfTE9XLCAKLSAgICBDTEtfSElHSCwgICAgICAgICAgICAgLyogMCAqLwotICAgIENMS19MT1csIAotICAgIENMS19ISUdILCAgICAgICAgICAgICAvKiAwICovCi0gICAgQ0xLX0xPVywKLSAgICBDTEtfSElHSCwgICAgICAgICAgICAgLyogMCAqLwotICAgIENMS19MT1csIAotICAgIENMS19ISUdILCAgICAgICAgICAgICAvKiAwICovCi0gICAgQ0xLX0xPVywgCi0gICAgQ0xLX0hJR0gsICAgICAgICAgICAgIC8qIDAgKi8KLSAgICBDTEtfTE9XIHwgU0lfSElHSCwgCi0gICAgQ0xLX0hJR0ggfCBTSV9ISUdILCAgIC8qIDEgKi8KLSAgICBDTEtfTE9XIHwgU0lfSElHSCwgCi0gICAgQ0xLX0hJR0ggfCBTSV9ISUdIICAgIC8qIDEgKi8KK3N0YXRpYyB1X2ludDMyX3QgcmVhZHRhYltdID0geworCS8qCisJICAgQ1NfSElHSCB8IENMS19ISUdILAorCSAqLworCUNTX0xPVyB8IENMS19MT1csCisJQ0xLX0hJR0gsCQkvKiAwICovCisJQ0xLX0xPVywKKwlDTEtfSElHSCwJCS8qIDAgKi8KKwlDTEtfTE9XLAorCUNMS19ISUdILAkJLyogMCAqLworCUNMS19MT1csCisJQ0xLX0hJR0gsCQkvKiAwICovCisJQ0xLX0xPVywKKwlDTEtfSElHSCwJCS8qIDAgKi8KKwlDTEtfTE9XLAorCUNMS19ISUdILAkJLyogMCAqLworCUNMS19MT1cgfCBTSV9ISUdILAorCUNMS19ISUdIIHwgU0lfSElHSCwJLyogMSAqLworCUNMS19MT1cgfCBTSV9ISUdILAorCUNMS19ISUdIIHwgU0lfSElHSAkvKiAxICovCiB9OwogCi0KIC8qIENsb2NrIHRvIHJlYWQgZnJvbS93cml0ZSB0byB0aGUgZWVwcm9tICovCi1zdGF0aWMgdV9pbnQzMl90IGNsb2NrdGFiW10gPQotewkKLSAgICBDTEtfTE9XLAotICAgIENMS19ISUdILAotICAgIENMS19MT1csIAotICAgIENMS19ISUdILAotICAgIENMS19MT1csCi0gICAgQ0xLX0hJR0gsCi0gICAgQ0xLX0xPVywgCi0gICAgQ0xLX0hJR0gsCi0gICAgQ0xLX0xPVywgCi0gICAgQ0xLX0hJR0gsCi0gICAgQ0xLX0xPVywgCi0gICAgQ0xLX0hJR0gsIAotICAgIENMS19MT1csIAotICAgIENMS19ISUdILAotICAgIENMS19MT1csIAotICAgIENMS19ISUdILAotICAgIENMS19MT1cgCitzdGF0aWMgdV9pbnQzMl90IGNsb2NrdGFiW10gPSB7CisJQ0xLX0xPVywKKwlDTEtfSElHSCwKKwlDTEtfTE9XLAorCUNMS19ISUdILAorCUNMS19MT1csCisJQ0xLX0hJR0gsCisJQ0xLX0xPVywKKwlDTEtfSElHSCwKKwlDTEtfTE9XLAorCUNMS19ISUdILAorCUNMS19MT1csCisJQ0xLX0hJR0gsCisJQ0xLX0xPVywKKwlDTEtfSElHSCwKKwlDTEtfTE9XLAorCUNMS19ISUdILAorCUNMS19MT1cKIH07CiAKLQogI2RlZmluZSBOSUNTVEFSX1JFR19XUklURShicywgcmVnLCB2YWwpIFwKIAl3aGlsZSAoIHJlYWRsKGJzICsgU1RBVCkgJiAweDAyMDAgKSA7IFwKIAl3cml0ZWwoKHZhbCksKGJhc2UpKyhyZWcpKQpAQCAtMTI0LDE1MyArMTE4LDEzMSBAQAogICogcmVnaXN0ZXIuICAKICAqLwogI2lmIDAKLXVfaW50MzJfdAotbmljc3Rhcl9yZWFkX2Vwcm9tX3N0YXR1cyggdmlydF9hZGRyX3QgYmFzZSApCit1X2ludDMyX3Qgbmljc3Rhcl9yZWFkX2Vwcm9tX3N0YXR1cyh2aXJ0X2FkZHJfdCBiYXNlKQogewotICAgdV9pbnQzMl90CXZhbDsKLSAgIHVfaW50MzJfdAlyYnl0ZTsKLSAgIGludDMyX3QJaSwgajsKKwl1X2ludDMyX3QgdmFsOworCXVfaW50MzJfdCByYnl0ZTsKKwlpbnQzMl90IGksIGo7CiAKLSAgIC8qIFNlbmQgcmVhZCBpbnN0cnVjdGlvbiAqLwotICAgdmFsID0gTklDU1RBUl9SRUdfUkVBRCggYmFzZSwgTklDU1RBUl9SRUdfR0VORVJBTF9QVVJQT1NFICkgJiAweEZGRkZGRkYwOworCS8qIFNlbmQgcmVhZCBpbnN0cnVjdGlvbiAqLworCXZhbCA9IE5JQ1NUQVJfUkVHX1JFQUQoYmFzZSwgTklDU1RBUl9SRUdfR0VORVJBTF9QVVJQT1NFKSAmIDB4RkZGRkZGRjA7CiAKLSAgIGZvciAoaT0wOyBpPEFSUkFZX1NJWkUocmRzcnRhYik7IGkrKykKLSAgIHsKLQlOSUNTVEFSX1JFR19XUklURSggYmFzZSwgTklDU1RBUl9SRUdfR0VORVJBTF9QVVJQT1NFLAotCQkodmFsIHwgcmRzcnRhYltpXSkgKTsKLSAgICAgICAgb3NwX01pY3JvRGVsYXkoIENZQ0xFX0RFTEFZICk7Ci0gICB9CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmRzcnRhYik7IGkrKykgeworCQlOSUNTVEFSX1JFR19XUklURShiYXNlLCBOSUNTVEFSX1JFR19HRU5FUkFMX1BVUlBPU0UsCisJCQkJICAodmFsIHwgcmRzcnRhYltpXSkpOworCQlvc3BfTWljcm9EZWxheShDWUNMRV9ERUxBWSk7CisJfQogCi0gICAvKiBEb25lIHNlbmRpbmcgaW5zdHJ1Y3Rpb24gLSBub3cgcHVsbCBkYXRhIG9mZiBvZiBiaXQgMTYsIE1TQiBmaXJzdCAqLwotICAgLyogRGF0YSBjbG9ja2VkIG91dCBvZiBlZXByb20gb24gZmFsbGluZyBlZGdlIG9mIGNsb2NrICovCisJLyogRG9uZSBzZW5kaW5nIGluc3RydWN0aW9uIC0gbm93IHB1bGwgZGF0YSBvZmYgb2YgYml0IDE2LCBNU0IgZmlyc3QgKi8KKwkvKiBEYXRhIGNsb2NrZWQgb3V0IG9mIGVlcHJvbSBvbiBmYWxsaW5nIGVkZ2Ugb2YgY2xvY2sgKi8KIAotICAgcmJ5dGUgPSAwOwotICAgZm9yIChpPTcsIGo9MDsgaT49MDsgaS0tKQotICAgewotCU5JQ1NUQVJfUkVHX1dSSVRFKCBiYXNlLCBOSUNTVEFSX1JFR19HRU5FUkFMX1BVUlBPU0UsCi0JCSh2YWwgfCBjbG9ja3RhYltqKytdKSApOwotICAgICAgICByYnl0ZSB8PSAoKChOSUNTVEFSX1JFR19SRUFEKCBiYXNlLCBOSUNTVEFSX1JFR19HRU5FUkFMX1BVUlBPU0UpCi0JCQkmIDB4MDAwMTAwMDApID4+IDE2KSA8PCBpKTsKLQlOSUNTVEFSX1JFR19XUklURSggYmFzZSwgTklDU1RBUl9SRUdfR0VORVJBTF9QVVJQT1NFLAotCQkodmFsIHwgY2xvY2t0YWJbaisrXSkgKTsKLSAgICAgICAgb3NwX01pY3JvRGVsYXkoIENZQ0xFX0RFTEFZICk7Ci0gICB9Ci0gICBOSUNTVEFSX1JFR19XUklURSggYmFzZSwgTklDU1RBUl9SRUdfR0VORVJBTF9QVVJQT1NFLCAyICk7Ci0gICBvc3BfTWljcm9EZWxheSggQ1lDTEVfREVMQVkgKTsKLSAgIHJldHVybiByYnl0ZTsKKwlyYnl0ZSA9IDA7CisJZm9yIChpID0gNywgaiA9IDA7IGkgPj0gMDsgaS0tKSB7CisJCU5JQ1NUQVJfUkVHX1dSSVRFKGJhc2UsIE5JQ1NUQVJfUkVHX0dFTkVSQUxfUFVSUE9TRSwKKwkJCQkgICh2YWwgfCBjbG9ja3RhYltqKytdKSk7CisJCXJieXRlIHw9ICgoKE5JQ1NUQVJfUkVHX1JFQUQoYmFzZSwgTklDU1RBUl9SRUdfR0VORVJBTF9QVVJQT1NFKQorCQkJICAgICYgMHgwMDAxMDAwMCkgPj4gMTYpIDw8IGkpOworCQlOSUNTVEFSX1JFR19XUklURShiYXNlLCBOSUNTVEFSX1JFR19HRU5FUkFMX1BVUlBPU0UsCisJCQkJICAodmFsIHwgY2xvY2t0YWJbaisrXSkpOworCQlvc3BfTWljcm9EZWxheShDWUNMRV9ERUxBWSk7CisJfQorCU5JQ1NUQVJfUkVHX1dSSVRFKGJhc2UsIE5JQ1NUQVJfUkVHX0dFTkVSQUxfUFVSUE9TRSwgMik7CisJb3NwX01pY3JvRGVsYXkoQ1lDTEVfREVMQVkpOworCXJldHVybiByYnl0ZTsKIH0KLSNlbmRpZiAgLyogIDAgICovCi0KKyNlbmRpZiAvKiAgMCAgKi8KIAogLyoKICAqIFRoaXMgcm91dGluZSB3aWxsIGNsb2NrIHRoZSBSZWFkX2RhdGEgZnVuY3Rpb24gaW50byB0aGUgWDI1MjAKICAqIGVlcHJvbSwgZm9sbG93ZWQgYnkgdGhlIGFkZHJlc3MgdG8gcmVhZCBmcm9tLCB0aHJvdWdoIHRoZSBOaWNTVGFSJ3MgR2VuZXJhbAogICogUHVycG9zZSByZWdpc3Rlci4gIAogICovCi0gCi1zdGF0aWMgdV9pbnQ4X3QgCi1yZWFkX2Vwcm9tX2J5dGUodmlydF9hZGRyX3QgYmFzZSwgdV9pbnQ4X3Qgb2Zmc2V0KQorCitzdGF0aWMgdV9pbnQ4X3QgcmVhZF9lcHJvbV9ieXRlKHZpcnRfYWRkcl90IGJhc2UsIHVfaW50OF90IG9mZnNldCkKIHsKLSAgIHVfaW50MzJfdCB2YWwgPSAwOwotICAgaW50IGksaj0wOwotICAgdV9pbnQ4X3QgdGVtcHJlYWQgPSAwOworCXVfaW50MzJfdCB2YWwgPSAwOworCWludCBpLCBqID0gMDsKKwl1X2ludDhfdCB0ZW1wcmVhZCA9IDA7CiAKLSAgIHZhbCA9IE5JQ1NUQVJfUkVHX1JFQUQoIGJhc2UsIE5JQ1NUQVJfUkVHX0dFTkVSQUxfUFVSUE9TRSApICYgMHhGRkZGRkZGMDsKKwl2YWwgPSBOSUNTVEFSX1JFR19SRUFEKGJhc2UsIE5JQ1NUQVJfUkVHX0dFTkVSQUxfUFVSUE9TRSkgJiAweEZGRkZGRkYwOwogCi0gICAvKiBTZW5kIFJFQUQgaW5zdHJ1Y3Rpb24gKi8KLSAgIGZvciAoaT0wOyBpPEFSUkFZX1NJWkUocmVhZHRhYik7IGkrKykKLSAgIHsKLQlOSUNTVEFSX1JFR19XUklURSggYmFzZSwgTklDU1RBUl9SRUdfR0VORVJBTF9QVVJQT1NFLAotCQkodmFsIHwgcmVhZHRhYltpXSkgKTsKLSAgICAgICAgb3NwX01pY3JvRGVsYXkoIENZQ0xFX0RFTEFZICk7Ci0gICB9CisJLyogU2VuZCBSRUFEIGluc3RydWN0aW9uICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVhZHRhYik7IGkrKykgeworCQlOSUNTVEFSX1JFR19XUklURShiYXNlLCBOSUNTVEFSX1JFR19HRU5FUkFMX1BVUlBPU0UsCisJCQkJICAodmFsIHwgcmVhZHRhYltpXSkpOworCQlvc3BfTWljcm9EZWxheShDWUNMRV9ERUxBWSk7CisJfQogCi0gICAvKiBOZXh0LCB3ZSBuZWVkIHRvIHNlbmQgdGhlIGJ5dGUgYWRkcmVzcyB0byByZWFkIGZyb20gKi8KLSAgIGZvciAoaT03OyBpPj0wOyBpLS0pCi0gICB7Ci0gICAgICBOSUNTVEFSX1JFR19XUklURSggYmFzZSwgTklDU1RBUl9SRUdfR0VORVJBTF9QVVJQT1NFLAotICAgICAgCQkodmFsIHwgY2xvY2t0YWJbaisrXSB8ICgob2Zmc2V0ID4+IGkpICYgMSkgKSApOwotICAgICAgb3NwX01pY3JvRGVsYXkoQ1lDTEVfREVMQVkpOwotICAgICAgTklDU1RBUl9SRUdfV1JJVEUoIGJhc2UsIE5JQ1NUQVJfUkVHX0dFTkVSQUxfUFVSUE9TRSwKLSAgICAgIAkJKHZhbCB8IGNsb2NrdGFiW2orK10gfCAoKG9mZnNldCA+PiBpKSAmIDEpICkgKTsKLSAgICAgIG9zcF9NaWNyb0RlbGF5KCBDWUNMRV9ERUxBWSApOwotICAgfQorCS8qIE5leHQsIHdlIG5lZWQgdG8gc2VuZCB0aGUgYnl0ZSBhZGRyZXNzIHRvIHJlYWQgZnJvbSAqLworCWZvciAoaSA9IDc7IGkgPj0gMDsgaS0tKSB7CisJCU5JQ1NUQVJfUkVHX1dSSVRFKGJhc2UsIE5JQ1NUQVJfUkVHX0dFTkVSQUxfUFVSUE9TRSwKKwkJCQkgICh2YWwgfCBjbG9ja3RhYltqKytdIHwgKChvZmZzZXQgPj4gaSkgJiAxKSkpOworCQlvc3BfTWljcm9EZWxheShDWUNMRV9ERUxBWSk7CisJCU5JQ1NUQVJfUkVHX1dSSVRFKGJhc2UsIE5JQ1NUQVJfUkVHX0dFTkVSQUxfUFVSUE9TRSwKKwkJCQkgICh2YWwgfCBjbG9ja3RhYltqKytdIHwgKChvZmZzZXQgPj4gaSkgJiAxKSkpOworCQlvc3BfTWljcm9EZWxheShDWUNMRV9ERUxBWSk7CisJfQogCi0gICBqID0gMDsKLSAgIAotICAgLyogTm93LCB3ZSBjYW4gcmVhZCBkYXRhIGZyb20gdGhlIGVlcHJvbSBieSBjbG9ja2luZyBpdCBpbiAqLwotICAgZm9yIChpPTc7IGk+PTA7IGktLSkKLSAgIHsKLSAgICAgIE5JQ1NUQVJfUkVHX1dSSVRFKCBiYXNlLCBOSUNTVEFSX1JFR19HRU5FUkFMX1BVUlBPU0UsCi0gICAgICAJCSh2YWwgfCBjbG9ja3RhYltqKytdKSApOwotICAgICAgb3NwX01pY3JvRGVsYXkoIENZQ0xFX0RFTEFZICk7Ci0gICAgICB0ZW1wcmVhZCB8PSAoKChOSUNTVEFSX1JFR19SRUFEKCBiYXNlLCBOSUNTVEFSX1JFR19HRU5FUkFMX1BVUlBPU0UgKQotCQkmIDB4MDAwMTAwMDApID4+IDE2KSA8PCBpKTsKLSAgICAgIE5JQ1NUQVJfUkVHX1dSSVRFKCBiYXNlLCBOSUNTVEFSX1JFR19HRU5FUkFMX1BVUlBPU0UsCi0gICAgICAJCSh2YWwgfCBjbG9ja3RhYltqKytdKSApOwotICAgICAgb3NwX01pY3JvRGVsYXkoIENZQ0xFX0RFTEFZICk7Ci0gICB9CisJaiA9IDA7CiAKLSAgIE5JQ1NUQVJfUkVHX1dSSVRFKCBiYXNlLCBOSUNTVEFSX1JFR19HRU5FUkFMX1BVUlBPU0UsIDIgKTsKLSAgIG9zcF9NaWNyb0RlbGF5KCBDWUNMRV9ERUxBWSApOwotICAgcmV0dXJuIHRlbXByZWFkOworCS8qIE5vdywgd2UgY2FuIHJlYWQgZGF0YSBmcm9tIHRoZSBlZXByb20gYnkgY2xvY2tpbmcgaXQgaW4gKi8KKwlmb3IgKGkgPSA3OyBpID49IDA7IGktLSkgeworCQlOSUNTVEFSX1JFR19XUklURShiYXNlLCBOSUNTVEFSX1JFR19HRU5FUkFMX1BVUlBPU0UsCisJCQkJICAodmFsIHwgY2xvY2t0YWJbaisrXSkpOworCQlvc3BfTWljcm9EZWxheShDWUNMRV9ERUxBWSk7CisJCXRlbXByZWFkIHw9CisJCSAgICAoKChOSUNTVEFSX1JFR19SRUFEKGJhc2UsIE5JQ1NUQVJfUkVHX0dFTkVSQUxfUFVSUE9TRSkKKwkJICAgICAgICYgMHgwMDAxMDAwMCkgPj4gMTYpIDw8IGkpOworCQlOSUNTVEFSX1JFR19XUklURShiYXNlLCBOSUNTVEFSX1JFR19HRU5FUkFMX1BVUlBPU0UsCisJCQkJICAodmFsIHwgY2xvY2t0YWJbaisrXSkpOworCQlvc3BfTWljcm9EZWxheShDWUNMRV9ERUxBWSk7CisJfQorCisJTklDU1RBUl9SRUdfV1JJVEUoYmFzZSwgTklDU1RBUl9SRUdfR0VORVJBTF9QVVJQT1NFLCAyKTsKKwlvc3BfTWljcm9EZWxheShDWUNMRV9ERUxBWSk7CisJcmV0dXJuIHRlbXByZWFkOwogfQogCi0KLXN0YXRpYyB2b2lkCi1uaWNzdGFyX2luaXRfZXByb20oIHZpcnRfYWRkcl90IGJhc2UgKQorc3RhdGljIHZvaWQgbmljc3Rhcl9pbml0X2Vwcm9tKHZpcnRfYWRkcl90IGJhc2UpCiB7Ci0gICAgdV9pbnQzMl90IHZhbDsKKwl1X2ludDMyX3QgdmFsOwogCi0gICAgLyoKLSAgICAgKiB0dXJuIGNoaXAgc2VsZWN0IG9mZgotICAgICAqLwotICAgIHZhbCA9IE5JQ1NUQVJfUkVHX1JFQUQoYmFzZSwgTklDU1RBUl9SRUdfR0VORVJBTF9QVVJQT1NFKSAmIDB4RkZGRkZGRjA7CisJLyoKKwkgKiB0dXJuIGNoaXAgc2VsZWN0IG9mZgorCSAqLworCXZhbCA9IE5JQ1NUQVJfUkVHX1JFQUQoYmFzZSwgTklDU1RBUl9SRUdfR0VORVJBTF9QVVJQT1NFKSAmIDB4RkZGRkZGRjA7CiAKLSAgICBOSUNTVEFSX1JFR19XUklURShiYXNlLCBOSUNTVEFSX1JFR19HRU5FUkFMX1BVUlBPU0UsCi0gICAgCSh2YWwgfCBDU19ISUdIIHwgQ0xLX0hJR0gpKTsKLSAgICBvc3BfTWljcm9EZWxheSggQ1lDTEVfREVMQVkgKTsKKwlOSUNTVEFSX1JFR19XUklURShiYXNlLCBOSUNTVEFSX1JFR19HRU5FUkFMX1BVUlBPU0UsCisJCQkgICh2YWwgfCBDU19ISUdIIHwgQ0xLX0hJR0gpKTsKKwlvc3BfTWljcm9EZWxheShDWUNMRV9ERUxBWSk7CiAKLSAgICBOSUNTVEFSX1JFR19XUklURShiYXNlLCBOSUNTVEFSX1JFR19HRU5FUkFMX1BVUlBPU0UsCi0gICAgCSh2YWwgfCBDU19ISUdIIHwgQ0xLX0xPVykpOwotICAgIG9zcF9NaWNyb0RlbGF5KCBDWUNMRV9ERUxBWSApOworCU5JQ1NUQVJfUkVHX1dSSVRFKGJhc2UsIE5JQ1NUQVJfUkVHX0dFTkVSQUxfUFVSUE9TRSwKKwkJCSAgKHZhbCB8IENTX0hJR0ggfCBDTEtfTE9XKSk7CisJb3NwX01pY3JvRGVsYXkoQ1lDTEVfREVMQVkpOwogCi0gICAgTklDU1RBUl9SRUdfV1JJVEUoYmFzZSwgTklDU1RBUl9SRUdfR0VORVJBTF9QVVJQT1NFLAotICAgIAkodmFsIHwgQ1NfSElHSCB8IENMS19ISUdIKSk7Ci0gICAgb3NwX01pY3JvRGVsYXkoIENZQ0xFX0RFTEFZICk7CisJTklDU1RBUl9SRUdfV1JJVEUoYmFzZSwgTklDU1RBUl9SRUdfR0VORVJBTF9QVVJQT1NFLAorCQkJICAodmFsIHwgQ1NfSElHSCB8IENMS19ISUdIKSk7CisJb3NwX01pY3JvRGVsYXkoQ1lDTEVfREVMQVkpOwogCi0gICAgTklDU1RBUl9SRUdfV1JJVEUoYmFzZSwgTklDU1RBUl9SRUdfR0VORVJBTF9QVVJQT1NFLAotICAgIAkodmFsIHwgQ1NfSElHSCB8IENMS19MT1cpKTsKLSAgICBvc3BfTWljcm9EZWxheSggQ1lDTEVfREVMQVkgKTsKKwlOSUNTVEFSX1JFR19XUklURShiYXNlLCBOSUNTVEFSX1JFR19HRU5FUkFMX1BVUlBPU0UsCisJCQkgICh2YWwgfCBDU19ISUdIIHwgQ0xLX0xPVykpOworCW9zcF9NaWNyb0RlbGF5KENZQ0xFX0RFTEFZKTsKIH0KIAotCiAvKgogICogVGhpcyByb3V0aW5lIHdpbGwgYmUgdGhlIGludGVyZmFjZSB0byB0aGUgUmVhZFByb21CeXRlIGZ1bmN0aW9uCiAgKiBhYm92ZS4KLSAqLyAKKyAqLwogCiBzdGF0aWMgdm9pZAotbmljc3Rhcl9yZWFkX2Vwcm9tKAotICAgIHZpcnRfYWRkcl90CWJhc2UsCi0gICAgdV9pbnQ4X3QJcHJvbV9vZmZzZXQsCi0gICAgdV9pbnQ4X3QJKmJ1ZmZlciwKLSAgICB1X2ludDMyX3QJbmJ5dGVzICkKK25pY3N0YXJfcmVhZF9lcHJvbSh2aXJ0X2FkZHJfdCBiYXNlLAorCQkgICB1X2ludDhfdCBwcm9tX29mZnNldCwgdV9pbnQ4X3QgKiBidWZmZXIsIHVfaW50MzJfdCBuYnl0ZXMpCiB7Ci0gICAgdV9pbnQJCWk7Ci0gICAgCi0gICAgZm9yIChpPTA7IGk8bmJ5dGVzOyBpKyspCi0gICAgewotCWJ1ZmZlcltpXSA9IHJlYWRfZXByb21fYnl0ZSggYmFzZSwgcHJvbV9vZmZzZXQgKTsKLQkrK3Byb21fb2Zmc2V0OwotIAlvc3BfTWljcm9EZWxheSggQ1lDTEVfREVMQVkgKTsKLSAgICB9CisJdV9pbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuYnl0ZXM7IGkrKykgeworCQlidWZmZXJbaV0gPSByZWFkX2Vwcm9tX2J5dGUoYmFzZSwgcHJvbV9vZmZzZXQpOworCQkrK3Byb21fb2Zmc2V0OworCQlvc3BfTWljcm9EZWxheShDWUNMRV9ERUxBWSk7CisJfQogfQotCi0KLS8qCi12b2lkIG9zcF9NaWNyb0RlbGF5KGludCB4KSB7Ci0gICAgCi19Ci0qLwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYyBiL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jCmluZGV4IGRlZDc2YzQuLjYxNzQ5NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jCisrKyBiL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jCkBAIC0zODMsNyArMzgzLDcgQEAKIAogCS8qIEFueXRoaW5nIGJ1dCAnU2hvd3RpbWUnIGlzIGRvd24gKi8KIAlpZiAoc3RyY21wKHN0YXRlX3N0ciwgIlNob3d0aW1lIikpIHsKLQkJY2FyZC0+YXRtZGV2W3BvcnRdLT5zaWduYWwgPSBBVE1fUEhZX1NJR19MT1NUOworCQlhdG1fZGV2X3NpZ25hbF9jaGFuZ2UoY2FyZC0+YXRtZGV2W3BvcnRdLCBBVE1fUEhZX1NJR19MT1NUKTsKIAkJcmVsZWFzZV92Y2NzKGNhcmQtPmF0bWRldltwb3J0XSk7CiAJCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIlBvcnQgJWQ6ICVzXG4iLCBwb3J0LCBzdGF0ZV9zdHIpOwogCQlyZXR1cm4gMDsKQEAgLTQwMSw3ICs0MDEsNyBAQAogCQkgc25yWzBdPyIsIFNOUiAiOiIiLCBzbnIsIGF0dG5bMF0/IiwgQXR0biAiOiIiLCBhdHRuKTsKIAkKIAljYXJkLT5hdG1kZXZbcG9ydF0tPmxpbmtfcmF0ZSA9IHJhdGVfZG93biAvIDQyNDsKLQljYXJkLT5hdG1kZXZbcG9ydF0tPnNpZ25hbCA9IEFUTV9QSFlfU0lHX0ZPVU5EOworCWF0bV9kZXZfc2lnbmFsX2NoYW5nZShjYXJkLT5hdG1kZXZbcG9ydF0sIEFUTV9QSFlfU0lHX0ZPVU5EKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTI0Niw3ICsxMjQ2LDcgQEAKIAkJY2FyZC0+YXRtZGV2W2ldLT5jaV9yYW5nZS52Y2lfYml0cyA9IDE2OwogCQljYXJkLT5hdG1kZXZbaV0tPmRldl9kYXRhID0gY2FyZDsKIAkJY2FyZC0+YXRtZGV2W2ldLT5waHlfZGF0YSA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpaTsKLQkJY2FyZC0+YXRtZGV2W2ldLT5zaWduYWwgPSBBVE1fUEhZX1NJR19VTktOT1dOOworCQlhdG1fZGV2X3NpZ25hbF9jaGFuZ2UoY2FyZC0+YXRtZGV2W2ldLCBBVE1fUEhZX1NJR19VTktOT1dOKTsKIAogCQlza2IgPSBhbGxvY19za2Ioc2l6ZW9mKCpoZWFkZXIpLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFza2IpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL3N1bmkuYyBiL2RyaXZlcnMvYXRtL3N1bmkuYwppbmRleCBkYTRiOTFmLi40MWM1NmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9zdW5pLmMKKysrIGIvZHJpdmVycy9hdG0vc3VuaS5jCkBAIC0yOTEsOCArMjkxLDkgQEAKIAogc3RhdGljIHZvaWQgcG9sbF9sb3Moc3RydWN0IGF0bV9kZXYgKmRldikKIHsKLQlkZXYtPnNpZ25hbCA9IEdFVChSU09QX1NJUykgJiBTVU5JX1JTT1BfU0lTX0xPU1YgPyBBVE1fUEhZX1NJR19MT1NUIDoKLQkgIEFUTV9QSFlfU0lHX0ZPVU5EOworCWF0bV9kZXZfc2lnbmFsX2NoYW5nZShkZXYsCisJCUdFVChSU09QX1NJUykgJiBTVU5JX1JTT1BfU0lTX0xPU1YgPworCQlBVE1fUEhZX1NJR19MT1NUIDogQVRNX1BIWV9TSUdfRk9VTkQpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL3phdG0uYyBiL2RyaXZlcnMvYXRtL3phdG0uYwppbmRleCA3MDJhY2NlLi40ZTg4NWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS96YXRtLmMKKysrIGIvZHJpdmVycy9hdG0vemF0bS5jCkBAIC0xNjM3LDEwICsxNjM3LDggQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHphdG1fcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JeyBQQ0lfVkVORE9SX0lEX1pFSVRORVQsIFBDSV9ERVZJQ0VfSURfWkVJVE5FVF8xMjIxLAotCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBaQVRNX0NPUFBFUiB9LAotCXsgUENJX1ZFTkRPUl9JRF9aRUlUTkVULCBQQ0lfREVWSUNFX0lEX1pFSVRORVRfMTIyNSwKLQkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAorCXsgUENJX1ZERVZJQ0UoWkVJVE5FVCwgUENJX0RFVklDRV9JRF9aRUlUTkVUXzEyMjEpLCBaQVRNX0NPUFBFUiB9LAorCXsgUENJX1ZERVZJQ0UoWkVJVE5FVCwgUENJX0RFVklDRV9JRF9aRUlUTkVUXzEyMjUpLCAwIH0sCiAJeyAwLCB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHphdG1fcGNpX3RibCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYnVzLmMgYi9kcml2ZXJzL2Jhc2UvYnVzLmMKaW5kZXggMTJlZWMzZi4uZWIxYjdmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2J1cy5jCisrKyBiL2RyaXZlcnMvYmFzZS9idXMuYwpAQCAtOTQ1LDggKzk0NSw4IEBACiAJYnVzX3JlbW92ZV9maWxlKGJ1cywgJmJ1c19hdHRyX3VldmVudCk7CiBidXNfdWV2ZW50X2ZhaWw6CiAJa3NldF91bnJlZ2lzdGVyKCZidXMtPnAtPnN1YnN5cyk7Ci0Ja2ZyZWUoYnVzLT5wKTsKIG91dDoKKwlrZnJlZShidXMtPnApOwogCWJ1cy0+cCA9IE5VTEw7CiAJcmV0dXJuIHJldHZhbDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jb3JlLmMgYi9kcml2ZXJzL2Jhc2UvY29yZS5jCmluZGV4IDk2MzBmYmQuLmQxYjJjOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9jb3JlLmMKKysrIGIvZHJpdmVycy9iYXNlL2NvcmUuYwpAQCAtNjczLDcgKzY3Myw3IEBACiAJCSAqLwogCQlpZiAocGFyZW50ID09IE5VTEwpCiAJCQlwYXJlbnRfa29iaiA9IHZpcnR1YWxfZGV2aWNlX3BhcmVudChkZXYpOwotCQllbHNlIGlmIChwYXJlbnQtPmNsYXNzKQorCQllbHNlIGlmIChwYXJlbnQtPmNsYXNzICYmICFkZXYtPmNsYXNzLT5uc190eXBlKQogCQkJcmV0dXJuICZwYXJlbnQtPmtvYmo7CiAJCWVsc2UKIAkJCXBhcmVudF9rb2JqID0gJnBhcmVudC0+a29iajsKQEAgLTE1OTksNyArMTU5OSw3IEBACiAgKiBvbiB0aGUgc2FtZSBkZXZpY2UgdG8gZW5zdXJlIHRoYXQgbmV3X25hbWUgaXMgdmFsaWQgYW5kCiAgKiB3b24ndCBjb25mbGljdCB3aXRoIG90aGVyIGRldmljZXMuCiAgKi8KLWludCBkZXZpY2VfcmVuYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqbmV3X25hbWUpCitpbnQgZGV2aWNlX3JlbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5ld19uYW1lKQogewogCWNoYXIgKm9sZF9jbGFzc19uYW1lID0gTlVMTDsKIAljaGFyICpuZXdfY2xhc3NfbmFtZSA9IE5VTEw7CkBAIC0xODE5LDMgKzE4MTksNjcgQEAKIAlzcGluX3VubG9jaygmZGV2aWNlc19rc2V0LT5saXN0X2xvY2spOwogCWFzeW5jX3N5bmNocm9uaXplX2Z1bGwoKTsKIH0KKworLyoKKyAqIERldmljZSBsb2dnaW5nIGZ1bmN0aW9ucworICovCisKKyNpZmRlZiBDT05GSUdfUFJJTlRLCisKK3N0YXRpYyBpbnQgX19kZXZfcHJpbnRrKGNvbnN0IGNoYXIgKmxldmVsLCBjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgdmFfZm9ybWF0ICp2YWYpCit7CisJaWYgKCFkZXYpCisJCXJldHVybiBwcmludGsoIiVzKE5VTEwgZGV2aWNlICopOiAlcFYiLCBsZXZlbCwgdmFmKTsKKworCXJldHVybiBwcmludGsoIiVzJXMgJXM6ICVwViIsCisJCSAgICAgIGxldmVsLCBkZXZfZHJpdmVyX3N0cmluZyhkZXYpLCBkZXZfbmFtZShkZXYpLCB2YWYpOworfQorCitpbnQgZGV2X3ByaW50ayhjb25zdCBjaGFyICpsZXZlbCwgY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LAorCSAgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlzdHJ1Y3QgdmFfZm9ybWF0IHZhZjsKKwl2YV9saXN0IGFyZ3M7CisJaW50IHI7CisKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCisJdmFmLmZtdCA9IGZtdDsKKwl2YWYudmEgPSAmYXJnczsKKworCXIgPSBfX2Rldl9wcmludGsobGV2ZWwsIGRldiwgJnZhZik7CisJdmFfZW5kKGFyZ3MpOworCisJcmV0dXJuIHI7Cit9CitFWFBPUlRfU1lNQk9MKGRldl9wcmludGspOworCisjZGVmaW5lIGRlZmluZV9kZXZfcHJpbnRrX2xldmVsKGZ1bmMsIGtlcm5fbGV2ZWwpCQlcCitpbnQgZnVuYyhjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQlcCit7CQkJCQkJCQlcCisJc3RydWN0IHZhX2Zvcm1hdCB2YWY7CQkJCQlcCisJdmFfbGlzdCBhcmdzOwkJCQkJCVwKKwlpbnQgcjsJCQkJCQkJXAorCQkJCQkJCQlcCisJdmFfc3RhcnQoYXJncywgZm10KTsJCQkJCVwKKwkJCQkJCQkJXAorCXZhZi5mbXQgPSBmbXQ7CQkJCQkJXAorCXZhZi52YSA9ICZhcmdzOwkJCQkJCVwKKwkJCQkJCQkJXAorCXIgPSBfX2Rldl9wcmludGsoa2Vybl9sZXZlbCwgZGV2LCAmdmFmKTsJCVwKKwl2YV9lbmQoYXJncyk7CQkJCQkJXAorCQkJCQkJCQlcCisJcmV0dXJuIHI7CQkJCQkJXAorfQkJCQkJCQkJXAorRVhQT1JUX1NZTUJPTChmdW5jKTsKKworZGVmaW5lX2Rldl9wcmludGtfbGV2ZWwoZGV2X2VtZXJnLCBLRVJOX0VNRVJHKTsKK2RlZmluZV9kZXZfcHJpbnRrX2xldmVsKGRldl9hbGVydCwgS0VSTl9BTEVSVCk7CitkZWZpbmVfZGV2X3ByaW50a19sZXZlbChkZXZfY3JpdCwgS0VSTl9DUklUKTsKK2RlZmluZV9kZXZfcHJpbnRrX2xldmVsKGRldl9lcnIsIEtFUk5fRVJSKTsKK2RlZmluZV9kZXZfcHJpbnRrX2xldmVsKGRldl93YXJuLCBLRVJOX1dBUk5JTkcpOworZGVmaW5lX2Rldl9wcmludGtfbGV2ZWwoZGV2X25vdGljZSwgS0VSTl9OT1RJQ0UpOworZGVmaW5lX2Rldl9wcmludGtfbGV2ZWwoX2Rldl9pbmZvLCBLRVJOX0lORk8pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kZC5jIGIvZHJpdmVycy9iYXNlL2RkLmMKaW5kZXggNTAzYzI2Mi4uZGE1N2VlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RkLmMKKysrIGIvZHJpdmVycy9iYXNlL2RkLmMKQEAgLTUxLDYgKzUxLDEwIEBACiB7CiAJaW50IHJldDsKIAorCWlmIChkZXYtPmJ1cykKKwkJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmZGV2LT5idXMtPnAtPmJ1c19ub3RpZmllciwKKwkJCQkJICAgICBCVVNfTk9USUZZX0JJTkRfRFJJVkVSLCBkZXYpOworCiAJcmV0ID0gc3lzZnNfY3JlYXRlX2xpbmsoJmRldi0+ZHJpdmVyLT5wLT5rb2JqLCAmZGV2LT5rb2JqLAogCQkJICBrb2JqZWN0X25hbWUoJmRldi0+a29iaikpOwogCWlmIChyZXQgPT0gMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2RtYS1jb2hlcmVudC5jIGIvZHJpdmVycy9iYXNlL2RtYS1jb2hlcmVudC5jCmluZGV4IGQ0ZDhjZTUuLmYzNjllMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9kbWEtY29oZXJlbnQuYworKysgYi9kcml2ZXJzL2Jhc2UvZG1hLWNvaGVyZW50LmMKQEAgLTgsNyArOCw3IEBACiAKIHN0cnVjdCBkbWFfY29oZXJlbnRfbWVtIHsKIAl2b2lkCQkqdmlydF9iYXNlOwotCXUzMgkJZGV2aWNlX2Jhc2U7CisJZG1hX2FkZHJfdAlkZXZpY2VfYmFzZTsKIAlpbnQJCXNpemU7CiAJaW50CQlmbGFnczsKIAl1bnNpZ25lZCBsb25nCSpiaXRtYXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYyBiL2RyaXZlcnMvYmFzZS9maXJtd2FyZV9jbGFzcy5jCmluZGV4IDNmMDkzYjAuLmM4YTQ0ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9maXJtd2FyZV9jbGFzcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9maXJtd2FyZV9jbGFzcy5jCkBAIC04NywyOSArODcsMzIgQEAKIAogc3RydWN0IGZpcm13YXJlX3ByaXYgewogCXN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRpb247Ci0Jc3RydWN0IGJpbl9hdHRyaWJ1dGUgYXR0cl9kYXRhOwogCXN0cnVjdCBmaXJtd2FyZSAqZnc7CiAJdW5zaWduZWQgbG9uZyBzdGF0dXM7CiAJc3RydWN0IHBhZ2UgKipwYWdlczsKIAlpbnQgbnJfcGFnZXM7CiAJaW50IHBhZ2VfYXJyYXlfc2l6ZTsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lb3V0OworCXN0cnVjdCBkZXZpY2UgZGV2OwogCWJvb2wgbm93YWl0OwogCWNoYXIgZndfaWRbXTsKIH07CiAKLXN0YXRpYyB2b2lkCi1md19sb2FkX2Fib3J0KHN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2KQorc3RhdGljIHN0cnVjdCBmaXJtd2FyZV9wcml2ICp0b19maXJtd2FyZV9wcml2KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGZpcm13YXJlX3ByaXYsIGRldik7Cit9CisKK3N0YXRpYyB2b2lkIGZ3X2xvYWRfYWJvcnQoc3RydWN0IGZpcm13YXJlX3ByaXYgKmZ3X3ByaXYpCiB7CiAJc2V0X2JpdChGV19TVEFUVVNfQUJPUlQsICZmd19wcml2LT5zdGF0dXMpOwogCXdtYigpOwogCWNvbXBsZXRlKCZmd19wcml2LT5jb21wbGV0aW9uKTsKIH0KIAotc3RhdGljIHNzaXplX3QKLWZpcm13YXJlX3RpbWVvdXRfc2hvdyhzdHJ1Y3QgY2xhc3MgKmNsYXNzLAotCQkgICAgICBzdHJ1Y3QgY2xhc3NfYXR0cmlidXRlICphdHRyLAotCQkgICAgICBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBmaXJtd2FyZV90aW1lb3V0X3Nob3coc3RydWN0IGNsYXNzICpjbGFzcywKKwkJCQkgICAgIHN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjaGFyICpidWYpCiB7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxvYWRpbmdfdGltZW91dCk7CiB9CkBAIC0xMjcsMTQgKzEzMCwxNCBAQAogICoKICAqCU5vdGU6IHplcm8gbWVhbnMgJ3dhaXQgZm9yZXZlcicuCiAgKiovCi1zdGF0aWMgc3NpemVfdAotZmlybXdhcmVfdGltZW91dF9zdG9yZShzdHJ1Y3QgY2xhc3MgKmNsYXNzLAotCQkJc3RydWN0IGNsYXNzX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3QgZmlybXdhcmVfdGltZW91dF9zdG9yZShzdHJ1Y3QgY2xhc3MgKmNsYXNzLAorCQkJCSAgICAgIHN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJbG9hZGluZ190aW1lb3V0ID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAlpZiAobG9hZGluZ190aW1lb3V0IDwgMCkKIAkJbG9hZGluZ190aW1lb3V0ID0gMDsKKwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMTQ2LDIxICsxNDksMjAgQEAKIAogc3RhdGljIHZvaWQgZndfZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGZpcm13YXJlX3ByaXYgKmZ3X3ByaXYgPSB0b19maXJtd2FyZV9wcml2KGRldik7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZndfcHJpdi0+bnJfcGFnZXM7IGkrKykKIAkJX19mcmVlX3BhZ2UoZndfcHJpdi0+cGFnZXNbaV0pOwogCWtmcmVlKGZ3X3ByaXYtPnBhZ2VzKTsKIAlrZnJlZShmd19wcml2KTsKLQlrZnJlZShkZXYpOwogCiAJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CiB9CiAKIHN0YXRpYyBpbnQgZmlybXdhcmVfdWV2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KQogewotCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGZpcm13YXJlX3ByaXYgKmZ3X3ByaXYgPSB0b19maXJtd2FyZV9wcml2KGRldik7CiAKIAlpZiAoYWRkX3VldmVudF92YXIoZW52LCAiRklSTVdBUkU9JXMiLCBmd19wcml2LT5md19pZCkpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTgyLDggKzE4NCw5IEBACiBzdGF0aWMgc3NpemVfdCBmaXJtd2FyZV9sb2FkaW5nX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgZmlybXdhcmVfcHJpdiAqZndfcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2ID0gdG9fZmlybXdhcmVfcHJpdihkZXYpOwogCWludCBsb2FkaW5nID0gdGVzdF9iaXQoRldfU1RBVFVTX0xPQURJTkcsICZmd19wcml2LT5zdGF0dXMpOworCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxvYWRpbmcpOwogfQogCkBAIC0yMTksNyArMjIyLDcgQEAKIAkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgZmlybXdhcmVfcHJpdiAqZndfcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2ID0gdG9fZmlybXdhcmVfcHJpdihkZXYpOwogCWludCBsb2FkaW5nID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAlpbnQgaTsKIApAQCAtMjc3LDEzICsyODAsMTIgQEAKIAogc3RhdGljIERFVklDRV9BVFRSKGxvYWRpbmcsIDA2NDQsIGZpcm13YXJlX2xvYWRpbmdfc2hvdywgZmlybXdhcmVfbG9hZGluZ19zdG9yZSk7CiAKLXN0YXRpYyBzc2l6ZV90Ci1maXJtd2FyZV9kYXRhX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkgICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsIGNoYXIgKmJ1ZmZlciwgbG9mZl90IG9mZnNldCwKLQkJICAgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3QgZmlybXdhcmVfZGF0YV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKKwkJCQkgIGNoYXIgKmJ1ZmZlciwgbG9mZl90IG9mZnNldCwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2Rldihrb2JqKTsKLQlzdHJ1Y3QgZmlybXdhcmVfcHJpdiAqZndfcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2ID0gdG9fZmlybXdhcmVfcHJpdihkZXYpOwogCXN0cnVjdCBmaXJtd2FyZSAqZnc7CiAJc3NpemVfdCByZXRfY291bnQ7CiAKQEAgLTMyMiw4ICszMjQsNyBAQAogCXJldHVybiByZXRfY291bnQ7CiB9CiAKLXN0YXRpYyBpbnQKLWZ3X3JlYWxsb2NfYnVmZmVyKHN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2LCBpbnQgbWluX3NpemUpCitzdGF0aWMgaW50IGZ3X3JlYWxsb2NfYnVmZmVyKHN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2LCBpbnQgbWluX3NpemUpCiB7CiAJaW50IHBhZ2VzX25lZWRlZCA9IEFMSUdOKG1pbl9zaXplLCBQQUdFX1NJWkUpID4+IFBBR0VfU0hJRlQ7CiAKQEAgLTM3MywxMyArMzc0LDEyIEBACiAgKglEYXRhIHdyaXR0ZW4gdG8gdGhlICdkYXRhJyBhdHRyaWJ1dGUgd2lsbCBiZSBsYXRlciBoYW5kZWQgdG8KICAqCXRoZSBkcml2ZXIgYXMgYSBmaXJtd2FyZSBpbWFnZS4KICAqKi8KLXN0YXRpYyBzc2l6ZV90Ci1maXJtd2FyZV9kYXRhX3dyaXRlKHN0cnVjdCBmaWxlKiBmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJICAgIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwgY2hhciAqYnVmZmVyLAotCQkgICAgbG9mZl90IG9mZnNldCwgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3QgZmlybXdhcmVfZGF0YV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICAgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLAorCQkJCSAgIGNoYXIgKmJ1ZmZlciwgbG9mZl90IG9mZnNldCwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2Rldihrb2JqKTsKLQlzdHJ1Y3QgZmlybXdhcmVfcHJpdiAqZndfcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2ID0gdG9fZmlybXdhcmVfcHJpdihkZXYpOwogCXN0cnVjdCBmaXJtd2FyZSAqZnc7CiAJc3NpemVfdCByZXR2YWw7CiAKQEAgLTQyMCwxMTYgKzQyMCwxMDMgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgc3RydWN0IGJpbl9hdHRyaWJ1dGUgZmlybXdhcmVfYXR0cl9kYXRhX3RtcGwgPSB7Ci0JLmF0dHIgPSB7Lm5hbWUgPSAiZGF0YSIsIC5tb2RlID0gMDY0NH0sCitzdGF0aWMgc3RydWN0IGJpbl9hdHRyaWJ1dGUgZmlybXdhcmVfYXR0cl9kYXRhID0geworCS5hdHRyID0geyAubmFtZSA9ICJkYXRhIiwgLm1vZGUgPSAwNjQ0IH0sCiAJLnNpemUgPSAwLAogCS5yZWFkID0gZmlybXdhcmVfZGF0YV9yZWFkLAogCS53cml0ZSA9IGZpcm13YXJlX2RhdGFfd3JpdGUsCiB9OwogCi1zdGF0aWMgdm9pZAotZmlybXdhcmVfY2xhc3NfdGltZW91dCh1X2xvbmcgZGF0YSkKK3N0YXRpYyB2b2lkIGZpcm13YXJlX2NsYXNzX3RpbWVvdXQodV9sb25nIGRhdGEpCiB7CiAJc3RydWN0IGZpcm13YXJlX3ByaXYgKmZ3X3ByaXYgPSAoc3RydWN0IGZpcm13YXJlX3ByaXYgKikgZGF0YTsKKwogCWZ3X2xvYWRfYWJvcnQoZndfcHJpdik7CiB9CiAKLXN0YXRpYyBpbnQgZndfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKipkZXZfcCwgY29uc3QgY2hhciAqZndfbmFtZSwKLQkJCSAgICAgIHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBzdHJ1Y3QgZmlybXdhcmVfcHJpdiAqCitmd19jcmVhdGVfaW5zdGFuY2Uoc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSwgY29uc3QgY2hhciAqZndfbmFtZSwKKwkJICAgc3RydWN0IGRldmljZSAqZGV2aWNlLCBib29sIHVldmVudCwgYm9vbCBub3dhaXQpCiB7Ci0JaW50IHJldHZhbDsKLQlzdHJ1Y3QgZmlybXdhcmVfcHJpdiAqZndfcHJpdiA9Ci0JCWt6YWxsb2Moc2l6ZW9mKCpmd19wcml2KSArIHN0cmxlbihmd19uYW1lKSArIDEgLCBHRlBfS0VSTkVMKTsKLQlzdHJ1Y3QgZGV2aWNlICpmX2RldiA9IGt6YWxsb2Moc2l6ZW9mKCpmX2RldiksIEdGUF9LRVJORUwpOworCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2OworCXN0cnVjdCBkZXZpY2UgKmZfZGV2OworCWludCBlcnJvcjsKIAotCSpkZXZfcCA9IE5VTEw7Ci0KLQlpZiAoIWZ3X3ByaXYgfHwgIWZfZGV2KSB7CisJZndfcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpmd19wcml2KSArIHN0cmxlbihmd19uYW1lKSArIDEgLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZ3X3ByaXYpIHsKIAkJZGV2X2VycihkZXZpY2UsICIlczoga21hbGxvYyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQkJcmV0dmFsID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9rZnJlZTsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CiAJfQogCisJZndfcHJpdi0+ZncgPSBmaXJtd2FyZTsKKwlmd19wcml2LT5ub3dhaXQgPSBub3dhaXQ7CiAJc3RyY3B5KGZ3X3ByaXYtPmZ3X2lkLCBmd19uYW1lKTsKIAlpbml0X2NvbXBsZXRpb24oJmZ3X3ByaXYtPmNvbXBsZXRpb24pOwotCWZ3X3ByaXYtPmF0dHJfZGF0YSA9IGZpcm13YXJlX2F0dHJfZGF0YV90bXBsOwotCWZ3X3ByaXYtPnRpbWVvdXQuZnVuY3Rpb24gPSBmaXJtd2FyZV9jbGFzc190aW1lb3V0OwotCWZ3X3ByaXYtPnRpbWVvdXQuZGF0YSA9ICh1X2xvbmcpIGZ3X3ByaXY7Ci0JaW5pdF90aW1lcigmZndfcHJpdi0+dGltZW91dCk7CisJc2V0dXBfdGltZXIoJmZ3X3ByaXYtPnRpbWVvdXQsCisJCSAgICBmaXJtd2FyZV9jbGFzc190aW1lb3V0LCAodV9sb25nKSBmd19wcml2KTsKIAorCWZfZGV2ID0gJmZ3X3ByaXYtPmRldjsKKworCWRldmljZV9pbml0aWFsaXplKGZfZGV2KTsKIAlkZXZfc2V0X25hbWUoZl9kZXYsICIlcyIsIGRldl9uYW1lKGRldmljZSkpOwogCWZfZGV2LT5wYXJlbnQgPSBkZXZpY2U7CiAJZl9kZXYtPmNsYXNzID0gJmZpcm13YXJlX2NsYXNzOwotCWRldl9zZXRfZHJ2ZGF0YShmX2RldiwgZndfcHJpdik7Ci0JZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoZl9kZXYsIDEpOwotCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcihmX2Rldik7Ci0JaWYgKHJldHZhbCkgewotCQlkZXZfZXJyKGRldmljZSwgIiVzOiBkZXZpY2VfcmVnaXN0ZXIgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCXB1dF9kZXZpY2UoZl9kZXYpOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQkqZGV2X3AgPSBmX2RldjsKLQlyZXR1cm4gMDsKIAotZXJyb3Jfa2ZyZWU6Ci0Ja2ZyZWUoZl9kZXYpOwotCWtmcmVlKGZ3X3ByaXYpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyBpbnQgZndfc2V0dXBfZGV2aWNlKHN0cnVjdCBmaXJtd2FyZSAqZncsIHN0cnVjdCBkZXZpY2UgKipkZXZfcCwKLQkJCSAgIGNvbnN0IGNoYXIgKmZ3X25hbWUsIHN0cnVjdCBkZXZpY2UgKmRldmljZSwKLQkJCSAgIGludCB1ZXZlbnQsIGJvb2wgbm93YWl0KQotewotCXN0cnVjdCBkZXZpY2UgKmZfZGV2OwotCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2OwotCWludCByZXR2YWw7Ci0KLQkqZGV2X3AgPSBOVUxMOwotCXJldHZhbCA9IGZ3X3JlZ2lzdGVyX2RldmljZSgmZl9kZXYsIGZ3X25hbWUsIGRldmljZSk7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBvdXQ7CisJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoZl9kZXYsIHRydWUpOwogCiAJLyogTmVlZCB0byBwaW4gdGhpcyBtb2R1bGUgdW50aWwgY2xhc3MgZGV2aWNlIGlzIGRlc3Ryb3llZCAqLwogCV9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7CiAKLQlmd19wcml2ID0gZGV2X2dldF9kcnZkYXRhKGZfZGV2KTsKLQotCWZ3X3ByaXYtPm5vd2FpdCA9IG5vd2FpdDsKLQotCWZ3X3ByaXYtPmZ3ID0gZnc7Ci0Jc3lzZnNfYmluX2F0dHJfaW5pdCgmZndfcHJpdi0+YXR0cl9kYXRhKTsKLQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmZfZGV2LT5rb2JqLCAmZndfcHJpdi0+YXR0cl9kYXRhKTsKLQlpZiAocmV0dmFsKSB7Ci0JCWRldl9lcnIoZGV2aWNlLCAiJXM6IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQkJZ290byBlcnJvcl91bnJlZzsKKwllcnJvciA9IGRldmljZV9hZGQoZl9kZXYpOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKGRldmljZSwgIiVzOiBkZXZpY2VfcmVnaXN0ZXIgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyX3B1dF9kZXY7CiAJfQogCi0JcmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKGZfZGV2LCAmZGV2X2F0dHJfbG9hZGluZyk7Ci0JaWYgKHJldHZhbCkgeworCWVycm9yID0gZGV2aWNlX2NyZWF0ZV9iaW5fZmlsZShmX2RldiwgJmZpcm13YXJlX2F0dHJfZGF0YSk7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoZGV2aWNlLCAiJXM6IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJZ290byBlcnJfZGVsX2RldjsKKwl9CisKKwllcnJvciA9IGRldmljZV9jcmVhdGVfZmlsZShmX2RldiwgJmRldl9hdHRyX2xvYWRpbmcpOworCWlmIChlcnJvcikgewogCQlkZXZfZXJyKGRldmljZSwgIiVzOiBkZXZpY2VfY3JlYXRlX2ZpbGUgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyb3JfdW5yZWc7CisJCWdvdG8gZXJyX2RlbF9iaW5fYXR0cjsKIAl9CiAKIAlpZiAodWV2ZW50KQotCQlkZXZfc2V0X3VldmVudF9zdXBwcmVzcyhmX2RldiwgMCk7Ci0JKmRldl9wID0gZl9kZXY7Ci0JZ290byBvdXQ7CisJCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKGZfZGV2LCBmYWxzZSk7CiAKLWVycm9yX3VucmVnOgotCWRldmljZV91bnJlZ2lzdGVyKGZfZGV2KTsKLW91dDoKLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiBmd19wcml2OworCitlcnJfZGVsX2Jpbl9hdHRyOgorCWRldmljZV9yZW1vdmVfYmluX2ZpbGUoZl9kZXYsICZmaXJtd2FyZV9hdHRyX2RhdGEpOworZXJyX2RlbF9kZXY6CisJZGV2aWNlX2RlbChmX2Rldik7CitlcnJfcHV0X2RldjoKKwlwdXRfZGV2aWNlKGZfZGV2KTsKK2Vycl9vdXQ6CisJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogfQogCi1zdGF0aWMgaW50Ci1fcmVxdWVzdF9maXJtd2FyZShjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmaXJtd2FyZV9wLCBjb25zdCBjaGFyICpuYW1lLAotCQkgc3RydWN0IGRldmljZSAqZGV2aWNlLCBpbnQgdWV2ZW50LCBib29sIG5vd2FpdCkKK3N0YXRpYyB2b2lkIGZ3X2Rlc3Ryb3lfaW5zdGFuY2Uoc3RydWN0IGZpcm13YXJlX3ByaXYgKmZ3X3ByaXYpCiB7Ci0Jc3RydWN0IGRldmljZSAqZl9kZXY7CisJc3RydWN0IGRldmljZSAqZl9kZXYgPSAmZndfcHJpdi0+ZGV2OworCisJZGV2aWNlX3JlbW92ZV9maWxlKGZfZGV2LCAmZGV2X2F0dHJfbG9hZGluZyk7CisJZGV2aWNlX3JlbW92ZV9iaW5fZmlsZShmX2RldiwgJmZpcm13YXJlX2F0dHJfZGF0YSk7CisJZGV2aWNlX3VucmVnaXN0ZXIoZl9kZXYpOworfQorCitzdGF0aWMgaW50IF9yZXF1ZXN0X2Zpcm13YXJlKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqKmZpcm13YXJlX3AsCisJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZXZpY2UgKmRldmljZSwKKwkJCSAgICAgYm9vbCB1ZXZlbnQsIGJvb2wgbm93YWl0KQorewogCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2OwogCXN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmU7Ci0JaW50IHJldHZhbDsKKwlpbnQgcmV0dmFsID0gMDsKIAogCWlmICghZmlybXdhcmVfcCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01NTAsNDEgKzUzNyw0MCBAQAogCWlmICh1ZXZlbnQpCiAJCWRldl9kYmcoZGV2aWNlLCAiZmlybXdhcmU6IHJlcXVlc3RpbmcgJXNcbiIsIG5hbWUpOwogCi0JcmV0dmFsID0gZndfc2V0dXBfZGV2aWNlKGZpcm13YXJlLCAmZl9kZXYsIG5hbWUsIGRldmljZSwKLQkJCQkgdWV2ZW50LCBub3dhaXQpOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZXJyb3Jfa2ZyZWVfZnc7Ci0KLQlmd19wcml2ID0gZGV2X2dldF9kcnZkYXRhKGZfZGV2KTsKKwlmd19wcml2ID0gZndfY3JlYXRlX2luc3RhbmNlKGZpcm13YXJlLCBuYW1lLCBkZXZpY2UsIHVldmVudCwgbm93YWl0KTsKKwlpZiAoSVNfRVJSKGZ3X3ByaXYpKSB7CisJCXJldHZhbCA9IFBUUl9FUlIoZndfcHJpdik7CisJCWdvdG8gb3V0OworCX0KIAogCWlmICh1ZXZlbnQpIHsKLQkJaWYgKGxvYWRpbmdfdGltZW91dCA+IDApIHsKLQkJCWZ3X3ByaXYtPnRpbWVvdXQuZXhwaXJlcyA9IGppZmZpZXMgKyBsb2FkaW5nX3RpbWVvdXQgKiBIWjsKLQkJCWFkZF90aW1lcigmZndfcHJpdi0+dGltZW91dCk7Ci0JCX0KKwkJaWYgKGxvYWRpbmdfdGltZW91dCA+IDApCisJCQltb2RfdGltZXIoJmZ3X3ByaXYtPnRpbWVvdXQsCisJCQkJICByb3VuZF9qaWZmaWVzX3VwKGppZmZpZXMgKworCQkJCQkJICAgbG9hZGluZ190aW1lb3V0ICogSFopKTsKIAotCQlrb2JqZWN0X3VldmVudCgmZl9kZXYtPmtvYmosIEtPQkpfQUREKTsKLQkJd2FpdF9mb3JfY29tcGxldGlvbigmZndfcHJpdi0+Y29tcGxldGlvbik7Ci0JCXNldF9iaXQoRldfU1RBVFVTX0RPTkUsICZmd19wcml2LT5zdGF0dXMpOwotCQlkZWxfdGltZXJfc3luYygmZndfcHJpdi0+dGltZW91dCk7Ci0JfSBlbHNlCi0JCXdhaXRfZm9yX2NvbXBsZXRpb24oJmZ3X3ByaXYtPmNvbXBsZXRpb24pOworCQlrb2JqZWN0X3VldmVudCgmZndfcHJpdi0+ZGV2LmtvYmosIEtPQkpfQUREKTsKKwl9CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZmd19wcml2LT5jb21wbGV0aW9uKTsKKworCXNldF9iaXQoRldfU1RBVFVTX0RPTkUsICZmd19wcml2LT5zdGF0dXMpOworCWRlbF90aW1lcl9zeW5jKCZmd19wcml2LT50aW1lb3V0KTsKIAogCW11dGV4X2xvY2soJmZ3X2xvY2spOwotCWlmICghZndfcHJpdi0+ZnctPnNpemUgfHwgdGVzdF9iaXQoRldfU1RBVFVTX0FCT1JULCAmZndfcHJpdi0+c3RhdHVzKSkgeworCWlmICghZndfcHJpdi0+ZnctPnNpemUgfHwgdGVzdF9iaXQoRldfU1RBVFVTX0FCT1JULCAmZndfcHJpdi0+c3RhdHVzKSkKIAkJcmV0dmFsID0gLUVOT0VOVDsKLQkJcmVsZWFzZV9maXJtd2FyZShmd19wcml2LT5mdyk7Ci0JCSpmaXJtd2FyZV9wID0gTlVMTDsKLQl9CiAJZndfcHJpdi0+ZncgPSBOVUxMOwogCW11dGV4X3VubG9jaygmZndfbG9jayk7Ci0JZGV2aWNlX3VucmVnaXN0ZXIoZl9kZXYpOwotCWdvdG8gb3V0OwogCi1lcnJvcl9rZnJlZV9mdzoKLQlrZnJlZShmaXJtd2FyZSk7Ci0JKmZpcm13YXJlX3AgPSBOVUxMOworCWZ3X2Rlc3Ryb3lfaW5zdGFuY2UoZndfcHJpdik7CisKIG91dDoKKwlpZiAocmV0dmFsKSB7CisJCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOworCQlmaXJtd2FyZV9wID0gTlVMTDsKKwl9CisKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC02MzUsMjMgKzYyMSwyNCBAQAogCWludCB1ZXZlbnQ7CiB9OwogCi1zdGF0aWMgaW50Ci1yZXF1ZXN0X2Zpcm13YXJlX3dvcmtfZnVuYyh2b2lkICphcmcpCitzdGF0aWMgaW50IHJlcXVlc3RfZmlybXdhcmVfd29ya19mdW5jKHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgZmlybXdhcmVfd29yayAqZndfd29yayA9IGFyZzsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwogCWludCByZXQ7CisKIAlpZiAoIWFyZykgewogCQlXQVJOX09OKDEpOwogCQlyZXR1cm4gMDsKIAl9Ci0JcmV0ID0gX3JlcXVlc3RfZmlybXdhcmUoJmZ3LCBmd193b3JrLT5uYW1lLCBmd193b3JrLT5kZXZpY2UsCi0JCWZ3X3dvcmstPnVldmVudCwgdHJ1ZSk7CiAKKwlyZXQgPSBfcmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3X3dvcmstPm5hbWUsIGZ3X3dvcmstPmRldmljZSwKKwkJCQlmd193b3JrLT51ZXZlbnQsIHRydWUpOwogCWZ3X3dvcmstPmNvbnQoZncsIGZ3X3dvcmstPmNvbnRleHQpOwogCiAJbW9kdWxlX3B1dChmd193b3JrLT5tb2R1bGUpOwogCWtmcmVlKGZ3X3dvcmspOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjc5LDM0ICs2NjYsMzMgQEAKIAl2b2lkICgqY29udCkoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgdm9pZCAqY29udGV4dCkpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwotCXN0cnVjdCBmaXJtd2FyZV93b3JrICpmd193b3JrID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBmaXJtd2FyZV93b3JrKSwKLQkJCQkJCWdmcCk7CisJc3RydWN0IGZpcm13YXJlX3dvcmsgKmZ3X3dvcms7CiAKKwlmd193b3JrID0ga3phbGxvYyhzaXplb2YgKHN0cnVjdCBmaXJtd2FyZV93b3JrKSwgZ2ZwKTsKIAlpZiAoIWZ3X3dvcmspCiAJCXJldHVybiAtRU5PTUVNOworCisJZndfd29yay0+bW9kdWxlID0gbW9kdWxlOworCWZ3X3dvcmstPm5hbWUgPSBuYW1lOworCWZ3X3dvcmstPmRldmljZSA9IGRldmljZTsKKwlmd193b3JrLT5jb250ZXh0ID0gY29udGV4dDsKKwlmd193b3JrLT5jb250ID0gY29udDsKKwlmd193b3JrLT51ZXZlbnQgPSB1ZXZlbnQ7CisKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KG1vZHVsZSkpIHsKIAkJa2ZyZWUoZndfd29yayk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCSpmd193b3JrID0gKHN0cnVjdCBmaXJtd2FyZV93b3JrKSB7Ci0JCS5tb2R1bGUgPSBtb2R1bGUsCi0JCS5uYW1lID0gbmFtZSwKLQkJLmRldmljZSA9IGRldmljZSwKLQkJLmNvbnRleHQgPSBjb250ZXh0LAotCQkuY29udCA9IGNvbnQsCi0JCS51ZXZlbnQgPSB1ZXZlbnQsCi0JfTsKLQogCXRhc2sgPSBrdGhyZWFkX3J1bihyZXF1ZXN0X2Zpcm13YXJlX3dvcmtfZnVuYywgZndfd29yaywKIAkJCSAgICAiZmlybXdhcmUvJXMiLCBuYW1lKTsKLQogCWlmIChJU19FUlIodGFzaykpIHsKIAkJZndfd29yay0+Y29udChOVUxMLCBmd193b3JrLT5jb250ZXh0KTsKIAkJbW9kdWxlX3B1dChmd193b3JrLT5tb2R1bGUpOwogCQlrZnJlZShmd193b3JrKTsKIAkJcmV0dXJuIFBUUl9FUlIodGFzayk7CiAJfQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKaW5kZXggNGQ5OWM4Yi4uYzZjOTMzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKQEAgLTEyLDYgKzEyLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgpAQCAtMTkxLDEzICsxOTIsMTMgQEAKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnI7CiAKLQlyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIG51bSwgR0ZQX0tFUk5FTCk7CisJciA9IGttZW1kdXAocmVzLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIG51bSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHIpIHsKLQkJbWVtY3B5KHIsIHJlcywgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiBudW0pOwogCQlwZGV2LT5yZXNvdXJjZSA9IHI7CiAJCXBkZXYtPm51bV9yZXNvdXJjZXMgPSBudW07CisJCXJldHVybiAwOwogCX0KLQlyZXR1cm4gciA/IDAgOiAtRU5PTUVNOworCXJldHVybiAtRU5PTUVNOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMpOwogCkBAIC0zNDQsMTA4ICszNDUsNTYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKTsKIAogLyoqCi0gKiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlIC0gYWRkIGEgcGxhdGZvcm0tbGV2ZWwgZGV2aWNlIGFuZCBpdHMgcmVzb3VyY2VzCisgKiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEgLSBhZGQgYSBwbGF0Zm9ybS1sZXZlbCBkZXZpY2Ugd2l0aAorICogcmVzb3VyY2VzIGFuZCBwbGF0Zm9ybS1zcGVjaWZpYyBkYXRhCisgKgorICogQHBhcmVudDogcGFyZW50IGRldmljZSBmb3IgdGhlIGRldmljZSB3ZSdyZSBhZGRpbmcKICAqIEBuYW1lOiBiYXNlIG5hbWUgb2YgdGhlIGRldmljZSB3ZSdyZSBhZGRpbmcKICAqIEBpZDogaW5zdGFuY2UgaWQKICAqIEByZXM6IHNldCBvZiByZXNvdXJjZXMgdGhhdCBuZWVkcyB0byBiZSBhbGxvY2F0ZWQgZm9yIHRoZSBkZXZpY2UKICAqIEBudW06IG51bWJlciBvZiByZXNvdXJjZXMKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBzaW1wbGUgcGxhdGZvcm0gZGV2aWNlIHRoYXQgcmVxdWlyZXMgbWluaW1hbAotICogcmVzb3VyY2UgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBDYW5uZWQgcmVsZWFzZSBmdW5jdGlvbiBmcmVlaW5nIG1lbW9yeQotICogYWxsb2NhdGVkIGZvciB0aGUgZGV2aWNlIGFsbG93cyBkcml2ZXJzIHVzaW5nIHN1Y2ggZGV2aWNlcyB0byBiZQotICogdW5sb2FkZWQgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIGRldmljZSB0byBiZQotICogZHJvcHBlZC4KLSAqCi0gKiBUaGlzIGludGVyZmFjZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIHVzZSB3aXRoIGxlZ2FjeSBkcml2ZXJzIHdoaWNoCi0gKiBwcm9iZSBoYXJkd2FyZSBkaXJlY3RseS4gIEJlY2F1c2Ugc3VjaCBkcml2ZXJzIGNyZWF0ZSBzeXNmcyBkZXZpY2Ugbm9kZXMKLSAqIHRoZW1zZWx2ZXMsIHJhdGhlciB0aGFuIGxldHRpbmcgc3lzdGVtIGluZnJhc3RydWN0dXJlIGhhbmRsZSBzdWNoIGRldmljZQotICogZW51bWVyYXRpb24gdGFza3MsIHRoZXkgZG9uJ3QgZnVsbHkgY29uZm9ybSB0byB0aGUgTGludXggZHJpdmVyIG1vZGVsLgotICogSW4gcGFydGljdWxhciwgd2hlbiBzdWNoIGRyaXZlcnMgYXJlIGJ1aWx0IGFzIG1vZHVsZXMsIHRoZXkgY2FuJ3QgYmUKLSAqICJob3RwbHVnZ2VkIi4KLSAqCi0gKiBSZXR1cm5zICZzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBvaW50ZXIgb24gc3VjY2Vzcywgb3IgRVJSX1BUUigpIG9uIGVycm9yLgotICovCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJCQkJaW50IGlkLAotCQkJCQkJCWNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAotCQkJCQkJCXVuc2lnbmVkIGludCBudW0pCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQlpbnQgcmV0dmFsOwotCi0JcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhuYW1lLCBpZCk7Ci0JaWYgKCFwZGV2KSB7Ci0JCXJldHZhbCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JaWYgKG51bSkgewotCQlyZXR2YWwgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCByZXMsIG51bSk7Ci0JCWlmIChyZXR2YWwpCi0JCQlnb3RvIGVycm9yOwotCX0KLQotCXJldHZhbCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBlcnJvcjsKLQotCXJldHVybiBwZGV2OwotCi1lcnJvcjoKLQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOwotCXJldHVybiBFUlJfUFRSKHJldHZhbCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKTsKLQotLyoqCi0gKiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YSAtIGFkZCBhIHBsYXRmb3JtLWxldmVsIGRldmljZSB3aXRoIHBsYXRmb3JtLXNwZWNpZmljIGRhdGEKLSAqIEBwYXJlbnQ6IHBhcmVudCBkZXZpY2UgZm9yIHRoZSBkZXZpY2Ugd2UncmUgYWRkaW5nCi0gKiBAbmFtZTogYmFzZSBuYW1lIG9mIHRoZSBkZXZpY2Ugd2UncmUgYWRkaW5nCi0gKiBAaWQ6IGluc3RhbmNlIGlkCiAgKiBAZGF0YTogcGxhdGZvcm0gc3BlY2lmaWMgZGF0YSBmb3IgdGhpcyBwbGF0Zm9ybSBkZXZpY2UKICAqIEBzaXplOiBzaXplIG9mIHBsYXRmb3JtIHNwZWNpZmljIGRhdGEKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBzaW1wbGUgcGxhdGZvcm0gZGV2aWNlIHRoYXQgcmVxdWlyZXMgbWluaW1hbAotICogcmVzb3VyY2UgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBDYW5uZWQgcmVsZWFzZSBmdW5jdGlvbiBmcmVlaW5nIG1lbW9yeQotICogYWxsb2NhdGVkIGZvciB0aGUgZGV2aWNlIGFsbG93cyBkcml2ZXJzIHVzaW5nIHN1Y2ggZGV2aWNlcyB0byBiZQotICogdW5sb2FkZWQgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIGRldmljZSB0byBiZQotICogZHJvcHBlZC4KLSAqCiAgKiBSZXR1cm5zICZzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBvaW50ZXIgb24gc3VjY2Vzcywgb3IgRVJSX1BUUigpIG9uIGVycm9yLgogICovCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YSgKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdF9vcl9tb2R1bGUgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3Jlc25kYXRhKAogCQlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsCiAJCWNvbnN0IGNoYXIgKm5hbWUsIGludCBpZCwKKwkJY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsIHVuc2lnbmVkIGludCBudW0sCiAJCWNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKQogeworCWludCByZXQgPSAtRU5PTUVNOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0JaW50IHJldHZhbDsKIAogCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MobmFtZSwgaWQpOwotCWlmICghcGRldikgewotCQlyZXR2YWwgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yOwotCX0KKwlpZiAoIXBkZXYpCisJCWdvdG8gZXJyOwogCiAJcGRldi0+ZGV2LnBhcmVudCA9IHBhcmVudDsKIAotCWlmIChzaXplKSB7Ci0JCXJldHZhbCA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCBkYXRhLCBzaXplKTsKLQkJaWYgKHJldHZhbCkKLQkJCWdvdG8gZXJyb3I7CisJaWYgKHJlcykgeworCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCByZXMsIG51bSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKIAl9CiAKLQlyZXR2YWwgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZXJyb3I7CisJaWYgKGRhdGEpIHsKKwkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIGRhdGEsIHNpemUpOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisJfQorCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKKwlpZiAocmV0KSB7CitlcnI6CisJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQogCiAJcmV0dXJuIHBkZXY7Ci0KLWVycm9yOgotCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7Ci0JcmV0dXJuIEVSUl9QVFIocmV0dmFsKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9kYXRhKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9yZXNuZGF0YSk7CiAKIHN0YXRpYyBpbnQgcGxhdGZvcm1fZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCiB7CkBAIC02MzUsNiArNTg0LDEyIEBACiBzdGF0aWMgaW50IHBsYXRmb3JtX3VldmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudikKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJaW50IHJjOworCisJLyogU29tZSBkZXZpY2VzIGhhdmUgZXh0cmEgT0YgZGF0YSBhbmQgYW4gT0Ytc3R5bGUgTU9EQUxJQVMgKi8KKwlyYyA9IG9mX2RldmljZV91ZXZlbnQoZGV2LGVudik7CisJaWYgKHJjICE9IC1FTk9ERVYpCisJCXJldHVybiByYzsKIAogCWFkZF91ZXZlbnRfdmFyKGVudiwgIk1PREFMSUFTPSVzJXMiLCBQTEFURk9STV9NT0RVTEVfUFJFRklYLAogCQkocGRldi0+aWRfZW50cnkpID8gcGRldi0+aWRfZW50cnktPm5hbWUgOiBwZGV2LT5uYW1lKTsKQEAgLTY3Myw3ICs2MjgsMTEgQEAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqcGRydiA9IHRvX3BsYXRmb3JtX2RyaXZlcihkcnYpOwogCi0JLyogbWF0Y2ggYWdhaW5zdCB0aGUgaWQgdGFibGUgZmlyc3QgKi8KKwkvKiBBdHRlbXB0IGFuIE9GIHN0eWxlIG1hdGNoIGZpcnN0ICovCisJaWYgKG9mX2RyaXZlcl9tYXRjaF9kZXZpY2UoZGV2LCBkcnYpKQorCQlyZXR1cm4gMTsKKworCS8qIFRoZW4gdHJ5IHRvIG1hdGNoIGFnYWluc3QgdGhlIGlkIHRhYmxlICovCiAJaWYgKHBkcnYtPmlkX3RhYmxlKQogCQlyZXR1cm4gcGxhdGZvcm1fbWF0Y2hfaWQocGRydi0+aWRfdGFibGUsIHBkZXYpICE9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9NYWtlZmlsZSBiL2RyaXZlcnMvYmFzZS9wb3dlci9NYWtlZmlsZQppbmRleCA4OWRlNzUzLi5jYmNjZjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogb2JqLSQoQ09ORklHX1BNKQkrPSBzeXNmcy5vCi1vYmotJChDT05GSUdfUE1fU0xFRVApCSs9IG1haW4ubworb2JqLSQoQ09ORklHX1BNX1NMRUVQKQkrPSBtYWluLm8gd2FrZXVwLm8KIG9iai0kKENPTkZJR19QTV9SVU5USU1FKQkrPSBydW50aW1lLm8KIG9iai0kKENPTkZJR19QTV9PUFMpCSs9IGdlbmVyaWNfb3BzLm8KIG9iai0kKENPTkZJR19QTV9UUkFDRV9SVEMpCSs9IHRyYWNlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCmluZGV4IDk0MWZjYjguLjU0MTlhNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwpAQCAtNTksNiArNTksNyBAQAogewogCWRldi0+cG93ZXIuc3RhdHVzID0gRFBNX09OOwogCWluaXRfY29tcGxldGlvbigmZGV2LT5wb3dlci5jb21wbGV0aW9uKTsKKwlkZXYtPnBvd2VyLndha2V1cF9jb3VudCA9IDA7CiAJcG1fcnVudGltZV9pbml0KGRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCmluZGV4IGIwZWMwZTkuLmI3OGM0MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYwpAQCAtMTIzLDYgKzEyMyw0NSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocG1fcnVudGltZV9pZGxlKTsKIAorCisvKioKKyAqIHVwZGF0ZV9wbV9ydW50aW1lX2FjY291bnRpbmcgLSBVcGRhdGUgdGhlIHRpbWUgYWNjb3VudGluZyBvZiBwb3dlciBzdGF0ZXMKKyAqIEBkZXY6IERldmljZSB0byB1cGRhdGUgdGhlIGFjY291bnRpbmcgZm9yCisgKgorICogSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBoYXZlIHRpbWUgYWNjb3VudGluZyBvZiB0aGUgdmFyaW91cyBwb3dlciBzdGF0ZXMKKyAqIChhcyB1c2VkIGJ5IHByb2dyYW1zIHN1Y2ggYXMgUG93ZXJUT1AgdG8gc2hvdyB0aGUgZWZmZWN0aXZlbmVzcyBvZiBydW50aW1lCisgKiBQTSksIHdlIG5lZWQgdG8gdHJhY2sgdGhlIHRpbWUgc3BlbnQgaW4gZWFjaCBzdGF0ZS4KKyAqIHVwZGF0ZV9wbV9ydW50aW1lX2FjY291bnRpbmcgbXVzdCBiZSBjYWxsZWQgZWFjaCB0aW1lIGJlZm9yZSB0aGUKKyAqIHJ1bnRpbWVfc3RhdHVzIGZpZWxkIGlzIHVwZGF0ZWQsIHRvIGFjY291bnQgdGhlIHRpbWUgaW4gdGhlIG9sZCBzdGF0ZQorICogY29ycmVjdGx5LgorICovCit2b2lkIHVwZGF0ZV9wbV9ydW50aW1lX2FjY291bnRpbmcoc3RydWN0IGRldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKKwlpbnQgZGVsdGE7CisKKwlkZWx0YSA9IG5vdyAtIGRldi0+cG93ZXIuYWNjb3VudGluZ190aW1lc3RhbXA7CisKKwlpZiAoZGVsdGEgPCAwKQorCQlkZWx0YSA9IDA7CisKKwlkZXYtPnBvd2VyLmFjY291bnRpbmdfdGltZXN0YW1wID0gbm93OworCisJaWYgKGRldi0+cG93ZXIuZGlzYWJsZV9kZXB0aCA+IDApCisJCXJldHVybjsKKworCWlmIChkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzID09IFJQTV9TVVNQRU5ERUQpCisJCWRldi0+cG93ZXIuc3VzcGVuZGVkX2ppZmZpZXMgKz0gZGVsdGE7CisJZWxzZQorCQlkZXYtPnBvd2VyLmFjdGl2ZV9qaWZmaWVzICs9IGRlbHRhOworfQorCitzdGF0aWMgdm9pZCBfX3VwZGF0ZV9ydW50aW1lX3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGVudW0gcnBtX3N0YXR1cyBzdGF0dXMpCit7CisJdXBkYXRlX3BtX3J1bnRpbWVfYWNjb3VudGluZyhkZXYpOworCWRldi0+cG93ZXIucnVudGltZV9zdGF0dXMgPSBzdGF0dXM7Cit9CisKIC8qKgogICogX19wbV9ydW50aW1lX3N1c3BlbmQgLSBDYXJyeSBvdXQgcnVuLXRpbWUgc3VzcGVuZCBvZiBnaXZlbiBkZXZpY2UuCiAgKiBAZGV2OiBEZXZpY2UgdG8gc3VzcGVuZC4KQEAgLTE5Nyw3ICsyMzYsNyBAQAogCQlnb3RvIHJlcGVhdDsKIAl9CiAKLQlkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzID0gUlBNX1NVU1BFTkRJTkc7CisJX191cGRhdGVfcnVudGltZV9zdGF0dXMoZGV2LCBSUE1fU1VTUEVORElORyk7CiAJZGV2LT5wb3dlci5kZWZlcnJlZF9yZXN1bWUgPSBmYWxzZTsKIAogCWlmIChkZXYtPmJ1cyAmJiBkZXYtPmJ1cy0+cG0gJiYgZGV2LT5idXMtPnBtLT5ydW50aW1lX3N1c3BlbmQpIHsKQEAgLTIyOCw3ICsyNjcsNyBAQAogCX0KIAogCWlmIChyZXR2YWwpIHsKLQkJZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyA9IFJQTV9BQ1RJVkU7CisJCV9fdXBkYXRlX3J1bnRpbWVfc3RhdHVzKGRldiwgUlBNX0FDVElWRSk7CiAJCWlmIChyZXR2YWwgPT0gLUVBR0FJTiB8fCByZXR2YWwgPT0gLUVCVVNZKSB7CiAJCQlpZiAoZGV2LT5wb3dlci50aW1lcl9leHBpcmVzID09IDApCiAJCQkJbm90aWZ5ID0gdHJ1ZTsKQEAgLTIzNyw3ICsyNzYsNyBAQAogCQkJcG1fcnVudGltZV9jYW5jZWxfcGVuZGluZyhkZXYpOwogCQl9CiAJfSBlbHNlIHsKLQkJZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyA9IFJQTV9TVVNQRU5ERUQ7CisJCV9fdXBkYXRlX3J1bnRpbWVfc3RhdHVzKGRldiwgUlBNX1NVU1BFTkRFRCk7CiAJCXBtX3J1bnRpbWVfZGVhY3RpdmF0ZV90aW1lcihkZXYpOwogCiAJCWlmIChkZXYtPnBhcmVudCkgewpAQCAtMzgxLDcgKzQyMCw3IEBACiAJCWdvdG8gcmVwZWF0OwogCX0KIAotCWRldi0+cG93ZXIucnVudGltZV9zdGF0dXMgPSBSUE1fUkVTVU1JTkc7CisJX191cGRhdGVfcnVudGltZV9zdGF0dXMoZGV2LCBSUE1fUkVTVU1JTkcpOwogCiAJaWYgKGRldi0+YnVzICYmIGRldi0+YnVzLT5wbSAmJiBkZXYtPmJ1cy0+cG0tPnJ1bnRpbWVfcmVzdW1lKSB7CiAJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKQEAgLTQxMSwxMCArNDUwLDEwIEBACiAJfQogCiAJaWYgKHJldHZhbCkgewotCQlkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzID0gUlBNX1NVU1BFTkRFRDsKKwkJX191cGRhdGVfcnVudGltZV9zdGF0dXMoZGV2LCBSUE1fU1VTUEVOREVEKTsKIAkJcG1fcnVudGltZV9jYW5jZWxfcGVuZGluZyhkZXYpOwogCX0gZWxzZSB7Ci0JCWRldi0+cG93ZXIucnVudGltZV9zdGF0dXMgPSBSUE1fQUNUSVZFOworCQlfX3VwZGF0ZV9ydW50aW1lX3N0YXR1cyhkZXYsIFJQTV9BQ1RJVkUpOwogCQlpZiAocGFyZW50KQogCQkJYXRvbWljX2luYygmcGFyZW50LT5wb3dlci5jaGlsZF9jb3VudCk7CiAJfQpAQCAtODQ4LDcgKzg4Nyw3IEBACiAJfQogCiAgb3V0X3NldDoKLQlkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzID0gc3RhdHVzOworCV9fdXBkYXRlX3J1bnRpbWVfc3RhdHVzKGRldiwgc3RhdHVzKTsKIAlkZXYtPnBvd2VyLnJ1bnRpbWVfZXJyb3IgPSAwOwogIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnBvd2VyLmxvY2ssIGZsYWdzKTsKQEAgLTEwNzcsNiArMTExNiw3IEBACiAJZGV2LT5wb3dlci5yZXF1ZXN0X3BlbmRpbmcgPSBmYWxzZTsKIAlkZXYtPnBvd2VyLnJlcXVlc3QgPSBSUE1fUkVRX05PTkU7CiAJZGV2LT5wb3dlci5kZWZlcnJlZF9yZXN1bWUgPSBmYWxzZTsKKwlkZXYtPnBvd2VyLmFjY291bnRpbmdfdGltZXN0YW1wID0gamlmZmllczsKIAlJTklUX1dPUksoJmRldi0+cG93ZXIud29yaywgcG1fcnVudGltZV93b3JrKTsKIAogCWRldi0+cG93ZXIudGltZXJfZXhwaXJlcyA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvc3lzZnMuYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9zeXNmcy5jCmluZGV4IGE0YzMzYmMuLmU1NmI0MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9zeXNmcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9zeXNmcy5jCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgInBvd2VyLmgiCiAKIC8qCkBAIC03Myw2ICs3NCw4IEBACiAgKglkZXZpY2UgYXJlIGtub3duIHRvIHRoZSBQTSBjb3JlLiAgSG93ZXZlciwgZm9yIHNvbWUgZGV2aWNlcyB0aGlzCiAgKglhdHRyaWJ1dGUgaXMgc2V0IHRvICJlbmFibGVkIiBieSBidXMgdHlwZSBjb2RlIG9yIGRldmljZSBkcml2ZXJzIGFuZCBpbgogICoJdGhhdCBjYXNlcyBpdCBzaG91bGQgYmUgc2FmZSB0byBsZWF2ZSB0aGUgZGVmYXVsdCB2YWx1ZS4KKyAqCisgKgl3YWtldXBfY291bnQgLSBSZXBvcnQgdGhlIG51bWJlciBvZiB3YWtldXAgZXZlbnRzIHJlbGF0ZWQgdG8gdGhlIGRldmljZQogICovCiAKIHN0YXRpYyBjb25zdCBjaGFyIGVuYWJsZWRbXSA9ICJlbmFibGVkIjsKQEAgLTEwOCw2ICsxMTEsNjUgQEAKIH0KIAogc3RhdGljIERFVklDRV9BVFRSKGNvbnRyb2wsIDA2NDQsIGNvbnRyb2xfc2hvdywgY29udHJvbF9zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IHJ0cG1fYWN0aXZlX3RpbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgcmV0OworCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisJdXBkYXRlX3BtX3J1bnRpbWVfYWNjb3VudGluZyhkZXYpOworCXJldCA9IHNwcmludGYoYnVmLCAiJWlcbiIsIGppZmZpZXNfdG9fbXNlY3MoZGV2LT5wb3dlci5hY3RpdmVfamlmZmllcykpOworCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIocnVudGltZV9hY3RpdmVfdGltZSwgMDQ0NCwgcnRwbV9hY3RpdmVfdGltZV9zaG93LCBOVUxMKTsKKworc3RhdGljIHNzaXplX3QgcnRwbV9zdXNwZW5kZWRfdGltZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCWludCByZXQ7CisJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwl1cGRhdGVfcG1fcnVudGltZV9hY2NvdW50aW5nKGRldik7CisJcmV0ID0gc3ByaW50ZihidWYsICIlaVxuIiwKKwkJamlmZmllc190b19tc2VjcyhkZXYtPnBvd2VyLnN1c3BlbmRlZF9qaWZmaWVzKSk7CisJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihydW50aW1lX3N1c3BlbmRlZF90aW1lLCAwNDQ0LCBydHBtX3N1c3BlbmRlZF90aW1lX3Nob3csIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBydHBtX3N0YXR1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCWNvbnN0IGNoYXIgKnA7CisKKwlpZiAoZGV2LT5wb3dlci5ydW50aW1lX2Vycm9yKSB7CisJCXAgPSAiZXJyb3JcbiI7CisJfSBlbHNlIGlmIChkZXYtPnBvd2VyLmRpc2FibGVfZGVwdGgpIHsKKwkJcCA9ICJ1bnN1cHBvcnRlZFxuIjsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGRldi0+cG93ZXIucnVudGltZV9zdGF0dXMpIHsKKwkJY2FzZSBSUE1fU1VTUEVOREVEOgorCQkJcCA9ICJzdXNwZW5kZWRcbiI7CisJCQlicmVhazsKKwkJY2FzZSBSUE1fU1VTUEVORElORzoKKwkJCXAgPSAic3VzcGVuZGluZ1xuIjsKKwkJCWJyZWFrOworCQljYXNlIFJQTV9SRVNVTUlORzoKKwkJCXAgPSAicmVzdW1pbmdcbiI7CisJCQlicmVhazsKKwkJY2FzZSBSUE1fQUNUSVZFOgorCQkJcCA9ICJhY3RpdmVcbiI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlPOworCQl9CisJfQorCXJldHVybiBzcHJpbnRmKGJ1ZiwgcCk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihydW50aW1lX3N0YXR1cywgMDQ0NCwgcnRwbV9zdGF0dXNfc2hvdywgTlVMTCk7CiAjZW5kaWYKIAogc3RhdGljIHNzaXplX3QKQEAgLTE0NCw2ICsyMDYsMTYgQEAKIAogc3RhdGljIERFVklDRV9BVFRSKHdha2V1cCwgMDY0NCwgd2FrZV9zaG93LCB3YWtlX3N0b3JlKTsKIAorI2lmZGVmIENPTkZJR19QTV9TTEVFUAorc3RhdGljIHNzaXplX3Qgd2FrZXVwX2NvdW50X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1XG4iLCBkZXYtPnBvd2VyLndha2V1cF9jb3VudCk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUih3YWtldXBfY291bnQsIDA0NDQsIHdha2V1cF9jb3VudF9zaG93LCBOVUxMKTsKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1BNX0FEVkFOQ0VEX0RFQlVHCiAjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKIApAQCAtMTcyLDI3ICsyNDQsOCBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgImVuYWJsZWRcbiIpOwogfQogCi1zdGF0aWMgc3NpemVfdCBydHBtX3N0YXR1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCWlmIChkZXYtPnBvd2VyLnJ1bnRpbWVfZXJyb3IpCi0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgImVycm9yXG4iKTsKLQlzd2l0Y2ggKGRldi0+cG93ZXIucnVudGltZV9zdGF0dXMpIHsKLQljYXNlIFJQTV9TVVNQRU5ERUQ6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgInN1c3BlbmRlZFxuIik7Ci0JY2FzZSBSUE1fU1VTUEVORElORzoKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAic3VzcGVuZGluZ1xuIik7Ci0JY2FzZSBSUE1fUkVTVU1JTkc6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgInJlc3VtaW5nXG4iKTsKLQljYXNlIFJQTV9BQ1RJVkU6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgImFjdGl2ZVxuIik7Ci0JfQotCXJldHVybiAtRUlPOwotfQotCiBzdGF0aWMgREVWSUNFX0FUVFIocnVudGltZV91c2FnZSwgMDQ0NCwgcnRwbV91c2FnZWNvdW50X3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHJ1bnRpbWVfYWN0aXZlX2tpZHMsIDA0NDQsIHJ0cG1fY2hpbGRyZW5fc2hvdywgTlVMTCk7Ci1zdGF0aWMgREVWSUNFX0FUVFIocnVudGltZV9zdGF0dXMsIDA0NDQsIHJ0cG1fc3RhdHVzX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHJ1bnRpbWVfZW5hYmxlZCwgMDQ0NCwgcnRwbV9lbmFibGVkX3Nob3csIE5VTEwpOwogCiAjZW5kaWYKQEAgLTIyOCwxNCArMjgxLDE5IEBACiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqIHBvd2VyX2F0dHJzW10gPSB7CiAjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKIAkmZGV2X2F0dHJfY29udHJvbC5hdHRyLAorCSZkZXZfYXR0cl9ydW50aW1lX3N0YXR1cy5hdHRyLAorCSZkZXZfYXR0cl9ydW50aW1lX3N1c3BlbmRlZF90aW1lLmF0dHIsCisJJmRldl9hdHRyX3J1bnRpbWVfYWN0aXZlX3RpbWUuYXR0ciwKICNlbmRpZgogCSZkZXZfYXR0cl93YWtldXAuYXR0ciwKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKKwkmZGV2X2F0dHJfd2FrZXVwX2NvdW50LmF0dHIsCisjZW5kaWYKICNpZmRlZiBDT05GSUdfUE1fQURWQU5DRURfREVCVUcKIAkmZGV2X2F0dHJfYXN5bmMuYXR0ciwKICNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQogCSZkZXZfYXR0cl9ydW50aW1lX3VzYWdlLmF0dHIsCiAJJmRldl9hdHRyX3J1bnRpbWVfYWN0aXZlX2tpZHMuYXR0ciwKLQkmZGV2X2F0dHJfcnVudGltZV9zdGF0dXMuYXR0ciwKIAkmZGV2X2F0dHJfcnVudGltZV9lbmFibGVkLmF0dHIsCiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL3dha2V1cC5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3dha2V1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNTk0ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmMKQEAgLTAsMCArMSwyNDcgQEAKKy8qCisgKiBkcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmMgLSBTeXN0ZW0gd2FrZXVwIGV2ZW50cyBmcmFtZXdvcmsKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPiwgTm92ZWxsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTHYyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisKKy8qCisgKiBJZiBzZXQsIHRoZSBzdXNwZW5kL2hpYmVybmF0ZSBjb2RlIHdpbGwgYWJvcnQgdHJhbnNpdGlvbnMgdG8gYSBzbGVlcCBzdGF0ZQorICogaWYgd2FrZXVwIGV2ZW50cyBhcmUgcmVnaXN0ZXJlZCBkdXJpbmcgb3IgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSB0cmFuc2l0aW9uLgorICovCitib29sIGV2ZW50c19jaGVja19lbmFibGVkOworCisvKiBUaGUgY291bnRlciBvZiByZWdpc3RlcmVkIHdha2V1cCBldmVudHMuICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBldmVudF9jb3VudDsKKy8qIEEgcHJlc2VydmVkIG9sZCB2YWx1ZSBvZiBldmVudF9jb3VudC4gKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVkX2V2ZW50X2NvdW50OworLyogVGhlIGNvdW50ZXIgb2Ygd2FrZXVwIGV2ZW50cyBiZWluZyBwcm9jZXNzZWQuICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBldmVudHNfaW5fcHJvZ3Jlc3M7CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZXZlbnRzX2xvY2spOworCitzdGF0aWMgdm9pZCBwbV93YWtldXBfdGltZXJfZm4odW5zaWduZWQgbG9uZyBkYXRhKTsKKworc3RhdGljIERFRklORV9USU1FUihldmVudHNfdGltZXIsIHBtX3dha2V1cF90aW1lcl9mbiwgMCwgMCk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBldmVudHNfdGltZXJfZXhwaXJlczsKKworLyoKKyAqIFRoZSBmdW5jdGlvbnMgYmVsb3cgdXNlIHRoZSBvYnNlcnZhdGlvbiB0aGF0IGVhY2ggd2FrZXVwIGV2ZW50IHN0YXJ0cyBhCisgKiBwZXJpb2QgaW4gd2hpY2ggdGhlIHN5c3RlbSBzaG91bGQgbm90IGJlIHN1c3BlbmRlZC4gIFRoZSBtb21lbnQgdGhpcyBwZXJpb2QKKyAqIHdpbGwgZW5kIGRlcGVuZHMgb24gaG93IHRoZSB3YWtldXAgZXZlbnQgaXMgZ29pbmcgdG8gYmUgcHJvY2Vzc2VkIGFmdGVyIGJlaW5nCisgKiBkZXRlY3RlZCBhbmQgYWxsIG9mIHRoZSBwb3NzaWJsZSBjYXNlcyBjYW4gYmUgZGl2aWRlZCBpbnRvIHR3byBkaXN0aW5jdAorICogZ3JvdXBzLgorICoKKyAqIEZpcnN0LCBhIHdha2V1cCBldmVudCBtYXkgYmUgZGV0ZWN0ZWQgYnkgdGhlIHNhbWUgZnVuY3Rpb25hbCB1bml0IHRoYXQgd2lsbAorICogY2Fycnkgb3V0IHRoZSBlbnRpcmUgcHJvY2Vzc2luZyBvZiBpdCBhbmQgcG9zc2libHkgd2lsbCBwYXNzIGl0IHRvIHVzZXIgc3BhY2UKKyAqIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuICBJbiB0aGF0IGNhc2UgdGhlIGZ1bmN0aW9uYWwgdW5pdCB0aGF0IGhhcyBkZXRlY3RlZAorICogdGhlIGV2ZW50IG1heSBsYXRlciAiY2xvc2UiIHRoZSAibm8gc3VzcGVuZCIgcGVyaW9kIGFzc29jaWF0ZWQgd2l0aCBpdAorICogZGlyZWN0bHkgYXMgc29vbiBhcyBpdCBoYXMgYmVlbiBkZWFsdCB3aXRoLiAgVGhlIHBhaXIgb2YgcG1fc3RheV9hd2FrZSgpIGFuZAorICogcG1fcmVsYXgoKSwgYmFsYW5jZWQgd2l0aCBlYWNoIG90aGVyLCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIHN1Y2gKKyAqIHNpdHVhdGlvbnMuCisgKgorICogU2Vjb25kLCBhIHdha2V1cCBldmVudCBtYXkgYmUgZGV0ZWN0ZWQgYnkgb25lIGZ1bmN0aW9uYWwgdW5pdCBhbmQgcHJvY2Vzc2VkCisgKiBieSBhbm90aGVyIG9uZS4gIEluIHRoYXQgY2FzZSB0aGUgdW5pdCB0aGF0IGhhcyBkZXRlY3RlZCBpdCBjYW5ub3QgcmVhbGx5CisgKiAiY2xvc2UiIHRoZSAibm8gc3VzcGVuZCIgcGVyaW9kIGFzc29jaWF0ZWQgd2l0aCBpdCwgdW5sZXNzIGl0IGtub3dzIGluCisgKiBhZHZhbmNlIHdoYXQncyBnb2luZyB0byBoYXBwZW4gdG8gdGhlIGV2ZW50IGR1cmluZyBwcm9jZXNzaW5nLiAgVGhpcworICoga25vd2xlZGdlLCBob3dldmVyLCBtYXkgbm90IGJlIGF2YWlsYWJsZSB0byBpdCwgc28gaXQgY2FuIHNpbXBseSBzcGVjaWZ5IHRpbWUKKyAqIHRvIHdhaXQgYmVmb3JlIHRoZSBzeXN0ZW0gY2FuIGJlIHN1c3BlbmRlZCBhbmQgcGFzcyBpdCBhcyB0aGUgc2Vjb25kCisgKiBhcmd1bWVudCBvZiBwbV93YWtldXBfZXZlbnQoKS4KKyAqLworCisvKioKKyAqIHBtX3N0YXlfYXdha2UgLSBOb3RpZnkgdGhlIFBNIGNvcmUgdGhhdCBhIHdha2V1cCBldmVudCBpcyBiZWluZyBwcm9jZXNzZWQuCisgKiBAZGV2OiBEZXZpY2UgdGhlIHdha2V1cCBldmVudCBpcyByZWxhdGVkIHRvLgorICoKKyAqIE5vdGlmeSB0aGUgUE0gY29yZSBvZiBhIHdha2V1cCBldmVudCAoc2lnbmFsZWQgYnkgQGRldikgYnkgaW5jcmVtZW50aW5nIHRoZQorICogY291bnRlciBvZiB3YWtldXAgZXZlbnRzIGJlaW5nIHByb2Nlc3NlZC4gIElmIEBkZXYgaXMgbm90IE5VTEwsIHRoZSBjb3VudGVyCisgKiBvZiB3YWtldXAgZXZlbnRzIHJlbGF0ZWQgdG8gQGRldiBpcyBpbmNyZW1lbnRlZCB0b28uCisgKgorICogQ2FsbCB0aGlzIGZ1bmN0aW9uIGFmdGVyIGRldGVjdGluZyBvZiBhIHdha2V1cCBldmVudCBpZiBwbV9yZWxheCgpIGlzIGdvaW5nCisgKiB0byBiZSBjYWxsZWQgZGlyZWN0bHkgYWZ0ZXIgcHJvY2Vzc2luZyB0aGUgZXZlbnQgKGFuZCBwb3NzaWJseSBwYXNzaW5nIGl0IHRvCisgKiB1c2VyIHNwYWNlIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcpLgorICoKKyAqIEl0IGlzIHNhZmUgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGZyb20gaW50ZXJydXB0IGNvbnRleHQuCisgKi8KK3ZvaWQgcG1fc3RheV9hd2FrZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZldmVudHNfbG9jaywgZmxhZ3MpOworCWlmIChkZXYpCisJCWRldi0+cG93ZXIud2FrZXVwX2NvdW50Kys7CisKKwlldmVudHNfaW5fcHJvZ3Jlc3MrKzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZldmVudHNfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIHBtX3JlbGF4IC0gTm90aWZ5IHRoZSBQTSBjb3JlIHRoYXQgcHJvY2Vzc2luZyBvZiBhIHdha2V1cCBldmVudCBoYXMgZW5kZWQuCisgKgorICogTm90aWZ5IHRoZSBQTSBjb3JlIHRoYXQgYSB3YWtldXAgZXZlbnQgaGFzIGJlZW4gcHJvY2Vzc2VkIGJ5IGRlY3JlbWVudGluZworICogdGhlIGNvdW50ZXIgb2Ygd2FrZXVwIGV2ZW50cyBiZWluZyBwcm9jZXNzZWQgYW5kIGluY3JlbWVudGluZyB0aGUgY291bnRlcgorICogb2YgcmVnaXN0ZXJlZCB3YWtldXAgZXZlbnRzLgorICoKKyAqIENhbGwgdGhpcyBmdW5jdGlvbiBmb3Igd2FrZXVwIGV2ZW50cyB3aG9zZSBwcm9jZXNzaW5nIHN0YXJ0ZWQgd2l0aCBjYWxsaW5nCisgKiBwbV9zdGF5X2F3YWtlKCkuCisgKgorICogSXQgaXMgc2FmZSB0byBjYWxsIGl0IGZyb20gaW50ZXJydXB0IGNvbnRleHQuCisgKi8KK3ZvaWQgcG1fcmVsYXgodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmV2ZW50c19sb2NrLCBmbGFncyk7CisJaWYgKGV2ZW50c19pbl9wcm9ncmVzcykgeworCQlldmVudHNfaW5fcHJvZ3Jlc3MtLTsKKwkJZXZlbnRfY291bnQrKzsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXZlbnRzX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBwbV93YWtldXBfdGltZXJfZm4gLSBEZWxheWVkIGZpbmFsaXphdGlvbiBvZiBhIHdha2V1cCBldmVudC4KKyAqCisgKiBEZWNyZWFzZSB0aGUgY291bnRlciBvZiB3YWtldXAgZXZlbnRzIGJlaW5nIHByb2Nlc3NlZCBhZnRlciBpdCB3YXMgaW5jcmVhc2VkCisgKiBieSBwbV93YWtldXBfZXZlbnQoKS4KKyAqLworc3RhdGljIHZvaWQgcG1fd2FrZXVwX3RpbWVyX2ZuKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmV2ZW50c19sb2NrLCBmbGFncyk7CisJaWYgKGV2ZW50c190aW1lcl9leHBpcmVzCisJICAgICYmIHRpbWVfYmVmb3JlX2VxKGV2ZW50c190aW1lcl9leHBpcmVzLCBqaWZmaWVzKSkgeworCQlldmVudHNfaW5fcHJvZ3Jlc3MtLTsKKwkJZXZlbnRzX3RpbWVyX2V4cGlyZXMgPSAwOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZldmVudHNfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIHBtX3dha2V1cF9ldmVudCAtIE5vdGlmeSB0aGUgUE0gY29yZSBvZiBhIHdha2V1cCBldmVudC4KKyAqIEBkZXY6IERldmljZSB0aGUgd2FrZXVwIGV2ZW50IGlzIHJlbGF0ZWQgdG8uCisgKiBAbXNlYzogQW50aWNpcGF0ZWQgZXZlbnQgcHJvY2Vzc2luZyB0aW1lIChpbiBtaWxsaXNlY29uZHMpLgorICoKKyAqIE5vdGlmeSB0aGUgUE0gY29yZSBvZiBhIHdha2V1cCBldmVudCAoc2lnbmFsZWQgYnkgQGRldikgdGhhdCB3aWxsIHRha2UKKyAqIGFwcHJveGltYXRlbHkgQG1zZWMgbWlsbGlzZWNvbmRzIHRvIGJlIHByb2Nlc3NlZCBieSB0aGUga2VybmVsLiAgSW5jcmVtZW50CisgKiB0aGUgY291bnRlciBvZiByZWdpc3RlcmVkIHdha2V1cCBldmVudHMgYW5kIChpZiBAbXNlYyBpcyBub256ZXJvKSBzZXQgdXAKKyAqIHRoZSB3YWtldXAgZXZlbnRzIHRpbWVyIHRvIGV4ZWN1dGUgcG1fd2FrZXVwX3RpbWVyX2ZuKCkgaW4gZnV0dXJlIChpZiB0aGUKKyAqIHRpbWVyIGhhcyBub3QgYmVlbiBzZXQgdXAgYWxyZWFkeSwgaW5jcmVtZW50IHRoZSBjb3VudGVyIG9mIHdha2V1cCBldmVudHMKKyAqIGJlaW5nIHByb2Nlc3NlZCkuICBJZiBAZGV2IGlzIG5vdCBOVUxMLCB0aGUgY291bnRlciBvZiB3YWtldXAgZXZlbnRzIHJlbGF0ZWQKKyAqIHRvIEBkZXYgaXMgaW5jcmVtZW50ZWQgdG9vLgorICoKKyAqIEl0IGlzIHNhZmUgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGZyb20gaW50ZXJydXB0IGNvbnRleHQuCisgKi8KK3ZvaWQgcG1fd2FrZXVwX2V2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG1zZWMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZldmVudHNfbG9jaywgZmxhZ3MpOworCWV2ZW50X2NvdW50Kys7CisJaWYgKGRldikKKwkJZGV2LT5wb3dlci53YWtldXBfY291bnQrKzsKKworCWlmIChtc2VjKSB7CisJCXVuc2lnbmVkIGxvbmcgZXhwaXJlczsKKworCQlleHBpcmVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMobXNlYyk7CisJCWlmICghZXhwaXJlcykKKwkJCWV4cGlyZXMgPSAxOworCisJCWlmICghZXZlbnRzX3RpbWVyX2V4cGlyZXMKKwkJICAgIHx8IHRpbWVfYWZ0ZXIoZXhwaXJlcywgZXZlbnRzX3RpbWVyX2V4cGlyZXMpKSB7CisJCQlpZiAoIWV2ZW50c190aW1lcl9leHBpcmVzKQorCQkJCWV2ZW50c19pbl9wcm9ncmVzcysrOworCisJCQltb2RfdGltZXIoJmV2ZW50c190aW1lciwgZXhwaXJlcyk7CisJCQlldmVudHNfdGltZXJfZXhwaXJlcyA9IGV4cGlyZXM7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXZlbnRzX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBwbV9jaGVja193YWtldXBfZXZlbnRzIC0gQ2hlY2sgZm9yIG5ldyB3YWtldXAgZXZlbnRzLgorICoKKyAqIENvbXBhcmUgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgd2FrZXVwIGV2ZW50cyB3aXRoIGl0cyBwcmVzZXJ2ZWQKKyAqIHZhbHVlIGZyb20gdGhlIHBhc3QgdG8gY2hlY2sgaWYgbmV3IHdha2V1cCBldmVudHMgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgc2luY2UKKyAqIHRoZSBvbGQgdmFsdWUgd2FzIHN0b3JlZC4gIENoZWNrIGlmIHRoZSBjdXJyZW50IG51bWJlciBvZiB3YWtldXAgZXZlbnRzIGJlaW5nCisgKiBwcm9jZXNzZWQgaXMgemVyby4KKyAqLworYm9vbCBwbV9jaGVja193YWtldXBfZXZlbnRzKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlib29sIHJldCA9IHRydWU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXZlbnRzX2xvY2ssIGZsYWdzKTsKKwlpZiAoZXZlbnRzX2NoZWNrX2VuYWJsZWQpIHsKKwkJcmV0ID0gKGV2ZW50X2NvdW50ID09IHNhdmVkX2V2ZW50X2NvdW50KSAmJiAhZXZlbnRzX2luX3Byb2dyZXNzOworCQlldmVudHNfY2hlY2tfZW5hYmxlZCA9IHJldDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXZlbnRzX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHBtX2dldF93YWtldXBfY291bnQgLSBSZWFkIHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJlZCB3YWtldXAgZXZlbnRzLgorICogQGNvdW50OiBBZGRyZXNzIHRvIHN0b3JlIHRoZSB2YWx1ZSBhdC4KKyAqCisgKiBTdG9yZSB0aGUgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgd2FrZXVwIGV2ZW50cyBhdCB0aGUgYWRkcmVzcyBpbiBAY291bnQuICBCbG9jaworICogaWYgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHdha2V1cCBldmVudHMgYmVpbmcgcHJvY2Vzc2VkIGlzIG5vbnplcm8uCisgKgorICogUmV0dXJuIGZhbHNlIGlmIHRoZSB3YWl0IGZvciB0aGUgbnVtYmVyIG9mIHdha2V1cCBldmVudHMgYmVpbmcgcHJvY2Vzc2VkIHRvCisgKiBkcm9wIGRvd24gdG8gemVybyBoYXMgYmVlbiBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCAoYW5kIHRoZSBjdXJyZW50IG51bWJlcgorICogb2Ygd2FrZXVwIGV2ZW50cyBiZWluZyBwcm9jZXNzZWQgaXMgc3RpbGwgbm9uemVybykuICBPdGhlcndpc2UgcmV0dXJuIHRydWUuCisgKi8KK2Jvb2wgcG1fZ2V0X3dha2V1cF9jb3VudCh1bnNpZ25lZCBsb25nICpjb3VudCkKK3sKKwlib29sIHJldDsKKworCXNwaW5fbG9ja19pcnEoJmV2ZW50c19sb2NrKTsKKwlpZiAoY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJZXZlbnRzX2NoZWNrX2VuYWJsZWQgPSBmYWxzZTsKKworCXdoaWxlIChldmVudHNfaW5fcHJvZ3Jlc3MgJiYgIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmZXZlbnRzX2xvY2spOworCisJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKDEwMCkpOworCisJCXNwaW5fbG9ja19pcnEoJmV2ZW50c19sb2NrKTsKKwl9CisJKmNvdW50ID0gZXZlbnRfY291bnQ7CisJcmV0ID0gIWV2ZW50c19pbl9wcm9ncmVzczsKKwlzcGluX3VubG9ja19pcnEoJmV2ZW50c19sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHBtX3NhdmVfd2FrZXVwX2NvdW50IC0gU2F2ZSB0aGUgY3VycmVudCBudW1iZXIgb2YgcmVnaXN0ZXJlZCB3YWtldXAgZXZlbnRzLgorICogQGNvdW50OiBWYWx1ZSB0byBjb21wYXJlIHdpdGggdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgd2FrZXVwIGV2ZW50cy4KKyAqCisgKiBJZiBAY291bnQgaXMgZXF1YWwgdG8gdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgd2FrZXVwIGV2ZW50cyBhbmQgdGhlCisgKiBjdXJyZW50IG51bWJlciBvZiB3YWtldXAgZXZlbnRzIGJlaW5nIHByb2Nlc3NlZCBpcyB6ZXJvLCBzdG9yZSBAY291bnQgYXMgdGhlCisgKiBvbGQgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgd2FrZXVwIGV2ZW50cyB0byBiZSB1c2VkIGJ5IHBtX2NoZWNrX3dha2V1cF9ldmVudHMoKQorICogYW5kIHJldHVybiB0cnVlLiAgT3RoZXJ3aXNlIHJldHVybiBmYWxzZS4KKyAqLworYm9vbCBwbV9zYXZlX3dha2V1cF9jb3VudCh1bnNpZ25lZCBsb25nIGNvdW50KQoreworCWJvb2wgcmV0ID0gZmFsc2U7CisKKwlzcGluX2xvY2tfaXJxKCZldmVudHNfbG9jayk7CisJaWYgKGNvdW50ID09IGV2ZW50X2NvdW50ICYmICFldmVudHNfaW5fcHJvZ3Jlc3MpIHsKKwkJc2F2ZWRfZXZlbnRfY291bnQgPSBjb3VudDsKKwkJZXZlbnRzX2NoZWNrX2VuYWJsZWQgPSB0cnVlOworCQlyZXQgPSB0cnVlOworCX0KKwlzcGluX3VubG9ja19pcnEoJmV2ZW50c19sb2NrKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzcy5jIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCmluZGV4IDUxY2VhZWUuLmUxZTcxNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKQEAgLTMzNSw3ICszMzUsNyBAQAogc3RhdGljIGNvbnN0IGNoYXIgKnJhaWRfbGFiZWxbXSA9IHsgIjAiLCAiNCIsICIxKDErMCkiLCAiNSIsICI1KzEiLCAiQURHIiwKIAkiVU5LTk9XTiIKIH07Ci0jZGVmaW5lIFJBSURfVU5LTk9XTiAoc2l6ZW9mKHJhaWRfbGFiZWwpIC8gc2l6ZW9mKHJhaWRfbGFiZWxbMF0pLTEpCisjZGVmaW5lIFJBSURfVU5LTk9XTiAoQVJSQVlfU0laRShyYWlkX2xhYmVsKS0xKQogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmMKaW5kZXggZGZmNDg3MC4uZWMxNzExZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYworKysgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jCkBAIC0xMDg3LDcgKzEwODcsNyBAQAogCQkJfSBlbHNlIHsKIAkJCQllcG9jaC0+ZmxhZ3MgPSAwOwogCQkJCWF0b21pY19zZXQoJmVwb2NoLT5lcG9jaF9zaXplLCAwKTsKLQkJCQkvKiBhdG9taWNfc2V0KCZlcG9jaC0+YWN0aXZlLCAwKTsgaXMgYWxyYWR5IHplcm8gKi8KKwkJCQkvKiBhdG9taWNfc2V0KCZlcG9jaC0+YWN0aXZlLCAwKTsgaXMgYWxyZWFkeSB6ZXJvICovCiAJCQkJaWYgKHJ2ID09IEZFX1NUSUxMX0xJVkUpCiAJCQkJCXJ2ID0gRkVfUkVDWUNMRUQ7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL25iZC5jIGIvZHJpdmVycy9ibG9jay9uYmQuYwppbmRleCAyMThkMDkxLi4xNmMzYzg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKQEAgLTQsNyArNCw3IEBACiAgKiBOb3RlIHRoYXQgeW91IGNhbiBub3Qgc3dhcCBvdmVyIHRoaXMgdGhpbmcsIHlldC4gU2VlbXMgdG8gd29yayBidXQKICAqIGRlYWRsb2NrcyBzb21ldGltZXMgLSB5b3UgY2FuIG5vdCBzd2FwIG92ZXIgVENQIGluIGdlbmVyYWwuCiAgKiAKLSAqIENvcHlyaWdodCAxOTk3LTIwMDAsIDIwMDggUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PgorICogQ29weXJpZ2h0IDE5OTctMjAwMCwgMjAwOCBQYXZlbCBNYWNoZWsgPHBhdmVsQHVjdy5jej4KICAqIFBhcnRzIGNvcHlyaWdodCAyMDAxIFN0ZXZlbiBXaGl0ZWhvdXNlIDxzdGV2ZUBjaHlnd3luLmNvbT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgR1BMdjIgb3IgbGF0ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYyBiL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCmluZGV4IDI1OGJjMmEuLjIzYjdjNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCisrKyBiL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCkBAIC0yMjUsMTYgKzIyNSw2IEBACiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiZGV2LT5iZF9kaXNrOwogCXN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrID0gZGlzay0+cHJpdmF0ZV9kYXRhOwogCi0JaWYgKGNtZCA9PSAweDU2NDI0OTQ0KSB7IC8qICdWQklEJyAqLwotCQl2b2lkIF9fdXNlciAqdXNyX2RhdGEgPSAodm9pZCBfX3VzZXIgKilkYXRhOwotCQljaGFyIGlkX3N0cltWSVJUSU9fQkxLX0lEX0JZVEVTXTsKLQkJaW50IGVycjsKLQotCQllcnIgPSB2aXJ0YmxrX2dldF9pZChkaXNrLCBpZF9zdHIpOwotCQlpZiAoIWVyciAmJiBjb3B5X3RvX3VzZXIodXNyX2RhdGEsIGlkX3N0ciwgVklSVElPX0JMS19JRF9CWVRFUykpCi0JCQllcnIgPSAtRUZBVUxUOwotCQlyZXR1cm4gZXJyOwotCX0KIAkvKgogCSAqIE9ubHkgYWxsb3cgdGhlIGdlbmVyaWMgU0NTSSBpb2N0bHMgaWYgdGhlIGhvc3QgY2FuIHN1cHBvcnQgaXQuCiAJICovCkBAIC0yODEsNiArMjcxLDI3IEBACiAJcmV0dXJuIGluZGV4IDw8IFBBUlRfQklUUzsKIH0KIAorc3RhdGljIHNzaXplX3QgdmlydGJsa19zZXJpYWxfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGRldl90b19kaXNrKGRldik7CisJaW50IGVycjsKKworCS8qIHN5c2ZzIGdpdmVzIHVzIGEgUEFHRV9TSVpFIGJ1ZmZlciAqLworCUJVSUxEX0JVR19PTihQQUdFX1NJWkUgPCBWSVJUSU9fQkxLX0lEX0JZVEVTKTsKKworCWJ1ZltWSVJUSU9fQkxLX0lEX0JZVEVTXSA9ICdcMCc7CisJZXJyID0gdmlydGJsa19nZXRfaWQoZGlzaywgYnVmKTsKKwlpZiAoIWVycikKKwkJcmV0dXJuIHN0cmxlbihidWYpOworCisJaWYgKGVyciA9PSAtRUlPKSAvKiBVbnN1cHBvcnRlZD8gTWFrZSBpdCBlbXB0eS4gKi8KKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gZXJyOworfQorREVWSUNFX0FUVFIoc2VyaWFsLCBTX0lSVUdPLCB2aXJ0YmxrX3NlcmlhbF9zaG93LCBOVUxMKTsKKwogc3RhdGljIGludCBfX2RldmluaXQgdmlydGJsa19wcm9iZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKIHsKIAlzdHJ1Y3QgdmlydGlvX2JsayAqdmJsazsKQEAgLTM2NiwxMiArMzc3LDMyIEBACiAJdmJsay0+ZGlzay0+ZHJpdmVyZnNfZGV2ID0gJnZkZXYtPmRldjsKIAlpbmRleCsrOwogCi0JLyogSWYgYmFycmllcnMgYXJlIHN1cHBvcnRlZCwgdGVsbCBibG9jayBsYXllciB0aGF0IHF1ZXVlIGlzIG9yZGVyZWQgKi8KLQlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19CTEtfRl9GTFVTSCkpCisJaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fQkxLX0ZfRkxVU0gpKSB7CisJCS8qCisJCSAqIElmIHRoZSBGTFVTSCBmZWF0dXJlIGlzIHN1cHBvcnRlZCB3ZSBkbyBoYXZlIHN1cHBvcnQgZm9yCisJCSAqIGZsdXNoaW5nIGEgdm9sYXRpbGUgd3JpdGUgY2FjaGUgb24gdGhlIGhvc3QuICBVc2UgdGhhdAorCQkgKiB0byBpbXBsZW1lbnQgd3JpdGUgYmFycmllciBzdXBwb3J0LgorCQkgKi8KIAkJYmxrX3F1ZXVlX29yZGVyZWQocSwgUVVFVUVfT1JERVJFRF9EUkFJTl9GTFVTSCwKIAkJCQkgIHZpcnRibGtfcHJlcGFyZV9mbHVzaCk7Ci0JZWxzZSBpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19CTEtfRl9CQVJSSUVSKSkKKwl9IGVsc2UgaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fQkxLX0ZfQkFSUklFUikpIHsKKwkJLyoKKwkJICogSWYgdGhlIEJBUlJJRVIgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgdGhlIGhvc3QgZXhwZWN0cyB1cworCQkgKiB0byBvcmRlciByZXF1ZXN0IGJ5IHRhZ3MuICBUaGlzIGltcGxpZXMgdGhlcmUgaXMgbm90CisJCSAqIHZvbGF0aWxlIHdyaXRlIGNhY2hlIG9uIHRoZSBob3N0LCBhbmQgdGhhdCB0aGUgaG9zdAorCQkgKiBuZXZlciByZS1vcmRlcnMgb3V0c3RhbmRpbmcgSS9PLiAgVGhpcyBmZWF0dXJlIGlzIG5vdAorCQkgKiB1c2VmdWwgZm9yIHJlYWwgbGlmZSBzY2VuYXJpb3VzIGFuZCBkZXByZWNhdGVkLgorCQkgKi8KIAkJYmxrX3F1ZXVlX29yZGVyZWQocSwgUVVFVUVfT1JERVJFRF9UQUcsIE5VTEwpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIElmIHRoZSBGTFVTSCBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgd2UgbXVzdCBhc3N1bWUgdGhhdAorCQkgKiB0aGUgaG9zdCBkb2VzIG5vdCBwZXJmb3JtIGFueSBraW5kIG9mIHZvbGF0aWxlIHdyaXRlCisJCSAqIGNhY2hpbmcuIFdlIHN0aWxsIG5lZWQgdG8gZHJhaW4gdGhlIHF1ZXVlIHRvIHByb3ZpZGVyCisJCSAqIHByb3BlciBiYXJyaWVyIHNlbWFudGljcy4KKwkJICovCisJCWJsa19xdWV1ZV9vcmRlcmVkKHEsIFFVRVVFX09SREVSRURfRFJBSU4sIE5VTEwpOworCX0KIAogCS8qIElmIGRpc2sgaXMgcmVhZC1vbmx5IGluIHRoZSBob3N0LCB0aGUgZ3Vlc3Qgc2hvdWxkIG9iZXkgKi8KIAlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19CTEtfRl9STykpCkBAIC00NDUsOCArNDc2LDE1IEBACiAKIAogCWFkZF9kaXNrKHZibGstPmRpc2spOworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkaXNrX3RvX2Rldih2YmxrLT5kaXNrKSwgJmRldl9hdHRyX3NlcmlhbCk7CisJaWYgKGVycikKKwkJZ290byBvdXRfZGVsX2Rpc2s7CisKIAlyZXR1cm4gMDsKIAorb3V0X2RlbF9kaXNrOgorCWRlbF9nZW5kaXNrKHZibGstPmRpc2spOworCWJsa19jbGVhbnVwX3F1ZXVlKHZibGstPmRpc2stPnF1ZXVlKTsKIG91dF9wdXRfZGlzazoKIAlwdXRfZGlzayh2YmxrLT5kaXNrKTsKIG91dF9tZW1wb29sOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYyBiL2RyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmMKaW5kZXggODJlZDQwMy4uZjYzYWMzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSA8eGVuL2dyYW50X3RhYmxlLmg+CiAjaW5jbHVkZSA8eGVuL2V2ZW50cy5oPgogI2luY2x1ZGUgPHhlbi9wYWdlLmg+CisjaW5jbHVkZSA8eGVuL3BsYXRmb3JtX3BjaS5oPgogCiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9ncmFudF90YWJsZS5oPgogI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvaW8vYmxraWYuaD4KQEAgLTczNyw2ICs3MzgsMzUgQEAKIAkJfQogCX0KIAorCWlmICh4ZW5faHZtX2RvbWFpbigpKSB7CisJCWNoYXIgKnR5cGU7CisJCWludCBsZW47CisJCS8qIG5vIHVucGx1ZyBoYXMgYmVlbiBkb25lOiBkbyBub3QgaG9vayBkZXZpY2VzICE9IHhlbiB2YmRzICovCisJCWlmICh4ZW5fcGxhdGZvcm1fcGNpX3VucGx1ZyAmIFhFTl9VTlBMVUdfSUdOT1JFKSB7CisJCQlpbnQgbWFqb3I7CisKKwkJCWlmICghVkRFVl9JU19FWFRFTkRFRCh2ZGV2aWNlKSkKKwkJCQltYWpvciA9IEJMS0lGX01BSk9SKHZkZXZpY2UpOworCQkJZWxzZQorCQkJCW1ham9yID0gWEVOVkJEX01BSk9SOworCisJCQlpZiAobWFqb3IgIT0gWEVOVkJEX01BSk9SKSB7CisJCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCQkJIiVzOiBIVk0gZG9lcyBub3Qgc3VwcG9ydCB2YmQgJWQgYXMgeGVuIGJsb2NrIGRldmljZVxuIiwKKwkJCQkJCV9fRlVOQ1RJT05fXywgdmRldmljZSk7CisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CisJCX0KKwkJLyogZG8gbm90IGNyZWF0ZSBhIFBWIGNkcm9tIGRldmljZSBpZiB3ZSBhcmUgYW4gSFZNIGd1ZXN0ICovCisJCXR5cGUgPSB4ZW5idXNfcmVhZChYQlRfTklMLCBkZXYtPm5vZGVuYW1lLCAiZGV2aWNlLXR5cGUiLCAmbGVuKTsKKwkJaWYgKElTX0VSUih0eXBlKSkKKwkJCXJldHVybiAtRU5PREVWOworCQlpZiAoc3RybmNtcCh0eXBlLCAiY2Ryb20iLCA1KSA9PSAwKSB7CisJCQlrZnJlZSh0eXBlKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCWtmcmVlKHR5cGUpOworCX0KIAlpbmZvID0ga3phbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWluZm8pIHsKIAkJeGVuYnVzX2Rldl9mYXRhbChkZXYsIC1FTk9NRU0sICJhbGxvY2F0aW5nIGluZm8gc3RydWN0dXJlIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnIGIvZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZwppbmRleCAwNThmYmNjLi4wMmRlZWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWcKQEAgLTU4LDYgKzU4LDE4IEBACiAKIAkgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBIQ0kgQkNTUCBwcm90b2NvbC4KIAorY29uZmlnIEJUX0hDSVVBUlRfQVRIM0sKKwlib29sICJBdGhlcm9zIEFSMzAweCBzZXJpYWwgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEJUX0hDSVVBUlQKKwloZWxwCisJICBIQ0lBVEgzSyAoSENJIEF0aGVyb3MgQVIzMDB4KSBpcyBhIHNlcmlhbCBwcm90b2NvbCBmb3IKKwkgIGNvbW11bmljYXRpb24gYmV0d2VlbiBob3N0IGFuZCBBdGhlcm9zIEFSMzAweCBCbHVldG9vdGggZGV2aWNlcy4KKwkgIFRoaXMgcHJvdG9jb2wgZW5hYmxlcyBBUjMwMHggY2hpcHMgdG8gYmUgZW5hYmxlZCB3aXRoCisJICBwb3dlciBtYW5hZ2VtZW50IHN1cHBvcnQuCisJICBFbmFibGUgdGhpcyBpZiB5b3UgaGF2ZSBBdGhlcm9zIEFSMzAweCBzZXJpYWwgQmx1ZXRvb3RoIGRldmljZS4KKworCSAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1cHBvcnQgZm9yIEhDSSBVQVJUIEFUSDNLIHByb3RvY29sLgorCiBjb25maWcgQlRfSENJVUFSVF9MTAogCWJvb2wgIkhDSUxMIHByb3RvY29sIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBCVF9IQ0lVQVJUCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZSBiL2RyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlCmluZGV4IDdlNWFlZDUuLjcxYmRmMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlCkBAIC0yNiw0ICsyNiw1IEBACiBoY2lfdWFydC0kKENPTkZJR19CVF9IQ0lVQVJUX0g0KQkrPSBoY2lfaDQubwogaGNpX3VhcnQtJChDT05GSUdfQlRfSENJVUFSVF9CQ1NQKQkrPSBoY2lfYmNzcC5vCiBoY2lfdWFydC0kKENPTkZJR19CVF9IQ0lVQVJUX0xMKQkrPSBoY2lfbGwubworaGNpX3VhcnQtJChDT05GSUdfQlRfSENJVUFSVF9BVEgzSykJKz0gaGNpX2F0aC5vCiBoY2lfdWFydC1vYmpzCQkJCTo9ICQoaGNpX3VhcnQteSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2JjbTIwM3guYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2JjbTIwM3guYwppbmRleCBiMGM4NGMxLi44YjFiNjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9iY20yMDN4LmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYmNtMjAzeC5jCkBAIC0yMjQsNyArMjI0LDcgQEAKIAogCUJUX0RCRygiZmlybXdhcmUgZGF0YSAlcCBzaXplICV6dSIsIGZpcm13YXJlLT5kYXRhLCBmaXJtd2FyZS0+c2l6ZSk7CiAKLQlkYXRhLT5md19kYXRhID0ga21hbGxvYyhmaXJtd2FyZS0+c2l6ZSwgR0ZQX0tFUk5FTCk7CisJZGF0YS0+ZndfZGF0YSA9IGttZW1kdXAoZmlybXdhcmUtPmRhdGEsIGZpcm13YXJlLT5zaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRhdGEtPmZ3X2RhdGEpIHsKIAkJQlRfRVJSKCJDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGZpcm13YXJlIGltYWdlIik7CiAJCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOwpAQCAtMjM0LDcgKzIzNCw2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCW1lbWNweShkYXRhLT5md19kYXRhLCBmaXJtd2FyZS0+ZGF0YSwgZmlybXdhcmUtPnNpemUpOwogCWRhdGEtPmZ3X3NpemUgPSBmaXJtd2FyZS0+c2l6ZTsKIAlkYXRhLT5md19zZW50ID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYmx1ZWNhcmRfY3MuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2JsdWVjYXJkX2NzLmMKaW5kZXggNmQzNGY0MC4uZDUyZTkwYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2JsdWVjYXJkX2NzLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYmx1ZWNhcmRfY3MuYwpAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc2NvZGUuaD4KQEAgLTE2MCw3ICsxNTksNyBAQAogc3RhdGljIHZvaWQgYmx1ZWNhcmRfYWN0aXZpdHlfbGVkX3RpbWVvdXQodV9sb25nIGFyZykKIHsKIAlibHVlY2FyZF9pbmZvX3QgKmluZm8gPSAoYmx1ZWNhcmRfaW5mb190ICopYXJnOwotCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCiAJaWYgKCF0ZXN0X2JpdChDQVJEX0hBU19QQ0NBUkRfSUQsICYoaW5mby0+aHdfc3RhdGUpKSkKIAkJcmV0dXJuOwpAQCAtMTc3LDcgKzE3Niw3IEBACiAKIHN0YXRpYyB2b2lkIGJsdWVjYXJkX2VuYWJsZV9hY3Rpdml0eV9sZWQoYmx1ZWNhcmRfaW5mb190ICppbmZvKQogewotCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCiAJaWYgKCF0ZXN0X2JpdChDQVJEX0hBU19QQ0NBUkRfSUQsICYoaW5mby0+aHdfc3RhdGUpKSkKIAkJcmV0dXJuOwpAQCAtMjMzLDcgKzIzMiw3IEBACiAJfQogCiAJZG8gewotCQlyZWdpc3RlciB1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKKwkJcmVnaXN0ZXIgdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPnBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAJCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBvZmZzZXQ7CiAJCXJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgY29tbWFuZDsKIAkJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZWFkeV9iaXQ7CkBAIC0zODAsNyArMzc5LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CisJaW9iYXNlID0gaW5mby0+cF9kZXYtPnJlc291cmNlWzBdLT5zdGFydDsKIAogCWlmICh0ZXN0X2JpdChYTUlUX1NFTkRJTkdfUkVBRFksICYoaW5mby0+dHhfc3RhdGUpKSkKIAkJYmx1ZWNhcmRfZW5hYmxlX2FjdGl2aXR5X2xlZChpbmZvKTsKQEAgLTUwOSw3ICs1MDgsNyBAQAogCWlmICghdGVzdF9iaXQoQ0FSRF9SRUFEWSwgJihpbmZvLT5od19zdGF0ZSkpKQogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKLQlpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCWlvYmFzZSA9IGluZm8tPnBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAKIAlzcGluX2xvY2soJihpbmZvLT5sb2NrKSk7CiAKQEAgLTYyMyw3ICs2MjIsNyBAQAogc3RhdGljIGludCBibHVlY2FyZF9oY2lfb3BlbihzdHJ1Y3QgaGNpX2RldiAqaGRldikKIHsKIAlibHVlY2FyZF9pbmZvX3QgKmluZm8gPSAoYmx1ZWNhcmRfaW5mb190ICopKGhkZXYtPmRyaXZlcl9kYXRhKTsKLQl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKKwl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+cF9kZXYtPnJlc291cmNlWzBdLT5zdGFydDsKIAogCWlmICh0ZXN0X2JpdChDQVJEX0hBU19QQ0NBUkRfSUQsICYoaW5mby0+aHdfc3RhdGUpKSkKIAkJYmx1ZWNhcmRfaGNpX3NldF9iYXVkX3JhdGUoaGRldiwgREVGQVVMVF9CQVVEX1JBVEUpOwpAQCAtNjQzLDcgKzY0Miw3IEBACiBzdGF0aWMgaW50IGJsdWVjYXJkX2hjaV9jbG9zZShzdHJ1Y3QgaGNpX2RldiAqaGRldikKIHsKIAlibHVlY2FyZF9pbmZvX3QgKmluZm8gPSAoYmx1ZWNhcmRfaW5mb190ICopKGhkZXYtPmRyaXZlcl9kYXRhKTsKLQl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKKwl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+cF9kZXYtPnJlc291cmNlWzBdLT5zdGFydDsKIAogCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KEhDSV9SVU5OSU5HLCAmKGhkZXYtPmZsYWdzKSkpCiAJCXJldHVybiAwOwpAQCAtNzEwLDcgKzcwOSw3IEBACiAKIHN0YXRpYyBpbnQgYmx1ZWNhcmRfb3BlbihibHVlY2FyZF9pbmZvX3QgKmluZm8pCiB7Ci0JdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CisJdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPnBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXY7CiAJdW5zaWduZWQgY2hhciBpZDsKIApAQCAtODI5LDcgKzgyOCw3IEBACiAKIHN0YXRpYyBpbnQgYmx1ZWNhcmRfY2xvc2UoYmx1ZWNhcmRfaW5mb190ICppbmZvKQogewotCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gaW5mby0+aGRldjsKIAogCWlmICghaGRldikKQEAgLTg2Niw5ICs4NjUsNiBAQAogCWluZm8tPnBfZGV2ID0gbGluazsKIAlsaW5rLT5wcml2ID0gaW5mbzsKIAotCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JbGluay0+aW8uTnVtUG9ydHMxID0gODsKLQogCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIApAQCAtODkxLDEyICs4ODcsMTQgQEAKIAlpbnQgaSwgbjsKIAogCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAweDIwOwotCWxpbmstPmlvLk51bVBvcnRzMSA9IDY0OwotCWxpbmstPmlvLklPQWRkckxpbmVzID0gNjsKKworCWxpbmstPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwlsaW5rLT5yZXNvdXJjZVswXS0+ZW5kID0gNjQ7CisJbGluay0+aW9fbGluZXMgPSA2OwogCiAJZm9yIChuID0gMDsgbiA8IDB4NDAwOyBuICs9IDB4NDApIHsKLQkJbGluay0+aW8uQmFzZVBvcnQxID0gbiBeIDB4MzAwOwotCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKKwkJbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gbiBeIDB4MzAwOworCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluayk7CiAJCWlmIChpID09IDApCiAJCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9icGExMHguYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2JwYTEweC5jCmluZGV4IGQ5NDVjZDEuLjc1MWIzMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2JwYTEweC5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2JwYTEweC5jCkBAIC02Miw3ICs2Miw3IEBACiAJX191OCAgICB0eXBlOwogCV9fbGUxNiAgc251bTsKIAlfX2xlMTYgIGRsZW47Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0YXRpYyBpbnQgYnBhMTB4X3JlY3Yoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGludCBxdWV1ZSwgdm9pZCAqYnVmLCBpbnQgY291bnQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMKaW5kZXggMjFlMDVmZC4uN2FiOGYyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnQzY19jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0M2NfY3MuYwpAQCAtNDUsNyArNDUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc2NvZGUuaD4KQEAgLTE4OSw3ICsxODgsNyBAQAogCQlyZXR1cm47CiAKIAlkbyB7Ci0JCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCQlyZWdpc3RlciB1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+cF9kZXYtPnJlc291cmNlWzBdLT5zdGFydDsKIAkJcmVnaXN0ZXIgc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJcmVnaXN0ZXIgaW50IGxlbjsKIApAQCAtMjI3LDcgKzIyNiw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCWlvYmFzZSA9IGluZm8tPnBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAKIAlhdmFpbCA9IGJ0M2NfcmVhZChpb2Jhc2UsIDB4NzAwNik7CiAJLy9wcmludGsoImJ0M2NfY3M6IHJlY2VpdmluZyAlZCBieXRlc1xuIiwgYXZhaWwpOwpAQCAtMzQ4LDcgKzM0Nyw3IEBACiAJCS8qIG91ciBpcnEgaGFuZGxlciBpcyBzaGFyZWQgKi8KIAkJcmV0dXJuIElSUV9OT05FOwogCi0JaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKKwlpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCiAJc3Bpbl9sb2NrKCYoaW5mby0+bG9jaykpOwogCkBAIC00ODEsNyArNDgwLDcgQEAKIAl1bnNpZ25lZCBpbnQgaW9iYXNlLCBzaXplLCBhZGRyLCBmY3MsIHRtcDsKIAlpbnQgaSwgZXJyID0gMDsKIAotCWlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CisJaW9iYXNlID0gaW5mby0+cF9kZXYtPnJlc291cmNlWzBdLT5zdGFydDsKIAogCS8qIFJlc2V0ICovCiAJYnQzY19pb193cml0ZShpb2Jhc2UsIDB4ODA0MCwgMHgwNDA0KTsKQEAgLTY1OCw4ICs2NTcsOCBAQAogCWluZm8tPnBfZGV2ID0gbGluazsKIAlsaW5rLT5wcml2ID0gaW5mbzsKIAotCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JbGluay0+aW8uTnVtUG9ydHMxID0gODsKKwlsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJbGluay0+cmVzb3VyY2VbMF0tPmVuZCA9IDg7CiAKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CkBAIC02ODQsMTQgKzY4MywxNCBAQAogewogCXVuc2lnbmVkIGxvbmcgdHJ5ID0gKHVuc2lnbmVkIGxvbmcpIHByaXZfZGF0YTsKIAorCXBfZGV2LT5pb19saW5lcyA9ICh0cnkgPT0gMCkgPyAxNiA6IGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCiAJaWYgKGNmLT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpCiAJCXBfZGV2LT5jb25mLlZwcCA9IGNmLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOwogCWlmICgoY2YtPmlvLm53aW4gPiAwKSAmJiAoY2YtPmlvLndpblswXS5sZW4gPT0gOCkgJiYKIAkgICAgKGNmLT5pby53aW5bMF0uYmFzZSAhPSAwKSkgewotCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOwotCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSAodHJ5ID09IDApID8gMTYgOgotCQkJY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKQorCQlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gY2YtPmlvLndpblswXS5iYXNlOworCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2KSkKIAkJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVOT0RFVjsKQEAgLTcwOCw5ICs3MDcsOSBAQAogCiAJaWYgKChjZi0+aW8ubndpbiA+IDApICYmICgoY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0spIDw9IDMpKSB7CiAJCWZvciAoaiA9IDA7IGogPCA1OyBqKyspIHsKLQkJCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBiYXNlW2pdOwotCQkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gYmFzZVtqXSA/IDE2IDogMzsKLQkJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKQorCQkJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGJhc2Vbal07CisJCQlwX2Rldi0+aW9fbGluZXMgPSBiYXNlW2pdID8gMTYgOiAzOworCQkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldikpCiAJCQkJcmV0dXJuIDA7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfZGVidWdmcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX2RlYnVnZnMuYwppbmRleCBiNTBiNDFkLi41NDczOWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9kZWJ1Z2ZzLmMKQEAgLTIxNiw3ICsyMTYsNyBAQAogc3RhdGljIHNzaXplX3QgYnRtcnZsX2hzY21kX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKIAkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdiA9IChzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAljaGFyIGJ1ZlsxNl07CiAJbG9uZyByZXN1bHQsIHJldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX2Rydi5oIGIvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX2Rydi5oCmluZGV4IGJlZDBiYTYuLjkwYmRhNTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfZHJ2LmgKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX2Rydi5oCkBAIC03Niw2ICs3Niw3IEBACiAJaW50ICgqaHdfaG9zdF90b19jYXJkKSAoc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2LAogCQkJCXU4ICpwYXlsb2FkLCB1MTYgbmIpOwogCWludCAoKmh3X3dha2V1cF9maXJtd2FyZSkgKHN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdik7CisJaW50ICgqaHdfcHJvY2Vzc19pbnRfc3RhdHVzKSAoc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2KTsKIAlzcGlubG9ja190IGRyaXZlcl9sb2NrOwkJLyogc3BpbmxvY2sgdXNlZCBieSBkcml2ZXIgKi8KICNpZmRlZiBDT05GSUdfREVCVUdfRlMKIAl2b2lkICpkZWJ1Z2ZzX2RhdGE7CkBAIC0xMTgsMTMgKzExOSwxMyBAQAogCV9fbGUxNiBvY2Zfb2dmOwogCXU4IGxlbmd0aDsKIAl1OCBkYXRhWzRdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYnRtcnZsX2V2ZW50IHsKIAl1OCBlYzsJCS8qIGV2ZW50IGNvdW50ZXIgKi8KIAl1OCBsZW5ndGg7CiAJdTggZGF0YVs0XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogUHJvdG90eXBlIG9mIGdsb2JhbCBmdW5jdGlvbiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfbWFpbi5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX21haW4uYwppbmRleCBlZTM3ZWYwLi4wZDMyZWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfbWFpbi5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9tYWluLmMKQEAgLTUwMiwxNCArNTAyLDE3IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOwogCQlpZiAoYWRhcHRlci0+aW50X2NvdW50KSB7CiAJCQlhZGFwdGVyLT5pbnRfY291bnQgPSAwOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKKwkJCXByaXYtPmh3X3Byb2Nlc3NfaW50X3N0YXR1cyhwcml2KTsKIAkJfSBlbHNlIGlmIChhZGFwdGVyLT5wc19zdGF0ZSA9PSBQU19TTEVFUCAmJgogCQkJCQkhc2tiX3F1ZXVlX2VtcHR5KCZhZGFwdGVyLT50eF9xdWV1ZSkpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CiAJCQlhZGFwdGVyLT53YWtldXBfdHJpZXMrKzsKIAkJCXByaXYtPmh3X3dha2V1cF9maXJtd2FyZShwcml2KTsKIAkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOwogCiAJCWlmIChhZGFwdGVyLT5wc19zdGF0ZSA9PSBQU19TTEVFUCkKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX3NkaW8uYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9zZGlvLmMKaW5kZXggZGYwNzczZS4uZGNjMmE2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX3NkaW8uYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfc2Rpby5jCkBAIC00Nyw2ICs0Nyw3IEBACiAgKiBtb2R1bGVfZXhpdCBmdW5jdGlvbiBpcyBjYWxsZWQuCiAgKi8KIHN0YXRpYyB1OCB1c2VyX3JtbW9kOworc3RhdGljIHU4IHNkaW9faXJlZzsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBidG1ydmxfc2Rpb19kZXZpY2UgYnRtcnZsX3NkaW9fc2Q2ODg4ID0gewogCS5oZWxwZXIJCT0gInNkODY4OF9oZWxwZXIuYmluIiwKQEAgLTgzLDEwICs4NCwxMCBAQAogCSpkYXQgPSAwOwogCiAJZndzMCA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywgQ0FSRF9GV19TVEFUVVMwX1JFRywgJnJldCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC1FSU87CiAKLQlpZiAoIXJldCkKLQkJZndzMSA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywgQ0FSRF9GV19TVEFUVVMxX1JFRywgJnJldCk7Ci0KKwlmd3MxID0gc2Rpb19yZWFkYihjYXJkLT5mdW5jLCBDQVJEX0ZXX1NUQVRVUzFfUkVHLCAmcmV0KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gLUVJTzsKIApAQCAtMjE2LDcgKzIxNyw3IEBACiAKIAl0bXBobHByYnVmc3ogPSBBTElHTl9TWihCVE1fVVBMRF9TSVpFLCBCVFNESU9fRE1BX0FMSUdOKTsKIAotCXRtcGhscHJidWYgPSBrbWFsbG9jKHRtcGhscHJidWZzeiwgR0ZQX0tFUk5FTCk7CisJdG1waGxwcmJ1ZiA9IGt6YWxsb2ModG1waGxwcmJ1ZnN6LCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRtcGhscHJidWYpIHsKIAkJQlRfRVJSKCJVbmFibGUgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBoZWxwZXIuIgogCQkJIiBUZXJtaW5hdGluZyBkb3dubG9hZCIpOwpAQCAtMjI0LDggKzIyNSw2IEBACiAJCWdvdG8gZG9uZTsKIAl9CiAKLQltZW1zZXQodG1waGxwcmJ1ZiwgMCwgdG1waGxwcmJ1ZnN6KTsKLQogCWhlbHBlcmJ1ZiA9ICh1OCAqKSBBTElHTl9BRERSKHRtcGhscHJidWYsIEJUU0RJT19ETUFfQUxJR04pOwogCiAJLyogUGVyZm9ybSBoZWxwZXIgZGF0YSB0cmFuc2ZlciAqLwpAQCAtMzE4LDcgKzMxNyw3IEBACiAJQlRfREJHKCJEb3dubG9hZGluZyBGVyBpbWFnZSAoJWQgYnl0ZXMpIiwgZmlybXdhcmVsZW4pOwogCiAJdG1wZndidWZzeiA9IEFMSUdOX1NaKEJUTV9VUExEX1NJWkUsIEJUU0RJT19ETUFfQUxJR04pOwotCXRtcGZ3YnVmID0ga21hbGxvYyh0bXBmd2J1ZnN6LCBHRlBfS0VSTkVMKTsKKwl0bXBmd2J1ZiA9IGt6YWxsb2ModG1wZndidWZzeiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0bXBmd2J1ZikgewogCQlCVF9FUlIoIlVuYWJsZSB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIGZpcm13YXJlLiIKIAkJICAgICAgICIgVGVybWluYXRpbmcgZG93bmxvYWQiKTsKQEAgLTMyNiw4ICszMjUsNiBAQAogCQlnb3RvIGRvbmU7CiAJfQogCi0JbWVtc2V0KHRtcGZ3YnVmLCAwLCB0bXBmd2J1ZnN6KTsKLQogCS8qIEVuc3VyZSBhbGlnbmVkIGZpcm13YXJlIGJ1ZmZlciAqLwogCWZ3YnVmID0gKHU4ICopIEFMSUdOX0FERFIodG1wZndidWYsIEJUU0RJT19ETUFfQUxJR04pOwogCkBAIC01NTUsNzggKzU1Miw3OSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgYnRtcnZsX3NkaW9fZ2V0X2ludF9zdGF0dXMoc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2LCB1OCAqIGlyZWcpCitzdGF0aWMgaW50IGJ0bXJ2bF9zZGlvX3Byb2Nlc3NfaW50X3N0YXR1cyhzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYpCiB7Ci0JaW50IHJldDsKLQl1OCBzZGlvX2lyZWcgPSAwOworCXVsb25nIGZsYWdzOworCXU4IGlyZWc7CiAJc3RydWN0IGJ0bXJ2bF9zZGlvX2NhcmQgKmNhcmQgPSBwcml2LT5idG1ydmxfZGV2LmNhcmQ7CiAKLQkqaXJlZyA9IDA7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CisJaXJlZyA9IHNkaW9faXJlZzsKKwlzZGlvX2lyZWcgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CiAKLQlzZGlvX2lyZWcgPSBzZGlvX3JlYWRiKGNhcmQtPmZ1bmMsIEhPU1RfSU5UU1RBVFVTX1JFRywgJnJldCk7Ci0JaWYgKHJldCkgewotCQlCVF9FUlIoInNkaW9fcmVhZGI6IHJlYWQgaW50IHN0YXR1cyByZWdpc3RlciBmYWlsZWQiKTsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBkb25lOwotCX0KLQotCWlmIChzZGlvX2lyZWcgIT0gMCkgewotCQkvKgotCQkgKiBETl9MRF9IT1NUX0lOVF9TVEFUVVMgYW5kL29yIFVQX0xEX0hPU1RfSU5UX1NUQVRVUwotCQkgKiBDbGVhciB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciBhbmQgcmUtZW5hYmxlIHRoZQotCQkgKiBpbnRlcnJ1cHQuCi0JCSAqLwotCQlCVF9EQkcoInNkaW9faXJlZyA9IDB4JXgiLCBzZGlvX2lyZWcpOwotCi0JCXNkaW9fd3JpdGViKGNhcmQtPmZ1bmMsIH4oc2Rpb19pcmVnKSAmIChETl9MRF9IT1NUX0lOVF9TVEFUVVMgfAotCQkJCQkJCVVQX0xEX0hPU1RfSU5UX1NUQVRVUyksCi0JCQkgICAgSE9TVF9JTlRTVEFUVVNfUkVHLCAmcmV0KTsKLQkJaWYgKHJldCkgewotCQkJQlRfRVJSKCJzZGlvX3dyaXRlYjogY2xlYXIgaW50IHN0YXR1cyByZWdpc3RlciAiCi0JCQkJImZhaWxlZCIpOwotCQkJcmV0ID0gLUVJTzsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCX0KLQotCWlmIChzZGlvX2lyZWcgJiBETl9MRF9IT1NUX0lOVF9TVEFUVVMpIHsKKwlzZGlvX2NsYWltX2hvc3QoY2FyZC0+ZnVuYyk7CisJaWYgKGlyZWcgJiBETl9MRF9IT1NUX0lOVF9TVEFUVVMpIHsKIAkJaWYgKHByaXYtPmJ0bXJ2bF9kZXYudHhfZG5sZF9yZHkpCiAJCQlCVF9EQkcoInR4X2RvbmUgYWxyZWFkeSByZWNlaXZlZDogIgotCQkJCSIgaW50X3N0YXR1cz0weCV4Iiwgc2Rpb19pcmVnKTsKKwkJCQkiIGludF9zdGF0dXM9MHgleCIsIGlyZWcpOwogCQllbHNlCiAJCQlwcml2LT5idG1ydmxfZGV2LnR4X2RubGRfcmR5ID0gdHJ1ZTsKIAl9CiAKLQlpZiAoc2Rpb19pcmVnICYgVVBfTERfSE9TVF9JTlRfU1RBVFVTKQorCWlmIChpcmVnICYgVVBfTERfSE9TVF9JTlRfU1RBVFVTKQogCQlidG1ydmxfc2Rpb19jYXJkX3RvX2hvc3QocHJpdik7CiAKLQkqaXJlZyA9IHNkaW9faXJlZzsKKwlzZGlvX3JlbGVhc2VfaG9zdChjYXJkLT5mdW5jKTsKIAotCXJldCA9IDA7Ci0KLWRvbmU6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgYnRtcnZsX3NkaW9faW50ZXJydXB0KHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpCiB7CiAJc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2OwotCXN0cnVjdCBoY2lfZGV2ICpoY2lkZXY7CiAJc3RydWN0IGJ0bXJ2bF9zZGlvX2NhcmQgKmNhcmQ7CisJdWxvbmcgZmxhZ3M7CiAJdTggaXJlZyA9IDA7CisJaW50IHJldDsKIAogCWNhcmQgPSBzZGlvX2dldF9kcnZkYXRhKGZ1bmMpOwotCWlmIChjYXJkICYmIGNhcmQtPnByaXYpIHsKLQkJcHJpdiA9IGNhcmQtPnByaXY7Ci0JCWhjaWRldiA9IHByaXYtPmJ0bXJ2bF9kZXYuaGNpZGV2OwotCi0JCWlmIChidG1ydmxfc2Rpb19nZXRfaW50X3N0YXR1cyhwcml2LCAmaXJlZykpCi0JCQlCVF9FUlIoInJlYWRpbmcgSE9TVF9JTlRfU1RBVFVTX1JFRyBmYWlsZWQiKTsKLQkJZWxzZQotCQkJQlRfREJHKCJIT1NUX0lOVF9TVEFUVVNfUkVHICUjeCIsIGlyZWcpOwotCi0JCWJ0bXJ2bF9pbnRlcnJ1cHQocHJpdik7CisJaWYgKCFjYXJkIHx8ICFjYXJkLT5wcml2KSB7CisJCUJUX0VSUigic2JpX2ludGVycnVwdCglcCkgY2FyZCBvciBwcml2IGlzICIKKwkJCQkiTlVMTCwgY2FyZD0lcFxuIiwgZnVuYywgY2FyZCk7CisJCXJldHVybjsKIAl9CisKKwlwcml2ID0gY2FyZC0+cHJpdjsKKworCWlyZWcgPSBzZGlvX3JlYWRiKGNhcmQtPmZ1bmMsIEhPU1RfSU5UU1RBVFVTX1JFRywgJnJldCk7CisJaWYgKHJldCkgeworCQlCVF9FUlIoInNkaW9fcmVhZGI6IHJlYWQgaW50IHN0YXR1cyByZWdpc3RlciBmYWlsZWQiKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChpcmVnICE9IDApIHsKKwkJLyoKKwkJICogRE5fTERfSE9TVF9JTlRfU1RBVFVTIGFuZC9vciBVUF9MRF9IT1NUX0lOVF9TVEFUVVMKKwkJICogQ2xlYXIgdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgYW5kIHJlLWVuYWJsZSB0aGUKKwkJICogaW50ZXJydXB0LgorCQkgKi8KKwkJQlRfREJHKCJpcmVnID0gMHgleCIsIGlyZWcpOworCisJCXNkaW9fd3JpdGViKGNhcmQtPmZ1bmMsIH4oaXJlZykgJiAoRE5fTERfSE9TVF9JTlRfU1RBVFVTIHwKKwkJCQkJVVBfTERfSE9TVF9JTlRfU1RBVFVTKSwKKwkJCQlIT1NUX0lOVFNUQVRVU19SRUcsICZyZXQpOworCQlpZiAocmV0KSB7CisJCQlCVF9FUlIoInNkaW9fd3JpdGViOiBjbGVhciBpbnQgc3RhdHVzIHJlZ2lzdGVyIGZhaWxlZCIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CisJc2Rpb19pcmVnIHw9IGlyZWc7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKKworCWJ0bXJ2bF9pbnRlcnJ1cHQocHJpdik7CiB9CiAKIHN0YXRpYyBpbnQgYnRtcnZsX3NkaW9fcmVnaXN0ZXJfZGV2KHN0cnVjdCBidG1ydmxfc2Rpb19jYXJkICpjYXJkKQpAQCAtOTMwLDYgKzkyOCw3IEBACiAJLyogSW5pdGlhbGl6ZSB0aGUgaW50ZXJmYWNlIHNwZWNpZmljIGZ1bmN0aW9uIHBvaW50ZXJzICovCiAJcHJpdi0+aHdfaG9zdF90b19jYXJkID0gYnRtcnZsX3NkaW9faG9zdF90b19jYXJkOwogCXByaXYtPmh3X3dha2V1cF9maXJtd2FyZSA9IGJ0bXJ2bF9zZGlvX3dha2V1cF9mdzsKKwlwcml2LT5od19wcm9jZXNzX2ludF9zdGF0dXMgPSBidG1ydmxfc2Rpb19wcm9jZXNzX2ludF9zdGF0dXM7CiAKIAlpZiAoYnRtcnZsX3JlZ2lzdGVyX2hkZXYocHJpdikpIHsKIAkJQlRfRVJSKCJSZWdpc3RlciBoZGV2IGZhaWxlZCEiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dWFydF9jcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1YXJ0X2NzLmMKaW5kZXggNGVkNzI4OC4uMWM0ZjVlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnR1YXJ0X2NzLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1YXJ0X2NzLmMKQEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc2NvZGUuaD4KQEAgLTE0Myw3ICsxNDIsNyBAQAogCX0KIAogCWRvIHsKLQkJcmVnaXN0ZXIgdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CisJCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCQlyZWdpc3RlciBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQlyZWdpc3RlciBpbnQgbGVuOwogCkBAIC0xODQsNyArMTgzLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CisJaW9iYXNlID0gaW5mby0+cF9kZXYtPnJlc291cmNlWzBdLT5zdGFydDsKIAogCWRvIHsKIAkJaW5mby0+aGRldi0+c3RhdC5ieXRlX3J4Kys7CkBAIC0yOTgsNyArMjk3LDcgQEAKIAkJLyogb3VyIGlycSBoYW5kbGVyIGlzIHNoYXJlZCAqLwogCQlyZXR1cm4gSVJRX05PTkU7CiAKLQlpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCWlvYmFzZSA9IGluZm8tPnBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAKIAlzcGluX2xvY2soJihpbmZvLT5sb2NrKSk7CiAKQEAgLTM1NSw3ICszNTQsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKKwlpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJihpbmZvLT5sb2NrKSwgZmxhZ3MpOwogCkBAIC00NzksNyArNDc4LDcgQEAKIHN0YXRpYyBpbnQgYnR1YXJ0X29wZW4oYnR1YXJ0X2luZm9fdCAqaW5mbykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCXN0cnVjdCBoY2lfZGV2ICpoZGV2OwogCiAJc3Bpbl9sb2NrX2luaXQoJihpbmZvLT5sb2NrKSk7CkBAIC01NDksNyArNTQ4LDcgQEAKIHN0YXRpYyBpbnQgYnR1YXJ0X2Nsb3NlKGJ0dWFydF9pbmZvX3QgKmluZm8pCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKKwl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+cF9kZXYtPnJlc291cmNlWzBdLT5zdGFydDsKIAlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGluZm8tPmhkZXY7CiAKIAlpZiAoIWhkZXYpCkBAIC01ODcsOCArNTg2LDggQEAKIAlpbmZvLT5wX2RldiA9IGxpbms7CiAJbGluay0+cHJpdiA9IGluZm87CiAKLQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotCWxpbmstPmlvLk51bVBvcnRzMSA9IDg7CisJbGluay0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF84OworCWxpbmstPnJlc291cmNlWzBdLT5lbmQgPSA4OwogCiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwpAQCAtNjEzLDE0ICs2MTIsMTQgQEAKIHsKIAlpbnQgKnRyeSA9IHByaXZfZGF0YTsKIAorCXBfZGV2LT5pb19saW5lcyA9ICh0cnkgPT0gMCkgPyAxNiA6IGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCiAJaWYgKGNmLT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpCiAJCXBfZGV2LT5jb25mLlZwcCA9IGNmLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOwogCWlmICgoY2YtPmlvLm53aW4gPiAwKSAmJiAoY2YtPmlvLndpblswXS5sZW4gPT0gOCkgJiYKIAkgICAgKGNmLT5pby53aW5bMF0uYmFzZSAhPSAwKSkgewotCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOwotCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSAoKnRyeSA9PSAwKSA/IDE2IDoKLQkJCWNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGNmLT5pby53aW5bMF0uYmFzZTsKKwkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldikpCiAJCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FTk9ERVY7CkBAIC02MzcsOSArNjM2LDkgQEAKIAogCWlmICgoY2YtPmlvLm53aW4gPiAwKSAmJiAoKGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLKSA8PSAzKSkgewogCQlmb3IgKGogPSAwOyBqIDwgNTsgaisrKSB7Ci0JCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gYmFzZVtqXTsKLQkJCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IGJhc2Vbal0gPyAxNiA6IDM7Ci0JCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkKKwkJCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBiYXNlW2pdOworCQkJcF9kZXYtPmlvX2xpbmVzID0gYmFzZVtqXSA/IDE2IDogMzsKKwkJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpKQogCQkJCXJldHVybiAwOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKaW5kZXggNWQ5Y2M1My4uZDIyY2UzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCkBAIC01OSw2ICs1OSw5IEBACiAJLyogR2VuZXJpYyBCbHVldG9vdGggVVNCIGRldmljZSAqLwogCXsgVVNCX0RFVklDRV9JTkZPKDB4ZTAsIDB4MDEsIDB4MDEpIH0sCiAKKwkvKiBBcHBsZSBpTWFjMTEsMSAqLworCXsgVVNCX0RFVklDRSgweDA1YWMsIDB4ODIxNSkgfSwKKwogCS8qIEFWTSBCbHVlRlJJVFohIFVTQiB2Mi4wICovCiAJeyBVU0JfREVWSUNFKDB4MDU3YywgMHgzODAwKSB9LAogCkBAIC0xNDYsNiArMTQ5LDcgQEAKICNkZWZpbmUgQlRVU0JfQlVMS19SVU5OSU5HCTEKICNkZWZpbmUgQlRVU0JfSVNPQ19SVU5OSU5HCTIKICNkZWZpbmUgQlRVU0JfU1VTUEVORElORwkzCisjZGVmaW5lIEJUVVNCX0RJRF9JU09fUkVTVU1FCTQKIAogc3RydWN0IGJ0dXNiX2RhdGEgewogCXN0cnVjdCBoY2lfZGV2ICAgICAgICpoZGV2OwpAQCAtMTc5LDcgKzE4Myw2IEBACiAJdW5zaWduZWQgaW50IHNjb19udW07CiAJaW50IGlzb2NfYWx0c2V0dGluZzsKIAlpbnQgc3VzcGVuZF9jb3VudDsKLQlpbnQgZGlkX2lzb19yZXN1bWU6MTsKIH07CiAKIHN0YXRpYyBpbnQgaW5jX3R4KHN0cnVjdCBidHVzYl9kYXRhICpkYXRhKQpAQCAtODA3LDcgKzgxMCw3IEBACiAJaW50IGVycjsKIAogCWlmIChoZGV2LT5jb25uX2hhc2guc2NvX251bSA+IDApIHsKLQkJaWYgKCFkYXRhLT5kaWRfaXNvX3Jlc3VtZSkgeworCQlpZiAoIXRlc3RfYml0KEJUVVNCX0RJRF9JU09fUkVTVU1FLCAmZGF0YS0+ZmxhZ3MpKSB7CiAJCQllcnIgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoZGF0YS0+aXNvYyk7CiAJCQlpZiAoZXJyIDwgMCkgewogCQkJCWNsZWFyX2JpdChCVFVTQl9JU09DX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7CkBAIC04MTUsNyArODE4LDcgQEAKIAkJCQlyZXR1cm47CiAJCQl9CiAKLQkJCWRhdGEtPmRpZF9pc29fcmVzdW1lID0gMTsKKwkJCXNldF9iaXQoQlRVU0JfRElEX0lTT19SRVNVTUUsICZkYXRhLT5mbGFncyk7CiAJCX0KIAkJaWYgKGRhdGEtPmlzb2NfYWx0c2V0dGluZyAhPSAyKSB7CiAJCQljbGVhcl9iaXQoQlRVU0JfSVNPQ19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOwpAQCAtODM2LDEwICs4MzksOCBAQAogCQl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZkYXRhLT5pc29jX2FuY2hvcik7CiAKIAkJX19zZXRfaXNvY19pbnRlcmZhY2UoaGRldiwgMCk7Ci0JCWlmIChkYXRhLT5kaWRfaXNvX3Jlc3VtZSkgewotCQkJZGF0YS0+ZGlkX2lzb19yZXN1bWUgPSAwOworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEJUVVNCX0RJRF9JU09fUkVTVU1FLCAmZGF0YS0+ZmxhZ3MpKQogCQkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRhdGEtPmlzb2MpOwotCQl9CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9kdGwxX2NzLmMgYi9kcml2ZXJzL2JsdWV0b290aC9kdGwxX2NzLmMKaW5kZXggZWYwNDRkNS4uZGI3YzhkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvZHRsMV9jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2R0bDFfY3MuYwpAQCAtNDEsNyArNDEsNiBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzY29kZS5oPgpAQCAtMTA0LDcgKzEwMyw3IEBACiAJdTggdHlwZTsKIAl1OCB6ZXJvOwogCXUxNiBsZW47Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBuc2hfdDsJLyogTm9raWEgU3BlY2lmaWMgSGVhZGVyICovCit9IF9fcGFja2VkIG5zaF90OwkvKiBOb2tpYSBTcGVjaWZpYyBIZWFkZXIgKi8KIAogI2RlZmluZSBOU0hMICA0CQkJCS8qIE5va2lhIFNwZWNpZmljIEhlYWRlciBMZW5ndGggKi8KIApAQCAtMTUwLDcgKzE0OSw3IEBACiAJfQogCiAJZG8gewotCQlyZWdpc3RlciB1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKKwkJcmVnaXN0ZXIgdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPnBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAJCXJlZ2lzdGVyIHN0cnVjdCBza19idWZmICpza2I7CiAJCXJlZ2lzdGVyIGludCBsZW47CiAKQEAgLTIxNSw3ICsyMTQsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKKwlpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCiAJZG8gewogCQlpbmZvLT5oZGV2LT5zdGF0LmJ5dGVfcngrKzsKQEAgLTMwMiw3ICszMDEsNyBAQAogCQkvKiBvdXIgaXJxIGhhbmRsZXIgaXMgc2hhcmVkICovCiAJCXJldHVybiBJUlFfTk9ORTsKIAotCWlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CisJaW9iYXNlID0gaW5mby0+cF9kZXYtPnJlc291cmNlWzBdLT5zdGFydDsKIAogCXNwaW5fbG9jaygmKGluZm8tPmxvY2spKTsKIApAQCAtNDYyLDcgKzQ2MSw3IEBACiBzdGF0aWMgaW50IGR0bDFfb3BlbihkdGwxX2luZm9fdCAqaW5mbykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCXN0cnVjdCBoY2lfZGV2ICpoZGV2OwogCiAJc3Bpbl9sb2NrX2luaXQoJihpbmZvLT5sb2NrKSk7CkBAIC01MDksNyArNTA4LDggQEAKIAlvdXRiKFVBUlRfTENSX1dMRU44LCBpb2Jhc2UgKyBVQVJUX0xDUik7CS8qIFJlc2V0IERMQUIgKi8KIAlvdXRiKChVQVJUX01DUl9EVFIgfCBVQVJUX01DUl9SVFMgfCBVQVJUX01DUl9PVVQyKSwgaW9iYXNlICsgVUFSVF9NQ1IpOwogCi0JaW5mby0+cmlfbGF0Y2ggPSBpbmIoaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MSArIFVBUlRfTVNSKSAmIFVBUlRfTVNSX1JJOworCWluZm8tPnJpX2xhdGNoID0gaW5iKGluZm8tPnBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgKyBVQVJUX01TUikKKwkJCQkmIFVBUlRfTVNSX1JJOwogCiAJLyogVHVybiBvbiBpbnRlcnJ1cHRzICovCiAJb3V0YihVQVJUX0lFUl9STFNJIHwgVUFSVF9JRVJfUkRJIHwgVUFSVF9JRVJfVEhSSSwgaW9iYXNlICsgVUFSVF9JRVIpOwpAQCAtNTM0LDcgKzUzNCw3IEBACiBzdGF0aWMgaW50IGR0bDFfY2xvc2UoZHRsMV9pbmZvX3QgKmluZm8pCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKKwl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+cF9kZXYtPnJlc291cmNlWzBdLT5zdGFydDsKIAlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGluZm8tPmhkZXY7CiAKIAlpZiAoIWhkZXYpCkBAIC01NzIsOCArNTcyLDggQEAKIAlpbmZvLT5wX2RldiA9IGxpbms7CiAJbGluay0+cHJpdiA9IGluZm87CiAKLQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotCWxpbmstPmlvLk51bVBvcnRzMSA9IDg7CisJbGluay0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF84OworCWxpbmstPnJlc291cmNlWzBdLT5lbmQgPSA4OwogCiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwpAQCAtNTk3LDE0ICs1OTcsMTMgQEAKIAkJCSAgdW5zaWduZWQgaW50IHZjYywKIAkJCSAgdm9pZCAqcHJpdl9kYXRhKQogewotCWlmICgoY2YtPmlvLm53aW4gPT0gMSkgJiYgKGNmLT5pby53aW5bMF0ubGVuID4gOCkpIHsKLQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGNmLT5pby53aW5bMF0uYmFzZTsKLQkJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGNmLT5pby53aW5bMF0ubGVuOwkvKnlvICovCi0JCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkKLQkJCXJldHVybiAwOwotCX0KLQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoKGNmLT5pby5ud2luICE9IDEpIHx8IChjZi0+aW8ud2luWzBdLmxlbiA8PSA4KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gY2YtPmlvLndpblswXS5iYXNlOworCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gY2YtPmlvLndpblswXS5sZW47CS8qeW8gKi8KKwlwX2Rldi0+aW9fbGluZXMgPSBjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpOwogfQogCiBzdGF0aWMgaW50IGR0bDFfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQpAQCAtNjEzLDcgKzYxMiw3IEBACiAJaW50IGk7CiAKIAkvKiBMb29rIGZvciBhIGdlbmVyaWMgZnVsbC1zaXplZCB3aW5kb3cgKi8KLQlsaW5rLT5pby5OdW1Qb3J0czEgPSA4OworCWxpbmstPnJlc291cmNlWzBdLT5lbmQgPSA4OwogCWlmIChwY21jaWFfbG9vcF9jb25maWcobGluaywgZHRsMV9jb25mY2hlY2ssIE5VTEwpIDwgMCkKIAkJZ290byBmYWlsZWQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9hdGguYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9hdGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTE2MGMxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2F0aC5jCkBAIC0wLDAgKzEsMjM1IEBACisvKgorICogIEF0aGVyb3MgQ29tbXVuaWNhdGlvbiBCbHVldG9vdGggSENJQVRIM0sgVUFSVCBwcm90b2NvbAorICoKKyAqICBIQ0lBVEgzSyAoSENJIEF0aGVyb3MgQVIzMDB4IFByb3RvY29sKSBpcyBhIEF0aGVyb3MgQ29tbXVuaWNhdGlvbidzCisgKiAgcG93ZXIgbWFuYWdlbWVudCBwcm90b2NvbCBleHRlbnNpb24gdG8gSDQgdG8gc3VwcG9ydCBBUjMwMHggQmx1ZXRvb3RoIENoaXAuCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqICBBY2tub3dsZWRnZW1lbnRzOgorICogIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiBoY2lfaDQuYywgd2hpY2ggd2FzIHdyaXR0ZW4KKyAqICBieSBNYXhpbSBLcmFzbnlhbnNreSBhbmQgTWFyY2VsIEhvbHRtYW5uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKworI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmg+CisjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9oY2lfY29yZS5oPgorCisjaW5jbHVkZSAiaGNpX3VhcnQuaCIKKworc3RydWN0IGF0aF9zdHJ1Y3QgeworCXN0cnVjdCBoY2lfdWFydCAqaHU7CisJdW5zaWduZWQgaW50IGN1cl9zbGVlcDsKKworCXN0cnVjdCBza19idWZmX2hlYWQgdHhxOworCXN0cnVjdCB3b3JrX3N0cnVjdCBjdHh0c3c7Cit9OworCitzdGF0aWMgaW50IGF0aF93YWtldXBfYXIzayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCB0ZXJtaW9zIHNldHRpbmdzOworCWludCBzdGF0dXMgPSB0dHktPmRyaXZlci0+b3BzLT50aW9jbWdldCh0dHksIE5VTEwpOworCisJaWYgKHN0YXR1cyAmIFRJT0NNX0NUUykKKwkJcmV0dXJuIHN0YXR1czsKKworCS8qIERpc2FibGUgQXV0b21hdGljIFJUU0NUUyAqLworCW5fdHR5X2lvY3RsX2hlbHBlcih0dHksIE5VTEwsIFRDR0VUUywgKHVuc2lnbmVkIGxvbmcpJnNldHRpbmdzKTsKKwlzZXR0aW5ncy5jX2NmbGFnICY9IH5DUlRTQ1RTOworCW5fdHR5X2lvY3RsX2hlbHBlcih0dHksIE5VTEwsIFRDU0VUUywgKHVuc2lnbmVkIGxvbmcpJnNldHRpbmdzKTsKKworCS8qIENsZWFyIFJUUyBmaXJzdCAqLworCXN0YXR1cyA9IHR0eS0+ZHJpdmVyLT5vcHMtPnRpb2NtZ2V0KHR0eSwgTlVMTCk7CisJdHR5LT5kcml2ZXItPm9wcy0+dGlvY21zZXQodHR5LCBOVUxMLCAweDAwLCBUSU9DTV9SVFMpOworCW1kZWxheSgyMCk7CisKKwkvKiBTZXQgUlRTLCB3YWtlIHVwIGJvYXJkICovCisJc3RhdHVzID0gdHR5LT5kcml2ZXItPm9wcy0+dGlvY21nZXQodHR5LCBOVUxMKTsKKwl0dHktPmRyaXZlci0+b3BzLT50aW9jbXNldCh0dHksIE5VTEwsIFRJT0NNX1JUUywgMHgwMCk7CisJbWRlbGF5KDIwKTsKKworCXN0YXR1cyA9IHR0eS0+ZHJpdmVyLT5vcHMtPnRpb2NtZ2V0KHR0eSwgTlVMTCk7CisKKwluX3R0eV9pb2N0bF9oZWxwZXIodHR5LCBOVUxMLCBUQ0dFVFMsICh1bnNpZ25lZCBsb25nKSZzZXR0aW5ncyk7CisJc2V0dGluZ3MuY19jZmxhZyB8PSBDUlRTQ1RTOworCW5fdHR5X2lvY3RsX2hlbHBlcih0dHksIE5VTEwsIFRDU0VUUywgKHVuc2lnbmVkIGxvbmcpJnNldHRpbmdzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIGF0aF9oY2lfdWFydF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBhdGhfc3RydWN0ICphdGg7CisJc3RydWN0IGhjaV91YXJ0ICpodTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCisJYXRoID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdGhfc3RydWN0LCBjdHh0c3cpOworCisJaHUgPSBhdGgtPmh1OworCXR0eSA9IGh1LT50dHk7CisKKwkvKiB2ZXJpZnkgYW5kIHdha2UgdXAgY29udHJvbGxlciAqLworCWlmIChhdGgtPmN1cl9zbGVlcCkgeworCQlzdGF0dXMgPSBhdGhfd2FrZXVwX2FyM2sodHR5KTsKKwkJaWYgKCEoc3RhdHVzICYgVElPQ01fQ1RTKSkKKwkJCXJldHVybjsKKwl9CisKKwkvKiBSZWFkeSB0byBzZW5kIERhdGEgKi8KKwljbGVhcl9iaXQoSENJX1VBUlRfU0VORElORywgJmh1LT50eF9zdGF0ZSk7CisJaGNpX3VhcnRfdHhfd2FrZXVwKGh1KTsKK30KKworLyogSW5pdGlhbGl6ZSBwcm90b2NvbCAqLworc3RhdGljIGludCBhdGhfb3BlbihzdHJ1Y3QgaGNpX3VhcnQgKmh1KQoreworCXN0cnVjdCBhdGhfc3RydWN0ICphdGg7CisKKwlCVF9EQkcoImh1ICVwIiwgaHUpOworCisJYXRoID0ga3phbGxvYyhzaXplb2YoKmF0aCksIEdGUF9BVE9NSUMpOworCWlmICghYXRoKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmF0aC0+dHhxKTsKKworCWh1LT5wcml2ID0gYXRoOworCWF0aC0+aHUgPSBodTsKKworCUlOSVRfV09SSygmYXRoLT5jdHh0c3csIGF0aF9oY2lfdWFydF93b3JrKTsKKworCXJldHVybiAwOworfQorCisvKiBGbHVzaCBwcm90b2NvbCBkYXRhICovCitzdGF0aWMgaW50IGF0aF9mbHVzaChzdHJ1Y3QgaGNpX3VhcnQgKmh1KQoreworCXN0cnVjdCBhdGhfc3RydWN0ICphdGggPSBodS0+cHJpdjsKKworCUJUX0RCRygiaHUgJXAiLCBodSk7CisKKwlza2JfcXVldWVfcHVyZ2UoJmF0aC0+dHhxKTsKKworCXJldHVybiAwOworfQorCisvKiBDbG9zZSBwcm90b2NvbCAqLworc3RhdGljIGludCBhdGhfY2xvc2Uoc3RydWN0IGhjaV91YXJ0ICpodSkKK3sKKwlzdHJ1Y3QgYXRoX3N0cnVjdCAqYXRoID0gaHUtPnByaXY7CisKKwlCVF9EQkcoImh1ICVwIiwgaHUpOworCisJc2tiX3F1ZXVlX3B1cmdlKCZhdGgtPnR4cSk7CisKKwljYW5jZWxfd29ya19zeW5jKCZhdGgtPmN0eHRzdyk7CisKKwlodS0+cHJpdiA9IE5VTEw7CisJa2ZyZWUoYXRoKTsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIEhDSV9PUF9BVEhfU0xFRVAgMHhGQzA0CisKKy8qIEVucXVldWUgZnJhbWUgZm9yIHRyYW5zbWl0dGlvbiAqLworc3RhdGljIGludCBhdGhfZW5xdWV1ZShzdHJ1Y3QgaGNpX3VhcnQgKmh1LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBhdGhfc3RydWN0ICphdGggPSBodS0+cHJpdjsKKworCWlmIChidF9jYihza2IpLT5wa3RfdHlwZSA9PSBIQ0lfU0NPREFUQV9QS1QpIHsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogVXBkYXRlIHBvd2VyIG1hbmFnZW1lbnQgZW5hYmxlIGZsYWcgd2l0aCBwYXJhbWV0ZXJzIG9mCisJICogSENJIHNsZWVwIGVuYWJsZSB2ZW5kb3Igc3BlY2lmaWMgSENJIGNvbW1hbmQuCisJICovCisJaWYgKGJ0X2NiKHNrYiktPnBrdF90eXBlID09IEhDSV9DT01NQU5EX1BLVCkgeworCQlzdHJ1Y3QgaGNpX2NvbW1hbmRfaGRyICpoZHIgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKworCQlpZiAoX19sZTE2X3RvX2NwdShoZHItPm9wY29kZSkgPT0gSENJX09QX0FUSF9TTEVFUCkKKwkJCWF0aC0+Y3VyX3NsZWVwID0gc2tiLT5kYXRhW0hDSV9DT01NQU5EX0hEUl9TSVpFXTsKKwl9CisKKwlCVF9EQkcoImh1ICVwIHNrYiAlcCIsIGh1LCBza2IpOworCisJLyogUHJlcGVuZCBza2Igd2l0aCBmcmFtZSB0eXBlICovCisJbWVtY3B5KHNrYl9wdXNoKHNrYiwgMSksICZidF9jYihza2IpLT5wa3RfdHlwZSwgMSk7CisKKwlza2JfcXVldWVfdGFpbCgmYXRoLT50eHEsIHNrYik7CisJc2V0X2JpdChIQ0lfVUFSVF9TRU5ESU5HLCAmaHUtPnR4X3N0YXRlKTsKKworCXNjaGVkdWxlX3dvcmsoJmF0aC0+Y3R4dHN3KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmF0aF9kZXF1ZXVlKHN0cnVjdCBoY2lfdWFydCAqaHUpCit7CisJc3RydWN0IGF0aF9zdHJ1Y3QgKmF0aCA9IGh1LT5wcml2OworCisJcmV0dXJuIHNrYl9kZXF1ZXVlKCZhdGgtPnR4cSk7Cit9CisKKy8qIFJlY3YgZGF0YSAqLworc3RhdGljIGludCBhdGhfcmVjdihzdHJ1Y3QgaGNpX3VhcnQgKmh1LCB2b2lkICpkYXRhLCBpbnQgY291bnQpCit7CisJaWYgKGhjaV9yZWN2X3N0cmVhbV9mcmFnbWVudChodS0+aGRldiwgZGF0YSwgY291bnQpIDwgMCkKKwkJQlRfRVJSKCJGcmFtZSBSZWFzc2VtYmx5IEZhaWxlZCIpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3RydWN0IGhjaV91YXJ0X3Byb3RvIGF0aHAgPSB7CisJLmlkID0gSENJX1VBUlRfQVRIM0ssCisJLm9wZW4gPSBhdGhfb3BlbiwKKwkuY2xvc2UgPSBhdGhfY2xvc2UsCisJLnJlY3YgPSBhdGhfcmVjdiwKKwkuZW5xdWV1ZSA9IGF0aF9lbnF1ZXVlLAorCS5kZXF1ZXVlID0gYXRoX2RlcXVldWUsCisJLmZsdXNoID0gYXRoX2ZsdXNoLAorfTsKKworaW50IF9faW5pdCBhdGhfaW5pdCh2b2lkKQoreworCWludCBlcnIgPSBoY2lfdWFydF9yZWdpc3Rlcl9wcm90bygmYXRocCk7CisKKwlpZiAoIWVycikKKwkJQlRfSU5GTygiSENJQVRIM0sgcHJvdG9jb2wgaW5pdGlhbGl6ZWQiKTsKKwllbHNlCisJCUJUX0VSUigiSENJQVRIM0sgcHJvdG9jb2wgcmVnaXN0cmF0aW9uIGZhaWxlZCIpOworCisJcmV0dXJuIGVycjsKK30KKworaW50IF9fZXhpdCBhdGhfZGVpbml0KHZvaWQpCit7CisJcmV0dXJuIGhjaV91YXJ0X3VucmVnaXN0ZXJfcHJvdG8oJmF0aHApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2Jjc3AuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9iY3NwLmMKaW5kZXggNDJkNjlkNC4uOWM1YjJkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2Jjc3AuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfYmNzcC5jCkBAIC03MzksNyArNzM5LDcgQEAKIAkuZmx1c2gJCT0gYmNzcF9mbHVzaAogfTsKIAotaW50IGJjc3BfaW5pdCh2b2lkKQoraW50IF9faW5pdCBiY3NwX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyID0gaGNpX3VhcnRfcmVnaXN0ZXJfcHJvdG8oJmJjc3ApOwogCkBAIC03NTEsNyArNzUxLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgYmNzcF9kZWluaXQodm9pZCkKK2ludCBfX2V4aXQgYmNzcF9kZWluaXQodm9pZCkKIHsKIAlyZXR1cm4gaGNpX3VhcnRfdW5yZWdpc3Rlcl9wcm90bygmYmNzcCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDQuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNC5jCmluZGV4IDNmMDM4ZjUuLjdiOGFkOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNC5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNC5jCkBAIC0xNTEsMTA3ICsxNTEsOCBAQAogLyogUmVjdiBkYXRhICovCiBzdGF0aWMgaW50IGg0X3JlY3Yoc3RydWN0IGhjaV91YXJ0ICpodSwgdm9pZCAqZGF0YSwgaW50IGNvdW50KQogewotCXN0cnVjdCBoNF9zdHJ1Y3QgKmg0ID0gaHUtPnByaXY7Ci0JcmVnaXN0ZXIgY2hhciAqcHRyOwotCXN0cnVjdCBoY2lfZXZlbnRfaGRyICplaDsKLQlzdHJ1Y3QgaGNpX2FjbF9oZHIgICAqYWg7Ci0Jc3RydWN0IGhjaV9zY29faGRyICAgKnNoOwotCXJlZ2lzdGVyIGludCBsZW4sIHR5cGUsIGRsZW47Ci0KLQlCVF9EQkcoImh1ICVwIGNvdW50ICVkIHJ4X3N0YXRlICVsZCByeF9jb3VudCAlbGQiLCAKLQkJCWh1LCBjb3VudCwgaDQtPnJ4X3N0YXRlLCBoNC0+cnhfY291bnQpOwotCi0JcHRyID0gZGF0YTsKLQl3aGlsZSAoY291bnQpIHsKLQkJaWYgKGg0LT5yeF9jb3VudCkgewotCQkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBoNC0+cnhfY291bnQsIGNvdW50KTsKLQkJCW1lbWNweShza2JfcHV0KGg0LT5yeF9za2IsIGxlbiksIHB0ciwgbGVuKTsKLQkJCWg0LT5yeF9jb3VudCAtPSBsZW47IGNvdW50IC09IGxlbjsgcHRyICs9IGxlbjsKLQotCQkJaWYgKGg0LT5yeF9jb3VudCkKLQkJCQljb250aW51ZTsKLQotCQkJc3dpdGNoIChoNC0+cnhfc3RhdGUpIHsKLQkJCWNhc2UgSDRfVzRfREFUQToKLQkJCQlCVF9EQkcoIkNvbXBsZXRlIGRhdGEiKTsKLQotCQkJCWhjaV9yZWN2X2ZyYW1lKGg0LT5yeF9za2IpOwotCi0JCQkJaDQtPnJ4X3N0YXRlID0gSDRfVzRfUEFDS0VUX1RZUEU7Ci0JCQkJaDQtPnJ4X3NrYiA9IE5VTEw7Ci0JCQkJY29udGludWU7Ci0KLQkJCWNhc2UgSDRfVzRfRVZFTlRfSERSOgotCQkJCWVoID0gaGNpX2V2ZW50X2hkcihoNC0+cnhfc2tiKTsKLQotCQkJCUJUX0RCRygiRXZlbnQgaGVhZGVyOiBldnQgMHglMi4yeCBwbGVuICVkIiwgZWgtPmV2dCwgZWgtPnBsZW4pOwotCi0JCQkJaDRfY2hlY2tfZGF0YV9sZW4oaDQsIGVoLT5wbGVuKTsKLQkJCQljb250aW51ZTsKLQotCQkJY2FzZSBINF9XNF9BQ0xfSERSOgotCQkJCWFoID0gaGNpX2FjbF9oZHIoaDQtPnJ4X3NrYik7Ci0JCQkJZGxlbiA9IF9fbGUxNl90b19jcHUoYWgtPmRsZW4pOwotCi0JCQkJQlRfREJHKCJBQ0wgaGVhZGVyOiBkbGVuICVkIiwgZGxlbik7Ci0KLQkJCQloNF9jaGVja19kYXRhX2xlbihoNCwgZGxlbik7Ci0JCQkJY29udGludWU7Ci0KLQkJCWNhc2UgSDRfVzRfU0NPX0hEUjoKLQkJCQlzaCA9IGhjaV9zY29faGRyKGg0LT5yeF9za2IpOwotCi0JCQkJQlRfREJHKCJTQ08gaGVhZGVyOiBkbGVuICVkIiwgc2gtPmRsZW4pOwotCi0JCQkJaDRfY2hlY2tfZGF0YV9sZW4oaDQsIHNoLT5kbGVuKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJfQotCi0JCS8qIEg0X1c0X1BBQ0tFVF9UWVBFICovCi0JCXN3aXRjaCAoKnB0cikgewotCQljYXNlIEhDSV9FVkVOVF9QS1Q6Ci0JCQlCVF9EQkcoIkV2ZW50IHBhY2tldCIpOwotCQkJaDQtPnJ4X3N0YXRlID0gSDRfVzRfRVZFTlRfSERSOwotCQkJaDQtPnJ4X2NvdW50ID0gSENJX0VWRU5UX0hEUl9TSVpFOwotCQkJdHlwZSA9IEhDSV9FVkVOVF9QS1Q7Ci0JCQlicmVhazsKLQotCQljYXNlIEhDSV9BQ0xEQVRBX1BLVDoKLQkJCUJUX0RCRygiQUNMIHBhY2tldCIpOwotCQkJaDQtPnJ4X3N0YXRlID0gSDRfVzRfQUNMX0hEUjsKLQkJCWg0LT5yeF9jb3VudCA9IEhDSV9BQ0xfSERSX1NJWkU7Ci0JCQl0eXBlID0gSENJX0FDTERBVEFfUEtUOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBIQ0lfU0NPREFUQV9QS1Q6Ci0JCQlCVF9EQkcoIlNDTyBwYWNrZXQiKTsKLQkJCWg0LT5yeF9zdGF0ZSA9IEg0X1c0X1NDT19IRFI7Ci0JCQloNC0+cnhfY291bnQgPSBIQ0lfU0NPX0hEUl9TSVpFOwotCQkJdHlwZSA9IEhDSV9TQ09EQVRBX1BLVDsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlCVF9FUlIoIlVua25vd24gSENJIHBhY2tldCB0eXBlICUyLjJ4IiwgKF9fdTgpKnB0cik7Ci0JCQlodS0+aGRldi0+c3RhdC5lcnJfcngrKzsKLQkJCXB0cisrOyBjb3VudC0tOwotCQkJY29udGludWU7Ci0JCX07Ci0KLQkJcHRyKys7IGNvdW50LS07Ci0KLQkJLyogQWxsb2NhdGUgcGFja2V0ICovCi0JCWg0LT5yeF9za2IgPSBidF9za2JfYWxsb2MoSENJX01BWF9GUkFNRV9TSVpFLCBHRlBfQVRPTUlDKTsKLQkJaWYgKCFoNC0+cnhfc2tiKSB7Ci0JCQlCVF9FUlIoIkNhbid0IGFsbG9jYXRlIG1lbSBmb3IgbmV3IHBhY2tldCIpOwotCQkJaDQtPnJ4X3N0YXRlID0gSDRfVzRfUEFDS0VUX1RZUEU7Ci0JCQloNC0+cnhfY291bnQgPSAwOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQotCQloNC0+cnhfc2tiLT5kZXYgPSAodm9pZCAqKSBodS0+aGRldjsKLQkJYnRfY2IoaDQtPnJ4X3NrYiktPnBrdF90eXBlID0gdHlwZTsKLQl9CisJaWYgKGhjaV9yZWN2X3N0cmVhbV9mcmFnbWVudChodS0+aGRldiwgZGF0YSwgY291bnQpIDwgMCkKKwkJQlRfRVJSKCJGcmFtZSBSZWFzc2VtYmx5IEZhaWxlZCIpOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMjcyLDcgKzE3Myw3IEBACiAJLmZsdXNoCQk9IGg0X2ZsdXNoLAogfTsKIAotaW50IGg0X2luaXQodm9pZCkKK2ludCBfX2luaXQgaDRfaW5pdCh2b2lkKQogewogCWludCBlcnIgPSBoY2lfdWFydF9yZWdpc3Rlcl9wcm90bygmaDRwKTsKIApAQCAtMjg0LDcgKzE4NSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotaW50IGg0X2RlaW5pdCh2b2lkKQoraW50IF9fZXhpdCBoNF9kZWluaXQodm9pZCkKIHsKIAlyZXR1cm4gaGNpX3VhcnRfdW5yZWdpc3Rlcl9wcm90bygmaDRwKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMKaW5kZXggNzZhMWFiYi4uOTk4ODMzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMKQEAgLTIxMCw3ICsyMTAsNiBAQAogc3RhdGljIGludCBoY2lfdWFydF9zZW5kX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGhjaV9kZXYqIGhkZXYgPSAoc3RydWN0IGhjaV9kZXYgKikgc2tiLT5kZXY7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlzdHJ1Y3QgaGNpX3VhcnQgKmh1OwogCiAJaWYgKCFoZGV2KSB7CkBAIC0yMjIsNyArMjIxLDYgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWh1ID0gKHN0cnVjdCBoY2lfdWFydCAqKSBoZGV2LT5kcml2ZXJfZGF0YTsKLQl0dHkgPSBodS0+dHR5OwogCiAJQlRfREJHKCIlczogdHlwZSAlZCBsZW4gJWQiLCBoZGV2LT5uYW1lLCBidF9jYihza2IpLT5wa3RfdHlwZSwgc2tiLT5sZW4pOwogCkBAIC0zOTcsNiArMzk1LDkgQEAKIAlpZiAoIXJlc2V0KQogCQlzZXRfYml0KEhDSV9RVUlSS19OT19SRVNFVCwgJmhkZXYtPnF1aXJrcyk7CiAKKwlpZiAodGVzdF9iaXQoSENJX1VBUlRfUkFXX0RFVklDRSwgJmh1LT5oZGV2X2ZsYWdzKSkKKwkJc2V0X2JpdChIQ0lfUVVJUktfUkFXX0RFVklDRSwgJmhkZXYtPnF1aXJrcyk7CisKIAlpZiAoaGNpX3JlZ2lzdGVyX2RldihoZGV2KSA8IDApIHsKIAkJQlRfRVJSKCJDYW4ndCByZWdpc3RlciBIQ0kgZGV2aWNlIik7CiAJCWhjaV9mcmVlX2RldihoZGV2KTsKQEAgLTQ3Nyw2ICs0NzgsMTUgQEAKIAkJCXJldHVybiBodS0+aGRldi0+aWQ7CiAJCXJldHVybiAtRVVOQVRDSDsKIAorCWNhc2UgSENJVUFSVFNFVEZMQUdTOgorCQlpZiAodGVzdF9iaXQoSENJX1VBUlRfUFJPVE9fU0VULCAmaHUtPmZsYWdzKSkKKwkJCXJldHVybiAtRUJVU1k7CisJCWh1LT5oZGV2X2ZsYWdzID0gYXJnOworCQlicmVhazsKKworCWNhc2UgSENJVUFSVEdFVEZMQUdTOgorCQlyZXR1cm4gaHUtPmhkZXZfZmxhZ3M7CisKIAlkZWZhdWx0OgogCQllcnIgPSBuX3R0eV9pb2N0bF9oZWxwZXIodHR5LCBmaWxlLCBjbWQsIGFyZyk7CiAJCWJyZWFrOwpAQCAtNTQyLDYgKzU1Miw5IEBACiAjaWZkZWYgQ09ORklHX0JUX0hDSVVBUlRfTEwKIAlsbF9pbml0KCk7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQlRfSENJVUFSVF9BVEgzSworCWF0aF9pbml0KCk7CisjZW5kaWYKIAogCXJldHVybiAwOwogfQpAQCAtNTU5LDYgKzU3Miw5IEBACiAjaWZkZWYgQ09ORklHX0JUX0hDSVVBUlRfTEwKIAlsbF9kZWluaXQoKTsKICNlbmRpZgorI2lmZGVmIENPTkZJR19CVF9IQ0lVQVJUX0FUSDNLCisJYXRoX2RlaW5pdCgpOworI2VuZGlmCiAKIAkvKiBSZWxlYXNlIHR0eSByZWdpc3RyYXRpb24gb2YgbGluZSBkaXNjaXBsaW5lICovCiAJaWYgKChlcnIgPSB0dHlfdW5yZWdpc3Rlcl9sZGlzYyhOX0hDSSkpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xsLmMgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGwuYwppbmRleCBmYjg0NDVjLi4zODU5NWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGwuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGwuYwpAQCAtNzQsNyArNzQsNyBAQAogCiBzdHJ1Y3QgaGNpbGxfY21kIHsKIAl1OCBjbWQ7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGxsX3N0cnVjdCB7CiAJdW5zaWduZWQgbG9uZyByeF9zdGF0ZTsKQEAgLTUxNyw3ICs1MTcsNyBAQAogCS5mbHVzaAkJPSBsbF9mbHVzaCwKIH07CiAKLWludCBsbF9pbml0KHZvaWQpCitpbnQgX19pbml0IGxsX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyID0gaGNpX3VhcnRfcmVnaXN0ZXJfcHJvdG8oJmxscCk7CiAKQEAgLTUyOSw3ICs1MjksNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLWludCBsbF9kZWluaXQodm9pZCkKK2ludCBfX2V4aXQgbGxfZGVpbml0KHZvaWQpCiB7CiAJcmV0dXJuIGhjaV91YXJ0X3VucmVnaXN0ZXJfcHJvdG8oJmxscCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfdWFydC5oIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX3VhcnQuaAppbmRleCA1MDExM2RiLi45OWZiMzUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfdWFydC5oCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV91YXJ0LmgKQEAgLTMxLDE1ICszMSwyMCBAQAogI2RlZmluZSBIQ0lVQVJUU0VUUFJPVE8JCV9JT1coJ1UnLCAyMDAsIGludCkKICNkZWZpbmUgSENJVUFSVEdFVFBST1RPCQlfSU9SKCdVJywgMjAxLCBpbnQpCiAjZGVmaW5lIEhDSVVBUlRHRVRERVZJQ0UJX0lPUignVScsIDIwMiwgaW50KQorI2RlZmluZSBIQ0lVQVJUU0VURkxBR1MJCV9JT1coJ1UnLCAyMDMsIGludCkKKyNkZWZpbmUgSENJVUFSVEdFVEZMQUdTCQlfSU9SKCdVJywgMjA0LCBpbnQpCiAKIC8qIFVBUlQgcHJvdG9jb2xzICovCi0jZGVmaW5lIEhDSV9VQVJUX01BWF9QUk9UTwk1CisjZGVmaW5lIEhDSV9VQVJUX01BWF9QUk9UTwk2CiAKICNkZWZpbmUgSENJX1VBUlRfSDQJMAogI2RlZmluZSBIQ0lfVUFSVF9CQ1NQCTEKICNkZWZpbmUgSENJX1VBUlRfM1dJUkUJMgogI2RlZmluZSBIQ0lfVUFSVF9INERTCTMKICNkZWZpbmUgSENJX1VBUlRfTEwJNAorI2RlZmluZSBIQ0lfVUFSVF9BVEgzSwk1CisKKyNkZWZpbmUgSENJX1VBUlRfUkFXX0RFVklDRQkwCiAKIHN0cnVjdCBoY2lfdWFydDsKIApAQCAtNTcsNiArNjIsNyBAQAogCXN0cnVjdCB0dHlfc3RydWN0CSp0dHk7CiAJc3RydWN0IGhjaV9kZXYJCSpoZGV2OwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCXVuc2lnbmVkIGxvbmcJCWhkZXZfZmxhZ3M7CiAKIAlzdHJ1Y3QgaGNpX3VhcnRfcHJvdG8JKnByb3RvOwogCXZvaWQJCQkqcHJpdjsKQEAgLTY2LDcgKzcyLDcgQEAKIAlzcGlubG9ja190CQlyeF9sb2NrOwogfTsKIAotLyogSENJX1VBUlQgZmxhZyBiaXRzICovCisvKiBIQ0lfVUFSVCBwcm90byBmbGFnIGJpdHMgKi8KICNkZWZpbmUgSENJX1VBUlRfUFJPVE9fU0VUCTAKIAogLyogVFggc3RhdGVzICAqLwpAQCAtOTEsMyArOTcsOCBAQAogaW50IGxsX2luaXQodm9pZCk7CiBpbnQgbGxfZGVpbml0KHZvaWQpOwogI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQlRfSENJVUFSVF9BVEgzSworaW50IGF0aF9pbml0KHZvaWQpOworaW50IGF0aF9kZWluaXQodm9pZCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvZWZmaWNlb24tYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2VmZmljZW9uLWFncC5jCmluZGV4IGFhMTA5Y2IuLmQ2MDdmNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvZWZmaWNlb24tYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9lZmZpY2Vvbi1hZ3AuYwpAQCAtMzcyLDYgKzM3MiwxNyBAQAogCWJyaWRnZS0+Y2FwbmR4ID0gY2FwX3B0cjsKIAogCS8qCisJKiBJZiB0aGUgZGV2aWNlIGhhcyBub3QgYmVlbiBwcm9wZXJseSBzZXR1cCwgdGhlIGZvbGxvd2luZyB3aWxsIGNhdGNoCisJKiB0aGUgcHJvYmxlbSBhbmQgc2hvdWxkIHN0b3AgdGhlIHN5c3RlbSBmcm9tIGNyYXNoaW5nLgorCSogMjAwMzA2MTAgLSBoYW1pc2hAem90Lm9yZworCSovCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIlVuYWJsZSB0byBFbmFibGUgUENJIGRldmljZVxuIik7CisJCWFncF9wdXRfYnJpZGdlKGJyaWRnZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qCiAJKiBUaGUgZm9sbG93aW5nIGZpeGVzIHRoZSBjYXNlIHdoZXJlIHRoZSBCSU9TIGhhcyAiZm9yZ290dGVuIiB0bwogCSogcHJvdmlkZSBhbiBhZGRyZXNzIHJhbmdlIGZvciB0aGUgR0FSVC4KIAkqIDIwMDMwNjEwIC0gaGFtaXNoQHpvdC5vcmcKQEAgLTM4NSwxNyArMzk2LDYgQEAKIAkJfQogCX0KIAotCS8qCi0JKiBJZiB0aGUgZGV2aWNlIGhhcyBub3QgYmVlbiBwcm9wZXJseSBzZXR1cCwgdGhlIGZvbGxvd2luZyB3aWxsIGNhdGNoCi0JKiB0aGUgcHJvYmxlbSBhbmQgc2hvdWxkIHN0b3AgdGhlIHN5c3RlbSBmcm9tIGNyYXNoaW5nLgotCSogMjAwMzA2MTAgLSBoYW1pc2hAem90Lm9yZwotCSovCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIlVuYWJsZSB0byBFbmFibGUgUENJIGRldmljZVxuIik7Ci0JCWFncF9wdXRfYnJpZGdlKGJyaWRnZSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQogCS8qIEZpbGwgaW4gdGhlIG1vZGUgcmVnaXN0ZXIgKi8KIAlpZiAoY2FwX3B0cikgewogCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCmluZGV4IGQ4MzZhNzEuLmRkZjVkZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwpAQCAtODE2LDkgKzgxNiw5IEBACiAJeyBQQ0lfREVWSUNFX0lEX0lOVEVMX0lST05MQUtFX01DMl9IQiwgUENJX0RFVklDRV9JRF9JTlRFTF9JUk9OTEFLRV9NX0lHLAogCSAgICAiSEQgR3JhcGhpY3MiLCBOVUxMLCAmaW50ZWxfaTk2NV9kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfU0FORFlCUklER0VfSEIsIFBDSV9ERVZJQ0VfSURfSU5URUxfU0FORFlCUklER0VfSUcsCi0JICAgICJTYW5keWJyaWRnZSIsIE5VTEwsICZpbnRlbF9pOTY1X2RyaXZlciB9LAorCSAgICAiU2FuZHlicmlkZ2UiLCBOVUxMLCAmaW50ZWxfZ2VuNl9kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfU0FORFlCUklER0VfTV9IQiwgUENJX0RFVklDRV9JRF9JTlRFTF9TQU5EWUJSSURHRV9NX0lHLAotCSAgICAiU2FuZHlicmlkZ2UiLCBOVUxMLCAmaW50ZWxfaTk2NV9kcml2ZXIgfSwKKwkgICAgIlNhbmR5YnJpZGdlIiwgTlVMTCwgJmludGVsX2dlbjZfZHJpdmVyIH0sCiAJeyAwLCAwLCBOVUxMLCBOVUxMLCBOVUxMIH0KIH07CiAKQEAgLTkwOCw2ICs5MDgsMTcgQEAKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiSW50ZWwgJXMgQ2hpcHNldFxuIiwgaW50ZWxfYWdwX2NoaXBzZXRzW2ldLm5hbWUpOwogCiAJLyoKKwkqIElmIHRoZSBkZXZpY2UgaGFzIG5vdCBiZWVuIHByb3Blcmx5IHNldHVwLCB0aGUgZm9sbG93aW5nIHdpbGwgY2F0Y2gKKwkqIHRoZSBwcm9ibGVtIGFuZCBzaG91bGQgc3RvcCB0aGUgc3lzdGVtIGZyb20gY3Jhc2hpbmcuCisJKiAyMDAzMDYxMCAtIGhhbWlzaEB6b3Qub3JnCisJKi8KKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZW5hYmxlIFBDSSBkZXZpY2VcbiIpOworCQlhZ3BfcHV0X2JyaWRnZShicmlkZ2UpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKgogCSogVGhlIGZvbGxvd2luZyBmaXhlcyB0aGUgY2FzZSB3aGVyZSB0aGUgQklPUyBoYXMgImZvcmdvdHRlbiIgdG8KIAkqIHByb3ZpZGUgYW4gYWRkcmVzcyByYW5nZSBmb3IgdGhlIEdBUlQuCiAJKiAyMDAzMDYxMCAtIGhhbWlzaEB6b3Qub3JnCkBAIC05MjEsMTcgKzkzMiw2IEBACiAJCX0KIAl9CiAKLQkvKgotCSogSWYgdGhlIGRldmljZSBoYXMgbm90IGJlZW4gcHJvcGVybHkgc2V0dXAsIHRoZSBmb2xsb3dpbmcgd2lsbCBjYXRjaAotCSogdGhlIHByb2JsZW0gYW5kIHNob3VsZCBzdG9wIHRoZSBzeXN0ZW0gZnJvbSBjcmFzaGluZy4KLQkqIDIwMDMwNjEwIC0gaGFtaXNoQHpvdC5vcmcKLQkqLwotCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBlbmFibGUgUENJIGRldmljZVxuIik7Ci0JCWFncF9wdXRfYnJpZGdlKGJyaWRnZSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQogCS8qIEZpbGwgaW4gdGhlIG1vZGUgcmVnaXN0ZXIgKi8KIAlpZiAoY2FwX3B0cikgewogCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmggYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5oCmluZGV4IDI1NDc0NjUuLmMwNWUzZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmgKKysrIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuaApAQCAtNjAsNiArNjAsMTIgQEAKICNkZWZpbmUgSTgxMF9QVEVfTE9DQUwJCTB4MDAwMDAwMDIKICNkZWZpbmUgSTgxMF9QVEVfVkFMSUQJCTB4MDAwMDAwMDEKICNkZWZpbmUgSTgzMF9QVEVfU1lTVEVNX0NBQ0hFRCAgMHgwMDAwMDAwNgorLyogR1QgUFRFIGNhY2hlIGNvbnRyb2wgZmllbGRzICovCisjZGVmaW5lIEdFTjZfUFRFX1VOQ0FDSEVECTB4MDAwMDAwMDIKKyNkZWZpbmUgR0VONl9QVEVfTExDCQkweDAwMDAwMDA0CisjZGVmaW5lIEdFTjZfUFRFX0xMQ19NTEMJMHgwMDAwMDAwNgorI2RlZmluZSBHRU42X1BURV9HRkRUCQkweDAwMDAwMDA4CisKICNkZWZpbmUgSTgxMF9TTVJBTV9NSVNDQwkweDcwCiAjZGVmaW5lIEk4MTBfR0ZYX01FTV9XSU5fU0laRQkweDAwMDEwMDAwCiAjZGVmaW5lIEk4MTBfR0ZYX01FTV9XSU5fMzJNCTB4MDAwMTAwMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtZ3R0LmMgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWd0dC5jCmluZGV4IDkzNDQyMTYuLmQyMmZmYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtZ3R0LmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1ndHQuYwpAQCAtMjUsNiArMjUsMTAgQEAKICNkZWZpbmUgVVNFX1BDSV9ETUFfQVBJIDEKICNlbmRpZgogCisvKiBNYXggYW1vdW50IG9mIHN0b2xlbiBzcGFjZSwgYW55dGhpbmcgYWJvdmUgd2lsbCBiZSByZXR1cm5lZCB0byBMaW51eCAqLworaW50IGludGVsX21heF9zdG9sZW4gPSAzMiAqIDEwMjQgKiAxMDI0OworRVhQT1JUX1NZTUJPTChpbnRlbF9tYXhfc3RvbGVuKTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBhcGVyX3NpemVfaW5mb19maXhlZCBpbnRlbF9pODEwX3NpemVzW10gPQogewogCXs2NCwgMTYzODQsIDR9LApAQCAtMTA0LDcgKzEwOCw3IEBACiAJREJHKCJ0cnkgbWFwcGluZyAlbHUgcGFnZXNcbiIsICh1bnNpZ25lZCBsb25nKW1lbS0+cGFnZV9jb3VudCk7CiAKIAlpZiAoc2dfYWxsb2NfdGFibGUoJnN0LCBtZW0tPnBhZ2VfY291bnQsIEdGUF9LRVJORUwpKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJZ290byBlcnI7CiAKIAltZW0tPnNnX2xpc3QgPSBzZyA9IHN0LnNnbDsKIApAQCAtMTEzLDExICsxMTcsMTQgQEAKIAogCW1lbS0+bnVtX3NnID0gcGNpX21hcF9zZyhpbnRlbF9wcml2YXRlLnBjaWRldiwgbWVtLT5zZ19saXN0LAogCQkJCSBtZW0tPnBhZ2VfY291bnQsIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7Ci0JaWYgKHVubGlrZWx5KCFtZW0tPm51bV9zZykpIHsKLQkJaW50ZWxfYWdwX2ZyZWVfc2dsaXN0KG1lbSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KKwlpZiAodW5saWtlbHkoIW1lbS0+bnVtX3NnKSkKKwkJZ290byBlcnI7CisKIAlyZXR1cm4gMDsKKworZXJyOgorCXNnX2ZyZWVfdGFibGUoJnN0KTsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIHZvaWQgaW50ZWxfYWdwX3VubWFwX21lbW9yeShzdHJ1Y3QgYWdwX21lbW9yeSAqbWVtKQpAQCAtMTc2LDcgKzE4Myw3IEBACiAJaWYgKGFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfU0FORFlCUklER0VfSEIgfHwKIAkgICAgYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9TQU5EWUJSSURHRV9NX0hCKQogCXsKLQkJY2FjaGVfYml0cyA9IEk4MzBfUFRFX1NZU1RFTV9DQUNIRUQ7CisJCWNhY2hlX2JpdHMgPSBHRU42X1BURV9MTENfTUxDOwogCX0KIAogCWZvciAoaSA9IDAsIGogPSBwZ19zdGFydDsgaSA8IG1lbS0+cGFnZV9jb3VudDsgaSsrLCBqKyspIHsKQEAgLTcxMCw3ICs3MTcsMTIgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQotCWlmIChndHRfZW50cmllcyA+IDApIHsKKwlpZiAoIWxvY2FsICYmIGd0dF9lbnRyaWVzID4gaW50ZWxfbWF4X3N0b2xlbikgeworCQlkZXZfaW5mbygmYWdwX2JyaWRnZS0+ZGV2LT5kZXYsCisJCQkgImRldGVjdGVkICVkSyBzdG9sZW4gbWVtb3J5LCB0cmltbWluZyB0byAlZEtcbiIsCisJCQkgZ3R0X2VudHJpZXMgLyBLQigxKSwgaW50ZWxfbWF4X3N0b2xlbiAvIEtCKDEpKTsKKwkJZ3R0X2VudHJpZXMgPSBpbnRlbF9tYXhfc3RvbGVuIC8gS0IoNCk7CisJfSBlbHNlIGlmIChndHRfZW50cmllcyA+IDApIHsKIAkJZGV2X2luZm8oJmFncF9icmlkZ2UtPmRldi0+ZGV2LCAiZGV0ZWN0ZWQgJWRLICVzIG1lbW9yeVxuIiwKIAkJICAgICAgIGd0dF9lbnRyaWVzIC8gS0IoMSksIGxvY2FsID8gImxvY2FsIiA6ICJzdG9sZW4iKTsKIAkJZ3R0X2VudHJpZXMgLz0gS0IoNCk7CkBAIC03OTcsNiArODA5LDEwIEBACiAKIAkvKiB3ZSBoYXZlIHRvIGNhbGwgdGhpcyBhcyBlYXJseSBhcyBwb3NzaWJsZSBhZnRlciB0aGUgTU1JTyBiYXNlIGFkZHJlc3MgaXMga25vd24gKi8KIAlpbnRlbF9pODMwX2luaXRfZ3R0X2VudHJpZXMoKTsKKwlpZiAoaW50ZWxfcHJpdmF0ZS5ndHRfZW50cmllcyA9PSAwKSB7CisJCWlvdW5tYXAoaW50ZWxfcHJpdmF0ZS5yZWdpc3RlcnMpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAlhZ3BfYnJpZGdlLT5nYXR0X3RhYmxlID0gTlVMTDsKIApAQCAtMTIxNiwxNyArMTIzMiwyMCBAQAogCiAJCS8qIEczMydzIEdUVCBzaXplIGRlZmluZWQgaW4gZ21jaF9jdHJsICovCiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGFncF9icmlkZ2UtPmRldiwgSTgzMF9HTUNIX0NUUkwsICZnbWNoX2N0cmwpOwotCQlzd2l0Y2ggKGdtY2hfY3RybCAmIEczM19QR0VUQkxfU0laRV9NQVNLKSB7Ci0JCWNhc2UgRzMzX1BHRVRCTF9TSVpFXzFNOgorCQlzd2l0Y2ggKGdtY2hfY3RybCAmIEk4MzBfR01DSF9HTVNfTUFTSykgeworCQljYXNlIEk4MzBfR01DSF9HTVNfU1RPTEVOXzUxMjoKKwkJCXNpemUgPSA1MTI7CisJCQlicmVhazsKKwkJY2FzZSBJODMwX0dNQ0hfR01TX1NUT0xFTl8xMDI0OgogCQkJc2l6ZSA9IDEwMjQ7CiAJCQlicmVhazsKLQkJY2FzZSBHMzNfUEdFVEJMX1NJWkVfMk06Ci0JCQlzaXplID0gMjA0ODsKKwkJY2FzZSBJODMwX0dNQ0hfR01TX1NUT0xFTl84MTkyOgorCQkJc2l6ZSA9IDgqMTAyNDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZGV2X2luZm8oJmFncF9icmlkZ2UtPmRldi0+ZGV2LAogCQkJCSAidW5rbm93biBwYWdlIHRhYmxlIHNpemUgMHgleCwgYXNzdW1pbmcgNTEyS0JcbiIsCi0JCQkJKGdtY2hfY3RybCAmIEczM19QR0VUQkxfU0laRV9NQVNLKSk7CisJCQkJKGdtY2hfY3RybCAmIEk4MzBfR01DSF9HTVNfTUFTSykpOwogCQkJc2l6ZSA9IDUxMjsKIAkJfQogCX0gZWxzZSB7CkBAIC0xMjc5LDYgKzEyOTgsMTEgQEAKIAogCS8qIHdlIGhhdmUgdG8gY2FsbCB0aGlzIGFzIGVhcmx5IGFzIHBvc3NpYmxlIGFmdGVyIHRoZSBNTUlPIGJhc2UgYWRkcmVzcyBpcyBrbm93biAqLwogCWludGVsX2k4MzBfaW5pdF9ndHRfZW50cmllcygpOworCWlmIChpbnRlbF9wcml2YXRlLmd0dF9lbnRyaWVzID09IDApIHsKKwkJaW91bm1hcChpbnRlbF9wcml2YXRlLmd0dCk7CisJCWlvdW5tYXAoaW50ZWxfcHJpdmF0ZS5yZWdpc3RlcnMpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAlhZ3BfYnJpZGdlLT5nYXR0X3RhYmxlID0gTlVMTDsKIApAQCAtMTMwNiw2ICsxMzMwLDE2IEBACiAJcmV0dXJuIGFkZHIgfCBicmlkZ2UtPmRyaXZlci0+bWFza3NbdHlwZV0ubWFzazsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50ZWxfZ2VuNl9tYXNrX21lbW9yeShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UsCisJCQkJCSAgICBkbWFfYWRkcl90IGFkZHIsIGludCB0eXBlKQoreworCS8qIFNoaWZ0IGhpZ2ggYml0cyBkb3duICovCisJYWRkciB8PSAoYWRkciA+PiAyOCkgJiAweGZmOworCisJLyogVHlwZSBjaGVja2luZyBtdXN0IGJlIGRvbmUgZWxzZXdoZXJlICovCisJcmV0dXJuIGFkZHIgfCBicmlkZ2UtPmRyaXZlci0+bWFza3NbdHlwZV0ubWFzazsKK30KKwogc3RhdGljIHZvaWQgaW50ZWxfaTk2NV9nZXRfZ3R0X3JhbmdlKGludCAqZ3R0X29mZnNldCwgaW50ICpndHRfc2l6ZSkKIHsKIAl1MTYgc25iX2dtY2hfY3RsOwpAQCAtMTM4Nyw2ICsxNDIxLDExIEBACiAKIAkvKiB3ZSBoYXZlIHRvIGNhbGwgdGhpcyBhcyBlYXJseSBhcyBwb3NzaWJsZSBhZnRlciB0aGUgTU1JTyBiYXNlIGFkZHJlc3MgaXMga25vd24gKi8KIAlpbnRlbF9pODMwX2luaXRfZ3R0X2VudHJpZXMoKTsKKwlpZiAoaW50ZWxfcHJpdmF0ZS5ndHRfZW50cmllcyA9PSAwKSB7CisJCWlvdW5tYXAoaW50ZWxfcHJpdmF0ZS5ndHQpOworCQlpb3VubWFwKGludGVsX3ByaXZhdGUucmVnaXN0ZXJzKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJYWdwX2JyaWRnZS0+Z2F0dF90YWJsZSA9IE5VTEw7CiAKQEAgLTE1MTQsNiArMTU1MywzOSBAQAogI2VuZGlmCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIGludGVsX2dlbjZfZHJpdmVyID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLmFwZXJ0dXJlX3NpemVzCQk9IGludGVsX2k4MzBfc2l6ZXMsCisJLnNpemVfdHlwZQkJPSBGSVhFRF9BUEVSX1NJWkUsCisJLm51bV9hcGVydHVyZV9zaXplcwk9IDQsCisJLm5lZWRzX3NjcmF0Y2hfcGFnZQk9IHRydWUsCisJLmNvbmZpZ3VyZQkJPSBpbnRlbF9pOXh4X2NvbmZpZ3VyZSwKKwkuZmV0Y2hfc2l6ZQkJPSBpbnRlbF9pOXh4X2ZldGNoX3NpemUsCisJLmNsZWFudXAJCT0gaW50ZWxfaTkxNV9jbGVhbnVwLAorCS5tYXNrX21lbW9yeQkJPSBpbnRlbF9nZW42X21hc2tfbWVtb3J5LAorCS5tYXNrcwkJCT0gaW50ZWxfaTgxMF9tYXNrcywKKwkuYWdwX2VuYWJsZQkJPSBpbnRlbF9pODEwX2FncF9lbmFibGUsCisJLmNhY2hlX2ZsdXNoCQk9IGdsb2JhbF9jYWNoZV9mbHVzaCwKKwkuY3JlYXRlX2dhdHRfdGFibGUJPSBpbnRlbF9pOTY1X2NyZWF0ZV9nYXR0X3RhYmxlLAorCS5mcmVlX2dhdHRfdGFibGUJPSBpbnRlbF9pODMwX2ZyZWVfZ2F0dF90YWJsZSwKKwkuaW5zZXJ0X21lbW9yeQkJPSBpbnRlbF9pOTE1X2luc2VydF9lbnRyaWVzLAorCS5yZW1vdmVfbWVtb3J5CQk9IGludGVsX2k5MTVfcmVtb3ZlX2VudHJpZXMsCisJLmFsbG9jX2J5X3R5cGUJCT0gaW50ZWxfaTgzMF9hbGxvY19ieV90eXBlLAorCS5mcmVlX2J5X3R5cGUJCT0gaW50ZWxfaTgxMF9mcmVlX2J5X3R5cGUsCisJLmFncF9hbGxvY19wYWdlCQk9IGFncF9nZW5lcmljX2FsbG9jX3BhZ2UsCisJLmFncF9hbGxvY19wYWdlcyAgICAgICAgPSBhZ3BfZ2VuZXJpY19hbGxvY19wYWdlcywKKwkuYWdwX2Rlc3Ryb3lfcGFnZQk9IGFncF9nZW5lcmljX2Rlc3Ryb3lfcGFnZSwKKwkuYWdwX2Rlc3Ryb3lfcGFnZXMgICAgICA9IGFncF9nZW5lcmljX2Rlc3Ryb3lfcGFnZXMsCisJLmFncF90eXBlX3RvX21hc2tfdHlwZQk9IGludGVsX2k4MzBfdHlwZV90b19tYXNrX3R5cGUsCisJLmNoaXBzZXRfZmx1c2gJCT0gaW50ZWxfaTkxNV9jaGlwc2V0X2ZsdXNoLAorI2lmZGVmIFVTRV9QQ0lfRE1BX0FQSQorCS5hZ3BfbWFwX3BhZ2UJCT0gaW50ZWxfYWdwX21hcF9wYWdlLAorCS5hZ3BfdW5tYXBfcGFnZQkJPSBpbnRlbF9hZ3BfdW5tYXBfcGFnZSwKKwkuYWdwX21hcF9tZW1vcnkJCT0gaW50ZWxfYWdwX21hcF9tZW1vcnksCisJLmFncF91bm1hcF9tZW1vcnkJPSBpbnRlbF9hZ3BfdW5tYXBfbWVtb3J5LAorI2VuZGlmCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIGludGVsX2czM19kcml2ZXIgPSB7CiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkuYXBlcnR1cmVfc2l6ZXMJCT0gaW50ZWxfaTgzMF9zaXplcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ic3IuYyBiL2RyaXZlcnMvY2hhci9ic3IuYwppbmRleCA4OWQ4NzFlLi45MTkxNzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYnNyLmMKKysrIGIvZHJpdmVycy9jaGFyL2Jzci5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKaW5kZXggMzVjY2E0Yy4uZmEyN2QxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKQEAgLTE5NCw3ICsxOTQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGNvbnNvbGUgaHZjX2Nvbl9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IGNvbnNvbGUgaHZjX2NvbnNvbGUgPSB7CiAJLm5hbWUJCT0gImh2YyIsCiAJLndyaXRlCQk9IGh2Y19jb25zb2xlX3ByaW50LAogCS5kZXZpY2UJCT0gaHZjX2NvbnNvbGVfZGV2aWNlLApAQCAtMjIwLDcgKzIyMCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGh2Y19jb25zb2xlX2luaXQodm9pZCkKIHsKLQlyZWdpc3Rlcl9jb25zb2xlKCZodmNfY29uX2RyaXZlcik7CisJcmVnaXN0ZXJfY29uc29sZSgmaHZjX2NvbnNvbGUpOwogCXJldHVybiAwOwogfQogY29uc29sZV9pbml0Y2FsbChodmNfY29uc29sZV9pbml0KTsKQEAgLTI3Niw4ICsyNzYsOCBAQAogCSAqIG5vdyAoc2V0dXAgd29uJ3QgZmFpbCBhdCB0aGlzIHBvaW50KS4gIEl0J3Mgb2sgdG8ganVzdAogCSAqIGNhbGwgcmVnaXN0ZXIgYWdhaW4gaWYgcHJldmlvdXNseSAuc2V0dXAgZmFpbGVkLgogCSAqLwotCWlmIChpbmRleCA9PSBodmNfY29uX2RyaXZlci5pbmRleCkKLQkJcmVnaXN0ZXJfY29uc29sZSgmaHZjX2Nvbl9kcml2ZXIpOworCWlmIChpbmRleCA9PSBodmNfY29uc29sZS5pbmRleCkKKwkJcmVnaXN0ZXJfY29uc29sZSgmaHZjX2NvbnNvbGUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NDEsNyArNjQxLDcgQEAKIAkJfQogCQlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7CiAjaWZkZWYgQ09ORklHX01BR0lDX1NZU1JRCi0JCQlpZiAoaHAtPmluZGV4ID09IGh2Y19jb25fZHJpdmVyLmluZGV4KSB7CisJCQlpZiAoaHAtPmluZGV4ID09IGh2Y19jb25zb2xlLmluZGV4KSB7CiAJCQkJLyogSGFuZGxlIHRoZSBTeXNScSBIYWNrICovCiAJCQkJLyogWFhYIHNob3VsZCBzdXBwb3J0IGEgc2VxdWVuY2UgKi8KIAkJCQlpZiAoYnVmW2ldID09ICdceDBmJykgewkvKiBeTyAqLwpAQCAtOTA5LDcgKzkwOSw3IEBACiAJCXR0eV91bnJlZ2lzdGVyX2RyaXZlcihodmNfZHJpdmVyKTsKIAkJLyogcmV0dXJuIHR0eV9zdHJ1Y3QgaW5zdGFuY2VzIGFsbG9jYXRlZCBpbiBodmNfaW5pdCgpLiAqLwogCQlwdXRfdHR5X2RyaXZlcihodmNfZHJpdmVyKTsKLQkJdW5yZWdpc3Rlcl9jb25zb2xlKCZodmNfY29uX2RyaXZlcik7CisJCXVucmVnaXN0ZXJfY29uc29sZSgmaHZjX2NvbnNvbGUpOwogCX0KIH0KIG1vZHVsZV9leGl0KGh2Y19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odnNpLmMgYi9kcml2ZXJzL2NoYXIvaHZzaS5jCmluZGV4IGQ0YjE0ZmYuLjFmNGI2ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odnNpLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2c2kuYwpAQCAtMTI1NSw3ICsxMjU1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBjb25zb2xlIGh2c2lfY29uX2RyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgY29uc29sZSBodnNpX2NvbnNvbGUgPSB7CiAJLm5hbWUJCT0gImh2c2kiLAogCS53cml0ZQkJPSBodnNpX2NvbnNvbGVfcHJpbnQsCiAJLmRldmljZQkJPSBodnNpX2NvbnNvbGVfZGV2aWNlLApAQCAtMTMwOCw3ICsxMzA4LDcgQEAKIAl9CiAKIAlpZiAoaHZzaV9jb3VudCkKLQkJcmVnaXN0ZXJfY29uc29sZSgmaHZzaV9jb25fZHJpdmVyKTsKKwkJcmVnaXN0ZXJfY29uc29sZSgmaHZzaV9jb25zb2xlKTsKIAlyZXR1cm4gMDsKIH0KIGNvbnNvbGVfaW5pdGNhbGwoaHZzaV9jb25zb2xlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9uMi1kcnYuYyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vbjItZHJ2LmMKaW5kZXggMGY5Y2JmMS4uN2E0ZjA4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9uMi1kcnYuYworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL24yLWRydi5jCkBAIC0zODcsNyArMzg3LDcgQEAKIAogc3RhdGljIGludCBuMnJuZ19kYXRhX3JlYWQoc3RydWN0IGh3cm5nICpybmcsIHUzMiAqZGF0YSkKIHsKLQlzdHJ1Y3QgbjJybmcgKm5wID0gKHN0cnVjdCBuMnJuZyAqKSBybmctPnByaXY7CisJc3RydWN0IG4ycm5nICpucCA9IHJuZy0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIHJhID0gX19wYSgmbnAtPnRlc3RfZGF0YSk7CiAJaW50IGxlbjsKIApAQCAtNzYyLDEyICs3NjIsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgbjJybmdfaW5pdCh2b2lkKQogewotCXJldHVybiBvZl9yZWdpc3Rlcl9kcml2ZXIoJm4ycm5nX2RyaXZlciwgJm9mX2J1c190eXBlKTsKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZuMnJuZ19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbjJybmdfZXhpdCh2b2lkKQogewotCW9mX3VucmVnaXN0ZXJfZHJpdmVyKCZuMnJuZ19kcml2ZXIpOworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZuMnJuZ19kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChuMnJuZ19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9rZXlib2FyZC5jIGIvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMKaW5kZXggNTQxMDlkYy4uMjViZTIxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMKKysrIGIvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMKQEAgLTEzMTUsMTAgKzEzMTUsMTQgQEAKIAlpZiAodGVzdF9iaXQoRVZfU05ELCBkZXYtPmV2Yml0KSkKIAkJcmV0dXJuIHRydWU7CiAKLQlpZiAodGVzdF9iaXQoRVZfS0VZLCBkZXYtPmV2Yml0KSkKKwlpZiAodGVzdF9iaXQoRVZfS0VZLCBkZXYtPmV2Yml0KSkgewogCQlmb3IgKGkgPSBLRVlfUkVTRVJWRUQ7IGkgPCBCVE5fTUlTQzsgaSsrKQogCQkJaWYgKHRlc3RfYml0KGksIGRldi0+a2V5Yml0KSkKIAkJCQlyZXR1cm4gdHJ1ZTsKKwkJZm9yIChpID0gS0VZX0JSTF9ET1QxOyBpIDw9IEtFWV9CUkxfRE9UMTA7IGkrKykKKwkJCWlmICh0ZXN0X2JpdChpLCBkZXYtPmtleWJpdCkpCisJCQkJcmV0dXJuIHRydWU7CisJfQogCiAJcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21lbS5jIGIvZHJpdmVycy9jaGFyL21lbS5jCmluZGV4IGY1NGRhYjguLmEzOThlY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9tZW0uYworKysgYi9kcml2ZXJzL2NoYXIvbWVtLmMKQEAgLTkxNiw3ICs5MTYsNyBAQAogCQkJICAgICAgTlVMTCwgZGV2bGlzdFttaW5vcl0ubmFtZSk7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHR0eV9pbml0KCk7CiB9CiAKIGZzX2luaXRjYWxsKGNocl9kZXZfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYwppbmRleCBlNzk1NmFjLi5lYzczZDlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CkBAIC00MjIsNyArNDIxLDcgQEAKIHN0YXRpYyB2b2lkIHNldF9jYXJkcGFyYW1ldGVyKHN0cnVjdCBjbTQwMDBfZGV2ICpkZXYpCiB7CiAJaW50IGk7Ci0JdW5zaWduZWQgaW50IGlvYmFzZSA9IGRldi0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKKwl1bnNpZ25lZCBpbnQgaW9iYXNlID0gZGV2LT5wX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCXVfaW50OF90IHN0b3BiaXRzID0gMHgwMjsgLyogSVNPIGRlZmF1bHQgKi8KIAogCURFQlVHUCgzLCBkZXYsICItPiBzZXRfY2FyZHBhcmFtZXRlclxuIik7CkBAIC00NTUsNyArNDU0LDcgQEAKIAl1bnNpZ25lZCBzaG9ydCBudW1fYnl0ZXNfcmVhZDsKIAl1bnNpZ25lZCBjaGFyIHB0c19yZXBseVs0XTsKIAlzc2l6ZV90IHJjOwotCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBkZXYtPnBfZGV2LT5pby5CYXNlUG9ydDE7CisJdW5zaWduZWQgaW50IGlvYmFzZSA9IGRldi0+cF9kZXYtPnJlc291cmNlWzBdLT5zdGFydDsKIAogCXJjID0gMDsKIApAQCAtNjY0LDcgKzY2Myw3IEBACiBzdGF0aWMgdm9pZCBtb25pdG9yX2NhcmQodW5zaWduZWQgbG9uZyBwKQogewogCXN0cnVjdCBjbTQwMDBfZGV2ICpkZXYgPSAoc3RydWN0IGNtNDAwMF9kZXYgKikgcDsKLQl1bnNpZ25lZCBpbnQgaW9iYXNlID0gZGV2LT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBkZXYtPnBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAJdW5zaWduZWQgc2hvcnQgczsKIAlzdHJ1Y3QgcHRzcmVxIHB0c3JlcTsKIAlpbnQgaSwgYXRyYzsKQEAgLTkyNSw3ICs5MjQsNyBAQAogCQkJbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBjbTQwMDBfZGV2ICpkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgaW50IGlvYmFzZSA9IGRldi0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKKwl1bnNpZ25lZCBpbnQgaW9iYXNlID0gZGV2LT5wX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCXNzaXplX3QgcmM7CiAJaW50IGksIGosIGs7CiAKQEAgLTEwNDgsNyArMTA0Nyw3IEBACiAJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGNtNDAwMF9kZXYgKmRldiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQl1bnNpZ25lZCBpbnQgaW9iYXNlID0gZGV2LT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBkZXYtPnBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAJdW5zaWduZWQgc2hvcnQgczsKIAl1bnNpZ25lZCBjaGFyIHRtcDsKIAl1bnNpZ25lZCBjaGFyIGluZm9sZW47CkBAIC0xNDAxLDcgKzE0MDAsNyBAQAogc3RhdGljIGxvbmcgY21tX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgY200MDAwX2RldiAqZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBkZXYtPnBfZGV2LT5pby5CYXNlUG9ydDE7CisJdW5zaWduZWQgaW50IGlvYmFzZSA9IGRldi0+cF9kZXYtPnJlc291cmNlWzBdLT5zdGFydDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKIAlpbnQgc2l6ZTsKQEAgLTE3NTIsMTcgKzE3NTEsMTIgQEAKIAlpZiAoIWNmZy0+aW8ubndpbikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKiBHZXQgdGhlIElPYWRkciAqLwotCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBjZmctPmlvLndpblswXS5iYXNlOwotCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBjZmctPmlvLndpblswXS5sZW47Ci0JcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JaWYgKCEoY2ZnLT5pby5mbGFncyAmIENJU1RQTF9JT184QklUKSkKLQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OwotCWlmICghKGNmZy0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQotCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSBjZmctPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGNmZy0+aW8ud2luWzBdLmJhc2U7CisJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBjZmctPmlvLndpblswXS5sZW47CisJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyB8PSBwY21jaWFfaW9fY2ZnX2RhdGFfd2lkdGgoY2ZnLT5pby5mbGFncyk7CisJcF9kZXYtPmlvX2xpbmVzID0gY2ZnLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwogCi0JcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKTsKKwlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpOwogfQogCiBzdGF0aWMgaW50IGNtNDAwMF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKiBsaW5rLCBpbnQgZGV2bm8pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDA0MF9jcy5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwNDBfY3MuYwppbmRleCBjMDc3NWM4Li44MTVjZGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDA0MF9jcy5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDQwX2NzLmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KQEAgLTExMCw3ICsxMDksNyBAQAogc3RhdGljIHZvaWQgY200MDQwX2RvX3BvbGwodW5zaWduZWQgbG9uZyBkdW1teSkKIHsKIAlzdHJ1Y3QgcmVhZGVyX2RldiAqZGV2ID0gKHN0cnVjdCByZWFkZXJfZGV2ICopIGR1bW15OwotCXVuc2lnbmVkIGludCBvYnMgPSB4aW5iKGRldi0+cF9kZXYtPmlvLkJhc2VQb3J0MQorCXVuc2lnbmVkIGludCBvYnMgPSB4aW5iKGRldi0+cF9kZXYtPnJlc291cmNlWzBdLT5zdGFydAogCQkJCSsgUkVHX09GRlNFVF9CVUZGRVJfU1RBVFVTKTsKIAogCWlmICgob2JzICYgQlNSX0JVTEtfSU5fRlVMTCkpIHsKQEAgLTE0MSw3ICsxNDAsNyBAQAogc3RhdGljIGludCB3YWl0X2Zvcl9idWxrX291dF9yZWFkeShzdHJ1Y3QgcmVhZGVyX2RldiAqZGV2KQogewogCWludCBpLCByYzsKLQlpbnQgaW9iYXNlID0gZGV2LT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCWludCBpb2Jhc2UgPSBkZXYtPnBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUE9MTF9MT09QX0NPVU5UOyBpKyspIHsKIAkJaWYgKCh4aW5iKGlvYmFzZSArIFJFR19PRkZTRVRfQlVGRkVSX1NUQVRVUykKQEAgLTE3MSw3ICsxNzAsNyBAQAogLyogV3JpdGUgdG8gU3luYyBDb250cm9sIFJlZ2lzdGVyICovCiBzdGF0aWMgaW50IHdyaXRlX3N5bmNfcmVnKHVuc2lnbmVkIGNoYXIgdmFsLCBzdHJ1Y3QgcmVhZGVyX2RldiAqZGV2KQogewotCWludCBpb2Jhc2UgPSBkZXYtPnBfZGV2LT5pby5CYXNlUG9ydDE7CisJaW50IGlvYmFzZSA9IGRldi0+cF9kZXYtPnJlc291cmNlWzBdLT5zdGFydDsKIAlpbnQgcmM7CiAKIAlyYyA9IHdhaXRfZm9yX2J1bGtfb3V0X3JlYWR5KGRldik7CkBAIC0xODksNyArMTg4LDcgQEAKIHN0YXRpYyBpbnQgd2FpdF9mb3JfYnVsa19pbl9yZWFkeShzdHJ1Y3QgcmVhZGVyX2RldiAqZGV2KQogewogCWludCBpLCByYzsKLQlpbnQgaW9iYXNlID0gZGV2LT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCWludCBpb2Jhc2UgPSBkZXYtPnBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUE9MTF9MT09QX0NPVU5UOyBpKyspIHsKIAkJaWYgKCh4aW5iKGlvYmFzZSArIFJFR19PRkZTRVRfQlVGRkVSX1NUQVRVUykKQEAgLTIxOSw3ICsyMTgsNyBAQAogCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IHJlYWRlcl9kZXYgKmRldiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlpbnQgaW9iYXNlID0gZGV2LT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCWludCBpb2Jhc2UgPSBkZXYtPnBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAJc2l6ZV90IGJ5dGVzX3RvX3JlYWQ7CiAJdW5zaWduZWQgbG9uZyBpOwogCXNpemVfdCBtaW5fYnl0ZXNfdG9fcmVhZDsKQEAgLTMyMSw3ICszMjAsNyBAQAogCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCByZWFkZXJfZGV2ICpkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JaW50IGlvYmFzZSA9IGRldi0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKKwlpbnQgaW9iYXNlID0gZGV2LT5wX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCXNzaXplX3QgcmM7CiAJaW50IGk7CiAJdW5zaWduZWQgaW50IGJ5dGVzX3RvX3dyaXRlOwpAQCAtNTI4LDE2ICs1MjcsMTIgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBHZXQgdGhlIElPYWRkciAqLwotCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBjZmctPmlvLndpblswXS5iYXNlOwotCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBjZmctPmlvLndpblswXS5sZW47Ci0JcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JaWYgKCEoY2ZnLT5pby5mbGFncyAmIENJU1RQTF9JT184QklUKSkKLQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OwotCWlmICghKGNmZy0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQotCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSBjZmctPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGNmZy0+aW8ud2luWzBdLmJhc2U7CisJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBjZmctPmlvLndpblswXS5sZW47CisJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyB8PSBwY21jaWFfaW9fY2ZnX2RhdGFfd2lkdGgoY2ZnLT5pby5mbGFncyk7CisJcF9kZXYtPmlvX2xpbmVzID0gY2ZnLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCXJjID0gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpOwogCi0JcmMgPSBwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbyk7CiAJZGV2X3ByaW50ayhLRVJOX0lORk8sICZwX2Rldi0+ZGV2LAogCQkgICAicGNtY2lhX3JlcXVlc3RfaW8gcmV0dXJuZWQgMHgleFxuIiwgcmMpOwogCXJldHVybiByYzsKQEAgLTU0OSwxMCArNTQ0LDYgQEAKIAlzdHJ1Y3QgcmVhZGVyX2RldiAqZGV2OwogCWludCBmYWlsX3JjOwogCi0JbGluay0+aW8uQmFzZVBvcnQyID0gMDsKLQlsaW5rLT5pby5OdW1Qb3J0czIgPSAwOwotCWxpbmstPmlvLkF0dHJpYnV0ZXMyID0gMDsKLQogCWlmIChwY21jaWFfbG9vcF9jb25maWcobGluaywgY200MDQwX2NvbmZpZ19jaGVjaywgTlVMTCkpCiAJCWdvdG8gY3NfcmVsZWFzZTsKIApAQCAtNTY4LDggKzU1OSw4IEBACiAKIAlkZXYgPSBsaW5rLT5wcml2OwogCi0JREVCVUdQKDIsIGRldiwgImRldmljZSAiIERFVklDRV9OQU1FICIlZCBhdCAweCUuNHgtMHglLjR4XG4iLCBkZXZubywKLQkgICAgICBsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlvLkJhc2VQb3J0MStsaW5rLT5pby5OdW1Qb3J0czEpOworCURFQlVHUCgyLCBkZXYsICJkZXZpY2UgIiBERVZJQ0VfTkFNRSAiJWQgYXQgJXBSXG4iLCBkZXZubywKKwkgICAgICBsaW5rLT5yZXNvdXJjZVswXSk7CiAJREVCVUdQKDIsIGRldiwgIjwtIHJlYWRlcl9jb25maWcgKHN1Y2MpXG4iKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9pcHdpcmVsZXNzL21haW4uYyBiL2RyaXZlcnMvY2hhci9wY21jaWEvaXB3aXJlbGVzcy9tYWluLmMKaW5kZXggNjNjMzJlMy4uNjdiZGIwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3BjbWNpYS9pcHdpcmVsZXNzL21haW4uYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvbWFpbi5jCkBAIC04NCwyMyArODQsMjIgQEAKIHsKIAlzdHJ1Y3QgaXB3X2RldiAqaXB3ID0gcHJpdl9kYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqaW9fcmVzb3VyY2U7Ci0JbWVtcmVxX3QgbWVtcmVxX2F0dHJfbWVtb3J5OwotCW1lbXJlcV90IG1lbXJlcV9jb21tb25fbWVtb3J5OwogCWludCByZXQ7CiAKLQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2ZnLT5pby53aW5bMF0uYmFzZTsKLQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gY2ZnLT5pby53aW5bMF0ubGVuOwotCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IDE2OworCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGNmZy0+aW8ud2luWzBdLmJhc2U7CisJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBjZmctPmlvLndpblswXS5sZW47CiAKIAkvKiAweDQwIGNhdXNlcyBpdCB0byBnZW5lcmF0ZSBsZXZlbCBtb2RlIGludGVycnVwdHMuICovCiAJLyogMHgwNCBlbmFibGVzIElSRVEgcGluLiAqLwogCXBfZGV2LT5jb25mLkNvbmZpZ0luZGV4ID0gY2ZnLT5pbmRleCB8IDB4NDQ7Ci0JcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pOworCXBfZGV2LT5pb19saW5lcyA9IDE2OworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaW9fcmVzb3VyY2UgPSByZXF1ZXN0X3JlZ2lvbihwX2Rldi0+aW8uQmFzZVBvcnQxLCBwX2Rldi0+aW8uTnVtUG9ydHMxLAorCWlvX3Jlc291cmNlID0gcmVxdWVzdF9yZWdpb24ocF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCwKKwkJCQlyZXNvdXJjZV9zaXplKHBfZGV2LT5yZXNvdXJjZVswXSksCiAJCQkJSVBXSVJFTEVTU19QQ0NBUkRfTkFNRSk7CiAKIAlpZiAoY2ZnLT5tZW0ubndpbiA9PSAwKQpAQCAtMTIwLDExICsxMTksOCBAQAogCWlmIChyZXQgIT0gMCkKIAkJZ290byBleGl0MTsKIAotCW1lbXJlcV9jb21tb25fbWVtb3J5LkNhcmRPZmZzZXQgPSBjZmctPm1lbS53aW5bMF0uY2FyZF9hZGRyOwotCW1lbXJlcV9jb21tb25fbWVtb3J5LlBhZ2UgPSAwOwotCiAJcmV0ID0gcGNtY2lhX21hcF9tZW1fcGFnZShwX2RldiwgaXB3LT5oYW5kbGVfY29tbW9uX21lbW9yeSwKLQkJCQkmbWVtcmVxX2NvbW1vbl9tZW1vcnkpOworCQkJCWNmZy0+bWVtLndpblswXS5jYXJkX2FkZHIpOwogCiAJaWYgKHJldCAhPSAwKQogCQlnb3RvIGV4aXQyOwpAQCAtMTQ5LDEyICsxNDUsNyBAQAogCWlmIChyZXQgIT0gMCkKIAkJZ290byBleGl0MjsKIAotCW1lbXJlcV9hdHRyX21lbW9yeS5DYXJkT2Zmc2V0ID0gMDsKLQltZW1yZXFfYXR0cl9tZW1vcnkuUGFnZSA9IDA7Ci0KLQlyZXQgPSBwY21jaWFfbWFwX21lbV9wYWdlKHBfZGV2LCBpcHctPmhhbmRsZV9hdHRyX21lbW9yeSwKLQkJCQkmbWVtcmVxX2F0dHJfbWVtb3J5KTsKLQorCXJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UocF9kZXYsIGlwdy0+aGFuZGxlX2F0dHJfbWVtb3J5LCAwKTsKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gZXhpdDM7CiAKQEAgLTE2NiwxNSArMTU3LDEyIEBACiAJcmV0dXJuIDA7CiAKIGV4aXQzOgotCXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhwX2RldiwgaXB3LT5oYW5kbGVfYXR0cl9tZW1vcnkpOwogZXhpdDI6CiAJaWYgKGlwdy0+Y29tbW9uX21lbW9yeSkgewogCQlyZWxlYXNlX21lbV9yZWdpb24oaXB3LT5yZXF1ZXN0X2NvbW1vbl9tZW1vcnkuQmFzZSwKIAkJCQlpcHctPnJlcXVlc3RfY29tbW9uX21lbW9yeS5TaXplKTsKIAkJaW91bm1hcChpcHctPmNvbW1vbl9tZW1vcnkpOwotCQlwY21jaWFfcmVsZWFzZV93aW5kb3cocF9kZXYsIGlwdy0+aGFuZGxlX2NvbW1vbl9tZW1vcnkpOwotCX0gZWxzZQotCQlwY21jaWFfcmVsZWFzZV93aW5kb3cocF9kZXYsIGlwdy0+aGFuZGxlX2NvbW1vbl9tZW1vcnkpOworCX0KIGV4aXQxOgogCXJlbGVhc2VfcmVzb3VyY2UoaW9fcmVzb3VyY2UpOwogCXBjbWNpYV9kaXNhYmxlX2RldmljZShwX2Rldik7CkBAIC0xOTcsNyArMTg1LDcgQEAKIAogCUlOSVRfV09SSygmaXB3LT53b3JrX3JlYm9vdCwgc2lnbmFsbGVkX3JlYm9vdF93b3JrKTsKIAotCWlwd2lyZWxlc3NfaW5pdF9oYXJkd2FyZV92MShpcHctPmhhcmR3YXJlLCBsaW5rLT5pby5CYXNlUG9ydDEsCisJaXB3aXJlbGVzc19pbml0X2hhcmR3YXJlX3YxKGlwdy0+aGFyZHdhcmUsIGxpbmstPnJlc291cmNlWzBdLT5zdGFydCwKIAkJCQkgICAgaXB3LT5hdHRyX21lbW9yeSwgaXB3LT5jb21tb25fbWVtb3J5LAogCQkJCSAgICBpcHctPmlzX3YyX2NhcmQsIHNpZ25hbGxlZF9yZWJvb3RfY2FsbGJhY2ssCiAJCQkJICAgIGlwdyk7CkBAIC0yMDksMTAgKzE5Nyw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTyBJUFdJUkVMRVNTX1BDQ0FSRF9OQU1FICI6IENhcmQgdHlwZSAlc1xuIiwKIAkJCWlwdy0+aXNfdjJfY2FyZCA/ICJWMi9WMyIgOiAiVjEiKTsKIAlwcmludGsoS0VSTl9JTkZPIElQV0lSRUxFU1NfUENDQVJEX05BTUUKLQkJCSI6IEkvTyBwb3J0cyAweCUwNHgtMHglMDR4LCBpcnEgJWRcbiIsCi0JCQkodW5zaWduZWQgaW50KSBsaW5rLT5pby5CYXNlUG9ydDEsCi0JCQkodW5zaWduZWQgaW50KSAobGluay0+aW8uQmFzZVBvcnQxICsKLQkJCQlsaW5rLT5pby5OdW1Qb3J0czEgLSAxKSwKKwkJIjogSS9PIHBvcnRzICVwUiwgaXJxICVkXG4iLCBsaW5rLT5yZXNvdXJjZVswXSwKIAkJCSh1bnNpZ25lZCBpbnQpIGxpbmstPmlycSk7CiAJaWYgKGlwdy0+YXR0cl9tZW1vcnkgJiYgaXB3LT5jb21tb25fbWVtb3J5KQogCQlwcmludGsoS0VSTl9JTkZPIElQV0lSRUxFU1NfUENDQVJEX05BTUUKQEAgLTI1MCwxMyArMjM1LDEyIEBACiAJCXJlbGVhc2VfbWVtX3JlZ2lvbihpcHctPnJlcXVlc3RfYXR0cl9tZW1vcnkuQmFzZSwKIAkJCQlpcHctPnJlcXVlc3RfYXR0cl9tZW1vcnkuU2l6ZSk7CiAJCWlvdW5tYXAoaXB3LT5hdHRyX21lbW9yeSk7Ci0JCXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLCBpcHctPmhhbmRsZV9hdHRyX21lbW9yeSk7CisKIAl9CiAJaWYgKGlwdy0+Y29tbW9uX21lbW9yeSkgewogCQlyZWxlYXNlX21lbV9yZWdpb24oaXB3LT5yZXF1ZXN0X2NvbW1vbl9tZW1vcnkuQmFzZSwKIAkJCQlpcHctPnJlcXVlc3RfY29tbW9uX21lbW9yeS5TaXplKTsKIAkJaW91bm1hcChpcHctPmNvbW1vbl9tZW1vcnkpOwotCQlwY21jaWFfcmVsZWFzZV93aW5kb3cobGluaywgaXB3LT5oYW5kbGVfY29tbW9uX21lbW9yeSk7CiAJfQogCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIAlyZXR1cm4gLTE7CkBAIC0yNzQsMTEgKzI1OCw2IEBACiAJCQkJaXB3LT5yZXF1ZXN0X2F0dHJfbWVtb3J5LlNpemUpOwogCQlpb3VubWFwKGlwdy0+YXR0cl9tZW1vcnkpOwogCX0KLQlpZiAoaXB3LT5jb21tb25fbWVtb3J5KQotCQlwY21jaWFfcmVsZWFzZV93aW5kb3coaXB3LT5saW5rLCBpcHctPmhhbmRsZV9jb21tb25fbWVtb3J5KTsKLQlpZiAoaXB3LT5hdHRyX21lbW9yeSkKLQkJcGNtY2lhX3JlbGVhc2Vfd2luZG93KGlwdy0+bGluaywgaXB3LT5oYW5kbGVfYXR0cl9tZW1vcnkpOwotCiAJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGlwdy0+bGluayk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wY21jaWEvaXB3aXJlbGVzcy9tYWluLmggYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvbWFpbi5oCmluZGV4IDk2ZDBlZjMuLmMyMDdiZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvaXB3aXJlbGVzcy9tYWluLmgKKysrIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9pcHdpcmVsZXNzL21haW4uaApAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wY21jaWEvaXB3aXJlbGVzcy90dHkuaCBiL2RyaXZlcnMvY2hhci9wY21jaWEvaXB3aXJlbGVzcy90dHkuaAppbmRleCA0ZGE2YzIwLi4zZTE2M2Q0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvdHR5LmgKKysrIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9pcHdpcmVsZXNzL3R0eS5oCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jCmluZGV4IDMwODkwM2UuLjllY2Q2YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMKQEAgLTcwLDcgKzcwLDYgQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9oZGxjLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgpAQCAtNTcyLDE4ICs1NzEsMTUgQEAKIAkJCSAgdW5zaWduZWQgaW50IHZjYywKIAkJCSAgdm9pZCAqcHJpdl9kYXRhKQogewotCWlmIChjZmctPmlvLm53aW4gPiAwKSB7Ci0JCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCQlpZiAoIShjZmctPmlvLmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQotCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OwotCQlpZiAoIShjZmctPmlvLmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSBjZmctPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBjZmctPmlvLndpblswXS5iYXNlOwotCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gY2ZnLT5pby53aW5bMF0ubGVuOwotCQlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pOwotCX0KLQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIWNmZy0+aW8ubndpbikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gY2ZnLT5pby53aW5bMF0uYmFzZTsKKwlwX2Rldi0+cmVzb3VyY2VbMF0tPmVuZCA9IGNmZy0+aW8ud2luWzBdLmxlbjsKKwlwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9IHBjbWNpYV9pb19jZmdfZGF0YV93aWR0aChjZmctPmlvLmZsYWdzKTsKKwlwX2Rldi0+aW9fbGluZXMgPSBjZmctPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisKKwlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpOwogfQogCiBzdGF0aWMgaW50IG1nc2xwY19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCkBAIC02MTAsMTYgKzYwNiwxNSBAQAogICAgIGlmIChyZXQpCiAJICAgIGdvdG8gZmFpbGVkOwogCi0gICAgaW5mby0+aW9fYmFzZSA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKyAgICBpbmZvLT5pb19iYXNlID0gbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogICAgIGluZm8tPmlycV9sZXZlbCA9IGxpbmstPmlycTsKIAogICAgIGRldl9pbmZvKCZsaW5rLT5kZXYsICJpbmRleCAweCUwMng6IiwKIAkgICAgbGluay0+Y29uZi5Db25maWdJbmRleCk7CiAgICAgaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkKIAkgICAgcHJpbnRrKCIsIGlycSAlZCIsIGxpbmstPmlycSk7Ci0gICAgaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKLQkgICAgcHJpbnRrKCIsIGlvIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDEsCi0JCSAgIGxpbmstPmlvLkJhc2VQb3J0MStsaW5rLT5pby5OdW1Qb3J0czEtMSk7CisgICAgaWYgKGxpbmstPnJlc291cmNlWzBdKQorCSAgICBwcmludGsoIiwgaW8gJXBSIiwgbGluay0+cmVzb3VyY2VbMF0pOwogICAgIHByaW50aygiXG4iKTsKICAgICByZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jIGIvZHJpdmVycy9jaGFyL3JhbmRvbS5jCmluZGV4IDhkODU1ODcuLmNhZWYzNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yYW5kb20uYworKysgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKQEAgLTQwNyw4ICs0MDcsOCBAQAogCXN0cnVjdCBwb29saW5mbyAqcG9vbGluZm87CiAJX191MzIgKnBvb2w7CiAJY29uc3QgY2hhciAqbmFtZTsKLQlpbnQgbGltaXQ7CiAJc3RydWN0IGVudHJvcHlfc3RvcmUgKnB1bGw7CisJaW50IGxpbWl0OwogCiAJLyogcmVhZC13cml0ZSBkYXRhOiAqLwogCXNwaW5sb2NrX3QgbG9jazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMKaW5kZXggNDU2MWNlMi4uMzM0Y2Y1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMKKysrIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMKQEAgLTQ4NDUsNyArNDg0NSw3IEBACiB7CiAJc3RhdGljIHVuc2lnbmVkIHNob3J0IHBhdHRlcm5zW10gPQogCQl7MHgwMDAwLCAweGZmZmYsIDB4YWFhYSwgMHg1NTU1LCAweDY5NjksIDB4OTY5Nn07Ci0Jc3RhdGljIHVuc2lnbmVkIGludCBjb3VudCA9IHNpemVvZihwYXR0ZXJucykvc2l6ZW9mKHBhdHRlcm5zWzBdKTsKKwlzdGF0aWMgdW5zaWduZWQgaW50IGNvdW50ID0gQVJSQVlfU0laRShwYXR0ZXJucyk7CiAJdW5zaWduZWQgaW50IGk7CiAJaW50IHJjID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5c3JxLmMgYi9kcml2ZXJzL2NoYXIvc3lzcnEuYwppbmRleCA1ZDY0ZTNhLi44NzhhYzBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3lzcnEuYworKysgYi9kcml2ZXJzL2NoYXIvc3lzcnEuYwpAQCAtNDkzLDcgKzQ5Myw3IEBACiAgICAgICAgICAgICAgICAgc3lzcnFfa2V5X3RhYmxlW2ldID0gb3BfcDsKIH0KIAotc3RhdGljIHZvaWQgX19oYW5kbGVfc3lzcnEoaW50IGtleSwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGNoZWNrX21hc2spCit2b2lkIF9faGFuZGxlX3N5c3JxKGludCBrZXksIHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBjaGVja19tYXNrKQogewogCXN0cnVjdCBzeXNycV9rZXlfb3AgKm9wX3A7CiAJaW50IG9yaWdfbG9nX2xldmVsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYwppbmRleCAyNDMxNGE5Li4xMDMwZjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYworKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYwpAQCAtNjIzLDcgKzYyMywxNCBAQAogCiBzdGF0aWMgaW50IHRwbV90aXNfcG5wX3Jlc3VtZShzdHJ1Y3QgcG5wX2RldiAqZGV2KQogewotCXJldHVybiB0cG1fcG1fcmVzdW1lKCZkZXYtPmRldik7CisJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gcG5wX2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldDsKKworCXJldCA9IHRwbV9wbV9yZXN1bWUoJmRldi0+ZGV2KTsKKwlpZiAoIXJldCkKKwkJdHBtX2NvbnRpbnVlX3NlbGZ0ZXN0KGNoaXApOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHN0cnVjdCBwbnBfZGV2aWNlX2lkIHRwbV9wbnBfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90dHlfaW8uYyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwppbmRleCBkNzFmMGZjLi41MDc0NDFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKKysrIGIvZHJpdmVycy9jaGFyL3R0eV9pby5jCkBAIC0zMTI4LDcgKzMxMjgsNyBAQAogICogT2ssIG5vdyB3ZSBjYW4gaW5pdGlhbGl6ZSB0aGUgcmVzdCBvZiB0aGUgdHR5IGRldmljZXMgYW5kIGNhbiBjb3VudAogICogb24gbWVtb3J5IGFsbG9jYXRpb25zLCBpbnRlcnJ1cHRzIGV0Yy4uCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IHR0eV9pbml0KHZvaWQpCitpbnQgX19pbml0IHR0eV9pbml0KHZvaWQpCiB7CiAJY2Rldl9pbml0KCZ0dHlfY2RldiwgJnR0eV9mb3BzKTsKIAlpZiAoY2Rldl9hZGQoJnR0eV9jZGV2LCBNS0RFVihUVFlBVVhfTUFKT1IsIDApLCAxKSB8fApAQCAtMzE0OSw0ICszMTQ5LDQgQEAKICNlbmRpZgogCXJldHVybiAwOwogfQotbW9kdWxlX2luaXQodHR5X2luaXQpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdnQuYyBiL2RyaXZlcnMvY2hhci92dC5jCmluZGV4IDdjZGI2ZWUuLjRhOWViMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92dC5jCisrKyBiL2RyaXZlcnMvY2hhci92dC5jCkBAIC0xMDQsNiArMTA0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgva2RiLmg+CiAKICNkZWZpbmUgTUFYX05SX0NPTl9EUklWRVIgMTYKIApAQCAtMTg3LDEwICsxODgsMTUgQEAKICAqIGZnX2NvbnNvbGUgaXMgdGhlIGN1cnJlbnQgdmlydHVhbCBjb25zb2xlLAogICogbGFzdF9jb25zb2xlIGlzIHRoZSBsYXN0IHVzZWQgb25lLAogICogd2FudF9jb25zb2xlIGlzIHRoZSBjb25zb2xlIHdlIHdhbnQgdG8gc3dpdGNoIHRvLAorICogc2F2ZWRfKiB2YXJpYW50cyBhcmUgZm9yIHNhdmUvcmVzdG9yZSBhcm91bmQga2VybmVsIGRlYnVnZ2VyIGVudGVyL2xlYXZlCiAgKi8KIGludCBmZ19jb25zb2xlOwogaW50IGxhc3RfY29uc29sZTsKIGludCB3YW50X2NvbnNvbGUgPSAtMTsKK2ludCBzYXZlZF9mZ19jb25zb2xlOworaW50IHNhdmVkX2xhc3RfY29uc29sZTsKK2ludCBzYXZlZF93YW50X2NvbnNvbGU7CitpbnQgc2F2ZWRfdmNfbW9kZTsKIAogLyoKICAqIEZvciBlYWNoIGV4aXN0aW5nIGRpc3BsYXksIHdlIGhhdmUgYSBwb2ludGVyIHRvIGNvbnNvbGUgY3VycmVudGx5IHZpc2libGUKQEAgLTM0MTQsNiArMzQyMCw3OCBAQAogRVhQT1JUX1NZTUJPTChjb25faXNfYm91bmQpOwogCiAvKioKKyAqIGNvbl9kZWJ1Z19lbnRlciAtIHByZXBhcmUgdGhlIGNvbnNvbGUgZm9yIHRoZSBrZXJuZWwgZGVidWdnZXIKKyAqIEBzdzogY29uc29sZSBkcml2ZXIKKyAqCisgKiBDYWxsZWQgd2hlbiB0aGUgY29uc29sZSBpcyB0YWtlbiBvdmVyIGJ5IHRoZSBrZXJuZWwgZGVidWdnZXIsIHRoaXMKKyAqIGZ1bmN0aW9uIG5lZWRzIHRvIHNhdmUgdGhlIGN1cnJlbnQgY29uc29sZSBzdGF0ZSwgdGhlbiBwdXQgdGhlIGNvbnNvbGUKKyAqIGludG8gYSBzdGF0ZSBzdWl0YWJsZSBmb3IgdGhlIGtlcm5lbCBkZWJ1Z2dlci4KKyAqCisgKiBSRVRVUk5TOgorICogWmVybyBvbiBzdWNjZXNzLCBub256ZXJvIGlmIGEgZmFpbHVyZSBvY2N1cnJlZCB3aGVuIHRyeWluZyB0byBwcmVwYXJlCisgKiB0aGUgY29uc29sZSBmb3IgdGhlIGRlYnVnZ2VyLgorICovCitpbnQgY29uX2RlYnVnX2VudGVyKHN0cnVjdCB2Y19kYXRhICp2YykKK3sKKwlpbnQgcmV0ID0gMDsKKworCXNhdmVkX2ZnX2NvbnNvbGUgPSBmZ19jb25zb2xlOworCXNhdmVkX2xhc3RfY29uc29sZSA9IGxhc3RfY29uc29sZTsKKwlzYXZlZF93YW50X2NvbnNvbGUgPSB3YW50X2NvbnNvbGU7CisJc2F2ZWRfdmNfbW9kZSA9IHZjLT52Y19tb2RlOworCXZjLT52Y19tb2RlID0gS0RfVEVYVDsKKwljb25zb2xlX2JsYW5rZWQgPSAwOworCWlmICh2Yy0+dmNfc3ctPmNvbl9kZWJ1Z19lbnRlcikKKwkJcmV0ID0gdmMtPnZjX3N3LT5jb25fZGVidWdfZW50ZXIodmMpOworI2lmZGVmIENPTkZJR19LR0RCX0tEQgorCS8qIFNldCB0aGUgaW5pdGlhbCBMSU5FUyB2YXJpYWJsZSBpZiBpdCBpcyBub3QgYWxyZWFkeSBzZXQgKi8KKwlpZiAodmMtPnZjX3Jvd3MgPCA5OTkpIHsKKwkJaW50IGxpbmVjb3VudDsKKwkJY2hhciBsbnNbNF07CisJCWNvbnN0IGNoYXIgKnNldGFyZ3NbM10gPSB7CisJCQkic2V0IiwKKwkJCSJMSU5FUyIsCisJCQlsbnMsCisJCX07CisJCWlmIChrZGJnZXRpbnRlbnYoc2V0YXJnc1swXSwgJmxpbmVjb3VudCkpIHsKKwkJCXNucHJpbnRmKGxucywgNCwgIiVpIiwgdmMtPnZjX3Jvd3MpOworCQkJa2RiX3NldCgyLCBzZXRhcmdzKTsKKwkJfQorCX0KKyNlbmRpZiAvKiBDT05GSUdfS0dEQl9LREIgKi8KKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoY29uX2RlYnVnX2VudGVyKTsKKworLyoqCisgKiBjb25fZGVidWdfbGVhdmUgLSByZXN0b3JlIGNvbnNvbGUgc3RhdGUKKyAqIEBzdzogY29uc29sZSBkcml2ZXIKKyAqCisgKiBSZXN0b3JlIHRoZSBjb25zb2xlIHN0YXRlIHRvIHdoYXQgaXQgd2FzIGJlZm9yZSB0aGUga2VybmVsIGRlYnVnZ2VyCisgKiB3YXMgaW52b2tlZC4KKyAqCisgKiBSRVRVUk5TOgorICogWmVybyBvbiBzdWNjZXNzLCBub256ZXJvIGlmIGEgZmFpbHVyZSBvY2N1cnJlZCB3aGVuIHRyeWluZyB0byByZXN0b3JlCisgKiB0aGUgY29uc29sZS4KKyAqLworaW50IGNvbl9kZWJ1Z19sZWF2ZSh2b2lkKQoreworCXN0cnVjdCB2Y19kYXRhICp2YzsKKwlpbnQgcmV0ID0gMDsKKworCWZnX2NvbnNvbGUgPSBzYXZlZF9mZ19jb25zb2xlOworCWxhc3RfY29uc29sZSA9IHNhdmVkX2xhc3RfY29uc29sZTsKKwl3YW50X2NvbnNvbGUgPSBzYXZlZF93YW50X2NvbnNvbGU7CisJdmNfY29uc1tmZ19jb25zb2xlXS5kLT52Y19tb2RlID0gc2F2ZWRfdmNfbW9kZTsKKworCXZjID0gdmNfY29uc1tmZ19jb25zb2xlXS5kOworCWlmICh2Yy0+dmNfc3ctPmNvbl9kZWJ1Z19sZWF2ZSkKKwkJcmV0ID0gdmMtPnZjX3N3LT5jb25fZGVidWdfbGVhdmUodmMpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjb25fZGVidWdfbGVhdmUpOworCisvKioKICAqIHJlZ2lzdGVyX2Nvbl9kcml2ZXIgLSByZWdpc3RlciBjb25zb2xlIGRyaXZlciB0byBjb25zb2xlIGxheWVyCiAgKiBAY3N3OiBjb25zb2xlIGRyaXZlcgogICogQGZpcnN0OiB0aGUgZmlyc3QgY29uc29sZSB0byB0YWtlIG92ZXIsIG1pbmltdW0gdmFsdWUgaXMgMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9hY3BpX3BtLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYwppbmRleCA3MmE2MzNhLi5jZmIwZjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYwpAQCAtNjgsMTAgKzY4LDcgQEAKIAkucmF0aW5nCQk9IDIwMCwKIAkucmVhZAkJPSBhY3BpX3BtX3JlYWQsCiAJLm1hc2sJCT0gKGN5Y2xlX3QpQUNQSV9QTV9NQVNLLAotCS5tdWx0CQk9IDAsIC8qdG8gYmUgY2FsY3VsYXRlZCovCi0JLnNoaWZ0CQk9IDIyLAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKLQogfTsKIAogCkBAIC0xOTAsOSArMTg3LDYgQEAKIAlpZiAoIXBtdG1yX2lvcG9ydCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljbG9ja3NvdXJjZV9hY3BpX3BtLm11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KFBNVE1SX1RJQ0tTX1BFUl9TRUMsCi0JCQkJCQljbG9ja3NvdXJjZV9hY3BpX3BtLnNoaWZ0KTsKLQogCS8qICJ2ZXJpZnkiIHRoaXMgdGltaW5nIHNvdXJjZTogKi8KIAlmb3IgKGogPSAwOyBqIDwgQUNQSV9QTV9NT05PVE9OSUNJVFlfQ0hFQ0tTOyBqKyspIHsKIAkJdWRlbGF5KDEwMCAqIGopOwpAQCAtMjIwLDcgKzIxNCw4IEBACiAJaWYgKHZlcmlmeV9wbXRtcl9yYXRlKCkgIT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXR1cm4gY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX2FjcGlfcG0pOworCXJldHVybiBjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfYWNwaV9wbSwKKwkJCQkJCVBNVE1SX1RJQ0tTX1BFUl9TRUMpOwogfQogCiAvKiBXZSB1c2UgZnNfaW5pdGNhbGwgYmVjYXVzZSB3ZSB3YW50IHRoZSBQQ0kgZml4dXBzIHRvIGhhdmUgcnVuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2NzNTUzNS1jbG9ja2V2dC5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9jczU1MzUtY2xvY2tldnQuYwppbmRleCBkN2JlNjlmMTMuLmI3ZGFiMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvY3M1NTM1LWNsb2NrZXZ0LmMKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9jczU1MzUtY2xvY2tldnQuYwpAQCAtMTk0LDYgKzE5NCw2IEBACiAKIG1vZHVsZV9pbml0KGNzNTUzNV9tZmdwdF9pbml0KTsKIAotTU9EVUxFX0FVVEhPUigiQW5kcmVzIFNhbG9tb24gPGRpbGluZ2VyQGNvbGxhYm9yYS5jby51az4iKTsKK01PRFVMRV9BVVRIT1IoIkFuZHJlcyBTYWxvbW9uIDxkaWxpbmdlckBxdWV1ZWQubmV0PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJDUzU1MzUvQ1M1NTM2IE1GR1BUIGNsb2NrIGV2ZW50IGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKaW5kZXggMDYzYjIxOC4uMTk5ZGNiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMvcG93ZXIuaD4KKwogI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19DT1JFLCBcCiAJCQkJCQkiY3B1ZnJlcS1jb3JlIiwgbXNnKQogCkBAIC02OCw3ICs3MCw3IEBACiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHJ3X3NlbWFwaG9yZSwgY3B1X3BvbGljeV9yd3NlbSk7CiAKICNkZWZpbmUgbG9ja19wb2xpY3lfcndzZW0obW9kZSwgY3B1KQkJCQkJXAotaW50IGxvY2tfcG9saWN5X3J3c2VtXyMjbW9kZQkJCQkJCVwKK3N0YXRpYyBpbnQgbG9ja19wb2xpY3lfcndzZW1fIyNtb2RlCQkJCQlcCiAoaW50IGNwdSkJCQkJCQkJCVwKIHsJCQkJCQkJCQlcCiAJaW50IHBvbGljeV9jcHUgPSBwZXJfY3B1KGNwdWZyZXFfcG9saWN5X2NwdSwgY3B1KTsJCVwKQEAgLTgzLDI2ICs4NSwyMiBAQAogfQogCiBsb2NrX3BvbGljeV9yd3NlbShyZWFkLCBjcHUpOwotRVhQT1JUX1NZTUJPTF9HUEwobG9ja19wb2xpY3lfcndzZW1fcmVhZCk7CiAKIGxvY2tfcG9saWN5X3J3c2VtKHdyaXRlLCBjcHUpOwotRVhQT1JUX1NZTUJPTF9HUEwobG9ja19wb2xpY3lfcndzZW1fd3JpdGUpOwogCi12b2lkIHVubG9ja19wb2xpY3lfcndzZW1fcmVhZChpbnQgY3B1KQorc3RhdGljIHZvaWQgdW5sb2NrX3BvbGljeV9yd3NlbV9yZWFkKGludCBjcHUpCiB7CiAJaW50IHBvbGljeV9jcHUgPSBwZXJfY3B1KGNwdWZyZXFfcG9saWN5X2NwdSwgY3B1KTsKIAlCVUdfT04ocG9saWN5X2NwdSA9PSAtMSk7CiAJdXBfcmVhZCgmcGVyX2NwdShjcHVfcG9saWN5X3J3c2VtLCBwb2xpY3lfY3B1KSk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTCh1bmxvY2tfcG9saWN5X3J3c2VtX3JlYWQpOwogCi12b2lkIHVubG9ja19wb2xpY3lfcndzZW1fd3JpdGUoaW50IGNwdSkKK3N0YXRpYyB2b2lkIHVubG9ja19wb2xpY3lfcndzZW1fd3JpdGUoaW50IGNwdSkKIHsKIAlpbnQgcG9saWN5X2NwdSA9IHBlcl9jcHUoY3B1ZnJlcV9wb2xpY3lfY3B1LCBjcHUpOwogCUJVR19PTihwb2xpY3lfY3B1ID09IC0xKTsKIAl1cF93cml0ZSgmcGVyX2NwdShjcHVfcG9saWN5X3J3c2VtLCBwb2xpY3lfY3B1KSk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTCh1bmxvY2tfcG9saWN5X3J3c2VtX3dyaXRlKTsKIAogCiAvKiBpbnRlcm5hbCBwcm90b3R5cGVzICovCkBAIC0zNTQsNiArMzUyLDkgQEAKIAogCWNhc2UgQ1BVRlJFUV9QT1NUQ0hBTkdFOgogCQlhZGp1c3RfamlmZmllcyhDUFVGUkVRX1BPU1RDSEFOR0UsIGZyZXFzKTsKKwkJZHByaW50aygiRlJFUTogJWx1IC0gQ1BVOiAlbHUiLCAodW5zaWduZWQgbG9uZylmcmVxcy0+bmV3LAorCQkJKHVuc2lnbmVkIGxvbmcpZnJlcXMtPmNwdSk7CisJCXRyYWNlX3Bvd2VyX2ZyZXF1ZW5jeShQT1dFUl9QU1RBVEUsIGZyZXFzLT5uZXcsIGZyZXFzLT5jcHUpOwogCQlzcmN1X25vdGlmaWVyX2NhbGxfY2hhaW4oJmNwdWZyZXFfdHJhbnNpdGlvbl9ub3RpZmllcl9saXN0LAogCQkJCUNQVUZSRVFfUE9TVENIQU5HRSwgZnJlcXMpOwogCQlpZiAobGlrZWx5KHBvbGljeSkgJiYgbGlrZWx5KHBvbGljeS0+Y3B1ID09IGZyZXFzLT5jcHUpKQpAQCAtMTA3Nyw2ICsxMDc4LDcgQEAKIAogZXJyX3VubG9ja19wb2xpY3k6CiAJdW5sb2NrX3BvbGljeV9yd3NlbV93cml0ZShjcHUpOworCWZyZWVfY3B1bWFza192YXIocG9saWN5LT5yZWxhdGVkX2NwdXMpOwogZXJyX2ZyZWVfY3B1bWFzazoKIAlmcmVlX2NwdW1hc2tfdmFyKHBvbGljeS0+Y3B1cyk7CiBlcnJfZnJlZV9wb2xpY3k6CkBAIC0xNzYyLDE3ICsxNzY0LDggQEAKIAkJCWRwcmludGsoImdvdmVybm9yIHN3aXRjaFxuIik7CiAKIAkJCS8qIGVuZCBvbGQgZ292ZXJub3IgKi8KLQkJCWlmIChkYXRhLT5nb3Zlcm5vcikgewotCQkJCS8qCi0JCQkJICogTmVlZCB0byByZWxlYXNlIHRoZSByd3NlbSBhcm91bmQgZ292ZXJub3IKLQkJCQkgKiBzdG9wIGR1ZSB0byBsb2NrIGRlcGVuZGVuY3kgYmV0d2VlbgotCQkJCSAqIGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyBhbmQgdGhlIHJlYWQgbG9jawotCQkJCSAqIHRha2VuIGluIHRoZSBkZWxheWVkIHdvcmsgaGFuZGxlci4KLQkJCQkgKi8KLQkJCQl1bmxvY2tfcG9saWN5X3J3c2VtX3dyaXRlKGRhdGEtPmNwdSk7CisJCQlpZiAoZGF0YS0+Z292ZXJub3IpCiAJCQkJX19jcHVmcmVxX2dvdmVybm9yKGRhdGEsIENQVUZSRVFfR09WX1NUT1ApOwotCQkJCWxvY2tfcG9saWN5X3J3c2VtX3dyaXRlKGRhdGEtPmNwdSk7Ci0JCQl9CiAKIAkJCS8qIHN0YXJ0IG5ldyBnb3Zlcm5vciAqLwogCQkJZGF0YS0+Z292ZXJub3IgPSBwb2xpY3ktPmdvdmVybm9yOwpAQCAtMTg4Myw4ICsxODc2LDcgQEAKIAlyZXR1cm4gTk9USUZZX09LOwogfQogCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fcmVmZGF0YSBjcHVmcmVxX2NwdV9ub3RpZmllciA9Ci17CitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fcmVmZGF0YSBjcHVmcmVxX2NwdV9ub3RpZmllciA9IHsKICAgICAubm90aWZpZXJfY2FsbCA9IGNwdWZyZXFfY3B1X2NhbGxiYWNrLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMKaW5kZXggZTEzMTQyMS4uN2I1MDkzNjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMKQEAgLTQ1OSw2ICs0NTksMTcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqIHN5c2ZzIGVuZCAqKioqKioqKioqKioqKioqKioqKioqKiovCiAKK3N0YXRpYyB2b2lkIGRic19mcmVxX2luY3JlYXNlKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcCwgdW5zaWduZWQgaW50IGZyZXEpCit7CisJaWYgKGRic190dW5lcnNfaW5zLnBvd2Vyc2F2ZV9iaWFzKQorCQlmcmVxID0gcG93ZXJzYXZlX2JpYXNfdGFyZ2V0KHAsIGZyZXEsIENQVUZSRVFfUkVMQVRJT05fSCk7CisJZWxzZSBpZiAocC0+Y3VyID09IHAtPm1heCkKKwkJcmV0dXJuOworCisJX19jcHVmcmVxX2RyaXZlcl90YXJnZXQocCwgZnJlcSwgZGJzX3R1bmVyc19pbnMucG93ZXJzYXZlX2JpYXMgPworCQkJQ1BVRlJFUV9SRUxBVElPTl9MIDogQ1BVRlJFUV9SRUxBVElPTl9IKTsKK30KKwogc3RhdGljIHZvaWQgZGJzX2NoZWNrX2NwdShzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKnRoaXNfZGJzX2luZm8pCiB7CiAJdW5zaWduZWQgaW50IG1heF9sb2FkX2ZyZXE7CkBAIC01NTEsMTkgKzU2Miw3IEBACiAKIAkvKiBDaGVjayBmb3IgZnJlcXVlbmN5IGluY3JlYXNlICovCiAJaWYgKG1heF9sb2FkX2ZyZXEgPiBkYnNfdHVuZXJzX2lucy51cF90aHJlc2hvbGQgKiBwb2xpY3ktPmN1cikgewotCQkvKiBpZiB3ZSBhcmUgYWxyZWFkeSBhdCBmdWxsIHNwZWVkIHRoZW4gYnJlYWsgb3V0IGVhcmx5ICovCi0JCWlmICghZGJzX3R1bmVyc19pbnMucG93ZXJzYXZlX2JpYXMpIHsKLQkJCWlmIChwb2xpY3ktPmN1ciA9PSBwb2xpY3ktPm1heCkKLQkJCQlyZXR1cm47Ci0KLQkJCV9fY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KHBvbGljeSwgcG9saWN5LT5tYXgsCi0JCQkJQ1BVRlJFUV9SRUxBVElPTl9IKTsKLQkJfSBlbHNlIHsKLQkJCWludCBmcmVxID0gcG93ZXJzYXZlX2JpYXNfdGFyZ2V0KHBvbGljeSwgcG9saWN5LT5tYXgsCi0JCQkJCUNQVUZSRVFfUkVMQVRJT05fSCk7Ci0JCQlfX2NwdWZyZXFfZHJpdmVyX3RhcmdldChwb2xpY3ksIGZyZXEsCi0JCQkJQ1BVRlJFUV9SRUxBVElPTl9MKTsKLQkJfQorCQlkYnNfZnJlcV9pbmNyZWFzZShwb2xpY3ksIHBvbGljeS0+bWF4KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNjEwLDcgKzYwOSw5IEBACiAJLyogV2Ugd2FudCBhbGwgQ1BVcyB0byBkbyBzYW1wbGluZyBuZWFybHkgb24gc2FtZSBqaWZmeSAqLwogCWludCBkZWxheSA9IHVzZWNzX3RvX2ppZmZpZXMoZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSk7CiAKLQlkZWxheSAtPSBqaWZmaWVzICUgZGVsYXk7CisJaWYgKG51bV9vbmxpbmVfY3B1cygpID4gMSkKKwkJZGVsYXkgLT0gamlmZmllcyAlIGRlbGF5OworCiAJbXV0ZXhfbG9jaygmZGJzX2luZm8tPnRpbWVyX211dGV4KTsKIAogCS8qIENvbW1vbiBOT1JNQUxfU0FNUExFIHNldHVwICovCkBAIC02MzUsNyArNjM2LDkgQEAKIHsKIAkvKiBXZSB3YW50IGFsbCBDUFVzIHRvIGRvIHNhbXBsaW5nIG5lYXJseSBvbiBzYW1lIGppZmZ5ICovCiAJaW50IGRlbGF5ID0gdXNlY3NfdG9famlmZmllcyhkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlKTsKLQlkZWxheSAtPSBqaWZmaWVzICUgZGVsYXk7CisKKwlpZiAobnVtX29ubGluZV9jcHVzKCkgPiAxKQorCQlkZWxheSAtPSBqaWZmaWVzICUgZGVsYXk7CiAKIAlkYnNfaW5mby0+c2FtcGxlX3R5cGUgPSBEQlNfTk9STUFMX1NBTVBMRTsKIAlJTklUX0RFTEFZRURfV09SS19ERUZFUlJBQkxFKCZkYnNfaW5mby0+d29yaywgZG9fZGJzX3RpbWVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMgYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jCmluZGV4IDE5OTQ4ODUuLmRiZWZlMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMKKysrIGIvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYwpAQCAtOTUsNyArOTUsNyBAQAogCS8qIGdpdmUgdGhlIGdvdmVybm9yIGFuIG9wcG9ydHVuaXR5IHRvIHJlZmxlY3Qgb24gdGhlIG91dGNvbWUgKi8KIAlpZiAoY3B1aWRsZV9jdXJyX2dvdmVybm9yLT5yZWZsZWN0KQogCQljcHVpZGxlX2N1cnJfZ292ZXJub3ItPnJlZmxlY3QoZGV2KTsKLQl0cmFjZV9wb3dlcl9lbmQoMCk7CisJdHJhY2VfcG93ZXJfZW5kKHNtcF9wcm9jZXNzb3JfaWQoKSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfcmVnX2RlZi5oIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfcmVnX2RlZi5oCmluZGV4IDdkNGVkYjAuLjVmNWZiYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X3JlZ19kZWYuaAorKysgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9yZWdfZGVmLmgKQEAgLTExMyw3ICsxMTMsNyBAQAogI2RlZmluZSBDUllQVE80WFhfUFJOR19MRlNSX0gJCQkweDAwMDcwMDM0CiAKIC8qKgotICogSW5pdGlsaXplIENSWVBUTyBFTkdJTkUgcmVnaXN0ZXJzLCBhbmQgbWVtb3J5IGJhc2VzLgorICogSW5pdGlhbGl6ZSBDUllQVE8gRU5HSU5FIHJlZ2lzdGVycywgYW5kIG1lbW9yeSBiYXNlcy4KICAqLwogI2RlZmluZSBQUEM0WFhfUERSX1BPTEwJCQkJMHgzZmYKICNkZWZpbmUgUFBDNFhYX09VVFBVVF9USFJFU0hPTEQJCQkyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9nZW9kZS1hZXMuYyBiL2RyaXZlcnMvY3J5cHRvL2dlb2RlLWFlcy5jCmluZGV4IDA5Mzg5ZGQuLjIxOWQwOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL2dlb2RlLWFlcy5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL2dlb2RlLWFlcy5jCkBAIC01NzMsNyArNTczLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGdlb2RlX2Flc190YmxbXSA9IHsKLQl7IFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9MWF9BRVMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9ICwKKwl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfTFhfQUVTKSwgfSAsCiAJeyAwLCB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9oaWZuXzc5NXguYyBiL2RyaXZlcnMvY3J5cHRvL2hpZm5fNzk1eC5jCmluZGV4IDE2ZmNlM2EuLmU0NDlhYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL2hpZm5fNzk1eC5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL2hpZm5fNzk1eC5jCkBAIC0yMDE4LDcgKzIwMTgsNiBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICphc3luY19yZXE7Ci0Jc3RydWN0IGhpZm5fY29udGV4dCAqY3R4OwogCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcTsKIAlzdHJ1Y3QgaGlmbl9kbWEgKmRtYSA9IChzdHJ1Y3QgaGlmbl9kbWEgKilkZXYtPmRlc2NfdmlydDsKIAlpbnQgaTsKQEAgLTIwMzUsNyArMjAzNCw2IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7CiAJd2hpbGUgKChhc3luY19yZXEgPSBjcnlwdG9fZGVxdWV1ZV9yZXF1ZXN0KCZkZXYtPnF1ZXVlKSkpIHsKLQkJY3R4ID0gY3J5cHRvX3RmbV9jdHgoYXN5bmNfcmVxLT50Zm0pOwogCQlyZXEgPSBjb250YWluZXJfb2YoYXN5bmNfcmVxLCBzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0LCBiYXNlKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CiAKQEAgLTIxMzksNyArMjEzNyw2IEBACiBzdGF0aWMgaW50IGhpZm5fcHJvY2Vzc19xdWV1ZShzdHJ1Y3QgaGlmbl9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKmFzeW5jX3JlcSwgKmJhY2tsb2c7Ci0Jc3RydWN0IGhpZm5fY29udGV4dCAqY3R4OwogCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnIgPSAwOwpAQCAtMjE1Niw3ICsyMTUzLDYgQEAKIAkJaWYgKGJhY2tsb2cpCiAJCQliYWNrbG9nLT5jb21wbGV0ZShiYWNrbG9nLCAtRUlOUFJPR1JFU1MpOwogCi0JCWN0eCA9IGNyeXB0b190Zm1fY3R4KGFzeW5jX3JlcS0+dGZtKTsKIAkJcmVxID0gY29udGFpbmVyX29mKGFzeW5jX3JlcSwgc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCwgYmFzZSk7CiAKIAkJZXJyID0gaGlmbl9oYW5kbGVfcmVxKHJlcSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9tdl9jZXNhLmMgYi9kcml2ZXJzL2NyeXB0by9tdl9jZXNhLmMKaW5kZXggZTA5NTQyMi4uN2QyNzllNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vbXZfY2VzYS5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL212X2Nlc2EuYwpAQCAtMTA1NSwyMCArMTA1NSwyMCBAQAogCWNwLT5xdWV1ZV90aCA9IGt0aHJlYWRfcnVuKHF1ZXVlX21hbmFnLCBjcCwgIm12X2NyeXB0byIpOwogCWlmIChJU19FUlIoY3AtPnF1ZXVlX3RoKSkgewogCQlyZXQgPSBQVFJfRVJSKGNwLT5xdWV1ZV90aCk7Ci0JCWdvdG8gZXJyX3RocmVhZDsKKwkJZ290byBlcnJfdW5tYXBfc3JhbTsKIAl9CiAKIAlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGNyeXB0b19pbnQsIElSUUZfRElTQUJMRUQsIGRldl9uYW1lKCZwZGV2LT5kZXYpLAogCQkJY3ApOwogCWlmIChyZXQpCi0JCWdvdG8gZXJyX3VubWFwX3NyYW07CisJCWdvdG8gZXJyX3RocmVhZDsKIAogCXdyaXRlbChTRUNfSU5UX0FDQ0VMMF9ET05FLCBjcGctPnJlZyArIFNFQ19BQ0NFTF9JTlRfTUFTSyk7CiAJd3JpdGVsKFNFQ19DRkdfU1RPUF9ESUdfRVJSLCBjcGctPnJlZyArIFNFQ19BQ0NFTF9DRkcpOwogCiAJcmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmbXZfYWVzX2FsZ19lY2IpOwogCWlmIChyZXQpCi0JCWdvdG8gZXJyX3JlZzsKKwkJZ290byBlcnJfaXJxOwogCiAJcmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmbXZfYWVzX2FsZ19jYmMpOwogCWlmIChyZXQpCkBAIC0xMDkxLDkgKzEwOTEsOSBAQAogCXJldHVybiAwOwogZXJyX3VucmVnX2VjYjoKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJm12X2Flc19hbGdfZWNiKTsKLWVycl90aHJlYWQ6CitlcnJfaXJxOgogCWZyZWVfaXJxKGlycSwgY3ApOwotZXJyX3JlZzoKK2Vycl90aHJlYWQ6CiAJa3RocmVhZF9zdG9wKGNwLT5xdWV1ZV90aCk7CiBlcnJfdW5tYXBfc3JhbToKIAlpb3VubWFwKGNwLT5zcmFtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL24yX2NvcmUuYyBiL2RyaXZlcnMvY3J5cHRvL24yX2NvcmUuYwppbmRleCAyMzE2M2ZkLi4yNmFmMmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9uMl9jb3JlLmMKKysrIGIvZHJpdmVycy9jcnlwdG8vbjJfY29yZS5jCkBAIC0yMzksMjEgKzIzOSw1NyBAQAogfQogI2VuZGlmCiAKLXN0cnVjdCBuMl9iYXNlX2N0eCB7Ci0Jc3RydWN0IGxpc3RfaGVhZAkJbGlzdDsKK3N0cnVjdCBuMl9haGFzaF9hbGcgeworCXN0cnVjdCBsaXN0X2hlYWQJZW50cnk7CisJY29uc3QgY2hhcgkJKmhhc2hfemVybzsKKwljb25zdCB1MzIJCSpoYXNoX2luaXQ7CisJdTgJCQlod19vcF9oYXNoc3o7CisJdTgJCQlkaWdlc3Rfc2l6ZTsKKwl1OAkJCWF1dGhfdHlwZTsKKwl1OAkJCWhtYWNfdHlwZTsKKwlzdHJ1Y3QgYWhhc2hfYWxnCWFsZzsKIH07CiAKLXN0YXRpYyB2b2lkIG4yX2Jhc2VfY3R4X2luaXQoc3RydWN0IG4yX2Jhc2VfY3R4ICpjdHgpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuMl9haGFzaF9hbGcgKm4yX2FoYXNoX2FsZyhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQogewotCUlOSVRfTElTVF9IRUFEKCZjdHgtPmxpc3QpOworCXN0cnVjdCBjcnlwdG9fYWxnICphbGcgPSB0Zm0tPl9fY3J0X2FsZzsKKwlzdHJ1Y3QgYWhhc2hfYWxnICphaGFzaF9hbGc7CisKKwlhaGFzaF9hbGcgPSBjb250YWluZXJfb2YoYWxnLCBzdHJ1Y3QgYWhhc2hfYWxnLCBoYWxnLmJhc2UpOworCisJcmV0dXJuIGNvbnRhaW5lcl9vZihhaGFzaF9hbGcsIHN0cnVjdCBuMl9haGFzaF9hbGcsIGFsZyk7Cit9CisKK3N0cnVjdCBuMl9obWFjX2FsZyB7CisJY29uc3QgY2hhcgkJKmNoaWxkX2FsZzsKKwlzdHJ1Y3QgbjJfYWhhc2hfYWxnCWRlcml2ZWQ7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuMl9obWFjX2FsZyAqbjJfaG1hY19hbGcoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnID0gdGZtLT5fX2NydF9hbGc7CisJc3RydWN0IGFoYXNoX2FsZyAqYWhhc2hfYWxnOworCisJYWhhc2hfYWxnID0gY29udGFpbmVyX29mKGFsZywgc3RydWN0IGFoYXNoX2FsZywgaGFsZy5iYXNlKTsKKworCXJldHVybiBjb250YWluZXJfb2YoYWhhc2hfYWxnLCBzdHJ1Y3QgbjJfaG1hY19hbGcsIGRlcml2ZWQuYWxnKTsKIH0KIAogc3RydWN0IG4yX2hhc2hfY3R4IHsKLQlzdHJ1Y3QgbjJfYmFzZV9jdHgJCWJhc2U7Ci0KIAlzdHJ1Y3QgY3J5cHRvX2FoYXNoCQkqZmFsbGJhY2tfdGZtOwogfTsKIAorI2RlZmluZSBOMl9IQVNIX0tFWV9NQVgJCQkzMiAvKiBIVyBsaW1pdCBmb3IgYWxsIEhNQUMgcmVxdWVzdHMgKi8KKworc3RydWN0IG4yX2htYWNfY3R4IHsKKwlzdHJ1Y3QgbjJfaGFzaF9jdHgJCWJhc2U7CisKKwlzdHJ1Y3QgY3J5cHRvX3NoYXNoCQkqY2hpbGRfc2hhc2g7CisKKwlpbnQJCQkJaGFzaF9rZXlfbGVuOworCXVuc2lnbmVkIGNoYXIJCQloYXNoX2tleVtOMl9IQVNIX0tFWV9NQVhdOworfTsKKwogc3RydWN0IG4yX2hhc2hfcmVxX2N0eCB7CiAJdW5pb24gewogCQlzdHJ1Y3QgbWQ1X3N0YXRlCW1kNTsKQEAgLTI2MSw5ICsyOTcsNiBAQAogCQlzdHJ1Y3Qgc2hhMjU2X3N0YXRlCXNoYTI1NjsKIAl9IHU7CiAKLQl1bnNpZ25lZCBjaGFyCQkJaGFzaF9rZXlbNjRdOwotCXVuc2lnbmVkIGNoYXIJCQlrZXllZF96ZXJvX2hhc2hbMzJdOwotCiAJc3RydWN0IGFoYXNoX3JlcXVlc3QJCWZhbGxiYWNrX3JlcTsKIH07CiAKQEAgLTM1Niw2ICszODksOTQgQEAKIAljcnlwdG9fZnJlZV9haGFzaChjdHgtPmZhbGxiYWNrX3RmbSk7CiB9CiAKK3N0YXRpYyBpbnQgbjJfaG1hY19jcmFfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCWNvbnN0IGNoYXIgKmZhbGxiYWNrX2RyaXZlcl9uYW1lID0gdGZtLT5fX2NydF9hbGctPmNyYV9uYW1lOworCXN0cnVjdCBjcnlwdG9fYWhhc2ggKmFoYXNoID0gX19jcnlwdG9fYWhhc2hfY2FzdCh0Zm0pOworCXN0cnVjdCBuMl9obWFjX2N0eCAqY3R4ID0gY3J5cHRvX2FoYXNoX2N0eChhaGFzaCk7CisJc3RydWN0IG4yX2htYWNfYWxnICpuMmFsZyA9IG4yX2htYWNfYWxnKHRmbSk7CisJc3RydWN0IGNyeXB0b19haGFzaCAqZmFsbGJhY2tfdGZtOworCXN0cnVjdCBjcnlwdG9fc2hhc2ggKmNoaWxkX3NoYXNoOworCWludCBlcnI7CisKKwlmYWxsYmFja190Zm0gPSBjcnlwdG9fYWxsb2NfYWhhc2goZmFsbGJhY2tfZHJpdmVyX25hbWUsIDAsCisJCQkJCSAgQ1JZUFRPX0FMR19ORUVEX0ZBTExCQUNLKTsKKwlpZiAoSVNfRVJSKGZhbGxiYWNrX3RmbSkpIHsKKwkJcHJfd2FybmluZygiRmFsbGJhY2sgZHJpdmVyICclcycgY291bGQgbm90IGJlIGxvYWRlZCFcbiIsCisJCQkgICBmYWxsYmFja19kcml2ZXJfbmFtZSk7CisJCWVyciA9IFBUUl9FUlIoZmFsbGJhY2tfdGZtKTsKKwkJZ290byBvdXQ7CisJfQorCisJY2hpbGRfc2hhc2ggPSBjcnlwdG9fYWxsb2Nfc2hhc2gobjJhbGctPmNoaWxkX2FsZywgMCwgMCk7CisJaWYgKElTX0VSUihjaGlsZF9zaGFzaCkpIHsKKwkJcHJfd2FybmluZygiQ2hpbGQgc2hhc2ggJyVzJyBjb3VsZCBub3QgYmUgbG9hZGVkIVxuIiwKKwkJCSAgIG4yYWxnLT5jaGlsZF9hbGcpOworCQllcnIgPSBQVFJfRVJSKGNoaWxkX3NoYXNoKTsKKwkJZ290byBvdXRfZnJlZV9mYWxsYmFjazsKKwl9CisKKwljcnlwdG9fYWhhc2hfc2V0X3JlcXNpemUoYWhhc2gsIChzaXplb2Yoc3RydWN0IG4yX2hhc2hfcmVxX2N0eCkgKworCQkJCQkgY3J5cHRvX2FoYXNoX3JlcXNpemUoZmFsbGJhY2tfdGZtKSkpOworCisJY3R4LT5jaGlsZF9zaGFzaCA9IGNoaWxkX3NoYXNoOworCWN0eC0+YmFzZS5mYWxsYmFja190Zm0gPSBmYWxsYmFja190Zm07CisJcmV0dXJuIDA7CisKK291dF9mcmVlX2ZhbGxiYWNrOgorCWNyeXB0b19mcmVlX2FoYXNoKGZhbGxiYWNrX3RmbSk7CisKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBuMl9obWFjX2NyYV9leGl0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJc3RydWN0IGNyeXB0b19haGFzaCAqYWhhc2ggPSBfX2NyeXB0b19haGFzaF9jYXN0KHRmbSk7CisJc3RydWN0IG4yX2htYWNfY3R4ICpjdHggPSBjcnlwdG9fYWhhc2hfY3R4KGFoYXNoKTsKKworCWNyeXB0b19mcmVlX2FoYXNoKGN0eC0+YmFzZS5mYWxsYmFja190Zm0pOworCWNyeXB0b19mcmVlX3NoYXNoKGN0eC0+Y2hpbGRfc2hhc2gpOworfQorCitzdGF0aWMgaW50IG4yX2htYWNfYXN5bmNfc2V0a2V5KHN0cnVjdCBjcnlwdG9fYWhhc2ggKnRmbSwgY29uc3QgdTggKmtleSwKKwkJCQl1bnNpZ25lZCBpbnQga2V5bGVuKQoreworCXN0cnVjdCBuMl9obWFjX2N0eCAqY3R4ID0gY3J5cHRvX2FoYXNoX2N0eCh0Zm0pOworCXN0cnVjdCBjcnlwdG9fc2hhc2ggKmNoaWxkX3NoYXNoID0gY3R4LT5jaGlsZF9zaGFzaDsKKwlzdHJ1Y3QgY3J5cHRvX2FoYXNoICpmYWxsYmFja190Zm07CisJc3RydWN0IHsKKwkJc3RydWN0IHNoYXNoX2Rlc2Mgc2hhc2g7CisJCWNoYXIgY3R4W2NyeXB0b19zaGFzaF9kZXNjc2l6ZShjaGlsZF9zaGFzaCldOworCX0gZGVzYzsKKwlpbnQgZXJyLCBicywgZHM7CisKKwlmYWxsYmFja190Zm0gPSBjdHgtPmJhc2UuZmFsbGJhY2tfdGZtOworCWVyciA9IGNyeXB0b19haGFzaF9zZXRrZXkoZmFsbGJhY2tfdGZtLCBrZXksIGtleWxlbik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWRlc2Muc2hhc2gudGZtID0gY2hpbGRfc2hhc2g7CisJZGVzYy5zaGFzaC5mbGFncyA9IGNyeXB0b19haGFzaF9nZXRfZmxhZ3ModGZtKSAmCisJCUNSWVBUT19URk1fUkVRX01BWV9TTEVFUDsKKworCWJzID0gY3J5cHRvX3NoYXNoX2Jsb2Nrc2l6ZShjaGlsZF9zaGFzaCk7CisJZHMgPSBjcnlwdG9fc2hhc2hfZGlnZXN0c2l6ZShjaGlsZF9zaGFzaCk7CisJQlVHX09OKGRzID4gTjJfSEFTSF9LRVlfTUFYKTsKKwlpZiAoa2V5bGVuID4gYnMpIHsKKwkJZXJyID0gY3J5cHRvX3NoYXNoX2RpZ2VzdCgmZGVzYy5zaGFzaCwga2V5LCBrZXlsZW4sCisJCQkJCSAgY3R4LT5oYXNoX2tleSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlrZXlsZW4gPSBkczsKKwl9IGVsc2UgaWYgKGtleWxlbiA8PSBOMl9IQVNIX0tFWV9NQVgpCisJCW1lbWNweShjdHgtPmhhc2hfa2V5LCBrZXksIGtleWxlbik7CisKKwljdHgtPmhhc2hfa2V5X2xlbiA9IGtleWxlbjsKKworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHdhaXRfZm9yX3RhaWwoc3RydWN0IHNwdV9xdWV1ZSAqcXApCiB7CiAJdW5zaWduZWQgbG9uZyBoZWFkLCBodl9yZXQ7CkBAIC0zODUsMTIgKzUwNiwxMiBAQAogCXJldHVybiBodl9yZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbjJfaGFzaF9hc3luY19kaWdlc3Qoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSwKLQkJCQl1bnNpZ25lZCBpbnQgYXV0aF90eXBlLCB1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemUsCi0JCQkJdW5zaWduZWQgaW50IHJlc3VsdF9zaXplLCB2b2lkICpoYXNoX2xvYykKK3N0YXRpYyBpbnQgbjJfZG9fYXN5bmNfZGlnZXN0KHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgYXV0aF90eXBlLCB1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemUsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgcmVzdWx0X3NpemUsIHZvaWQgKmhhc2hfbG9jLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBhdXRoX2tleSwgdW5zaWduZWQgaW50IGF1dGhfa2V5X2xlbikKIHsKIAlzdHJ1Y3QgY3J5cHRvX2FoYXNoICp0Zm0gPSBjcnlwdG9fYWhhc2hfcmVxdGZtKHJlcSk7Ci0Jc3RydWN0IG4yX2hhc2hfY3R4ICpjdHggPSBjcnlwdG9fYWhhc2hfY3R4KHRmbSk7CiAJc3RydWN0IGN3cV9pbml0aWFsX2VudHJ5ICplbnQ7CiAJc3RydWN0IGNyeXB0b19oYXNoX3dhbGsgd2FsazsKIAlzdHJ1Y3Qgc3B1X3F1ZXVlICpxcDsKQEAgLTQwMyw2ICs1MjQsNyBAQAogCSAqLwogCWlmICh1bmxpa2VseShyZXEtPm5ieXRlcyA+ICgxIDw8IDE2KSkpIHsKIAkJc3RydWN0IG4yX2hhc2hfcmVxX2N0eCAqcmN0eCA9IGFoYXNoX3JlcXVlc3RfY3R4KHJlcSk7CisJCXN0cnVjdCBuMl9oYXNoX2N0eCAqY3R4ID0gY3J5cHRvX2FoYXNoX2N0eCh0Zm0pOwogCiAJCWFoYXNoX3JlcXVlc3Rfc2V0X3RmbSgmcmN0eC0+ZmFsbGJhY2tfcmVxLCBjdHgtPmZhbGxiYWNrX3RmbSk7CiAJCXJjdHgtPmZhbGxiYWNrX3JlcS5iYXNlLmZsYWdzID0KQEAgLTQxNCw4ICs1MzYsNiBAQAogCQlyZXR1cm4gY3J5cHRvX2FoYXNoX2RpZ2VzdCgmcmN0eC0+ZmFsbGJhY2tfcmVxKTsKIAl9CiAKLQluMl9iYXNlX2N0eF9pbml0KCZjdHgtPmJhc2UpOwotCiAJbmJ5dGVzID0gY3J5cHRvX2hhc2hfd2Fsa19maXJzdChyZXEsICZ3YWxrKTsKIAogCWNwdSA9IGdldF9jcHUoKTsKQEAgLTQzMCwxMyArNTUwLDEzIEBACiAJICovCiAJZW50ID0gcXAtPnEgKyBxcC0+dGFpbDsKIAotCWVudC0+Y29udHJvbCA9IGNvbnRyb2xfd29yZF9iYXNlKG5ieXRlcywgMCwgMCwKKwllbnQtPmNvbnRyb2wgPSBjb250cm9sX3dvcmRfYmFzZShuYnl0ZXMsIGF1dGhfa2V5X2xlbiwgMCwKIAkJCQkJIGF1dGhfdHlwZSwgZGlnZXN0X3NpemUsCiAJCQkJCSBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLAogCQkJCQkgT1BDT0RFX0lOUExBQ0VfQklUIHwKIAkJCQkJIE9QQ09ERV9BVVRIX01BQyk7CiAJZW50LT5zcmNfYWRkciA9IF9fcGEod2Fsay5kYXRhKTsKLQllbnQtPmF1dGhfa2V5X2FkZHIgPSAwVUw7CisJZW50LT5hdXRoX2tleV9hZGRyID0gYXV0aF9rZXk7CiAJZW50LT5hdXRoX2l2X2FkZHIgPSBfX3BhKGhhc2hfbG9jKTsKIAllbnQtPmZpbmFsX2F1dGhfc3RhdGVfYWRkciA9IDBVTDsKIAllbnQtPmVuY19rZXlfYWRkciA9IDBVTDsKQEAgLTQ3NSwxMTQgKzU5NSw1NSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbjJfbWQ1X2FzeW5jX2RpZ2VzdChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQorc3RhdGljIGludCBuMl9oYXNoX2FzeW5jX2RpZ2VzdChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQogeworCXN0cnVjdCBuMl9haGFzaF9hbGcgKm4yYWxnID0gbjJfYWhhc2hfYWxnKHJlcS0+YmFzZS50Zm0pOwogCXN0cnVjdCBuMl9oYXNoX3JlcV9jdHggKnJjdHggPSBhaGFzaF9yZXF1ZXN0X2N0eChyZXEpOwotCXN0cnVjdCBtZDVfc3RhdGUgKm0gPSAmcmN0eC0+dS5tZDU7CisJaW50IGRzOwogCisJZHMgPSBuMmFsZy0+ZGlnZXN0X3NpemU7CiAJaWYgKHVubGlrZWx5KHJlcS0+bmJ5dGVzID09IDApKSB7Ci0JCXN0YXRpYyBjb25zdCBjaGFyIG1kNV96ZXJvW01ENV9ESUdFU1RfU0laRV0gPSB7Ci0JCQkweGQ0LCAweDFkLCAweDhjLCAweGQ5LCAweDhmLCAweDAwLCAweGIyLCAweDA0LAotCQkJMHhlOSwgMHg4MCwgMHgwOSwgMHg5OCwgMHhlYywgMHhmOCwgMHg0MiwgMHg3ZSwKLQkJfTsKLQotCQltZW1jcHkocmVxLT5yZXN1bHQsIG1kNV96ZXJvLCBNRDVfRElHRVNUX1NJWkUpOworCQltZW1jcHkocmVxLT5yZXN1bHQsIG4yYWxnLT5oYXNoX3plcm8sIGRzKTsKIAkJcmV0dXJuIDA7CiAJfQotCW0tPmhhc2hbMF0gPSBjcHVfdG9fbGUzMigweDY3NDUyMzAxKTsKLQltLT5oYXNoWzFdID0gY3B1X3RvX2xlMzIoMHhlZmNkYWI4OSk7Ci0JbS0+aGFzaFsyXSA9IGNwdV90b19sZTMyKDB4OThiYWRjZmUpOwotCW0tPmhhc2hbM10gPSBjcHVfdG9fbGUzMigweDEwMzI1NDc2KTsKKwltZW1jcHkoJnJjdHgtPnUsIG4yYWxnLT5oYXNoX2luaXQsIG4yYWxnLT5od19vcF9oYXNoc3opOwogCi0JcmV0dXJuIG4yX2hhc2hfYXN5bmNfZGlnZXN0KHJlcSwgQVVUSF9UWVBFX01ENSwKLQkJCQkgICAgTUQ1X0RJR0VTVF9TSVpFLCBNRDVfRElHRVNUX1NJWkUsCi0JCQkJICAgIG0tPmhhc2gpOworCXJldHVybiBuMl9kb19hc3luY19kaWdlc3QocmVxLCBuMmFsZy0+YXV0aF90eXBlLAorCQkJCSAgbjJhbGctPmh3X29wX2hhc2hzeiwgZHMsCisJCQkJICAmcmN0eC0+dSwgMFVMLCAwKTsKIH0KIAotc3RhdGljIGludCBuMl9zaGExX2FzeW5jX2RpZ2VzdChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQorc3RhdGljIGludCBuMl9obWFjX2FzeW5jX2RpZ2VzdChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQogeworCXN0cnVjdCBuMl9obWFjX2FsZyAqbjJhbGcgPSBuMl9obWFjX2FsZyhyZXEtPmJhc2UudGZtKTsKIAlzdHJ1Y3QgbjJfaGFzaF9yZXFfY3R4ICpyY3R4ID0gYWhhc2hfcmVxdWVzdF9jdHgocmVxKTsKLQlzdHJ1Y3Qgc2hhMV9zdGF0ZSAqcyA9ICZyY3R4LT51LnNoYTE7CisJc3RydWN0IGNyeXB0b19haGFzaCAqdGZtID0gY3J5cHRvX2FoYXNoX3JlcXRmbShyZXEpOworCXN0cnVjdCBuMl9obWFjX2N0eCAqY3R4ID0gY3J5cHRvX2FoYXNoX2N0eCh0Zm0pOworCWludCBkczsKIAotCWlmICh1bmxpa2VseShyZXEtPm5ieXRlcyA9PSAwKSkgewotCQlzdGF0aWMgY29uc3QgY2hhciBzaGExX3plcm9bU0hBMV9ESUdFU1RfU0laRV0gPSB7Ci0JCQkweGRhLCAweDM5LCAweGEzLCAweGVlLCAweDVlLCAweDZiLCAweDRiLCAweDBkLCAweDMyLAotCQkJMHg1NSwgMHhiZiwgMHhlZiwgMHg5NSwgMHg2MCwgMHgxOCwgMHg5MCwgMHhhZiwgMHhkOCwKLQkJCTB4MDcsIDB4MDkKLQkJfTsKKwlkcyA9IG4yYWxnLT5kZXJpdmVkLmRpZ2VzdF9zaXplOworCWlmICh1bmxpa2VseShyZXEtPm5ieXRlcyA9PSAwKSB8fAorCSAgICB1bmxpa2VseShjdHgtPmhhc2hfa2V5X2xlbiA+IE4yX0hBU0hfS0VZX01BWCkpIHsKKwkJc3RydWN0IG4yX2hhc2hfcmVxX2N0eCAqcmN0eCA9IGFoYXNoX3JlcXVlc3RfY3R4KHJlcSk7CisJCXN0cnVjdCBuMl9oYXNoX2N0eCAqY3R4ID0gY3J5cHRvX2FoYXNoX2N0eCh0Zm0pOwogCi0JCW1lbWNweShyZXEtPnJlc3VsdCwgc2hhMV96ZXJvLCBTSEExX0RJR0VTVF9TSVpFKTsKLQkJcmV0dXJuIDA7CisJCWFoYXNoX3JlcXVlc3Rfc2V0X3RmbSgmcmN0eC0+ZmFsbGJhY2tfcmVxLCBjdHgtPmZhbGxiYWNrX3RmbSk7CisJCXJjdHgtPmZhbGxiYWNrX3JlcS5iYXNlLmZsYWdzID0KKwkJCXJlcS0+YmFzZS5mbGFncyAmIENSWVBUT19URk1fUkVRX01BWV9TTEVFUDsKKwkJcmN0eC0+ZmFsbGJhY2tfcmVxLm5ieXRlcyA9IHJlcS0+bmJ5dGVzOworCQlyY3R4LT5mYWxsYmFja19yZXEuc3JjID0gcmVxLT5zcmM7CisJCXJjdHgtPmZhbGxiYWNrX3JlcS5yZXN1bHQgPSByZXEtPnJlc3VsdDsKKworCQlyZXR1cm4gY3J5cHRvX2FoYXNoX2RpZ2VzdCgmcmN0eC0+ZmFsbGJhY2tfcmVxKTsKIAl9Ci0Jcy0+c3RhdGVbMF0gPSBTSEExX0gwOwotCXMtPnN0YXRlWzFdID0gU0hBMV9IMTsKLQlzLT5zdGF0ZVsyXSA9IFNIQTFfSDI7Ci0Jcy0+c3RhdGVbM10gPSBTSEExX0gzOwotCXMtPnN0YXRlWzRdID0gU0hBMV9INDsKKwltZW1jcHkoJnJjdHgtPnUsIG4yYWxnLT5kZXJpdmVkLmhhc2hfaW5pdCwKKwkgICAgICAgbjJhbGctPmRlcml2ZWQuaHdfb3BfaGFzaHN6KTsKIAotCXJldHVybiBuMl9oYXNoX2FzeW5jX2RpZ2VzdChyZXEsIEFVVEhfVFlQRV9TSEExLAotCQkJCSAgICBTSEExX0RJR0VTVF9TSVpFLCBTSEExX0RJR0VTVF9TSVpFLAotCQkJCSAgICBzLT5zdGF0ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgbjJfc2hhMjU2X2FzeW5jX2RpZ2VzdChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQotewotCXN0cnVjdCBuMl9oYXNoX3JlcV9jdHggKnJjdHggPSBhaGFzaF9yZXF1ZXN0X2N0eChyZXEpOwotCXN0cnVjdCBzaGEyNTZfc3RhdGUgKnMgPSAmcmN0eC0+dS5zaGEyNTY7Ci0KLQlpZiAocmVxLT5uYnl0ZXMgPT0gMCkgewotCQlzdGF0aWMgY29uc3QgY2hhciBzaGEyNTZfemVyb1tTSEEyNTZfRElHRVNUX1NJWkVdID0gewotCQkJMHhlMywgMHhiMCwgMHhjNCwgMHg0MiwgMHg5OCwgMHhmYywgMHgxYywgMHgxNCwgMHg5YSwKLQkJCTB4ZmIsIDB4ZjQsIDB4YzgsIDB4OTksIDB4NmYsIDB4YjksIDB4MjQsIDB4MjcsIDB4YWUsCi0JCQkweDQxLCAweGU0LCAweDY0LCAweDliLCAweDkzLCAweDRjLCAweGE0LCAweDk1LCAweDk5LAotCQkJMHgxYiwgMHg3OCwgMHg1MiwgMHhiOCwgMHg1NQotCQl9OwotCi0JCW1lbWNweShyZXEtPnJlc3VsdCwgc2hhMjU2X3plcm8sIFNIQTI1Nl9ESUdFU1RfU0laRSk7Ci0JCXJldHVybiAwOwotCX0KLQlzLT5zdGF0ZVswXSA9IFNIQTI1Nl9IMDsKLQlzLT5zdGF0ZVsxXSA9IFNIQTI1Nl9IMTsKLQlzLT5zdGF0ZVsyXSA9IFNIQTI1Nl9IMjsKLQlzLT5zdGF0ZVszXSA9IFNIQTI1Nl9IMzsKLQlzLT5zdGF0ZVs0XSA9IFNIQTI1Nl9INDsKLQlzLT5zdGF0ZVs1XSA9IFNIQTI1Nl9INTsKLQlzLT5zdGF0ZVs2XSA9IFNIQTI1Nl9INjsKLQlzLT5zdGF0ZVs3XSA9IFNIQTI1Nl9INzsKLQotCXJldHVybiBuMl9oYXNoX2FzeW5jX2RpZ2VzdChyZXEsIEFVVEhfVFlQRV9TSEEyNTYsCi0JCQkJICAgIFNIQTI1Nl9ESUdFU1RfU0laRSwgU0hBMjU2X0RJR0VTVF9TSVpFLAotCQkJCSAgICBzLT5zdGF0ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgbjJfc2hhMjI0X2FzeW5jX2RpZ2VzdChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQotewotCXN0cnVjdCBuMl9oYXNoX3JlcV9jdHggKnJjdHggPSBhaGFzaF9yZXF1ZXN0X2N0eChyZXEpOwotCXN0cnVjdCBzaGEyNTZfc3RhdGUgKnMgPSAmcmN0eC0+dS5zaGEyNTY7Ci0KLQlpZiAocmVxLT5uYnl0ZXMgPT0gMCkgewotCQlzdGF0aWMgY29uc3QgY2hhciBzaGEyMjRfemVyb1tTSEEyMjRfRElHRVNUX1NJWkVdID0gewotCQkJMHhkMSwgMHg0YSwgMHgwMiwgMHg4YywgMHgyYSwgMHgzYSwgMHgyYiwgMHhjOSwgMHg0NywKLQkJCTB4NjEsIDB4MDIsIDB4YmIsIDB4MjgsIDB4ODIsIDB4MzQsIDB4YzQsIDB4MTUsIDB4YTIsCi0JCQkweGIwLCAweDFmLCAweDgyLCAweDhlLCAweGE2LCAweDJhLCAweGM1LCAweGIzLCAweGU0LAotCQkJMHgyZgotCQl9OwotCi0JCW1lbWNweShyZXEtPnJlc3VsdCwgc2hhMjI0X3plcm8sIFNIQTIyNF9ESUdFU1RfU0laRSk7Ci0JCXJldHVybiAwOwotCX0KLQlzLT5zdGF0ZVswXSA9IFNIQTIyNF9IMDsKLQlzLT5zdGF0ZVsxXSA9IFNIQTIyNF9IMTsKLQlzLT5zdGF0ZVsyXSA9IFNIQTIyNF9IMjsKLQlzLT5zdGF0ZVszXSA9IFNIQTIyNF9IMzsKLQlzLT5zdGF0ZVs0XSA9IFNIQTIyNF9INDsKLQlzLT5zdGF0ZVs1XSA9IFNIQTIyNF9INTsKLQlzLT5zdGF0ZVs2XSA9IFNIQTIyNF9INjsKLQlzLT5zdGF0ZVs3XSA9IFNIQTIyNF9INzsKLQotCXJldHVybiBuMl9oYXNoX2FzeW5jX2RpZ2VzdChyZXEsIEFVVEhfVFlQRV9TSEEyNTYsCi0JCQkJICAgIFNIQTI1Nl9ESUdFU1RfU0laRSwgU0hBMjI0X0RJR0VTVF9TSVpFLAotCQkJCSAgICBzLT5zdGF0ZSk7CisJcmV0dXJuIG4yX2RvX2FzeW5jX2RpZ2VzdChyZXEsIG4yYWxnLT5kZXJpdmVkLmhtYWNfdHlwZSwKKwkJCQkgIG4yYWxnLT5kZXJpdmVkLmh3X29wX2hhc2hzeiwgZHMsCisJCQkJICAmcmN0eC0+dSwKKwkJCQkgIF9fcGEoJmN0eC0+aGFzaF9rZXkpLAorCQkJCSAgY3R4LT5oYXNoX2tleV9sZW4pOwogfQogCiBzdHJ1Y3QgbjJfY2lwaGVyX2NvbnRleHQgewpAQCAtMTIwOSwzNSArMTI3MCw5MiBAQAogCiBzdHJ1Y3QgbjJfaGFzaF90bXBsIHsKIAljb25zdCBjaGFyCSpuYW1lOwotCWludAkJKCpkaWdlc3QpKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpOworCWNvbnN0IGNoYXIJKmhhc2hfemVybzsKKwljb25zdCB1MzIJKmhhc2hfaW5pdDsKKwl1OAkJaHdfb3BfaGFzaHN6OwogCXU4CQlkaWdlc3Rfc2l6ZTsKIAl1OAkJYmxvY2tfc2l6ZTsKKwl1OAkJYXV0aF90eXBlOworCXU4CQlobWFjX3R5cGU7CiB9OworCitzdGF0aWMgY29uc3QgY2hhciBtZDVfemVyb1tNRDVfRElHRVNUX1NJWkVdID0geworCTB4ZDQsIDB4MWQsIDB4OGMsIDB4ZDksIDB4OGYsIDB4MDAsIDB4YjIsIDB4MDQsCisJMHhlOSwgMHg4MCwgMHgwOSwgMHg5OCwgMHhlYywgMHhmOCwgMHg0MiwgMHg3ZSwKK307CitzdGF0aWMgY29uc3QgdTMyIG1kNV9pbml0W01ENV9IQVNIX1dPUkRTXSA9IHsKKwljcHVfdG9fbGUzMigweDY3NDUyMzAxKSwKKwljcHVfdG9fbGUzMigweGVmY2RhYjg5KSwKKwljcHVfdG9fbGUzMigweDk4YmFkY2ZlKSwKKwljcHVfdG9fbGUzMigweDEwMzI1NDc2KSwKK307CitzdGF0aWMgY29uc3QgY2hhciBzaGExX3plcm9bU0hBMV9ESUdFU1RfU0laRV0gPSB7CisJMHhkYSwgMHgzOSwgMHhhMywgMHhlZSwgMHg1ZSwgMHg2YiwgMHg0YiwgMHgwZCwgMHgzMiwKKwkweDU1LCAweGJmLCAweGVmLCAweDk1LCAweDYwLCAweDE4LCAweDkwLCAweGFmLCAweGQ4LAorCTB4MDcsIDB4MDkKK307CitzdGF0aWMgY29uc3QgdTMyIHNoYTFfaW5pdFtTSEExX0RJR0VTVF9TSVpFIC8gNF0gPSB7CisJU0hBMV9IMCwgU0hBMV9IMSwgU0hBMV9IMiwgU0hBMV9IMywgU0hBMV9INCwKK307CitzdGF0aWMgY29uc3QgY2hhciBzaGEyNTZfemVyb1tTSEEyNTZfRElHRVNUX1NJWkVdID0geworCTB4ZTMsIDB4YjAsIDB4YzQsIDB4NDIsIDB4OTgsIDB4ZmMsIDB4MWMsIDB4MTQsIDB4OWEsCisJMHhmYiwgMHhmNCwgMHhjOCwgMHg5OSwgMHg2ZiwgMHhiOSwgMHgyNCwgMHgyNywgMHhhZSwKKwkweDQxLCAweGU0LCAweDY0LCAweDliLCAweDkzLCAweDRjLCAweGE0LCAweDk1LCAweDk5LAorCTB4MWIsIDB4NzgsIDB4NTIsIDB4YjgsIDB4NTUKK307CitzdGF0aWMgY29uc3QgdTMyIHNoYTI1Nl9pbml0W1NIQTI1Nl9ESUdFU1RfU0laRSAvIDRdID0geworCVNIQTI1Nl9IMCwgU0hBMjU2X0gxLCBTSEEyNTZfSDIsIFNIQTI1Nl9IMywKKwlTSEEyNTZfSDQsIFNIQTI1Nl9INSwgU0hBMjU2X0g2LCBTSEEyNTZfSDcsCit9Oworc3RhdGljIGNvbnN0IGNoYXIgc2hhMjI0X3plcm9bU0hBMjI0X0RJR0VTVF9TSVpFXSA9IHsKKwkweGQxLCAweDRhLCAweDAyLCAweDhjLCAweDJhLCAweDNhLCAweDJiLCAweGM5LCAweDQ3LAorCTB4NjEsIDB4MDIsIDB4YmIsIDB4MjgsIDB4ODIsIDB4MzQsIDB4YzQsIDB4MTUsIDB4YTIsCisJMHhiMCwgMHgxZiwgMHg4MiwgMHg4ZSwgMHhhNiwgMHgyYSwgMHhjNSwgMHhiMywgMHhlNCwKKwkweDJmCit9Oworc3RhdGljIGNvbnN0IHUzMiBzaGEyMjRfaW5pdFtTSEEyNTZfRElHRVNUX1NJWkUgLyA0XSA9IHsKKwlTSEEyMjRfSDAsIFNIQTIyNF9IMSwgU0hBMjI0X0gyLCBTSEEyMjRfSDMsCisJU0hBMjI0X0g0LCBTSEEyMjRfSDUsIFNIQTIyNF9INiwgU0hBMjI0X0g3LAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBuMl9oYXNoX3RtcGwgaGFzaF90bXBsc1tdID0gewogCXsgLm5hbWUJCT0gIm1kNSIsCi0JICAuZGlnZXN0CT0gbjJfbWQ1X2FzeW5jX2RpZ2VzdCwKKwkgIC5oYXNoX3plcm8JPSBtZDVfemVybywKKwkgIC5oYXNoX2luaXQJPSBtZDVfaW5pdCwKKwkgIC5hdXRoX3R5cGUJPSBBVVRIX1RZUEVfTUQ1LAorCSAgLmhtYWNfdHlwZQk9IEFVVEhfVFlQRV9ITUFDX01ENSwKKwkgIC5od19vcF9oYXNoc3oJPSBNRDVfRElHRVNUX1NJWkUsCiAJICAuZGlnZXN0X3NpemUJPSBNRDVfRElHRVNUX1NJWkUsCiAJICAuYmxvY2tfc2l6ZQk9IE1ENV9ITUFDX0JMT0NLX1NJWkUgfSwKIAl7IC5uYW1lCQk9ICJzaGExIiwKLQkgIC5kaWdlc3QJPSBuMl9zaGExX2FzeW5jX2RpZ2VzdCwKKwkgIC5oYXNoX3plcm8JPSBzaGExX3plcm8sCisJICAuaGFzaF9pbml0CT0gc2hhMV9pbml0LAorCSAgLmF1dGhfdHlwZQk9IEFVVEhfVFlQRV9TSEExLAorCSAgLmhtYWNfdHlwZQk9IEFVVEhfVFlQRV9ITUFDX1NIQTEsCisJICAuaHdfb3BfaGFzaHN6CT0gU0hBMV9ESUdFU1RfU0laRSwKIAkgIC5kaWdlc3Rfc2l6ZQk9IFNIQTFfRElHRVNUX1NJWkUsCiAJICAuYmxvY2tfc2l6ZQk9IFNIQTFfQkxPQ0tfU0laRSB9LAogCXsgLm5hbWUJCT0gInNoYTI1NiIsCi0JICAuZGlnZXN0CT0gbjJfc2hhMjU2X2FzeW5jX2RpZ2VzdCwKKwkgIC5oYXNoX3plcm8JPSBzaGEyNTZfemVybywKKwkgIC5oYXNoX2luaXQJPSBzaGEyNTZfaW5pdCwKKwkgIC5hdXRoX3R5cGUJPSBBVVRIX1RZUEVfU0hBMjU2LAorCSAgLmhtYWNfdHlwZQk9IEFVVEhfVFlQRV9ITUFDX1NIQTI1NiwKKwkgIC5od19vcF9oYXNoc3oJPSBTSEEyNTZfRElHRVNUX1NJWkUsCiAJICAuZGlnZXN0X3NpemUJPSBTSEEyNTZfRElHRVNUX1NJWkUsCiAJICAuYmxvY2tfc2l6ZQk9IFNIQTI1Nl9CTE9DS19TSVpFIH0sCiAJeyAubmFtZQkJPSAic2hhMjI0IiwKLQkgIC5kaWdlc3QJPSBuMl9zaGEyMjRfYXN5bmNfZGlnZXN0LAorCSAgLmhhc2hfemVybwk9IHNoYTIyNF96ZXJvLAorCSAgLmhhc2hfaW5pdAk9IHNoYTIyNF9pbml0LAorCSAgLmF1dGhfdHlwZQk9IEFVVEhfVFlQRV9TSEEyNTYsCisJICAuaG1hY190eXBlCT0gQVVUSF9UWVBFX1JFU0VSVkVELAorCSAgLmh3X29wX2hhc2hzegk9IFNIQTI1Nl9ESUdFU1RfU0laRSwKIAkgIC5kaWdlc3Rfc2l6ZQk9IFNIQTIyNF9ESUdFU1RfU0laRSwKIAkgIC5ibG9ja19zaXplCT0gU0hBMjI0X0JMT0NLX1NJWkUgfSwKIH07CiAjZGVmaW5lIE5VTV9IQVNIX1RNUExTIEFSUkFZX1NJWkUoaGFzaF90bXBscykKIAotc3RydWN0IG4yX2FoYXNoX2FsZyB7Ci0Jc3RydWN0IGxpc3RfaGVhZAllbnRyeTsKLQlzdHJ1Y3QgYWhhc2hfYWxnCWFsZzsKLX07CiBzdGF0aWMgTElTVF9IRUFEKGFoYXNoX2FsZ3MpOworc3RhdGljIExJU1RfSEVBRChobWFjX2FsZ3MpOwogCiBzdGF0aWMgaW50IGFsZ3NfcmVnaXN0ZXJlZDsKIApAQCAtMTI0NSwxMiArMTM2MywxOCBAQAogewogCXN0cnVjdCBuMl9jaXBoZXJfYWxnICpjaXBoZXIsICpjaXBoZXJfdG1wOwogCXN0cnVjdCBuMl9haGFzaF9hbGcgKmFsZywgKmFsZ190bXA7CisJc3RydWN0IG4yX2htYWNfYWxnICpobWFjLCAqaG1hY190bXA7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2lwaGVyLCBjaXBoZXJfdG1wLCAmY2lwaGVyX2FsZ3MsIGVudHJ5KSB7CiAJCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmY2lwaGVyLT5hbGcpOwogCQlsaXN0X2RlbCgmY2lwaGVyLT5lbnRyeSk7CiAJCWtmcmVlKGNpcGhlcik7CiAJfQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShobWFjLCBobWFjX3RtcCwgJmhtYWNfYWxncywgZGVyaXZlZC5lbnRyeSkgeworCQljcnlwdG9fdW5yZWdpc3Rlcl9haGFzaCgmaG1hYy0+ZGVyaXZlZC5hbGcpOworCQlsaXN0X2RlbCgmaG1hYy0+ZGVyaXZlZC5lbnRyeSk7CisJCWtmcmVlKGhtYWMpOworCX0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYWxnLCBhbGdfdG1wLCAmYWhhc2hfYWxncywgZW50cnkpIHsKIAkJY3J5cHRvX3VucmVnaXN0ZXJfYWhhc2goJmFsZy0+YWxnKTsKIAkJbGlzdF9kZWwoJmFsZy0+ZW50cnkpOwpAQCAtMTI5MCw4ICsxNDE0LDQ5IEBACiAJbGlzdF9hZGQoJnAtPmVudHJ5LCAmY2lwaGVyX2FsZ3MpOwogCWVyciA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoYWxnKTsKIAlpZiAoZXJyKSB7CisJCXByX2VycigiJXMgYWxnIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIsIGFsZy0+Y3JhX25hbWUpOwogCQlsaXN0X2RlbCgmcC0+ZW50cnkpOwogCQlrZnJlZShwKTsKKwl9IGVsc2UgeworCQlwcl9pbmZvKCIlcyBhbGcgcmVnaXN0ZXJlZFxuIiwgYWxnLT5jcmFfbmFtZSk7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IF9fbjJfcmVnaXN0ZXJfb25lX2htYWMoc3RydWN0IG4yX2FoYXNoX2FsZyAqbjJhaGFzaCkKK3sKKwlzdHJ1Y3QgbjJfaG1hY19hbGcgKnAgPSBremFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOworCXN0cnVjdCBhaGFzaF9hbGcgKmFoYXNoOworCXN0cnVjdCBjcnlwdG9fYWxnICpiYXNlOworCWludCBlcnI7CisKKwlpZiAoIXApCisJCXJldHVybiAtRU5PTUVNOworCisJcC0+Y2hpbGRfYWxnID0gbjJhaGFzaC0+YWxnLmhhbGcuYmFzZS5jcmFfbmFtZTsKKwltZW1jcHkoJnAtPmRlcml2ZWQsIG4yYWhhc2gsIHNpemVvZihzdHJ1Y3QgbjJfYWhhc2hfYWxnKSk7CisJSU5JVF9MSVNUX0hFQUQoJnAtPmRlcml2ZWQuZW50cnkpOworCisJYWhhc2ggPSAmcC0+ZGVyaXZlZC5hbGc7CisJYWhhc2gtPmRpZ2VzdCA9IG4yX2htYWNfYXN5bmNfZGlnZXN0OworCWFoYXNoLT5zZXRrZXkgPSBuMl9obWFjX2FzeW5jX3NldGtleTsKKworCWJhc2UgPSAmYWhhc2gtPmhhbGcuYmFzZTsKKwlzbnByaW50ZihiYXNlLT5jcmFfbmFtZSwgQ1JZUFRPX01BWF9BTEdfTkFNRSwgImhtYWMoJXMpIiwgcC0+Y2hpbGRfYWxnKTsKKwlzbnByaW50ZihiYXNlLT5jcmFfZHJpdmVyX25hbWUsIENSWVBUT19NQVhfQUxHX05BTUUsICJobWFjLSVzLW4yIiwgcC0+Y2hpbGRfYWxnKTsKKworCWJhc2UtPmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBuMl9obWFjX2N0eCk7CisJYmFzZS0+Y3JhX2luaXQgPSBuMl9obWFjX2NyYV9pbml0OworCWJhc2UtPmNyYV9leGl0ID0gbjJfaG1hY19jcmFfZXhpdDsKKworCWxpc3RfYWRkKCZwLT5kZXJpdmVkLmVudHJ5LCAmaG1hY19hbGdzKTsKKwllcnIgPSBjcnlwdG9fcmVnaXN0ZXJfYWhhc2goYWhhc2gpOworCWlmIChlcnIpIHsKKwkJcHJfZXJyKCIlcyBhbGcgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIiwgYmFzZS0+Y3JhX25hbWUpOworCQlsaXN0X2RlbCgmcC0+ZGVyaXZlZC5lbnRyeSk7CisJCWtmcmVlKHApOworCX0gZWxzZSB7CisJCXByX2luZm8oIiVzIGFsZyByZWdpc3RlcmVkXG4iLCBiYXNlLT5jcmFfbmFtZSk7CiAJfQogCXJldHVybiBlcnI7CiB9CkBAIC0xMzA3LDEyICsxNDcyLDE5IEBACiAJaWYgKCFwKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCXAtPmhhc2hfemVybyA9IHRtcGwtPmhhc2hfemVybzsKKwlwLT5oYXNoX2luaXQgPSB0bXBsLT5oYXNoX2luaXQ7CisJcC0+YXV0aF90eXBlID0gdG1wbC0+YXV0aF90eXBlOworCXAtPmhtYWNfdHlwZSA9IHRtcGwtPmhtYWNfdHlwZTsKKwlwLT5od19vcF9oYXNoc3ogPSB0bXBsLT5od19vcF9oYXNoc3o7CisJcC0+ZGlnZXN0X3NpemUgPSB0bXBsLT5kaWdlc3Rfc2l6ZTsKKwogCWFoYXNoID0gJnAtPmFsZzsKIAlhaGFzaC0+aW5pdCA9IG4yX2hhc2hfYXN5bmNfaW5pdDsKIAlhaGFzaC0+dXBkYXRlID0gbjJfaGFzaF9hc3luY191cGRhdGU7CiAJYWhhc2gtPmZpbmFsID0gbjJfaGFzaF9hc3luY19maW5hbDsKIAlhaGFzaC0+ZmludXAgPSBuMl9oYXNoX2FzeW5jX2ZpbnVwOwotCWFoYXNoLT5kaWdlc3QgPSB0bXBsLT5kaWdlc3Q7CisJYWhhc2gtPmRpZ2VzdCA9IG4yX2hhc2hfYXN5bmNfZGlnZXN0OwogCiAJaGFsZyA9ICZhaGFzaC0+aGFsZzsKIAloYWxnLT5kaWdlc3RzaXplID0gdG1wbC0+ZGlnZXN0X3NpemU7CkBAIC0xMzMxLDkgKzE1MDMsMTQgQEAKIAlsaXN0X2FkZCgmcC0+ZW50cnksICZhaGFzaF9hbGdzKTsKIAllcnIgPSBjcnlwdG9fcmVnaXN0ZXJfYWhhc2goYWhhc2gpOwogCWlmIChlcnIpIHsKKwkJcHJfZXJyKCIlcyBhbGcgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIiwgYmFzZS0+Y3JhX25hbWUpOwogCQlsaXN0X2RlbCgmcC0+ZW50cnkpOwogCQlrZnJlZShwKTsKKwl9IGVsc2UgeworCQlwcl9pbmZvKCIlcyBhbGcgcmVnaXN0ZXJlZFxuIiwgYmFzZS0+Y3JhX25hbWUpOwogCX0KKwlpZiAoIWVyciAmJiBwLT5obWFjX3R5cGUgIT0gQVVUSF9UWVBFX1JFU0VSVkVEKQorCQllcnIgPSBfX24yX3JlZ2lzdGVyX29uZV9obWFjKHApOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTIwNzAsMjAgKzIyNDcsMjAgQEAKIAogc3RhdGljIGludCBfX2luaXQgbjJfaW5pdCh2b2lkKQogewotCWludCBlcnIgPSBvZl9yZWdpc3Rlcl9kcml2ZXIoJm4yX2NyeXB0b19kcml2ZXIsICZvZl9idXNfdHlwZSk7CisJaW50IGVyciA9IG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmbjJfY3J5cHRvX2RyaXZlcik7CiAKIAlpZiAoIWVycikgewotCQllcnIgPSBvZl9yZWdpc3Rlcl9kcml2ZXIoJm4yX21hdV9kcml2ZXIsICZvZl9idXNfdHlwZSk7CisJCWVyciA9IG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmbjJfbWF1X2RyaXZlcik7CiAJCWlmIChlcnIpCi0JCQlvZl91bnJlZ2lzdGVyX2RyaXZlcigmbjJfY3J5cHRvX2RyaXZlcik7CisJCQlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmbjJfY3J5cHRvX2RyaXZlcik7CiAJfQogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBuMl9leGl0KHZvaWQpCiB7Ci0Jb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoJm4yX21hdV9kcml2ZXIpOwotCW9mX3VucmVnaXN0ZXJfZHJpdmVyKCZuMl9jcnlwdG9fZHJpdmVyKTsKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmbjJfbWF1X2RyaXZlcik7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm4yX2NyeXB0b19kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChuMl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL29tYXAtc2hhbS5jIGIvZHJpdmVycy9jcnlwdG8vb21hcC1zaGFtLmMKaW5kZXggOGIwMzQzMy4uN2QxNDg1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vb21hcC1zaGFtLmMKKysrIGIvZHJpdmVycy9jcnlwdG8vb21hcC1zaGFtLmMKQEAgLTE1LDcgKzE1LDYgQEAKIAogI2RlZmluZSBwcl9mbXQoZm10KSAiJXM6ICIgZm10LCBfX2Z1bmNfXwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vdGFsaXRvcy5jIGIvZHJpdmVycy9jcnlwdG8vdGFsaXRvcy5jCmluZGV4IDYzN2MxMDUuLjk3ZjRhZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL3RhbGl0b3MuYworKysgYi9kcml2ZXJzL2NyeXB0by90YWxpdG9zLmMKQEAgLTcyMCw3ICs3MjAsNiBAQAogI2RlZmluZSBUQUxJVE9TX01ERVVfTUFYX0NPTlRFWFRfU0laRQlUQUxJVE9TX01ERVVfQ09OVEVYVF9TSVpFX1NIQTM4NF9TSEE1MTIKIAogc3RydWN0IHRhbGl0b3NfYWhhc2hfcmVxX2N0eCB7Ci0JdTY0IGNvdW50OwogCXUzMiBod19jb250ZXh0W1RBTElUT1NfTURFVV9NQVhfQ09OVEVYVF9TSVpFIC8gc2l6ZW9mKHUzMildOwogCXVuc2lnbmVkIGludCBod19jb250ZXh0X3NpemU7CiAJdTggYnVmW0hBU0hfTUFYX0JMT0NLX1NJWkVdOwpAQCAtNzI5LDYgKzcyOCw3IEBACiAJdW5zaWduZWQgaW50IGZpcnN0OwogCXVuc2lnbmVkIGludCBsYXN0OwogCXVuc2lnbmVkIGludCB0b19oYXNoX2xhdGVyOworCXU2NCBuYnVmOwogCXN0cnVjdCBzY2F0dGVybGlzdCBidWZzbFsyXTsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnBzcmM7CiB9OwpAQCAtMTE4MywxMCArMTE4MywxNCBAQAogCQkJCS8qIENvcHkgcGFydCBvZiB0aGlzIHNlZ21lbnQgKi8KIAkJCQlpZ25vcmUgPSBza2lwIC0gb2Zmc2V0OwogCQkJCWxlbiA9IG1pdGVyLmxlbmd0aCAtIGlnbm9yZTsKKwkJCQlpZiAoYm9mZnNldCArIGxlbiA+IGJ1ZmxlbikKKwkJCQkJbGVuID0gYnVmbGVuIC0gYm9mZnNldDsKIAkJCQltZW1jcHkoYnVmICsgYm9mZnNldCwgbWl0ZXIuYWRkciArIGlnbm9yZSwgbGVuKTsKIAkJCX0gZWxzZSB7Ci0JCQkJLyogQ29weSBhbGwgb2YgdGhpcyBzZWdtZW50ICovCisJCQkJLyogQ29weSBhbGwgb2YgdGhpcyBzZWdtZW50ICh1cCB0byBidWZsZW4pICovCiAJCQkJbGVuID0gbWl0ZXIubGVuZ3RoOworCQkJCWlmIChib2Zmc2V0ICsgbGVuID4gYnVmbGVuKQorCQkJCQlsZW4gPSBidWZsZW4gLSBib2Zmc2V0OwogCQkJCW1lbWNweShidWYgKyBib2Zmc2V0LCBtaXRlci5hZGRyLCBsZW4pOwogCQkJfQogCQkJYm9mZnNldCArPSBsZW47CkBAIC0xNjA5LDYgKzE2MTMsNyBAQAogCWlmICghcmVxX2N0eC0+bGFzdCAmJiByZXFfY3R4LT50b19oYXNoX2xhdGVyKSB7CiAJCS8qIFBvc2l0aW9uIGFueSBwYXJ0aWFsIGJsb2NrIGZvciBuZXh0IHVwZGF0ZS9maW5hbC9maW51cCAqLwogCQltZW1jcHkocmVxX2N0eC0+YnVmLCByZXFfY3R4LT5idWZuZXh0LCByZXFfY3R4LT50b19oYXNoX2xhdGVyKTsKKwkJcmVxX2N0eC0+bmJ1ZiA9IHJlcV9jdHgtPnRvX2hhc2hfbGF0ZXI7CiAJfQogCWNvbW1vbl9ub25zbm9vcF9oYXNoX3VubWFwKGRldiwgZWRlc2MsIGFyZXEpOwogCkBAIC0xNzI0LDcgKzE3MjksNyBAQAogCXN0cnVjdCB0YWxpdG9zX2FoYXNoX3JlcV9jdHggKnJlcV9jdHggPSBhaGFzaF9yZXF1ZXN0X2N0eChhcmVxKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIGNvbnRleHQgKi8KLQlyZXFfY3R4LT5jb3VudCA9IDA7CisJcmVxX2N0eC0+bmJ1ZiA9IDA7CiAJcmVxX2N0eC0+Zmlyc3QgPSAxOyAvKiBmaXJzdCBpbmRpY2F0ZXMgaC93IG11c3QgaW5pdCBpdHMgY29udGV4dCAqLwogCXJlcV9jdHgtPnN3aW5pdCA9IDA7IC8qIGFzc3VtZSBoL3cgaW5pdCBvZiBjb250ZXh0ICovCiAJcmVxX2N0eC0+aHdfY29udGV4dF9zaXplID0KQEAgLTE3NzIsNTIgKzE3NzcsNTQgQEAKIAkJCWNyeXB0b190Zm1fYWxnX2Jsb2Nrc2l6ZShjcnlwdG9fYWhhc2hfdGZtKHRmbSkpOwogCXVuc2lnbmVkIGludCBuYnl0ZXNfdG9faGFzaDsKIAl1bnNpZ25lZCBpbnQgdG9faGFzaF9sYXRlcjsKLQl1bnNpZ25lZCBpbnQgaW5kZXg7CisJdW5zaWduZWQgaW50IG5zZzsKIAlpbnQgY2hhaW5lZDsKIAotCWluZGV4ID0gcmVxX2N0eC0+Y291bnQgJiAoYmxvY2tzaXplIC0gMSk7Ci0JcmVxX2N0eC0+Y291bnQgKz0gbmJ5dGVzOwotCi0JaWYgKCFyZXFfY3R4LT5sYXN0ICYmIChpbmRleCArIG5ieXRlcykgPCBibG9ja3NpemUpIHsKLQkJLyogQnVmZmVyIHRoZSBwYXJ0aWFsIGJsb2NrICovCisJaWYgKCFyZXFfY3R4LT5sYXN0ICYmIChuYnl0ZXMgKyByZXFfY3R4LT5uYnVmIDw9IGJsb2Nrc2l6ZSkpIHsKKwkJLyogQnVmZmVyIHVwIHRvIG9uZSB3aG9sZSBibG9jayAqLwogCQlzZ19jb3B5X3RvX2J1ZmZlcihhcmVxLT5zcmMsCiAJCQkJICBzZ19jb3VudChhcmVxLT5zcmMsIG5ieXRlcywgJmNoYWluZWQpLAotCQkJCSAgcmVxX2N0eC0+YnVmICsgaW5kZXgsIG5ieXRlcyk7CisJCQkJICByZXFfY3R4LT5idWYgKyByZXFfY3R4LT5uYnVmLCBuYnl0ZXMpOworCQlyZXFfY3R4LT5uYnVmICs9IG5ieXRlczsKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKGluZGV4KSB7Ci0JCS8qIHBhcnRpYWwgYmxvY2sgZnJvbSBwcmV2aW91cyB1cGRhdGU7IGNoYWluIGl0IGluLiAqLwotCQlzZ19pbml0X3RhYmxlKHJlcV9jdHgtPmJ1ZnNsLCAobmJ5dGVzKSA/IDIgOiAxKTsKLQkJc2dfc2V0X2J1ZihyZXFfY3R4LT5idWZzbCwgcmVxX2N0eC0+YnVmLCBpbmRleCk7Ci0JCWlmIChuYnl0ZXMpCi0JCQlzY2F0dGVyd2Fsa19zZ19jaGFpbihyZXFfY3R4LT5idWZzbCwgMiwKLQkJCQkJICAgICBhcmVxLT5zcmMpOworCS8qIEF0IGxlYXN0IChibG9ja3NpemUgKyAxKSBieXRlcyBhcmUgYXZhaWxhYmxlIHRvIGhhc2ggKi8KKwluYnl0ZXNfdG9faGFzaCA9IG5ieXRlcyArIHJlcV9jdHgtPm5idWY7CisJdG9faGFzaF9sYXRlciA9IG5ieXRlc190b19oYXNoICYgKGJsb2Nrc2l6ZSAtIDEpOworCisJaWYgKHJlcV9jdHgtPmxhc3QpCisJCXRvX2hhc2hfbGF0ZXIgPSAwOworCWVsc2UgaWYgKHRvX2hhc2hfbGF0ZXIpCisJCS8qIFRoZXJlIGlzIGEgcGFydGlhbCBibG9jay4gSGFzaCB0aGUgZnVsbCBibG9jayhzKSBub3cgKi8KKwkJbmJ5dGVzX3RvX2hhc2ggLT0gdG9faGFzaF9sYXRlcjsKKwllbHNlIHsKKwkJLyogS2VlcCBvbmUgYmxvY2sgYnVmZmVyZWQgKi8KKwkJbmJ5dGVzX3RvX2hhc2ggLT0gYmxvY2tzaXplOworCQl0b19oYXNoX2xhdGVyID0gYmxvY2tzaXplOworCX0KKworCS8qIENoYWluIGluIGFueSBwcmV2aW91c2x5IGJ1ZmZlcmVkIGRhdGEgKi8KKwlpZiAocmVxX2N0eC0+bmJ1ZikgeworCQluc2cgPSAocmVxX2N0eC0+bmJ1ZiA8IG5ieXRlc190b19oYXNoKSA/IDIgOiAxOworCQlzZ19pbml0X3RhYmxlKHJlcV9jdHgtPmJ1ZnNsLCBuc2cpOworCQlzZ19zZXRfYnVmKHJlcV9jdHgtPmJ1ZnNsLCByZXFfY3R4LT5idWYsIHJlcV9jdHgtPm5idWYpOworCQlpZiAobnNnID4gMSkKKwkJCXNjYXR0ZXJ3YWxrX3NnX2NoYWluKHJlcV9jdHgtPmJ1ZnNsLCAyLCBhcmVxLT5zcmMpOwogCQlyZXFfY3R4LT5wc3JjID0gcmVxX2N0eC0+YnVmc2w7Ci0JfSBlbHNlIHsKKwl9IGVsc2UKIAkJcmVxX2N0eC0+cHNyYyA9IGFyZXEtPnNyYzsKLQl9Ci0JbmJ5dGVzX3RvX2hhc2ggPSAgaW5kZXggKyBuYnl0ZXM7Ci0JaWYgKCFyZXFfY3R4LT5sYXN0KSB7Ci0JCXRvX2hhc2hfbGF0ZXIgPSAobmJ5dGVzX3RvX2hhc2ggJiAoYmxvY2tzaXplIC0gMSkpOwotCQlpZiAodG9faGFzaF9sYXRlcikgewotCQkJaW50IG5lbnRzOwotCQkJLyogTXVzdCBjb3B5IHRvX2hhc2hfbGF0ZXIgYnl0ZXMgZnJvbSB0aGUgZW5kCi0JCQkgKiB0byBidWZuZXh0IChhIHBhcnRpYWwgYmxvY2spIGZvciBsYXRlci4KLQkJCSAqLwotCQkJbmVudHMgPSBzZ19jb3VudChhcmVxLT5zcmMsIG5ieXRlcywgJmNoYWluZWQpOwotCQkJc2dfY29weV9lbmRfdG9fYnVmZmVyKGFyZXEtPnNyYywgbmVudHMsCi0JCQkJCSAgICAgIHJlcV9jdHgtPmJ1Zm5leHQsCi0JCQkJCSAgICAgIHRvX2hhc2hfbGF0ZXIsCi0JCQkJCSAgICAgIG5ieXRlcyAtIHRvX2hhc2hfbGF0ZXIpOwogCi0JCQkvKiBBZGp1c3QgY291bnQgZm9yIHdoYXQgd2lsbCBiZSBoYXNoZWQgbm93ICovCi0JCQluYnl0ZXNfdG9faGFzaCAtPSB0b19oYXNoX2xhdGVyOwotCQl9Ci0JCXJlcV9jdHgtPnRvX2hhc2hfbGF0ZXIgPSB0b19oYXNoX2xhdGVyOworCWlmICh0b19oYXNoX2xhdGVyKSB7CisJCWludCBuZW50cyA9IHNnX2NvdW50KGFyZXEtPnNyYywgbmJ5dGVzLCAmY2hhaW5lZCk7CisJCXNnX2NvcHlfZW5kX3RvX2J1ZmZlcihhcmVxLT5zcmMsIG5lbnRzLAorCQkJCSAgICAgIHJlcV9jdHgtPmJ1Zm5leHQsCisJCQkJICAgICAgdG9faGFzaF9sYXRlciwKKwkJCQkgICAgICBuYnl0ZXMgLSB0b19oYXNoX2xhdGVyKTsKIAl9CisJcmVxX2N0eC0+dG9faGFzaF9sYXRlciA9IHRvX2hhc2hfbGF0ZXI7CiAKLQkvKiBhbGxvY2F0ZSBleHRlbmRlZCBkZXNjcmlwdG9yICovCisJLyogQWxsb2NhdGUgZXh0ZW5kZWQgZGVzY3JpcHRvciAqLwogCWVkZXNjID0gYWhhc2hfZWRlc2NfYWxsb2MoYXJlcSwgbmJ5dGVzX3RvX2hhc2gpOwogCWlmIChJU19FUlIoZWRlc2MpKQogCQlyZXR1cm4gUFRSX0VSUihlZGVzYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9hdF9oZG1hYy5jIGIvZHJpdmVycy9kbWEvYXRfaGRtYWMuYwppbmRleCBiZDUyNTBlLi5lODgwNzYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9hdF9oZG1hYy5jCisrKyBiL2RyaXZlcnMvZG1hL2F0X2hkbWFjLmMKQEAgLTY5LDcgKzY5LDcgQEAKIH0KIAogLyoqCi0gKiBhdGNfYWxsb2NfZGVzY3JpcHRvciAtIGFsbG9jYXRlIGFuZCByZXR1cm4gYW4gaW5pdGlsaXplZCBkZXNjcmlwdG9yCisgKiBhdGNfYWxsb2NfZGVzY3JpcHRvciAtIGFsbG9jYXRlIGFuZCByZXR1cm4gYW4gaW5pdGlhbGl6ZWQgZGVzY3JpcHRvcgogICogQGNoYW46IHRoZSBjaGFubmVsIHRvIGFsbG9jYXRlIGRlc2NyaXB0b3JzIGZvcgogICogQGdmcF9mbGFnczogR0ZQIGFsbG9jYXRpb24gZmxhZ3MKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9mc2xkbWEuYyBiL2RyaXZlcnMvZG1hL2ZzbGRtYS5jCmluZGV4IDgwODhiMTQuLmYwZmQ2ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2ZzbGRtYS5jCisrKyBiL2RyaXZlcnMvZG1hL2ZzbGRtYS5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKiBEZXNjcmlwdGlvbjoKICAqICAgRE1BIGVuZ2luZSBkcml2ZXIgZm9yIEZyZWVzY2FsZSBNUEM4NTQwIERNQSBjb250cm9sbGVyLCB3aGljaCBpcwogICogICBhbHNvIGZpdCBmb3IgTVBDODU2MCwgTVBDODU1NSwgTVBDODU0OCwgTVBDODY0MSwgYW5kIGV0Yy4KLSAqICAgVGhlIHN1cHBvcnQgZm9yIE1QQzgzNDkgRE1BIGNvbnRvcmxsZXIgaXMgYWxzbyBhZGRlZC4KKyAqICAgVGhlIHN1cHBvcnQgZm9yIE1QQzgzNDkgRE1BIGNvbnRyb2xsZXIgaXMgYWxzbyBhZGRlZC4KICAqCiAgKiBUaGlzIGRyaXZlciBpbnN0cnVjdHMgdGhlIERNQSBjb250cm9sbGVyIHRvIGlzc3VlIHRoZSBQQ0kgUmVhZCBNdWx0aXBsZQogICogY29tbWFuZCBmb3IgUENJIHJlYWQgb3BlcmF0aW9ucywgaW5zdGVhZCBvZiB1c2luZyB0aGUgZGVmYXVsdCBQQ0kgUmVhZCBMaW5lCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvS2NvbmZpZyBiL2RyaXZlcnMvZWRhYy9LY29uZmlnCmluZGV4IGFlZGVmNzkuLjcwYmIzNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvZWRhYy9LY29uZmlnCkBAIC0zOSwxNCArMzksNiBAQAogCSAgdGhlcmUncmUgZm91ciBkZWJ1ZyBsZXZlbHMgKHg9MCwxLDIsMyBmcm9tIGxvdyB0byBoaWdoKS4KIAkgIFVzdWFsbHkgeW91IHNob3VsZCBzZWxlY3QgJ04nLgogCi1jb25maWcgRURBQ19ERUJVR19WRVJCT1NFCi0JYm9vbCAiTW9yZSB2ZXJib3NlIGRlYnVnZ2luZyIKLQlkZXBlbmRzIG9uIEVEQUNfREVCVUcKLQloZWxwCi0JICBUaGlzIG9wdGlvbiBtYWtlcyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gbW9yZSB2ZXJib3NlLgotCSAgU291cmNlIGZpbGUgbmFtZSBhbmQgbGluZSBudW1iZXIgd2hlcmUgZGVidWdnaW5nIG1lc3NhZ2UKLQkgIHByaW50ZWQgd2lsbCBiZSBhZGRlZCB0byBkZWJ1Z2dpbmcgbWVzc2FnZS4KLQogIGNvbmZpZyBFREFDX0RFQ09ERV9NQ0UKIAl0cmlzdGF0ZSAiRGVjb2RlIE1DRXMgaW4gaHVtYW4tcmVhZGFibGUgZm9ybSAob25seSBvbiBBTUQgZm9yIG5vdykiCiAJZGVwZW5kcyBvbiBDUFVfU1VQX0FNRCAmJiBYODZfTUNFCkBAIC0yMDksNyArMjAxLDcgQEAKIAogY29uZmlnIEVEQUNfTVBDODVYWAogCXRyaXN0YXRlICJGcmVlc2NhbGUgTVBDODN4eCAvIE1QQzg1eHgiCi0JZGVwZW5kcyBvbiBFREFDX01NX0VEQUMgJiYgRlNMX1NPQyAmJiAoUFBDXzgzeHggfHwgTVBDODV4eCkKKwlkZXBlbmRzIG9uIEVEQUNfTU1fRURBQyAmJiBGU0xfU09DICYmIChQUENfODN4eCB8fCBQUENfODV4eCkKIAloZWxwCiAJICBTdXBwb3J0IGZvciBlcnJvciBkZXRlY3Rpb24gYW5kIGNvcnJlY3Rpb24gb24gdGhlIEZyZWVzY2FsZQogCSAgTVBDODM0OSwgTVBDODU2MCwgTVBDODU0MCwgTVBDODU0OApkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKaW5kZXggYWM5Zjc5OC4uNjcwMjM5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCkBAIC0xNjAsNyArMTYwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhbWQ2NF9zZXRfc2NydWJfcmF0ZShzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksIHUzMiAqYmFuZHdpZHRoKQorc3RhdGljIGludCBhbWQ2NF9zZXRfc2NydWJfcmF0ZShzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksIHUzMiBiYW5kd2lkdGgpCiB7CiAJc3RydWN0IGFtZDY0X3B2dCAqcHZ0ID0gbWNpLT5wdnRfaW5mbzsKIAl1MzIgbWluX3NjcnVicmF0ZSA9IDB4MDsKQEAgLTE3OCwxMCArMTc4LDEwIEBACiAKIAlkZWZhdWx0OgogCQlhbWQ2NF9wcmludGsoS0VSTl9FUlIsICJVbnN1cHBvcnRlZCBmYW1pbHkhXG4iKTsKLQkJYnJlYWs7CisJCXJldHVybiAtRUlOVkFMOwogCX0KLQlyZXR1cm4gYW1kNjRfc2VhcmNoX3NldF9zY3J1Yl9yYXRlKHB2dC0+bWlzY19mM19jdGwsICpiYW5kd2lkdGgsCi0JCQltaW5fc2NydWJyYXRlKTsKKwlyZXR1cm4gYW1kNjRfc2VhcmNoX3NldF9zY3J1Yl9yYXRlKHB2dC0+bWlzY19mM19jdGwsIGJhbmR3aWR0aCwKKwkJCQkJICAgbWluX3NjcnVicmF0ZSk7CiB9CiAKIHN0YXRpYyBpbnQgYW1kNjRfZ2V0X3NjcnViX3JhdGUoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLCB1MzIgKmJ3KQpAQCAtNzk2LDYgKzc5NiwxMSBAQAogCiBzdGF0aWMgaW50IGdldF9jaGFubmVsX2Zyb21fZWNjX3N5bmRyb21lKHN0cnVjdCBtZW1fY3RsX2luZm8gKiwgdTE2KTsKIAorc3RhdGljIHUxNiBleHRyYWN0X3N5bmRyb21lKHN0cnVjdCBlcnJfcmVncyAqZXJyKQoreworCXJldHVybiAoKGVyci0+bmJzaCA+PiAxNSkgJiAweGZmKSB8ICgoZXJyLT5uYnNsID4+IDE2KSAmIDB4ZmYwMCk7Cit9CisKIHN0YXRpYyB2b2lkIGFtZDY0X2NwdV9kaXNwbGF5X2luZm8oc3RydWN0IGFtZDY0X3B2dCAqcHZ0KQogewogCWlmIChib290X2NwdV9kYXRhLng4NiA9PSAweDExKQpAQCAtODg4LDYgKzg5Myw5IEBACiAJCXJldHVybjsKIAl9CiAKKwlhbWQ2NF9wcmludGsoS0VSTl9JTkZPLCAidXNpbmcgJXMgc3luZHJvbWVzLlxuIiwKKwkJICAgICAoKHB2dC0+c3luX3R5cGUgPT0gOCkgPyAieDgiIDogIng0IikpOworCiAJLyogT25seSBpZiBOT1QgZ2FuZ2VkIGRvZXMgZGNscjEgaGF2ZSB2YWxpZCBpbmZvICovCiAJaWYgKCFkY3RfZ2FuZ2luZ19lbmFibGVkKHB2dCkpCiAJCWFtZDY0X2R1bXBfZHJhbWNmZ19sb3cocHZ0LT5kY2xyMSwgMSk7CkBAIC0xMTAxLDIwICsxMTA5LDE3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGs4X21hcF9zeXNhZGRyX3RvX2Nzcm93KHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKLQkJCQkJc3RydWN0IGVycl9yZWdzICppbmZvLAotCQkJCQl1NjQgc3lzX2FkZHIpCisJCQkJICAgIHN0cnVjdCBlcnJfcmVncyAqZXJyX2luZm8sIHU2NCBzeXNfYWRkcikKIHsKIAlzdHJ1Y3QgbWVtX2N0bF9pbmZvICpzcmNfbWNpOwotCXVuc2lnbmVkIHNob3J0IHN5bmRyb21lOwogCWludCBjaGFubmVsLCBjc3JvdzsKIAl1MzIgcGFnZSwgb2Zmc2V0OworCXUxNiBzeW5kcm9tZTsKIAotCS8qIEV4dHJhY3QgdGhlIHN5bmRyb21lIHBhcnRzIGFuZCBmb3JtIGEgMTYtYml0IHN5bmRyb21lICovCi0Jc3luZHJvbWUgID0gSElHSF9TWU5EUk9NRShpbmZvLT5uYnNsKSA8PCA4OwotCXN5bmRyb21lIHw9IExPV19TWU5EUk9NRShpbmZvLT5uYnNoKTsKKwlzeW5kcm9tZSA9IGV4dHJhY3Rfc3luZHJvbWUoZXJyX2luZm8pOwogCiAJLyogQ0hJUEtJTEwgZW5hYmxlZCAqLwotCWlmIChpbmZvLT5uYmNmZyAmIEs4X05CQ0ZHX0NISVBLSUxMKSB7CisJaWYgKGVycl9pbmZvLT5uYmNmZyAmIEs4X05CQ0ZHX0NISVBLSUxMKSB7CiAJCWNoYW5uZWwgPSBnZXRfY2hhbm5lbF9mcm9tX2VjY19zeW5kcm9tZShtY2ksIHN5bmRyb21lKTsKIAkJaWYgKGNoYW5uZWwgPCAwKSB7CiAJCQkvKgpAQCAtMTEyMyw4ICsxMTI4LDggQEAKIAkJCSAqIGFzIHN1c3BlY3QuCiAJCQkgKi8KIAkJCWFtZDY0X21jX3ByaW50ayhtY2ksIEtFUk5fV0FSTklORywKLQkJCQkgICAgICAgInVua25vd24gc3luZHJvbWUgMHgleCAtIHBvc3NpYmxlIGVycm9yICIKLQkJCQkgICAgICAgInJlcG9ydGluZyByYWNlXG4iLCBzeW5kcm9tZSk7CisJCQkJCSJ1bmtub3duIHN5bmRyb21lIDB4JTA0eCAtIHBvc3NpYmxlICIKKwkJCQkJImVycm9yIHJlcG9ydGluZyByYWNlXG4iLCBzeW5kcm9tZSk7CiAJCQllZGFjX21jX2hhbmRsZV9jZV9ub19pbmZvKG1jaSwgRURBQ19NT0RfU1RSKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtMTQzMCw3ICsxNDM1LDcgQEAKIAl1NjQgY2hhbl9vZmY7CiAKIAlpZiAoaGlfcmFuZ2Vfc2VsKSB7Ci0JCWlmICghKGRjdF9zZWxfYmFzZV9hZGRyICYgMHhGRkZGRjgwMCkgJiYKKwkJaWYgKCEoZGN0X3NlbF9iYXNlX2FkZHIgJiAweEZGRkYwMDAwKSAmJgogCQkgICBob2xlX3ZhbGlkICYmIChzeXNfYWRkciA+PSAweDEwMDAwMDAwMFVMTCkpCiAJCQljaGFuX29mZiA9IGhvbGVfb2ZmIDw8IDE2OwogCQllbHNlCkBAIC0xNjU0LDEzICsxNjU5LDEzIEBACiAgKiAoTUNYX0FERFIpLgogICovCiBzdGF0aWMgdm9pZCBmMTBfbWFwX3N5c2FkZHJfdG9fY3Nyb3coc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAotCQkJCSAgICAgc3RydWN0IGVycl9yZWdzICppbmZvLAorCQkJCSAgICAgc3RydWN0IGVycl9yZWdzICplcnJfaW5mbywKIAkJCQkgICAgIHU2NCBzeXNfYWRkcikKIHsKIAlzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQgPSBtY2ktPnB2dF9pbmZvOwogCXUzMiBwYWdlLCBvZmZzZXQ7Ci0JdW5zaWduZWQgc2hvcnQgc3luZHJvbWU7CiAJaW50IG5pZCwgY3Nyb3csIGNoYW4gPSAwOworCXUxNiBzeW5kcm9tZTsKIAogCWNzcm93ID0gZjEwX3RyYW5zbGF0ZV9zeXNhZGRyX3RvX2NzKHB2dCwgc3lzX2FkZHIsICZuaWQsICZjaGFuKTsKIApAQCAtMTY3MSwxNSArMTY3NiwxNCBAQAogCiAJZXJyb3JfYWRkcmVzc190b19wYWdlX2FuZF9vZmZzZXQoc3lzX2FkZHIsICZwYWdlLCAmb2Zmc2V0KTsKIAotCXN5bmRyb21lICA9IEhJR0hfU1lORFJPTUUoaW5mby0+bmJzbCkgPDwgODsKLQlzeW5kcm9tZSB8PSBMT1dfU1lORFJPTUUoaW5mby0+bmJzaCk7CisJc3luZHJvbWUgPSBleHRyYWN0X3N5bmRyb21lKGVycl9pbmZvKTsKIAogCS8qCiAJICogV2UgbmVlZCB0aGUgc3luZHJvbWVzIGZvciBjaGFubmVsIGRldGVjdGlvbiBvbmx5IHdoZW4gd2UncmUKIAkgKiBnYW5nZWQuIE90aGVyd2lzZSBAY2hhbiBzaG91bGQgYWxyZWFkeSBjb250YWluIHRoZSBjaGFubmVsIGF0CiAJICogdGhpcyBwb2ludC4KIAkgKi8KLQlpZiAoZGN0X2dhbmdpbmdfZW5hYmxlZChwdnQpICYmIHB2dC0+bmJjZmcgJiBLOF9OQkNGR19DSElQS0lMTCkKKwlpZiAoZGN0X2dhbmdpbmdfZW5hYmxlZChwdnQpICYmIChwdnQtPm5iY2ZnICYgSzhfTkJDRkdfQ0hJUEtJTEwpKQogCQljaGFuID0gZ2V0X2NoYW5uZWxfZnJvbV9lY2Nfc3luZHJvbWUobWNpLCBzeW5kcm9tZSk7CiAKIAlpZiAoY2hhbiA+PSAwKQpAQCAtMTg3OCw3ICsxODgyLDcgQEAKIH07CiAKIHN0YXRpYyBpbnQgZGVjb2RlX3N5bmRyb21lKHUxNiBzeW5kcm9tZSwgdTE2ICp2ZWN0b3JzLCBpbnQgbnVtX3ZlY3MsCi0JCQkJIGludCB2X2RpbSkKKwkJCSAgIGludCB2X2RpbSkKIHsKIAl1bnNpZ25lZCBpbnQgaSwgZXJyX3N5bTsKIApAQCAtMTk1NSwxMjQgKzE5NTksMjMgQEAKIHN0YXRpYyBpbnQgZ2V0X2NoYW5uZWxfZnJvbV9lY2Nfc3luZHJvbWUoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLCB1MTYgc3luZHJvbWUpCiB7CiAJc3RydWN0IGFtZDY0X3B2dCAqcHZ0ID0gbWNpLT5wdnRfaW5mbzsKLQl1MzIgdmFsdWUgPSAwOwotCWludCBlcnJfc3ltID0gMDsKKwlpbnQgZXJyX3N5bSA9IC0xOwogCi0JaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4MTApIHsKLQotCQlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5taXNjX2YzX2N0bCwgMHgxODAsICZ2YWx1ZSk7Ci0KLQkJLyogRjN4MTgwW0VjY1N5bWJvbFNpemVdPTEgPT4geDggc3ltYm9scyAqLwotCQlpZiAoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPiA3ICYmCi0JCSAgICB2YWx1ZSAmIEJJVCgyNSkpIHsKLQkJCWVycl9zeW0gPSBkZWNvZGVfc3luZHJvbWUoc3luZHJvbWUsIHg4X3ZlY3RvcnMsCi0JCQkJCQkgIEFSUkFZX1NJWkUoeDhfdmVjdG9ycyksIDgpOwotCQkJcmV0dXJuIG1hcF9lcnJfc3ltX3RvX2NoYW5uZWwoZXJyX3N5bSwgOCk7Ci0JCX0KKwlpZiAocHZ0LT5zeW5fdHlwZSA9PSA4KQorCQllcnJfc3ltID0gZGVjb2RlX3N5bmRyb21lKHN5bmRyb21lLCB4OF92ZWN0b3JzLAorCQkJCQkgIEFSUkFZX1NJWkUoeDhfdmVjdG9ycyksCisJCQkJCSAgcHZ0LT5zeW5fdHlwZSk7CisJZWxzZSBpZiAocHZ0LT5zeW5fdHlwZSA9PSA0KQorCQllcnJfc3ltID0gZGVjb2RlX3N5bmRyb21lKHN5bmRyb21lLCB4NF92ZWN0b3JzLAorCQkJCQkgIEFSUkFZX1NJWkUoeDRfdmVjdG9ycyksCisJCQkJCSAgcHZ0LT5zeW5fdHlwZSk7CisJZWxzZSB7CisJCWFtZDY0X3ByaW50ayhLRVJOX1dBUk5JTkcsICIlczogSWxsZWdhbCBzeW5kcm9tZSB0eXBlOiAldVxuIiwKKwkJCQkJICAgX19mdW5jX18sIHB2dC0+c3luX3R5cGUpOworCQlyZXR1cm4gZXJyX3N5bTsKIAl9Ci0JZXJyX3N5bSA9IGRlY29kZV9zeW5kcm9tZShzeW5kcm9tZSwgeDRfdmVjdG9ycywgQVJSQVlfU0laRSh4NF92ZWN0b3JzKSwgNCk7Ci0JcmV0dXJuIG1hcF9lcnJfc3ltX3RvX2NoYW5uZWwoZXJyX3N5bSwgNCk7Ci19CiAKLS8qCi0gKiBDaGVjayBmb3IgdmFsaWQgZXJyb3IgaW4gdGhlIE5CIFN0YXR1cyBIaWdoIHJlZ2lzdGVyLiBJZiBzbywgcHJvY2VlZCB0byByZWFkCi0gKiBOQiBTdGF0dXMgTG93LCBOQiBBZGRyZXNzIExvdyBhbmQgTkIgQWRkcmVzcyBIaWdoIHJlZ2lzdGVycyBhbmQgc3RvcmUgZGF0YQotICogaW50byBlcnJvciBzdHJ1Y3R1cmUuCi0gKgotICogUmV0dXJuczoKLSAqCS0gMTogaWYgaGFyZHdhcmUgcmVncyBjb250YWlucyB2YWxpZCBlcnJvciBpbmZvCi0gKgktIDA6IGlmIG5vIHZhbGlkIGVycm9yIGlzIGluZGljYXRlZAotICovCi1zdGF0aWMgaW50IGFtZDY0X2dldF9lcnJvcl9pbmZvX3JlZ3Moc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAotCQkJCSAgICAgc3RydWN0IGVycl9yZWdzICpyZWdzKQotewotCXN0cnVjdCBhbWQ2NF9wdnQgKnB2dDsKLQlzdHJ1Y3QgcGNpX2RldiAqbWlzY19mM19jdGw7Ci0KLQlwdnQgPSBtY2ktPnB2dF9pbmZvOwotCW1pc2NfZjNfY3RsID0gcHZ0LT5taXNjX2YzX2N0bDsKLQotCWlmIChhbWQ2NF9yZWFkX3BjaV9jZmcobWlzY19mM19jdGwsIEs4X05CU0gsICZyZWdzLT5uYnNoKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIShyZWdzLT5uYnNoICYgSzhfTkJTSF9WQUxJRF9CSVQpKQotCQlyZXR1cm4gMDsKLQotCS8qIHZhbGlkIGVycm9yLCByZWFkIHJlbWFpbmluZyBlcnJvciBpbmZvcm1hdGlvbiByZWdpc3RlcnMgKi8KLQlpZiAoYW1kNjRfcmVhZF9wY2lfY2ZnKG1pc2NfZjNfY3RsLCBLOF9OQlNMLCAmcmVncy0+bmJzbCkgfHwKLQkgICAgYW1kNjRfcmVhZF9wY2lfY2ZnKG1pc2NfZjNfY3RsLCBLOF9OQkVBTCwgJnJlZ3MtPm5iZWFsKSB8fAotCSAgICBhbWQ2NF9yZWFkX3BjaV9jZmcobWlzY19mM19jdGwsIEs4X05CRUFILCAmcmVncy0+bmJlYWgpIHx8Ci0JICAgIGFtZDY0X3JlYWRfcGNpX2NmZyhtaXNjX2YzX2N0bCwgSzhfTkJDRkcsICZyZWdzLT5uYmNmZykpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIDE7Ci19Ci0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byByZXRyaWV2ZSB0aGUgZXJyb3IgZGF0YSBmcm9tIGhhcmR3YXJlIGFuZCBzdG9yZSBpdAotICogaW4gdGhlIGluZm8gc3RydWN0dXJlLgotICoKLSAqIFJldHVybnM6Ci0gKgktIDE6IGlmIGEgdmFsaWQgZXJyb3IgaXMgZm91bmQKLSAqCS0gMDogaWYgbm8gZXJyb3IgaXMgZm91bmQKLSAqLwotc3RhdGljIGludCBhbWQ2NF9nZXRfZXJyb3JfaW5mbyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCi0JCQkJc3RydWN0IGVycl9yZWdzICppbmZvKQotewotCXN0cnVjdCBhbWQ2NF9wdnQgKnB2dDsKLQlzdHJ1Y3QgZXJyX3JlZ3MgcmVnczsKLQotCXB2dCA9IG1jaS0+cHZ0X2luZm87Ci0KLQlpZiAoIWFtZDY0X2dldF9lcnJvcl9pbmZvX3JlZ3MobWNpLCBpbmZvKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIEhlcmUncyB0aGUgcHJvYmxlbSB3aXRoIHRoZSBLOCdzIEVEQUMgcmVwb3J0aW5nOiBUaGVyZSBhcmUgZm91cgotCSAqIHJlZ2lzdGVycyB3aGljaCByZXBvcnQgcGllY2VzIG9mIGVycm9yIGluZm9ybWF0aW9uLiBUaGV5IGFyZSBzaGFyZWQKLQkgKiBiZXR3ZWVuIENFcyBhbmQgVUVzLiBGdXJ0aGVybW9yZSwgY29udHJhcnkgdG8gd2hhdCBpcyBzdGF0ZWQgaW4gdGhlCi0JICogQktERywgdGhlIG92ZXJmbG93IGJpdCBpcyBuZXZlciB1c2VkISBFdmVyeSBlcnJvciBhbHdheXMgdXBkYXRlcyB0aGUKLQkgKiByZXBvcnRpbmcgcmVnaXN0ZXJzLgotCSAqCi0JICogQ2FuIHlvdSBzZWUgdGhlIHJhY2UgY29uZGl0aW9uPyBBbGwgZm91ciBlcnJvciByZXBvcnRpbmcgcmVnaXN0ZXJzCi0JICogbXVzdCBiZSByZWFkIGJlZm9yZSBhIG5ldyBlcnJvciB1cGRhdGVzIHRoZW0hIFRoZXJlIGlzIG5vIHdheSB0byByZWFkCi0JICogYWxsIGZvdXIgcmVnaXN0ZXJzIGF0b21pY2FsbHkuIFRoZSBiZXN0IHRoYW4gY2FuIGJlIGRvbmUgaXMgdG8gZGV0ZWN0Ci0JICogdGhhdCBhIHJhY2UgaGFzIG9jY3VyZWQgYW5kIHRoZW4gcmVwb3J0IHRoZSBlcnJvciB3aXRob3V0IGFueSBraW5kIG9mCi0JICogcHJlY2lzaW9uLgotCSAqCi0JICogV2hhdCBpcyBzdGlsbCBwb3NpdGl2ZSBpcyB0aGF0IGVycm9ycyBhcmUgc3RpbGwgcmVwb3J0ZWQgYW5kIHRodXMKLQkgKiBwcm9ibGVtcyBjYW4gc3RpbGwgYmUgZGV0ZWN0ZWQgLSBqdXN0IG5vdCBsb2NhbGl6ZWQgYmVjYXVzZSB0aGUKLQkgKiBzeW5kcm9tZSBhbmQgYWRkcmVzcyBhcmUgc3ByZWFkIG91dCBhY3Jvc3MgcmVnaXN0ZXJzLgotCSAqCi0JICogR3JycnJyISEhISEgIEhlcmUncyBob3BpbmcgdGhhdCBBTUQgZml4ZXMgdGhpcyBpbiBzb21lIGZ1dHVyZSBLOCByZXYuCi0JICogVUVzIGFuZCBDRXMgc2hvdWxkIGhhdmUgc2VwYXJhdGUgcmVnaXN0ZXIgc2V0cyB3aXRoIHByb3BlciBvdmVyZmxvdwotCSAqIGJpdHMgdGhhdCBhcmUgdXNlZCEgQXQgdmVyeSBsZWFzdCB0aGUgcHJvYmxlbSBjYW4gYmUgZml4ZWQgYnkKLQkgKiBob25vcmluZyB0aGUgRXJyVmFsaWQgYml0IGluICduYnNoJyBhbmQgbm90IHVwZGF0aW5nIHJlZ2lzdGVycyAtIGp1c3QKLQkgKiBzZXQgdGhlIG92ZXJmbG93IGJpdCAtIHVubGVzcyB0aGUgY3VycmVudCBlcnJvciBpcyBDRSBhbmQgdGhlIG5ldwotCSAqIGVycm9yIGlzIFVFIHdoaWNoIHdvdWxkIGJlIHRoZSBvbmx5IHNpdHVhdGlvbiBmb3Igb3ZlcndyaXRpbmcgdGhlCi0JICogY3VycmVudCB2YWx1ZXMuCi0JICovCi0KLQlyZWdzID0gKmluZm87Ci0KLQkvKiBVc2UgaW5mbyBmcm9tIHRoZSBzZWNvbmQgcmVhZCAtIG1vc3QgY3VycmVudCAqLwotCWlmICh1bmxpa2VseSghYW1kNjRfZ2V0X2Vycm9yX2luZm9fcmVncyhtY2ksIGluZm8pKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBjbGVhciB0aGUgZXJyb3IgYml0cyBpbiBoYXJkd2FyZSAqLwotCXBjaV93cml0ZV9iaXRzMzIocHZ0LT5taXNjX2YzX2N0bCwgSzhfTkJTSCwgMCwgSzhfTkJTSF9WQUxJRF9CSVQpOwotCi0JLyogQ2hlY2sgZm9yIHRoZSBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbiAqLwotCWlmICgocmVncy5uYnNoICE9IGluZm8tPm5ic2gpIHx8Ci0JICAgICAocmVncy5uYnNsICE9IGluZm8tPm5ic2wpIHx8Ci0JICAgICAocmVncy5uYmVhaCAhPSBpbmZvLT5uYmVhaCkgfHwKLQkgICAgIChyZWdzLm5iZWFsICE9IGluZm8tPm5iZWFsKSkgewotCQlhbWQ2NF9tY19wcmludGsobWNpLCBLRVJOX1dBUk5JTkcsCi0JCQkJImhhcmR3YXJlIFNUQVRVUyByZWFkIGFjY2VzcyByYWNlIGNvbmRpdGlvbiAiCi0JCQkJImRldGVjdGVkIVxuIik7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKKwlyZXR1cm4gbWFwX2Vycl9zeW1fdG9fY2hhbm5lbChlcnJfc3ltLCBwdnQtPnN5bl90eXBlKTsKIH0KIAogLyoKQEAgLTIxNzcsNyArMjA4MCw3IEBACiAJICogY2F0YXN0cm9waGljLgogCSAqLwogCWlmIChpbmZvLT5uYnNoICYgSzhfTkJTSF9PVkVSRkxPVykKLQkJZWRhY19tY19oYW5kbGVfY2Vfbm9faW5mbyhtY2ksIEVEQUNfTU9EX1NUUiAiRXJyb3IgT3ZlcmZsb3ciKTsKKwkJZWRhY19tY19oYW5kbGVfY2Vfbm9faW5mbyhtY2ksIEVEQUNfTU9EX1NUUiAiIEVycm9yIE92ZXJmbG93Iik7CiB9CiAKIHZvaWQgYW1kNjRfZGVjb2RlX2J1c19lcnJvcihpbnQgbm9kZV9pZCwgc3RydWN0IGVycl9yZWdzICpyZWdzKQpAQCAtMjE5OSwyMCArMjEwMiw2IEBACiB9CiAKIC8qCi0gKiBUaGUgbWFpbiBwb2xsaW5nICdjaGVjaycgZnVuY3Rpb24sIGNhbGxlZCBGUk9NIHRoZSBlZGFjIGNvcmUgdG8gcGVyZm9ybSB0aGUKLSAqIGVycm9yIGNoZWNraW5nIGFuZCBpZiBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZCwgZXJyb3IgcHJvY2Vzc2luZy4KLSAqLwotc3RhdGljIHZvaWQgYW1kNjRfY2hlY2soc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpKQotewotCXN0cnVjdCBlcnJfcmVncyByZWdzOwotCi0JaWYgKGFtZDY0X2dldF9lcnJvcl9pbmZvKG1jaSwgJnJlZ3MpKSB7Ci0JCXN0cnVjdCBhbWQ2NF9wdnQgKnB2dCA9IG1jaS0+cHZ0X2luZm87Ci0JCWFtZF9kZWNvZGVfbmJfbWNlKHB2dC0+bWNfbm9kZV9pZCwgJnJlZ3MsIDEpOwotCX0KLX0KLQotLyoKICAqIElucHV0OgogICoJMSkgc3RydWN0IGFtZDY0X3B2dCB3aGljaCBjb250YWlucyBwdnQtPmRyYW1fZjJfY3RsIHBvaW50ZXIKICAqCTIpIEFNRCBGYW1pbHkgaW5kZXggdmFsdWUKQEAgLTIyODQsNiArMjE3Myw3IEBACiBzdGF0aWMgdm9pZCBhbWQ2NF9yZWFkX21jX3JlZ2lzdGVycyhzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQpCiB7CiAJdTY0IG1zcl92YWw7CisJdTMyIHRtcDsKIAlpbnQgZHJhbTsKIAogCS8qCkBAIC0yMzQ5LDEwICsyMjM5LDIyIEBACiAJYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+ZHJhbV9mMl9jdGwsIEYxMF9EQ0xSXzAsICZwdnQtPmRjbHIwKTsKIAlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5kcmFtX2YyX2N0bCwgRjEwX0RDSFJfMCwgJnB2dC0+ZGNocjApOwogCi0JaWYgKCFkY3RfZ2FuZ2luZ19lbmFibGVkKHB2dCkgJiYgYm9vdF9jcHVfZGF0YS54ODYgPj0gMHgxMCkgewotCQlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5kcmFtX2YyX2N0bCwgRjEwX0RDTFJfMSwgJnB2dC0+ZGNscjEpOwotCQlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5kcmFtX2YyX2N0bCwgRjEwX0RDSFJfMSwgJnB2dC0+ZGNocjEpOworCWlmIChib290X2NwdV9kYXRhLng4NiA+PSAweDEwKSB7CisJCWlmICghZGN0X2dhbmdpbmdfZW5hYmxlZChwdnQpKSB7CisJCQlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5kcmFtX2YyX2N0bCwgRjEwX0RDTFJfMSwgJnB2dC0+ZGNscjEpOworCQkJYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+ZHJhbV9mMl9jdGwsIEYxMF9EQ0hSXzEsICZwdnQtPmRjaHIxKTsKKwkJfQorCQlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5taXNjX2YzX2N0bCwgRVhUX05CX01DQV9DRkcsICZ0bXApOwogCX0KKworCWlmIChib290X2NwdV9kYXRhLng4NiA9PSAweDEwICYmCisJICAgIGJvb3RfY3B1X2RhdGEueDg2X21vZGVsID4gNyAmJgorCSAgICAvKiBGM3gxODBbRWNjU3ltYm9sU2l6ZV09MSA9PiB4OCBzeW1ib2xzICovCisJICAgIHRtcCAmIEJJVCgyNSkpCisJCXB2dC0+c3luX3R5cGUgPSA4OworCWVsc2UKKwkJcHZ0LT5zeW5fdHlwZSA9IDQ7CisKIAlhbWQ2NF9kdW1wX21pc2NfcmVncyhwdnQpOwogfQogCkBAIC0yNzM5LDkgKzI2NDEsNiBAQAogCW1jaS0+ZGV2X25hbWUJCT0gcGNpX25hbWUocHZ0LT5kcmFtX2YyX2N0bCk7CiAJbWNpLT5jdGxfcGFnZV90b19waHlzCT0gTlVMTDsKIAotCS8qIElNUE9SVEFOVDogU2V0IHRoZSBwb2xsaW5nICdjaGVjaycgZnVuY3Rpb24gaW4gdGhpcyBtb2R1bGUgKi8KLQltY2ktPmVkYWNfY2hlY2sJCT0gYW1kNjRfY2hlY2s7Ci0KIAkvKiBtZW1vcnkgc2NydWJiZXIgaW50ZXJmYWNlICovCiAJbWNpLT5zZXRfc2RyYW1fc2NydWJfcmF0ZSA9IGFtZDY0X3NldF9zY3J1Yl9yYXRlOwogCW1jaS0+Z2V0X3NkcmFtX3NjcnViX3JhdGUgPSBhbWQ2NF9nZXRfc2NydWJfcmF0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmggYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5oCmluZGV4IDBkNGJmNTYuLjYxM2I5MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmgKKysrIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuaApAQCAtMjQ0LDQ0ICsyNDQsMTcgQEAKIAogCiAjZGVmaW5lIEYxMF9EQ1RMX1NFTF9MT1cJCTB4MTEwCi0KLSNkZWZpbmUgZGN0X3NlbF9iYXNlYWRkcihwdnQpICAgIFwKLQkoKHB2dC0+ZHJhbV9jdGxfc2VsZWN0X2xvdykgJiAweEZGRkZGODAwKQotCi0jZGVmaW5lIGRjdF9zZWxfaW50ZXJsZWF2ZV9hZGRyKHB2dCkgICAgXAotCSgoKHB2dC0+ZHJhbV9jdGxfc2VsZWN0X2xvdykgPj4gNikgJiAweDMpCi0KLWVudW0gewotCUYxMF9EQ1RMX1NFTF9MT1dfRGN0U2VsSGlSbmdFbgk9IEJJVCgwKSwKLQlGMTBfRENUTF9TRUxfTE9XX0RjdFNlbEludEx2RW4JPSBCSVQoMiksCi0JRjEwX0RDVExfU0VMX0xPV19EY3RHYW5nRW4JPSBCSVQoNCksCi0JRjEwX0RDVExfU0VMX0xPV19EY3REYXRJbnRMdgk9IEJJVCg1KSwKLQlGMTBfRENUTF9TRUxfTE9XX0RyYW1FbmFibGUJPSBCSVQoOCksCi0JRjEwX0RDVExfU0VMX0xPV19NZW1DbGVhcmVkCT0gQklUKDEwKSwKLX07Ci0KLSNkZWZpbmUgICAgZGN0X2hpZ2hfcmFuZ2VfZW5hYmxlZChwdnQpICAgIFwKLQkocHZ0LT5kcmFtX2N0bF9zZWxlY3RfbG93ICYgRjEwX0RDVExfU0VMX0xPV19EY3RTZWxIaVJuZ0VuKQotCi0jZGVmaW5lIGRjdF9pbnRlcmxlYXZlX2VuYWJsZWQocHZ0KQkgICBcCi0JKHB2dC0+ZHJhbV9jdGxfc2VsZWN0X2xvdyAmIEYxMF9EQ1RMX1NFTF9MT1dfRGN0U2VsSW50THZFbikKLQotI2RlZmluZSBkY3RfZ2FuZ2luZ19lbmFibGVkKHB2dCkgICAgICAgIFwKLQkocHZ0LT5kcmFtX2N0bF9zZWxlY3RfbG93ICYgRjEwX0RDVExfU0VMX0xPV19EY3RHYW5nRW4pCi0KLSNkZWZpbmUgZGN0X2RhdGFfaW50bHZfZW5hYmxlZChwdnQpICAgIFwKLQkocHZ0LT5kcmFtX2N0bF9zZWxlY3RfbG93ICYgRjEwX0RDVExfU0VMX0xPV19EY3REYXRJbnRMdikKLQotI2RlZmluZSBkY3RfZHJhbV9lbmFibGVkKHB2dCkgICAgXAotCShwdnQtPmRyYW1fY3RsX3NlbGVjdF9sb3cgJiBGMTBfRENUTF9TRUxfTE9XX0RyYW1FbmFibGUpCi0KLSNkZWZpbmUgZGN0X21lbW9yeV9jbGVhcmVkKHB2dCkgICAgXAotCShwdnQtPmRyYW1fY3RsX3NlbGVjdF9sb3cgJiBGMTBfRENUTF9TRUxfTE9XX01lbUNsZWFyZWQpCi0KKyNkZWZpbmUgZGN0X3NlbF9iYXNlYWRkcihwdnQpCQkoKHB2dC0+ZHJhbV9jdGxfc2VsZWN0X2xvdykgJiAweEZGRkZGODAwKQorI2RlZmluZSBkY3Rfc2VsX2ludGVybGVhdmVfYWRkcihwdnQpCSgoKHB2dC0+ZHJhbV9jdGxfc2VsZWN0X2xvdykgPj4gNikgJiAweDMpCisjZGVmaW5lIGRjdF9oaWdoX3JhbmdlX2VuYWJsZWQocHZ0KQkocHZ0LT5kcmFtX2N0bF9zZWxlY3RfbG93ICYgQklUKDApKQorI2RlZmluZSBkY3RfaW50ZXJsZWF2ZV9lbmFibGVkKHB2dCkJKHB2dC0+ZHJhbV9jdGxfc2VsZWN0X2xvdyAmIEJJVCgyKSkKKyNkZWZpbmUgZGN0X2dhbmdpbmdfZW5hYmxlZChwdnQpCShwdnQtPmRyYW1fY3RsX3NlbGVjdF9sb3cgJiBCSVQoNCkpCisjZGVmaW5lIGRjdF9kYXRhX2ludGx2X2VuYWJsZWQocHZ0KQkocHZ0LT5kcmFtX2N0bF9zZWxlY3RfbG93ICYgQklUKDUpKQorI2RlZmluZSBkY3RfZHJhbV9lbmFibGVkKHB2dCkJCShwdnQtPmRyYW1fY3RsX3NlbGVjdF9sb3cgJiBCSVQoOCkpCisjZGVmaW5lIGRjdF9tZW1vcnlfY2xlYXJlZChwdnQpCQkocHZ0LT5kcmFtX2N0bF9zZWxlY3RfbG93ICYgQklUKDEwKSkKIAogI2RlZmluZSBGMTBfRENUTF9TRUxfSElHSAkJMHgxMTQKIAotCiAvKgogICogRnVuY3Rpb24gMyAtIE1pc2MgQ29udHJvbAogICovCkBAIC0zODIsNiArMzU1LDggQEAKICNkZWZpbmUgSzhfTkJDQVBfU0VDREVECQkJQklUKDMpCiAjZGVmaW5lIEs4X05CQ0FQX0RDVF9EVUFMCQlCSVQoMCkKIAorI2RlZmluZSBFWFRfTkJfTUNBX0NGRwkJCTB4MTgwCisKIC8qIE1TUnMgKi8KICNkZWZpbmUgSzhfTVNSX01DR0NUTF9OQkUJCUJJVCg0KQogCkBAIC00NzEsNiArNDQ2LDkgQEAKIAl1MzIgZHJhbV9jdGxfc2VsZWN0X2hpZ2g7CS8qIERSQU0gQ29udHJvbGxlciBTZWxlY3QgSGlnaCBSZWcgKi8KIAl1MzIgb25saW5lX3NwYXJlOyAgICAgICAgICAgICAgIC8qIE9uLUxpbmUgc3BhcmUgUmVnICovCiAKKwkvKiB4NCBvciB4OCBzeW5kcm9tZXMgaW4gdXNlICovCisJdTggc3luX3R5cGU7CisKIAkvKiB0ZW1wIHN0b3JhZ2UgZm9yIHdoZW4gaW5wdXQgaXMgcmVjZWl2ZWQgZnJvbSBzeXNmcyAqLwogCXN0cnVjdCBlcnJfcmVncyBjdGxfZXJyb3JfaW5mbzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2U3NTJ4X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9lNzUyeF9lZGFjLmMKaW5kZXggYWUzZjgwYy4uMDczZjVhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2U3NTJ4X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvZTc1MnhfZWRhYy5jCkBAIC05NTgsNyArOTU4LDcgQEAKIH0KIAogLyogUHJvZ3JhbSBieXRlL3NlYyBiYW5kd2lkdGggc2NydWIgcmF0ZSB0byBoYXJkd2FyZSAqLwotc3RhdGljIGludCBzZXRfc2RyYW1fc2NydWJfcmF0ZShzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksIHUzMiAqbmV3X2J3KQorc3RhdGljIGludCBzZXRfc2RyYW1fc2NydWJfcmF0ZShzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksIHUzMiBuZXdfYncpCiB7CiAJY29uc3Qgc3RydWN0IHNjcnVicmF0ZSAqc2NydWJyYXRlczsKIAlzdHJ1Y3QgZTc1MnhfcHZ0ICpwdnQgPSAoc3RydWN0IGU3NTJ4X3B2dCAqKSBtY2ktPnB2dF9pbmZvOwpAQCAtOTc1LDcgKzk3NSw3IEBACiAJICogZGVzaXJlZCByYXRlIGFuZCBwcm9ncmFtIHRoZSBjb29yZXNwb25kaW5nIHJlZ2lzdGVyIHZhbHVlLgogCSAqLwogCWZvciAoaSA9IDA7IHNjcnVicmF0ZXNbaV0uYmFuZHdpZHRoICE9IFNEUkFURV9FT1Q7IGkrKykKLQkJaWYgKHNjcnVicmF0ZXNbaV0uYmFuZHdpZHRoID49ICpuZXdfYncpCisJCWlmIChzY3J1YnJhdGVzW2ldLmJhbmR3aWR0aCA+PSBuZXdfYncpCiAJCQlicmVhazsKIAogCWlmIChzY3J1YnJhdGVzW2ldLmJhbmR3aWR0aCA9PSBTRFJBVEVfRU9UKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2VkYWNfY29yZS5oIGIvZHJpdmVycy9lZGFjL2VkYWNfY29yZS5oCmluZGV4IGVmY2E5MzQuLmNlNzE0NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9lZGFjX2NvcmUuaAorKysgYi9kcml2ZXJzL2VkYWMvZWRhY19jb3JlLmgKQEAgLTQ5LDIxICs0OSwxNSBAQAogI2RlZmluZSBlZGFjX3ByaW50ayhsZXZlbCwgcHJlZml4LCBmbXQsIGFyZy4uLikgXAogCXByaW50ayhsZXZlbCAiRURBQyAiIHByZWZpeCAiOiAiIGZtdCwgIyNhcmcpCiAKLSNkZWZpbmUgZWRhY19wcmludGtfdmVyYm9zZShsZXZlbCwgcHJlZml4LCBmbXQsIGFyZy4uLikgXAotCXByaW50ayhsZXZlbCAiRURBQyAiIHByZWZpeCAiOiAiICJpbiAlcywgbGluZSBhdCAlZDogIiBmbXQsCVwKLQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCAjI2FyZykKLQogI2RlZmluZSBlZGFjX21jX3ByaW50ayhtY2ksIGxldmVsLCBmbXQsIGFyZy4uLikgXAogCXByaW50ayhsZXZlbCAiRURBQyBNQyVkOiAiIGZtdCwgbWNpLT5tY19pZHgsICMjYXJnKQogCiAjZGVmaW5lIGVkYWNfbWNfY2hpcHNldF9wcmludGsobWNpLCBsZXZlbCwgcHJlZml4LCBmbXQsIGFyZy4uLikgXAogCXByaW50ayhsZXZlbCAiRURBQyAiIHByZWZpeCAiIE1DJWQ6ICIgZm10LCBtY2ktPm1jX2lkeCwgIyNhcmcpCiAKLS8qIGVkYWNfZGV2aWNlIHByaW50ayAqLwogI2RlZmluZSBlZGFjX2RldmljZV9wcmludGsoY3RsLCBsZXZlbCwgZm10LCBhcmcuLi4pIFwKIAlwcmludGsobGV2ZWwgIkVEQUMgREVWSUNFJWQ6ICIgZm10LCBjdGwtPmRldl9pZHgsICMjYXJnKQogCi0vKiBlZGFjX3BjaSBwcmludGsgKi8KICNkZWZpbmUgZWRhY19wY2lfcHJpbnRrKGN0bCwgbGV2ZWwsIGZtdCwgYXJnLi4uKSBcCiAJcHJpbnRrKGxldmVsICJFREFDIFBDSSVkOiAiIGZtdCwgY3RsLT5wY2lfaWR4LCAjI2FyZykKIApAQCAtNzYsMjEgKzcwLDEyIEBACiBleHRlcm4gaW50IGVkYWNfZGVidWdfbGV2ZWw7CiBleHRlcm4gY29uc3QgY2hhciAqZWRhY19tZW1fdHlwZXNbXTsKIAotI2lmbmRlZiBDT05GSUdfRURBQ19ERUJVR19WRVJCT1NFCiAjZGVmaW5lIGVkYWNfZGVidWdfcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkJaWYgKGxldmVsIDw9IGVkYWNfZGVidWdfbGV2ZWwpICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJCQllZGFjX3ByaW50ayhLRVJOX0RFQlVHLCBFREFDX0RFQlVHLAkJXAogCQkJCSAgICAiJXM6ICIgZm10LCBfX2Z1bmNfXywgIyNhcmcpOwlcCiAJfSB3aGlsZSAoMCkKLSNlbHNlICAvKiBDT05GSUdfRURBQ19ERUJVR19WRVJCT1NFICovCi0jZGVmaW5lIGVkYWNfZGVidWdfcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlpZiAobGV2ZWwgPD0gZWRhY19kZWJ1Z19sZXZlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQllZGFjX3ByaW50a192ZXJib3NlKEtFUk5fREVCVUcsIEVEQUNfREVCVUcsIGZtdCwgXAotCQkJCQkgICAgIyNhcmcpOwkJCVwKLQl9IHdoaWxlICgwKQotI2VuZGlmCiAKICNkZWZpbmUgZGVidWdmMCggLi4uICkgZWRhY19kZWJ1Z19wcmludGsoMCwgX19WQV9BUkdTX18gKQogI2RlZmluZSBkZWJ1Z2YxKCAuLi4gKSBlZGFjX2RlYnVnX3ByaW50aygxLCBfX1ZBX0FSR1NfXyApCkBAIC0zOTMsNyArMzc4LDcgQEAKIAkgICBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBhbmQgY29uZmlndXJlcyB3aGF0ZXZlciBlbHNlIG5lZWRzCiAJICAgdG8gYmUgY29uZmlndXJlZC4KIAkgKi8KLQlpbnQgKCpzZXRfc2RyYW1fc2NydWJfcmF0ZSkgKHN0cnVjdCBtZW1fY3RsX2luZm8gKiBtY2ksIHUzMiAqIGJ3KTsKKwlpbnQgKCpzZXRfc2RyYW1fc2NydWJfcmF0ZSkgKHN0cnVjdCBtZW1fY3RsX2luZm8gKiBtY2ksIHUzMiBidyk7CiAKIAkvKiBHZXQgdGhlIGN1cnJlbnQgc2RyYW0gbWVtb3J5IHNjcnViIHJhdGUgZnJvbSB0aGUgaW50ZXJuYWwKIAkgICByZXByZXNlbnRhdGlvbiBhbmQgY29udmVydHMgaXQgdG8gdGhlIGNsb3Nlc3QgbWF0Y2hpbmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9lZGFjX21jX3N5c2ZzLmMgYi9kcml2ZXJzL2VkYWMvZWRhY19tY19zeXNmcy5jCmluZGV4IGMyMDBjMmYuLjhhYWQ5NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9lZGFjX21jX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9lZGFjL2VkYWNfbWNfc3lzZnMuYwpAQCAtMTI0LDE5ICsxMjQsNiBAQAogCVtFREFDX1MxNkVDRDE2RURdID0gIlMxNkVDRDE2RUQiCiB9OwogCi0KLQotc3RhdGljIHNzaXplX3QgbWVtY3RybF9pbnRfc3RvcmUodm9pZCAqcHRyLCBjb25zdCBjaGFyICpidWZmZXIsIHNpemVfdCBjb3VudCkKLXsKLQlpbnQgKnZhbHVlID0gKGludCAqKXB0cjsKLQotCWlmIChpc2RpZ2l0KCpidWZmZXIpKQotCQkqdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWZmZXIsIE5VTEwsIDApOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi0KIC8qIEVEQUMgc3lzZnMgQ1NST1cgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBtZXRob2RzCiAgKi8KIApAQCAtNDUwLDUzICs0MzcsNTQgQEAKIAogLyogbWVtb3J5IHNjcnViYmluZyAqLwogc3RhdGljIHNzaXplX3QgbWNpX3NkcmFtX3NjcnViX3JhdGVfc3RvcmUoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAotCQkJCQljb25zdCBjaGFyICpkYXRhLCBzaXplX3QgY291bnQpCisJCQkJCSAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGNvdW50KQogewotCXUzMiBiYW5kd2lkdGggPSAtMTsKKwl1bnNpZ25lZCBsb25nIGJhbmR3aWR0aCA9IDA7CisJaW50IGVycjsKIAotCWlmIChtY2ktPnNldF9zZHJhbV9zY3J1Yl9yYXRlKSB7Ci0KLQkJbWVtY3RybF9pbnRfc3RvcmUoJmJhbmR3aWR0aCwgZGF0YSwgY291bnQpOwotCi0JCWlmICghKCptY2ktPnNldF9zZHJhbV9zY3J1Yl9yYXRlKSAobWNpLCAmYmFuZHdpZHRoKSkgewotCQkJZWRhY19wcmludGsoS0VSTl9ERUJVRywgRURBQ19NQywKLQkJCQkiU2NydWIgcmF0ZSBzZXQgc3VjY2Vzc2Z1bGx5LCBhcHBsaWVkOiAlZFxuIiwKLQkJCQliYW5kd2lkdGgpOwotCQl9IGVsc2UgewotCQkJLyogRklYTUU6IGVycm9yIGNvZGVzIG1heWJlPyAqLwotCQkJZWRhY19wcmludGsoS0VSTl9ERUJVRywgRURBQ19NQywKLQkJCQkiU2NydWIgcmF0ZSBzZXQgRkFJTEVELCBjb3VsZCBub3QgYXBwbHk6ICVkXG4iLAotCQkJCWJhbmR3aWR0aCk7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBGSVhNRTogcHJvZHVjZSAibm90IGltcGxlbWVudGVkIiBFUlJPUiBmb3IgdXNlci1zaWRlLiAqLworCWlmICghbWNpLT5zZXRfc2RyYW1fc2NydWJfcmF0ZSkgewogCQllZGFjX3ByaW50ayhLRVJOX1dBUk5JTkcsIEVEQUNfTUMsCi0JCQkiTWVtb3J5IHNjcnViYmluZyAnc2V0J2NvbnRyb2wgaXMgbm90IGltcGxlbWVudGVkIVxuIik7CisJCQkgICAgIk1lbW9yeSBzY3J1YiByYXRlIHNldHRpbmcgbm90IGltcGxlbWVudGVkIVxuIik7CisJCXJldHVybiAtRUlOVkFMOwogCX0KLQlyZXR1cm4gY291bnQ7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoZGF0YSwgMTAsICZiYW5kd2lkdGgpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcnIgPSBtY2ktPnNldF9zZHJhbV9zY3J1Yl9yYXRlKG1jaSwgKHUzMiliYW5kd2lkdGgpOworCWlmIChlcnIpIHsKKwkJZWRhY19wcmludGsoS0VSTl9ERUJVRywgRURBQ19NQywKKwkJCSAgICAiRmFpbGVkIHNldHRpbmcgc2NydWIgcmF0ZSB0byAlbHVcbiIsIGJhbmR3aWR0aCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwllbHNlIHsKKwkJZWRhY19wcmludGsoS0VSTl9ERUJVRywgRURBQ19NQywKKwkJCSAgICAiU2NydWIgcmF0ZSBzZXQgdG86ICVsdVxuIiwgYmFuZHdpZHRoKTsKKwkJcmV0dXJuIGNvdW50OworCX0KIH0KIAogc3RhdGljIHNzaXplX3QgbWNpX3NkcmFtX3NjcnViX3JhdGVfc2hvdyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksIGNoYXIgKmRhdGEpCiB7Ci0JdTMyIGJhbmR3aWR0aCA9IC0xOworCXUzMiBiYW5kd2lkdGggPSAwOworCWludCBlcnI7CiAKLQlpZiAobWNpLT5nZXRfc2RyYW1fc2NydWJfcmF0ZSkgewotCQlpZiAoISgqbWNpLT5nZXRfc2RyYW1fc2NydWJfcmF0ZSkgKG1jaSwgJmJhbmR3aWR0aCkpIHsKLQkJCWVkYWNfcHJpbnRrKEtFUk5fREVCVUcsIEVEQUNfTUMsCi0JCQkJIlNjcnViIHJhdGUgc3VjY2Vzc2Z1bGx5LCBmZXRjaGVkOiAlZFxuIiwKLQkJCQliYW5kd2lkdGgpOwotCQl9IGVsc2UgewotCQkJLyogRklYTUU6IGVycm9yIGNvZGVzIG1heWJlPyAqLwotCQkJZWRhY19wcmludGsoS0VSTl9ERUJVRywgRURBQ19NQywKLQkJCQkiU2NydWIgcmF0ZSBmZXRjaCBGQUlMRUQsIGdvdDogJWRcbiIsCi0JCQkJYmFuZHdpZHRoKTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIEZJWE1FOiBwcm9kdWNlICJub3QgaW1wbGVtZW50ZWQiIEVSUk9SIGZvciB1c2VyLXNpZGUuICAqLworCWlmICghbWNpLT5nZXRfc2RyYW1fc2NydWJfcmF0ZSkgewogCQllZGFjX3ByaW50ayhLRVJOX1dBUk5JTkcsIEVEQUNfTUMsCi0JCQkiTWVtb3J5IHNjcnViYmluZyAnZ2V0JyBjb250cm9sIGlzIG5vdCBpbXBsZW1lbnRlZFxuIik7CisJCQkgICAgIk1lbW9yeSBzY3J1YiByYXRlIHJlYWRpbmcgbm90IGltcGxlbWVudGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXJldHVybiBzcHJpbnRmKGRhdGEsICIlZFxuIiwgYmFuZHdpZHRoKTsKKworCWVyciA9IG1jaS0+Z2V0X3NkcmFtX3NjcnViX3JhdGUobWNpLCAmYmFuZHdpZHRoKTsKKwlpZiAoZXJyKSB7CisJCWVkYWNfcHJpbnRrKEtFUk5fREVCVUcsIEVEQUNfTUMsICJFcnJvciByZWFkaW5nIHNjcnViIHJhdGVcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKwllbHNlIHsKKwkJZWRhY19wcmludGsoS0VSTl9ERUJVRywgRURBQ19NQywKKwkJCSAgICAiUmVhZCBzY3J1YiByYXRlOiAlZFxuIiwgYmFuZHdpZHRoKTsKKwkJcmV0dXJuIHNwcmludGYoZGF0YSwgIiVkXG4iLCBiYW5kd2lkdGgpOworCX0KIH0KIAogLyogZGVmYXVsdCBhdHRyaWJ1dGUgZmlsZXMgZm9yIHRoZSBNQ0kgb2JqZWN0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19tY2VfYW1kLmMgYi9kcml2ZXJzL2VkYWMvZWRhY19tY2VfYW1kLmMKaW5kZXggOTdlNjRiYy4uYmFlOTM1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2VkYWNfbWNlX2FtZC5jCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX21jZV9hbWQuYwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJdTMyIGVjICA9IG1jMF9zdGF0dXMgJiAweGZmZmY7CiAJdTMyIHhlYyA9IChtYzBfc3RhdHVzID4+IDE2KSAmIDB4ZjsKIAotCXByX2VtZXJnKCIgRGF0YSBDYWNoZSBFcnJvciIpOworCXByX2VtZXJnKCJEYXRhIENhY2hlIEVycm9yIik7CiAKIAlpZiAoeGVjID09IDEgJiYgVExCX0VSUk9SKGVjKSkKIAkJcHJfY29udCgiOiAlcyBUTEIgbXVsdGltYXRjaC5cbiIsIExMX01TRyhlYykpOwpAQCAtMTc2LDcgKzE3Niw3IEBACiAJdTMyIGVjICA9IG1jMV9zdGF0dXMgJiAweGZmZmY7CiAJdTMyIHhlYyA9IChtYzFfc3RhdHVzID4+IDE2KSAmIDB4ZjsKIAotCXByX2VtZXJnKCIgSW5zdHJ1Y3Rpb24gQ2FjaGUgRXJyb3IiKTsKKwlwcl9lbWVyZygiSW5zdHJ1Y3Rpb24gQ2FjaGUgRXJyb3IiKTsKIAogCWlmICh4ZWMgPT0gMSAmJiBUTEJfRVJST1IoZWMpKQogCQlwcl9jb250KCI6ICVzIFRMQiBtdWx0aW1hdGNoLlxuIiwgTExfTVNHKGVjKSk7CkBAIC0yMzMsNyArMjMzLDcgQEAKIAl1MzIgZWMgPSBtYzJfc3RhdHVzICYgMHhmZmZmOwogCXUzMiB4ZWMgPSAobWMyX3N0YXR1cyA+PiAxNikgJiAweGY7CiAKLQlwcl9lbWVyZygiIEJ1cyBVbml0IEVycm9yIik7CisJcHJfZW1lcmcoIkJ1cyBVbml0IEVycm9yIik7CiAKIAlpZiAoeGVjID09IDB4MSkKIAkJcHJfY29udCgiIGluIHRoZSB3cml0ZSBkYXRhIGJ1ZmZlcnMuXG4iKTsKQEAgLTI3NSw3ICsyNzUsNyBAQAogCXUzMiBlYyAgPSBtYzNfc3RhdHVzICYgMHhmZmZmOwogCXUzMiB4ZWMgPSAobWMzX3N0YXR1cyA+PiAxNikgJiAweGY7CiAKLQlwcl9lbWVyZygiIExvYWQgU3RvcmUgRXJyb3IiKTsKKwlwcl9lbWVyZygiTG9hZCBTdG9yZSBFcnJvciIpOwogCiAJaWYgKHhlYyA9PSAweDApIHsKIAkJdTggcnJyciA9IChlYyA+PiA0KSAmIDB4ZjsKQEAgLTMwNCw3ICszMDQsNyBAQAogCWlmIChUTEJfRVJST1IoZWMpICYmICFyZXBvcnRfZ2FydF9lcnJvcnMpCiAJCXJldHVybjsKIAotCXByX2VtZXJnKCIgTm9ydGhicmlkZ2UgRXJyb3IsIG5vZGUgJWQiLCBub2RlX2lkKTsKKwlwcl9lbWVyZygiTm9ydGhicmlkZ2UgRXJyb3IsIG5vZGUgJWQiLCBub2RlX2lkKTsKIAogCS8qCiAJICogRjEwaCwgcmV2RCBjYW4gZGlzYWJsZSBFcnJDcHVbMzowXSBzbyBjaGVjayB0aGF0IGZpcnN0IGFuZCBhbHNvIHRoZQpAQCAtMzQyLDEzICszNDIsMTMgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhbWRfZGVjb2RlX2Vycl9jb2RlKHVuc2lnbmVkIGludCBlYykKIHsKIAlpZiAoVExCX0VSUk9SKGVjKSkgewotCQlwcl9lbWVyZygiIFRyYW5zYWN0aW9uOiAlcywgQ2FjaGUgTGV2ZWwgJXNcbiIsCisJCXByX2VtZXJnKCJUcmFuc2FjdGlvbjogJXMsIENhY2hlIExldmVsICVzXG4iLAogCQkJIFRUX01TRyhlYyksIExMX01TRyhlYykpOwogCX0gZWxzZSBpZiAoTUVNX0VSUk9SKGVjKSkgewotCQlwcl9lbWVyZygiIFRyYW5zYWN0aW9uOiAlcywgVHlwZTogJXMsIENhY2hlIExldmVsOiAlcyIsCisJCXByX2VtZXJnKCJUcmFuc2FjdGlvbjogJXMsIFR5cGU6ICVzLCBDYWNoZSBMZXZlbDogJXMiLAogCQkJIFJSUlJfTVNHKGVjKSwgVFRfTVNHKGVjKSwgTExfTVNHKGVjKSk7CiAJfSBlbHNlIGlmIChCVVNfRVJST1IoZWMpKSB7Ci0JCXByX2VtZXJnKCIgVHJhbnNhY3Rpb24gdHlwZTogJXMoJXMpLCAlcywgQ2FjaGUgTGV2ZWw6ICVzLCAiCisJCXByX2VtZXJnKCJUcmFuc2FjdGlvbiB0eXBlOiAlcyglcyksICVzLCBDYWNoZSBMZXZlbDogJXMsICIKIAkJCSAiUGFydGljaXBhdGluZyBQcm9jZXNzb3I6ICVzXG4iLAogCQkJICBSUlJSX01TRyhlYyksIElJX01TRyhlYyksIFRPX01TRyhlYyksIExMX01TRyhlYyksCiAJCQkgIFBQX01TRyhlYykpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2k1MTAwX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9pNTEwMF9lZGFjLmMKaW5kZXggZWU5NzUzYy4uZjQ1OWE2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2k1MTAwX2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvaTUxMDBfZWRhYy5jCkBAIC01ODksMTQgKzU4OSwxMyBAQAogLyoKICAqIFRoZSBiYW5kd2lkdGggaXMgYmFzZWQgb24gZXhwZXJpbWVudGF0aW9uLCBmZWVsIGZyZWUgdG8gcmVmaW5lIGl0LgogICovCi1zdGF0aWMgaW50IGk1MTAwX3NldF9zY3J1Yl9yYXRlKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKLQkJCQkgICAgICAgdTMyICpiYW5kd2lkdGgpCitzdGF0aWMgaW50IGk1MTAwX3NldF9zY3J1Yl9yYXRlKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwgdTMyIGJhbmR3aWR0aCkKIHsKIAlzdHJ1Y3QgaTUxMDBfcHJpdiAqcHJpdiA9IG1jaS0+cHZ0X2luZm87CiAJdTMyIGR3OwogCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHByaXYtPm1jLCBJNTEwMF9NQywgJmR3KTsKLQlpZiAoKmJhbmR3aWR0aCkgeworCWlmIChiYW5kd2lkdGgpIHsKIAkJcHJpdi0+c2NydWJfZW5hYmxlID0gMTsKIAkJZHcgfD0gSTUxMDBfTUNfU0NSQkVOX01BU0s7CiAJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmKHByaXYtPmk1MTAwX3NjcnViYmluZyksCkBAIC02MTAsNyArNjA5LDcgQEAKIAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwcml2LT5tYywgSTUxMDBfTUMsICZkdyk7CiAKLQkqYmFuZHdpZHRoID0gNTkwMDAwMCAqIGk1MTAwX21jX3NjcmJlbihkdyk7CisJYmFuZHdpZHRoID0gNTkwMDAwMCAqIGk1MTAwX21jX3NjcmJlbihkdyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9pN2NvcmVfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2k3Y29yZV9lZGFjLmMKaW5kZXggY2M5MzU3ZC4uZTAxODdkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2k3Y29yZV9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2k3Y29yZV9lZGFjLmMKQEAgLTEzMDAsNyArMTMwMCw3IEBACiAJCWlmIChkZXZubyA9PSAwKQogCQkJcmV0dXJuIC1FTk9ERVY7CiAKLQkJaTdjb3JlX3ByaW50ayhLRVJOX0VSUiwKKwkJaTdjb3JlX3ByaW50ayhLRVJOX0lORk8sCiAJCQkiRGV2aWNlIG5vdCBmb3VuZDogZGV2ICUwMnguJWQgUENJIElEICUwNHg6JTA0eFxuIiwKIAkJCWRldl9kZXNjci0+ZGV2LCBkZXZfZGVzY3ItPmZ1bmMsCiAJCQlQQ0lfVkVORE9SX0lEX0lOVEVMLCBkZXZfZGVzY3ItPmRldl9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMKaW5kZXggNTJjYTA5Yi4uMTA1MjM0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYwpAQCAtMzM2LDYgKzMzNiw3IEBACiAJfSwKIAl7fSwKIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtcGM4NXh4X3BjaV9lcnJfb2ZfbWF0Y2gpOwogCiBzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBtcGM4NXh4X3BjaV9lcnJfZHJpdmVyID0gewogCS5wcm9iZSA9IG1wYzg1eHhfcGNpX2Vycl9wcm9iZSwKQEAgLTY1MCw2ICs2NTEsNyBAQAogCXsgLmNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLWwyLWNhY2hlLWNvbnRyb2xsZXIiLCB9LAogCXt9LAogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG1wYzg1eHhfbDJfZXJyX29mX21hdGNoKTsKIAogc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgbXBjODV4eF9sMl9lcnJfZHJpdmVyID0gewogCS5wcm9iZSA9IG1wYzg1eHhfbDJfZXJyX3Byb2JlLApAQCAtMTEyMCwxMSArMTEyMiwxMyBAQAogCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NTUtbWVtb3J5LWNvbnRyb2xsZXIiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjAtbWVtb3J5LWNvbnRyb2xsZXIiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjgtbWVtb3J5LWNvbnRyb2xsZXIiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjktbWVtb3J5LWNvbnRyb2xsZXIiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItbWVtb3J5LWNvbnRyb2xsZXIiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktbWVtb3J5LWNvbnRyb2xsZXIiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLW1lbW9yeS1jb250cm9sbGVyIiwgfSwKIAl7fSwKIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtcGM4NXh4X21jX2Vycl9vZl9tYXRjaCk7CiAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIG1wYzg1eHhfbWNfZXJyX2RyaXZlciA9IHsKIAkucHJvYmUgPSBtcGM4NXh4X21jX2Vycl9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvS2NvbmZpZyBiL2RyaXZlcnMvZmlybXdhcmUvS2NvbmZpZwppbmRleCAxYjAzYmExLi5hNmM2NzBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL0tjb25maWcKKysrIGIvZHJpdmVycy9maXJtd2FyZS9LY29uZmlnCkBAIC0xMjIsOCArMTIyLDE3IEBACiAJICBpcyBuZWNlc3NhcnkgZm9yIGlTQ1NJIEJvb3QgRmlybXdhcmUgVGFibGUgQXR0cmlidXRlcyBtb2R1bGUgdG8gd29yawogCSAgcHJvcGVybHkuCiAKK2NvbmZpZyBJU0NTSV9CT09UX1NZU0ZTCisJdHJpc3RhdGUgImlTQ1NJIEJvb3QgU3lzZnMgSW50ZXJmYWNlIgorCWRlZmF1bHQJbgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgZXhwb3NpbmcgaVNDU0kgYm9vdCBpbmZvcm1hdGlvbgorCSAgdmlhIHN5c2ZzIHRvIHVzZXJzcGFjZS4gSWYgeW91IHdpc2ggdG8gZXhwb3J0IHRoaXMgaW5mb3JtYXRpb24sCisJICBzYXkgWS4gT3RoZXJ3aXNlLCBzYXkgTi4KKwogY29uZmlnIElTQ1NJX0lCRlQKIAl0cmlzdGF0ZSAiaVNDU0kgQm9vdCBGaXJtd2FyZSBUYWJsZSBBdHRyaWJ1dGVzIG1vZHVsZSIKKwlzZWxlY3QgSVNDU0lfQk9PVF9TWVNGUwogCWRlcGVuZHMgb24gSVNDU0lfSUJGVF9GSU5ECiAJZGVmYXVsdAluCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9NYWtlZmlsZSBiL2RyaXZlcnMvZmlybXdhcmUvTWFrZWZpbGUKaW5kZXggMWMzYzE3My4uNWZlN2UxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2Zpcm13YXJlL01ha2VmaWxlCkBAIC0xMCw0ICsxMCw1IEBACiBvYmotJChDT05GSUdfRE1JSUQpCQkrPSBkbWktaWQubwogb2JqLSQoQ09ORklHX0lTQ1NJX0lCRlRfRklORCkJKz0gaXNjc2lfaWJmdF9maW5kLm8KIG9iai0kKENPTkZJR19JU0NTSV9JQkZUKQkrPSBpc2NzaV9pYmZ0Lm8KK29iai0kKENPTkZJR19JU0NTSV9CT09UX1NZU0ZTKQkrPSBpc2NzaV9ib290X3N5c2ZzLm8KIG9iai0kKENPTkZJR19GSVJNV0FSRV9NRU1NQVApCSs9IG1lbW1hcC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2RjZGJhcy5jIGIvZHJpdmVycy9maXJtd2FyZS9kY2RiYXMuYwppbmRleCBhYTliYzllLi42OWFkNTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2RjZGJhcy5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZGNkYmFzLmMKQEAgLTYzNCw5ICs2MzQsNiBAQAogCSAqIGJlZm9yZSBwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcgogCSAqLwogCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZkY2RiYXNfcmVib290X25iKTsKLQlzbWlfZGF0YV9idWZfZnJlZSgpOwotCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRjZGJhc19wZGV2KTsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZGNkYmFzX2RyaXZlcik7CiAKIAkvKgogCSAqIFdlIGhhdmUgdG8gZnJlZSB0aGUgYnVmZmVyIGhlcmUgaW5zdGVhZCBvZiBkY2RiYXNfcmVtb3ZlCkBAIC02NDUsNiArNjQyLDggQEAKIAkgKiByZWxlYXNlZC4KIAkgKi8KIAlzbWlfZGF0YV9idWZfZnJlZSgpOworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRjZGJhc19wZGV2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZGNkYmFzX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGRjZGJhc19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZG1pLWlkLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2RtaS1pZC5jCmluZGV4IGE3NzdhMzUuLjk0YTU4YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZG1pLWlkLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9kbWktaWQuYwpAQCAtMjI5LDEwICsyMjksMTIgQEAKIAogCXJldCA9IGRldmljZV9yZWdpc3RlcihkbWlfZGV2KTsKIAlpZiAocmV0KQotCQlnb3RvIGZhaWxfY2xhc3NfdW5yZWdpc3RlcjsKKwkJZ290byBmYWlsX2ZyZWVfZG1pX2RldjsKIAogCXJldHVybiAwOwogCitmYWlsX2ZyZWVfZG1pX2RldjoKKwlrZnJlZShkbWlfZGV2KTsKIGZhaWxfY2xhc3NfdW5yZWdpc3RlcjoKIAogCWNsYXNzX3VucmVnaXN0ZXIoJmRtaV9jbGFzcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMKaW5kZXggZDQ2NDY3Mi4uYjNkMjJkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYwpAQCAtMjc3LDYgKzI3NywyOSBAQAogCWxpc3RfYWRkX3RhaWwoJmRldi0+bGlzdCwgJmRtaV9kZXZpY2VzKTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IGRtaV9zYXZlX2Rldl9vbmJvYXJkKGludCBpbnN0YW5jZSwgaW50IHNlZ21lbnQsIGludCBidXMsCisJCQkJCWludCBkZXZmbiwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZG1pX2Rldl9vbmJvYXJkICpvbmJvYXJkX2RldjsKKworCW9uYm9hcmRfZGV2ID0gZG1pX2FsbG9jKHNpemVvZigqb25ib2FyZF9kZXYpICsgc3RybGVuKG5hbWUpICsgMSk7CisJaWYgKCFvbmJvYXJkX2RldikgeworCQlwcmludGsoS0VSTl9FUlIgImRtaV9zYXZlX2Rldl9vbmJvYXJkOiBvdXQgb2YgbWVtb3J5LlxuIik7CisJCXJldHVybjsKKwl9CisJb25ib2FyZF9kZXYtPmluc3RhbmNlID0gaW5zdGFuY2U7CisJb25ib2FyZF9kZXYtPnNlZ21lbnQgPSBzZWdtZW50OworCW9uYm9hcmRfZGV2LT5idXMgPSBidXM7CisJb25ib2FyZF9kZXYtPmRldmZuID0gZGV2Zm47CisKKwlzdHJjcHkoKGNoYXIgKikmb25ib2FyZF9kZXZbMV0sIG5hbWUpOworCW9uYm9hcmRfZGV2LT5kZXYudHlwZSA9IERNSV9ERVZfVFlQRV9ERVZfT05CT0FSRDsKKwlvbmJvYXJkX2Rldi0+ZGV2Lm5hbWUgPSAoY2hhciAqKSZvbmJvYXJkX2RldlsxXTsKKwlvbmJvYXJkX2Rldi0+ZGV2LmRldmljZV9kYXRhID0gb25ib2FyZF9kZXY7CisKKwlsaXN0X2FkZCgmb25ib2FyZF9kZXYtPmRldi5saXN0LCAmZG1pX2RldmljZXMpOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgZG1pX3NhdmVfZXh0ZW5kZWRfZGV2aWNlcyhjb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqZG0pCiB7CiAJY29uc3QgdTggKmQgPSAodTgqKSBkbSArIDU7CkBAIC0yODUsNiArMzA4LDggQEAKIAlpZiAoKCpkICYgMHg4MCkgPT0gMCkKIAkJcmV0dXJuOwogCisJZG1pX3NhdmVfZGV2X29uYm9hcmQoKihkKzEpLCAqKHUxNiAqKShkKzIpLCAqKGQrNCksICooZCs1KSwKKwkJCSAgICAgZG1pX3N0cmluZ19ub3NhdmUoZG0sICooZC0xKSkpOwogCWRtaV9zYXZlX29uZV9kZXZpY2UoKmQgJiAweDdmLCBkbWlfc3RyaW5nX25vc2F2ZShkbSwgKihkIC0gMSkpKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9ib290X3N5c2ZzLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2Jvb3Rfc3lzZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjZiZmY3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9ib290X3N5c2ZzLmMKQEAgLTAsMCArMSw0ODEgQEAKKy8qCisgKiBFeHBvcnQgdGhlIGlTQ1NJIGJvb3QgaW5mbyB0byB1c2VybGFuZCB2aWEgc3lzZnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTWlrZSBDaHJpc3RpZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyLjAgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2lzY3NpX2Jvb3Rfc3lzZnMuaD4KKworCitNT0RVTEVfQVVUSE9SKCJNaWtlIENocmlzdGllIDxtaWNoYWVsY0Bjcy53aXNjLmVkdT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigic3lzZnMgaW50ZXJmYWNlIGFuZCBoZWxwZXJzIHRvIGV4cG9ydCBpU0NTSSBib290IGluZm9ybWF0aW9uIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisvKgorICogVGhlIGtvYmplY3QgYW5kIGF0dHJpYnV0ZSBzdHJ1Y3R1cmVzLgorICovCitzdHJ1Y3QgaXNjc2lfYm9vdF9hdHRyIHsKKwlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CisJaW50IHR5cGU7CisJc3NpemVfdCAoKnNob3cpICh2b2lkICpkYXRhLCBpbnQgdHlwZSwgY2hhciAqYnVmKTsKK307CisKKy8qCisgKiBUaGUgcm91dGluZSBjYWxsZWQgZm9yIGFsbCBzeXNmcyBhdHRyaWJ1dGVzLgorICovCitzdGF0aWMgc3NpemVfdCBpc2NzaV9ib290X3Nob3dfYXR0cmlidXRlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCQkgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBpc2NzaV9ib290X2tvYmogKmJvb3Rfa29iaiA9CisJCQljb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGlzY3NpX2Jvb3Rfa29iaiwga29iaik7CisJc3RydWN0IGlzY3NpX2Jvb3RfYXR0ciAqYm9vdF9hdHRyID0KKwkJCWNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgaXNjc2lfYm9vdF9hdHRyLCBhdHRyKTsKKwlzc2l6ZV90IHJldCA9IC1FSU87CisJY2hhciAqc3RyID0gYnVmOworCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVBQ0NFUzsKKworCWlmIChib290X2tvYmotPnNob3cpCisJCXJldCA9IGJvb3Rfa29iai0+c2hvdyhib290X2tvYmotPmRhdGEsIGJvb3RfYXR0ci0+dHlwZSwgc3RyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyBpc2NzaV9ib290X2F0dHJfb3BzID0geworCS5zaG93ID0gaXNjc2lfYm9vdF9zaG93X2F0dHJpYnV0ZSwKK307CisKK3N0YXRpYyB2b2lkIGlzY3NpX2Jvb3Rfa29ial9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKQoreworCXN0cnVjdCBpc2NzaV9ib290X2tvYmogKmJvb3Rfa29iaiA9CisJCQljb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGlzY3NpX2Jvb3Rfa29iaiwga29iaik7CisKKwlrZnJlZShib290X2tvYmotPmRhdGEpOworCWtmcmVlKGJvb3Rfa29iaik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qga29ial90eXBlIGlzY3NpX2Jvb3Rfa3R5cGUgPSB7CisJLnJlbGVhc2UgPSBpc2NzaV9ib290X2tvYmpfcmVsZWFzZSwKKwkuc3lzZnNfb3BzID0gJmlzY3NpX2Jvb3RfYXR0cl9vcHMsCit9OworCisjZGVmaW5lIGlzY3NpX2Jvb3RfcmRfYXR0cihmbm5hbWUsIHN5c2ZzX25hbWUsIGF0dHJfdHlwZSkJCVwKK3N0YXRpYyBzdHJ1Y3QgaXNjc2lfYm9vdF9hdHRyIGlzY3NpX2Jvb3RfYXR0cl8jI2ZubmFtZSA9IHsJXAorCS5hdHRyCT0geyAubmFtZSA9IF9fc3RyaW5naWZ5KHN5c2ZzX25hbWUpLCAubW9kZSA9IDA0NDQgfSwJXAorCS50eXBlCT0gYXR0cl90eXBlLAkJCQkJCVwKK30KKworLyogVGFyZ2V0IGF0dHJzICovCitpc2NzaV9ib290X3JkX2F0dHIodGd0X2luZGV4LCBpbmRleCwgSVNDU0lfQk9PVF9UR1RfSU5ERVgpOworaXNjc2lfYm9vdF9yZF9hdHRyKHRndF9mbGFncywgZmxhZ3MsIElTQ1NJX0JPT1RfVEdUX0ZMQUdTKTsKK2lzY3NpX2Jvb3RfcmRfYXR0cih0Z3RfaXAsIGlwLWFkZHIsIElTQ1NJX0JPT1RfVEdUX0lQX0FERFIpOworaXNjc2lfYm9vdF9yZF9hdHRyKHRndF9wb3J0LCBwb3J0LCBJU0NTSV9CT09UX1RHVF9QT1JUKTsKK2lzY3NpX2Jvb3RfcmRfYXR0cih0Z3RfbHVuLCBsdW4sIElTQ1NJX0JPT1RfVEdUX0xVTik7Citpc2NzaV9ib290X3JkX2F0dHIodGd0X2NoYXAsIGNoYXAtdHlwZSwgSVNDU0lfQk9PVF9UR1RfQ0hBUF9UWVBFKTsKK2lzY3NpX2Jvb3RfcmRfYXR0cih0Z3RfbmljLCBuaWMtYXNzb2MsIElTQ1NJX0JPT1RfVEdUX05JQ19BU1NPQyk7Citpc2NzaV9ib290X3JkX2F0dHIodGd0X25hbWUsIHRhcmdldC1uYW1lLCBJU0NTSV9CT09UX1RHVF9OQU1FKTsKK2lzY3NpX2Jvb3RfcmRfYXR0cih0Z3RfY2hhcF9uYW1lLCBjaGFwLW5hbWUsIElTQ1NJX0JPT1RfVEdUX0NIQVBfTkFNRSk7Citpc2NzaV9ib290X3JkX2F0dHIodGd0X2NoYXBfc2VjcmV0LCBjaGFwLXNlY3JldCwgSVNDU0lfQk9PVF9UR1RfQ0hBUF9TRUNSRVQpOworaXNjc2lfYm9vdF9yZF9hdHRyKHRndF9jaGFwX3Jldl9uYW1lLCByZXYtY2hhcC1uYW1lLAorCQkgICBJU0NTSV9CT09UX1RHVF9SRVZfQ0hBUF9OQU1FKTsKK2lzY3NpX2Jvb3RfcmRfYXR0cih0Z3RfY2hhcF9yZXZfc2VjcmV0LCByZXYtY2hhcC1uYW1lLXNlY3JldCwKKwkJICAgSVNDU0lfQk9PVF9UR1RfUkVWX0NIQVBfU0VDUkVUKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnRhcmdldF9hdHRyc1tdID0geworCSZpc2NzaV9ib290X2F0dHJfdGd0X2luZGV4LmF0dHIsCisJJmlzY3NpX2Jvb3RfYXR0cl90Z3RfZmxhZ3MuYXR0ciwKKwkmaXNjc2lfYm9vdF9hdHRyX3RndF9pcC5hdHRyLAorCSZpc2NzaV9ib290X2F0dHJfdGd0X3BvcnQuYXR0ciwKKwkmaXNjc2lfYm9vdF9hdHRyX3RndF9sdW4uYXR0ciwKKwkmaXNjc2lfYm9vdF9hdHRyX3RndF9jaGFwLmF0dHIsCisJJmlzY3NpX2Jvb3RfYXR0cl90Z3RfbmljLmF0dHIsCisJJmlzY3NpX2Jvb3RfYXR0cl90Z3RfbmFtZS5hdHRyLAorCSZpc2NzaV9ib290X2F0dHJfdGd0X2NoYXBfbmFtZS5hdHRyLAorCSZpc2NzaV9ib290X2F0dHJfdGd0X2NoYXBfc2VjcmV0LmF0dHIsCisJJmlzY3NpX2Jvb3RfYXR0cl90Z3RfY2hhcF9yZXZfbmFtZS5hdHRyLAorCSZpc2NzaV9ib290X2F0dHJfdGd0X2NoYXBfcmV2X3NlY3JldC5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBtb2RlX3QgaXNjc2lfYm9vdF90Z3RfYXR0cl9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCQkgICAgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGludCBpKQoreworCXN0cnVjdCBpc2NzaV9ib290X2tvYmogKmJvb3Rfa29iaiA9CisJCQljb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGlzY3NpX2Jvb3Rfa29iaiwga29iaik7CisKKwlpZiAoYXR0ciA9PSAgJmlzY3NpX2Jvb3RfYXR0cl90Z3RfaW5kZXguYXR0cikKKwkJcmV0dXJuIGJvb3Rfa29iai0+aXNfdmlzaWJsZShib290X2tvYmotPmRhdGEsCisJCQkJCSAgICAgSVNDU0lfQk9PVF9UR1RfSU5ERVgpOworCWVsc2UgaWYgKGF0dHIgPT0gJmlzY3NpX2Jvb3RfYXR0cl90Z3RfZmxhZ3MuYXR0cikKKwkJcmV0dXJuIGJvb3Rfa29iai0+aXNfdmlzaWJsZShib290X2tvYmotPmRhdGEsCisJCQkJCSAgICAgSVNDU0lfQk9PVF9UR1RfRkxBR1MpOworCWVsc2UgaWYgKGF0dHIgPT0gJmlzY3NpX2Jvb3RfYXR0cl90Z3RfaXAuYXR0cikKKwkJcmV0dXJuIGJvb3Rfa29iai0+aXNfdmlzaWJsZShib290X2tvYmotPmRhdGEsCisJCQkJCSAgICAgIElTQ1NJX0JPT1RfVEdUX0lQX0FERFIpOworCWVsc2UgaWYgKGF0dHIgPT0gJmlzY3NpX2Jvb3RfYXR0cl90Z3RfcG9ydC5hdHRyKQorCQlyZXR1cm4gYm9vdF9rb2JqLT5pc192aXNpYmxlKGJvb3Rfa29iai0+ZGF0YSwKKwkJCQkJICAgICAgSVNDU0lfQk9PVF9UR1RfUE9SVCk7CisJZWxzZSBpZiAoYXR0ciA9PSAmaXNjc2lfYm9vdF9hdHRyX3RndF9sdW4uYXR0cikKKwkJcmV0dXJuIGJvb3Rfa29iai0+aXNfdmlzaWJsZShib290X2tvYmotPmRhdGEsCisJCQkJCSAgICAgIElTQ1NJX0JPT1RfVEdUX0xVTik7CisJZWxzZSBpZiAoYXR0ciA9PSAmaXNjc2lfYm9vdF9hdHRyX3RndF9jaGFwLmF0dHIpCisJCXJldHVybiBib290X2tvYmotPmlzX3Zpc2libGUoYm9vdF9rb2JqLT5kYXRhLAorCQkJCQkgICAgIElTQ1NJX0JPT1RfVEdUX0NIQVBfVFlQRSk7CisJZWxzZSBpZiAoYXR0ciA9PSAmaXNjc2lfYm9vdF9hdHRyX3RndF9uaWMuYXR0cikKKwkJcmV0dXJuIGJvb3Rfa29iai0+aXNfdmlzaWJsZShib290X2tvYmotPmRhdGEsCisJCQkJCSAgICAgSVNDU0lfQk9PVF9UR1RfTklDX0FTU09DKTsKKwllbHNlIGlmIChhdHRyID09ICZpc2NzaV9ib290X2F0dHJfdGd0X25hbWUuYXR0cikKKwkJcmV0dXJuIGJvb3Rfa29iai0+aXNfdmlzaWJsZShib290X2tvYmotPmRhdGEsCisJCQkJCSAgICAgSVNDU0lfQk9PVF9UR1RfTkFNRSk7CisJZWxzZSBpZiAoYXR0ciA9PSAmaXNjc2lfYm9vdF9hdHRyX3RndF9jaGFwX25hbWUuYXR0cikKKwkJcmV0dXJuIGJvb3Rfa29iai0+aXNfdmlzaWJsZShib290X2tvYmotPmRhdGEsCisJCQkJCSAgICAgSVNDU0lfQk9PVF9UR1RfQ0hBUF9OQU1FKTsKKwllbHNlIGlmIChhdHRyID09ICZpc2NzaV9ib290X2F0dHJfdGd0X2NoYXBfc2VjcmV0LmF0dHIpCisJCXJldHVybiBib290X2tvYmotPmlzX3Zpc2libGUoYm9vdF9rb2JqLT5kYXRhLAorCQkJCQkgICAgIElTQ1NJX0JPT1RfVEdUX0NIQVBfU0VDUkVUKTsKKwllbHNlIGlmIChhdHRyID09ICZpc2NzaV9ib290X2F0dHJfdGd0X2NoYXBfcmV2X25hbWUuYXR0cikKKwkJcmV0dXJuIGJvb3Rfa29iai0+aXNfdmlzaWJsZShib290X2tvYmotPmRhdGEsCisJCQkJCSAgICAgSVNDU0lfQk9PVF9UR1RfUkVWX0NIQVBfTkFNRSk7CisJZWxzZSBpZiAoYXR0ciA9PSAmaXNjc2lfYm9vdF9hdHRyX3RndF9jaGFwX3Jldl9zZWNyZXQuYXR0cikKKwkJcmV0dXJuIGJvb3Rfa29iai0+aXNfdmlzaWJsZShib290X2tvYmotPmRhdGEsCisJCQkJCSAgICAgSVNDU0lfQk9PVF9UR1RfUkVWX0NIQVBfU0VDUkVUKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaXNjc2lfYm9vdF90YXJnZXRfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSB0YXJnZXRfYXR0cnMsCisJLmlzX3Zpc2libGUgPSBpc2NzaV9ib290X3RndF9hdHRyX2lzX3Zpc2libGUsCit9OworCisvKiBFdGhlcm5ldCBhdHRycyAqLworaXNjc2lfYm9vdF9yZF9hdHRyKGV0aF9pbmRleCwgaW5kZXgsIElTQ1NJX0JPT1RfRVRIX0lOREVYKTsKK2lzY3NpX2Jvb3RfcmRfYXR0cihldGhfZmxhZ3MsIGZsYWdzLCBJU0NTSV9CT09UX0VUSF9GTEFHUyk7Citpc2NzaV9ib290X3JkX2F0dHIoZXRoX2lwLCBpcC1hZGRyLCBJU0NTSV9CT09UX0VUSF9JUF9BRERSKTsKK2lzY3NpX2Jvb3RfcmRfYXR0cihldGhfc3VibmV0LCBzdWJuZXQtbWFzaywgSVNDU0lfQk9PVF9FVEhfU1VCTkVUX01BU0spOworaXNjc2lfYm9vdF9yZF9hdHRyKGV0aF9vcmlnaW4sIG9yaWdpbiwgSVNDU0lfQk9PVF9FVEhfT1JJR0lOKTsKK2lzY3NpX2Jvb3RfcmRfYXR0cihldGhfZ2F0ZXdheSwgZ2F0ZXdheSwgSVNDU0lfQk9PVF9FVEhfR0FURVdBWSk7Citpc2NzaV9ib290X3JkX2F0dHIoZXRoX3ByaW1hcnlfZG5zLCBwcmltYXJ5LWRucywgSVNDU0lfQk9PVF9FVEhfUFJJTUFSWV9ETlMpOworaXNjc2lfYm9vdF9yZF9hdHRyKGV0aF9zZWNvbmRhcnlfZG5zLCBzZWNvbmRhcnktZG5zLAorCQkgICBJU0NTSV9CT09UX0VUSF9TRUNPTkRBUllfRE5TKTsKK2lzY3NpX2Jvb3RfcmRfYXR0cihldGhfZGhjcCwgZGhjcCwgSVNDU0lfQk9PVF9FVEhfREhDUCk7Citpc2NzaV9ib290X3JkX2F0dHIoZXRoX3ZsYW4sIHZsYW4sIElTQ1NJX0JPT1RfRVRIX1ZMQU4pOworaXNjc2lfYm9vdF9yZF9hdHRyKGV0aF9tYWMsIG1hYywgSVNDU0lfQk9PVF9FVEhfTUFDKTsKK2lzY3NpX2Jvb3RfcmRfYXR0cihldGhfaG9zdG5hbWUsIGhvc3RuYW1lLCBJU0NTSV9CT09UX0VUSF9IT1NUTkFNRSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpldGhlcm5ldF9hdHRyc1tdID0geworCSZpc2NzaV9ib290X2F0dHJfZXRoX2luZGV4LmF0dHIsCisJJmlzY3NpX2Jvb3RfYXR0cl9ldGhfZmxhZ3MuYXR0ciwKKwkmaXNjc2lfYm9vdF9hdHRyX2V0aF9pcC5hdHRyLAorCSZpc2NzaV9ib290X2F0dHJfZXRoX3N1Ym5ldC5hdHRyLAorCSZpc2NzaV9ib290X2F0dHJfZXRoX29yaWdpbi5hdHRyLAorCSZpc2NzaV9ib290X2F0dHJfZXRoX2dhdGV3YXkuYXR0ciwKKwkmaXNjc2lfYm9vdF9hdHRyX2V0aF9wcmltYXJ5X2Rucy5hdHRyLAorCSZpc2NzaV9ib290X2F0dHJfZXRoX3NlY29uZGFyeV9kbnMuYXR0ciwKKwkmaXNjc2lfYm9vdF9hdHRyX2V0aF9kaGNwLmF0dHIsCisJJmlzY3NpX2Jvb3RfYXR0cl9ldGhfdmxhbi5hdHRyLAorCSZpc2NzaV9ib290X2F0dHJfZXRoX21hYy5hdHRyLAorCSZpc2NzaV9ib290X2F0dHJfZXRoX2hvc3RuYW1lLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIG1vZGVfdCBpc2NzaV9ib290X2V0aF9hdHRyX2lzX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJCSAgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50IGkpCit7CisJc3RydWN0IGlzY3NpX2Jvb3Rfa29iaiAqYm9vdF9rb2JqID0KKwkJCWNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgaXNjc2lfYm9vdF9rb2JqLCBrb2JqKTsKKworCWlmIChhdHRyID09ICAmaXNjc2lfYm9vdF9hdHRyX2V0aF9pbmRleC5hdHRyKQorCQlyZXR1cm4gYm9vdF9rb2JqLT5pc192aXNpYmxlKGJvb3Rfa29iai0+ZGF0YSwKKwkJCQkJICAgICBJU0NTSV9CT09UX0VUSF9JTkRFWCk7CisJZWxzZSBpZiAoYXR0ciA9PSAgJmlzY3NpX2Jvb3RfYXR0cl9ldGhfZmxhZ3MuYXR0cikKKwkJcmV0dXJuIGJvb3Rfa29iai0+aXNfdmlzaWJsZShib290X2tvYmotPmRhdGEsCisJCQkJCSAgICAgSVNDU0lfQk9PVF9FVEhfRkxBR1MpOworCWVsc2UgaWYgKGF0dHIgPT0gICZpc2NzaV9ib290X2F0dHJfZXRoX2lwLmF0dHIpCisJCXJldHVybiBib290X2tvYmotPmlzX3Zpc2libGUoYm9vdF9rb2JqLT5kYXRhLAorCQkJCQkgICAgIElTQ1NJX0JPT1RfRVRIX0lQX0FERFIpOworCWVsc2UgaWYgKGF0dHIgPT0gICZpc2NzaV9ib290X2F0dHJfZXRoX3N1Ym5ldC5hdHRyKQorCQlyZXR1cm4gYm9vdF9rb2JqLT5pc192aXNpYmxlKGJvb3Rfa29iai0+ZGF0YSwKKwkJCQkJICAgICBJU0NTSV9CT09UX0VUSF9TVUJORVRfTUFTSyk7CisJZWxzZSBpZiAoYXR0ciA9PSAgJmlzY3NpX2Jvb3RfYXR0cl9ldGhfb3JpZ2luLmF0dHIpCisJCXJldHVybiBib290X2tvYmotPmlzX3Zpc2libGUoYm9vdF9rb2JqLT5kYXRhLAorCQkJCQkgICAgIElTQ1NJX0JPT1RfRVRIX09SSUdJTik7CisJZWxzZSBpZiAoYXR0ciA9PSAgJmlzY3NpX2Jvb3RfYXR0cl9ldGhfZ2F0ZXdheS5hdHRyKQorCQlyZXR1cm4gYm9vdF9rb2JqLT5pc192aXNpYmxlKGJvb3Rfa29iai0+ZGF0YSwKKwkJCQkJICAgICBJU0NTSV9CT09UX0VUSF9HQVRFV0FZKTsKKwllbHNlIGlmIChhdHRyID09ICAmaXNjc2lfYm9vdF9hdHRyX2V0aF9wcmltYXJ5X2Rucy5hdHRyKQorCQlyZXR1cm4gYm9vdF9rb2JqLT5pc192aXNpYmxlKGJvb3Rfa29iai0+ZGF0YSwKKwkJCQkJICAgICBJU0NTSV9CT09UX0VUSF9QUklNQVJZX0ROUyk7CisJZWxzZSBpZiAoYXR0ciA9PSAgJmlzY3NpX2Jvb3RfYXR0cl9ldGhfc2Vjb25kYXJ5X2Rucy5hdHRyKQorCQlyZXR1cm4gYm9vdF9rb2JqLT5pc192aXNpYmxlKGJvb3Rfa29iai0+ZGF0YSwKKwkJCQkJICAgICBJU0NTSV9CT09UX0VUSF9TRUNPTkRBUllfRE5TKTsKKwllbHNlIGlmIChhdHRyID09ICAmaXNjc2lfYm9vdF9hdHRyX2V0aF9kaGNwLmF0dHIpCisJCXJldHVybiBib290X2tvYmotPmlzX3Zpc2libGUoYm9vdF9rb2JqLT5kYXRhLAorCQkJCQkgICAgIElTQ1NJX0JPT1RfRVRIX0RIQ1ApOworCWVsc2UgaWYgKGF0dHIgPT0gICZpc2NzaV9ib290X2F0dHJfZXRoX3ZsYW4uYXR0cikKKwkJcmV0dXJuIGJvb3Rfa29iai0+aXNfdmlzaWJsZShib290X2tvYmotPmRhdGEsCisJCQkJCSAgICAgSVNDU0lfQk9PVF9FVEhfVkxBTik7CisJZWxzZSBpZiAoYXR0ciA9PSAgJmlzY3NpX2Jvb3RfYXR0cl9ldGhfbWFjLmF0dHIpCisJCXJldHVybiBib290X2tvYmotPmlzX3Zpc2libGUoYm9vdF9rb2JqLT5kYXRhLAorCQkJCQkgICAgIElTQ1NJX0JPT1RfRVRIX01BQyk7CisJZWxzZSBpZiAoYXR0ciA9PSAgJmlzY3NpX2Jvb3RfYXR0cl9ldGhfaG9zdG5hbWUuYXR0cikKKwkJcmV0dXJuIGJvb3Rfa29iai0+aXNfdmlzaWJsZShib290X2tvYmotPmRhdGEsCisJCQkJCSAgICAgSVNDU0lfQk9PVF9FVEhfSE9TVE5BTUUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpc2NzaV9ib290X2V0aGVybmV0X2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gZXRoZXJuZXRfYXR0cnMsCisJLmlzX3Zpc2libGUgPSBpc2NzaV9ib290X2V0aF9hdHRyX2lzX3Zpc2libGUsCit9OworCisvKiBJbml0aWF0b3IgYXR0cnMgKi8KK2lzY3NpX2Jvb3RfcmRfYXR0cihpbmlfaW5kZXgsIGluZGV4LCBJU0NTSV9CT09UX0lOSV9JTkRFWCk7Citpc2NzaV9ib290X3JkX2F0dHIoaW5pX2ZsYWdzLCBmbGFncywgSVNDU0lfQk9PVF9JTklfRkxBR1MpOworaXNjc2lfYm9vdF9yZF9hdHRyKGluaV9pc25zLCBpc25zLXNlcnZlciwgSVNDU0lfQk9PVF9JTklfSVNOU19TRVJWRVIpOworaXNjc2lfYm9vdF9yZF9hdHRyKGluaV9zbHAsIHNscC1zZXJ2ZXIsIElTQ1NJX0JPT1RfSU5JX1NMUF9TRVJWRVIpOworaXNjc2lfYm9vdF9yZF9hdHRyKGluaV9wcmltYXJ5X3JhZGl1cywgcHJpLXJhZGl1cy1zZXJ2ZXIsCisJCSAgIElTQ1NJX0JPT1RfSU5JX1BSSV9SQURJVVNfU0VSVkVSKTsKK2lzY3NpX2Jvb3RfcmRfYXR0cihpbmlfc2Vjb25kYXJ5X3JhZGl1cywgc2VjLXJhZGl1cy1zZXJ2ZXIsCisJCSAgIElTQ1NJX0JPT1RfSU5JX1NFQ19SQURJVVNfU0VSVkVSKTsKK2lzY3NpX2Jvb3RfcmRfYXR0cihpbmlfbmFtZSwgaW5pdGlhdG9yLW5hbWUsIElTQ1NJX0JPT1RfSU5JX0lOSVRJQVRPUl9OQU1FKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmluaXRpYXRvcl9hdHRyc1tdID0geworCSZpc2NzaV9ib290X2F0dHJfaW5pX2luZGV4LmF0dHIsCisJJmlzY3NpX2Jvb3RfYXR0cl9pbmlfZmxhZ3MuYXR0ciwKKwkmaXNjc2lfYm9vdF9hdHRyX2luaV9pc25zLmF0dHIsCisJJmlzY3NpX2Jvb3RfYXR0cl9pbmlfc2xwLmF0dHIsCisJJmlzY3NpX2Jvb3RfYXR0cl9pbmlfcHJpbWFyeV9yYWRpdXMuYXR0ciwKKwkmaXNjc2lfYm9vdF9hdHRyX2luaV9zZWNvbmRhcnlfcmFkaXVzLmF0dHIsCisJJmlzY3NpX2Jvb3RfYXR0cl9pbmlfbmFtZS5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBtb2RlX3QgaXNjc2lfYm9vdF9pbmlfYXR0cl9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCQkgICAgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGludCBpKQoreworCXN0cnVjdCBpc2NzaV9ib290X2tvYmogKmJvb3Rfa29iaiA9CisJCQljb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGlzY3NpX2Jvb3Rfa29iaiwga29iaik7CisKKwlpZiAoYXR0ciA9PSAgJmlzY3NpX2Jvb3RfYXR0cl9pbmlfaW5kZXguYXR0cikKKwkJcmV0dXJuIGJvb3Rfa29iai0+aXNfdmlzaWJsZShib290X2tvYmotPmRhdGEsCisJCQkJCSAgICAgSVNDU0lfQk9PVF9JTklfSU5ERVgpOworCWlmIChhdHRyID09ICAmaXNjc2lfYm9vdF9hdHRyX2luaV9mbGFncy5hdHRyKQorCQlyZXR1cm4gYm9vdF9rb2JqLT5pc192aXNpYmxlKGJvb3Rfa29iai0+ZGF0YSwKKwkJCQkJICAgICBJU0NTSV9CT09UX0lOSV9GTEFHUyk7CisJaWYgKGF0dHIgPT0gICZpc2NzaV9ib290X2F0dHJfaW5pX2lzbnMuYXR0cikKKwkJcmV0dXJuIGJvb3Rfa29iai0+aXNfdmlzaWJsZShib290X2tvYmotPmRhdGEsCisJCQkJCSAgICAgSVNDU0lfQk9PVF9JTklfSVNOU19TRVJWRVIpOworCWlmIChhdHRyID09ICAmaXNjc2lfYm9vdF9hdHRyX2luaV9zbHAuYXR0cikKKwkJcmV0dXJuIGJvb3Rfa29iai0+aXNfdmlzaWJsZShib290X2tvYmotPmRhdGEsCisJCQkJCSAgICAgSVNDU0lfQk9PVF9JTklfU0xQX1NFUlZFUik7CisJaWYgKGF0dHIgPT0gICZpc2NzaV9ib290X2F0dHJfaW5pX3ByaW1hcnlfcmFkaXVzLmF0dHIpCisJCXJldHVybiBib290X2tvYmotPmlzX3Zpc2libGUoYm9vdF9rb2JqLT5kYXRhLAorCQkJCQkgICAgIElTQ1NJX0JPT1RfSU5JX1BSSV9SQURJVVNfU0VSVkVSKTsKKwlpZiAoYXR0ciA9PSAgJmlzY3NpX2Jvb3RfYXR0cl9pbmlfc2Vjb25kYXJ5X3JhZGl1cy5hdHRyKQorCQlyZXR1cm4gYm9vdF9rb2JqLT5pc192aXNpYmxlKGJvb3Rfa29iai0+ZGF0YSwKKwkJCQkJICAgICBJU0NTSV9CT09UX0lOSV9TRUNfUkFESVVTX1NFUlZFUik7CisJaWYgKGF0dHIgPT0gICZpc2NzaV9ib290X2F0dHJfaW5pX25hbWUuYXR0cikKKwkJcmV0dXJuIGJvb3Rfa29iai0+aXNfdmlzaWJsZShib290X2tvYmotPmRhdGEsCisJCQkJCSAgICAgSVNDU0lfQk9PVF9JTklfSU5JVElBVE9SX05BTUUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGlzY3NpX2Jvb3RfaW5pdGlhdG9yX2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gaW5pdGlhdG9yX2F0dHJzLAorCS5pc192aXNpYmxlID0gaXNjc2lfYm9vdF9pbmlfYXR0cl9pc192aXNpYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBpc2NzaV9ib290X2tvYmogKgoraXNjc2lfYm9vdF9jcmVhdGVfa29iaihzdHJ1Y3QgaXNjc2lfYm9vdF9rc2V0ICpib290X2tzZXQsCisJCSAgICAgICBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICphdHRyX2dyb3VwLAorCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgaW50IGluZGV4LCB2b2lkICpkYXRhLAorCQkgICAgICAgc3NpemVfdCAoKnNob3cpICh2b2lkICpkYXRhLCBpbnQgdHlwZSwgY2hhciAqYnVmKSwKKwkJICAgICAgIG1vZGVfdCAoKmlzX3Zpc2libGUpICh2b2lkICpkYXRhLCBpbnQgdHlwZSkpCit7CisJc3RydWN0IGlzY3NpX2Jvb3Rfa29iaiAqYm9vdF9rb2JqOworCisJYm9vdF9rb2JqID0ga3phbGxvYyhzaXplb2YoKmJvb3Rfa29iaiksIEdGUF9LRVJORUwpOworCWlmICghYm9vdF9rb2JqKQorCQlyZXR1cm4gTlVMTDsKKwlJTklUX0xJU1RfSEVBRCgmYm9vdF9rb2JqLT5saXN0KTsKKworCWJvb3Rfa29iai0+a29iai5rc2V0ID0gYm9vdF9rc2V0LT5rc2V0OworCWlmIChrb2JqZWN0X2luaXRfYW5kX2FkZCgmYm9vdF9rb2JqLT5rb2JqLCAmaXNjc2lfYm9vdF9rdHlwZSwKKwkJCQkgTlVMTCwgbmFtZSwgaW5kZXgpKSB7CisJCWtmcmVlKGJvb3Rfa29iaik7CisJCXJldHVybiBOVUxMOworCX0KKwlib290X2tvYmotPmRhdGEgPSBkYXRhOworCWJvb3Rfa29iai0+c2hvdyA9IHNob3c7CisJYm9vdF9rb2JqLT5pc192aXNpYmxlID0gaXNfdmlzaWJsZTsKKworCWlmIChzeXNmc19jcmVhdGVfZ3JvdXAoJmJvb3Rfa29iai0+a29iaiwgYXR0cl9ncm91cCkpIHsKKwkJLyoKKwkJICogV2UgZG8gbm90IHdhbnQgdG8gZnJlZSB0aGlzIGJlY2F1c2UgdGhlIGNhbGxlcgorCQkgKiB3aWxsIGFzc3VtZSB0aGF0IHNpbmNlIHRoZSBjcmVhdGlvbiBjYWxsIGZhaWxlZAorCQkgKiB0aGUgYm9vdCBrb2JqIHdhcyBub3Qgc2V0dXAgYW5kIHRoZSBub3JtYWwgcmVsZWFzZQorCQkgKiBwYXRoIGlzIG5vdCBiZWluZyBydW4uCisJCSAqLworCQlib290X2tvYmotPmRhdGEgPSBOVUxMOworCQlrb2JqZWN0X3B1dCgmYm9vdF9rb2JqLT5rb2JqKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWJvb3Rfa29iai0+YXR0cl9ncm91cCA9IGF0dHJfZ3JvdXA7CisKKwlrb2JqZWN0X3VldmVudCgmYm9vdF9rb2JqLT5rb2JqLCBLT0JKX0FERCk7CisJLyogTm90aGluZyBicm9rZSBzbyBsZXRzIGFkZCBpdCB0byB0aGUgbGlzdC4gKi8KKwlsaXN0X2FkZF90YWlsKCZib290X2tvYmotPmxpc3QsICZib290X2tzZXQtPmtvYmpfbGlzdCk7CisJcmV0dXJuIGJvb3Rfa29iajsKK30KKworc3RhdGljIHZvaWQgaXNjc2lfYm9vdF9yZW1vdmVfa29iaihzdHJ1Y3QgaXNjc2lfYm9vdF9rb2JqICpib290X2tvYmopCit7CisJbGlzdF9kZWwoJmJvb3Rfa29iai0+bGlzdCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZib290X2tvYmotPmtvYmosIGJvb3Rfa29iai0+YXR0cl9ncm91cCk7CisJa29iamVjdF9wdXQoJmJvb3Rfa29iai0+a29iaik7Cit9CisKKy8qKgorICogaXNjc2lfYm9vdF9jcmVhdGVfdGFyZ2V0KCkgLSBjcmVhdGUgYm9vdCB0YXJnZXQgc3lzZnMgZGlyCisgKiBAYm9vdF9rc2V0OiBib290IGtzZXQKKyAqIEBpbmRleDogdGhlIHRhcmdldCBpZAorICogQGRhdGE6IGRyaXZlciBzcGVjaWZpYyBkYXRhIGZvciB0YXJnZXQKKyAqIEBzaG93OiBhdHRyIHNob3cgZnVuY3Rpb24KKyAqIEBpc192aXNpYmxlOiBhdHRyIHZpc2liaWxpdHkgZnVuY3Rpb24KKyAqCisgKiBOb3RlOiBUaGUgYm9vdCBzeXNmcyBsaWIgd2lsbCBmcmVlIHRoZSBkYXRhIHBhc3NlZCBpbiBmb3IgdGhlIGNhbGxlcgorICogd2hlbiBhbGwgcmVmcyB0byB0aGUgdGFyZ2V0IGtvYmplY3QgaGF2ZSBiZWVuIHJlbGVhc2VkLgorICovCitzdHJ1Y3QgaXNjc2lfYm9vdF9rb2JqICoKK2lzY3NpX2Jvb3RfY3JlYXRlX3RhcmdldChzdHJ1Y3QgaXNjc2lfYm9vdF9rc2V0ICpib290X2tzZXQsIGludCBpbmRleCwKKwkJCSB2b2lkICpkYXRhLAorCQkJIHNzaXplX3QgKCpzaG93KSAodm9pZCAqZGF0YSwgaW50IHR5cGUsIGNoYXIgKmJ1ZiksCisJCQkgbW9kZV90ICgqaXNfdmlzaWJsZSkgKHZvaWQgKmRhdGEsIGludCB0eXBlKSkKK3sKKwlyZXR1cm4gaXNjc2lfYm9vdF9jcmVhdGVfa29iaihib290X2tzZXQsICZpc2NzaV9ib290X3RhcmdldF9hdHRyX2dyb3VwLAorCQkJCSAgICAgICJ0YXJnZXQlZCIsIGluZGV4LCBkYXRhLCBzaG93LCBpc192aXNpYmxlKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX2Jvb3RfY3JlYXRlX3RhcmdldCk7CisKKy8qKgorICogaXNjc2lfYm9vdF9jcmVhdGVfaW5pdGlhdG9yKCkgLSBjcmVhdGUgYm9vdCBpbml0aWF0b3Igc3lzZnMgZGlyCisgKiBAYm9vdF9rc2V0OiBib290IGtzZXQKKyAqIEBpbmRleDogdGhlIGluaXRpYXRvciBpZAorICogQGRhdGE6IGRyaXZlciBzcGVjaWZpYyBkYXRhCisgKiBAc2hvdzogYXR0ciBzaG93IGZ1bmN0aW9uCisgKiBAaXNfdmlzaWJsZTogYXR0ciB2aXNpYmlsaXR5IGZ1bmN0aW9uCisgKgorICogTm90ZTogVGhlIGJvb3Qgc3lzZnMgbGliIHdpbGwgZnJlZSB0aGUgZGF0YSBwYXNzZWQgaW4gZm9yIHRoZSBjYWxsZXIKKyAqIHdoZW4gYWxsIHJlZnMgdG8gdGhlIGluaXRpYXRvciBrb2JqZWN0IGhhdmUgYmVlbiByZWxlYXNlZC4KKyAqLworc3RydWN0IGlzY3NpX2Jvb3Rfa29iaiAqCitpc2NzaV9ib290X2NyZWF0ZV9pbml0aWF0b3Ioc3RydWN0IGlzY3NpX2Jvb3Rfa3NldCAqYm9vdF9rc2V0LCBpbnQgaW5kZXgsCisJCQkgICAgdm9pZCAqZGF0YSwKKwkJCSAgICBzc2l6ZV90ICgqc2hvdykgKHZvaWQgKmRhdGEsIGludCB0eXBlLCBjaGFyICpidWYpLAorCQkJICAgIG1vZGVfdCAoKmlzX3Zpc2libGUpICh2b2lkICpkYXRhLCBpbnQgdHlwZSkpCit7CisJcmV0dXJuIGlzY3NpX2Jvb3RfY3JlYXRlX2tvYmooYm9vdF9rc2V0LAorCQkJCSAgICAgICZpc2NzaV9ib290X2luaXRpYXRvcl9hdHRyX2dyb3VwLAorCQkJCSAgICAgICJpbml0aWF0b3IiLCBpbmRleCwgZGF0YSwgc2hvdywKKwkJCQkgICAgICBpc192aXNpYmxlKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX2Jvb3RfY3JlYXRlX2luaXRpYXRvcik7CisKKy8qKgorICogaXNjc2lfYm9vdF9jcmVhdGVfZXRoZXJuZXQoKSAtIGNyZWF0ZSBib290IGV0aGVybmV0IHN5c2ZzIGRpcgorICogQGJvb3Rfa3NldDogYm9vdCBrc2V0CisgKiBAaW5kZXg6IHRoZSBldGhlcm5ldCBkZXZpY2UgaWQKKyAqIEBkYXRhOiBkcml2ZXIgc3BlY2lmaWMgZGF0YQorICogQHNob3c6IGF0dHIgc2hvdyBmdW5jdGlvbgorICogQGlzX3Zpc2libGU6IGF0dHIgdmlzaWJpbGl0eSBmdW5jdGlvbgorICoKKyAqIE5vdGU6IFRoZSBib290IHN5c2ZzIGxpYiB3aWxsIGZyZWUgdGhlIGRhdGEgcGFzc2VkIGluIGZvciB0aGUgY2FsbGVyCisgKiB3aGVuIGFsbCByZWZzIHRvIHRoZSBldGhlcm5ldCBrb2JqZWN0IGhhdmUgYmVlbiByZWxlYXNlZC4KKyAqLworc3RydWN0IGlzY3NpX2Jvb3Rfa29iaiAqCitpc2NzaV9ib290X2NyZWF0ZV9ldGhlcm5ldChzdHJ1Y3QgaXNjc2lfYm9vdF9rc2V0ICpib290X2tzZXQsIGludCBpbmRleCwKKwkJCSAgIHZvaWQgKmRhdGEsCisJCQkgICBzc2l6ZV90ICgqc2hvdykgKHZvaWQgKmRhdGEsIGludCB0eXBlLCBjaGFyICpidWYpLAorCQkJICAgbW9kZV90ICgqaXNfdmlzaWJsZSkgKHZvaWQgKmRhdGEsIGludCB0eXBlKSkKK3sKKwlyZXR1cm4gaXNjc2lfYm9vdF9jcmVhdGVfa29iaihib290X2tzZXQsCisJCQkJICAgICAgJmlzY3NpX2Jvb3RfZXRoZXJuZXRfYXR0cl9ncm91cCwKKwkJCQkgICAgICAiZXRoZXJuZXQlZCIsIGluZGV4LCBkYXRhLCBzaG93LAorCQkJCSAgICAgIGlzX3Zpc2libGUpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfYm9vdF9jcmVhdGVfZXRoZXJuZXQpOworCisvKioKKyAqIGlzY3NpX2Jvb3RfY3JlYXRlX2tzZXQoKSAtIGNyZWF0ZXMgcm9vdCBzeXNmcyB0cmVlCisgKiBAc2V0X25hbWU6IG5hbWUgb2Ygcm9vdCBkaXIKKyAqLworc3RydWN0IGlzY3NpX2Jvb3Rfa3NldCAqaXNjc2lfYm9vdF9jcmVhdGVfa3NldChjb25zdCBjaGFyICpzZXRfbmFtZSkKK3sKKwlzdHJ1Y3QgaXNjc2lfYm9vdF9rc2V0ICpib290X2tzZXQ7CisKKwlib290X2tzZXQgPSBremFsbG9jKHNpemVvZigqYm9vdF9rc2V0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFib290X2tzZXQpCisJCXJldHVybiBOVUxMOworCisJYm9vdF9rc2V0LT5rc2V0ID0ga3NldF9jcmVhdGVfYW5kX2FkZChzZXRfbmFtZSwgTlVMTCwgZmlybXdhcmVfa29iaik7CisJaWYgKCFib290X2tzZXQtPmtzZXQpIHsKKwkJa2ZyZWUoYm9vdF9rc2V0KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJmJvb3Rfa3NldC0+a29ial9saXN0KTsKKwlyZXR1cm4gYm9vdF9rc2V0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfYm9vdF9jcmVhdGVfa3NldCk7CisKKy8qKgorICogaXNjc2lfYm9vdF9jcmVhdGVfaG9zdF9rc2V0KCkgLSBjcmVhdGVzIHJvb3Qgc3lzZnMgdHJlZSBmb3IgYSBzY3NpIGhvc3QKKyAqIEBob3N0bm86IGhvc3QgbnVtYmVyIG9mIHNjc2kgaG9zdAorICovCitzdHJ1Y3QgaXNjc2lfYm9vdF9rc2V0ICppc2NzaV9ib290X2NyZWF0ZV9ob3N0X2tzZXQodW5zaWduZWQgaW50IGhvc3RubykKK3sKKwlzdHJ1Y3QgaXNjc2lfYm9vdF9rc2V0ICpib290X2tzZXQ7CisJY2hhciAqc2V0X25hbWU7CisKKwlzZXRfbmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiaXNjc2lfYm9vdCV1IiwgaG9zdG5vKTsKKwlpZiAoIXNldF9uYW1lKQorCQlyZXR1cm4gTlVMTDsKKworCWJvb3Rfa3NldCA9IGlzY3NpX2Jvb3RfY3JlYXRlX2tzZXQoc2V0X25hbWUpOworCWtmcmVlKHNldF9uYW1lKTsKKwlyZXR1cm4gYm9vdF9rc2V0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfYm9vdF9jcmVhdGVfaG9zdF9rc2V0KTsKKworLyoqCisgKiBpc2NzaV9ib290X2Rlc3Ryb3lfa3NldCgpIC0gZGVzdHJveSBrc2V0IGFuZCBrb2JqZWN0cyB1bmRlciBpdAorICogQGJvb3Rfa3NldDogYm9vdCBrc2V0CisgKgorICogVGhpcyB3aWxsIHJlbW92ZSB0aGUga3NldCBhbmQga29iamVjdHMgYW5kIGF0dHJzIHVuZGVyIGl0LgorICovCit2b2lkIGlzY3NpX2Jvb3RfZGVzdHJveV9rc2V0KHN0cnVjdCBpc2NzaV9ib290X2tzZXQgKmJvb3Rfa3NldCkKK3sKKwlzdHJ1Y3QgaXNjc2lfYm9vdF9rb2JqICpib290X2tvYmosICp0bXBfa29iajsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShib290X2tvYmosIHRtcF9rb2JqLAorCQkJCSAmYm9vdF9rc2V0LT5rb2JqX2xpc3QsIGxpc3QpCisJCWlzY3NpX2Jvb3RfcmVtb3ZlX2tvYmooYm9vdF9rb2JqKTsKKworCWtzZXRfdW5yZWdpc3Rlcihib290X2tzZXQtPmtzZXQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfYm9vdF9kZXN0cm95X2tzZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMgYi9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYwppbmRleCBlZDI4MDFjLi40ZjA0ZWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYworKysgYi9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IDIwMDcgUmVkIEhhdCwgSW5jLgorICogIENvcHlyaWdodCAyMDA3LTIwMTAgUmVkIEhhdCwgSW5jLgogICogIGJ5IFBldGVyIEpvbmVzIDxwam9uZXNAcmVkaGF0LmNvbT4KICAqICBDb3B5cmlnaHQgMjAwOCBJQk0sIEluYy4KICAqICBieSBLb25yYWQgUnplc3p1dGVrIDxrb25yYWRyQGxpbnV4LnZuZXQuaWJtLmNvbT4KQEAgLTE5LDYgKzE5LDkgQEAKICAqCiAgKiBDaGFuZ2Vsb2c6CiAgKgorICogIDA2IEphbiAyMDEwIC0gUGV0ZXIgSm9uZXMgPHBqb25lc0ByZWRoYXQuY29tPgorICogICAgTmV3IGNoYW5nZWxvZyBlbnRyaWVzIGFyZSBpbiB0aGUgZ2l0IGxvZyBmcm9tIG5vdyBvbi4gIE5vdCBoZXJlLgorICoKICAqICAxNCBNYXIgMjAwOCAtIEtvbnJhZCBSemVzenV0ZWsgPGtldHV6c2V6ckBkYXJub2sub3JnPgogICogICAgVXBkYXRlZCBjb21tZW50cyBhbmQgY29weXJpZ2h0cy4gKHYwLjQuOSkKICAqCkBAIC03OCw5ICs4MSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9pc2NzaV9ib290X3N5c2ZzLmg+CiAKLSNkZWZpbmUgSUJGVF9JU0NTSV9WRVJTSU9OICIwLjQuOSIKLSNkZWZpbmUgSUJGVF9JU0NTSV9EQVRFICIyMDA4LU1hci0xNCIKKyNkZWZpbmUgSUJGVF9JU0NTSV9WRVJTSU9OICIwLjUuMCIKKyNkZWZpbmUgSUJGVF9JU0NTSV9EQVRFICIyMDEwLUZlYi0yNSIKIAogTU9EVUxFX0FVVEhPUigiUGV0ZXIgSm9uZXMgPHBqb25lc0ByZWRoYXQuY29tPiBhbmQgXAogS29ucmFkIFJ6ZXN6dXRlayA8a2V0dXpzZXpyQGRhcm5vay5vcmc+Iik7CkBAIC0xNjYsMTA4ICsxNzEsMjAgQEAKIH07CiAKIC8qCi0gKiBXZSBkbyBub3Qgc3VwcG9ydCB0aGUgb3RoZXIgdHlwZXMsIGhlbmNlIHRoZSB1c2FnZSBvZiBOVUxMLgotICogVGhpcyBtYXBzIHRvIHRoZSBlbnVtIGliZnRfaWQuCi0gKi8KLXN0YXRpYyBjb25zdCBjaGFyICppYmZ0X2lkX25hbWVzW10gPQotCXtOVUxMLCBOVUxMLCAiaW5pdGlhdG9yIiwgImV0aGVybmV0JWQiLCAidGFyZ2V0JWQiLCBOVUxMLCBOVUxMfTsKLQotLyoKLSAqIFRoZSB0ZXh0IGF0dHJpYnV0ZXMgbmFtZXMgZm9yIGVhY2ggb2YgdGhlIGtvYmplY3RzLgotKi8KLWVudW0gaWJmdF9ldGhfcHJvcGVydGllc19lbnVtIHsKLQlpYmZ0X2V0aF9pbmRleCwKLQlpYmZ0X2V0aF9mbGFncywKLQlpYmZ0X2V0aF9pcF9hZGRyLAotCWliZnRfZXRoX3N1Ym5ldF9tYXNrLAotCWliZnRfZXRoX29yaWdpbiwKLQlpYmZ0X2V0aF9nYXRld2F5LAotCWliZnRfZXRoX3ByaW1hcnlfZG5zLAotCWliZnRfZXRoX3NlY29uZGFyeV9kbnMsCi0JaWJmdF9ldGhfZGhjcCwKLQlpYmZ0X2V0aF92bGFuLAotCWliZnRfZXRoX21hYywKLQkvKiBpYmZ0X2V0aF9wY2lfYmRmIC0gdGhpcyBpcyByZXBsYWNlZCBieSBsaW5rIHRvIHRoZSBkZXZpY2UgaXRzZWxmLiAqLwotCWliZnRfZXRoX2hvc3RuYW1lLAotCWliZnRfZXRoX2VuZF9tYXJrZXIsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqaWJmdF9ldGhfcHJvcGVydGllc1tdID0KLQl7ImluZGV4IiwgImZsYWdzIiwgImlwLWFkZHIiLCAic3VibmV0LW1hc2siLCAib3JpZ2luIiwgImdhdGV3YXkiLAotCSJwcmltYXJ5LWRucyIsICJzZWNvbmRhcnktZG5zIiwgImRoY3AiLCAidmxhbiIsICJtYWMiLCAiaG9zdG5hbWUiLAotCU5VTEx9OwotCi1lbnVtIGliZnRfdGd0X3Byb3BlcnRpZXNfZW51bSB7Ci0JaWJmdF90Z3RfaW5kZXgsCi0JaWJmdF90Z3RfZmxhZ3MsCi0JaWJmdF90Z3RfaXBfYWRkciwKLQlpYmZ0X3RndF9wb3J0LAotCWliZnRfdGd0X2x1biwKLQlpYmZ0X3RndF9jaGFwX3R5cGUsCi0JaWJmdF90Z3RfbmljX2Fzc29jLAotCWliZnRfdGd0X25hbWUsCi0JaWJmdF90Z3RfY2hhcF9uYW1lLAotCWliZnRfdGd0X2NoYXBfc2VjcmV0LAotCWliZnRfdGd0X3Jldl9jaGFwX25hbWUsCi0JaWJmdF90Z3RfcmV2X2NoYXBfc2VjcmV0LAotCWliZnRfdGd0X2VuZF9tYXJrZXIsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqaWJmdF90Z3RfcHJvcGVydGllc1tdID0KLQl7ImluZGV4IiwgImZsYWdzIiwgImlwLWFkZHIiLCAicG9ydCIsICJsdW4iLCAiY2hhcC10eXBlIiwgIm5pYy1hc3NvYyIsCi0JInRhcmdldC1uYW1lIiwgImNoYXAtbmFtZSIsICJjaGFwLXNlY3JldCIsICJyZXYtY2hhcC1uYW1lIiwKLQkicmV2LWNoYXAtbmFtZS1zZWNyZXQiLCBOVUxMfTsKLQotZW51bSBpYmZ0X2luaXRpYXRvcl9wcm9wZXJ0aWVzX2VudW0gewotCWliZnRfaW5pdF9pbmRleCwKLQlpYmZ0X2luaXRfZmxhZ3MsCi0JaWJmdF9pbml0X2lzbnNfc2VydmVyLAotCWliZnRfaW5pdF9zbHBfc2VydmVyLAotCWliZnRfaW5pdF9wcmlfcmFkaXVzX3NlcnZlciwKLQlpYmZ0X2luaXRfc2VjX3JhZGl1c19zZXJ2ZXIsCi0JaWJmdF9pbml0X2luaXRpYXRvcl9uYW1lLAotCWliZnRfaW5pdF9lbmRfbWFya2VyLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKmliZnRfaW5pdGlhdG9yX3Byb3BlcnRpZXNbXSA9Ci0JeyJpbmRleCIsICJmbGFncyIsICJpc25zLXNlcnZlciIsICJzbHAtc2VydmVyIiwgInByaS1yYWRpdXMtc2VydmVyIiwKLQkic2VjLXJhZGl1cy1zZXJ2ZXIiLCAiaW5pdGlhdG9yLW5hbWUiLCBOVUxMfTsKLQotLyoKICAqIFRoZSBrb2JqZWN0IGFuZCBhdHRyaWJ1dGUgc3RydWN0dXJlcy4KICAqLwogCiBzdHJ1Y3QgaWJmdF9rb2JqZWN0IHsKLQlzdHJ1Y3QgaWJmdF90YWJsZV9oZWFkZXIgKmhlYWRlcjsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9pYmZ0ICpoZWFkZXI7CiAJdW5pb24gewogCQlzdHJ1Y3QgaWJmdF9pbml0aWF0b3IgKmluaXRpYXRvcjsKIAkJc3RydWN0IGliZnRfbmljICpuaWM7CiAJCXN0cnVjdCBpYmZ0X3RndCAqdGd0OwogCQlzdHJ1Y3QgaWJmdF9oZHIgKmhkcjsKIAl9OwotCXN0cnVjdCBrb2JqZWN0IGtvYmo7Ci0Jc3RydWN0IGxpc3RfaGVhZCBub2RlOwogfTsKIAotc3RydWN0IGliZnRfYXR0cmlidXRlIHsKLQlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7Ci0Jc3NpemVfdCAoKnNob3cpIChzdHJ1Y3QgIGliZnRfa29iamVjdCAqZW50cnksCi0JCQkgc3RydWN0IGliZnRfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOwotCXVuaW9uIHsKLQkJc3RydWN0IGliZnRfaW5pdGlhdG9yICppbml0aWF0b3I7Ci0JCXN0cnVjdCBpYmZ0X25pYyAqbmljOwotCQlzdHJ1Y3QgaWJmdF90Z3QgKnRndDsKLQkJc3RydWN0IGliZnRfaGRyICpoZHI7Ci0JfTsKLQlzdHJ1Y3Qga29iamVjdCAqa29iajsKLQlpbnQgdHlwZTsgLyogVGhlIGVudW0gb2YgdGhlIHR5cGUuIFRoaXMgY2FuIGJlIGFueSB2YWx1ZSBvZjoKLQkJaWJmdF9ldGhfcHJvcGVydGllc19lbnVtLCBpYmZ0X3RndF9wcm9wZXJ0aWVzX2VudW0sCi0JCW9yIGliZnRfaW5pdGlhdG9yX3Byb3BlcnRpZXNfZW51bS4gKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Ci19OwotCi1zdGF0aWMgTElTVF9IRUFEKGliZnRfYXR0cl9saXN0KTsKLXN0YXRpYyBMSVNUX0hFQUQoaWJmdF9rb2JqZWN0X2xpc3QpOworc3RhdGljIHN0cnVjdCBpc2NzaV9ib290X2tzZXQgKmJvb3Rfa3NldDsKIAogc3RhdGljIGNvbnN0IGNoYXIgbnVsbHNbMTZdOwogCkBAIC0zMDYsMzUgKzIyMywyNyBAQAogc3RhdGljIGludCBpYmZ0X3ZlcmlmeV9oZHIoY2hhciAqdCwgc3RydWN0IGliZnRfaGRyICpoZHIsIGludCBpZCwgaW50IGxlbmd0aCkKIHsKIAlpZiAoaGRyLT5pZCAhPSBpZCkgewotCQlwcmludGsoS0VSTl9FUlIgImlCRlQgZXJyb3I6IFdlIGV4cGVjdGVkIHRoZSAiIFwKKwkJcHJpbnRrKEtFUk5fRVJSICJpQkZUIGVycm9yOiBXZSBleHBlY3RlZCB0aGUgJXMgIiBcCiAJCQkJImZpZWxkIGhlYWRlci5pZCB0byBoYXZlICVkIGJ1dCAiIFwKLQkJCQkiZm91bmQgJWQgaW5zdGVhZCFcbiIsIGlkLCBoZHItPmlkKTsKKwkJCQkiZm91bmQgJWQgaW5zdGVhZCFcbiIsIHQsIGlkLCBoZHItPmlkKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWlmIChoZHItPmxlbmd0aCAhPSBsZW5ndGgpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJpQkZUIGVycm9yOiBXZSBleHBlY3RlZCB0aGUgIiBcCisJCXByaW50ayhLRVJOX0VSUiAiaUJGVCBlcnJvcjogV2UgZXhwZWN0ZWQgdGhlICVzICIgXAogCQkJCSJmaWVsZCBoZWFkZXIubGVuZ3RoIHRvIGhhdmUgJWQgYnV0ICIgXAotCQkJCSJmb3VuZCAlZCBpbnN0ZWFkIVxuIiwgbGVuZ3RoLCBoZHItPmxlbmd0aCk7CisJCQkJImZvdW5kICVkIGluc3RlYWQhXG4iLCB0LCBsZW5ndGgsIGhkci0+bGVuZ3RoKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGliZnRfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKLXsKLQlzdHJ1Y3QgaWJmdF9rb2JqZWN0ICppYmZ0ID0KLQkJY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBpYmZ0X2tvYmplY3QsIGtvYmopOwotCWtmcmVlKGliZnQpOwotfQotCiAvKgogICogIFJvdXRpbmVzIGZvciBwYXJzaW5nIHRoZSBpQkZUIGRhdGEgdG8gYmUgaHVtYW4gcmVhZGFibGUuCiAgKi8KLXN0YXRpYyBzc2l6ZV90IGliZnRfYXR0cl9zaG93X2luaXRpYXRvcihzdHJ1Y3QgaWJmdF9rb2JqZWN0ICplbnRyeSwKLQkJCQkJc3RydWN0IGliZnRfYXR0cmlidXRlICphdHRyLAotCQkJCQljaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBpYmZ0X2F0dHJfc2hvd19pbml0aWF0b3Iodm9pZCAqZGF0YSwgaW50IHR5cGUsIGNoYXIgKmJ1ZikKIHsKKwlzdHJ1Y3QgaWJmdF9rb2JqZWN0ICplbnRyeSA9IGRhdGE7CiAJc3RydWN0IGliZnRfaW5pdGlhdG9yICppbml0aWF0b3IgPSBlbnRyeS0+aW5pdGlhdG9yOwogCXZvaWQgKmliZnRfbG9jID0gZW50cnktPmhlYWRlcjsKIAljaGFyICpzdHIgPSBidWY7CkBAIC0zNDIsMjYgKzI1MSwyNiBAQAogCWlmICghaW5pdGlhdG9yKQogCQlyZXR1cm4gMDsKIAotCXN3aXRjaCAoYXR0ci0+dHlwZSkgewotCWNhc2UgaWJmdF9pbml0X2luZGV4OgorCXN3aXRjaCAodHlwZSkgeworCWNhc2UgSVNDU0lfQk9PVF9JTklfSU5ERVg6CiAJCXN0ciArPSBzcHJpbnRmKHN0ciwgIiVkXG4iLCBpbml0aWF0b3ItPmhkci5pbmRleCk7CiAJCWJyZWFrOwotCWNhc2UgaWJmdF9pbml0X2ZsYWdzOgorCWNhc2UgSVNDU0lfQk9PVF9JTklfRkxBR1M6CiAJCXN0ciArPSBzcHJpbnRmKHN0ciwgIiVkXG4iLCBpbml0aWF0b3ItPmhkci5mbGFncyk7CiAJCWJyZWFrOwotCWNhc2UgaWJmdF9pbml0X2lzbnNfc2VydmVyOgorCWNhc2UgSVNDU0lfQk9PVF9JTklfSVNOU19TRVJWRVI6CiAJCXN0ciArPSBzcHJpbnRmX2lwYWRkcihzdHIsIGluaXRpYXRvci0+aXNuc19zZXJ2ZXIpOwogCQlicmVhazsKLQljYXNlIGliZnRfaW5pdF9zbHBfc2VydmVyOgorCWNhc2UgSVNDU0lfQk9PVF9JTklfU0xQX1NFUlZFUjoKIAkJc3RyICs9IHNwcmludGZfaXBhZGRyKHN0ciwgaW5pdGlhdG9yLT5zbHBfc2VydmVyKTsKIAkJYnJlYWs7Ci0JY2FzZSBpYmZ0X2luaXRfcHJpX3JhZGl1c19zZXJ2ZXI6CisJY2FzZSBJU0NTSV9CT09UX0lOSV9QUklfUkFESVVTX1NFUlZFUjoKIAkJc3RyICs9IHNwcmludGZfaXBhZGRyKHN0ciwgaW5pdGlhdG9yLT5wcmlfcmFkaXVzX3NlcnZlcik7CiAJCWJyZWFrOwotCWNhc2UgaWJmdF9pbml0X3NlY19yYWRpdXNfc2VydmVyOgorCWNhc2UgSVNDU0lfQk9PVF9JTklfU0VDX1JBRElVU19TRVJWRVI6CiAJCXN0ciArPSBzcHJpbnRmX2lwYWRkcihzdHIsIGluaXRpYXRvci0+c2VjX3JhZGl1c19zZXJ2ZXIpOwogCQlicmVhazsKLQljYXNlIGliZnRfaW5pdF9pbml0aWF0b3JfbmFtZToKKwljYXNlIElTQ1NJX0JPT1RfSU5JX0lOSVRJQVRPUl9OQU1FOgogCQlzdHIgKz0gc3ByaW50Zl9zdHJpbmcoc3RyLCBpbml0aWF0b3ItPmluaXRpYXRvcl9uYW1lX2xlbiwKIAkJCQkgICAgICAoY2hhciAqKWliZnRfbG9jICsKIAkJCQkgICAgICBpbml0aWF0b3ItPmluaXRpYXRvcl9uYW1lX29mZik7CkBAIC0zNzMsMTAgKzI4Miw5IEBACiAJcmV0dXJuIHN0ciAtIGJ1ZjsKIH0KIAotc3RhdGljIHNzaXplX3QgaWJmdF9hdHRyX3Nob3dfbmljKHN0cnVjdCBpYmZ0X2tvYmplY3QgKmVudHJ5LAotCQkJCSAgc3RydWN0IGliZnRfYXR0cmlidXRlICphdHRyLAotCQkJCSAgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgaWJmdF9hdHRyX3Nob3dfbmljKHZvaWQgKmRhdGEsIGludCB0eXBlLCBjaGFyICpidWYpCiB7CisJc3RydWN0IGliZnRfa29iamVjdCAqZW50cnkgPSBkYXRhOwogCXN0cnVjdCBpYmZ0X25pYyAqbmljID0gZW50cnktPm5pYzsKIAl2b2lkICppYmZ0X2xvYyA9IGVudHJ5LT5oZWFkZXI7CiAJY2hhciAqc3RyID0gYnVmOwpAQCAtMzg1LDQyICsyOTMsNDIgQEAKIAlpZiAoIW5pYykKIAkJcmV0dXJuIDA7CiAKLQlzd2l0Y2ggKGF0dHItPnR5cGUpIHsKLQljYXNlIGliZnRfZXRoX2luZGV4OgorCXN3aXRjaCAodHlwZSkgeworCWNhc2UgSVNDU0lfQk9PVF9FVEhfSU5ERVg6CiAJCXN0ciArPSBzcHJpbnRmKHN0ciwgIiVkXG4iLCBuaWMtPmhkci5pbmRleCk7CiAJCWJyZWFrOwotCWNhc2UgaWJmdF9ldGhfZmxhZ3M6CisJY2FzZSBJU0NTSV9CT09UX0VUSF9GTEFHUzoKIAkJc3RyICs9IHNwcmludGYoc3RyLCAiJWRcbiIsIG5pYy0+aGRyLmZsYWdzKTsKIAkJYnJlYWs7Ci0JY2FzZSBpYmZ0X2V0aF9pcF9hZGRyOgorCWNhc2UgSVNDU0lfQk9PVF9FVEhfSVBfQUREUjoKIAkJc3RyICs9IHNwcmludGZfaXBhZGRyKHN0ciwgbmljLT5pcF9hZGRyKTsKIAkJYnJlYWs7Ci0JY2FzZSBpYmZ0X2V0aF9zdWJuZXRfbWFzazoKKwljYXNlIElTQ1NJX0JPT1RfRVRIX1NVQk5FVF9NQVNLOgogCQl2YWwgPSBjcHVfdG9fYmUzMih+KCgxIDw8ICgzMi1uaWMtPnN1Ym5ldF9tYXNrX3ByZWZpeCkpLTEpKTsKIAkJc3RyICs9IHNwcmludGYoc3RyLCAiJXBJNCIsICZ2YWwpOwogCQlicmVhazsKLQljYXNlIGliZnRfZXRoX29yaWdpbjoKKwljYXNlIElTQ1NJX0JPT1RfRVRIX09SSUdJTjoKIAkJc3RyICs9IHNwcmludGYoc3RyLCAiJWRcbiIsIG5pYy0+b3JpZ2luKTsKIAkJYnJlYWs7Ci0JY2FzZSBpYmZ0X2V0aF9nYXRld2F5OgorCWNhc2UgSVNDU0lfQk9PVF9FVEhfR0FURVdBWToKIAkJc3RyICs9IHNwcmludGZfaXBhZGRyKHN0ciwgbmljLT5nYXRld2F5KTsKIAkJYnJlYWs7Ci0JY2FzZSBpYmZ0X2V0aF9wcmltYXJ5X2RuczoKKwljYXNlIElTQ1NJX0JPT1RfRVRIX1BSSU1BUllfRE5TOgogCQlzdHIgKz0gc3ByaW50Zl9pcGFkZHIoc3RyLCBuaWMtPnByaW1hcnlfZG5zKTsKIAkJYnJlYWs7Ci0JY2FzZSBpYmZ0X2V0aF9zZWNvbmRhcnlfZG5zOgorCWNhc2UgSVNDU0lfQk9PVF9FVEhfU0VDT05EQVJZX0ROUzoKIAkJc3RyICs9IHNwcmludGZfaXBhZGRyKHN0ciwgbmljLT5zZWNvbmRhcnlfZG5zKTsKIAkJYnJlYWs7Ci0JY2FzZSBpYmZ0X2V0aF9kaGNwOgorCWNhc2UgSVNDU0lfQk9PVF9FVEhfREhDUDoKIAkJc3RyICs9IHNwcmludGZfaXBhZGRyKHN0ciwgbmljLT5kaGNwKTsKIAkJYnJlYWs7Ci0JY2FzZSBpYmZ0X2V0aF92bGFuOgorCWNhc2UgSVNDU0lfQk9PVF9FVEhfVkxBTjoKIAkJc3RyICs9IHNwcmludGYoc3RyLCAiJWRcbiIsIG5pYy0+dmxhbik7CiAJCWJyZWFrOwotCWNhc2UgaWJmdF9ldGhfbWFjOgorCWNhc2UgSVNDU0lfQk9PVF9FVEhfTUFDOgogCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlcE1cbiIsIG5pYy0+bWFjKTsKIAkJYnJlYWs7Ci0JY2FzZSBpYmZ0X2V0aF9ob3N0bmFtZToKKwljYXNlIElTQ1NJX0JPT1RfRVRIX0hPU1ROQU1FOgogCQlzdHIgKz0gc3ByaW50Zl9zdHJpbmcoc3RyLCBuaWMtPmhvc3RuYW1lX2xlbiwKIAkJCQkgICAgICAoY2hhciAqKWliZnRfbG9jICsgbmljLT5ob3N0bmFtZV9vZmYpOwogCQlicmVhazsKQEAgLTQzMSwxMCArMzM5LDkgQEAKIAlyZXR1cm4gc3RyIC0gYnVmOwogfTsKIAotc3RhdGljIHNzaXplX3QgaWJmdF9hdHRyX3Nob3dfdGFyZ2V0KHN0cnVjdCBpYmZ0X2tvYmplY3QgKmVudHJ5LAotCQkJCSAgICAgc3RydWN0IGliZnRfYXR0cmlidXRlICphdHRyLAotCQkJCSAgICAgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgaWJmdF9hdHRyX3Nob3dfdGFyZ2V0KHZvaWQgKmRhdGEsIGludCB0eXBlLCBjaGFyICpidWYpCiB7CisJc3RydWN0IGliZnRfa29iamVjdCAqZW50cnkgPSBkYXRhOwogCXN0cnVjdCBpYmZ0X3RndCAqdGd0ID0gZW50cnktPnRndDsKIAl2b2lkICppYmZ0X2xvYyA9IGVudHJ5LT5oZWFkZXI7CiAJY2hhciAqc3RyID0gYnVmOwpAQCAtNDQzLDQ4ICszNTAsNDggQEAKIAlpZiAoIXRndCkKIAkJcmV0dXJuIDA7CiAKLQlzd2l0Y2ggKGF0dHItPnR5cGUpIHsKLQljYXNlIGliZnRfdGd0X2luZGV4OgorCXN3aXRjaCAodHlwZSkgeworCWNhc2UgSVNDU0lfQk9PVF9UR1RfSU5ERVg6CiAJCXN0ciArPSBzcHJpbnRmKHN0ciwgIiVkXG4iLCB0Z3QtPmhkci5pbmRleCk7CiAJCWJyZWFrOwotCWNhc2UgaWJmdF90Z3RfZmxhZ3M6CisJY2FzZSBJU0NTSV9CT09UX1RHVF9GTEFHUzoKIAkJc3RyICs9IHNwcmludGYoc3RyLCAiJWRcbiIsIHRndC0+aGRyLmZsYWdzKTsKIAkJYnJlYWs7Ci0JY2FzZSBpYmZ0X3RndF9pcF9hZGRyOgorCWNhc2UgSVNDU0lfQk9PVF9UR1RfSVBfQUREUjoKIAkJc3RyICs9IHNwcmludGZfaXBhZGRyKHN0ciwgdGd0LT5pcF9hZGRyKTsKIAkJYnJlYWs7Ci0JY2FzZSBpYmZ0X3RndF9wb3J0OgorCWNhc2UgSVNDU0lfQk9PVF9UR1RfUE9SVDoKIAkJc3RyICs9IHNwcmludGYoc3RyLCAiJWRcbiIsIHRndC0+cG9ydCk7CiAJCWJyZWFrOwotCWNhc2UgaWJmdF90Z3RfbHVuOgorCWNhc2UgSVNDU0lfQk9PVF9UR1RfTFVOOgogCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQogCQkJc3RyICs9IHNwcmludGYoc3RyLCAiJXgiLCAodTgpdGd0LT5sdW5baV0pOwogCQlzdHIgKz0gc3ByaW50ZihzdHIsICJcbiIpOwogCQlicmVhazsKLQljYXNlIGliZnRfdGd0X25pY19hc3NvYzoKKwljYXNlIElTQ1NJX0JPT1RfVEdUX05JQ19BU1NPQzoKIAkJc3RyICs9IHNwcmludGYoc3RyLCAiJWRcbiIsIHRndC0+bmljX2Fzc29jKTsKIAkJYnJlYWs7Ci0JY2FzZSBpYmZ0X3RndF9jaGFwX3R5cGU6CisJY2FzZSBJU0NTSV9CT09UX1RHVF9DSEFQX1RZUEU6CiAJCXN0ciArPSBzcHJpbnRmKHN0ciwgIiVkXG4iLCB0Z3QtPmNoYXBfdHlwZSk7CiAJCWJyZWFrOwotCWNhc2UgaWJmdF90Z3RfbmFtZToKKwljYXNlIElTQ1NJX0JPT1RfVEdUX05BTUU6CiAJCXN0ciArPSBzcHJpbnRmX3N0cmluZyhzdHIsIHRndC0+dGd0X25hbWVfbGVuLAogCQkJCSAgICAgIChjaGFyICopaWJmdF9sb2MgKyB0Z3QtPnRndF9uYW1lX29mZik7CiAJCWJyZWFrOwotCWNhc2UgaWJmdF90Z3RfY2hhcF9uYW1lOgorCWNhc2UgSVNDU0lfQk9PVF9UR1RfQ0hBUF9OQU1FOgogCQlzdHIgKz0gc3ByaW50Zl9zdHJpbmcoc3RyLCB0Z3QtPmNoYXBfbmFtZV9sZW4sCiAJCQkJICAgICAgKGNoYXIgKilpYmZ0X2xvYyArIHRndC0+Y2hhcF9uYW1lX29mZik7CiAJCWJyZWFrOwotCWNhc2UgaWJmdF90Z3RfY2hhcF9zZWNyZXQ6CisJY2FzZSBJU0NTSV9CT09UX1RHVF9DSEFQX1NFQ1JFVDoKIAkJc3RyICs9IHNwcmludGZfc3RyaW5nKHN0ciwgdGd0LT5jaGFwX3NlY3JldF9sZW4sCiAJCQkJICAgICAgKGNoYXIgKilpYmZ0X2xvYyArIHRndC0+Y2hhcF9zZWNyZXRfb2ZmKTsKIAkJYnJlYWs7Ci0JY2FzZSBpYmZ0X3RndF9yZXZfY2hhcF9uYW1lOgorCWNhc2UgSVNDU0lfQk9PVF9UR1RfUkVWX0NIQVBfTkFNRToKIAkJc3RyICs9IHNwcmludGZfc3RyaW5nKHN0ciwgdGd0LT5yZXZfY2hhcF9uYW1lX2xlbiwKIAkJCQkgICAgICAoY2hhciAqKWliZnRfbG9jICsKIAkJCQkgICAgICB0Z3QtPnJldl9jaGFwX25hbWVfb2ZmKTsKIAkJYnJlYWs7Ci0JY2FzZSBpYmZ0X3RndF9yZXZfY2hhcF9zZWNyZXQ6CisJY2FzZSBJU0NTSV9CT09UX1RHVF9SRVZfQ0hBUF9TRUNSRVQ6CiAJCXN0ciArPSBzcHJpbnRmX3N0cmluZyhzdHIsIHRndC0+cmV2X2NoYXBfc2VjcmV0X2xlbiwKIAkJCQkgICAgICAoY2hhciAqKWliZnRfbG9jICsKIAkJCQkgICAgICB0Z3QtPnJldl9jaGFwX3NlY3JldF9vZmYpOwpAQCAtNDk2LDUyICs0MDMsMTkgQEAKIAlyZXR1cm4gc3RyIC0gYnVmOwogfQogCi0vKgotICogVGhlIHJvdXRpbmUgY2FsbGVkIGZvciBhbGwgc3lzZnMgYXR0cmlidXRlcy4KLSAqLwotc3RhdGljIHNzaXplX3QgaWJmdF9zaG93X2F0dHJpYnV0ZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQkgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKLQkJCQkgICAgY2hhciAqYnVmKQotewotCXN0cnVjdCBpYmZ0X2tvYmplY3QgKmRldiA9Ci0JCWNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgaWJmdF9rb2JqZWN0LCBrb2JqKTsKLQlzdHJ1Y3QgaWJmdF9hdHRyaWJ1dGUgKmliZnRfYXR0ciA9Ci0JCWNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgaWJmdF9hdHRyaWJ1dGUsIGF0dHIpOwotCXNzaXplX3QgcmV0ID0gLUVJTzsKLQljaGFyICpzdHIgPSBidWY7Ci0KLQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCXJldHVybiAtRUFDQ0VTOwotCi0JaWYgKGliZnRfYXR0ci0+c2hvdykKLQkJcmV0ID0gaWJmdF9hdHRyLT5zaG93KGRldiwgaWJmdF9hdHRyLCBzdHIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgaWJmdF9hdHRyX29wcyA9IHsKLQkuc2hvdyA9IGliZnRfc2hvd19hdHRyaWJ1dGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBpYmZ0X2t0eXBlID0gewotCS5yZWxlYXNlID0gaWJmdF9yZWxlYXNlLAotCS5zeXNmc19vcHMgPSAmaWJmdF9hdHRyX29wcywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qga3NldCAqaWJmdF9rc2V0OwotCiBzdGF0aWMgaW50IF9faW5pdCBpYmZ0X2NoZWNrX2RldmljZSh2b2lkKQogewogCWludCBsZW47CiAJdTggKnBvczsKIAl1OCBjc3VtID0gMDsKIAotCWxlbiA9IGliZnRfYWRkci0+bGVuZ3RoOworCWxlbiA9IGliZnRfYWRkci0+aGVhZGVyLmxlbmd0aDsKIAogCS8qIFNhbml0eSBjaGVja2luZyBvZiBpQkZULiAqLwotCWlmIChpYmZ0X2FkZHItPnJldmlzaW9uICE9IDEpIHsKKwlpZiAoaWJmdF9hZGRyLT5oZWFkZXIucmV2aXNpb24gIT0gMSkgewogCQlwcmludGsoS0VSTl9FUlIgImlCRlQgbW9kdWxlIHN1cHBvcnRzIG9ubHkgcmV2aXNpb24gMSwgIiBcCi0JCQkJIndoaWxlIHRoaXMgaXMgJWQuXG4iLCBpYmZ0X2FkZHItPnJldmlzaW9uKTsKKwkJCQkid2hpbGUgdGhpcyBpcyAlZC5cbiIsCisJCQkJaWJmdF9hZGRyLT5oZWFkZXIucmV2aXNpb24pOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAJZm9yIChwb3MgPSAodTggKilpYmZ0X2FkZHI7IHBvcyA8ICh1OCAqKWliZnRfYWRkciArIGxlbjsgcG9zKyspCkBAIC01NTYsMTIgKzQzMCwxNDkgQEAKIH0KIAogLyoKKyAqIEhlbHBlciByb3V0aW5lcnMgdG8gY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRoZSBlbnRyeSBpcyB2YWxpZAorICogaW4gdGhlIHByb3BlciBpQkZUIHN0cnVjdHVyZS4KKyAqLworc3RhdGljIG1vZGVfdCBpYmZ0X2NoZWNrX25pY19mb3Iodm9pZCAqZGF0YSwgaW50IHR5cGUpCit7CisJc3RydWN0IGliZnRfa29iamVjdCAqZW50cnkgPSBkYXRhOworCXN0cnVjdCBpYmZ0X25pYyAqbmljID0gZW50cnktPm5pYzsKKwltb2RlX3QgcmMgPSAwOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBJU0NTSV9CT09UX0VUSF9JTkRFWDoKKwljYXNlIElTQ1NJX0JPT1RfRVRIX0ZMQUdTOgorCQlyYyA9IFNfSVJVR087CisJCWJyZWFrOworCWNhc2UgSVNDU0lfQk9PVF9FVEhfSVBfQUREUjoKKwkJaWYgKG1lbWNtcChuaWMtPmlwX2FkZHIsIG51bGxzLCBzaXplb2YobmljLT5pcF9hZGRyKSkpCisJCQlyYyA9IFNfSVJVR087CisJCWJyZWFrOworCWNhc2UgSVNDU0lfQk9PVF9FVEhfU1VCTkVUX01BU0s6CisJCWlmIChuaWMtPnN1Ym5ldF9tYXNrX3ByZWZpeCkKKwkJCXJjID0gU19JUlVHTzsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9CT09UX0VUSF9PUklHSU46CisJCXJjID0gU19JUlVHTzsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9CT09UX0VUSF9HQVRFV0FZOgorCQlpZiAobWVtY21wKG5pYy0+Z2F0ZXdheSwgbnVsbHMsIHNpemVvZihuaWMtPmdhdGV3YXkpKSkKKwkJCXJjID0gU19JUlVHTzsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9CT09UX0VUSF9QUklNQVJZX0ROUzoKKwkJaWYgKG1lbWNtcChuaWMtPnByaW1hcnlfZG5zLCBudWxscywKKwkJCSAgIHNpemVvZihuaWMtPnByaW1hcnlfZG5zKSkpCisJCQlyYyA9IFNfSVJVR087CisJCWJyZWFrOworCWNhc2UgSVNDU0lfQk9PVF9FVEhfU0VDT05EQVJZX0ROUzoKKwkJaWYgKG1lbWNtcChuaWMtPnNlY29uZGFyeV9kbnMsIG51bGxzLAorCQkJICAgc2l6ZW9mKG5pYy0+c2Vjb25kYXJ5X2RucykpKQorCQkJcmMgPSBTX0lSVUdPOworCQlicmVhazsKKwljYXNlIElTQ1NJX0JPT1RfRVRIX0RIQ1A6CisJCWlmIChtZW1jbXAobmljLT5kaGNwLCBudWxscywgc2l6ZW9mKG5pYy0+ZGhjcCkpKQorCQkJcmMgPSBTX0lSVUdPOworCQlicmVhazsKKwljYXNlIElTQ1NJX0JPT1RfRVRIX1ZMQU46CisJY2FzZSBJU0NTSV9CT09UX0VUSF9NQUM6CisJCXJjID0gU19JUlVHTzsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9CT09UX0VUSF9IT1NUTkFNRToKKwkJaWYgKG5pYy0+aG9zdG5hbWVfb2ZmKQorCQkJcmMgPSBTX0lSVUdPOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBtb2RlX3QgX19pbml0IGliZnRfY2hlY2tfdGd0X2Zvcih2b2lkICpkYXRhLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgaWJmdF9rb2JqZWN0ICplbnRyeSA9IGRhdGE7CisJc3RydWN0IGliZnRfdGd0ICp0Z3QgPSBlbnRyeS0+dGd0OworCW1vZGVfdCByYyA9IDA7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIElTQ1NJX0JPT1RfVEdUX0lOREVYOgorCWNhc2UgSVNDU0lfQk9PVF9UR1RfRkxBR1M6CisJY2FzZSBJU0NTSV9CT09UX1RHVF9JUF9BRERSOgorCWNhc2UgSVNDU0lfQk9PVF9UR1RfUE9SVDoKKwljYXNlIElTQ1NJX0JPT1RfVEdUX0xVTjoKKwljYXNlIElTQ1NJX0JPT1RfVEdUX05JQ19BU1NPQzoKKwljYXNlIElTQ1NJX0JPT1RfVEdUX0NIQVBfVFlQRToKKwkJcmMgPSBTX0lSVUdPOworCWNhc2UgSVNDU0lfQk9PVF9UR1RfTkFNRToKKwkJaWYgKHRndC0+dGd0X25hbWVfbGVuKQorCQkJcmMgPSBTX0lSVUdPOworCQlicmVhazsKKwljYXNlIElTQ1NJX0JPT1RfVEdUX0NIQVBfTkFNRToKKwljYXNlIElTQ1NJX0JPT1RfVEdUX0NIQVBfU0VDUkVUOgorCQlpZiAodGd0LT5jaGFwX25hbWVfbGVuKQorCQkJcmMgPSBTX0lSVUdPOworCQlicmVhazsKKwljYXNlIElTQ1NJX0JPT1RfVEdUX1JFVl9DSEFQX05BTUU6CisJY2FzZSBJU0NTSV9CT09UX1RHVF9SRVZfQ0hBUF9TRUNSRVQ6CisJCWlmICh0Z3QtPnJldl9jaGFwX25hbWVfbGVuKQorCQkJcmMgPSBTX0lSVUdPOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBtb2RlX3QgX19pbml0IGliZnRfY2hlY2tfaW5pdGlhdG9yX2Zvcih2b2lkICpkYXRhLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgaWJmdF9rb2JqZWN0ICplbnRyeSA9IGRhdGE7CisJc3RydWN0IGliZnRfaW5pdGlhdG9yICppbml0ID0gZW50cnktPmluaXRpYXRvcjsKKwltb2RlX3QgcmMgPSAwOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBJU0NTSV9CT09UX0lOSV9JTkRFWDoKKwljYXNlIElTQ1NJX0JPT1RfSU5JX0ZMQUdTOgorCQlyYyA9IFNfSVJVR087CisJCWJyZWFrOworCWNhc2UgSVNDU0lfQk9PVF9JTklfSVNOU19TRVJWRVI6CisJCWlmIChtZW1jbXAoaW5pdC0+aXNuc19zZXJ2ZXIsIG51bGxzLAorCQkJICAgc2l6ZW9mKGluaXQtPmlzbnNfc2VydmVyKSkpCisJCQlyYyA9IFNfSVJVR087CisJCWJyZWFrOworCWNhc2UgSVNDU0lfQk9PVF9JTklfU0xQX1NFUlZFUjoKKwkJaWYgKG1lbWNtcChpbml0LT5zbHBfc2VydmVyLCBudWxscywKKwkJCSAgIHNpemVvZihpbml0LT5zbHBfc2VydmVyKSkpCisJCQlyYyA9IFNfSVJVR087CisJCWJyZWFrOworCWNhc2UgSVNDU0lfQk9PVF9JTklfUFJJX1JBRElVU19TRVJWRVI6CisJCWlmIChtZW1jbXAoaW5pdC0+cHJpX3JhZGl1c19zZXJ2ZXIsIG51bGxzLAorCQkJICAgc2l6ZW9mKGluaXQtPnByaV9yYWRpdXNfc2VydmVyKSkpCisJCQlyYyA9IFNfSVJVR087CisJCWJyZWFrOworCWNhc2UgSVNDU0lfQk9PVF9JTklfU0VDX1JBRElVU19TRVJWRVI6CisJCWlmIChtZW1jbXAoaW5pdC0+c2VjX3JhZGl1c19zZXJ2ZXIsIG51bGxzLAorCQkJICAgc2l6ZW9mKGluaXQtPnNlY19yYWRpdXNfc2VydmVyKSkpCisJCQlyYyA9IFNfSVJVR087CisJCWJyZWFrOworCWNhc2UgSVNDU0lfQk9PVF9JTklfSU5JVElBVE9SX05BTUU6CisJCWlmIChpbml0LT5pbml0aWF0b3JfbmFtZV9sZW4pCisJCQlyYyA9IFNfSVJVR087CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiByYzsKK30KKworLyoKICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgaWJmdF9yZWdpc3Rlcl9rb2JqZWN0cy4KICAqLwotc3RhdGljIGludCBfX2luaXQgaWJmdF9jcmVhdGVfa29iamVjdChzdHJ1Y3QgaWJmdF90YWJsZV9oZWFkZXIgKmhlYWRlciwKLQkJCQkgICAgICAgc3RydWN0IGliZnRfaGRyICpoZHIsCi0JCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCitzdGF0aWMgaW50IF9faW5pdCBpYmZ0X2NyZWF0ZV9rb2JqZWN0KHN0cnVjdCBhY3BpX3RhYmxlX2liZnQgKmhlYWRlciwKKwkJCQkgICAgICBzdHJ1Y3QgaWJmdF9oZHIgKmhkcikKIHsKKwlzdHJ1Y3QgaXNjc2lfYm9vdF9rb2JqICpib290X2tvYmogPSBOVUxMOwogCXN0cnVjdCBpYmZ0X2tvYmplY3QgKmliZnRfa29iaiA9IE5VTEw7CiAJc3RydWN0IGliZnRfbmljICpuaWMgPSAoc3RydWN0IGliZnRfbmljICopaGRyOwogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwpAQCAtNTc4LDE0ICs1ODksNDcgQEAKIAljYXNlIGlkX2luaXRpYXRvcjoKIAkJcmMgPSBpYmZ0X3ZlcmlmeV9oZHIoImluaXRpYXRvciIsIGhkciwgaWRfaW5pdGlhdG9yLAogCQkJCSAgICAgc2l6ZW9mKCppYmZ0X2tvYmotPmluaXRpYXRvcikpOworCQlpZiAocmMpCisJCQlicmVhazsKKworCQlib290X2tvYmogPSBpc2NzaV9ib290X2NyZWF0ZV9pbml0aWF0b3IoYm9vdF9rc2V0LCBoZHItPmluZGV4LAorCQkJCQkJaWJmdF9rb2JqLAorCQkJCQkJaWJmdF9hdHRyX3Nob3dfaW5pdGlhdG9yLAorCQkJCQkJaWJmdF9jaGVja19pbml0aWF0b3JfZm9yKTsKKwkJaWYgKCFib290X2tvYmopIHsKKwkJCXJjID0gLUVOT01FTTsKKwkJCWdvdG8gZnJlZV9pYmZ0X29iajsKKwkJfQogCQlicmVhazsKIAljYXNlIGlkX25pYzoKIAkJcmMgPSBpYmZ0X3ZlcmlmeV9oZHIoImV0aGVybmV0IiwgaGRyLCBpZF9uaWMsCiAJCQkJICAgICBzaXplb2YoKmliZnRfa29iai0+bmljKSk7CisJCWlmIChyYykKKwkJCWJyZWFrOworCisJCWJvb3Rfa29iaiA9IGlzY3NpX2Jvb3RfY3JlYXRlX2V0aGVybmV0KGJvb3Rfa3NldCwgaGRyLT5pbmRleCwKKwkJCQkJCSAgICAgICBpYmZ0X2tvYmosCisJCQkJCQkgICAgICAgaWJmdF9hdHRyX3Nob3dfbmljLAorCQkJCQkJICAgICAgIGliZnRfY2hlY2tfbmljX2Zvcik7CisJCWlmICghYm9vdF9rb2JqKSB7CisJCQlyYyA9IC1FTk9NRU07CisJCQlnb3RvIGZyZWVfaWJmdF9vYmo7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBpZF90YXJnZXQ6CiAJCXJjID0gaWJmdF92ZXJpZnlfaGRyKCJ0YXJnZXQiLCBoZHIsIGlkX3RhcmdldCwKIAkJCQkgICAgIHNpemVvZigqaWJmdF9rb2JqLT50Z3QpKTsKKwkJaWYgKHJjKQorCQkJYnJlYWs7CisKKwkJYm9vdF9rb2JqID0gaXNjc2lfYm9vdF9jcmVhdGVfdGFyZ2V0KGJvb3Rfa3NldCwgaGRyLT5pbmRleCwKKwkJCQkJCSAgICAgaWJmdF9rb2JqLAorCQkJCQkJICAgICBpYmZ0X2F0dHJfc2hvd190YXJnZXQsCisJCQkJCQkgICAgIGliZnRfY2hlY2tfdGd0X2Zvcik7CisJCWlmICghYm9vdF9rb2JqKSB7CisJCQlyYyA9IC1FTk9NRU07CisJCQlnb3RvIGZyZWVfaWJmdF9vYmo7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBpZF9yZXNlcnZlZDoKIAljYXNlIGlkX2NvbnRyb2w6CkBAIC01OTYsMjkgKzY0MCwxNyBAQAogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiAiaUJGVCBoYXMgdW5rbm93biBzdHJ1Y3R1cmUgdHlwZSAoJWQpLiAiIFwKIAkJCQkiUmVwb3J0IHRoaXMgYnVnIHRvICUuNnMhXG4iLCBoZHItPmlkLAotCQkJCWhlYWRlci0+b2VtX2lkKTsKKwkJCQloZWFkZXItPmhlYWRlci5vZW1faWQpOwogCQlyYyA9IDE7CiAJCWJyZWFrOwogCX0KIAogCWlmIChyYykgewogCQkvKiBTa2lwIGFkZGluZyB0aGlzIGtvYmplY3QsIGJ1dCBleGl0IHdpdGggbm9uLWZhdGFsIGVycm9yLiAqLwotCQlrZnJlZShpYmZ0X2tvYmopOwotCQlnb3RvIG91dF9pbnZhbGlkX3N0cnVjdDsKKwkJcmMgPSAwOworCQlnb3RvIGZyZWVfaWJmdF9vYmo7CiAJfQogCi0JaWJmdF9rb2JqLT5rb2JqLmtzZXQgPSBpYmZ0X2tzZXQ7Ci0KLQlyYyA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKCZpYmZ0X2tvYmotPmtvYmosICZpYmZ0X2t0eXBlLAotCQkJCSAgTlVMTCwgaWJmdF9pZF9uYW1lc1toZHItPmlkXSwgaGRyLT5pbmRleCk7Ci0KLQlpZiAocmMpIHsKLQkJa2ZyZWUoaWJmdF9rb2JqKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0Ja29iamVjdF91ZXZlbnQoJmliZnRfa29iai0+a29iaiwgS09CSl9BREQpOwotCiAJaWYgKGhkci0+aWQgPT0gaWRfbmljKSB7CiAJCS8qCiAJCSogV2UgZG9uJ3Qgc2VhcmNoIGZvciB0aGUgZGV2aWNlIGluIG90aGVyIGRvbWFpbnMgdGhhbgpAQCAtNjI5LDE5ICs2NjEsMTYgQEAKIAkJcGNpX2RldiA9IHBjaV9nZXRfYnVzX2FuZF9zbG90KChuaWMtPnBjaV9iZGYgJiAweGZmMDApID4+IDgsCiAJCQkJCSAgICAgICAobmljLT5wY2lfYmRmICYgMHhmZikpOwogCQlpZiAocGNpX2RldikgewotCQkJcmMgPSBzeXNmc19jcmVhdGVfbGluaygmaWJmdF9rb2JqLT5rb2JqLAorCQkJcmMgPSBzeXNmc19jcmVhdGVfbGluaygmYm9vdF9rb2JqLT5rb2JqLAogCQkJCQkgICAgICAgJnBjaV9kZXYtPmRldi5rb2JqLCAiZGV2aWNlIik7CiAJCQlwY2lfZGV2X3B1dChwY2lfZGV2KTsKIAkJfQogCX0KLQotCS8qIE5vdGhpbmcgYnJva2Ugc28gbGV0cyBhZGQgaXQgdG8gdGhlIGxpc3QuICovCi0JbGlzdF9hZGRfdGFpbCgmaWJmdF9rb2JqLT5ub2RlLCBsaXN0KTsKLW91dDoKLQlyZXR1cm4gcmM7Ci1vdXRfaW52YWxpZF9zdHJ1Y3Q6Ci0JLyogVW5zdXBwb3J0ZWQgc3RydWN0cyBhcmUgc2tpcHBlZC4gKi8KIAlyZXR1cm4gMDsKKworZnJlZV9pYmZ0X29iajoKKwlrZnJlZShpYmZ0X2tvYmopOworCXJldHVybiByYzsKIH0KIAogLyoKQEAgLTY0OSw4ICs2NzgsNyBAQAogICogZm91bmQgYWRkIHRoZW0gb24gdGhlIHBhc3NlZC1pbiBsaXN0LiBXZSBkbyBub3Qgc3VwcG9ydCB0aGUgb3RoZXIKICAqIGZpZWxkcyBhdCB0aGlzIHBvaW50LCBzbyB0aGV5IGFyZSBza2lwcGVkLgogICovCi1zdGF0aWMgaW50IF9faW5pdCBpYmZ0X3JlZ2lzdGVyX2tvYmplY3RzKHN0cnVjdCBpYmZ0X3RhYmxlX2hlYWRlciAqaGVhZGVyLAotCQkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCitzdGF0aWMgaW50IF9faW5pdCBpYmZ0X3JlZ2lzdGVyX2tvYmplY3RzKHN0cnVjdCBhY3BpX3RhYmxlX2liZnQgKmhlYWRlcikKIHsKIAlzdHJ1Y3QgaWJmdF9jb250cm9sICpjb250cm9sID0gTlVMTDsKIAl2b2lkICpwdHIsICplbmQ7CkBAIC02NjAsNyArNjg4LDcgQEAKIAogCWNvbnRyb2wgPSAodm9pZCAqKWhlYWRlciArIHNpemVvZigqaGVhZGVyKTsKIAllbmQgPSAodm9pZCAqKWNvbnRyb2wgKyBjb250cm9sLT5oZHIubGVuZ3RoOwotCWVvdF9vZmZzZXQgPSAodm9pZCAqKWhlYWRlciArIGhlYWRlci0+bGVuZ3RoIC0gKHZvaWQgKiljb250cm9sOworCWVvdF9vZmZzZXQgPSAodm9pZCAqKWhlYWRlciArIGhlYWRlci0+aGVhZGVyLmxlbmd0aCAtICh2b2lkICopY29udHJvbDsKIAlyYyA9IGliZnRfdmVyaWZ5X2hkcigiY29udHJvbCIsIChzdHJ1Y3QgaWJmdF9oZHIgKiljb250cm9sLCBpZF9jb250cm9sLAogCQkJICAgICBzaXplb2YoKmNvbnRyb2wpKTsKIApAQCAtNjcyLDEwICs3MDAsMTAgQEAKIAl9CiAJZm9yIChwdHIgPSAmY29udHJvbC0+aW5pdGlhdG9yX29mZjsgcHRyIDwgZW5kOyBwdHIgKz0gc2l6ZW9mKHUxNikpIHsKIAkJb2Zmc2V0ID0gKih1MTYgKilwdHI7Ci0JCWlmIChvZmZzZXQgJiYgb2Zmc2V0IDwgaGVhZGVyLT5sZW5ndGggJiYgb2Zmc2V0IDwgZW90X29mZnNldCkgeworCQlpZiAob2Zmc2V0ICYmIG9mZnNldCA8IGhlYWRlci0+aGVhZGVyLmxlbmd0aCAmJgorCQkJCQkJb2Zmc2V0IDwgZW90X29mZnNldCkgewogCQkJcmMgPSBpYmZ0X2NyZWF0ZV9rb2JqZWN0KGhlYWRlciwKLQkJCQkJCSAodm9pZCAqKWhlYWRlciArIG9mZnNldCwKLQkJCQkJCSBsaXN0KTsKKwkJCQkJCSAodm9pZCAqKWhlYWRlciArIG9mZnNldCk7CiAJCQlpZiAocmMpCiAJCQkJYnJlYWs7CiAJCX0KQEAgLTY4NCwyNDAgKzcxMiwyOCBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHZvaWQgaWJmdF91bnJlZ2lzdGVyKHN0cnVjdCBsaXN0X2hlYWQgKmF0dHJfbGlzdCwKLQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqa29ial9saXN0KQorc3RhdGljIHZvaWQgaWJmdF91bnJlZ2lzdGVyKHZvaWQpCiB7Ci0Jc3RydWN0IGliZnRfa29iamVjdCAqZGF0YSA9IE5VTEwsICpuOwotCXN0cnVjdCBpYmZ0X2F0dHJpYnV0ZSAqYXR0ciA9IE5VTEwsICptOworCXN0cnVjdCBpc2NzaV9ib290X2tvYmogKmJvb3Rfa29iaiwgKnRtcF9rb2JqOworCXN0cnVjdCBpYmZ0X2tvYmplY3QgKmliZnRfa29iajsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhdHRyLCBtLCBhdHRyX2xpc3QsIG5vZGUpIHsKLQkJc3lzZnNfcmVtb3ZlX2ZpbGUoYXR0ci0+a29iaiwgJmF0dHItPmF0dHIpOwotCQlsaXN0X2RlbCgmYXR0ci0+bm9kZSk7Ci0JCWtmcmVlKGF0dHIpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShib290X2tvYmosIHRtcF9rb2JqLAorCQkJCSAmYm9vdF9rc2V0LT5rb2JqX2xpc3QsIGxpc3QpIHsKKwkJaWJmdF9rb2JqID0gYm9vdF9rb2JqLT5kYXRhOworCQlpZiAoaWJmdF9rb2JqLT5oZHItPmlkID09IGlkX25pYykKKwkJCXN5c2ZzX3JlbW92ZV9saW5rKCZib290X2tvYmotPmtvYmosICJkZXZpY2UiKTsKIAl9OwotCWxpc3RfZGVsX2luaXQoYXR0cl9saXN0KTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkYXRhLCBuLCBrb2JqX2xpc3QsIG5vZGUpIHsKLQkJbGlzdF9kZWwoJmRhdGEtPm5vZGUpOwotCQlpZiAoZGF0YS0+aGRyLT5pZCA9PSBpZF9uaWMpCi0JCQlzeXNmc19yZW1vdmVfbGluaygmZGF0YS0+a29iaiwgImRldmljZSIpOwotCQlrb2JqZWN0X3B1dCgmZGF0YS0+a29iaik7Ci0JfTsKLQlsaXN0X2RlbF9pbml0KGtvYmpfbGlzdCk7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGliZnRfY3JlYXRlX2F0dHJpYnV0ZShzdHJ1Y3QgaWJmdF9rb2JqZWN0ICprb2JqX2RhdGEsCi0JCQkJCSBpbnQgdHlwZSwKLQkJCQkJIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJCSBzc2l6ZV90ICgqc2hvdykoc3RydWN0IGliZnRfa29iamVjdCAqLAotCQkJCQkJCSBzdHJ1Y3QgaWJmdF9hdHRyaWJ1dGUqLAotCQkJCQkJCSBjaGFyICpidWYpLAotCQkJCQkgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3N0YXRpYyB2b2lkIGliZnRfY2xlYW51cCh2b2lkKQogewotCXN0cnVjdCBpYmZ0X2F0dHJpYnV0ZSAqYXR0ciA9IE5VTEw7Ci0Jc3RydWN0IGliZnRfaGRyICpoZHIgPSBrb2JqX2RhdGEtPmhkcjsKLQotCWF0dHIgPSBrbWFsbG9jKHNpemVvZigqYXR0ciksIEdGUF9LRVJORUwpOwotCWlmICghYXR0cikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlhdHRyLT5hdHRyLm5hbWUgPSBuYW1lOwotCWF0dHItPmF0dHIubW9kZSA9IFNfSVJVU1I7Ci0KLQlhdHRyLT5oZHIgPSBoZHI7Ci0JYXR0ci0+c2hvdyA9IHNob3c7Ci0JYXR0ci0+a29iaiA9ICZrb2JqX2RhdGEtPmtvYmo7Ci0JYXR0ci0+dHlwZSA9IHR5cGU7Ci0KLQlsaXN0X2FkZF90YWlsKCZhdHRyLT5ub2RlLCBsaXN0KTsKLQotCXJldHVybiAwOworCWliZnRfdW5yZWdpc3RlcigpOworCWlzY3NpX2Jvb3RfZGVzdHJveV9rc2V0KGJvb3Rfa3NldCk7CiB9CiAKLS8qCi0gKiBIZWxwZXIgcm91dGluZXJzIHRvIGNoZWNrIHRvIGRldGVybWluZSBpZiB0aGUgZW50cnkgaXMgdmFsaWQKLSAqIGluIHRoZSBwcm9wZXIgaUJGVCBzdHJ1Y3R1cmUuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGliZnRfY2hlY2tfbmljX2ZvcihzdHJ1Y3QgaWJmdF9uaWMgKm5pYywgaW50IGVudHJ5KQorc3RhdGljIHZvaWQgX19leGl0IGliZnRfZXhpdCh2b2lkKQogewotCWludCByYyA9IDA7Ci0KLQlzd2l0Y2ggKGVudHJ5KSB7Ci0JY2FzZSBpYmZ0X2V0aF9pbmRleDoKLQljYXNlIGliZnRfZXRoX2ZsYWdzOgotCQlyYyA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgaWJmdF9ldGhfaXBfYWRkcjoKLQkJaWYgKG1lbWNtcChuaWMtPmlwX2FkZHIsIG51bGxzLCBzaXplb2YobmljLT5pcF9hZGRyKSkpCi0JCQlyYyA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgaWJmdF9ldGhfc3VibmV0X21hc2s6Ci0JCWlmIChuaWMtPnN1Ym5ldF9tYXNrX3ByZWZpeCkKLQkJCXJjID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBpYmZ0X2V0aF9vcmlnaW46Ci0JCXJjID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBpYmZ0X2V0aF9nYXRld2F5OgotCQlpZiAobWVtY21wKG5pYy0+Z2F0ZXdheSwgbnVsbHMsIHNpemVvZihuaWMtPmdhdGV3YXkpKSkKLQkJCXJjID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBpYmZ0X2V0aF9wcmltYXJ5X2RuczoKLQkJaWYgKG1lbWNtcChuaWMtPnByaW1hcnlfZG5zLCBudWxscywKLQkJCSAgIHNpemVvZihuaWMtPnByaW1hcnlfZG5zKSkpCi0JCQlyYyA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgaWJmdF9ldGhfc2Vjb25kYXJ5X2RuczoKLQkJaWYgKG1lbWNtcChuaWMtPnNlY29uZGFyeV9kbnMsIG51bGxzLAotCQkJICAgc2l6ZW9mKG5pYy0+c2Vjb25kYXJ5X2RucykpKQotCQkJcmMgPSAxOwotCQlicmVhazsKLQljYXNlIGliZnRfZXRoX2RoY3A6Ci0JCWlmIChtZW1jbXAobmljLT5kaGNwLCBudWxscywgc2l6ZW9mKG5pYy0+ZGhjcCkpKQotCQkJcmMgPSAxOwotCQlicmVhazsKLQljYXNlIGliZnRfZXRoX3ZsYW46Ci0JY2FzZSBpYmZ0X2V0aF9tYWM6Ci0JCXJjID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBpYmZ0X2V0aF9ob3N0bmFtZToKLQkJaWYgKG5pYy0+aG9zdG5hbWVfb2ZmKQotCQkJcmMgPSAxOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGliZnRfY2hlY2tfdGd0X2ZvcihzdHJ1Y3QgaWJmdF90Z3QgKnRndCwgaW50IGVudHJ5KQotewotCWludCByYyA9IDA7Ci0KLQlzd2l0Y2ggKGVudHJ5KSB7Ci0JY2FzZSBpYmZ0X3RndF9pbmRleDoKLQljYXNlIGliZnRfdGd0X2ZsYWdzOgotCWNhc2UgaWJmdF90Z3RfaXBfYWRkcjoKLQljYXNlIGliZnRfdGd0X3BvcnQ6Ci0JY2FzZSBpYmZ0X3RndF9sdW46Ci0JY2FzZSBpYmZ0X3RndF9uaWNfYXNzb2M6Ci0JY2FzZSBpYmZ0X3RndF9jaGFwX3R5cGU6Ci0JCXJjID0gMTsKLQljYXNlIGliZnRfdGd0X25hbWU6Ci0JCWlmICh0Z3QtPnRndF9uYW1lX2xlbikKLQkJCXJjID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBpYmZ0X3RndF9jaGFwX25hbWU6Ci0JY2FzZSBpYmZ0X3RndF9jaGFwX3NlY3JldDoKLQkJaWYgKHRndC0+Y2hhcF9uYW1lX2xlbikKLQkJCXJjID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBpYmZ0X3RndF9yZXZfY2hhcF9uYW1lOgotCWNhc2UgaWJmdF90Z3RfcmV2X2NoYXBfc2VjcmV0OgotCQlpZiAodGd0LT5yZXZfY2hhcF9uYW1lX2xlbikKLQkJCXJjID0gMTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBpYmZ0X2NoZWNrX2luaXRpYXRvcl9mb3Ioc3RydWN0IGliZnRfaW5pdGlhdG9yICppbml0LAotCQkJCQkgICAgaW50IGVudHJ5KQotewotCWludCByYyA9IDA7Ci0KLQlzd2l0Y2ggKGVudHJ5KSB7Ci0JY2FzZSBpYmZ0X2luaXRfaW5kZXg6Ci0JY2FzZSBpYmZ0X2luaXRfZmxhZ3M6Ci0JCXJjID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBpYmZ0X2luaXRfaXNuc19zZXJ2ZXI6Ci0JCWlmIChtZW1jbXAoaW5pdC0+aXNuc19zZXJ2ZXIsIG51bGxzLAotCQkJICAgc2l6ZW9mKGluaXQtPmlzbnNfc2VydmVyKSkpCi0JCQlyYyA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgaWJmdF9pbml0X3NscF9zZXJ2ZXI6Ci0JCWlmIChtZW1jbXAoaW5pdC0+c2xwX3NlcnZlciwgbnVsbHMsCi0JCQkgICBzaXplb2YoaW5pdC0+c2xwX3NlcnZlcikpKQotCQkJcmMgPSAxOwotCQlicmVhazsKLQljYXNlIGliZnRfaW5pdF9wcmlfcmFkaXVzX3NlcnZlcjoKLQkJaWYgKG1lbWNtcChpbml0LT5wcmlfcmFkaXVzX3NlcnZlciwgbnVsbHMsCi0JCQkgICBzaXplb2YoaW5pdC0+cHJpX3JhZGl1c19zZXJ2ZXIpKSkKLQkJCXJjID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBpYmZ0X2luaXRfc2VjX3JhZGl1c19zZXJ2ZXI6Ci0JCWlmIChtZW1jbXAoaW5pdC0+c2VjX3JhZGl1c19zZXJ2ZXIsIG51bGxzLAotCQkJICAgc2l6ZW9mKGluaXQtPnNlY19yYWRpdXNfc2VydmVyKSkpCi0JCQlyYyA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgaWJmdF9pbml0X2luaXRpYXRvcl9uYW1lOgotCQlpZiAoaW5pdC0+aW5pdGlhdG9yX25hbWVfbGVuKQotCQkJcmMgPSAxOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qCi0gKiAgUmVnaXN0ZXIgdGhlIGF0dHJpYnV0ZXMgZm9yIGFsbCBvZiB0aGUga29iamVjdHMuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGliZnRfcmVnaXN0ZXJfYXR0cmlidXRlcyhzdHJ1Y3QgbGlzdF9oZWFkICprb2JqZWN0X2xpc3QsCi0JCQkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICphdHRyX2xpc3QpCi17Ci0JaW50IHJjID0gMCwgaSA9IDA7Ci0Jc3RydWN0IGliZnRfa29iamVjdCAqZGF0YSA9IE5VTEw7Ci0Jc3RydWN0IGliZnRfYXR0cmlidXRlICphdHRyID0gTlVMTCwgKm07Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRhdGEsIGtvYmplY3RfbGlzdCwgbm9kZSkgewotCQlzd2l0Y2ggKGRhdGEtPmhkci0+aWQpIHsKLQkJY2FzZSBpZF9uaWM6Ci0JCQlmb3IgKGkgPSAwOyBpIDwgaWJmdF9ldGhfZW5kX21hcmtlciAmJiAhcmM7IGkrKykKLQkJCQlpZiAoaWJmdF9jaGVja19uaWNfZm9yKGRhdGEtPm5pYywgaSkpCi0JCQkJCXJjID0gaWJmdF9jcmVhdGVfYXR0cmlidXRlKGRhdGEsIGksCi0JCQkJCQlpYmZ0X2V0aF9wcm9wZXJ0aWVzW2ldLAotCQkJCQkJaWJmdF9hdHRyX3Nob3dfbmljLCBhdHRyX2xpc3QpOwotCQkJYnJlYWs7Ci0JCWNhc2UgaWRfdGFyZ2V0OgotCQkJZm9yIChpID0gMDsgaSA8IGliZnRfdGd0X2VuZF9tYXJrZXIgJiYgIXJjOyBpKyspCi0JCQkJaWYgKGliZnRfY2hlY2tfdGd0X2ZvcihkYXRhLT50Z3QsIGkpKQotCQkJCQlyYyA9IGliZnRfY3JlYXRlX2F0dHJpYnV0ZShkYXRhLCBpLAotCQkJCQkJaWJmdF90Z3RfcHJvcGVydGllc1tpXSwKLQkJCQkJCWliZnRfYXR0cl9zaG93X3RhcmdldCwKLQkJCQkJCWF0dHJfbGlzdCk7Ci0JCQlicmVhazsKLQkJY2FzZSBpZF9pbml0aWF0b3I6Ci0JCQlmb3IgKGkgPSAwOyBpIDwgaWJmdF9pbml0X2VuZF9tYXJrZXIgJiYgIXJjOyBpKyspCi0JCQkJaWYgKGliZnRfY2hlY2tfaW5pdGlhdG9yX2ZvcigKLQkJCQkJZGF0YS0+aW5pdGlhdG9yLCBpKSkKLQkJCQkJcmMgPSBpYmZ0X2NyZWF0ZV9hdHRyaWJ1dGUoZGF0YSwgaSwKLQkJCQkJCWliZnRfaW5pdGlhdG9yX3Byb3BlcnRpZXNbaV0sCi0JCQkJCQlpYmZ0X2F0dHJfc2hvd19pbml0aWF0b3IsCi0JCQkJCQlhdHRyX2xpc3QpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQlpZiAocmMpCi0JCQlicmVhazsKLQl9Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGF0dHIsIG0sIGF0dHJfbGlzdCwgbm9kZSkgewotCQlyYyA9IHN5c2ZzX2NyZWF0ZV9maWxlKGF0dHItPmtvYmosICZhdHRyLT5hdHRyKTsKLQkJaWYgKHJjKSB7Ci0JCQlsaXN0X2RlbCgmYXR0ci0+bm9kZSk7Ci0JCQlrZnJlZShhdHRyKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJjOworCWliZnRfY2xlYW51cCgpOwogfQogCiAvKgpAQCAtOTI3LDI2ICs3NDMsMjAgQEAKIHsKIAlpbnQgcmMgPSAwOwogCi0JaWJmdF9rc2V0ID0ga3NldF9jcmVhdGVfYW5kX2FkZCgiaWJmdCIsIE5VTEwsIGZpcm13YXJlX2tvYmopOwotCWlmICghaWJmdF9rc2V0KQotCQlyZXR1cm4gLUVOT01FTTsKLQogCWlmIChpYmZ0X2FkZHIpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiaUJGVCBkZXRlY3RlZCBhdCAweCVsbHguXG4iLAogCQkgICAgICAgKHU2NClpc2FfdmlydF90b19idXMoaWJmdF9hZGRyKSk7CiAKIAkJcmMgPSBpYmZ0X2NoZWNrX2RldmljZSgpOwogCQlpZiAocmMpCi0JCQlnb3RvIG91dF9maXJtd2FyZV91bnJlZ2lzdGVyOworCQkJcmV0dXJuIHJjOworCisJCWJvb3Rfa3NldCA9IGlzY3NpX2Jvb3RfY3JlYXRlX2tzZXQoImliZnQiKTsKKwkJaWYgKCFib290X2tzZXQpCisJCQlyZXR1cm4gLUVOT01FTTsKIAogCQkvKiBTY2FuIHRoZSBJQkZUIGZvciBkYXRhIGFuZCByZWdpc3RlciB0aGUga29iamVjdHMuICovCi0JCXJjID0gaWJmdF9yZWdpc3Rlcl9rb2JqZWN0cyhpYmZ0X2FkZHIsICZpYmZ0X2tvYmplY3RfbGlzdCk7Ci0JCWlmIChyYykKLQkJCWdvdG8gb3V0X2ZyZWU7Ci0KLQkJLyogUmVnaXN0ZXIgdGhlIGF0dHJpYnV0ZXMgKi8KLQkJcmMgPSBpYmZ0X3JlZ2lzdGVyX2F0dHJpYnV0ZXMoJmliZnRfa29iamVjdF9saXN0LAotCQkJCQkgICAgICAmaWJmdF9hdHRyX2xpc3QpOworCQlyYyA9IGliZnRfcmVnaXN0ZXJfa29iamVjdHMoaWJmdF9hZGRyKTsKIAkJaWYgKHJjKQogCQkJZ290byBvdXRfZnJlZTsKIAl9IGVsc2UKQEAgLTk1NSwxNyArNzY1LDkgQEAKIAlyZXR1cm4gMDsKIAogb3V0X2ZyZWU6Ci0JaWJmdF91bnJlZ2lzdGVyKCZpYmZ0X2F0dHJfbGlzdCwgJmliZnRfa29iamVjdF9saXN0KTsKLW91dF9maXJtd2FyZV91bnJlZ2lzdGVyOgotCWtzZXRfdW5yZWdpc3RlcihpYmZ0X2tzZXQpOworCWliZnRfY2xlYW51cCgpOwogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IGliZnRfZXhpdCh2b2lkKQotewotCWliZnRfdW5yZWdpc3RlcigmaWJmdF9hdHRyX2xpc3QsICZpYmZ0X2tvYmplY3RfbGlzdCk7Ci0Ja3NldF91bnJlZ2lzdGVyKGliZnRfa3NldCk7Ci19Ci0KIG1vZHVsZV9pbml0KGliZnRfaW5pdCk7CiBtb2R1bGVfZXhpdChpYmZ0X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0X2ZpbmQuYyBiL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdF9maW5kLmMKaW5kZXggZDY0NzBlZi4uMjE5MjQ1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0X2ZpbmQuYworKysgYi9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnRfZmluZC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgMjAwNyBSZWQgSGF0LCBJbmMuCisgKiAgQ29weXJpZ2h0IDIwMDctMjAxMCBSZWQgSGF0LCBJbmMuCiAgKiAgYnkgUGV0ZXIgSm9uZXMgPHBqb25lc0ByZWRoYXQuY29tPgogICogIENvcHlyaWdodCAyMDA3IElCTSwgSW5jLgogICogIGJ5IEtvbnJhZCBSemVzenV0ZWsgPGtvbnJhZHJAbGludXgudm5ldC5pYm0uY29tPgpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZWZpLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgpAQCAtMzAsMTMgKzMxLDE1IEBACiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lzY3NpX2liZnQuaD4KIAogI2luY2x1ZGUgPGFzbS9tbXpvbmUuaD4KIAogLyoKICAqIFBoeXNpY2FsIGxvY2F0aW9uIG9mIGlTQ1NJIEJvb3QgRm9ybWF0IFRhYmxlLgogICovCi1zdHJ1Y3QgaWJmdF90YWJsZV9oZWFkZXIgKmliZnRfYWRkcjsKK3N0cnVjdCBhY3BpX3RhYmxlX2liZnQgKmliZnRfYWRkcjsKIEVYUE9SVF9TWU1CT0xfR1BMKGliZnRfYWRkcik7CiAKICNkZWZpbmUgSUJGVF9TSUdOICJpQkZUIgpAQCAtNDYsMTkgKzQ5LDIwIEBACiAjZGVmaW5lIFZHQV9NRU0gMHhBMDAwMCAvKiBWR0EgYnVmZmVyICovCiAjZGVmaW5lIFZHQV9TSVpFIDB4MjAwMDAgLyogMTI4a0IgKi8KIAorI2lmZGVmIENPTkZJR19BQ1BJCitzdGF0aWMgaW50IF9faW5pdCBhY3BpX2ZpbmRfaWJmdChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKmhlYWRlcikKK3sKKwlpYmZ0X2FkZHIgPSAoc3RydWN0IGFjcGlfdGFibGVfaWJmdCAqKWhlYWRlcjsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfQUNQSSAqLwogCi0vKgotICogUm91dGluZSB1c2VkIHRvIGZpbmQgdGhlIGlTQ1NJIEJvb3QgRm9ybWF0IFRhYmxlLiBUaGUgbG9naWNhbAotICoga2VybmVsIGFkZHJlc3MgaXMgc2V0IGluIHRoZSBpYmZ0X2FkZHIgZ2xvYmFsIHZhcmlhYmxlLgotICovCi11bnNpZ25lZCBsb25nIF9faW5pdCBmaW5kX2liZnRfcmVnaW9uKHVuc2lnbmVkIGxvbmcgKnNpemVwKQorc3RhdGljIGludCBfX2luaXQgZmluZF9pYmZ0X2luX21lbSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgcG9zOwogCXVuc2lnbmVkIGludCBsZW4gPSAwOwogCXZvaWQgKnZpcnQ7CiAKLQlpYmZ0X2FkZHIgPSBOVUxMOwotCiAJZm9yIChwb3MgPSBJQkZUX1NUQVJUOyBwb3MgPCBJQkZUX0VORDsgcG9zICs9IDE2KSB7CiAJCS8qIFRoZSB0YWJsZSBjYW4ndCBiZSBpbnNpZGUgdGhlIFZHQSBCSU9TIHJlc2VydmVkIHNwYWNlLAogCQkgKiBzbyBza2lwIHRoYXQgYXJlYSAqLwpAQCAtNzIsMTQgKzc2LDQyIEBACiAJCQkvKiBpZiB0aGUgbGVuZ3RoIG9mIHRoZSB0YWJsZSBleHRlbmRzIHBhc3QgMU0sCiAJCQkgKiB0aGUgdGFibGUgY2Fubm90IGJlIHZhbGlkLiAqLwogCQkJaWYgKHBvcyArIGxlbiA8PSAoSUJGVF9FTkQtMSkpIHsKLQkJCQlpYmZ0X2FkZHIgPSAoc3RydWN0IGliZnRfdGFibGVfaGVhZGVyICopdmlydDsKKwkJCQlpYmZ0X2FkZHIgPSAoc3RydWN0IGFjcGlfdGFibGVfaWJmdCAqKXZpcnQ7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAl9CisJcmV0dXJuIGxlbjsKK30KKy8qCisgKiBSb3V0aW5lIHVzZWQgdG8gZmluZCB0aGUgaVNDU0kgQm9vdCBGb3JtYXQgVGFibGUuIFRoZSBsb2dpY2FsCisgKiBrZXJuZWwgYWRkcmVzcyBpcyBzZXQgaW4gdGhlIGliZnRfYWRkciBnbG9iYWwgdmFyaWFibGUuCisgKi8KK3Vuc2lnbmVkIGxvbmcgX19pbml0IGZpbmRfaWJmdF9yZWdpb24odW5zaWduZWQgbG9uZyAqc2l6ZXApCit7CisKKwlpYmZ0X2FkZHIgPSBOVUxMOworCisjaWZkZWYgQ09ORklHX0FDUEkKKwkvKgorCSAqIE9uZSBzcGVjIHNheXMgIklCRlQiLCB0aGUgb3RoZXIgc2F5cyAiaUJGVCIuIFdlIGhhdmUgdG8gY2hlY2sKKwkgKiBmb3IgYm90aC4KKwkgKi8KKwlpZiAoIWliZnRfYWRkcikKKwkJYWNwaV90YWJsZV9wYXJzZShBQ1BJX1NJR19JQkZULCBhY3BpX2ZpbmRfaWJmdCk7CisJaWYgKCFpYmZ0X2FkZHIpCisJCWFjcGlfdGFibGVfcGFyc2UoSUJGVF9TSUdOLCBhY3BpX2ZpbmRfaWJmdCk7CisjZW5kaWYgLyogQ09ORklHX0FDUEkgKi8KKworCS8qIGlCRlQgMS4wMyBzZWN0aW9uIDEuNC4zLjEgbWFuZGF0ZXMgdGhhdCBVRUZJIG1hY2hpbmVzIHdpbGwKKwkgKiBvbmx5IHVzZSBBQ1BJIGZvciB0aGlzICovCisKKwlpZiAoIWliZnRfYWRkciAmJiAhZWZpX2VuYWJsZWQpCisJCWZpbmRfaWJmdF9pbl9tZW0oKTsKKwogCWlmIChpYmZ0X2FkZHIpIHsKLQkJKnNpemVwID0gUEFHRV9BTElHTihsZW4pOwotCQlyZXR1cm4gcG9zOworCQkqc2l6ZXAgPSBQQUdFX0FMSUdOKGliZnRfYWRkci0+aGVhZGVyLmxlbmd0aCk7CisJCXJldHVybiAodTY0KWlzYV92aXJ0X3RvX2J1cyhpYmZ0X2FkZHIpOwogCX0KIAogCSpzaXplcCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vY3M1NTM1LWdwaW8uYyBiL2RyaXZlcnMvZ3Bpby9jczU1MzUtZ3Bpby5jCmluZGV4IGY3M2ExNTUuLmUyM2MwNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9jczU1MzUtZ3Bpby5jCisrKyBiL2RyaXZlcnMvZ3Bpby9jczU1MzUtZ3Bpby5jCkBAIC0zNTIsNiArMzUyLDYgQEAKIG1vZHVsZV9pbml0KGNzNTUzNV9ncGlvX2luaXQpOwogbW9kdWxlX2V4aXQoY3M1NTM1X2dwaW9fZXhpdCk7CiAKLU1PRFVMRV9BVVRIT1IoIkFuZHJlcyBTYWxvbW9uIDxkaWxpbmdlckBjb2xsYWJvcmEuY28udWs+Iik7CitNT0RVTEVfQVVUSE9SKCJBbmRyZXMgU2Fsb21vbiA8ZGlsaW5nZXJAcXVldWVkLm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQU1EIENTNTUzNS9DUzU1MzYgR1BJTyBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCmluZGV4IDNjYTM2NTQuLjZhNmJkNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW9saWIuYwpAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIApAQCAtODkzLDEwICs4OTQsMTIgQEAKIHZvaWQgZ3Bpb191bmV4cG9ydCh1bnNpZ25lZCBncGlvKQogewogCXN0cnVjdCBncGlvX2Rlc2MJKmRlc2M7Ci0JaW50CQkJc3RhdHVzID0gLUVJTlZBTDsKKwlpbnQJCQlzdGF0dXMgPSAwOwogCi0JaWYgKCFncGlvX2lzX3ZhbGlkKGdwaW8pKQorCWlmICghZ3Bpb19pc192YWxpZChncGlvKSkgeworCQlzdGF0dXMgPSAtRUlOVkFMOwogCQlnb3RvIGRvbmU7CisJfQogCiAJbXV0ZXhfbG9jaygmc3lzZnNfbG9jayk7CiAKQEAgLTkxMSw3ICs5MTQsNiBAQAogCQkJY2xlYXJfYml0KEZMQUdfRVhQT1JULCAmZGVzYy0+ZmxhZ3MpOwogCQkJcHV0X2RldmljZShkZXYpOwogCQkJZGV2aWNlX3VucmVnaXN0ZXIoZGV2KTsKLQkJCXN0YXR1cyA9IDA7CiAJCX0gZWxzZQogCQkJc3RhdHVzID0gLUVOT0RFVjsKIAl9CkBAIC0xMDk5LDE2ICsxMTAxLDI0IEBACiAJCX0KIAl9CiAKKwlvZl9ncGlvY2hpcF9hZGQoY2hpcCk7CisKIHVubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQlpZiAoc3RhdHVzID09IDApCi0JCXN0YXR1cyA9IGdwaW9jaGlwX2V4cG9ydChjaGlwKTsKKworCWlmIChzdGF0dXMpCisJCWdvdG8gZmFpbDsKKworCXN0YXR1cyA9IGdwaW9jaGlwX2V4cG9ydChjaGlwKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZhaWw7CisKKwlyZXR1cm4gMDsKIGZhaWw6CiAJLyogZmFpbHVyZXMgaGVyZSBjYW4gbWVhbiBzeXN0ZW1zIHdvbid0IGJvb3QuLi4gKi8KLQlpZiAoc3RhdHVzKQotCQlwcl9lcnIoImdwaW9jaGlwX2FkZDogZ3Bpb3MgJWQuLiVkICglcykgZmFpbGVkIHRvIHJlZ2lzdGVyXG4iLAotCQkJY2hpcC0+YmFzZSwgY2hpcC0+YmFzZSArIGNoaXAtPm5ncGlvIC0gMSwKLQkJCWNoaXAtPmxhYmVsID8gOiAiZ2VuZXJpYyIpOworCXByX2VycigiZ3Bpb2NoaXBfYWRkOiBncGlvcyAlZC4uJWQgKCVzKSBmYWlsZWQgdG8gcmVnaXN0ZXJcbiIsCisJCWNoaXAtPmJhc2UsIGNoaXAtPmJhc2UgKyBjaGlwLT5uZ3BpbyAtIDEsCisJCWNoaXAtPmxhYmVsID8gOiAiZ2VuZXJpYyIpOwogCXJldHVybiBzdGF0dXM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChncGlvY2hpcF9hZGQpOwpAQCAtMTEyNyw2ICsxMTM3LDggQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKIAorCW9mX2dwaW9jaGlwX3JlbW92ZShjaGlwKTsKKwogCWZvciAoaWQgPSBjaGlwLT5iYXNlOyBpZCA8IGNoaXAtPmJhc2UgKyBjaGlwLT5uZ3BpbzsgaWQrKykgewogCQlpZiAodGVzdF9iaXQoRkxBR19SRVFVRVNURUQsICZncGlvX2Rlc2NbaWRdLmZsYWdzKSkgewogCQkJc3RhdHVzID0gLUVCVVNZOwpAQCAtMTE0Nyw2ICsxMTU5LDM4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChncGlvY2hpcF9yZW1vdmUpOwogCisvKioKKyAqIGdwaW9jaGlwX2ZpbmQoKSAtIGl0ZXJhdG9yIGZvciBsb2NhdGluZyBhIHNwZWNpZmljIGdwaW9fY2hpcAorICogQGRhdGE6IGRhdGEgdG8gcGFzcyB0byBtYXRjaCBmdW5jdGlvbgorICogQGNhbGxiYWNrOiBDYWxsYmFjayBmdW5jdGlvbiB0byBjaGVjayBncGlvX2NoaXAKKyAqCisgKiBTaW1pbGFyIHRvIGJ1c19maW5kX2RldmljZS4gIEl0IHJldHVybnMgYSByZWZlcmVuY2UgdG8gYSBncGlvX2NoaXAgYXMKKyAqIGRldGVybWluZWQgYnkgYSB1c2VyIHN1cHBsaWVkIEBtYXRjaCBjYWxsYmFjay4gIFRoZSBjYWxsYmFjayBzaG91bGQgcmV0dXJuCisgKiAwIGlmIHRoZSBkZXZpY2UgZG9lc24ndCBtYXRjaCBhbmQgbm9uLXplcm8gaWYgaXQgZG9lcy4gIElmIHRoZSBjYWxsYmFjayBpcworICogbm9uLXplcm8sIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdG8gdGhlIGNhbGxlciBhbmQgbm90IGl0ZXJhdGUgb3ZlciBhbnkKKyAqIG1vcmUgZ3Bpb19jaGlwcy4KKyAqLworc3RydWN0IGdwaW9fY2hpcCAqZ3Bpb2NoaXBfZmluZCh2b2lkICpkYXRhLAorCQkJCWludCAoKm1hdGNoKShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB2b2lkICpkYXRhKSkKK3sKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBBUkNIX05SX0dQSU9TOyBpKyspIHsKKwkJaWYgKCFncGlvX2Rlc2NbaV0uY2hpcCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChtYXRjaChncGlvX2Rlc2NbaV0uY2hpcCwgZGF0YSkpIHsKKwkJCWNoaXAgPSBncGlvX2Rlc2NbaV0uY2hpcDsKKwkJCWJyZWFrOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGNoaXA7Cit9CiAKIC8qIFRoZXNlICJvcHRpb25hbCIgYWxsb2NhdGlvbiBjYWxscyBoZWxwIHByZXZlbnQgZHJpdmVycyBmcm9tIHN0b21waW5nCiAgKiBvbiBlYWNoIG90aGVyLCBhbmQgaGVscCBwcm92aWRlIGJldHRlciBkaWFnbm9zdGljcyBpbiBkZWJ1Z2ZzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL3BsMDYxLmMgYi9kcml2ZXJzL2dwaW8vcGwwNjEuYwppbmRleCBlZTU2OGM4Li41MDA1OTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vcGwwNjEuYworKysgYi9kcml2ZXJzL2dwaW8vcGwwNjEuYwpAQCAtMjMyLDcgKzIzMiw3IEBACiAJZGVzYy0+Y2hpcC0+dW5tYXNrKGlycSk7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHBsMDYxX3Byb2JlKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2LCBzdHJ1Y3QgYW1iYV9pZCAqaWQpCitzdGF0aWMgaW50IHBsMDYxX3Byb2JlKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2LCBzdHJ1Y3QgYW1iYV9pZCAqaWQpCiB7CiAJc3RydWN0IHBsMDYxX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCBwbDA2MV9ncGlvICpjaGlwOwpAQCAtMzMzLDcgKzMzMyw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBhbWJhX2lkIHBsMDYxX2lkc1tdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IGFtYmFfaWQgcGwwNjFfaWRzW10gPSB7CiAJewogCQkuaWQJPSAweDAwMDQxMDYxLAogCQkubWFzawk9IDB4MDAwZmZmZmYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8veGlsaW54X2dwaW8uYyBiL2RyaXZlcnMvZ3Bpby94aWxpbnhfZ3Bpby5jCmluZGV4IGI4ZmE2NWIuLjcwOTY5MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby94aWxpbnhfZ3Bpby5jCisrKyBiL2RyaXZlcnMvZ3Bpby94aWxpbnhfZ3Bpby5jCkBAIC0xNjEsMTQgKzE2MSwxMiBAQAogc3RhdGljIGludCBfX2RldmluaXQgeGdwaW9fb2ZfcHJvYmUoc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKIAlzdHJ1Y3QgeGdwaW9faW5zdGFuY2UgKmNoaXA7Ci0Jc3RydWN0IG9mX2dwaW9fY2hpcCAqb2ZjaGlwOwogCWludCBzdGF0dXMgPSAwOwogCWNvbnN0IHUzMiAqdHJlZV9pbmZvOwogCiAJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjaGlwKQogCQlyZXR1cm4gLUVOT01FTTsKLQlvZmNoaXAgPSAmY2hpcC0+bW1jaGlwLm9mX2djOwogCiAJLyogVXBkYXRlIEdQSU8gc3RhdGUgc2hhZG93IHJlZ2lzdGVyIHdpdGggZGVmYXVsdCB2YWx1ZSAqLwogCXRyZWVfaW5mbyA9IG9mX2dldF9wcm9wZXJ0eShucCwgInhsbngsZG91dC1kZWZhdWx0IiwgTlVMTCk7CkBAIC0xODIsMjEgKzE4MCwyMCBAQAogCQljaGlwLT5ncGlvX2RpciA9ICp0cmVlX2luZm87CiAKIAkvKiBDaGVjayBkZXZpY2Ugbm9kZSBhbmQgcGFyZW50IGRldmljZSBub2RlIGZvciBkZXZpY2Ugd2lkdGggKi8KLQlvZmNoaXAtPmdjLm5ncGlvID0gMzI7IC8qIEJ5IGRlZmF1bHQgYXNzdW1lIGZ1bGwgR1BJTyBjb250cm9sbGVyICovCisJY2hpcC0+bW1jaGlwLmdjLm5ncGlvID0gMzI7IC8qIEJ5IGRlZmF1bHQgYXNzdW1lIGZ1bGwgR1BJTyBjb250cm9sbGVyICovCiAJdHJlZV9pbmZvID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAieGxueCxncGlvLXdpZHRoIiwgTlVMTCk7CiAJaWYgKCF0cmVlX2luZm8pCiAJCXRyZWVfaW5mbyA9IG9mX2dldF9wcm9wZXJ0eShucC0+cGFyZW50LAogCQkJCQkgICAgInhsbngsZ3Bpby13aWR0aCIsIE5VTEwpOwogCWlmICh0cmVlX2luZm8pCi0JCW9mY2hpcC0+Z2MubmdwaW8gPSAqdHJlZV9pbmZvOworCQljaGlwLT5tbWNoaXAuZ2MubmdwaW8gPSAqdHJlZV9pbmZvOwogCiAJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPmdwaW9fbG9jayk7CiAKLQlvZmNoaXAtPmdwaW9fY2VsbHMgPSAyOwotCW9mY2hpcC0+Z2MuZGlyZWN0aW9uX2lucHV0ID0geGdwaW9fZGlyX2luOwotCW9mY2hpcC0+Z2MuZGlyZWN0aW9uX291dHB1dCA9IHhncGlvX2Rpcl9vdXQ7Ci0Jb2ZjaGlwLT5nYy5nZXQgPSB4Z3Bpb19nZXQ7Ci0Jb2ZjaGlwLT5nYy5zZXQgPSB4Z3Bpb19zZXQ7CisJY2hpcC0+bW1jaGlwLmdjLmRpcmVjdGlvbl9pbnB1dCA9IHhncGlvX2Rpcl9pbjsKKwljaGlwLT5tbWNoaXAuZ2MuZGlyZWN0aW9uX291dHB1dCA9IHhncGlvX2Rpcl9vdXQ7CisJY2hpcC0+bW1jaGlwLmdjLmdldCA9IHhncGlvX2dldDsKKwljaGlwLT5tbWNoaXAuZ2Muc2V0ID0geGdwaW9fc2V0OwogCiAJY2hpcC0+bW1jaGlwLnNhdmVfcmVncyA9IHhncGlvX3NhdmVfcmVnczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwppbmRleCA4ODkxMGU1Li40Y2FiMGM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwpAQCAtNiw3ICs2LDcgQEAKICMKIG1lbnVjb25maWcgRFJNCiAJdHJpc3RhdGUgIkRpcmVjdCBSZW5kZXJpbmcgTWFuYWdlciAoWEZyZWU4NiA0LjEuMCBhbmQgaGlnaGVyIERSSSBzdXBwb3J0KSIKLQlkZXBlbmRzIG9uIChBR1AgfHwgQUdQPW4pICYmIFBDSSAmJiAhRU1VTEFURURfQ01QWENIRyAmJiBNTVUKKwlkZXBlbmRzIG9uIChBR1AgfHwgQUdQPW4pICYmICFFTVVMQVRFRF9DTVBYQ0hHICYmIE1NVQogCXNlbGVjdCBJMkMKIAlzZWxlY3QgSTJDX0FMR09CSVQKIAlzZWxlY3QgU0xPV19XT1JLCkBAIC0xNyw3ICsxNyw3IEBACiAJICBUaGVzZSBtb2R1bGVzIHByb3ZpZGUgc3VwcG9ydCBmb3Igc3luY2hyb25pemF0aW9uLCBzZWN1cml0eSwgYW5kCiAJICBETUEgdHJhbnNmZXJzLiBQbGVhc2Ugc2VlIDxodHRwOi8vZHJpLnNvdXJjZWZvcmdlLm5ldC8+IGZvciBtb3JlCiAJICBkZXRhaWxzLiAgWW91IHNob3VsZCBhbHNvIHNlbGVjdCBhbmQgY29uZmlndXJlIEFHUAotCSAgKC9kZXYvYWdwZ2FydCkgc3VwcG9ydC4KKwkgICgvZGV2L2FncGdhcnQpIHN1cHBvcnQgaWYgaXQgaXMgYXZhaWxhYmxlIGZvciB5b3VyIHBsYXRmb3JtLgogCiBjb25maWcgRFJNX0tNU19IRUxQRVIKIAl0cmlzdGF0ZQpAQCAtNjEsNiArNjEsNyBAQAogICAgICAgICBzZWxlY3QgRFJNX0tNU19IRUxQRVIKICAgICAgICAgc2VsZWN0IERSTV9UVE0KIAlzZWxlY3QgUE9XRVJfU1VQUExZCisJc2VsZWN0IEhXTU9OCiAJaGVscAogCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGFuIEFUSSBSYWRlb24gZ3JhcGhpY3MgY2FyZC4gIFRoZXJlCiAJICBhcmUgYm90aCBQQ0kgYW5kIEFHUCB2ZXJzaW9ucy4gIFlvdSBkb24ndCBuZWVkIHRvIGNob29zZSB0aGlzIHRvCkBAIC0xMzAsNyArMTMxLDcgQEAKIAogY29uZmlnIERSTV9NR0EKIAl0cmlzdGF0ZSAiTWF0cm94IGcyMDAvZzQwMCIKLQlkZXBlbmRzIG9uIERSTQorCWRlcGVuZHMgb24gRFJNICYmIFBDSQogCXNlbGVjdCBGV19MT0FERVIKIAloZWxwCiAJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBNYXRyb3ggRzIwMCwgRzQwMCBvciBHNDUwIGdyYXBoaWNzCkBAIC0xNDgsMTQgKzE0OSwxNCBAQAogCiBjb25maWcgRFJNX1ZJQQogCXRyaXN0YXRlICJWaWEgdW5pY2hyb21lIHZpZGVvIGNhcmRzIgotCWRlcGVuZHMgb24gRFJNCisJZGVwZW5kcyBvbiBEUk0gJiYgUENJCiAJaGVscAogCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgVmlhIHVuaWNocm9tZSBvciBjb21wYXRpYmxlIHZpZGVvCiAJICBjaGlwc2V0LiBJZiBNIGlzIHNlbGVjdGVkIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdmlhLgogCiBjb25maWcgRFJNX1NBVkFHRQogCXRyaXN0YXRlICJTYXZhZ2UgdmlkZW8gY2FyZHMiCi0JZGVwZW5kcyBvbiBEUk0KKwlkZXBlbmRzIG9uIERSTSAmJiBQQ0kKIAloZWxwCiAJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBTYXZhZ2UzRC80L1N1cGVyU2F2YWdlL1Byby9Ud2lzdGVyCiAJICBjaGlwc2V0LiBJZiBNIGlzIHNlbGVjdGVkIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2F2YWdlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4IGFiZTNmNDQuLmYzYTIzYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKQEAgLTksOSArOSwxMCBAQAogCQlkcm1fZHJ2Lm8gZHJtX2ZvcHMubyBkcm1fZ2VtLm8gZHJtX2lvY3RsLm8gZHJtX2lycS5vIFwKIAkJZHJtX2xvY2subyBkcm1fbWVtb3J5Lm8gZHJtX3Byb2MubyBkcm1fc3R1Yi5vIGRybV92bS5vIFwKIAkJZHJtX2FncHN1cHBvcnQubyBkcm1fc2NhdHRlci5vIGF0aV9wY2lnYXJ0Lm8gZHJtX3BjaS5vIFwKLQkJZHJtX3N5c2ZzLm8gZHJtX2hhc2h0YWIubyBkcm1fc21hbi5vIGRybV9tbS5vIFwKKwkJZHJtX3BsYXRmb3JtLm8gZHJtX3N5c2ZzLm8gZHJtX2hhc2h0YWIubyBkcm1fc21hbi5vIGRybV9tbS5vIFwKIAkJZHJtX2NydGMubyBkcm1fbW9kZXMubyBkcm1fZWRpZC5vIFwKLQkJZHJtX2luZm8ubyBkcm1fZGVidWdmcy5vIGRybV9lbmNvZGVyX3NsYXZlLm8KKwkJZHJtX2luZm8ubyBkcm1fZGVidWdmcy5vIGRybV9lbmNvZGVyX3NsYXZlLm8gXAorCQlkcm1fdHJhY2VfcG9pbnRzLm8gZHJtX2dsb2JhbC5vCiAKIGRybS0kKENPTkZJR19DT01QQVQpICs9IGRybV9pb2MzMi5vCiAKQEAgLTE5LDYgKzIwLDggQEAKIAogb2JqLSQoQ09ORklHX0RSTV9LTVNfSEVMUEVSKSArPSBkcm1fa21zX2hlbHBlci5vCiAKK0NGTEFHU19kcm1fdHJhY2VfcG9pbnRzLm8gOj0gLUkkKHNyYykKKwogb2JqLSQoQ09ORklHX0RSTSkJKz0gZHJtLm8KIG9iai0kKENPTkZJR19EUk1fVFRNKQkrPSB0dG0vCiBvYmotJChDT05GSUdfRFJNX1RERlgpCSs9IHRkZngvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2J1ZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnVmcy5jCmluZGV4IDIwOTJlN2IuLmE1YzljZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnVmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnVmcy5jCkBAIC0zOSwxOSArMzksNiBAQAogI2luY2x1ZGUgPGFzbS9zaG1wYXJhbS5oPgogI2luY2x1ZGUgImRybVAuaCIKIAotcmVzb3VyY2Vfc2l6ZV90IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlc291cmNlKQotewotCXJldHVybiBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCByZXNvdXJjZSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQpOwotCi1yZXNvdXJjZV9zaXplX3QgZHJtX2dldF9yZXNvdXJjZV9sZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlc291cmNlKQotewotCXJldHVybiBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgcmVzb3VyY2UpOwotfQotCi1FWFBPUlRfU1lNQk9MKGRybV9nZXRfcmVzb3VyY2VfbGVuKTsKLQogc3RhdGljIHN0cnVjdCBkcm1fbWFwX2xpc3QgKmRybV9maW5kX21hdGNoaW5nX21hcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCQkJICBzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwKQogewpAQCAtMTg5LDcgKzE3Niw3IEBACiAJc3dpdGNoIChtYXAtPnR5cGUpIHsKIAljYXNlIF9EUk1fUkVHSVNURVJTOgogCWNhc2UgX0RSTV9GUkFNRV9CVUZGRVI6Ci0jaWYgIWRlZmluZWQoX19zcGFyY19fKSAmJiAhZGVmaW5lZChfX2FscGhhX18pICYmICFkZWZpbmVkKF9faWE2NF9fKSAmJiAhZGVmaW5lZChfX3Bvd2VycGM2NF9fKSAmJiAhZGVmaW5lZChfX3g4Nl82NF9fKQorI2lmICFkZWZpbmVkKF9fc3BhcmNfXykgJiYgIWRlZmluZWQoX19hbHBoYV9fKSAmJiAhZGVmaW5lZChfX2lhNjRfXykgJiYgIWRlZmluZWQoX19wb3dlcnBjNjRfXykgJiYgIWRlZmluZWQoX194ODZfNjRfXykgJiYgIWRlZmluZWQoX19hcm1fXykKIAkJaWYgKG1hcC0+b2Zmc2V0ICsgKG1hcC0+c2l6ZS0xKSA8IG1hcC0+b2Zmc2V0IHx8CiAJCSAgICBtYXAtPm9mZnNldCA8IHZpcnRfdG9fcGh5cyhoaWdoX21lbW9yeSkpIHsKIAkJCWtmcmVlKG1hcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCmluZGV4IDU3Y2VhMDEuLjRjNjhmNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCkBAIC04MCw2ICs4MCw3IEBACiB7CiAJeyBEUk1fTU9ERV9ESVRIRVJJTkdfT0ZGLCAiT2ZmIiB9LAogCXsgRFJNX01PREVfRElUSEVSSU5HX09OLCAiT24iIH0sCisJeyBEUk1fTU9ERV9ESVRIRVJJTkdfQVVUTywgIkF1dG9tYXRpYyIgfSwKIH07CiAKIC8qCkBAIC0xMTI2LDcgKzExMjcsNyBAQAogCQlpZiAoZmlsZV9wcml2LT5tYXN0ZXItPm1pbm9yLT50eXBlID09IERSTV9NSU5PUl9DT05UUk9MKSB7CiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwKIAkJCQkJICAgIGhlYWQpIHsKLQkJCQlEUk1fREVCVUdfS01TKCJDUlRDIElEIGlzICVkXG4iLCBjcnRjLT5iYXNlLmlkKTsKKwkJCQlEUk1fREVCVUdfS01TKCJbQ1JUQzolZF1cbiIsIGNydGMtPmJhc2UuaWQpOwogCQkJCWlmIChwdXRfdXNlcihjcnRjLT5iYXNlLmlkLCBjcnRjX2lkICsgY29waWVkKSkgewogCQkJCQlyZXQgPSAtRUZBVUxUOwogCQkJCQlnb3RvIG91dDsKQEAgLTExNTQsOCArMTE1NSw4IEBACiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsCiAJCQkJCSAgICAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsCiAJCQkJCSAgICBoZWFkKSB7Ci0JCQkJRFJNX0RFQlVHX0tNUygiRU5DT0RFUiBJRCBpcyAlZFxuIiwKLQkJCQkJICBlbmNvZGVyLT5iYXNlLmlkKTsKKwkJCQlEUk1fREVCVUdfS01TKCJbRU5DT0RFUjolZDolc11cbiIsIGVuY29kZXItPmJhc2UuaWQsCisJCQkJCQlkcm1fZ2V0X2VuY29kZXJfbmFtZShlbmNvZGVyKSk7CiAJCQkJaWYgKHB1dF91c2VyKGVuY29kZXItPmJhc2UuaWQsIGVuY29kZXJfaWQgKwogCQkJCQkgICAgIGNvcGllZCkpIHsKIAkJCQkJcmV0ID0gLUVGQVVMVDsKQEAgLTExODUsOCArMTE4Niw5IEBACiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwKIAkJCQkJICAgICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LAogCQkJCQkgICAgaGVhZCkgewotCQkJCURSTV9ERUJVR19LTVMoIkNPTk5FQ1RPUiBJRCBpcyAlZFxuIiwKLQkJCQkJICBjb25uZWN0b3ItPmJhc2UuaWQpOworCQkJCURSTV9ERUJVR19LTVMoIltDT05ORUNUT1I6JWQ6JXNdXG4iLAorCQkJCQljb25uZWN0b3ItPmJhc2UuaWQsCisJCQkJCWRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CiAJCQkJaWYgKHB1dF91c2VyKGNvbm5lY3Rvci0+YmFzZS5pZCwKIAkJCQkJICAgICBjb25uZWN0b3JfaWQgKyBjb3BpZWQpKSB7CiAJCQkJCXJldCA9IC1FRkFVTFQ7CkBAIC0xMjA5LDcgKzEyMTEsNyBAQAogCX0KIAljYXJkX3Jlcy0+Y291bnRfY29ubmVjdG9ycyA9IGNvbm5lY3Rvcl9jb3VudDsKIAotCURSTV9ERUJVR19LTVMoIkNvdW50ZWQgJWQgJWQgJWRcbiIsIGNhcmRfcmVzLT5jb3VudF9jcnRjcywKKwlEUk1fREVCVUdfS01TKCJDUlRDWyVkXSBDT05ORUNUT1JTWyVkXSBFTkNPREVSU1slZF1cbiIsIGNhcmRfcmVzLT5jb3VudF9jcnRjcywKIAkJICBjYXJkX3Jlcy0+Y291bnRfY29ubmVjdG9ycywgY2FyZF9yZXMtPmNvdW50X2VuY29kZXJzKTsKIAogb3V0OgpAQCAtMTMxMiw3ICsxMzE0LDcgQEAKIAogCW1lbXNldCgmdV9tb2RlLCAwLCBzaXplb2Yoc3RydWN0IGRybV9tb2RlX21vZGVpbmZvKSk7CiAKLQlEUk1fREVCVUdfS01TKCJjb25uZWN0b3IgaWQgJWQ6XG4iLCBvdXRfcmVzcC0+Y29ubmVjdG9yX2lkKTsKKwlEUk1fREVCVUdfS01TKCJbQ09OTkVDVE9SOiVkOj9dXG4iLCBvdXRfcmVzcC0+Y29ubmVjdG9yX2lkKTsKIAogCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwogCkBAIC0xNDkzLDYgKzE0OTUsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAJY3J0YyA9IG9ial90b19jcnRjKG9iaik7CisJRFJNX0RFQlVHX0tNUygiW0NSVEM6JWRdXG4iLCBjcnRjLT5iYXNlLmlkKTsKIAogCWlmIChjcnRjX3JlcS0+bW9kZV92YWxpZCkgewogCQkvKiBJZiB3ZSBoYXZlIGEgbW9kZSB3ZSBuZWVkIGEgZnJhbWVidWZmZXIuICovCkBAIC0xNTY5LDYgKzE1NzIsOSBAQAogCQkJCWdvdG8gb3V0OwogCQkJfQogCQkJY29ubmVjdG9yID0gb2JqX3RvX2Nvbm5lY3RvcihvYmopOworCQkJRFJNX0RFQlVHX0tNUygiW0NPTk5FQ1RPUjolZDolc11cbiIsCisJCQkJCWNvbm5lY3Rvci0+YmFzZS5pZCwKKwkJCQkJZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKIAogCQkJY29ubmVjdG9yX3NldFtpXSA9IGNvbm5lY3RvcjsKIAkJfQpAQCAtMTY4NCw2ICsxNjkwLDcgQEAKIAogCXItPmZiX2lkID0gZmItPmJhc2UuaWQ7CiAJbGlzdF9hZGQoJmZiLT5maWxwX2hlYWQsICZmaWxlX3ByaXYtPmZicyk7CisJRFJNX0RFQlVHX0tNUygiW0ZCOiVkXVxuIiwgZmItPmJhc2UuaWQpOwogCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKQEAgLTI2MTAsNiArMjYxNywxNSBAQAogCQlnb3RvIG91dDsKIAljcnRjID0gb2JqX3RvX2NydGMob2JqKTsKIAorCWlmIChjcnRjLT5mYiA9PSBOVUxMKSB7CisJCS8qIFRoZSBmcmFtZWJ1ZmZlciBpcyBjdXJyZW50bHkgdW5ib3VuZCwgcHJlc3VtYWJseQorCQkgKiBkdWUgdG8gYSBob3RwbHVnIGV2ZW50LCB0aGF0IHVzZXJzcGFjZSBoYXMgbm90CisJCSAqIHlldCBkaXNjb3ZlcmVkLgorCQkgKi8KKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKIAlpZiAoY3J0Yy0+ZnVuY3MtPnBhZ2VfZmxpcCA9PSBOVUxMKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCmluZGV4IDliMmE1NDEuLjExZmU5YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKQEAgLTg2LDcgKzg2LDggQEAKIAlpbnQgY291bnQgPSAwOwogCWludCBtb2RlX2ZsYWdzID0gMDsKIAotCURSTV9ERUJVR19LTVMoIiVzXG4iLCBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOworCURSTV9ERUJVR19LTVMoIltDT05ORUNUT1I6JWQ6JXNdXG4iLCBjb25uZWN0b3ItPmJhc2UuaWQsCisJCQlkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOwogCS8qIHNldCBhbGwgbW9kZXMgdG8gdGhlIHVudmVyaWZpZWQgc3RhdGUgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobW9kZSwgdCwgJmNvbm5lY3Rvci0+bW9kZXMsIGhlYWQpCiAJCW1vZGUtPnN0YXR1cyA9IE1PREVfVU5WRVJJRklFRDsKQEAgLTEwMiw4ICsxMDMsOCBAQAogCQljb25uZWN0b3ItPnN0YXR1cyA9IGNvbm5lY3Rvci0+ZnVuY3MtPmRldGVjdChjb25uZWN0b3IpOwogCiAJaWYgKGNvbm5lY3Rvci0+c3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkKSB7Ci0JCURSTV9ERUJVR19LTVMoIiVzIGlzIGRpc2Nvbm5lY3RlZFxuIiwKLQkJCSAgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKKwkJRFJNX0RFQlVHX0tNUygiW0NPTk5FQ1RPUjolZDolc10gZGlzY29ubmVjdGVkXG4iLAorCQkJY29ubmVjdG9yLT5iYXNlLmlkLCBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOwogCQlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubmVjdG9yLCBOVUxMKTsKIAkJZ290byBwcnVuZTsKIAl9CkBAIC0xNDEsOCArMTQyLDggQEAKIAogCWRybV9tb2RlX3NvcnQoJmNvbm5lY3Rvci0+bW9kZXMpOwogCi0JRFJNX0RFQlVHX0tNUygiUHJvYmVkIG1vZGVzIGZvciAlc1xuIiwKLQkJCQlkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOworCURSTV9ERUJVR19LTVMoIltDT05ORUNUT1I6JWQ6JXNdIHByb2JlZCBtb2RlcyA6XG4iLCBjb25uZWN0b3ItPmJhc2UuaWQsCisJCQlkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtb2RlLCB0LCAmY29ubmVjdG9yLT5tb2RlcywgaGVhZCkgewogCQltb2RlLT52cmVmcmVzaCA9IGRybV9tb2RlX3ZyZWZyZXNoKG1vZGUpOwogCkBAIC0yMDEsNiArMjAyLDE3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGRybV9oZWxwZXJfY3J0Y19pbl91c2UpOwogCitzdGF0aWMgdm9pZAorZHJtX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqZW5jb2Rlcl9mdW5jcyA9IGVuY29kZXItPmhlbHBlcl9wcml2YXRlOworCisJaWYgKGVuY29kZXJfZnVuY3MtPmRpc2FibGUpCisJCSgqZW5jb2Rlcl9mdW5jcy0+ZGlzYWJsZSkoZW5jb2Rlcik7CisJZWxzZQorCQkoKmVuY29kZXJfZnVuY3MtPmRwbXMpKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT0ZGKTsKK30KKwogLyoqCiAgKiBkcm1faGVscGVyX2Rpc2FibGVfdW51c2VkX2Z1bmN0aW9ucyAtIGRpc2FibGUgdW51c2VkIG9iamVjdHMKICAqIEBkZXY6IERSTSBkZXZpY2UKQEAgLTIxNSw3ICsyMjcsNiBAQAogewogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwotCXN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgKmVuY29kZXJfZnVuY3M7CiAJc3RydWN0IGRybV9jcnRjICpjcnRjOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CkBAIC0yMjYsMTIgKzIzNyw4IEBACiAJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKLQkJZW5jb2Rlcl9mdW5jcyA9IGVuY29kZXItPmhlbHBlcl9wcml2YXRlOwogCQlpZiAoIWRybV9oZWxwZXJfZW5jb2Rlcl9pbl91c2UoZW5jb2RlcikpIHsKLQkJCWlmIChlbmNvZGVyX2Z1bmNzLT5kaXNhYmxlKQotCQkJCSgqZW5jb2Rlcl9mdW5jcy0+ZGlzYWJsZSkoZW5jb2Rlcik7Ci0JCQllbHNlCi0JCQkJKCplbmNvZGVyX2Z1bmNzLT5kcG1zKShlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09GRik7CisJCQlkcm1fZW5jb2Rlcl9kaXNhYmxlKGVuY29kZXIpOwogCQkJLyogZGlzY29ubmVjdG9yIGVuY29kZXIgZnJvbSBhbnkgY29ubmVjdG9yICovCiAJCQllbmNvZGVyLT5jcnRjID0gTlVMTDsKIAkJfQpAQCAtMjQxLDcgKzI0OCwxMCBAQAogCQlzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpjcnRjX2Z1bmNzID0gY3J0Yy0+aGVscGVyX3ByaXZhdGU7CiAJCWNydGMtPmVuYWJsZWQgPSBkcm1faGVscGVyX2NydGNfaW5fdXNlKGNydGMpOwogCQlpZiAoIWNydGMtPmVuYWJsZWQpIHsKLQkJCWNydGNfZnVuY3MtPmRwbXMoY3J0YywgRFJNX01PREVfRFBNU19PRkYpOworCQkJaWYgKGNydGNfZnVuY3MtPmRpc2FibGUpCisJCQkJKCpjcnRjX2Z1bmNzLT5kaXNhYmxlKShjcnRjKTsKKwkJCWVsc2UKKwkJCQkoKmNydGNfZnVuY3MtPmRwbXMpKGNydGMsIERSTV9NT0RFX0RQTVNfT0ZGKTsKIAkJCWNydGMtPmZiID0gTlVMTDsKIAkJfQogCX0KQEAgLTI5MiwxMSArMzAyLDExIEBACiAJCWVuY29kZXJfZnVuY3MgPSBlbmNvZGVyLT5oZWxwZXJfcHJpdmF0ZTsKIAkJLyogRGlzYWJsZSB1bnVzZWQgZW5jb2RlcnMgKi8KIAkJaWYgKGVuY29kZXItPmNydGMgPT0gTlVMTCkKLQkJCSgqZW5jb2Rlcl9mdW5jcy0+ZHBtcykoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOworCQkJZHJtX2VuY29kZXJfZGlzYWJsZShlbmNvZGVyKTsKIAkJLyogRGlzYWJsZSBlbmNvZGVycyB3aG9zZSBDUlRDIGlzIGFib3V0IHRvIGNoYW5nZSAqLwogCQlpZiAoZW5jb2Rlcl9mdW5jcy0+Z2V0X2NydGMgJiYKIAkJICAgIGVuY29kZXItPmNydGMgIT0gKCplbmNvZGVyX2Z1bmNzLT5nZXRfY3J0YykoZW5jb2RlcikpCi0JCQkoKmVuY29kZXJfZnVuY3MtPmRwbXMpKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT0ZGKTsKKwkJCWRybV9lbmNvZGVyX2Rpc2FibGUoZW5jb2Rlcik7CiAJfQogfQogCkBAIC0zNjUsNiArMzc1LDcgQEAKIAlpZiAoIShyZXQgPSBjcnRjX2Z1bmNzLT5tb2RlX2ZpeHVwKGNydGMsIG1vZGUsIGFkanVzdGVkX21vZGUpKSkgewogCQlnb3RvIGRvbmU7CiAJfQorCURSTV9ERUJVR19LTVMoIltDUlRDOiVkXVxuIiwgY3J0Yy0+YmFzZS5pZCk7CiAKIAkvKiBQcmVwYXJlIHRoZSBlbmNvZGVycyBhbmQgQ1JUQ3MgYmVmb3JlIHNldHRpbmcgdGhlIG1vZGUuICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKQEAgLTM5Miw4ICs0MDMsOSBAQAogCQlpZiAoZW5jb2Rlci0+Y3J0YyAhPSBjcnRjKQogCQkJY29udGludWU7CiAKLQkJRFJNX0RFQlVHKCIlczogc2V0IG1vZGUgJXMgJXhcbiIsIGRybV9nZXRfZW5jb2Rlcl9uYW1lKGVuY29kZXIpLAotCQkJIG1vZGUtPm5hbWUsIG1vZGUtPmJhc2UuaWQpOworCQlEUk1fREVCVUdfS01TKCJbRU5DT0RFUjolZDolc10gc2V0IFtNT0RFOiVkOiVzXVxuIiwKKwkJCWVuY29kZXItPmJhc2UuaWQsIGRybV9nZXRfZW5jb2Rlcl9uYW1lKGVuY29kZXIpLAorCQkJbW9kZS0+YmFzZS5pZCwgbW9kZS0+bmFtZSk7CiAJCWVuY29kZXJfZnVuY3MgPSBlbmNvZGVyLT5oZWxwZXJfcHJpdmF0ZTsKIAkJZW5jb2Rlcl9mdW5jcy0+bW9kZV9zZXQoZW5jb2RlciwgbW9kZSwgYWRqdXN0ZWRfbW9kZSk7CiAJfQpAQCAtNDY5LDEwICs0ODEsMTUgQEAKIAogCWNydGNfZnVuY3MgPSBzZXQtPmNydGMtPmhlbHBlcl9wcml2YXRlOwogCi0JRFJNX0RFQlVHX0tNUygiY3J0YzogJXAgJWQgZmI6ICVwIGNvbm5lY3RvcnM6ICVwIG51bV9jb25uZWN0b3JzOiIKLQkJCSIgJWQgKHgsIHkpICglaSwgJWkpXG4iLAotCQkgIHNldC0+Y3J0Yywgc2V0LT5jcnRjLT5iYXNlLmlkLCBzZXQtPmZiLCBzZXQtPmNvbm5lY3RvcnMsCi0JCSAgKGludClzZXQtPm51bV9jb25uZWN0b3JzLCBzZXQtPngsIHNldC0+eSk7CisJaWYgKHNldC0+ZmIpIHsKKwkJRFJNX0RFQlVHX0tNUygiW0NSVEM6JWRdIFtGQjolZF0gI2Nvbm5lY3RvcnM9JWQgKHggeSkgKCVpICVpKVxuIiwKKwkJCQlzZXQtPmNydGMtPmJhc2UuaWQsIHNldC0+ZmItPmJhc2UuaWQsCisJCQkJKGludClzZXQtPm51bV9jb25uZWN0b3JzLCBzZXQtPngsIHNldC0+eSk7CisJfSBlbHNlIHsKKwkJRFJNX0RFQlVHX0tNUygiW0NSVEM6JWRdIFtOT0ZCXSAjY29ubmVjdG9ycz0lZCAoeCB5KSAoJWkgJWkpXG4iLAorCQkJCXNldC0+Y3J0Yy0+YmFzZS5pZCwgKGludClzZXQtPm51bV9jb25uZWN0b3JzLAorCQkJCXNldC0+eCwgc2V0LT55KTsKKwl9CiAKIAlkZXYgPSBzZXQtPmNydGMtPmRldjsKIApAQCAtNjAxLDggKzYxOCwxNCBAQAogCQkJbW9kZV9jaGFuZ2VkID0gdHJ1ZTsKIAkJCWNvbm5lY3Rvci0+ZW5jb2Rlci0+Y3J0YyA9IG5ld19jcnRjOwogCQl9Ci0JCURSTV9ERUJVR19LTVMoInNldHRpbmcgY29ubmVjdG9yICVkIGNydGMgdG8gJXBcbiIsCi0JCQkgIGNvbm5lY3Rvci0+YmFzZS5pZCwgbmV3X2NydGMpOworCQlpZiAobmV3X2NydGMpIHsKKwkJCURSTV9ERUJVR19LTVMoIltDT05ORUNUT1I6JWQ6JXNdIHRvIFtDUlRDOiVkXVxuIiwKKwkJCQljb25uZWN0b3ItPmJhc2UuaWQsIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSwKKwkJCQluZXdfY3J0Yy0+YmFzZS5pZCk7CisJCX0gZWxzZSB7CisJCQlEUk1fREVCVUdfS01TKCJbQ09OTkVDVE9SOiVkOiVzXSB0byBbTk9DUlRDXVxuIiwKKwkJCQljb25uZWN0b3ItPmJhc2UuaWQsIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CisJCX0KIAl9CiAKIAkvKiBtb2RlX3NldF9iYXNlIGlzIG5vdCBhIHJlcXVpcmVkIGZ1bmN0aW9uICovCkBAIC02MjAsOCArNjQzLDggQEAKIAkJCWlmICghZHJtX2NydGNfaGVscGVyX3NldF9tb2RlKHNldC0+Y3J0Yywgc2V0LT5tb2RlLAogCQkJCQkJICAgICAgc2V0LT54LCBzZXQtPnksCiAJCQkJCQkgICAgICBvbGRfZmIpKSB7Ci0JCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gc2V0IG1vZGUgb24gY3J0YyAlcFxuIiwKLQkJCQkJICBzZXQtPmNydGMpOworCQkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHNldCBtb2RlIG9uIFtDUlRDOiVkXVxuIiwKKwkJCQkJICBzZXQtPmNydGMtPmJhc2UuaWQpOwogCQkJCXJldCA9IC1FSU5WQUw7CiAJCQkJZ290byBmYWlsOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKaW5kZXggNGE2NjIwMS4uOTAyODhlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCkBAIC0yNDMsNDcgKzI0MywyMCBAQAogICoKICAqIEluaXRpYWxpemVzIGFuIGFycmF5IG9mIGRybV9kZXZpY2Ugc3RydWN0dXJlcywgYW5kIGF0dGVtcHRzIHRvCiAgKiBpbml0aWFsaXplIGFsbCBhdmFpbGFibGUgZGV2aWNlcywgdXNpbmcgY29uc2VjdXRpdmUgbWlub3JzLCByZWdpc3RlcmluZyB0aGUKLSAqIHN0dWJzIGFuZCBpbml0aWFsaXppbmcgdGhlIEFHUCBkZXZpY2UuCisgKiBzdHVicyBhbmQgaW5pdGlhbGl6aW5nIHRoZSBkZXZpY2UuCiAgKgogICogRXhwYW5kcyB0aGUgXGMgRFJJVkVSX1BSRUlOSVQgYW5kIFxjIERSSVZFUl9QT1NUX0lOSVQgbWFjcm9zIGJlZm9yZSBhbmQKICAqIGFmdGVyIHRoZSBpbml0aWFsaXphdGlvbiBmb3IgZHJpdmVyIGN1c3RvbWl6YXRpb24uCiAgKi8KIGludCBkcm1faW5pdChzdHJ1Y3QgZHJtX2RyaXZlciAqZHJpdmVyKQogewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKLQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGlkOwotCWludCBpOwotCiAJRFJNX0RFQlVHKCJcbiIpOwotCiAJSU5JVF9MSVNUX0hFQUQoJmRyaXZlci0+ZGV2aWNlX2xpc3QpOwogCi0JaWYgKGRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX01PREVTRVQpCi0JCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXItPnBjaV9kcml2ZXIpOwotCi0JLyogSWYgbm90IHVzaW5nIEtNUywgZmFsbCBiYWNrIHRvIHN0ZWFsdGggbW9kZSBtYW51YWwgc2Nhbm5pbmcuICovCi0JZm9yIChpID0gMDsgZHJpdmVyLT5wY2lfZHJpdmVyLmlkX3RhYmxlW2ldLnZlbmRvciAhPSAwOyBpKyspIHsKLQkJcGlkID0gJmRyaXZlci0+cGNpX2RyaXZlci5pZF90YWJsZVtpXTsKLQotCQkvKiBMb29wIGFyb3VuZCBzZXR0aW5nIHVwIGEgRFJNIGRldmljZSBmb3IgZWFjaCBQQ0kgZGV2aWNlCi0JCSAqIG1hdGNoaW5nIG91ciBJRCBhbmQgZGV2aWNlIGNsYXNzLiAgSWYgd2UgaGFkIHRoZSBpbnRlcm5hbAotCQkgKiBmdW5jdGlvbiB0aGF0IHBjaV9nZXRfc3Vic3lzIGFuZCBwY2lfZ2V0X2NsYXNzIHVzZWQsIHdlJ2QKLQkJICogYmUgYWJsZSB0byBqdXN0IHBhc3MgcGlkIGluIGluc3RlYWQgb2YgZG9pbmcgYSB0d28tc3RhZ2UKLQkJICogdGhpbmcuCi0JCSAqLwotCQlwZGV2ID0gTlVMTDsKLQkJd2hpbGUgKChwZGV2ID0KLQkJCXBjaV9nZXRfc3Vic3lzKHBpZC0+dmVuZG9yLCBwaWQtPmRldmljZSwgcGlkLT5zdWJ2ZW5kb3IsCi0JCQkJICAgICAgIHBpZC0+c3ViZGV2aWNlLCBwZGV2KSkgIT0gTlVMTCkgewotCQkJaWYgKChwZGV2LT5jbGFzcyAmIHBpZC0+Y2xhc3NfbWFzaykgIT0gcGlkLT5jbGFzcykKLQkJCQljb250aW51ZTsKLQotCQkJLyogc3RlYWx0aCBtb2RlIHJlcXVpcmVzIGEgbWFudWFsIHByb2JlICovCi0JCQlwY2lfZGV2X2dldChwZGV2KTsKLQkJCWRybV9nZXRfZGV2KHBkZXYsIHBpZCwgZHJpdmVyKTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKKwlpZiAoZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfVVNFX1BMQVRGT1JNX0RFVklDRSkKKwkJcmV0dXJuIGRybV9wbGF0Zm9ybV9pbml0KGRyaXZlcik7CisJZWxzZQorCQlyZXR1cm4gZHJtX3BjaV9pbml0KGRyaXZlcik7CiB9CiAKIEVYUE9SVF9TWU1CT0woZHJtX2luaXQpOwpAQCAtMzE1LDYgKzI4OCw3IEBACiB7CiAJaW50IHJldCA9IC1FTk9NRU07CiAKKwlkcm1fZ2xvYmFsX2luaXQoKTsKIAlpZHJfaW5pdCgmZHJtX21pbm9yc19pZHIpOwogCiAJaWYgKHJlZ2lzdGVyX2NocmRldihEUk1fTUFKT1IsICJkcm0iLCAmZHJtX3N0dWJfZm9wcykpCkBAIC0zNjIsNiArMzM2LDcgQEAKIAogCXVucmVnaXN0ZXJfY2hyZGV2KERSTV9NQUpPUiwgImRybSIpOwogCisJaWRyX3JlbW92ZV9hbGwoJmRybV9taW5vcnNfaWRyKTsKIAlpZHJfZGVzdHJveSgmZHJtX21pbm9yc19pZHIpOwogfQogCkBAIC01MDYsOSArNDgxLDkgQEAKIAkJaWYgKGlvY3RsLT5mbGFncyAmIERSTV9VTkxPQ0tFRCkKIAkJCXJldGNvZGUgPSBmdW5jKGRldiwga2RhdGEsIGZpbGVfcHJpdik7CiAJCWVsc2UgewotCQkJbG9ja19rZXJuZWwoKTsKKwkJCW11dGV4X2xvY2soJmRybV9nbG9iYWxfbXV0ZXgpOwogCQkJcmV0Y29kZSA9IGZ1bmMoZGV2LCBrZGF0YSwgZmlsZV9wcml2KTsKLQkJCXVubG9ja19rZXJuZWwoKTsKKwkJCW11dGV4X3VubG9jaygmZHJtX2dsb2JhbF9tdXRleCk7CiAJCX0KIAogCQlpZiAoY21kICYgSU9DX09VVCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwppbmRleCBjMTk4MTg2Li5kY2U1YzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwpAQCAtMjgyLDcgKzI4Miw3IEBACiAJcmV0dXJuIGJsb2NrOwogCiBjYXJwOgotCWRldl93YXJuKCZjb25uZWN0b3ItPmRldi0+cGRldi0+ZGV2LCAiJXM6IEVESUQgYmxvY2sgJWQgaW52YWxpZC5cbiIsCisJZGV2X3dhcm4oY29ubmVjdG9yLT5kZXYtPmRldiwgIiVzOiBFRElEIGJsb2NrICVkIGludmFsaWQuXG4iLAogCQkgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpLCBqKTsKIAogb3V0OgpAQCAtODY0LDggKzg2NCw4IEBACiAJCW1vZGUgPSBkcm1fY3Z0X21vZGUoZGV2LCAxMzY2LCA3NjgsIHZyZWZyZXNoX3JhdGUsIDAsIDAsCiAJCQkJICAgIGZhbHNlKTsKIAkJbW9kZS0+aGRpc3BsYXkgPSAxMzY2OwotCQltb2RlLT52c3luY19zdGFydCA9IG1vZGUtPnZzeW5jX3N0YXJ0IC0gMTsKLQkJbW9kZS0+dnN5bmNfZW5kID0gbW9kZS0+dnN5bmNfZW5kIC0gMTsKKwkJbW9kZS0+aHN5bmNfc3RhcnQgPSBtb2RlLT5oc3luY19zdGFydCAtIDE7CisJCW1vZGUtPmhzeW5jX2VuZCA9IG1vZGUtPmhzeW5jX2VuZCAtIDE7CiAJCXJldHVybiBtb2RlOwogCX0KIApAQCAtOTI5LDEzICs5MjksMTEgQEAKIAkJeyAxNDQwLCAgNTc2IH0sCiAJCXsgMjg4MCwgIDU3NiB9LAogCX07Ci0Jc3RhdGljIGNvbnN0IGludCBuX3NpemVzID0KLQkJc2l6ZW9mKGNlYV9pbnRlcmxhY2VkKS9zaXplb2YoY2VhX2ludGVybGFjZWRbMF0pOwogCiAJaWYgKCEocHQtPm1pc2MgJiBEUk1fRURJRF9QVF9JTlRFUkxBQ0VEKSkKIAkJcmV0dXJuOwogCi0JZm9yIChpID0gMDsgaSA8IG5fc2l6ZXM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNlYV9pbnRlcmxhY2VkKTsgaSsrKSB7CiAJCWlmICgobW9kZS0+aGRpc3BsYXkgPT0gY2VhX2ludGVybGFjZWRbaV0udykgJiYKIAkJICAgIChtb2RlLT52ZGlzcGxheSA9PSBjZWFfaW50ZXJsYWNlZFtpXS5oIC8gMikpIHsKIAkJCW1vZGUtPnZkaXNwbGF5ICo9IDI7CkBAIC0xMzc1LDcgKzEzNzMsNiBAQAogCXsgMTkyMCwgMTQ0MCwgNjAsIDAgfSwKIAl7IDE5MjAsIDE0NDAsIDc1LCAwIH0sCiB9Owotc3RhdGljIGNvbnN0IGludCBudW1fZXN0M19tb2RlcyA9IHNpemVvZihlc3QzX21vZGVzKSAvIHNpemVvZihlc3QzX21vZGVzWzBdKTsKIAogc3RhdGljIGludAogZHJtX2VzdDNfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGRldGFpbGVkX3RpbWluZyAqdGltaW5nKQpAQCAtMTM4Nyw3ICsxMzg0LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CiAJCWZvciAoaiA9IDc7IGogPiAwOyBqLS0pIHsKIAkJCW0gPSAoaSAqIDgpICsgKDcgLSBqKTsKLQkJCWlmIChtID49IG51bV9lc3QzX21vZGVzKQorCQkJaWYgKG0gPj0gQVJSQVlfU0laRShlc3QzX21vZGVzKSkKIAkJCQlicmVhazsKIAkJCWlmIChlc3RbaV0gJiAoMSA8PCBqKSkgewogCQkJCW1vZGUgPSBkcm1fbW9kZV9maW5kX2RtdChjb25uZWN0b3ItPmRldiwKQEAgLTE2MjYsNyArMTYyMyw3IEBACiAJCXJldHVybiAwOwogCX0KIAlpZiAoIWRybV9lZGlkX2lzX3ZhbGlkKGVkaWQpKSB7Ci0JCWRldl93YXJuKCZjb25uZWN0b3ItPmRldi0+cGRldi0+ZGV2LCAiJXM6IEVESUQgaW52YWxpZC5cbiIsCisJCWRldl93YXJuKGNvbm5lY3Rvci0+ZGV2LT5kZXYsICIlczogRURJRCBpbnZhbGlkLlxuIiwKIAkJCSBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOwogCQlyZXR1cm4gMDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2VuY29kZXJfc2xhdmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZW5jb2Rlcl9zbGF2ZS5jCmluZGV4IGYwMTg0NjkuLmQ2MmMwNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZW5jb2Rlcl9zbGF2ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZW5jb2Rlcl9zbGF2ZS5jCkBAIC00MSw2ICs0MSw5IEBACiAgKiAmZHJtX2VuY29kZXJfc2xhdmUuIFRoZSBAc2xhdmVfZnVuY3MgZmllbGQgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoCiAgKiB0aGUgaG9va3MgcHJvdmlkZWQgYnkgdGhlIHNsYXZlIGRyaXZlci4KICAqCisgKiBJZiBAaW5mby0+cGxhdGZvcm1fZGF0YSBpcyBub24tTlVMTCBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGluaXRpYWwKKyAqIHNsYXZlIGNvbmZpZy4KKyAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUsIGluIHBhcnRpY3VsYXIsCiAgKiAtRU5PREVWIGlzIHJldHVybmVkIHdoZW4gbm8gbWF0Y2hpbmcgZHJpdmVyIGlzIGZvdW5kLgogICovCkBAIC04NSw2ICs4OCwxMCBAQAogCWlmIChlcnIpCiAJCWdvdG8gZmFpbF91bnJlZ2lzdGVyOwogCisJaWYgKGluZm8tPnBsYXRmb3JtX2RhdGEpCisJCWVuY29kZXItPnNsYXZlX2Z1bmNzLT5zZXRfY29uZmlnKCZlbmNvZGVyLT5iYXNlLAorCQkJCQkJIGluZm8tPnBsYXRmb3JtX2RhdGEpOworCiAJcmV0dXJuIDA7CiAKIGZhaWxfdW5yZWdpc3RlcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCmluZGV4IDcxOTY2MjAuLmRlODJlMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwpAQCAtMjQxLDYgKzI0MSw4MCBAQAogCXJldHVybiAwOwogfQogCitpbnQgZHJtX2ZiX2hlbHBlcl9kZWJ1Z19lbnRlcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVyID0gaW5mby0+cGFyOworCXN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgKmZ1bmNzOworCWludCBpOworCisJaWYgKGxpc3RfZW1wdHkoJmtlcm5lbF9mYl9oZWxwZXJfbGlzdCkpCisJCXJldHVybiBmYWxzZTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoaGVscGVyLCAma2VybmVsX2ZiX2hlbHBlcl9saXN0LCBrZXJuZWxfZmJfbGlzdCkgeworCQlmb3IgKGkgPSAwOyBpIDwgaGVscGVyLT5jcnRjX2NvdW50OyBpKyspIHsKKwkJCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVfc2V0ID0KKwkJCQkmaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQ7CisKKwkJCWlmICghbW9kZV9zZXQtPmNydGMtPmVuYWJsZWQpCisJCQkJY29udGludWU7CisKKwkJCWZ1bmNzID0JbW9kZV9zZXQtPmNydGMtPmhlbHBlcl9wcml2YXRlOworCQkJZnVuY3MtPm1vZGVfc2V0X2Jhc2VfYXRvbWljKG1vZGVfc2V0LT5jcnRjLAorCQkJCQkJICAgIG1vZGVfc2V0LT5mYiwKKwkJCQkJCSAgICBtb2RlX3NldC0+eCwKKwkJCQkJCSAgICBtb2RlX3NldC0+eSk7CisKKwkJfQorCX0KKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX2RlYnVnX2VudGVyKTsKKworLyogRmluZCB0aGUgcmVhbCBmYiBmb3IgYSBnaXZlbiBmYiBoZWxwZXIgQ1JUQyAqLworc3RhdGljIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmRybV9tb2RlX2NvbmZpZ19mYihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJtX2NydGMgKmM7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCQlpZiAoY3J0Yy0+YmFzZS5pZCA9PSBjLT5iYXNlLmlkKQorCQkJcmV0dXJuIGMtPmZiOworCX0KKworCXJldHVybiBOVUxMOworfQorCitpbnQgZHJtX2ZiX2hlbHBlcl9kZWJ1Z19sZWF2ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVyID0gaW5mby0+cGFyOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpmdW5jczsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBoZWxwZXItPmNydGNfY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2RlX3NldCA9ICZoZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldDsKKwkJY3J0YyA9IG1vZGVfc2V0LT5jcnRjOworCQlmdW5jcyA9IGNydGMtPmhlbHBlcl9wcml2YXRlOworCQlmYiA9IGRybV9tb2RlX2NvbmZpZ19mYihjcnRjKTsKKworCQlpZiAoIWNydGMtPmVuYWJsZWQpCisJCQljb250aW51ZTsKKworCQlpZiAoIWZiKSB7CisJCQlEUk1fRVJST1IoIm5vIGZiIHRvIHJlc3RvcmU/P1xuIik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWZ1bmNzLT5tb2RlX3NldF9iYXNlX2F0b21pYyhtb2RlX3NldC0+Y3J0YywgZmIsIGNydGMtPngsCisJCQkJCSAgICBjcnRjLT55KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9kZWJ1Z19sZWF2ZSk7CisKIGJvb2wgZHJtX2ZiX2hlbHBlcl9mb3JjZV9rZXJuZWxfbW9kZSh2b2lkKQogewogCWludCBpID0gMDsKQEAgLTYxMSw3ICs2ODUsNyBAQAogCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gZmJfaGVscGVyLT5mYjsKIAlpbnQgZGVwdGg7CiAKLQlpZiAodmFyLT5waXhjbG9jayAhPSAwKQorCWlmICh2YXItPnBpeGNsb2NrICE9IDAgfHwgaW5fZGJnX21hc3RlcigpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIE5lZWQgdG8gcmVzaXplIHRoZSBmYiBvYmplY3QgISEhICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCmluZGV4IGU3YWFjZTIuLjJjYThkZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCkBAIC0zOSw2ICszOSw5IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKKy8qIGZyb20gQktMIHB1c2hkb3duOiBub3RlIHRoYXQgbm90aGluZyBlbHNlIHNlcmlhbGl6ZXMgaWRyX2ZpbmQoKSAqLworREVGSU5FX01VVEVYKGRybV9nbG9iYWxfbXV0ZXgpOworCiBzdGF0aWMgaW50IGRybV9vcGVuX2hlbHBlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJCSAgIHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKIApAQCAtMTc1LDggKzE3OCw3IEBACiAKIAlEUk1fREVCVUcoIlxuIik7CiAKLQkvKiBCS0wgcHVzaGRvd246IG5vdGUgdGhhdCBub3RoaW5nIGVsc2Ugc2VyaWFsaXplcyBpZHJfZmluZCgpICovCi0JbG9ja19rZXJuZWwoKTsKKwltdXRleF9sb2NrKCZkcm1fZ2xvYmFsX211dGV4KTsKIAltaW5vciA9IGlkcl9maW5kKCZkcm1fbWlub3JzX2lkciwgbWlub3JfaWQpOwogCWlmICghbWlub3IpCiAJCWdvdG8gb3V0OwpAQCAtMTk3LDcgKzE5OSw3IEBACiAJZm9wc19wdXQob2xkX2ZvcHMpOwogCiBvdXQ6Ci0JdW5sb2NrX2tlcm5lbCgpOworCW11dGV4X3VubG9jaygmZHJtX2dsb2JhbF9tdXRleCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNDcyLDcgKzQ3NCw3IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZpbGVfcHJpdi0+bWlub3ItPmRldjsKIAlpbnQgcmV0Y29kZSA9IDA7CiAKLQlsb2NrX2tlcm5lbCgpOworCW11dGV4X2xvY2soJmRybV9nbG9iYWxfbXV0ZXgpOwogCiAJRFJNX0RFQlVHKCJvcGVuX2NvdW50ID0gJWRcbiIsIGRldi0+b3Blbl9jb3VudCk7CiAKQEAgLTU3MywxNyArNTc1LDE0IEBACiAJCWlmIChhdG9taWNfcmVhZCgmZGV2LT5pb2N0bF9jb3VudCkpIHsKIAkJCURSTV9FUlJPUigiRGV2aWNlIGJ1c3k6ICVkXG4iLAogCQkJCSAgYXRvbWljX3JlYWQoJmRldi0+aW9jdGxfY291bnQpKTsKLQkJCXNwaW5fdW5sb2NrKCZkZXYtPmNvdW50X2xvY2spOwotCQkJdW5sb2NrX2tlcm5lbCgpOwotCQkJcmV0dXJuIC1FQlVTWTsKKwkJCXJldGNvZGUgPSAtRUJVU1k7CisJCQlnb3RvIG91dDsKIAkJfQotCQlzcGluX3VubG9jaygmZGV2LT5jb3VudF9sb2NrKTsKLQkJdW5sb2NrX2tlcm5lbCgpOwotCQlyZXR1cm4gZHJtX2xhc3RjbG9zZShkZXYpOworCQlyZXRjb2RlID0gZHJtX2xhc3RjbG9zZShkZXYpOwogCX0KK291dDoKIAlzcGluX3VubG9jaygmZGV2LT5jb3VudF9sb2NrKTsKLQotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJmRybV9nbG9iYWxfbXV0ZXgpOwogCiAJcmV0dXJuIHJldGNvZGU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYwppbmRleCAzM2RhZDNmLi40ZjFiODY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKQEAgLTY4LDggKzY4LDE4IEBACiAgKiBXZSBtYWtlIHVwIG9mZnNldHMgZm9yIGJ1ZmZlciBvYmplY3RzIHNvIHdlIGNhbiByZWNvZ25pemUgdGhlbSBhdAogICogbW1hcCB0aW1lLgogICovCisKKy8qIHBnb2ZmIGluIG1tYXAgaXMgYW4gdW5zaWduZWQgbG9uZywgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdAorICogdGhlIGZha2VkIHVwIG9mZnNldCB3aWxsIGZpdAorICovCisKKyNpZiBCSVRTX1BFUl9MT05HID09IDY0CiAjZGVmaW5lIERSTV9GSUxFX1BBR0VfT0ZGU0VUX1NUQVJUICgoMHhGRkZGRkZGRlVMID4+IFBBR0VfU0hJRlQpICsgMSkKICNkZWZpbmUgRFJNX0ZJTEVfUEFHRV9PRkZTRVRfU0laRSAoKDB4RkZGRkZGRkZVTCA+PiBQQUdFX1NISUZUKSAqIDE2KQorI2Vsc2UKKyNkZWZpbmUgRFJNX0ZJTEVfUEFHRV9PRkZTRVRfU1RBUlQgKCgweEZGRkZGRkZVTCA+PiBQQUdFX1NISUZUKSArIDEpCisjZGVmaW5lIERSTV9GSUxFX1BBR0VfT0ZGU0VUX1NJWkUgKCgweEZGRkZGRkZVTCA+PiBQQUdFX1NISUZUKSAqIDE2KQorI2VuZGlmCiAKIC8qKgogICogSW5pdGlhbGl6ZSB0aGUgR0VNIGRldmljZSBmaWVsZHMKQEAgLTQxOSw2ICs0MjksNyBAQAogCWlkcl9mb3JfZWFjaCgmZmlsZV9wcml2YXRlLT5vYmplY3RfaWRyLAogCQkgICAgICZkcm1fZ2VtX29iamVjdF9yZWxlYXNlX2hhbmRsZSwgTlVMTCk7CiAKKwlpZHJfcmVtb3ZlX2FsbCgmZmlsZV9wcml2YXRlLT5vYmplY3RfaWRyKTsKIAlpZHJfZGVzdHJveSgmZmlsZV9wcml2YXRlLT5vYmplY3RfaWRyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nbG9iYWwuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2xvYmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg3ZGM5NjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dsb2JhbC5jCkBAIC0wLDAgKzEsMTEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IFZNd2FyZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMsIEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKKyAqIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEF1dGhvcnM6IFRob21hcyBIZWxsc3Ryb20gPHRoZWxsc3Ryb20tYXQtdm13YXJlLWRvdC1jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgImRybV9nbG9iYWwuaCIKKworc3RydWN0IGRybV9nbG9iYWxfaXRlbSB7CisJc3RydWN0IG11dGV4IG11dGV4OworCXZvaWQgKm9iamVjdDsKKwlpbnQgcmVmY291bnQ7Cit9OworCitzdGF0aWMgc3RydWN0IGRybV9nbG9iYWxfaXRlbSBnbG9iW0RSTV9HTE9CQUxfTlVNXTsKKwordm9pZCBkcm1fZ2xvYmFsX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBEUk1fR0xPQkFMX05VTTsgKytpKSB7CisJCXN0cnVjdCBkcm1fZ2xvYmFsX2l0ZW0gKml0ZW0gPSAmZ2xvYltpXTsKKwkJbXV0ZXhfaW5pdCgmaXRlbS0+bXV0ZXgpOworCQlpdGVtLT5vYmplY3QgPSBOVUxMOworCQlpdGVtLT5yZWZjb3VudCA9IDA7CisJfQorfQorCit2b2lkIGRybV9nbG9iYWxfcmVsZWFzZSh2b2lkKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBEUk1fR0xPQkFMX05VTTsgKytpKSB7CisJCXN0cnVjdCBkcm1fZ2xvYmFsX2l0ZW0gKml0ZW0gPSAmZ2xvYltpXTsKKwkJQlVHX09OKGl0ZW0tPm9iamVjdCAhPSBOVUxMKTsKKwkJQlVHX09OKGl0ZW0tPnJlZmNvdW50ICE9IDApOworCX0KK30KKworaW50IGRybV9nbG9iYWxfaXRlbV9yZWYoc3RydWN0IGRybV9nbG9iYWxfcmVmZXJlbmNlICpyZWYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgZHJtX2dsb2JhbF9pdGVtICppdGVtID0gJmdsb2JbcmVmLT5nbG9iYWxfdHlwZV07CisJdm9pZCAqb2JqZWN0OworCisJbXV0ZXhfbG9jaygmaXRlbS0+bXV0ZXgpOworCWlmIChpdGVtLT5yZWZjb3VudCA9PSAwKSB7CisJCWl0ZW0tPm9iamVjdCA9IGt6YWxsb2MocmVmLT5zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHVubGlrZWx5KGl0ZW0tPm9iamVjdCA9PSBOVUxMKSkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0X2VycjsKKwkJfQorCisJCXJlZi0+b2JqZWN0ID0gaXRlbS0+b2JqZWN0OworCQlyZXQgPSByZWYtPmluaXQocmVmKTsKKwkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJCWdvdG8gb3V0X2VycjsKKworCX0KKwkrK2l0ZW0tPnJlZmNvdW50OworCXJlZi0+b2JqZWN0ID0gaXRlbS0+b2JqZWN0OworCW9iamVjdCA9IGl0ZW0tPm9iamVjdDsKKwltdXRleF91bmxvY2soJml0ZW0tPm11dGV4KTsKKwlyZXR1cm4gMDsKK291dF9lcnI6CisJbXV0ZXhfdW5sb2NrKCZpdGVtLT5tdXRleCk7CisJaXRlbS0+b2JqZWN0ID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2xvYmFsX2l0ZW1fcmVmKTsKKwordm9pZCBkcm1fZ2xvYmFsX2l0ZW1fdW5yZWYoc3RydWN0IGRybV9nbG9iYWxfcmVmZXJlbmNlICpyZWYpCit7CisJc3RydWN0IGRybV9nbG9iYWxfaXRlbSAqaXRlbSA9ICZnbG9iW3JlZi0+Z2xvYmFsX3R5cGVdOworCisJbXV0ZXhfbG9jaygmaXRlbS0+bXV0ZXgpOworCUJVR19PTihpdGVtLT5yZWZjb3VudCA9PSAwKTsKKwlCVUdfT04ocmVmLT5vYmplY3QgIT0gaXRlbS0+b2JqZWN0KTsKKwlpZiAoLS1pdGVtLT5yZWZjb3VudCA9PSAwKSB7CisJCXJlZi0+cmVsZWFzZShyZWYpOworCQlpdGVtLT5vYmplY3QgPSBOVUxMOworCX0KKwltdXRleF91bmxvY2soJml0ZW0tPm11dGV4KTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dsb2JhbF9pdGVtX3VucmVmKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9pbmZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2luZm8uYwppbmRleCBmMGY2YzZiLi4yZWYyYzc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2luZm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2luZm8uYwpAQCAtNTEsMTMgKzUxLDI0IEBACiAJaWYgKCFtYXN0ZXIpCiAJCXJldHVybiAwOwogCi0JaWYgKG1hc3Rlci0+dW5pcXVlKSB7Ci0JCXNlcV9wcmludGYobSwgIiVzICVzICVzXG4iLAotCQkJICAgZGV2LT5kcml2ZXItPnBjaV9kcml2ZXIubmFtZSwKLQkJCSAgIHBjaV9uYW1lKGRldi0+cGRldiksIG1hc3Rlci0+dW5pcXVlKTsKKwlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9VU0VfUExBVEZPUk1fREVWSUNFKSkgeworCQlpZiAobWFzdGVyLT51bmlxdWUpIHsKKwkJCXNlcV9wcmludGYobSwgIiVzICVzICVzXG4iLAorCQkJCQlkZXYtPmRyaXZlci0+cGxhdGZvcm1fZGV2aWNlLT5uYW1lLAorCQkJCQlkZXZfbmFtZShkZXYtPmRldiksIG1hc3Rlci0+dW5pcXVlKTsKKwkJfSBlbHNlIHsKKwkJCXNlcV9wcmludGYobSwgIiVzXG4iLAorCQkJCWRldi0+ZHJpdmVyLT5wbGF0Zm9ybV9kZXZpY2UtPm5hbWUpOworCQl9CiAJfSBlbHNlIHsKLQkJc2VxX3ByaW50ZihtLCAiJXMgJXNcbiIsIGRldi0+ZHJpdmVyLT5wY2lfZHJpdmVyLm5hbWUsCi0JCQkgICBwY2lfbmFtZShkZXYtPnBkZXYpKTsKKwkJaWYgKG1hc3Rlci0+dW5pcXVlKSB7CisJCQlzZXFfcHJpbnRmKG0sICIlcyAlcyAlc1xuIiwKKwkJCQlkZXYtPmRyaXZlci0+cGNpX2RyaXZlci5uYW1lLAorCQkJCWRldl9uYW1lKGRldi0+ZGV2KSwgbWFzdGVyLT51bmlxdWUpOworCQl9IGVsc2UgeworCQkJc2VxX3ByaW50ZihtLCAiJXMgJXNcbiIsIGRldi0+ZHJpdmVyLT5wY2lfZHJpdmVyLm5hbWUsCisJCQkJZGV2X25hbWUoZGV2LT5kZXYpKTsKKwkJfQogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9pb2N0bC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pb2N0bC5jCmluZGV4IDliOWZmNDYuLjdiMDNiMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faW9jdGwuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lvY3RsLmMKQEAgLTY0LDYgKzY0LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkCitkcm1fdW5zZXRfYnVzaWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGRybV9tYXN0ZXIgKm1hc3RlcikKK3sKKwlrZnJlZShkZXYtPmRldm5hbWUpOworCWRldi0+ZGV2bmFtZSA9IE5VTEw7CisKKwlrZnJlZShtYXN0ZXItPnVuaXF1ZSk7CisJbWFzdGVyLT51bmlxdWUgPSBOVUxMOworCW1hc3Rlci0+dW5pcXVlX2xlbiA9IDA7CisJbWFzdGVyLT51bmlxdWVfc2l6ZSA9IDA7Cit9CisKIC8qKgogICogU2V0IHRoZSBidXMgaWQuCiAgKgpAQCAtOTQsMTcgKzEwNywyNCBAQAogCW1hc3Rlci0+dW5pcXVlX2xlbiA9IHUtPnVuaXF1ZV9sZW47CiAJbWFzdGVyLT51bmlxdWVfc2l6ZSA9IHUtPnVuaXF1ZV9sZW4gKyAxOwogCW1hc3Rlci0+dW5pcXVlID0ga21hbGxvYyhtYXN0ZXItPnVuaXF1ZV9zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1hc3Rlci0+dW5pcXVlKQotCQlyZXR1cm4gLUVOT01FTTsKLQlpZiAoY29weV9mcm9tX3VzZXIobWFzdGVyLT51bmlxdWUsIHUtPnVuaXF1ZSwgbWFzdGVyLT51bmlxdWVfbGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKCFtYXN0ZXItPnVuaXF1ZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwlpZiAoY29weV9mcm9tX3VzZXIobWFzdGVyLT51bmlxdWUsIHUtPnVuaXF1ZSwgbWFzdGVyLT51bmlxdWVfbGVuKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGVycjsKKwl9CiAKIAltYXN0ZXItPnVuaXF1ZVttYXN0ZXItPnVuaXF1ZV9sZW5dID0gJ1wwJzsKIAogCWRldi0+ZGV2bmFtZSA9IGttYWxsb2Moc3RybGVuKGRldi0+ZHJpdmVyLT5wY2lfZHJpdmVyLm5hbWUpICsKIAkJCSAgICAgICBzdHJsZW4obWFzdGVyLT51bmlxdWUpICsgMiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkZXYtPmRldm5hbWUpCi0JCXJldHVybiAtRU5PTUVNOworCWlmICghZGV2LT5kZXZuYW1lKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KIAogCXNwcmludGYoZGV2LT5kZXZuYW1lLCAiJXNAJXMiLCBkZXYtPmRyaXZlci0+cGNpX2RyaXZlci5uYW1lLAogCQltYXN0ZXItPnVuaXF1ZSk7CkBAIC0xMTMsNTMgKzEzMywxMDMgQEAKIAkgKiBidXNpZC4KIAkgKi8KIAlyZXQgPSBzc2NhbmYobWFzdGVyLT51bmlxdWUsICJQQ0k6JWQ6JWQ6JWQiLCAmYnVzLCAmc2xvdCwgJmZ1bmMpOwotCWlmIChyZXQgIT0gMykKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHJldCAhPSAzKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOworCX0KKwogCWRvbWFpbiA9IGJ1cyA+PiA4OwogCWJ1cyAmPSAweGZmOwogCiAJaWYgKChkb21haW4gIT0gZHJtX2dldF9wY2lfZG9tYWluKGRldikpIHx8CiAJICAgIChidXMgIT0gZGV2LT5wZGV2LT5idXMtPm51bWJlcikgfHwKIAkgICAgKHNsb3QgIT0gUENJX1NMT1QoZGV2LT5wZGV2LT5kZXZmbikpIHx8Ci0JICAgIChmdW5jICE9IFBDSV9GVU5DKGRldi0+cGRldi0+ZGV2Zm4pKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJICAgIChmdW5jICE9IFBDSV9GVU5DKGRldi0+cGRldi0+ZGV2Zm4pKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CiAKIAlyZXR1cm4gMDsKKworZXJyOgorCWRybV91bnNldF9idXNpZChkZXYsIG1hc3Rlcik7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBkcm1fc2V0X2J1c2lkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCXN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIgPSBmaWxlX3ByaXYtPm1hc3RlcjsKLQlpbnQgbGVuOworCWludCBsZW4sIHJldDsKIAogCWlmIChtYXN0ZXItPnVuaXF1ZSAhPSBOVUxMKQotCQlyZXR1cm4gLUVCVVNZOworCQlkcm1fdW5zZXRfYnVzaWQoZGV2LCBtYXN0ZXIpOwogCi0JbWFzdGVyLT51bmlxdWVfbGVuID0gNDA7Ci0JbWFzdGVyLT51bmlxdWVfc2l6ZSA9IG1hc3Rlci0+dW5pcXVlX2xlbjsKLQltYXN0ZXItPnVuaXF1ZSA9IGttYWxsb2MobWFzdGVyLT51bmlxdWVfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKG1hc3Rlci0+dW5pcXVlID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX1VTRV9QTEFURk9STV9ERVZJQ0UpKSB7CisJCW1hc3Rlci0+dW5pcXVlX2xlbiA9IDEwICsgc3RybGVuKGRldi0+cGxhdGZvcm1kZXYtPm5hbWUpOworCQltYXN0ZXItPnVuaXF1ZSA9IGttYWxsb2MobWFzdGVyLT51bmlxdWVfbGVuICsgMSwgR0ZQX0tFUk5FTCk7CiAKLQlsZW4gPSBzbnByaW50ZihtYXN0ZXItPnVuaXF1ZSwgbWFzdGVyLT51bmlxdWVfbGVuLCAicGNpOiUwNHg6JTAyeDolMDJ4LiVkIiwKLQkJICAgICAgIGRybV9nZXRfcGNpX2RvbWFpbihkZXYpLAotCQkgICAgICAgZGV2LT5wZGV2LT5idXMtPm51bWJlciwKLQkJICAgICAgIFBDSV9TTE9UKGRldi0+cGRldi0+ZGV2Zm4pLAotCQkgICAgICAgUENJX0ZVTkMoZGV2LT5wZGV2LT5kZXZmbikpOwotCWlmIChsZW4gPj0gbWFzdGVyLT51bmlxdWVfbGVuKQotCQlEUk1fRVJST1IoImJ1ZmZlciBvdmVyZmxvdyIpOwotCWVsc2UKLQkJbWFzdGVyLT51bmlxdWVfbGVuID0gbGVuOworCQlpZiAobWFzdGVyLT51bmlxdWUgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOwogCi0JZGV2LT5kZXZuYW1lID0ga21hbGxvYyhzdHJsZW4oZGV2LT5kcml2ZXItPnBjaV9kcml2ZXIubmFtZSkgKwotCQkJICAgICAgIG1hc3Rlci0+dW5pcXVlX2xlbiArIDIsIEdGUF9LRVJORUwpOwotCWlmIChkZXYtPmRldm5hbWUgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJCWxlbiA9IHNucHJpbnRmKG1hc3Rlci0+dW5pcXVlLCBtYXN0ZXItPnVuaXF1ZV9sZW4sCisJCQkicGxhdGZvcm06JXMiLCBkZXYtPnBsYXRmb3JtZGV2LT5uYW1lKTsKIAotCXNwcmludGYoZGV2LT5kZXZuYW1lLCAiJXNAJXMiLCBkZXYtPmRyaXZlci0+cGNpX2RyaXZlci5uYW1lLAotCQltYXN0ZXItPnVuaXF1ZSk7CisJCWlmIChsZW4gPiBtYXN0ZXItPnVuaXF1ZV9sZW4pIHsKKwkJCURSTV9FUlJPUigiVW5pcXVlIGJ1ZmZlciBvdmVyZmxvd2VkXG4iKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCWRldi0+ZGV2bmFtZSA9CisJCQlrbWFsbG9jKHN0cmxlbihkZXYtPnBsYXRmb3JtZGV2LT5uYW1lKSArCisJCQkJbWFzdGVyLT51bmlxdWVfbGVuICsgMiwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKGRldi0+ZGV2bmFtZSA9PSBOVUxMKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBlcnI7CisJCX0KKworCQlzcHJpbnRmKGRldi0+ZGV2bmFtZSwgIiVzQCVzIiwgZGV2LT5wbGF0Zm9ybWRldi0+bmFtZSwKKwkJCW1hc3Rlci0+dW5pcXVlKTsKKworCX0gZWxzZSB7CisJCW1hc3Rlci0+dW5pcXVlX2xlbiA9IDQwOworCQltYXN0ZXItPnVuaXF1ZV9zaXplID0gbWFzdGVyLT51bmlxdWVfbGVuOworCQltYXN0ZXItPnVuaXF1ZSA9IGttYWxsb2MobWFzdGVyLT51bmlxdWVfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmIChtYXN0ZXItPnVuaXF1ZSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJbGVuID0gc25wcmludGYobWFzdGVyLT51bmlxdWUsIG1hc3Rlci0+dW5pcXVlX2xlbiwKKwkJCSJwY2k6JTA0eDolMDJ4OiUwMnguJWQiLAorCQkJZHJtX2dldF9wY2lfZG9tYWluKGRldiksCisJCQlkZXYtPnBkZXYtPmJ1cy0+bnVtYmVyLAorCQkJUENJX1NMT1QoZGV2LT5wZGV2LT5kZXZmbiksCisJCQlQQ0lfRlVOQyhkZXYtPnBkZXYtPmRldmZuKSk7CisJCWlmIChsZW4gPj0gbWFzdGVyLT51bmlxdWVfbGVuKSB7CisJCQlEUk1fRVJST1IoImJ1ZmZlciBvdmVyZmxvdyIpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZXJyOworCQl9IGVsc2UKKwkJCW1hc3Rlci0+dW5pcXVlX2xlbiA9IGxlbjsKKworCQlkZXYtPmRldm5hbWUgPQorCQkJa21hbGxvYyhzdHJsZW4oZGV2LT5kcml2ZXItPnBjaV9kcml2ZXIubmFtZSkgKworCQkJCW1hc3Rlci0+dW5pcXVlX2xlbiArIDIsIEdGUF9LRVJORUwpOworCisJCWlmIChkZXYtPmRldm5hbWUgPT0gTlVMTCkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJc3ByaW50ZihkZXYtPmRldm5hbWUsICIlc0AlcyIsIGRldi0+ZHJpdmVyLT5wY2lfZHJpdmVyLm5hbWUsCisJCQltYXN0ZXItPnVuaXF1ZSk7CisJfQogCiAJcmV0dXJuIDA7CisKK2VycjoKKwlkcm1fdW5zZXRfYnVzaWQoZGV2LCBtYXN0ZXIpOworCXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtMzIzLDcgKzM5Myw5IEBACiAJCQkvKgogCQkJICogVmVyc2lvbiAxLjEgaW5jbHVkZXMgdHlpbmcgb2YgRFJNIHRvIHNwZWNpZmljIGRldmljZQogCQkJICovCi0JCQlkcm1fc2V0X2J1c2lkKGRldiwgZmlsZV9wcml2KTsKKwkJCXJldGNvZGUgPSBkcm1fc2V0X2J1c2lkKGRldiwgZmlsZV9wcml2KTsKKwkJCWlmIChyZXRjb2RlKQorCQkJCWdvdG8gZG9uZTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKaW5kZXggYTI2M2I3MC4uOWQzYTUwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCkBAIC0zNCw2ICszNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJkcm1fdHJhY2UuaCIKIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgkvKiBGb3IgdGFzayBxdWV1ZSBzdXBwb3J0ICovCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtNTcsNiArNTgsOSBAQAogewogCXN0cnVjdCBkcm1faXJxX2J1c2lkICpwID0gZGF0YTsKIAorCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX1VTRV9QTEFURk9STV9ERVZJQ0UpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9IQVZFX0lSUSkpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0yMTEsNyArMjE1LDcgQEAKIAlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfSEFWRV9JUlEpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChkZXYtPnBkZXYtPmlycSA9PSAwKQorCWlmIChkcm1fZGV2X3RvX2lycShkZXYpID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwpAQCAtMjI5LDcgKzIzMyw3IEBACiAJZGV2LT5pcnFfZW5hYmxlZCA9IDE7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKLQlEUk1fREVCVUcoImlycT0lZFxuIiwgZGV2LT5wZGV2LT5pcnEpOworCURSTV9ERUJVRygiaXJxPSVkXG4iLCBkcm1fZGV2X3RvX2lycShkZXYpKTsKIAogCS8qIEJlZm9yZSBpbnN0YWxsaW5nIGhhbmRsZXIgKi8KIAlkZXYtPmRyaXZlci0+aXJxX3ByZWluc3RhbGwoZGV2KTsKQEAgLTMwMiwxNCArMzA2LDE0IEBACiAJaWYgKCFpcnFfZW5hYmxlZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlEUk1fREVCVUcoImlycT0lZFxuIiwgZGV2LT5wZGV2LT5pcnEpOworCURSTV9ERUJVRygiaXJxPSVkXG4iLCBkcm1fZGV2X3RvX2lycShkZXYpKTsKIAogCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkKIAkJdmdhX2NsaWVudF9yZWdpc3RlcihkZXYtPnBkZXYsIE5VTEwsIE5VTEwsIE5VTEwpOwogCiAJZGV2LT5kcml2ZXItPmlycV91bmluc3RhbGwoZGV2KTsKIAotCWZyZWVfaXJxKGRldi0+cGRldi0+aXJxLCBkZXYpOworCWZyZWVfaXJxKGRybV9kZXZfdG9faXJxKGRldiksIGRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM0MSw3ICszNDUsNyBAQAogCQlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkKIAkJCXJldHVybiAwOwogCQlpZiAoZGV2LT5pZl92ZXJzaW9uIDwgRFJNX0lGX1ZFUlNJT04oMSwgMikgJiYKLQkJICAgIGN0bC0+aXJxICE9IGRldi0+cGRldi0+aXJxKQorCQkgICAgY3RsLT5pcnEgIT0gZHJtX2Rldl90b19pcnEoZGV2KSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlyZXR1cm4gZHJtX2lycV9pbnN0YWxsKGRldik7CiAJY2FzZSBEUk1fVU5JTlNUX0hBTkRMRVI6CkBAIC01ODcsNiArNTkxLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAllLT5waXBlID0gcGlwZTsKKwllLT5iYXNlLnBpZCA9IGN1cnJlbnQtPnBpZDsKIAllLT5ldmVudC5iYXNlLnR5cGUgPSBEUk1fRVZFTlRfVkJMQU5LOwogCWUtPmV2ZW50LmJhc2UubGVuZ3RoID0gc2l6ZW9mIGUtPmV2ZW50OwogCWUtPmV2ZW50LnVzZXJfZGF0YSA9IHZibHdhaXQtPnJlcXVlc3Quc2lnbmFsOwpAQCAtNjE0LDYgKzYxOSw5IEBACiAJRFJNX0RFQlVHKCJldmVudCBvbiB2YmxhbmsgY291bnQgJWQsIGN1cnJlbnQgJWQsIGNydGMgJWRcbiIsCiAJCSAgdmJsd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZSwgc2VxLCBwaXBlKTsKIAorCXRyYWNlX2RybV92YmxhbmtfZXZlbnRfcXVldWVkKGN1cnJlbnQtPnBpZCwgcGlwZSwKKwkJCQkgICAgICB2Ymx3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlKTsKKwogCWUtPmV2ZW50LnNlcXVlbmNlID0gdmJsd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZTsKIAlpZiAoKHNlcSAtIHZibHdhaXQtPnJlcXVlc3Quc2VxdWVuY2UpIDw9ICgxIDw8IDIzKSkgewogCQllLT5ldmVudC50dl9zZWMgPSBub3cudHZfc2VjOwpAQCAtNjIxLDYgKzYyOSw4IEBACiAJCWRybV92YmxhbmtfcHV0KGRldiwgZS0+cGlwZSk7CiAJCWxpc3RfYWRkX3RhaWwoJmUtPmJhc2UubGluaywgJmUtPmJhc2UuZmlsZV9wcml2LT5ldmVudF9saXN0KTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZlLT5iYXNlLmZpbGVfcHJpdi0+ZXZlbnRfd2FpdCk7CisJCXRyYWNlX2RybV92YmxhbmtfZXZlbnRfZGVsaXZlcmVkKGN1cnJlbnQtPnBpZCwgcGlwZSwKKwkJCQkJCSB2Ymx3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlKTsKIAl9IGVsc2UgewogCQlsaXN0X2FkZF90YWlsKCZlLT5iYXNlLmxpbmssICZkZXYtPnZibGFua19ldmVudF9saXN0KTsKIAl9CkBAIC02NTEsNyArNjYxLDcgQEAKIAlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBpbnQgZmxhZ3MsIHNlcSwgY3J0YzsKIAotCWlmICgoIWRldi0+cGRldi0+aXJxKSB8fCAoIWRldi0+aXJxX2VuYWJsZWQpKQorCWlmICgoIWRybV9kZXZfdG9faXJxKGRldikpIHx8ICghZGV2LT5pcnFfZW5hYmxlZCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHZibHdhaXQtPnJlcXVlc3QudHlwZSAmIF9EUk1fVkJMQU5LX1NJR05BTCkKQEAgLTc1MSw5ICs3NjEsMTMgQEAKIAkJZHJtX3ZibGFua19wdXQoZGV2LCBlLT5waXBlKTsKIAkJbGlzdF9tb3ZlX3RhaWwoJmUtPmJhc2UubGluaywgJmUtPmJhc2UuZmlsZV9wcml2LT5ldmVudF9saXN0KTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZlLT5iYXNlLmZpbGVfcHJpdi0+ZXZlbnRfd2FpdCk7CisJCXRyYWNlX2RybV92YmxhbmtfZXZlbnRfZGVsaXZlcmVkKGUtPmJhc2UucGlkLCBlLT5waXBlLAorCQkJCQkJIGUtPmV2ZW50LnNlcXVlbmNlKTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKworCXRyYWNlX2RybV92YmxhbmtfZXZlbnQoY3J0Yywgc2VxKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMKaW5kZXggMmFjMDc0YzguLmRhOTllZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMKQEAgLTQ4LDQ0ICs0OCwxNCBAQAogCiAjZGVmaW5lIE1NX1VOVVNFRF9UQVJHRVQgNAogCi11bnNpZ25lZCBsb25nIGRybV9tbV90YWlsX3NwYWNlKHN0cnVjdCBkcm1fbW0gKm1tKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKnRhaWxfbm9kZTsKLQlzdHJ1Y3QgZHJtX21tX25vZGUgKmVudHJ5OwotCi0JdGFpbF9ub2RlID0gbW0tPm1sX2VudHJ5LnByZXY7Ci0JZW50cnkgPSBsaXN0X2VudHJ5KHRhaWxfbm9kZSwgc3RydWN0IGRybV9tbV9ub2RlLCBtbF9lbnRyeSk7Ci0JaWYgKCFlbnRyeS0+ZnJlZSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gZW50cnktPnNpemU7Ci19Ci0KLWludCBkcm1fbW1fcmVtb3ZlX3NwYWNlX2Zyb21fdGFpbChzdHJ1Y3QgZHJtX21tICptbSwgdW5zaWduZWQgbG9uZyBzaXplKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKnRhaWxfbm9kZTsKLQlzdHJ1Y3QgZHJtX21tX25vZGUgKmVudHJ5OwotCi0JdGFpbF9ub2RlID0gbW0tPm1sX2VudHJ5LnByZXY7Ci0JZW50cnkgPSBsaXN0X2VudHJ5KHRhaWxfbm9kZSwgc3RydWN0IGRybV9tbV9ub2RlLCBtbF9lbnRyeSk7Ci0JaWYgKCFlbnRyeS0+ZnJlZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAoZW50cnktPnNpemUgPD0gc2l6ZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQllbnRyeS0+c2l6ZSAtPSBzaXplOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IGRybV9tbV9ub2RlICpkcm1fbW1fa21hbGxvYyhzdHJ1Y3QgZHJtX21tICptbSwgaW50IGF0b21pYykKIHsKIAlzdHJ1Y3QgZHJtX21tX25vZGUgKmNoaWxkOwogCiAJaWYgKGF0b21pYykKLQkJY2hpbGQgPSBrbWFsbG9jKHNpemVvZigqY2hpbGQpLCBHRlBfQVRPTUlDKTsKKwkJY2hpbGQgPSBremFsbG9jKHNpemVvZigqY2hpbGQpLCBHRlBfQVRPTUlDKTsKIAllbHNlCi0JCWNoaWxkID0ga21hbGxvYyhzaXplb2YoKmNoaWxkKSwgR0ZQX0tFUk5FTCk7CisJCWNoaWxkID0ga3phbGxvYyhzaXplb2YoKmNoaWxkKSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAodW5saWtlbHkoY2hpbGQgPT0gTlVMTCkpIHsKIAkJc3Bpbl9sb2NrKCZtbS0+dW51c2VkX2xvY2spOwpAQCAtOTQsOCArNjQsOCBAQAogCQllbHNlIHsKIAkJCWNoaWxkID0KIAkJCSAgICBsaXN0X2VudHJ5KG1tLT51bnVzZWRfbm9kZXMubmV4dCwKLQkJCQkgICAgICAgc3RydWN0IGRybV9tbV9ub2RlLCBmbF9lbnRyeSk7Ci0JCQlsaXN0X2RlbCgmY2hpbGQtPmZsX2VudHJ5KTsKKwkJCQkgICAgICAgc3RydWN0IGRybV9tbV9ub2RlLCBmcmVlX3N0YWNrKTsKKwkJCWxpc3RfZGVsKCZjaGlsZC0+ZnJlZV9zdGFjayk7CiAJCQktLW1tLT5udW1fdW51c2VkOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZtbS0+dW51c2VkX2xvY2spOwpAQCAtMTE1LDcgKzg1LDcgQEAKIAlzcGluX2xvY2soJm1tLT51bnVzZWRfbG9jayk7CiAJd2hpbGUgKG1tLT5udW1fdW51c2VkIDwgTU1fVU5VU0VEX1RBUkdFVCkgewogCQlzcGluX3VubG9jaygmbW0tPnVudXNlZF9sb2NrKTsKLQkJbm9kZSA9IGttYWxsb2Moc2l6ZW9mKCpub2RlKSwgR0ZQX0tFUk5FTCk7CisJCW5vZGUgPSBremFsbG9jKHNpemVvZigqbm9kZSksIEdGUF9LRVJORUwpOwogCQlzcGluX2xvY2soJm1tLT51bnVzZWRfbG9jayk7CiAKIAkJaWYgKHVubGlrZWx5KG5vZGUgPT0gTlVMTCkpIHsKQEAgLTEyNCw3ICs5NCw3IEBACiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJCSsrbW0tPm51bV91bnVzZWQ7Ci0JCWxpc3RfYWRkX3RhaWwoJm5vZGUtPmZsX2VudHJ5LCAmbW0tPnVudXNlZF9ub2Rlcyk7CisJCWxpc3RfYWRkX3RhaWwoJm5vZGUtPmZyZWVfc3RhY2ssICZtbS0+dW51c2VkX25vZGVzKTsKIAl9CiAJc3Bpbl91bmxvY2soJm1tLT51bnVzZWRfbG9jayk7CiAJcmV0dXJuIDA7CkBAIC0xNDYsMjcgKzExNiwxMiBAQAogCWNoaWxkLT5zdGFydCA9IHN0YXJ0OwogCWNoaWxkLT5tbSA9IG1tOwogCi0JbGlzdF9hZGRfdGFpbCgmY2hpbGQtPm1sX2VudHJ5LCAmbW0tPm1sX2VudHJ5KTsKLQlsaXN0X2FkZF90YWlsKCZjaGlsZC0+ZmxfZW50cnksICZtbS0+ZmxfZW50cnkpOworCWxpc3RfYWRkX3RhaWwoJmNoaWxkLT5ub2RlX2xpc3QsICZtbS0+bm9kZV9saXN0KTsKKwlsaXN0X2FkZF90YWlsKCZjaGlsZC0+ZnJlZV9zdGFjaywgJm1tLT5mcmVlX3N0YWNrKTsKIAogCXJldHVybiAwOwogfQogCi1pbnQgZHJtX21tX2FkZF9zcGFjZV90b190YWlsKHN0cnVjdCBkcm1fbW0gKm1tLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBhdG9taWMpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqdGFpbF9ub2RlOwotCXN0cnVjdCBkcm1fbW1fbm9kZSAqZW50cnk7Ci0KLQl0YWlsX25vZGUgPSBtbS0+bWxfZW50cnkucHJldjsKLQllbnRyeSA9IGxpc3RfZW50cnkodGFpbF9ub2RlLCBzdHJ1Y3QgZHJtX21tX25vZGUsIG1sX2VudHJ5KTsKLQlpZiAoIWVudHJ5LT5mcmVlKSB7Ci0JCXJldHVybiBkcm1fbW1fY3JlYXRlX3RhaWxfbm9kZShtbSwgZW50cnktPnN0YXJ0ICsgZW50cnktPnNpemUsCi0JCQkJCSAgICAgICBzaXplLCBhdG9taWMpOwotCX0KLQllbnRyeS0+c2l6ZSArPSBzaXplOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IGRybV9tbV9ub2RlICpkcm1fbW1fc3BsaXRfYXRfc3RhcnQoc3RydWN0IGRybV9tbV9ub2RlICpwYXJlbnQsCiAJCQkJCQkgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJCQkJIGludCBhdG9taWMpCkBAIC0xNzcsMTUgKzEzMiwxNCBAQAogCWlmICh1bmxpa2VseShjaGlsZCA9PSBOVUxMKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlJTklUX0xJU1RfSEVBRCgmY2hpbGQtPmZsX2VudHJ5KTsKKwlJTklUX0xJU1RfSEVBRCgmY2hpbGQtPmZyZWVfc3RhY2spOwogCi0JY2hpbGQtPmZyZWUgPSAwOwogCWNoaWxkLT5zaXplID0gc2l6ZTsKIAljaGlsZC0+c3RhcnQgPSBwYXJlbnQtPnN0YXJ0OwogCWNoaWxkLT5tbSA9IHBhcmVudC0+bW07CiAKLQlsaXN0X2FkZF90YWlsKCZjaGlsZC0+bWxfZW50cnksICZwYXJlbnQtPm1sX2VudHJ5KTsKLQlJTklUX0xJU1RfSEVBRCgmY2hpbGQtPmZsX2VudHJ5KTsKKwlsaXN0X2FkZF90YWlsKCZjaGlsZC0+bm9kZV9saXN0LCAmcGFyZW50LT5ub2RlX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZjaGlsZC0+ZnJlZV9zdGFjayk7CiAKIAlwYXJlbnQtPnNpemUgLT0gc2l6ZTsKIAlwYXJlbnQtPnN0YXJ0ICs9IHNpemU7CkBAIC0yMTMsNyArMTY3LDcgQEAKIAl9CiAKIAlpZiAobm9kZS0+c2l6ZSA9PSBzaXplKSB7Ci0JCWxpc3RfZGVsX2luaXQoJm5vZGUtPmZsX2VudHJ5KTsKKwkJbGlzdF9kZWxfaW5pdCgmbm9kZS0+ZnJlZV9zdGFjayk7CiAJCW5vZGUtPmZyZWUgPSAwOwogCX0gZWxzZSB7CiAJCW5vZGUgPSBkcm1fbW1fc3BsaXRfYXRfc3RhcnQobm9kZSwgc2l6ZSwgYXRvbWljKTsKQEAgLTI1MSw3ICsyMDUsNyBAQAogCX0KIAogCWlmIChub2RlLT5zaXplID09IHNpemUpIHsKLQkJbGlzdF9kZWxfaW5pdCgmbm9kZS0+ZmxfZW50cnkpOworCQlsaXN0X2RlbF9pbml0KCZub2RlLT5mcmVlX3N0YWNrKTsKIAkJbm9kZS0+ZnJlZSA9IDA7CiAJfSBlbHNlIHsKIAkJbm9kZSA9IGRybV9tbV9zcGxpdF9hdF9zdGFydChub2RlLCBzaXplLCBhdG9taWMpOwpAQCAtMjczLDE2ICsyMjcsMTkgQEAKIHsKIAogCXN0cnVjdCBkcm1fbW0gKm1tID0gY3VyLT5tbTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpjdXJfaGVhZCA9ICZjdXItPm1sX2VudHJ5OwotCXN0cnVjdCBsaXN0X2hlYWQgKnJvb3RfaGVhZCA9ICZtbS0+bWxfZW50cnk7CisJc3RydWN0IGxpc3RfaGVhZCAqY3VyX2hlYWQgPSAmY3VyLT5ub2RlX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCAqcm9vdF9oZWFkID0gJm1tLT5ub2RlX2xpc3Q7CiAJc3RydWN0IGRybV9tbV9ub2RlICpwcmV2X25vZGUgPSBOVUxMOwogCXN0cnVjdCBkcm1fbW1fbm9kZSAqbmV4dF9ub2RlOwogCiAJaW50IG1lcmdlZCA9IDA7CiAKKwlCVUdfT04oY3VyLT5zY2FubmVkX2Jsb2NrIHx8IGN1ci0+c2Nhbm5lZF9wcmV2X2ZyZWUKKwkJCQkgIHx8IGN1ci0+c2Nhbm5lZF9uZXh0X2ZyZWUpOworCiAJaWYgKGN1cl9oZWFkLT5wcmV2ICE9IHJvb3RfaGVhZCkgewogCQlwcmV2X25vZGUgPQotCQkgICAgbGlzdF9lbnRyeShjdXJfaGVhZC0+cHJldiwgc3RydWN0IGRybV9tbV9ub2RlLCBtbF9lbnRyeSk7CisJCSAgICBsaXN0X2VudHJ5KGN1cl9oZWFkLT5wcmV2LCBzdHJ1Y3QgZHJtX21tX25vZGUsIG5vZGVfbGlzdCk7CiAJCWlmIChwcmV2X25vZGUtPmZyZWUpIHsKIAkJCXByZXZfbm9kZS0+c2l6ZSArPSBjdXItPnNpemU7CiAJCQltZXJnZWQgPSAxOwpAQCAtMjkwLDE1ICsyNDcsMTUgQEAKIAl9CiAJaWYgKGN1cl9oZWFkLT5uZXh0ICE9IHJvb3RfaGVhZCkgewogCQluZXh0X25vZGUgPQotCQkgICAgbGlzdF9lbnRyeShjdXJfaGVhZC0+bmV4dCwgc3RydWN0IGRybV9tbV9ub2RlLCBtbF9lbnRyeSk7CisJCSAgICBsaXN0X2VudHJ5KGN1cl9oZWFkLT5uZXh0LCBzdHJ1Y3QgZHJtX21tX25vZGUsIG5vZGVfbGlzdCk7CiAJCWlmIChuZXh0X25vZGUtPmZyZWUpIHsKIAkJCWlmIChtZXJnZWQpIHsKIAkJCQlwcmV2X25vZGUtPnNpemUgKz0gbmV4dF9ub2RlLT5zaXplOwotCQkJCWxpc3RfZGVsKCZuZXh0X25vZGUtPm1sX2VudHJ5KTsKLQkJCQlsaXN0X2RlbCgmbmV4dF9ub2RlLT5mbF9lbnRyeSk7CisJCQkJbGlzdF9kZWwoJm5leHRfbm9kZS0+bm9kZV9saXN0KTsKKwkJCQlsaXN0X2RlbCgmbmV4dF9ub2RlLT5mcmVlX3N0YWNrKTsKIAkJCQlzcGluX2xvY2soJm1tLT51bnVzZWRfbG9jayk7CiAJCQkJaWYgKG1tLT5udW1fdW51c2VkIDwgTU1fVU5VU0VEX1RBUkdFVCkgewotCQkJCQlsaXN0X2FkZCgmbmV4dF9ub2RlLT5mbF9lbnRyeSwKKwkJCQkJbGlzdF9hZGQoJm5leHRfbm9kZS0+ZnJlZV9zdGFjaywKIAkJCQkJCSAmbW0tPnVudXNlZF9ub2Rlcyk7CiAJCQkJCSsrbW0tPm51bV91bnVzZWQ7CiAJCQkJfSBlbHNlCkBAIC0zMTMsMTIgKzI3MCwxMiBAQAogCX0KIAlpZiAoIW1lcmdlZCkgewogCQljdXItPmZyZWUgPSAxOwotCQlsaXN0X2FkZCgmY3VyLT5mbF9lbnRyeSwgJm1tLT5mbF9lbnRyeSk7CisJCWxpc3RfYWRkKCZjdXItPmZyZWVfc3RhY2ssICZtbS0+ZnJlZV9zdGFjayk7CiAJfSBlbHNlIHsKLQkJbGlzdF9kZWwoJmN1ci0+bWxfZW50cnkpOworCQlsaXN0X2RlbCgmY3VyLT5ub2RlX2xpc3QpOwogCQlzcGluX2xvY2soJm1tLT51bnVzZWRfbG9jayk7CiAJCWlmIChtbS0+bnVtX3VudXNlZCA8IE1NX1VOVVNFRF9UQVJHRVQpIHsKLQkJCWxpc3RfYWRkKCZjdXItPmZsX2VudHJ5LCAmbW0tPnVudXNlZF9ub2Rlcyk7CisJCQlsaXN0X2FkZCgmY3VyLT5mcmVlX3N0YWNrLCAmbW0tPnVudXNlZF9ub2Rlcyk7CiAJCQkrK21tLT5udW1fdW51c2VkOwogCQl9IGVsc2UKIAkJCWtmcmVlKGN1cik7CkBAIC0zMjgsNDAgKzI4NSw1MCBAQAogCiBFWFBPUlRfU1lNQk9MKGRybV9tbV9wdXRfYmxvY2spOwogCitzdGF0aWMgaW50IGNoZWNrX2ZyZWVfbW1fbm9kZShzdHJ1Y3QgZHJtX21tX25vZGUgKmVudHJ5LCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgICAgICB1bnNpZ25lZCBhbGlnbm1lbnQpCit7CisJdW5zaWduZWQgd2FzdGVkID0gMDsKKworCWlmIChlbnRyeS0+c2l6ZSA8IHNpemUpCisJCXJldHVybiAwOworCisJaWYgKGFsaWdubWVudCkgeworCQlyZWdpc3RlciB1bnNpZ25lZCB0bXAgPSBlbnRyeS0+c3RhcnQgJSBhbGlnbm1lbnQ7CisJCWlmICh0bXApCisJCQl3YXN0ZWQgPSBhbGlnbm1lbnQgLSB0bXA7CisJfQorCisJaWYgKGVudHJ5LT5zaXplID49IHNpemUgKyB3YXN0ZWQpIHsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0cnVjdCBkcm1fbW1fbm9kZSAqZHJtX21tX3NlYXJjaF9mcmVlKGNvbnN0IHN0cnVjdCBkcm1fbW0gKm1tLAogCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJICAgICAgIHVuc2lnbmVkIGFsaWdubWVudCwgaW50IGJlc3RfbWF0Y2gpCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKLQljb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlX3N0YWNrID0gJm1tLT5mbF9lbnRyeTsKIAlzdHJ1Y3QgZHJtX21tX25vZGUgKmVudHJ5OwogCXN0cnVjdCBkcm1fbW1fbm9kZSAqYmVzdDsKIAl1bnNpZ25lZCBsb25nIGJlc3Rfc2l6ZTsKLQl1bnNpZ25lZCB3YXN0ZWQ7CisKKwlCVUdfT04obW0tPnNjYW5uZWRfYmxvY2tzKTsKIAogCWJlc3QgPSBOVUxMOwogCWJlc3Rfc2l6ZSA9IH4wVUw7CiAKLQlsaXN0X2Zvcl9lYWNoKGxpc3QsIGZyZWVfc3RhY2spIHsKLQkJZW50cnkgPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBkcm1fbW1fbm9kZSwgZmxfZW50cnkpOwotCQl3YXN0ZWQgPSAwOwotCi0JCWlmIChlbnRyeS0+c2l6ZSA8IHNpemUpCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJm1tLT5mcmVlX3N0YWNrLCBmcmVlX3N0YWNrKSB7CisJCWlmICghY2hlY2tfZnJlZV9tbV9ub2RlKGVudHJ5LCBzaXplLCBhbGlnbm1lbnQpKQogCQkJY29udGludWU7CiAKLQkJaWYgKGFsaWdubWVudCkgewotCQkJcmVnaXN0ZXIgdW5zaWduZWQgdG1wID0gZW50cnktPnN0YXJ0ICUgYWxpZ25tZW50OwotCQkJaWYgKHRtcCkKLQkJCQl3YXN0ZWQgKz0gYWxpZ25tZW50IC0gdG1wOwotCQl9CisJCWlmICghYmVzdF9tYXRjaCkKKwkJCXJldHVybiBlbnRyeTsKIAotCQlpZiAoZW50cnktPnNpemUgPj0gc2l6ZSArIHdhc3RlZCkgewotCQkJaWYgKCFiZXN0X21hdGNoKQotCQkJCXJldHVybiBlbnRyeTsKLQkJCWlmIChlbnRyeS0+c2l6ZSA8IGJlc3Rfc2l6ZSkgewotCQkJCWJlc3QgPSBlbnRyeTsKLQkJCQliZXN0X3NpemUgPSBlbnRyeS0+c2l6ZTsKLQkJCX0KKwkJaWYgKGVudHJ5LT5zaXplIDwgYmVzdF9zaXplKSB7CisJCQliZXN0ID0gZW50cnk7CisJCQliZXN0X3NpemUgPSBlbnRyeS0+c2l6ZTsKIAkJfQogCX0KIApAQCAtMzc2LDQzICszNDMsMjggQEAKIAkJCQkJCXVuc2lnbmVkIGxvbmcgZW5kLAogCQkJCQkJaW50IGJlc3RfbWF0Y2gpCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKLQljb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlX3N0YWNrID0gJm1tLT5mbF9lbnRyeTsKIAlzdHJ1Y3QgZHJtX21tX25vZGUgKmVudHJ5OwogCXN0cnVjdCBkcm1fbW1fbm9kZSAqYmVzdDsKIAl1bnNpZ25lZCBsb25nIGJlc3Rfc2l6ZTsKLQl1bnNpZ25lZCB3YXN0ZWQ7CisKKwlCVUdfT04obW0tPnNjYW5uZWRfYmxvY2tzKTsKIAogCWJlc3QgPSBOVUxMOwogCWJlc3Rfc2l6ZSA9IH4wVUw7CiAKLQlsaXN0X2Zvcl9lYWNoKGxpc3QsIGZyZWVfc3RhY2spIHsKLQkJZW50cnkgPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBkcm1fbW1fbm9kZSwgZmxfZW50cnkpOwotCQl3YXN0ZWQgPSAwOwotCi0JCWlmIChlbnRyeS0+c2l6ZSA8IHNpemUpCi0JCQljb250aW51ZTsKLQorCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZtbS0+ZnJlZV9zdGFjaywgZnJlZV9zdGFjaykgewogCQlpZiAoZW50cnktPnN0YXJ0ID4gZW5kIHx8IChlbnRyeS0+c3RhcnQrZW50cnktPnNpemUpIDwgc3RhcnQpCiAJCQljb250aW51ZTsKIAotCQlpZiAoZW50cnktPnN0YXJ0IDwgc3RhcnQpCi0JCQl3YXN0ZWQgKz0gc3RhcnQgLSBlbnRyeS0+c3RhcnQ7CisJCWlmICghY2hlY2tfZnJlZV9tbV9ub2RlKGVudHJ5LCBzaXplLCBhbGlnbm1lbnQpKQorCQkJY29udGludWU7CiAKLQkJaWYgKGFsaWdubWVudCkgewotCQkJcmVnaXN0ZXIgdW5zaWduZWQgdG1wID0gKGVudHJ5LT5zdGFydCArIHdhc3RlZCkgJSBhbGlnbm1lbnQ7Ci0JCQlpZiAodG1wKQotCQkJCXdhc3RlZCArPSBhbGlnbm1lbnQgLSB0bXA7Ci0JCX0KKwkJaWYgKCFiZXN0X21hdGNoKQorCQkJcmV0dXJuIGVudHJ5OwogCi0JCWlmIChlbnRyeS0+c2l6ZSA+PSBzaXplICsgd2FzdGVkICYmCi0JCSAgICAoZW50cnktPnN0YXJ0ICsgd2FzdGVkICsgc2l6ZSkgPD0gZW5kKSB7Ci0JCQlpZiAoIWJlc3RfbWF0Y2gpCi0JCQkJcmV0dXJuIGVudHJ5OwotCQkJaWYgKGVudHJ5LT5zaXplIDwgYmVzdF9zaXplKSB7Ci0JCQkJYmVzdCA9IGVudHJ5OwotCQkJCWJlc3Rfc2l6ZSA9IGVudHJ5LT5zaXplOwotCQkJfQorCQlpZiAoZW50cnktPnNpemUgPCBiZXN0X3NpemUpIHsKKwkJCWJlc3QgPSBlbnRyeTsKKwkJCWJlc3Rfc2l6ZSA9IGVudHJ5LT5zaXplOwogCQl9CiAJfQogCkBAIC00MjAsOSArMzcyLDE2MSBAQAogfQogRVhQT1JUX1NZTUJPTChkcm1fbW1fc2VhcmNoX2ZyZWVfaW5fcmFuZ2UpOwogCisvKioKKyAqIEluaXRpYWxpemEgbHJ1IHNjYW5uaW5nLgorICoKKyAqIFRoaXMgc2ltcGx5IHNldHMgdXAgdGhlIHNjYW5uaW5nIHJvdXRpbmVzIHdpdGggdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBkZXNpcmVkCisgKiBob2xlLgorICoKKyAqIFdhcm5pbmc6IEFzIGxvbmcgYXMgdGhlIHNjYW4gbGlzdCBpcyBub24tZW1wdHksIG5vIG90aGVyIG9wZXJhdGlvbnMgdGhhbgorICogYWRkaW5nL3JlbW92aW5nIG5vZGVzIHRvL2Zyb20gdGhlIHNjYW4gbGlzdCBhcmUgYWxsb3dlZC4KKyAqLwordm9pZCBkcm1fbW1faW5pdF9zY2FuKHN0cnVjdCBkcm1fbW0gKm1tLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCSAgICAgIHVuc2lnbmVkIGFsaWdubWVudCkKK3sKKwltbS0+c2Nhbl9hbGlnbm1lbnQgPSBhbGlnbm1lbnQ7CisJbW0tPnNjYW5fc2l6ZSA9IHNpemU7CisJbW0tPnNjYW5uZWRfYmxvY2tzID0gMDsKKwltbS0+c2Nhbl9oaXRfc3RhcnQgPSAwOworCW1tLT5zY2FuX2hpdF9zaXplID0gMDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX21tX2luaXRfc2Nhbik7CisKKy8qKgorICogQWRkIGEgbm9kZSB0byB0aGUgc2NhbiBsaXN0IHRoYXQgbWlnaHQgYmUgZnJlZWQgdG8gbWFrZSBzcGFjZSBmb3IgdGhlIGRlc2lyZWQKKyAqIGhvbGUuCisgKgorICogUmV0dXJucyBub24temVybywgaWYgYSBob2xlIGhhcyBiZWVuIGZvdW5kLCB6ZXJvIG90aGVyd2lzZS4KKyAqLworaW50IGRybV9tbV9zY2FuX2FkZF9ibG9jayhzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUpCit7CisJc3RydWN0IGRybV9tbSAqbW0gPSBub2RlLT5tbTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwcmV2X2ZyZWUsICpuZXh0X2ZyZWU7CisJc3RydWN0IGRybV9tbV9ub2RlICpwcmV2X25vZGUsICpuZXh0X25vZGU7CisKKwltbS0+c2Nhbm5lZF9ibG9ja3MrKzsKKworCXByZXZfZnJlZSA9IG5leHRfZnJlZSA9IE5VTEw7CisKKwlCVUdfT04obm9kZS0+ZnJlZSk7CisJbm9kZS0+c2Nhbm5lZF9ibG9jayA9IDE7CisJbm9kZS0+ZnJlZSA9IDE7CisKKwlpZiAobm9kZS0+bm9kZV9saXN0LnByZXYgIT0gJm1tLT5ub2RlX2xpc3QpIHsKKwkJcHJldl9ub2RlID0gbGlzdF9lbnRyeShub2RlLT5ub2RlX2xpc3QucHJldiwgc3RydWN0IGRybV9tbV9ub2RlLAorCQkJCSAgICAgICBub2RlX2xpc3QpOworCisJCWlmIChwcmV2X25vZGUtPmZyZWUpIHsKKwkJCWxpc3RfZGVsKCZwcmV2X25vZGUtPm5vZGVfbGlzdCk7CisKKwkJCW5vZGUtPnN0YXJ0ID0gcHJldl9ub2RlLT5zdGFydDsKKwkJCW5vZGUtPnNpemUgKz0gcHJldl9ub2RlLT5zaXplOworCisJCQlwcmV2X25vZGUtPnNjYW5uZWRfcHJldl9mcmVlID0gMTsKKworCQkJcHJldl9mcmVlID0gJnByZXZfbm9kZS0+ZnJlZV9zdGFjazsKKwkJfQorCX0KKworCWlmIChub2RlLT5ub2RlX2xpc3QubmV4dCAhPSAmbW0tPm5vZGVfbGlzdCkgeworCQluZXh0X25vZGUgPSBsaXN0X2VudHJ5KG5vZGUtPm5vZGVfbGlzdC5uZXh0LCBzdHJ1Y3QgZHJtX21tX25vZGUsCisJCQkJICAgICAgIG5vZGVfbGlzdCk7CisKKwkJaWYgKG5leHRfbm9kZS0+ZnJlZSkgeworCQkJbGlzdF9kZWwoJm5leHRfbm9kZS0+bm9kZV9saXN0KTsKKworCQkJbm9kZS0+c2l6ZSArPSBuZXh0X25vZGUtPnNpemU7CisKKwkJCW5leHRfbm9kZS0+c2Nhbm5lZF9uZXh0X2ZyZWUgPSAxOworCisJCQluZXh0X2ZyZWUgPSAmbmV4dF9ub2RlLT5mcmVlX3N0YWNrOworCQl9CisJfQorCisJLyogVGhlIGZyZWVfc3RhY2sgbGlzdCBpcyBub3QgdXNlZCBmb3IgYWxsb2NhdGVkIG9iamVjdHMsIHNvIHRoZXNlIHR3bworCSAqIHBvaW50ZXJzIGNhbiBiZSBhYnVzZWQgKGFzIGxvbmcgYXMgbm8gYWxsb2NhdGlvbnMgaW4gdGhpcyBtZW1vcnkKKwkgKiBtYW5hZ2VyIGhhcHBlbnMpLiAqLworCW5vZGUtPmZyZWVfc3RhY2sucHJldiA9IHByZXZfZnJlZTsKKwlub2RlLT5mcmVlX3N0YWNrLm5leHQgPSBuZXh0X2ZyZWU7CisKKwlpZiAoY2hlY2tfZnJlZV9tbV9ub2RlKG5vZGUsIG1tLT5zY2FuX3NpemUsIG1tLT5zY2FuX2FsaWdubWVudCkpIHsKKwkJbW0tPnNjYW5faGl0X3N0YXJ0ID0gbm9kZS0+c3RhcnQ7CisJCW1tLT5zY2FuX2hpdF9zaXplID0gbm9kZS0+c2l6ZTsKKworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX21tX3NjYW5fYWRkX2Jsb2NrKTsKKworLyoqCisgKiBSZW1vdmUgYSBub2RlIGZyb20gdGhlIHNjYW4gbGlzdC4KKyAqCisgKiBOb2RlcyBfbXVzdF8gYmUgcmVtb3ZlZCBpbiB0aGUgZXhhY3Qgc2FtZSBvcmRlciBmcm9tIHRoZSBzY2FuIGxpc3QgYXMgdGhleQorICogaGF2ZSBiZWVuIGFkZGVkLCBvdGhlcndpc2UgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBtZW1vcnkgbWFuYWdlciB3aWxsIGJlCisgKiBjb3JydXB0ZWQuCisgKgorICogV2hlbiB0aGUgc2NhbiBsaXN0IGlzIGVtcHR5LCB0aGUgc2VsZWN0ZWQgbWVtb3J5IG5vZGVzIGNhbiBiZSBmcmVlZC4gQW4KKyAqIGltbWVkaWF0bHkgZm9sbG93aW5nIGRybV9tbV9zZWFyY2hfZnJlZSB3aXRoIGJlc3RfbWF0Y2ggPSAwIHdpbGwgdGhlbiByZXR1cm4KKyAqIHRoZSBqdXN0IGZyZWVkIGJsb2NrIChiZWNhdXNlIGl0cyBhdCB0aGUgdG9wIG9mIHRoZSBmcmVlX3N0YWNrIGxpc3QpLgorICoKKyAqIFJldHVybnMgb25lIGlmIHRoaXMgYmxvY2sgc2hvdWxkIGJlIGV2aWN0ZWQsIHplcm8gb3RoZXJ3aXNlLiBXaWxsIGFsd2F5cworICogcmV0dXJuIHplcm8gd2hlbiBubyBob2xlIGhhcyBiZWVuIGZvdW5kLgorICovCitpbnQgZHJtX21tX3NjYW5fcmVtb3ZlX2Jsb2NrKHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSkKK3sKKwlzdHJ1Y3QgZHJtX21tICptbSA9IG5vZGUtPm1tOworCXN0cnVjdCBkcm1fbW1fbm9kZSAqcHJldl9ub2RlLCAqbmV4dF9ub2RlOworCisJbW0tPnNjYW5uZWRfYmxvY2tzLS07CisKKwlCVUdfT04oIW5vZGUtPnNjYW5uZWRfYmxvY2spOworCW5vZGUtPnNjYW5uZWRfYmxvY2sgPSAwOworCW5vZGUtPmZyZWUgPSAwOworCisJcHJldl9ub2RlID0gbGlzdF9lbnRyeShub2RlLT5mcmVlX3N0YWNrLnByZXYsIHN0cnVjdCBkcm1fbW1fbm9kZSwKKwkJCSAgICAgICBmcmVlX3N0YWNrKTsKKwluZXh0X25vZGUgPSBsaXN0X2VudHJ5KG5vZGUtPmZyZWVfc3RhY2submV4dCwgc3RydWN0IGRybV9tbV9ub2RlLAorCQkJICAgICAgIGZyZWVfc3RhY2spOworCisJaWYgKHByZXZfbm9kZSkgeworCQlCVUdfT04oIXByZXZfbm9kZS0+c2Nhbm5lZF9wcmV2X2ZyZWUpOworCQlwcmV2X25vZGUtPnNjYW5uZWRfcHJldl9mcmVlID0gMDsKKworCQlsaXN0X2FkZF90YWlsKCZwcmV2X25vZGUtPm5vZGVfbGlzdCwgJm5vZGUtPm5vZGVfbGlzdCk7CisKKwkJbm9kZS0+c3RhcnQgPSBwcmV2X25vZGUtPnN0YXJ0ICsgcHJldl9ub2RlLT5zaXplOworCQlub2RlLT5zaXplIC09IHByZXZfbm9kZS0+c2l6ZTsKKwl9CisKKwlpZiAobmV4dF9ub2RlKSB7CisJCUJVR19PTighbmV4dF9ub2RlLT5zY2FubmVkX25leHRfZnJlZSk7CisJCW5leHRfbm9kZS0+c2Nhbm5lZF9uZXh0X2ZyZWUgPSAwOworCisJCWxpc3RfYWRkKCZuZXh0X25vZGUtPm5vZGVfbGlzdCwgJm5vZGUtPm5vZGVfbGlzdCk7CisKKwkJbm9kZS0+c2l6ZSAtPSBuZXh0X25vZGUtPnNpemU7CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJm5vZGUtPmZyZWVfc3RhY2spOworCisJLyogT25seSBuZWVkIHRvIGNoZWNrIGZvciBjb250YWluZW1lbnQgYmVjYXVzZSBzdGFydCZzaXplIGZvciB0aGUKKwkgKiBjb21wbGV0ZSByZXN1bHRpbmcgZnJlZSBibG9jayAobm90IGp1c3QgdGhlIGRlc2lyZWQgcGFydCkgaXMKKwkgKiBzdG9yZWQuICovCisJaWYgKG5vZGUtPnN0YXJ0ID49IG1tLT5zY2FuX2hpdF9zdGFydCAmJgorCSAgICBub2RlLT5zdGFydCArIG5vZGUtPnNpemUKKwkgICAgCQk8PSBtbS0+c2Nhbl9oaXRfc3RhcnQgKyBtbS0+c2Nhbl9oaXRfc2l6ZSkgeworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX21tX3NjYW5fcmVtb3ZlX2Jsb2NrKTsKKwogaW50IGRybV9tbV9jbGVhbihzdHJ1Y3QgZHJtX21tICogbW0pCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZtbS0+bWxfZW50cnk7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZtbS0+bm9kZV9saXN0OwogCiAJcmV0dXJuIChoZWFkLT5uZXh0LT5uZXh0ID09IGhlYWQpOwogfQpAQCAtNDMwLDEwICs1MzQsMTEgQEAKIAogaW50IGRybV9tbV9pbml0KHN0cnVjdCBkcm1fbW0gKiBtbSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQogewotCUlOSVRfTElTVF9IRUFEKCZtbS0+bWxfZW50cnkpOwotCUlOSVRfTElTVF9IRUFEKCZtbS0+ZmxfZW50cnkpOworCUlOSVRfTElTVF9IRUFEKCZtbS0+bm9kZV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmbW0tPmZyZWVfc3RhY2spOwogCUlOSVRfTElTVF9IRUFEKCZtbS0+dW51c2VkX25vZGVzKTsKIAltbS0+bnVtX3VudXNlZCA9IDA7CisJbW0tPnNjYW5uZWRfYmxvY2tzID0gMDsKIAlzcGluX2xvY2tfaW5pdCgmbW0tPnVudXNlZF9sb2NrKTsKIAogCXJldHVybiBkcm1fbW1fY3JlYXRlX3RhaWxfbm9kZShtbSwgc3RhcnQsIHNpemUsIDApOwpAQCAtNDQyLDI1ICs1NDcsMjUgQEAKIAogdm9pZCBkcm1fbW1fdGFrZWRvd24oc3RydWN0IGRybV9tbSAqIG1tKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKmJub2RlID0gbW0tPmZsX2VudHJ5Lm5leHQ7CisJc3RydWN0IGxpc3RfaGVhZCAqYm5vZGUgPSBtbS0+ZnJlZV9zdGFjay5uZXh0OwogCXN0cnVjdCBkcm1fbW1fbm9kZSAqZW50cnk7CiAJc3RydWN0IGRybV9tbV9ub2RlICpuZXh0OwogCi0JZW50cnkgPSBsaXN0X2VudHJ5KGJub2RlLCBzdHJ1Y3QgZHJtX21tX25vZGUsIGZsX2VudHJ5KTsKKwllbnRyeSA9IGxpc3RfZW50cnkoYm5vZGUsIHN0cnVjdCBkcm1fbW1fbm9kZSwgZnJlZV9zdGFjayk7CiAKLQlpZiAoZW50cnktPm1sX2VudHJ5Lm5leHQgIT0gJm1tLT5tbF9lbnRyeSB8fAotCSAgICBlbnRyeS0+ZmxfZW50cnkubmV4dCAhPSAmbW0tPmZsX2VudHJ5KSB7CisJaWYgKGVudHJ5LT5ub2RlX2xpc3QubmV4dCAhPSAmbW0tPm5vZGVfbGlzdCB8fAorCSAgICBlbnRyeS0+ZnJlZV9zdGFjay5uZXh0ICE9ICZtbS0+ZnJlZV9zdGFjaykgewogCQlEUk1fRVJST1IoIk1lbW9yeSBtYW5hZ2VyIG5vdCBjbGVhbi4gRGVsYXlpbmcgdGFrZWRvd25cbiIpOwogCQlyZXR1cm47CiAJfQogCi0JbGlzdF9kZWwoJmVudHJ5LT5mbF9lbnRyeSk7Ci0JbGlzdF9kZWwoJmVudHJ5LT5tbF9lbnRyeSk7CisJbGlzdF9kZWwoJmVudHJ5LT5mcmVlX3N0YWNrKTsKKwlsaXN0X2RlbCgmZW50cnktPm5vZGVfbGlzdCk7CiAJa2ZyZWUoZW50cnkpOwogCiAJc3Bpbl9sb2NrKCZtbS0+dW51c2VkX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbmV4dCwgJm1tLT51bnVzZWRfbm9kZXMsIGZsX2VudHJ5KSB7Ci0JCWxpc3RfZGVsKCZlbnRyeS0+ZmxfZW50cnkpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbmV4dCwgJm1tLT51bnVzZWRfbm9kZXMsIGZyZWVfc3RhY2spIHsKKwkJbGlzdF9kZWwoJmVudHJ5LT5mcmVlX3N0YWNrKTsKIAkJa2ZyZWUoZW50cnkpOwogCQktLW1tLT5udW1fdW51c2VkOwogCX0KQEAgLTQ3NSw3ICs1ODAsNyBAQAogCXN0cnVjdCBkcm1fbW1fbm9kZSAqZW50cnk7CiAJaW50IHRvdGFsX3VzZWQgPSAwLCB0b3RhbF9mcmVlID0gMCwgdG90YWwgPSAwOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJm1tLT5tbF9lbnRyeSwgbWxfZW50cnkpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmbW0tPm5vZGVfbGlzdCwgbm9kZV9saXN0KSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlcyAweCUwOGx4LTB4JTA4bHg6ICU4bGQ6ICVzXG4iLAogCQkJcHJlZml4LCBlbnRyeS0+c3RhcnQsIGVudHJ5LT5zdGFydCArIGVudHJ5LT5zaXplLAogCQkJZW50cnktPnNpemUsIGVudHJ5LT5mcmVlID8gImZyZWUiIDogInVzZWQiKTsKQEAgLTQ5Niw3ICs2MDEsNyBAQAogCXN0cnVjdCBkcm1fbW1fbm9kZSAqZW50cnk7CiAJaW50IHRvdGFsX3VzZWQgPSAwLCB0b3RhbF9mcmVlID0gMCwgdG90YWwgPSAwOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJm1tLT5tbF9lbnRyeSwgbWxfZW50cnkpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmbW0tPm5vZGVfbGlzdCwgbm9kZV9saXN0KSB7CiAJCXNlcV9wcmludGYobSwgIjB4JTA4bHgtMHglMDhseDogMHglMDhseDogJXNcbiIsIGVudHJ5LT5zdGFydCwgZW50cnktPnN0YXJ0ICsgZW50cnktPnNpemUsIGVudHJ5LT5zaXplLCBlbnRyeS0+ZnJlZSA/ICJmcmVlIiA6ICJ1c2VkIik7CiAJCXRvdGFsICs9IGVudHJ5LT5zaXplOwogCQlpZiAoZW50cnktPmZyZWUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3BjaS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9wY2kuYwppbmRleCAyZWE5YWQ0Li5lMjBmNzhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3BjaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGNpLmMKQEAgLTEyNCw0ICsxMjQsMTQ3IEBACiAKIEVYUE9SVF9TWU1CT0woZHJtX3BjaV9mcmVlKTsKIAorI2lmZGVmIENPTkZJR19QQ0kKKy8qKgorICogUmVnaXN0ZXIuCisgKgorICogXHBhcmFtIHBkZXYgLSBQQ0kgZGV2aWNlIHN0cnVjdHVyZQorICogXHBhcmFtIGVudCBlbnRyeSBmcm9tIHRoZSBQQ0kgSUQgdGFibGUgd2l0aCBkZXZpY2UgdHlwZSBmbGFncworICogXHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBudW1iZXIgb24gZmFpbHVyZS4KKyAqCisgKiBBdHRlbXB0IHRvIGdldHMgaW50ZXIgbW9kdWxlICJkcm0iIGluZm9ybWF0aW9uLiBJZiB3ZSBhcmUgZmlyc3QKKyAqIHRoZW4gcmVnaXN0ZXIgdGhlIGNoYXJhY3RlciBkZXZpY2UgYW5kIGludGVyIG1vZHVsZSBpbmZvcm1hdGlvbi4KKyAqIFRyeSBhbmQgcmVnaXN0ZXIsIGlmIHdlIGZhaWwgdG8gcmVnaXN0ZXIsIGJhY2tvdXQgcHJldmlvdXMgd29yay4KKyAqLworaW50IGRybV9nZXRfcGNpX2RldihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCwKKwkJICAgIHN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKwlpbnQgcmV0OworCisJRFJNX0RFQlVHKCJcbiIpOworCisJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2cxOworCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwlkZXYtPnBkZXYgPSBwZGV2OworCWRldi0+ZGV2ID0gJnBkZXYtPmRldjsKKworCWRldi0+cGNpX2RldmljZSA9IHBkZXYtPmRldmljZTsKKwlkZXYtPnBjaV92ZW5kb3IgPSBwZGV2LT52ZW5kb3I7CisKKyNpZmRlZiBfX2FscGhhX18KKwlkZXYtPmhvc2UgPSBwZGV2LT5zeXNkYXRhOworI2VuZGlmCisKKwlpZiAoKHJldCA9IGRybV9maWxsX2luX2RldihkZXYsIGVudCwgZHJpdmVyKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJEUk06IEZpbGxfaW5fZGV2IGZhaWxlZC5cbiIpOworCQlnb3RvIGVycl9nMjsKKwl9CisKKwlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgeworCQlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKKwkJcmV0ID0gZHJtX2dldF9taW5vcihkZXYsICZkZXYtPmNvbnRyb2wsIERSTV9NSU5PUl9DT05UUk9MKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX2cyOworCX0KKworCWlmICgocmV0ID0gZHJtX2dldF9taW5vcihkZXYsICZkZXYtPnByaW1hcnksIERSTV9NSU5PUl9MRUdBQ1kpKSkKKwkJZ290byBlcnJfZzM7CisKKwlpZiAoZGV2LT5kcml2ZXItPmxvYWQpIHsKKwkJcmV0ID0gZGV2LT5kcml2ZXItPmxvYWQoZGV2LCBlbnQtPmRyaXZlcl9kYXRhKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX2c0OworCX0KKworCS8qIHNldHVwIHRoZSBncm91cGluZyBmb3IgdGhlIGxlZ2FjeSBvdXRwdXQgKi8KKwlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgeworCQlyZXQgPSBkcm1fbW9kZV9ncm91cF9pbml0X2xlZ2FjeV9ncm91cChkZXYsCisJCQkJCQkmZGV2LT5wcmltYXJ5LT5tb2RlX2dyb3VwKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX2c0OworCX0KKworCWxpc3RfYWRkX3RhaWwoJmRldi0+ZHJpdmVyX2l0ZW0sICZkcml2ZXItPmRldmljZV9saXN0KTsKKworCURSTV9JTkZPKCJJbml0aWFsaXplZCAlcyAlZC4lZC4lZCAlcyBmb3IgJXMgb24gbWlub3IgJWRcbiIsCisJCSBkcml2ZXItPm5hbWUsIGRyaXZlci0+bWFqb3IsIGRyaXZlci0+bWlub3IsIGRyaXZlci0+cGF0Y2hsZXZlbCwKKwkJIGRyaXZlci0+ZGF0ZSwgcGNpX25hbWUocGRldiksIGRldi0+cHJpbWFyeS0+aW5kZXgpOworCisJcmV0dXJuIDA7CisKK2Vycl9nNDoKKwlkcm1fcHV0X21pbm9yKCZkZXYtPnByaW1hcnkpOworZXJyX2czOgorCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQorCQlkcm1fcHV0X21pbm9yKCZkZXYtPmNvbnRyb2wpOworZXJyX2cyOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK2Vycl9nMToKKwlrZnJlZShkZXYpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9nZXRfcGNpX2Rldik7CisKKy8qKgorICogUENJIGRldmljZSBpbml0aWFsaXphdGlvbi4gQ2FsbGVkIHZpYSBkcm1faW5pdCBhdCBtb2R1bGUgbG9hZCB0aW1lLAorICoKKyAqIFxyZXR1cm4gemVybyBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgbnVtYmVyIG9uIGZhaWx1cmUuCisgKgorICogSW5pdGlhbGl6ZXMgYSBkcm1fZGV2aWNlIHN0cnVjdHVyZXMscmVnaXN0ZXJpbmcgdGhlCisgKiBzdHVicyBhbmQgaW5pdGlhbGl6aW5nIHRoZSBBR1AgZGV2aWNlLgorICoKKyAqIEV4cGFuZHMgdGhlIFxjIERSSVZFUl9QUkVJTklUIGFuZCBcYyBEUklWRVJfUE9TVF9JTklUIG1hY3JvcyBiZWZvcmUgYW5kCisgKiBhZnRlciB0aGUgaW5pdGlhbGl6YXRpb24gZm9yIGRyaXZlciBjdXN0b21pemF0aW9uLgorICovCitpbnQgZHJtX3BjaV9pbml0KHN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwaWQ7CisJaW50IGk7CisKKwlpZiAoZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfTU9ERVNFVCkKKwkJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlci0+cGNpX2RyaXZlcik7CisKKwkvKiBJZiBub3QgdXNpbmcgS01TLCBmYWxsIGJhY2sgdG8gc3RlYWx0aCBtb2RlIG1hbnVhbCBzY2FubmluZy4gKi8KKwlmb3IgKGkgPSAwOyBkcml2ZXItPnBjaV9kcml2ZXIuaWRfdGFibGVbaV0udmVuZG9yICE9IDA7IGkrKykgeworCQlwaWQgPSAmZHJpdmVyLT5wY2lfZHJpdmVyLmlkX3RhYmxlW2ldOworCisJCS8qIExvb3AgYXJvdW5kIHNldHRpbmcgdXAgYSBEUk0gZGV2aWNlIGZvciBlYWNoIFBDSSBkZXZpY2UKKwkJICogbWF0Y2hpbmcgb3VyIElEIGFuZCBkZXZpY2UgY2xhc3MuICBJZiB3ZSBoYWQgdGhlIGludGVybmFsCisJCSAqIGZ1bmN0aW9uIHRoYXQgcGNpX2dldF9zdWJzeXMgYW5kIHBjaV9nZXRfY2xhc3MgdXNlZCwgd2UnZAorCQkgKiBiZSBhYmxlIHRvIGp1c3QgcGFzcyBwaWQgaW4gaW5zdGVhZCBvZiBkb2luZyBhIHR3by1zdGFnZQorCQkgKiB0aGluZy4KKwkJICovCisJCXBkZXYgPSBOVUxMOworCQl3aGlsZSAoKHBkZXYgPQorCQkJcGNpX2dldF9zdWJzeXMocGlkLT52ZW5kb3IsIHBpZC0+ZGV2aWNlLCBwaWQtPnN1YnZlbmRvciwKKwkJCQkgICAgICAgcGlkLT5zdWJkZXZpY2UsIHBkZXYpKSAhPSBOVUxMKSB7CisJCQlpZiAoKHBkZXYtPmNsYXNzICYgcGlkLT5jbGFzc19tYXNrKSAhPSBwaWQtPmNsYXNzKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBzdGVhbHRoIG1vZGUgcmVxdWlyZXMgYSBtYW51YWwgcHJvYmUgKi8KKwkJCXBjaV9kZXZfZ2V0KHBkZXYpOworCQkJZHJtX2dldF9wY2lfZGV2KHBkZXYsIHBpZCwgZHJpdmVyKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKKworaW50IGRybV9wY2lfaW5pdChzdHJ1Y3QgZHJtX2RyaXZlciAqZHJpdmVyKQoreworCXJldHVybiAtMTsKK30KKworI2VuZGlmCiAvKkB9Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGxhdGZvcm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGxhdGZvcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjBlOWEzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9wbGF0Zm9ybS5jCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogRGVyaXZlZCBmcm9tIGRybV9wY2kuYworICoKKyAqIENvcHlyaWdodCAyMDAzIEpvc8OpIEZvbnNlY2EuCisgKiBDb3B5cmlnaHQgMjAwMyBMZWlmIERlbGdhc3MuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIENvZGUgQXVyb3JhIEZvcnVtLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiZHJtUC5oIgorCisvKioKKyAqIFJlZ2lzdGVyLgorICoKKyAqIFxwYXJhbSBwbGF0ZGV2IC0gUGxhdGZvcm0gZGV2aWNlIHN0cnV0dXJlCisgKiBccmV0dXJuIHplcm8gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIG51bWJlciBvbiBmYWlsdXJlLgorICoKKyAqIEF0dGVtcHQgdG8gZ2V0cyBpbnRlciBtb2R1bGUgImRybSIgaW5mb3JtYXRpb24uIElmIHdlIGFyZSBmaXJzdAorICogdGhlbiByZWdpc3RlciB0aGUgY2hhcmFjdGVyIGRldmljZSBhbmQgaW50ZXIgbW9kdWxlIGluZm9ybWF0aW9uLgorICogVHJ5IGFuZCByZWdpc3RlciwgaWYgd2UgZmFpbCB0byByZWdpc3RlciwgYmFja291dCBwcmV2aW91cyB3b3JrLgorICovCisKK2ludCBkcm1fZ2V0X3BsYXRmb3JtX2RldihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0ZGV2LAorCQkJIHN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKwlpbnQgcmV0OworCisJRFJNX0RFQlVHKCJcbiIpOworCisJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldi0+cGxhdGZvcm1kZXYgPSBwbGF0ZGV2OworCWRldi0+ZGV2ID0gJnBsYXRkZXYtPmRldjsKKworCXJldCA9IGRybV9maWxsX2luX2RldihkZXYsIE5VTEwsIGRyaXZlcik7CisKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRFJNOiBGaWxsX2luX2RldiBmYWlsZWQuXG4iKTsKKwkJZ290byBlcnJfZzE7CisJfQorCisJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpIHsKKwkJZGV2X3NldF9kcnZkYXRhKCZwbGF0ZGV2LT5kZXYsIGRldik7CisJCXJldCA9IGRybV9nZXRfbWlub3IoZGV2LCAmZGV2LT5jb250cm9sLCBEUk1fTUlOT1JfQ09OVFJPTCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9nMTsKKwl9CisKKwlyZXQgPSBkcm1fZ2V0X21pbm9yKGRldiwgJmRldi0+cHJpbWFyeSwgRFJNX01JTk9SX0xFR0FDWSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZzI7CisKKwlpZiAoZGV2LT5kcml2ZXItPmxvYWQpIHsKKwkJcmV0ID0gZGV2LT5kcml2ZXItPmxvYWQoZGV2LCAwKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX2czOworCX0KKworCS8qIHNldHVwIHRoZSBncm91cGluZyBmb3IgdGhlIGxlZ2FjeSBvdXRwdXQgKi8KKwlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgeworCQlyZXQgPSBkcm1fbW9kZV9ncm91cF9pbml0X2xlZ2FjeV9ncm91cChkZXYsCisJCQkJJmRldi0+cHJpbWFyeS0+bW9kZV9ncm91cCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9nMzsKKwl9CisKKwlsaXN0X2FkZF90YWlsKCZkZXYtPmRyaXZlcl9pdGVtLCAmZHJpdmVyLT5kZXZpY2VfbGlzdCk7CisKKwlEUk1fSU5GTygiSW5pdGlhbGl6ZWQgJXMgJWQuJWQuJWQgJXMgb24gbWlub3IgJWRcbiIsCisJCSBkcml2ZXItPm5hbWUsIGRyaXZlci0+bWFqb3IsIGRyaXZlci0+bWlub3IsIGRyaXZlci0+cGF0Y2hsZXZlbCwKKwkJIGRyaXZlci0+ZGF0ZSwgZGV2LT5wcmltYXJ5LT5pbmRleCk7CisKKwlyZXR1cm4gMDsKKworZXJyX2czOgorCWRybV9wdXRfbWlub3IoJmRldi0+cHJpbWFyeSk7CitlcnJfZzI6CisJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpCisJCWRybV9wdXRfbWlub3IoJmRldi0+Y29udHJvbCk7CitlcnJfZzE6CisJa2ZyZWUoZGV2KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2V0X3BsYXRmb3JtX2Rldik7CisKKy8qKgorICogUGxhdGZvcm0gZGV2aWNlIGluaXRpYWxpemF0aW9uLiBDYWxsZWQgdmlhIGRybV9pbml0IGF0IG1vZHVsZSBsb2FkIHRpbWUsCisgKgorICogXHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBudW1iZXIgb24gZmFpbHVyZS4KKyAqCisgKiBJbml0aWFsaXplcyBhIGRybV9kZXZpY2Ugc3RydWN0dXJlcyxyZWdpc3RlcmluZyB0aGUKKyAqIHN0dWJzCisgKgorICogRXhwYW5kcyB0aGUgXGMgRFJJVkVSX1BSRUlOSVQgYW5kIFxjIERSSVZFUl9QT1NUX0lOSVQgbWFjcm9zIGJlZm9yZSBhbmQKKyAqIGFmdGVyIHRoZSBpbml0aWFsaXphdGlvbiBmb3IgZHJpdmVyIGN1c3RvbWl6YXRpb24uCisgKi8KKworaW50IGRybV9wbGF0Zm9ybV9pbml0KHN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIpCit7CisJcmV0dXJuIGRybV9nZXRfcGxhdGZvcm1fZGV2KGRyaXZlci0+cGxhdGZvcm1fZGV2aWNlLCBkcml2ZXIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9zdHViLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N0dWIuYwppbmRleCBhMGMzNjVmLi5kMWFkNTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N0dWIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N0dWIuYwpAQCAtMTU2LDYgKzE1Niw5IEBACiAJCW1hc3Rlci0+dW5pcXVlX2xlbiA9IDA7CiAJfQogCisJa2ZyZWUoZGV2LT5kZXZuYW1lKTsKKwlkZXYtPmRldm5hbWUgPSBOVUxMOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHB0LCBuZXh0LCAmbWFzdGVyLT5tYWdpY2ZyZWUsIGhlYWQpIHsKIAkJbGlzdF9kZWwoJnB0LT5oZWFkKTsKIAkJZHJtX2h0X3JlbW92ZV9pdGVtKCZtYXN0ZXItPm1hZ2ljbGlzdCwgJnB0LT5oYXNoX2l0ZW0pOwpAQCAtMjI0LDcgKzIyNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHJtX2ZpbGxfaW5fZGV2KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKK2ludCBkcm1fZmlsbF9pbl9kZXYoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQsCiAJCQkgICBzdHJ1Y3QgZHJtX2RyaXZlciAqZHJpdmVyKQogewpAQCAtMjQ1LDE0ICsyNDgsNiBAQAogCiAJaWRyX2luaXQoJmRldi0+ZHJ3X2lkcik7CiAKLQlkZXYtPnBkZXYgPSBwZGV2OwotCWRldi0+cGNpX2RldmljZSA9IHBkZXYtPmRldmljZTsKLQlkZXYtPnBjaV92ZW5kb3IgPSBwZGV2LT52ZW5kb3I7Ci0KLSNpZmRlZiBfX2FscGhhX18KLQlkZXYtPmhvc2UgPSBwZGV2LT5zeXNkYXRhOwotI2VuZGlmCi0KIAlpZiAoZHJtX2h0X2NyZWF0ZSgmZGV2LT5tYXBfaGFzaCwgMTIpKSB7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTMyMSw3ICszMTYsNyBAQAogICogY3JlYXRlIHRoZSBwcm9jIGluaXQgZW50cnkgdmlhIHByb2NfaW5pdCgpLiBUaGlzIHJvdXRpbmVzIGFzc2lnbnMKICAqIG1pbm9yIG51bWJlcnMgdG8gc2Vjb25kYXJ5IGhlYWRzIG9mIG11bHRpLWhlYWRlZCBjYXJkcwogICovCi1zdGF0aWMgaW50IGRybV9nZXRfbWlub3Ioc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9taW5vciAqKm1pbm9yLCBpbnQgdHlwZSkKK2ludCBkcm1fZ2V0X21pbm9yKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fbWlub3IgKiptaW5vciwgaW50IHR5cGUpCiB7CiAJc3RydWN0IGRybV9taW5vciAqbmV3X21pbm9yOwogCWludCByZXQ7CkBAIC0zODgsODMgKzM4Myw2IEBACiB9CiAKIC8qKgotICogUmVnaXN0ZXIuCi0gKgotICogXHBhcmFtIHBkZXYgLSBQQ0kgZGV2aWNlIHN0cnVjdHVyZQotICogXHBhcmFtIGVudCBlbnRyeSBmcm9tIHRoZSBQQ0kgSUQgdGFibGUgd2l0aCBkZXZpY2UgdHlwZSBmbGFncwotICogXHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBudW1iZXIgb24gZmFpbHVyZS4KLSAqCi0gKiBBdHRlbXB0IHRvIGdldHMgaW50ZXIgbW9kdWxlICJkcm0iIGluZm9ybWF0aW9uLiBJZiB3ZSBhcmUgZmlyc3QKLSAqIHRoZW4gcmVnaXN0ZXIgdGhlIGNoYXJhY3RlciBkZXZpY2UgYW5kIGludGVyIG1vZHVsZSBpbmZvcm1hdGlvbi4KLSAqIFRyeSBhbmQgcmVnaXN0ZXIsIGlmIHdlIGZhaWwgdG8gcmVnaXN0ZXIsIGJhY2tvdXQgcHJldmlvdXMgd29yay4KLSAqLwotaW50IGRybV9nZXRfZGV2KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50LAotCQlzdHJ1Y3QgZHJtX2RyaXZlciAqZHJpdmVyKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Ci0JaW50IHJldDsKLQotCURSTV9ERUJVRygiXG4iKTsKLQotCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRldikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9nMTsKLQotCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwotCWlmICgocmV0ID0gZHJtX2ZpbGxfaW5fZGV2KGRldiwgcGRldiwgZW50LCBkcml2ZXIpKSkgewotCQlwcmludGsoS0VSTl9FUlIgIkRSTTogRmlsbF9pbl9kZXYgZmFpbGVkLlxuIik7Ci0JCWdvdG8gZXJyX2cyOwotCX0KLQotCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKSB7Ci0JCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwotCQlyZXQgPSBkcm1fZ2V0X21pbm9yKGRldiwgJmRldi0+Y29udHJvbCwgRFJNX01JTk9SX0NPTlRST0wpOwotCQlpZiAocmV0KQotCQkJZ290byBlcnJfZzI7Ci0JfQotCi0JaWYgKChyZXQgPSBkcm1fZ2V0X21pbm9yKGRldiwgJmRldi0+cHJpbWFyeSwgRFJNX01JTk9SX0xFR0FDWSkpKQotCQlnb3RvIGVycl9nMzsKLQotCWlmIChkZXYtPmRyaXZlci0+bG9hZCkgewotCQlyZXQgPSBkZXYtPmRyaXZlci0+bG9hZChkZXYsIGVudC0+ZHJpdmVyX2RhdGEpOwotCQlpZiAocmV0KQotCQkJZ290byBlcnJfZzQ7Ci0JfQotCi0gICAgICAgIC8qIHNldHVwIHRoZSBncm91cGluZyBmb3IgdGhlIGxlZ2FjeSBvdXRwdXQgKi8KLQlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgewotCQlyZXQgPSBkcm1fbW9kZV9ncm91cF9pbml0X2xlZ2FjeV9ncm91cChkZXYsICZkZXYtPnByaW1hcnktPm1vZGVfZ3JvdXApOwotCQlpZiAocmV0KQotCQkJZ290byBlcnJfZzQ7Ci0JfQotCi0JbGlzdF9hZGRfdGFpbCgmZGV2LT5kcml2ZXJfaXRlbSwgJmRyaXZlci0+ZGV2aWNlX2xpc3QpOwotCi0JRFJNX0lORk8oIkluaXRpYWxpemVkICVzICVkLiVkLiVkICVzIGZvciAlcyBvbiBtaW5vciAlZFxuIiwKLQkJIGRyaXZlci0+bmFtZSwgZHJpdmVyLT5tYWpvciwgZHJpdmVyLT5taW5vciwgZHJpdmVyLT5wYXRjaGxldmVsLAotCQkgZHJpdmVyLT5kYXRlLCBwY2lfbmFtZShwZGV2KSwgZGV2LT5wcmltYXJ5LT5pbmRleCk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX2c0OgotCWRybV9wdXRfbWlub3IoJmRldi0+cHJpbWFyeSk7Ci1lcnJfZzM6Ci0JaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpCi0JCWRybV9wdXRfbWlub3IoJmRldi0+Y29udHJvbCk7Ci1lcnJfZzI6Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotZXJyX2cxOgotCWtmcmVlKGRldik7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0woZHJtX2dldF9kZXYpOwotCi0vKioKICAqIFB1dCBhIHNlY29uZGFyeSBtaW5vciBudW1iZXIuCiAgKgogICogXHBhcmFtIHNlY19taW5vciAtIHN0cnVjdHVyZSB0byBiZSByZWxlYXNlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5jCmluZGV4IDEwMWQzODEuLjg2MTE4YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMKQEAgLTQ4OSw3ICs0ODksOCBAQAogCWludCBlcnI7CiAJY2hhciAqbWlub3Jfc3RyOwogCi0JbWlub3ItPmtkZXYucGFyZW50ID0gJm1pbm9yLT5kZXYtPnBkZXYtPmRldjsKKwltaW5vci0+a2Rldi5wYXJlbnQgPSBtaW5vci0+ZGV2LT5kZXY7CisKIAltaW5vci0+a2Rldi5jbGFzcyA9IGRybV9jbGFzczsKIAltaW5vci0+a2Rldi5yZWxlYXNlID0gZHJtX3N5c2ZzX2RldmljZV9yZWxlYXNlOwogCW1pbm9yLT5rZGV2LmRldnQgPSBtaW5vci0+ZGV2aWNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV90cmFjZS5oIGIvZHJpdmVycy9ncHUvZHJtL2RybV90cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZWE5NjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3RyYWNlLmgKQEAgLTAsMCArMSw2NiBAQAorI2lmICFkZWZpbmVkKF9EUk1fVFJBQ0VfSF8pIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpCisjZGVmaW5lIF9EUk1fVFJBQ0VfSF8KKworI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgorCisjdW5kZWYgVFJBQ0VfU1lTVEVNCisjZGVmaW5lIFRSQUNFX1NZU1RFTSBkcm0KKyNkZWZpbmUgVFJBQ0VfU1lTVEVNX1NUUklORyBfX3N0cmluZ2lmeShUUkFDRV9TWVNURU0pCisjZGVmaW5lIFRSQUNFX0lOQ0xVREVfRklMRSBkcm1fdHJhY2UKKworVFJBQ0VfRVZFTlQoZHJtX3ZibGFua19ldmVudCwKKwkgICAgVFBfUFJPVE8oaW50IGNydGMsIHVuc2lnbmVkIGludCBzZXEpLAorCSAgICBUUF9BUkdTKGNydGMsIHNlcSksCisJICAgIFRQX1NUUlVDVF9fZW50cnkoCisJCSAgICBfX2ZpZWxkKGludCwgY3J0YykKKwkJICAgIF9fZmllbGQodW5zaWduZWQgaW50LCBzZXEpCisJCSAgICApLAorCSAgICBUUF9mYXN0X2Fzc2lnbigKKwkJICAgIF9fZW50cnktPmNydGMgPSBjcnRjOworCQkgICAgX19lbnRyeS0+c2VxID0gc2VxOworCQkgICAgKSwKKwkgICAgVFBfcHJpbnRrKCJjcnRjPSVkLCBzZXE9JWQiLCBfX2VudHJ5LT5jcnRjLCBfX2VudHJ5LT5zZXEpCispOworCitUUkFDRV9FVkVOVChkcm1fdmJsYW5rX2V2ZW50X3F1ZXVlZCwKKwkgICAgVFBfUFJPVE8ocGlkX3QgcGlkLCBpbnQgY3J0YywgdW5zaWduZWQgaW50IHNlcSksCisJICAgIFRQX0FSR1MocGlkLCBjcnRjLCBzZXEpLAorCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAorCQkgICAgX19maWVsZChwaWRfdCwgcGlkKQorCQkgICAgX19maWVsZChpbnQsIGNydGMpCisJCSAgICBfX2ZpZWxkKHVuc2lnbmVkIGludCwgc2VxKQorCQkgICAgKSwKKwkgICAgVFBfZmFzdF9hc3NpZ24oCisJCSAgICBfX2VudHJ5LT5waWQgPSBwaWQ7CisJCSAgICBfX2VudHJ5LT5jcnRjID0gY3J0YzsKKwkJICAgIF9fZW50cnktPnNlcSA9IHNlcTsKKwkJICAgICksCisJICAgIFRQX3ByaW50aygicGlkPSVkLCBjcnRjPSVkLCBzZXE9JWQiLCBfX2VudHJ5LT5waWQsIF9fZW50cnktPmNydGMsIFwKKwkJICAgICAgX19lbnRyeS0+c2VxKQorKTsKKworVFJBQ0VfRVZFTlQoZHJtX3ZibGFua19ldmVudF9kZWxpdmVyZWQsCisJICAgIFRQX1BST1RPKHBpZF90IHBpZCwgaW50IGNydGMsIHVuc2lnbmVkIGludCBzZXEpLAorCSAgICBUUF9BUkdTKHBpZCwgY3J0Yywgc2VxKSwKKwkgICAgVFBfU1RSVUNUX19lbnRyeSgKKwkJICAgIF9fZmllbGQocGlkX3QsIHBpZCkKKwkJICAgIF9fZmllbGQoaW50LCBjcnRjKQorCQkgICAgX19maWVsZCh1bnNpZ25lZCBpbnQsIHNlcSkKKwkJICAgICksCisJICAgIFRQX2Zhc3RfYXNzaWduKAorCQkgICAgX19lbnRyeS0+cGlkID0gcGlkOworCQkgICAgX19lbnRyeS0+Y3J0YyA9IGNydGM7CisJCSAgICBfX2VudHJ5LT5zZXEgPSBzZXE7CisJCSAgICApLAorCSAgICBUUF9wcmludGsoInBpZD0lZCwgY3J0Yz0lZCwgc2VxPSVkIiwgX19lbnRyeS0+cGlkLCBfX2VudHJ5LT5jcnRjLCBcCisJCSAgICAgIF9fZW50cnktPnNlcSkKKyk7CisKKyNlbmRpZiAvKiBfRFJNX1RSQUNFX0hfICovCisKKy8qIFRoaXMgcGFydCBtdXN0IGJlIG91dHNpZGUgcHJvdGVjdGlvbiAqLworI3VuZGVmIFRSQUNFX0lOQ0xVREVfUEFUSAorI2RlZmluZSBUUkFDRV9JTkNMVURFX1BBVEggLgorI2luY2x1ZGUgPHRyYWNlL2RlZmluZV90cmFjZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV90cmFjZV9wb2ludHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fdHJhY2VfcG9pbnRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQwZWI5MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fdHJhY2VfcG9pbnRzLmMKQEAgLTAsMCArMSw0IEBACisjaW5jbHVkZSAiZHJtUC5oIgorCisjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKKyNpbmNsdWRlICJkcm1fdHJhY2UuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fdm0uYwppbmRleCBjM2IxM2ZiLi4zNzc4MzYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV92bS5jCkBAIC02MSw3ICs2MSw3IEBACiAJCXRtcCA9IHBncHJvdF93cml0ZWNvbWJpbmUodG1wKTsKIAllbHNlCiAJCXRtcCA9IHBncHJvdF9ub25jYWNoZWQodG1wKTsKLSNlbGlmIGRlZmluZWQoX19zcGFyY19fKQorI2VsaWYgZGVmaW5lZChfX3NwYXJjX18pIHx8IGRlZmluZWQoX19hcm1fXykKIAl0bXAgPSBwZ3Byb3Rfbm9uY2FjaGVkKHRtcCk7CiAjZW5kaWYKIAlyZXR1cm4gdG1wOwpAQCAtNjAxLDYgKzYwMSw3IEBACiAJfQogCiAJc3dpdGNoIChtYXAtPnR5cGUpIHsKKyNpZiAhZGVmaW5lZChfX2FybV9fKQogCWNhc2UgX0RSTV9BR1A6CiAJCWlmIChkcm1fY29yZV9oYXNfQUdQKGRldikgJiYgZGV2LT5hZ3AtPmNhbnRfdXNlX2FwZXJ0dXJlKSB7CiAJCQkvKgpAQCAtNjE1LDIwICs2MTYsMzEgQEAKIAkJCWJyZWFrOwogCQl9CiAJCS8qIGZhbGwgdGhyb3VnaCB0byBfRFJNX0ZSQU1FX0JVRkZFUi4uLiAqLworI2VuZGlmCiAJY2FzZSBfRFJNX0ZSQU1FX0JVRkZFUjoKIAljYXNlIF9EUk1fUkVHSVNURVJTOgogCQlvZmZzZXQgPSBkZXYtPmRyaXZlci0+Z2V0X3JlZ19vZnMoZGV2KTsKIAkJdm1hLT52bV9mbGFncyB8PSBWTV9JTzsJLyogbm90IGluIGNvcmUgZHVtcCAqLwogCQl2bWEtPnZtX3BhZ2VfcHJvdCA9IGRybV9pb19wcm90KG1hcC0+dHlwZSwgdm1hKTsKKyNpZiAhZGVmaW5lZChfX2FybV9fKQogCQlpZiAoaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwKIAkJCQkgICAgICAgKG1hcC0+b2Zmc2V0ICsgb2Zmc2V0KSA+PiBQQUdFX1NISUZULAogCQkJCSAgICAgICB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCiAJCQkJICAgICAgIHZtYS0+dm1fcGFnZV9wcm90KSkKIAkJCXJldHVybiAtRUFHQUlOOworI2Vsc2UKKwkJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsCisJCQkJCShtYXAtPm9mZnNldCArIG9mZnNldCkgPj4gUEFHRV9TSElGVCwKKwkJCQkJdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAorCQkJCQl2bWEtPnZtX3BhZ2VfcHJvdCkpCisJCQlyZXR1cm4gLUVBR0FJTjsKKyNlbmRpZgorCiAJCURSTV9ERUJVRygiICAgVHlwZSA9ICVkOyBzdGFydCA9IDB4JWx4LCBlbmQgPSAweCVseCwiCiAJCQkgICIgb2Zmc2V0ID0gMHglbGx4XG4iLAogCQkJICBtYXAtPnR5cGUsCiAJCQkgIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kLCAodW5zaWduZWQgbG9uZyBsb25nKShtYXAtPm9mZnNldCArIG9mZnNldCkpOworCiAJCXZtYS0+dm1fb3BzID0gJmRybV92bV9vcHM7CiAJCWJyZWFrOwogCWNhc2UgX0RSTV9DT05TSVNURU5UOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2kyYy9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pMmMvTWFrZWZpbGUKaW5kZXggNmQyYWJhZi4uOTI4NjI1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2kyYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTJjL01ha2VmaWxlCkBAIC0yLDMgKzIsNiBAQAogCiBjaDcwMDYteSA6PSBjaDcwMDZfZHJ2Lm8gY2g3MDA2X21vZGUubwogb2JqLSQoQ09ORklHX0RSTV9JMkNfQ0g3MDA2KSArPSBjaDcwMDYubworCitzaWwxNjQteSA6PSBzaWwxNjRfZHJ2Lm8KK29iai0kKENPTkZJR19EUk1fSTJDX1NJTDE2NCkgKz0gc2lsMTY0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pMmMvY2g3MDA2X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2kyYy9jaDcwMDZfZHJ2LmMKaW5kZXggODE2ODFhMC4uODMzYjM1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2kyYy9jaDcwMDZfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2kyYy9jaDcwMDZfZHJ2LmMKQEAgLTMzLDcgKzMzLDcgQEAKIHsKIAlzdHJ1Y3QgY2g3MDA2X3ByaXYgKnByaXYgPSB0b19jaDcwMDZfcHJpdihlbmNvZGVyKTsKIAotCXByaXYtPnBhcmFtcyA9IHBhcmFtczsKKwlwcml2LT5wYXJhbXMgPSAqKHN0cnVjdCBjaDcwMDZfZW5jb2Rlcl9wYXJhbXMgKilwYXJhbXM7CiB9CiAKIHN0YXRpYyB2b2lkIGNoNzAwNl9lbmNvZGVyX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpAQCAtMTE0LDcgKzExNCw3IEBACiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRybV9pMmNfZW5jb2Rlcl9nZXRfY2xpZW50KGVuY29kZXIpOwogCXN0cnVjdCBjaDcwMDZfcHJpdiAqcHJpdiA9IHRvX2NoNzAwNl9wcml2KGVuY29kZXIpOwotCXN0cnVjdCBjaDcwMDZfZW5jb2Rlcl9wYXJhbXMgKnBhcmFtcyA9IHByaXYtPnBhcmFtczsKKwlzdHJ1Y3QgY2g3MDA2X2VuY29kZXJfcGFyYW1zICpwYXJhbXMgPSAmcHJpdi0+cGFyYW1zOwogCXN0cnVjdCBjaDcwMDZfc3RhdGUgKnN0YXRlID0gJnByaXYtPnN0YXRlOwogCXVpbnQ4X3QgKnJlZ3MgPSBzdGF0ZS0+cmVnczsKIAlzdHJ1Y3QgY2g3MDA2X21vZGUgKm1vZGUgPSBwcml2LT5tb2RlOwpAQCAtNDI4LDYgKzQyOCwyMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGNoNzAwNl9zdXNwZW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHBtX21lc3NhZ2VfdCBtZXNnKQoreworCWNoNzAwNl9kYmcoY2xpZW50LCAiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNoNzAwNl9yZXN1bWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwljaDcwMDZfZGJnKGNsaWVudCwgIlxuIik7CisKKwljaDcwMDZfd3JpdGUoY2xpZW50LCAweDNkLCAweDApOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgY2g3MDA2X2VuY29kZXJfaW5pdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkgICAgICAgc3RydWN0IGRybV9lbmNvZGVyX3NsYXZlICplbmNvZGVyKQpAQCAtNDg3LDYgKzUwMyw4IEBACiAJLmkyY19kcml2ZXIgPSB7CiAJCS5wcm9iZSA9IGNoNzAwNl9wcm9iZSwKIAkJLnJlbW92ZSA9IGNoNzAwNl9yZW1vdmUsCisJCS5zdXNwZW5kID0gY2g3MDA2X3N1c3BlbmQsCisJCS5yZXN1bWUgPSBjaDcwMDZfcmVzdW1lLAogCiAJCS5kcml2ZXIgPSB7CiAJCQkubmFtZSA9ICJjaDcwMDYiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2kyYy9jaDcwMDZfcHJpdi5oIGIvZHJpdmVycy9ncHUvZHJtL2kyYy9jaDcwMDZfcHJpdi5oCmluZGV4IGIwNmQzZDkuLjFjNmQyZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pMmMvY2g3MDA2X3ByaXYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTJjL2NoNzAwNl9wcml2LmgKQEAgLTc3LDcgKzc3LDcgQEAKIH07CiAKIHN0cnVjdCBjaDcwMDZfcHJpdiB7Ci0Jc3RydWN0IGNoNzAwNl9lbmNvZGVyX3BhcmFtcyAqcGFyYW1zOworCXN0cnVjdCBjaDcwMDZfZW5jb2Rlcl9wYXJhbXMgcGFyYW1zOwogCXN0cnVjdCBjaDcwMDZfbW9kZSAqbW9kZTsKIAogCXN0cnVjdCBjaDcwMDZfc3RhdGUgc3RhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTJjL3NpbDE2NF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pMmMvc2lsMTY0X2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNjc3MzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTJjL3NpbDE2NF9kcnYuYwpAQCAtMCwwICsxLDQ2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBGcmFuY2lzY28gSmVyZXouCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbAorICogcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSKFMpIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybV9jcnRjX2hlbHBlci5oIgorI2luY2x1ZGUgImRybV9lbmNvZGVyX3NsYXZlLmgiCisjaW5jbHVkZSAiaTJjL3NpbDE2NC5oIgorCitzdHJ1Y3Qgc2lsMTY0X3ByaXYgeworCXN0cnVjdCBzaWwxNjRfZW5jb2Rlcl9wYXJhbXMgY29uZmlnOworCXN0cnVjdCBpMmNfY2xpZW50ICpkdWFsbGlua19zbGF2ZTsKKworCXVpbnQ4X3Qgc2F2ZWRfc3RhdGVbMHgxMF07CisJdWludDhfdCBzYXZlZF9zbGF2ZV9zdGF0ZVsweDEwXTsKK307CisKKyNkZWZpbmUgdG9fc2lsMTY0X3ByaXYoeCkgXAorCSgoc3RydWN0IHNpbDE2NF9wcml2ICopdG9fZW5jb2Rlcl9zbGF2ZSh4KS0+c2xhdmVfcHJpdikKKworI2RlZmluZSBzaWwxNjRfZGJnKGNsaWVudCwgZm9ybWF0LCAuLi4pIGRvIHsJCQkJXAorCQlpZiAoZHJtX2RlYnVnICYgRFJNX1VUX0tNUykJCQkJXAorCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmY2xpZW50LT5kZXYsCQlcCisJCQkJICAgIiVzOiAiIGZvcm1hdCwgX19mdW5jX18sICMjIF9fVkFfQVJHU19fKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIHNpbDE2NF9pbmZvKGNsaWVudCwgZm9ybWF0LCAuLi4pCQlcCisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCBmb3JtYXQsIF9fVkFfQVJHU19fKQorI2RlZmluZSBzaWwxNjRfZXJyKGNsaWVudCwgZm9ybWF0LCAuLi4pCQkJXAorCWRldl9lcnIoJmNsaWVudC0+ZGV2LCBmb3JtYXQsIF9fVkFfQVJHU19fKQorCisjZGVmaW5lIFNJTDE2NF9JMkNfQUREUl9NQVNURVIJCQkweDM4CisjZGVmaW5lIFNJTDE2NF9JMkNfQUREUl9TTEFWRQkJCTB4MzkKKworLyogSFcgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBTSUwxNjRfVkVORE9SX0xPCQkJMHgwCisjZGVmaW5lIFNJTDE2NF9WRU5ET1JfSEkJCQkweDEKKyNkZWZpbmUgU0lMMTY0X0RFVklDRV9MTwkJCTB4MgorI2RlZmluZSBTSUwxNjRfREVWSUNFX0hJCQkJMHgzCisjZGVmaW5lIFNJTDE2NF9SRVZJU0lPTgkJCQkweDQKKyNkZWZpbmUgU0lMMTY0X0ZSRVFfTUlOCQkJCTB4NgorI2RlZmluZSBTSUwxNjRfRlJFUV9NQVgJCQkJMHg3CisjZGVmaW5lIFNJTDE2NF9DT05UUk9MMAkJCQkweDgKKyMgIGRlZmluZSBTSUwxNjRfQ09OVFJPTDBfUE9XRVJfT04JCTB4MDEKKyMgIGRlZmluZSBTSUwxNjRfQ09OVFJPTDBfRURHRV9SSVNJTkcJCTB4MDIKKyMgIGRlZmluZSBTSUwxNjRfQ09OVFJPTDBfSU5QVVRfMjRCSVQJCTB4MDQKKyMgIGRlZmluZSBTSUwxNjRfQ09OVFJPTDBfRFVBTF9FREdFCQkweDA4CisjICBkZWZpbmUgU0lMMTY0X0NPTlRST0wwX0hTWU5DX09OCQkweDEwCisjICBkZWZpbmUgU0lMMTY0X0NPTlRST0wwX1ZTWU5DX09OCQkweDIwCisjZGVmaW5lIFNJTDE2NF9ERVRFQ1QJCQkJMHg5CisjICBkZWZpbmUgU0lMMTY0X0RFVEVDVF9JTlRSX1NUQVQJCTB4MDEKKyMgIGRlZmluZSBTSUwxNjRfREVURUNUX0hPVFBMVUdfU1RBVAkJMHgwMgorIyAgZGVmaW5lIFNJTDE2NF9ERVRFQ1RfUkVDRUlWRVJfU1RBVAkJMHgwNAorIyAgZGVmaW5lIFNJTDE2NF9ERVRFQ1RfSU5UUl9NT0RFX1JFQ0VJVkVSCTB4MDAKKyMgIGRlZmluZSBTSUwxNjRfREVURUNUX0lOVFJfTU9ERV9IT1RQTFVHCTB4MDgKKyMgIGRlZmluZSBTSUwxNjRfREVURUNUX09VVF9NT0RFX0hJR0gJCTB4MDAKKyMgIGRlZmluZSBTSUwxNjRfREVURUNUX09VVF9NT0RFX0lOVFIJCTB4MTAKKyMgIGRlZmluZSBTSUwxNjRfREVURUNUX09VVF9NT0RFX1JFQ0VJVkVSCTB4MjAKKyMgIGRlZmluZSBTSUwxNjRfREVURUNUX09VVF9NT0RFX0hPVFBMVUcJMHgzMAorIyAgZGVmaW5lIFNJTDE2NF9ERVRFQ1RfVlNXSU5HX1NUQVQJCTB4ODAKKyNkZWZpbmUgU0lMMTY0X0NPTlRST0wxCQkJCTB4YQorIyAgZGVmaW5lIFNJTDE2NF9DT05UUk9MMV9ERVNLRVdfRU5BQkxFCQkweDEwCisjICBkZWZpbmUgU0lMMTY0X0NPTlRST0wxX0RFU0tFV19JTkNSX1NISUZUCTUKKyNkZWZpbmUgU0lMMTY0X0dQSU8JCQkJMHhiCisjZGVmaW5lIFNJTDE2NF9DT05UUk9MMgkJCQkweGMKKyMgIGRlZmluZSBTSUwxNjRfQ09OVFJPTDJfRklMVEVSX0VOQUJMRQkJMHgwMQorIyAgZGVmaW5lIFNJTDE2NF9DT05UUk9MMl9GSUxURVJfU0VUVElOR19TSElGVAkxCisjICBkZWZpbmUgU0lMMTY0X0NPTlRST0wyX0RVQUxMSU5LX01BU1RFUgkweDQwCisjICBkZWZpbmUgU0lMMTY0X0NPTlRST0wyX1NZTkNfQ09OVAkJMHg4MAorI2RlZmluZSBTSUwxNjRfRFVBTExJTksJCQkJMHhkCisjICBkZWZpbmUgU0lMMTY0X0RVQUxMSU5LX0VOQUJMRQkJMHgxMAorIyAgZGVmaW5lIFNJTDE2NF9EVUFMTElOS19TS0VXX1NISUZUCQk1CisjZGVmaW5lIFNJTDE2NF9QTExaT05FCQkJCTB4ZQorIyAgZGVmaW5lIFNJTDE2NF9QTExaT05FX1NUQVQJCQkweDA4CisjICBkZWZpbmUgU0lMMTY0X1BMTFpPTkVfRk9SQ0VfT04JCTB4MTAKKyMgIGRlZmluZSBTSUwxNjRfUExMWk9ORV9GT1JDRV9ISUdICQkweDIwCisKKy8qIEhXIGFjY2VzcyBmdW5jdGlvbnMgKi8KKworc3RhdGljIHZvaWQKK3NpbDE2NF93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1aW50OF90IGFkZHIsIHVpbnQ4X3QgdmFsKQoreworCXVpbnQ4X3QgYnVmW10gPSB7YWRkciwgdmFsfTsKKwlpbnQgcmV0OworCisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCBBUlJBWV9TSVpFKGJ1ZikpOworCWlmIChyZXQgPCAwKQorCQlzaWwxNjRfZXJyKGNsaWVudCwgIkVycm9yICVkIHdyaXRpbmcgdG8gc3ViYWRkcmVzcyAweCV4XG4iLAorCQkJICAgcmV0LCBhZGRyKTsKK30KKworc3RhdGljIHVpbnQ4X3QKK3NpbDE2NF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVpbnQ4X3QgYWRkcikKK3sKKwl1aW50OF90IHZhbDsKKwlpbnQgcmV0OworCisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgJmFkZHIsIHNpemVvZihhZGRyKSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbDsKKworCXJldCA9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsICZ2YWwsIHNpemVvZih2YWwpKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsOworCisJcmV0dXJuIHZhbDsKKworZmFpbDoKKwlzaWwxNjRfZXJyKGNsaWVudCwgIkVycm9yICVkIHJlYWRpbmcgZnJvbSBzdWJhZGRyZXNzIDB4JXhcbiIsCisJCSAgIHJldCwgYWRkcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzaWwxNjRfc2F2ZV9zdGF0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1aW50OF90ICpzdGF0ZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDB4ODsgaSA8PSAweGU7IGkrKykKKwkJc3RhdGVbaV0gPSBzaWwxNjRfcmVhZChjbGllbnQsIGkpOworfQorCitzdGF0aWMgdm9pZAorc2lsMTY0X3Jlc3RvcmVfc3RhdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdWludDhfdCAqc3RhdGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAweDg7IGkgPD0gMHhlOyBpKyspCisJCXNpbDE2NF93cml0ZShjbGllbnQsIGksIHN0YXRlW2ldKTsKK30KKworc3RhdGljIHZvaWQKK3NpbDE2NF9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgYm9vbCBvbikKK3sKKwl1aW50OF90IGNvbnRyb2wwID0gc2lsMTY0X3JlYWQoY2xpZW50LCBTSUwxNjRfQ09OVFJPTDApOworCisJaWYgKG9uKQorCQljb250cm9sMCB8PSBTSUwxNjRfQ09OVFJPTDBfUE9XRVJfT047CisJZWxzZQorCQljb250cm9sMCAmPSB+U0lMMTY0X0NPTlRST0wwX1BPV0VSX09OOworCisJc2lsMTY0X3dyaXRlKGNsaWVudCwgU0lMMTY0X0NPTlRST0wwLCBjb250cm9sMCk7Cit9CisKK3N0YXRpYyB2b2lkCitzaWwxNjRfaW5pdF9zdGF0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkgIHN0cnVjdCBzaWwxNjRfZW5jb2Rlcl9wYXJhbXMgKmNvbmZpZywKKwkJICBib29sIGR1YWxsaW5rKQoreworCXNpbDE2NF93cml0ZShjbGllbnQsIFNJTDE2NF9DT05UUk9MMCwKKwkJICAgICBTSUwxNjRfQ09OVFJPTDBfSFNZTkNfT04gfAorCQkgICAgIFNJTDE2NF9DT05UUk9MMF9WU1lOQ19PTiB8CisJCSAgICAgKGNvbmZpZy0+aW5wdXRfZWRnZSA/IFNJTDE2NF9DT05UUk9MMF9FREdFX1JJU0lORyA6IDApIHwKKwkJICAgICAoY29uZmlnLT5pbnB1dF93aWR0aCA/IFNJTDE2NF9DT05UUk9MMF9JTlBVVF8yNEJJVCA6IDApIHwKKwkJICAgICAoY29uZmlnLT5pbnB1dF9kdWFsID8gU0lMMTY0X0NPTlRST0wwX0RVQUxfRURHRSA6IDApKTsKKworCXNpbDE2NF93cml0ZShjbGllbnQsIFNJTDE2NF9ERVRFQ1QsCisJCSAgICAgU0lMMTY0X0RFVEVDVF9JTlRSX1NUQVQgfAorCQkgICAgIFNJTDE2NF9ERVRFQ1RfT1VUX01PREVfUkVDRUlWRVIpOworCisJc2lsMTY0X3dyaXRlKGNsaWVudCwgU0lMMTY0X0NPTlRST0wxLAorCQkgICAgIChjb25maWctPmlucHV0X3NrZXcgPyBTSUwxNjRfQ09OVFJPTDFfREVTS0VXX0VOQUJMRSA6IDApIHwKKwkJICAgICAoKChjb25maWctPmlucHV0X3NrZXcgKyA0KSAmIDB4NykKKwkJICAgICAgPDwgU0lMMTY0X0NPTlRST0wxX0RFU0tFV19JTkNSX1NISUZUKSk7CisKKwlzaWwxNjRfd3JpdGUoY2xpZW50LCBTSUwxNjRfQ09OVFJPTDIsCisJCSAgICAgU0lMMTY0X0NPTlRST0wyX1NZTkNfQ09OVCB8CisJCSAgICAgKGNvbmZpZy0+cGxsX2ZpbHRlciA/IDAgOiBTSUwxNjRfQ09OVFJPTDJfRklMVEVSX0VOQUJMRSkgfAorCQkgICAgICg0IDw8IFNJTDE2NF9DT05UUk9MMl9GSUxURVJfU0VUVElOR19TSElGVCkpOworCisJc2lsMTY0X3dyaXRlKGNsaWVudCwgU0lMMTY0X1BMTFpPTkUsIDApOworCisJaWYgKGR1YWxsaW5rKQorCQlzaWwxNjRfd3JpdGUoY2xpZW50LCBTSUwxNjRfRFVBTExJTkssCisJCQkgICAgIFNJTDE2NF9EVUFMTElOS19FTkFCTEUgfAorCQkJICAgICAoKChjb25maWctPmR1YWxsaW5rX3NrZXcgKyA0KSAmIDB4NykKKwkJCSAgICAgIDw8IFNJTDE2NF9EVUFMTElOS19TS0VXX1NISUZUKSk7CisJZWxzZQorCQlzaWwxNjRfd3JpdGUoY2xpZW50LCBTSUwxNjRfRFVBTExJTkssIDApOworfQorCisvKiBEUk0gZW5jb2RlciBmdW5jdGlvbnMgKi8KKworc3RhdGljIHZvaWQKK3NpbDE2NF9lbmNvZGVyX3NldF9jb25maWcoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCB2b2lkICpwYXJhbXMpCit7CisJc3RydWN0IHNpbDE2NF9wcml2ICpwcml2ID0gdG9fc2lsMTY0X3ByaXYoZW5jb2Rlcik7CisKKwlwcml2LT5jb25maWcgPSAqKHN0cnVjdCBzaWwxNjRfZW5jb2Rlcl9wYXJhbXMgKilwYXJhbXM7Cit9CisKK3N0YXRpYyB2b2lkCitzaWwxNjRfZW5jb2Rlcl9kcG1zKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgaW50IG1vZGUpCit7CisJc3RydWN0IHNpbDE2NF9wcml2ICpwcml2ID0gdG9fc2lsMTY0X3ByaXYoZW5jb2Rlcik7CisJYm9vbCBvbiA9IChtb2RlID09IERSTV9NT0RFX0RQTVNfT04pOworCWJvb2wgZHVhbGxpbmsgPSAob24gJiYgZW5jb2Rlci0+Y3J0Yy0+bW9kZS5jbG9jayA+IDE2NTAwMCk7CisKKwlzaWwxNjRfc2V0X3Bvd2VyX3N0YXRlKGRybV9pMmNfZW5jb2Rlcl9nZXRfY2xpZW50KGVuY29kZXIpLCBvbik7CisKKwlpZiAocHJpdi0+ZHVhbGxpbmtfc2xhdmUpCisJCXNpbDE2NF9zZXRfcG93ZXJfc3RhdGUocHJpdi0+ZHVhbGxpbmtfc2xhdmUsIGR1YWxsaW5rKTsKK30KKworc3RhdGljIHZvaWQKK3NpbDE2NF9lbmNvZGVyX3NhdmUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBzaWwxNjRfcHJpdiAqcHJpdiA9IHRvX3NpbDE2NF9wcml2KGVuY29kZXIpOworCisJc2lsMTY0X3NhdmVfc3RhdGUoZHJtX2kyY19lbmNvZGVyX2dldF9jbGllbnQoZW5jb2RlciksCisJCQkgIHByaXYtPnNhdmVkX3N0YXRlKTsKKworCWlmIChwcml2LT5kdWFsbGlua19zbGF2ZSkKKwkJc2lsMTY0X3NhdmVfc3RhdGUocHJpdi0+ZHVhbGxpbmtfc2xhdmUsCisJCQkJICBwcml2LT5zYXZlZF9zbGF2ZV9zdGF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitzaWwxNjRfZW5jb2Rlcl9yZXN0b3JlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3Qgc2lsMTY0X3ByaXYgKnByaXYgPSB0b19zaWwxNjRfcHJpdihlbmNvZGVyKTsKKworCXNpbDE2NF9yZXN0b3JlX3N0YXRlKGRybV9pMmNfZW5jb2Rlcl9nZXRfY2xpZW50KGVuY29kZXIpLAorCQkJICAgICBwcml2LT5zYXZlZF9zdGF0ZSk7CisKKwlpZiAocHJpdi0+ZHVhbGxpbmtfc2xhdmUpCisJCXNpbDE2NF9yZXN0b3JlX3N0YXRlKHByaXYtPmR1YWxsaW5rX3NsYXZlLAorCQkJCSAgICAgcHJpdi0+c2F2ZWRfc2xhdmVfc3RhdGUpOworfQorCitzdGF0aWMgYm9vbAorc2lsMTY0X2VuY29kZXJfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludAorc2lsMTY0X2VuY29kZXJfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBzaWwxNjRfcHJpdiAqcHJpdiA9IHRvX3NpbDE2NF9wcml2KGVuY29kZXIpOworCisJaWYgKG1vZGUtPmNsb2NrIDwgMzIwMDApCisJCXJldHVybiBNT0RFX0NMT0NLX0xPVzsKKworCWlmIChtb2RlLT5jbG9jayA+IDMzMDAwMCB8fAorCSAgICAobW9kZS0+Y2xvY2sgPiAxNjUwMDAgJiYgIXByaXYtPmR1YWxsaW5rX3NsYXZlKSkKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKKworCXJldHVybiBNT0RFX09LOworfQorCitzdGF0aWMgdm9pZAorc2lsMTY0X2VuY29kZXJfbW9kZV9zZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlzdHJ1Y3Qgc2lsMTY0X3ByaXYgKnByaXYgPSB0b19zaWwxNjRfcHJpdihlbmNvZGVyKTsKKwlib29sIGR1YWxsaW5rID0gYWRqdXN0ZWRfbW9kZS0+Y2xvY2sgPiAxNjUwMDA7CisKKwlzaWwxNjRfaW5pdF9zdGF0ZShkcm1faTJjX2VuY29kZXJfZ2V0X2NsaWVudChlbmNvZGVyKSwKKwkJCSAgJnByaXYtPmNvbmZpZywgZHVhbGxpbmspOworCisJaWYgKHByaXYtPmR1YWxsaW5rX3NsYXZlKQorCQlzaWwxNjRfaW5pdF9zdGF0ZShwcml2LT5kdWFsbGlua19zbGF2ZSwKKwkJCQkgICZwcml2LT5jb25maWcsIGR1YWxsaW5rKTsKKworCXNpbDE2NF9lbmNvZGVyX2RwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PTik7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzCitzaWwxNjRfZW5jb2Rlcl9kZXRlY3Qoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkcm1faTJjX2VuY29kZXJfZ2V0X2NsaWVudChlbmNvZGVyKTsKKworCWlmIChzaWwxNjRfcmVhZChjbGllbnQsIFNJTDE2NF9ERVRFQ1QpICYgU0lMMTY0X0RFVEVDVF9IT1RQTFVHX1NUQVQpCisJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwllbHNlCisJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKK30KKworc3RhdGljIGludAorc2lsMTY0X2VuY29kZXJfZ2V0X21vZGVzKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCSBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzaWwxNjRfZW5jb2Rlcl9jcmVhdGVfcmVzb3VyY2VzKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzaWwxNjRfZW5jb2Rlcl9zZXRfcHJvcGVydHkoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkgICAgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCisJCQkgICAgdWludDY0X3QgdmFsKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorc2lsMTY0X2VuY29kZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IHNpbDE2NF9wcml2ICpwcml2ID0gdG9fc2lsMTY0X3ByaXYoZW5jb2Rlcik7CisKKwlpZiAocHJpdi0+ZHVhbGxpbmtfc2xhdmUpCisJCWkyY191bnJlZ2lzdGVyX2RldmljZShwcml2LT5kdWFsbGlua19zbGF2ZSk7CisKKwlrZnJlZShwcml2KTsKKwlkcm1faTJjX2VuY29kZXJfZGVzdHJveShlbmNvZGVyKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2Rlcl9zbGF2ZV9mdW5jcyBzaWwxNjRfZW5jb2Rlcl9mdW5jcyA9IHsKKwkuc2V0X2NvbmZpZyA9IHNpbDE2NF9lbmNvZGVyX3NldF9jb25maWcsCisJLmRlc3Ryb3kgPSBzaWwxNjRfZW5jb2Rlcl9kZXN0cm95LAorCS5kcG1zID0gc2lsMTY0X2VuY29kZXJfZHBtcywKKwkuc2F2ZSA9IHNpbDE2NF9lbmNvZGVyX3NhdmUsCisJLnJlc3RvcmUgPSBzaWwxNjRfZW5jb2Rlcl9yZXN0b3JlLAorCS5tb2RlX2ZpeHVwID0gc2lsMTY0X2VuY29kZXJfbW9kZV9maXh1cCwKKwkubW9kZV92YWxpZCA9IHNpbDE2NF9lbmNvZGVyX21vZGVfdmFsaWQsCisJLm1vZGVfc2V0ID0gc2lsMTY0X2VuY29kZXJfbW9kZV9zZXQsCisJLmRldGVjdCA9IHNpbDE2NF9lbmNvZGVyX2RldGVjdCwKKwkuZ2V0X21vZGVzID0gc2lsMTY0X2VuY29kZXJfZ2V0X21vZGVzLAorCS5jcmVhdGVfcmVzb3VyY2VzID0gc2lsMTY0X2VuY29kZXJfY3JlYXRlX3Jlc291cmNlcywKKwkuc2V0X3Byb3BlcnR5ID0gc2lsMTY0X2VuY29kZXJfc2V0X3Byb3BlcnR5LAorfTsKKworLyogSTJDIGRyaXZlciBmdW5jdGlvbnMgKi8KKworc3RhdGljIGludAorc2lsMTY0X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgdmVuZG9yID0gc2lsMTY0X3JlYWQoY2xpZW50LCBTSUwxNjRfVkVORE9SX0hJKSA8PCA4IHwKKwkJc2lsMTY0X3JlYWQoY2xpZW50LCBTSUwxNjRfVkVORE9SX0xPKTsKKwlpbnQgZGV2aWNlID0gc2lsMTY0X3JlYWQoY2xpZW50LCBTSUwxNjRfREVWSUNFX0hJKSA8PCA4IHwKKwkJc2lsMTY0X3JlYWQoY2xpZW50LCBTSUwxNjRfREVWSUNFX0xPKTsKKwlpbnQgcmV2ID0gc2lsMTY0X3JlYWQoY2xpZW50LCBTSUwxNjRfUkVWSVNJT04pOworCisJaWYgKHZlbmRvciAhPSAweDEgfHwgZGV2aWNlICE9IDB4NikgeworCQlzaWwxNjRfZGJnKGNsaWVudCwgIlVua25vd24gZGV2aWNlICV4OiV4LiV4XG4iLAorCQkJICAgdmVuZG9yLCBkZXZpY2UsIHJldik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXNpbDE2NF9pbmZvKGNsaWVudCwgIkRldGVjdGVkIGRldmljZSAleDoleC4leFxuIiwKKwkJICAgIHZlbmRvciwgZGV2aWNlLCByZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NpbDE2NF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50ICoKK3NpbDE2NF9kZXRlY3Rfc2xhdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAgPSBjbGllbnQtPmFkYXB0ZXI7CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkciA9IFNJTDE2NF9JMkNfQUREUl9TTEFWRSwKKwkJLmxlbiA9IDAsCisJfTsKKwljb25zdCBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbyA9IHsKKwkJSTJDX0JPQVJEX0lORk8oInNpbDE2NCIsIFNJTDE2NF9JMkNfQUREUl9TTEFWRSkKKwl9OworCisJaWYgKGkyY190cmFuc2ZlcihhZGFwLCAmbXNnLCAxKSAhPSAxKSB7CisJCXNpbDE2NF9kYmcoYWRhcCwgIk5vIGR1YWwtbGluayBzbGF2ZSBmb3VuZC4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIGkyY19uZXdfZGV2aWNlKGFkYXAsICZpbmZvKTsKK30KKworc3RhdGljIGludAorc2lsMTY0X2VuY29kZXJfaW5pdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAgIHN0cnVjdCBkcm1fZW5jb2Rlcl9zbGF2ZSAqZW5jb2RlcikKK3sKKwlzdHJ1Y3Qgc2lsMTY0X3ByaXYgKnByaXY7CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJZW5jb2Rlci0+c2xhdmVfcHJpdiA9IHByaXY7CisJZW5jb2Rlci0+c2xhdmVfZnVuY3MgPSAmc2lsMTY0X2VuY29kZXJfZnVuY3M7CisKKwlwcml2LT5kdWFsbGlua19zbGF2ZSA9IHNpbDE2NF9kZXRlY3Rfc2xhdmUoY2xpZW50KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kZXZpY2VfaWQgc2lsMTY0X2lkc1tdID0geworCXsgInNpbDE2NCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc2lsMTY0X2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2kyY19lbmNvZGVyX2RyaXZlciBzaWwxNjRfZHJpdmVyID0geworCS5pMmNfZHJpdmVyID0geworCQkucHJvYmUgPSBzaWwxNjRfcHJvYmUsCisJCS5yZW1vdmUgPSBzaWwxNjRfcmVtb3ZlLAorCQkuZHJpdmVyID0geworCQkJLm5hbWUgPSAic2lsMTY0IiwKKwkJfSwKKwkJLmlkX3RhYmxlID0gc2lsMTY0X2lkcywKKwl9LAorCS5lbmNvZGVyX2luaXQgPSBzaWwxNjRfZW5jb2Rlcl9pbml0LAorfTsKKworLyogTW9kdWxlIGluaXRpYWxpemF0aW9uICovCisKK3N0YXRpYyBpbnQgX19pbml0CitzaWwxNjRfaW5pdCh2b2lkKQoreworCXJldHVybiBkcm1faTJjX2VuY29kZXJfcmVnaXN0ZXIoVEhJU19NT0RVTEUsICZzaWwxNjRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0CitzaWwxNjRfZXhpdCh2b2lkKQoreworCWRybV9pMmNfZW5jb2Rlcl91bnJlZ2lzdGVyKCZzaWwxNjRfZHJpdmVyKTsKK30KKworTU9EVUxFX0FVVEhPUigiRnJhbmNpc2NvIEplcmV6IDxjdXJyb2plcmV6QHJpc2V1cC5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNpbGljb24gSW1hZ2Ugc2lsMTY0IFRNRFMgdHJhbnNtaXR0ZXIgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIGFuZCBhZGRpdGlvbmFsIHJpZ2h0cyIpOworCittb2R1bGVfaW5pdChzaWwxNjRfaW5pdCk7Cittb2R1bGVfZXhpdChzaWwxNjRfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTgxMC9pODEwX2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k4MTAvaTgxMF9kbWEuYwppbmRleCA5OTdkOTE3Li4wZTZjMTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTgxMC9pODEwX2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pODEwL2k4MTBfZG1hLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4JLyogRm9yIHRhc2sgcXVldWUgc3VwcG9ydCAqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogCiAjZGVmaW5lIEk4MTBfQlVGX0ZSRUUJCTIKQEAgLTYwLDkgKzYxLDggQEAKIAkJLyogSW4gdXNlIGlzIGFscmVhZHkgYSBwb2ludGVyICovCiAJCXVzZWQgPSBjbXB4Y2hnKGJ1Zl9wcml2LT5pbl91c2UsIEk4MTBfQlVGX0ZSRUUsCiAJCQkgICAgICAgSTgxMF9CVUZfQ0xJRU5UKTsKLQkJaWYgKHVzZWQgPT0gSTgxMF9CVUZfRlJFRSkgeworCQlpZiAodXNlZCA9PSBJODEwX0JVRl9GUkVFKQogCQkJcmV0dXJuIGJ1ZjsKLQkJfQogCX0KIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTcxLDcgKzcxLDcgQEAKICAqIHlldCwgdGhlIGhhcmR3YXJlIHVwZGF0ZXMgaW4gdXNlIGZvciB1cyBvbmNlIGl0cyBvbiB0aGUgcmluZyBidWZmZXIuCiAgKi8KIAotc3RhdGljIGludCBpODEwX2ZyZWVsaXN0X3B1dChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgc3RydWN0IGRybV9idWYgKiBidWYpCitzdGF0aWMgaW50IGk4MTBfZnJlZWxpc3RfcHV0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fYnVmICpidWYpCiB7CiAJZHJtX2k4MTBfYnVmX3ByaXZfdCAqYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOwogCWludCB1c2VkOwpAQCAtMTIxLDcgKzEyMSw3IEBACiAJLmZhc3luYyA9IGRybV9mYXN5bmMsCiB9OwogCi1zdGF0aWMgaW50IGk4MTBfbWFwX2J1ZmZlcihzdHJ1Y3QgZHJtX2J1ZiAqIGJ1Ziwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCitzdGF0aWMgaW50IGk4MTBfbWFwX2J1ZmZlcihzdHJ1Y3QgZHJtX2J1ZiAqYnVmLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmlsZV9wcml2LT5taW5vci0+ZGV2OwogCWRybV9pODEwX2J1Zl9wcml2X3QgKmJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsKQEAgLTE1Miw3ICsxNTIsNyBAQAogCXJldHVybiByZXRjb2RlOwogfQogCi1zdGF0aWMgaW50IGk4MTBfdW5tYXBfYnVmZmVyKHN0cnVjdCBkcm1fYnVmICogYnVmKQorc3RhdGljIGludCBpODEwX3VubWFwX2J1ZmZlcihzdHJ1Y3QgZHJtX2J1ZiAqYnVmKQogewogCWRybV9pODEwX2J1Zl9wcml2X3QgKmJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsKIAlpbnQgcmV0Y29kZSA9IDA7CkBAIC0xNzIsNyArMTcyLDcgQEAKIAlyZXR1cm4gcmV0Y29kZTsKIH0KIAotc3RhdGljIGludCBpODEwX2RtYV9nZXRfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBkcm1faTgxMF9kbWFfdCAqIGQsCitzdGF0aWMgaW50IGk4MTBfZG1hX2dldF9idWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZHJtX2k4MTBfZG1hX3QgKmQsCiAJCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CiAJc3RydWN0IGRybV9idWYgKmJ1ZjsKQEAgLTIwMiw3ICsyMDIsNyBAQAogCXJldHVybiByZXRjb2RlOwogfQogCi1zdGF0aWMgaW50IGk4MTBfZG1hX2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgaW50IGk4MTBfZG1hX2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZV9kbWEgKmRtYSA9IGRldi0+ZG1hOwogCkBAIC0yMTgsOSArMjE4LDggQEAKIAkJZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9CiAJCSAgICAoZHJtX2k4MTBfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAKLQkJaWYgKGRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQpIHsKKwkJaWYgKGRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQpCiAJCQlkcm1fY29yZV9pb3JlbWFwZnJlZSgmZGV2X3ByaXYtPnJpbmcubWFwLCBkZXYpOwotCQl9CiAJCWlmIChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UpIHsKIAkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5wZGV2LCBQQUdFX1NJWkUsCiAJCQkJCSAgICBkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UsCkBAIC0yNDIsNyArMjQxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpODEwX3dhaXRfcmluZyhzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgaW50IG4pCitzdGF0aWMgaW50IGk4MTBfd2FpdF9yaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBuKQogewogCWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9pODEwX3JpbmdfYnVmZmVyX3QgKnJpbmcgPSAmKGRldl9wcml2LT5yaW5nKTsKQEAgLTI3MSwxMSArMjcwLDExIEBACiAJCXVkZWxheSgxKTsKIAl9CiAKLSAgICAgIG91dF93YWl0X3Jpbmc6CitvdXRfd2FpdF9yaW5nOgogCXJldHVybiBpdGVyczsKIH0KIAotc3RhdGljIHZvaWQgaTgxMF9rZXJuZWxfbG9zdF9jb250ZXh0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQorc3RhdGljIHZvaWQgaTgxMF9rZXJuZWxfbG9zdF9jb250ZXh0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX2k4MTBfcmluZ19idWZmZXJfdCAqcmluZyA9ICYoZGV2X3ByaXYtPnJpbmcpOwpAQCAtMjg3LDcgKzI4Niw3IEBACiAJCXJpbmctPnNwYWNlICs9IHJpbmctPlNpemU7CiB9CiAKLXN0YXRpYyBpbnQgaTgxMF9mcmVlbGlzdF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBkcm1faTgxMF9wcml2YXRlX3QgKiBkZXZfcHJpdikKK3N0YXRpYyBpbnQgaTgxMF9mcmVlbGlzdF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYpCiB7CiAJc3RydWN0IGRybV9kZXZpY2VfZG1hICpkbWEgPSBkZXYtPmRtYTsKIAlpbnQgbXlfaWR4ID0gMjQ7CkBAIC0zMjIsOSArMzIxLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpODEwX2RtYV9pbml0aWFsaXplKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LAotCQkJICAgICAgIGRybV9pODEwX3ByaXZhdGVfdCAqIGRldl9wcml2LAotCQkJICAgICAgIGRybV9pODEwX2luaXRfdCAqIGluaXQpCitzdGF0aWMgaW50IGk4MTBfZG1hX2luaXRpYWxpemUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBkcm1faTgxMF9wcml2YXRlX3QgKmRldl9wcml2LAorCQkJICAgICAgIGRybV9pODEwX2luaXRfdCAqaW5pdCkKIHsKIAlzdHJ1Y3QgZHJtX21hcF9saXN0ICpyX2xpc3Q7CiAJbWVtc2V0KGRldl9wcml2LCAwLCBzaXplb2YoZHJtX2k4MTBfcHJpdmF0ZV90KSk7CkBAIC00NjIsNyArNDYxLDcgQEAKICAqIFVzZSAndm9sYXRpbGUnICYgbG9jYWwgdmFyIHRtcCB0byBmb3JjZSB0aGUgZW1pdHRlZCB2YWx1ZXMgdG8gYmUKICAqIGlkZW50aWNhbCB0byB0aGUgdmVyaWZpZWQgb25lcy4KICAqLwotc3RhdGljIHZvaWQgaTgxMEVtaXRDb250ZXh0VmVyaWZpZWQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsCitzdGF0aWMgdm9pZCBpODEwRW1pdENvbnRleHRWZXJpZmllZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCSAgICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmNvZGUpCiB7CiAJZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC00OTUsNyArNDk0LDcgQEAKIAlBRFZBTkNFX0xQX1JJTkcoKTsKIH0KIAotc3RhdGljIHZvaWQgaTgxMEVtaXRUZXhWZXJpZmllZChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgdm9sYXRpbGUgdW5zaWduZWQgaW50ICpjb2RlKQorc3RhdGljIHZvaWQgaTgxMEVtaXRUZXhWZXJpZmllZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmNvZGUpCiB7CiAJZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IGksIGogPSAwOwpAQCAtNTI4LDcgKzUyNyw3IEBACiAKIC8qIE5lZWQgdG8gZG8gc29tZSBhZGRpdGlvbmFsIGNoZWNraW5nIHdoZW4gc2V0dGluZyB0aGUgZGVzdCBidWZmZXIuCiAgKi8KLXN0YXRpYyB2b2lkIGk4MTBFbWl0RGVzdFZlcmlmaWVkKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LAorc3RhdGljIHZvaWQgaTgxMEVtaXREZXN0VmVyaWZpZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgdm9sYXRpbGUgdW5zaWduZWQgaW50ICpjb2RlKQogewogCWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtNTYzLDcgKzU2Miw3IEBACiAJQURWQU5DRV9MUF9SSU5HKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGk4MTBFbWl0U3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgdm9pZCBpODEwRW1pdFN0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX2k4MTBfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwpAQCAtNTk0LDcgKzU5Myw3IEBACiAKIC8qIG5lZWQgdG8gdmVyaWZ5CiAgKi8KLXN0YXRpYyB2b2lkIGk4MTBfZG1hX2Rpc3BhdGNoX2NsZWFyKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBpbnQgZmxhZ3MsCitzdGF0aWMgdm9pZCBpODEwX2RtYV9kaXNwYXRjaF9jbGVhcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgZmxhZ3MsCiAJCQkJICAgIHVuc2lnbmVkIGludCBjbGVhcl9jb2xvciwKIAkJCQkgICAgdW5zaWduZWQgaW50IGNsZWFyX3p2YWwpCiB7CkBAIC02NjksNyArNjY4LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGk4MTBfZG1hX2Rpc3BhdGNoX3N3YXAoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgdm9pZCBpODEwX2RtYV9kaXNwYXRjaF9zd2FwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX2k4MTBfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwpAQCAtNzE1LDggKzcxNCw4IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBpODEwX2RtYV9kaXNwYXRjaF92ZXJ0ZXgoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsCi0JCQkJICAgICBzdHJ1Y3QgZHJtX2J1ZiAqIGJ1ZiwgaW50IGRpc2NhcmQsIGludCB1c2VkKQorc3RhdGljIHZvaWQgaTgxMF9kbWFfZGlzcGF0Y2hfdmVydGV4KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZHJtX2J1ZiAqYnVmLCBpbnQgZGlzY2FyZCwgaW50IHVzZWQpCiB7CiAJZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX2k4MTBfYnVmX3ByaXZfdCAqYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOwpAQCAtNzk1LDcgKzc5NCw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBpODEwX2RtYV9kaXNwYXRjaF9mbGlwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQorc3RhdGljIHZvaWQgaTgxMF9kbWFfZGlzcGF0Y2hfZmxpcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWludCBwaXRjaCA9IGRldl9wcml2LT5waXRjaDsKQEAgLTg0MSw3ICs4NDAsNyBAQAogCiB9CiAKLXN0YXRpYyB2b2lkIGk4MTBfZG1hX3F1aWVzY2VudChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK3N0YXRpYyB2b2lkIGk4MTBfZG1hX3F1aWVzY2VudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCVJJTkdfTE9DQUxTOwpAQCAtODU4LDcgKzg1Nyw3IEBACiAJaTgxMF93YWl0X3JpbmcoZGV2LCBkZXZfcHJpdi0+cmluZy5TaXplIC0gOCk7CiB9CiAKLXN0YXRpYyBpbnQgaTgxMF9mbHVzaF9xdWV1ZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK3N0YXRpYyBpbnQgaTgxMF9mbHVzaF9xdWV1ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1fZGV2aWNlX2RtYSAqZG1hID0gZGV2LT5kbWE7CkBAIC04OTEsNyArODkwLDcgQEAKIH0KIAogLyogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbG9jayBoZWxkICovCi1zdGF0aWMgdm9pZCBpODEwX3JlY2xhaW1fYnVmZmVycyhzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKK3N0YXRpYyB2b2lkIGk4MTBfcmVjbGFpbV9idWZmZXJzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCXN0cnVjdCBkcm1fZGV2aWNlX2RtYSAqZG1hID0gZGV2LT5kbWE7CkBAIC05NjksOSArOTY4LDggQEAKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCiAJLyogR0g6IFNvbWVvbmUncyBkb2luZyBuYXN0eSB0aGluZ3MuLi4gKi8KLQlpZiAoIWRldi0+ZGV2X3ByaXZhdGUpIHsKKwlpZiAoIWRldi0+ZGV2X3ByaXZhdGUpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KIAogCWk4MTBfZG1hX2Rpc3BhdGNoX2NsZWFyKGRldiwgY2xlYXItPmZsYWdzLAogCQkJCWNsZWFyLT5jbGVhcl9jb2xvciwgY2xlYXItPmNsZWFyX2RlcHRoKTsKQEAgLTEwMzksNyArMTAzNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGk4MTBfZG1hX2Rpc3BhdGNoX21jKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBzdHJ1Y3QgZHJtX2J1ZiAqIGJ1ZiwgaW50IHVzZWQsCitzdGF0aWMgdm9pZCBpODEwX2RtYV9kaXNwYXRjaF9tYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2J1ZiAqYnVmLCBpbnQgdXNlZCwKIAkJCQkgdW5zaWduZWQgaW50IGxhc3RfcmVuZGVyKQogewogCWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMTA1Myw5ICsxMDUxLDggQEAKIAlpODEwX2tlcm5lbF9sb3N0X2NvbnRleHQoZGV2KTsKIAogCXUgPSBjbXB4Y2hnKGJ1Zl9wcml2LT5pbl91c2UsIEk4MTBfQlVGX0NMSUVOVCwgSTgxMF9CVUZfSEFSRFdBUkUpOwotCWlmICh1ICE9IEk4MTBfQlVGX0NMSUVOVCkgeworCWlmICh1ICE9IEk4MTBfQlVGX0NMSUVOVCkKIAkJRFJNX0RFQlVHKCJNQyBmb3VuZCBidWZmZXIgdGhhdCBpc24ndCBtaW5lIVxuIik7Ci0JfQogCiAJaWYgKHVzZWQgPiA0ICogMTAyNCkKIAkJdXNlZCA9IDA7CkBAIC0xMTYwLDcgKzExNTcsNyBAQAogCiAJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKIAotCS8vVGVsbCB0aGUgb3ZlcmxheSB0byB1cGRhdGUKKwkvKiBUZWxsIHRoZSBvdmVybGF5IHRvIHVwZGF0ZSAqLwogCUk4MTBfV1JJVEUoMHgzMDAwMCwgZGV2X3ByaXYtPm92ZXJsYXlfcGh5c2ljYWwgfCAweDgwMDAwMDAwKTsKIAogCXJldHVybiAwOwpAQCAtMTE2OCw3ICsxMTY1LDcgQEAKIAogLyogTm90IHN1cmUgd2h5IHRoaXMgaXNuJ3Qgc2V0IGFsbCB0aGUgdGltZToKICAqLwotc3RhdGljIHZvaWQgaTgxMF9kb19pbml0X3BhZ2VmbGlwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQorc3RhdGljIHZvaWQgaTgxMF9kb19pbml0X3BhZ2VmbGlwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKQEAgLTExNzgsNyArMTE3NSw3IEBACiAJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBmX2N1cnJlbnRfcGFnZSA9IGRldl9wcml2LT5jdXJyZW50X3BhZ2U7CiB9CiAKLXN0YXRpYyBpbnQgaTgxMF9kb19jbGVhbnVwX3BhZ2VmbGlwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQorc3RhdGljIGludCBpODEwX2RvX2NsZWFudXBfcGFnZWZsaXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlkcm1faTgxMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIApAQCAtMTIxOCw0OSArMTIxNSw2MSBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGk4MTBfZHJpdmVyX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK3ZvaWQgaTgxMF9kcml2ZXJfbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJaTgxMF9kbWFfY2xlYW51cChkZXYpOwogfQogCi12b2lkIGk4MTBfZHJpdmVyX3ByZWNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3ZvaWQgaTgxMF9kcml2ZXJfcHJlY2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CiAJaWYgKGRldi0+ZGV2X3ByaXZhdGUpIHsKIAkJZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JCWlmIChkZXZfcHJpdi0+cGFnZV9mbGlwcGluZykgeworCQlpZiAoZGV2X3ByaXYtPnBhZ2VfZmxpcHBpbmcpCiAJCQlpODEwX2RvX2NsZWFudXBfcGFnZWZsaXAoZGV2KTsKLQkJfQogCX0KIH0KIAotdm9pZCBpODEwX2RyaXZlcl9yZWNsYWltX2J1ZmZlcnNfbG9ja2VkKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LAordm9pZCBpODEwX2RyaXZlcl9yZWNsYWltX2J1ZmZlcnNfbG9ja2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCWk4MTBfcmVjbGFpbV9idWZmZXJzKGRldiwgZmlsZV9wcml2KTsKIH0KIAotaW50IGk4MTBfZHJpdmVyX2RtYV9xdWllc2NlbnQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCitpbnQgaTgxMF9kcml2ZXJfZG1hX3F1aWVzY2VudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWk4MTBfZG1hX3F1aWVzY2VudChkZXYpOwogCXJldHVybiAwOwogfQogCisvKgorICogY2FsbCB0aGUgZHJtX2lvY3RsIHVuZGVyIHRoZSBiaWcga2VybmVsIGxvY2sgYmVjYXVzZQorICogdG8gbG9jayBhZ2FpbnN0IHRoZSBpODEwX21tYXBfYnVmZmVycyBmdW5jdGlvbi4KKyAqLworbG9uZyBpODEwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpbnQgcmV0OworCWxvY2tfa2VybmVsKCk7CisJcmV0ID0gZHJtX2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIHJldDsKK30KKwogc3RydWN0IGRybV9pb2N0bF9kZXNjIGk4MTBfaW9jdGxzW10gPSB7Ci0JRFJNX0lPQ1RMX0RFRihEUk1fSTgxMF9JTklULCBpODEwX2RtYV9pbml0LCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFkpLAotCURSTV9JT0NUTF9ERUYoRFJNX0k4MTBfVkVSVEVYLCBpODEwX2RtYV92ZXJ0ZXgsIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGKERSTV9JODEwX0NMRUFSLCBpODEwX2NsZWFyX2J1ZnMsIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGKERSTV9JODEwX0ZMVVNILCBpODEwX2ZsdXNoX2lvY3RsLCBEUk1fQVVUSCksCi0JRFJNX0lPQ1RMX0RFRihEUk1fSTgxMF9HRVRBR0UsIGk4MTBfZ2V0YWdlLCBEUk1fQVVUSCksCi0JRFJNX0lPQ1RMX0RFRihEUk1fSTgxMF9HRVRCVUYsIGk4MTBfZ2V0YnVmLCBEUk1fQVVUSCksCi0JRFJNX0lPQ1RMX0RFRihEUk1fSTgxMF9TV0FQLCBpODEwX3N3YXBfYnVmcywgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUYoRFJNX0k4MTBfQ09QWSwgaTgxMF9jb3B5YnVmLCBEUk1fQVVUSCksCi0JRFJNX0lPQ1RMX0RFRihEUk1fSTgxMF9ET0NPUFksIGk4MTBfZG9jb3B5LCBEUk1fQVVUSCksCi0JRFJNX0lPQ1RMX0RFRihEUk1fSTgxMF9PVjBJTkZPLCBpODEwX292MF9pbmZvLCBEUk1fQVVUSCksCi0JRFJNX0lPQ1RMX0RFRihEUk1fSTgxMF9GU1RBVFVTLCBpODEwX2ZzdGF0dXMsIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGKERSTV9JODEwX09WMEZMSVAsIGk4MTBfb3YwX2ZsaXAsIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGKERSTV9JODEwX01DLCBpODEwX2RtYV9tYywgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKLQlEUk1fSU9DVExfREVGKERSTV9JODEwX1JTVEFUVVMsIGk4MTBfcnN0YXR1cywgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUYoRFJNX0k4MTBfRkxJUCwgaTgxMF9mbGlwX2J1ZnMsIERSTV9BVVRIKQorCURSTV9JT0NUTF9ERUYoRFJNX0k4MTBfSU5JVCwgaTgxMF9kbWFfaW5pdCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTgxMF9WRVJURVgsIGk4MTBfZG1hX3ZlcnRleCwgRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9JODEwX0NMRUFSLCBpODEwX2NsZWFyX2J1ZnMsIERSTV9BVVRIfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTgxMF9GTFVTSCwgaTgxMF9mbHVzaF9pb2N0bCwgRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9JODEwX0dFVEFHRSwgaTgxMF9nZXRhZ2UsIERSTV9BVVRIfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTgxMF9HRVRCVUYsIGk4MTBfZ2V0YnVmLCBEUk1fQVVUSHxEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k4MTBfU1dBUCwgaTgxMF9zd2FwX2J1ZnMsIERSTV9BVVRIfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTgxMF9DT1BZLCBpODEwX2NvcHlidWYsIERSTV9BVVRIfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTgxMF9ET0NPUFksIGk4MTBfZG9jb3B5LCBEUk1fQVVUSHxEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k4MTBfT1YwSU5GTywgaTgxMF9vdjBfaW5mbywgRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9JODEwX0ZTVEFUVVMsIGk4MTBfZnN0YXR1cywgRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9JODEwX09WMEZMSVAsIGk4MTBfb3YwX2ZsaXAsIERSTV9BVVRIfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTgxMF9NQywgaTgxMF9kbWFfbWMsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWXxEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k4MTBfUlNUQVRVUywgaTgxMF9yc3RhdHVzLCBEUk1fQVVUSHxEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k4MTBfRkxJUCwgaTgxMF9mbGlwX2J1ZnMsIERSTV9BVVRIfERSTV9VTkxPQ0tFRCksCiB9OwogCiBpbnQgaTgxMF9tYXhfaW9jdGwgPSBEUk1fQVJSQVlfU0laRShpODEwX2lvY3Rscyk7CkBAIC0xMjc2LDcgKzEyODUsNyBAQAogICogXHJldHVybnMKICAqIEEgdmFsdWUgb2YgMSBpcyBhbHdheXMgcmV0dXJlZCB0byBpbmRpY3RhdGUgZXZlcnkgaTgxMCBpcyBBR1AuCiAgKi8KLWludCBpODEwX2RyaXZlcl9kZXZpY2VfaXNfYWdwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQoraW50IGk4MTBfZHJpdmVyX2RldmljZV9pc19hZ3Aoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pODEwL2k4MTBfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTgxMC9pODEwX2Rydi5jCmluZGV4IGMxZTAyNzUuLmI0MjUwYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pODEwL2k4MTBfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k4MTAvaTgxMF9kcnYuYwpAQCAtNTksNyArNTksNyBAQAogCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCSAub3BlbiA9IGRybV9vcGVuLAogCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKKwkJIC51bmxvY2tlZF9pb2N0bCA9IGk4MTBfaW9jdGwsCiAJCSAubW1hcCA9IGRybV9tbWFwLAogCQkgLnBvbGwgPSBkcm1fcG9sbCwKIAkJIC5mYXN5bmMgPSBkcm1fZmFzeW5jLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k4MTAvaTgxMF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pODEwL2k4MTBfZHJ2LmgKaW5kZXggMjFlMjY5MS4uYzkzMzlmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k4MTAvaTgxMF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTgxMC9pODEwX2Rydi5oCkBAIC0xMTUsNTYgKzExNSw1OSBAQAogfSBkcm1faTgxMF9wcml2YXRlX3Q7CiAKIAkJCQkvKiBpODEwX2RtYS5jICovCi1leHRlcm4gaW50IGk4MTBfZHJpdmVyX2RtYV9xdWllc2NlbnQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwotZXh0ZXJuIHZvaWQgaTgxMF9kcml2ZXJfcmVjbGFpbV9idWZmZXJzX2xvY2tlZChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKK2V4dGVybiBpbnQgaTgxMF9kcml2ZXJfZG1hX3F1aWVzY2VudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGk4MTBfZHJpdmVyX3JlY2xhaW1fYnVmZmVyc19sb2NrZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiBpbnQgaTgxMF9kcml2ZXJfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKLWV4dGVybiB2b2lkIGk4MTBfZHJpdmVyX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7Ci1leHRlcm4gdm9pZCBpODEwX2RyaXZlcl9wcmVjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKK2V4dGVybiB2b2lkIGk4MTBfZHJpdmVyX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGk4MTBfZHJpdmVyX3ByZWNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKLWV4dGVybiB2b2lkIGk4MTBfZHJpdmVyX3JlY2xhaW1fYnVmZmVyc19sb2NrZWQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsCitleHRlcm4gdm9pZCBpODEwX2RyaXZlcl9yZWNsYWltX2J1ZmZlcnNfbG9ja2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7Ci1leHRlcm4gaW50IGk4MTBfZHJpdmVyX2RldmljZV9pc19hZ3Aoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOworZXh0ZXJuIGludCBpODEwX2RyaXZlcl9kZXZpY2VfaXNfYWdwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCitleHRlcm4gbG9uZyBpODEwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBleHRlcm4gc3RydWN0IGRybV9pb2N0bF9kZXNjIGk4MTBfaW9jdGxzW107CiBleHRlcm4gaW50IGk4MTBfbWF4X2lvY3RsOwogCiAjZGVmaW5lIEk4MTBfQkFTRShyZWcpCQkoKHVuc2lnbmVkIGxvbmcpIFwKIAkJCQlkZXZfcHJpdi0+bW1pb19tYXAtPmhhbmRsZSkKICNkZWZpbmUgSTgxMF9BRERSKHJlZykJCShJODEwX0JBU0UocmVnKSArIHJlZykKLSNkZWZpbmUgSTgxMF9ERVJFRihyZWcpCQkqKF9fdm9sYXRpbGVfXyBpbnQgKilJODEwX0FERFIocmVnKQorI2RlZmluZSBJODEwX0RFUkVGKHJlZykJCSgqKF9fdm9sYXRpbGVfXyBpbnQgKilJODEwX0FERFIocmVnKSkKICNkZWZpbmUgSTgxMF9SRUFEKHJlZykJCUk4MTBfREVSRUYocmVnKQotI2RlZmluZSBJODEwX1dSSVRFKHJlZyx2YWwpCWRvIHsgSTgxMF9ERVJFRihyZWcpID0gdmFsOyB9IHdoaWxlICgwKQotI2RlZmluZSBJODEwX0RFUkVGMTYocmVnKQkqKF9fdm9sYXRpbGVfXyB1MTYgKilJODEwX0FERFIocmVnKQorI2RlZmluZSBJODEwX1dSSVRFKHJlZywgdmFsKQlkbyB7IEk4MTBfREVSRUYocmVnKSA9IHZhbDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgSTgxMF9ERVJFRjE2KHJlZykJKCooX192b2xhdGlsZV9fIHUxNiAqKUk4MTBfQUREUihyZWcpKQogI2RlZmluZSBJODEwX1JFQUQxNihyZWcpCUk4MTBfREVSRUYxNihyZWcpCi0jZGVmaW5lIEk4MTBfV1JJVEUxNihyZWcsdmFsKQlkbyB7IEk4MTBfREVSRUYxNihyZWcpID0gdmFsOyB9IHdoaWxlICgwKQorI2RlZmluZSBJODEwX1dSSVRFMTYocmVnLCB2YWwpCWRvIHsgSTgxMF9ERVJFRjE2KHJlZykgPSB2YWw7IH0gd2hpbGUgKDApCiAKICNkZWZpbmUgSTgxMF9WRVJCT1NFIDAKICNkZWZpbmUgUklOR19MT0NBTFMJdW5zaWduZWQgaW50IG91dHJpbmcsIHJpbmdtYXNrOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICB2b2xhdGlsZSBjaGFyICp2aXJ0OworCQkJdm9sYXRpbGUgY2hhciAqdmlydDsKIAotI2RlZmluZSBCRUdJTl9MUF9SSU5HKG4pIGRvIHsJCQkJCQlcCi0JaWYgKEk4MTBfVkVSQk9TRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJRFJNX0RFQlVHKCJCRUdJTl9MUF9SSU5HKCVkKVxuIiwgbik7CQkJXAotCWlmIChkZXZfcHJpdi0+cmluZy5zcGFjZSA8IG4qNCkJCQkJCVwKLQkJaTgxMF93YWl0X3JpbmcoZGV2LCBuKjQpOwkJCQlcCi0JZGV2X3ByaXYtPnJpbmcuc3BhY2UgLT0gbio0OwkJCQkJXAotCW91dHJpbmcgPSBkZXZfcHJpdi0+cmluZy50YWlsOwkJCQkJXAotCXJpbmdtYXNrID0gZGV2X3ByaXYtPnJpbmcudGFpbF9tYXNrOwkJCQlcCi0JdmlydCA9IGRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQ7CQkJCVwKKyNkZWZpbmUgQkVHSU5fTFBfUklORyhuKSBkbyB7CQkJCQlcCisJaWYgKEk4MTBfVkVSQk9TRSkJCQkJCVwKKwkJRFJNX0RFQlVHKCJCRUdJTl9MUF9SSU5HKCVkKVxuIiwgbik7CQlcCisJaWYgKGRldl9wcml2LT5yaW5nLnNwYWNlIDwgbio0KQkJCQlcCisJCWk4MTBfd2FpdF9yaW5nKGRldiwgbio0KTsJCQlcCisJZGV2X3ByaXYtPnJpbmcuc3BhY2UgLT0gbio0OwkJCQlcCisJb3V0cmluZyA9IGRldl9wcml2LT5yaW5nLnRhaWw7CQkJCVwKKwlyaW5nbWFzayA9IGRldl9wcml2LT5yaW5nLnRhaWxfbWFzazsJCQlcCisJdmlydCA9IGRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQ7CQkJXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBBRFZBTkNFX0xQX1JJTkcoKSBkbyB7CQkJCSAgICAgICAgXAotCWlmIChJODEwX1ZFUkJPU0UpIERSTV9ERUJVRygiQURWQU5DRV9MUF9SSU5HXG4iKTsJXAorI2RlZmluZSBBRFZBTkNFX0xQX1JJTkcoKSBkbyB7CQkJCQlcCisJaWYgKEk4MTBfVkVSQk9TRSkJCQkJCVwKKwkJRFJNX0RFQlVHKCJBRFZBTkNFX0xQX1JJTkdcbiIpOwkJCVwKIAlkZXZfcHJpdi0+cmluZy50YWlsID0gb3V0cmluZzsJCQkJXAotCUk4MTBfV1JJVEUoTFBfUklORyArIFJJTkdfVEFJTCwgb3V0cmluZyk7CSAgICAgICAgXAotfSB3aGlsZSgwKQorCUk4MTBfV1JJVEUoTFBfUklORyArIFJJTkdfVEFJTCwgb3V0cmluZyk7CQlcCit9IHdoaWxlICgwKQogCi0jZGVmaW5lIE9VVF9SSU5HKG4pIGRvIHsJCQkJICAgICAgICAgICAgICAgIFwKLQlpZiAoSTgxMF9WRVJCT1NFKSBEUk1fREVCVUcoIiAgIE9VVF9SSU5HICV4XG4iLCAoaW50KShuKSk7CVwKLQkqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSh2aXJ0ICsgb3V0cmluZykgPSBuOwkgICAgICAgICAgICAgICAgXAotCW91dHJpbmcgKz0gNDsJCQkJCSAgICAgICAgICAgICAgICBcCi0Jb3V0cmluZyAmPSByaW5nbWFzazsJCQkgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIE9VVF9SSU5HKG4pIGRvIHsJCQkJCVwKKwlpZiAoSTgxMF9WRVJCT1NFKQkJCQkJXAorCQlEUk1fREVCVUcoIiAgIE9VVF9SSU5HICV4XG4iLCAoaW50KShuKSk7CVwKKwkqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSh2aXJ0ICsgb3V0cmluZykgPSBuOwkJXAorCW91dHJpbmcgKz0gNDsJCQkJCQlcCisJb3V0cmluZyAmPSByaW5nbWFzazsJCQkJCVwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgR0ZYX09QX1VTRVJfSU5URVJSVVBUCQkoKDA8PDI5KXwoMjw8MjMpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k4MzAvaTgzMF9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pODMwL2k4MzBfZG1hLmMKaW5kZXggNjU3NTlhOS4uNTE2ODg2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k4MzAvaTgzMF9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTgzMC9pODMwX2RtYS5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiaTgzMF9kcm0uaCIKICNpbmNsdWRlICJpODMwX2Rydi5oIgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgkvKiBGb3IgdGFzayBxdWV1ZSBzdXBwb3J0ICovCisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC02Miw5ICs2Myw4IEBACiAJCS8qIEluIHVzZSBpcyBhbHJlYWR5IGEgcG9pbnRlciAqLwogCQl1c2VkID0gY21weGNoZyhidWZfcHJpdi0+aW5fdXNlLCBJODMwX0JVRl9GUkVFLAogCQkJICAgICAgIEk4MzBfQlVGX0NMSUVOVCk7Ci0JCWlmICh1c2VkID09IEk4MzBfQlVGX0ZSRUUpIHsKKwkJaWYgKHVzZWQgPT0gSTgzMF9CVUZfRlJFRSkKIAkJCXJldHVybiBidWY7Ci0JCX0KIAl9CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC03Myw3ICs3Myw3IEBACiAgKiB5ZXQsIHRoZSBoYXJkd2FyZSB1cGRhdGVzIGluIHVzZSBmb3IgdXMgb25jZSBpdHMgb24gdGhlIHJpbmcgYnVmZmVyLgogICovCiAKLXN0YXRpYyBpbnQgaTgzMF9mcmVlbGlzdF9wdXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBkcm1fYnVmICogYnVmKQorc3RhdGljIGludCBpODMwX2ZyZWVsaXN0X3B1dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2J1ZiAqYnVmKQogewogCWRybV9pODMwX2J1Zl9wcml2X3QgKmJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsKIAlpbnQgdXNlZDsKQEAgLTEyMyw3ICsxMjMsNyBAQAogCS5mYXN5bmMgPSBkcm1fZmFzeW5jLAogfTsKIAotc3RhdGljIGludCBpODMwX21hcF9idWZmZXIoc3RydWN0IGRybV9idWYgKiBidWYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQorc3RhdGljIGludCBpODMwX21hcF9idWZmZXIoc3RydWN0IGRybV9idWYgKmJ1Ziwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZpbGVfcHJpdi0+bWlub3ItPmRldjsKIAlkcm1faTgzMF9idWZfcHJpdl90ICpidWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7CkBAIC0xNTYsNyArMTU2LDcgQEAKIAlyZXR1cm4gcmV0Y29kZTsKIH0KIAotc3RhdGljIGludCBpODMwX3VubWFwX2J1ZmZlcihzdHJ1Y3QgZHJtX2J1ZiAqIGJ1ZikKK3N0YXRpYyBpbnQgaTgzMF91bm1hcF9idWZmZXIoc3RydWN0IGRybV9idWYgKmJ1ZikKIHsKIAlkcm1faTgzMF9idWZfcHJpdl90ICpidWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7CiAJaW50IHJldGNvZGUgPSAwOwpAQCAtMTc2LDcgKzE3Niw3IEBACiAJcmV0dXJuIHJldGNvZGU7CiB9CiAKLXN0YXRpYyBpbnQgaTgzMF9kbWFfZ2V0X2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgZHJtX2k4MzBfZG1hX3QgKiBkLAorc3RhdGljIGludCBpODMwX2RtYV9nZXRfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGRybV9pODMwX2RtYV90ICpkLAogCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCXN0cnVjdCBkcm1fYnVmICpidWY7CkBAIC0yMDYsNyArMjA2LDcgQEAKIAlyZXR1cm4gcmV0Y29kZTsKIH0KIAotc3RhdGljIGludCBpODMwX2RtYV9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQorc3RhdGljIGludCBpODMwX2RtYV9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9kZXZpY2VfZG1hICpkbWEgPSBkZXYtPmRtYTsKIApAQCAtMjIyLDkgKzIyMiw4IEBACiAJCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPQogCQkgICAgKGRybV9pODMwX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCi0JCWlmIChkZXZfcHJpdi0+cmluZy52aXJ0dWFsX3N0YXJ0KSB7CisJCWlmIChkZXZfcHJpdi0+cmluZy52aXJ0dWFsX3N0YXJ0KQogCQkJZHJtX2NvcmVfaW9yZW1hcGZyZWUoJmRldl9wcml2LT5yaW5nLm1hcCwgZGV2KTsKLQkJfQogCQlpZiAoZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlKSB7CiAJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGRldiwgUEFHRV9TSVpFLAogCQkJCQkgICAgZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlLApAQCAtMjQ2LDcgKzI0NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBpODMwX3dhaXRfcmluZyhzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgaW50IG4sIGNvbnN0IGNoYXIgKmNhbGxlcikKK2ludCBpODMwX3dhaXRfcmluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgbiwgY29uc3QgY2hhciAqY2FsbGVyKQogewogCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9pODMwX3JpbmdfYnVmZmVyX3QgKnJpbmcgPSAmKGRldl9wcml2LT5yaW5nKTsKQEAgLTI3NiwxMSArMjc1LDExIEBACiAJCWRldl9wcml2LT5zYXJlYV9wcml2LT5wZXJmX2JveGVzIHw9IEk4MzBfQk9YX1dBSVQ7CiAJfQogCi0gICAgICBvdXRfd2FpdF9yaW5nOgorb3V0X3dhaXRfcmluZzoKIAlyZXR1cm4gaXRlcnM7CiB9CiAKLXN0YXRpYyB2b2lkIGk4MzBfa2VybmVsX2xvc3RfY29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK3N0YXRpYyB2b2lkIGk4MzBfa2VybmVsX2xvc3RfY29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9pODMwX3JpbmdfYnVmZmVyX3QgKnJpbmcgPSAmKGRldl9wcml2LT5yaW5nKTsKQEAgLTI5NSw3ICsyOTQsNyBAQAogCQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGVyZl9ib3hlcyB8PSBJODMwX0JPWF9SSU5HX0VNUFRZOwogfQogCi1zdGF0aWMgaW50IGk4MzBfZnJlZWxpc3RfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgZHJtX2k4MzBfcHJpdmF0ZV90ICogZGV2X3ByaXYpCitzdGF0aWMgaW50IGk4MzBfZnJlZWxpc3RfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBkcm1faTgzMF9wcml2YXRlX3QgKmRldl9wcml2KQogewogCXN0cnVjdCBkcm1fZGV2aWNlX2RtYSAqZG1hID0gZGV2LT5kbWE7CiAJaW50IG15X2lkeCA9IDM2OwpAQCAtMzI5LDkgKzMyOCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaTgzMF9kbWFfaW5pdGlhbGl6ZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKLQkJCSAgICAgICBkcm1faTgzMF9wcml2YXRlX3QgKiBkZXZfcHJpdiwKLQkJCSAgICAgICBkcm1faTgzMF9pbml0X3QgKiBpbml0KQorc3RhdGljIGludCBpODMwX2RtYV9pbml0aWFsaXplKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgICAgZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiwKKwkJCSAgICAgICBkcm1faTgzMF9pbml0X3QgKmluaXQpCiB7CiAJc3RydWN0IGRybV9tYXBfbGlzdCAqcl9saXN0OwogCkBAIC00ODIsNyArNDgxLDcgQEAKIC8qIE1vc3QgZWZmaWNpZW50IHdheSB0byB2ZXJpZnkgc3RhdGUgZm9yIHRoZSBpODMwIGlzIGFzIGl0IGlzCiAgKiBlbWl0dGVkLiAgTm9uLWNvbmZvcm1hbnQgc3RhdGUgaXMgc2lsZW50bHkgZHJvcHBlZC4KICAqLwotc3RhdGljIHZvaWQgaTgzMEVtaXRDb250ZXh0VmVyaWZpZWQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqY29kZSkKK3N0YXRpYyB2b2lkIGk4MzBFbWl0Q29udGV4dFZlcmlmaWVkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCAqY29kZSkKIHsKIAlkcm1faTgzMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgaSwgaiA9IDA7CkBAIC01MjcsNyArNTI2LDcgQEAKIAlBRFZBTkNFX0xQX1JJTkcoKTsKIH0KIAotc3RhdGljIHZvaWQgaTgzMEVtaXRUZXhWZXJpZmllZChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICpjb2RlKQorc3RhdGljIHZvaWQgaTgzMEVtaXRUZXhWZXJpZmllZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKmNvZGUpCiB7CiAJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IGksIGogPSAwOwpAQCAtNTYxLDcgKzU2MCw3IEBACiAJCXByaW50aygicmVqZWN0ZWQgcGFja2V0ICV4XG4iLCBjb2RlWzBdKTsKIH0KIAotc3RhdGljIHZvaWQgaTgzMEVtaXRUZXhCbGVuZFZlcmlmaWVkKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LAorc3RhdGljIHZvaWQgaTgzMEVtaXRUZXhCbGVuZFZlcmlmaWVkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgKmNvZGUsIHVuc2lnbmVkIGludCBudW0pCiB7CiAJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC01ODYsNyArNTg1LDcgQEAKIAlBRFZBTkNFX0xQX1JJTkcoKTsKIH0KIAotc3RhdGljIHZvaWQgaTgzMEVtaXRUZXhQYWxldHRlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LAorc3RhdGljIHZvaWQgaTgzMEVtaXRUZXhQYWxldHRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkgICAgICAgdW5zaWduZWQgaW50ICpwYWxldHRlLCBpbnQgbnVtYmVyLCBpbnQgaXNfc2hhcmVkKQogewogCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtNjAzLDkgKzYwMiw4IEBACiAJfSBlbHNlIHsKIAkJT1VUX1JJTkcoQ01EX09QX01BUF9QQUxFVFRFX0xPQUQgfCBNQVBfUEFMRVRURV9OVU0obnVtYmVyKSk7CiAJfQotCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKIAkJT1VUX1JJTkcocGFsZXR0ZVtpXSk7Ci0JfQogCU9VVF9SSU5HKDApOwogCS8qIEtXOiAgV0hFUkUgSVMgVEhFIEFEVkFOQ0VfTFBfUklORz8gIFRoaXMgaXMgZWZmZWN0aXZlbHkgYSBub29wIQogCSAqLwpAQCAtNjEzLDcgKzYxMSw3IEBACiAKIC8qIE5lZWQgdG8gZG8gc29tZSBhZGRpdGlvbmFsIGNoZWNraW5nIHdoZW4gc2V0dGluZyB0aGUgZGVzdCBidWZmZXIuCiAgKi8KLXN0YXRpYyB2b2lkIGk4MzBFbWl0RGVzdFZlcmlmaWVkKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKmNvZGUpCitzdGF0aWMgdm9pZCBpODMwRW1pdERlc3RWZXJpZmllZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKmNvZGUpCiB7CiAJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdW5zaWduZWQgaW50IHRtcDsKQEAgLTY3NCw3ICs2NzIsNyBAQAogCUFEVkFOQ0VfTFBfUklORygpOwogfQogCi1zdGF0aWMgdm9pZCBpODMwRW1pdFN0aXBwbGVWZXJpZmllZChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICpjb2RlKQorc3RhdGljIHZvaWQgaTgzMEVtaXRTdGlwcGxlVmVyaWZpZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICpjb2RlKQogewogCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCVJJTkdfTE9DQUxTOwpAQCAtNjg1LDcgKzY4Myw3IEBACiAJQURWQU5DRV9MUF9SSU5HKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGk4MzBFbWl0U3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgdm9pZCBpODMwRW1pdFN0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX2k4MzBfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwpAQCAtNzg4LDcgKzc4Niw3IEBACiAgKiBQZXJmb3JtYW5jZSBtb25pdG9yaW5nIGZ1bmN0aW9ucwogICovCiAKLXN0YXRpYyB2b2lkIGk4MzBfZmlsbF9ib3goc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsCitzdGF0aWMgdm9pZCBpODMwX2ZpbGxfYm94KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkgIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBpbnQgciwgaW50IGcsIGludCBiKQogewogCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtODE2LDE3ICs4MTQsMTYgQEAKIAlPVVRfUklORygoeSA8PCAxNikgfCB4KTsKIAlPVVRfUklORygoKHkgKyBoKSA8PCAxNikgfCAoeCArIHcpKTsKIAotCWlmIChkZXZfcHJpdi0+Y3VycmVudF9wYWdlID09IDEpIHsKKwlpZiAoZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSA9PSAxKQogCQlPVVRfUklORyhkZXZfcHJpdi0+ZnJvbnRfb2Zmc2V0KTsKLQl9IGVsc2UgeworCWVsc2UKIAkJT1VUX1JJTkcoZGV2X3ByaXYtPmJhY2tfb2Zmc2V0KTsKLQl9CiAKIAlPVVRfUklORyhjb2xvcik7CiAJQURWQU5DRV9MUF9SSU5HKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGk4MzBfY3BfcGVyZm9ybWFuY2VfYm94ZXMoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgdm9pZCBpODMwX2NwX3BlcmZvcm1hbmNlX2JveGVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKQEAgLTg3MSw3ICs4NjgsNyBAQAogCWRldl9wcml2LT5zYXJlYV9wcml2LT5wZXJmX2JveGVzID0gMDsKIH0KIAotc3RhdGljIHZvaWQgaTgzMF9kbWFfZGlzcGF0Y2hfY2xlYXIoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIGludCBmbGFncywKK3N0YXRpYyB2b2lkIGk4MzBfZG1hX2Rpc3BhdGNoX2NsZWFyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBmbGFncywKIAkJCQkgICAgdW5zaWduZWQgaW50IGNsZWFyX2NvbG9yLAogCQkJCSAgICB1bnNpZ25lZCBpbnQgY2xlYXJfenZhbCwKIAkJCQkgICAgdW5zaWduZWQgaW50IGNsZWFyX2RlcHRobWFzaykKQEAgLTk2Niw3ICs5NjMsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgaTgzMF9kbWFfZGlzcGF0Y2hfc3dhcChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK3N0YXRpYyB2b2lkIGk4MzBfZG1hX2Rpc3BhdGNoX3N3YXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlkcm1faTgzMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1faTgzMF9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CkBAIC0xMDM2LDcgKzEwMzMsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgaTgzMF9kbWFfZGlzcGF0Y2hfZmxpcChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK3N0YXRpYyB2b2lkIGk4MzBfZG1hX2Rpc3BhdGNoX2ZsaXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlkcm1faTgzMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlSSU5HX0xPQ0FMUzsKQEAgLTEwNzksOCArMTA3Niw4IEBACiAJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBmX2N1cnJlbnRfcGFnZSA9IGRldl9wcml2LT5jdXJyZW50X3BhZ2U7CiB9CiAKLXN0YXRpYyB2b2lkIGk4MzBfZG1hX2Rpc3BhdGNoX3ZlcnRleChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKLQkJCQkgICAgIHN0cnVjdCBkcm1fYnVmICogYnVmLCBpbnQgZGlzY2FyZCwgaW50IHVzZWQpCitzdGF0aWMgdm9pZCBpODMwX2RtYV9kaXNwYXRjaF92ZXJ0ZXgoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkcm1fYnVmICpidWYsIGludCBkaXNjYXJkLCBpbnQgdXNlZCkKIHsKIAlkcm1faTgzMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1faTgzMF9idWZfcHJpdl90ICpidWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7CkBAIC0xMTAwLDkgKzEwOTcsOCBAQAogCWlmIChkaXNjYXJkKSB7CiAJCXUgPSBjbXB4Y2hnKGJ1Zl9wcml2LT5pbl91c2UsIEk4MzBfQlVGX0NMSUVOVCwKIAkJCSAgICBJODMwX0JVRl9IQVJEV0FSRSk7Ci0JCWlmICh1ICE9IEk4MzBfQlVGX0NMSUVOVCkgeworCQlpZiAodSAhPSBJODMwX0JVRl9DTElFTlQpCiAJCQlEUk1fREVCVUcoInh4eHggMlxuIik7Ci0JCX0KIAl9CiAKIAlpZiAodXNlZCA+IDQgKiAxMDIzKQpAQCAtMTE5MSw3ICsxMTg3LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGk4MzBfZG1hX3F1aWVzY2VudChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK3N0YXRpYyB2b2lkIGk4MzBfZG1hX3F1aWVzY2VudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCVJJTkdfTE9DQUxTOwpAQCAtMTIwOCw3ICsxMjA0LDcgQEAKIAlpODMwX3dhaXRfcmluZyhkZXYsIGRldl9wcml2LT5yaW5nLlNpemUgLSA4LCBfX2Z1bmNfXyk7CiB9CiAKLXN0YXRpYyBpbnQgaTgzMF9mbHVzaF9xdWV1ZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK3N0YXRpYyBpbnQgaTgzMF9mbHVzaF9xdWV1ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1fZGV2aWNlX2RtYSAqZG1hID0gZGV2LT5kbWE7CkBAIC0xMjQxLDcgKzEyMzcsNyBAQAogfQogCiAvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBsb2NrIGhlbGQgKi8KLXN0YXRpYyB2b2lkIGk4MzBfcmVjbGFpbV9idWZmZXJzKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3N0YXRpYyB2b2lkIGk4MzBfcmVjbGFpbV9idWZmZXJzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCXN0cnVjdCBkcm1fZGV2aWNlX2RtYSAqZG1hID0gZGV2LT5kbWE7CiAJaW50IGk7CkBAIC0xMzE2LDkgKzEzMTIsOCBAQAogCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CiAKIAkvKiBHSDogU29tZW9uZSdzIGRvaW5nIG5hc3R5IHRoaW5ncy4uLiAqLwotCWlmICghZGV2LT5kZXZfcHJpdmF0ZSkgeworCWlmICghZGV2LT5kZXZfcHJpdmF0ZSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCiAJaTgzMF9kbWFfZGlzcGF0Y2hfY2xlYXIoZGV2LCBjbGVhci0+ZmxhZ3MsCiAJCQkJY2xlYXItPmNsZWFyX2NvbG9yLApAQCAtMTMzOSw3ICsxMzM0LDcgQEAKIAogLyogTm90IHN1cmUgd2h5IHRoaXMgaXNuJ3Qgc2V0IGFsbCB0aGUgdGltZToKICAqLwotc3RhdGljIHZvaWQgaTgzMF9kb19pbml0X3BhZ2VmbGlwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQorc3RhdGljIHZvaWQgaTgzMF9kb19pbml0X3BhZ2VmbGlwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKQEAgLTEzNDksNyArMTM0NCw3IEBACiAJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBmX2N1cnJlbnRfcGFnZSA9IGRldl9wcml2LT5jdXJyZW50X3BhZ2U7CiB9CiAKLXN0YXRpYyBpbnQgaTgzMF9kb19jbGVhbnVwX3BhZ2VmbGlwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQorc3RhdGljIGludCBpODMwX2RvX2NsZWFudXBfcGFnZWZsaXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlkcm1faTgzMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIApAQCAtMTQ5MCw0NyArMTQ4NSw1OSBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGk4MzBfZHJpdmVyX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK3ZvaWQgaTgzMF9kcml2ZXJfbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJaTgzMF9kbWFfY2xlYW51cChkZXYpOwogfQogCi12b2lkIGk4MzBfZHJpdmVyX3ByZWNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3ZvaWQgaTgzMF9kcml2ZXJfcHJlY2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CiAJaWYgKGRldi0+ZGV2X3ByaXZhdGUpIHsKIAkJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JCWlmIChkZXZfcHJpdi0+cGFnZV9mbGlwcGluZykgeworCQlpZiAoZGV2X3ByaXYtPnBhZ2VfZmxpcHBpbmcpCiAJCQlpODMwX2RvX2NsZWFudXBfcGFnZWZsaXAoZGV2KTsKLQkJfQogCX0KIH0KIAotdm9pZCBpODMwX2RyaXZlcl9yZWNsYWltX2J1ZmZlcnNfbG9ja2VkKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3ZvaWQgaTgzMF9kcml2ZXJfcmVjbGFpbV9idWZmZXJzX2xvY2tlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKIAlpODMwX3JlY2xhaW1fYnVmZmVycyhkZXYsIGZpbGVfcHJpdik7CiB9CiAKLWludCBpODMwX2RyaXZlcl9kbWFfcXVpZXNjZW50KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQoraW50IGk4MzBfZHJpdmVyX2RtYV9xdWllc2NlbnQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlpODMwX2RtYV9xdWllc2NlbnQoZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIGNhbGwgdGhlIGRybV9pb2N0bCB1bmRlciB0aGUgYmlnIGtlcm5lbCBsb2NrIGJlY2F1c2UKKyAqIHRvIGxvY2sgYWdhaW5zdCB0aGUgaTgzMF9tbWFwX2J1ZmZlcnMgZnVuY3Rpb24uCisgKi8KK2xvbmcgaTgzMF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IHJldDsKKwlsb2NrX2tlcm5lbCgpOworCXJldCA9IGRybV9pb2N0bChmaWxlLCBjbWQsIGFyZyk7CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiByZXQ7Cit9CisKIHN0cnVjdCBkcm1faW9jdGxfZGVzYyBpODMwX2lvY3Rsc1tdID0gewotCURSTV9JT0NUTF9ERUYoRFJNX0k4MzBfSU5JVCwgaTgzMF9kbWFfaW5pdCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKLQlEUk1fSU9DVExfREVGKERSTV9JODMwX1ZFUlRFWCwgaTgzMF9kbWFfdmVydGV4LCBEUk1fQVVUSCksCi0JRFJNX0lPQ1RMX0RFRihEUk1fSTgzMF9DTEVBUiwgaTgzMF9jbGVhcl9idWZzLCBEUk1fQVVUSCksCi0JRFJNX0lPQ1RMX0RFRihEUk1fSTgzMF9GTFVTSCwgaTgzMF9mbHVzaF9pb2N0bCwgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUYoRFJNX0k4MzBfR0VUQUdFLCBpODMwX2dldGFnZSwgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUYoRFJNX0k4MzBfR0VUQlVGLCBpODMwX2dldGJ1ZiwgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUYoRFJNX0k4MzBfU1dBUCwgaTgzMF9zd2FwX2J1ZnMsIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGKERSTV9JODMwX0NPUFksIGk4MzBfY29weWJ1ZiwgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUYoRFJNX0k4MzBfRE9DT1BZLCBpODMwX2RvY29weSwgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUYoRFJNX0k4MzBfRkxJUCwgaTgzMF9mbGlwX2J1ZnMsIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGKERSTV9JODMwX0lSUV9FTUlULCBpODMwX2lycV9lbWl0LCBEUk1fQVVUSCksCi0JRFJNX0lPQ1RMX0RFRihEUk1fSTgzMF9JUlFfV0FJVCwgaTgzMF9pcnFfd2FpdCwgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUYoRFJNX0k4MzBfR0VUUEFSQU0sIGk4MzBfZ2V0cGFyYW0sIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGKERSTV9JODMwX1NFVFBBUkFNLCBpODMwX3NldHBhcmFtLCBEUk1fQVVUSCkKKwlEUk1fSU9DVExfREVGKERSTV9JODMwX0lOSVQsIGk4MzBfZG1hX2luaXQsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWXxEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k4MzBfVkVSVEVYLCBpODMwX2RtYV92ZXJ0ZXgsIERSTV9BVVRIfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTgzMF9DTEVBUiwgaTgzMF9jbGVhcl9idWZzLCBEUk1fQVVUSHxEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k4MzBfRkxVU0gsIGk4MzBfZmx1c2hfaW9jdGwsIERSTV9BVVRIfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTgzMF9HRVRBR0UsIGk4MzBfZ2V0YWdlLCBEUk1fQVVUSHxEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k4MzBfR0VUQlVGLCBpODMwX2dldGJ1ZiwgRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9JODMwX1NXQVAsIGk4MzBfc3dhcF9idWZzLCBEUk1fQVVUSHxEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k4MzBfQ09QWSwgaTgzMF9jb3B5YnVmLCBEUk1fQVVUSHxEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k4MzBfRE9DT1BZLCBpODMwX2RvY29weSwgRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9JODMwX0ZMSVAsIGk4MzBfZmxpcF9idWZzLCBEUk1fQVVUSHxEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k4MzBfSVJRX0VNSVQsIGk4MzBfaXJxX2VtaXQsIERSTV9BVVRIfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTgzMF9JUlFfV0FJVCwgaTgzMF9pcnFfd2FpdCwgRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9JODMwX0dFVFBBUkFNLCBpODMwX2dldHBhcmFtLCBEUk1fQVVUSHxEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k4MzBfU0VUUEFSQU0sIGk4MzBfc2V0cGFyYW0sIERSTV9BVVRIfERSTV9VTkxPQ0tFRCksCiB9OwogCiBpbnQgaTgzMF9tYXhfaW9jdGwgPSBEUk1fQVJSQVlfU0laRShpODMwX2lvY3Rscyk7CkBAIC0xNTQ2LDcgKzE1NTMsNyBAQAogICogXHJldHVybnMKICAqIEEgdmFsdWUgb2YgMSBpcyBhbHdheXMgcmV0dXJlZCB0byBpbmRpY3RhdGUgZXZlcnkgaTh4eCBpcyBBR1AuCiAgKi8KLWludCBpODMwX2RyaXZlcl9kZXZpY2VfaXNfYWdwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQoraW50IGk4MzBfZHJpdmVyX2RldmljZV9pc19hZ3Aoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pODMwL2k4MzBfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTgzMC9pODMwX2Rydi5jCmluZGV4IDQ0Zjk5MGIuLmE1YzY2YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pODMwL2k4MzBfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k4MzAvaTgzMF9kcnYuYwpAQCAtNzAsNyArNzAsNyBAQAogCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCSAub3BlbiA9IGRybV9vcGVuLAogCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKKwkJIC51bmxvY2tlZF9pb2N0bCA9IGk4MzBfaW9jdGwsCiAJCSAubW1hcCA9IGRybV9tbWFwLAogCQkgLnBvbGwgPSBkcm1fcG9sbCwKIAkJIC5mYXN5bmMgPSBkcm1fZmFzeW5jLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k4MzAvaTgzMF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pODMwL2k4MzBfZHJ2LmgKaW5kZXggZGE4MmFmZS4uMGRmMWM3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k4MzAvaTgzMF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTgzMC9pODMwX2Rydi5oCkBAIC0xMjIsNiArMTIyLDcgQEAKIAogfSBkcm1faTgzMF9wcml2YXRlX3Q7CiAKK2xvbmcgaTgzMF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogZXh0ZXJuIHN0cnVjdCBkcm1faW9jdGxfZGVzYyBpODMwX2lvY3Rsc1tdOwogZXh0ZXJuIGludCBpODMwX21heF9pb2N0bDsKIApAQCAtMTMyLDMzICsxMzMsMzMgQEAKIAkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiAKIGV4dGVybiBpcnFyZXR1cm5fdCBpODMwX2RyaXZlcl9pcnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpOwotZXh0ZXJuIHZvaWQgaTgzMF9kcml2ZXJfaXJxX3ByZWluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwotZXh0ZXJuIHZvaWQgaTgzMF9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKLWV4dGVybiB2b2lkIGk4MzBfZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOworZXh0ZXJuIHZvaWQgaTgzMF9kcml2ZXJfaXJxX3ByZWluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBpODMwX2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBpODMwX2RyaXZlcl9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCBpODMwX2RyaXZlcl9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICosIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwotZXh0ZXJuIHZvaWQgaTgzMF9kcml2ZXJfcHJlY2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsCitleHRlcm4gdm9pZCBpODMwX2RyaXZlcl9wcmVjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7Ci1leHRlcm4gdm9pZCBpODMwX2RyaXZlcl9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwotZXh0ZXJuIHZvaWQgaTgzMF9kcml2ZXJfcmVjbGFpbV9idWZmZXJzX2xvY2tlZChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKK2V4dGVybiB2b2lkIGk4MzBfZHJpdmVyX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGk4MzBfZHJpdmVyX3JlY2xhaW1fYnVmZmVyc19sb2NrZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKLWV4dGVybiBpbnQgaTgzMF9kcml2ZXJfZG1hX3F1aWVzY2VudChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7Ci1leHRlcm4gaW50IGk4MzBfZHJpdmVyX2RldmljZV9pc19hZ3Aoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOworZXh0ZXJuIGludCBpODMwX2RyaXZlcl9kbWFfcXVpZXNjZW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBpODMwX2RyaXZlcl9kZXZpY2VfaXNfYWdwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCi0jZGVmaW5lIEk4MzBfUkVBRChyZWcpICAgICAgICAgIERSTV9SRUFEMzIoZGV2X3ByaXYtPm1taW9fbWFwLCByZWcpCi0jZGVmaW5lIEk4MzBfV1JJVEUocmVnLHZhbCkgICAgIERSTV9XUklURTMyKGRldl9wcml2LT5tbWlvX21hcCwgcmVnLCB2YWwpCi0jZGVmaW5lIEk4MzBfUkVBRDE2KHJlZykgICAgICAgIERSTV9SRUFEMTYoZGV2X3ByaXYtPm1taW9fbWFwLCByZWcpCi0jZGVmaW5lIEk4MzBfV1JJVEUxNihyZWcsdmFsKSAgIERSTV9XUklURTE2KGRldl9wcml2LT5tbWlvX21hcCwgcmVnLCB2YWwpCisjZGVmaW5lIEk4MzBfUkVBRChyZWcpCQlEUk1fUkVBRDMyKGRldl9wcml2LT5tbWlvX21hcCwgcmVnKQorI2RlZmluZSBJODMwX1dSSVRFKHJlZywgdmFsKQlEUk1fV1JJVEUzMihkZXZfcHJpdi0+bW1pb19tYXAsIHJlZywgdmFsKQorI2RlZmluZSBJODMwX1JFQUQxNihyZWcpCURSTV9SRUFEMTYoZGV2X3ByaXYtPm1taW9fbWFwLCByZWcpCisjZGVmaW5lIEk4MzBfV1JJVEUxNihyZWcsIHZhbCkJRFJNX1dSSVRFMTYoZGV2X3ByaXYtPm1taW9fbWFwLCByZWcsIHZhbCkKIAogI2RlZmluZSBJODMwX1ZFUkJPU0UgMAogCiAjZGVmaW5lIFJJTkdfTE9DQUxTCXVuc2lnbmVkIGludCBvdXRyaW5nLCByaW5nbWFzaywgb3V0Y291bnQ7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZvbGF0aWxlIGNoYXIgKnZpcnQ7CisJCQl2b2xhdGlsZSBjaGFyICp2aXJ0OwogCiAjZGVmaW5lIEJFR0lOX0xQX1JJTkcobikgZG8gewkJCQlcCiAJaWYgKEk4MzBfVkVSQk9TRSkJCQkJXAogCQlwcmludGsoIkJFR0lOX0xQX1JJTkcoJWQpXG4iLCAobikpOwlcCiAJaWYgKGRldl9wcml2LT5yaW5nLnNwYWNlIDwgbio0KQkJCVwKLQkJaTgzMF93YWl0X3JpbmcoZGV2LCBuKjQsIF9fZnVuY19fKTsJCVwKKwkJaTgzMF93YWl0X3JpbmcoZGV2LCBuKjQsIF9fZnVuY19fKTsJXAogCW91dGNvdW50ID0gMDsJCQkJCVwKIAlvdXRyaW5nID0gZGV2X3ByaXYtPnJpbmcudGFpbDsJCQlcCiAJcmluZ21hc2sgPSBkZXZfcHJpdi0+cmluZy50YWlsX21hc2s7CQlcCkBAIC0xNjYsMjEgKzE2NywyMyBAQAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBPVVRfUklORyhuKSBkbyB7CQkJCQlcCi0JaWYgKEk4MzBfVkVSQk9TRSkgcHJpbnRrKCIgICBPVVRfUklORyAleFxuIiwgKGludCkobikpOwlcCisJaWYgKEk4MzBfVkVSQk9TRSkJCQkJCVwKKwkJcHJpbnRrKCIgICBPVVRfUklORyAleFxuIiwgKGludCkobikpOwkJXAogCSoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKHZpcnQgKyBvdXRyaW5nKSA9IG47CQlcCi0gICAgICAgIG91dGNvdW50Kys7CQkJCQkJXAorCW91dGNvdW50Kys7CQkJCQkJXAogCW91dHJpbmcgKz0gNDsJCQkJCQlcCiAJb3V0cmluZyAmPSByaW5nbWFzazsJCQkJCVwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgQURWQU5DRV9MUF9SSU5HKCkgZG8gewkJCQkJCVwKLQlpZiAoSTgzMF9WRVJCT1NFKSBwcmludGsoIkFEVkFOQ0VfTFBfUklORyAleFxuIiwgb3V0cmluZyk7CVwKLQlkZXZfcHJpdi0+cmluZy50YWlsID0gb3V0cmluZzsJCQkJCVwKLQlkZXZfcHJpdi0+cmluZy5zcGFjZSAtPSBvdXRjb3VudCAqIDQ7CQkJCVwKLQlJODMwX1dSSVRFKExQX1JJTkcgKyBSSU5HX1RBSUwsIG91dHJpbmcpOwkJCVwKLX0gd2hpbGUoMCkKKyNkZWZpbmUgQURWQU5DRV9MUF9SSU5HKCkgZG8gewkJCQkJXAorCWlmIChJODMwX1ZFUkJPU0UpCQkJCQlcCisJCXByaW50aygiQURWQU5DRV9MUF9SSU5HICV4XG4iLCBvdXRyaW5nKTsJXAorCWRldl9wcml2LT5yaW5nLnRhaWwgPSBvdXRyaW5nOwkJCQlcCisJZGV2X3ByaXYtPnJpbmcuc3BhY2UgLT0gb3V0Y291bnQgKiA0OwkJCVwKKwlJODMwX1dSSVRFKExQX1JJTkcgKyBSSU5HX1RBSUwsIG91dHJpbmcpOwkJXAorfSB3aGlsZSAoMCkKIAotZXh0ZXJuIGludCBpODMwX3dhaXRfcmluZyhzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgaW50IG4sIGNvbnN0IGNoYXIgKmNhbGxlcik7CitleHRlcm4gaW50IGk4MzBfd2FpdF9yaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBuLCBjb25zdCBjaGFyICpjYWxsZXIpOwogCiAjZGVmaW5lIEdGWF9PUF9VU0VSX0lOVEVSUlVQVAkJKCgwPDwyOSl8KDI8PDIzKSkKICNkZWZpbmUgR0ZYX09QX0JSRUFLUE9JTlRfSU5URVJSVVBUCSgoMDw8MjkpfCgxPDwyMykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTgzMC9pODMwX2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k4MzAvaTgzMF9pcnEuYwppbmRleCA5MWVjMmJiLi5kMWE2Yjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTgzMC9pODMwX2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pODMwL2k4MzBfaXJxLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgaTgzMF9lbWl0X2lycShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK3N0YXRpYyBpbnQgaTgzMF9lbWl0X2lycShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCVJJTkdfTE9DQUxTOwpAQCAtNzAsNyArNzAsNyBAQAogCXJldHVybiBhdG9taWNfcmVhZCgmZGV2X3ByaXYtPmlycV9lbWl0dGVkKTsKIH0KIAotc3RhdGljIGludCBpODMwX3dhaXRfaXJxKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBpbnQgaXJxX25yKQorc3RhdGljIGludCBpODMwX3dhaXRfaXJxKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBpcnFfbnIpCiB7CiAJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTgzMF9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAlERUNMQVJFX1dBSVRRVUVVRShlbnRyeSwgY3VycmVudCk7CkBAIC0xNTYsNyArMTU2LDcgQEAKIAogLyogZHJtX2RtYS5oIGhvb2tzCiAqLwotdm9pZCBpODMwX2RyaXZlcl9pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK3ZvaWQgaTgzMF9kcml2ZXJfaXJxX3ByZWluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlkcm1faTgzMF9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pODMwX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCkBAIC0xNjgsMTQgKzE2OCwxNCBAQAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldl9wcml2LT5pcnFfcXVldWUpOwogfQogCi12b2lkIGk4MzBfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK3ZvaWQgaTgzMF9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTgzMF9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAogCUk4MzBfV1JJVEUxNihJODMwUkVHX0lOVF9FTkFCTEVfUiwgMHgyKTsKIH0KIAotdm9pZCBpODMwX2RyaXZlcl9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQordm9pZCBpODMwX2RyaXZlcl9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTgzMF9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAlpZiAoIWRldl9wcml2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwppbmRleCBhZWU4M2ZhLi45MjE0MTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwpAQCAtNjA1LDYgKzYwNSw5IEBACiAJCWNhc2UgRkJDX05PVF9USUxFRDoKIAkJCXNlcV9wcmludGYobSwgInNjYW5vdXQgYnVmZmVyIG5vdCB0aWxlZCIpOwogCQkJYnJlYWs7CisJCWNhc2UgRkJDX01VTFRJUExFX1BJUEVTOgorCQkJc2VxX3ByaW50ZihtLCAibXVsdGlwbGUgcGlwZXMgYXJlIGVuYWJsZWQiKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJc2VxX3ByaW50ZihtLCAidW5rbm93biByZWFzb24iKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKaW5kZXggZjAwYzVhZS4uZjE5ZmZlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCkBAIC0zNCwxMiArMzQsMTUgQEAKICNpbmNsdWRlICJpOTE1X2RybS5oIgogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCiAjaW5jbHVkZSAiaTkxNV90cmFjZS5oIgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZnYWFyYi5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KICNpbmNsdWRlIDxsaW51eC9wbnAuaD4KICNpbmNsdWRlIDxsaW51eC92Z2Ffc3dpdGNoZXJvby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAorZXh0ZXJuIGludCBpbnRlbF9tYXhfc3RvbGVuOyAvKiBmcm9tIEFHUCBkcml2ZXIgKi8KKwogLyoqCiAgKiBTZXRzIHVwIHRoZSBoYXJkd2FyZSBzdGF0dXMgcGFnZSBmb3IgZGV2aWNlcyB0aGF0IG5lZWQgYSBwaHlzaWNhbCBhZGRyZXNzCiAgKiBpbiB0aGUgcmVnaXN0ZXIuCkBAIC0xMjU2LDcgKzEyNTksNyBAQAogCQlkcm1fbW1fcHV0X2Jsb2NrKGNvbXByZXNzZWRfZmIpOwogCX0KIAotCWlmICghSVNfR000NShkZXYpKSB7CisJaWYgKCEoSVNfR000NShkZXYpIHx8IElTX0lST05MQUtFX00oZGV2KSkpIHsKIAkJY29tcHJlc3NlZF9sbGIgPSBkcm1fbW1fc2VhcmNoX2ZyZWUoJmRldl9wcml2LT52cmFtLCA0MDk2LAogCQkJCQkJICAgIDQwOTYsIDApOwogCQlpZiAoIWNvbXByZXNzZWRfbGxiKSB7CkBAIC0xMjgyLDggKzEyODUsOSBAQAogCiAJaW50ZWxfZGlzYWJsZV9mYmMoZGV2KTsKIAlkZXZfcHJpdi0+Y29tcHJlc3NlZF9mYiA9IGNvbXByZXNzZWRfZmI7Ci0KLQlpZiAoSVNfR000NShkZXYpKSB7CisJaWYgKElTX0lST05MQUtFX00oZGV2KSkKKwkJSTkxNV9XUklURShJTEtfRFBGQ19DQl9CQVNFLCBjb21wcmVzc2VkX2ZiLT5zdGFydCk7CisJZWxzZSBpZiAoSVNfR000NShkZXYpKSB7CiAJCUk5MTVfV1JJVEUoRFBGQ19DQl9CQVNFLCBjb21wcmVzc2VkX2ZiLT5zdGFydCk7CiAJfSBlbHNlIHsKIAkJSTkxNV9XUklURShGQkNfQ0ZCX0JBU0UsIGNmYl9iYXNlKTsKQEAgLTEyOTEsNyArMTI5NSw3IEBACiAJCWRldl9wcml2LT5jb21wcmVzc2VkX2xsYiA9IGNvbXByZXNzZWRfbGxiOwogCX0KIAotCURSTV9ERUJVRygiRkJDIGJhc2UgMHglMDhseCwgbGwgYmFzZSAweCUwOGx4LCBzaXplICVkTVxuIiwgY2ZiX2Jhc2UsCisJRFJNX0RFQlVHX0tNUygiRkJDIGJhc2UgMHglMDhseCwgbGwgYmFzZSAweCUwOGx4LCBzaXplICVkTVxuIiwgY2ZiX2Jhc2UsCiAJCSAgbGxfYmFzZSwgc2l6ZSA+PiAyMCk7CiB9CiAKQEAgLTEzMDAsNyArMTMwNCw3IEBACiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAogCWRybV9tbV9wdXRfYmxvY2soZGV2X3ByaXYtPmNvbXByZXNzZWRfZmIpOwotCWlmICghSVNfR000NShkZXYpKQorCWlmIChkZXZfcHJpdi0+Y29tcHJlc3NlZF9sbGIpCiAJCWRybV9tbV9wdXRfYmxvY2soZGV2X3ByaXYtPmNvbXByZXNzZWRfbGxiKTsKIH0KIApAQCAtMTM1NCw3ICsxMzU4LDcgQEAKIAlpbnQgZmJfYmFyID0gSVNfSTlYWChkZXYpID8gMiA6IDA7CiAJaW50IHJldCA9IDA7CiAKLQlkZXYtPm1vZGVfY29uZmlnLmZiX2Jhc2UgPSBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KGRldiwgZmJfYmFyKSAmCisJZGV2LT5tb2RlX2NvbmZpZy5mYl9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgZmJfYmFyKSAmCiAJCTB4ZmYwMDAwMDA7CiAKIAkvKiBCYXNpYyBtZW1yYW5nZSBhbGxvY2F0b3IgZm9yIHN0b2xlbiBzcGFjZSAoYWthIHZyYW0pICovCkBAIC0yMDYzLDggKzIwNjcsOCBAQAogCiAJLyogQWRkIHJlZ2lzdGVyIG1hcCAobmVlZGVkIGZvciBzdXNwZW5kL3Jlc3VtZSkgKi8KIAltbWlvX2JhciA9IElTX0k5WFgoZGV2KSA/IDAgOiAxOwotCWJhc2UgPSBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KGRldiwgbW1pb19iYXIpOwotCXNpemUgPSBkcm1fZ2V0X3Jlc291cmNlX2xlbihkZXYsIG1taW9fYmFyKTsKKwliYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgbW1pb19iYXIpOworCXNpemUgPSBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgbW1pb19iYXIpOwogCiAJaWYgKGk5MTVfZ2V0X2JyaWRnZV9kZXYoZGV2KSkgewogCQlyZXQgPSAtRUlPOwpAQCAtMjEwNCw2ICsyMTA4LDEyIEBACiAJaWYgKHJldCkKIAkJZ290byBvdXRfaW9tYXBmcmVlOwogCisJaWYgKHByZWFsbG9jX3NpemUgPiBpbnRlbF9tYXhfc3RvbGVuKSB7CisJCURSTV9JTkZPKCJkZXRlY3RlZCAlZE0gc3RvbGVuIG1lbW9yeSwgdHJpbW1pbmcgdG8gJWRNXG4iLAorCQkJIHByZWFsbG9jX3NpemUgPj4gMjAsIGludGVsX21heF9zdG9sZW4gPj4gMjApOworCQlwcmVhbGxvY19zaXplID0gaW50ZWxfbWF4X3N0b2xlbjsKKwl9CisKIAlkZXZfcHJpdi0+d3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiaTkxNSIpOwogCWlmIChkZXZfcHJpdi0+d3EgPT0gTlVMTCkgewogCQlEUk1fRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgb3VyIHdvcmtxdWV1ZS5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXggNDIzZGM5MC4uNTA0NGY2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCkBAIC05MywxMSArOTMsMTEgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfaTk2NWdfaW5mbyA9IHsKLQkuaXNfaTk2NWcgPSAxLCAuaXNfaTl4eCA9IDEsIC5oYXNfaG90cGx1ZyA9IDEsCisJLmlzX2Jyb2Fkd2F0ZXIgPSAxLCAuaXNfaTk2NWcgPSAxLCAuaXNfaTl4eCA9IDEsIC5oYXNfaG90cGx1ZyA9IDEsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2RldmljZV9pbmZvIGludGVsX2k5NjVnbV9pbmZvID0gewotCS5pc19pOTY1ZyA9IDEsIC5pc19tb2JpbGUgPSAxLCAuaXNfaTk2NWdtID0gMSwgLmlzX2k5eHggPSAxLAorCS5pc19jcmVzdGxpbmUgPSAxLCAuaXNfaTk2NWcgPSAxLCAuaXNfaTk2NWdtID0gMSwgLmlzX2k5eHggPSAxLAogCS5pc19tb2JpbGUgPSAxLCAuaGFzX2ZiYyA9IDEsIC5oYXNfcmM2ID0gMSwKIAkuaGFzX2hvdHBsdWcgPSAxLAogfTsKQEAgLTExNCw3ICsxMTQsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9nbTQ1X2luZm8gPSB7Ci0JLmlzX2k5NjVnID0gMSwgLmlzX21vYmlsZSA9IDEsIC5pc19nNHggPSAxLCAuaXNfaTl4eCA9IDEsCisJLmlzX2k5NjVnID0gMSwgLmlzX2c0eCA9IDEsIC5pc19pOXh4ID0gMSwKIAkuaXNfbW9iaWxlID0gMSwgLm5lZWRfZ2Z4X2h3cyA9IDEsIC5oYXNfZmJjID0gMSwgLmhhc19yYzYgPSAxLAogCS5oYXNfcGlwZV9jeHNyID0gMSwKIAkuaGFzX2hvdHBsdWcgPSAxLApAQCAtMTM0LDcgKzEzNCw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfaXJvbmxha2VfbV9pbmZvID0gewogCS5pc19pcm9ubGFrZSA9IDEsIC5pc19tb2JpbGUgPSAxLCAuaXNfaTk2NWcgPSAxLCAuaXNfaTl4eCA9IDEsCi0JLm5lZWRfZ2Z4X2h3cyA9IDEsIC5oYXNfcmM2ID0gMSwKKwkubmVlZF9nZnhfaHdzID0gMSwgLmhhc19mYmMgPSAxLCAuaGFzX3JjNiA9IDEsCiAJLmhhc19ob3RwbHVnID0gMSwKIH07CiAKQEAgLTE0OCwzMyArMTQ4LDMzIEBACiAJLmhhc19ob3RwbHVnID0gMSwgLmlzX2dlbjYgPSAxLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaWlkbGlzdFtdID0gewotCUlOVEVMX1ZHQV9ERVZJQ0UoMHgzNTc3LCAmaW50ZWxfaTgzMF9pbmZvKSwKLQlJTlRFTF9WR0FfREVWSUNFKDB4MjU2MiwgJmludGVsXzg0NWdfaW5mbyksCi0JSU5URUxfVkdBX0RFVklDRSgweDM1ODIsICZpbnRlbF9pODV4X2luZm8pLAorc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaWlkbGlzdFtdID0gewkJLyogYWthICovCisJSU5URUxfVkdBX0RFVklDRSgweDM1NzcsICZpbnRlbF9pODMwX2luZm8pLAkJLyogSTgzMF9NICovCisJSU5URUxfVkdBX0RFVklDRSgweDI1NjIsICZpbnRlbF84NDVnX2luZm8pLAkJLyogODQ1X0cgKi8KKwlJTlRFTF9WR0FfREVWSUNFKDB4MzU4MiwgJmludGVsX2k4NXhfaW5mbyksCQkvKiBJODU1X0dNICovCiAJSU5URUxfVkdBX0RFVklDRSgweDM1OGUsICZpbnRlbF9pODV4X2luZm8pLAotCUlOVEVMX1ZHQV9ERVZJQ0UoMHgyNTcyLCAmaW50ZWxfaTg2NWdfaW5mbyksCi0JSU5URUxfVkdBX0RFVklDRSgweDI1ODIsICZpbnRlbF9pOTE1Z19pbmZvKSwKLQlJTlRFTF9WR0FfREVWSUNFKDB4MjU4YSwgJmludGVsX2k5MTVnX2luZm8pLAotCUlOVEVMX1ZHQV9ERVZJQ0UoMHgyNTkyLCAmaW50ZWxfaTkxNWdtX2luZm8pLAotCUlOVEVMX1ZHQV9ERVZJQ0UoMHgyNzcyLCAmaW50ZWxfaTk0NWdfaW5mbyksCi0JSU5URUxfVkdBX0RFVklDRSgweDI3YTIsICZpbnRlbF9pOTQ1Z21faW5mbyksCi0JSU5URUxfVkdBX0RFVklDRSgweDI3YWUsICZpbnRlbF9pOTQ1Z21faW5mbyksCi0JSU5URUxfVkdBX0RFVklDRSgweDI5NzIsICZpbnRlbF9pOTY1Z19pbmZvKSwKLQlJTlRFTF9WR0FfREVWSUNFKDB4Mjk4MiwgJmludGVsX2k5NjVnX2luZm8pLAotCUlOVEVMX1ZHQV9ERVZJQ0UoMHgyOTkyLCAmaW50ZWxfaTk2NWdfaW5mbyksCi0JSU5URUxfVkdBX0RFVklDRSgweDI5YTIsICZpbnRlbF9pOTY1Z19pbmZvKSwKLQlJTlRFTF9WR0FfREVWSUNFKDB4MjliMiwgJmludGVsX2czM19pbmZvKSwKLQlJTlRFTF9WR0FfREVWSUNFKDB4MjljMiwgJmludGVsX2czM19pbmZvKSwKLQlJTlRFTF9WR0FfREVWSUNFKDB4MjlkMiwgJmludGVsX2czM19pbmZvKSwKLQlJTlRFTF9WR0FfREVWSUNFKDB4MmEwMiwgJmludGVsX2k5NjVnbV9pbmZvKSwKLQlJTlRFTF9WR0FfREVWSUNFKDB4MmExMiwgJmludGVsX2k5NjVnbV9pbmZvKSwKLQlJTlRFTF9WR0FfREVWSUNFKDB4MmE0MiwgJmludGVsX2dtNDVfaW5mbyksCi0JSU5URUxfVkdBX0RFVklDRSgweDJlMDIsICZpbnRlbF9nNDVfaW5mbyksCi0JSU5URUxfVkdBX0RFVklDRSgweDJlMTIsICZpbnRlbF9nNDVfaW5mbyksCi0JSU5URUxfVkdBX0RFVklDRSgweDJlMjIsICZpbnRlbF9nNDVfaW5mbyksCi0JSU5URUxfVkdBX0RFVklDRSgweDJlMzIsICZpbnRlbF9nNDVfaW5mbyksCi0JSU5URUxfVkdBX0RFVklDRSgweDJlNDIsICZpbnRlbF9nNDVfaW5mbyksCisJSU5URUxfVkdBX0RFVklDRSgweDI1NzIsICZpbnRlbF9pODY1Z19pbmZvKSwJCS8qIEk4NjVfRyAqLworCUlOVEVMX1ZHQV9ERVZJQ0UoMHgyNTgyLCAmaW50ZWxfaTkxNWdfaW5mbyksCQkvKiBJOTE1X0cgKi8KKwlJTlRFTF9WR0FfREVWSUNFKDB4MjU4YSwgJmludGVsX2k5MTVnX2luZm8pLAkJLyogRTcyMjFfRyAqLworCUlOVEVMX1ZHQV9ERVZJQ0UoMHgyNTkyLCAmaW50ZWxfaTkxNWdtX2luZm8pLAkJLyogSTkxNV9HTSAqLworCUlOVEVMX1ZHQV9ERVZJQ0UoMHgyNzcyLCAmaW50ZWxfaTk0NWdfaW5mbyksCQkvKiBJOTQ1X0cgKi8KKwlJTlRFTF9WR0FfREVWSUNFKDB4MjdhMiwgJmludGVsX2k5NDVnbV9pbmZvKSwJCS8qIEk5NDVfR00gKi8KKwlJTlRFTF9WR0FfREVWSUNFKDB4MjdhZSwgJmludGVsX2k5NDVnbV9pbmZvKSwJCS8qIEk5NDVfR01FICovCisJSU5URUxfVkdBX0RFVklDRSgweDI5NzIsICZpbnRlbF9pOTY1Z19pbmZvKSwJCS8qIEk5NDZfR1ogKi8KKwlJTlRFTF9WR0FfREVWSUNFKDB4Mjk4MiwgJmludGVsX2k5NjVnX2luZm8pLAkJLyogRzM1X0cgKi8KKwlJTlRFTF9WR0FfREVWSUNFKDB4Mjk5MiwgJmludGVsX2k5NjVnX2luZm8pLAkJLyogSTk2NV9RICovCisJSU5URUxfVkdBX0RFVklDRSgweDI5YTIsICZpbnRlbF9pOTY1Z19pbmZvKSwJCS8qIEk5NjVfRyAqLworCUlOVEVMX1ZHQV9ERVZJQ0UoMHgyOWIyLCAmaW50ZWxfZzMzX2luZm8pLAkJLyogUTM1X0cgKi8KKwlJTlRFTF9WR0FfREVWSUNFKDB4MjljMiwgJmludGVsX2czM19pbmZvKSwJCS8qIEczM19HICovCisJSU5URUxfVkdBX0RFVklDRSgweDI5ZDIsICZpbnRlbF9nMzNfaW5mbyksCQkvKiBRMzNfRyAqLworCUlOVEVMX1ZHQV9ERVZJQ0UoMHgyYTAyLCAmaW50ZWxfaTk2NWdtX2luZm8pLAkJLyogSTk2NV9HTSAqLworCUlOVEVMX1ZHQV9ERVZJQ0UoMHgyYTEyLCAmaW50ZWxfaTk2NWdtX2luZm8pLAkJLyogSTk2NV9HTUUgKi8KKwlJTlRFTF9WR0FfREVWSUNFKDB4MmE0MiwgJmludGVsX2dtNDVfaW5mbyksCQkvKiBHTTQ1X0cgKi8KKwlJTlRFTF9WR0FfREVWSUNFKDB4MmUwMiwgJmludGVsX2c0NV9pbmZvKSwJCS8qIElHRF9FX0cgKi8KKwlJTlRFTF9WR0FfREVWSUNFKDB4MmUxMiwgJmludGVsX2c0NV9pbmZvKSwJCS8qIFE0NV9HICovCisJSU5URUxfVkdBX0RFVklDRSgweDJlMjIsICZpbnRlbF9nNDVfaW5mbyksCQkvKiBHNDVfRyAqLworCUlOVEVMX1ZHQV9ERVZJQ0UoMHgyZTMyLCAmaW50ZWxfZzQ1X2luZm8pLAkJLyogRzQxX0cgKi8KKwlJTlRFTF9WR0FfREVWSUNFKDB4MmU0MiwgJmludGVsX2c0NV9pbmZvKSwJCS8qIEI0M19HICovCiAJSU5URUxfVkdBX0RFVklDRSgweGEwMDEsICZpbnRlbF9waW5ldmlld19pbmZvKSwKIAlJTlRFTF9WR0FfREVWSUNFKDB4YTAxMSwgJmludGVsX3BpbmV2aWV3X2luZm8pLAogCUlOVEVMX1ZHQV9ERVZJQ0UoMHgwMDQyLCAmaW50ZWxfaXJvbmxha2VfZF9pbmZvKSwKQEAgLTM0MCw3ICszNDAsNyBAQAogCS8qCiAJICogQ2xlYXIgcmVxdWVzdCBsaXN0CiAJICovCi0JaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKGRldiwgJmRldl9wcml2LT5yZW5kZXJfcmluZyk7CisJaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKGRldik7CiAKIAlpZiAobmVlZF9kaXNwbGF5KQogCQlpOTE1X3NhdmVfZGlzcGxheShkZXYpOwpAQCAtNDEzLDcgKzQxMyw3IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdAogaTkxNV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7Ci0JcmV0dXJuIGRybV9nZXRfZGV2KHBkZXYsIGVudCwgJmRyaXZlcik7CisJcmV0dXJuIGRybV9nZXRfcGNpX2RldihwZGV2LCBlbnQsICZkcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNDgyLDcgKzQ4Miw3IEBACiAJcmV0dXJuIGk5MTVfZHJtX2ZyZWV6ZShkcm1fZGV2KTsKIH0KIAotY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgaTkxNV9wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgaTkxNV9wbV9vcHMgPSB7CiAgICAgIC5zdXNwZW5kID0gaTkxNV9wbV9zdXNwZW5kLAogICAgICAucmVzdW1lID0gaTkxNV9wbV9yZXN1bWUsCiAgICAgIC5mcmVlemUgPSBpOTE1X3BtX2ZyZWV6ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IGQxNDdhYjIuLjkwNjY2M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMTc2LDcgKzE3Niw4IEBACiAJaW50ICgqZ2V0X2Rpc3BsYXlfY2xvY2tfc3BlZWQpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCWludCAoKmdldF9maWZvX3NpemUpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwbGFuZSk7CiAJdm9pZCAoKnVwZGF0ZV93bSkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBsYW5lYV9jbG9jaywKLQkJCSAgaW50IHBsYW5lYl9jbG9jaywgaW50IHNyX2hkaXNwbGF5LCBpbnQgcGl4ZWxfc2l6ZSk7CisJCQkgIGludCBwbGFuZWJfY2xvY2ssIGludCBzcl9oZGlzcGxheSwgaW50IHNyX2h0b3RhbCwKKwkJCSAgaW50IHBpeGVsX3NpemUpOwogCS8qIGNsb2NrIHVwZGF0ZXMgZm9yIG1vZGUgc2V0ICovCiAJLyogY3Vyc29yIHVwZGF0ZXMgKi8KIAkvKiByZW5kZXIgY2xvY2sgaW5jcmVhc2UvZGVjcmVhc2UgKi8KQEAgLTIwMCw2ICsyMDEsOCBAQAogCXU4IG5lZWRfZ2Z4X2h3cyA6IDE7CiAJdTggaXNfZzR4IDogMTsKIAl1OCBpc19waW5ldmlldyA6IDE7CisJdTggaXNfYnJvYWR3YXRlciA6IDE7CisJdTggaXNfY3Jlc3RsaW5lIDogMTsKIAl1OCBpc19pcm9ubGFrZSA6IDE7CiAJdTggaXNfZ2VuNiA6IDE7CiAJdTggaGFzX2ZiYyA6IDE7CkBAIC0yMTUsNiArMjE4LDcgQEAKIAlGQkNfTU9ERV9UT09fTEFSR0UsIC8qIG1vZGUgdG9vIGxhcmdlIGZvciBjb21wcmVzc2lvbiAqLwogCUZCQ19CQURfUExBTkUsIC8qIGZiYyBub3Qgc3VwcG9ydGVkIG9uIHBsYW5lICovCiAJRkJDX05PVF9USUxFRCwgLyogYnVmZmVyIG5vdCB0aWxlZCAqLworCUZCQ19NVUxUSVBMRV9QSVBFUywgLyogbW9yZSB0aGFuIG9uZSBwaXBlIGFjdGl2ZSAqLwogfTsKIAogZW51bSBpbnRlbF9wY2ggewpAQCAtMjIyLDYgKzIyNiw4IEBACiAJUENIX0NQVCwJLyogQ291Z2FycG9pbnQgUENIICovCiB9OwogCisjZGVmaW5lIFFVSVJLX1BJUEVBX0ZPUkNFICgxPDwwKQorCiBzdHJ1Y3QgaW50ZWxfZmJkZXY7CiAKIHR5cGVkZWYgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewpAQCAtMjg1LDYgKzI5MSw4IEBACiAJc3RydWN0IHRpbWVyX2xpc3QgaGFuZ2NoZWNrX3RpbWVyOwogCWludCBoYW5nY2hlY2tfY291bnQ7CiAJdWludDMyX3QgbGFzdF9hY3RoZDsKKwl1aW50MzJfdCBsYXN0X2luc3Rkb25lOworCXVpbnQzMl90IGxhc3RfaW5zdGRvbmUxOwogCiAJc3RydWN0IGRybV9tbSB2cmFtOwogCkBAIC0zMzcsNiArMzQ1LDggQEAKIAkvKiBQQ0ggY2hpcHNldCB0eXBlICovCiAJZW51bSBpbnRlbF9wY2ggcGNoX3R5cGU7CiAKKwl1bnNpZ25lZCBsb25nIHF1aXJrczsKKwogCS8qIFJlZ2lzdGVyIHN0YXRlICovCiAJYm9vbCBtb2Rlc2V0X29uX2xpZDsKIAl1OCBzYXZlTEJCOwpAQCAtNTQyLDYgKzU1MiwxNCBAQAogCQlzdHJ1Y3QgbGlzdF9oZWFkIGZlbmNlX2xpc3Q7CiAKIAkJLyoqCisJCSAqIExpc3Qgb2Ygb2JqZWN0cyBjdXJyZW50bHkgcGVuZGluZyBiZWluZyBmcmVlZC4KKwkJICoKKwkJICogVGhlc2Ugb2JqZWN0cyBhcmUgbm8gbG9uZ2VyIGluIHVzZSwgYnV0IGR1ZSB0byBhIHNpZ25hbAorCQkgKiB3ZSB3ZXJlIHByZXZlbnRlZCBmcm9tIGZyZWVpbmcgdGhlbSBhdCB0aGUgYXBwb2ludGVkIHRpbWUuCisJCSAqLworCQlzdHJ1Y3QgbGlzdF9oZWFkIGRlZmVycmVkX2ZyZWVfbGlzdDsKKworCQkvKioKIAkJICogV2UgbGVhdmUgdGhlIHVzZXIgSVJRIG9mZiBhcyBtdWNoIGFzIHBvc3NpYmxlLAogCQkgKiBidXQgdGhpcyBtZWFucyB0aGF0IHJlcXVlc3RzIHdpbGwgZmluaXNoIGFuZCBuZXZlcgogCQkgKiBiZSByZXRpcmVkIG9uY2UgdGhlIHN5c3RlbSBnb2VzIGlkbGUuIFNldCBhIHRpbWVyIHRvCkBAIC02NzIsNyArNjkwLDcgQEAKIAkgKgogCSAqIFNpemU6IDQgYml0cyBmb3IgMTYgZmVuY2VzICsgc2lnbiAoZm9yIEZFTkNFX1JFR19OT05FKQogCSAqLwotCWludCBmZW5jZV9yZWcgOiA1OworCXNpZ25lZCBpbnQgZmVuY2VfcmVnIDogNTsKIAogCS8qKgogCSAqIFVzZWQgZm9yIGNoZWNraW5nIHRoZSBvYmplY3QgZG9lc24ndCBhcHBlYXIgbW9yZSB0aGFuIG9uY2UKQEAgLTcwOCw3ICs3MjYsNyBAQAogCSAqCiAJICogSW4gdGhlIHdvcnN0IGNhc2UgdGhpcyBpcyAxICsgMSArIDEgKyAyKjIgPSA3LiBUaGF0IHdvdWxkIGZpdCBpbnRvIDMKIAkgKiBiaXRzIHdpdGggYWJzb2x1dGVseSBubyBoZWFkcm9vbS4gU28gdXNlIDQgYml0cy4gKi8KLQlpbnQgcGluX2NvdW50IDogNDsKKwl1bnNpZ25lZCBpbnQgcGluX2NvdW50IDogNDsKICNkZWZpbmUgRFJNX0k5MTVfR0VNX09CSkVDVF9NQVhfUElOX0NPVU5UIDB4ZgogCiAJLyoqIEFHUCBtZW1vcnkgc3RydWN0dXJlIGZvciBvdXIgR1RUIGJpbmRpbmcuICovCkBAIC03MzgsNyArNzU2LDcgQEAKIAl1aW50MzJfdCBzdHJpZGU7CiAKIAkvKiogUmVjb3JkIG9mIGFkZHJlc3MgYml0IDE3IG9mIGVhY2ggcGFnZSBhdCBsYXN0IHVuYmluZC4gKi8KLQlsb25nICpiaXRfMTc7CisJdW5zaWduZWQgbG9uZyAqYml0XzE3OwogCiAJLyoqIEFHUCBtYXBwaW5nIHR5cGUgKEFHUF9VU0VSX01FTU9SWSBvciBBR1BfVVNFUl9DQUNIRURfTUVNT1JZICovCiAJdWludDMyX3QgYWdwX3R5cGU7CkBAIC05NTAsOCArOTY4LDcgQEAKIGJvb2wgaTkxNV9zZXFub19wYXNzZWQodWludDMyX3Qgc2VxMSwgdWludDMyX3Qgc2VxMik7CiBpbnQgaTkxNV9nZW1fb2JqZWN0X2dldF9mZW5jZV9yZWcoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwogaW50IGk5MTVfZ2VtX29iamVjdF9wdXRfZmVuY2VfcmVnKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKLXZvaWQgaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCSBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpOwordm9pZCBpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiB2b2lkIGk5MTVfZ2VtX3JldGlyZV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHZvaWQgaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwogaW50IGk5MTVfZ2VtX29iamVjdF9zZXRfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLApAQCAtOTgxLDcgKzk5OCw3IEBACiBpbnQgaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgZ2ZwX3QgZ2ZwbWFzayk7CiB2b2lkIGk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwogdm9pZCBpOTE1X2dlbV9yZWxlYXNlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7Ci12b2lkIGk5MTVfZ2VtX29iamVjdF9mbHVzaF93cml0ZV9kb21haW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworaW50IGk5MTVfZ2VtX29iamVjdF9mbHVzaF93cml0ZV9kb21haW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwogCiB2b2lkIGk5MTVfZ2VtX3Nocmlua2VyX2luaXQodm9pZCk7CiB2b2lkIGk5MTVfZ2VtX3Nocmlua2VyX2V4aXQodm9pZCk7CkBAIC0xMDQxLDYgKzEwNTgsNyBAQAogZXh0ZXJuIGludCBpbnRlbF9tb2Rlc2V0X3ZnYV9zZXRfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgYm9vbCBzdGF0ZSk7CiBleHRlcm4gdm9pZCBpOHh4X2Rpc2FibGVfZmJjKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgZzR4X2Rpc2FibGVfZmJjKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgaXJvbmxha2VfZGlzYWJsZV9mYmMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBpbnRlbF9kaXNhYmxlX2ZiYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGludGVsX2VuYWJsZV9mYmMoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1bnNpZ25lZCBsb25nIGludGVydmFsKTsKIGV4dGVybiBib29sIGludGVsX2ZiY19lbmFibGVkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwpAQCAtMTEzMCw2ICsxMTQ4LDggQEAKICNkZWZpbmUgSVNfSTk0NUdNKGRldikJCShJTlRFTF9JTkZPKGRldiktPmlzX2k5NDVnbSkKICNkZWZpbmUgSVNfSTk2NUcoZGV2KQkJKElOVEVMX0lORk8oZGV2KS0+aXNfaTk2NWcpCiAjZGVmaW5lIElTX0k5NjVHTShkZXYpCQkoSU5URUxfSU5GTyhkZXYpLT5pc19pOTY1Z20pCisjZGVmaW5lIElTX0JST0FEV0FURVIoZGV2KQkoSU5URUxfSU5GTyhkZXYpLT5pc19icm9hZHdhdGVyKQorI2RlZmluZSBJU19DUkVTVExJTkUoZGV2KQkoSU5URUxfSU5GTyhkZXYpLT5pc19jcmVzdGxpbmUpCiAjZGVmaW5lIElTX0dNNDUoZGV2KQkJKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MkE0MikKICNkZWZpbmUgSVNfRzRYKGRldikJCShJTlRFTF9JTkZPKGRldiktPmlzX2c0eCkKICNkZWZpbmUgSVNfUElORVZJRVdfRyhkZXYpCSgoZGV2KS0+cGNpX2RldmljZSA9PSAweGEwMDEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwppbmRleCAwNzQzODU4Li4yYTRlZDdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAKLXN0YXRpYyB2b2lkIGk5MTVfZ2VtX29iamVjdF9mbHVzaF9ncHVfd3JpdGVfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK3N0YXRpYyBpbnQgaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2dwdV93cml0ZV9kb21haW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwogc3RhdGljIHZvaWQgaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2d0dF93cml0ZV9kb21haW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwogc3RhdGljIHZvaWQgaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2NwdV93cml0ZV9kb21haW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwogc3RhdGljIGludCBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2NwdV9kb21haW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCkBAIC01Myw2ICs1Myw3IEBACiBzdGF0aWMgaW50IGk5MTVfZ2VtX3BoeXNfcHdyaXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAogCQkJCXN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlICphcmdzLAogCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK3N0YXRpYyB2b2lkIGk5MTVfZ2VtX2ZyZWVfb2JqZWN0X3RhaWwoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwogCiBzdGF0aWMgTElTVF9IRUFEKHNocmlua19saXN0KTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2hyaW5rX2xpc3RfbG9jayk7CkBAIC0xMjcsOCArMTI4LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZV9wcml2LCBvYmosICZoYW5kbGUpOwotCWRybV9nZW1fb2JqZWN0X2hhbmRsZV91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOwotCisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC00OTYsMTAgKzQ5NiwxMCBAQAogCWNoYXIgKnZhZGRyX2F0b21pYzsKIAl1bnNpZ25lZCBsb25nIHVud3JpdHRlbjsKIAotCXZhZGRyX2F0b21pYyA9IGlvX21hcHBpbmdfbWFwX2F0b21pY193YyhtYXBwaW5nLCBwYWdlX2Jhc2UpOworCXZhZGRyX2F0b21pYyA9IGlvX21hcHBpbmdfbWFwX2F0b21pY193YyhtYXBwaW5nLCBwYWdlX2Jhc2UsIEtNX1VTRVIwKTsKIAl1bndyaXR0ZW4gPSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljX25vY2FjaGUodmFkZHJfYXRvbWljICsgcGFnZV9vZmZzZXQsCiAJCQkJCQkgICAgICB1c2VyX2RhdGEsIGxlbmd0aCk7Ci0JaW9fbWFwcGluZ191bm1hcF9hdG9taWModmFkZHJfYXRvbWljKTsKKwlpb19tYXBwaW5nX3VubWFwX2F0b21pYyh2YWRkcl9hdG9taWMsIEtNX1VTRVIwKTsKIAlpZiAodW53cml0dGVuKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKQEAgLTE3MDksOSArMTcwOSw5IEBACiAvKioKICAqIFRoaXMgZnVuY3Rpb24gY2xlYXJzIHRoZSByZXF1ZXN0IGxpc3QgYXMgc2VxdWVuY2UgbnVtYmVycyBhcmUgcGFzc2VkLgogICovCi12b2lkCi1pOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQorc3RhdGljIHZvaWQKK2k5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0c19yaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdWludDMyX3Qgc2Vxbm87CkBAIC0xNzUxLDYgKzE3NTEsMzAgQEAKIH0KIAogdm9pZAoraTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5kZWZlcnJlZF9mcmVlX2xpc3QpKSB7CisJICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiwgKnRtcDsKKworCSAgICAvKiBXZSBtdXN0IGJlIGNhcmVmdWwgdGhhdCBkdXJpbmcgdW5iaW5kKCkgd2UgZG8gbm90CisJICAgICAqIGFjY2lkZW50YWxseSBpbmZpbml0ZWx5IHJlY3Vyc2UgaW50byByZXRpcmUgcmVxdWVzdHMuCisJICAgICAqIEN1cnJlbnRseToKKwkgICAgICogICByZXRpcmUgLT4gZnJlZSAtPiB1bmJpbmQgLT4gd2FpdCAtPiByZXRpcmVfcmluZworCSAgICAgKi8KKwkgICAgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9ial9wcml2LCB0bXAsCisJCQkJICAgICAmZGV2X3ByaXYtPm1tLmRlZmVycmVkX2ZyZWVfbGlzdCwKKwkJCQkgICAgIGxpc3QpCisJCSAgICBpOTE1X2dlbV9mcmVlX29iamVjdF90YWlsKCZvYmpfcHJpdi0+YmFzZSk7CisJfQorCisJaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzX3JpbmcoZGV2LCAmZGV2X3ByaXYtPnJlbmRlcl9yaW5nKTsKKwlpZiAoSEFTX0JTRChkZXYpKQorCQlpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHNfcmluZyhkZXYsICZkZXZfcHJpdi0+YnNkX3JpbmcpOworfQorCit2b2lkCiBpOTE1X2dlbV9yZXRpcmVfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2OwpAQCAtMTc2MSwxMCArMTc4NSw3IEBACiAJZGV2ID0gZGV2X3ByaXYtPmRldjsKIAogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMoZGV2LCAmZGV2X3ByaXYtPnJlbmRlcl9yaW5nKTsKLQotCWlmIChIQVNfQlNEKGRldikpCi0JCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhkZXYsICZkZXZfcHJpdi0+YnNkX3JpbmcpOworCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhkZXYpOwogCiAJaWYgKCFkZXZfcHJpdi0+bW0uc3VzcGVuZGVkICYmCiAJCSghbGlzdF9lbXB0eSgmZGV2X3ByaXYtPnJlbmRlcl9yaW5nLnJlcXVlc3RfbGlzdCkgfHwKQEAgLTE4MzIsNyArMTg1Myw3IEBACiAJICogYSBzZXBhcmF0ZSB3YWl0IHF1ZXVlIHRvIGhhbmRsZSB0aGF0LgogCSAqLwogCWlmIChyZXQgPT0gMCkKLQkJaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKGRldiwgcmluZyk7CisJCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0c19yaW5nKGRldiwgcmluZyk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTk0NSwxMSArMTk2NiwxMiBAQAogCSAqIGJlZm9yZSB3ZSB1bmJpbmQuCiAJICovCiAJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19jcHVfZG9tYWluKG9iaiwgMSk7Ci0JaWYgKHJldCkgewotCQlpZiAocmV0ICE9IC1FUkVTVEFSVFNZUykKLQkJCURSTV9FUlJPUigic2V0X2RvbWFpbiBmYWlsZWQ6ICVkXG4iLCByZXQpOworCWlmIChyZXQgPT0gLUVSRVNUQVJUU1lTKQogCQlyZXR1cm4gcmV0OwotCX0KKwkvKiBDb250aW51ZSBvbiBpZiB3ZSBmYWlsIGR1ZSB0byBFSU8sIHRoZSBHUFUgaXMgaHVuZyBzbyB3ZQorCSAqIHNob3VsZCBiZSBzYWZlIGFuZCB3ZSBuZWVkIHRvIGNsZWFudXAgb3IgZWxzZSB3ZSBtaWdodAorCSAqIGNhdXNlIG1lbW9yeSBjb3JydXB0aW9uIHRocm91Z2ggdXNlLWFmdGVyLWZyZWUuCisJICovCiAKIAlCVUdfT04ob2JqX3ByaXYtPmFjdGl2ZSk7CiAKQEAgLTE5ODUsNyArMjAwNyw3IEBACiAKIAl0cmFjZV9pOTE1X2dlbV9vYmplY3RfdW5iaW5kKG9iaik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgc3RydWN0IGRybV9nZW1fb2JqZWN0ICoKQEAgLTIxMDcsMTAgKzIxMjksNyBAQAogCXN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmVuZGVyX3JpbmcgPSAmZGV2X3ByaXYtPnJlbmRlcl9yaW5nOwogCXN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqYnNkX3JpbmcgPSAmZGV2X3ByaXYtPmJzZF9yaW5nOwogCWZvciAoOzspIHsKLQkJaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKGRldiwgcmVuZGVyX3JpbmcpOwotCi0JCWlmIChIQVNfQlNEKGRldikpCi0JCQlpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMoZGV2LCBic2RfcmluZyk7CisJCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhkZXYpOwogCiAJCS8qIElmIHRoZXJlJ3MgYW4gaW5hY3RpdmUgYnVmZmVyIGF2YWlsYWJsZSBub3csIGdyYWIgaXQKIAkJICogYW5kIGJlIGRvbmUuCkBAIC0yMjQxLDYgKzIyNjAsNyBAQAogCQlwYWdlID0gcmVhZF9jYWNoZV9wYWdlX2dmcChtYXBwaW5nLCBpLAogCQkJCQkgICBHRlBfSElHSFVTRVIgfAogCQkJCQkgICBfX0dGUF9DT0xEIHwKKwkJCQkJICAgX19HRlBfUkVDTEFJTUFCTEUgfAogCQkJCQkgICBnZnBtYXNrKTsKIAkJaWYgKElTX0VSUihwYWdlKSkKIAkJCWdvdG8gZXJyX3BhZ2VzOwpAQCAtMjU4Miw3ICsyNjAyLDEwIEBACiAJaWYgKCFJU19JOTY1RyhkZXYpKSB7CiAJCWludCByZXQ7CiAKLQkJaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2dwdV93cml0ZV9kb21haW4ob2JqKTsKKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2dwdV93cml0ZV9kb21haW4ob2JqKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwogCQlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcob2JqKTsKIAkJaWYgKHJldCAhPSAwKQogCQkJcmV0dXJuIHJldDsKQEAgLTI2MzMsMTAgKzI2NTYsOCBAQAogCWlmIChmcmVlX3NwYWNlICE9IE5VTEwpIHsKIAkJb2JqX3ByaXYtPmd0dF9zcGFjZSA9IGRybV9tbV9nZXRfYmxvY2soZnJlZV9zcGFjZSwgb2JqLT5zaXplLAogCQkJCQkJICAgICAgIGFsaWdubWVudCk7Ci0JCWlmIChvYmpfcHJpdi0+Z3R0X3NwYWNlICE9IE5VTEwpIHsKLQkJCW9ial9wcml2LT5ndHRfc3BhY2UtPnByaXZhdGUgPSBvYmo7CisJCWlmIChvYmpfcHJpdi0+Z3R0X3NwYWNlICE9IE5VTEwpCiAJCQlvYmpfcHJpdi0+Z3R0X29mZnNldCA9IG9ial9wcml2LT5ndHRfc3BhY2UtPnN0YXJ0OwotCQl9CiAJfQogCWlmIChvYmpfcHJpdi0+Z3R0X3NwYWNlID09IE5VTEwpIHsKIAkJLyogSWYgdGhlIGd0dCBpcyBlbXB0eSBhbmQgd2UncmUgc3RpbGwgaGF2aW5nIHRyb3VibGUKQEAgLTI3MzIsNyArMjc1Myw3IEBACiB9CiAKIC8qKiBGbHVzaGVzIGFueSBHUFUgd3JpdGUgZG9tYWluIGZvciB0aGUgb2JqZWN0IGlmIGl0J3MgZGlydHkuICovCi1zdGF0aWMgdm9pZAorc3RhdGljIGludAogaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2dwdV93cml0ZV9kb21haW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OwpAQCAtMjc0MCwxNyArMjc2MSwxOCBAQAogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7CiAKIAlpZiAoKG9iai0+d3JpdGVfZG9tYWluICYgSTkxNV9HRU1fR1BVX0RPTUFJTlMpID09IDApCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAkvKiBRdWV1ZSB0aGUgR1BVIHdyaXRlIGNhY2hlIGZsdXNoaW5nIHdlIG5lZWQuICovCiAJb2xkX3dyaXRlX2RvbWFpbiA9IG9iai0+d3JpdGVfZG9tYWluOwogCWk5MTVfZ2VtX2ZsdXNoKGRldiwgMCwgb2JqLT53cml0ZV9kb21haW4pOwotCSh2b2lkKSBpOTE1X2FkZF9yZXF1ZXN0KGRldiwgTlVMTCwgb2JqLT53cml0ZV9kb21haW4sIG9ial9wcml2LT5yaW5nKTsKLQlCVUdfT04ob2JqLT53cml0ZV9kb21haW4pOworCWlmIChpOTE1X2FkZF9yZXF1ZXN0KGRldiwgTlVMTCwgb2JqLT53cml0ZV9kb21haW4sIG9ial9wcml2LT5yaW5nKSA9PSAwKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXRyYWNlX2k5MTVfZ2VtX29iamVjdF9jaGFuZ2VfZG9tYWluKG9iaiwKIAkJCQkJICAgIG9iai0+cmVhZF9kb21haW5zLAogCQkJCQkgICAgb2xkX3dyaXRlX2RvbWFpbik7CisJcmV0dXJuIDA7CiB9CiAKIC8qKiBGbHVzaGVzIHRoZSBHVFQgd3JpdGUgZG9tYWluIGZvciB0aGUgb2JqZWN0IGlmIGl0J3MgZGlydHkuICovCkBAIC0yNzk0LDkgKzI4MTYsMTEgQEAKIAkJCQkJICAgIG9sZF93cml0ZV9kb21haW4pOwogfQogCi12b2lkCitpbnQKIGk5MTVfZ2VtX29iamVjdF9mbHVzaF93cml0ZV9kb21haW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCiB7CisJaW50IHJldCA9IDA7CisKIAlzd2l0Y2ggKG9iai0+d3JpdGVfZG9tYWluKSB7CiAJY2FzZSBJOTE1X0dFTV9ET01BSU5fR1RUOgogCQlpOTE1X2dlbV9vYmplY3RfZmx1c2hfZ3R0X3dyaXRlX2RvbWFpbihvYmopOwpAQCAtMjgwNSw5ICsyODI5LDExIEBACiAJCWk5MTVfZ2VtX29iamVjdF9mbHVzaF9jcHVfd3JpdGVfZG9tYWluKG9iaik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWk5MTVfZ2VtX29iamVjdF9mbHVzaF9ncHVfd3JpdGVfZG9tYWluKG9iaik7CisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9mbHVzaF9ncHVfd3JpdGVfZG9tYWluKG9iaik7CiAJCWJyZWFrOwogCX0KKworCXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtMjgyNyw3ICsyODUzLDEwIEBACiAJaWYgKG9ial9wcml2LT5ndHRfc3BhY2UgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpOTE1X2dlbV9vYmplY3RfZmx1c2hfZ3B1X3dyaXRlX2RvbWFpbihvYmopOworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9mbHVzaF9ncHVfd3JpdGVfZG9tYWluKG9iaik7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCiAJLyogV2FpdCBvbiBhbnkgR1BVIHJlbmRlcmluZyBhbmQgZmx1c2hpbmcgdG8gb2NjdXIuICovCiAJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKG9iaik7CiAJaWYgKHJldCAhPSAwKQpAQCAtMjg3Nyw3ICsyOTA2LDkgQEAKIAlpZiAob2JqX3ByaXYtPmd0dF9zcGFjZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWk5MTVfZ2VtX29iamVjdF9mbHVzaF9ncHVfd3JpdGVfZG9tYWluKG9iaik7CisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2dwdV93cml0ZV9kb21haW4ob2JqKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJLyogV2FpdCBvbiBhbnkgR1BVIHJlbmRlcmluZyBhbmQgZmx1c2hpbmcgdG8gb2NjdXIuICovCiAJaWYgKG9ial9wcml2LT5hY3RpdmUpIHsKQEAgLTI5MjUsNyArMjk1NiwxMCBAQAogCXVpbnQzMl90IG9sZF93cml0ZV9kb21haW4sIG9sZF9yZWFkX2RvbWFpbnM7CiAJaW50IHJldDsKIAotCWk5MTVfZ2VtX29iamVjdF9mbHVzaF9ncHVfd3JpdGVfZG9tYWluKG9iaik7CisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2dwdV93cml0ZV9kb21haW4ob2JqKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJLyogV2FpdCBvbiBhbnkgR1BVIHJlbmRlcmluZyBhbmQgZmx1c2hpbmcgdG8gb2NjdXIuICovCiAJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKG9iaik7CiAJaWYgKHJldCAhPSAwKQpAQCAtMzIxNSw3ICszMjQ5LDEwIEBACiAJaWYgKG9mZnNldCA9PSAwICYmIHNpemUgPT0gb2JqLT5zaXplKQogCQlyZXR1cm4gaTkxNV9nZW1fb2JqZWN0X3NldF90b19jcHVfZG9tYWluKG9iaiwgMCk7CiAKLQlpOTE1X2dlbV9vYmplY3RfZmx1c2hfZ3B1X3dyaXRlX2RvbWFpbihvYmopOworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9mbHVzaF9ncHVfd3JpdGVfZG9tYWluKG9iaik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCS8qIFdhaXQgb24gYW55IEdQVSByZW5kZXJpbmcgYW5kIGZsdXNoaW5nIHRvIG9jY3VyLiAqLwogCXJldCA9IGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhvYmopOwogCWlmIChyZXQgIT0gMCkKQEAgLTM0NTAsNyArMzQ4Nyw4IEBACiAJCXJlbG9jX29mZnNldCA9IG9ial9wcml2LT5ndHRfb2Zmc2V0ICsgcmVsb2MtPm9mZnNldDsKIAkJcmVsb2NfcGFnZSA9IGlvX21hcHBpbmdfbWFwX2F0b21pY193YyhkZXZfcHJpdi0+bW0uZ3R0X21hcHBpbmcsCiAJCQkJCQkgICAgICAocmVsb2Nfb2Zmc2V0ICYKLQkJCQkJCSAgICAgICB+KFBBR0VfU0laRSAtIDEpKSk7CisJCQkJCQkgICAgICAgfihQQUdFX1NJWkUgLSAxKSksCisJCQkJCQkgICAgICBLTV9VU0VSMCk7CiAJCXJlbG9jX2VudHJ5ID0gKHVpbnQzMl90IF9faW9tZW0gKikocmVsb2NfcGFnZSArCiAJCQkJCQkgICAocmVsb2Nfb2Zmc2V0ICYgKFBBR0VfU0laRSAtIDEpKSk7CiAJCXJlbG9jX3ZhbCA9IHRhcmdldF9vYmpfcHJpdi0+Z3R0X29mZnNldCArIHJlbG9jLT5kZWx0YTsKQEAgLTM0NjEsNyArMzQ5OSw3IEBACiAJCQkgIHJlYWRsKHJlbG9jX2VudHJ5KSwgcmVsb2NfdmFsKTsKICNlbmRpZgogCQl3cml0ZWwocmVsb2NfdmFsLCByZWxvY19lbnRyeSk7Ci0JCWlvX21hcHBpbmdfdW5tYXBfYXRvbWljKHJlbG9jX3BhZ2UpOworCQlpb19tYXBwaW5nX3VubWFwX2F0b21pYyhyZWxvY19wYWdlLCBLTV9VU0VSMCk7CiAKIAkJLyogVGhlIHVwZGF0ZWQgcHJlc3VtZWQgb2Zmc2V0IGZvciB0aGlzIGVudHJ5IHdpbGwgYmUKIAkJICogY29waWVkIGJhY2sgb3V0IHRvIHRoZSB1c2VyLgpAQCAtMzY0Niw2ICszNjg0LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCisKIGludAogaTkxNV9nZW1fZG9fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCkBAIC0zNzkzLDcgKzM4MzIsNyBAQAogCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbF9zaXplID0gMDsKIAkJCQlpbnQgbnVtX2ZlbmNlcyA9IDA7CiAJCQkJZm9yIChpID0gMDsgaSA8IGFyZ3MtPmJ1ZmZlcl9jb3VudDsgaSsrKSB7Ci0JCQkJCW9ial9wcml2ID0gb2JqZWN0X2xpc3RbaV0tPmRyaXZlcl9wcml2YXRlOworCQkJCQlvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iamVjdF9saXN0W2ldKTsKIAogCQkJCQl0b3RhbF9zaXplICs9IG9iamVjdF9saXN0W2ldLT5zaXplOwogCQkJCQludW1fZmVuY2VzICs9CkBAIC00MzExLDcgKzQzNTAsNiBAQAogCXN0cnVjdCBkcm1faTkxNV9nZW1fYnVzeSAqYXJncyA9IGRhdGE7CiAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OwotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCiAJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOwogCWlmIChvYmogPT0gTlVMTCkgewpAQCAtNDMyNiwxMCArNDM2NCw3IEBACiAJICogYWN0dWFsbHkgdW5tYXNrZWQsIGFuZCBvdXIgd29ya2luZyBzZXQgZW5kcyB1cCBiZWluZyBsYXJnZXIgdGhhbgogCSAqIHJlcXVpcmVkLgogCSAqLwotCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhkZXYsICZkZXZfcHJpdi0+cmVuZGVyX3JpbmcpOwotCi0JaWYgKEhBU19CU0QoZGV2KSkKLQkJaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKGRldiwgJmRldl9wcml2LT5ic2RfcmluZyk7CisJaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKGRldik7CiAKIAlvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7CiAJLyogRG9uJ3QgY291bnQgYmVpbmcgb24gdGhlIGZsdXNoaW5nIGxpc3QgYWdhaW5zdCB0aGUgb2JqZWN0IGJlaW5nCkBAIC00NDM5LDYgKzQ0NzQsMzAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgaTkxNV9nZW1fZnJlZV9vYmplY3RfdGFpbChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKKwlpbnQgcmV0OworCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3VuYmluZChvYmopOworCWlmIChyZXQgPT0gLUVSRVNUQVJUU1lTKSB7CisJCWxpc3RfbW92ZSgmb2JqX3ByaXYtPmxpc3QsCisJCQkgICZkZXZfcHJpdi0+bW0uZGVmZXJyZWRfZnJlZV9saXN0KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChvYmpfcHJpdi0+bW1hcF9vZmZzZXQpCisJCWk5MTVfZ2VtX2ZyZWVfbW1hcF9vZmZzZXQob2JqKTsKKworCWRybV9nZW1fb2JqZWN0X3JlbGVhc2Uob2JqKTsKKworCWtmcmVlKG9ial9wcml2LT5wYWdlX2NwdV92YWxpZCk7CisJa2ZyZWUob2JqX3ByaXYtPmJpdF8xNyk7CisJa2ZyZWUob2JqX3ByaXYpOworfQorCiB2b2lkIGk5MTVfZ2VtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKQEAgLTQ0NTIsMTYgKzQ1MTEsNyBAQAogCWlmIChvYmpfcHJpdi0+cGh5c19vYmopCiAJCWk5MTVfZ2VtX2RldGFjaF9waHlzX29iamVjdChkZXYsIG9iaik7CiAKLQlpOTE1X2dlbV9vYmplY3RfdW5iaW5kKG9iaik7Ci0KLQlpZiAob2JqX3ByaXYtPm1tYXBfb2Zmc2V0KQotCQlpOTE1X2dlbV9mcmVlX21tYXBfb2Zmc2V0KG9iaik7Ci0KLQlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7Ci0KLQlrZnJlZShvYmpfcHJpdi0+cGFnZV9jcHVfdmFsaWQpOwotCWtmcmVlKG9ial9wcml2LT5iaXRfMTcpOwotCWtmcmVlKG9ial9wcml2KTsKKwlpOTE1X2dlbV9mcmVlX29iamVjdF90YWlsKG9iaik7CiB9CiAKIC8qKiBVbmJpbmRzIGFsbCBpbmFjdGl2ZSBvYmplY3RzLiAqLwpAQCAtNDY4Nyw5ICs0NzM3LDE5IEBACiAJQlVHX09OKEhBU19CU0QoZGV2KSAmJiAhbGlzdF9lbXB0eSgmZGV2X3ByaXYtPmJzZF9yaW5nLnJlcXVlc3RfbGlzdCkpOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCi0JZHJtX2lycV9pbnN0YWxsKGRldik7CisJcmV0ID0gZHJtX2lycV9pbnN0YWxsKGRldik7CisJaWYgKHJldCkKKwkJZ290byBjbGVhbnVwX3JpbmdidWZmZXI7CiAKIAlyZXR1cm4gMDsKKworY2xlYW51cF9yaW5nYnVmZmVyOgorCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlpOTE1X2dlbV9jbGVhbnVwX3JpbmdidWZmZXIoZGV2KTsKKwlkZXZfcHJpdi0+bW0uc3VzcGVuZGVkID0gMTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldHVybiByZXQ7CiB9CiAKIGludApAQCAtNDcyNyw2ICs0Nzg3LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPm1tLmdwdV93cml0ZV9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZkZXZfcHJpdi0+bW0uZmVuY2VfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5tbS5kZWZlcnJlZF9mcmVlX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZkZXZfcHJpdi0+cmVuZGVyX3JpbmcuYWN0aXZlX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZkZXZfcHJpdi0+cmVuZGVyX3JpbmcucmVxdWVzdF9saXN0KTsKIAlpZiAoSEFTX0JTRChkZXYpKSB7CkBAIC00NzQxLDYgKzQ4MDIsMTYgQEAKIAlsaXN0X2FkZCgmZGV2X3ByaXYtPm1tLnNocmlua19saXN0LCAmc2hyaW5rX2xpc3QpOwogCXNwaW5fdW5sb2NrKCZzaHJpbmtfbGlzdF9sb2NrKTsKIAorCS8qIE9uIEdFTjMgd2UgcmVhbGx5IG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBBUkIgQzMgTFAgYml0IGlzIHNldCAqLworCWlmIChJU19HRU4zKGRldikpIHsKKwkJdTMyIHRtcCA9IEk5MTVfUkVBRChNSV9BUkJfU1RBVEUpOworCQlpZiAoISh0bXAgJiBNSV9BUkJfQzNfTFBfV1JJVEVfRU5BQkxFKSkgeworCQkJLyogYXJiIHN0YXRlIGlzIGEgbWFza2VkIHdyaXRlLCBzbyBzZXQgYml0ICsgYml0IGluIG1hc2sgKi8KKwkJCXRtcCA9IE1JX0FSQl9DM19MUF9XUklURV9FTkFCTEUgfCAoTUlfQVJCX0MzX0xQX1dSSVRFX0VOQUJMRSA8PCBNSV9BUkJfTUFTS19TSElGVCk7CisJCQlJOTE1X1dSSVRFKE1JX0FSQl9TVEFURSwgdG1wKTsKKwkJfQorCX0KKwogCS8qIE9sZCBYIGRyaXZlcnMgd2lsbCB0YWtlIDAtMiBmb3IgZnJvbnQsIGJhY2ssIGRlcHRoIGJ1ZmZlcnMgKi8KIAlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpCiAJCWRldl9wcml2LT5mZW5jZV9yZWdfc3RhcnQgPSAzOwpAQCAtNDk3Nyw3ICs1MDQ4LDcgQEAKIH0KIAogc3RhdGljIGludAotaTkxNV9nZW1fc2hyaW5rKGludCBucl90b19zY2FuLCBnZnBfdCBnZnBfbWFzaykKK2k5MTVfZ2VtX3NocmluayhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywgaW50IG5yX3RvX3NjYW4sIGdmcF90IGdmcF9tYXNrKQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYsICpuZXh0X2RldjsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYsICpuZXh0X29iajsKQEAgLTUwMTUsMTAgKzUwODYsNyBAQAogCQkJY29udGludWU7CiAKIAkJc3Bpbl91bmxvY2soJnNocmlua19saXN0X2xvY2spOwotCQlpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMoZGV2LCAmZGV2X3ByaXYtPnJlbmRlcl9yaW5nKTsKLQotCQlpZiAoSEFTX0JTRChkZXYpKQotCQkJaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKGRldiwgJmRldl9wcml2LT5ic2RfcmluZyk7CisJCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhkZXYpOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvYmpfcHJpdiwgbmV4dF9vYmosCiAJCQkJCSAmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCmluZGV4IDRiN2M0OWQuLjE1NTcxOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCkBAIC0zMzMsOCArMzMzLDYgQEAKIAkJCWk5MTVfZ2VtX3JlbGVhc2VfbW1hcChvYmopOwogCiAJCWlmIChyZXQgIT0gMCkgewotCQkJV0FSTihyZXQgIT0gLUVSRVNUQVJUU1lTLAotCQkJICAgICAiZmFpbGVkIHRvIHJlc2V0IG9iamVjdCBmb3IgdGlsaW5nIHN3aXRjaCIpOwogCQkJYXJncy0+dGlsaW5nX21vZGUgPSBvYmpfcHJpdi0+dGlsaW5nX21vZGU7CiAJCQlhcmdzLT5zdHJpZGUgPSBvYmpfcHJpdi0+c3RyaWRlOwogCQkJZ290byBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCBkYmE1M2Q0Li44NTc4NWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKQEAgLTE3MSwxMCArMTcxLDEwIEBACiAJCWlyb25sYWtlX2VuYWJsZV9kaXNwbGF5X2lycShkZXZfcHJpdiwgREVfR1NFKTsKIAllbHNlIHsKIAkJaTkxNV9lbmFibGVfcGlwZXN0YXQoZGV2X3ByaXYsIDEsCi0JCQkJICAgICBJOTE1X0xFR0FDWV9CTENfRVZFTlRfRU5BQkxFKTsKKwkJCQkgICAgIFBJUEVfTEVHQUNZX0JMQ19FVkVOVF9FTkFCTEUpOwogCQlpZiAoSVNfSTk2NUcoZGV2KSkKIAkJCWk5MTVfZW5hYmxlX3BpcGVzdGF0KGRldl9wcml2LCAwLAotCQkJCQkgICAgIEk5MTVfTEVHQUNZX0JMQ19FVkVOVF9FTkFCTEUpOworCQkJCQkgICAgIFBJUEVfTEVHQUNZX0JMQ19FVkVOVF9FTkFCTEUpOwogCX0KIH0KIApAQCAtODQyLDcgKzg0Miw2IEBACiAJdTMyIGlpciwgbmV3X2lpcjsKIAl1MzIgcGlwZWFfc3RhdHMsIHBpcGViX3N0YXRzOwogCXUzMiB2Ymxhbmtfc3RhdHVzOwotCXUzMiB2YmxhbmtfZW5hYmxlOwogCWludCB2YmxhbmsgPSAwOwogCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CiAJaW50IGlycV9yZWNlaXZlZDsKQEAgLTg1NiwxMyArODU1LDEwIEBACiAKIAlpaXIgPSBJOTE1X1JFQUQoSUlSKTsKIAotCWlmIChJU19JOTY1RyhkZXYpKSB7Ci0JCXZibGFua19zdGF0dXMgPSBJOTE1X1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTOwotCQl2YmxhbmtfZW5hYmxlID0gUElQRV9TVEFSVF9WQkxBTktfSU5URVJSVVBUX0VOQUJMRTsKLQl9IGVsc2UgewotCQl2Ymxhbmtfc3RhdHVzID0gSTkxNV9WQkxBTktfSU5URVJSVVBUX1NUQVRVUzsKLQkJdmJsYW5rX2VuYWJsZSA9IEk5MTVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEU7Ci0JfQorCWlmIChJU19JOTY1RyhkZXYpKQorCQl2Ymxhbmtfc3RhdHVzID0gUElQRV9TVEFSVF9WQkxBTktfSU5URVJSVVBUX1NUQVRVUzsKKwllbHNlCisJCXZibGFua19zdGF0dXMgPSBQSVBFX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTOwogCiAJZm9yICg7OykgewogCQlpcnFfcmVjZWl2ZWQgPSBpaXIgIT0gMDsKQEAgLTk2Niw4ICs5NjIsOCBAQAogCQkJCWludGVsX2ZpbmlzaF9wYWdlX2ZsaXAoZGV2LCAxKTsKIAkJfQogCi0JCWlmICgocGlwZWFfc3RhdHMgJiBJOTE1X0xFR0FDWV9CTENfRVZFTlRfU1RBVFVTKSB8fAotCQkgICAgKHBpcGViX3N0YXRzICYgSTkxNV9MRUdBQ1lfQkxDX0VWRU5UX1NUQVRVUykgfHwKKwkJaWYgKChwaXBlYV9zdGF0cyAmIFBJUEVfTEVHQUNZX0JMQ19FVkVOVF9TVEFUVVMpIHx8CisJCSAgICAocGlwZWJfc3RhdHMgJiBQSVBFX0xFR0FDWV9CTENfRVZFTlRfU1RBVFVTKSB8fAogCQkgICAgKGlpciAmIEk5MTVfQVNMRV9JTlRFUlJVUFQpKQogCQkJb3ByZWdpb25fYXNsZV9pbnRyKGRldik7CiAKQEAgLTEyMzMsMTYgKzEyMjksMjEgQEAKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gKHN0cnVjdCBkcm1fZGV2aWNlICopZGF0YTsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1aW50MzJfdCBhY3RoZDsKKwl1aW50MzJfdCBhY3RoZCwgaW5zdGRvbmUsIGluc3Rkb25lMTsKIAogCS8qIE5vIHJlc2V0IHN1cHBvcnQgb24gdGhpcyBjaGlwIHlldC4gKi8KIAlpZiAoSVNfR0VONihkZXYpKQogCQlyZXR1cm47CiAKLQlpZiAoIUlTX0k5NjVHKGRldikpCisJaWYgKCFJU19JOTY1RyhkZXYpKSB7CiAJCWFjdGhkID0gSTkxNV9SRUFEKEFDVEhEKTsKLQllbHNlCisJCWluc3Rkb25lID0gSTkxNV9SRUFEKElOU1RET05FKTsKKwkJaW5zdGRvbmUxID0gMDsKKwl9IGVsc2UgewogCQlhY3RoZCA9IEk5MTVfUkVBRChBQ1RIRF9JOTY1KTsKKwkJaW5zdGRvbmUgPSBJOTE1X1JFQUQoSU5TVERPTkVfSTk2NSk7CisJCWluc3Rkb25lMSA9IEk5MTVfUkVBRChJTlNURE9ORTEpOworCX0KIAogCS8qIElmIGFsbCB3b3JrIGlzIGRvbmUgdGhlbiBBQ1RIRCBjbGVhcmx5IGhhc24ndCBhZHZhbmNlZC4gKi8KIAlpZiAobGlzdF9lbXB0eSgmZGV2X3ByaXYtPnJlbmRlcl9yaW5nLnJlcXVlc3RfbGlzdCkgfHwKQEAgLTEyNTMsMjEgKzEyNTQsMjQgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChkZXZfcHJpdi0+bGFzdF9hY3RoZCA9PSBhY3RoZCAmJiBkZXZfcHJpdi0+aGFuZ2NoZWNrX2NvdW50ID4gMCkgewotCQlEUk1fRVJST1IoIkhhbmdjaGVjayB0aW1lciBlbGFwc2VkLi4uIEdQVSBodW5nXG4iKTsKLQkJaTkxNV9oYW5kbGVfZXJyb3IoZGV2LCB0cnVlKTsKLQkJcmV0dXJuOwotCX0gCisJaWYgKGRldl9wcml2LT5sYXN0X2FjdGhkID09IGFjdGhkICYmCisJICAgIGRldl9wcml2LT5sYXN0X2luc3Rkb25lID09IGluc3Rkb25lICYmCisJICAgIGRldl9wcml2LT5sYXN0X2luc3Rkb25lMSA9PSBpbnN0ZG9uZTEpIHsKKwkJaWYgKGRldl9wcml2LT5oYW5nY2hlY2tfY291bnQrKyA+IDEpIHsKKwkJCURSTV9FUlJPUigiSGFuZ2NoZWNrIHRpbWVyIGVsYXBzZWQuLi4gR1BVIGh1bmdcbiIpOworCQkJaTkxNV9oYW5kbGVfZXJyb3IoZGV2LCB0cnVlKTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZSB7CisJCWRldl9wcml2LT5oYW5nY2hlY2tfY291bnQgPSAwOworCisJCWRldl9wcml2LT5sYXN0X2FjdGhkID0gYWN0aGQ7CisJCWRldl9wcml2LT5sYXN0X2luc3Rkb25lID0gaW5zdGRvbmU7CisJCWRldl9wcml2LT5sYXN0X2luc3Rkb25lMSA9IGluc3Rkb25lMTsKKwl9CiAKIAkvKiBSZXNldCB0aW1lciBjYXNlIGNoaXAgaGFuZ3Mgd2l0aG91dCBhbm90aGVyIHJlcXVlc3QgYmVpbmcgYWRkZWQgKi8KIAltb2RfdGltZXIoJmRldl9wcml2LT5oYW5nY2hlY2tfdGltZXIsIGppZmZpZXMgKyBEUk1fSTkxNV9IQU5HQ0hFQ0tfUEVSSU9EKTsKLQotCWlmIChhY3RoZCAhPSBkZXZfcHJpdi0+bGFzdF9hY3RoZCkKLQkJZGV2X3ByaXYtPmhhbmdjaGVja19jb3VudCA9IDA7Ci0JZWxzZQotCQlkZXZfcHJpdi0+aGFuZ2NoZWNrX2NvdW50Kys7Ci0KLQlkZXZfcHJpdi0+bGFzdF9hY3RoZCA9IGFjdGhkOwogfQogCiAvKiBkcm1fZG1hLmggaG9va3MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCmluZGV4IDE1MDQwMGYuLjI4MWRiNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaApAQCAtMzU5LDYgKzM1OSw3MCBAQAogI2RlZmluZSBMTV9CVVJTVF9MRU5HVEggICAgIDB4MDAwMDA3MDAKICNkZWZpbmUgTE1fRklGT19XQVRFUk1BUksgICAweDAwMDAwMDFGCiAjZGVmaW5lIE1JX0FSQl9TVEFURQkweDAyMGU0IC8qIDkxNSsgb25seSAqLworI2RlZmluZSAgIE1JX0FSQl9NQVNLX1NISUZUCSAgMTYJLyogc2hpZnQgZm9yIGVuYWJsZSBiaXRzICovCisKKy8qIE1ha2UgcmVuZGVyL3RleHR1cmUgVExCIGZldGNoZXMgbG93ZXIgcHJpb3J0eSB0aGFuIGFzc29jaWF0ZWQgZGF0YQorICogICBmZXRjaGVzLiBUaGlzIGlzIG5vdCB0dXJuZWQgb24gYnkgZGVmYXVsdAorICovCisjZGVmaW5lICAgTUlfQVJCX1JFTkRFUl9UTEJfTE9XX1BSSU9SSVRZCSgxIDw8IDE1KQorCisvKiBJc29jaCByZXF1ZXN0IHdhaXQgb24gR1RUIGVuYWJsZSAoRGlzcGxheSBBL0IvQyBzdHJlYW1zKS4KKyAqIE1ha2UgaXNvY2ggcmVxdWVzdHMgc3RhbGwgb24gdGhlIFRMQiB1cGRhdGUuIE1heSBjYXVzZQorICogZGlzcGxheSB1bmRlcnJ1bnMgKHRlc3QgbW9kZSBvbmx5KQorICovCisjZGVmaW5lICAgTUlfQVJCX0lTT0NIX1dBSVRfR1RUCQkJKDEgPDwgMTQpCisKKy8qIEJsb2NrIGdyYW50IGNvdW50IGZvciBpc29jaCByZXF1ZXN0cyB3aGVuIGJsb2NrIGNvdW50IGlzCisgKiBzZXQgdG8gYSBmaW5pdGUgdmFsdWUuCisgKi8KKyNkZWZpbmUgICBNSV9BUkJfQkxPQ0tfR1JBTlRfTUFTSwkJKDMgPDwgMTIpCisjZGVmaW5lICAgTUlfQVJCX0JMT0NLX0dSQU5UXzgJCQkoMCA8PCAxMikJLyogZm9yIDMgZGlzcGxheSBwbGFuZXMgKi8KKyNkZWZpbmUgICBNSV9BUkJfQkxPQ0tfR1JBTlRfNAkJCSgxIDw8IDEyKQkvKiBmb3IgMiBkaXNwbGF5IHBsYW5lcyAqLworI2RlZmluZSAgIE1JX0FSQl9CTE9DS19HUkFOVF8yCQkJKDIgPDwgMTIpCS8qIGZvciAxIGRpc3BsYXkgcGxhbmUgKi8KKyNkZWZpbmUgICBNSV9BUkJfQkxPQ0tfR1JBTlRfMAkJCSgzIDw8IDEyKQkvKiBkb24ndCB1c2UgKi8KKworLyogRW5hYmxlIHJlbmRlciB3cml0ZXMgdG8gY29tcGxldGUgaW4gQzIvQzMvQzQgcG93ZXIgc3RhdGVzLgorICogSWYgdGhpcyBpc24ndCBlbmFibGVkLCByZW5kZXIgd3JpdGVzIGFyZSBwcmV2ZW50ZWQgaW4gbG93CisgKiBwb3dlciBzdGF0ZXMuIFRoYXQgc2VlbXMgYmFkIHRvIG1lLgorICovCisjZGVmaW5lICAgTUlfQVJCX0MzX0xQX1dSSVRFX0VOQUJMRQkJKDEgPDwgMTEpCisKKy8qIFRoaXMgYWNrbm93bGVkZ2VzIGFuIGFzeW5jIGZsaXAgaW1tZWRpYXRlbHkgaW5zdGVhZAorICogb2Ygd2FpdGluZyBmb3IgMlRMQiBmZXRjaGVzLgorICovCisjZGVmaW5lICAgTUlfQVJCX0FTWU5DX0ZMSVBfQUNLX0lNTUVESUFURQkoMSA8PCAxMCkKKworLyogRW5hYmxlcyBub24tc2VxdWVudGlhbCBkYXRhIHJlYWRzIHRocm91Z2ggYXJiaXRlcgorICovCisjZGVmaW5lICAgTUlfQVJCX0RVQUxfREFUQV9QSEFTRV9ESVNBQkxFICAgICAgIAkoMSA8PCA5KQorCisvKiBEaXNhYmxlIEZTQiBzbm9vcGluZyBvZiBjYWNoZWFibGUgd3JpdGUgY3ljbGVzIGZyb20gYmlubmVyL3JlbmRlcgorICogY29tbWFuZCBzdHJlYW0KKyAqLworI2RlZmluZSAgIE1JX0FSQl9DQUNIRV9TTk9PUF9ESVNBQkxFCQkoMSA8PCA4KQorCisvKiBBcmJpdGVyIHRpbWUgc2xpY2UgZm9yIG5vbi1pc29jaCBzdHJlYW1zICovCisjZGVmaW5lICAgTUlfQVJCX1RJTUVfU0xJQ0VfTUFTSwkJKDcgPDwgNSkKKyNkZWZpbmUgICBNSV9BUkJfVElNRV9TTElDRV8xCQkJKDAgPDwgNSkKKyNkZWZpbmUgICBNSV9BUkJfVElNRV9TTElDRV8yCQkJKDEgPDwgNSkKKyNkZWZpbmUgICBNSV9BUkJfVElNRV9TTElDRV80CQkJKDIgPDwgNSkKKyNkZWZpbmUgICBNSV9BUkJfVElNRV9TTElDRV82CQkJKDMgPDwgNSkKKyNkZWZpbmUgICBNSV9BUkJfVElNRV9TTElDRV84CQkJKDQgPDwgNSkKKyNkZWZpbmUgICBNSV9BUkJfVElNRV9TTElDRV8xMAkJCSg1IDw8IDUpCisjZGVmaW5lICAgTUlfQVJCX1RJTUVfU0xJQ0VfMTQJCQkoNiA8PCA1KQorI2RlZmluZSAgIE1JX0FSQl9USU1FX1NMSUNFXzE2CQkJKDcgPDwgNSkKKworLyogTG93IHByaW9yaXR5IGdyYWNlIHBlcmlvZCBwYWdlIHNpemUgKi8KKyNkZWZpbmUgICBNSV9BUkJfTE9XX1BSSU9SSVRZX0dSQUNFXzRLQgkJKDAgPDwgNCkJLyogZGVmYXVsdCAqLworI2RlZmluZSAgIE1JX0FSQl9MT1dfUFJJT1JJVFlfR1JBQ0VfOEtCCQkoMSA8PCA0KQorCisvKiBEaXNhYmxlIGRpc3BsYXkgQS9CIHRyaWNrbGUgZmVlZCAqLworI2RlZmluZSAgIE1JX0FSQl9ESVNQTEFZX1RSSUNLTEVfRkVFRF9ESVNBQkxFCSgxIDw8IDIpCisKKy8qIFNldCBkaXNwbGF5IHBsYW5lIHByaW9yaXR5ICovCisjZGVmaW5lICAgTUlfQVJCX0RJU1BMQVlfUFJJT1JJVFlfQV9CCQkoMCA8PCAwKQkvKiBkaXNwbGF5IEEgPiBkaXNwbGF5IEIgKi8KKyNkZWZpbmUgICBNSV9BUkJfRElTUExBWV9QUklPUklUWV9CX0EJCSgxIDw8IDApCS8qIGRpc3BsYXkgQiA+IGRpc3BsYXkgQSAqLworCiAjZGVmaW5lIENBQ0hFX01PREVfMAkweDAyMTIwIC8qIDkxNSsgb25seSAqLwogI2RlZmluZSAgIENNMF9NQVNLX1NISUZUICAgICAgICAgIDE2CiAjZGVmaW5lICAgQ00wX0laX09QVF9ESVNBQkxFICAgICAgKDE8PDYpCkBAIC0zNzgsNyArNDQyLDcgQEAKICNkZWZpbmUgR0VONl9SRU5ERVJfSU1SCQkweDIwYTgKICNkZWZpbmUgICBHRU42X1JFTkRFUl9DT05URVhUX1NXSVRDSF9JTlRFUlJVUFQJCSgxIDw8IDgpCiAjZGVmaW5lICAgR0VONl9SRU5ERVJfUFBHVFRfUEFHRV9GQVVMVAkJCSgxIDw8IDcpCi0jZGVmaW5lICAgR0VONl9SRU5ERVIgVElNRU9VVF9DT1VOVEVSX0VYUElSRUQJCSgxIDw8IDYpCisjZGVmaW5lICAgR0VONl9SRU5ERVJfVElNRU9VVF9DT1VOVEVSX0VYUElSRUQJCSgxIDw8IDYpCiAjZGVmaW5lICAgR0VONl9SRU5ERVJfTDNfUEFSSVRZX0VSUk9SCQkJKDEgPDwgNSkKICNkZWZpbmUgICBHRU42X1JFTkRFUl9QSVBFX0NPTlRST0xfTk9USUZZX0lOVEVSUlVQVAkoMSA8PCA0KQogI2RlZmluZSAgIEdFTjZfUkVOREVSX0NPTU1BTkRfUEFSU0VSX01BU1RFUl9FUlJPUgkoMSA8PCAzKQpAQCAtNDY2LDYgKzUzMCwyMSBAQAogI2RlZmluZSBEUEZDX0NISUNLRU4JCTB4MzIyNAogI2RlZmluZSAgIERQRkNfSFRfTU9ESUZZCSgxPDwzMSkKIAorLyogRnJhbWVidWZmZXIgY29tcHJlc3Npb24gZm9yIElyb25sYWtlICovCisjZGVmaW5lIElMS19EUEZDX0NCX0JBU0UJMHg0MzIwMAorI2RlZmluZSBJTEtfRFBGQ19DT05UUk9MCTB4NDMyMDgKKy8qIFRoZSBiaXQgMjgtOCBpcyByZXNlcnZlZCAqLworI2RlZmluZSAgIERQRkNfUkVTRVJWRUQJCSgweDFGRkZGRjAwKQorI2RlZmluZSBJTEtfRFBGQ19SRUNPTVBfQ1RMCTB4NDMyMGMKKyNkZWZpbmUgSUxLX0RQRkNfU1RBVFVTCQkweDQzMjEwCisjZGVmaW5lIElMS19EUEZDX0ZFTkNFX1lPRkYJMHg0MzIxOAorI2RlZmluZSBJTEtfRFBGQ19DSElDS0VOCTB4NDMyMjQKKyNkZWZpbmUgSUxLX0ZCQ19SVF9CQVNFCQkweDIxMjgKKyNkZWZpbmUgICBJTEtfRkJDX1JUX1ZBTElECSgxPDwwKQorCisjZGVmaW5lIElMS19ESVNQTEFZX0NISUNLRU4xCTB4NDIwMDAKKyNkZWZpbmUgICBJTEtfRkJDUV9ESVMJCSgxPDwyMikKKwogLyoKICAqIEdQSU8gcmVncwogICovCkBAIC01MzEsMzIgKzYxMCw2IEBACiAjZGVmaW5lICAgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9NQVNLCTB4MDBmZjAwMDAgLyogaTkxNSAqLwogI2RlZmluZSAgIERQTExfRlBBMDFfUDFfUE9TVF9ESVZfTUFTS19QSU5FVklFVwkweDAwZmY4MDAwIC8qIFBpbmV2aWV3ICovCiAKLSNkZWZpbmUgSTkxNV9GSUZPX1VOREVSUlVOX1NUQVRVUwkJKDFVTDw8MzEpCi0jZGVmaW5lIEk5MTVfQ1JDX0VSUk9SX0VOQUJMRQkJCSgxVUw8PDI5KQotI2RlZmluZSBJOTE1X0NSQ19ET05FX0VOQUJMRQkJCSgxVUw8PDI4KQotI2RlZmluZSBJOTE1X0dNQlVTX0VWRU5UX0VOQUJMRQkJCSgxVUw8PDI3KQotI2RlZmluZSBJOTE1X1ZTWU5DX0lOVEVSUlVQVF9FTkFCTEUJCSgxVUw8PDI1KQotI2RlZmluZSBJOTE1X0RJU1BMQVlfTElORV9DT01QQVJFX0VOQUJMRQkoMVVMPDwyNCkKLSNkZWZpbmUgSTkxNV9EUFNUX0VWRU5UX0VOQUJMRQkJCSgxVUw8PDIzKQotI2RlZmluZSBJOTE1X0xFR0FDWV9CTENfRVZFTlRfRU5BQkxFCQkoMVVMPDwyMikKLSNkZWZpbmUgSTkxNV9PRERfRklFTERfSU5URVJSVVBUX0VOQUJMRQkJKDFVTDw8MjEpCi0jZGVmaW5lIEk5MTVfRVZFTl9GSUVMRF9JTlRFUlJVUFRfRU5BQkxFCSgxVUw8PDIwKQotI2RlZmluZSBJOTE1X1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFCSgxVUw8PDE4KQkvKiA5NjUgb3IgbGF0ZXIgKi8KLSNkZWZpbmUgSTkxNV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRQkJKDFVTDw8MTcpCi0jZGVmaW5lIEk5MTVfT1ZFUkxBWV9VUERBVEVEX0VOQUJMRQkJKDFVTDw8MTYpCi0jZGVmaW5lIEk5MTVfQ1JDX0VSUk9SX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDEzKQotI2RlZmluZSBJOTE1X0NSQ19ET05FX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDEyKQotI2RlZmluZSBJOTE1X0dNQlVTX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDExKQotI2RlZmluZSBJOTE1X1ZTWU5DX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDkpCi0jZGVmaW5lIEk5MTVfRElTUExBWV9MSU5FX0NPTVBBUkVfU1RBVFVTCSgxVUw8PDgpCi0jZGVmaW5lIEk5MTVfRFBTVF9FVkVOVF9TVEFUVVMJCQkoMVVMPDw3KQotI2RlZmluZSBJOTE1X0xFR0FDWV9CTENfRVZFTlRfU1RBVFVTCQkoMVVMPDw2KQotI2RlZmluZSBJOTE1X09ERF9GSUVMRF9JTlRFUlJVUFRfU1RBVFVTCQkoMVVMPDw1KQotI2RlZmluZSBJOTE1X0VWRU5fRklFTERfSU5URVJSVVBUX1NUQVRVUwkoMVVMPDw0KQotI2RlZmluZSBJOTE1X1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTCSgxVUw8PDIpCS8qIDk2NSBvciBsYXRlciAqLwotI2RlZmluZSBJOTE1X1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTCQkoMVVMPDwxKQotI2RlZmluZSBJOTE1X09WRVJMQVlfVVBEQVRFRF9TVEFUVVMJCSgxVUw8PDApCi0KICNkZWZpbmUgU1JYX0lOREVYCQkweDNjNAogI2RlZmluZSBTUlhfREFUQQkJMHgzYzUKICNkZWZpbmUgU1IwMQkJCTEKQEAgLTIxMDIsNyArMjE1NSw4IEBACiAjZGVmaW5lIEk4MzBfRklGT19MSU5FX1NJWkUJMzIKIAogI2RlZmluZSBHNFhfRklGT19TSVpFCQkxMjcKLSNkZWZpbmUgSTk0NV9GSUZPX1NJWkUJCTEyNyAvKiA5NDUgJiA5NjUgKi8KKyNkZWZpbmUgSTk2NV9GSUZPX1NJWkUJCTUxMgorI2RlZmluZSBJOTQ1X0ZJRk9fU0laRQkJMTI3CiAjZGVmaW5lIEk5MTVfRklGT19TSVpFCQk5NQogI2RlZmluZSBJODU1R01fRklGT19TSVpFCTEyNyAvKiBJbiBjYWNoZWxpbmVzICovCiAjZGVmaW5lIEk4MzBfRklGT19TSVpFCQk5NQpAQCAtMjEyMSw2ICsyMTc1LDkgQEAKICNkZWZpbmUgUElORVZJRVdfQ1VSU09SX0RGVF9XTQkwCiAjZGVmaW5lIFBJTkVWSUVXX0NVUlNPUl9HVUFSRF9XTQk1CiAKKyNkZWZpbmUgSTk2NV9DVVJTT1JfRklGTwk2NAorI2RlZmluZSBJOTY1X0NVUlNPUl9NQVhfV00JMzIKKyNkZWZpbmUgSTk2NV9DVVJTT1JfREZUX1dNCTgKIAogLyogZGVmaW5lIHRoZSBXYXRlcm1hcmsgcmVnaXN0ZXIgb24gSXJvbmxha2UgKi8KICNkZWZpbmUgV00wX1BJUEVBX0lMSwkJMHg0NTEwMApAQCAtMjE0OCw2ICsyMjA1LDkgQEAKICNkZWZpbmUgSUxLX0RJU1BMQVlfRklGTwkxMjgKICNkZWZpbmUgSUxLX0RJU1BMQVlfTUFYV00JNjQKICNkZWZpbmUgSUxLX0RJU1BMQVlfREZUV00JOAorI2RlZmluZSBJTEtfQ1VSU09SX0ZJRk8JCTMyCisjZGVmaW5lIElMS19DVVJTT1JfTUFYV00JMTYKKyNkZWZpbmUgSUxLX0NVUlNPUl9ERlRXTQk4CiAKICNkZWZpbmUgSUxLX0RJU1BMQVlfU1JfRklGTwk1MTIKICNkZWZpbmUgSUxLX0RJU1BMQVlfTUFYX1NSV00JMHgxZmYKQEAgLTI0NDYsNiArMjUwNiwxMCBAQAogI2RlZmluZSAgSUxLX1ZTRFBGRF9GVUxMCSgxPDwyMSkKICNkZWZpbmUgSUxLX0RTUENMS19HQVRFCQkweDQyMDIwCiAjZGVmaW5lICBJTEtfRFBBUkJfQ0xLX0dBVEUJKDE8PDUpCisvKiBBY2NvcmRpbmcgdG8gc3BlYyB0aGlzIGJpdCA3LzgvOSBvZiAweDQyMDIwIHNob3VsZCBiZSBzZXQgdG8gZW5hYmxlIEZCQyAqLworI2RlZmluZSAgIElMS19DTEtfRkJDCQkoMTw8NykKKyNkZWZpbmUgICBJTEtfRFBGQ19ESVMxCQkoMTw8OCkKKyNkZWZpbmUgICBJTEtfRFBGQ19ESVMyCQkoMTw8OSkKIAogI2RlZmluZSBESVNQX0FSQl9DVEwJMHg0NTAwMAogI2RlZmluZSAgRElTUF9USUxFX1NVUkZBQ0VfU1dJWlpMSU5HCSgxPDwxMykKQEAgLTI4MDUsNiArMjg2OSw3IEBACiAKICNkZWZpbmUgUENIX1BQX1NUQVRVUwkJMHhjNzIwMAogI2RlZmluZSBQQ0hfUFBfQ09OVFJPTAkJMHhjNzIwNAorI2RlZmluZSAgUEFORUxfVU5MT0NLX1JFR1MJKDB4YWJjZCA8PCAxNikKICNkZWZpbmUgIEVEUF9GT1JDRV9WREQJCSgxIDw8IDMpCiAjZGVmaW5lICBFRFBfQkxDX0VOQUJMRQkJKDEgPDwgMikKICNkZWZpbmUgIFBBTkVMX1BPV0VSX1JFU0VUCSgxIDw8IDEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N1c3BlbmQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jCmluZGV4IDYwYTU4MDAuLjZlMjAyNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jCkBAIC02MDIsNyArNjAyLDkgQEAKIAogCS8qIE9ubHkgc2F2ZSBGQkMgc3RhdGUgb24gdGhlIHBsYXRmb3JtIHRoYXQgc3VwcG9ydHMgRkJDICovCiAJaWYgKEk5MTVfSEFTX0ZCQyhkZXYpKSB7Ci0JCWlmIChJU19HTTQ1KGRldikpIHsKKwkJaWYgKElTX0lST05MQUtFX00oZGV2KSkgeworCQkJZGV2X3ByaXYtPnNhdmVEUEZDX0NCX0JBU0UgPSBJOTE1X1JFQUQoSUxLX0RQRkNfQ0JfQkFTRSk7CisJCX0gZWxzZSBpZiAoSVNfR000NShkZXYpKSB7CiAJCQlkZXZfcHJpdi0+c2F2ZURQRkNfQ0JfQkFTRSA9IEk5MTVfUkVBRChEUEZDX0NCX0JBU0UpOwogCQl9IGVsc2UgewogCQkJZGV2X3ByaXYtPnNhdmVGQkNfQ0ZCX0JBU0UgPSBJOTE1X1JFQUQoRkJDX0NGQl9CQVNFKTsKQEAgLTcwNiw3ICs3MDgsMTAgQEAKIAogCS8qIG9ubHkgcmVzdG9yZSBGQkMgaW5mbyBvbiB0aGUgcGxhdGZvcm0gdGhhdCBzdXBwb3J0cyBGQkMqLwogCWlmIChJOTE1X0hBU19GQkMoZGV2KSkgewotCQlpZiAoSVNfR000NShkZXYpKSB7CisJCWlmIChJU19JUk9OTEFLRV9NKGRldikpIHsKKwkJCWlyb25sYWtlX2Rpc2FibGVfZmJjKGRldik7CisJCQlJOTE1X1dSSVRFKElMS19EUEZDX0NCX0JBU0UsIGRldl9wcml2LT5zYXZlRFBGQ19DQl9CQVNFKTsKKwkJfSBlbHNlIGlmIChJU19HTTQ1KGRldikpIHsKIAkJCWc0eF9kaXNhYmxlX2ZiYyhkZXYpOwogCQkJSTkxNV9XUklURShEUEZDX0NCX0JBU0UsIGRldl9wcml2LT5zYXZlRFBGQ19DQl9CQVNFKTsKIAkJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdHJhY2UuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdHJhY2UuaAppbmRleCBmYWIyMTc2Li5mZWE5N2EyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3RyYWNlLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90cmFjZS5oCkBAIC0yNjIsNiArMjYyLDQyIEBACiAJICAgIFRQX0FSR1MoZGV2KQogKTsKIAorVFJBQ0VfRVZFTlQoaTkxNV9mbGlwX3JlcXVlc3QsCisJICAgIFRQX1BST1RPKGludCBwbGFuZSwgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopLAorCisJICAgIFRQX0FSR1MocGxhbmUsIG9iaiksCisKKwkgICAgVFBfU1RSVUNUX19lbnRyeSgKKwkJICAgIF9fZmllbGQoaW50LCBwbGFuZSkKKwkJICAgIF9fZmllbGQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICosIG9iaikKKwkJICAgICksCisKKwkgICAgVFBfZmFzdF9hc3NpZ24oCisJCSAgICBfX2VudHJ5LT5wbGFuZSA9IHBsYW5lOworCQkgICAgX19lbnRyeS0+b2JqID0gb2JqOworCQkgICAgKSwKKworCSAgICBUUF9wcmludGsoInBsYW5lPSVkLCBvYmo9JXAiLCBfX2VudHJ5LT5wbGFuZSwgX19lbnRyeS0+b2JqKQorKTsKKworVFJBQ0VfRVZFTlQoaTkxNV9mbGlwX2NvbXBsZXRlLAorCSAgICBUUF9QUk9UTyhpbnQgcGxhbmUsIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKSwKKworCSAgICBUUF9BUkdTKHBsYW5lLCBvYmopLAorCisJICAgIFRQX1NUUlVDVF9fZW50cnkoCisJCSAgICBfX2ZpZWxkKGludCwgcGxhbmUpCisJCSAgICBfX2ZpZWxkKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqLCBvYmopCisJCSAgICApLAorCisJICAgIFRQX2Zhc3RfYXNzaWduKAorCQkgICAgX19lbnRyeS0+cGxhbmUgPSBwbGFuZTsKKwkJICAgIF9fZW50cnktPm9iaiA9IG9iajsKKwkJICAgICksCisKKwkgICAgVFBfcHJpbnRrKCJwbGFuZT0lZCwgb2JqPSVwIiwgX19lbnRyeS0+cGxhbmUsIF9fZW50cnktPm9iaikKKyk7CisKICNlbmRpZiAvKiBfSTkxNV9UUkFDRV9IXyAqLwogCiAvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwppbmRleCA2OGRjZjM2Li4xZTVlMGQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCiAjaW5jbHVkZSAiaTkxNV9kcm0uaCIKICNpbmNsdWRlICJpOTE1X2Rydi5oIgorI2luY2x1ZGUgImk5MTVfdHJhY2UuaCIKICNpbmNsdWRlICJkcm1fZHBfaGVscGVyLmgiCiAKICNpbmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKQEAgLTQyLDYgKzQzLDcgQEAKIGJvb2wgaW50ZWxfcGlwZV9oYXNfdHlwZSAoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgdHlwZSk7CiBzdGF0aWMgdm9pZCBpbnRlbF91cGRhdGVfd2F0ZXJtYXJrcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGludGVsX2luY3JlYXNlX3BsbGNsb2NrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgYm9vbCBzY2hlZHVsZSk7CitzdGF0aWMgdm9pZCBpbnRlbF9jcnRjX3VwZGF0ZV9jdXJzb3Ioc3RydWN0IGRybV9jcnRjICpjcnRjKTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIC8qIGdpdmVuIHZhbHVlcyAqLwpAQCAtMzIyLDYgKzMyNCw5IEBACiAjZGVmaW5lIElST05MQUtFX0RQX1AxX01JTgkJMQogI2RlZmluZSBJUk9OTEFLRV9EUF9QMV9NQVgJCTIKIAorLyogRkRJICovCisjZGVmaW5lIElST05MQUtFX0ZESV9GUkVRCQkyNzAwMDAwIC8qIGluIGtIeiBmb3IgbW9kZS0+Y2xvY2sgKi8KKwogc3RhdGljIGJvb2wKIGludGVsX2ZpbmRfYmVzdF9QTEwoY29uc3QgaW50ZWxfbGltaXRfdCAqbGltaXQsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJICAgIGludCB0YXJnZXQsIGludCByZWZjbGssIGludGVsX2Nsb2NrX3QgKmJlc3RfY2xvY2spOwpAQCAtODYyLDggKzg2Nyw4IEBACiAJaW50ZWxfY2xvY2tfdCBjbG9jazsKIAlpbnQgbWF4X247CiAJYm9vbCBmb3VuZDsKLQkvKiBhcHByb3hpbWF0ZWx5IGVxdWFscyB0YXJnZXQgKiAwLjAwNDg4ICovCi0JaW50IGVycl9tb3N0ID0gKHRhcmdldCA+PiA4KSArICh0YXJnZXQgPj4gMTApOworCS8qIGFwcHJveGltYXRlbHkgZXF1YWxzIHRhcmdldCAqIDAuMDA1ODUgKi8KKwlpbnQgZXJyX21vc3QgPSAodGFyZ2V0ID4+IDgpICsgKHRhcmdldCA+PiA5KTsKIAlmb3VuZCA9IGZhbHNlOwogCiAJaWYgKGludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX0xWRFMpKSB7CkBAIC05NzUsNyArOTgwLDEwIEBACiBpbnRlbF93YWl0X2Zvcl92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAkvKiBXYWl0IGZvciAyMG1zLCBpLmUuIG9uZSBjeWNsZSBhdCA1MGh6LiAqLwotCW1zbGVlcCgyMCk7CisJaWYgKGluX2RiZ19tYXN0ZXIoKSkKKwkJbWRlbGF5KDIwKTsgLyogVGhlIGtlcm5lbCBkZWJ1Z2dlciBjYW5ub3QgY2FsbCBtc2xlZXAoKSAqLworCWVsc2UKKwkJbXNsZWVwKDIwKTsKIH0KIAogLyogUGFyYW1ldGVycyBoYXZlIGNoYW5nZWQsIHVwZGF0ZSBGQkMgaW5mbyAqLwpAQCAtMTEyMiw2ICsxMTMwLDY3IEBACiAJcmV0dXJuIEk5MTVfUkVBRChEUEZDX0NPTlRST0wpICYgRFBGQ19DVExfRU47CiB9CiAKK3N0YXRpYyB2b2lkIGlyb25sYWtlX2VuYWJsZV9mYmMoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1bnNpZ25lZCBsb25nIGludGVydmFsKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IGNydGMtPmZiOworCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYik7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gdG9faW50ZWxfYm8oaW50ZWxfZmItPm9iaik7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCWludCBwbGFuZSA9IChpbnRlbF9jcnRjLT5wbGFuZSA9PSAwKSA/IERQRkNfQ1RMX1BMQU5FQSA6CisJCQkJCSAgICAgICBEUEZDX0NUTF9QTEFORUI7CisJdW5zaWduZWQgbG9uZyBzdGFsbF93YXRlcm1hcmsgPSAyMDA7CisJdTMyIGRwZmNfY3RsOworCisJZGV2X3ByaXYtPmNmYl9waXRjaCA9IChkZXZfcHJpdi0+Y2ZiX3BpdGNoIC8gNjQpIC0gMTsKKwlkZXZfcHJpdi0+Y2ZiX2ZlbmNlID0gb2JqX3ByaXYtPmZlbmNlX3JlZzsKKwlkZXZfcHJpdi0+Y2ZiX3BsYW5lID0gaW50ZWxfY3J0Yy0+cGxhbmU7CisKKwlkcGZjX2N0bCA9IEk5MTVfUkVBRChJTEtfRFBGQ19DT05UUk9MKTsKKwlkcGZjX2N0bCAmPSBEUEZDX1JFU0VSVkVEOworCWRwZmNfY3RsIHw9IChwbGFuZSB8IERQRkNfQ1RMX0xJTUlUXzFYKTsKKwlpZiAob2JqX3ByaXYtPnRpbGluZ19tb2RlICE9IEk5MTVfVElMSU5HX05PTkUpIHsKKwkJZHBmY19jdGwgfD0gKERQRkNfQ1RMX0ZFTkNFX0VOIHwgZGV2X3ByaXYtPmNmYl9mZW5jZSk7CisJCUk5MTVfV1JJVEUoSUxLX0RQRkNfQ0hJQ0tFTiwgRFBGQ19IVF9NT0RJRlkpOworCX0gZWxzZSB7CisJCUk5MTVfV1JJVEUoSUxLX0RQRkNfQ0hJQ0tFTiwgfkRQRkNfSFRfTU9ESUZZKTsKKwl9CisKKwlJOTE1X1dSSVRFKElMS19EUEZDX0NPTlRST0wsIGRwZmNfY3RsKTsKKwlJOTE1X1dSSVRFKElMS19EUEZDX1JFQ09NUF9DVEwsIERQRkNfUkVDT01QX1NUQUxMX0VOIHwKKwkJICAgKHN0YWxsX3dhdGVybWFyayA8PCBEUEZDX1JFQ09NUF9TVEFMTF9XTV9TSElGVCkgfAorCQkgICAoaW50ZXJ2YWwgPDwgRFBGQ19SRUNPTVBfVElNRVJfQ09VTlRfU0hJRlQpKTsKKwlJOTE1X1dSSVRFKElMS19EUEZDX0ZFTkNFX1lPRkYsIGNydGMtPnkpOworCUk5MTVfV1JJVEUoSUxLX0ZCQ19SVF9CQVNFLCBvYmpfcHJpdi0+Z3R0X29mZnNldCB8IElMS19GQkNfUlRfVkFMSUQpOworCS8qIGVuYWJsZSBpdC4uLiAqLworCUk5MTVfV1JJVEUoSUxLX0RQRkNfQ09OVFJPTCwgSTkxNV9SRUFEKElMS19EUEZDX0NPTlRST0wpIHwKKwkJICAgRFBGQ19DVExfRU4pOworCisJRFJNX0RFQlVHX0tNUygiZW5hYmxlZCBmYmMgb24gcGxhbmUgJWRcbiIsIGludGVsX2NydGMtPnBsYW5lKTsKK30KKwordm9pZCBpcm9ubGFrZV9kaXNhYmxlX2ZiYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyIGRwZmNfY3RsOworCisJLyogRGlzYWJsZSBjb21wcmVzc2lvbiAqLworCWRwZmNfY3RsID0gSTkxNV9SRUFEKElMS19EUEZDX0NPTlRST0wpOworCWRwZmNfY3RsICY9IH5EUEZDX0NUTF9FTjsKKwlJOTE1X1dSSVRFKElMS19EUEZDX0NPTlRST0wsIGRwZmNfY3RsKTsKKwlpbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2KTsKKworCURSTV9ERUJVR19LTVMoImRpc2FibGVkIEZCQ1xuIik7Cit9CisKK3N0YXRpYyBib29sIGlyb25sYWtlX2ZiY19lbmFibGVkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCXJldHVybiBJOTE1X1JFQUQoSUxLX0RQRkNfQ09OVFJPTCkgJiBEUEZDX0NUTF9FTjsKK30KKwogYm9vbCBpbnRlbF9mYmNfZW5hYmxlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0xMTgwLDggKzEyNDksMTIgQEAKIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IGNydGMtPmZiOwogCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmI7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCXN0cnVjdCBkcm1fY3J0YyAqdG1wX2NydGM7CiAJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwogCWludCBwbGFuZSA9IGludGVsX2NydGMtPnBsYW5lOworCWludCBjcnRjc19lbmFibGVkID0gMDsKKworCURSTV9ERUJVR19LTVMoIlxuIik7CiAKIAlpZiAoIWk5MTVfcG93ZXJzYXZlKQogCQlyZXR1cm47CkBAIC0xMTk5LDEwICsxMjcyLDIxIEBACiAJICogSWYgRkJDIGlzIGFscmVhZHkgb24sIHdlIGp1c3QgaGF2ZSB0byB2ZXJpZnkgdGhhdCB3ZSBjYW4KIAkgKiBrZWVwIGl0IHRoYXQgd2F5Li4uCiAJICogTmVlZCB0byBkaXNhYmxlIGlmOgorCSAqICAgLSBtb3JlIHRoYW4gb25lIHBpcGUgaXMgYWN0aXZlCiAJICogICAtIGNoYW5naW5nIEZCQyBwYXJhbXMgKHN0cmlkZSwgZmVuY2UsIG1vZGUpCiAJICogICAtIG5ldyBmYiBpcyB0b28gbGFyZ2UgdG8gZml0IGluIGNvbXByZXNzZWQgYnVmZmVyCiAJICogICAtIGdvaW5nIHRvIGFuIHVuc3VwcG9ydGVkIGNvbmZpZyAoaW50ZXJsYWNlLCBwaXhlbCBtdWx0aXBseSwgZXRjLikKIAkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcF9jcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKKwkJaWYgKHRtcF9jcnRjLT5lbmFibGVkKQorCQkJY3J0Y3NfZW5hYmxlZCsrOworCX0KKwlEUk1fREVCVUdfS01TKCIlZCBwaXBlcyBhY3RpdmVcbiIsIGNydGNzX2VuYWJsZWQpOworCWlmIChjcnRjc19lbmFibGVkID4gMSkgeworCQlEUk1fREVCVUdfS01TKCJtb3JlIHRoYW4gb25lIHBpcGUgYWN0aXZlLCBkaXNhYmxpbmcgY29tcHJlc3Npb25cbiIpOworCQlkZXZfcHJpdi0+bm9fZmJjX3JlYXNvbiA9IEZCQ19NVUxUSVBMRV9QSVBFUzsKKwkJZ290byBvdXRfZGlzYWJsZTsKKwl9CiAJaWYgKGludGVsX2ZiLT5vYmotPnNpemUgPiBkZXZfcHJpdi0+Y2ZiX3NpemUpIHsKIAkJRFJNX0RFQlVHX0tNUygiZnJhbWVidWZmZXIgdG9vIGxhcmdlLCBkaXNhYmxpbmcgIgogCQkJCSJjb21wcmVzc2lvblxuIik7CkBAIC0xMjMzLDYgKzEzMTcsMTAgQEAKIAkJZ290byBvdXRfZGlzYWJsZTsKIAl9CiAKKwkvKiBJZiB0aGUga2VybmVsIGRlYnVnZ2VyIGlzIGFjdGl2ZSwgYWx3YXlzIGRpc2FibGUgY29tcHJlc3Npb24gKi8KKwlpZiAoaW5fZGJnX21hc3RlcigpKQorCQlnb3RvIG91dF9kaXNhYmxlOworCiAJaWYgKGludGVsX2ZiY19lbmFibGVkKGRldikpIHsKIAkJLyogV2UgY2FuIHJlLWVuYWJsZSBpdCBpbiB0aGlzIGNhc2UsIGJ1dCBuZWVkIHRvIHVwZGF0ZSBwaXRjaCAqLwogCQlpZiAoKGZiLT5waXRjaCA+IGRldl9wcml2LT5jZmJfcGl0Y2gpIHx8CkBAIC0xMjU1LDcgKzEzNDMsNyBAQAogCX0KIH0KIAotc3RhdGljIGludAoraW50CiBpbnRlbF9waW5fYW5kX2ZlbmNlX2ZiX29iaihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhvYmopOwpAQCAtMTI2NCw3ICsxMzUyLDEyIEBACiAKIAlzd2l0Y2ggKG9ial9wcml2LT50aWxpbmdfbW9kZSkgewogCWNhc2UgSTkxNV9USUxJTkdfTk9ORToKLQkJYWxpZ25tZW50ID0gNjQgKiAxMDI0OworCQlpZiAoSVNfQlJPQURXQVRFUihkZXYpIHx8IElTX0NSRVNUTElORShkZXYpKQorCQkJYWxpZ25tZW50ID0gMTI4ICogMTAyNDsKKwkJZWxzZSBpZiAoSVNfSTk2NUcoZGV2KSkKKwkJCWFsaWdubWVudCA9IDQgKiAxMDI0OworCQllbHNlCisJCQlhbGlnbm1lbnQgPSA2NCAqIDEwMjQ7CiAJCWJyZWFrOwogCWNhc2UgSTkxNV9USUxJTkdfWDoKIAkJLyogcGluKCkgd2lsbCBhbGlnbiB0aGUgb2JqZWN0IGFzIHJlcXVpcmVkIGJ5IGZlbmNlICovCkBAIC0xMjk5LDYgKzEzOTIsOTggQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogQXNzdW1lIGZiIG9iamVjdCBpcyBwaW5uZWQgJiBpZGxlICYgZmVuY2VkIGFuZCBqdXN0IHVwZGF0ZSBiYXNlIHBvaW50ZXJzICovCitzdGF0aWMgaW50CitpbnRlbF9waXBlX3NldF9iYXNlX2F0b21pYyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJICAgaW50IHgsIGludCB5KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisJc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJaW50IHBsYW5lID0gaW50ZWxfY3J0Yy0+cGxhbmU7CisJdW5zaWduZWQgbG9uZyBTdGFydCwgT2Zmc2V0OworCWludCBkc3BiYXNlID0gKHBsYW5lID09IDAgPyBEU1BBQUREUiA6IERTUEJBRERSKTsKKwlpbnQgZHNwc3VyZiA9IChwbGFuZSA9PSAwID8gRFNQQVNVUkYgOiBEU1BCU1VSRik7CisJaW50IGRzcHN0cmlkZSA9IChwbGFuZSA9PSAwKSA/IERTUEFTVFJJREUgOiBEU1BCU1RSSURFOworCWludCBkc3B0aWxlb2ZmID0gKHBsYW5lID09IDAgPyBEU1BBVElMRU9GRiA6IERTUEJUSUxFT0ZGKTsKKwlpbnQgZHNwY250cl9yZWcgPSAocGxhbmUgPT0gMCkgPyBEU1BBQ05UUiA6IERTUEJDTlRSOworCXUzMiBkc3BjbnRyOworCisJc3dpdGNoIChwbGFuZSkgeworCWNhc2UgMDoKKwljYXNlIDE6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigiQ2FuJ3QgdXBkYXRlIHBsYW5lICVkIGluIFNBUkVBXG4iLCBwbGFuZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWludGVsX2ZiID0gdG9faW50ZWxfZnJhbWVidWZmZXIoZmIpOworCW9iaiA9IGludGVsX2ZiLT5vYmo7CisJb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhvYmopOworCisJZHNwY250ciA9IEk5MTVfUkVBRChkc3BjbnRyX3JlZyk7CisJLyogTWFzayBvdXQgcGl4ZWwgZm9ybWF0IGJpdHMgaW4gY2FzZSB3ZSBjaGFuZ2UgaXQgKi8KKwlkc3BjbnRyICY9IH5ESVNQUExBTkVfUElYRk9STUFUX01BU0s7CisJc3dpdGNoIChmYi0+Yml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDg6CisJCWRzcGNudHIgfD0gRElTUFBMQU5FXzhCUFA7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCWlmIChmYi0+ZGVwdGggPT0gMTUpCisJCQlkc3BjbnRyIHw9IERJU1BQTEFORV8xNV8xNkJQUDsKKwkJZWxzZQorCQkJZHNwY250ciB8PSBESVNQUExBTkVfMTZCUFA7CisJCWJyZWFrOworCWNhc2UgMjQ6CisJY2FzZSAzMjoKKwkJZHNwY250ciB8PSBESVNQUExBTkVfMzJCUFBfTk9fQUxQSEE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigiVW5rbm93biBjb2xvciBkZXB0aFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoSVNfSTk2NUcoZGV2KSkgeworCQlpZiAob2JqX3ByaXYtPnRpbGluZ19tb2RlICE9IEk5MTVfVElMSU5HX05PTkUpCisJCQlkc3BjbnRyIHw9IERJU1BQTEFORV9USUxFRDsKKwkJZWxzZQorCQkJZHNwY250ciAmPSB+RElTUFBMQU5FX1RJTEVEOworCX0KKworCWlmIChJU19JUk9OTEFLRShkZXYpKQorCQkvKiBtdXN0IGRpc2FibGUgKi8KKwkJZHNwY250ciB8PSBESVNQUExBTkVfVFJJQ0tMRV9GRUVEX0RJU0FCTEU7CisKKwlJOTE1X1dSSVRFKGRzcGNudHJfcmVnLCBkc3BjbnRyKTsKKworCVN0YXJ0ID0gb2JqX3ByaXYtPmd0dF9vZmZzZXQ7CisJT2Zmc2V0ID0geSAqIGZiLT5waXRjaCArIHggKiAoZmItPmJpdHNfcGVyX3BpeGVsIC8gOCk7CisKKwlEUk1fREVCVUcoIldyaXRpbmcgYmFzZSAlMDhsWCAlMDhsWCAlZCAlZFxuIiwgU3RhcnQsIE9mZnNldCwgeCwgeSk7CisJSTkxNV9XUklURShkc3BzdHJpZGUsIGZiLT5waXRjaCk7CisJaWYgKElTX0k5NjVHKGRldikpIHsKKwkJSTkxNV9XUklURShkc3BiYXNlLCBPZmZzZXQpOworCQlJOTE1X1JFQUQoZHNwYmFzZSk7CisJCUk5MTVfV1JJVEUoZHNwc3VyZiwgU3RhcnQpOworCQlJOTE1X1JFQUQoZHNwc3VyZik7CisJCUk5MTVfV1JJVEUoZHNwdGlsZW9mZiwgKHkgPDwgMTYpIHwgeCk7CisJfSBlbHNlIHsKKwkJSTkxNV9XUklURShkc3BiYXNlLCBTdGFydCArIE9mZnNldCk7CisJCUk5MTVfUkVBRChkc3BiYXNlKTsKKwl9CisKKwlpZiAoKElTX0k5NjVHKGRldikgfHwgcGxhbmUgPT0gMCkpCisJCWludGVsX3VwZGF0ZV9mYmMoY3J0YywgJmNydGMtPm1vZGUpOworCisJaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldik7CisJaW50ZWxfaW5jcmVhc2VfcGxsY2xvY2soY3J0YywgdHJ1ZSk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludAogaW50ZWxfcGlwZV9zZXRfYmFzZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCB4LCBpbnQgeSwKIAkJICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYikKQEAgLTE1MzksNiArMTcyNCwxNSBAQAogCWludCBmZGlfcnhfaW1yX3JlZyA9IChwaXBlID09IDApID8gRkRJX1JYQV9JTVIgOiBGRElfUlhCX0lNUjsKIAl1MzIgdGVtcCwgdHJpZXMgPSAwOwogCisJLyogVHJhaW4gMTogdW1hc2sgRkRJIFJYIEludGVycnVwdCBzeW1ib2xfbG9jayBhbmQgYml0X2xvY2sgYml0CisJICAgZm9yIHRyYWluIHJlc3VsdCAqLworCXRlbXAgPSBJOTE1X1JFQUQoZmRpX3J4X2ltcl9yZWcpOworCXRlbXAgJj0gfkZESV9SWF9TWU1CT0xfTE9DSzsKKwl0ZW1wICY9IH5GRElfUlhfQklUX0xPQ0s7CisJSTkxNV9XUklURShmZGlfcnhfaW1yX3JlZywgdGVtcCk7CisJSTkxNV9SRUFEKGZkaV9yeF9pbXJfcmVnKTsKKwl1ZGVsYXkoMTUwKTsKKwogCS8qIGVuYWJsZSBDUFUgRkRJIFRYIGFuZCBQQ0ggRkRJIFJYICovCiAJdGVtcCA9IEk5MTVfUkVBRChmZGlfdHhfcmVnKTsKIAl0ZW1wIHw9IEZESV9UWF9FTkFCTEU7CkBAIC0xNTU2LDE2ICsxNzUwLDcgQEAKIAlJOTE1X1JFQUQoZmRpX3J4X3JlZyk7CiAJdWRlbGF5KDE1MCk7CiAKLQkvKiBUcmFpbiAxOiB1bWFzayBGREkgUlggSW50ZXJydXB0IHN5bWJvbF9sb2NrIGFuZCBiaXRfbG9jayBiaXQKLQkgICBmb3IgdHJhaW4gcmVzdWx0ICovCi0JdGVtcCA9IEk5MTVfUkVBRChmZGlfcnhfaW1yX3JlZyk7Ci0JdGVtcCAmPSB+RkRJX1JYX1NZTUJPTF9MT0NLOwotCXRlbXAgJj0gfkZESV9SWF9CSVRfTE9DSzsKLQlJOTE1X1dSSVRFKGZkaV9yeF9pbXJfcmVnLCB0ZW1wKTsKLQlJOTE1X1JFQUQoZmRpX3J4X2ltcl9yZWcpOwotCXVkZWxheSgxNTApOwotCi0JZm9yICg7OykgeworCWZvciAodHJpZXMgPSAwOyB0cmllcyA8IDU7IHRyaWVzKyspIHsKIAkJdGVtcCA9IEk5MTVfUkVBRChmZGlfcnhfaWlyX3JlZyk7CiAJCURSTV9ERUJVR19LTVMoIkZESV9SWF9JSVIgMHgleFxuIiwgdGVtcCk7CiAKQEAgLTE1NzUsMTQgKzE3NjAsOSBAQAogCQkJCSAgIHRlbXAgfCBGRElfUlhfQklUX0xPQ0spOwogCQkJYnJlYWs7CiAJCX0KLQotCQl0cmllcysrOwotCi0JCWlmICh0cmllcyA+IDUpIHsKLQkJCURSTV9ERUJVR19LTVMoIkZESSB0cmFpbiAxIGZhaWwhXG4iKTsKLQkJCWJyZWFrOwotCQl9CiAJfQorCWlmICh0cmllcyA9PSA1KQorCQlEUk1fREVCVUdfS01TKCJGREkgdHJhaW4gMSBmYWlsIVxuIik7CiAKIAkvKiBUcmFpbiAyICovCiAJdGVtcCA9IEk5MTVfUkVBRChmZGlfdHhfcmVnKTsKQEAgLTE1OTgsNyArMTc3OCw3IEBACiAKIAl0cmllcyA9IDA7CiAKLQlmb3IgKDs7KSB7CisJZm9yICh0cmllcyA9IDA7IHRyaWVzIDwgNTsgdHJpZXMrKykgewogCQl0ZW1wID0gSTkxNV9SRUFEKGZkaV9yeF9paXJfcmVnKTsKIAkJRFJNX0RFQlVHX0tNUygiRkRJX1JYX0lJUiAweCV4XG4iLCB0ZW1wKTsKIApAQCAtMTYwOCwxNCArMTc4OCw5IEBACiAJCQlEUk1fREVCVUdfS01TKCJGREkgdHJhaW4gMiBkb25lLlxuIik7CiAJCQlicmVhazsKIAkJfQotCi0JCXRyaWVzKys7Ci0KLQkJaWYgKHRyaWVzID4gNSkgewotCQkJRFJNX0RFQlVHX0tNUygiRkRJIHRyYWluIDIgZmFpbCFcbiIpOwotCQkJYnJlYWs7Ci0JCX0KIAl9CisJaWYgKHRyaWVzID09IDUpCisJCURSTV9ERUJVR19LTVMoIkZESSB0cmFpbiAyIGZhaWwhXG4iKTsKIAogCURSTV9ERUJVR19LTVMoIkZESSB0cmFpbiBkb25lXG4iKTsKIH0KQEAgLTE2NDAsNiArMTgxNSwxNSBAQAogCWludCBmZGlfcnhfaW1yX3JlZyA9IChwaXBlID09IDApID8gRkRJX1JYQV9JTVIgOiBGRElfUlhCX0lNUjsKIAl1MzIgdGVtcCwgaTsKIAorCS8qIFRyYWluIDE6IHVtYXNrIEZESSBSWCBJbnRlcnJ1cHQgc3ltYm9sX2xvY2sgYW5kIGJpdF9sb2NrIGJpdAorCSAgIGZvciB0cmFpbiByZXN1bHQgKi8KKwl0ZW1wID0gSTkxNV9SRUFEKGZkaV9yeF9pbXJfcmVnKTsKKwl0ZW1wICY9IH5GRElfUlhfU1lNQk9MX0xPQ0s7CisJdGVtcCAmPSB+RkRJX1JYX0JJVF9MT0NLOworCUk5MTVfV1JJVEUoZmRpX3J4X2ltcl9yZWcsIHRlbXApOworCUk5MTVfUkVBRChmZGlfcnhfaW1yX3JlZyk7CisJdWRlbGF5KDE1MCk7CisKIAkvKiBlbmFibGUgQ1BVIEZESSBUWCBhbmQgUENIIEZESSBSWCAqLwogCXRlbXAgPSBJOTE1X1JFQUQoZmRpX3R4X3JlZyk7CiAJdGVtcCB8PSBGRElfVFhfRU5BQkxFOwpAQCAtMTY2NSwxNSArMTg0OSw2IEBACiAJSTkxNV9SRUFEKGZkaV9yeF9yZWcpOwogCXVkZWxheSgxNTApOwogCi0JLyogVHJhaW4gMTogdW1hc2sgRkRJIFJYIEludGVycnVwdCBzeW1ib2xfbG9jayBhbmQgYml0X2xvY2sgYml0Ci0JICAgZm9yIHRyYWluIHJlc3VsdCAqLwotCXRlbXAgPSBJOTE1X1JFQUQoZmRpX3J4X2ltcl9yZWcpOwotCXRlbXAgJj0gfkZESV9SWF9TWU1CT0xfTE9DSzsKLQl0ZW1wICY9IH5GRElfUlhfQklUX0xPQ0s7Ci0JSTkxNV9XUklURShmZGlfcnhfaW1yX3JlZywgdGVtcCk7Ci0JSTkxNV9SRUFEKGZkaV9yeF9pbXJfcmVnKTsKLQl1ZGVsYXkoMTUwKTsKLQogCWZvciAoaSA9IDA7IGkgPCA0OyBpKysgKSB7CiAJCXRlbXAgPSBJOTE1X1JFQUQoZmRpX3R4X3JlZyk7CiAJCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX1ZPTF9FTVBfTUFTSzsKQEAgLTE4MjgsNyArMjAwMyw4IEBACiAJCX0KIAogCQkvKiBFbmFibGUgcGFuZWwgZml0dGluZyBmb3IgTFZEUyAqLwotCQlpZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsKKwkJaWYgKGludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX0xWRFMpCisJCSAgICB8fCBIQVNfZURQIHx8IGludGVsX3BjaF9oYXNfZWRwKGNydGMpKSB7CiAJCQl0ZW1wID0gSTkxNV9SRUFEKHBmX2N0bF9yZWcpOwogCQkJSTkxNV9XUklURShwZl9jdGxfcmVnLCB0ZW1wIHwgUEZfRU5BQkxFIHwgUEZfRklMVEVSX01FRF8zeDMpOwogCkBAIC0xOTIzLDkgKzIwOTksMTIgQEAKIAkJCQlyZWcgPSBJOTE1X1JFQUQodHJhbnNfZHBfY3RsKTsKIAkJCQlyZWcgJj0gflRSQU5TX0RQX1BPUlRfU0VMX01BU0s7CiAJCQkJcmVnID0gVFJBTlNfRFBfT1VUUFVUX0VOQUJMRSB8Ci0JCQkJICAgICAgVFJBTlNfRFBfRU5IX0ZSQU1JTkcgfAotCQkJCSAgICAgIFRSQU5TX0RQX1ZTWU5DX0FDVElWRV9ISUdIIHwKLQkJCQkgICAgICBUUkFOU19EUF9IU1lOQ19BQ1RJVkVfSElHSDsKKwkJCQkgICAgICBUUkFOU19EUF9FTkhfRlJBTUlORzsKKworCQkJCWlmIChjcnRjLT5tb2RlLmZsYWdzICYgRFJNX01PREVfRkxBR19QSFNZTkMpCisJCQkJICAgICAgcmVnIHw9IFRSQU5TX0RQX0hTWU5DX0FDVElWRV9ISUdIOworCQkJCWlmIChjcnRjLT5tb2RlLmZsYWdzICYgRFJNX01PREVfRkxBR19QVlNZTkMpCisJCQkJICAgICAgcmVnIHw9IFRSQU5TX0RQX1ZTWU5DX0FDVElWRV9ISUdIOwogCiAJCQkJc3dpdGNoIChpbnRlbF90cmFuc19kcF9wb3J0X3NlbChjcnRjKSkgewogCQkJCWNhc2UgUENIX0RQX0I6CkBAIC0xOTY1LDYgKzIxNDQsOCBAQAogCiAJCWludGVsX2NydGNfbG9hZF9sdXQoY3J0Yyk7CiAKKwkJaW50ZWxfdXBkYXRlX2ZiYyhjcnRjLCAmY3J0Yy0+bW9kZSk7CisKIAlicmVhazsKIAljYXNlIERSTV9NT0RFX0RQTVNfT0ZGOgogCQlEUk1fREVCVUdfS01TKCJjcnRjICVkIGRwbXMgb2ZmXG4iLCBwaXBlKTsKQEAgLTE5NzksNiArMjE2MCwxMCBAQAogCQkJSTkxNV9SRUFEKGRzcGJhc2VfcmVnKTsKIAkJfQogCisJCWlmIChkZXZfcHJpdi0+Y2ZiX3BsYW5lID09IHBsYW5lICYmCisJCSAgICBkZXZfcHJpdi0+ZGlzcGxheS5kaXNhYmxlX2ZiYykKKwkJCWRldl9wcml2LT5kaXNwbGF5LmRpc2FibGVfZmJjKGRldik7CisKIAkJaTkxNV9kaXNhYmxlX3ZnYShkZXYpOwogCiAJCS8qIGRpc2FibGUgY3B1IHBpcGUsIGRpc2FibGUgYWZ0ZXIgYWxsIHBsYW5lcyBkaXNhYmxlZCAqLwpAQCAtMjI1NSw2ICsyNDQwLDExIEBACiAJCQlpbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2KTsKIAkJfQogCisJCS8qIERvbid0IGRpc2FibGUgcGlwZSBBIG9yIHBpcGUgQSBQTExzIGlmIG5lZWRlZCAqLworCQlpZiAocGlwZWNvbmZfcmVnID09IFBJUEVBQ09ORiAmJgorCQkgICAgKGRldl9wcml2LT5xdWlya3MgJiBRVUlSS19QSVBFQV9GT1JDRSkpCisJCQlnb3RvIHNraXBfcGlwZV9vZmY7CisKIAkJLyogTmV4dCwgZGlzYWJsZSBkaXNwbGF5IHBpcGVzICovCiAJCXRlbXAgPSBJOTE1X1JFQUQocGlwZWNvbmZfcmVnKTsKIAkJaWYgKCh0ZW1wICYgUElQRUFDT05GX0VOQUJMRSkgIT0gMCkgewpAQCAtMjI3MCw3ICsyNDYwLDcgQEAKIAkJCUk5MTVfV1JJVEUoZHBsbF9yZWcsIHRlbXAgJiB+RFBMTF9WQ09fRU5BQkxFKTsKIAkJCUk5MTVfUkVBRChkcGxsX3JlZyk7CiAJCX0KLQorCXNraXBfcGlwZV9vZmY6CiAJCS8qIFdhaXQgZm9yIHRoZSBjbG9ja3MgdG8gdHVybiBvZmYuICovCiAJCXVkZWxheSgxNTApOwogCQlicmVhazsKQEAgLTIzNTMsMTEgKzI1NDMsOSBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkgewogCQkvKiBGREkgbGluayBjbG9jayBpcyBmaXhlZCBhdCAyLjdHICovCi0JCWlmIChtb2RlLT5jbG9jayAqIDMgPiAyNzAwMCAqIDQpCi0JCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOworCQlpZiAobW9kZS0+Y2xvY2sgKiAzID4gSVJPTkxBS0VfRkRJX0ZSRVEgKiA0KQorCQkJcmV0dXJuIGZhbHNlOwogCX0KLQotCWRybV9tb2RlX3NldF9jcnRjaW5mbyhhZGp1c3RlZF9tb2RlLCAwKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjUzOCw2ICsyNzI2LDIwIEBACiAJMiwKIAlHNFhfRklGT19MSU5FX1NJWkUsCiB9Oworc3RhdGljIHN0cnVjdCBpbnRlbF93YXRlcm1hcmtfcGFyYW1zIGc0eF9jdXJzb3Jfd21faW5mbyA9IHsKKwlJOTY1X0NVUlNPUl9GSUZPLAorCUk5NjVfQ1VSU09SX01BWF9XTSwKKwlJOTY1X0NVUlNPUl9ERlRfV00sCisJMiwKKwlHNFhfRklGT19MSU5FX1NJWkUsCit9Oworc3RhdGljIHN0cnVjdCBpbnRlbF93YXRlcm1hcmtfcGFyYW1zIGk5NjVfY3Vyc29yX3dtX2luZm8gPSB7CisJSTk2NV9DVVJTT1JfRklGTywKKwlJOTY1X0NVUlNPUl9NQVhfV00sCisJSTk2NV9DVVJTT1JfREZUX1dNLAorCTIsCisJSTkxNV9GSUZPX0xJTkVfU0laRSwKK307CiBzdGF0aWMgc3RydWN0IGludGVsX3dhdGVybWFya19wYXJhbXMgaTk0NV93bV9pbmZvID0gewogCUk5NDVfRklGT19TSVpFLAogCUk5MTVfTUFYX1dNLApAQCAtMjU3NSw2ICsyNzc3LDE0IEBACiAJSUxLX0ZJRk9fTElORV9TSVpFCiB9OwogCitzdGF0aWMgc3RydWN0IGludGVsX3dhdGVybWFya19wYXJhbXMgaXJvbmxha2VfY3Vyc29yX3dtX2luZm8gPSB7CisJSUxLX0NVUlNPUl9GSUZPLAorCUlMS19DVVJTT1JfTUFYV00sCisJSUxLX0NVUlNPUl9ERlRXTSwKKwkyLAorCUlMS19GSUZPX0xJTkVfU0laRQorfTsKKwogc3RhdGljIHN0cnVjdCBpbnRlbF93YXRlcm1hcmtfcGFyYW1zIGlyb25sYWtlX2Rpc3BsYXlfc3J3bV9pbmZvID0gewogCUlMS19ESVNQTEFZX1NSX0ZJRk8sCiAJSUxLX0RJU1BMQVlfTUFYX1NSV00sCkBAIC0yNjI0LDcgKzI4MzQsNyBAQAogCSAqLwogCWVudHJpZXNfcmVxdWlyZWQgPSAoKGNsb2NrX2luX2toeiAvIDEwMDApICogcGl4ZWxfc2l6ZSAqIGxhdGVuY3lfbnMpIC8KIAkJMTAwMDsKLQllbnRyaWVzX3JlcXVpcmVkIC89IHdtLT5jYWNoZWxpbmVfc2l6ZTsKKwllbnRyaWVzX3JlcXVpcmVkID0gRElWX1JPVU5EX1VQKGVudHJpZXNfcmVxdWlyZWQsIHdtLT5jYWNoZWxpbmVfc2l6ZSk7CiAKIAlEUk1fREVCVUdfS01TKCJGSUZPIGVudHJpZXMgcmVxdWlyZWQgZm9yIG1vZGU6ICVkXG4iLCBlbnRyaWVzX3JlcXVpcmVkKTsKIApAQCAtMjYzNSw4ICsyODQ1LDE0IEBACiAJLyogRG9uJ3QgcHJvbW90ZSB3bV9zaXplIHRvIHVuc2lnbmVkLi4uICovCiAJaWYgKHdtX3NpemUgPiAobG9uZyl3bS0+bWF4X3dtKQogCQl3bV9zaXplID0gd20tPm1heF93bTsKLQlpZiAod21fc2l6ZSA8PSAwKQorCWlmICh3bV9zaXplIDw9IDApIHsKIAkJd21fc2l6ZSA9IHdtLT5kZWZhdWx0X3dtOworCQlEUk1fRVJST1IoIkluc3VmZmljaWVudCBGSUZPIGZvciBwbGFuZSwgZXhwZWN0IGZsaWNrZXJpbmc6IgorCQkJICAiIGVudHJpZXMgcmVxdWlyZWQgPSAlbGQsIGF2YWlsYWJsZSA9ICVsdS5cbiIsCisJCQkgIGVudHJpZXNfcmVxdWlyZWQgKyB3bS0+Z3VhcmRfc2l6ZSwKKwkJCSAgd20tPmZpZm9fc2l6ZSk7CisJfQorCiAJcmV0dXJuIHdtX3NpemU7CiB9CiAKQEAgLTI3NDUsMTEgKzI5NjEsOSBAQAogCXVpbnQzMl90IGRzcGFyYiA9IEk5MTVfUkVBRChEU1BBUkIpOwogCWludCBzaXplOwogCi0JaWYgKHBsYW5lID09IDApCi0JCXNpemUgPSBkc3BhcmIgJiAweDdmOwotCWVsc2UKLQkJc2l6ZSA9ICgoZHNwYXJiID4+IERTUEFSQl9DU1RBUlRfU0hJRlQpICYgMHg3ZikgLQotCQkJKGRzcGFyYiAmIDB4N2YpOworCXNpemUgPSBkc3BhcmIgJiAweDdmOworCWlmIChwbGFuZSkKKwkJc2l6ZSA9ICgoZHNwYXJiID4+IERTUEFSQl9DU1RBUlRfU0hJRlQpICYgMHg3ZikgLSBzaXplOwogCiAJRFJNX0RFQlVHX0tNUygiRklGTyBzaXplIC0gKDB4JTA4eCkgJXM6ICVkXG4iLCBkc3BhcmIsCiAJCQlwbGFuZSA/ICJCIiA6ICJBIiwgc2l6ZSk7CkBAIC0yNzYzLDExICsyOTc3LDkgQEAKIAl1aW50MzJfdCBkc3BhcmIgPSBJOTE1X1JFQUQoRFNQQVJCKTsKIAlpbnQgc2l6ZTsKIAotCWlmIChwbGFuZSA9PSAwKQotCQlzaXplID0gZHNwYXJiICYgMHgxZmY7Ci0JZWxzZQotCQlzaXplID0gKChkc3BhcmIgPj4gRFNQQVJCX0JFTkRfU0hJRlQpICYgMHgxZmYpIC0KLQkJCShkc3BhcmIgJiAweDFmZik7CisJc2l6ZSA9IGRzcGFyYiAmIDB4MWZmOworCWlmIChwbGFuZSkKKwkJc2l6ZSA9ICgoZHNwYXJiID4+IERTUEFSQl9CRU5EX1NISUZUKSAmIDB4MWZmKSAtIHNpemU7CiAJc2l6ZSA+Pj0gMTsgLyogQ29udmVydCB0byBjYWNoZWxpbmVzICovCiAKIAlEUk1fREVCVUdfS01TKCJGSUZPIHNpemUgLSAoMHglMDh4KSAlczogJWRcbiIsIGRzcGFyYiwKQEAgLTI4MDgsNyArMzAyMCw4IEBACiB9CiAKIHN0YXRpYyB2b2lkIHBpbmV2aWV3X3VwZGF0ZV93bShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCAgaW50IHBsYW5lYV9jbG9jaywKLQkJCSAgaW50IHBsYW5lYl9jbG9jaywgaW50IHNyX2hkaXNwbGF5LCBpbnQgcGl4ZWxfc2l6ZSkKKwkJCSAgaW50IHBsYW5lYl9jbG9jaywgaW50IHNyX2hkaXNwbGF5LCBpbnQgdW51c2VkLAorCQkJICBpbnQgcGl4ZWxfc2l6ZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXUzMiByZWc7CkBAIC0yODczLDcgKzMwODYsOCBAQAogfQogCiBzdGF0aWMgdm9pZCBnNHhfdXBkYXRlX3dtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsICBpbnQgcGxhbmVhX2Nsb2NrLAotCQkJICBpbnQgcGxhbmViX2Nsb2NrLCBpbnQgc3JfaGRpc3BsYXksIGludCBwaXhlbF9zaXplKQorCQkJICBpbnQgcGxhbmViX2Nsb2NrLCBpbnQgc3JfaGRpc3BsYXksIGludCBzcl9odG90YWwsCisJCQkgIGludCBwaXhlbF9zaXplKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IHRvdGFsX3NpemUsIGNhY2hlbGluZV9zaXplOwpAQCAtMjg5NywxMiArMzExMSwxMiBAQAogCSAqLwogCWVudHJpZXNfcmVxdWlyZWQgPSAoKHBsYW5lYV9jbG9jayAvIDEwMDApICogcGl4ZWxfc2l6ZSAqIGxhdGVuY3lfbnMpIC8KIAkJMTAwMDsKLQllbnRyaWVzX3JlcXVpcmVkIC89IEc0WF9GSUZPX0xJTkVfU0laRTsKKwllbnRyaWVzX3JlcXVpcmVkID0gRElWX1JPVU5EX1VQKGVudHJpZXNfcmVxdWlyZWQsIEc0WF9GSUZPX0xJTkVfU0laRSk7CiAJcGxhbmVhX3dtID0gZW50cmllc19yZXF1aXJlZCArIHBsYW5lYV9wYXJhbXMuZ3VhcmRfc2l6ZTsKIAogCWVudHJpZXNfcmVxdWlyZWQgPSAoKHBsYW5lYl9jbG9jayAvIDEwMDApICogcGl4ZWxfc2l6ZSAqIGxhdGVuY3lfbnMpIC8KIAkJMTAwMDsKLQllbnRyaWVzX3JlcXVpcmVkIC89IEc0WF9GSUZPX0xJTkVfU0laRTsKKwllbnRyaWVzX3JlcXVpcmVkID0gRElWX1JPVU5EX1VQKGVudHJpZXNfcmVxdWlyZWQsIEc0WF9GSUZPX0xJTkVfU0laRSk7CiAJcGxhbmViX3dtID0gZW50cmllc19yZXF1aXJlZCArIHBsYW5lYl9wYXJhbXMuZ3VhcmRfc2l6ZTsKIAogCWN1cnNvcmFfd20gPSBjdXJzb3JiX3dtID0gMTY7CkBAIC0yOTE2LDEzICszMTMwLDI0IEBACiAJCXN0YXRpYyBjb25zdCBpbnQgc3JfbGF0ZW5jeV9ucyA9IDEyMDAwOwogCiAJCXNyX2Nsb2NrID0gcGxhbmVhX2Nsb2NrID8gcGxhbmVhX2Nsb2NrIDogcGxhbmViX2Nsb2NrOwotCQlsaW5lX3RpbWVfdXMgPSAoKHNyX2hkaXNwbGF5ICogMTAwMCkgLyBzcl9jbG9jayk7CisJCWxpbmVfdGltZV91cyA9ICgoc3JfaHRvdGFsICogMTAwMCkgLyBzcl9jbG9jayk7CiAKIAkJLyogVXNlIG5zL3VzIHRoZW4gZGl2aWRlIHRvIHByZXNlcnZlIHByZWNpc2lvbiAqLwotCQlzcl9lbnRyaWVzID0gKCgoc3JfbGF0ZW5jeV9ucyAvIGxpbmVfdGltZV91cykgKyAxKSAqCi0JCQkgICAgICBwaXhlbF9zaXplICogc3JfaGRpc3BsYXkpIC8gMTAwMDsKLQkJc3JfZW50cmllcyA9IHJvdW5kdXAoc3JfZW50cmllcyAvIGNhY2hlbGluZV9zaXplLCAxKTsKLQkJRFJNX0RFQlVHKCJzZWxmLXJlZnJlc2ggZW50cmllczogJWRcbiIsIHNyX2VudHJpZXMpOworCQlzcl9lbnRyaWVzID0gKCgoc3JfbGF0ZW5jeV9ucyAvIGxpbmVfdGltZV91cykgKyAxMDAwKSAvIDEwMDApICoKKwkJCSAgICAgIHBpeGVsX3NpemUgKiBzcl9oZGlzcGxheTsKKwkJc3JfZW50cmllcyA9IERJVl9ST1VORF9VUChzcl9lbnRyaWVzLCBjYWNoZWxpbmVfc2l6ZSk7CisKKwkJZW50cmllc19yZXF1aXJlZCA9ICgoKHNyX2xhdGVuY3lfbnMgLyBsaW5lX3RpbWVfdXMpICsKKwkJCQkgICAgIDEwMDApIC8gMTAwMCkgKiBwaXhlbF9zaXplICogNjQ7CisJCWVudHJpZXNfcmVxdWlyZWQgPSBESVZfUk9VTkRfVVAoZW50cmllc19yZXF1aXJlZCwKKwkJCQkJICAgZzR4X2N1cnNvcl93bV9pbmZvLmNhY2hlbGluZV9zaXplKTsKKwkJY3Vyc29yX3NyID0gZW50cmllc19yZXF1aXJlZCArIGc0eF9jdXJzb3Jfd21faW5mby5ndWFyZF9zaXplOworCisJCWlmIChjdXJzb3Jfc3IgPiBnNHhfY3Vyc29yX3dtX2luZm8ubWF4X3dtKQorCQkJY3Vyc29yX3NyID0gZzR4X2N1cnNvcl93bV9pbmZvLm1heF93bTsKKwkJRFJNX0RFQlVHX0tNUygic2VsZi1yZWZyZXNoIHdhdGVybWFyazogZGlzcGxheSBwbGFuZSAlZCAiCisJCQkgICAgICAiY3Vyc29yICVkXG4iLCBzcl9lbnRyaWVzLCBjdXJzb3Jfc3IpOworCiAJCUk5MTVfV1JJVEUoRldfQkxDX1NFTEYsIEZXX0JMQ19TRUxGX0VOKTsKIAl9IGVsc2UgewogCQkvKiBUdXJuIG9mZiBzZWxmIHJlZnJlc2ggaWYgYm90aCBwaXBlcyBhcmUgZW5hYmxlZCAqLwpAQCAtMjk0NywxMSArMzE3MiwxMyBAQAogfQogCiBzdGF0aWMgdm9pZCBpOTY1X3VwZGF0ZV93bShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGxhbmVhX2Nsb2NrLAotCQkJICAgaW50IHBsYW5lYl9jbG9jaywgaW50IHNyX2hkaXNwbGF5LCBpbnQgcGl4ZWxfc2l6ZSkKKwkJCSAgIGludCBwbGFuZWJfY2xvY2ssIGludCBzcl9oZGlzcGxheSwgaW50IHNyX2h0b3RhbCwKKwkJCSAgIGludCBwaXhlbF9zaXplKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdW5zaWduZWQgbG9uZyBsaW5lX3RpbWVfdXM7CiAJaW50IHNyX2Nsb2NrLCBzcl9lbnRyaWVzLCBzcndtID0gMTsKKwlpbnQgY3Vyc29yX3NyID0gMTY7CiAKIAkvKiBDYWxjIHNyIGVudHJpZXMgZm9yIG9uZSBwbGFuZSBjb25maWdzICovCiAJaWYgKHNyX2hkaXNwbGF5ICYmICghcGxhbmVhX2Nsb2NrIHx8ICFwbGFuZWJfY2xvY2spKSB7CkBAIC0yOTU5LDE3ICszMTg2LDMxIEBACiAJCXN0YXRpYyBjb25zdCBpbnQgc3JfbGF0ZW5jeV9ucyA9IDEyMDAwOwogCiAJCXNyX2Nsb2NrID0gcGxhbmVhX2Nsb2NrID8gcGxhbmVhX2Nsb2NrIDogcGxhbmViX2Nsb2NrOwotCQlsaW5lX3RpbWVfdXMgPSAoKHNyX2hkaXNwbGF5ICogMTAwMCkgLyBzcl9jbG9jayk7CisJCWxpbmVfdGltZV91cyA9ICgoc3JfaHRvdGFsICogMTAwMCkgLyBzcl9jbG9jayk7CiAKIAkJLyogVXNlIG5zL3VzIHRoZW4gZGl2aWRlIHRvIHByZXNlcnZlIHByZWNpc2lvbiAqLwotCQlzcl9lbnRyaWVzID0gKCgoc3JfbGF0ZW5jeV9ucyAvIGxpbmVfdGltZV91cykgKyAxKSAqCi0JCQkgICAgICBwaXhlbF9zaXplICogc3JfaGRpc3BsYXkpIC8gMTAwMDsKLQkJc3JfZW50cmllcyA9IHJvdW5kdXAoc3JfZW50cmllcyAvIEk5MTVfRklGT19MSU5FX1NJWkUsIDEpOworCQlzcl9lbnRyaWVzID0gKCgoc3JfbGF0ZW5jeV9ucyAvIGxpbmVfdGltZV91cykgKyAxMDAwKSAvIDEwMDApICoKKwkJCSAgICAgIHBpeGVsX3NpemUgKiBzcl9oZGlzcGxheTsKKwkJc3JfZW50cmllcyA9IERJVl9ST1VORF9VUChzcl9lbnRyaWVzLCBJOTE1X0ZJRk9fTElORV9TSVpFKTsKIAkJRFJNX0RFQlVHKCJzZWxmLXJlZnJlc2ggZW50cmllczogJWRcbiIsIHNyX2VudHJpZXMpOwotCQlzcndtID0gSTk0NV9GSUZPX1NJWkUgLSBzcl9lbnRyaWVzOworCQlzcndtID0gSTk2NV9GSUZPX1NJWkUgLSBzcl9lbnRyaWVzOwogCQlpZiAoc3J3bSA8IDApCiAJCQlzcndtID0gMTsKLQkJc3J3bSAmPSAweDNmOworCQlzcndtICY9IDB4MWZmOworCisJCXNyX2VudHJpZXMgPSAoKChzcl9sYXRlbmN5X25zIC8gbGluZV90aW1lX3VzKSArIDEwMDApIC8gMTAwMCkgKgorCQkJICAgICBwaXhlbF9zaXplICogNjQ7CisJCXNyX2VudHJpZXMgPSBESVZfUk9VTkRfVVAoc3JfZW50cmllcywKKwkJCQkJICBpOTY1X2N1cnNvcl93bV9pbmZvLmNhY2hlbGluZV9zaXplKTsKKwkJY3Vyc29yX3NyID0gaTk2NV9jdXJzb3Jfd21faW5mby5maWZvX3NpemUgLQorCQkJICAgIChzcl9lbnRyaWVzICsgaTk2NV9jdXJzb3Jfd21faW5mby5ndWFyZF9zaXplKTsKKworCQlpZiAoY3Vyc29yX3NyID4gaTk2NV9jdXJzb3Jfd21faW5mby5tYXhfd20pCisJCQljdXJzb3Jfc3IgPSBpOTY1X2N1cnNvcl93bV9pbmZvLm1heF93bTsKKworCQlEUk1fREVCVUdfS01TKCJzZWxmLXJlZnJlc2ggd2F0ZXJtYXJrOiBkaXNwbGF5IHBsYW5lICVkICIKKwkJCSAgICAgICJjdXJzb3IgJWRcbiIsIHNyd20sIGN1cnNvcl9zcik7CisKIAkJaWYgKElTX0k5NjVHTShkZXYpKQogCQkJSTkxNV9XUklURShGV19CTENfU0VMRiwgRldfQkxDX1NFTEZfRU4pOwogCX0gZWxzZSB7CkBAIC0yOTg2LDEwICszMjI3LDEzIEBACiAJSTkxNV9XUklURShEU1BGVzEsIChzcndtIDw8IERTUEZXX1NSX1NISUZUKSB8ICg4IDw8IDE2KSB8ICg4IDw8IDgpIHwKIAkJICAgKDggPDwgMCkpOwogCUk5MTVfV1JJVEUoRFNQRlcyLCAoOCA8PCA4KSB8ICg4IDw8IDApKTsKKwkvKiB1cGRhdGUgY3Vyc29yIFNSIHdhdGVybWFyayAqLworCUk5MTVfV1JJVEUoRFNQRlczLCAoY3Vyc29yX3NyIDw8IERTUEZXX0NVUlNPUl9TUl9TSElGVCkpOwogfQogCiBzdGF0aWMgdm9pZCBpOXh4X3VwZGF0ZV93bShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGxhbmVhX2Nsb2NrLAotCQkJICAgaW50IHBsYW5lYl9jbG9jaywgaW50IHNyX2hkaXNwbGF5LCBpbnQgcGl4ZWxfc2l6ZSkKKwkJCSAgIGludCBwbGFuZWJfY2xvY2ssIGludCBzcl9oZGlzcGxheSwgaW50IHNyX2h0b3RhbCwKKwkJCSAgIGludCBwaXhlbF9zaXplKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdWludDMyX3QgZndhdGVyX2xvOwpAQCAtMzAzNCwxMiArMzI3OCwxMiBAQAogCQlzdGF0aWMgY29uc3QgaW50IHNyX2xhdGVuY3lfbnMgPSA2MDAwOwogCiAJCXNyX2Nsb2NrID0gcGxhbmVhX2Nsb2NrID8gcGxhbmVhX2Nsb2NrIDogcGxhbmViX2Nsb2NrOwotCQlsaW5lX3RpbWVfdXMgPSAoKHNyX2hkaXNwbGF5ICogMTAwMCkgLyBzcl9jbG9jayk7CisJCWxpbmVfdGltZV91cyA9ICgoc3JfaHRvdGFsICogMTAwMCkgLyBzcl9jbG9jayk7CiAKIAkJLyogVXNlIG5zL3VzIHRoZW4gZGl2aWRlIHRvIHByZXNlcnZlIHByZWNpc2lvbiAqLwotCQlzcl9lbnRyaWVzID0gKCgoc3JfbGF0ZW5jeV9ucyAvIGxpbmVfdGltZV91cykgKyAxKSAqCi0JCQkgICAgICBwaXhlbF9zaXplICogc3JfaGRpc3BsYXkpIC8gMTAwMDsKLQkJc3JfZW50cmllcyA9IHJvdW5kdXAoc3JfZW50cmllcyAvIGNhY2hlbGluZV9zaXplLCAxKTsKKwkJc3JfZW50cmllcyA9ICgoKHNyX2xhdGVuY3lfbnMgLyBsaW5lX3RpbWVfdXMpICsgMTAwMCkgLyAxMDAwKSAqCisJCQkgICAgICBwaXhlbF9zaXplICogc3JfaGRpc3BsYXk7CisJCXNyX2VudHJpZXMgPSBESVZfUk9VTkRfVVAoc3JfZW50cmllcywgY2FjaGVsaW5lX3NpemUpOwogCQlEUk1fREVCVUdfS01TKCJzZWxmLXJlZnJlc2ggZW50cmllczogJWRcbiIsIHNyX2VudHJpZXMpOwogCQlzcndtID0gdG90YWxfc2l6ZSAtIHNyX2VudHJpZXM7CiAJCWlmIChzcndtIDwgMCkKQEAgLTMwNzcsNyArMzMyMSw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGk4MzBfdXBkYXRlX3dtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwbGFuZWFfY2xvY2ssIGludCB1bnVzZWQsCi0JCQkgICBpbnQgdW51c2VkMiwgaW50IHBpeGVsX3NpemUpCisJCQkgICBpbnQgdW51c2VkMiwgaW50IHVudXNlZDMsIGludCBwaXhlbF9zaXplKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdWludDMyX3QgZndhdGVyX2xvID0gSTkxNV9SRUFEKEZXX0JMQykgJiB+MHhmZmY7CkBAIC0zMDk1LDkgKzMzMzksMTEgQEAKIH0KIAogI2RlZmluZSBJTEtfTFAwX1BMQU5FX0xBVEVOQ1kJCTcwMAorI2RlZmluZSBJTEtfTFAwX0NVUlNPUl9MQVRFTkNZCQkxMzAwCiAKIHN0YXRpYyB2b2lkIGlyb25sYWtlX3VwZGF0ZV93bShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCAgaW50IHBsYW5lYV9jbG9jaywKLQkJICAgICAgIGludCBwbGFuZWJfY2xvY2ssIGludCBzcl9oZGlzcGxheSwgaW50IHBpeGVsX3NpemUpCisJCSAgICAgICBpbnQgcGxhbmViX2Nsb2NrLCBpbnQgc3JfaGRpc3BsYXksIGludCBzcl9odG90YWwsCisJCSAgICAgICBpbnQgcGl4ZWxfc2l6ZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWludCBwbGFuZWFfd20sIHBsYW5lYl93bSwgY3Vyc29yYV93bSwgY3Vyc29yYl93bTsKQEAgLTMxMDUsMjAgKzMzNTEsNDggQEAKIAl1bnNpZ25lZCBsb25nIGxpbmVfdGltZV91czsKIAlpbnQgc3JfY2xvY2ssIGVudHJpZXNfcmVxdWlyZWQ7CiAJdTMyIHJlZ192YWx1ZTsKKwlpbnQgbGluZV9jb3VudDsKKwlpbnQgcGxhbmVhX2h0b3RhbCA9IDAsIHBsYW5lYl9odG90YWwgPSAwOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YzsKKworCS8qIE5lZWQgaHRvdGFsIGZvciBhbGwgYWN0aXZlIGRpc3BsYXkgcGxhbmUgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCQlpbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKKwkJaWYgKGNydGMtPmVuYWJsZWQpIHsKKwkJCWlmIChpbnRlbF9jcnRjLT5wbGFuZSA9PSAwKQorCQkJCXBsYW5lYV9odG90YWwgPSBjcnRjLT5tb2RlLmh0b3RhbDsKKwkJCWVsc2UKKwkJCQlwbGFuZWJfaHRvdGFsID0gY3J0Yy0+bW9kZS5odG90YWw7CisJCX0KKwl9CiAKIAkvKiBDYWxjdWxhdGUgYW5kIHVwZGF0ZSB0aGUgd2F0ZXJtYXJrIGZvciBwbGFuZSBBICovCiAJaWYgKHBsYW5lYV9jbG9jaykgewogCQllbnRyaWVzX3JlcXVpcmVkID0gKChwbGFuZWFfY2xvY2sgLyAxMDAwKSAqIHBpeGVsX3NpemUgKgogCQkJCSAgICAgSUxLX0xQMF9QTEFORV9MQVRFTkNZKSAvIDEwMDA7CiAJCWVudHJpZXNfcmVxdWlyZWQgPSBESVZfUk9VTkRfVVAoZW50cmllc19yZXF1aXJlZCwKLQkJCQkgICBpcm9ubGFrZV9kaXNwbGF5X3dtX2luZm8uY2FjaGVsaW5lX3NpemUpOworCQkJCQkJaXJvbmxha2VfZGlzcGxheV93bV9pbmZvLmNhY2hlbGluZV9zaXplKTsKIAkJcGxhbmVhX3dtID0gZW50cmllc19yZXF1aXJlZCArCiAJCQkgICAgaXJvbmxha2VfZGlzcGxheV93bV9pbmZvLmd1YXJkX3NpemU7CiAKIAkJaWYgKHBsYW5lYV93bSA+IChpbnQpaXJvbmxha2VfZGlzcGxheV93bV9pbmZvLm1heF93bSkKIAkJCXBsYW5lYV93bSA9IGlyb25sYWtlX2Rpc3BsYXlfd21faW5mby5tYXhfd207CiAKLQkJY3Vyc29yYV93bSA9IDE2OworCQkvKiBVc2UgdGhlIGxhcmdlIGJ1ZmZlciBtZXRob2QgdG8gY2FsY3VsYXRlIGN1cnNvciB3YXRlcm1hcmsgKi8KKwkJbGluZV90aW1lX3VzID0gKHBsYW5lYV9odG90YWwgKiAxMDAwKSAvIHBsYW5lYV9jbG9jazsKKworCQkvKiBVc2UgbnMvdXMgdGhlbiBkaXZpZGUgdG8gcHJlc2VydmUgcHJlY2lzaW9uICovCisJCWxpbmVfY291bnQgPSAoSUxLX0xQMF9DVVJTT1JfTEFURU5DWSAvIGxpbmVfdGltZV91cyArIDEwMDApIC8gMTAwMDsKKworCQkvKiBjYWxjdWxhdGUgdGhlIGN1cnNvciB3YXRlcm1hcmsgZm9yIGN1cnNvciBBICovCisJCWVudHJpZXNfcmVxdWlyZWQgPSBsaW5lX2NvdW50ICogNjQgKiBwaXhlbF9zaXplOworCQllbnRyaWVzX3JlcXVpcmVkID0gRElWX1JPVU5EX1VQKGVudHJpZXNfcmVxdWlyZWQsCisJCQkJCQlpcm9ubGFrZV9jdXJzb3Jfd21faW5mby5jYWNoZWxpbmVfc2l6ZSk7CisJCWN1cnNvcmFfd20gPSBlbnRyaWVzX3JlcXVpcmVkICsgaXJvbmxha2VfY3Vyc29yX3dtX2luZm8uZ3VhcmRfc2l6ZTsKKwkJaWYgKGN1cnNvcmFfd20gPiBpcm9ubGFrZV9jdXJzb3Jfd21faW5mby5tYXhfd20pCisJCQljdXJzb3JhX3dtID0gaXJvbmxha2VfY3Vyc29yX3dtX2luZm8ubWF4X3dtOworCiAJCXJlZ192YWx1ZSA9IEk5MTVfUkVBRChXTTBfUElQRUFfSUxLKTsKIAkJcmVnX3ZhbHVlICY9IH4oV00wX1BJUEVfUExBTkVfTUFTSyB8IFdNMF9QSVBFX0NVUlNPUl9NQVNLKTsKIAkJcmVnX3ZhbHVlIHw9IChwbGFuZWFfd20gPDwgV00wX1BJUEVfUExBTkVfU0hJRlQpIHwKQEAgLTMxMzIsMTQgKzM0MDYsMjcgQEAKIAkJZW50cmllc19yZXF1aXJlZCA9ICgocGxhbmViX2Nsb2NrIC8gMTAwMCkgKiBwaXhlbF9zaXplICoKIAkJCQkgICAgIElMS19MUDBfUExBTkVfTEFURU5DWSkgLyAxMDAwOwogCQllbnRyaWVzX3JlcXVpcmVkID0gRElWX1JPVU5EX1VQKGVudHJpZXNfcmVxdWlyZWQsCi0JCQkJICAgaXJvbmxha2VfZGlzcGxheV93bV9pbmZvLmNhY2hlbGluZV9zaXplKTsKKwkJCQkJCWlyb25sYWtlX2Rpc3BsYXlfd21faW5mby5jYWNoZWxpbmVfc2l6ZSk7CiAJCXBsYW5lYl93bSA9IGVudHJpZXNfcmVxdWlyZWQgKwogCQkJICAgIGlyb25sYWtlX2Rpc3BsYXlfd21faW5mby5ndWFyZF9zaXplOwogCiAJCWlmIChwbGFuZWJfd20gPiAoaW50KWlyb25sYWtlX2Rpc3BsYXlfd21faW5mby5tYXhfd20pCiAJCQlwbGFuZWJfd20gPSBpcm9ubGFrZV9kaXNwbGF5X3dtX2luZm8ubWF4X3dtOwogCi0JCWN1cnNvcmJfd20gPSAxNjsKKwkJLyogVXNlIHRoZSBsYXJnZSBidWZmZXIgbWV0aG9kIHRvIGNhbGN1bGF0ZSBjdXJzb3Igd2F0ZXJtYXJrICovCisJCWxpbmVfdGltZV91cyA9IChwbGFuZWJfaHRvdGFsICogMTAwMCkgLyBwbGFuZWJfY2xvY2s7CisKKwkJLyogVXNlIG5zL3VzIHRoZW4gZGl2aWRlIHRvIHByZXNlcnZlIHByZWNpc2lvbiAqLworCQlsaW5lX2NvdW50ID0gKElMS19MUDBfQ1VSU09SX0xBVEVOQ1kgLyBsaW5lX3RpbWVfdXMgKyAxMDAwKSAvIDEwMDA7CisKKwkJLyogY2FsY3VsYXRlIHRoZSBjdXJzb3Igd2F0ZXJtYXJrIGZvciBjdXJzb3IgQiAqLworCQllbnRyaWVzX3JlcXVpcmVkID0gbGluZV9jb3VudCAqIDY0ICogcGl4ZWxfc2l6ZTsKKwkJZW50cmllc19yZXF1aXJlZCA9IERJVl9ST1VORF9VUChlbnRyaWVzX3JlcXVpcmVkLAorCQkJCQkJaXJvbmxha2VfY3Vyc29yX3dtX2luZm8uY2FjaGVsaW5lX3NpemUpOworCQljdXJzb3JiX3dtID0gZW50cmllc19yZXF1aXJlZCArIGlyb25sYWtlX2N1cnNvcl93bV9pbmZvLmd1YXJkX3NpemU7CisJCWlmIChjdXJzb3JiX3dtID4gaXJvbmxha2VfY3Vyc29yX3dtX2luZm8ubWF4X3dtKQorCQkJY3Vyc29yYl93bSA9IGlyb25sYWtlX2N1cnNvcl93bV9pbmZvLm1heF93bTsKKwogCQlyZWdfdmFsdWUgPSBJOTE1X1JFQUQoV00wX1BJUEVCX0lMSyk7CiAJCXJlZ192YWx1ZSAmPSB+KFdNMF9QSVBFX1BMQU5FX01BU0sgfCBXTTBfUElQRV9DVVJTT1JfTUFTSyk7CiAJCXJlZ192YWx1ZSB8PSAocGxhbmViX3dtIDw8IFdNMF9QSVBFX1BMQU5FX1NISUZUKSB8CkBAIC0zMTU0LDEyICszNDQxLDEyIEBACiAJICogZGlzcGxheSBwbGFuZSBpcyB1c2VkLgogCSAqLwogCWlmICghcGxhbmVhX2Nsb2NrIHx8ICFwbGFuZWJfY2xvY2spIHsKLQkJaW50IGxpbmVfY291bnQ7CisKIAkJLyogUmVhZCB0aGUgc2VsZi1yZWZyZXNoIGxhdGVuY3kuIFRoZSB1bml0IGlzIDAuNXVzICovCiAJCWludCBpbGtfc3JfbGF0ZW5jeSA9IEk5MTVfUkVBRChNTFRSX0lMSykgJiBJTEtfU1JMVF9NQVNLOwogCiAJCXNyX2Nsb2NrID0gcGxhbmVhX2Nsb2NrID8gcGxhbmVhX2Nsb2NrIDogcGxhbmViX2Nsb2NrOwotCQlsaW5lX3RpbWVfdXMgPSAoKHNyX2hkaXNwbGF5ICogMTAwMCkgLyBzcl9jbG9jayk7CisJCWxpbmVfdGltZV91cyA9ICgoc3JfaHRvdGFsICogMTAwMCkgLyBzcl9jbG9jayk7CiAKIAkJLyogVXNlIG5zL3VzIHRoZW4gZGl2aWRlIHRvIHByZXNlcnZlIHByZWNpc2lvbiAqLwogCQlsaW5lX2NvdW50ID0gKChpbGtfc3JfbGF0ZW5jeSAqIDUwMCkgLyBsaW5lX3RpbWVfdXMgKyAxMDAwKQpAQCAtMzE2OCwxNCArMzQ1NSwxNCBAQAogCQkvKiBjYWxjdWxhdGUgdGhlIHNlbGYtcmVmcmVzaCB3YXRlcm1hcmsgZm9yIGRpc3BsYXkgcGxhbmUgKi8KIAkJZW50cmllc19yZXF1aXJlZCA9IGxpbmVfY291bnQgKiBzcl9oZGlzcGxheSAqIHBpeGVsX3NpemU7CiAJCWVudHJpZXNfcmVxdWlyZWQgPSBESVZfUk9VTkRfVVAoZW50cmllc19yZXF1aXJlZCwKLQkJCQkgICBpcm9ubGFrZV9kaXNwbGF5X3Nyd21faW5mby5jYWNoZWxpbmVfc2l6ZSk7CisJCQkJCQlpcm9ubGFrZV9kaXNwbGF5X3Nyd21faW5mby5jYWNoZWxpbmVfc2l6ZSk7CiAJCXNyX3dtID0gZW50cmllc19yZXF1aXJlZCArCiAJCQlpcm9ubGFrZV9kaXNwbGF5X3Nyd21faW5mby5ndWFyZF9zaXplOwogCiAJCS8qIGNhbGN1bGF0ZSB0aGUgc2VsZi1yZWZyZXNoIHdhdGVybWFyayBmb3IgZGlzcGxheSBjdXJzb3IgKi8KIAkJZW50cmllc19yZXF1aXJlZCA9IGxpbmVfY291bnQgKiBwaXhlbF9zaXplICogNjQ7CiAJCWVudHJpZXNfcmVxdWlyZWQgPSBESVZfUk9VTkRfVVAoZW50cmllc19yZXF1aXJlZCwKLQkJCQkgICBpcm9ubGFrZV9jdXJzb3Jfc3J3bV9pbmZvLmNhY2hlbGluZV9zaXplKTsKKwkJCQkJCWlyb25sYWtlX2N1cnNvcl9zcndtX2luZm8uY2FjaGVsaW5lX3NpemUpOwogCQljdXJzb3Jfd20gPSBlbnRyaWVzX3JlcXVpcmVkICsKIAkJCSAgICBpcm9ubGFrZV9jdXJzb3Jfc3J3bV9pbmZvLmd1YXJkX3NpemU7CiAKQEAgLTMyMTksNiArMzUwNiw3IEBACiAgKiAgICAgICBieXRlcyBwZXIgcGl4ZWwKICAqICAgd2hlcmUKICAqICAgICBsaW5lIHRpbWUgPSBodG90YWwgLyBkb3RjbG9jaworICogICAgIHN1cmZhY2Ugd2lkdGggPSBoZGlzcGxheSBmb3Igbm9ybWFsIHBsYW5lIGFuZCA2NCBmb3IgY3Vyc29yCiAgKiAgIGFuZCBsYXRlbmN5IGlzIGFzc3VtZWQgdG8gYmUgaGlnaCwgYXMgYWJvdmUuCiAgKgogICogVGhlIGZpbmFsIHZhbHVlIHByb2dyYW1tZWQgdG8gdGhlIHJlZ2lzdGVyIHNob3VsZCBhbHdheXMgYmUgcm91bmRlZCB1cCwKQEAgLTMyMzUsNiArMzUyMyw3IEBACiAJaW50IHNyX2hkaXNwbGF5ID0gMDsKIAl1bnNpZ25lZCBsb25nIHBsYW5lYV9jbG9jayA9IDAsIHBsYW5lYl9jbG9jayA9IDAsIHNyX2Nsb2NrID0gMDsKIAlpbnQgZW5hYmxlZCA9IDAsIHBpeGVsX3NpemUgPSAwOworCWludCBzcl9odG90YWwgPSAwOwogCiAJaWYgKCFkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfd20pCiAJCXJldHVybjsKQEAgLTMyNTUsNiArMzU0NCw3IEBACiAJCQl9CiAJCQlzcl9oZGlzcGxheSA9IGNydGMtPm1vZGUuaGRpc3BsYXk7CiAJCQlzcl9jbG9jayA9IGNydGMtPm1vZGUuY2xvY2s7CisJCQlzcl9odG90YWwgPSBjcnRjLT5tb2RlLmh0b3RhbDsKIAkJCWlmIChjcnRjLT5mYikKIAkJCQlwaXhlbF9zaXplID0gY3J0Yy0+ZmItPmJpdHNfcGVyX3BpeGVsIC8gODsKIAkJCWVsc2UKQEAgLTMyNjYsNyArMzU1Niw3IEBACiAJCXJldHVybjsKIAogCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bShkZXYsIHBsYW5lYV9jbG9jaywgcGxhbmViX2Nsb2NrLAotCQkJCSAgICBzcl9oZGlzcGxheSwgcGl4ZWxfc2l6ZSk7CisJCQkJICAgIHNyX2hkaXNwbGF5LCBzcl9odG90YWwsIHBpeGVsX3NpemUpOwogfQogCiBzdGF0aWMgaW50IGludGVsX2NydGNfbW9kZV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLApAQCAtMzM4NSw2ICszNjc1LDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJLyogRW5zdXJlIHRoYXQgdGhlIGN1cnNvciBpcyB2YWxpZCBmb3IgdGhlIG5ldyBtb2RlIGJlZm9yZSBjaGFuZ2luZy4uLiAqLworCWludGVsX2NydGNfdXBkYXRlX2N1cnNvcihjcnRjKTsKKwogCWlmIChpc19sdmRzICYmIGRldl9wcml2LT5sdmRzX2Rvd25jbG9ja19hdmFpbCkgewogCQloYXNfcmVkdWNlZF9jbG9jayA9IGxpbWl0LT5maW5kX3BsbChsaW1pdCwgY3J0YywKIAkJCQkJCQkgICAgZGV2X3ByaXYtPmx2ZHNfZG93bmNsb2NrLApAQCAtMzQ1MSw3ICszNzQ0LDcgQEAKIAkJCQl0ZW1wIHw9IFBJUEVfOEJQQzsKIAkJCWVsc2UKIAkJCQl0ZW1wIHw9IFBJUEVfNkJQQzsKLQkJfSBlbHNlIGlmIChpc19lZHApIHsKKwkJfSBlbHNlIGlmIChpc19lZHAgfHwgKGlzX2RwICYmIGludGVsX3BjaF9oYXNfZWRwKGNydGMpKSkgewogCQkJc3dpdGNoIChkZXZfcHJpdi0+ZWRwX2JwcC8zKSB7CiAJCQljYXNlIDg6CiAJCQkJdGVtcCB8PSBQSVBFXzhCUEM7CkBAIC0zNjk0LDYgKzM5ODcsMTEgQEAKIAkJdWRlbGF5KDE1MCk7CiAJfQogCisJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkgeworCQlwaXBlY29uZiAmPSB+UElQRV9FTkFCTEVfRElUSEVSOworCQlwaXBlY29uZiAmPSB+UElQRV9ESVRIRVJfVFlQRV9NQVNLOworCX0KKwogCS8qIFRoZSBMVkRTIHBpbiBwYWlyIG5lZWRzIHRvIGJlIG9uIGJlZm9yZSB0aGUgRFBMTHMgYXJlIGVuYWJsZWQuCiAJICogVGhpcyBpcyBhbiBleGNlcHRpb24gdG8gdGhlIGdlbmVyYWwgcnVsZSB0aGF0IG1vZGVfc2V0IGRvZXNuJ3QgdHVybgogCSAqIHRoaW5ncyBvbi4KQEAgLTM3NDAsMTEgKzQwMzgsOSBAQAogCQkJCX0gZWxzZQogCQkJCQlsdmRzIHw9IExWRFNfRU5BQkxFX0RJVEhFUjsKIAkJCX0gZWxzZSB7Ci0JCQkJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkgewotCQkJCQlwaXBlY29uZiAmPSB+UElQRV9FTkFCTEVfRElUSEVSOwotCQkJCQlwaXBlY29uZiAmPSB+UElQRV9ESVRIRVJfVFlQRV9NQVNLOwotCQkJCX0gZWxzZQorCQkJCWlmICghSEFTX1BDSF9TUExJVChkZXYpKSB7CiAJCQkJCWx2ZHMgJj0gfkxWRFNfRU5BQkxFX0RJVEhFUjsKKwkJCQl9CiAJCQl9CiAJCX0KIAkJSTkxNV9XUklURShsdmRzX3JlZywgbHZkcyk7CkBAIC0zOTIwLDYgKzQyMTYsODUgQEAKIAl9CiB9CiAKKy8qIElmIG5vLXBhcnQgb2YgdGhlIGN1cnNvciBpcyB2aXNpYmxlIG9uIHRoZSBmcmFtZWJ1ZmZlciwgdGhlbiB0aGUgR1BVIG1heSBoYW5nLi4uICovCitzdGF0aWMgdm9pZCBpbnRlbF9jcnRjX3VwZGF0ZV9jdXJzb3Ioc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisJaW50IHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOworCWludCB4ID0gaW50ZWxfY3J0Yy0+Y3Vyc29yX3g7CisJaW50IHkgPSBpbnRlbF9jcnRjLT5jdXJzb3JfeTsKKwl1aW50MzJfdCBiYXNlLCBwb3M7CisJYm9vbCB2aXNpYmxlOworCisJcG9zID0gMDsKKworCWlmIChjcnRjLT5mYikgeworCQliYXNlID0gaW50ZWxfY3J0Yy0+Y3Vyc29yX2FkZHI7CisJCWlmICh4ID4gKGludCkgY3J0Yy0+ZmItPndpZHRoKQorCQkJYmFzZSA9IDA7CisKKwkJaWYgKHkgPiAoaW50KSBjcnRjLT5mYi0+aGVpZ2h0KQorCQkJYmFzZSA9IDA7CisJfSBlbHNlCisJCWJhc2UgPSAwOworCisJaWYgKHggPCAwKSB7CisJCWlmICh4ICsgaW50ZWxfY3J0Yy0+Y3Vyc29yX3dpZHRoIDwgMCkKKwkJCWJhc2UgPSAwOworCisJCXBvcyB8PSBDVVJTT1JfUE9TX1NJR04gPDwgQ1VSU09SX1hfU0hJRlQ7CisJCXggPSAteDsKKwl9CisJcG9zIHw9IHggPDwgQ1VSU09SX1hfU0hJRlQ7CisKKwlpZiAoeSA8IDApIHsKKwkJaWYgKHkgKyBpbnRlbF9jcnRjLT5jdXJzb3JfaGVpZ2h0IDwgMCkKKwkJCWJhc2UgPSAwOworCisJCXBvcyB8PSBDVVJTT1JfUE9TX1NJR04gPDwgQ1VSU09SX1lfU0hJRlQ7CisJCXkgPSAteTsKKwl9CisJcG9zIHw9IHkgPDwgQ1VSU09SX1lfU0hJRlQ7CisKKwl2aXNpYmxlID0gYmFzZSAhPSAwOworCWlmICghdmlzaWJsZSAmJiAhaW50ZWxfY3J0Yy0+Y3Vyc29yX3Zpc2JsZSkKKwkJcmV0dXJuOworCisJSTkxNV9XUklURShwaXBlID09IDAgPyBDVVJBUE9TIDogQ1VSQlBPUywgcG9zKTsKKwlpZiAoaW50ZWxfY3J0Yy0+Y3Vyc29yX3Zpc2JsZSAhPSB2aXNpYmxlKSB7CisJCXVpbnQzMl90IGNudGwgPSBJOTE1X1JFQUQocGlwZSA9PSAwID8gQ1VSQUNOVFIgOiBDVVJCQ05UUik7CisJCWlmIChiYXNlKSB7CisJCQkvKiBIb29yYXkgZm9yIENVUipDTlRSIGRpZmZlcmVuY2VzICovCisJCQlpZiAoSVNfTU9CSUxFKGRldikgfHwgSVNfSTlYWChkZXYpKSB7CisJCQkJY250bCAmPSB+KENVUlNPUl9NT0RFIHwgTUNVUlNPUl9QSVBFX1NFTEVDVCk7CisJCQkJY250bCB8PSBDVVJTT1JfTU9ERV82NF9BUkdCX0FYIHwgTUNVUlNPUl9HQU1NQV9FTkFCTEU7CisJCQkJY250bCB8PSBwaXBlIDw8IDI4OyAvKiBDb25uZWN0IHRvIGNvcnJlY3QgcGlwZSAqLworCQkJfSBlbHNlIHsKKwkJCQljbnRsICY9IH4oQ1VSU09SX0ZPUk1BVF9NQVNLKTsKKwkJCQljbnRsIHw9IENVUlNPUl9FTkFCTEU7CisJCQkJY250bCB8PSBDVVJTT1JfRk9STUFUX0FSR0IgfCBDVVJTT1JfR0FNTUFfRU5BQkxFOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKElTX01PQklMRShkZXYpIHx8IElTX0k5WFgoZGV2KSkgeworCQkJCWNudGwgJj0gfihDVVJTT1JfTU9ERSB8IE1DVVJTT1JfR0FNTUFfRU5BQkxFKTsKKwkJCQljbnRsIHw9IENVUlNPUl9NT0RFX0RJU0FCTEU7CisJCQl9IGVsc2UgeworCQkJCWNudGwgJj0gfihDVVJTT1JfRU5BQkxFIHwgQ1VSU09SX0dBTU1BX0VOQUJMRSk7CisJCQl9CisJCX0KKwkJSTkxNV9XUklURShwaXBlID09IDAgPyBDVVJBQ05UUiA6IENVUkJDTlRSLCBjbnRsKTsKKworCQlpbnRlbF9jcnRjLT5jdXJzb3JfdmlzYmxlID0gdmlzaWJsZTsKKwl9CisJLyogYW5kIGNvbW1pdCBjaGFuZ2VzIG9uIG5leHQgdmJsYW5rICovCisJSTkxNV9XUklURShwaXBlID09IDAgPyBDVVJBQkFTRSA6IENVUkJCQVNFLCBiYXNlKTsKKworCWlmICh2aXNpYmxlKQorCQlpbnRlbF9tYXJrX2J1c3koZGV2LCB0b19pbnRlbF9mcmFtZWJ1ZmZlcihjcnRjLT5mYiktPm9iaik7Cit9CisKIHN0YXRpYyBpbnQgaW50ZWxfY3J0Y19jdXJzb3Jfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCiAJCQkJIHVpbnQzMl90IGhhbmRsZSwKQEAgLTM5MzAsMTEgKzQzMDUsNyBAQAogCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmJvOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKLQlpbnQgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7Ci0JdWludDMyX3QgY29udHJvbCA9IChwaXBlID09IDApID8gQ1VSQUNOVFIgOiBDVVJCQ05UUjsKLQl1aW50MzJfdCBiYXNlID0gKHBpcGUgPT0gMCkgPyBDVVJBQkFTRSA6IENVUkJCQVNFOwotCXVpbnQzMl90IHRlbXAgPSBJOTE1X1JFQUQoY29udHJvbCk7Ci0Jc2l6ZV90IGFkZHI7CisJdWludDMyX3QgYWRkcjsKIAlpbnQgcmV0OwogCiAJRFJNX0RFQlVHX0tNUygiXG4iKTsKQEAgLTM5NDIsMTIgKzQzMTMsNiBAQAogCS8qIGlmIHdlIHdhbnQgdG8gdHVybiBvZmYgdGhlIGN1cnNvciBpZ25vcmUgd2lkdGggYW5kIGhlaWdodCAqLwogCWlmICghaGFuZGxlKSB7CiAJCURSTV9ERUJVR19LTVMoImN1cnNvciBvZmZcbiIpOwotCQlpZiAoSVNfTU9CSUxFKGRldikgfHwgSVNfSTlYWChkZXYpKSB7Ci0JCQl0ZW1wICY9IH4oQ1VSU09SX01PREUgfCBNQ1VSU09SX0dBTU1BX0VOQUJMRSk7Ci0JCQl0ZW1wIHw9IENVUlNPUl9NT0RFX0RJU0FCTEU7Ci0JCX0gZWxzZSB7Ci0JCQl0ZW1wICY9IH4oQ1VSU09SX0VOQUJMRSB8IENVUlNPUl9HQU1NQV9FTkFCTEUpOwotCQl9CiAJCWFkZHIgPSAwOwogCQlibyA9IE5VTEw7CiAJCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKQEAgLTM5ODksNyArNDM1NCw4IEBACiAKIAkJYWRkciA9IG9ial9wcml2LT5ndHRfb2Zmc2V0OwogCX0gZWxzZSB7Ci0JCXJldCA9IGk5MTVfZ2VtX2F0dGFjaF9waHlzX29iamVjdChkZXYsIGJvLCAocGlwZSA9PSAwKSA/IEk5MTVfR0VNX1BIWVNfQ1VSU09SXzAgOiBJOTE1X0dFTV9QSFlTX0NVUlNPUl8xKTsKKwkJcmV0ID0gaTkxNV9nZW1fYXR0YWNoX3BoeXNfb2JqZWN0KGRldiwgYm8sCisJCQkJCQkgIChpbnRlbF9jcnRjLT5waXBlID09IDApID8gSTkxNV9HRU1fUEhZU19DVVJTT1JfMCA6IEk5MTVfR0VNX1BIWVNfQ1VSU09SXzEpOwogCQlpZiAocmV0KSB7CiAJCQlEUk1fRVJST1IoImZhaWxlZCB0byBhdHRhY2ggcGh5cyBvYmplY3RcbiIpOwogCQkJZ290byBmYWlsX2xvY2tlZDsKQEAgLTQwMDAsMjEgKzQzNjYsNyBAQAogCWlmICghSVNfSTlYWChkZXYpKQogCQlJOTE1X1dSSVRFKENVUlNJWkUsIChoZWlnaHQgPDwgMTIpIHwgd2lkdGgpOwogCi0JLyogSG9vcmF5IGZvciBDVVIqQ05UUiBkaWZmZXJlbmNlcyAqLwotCWlmIChJU19NT0JJTEUoZGV2KSB8fCBJU19JOVhYKGRldikpIHsKLQkJdGVtcCAmPSB+KENVUlNPUl9NT0RFIHwgTUNVUlNPUl9QSVBFX1NFTEVDVCk7Ci0JCXRlbXAgfD0gQ1VSU09SX01PREVfNjRfQVJHQl9BWCB8IE1DVVJTT1JfR0FNTUFfRU5BQkxFOwotCQl0ZW1wIHw9IChwaXBlIDw8IDI4KTsgLyogQ29ubmVjdCB0byBjb3JyZWN0IHBpcGUgKi8KLQl9IGVsc2UgewotCQl0ZW1wICY9IH4oQ1VSU09SX0ZPUk1BVF9NQVNLKTsKLQkJdGVtcCB8PSBDVVJTT1JfRU5BQkxFOwotCQl0ZW1wIHw9IENVUlNPUl9GT1JNQVRfQVJHQiB8IENVUlNPUl9HQU1NQV9FTkFCTEU7Ci0JfQotCiAgZmluaXNoOgotCUk5MTVfV1JJVEUoY29udHJvbCwgdGVtcCk7Ci0JSTkxNV9XUklURShiYXNlLCBhZGRyKTsKLQogCWlmIChpbnRlbF9jcnRjLT5jdXJzb3JfYm8pIHsKIAkJaWYgKGRldl9wcml2LT5pbmZvLT5jdXJzb3JfbmVlZHNfcGh5c2ljYWwpIHsKIAkJCWlmIChpbnRlbF9jcnRjLT5jdXJzb3JfYm8gIT0gYm8pCkBAIC00MDI4LDYgKzQzODAsMTAgQEAKIAogCWludGVsX2NydGMtPmN1cnNvcl9hZGRyID0gYWRkcjsKIAlpbnRlbF9jcnRjLT5jdXJzb3JfYm8gPSBibzsKKwlpbnRlbF9jcnRjLT5jdXJzb3Jfd2lkdGggPSB3aWR0aDsKKwlpbnRlbF9jcnRjLT5jdXJzb3JfaGVpZ2h0ID0gaGVpZ2h0OworCisJaW50ZWxfY3J0Y191cGRhdGVfY3Vyc29yKGNydGMpOwogCiAJcmV0dXJuIDA7CiBmYWlsX3VucGluOgpAQCAtNDA0MSwzNCArNDM5NywxMiBAQAogCiBzdGF0aWMgaW50IGludGVsX2NydGNfY3Vyc29yX21vdmUoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgeCwgaW50IHkpCiB7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKLQlzdHJ1Y3QgaW50ZWxfZnJhbWVidWZmZXIgKmludGVsX2ZiOwotCWludCBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKLQl1aW50MzJfdCB0ZW1wID0gMDsKLQl1aW50MzJfdCBhZGRlcjsKIAotCWlmIChjcnRjLT5mYikgewotCQlpbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGNydGMtPmZiKTsKLQkJaW50ZWxfbWFya19idXN5KGRldiwgaW50ZWxfZmItPm9iaik7Ci0JfQorCWludGVsX2NydGMtPmN1cnNvcl94ID0geDsKKwlpbnRlbF9jcnRjLT5jdXJzb3JfeSA9IHk7CiAKLQlpZiAoeCA8IDApIHsKLQkJdGVtcCB8PSBDVVJTT1JfUE9TX1NJR04gPDwgQ1VSU09SX1hfU0hJRlQ7Ci0JCXggPSAteDsKLQl9Ci0JaWYgKHkgPCAwKSB7Ci0JCXRlbXAgfD0gQ1VSU09SX1BPU19TSUdOIDw8IENVUlNPUl9ZX1NISUZUOwotCQl5ID0gLXk7Ci0JfQotCi0JdGVtcCB8PSB4IDw8IENVUlNPUl9YX1NISUZUOwotCXRlbXAgfD0geSA8PCBDVVJTT1JfWV9TSElGVDsKLQotCWFkZGVyID0gaW50ZWxfY3J0Yy0+Y3Vyc29yX2FkZHI7Ci0JSTkxNV9XUklURSgocGlwZSA9PSAwKSA/IENVUkFQT1MgOiBDVVJCUE9TLCB0ZW1wKTsKLQlJOTE1X1dSSVRFKChwaXBlID09IDApID8gQ1VSQUJBU0UgOiBDVVJCQkFTRSwgYWRkZXIpOworCWludGVsX2NydGNfdXBkYXRlX2N1cnNvcihjcnRjKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDQxMiw3ICs0NzQ2LDggQEAKIAkJRFJNX0RFQlVHX0RSSVZFUigidXBjbG9ja2luZyBMVkRTXG4iKTsKIAogCQkvKiBVbmxvY2sgcGFuZWwgcmVncyAqLwotCQlJOTE1X1dSSVRFKFBQX0NPTlRST0wsIEk5MTVfUkVBRChQUF9DT05UUk9MKSB8ICgweGFiY2QgPDwgMTYpKTsKKwkJSTkxNV9XUklURShQUF9DT05UUk9MLCBJOTE1X1JFQUQoUFBfQ09OVFJPTCkgfAorCQkJICAgUEFORUxfVU5MT0NLX1JFR1MpOwogCiAJCWRwbGwgJj0gfkRJU1BMQVlfUkFURV9TRUxFQ1RfRlBBMTsKIAkJSTkxNV9XUklURShkcGxsX3JlZywgZHBsbCk7CkBAIC00NDU1LDcgKzQ3OTAsOCBAQAogCQlEUk1fREVCVUdfRFJJVkVSKCJkb3duY2xvY2tpbmcgTFZEU1xuIik7CiAKIAkJLyogVW5sb2NrIHBhbmVsIHJlZ3MgKi8KLQkJSTkxNV9XUklURShQUF9DT05UUk9MLCBJOTE1X1JFQUQoUFBfQ09OVFJPTCkgfCAoMHhhYmNkIDw8IDE2KSk7CisJCUk5MTVfV1JJVEUoUFBfQ09OVFJPTCwgSTkxNV9SRUFEKFBQX0NPTlRST0wpIHwKKwkJCSAgIFBBTkVMX1VOTE9DS19SRUdTKTsKIAogCQlkcGxsIHw9IERJU1BMQVlfUkFURV9TRUxFQ1RfRlBBMTsKIAkJSTkxNV9XUklURShkcGxsX3JlZywgZHBsbCk7CkBAIC00NjUwLDYgKzQ5ODYsOCBAQAogCSAgICBhdG9taWNfZGVjX2FuZF90ZXN0KCZvYmpfcHJpdi0+cGVuZGluZ19mbGlwKSkKIAkJRFJNX1dBS0VVUCgmZGV2X3ByaXYtPnBlbmRpbmdfZmxpcF9xdWV1ZSk7CiAJc2NoZWR1bGVfd29yaygmd29yay0+d29yayk7CisKKwl0cmFjZV9pOTE1X2ZsaXBfY29tcGxldGUoaW50ZWxfY3J0Yy0+cGxhbmUsIHdvcmstPnBlbmRpbmdfZmxpcF9vYmopOwogfQogCiB2b2lkIGludGVsX2ZpbmlzaF9wYWdlX2ZsaXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBpcGUpCkBAIC00Njk1LDcgKzUwMzMsNyBAQAogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwogCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKIAlzdHJ1Y3QgaW50ZWxfdW5waW5fd29yayAqd29yazsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIG9mZnNldDsKIAlpbnQgcGlwZXNyY19yZWcgPSAoaW50ZWxfY3J0Yy0+cGlwZSA9PSAwKSA/IFBJUEVBU1JDIDogUElQRUJTUkM7CiAJaW50IHJldCwgcGlwZXNyYzsKIAl1MzIgZmxpcF9tYXNrOwpAQCAtNDcyNywyNyArNTA2NSwyMiBAQAogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCXJldCA9IGludGVsX3Bpbl9hbmRfZmVuY2VfZmJfb2JqKGRldiwgb2JqKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwotCQlpbnRlbF9jcnRjLT51bnBpbl93b3JrID0gTlVMTDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7Ci0KLQkJa2ZyZWUod29yayk7Ci0KLQkJRFJNX0RFQlVHX0RSSVZFUigiZmxpcCBxdWV1ZTogJXAgcGluICYgZmVuY2UgZmFpbGVkXG4iLAotCQkJCSB0b19pbnRlbF9ibyhvYmopKTsKLQkJcmV0dXJuIHJldDsKLQl9CisJaWYgKHJldCkKKwkJZ290byBjbGVhbnVwX3dvcms7CiAKIAkvKiBSZWZlcmVuY2UgdGhlIG9iamVjdHMgZm9yIHRoZSBzY2hlZHVsZWQgd29yay4gKi8KIAlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2Uod29yay0+b2xkX2ZiX29iaik7CiAJZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKG9iaik7CiAKIAljcnRjLT5mYiA9IGZiOwotCWk5MTVfZ2VtX29iamVjdF9mbHVzaF93cml0ZV9kb21haW4ob2JqKTsKLQlkcm1fdmJsYW5rX2dldChkZXYsIGludGVsX2NydGMtPnBpcGUpOworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9mbHVzaF93cml0ZV9kb21haW4ob2JqKTsKKwlpZiAocmV0KQorCQlnb3RvIGNsZWFudXBfb2JqczsKKworCXJldCA9IGRybV92YmxhbmtfZ2V0KGRldiwgaW50ZWxfY3J0Yy0+cGlwZSk7CisJaWYgKHJldCkKKwkJZ290byBjbGVhbnVwX29ianM7CisKIAlvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7CiAJYXRvbWljX2luYygmb2JqX3ByaXYtPnBlbmRpbmdfZmxpcCk7CiAJd29yay0+cGVuZGluZ19mbGlwX29iaiA9IG9iajsKQEAgLTQ3NjIsMjYgKzUwOTUsNDYgQEAKIAkJd2hpbGUgKEk5MTVfUkVBRChJU1IpICYgZmxpcF9tYXNrKQogCQkJOwogCisJLyogT2Zmc2V0IGludG8gdGhlIG5ldyBidWZmZXIgZm9yIGNhc2VzIG9mIHNoYXJlZCBmYnMgYmV0d2VlbiBDUlRDcyAqLworCW9mZnNldCA9IG9ial9wcml2LT5ndHRfb2Zmc2V0OworCW9mZnNldCArPSAoY3J0Yy0+eSAqIGZiLT5waXRjaCkgKyAoY3J0Yy0+eCAqIChmYi0+Yml0c19wZXJfcGl4ZWwpIC8gOCk7CisKIAlCRUdJTl9MUF9SSU5HKDQpOwogCWlmIChJU19JOTY1RyhkZXYpKSB7CiAJCU9VVF9SSU5HKE1JX0RJU1BMQVlfRkxJUCB8CiAJCQkgTUlfRElTUExBWV9GTElQX1BMQU5FKGludGVsX2NydGMtPnBsYW5lKSk7CiAJCU9VVF9SSU5HKGZiLT5waXRjaCk7Ci0JCU9VVF9SSU5HKG9ial9wcml2LT5ndHRfb2Zmc2V0IHwgb2JqX3ByaXYtPnRpbGluZ19tb2RlKTsKKwkJT1VUX1JJTkcob2Zmc2V0IHwgb2JqX3ByaXYtPnRpbGluZ19tb2RlKTsKIAkJcGlwZXNyYyA9IEk5MTVfUkVBRChwaXBlc3JjX3JlZyk7IAogCQlPVVRfUklORyhwaXBlc3JjICYgMHgwZmZmMGZmZik7CiAJfSBlbHNlIHsKIAkJT1VUX1JJTkcoTUlfRElTUExBWV9GTElQX0k5MTUgfAogCQkJIE1JX0RJU1BMQVlfRkxJUF9QTEFORShpbnRlbF9jcnRjLT5wbGFuZSkpOwogCQlPVVRfUklORyhmYi0+cGl0Y2gpOwotCQlPVVRfUklORyhvYmpfcHJpdi0+Z3R0X29mZnNldCk7CisJCU9VVF9SSU5HKG9mZnNldCk7CiAJCU9VVF9SSU5HKE1JX05PT1ApOwogCX0KIAlBRFZBTkNFX0xQX1JJTkcoKTsKIAogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCisJdHJhY2VfaTkxNV9mbGlwX3JlcXVlc3QoaW50ZWxfY3J0Yy0+cGxhbmUsIG9iaik7CisKIAlyZXR1cm4gMDsKKworY2xlYW51cF9vYmpzOgorCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHdvcmstPm9sZF9mYl9vYmopOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CitjbGVhbnVwX3dvcms6CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisJaW50ZWxfY3J0Yy0+dW5waW5fd29yayA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisKKwlrZnJlZSh3b3JrKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIGludGVsX2hlbHBlcl9mdW5jcyA9IHsKQEAgLTQ3ODksNiArNTE0Miw3IEBACiAJLm1vZGVfZml4dXAgPSBpbnRlbF9jcnRjX21vZGVfZml4dXAsCiAJLm1vZGVfc2V0ID0gaW50ZWxfY3J0Y19tb2RlX3NldCwKIAkubW9kZV9zZXRfYmFzZSA9IGludGVsX3BpcGVfc2V0X2Jhc2UsCisJLm1vZGVfc2V0X2Jhc2VfYXRvbWljID0gaW50ZWxfcGlwZV9zZXRfYmFzZV9hdG9taWMsCiAJLnByZXBhcmUgPSBpbnRlbF9jcnRjX3ByZXBhcmUsCiAJLmNvbW1pdCA9IGludGVsX2NydGNfY29tbWl0LAogCS5sb2FkX2x1dCA9IGludGVsX2NydGNfbG9hZF9sdXQsCkBAIC00OTA3LDE5ICs1MjYxLDI2IEBACiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJYm9vbCBkcGRfaXNfZWRwID0gZmFsc2U7CiAKLQlpbnRlbF9jcnRfaW5pdChkZXYpOwotCi0JLyogU2V0IHVwIGludGVncmF0ZWQgTFZEUyAqLwogCWlmIChJU19NT0JJTEUoZGV2KSAmJiAhSVNfSTgzMChkZXYpKQogCQlpbnRlbF9sdmRzX2luaXQoZGV2KTsKIAogCWlmIChIQVNfUENIX1NQTElUKGRldikpIHsKLQkJaW50IGZvdW5kOworCQlkcGRfaXNfZWRwID0gaW50ZWxfZHBkX2lzX2VkcChkZXYpOwogCiAJCWlmIChJU19NT0JJTEUoZGV2KSAmJiAoSTkxNV9SRUFEKERQX0EpICYgRFBfREVURUNURUQpKQogCQkJaW50ZWxfZHBfaW5pdChkZXYsIERQX0EpOwogCisJCWlmIChkcGRfaXNfZWRwICYmIChJOTE1X1JFQUQoUENIX0RQX0QpICYgRFBfREVURUNURUQpKQorCQkJaW50ZWxfZHBfaW5pdChkZXYsIFBDSF9EUF9EKTsKKwl9CisKKwlpbnRlbF9jcnRfaW5pdChkZXYpOworCisJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkgeworCQlpbnQgZm91bmQ7CisKIAkJaWYgKEk5MTVfUkVBRChIRE1JQikgJiBQT1JUX0RFVEVDVEVEKSB7CiAJCQkvKiBQQ0ggU0RWT0IgbXVsdGlwbGV4IHdpdGggSERNSUIgKi8KIAkJCWZvdW5kID0gaW50ZWxfc2R2b19pbml0KGRldiwgUENIX1NEVk9CKTsKQEAgLTQ5MzgsNyArNTI5OSw3IEBACiAJCWlmIChJOTE1X1JFQUQoUENIX0RQX0MpICYgRFBfREVURUNURUQpCiAJCQlpbnRlbF9kcF9pbml0KGRldiwgUENIX0RQX0MpOwogCi0JCWlmIChJOTE1X1JFQUQoUENIX0RQX0QpICYgRFBfREVURUNURUQpCisJCWlmICghZHBkX2lzX2VkcCAmJiAoSTkxNV9SRUFEKFBDSF9EUF9EKSAmIERQX0RFVEVDVEVEKSkKIAkJCWludGVsX2RwX2luaXQoZGV2LCBQQ0hfRFBfRCk7CiAKIAl9IGVsc2UgaWYgKFNVUFBPUlRTX0RJR0lUQUxfT1VUUFVUUyhkZXYpKSB7CkBAIC01MzQ3LDYgKzU3MDgsMjYgQEAKIAkJCQkJKEk5MTVfUkVBRChESVNQX0FSQl9DVEwpIHwKIAkJCQkJCURJU1BfRkJDX1dNX0RJUykpOwogCQl9CisJCS8qCisJCSAqIEJhc2VkIG9uIHRoZSBkb2N1bWVudCBmcm9tIGhhcmR3YXJlIGd1eXMgdGhlIGZvbGxvd2luZyBiaXRzCisJCSAqIHNob3VsZCBiZSBzZXQgdW5jb25kaXRpb25hbGx5IGluIG9yZGVyIHRvIGVuYWJsZSBGQkMuCisJCSAqIFRoZSBiaXQgMjIgb2YgMHg0MjAwMAorCQkgKiBUaGUgYml0IDIyIG9mIDB4NDIwMDQKKwkJICogVGhlIGJpdCA3LDgsOSBvZiAweDQyMDIwLgorCQkgKi8KKwkJaWYgKElTX0lST05MQUtFX00oZGV2KSkgeworCQkJSTkxNV9XUklURShJTEtfRElTUExBWV9DSElDS0VOMSwKKwkJCQkgICBJOTE1X1JFQUQoSUxLX0RJU1BMQVlfQ0hJQ0tFTjEpIHwKKwkJCQkgICBJTEtfRkJDUV9ESVMpOworCQkJSTkxNV9XUklURShJTEtfRElTUExBWV9DSElDS0VOMiwKKwkJCQkgICBJOTE1X1JFQUQoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIpIHwKKwkJCQkgICBJTEtfRFBBUkJfR0FURSk7CisJCQlJOTE1X1dSSVRFKElMS19EU1BDTEtfR0FURSwKKwkJCQkgICBJOTE1X1JFQUQoSUxLX0RTUENMS19HQVRFKSB8CisJCQkJICAgSUxLX0RQRkNfRElTMSB8CisJCQkJICAgSUxLX0RQRkNfRElTMiB8CisJCQkJICAgSUxLX0NMS19GQkMpOworCQl9CiAJCXJldHVybjsKIAl9IGVsc2UgaWYgKElTX0c0WChkZXYpKSB7CiAJCXVpbnQzMl90IGRzcGNsa19nYXRlOwpAQCAtNTQyNSw3ICs1ODA2LDExIEBACiAJCWRldl9wcml2LT5kaXNwbGF5LmRwbXMgPSBpOXh4X2NydGNfZHBtczsKIAogCWlmIChJOTE1X0hBU19GQkMoZGV2KSkgewotCQlpZiAoSVNfR000NShkZXYpKSB7CisJCWlmIChJU19JUk9OTEFLRV9NKGRldikpIHsKKwkJCWRldl9wcml2LT5kaXNwbGF5LmZiY19lbmFibGVkID0gaXJvbmxha2VfZmJjX2VuYWJsZWQ7CisJCQlkZXZfcHJpdi0+ZGlzcGxheS5lbmFibGVfZmJjID0gaXJvbmxha2VfZW5hYmxlX2ZiYzsKKwkJCWRldl9wcml2LT5kaXNwbGF5LmRpc2FibGVfZmJjID0gaXJvbmxha2VfZGlzYWJsZV9mYmM7CisJCX0gZWxzZSBpZiAoSVNfR000NShkZXYpKSB7CiAJCQlkZXZfcHJpdi0+ZGlzcGxheS5mYmNfZW5hYmxlZCA9IGc0eF9mYmNfZW5hYmxlZDsKIAkJCWRldl9wcml2LT5kaXNwbGF5LmVuYWJsZV9mYmMgPSBnNHhfZW5hYmxlX2ZiYzsKIAkJCWRldl9wcml2LT5kaXNwbGF5LmRpc2FibGVfZmJjID0gZzR4X2Rpc2FibGVfZmJjOwpAQCAtNTUwNiw2ICs1ODkxLDY2IEBACiAJfQogfQogCisvKgorICogU29tZSBCSU9TZXMgaW5zaXN0IG9uIGFzc3VtaW5nIHRoZSBHUFUncyBwaXBlIEEgaXMgZW5hYmxlZCBhdCBzdXNwZW5kLAorICogcmVzdW1lLCBvciBvdGhlciB0aW1lcy4gIFRoaXMgcXVpcmsgbWFrZXMgc3VyZSB0aGF0J3MgdGhlIGNhc2UgZm9yCisgKiBhZmZlY3RlZCBzeXN0ZW1zLgorICovCitzdGF0aWMgdm9pZCBxdWlya19waXBlYV9mb3JjZSAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJZGV2X3ByaXYtPnF1aXJrcyB8PSBRVUlSS19QSVBFQV9GT1JDRTsKKwlEUk1fREVCVUdfRFJJVkVSKCJhcHBseWluZyBwaXBlIGEgZm9yY2UgcXVpcmtcbiIpOworfQorCitzdHJ1Y3QgaW50ZWxfcXVpcmsgeworCWludCBkZXZpY2U7CisJaW50IHN1YnN5c3RlbV92ZW5kb3I7CisJaW50IHN1YnN5c3RlbV9kZXZpY2U7CisJdm9pZCAoKmhvb2spKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworfTsKKworc3RydWN0IGludGVsX3F1aXJrIGludGVsX3F1aXJrc1tdID0geworCS8qIEhQIENvbXBhcSAyNzMwcCBuZWVkcyBwaXBlIEEgZm9yY2UgcXVpcmsgKExQOiAjMjkxNTU1KSAqLworCXsgMHgyYTQyLCAweDEwM2MsIDB4MzBlYiwgcXVpcmtfcGlwZWFfZm9yY2UgfSwKKwkvKiBIUCBNaW5pIG5lZWRzIHBpcGUgQSBmb3JjZSBxdWlyayAoTFA6ICMzMjIxMDQpICovCisJeyAweDI3YWUsMHgxMDNjLCAweDM2MWEsIHF1aXJrX3BpcGVhX2ZvcmNlIH0sCisKKwkvKiBUaGlua3BhZCBSMzEgbmVlZHMgcGlwZSBBIGZvcmNlIHF1aXJrICovCisJeyAweDM1NzcsIDB4MTAxNCwgMHgwNTA1LCBxdWlya19waXBlYV9mb3JjZSB9LAorCS8qIFRvc2hpYmEgUHJvdGVnZSBSLTIwNSwgUy0yMDkgbmVlZHMgcGlwZSBBIGZvcmNlIHF1aXJrICovCisJeyAweDI1OTIsIDB4MTE3OSwgMHgwMDAxLCBxdWlya19waXBlYV9mb3JjZSB9LAorCisJLyogVGhpbmtQYWQgWDMwIG5lZWRzIHBpcGUgQSBmb3JjZSBxdWlyayAoTFA6ICMzMDQ2MTQpICovCisJeyAweDM1NzcsICAweDEwMTQsIDB4MDUxMywgcXVpcmtfcGlwZWFfZm9yY2UgfSwKKwkvKiBUaGlua1BhZCBYNDAgbmVlZHMgcGlwZSBBIGZvcmNlIHF1aXJrICovCisKKwkvKiBUaGlua1BhZCBUNjAgbmVlZHMgcGlwZSBBIGZvcmNlIHF1aXJrIChidWcgIzE2NDk0KSAqLworCXsgMHgyNzgyLCAweDE3YWEsIDB4MjAxYSwgcXVpcmtfcGlwZWFfZm9yY2UgfSwKKworCS8qIDg1NSAmIGJlZm9yZSBuZWVkIHRvIGxlYXZlIHBpcGUgQSAmIGRwbGwgQSB1cCAqLworCXsgMHgzNTgyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBxdWlya19waXBlYV9mb3JjZSB9LAorCXsgMHgyNTYyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBxdWlya19waXBlYV9mb3JjZSB9LAorfTsKKworc3RhdGljIHZvaWQgaW50ZWxfaW5pdF9xdWlya3Moc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZCA9IGRldi0+cGRldjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGludGVsX3F1aXJrcyk7IGkrKykgeworCQlzdHJ1Y3QgaW50ZWxfcXVpcmsgKnEgPSAmaW50ZWxfcXVpcmtzW2ldOworCisJCWlmIChkLT5kZXZpY2UgPT0gcS0+ZGV2aWNlICYmCisJCSAgICAoZC0+c3Vic3lzdGVtX3ZlbmRvciA9PSBxLT5zdWJzeXN0ZW1fdmVuZG9yIHx8CisJCSAgICAgcS0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfQU5ZX0lEKSAmJgorCQkgICAgKGQtPnN1YnN5c3RlbV9kZXZpY2UgPT0gcS0+c3Vic3lzdGVtX2RldmljZSB8fAorCQkgICAgIHEtPnN1YnN5c3RlbV9kZXZpY2UgPT0gUENJX0FOWV9JRCkpCisJCQlxLT5ob29rKGRldik7CisJfQorfQorCiB2b2lkIGludGVsX21vZGVzZXRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC01NTE4LDYgKzU5NjMsOCBAQAogCiAJZGV2LT5tb2RlX2NvbmZpZy5mdW5jcyA9ICh2b2lkICopJmludGVsX21vZGVfZnVuY3M7CiAKKwlpbnRlbF9pbml0X3F1aXJrcyhkZXYpOworCiAJaW50ZWxfaW5pdF9kaXNwbGF5KGRldik7CiAKIAlpZiAoSVNfSTk2NUcoZGV2KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKaW5kZXggMWFhYzU5ZS4uNDBiZTFmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCkBAIC00Myw2ICs0Myw3IEBACiAjZGVmaW5lIERQX0xJTktfQ09ORklHVVJBVElPTl9TSVpFCTkKIAogI2RlZmluZSBJU19lRFAoaSkgKChpKS0+dHlwZSA9PSBJTlRFTF9PVVRQVVRfRURQKQorI2RlZmluZSBJU19QQ0hfZURQKGRwX3ByaXYpICgoZHBfcHJpdiktPmlzX3BjaF9lZHApCiAKIHN0cnVjdCBpbnRlbF9kcF9wcml2IHsKIAl1aW50MzJfdCBvdXRwdXRfcmVnOwpAQCAtNTYsNiArNTcsNyBAQAogCXN0cnVjdCBpbnRlbF9lbmNvZGVyICppbnRlbF9lbmNvZGVyOwogCXN0cnVjdCBpMmNfYWRhcHRlciBhZGFwdGVyOwogCXN0cnVjdCBpMmNfYWxnb19kcF9hdXhfZGF0YSBhbGdvOworCWJvb2wgaXNfcGNoX2VkcDsKIH07CiAKIHN0YXRpYyB2b2lkCkBAIC0xMjgsOCArMTMwLDkgQEAKIAkJICAgICAgIHN0cnVjdCBpbnRlbF9lbmNvZGVyICppbnRlbF9lbmNvZGVyLCBpbnQgcGl4ZWxfY2xvY2spCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaW50ZWxfZHBfcHJpdiAqZHBfcHJpdiA9IGludGVsX2VuY29kZXItPmRldl9wcml2OwogCi0JaWYgKElTX2VEUChpbnRlbF9lbmNvZGVyKSkKKwlpZiAoSVNfZURQKGludGVsX2VuY29kZXIpIHx8IElTX1BDSF9lRFAoZHBfcHJpdikpCiAJCXJldHVybiAocGl4ZWxfY2xvY2sgKiBkZXZfcHJpdi0+ZWRwX2JwcCkgLyA4OwogCWVsc2UKIAkJcmV0dXJuIHBpeGVsX2Nsb2NrICogMzsKQEAgLTE0Nyw5ICsxNTAsMjEgQEAKIHsKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSBpbnRlbF9hdHRhY2hlZF9lbmNvZGVyKGNvbm5lY3Rvcik7CiAJc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2VuY29kZXIgPSBlbmNfdG9faW50ZWxfZW5jb2RlcihlbmNvZGVyKTsKKwlzdHJ1Y3QgaW50ZWxfZHBfcHJpdiAqZHBfcHJpdiA9IGludGVsX2VuY29kZXItPmRldl9wcml2OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWludCBtYXhfbGlua19jbG9jayA9IGludGVsX2RwX2xpbmtfY2xvY2soaW50ZWxfZHBfbWF4X2xpbmtfYncoaW50ZWxfZW5jb2RlcikpOwogCWludCBtYXhfbGFuZXMgPSBpbnRlbF9kcF9tYXhfbGFuZV9jb3VudChpbnRlbF9lbmNvZGVyKTsKIAorCWlmICgoSVNfZURQKGludGVsX2VuY29kZXIpIHx8IElTX1BDSF9lRFAoZHBfcHJpdikpICYmCisJICAgIGRldl9wcml2LT5wYW5lbF9maXhlZF9tb2RlKSB7CisJCWlmIChtb2RlLT5oZGlzcGxheSA+IGRldl9wcml2LT5wYW5lbF9maXhlZF9tb2RlLT5oZGlzcGxheSkKKwkJCXJldHVybiBNT0RFX1BBTkVMOworCisJCWlmIChtb2RlLT52ZGlzcGxheSA+IGRldl9wcml2LT5wYW5lbF9maXhlZF9tb2RlLT52ZGlzcGxheSkKKwkJCXJldHVybiBNT0RFX1BBTkVMOworCX0KKwogCS8qIG9ubHkgcmVmdXNlIHRoZSBtb2RlIG9uIG5vbiBlRFAgc2luY2Ugd2UgaGF2ZSBzZWVuIHNvbWUgd2llcmQgZURQIHBhbmVscwogCSAgIHdoaWNoIGFyZSBvdXRzaWRlIHNwZWMgdG9sZXJhbmNlcyBidXQgc29tZWhvdyB3b3JrIGJ5IG1hZ2ljICovCiAJaWYgKCFJU19lRFAoaW50ZWxfZW5jb2RlcikgJiYKQEAgLTUwOCwxMSArNTIzLDM3IEBACiB7CiAJc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2VuY29kZXIgPSBlbmNfdG9faW50ZWxfZW5jb2RlcihlbmNvZGVyKTsKIAlzdHJ1Y3QgaW50ZWxfZHBfcHJpdiAgICpkcF9wcml2ID0gaW50ZWxfZW5jb2Rlci0+ZGV2X3ByaXY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWludCBsYW5lX2NvdW50LCBjbG9jazsKIAlpbnQgbWF4X2xhbmVfY291bnQgPSBpbnRlbF9kcF9tYXhfbGFuZV9jb3VudChpbnRlbF9lbmNvZGVyKTsKIAlpbnQgbWF4X2Nsb2NrID0gaW50ZWxfZHBfbWF4X2xpbmtfYncoaW50ZWxfZW5jb2RlcikgPT0gRFBfTElOS19CV18yXzcgPyAxIDogMDsKIAlzdGF0aWMgaW50IGJ3c1syXSA9IHsgRFBfTElOS19CV18xXzYyLCBEUF9MSU5LX0JXXzJfNyB9OwogCisJaWYgKChJU19lRFAoaW50ZWxfZW5jb2RlcikgfHwgSVNfUENIX2VEUChkcF9wcml2KSkgJiYKKwkgICAgZGV2X3ByaXYtPnBhbmVsX2ZpeGVkX21vZGUpIHsKKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmZpeGVkX21vZGUgPSBkZXZfcHJpdi0+cGFuZWxfZml4ZWRfbW9kZTsKKworCQlhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSA9IGZpeGVkX21vZGUtPmhkaXNwbGF5OworCQlhZGp1c3RlZF9tb2RlLT5oc3luY19zdGFydCA9IGZpeGVkX21vZGUtPmhzeW5jX3N0YXJ0OworCQlhZGp1c3RlZF9tb2RlLT5oc3luY19lbmQgPSBmaXhlZF9tb2RlLT5oc3luY19lbmQ7CisJCWFkanVzdGVkX21vZGUtPmh0b3RhbCA9IGZpeGVkX21vZGUtPmh0b3RhbDsKKworCQlhZGp1c3RlZF9tb2RlLT52ZGlzcGxheSA9IGZpeGVkX21vZGUtPnZkaXNwbGF5OworCQlhZGp1c3RlZF9tb2RlLT52c3luY19zdGFydCA9IGZpeGVkX21vZGUtPnZzeW5jX3N0YXJ0OworCQlhZGp1c3RlZF9tb2RlLT52c3luY19lbmQgPSBmaXhlZF9tb2RlLT52c3luY19lbmQ7CisJCWFkanVzdGVkX21vZGUtPnZ0b3RhbCA9IGZpeGVkX21vZGUtPnZ0b3RhbDsKKworCQlhZGp1c3RlZF9tb2RlLT5jbG9jayA9IGZpeGVkX21vZGUtPmNsb2NrOworCQlkcm1fbW9kZV9zZXRfY3J0Y2luZm8oYWRqdXN0ZWRfbW9kZSwgQ1JUQ19JTlRFUkxBQ0VfSEFMVkVfVik7CisKKwkJLyoKKwkJICogdGhlIG1vZGUtPmNsb2NrIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBEYXRhJkxpbmsgTS9OCisJCSAqIG9mIHRoZSBwaXBlLiBGb3IgdGhlIGVEUCB0aGUgZml4ZWQgY2xvY2sgc2hvdWxkIGJlIHVzZWQuCisJCSAqLworCQltb2RlLT5jbG9jayA9IGRldl9wcml2LT5wYW5lbF9maXhlZF9tb2RlLT5jbG9jazsKKwl9CisKIAlmb3IgKGxhbmVfY291bnQgPSAxOyBsYW5lX2NvdW50IDw9IG1heF9sYW5lX2NvdW50OyBsYW5lX2NvdW50IDw8PSAxKSB7CiAJCWZvciAoY2xvY2sgPSAwOyBjbG9jayA8PSBtYXhfY2xvY2s7IGNsb2NrKyspIHsKIAkJCWludCBsaW5rX2F2YWlsID0gaW50ZWxfZHBfbWF4X2RhdGFfcmF0ZShpbnRlbF9kcF9saW5rX2Nsb2NrKGJ3c1tjbG9ja10pLCBsYW5lX2NvdW50KTsKQEAgLTUzMSw3ICs1NzIsNyBAQAogCQl9CiAJfQogCi0JaWYgKElTX2VEUChpbnRlbF9lbmNvZGVyKSkgeworCWlmIChJU19lRFAoaW50ZWxfZW5jb2RlcikgfHwgSVNfUENIX2VEUChkcF9wcml2KSkgewogCQkvKiBva2F5IHdlIGZhaWxlZCBqdXN0IHBpY2sgdGhlIGhpZ2hlc3QgKi8KIAkJZHBfcHJpdi0+bGFuZV9jb3VudCA9IG1heF9sYW5lX2NvdW50OwogCQlkcF9wcml2LT5saW5rX2J3ID0gYndzW21heF9jbG9ja107CkBAIC01NjMsMTQgKzYwNCwxNCBAQAogfQogCiBzdGF0aWMgdm9pZAotaW50ZWxfZHBfY29tcHV0ZV9tX24oaW50IGJ5dGVzX3Blcl9waXhlbCwKK2ludGVsX2RwX2NvbXB1dGVfbV9uKGludCBicHAsCiAJCSAgICAgaW50IG5sYW5lcywKIAkJICAgICBpbnQgcGl4ZWxfY2xvY2ssCiAJCSAgICAgaW50IGxpbmtfY2xvY2ssCiAJCSAgICAgc3RydWN0IGludGVsX2RwX21fbiAqbV9uKQogewogCW1fbi0+dHUgPSA2NDsKLQltX24tPmdtY2hfbSA9IHBpeGVsX2Nsb2NrICogYnl0ZXNfcGVyX3BpeGVsOworCW1fbi0+Z21jaF9tID0gKHBpeGVsX2Nsb2NrICogYnBwKSA+PiAzOwogCW1fbi0+Z21jaF9uID0gbGlua19jbG9jayAqIG5sYW5lczsKIAlpbnRlbF9yZWR1Y2VfcmF0aW8oJm1fbi0+Z21jaF9tLCAmbV9uLT5nbWNoX24pOwogCW1fbi0+bGlua19tID0gcGl4ZWxfY2xvY2s7CkBAIC01NzgsNiArNjE5LDI4IEBACiAJaW50ZWxfcmVkdWNlX3JhdGlvKCZtX24tPmxpbmtfbSwgJm1fbi0+bGlua19uKTsKIH0KIAorYm9vbCBpbnRlbF9wY2hfaGFzX2VkcChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICptb2RlX2NvbmZpZyA9ICZkZXYtPm1vZGVfY29uZmlnOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJm1vZGVfY29uZmlnLT5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKKwkJc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2VuY29kZXI7CisJCXN0cnVjdCBpbnRlbF9kcF9wcml2ICpkcF9wcml2OworCisJCWlmICghZW5jb2RlciB8fCBlbmNvZGVyLT5jcnRjICE9IGNydGMpCisJCQljb250aW51ZTsKKworCQlpbnRlbF9lbmNvZGVyID0gZW5jX3RvX2ludGVsX2VuY29kZXIoZW5jb2Rlcik7CisJCWRwX3ByaXYgPSBpbnRlbF9lbmNvZGVyLT5kZXZfcHJpdjsKKworCQlpZiAoaW50ZWxfZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9PVVRQVVRfRElTUExBWVBPUlQpCisJCQlyZXR1cm4gZHBfcHJpdi0+aXNfcGNoX2VkcDsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCiB2b2lkCiBpbnRlbF9kcF9zZXRfbV9uKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCiAJCSBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKQEAgLTU4Nyw3ICs2NTAsNyBAQAogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKLQlpbnQgbGFuZV9jb3VudCA9IDQ7CisJaW50IGxhbmVfY291bnQgPSA0LCBicHAgPSAyNDsKIAlzdHJ1Y3QgaW50ZWxfZHBfbV9uIG1fbjsKIAogCS8qCkBAIC02MDUsNiArNjY4LDggQEAKIAogCQlpZiAoaW50ZWxfZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9PVVRQVVRfRElTUExBWVBPUlQpIHsKIAkJCWxhbmVfY291bnQgPSBkcF9wcml2LT5sYW5lX2NvdW50OworCQkJaWYgKElTX1BDSF9lRFAoZHBfcHJpdikpCisJCQkJYnBwID0gZGV2X3ByaXYtPmVkcF9icHA7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTYxNCw3ICs2NzksNyBAQAogCSAqIHRoZSBudW1iZXIgb2YgYnl0ZXNfcGVyX3BpeGVsIHBvc3QtTFVULCB3aGljaCB3ZSBhbHdheXMKIAkgKiBzZXQgdXAgZm9yIDgtYml0cyBvZiBSL0cvQiwgb3IgMyBieXRlcyB0b3RhbC4KIAkgKi8KLQlpbnRlbF9kcF9jb21wdXRlX21fbigzLCBsYW5lX2NvdW50LAorCWludGVsX2RwX2NvbXB1dGVfbV9uKGJwcCwgbGFuZV9jb3VudCwKIAkJCSAgICAgbW9kZS0+Y2xvY2ssIGFkanVzdGVkX21vZGUtPmNsb2NrLCAmbV9uKTsKIAogCWlmIChIQVNfUENIX1NQTElUKGRldikpIHsKQEAgLTcxNyw2ICs3ODIsNTEgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGlyb25sYWtlX2VkcF9wYW5lbF9vbiAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUwMDApOworCXUzMiBwcCwgcHBfc3RhdHVzOworCisJcHBfc3RhdHVzID0gSTkxNV9SRUFEKFBDSF9QUF9TVEFUVVMpOworCWlmIChwcF9zdGF0dXMgJiBQUF9PTikKKwkJcmV0dXJuOworCisJcHAgPSBJOTE1X1JFQUQoUENIX1BQX0NPTlRST0wpOworCXBwIHw9IFBBTkVMX1VOTE9DS19SRUdTIHwgUE9XRVJfVEFSR0VUX09OOworCUk5MTVfV1JJVEUoUENIX1BQX0NPTlRST0wsIHBwKTsKKwlkbyB7CisJCXBwX3N0YXR1cyA9IEk5MTVfUkVBRChQQ0hfUFBfU1RBVFVTKTsKKwl9IHdoaWxlICgoKHBwX3N0YXR1cyAmIFBQX09OKSA9PSAwKSAmJiAhdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSk7CisKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKKwkJRFJNX0RFQlVHX0tNUygicGFuZWwgb24gd2FpdCB0aW1lZCBvdXQ6IDB4JTA4eFxuIiwgcHBfc3RhdHVzKTsKKworCXBwICY9IH4oUEFORUxfVU5MT0NLX1JFR1MgfCBFRFBfRk9SQ0VfVkREKTsKKwlJOTE1X1dSSVRFKFBDSF9QUF9DT05UUk9MLCBwcCk7Cit9CisKK3N0YXRpYyB2b2lkIGlyb25sYWtlX2VkcF9wYW5lbF9vZmYgKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1MDAwKTsKKwl1MzIgcHAsIHBwX3N0YXR1czsKKworCXBwID0gSTkxNV9SRUFEKFBDSF9QUF9DT05UUk9MKTsKKwlwcCAmPSB+UE9XRVJfVEFSR0VUX09OOworCUk5MTVfV1JJVEUoUENIX1BQX0NPTlRST0wsIHBwKTsKKwlkbyB7CisJCXBwX3N0YXR1cyA9IEk5MTVfUkVBRChQQ0hfUFBfU1RBVFVTKTsKKwl9IHdoaWxlICgocHBfc3RhdHVzICYgUFBfT04pICYmICF0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKTsKKworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQorCQlEUk1fREVCVUdfS01TKCJwYW5lbCBvZmYgd2FpdCB0aW1lZCBvdXRcbiIpOworCisJLyogTWFrZSBzdXJlIFZERCBpcyBlbmFibGVkIHNvIERQIEFVWCB3aWxsIHdvcmsgKi8KKwlwcCB8PSBFRFBfRk9SQ0VfVkREOworCUk5MTVfV1JJVEUoUENIX1BQX0NPTlRST0wsIHBwKTsKK30KKwogc3RhdGljIHZvaWQgaXJvbmxha2VfZWRwX2JhY2tsaWdodF9vbiAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtNzUxLDE0ICs4NjEsMTggQEAKIAlpZiAobW9kZSAhPSBEUk1fTU9ERV9EUE1TX09OKSB7CiAJCWlmIChkcF9yZWcgJiBEUF9QT1JUX0VOKSB7CiAJCQlpbnRlbF9kcF9saW5rX2Rvd24oaW50ZWxfZW5jb2RlciwgZHBfcHJpdi0+RFApOwotCQkJaWYgKElTX2VEUChpbnRlbF9lbmNvZGVyKSkKKwkJCWlmIChJU19lRFAoaW50ZWxfZW5jb2RlcikgfHwgSVNfUENIX2VEUChkcF9wcml2KSkgewogCQkJCWlyb25sYWtlX2VkcF9iYWNrbGlnaHRfb2ZmKGRldik7CisJCQkJaXJvbmxha2VfZWRwX3BhbmVsX29mZihkZXYpOworCQkJfQogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKCEoZHBfcmVnICYgRFBfUE9SVF9FTikpIHsKIAkJCWludGVsX2RwX2xpbmtfdHJhaW4oaW50ZWxfZW5jb2RlciwgZHBfcHJpdi0+RFAsIGRwX3ByaXYtPmxpbmtfY29uZmlndXJhdGlvbik7Ci0JCQlpZiAoSVNfZURQKGludGVsX2VuY29kZXIpKQorCQkJaWYgKElTX2VEUChpbnRlbF9lbmNvZGVyKSB8fCBJU19QQ0hfZURQKGRwX3ByaXYpKSB7CisJCQkJaXJvbmxha2VfZWRwX3BhbmVsX29uKGRldik7CiAJCQkJaXJvbmxha2VfZWRwX2JhY2tsaWdodF9vbihkZXYpOworCQkJfQogCQl9CiAJfQogCWRwX3ByaXYtPmRwbXNfbW9kZSA9IG1vZGU7CkBAIC0xMjkxLDE3ICsxNDA1LDMyIEBACiAJc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2VuY29kZXIgPSBlbmNfdG9faW50ZWxfZW5jb2RlcihlbmNvZGVyKTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfZW5jb2Rlci0+ZW5jLmRldjsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9kcF9wcml2ICpkcF9wcml2ID0gaW50ZWxfZW5jb2Rlci0+ZGV2X3ByaXY7CiAJaW50IHJldDsKIAogCS8qIFdlIHNob3VsZCBwYXJzZSB0aGUgRURJRCBkYXRhIGFuZCBmaW5kIG91dCBpZiBpdCBoYXMgYW4gYXVkaW8gc2luawogCSAqLwogCiAJcmV0ID0gaW50ZWxfZGRjX2dldF9tb2Rlcyhjb25uZWN0b3IsIGludGVsX2VuY29kZXItPmRkY19idXMpOwotCWlmIChyZXQpCisJaWYgKHJldCkgeworCQlpZiAoKElTX2VEUChpbnRlbF9lbmNvZGVyKSB8fCBJU19QQ0hfZURQKGRwX3ByaXYpKSAmJgorCQkgICAgIWRldl9wcml2LT5wYW5lbF9maXhlZF9tb2RlKSB7CisJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbmV3bW9kZTsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkobmV3bW9kZSwgJmNvbm5lY3Rvci0+cHJvYmVkX21vZGVzLAorCQkJCQkgICAgaGVhZCkgeworCQkJCWlmIChuZXdtb2RlLT50eXBlICYgRFJNX01PREVfVFlQRV9QUkVGRVJSRUQpIHsKKwkJCQkJZGV2X3ByaXYtPnBhbmVsX2ZpeGVkX21vZGUgPQorCQkJCQkJZHJtX21vZGVfZHVwbGljYXRlKGRldiwgbmV3bW9kZSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCiAJCXJldHVybiByZXQ7CisJfQogCiAJLyogaWYgZURQIGhhcyBubyBFRElELCB0cnkgdG8gdXNlIGZpeGVkIHBhbmVsIG1vZGUgZnJvbSBWQlQgKi8KLQlpZiAoSVNfZURQKGludGVsX2VuY29kZXIpKSB7CisJaWYgKElTX2VEUChpbnRlbF9lbmNvZGVyKSB8fCBJU19QQ0hfZURQKGRwX3ByaXYpKSB7CiAJCWlmIChkZXZfcHJpdi0+cGFuZWxfZml4ZWRfbW9kZSAhPSBOVUxMKSB7CiAJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKIAkJCW1vZGUgPSBkcm1fbW9kZV9kdXBsaWNhdGUoZGV2LCBkZXZfcHJpdi0+cGFuZWxfZml4ZWRfbW9kZSk7CkBAIC0xMzg2LDYgKzE1MTUsMjYgQEAKIAlyZXR1cm4gLTE7CiB9CiAKKy8qIGNoZWNrIHRoZSBWQlQgdG8gc2VlIHdoZXRoZXIgdGhlIGVEUCBpcyBvbiBEUC1EIHBvcnQgKi8KK2Jvb2wgaW50ZWxfZHBkX2lzX2VkcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGNoaWxkX2RldmljZV9jb25maWcgKnBfY2hpbGQ7CisJaW50IGk7CisKKwlpZiAoIWRldl9wcml2LT5jaGlsZF9kZXZfbnVtKQorCQlyZXR1cm4gZmFsc2U7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPmNoaWxkX2Rldl9udW07IGkrKykgeworCQlwX2NoaWxkID0gZGV2X3ByaXYtPmNoaWxkX2RldiArIGk7CisKKwkJaWYgKHBfY2hpbGQtPmR2b19wb3J0ID09IFBPUlRfSURQRCAmJgorCQkgICAgcF9jaGlsZC0+ZGV2aWNlX3R5cGUgPT0gREVWSUNFX1RZUEVfZURQKQorCQkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KKwogdm9pZAogaW50ZWxfZHBfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgb3V0cHV0X3JlZykKIHsKQEAgLTEzOTUsNiArMTU0NCw3IEBACiAJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9yOwogCXN0cnVjdCBpbnRlbF9kcF9wcml2ICpkcF9wcml2OwogCWNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOworCWludCB0eXBlOwogCiAJaW50ZWxfZW5jb2RlciA9IGtjYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbnRlbF9lbmNvZGVyKSArCiAJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpbnRlbF9kcF9wcml2KSwgMSwgR0ZQX0tFUk5FTCk7CkBAIC0xNDA5LDE4ICsxNTU5LDI0IEBACiAKIAlkcF9wcml2ID0gKHN0cnVjdCBpbnRlbF9kcF9wcml2ICopKGludGVsX2VuY29kZXIgKyAxKTsKIAorCWlmIChIQVNfUENIX1NQTElUKGRldikgJiYgKG91dHB1dF9yZWcgPT0gUENIX0RQX0QpKQorCQlpZiAoaW50ZWxfZHBkX2lzX2VkcChkZXYpKQorCQkJZHBfcHJpdi0+aXNfcGNoX2VkcCA9IHRydWU7CisKKwlpZiAob3V0cHV0X3JlZyA9PSBEUF9BIHx8IElTX1BDSF9lRFAoZHBfcHJpdikpIHsKKwkJdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9lRFA7CisJCWludGVsX2VuY29kZXItPnR5cGUgPSBJTlRFTF9PVVRQVVRfRURQOworCX0gZWxzZSB7CisJCXR5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQ7CisJCWludGVsX2VuY29kZXItPnR5cGUgPSBJTlRFTF9PVVRQVVRfRElTUExBWVBPUlQ7CisJfQorCiAJY29ubmVjdG9yID0gJmludGVsX2Nvbm5lY3Rvci0+YmFzZTsKLQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25uZWN0b3IsICZpbnRlbF9kcF9jb25uZWN0b3JfZnVuY3MsCi0JCQkgICBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpOworCWRybV9jb25uZWN0b3JfaW5pdChkZXYsIGNvbm5lY3RvciwgJmludGVsX2RwX2Nvbm5lY3Rvcl9mdW5jcywgdHlwZSk7CiAJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwgJmludGVsX2RwX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOwogCiAJY29ubmVjdG9yLT5wb2xsZWQgPSBEUk1fQ09OTkVDVE9SX1BPTExfSFBEOwogCi0JaWYgKG91dHB1dF9yZWcgPT0gRFBfQSkKLQkJaW50ZWxfZW5jb2Rlci0+dHlwZSA9IElOVEVMX09VVFBVVF9FRFA7Ci0JZWxzZQotCQlpbnRlbF9lbmNvZGVyLT50eXBlID0gSU5URUxfT1VUUFVUX0RJU1BMQVlQT1JUOwotCiAJaWYgKG91dHB1dF9yZWcgPT0gRFBfQiB8fCBvdXRwdXRfcmVnID09IFBDSF9EUF9CKQogCQlpbnRlbF9lbmNvZGVyLT5jbG9uZV9tYXNrID0gKDEgPDwgSU5URUxfRFBfQl9DTE9ORV9CSVQpOwogCWVsc2UgaWYgKG91dHB1dF9yZWcgPT0gRFBfQyB8fCBvdXRwdXRfcmVnID09IFBDSF9EUF9DKQpAQCAtMTQ3OSw3ICsxNjM1LDcgQEAKIAlpbnRlbF9lbmNvZGVyLT5kZGNfYnVzID0gJmRwX3ByaXYtPmFkYXB0ZXI7CiAJaW50ZWxfZW5jb2Rlci0+aG90X3BsdWcgPSBpbnRlbF9kcF9ob3RfcGx1ZzsKIAotCWlmIChvdXRwdXRfcmVnID09IERQX0EpIHsKKwlpZiAob3V0cHV0X3JlZyA9PSBEUF9BIHx8IElTX1BDSF9lRFAoZHBfcHJpdikpIHsKIAkJLyogaW5pdGlhbGl6ZSBwYW5lbCBtb2RlIGZyb20gVkJUIGlmIGF2YWlsYWJsZSBmb3IgZURQICovCiAJCWlmIChkZXZfcHJpdi0+bGZwX2x2ZHNfdmJ0X21vZGUpIHsKIAkJCWRldl9wcml2LT5wYW5lbF9maXhlZF9tb2RlID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKaW5kZXggNzIyMDZmMy4uYjIxOTAxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKQEAgLTE0Myw4ICsxNDMsNiBAQAogCXN0cnVjdCBkcm1fY3J0YyBiYXNlOwogCWVudW0gcGlwZSBwaXBlOwogCWVudW0gcGxhbmUgcGxhbmU7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpjdXJzb3JfYm87Ci0JdWludDMyX3QgY3Vyc29yX2FkZHI7CiAJdTggbHV0X3JbMjU2XSwgbHV0X2dbMjU2XSwgbHV0X2JbMjU2XTsKIAlpbnQgZHBtc19tb2RlOwogCWJvb2wgYnVzeTsgLyogaXMgc2Nhbm91dCBidWZmZXIgYmVpbmcgdXBkYXRlZCBmcmVxdWVudGx5PyAqLwpAQCAtMTUzLDYgKzE1MSwxMiBAQAogCXN0cnVjdCBpbnRlbF9vdmVybGF5ICpvdmVybGF5OwogCXN0cnVjdCBpbnRlbF91bnBpbl93b3JrICp1bnBpbl93b3JrOwogCWludCBmZGlfbGFuZXM7CisKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmN1cnNvcl9ibzsKKwl1aW50MzJfdCBjdXJzb3JfYWRkcjsKKwlpbnQxNl90IGN1cnNvcl94LCBjdXJzb3JfeTsKKwlpbnQxNl90IGN1cnNvcl93aWR0aCwgY3Vyc29yX2hlaWdodDsKKwlib29sIGN1cnNvcl92aXNibGU7CiB9OwogCiAjZGVmaW5lIHRvX2ludGVsX2NydGMoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBpbnRlbF9jcnRjLCBiYXNlKQpAQCAtMTc5LDYgKzE4Myw4IEBACiB2b2lkCiBpbnRlbF9kcF9zZXRfbV9uKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCiAJCSBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSk7CitleHRlcm4gYm9vbCBpbnRlbF9wY2hfaGFzX2VkcChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOworZXh0ZXJuIGJvb2wgaW50ZWxfZHBkX2lzX2VkcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGludGVsX2VkcF9saW5rX2NvbmZpZyAoc3RydWN0IGludGVsX2VuY29kZXIgKiwgaW50ICosIGludCAqKTsKIAogCkBAIC0yMTUsNiArMjIxLDkgQEAKIGV4dGVybiB2b2lkIGlyb25sYWtlX2VuYWJsZV9kcnBzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgaXJvbmxha2VfZGlzYWJsZV9kcnBzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCitleHRlcm4gaW50IGludGVsX3Bpbl9hbmRfZmVuY2VfZmJfb2JqKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworCiBleHRlcm4gaW50IGludGVsX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgIHN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaWZiLAogCQkJCSAgc3RydWN0IGRybV9tb2RlX2ZiX2NtZCAqbW9kZV9jbWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmIuYwppbmRleCBjM2M1MDUyLi41NGFjZDhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMKQEAgLTYxLDYgKzYxLDggQEAKIAkuZmJfcGFuX2Rpc3BsYXkgPSBkcm1fZmJfaGVscGVyX3Bhbl9kaXNwbGF5LAogCS5mYl9ibGFuayA9IGRybV9mYl9oZWxwZXJfYmxhbmssCiAJLmZiX3NldGNtYXAgPSBkcm1fZmJfaGVscGVyX3NldGNtYXAsCisJLmZiX2RlYnVnX2VudGVyID0gZHJtX2ZiX2hlbHBlcl9kZWJ1Z19lbnRlciwKKwkuZmJfZGVidWdfbGVhdmUgPSBkcm1fZmJfaGVscGVyX2RlYnVnX2xlYXZlLAogfTsKIAogc3RhdGljIGludCBpbnRlbGZiX2NyZWF0ZShzdHJ1Y3QgaW50ZWxfZmJkZXYgKmlmYmRldiwKQEAgLTk4LDcgKzEwMCw3IEBACiAKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKLQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKGZibywgNjQqMTAyNCk7CisJcmV0ID0gaW50ZWxfcGluX2FuZF9mZW5jZV9mYl9vYmooZGV2LCBmYm8pOwogCWlmIChyZXQpIHsKIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcGluIGZiOiAlZFxuIiwgcmV0KTsKIAkJZ290byBvdXRfdW5yZWY7CkBAIC0yMzYsNyArMjM4LDcgQEAKIAogCWRybV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKCZpZmItPmJhc2UpOwogCWlmIChpZmItPm9iaikKLQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoaWZiLT5vYmopOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShpZmItPm9iaik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYwppbmRleCA4M2JkNzY0Li4xOTc4ODdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCkBAIC01NCwxMCArNTQsMTEgQEAKIAlzdHJ1Y3QgaW50ZWxfaGRtaV9wcml2ICpoZG1pX3ByaXYgPSBpbnRlbF9lbmNvZGVyLT5kZXZfcHJpdjsKIAl1MzIgc2R2b3g7CiAKLQlzZHZveCA9IFNEVk9fRU5DT0RJTkdfSERNSSB8Ci0JCVNEVk9fQk9SREVSX0VOQUJMRSB8Ci0JCVNEVk9fVlNZTkNfQUNUSVZFX0hJR0ggfAotCQlTRFZPX0hTWU5DX0FDVElWRV9ISUdIOworCXNkdm94ID0gU0RWT19FTkNPRElOR19IRE1JIHwgU0RWT19CT1JERVJfRU5BQkxFOworCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUFZTWU5DKQorCQlzZHZveCB8PSBTRFZPX1ZTWU5DX0FDVElWRV9ISUdIOworCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUEhTWU5DKQorCQlzZHZveCB8PSBTRFZPX0hTWU5DX0FDVElWRV9ISUdIOwogCiAJaWYgKGhkbWlfcHJpdi0+aGFzX2hkbWlfc2luaykgewogCQlzZHZveCB8PSBTRFZPX0FVRElPX0VOQUJMRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYwppbmRleCAzMWRmNTVmLi4wYTJlNjAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCkBAIC0xNTYsMzEgKzE1Niw3MyBAQAogCXJldHVybiBNT0RFX09LOwogfQogCitzdGF0aWMgdm9pZAorY2VudHJlX2hvcml6b250YWxseShzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJICAgIGludCB3aWR0aCkKK3sKKwl1MzIgYm9yZGVyLCBzeW5jX3BvcywgYmxhbmtfd2lkdGgsIHN5bmNfd2lkdGg7CisKKwkvKiBrZWVwIHRoZSBoc3luYyBhbmQgaGJsYW5rIHdpZHRocyBjb25zdGFudCAqLworCXN5bmNfd2lkdGggPSBtb2RlLT5jcnRjX2hzeW5jX2VuZCAtIG1vZGUtPmNydGNfaHN5bmNfc3RhcnQ7CisJYmxhbmtfd2lkdGggPSBtb2RlLT5jcnRjX2hibGFua19lbmQgLSBtb2RlLT5jcnRjX2hibGFua19zdGFydDsKKwlzeW5jX3BvcyA9IChibGFua193aWR0aCAtIHN5bmNfd2lkdGggKyAxKSAvIDI7CisKKwlib3JkZXIgPSAobW9kZS0+aGRpc3BsYXkgLSB3aWR0aCArIDEpIC8gMjsKKwlib3JkZXIgKz0gYm9yZGVyICYgMTsgLyogbWFrZSB0aGUgYm9yZGVyIGV2ZW4gKi8KKworCW1vZGUtPmNydGNfaGRpc3BsYXkgPSB3aWR0aDsKKwltb2RlLT5jcnRjX2hibGFua19zdGFydCA9IHdpZHRoICsgYm9yZGVyOworCW1vZGUtPmNydGNfaGJsYW5rX2VuZCA9IG1vZGUtPmNydGNfaGJsYW5rX3N0YXJ0ICsgYmxhbmtfd2lkdGg7CisKKwltb2RlLT5jcnRjX2hzeW5jX3N0YXJ0ID0gbW9kZS0+Y3J0Y19oYmxhbmtfc3RhcnQgKyBzeW5jX3BvczsKKwltb2RlLT5jcnRjX2hzeW5jX2VuZCA9IG1vZGUtPmNydGNfaHN5bmNfc3RhcnQgKyBzeW5jX3dpZHRoOworfQorCitzdGF0aWMgdm9pZAorY2VudHJlX3ZlcnRpY2FsbHkoc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCSAgaW50IGhlaWdodCkKK3sKKwl1MzIgYm9yZGVyLCBzeW5jX3BvcywgYmxhbmtfd2lkdGgsIHN5bmNfd2lkdGg7CisKKwkvKiBrZWVwIHRoZSB2c3luYyBhbmQgdmJsYW5rIHdpZHRocyBjb25zdGFudCAqLworCXN5bmNfd2lkdGggPSBtb2RlLT5jcnRjX3ZzeW5jX2VuZCAtIG1vZGUtPmNydGNfdnN5bmNfc3RhcnQ7CisJYmxhbmtfd2lkdGggPSBtb2RlLT5jcnRjX3ZibGFua19lbmQgLSBtb2RlLT5jcnRjX3ZibGFua19zdGFydDsKKwlzeW5jX3BvcyA9IChibGFua193aWR0aCAtIHN5bmNfd2lkdGggKyAxKSAvIDI7CisKKwlib3JkZXIgPSAobW9kZS0+dmRpc3BsYXkgLSBoZWlnaHQgKyAxKSAvIDI7CisKKwltb2RlLT5jcnRjX3ZkaXNwbGF5ID0gaGVpZ2h0OworCW1vZGUtPmNydGNfdmJsYW5rX3N0YXJ0ID0gaGVpZ2h0ICsgYm9yZGVyOworCW1vZGUtPmNydGNfdmJsYW5rX2VuZCA9IG1vZGUtPmNydGNfdmJsYW5rX3N0YXJ0ICsgYmxhbmtfd2lkdGg7CisKKwltb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0ID0gbW9kZS0+Y3J0Y192Ymxhbmtfc3RhcnQgKyBzeW5jX3BvczsKKwltb2RlLT5jcnRjX3ZzeW5jX2VuZCA9IG1vZGUtPmNydGNfdnN5bmNfc3RhcnQgKyBzeW5jX3dpZHRoOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBwYW5lbF9maXR0ZXJfc2NhbGluZyh1MzIgc291cmNlLCB1MzIgdGFyZ2V0KQoreworCS8qCisJICogRmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIFNvIHRoZSBGQUNUT1IKKwkgKiBpcyBkZWZpbmVkLCB3aGljaCBjYW4gYXZvaWQgdGhlIGZsb2F0aW5nIHBvaW50IGNvbXB1dGF0aW9uCisJICogd2hlbiBjYWxjdWxhdGluZyB0aGUgcGFuZWwgcmF0aW8uCisJICovCisjZGVmaW5lIEFDQ1VSQUNZIDEyCisjZGVmaW5lIEZBQ1RPUiAoMSA8PCBBQ0NVUkFDWSkKKwl1MzIgcmF0aW8gPSBzb3VyY2UgKiBGQUNUT1IgLyB0YXJnZXQ7CisJcmV0dXJuIChGQUNUT1IgKiByYXRpbyArIEZBQ1RPUi8yKSAvIEZBQ1RPUjsKK30KKwogc3RhdGljIGJvb2wgaW50ZWxfbHZkc19tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKIAkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAogCQkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCiB7Ci0JLyoKLQkgKiBmbG9hdCBwb2ludCBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCAuIFNvIHRoZSBQQU5FTF9SQVRJT19GQUNUT1IKLQkgKiBpcyBkZWZpbmVkLCB3aGljaCBjYW4gYXZvaWQgdGhlIGZsb2F0IHBvaW50IGNvbXB1dGF0aW9uIHdoZW4KLQkgKiBjYWxjdWxhdGluZyB0aGUgcGFuZWwgcmF0aW8uCi0JICovCi0jZGVmaW5lIFBBTkVMX1JBVElPX0ZBQ1RPUiA4MTkyCiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhlbmNvZGVyLT5jcnRjKTsKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKnRtcF9lbmNvZGVyOwogCXN0cnVjdCBpbnRlbF9lbmNvZGVyICppbnRlbF9lbmNvZGVyID0gZW5jX3RvX2ludGVsX2VuY29kZXIoZW5jb2Rlcik7CiAJc3RydWN0IGludGVsX2x2ZHNfcHJpdiAqbHZkc19wcml2ID0gaW50ZWxfZW5jb2Rlci0+ZGV2X3ByaXY7Ci0JdTMyIHBmaXRfY29udHJvbCA9IDAsIHBmaXRfcGdtX3JhdGlvcyA9IDA7Ci0JaW50IGxlZnRfYm9yZGVyID0gMCwgcmlnaHRfYm9yZGVyID0gMCwgdG9wX2JvcmRlciA9IDA7Ci0JaW50IGJvdHRvbV9ib3JkZXIgPSAwOwotCWJvb2wgYm9yZGVyID0gMDsKLQlpbnQgcGFuZWxfcmF0aW8sIGRlc2lyZWRfcmF0aW8sIHZlcnRfc2NhbGUsIGhvcml6X3NjYWxlOwotCWludCBob3Jpel9yYXRpbywgdmVydF9yYXRpbzsKLQl1MzIgaHN5bmNfd2lkdGgsIHZzeW5jX3dpZHRoOwotCXUzMiBoYmxhbmtfd2lkdGgsIHZibGFua193aWR0aDsKLQl1MzIgaHN5bmNfcG9zLCB2c3luY19wb3M7CisJdTMyIHBmaXRfY29udHJvbCA9IDAsIHBmaXRfcGdtX3JhdGlvcyA9IDAsIGJvcmRlciA9IDA7CiAKIAkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuISEgKi8KIAlpZiAoIUlTX0k5NjVHKGRldikgJiYgaW50ZWxfY3J0Yy0+cGlwZSA9PSAwKSB7CkBAIC0yMDAsMjcgKzI0MiwyNSBAQAogCWlmIChkZXZfcHJpdi0+cGFuZWxfZml4ZWRfbW9kZSA9PSBOVUxMKQogCQlyZXR1cm4gdHJ1ZTsKIAkvKgotCSAqIElmIHdlIGhhdmUgdGltaW5ncyBmcm9tIHRoZSBCSU9TIGZvciB0aGUgcGFuZWwsIHB1dCB0aGVtIGluCisJICogV2UgaGF2ZSB0aW1pbmdzIGZyb20gdGhlIEJJT1MgZm9yIHRoZSBwYW5lbCwgcHV0IHRoZW0gaW4KIAkgKiB0byB0aGUgYWRqdXN0ZWQgbW9kZS4gIFRoZSBDUlRDIHdpbGwgYmUgc2V0IHVwIGZvciB0aGlzIG1vZGUsCiAJICogd2l0aCB0aGUgcGFuZWwgc2NhbGluZyBzZXQgdXAgdG8gc291cmNlIGZyb20gdGhlIEgvVkRpc3BsYXkKIAkgKiBvZiB0aGUgb3JpZ2luYWwgbW9kZS4KIAkgKi8KLQlpZiAoZGV2X3ByaXYtPnBhbmVsX2ZpeGVkX21vZGUgIT0gTlVMTCkgewotCQlhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSA9IGRldl9wcml2LT5wYW5lbF9maXhlZF9tb2RlLT5oZGlzcGxheTsKLQkJYWRqdXN0ZWRfbW9kZS0+aHN5bmNfc3RhcnQgPQotCQkJZGV2X3ByaXYtPnBhbmVsX2ZpeGVkX21vZGUtPmhzeW5jX3N0YXJ0OwotCQlhZGp1c3RlZF9tb2RlLT5oc3luY19lbmQgPQotCQkJZGV2X3ByaXYtPnBhbmVsX2ZpeGVkX21vZGUtPmhzeW5jX2VuZDsKLQkJYWRqdXN0ZWRfbW9kZS0+aHRvdGFsID0gZGV2X3ByaXYtPnBhbmVsX2ZpeGVkX21vZGUtPmh0b3RhbDsKLQkJYWRqdXN0ZWRfbW9kZS0+dmRpc3BsYXkgPSBkZXZfcHJpdi0+cGFuZWxfZml4ZWRfbW9kZS0+dmRpc3BsYXk7Ci0JCWFkanVzdGVkX21vZGUtPnZzeW5jX3N0YXJ0ID0KLQkJCWRldl9wcml2LT5wYW5lbF9maXhlZF9tb2RlLT52c3luY19zdGFydDsKLQkJYWRqdXN0ZWRfbW9kZS0+dnN5bmNfZW5kID0KLQkJCWRldl9wcml2LT5wYW5lbF9maXhlZF9tb2RlLT52c3luY19lbmQ7Ci0JCWFkanVzdGVkX21vZGUtPnZ0b3RhbCA9IGRldl9wcml2LT5wYW5lbF9maXhlZF9tb2RlLT52dG90YWw7Ci0JCWFkanVzdGVkX21vZGUtPmNsb2NrID0gZGV2X3ByaXYtPnBhbmVsX2ZpeGVkX21vZGUtPmNsb2NrOwotCQlkcm1fbW9kZV9zZXRfY3J0Y2luZm8oYWRqdXN0ZWRfbW9kZSwgQ1JUQ19JTlRFUkxBQ0VfSEFMVkVfVik7Ci0JfQorCWFkanVzdGVkX21vZGUtPmhkaXNwbGF5ID0gZGV2X3ByaXYtPnBhbmVsX2ZpeGVkX21vZGUtPmhkaXNwbGF5OworCWFkanVzdGVkX21vZGUtPmhzeW5jX3N0YXJ0ID0KKwkJZGV2X3ByaXYtPnBhbmVsX2ZpeGVkX21vZGUtPmhzeW5jX3N0YXJ0OworCWFkanVzdGVkX21vZGUtPmhzeW5jX2VuZCA9CisJCWRldl9wcml2LT5wYW5lbF9maXhlZF9tb2RlLT5oc3luY19lbmQ7CisJYWRqdXN0ZWRfbW9kZS0+aHRvdGFsID0gZGV2X3ByaXYtPnBhbmVsX2ZpeGVkX21vZGUtPmh0b3RhbDsKKwlhZGp1c3RlZF9tb2RlLT52ZGlzcGxheSA9IGRldl9wcml2LT5wYW5lbF9maXhlZF9tb2RlLT52ZGlzcGxheTsKKwlhZGp1c3RlZF9tb2RlLT52c3luY19zdGFydCA9CisJCWRldl9wcml2LT5wYW5lbF9maXhlZF9tb2RlLT52c3luY19zdGFydDsKKwlhZGp1c3RlZF9tb2RlLT52c3luY19lbmQgPQorCQlkZXZfcHJpdi0+cGFuZWxfZml4ZWRfbW9kZS0+dnN5bmNfZW5kOworCWFkanVzdGVkX21vZGUtPnZ0b3RhbCA9IGRldl9wcml2LT5wYW5lbF9maXhlZF9tb2RlLT52dG90YWw7CisJYWRqdXN0ZWRfbW9kZS0+Y2xvY2sgPSBkZXZfcHJpdi0+cGFuZWxfZml4ZWRfbW9kZS0+Y2xvY2s7CisJZHJtX21vZGVfc2V0X2NydGNpbmZvKGFkanVzdGVkX21vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOwogCiAJLyogTWFrZSBzdXJlIHByZS05NjVzIHNldCBkaXRoZXIgY29ycmVjdGx5ICovCiAJaWYgKCFJU19JOTY1RyhkZXYpKSB7CkBAIC0yMzAsMTEgKzI3MCw4IEBACiAKIAkvKiBOYXRpdmUgbW9kZXMgZG9uJ3QgbmVlZCBmaXR0aW5nICovCiAJaWYgKGFkanVzdGVkX21vZGUtPmhkaXNwbGF5ID09IG1vZGUtPmhkaXNwbGF5ICYmCi0JCQlhZGp1c3RlZF9tb2RlLT52ZGlzcGxheSA9PSBtb2RlLT52ZGlzcGxheSkgewotCQlwZml0X3BnbV9yYXRpb3MgPSAwOwotCQlib3JkZXIgPSAwOworCSAgICBhZGp1c3RlZF9tb2RlLT52ZGlzcGxheSA9PSBtb2RlLT52ZGlzcGxheSkKIAkJZ290byBvdXQ7Ci0JfQogCiAJLyogZnVsbCBzY3JlZW4gc2NhbGUgZm9yIG5vdyAqLwogCWlmIChIQVNfUENIX1NQTElUKGRldikpCkBAIC0yNDIsMjUgKzI3OSw5IEBACiAKIAkvKiA5NjUrIHdhbnRzIGZ1enp5IGZpdHRpbmcgKi8KIAlpZiAoSVNfSTk2NUcoZGV2KSkKLQkJcGZpdF9jb250cm9sIHw9IChpbnRlbF9jcnRjLT5waXBlIDw8IFBGSVRfUElQRV9TSElGVCkgfAotCQkJCQlQRklUX0ZJTFRFUl9GVVpaWTsKKwkJcGZpdF9jb250cm9sIHw9ICgoaW50ZWxfY3J0Yy0+cGlwZSA8PCBQRklUX1BJUEVfU0hJRlQpIHwKKwkJCQkgUEZJVF9GSUxURVJfRlVaWlkpOwogCi0JaHN5bmNfd2lkdGggPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX2VuZCAtCi0JCQkJCWFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfc3RhcnQ7Ci0JdnN5bmNfd2lkdGggPSBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX2VuZCAtCi0JCQkJCWFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfc3RhcnQ7Ci0JaGJsYW5rX3dpZHRoID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oYmxhbmtfZW5kIC0KLQkJCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oYmxhbmtfc3RhcnQ7Ci0JdmJsYW5rX3dpZHRoID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192YmxhbmtfZW5kIC0KLQkJCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192Ymxhbmtfc3RhcnQ7Ci0JLyoKLQkgKiBEZWFsIHdpdGggcGFuZWwgZml0dGluZyBvcHRpb25zLiBGaWd1cmUgb3V0IGhvdyB0byBzdHJldGNoIHRoZQotCSAqIGltYWdlIGJhc2VkIG9uIGl0cyBhc3BlY3QgcmF0aW8gJiB0aGUgY3VycmVudCBwYW5lbCBmaXR0aW5nIG1vZGUuCi0JICovCi0JcGFuZWxfcmF0aW8gPSBhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSAqIFBBTkVMX1JBVElPX0ZBQ1RPUiAvCi0JCQkJYWRqdXN0ZWRfbW9kZS0+dmRpc3BsYXk7Ci0JZGVzaXJlZF9yYXRpbyA9IG1vZGUtPmhkaXNwbGF5ICogUEFORUxfUkFUSU9fRkFDVE9SIC8KLQkJCQltb2RlLT52ZGlzcGxheTsKIAkvKgogCSAqIEVuYWJsZSBhdXRvbWF0aWMgcGFuZWwgc2NhbGluZyBmb3Igbm9uLW5hdGl2ZSBtb2RlcyBzbyB0aGF0IHRoZXkgZmlsbAogCSAqIHRoZSBzY3JlZW4uICBTaG91bGQgYmUgZW5hYmxlZCBiZWZvcmUgdGhlIHBpcGUgaXMgZW5hYmxlZCwgYWNjb3JkaW5nCkBAIC0yNzgsMTcwICsyOTksNjMgQEAKIAkJICogRm9yIGNlbnRlcmVkIG1vZGVzLCB3ZSBoYXZlIHRvIGNhbGN1bGF0ZSBib3JkZXIgd2lkdGhzICYKIAkJICogaGVpZ2h0cyBhbmQgbW9kaWZ5IHRoZSB2YWx1ZXMgcHJvZ3JhbW1lZCBpbnRvIHRoZSBDUlRDLgogCQkgKi8KLQkJbGVmdF9ib3JkZXIgPSAoYWRqdXN0ZWRfbW9kZS0+aGRpc3BsYXkgLSBtb2RlLT5oZGlzcGxheSkgLyAyOwotCQlyaWdodF9ib3JkZXIgPSBsZWZ0X2JvcmRlcjsKLQkJaWYgKG1vZGUtPmhkaXNwbGF5ICYgMSkKLQkJCXJpZ2h0X2JvcmRlcisrOwotCQl0b3BfYm9yZGVyID0gKGFkanVzdGVkX21vZGUtPnZkaXNwbGF5IC0gbW9kZS0+dmRpc3BsYXkpIC8gMjsKLQkJYm90dG9tX2JvcmRlciA9IHRvcF9ib3JkZXI7Ci0JCWlmIChtb2RlLT52ZGlzcGxheSAmIDEpCi0JCQlib3R0b21fYm9yZGVyKys7Ci0JCS8qIFNldCBhY3RpdmUgJiBib3JkZXIgdmFsdWVzICovCi0JCWFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXkgPSBtb2RlLT5oZGlzcGxheTsKLQkJLyogS2VlcCB0aGUgYm9kZXIgYmUgZXZlbiAqLwotCQlpZiAocmlnaHRfYm9yZGVyICYgMSkKLQkJCXJpZ2h0X2JvcmRlcisrOwotCQkvKiB1c2UgdGhlIGJvcmRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIGJvcmRlciBtaW51c2Ugb25lICovCi0JCWFkanVzdGVkX21vZGUtPmNydGNfaGJsYW5rX3N0YXJ0ID0gbW9kZS0+aGRpc3BsYXkgKwotCQkJCQkJcmlnaHRfYm9yZGVyOwotCQkvKiBrZWVwIHRoZSBibGFuayB3aWR0aCBjb25zdGFudCAqLwotCQlhZGp1c3RlZF9tb2RlLT5jcnRjX2hibGFua19lbmQgPQotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oYmxhbmtfc3RhcnQgKyBoYmxhbmtfd2lkdGg7Ci0JCS8qIGdldCB0aGUgaHN5bmMgcG9zIHJlbGF0aXZlIHRvIGhibGFuayBzdGFydCAqLwotCQloc3luY19wb3MgPSAoaGJsYW5rX3dpZHRoIC0gaHN5bmNfd2lkdGgpIC8gMjsKLQkJLyoga2VlcCB0aGUgaHN5bmMgcG9zIGJlIGV2ZW4gKi8KLQkJaWYgKGhzeW5jX3BvcyAmIDEpCi0JCQloc3luY19wb3MrKzsKLQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydCA9Ci0JCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oYmxhbmtfc3RhcnQgKyBoc3luY19wb3M7Ci0JCS8qIGtlZXAgdGhlIGhzeW5jIHdpZHRoIGNvbnN0YW50ICovCi0JCWFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfZW5kID0KLQkJCQlhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX3N0YXJ0ICsgaHN5bmNfd2lkdGg7Ci0JCWFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgPSBtb2RlLT52ZGlzcGxheTsKLQkJLyogdXNlIHRoZSBib3JkZXIgaW5zdGVhZCBvZiBib3JkZXIgbWludXMgb25lICovCi0JCWFkanVzdGVkX21vZGUtPmNydGNfdmJsYW5rX3N0YXJ0ID0gbW9kZS0+dmRpc3BsYXkgKwotCQkJCQkJYm90dG9tX2JvcmRlcjsKLQkJLyoga2VlcCB0aGUgdmJsYW5rIHdpZHRoIGNvbnN0YW50ICovCi0JCWFkanVzdGVkX21vZGUtPmNydGNfdmJsYW5rX2VuZCA9Ci0JCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192Ymxhbmtfc3RhcnQgKyB2Ymxhbmtfd2lkdGg7Ci0JCS8qIGdldCB0aGUgdnN5bmMgc3RhcnQgcG9zdGlvbiByZWxhdGl2ZSB0byB2Ymxhbmsgc3RhcnQgKi8KLQkJdnN5bmNfcG9zID0gKHZibGFua193aWR0aCAtIHZzeW5jX3dpZHRoKSAvIDI7Ci0JCWFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfc3RhcnQgPQotCQkJCWFkanVzdGVkX21vZGUtPmNydGNfdmJsYW5rX3N0YXJ0ICsgdnN5bmNfcG9zOwotCQkvKiBrZWVwIHRoZSB2c3luYyB3aWR0aCBjb25zdGFudCAqLwotCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX2VuZCA9Ci0JCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFydCArIHZzeW5jX3dpZHRoOwotCQlib3JkZXIgPSAxOworCQljZW50cmVfaG9yaXpvbnRhbGx5KGFkanVzdGVkX21vZGUsIG1vZGUtPmhkaXNwbGF5KTsKKwkJY2VudHJlX3ZlcnRpY2FsbHkoYWRqdXN0ZWRfbW9kZSwgbW9kZS0+dmRpc3BsYXkpOworCQlib3JkZXIgPSBMVkRTX0JPUkRFUl9FTkFCTEU7CiAJCWJyZWFrOworCiAJY2FzZSBEUk1fTU9ERV9TQ0FMRV9BU1BFQ1Q6Ci0JCS8qIFNjYWxlIGJ1dCBwcmVzZXJ2ZSB0aGUgc3BlY3QgcmF0aW8gKi8KLQkJcGZpdF9jb250cm9sIHw9IFBGSVRfRU5BQkxFOworCQkvKiBTY2FsZSBidXQgcHJlc2VydmUgdGhlIGFzcGVjdCByYXRpbyAqLwogCQlpZiAoSVNfSTk2NUcoZGV2KSkgeworCQkJdTMyIHNjYWxlZF93aWR0aCA9IGFkanVzdGVkX21vZGUtPmhkaXNwbGF5ICogbW9kZS0+dmRpc3BsYXk7CisJCQl1MzIgc2NhbGVkX2hlaWdodCA9IG1vZGUtPmhkaXNwbGF5ICogYWRqdXN0ZWRfbW9kZS0+dmRpc3BsYXk7CisKKwkJCXBmaXRfY29udHJvbCB8PSBQRklUX0VOQUJMRTsKIAkJCS8qIDk2NSsgaXMgZWFzeSwgaXQgZG9lcyBldmVyeXRoaW5nIGluIGh3ICovCi0JCQlpZiAocGFuZWxfcmF0aW8gPiBkZXNpcmVkX3JhdGlvKQorCQkJaWYgKHNjYWxlZF93aWR0aCA+IHNjYWxlZF9oZWlnaHQpCiAJCQkJcGZpdF9jb250cm9sIHw9IFBGSVRfU0NBTElOR19QSUxMQVI7Ci0JCQllbHNlIGlmIChwYW5lbF9yYXRpbyA8IGRlc2lyZWRfcmF0aW8pCisJCQllbHNlIGlmIChzY2FsZWRfd2lkdGggPCBzY2FsZWRfaGVpZ2h0KQogCQkJCXBmaXRfY29udHJvbCB8PSBQRklUX1NDQUxJTkdfTEVUVEVSOwogCQkJZWxzZQogCQkJCXBmaXRfY29udHJvbCB8PSBQRklUX1NDQUxJTkdfQVVUTzsKIAkJfSBlbHNlIHsKKwkJCXUzMiBzY2FsZWRfd2lkdGggPSBhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSAqIG1vZGUtPnZkaXNwbGF5OworCQkJdTMyIHNjYWxlZF9oZWlnaHQgPSBtb2RlLT5oZGlzcGxheSAqIGFkanVzdGVkX21vZGUtPnZkaXNwbGF5OwogCQkJLyoKIAkJCSAqIEZvciBlYXJsaWVyIGNoaXBzIHdlIGhhdmUgdG8gY2FsY3VsYXRlIHRoZSBzY2FsaW5nCiAJCQkgKiByYXRpbyBieSBoYW5kIGFuZCBwcm9ncmFtIGl0IGludG8gdGhlCiAJCQkgKiBQRklUX1BHTV9SQVRJTyByZWdpc3RlcgogCQkJICovCi0JCQl1MzIgaG9yaXpfYml0cywgdmVydF9iaXRzLCBiaXRzID0gMTI7Ci0JCQlob3Jpel9yYXRpbyA9IG1vZGUtPmhkaXNwbGF5ICogUEFORUxfUkFUSU9fRkFDVE9SLwotCQkJCQkJYWRqdXN0ZWRfbW9kZS0+aGRpc3BsYXk7Ci0JCQl2ZXJ0X3JhdGlvID0gbW9kZS0+dmRpc3BsYXkgKiBQQU5FTF9SQVRJT19GQUNUT1IvCi0JCQkJCQlhZGp1c3RlZF9tb2RlLT52ZGlzcGxheTsKLQkJCWhvcml6X3NjYWxlID0gYWRqdXN0ZWRfbW9kZS0+aGRpc3BsYXkgKgotCQkJCQlQQU5FTF9SQVRJT19GQUNUT1IgLyBtb2RlLT5oZGlzcGxheTsKLQkJCXZlcnRfc2NhbGUgPSBhZGp1c3RlZF9tb2RlLT52ZGlzcGxheSAqCi0JCQkJCVBBTkVMX1JBVElPX0ZBQ1RPUiAvIG1vZGUtPnZkaXNwbGF5OworCQkJaWYgKHNjYWxlZF93aWR0aCA+IHNjYWxlZF9oZWlnaHQpIHsgLyogcGlsbGFyICovCisJCQkJY2VudHJlX2hvcml6b250YWxseShhZGp1c3RlZF9tb2RlLCBzY2FsZWRfaGVpZ2h0IC8gbW9kZS0+dmRpc3BsYXkpOwogCi0JCQkvKiByZXRhaW4gYXNwZWN0IHJhdGlvICovCi0JCQlpZiAocGFuZWxfcmF0aW8gPiBkZXNpcmVkX3JhdGlvKSB7IC8qIFBpbGxhciAqLwotCQkJCXUzMiBzY2FsZWRfd2lkdGg7Ci0JCQkJc2NhbGVkX3dpZHRoID0gbW9kZS0+aGRpc3BsYXkgKiB2ZXJ0X3NjYWxlIC8KLQkJCQkJCVBBTkVMX1JBVElPX0ZBQ1RPUjsKLQkJCQlob3Jpel9yYXRpbyA9IHZlcnRfcmF0aW87Ci0JCQkJcGZpdF9jb250cm9sIHw9IChWRVJUX0FVVE9fU0NBTEUgfAorCQkJCWJvcmRlciA9IExWRFNfQk9SREVSX0VOQUJMRTsKKwkJCQlpZiAobW9kZS0+dmRpc3BsYXkgIT0gYWRqdXN0ZWRfbW9kZS0+dmRpc3BsYXkpIHsKKwkJCQkJdTMyIGJpdHMgPSBwYW5lbF9maXR0ZXJfc2NhbGluZyhtb2RlLT52ZGlzcGxheSwgYWRqdXN0ZWRfbW9kZS0+dmRpc3BsYXkpOworCQkJCQlwZml0X3BnbV9yYXRpb3MgfD0gKGJpdHMgPDwgUEZJVF9IT1JJWl9TQ0FMRV9TSElGVCB8CisJCQkJCQkJICAgIGJpdHMgPDwgUEZJVF9WRVJUX1NDQUxFX1NISUZUKTsKKwkJCQkJcGZpdF9jb250cm9sIHw9IChQRklUX0VOQUJMRSB8CisJCQkJCQkJIFZFUlRfSU5URVJQX0JJTElORUFSIHwKKwkJCQkJCQkgSE9SSVpfSU5URVJQX0JJTElORUFSKTsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKHNjYWxlZF93aWR0aCA8IHNjYWxlZF9oZWlnaHQpIHsgLyogbGV0dGVyICovCisJCQkJY2VudHJlX3ZlcnRpY2FsbHkoYWRqdXN0ZWRfbW9kZSwgc2NhbGVkX3dpZHRoIC8gbW9kZS0+aGRpc3BsYXkpOworCisJCQkJYm9yZGVyID0gTFZEU19CT1JERVJfRU5BQkxFOworCQkJCWlmIChtb2RlLT5oZGlzcGxheSAhPSBhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSkgeworCQkJCQl1MzIgYml0cyA9IHBhbmVsX2ZpdHRlcl9zY2FsaW5nKG1vZGUtPmhkaXNwbGF5LCBhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSk7CisJCQkJCXBmaXRfcGdtX3JhdGlvcyB8PSAoYml0cyA8PCBQRklUX0hPUklaX1NDQUxFX1NISUZUIHwKKwkJCQkJCQkgICAgYml0cyA8PCBQRklUX1ZFUlRfU0NBTEVfU0hJRlQpOworCQkJCQlwZml0X2NvbnRyb2wgfD0gKFBGSVRfRU5BQkxFIHwKKwkJCQkJCQkgVkVSVF9JTlRFUlBfQklMSU5FQVIgfAorCQkJCQkJCSBIT1JJWl9JTlRFUlBfQklMSU5FQVIpOworCQkJCX0KKwkJCX0gZWxzZQorCQkJCS8qIEFzcGVjdHMgbWF0Y2gsIExldCBodyBzY2FsZSBib3RoIGRpcmVjdGlvbnMgKi8KKwkJCQlwZml0X2NvbnRyb2wgfD0gKFBGSVRfRU5BQkxFIHwKKwkJCQkJCSBWRVJUX0FVVE9fU0NBTEUgfCBIT1JJWl9BVVRPX1NDQUxFIHwKIAkJCQkJCSBWRVJUX0lOVEVSUF9CSUxJTkVBUiB8CiAJCQkJCQkgSE9SSVpfSU5URVJQX0JJTElORUFSKTsKLQkJCQkvKiBQaWxsYXIgd2lsbCBoYXZlIGxlZnQvcmlnaHQgYm9yZGVycyAqLwotCQkJCWxlZnRfYm9yZGVyID0gKGFkanVzdGVkX21vZGUtPmhkaXNwbGF5IC0KLQkJCQkJCXNjYWxlZF93aWR0aCkgLyAyOwotCQkJCXJpZ2h0X2JvcmRlciA9IGxlZnRfYm9yZGVyOwotCQkJCWlmIChtb2RlLT5oZGlzcGxheSAmIDEpIC8qIG9kZCByZXNvbHV0aW9ucyAqLwotCQkJCQlyaWdodF9ib3JkZXIrKzsKLQkJCQkvKiBrZWVwIHRoZSBib3JkZXIgYmUgZXZlbiAqLwotCQkJCWlmIChyaWdodF9ib3JkZXIgJiAxKQotCQkJCQlyaWdodF9ib3JkZXIrKzsKLQkJCQlhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5ID0gc2NhbGVkX3dpZHRoOwotCQkJCS8qIHVzZSBib3JkZXIgaW5zdGVhZCBvZiBib3JkZXIgbWludXMgb25lICovCi0JCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oYmxhbmtfc3RhcnQgPQotCQkJCQlzY2FsZWRfd2lkdGggKyByaWdodF9ib3JkZXI7Ci0JCQkJLyoga2VlcCB0aGUgaGJsYW5rIHdpZHRoIGNvbnN0YW50ICovCi0JCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oYmxhbmtfZW5kID0KLQkJCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oYmxhbmtfc3RhcnQgKwotCQkJCQkJCWhibGFua193aWR0aDsKLQkJCQkvKgotCQkJCSAqIGdldCB0aGUgaHN5bmMgc3RhcnQgcG9zIHJlbGF0aXZlIHRvCi0JCQkJICogaGJsYW5rIHN0YXJ0Ci0JCQkJICovCi0JCQkJaHN5bmNfcG9zID0gKGhibGFua193aWR0aCAtIGhzeW5jX3dpZHRoKSAvIDI7Ci0JCQkJLyoga2VlcCB0aGUgaHN5bmNfcG9zIGJlIGV2ZW4gKi8KLQkJCQlpZiAoaHN5bmNfcG9zICYgMSkKLQkJCQkJaHN5bmNfcG9zKys7Ci0JCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydCA9Ci0JCQkJCWFkanVzdGVkX21vZGUtPmNydGNfaGJsYW5rX3N0YXJ0ICsKLQkJCQkJCQloc3luY19wb3M7Ci0JCQkJLyoga2VlcHQgaHN5bmMgd2lkdGggY29uc3RhbnQgKi8KLQkJCQlhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX2VuZCA9Ci0JCQkJCWFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfc3RhcnQgKwotCQkJCQkJCWhzeW5jX3dpZHRoOwotCQkJCWJvcmRlciA9IDE7Ci0JCQl9IGVsc2UgaWYgKHBhbmVsX3JhdGlvIDwgZGVzaXJlZF9yYXRpbykgeyAvKiBsZXR0ZXIgKi8KLQkJCQl1MzIgc2NhbGVkX2hlaWdodCA9IG1vZGUtPnZkaXNwbGF5ICoKLQkJCQkJaG9yaXpfc2NhbGUgLyBQQU5FTF9SQVRJT19GQUNUT1I7Ci0JCQkJdmVydF9yYXRpbyA9IGhvcml6X3JhdGlvOwotCQkJCXBmaXRfY29udHJvbCB8PSAoSE9SSVpfQVVUT19TQ0FMRSB8Ci0JCQkJCQkgVkVSVF9JTlRFUlBfQklMSU5FQVIgfAotCQkJCQkJIEhPUklaX0lOVEVSUF9CSUxJTkVBUik7Ci0JCQkJLyogTGV0dGVyYm94IHdpbGwgaGF2ZSB0b3AvYm90dG9tIGJvcmRlciAqLwotCQkJCXRvcF9ib3JkZXIgPSAoYWRqdXN0ZWRfbW9kZS0+dmRpc3BsYXkgLQotCQkJCQlzY2FsZWRfaGVpZ2h0KSAvIDI7Ci0JCQkJYm90dG9tX2JvcmRlciA9IHRvcF9ib3JkZXI7Ci0JCQkJaWYgKG1vZGUtPnZkaXNwbGF5ICYgMSkKLQkJCQkJYm90dG9tX2JvcmRlcisrOwotCQkJCWFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgPSBzY2FsZWRfaGVpZ2h0OwotCQkJCS8qIHVzZSBib3JkZXIgaW5zdGVhZCBvZiBib3JkZXIgbWludXMgb25lICovCi0JCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192Ymxhbmtfc3RhcnQgPQotCQkJCQlzY2FsZWRfaGVpZ2h0ICsgYm90dG9tX2JvcmRlcjsKLQkJCQkvKiBrZWVwIHRoZSB2Ymxhbmsgd2lkdGggY29uc3RhbnQgKi8KLQkJCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZibGFua19lbmQgPQotCQkJCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZibGFua19zdGFydCArCi0JCQkJCQkJdmJsYW5rX3dpZHRoOwotCQkJCS8qCi0JCQkJICogZ2V0IHRoZSB2c3luYyBzdGFydCBwb3MgcmVsYXRpdmUgdG8KLQkJCQkgKiB2Ymxhbmsgc3RhcnQKLQkJCQkgKi8KLQkJCQl2c3luY19wb3MgPSAodmJsYW5rX3dpZHRoIC0gdnN5bmNfd2lkdGgpIC8gMjsKLQkJCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0ID0KLQkJCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192Ymxhbmtfc3RhcnQgKwotCQkJCQkJCXZzeW5jX3BvczsKLQkJCQkvKiBrZWVwIHRoZSB2c3luYyB3aWR0aCBjb25zdGFudCAqLwotCQkJCWFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfZW5kID0KLQkJCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFydCArCi0JCQkJCQkJdnN5bmNfd2lkdGg7Ci0JCQkJYm9yZGVyID0gMTsKLQkJCX0gZWxzZSB7Ci0JCQkvKiBBc3BlY3RzIG1hdGNoLCBMZXQgaHcgc2NhbGUgYm90aCBkaXJlY3Rpb25zICovCi0JCQkJcGZpdF9jb250cm9sIHw9IChWRVJUX0FVVE9fU0NBTEUgfAotCQkJCQkJIEhPUklaX0FVVE9fU0NBTEUgfAotCQkJCQkJIFZFUlRfSU5URVJQX0JJTElORUFSIHwKLQkJCQkJCSBIT1JJWl9JTlRFUlBfQklMSU5FQVIpOwotCQkJfQotCQkJaG9yaXpfYml0cyA9ICgxIDw8IGJpdHMpICogaG9yaXpfcmF0aW8gLwotCQkJCQlQQU5FTF9SQVRJT19GQUNUT1I7Ci0JCQl2ZXJ0X2JpdHMgPSAoMSA8PCBiaXRzKSAqIHZlcnRfcmF0aW8gLwotCQkJCQlQQU5FTF9SQVRJT19GQUNUT1I7Ci0JCQlwZml0X3BnbV9yYXRpb3MgPQotCQkJCSgodmVydF9iaXRzIDw8IFBGSVRfVkVSVF9TQ0FMRV9TSElGVCkgJgotCQkJCQkJUEZJVF9WRVJUX1NDQUxFX01BU0spIHwKLQkJCQkoKGhvcml6X2JpdHMgPDwgUEZJVF9IT1JJWl9TQ0FMRV9TSElGVCkgJgotCQkJCQkJUEZJVF9IT1JJWl9TQ0FMRV9NQVNLKTsKIAkJfQogCQlicmVhazsKIApAQCAtNDU4LDYgKzM3Miw3IEBACiAJCQkJCSBWRVJUX0lOVEVSUF9CSUxJTkVBUiB8CiAJCQkJCSBIT1JJWl9JTlRFUlBfQklMSU5FQVIpOwogCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTQ2NSwxNCArMzgwLDggQEAKIG91dDoKIAlsdmRzX3ByaXYtPnBmaXRfY29udHJvbCA9IHBmaXRfY29udHJvbDsKIAlsdmRzX3ByaXYtPnBmaXRfcGdtX3JhdGlvcyA9IHBmaXRfcGdtX3JhdGlvczsKLQkvKgotCSAqIFdoZW4gdGhlcmUgZXhpc3RzIHRoZSBib3JkZXIsIGl0IG1lYW5zIHRoYXQgdGhlIExWRFNfQk9SRFIKLQkgKiBzaG91bGQgYmUgZW5hYmxlZC4KLQkgKi8KLQlpZiAoYm9yZGVyKQotCQlkZXZfcHJpdi0+bHZkc19ib3JkZXJfYml0cyB8PSBMVkRTX0JPUkRFUl9FTkFCTEU7Ci0JZWxzZQotCQlkZXZfcHJpdi0+bHZkc19ib3JkZXJfYml0cyAmPSB+KExWRFNfQk9SREVSX0VOQUJMRSk7CisJZGV2X3ByaXYtPmx2ZHNfYm9yZGVyX2JpdHMgPSBib3JkZXI7CisKIAkvKgogCSAqIFhYWDogSXQgd291bGQgYmUgbmljZSB0byBzdXBwb3J0IGxvd2VyIHJlZnJlc2ggcmF0ZXMgb24gdGhlCiAJICogcGFuZWxzIHRvIHJlZHVjZSBwb3dlciBjb25zdW1wdGlvbiwgYW5kIHBlcmhhcHMgbWF0Y2ggdGhlCkBAIC01OTksNiArNTA4LDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaW50ZWxfbm9fbW9kZXNldF9vbl9saWRfZG1pX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKK3sKKwlEUk1fREVCVUdfS01TKCJTa2lwcGluZyBmb3JjZWQgbW9kZXNldCBmb3IgJXNcbiIsIGlkLT5pZGVudCk7CisJcmV0dXJuIDE7Cit9CisKKy8qIFRoZSBHUFUgaGFuZ3MgdXAgb24gdGhlc2Ugc3lzdGVtcyBpZiBtb2Rlc2V0IGlzIHBlcmZvcm1lZCBvbiBMSUQgb3BlbiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIGludGVsX25vX21vZGVzZXRfb25fbGlkW10gPSB7CisJeworCQkuY2FsbGJhY2sgPSBpbnRlbF9ub19tb2Rlc2V0X29uX2xpZF9kbWlfY2FsbGJhY2ssCisJCS5pZGVudCA9ICJUb3NoaWJhIFRlY3JhIEExMSIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiVE9TSElCQSIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJURUNSQSBBMTEiKSwKKwkJfSwKKwl9LAorCisJeyB9CS8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCiAvKgogICogTGlkIGV2ZW50cy4gTm90ZSB0aGUgdXNlIG9mICdtb2Rlc2V0X29uX2xpZCc6CiAgKiAgLSB3ZSBzZXQgaXQgb24gbGlkIGNsb3NlLCBhbmQgcmVzZXQgaXQgb24gb3BlbgpAQCAtNjIyLDYgKzU1MSw5IEBACiAJICovCiAJaWYgKGNvbm5lY3RvcikKIAkJY29ubmVjdG9yLT5zdGF0dXMgPSBjb25uZWN0b3ItPmZ1bmNzLT5kZXRlY3QoY29ubmVjdG9yKTsKKwkvKiBEb24ndCBmb3JjZSBtb2Rlc2V0IG9uIG1hY2hpbmVzIHdoZXJlIGl0IGNhdXNlcyBhIEdQVSBsb2NrdXAgKi8KKwlpZiAoZG1pX2NoZWNrX3N5c3RlbShpbnRlbF9ub19tb2Rlc2V0X29uX2xpZCkpCisJCXJldHVybiBOT1RJRllfT0s7CiAJaWYgKCFhY3BpX2xpZF9vcGVuKCkpIHsKIAkJZGV2X3ByaXYtPm1vZGVzZXRfb25fbGlkID0gMTsKIAkJcmV0dXJuIE5PVElGWV9PSzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX292ZXJsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX292ZXJsYXkuYwppbmRleCBkN2FkNTEzLi5kMzlhZWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9vdmVybGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ZlcmxheS5jCkBAIC02NSw3ICs2NSw3IEBACiAjZGVmaW5lIE9DTURfWVVWXzQxMF9QTEFOQVIJKDB4ZTw8MTApIC8qIGFsc28gNDExICovCiAjZGVmaW5lIE9DTURfVFZTWU5DRkxJUF9QQVJJVFkJKDB4MTw8OSkKICNkZWZpbmUgT0NNRF9UVlNZTkNGTElQX0VOQUJMRQkoMHgxPDw3KQotI2RlZmluZSBPQ01EX0JVRl9UWVBFX01BU0sJKE94MTw8NSkKKyNkZWZpbmUgT0NNRF9CVUZfVFlQRV9NQVNLCSgweDE8PDUpCiAjZGVmaW5lIE9DTURfQlVGX1RZUEVfRlJBTUUJKDB4MDw8NSkKICNkZWZpbmUgT0NNRF9CVUZfVFlQRV9GSUVMRAkoMHgxPDw1KQogI2RlZmluZSBPQ01EX1RFU1RfTU9ERQkJKDB4MTw8NCkKQEAgLTE4NSw3ICsxODUsOCBAQAogCiAJaWYgKE9WRVJMQVlfTk9OUEhZU0lDQUwob3ZlcmxheS0+ZGV2KSkgewogCQlyZWdzID0gaW9fbWFwcGluZ19tYXBfYXRvbWljX3djKGRldl9wcml2LT5tbS5ndHRfbWFwcGluZywKLQkJCQlvdmVybGF5LT5yZWdfYm8tPmd0dF9vZmZzZXQpOworCQkJCQkJb3ZlcmxheS0+cmVnX2JvLT5ndHRfb2Zmc2V0LAorCQkJCQkJS01fVVNFUjApOwogCiAJCWlmICghcmVncykgewogCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gbWFwIG92ZXJsYXkgcmVncyBpbiBHVFRcbiIpOwpAQCAtMjAwLDcgKzIwMSw3IEBACiBzdGF0aWMgdm9pZCBpbnRlbF9vdmVybGF5X3VubWFwX3JlZ3NfYXRvbWljKHN0cnVjdCBpbnRlbF9vdmVybGF5ICpvdmVybGF5KQogewogCWlmIChPVkVSTEFZX05PTlBIWVNJQ0FMKG92ZXJsYXktPmRldikpCi0JCWlvX21hcHBpbmdfdW5tYXBfYXRvbWljKG92ZXJsYXktPnZpcnRfYWRkcik7CisJCWlvX21hcHBpbmdfdW5tYXBfYXRvbWljKG92ZXJsYXktPnZpcnRfYWRkciwgS01fVVNFUjApOwogCiAJb3ZlcmxheS0+dmlydF9hZGRyID0gTlVMTDsKIApAQCAtOTU4LDcgKzk1OSw3IEBACiAJICAgIHx8IHJlYy0+c3JjX3dpZHRoIDwgTl9IT1JJWl9ZX1RBUFMqNCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKiBjaGVjayBhbGluZ21lbnQgY29uc3RyYWlucyAqLworCS8qIGNoZWNrIGFsaWdubWVudCBjb25zdHJhaW50cyAqLwogCXN3aXRjaCAocmVjLT5mbGFncyAmIEk5MTVfT1ZFUkxBWV9UWVBFX01BU0spIHsKIAkJY2FzZSBJOTE1X09WRVJMQVlfUkdCOgogCQkJLyogbm90IGltcGxlbWVudGVkICovCkBAIC05OTAsNyArOTkxLDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogc3RyaWRlIGNoZWNraW5nICovCi0Jc3RyaWRlX21hc2sgPSA2MzsKKwlpZiAoSVNfSTgzMChkZXYpIHx8IElTXzg0NUcoZGV2KSkKKwkJc3RyaWRlX21hc2sgPSAyNTU7CisJZWxzZQorCQlzdHJpZGVfbWFzayA9IDYzOwogCiAJaWYgKHJlYy0+c3RyaWRlX1kgJiBzdHJpZGVfbWFzayB8fCByZWMtPnN0cmlkZV9VViAmIHN0cmlkZV9tYXNrKQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYwppbmRleCA3Njk5M2FjLi5kOWQ0ZDUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jCkBAIC0zOTIsMTMgKzM5MiwxMyBAQAogCQlEUk1fTE9HX0tNUygiJTAyWCAiLCAoKHU4ICopYXJncylbaV0pOwogCWZvciAoOyBpIDwgODsgaSsrKQogCQlEUk1fTE9HX0tNUygiICAgIik7Ci0JZm9yIChpID0gMDsgaSA8IHNpemVvZihzZHZvX2NtZF9uYW1lcykgLyBzaXplb2Yoc2R2b19jbWRfbmFtZXNbMF0pOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZHZvX2NtZF9uYW1lcyk7IGkrKykgewogCQlpZiAoY21kID09IHNkdm9fY21kX25hbWVzW2ldLmNtZCkgewogCQkJRFJNX0xPR19LTVMoIiglcykiLCBzZHZvX2NtZF9uYW1lc1tpXS5uYW1lKTsKIAkJCWJyZWFrOwogCQl9CiAJfQotCWlmIChpID09IHNpemVvZihzZHZvX2NtZF9uYW1lcykvIHNpemVvZihzZHZvX2NtZF9uYW1lc1swXSkpCisJaWYgKGkgPT0gQVJSQVlfU0laRShzZHZvX2NtZF9uYW1lcykpCiAJCURSTV9MT0dfS01TKCIoJTAyWCkiLCBjbWQpOwogCURSTV9MT0dfS01TKCJcbiIpOwogfQpAQCAtMTIzNyw5ICsxMjM3LDExIEBACiAKIAkvKiBTZXQgdGhlIFNEVk8gY29udHJvbCByZWdzLiAqLwogCWlmIChJU19JOTY1RyhkZXYpKSB7Ci0JCXNkdm94IHw9IFNEVk9fQk9SREVSX0VOQUJMRSB8Ci0JCQlTRFZPX1ZTWU5DX0FDVElWRV9ISUdIIHwKLQkJCVNEVk9fSFNZTkNfQUNUSVZFX0hJR0g7CisJCXNkdm94IHw9IFNEVk9fQk9SREVSX0VOQUJMRTsKKwkJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19QVlNZTkMpCisJCQlzZHZveCB8PSBTRFZPX1ZTWU5DX0FDVElWRV9ISUdIOworCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BIU1lOQykKKwkJCXNkdm94IHw9IFNEVk9fSFNZTkNfQUNUSVZFX0hJR0g7CiAJfSBlbHNlIHsKIAkJc2R2b3ggfD0gSTkxNV9SRUFEKHNkdm9fcHJpdi0+c2R2b19yZWcpOwogCQlzd2l0Y2ggKHNkdm9fcHJpdi0+c2R2b19yZWcpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCmluZGV4IDZkNTUzYzIuLmNjMzcyNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYwpAQCAtNDc2LDcgKzQ3Niw3IEBACiAJCS52aV9lbmRfZjEJPSAyMCwJCSAgICAudmlfZW5kX2YyCQk9IDIxLAogCQkubmJyX2VuZAk9IDI0MCwKIAotCQkuYnVyc3RfZW5hCT0gOCwKKwkJLmJ1cnN0X2VuYQk9IHRydWUsCiAJCS5oYnVyc3Rfc3RhcnQJPSA3MiwJCSAgICAuaGJ1cnN0X2xlbgkJPSAzNCwKIAkJLnZidXJzdF9zdGFydF9mMSA9IDksCQkgICAgLnZidXJzdF9lbmRfZjEJPSAyNDAsCiAJCS52YnVyc3Rfc3RhcnRfZjIgPSAxMCwJCSAgICAudmJ1cnN0X2VuZF9mMgk9IDI0MCwKQEAgLTg5Niw4ICs4OTYsNiBAQAogCX0sCiB9OwogCi0jZGVmaW5lIE5VTV9UVl9NT0RFUyBzaXplb2YodHZfbW9kZXMpIC8gc2l6ZW9mICh0dl9tb2Rlc1swXSkKLQogc3RhdGljIHZvaWQKIGludGVsX3R2X2RwbXMoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBpbnQgbW9kZSkKIHsKQEAgLTE0MjQsNyArMTQyMiw3IEBACiAJaW50IGosIGNvdW50ID0gMDsKIAl1NjQgdG1wOwogCi0JZm9yIChqID0gMDsgaiA8IHNpemVvZihpbnB1dF9yZXNfdGFibGUpIC8gc2l6ZW9mKGlucHV0X3Jlc190YWJsZVswXSk7CisJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoaW5wdXRfcmVzX3RhYmxlKTsKIAkgICAgIGorKykgewogCQlzdHJ1Y3QgaW5wdXRfcmVzICppbnB1dCA9ICZpbnB1dF9yZXNfdGFibGVbal07CiAJCXVuc2lnbmVkIGludCBoYWN0aXZlX3MgPSBpbnB1dC0+dzsKQEAgLTE1MTIsNyArMTUxMCw3IEBACiAJCXR2X3ByaXYtPm1hcmdpbltUVl9NQVJHSU5fQk9UVE9NXSA9IHZhbDsKIAkJY2hhbmdlZCA9IHRydWU7CiAJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBkZXYtPm1vZGVfY29uZmlnLnR2X21vZGVfcHJvcGVydHkpIHsKLQkJaWYgKHZhbCA+PSBOVU1fVFZfTU9ERVMpIHsKKwkJaWYgKHZhbCA+PSBBUlJBWV9TSVpFKHR2X21vZGVzKSkgewogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0xNjkzLDEzICsxNjkxLDEzIEBACiAJY29ubmVjdG9yLT5kb3VibGVzY2FuX2FsbG93ZWQgPSBmYWxzZTsKIAogCS8qIENyZWF0ZSBUViBwcm9wZXJ0aWVzIHRoZW4gYXR0YWNoIGN1cnJlbnQgdmFsdWVzICovCi0JdHZfZm9ybWF0X25hbWVzID0ga21hbGxvYyhzaXplb2YoY2hhciAqKSAqIE5VTV9UVl9NT0RFUywKKwl0dl9mb3JtYXRfbmFtZXMgPSBrbWFsbG9jKHNpemVvZihjaGFyICopICogQVJSQVlfU0laRSh0dl9tb2RlcyksCiAJCQkJICBHRlBfS0VSTkVMKTsKIAlpZiAoIXR2X2Zvcm1hdF9uYW1lcykKIAkJZ290byBvdXQ7Ci0JZm9yIChpID0gMDsgaSA8IE5VTV9UVl9NT0RFUzsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHR2X21vZGVzKTsgaSsrKQogCQl0dl9mb3JtYXRfbmFtZXNbaV0gPSB0dl9tb2Rlc1tpXS5uYW1lOwotCWRybV9tb2RlX2NyZWF0ZV90dl9wcm9wZXJ0aWVzKGRldiwgTlVNX1RWX01PREVTLCB0dl9mb3JtYXRfbmFtZXMpOworCWRybV9tb2RlX2NyZWF0ZV90dl9wcm9wZXJ0aWVzKGRldiwgQVJSQVlfU0laRSh0dl9tb2RlcyksIHR2X2Zvcm1hdF9uYW1lcyk7CiAKIAlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eShjb25uZWN0b3IsIGRldi0+bW9kZV9jb25maWcudHZfbW9kZV9wcm9wZXJ0eSwKIAkJCQkgICBpbml0aWFsX21vZGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kbWEuYwppbmRleCAzYzkxN2ZiLi4wODg2OGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kbWEuYwpAQCAtNTIsNyArNTIsNyBAQAogICogRW5naW5lIGNvbnRyb2wKICAqLwogCi1pbnQgbWdhX2RvX3dhaXRfZm9yX2lkbGUoZHJtX21nYV9wcml2YXRlX3QgKiBkZXZfcHJpdikKK2ludCBtZ2FfZG9fd2FpdF9mb3JfaWRsZShkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYpCiB7CiAJdTMyIHN0YXR1cyA9IDA7CiAJaW50IGk7CkBAIC03NCw3ICs3NCw3IEBACiAJcmV0dXJuIC1FQlVTWTsKIH0KIAotc3RhdGljIGludCBtZ2FfZG9fZG1hX3Jlc2V0KGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpCitzdGF0aWMgaW50IG1nYV9kb19kbWFfcmVzZXQoZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2KQogewogCWRybV9tZ2Ffc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwogCWRybV9tZ2FfcHJpbWFyeV9idWZmZXJfdCAqcHJpbWFyeSA9ICZkZXZfcHJpdi0+cHJpbTsKQEAgLTEwMiw3ICsxMDIsNyBAQAogICogUHJpbWFyeSBETUEgc3RyZWFtCiAgKi8KIAotdm9pZCBtZ2FfZG9fZG1hX2ZsdXNoKGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpCit2b2lkIG1nYV9kb19kbWFfZmx1c2goZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2KQogewogCWRybV9tZ2FfcHJpbWFyeV9idWZmZXJfdCAqcHJpbWFyeSA9ICZkZXZfcHJpdi0+cHJpbTsKIAl1MzIgaGVhZCwgdGFpbDsKQEAgLTE0MiwxMSArMTQyLDEwIEBACiAKIAloZWFkID0gTUdBX1JFQUQoTUdBX1BSSU1BRERSRVNTKTsKIAotCWlmIChoZWFkIDw9IHRhaWwpIHsKKwlpZiAoaGVhZCA8PSB0YWlsKQogCQlwcmltYXJ5LT5zcGFjZSA9IHByaW1hcnktPnNpemUgLSBwcmltYXJ5LT50YWlsOwotCX0gZWxzZSB7CisJZWxzZQogCQlwcmltYXJ5LT5zcGFjZSA9IGhlYWQgLSB0YWlsOwotCX0KIAogCURSTV9ERUJVRygiICAgaGVhZCA9IDB4JTA2bHhcbiIsICh1bnNpZ25lZCBsb25nKShoZWFkIC0gZGV2X3ByaXYtPnByaW1hcnktPm9mZnNldCkpOwogCURSTV9ERUJVRygiICAgdGFpbCA9IDB4JTA2bHhcbiIsICh1bnNpZ25lZCBsb25nKSh0YWlsIC0gZGV2X3ByaXYtPnByaW1hcnktPm9mZnNldCkpOwpAQCAtMTU4LDcgKzE1Nyw3IEBACiAJRFJNX0RFQlVHKCJkb25lLlxuIik7CiB9CiAKLXZvaWQgbWdhX2RvX2RtYV93cmFwX3N0YXJ0KGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpCit2b2lkIG1nYV9kb19kbWFfd3JhcF9zdGFydChkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYpCiB7CiAJZHJtX21nYV9wcmltYXJ5X2J1ZmZlcl90ICpwcmltYXJ5ID0gJmRldl9wcml2LT5wcmltOwogCXUzMiBoZWFkLCB0YWlsOwpAQCAtMTgxLDExICsxODAsMTAgQEAKIAogCWhlYWQgPSBNR0FfUkVBRChNR0FfUFJJTUFERFJFU1MpOwogCi0JaWYgKGhlYWQgPT0gZGV2X3ByaXYtPnByaW1hcnktPm9mZnNldCkgeworCWlmIChoZWFkID09IGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQpCiAJCXByaW1hcnktPnNwYWNlID0gcHJpbWFyeS0+c2l6ZTsKLQl9IGVsc2UgeworCWVsc2UKIAkJcHJpbWFyeS0+c3BhY2UgPSBoZWFkIC0gZGV2X3ByaXYtPnByaW1hcnktPm9mZnNldDsKLQl9CiAKIAlEUk1fREVCVUcoIiAgIGhlYWQgPSAweCUwNmx4XG4iLCAodW5zaWduZWQgbG9uZykoaGVhZCAtIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQpKTsKIAlEUk1fREVCVUcoIiAgIHRhaWwgPSAweCUwNnhcbiIsIHByaW1hcnktPnRhaWwpOwpAQCAtMTk5LDcgKzE5Nyw3IEBACiAJRFJNX0RFQlVHKCJkb25lLlxuIik7CiB9CiAKLXZvaWQgbWdhX2RvX2RtYV93cmFwX2VuZChkcm1fbWdhX3ByaXZhdGVfdCAqIGRldl9wcml2KQordm9pZCBtZ2FfZG9fZG1hX3dyYXBfZW5kKGRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdikKIHsKIAlkcm1fbWdhX3ByaW1hcnlfYnVmZmVyX3QgKnByaW1hcnkgPSAmZGV2X3ByaXYtPnByaW07CiAJZHJtX21nYV9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CkBAIC0yMjAsMTEgKzIxOCwxMSBAQAogICogRnJlZWxpc3QgbWFuYWdlbWVudAogICovCiAKLSNkZWZpbmUgTUdBX0JVRkZFUl9VU0VECQl+MAorI2RlZmluZSBNR0FfQlVGRkVSX1VTRUQJCSh+MCkKICNkZWZpbmUgTUdBX0JVRkZFUl9GUkVFCQkwCiAKICNpZiBNR0FfRlJFRUxJU1RfREVCVUcKLXN0YXRpYyB2b2lkIG1nYV9mcmVlbGlzdF9wcmludChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK3N0YXRpYyB2b2lkIG1nYV9mcmVlbGlzdF9wcmludChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX21nYV9mcmVlbGlzdF90ICplbnRyeTsKQEAgLTI0NSw3ICsyNDMsNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgbWdhX2ZyZWVsaXN0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpCitzdGF0aWMgaW50IG1nYV9mcmVlbGlzdF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdikKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZV9kbWEgKmRtYSA9IGRldi0+ZG1hOwogCXN0cnVjdCBkcm1fYnVmICpidWY7CkBAIC0yODgsNyArMjg2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgbWdhX2ZyZWVsaXN0X2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgdm9pZCBtZ2FfZnJlZWxpc3RfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX21nYV9mcmVlbGlzdF90ICplbnRyeTsKQEAgLTMwOCw3ICszMDYsNyBAQAogI2lmIDAKIC8qIEZJWE1FOiBTdGlsbCBuZWVkZWQ/CiAgKi8KLXN0YXRpYyB2b2lkIG1nYV9mcmVlbGlzdF9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK3N0YXRpYyB2b2lkIG1nYV9mcmVlbGlzdF9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fZGV2aWNlX2RtYSAqZG1hID0gZGV2LT5kbWE7CiAJc3RydWN0IGRybV9idWYgKmJ1ZjsKQEAgLTM1Niw3ICszNTQsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi1pbnQgbWdhX2ZyZWVsaXN0X3B1dChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgc3RydWN0IGRybV9idWYgKiBidWYpCitpbnQgbWdhX2ZyZWVsaXN0X3B1dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2J1ZiAqYnVmKQogewogCWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX21nYV9idWZfcHJpdl90ICpidWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7CkBAIC0zOTEsNyArMzg5LDcgQEAKICAqIERNQSBpbml0aWFsaXphdGlvbiwgY2xlYW51cAogICovCiAKLWludCBtZ2FfZHJpdmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCitpbnQgbWdhX2RyaXZlcl9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2OwogCWludCByZXQ7CkBAIC00MDUsOCArNDAzLDggQEAKIAlkZXZfcHJpdi0+dXNlY190aW1lb3V0ID0gTUdBX0RFRkFVTFRfVVNFQ19USU1FT1VUOwogCWRldl9wcml2LT5jaGlwc2V0ID0gZmxhZ3M7CiAKLQlkZXZfcHJpdi0+bW1pb19iYXNlID0gZHJtX2dldF9yZXNvdXJjZV9zdGFydChkZXYsIDEpOwotCWRldl9wcml2LT5tbWlvX3NpemUgPSBkcm1fZ2V0X3Jlc291cmNlX2xlbihkZXYsIDEpOworCWRldl9wcml2LT5tbWlvX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCAxKTsKKwlkZXZfcHJpdi0+bW1pb19zaXplID0gcGNpX3Jlc291cmNlX2xlbihkZXYtPnBkZXYsIDEpOwogCiAJZGV2LT5jb3VudGVycyArPSAzOwogCWRldi0+dHlwZXNbNl0gPSBfRFJNX1NUQVRfSVJROwpAQCAtNDM5LDggKzQzNyw4IEBACiAgKgogICogXHNhIG1nYV9kb19kbWFfYm9vdHN0cmFwLCBtZ2FfZG9fcGNpX2RtYV9ib290c3RyYXAKICAqLwotc3RhdGljIGludCBtZ2FfZG9fYWdwX2RtYV9ib290c3RyYXAoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsCi0JCQkJICAgIGRybV9tZ2FfZG1hX2Jvb3RzdHJhcF90ICogZG1hX2JzKQorc3RhdGljIGludCBtZ2FfZG9fYWdwX2RtYV9ib290c3RyYXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgZHJtX21nYV9kbWFfYm9vdHN0cmFwX3QgKmRtYV9icykKIHsKIAlkcm1fbWdhX3ByaXZhdGVfdCAqY29uc3QgZGV2X3ByaXYgPQogCSAgICAoZHJtX21nYV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTQ4MSwxMSArNDc5LDEwIEBACiAJICovCiAKIAlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gTUdBX0NBUkRfVFlQRV9HMjAwKSB7Ci0JCWlmIChtb2RlLm1vZGUgJiAweDAyKSB7CisJCWlmIChtb2RlLm1vZGUgJiAweDAyKQogCQkJTUdBX1dSSVRFKE1HQV9BR1BfUExMLCBNR0FfQUdQMlhQTExfRU5BQkxFKTsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJTUdBX1dSSVRFKE1HQV9BR1BfUExMLCBNR0FfQUdQMlhQTExfRElTQUJMRSk7Ci0JCX0KIAl9CiAKIAkvKiBBbGxvY2F0ZSBhbmQgYmluZCBBR1AgbWVtb3J5LiAqLwpAQCAtNTkzLDggKzU5MCw4IEBACiAJcmV0dXJuIDA7CiB9CiAjZWxzZQotc3RhdGljIGludCBtZ2FfZG9fYWdwX2RtYV9ib290c3RyYXAoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsCi0JCQkJICAgIGRybV9tZ2FfZG1hX2Jvb3RzdHJhcF90ICogZG1hX2JzKQorc3RhdGljIGludCBtZ2FfZG9fYWdwX2RtYV9ib290c3RyYXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgZHJtX21nYV9kbWFfYm9vdHN0cmFwX3QgKmRtYV9icykKIHsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTYxNCw4ICs2MTEsOCBAQAogICoKICAqIFxzYSBtZ2FfZG9fZG1hX2Jvb3RzdHJhcCwgbWdhX2RvX2FncF9kbWFfYm9vdHN0cmFwCiAgKi8KLXN0YXRpYyBpbnQgbWdhX2RvX3BjaV9kbWFfYm9vdHN0cmFwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LAotCQkJCSAgICBkcm1fbWdhX2RtYV9ib290c3RyYXBfdCAqIGRtYV9icykKK3N0YXRpYyBpbnQgbWdhX2RvX3BjaV9kbWFfYm9vdHN0cmFwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgIGRybV9tZ2FfZG1hX2Jvb3RzdHJhcF90ICpkbWFfYnMpCiB7CiAJZHJtX21nYV9wcml2YXRlX3QgKmNvbnN0IGRldl9wcml2ID0KIAkgICAgKGRybV9tZ2FfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CkBAIC02NzgsOSArNjc1LDggQEAKIAkJcmVxLnNpemUgPSBkbWFfYnMtPnNlY29uZGFyeV9iaW5fc2l6ZTsKIAogCQllcnIgPSBkcm1fYWRkYnVmc19wY2koZGV2LCAmcmVxKTsKLQkJaWYgKCFlcnIpIHsKKwkJaWYgKCFlcnIpCiAJCQlicmVhazsKLQkJfQogCX0KIAogCWlmIChiaW5fY291bnQgPT0gMCkgewpAQCAtNzA0LDggKzcwMCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWdhX2RvX2RtYV9ib290c3RyYXAoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsCi0JCQkJZHJtX21nYV9kbWFfYm9vdHN0cmFwX3QgKiBkbWFfYnMpCitzdGF0aWMgaW50IG1nYV9kb19kbWFfYm9vdHN0cmFwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJZHJtX21nYV9kbWFfYm9vdHN0cmFwX3QgKmRtYV9icykKIHsKIAljb25zdCBpbnQgaXNfYWdwID0gKGRtYV9icy0+YWdwX21vZGUgIT0gMCkgJiYgZHJtX2RldmljZV9pc19hZ3AoZGV2KTsKIAlpbnQgZXJyOwpAQCAtNzM3LDE3ICs3MzMsMTUgQEAKIAkgKiBjYXJ2ZSBvZmYgcG9ydGlvbnMgb2YgaXQgZm9yIGludGVybmFsIHVzZXMuICBUaGUgcmVtYWluaW5nIG1lbW9yeQogCSAqIGlzIHJldHVybmVkIHRvIHVzZXItbW9kZSB0byBiZSB1c2VkIGZvciBBR1AgdGV4dHVyZXMuCiAJICovCi0JaWYgKGlzX2FncCkgeworCWlmIChpc19hZ3ApCiAJCWVyciA9IG1nYV9kb19hZ3BfZG1hX2Jvb3RzdHJhcChkZXYsIGRtYV9icyk7Ci0JfQogCiAJLyogSWYgd2UgYXR0ZW1wdGVkIHRvIGluaXRpYWxpemUgdGhlIGNhcmQgZm9yIEFHUCBETUEgYnV0IGZhaWxlZCwKIAkgKiBjbGVhbi11cCBhbnkgbWVzcyB0aGF0IG1heSBoYXZlIGJlZW4gY3JlYXRlZC4KIAkgKi8KIAotCWlmIChlcnIpIHsKKwlpZiAoZXJyKQogCQltZ2FfZG9fY2xlYW51cF9kbWEoZGV2LCBNSU5JTUFMX0NMRUFOVVApOwotCX0KIAogCS8qIE5vdCBvbmx5IGRvIHdlIHdhbnQgdG8gdHJ5IGFuZCBpbml0aWFsaXplZCBQQ0kgY2FyZHMgZm9yIFBDSSBETUEsCiAJICogYnV0IHdlIGFsc28gdHJ5IHRvIGluaXRpYWxpemVkIEFHUCBjYXJkcyB0aGF0IGNvdWxkIG5vdCBiZQpAQCAtNzU3LDkgKzc1MSw4IEBACiAJICogQUdQIG1lbW9yeSwgZXRjLgogCSAqLwogCi0JaWYgKCFpc19hZ3AgfHwgZXJyKSB7CisJaWYgKCFpc19hZ3AgfHwgZXJyKQogCQllcnIgPSBtZ2FfZG9fcGNpX2RtYV9ib290c3RyYXAoZGV2LCBkbWFfYnMpOwotCX0KIAogCXJldHVybiBlcnI7CiB9CkBAIC03OTIsNyArNzg1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1nYV9kb19pbml0X2RtYShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgZHJtX21nYV9pbml0X3QgKiBpbml0KQorc3RhdGljIGludCBtZ2FfZG9faW5pdF9kbWEoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZHJtX21nYV9pbml0X3QgKmluaXQpCiB7CiAJZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2OwogCWludCByZXQ7CkBAIC04MDAsMTEgKzc5MywxMCBAQAogCiAJZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCi0JaWYgKGluaXQtPnNncmFtKSB7CisJaWYgKGluaXQtPnNncmFtKQogCQlkZXZfcHJpdi0+Y2xlYXJfY21kID0gTUdBX0RXR0NUTF9DTEVBUiB8IE1HQV9BVFlQRV9CTEs7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCWRldl9wcml2LT5jbGVhcl9jbWQgPSBNR0FfRFdHQ1RMX0NMRUFSIHwgTUdBX0FUWVBFX1JTVFI7Ci0JfQogCWRldl9wcml2LT5tYWNjZXNzID0gaW5pdC0+bWFjY2VzczsKIAogCWRldl9wcml2LT5mYl9jcHAgPSBpbml0LT5mYl9jcHA7CkBAIC05NzUsOSArOTY3LDggQEAKIAkJCQlkZXZfcHJpdi0+YWdwX2hhbmRsZSA9IDA7CiAJCQl9CiAKLQkJCWlmICgoZGV2LT5hZ3AgIT0gTlVMTCkgJiYgZGV2LT5hZ3AtPmFjcXVpcmVkKSB7CisJCQlpZiAoKGRldi0+YWdwICE9IE5VTEwpICYmIGRldi0+YWdwLT5hY3F1aXJlZCkKIAkJCQllcnIgPSBkcm1fYWdwX3JlbGVhc2UoZGV2KTsKLQkJCX0KICNlbmRpZgogCQl9CiAKQEAgLTk5OCw5ICs5ODksOCBAQAogCQltZW1zZXQoZGV2X3ByaXYtPndhcnBfcGlwZV9waHlzLCAwLAogCQkgICAgICAgc2l6ZW9mKGRldl9wcml2LT53YXJwX3BpcGVfcGh5cykpOwogCi0JCWlmIChkZXZfcHJpdi0+aGVhZCAhPSBOVUxMKSB7CisJCWlmIChkZXZfcHJpdi0+aGVhZCAhPSBOVUxMKQogCQkJbWdhX2ZyZWVsaXN0X2NsZWFudXAoZGV2KTsKLQkJfQogCX0KIAogCXJldHVybiBlcnI7CkBAIC0xMDE3LDkgKzEwMDcsOCBAQAogCXN3aXRjaCAoaW5pdC0+ZnVuYykgewogCWNhc2UgTUdBX0lOSVRfRE1BOgogCQllcnIgPSBtZ2FfZG9faW5pdF9kbWEoZGV2LCBpbml0KTsKLQkJaWYgKGVycikgeworCQlpZiAoZXJyKQogCQkJKHZvaWQpbWdhX2RvX2NsZWFudXBfZG1hKGRldiwgRlVMTF9DTEVBTlVQKTsKLQkJfQogCQlyZXR1cm4gZXJyOwogCWNhc2UgTUdBX0NMRUFOVVBfRE1BOgogCQlyZXR1cm4gbWdhX2RvX2NsZWFudXBfZG1hKGRldiwgRlVMTF9DTEVBTlVQKTsKQEAgLTEwNDcsOSArMTAzNiw4IEBACiAKIAlXUkFQX1dBSVRfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOwogCi0JaWYgKGxvY2stPmZsYWdzICYgKF9EUk1fTE9DS19GTFVTSCB8IF9EUk1fTE9DS19GTFVTSF9BTEwpKSB7CisJaWYgKGxvY2stPmZsYWdzICYgKF9EUk1fTE9DS19GTFVTSCB8IF9EUk1fTE9DS19GTFVTSF9BTEwpKQogCQltZ2FfZG9fZG1hX2ZsdXNoKGRldl9wcml2KTsKLQl9CiAKIAlpZiAobG9jay0+ZmxhZ3MgJiBfRFJNX0xPQ0tfUVVJRVNDRU5UKSB7CiAjaWYgTUdBX0RNQV9ERUJVRwpAQCAtMTA3OSw4ICsxMDY3LDggQEAKICAqIERNQSBidWZmZXIgbWFuYWdlbWVudAogICovCiAKLXN0YXRpYyBpbnQgbWdhX2RtYV9nZXRfYnVmZmVycyhzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKLQkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwgc3RydWN0IGRybV9kbWEgKiBkKQorc3RhdGljIGludCBtZ2FfZG1hX2dldF9idWZmZXJzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsIHN0cnVjdCBkcm1fZG1hICpkKQogewogCXN0cnVjdCBkcm1fYnVmICpidWY7CiAJaW50IGk7CkBAIC0xMTM0LDkgKzExMjIsOCBAQAogCiAJZC0+Z3JhbnRlZF9jb3VudCA9IDA7CiAKLQlpZiAoZC0+cmVxdWVzdF9jb3VudCkgeworCWlmIChkLT5yZXF1ZXN0X2NvdW50KQogCQlyZXQgPSBtZ2FfZG1hX2dldF9idWZmZXJzKGRldiwgZmlsZV9wcml2LCBkKTsKLQl9CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTE0NCw3ICsxMTMxLDcgQEAKIC8qKgogICogQ2FsbGVkIGp1c3QgYmVmb3JlIHRoZSBtb2R1bGUgaXMgdW5sb2FkZWQuCiAgKi8KLWludCBtZ2FfZHJpdmVyX3VubG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK2ludCBtZ2FfZHJpdmVyX3VubG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWtmcmVlKGRldi0+ZGV2X3ByaXZhdGUpOwogCWRldi0+ZGV2X3ByaXZhdGUgPSBOVUxMOwpAQCAtMTE1NSwxMiArMTE0MiwxMiBAQAogLyoqCiAgKiBDYWxsZWQgd2hlbiB0aGUgbGFzdCBvcGVuZXIgb2YgdGhlIGRldmljZSBpcyBjbG9zZWQuCiAgKi8KLXZvaWQgbWdhX2RyaXZlcl9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCit2b2lkIG1nYV9kcml2ZXJfbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJbWdhX2RvX2NsZWFudXBfZG1hKGRldiwgRlVMTF9DTEVBTlVQKTsKIH0KIAotaW50IG1nYV9kcml2ZXJfZG1hX3F1aWVzY2VudChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK2ludCBtZ2FfZHJpdmVyX2RtYV9xdWllc2NlbnQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXJldHVybiBtZ2FfZG9fd2FpdF9mb3JfaWRsZShkZXZfcHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5jCmluZGV4IGRkZmUxNjEuLjI2ZDBkOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5jCkBAIC0zNiw3ICszNiw3IEBACiAKICNpbmNsdWRlICJkcm1fcGNpaWRzLmgiCiAKLXN0YXRpYyBpbnQgbWdhX2RyaXZlcl9kZXZpY2VfaXNfYWdwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgbWdhX2RyaXZlcl9kZXZpY2VfaXNfYWdwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpaWRsaXN0W10gPSB7CiAJbWdhX1BDSV9JRFMKQEAgLTExOSw3ICsxMTksNyBAQAogICogXHJldHVybnMKICAqIElmIHRoZSBkZXZpY2UgaXMgYSBQQ0kgRzQ1MCwgemVybyBpcyByZXR1cm5lZC4gIE90aGVyd2lzZSAyIGlzIHJldHVybmVkLgogICovCi1zdGF0aWMgaW50IG1nYV9kcml2ZXJfZGV2aWNlX2lzX2FncChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK3N0YXRpYyBpbnQgbWdhX2RyaXZlcl9kZXZpY2VfaXNfYWdwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJY29uc3Qgc3RydWN0IHBjaV9kZXYgKmNvbnN0IHBkZXYgPSBkZXYtPnBkZXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmgKaW5kZXggYmU2YzZiOS4uMTA4NGZhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmgKQEAgLTE2NCw1OSArMTY0LDU5IEBACiBleHRlcm4gaW50IG1nYV9kbWFfYnVmZmVycyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIGludCBtZ2FfZHJpdmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncyk7Ci1leHRlcm4gaW50IG1nYV9kcml2ZXJfdW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKLWV4dGVybiB2b2lkIG1nYV9kcml2ZXJfbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKLWV4dGVybiBpbnQgbWdhX2RyaXZlcl9kbWFfcXVpZXNjZW50KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKK2V4dGVybiBpbnQgbWdhX2RyaXZlcl91bmxvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBtZ2FfZHJpdmVyX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgbWdhX2RyaXZlcl9kbWFfcXVpZXNjZW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCi1leHRlcm4gaW50IG1nYV9kb193YWl0X2Zvcl9pZGxlKGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpOworZXh0ZXJuIGludCBtZ2FfZG9fd2FpdF9mb3JfaWRsZShkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYpOwogCi1leHRlcm4gdm9pZCBtZ2FfZG9fZG1hX2ZsdXNoKGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpOwotZXh0ZXJuIHZvaWQgbWdhX2RvX2RtYV93cmFwX3N0YXJ0KGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpOwotZXh0ZXJuIHZvaWQgbWdhX2RvX2RtYV93cmFwX2VuZChkcm1fbWdhX3ByaXZhdGVfdCAqIGRldl9wcml2KTsKK2V4dGVybiB2b2lkIG1nYV9kb19kbWFfZmx1c2goZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2KTsKK2V4dGVybiB2b2lkIG1nYV9kb19kbWFfd3JhcF9zdGFydChkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYpOworZXh0ZXJuIHZvaWQgbWdhX2RvX2RtYV93cmFwX2VuZChkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYpOwogCi1leHRlcm4gaW50IG1nYV9mcmVlbGlzdF9wdXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBkcm1fYnVmICogYnVmKTsKK2V4dGVybiBpbnQgbWdhX2ZyZWVsaXN0X3B1dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2J1ZiAqYnVmKTsKIAogCQkJCS8qIG1nYV93YXJwLmMgKi8KLWV4dGVybiBpbnQgbWdhX3dhcnBfaW5zdGFsbF9taWNyb2NvZGUoZHJtX21nYV9wcml2YXRlX3QgKiBkZXZfcHJpdik7Ci1leHRlcm4gaW50IG1nYV93YXJwX2luaXQoZHJtX21nYV9wcml2YXRlX3QgKiBkZXZfcHJpdik7CitleHRlcm4gaW50IG1nYV93YXJwX2luc3RhbGxfbWljcm9jb2RlKGRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdik7CitleHRlcm4gaW50IG1nYV93YXJwX2luaXQoZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2KTsKIAogCQkJCS8qIG1nYV9pcnEuYyAqLwogZXh0ZXJuIGludCBtZ2FfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CiBleHRlcm4gdm9pZCBtZ2FfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIHUzMiBtZ2FfZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKLWV4dGVybiBpbnQgbWdhX2RyaXZlcl9mZW5jZV93YWl0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKLWV4dGVybiBpbnQgbWdhX2RyaXZlcl92Ymxhbmtfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSk7CitleHRlcm4gaW50IG1nYV9kcml2ZXJfZmVuY2Vfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKK2V4dGVybiBpbnQgbWdhX2RyaXZlcl92Ymxhbmtfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKIGV4dGVybiBpcnFyZXR1cm5fdCBtZ2FfZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUyk7Ci1leHRlcm4gdm9pZCBtZ2FfZHJpdmVyX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKK2V4dGVybiB2b2lkIG1nYV9kcml2ZXJfaXJxX3ByZWluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IG1nYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwotZXh0ZXJuIHZvaWQgbWdhX2RyaXZlcl9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKK2V4dGVybiB2b2lkIG1nYV9kcml2ZXJfaXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiBsb25nIG1nYV9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKIAogI2RlZmluZSBtZ2FfZmx1c2hfd3JpdGVfY29tYmluZSgpCURSTV9XUklURU1FTU9SWUJBUlJJRVIoKQogCiAjaWYgZGVmaW5lZChfX2xpbnV4X18pICYmIGRlZmluZWQoX19hbHBoYV9fKQotI2RlZmluZSBNR0FfQkFTRSggcmVnICkJCSgodW5zaWduZWQgbG9uZykoZGV2X3ByaXYtPm1taW8tPmhhbmRsZSkpCi0jZGVmaW5lIE1HQV9BRERSKCByZWcgKQkJKE1HQV9CQVNFKHJlZykgKyByZWcpCisjZGVmaW5lIE1HQV9CQVNFKHJlZykJCSgodW5zaWduZWQgbG9uZykoZGV2X3ByaXYtPm1taW8tPmhhbmRsZSkpCisjZGVmaW5lIE1HQV9BRERSKHJlZykJCShNR0FfQkFTRShyZWcpICsgcmVnKQogCi0jZGVmaW5lIE1HQV9ERVJFRiggcmVnICkJKih2b2xhdGlsZSB1MzIgKilNR0FfQUREUiggcmVnICkKLSNkZWZpbmUgTUdBX0RFUkVGOCggcmVnICkJKih2b2xhdGlsZSB1OCAqKU1HQV9BRERSKCByZWcgKQorI2RlZmluZSBNR0FfREVSRUYocmVnKQkJKCoodm9sYXRpbGUgdTMyICopTUdBX0FERFIocmVnKSkKKyNkZWZpbmUgTUdBX0RFUkVGOChyZWcpCQkoKih2b2xhdGlsZSB1OCAqKU1HQV9BRERSKHJlZykpCiAKLSNkZWZpbmUgTUdBX1JFQUQoIHJlZyApCQkoX01HQV9SRUFEKCh1MzIgKilNR0FfQUREUihyZWcpKSkKLSNkZWZpbmUgTUdBX1JFQUQ4KCByZWcgKQkoX01HQV9SRUFEKCh1OCAqKU1HQV9BRERSKHJlZykpKQotI2RlZmluZSBNR0FfV1JJVEUoIHJlZywgdmFsICkJZG8geyBEUk1fV1JJVEVNRU1PUllCQVJSSUVSKCk7IE1HQV9ERVJFRiggcmVnICkgPSB2YWw7IH0gd2hpbGUgKDApCi0jZGVmaW5lIE1HQV9XUklURTgoIHJlZywgdmFsICkgIGRvIHsgRFJNX1dSSVRFTUVNT1JZQkFSUklFUigpOyBNR0FfREVSRUY4KCByZWcgKSA9IHZhbDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgTUdBX1JFQUQocmVnKQkJKF9NR0FfUkVBRCgodTMyICopTUdBX0FERFIocmVnKSkpCisjZGVmaW5lIE1HQV9SRUFEOChyZWcpCQkoX01HQV9SRUFEKCh1OCAqKU1HQV9BRERSKHJlZykpKQorI2RlZmluZSBNR0FfV1JJVEUocmVnLCB2YWwpCWRvIHsgRFJNX1dSSVRFTUVNT1JZQkFSUklFUigpOyBNR0FfREVSRUYocmVnKSA9IHZhbDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgTUdBX1dSSVRFOChyZWcsIHZhbCkJZG8geyBEUk1fV1JJVEVNRU1PUllCQVJSSUVSKCk7IE1HQV9ERVJFRjgocmVnKSA9IHZhbDsgfSB3aGlsZSAoMCkKIAotc3RhdGljIGlubGluZSB1MzIgX01HQV9SRUFEKHUzMiAqIGFkZHIpCitzdGF0aWMgaW5saW5lIHUzMiBfTUdBX1JFQUQodTMyICphZGRyKQogewogCURSTV9NRU1PUllCQVJSSUVSKCk7CiAJcmV0dXJuICoodm9sYXRpbGUgdTMyICopYWRkcjsKIH0KICNlbHNlCi0jZGVmaW5lIE1HQV9SRUFEOCggcmVnICkJRFJNX1JFQUQ4KGRldl9wcml2LT5tbWlvLCAocmVnKSkKLSNkZWZpbmUgTUdBX1JFQUQoIHJlZyApCQlEUk1fUkVBRDMyKGRldl9wcml2LT5tbWlvLCAocmVnKSkKLSNkZWZpbmUgTUdBX1dSSVRFOCggcmVnLCB2YWwgKSAgRFJNX1dSSVRFOChkZXZfcHJpdi0+bW1pbywgKHJlZyksICh2YWwpKQotI2RlZmluZSBNR0FfV1JJVEUoIHJlZywgdmFsICkJRFJNX1dSSVRFMzIoZGV2X3ByaXYtPm1taW8sIChyZWcpLCAodmFsKSkKKyNkZWZpbmUgTUdBX1JFQUQ4KHJlZykJCURSTV9SRUFEOChkZXZfcHJpdi0+bW1pbywgKHJlZykpCisjZGVmaW5lIE1HQV9SRUFEKHJlZykJCURSTV9SRUFEMzIoZGV2X3ByaXYtPm1taW8sIChyZWcpKQorI2RlZmluZSBNR0FfV1JJVEU4KHJlZywgdmFsKQlEUk1fV1JJVEU4KGRldl9wcml2LT5tbWlvLCAocmVnKSwgKHZhbCkpCisjZGVmaW5lIE1HQV9XUklURShyZWcsIHZhbCkJRFJNX1dSSVRFMzIoZGV2X3ByaXYtPm1taW8sIChyZWcpLCAodmFsKSkKICNlbmRpZgogCiAjZGVmaW5lIERXR1JFRzAJCTB4MWMwMApAQCAtMjMzLDQwICsyMzMsMzkgQEAKICAqIEhlbHBlciBtYWNyb3NzLi4uCiAgKi8KIAotI2RlZmluZSBNR0FfRU1JVF9TVEFURSggZGV2X3ByaXYsIGRpcnR5ICkJCQkJXAorI2RlZmluZSBNR0FfRU1JVF9TVEFURShkZXZfcHJpdiwgZGlydHkpCQkJCQlcCiBkbyB7CQkJCQkJCQkJXAotCWlmICggKGRpcnR5KSAmIH5NR0FfVVBMT0FEX0NMSVBSRUNUUyApIHsJCQlcCi0JCWlmICggZGV2X3ByaXYtPmNoaXBzZXQgPj0gTUdBX0NBUkRfVFlQRV9HNDAwICkgewlcCi0JCQltZ2FfZzQwMF9lbWl0X3N0YXRlKCBkZXZfcHJpdiApOwkJXAotCQl9IGVsc2UgewkJCQkJCVwKLQkJCW1nYV9nMjAwX2VtaXRfc3RhdGUoIGRldl9wcml2ICk7CQlcCisJaWYgKChkaXJ0eSkgJiB+TUdBX1VQTE9BRF9DTElQUkVDVFMpIHsJCQkJXAorCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gTUdBX0NBUkRfVFlQRV9HNDAwKQkJXAorCQkJbWdhX2c0MDBfZW1pdF9zdGF0ZShkZXZfcHJpdik7CQkJXAorCQllbHNlCQkJCQkJCVwKKwkJCW1nYV9nMjAwX2VtaXRfc3RhdGUoZGV2X3ByaXYpOwkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIFdSQVBfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdikJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKHRlc3RfYml0KDAsICZkZXZfcHJpdi0+cHJpbS53cmFwcGVkKSkgewkJCVwKKwkJaWYgKG1nYV9pc19pZGxlKGRldl9wcml2KSkgewkJCQlcCisJCQltZ2FfZG9fZG1hX3dyYXBfZW5kKGRldl9wcml2KTsJCQlcCisJCX0gZWxzZSBpZiAoZGV2X3ByaXYtPnByaW0uc3BhY2UgPAkJCVwKKwkJCSAgIGRldl9wcml2LT5wcmltLmhpZ2hfbWFyaykgewkJCVwKKwkJCWlmIChNR0FfRE1BX0RFQlVHKQkJCQlcCisJCQkJRFJNX0lORk8oIndyYXAuLi5cbiIpOwkJCVwKKwkJCXJldHVybiAtRUJVU1k7CQkJCQlcCiAJCX0JCQkJCQkJXAogCX0JCQkJCQkJCVwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgV1JBUF9URVNUX1dJVEhfUkVUVVJOKCBkZXZfcHJpdiApCQkJCVwKKyNkZWZpbmUgV1JBUF9XQUlUX1dJVEhfUkVUVVJOKGRldl9wcml2KQkJCQkJXAogZG8gewkJCQkJCQkJCVwKLQlpZiAoIHRlc3RfYml0KCAwLCAmZGV2X3ByaXYtPnByaW0ud3JhcHBlZCApICkgewkJCVwKLQkJaWYgKCBtZ2FfaXNfaWRsZSggZGV2X3ByaXYgKSApIHsJCQlcCi0JCQltZ2FfZG9fZG1hX3dyYXBfZW5kKCBkZXZfcHJpdiApOwkJXAotCQl9IGVsc2UgaWYgKCBkZXZfcHJpdi0+cHJpbS5zcGFjZSA8CQkJXAotCQkJICAgIGRldl9wcml2LT5wcmltLmhpZ2hfbWFyayApIHsJCVwKLQkJCWlmICggTUdBX0RNQV9ERUJVRyApCQkJCVwKLQkJCQlEUk1fSU5GTyggIndyYXAuLi5cbiIpOwkJXAotCQkJcmV0dXJuIC1FQlVTWTsJCQlcCisJaWYgKHRlc3RfYml0KDAsICZkZXZfcHJpdi0+cHJpbS53cmFwcGVkKSkgewkJCVwKKwkJaWYgKG1nYV9kb193YWl0X2Zvcl9pZGxlKGRldl9wcml2KSA8IDApIHsJCVwKKwkJCWlmIChNR0FfRE1BX0RFQlVHKQkJCQlcCisJCQkJRFJNX0lORk8oIndyYXAuLi5cbiIpOwkJCVwKKwkJCXJldHVybiAtRUJVU1k7CQkJCQlcCiAJCX0JCQkJCQkJXAotCX0JCQkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgV1JBUF9XQUlUX1dJVEhfUkVUVVJOKCBkZXZfcHJpdiApCQkJCVwKLWRvIHsJCQkJCQkJCQlcCi0JaWYgKCB0ZXN0X2JpdCggMCwgJmRldl9wcml2LT5wcmltLndyYXBwZWQgKSApIHsJCQlcCi0JCWlmICggbWdhX2RvX3dhaXRfZm9yX2lkbGUoIGRldl9wcml2ICkgPCAwICkgewkJXAotCQkJaWYgKCBNR0FfRE1BX0RFQlVHICkJCQkJXAotCQkJCURSTV9JTkZPKCAid3JhcC4uLlxuIik7CQlcCi0JCQlyZXR1cm4gLUVCVVNZOwkJCVwKLQkJfQkJCQkJCQlcCi0JCW1nYV9kb19kbWFfd3JhcF9lbmQoIGRldl9wcml2ICk7CQkJXAorCQltZ2FfZG9fZG1hX3dyYXBfZW5kKGRldl9wcml2KTsJCQkJXAogCX0JCQkJCQkJCVwKIH0gd2hpbGUgKDApCiAKQEAgLTI4MCwxMiArMjc5LDEyIEBACiAKICNkZWZpbmUgRE1BX0JMT0NLX1NJWkUJKDUgKiBzaXplb2YodTMyKSkKIAotI2RlZmluZSBCRUdJTl9ETUEoIG4gKQkJCQkJCQlcCisjZGVmaW5lIEJFR0lOX0RNQShuKQkJCQkJCQlcCiBkbyB7CQkJCQkJCQkJXAotCWlmICggTUdBX1ZFUkJPU0UgKSB7CQkJCQkJXAotCQlEUk1fSU5GTyggIkJFR0lOX0RNQSggJWQgKVxuIiwgKG4pICk7CQlcCi0JCURSTV9JTkZPKCAiICAgc3BhY2U9MHgleCByZXE9MHglWnhcbiIsCQkJXAotCQkJICBkZXZfcHJpdi0+cHJpbS5zcGFjZSwgKG4pICogRE1BX0JMT0NLX1NJWkUgKTsJXAorCWlmIChNR0FfVkVSQk9TRSkgewkJCQkJCVwKKwkJRFJNX0lORk8oIkJFR0lOX0RNQSglZClcbiIsIChuKSk7CQkJXAorCQlEUk1fSU5GTygiICAgc3BhY2U9MHgleCByZXE9MHglWnhcbiIsCQkJXAorCQkJIGRldl9wcml2LT5wcmltLnNwYWNlLCAobikgKiBETUFfQkxPQ0tfU0laRSk7CVwKIAl9CQkJCQkJCQlcCiAJcHJpbSA9IGRldl9wcml2LT5wcmltLnN0YXJ0OwkJCQkJXAogCXdyaXRlID0gZGV2X3ByaXYtPnByaW0udGFpbDsJCQkJCVwKQEAgLTI5Myw5ICsyOTIsOSBAQAogCiAjZGVmaW5lIEJFR0lOX0RNQV9XUkFQKCkJCQkJCQlcCiBkbyB7CQkJCQkJCQkJXAotCWlmICggTUdBX1ZFUkJPU0UgKSB7CQkJCQkJXAotCQlEUk1fSU5GTyggIkJFR0lOX0RNQSgpXG4iICk7CQkJCVwKLQkJRFJNX0lORk8oICIgICBzcGFjZT0weCV4XG4iLCBkZXZfcHJpdi0+cHJpbS5zcGFjZSApOwlcCisJaWYgKE1HQV9WRVJCT1NFKSB7CQkJCQkJXAorCQlEUk1fSU5GTygiQkVHSU5fRE1BKClcbiIpOwkJCQlcCisJCURSTV9JTkZPKCIgICBzcGFjZT0weCV4XG4iLCBkZXZfcHJpdi0+cHJpbS5zcGFjZSk7CVwKIAl9CQkJCQkJCQlcCiAJcHJpbSA9IGRldl9wcml2LT5wcmltLnN0YXJ0OwkJCQkJXAogCXdyaXRlID0gZGV2X3ByaXYtPnByaW0udGFpbDsJCQkJCVwKQEAgLTMwNCw3MiArMzAzLDY4IEBACiAjZGVmaW5lIEFEVkFOQ0VfRE1BKCkJCQkJCQkJXAogZG8gewkJCQkJCQkJCVwKIAlkZXZfcHJpdi0+cHJpbS50YWlsID0gd3JpdGU7CQkJCQlcCi0JaWYgKCBNR0FfVkVSQk9TRSApIHsJCQkJCQlcCi0JCURSTV9JTkZPKCAiQURWQU5DRV9ETUEoKSB0YWlsPTB4JTA1eCBzcD0weCV4XG4iLAlcCi0JCQkgIHdyaXRlLCBkZXZfcHJpdi0+cHJpbS5zcGFjZSApOwkJXAotCX0JCQkJCQkJCVwKKwlpZiAoTUdBX1ZFUkJPU0UpCQkJCQkJXAorCQlEUk1fSU5GTygiQURWQU5DRV9ETUEoKSB0YWlsPTB4JTA1eCBzcD0weCV4XG4iLAkJXAorCQkJIHdyaXRlLCBkZXZfcHJpdi0+cHJpbS5zcGFjZSk7CQkJXAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBGTFVTSF9ETUEoKQkJCQkJCQlcCiBkbyB7CQkJCQkJCQkJXAotCWlmICggMCApIHsJCQkJCQkJXAotCQlEUk1fSU5GTyggIlxuIiApOwkJCQkJXAotCQlEUk1fSU5GTyggIiAgIHRhaWw9MHglMDZ4IGhlYWQ9MHglMDZseFxuIiwJCVwKLQkJCSAgZGV2X3ByaXYtPnByaW0udGFpbCwJCQkJXAotCQkJICAodW5zaWduZWQgbG9uZykoTUdBX1JFQUQoTUdBX1BSSU1BRERSRVNTKSAtCVwKLQkJCQkJICBkZXZfcHJpdi0+cHJpbWFyeS0+b2Zmc2V0KSk7CVwKKwlpZiAoMCkgewkJCQkJCQlcCisJCURSTV9JTkZPKCJcbiIpOwkJCQkJCVwKKwkJRFJNX0lORk8oIiAgIHRhaWw9MHglMDZ4IGhlYWQ9MHglMDZseFxuIiwJCVwKKwkJCSBkZXZfcHJpdi0+cHJpbS50YWlsLAkJCQlcCisJCQkgKHVuc2lnbmVkIGxvbmcpKE1HQV9SRUFEKE1HQV9QUklNQUREUkVTUykgLQlcCisJCQkJCSBkZXZfcHJpdi0+cHJpbWFyeS0+b2Zmc2V0KSk7CVwKIAl9CQkJCQkJCQlcCi0JaWYgKCAhdGVzdF9iaXQoIDAsICZkZXZfcHJpdi0+cHJpbS53cmFwcGVkICkgKSB7CQlcCi0JCWlmICggZGV2X3ByaXYtPnByaW0uc3BhY2UgPAkJCQlcCi0JCSAgICAgZGV2X3ByaXYtPnByaW0uaGlnaF9tYXJrICkgewkJCVwKLQkJCW1nYV9kb19kbWFfd3JhcF9zdGFydCggZGV2X3ByaXYgKTsJCVwKLQkJfSBlbHNlIHsJCQkJCQlcCi0JCQltZ2FfZG9fZG1hX2ZsdXNoKCBkZXZfcHJpdiApOwkJCVwKLQkJfQkJCQkJCQlcCisJaWYgKCF0ZXN0X2JpdCgwLCAmZGV2X3ByaXYtPnByaW0ud3JhcHBlZCkpIHsJCQlcCisJCWlmIChkZXZfcHJpdi0+cHJpbS5zcGFjZSA8IGRldl9wcml2LT5wcmltLmhpZ2hfbWFyaykJXAorCQkJbWdhX2RvX2RtYV93cmFwX3N0YXJ0KGRldl9wcml2KTsJCVwKKwkJZWxzZQkJCQkJCQlcCisJCQltZ2FfZG9fZG1hX2ZsdXNoKGRldl9wcml2KTsJCQlcCiAJfQkJCQkJCQkJXAogfSB3aGlsZSAoMCkKIAogLyogTmV2ZXIgdXNlIHRoaXMsIGFsd2F5cyB1c2UgRE1BX0JMT0NLKC4uLikgZm9yIHByaW1hcnkgRE1BIG91dHB1dC4KICAqLwotI2RlZmluZSBETUFfV1JJVEUoIG9mZnNldCwgdmFsICkJCQkJCVwKKyNkZWZpbmUgRE1BX1dSSVRFKG9mZnNldCwgdmFsKQkJCQkJCVwKIGRvIHsJCQkJCQkJCQlcCi0JaWYgKCBNR0FfVkVSQk9TRSApIHsJCQkJCQlcCi0JCURSTV9JTkZPKCAiICAgRE1BX1dSSVRFKCAweCUwOHggKSBhdCAweCUwNFp4XG4iLAlcCi0JCQkgICh1MzIpKHZhbCksIHdyaXRlICsgKG9mZnNldCkgKiBzaXplb2YodTMyKSApOwlcCi0JfQkJCQkJCQkJXAorCWlmIChNR0FfVkVSQk9TRSkJCQkJCQlcCisJCURSTV9JTkZPKCIgICBETUFfV1JJVEUoIDB4JTA4eCApIGF0IDB4JTA0WnhcbiIsCQlcCisJCQkgKHUzMikodmFsKSwgd3JpdGUgKyAob2Zmc2V0KSAqIHNpemVvZih1MzIpKTsJXAogCSoodm9sYXRpbGUgdTMyICopKHByaW0gKyB3cml0ZSArIChvZmZzZXQpICogc2l6ZW9mKHUzMikpID0gdmFsOwlcCiB9IHdoaWxlICgwKQogCi0jZGVmaW5lIERNQV9CTE9DSyggcmVnMCwgdmFsMCwgcmVnMSwgdmFsMSwgcmVnMiwgdmFsMiwgcmVnMywgdmFsMyApCVwKKyNkZWZpbmUgRE1BX0JMT0NLKHJlZzAsIHZhbDAsIHJlZzEsIHZhbDEsIHJlZzIsIHZhbDIsIHJlZzMsIHZhbDMpCVwKIGRvIHsJCQkJCQkJCQlcCi0JRE1BX1dSSVRFKCAwLCAoKERNQVJFRyggcmVnMCApIDw8IDApIHwJCQkJXAotCQkgICAgICAgKERNQVJFRyggcmVnMSApIDw8IDgpIHwJCQkJXAotCQkgICAgICAgKERNQVJFRyggcmVnMiApIDw8IDE2KSB8CQkJCVwKLQkJICAgICAgIChETUFSRUcoIHJlZzMgKSA8PCAyNCkpICk7CQkJXAotCURNQV9XUklURSggMSwgdmFsMCApOwkJCQkJCVwKLQlETUFfV1JJVEUoIDIsIHZhbDEgKTsJCQkJCQlcCi0JRE1BX1dSSVRFKCAzLCB2YWwyICk7CQkJCQkJXAotCURNQV9XUklURSggNCwgdmFsMyApOwkJCQkJCVwKKwlETUFfV1JJVEUoMCwgKChETUFSRUcocmVnMCkgPDwgMCkgfAkJCQlcCisJCSAgICAgIChETUFSRUcocmVnMSkgPDwgOCkgfAkJCQlcCisJCSAgICAgIChETUFSRUcocmVnMikgPDwgMTYpIHwJCQkJXAorCQkgICAgICAoRE1BUkVHKHJlZzMpIDw8IDI0KSkpOwkJCQlcCisJRE1BX1dSSVRFKDEsIHZhbDApOwkJCQkJCVwKKwlETUFfV1JJVEUoMiwgdmFsMSk7CQkJCQkJXAorCURNQV9XUklURSgzLCB2YWwyKTsJCQkJCQlcCisJRE1BX1dSSVRFKDQsIHZhbDMpOwkJCQkJCVwKIAl3cml0ZSArPSBETUFfQkxPQ0tfU0laRTsJCQkJCVwKIH0gd2hpbGUgKDApCiAKIC8qIEJ1ZmZlciBhZ2luZyB2aWEgcHJpbWFyeSBETUEgc3RyZWFtIGhlYWQgcG9pbnRlci4KICAqLwogCi0jZGVmaW5lIFNFVF9BR0UoIGFnZSwgaCwgdyApCQkJCQkJXAorI2RlZmluZSBTRVRfQUdFKGFnZSwgaCwgdykJCQkJCQlcCiBkbyB7CQkJCQkJCQkJXAogCShhZ2UpLT5oZWFkID0gaDsJCQkJCQlcCiAJKGFnZSktPndyYXAgPSB3OwkJCQkJCVwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgVEVTVF9BR0UoIGFnZSwgaCwgdyApCQkoIChhZ2UpLT53cmFwIDwgdyB8fAkJXAotCQkJCQkgICggKGFnZSktPndyYXAgPT0gdyAmJgkJXAotCQkJCQkgICAgKGFnZSktPmhlYWQgPCBoICkgKQorI2RlZmluZSBURVNUX0FHRShhZ2UsIGgsIHcpCQkoKGFnZSktPndyYXAgPCB3IHx8CQlcCisJCQkJCSAoKGFnZSktPndyYXAgPT0gdyAmJgkJXAorCQkJCQkgIChhZ2UpLT5oZWFkIDwgaCkpCiAKLSNkZWZpbmUgQUdFX0JVRkZFUiggYnVmX3ByaXYgKQkJCQkJCVwKKyNkZWZpbmUgQUdFX0JVRkZFUihidWZfcHJpdikJCQkJCQlcCiBkbyB7CQkJCQkJCQkJXAogCWRybV9tZ2FfZnJlZWxpc3RfdCAqZW50cnkgPSAoYnVmX3ByaXYpLT5saXN0X2VudHJ5OwkJXAotCWlmICggKGJ1Zl9wcml2KS0+ZGlzcGF0Y2hlZCApIHsJCQkJCVwKKwlpZiAoKGJ1Zl9wcml2KS0+ZGlzcGF0Y2hlZCkgewkJCQkJXAogCQllbnRyeS0+YWdlLmhlYWQgPSAoZGV2X3ByaXYtPnByaW0udGFpbCArCQlcCiAJCQkJICAgZGV2X3ByaXYtPnByaW1hcnktPm9mZnNldCk7CQlcCiAJCWVudHJ5LT5hZ2Uud3JhcCA9IGRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X3dyYXA7CVwKQEAgLTY4MSw3ICs2NzYsNyBAQAogCiAvKiBTaW1wbGUgaWRsZSB0ZXN0LgogICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgbWdhX2lzX2lkbGUoZHJtX21nYV9wcml2YXRlX3QgKiBkZXZfcHJpdikKK3N0YXRpYyBfX2lubGluZV9fIGludCBtZ2FfaXNfaWRsZShkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYpCiB7CiAJdTMyIHN0YXR1cyA9IE1HQV9SRUFEKE1HQV9TVEFUVVMpICYgTUdBX0VOR0lORV9JRExFX01BU0s7CiAJcmV0dXJuIChzdGF0dXMgPT0gTUdBX0VORFBSRE1BU1RTKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfaXJxLmMKaW5kZXggZGFhNjA0MS4uMjU4MTIwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfaXJxLmMKQEAgLTc2LDkgKzc2LDggQEAKIAkJLyogSW4gYWRkaXRpb24gdG8gY2xlYXJpbmcgdGhlIGludGVycnVwdC1wZW5kaW5nIGJpdCwgd2UKIAkJICogaGF2ZSB0byB3cml0ZSB0byBNR0FfUFJJTUVORCB0byByZS1zdGFydCB0aGUgRE1BIG9wZXJhdGlvbi4KIAkJICovCi0JCWlmICgocHJpbV9zdGFydCAmIH4weDAzKSAhPSAocHJpbV9lbmQgJiB+MHgwMykpIHsKKwkJaWYgKChwcmltX3N0YXJ0ICYgfjB4MDMpICE9IChwcmltX2VuZCAmIH4weDAzKSkKIAkJCU1HQV9XUklURShNR0FfUFJJTUVORCwgcHJpbV9lbmQpOwotCQl9CiAKIAkJYXRvbWljX2luYygmZGV2X3ByaXYtPmxhc3RfZmVuY2VfcmV0aXJlZCk7CiAJCURSTV9XQUtFVVAoJmRldl9wcml2LT5mZW5jZV9xdWV1ZSk7CkBAIC0xMjAsNyArMTE5LDcgQEAKIAkvKiBNR0FfV1JJVEUoTUdBX0lFTiwgTUdBX1ZMSU5FSUVOIHwgTUdBX1NPRlRSQVBFTik7ICovCiB9CiAKLWludCBtZ2FfZHJpdmVyX2ZlbmNlX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpCitpbnQgbWdhX2RyaXZlcl9mZW5jZV93YWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpCiB7CiAJZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9tZ2FfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAJdW5zaWduZWQgaW50IGN1cl9mZW5jZTsKQEAgLTEzOSw3ICsxMzgsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgbWdhX2RyaXZlcl9pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK3ZvaWQgbWdhX2RyaXZlcl9pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fbWdhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCkBAIC0xNjIsNyArMTYxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBtZ2FfZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCit2b2lkIG1nYV9kcml2ZXJfaXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fbWdhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCWlmICghZGV2X3ByaXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2Ffc3RhdGUuYwppbmRleCBhNTNiODQ4Li5mZmY4MjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9zdGF0ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX3N0YXRlLmMKQEAgLTQxLDggKzQxLDggQEAKICAqIERNQSBoYXJkd2FyZSBzdGF0ZSBwcm9ncmFtbWluZyBmdW5jdGlvbnMKICAqLwogCi1zdGF0aWMgdm9pZCBtZ2FfZW1pdF9jbGlwX3JlY3QoZHJtX21nYV9wcml2YXRlX3QgKiBkZXZfcHJpdiwKLQkJCSAgICAgICBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqIGJveCkKK3N0YXRpYyB2b2lkIG1nYV9lbWl0X2NsaXBfcmVjdChkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYsCisJCQkgICAgICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmJveCkKIHsKIAlkcm1fbWdhX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKIAlkcm1fbWdhX2NvbnRleHRfcmVnc190ICpjdHggPSAmc2FyZWFfcHJpdi0+Y29udGV4dF9zdGF0ZTsKQEAgLTY2LDcgKzY2LDcgQEAKIAlBRFZBTkNFX0RNQSgpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIG1nYV9nMjAwX2VtaXRfY29udGV4dChkcm1fbWdhX3ByaXZhdGVfdCAqIGRldl9wcml2KQorc3RhdGljIF9faW5saW5lX18gdm9pZCBtZ2FfZzIwMF9lbWl0X2NvbnRleHQoZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2KQogewogCWRybV9tZ2Ffc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwogCWRybV9tZ2FfY29udGV4dF9yZWdzX3QgKmN0eCA9ICZzYXJlYV9wcml2LT5jb250ZXh0X3N0YXRlOwpAQCAtODksNyArODksNyBAQAogCUFEVkFOQ0VfRE1BKCk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgbWdhX2c0MDBfZW1pdF9jb250ZXh0KGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIG1nYV9nNDAwX2VtaXRfY29udGV4dChkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYpCiB7CiAJZHJtX21nYV9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CiAJZHJtX21nYV9jb250ZXh0X3JlZ3NfdCAqY3R4ID0gJnNhcmVhX3ByaXYtPmNvbnRleHRfc3RhdGU7CkBAIC0xMTYsNyArMTE2LDcgQEAKIAlBRFZBTkNFX0RNQSgpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIG1nYV9nMjAwX2VtaXRfdGV4MChkcm1fbWdhX3ByaXZhdGVfdCAqIGRldl9wcml2KQorc3RhdGljIF9faW5saW5lX18gdm9pZCBtZ2FfZzIwMF9lbWl0X3RleDAoZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2KQogewogCWRybV9tZ2Ffc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwogCWRybV9tZ2FfdGV4dHVyZV9yZWdzX3QgKnRleCA9ICZzYXJlYV9wcml2LT50ZXhfc3RhdGVbMF07CkBAIC0xNDQsNyArMTQ0LDcgQEAKIAlBRFZBTkNFX0RNQSgpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIG1nYV9nNDAwX2VtaXRfdGV4MChkcm1fbWdhX3ByaXZhdGVfdCAqIGRldl9wcml2KQorc3RhdGljIF9faW5saW5lX18gdm9pZCBtZ2FfZzQwMF9lbWl0X3RleDAoZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2KQogewogCWRybV9tZ2Ffc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwogCWRybV9tZ2FfdGV4dHVyZV9yZWdzX3QgKnRleCA9ICZzYXJlYV9wcml2LT50ZXhfc3RhdGVbMF07CkBAIC0xODQsNyArMTg0LDcgQEAKIAlBRFZBTkNFX0RNQSgpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIG1nYV9nNDAwX2VtaXRfdGV4MShkcm1fbWdhX3ByaXZhdGVfdCAqIGRldl9wcml2KQorc3RhdGljIF9faW5saW5lX18gdm9pZCBtZ2FfZzQwMF9lbWl0X3RleDEoZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2KQogewogCWRybV9tZ2Ffc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwogCWRybV9tZ2FfdGV4dHVyZV9yZWdzX3QgKnRleCA9ICZzYXJlYV9wcml2LT50ZXhfc3RhdGVbMV07CkBAIC0yMjMsNyArMjIzLDcgQEAKIAlBRFZBTkNFX0RNQSgpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIG1nYV9nMjAwX2VtaXRfcGlwZShkcm1fbWdhX3ByaXZhdGVfdCAqIGRldl9wcml2KQorc3RhdGljIF9faW5saW5lX18gdm9pZCBtZ2FfZzIwMF9lbWl0X3BpcGUoZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2KQogewogCWRybV9tZ2Ffc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwogCXVuc2lnbmVkIGludCBwaXBlID0gc2FyZWFfcHJpdi0+d2FycF9waXBlOwpAQCAtMjUwLDcgKzI1MCw3IEBACiAJQURWQU5DRV9ETUEoKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBtZ2FfZzQwMF9lbWl0X3BpcGUoZHJtX21nYV9wcml2YXRlX3QgKiBkZXZfcHJpdikKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgbWdhX2c0MDBfZW1pdF9waXBlKGRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdikKIHsKIAlkcm1fbWdhX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKIAl1bnNpZ25lZCBpbnQgcGlwZSA9IHNhcmVhX3ByaXYtPndhcnBfcGlwZTsKQEAgLTMyNyw3ICszMjcsNyBAQAogCUFEVkFOQ0VfRE1BKCk7CiB9CiAKLXN0YXRpYyB2b2lkIG1nYV9nMjAwX2VtaXRfc3RhdGUoZHJtX21nYV9wcml2YXRlX3QgKiBkZXZfcHJpdikKK3N0YXRpYyB2b2lkIG1nYV9nMjAwX2VtaXRfc3RhdGUoZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2KQogewogCWRybV9tZ2Ffc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwogCXVuc2lnbmVkIGludCBkaXJ0eSA9IHNhcmVhX3ByaXYtPmRpcnR5OwpAQCAtMzQ4LDcgKzM0OCw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBtZ2FfZzQwMF9lbWl0X3N0YXRlKGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpCitzdGF0aWMgdm9pZCBtZ2FfZzQwMF9lbWl0X3N0YXRlKGRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdikKIHsKIAlkcm1fbWdhX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKIAl1bnNpZ25lZCBpbnQgZGlydHkgPSBzYXJlYV9wcml2LT5kaXJ0eTsKQEAgLTM4MSw3ICszODEsNyBAQAogCiAvKiBEaXNhbGxvdyBhbGwgd3JpdGUgZGVzdGluYXRpb25zIGV4Y2VwdCB0aGUgZnJvbnQgYW5kIGJhY2tidWZmZXIuCiAgKi8KLXN0YXRpYyBpbnQgbWdhX3ZlcmlmeV9jb250ZXh0KGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpCitzdGF0aWMgaW50IG1nYV92ZXJpZnlfY29udGV4dChkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYpCiB7CiAJZHJtX21nYV9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CiAJZHJtX21nYV9jb250ZXh0X3JlZ3NfdCAqY3R4ID0gJnNhcmVhX3ByaXYtPmNvbnRleHRfc3RhdGU7CkBAIC00MDAsNyArNDAwLDcgQEAKIAogLyogRGlzYWxsb3cgdGV4dHVyZSByZWFkcyBmcm9tIFBDSSBzcGFjZS4KICAqLwotc3RhdGljIGludCBtZ2FfdmVyaWZ5X3RleChkcm1fbWdhX3ByaXZhdGVfdCAqIGRldl9wcml2LCBpbnQgdW5pdCkKK3N0YXRpYyBpbnQgbWdhX3ZlcmlmeV90ZXgoZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2LCBpbnQgdW5pdCkKIHsKIAlkcm1fbWdhX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKIAlkcm1fbWdhX3RleHR1cmVfcmVnc190ICp0ZXggPSAmc2FyZWFfcHJpdi0+dGV4X3N0YXRlW3VuaXRdOwpAQCAtNDE3LDcgKzQxNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWdhX3ZlcmlmeV9zdGF0ZShkcm1fbWdhX3ByaXZhdGVfdCAqIGRldl9wcml2KQorc3RhdGljIGludCBtZ2FfdmVyaWZ5X3N0YXRlKGRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdikKIHsKIAlkcm1fbWdhX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKIAl1bnNpZ25lZCBpbnQgZGlydHkgPSBzYXJlYV9wcml2LT5kaXJ0eTsKQEAgLTQ0Niw3ICs0NDYsNyBAQAogCXJldHVybiAocmV0ID09IDApOwogfQogCi1zdGF0aWMgaW50IG1nYV92ZXJpZnlfaWxvYWQoZHJtX21nYV9wcml2YXRlX3QgKiBkZXZfcHJpdiwKK3N0YXRpYyBpbnQgbWdhX3ZlcmlmeV9pbG9hZChkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYsCiAJCQkgICAgdW5zaWduZWQgaW50IGRzdG9yZywgdW5zaWduZWQgaW50IGxlbmd0aCkKIHsKIAlpZiAoZHN0b3JnIDwgZGV2X3ByaXYtPnRleHR1cmVfb2Zmc2V0IHx8CkBAIC00NjUsNyArNDY1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtZ2FfdmVyaWZ5X2JsaXQoZHJtX21nYV9wcml2YXRlX3QgKiBkZXZfcHJpdiwKK3N0YXRpYyBpbnQgbWdhX3ZlcmlmeV9ibGl0KGRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiwKIAkJCSAgIHVuc2lnbmVkIGludCBzcmNvcmcsIHVuc2lnbmVkIGludCBkc3RvcmcpCiB7CiAJaWYgKChzcmNvcmcgJiAweDMpID09IChNR0FfU1JDQUNDX1BDSSB8IE1HQV9TUkNNQVBfU1lTTUVNKSB8fApAQCAtNDgwLDcgKzQ4MCw3IEBACiAgKgogICovCiAKLXN0YXRpYyB2b2lkIG1nYV9kbWFfZGlzcGF0Y2hfY2xlYXIoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIGRybV9tZ2FfY2xlYXJfdCAqIGNsZWFyKQorc3RhdGljIHZvaWQgbWdhX2RtYV9kaXNwYXRjaF9jbGVhcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBkcm1fbWdhX2NsZWFyX3QgKmNsZWFyKQogewogCWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX21nYV9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CkBAIC01NjgsNyArNTY4LDcgQEAKIAlGTFVTSF9ETUEoKTsKIH0KIAotc3RhdGljIHZvaWQgbWdhX2RtYV9kaXNwYXRjaF9zd2FwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQorc3RhdGljIHZvaWQgbWdhX2RtYV9kaXNwYXRjaF9zd2FwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1fbWdhX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKQEAgLTYyMiw3ICs2MjIsNyBAQAogCURSTV9ERUJVRygiLi4uIGRvbmUuXG4iKTsKIH0KIAotc3RhdGljIHZvaWQgbWdhX2RtYV9kaXNwYXRjaF92ZXJ0ZXgoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBkcm1fYnVmICogYnVmKQorc3RhdGljIHZvaWQgbWdhX2RtYV9kaXNwYXRjaF92ZXJ0ZXgoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9idWYgKmJ1ZikKIHsKIAlkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9tZ2FfYnVmX3ByaXZfdCAqYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOwpAQCAtNjY5LDcgKzY2OSw3IEBACiAJRkxVU0hfRE1BKCk7CiB9CiAKLXN0YXRpYyB2b2lkIG1nYV9kbWFfZGlzcGF0Y2hfaW5kaWNlcyhzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgc3RydWN0IGRybV9idWYgKiBidWYsCitzdGF0aWMgdm9pZCBtZ2FfZG1hX2Rpc3BhdGNoX2luZGljZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9idWYgKmJ1ZiwKIAkJCQkgICAgIHVuc2lnbmVkIGludCBzdGFydCwgdW5zaWduZWQgaW50IGVuZCkKIHsKIAlkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtNzE4LDcgKzcxOCw3IEBACiAvKiBUaGlzIGNvcGllcyBhIDY0IGJ5dGUgYWxpZ25lZCBhZ3AgcmVnaW9uIHRvIHRoZSBmcmFtYnVmZmVyIHdpdGggYQogICogc3RhbmRhcmQgYmxpdCwgdGhlIGlvY3RsIG5lZWRzIHRvIGRvIGNoZWNraW5nLgogICovCi1zdGF0aWMgdm9pZCBtZ2FfZG1hX2Rpc3BhdGNoX2lsb2FkKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBzdHJ1Y3QgZHJtX2J1ZiAqIGJ1ZiwKK3N0YXRpYyB2b2lkIG1nYV9kbWFfZGlzcGF0Y2hfaWxvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9idWYgKmJ1ZiwKIAkJCQkgICB1bnNpZ25lZCBpbnQgZHN0b3JnLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQogewogCWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC03NjYsNyArNzY2LDcgQEAKIAlGTFVTSF9ETUEoKTsKIH0KIAotc3RhdGljIHZvaWQgbWdhX2RtYV9kaXNwYXRjaF9ibGl0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBkcm1fbWdhX2JsaXRfdCAqIGJsaXQpCitzdGF0aWMgdm9pZCBtZ2FfZG1hX2Rpc3BhdGNoX2JsaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZHJtX21nYV9ibGl0X3QgKmJsaXQpCiB7CiAJZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1fbWdhX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKQEAgLTgwMSw5ICs4MDEsOCBAQAogCQlpbnQgdyA9IHBib3hbaV0ueDIgLSBwYm94W2ldLngxIC0gMTsKIAkJaW50IHN0YXJ0OwogCi0JCWlmIChibGl0LT55ZGlyID09IC0xKSB7CisJCWlmIChibGl0LT55ZGlyID09IC0xKQogCQkJc3JjeSA9IGJsaXQtPmhlaWdodCAtIHNyY3kgLSAxOwotCQl9CiAKIAkJc3RhcnQgPSBzcmN5ICogYmxpdC0+c3JjX3BpdGNoICsgc3JjeDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2Ffd2FycC5jIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2Ffd2FycC5jCmluZGV4IDlhYWQ0ODQuLmYxNzJiZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX3dhcnAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV93YXJwLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogI2RlZmluZSBXQVJQX1VDT0RFX1NJWkUoc2l6ZSkJCUFMSUdOKHNpemUsIE1HQV9XQVJQX0NPREVfQUxJR04pCiAKLWludCBtZ2Ffd2FycF9pbnN0YWxsX21pY3JvY29kZShkcm1fbWdhX3ByaXZhdGVfdCAqIGRldl9wcml2KQoraW50IG1nYV93YXJwX2luc3RhbGxfbWljcm9jb2RlKGRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdikKIHsKIAl1bnNpZ25lZCBjaGFyICp2Y2Jhc2UgPSBkZXZfcHJpdi0+d2FycC0+aGFuZGxlOwogCXVuc2lnbmVkIGxvbmcgcGNiYXNlID0gZGV2X3ByaXYtPndhcnAtPm9mZnNldDsKQEAgLTEzMyw3ICsxMzMsNyBAQAogCiAjZGVmaW5lIFdNSVNDX0VYUEVDVEVECQkoTUdBX1dVQ09ERUNBQ0hFX0VOQUJMRSB8IE1HQV9XTUFTVEVSX0VOQUJMRSkKIAotaW50IG1nYV93YXJwX2luaXQoZHJtX21nYV9wcml2YXRlX3QgKiBkZXZfcHJpdikKK2ludCBtZ2Ffd2FycF9pbml0KGRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdikKIHsKIAl1MzIgd21pc2M7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LY29uZmlnCmluZGV4IDExNzU0MjkuLmQyZDI4MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBEUk1fTk9VVkVBVQogCXRyaXN0YXRlICJOb3V2ZWF1IChuVmlkaWEpIGNhcmRzIgotCWRlcGVuZHMgb24gRFJNCisJZGVwZW5kcyBvbiBEUk0gJiYgUENJCiAgICAgICAgIHNlbGVjdCBGV19MT0FERVIKIAlzZWxlY3QgRFJNX0tNU19IRUxQRVIKIAlzZWxlY3QgRFJNX1RUTQpAQCAtNDEsNCArNDEsMTMgQEAKIAogCSAgVGhpcyBkcml2ZXIgaXMgY3VycmVudGx5IG9ubHkgdXNlZnVsIGlmIHlvdSdyZSBhbHNvIHVzaW5nCiAJICB0aGUgbm91dmVhdSBkcml2ZXIuCisKK2NvbmZpZyBEUk1fSTJDX1NJTDE2NAorCXRyaXN0YXRlICJTaWxpY29uIEltYWdlIHNpbDE2NCBUTURTIHRyYW5zbWl0dGVyIgorCWRlZmF1bHQgbSBpZiBEUk1fTk9VVkVBVQorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHNpbDE2NCBhbmQgc2ltaWxhciBzaW5nbGUtbGluayAob3IgZHVhbC1saW5rCisJICB3aGVuIHVzZWQgaW4gcGFpcnMpIFRNRFMgdHJhbnNtaXR0ZXJzLCB1c2VkIGluIHNvbWUgblZpZGlhCisJICB2aWRlbyBjYXJkcy4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9NYWtlZmlsZQppbmRleCBhY2QzMWVkLi4yNDA1ZDVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9NYWtlZmlsZQpAQCAtOSwxMCArOSwxMCBAQAogICAgICAgICAgICAgIG5vdXZlYXVfYm8ubyBub3V2ZWF1X2ZlbmNlLm8gbm91dmVhdV9nZW0ubyBub3V2ZWF1X3R0bS5vIFwKICAgICAgICAgICAgICBub3V2ZWF1X2h3Lm8gbm91dmVhdV9jYWxjLm8gbm91dmVhdV9iaW9zLm8gbm91dmVhdV9pMmMubyBcCiAgICAgICAgICAgICAgbm91dmVhdV9kaXNwbGF5Lm8gbm91dmVhdV9jb25uZWN0b3IubyBub3V2ZWF1X2ZiY29uLm8gXAotICAgICAgICAgICAgIG5vdXZlYXVfZHAubyBub3V2ZWF1X2dyY3R4Lm8gXAorICAgICAgICAgICAgIG5vdXZlYXVfZHAubyBcCiAgICAgICAgICAgICAgbnYwNF90aW1lci5vIFwKICAgICAgICAgICAgICBudjA0X21jLm8gbnY0MF9tYy5vIG52NTBfbWMubyBcCi0gICAgICAgICAgICAgbnYwNF9mYi5vIG52MTBfZmIubyBudjQwX2ZiLm8gbnY1MF9mYi5vIFwKKyAgICAgICAgICAgICBudjA0X2ZiLm8gbnYxMF9mYi5vIG52MzBfZmIubyBudjQwX2ZiLm8gbnY1MF9mYi5vIFwKICAgICAgICAgICAgICBudjA0X2ZpZm8ubyBudjEwX2ZpZm8ubyBudjQwX2ZpZm8ubyBudjUwX2ZpZm8ubyBcCiAgICAgICAgICAgICAgbnYwNF9ncmFwaC5vIG52MTBfZ3JhcGgubyBudjIwX2dyYXBoLm8gXAogICAgICAgICAgICAgIG52NDBfZ3JhcGgubyBudjUwX2dyYXBoLm8gXApAQCAtMjIsNyArMjIsNyBAQAogICAgICAgICAgICAgIG52NTBfY3Vyc29yLm8gbnY1MF9kaXNwbGF5Lm8gbnY1MF9mYmNvbi5vIFwKICAgICAgICAgICAgICBudjA0X2RhYy5vIG52MDRfZGZwLm8gbnYwNF90di5vIG52MTdfdHYubyBudjE3X3R2X21vZGVzLm8gXAogICAgICAgICAgICAgIG52MDRfY3J0Yy5vIG52MDRfZGlzcGxheS5vIG52MDRfY3Vyc29yLm8gbnYwNF9mYmNvbi5vIFwKLSAgICAgICAgICAgICBudjE3X2dwaW8ubyBudjUwX2dwaW8ubyBcCisgICAgICAgICAgICAgbnYxMF9ncGlvLm8gbnY1MF9ncGlvLm8gXAogCSAgICAgbnY1MF9jYWxjLm8KIAogbm91dmVhdS0kKENPTkZJR19EUk1fTk9VVkVBVV9ERUJVRykgKz0gbm91dmVhdV9kZWJ1Z2ZzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYWNwaS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9hY3BpLmMKaW5kZXggZDRiY2NhOC4uYzE3YTA1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9hY3BpLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9hY3BpLmMKQEAgLTMsNiArMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgorI2luY2x1ZGUgPGFjcGkvdmlkZW8uaD4KIAogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJkcm0uaCIKQEAgLTExLDYgKzEyLDcgQEAKICNpbmNsdWRlICJub3V2ZWF1X2Rydi5oIgogI2luY2x1ZGUgIm5vdXZlYXVfZHJtLmgiCiAjaW5jbHVkZSAibnY1MF9kaXNwbGF5LmgiCisjaW5jbHVkZSAibm91dmVhdV9jb25uZWN0b3IuaCIKIAogI2luY2x1ZGUgPGxpbnV4L3ZnYV9zd2l0Y2hlcm9vLmg+CiAKQEAgLTQyLDcgKzQ0LDcgQEAKIAkweEIzLCAweDRELCAweDdFLCAweDVGLCAweEVBLCAweDEyLCAweDlGLCAweEQ0LAogfTsKIAotc3RhdGljIGludCBub3V2ZWF1X2RzbShhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBmdW5jLCBpbnQgYXJnLCBpbnQgKnJlc3VsdCkKK3N0YXRpYyBpbnQgbm91dmVhdV9kc20oYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgZnVuYywgaW50IGFyZywgdWludDMyX3QgKnJlc3VsdCkKIHsKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgb3V0cHV0ID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OwogCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGlucHV0OwpAQCAtMjU5LDMgKzI2MSwzNyBAQAogewogCXJldHVybiBub3V2ZWF1X3JvbV9jYWxsKG5vdXZlYXVfZHNtX3ByaXYucm9tX2hhbmRsZSwgYmlvcywgb2Zmc2V0LCBsZW4pOwogfQorCitpbnQKK25vdXZlYXVfYWNwaV9lZGlkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IG5vdXZlYXVfY29ubmVjdG9yICpudl9jb25uZWN0b3IgPSBub3V2ZWF1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCXN0cnVjdCBhY3BpX2RldmljZSAqYWNwaWRldjsKKwlhY3BpX2hhbmRsZSBoYW5kbGU7CisJaW50IHR5cGUsIHJldDsKKwl2b2lkICplZGlkOworCisJc3dpdGNoIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlKSB7CisJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUzoKKwljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9lRFA6CisJCXR5cGUgPSBBQ1BJX1ZJREVPX0RJU1BMQVlfTENEOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwloYW5kbGUgPSBERVZJQ0VfQUNQSV9IQU5ETEUoJmRldi0+cGRldi0+ZGV2KTsKKwlpZiAoIWhhbmRsZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSBhY3BpX2J1c19nZXRfZGV2aWNlKGhhbmRsZSwgJmFjcGlkZXYpOworCWlmIChyZXQpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gYWNwaV92aWRlb19nZXRfZWRpZChhY3BpZGV2LCB0eXBlLCAtMSwgJmVkaWQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJbnZfY29ubmVjdG9yLT5lZGlkID0gZWRpZDsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmMKaW5kZXggZmM5MjRiNi4uNzM2OWI1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmMKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlICJub3V2ZWF1X2h3LmgiCiAjaW5jbHVkZSAibm91dmVhdV9lbmNvZGVyLmgiCiAKKyNpbmNsdWRlIDxsaW51eC9pby1tYXBwaW5nLmg+CisKIC8qIHRoZXNlIGRlZmluZXMgYXJlIG1hZGUgdXAgKi8KICNkZWZpbmUgTlZfQ0lPX0NSRV80NF9IRUFEQSAweDAKICNkZWZpbmUgTlZfQ0lPX0NSRV80NF9IRUFEQiAweDMKQEAgLTIwMywzNiArMjA1LDI2IEBACiAJY29uc3QgYm9vbCBydzsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbWV0aG9kcyBudjA0X21ldGhvZHNbXSA9IHsKLQl7ICJQUk9NIiwgbG9hZF92Ymlvc19wcm9tLCBmYWxzZSB9LAorc3RhdGljIHN0cnVjdCBtZXRob2RzIHNoYWRvd19tZXRob2RzW10gPSB7CiAJeyAiUFJBTUlOIiwgbG9hZF92Ymlvc19wcmFtaW4sIHRydWUgfSwKKwl7ICJQUk9NIiwgbG9hZF92Ymlvc19wcm9tLCBmYWxzZSB9LAogCXsgIlBDSVJPTSIsIGxvYWRfdmJpb3NfcGNpLCB0cnVlIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IG1ldGhvZHMgbnY1MF9tZXRob2RzW10gPSB7CiAJeyAiQUNQSSIsIGxvYWRfdmJpb3NfYWNwaSwgdHJ1ZSB9LAotCXsgIlBSQU1JTiIsIGxvYWRfdmJpb3NfcHJhbWluLCB0cnVlIH0sCi0JeyAiUFJPTSIsIGxvYWRfdmJpb3NfcHJvbSwgZmFsc2UgfSwKLQl7ICJQQ0lST00iLCBsb2FkX3ZiaW9zX3BjaSwgdHJ1ZSB9LAogfTsKLQotI2RlZmluZSBNRVRIT0RDTlQgMworI2RlZmluZSBOVU1fU0hBRE9XX01FVEhPRFMgQVJSQVlfU0laRShzaGFkb3dfbWV0aG9kcykKIAogc3RhdGljIGJvb2wgTlZTaGFkb3dWQklPUyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50OF90ICpkYXRhKQogewotCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG1ldGhvZHMgKm1ldGhvZHM7Ci0JaW50IGk7CisJc3RydWN0IG1ldGhvZHMgKm1ldGhvZHMgPSBzaGFkb3dfbWV0aG9kczsKIAlpbnQgdGVzdHNjb3JlID0gMzsKLQlpbnQgc2NvcmVzW01FVEhPRENOVF07CisJaW50IHNjb3Jlc1tOVU1fU0hBRE9XX01FVEhPRFNdLCBpOwogCiAJaWYgKG5vdXZlYXVfdmJpb3MpIHsKLQkJbWV0aG9kcyA9IG52MDRfbWV0aG9kczsKLQkJZm9yIChpID0gMDsgaSA8IE1FVEhPRENOVDsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1NIQURPV19NRVRIT0RTOyBpKyspCiAJCQlpZiAoIXN0cmNhc2VjbXAobm91dmVhdV92YmlvcywgbWV0aG9kc1tpXS5kZXNjKSkKIAkJCQlicmVhazsKIAotCQlpZiAoaSA8IE1FVEhPRENOVCkgeworCQlpZiAoaSA8IE5VTV9TSEFET1dfTUVUSE9EUykgewogCQkJTlZfSU5GTyhkZXYsICJBdHRlbXB0aW5nIHRvIHVzZSBCSU9TIGltYWdlIGZyb20gJXNcbiIsCiAJCQkJbWV0aG9kc1tpXS5kZXNjKTsKIApAQCAtMjQ0LDEyICsyMzYsNyBAQAogCQlOVl9FUlJPUihkZXYsICJWQklPUyBzb3VyY2UgXCclc1wnIGludmFsaWRcbiIsIG5vdXZlYXVfdmJpb3MpOwogCX0KIAotCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlIDwgTlZfNTApCi0JCW1ldGhvZHMgPSBudjA0X21ldGhvZHM7Ci0JZWxzZQotCQltZXRob2RzID0gbnY1MF9tZXRob2RzOwotCi0JZm9yIChpID0gMDsgaSA8IE1FVEhPRENOVDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IE5VTV9TSEFET1dfTUVUSE9EUzsgaSsrKSB7CiAJCU5WX1RSQUNFKGRldiwgIkF0dGVtcHRpbmcgdG8gbG9hZCBCSU9TIGltYWdlIGZyb20gJXNcbiIsCiAJCQkgbWV0aG9kc1tpXS5kZXNjKTsKIAkJZGF0YVswXSA9IGRhdGFbMV0gPSAwOwkvKiBhdm9pZCByZXVzZSBvZiBwcmV2aW91cyBpbWFnZSAqLwpAQCAtMjYwLDcgKzI0Nyw3IEBACiAJfQogCiAJd2hpbGUgKC0tdGVzdHNjb3JlID4gMCkgewotCQlmb3IgKGkgPSAwOyBpIDwgTUVUSE9EQ05UOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IE5VTV9TSEFET1dfTUVUSE9EUzsgaSsrKSB7CiAJCQlpZiAoc2NvcmVzW2ldID09IHRlc3RzY29yZSkgewogCQkJCU5WX1RSQUNFKGRldiwgIlVzaW5nIEJJT1MgaW1hZ2UgZnJvbSAlc1xuIiwKIAkJCQkJIG1ldGhvZHNbaV0uZGVzYyk7CkBAIC05MzUsNyArOTIyLDcgQEAKIAkJTlZfRVJST1IoYmlvcy0+ZGV2LAogCQkJICIweCUwNFg6IENvbmZpZyAweCUwMlggZXhjZWVkcyBtYXhpbWFsIGJvdW5kIDB4JTAyWFxuIiwKIAkJCSBvZmZzZXQsIGNvbmZpZywgY291bnQpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIGxlbjsKIAl9CiAKIAljb25maWd2YWwgPSBST00zMihiaW9zLT5kYXRhW29mZnNldCArIDExICsgY29uZmlnICogNF0pOwpAQCAtMTAzNyw3ICsxMDI0LDcgQEAKIAkJTlZfRVJST1IoYmlvcy0+ZGV2LAogCQkJICIweCUwNFg6IENvbmZpZyAweCUwMlggZXhjZWVkcyBtYXhpbWFsIGJvdW5kIDB4JTAyWFxuIiwKIAkJCSBvZmZzZXQsIGNvbmZpZywgY291bnQpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIGxlbjsKIAl9CiAKIAlmcmVxID0gUk9NMTYoYmlvcy0+ZGF0YVtvZmZzZXQgKyAxMiArIGNvbmZpZyAqIDJdKTsKQEAgLTEyMDksNyArMTE5Niw3IEBACiAJZHBlID0gbm91dmVhdV9iaW9zX2RwX3RhYmxlKGRldiwgZGNiLCAmZHVtbXkpOwogCWlmICghZHBlKSB7CiAJCU5WX0VSUk9SKGRldiwgIjB4JTA0WDogSU5JVF8zQTogbm8gZW5jb2RlciB0YWJsZSEhXG4iLCBvZmZzZXQpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIDM7CiAJfQogCiAJc3dpdGNoIChjb25kKSB7CkBAIC0xMjMzLDEyICsxMjIwLDE2IEBACiAJCWludCByZXQ7CiAKIAkJYXV4Y2ggPSBub3V2ZWF1X2kyY19maW5kKGRldiwgYmlvcy0+ZGlzcGxheS5vdXRwdXQtPmkyY19pbmRleCk7Ci0JCWlmICghYXV4Y2gpCi0JCQlyZXR1cm4gLUVOT0RFVjsKKwkJaWYgKCFhdXhjaCkgeworCQkJTlZfRVJST1IoZGV2LCAiMHglMDRYOiBjb3VsZG4ndCBnZXQgYXV4Y2hcbiIsIG9mZnNldCk7CisJCQlyZXR1cm4gMzsKKwkJfQogCiAJCXJldCA9IG5vdXZlYXVfZHBfYXV4Y2goYXV4Y2gsIDksIDB4ZCwgJmNvbmQsIDEpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKKwkJaWYgKHJldCkgeworCQkJTlZfRVJST1IoZGV2LCAiMHglMDRYOiBhdXhjaCByZCBmYWlsOiAlZFxuIiwgb2Zmc2V0LCByZXQpOworCQkJcmV0dXJuIDM7CisJCX0KIAogCQlpZiAoY29uZCAmIDEpCiAJCQlpZXhlYy0+ZXhlY3V0ZSA9IGZhbHNlOwpAQCAtMTQwNyw3ICsxMzk4LDcgQEAKIAkJTlZfRVJST1IoYmlvcy0+ZGV2LAogCQkJICIweCUwNFg6IENvbmZpZyAweCUwMlggZXhjZWVkcyBtYXhpbWFsIGJvdW5kIDB4JTAyWFxuIiwKIAkJCSBvZmZzZXQsIGNvbmZpZywgY291bnQpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIGxlbjsKIAl9CiAKIAlmcmVxID0gUk9NMzIoYmlvcy0+ZGF0YVtvZmZzZXQgKyAxMSArIGNvbmZpZyAqIDRdKTsKQEAgLTE0NjcsNiArMTQ1OCw3IEBACiAJICogIm1hc2sgbiIgYW5kIE9SIGl0IHdpdGggImRhdGEgbiIgYmVmb3JlIHdyaXRpbmcgaXQgYmFjayB0byB0aGUgZGV2aWNlCiAJICovCiAKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gYmlvcy0+ZGV2OwogCXVpbnQ4X3QgaTJjX2luZGV4ID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAxXTsKIAl1aW50OF90IGkyY19hZGRyZXNzID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAyXSA+PiAxOwogCXVpbnQ4X3QgY291bnQgPSBiaW9zLT5kYXRhW29mZnNldCArIDNdOwpAQCAtMTQ4MSw5ICsxNDczLDExIEBACiAJCSAgICAgICJDb3VudDogMHglMDJYXG4iLAogCQlvZmZzZXQsIGkyY19pbmRleCwgaTJjX2FkZHJlc3MsIGNvdW50KTsKIAotCWNoYW4gPSBpbml0X2kyY19kZXZpY2VfZmluZChiaW9zLT5kZXYsIGkyY19pbmRleCk7Ci0JaWYgKCFjaGFuKQotCQlyZXR1cm4gLUVOT0RFVjsKKwljaGFuID0gaW5pdF9pMmNfZGV2aWNlX2ZpbmQoZGV2LCBpMmNfaW5kZXgpOworCWlmICghY2hhbikgeworCQlOVl9FUlJPUihkZXYsICIweCUwNFg6IGkyYyBidXMgbm90IGZvdW5kXG4iLCBvZmZzZXQpOworCQlyZXR1cm4gbGVuOworCX0KIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAJCXVpbnQ4X3QgcmVnID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyA0ICsgaSAqIDNdOwpAQCAtMTQ5NCw4ICsxNDg4LDEwIEBACiAJCXJldCA9IGkyY19zbWJ1c194ZmVyKCZjaGFuLT5hZGFwdGVyLCBpMmNfYWRkcmVzcywgMCwKIAkJCQkgICAgIEkyQ19TTUJVU19SRUFELCByZWcsCiAJCQkJICAgICBJMkNfU01CVVNfQllURV9EQVRBLCAmdmFsKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OworCQlpZiAocmV0IDwgMCkgeworCQkJTlZfRVJST1IoZGV2LCAiMHglMDRYOiBpMmMgcmQgZmFpbDogJWRcbiIsIG9mZnNldCwgcmV0KTsKKwkJCXJldHVybiBsZW47CisJCX0KIAogCQlCSU9TTE9HKGJpb3MsICIweCUwNFg6IEkyQ1JlZzogMHglMDJYLCBWYWx1ZTogMHglMDJYLCAiCiAJCQkgICAgICAiTWFzazogMHglMDJYLCBEYXRhOiAweCUwMlhcbiIsCkBAIC0xNTA5LDggKzE1MDUsMTAgQEAKIAkJcmV0ID0gaTJjX3NtYnVzX3hmZXIoJmNoYW4tPmFkYXB0ZXIsIGkyY19hZGRyZXNzLCAwLAogCQkJCSAgICAgSTJDX1NNQlVTX1dSSVRFLCByZWcsCiAJCQkJICAgICBJMkNfU01CVVNfQllURV9EQVRBLCAmdmFsKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OworCQlpZiAocmV0IDwgMCkgeworCQkJTlZfRVJST1IoZGV2LCAiMHglMDRYOiBpMmMgd3IgZmFpbDogJWRcbiIsIG9mZnNldCwgcmV0KTsKKwkJCXJldHVybiBsZW47CisJCX0KIAl9CiAKIAlyZXR1cm4gbGVuOwpAQCAtMTUzNSw2ICsxNTMzLDcgQEAKIAkgKiAiRENCIEkyQyB0YWJsZSBlbnRyeSBpbmRleCIsIHNldCB0aGUgcmVnaXN0ZXIgdG8gImRhdGEgbiIKIAkgKi8KIAorCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBiaW9zLT5kZXY7CiAJdWludDhfdCBpMmNfaW5kZXggPSBiaW9zLT5kYXRhW29mZnNldCArIDFdOwogCXVpbnQ4X3QgaTJjX2FkZHJlc3MgPSBiaW9zLT5kYXRhW29mZnNldCArIDJdID4+IDE7CiAJdWludDhfdCBjb3VudCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgM107CkBAIC0xNTQ5LDkgKzE1NDgsMTEgQEAKIAkJICAgICAgIkNvdW50OiAweCUwMlhcbiIsCiAJCW9mZnNldCwgaTJjX2luZGV4LCBpMmNfYWRkcmVzcywgY291bnQpOwogCi0JY2hhbiA9IGluaXRfaTJjX2RldmljZV9maW5kKGJpb3MtPmRldiwgaTJjX2luZGV4KTsKLQlpZiAoIWNoYW4pCi0JCXJldHVybiAtRU5PREVWOworCWNoYW4gPSBpbml0X2kyY19kZXZpY2VfZmluZChkZXYsIGkyY19pbmRleCk7CisJaWYgKCFjaGFuKSB7CisJCU5WX0VSUk9SKGRldiwgIjB4JTA0WDogaTJjIGJ1cyBub3QgZm91bmRcbiIsIG9mZnNldCk7CisJCXJldHVybiBsZW47CisJfQogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJdWludDhfdCByZWcgPSBiaW9zLT5kYXRhW29mZnNldCArIDQgKyBpICogMl07CkBAIC0xNTY4LDggKzE1NjksMTAgQEAKIAkJcmV0ID0gaTJjX3NtYnVzX3hmZXIoJmNoYW4tPmFkYXB0ZXIsIGkyY19hZGRyZXNzLCAwLAogCQkJCSAgICAgSTJDX1NNQlVTX1dSSVRFLCByZWcsCiAJCQkJICAgICBJMkNfU01CVVNfQllURV9EQVRBLCAmdmFsKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OworCQlpZiAocmV0IDwgMCkgeworCQkJTlZfRVJST1IoZGV2LCAiMHglMDRYOiBpMmMgd3IgZmFpbDogJWRcbiIsIG9mZnNldCwgcmV0KTsKKwkJCXJldHVybiBsZW47CisJCX0KIAl9CiAKIAlyZXR1cm4gbGVuOwpAQCAtMTU5Miw2ICsxNTk1LDcgQEAKIAkgKiBhZGRyZXNzIiBvbiB0aGUgSTJDIGJ1cyBnaXZlbiBieSAiRENCIEkyQyB0YWJsZSBlbnRyeSBpbmRleCIKIAkgKi8KIAorCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBiaW9zLT5kZXY7CiAJdWludDhfdCBpMmNfaW5kZXggPSBiaW9zLT5kYXRhW29mZnNldCArIDFdOwogCXVpbnQ4X3QgaTJjX2FkZHJlc3MgPSBiaW9zLT5kYXRhW29mZnNldCArIDJdID4+IDE7CiAJdWludDhfdCBjb3VudCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgM107CkBAIC0xNTk5LDcgKzE2MDMsNyBAQAogCXN0cnVjdCBub3V2ZWF1X2kyY19jaGFuICpjaGFuOwogCXN0cnVjdCBpMmNfbXNnIG1zZzsKIAl1aW50OF90IGRhdGFbMjU2XTsKLQlpbnQgaTsKKwlpbnQgcmV0LCBpOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKIAkJcmV0dXJuIGxlbjsKQEAgLTE2MDgsOSArMTYxMiwxMSBAQAogCQkgICAgICAiQ291bnQ6IDB4JTAyWFxuIiwKIAkJb2Zmc2V0LCBpMmNfaW5kZXgsIGkyY19hZGRyZXNzLCBjb3VudCk7CiAKLQljaGFuID0gaW5pdF9pMmNfZGV2aWNlX2ZpbmQoYmlvcy0+ZGV2LCBpMmNfaW5kZXgpOwotCWlmICghY2hhbikKLQkJcmV0dXJuIC1FTk9ERVY7CisJY2hhbiA9IGluaXRfaTJjX2RldmljZV9maW5kKGRldiwgaTJjX2luZGV4KTsKKwlpZiAoIWNoYW4pIHsKKwkJTlZfRVJST1IoZGV2LCAiMHglMDRYOiBpMmMgYnVzIG5vdCBmb3VuZFxuIiwgb2Zmc2V0KTsKKwkJcmV0dXJuIGxlbjsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQlkYXRhW2ldID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyA0ICsgaV07CkBAIC0xNjIzLDggKzE2MjksMTEgQEAKIAkJbXNnLmZsYWdzID0gMDsKIAkJbXNnLmxlbiA9IGNvdW50OwogCQltc2cuYnVmID0gZGF0YTsKLQkJaWYgKGkyY190cmFuc2ZlcigmY2hhbi0+YWRhcHRlciwgJm1zZywgMSkgIT0gMSkKLQkJCXJldHVybiAtRUlPOworCQlyZXQgPSBpMmNfdHJhbnNmZXIoJmNoYW4tPmFkYXB0ZXIsICZtc2csIDEpOworCQlpZiAocmV0ICE9IDEpIHsKKwkJCU5WX0VSUk9SKGRldiwgIjB4JTA0WDogaTJjIHdyIGZhaWw6ICVkXG4iLCBvZmZzZXQsIHJldCk7CisJCQlyZXR1cm4gbGVuOworCQl9CiAJfQogCiAJcmV0dXJuIGxlbjsKQEAgLTE2NDgsNiArMTY1Nyw3IEBACiAJICogdXNlZCAtLSBzZWUgZ2V0X3RtZHNfaW5kZXhfcmVnKCkKIAkgKi8KIAorCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBiaW9zLT5kZXY7CiAJdWludDhfdCBtbHYgPSBiaW9zLT5kYXRhW29mZnNldCArIDFdOwogCXVpbnQzMl90IHRtZHNhZGRyID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAyXTsKIAl1aW50OF90IG1hc2sgPSBiaW9zLT5kYXRhW29mZnNldCArIDNdOwpAQCAtMTY2Miw4ICsxNjcyLDEwIEBACiAJCW9mZnNldCwgbWx2LCB0bWRzYWRkciwgbWFzaywgZGF0YSk7CiAKIAlyZWcgPSBnZXRfdG1kc19pbmRleF9yZWcoYmlvcy0+ZGV2LCBtbHYpOwotCWlmICghcmVnKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXJlZykgeworCQlOVl9FUlJPUihkZXYsICIweCUwNFg6IG5vIHRtZHNfaW5kZXhfcmVnXG4iLCBvZmZzZXQpOworCQlyZXR1cm4gNTsKKwl9CiAKIAliaW9zX3dyMzIoYmlvcywgcmVnLAogCQkgIHRtZHNhZGRyIHwgTlZfUFJBTURBQ19GUF9UTURTX0NPTlRST0xfV1JJVEVfRElTQUJMRSk7CkBAIC0xNjkzLDYgKzE3MDUsNyBAQAogCSAqIHJlZ2lzdGVyIGlzIHVzZWQgLS0gc2VlIGdldF90bWRzX2luZGV4X3JlZygpCiAJICovCiAKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gYmlvcy0+ZGV2OwogCXVpbnQ4X3QgbWx2ID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAxXTsKIAl1aW50OF90IGNvdW50ID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAyXTsKIAlpbnQgbGVuID0gMyArIGNvdW50ICogMjsKQEAgLTE3MDYsOCArMTcxOSwxMCBAQAogCQlvZmZzZXQsIG1sdiwgY291bnQpOwogCiAJcmVnID0gZ2V0X3RtZHNfaW5kZXhfcmVnKGJpb3MtPmRldiwgbWx2KTsKLQlpZiAoIXJlZykKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFyZWcpIHsKKwkJTlZfRVJST1IoZGV2LCAiMHglMDRYOiBubyB0bWRzX2luZGV4X3JlZ1xuIiwgb2Zmc2V0KTsKKwkJcmV0dXJuIGxlbjsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQl1aW50OF90IHRtZHNhZGRyID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAzICsgaSAqIDJdOwpAQCAtMjA1NCw2ICsyMDY5LDMyMyBAQAogCXJldHVybiA1OwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQKK2Jpb3NfbWQzMihzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MzJfdCByZWcsCisJICB1aW50MzJfdCBtYXNrLCB1aW50MzJfdCB2YWwpCit7CisJYmlvc193cjMyKGJpb3MsIHJlZywgKGJpb3NfcmQzMihiaW9zLCByZWcpICYgfm1hc2spIHwgdmFsKTsKK30KKworc3RhdGljIHVpbnQzMl90CitwZWVrX2ZiKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBpb19tYXBwaW5nICpmYiwKKwl1aW50MzJfdCBvZmYpCit7CisJdWludDMyX3QgdmFsID0gMDsKKworCWlmIChvZmYgPCBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgMSkpIHsKKwkJdWludDMyX3QgX19pb21lbSAqcCA9IGlvX21hcHBpbmdfbWFwX2F0b21pY193YyhmYiwgb2ZmLCBLTV9VU0VSMCk7CisKKwkJdmFsID0gaW9yZWFkMzIocCk7CisKKwkJaW9fbWFwcGluZ191bm1hcF9hdG9taWMocCwgS01fVVNFUjApOworCX0KKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyB2b2lkCitwb2tlX2ZiKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBpb19tYXBwaW5nICpmYiwKKwl1aW50MzJfdCBvZmYsIHVpbnQzMl90IHZhbCkKK3sKKwlpZiAob2ZmIDwgcGNpX3Jlc291cmNlX2xlbihkZXYtPnBkZXYsIDEpKSB7CisJCXVpbnQzMl90IF9faW9tZW0gKnAgPSBpb19tYXBwaW5nX21hcF9hdG9taWNfd2MoZmIsIG9mZiwgS01fVVNFUjApOworCisJCWlvd3JpdGUzMih2YWwsIHApOworCQl3bWIoKTsKKworCQlpb19tYXBwaW5nX3VubWFwX2F0b21pYyhwLCBLTV9VU0VSMCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK3JlYWRfYmFja19mYihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgaW9fbWFwcGluZyAqZmIsCisJICAgICB1aW50MzJfdCBvZmYsIHVpbnQzMl90IHZhbCkKK3sKKwlwb2tlX2ZiKGRldiwgZmIsIG9mZiwgdmFsKTsKKwlyZXR1cm4gdmFsID09IHBlZWtfZmIoZGV2LCBmYiwgb2ZmKTsKK30KKworc3RhdGljIGludAorbnYwNF9pbml0X2NvbXB1dGVfbWVtKHN0cnVjdCBudmJpb3MgKmJpb3MpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGJpb3MtPmRldjsKKwl1aW50MzJfdCBwYXR0ID0gMHhkZWFkYmVlZjsKKwlzdHJ1Y3QgaW9fbWFwcGluZyAqZmI7CisJaW50IGk7CisKKwkvKiBNYXAgdGhlIGZyYW1lYnVmZmVyIGFwZXJ0dXJlICovCisJZmIgPSBpb19tYXBwaW5nX2NyZWF0ZV93YyhwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCAxKSwKKwkJCQkgIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wZGV2LCAxKSk7CisJaWYgKCFmYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBTZXF1ZW5jZXIgYW5kIHJlZnJlc2ggb2ZmICovCisJTlZXcml0ZVZnYVNlcShkZXYsIDAsIDEsIE5WUmVhZFZnYVNlcShkZXYsIDAsIDEpIHwgMHgyMCk7CisJYmlvc19tZDMyKGJpb3MsIE5WMDRfUEZCX0RFQlVHXzAsIDAsIE5WMDRfUEZCX0RFQlVHXzBfUkVGUkVTSF9PRkYpOworCisJYmlvc19tZDMyKGJpb3MsIE5WMDRfUEZCX0JPT1RfMCwgfjAsCisJCSAgTlYwNF9QRkJfQk9PVF8wX1JBTV9BTU9VTlRfMTZNQiB8CisJCSAgTlYwNF9QRkJfQk9PVF8wX1JBTV9XSURUSF8xMjggfAorCQkgIE5WMDRfUEZCX0JPT1RfMF9SQU1fVFlQRV9TR1JBTV8xNk1CSVQpOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJcG9rZV9mYihkZXYsIGZiLCA0ICogaSwgcGF0dCk7CisKKwlwb2tlX2ZiKGRldiwgZmIsIDB4NDAwMDAwLCBwYXR0ICsgMSk7CisKKwlpZiAocGVla19mYihkZXYsIGZiLCAwKSA9PSBwYXR0ICsgMSkgeworCQliaW9zX21kMzIoYmlvcywgTlYwNF9QRkJfQk9PVF8wLCBOVjA0X1BGQl9CT09UXzBfUkFNX1RZUEUsCisJCQkgIE5WMDRfUEZCX0JPT1RfMF9SQU1fVFlQRV9TRFJBTV8xNk1CSVQpOworCQliaW9zX21kMzIoYmlvcywgTlYwNF9QRkJfREVCVUdfMCwKKwkJCSAgTlYwNF9QRkJfREVCVUdfMF9SRUZSRVNIX09GRiwgMCk7CisKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJCXBva2VfZmIoZGV2LCBmYiwgNCAqIGksIHBhdHQpOworCisJCWlmICgocGVla19mYihkZXYsIGZiLCAweGMpICYgMHhmZmZmKSAhPSAocGF0dCAmIDB4ZmZmZikpCisJCQliaW9zX21kMzIoYmlvcywgTlYwNF9QRkJfQk9PVF8wLAorCQkJCSAgTlYwNF9QRkJfQk9PVF8wX1JBTV9XSURUSF8xMjggfAorCQkJCSAgTlYwNF9QRkJfQk9PVF8wX1JBTV9BTU9VTlQsCisJCQkJICBOVjA0X1BGQl9CT09UXzBfUkFNX0FNT1VOVF84TUIpOworCisJfSBlbHNlIGlmICgocGVla19mYihkZXYsIGZiLCAweGMpICYgMHhmZmZmMDAwMCkgIT0KKwkJICAgKHBhdHQgJiAweGZmZmYwMDAwKSkgeworCQliaW9zX21kMzIoYmlvcywgTlYwNF9QRkJfQk9PVF8wLAorCQkJICBOVjA0X1BGQl9CT09UXzBfUkFNX1dJRFRIXzEyOCB8CisJCQkgIE5WMDRfUEZCX0JPT1RfMF9SQU1fQU1PVU5ULAorCQkJICBOVjA0X1BGQl9CT09UXzBfUkFNX0FNT1VOVF80TUIpOworCisJfSBlbHNlIGlmIChwZWVrX2ZiKGRldiwgZmIsIDApID09IHBhdHQpIHsKKwkJaWYgKHJlYWRfYmFja19mYihkZXYsIGZiLCAweDgwMDAwMCwgcGF0dCkpCisJCQliaW9zX21kMzIoYmlvcywgTlYwNF9QRkJfQk9PVF8wLAorCQkJCSAgTlYwNF9QRkJfQk9PVF8wX1JBTV9BTU9VTlQsCisJCQkJICBOVjA0X1BGQl9CT09UXzBfUkFNX0FNT1VOVF84TUIpOworCQllbHNlCisJCQliaW9zX21kMzIoYmlvcywgTlYwNF9QRkJfQk9PVF8wLAorCQkJCSAgTlYwNF9QRkJfQk9PVF8wX1JBTV9BTU9VTlQsCisJCQkJICBOVjA0X1BGQl9CT09UXzBfUkFNX0FNT1VOVF80TUIpOworCisJCWJpb3NfbWQzMihiaW9zLCBOVjA0X1BGQl9CT09UXzAsIE5WMDRfUEZCX0JPT1RfMF9SQU1fVFlQRSwKKwkJCSAgTlYwNF9QRkJfQk9PVF8wX1JBTV9UWVBFX1NHUkFNXzhNQklUKTsKKworCX0gZWxzZSBpZiAoIXJlYWRfYmFja19mYihkZXYsIGZiLCAweDgwMDAwMCwgcGF0dCkpIHsKKwkJYmlvc19tZDMyKGJpb3MsIE5WMDRfUEZCX0JPT1RfMCwgTlYwNF9QRkJfQk9PVF8wX1JBTV9BTU9VTlQsCisJCQkgIE5WMDRfUEZCX0JPT1RfMF9SQU1fQU1PVU5UXzhNQik7CisKKwl9CisKKwkvKiBSZWZyZXNoIG9uLCBzZXF1ZW5jZXIgb24gKi8KKwliaW9zX21kMzIoYmlvcywgTlYwNF9QRkJfREVCVUdfMCwgTlYwNF9QRkJfREVCVUdfMF9SRUZSRVNIX09GRiwgMCk7CisJTlZXcml0ZVZnYVNlcShkZXYsIDAsIDEsIE5WUmVhZFZnYVNlcShkZXYsIDAsIDEpICYgfjB4MjApOworCisJaW9fbWFwcGluZ19mcmVlKGZiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgKgorbnYwNV9tZW1vcnlfY29uZmlnKHN0cnVjdCBudmJpb3MgKmJpb3MpCit7CisJLyogRGVmYXVsdHMgZm9yIEJJT1NlcyBsYWNraW5nIGEgbWVtb3J5IGNvbmZpZyB0YWJsZSAqLworCXN0YXRpYyBjb25zdCB1aW50OF90IGRlZmF1bHRfY29uZmlnX3RhYltdWzJdID0geworCQl7IDB4MjQsIDB4MDAgfSwKKwkJeyAweDI4LCAweDAwIH0sCisJCXsgMHgyNCwgMHgwMSB9LAorCQl7IDB4MWYsIDB4MDAgfSwKKwkJeyAweDBmLCAweDAwIH0sCisJCXsgMHgxNywgMHgwMCB9LAorCQl7IDB4MDYsIDB4MDAgfSwKKwkJeyAweDAwLCAweDAwIH0KKwl9OworCWludCBpID0gKGJpb3NfcmQzMihiaW9zLCBOVl9QRVhUREVWX0JPT1RfMCkgJgorCQkgTlZfUEVYVERFVl9CT09UXzBfUkFNQ0ZHKSA+PiAyOworCisJaWYgKGJpb3MtPmxlZ2FjeS5tZW1faW5pdF90YmxfcHRyKQorCQlyZXR1cm4gJmJpb3MtPmRhdGFbYmlvcy0+bGVnYWN5Lm1lbV9pbml0X3RibF9wdHIgKyAyICogaV07CisJZWxzZQorCQlyZXR1cm4gZGVmYXVsdF9jb25maWdfdGFiW2ldOworfQorCitzdGF0aWMgaW50CitudjA1X2luaXRfY29tcHV0ZV9tZW0oc3RydWN0IG52YmlvcyAqYmlvcykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gYmlvcy0+ZGV2OworCWNvbnN0IHVpbnQ4X3QgKnJhbWNmZyA9IG52MDVfbWVtb3J5X2NvbmZpZyhiaW9zKTsKKwl1aW50MzJfdCBwYXR0ID0gMHhkZWFkYmVlZjsKKwlzdHJ1Y3QgaW9fbWFwcGluZyAqZmI7CisJaW50IGksIHY7CisKKwkvKiBNYXAgdGhlIGZyYW1lYnVmZmVyIGFwZXJ0dXJlICovCisJZmIgPSBpb19tYXBwaW5nX2NyZWF0ZV93YyhwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCAxKSwKKwkJCQkgIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wZGV2LCAxKSk7CisJaWYgKCFmYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBTZXF1ZW5jZXIgb2ZmICovCisJTlZXcml0ZVZnYVNlcShkZXYsIDAsIDEsIE5WUmVhZFZnYVNlcShkZXYsIDAsIDEpIHwgMHgyMCk7CisKKwlpZiAoYmlvc19yZDMyKGJpb3MsIE5WMDRfUEZCX0JPT1RfMCkgJiBOVjA0X1BGQl9CT09UXzBfVU1BX0VOQUJMRSkKKwkJZ290byBvdXQ7CisKKwliaW9zX21kMzIoYmlvcywgTlYwNF9QRkJfREVCVUdfMCwgTlYwNF9QRkJfREVCVUdfMF9SRUZSRVNIX09GRiwgMCk7CisKKwkvKiBJZiBwcmVzZW50IGxvYWQgdGhlIGhhcmRjb2RlZCBzY3JhbWJsaW5nIHRhYmxlICovCisJaWYgKGJpb3MtPmxlZ2FjeS5tZW1faW5pdF90YmxfcHRyKSB7CisJCXVpbnQzMl90ICpzY3JhbWJsZV90YWIgPSAodWludDMyX3QgKikmYmlvcy0+ZGF0YVsKKwkJCWJpb3MtPmxlZ2FjeS5tZW1faW5pdF90YmxfcHRyICsgMHgxMF07CisKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCWJpb3Nfd3IzMihiaW9zLCBOVjA0X1BGQl9TQ1JBTUJMRShpKSwKKwkJCQkgIFJPTTMyKHNjcmFtYmxlX3RhYltpXSkpOworCX0KKworCS8qIFNldCBtZW1vcnkgdHlwZS93aWR0aC9sZW5ndGggZGVmYXVsdHMgZGVwZW5kaW5nIG9uIHRoZSBzdHJhcHMgKi8KKwliaW9zX21kMzIoYmlvcywgTlYwNF9QRkJfQk9PVF8wLCAweDNmLCByYW1jZmdbMF0pOworCisJaWYgKHJhbWNmZ1sxXSAmIDB4ODApCisJCWJpb3NfbWQzMihiaW9zLCBOVjA0X1BGQl9DRkcwLCAwLCBOVjA0X1BGQl9DRkcwX1NDUkFNQkxFKTsKKworCWJpb3NfbWQzMihiaW9zLCBOVjA0X1BGQl9DRkcxLCAweDcwMDAwMSwgKHJhbWNmZ1sxXSAmIDEpIDw8IDIwKTsKKwliaW9zX21kMzIoYmlvcywgTlYwNF9QRkJfQ0ZHMSwgMCwgMSk7CisKKwkvKiBQcm9iZSBtZW1vcnkgYnVzIHdpZHRoICovCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJcG9rZV9mYihkZXYsIGZiLCA0ICogaSwgcGF0dCk7CisKKwlpZiAocGVla19mYihkZXYsIGZiLCAweGMpICE9IHBhdHQpCisJCWJpb3NfbWQzMihiaW9zLCBOVjA0X1BGQl9CT09UXzAsCisJCQkgIE5WMDRfUEZCX0JPT1RfMF9SQU1fV0lEVEhfMTI4LCAwKTsKKworCS8qIFByb2JlIG1lbW9yeSBsZW5ndGggKi8KKwl2ID0gYmlvc19yZDMyKGJpb3MsIE5WMDRfUEZCX0JPT1RfMCkgJiBOVjA0X1BGQl9CT09UXzBfUkFNX0FNT1VOVDsKKworCWlmICh2ID09IE5WMDRfUEZCX0JPT1RfMF9SQU1fQU1PVU5UXzMyTUIgJiYKKwkgICAgKCFyZWFkX2JhY2tfZmIoZGV2LCBmYiwgMHgxMDAwMDAwLCArK3BhdHQpIHx8CisJICAgICAhcmVhZF9iYWNrX2ZiKGRldiwgZmIsIDAsICsrcGF0dCkpKQorCQliaW9zX21kMzIoYmlvcywgTlYwNF9QRkJfQk9PVF8wLCBOVjA0X1BGQl9CT09UXzBfUkFNX0FNT1VOVCwKKwkJCSAgTlYwNF9QRkJfQk9PVF8wX1JBTV9BTU9VTlRfMTZNQik7CisKKwlpZiAodiA9PSBOVjA0X1BGQl9CT09UXzBfUkFNX0FNT1VOVF8xNk1CICYmCisJICAgICFyZWFkX2JhY2tfZmIoZGV2LCBmYiwgMHg4MDAwMDAsICsrcGF0dCkpCisJCWJpb3NfbWQzMihiaW9zLCBOVjA0X1BGQl9CT09UXzAsIE5WMDRfUEZCX0JPT1RfMF9SQU1fQU1PVU5ULAorCQkJICBOVjA0X1BGQl9CT09UXzBfUkFNX0FNT1VOVF84TUIpOworCisJaWYgKCFyZWFkX2JhY2tfZmIoZGV2LCBmYiwgMHg0MDAwMDAsICsrcGF0dCkpCisJCWJpb3NfbWQzMihiaW9zLCBOVjA0X1BGQl9CT09UXzAsIE5WMDRfUEZCX0JPT1RfMF9SQU1fQU1PVU5ULAorCQkJICBOVjA0X1BGQl9CT09UXzBfUkFNX0FNT1VOVF80TUIpOworCitvdXQ6CisJLyogU2VxdWVuY2VyIG9uICovCisJTlZXcml0ZVZnYVNlcShkZXYsIDAsIDEsIE5WUmVhZFZnYVNlcShkZXYsIDAsIDEpICYgfjB4MjApOworCisJaW9fbWFwcGluZ19mcmVlKGZiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbnYxMF9pbml0X2NvbXB1dGVfbWVtKHN0cnVjdCBudmJpb3MgKmJpb3MpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGJpb3MtPmRldjsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBiaW9zLT5kZXYtPmRldl9wcml2YXRlOworCWNvbnN0IGludCBtZW1fd2lkdGhbXSA9IHsgMHgxMCwgMHgwMCwgMHgyMCB9OworCWNvbnN0IGludCBtZW1fd2lkdGhfY291bnQgPSAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHgxNyA/IDMgOiAyKTsKKwl1aW50MzJfdCBwYXR0ID0gMHhkZWFkYmVlZjsKKwlzdHJ1Y3QgaW9fbWFwcGluZyAqZmI7CisJaW50IGksIGosIGs7CisKKwkvKiBNYXAgdGhlIGZyYW1lYnVmZmVyIGFwZXJ0dXJlICovCisJZmIgPSBpb19tYXBwaW5nX2NyZWF0ZV93YyhwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCAxKSwKKwkJCQkgIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wZGV2LCAxKSk7CisJaWYgKCFmYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwliaW9zX3dyMzIoYmlvcywgTlYxMF9QRkJfUkVGQ1RSTCwgTlYxMF9QRkJfUkVGQ1RSTF9WQUxJRF8xKTsKKworCS8qIFByb2JlIG1lbW9yeSBidXMgd2lkdGggKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWVtX3dpZHRoX2NvdW50OyBpKyspIHsKKwkJYmlvc19tZDMyKGJpb3MsIE5WMDRfUEZCX0NGRzAsIDB4MzAsIG1lbV93aWR0aFtpXSk7CisKKwkJZm9yIChqID0gMDsgaiA8IDQ7IGorKykgeworCQkJZm9yIChrID0gMDsgayA8IDQ7IGsrKykKKwkJCQlwb2tlX2ZiKGRldiwgZmIsIDB4MWMsIDApOworCisJCQlwb2tlX2ZiKGRldiwgZmIsIDB4MWMsIHBhdHQpOworCQkJcG9rZV9mYihkZXYsIGZiLCAweDNjLCAwKTsKKworCQkJaWYgKHBlZWtfZmIoZGV2LCBmYiwgMHgxYykgPT0gcGF0dCkKKwkJCQlnb3RvIG1lbV93aWR0aF9mb3VuZDsKKwkJfQorCX0KKworbWVtX3dpZHRoX2ZvdW5kOgorCXBhdHQgPDw9IDE7CisKKwkvKiBQcm9iZSBhbW91bnQgb2YgaW5zdGFsbGVkIG1lbW9yeSAqLworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJaW50IG9mZiA9IGJpb3NfcmQzMihiaW9zLCBOVjA0X1BGQl9GSUZPX0RBVEEpIC0gMHgxMDAwMDA7CisKKwkJcG9rZV9mYihkZXYsIGZiLCBvZmYsIHBhdHQpOworCQlwb2tlX2ZiKGRldiwgZmIsIDAsIDApOworCisJCXBlZWtfZmIoZGV2LCBmYiwgMCk7CisJCXBlZWtfZmIoZGV2LCBmYiwgMCk7CisJCXBlZWtfZmIoZGV2LCBmYiwgMCk7CisJCXBlZWtfZmIoZGV2LCBmYiwgMCk7CisKKwkJaWYgKHBlZWtfZmIoZGV2LCBmYiwgb2ZmKSA9PSBwYXR0KQorCQkJZ290byBhbW91bnRfZm91bmQ7CisJfQorCisJLyogSUMgbWlzc2luZyAtIGRpc2FibGUgdGhlIHVwcGVyIGhhbGYgbWVtb3J5IHNwYWNlLiAqLworCWJpb3NfbWQzMihiaW9zLCBOVjA0X1BGQl9DRkcwLCAweDEwMDAsIDApOworCithbW91bnRfZm91bmQ6CisJaW9fbWFwcGluZ19mcmVlKGZiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbnYyMF9pbml0X2NvbXB1dGVfbWVtKHN0cnVjdCBudmJpb3MgKmJpb3MpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGJpb3MtPmRldjsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBiaW9zLT5kZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IG1hc2sgPSAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHgyNSA/IDB4MzAwIDogMHg5MDApOworCXVpbnQzMl90IGFtb3VudCwgb2ZmOworCXN0cnVjdCBpb19tYXBwaW5nICpmYjsKKworCS8qIE1hcCB0aGUgZnJhbWVidWZmZXIgYXBlcnR1cmUgKi8KKwlmYiA9IGlvX21hcHBpbmdfY3JlYXRlX3djKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBkZXYsIDEpLAorCQkJCSAgcGNpX3Jlc291cmNlX2xlbihkZXYtPnBkZXYsIDEpKTsKKwlpZiAoIWZiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWJpb3Nfd3IzMihiaW9zLCBOVjEwX1BGQl9SRUZDVFJMLCBOVjEwX1BGQl9SRUZDVFJMX1ZBTElEXzEpOworCisJLyogQWxsb3cgZnVsbCBhZGRyZXNzaW5nICovCisJYmlvc19tZDMyKGJpb3MsIE5WMDRfUEZCX0NGRzAsIDAsIG1hc2spOworCisJYW1vdW50ID0gYmlvc19yZDMyKGJpb3MsIE5WMDRfUEZCX0ZJRk9fREFUQSk7CisJZm9yIChvZmYgPSBhbW91bnQ7IG9mZiA+IDB4MjAwMDAwMDsgb2ZmIC09IDB4MjAwMDAwMCkKKwkJcG9rZV9mYihkZXYsIGZiLCBvZmYgLSA0LCBvZmYpOworCisJYW1vdW50ID0gYmlvc19yZDMyKGJpb3MsIE5WMDRfUEZCX0ZJRk9fREFUQSk7CisJaWYgKGFtb3VudCAhPSBwZWVrX2ZiKGRldiwgZmIsIGFtb3VudCAtIDQpKQorCQkvKiBJQyBtaXNzaW5nIC0gZGlzYWJsZSB0aGUgdXBwZXIgaGFsZiBtZW1vcnkgc3BhY2UuICovCisJCWJpb3NfbWQzMihiaW9zLCBOVjA0X1BGQl9DRkcwLCBtYXNrLCAwKTsKKworCWlvX21hcHBpbmdfZnJlZShmYik7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQKIGluaXRfY29tcHV0ZV9tZW0oc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKQEAgLTIwNjIsNjQgKzIzOTQsNTcgQEAKIAkgKgogCSAqIG9mZnNldCAgICAgICg4IGJpdCk6IG9wY29kZQogCSAqCi0JICogVGhpcyBvcGNvZGUgaXMgbWVhbnQgdG8gc2V0IE5WX1BGQl9DRkcwICgweDEwMDIwMCkgYXBwcm9wcmlhdGVseSBzbwotCSAqIHRoYXQgdGhlIGhhcmR3YXJlIGNhbiBjb3JyZWN0bHkgY2FsY3VsYXRlIGhvdyBtdWNoIFZSQU0gaXQgaGFzCi0JICogKGFuZCBzdWJzZXF1ZW50bHkgcmVwb3J0IHRoYXQgdmFsdWUgaW4gTlZfUEZCX0NTVEFUVVMgKDB4MTAwMjBDKSkKKwkgKiBUaGlzIG9wY29kZSBpcyBtZWFudCB0byBzZXQgdGhlIFBGQiBtZW1vcnkgY29uZmlnIHJlZ2lzdGVycworCSAqIGFwcHJvcHJpYXRlbHkgc28gdGhhdCB3ZSBjYW4gY29ycmVjdGx5IGNhbGN1bGF0ZSBob3cgbXVjaCBWUkFNIGl0CisJICogaGFzIChvbiBudjEwIGFuZCBiZXR0ZXIgY2hpcHNldHMgdGhlIGFtb3VudCBvZiBpbnN0YWxsZWQgVlJBTSBpcworCSAqIHN1YnNlcXVlbnRseSByZXBvcnRlZCBpbiBOVl9QRkJfQ1NUQVRVUyAoMHgxMDAyMEMpKS4KIAkgKgotCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG9wY29kZSBpbiBnZW5lcmFsIGNvbnNpc3RzIG9mIHR3byBwYXJ0czoKLQkgKiAxKSBkZXRlcm1pbmF0aW9uIG9mIHRoZSBtZW1vcnkgYnVzIHdpZHRoCi0JICogMikgZGV0ZXJtaW5hdGlvbiBvZiBob3cgbWFueSBvZiB0aGUgY2FyZCdzIFJBTSBwYWRzIGhhdmUgSUNzIGF0dGFjaGVkCisJICogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgb3Bjb2RlIGluIGdlbmVyYWwgY29uc2lzdHMgb2Ygc2V2ZXJhbAorCSAqIHBhcnRzOgogCSAqCi0JICogMSkgaXMgZG9uZSBieSBhIGN1bm5pbmcgY29tYmluYXRpb24gb2Ygd3JpdGVzIHRvIG9mZnNldHMgMHgxYyBhbmQKLQkgKiAweDNjIGluIHRoZSBmcmFtZWJ1ZmZlciwgYW5kIHNlZWluZyB3aGV0aGVyIHRoZSB3cml0dGVuIHZhbHVlcyBhcmUKLQkgKiByZWFkIGJhY2sgY29ycmVjdGx5LiBUaGlzIHRoZW4gYWZmZWN0cyBiaXRzIDQtNyBvZiBOVl9QRkJfQ0ZHMAorCSAqIDEpIERldGVybWluYXRpb24gb2YgbWVtb3J5IHR5cGUgYW5kIGRlbnNpdHkuIE9ubHkgbmVjZXNzYXJ5IGZvcgorCSAqICAgIHJlYWxseSBvbGQgY2hpcHNldHMsIHRoZSBtZW1vcnkgdHlwZSByZXBvcnRlZCBieSB0aGUgc3RyYXAgYml0cworCSAqICAgICgweDEwMTAwMCkgaXMgYXNzdW1lZCB0byBiZSBhY2N1cmF0ZSBvbiBudjA1IGFuZCBuZXdlci4KIAkgKgotCSAqIDIpIGlzIGRvbmUgYnkgYSBjdW5uaW5nIGNvbWJpbmF0aW9uIG9mIHdyaXRlcyB0byBhbiBvZmZzZXQgc2xpZ2h0bHkKLQkgKiBsZXNzIHRoYW4gdGhlIG1heGltdW0gbWVtb3J5IHJlcG9ydGVkIGJ5IE5WX1BGQl9DU1RBVFVTLCB0aGVuIHNlZWluZwotCSAqIGlmIHRoZSB0ZXN0IHBhdHRlcm4gY2FuIGJlIHJlYWQgYmFjay4gVGhpcyB0aGVuIGFmZmVjdHMgYml0cyAxMi0xNSBvZgotCSAqIE5WX1BGQl9DRkcwCisJICogMikgRGV0ZXJtaW5hdGlvbiBvZiB0aGUgbWVtb3J5IGJ1cyB3aWR0aC4gVXN1YWxseSBkb25lIGJ5IGEgY3VubmluZworCSAqICAgIGNvbWJpbmF0aW9uIG9mIHdyaXRlcyB0byBvZmZzZXRzIDB4MWMgYW5kIDB4M2MgaW4gdGhlIGZiLCBhbmQKKwkgKiAgICBzZWVpbmcgd2hldGhlciB0aGUgd3JpdHRlbiB2YWx1ZXMgYXJlIHJlYWQgYmFjayBjb3JyZWN0bHkuCiAJICoKLQkgKiBJbiB0aGlzIGNvbnRleHQgYSAiY3VubmluZyBjb21iaW5hdGlvbiIgbWF5IGluY2x1ZGUgbXVsdGlwbGUgcmVhZHMKLQkgKiBhbmQgd3JpdGVzIHRvIHZhcnlpbmcgbG9jYXRpb25zLCBvZnRlbiBhbHRlcm5hdGluZyB0aGUgdGVzdCBwYXR0ZXJuCi0JICogYW5kIDAsIGRvdWJ0bGVzcyB0byBtYWtlIHN1cmUgYnVmZmVycyBhcmUgZmlsbGVkLCByZXNpZHVhbCBjaGFyZ2VzCi0JICogb24gdHJhY2tzIGFyZSByZW1vdmVkIGV0Yy4KKwkgKiAgICBPbmx5IG5lY2Vzc2FyeSBvbiBudjB4LW52MXggYW5kIG52MzQsIG9uIHRoZSBvdGhlciBjYXJkcyB3ZSBjYW4KKwkgKiAgICB0cnVzdCB0aGUgc3RyYXBzLgogCSAqCi0JICogVW5mb3J0dW5hdGVseSwgdGhlICJjdW5uaW5nIGNvbWJpbmF0aW9uInMgbWVudGlvbmVkIGFib3ZlLCBhbmQgdGhlCi0JICogY2hhbmdlcyB0byB0aGUgYml0cyBpbiBOVl9QRkJfQ0ZHMCBkaWZmZXIgd2l0aCBuZWFybHkgZXZlcnkgYmlvcwotCSAqIHRyYWNlIEkgaGF2ZS4KKwkgKiAzKSBEZXRlcm1pbmF0aW9uIG9mIGhvdyBtYW55IG9mIHRoZSBjYXJkJ3MgUkFNIHBhZHMgaGF2ZSBJQ3MKKwkgKiAgICBhdHRhY2hlZCwgdXN1YWxseSBkb25lIGJ5IGEgY3VubmluZyBjb21iaW5hdGlvbiBvZiB3cml0ZXMgdG8gYW4KKwkgKiAgICBvZmZzZXQgc2xpZ2h0bHkgbGVzcyB0aGFuIHRoZSBtYXhpbXVtIG1lbW9yeSByZXBvcnRlZCBieQorCSAqICAgIE5WX1BGQl9DU1RBVFVTLCB0aGVuIHNlZWluZyBpZiB0aGUgdGVzdCBwYXR0ZXJuIGNhbiBiZSByZWFkIGJhY2suCiAJICoKLQkgKiBUaGVyZWZvcmUsIHdlIGNoZWF0IGFuZCBhc3N1bWUgdGhlIHZhbHVlIG9mIE5WX1BGQl9DRkcwIHdpdGggd2hpY2gKLQkgKiB3ZSBzdGFydGVkIHdhcyBjb3JyZWN0LCBhbmQgdXNlIHRoYXQgaW5zdGVhZAorCSAqIFRoaXMgYXBwZWFycyB0byBiZSBhIE5PUCBvbiBJR1BzIGFuZCBOVjR4IG9yIG5ld2VyIGNoaXBzZXRzLCBib3RoIGlvCisJICogbG9ncyBvZiB0aGUgVkJJT1MgYW5kIGttbWlvIHRyYWNlcyBvZiB0aGUgYmluYXJ5IGRyaXZlciBQT1NUaW5nIHRoZQorCSAqIGNhcmQgc2hvdyBub3RoaW5nIGJlaW5nIGRvbmUgZm9yIHRoaXMgb3Bjb2RlLiBXaHkgaXMgaXQgc3RpbGwgbGlzdGVkCisJICogaW4gdGhlIHRhYmxlPyEKIAkgKi8KIAogCS8qIG5vIGlleGVjLT5leGVjdXRlIGNoZWNrIGJ5IGRlc2lnbiAqLwogCi0JLyoKLQkgKiBUaGlzIGFwcGVhcnMgdG8gYmUgYSBOT1Agb24gRzh4IGNoaXBzZXRzLCBib3RoIGlvIGxvZ3Mgb2YgdGhlIFZCSU9TCi0JICogYW5kIGttbWlvIHRyYWNlcyBvZiB0aGUgYmluYXJ5IGRyaXZlciBQT1NUaW5nIHRoZSBjYXJkIHNob3cgbm90aGluZwotCSAqIGJlaW5nIGRvbmUgZm9yIHRoaXMgb3Bjb2RlLiAgd2h5IGlzIGl0IHN0aWxsIGxpc3RlZCBpbiB0aGUgdGFibGU/IQotCSAqLwotCiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gYmlvcy0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OwogCi0JaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfNDApCi0JCXJldHVybiAxOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweDQwIHx8CisJICAgIGRldl9wcml2LT5jaGlwc2V0ID09IDB4MWEgfHwKKwkgICAgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHgxZikKKwkJcmV0ID0gMDsKKwllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweDIwICYmCisJCSBkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDM0KQorCQlyZXQgPSBudjIwX2luaXRfY29tcHV0ZV9tZW0oYmlvcyk7CisJZWxzZSBpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHgxMCkKKwkJcmV0ID0gbnYxMF9pbml0X2NvbXB1dGVfbWVtKGJpb3MpOworCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0ID49IDB4NSkKKwkJcmV0ID0gbnYwNV9pbml0X2NvbXB1dGVfbWVtKGJpb3MpOworCWVsc2UKKwkJcmV0ID0gbnYwNF9pbml0X2NvbXB1dGVfbWVtKGJpb3MpOwogCi0JLyoKLQkgKiBPbiBldmVyeSBjYXJkIEkndmUgc2VlbiwgdGhpcyBzdGVwIGdldHMgZG9uZSBmb3IgdXMgZWFybGllciBpbgotCSAqIHRoZSBpbml0IHNjcmlwdHMKLQl1aW50OF90IGNyZGF0YSA9IGJpb3NfaWR4cHJ0X3JkKGRldiwgTlZfVklPX1NSWCwgMHgwMSk7Ci0JYmlvc19pZHhwcnRfd3IoZGV2LCBOVl9WSU9fU1JYLCAweDAxLCBjcmRhdGEgfCAweDIwKTsKLQkgKi8KLQotCS8qCi0JICogVGhpcyBhbHNvIGhhcyBwcm9iYWJseSBiZWVuIGRvbmUgaW4gdGhlIHNjcmlwdHMsIGJ1dCBhbiBtbWlvIHRyYWNlIG9mCi0JICogczMgcmVzdW1lIHNob3dzIG52aWRpYSBkb2luZyBpdCBhbnl3YXkgKHVubGlrZSB0aGUgTlZfVklPX1NSWCB3cml0ZSkKLQkgKi8KLQliaW9zX3dyMzIoYmlvcywgTlZfUEZCX1JFRkNUUkwsIE5WX1BGQl9SRUZDVFJMX1ZBTElEXzEpOwotCi0JLyogd3JpdGUgYmFjayB0aGUgc2F2ZWQgY29uZmlndXJhdGlvbiB2YWx1ZSAqLwotCWJpb3Nfd3IzMihiaW9zLCBOVl9QRkJfQ0ZHMCwgYmlvcy0+c3RhdGUuc2F2ZWRfbnZfcGZiX2NmZzApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTIxNDYsNyArMjQ3MSw4IEBACiAJLyogbm8gaWV4ZWMtPmV4ZWN1dGUgY2hlY2sgYnkgZGVzaWduICovCiAKIAlwY2lfbnZfMTkgPSBiaW9zX3JkMzIoYmlvcywgTlZfUEJVU19QQ0lfTlZfMTkpOwotCWJpb3Nfd3IzMihiaW9zLCBOVl9QQlVTX1BDSV9OVl8xOSwgMCk7CisJYmlvc193cjMyKGJpb3MsIE5WX1BCVVNfUENJX05WXzE5LCBwY2lfbnZfMTkgJiB+MHhmMDApOworCiAJYmlvc193cjMyKGJpb3MsIHJlZywgdmFsdWUxKTsKIAogCXVkZWxheSgxMCk7CkBAIC0yMTgyLDcgKzI1MDgsNyBAQAogCXVpbnQzMl90IHJlZywgZGF0YTsKIAogCWlmIChiaW9zLT5tYWpvcl92ZXJzaW9uID4gMikKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiAwOwogCiAJYmlvc19pZHhwcnRfd3IoYmlvcywgTlZfVklPX1NSWCwgTlZfVklPX1NSX0NMT0NLX0lOREVYLCBiaW9zX2lkeHBydF9yZCgKIAkJICAgICAgIGJpb3MsIE5WX1ZJT19TUlgsIE5WX1ZJT19TUl9DTE9DS19JTkRFWCkgfCAweDIwKTsKQEAgLTIxOTUsMTQgKzI1MjEsMTQgQEAKIAkgICAgIHJlZyA9IFJPTTMyKGJpb3MtPmRhdGFbc2VxdGJsb2ZmcyArPSA0XSkpIHsKIAogCQlzd2l0Y2ggKHJlZykgewotCQljYXNlIE5WX1BGQl9QUkU6Ci0JCQlkYXRhID0gTlZfUEZCX1BSRV9DTURfUFJFQ0hBUkdFOworCQljYXNlIE5WMDRfUEZCX1BSRToKKwkJCWRhdGEgPSBOVjA0X1BGQl9QUkVfQ01EX1BSRUNIQVJHRTsKIAkJCWJyZWFrOwotCQljYXNlIE5WX1BGQl9QQUQ6Ci0JCQlkYXRhID0gTlZfUEZCX1BBRF9DS0VfTk9STUFMOworCQljYXNlIE5WMDRfUEZCX1BBRDoKKwkJCWRhdGEgPSBOVjA0X1BGQl9QQURfQ0tFX05PUk1BTDsKIAkJCWJyZWFrOwotCQljYXNlIE5WX1BGQl9SRUY6Ci0JCQlkYXRhID0gTlZfUEZCX1JFRl9DTURfUkVGUkVTSDsKKwkJY2FzZSBOVjA0X1BGQl9SRUY6CisJCQlkYXRhID0gTlYwNF9QRkJfUkVGX0NNRF9SRUZSRVNIOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlkYXRhID0gUk9NMzIoYmlvcy0+ZGF0YVttZW1pbml0ZGF0YV0pOwpAQCAtMjIzNyw3ICsyNTYzLDcgQEAKIAlpbnQgY2xvY2s7CiAKIAlpZiAoYmlvcy0+bWFqb3JfdmVyc2lvbiA+IDIpCi0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gMDsKIAogCWNsb2NrID0gUk9NMTYoYmlvcy0+ZGF0YVttZW1pbml0b2ZmcyArIDRdKSAqIDEwOwogCXNldFBMTChiaW9zLCBOVl9QUkFNREFDX05WUExMX0NPRUZGLCBjbG9jayk7CkBAIC0yMjcwLDcgKzI1OTYsNyBAQAogCXVpbnQ4X3QgY3IzYyA9ICgoc3RyYXBzIDw8IDIpICYgMHhmMCkgfCAoc3RyYXBzICYgKDEgPDwgNikpOwogCiAJaWYgKGJpb3MtPm1ham9yX3ZlcnNpb24gPiAyKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIDA7CiAKIAliaW9zX2lkeHBydF93cihiaW9zLCBOVl9DSU9fQ1JYX19DT0xPUiwKIAkJCSAgICAgTlZfQ0lPX0NSRV9TQ1JBVENINF9fSU5ERVgsIGNyM2MpOwpAQCAtMjQwNCw3ICsyNzMwLDcgQEAKIAkgKiBvZmZzZXQgKyAxICAoOCBiaXQpOiBtYXNrCiAJICogb2Zmc2V0ICsgMiAgKDggYml0KTogY21wdmFsCiAJICoKLQkgKiBUZXN0IGlmIChOVl9QRkJfQk9PVF8wICYgIm1hc2siKSBlcXVhbHMgImNtcHZhbCIuCisJICogVGVzdCBpZiAoTlYwNF9QRkJfQk9PVF8wICYgIm1hc2siKSBlcXVhbHMgImNtcHZhbCIuCiAJICogSWYgY29uZGl0aW9uIG5vdCBtZXQgc2tpcCBzdWJzZXF1ZW50IG9wY29kZXMgdW50aWwgY29uZGl0aW9uIGlzCiAJICogaW52ZXJ0ZWQgKElOSVRfTk9UKSwgb3Igd2UgaGl0IElOSVRfUkVTVU1FCiAJICovCkBAIC0yNDE2LDcgKzI3NDIsNyBAQAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCiAJCXJldHVybiAzOwogCi0JZGF0YSA9IGJpb3NfcmQzMihiaW9zLCBOVl9QRkJfQk9PVF8wKSAmIG1hc2s7CisJZGF0YSA9IGJpb3NfcmQzMihiaW9zLCBOVjA0X1BGQl9CT09UXzApICYgbWFzazsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogQ2hlY2tpbmcgaWYgMHglMDhYIGVxdWFscyAweCUwOFhcbiIsCiAJCW9mZnNldCwgZGF0YSwgY21wdmFsKTsKQEAgLTI4MTAsMTIgKzMxMzYsMTMgQEAKIAkgKi8KIAogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGJpb3MtPmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfZ3Bpb19lbmdpbmUgKnBncGlvID0gJmRldl9wcml2LT5lbmdpbmUuZ3BpbzsKIAljb25zdCB1aW50MzJfdCBudjUwX2dwaW9fY3RsWzJdID0geyAweGUxMDAsIDB4ZTI4YyB9OwogCWludCBpOwogCiAJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgIT0gTlZfNTApIHsKIAkJTlZfRVJST1IoYmlvcy0+ZGV2LCAiSU5JVF9HUElPIG9uIHVuc3VwcG9ydGVkIGNoaXBzZXRcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIDE7CiAJfQogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKQEAgLTI4MzAsNyArMzE1Nyw3IEBACiAJCUJJT1NMT0coYmlvcywgIjB4JTA0WDogc2V0IGdwaW8gMHglMDJ4LCBzdGF0ZSAlZFxuIiwKIAkJCW9mZnNldCwgZ3Bpby0+dGFnLCBncGlvLT5zdGF0ZV9kZWZhdWx0KTsKIAkJaWYgKGJpb3MtPmV4ZWN1dGUpCi0JCQludjUwX2dwaW9fc2V0KGJpb3MtPmRldiwgZ3Bpby0+dGFnLCBncGlvLT5zdGF0ZV9kZWZhdWx0KTsKKwkJCXBncGlvLT5zZXQoYmlvcy0+ZGV2LCBncGlvLT50YWcsIGdwaW8tPnN0YXRlX2RlZmF1bHQpOwogCiAJCS8qIFRoZSBOVklESUEgYmluYXJ5IGRyaXZlciBkb2Vzbid0IGFwcGVhciB0byBhY3R1YWxseSBkbwogCQkgKiBhbnkgb2YgdGhpcywgbXkgVkJJT1MgZG9lcyBob3dldmVyLgpAQCAtMjg4NywxMCArMzIxNCw3IEBACiAJdWludDhfdCBpbmRleDsKIAlpbnQgaTsKIAotCi0JaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIGxlbjsKLQorCS8qIGNyaXRpY2FsISB0byBrbm93IHRoZSBsZW5ndGggb2YgdGhlIG9wY29kZSAqLzsKIAlpZiAoIWJsb2NrbGVuKSB7CiAJCU5WX0VSUk9SKGJpb3MtPmRldiwKIAkJCSAiMHglMDRYOiBaZXJvIGJsb2NrIGxlbmd0aCAtIGhhcyB0aGUgTSB0YWJsZSAiCkBAIC0yODk4LDYgKzMyMjIsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAoIWlleGVjLT5leGVjdXRlKQorCQlyZXR1cm4gbGVuOworCiAJc3RyYXBfcmFtY2ZnID0gKGJpb3NfcmQzMihiaW9zLCBOVl9QRVhUREVWX0JPT1RfMCkgPj4gMikgJiAweGY7CiAJaW5kZXggPSBiaW9zLT5kYXRhW2Jpb3MtPnJhbV9yZXN0cmljdF90YmxfcHRyICsgc3RyYXBfcmFtY2ZnXTsKIApAQCAtMzA3OSwxNCArMzQwNiwxNCBAQAogCiAJaWYgKCFiaW9zLT5kaXNwbGF5Lm91dHB1dCkgewogCQlOVl9FUlJPUihkZXYsICJJTklUX0FVWENIOiBubyBhY3RpdmUgb3V0cHV0XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBsZW47CiAJfQogCiAJYXV4Y2ggPSBpbml0X2kyY19kZXZpY2VfZmluZChkZXYsIGJpb3MtPmRpc3BsYXkub3V0cHV0LT5pMmNfaW5kZXgpOwogCWlmICghYXV4Y2gpIHsKIAkJTlZfRVJST1IoZGV2LCAiSU5JVF9BVVhDSDogY291bGRuJ3QgZ2V0IGF1eGNoICVkXG4iLAogCQkJIGJpb3MtPmRpc3BsYXkub3V0cHV0LT5pMmNfaW5kZXgpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIGxlbjsKIAl9CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQpAQCAtMzA5OSw3ICszNDI2LDcgQEAKIAkJcmV0ID0gbm91dmVhdV9kcF9hdXhjaChhdXhjaCwgOSwgYWRkciwgJmRhdGEsIDEpOwogCQlpZiAocmV0KSB7CiAJCQlOVl9FUlJPUihkZXYsICJJTklUX0FVWENIOiByZCBhdXhjaCBmYWlsICVkXG4iLCByZXQpOwotCQkJcmV0dXJuIHJldDsKKwkJCXJldHVybiBsZW47CiAJCX0KIAogCQlkYXRhICY9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMF07CkBAIC0zMTA4LDcgKzM0MzUsNyBAQAogCQlyZXQgPSBub3V2ZWF1X2RwX2F1eGNoKGF1eGNoLCA4LCBhZGRyLCAmZGF0YSwgMSk7CiAJCWlmIChyZXQpIHsKIAkJCU5WX0VSUk9SKGRldiwgIklOSVRfQVVYQ0g6IHdyIGF1eGNoIGZhaWwgJWRcbiIsIHJldCk7Ci0JCQlyZXR1cm4gcmV0OworCQkJcmV0dXJuIGxlbjsKIAkJfQogCX0KIApAQCAtMzEzOCwxNCArMzQ2NSwxNCBAQAogCiAJaWYgKCFiaW9zLT5kaXNwbGF5Lm91dHB1dCkgewogCQlOVl9FUlJPUihkZXYsICJJTklUX1pNX0FVWENIOiBubyBhY3RpdmUgb3V0cHV0XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBsZW47CiAJfQogCiAJYXV4Y2ggPSBpbml0X2kyY19kZXZpY2VfZmluZChkZXYsIGJpb3MtPmRpc3BsYXkub3V0cHV0LT5pMmNfaW5kZXgpOwogCWlmICghYXV4Y2gpIHsKIAkJTlZfRVJST1IoZGV2LCAiSU5JVF9aTV9BVVhDSDogY291bGRuJ3QgZ2V0IGF1eGNoICVkXG4iLAogCQkJIGJpb3MtPmRpc3BsYXkub3V0cHV0LT5pMmNfaW5kZXgpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIGxlbjsKIAl9CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQpAQCAtMzE1Niw3ICszNDgzLDcgQEAKIAkJcmV0ID0gbm91dmVhdV9kcF9hdXhjaChhdXhjaCwgOCwgYWRkciwgJmJpb3MtPmRhdGFbb2Zmc2V0XSwgMSk7CiAJCWlmIChyZXQpIHsKIAkJCU5WX0VSUk9SKGRldiwgIklOSVRfWk1fQVVYQ0g6IHdyIGF1eGNoIGZhaWwgJWRcbiIsIHJldCk7Ci0JCQlyZXR1cm4gcmV0OworCQkJcmV0dXJuIGxlbjsKIAkJfQogCX0KIApAQCAtNTE2NiwxMCArNTQ5MywxNCBAQAogCWJpb3MtPmxlZ2FjeS5pMmNfaW5kaWNlcy5jcnQgPSBiaW9zLT5kYXRhW2xlZ2FjeV9pMmNfb2Zmc2V0XTsKIAliaW9zLT5sZWdhY3kuaTJjX2luZGljZXMudHYgPSBiaW9zLT5kYXRhW2xlZ2FjeV9pMmNfb2Zmc2V0ICsgMV07CiAJYmlvcy0+bGVnYWN5LmkyY19pbmRpY2VzLnBhbmVsID0gYmlvcy0+ZGF0YVtsZWdhY3lfaTJjX29mZnNldCArIDJdOwotCWJpb3MtPmRjYi5pMmNbMF0ud3JpdGUgPSBiaW9zLT5kYXRhW2xlZ2FjeV9pMmNfb2Zmc2V0ICsgNF07Ci0JYmlvcy0+ZGNiLmkyY1swXS5yZWFkID0gYmlvcy0+ZGF0YVtsZWdhY3lfaTJjX29mZnNldCArIDVdOwotCWJpb3MtPmRjYi5pMmNbMV0ud3JpdGUgPSBiaW9zLT5kYXRhW2xlZ2FjeV9pMmNfb2Zmc2V0ICsgNl07Ci0JYmlvcy0+ZGNiLmkyY1sxXS5yZWFkID0gYmlvcy0+ZGF0YVtsZWdhY3lfaTJjX29mZnNldCArIDddOworCWlmIChiaW9zLT5kYXRhW2xlZ2FjeV9pMmNfb2Zmc2V0ICsgNF0pCisJCWJpb3MtPmRjYi5pMmNbMF0ud3JpdGUgPSBiaW9zLT5kYXRhW2xlZ2FjeV9pMmNfb2Zmc2V0ICsgNF07CisJaWYgKGJpb3MtPmRhdGFbbGVnYWN5X2kyY19vZmZzZXQgKyA1XSkKKwkJYmlvcy0+ZGNiLmkyY1swXS5yZWFkID0gYmlvcy0+ZGF0YVtsZWdhY3lfaTJjX29mZnNldCArIDVdOworCWlmIChiaW9zLT5kYXRhW2xlZ2FjeV9pMmNfb2Zmc2V0ICsgNl0pCisJCWJpb3MtPmRjYi5pMmNbMV0ud3JpdGUgPSBiaW9zLT5kYXRhW2xlZ2FjeV9pMmNfb2Zmc2V0ICsgNl07CisJaWYgKGJpb3MtPmRhdGFbbGVnYWN5X2kyY19vZmZzZXQgKyA3XSkKKwkJYmlvcy0+ZGNiLmkyY1sxXS5yZWFkID0gYmlvcy0+ZGF0YVtsZWdhY3lfaTJjX29mZnNldCArIDddOwogCiAJaWYgKGJtcGxlbmd0aCA+IDc0KSB7CiAJCWJpb3MtPmZtYXh2Y28gPSBST00zMihibXBbNjddKTsKQEAgLTU2MDQsOSArNTkzNSwxMiBAQAogCQkJaWYgKGNvbmYgJiAweDQgfHwgY29uZiAmIDB4OCkKIAkJCQllbnRyeS0+bHZkc2NvbmYudXNlX3Bvd2VyX3NjcmlwdHMgPSB0cnVlOwogCQl9IGVsc2UgewotCQkJbWFzayA9IH4weDU7CisJCQltYXNrID0gfjB4NzsKKwkJCWlmIChjb25mICYgMHgyKQorCQkJCWVudHJ5LT5sdmRzY29uZi51c2VfYWNwaV9mb3JfZWRpZCA9IHRydWU7CiAJCQlpZiAoY29uZiAmIDB4NCkKIAkJCQllbnRyeS0+bHZkc2NvbmYudXNlX3Bvd2VyX3NjcmlwdHMgPSB0cnVlOworCQkJZW50cnktPmx2ZHNjb25mLnNvci5saW5rID0gKGNvbmYgJiAweDAwMDAwMDMwKSA+PiA0OwogCQl9CiAJCWlmIChjb25mICYgbWFzaykgewogCQkJLyoKQEAgLTU3MjEsMTMgKzYwNTUsNiBAQAogCWNhc2UgT1VUUFVUX1RWOgogCQllbnRyeS0+dHZjb25mLmhhc19jb21wb25lbnRfb3V0cHV0ID0gZmFsc2U7CiAJCWJyZWFrOwotCWNhc2UgT1VUUFVUX1RNRFM6Ci0JCS8qCi0JCSAqIEludmVudCBhIERWSS1BIG91dHB1dCwgYnkgY29weWluZyB0aGUgZmllbGRzIG9mIHRoZSBEVkktRAotCQkgKiBvdXRwdXQ7IHJlcG9ydGVkIHRvIHdvcmsgYnkgbWF0aF9iIG9uIGFuIE5WMjAoISkuCi0JCSAqLwotCQlmYWJyaWNhdGVfdmdhX291dHB1dChkY2IsIGVudHJ5LT5pMmNfaW5kZXgsIGVudHJ5LT5oZWFkcyk7Ci0JCWJyZWFrOwogCWNhc2UgT1VUUFVUX0xWRFM6CiAJCWlmICgoY29ubiAmIDB4MDAwMDNmMDApICE9IDB4MTApCiAJCQllbnRyeS0+bHZkc2NvbmYudXNlX3N0cmFwc19mb3JfbW9kZSA9IHRydWU7CkBAIC01ODA4LDYgKzYxMzUsMzEgQEAKIAlkY2ItPmVudHJpZXMgPSBuZXdlbnRyaWVzOwogfQogCitzdGF0aWMgYm9vbAorYXBwbHlfZGNiX2VuY29kZXJfcXVpcmtzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBpZHgsIHUzMiAqY29ubiwgdTMyICpjb25mKQoreworCS8qIERlbGwgUHJlY2lzaW9uIE02MzAwCisJICogICBEQ0IgZW50cnkgMjogMDIwMjUzMTIgMDAwMDAwMTAKKwkgKiAgIERDQiBlbnRyeSAzOiAwMjAyNjMxMiAwMDAwMDAyMAorCSAqCisJICogSWRlbnRpY2FsLCBleGNlcHQgYXBwYXJlbnRseSBhIGRpZmZlcmVudCBjb25uZWN0b3Igb24gYQorCSAqIGRpZmZlcmVudCBTT1IgbGluay4gIE5vdCBhIGNsdWUgaG93IHdlJ3JlIHN1cHBvc2VkIHRvIGtub3cKKwkgKiB3aGljaCBvbmUgaXMgaW4gdXNlIGlmIGl0IGV2ZW4gc2hhcmVzIGFuIGkyYyBsaW5lLi4uCisJICoKKwkgKiBJZ25vcmUgdGhlIGNvbm5lY3RvciBvbiB0aGUgc2Vjb25kIFNPUiBsaW5rIHRvIHByZXZlbnQKKwkgKiBuYXN0eSBwcm9ibGVtcyB1bnRpbCB0aGlzIGlzIHNvcnRlZCAoYXNzdW1pbmcgaXQncyBub3QgYQorCSAqIFZCSU9TIGJ1ZykuCisJICovCisJaWYgKChkZXYtPnBkZXYtPmRldmljZSA9PSAweDA0MGQpICYmCisJICAgIChkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxMDI4KSAmJgorCSAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDE5YikpIHsKKwkJaWYgKCpjb25uID09IDB4MDIwMjYzMTIgJiYgKmNvbmYgPT0gMHgwMDAwMDAyMCkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIGludAogcGFyc2VfZGNiX3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBudmJpb3MgKmJpb3MsIGJvb2wgdHdvSGVhZHMpCiB7CkBAIC01OTQxLDYgKzYyOTMsOSBAQAogCQlpZiAoKGNvbm5lY3Rpb24gJiAweDAwMDAwMDBmKSA9PSAweDAwMDAwMDBmKQogCQkJY29udGludWU7CiAKKwkJaWYgKCFhcHBseV9kY2JfZW5jb2Rlcl9xdWlya3MoZGV2LCBpLCAmY29ubmVjdGlvbiwgJmNvbmZpZykpCisJCQljb250aW51ZTsKKwogCQlOVl9UUkFDRVdBUk4oZGV2LCAiUmF3IERDQiBlbnRyeSAlZDogJTA4eCAlMDh4XG4iLAogCQkJICAgICBkY2ItPmVudHJpZXMsIGNvbm5lY3Rpb24sIGNvbmZpZyk7CiAKQEAgLTYxOTYsOSArNjU1MSw4IEBACiAJc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+dmJpb3M7CiAJaW50IGksIHJldCA9IDA7CiAKLQlOVkxvY2tWZ2FDcnRjcyhkZXYsIGZhbHNlKTsKLQlpZiAobnZfdHdvX2hlYWRzKGRldikpCi0JCU5WU2V0T3duZXIoZGV2LCBiaW9zLT5zdGF0ZS5jcnRjaGVhZCk7CisJLyogUmVzZXQgdGhlIEJJT1MgaGVhZCB0byAwLiAqLworCWJpb3MtPnN0YXRlLmNydGNoZWFkID0gMDsKIAogCWlmIChiaW9zLT5tYWpvcl92ZXJzaW9uIDwgNSkJLyogQk1QIG9ubHkgKi8KIAkJbG9hZF9udjE3X2h3X3NlcXVlbmNlcl91Y29kZShkZXYsIGJpb3MpOwpAQCAtNjIzMSw4ICs2NTg1LDYgQEAKIAkJfQogCX0KIAotCU5WTG9ja1ZnYUNydGNzKGRldiwgdHJ1ZSk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC02MjUzLDcgKzY2MDUsNiBAQAogbm91dmVhdV9iaW9zX3Bvc3RlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JYm9vbCB3YXNfbG9ja2VkOwogCXVuc2lnbmVkIGh0b3RhbDsKIAogCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSBOVl81MCkgewpAQCAtNjI2MywxMyArNjYxNCwxMiBAQAogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKLQl3YXNfbG9ja2VkID0gTlZMb2NrVmdhQ3J0Y3MoZGV2LCBmYWxzZSk7CiAJaHRvdGFsICA9IE5WUmVhZFZnYUNydGMoZGV2LCAwLCAweDA2KTsKIAlodG90YWwgfD0gKE5WUmVhZFZnYUNydGMoZGV2LCAwLCAweDA3KSAmIDB4MDEpIDw8IDg7CiAJaHRvdGFsIHw9IChOVlJlYWRWZ2FDcnRjKGRldiwgMCwgMHgwNykgJiAweDIwKSA8PCA0OwogCWh0b3RhbCB8PSAoTlZSZWFkVmdhQ3J0YyhkZXYsIDAsIDB4MjUpICYgMHgwMSkgPDwgMTA7CiAJaHRvdGFsIHw9IChOVlJlYWRWZ2FDcnRjKGRldiwgMCwgMHg0MSkgJiAweDAxKSA8PCAxMTsKLQlOVkxvY2tWZ2FDcnRjcyhkZXYsIHdhc19sb2NrZWQpOworCiAJcmV0dXJuIChodG90YWwgIT0gMCk7CiB9CiAKQEAgLTYyNzgsOCArNjYyOCw2IEBACiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT52YmlvczsKLQl1aW50MzJfdCBzYXZlZF9udl9wZXh0ZGV2X2Jvb3RfMDsKLQlib29sIHdhc19sb2NrZWQ7CiAJaW50IHJldDsKIAogCWlmICghTlZJbml0VkJJT1MoZGV2KSkKQEAgLTYyOTksNDAgKzY2NDcsMjcgQEAKIAlpZiAoIWJpb3MtPm1ham9yX3ZlcnNpb24pCS8qIHdlIGRvbid0IHJ1biB2ZXJzaW9uIDAgYmlvcyAqLwogCQlyZXR1cm4gMDsKIAotCS8qIHRoZXNlIHdpbGwgbmVlZCByZW1lbWJlcmluZyBhY3Jvc3MgYSBzdXNwZW5kICovCi0Jc2F2ZWRfbnZfcGV4dGRldl9ib290XzAgPSBiaW9zX3JkMzIoYmlvcywgTlZfUEVYVERFVl9CT09UXzApOwotCWJpb3MtPnN0YXRlLnNhdmVkX252X3BmYl9jZmcwID0gYmlvc19yZDMyKGJpb3MsIE5WX1BGQl9DRkcwKTsKLQogCS8qIGluaXQgc2NyaXB0IGV4ZWN1dGlvbiBkaXNhYmxlZCAqLwogCWJpb3MtPmV4ZWN1dGUgPSBmYWxzZTsKIAogCS8qIC4uLiB1bmxlc3MgY2FyZCBpc24ndCBQT1NUZWQgYWxyZWFkeSAqLwogCWlmICghbm91dmVhdV9iaW9zX3Bvc3RlZChkZXYpKSB7Ci0JCU5WX0lORk8oZGV2LCAiQWRhcHRvciBub3QgaW5pdGlhbGlzZWRcbiIpOwotCQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA8IE5WXzQwKSB7Ci0JCQlOVl9FUlJPUihkZXYsICJVbmFibGUgdG8gUE9TVCB0aGlzIGNoaXBzZXRcbiIpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KLQotCQlOVl9JTkZPKGRldiwgIlJ1bm5pbmcgVkJJT1MgaW5pdCB0YWJsZXNcbiIpOworCQlOVl9JTkZPKGRldiwgIkFkYXB0b3Igbm90IGluaXRpYWxpc2VkLCAiCisJCQkicnVubmluZyBWQklPUyBpbml0IHRhYmxlcy5cbiIpOwogCQliaW9zLT5leGVjdXRlID0gdHJ1ZTsKIAl9CiAKLQliaW9zX3dyMzIoYmlvcywgTlZfUEVYVERFVl9CT09UXzAsIHNhdmVkX252X3BleHRkZXZfYm9vdF8wKTsKLQogCXJldCA9IG5vdXZlYXVfcnVuX3ZiaW9zX2luaXQoZGV2KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJLyogZmVhdHVyZV9ieXRlIG9uIEJNUCBpcyBwb29yLCBidXQgaW5pdCBhbHdheXMgc2V0cyBDUjRCICovCi0Jd2FzX2xvY2tlZCA9IE5WTG9ja1ZnYUNydGNzKGRldiwgZmFsc2UpOwogCWlmIChiaW9zLT5tYWpvcl92ZXJzaW9uIDwgNSkKIAkJYmlvcy0+aXNfbW9iaWxlID0gTlZSZWFkVmdhQ3J0YyhkZXYsIDAsIE5WX0NJT19DUkVfNEIpICYgMHg0MDsKIAogCS8qIGFsbCBCSVQgc3lzdGVtcyBuZWVkIHBfZl9tX3QgZm9yIGRpZ2l0YWxfbWluX2Zyb250X3BvcmNoICovCiAJaWYgKGJpb3MtPmlzX21vYmlsZSB8fCBiaW9zLT5tYWpvcl92ZXJzaW9uID49IDUpCiAJCXJldCA9IHBhcnNlX2ZwX21vZGVfdGFibGUoZGV2LCBiaW9zKTsKLQlOVkxvY2tWZ2FDcnRjcyhkZXYsIHdhc19sb2NrZWQpOwogCiAJLyogYWxsb3cgc3Vic2VxdWVudCBzY3JpcHRzIHRvIGV4ZWN1dGUgKi8KIAliaW9zLT5leGVjdXRlID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5oIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmgKaW5kZXggYWRmNGVjMi4uMDI0NDU4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmgKQEAgLTgxLDYgKzgxLDcgQEAKIAllbnVtIGRjYl9jb25uZWN0b3JfdHlwZSB0eXBlOwogCXVpbnQ4X3QgaW5kZXgyOwogCXVpbnQ4X3QgZ3Bpb190YWc7CisJdm9pZCAqZHJtOwogfTsKIAogc3RydWN0IGRjYl9jb25uZWN0b3JfdGFibGUgewpAQCAtMTE3LDYgKzExOCw3IEBACiAJCXN0cnVjdCB7CiAJCQlzdHJ1Y3Qgc29yX2NvbmYgc29yOwogCQkJYm9vbCB1c2Vfc3RyYXBzX2Zvcl9tb2RlOworCQkJYm9vbCB1c2VfYWNwaV9mb3JfZWRpZDsKIAkJCWJvb2wgdXNlX3Bvd2VyX3NjcmlwdHM7CiAJCX0gbHZkc2NvbmY7CiAJCXN0cnVjdCB7CkBAIC0yNDksOCArMjUxLDYgQEAKIAogCXN0cnVjdCB7CiAJCWludCBjcnRjaGVhZDsKLQkJLyogdGhlc2UgbmVlZCByZW1lbWJlcmluZyBhY3Jvc3Mgc3VzcGVuZCAqLwotCQl1aW50MzJfdCBzYXZlZF9udl9wZmJfY2ZnMDsKIAl9IHN0YXRlOwogCiAJc3RydWN0IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYm8uYwppbmRleCA2ZjNjMTk1Li4zY2E4MzQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2JvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5jCkBAIC00NjEsOSArNDYxLDkgQEAKIAkJcmV0dXJuIHJldDsKIAogCXJldCA9IHR0bV9ib19tb3ZlX2FjY2VsX2NsZWFudXAoJm52Ym8tPmJvLCBmZW5jZSwgTlVMTCwKLQkJCQkJZXZpY3QsIG5vX3dhaXRfcmVzZXJ2ZSwgbm9fd2FpdF9ncHUsIG5ld19tZW0pOwotCWlmIChudmJvLT5jaGFubmVsICYmIG52Ym8tPmNoYW5uZWwgIT0gY2hhbikKLQkJcmV0ID0gbm91dmVhdV9mZW5jZV93YWl0KGZlbmNlLCBOVUxMLCBmYWxzZSwgZmFsc2UpOworCQkJCQlldmljdCB8fCAobnZiby0+Y2hhbm5lbCAmJgorCQkJCQkJICBudmJvLT5jaGFubmVsICE9IGNoYW4pLAorCQkJCQlub193YWl0X3Jlc2VydmUsIG5vX3dhaXRfZ3B1LCBuZXdfbWVtKTsKIAlub3V2ZWF1X2ZlbmNlX3VucmVmKCh2b2lkICopJmZlbmNlKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNzExLDggKzcxMSw3IEBACiAJCXJldHVybiByZXQ7CiAKIAkvKiBTb2Z0d2FyZSBjb3B5IGlmIHRoZSBjYXJkIGlzbid0IHVwIGFuZCBydW5uaW5nIHlldC4gKi8KLQlpZiAoZGV2X3ByaXYtPmluaXRfc3RhdGUgIT0gTk9VVkVBVV9DQVJEX0lOSVRfRE9ORSB8fAotCSAgICAhZGV2X3ByaXYtPmNoYW5uZWwpIHsKKwlpZiAoIWRldl9wcml2LT5jaGFubmVsKSB7CiAJCXJldCA9IHR0bV9ib19tb3ZlX21lbWNweShibywgZXZpY3QsIG5vX3dhaXRfcmVzZXJ2ZSwgbm9fd2FpdF9ncHUsIG5ld19tZW0pOwogCQlnb3RvIG91dDsKIAl9CkBAIC03ODMsNyArNzgyLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBUVE1fUExfVlJBTToKIAkJbWVtLT5idXMub2Zmc2V0ID0gbWVtLT5tbV9ub2RlLT5zdGFydCA8PCBQQUdFX1NISUZUOwotCQltZW0tPmJ1cy5iYXNlID0gZHJtX2dldF9yZXNvdXJjZV9zdGFydChkZXYsIDEpOworCQltZW0tPmJ1cy5iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgMSk7CiAJCW1lbS0+YnVzLmlzX2lvbWVtID0gdHJ1ZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY2FsYy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jYWxjLmMKaW5kZXggODhmOWJjMC4uY2E4NWRhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jYWxjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jYWxjLmMKQEAgLTIwMCw3ICsyMDAsNyBAQAogCXN0cnVjdCBudl9zaW1fc3RhdGUgc2ltX2RhdGE7CiAJaW50IE1DbGsgPSBub3V2ZWF1X2h3X2dldF9jbG9jayhkZXYsIE1QTEwpOwogCWludCBOVkNsayA9IG5vdXZlYXVfaHdfZ2V0X2Nsb2NrKGRldiwgTlZQTEwpOwotCXVpbnQzMl90IGNmZzEgPSBudlJlYWRGQihkZXYsIE5WX1BGQl9DRkcxKTsKKwl1aW50MzJfdCBjZmcxID0gbnZSZWFkRkIoZGV2LCBOVjA0X1BGQl9DRkcxKTsKIAogCXNpbV9kYXRhLnBjbGtfa2h6ID0gVkNsazsKIAlzaW1fZGF0YS5tY2xrX2toeiA9IE1DbGs7CkBAIC0yMTgsNyArMjE4LDcgQEAKIAkJc2ltX2RhdGEubWVtX2xhdGVuY3kgPSAzOwogCQlzaW1fZGF0YS5tZW1fcGFnZV9taXNzID0gMTA7CiAJfSBlbHNlIHsKLQkJc2ltX2RhdGEubWVtb3J5X3R5cGUgPSBudlJlYWRGQihkZXYsIE5WX1BGQl9DRkcwKSAmIDB4MTsKKwkJc2ltX2RhdGEubWVtb3J5X3R5cGUgPSBudlJlYWRGQihkZXYsIE5WMDRfUEZCX0NGRzApICYgMHgxOwogCQlzaW1fZGF0YS5tZW1vcnlfd2lkdGggPSAobnZSZWFkRVhUREVWKGRldiwgTlZfUEVYVERFVl9CT09UXzApICYgMHgxMCkgPyAxMjggOiA2NDsKIAkJc2ltX2RhdGEubWVtX2xhdGVuY3kgPSBjZmcxICYgMHhmOwogCQlzaW1fZGF0YS5tZW1fcGFnZV9taXNzID0gKChjZmcxID4+IDQpICYgMHhmKSArICgoY2ZnMSA+PiAzMSkgJiAweDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jaGFubmVsLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2NoYW5uZWwuYwppbmRleCAxZmM1N2VmLi45MGZkY2RhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2NoYW5uZWwuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2NoYW5uZWwuYwpAQCAtNjIsNyArNjIsOCBAQAogCQkgKiBWUkFNLgogCQkgKi8KIAkJcmV0ID0gbm91dmVhdV9ncHVvYmpfZG1hX25ldyhjaGFuLCBOVl9DTEFTU19ETUFfSU5fTUVNT1JZLAotCQkJCQkgICAgIGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQoZGV2LCAxKSwKKwkJCQkJICAgICBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LAorCQkJCQkgICAgIDEpLAogCQkJCQkgICAgIGRldl9wcml2LT5mYl9hdmFpbGFibGVfc2l6ZSwKIAkJCQkJICAgICBOVl9ETUFfQUNDRVNTX1JPLAogCQkJCQkgICAgIE5WX0RNQV9UQVJHRVRfUENJLCAmcHVzaGJ1Zik7CkBAIC0yNTcsOSArMjU4LDcgQEAKIAlub3V2ZWF1X2RlYnVnZnNfY2hhbm5lbF9maW5pKGNoYW4pOwogCiAJLyogR2l2ZSBvdXRzdGFuZGluZyBwdXNoIGJ1ZmZlcnMgYSBjaGFuY2UgdG8gY29tcGxldGUgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbi0+ZmVuY2UubG9jaywgZmxhZ3MpOwogCW5vdXZlYXVfZmVuY2VfdXBkYXRlKGNoYW4pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPmZlbmNlLmxvY2ssIGZsYWdzKTsKIAlpZiAoY2hhbi0+ZmVuY2Uuc2VxdWVuY2UgIT0gY2hhbi0+ZmVuY2Uuc2VxdWVuY2VfYWNrKSB7CiAJCXN0cnVjdCBub3V2ZWF1X2ZlbmNlICpmZW5jZSA9IE5VTEw7CiAKQEAgLTM2OCw4ICszNjcsNiBAQAogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW47CiAJaW50IHJldDsKIAotCU5PVVZFQVVfQ0hFQ0tfSU5JVElBTElTRURfV0lUSF9SRVRVUk47Ci0KIAlpZiAoZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC5hY2NlbF9ibG9ja2VkKQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtNDE4LDcgKzQxNSw2IEBACiAJc3RydWN0IGRybV9ub3V2ZWF1X2NoYW5uZWxfZnJlZSAqY2ZyZWUgPSBkYXRhOwogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW47CiAKLQlOT1VWRUFVX0NIRUNLX0lOSVRJQUxJU0VEX1dJVEhfUkVUVVJOOwogCU5PVVZFQVVfR0VUX1VTRVJfQ0hBTk5FTF9XSVRIX1JFVFVSTihjZnJlZS0+Y2hhbm5lbCwgZmlsZV9wcml2LCBjaGFuKTsKIAogCW5vdXZlYXVfY2hhbm5lbF9mcmVlKGNoYW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY29ubmVjdG9yLmMKaW5kZXggMTQ5ZWQyMi4uNzM0ZTkyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Nvbm5lY3Rvci5jCkBAIC0xMDIsNjMgKzEwMiwxNSBAQAogCWtmcmVlKGRybV9jb25uZWN0b3IpOwogfQogCi1zdGF0aWMgdm9pZAotbm91dmVhdV9jb25uZWN0b3JfZGRjX3ByZXBhcmUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgaW50ICpmbGFncykKLXsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjb25uZWN0b3ItPmRldi0+ZGV2X3ByaXZhdGU7Ci0KLQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl81MCkKLQkJcmV0dXJuOwotCi0JKmZsYWdzID0gMDsKLQlpZiAoTlZMb2NrVmdhQ3J0Y3MoZGV2X3ByaXYtPmRldiwgZmFsc2UpKQotCQkqZmxhZ3MgfD0gMTsKLQlpZiAobnZfaGVhZHNfdGllZChkZXZfcHJpdi0+ZGV2KSkKLQkJKmZsYWdzIHw9IDI7Ci0KLQlpZiAoKmZsYWdzICYgMikKLQkJTlZTZXRPd25lcihkZXZfcHJpdi0+ZGV2LCAwKTsgLyogbmVjZXNzYXJ5PyAqLwotfQotCi1zdGF0aWMgdm9pZAotbm91dmVhdV9jb25uZWN0b3JfZGRjX2ZpbmlzaChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBpbnQgZmxhZ3MpCi17Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY29ubmVjdG9yLT5kZXYtPmRldl9wcml2YXRlOwotCi0JaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfNTApCi0JCXJldHVybjsKLQotCWlmIChmbGFncyAmIDIpCi0JCU5WU2V0T3duZXIoZGV2X3ByaXYtPmRldiwgNCk7Ci0JaWYgKGZsYWdzICYgMSkKLQkJTlZMb2NrVmdhQ3J0Y3MoZGV2X3ByaXYtPmRldiwgdHJ1ZSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3Qgbm91dmVhdV9pMmNfY2hhbiAqCiBub3V2ZWF1X2Nvbm5lY3Rvcl9kZGNfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJCQkgICAgIHN0cnVjdCBub3V2ZWF1X2VuY29kZXIgKipwbnZfZW5jb2RlcikKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7Ci0JdWludDhfdCBvdXRfYnVmW10gPSB7IDB4MCwgMHgwfSwgYnVmWzJdOwotCWludCByZXQsIGZsYWdzLCBpOwotCi0Jc3RydWN0IGkyY19tc2cgbXNnc1tdID0gewotCQl7Ci0JCQkuYWRkciA9IDB4NTAsCi0JCQkuZmxhZ3MgPSAwLAotCQkJLmxlbiA9IDEsCi0JCQkuYnVmID0gb3V0X2J1ZiwKLQkJfSwKLQkJewotCQkJLmFkZHIgPSAweDUwLAotCQkJLmZsYWdzID0gSTJDX01fUkQsCi0JCQkubGVuID0gMSwKLQkJCS5idWYgPSBidWYsCi0JCX0KLQl9OworCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IERSTV9DT05ORUNUT1JfTUFYX0VOQ09ERVI7IGkrKykgewotCQlzdHJ1Y3Qgbm91dmVhdV9pMmNfY2hhbiAqaTJjID0gTlVMTDsKKwkJc3RydWN0IG5vdXZlYXVfaTJjX2NoYW4gKmkyYzsKIAkJc3RydWN0IG5vdXZlYXVfZW5jb2RlciAqbnZfZW5jb2RlcjsKIAkJc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqOwogCQlpbnQgaWQ7CkBAIC0xNzEsMTcgKzEyMyw5IEBACiAJCWlmICghb2JqKQogCQkJY29udGludWU7CiAJCW52X2VuY29kZXIgPSBub3V2ZWF1X2VuY29kZXIob2JqX3RvX2VuY29kZXIob2JqKSk7CisJCWkyYyA9IG5vdXZlYXVfaTJjX2ZpbmQoZGV2LCBudl9lbmNvZGVyLT5kY2ItPmkyY19pbmRleCk7CiAKLQkJaWYgKG52X2VuY29kZXItPmRjYi0+aTJjX2luZGV4IDwgMHhmKQotCQkJaTJjID0gbm91dmVhdV9pMmNfZmluZChkZXYsIG52X2VuY29kZXItPmRjYi0+aTJjX2luZGV4KTsKLQkJaWYgKCFpMmMpCi0JCQljb250aW51ZTsKLQotCQlub3V2ZWF1X2Nvbm5lY3Rvcl9kZGNfcHJlcGFyZShjb25uZWN0b3IsICZmbGFncyk7Ci0JCXJldCA9IGkyY190cmFuc2ZlcigmaTJjLT5hZGFwdGVyLCBtc2dzLCAyKTsKLQkJbm91dmVhdV9jb25uZWN0b3JfZGRjX2ZpbmlzaChjb25uZWN0b3IsIGZsYWdzKTsKLQotCQlpZiAocmV0ID09IDIpIHsKKwkJaWYgKGkyYyAmJiBub3V2ZWF1X3Byb2JlX2kyY19hZGRyKGkyYywgMHg1MCkpIHsKIAkJCSpwbnZfZW5jb2RlciA9IG52X2VuY29kZXI7CiAJCQlyZXR1cm4gaTJjOwogCQl9CkBAIC0yMzQsMjEgKzE3OCw3IEBACiAJc3RydWN0IG5vdXZlYXVfY29ubmVjdG9yICpudl9jb25uZWN0b3IgPSBub3V2ZWF1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwogCXN0cnVjdCBub3V2ZWF1X2VuY29kZXIgKm52X2VuY29kZXIgPSBOVUxMOwogCXN0cnVjdCBub3V2ZWF1X2kyY19jaGFuICppMmM7Ci0JaW50IHR5cGUsIGZsYWdzOwotCi0JaWYgKG52X2Nvbm5lY3Rvci0+ZGNiLT50eXBlID09IERDQl9DT05ORUNUT1JfTFZEUykKLQkJbnZfZW5jb2RlciA9IGZpbmRfZW5jb2Rlcl9ieV90eXBlKGNvbm5lY3RvciwgT1VUUFVUX0xWRFMpOwotCWlmIChudl9lbmNvZGVyICYmIG52X2Nvbm5lY3Rvci0+bmF0aXZlX21vZGUpIHsKLQkJdW5zaWduZWQgc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19BQ1BJX0JVVFRPTikgfHwgXAotCShkZWZpbmVkKENPTkZJR19BQ1BJX0JVVFRPTl9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKLQkJaWYgKCFub3V2ZWF1X2lnbm9yZWxpZCAmJiAhYWNwaV9saWRfb3BlbigpKQotCQkJc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c191bmtub3duOwotI2VuZGlmCi0JCW5vdXZlYXVfY29ubmVjdG9yX3NldF9lbmNvZGVyKGNvbm5lY3RvciwgbnZfZW5jb2Rlcik7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQorCWludCB0eXBlOwogCiAJLyogQ2xlYW51cCB0aGUgcHJldmlvdXMgRURJRCBibG9jay4gKi8KIAlpZiAobnZfY29ubmVjdG9yLT5lZGlkKSB7CkBAIC0yNTksOSArMTg5LDcgQEAKIAogCWkyYyA9IG5vdXZlYXVfY29ubmVjdG9yX2RkY19kZXRlY3QoY29ubmVjdG9yLCAmbnZfZW5jb2Rlcik7CiAJaWYgKGkyYykgewotCQlub3V2ZWF1X2Nvbm5lY3Rvcl9kZGNfcHJlcGFyZShjb25uZWN0b3IsICZmbGFncyk7CiAJCW52X2Nvbm5lY3Rvci0+ZWRpZCA9IGRybV9nZXRfZWRpZChjb25uZWN0b3IsICZpMmMtPmFkYXB0ZXIpOwotCQlub3V2ZWF1X2Nvbm5lY3Rvcl9kZGNfZmluaXNoKGNvbm5lY3RvciwgZmxhZ3MpOwogCQlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubmVjdG9yLAogCQkJCQkJCW52X2Nvbm5lY3Rvci0+ZWRpZCk7CiAJCWlmICghbnZfY29ubmVjdG9yLT5lZGlkKSB7CkBAIC0zMjEsNiArMjQ5LDg1IEBACiAJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwogfQogCitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cworbm91dmVhdV9jb25uZWN0b3JfZGV0ZWN0X2x2ZHMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9jb25uZWN0b3IgKm52X2Nvbm5lY3RvciA9IG5vdXZlYXVfY29ubmVjdG9yKGNvbm5lY3Rvcik7CisJc3RydWN0IG5vdXZlYXVfZW5jb2RlciAqbnZfZW5jb2RlciA9IE5VTEw7CisJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKworCS8qIENsZWFudXAgdGhlIHByZXZpb3VzIEVESUQgYmxvY2suICovCisJaWYgKG52X2Nvbm5lY3Rvci0+ZWRpZCkgeworCQlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubmVjdG9yLCBOVUxMKTsKKwkJa2ZyZWUobnZfY29ubmVjdG9yLT5lZGlkKTsKKwkJbnZfY29ubmVjdG9yLT5lZGlkID0gTlVMTDsKKwl9CisKKwludl9lbmNvZGVyID0gZmluZF9lbmNvZGVyX2J5X3R5cGUoY29ubmVjdG9yLCBPVVRQVVRfTFZEUyk7CisJaWYgKCFudl9lbmNvZGVyKQorCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CisKKwkvKiBUcnkgcmV0cmlldmluZyBFRElEIHZpYSBEREMgKi8KKwlpZiAoIWRldl9wcml2LT52Ymlvcy5mcF9ub19kZGMpIHsKKwkJc3RhdHVzID0gbm91dmVhdV9jb25uZWN0b3JfZGV0ZWN0KGNvbm5lY3Rvcik7CisJCWlmIChzdGF0dXMgPT0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQpCisJCQlnb3RvIG91dDsKKwl9CisKKwkvKiBPbiBzb21lIGxhcHRvcHMgKFNvbnksIGknbSBsb29raW5nIGF0IHlvdSkgdGhlcmUgYXBwZWFycyB0bworCSAqIGJlIG5vIGRpcmVjdCB3YXkgb2YgYWNjZXNzaW5nIHRoZSBwYW5lbCdzIEVESUQuICBUaGUgb25seQorCSAqIG9wdGlvbiBhdmFpbGFibGUgdG8gdXMgYXBwZWFycyB0byBiZSB0byBhc2sgQUNQSSBmb3IgaGVscC4uCisJICoKKwkgKiBJdCdzIGltcG9ydGFudCB0aGlzIGNoZWNrJ3MgYmVmb3JlIHRyeWluZyBzdHJhcHMsIG9uZSBvZiB0aGUKKwkgKiBzYWlkIG1hbnVmYWN0dXJlcidzIGxhcHRvcHMgYXJlIGNvbmZpZ3VyZWQgaW4gc3VjaCBhIHdheQorCSAqIHRoZSBub3V2ZWF1IGRlY2lkZXMgYW4gZW50cnkgaW4gdGhlIFZCSU9TIEZQIG1vZGUgdGFibGUgaXMKKwkgKiB2YWxpZCAtIGl0J3Mgbm90IChyaCM2MTMyODQpCisJICovCisJaWYgKG52X2VuY29kZXItPmRjYi0+bHZkc2NvbmYudXNlX2FjcGlfZm9yX2VkaWQpIHsKKwkJaWYgKCFub3V2ZWF1X2FjcGlfZWRpZChkZXYsIGNvbm5lY3RvcikpIHsKKwkJCXN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBJZiBubyBFRElEIGZvdW5kIGFib3ZlLCBhbmQgdGhlIFZCSU9TIGluZGljYXRlcyBhIGhhcmRjb2RlZAorCSAqIG1vZGVsaW5lIGlzIGF2YWxpbGFibGUgZm9yIHRoZSBwYW5lbCwgc2V0IGl0IGFzIHRoZSBwYW5lbCdzCisJICogbmF0aXZlIG1vZGUgYW5kIGV4aXQuCisJICovCisJaWYgKG5vdXZlYXVfYmlvc19mcF9tb2RlKGRldiwgTlVMTCkgJiYgKGRldl9wcml2LT52Ymlvcy5mcF9ub19kZGMgfHwKKwkgICAgbnZfZW5jb2Rlci0+ZGNiLT5sdmRzY29uZi51c2Vfc3RyYXBzX2Zvcl9tb2RlKSkgeworCQlzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogU3RpbGwgbm90aGluZywgc29tZSBWQklPUyBpbWFnZXMgaGF2ZSBhIGhhcmRjb2RlZCBFRElEIGJsb2NrCisJICogc3RvcmVkIGZvciB0aGUgcGFuZWwgc3RvcmVkIGluIHRoZW0uCisJICovCisJaWYgKCFkZXZfcHJpdi0+dmJpb3MuZnBfbm9fZGRjKSB7CisJCXN0cnVjdCBlZGlkICplZGlkID0KKwkJCShzdHJ1Y3QgZWRpZCAqKW5vdXZlYXVfYmlvc19lbWJlZGRlZF9lZGlkKGRldik7CisJCWlmIChlZGlkKSB7CisJCQludl9jb25uZWN0b3ItPmVkaWQgPSBrbWFsbG9jKEVESURfTEVOR1RILCBHRlBfS0VSTkVMKTsKKwkJCSoobnZfY29ubmVjdG9yLT5lZGlkKSA9ICplZGlkOworCQkJc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJCX0KKwl9CisKK291dDoKKyNpZiBkZWZpbmVkKENPTkZJR19BQ1BJX0JVVFRPTikgfHwgXAorCShkZWZpbmVkKENPTkZJR19BQ1BJX0JVVFRPTl9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKKwlpZiAoc3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkICYmCisJICAgICFub3V2ZWF1X2lnbm9yZWxpZCAmJiAhYWNwaV9saWRfb3BlbigpKQorCQlzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX3Vua25vd247CisjZW5kaWYKKworCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsIG52X2Nvbm5lY3Rvci0+ZWRpZCk7CisJbm91dmVhdV9jb25uZWN0b3Jfc2V0X2VuY29kZXIoY29ubmVjdG9yLCBudl9lbmNvZGVyKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCiBzdGF0aWMgdm9pZAogbm91dmVhdV9jb25uZWN0b3JfZm9yY2Uoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIHsKQEAgLTQ0MSw3ICs0NDgsOCBAQAogCWludCBoaWdoX3cgPSAwLCBoaWdoX2ggPSAwLCBoaWdoX3YgPSAwOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2RlLCAmbnZfY29ubmVjdG9yLT5iYXNlLnByb2JlZF9tb2RlcywgaGVhZCkgewotCQlpZiAoaGVscGVyLT5tb2RlX3ZhbGlkKGNvbm5lY3RvciwgbW9kZSkgIT0gTU9ERV9PSykKKwkJaWYgKGhlbHBlci0+bW9kZV92YWxpZChjb25uZWN0b3IsIG1vZGUpICE9IE1PREVfT0sgfHwKKwkJICAgIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIFVzZSBwcmVmZXJyZWQgbW9kZSBpZiB0aGVyZSBpcyBvbmUuLiAqLwpAQCAtNTM0LDIxICs1NDIsMjcgQEAKIG5vdXZlYXVfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBub3V2ZWF1X2Nvbm5lY3RvciAqbnZfY29ubmVjdG9yID0gbm91dmVhdV9jb25uZWN0b3IoY29ubmVjdG9yKTsKIAlzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpudl9lbmNvZGVyID0gbnZfY29ubmVjdG9yLT5kZXRlY3RlZF9lbmNvZGVyOwogCWludCByZXQgPSAwOwogCi0JLyogSWYgd2UncmUgbm90IExWRFMsIGRlc3Ryb3kgdGhlIHByZXZpb3VzIG5hdGl2ZSBtb2RlLCB0aGUgYXR0YWNoZWQKLQkgKiBtb25pdG9yIGNvdWxkIGhhdmUgY2hhbmdlZC4KKwkvKiBkZXN0cm95IHRoZSBuYXRpdmUgbW9kZSwgdGhlIGF0dGFjaGVkIG1vbml0b3IgY291bGQgaGF2ZSBjaGFuZ2VkLgogCSAqLwotCWlmIChudl9jb25uZWN0b3ItPmRjYi0+dHlwZSAhPSBEQ0JfQ09OTkVDVE9SX0xWRFMgJiYKLQkgICAgbnZfY29ubmVjdG9yLT5uYXRpdmVfbW9kZSkgeworCWlmIChudl9jb25uZWN0b3ItPm5hdGl2ZV9tb2RlKSB7CiAJCWRybV9tb2RlX2Rlc3Ryb3koZGV2LCBudl9jb25uZWN0b3ItPm5hdGl2ZV9tb2RlKTsKIAkJbnZfY29ubmVjdG9yLT5uYXRpdmVfbW9kZSA9IE5VTEw7CiAJfQogCiAJaWYgKG52X2Nvbm5lY3Rvci0+ZWRpZCkKIAkJcmV0ID0gZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgbnZfY29ubmVjdG9yLT5lZGlkKTsKKwllbHNlCisJaWYgKG52X2VuY29kZXItPmRjYi0+dHlwZSA9PSBPVVRQVVRfTFZEUyAmJgorCSAgICAobnZfZW5jb2Rlci0+ZGNiLT5sdmRzY29uZi51c2Vfc3RyYXBzX2Zvcl9tb2RlIHx8CisJICAgICBkZXZfcHJpdi0+dmJpb3MuZnBfbm9fZGRjKSAmJiBub3V2ZWF1X2Jpb3NfZnBfbW9kZShkZXYsIE5VTEwpKSB7CisJCW52X2Nvbm5lY3Rvci0+bmF0aXZlX21vZGUgPSBkcm1fbW9kZV9jcmVhdGUoZGV2KTsKKwkJbm91dmVhdV9iaW9zX2ZwX21vZGUoZGV2LCBudl9jb25uZWN0b3ItPm5hdGl2ZV9tb2RlKTsKKwl9CiAKIAkvKiBGaW5kIHRoZSBuYXRpdmUgbW9kZSBpZiB0aGlzIGlzIGEgZGlnaXRhbCBwYW5lbCwgaWYgd2UgZGlkbid0CiAJICogZmluZCBhbnkgbW9kZXMgdGhyb3VnaCBEREMgcHJldmlvdXNseSBhZGQgdGhlIG5hdGl2ZSBtb2RlIHRvCkBAIC01NjksNyArNTgzLDggQEAKIAkJcmV0ID0gZ2V0X3NsYXZlX2Z1bmNzKG52X2VuY29kZXIpLT4KIAkJCWdldF9tb2Rlcyh0b19kcm1fZW5jb2Rlcihudl9lbmNvZGVyKSwgY29ubmVjdG9yKTsKIAotCWlmIChudl9lbmNvZGVyLT5kY2ItPnR5cGUgPT0gT1VUUFVUX0xWRFMpCisJaWYgKG52X2Nvbm5lY3Rvci0+ZGNiLT50eXBlID09IERDQl9DT05ORUNUT1JfTFZEUyB8fAorCSAgICBudl9jb25uZWN0b3ItPmRjYi0+dHlwZSA9PSBEQ0JfQ09OTkVDVE9SX2VEUCkKIAkJcmV0ICs9IG5vdXZlYXVfY29ubmVjdG9yX3NjYWxlcl9tb2Rlc19hZGQoY29ubmVjdG9yKTsKIAogCXJldHVybiByZXQ7CkBAIC02NDMsNiArNjU4LDQ0IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3ZvaWQKK25vdXZlYXVfY29ubmVjdG9yX3NldF9wb2xsaW5nKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCWJvb2wgc3BhcmVfY3J0YyA9IGZhbHNlOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpCisJCXNwYXJlX2NydGMgfD0gIWNydGMtPmVuYWJsZWQ7CisKKwljb25uZWN0b3ItPnBvbGxlZCA9IDA7CisKKwlzd2l0Y2ggKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUpIHsKKwljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0E6CisJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfVFY6CisJCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WXzUwIHx8CisJCSAgICAobnZfZ2Y0X2Rpc3BfYXJjaChkZXYpICYmIHNwYXJlX2NydGMpKQorCQkJY29ubmVjdG9yLT5wb2xsZWQgPSBEUk1fQ09OTkVDVE9SX1BPTExfQ09OTkVDVDsKKwkJYnJlYWs7CisKKwljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJOgorCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0RWSUQ6CisJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUE6CisJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQ6CisJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfZURQOgorCQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl81MCkKKwkJCWNvbm5lY3Rvci0+cG9sbGVkID0gRFJNX0NPTk5FQ1RPUl9QT0xMX0hQRDsKKwkJZWxzZSBpZiAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRCB8fAorCQkJIHNwYXJlX2NydGMpCisJCQljb25uZWN0b3ItPnBvbGxlZCA9IERSTV9DT05ORUNUT1JfUE9MTF9DT05ORUNUOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcwogbm91dmVhdV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0gewogCS5nZXRfbW9kZXMgPSBub3V2ZWF1X2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCkBAIC02NjIsMTQ4ICs3MTUsNzQgQEAKIAkuZm9yY2UgPSBub3V2ZWF1X2Nvbm5lY3Rvcl9mb3JjZQogfTsKIAotc3RhdGljIGludAotbm91dmVhdV9jb25uZWN0b3JfY3JlYXRlX2x2ZHMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MKK25vdXZlYXVfY29ubmVjdG9yX2Z1bmNzX2x2ZHMgPSB7CisJLmRwbXMgPSBkcm1faGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAorCS5zYXZlID0gTlVMTCwKKwkucmVzdG9yZSA9IE5VTEwsCisJLmRldGVjdCA9IG5vdXZlYXVfY29ubmVjdG9yX2RldGVjdF9sdmRzLAorCS5kZXN0cm95ID0gbm91dmVhdV9jb25uZWN0b3JfZGVzdHJveSwKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuc2V0X3Byb3BlcnR5ID0gbm91dmVhdV9jb25uZWN0b3Jfc2V0X3Byb3BlcnR5LAorCS5mb3JjZSA9IG5vdXZlYXVfY29ubmVjdG9yX2ZvcmNlCit9OworCitzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqCitub3V2ZWF1X2Nvbm5lY3Rvcl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGluZGV4KQogewotCXN0cnVjdCBub3V2ZWF1X2Nvbm5lY3RvciAqbnZfY29ubmVjdG9yID0gbm91dmVhdV9jb25uZWN0b3IoY29ubmVjdG9yKTsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBub3V2ZWF1X2kyY19jaGFuICppMmMgPSBOVUxMOwotCXN0cnVjdCBub3V2ZWF1X2VuY29kZXIgKm52X2VuY29kZXI7Ci0Jc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbmF0aXZlLCAqbW9kZSwgKnRlbXA7Ci0JYm9vbCBkdW1teSwgaWZfaXNfMjRiaXQgPSBmYWxzZTsKLQlpbnQgcmV0LCBmbGFnczsKLQotCW52X2VuY29kZXIgPSBmaW5kX2VuY29kZXJfYnlfdHlwZShjb25uZWN0b3IsIE9VVFBVVF9MVkRTKTsKLQlpZiAoIW52X2VuY29kZXIpCi0JCXJldHVybiAtRU5PREVWOwotCi0JcmV0ID0gbm91dmVhdV9iaW9zX3BhcnNlX2x2ZHNfdGFibGUoZGV2LCAwLCAmZHVtbXksICZpZl9pc18yNGJpdCk7Ci0JaWYgKHJldCkgewotCQlOVl9FUlJPUihkZXYsICJFcnJvciBwYXJzaW5nIExWRFMgdGFibGUsIGRpc2FibGluZyBMVkRTXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JbnZfY29ubmVjdG9yLT51c2VfZGl0aGVyaW5nID0gIWlmX2lzXzI0Yml0OwotCi0JLyogRmlyc3RseSB0cnkgZ2V0dGluZyBFRElEIG92ZXIgRERDLCBpZiBhbGxvd2VkIGFuZCBJMkMgY2hhbm5lbAotCSAqIGlzIGF2YWlsYWJsZS4KLQkgKi8KLQlpZiAoIWRldl9wcml2LT52Ymlvcy5mcF9ub19kZGMgJiYgbnZfZW5jb2Rlci0+ZGNiLT5pMmNfaW5kZXggPCAweGYpCi0JCWkyYyA9IG5vdXZlYXVfaTJjX2ZpbmQoZGV2LCBudl9lbmNvZGVyLT5kY2ItPmkyY19pbmRleCk7Ci0KLQlpZiAoaTJjKSB7Ci0JCW5vdXZlYXVfY29ubmVjdG9yX2RkY19wcmVwYXJlKGNvbm5lY3RvciwgJmZsYWdzKTsKLQkJbnZfY29ubmVjdG9yLT5lZGlkID0gZHJtX2dldF9lZGlkKGNvbm5lY3RvciwgJmkyYy0+YWRhcHRlcik7Ci0JCW5vdXZlYXVfY29ubmVjdG9yX2RkY19maW5pc2goY29ubmVjdG9yLCBmbGFncyk7Ci0JfQotCi0JLyogSWYgbm8gRURJRCBmb3VuZCBhYm92ZSwgYW5kIHRoZSBWQklPUyBpbmRpY2F0ZXMgYSBoYXJkY29kZWQKLQkgKiBtb2RlbGluZSBpcyBhdmFsaWxhYmxlIGZvciB0aGUgcGFuZWwsIHNldCBpdCBhcyB0aGUgcGFuZWwncwotCSAqIG5hdGl2ZSBtb2RlIGFuZCBleGl0LgotCSAqLwotCWlmICghbnZfY29ubmVjdG9yLT5lZGlkICYmIG5vdXZlYXVfYmlvc19mcF9tb2RlKGRldiwgJm5hdGl2ZSkgJiYKLQkgICAgIChudl9lbmNvZGVyLT5kY2ItPmx2ZHNjb25mLnVzZV9zdHJhcHNfZm9yX21vZGUgfHwKLQkgICAgICBkZXZfcHJpdi0+dmJpb3MuZnBfbm9fZGRjKSkgewotCQludl9jb25uZWN0b3ItPm5hdGl2ZV9tb2RlID0gZHJtX21vZGVfZHVwbGljYXRlKGRldiwgJm5hdGl2ZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIFN0aWxsIG5vdGhpbmcsIHNvbWUgVkJJT1MgaW1hZ2VzIGhhdmUgYSBoYXJkY29kZWQgRURJRCBibG9jawotCSAqIHN0b3JlZCBmb3IgdGhlIHBhbmVsIHN0b3JlZCBpbiB0aGVtLgotCSAqLwotCWlmICghbnZfY29ubmVjdG9yLT5lZGlkICYmICFudl9jb25uZWN0b3ItPm5hdGl2ZV9tb2RlICYmCi0JICAgICFkZXZfcHJpdi0+dmJpb3MuZnBfbm9fZGRjKSB7Ci0JCXN0cnVjdCBlZGlkICplZGlkID0KLQkJCShzdHJ1Y3QgZWRpZCAqKW5vdXZlYXVfYmlvc19lbWJlZGRlZF9lZGlkKGRldik7Ci0JCWlmIChlZGlkKSB7Ci0JCQludl9jb25uZWN0b3ItPmVkaWQgPSBrbWFsbG9jKEVESURfTEVOR1RILCBHRlBfS0VSTkVMKTsKLQkJCSoobnZfY29ubmVjdG9yLT5lZGlkKSA9ICplZGlkOwotCQl9Ci0JfQotCi0JaWYgKCFudl9jb25uZWN0b3ItPmVkaWQpCi0JCWdvdG8gb3V0OwotCi0JLyogV2UgZGlkbid0IGZpbmQvdXNlIGEgcGFuZWwgbW9kZSBmcm9tIHRoZSBWQklPUywgc28gcGFyc2UgdGhlIEVESUQKLQkgKiBibG9jayBhbmQgbG9vayBmb3IgdGhlIHByZWZlcnJlZCBtb2RlIHRoZXJlLgotCSAqLwotCXJldCA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsIG52X2Nvbm5lY3Rvci0+ZWRpZCk7Ci0JaWYgKHJldCA9PSAwKQotCQlnb3RvIG91dDsKLQludl9jb25uZWN0b3ItPmRldGVjdGVkX2VuY29kZXIgPSBudl9lbmNvZGVyOwotCW52X2Nvbm5lY3Rvci0+bmF0aXZlX21vZGUgPSBub3V2ZWF1X2Nvbm5lY3Rvcl9uYXRpdmVfbW9kZShjb25uZWN0b3IpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtb2RlLCB0ZW1wLCAmY29ubmVjdG9yLT5wcm9iZWRfbW9kZXMsIGhlYWQpCi0JCWRybV9tb2RlX3JlbW92ZShjb25uZWN0b3IsIG1vZGUpOwotCi1vdXQ6Ci0JaWYgKCFudl9jb25uZWN0b3ItPm5hdGl2ZV9tb2RlKSB7Ci0JCU5WX0VSUk9SKGRldiwgIkxWRFMgcHJlc2VudCBpbiBEQ0IgdGFibGUsIGJ1dCBjb3VsZG4ndCAiCi0JCQkgICAgICAiZGV0ZXJtaW5lIGl0cyBuYXRpdmUgbW9kZS4gIERpc2FibGluZy5cbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubmVjdG9yLCBudl9jb25uZWN0b3ItPmVkaWQpOwotCXJldHVybiAwOwotfQotCi1pbnQKLW5vdXZlYXVfY29ubmVjdG9yX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJIHN0cnVjdCBkY2JfY29ubmVjdG9yX3RhYmxlX2VudHJ5ICpkY2IpCi17CisJY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgKmZ1bmNzID0gJm5vdXZlYXVfY29ubmVjdG9yX2Z1bmNzOwogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IG5vdXZlYXVfY29ubmVjdG9yICpudl9jb25uZWN0b3IgPSBOVUxMOworCXN0cnVjdCBkY2JfY29ubmVjdG9yX3RhYmxlX2VudHJ5ICpkY2IgPSBOVUxMOwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Ci0Jc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwotCWludCByZXQsIHR5cGU7CisJaW50IHR5cGUsIHJldCA9IDA7CiAKIAlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAorCWlmIChpbmRleCA+PSBkZXZfcHJpdi0+dmJpb3MuZGNiLmNvbm5lY3Rvci5lbnRyaWVzKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWRjYiA9ICZkZXZfcHJpdi0+dmJpb3MuZGNiLmNvbm5lY3Rvci5lbnRyeVtpbmRleF07CisJaWYgKGRjYi0+ZHJtKQorCQlyZXR1cm4gZGNiLT5kcm07CisKIAlzd2l0Y2ggKGRjYi0+dHlwZSkgewotCWNhc2UgRENCX0NPTk5FQ1RPUl9OT05FOgotCQlyZXR1cm4gMDsKIAljYXNlIERDQl9DT05ORUNUT1JfVkdBOgotCQlOVl9JTkZPKGRldiwgIkRldGVjdGVkIGEgVkdBIGNvbm5lY3RvclxuIik7CiAJCXR5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfVkdBOwogCQlicmVhazsKIAljYXNlIERDQl9DT05ORUNUT1JfVFZfMDoKIAljYXNlIERDQl9DT05ORUNUT1JfVFZfMToKIAljYXNlIERDQl9DT05ORUNUT1JfVFZfMzoKLQkJTlZfSU5GTyhkZXYsICJEZXRlY3RlZCBhIFRWIGNvbm5lY3RvclxuIik7CiAJCXR5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfVFY7CiAJCWJyZWFrOwogCWNhc2UgRENCX0NPTk5FQ1RPUl9EVklfSToKLQkJTlZfSU5GTyhkZXYsICJEZXRlY3RlZCBhIERWSS1JIGNvbm5lY3RvclxuIik7CiAJCXR5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSTsKIAkJYnJlYWs7CiAJY2FzZSBEQ0JfQ09OTkVDVE9SX0RWSV9EOgotCQlOVl9JTkZPKGRldiwgIkRldGVjdGVkIGEgRFZJLUQgY29ubmVjdG9yXG4iKTsKIAkJdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEOwogCQlicmVhazsKIAljYXNlIERDQl9DT05ORUNUT1JfSERNSV8wOgogCWNhc2UgRENCX0NPTk5FQ1RPUl9IRE1JXzE6Ci0JCU5WX0lORk8oZGV2LCAiRGV0ZWN0ZWQgYSBIRE1JIGNvbm5lY3RvclxuIik7CiAJCXR5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUE7CiAJCWJyZWFrOwogCWNhc2UgRENCX0NPTk5FQ1RPUl9MVkRTOgotCQlOVl9JTkZPKGRldiwgIkRldGVjdGVkIGEgTFZEUyBjb25uZWN0b3JcbiIpOwogCQl0eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX0xWRFM7CisJCWZ1bmNzID0gJm5vdXZlYXVfY29ubmVjdG9yX2Z1bmNzX2x2ZHM7CiAJCWJyZWFrOwogCWNhc2UgRENCX0NPTk5FQ1RPUl9EUDoKLQkJTlZfSU5GTyhkZXYsICJEZXRlY3RlZCBhIERpc3BsYXlQb3J0IGNvbm5lY3RvclxuIik7CiAJCXR5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQ7CiAJCWJyZWFrOwogCWNhc2UgRENCX0NPTk5FQ1RPUl9lRFA6Ci0JCU5WX0lORk8oZGV2LCAiRGV0ZWN0ZWQgYW4gZURQIGNvbm5lY3RvclxuIik7CiAJCXR5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfZURQOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlOVl9FUlJPUihkZXYsICJ1bmtub3duIGNvbm5lY3RvciB0eXBlOiAweCUwMnghIVxuIiwgZGNiLT50eXBlKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KIAogCW52X2Nvbm5lY3RvciA9IGt6YWxsb2Moc2l6ZW9mKCpudl9jb25uZWN0b3IpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW52X2Nvbm5lY3RvcikKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCW52X2Nvbm5lY3Rvci0+ZGNiID0gZGNiOwogCWNvbm5lY3RvciA9ICZudl9jb25uZWN0b3ItPmJhc2U7CiAKQEAgLTgxMSwyNyArNzkwLDIxIEBACiAJY29ubmVjdG9yLT5pbnRlcmxhY2VfYWxsb3dlZCA9IGZhbHNlOwogCWNvbm5lY3Rvci0+ZG91Ymxlc2Nhbl9hbGxvd2VkID0gZmFsc2U7CiAKLQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25uZWN0b3IsICZub3V2ZWF1X2Nvbm5lY3Rvcl9mdW5jcywgdHlwZSk7CisJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgY29ubmVjdG9yLCBmdW5jcywgdHlwZSk7CiAJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwgJm5vdXZlYXVfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CiAKLQkvKiBhdHRhY2ggZW5jb2RlcnMgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgewotCQlzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpudl9lbmNvZGVyID0gbm91dmVhdV9lbmNvZGVyKGVuY29kZXIpOworCS8qIENoZWNrIGlmIHdlIG5lZWQgZGl0aGVyaW5nIGVuYWJsZWQgKi8KKwlpZiAoZGNiLT50eXBlID09IERDQl9DT05ORUNUT1JfTFZEUykgeworCQlib29sIGR1bW15LCBpc18yNGJpdCA9IGZhbHNlOwogCi0JCWlmIChudl9lbmNvZGVyLT5kY2ItPmNvbm5lY3RvciAhPSBkY2ItPmluZGV4KQotCQkJY29udGludWU7CisJCXJldCA9IG5vdXZlYXVfYmlvc19wYXJzZV9sdmRzX3RhYmxlKGRldiwgMCwgJmR1bW15LCAmaXNfMjRiaXQpOworCQlpZiAocmV0KSB7CisJCQlOVl9FUlJPUihkZXYsICJFcnJvciBwYXJzaW5nIExWRFMgdGFibGUsIGRpc2FibGluZyAiCisJCQkJICJMVkRTXG4iKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQogCi0JCWlmIChnZXRfc2xhdmVfZnVuY3MobnZfZW5jb2RlcikpCi0JCQlnZXRfc2xhdmVfZnVuY3MobnZfZW5jb2RlciktPmNyZWF0ZV9yZXNvdXJjZXMoZW5jb2RlciwgY29ubmVjdG9yKTsKLQotCQlkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoY29ubmVjdG9yLCBlbmNvZGVyKTsKLQl9Ci0KLQlpZiAoIWNvbm5lY3Rvci0+ZW5jb2Rlcl9pZHNbMF0pIHsKLQkJTlZfV0FSTihkZXYsICIgIG5vIGVuY29kZXJzLCBpZ25vcmluZ1xuIik7Ci0JCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOwotCQlrZnJlZShjb25uZWN0b3IpOwotCQlyZXR1cm4gMDsKKwkJbnZfY29ubmVjdG9yLT51c2VfZGl0aGVyaW5nID0gIWlzXzI0Yml0OwogCX0KIAogCS8qIEluaXQgRFZJLUkgc3BlY2lmaWMgcHJvcGVydGllcyAqLwpAQCAtODQxLDEyICs4MTQsOCBAQAogCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eShjb25uZWN0b3IsIGRldi0+bW9kZV9jb25maWcuZHZpX2lfc2VsZWN0X3N1YmNvbm5lY3Rvcl9wcm9wZXJ0eSwgMCk7CiAJfQogCi0JaWYgKGRjYi0+dHlwZSAhPSBEQ0JfQ09OTkVDVE9SX0xWRFMpCi0JCW52X2Nvbm5lY3Rvci0+dXNlX2RpdGhlcmluZyA9IGZhbHNlOwotCiAJc3dpdGNoIChkY2ItPnR5cGUpIHsKIAljYXNlIERDQl9DT05ORUNUT1JfVkdBOgotCQljb25uZWN0b3ItPnBvbGxlZCA9IERSTV9DT05ORUNUT1JfUE9MTF9DT05ORUNUOwogCQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl81MCkgewogCQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoY29ubmVjdG9yLAogCQkJCQlkZXYtPm1vZGVfY29uZmlnLnNjYWxpbmdfbW9kZV9wcm9wZXJ0eSwKQEAgLTg1OCwxNyArODI3LDYgQEAKIAljYXNlIERDQl9DT05ORUNUT1JfVFZfMzoKIAkJbnZfY29ubmVjdG9yLT5zY2FsaW5nX21vZGUgPSBEUk1fTU9ERV9TQ0FMRV9OT05FOwogCQlicmVhazsKLQljYXNlIERDQl9DT05ORUNUT1JfRFA6Ci0JY2FzZSBEQ0JfQ09OTkVDVE9SX2VEUDoKLQljYXNlIERDQl9DT05ORUNUT1JfSERNSV8wOgotCWNhc2UgRENCX0NPTk5FQ1RPUl9IRE1JXzE6Ci0JY2FzZSBEQ0JfQ09OTkVDVE9SX0RWSV9JOgotCWNhc2UgRENCX0NPTk5FQ1RPUl9EVklfRDoKLQkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfNTApCi0JCQljb25uZWN0b3ItPnBvbGxlZCA9IERSTV9DT05ORUNUT1JfUE9MTF9IUEQ7Ci0JCWVsc2UKLQkJCWNvbm5lY3Rvci0+cG9sbGVkID0gRFJNX0NPTk5FQ1RPUl9QT0xMX0NPTk5FQ1Q7Ci0JCS8qIGZhbGwtdGhyb3VnaCAqLwogCWRlZmF1bHQ6CiAJCW52X2Nvbm5lY3Rvci0+c2NhbGluZ19tb2RlID0gRFJNX01PREVfU0NBTEVfRlVMTFNDUkVFTjsKIApAQCAtODgyLDE1ICs4NDAsMTUgQEAKIAkJYnJlYWs7CiAJfQogCisJbm91dmVhdV9jb25uZWN0b3Jfc2V0X3BvbGxpbmcoY29ubmVjdG9yKTsKKwogCWRybV9zeXNmc19jb25uZWN0b3JfYWRkKGNvbm5lY3Rvcik7CisJZGNiLT5kcm0gPSBjb25uZWN0b3I7CisJcmV0dXJuIGRjYi0+ZHJtOwogCi0JaWYgKGRjYi0+dHlwZSA9PSBEQ0JfQ09OTkVDVE9SX0xWRFMpIHsKLQkJcmV0ID0gbm91dmVhdV9jb25uZWN0b3JfY3JlYXRlX2x2ZHMoZGV2LCBjb25uZWN0b3IpOwotCQlpZiAocmV0KSB7Ci0JCQljb25uZWN0b3ItPmZ1bmNzLT5kZXN0cm95KGNvbm5lY3Rvcik7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQorZmFpbDoKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKKwlrZnJlZShjb25uZWN0b3IpOworCXJldHVybiBFUlJfUFRSKHJldCk7CiAKLQlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY29ubmVjdG9yLmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Nvbm5lY3Rvci5oCmluZGV4IDRlZjM4YWIuLjBkMmU2NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY29ubmVjdG9yLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuaApAQCAtNDksNyArNDksMTAgQEAKIAlyZXR1cm4gY29udGFpbmVyX29mKGNvbiwgc3RydWN0IG5vdXZlYXVfY29ubmVjdG9yLCBiYXNlKTsKIH0KIAotaW50IG5vdXZlYXVfY29ubmVjdG9yX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqLAotCQkJICAgICBzdHJ1Y3QgZGNiX2Nvbm5lY3Rvcl90YWJsZV9lbnRyeSAqKTsKK3N0cnVjdCBkcm1fY29ubmVjdG9yICoKK25vdXZlYXVfY29ubmVjdG9yX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqLCBpbnQgaW5kZXgpOworCit2b2lkCitub3V2ZWF1X2Nvbm5lY3Rvcl9zZXRfcG9sbGluZyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqKTsKIAogI2VuZGlmIC8qIF9fTk9VVkVBVV9DT05ORUNUT1JfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWEuYwppbmRleCA2NWM0NDFhLi4yZTNjNmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1hLmMKQEAgLTkyLDExICs5Miw5IEBACiAJCXJldHVybiByZXQ7CiAKIAkvKiBNYXAgTTJNRiBub3RpZmllciBvYmplY3QgLSBmYmNvbi4gKi8KLQlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgewotCQlyZXQgPSBub3V2ZWF1X2JvX21hcChjaGFuLT5ub3RpZmllcl9ibyk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KKwlyZXQgPSBub3V2ZWF1X2JvX21hcChjaGFuLT5ub3RpZmllcl9ibyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAogCS8qIEluc2VydCBOT1BTIGZvciBOT1VWRUFVX0RNQV9TS0lQUyAqLwogCXJldCA9IFJJTkdfU1BBQ0UoY2hhbiwgTk9VVkVBVV9ETUFfU0tJUFMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcC5jCmluZGV4IGRlZWIyMWMuLjMzNzQyYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RwLmMKQEAgLTIzLDggKzIzLDEwIEBACiAgKi8KIAogI2luY2x1ZGUgImRybVAuaCIKKwogI2luY2x1ZGUgIm5vdXZlYXVfZHJ2LmgiCiAjaW5jbHVkZSAibm91dmVhdV9pMmMuaCIKKyNpbmNsdWRlICJub3V2ZWF1X2Nvbm5lY3Rvci5oIgogI2luY2x1ZGUgIm5vdXZlYXVfZW5jb2Rlci5oIgogCiBzdGF0aWMgaW50CkBAIC0yNzAsMTMgKzI3MiwzOSBAQAogbm91dmVhdV9kcF9saW5rX3RyYWluKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfZ3Bpb19lbmdpbmUgKnBncGlvID0gJmRldl9wcml2LT5lbmdpbmUuZ3BpbzsKIAlzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpudl9lbmNvZGVyID0gbm91dmVhdV9lbmNvZGVyKGVuY29kZXIpOwotCXVpbnQ4X3QgY29uZmlnWzRdOwotCXVpbnQ4X3Qgc3RhdHVzWzNdOworCXN0cnVjdCBub3V2ZWF1X2Nvbm5lY3RvciAqbnZfY29ubmVjdG9yOworCXN0cnVjdCBiaXRfZGlzcGxheXBvcnRfZW5jb2Rlcl90YWJsZSAqZHBlOworCWludCBkcGVfaGVhZGVybGVuOworCXVpbnQ4X3QgY29uZmlnWzRdLCBzdGF0dXNbM107CiAJYm9vbCBjcl9kb25lLCBjcl9tYXhfdnMsIGVxX2RvbmU7CiAJaW50IHJldCA9IDAsIGksIHRyaWVzLCB2b2x0YWdlOwogCiAJTlZfREVCVUdfS01TKGRldiwgImxpbmsgdHJhaW5pbmchIVxuIik7CisKKwludl9jb25uZWN0b3IgPSBub3V2ZWF1X2VuY29kZXJfY29ubmVjdG9yX2dldChudl9lbmNvZGVyKTsKKwlpZiAoIW52X2Nvbm5lY3RvcikKKwkJcmV0dXJuIGZhbHNlOworCisJZHBlID0gbm91dmVhdV9iaW9zX2RwX3RhYmxlKGRldiwgbnZfZW5jb2Rlci0+ZGNiLCAmZHBlX2hlYWRlcmxlbik7CisJaWYgKCFkcGUpIHsKKwkJTlZfRVJST1IoZGV2LCAiU09SLSVkOiBubyBEUCBlbmNvZGVyIHRhYmxlIVxuIiwgbnZfZW5jb2Rlci0+b3IpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogZGlzYWJsZSBob3RwbHVnIGRldGVjdCwgdGhpcyBmbGlwcyBhcm91bmQgb24gc29tZSBwYW5lbHMgZHVyaW5nCisJICogbGluayB0cmFpbmluZy4KKwkgKi8KKwlwZ3Bpby0+aXJxX2VuYWJsZShkZXYsIG52X2Nvbm5lY3Rvci0+ZGNiLT5ncGlvX3RhZywgZmFsc2UpOworCisJaWYgKGRwZS0+c2NyaXB0MCkgeworCQlOVl9ERUJVR19LTVMoZGV2LCAiU09SLSVkOiBydW5uaW5nIERQIHNjcmlwdCAwXG4iLCBudl9lbmNvZGVyLT5vcik7CisJCW5vdXZlYXVfYmlvc19ydW5faW5pdF90YWJsZShkZXYsIGxlMTZfdG9fY3B1KGRwZS0+c2NyaXB0MCksCisJCQkJCSAgICBudl9lbmNvZGVyLT5kY2IpOworCX0KKwogdHJhaW46CiAJY3JfZG9uZSA9IGVxX2RvbmUgPSBmYWxzZTsKIApAQCAtNDAzLDYgKzQzMSwxNSBAQAogCQl9CiAJfQogCisJaWYgKGRwZS0+c2NyaXB0MSkgeworCQlOVl9ERUJVR19LTVMoZGV2LCAiU09SLSVkOiBydW5uaW5nIERQIHNjcmlwdCAxXG4iLCBudl9lbmNvZGVyLT5vcik7CisJCW5vdXZlYXVfYmlvc19ydW5faW5pdF90YWJsZShkZXYsIGxlMTZfdG9fY3B1KGRwZS0+c2NyaXB0MSksCisJCQkJCSAgICBudl9lbmNvZGVyLT5kY2IpOworCX0KKworCS8qIHJlLWVuYWJsZSBob3RwbHVnIGRldGVjdCAqLworCXBncGlvLT5pcnFfZW5hYmxlKGRldiwgbnZfY29ubmVjdG9yLT5kY2ItPmdwaW9fdGFnLCB0cnVlKTsKKwogCXJldHVybiBlcV9kb25lOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuYwppbmRleCAyNzM3NzA0Li4xZGU1ZWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmMKQEAgLTM1LDEwICszNSw2IEBACiAKICNpbmNsdWRlICJkcm1fcGNpaWRzLmgiCiAKLU1PRFVMRV9QQVJNX0RFU0MoY3R4ZncsICJVc2UgZXh0ZXJuYWwgZmlybXdhcmUgYmxvYiBmb3IgZ3JjdHggaW5pdCAoTlY0MCkiKTsKLWludCBub3V2ZWF1X2N0eGZ3ID0gMDsKLW1vZHVsZV9wYXJhbV9uYW1lZChjdHhmdywgbm91dmVhdV9jdHhmdywgaW50LCAwNDAwKTsKLQogTU9EVUxFX1BBUk1fREVTQyhub2FncCwgIkRpc2FibGUgQUdQIik7CiBpbnQgbm91dmVhdV9ub2FncDsKIG1vZHVsZV9wYXJhbV9uYW1lZChub2FncCwgbm91dmVhdV9ub2FncCwgaW50LCAwNDAwKTsKQEAgLTU2LDcgKzUyLDcgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZCh2cmFtX3B1c2hidWYsIG5vdXZlYXVfdnJhbV9wdXNoYnVmLCBpbnQsIDA0MDApOwogCiBNT0RVTEVfUEFSTV9ERVNDKHZyYW1fbm90aWZ5LCAiRm9yY2UgRE1BIG5vdGlmaWVycyB0byBiZSBpbiBWUkFNIik7Ci1pbnQgbm91dmVhdV92cmFtX25vdGlmeSA9IDE7CitpbnQgbm91dmVhdV92cmFtX25vdGlmeSA9IDA7CiBtb2R1bGVfcGFyYW1fbmFtZWQodnJhbV9ub3RpZnksIG5vdXZlYXVfdnJhbV9ub3RpZnksIGludCwgMDQwMCk7CiAKIE1PRFVMRV9QQVJNX0RFU0MoZHVhbGxpbmssICJBbGxvdyBkdWFsLWxpbmsgVE1EUyAoPj1HZUZvcmNlIDgpIik7CkBAIC0xMzIsNyArMTI4LDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0CiBub3V2ZWF1X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKLQlyZXR1cm4gZHJtX2dldF9kZXYocGRldiwgZW50LCAmZHJpdmVyKTsKKwlyZXR1cm4gZHJtX2dldF9wY2lfZGV2KHBkZXYsIGVudCwgJmRyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xNTUsOSArMTUxLDYgQEAKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CiAJaW50IHJldCwgaTsKIAotCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAlpZiAocG1fc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfUFJFVEhBVykKIAkJcmV0dXJuIDA7CiAKQEAgLTI1Nyw5ICsyNTAsNiBAQAogCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKIAlpbnQgcmV0LCBpOwogCi0JaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCW5vdXZlYXVfZmJjb25fc2F2ZV9kaXNhYmxlX2FjY2VsKGRldik7CiAKIAlOVl9JTkZPKGRldiwgIldlJ3JlIGJhY2ssIGVuYWJsaW5nIGRldmljZS4uLlxuIik7CkBAIC0yNjksNiArMjU5LDEzIEBACiAJCXJldHVybiAtMTsKIAlwY2lfc2V0X21hc3RlcihkZXYtPnBkZXYpOwogCisJLyogTWFrZSBzdXJlIHRoZSBBR1AgY29udHJvbGxlciBpcyBpbiBhIGNvbnNpc3RlbnQgc3RhdGUgKi8KKwlpZiAoZGV2X3ByaXYtPmdhcnRfaW5mby50eXBlID09IE5PVVZFQVVfR0FSVF9BR1ApCisJCW5vdXZlYXVfbWVtX3Jlc2V0X2FncChkZXYpOworCisJLyogTWFrZSB0aGUgQ1JUQ3MgYWNjZXNzaWJsZSAqLworCWVuZ2luZS0+ZGlzcGxheS5lYXJseV9pbml0KGRldik7CisKIAlOVl9JTkZPKGRldiwgIlBPU1RpbmcgZGV2aWNlLi4uXG4iKTsKIAlyZXQgPSBub3V2ZWF1X3J1bl92Ymlvc19pbml0KGRldik7CiAJaWYgKHJldCkKQEAgLTMyMyw3ICszMjAsNiBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKIAkJc3RydWN0IG5vdXZlYXVfY3J0YyAqbnZfY3J0YyA9IG5vdXZlYXVfY3J0YyhjcnRjKTsKLQkJaW50IHJldDsKIAogCQlyZXQgPSBub3V2ZWF1X2JvX3Bpbihudl9jcnRjLT5jdXJzb3IubnZibywgVFRNX1BMX0ZMQUdfVlJBTSk7CiAJCWlmICghcmV0KQpAQCAtMzMyLDExICszMjgsNyBAQAogCQkJTlZfRVJST1IoZGV2LCAiQ291bGQgbm90IHBpbi9tYXAgY3Vyc29yLlxuIik7CiAJfQogCi0JaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPCBOVl81MCkgewotCQludjA0X2Rpc3BsYXlfcmVzdG9yZShkZXYpOwotCQlOVkxvY2tWZ2FDcnRjcyhkZXYsIGZhbHNlKTsKLQl9IGVsc2UKLQkJbnY1MF9kaXNwbGF5X2luaXQoZGV2KTsKKwllbmdpbmUtPmRpc3BsYXkuaW5pdChkZXYpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKIAkJc3RydWN0IG5vdXZlYXVfY3J0YyAqbnZfY3J0YyA9IG5vdXZlYXVfY3J0YyhjcnRjKTsKQEAgLTM3MSw3ICszNjMsOCBAQAogc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlciA9IHsKIAkuZHJpdmVyX2ZlYXR1cmVzID0KIAkJRFJJVkVSX1VTRV9BR1AgfCBEUklWRVJfUENJX0RNQSB8IERSSVZFUl9TRyB8Ci0JCURSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9JUlFfU0hBUkVEIHwgRFJJVkVSX0dFTSwKKwkJRFJJVkVSX0hBVkVfSVJRIHwgRFJJVkVSX0lSUV9TSEFSRUQgfCBEUklWRVJfR0VNIHwKKwkJRFJJVkVSX01PREVTRVQsCiAJLmxvYWQgPSBub3V2ZWF1X2xvYWQsCiAJLmZpcnN0b3BlbiA9IG5vdXZlYXVfZmlyc3RvcGVuLAogCS5sYXN0Y2xvc2UgPSBub3V2ZWF1X2xhc3RjbG9zZSwKQEAgLTQzOCwxNiArNDMxLDE4IEBACiAJCQlub3V2ZWF1X21vZGVzZXQgPSAxOwogCX0KIAotCWlmIChub3V2ZWF1X21vZGVzZXQgPT0gMSkgewotCQlkcml2ZXIuZHJpdmVyX2ZlYXR1cmVzIHw9IERSSVZFUl9NT0RFU0VUOwotCQlub3V2ZWF1X3JlZ2lzdGVyX2RzbV9oYW5kbGVyKCk7Ci0JfQorCWlmICghbm91dmVhdV9tb2Rlc2V0KQorCQlyZXR1cm4gMDsKIAorCW5vdXZlYXVfcmVnaXN0ZXJfZHNtX2hhbmRsZXIoKTsKIAlyZXR1cm4gZHJtX2luaXQoJmRyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBub3V2ZWF1X2V4aXQodm9pZCkKIHsKKwlpZiAoIW5vdXZlYXVfbW9kZXNldCkKKwkJcmV0dXJuOworCiAJZHJtX2V4aXQoJmRyaXZlcik7CiAJbm91dmVhdV91bnJlZ2lzdGVyX2RzbV9oYW5kbGVyKCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuaAppbmRleCBjNjk3MTkxLi5lMTVkYjE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmgKQEAgLTEyMywxNCArMTIzLDYgQEAKIAlyZXR1cm4gaW9wdHI7CiB9CiAKLXN0cnVjdCBtZW1fYmxvY2sgewotCXN0cnVjdCBtZW1fYmxvY2sgKm5leHQ7Ci0Jc3RydWN0IG1lbV9ibG9jayAqcHJldjsKLQl1aW50NjRfdCBzdGFydDsKLQl1aW50NjRfdCBzaXplOwotCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2OyAvKiBOVUxMOiBmcmVlLCAtMTogaGVhcCwgb3RoZXI6IHJlYWwgZmlsZXMgKi8KLX07Ci0KIGVudW0gbm91dmVhdV9mbGFncyB7CiAJTlZfTkZPUkNFICAgPSAweDEwMDAwMDAwLAogCU5WX05GT1JDRTIgID0gMHgyMDAwMDAwMApAQCAtMTQ5LDcgKzE0MSw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCiAJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqaW1fY2hhbm5lbDsKLQlzdHJ1Y3QgbWVtX2Jsb2NrICppbV9wcmFtaW47CisJc3RydWN0IGRybV9tbV9ub2RlICppbV9wcmFtaW47CiAJc3RydWN0IG5vdXZlYXVfYm8gKmltX2JhY2tpbmc7CiAJdWludDMyX3QgaW1fYmFja2luZ19zdGFydDsKIAl1aW50MzJfdCAqaW1fYmFja2luZ19zdXNwZW5kOwpAQCAtMTk2LDcgKzE4OCw3IEBACiAJCXN0cnVjdCBsaXN0X2hlYWQgcGVuZGluZzsKIAkJdWludDMyX3Qgc2VxdWVuY2U7CiAJCXVpbnQzMl90IHNlcXVlbmNlX2FjazsKLQkJdWludDMyX3QgbGFzdF9zZXF1ZW5jZV9pcnE7CisJCWF0b21pY190IGxhc3Rfc2VxdWVuY2VfaXJxOwogCX0gZmVuY2U7CiAKIAkvKiBETUEgcHVzaCBidWZmZXIgKi8KQEAgLTIwNiw3ICsxOTgsNyBAQAogCiAJLyogTm90aWZpZXIgbWVtb3J5ICovCiAJc3RydWN0IG5vdXZlYXVfYm8gKm5vdGlmaWVyX2JvOwotCXN0cnVjdCBtZW1fYmxvY2sgKm5vdGlmaWVyX2hlYXA7CisJc3RydWN0IGRybV9tbSBub3RpZmllcl9oZWFwOwogCiAJLyogUEZJRk8gY29udGV4dCAqLwogCXN0cnVjdCBub3V2ZWF1X2dwdW9ial9yZWYgKnJhbWZjOwpAQCAtMjI0LDcgKzIxNiw3IEBACiAKIAkvKiBPYmplY3RzICovCiAJc3RydWN0IG5vdXZlYXVfZ3B1b2JqX3JlZiAqcmFtaW47IC8qIFByaXZhdGUgaW5zdG1lbSAqLwotCXN0cnVjdCBtZW1fYmxvY2sgICAgICAgICAgKnJhbWluX2hlYXA7IC8qIFByaXZhdGUgUFJBTUlOIGhlYXAgKi8KKwlzdHJ1Y3QgZHJtX21tICAgICAgICAgICAgICByYW1pbl9oZWFwOyAvKiBQcml2YXRlIFBSQU1JTiBoZWFwICovCiAJc3RydWN0IG5vdXZlYXVfZ3B1b2JqX3JlZiAqcmFtaHQ7IC8qIEhhc2ggdGFibGUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICByYW1odF9yZWZzOyAvKiBPYmplY3RzIHJlZmVyZW5jZWQgYnkgUkFNSFQgKi8KIApAQCAtMjc3LDggKzI2OSw3IEBACiAJdm9pZAkoKmNsZWFyKShzdHJ1Y3QgZHJtX2RldmljZSAqLCBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKik7CiAJaW50CSgqYmluZCkoc3RydWN0IGRybV9kZXZpY2UgKiwgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICopOwogCWludAkoKnVuYmluZCkoc3RydWN0IGRybV9kZXZpY2UgKiwgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICopOwotCXZvaWQJKCpwcmVwYXJlX2FjY2Vzcykoc3RydWN0IGRybV9kZXZpY2UgKiwgYm9vbCB3cml0ZSk7Ci0Jdm9pZAkoKmZpbmlzaF9hY2Nlc3MpKHN0cnVjdCBkcm1fZGV2aWNlICopOworCXZvaWQJKCpmbHVzaCkoc3RydWN0IGRybV9kZXZpY2UgKik7CiB9OwogCiBzdHJ1Y3Qgbm91dmVhdV9tY19lbmdpbmUgewpAQCAtMzAzLDEwICsyOTQsMTEgQEAKIH07CiAKIHN0cnVjdCBub3V2ZWF1X2ZpZm9fZW5naW5lIHsKLQl2b2lkICpwcml2OwotCiAJaW50ICBjaGFubmVsczsKIAorCXN0cnVjdCBub3V2ZWF1X2dwdW9ial9yZWYgKnBsYXlsaXN0WzJdOworCWludCBjdXJfcGxheWxpc3Q7CisKIAlpbnQgICgqaW5pdCkoc3RydWN0IGRybV9kZXZpY2UgKik7CiAJdm9pZCAoKnRha2Vkb3duKShzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIApAQCAtMzM5LDEwICszMzEsMTEgQEAKIHN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgewogCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9vYmplY3RfY2xhc3MgKmdyY2xhc3M7CiAJYm9vbCBhY2NlbF9ibG9ja2VkOwotCXZvaWQgKmN0eHByb2c7Ci0Jdm9pZCAqY3R4dmFsczsKIAlpbnQgZ3JjdHhfc2l6ZTsKIAorCS8qIE5WMngvTlYzeCBjb250ZXh0IHRhYmxlICgweDQwMDc4MCkgKi8KKwlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmpfcmVmICpjdHhfdGFibGU7CisKIAlpbnQgICgqaW5pdCkoc3RydWN0IGRybV9kZXZpY2UgKik7CiAJdm9pZCAoKnRha2Vkb3duKShzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIApAQCAtMzU4LDYgKzM1MSwyNCBAQAogCQkJCSAgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgcGl0Y2gpOwogfTsKIAorc3RydWN0IG5vdXZlYXVfZGlzcGxheV9lbmdpbmUgeworCWludCAoKmVhcmx5X2luaXQpKHN0cnVjdCBkcm1fZGV2aWNlICopOworCXZvaWQgKCpsYXRlX3Rha2Vkb3duKShzdHJ1Y3QgZHJtX2RldmljZSAqKTsKKwlpbnQgKCpjcmVhdGUpKHN0cnVjdCBkcm1fZGV2aWNlICopOworCWludCAoKmluaXQpKHN0cnVjdCBkcm1fZGV2aWNlICopOworCXZvaWQgKCpkZXN0cm95KShzdHJ1Y3QgZHJtX2RldmljZSAqKTsKK307CisKK3N0cnVjdCBub3V2ZWF1X2dwaW9fZW5naW5lIHsKKwlpbnQgICgqaW5pdCkoc3RydWN0IGRybV9kZXZpY2UgKik7CisJdm9pZCAoKnRha2Vkb3duKShzdHJ1Y3QgZHJtX2RldmljZSAqKTsKKworCWludCAgKCpnZXQpKHN0cnVjdCBkcm1fZGV2aWNlICosIGVudW0gZGNiX2dwaW9fdGFnKTsKKwlpbnQgICgqc2V0KShzdHJ1Y3QgZHJtX2RldmljZSAqLCBlbnVtIGRjYl9ncGlvX3RhZywgaW50IHN0YXRlKTsKKworCXZvaWQgKCppcnFfZW5hYmxlKShzdHJ1Y3QgZHJtX2RldmljZSAqLCBlbnVtIGRjYl9ncGlvX3RhZywgYm9vbCBvbik7Cit9OworCiBzdHJ1Y3Qgbm91dmVhdV9lbmdpbmUgewogCXN0cnVjdCBub3V2ZWF1X2luc3RtZW1fZW5naW5lIGluc3RtZW07CiAJc3RydWN0IG5vdXZlYXVfbWNfZW5naW5lICAgICAgbWM7CkBAIC0zNjUsNiArMzc2LDggQEAKIAlzdHJ1Y3Qgbm91dmVhdV9mYl9lbmdpbmUgICAgICBmYjsKIAlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfZW5naW5lICBncmFwaDsKIAlzdHJ1Y3Qgbm91dmVhdV9maWZvX2VuZ2luZSAgICBmaWZvOworCXN0cnVjdCBub3V2ZWF1X2Rpc3BsYXlfZW5naW5lIGRpc3BsYXk7CisJc3RydWN0IG5vdXZlYXVfZ3Bpb19lbmdpbmUgICAgZ3BpbzsKIH07CiAKIHN0cnVjdCBub3V2ZWF1X3BsbF92YWxzIHsKQEAgLTUwMCwxMSArNTEzLDYgQEAKIAogc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Ci0JZW51bSB7Ci0JCU5PVVZFQVVfQ0FSRF9JTklUX0RPV04sCi0JCU5PVVZFQVVfQ0FSRF9JTklUX0RPTkUsCi0JCU5PVVZFQVVfQ0FSRF9JTklUX0ZBSUxFRAotCX0gaW5pdF9zdGF0ZTsKIAogCS8qIHRoZSBjYXJkIHR5cGUsIHRha2VzIE5WXyogYXMgdmFsdWVzICovCiAJZW51bSBub3V2ZWF1X2NhcmRfdHlwZSBjYXJkX3R5cGU7CkBAIC01MjUsNyArNTMzLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHZibF93YWl0aW5nOwogCiAJc3RydWN0IHsKLQkJc3RydWN0IHR0bV9nbG9iYWxfcmVmZXJlbmNlIG1lbV9nbG9iYWxfcmVmOworCQlzdHJ1Y3QgZHJtX2dsb2JhbF9yZWZlcmVuY2UgbWVtX2dsb2JhbF9yZWY7CiAJCXN0cnVjdCB0dG1fYm9fZ2xvYmFsX3JlZiBib19nbG9iYWxfcmVmOwogCQlzdHJ1Y3QgdHRtX2JvX2RldmljZSBiZGV2OwogCQlzcGlubG9ja190IGJvX2xpc3RfbG9jazsKQEAgLTUzMyw4ICs1NDEsNiBAQAogCQlhdG9taWNfdCB2YWxpZGF0ZV9zZXF1ZW5jZTsKIAl9IHR0bTsKIAotCXN0cnVjdCBmYl9pbmZvICpmYmRldl9pbmZvOwotCiAJaW50IGZpZm9fYWxsb2NfY291bnQ7CiAJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqZmlmb3NbTk9VVkVBVV9NQVhfQ0hBTk5FTF9OUl07CiAKQEAgLTU5NSwxMSArNjAxLDcgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKnZtX3ZyYW1fcHRbTlY1MF9WTV9WUkFNX05SXTsKIAlpbnQgdm1fdnJhbV9wdF9ucjsKIAotCXN0cnVjdCBtZW1fYmxvY2sgKnJhbWluX2hlYXA7Ci0KLQkvKiBjb250ZXh0IHRhYmxlIHBvaW50ZWQgdG8gYmUgTlZfUEdSQVBIX0NIQU5ORUxfQ1RYX1RBQkxFICgweDQwMDc4MCkgKi8KLQl1aW50MzJfdCBjdHhfdGFibGVfc2l6ZTsKLQlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmpfcmVmICpjdHhfdGFibGU7CisJc3RydWN0IGRybV9tbSByYW1pbl9oZWFwOwogCiAJc3RydWN0IGxpc3RfaGVhZCBncHVvYmpfbGlzdDsKIApAQCAtNjE4LDYgKzYyMCwxMSBAQAogCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHQ7CiAKIAlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpldm87CisJc3RydWN0IHsKKwkJc3RydWN0IGRjYl9lbnRyeSAqZGNiOworCQl1MTYgc2NyaXB0OworCQl1MzIgcGNsazsKKwl9IGV2b19pcnE7CiAKIAlzdHJ1Y3QgewogCQlzdHJ1Y3QgZGVudHJ5ICpjaGFubmVsX3Jvb3Q7CkBAIC02NTIsMTQgKzY1OSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgTk9VVkVBVV9DSEVDS19JTklUSUFMSVNFRF9XSVRIX1JFVFVSTiBkbyB7ICAgICAgICAgICAgXAotCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpudiA9IGRldi0+ZGV2X3ByaXZhdGU7ICAgIFwKLQlpZiAobnYtPmluaXRfc3RhdGUgIT0gTk9VVkVBVV9DQVJEX0lOSVRfRE9ORSkgeyAgICAgICBcCi0JCU5WX0VSUk9SKGRldiwgImNhbGxlZCB3aXRob3V0IGluaXRcbiIpOyAgICAgICBcCi0JCXJldHVybiAtRUlOVkFMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSB3aGlsZSAoMCkKLQogI2RlZmluZSBOT1VWRUFVX0dFVF9VU0VSX0NIQU5ORUxfV0lUSF9SRVRVUk4oaWQsIGNsLCBjaCkgZG8geyAgICBcCiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKm52ID0gZGV2LT5kZXZfcHJpdmF0ZTsgICAgICAgXAogCWlmICghbm91dmVhdV9jaGFubmVsX293bmVyKGRldiwgKGNsKSwgKGlkKSkpIHsgICAgICAgICAgIFwKQEAgLTY4Miw3ICs2ODEsNiBAQAogZXh0ZXJuIGNoYXIgKm5vdXZlYXVfdHZfbm9ybTsKIGV4dGVybiBpbnQgbm91dmVhdV9yZWdfZGVidWc7CiBleHRlcm4gY2hhciAqbm91dmVhdV92YmlvczsKLWV4dGVybiBpbnQgbm91dmVhdV9jdHhmdzsKIGV4dGVybiBpbnQgbm91dmVhdV9pZ25vcmVsaWQ7CiBleHRlcm4gaW50IG5vdXZlYXVfbm9mYmFjY2VsOwogZXh0ZXJuIGludCBub3V2ZWF1X25vYWNjZWw7CkBAIC03MDcsMTcgKzcwNSwxMCBAQAogZXh0ZXJuIGludCAgbm91dmVhdV9jYXJkX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKik7CiAKIC8qIG5vdXZlYXVfbWVtLmMgKi8KLWV4dGVybiBpbnQgIG5vdXZlYXVfbWVtX2luaXRfaGVhcChzdHJ1Y3QgbWVtX2Jsb2NrICoqLCB1aW50NjRfdCBzdGFydCwKLQkJCQkgdWludDY0X3Qgc2l6ZSk7Ci1leHRlcm4gc3RydWN0IG1lbV9ibG9jayAqbm91dmVhdV9tZW1fYWxsb2NfYmxvY2soc3RydWN0IG1lbV9ibG9jayAqLAotCQkJCQkJIHVpbnQ2NF90IHNpemUsIGludCBhbGlnbjIsCi0JCQkJCQkgc3RydWN0IGRybV9maWxlICosIGludCB0YWlsKTsKLWV4dGVybiB2b2lkIG5vdXZlYXVfbWVtX3Rha2Vkb3duKHN0cnVjdCBtZW1fYmxvY2sgKipoZWFwKTsKLWV4dGVybiB2b2lkIG5vdXZlYXVfbWVtX2ZyZWVfYmxvY2soc3RydWN0IG1lbV9ibG9jayAqKTsKIGV4dGVybiBpbnQgIG5vdXZlYXVfbWVtX2RldGVjdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKLWV4dGVybiB2b2lkIG5vdXZlYXVfbWVtX3JlbGVhc2Uoc3RydWN0IGRybV9maWxlICosIHN0cnVjdCBtZW1fYmxvY2sgKmhlYXApOwogZXh0ZXJuIGludCAgbm91dmVhdV9tZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiBpbnQgIG5vdXZlYXVfbWVtX2luaXRfYWdwKHN0cnVjdCBkcm1fZGV2aWNlICopOworZXh0ZXJuIGludCAgbm91dmVhdV9tZW1fcmVzZXRfYWdwKHN0cnVjdCBkcm1fZGV2aWNlICopOwogZXh0ZXJuIHZvaWQgbm91dmVhdV9tZW1fY2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKik7CiBleHRlcm4gc3RydWN0IG5vdXZlYXVfdGlsZV9yZWcgKm52MTBfbWVtX3NldF90aWxpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkJCSAgICB1aW50MzJfdCBhZGRyLApAQCAtODU3LDExICs4NDgsMTMgQEAKIHZvaWQgbm91dmVhdV91bnJlZ2lzdGVyX2RzbV9oYW5kbGVyKHZvaWQpOwogaW50IG5vdXZlYXVfYWNwaV9nZXRfYmlvc19jaHVuayh1aW50OF90ICpiaW9zLCBpbnQgb2Zmc2V0LCBpbnQgbGVuKTsKIGJvb2wgbm91dmVhdV9hY3BpX3JvbV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworaW50IG5vdXZlYXVfYWNwaV9lZGlkKHN0cnVjdCBkcm1fZGV2aWNlICosIHN0cnVjdCBkcm1fY29ubmVjdG9yICopOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBub3V2ZWF1X3JlZ2lzdGVyX2RzbV9oYW5kbGVyKHZvaWQpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgbm91dmVhdV91bnJlZ2lzdGVyX2RzbV9oYW5kbGVyKHZvaWQpIHt9CiBzdGF0aWMgaW5saW5lIGJvb2wgbm91dmVhdV9hY3BpX3JvbV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpIHsgcmV0dXJuIGZhbHNlOyB9CiBzdGF0aWMgaW5saW5lIGludCBub3V2ZWF1X2FjcGlfZ2V0X2Jpb3NfY2h1bmsodWludDhfdCAqYmlvcywgaW50IG9mZnNldCwgaW50IGxlbikgeyByZXR1cm4gLUVJTlZBTDsgfQorc3RhdGljIGlubGluZSBpbnQgbm91dmVhdV9hY3BpX2VkaWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikgeyByZXR1cm4gLUVJTlZBTDsgfQogI2VuZGlmCiAKIC8qIG5vdXZlYXVfYmFja2xpZ2h0LmMgKi8KQEAgLTkyNCw2ICs5MTcsMTAgQEAKIGV4dGVybiB2b2lkIG52MTBfZmJfc2V0X3JlZ2lvbl90aWxpbmcoc3RydWN0IGRybV9kZXZpY2UgKiwgaW50LCB1aW50MzJfdCwKIAkJCQkgICAgICB1aW50MzJfdCwgdWludDMyX3QpOwogCisvKiBudjMwX2ZiLmMgKi8KK2V4dGVybiBpbnQgIG52MzBfZmJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKK2V4dGVybiB2b2lkIG52MzBfZmJfdGFrZWRvd24oc3RydWN0IGRybV9kZXZpY2UgKik7CisKIC8qIG52NDBfZmIuYyAqLwogZXh0ZXJuIGludCAgbnY0MF9mYl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICopOwogZXh0ZXJuIHZvaWQgbnY0MF9mYl90YWtlZG93bihzdHJ1Y3QgZHJtX2RldmljZSAqKTsKQEAgLTEwMzUsMTIgKzEwMzIsNiBAQAogZXh0ZXJuIHZvaWQgbnY1MF9ncmFwaF9jb250ZXh0X3N3aXRjaChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiBpbnQgIG52NTBfZ3JjdHhfaW5pdChzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqKTsKIAotLyogbm91dmVhdV9ncmN0eC5jICovCi1leHRlcm4gaW50ICBub3V2ZWF1X2dyY3R4X3Byb2dfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKLWV4dGVybiB2b2lkIG5vdXZlYXVfZ3JjdHhfdmFsc19sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICosCi0JCQkJICAgIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqKTsKLWV4dGVybiB2b2lkIG5vdXZlYXVfZ3JjdHhfZmluaShzdHJ1Y3QgZHJtX2RldmljZSAqKTsKLQogLyogbnYwNF9pbnN0bWVtLmMgKi8KIGV4dGVybiBpbnQgIG52MDRfaW5zdG1lbV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICopOwogZXh0ZXJuIHZvaWQgbnYwNF9pbnN0bWVtX3Rha2Vkb3duKHN0cnVjdCBkcm1fZGV2aWNlICopOwpAQCAtMTA1MSw4ICsxMDQyLDcgQEAKIGV4dGVybiB2b2lkIG52MDRfaW5zdG1lbV9jbGVhcihzdHJ1Y3QgZHJtX2RldmljZSAqLCBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKik7CiBleHRlcm4gaW50ICBudjA0X2luc3RtZW1fYmluZChzdHJ1Y3QgZHJtX2RldmljZSAqLCBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKik7CiBleHRlcm4gaW50ICBudjA0X2luc3RtZW1fdW5iaW5kKHN0cnVjdCBkcm1fZGV2aWNlICosIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqKTsKLWV4dGVybiB2b2lkIG52MDRfaW5zdG1lbV9wcmVwYXJlX2FjY2VzcyhzdHJ1Y3QgZHJtX2RldmljZSAqLCBib29sIHdyaXRlKTsKLWV4dGVybiB2b2lkIG52MDRfaW5zdG1lbV9maW5pc2hfYWNjZXNzKHN0cnVjdCBkcm1fZGV2aWNlICopOworZXh0ZXJuIHZvaWQgbnYwNF9pbnN0bWVtX2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICopOwogCiAvKiBudjUwX2luc3RtZW0uYyAqLwogZXh0ZXJuIGludCAgbnY1MF9pbnN0bWVtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKik7CkBAIC0xMDY0LDggKzEwNTQsOSBAQAogZXh0ZXJuIHZvaWQgbnY1MF9pbnN0bWVtX2NsZWFyKHN0cnVjdCBkcm1fZGV2aWNlICosIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqKTsKIGV4dGVybiBpbnQgIG52NTBfaW5zdG1lbV9iaW5kKHN0cnVjdCBkcm1fZGV2aWNlICosIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqKTsKIGV4dGVybiBpbnQgIG52NTBfaW5zdG1lbV91bmJpbmQoc3RydWN0IGRybV9kZXZpY2UgKiwgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICopOwotZXh0ZXJuIHZvaWQgbnY1MF9pbnN0bWVtX3ByZXBhcmVfYWNjZXNzKHN0cnVjdCBkcm1fZGV2aWNlICosIGJvb2wgd3JpdGUpOwotZXh0ZXJuIHZvaWQgbnY1MF9pbnN0bWVtX2ZpbmlzaF9hY2Nlc3Moc3RydWN0IGRybV9kZXZpY2UgKik7CitleHRlcm4gdm9pZCBudjUwX2luc3RtZW1fZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKik7CitleHRlcm4gdm9pZCBudjg0X2luc3RtZW1fZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKik7CitleHRlcm4gdm9pZCBudjUwX3ZtX2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICosIGludCBlbmdpbmUpOwogCiAvKiBudjA0X21jLmMgKi8KIGV4dGVybiBpbnQgIG52MDRfbWNfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKQEAgLTEwODgsMTMgKzEwNzksMTQgQEAKIAkJCQkgdW5zaWduZWQgbG9uZyBhcmcpOwogCiAvKiBudjA0X2RhYy5jICovCi1leHRlcm4gaW50IG52MDRfZGFjX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZGNiX2VudHJ5ICplbnRyeSk7CitleHRlcm4gaW50IG52MDRfZGFjX2NyZWF0ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqLCBzdHJ1Y3QgZGNiX2VudHJ5ICopOwogZXh0ZXJuIHVpbnQzMl90IG52MTdfZGFjX3NhbXBsZV9sb2FkKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7CiBleHRlcm4gaW50IG52MDRfZGFjX291dHB1dF9vZmZzZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKIGV4dGVybiB2b2lkIG52MDRfZGFjX3VwZGF0ZV9kYWNjbGsoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBib29sIGVuYWJsZSk7CitleHRlcm4gYm9vbCBudjA0X2RhY19pbl91c2Uoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKIAogLyogbnYwNF9kZnAuYyAqLwotZXh0ZXJuIGludCBudjA0X2RmcF9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRjYl9lbnRyeSAqZW50cnkpOworZXh0ZXJuIGludCBudjA0X2RmcF9jcmVhdGUoc3RydWN0IGRybV9jb25uZWN0b3IgKiwgc3RydWN0IGRjYl9lbnRyeSAqKTsKIGV4dGVybiBpbnQgbnYwNF9kZnBfZ2V0X2JvdW5kX2hlYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRjYl9lbnRyeSAqZGNiZW50KTsKIGV4dGVybiB2b2lkIG52MDRfZGZwX2JpbmRfaGVhZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZGNiX2VudHJ5ICpkY2JlbnQsCiAJCQkgICAgICAgaW50IGhlYWQsIGJvb2wgZGwpOwpAQCAtMTEwMywxNSArMTA5NSwxNyBAQAogCiAvKiBudjA0X3R2LmMgKi8KIGV4dGVybiBpbnQgbnYwNF90dl9pZGVudGlmeShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaTJjX2luZGV4KTsKLWV4dGVybiBpbnQgbnYwNF90dl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRjYl9lbnRyeSAqZW50cnkpOworZXh0ZXJuIGludCBudjA0X3R2X2NyZWF0ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqLCBzdHJ1Y3QgZGNiX2VudHJ5ICopOwogCiAvKiBudjE3X3R2LmMgKi8KLWV4dGVybiBpbnQgbnYxN190dl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRjYl9lbnRyeSAqZW50cnkpOworZXh0ZXJuIGludCBudjE3X3R2X2NyZWF0ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqLCBzdHJ1Y3QgZGNiX2VudHJ5ICopOwogCiAvKiBudjA0X2Rpc3BsYXkuYyAqLworZXh0ZXJuIGludCBudjA0X2Rpc3BsYXlfZWFybHlfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKK2V4dGVybiB2b2lkIG52MDRfZGlzcGxheV9sYXRlX3Rha2Vkb3duKHN0cnVjdCBkcm1fZGV2aWNlICopOwogZXh0ZXJuIGludCBudjA0X2Rpc3BsYXlfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICopOworZXh0ZXJuIGludCBudjA0X2Rpc3BsYXlfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIG52MDRfZGlzcGxheV9kZXN0cm95KHN0cnVjdCBkcm1fZGV2aWNlICopOwotZXh0ZXJuIHZvaWQgbnYwNF9kaXNwbGF5X3Jlc3RvcmUoc3RydWN0IGRybV9kZXZpY2UgKik7CiAKIC8qIG52MDRfY3J0Yy5jICovCiBleHRlcm4gaW50IG52MDRfY3J0Y19jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKiwgaW50IGluZGV4KTsKQEAgLTExNDcsNyArMTE0MSw2IEBACiBleHRlcm4gaW50IG5vdXZlYXVfZmVuY2VfZmx1c2godm9pZCAqb2JqLCB2b2lkICphcmcpOwogZXh0ZXJuIHZvaWQgbm91dmVhdV9mZW5jZV91bnJlZih2b2lkICoqb2JqKTsKIGV4dGVybiB2b2lkICpub3V2ZWF1X2ZlbmNlX3JlZih2b2lkICpvYmopOwotZXh0ZXJuIHZvaWQgbm91dmVhdV9mZW5jZV9oYW5kbGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjaGFubmVsKTsKIAogLyogbm91dmVhdV9nZW0uYyAqLwogZXh0ZXJuIGludCBub3V2ZWF1X2dlbV9uZXcoc3RydWN0IGRybV9kZXZpY2UgKiwgc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqLApAQCAtMTE2NywxMyArMTE2MCwxNSBAQAogZXh0ZXJuIGludCBub3V2ZWF1X2dlbV9pb2N0bF9pbmZvKHN0cnVjdCBkcm1fZGV2aWNlICosIHZvaWQgKiwKIAkJCQkgIHN0cnVjdCBkcm1fZmlsZSAqKTsKIAotLyogbnYxN19ncGlvLmMgKi8KLWludCBudjE3X2dwaW9fZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGVudW0gZGNiX2dwaW9fdGFnIHRhZyk7Ci1pbnQgbnYxN19ncGlvX3NldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIGRjYl9ncGlvX3RhZyB0YWcsIGludCBzdGF0ZSk7CisvKiBudjEwX2dwaW8uYyAqLworaW50IG52MTBfZ3Bpb19nZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBkY2JfZ3Bpb190YWcgdGFnKTsKK2ludCBudjEwX2dwaW9fc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGVudW0gZGNiX2dwaW9fdGFnIHRhZywgaW50IHN0YXRlKTsKIAogLyogbnY1MF9ncGlvLmMgKi8KK2ludCBudjUwX2dwaW9faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGludCBudjUwX2dwaW9fZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGVudW0gZGNiX2dwaW9fdGFnIHRhZyk7CiBpbnQgbnY1MF9ncGlvX3NldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIGRjYl9ncGlvX3RhZyB0YWcsIGludCBzdGF0ZSk7Cit2b2lkIG52NTBfZ3Bpb19pcnFfZW5hYmxlKHN0cnVjdCBkcm1fZGV2aWNlICosIGVudW0gZGNiX2dwaW9fdGFnLCBib29sIG9uKTsKIAogLyogbnY1MF9jYWxjLiAqLwogaW50IG52NTBfY2FsY19wbGwoc3RydWN0IGRybV9kZXZpY2UgKiwgc3RydWN0IHBsbF9saW1zICosIGludCBjbGssCkBAIC0xMjIwLDYgKzEyMTUsMTQgQEAKIAlpb3dyaXRlMzJfbmF0aXZlKHZhbCwgZGV2X3ByaXYtPm1taW8gKyByZWcpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgbnZfbWFzayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCkKK3sKKwl1MzIgdG1wID0gbnZfcmQzMihkZXYsIHJlZyk7CisJdG1wICY9IH5tYXNrOworCXRtcCB8PSB2YWw7CisJbnZfd3IzMihkZXYsIHJlZywgdG1wKTsKK30KKwogc3RhdGljIGlubGluZSB1OCBudl9yZDA4KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIHJlZykKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9lbmNvZGVyLmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2VuY29kZXIuaAppbmRleCBlMWRmODIwLi5hMWEwZDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2VuY29kZXIuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2VuY29kZXIuaApAQCAtMzgsMTMgKzM4LDE1IEBACiAJc3RydWN0IGRjYl9lbnRyeSAqZGNiOwogCWludCBvcjsKIAorCS8qIGRpZmZlcmVudCB0byBkcm1fZW5jb2Rlci5jcnRjLCB0aGlzIHJlZmxlY3RzIHdoYXQncworCSAqIGFjdHVhbGx5IHByb2dyYW1tZWQgb24gdGhlIGh3LCBub3QgdGhlIHByb3Bvc2VkIGNydGMgKi8KKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBtb2RlOwogCWludCBsYXN0X2RwbXM7CiAKIAlzdHJ1Y3QgbnYwNF9vdXRwdXRfcmVnIHJlc3RvcmU7CiAKLQl2b2lkICgqZGlzY29ubmVjdCkoc3RydWN0IG5vdXZlYXVfZW5jb2RlciAqZW5jb2Rlcik7Ci0KIAl1bmlvbiB7CiAJCXN0cnVjdCB7CiAJCQlpbnQgbWNfdW5rbm93bjsKQEAgLTcxLDggKzczLDggQEAKIAogc3RydWN0IG5vdXZlYXVfY29ubmVjdG9yICoKIG5vdXZlYXVfZW5jb2Rlcl9jb25uZWN0b3JfZ2V0KHN0cnVjdCBub3V2ZWF1X2VuY29kZXIgKmVuY29kZXIpOwotaW50IG52NTBfc29yX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZGNiX2VudHJ5ICplbnRyeSk7Ci1pbnQgbnY1MF9kYWNfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkY2JfZW50cnkgKmVudHJ5KTsKK2ludCBudjUwX3Nvcl9jcmVhdGUoc3RydWN0IGRybV9jb25uZWN0b3IgKiwgc3RydWN0IGRjYl9lbnRyeSAqKTsKK2ludCBudjUwX2RhY19jcmVhdGUoc3RydWN0IGRybV9jb25uZWN0b3IgKiwgc3RydWN0IGRjYl9lbnRyeSAqKTsKIAogc3RydWN0IGJpdF9kaXNwbGF5cG9ydF9lbmNvZGVyX3RhYmxlIHsKIAl1aW50MzJfdCBtYXRjaDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmJjb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmJjb24uYwppbmRleCBjOWE0YTBkLi4yZmIyNDQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mYmNvbi5jCkBAIC0zMzMsNyArMzMzLDcgQEAKIAlkcm1fZmJfaGVscGVyX2hvdHBsdWdfZXZlbnQoJmRldl9wcml2LT5uZmJkZXYtPmhlbHBlcik7CiB9CiAKLWludAorc3RhdGljIGludAogbm91dmVhdV9mYmNvbl9kZXN0cm95KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBub3V2ZWF1X2ZiZGV2ICpuZmJkZXYpCiB7CiAJc3RydWN0IG5vdXZlYXVfZnJhbWVidWZmZXIgKm5vdXZlYXVfZmIgPSAmbmZiZGV2LT5ub3V2ZWF1X2ZiOwpAQCAtMzg3LDcgKzM4Nyw4IEBACiAJZGV2X3ByaXYtPm5mYmRldiA9IG5mYmRldjsKIAluZmJkZXYtPmhlbHBlci5mdW5jcyA9ICZub3V2ZWF1X2ZiY29uX2hlbHBlcl9mdW5jczsKIAotCXJldCA9IGRybV9mYl9oZWxwZXJfaW5pdChkZXYsICZuZmJkZXYtPmhlbHBlciwgMiwgNCk7CisJcmV0ID0gZHJtX2ZiX2hlbHBlcl9pbml0KGRldiwgJm5mYmRldi0+aGVscGVyLAorCQkJCSBudl90d29faGVhZHMoZGV2KSA/IDIgOiAxLCA0KTsKIAlpZiAocmV0KSB7CiAJCWtmcmVlKG5mYmRldik7CiAJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZlbmNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZlbmNlLmMKaW5kZXggZmFkZGY1My4uNmIyMDhmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mZW5jZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmVuY2UuYwpAQCAtNjcsMTIgKzY3LDEzIEBACiAJaWYgKFVTRV9SRUZDTlQpCiAJCXNlcXVlbmNlID0gbnZjaGFuX3JkMzIoY2hhbiwgMHg0OCk7CiAJZWxzZQotCQlzZXF1ZW5jZSA9IGNoYW4tPmZlbmNlLmxhc3Rfc2VxdWVuY2VfaXJxOworCQlzZXF1ZW5jZSA9IGF0b21pY19yZWFkKCZjaGFuLT5mZW5jZS5sYXN0X3NlcXVlbmNlX2lycSk7CiAKIAlpZiAoY2hhbi0+ZmVuY2Uuc2VxdWVuY2VfYWNrID09IHNlcXVlbmNlKQogCQlyZXR1cm47CiAJY2hhbi0+ZmVuY2Uuc2VxdWVuY2VfYWNrID0gc2VxdWVuY2U7CiAKKwlzcGluX2xvY2soJmNoYW4tPmZlbmNlLmxvY2spOwogCWxpc3RfZm9yX2VhY2hfc2FmZShlbnRyeSwgdG1wLCAmY2hhbi0+ZmVuY2UucGVuZGluZykgewogCQlmZW5jZSA9IGxpc3RfZW50cnkoZW50cnksIHN0cnVjdCBub3V2ZWF1X2ZlbmNlLCBlbnRyeSk7CiAKQEAgLTg0LDYgKzg1LDcgQEAKIAkJaWYgKHNlcXVlbmNlID09IGNoYW4tPmZlbmNlLnNlcXVlbmNlX2FjaykKIAkJCWJyZWFrOwogCX0KKwlzcGluX3VubG9jaygmY2hhbi0+ZmVuY2UubG9jayk7CiB9CiAKIGludApAQCAtMTE5LDcgKzEyMSw2IEBACiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZmVuY2UtPmNoYW5uZWwtPmRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiA9IGZlbmNlLT5jaGFubmVsOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAogCXJldCA9IFJJTkdfU1BBQ0UoY2hhbiwgMik7CkBAIC0xMjcsOSArMTI4LDcgQEAKIAkJcmV0dXJuIHJldDsKIAogCWlmICh1bmxpa2VseShjaGFuLT5mZW5jZS5zZXF1ZW5jZSA9PSBjaGFuLT5mZW5jZS5zZXF1ZW5jZV9hY2sgLSAxKSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbi0+ZmVuY2UubG9jaywgZmxhZ3MpOwogCQlub3V2ZWF1X2ZlbmNlX3VwZGF0ZShjaGFuKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbi0+ZmVuY2UubG9jaywgZmxhZ3MpOwogCiAJCUJVR19PTihjaGFuLT5mZW5jZS5zZXF1ZW5jZSA9PQogCQkgICAgICAgY2hhbi0+ZmVuY2Uuc2VxdWVuY2VfYWNrIC0gMSk7CkBAIC0xMzgsOSArMTM3LDkgQEAKIAlmZW5jZS0+c2VxdWVuY2UgPSArK2NoYW4tPmZlbmNlLnNlcXVlbmNlOwogCiAJa3JlZl9nZXQoJmZlbmNlLT5yZWZjb3VudCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPmZlbmNlLmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2soJmNoYW4tPmZlbmNlLmxvY2spOwogCWxpc3RfYWRkX3RhaWwoJmZlbmNlLT5lbnRyeSwgJmNoYW4tPmZlbmNlLnBlbmRpbmcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPmZlbmNlLmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9jaygmY2hhbi0+ZmVuY2UubG9jayk7CiAKIAlCRUdJTl9SSU5HKGNoYW4sIE52U3ViU3csIFVTRV9SRUZDTlQgPyAweDAwNTAgOiAweDAxNTAsIDEpOwogCU9VVF9SSU5HKGNoYW4sIGZlbmNlLT5zZXF1ZW5jZSk7CkBAIC0xNzMsMTQgKzE3MiwxMSBAQAogewogCXN0cnVjdCBub3V2ZWF1X2ZlbmNlICpmZW5jZSA9IG5vdXZlYXVfZmVuY2Uoc3luY19vYmopOwogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4gPSBmZW5jZS0+Y2hhbm5lbDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGZlbmNlLT5zaWduYWxsZWQpCiAJCXJldHVybiB0cnVlOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPmZlbmNlLmxvY2ssIGZsYWdzKTsKIAlub3V2ZWF1X2ZlbmNlX3VwZGF0ZShjaGFuKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5mZW5jZS5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIGZlbmNlLT5zaWduYWxsZWQ7CiB9CiAKQEAgLTE5MCw4ICsxODYsNiBAQAogCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyAoMyAqIERSTV9IWik7CiAJaW50IHJldCA9IDA7CiAKLQlfX3NldF9jdXJyZW50X3N0YXRlKGludHIgPyBUQVNLX0lOVEVSUlVQVElCTEUgOiBUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0KIAl3aGlsZSAoMSkgewogCQlpZiAobm91dmVhdV9mZW5jZV9zaWduYWxsZWQoc3luY19vYmosIHN5bmNfYXJnKSkKIAkJCWJyZWFrOwpAQCAtMjAxLDYgKzE5NSw4IEBACiAJCQlicmVhazsKIAkJfQogCisJCV9fc2V0X2N1cnJlbnRfc3RhdGUoaW50ciA/IFRBU0tfSU5URVJSVVBUSUJMRQorCQkJOiBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJCWlmIChsYXp5KQogCQkJc2NoZWR1bGVfdGltZW91dCgxKTsKIApAQCAtMjIxLDI3ICsyMTcsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZAotbm91dmVhdV9mZW5jZV9oYW5kbGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjaGFubmVsKQotewotCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiA9IE5VTEw7Ci0KLQlpZiAoY2hhbm5lbCA+PSAwICYmIGNoYW5uZWwgPCBkZXZfcHJpdi0+ZW5naW5lLmZpZm8uY2hhbm5lbHMpCi0JCWNoYW4gPSBkZXZfcHJpdi0+Zmlmb3NbY2hhbm5lbF07Ci0KLQlpZiAoY2hhbikgewotCQlzcGluX2xvY2tfaXJxKCZjaGFuLT5mZW5jZS5sb2NrKTsKLQkJbm91dmVhdV9mZW5jZV91cGRhdGUoY2hhbik7Ci0JCXNwaW5fdW5sb2NrX2lycSgmY2hhbi0+ZmVuY2UubG9jayk7Ci0JfQotfQotCiBpbnQKIG5vdXZlYXVfZmVuY2VfaW5pdChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuKQogewogCUlOSVRfTElTVF9IRUFEKCZjaGFuLT5mZW5jZS5wZW5kaW5nKTsKIAlzcGluX2xvY2tfaW5pdCgmY2hhbi0+ZmVuY2UubG9jayk7CisJYXRvbWljX3NldCgmY2hhbi0+ZmVuY2UubGFzdF9zZXF1ZW5jZV9pcnEsIDApOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYwppbmRleCA2OWM3NmNmLi41NDdmMmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMKQEAgLTEzNyw4ICsxMzcsNiBAQAogCXVpbnQzMl90IGZsYWdzID0gMDsKIAlpbnQgcmV0ID0gMDsKIAotCU5PVVZFQVVfQ0hFQ0tfSU5JVElBTElTRURfV0lUSF9SRVRVUk47Ci0KIAlpZiAodW5saWtlbHkoZGV2X3ByaXYtPnR0bS5iZGV2LmRldl9tYXBwaW5nID09IE5VTEwpKQogCQlkZXZfcHJpdi0+dHRtLmJkZXYuZGV2X21hcHBpbmcgPSBkZXZfcHJpdi0+ZGV2LT5kZXZfbWFwcGluZzsKIApAQCAtNTc3LDEwICs1NzUsOSBAQAogCXN0cnVjdCBkcm1fbm91dmVhdV9nZW1fcHVzaGJ1Zl9ibyAqYm87CiAJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbjsKIAlzdHJ1Y3QgdmFsaWRhdGVfb3Agb3A7Ci0Jc3RydWN0IG5vdXZlYXVfZmVuY2UgKmZlbmNlID0gMDsKKwlzdHJ1Y3Qgbm91dmVhdV9mZW5jZSAqZmVuY2UgPSBOVUxMOwogCWludCBpLCBqLCByZXQgPSAwLCBkb19yZWxvYyA9IDA7CiAKLQlOT1VWRUFVX0NIRUNLX0lOSVRJQUxJU0VEX1dJVEhfUkVUVVJOOwogCU5PVVZFQVVfR0VUX1VTRVJfQ0hBTk5FTF9XSVRIX1JFVFVSTihyZXEtPmNoYW5uZWwsIGZpbGVfcHJpdiwgY2hhbik7CiAKIAlyZXEtPnZyYW1fYXZhaWxhYmxlID0gZGV2X3ByaXYtPmZiX2FwZXJfZnJlZTsKQEAgLTc2MCw4ICs3NTcsNiBAQAogCWJvb2wgbm9fd2FpdCA9ICEhKHJlcS0+ZmxhZ3MgJiBOT1VWRUFVX0dFTV9DUFVfUFJFUF9OT1dBSVQpOwogCWludCByZXQgPSAtRUlOVkFMOwogCi0JTk9VVkVBVV9DSEVDS19JTklUSUFMSVNFRF9XSVRIX1JFVFVSTjsKLQogCWdlbSA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgcmVxLT5oYW5kbGUpOwogCWlmICghZ2VtKQogCQlyZXR1cm4gcmV0OwpAQCAtODAwLDggKzc5NSw2IEBACiAJc3RydWN0IG5vdXZlYXVfYm8gKm52Ym87CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKLQlOT1VWRUFVX0NIRUNLX0lOSVRJQUxJU0VEX1dJVEhfUkVUVVJOOwotCiAJZ2VtID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCByZXEtPmhhbmRsZSk7CiAJaWYgKCFnZW0pCiAJCXJldHVybiByZXQ7CkBAIC04MjcsOCArODIwLDYgQEAKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbTsKIAlpbnQgcmV0OwogCi0JTk9VVkVBVV9DSEVDS19JTklUSUFMSVNFRF9XSVRIX1JFVFVSTjsKLQogCWdlbSA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgcmVxLT5oYW5kbGUpOwogCWlmICghZ2VtKQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ3JjdHguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ3JjdHguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjczMWM1Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dyY3R4LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA5IFJlZCBIYXQgSW5jLgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCi0gKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKLSAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgotICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqIEF1dGhvcnM6IEJlbiBTa2VnZ3MKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLSNpbmNsdWRlICJkcm1QLmgiCi0jaW5jbHVkZSAibm91dmVhdV9kcnYuaCIKLQotc3RydWN0IG5vdXZlYXVfY3R4cHJvZyB7Ci0JdWludDMyX3Qgc2lnbmF0dXJlOwotCXVpbnQ4X3QgIHZlcnNpb247Ci0JdWludDE2X3QgbGVuZ3RoOwotCXVpbnQzMl90IGRhdGFbXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3Qgbm91dmVhdV9jdHh2YWxzIHsKLQl1aW50MzJfdCBzaWduYXR1cmU7Ci0JdWludDhfdCAgdmVyc2lvbjsKLQl1aW50MzJfdCBsZW5ndGg7Ci0Jc3RydWN0IHsKLQkJdWludDMyX3Qgb2Zmc2V0OwotCQl1aW50MzJfdCB2YWx1ZTsKLQl9IGRhdGFbXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1pbnQKLW5vdXZlYXVfZ3JjdHhfcHJvZ19sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfZW5naW5lICpwZ3JhcGggPSAmZGV2X3ByaXYtPmVuZ2luZS5ncmFwaDsKLQljb25zdCBpbnQgY2hpcHNldCA9IGRldl9wcml2LT5jaGlwc2V0OwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7Ci0JY29uc3Qgc3RydWN0IG5vdXZlYXVfY3R4cHJvZyAqY3A7Ci0JY29uc3Qgc3RydWN0IG5vdXZlYXVfY3R4dmFscyAqY3Y7Ci0JY2hhciBuYW1lWzMyXTsKLQlpbnQgcmV0LCBpOwotCi0JaWYgKHBncmFwaC0+YWNjZWxfYmxvY2tlZCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoIXBncmFwaC0+Y3R4cHJvZykgewotCQlzcHJpbnRmKG5hbWUsICJub3V2ZWF1L252JTAyeC5jdHhwcm9nIiwgY2hpcHNldCk7Ci0JCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBuYW1lLCAmZGV2LT5wZGV2LT5kZXYpOwotCQlpZiAocmV0KSB7Ci0JCQlOVl9FUlJPUihkZXYsICJObyBjdHhwcm9nIGZvciBOViUwMnhcbiIsIGNoaXBzZXQpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCi0JCXBncmFwaC0+Y3R4cHJvZyA9IGttZW1kdXAoZnctPmRhdGEsIGZ3LT5zaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFwZ3JhcGgtPmN0eHByb2cpIHsKLQkJCU5WX0VSUk9SKGRldiwgIk9PTSBjb3B5aW5nIGN0eHByb2dcbiIpOwotCQkJcmVsZWFzZV9maXJtd2FyZShmdyk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCi0JCWNwID0gcGdyYXBoLT5jdHhwcm9nOwotCQlpZiAobGUzMl90b19jcHUoY3AtPnNpZ25hdHVyZSkgIT0gMHg1MDQzNTY0ZSB8fAotCQkgICAgY3AtPnZlcnNpb24gIT0gMCB8fAotCQkgICAgbGUxNl90b19jcHUoY3AtPmxlbmd0aCkgIT0gKChmdy0+c2l6ZSAtIDcpIC8gNCkpIHsKLQkJCU5WX0VSUk9SKGRldiwgImN0eHByb2cgaW52YWxpZFxuIik7Ci0JCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKLQkJCW5vdXZlYXVfZ3JjdHhfZmluaShkZXYpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJcmVsZWFzZV9maXJtd2FyZShmdyk7Ci0JfQotCi0JaWYgKCFwZ3JhcGgtPmN0eHZhbHMpIHsKLQkJc3ByaW50ZihuYW1lLCAibm91dmVhdS9udiUwMnguY3R4dmFscyIsIGNoaXBzZXQpOwotCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgbmFtZSwgJmRldi0+cGRldi0+ZGV2KTsKLQkJaWYgKHJldCkgewotCQkJTlZfRVJST1IoZGV2LCAiTm8gY3R4dmFscyBmb3IgTlYlMDJ4XG4iLCBjaGlwc2V0KTsKLQkJCW5vdXZlYXVfZ3JjdHhfZmluaShkZXYpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCi0JCXBncmFwaC0+Y3R4dmFscyA9IGttZW1kdXAoZnctPmRhdGEsIGZ3LT5zaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFwZ3JhcGgtPmN0eHZhbHMpIHsKLQkJCU5WX0VSUk9SKGRldiwgIk9PTSBjb3B5aW5nIGN0eHZhbHNcbiIpOwotCQkJcmVsZWFzZV9maXJtd2FyZShmdyk7Ci0JCQlub3V2ZWF1X2dyY3R4X2ZpbmkoZGV2KTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0KLQkJY3YgPSAodm9pZCAqKXBncmFwaC0+Y3R4dmFsczsKLQkJaWYgKGxlMzJfdG9fY3B1KGN2LT5zaWduYXR1cmUpICE9IDB4NTY0MzU2NGUgfHwKLQkJICAgIGN2LT52ZXJzaW9uICE9IDAgfHwKLQkJICAgIGxlMzJfdG9fY3B1KGN2LT5sZW5ndGgpICE9ICgoZnctPnNpemUgLSA5KSAvIDgpKSB7Ci0JCQlOVl9FUlJPUihkZXYsICJjdHh2YWxzIGludmFsaWRcbiIpOwotCQkJcmVsZWFzZV9maXJtd2FyZShmdyk7Ci0JCQlub3V2ZWF1X2dyY3R4X2ZpbmkoZGV2KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXJlbGVhc2VfZmlybXdhcmUoZncpOwotCX0KLQotCWNwID0gcGdyYXBoLT5jdHhwcm9nOwotCi0JbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX0NUWENUTF9VQ09ERV9JTkRFWCwgMCk7Ci0JZm9yIChpID0gMDsgaSA8IGxlMTZfdG9fY3B1KGNwLT5sZW5ndGgpOyBpKyspCi0JCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9DVFhDVExfVUNPREVfREFUQSwKLQkJCWxlMzJfdG9fY3B1KGNwLT5kYXRhW2ldKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZAotbm91dmVhdV9ncmN0eF9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfZW5naW5lICpwZ3JhcGggPSAmZGV2X3ByaXYtPmVuZ2luZS5ncmFwaDsKLQotCWlmIChwZ3JhcGgtPmN0eHByb2cpIHsKLQkJa2ZyZWUocGdyYXBoLT5jdHhwcm9nKTsKLQkJcGdyYXBoLT5jdHhwcm9nID0gTlVMTDsKLQl9Ci0KLQlpZiAocGdyYXBoLT5jdHh2YWxzKSB7Ci0JCWtmcmVlKHBncmFwaC0+Y3R4cHJvZyk7Ci0JCXBncmFwaC0+Y3R4dmFscyA9IE5VTEw7Ci0JfQotfQotCi12b2lkCi1ub3V2ZWF1X2dyY3R4X3ZhbHNfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKmN0eCkKLXsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOwotCXN0cnVjdCBub3V2ZWF1X2N0eHZhbHMgKmN2ID0gcGdyYXBoLT5jdHh2YWxzOwotCWludCBpOwotCi0JaWYgKCFjdikKLQkJcmV0dXJuOwotCi0JZm9yIChpID0gMDsgaSA8IGxlMzJfdG9fY3B1KGN2LT5sZW5ndGgpOyBpKyspCi0JCW52X3dvMzIoZGV2LCBjdHgsIGxlMzJfdG9fY3B1KGN2LT5kYXRhW2ldLm9mZnNldCksCi0JCQlsZTMyX3RvX2NwdShjdi0+ZGF0YVtpXS52YWx1ZSkpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9pMmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaTJjLmMKaW5kZXggMzE2YTNjNy4uY2IwY2IzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9pMmMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2kyYy5jCkBAIC0yNzgsMyArMjc4LDQ1IEBACiAJcmV0dXJuIGkyYy0+Y2hhbjsKIH0KIAorYm9vbAorbm91dmVhdV9wcm9iZV9pMmNfYWRkcihzdHJ1Y3Qgbm91dmVhdV9pMmNfY2hhbiAqaTJjLCBpbnQgYWRkcikKK3sKKwl1aW50OF90IGJ1ZltdID0geyAwIH07CisJc3RydWN0IGkyY19tc2cgbXNnc1tdID0geworCQl7CisJCQkuYWRkciA9IGFkZHIsCisJCQkuZmxhZ3MgPSAwLAorCQkJLmxlbiA9IDEsCisJCQkuYnVmID0gYnVmLAorCQl9LAorCQl7CisJCQkuYWRkciA9IGFkZHIsCisJCQkuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJCS5sZW4gPSAxLAorCQkJLmJ1ZiA9IGJ1ZiwKKwkJfQorCX07CisKKwlyZXR1cm4gaTJjX3RyYW5zZmVyKCZpMmMtPmFkYXB0ZXIsIG1zZ3MsIDIpID09IDI7Cit9CisKK2ludAorbm91dmVhdV9pMmNfaWRlbnRpZnkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqd2hhdCwKKwkJICAgICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8sIGludCBpbmRleCkKK3sKKwlzdHJ1Y3Qgbm91dmVhdV9pMmNfY2hhbiAqaTJjID0gbm91dmVhdV9pMmNfZmluZChkZXYsIGluZGV4KTsKKwlpbnQgaTsKKworCU5WX0RFQlVHKGRldiwgIlByb2JpbmcgJXNzIG9uIEkyQyBidXM6ICVkXG4iLCB3aGF0LCBpbmRleCk7CisKKwlmb3IgKGkgPSAwOyBpbmZvW2ldLmFkZHI7IGkrKykgeworCQlpZiAobm91dmVhdV9wcm9iZV9pMmNfYWRkcihpMmMsIGluZm9baV0uYWRkcikpIHsKKwkJCU5WX0lORk8oZGV2LCAiRGV0ZWN0ZWQgJXM6ICVzXG4iLCB3aGF0LCBpbmZvW2ldLnR5cGUpOworCQkJcmV0dXJuIGk7CisJCX0KKwl9CisKKwlOVl9ERUJVRyhkZXYsICJObyBkZXZpY2VzIGZvdW5kLlxuIik7CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaTJjLmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2kyYy5oCmluZGV4IGM4ZWFmN2EuLjZkZDJmODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaTJjLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9pMmMuaApAQCAtNDUsNiArNDUsOSBAQAogaW50IG5vdXZlYXVfaTJjX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKiwgc3RydWN0IGRjYl9pMmNfZW50cnkgKiwgaW50IGluZGV4KTsKIHZvaWQgbm91dmVhdV9pMmNfZmluaShzdHJ1Y3QgZHJtX2RldmljZSAqLCBzdHJ1Y3QgZGNiX2kyY19lbnRyeSAqKTsKIHN0cnVjdCBub3V2ZWF1X2kyY19jaGFuICpub3V2ZWF1X2kyY19maW5kKHN0cnVjdCBkcm1fZGV2aWNlICosIGludCBpbmRleCk7Citib29sIG5vdXZlYXVfcHJvYmVfaTJjX2FkZHIoc3RydWN0IG5vdXZlYXVfaTJjX2NoYW4gKmkyYywgaW50IGFkZHIpOworaW50IG5vdXZlYXVfaTJjX2lkZW50aWZ5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKndoYXQsCisJCQkgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvLCBpbnQgaW5kZXgpOwogCiBpbnQgbm91dmVhdV9kcF9pMmNfYXV4X2NoKHN0cnVjdCBpMmNfYWRhcHRlciAqLCBpbnQgbW9kZSwgdWludDhfdCB3cml0ZV9ieXRlLAogCQkJICB1aW50OF90ICpyZWFkX2J5dGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMKaW5kZXggYzFmZDQyYi4uYTlmMzZhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21lbS5jCkBAIC0zNSwxNjIgKzM1LDYgQEAKICNpbmNsdWRlICJkcm1fc2FyZWEuaCIKICNpbmNsdWRlICJub3V2ZWF1X2Rydi5oIgogCi1zdGF0aWMgc3RydWN0IG1lbV9ibG9jayAqCi1zcGxpdF9ibG9jayhzdHJ1Y3QgbWVtX2Jsb2NrICpwLCB1aW50NjRfdCBzdGFydCwgdWludDY0X3Qgc2l6ZSwKLQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCi17Ci0JLyogTWF5YmUgY3V0IG9mZiB0aGUgc3RhcnQgb2YgYW4gZXhpc3RpbmcgYmxvY2sgKi8KLQlpZiAoc3RhcnQgPiBwLT5zdGFydCkgewotCQlzdHJ1Y3QgbWVtX2Jsb2NrICpuZXdibG9jayA9Ci0JCQlrbWFsbG9jKHNpemVvZigqbmV3YmxvY2spLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFuZXdibG9jaykKLQkJCWdvdG8gb3V0OwotCQluZXdibG9jay0+c3RhcnQgPSBzdGFydDsKLQkJbmV3YmxvY2stPnNpemUgPSBwLT5zaXplIC0gKHN0YXJ0IC0gcC0+c3RhcnQpOwotCQluZXdibG9jay0+ZmlsZV9wcml2ID0gTlVMTDsKLQkJbmV3YmxvY2stPm5leHQgPSBwLT5uZXh0OwotCQluZXdibG9jay0+cHJldiA9IHA7Ci0JCXAtPm5leHQtPnByZXYgPSBuZXdibG9jazsKLQkJcC0+bmV4dCA9IG5ld2Jsb2NrOwotCQlwLT5zaXplIC09IG5ld2Jsb2NrLT5zaXplOwotCQlwID0gbmV3YmxvY2s7Ci0JfQotCi0JLyogTWF5YmUgY3V0IG9mZiB0aGUgZW5kIG9mIGFuIGV4aXN0aW5nIGJsb2NrICovCi0JaWYgKHNpemUgPCBwLT5zaXplKSB7Ci0JCXN0cnVjdCBtZW1fYmxvY2sgKm5ld2Jsb2NrID0KLQkJCWttYWxsb2Moc2l6ZW9mKCpuZXdibG9jayksIEdGUF9LRVJORUwpOwotCQlpZiAoIW5ld2Jsb2NrKQotCQkJZ290byBvdXQ7Ci0JCW5ld2Jsb2NrLT5zdGFydCA9IHN0YXJ0ICsgc2l6ZTsKLQkJbmV3YmxvY2stPnNpemUgPSBwLT5zaXplIC0gc2l6ZTsKLQkJbmV3YmxvY2stPmZpbGVfcHJpdiA9IE5VTEw7Ci0JCW5ld2Jsb2NrLT5uZXh0ID0gcC0+bmV4dDsKLQkJbmV3YmxvY2stPnByZXYgPSBwOwotCQlwLT5uZXh0LT5wcmV2ID0gbmV3YmxvY2s7Ci0JCXAtPm5leHQgPSBuZXdibG9jazsKLQkJcC0+c2l6ZSA9IHNpemU7Ci0JfQotCi1vdXQ6Ci0JLyogT3VyIGJsb2NrIGlzIGluIHRoZSBtaWRkbGUgKi8KLQlwLT5maWxlX3ByaXYgPSBmaWxlX3ByaXY7Ci0JcmV0dXJuIHA7Ci19Ci0KLXN0cnVjdCBtZW1fYmxvY2sgKgotbm91dmVhdV9tZW1fYWxsb2NfYmxvY2soc3RydWN0IG1lbV9ibG9jayAqaGVhcCwgdWludDY0X3Qgc2l6ZSwKLQkJCWludCBhbGlnbjIsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCBpbnQgdGFpbCkKLXsKLQlzdHJ1Y3QgbWVtX2Jsb2NrICpwOwotCXVpbnQ2NF90IG1hc2sgPSAoMSA8PCBhbGlnbjIpIC0gMTsKLQotCWlmICghaGVhcCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAodGFpbCkgewotCQlsaXN0X2Zvcl9lYWNoX3ByZXYocCwgaGVhcCkgewotCQkJdWludDY0X3Qgc3RhcnQgPSAoKHAtPnN0YXJ0ICsgcC0+c2l6ZSkgLSBzaXplKSAmIH5tYXNrOwotCi0JCQlpZiAocC0+ZmlsZV9wcml2ID09IE5VTEwgJiYgc3RhcnQgPj0gcC0+c3RhcnQgJiYKLQkJCSAgICBzdGFydCArIHNpemUgPD0gcC0+c3RhcnQgKyBwLT5zaXplKQotCQkJCXJldHVybiBzcGxpdF9ibG9jayhwLCBzdGFydCwgc2l6ZSwgZmlsZV9wcml2KTsKLQkJfQotCX0gZWxzZSB7Ci0JCWxpc3RfZm9yX2VhY2gocCwgaGVhcCkgewotCQkJdWludDY0X3Qgc3RhcnQgPSAocC0+c3RhcnQgKyBtYXNrKSAmIH5tYXNrOwotCi0JCQlpZiAocC0+ZmlsZV9wcml2ID09IE5VTEwgJiYKLQkJCSAgICBzdGFydCArIHNpemUgPD0gcC0+c3RhcnQgKyBwLT5zaXplKQotCQkJCXJldHVybiBzcGxpdF9ibG9jayhwLCBzdGFydCwgc2l6ZSwgZmlsZV9wcml2KTsKLQkJfQotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi12b2lkIG5vdXZlYXVfbWVtX2ZyZWVfYmxvY2soc3RydWN0IG1lbV9ibG9jayAqcCkKLXsKLQlwLT5maWxlX3ByaXYgPSBOVUxMOwotCi0JLyogQXNzdW1lcyBhIHNpbmdsZSBjb250aWd1b3VzIHJhbmdlLiAgTmVlZHMgYSBzcGVjaWFsIGZpbGVfcHJpdiBpbgotCSAqICdoZWFwJyB0byBzdG9wIGl0IGJlaW5nIHN1YnN1bWVkLgotCSAqLwotCWlmIChwLT5uZXh0LT5maWxlX3ByaXYgPT0gTlVMTCkgewotCQlzdHJ1Y3QgbWVtX2Jsb2NrICpxID0gcC0+bmV4dDsKLQkJcC0+c2l6ZSArPSBxLT5zaXplOwotCQlwLT5uZXh0ID0gcS0+bmV4dDsKLQkJcC0+bmV4dC0+cHJldiA9IHA7Ci0JCWtmcmVlKHEpOwotCX0KLQotCWlmIChwLT5wcmV2LT5maWxlX3ByaXYgPT0gTlVMTCkgewotCQlzdHJ1Y3QgbWVtX2Jsb2NrICpxID0gcC0+cHJldjsKLQkJcS0+c2l6ZSArPSBwLT5zaXplOwotCQlxLT5uZXh0ID0gcC0+bmV4dDsKLQkJcS0+bmV4dC0+cHJldiA9IHE7Ci0JCWtmcmVlKHApOwotCX0KLX0KLQotLyogSW5pdGlhbGl6ZS4gIEhvdyB0byBjaGVjayBmb3IgYW4gdW5pbml0aWFsaXplZCBoZWFwPwotICovCi1pbnQgbm91dmVhdV9tZW1faW5pdF9oZWFwKHN0cnVjdCBtZW1fYmxvY2sgKipoZWFwLCB1aW50NjRfdCBzdGFydCwKLQkJCSAgdWludDY0X3Qgc2l6ZSkKLXsKLQlzdHJ1Y3QgbWVtX2Jsb2NrICpibG9ja3MgPSBrbWFsbG9jKHNpemVvZigqYmxvY2tzKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWJsb2NrcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkqaGVhcCA9IGttYWxsb2Moc2l6ZW9mKCoqaGVhcCksIEdGUF9LRVJORUwpOwotCWlmICghKmhlYXApIHsKLQkJa2ZyZWUoYmxvY2tzKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JYmxvY2tzLT5zdGFydCA9IHN0YXJ0OwotCWJsb2Nrcy0+c2l6ZSA9IHNpemU7Ci0JYmxvY2tzLT5maWxlX3ByaXYgPSBOVUxMOwotCWJsb2Nrcy0+bmV4dCA9IGJsb2Nrcy0+cHJldiA9ICpoZWFwOwotCi0JbWVtc2V0KCpoZWFwLCAwLCBzaXplb2YoKipoZWFwKSk7Ci0JKCpoZWFwKS0+ZmlsZV9wcml2ID0gKHN0cnVjdCBkcm1fZmlsZSAqKSAtMTsKLQkoKmhlYXApLT5uZXh0ID0gKCpoZWFwKS0+cHJldiA9IGJsb2NrczsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEZyZWUgYWxsIGJsb2NrcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlbGVhc2luZyBmaWxlX3ByaXYKLSAqLwotdm9pZCBub3V2ZWF1X21lbV9yZWxlYXNlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCBzdHJ1Y3QgbWVtX2Jsb2NrICpoZWFwKQotewotCXN0cnVjdCBtZW1fYmxvY2sgKnA7Ci0KLQlpZiAoIWhlYXAgfHwgIWhlYXAtPm5leHQpCi0JCXJldHVybjsKLQotCWxpc3RfZm9yX2VhY2gocCwgaGVhcCkgewotCQlpZiAocC0+ZmlsZV9wcml2ID09IGZpbGVfcHJpdikKLQkJCXAtPmZpbGVfcHJpdiA9IE5VTEw7Ci0JfQotCi0JLyogQXNzdW1lcyBhIHNpbmdsZSBjb250aWd1b3VzIHJhbmdlLiAgTmVlZHMgYSBzcGVjaWFsIGZpbGVfcHJpdiBpbgotCSAqICdoZWFwJyB0byBzdG9wIGl0IGJlaW5nIHN1YnN1bWVkLgotCSAqLwotCWxpc3RfZm9yX2VhY2gocCwgaGVhcCkgewotCQl3aGlsZSAoKHAtPmZpbGVfcHJpdiA9PSBOVUxMKSAmJgotCQkJCQkocC0+bmV4dC0+ZmlsZV9wcml2ID09IE5VTEwpICYmCi0JCQkJCShwLT5uZXh0ICE9IGhlYXApKSB7Ci0JCQlzdHJ1Y3QgbWVtX2Jsb2NrICpxID0gcC0+bmV4dDsKLQkJCXAtPnNpemUgKz0gcS0+c2l6ZTsKLQkJCXAtPm5leHQgPSBxLT5uZXh0OwotCQkJcC0+bmV4dC0+cHJldiA9IHA7Ci0JCQlrZnJlZShxKTsKLQkJfQotCX0KLX0KLQogLyoKICAqIE5WMTAtTlY0MCB0aWxpbmcgaGVscGVycwogICovCkBAIC0yOTksNyArMTQzLDYgQEAKIAkJcGh5cyB8PSAweDMwOwogCX0KIAotCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5wcmVwYXJlX2FjY2VzcyhkZXYsIHRydWUpOwogCXdoaWxlIChzaXplKSB7CiAJCXVuc2lnbmVkIG9mZnNldF9oID0gdXBwZXJfMzJfYml0cyhwaHlzKTsKIAkJdW5zaWduZWQgb2Zmc2V0X2wgPSBsb3dlcl8zMl9iaXRzKHBoeXMpOwpAQCAtMzMxLDM2ICsxNzQsMTIgQEAKIAkJCX0KIAkJfQogCX0KLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOworCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5mbHVzaChkZXYpOwogCi0JbnZfd3IzMihkZXYsIDB4MTAwYzgwLCAweDAwMDUwMDAxKTsKLQlpZiAoIW52X3dhaXQoMHgxMDBjODAsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDApKSB7Ci0JCU5WX0VSUk9SKGRldiwgInRpbWVvdXQ6ICgweDEwMGM4MCAmIDEpID09IDAgKDIpXG4iKTsKLQkJTlZfRVJST1IoZGV2LCAiMHgxMDBjODAgPSAweCUwOHhcbiIsIG52X3JkMzIoZGV2LCAweDEwMGM4MCkpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCW52X3dyMzIoZGV2LCAweDEwMGM4MCwgMHgwMDAwMDAwMSk7Ci0JaWYgKCFudl93YWl0KDB4MTAwYzgwLCAweDAwMDAwMDAxLCAweDAwMDAwMDAwKSkgewotCQlOVl9FUlJPUihkZXYsICJ0aW1lb3V0OiAoMHgxMDBjODAgJiAxKSA9PSAwICgyKVxuIik7Ci0JCU5WX0VSUk9SKGRldiwgIjB4MTAwYzgwID0gMHglMDh4XG4iLCBudl9yZDMyKGRldiwgMHgxMDBjODApKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQludl93cjMyKGRldiwgMHgxMDBjODAsIDB4MDAwNDAwMDEpOwotCWlmICghbnZfd2FpdCgweDEwMGM4MCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMCkpIHsKLQkJTlZfRVJST1IoZGV2LCAidGltZW91dDogKDB4MTAwYzgwICYgMSkgPT0gMCAoMilcbiIpOwotCQlOVl9FUlJPUihkZXYsICIweDEwMGM4MCA9IDB4JTA4eFxuIiwgbnZfcmQzMihkZXYsIDB4MTAwYzgwKSk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JbnZfd3IzMihkZXYsIDB4MTAwYzgwLCAweDAwMDYwMDAxKTsKLQlpZiAoIW52X3dhaXQoMHgxMDBjODAsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDApKSB7Ci0JCU5WX0VSUk9SKGRldiwgInRpbWVvdXQ6ICgweDEwMGM4MCAmIDEpID09IDAgKDIpXG4iKTsKLQkJTlZfRVJST1IoZGV2LCAiMHgxMDBjODAgPSAweCUwOHhcbiIsIG52X3JkMzIoZGV2LCAweDEwMGM4MCkpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQorCW52NTBfdm1fZmx1c2goZGV2LCA1KTsKKwludjUwX3ZtX2ZsdXNoKGRldiwgMCk7CisJbnY1MF92bV9mbHVzaChkZXYsIDQpOworCW52NTBfdm1fZmx1c2goZGV2LCA2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzc0LDcgKzE5Myw2IEBACiAJdmlydCAtPSBkZXZfcHJpdi0+dm1fdnJhbV9iYXNlOwogCXBhZ2VzID0gKHNpemUgPj4gMTYpIDw8IDE7CiAKLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0ucHJlcGFyZV9hY2Nlc3MoZGV2LCB0cnVlKTsKIAl3aGlsZSAocGFnZXMpIHsKIAkJcGd0ID0gZGV2X3ByaXYtPnZtX3ZyYW1fcHRbdmlydCA+PiAyOV07CiAJCXB0ZSA9ICh2aXJ0ICYgMHgxZmZlMDAwMFVMTCkgPj4gMTU7CkBAIC0zODgsNTcgKzIwNiwxOSBAQAogCQl3aGlsZSAocHRlIDwgZW5kKQogCQkJbnZfd28zMihkZXYsIHBndCwgcHRlKyssIDApOwogCX0KLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOworCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5mbHVzaChkZXYpOwogCi0JbnZfd3IzMihkZXYsIDB4MTAwYzgwLCAweDAwMDUwMDAxKTsKLQlpZiAoIW52X3dhaXQoMHgxMDBjODAsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDApKSB7Ci0JCU5WX0VSUk9SKGRldiwgInRpbWVvdXQ6ICgweDEwMGM4MCAmIDEpID09IDAgKDIpXG4iKTsKLQkJTlZfRVJST1IoZGV2LCAiMHgxMDBjODAgPSAweCUwOHhcbiIsIG52X3JkMzIoZGV2LCAweDEwMGM4MCkpOwotCQlyZXR1cm47Ci0JfQotCi0JbnZfd3IzMihkZXYsIDB4MTAwYzgwLCAweDAwMDAwMDAxKTsKLQlpZiAoIW52X3dhaXQoMHgxMDBjODAsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDApKSB7Ci0JCU5WX0VSUk9SKGRldiwgInRpbWVvdXQ6ICgweDEwMGM4MCAmIDEpID09IDAgKDIpXG4iKTsKLQkJTlZfRVJST1IoZGV2LCAiMHgxMDBjODAgPSAweCUwOHhcbiIsIG52X3JkMzIoZGV2LCAweDEwMGM4MCkpOwotCQlyZXR1cm47Ci0JfQotCi0JbnZfd3IzMihkZXYsIDB4MTAwYzgwLCAweDAwMDQwMDAxKTsKLQlpZiAoIW52X3dhaXQoMHgxMDBjODAsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDApKSB7Ci0JCU5WX0VSUk9SKGRldiwgInRpbWVvdXQ6ICgweDEwMGM4MCAmIDEpID09IDAgKDIpXG4iKTsKLQkJTlZfRVJST1IoZGV2LCAiMHgxMDBjODAgPSAweCUwOHhcbiIsIG52X3JkMzIoZGV2LCAweDEwMGM4MCkpOwotCQlyZXR1cm47Ci0JfQotCi0JbnZfd3IzMihkZXYsIDB4MTAwYzgwLCAweDAwMDYwMDAxKTsKLQlpZiAoIW52X3dhaXQoMHgxMDBjODAsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDApKSB7Ci0JCU5WX0VSUk9SKGRldiwgInRpbWVvdXQ6ICgweDEwMGM4MCAmIDEpID09IDAgKDIpXG4iKTsKLQkJTlZfRVJST1IoZGV2LCAiMHgxMDBjODAgPSAweCUwOHhcbiIsIG52X3JkMzIoZGV2LCAweDEwMGM4MCkpOwotCX0KKwludjUwX3ZtX2ZsdXNoKGRldiwgNSk7CisJbnY1MF92bV9mbHVzaChkZXYsIDApOworCW52NTBfdm1fZmx1c2goZGV2LCA0KTsKKwludjUwX3ZtX2ZsdXNoKGRldiwgNik7CiB9CiAKIC8qCiAgKiBDbGVhbnVwIGV2ZXJ5dGhpbmcKICAqLwotdm9pZCBub3V2ZWF1X21lbV90YWtlZG93bihzdHJ1Y3QgbWVtX2Jsb2NrICoqaGVhcCkKLXsKLQlzdHJ1Y3QgbWVtX2Jsb2NrICpwOwotCi0JaWYgKCEqaGVhcCkKLQkJcmV0dXJuOwotCi0JZm9yIChwID0gKCpoZWFwKS0+bmV4dDsgcCAhPSAqaGVhcDspIHsKLQkJc3RydWN0IG1lbV9ibG9jayAqcSA9IHA7Ci0JCXAgPSBwLT5uZXh0OwotCQlrZnJlZShxKTsKLQl9Ci0KLQlrZnJlZSgqaGVhcCk7Ci0JKmhlYXAgPSBOVUxMOwotfQotCi12b2lkIG5vdXZlYXVfbWVtX2Nsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit2b2lkCitub3V2ZWF1X21lbV9jbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKQEAgLTQ0OSw4ICsyMjksNyBAQAogCiAJbm91dmVhdV90dG1fZ2xvYmFsX3JlbGVhc2UoZGV2X3ByaXYpOwogCi0JaWYgKGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJiBkZXYtPmFncCAmJgotCSAgICBkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKSB7CisJaWYgKGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJiBkZXYtPmFncCkgewogCQlzdHJ1Y3QgZHJtX2FncF9tZW0gKmVudHJ5LCAqdGVtcGU7CiAKIAkJLyogUmVtb3ZlIEFHUCByZXNvdXJjZXMsIGJ1dCBsZWF2ZSBkZXYtPmFncApAQCAtNDcxLDI4ICsyNTAsMjkgQEAKIAl9CiAKIAlpZiAoZGV2X3ByaXYtPmZiX210cnIpIHsKLQkJZHJtX210cnJfZGVsKGRldl9wcml2LT5mYl9tdHJyLCBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KGRldiwgMSksCi0JCQkgICAgIGRybV9nZXRfcmVzb3VyY2VfbGVuKGRldiwgMSksIERSTV9NVFJSX1dDKTsKLQkJZGV2X3ByaXYtPmZiX210cnIgPSAwOworCQlkcm1fbXRycl9kZWwoZGV2X3ByaXYtPmZiX210cnIsCisJCQkgICAgIHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBkZXYsIDEpLAorCQkJICAgICBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgMSksIERSTV9NVFJSX1dDKTsKKwkJZGV2X3ByaXYtPmZiX210cnIgPSAtMTsKIAl9CiB9CiAKIHN0YXRpYyB1aW50MzJfdAogbm91dmVhdV9tZW1fZGV0ZWN0X252MDQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKLQl1aW50MzJfdCBib290MCA9IG52X3JkMzIoZGV2LCBOVjAzX0JPT1RfMCk7CisJdWludDMyX3QgYm9vdDAgPSBudl9yZDMyKGRldiwgTlYwNF9QRkJfQk9PVF8wKTsKIAogCWlmIChib290MCAmIDB4MDAwMDAxMDApCiAJCXJldHVybiAoKChib290MCA+PiAxMikgJiAweGYpICogMiArIDIpICogMTAyNCAqIDEwMjQ7CiAKLQlzd2l0Y2ggKGJvb3QwICYgTlYwM19CT09UXzBfUkFNX0FNT1VOVCkgewotCWNhc2UgTlYwNF9CT09UXzBfUkFNX0FNT1VOVF8zMk1COgorCXN3aXRjaCAoYm9vdDAgJiBOVjA0X1BGQl9CT09UXzBfUkFNX0FNT1VOVCkgeworCWNhc2UgTlYwNF9QRkJfQk9PVF8wX1JBTV9BTU9VTlRfMzJNQjoKIAkJcmV0dXJuIDMyICogMTAyNCAqIDEwMjQ7Ci0JY2FzZSBOVjA0X0JPT1RfMF9SQU1fQU1PVU5UXzE2TUI6CisJY2FzZSBOVjA0X1BGQl9CT09UXzBfUkFNX0FNT1VOVF8xNk1COgogCQlyZXR1cm4gMTYgKiAxMDI0ICogMTAyNDsKLQljYXNlIE5WMDRfQk9PVF8wX1JBTV9BTU9VTlRfOE1COgorCWNhc2UgTlYwNF9QRkJfQk9PVF8wX1JBTV9BTU9VTlRfOE1COgogCQlyZXR1cm4gOCAqIDEwMjQgKiAxMDI0OwotCWNhc2UgTlYwNF9CT09UXzBfUkFNX0FNT1VOVF80TUI6CisJY2FzZSBOVjA0X1BGQl9CT09UXzBfUkFNX0FNT1VOVF80TUI6CiAJCXJldHVybiA0ICogMTAyNCAqIDEwMjQ7CiAJfQogCkBAIC01MzYsMTIgKzMxNiwxOCBAQAogCX0gZWxzZQogCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiAoTlZfTkZPUkNFIHwgTlZfTkZPUkNFMikpIHsKIAkJZGV2X3ByaXYtPnZyYW1fc2l6ZSA9IG5vdXZlYXVfbWVtX2RldGVjdF9uZm9yY2UoZGV2KTsKKwl9IGVsc2UKKwlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA8IE5WXzUwKSB7CisJCWRldl9wcml2LT52cmFtX3NpemUgID0gbnZfcmQzMihkZXYsIE5WMDRfUEZCX0ZJRk9fREFUQSk7CisJCWRldl9wcml2LT52cmFtX3NpemUgJj0gTlYxMF9QRkJfRklGT19EQVRBX1JBTV9BTU9VTlRfTUJfTUFTSzsKIAl9IGVsc2UgewotCQlkZXZfcHJpdi0+dnJhbV9zaXplICA9IG52X3JkMzIoZGV2LCBOVjA0X0ZJRk9fREFUQSk7Ci0JCWRldl9wcml2LT52cmFtX3NpemUgJj0gTlYxMF9GSUZPX0RBVEFfUkFNX0FNT1VOVF9NQl9NQVNLOwotCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHhhYSB8fCBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweGFjKQorCQlkZXZfcHJpdi0+dnJhbV9zaXplID0gbnZfcmQzMihkZXYsIE5WMDRfUEZCX0ZJRk9fREFUQSk7CisJCWRldl9wcml2LT52cmFtX3NpemUgfD0gKGRldl9wcml2LT52cmFtX3NpemUgJiAweGZmKSA8PCAzMjsKKwkJZGV2X3ByaXYtPnZyYW1fc2l6ZSAmPSAweGZmZmZmZmZmMDBsbDsKKwkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4YWEgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHhhYykgewogCQkJZGV2X3ByaXYtPnZyYW1fc3lzX2Jhc2UgPSBudl9yZDMyKGRldiwgMHgxMDBlMTApOwogCQkJZGV2X3ByaXYtPnZyYW1fc3lzX2Jhc2UgPDw9IDEyOworCQl9CiAJfQogCiAJTlZfSU5GTyhkZXYsICJEZXRlY3RlZCAlZE1pQiBWUkFNXG4iLCAoaW50KShkZXZfcHJpdi0+dnJhbV9zaXplID4+IDIwKSk7CkBAIC01NTUsMTggKzM0MSwzNiBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCi0jaWYgX19PU19IQVNfQUdQCi1zdGF0aWMgdm9pZCBub3V2ZWF1X21lbV9yZXNldF9hZ3Aoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK2ludAorbm91dmVhdV9tZW1fcmVzZXRfYWdwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7Ci0JdWludDMyX3Qgc2F2ZWRfcGNpX252XzEsIHNhdmVkX3BjaV9udl8xOSwgcG1jX2VuYWJsZTsKKyNpZiBfX09TX0hBU19BR1AKKwl1aW50MzJfdCBzYXZlZF9wY2lfbnZfMSwgcG1jX2VuYWJsZTsKKwlpbnQgcmV0OworCisJLyogRmlyc3Qgb2YgYWxsLCBkaXNhYmxlIGZhc3Qgd3JpdGVzLCBvdGhlcndpc2UgaWYgaXQncworCSAqIGFscmVhZHkgZW5hYmxlZCBpbiB0aGUgQUdQIGJyaWRnZSBhbmQgd2UgZGlzYWJsZSB0aGUgY2FyZCdzCisJICogQUdQIGNvbnRyb2xsZXIgd2UgbWlnaHQgYmUgbG9ja2luZyBvdXJzZWx2ZXMgb3V0IG9mIGl0LiAqLworCWlmIChkZXYtPmFncC0+YWNxdWlyZWQpIHsKKwkJc3RydWN0IGRybV9hZ3BfaW5mbyBpbmZvOworCQlzdHJ1Y3QgZHJtX2FncF9tb2RlIG1vZGU7CisKKwkJcmV0ID0gZHJtX2FncF9pbmZvKGRldiwgJmluZm8pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQltb2RlLm1vZGUgPSBpbmZvLm1vZGUgJiB+MHgxMDsKKwkJcmV0ID0gZHJtX2FncF9lbmFibGUoZGV2LCBtb2RlKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQogCiAJc2F2ZWRfcGNpX252XzEgPSBudl9yZDMyKGRldiwgTlYwNF9QQlVTX1BDSV9OVl8xKTsKLQlzYXZlZF9wY2lfbnZfMTkgPSBudl9yZDMyKGRldiwgTlYwNF9QQlVTX1BDSV9OVl8xOSk7CiAKIAkvKiBjbGVhciBidXNtYXN0ZXIgYml0ICovCiAJbnZfd3IzMihkZXYsIE5WMDRfUEJVU19QQ0lfTlZfMSwgc2F2ZWRfcGNpX252XzEgJiB+MHg0KTsKLQkvKiBjbGVhciBTQkEgYW5kIEFHUCBiaXRzICovCi0JbnZfd3IzMihkZXYsIE5WMDRfUEJVU19QQ0lfTlZfMTksIHNhdmVkX3BjaV9udl8xOSAmIDB4ZmZmZmYwZmYpOworCS8qIGRpc2FibGUgQUdQICovCisJbnZfd3IzMihkZXYsIE5WMDRfUEJVU19QQ0lfTlZfMTksIDApOwogCiAJLyogcG93ZXIgY3ljbGUgcGdyYXBoLCBpZiBlbmFibGVkICovCiAJcG1jX2VuYWJsZSA9IG52X3JkMzIoZGV2LCBOVjAzX1BNQ19FTkFCTEUpOwpAQCAtNTc4LDExICszODIsMTIgQEAKIAl9CiAKIAkvKiBhbmQgcmVzdG9yZSAoZ2l2ZXMgZWZmZWN0IG9mIHJlc2V0dGluZyBBR1ApICovCi0JbnZfd3IzMihkZXYsIE5WMDRfUEJVU19QQ0lfTlZfMTksIHNhdmVkX3BjaV9udl8xOSk7CiAJbnZfd3IzMihkZXYsIE5WMDRfUEJVU19QQ0lfTlZfMSwgc2F2ZWRfcGNpX252XzEpOwotfQogI2VuZGlmCiAKKwlyZXR1cm4gMDsKK30KKwogaW50CiBub3V2ZWF1X21lbV9pbml0X2FncChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewpAQCAtNTkyLDExICszOTcsNiBAQAogCXN0cnVjdCBkcm1fYWdwX21vZGUgbW9kZTsKIAlpbnQgcmV0OwogCi0JaWYgKG5vdXZlYXVfbm9hZ3ApCi0JCXJldHVybiAwOwotCi0Jbm91dmVhdV9tZW1fcmVzZXRfYWdwKGRldik7Ci0KIAlpZiAoIWRldi0+YWdwLT5hY3F1aXJlZCkgewogCQlyZXQgPSBkcm1fYWdwX2FjcXVpcmUoZGV2KTsKIAkJaWYgKHJldCkgewpAQCAtNjMzLDcgKzQzMyw3IEBACiAJc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYgPSAmZGV2X3ByaXYtPnR0bS5iZGV2OwogCWludCByZXQsIGRtYV9iaXRzID0gMzI7CiAKLQlkZXZfcHJpdi0+ZmJfcGh5cyA9IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQoZGV2LCAxKTsKKwlkZXZfcHJpdi0+ZmJfcGh5cyA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBkZXYsIDEpOwogCWRldl9wcml2LT5nYXJ0X2luZm8udHlwZSA9IE5PVVZFQVVfR0FSVF9OT05FOwogCiAJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfNTAgJiYKQEAgLTY2NSw4ICs0NjUsOSBAQAogCiAJZGV2X3ByaXYtPmZiX2F2YWlsYWJsZV9zaXplID0gZGV2X3ByaXYtPnZyYW1fc2l6ZTsKIAlkZXZfcHJpdi0+ZmJfbWFwcGFibGVfcGFnZXMgPSBkZXZfcHJpdi0+ZmJfYXZhaWxhYmxlX3NpemU7Ci0JaWYgKGRldl9wcml2LT5mYl9tYXBwYWJsZV9wYWdlcyA+IGRybV9nZXRfcmVzb3VyY2VfbGVuKGRldiwgMSkpCi0JCWRldl9wcml2LT5mYl9tYXBwYWJsZV9wYWdlcyA9IGRybV9nZXRfcmVzb3VyY2VfbGVuKGRldiwgMSk7CisJaWYgKGRldl9wcml2LT5mYl9tYXBwYWJsZV9wYWdlcyA+IHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wZGV2LCAxKSkKKwkJZGV2X3ByaXYtPmZiX21hcHBhYmxlX3BhZ2VzID0KKwkJCXBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wZGV2LCAxKTsKIAlkZXZfcHJpdi0+ZmJfbWFwcGFibGVfcGFnZXMgPj49IFBBR0VfU0hJRlQ7CiAKIAkvKiByZW1vdmUgcmVzZXJ2ZWQgc3BhY2UgYXQgZW5kIG9mIHZyYW0gZnJvbSBhdmFpbGFibGUgYW1vdW50ICovCkBAIC02OTIsNyArNDkzLDggQEAKIAogCS8qIEdBUlQgKi8KICNpZiAhZGVmaW5lZChfX3Bvd2VycGNfXykgJiYgIWRlZmluZWQoX19pYTY0X18pCi0JaWYgKGRybV9kZXZpY2VfaXNfYWdwKGRldikgJiYgZGV2LT5hZ3ApIHsKKwlpZiAoZHJtX2RldmljZV9pc19hZ3AoZGV2KSAmJiBkZXYtPmFncCAmJiAhbm91dmVhdV9ub2FncCkgeworCQlub3V2ZWF1X21lbV9yZXNldF9hZ3AoZGV2KTsKIAkJcmV0ID0gbm91dmVhdV9tZW1faW5pdF9hZ3AoZGV2KTsKIAkJaWYgKHJldCkKIAkJCU5WX0VSUk9SKGRldiwgIkVycm9yIGluaXRpYWxpc2luZyBBR1A6ICVkXG4iLCByZXQpOwpAQCAtNzE4LDggKzUyMCw4IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JZGV2X3ByaXYtPmZiX210cnIgPSBkcm1fbXRycl9hZGQoZHJtX2dldF9yZXNvdXJjZV9zdGFydChkZXYsIDEpLAotCQkJCQkgZHJtX2dldF9yZXNvdXJjZV9sZW4oZGV2LCAxKSwKKwlkZXZfcHJpdi0+ZmJfbXRyciA9IGRybV9tdHJyX2FkZChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCAxKSwKKwkJCQkJIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wZGV2LCAxKSwKIAkJCQkJIERSTV9NVFJSX1dDKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ub3RpZmllci5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ub3RpZmllci5jCmluZGV4IDk1MzdmM2UuLjNlYzE4MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbm90aWZpZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X25vdGlmaWVyLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dF9lcnI7CiAKLQlyZXQgPSBub3V2ZWF1X21lbV9pbml0X2hlYXAoJmNoYW4tPm5vdGlmaWVyX2hlYXAsIDAsIG50ZnktPmJvLm1lbS5zaXplKTsKKwlyZXQgPSBkcm1fbW1faW5pdCgmY2hhbi0+bm90aWZpZXJfaGVhcCwgMCwgbnRmeS0+Ym8ubWVtLnNpemUpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2VycjsKIApAQCAtODAsNyArODAsNyBAQAogCW5vdXZlYXVfYm9fdW5waW4oY2hhbi0+bm90aWZpZXJfYm8pOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGNoYW4tPm5vdGlmaWVyX2JvLT5nZW0pOwotCW5vdXZlYXVfbWVtX3Rha2Vkb3duKCZjaGFuLT5ub3RpZmllcl9oZWFwKTsKKwlkcm1fbW1fdGFrZWRvd24oJmNoYW4tPm5vdGlmaWVyX2hlYXApOwogfQogCiBzdGF0aWMgdm9pZApAQCAtOTAsNyArOTAsNyBAQAogCU5WX0RFQlVHKGRldiwgIlxuIik7CiAKIAlpZiAoZ3B1b2JqLT5wcml2KQotCQlub3V2ZWF1X21lbV9mcmVlX2Jsb2NrKGdwdW9iai0+cHJpdik7CisJCWRybV9tbV9wdXRfYmxvY2soZ3B1b2JqLT5wcml2KTsKIH0KIAogaW50CkBAIC0xMDAsMTggKzEwMCwxMyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKm5vYmogPSBOVUxMOwotCXN0cnVjdCBtZW1fYmxvY2sgKm1lbTsKKwlzdHJ1Y3QgZHJtX21tX25vZGUgKm1lbTsKIAl1aW50MzJfdCBvZmZzZXQ7CiAJaW50IHRhcmdldCwgcmV0OwogCi0JaWYgKCFjaGFuLT5ub3RpZmllcl9oZWFwKSB7Ci0JCU5WX0VSUk9SKGRldiwgIkNoYW5uZWwgJWQgZG9lc24ndCBoYXZlIGEgbm90aWZpZXIgaGVhcCFcbiIsCi0JCQkgY2hhbi0+aWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltZW0gPSBub3V2ZWF1X21lbV9hbGxvY19ibG9jayhjaGFuLT5ub3RpZmllcl9oZWFwLCBzaXplLCAwLAotCQkJCSAgICAgIChzdHJ1Y3QgZHJtX2ZpbGUgKiktMiwgMCk7CisJbWVtID0gZHJtX21tX3NlYXJjaF9mcmVlKCZjaGFuLT5ub3RpZmllcl9oZWFwLCBzaXplLCAwLCAwKTsKKwlpZiAobWVtKQorCQltZW0gPSBkcm1fbW1fZ2V0X2Jsb2NrKG1lbSwgc2l6ZSwgMCk7CiAJaWYgKCFtZW0pIHsKIAkJTlZfRVJST1IoZGV2LCAiQ2hhbm5lbCAlZCBub3RpZmllciBibG9jayBmdWxsXG4iLCBjaGFuLT5pZCk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTQ0LDE3ICsxMzksMTcgQEAKIAkJCQkgICAgIG1lbS0+c2l6ZSwgTlZfRE1BX0FDQ0VTU19SVywgdGFyZ2V0LAogCQkJCSAgICAgJm5vYmopOwogCWlmIChyZXQpIHsKLQkJbm91dmVhdV9tZW1fZnJlZV9ibG9jayhtZW0pOworCQlkcm1fbW1fcHV0X2Jsb2NrKG1lbSk7CiAJCU5WX0VSUk9SKGRldiwgIkVycm9yIGNyZWF0aW5nIG5vdGlmaWVyIGN0eGRtYTogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQotCW5vYmotPmR0b3IgICA9IG5vdXZlYXVfbm90aWZpZXJfZ3B1b2JqX2R0b3I7Ci0Jbm9iai0+cHJpdiAgID0gbWVtOworCW5vYmotPmR0b3IgPSBub3V2ZWF1X25vdGlmaWVyX2dwdW9ial9kdG9yOworCW5vYmotPnByaXYgPSBtZW07CiAKIAlyZXQgPSBub3V2ZWF1X2dwdW9ial9yZWZfYWRkKGRldiwgY2hhbiwgaGFuZGxlLCBub2JqLCBOVUxMKTsKIAlpZiAocmV0KSB7CiAJCW5vdXZlYXVfZ3B1b2JqX2RlbChkZXYsICZub2JqKTsKLQkJbm91dmVhdV9tZW1fZnJlZV9ibG9jayhtZW0pOworCQlkcm1fbW1fcHV0X2Jsb2NrKG1lbSk7CiAJCU5WX0VSUk9SKGRldiwgIkVycm9yIHJlZmVyZW5jaW5nIG5vdGlmaWVyIGN0eGRtYTogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtMTcwLDcgKzE2NSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHBvZmZzZXQpIHsKLQkJc3RydWN0IG1lbV9ibG9jayAqbWVtID0gbm9iai0+cHJpdjsKKwkJc3RydWN0IGRybV9tbV9ub2RlICptZW0gPSBub2JqLT5wcml2OwogCiAJCWlmICgqcG9mZnNldCA+PSBtZW0tPnNpemUpCiAJCQlyZXR1cm4gZmFsc2U7CkBAIC0xODksNyArMTg0LDYgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuOwogCWludCByZXQ7CiAKLQlOT1VWRUFVX0NIRUNLX0lOSVRJQUxJU0VEX1dJVEhfUkVUVVJOOwogCU5PVVZFQVVfR0VUX1VTRVJfQ0hBTk5FTF9XSVRIX1JFVFVSTihuYS0+Y2hhbm5lbCwgZmlsZV9wcml2LCBjaGFuKTsKIAogCXJldCA9IG5vdXZlYXVfbm90aWZpZXJfYWxsb2MoY2hhbiwgbmEtPmhhbmRsZSwgbmEtPnNpemUsICZuYS0+b2Zmc2V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfb2JqZWN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X29iamVjdC5jCmluZGV4IGU3YzEwMGIuLmI2YmNiMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfb2JqZWN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9vYmplY3QuYwpAQCAtMTMyLDcgKzEzMiw2IEBACiAJCX0KIAl9CiAKLQlpbnN0bWVtLT5wcmVwYXJlX2FjY2VzcyhkZXYsIHRydWUpOwogCWNvID0gaG8gPSBub3V2ZWF1X3JhbWh0X2hhc2hfaGFuZGxlKGRldiwgY2hhbi0+aWQsIHJlZi0+aGFuZGxlKTsKIAlkbyB7CiAJCWlmICghbm91dmVhdV9yYW1odF9lbnRyeV92YWxpZChkZXYsIHJhbWh0LCBjbykpIHsKQEAgLTE0Myw3ICsxNDIsNyBAQAogCQkJbnZfd28zMihkZXYsIHJhbWh0LCAoY28gKyA0KS80LCBjdHgpOwogCiAJCQlsaXN0X2FkZF90YWlsKCZyZWYtPmxpc3QsICZjaGFuLT5yYW1odF9yZWZzKTsKLQkJCWluc3RtZW0tPmZpbmlzaF9hY2Nlc3MoZGV2KTsKKwkJCWluc3RtZW0tPmZsdXNoKGRldik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlOVl9ERUJVRyhkZXYsICJjb2xsaXNpb24gY2glZCAweCUwOHg6IGg9MHglMDh4XG4iLApAQCAtMTUzLDcgKzE1Miw2IEBACiAJCWlmIChjbyA+PSBkZXZfcHJpdi0+cmFtaHRfc2l6ZSkKIAkJCWNvID0gMDsKIAl9IHdoaWxlIChjbyAhPSBobyk7Ci0JaW5zdG1lbS0+ZmluaXNoX2FjY2VzcyhkZXYpOwogCiAJTlZfRVJST1IoZGV2LCAiUkFNSFQgc3BhY2UgZXhoYXVzdGVkLiBjaD0lZFxuIiwgY2hhbi0+aWQpOwogCXJldHVybiAtRU5PTUVNOwpAQCAtMTczLDcgKzE3MSw2IEBACiAJCXJldHVybjsKIAl9CiAKLQlpbnN0bWVtLT5wcmVwYXJlX2FjY2VzcyhkZXYsIHRydWUpOwogCWNvID0gaG8gPSBub3V2ZWF1X3JhbWh0X2hhc2hfaGFuZGxlKGRldiwgY2hhbi0+aWQsIHJlZi0+aGFuZGxlKTsKIAlkbyB7CiAJCWlmIChub3V2ZWF1X3JhbWh0X2VudHJ5X3ZhbGlkKGRldiwgcmFtaHQsIGNvKSAmJgpAQCAtMTg2LDcgKzE4Myw3IEBACiAJCQludl93bzMyKGRldiwgcmFtaHQsIChjbyArIDQpLzQsIDB4MDAwMDAwMDApOwogCiAJCQlsaXN0X2RlbCgmcmVmLT5saXN0KTsKLQkJCWluc3RtZW0tPmZpbmlzaF9hY2Nlc3MoZGV2KTsKKwkJCWluc3RtZW0tPmZsdXNoKGRldik7CiAJCQlyZXR1cm47CiAJCX0KIApAQCAtMTk1LDcgKzE5Miw2IEBACiAJCQljbyA9IDA7CiAJfSB3aGlsZSAoY28gIT0gaG8pOwogCWxpc3RfZGVsKCZyZWYtPmxpc3QpOwotCWluc3RtZW0tPmZpbmlzaF9hY2Nlc3MoZGV2KTsKIAogCU5WX0VSUk9SKGRldiwgIlJBTUhUIGVudHJ5IG5vdCBmb3VuZC4gY2g9JWQsIGhhbmRsZT0weCUwOHhcbiIsCiAJCSBjaGFuLT5pZCwgcmVmLT5oYW5kbGUpOwpAQCAtMjA5LDcgKzIwNSw3IEBACiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3Qgbm91dmVhdV9lbmdpbmUgKmVuZ2luZSA9ICZkZXZfcHJpdi0+ZW5naW5lOwogCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqZ3B1b2JqOwotCXN0cnVjdCBtZW1fYmxvY2sgKnByYW1pbiA9IE5VTEw7CisJc3RydWN0IGRybV9tbSAqcHJhbWluID0gTlVMTDsKIAlpbnQgcmV0OwogCiAJTlZfREVCVUcoZGV2LCAiY2glZCBzaXplPSV1IGFsaWduPSVkIGZsYWdzPTB4JTA4eFxuIiwKQEAgLTIzMywyNSArMjI5LDEyIEBACiAJICogYXZhaWxhYmxlLgogCSAqLwogCWlmIChjaGFuKSB7Ci0JCWlmIChjaGFuLT5yYW1pbl9oZWFwKSB7Ci0JCQlOVl9ERUJVRyhkZXYsICJwcml2YXRlIGhlYXBcbiIpOwotCQkJcHJhbWluID0gY2hhbi0+cmFtaW5faGVhcDsKLQkJfSBlbHNlCi0JCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlIDwgTlZfNTApIHsKLQkJCU5WX0RFQlVHKGRldiwgImdsb2JhbCBoZWFwIGZhbGxiYWNrXG4iKTsKLQkJCXByYW1pbiA9IGRldl9wcml2LT5yYW1pbl9oZWFwOwotCQl9CisJCU5WX0RFQlVHKGRldiwgImNoYW5uZWwgaGVhcFxuIik7CisJCXByYW1pbiA9ICZjaGFuLT5yYW1pbl9oZWFwOwogCX0gZWxzZSB7CiAJCU5WX0RFQlVHKGRldiwgImdsb2JhbCBoZWFwXG4iKTsKLQkJcHJhbWluID0gZGV2X3ByaXYtPnJhbWluX2hlYXA7Ci0JfQorCQlwcmFtaW4gPSAmZGV2X3ByaXYtPnJhbWluX2hlYXA7CiAKLQlpZiAoIXByYW1pbikgewotCQlOVl9FUlJPUihkZXYsICJObyBQUkFNSU4gaGVhcCFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoIWNoYW4pIHsKIAkJcmV0ID0gZW5naW5lLT5pbnN0bWVtLnBvcHVsYXRlKGRldiwgZ3B1b2JqLCAmc2l6ZSk7CiAJCWlmIChyZXQpIHsKIAkJCW5vdXZlYXVfZ3B1b2JqX2RlbChkZXYsICZncHVvYmopOwpAQCAtMjYwLDkgKzI0MywxMCBAQAogCX0KIAogCS8qIEFsbG9jYXRlIGEgY2h1bmsgb2YgdGhlIFBSQU1JTiBhcGVydHVyZSAqLwotCWdwdW9iai0+aW1fcHJhbWluID0gbm91dmVhdV9tZW1fYWxsb2NfYmxvY2socHJhbWluLCBzaXplLAotCQkJCQkJICAgIGRybV9vcmRlcihhbGlnbiksCi0JCQkJCQkgICAgKHN0cnVjdCBkcm1fZmlsZSAqKS0yLCAwKTsKKwlncHVvYmotPmltX3ByYW1pbiA9IGRybV9tbV9zZWFyY2hfZnJlZShwcmFtaW4sIHNpemUsIGFsaWduLCAwKTsKKwlpZiAoZ3B1b2JqLT5pbV9wcmFtaW4pCisJCWdwdW9iai0+aW1fcHJhbWluID0gZHJtX21tX2dldF9ibG9jayhncHVvYmotPmltX3ByYW1pbiwgc2l6ZSwgYWxpZ24pOworCiAJaWYgKCFncHVvYmotPmltX3ByYW1pbikgewogCQlub3V2ZWF1X2dwdW9ial9kZWwoZGV2LCAmZ3B1b2JqKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yNzksMTAgKzI2Myw5IEBACiAJaWYgKGdwdW9iai0+ZmxhZ3MgJiBOVk9CSl9GTEFHX1pFUk9fQUxMT0MpIHsKIAkJaW50IGk7CiAKLQkJZW5naW5lLT5pbnN0bWVtLnByZXBhcmVfYWNjZXNzKGRldiwgdHJ1ZSk7CiAJCWZvciAoaSA9IDA7IGkgPCBncHVvYmotPmltX3ByYW1pbi0+c2l6ZTsgaSArPSA0KQogCQkJbnZfd28zMihkZXYsIGdwdW9iaiwgaS80LCAwKTsKLQkJZW5naW5lLT5pbnN0bWVtLmZpbmlzaF9hY2Nlc3MoZGV2KTsKKwkJZW5naW5lLT5pbnN0bWVtLmZsdXNoKGRldik7CiAJfQogCiAJKmdwdW9ial9yZXQgPSBncHVvYmo7CkBAIC0zNzAsMTAgKzM1Myw5IEBACiAJfQogCiAJaWYgKGdwdW9iai0+aW1fcHJhbWluICYmIChncHVvYmotPmZsYWdzICYgTlZPQkpfRkxBR19aRVJPX0ZSRUUpKSB7Ci0JCWVuZ2luZS0+aW5zdG1lbS5wcmVwYXJlX2FjY2VzcyhkZXYsIHRydWUpOwogCQlmb3IgKGkgPSAwOyBpIDwgZ3B1b2JqLT5pbV9wcmFtaW4tPnNpemU7IGkgKz0gNCkKIAkJCW52X3dvMzIoZGV2LCBncHVvYmosIGkvNCwgMCk7Ci0JCWVuZ2luZS0+aW5zdG1lbS5maW5pc2hfYWNjZXNzKGRldik7CisJCWVuZ2luZS0+aW5zdG1lbS5mbHVzaChkZXYpOwogCX0KIAogCWlmIChncHVvYmotPmR0b3IpCkBAIC0zODYsNyArMzY4LDcgQEAKIAkJaWYgKGdwdW9iai0+ZmxhZ3MgJiBOVk9CSl9GTEFHX0ZBS0UpCiAJCQlrZnJlZShncHVvYmotPmltX3ByYW1pbik7CiAJCWVsc2UKLQkJCW5vdXZlYXVfbWVtX2ZyZWVfYmxvY2soZ3B1b2JqLT5pbV9wcmFtaW4pOworCQkJZHJtX21tX3B1dF9ibG9jayhncHVvYmotPmltX3ByYW1pbik7CiAJfQogCiAJbGlzdF9kZWwoJmdwdW9iai0+bGlzdCk7CkBAIC01ODksNyArNTcxLDcgQEAKIAlsaXN0X2FkZF90YWlsKCZncHVvYmotPmxpc3QsICZkZXZfcHJpdi0+Z3B1b2JqX2xpc3QpOwogCiAJaWYgKHBfb2Zmc2V0ICE9IH4wKSB7Ci0JCWdwdW9iai0+aW1fcHJhbWluID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1lbV9ibG9jayksCisJCWdwdW9iai0+aW1fcHJhbWluID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRybV9tbV9ub2RlKSwKIAkJCQkJICAgIEdGUF9LRVJORUwpOwogCQlpZiAoIWdwdW9iai0+aW1fcHJhbWluKSB7CiAJCQlub3V2ZWF1X2dwdW9ial9kZWwoZGV2LCAmZ3B1b2JqKTsKQEAgLTYwNSwxMCArNTg3LDkgQEAKIAl9CiAKIAlpZiAoZ3B1b2JqLT5mbGFncyAmIE5WT0JKX0ZMQUdfWkVST19BTExPQykgewotCQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0ucHJlcGFyZV9hY2Nlc3MoZGV2LCB0cnVlKTsKIAkJZm9yIChpID0gMDsgaSA8IGdwdW9iai0+aW1fcHJhbWluLT5zaXplOyBpICs9IDQpCiAJCQludl93bzMyKGRldiwgZ3B1b2JqLCBpLzQsIDApOwotCQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOworCQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmx1c2goZGV2KTsKIAl9CiAKIAlpZiAocHJlZikgewpAQCAtNjk2LDggKzY3Nyw2IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JaW5zdG1lbS0+cHJlcGFyZV9hY2Nlc3MoZGV2LCB0cnVlKTsKLQogCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlIDwgTlZfNTApIHsKIAkJdWludDMyX3QgZnJhbWUsIGFkanVzdCwgcHRlX2ZsYWdzID0gMDsKIApAQCAtNzM0LDcgKzcxMyw3IEBACiAJCW52X3dvMzIoZGV2LCAqZ3B1b2JqLCA1LCBmbGFnczUpOwogCX0KIAotCWluc3RtZW0tPmZpbmlzaF9hY2Nlc3MoZGV2KTsKKwlpbnN0bWVtLT5mbHVzaChkZXYpOwogCiAJKCpncHVvYmopLT5lbmdpbmUgPSBOVk9CSl9FTkdJTkVfU1c7CiAJKCpncHVvYmopLT5jbGFzcyAgPSBjbGFzczsKQEAgLTg0OSw3ICs4MjgsNiBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5wcmVwYXJlX2FjY2VzcyhkZXYsIHRydWUpOwogCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WXzUwKSB7CiAJCW52X3dvMzIoZGV2LCAqZ3B1b2JqLCAwLCBjbGFzcyk7CiAJCW52X3dvMzIoZGV2LCAqZ3B1b2JqLCA1LCAweDAwMDEwMDAwKTsKQEAgLTg3NCw3ICs4NTIsNyBAQAogCQkJfQogCQl9CiAJfQotCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5maW5pc2hfYWNjZXNzKGRldik7CisJZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLmZsdXNoKGRldik7CiAKIAkoKmdwdW9iaiktPmVuZ2luZSA9IE5WT0JKX0VOR0lORV9HUjsKIAkoKmdwdW9iaiktPmNsYXNzICA9IGNsYXNzOwpAQCAtOTIwLDYgKzg5OCw3IEBACiAJYmFzZSA9IDA7CiAKIAkvKiBQR1JBUEggY29udGV4dCAqLworCXNpemUgKz0gZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC5ncmN0eF9zaXplOwogCiAJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfNTApIHsKIAkJLyogVmFyaW91cyBmaXhlZCB0YWJsZSB0aGluZ29zICovCkBAIC05MzAsMTIgKzkwOSw4IEBACiAJCXNpemUgKz0gMHg4MDAwOwogCQkvKiBSQU1GQyAqLwogCQlzaXplICs9IDB4MTAwMDsKLQkJLyogUEdSQVBIIGNvbnRleHQgKi8KLQkJc2l6ZSArPSAweDcwMDAwOwogCX0KIAotCU5WX0RFQlVHKGRldiwgImNoJWQgUFJBTUlOIHNpemU6IDB4JTA4eCBieXRlcywgYmFzZSBhbGxvYz0weCUwOHhcbiIsCi0JCSBjaGFuLT5pZCwgc2l6ZSwgYmFzZSk7CiAJcmV0ID0gbm91dmVhdV9ncHVvYmpfbmV3X3JlZihkZXYsIE5VTEwsIE5VTEwsIDAsIHNpemUsIDB4MTAwMCwgMCwKIAkJCQkgICAgICZjaGFuLT5yYW1pbik7CiAJaWYgKHJldCkgewpAQCAtOTQ0LDggKzkxOSw3IEBACiAJfQogCXByYW1pbiA9IGNoYW4tPnJhbWluLT5ncHVvYmo7CiAKLQlyZXQgPSBub3V2ZWF1X21lbV9pbml0X2hlYXAoJmNoYW4tPnJhbWluX2hlYXAsCi0JCQkJICAgIHByYW1pbi0+aW1fcHJhbWluLT5zdGFydCArIGJhc2UsIHNpemUpOworCXJldCA9IGRybV9tbV9pbml0KCZjaGFuLT5yYW1pbl9oZWFwLCBwcmFtaW4tPmltX3ByYW1pbi0+c3RhcnQgKyBiYXNlLCBzaXplKTsKIAlpZiAocmV0KSB7CiAJCU5WX0VSUk9SKGRldiwgIkVycm9yIGNyZWF0aW5nIFBSQU1JTiBoZWFwOiAlZFxuIiwgcmV0KTsKIAkJbm91dmVhdV9ncHVvYmpfcmVmX2RlbChkZXYsICZjaGFuLT5yYW1pbik7CkBAIC05NjksMTUgKzk0MywxMSBAQAogCiAJTlZfREVCVUcoZGV2LCAiY2glZCB2cmFtPTB4JTA4eCB0dD0weCUwOHhcbiIsIGNoYW4tPmlkLCB2cmFtX2gsIHR0X2gpOwogCi0JLyogUmVzZXJ2ZSBhIGJsb2NrIG9mIFBSQU1JTiBmb3IgdGhlIGNoYW5uZWwKLQkgKlhYWDogbWF5YmUgb24gPE5WNTAgdG9vIGF0IHNvbWUgcG9pbnQKLQkgKi8KLQlpZiAoMCB8fCBkZXZfcHJpdi0+Y2FyZF90eXBlID09IE5WXzUwKSB7Ci0JCXJldCA9IG5vdXZlYXVfZ3B1b2JqX2NoYW5uZWxfaW5pdF9wcmFtaW4oY2hhbik7Ci0JCWlmIChyZXQpIHsKLQkJCU5WX0VSUk9SKGRldiwgImluaXQgcHJhbWluXG4iKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KKwkvKiBBbGxvY2F0ZSBhIGNodW5rIG9mIG1lbW9yeSBmb3IgcGVyLWNoYW5uZWwgb2JqZWN0IHN0b3JhZ2UgKi8KKwlyZXQgPSBub3V2ZWF1X2dwdW9ial9jaGFubmVsX2luaXRfcHJhbWluKGNoYW4pOworCWlmIChyZXQpIHsKKwkJTlZfRVJST1IoZGV2LCAiaW5pdCBwcmFtaW5cbiIpOworCQlyZXR1cm4gcmV0OwogCX0KIAogCS8qIE5WNTAgVk0KQEAgLTk4OCwxNyArOTU4LDEzIEBACiAJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfNTApIHsKIAkJdWludDMyX3Qgdm1fb2Zmc2V0LCBwZGU7CiAKLQkJaW5zdG1lbS0+cHJlcGFyZV9hY2Nlc3MoZGV2LCB0cnVlKTsKLQogCQl2bV9vZmZzZXQgPSAoZGV2X3ByaXYtPmNoaXBzZXQgJiAweGYwKSA9PSAweDUwID8gMHgxNDAwIDogMHgyMDA7CiAJCXZtX29mZnNldCArPSBjaGFuLT5yYW1pbi0+Z3B1b2JqLT5pbV9wcmFtaW4tPnN0YXJ0OwogCiAJCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ld19mYWtlKGRldiwgdm1fb2Zmc2V0LCB+MCwgMHg0MDAwLAogCQkJCQkJCTAsICZjaGFuLT52bV9wZCwgTlVMTCk7Ci0JCWlmIChyZXQpIHsKLQkJCWluc3RtZW0tPmZpbmlzaF9hY2Nlc3MoZGV2KTsKKwkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7Ci0JCX0KIAkJZm9yIChpID0gMDsgaSA8IDB4NDAwMDsgaSArPSA4KSB7CiAJCQludl93bzMyKGRldiwgY2hhbi0+dm1fcGQsIChpKzApLzQsIDB4MDAwMDAwMDApOwogCQkJbnZfd28zMihkZXYsIGNoYW4tPnZtX3BkLCAoaSs0KS80LCAweGRlYWRjYWZlKTsKQEAgLTEwMDgsMTAgKzk3NCw4IEBACiAJCXJldCA9IG5vdXZlYXVfZ3B1b2JqX3JlZl9hZGQoZGV2LCBOVUxMLCAwLAogCQkJCQkgICAgIGRldl9wcml2LT5nYXJ0X2luZm8uc2dfY3R4ZG1hLAogCQkJCQkgICAgICZjaGFuLT52bV9nYXJ0X3B0KTsKLQkJaWYgKHJldCkgewotCQkJaW5zdG1lbS0+ZmluaXNoX2FjY2VzcyhkZXYpOworCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKLQkJfQogCQludl93bzMyKGRldiwgY2hhbi0+dm1fcGQsIHBkZSsrLAogCQkJICAgIGNoYW4tPnZtX2dhcnRfcHQtPmluc3RhbmNlIHwgMHgwMyk7CiAJCW52X3dvMzIoZGV2LCBjaGFuLT52bV9wZCwgcGRlKyssIDB4MDAwMDAwMDApOwpAQCAtMTAyMSwxNyArOTg1LDE1IEBACiAJCQlyZXQgPSBub3V2ZWF1X2dwdW9ial9yZWZfYWRkKGRldiwgTlVMTCwgMCwKIAkJCQkJCSAgICAgZGV2X3ByaXYtPnZtX3ZyYW1fcHRbaV0sCiAJCQkJCQkgICAgICZjaGFuLT52bV92cmFtX3B0W2ldKTsKLQkJCWlmIChyZXQpIHsKLQkJCQlpbnN0bWVtLT5maW5pc2hfYWNjZXNzKGRldik7CisJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7Ci0JCQl9CiAKIAkJCW52X3dvMzIoZGV2LCBjaGFuLT52bV9wZCwgcGRlKyssCiAJCQkJICAgIGNoYW4tPnZtX3ZyYW1fcHRbaV0tPmluc3RhbmNlIHwgMHg2MSk7CiAJCQludl93bzMyKGRldiwgY2hhbi0+dm1fcGQsIHBkZSsrLCAweDAwMDAwMDAwKTsKIAkJfQogCi0JCWluc3RtZW0tPmZpbmlzaF9hY2Nlc3MoZGV2KTsKKwkJaW5zdG1lbS0+Zmx1c2goZGV2KTsKIAl9CiAKIAkvKiBSQU1IVCAqLwpAQCAtMTEzMCw4ICsxMDkyLDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPnZtX3ZyYW1fcHRfbnI7IGkrKykKIAkJbm91dmVhdV9ncHVvYmpfcmVmX2RlbChkZXYsICZjaGFuLT52bV92cmFtX3B0W2ldKTsKIAotCWlmIChjaGFuLT5yYW1pbl9oZWFwKQotCQlub3V2ZWF1X21lbV90YWtlZG93bigmY2hhbi0+cmFtaW5faGVhcCk7CisJaWYgKGNoYW4tPnJhbWluX2hlYXAuZnJlZV9zdGFjay5uZXh0KQorCQlkcm1fbW1fdGFrZWRvd24oJmNoYW4tPnJhbWluX2hlYXApOwogCWlmIChjaGFuLT5yYW1pbikKIAkJbm91dmVhdV9ncHVvYmpfcmVmX2RlbChkZXYsICZjaGFuLT5yYW1pbik7CiAKQEAgLTExNjQsMTAgKzExMjYsOCBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAotCQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0ucHJlcGFyZV9hY2Nlc3MoZGV2LCBmYWxzZSk7CiAJCWZvciAoaSA9IDA7IGkgPCBncHVvYmotPmltX3ByYW1pbi0+c2l6ZSAvIDQ7IGkrKykKIAkJCWdwdW9iai0+aW1fYmFja2luZ19zdXNwZW5kW2ldID0gbnZfcm8zMihkZXYsIGdwdW9iaiwgaSk7Ci0JCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5maW5pc2hfYWNjZXNzKGRldik7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMjEyLDEwICsxMTcyLDkgQEAKIAkJaWYgKCFncHVvYmotPmltX2JhY2tpbmdfc3VzcGVuZCkKIAkJCWNvbnRpbnVlOwogCi0JCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5wcmVwYXJlX2FjY2VzcyhkZXYsIHRydWUpOwogCQlmb3IgKGkgPSAwOyBpIDwgZ3B1b2JqLT5pbV9wcmFtaW4tPnNpemUgLyA0OyBpKyspCiAJCQludl93bzMyKGRldiwgZ3B1b2JqLCBpLCBncHVvYmotPmltX2JhY2tpbmdfc3VzcGVuZFtpXSk7Ci0JCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5maW5pc2hfYWNjZXNzKGRldik7CisJCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5mbHVzaChkZXYpOwogCX0KIAogCW5vdXZlYXVfZ3B1b2JqX3N1c3BlbmRfY2xlYW51cChkZXYpOwpAQCAtMTIzMiw3ICsxMTkxLDYgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuOwogCWludCByZXQ7CiAKLQlOT1VWRUFVX0NIRUNLX0lOSVRJQUxJU0VEX1dJVEhfUkVUVVJOOwogCU5PVVZFQVVfR0VUX1VTRVJfQ0hBTk5FTF9XSVRIX1JFVFVSTihpbml0LT5jaGFubmVsLCBmaWxlX3ByaXYsIGNoYW4pOwogCiAJaWYgKGluaXQtPmhhbmRsZSA9PSB+MCkKQEAgLTEyODMsNyArMTI0MSw2IEBACiAJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbjsKIAlpbnQgcmV0OwogCi0JTk9VVkVBVV9DSEVDS19JTklUSUFMSVNFRF9XSVRIX1JFVFVSTjsKIAlOT1VWRUFVX0dFVF9VU0VSX0NIQU5ORUxfV0lUSF9SRVRVUk4ob2JqZnJlZS0+Y2hhbm5lbCwgZmlsZV9wcml2LCBjaGFuKTsKIAogCXJldCA9IG5vdXZlYXVfZ3B1b2JqX3JlZl9maW5kKGNoYW4sIG9iamZyZWUtPmhhbmRsZSwgJnJlZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9yZWcuaAppbmRleCA2Y2E4MGEzLi45YzEwNTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfcmVnLmgKQEAgLTEsMTkgKzEsNjQgQEAKIAorI2RlZmluZSBOVjA0X1BGQl9CT09UXzAJCQkJCQkweDAwMTAwMDAwCisjCWRlZmluZSBOVjA0X1BGQl9CT09UXzBfUkFNX0FNT1VOVAkJCTB4MDAwMDAwMDMKKyMJZGVmaW5lIE5WMDRfUEZCX0JPT1RfMF9SQU1fQU1PVU5UXzMyTUIJCQkweDAwMDAwMDAwCisjCWRlZmluZSBOVjA0X1BGQl9CT09UXzBfUkFNX0FNT1VOVF80TUIJCQkweDAwMDAwMDAxCisjCWRlZmluZSBOVjA0X1BGQl9CT09UXzBfUkFNX0FNT1VOVF84TUIJCQkweDAwMDAwMDAyCisjCWRlZmluZSBOVjA0X1BGQl9CT09UXzBfUkFNX0FNT1VOVF8xNk1CCQkJMHgwMDAwMDAwMworIwlkZWZpbmUgTlYwNF9QRkJfQk9PVF8wX1JBTV9XSURUSF8xMjgJCQkweDAwMDAwMDA0CisjCWRlZmluZSBOVjA0X1BGQl9CT09UXzBfUkFNX1RZUEUJCQkJMHgwMDAwMDAyOAorIwlkZWZpbmUgTlYwNF9QRkJfQk9PVF8wX1JBTV9UWVBFX1NHUkFNXzhNQklUCQkweDAwMDAwMDAwCisjCWRlZmluZSBOVjA0X1BGQl9CT09UXzBfUkFNX1RZUEVfU0dSQU1fMTZNQklUCQkweDAwMDAwMDA4CisjCWRlZmluZSBOVjA0X1BGQl9CT09UXzBfUkFNX1RZUEVfU0dSQU1fMTZNQklUXzRCQU5LCTB4MDAwMDAwMTAKKyMJZGVmaW5lIE5WMDRfUEZCX0JPT1RfMF9SQU1fVFlQRV9TRFJBTV8xNk1CSVQJCTB4MDAwMDAwMTgKKyMJZGVmaW5lIE5WMDRfUEZCX0JPT1RfMF9SQU1fVFlQRV9TRFJBTV82NE1CSVQJCTB4MDAwMDAwMjAKKyMJZGVmaW5lIE5WMDRfUEZCX0JPT1RfMF9SQU1fVFlQRV9TRFJBTV82NE1CSVRYMTYJCTB4MDAwMDAwMjgKKyMJZGVmaW5lIE5WMDRfUEZCX0JPT1RfMF9VTUFfRU5BQkxFCQkJMHgwMDAwMDEwMAorIwlkZWZpbmUgTlYwNF9QRkJfQk9PVF8wX1VNQV9TSVpFCQkJCTB4MDAwMGYwMDAKKyNkZWZpbmUgTlYwNF9QRkJfREVCVUdfMAkJCQkJMHgwMDEwMDA4MAorIwlkZWZpbmUgTlYwNF9QRkJfREVCVUdfMF9QQUdFX01PREUJCQkweDAwMDAwMDAxCisjCWRlZmluZSBOVjA0X1BGQl9ERUJVR18wX1JFRlJFU0hfT0ZGCQkJMHgwMDAwMDAxMAorIwlkZWZpbmUgTlYwNF9QRkJfREVCVUdfMF9SRUZSRVNIX0NPVU5UWDY0CQkweDAwMDAzZjAwCisjCWRlZmluZSBOVjA0X1BGQl9ERUJVR18wX1JFRlJFU0hfU0xPV19DTEsJCTB4MDAwMDQwMDAKKyMJZGVmaW5lIE5WMDRfUEZCX0RFQlVHXzBfU0FGRV9NT0RFCQkJMHgwMDAwODAwMAorIwlkZWZpbmUgTlYwNF9QRkJfREVCVUdfMF9BTE9NX0VOQUJMRQkJCTB4MDAwMTAwMDAKKyMJZGVmaW5lIE5WMDRfUEZCX0RFQlVHXzBfQ0FTT0UJCQkJMHgwMDEwMDAwMAorIwlkZWZpbmUgTlYwNF9QRkJfREVCVUdfMF9DS0VfSU5WRVJUCQkJMHgxMDAwMDAwMAorIwlkZWZpbmUgTlYwNF9QRkJfREVCVUdfMF9SRUZJTkMJCQkJMHgyMDAwMDAwMAorIwlkZWZpbmUgTlYwNF9QRkJfREVCVUdfMF9TQVZFX1BPV0VSX09GRgkJCTB4NDAwMDAwMDAKKyNkZWZpbmUgTlYwNF9QRkJfQ0ZHMAkJCQkJCTB4MDAxMDAyMDAKKyMJZGVmaW5lIE5WMDRfUEZCX0NGRzBfU0NSQU1CTEUJCQkJMHgyMDAwMDAwMAorI2RlZmluZSBOVjA0X1BGQl9DRkcxCQkJCQkJMHgwMDEwMDIwNAorI2RlZmluZSBOVjA0X1BGQl9GSUZPX0RBVEEJCQkJCTB4MDAxMDAyMGMKKyMJZGVmaW5lIE5WMTBfUEZCX0ZJRk9fREFUQV9SQU1fQU1PVU5UX01CX01BU0sJCTB4ZmZmMDAwMDAKKyMJZGVmaW5lIE5WMTBfUEZCX0ZJRk9fREFUQV9SQU1fQU1PVU5UX01CX1NISUZUCQkyMAorI2RlZmluZSBOVjEwX1BGQl9SRUZDVFJMCQkJCQkweDAwMTAwMjEwCisjCWRlZmluZSBOVjEwX1BGQl9SRUZDVFJMX1ZBTElEXzEJCQkJKDEgPDwgMzEpCisjZGVmaW5lIE5WMDRfUEZCX1BBRAkJCQkJCTB4MDAxMDAyMWMKKyMJZGVmaW5lIE5WMDRfUEZCX1BBRF9DS0VfTk9STUFMCQkJCSgxIDw8IDApCisjZGVmaW5lIE5WMTBfUEZCX1RJTEUoaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDEwMDI0MCArIChpKjE2KSkKKyNkZWZpbmUgTlYxMF9QRkJfVElMRV9fU0laRQkJCQkJOAorI2RlZmluZSBOVjEwX1BGQl9UTElNSVQoaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAxMDAyNDQgKyAoaSoxNikpCisjZGVmaW5lIE5WMTBfUEZCX1RTSVpFKGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDEwMDI0OCArIChpKjE2KSkKKyNkZWZpbmUgTlYxMF9QRkJfVFNUQVRVUyhpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMTAwMjRjICsgKGkqMTYpKQorI2RlZmluZSBOVjA0X1BGQl9SRUYJCQkJCQkweDAwMTAwMmQwCisjCWRlZmluZSBOVjA0X1BGQl9SRUZfQ01EX1JFRlJFU0gJCQkJKDEgPDwgMCkKKyNkZWZpbmUgTlYwNF9QRkJfUFJFCQkJCQkJMHgwMDEwMDJkNAorIwlkZWZpbmUgTlYwNF9QRkJfUFJFX0NNRF9QUkVDSEFSR0UJCQkoMSA8PCAwKQorI2RlZmluZSBOVjEwX1BGQl9DTE9TRV9QQUdFMgkJCQkJMHgwMDEwMDMzYworI2RlZmluZSBOVjA0X1BGQl9TQ1JBTUJMRShpKSAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDEwMDQwMCArIDQgKiAoaSkpCisjZGVmaW5lIE5WNDBfUEZCX1RJTEUoaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDEwMDYwMCArIChpKjE2KSkKKyNkZWZpbmUgTlY0MF9QRkJfVElMRV9fU0laRV8wCQkJCQkxMgorI2RlZmluZSBOVjQwX1BGQl9USUxFX19TSVpFXzEJCQkJCTE1CisjZGVmaW5lIE5WNDBfUEZCX1RMSU1JVChpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDEwMDYwNCArIChpKjE2KSkKKyNkZWZpbmUgTlY0MF9QRkJfVFNJWkUoaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMTAwNjA4ICsgKGkqMTYpKQorI2RlZmluZSBOVjQwX1BGQl9UU1RBVFVTKGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAxMDA2MGMgKyAoaSoxNikpCisjZGVmaW5lIE5WNDBfUEZCX1VOS184MDAJCQkJCTB4MDAxMDA4MDAKIAotI2RlZmluZSBOVjAzX0JPT1RfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCi0jICAgIGRlZmluZSBOVjAzX0JPT1RfMF9SQU1fQU1PVU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKLSMgICAgZGVmaW5lIE5WMDNfQk9PVF8wX1JBTV9BTU9VTlRfOE1CICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAotIyAgICBkZWZpbmUgTlYwM19CT09UXzBfUkFNX0FNT1VOVF8yTUIgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jICAgIGRlZmluZSBOVjAzX0JPT1RfMF9SQU1fQU1PVU5UXzRNQiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSMgICAgZGVmaW5lIE5WMDNfQk9PVF8wX1JBTV9BTU9VTlRfOE1CX1NEUkFNICAgICAgICAgICAgICAgMHgwMDAwMDAwMwotIyAgICBkZWZpbmUgTlYwNF9CT09UXzBfUkFNX0FNT1VOVF8zMk1CICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCi0jICAgIGRlZmluZSBOVjA0X0JPT1RfMF9SQU1fQU1PVU5UXzRNQiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSMgICAgZGVmaW5lIE5WMDRfQk9PVF8wX1JBTV9BTU9VTlRfOE1CICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotIyAgICBkZWZpbmUgTlYwNF9CT09UXzBfUkFNX0FNT1VOVF8xNk1CICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCi0KLSNkZWZpbmUgTlYwNF9GSUZPX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDIwYwotIyAgICBkZWZpbmUgTlYxMF9GSUZPX0RBVEFfUkFNX0FNT1VOVF9NQl9NQVNLICAgICAgICAgICAgICAweGZmZjAwMDAwCi0jICAgIGRlZmluZSBOVjEwX0ZJRk9fREFUQV9SQU1fQU1PVU5UX01CX1NISUZUICAgICAgICAgICAgIDIwCisjZGVmaW5lIE5WX1BFWFRERVZfQk9PVF8wCQkJCQkweDAwMTAxMDAwCisjZGVmaW5lIE5WX1BFWFRERVZfQk9PVF8wX1JBTUNGRwkJCQkweDAwMDAwMDNjCisjCWRlZmluZSBOVl9QRVhUREVWX0JPT1RfMF9TVFJBUF9GUF9JRkFDRV8xMkJJVAkJKDggPDwgMTIpCisjZGVmaW5lIE5WX1BFWFRERVZfQk9PVF8zCQkJCQkweDAwMTAxMDBjCiAKICNkZWZpbmUgTlZfUkFNSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDcwMDAwMAogCkBAIC0xMzEsMjMgKzE3Niw2IEBACiAjZGVmaW5lIE5WMDRfUFRJTUVSX1RJTUVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk0MTAKICNkZWZpbmUgTlYwNF9QVElNRVJfQUxBUk1fMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTQyMAogCi0jZGVmaW5lIE5WMDRfUEZCX0NGRzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAyMDAKLSNkZWZpbmUgTlYwNF9QRkJfQ0ZHMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDIwNAotI2RlZmluZSBOVjQwX1BGQl8wMjBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMjBDCi0jZGVmaW5lIE5WMTBfUEZCX1RJTEUoaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMTAwMjQwICsgKGkqMTYpKQotI2RlZmluZSBOVjEwX1BGQl9USUxFX19TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIE5WMTBfUEZCX1RMSU1JVChpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMTAwMjQ0ICsgKGkqMTYpKQotI2RlZmluZSBOVjEwX1BGQl9UU0laRShpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDEwMDI0OCArIChpKjE2KSkKLSNkZWZpbmUgTlYxMF9QRkJfVFNUQVRVUyhpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAxMDAyNEMgKyAoaSoxNikpCi0jZGVmaW5lIE5WMTBfUEZCX0NMT1NFX1BBR0UyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAzM0MKLSNkZWZpbmUgTlY0MF9QRkJfVElMRShpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAxMDA2MDAgKyAoaSoxNikpCi0jZGVmaW5lIE5WNDBfUEZCX1RJTEVfX1NJWkVfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIE5WNDBfUEZCX1RJTEVfX1NJWkVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIE5WNDBfUEZCX1RMSU1JVChpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMTAwNjA0ICsgKGkqMTYpKQotI2RlZmluZSBOVjQwX1BGQl9UU0laRShpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDEwMDYwOCArIChpKjE2KSkKLSNkZWZpbmUgTlY0MF9QRkJfVFNUQVRVUyhpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAxMDA2MEMgKyAoaSoxNikpCi0jZGVmaW5lIE5WNDBfUEZCX1VOS184MDAJCQkJCTB4MDAxMDA4MDAKLQogI2RlZmluZSBOVjA0X1BHUkFQSF9ERUJVR18wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDgwCiAjZGVmaW5lIE5WMDRfUEdSQVBIX0RFQlVHXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwODQKICNkZWZpbmUgTlYwNF9QR1JBUEhfREVCVUdfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDA4OApAQCAtODE0LDYgKzg0Miw3IEBACiAjZGVmaW5lIE5WNTBfUERJU1BMQVlfU09SX0JBQ0tMSUdIVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCiAjZGVmaW5lIE5WNTBfUERJU1BMQVlfU09SX0JBQ0tMSUdIVF9MRVZFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwZmZmCiAjZGVmaW5lIE5WNTBfU09SX0RQX0NUUkwoaSxsKSAgICAgICAgICAgICgweDAwNjFjMTBjICsgKGkpICogMHg4MDAgKyAobCkgKiAweDgwKQorI2RlZmluZSBOVjUwX1NPUl9EUF9DVFJMX0VOQUJMRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQogI2RlZmluZSBOVjUwX1NPUl9EUF9DVFJMX0VOSEFOQ0VEX0ZSQU1FX0VOQUJMRUQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAogI2RlZmluZSBOVjUwX1NPUl9EUF9DVFJMX0xBTkVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFmMDAwMAogI2RlZmluZSBOVjUwX1NPUl9EUF9DVFJMX0xBTkVfMF9FTkFCTEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zZ2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zZ2RtYS5jCmluZGV4IDFkNmVlOGIuLjQ5MTc2N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc2dkbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3NnZG1hLmMKQEAgLTk3LDcgKzk3LDYgQEAKIAogCU5WX0RFQlVHKGRldiwgInBnPTB4JWx4XG4iLCBtZW0tPm1tX25vZGUtPnN0YXJ0KTsKIAotCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5wcmVwYXJlX2FjY2VzcyhudmJlLT5kZXYsIHRydWUpOwogCXB0ZSA9IG5vdXZlYXVfc2dkbWFfcHRlKG52YmUtPmRldiwgbWVtLT5tbV9ub2RlLT5zdGFydCA8PCBQQUdFX1NISUZUKTsKIAludmJlLT5wdGVfc3RhcnQgPSBwdGU7CiAJZm9yIChpID0gMDsgaSA8IG52YmUtPm5yX3BhZ2VzOyBpKyspIHsKQEAgLTExNiwyNCArMTE1LDExIEBACiAJCQlkbWFfb2Zmc2V0ICs9IE5WX0NUWERNQV9QQUdFX1NJWkU7CiAJCX0KIAl9Ci0JZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLmZpbmlzaF9hY2Nlc3MobnZiZS0+ZGV2KTsKKwlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmx1c2gobnZiZS0+ZGV2KTsKIAogCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID09IE5WXzUwKSB7Ci0JCW52X3dyMzIoZGV2LCAweDEwMGM4MCwgMHgwMDA1MDAwMSk7Ci0JCWlmICghbnZfd2FpdCgweDEwMGM4MCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMCkpIHsKLQkJCU5WX0VSUk9SKGRldiwgInRpbWVvdXQ6ICgweDEwMGM4MCAmIDEpID09IDAgKDIpXG4iKTsKLQkJCU5WX0VSUk9SKGRldiwgIjB4MTAwYzgwID0gMHglMDh4XG4iLAotCQkJCQkJbnZfcmQzMihkZXYsIDB4MTAwYzgwKSk7Ci0JCQlyZXR1cm4gLUVCVVNZOwotCQl9Ci0KLQkJbnZfd3IzMihkZXYsIDB4MTAwYzgwLCAweDAwMDAwMDAxKTsKLQkJaWYgKCFudl93YWl0KDB4MTAwYzgwLCAweDAwMDAwMDAxLCAweDAwMDAwMDAwKSkgewotCQkJTlZfRVJST1IoZGV2LCAidGltZW91dDogKDB4MTAwYzgwICYgMSkgPT0gMCAoMilcbiIpOwotCQkJTlZfRVJST1IoZGV2LCAiMHgxMDBjODAgPSAweCUwOHhcbiIsCi0JCQkJCQludl9yZDMyKGRldiwgMHgxMDBjODApKTsKLQkJCXJldHVybiAtRUJVU1k7Ci0JCX0KKwkJbnY1MF92bV9mbHVzaChkZXYsIDUpOyAvKiBQR1JBUEggKi8KKwkJbnY1MF92bV9mbHVzaChkZXYsIDApOyAvKiBQRklGTyAqLwogCX0KIAogCW52YmUtPmJvdW5kID0gdHJ1ZTsKQEAgLTE1NCw3ICsxNDAsNiBAQAogCWlmICghbnZiZS0+Ym91bmQpCiAJCXJldHVybiAwOwogCi0JZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByZXBhcmVfYWNjZXNzKG52YmUtPmRldiwgdHJ1ZSk7CiAJcHRlID0gbnZiZS0+cHRlX3N0YXJ0OwogCWZvciAoaSA9IDA7IGkgPCBudmJlLT5ucl9wYWdlczsgaSsrKSB7CiAJCWRtYV9hZGRyX3QgZG1hX29mZnNldCA9IGRldl9wcml2LT5nYXJ0X2luZm8uc2dfZHVtbXlfYnVzOwpAQCAtMTcwLDI0ICsxNTUsMTEgQEAKIAkJCWRtYV9vZmZzZXQgKz0gTlZfQ1RYRE1BX1BBR0VfU0laRTsKIAkJfQogCX0KLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhudmJlLT5kZXYpOworCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5mbHVzaChudmJlLT5kZXYpOwogCiAJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfNTApIHsKLQkJbnZfd3IzMihkZXYsIDB4MTAwYzgwLCAweDAwMDUwMDAxKTsKLQkJaWYgKCFudl93YWl0KDB4MTAwYzgwLCAweDAwMDAwMDAxLCAweDAwMDAwMDAwKSkgewotCQkJTlZfRVJST1IoZGV2LCAidGltZW91dDogKDB4MTAwYzgwICYgMSkgPT0gMCAoMilcbiIpOwotCQkJTlZfRVJST1IoZGV2LCAiMHgxMDBjODAgPSAweCUwOHhcbiIsCi0JCQkJCQludl9yZDMyKGRldiwgMHgxMDBjODApKTsKLQkJCXJldHVybiAtRUJVU1k7Ci0JCX0KLQotCQludl93cjMyKGRldiwgMHgxMDBjODAsIDB4MDAwMDAwMDEpOwotCQlpZiAoIW52X3dhaXQoMHgxMDBjODAsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDApKSB7Ci0JCQlOVl9FUlJPUihkZXYsICJ0aW1lb3V0OiAoMHgxMDBjODAgJiAxKSA9PSAwICgyKVxuIik7Ci0JCQlOVl9FUlJPUihkZXYsICIweDEwMGM4MCA9IDB4JTA4eFxuIiwKLQkJCQkJCW52X3JkMzIoZGV2LCAweDEwMGM4MCkpOwotCQkJcmV0dXJuIC1FQlVTWTsKLQkJfQorCQludjUwX3ZtX2ZsdXNoKGRldiwgNSk7CisJCW52NTBfdm1fZmx1c2goZGV2LCAwKTsKIAl9CiAKIAludmJlLT5ib3VuZCA9IGZhbHNlOwpAQCAtMjcyLDcgKzI0NCw2IEBACiAJCXBjaV9tYXBfcGFnZShkZXYtPnBkZXYsIGRldl9wcml2LT5nYXJ0X2luZm8uc2dfZHVtbXlfcGFnZSwgMCwKIAkJCSAgICAgUEFHRV9TSVpFLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwogCi0JZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByZXBhcmVfYWNjZXNzKGRldiwgdHJ1ZSk7CiAJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPCBOVl81MCkgewogCQkvKiBNYXliZSB1c2UgTlZfRE1BX1RBUkdFVF9BR1AgZm9yIFBDSUU/IE5WSURJQSBkbyB0aGlzLCBhbmQKIAkJICogY29uZmlybWVkIHRvIHdvcmsgb24gYzUxLiAgUGVyaGFwcyBtZWFucyBOVl9ETUFfVEFSR0VUX1BDSUUKQEAgLTI5NCw3ICsyNjUsNyBAQAogCQkJbnZfd28zMihkZXYsIGdwdW9iaiwgKGkrNCkvNCwgMCk7CiAJCX0KIAl9Ci0JZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLmZpbmlzaF9hY2Nlc3MoZGV2KTsKKwlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmx1c2goZGV2KTsKIAogCWRldl9wcml2LT5nYXJ0X2luZm8udHlwZSAgICAgID0gTk9VVkVBVV9HQVJUX1NHRE1BOwogCWRldl9wcml2LT5nYXJ0X2luZm8uYXBlcl9iYXNlID0gMDsKQEAgLTMyNSwxNCArMjk2LDExIEBACiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKmdwdW9iaiA9IGRldl9wcml2LT5nYXJ0X2luZm8uc2dfY3R4ZG1hOwotCXN0cnVjdCBub3V2ZWF1X2luc3RtZW1fZW5naW5lICppbnN0bWVtID0gJmRldl9wcml2LT5lbmdpbmUuaW5zdG1lbTsKIAlpbnQgcHRlOwogCiAJcHRlID0gKG9mZnNldCA+PiBOVl9DVFhETUFfUEFHRV9TSElGVCk7CiAJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPCBOVl81MCkgewotCQlpbnN0bWVtLT5wcmVwYXJlX2FjY2VzcyhkZXYsIGZhbHNlKTsKIAkJKnBhZ2UgPSBudl9ybzMyKGRldiwgZ3B1b2JqLCAocHRlICsgMikpICYgfk5WX0NUWERNQV9QQUdFX01BU0s7Ci0JCWluc3RtZW0tPmZpbmlzaF9hY2Nlc3MoZGV2KTsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N0YXRlLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N0YXRlLmMKaW5kZXggYjAyYTIzMS4uZWUzNzI5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIm52NTBfZGlzcGxheS5oIgogCiBzdGF0aWMgdm9pZCBub3V2ZWF1X3N0dWJfdGFrZWRvd24oc3RydWN0IGRybV9kZXZpY2UgKmRldikge30KK3N0YXRpYyBpbnQgbm91dmVhdV9zdHViX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikgeyByZXR1cm4gMDsgfQogCiBzdGF0aWMgaW50IG5vdXZlYXVfaW5pdF9lbmdpbmVfcHRycyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewpAQCAtNTQsOCArNTUsNyBAQAogCQllbmdpbmUtPmluc3RtZW0uY2xlYXIJCT0gbnYwNF9pbnN0bWVtX2NsZWFyOwogCQllbmdpbmUtPmluc3RtZW0uYmluZAkJPSBudjA0X2luc3RtZW1fYmluZDsKIAkJZW5naW5lLT5pbnN0bWVtLnVuYmluZAkJPSBudjA0X2luc3RtZW1fdW5iaW5kOwotCQllbmdpbmUtPmluc3RtZW0ucHJlcGFyZV9hY2Nlc3MJPSBudjA0X2luc3RtZW1fcHJlcGFyZV9hY2Nlc3M7Ci0JCWVuZ2luZS0+aW5zdG1lbS5maW5pc2hfYWNjZXNzCT0gbnYwNF9pbnN0bWVtX2ZpbmlzaF9hY2Nlc3M7CisJCWVuZ2luZS0+aW5zdG1lbS5mbHVzaAkJPSBudjA0X2luc3RtZW1fZmx1c2g7CiAJCWVuZ2luZS0+bWMuaW5pdAkJCT0gbnYwNF9tY19pbml0OwogCQllbmdpbmUtPm1jLnRha2Vkb3duCQk9IG52MDRfbWNfdGFrZWRvd247CiAJCWVuZ2luZS0+dGltZXIuaW5pdAkJPSBudjA0X3RpbWVyX2luaXQ7CkBAIC04NSw2ICs4NSwxNiBAQAogCQllbmdpbmUtPmZpZm8uZGVzdHJveV9jb250ZXh0CT0gbnYwNF9maWZvX2Rlc3Ryb3lfY29udGV4dDsKIAkJZW5naW5lLT5maWZvLmxvYWRfY29udGV4dAk9IG52MDRfZmlmb19sb2FkX2NvbnRleHQ7CiAJCWVuZ2luZS0+Zmlmby51bmxvYWRfY29udGV4dAk9IG52MDRfZmlmb191bmxvYWRfY29udGV4dDsKKwkJZW5naW5lLT5kaXNwbGF5LmVhcmx5X2luaXQJPSBudjA0X2Rpc3BsYXlfZWFybHlfaW5pdDsKKwkJZW5naW5lLT5kaXNwbGF5LmxhdGVfdGFrZWRvd24JPSBudjA0X2Rpc3BsYXlfbGF0ZV90YWtlZG93bjsKKwkJZW5naW5lLT5kaXNwbGF5LmNyZWF0ZQkJPSBudjA0X2Rpc3BsYXlfY3JlYXRlOworCQllbmdpbmUtPmRpc3BsYXkuaW5pdAkJPSBudjA0X2Rpc3BsYXlfaW5pdDsKKwkJZW5naW5lLT5kaXNwbGF5LmRlc3Ryb3kJCT0gbnYwNF9kaXNwbGF5X2Rlc3Ryb3k7CisJCWVuZ2luZS0+Z3Bpby5pbml0CQk9IG5vdXZlYXVfc3R1Yl9pbml0OworCQllbmdpbmUtPmdwaW8udGFrZWRvd24JCT0gbm91dmVhdV9zdHViX3Rha2Vkb3duOworCQllbmdpbmUtPmdwaW8uZ2V0CQk9IE5VTEw7CisJCWVuZ2luZS0+Z3Bpby5zZXQJCT0gTlVMTDsKKwkJZW5naW5lLT5ncGlvLmlycV9lbmFibGUJCT0gTlVMTDsKIAkJYnJlYWs7CiAJY2FzZSAweDEwOgogCQllbmdpbmUtPmluc3RtZW0uaW5pdAkJPSBudjA0X2luc3RtZW1faW5pdDsKQEAgLTk1LDggKzEwNSw3IEBACiAJCWVuZ2luZS0+aW5zdG1lbS5jbGVhcgkJPSBudjA0X2luc3RtZW1fY2xlYXI7CiAJCWVuZ2luZS0+aW5zdG1lbS5iaW5kCQk9IG52MDRfaW5zdG1lbV9iaW5kOwogCQllbmdpbmUtPmluc3RtZW0udW5iaW5kCQk9IG52MDRfaW5zdG1lbV91bmJpbmQ7Ci0JCWVuZ2luZS0+aW5zdG1lbS5wcmVwYXJlX2FjY2Vzcwk9IG52MDRfaW5zdG1lbV9wcmVwYXJlX2FjY2VzczsKLQkJZW5naW5lLT5pbnN0bWVtLmZpbmlzaF9hY2Nlc3MJPSBudjA0X2luc3RtZW1fZmluaXNoX2FjY2VzczsKKwkJZW5naW5lLT5pbnN0bWVtLmZsdXNoCQk9IG52MDRfaW5zdG1lbV9mbHVzaDsKIAkJZW5naW5lLT5tYy5pbml0CQkJPSBudjA0X21jX2luaXQ7CiAJCWVuZ2luZS0+bWMudGFrZWRvd24JCT0gbnYwNF9tY190YWtlZG93bjsKIAkJZW5naW5lLT50aW1lci5pbml0CQk9IG52MDRfdGltZXJfaW5pdDsKQEAgLTEyOCw2ICsxMzcsMTYgQEAKIAkJZW5naW5lLT5maWZvLmRlc3Ryb3lfY29udGV4dAk9IG52MTBfZmlmb19kZXN0cm95X2NvbnRleHQ7CiAJCWVuZ2luZS0+Zmlmby5sb2FkX2NvbnRleHQJPSBudjEwX2ZpZm9fbG9hZF9jb250ZXh0OwogCQllbmdpbmUtPmZpZm8udW5sb2FkX2NvbnRleHQJPSBudjEwX2ZpZm9fdW5sb2FkX2NvbnRleHQ7CisJCWVuZ2luZS0+ZGlzcGxheS5lYXJseV9pbml0CT0gbnYwNF9kaXNwbGF5X2Vhcmx5X2luaXQ7CisJCWVuZ2luZS0+ZGlzcGxheS5sYXRlX3Rha2Vkb3duCT0gbnYwNF9kaXNwbGF5X2xhdGVfdGFrZWRvd247CisJCWVuZ2luZS0+ZGlzcGxheS5jcmVhdGUJCT0gbnYwNF9kaXNwbGF5X2NyZWF0ZTsKKwkJZW5naW5lLT5kaXNwbGF5LmluaXQJCT0gbnYwNF9kaXNwbGF5X2luaXQ7CisJCWVuZ2luZS0+ZGlzcGxheS5kZXN0cm95CQk9IG52MDRfZGlzcGxheV9kZXN0cm95OworCQllbmdpbmUtPmdwaW8uaW5pdAkJPSBub3V2ZWF1X3N0dWJfaW5pdDsKKwkJZW5naW5lLT5ncGlvLnRha2Vkb3duCQk9IG5vdXZlYXVfc3R1Yl90YWtlZG93bjsKKwkJZW5naW5lLT5ncGlvLmdldAkJPSBudjEwX2dwaW9fZ2V0OworCQllbmdpbmUtPmdwaW8uc2V0CQk9IG52MTBfZ3Bpb19zZXQ7CisJCWVuZ2luZS0+Z3Bpby5pcnFfZW5hYmxlCQk9IE5VTEw7CiAJCWJyZWFrOwogCWNhc2UgMHgyMDoKIAkJZW5naW5lLT5pbnN0bWVtLmluaXQJCT0gbnYwNF9pbnN0bWVtX2luaXQ7CkBAIC0xMzgsOCArMTU3LDcgQEAKIAkJZW5naW5lLT5pbnN0bWVtLmNsZWFyCQk9IG52MDRfaW5zdG1lbV9jbGVhcjsKIAkJZW5naW5lLT5pbnN0bWVtLmJpbmQJCT0gbnYwNF9pbnN0bWVtX2JpbmQ7CiAJCWVuZ2luZS0+aW5zdG1lbS51bmJpbmQJCT0gbnYwNF9pbnN0bWVtX3VuYmluZDsKLQkJZW5naW5lLT5pbnN0bWVtLnByZXBhcmVfYWNjZXNzCT0gbnYwNF9pbnN0bWVtX3ByZXBhcmVfYWNjZXNzOwotCQllbmdpbmUtPmluc3RtZW0uZmluaXNoX2FjY2Vzcwk9IG52MDRfaW5zdG1lbV9maW5pc2hfYWNjZXNzOworCQllbmdpbmUtPmluc3RtZW0uZmx1c2gJCT0gbnYwNF9pbnN0bWVtX2ZsdXNoOwogCQllbmdpbmUtPm1jLmluaXQJCQk9IG52MDRfbWNfaW5pdDsKIAkJZW5naW5lLT5tYy50YWtlZG93bgkJPSBudjA0X21jX3Rha2Vkb3duOwogCQllbmdpbmUtPnRpbWVyLmluaXQJCT0gbnYwNF90aW1lcl9pbml0OwpAQCAtMTcxLDYgKzE4OSwxNiBAQAogCQllbmdpbmUtPmZpZm8uZGVzdHJveV9jb250ZXh0CT0gbnYxMF9maWZvX2Rlc3Ryb3lfY29udGV4dDsKIAkJZW5naW5lLT5maWZvLmxvYWRfY29udGV4dAk9IG52MTBfZmlmb19sb2FkX2NvbnRleHQ7CiAJCWVuZ2luZS0+Zmlmby51bmxvYWRfY29udGV4dAk9IG52MTBfZmlmb191bmxvYWRfY29udGV4dDsKKwkJZW5naW5lLT5kaXNwbGF5LmVhcmx5X2luaXQJPSBudjA0X2Rpc3BsYXlfZWFybHlfaW5pdDsKKwkJZW5naW5lLT5kaXNwbGF5LmxhdGVfdGFrZWRvd24JPSBudjA0X2Rpc3BsYXlfbGF0ZV90YWtlZG93bjsKKwkJZW5naW5lLT5kaXNwbGF5LmNyZWF0ZQkJPSBudjA0X2Rpc3BsYXlfY3JlYXRlOworCQllbmdpbmUtPmRpc3BsYXkuaW5pdAkJPSBudjA0X2Rpc3BsYXlfaW5pdDsKKwkJZW5naW5lLT5kaXNwbGF5LmRlc3Ryb3kJCT0gbnYwNF9kaXNwbGF5X2Rlc3Ryb3k7CisJCWVuZ2luZS0+Z3Bpby5pbml0CQk9IG5vdXZlYXVfc3R1Yl9pbml0OworCQllbmdpbmUtPmdwaW8udGFrZWRvd24JCT0gbm91dmVhdV9zdHViX3Rha2Vkb3duOworCQllbmdpbmUtPmdwaW8uZ2V0CQk9IG52MTBfZ3Bpb19nZXQ7CisJCWVuZ2luZS0+Z3Bpby5zZXQJCT0gbnYxMF9ncGlvX3NldDsKKwkJZW5naW5lLT5ncGlvLmlycV9lbmFibGUJCT0gTlVMTDsKIAkJYnJlYWs7CiAJY2FzZSAweDMwOgogCQllbmdpbmUtPmluc3RtZW0uaW5pdAkJPSBudjA0X2luc3RtZW1faW5pdDsKQEAgLTE4MSwxNSArMjA5LDE0IEBACiAJCWVuZ2luZS0+aW5zdG1lbS5jbGVhcgkJPSBudjA0X2luc3RtZW1fY2xlYXI7CiAJCWVuZ2luZS0+aW5zdG1lbS5iaW5kCQk9IG52MDRfaW5zdG1lbV9iaW5kOwogCQllbmdpbmUtPmluc3RtZW0udW5iaW5kCQk9IG52MDRfaW5zdG1lbV91bmJpbmQ7Ci0JCWVuZ2luZS0+aW5zdG1lbS5wcmVwYXJlX2FjY2Vzcwk9IG52MDRfaW5zdG1lbV9wcmVwYXJlX2FjY2VzczsKLQkJZW5naW5lLT5pbnN0bWVtLmZpbmlzaF9hY2Nlc3MJPSBudjA0X2luc3RtZW1fZmluaXNoX2FjY2VzczsKKwkJZW5naW5lLT5pbnN0bWVtLmZsdXNoCQk9IG52MDRfaW5zdG1lbV9mbHVzaDsKIAkJZW5naW5lLT5tYy5pbml0CQkJPSBudjA0X21jX2luaXQ7CiAJCWVuZ2luZS0+bWMudGFrZWRvd24JCT0gbnYwNF9tY190YWtlZG93bjsKIAkJZW5naW5lLT50aW1lci5pbml0CQk9IG52MDRfdGltZXJfaW5pdDsKIAkJZW5naW5lLT50aW1lci5yZWFkCQk9IG52MDRfdGltZXJfcmVhZDsKIAkJZW5naW5lLT50aW1lci50YWtlZG93bgkJPSBudjA0X3RpbWVyX3Rha2Vkb3duOwotCQllbmdpbmUtPmZiLmluaXQJCQk9IG52MTBfZmJfaW5pdDsKLQkJZW5naW5lLT5mYi50YWtlZG93bgkJPSBudjEwX2ZiX3Rha2Vkb3duOworCQllbmdpbmUtPmZiLmluaXQJCQk9IG52MzBfZmJfaW5pdDsKKwkJZW5naW5lLT5mYi50YWtlZG93bgkJPSBudjMwX2ZiX3Rha2Vkb3duOwogCQllbmdpbmUtPmZiLnNldF9yZWdpb25fdGlsaW5nCT0gbnYxMF9mYl9zZXRfcmVnaW9uX3RpbGluZzsKIAkJZW5naW5lLT5ncmFwaC5ncmNsYXNzCQk9IG52MzBfZ3JhcGhfZ3JjbGFzczsKIAkJZW5naW5lLT5ncmFwaC5pbml0CQk9IG52MzBfZ3JhcGhfaW5pdDsKQEAgLTIxNCw2ICsyNDEsMTYgQEAKIAkJZW5naW5lLT5maWZvLmRlc3Ryb3lfY29udGV4dAk9IG52MTBfZmlmb19kZXN0cm95X2NvbnRleHQ7CiAJCWVuZ2luZS0+Zmlmby5sb2FkX2NvbnRleHQJPSBudjEwX2ZpZm9fbG9hZF9jb250ZXh0OwogCQllbmdpbmUtPmZpZm8udW5sb2FkX2NvbnRleHQJPSBudjEwX2ZpZm9fdW5sb2FkX2NvbnRleHQ7CisJCWVuZ2luZS0+ZGlzcGxheS5lYXJseV9pbml0CT0gbnYwNF9kaXNwbGF5X2Vhcmx5X2luaXQ7CisJCWVuZ2luZS0+ZGlzcGxheS5sYXRlX3Rha2Vkb3duCT0gbnYwNF9kaXNwbGF5X2xhdGVfdGFrZWRvd247CisJCWVuZ2luZS0+ZGlzcGxheS5jcmVhdGUJCT0gbnYwNF9kaXNwbGF5X2NyZWF0ZTsKKwkJZW5naW5lLT5kaXNwbGF5LmluaXQJCT0gbnYwNF9kaXNwbGF5X2luaXQ7CisJCWVuZ2luZS0+ZGlzcGxheS5kZXN0cm95CQk9IG52MDRfZGlzcGxheV9kZXN0cm95OworCQllbmdpbmUtPmdwaW8uaW5pdAkJPSBub3V2ZWF1X3N0dWJfaW5pdDsKKwkJZW5naW5lLT5ncGlvLnRha2Vkb3duCQk9IG5vdXZlYXVfc3R1Yl90YWtlZG93bjsKKwkJZW5naW5lLT5ncGlvLmdldAkJPSBudjEwX2dwaW9fZ2V0OworCQllbmdpbmUtPmdwaW8uc2V0CQk9IG52MTBfZ3Bpb19zZXQ7CisJCWVuZ2luZS0+Z3Bpby5pcnFfZW5hYmxlCQk9IE5VTEw7CiAJCWJyZWFrOwogCWNhc2UgMHg0MDoKIAljYXNlIDB4NjA6CkBAIC0yMjUsOCArMjYyLDcgQEAKIAkJZW5naW5lLT5pbnN0bWVtLmNsZWFyCQk9IG52MDRfaW5zdG1lbV9jbGVhcjsKIAkJZW5naW5lLT5pbnN0bWVtLmJpbmQJCT0gbnYwNF9pbnN0bWVtX2JpbmQ7CiAJCWVuZ2luZS0+aW5zdG1lbS51bmJpbmQJCT0gbnYwNF9pbnN0bWVtX3VuYmluZDsKLQkJZW5naW5lLT5pbnN0bWVtLnByZXBhcmVfYWNjZXNzCT0gbnYwNF9pbnN0bWVtX3ByZXBhcmVfYWNjZXNzOwotCQllbmdpbmUtPmluc3RtZW0uZmluaXNoX2FjY2Vzcwk9IG52MDRfaW5zdG1lbV9maW5pc2hfYWNjZXNzOworCQllbmdpbmUtPmluc3RtZW0uZmx1c2gJCT0gbnYwNF9pbnN0bWVtX2ZsdXNoOwogCQllbmdpbmUtPm1jLmluaXQJCQk9IG52NDBfbWNfaW5pdDsKIAkJZW5naW5lLT5tYy50YWtlZG93bgkJPSBudjQwX21jX3Rha2Vkb3duOwogCQllbmdpbmUtPnRpbWVyLmluaXQJCT0gbnYwNF90aW1lcl9pbml0OwpAQCAtMjU4LDYgKzI5NCwxNiBAQAogCQllbmdpbmUtPmZpZm8uZGVzdHJveV9jb250ZXh0CT0gbnY0MF9maWZvX2Rlc3Ryb3lfY29udGV4dDsKIAkJZW5naW5lLT5maWZvLmxvYWRfY29udGV4dAk9IG52NDBfZmlmb19sb2FkX2NvbnRleHQ7CiAJCWVuZ2luZS0+Zmlmby51bmxvYWRfY29udGV4dAk9IG52NDBfZmlmb191bmxvYWRfY29udGV4dDsKKwkJZW5naW5lLT5kaXNwbGF5LmVhcmx5X2luaXQJPSBudjA0X2Rpc3BsYXlfZWFybHlfaW5pdDsKKwkJZW5naW5lLT5kaXNwbGF5LmxhdGVfdGFrZWRvd24JPSBudjA0X2Rpc3BsYXlfbGF0ZV90YWtlZG93bjsKKwkJZW5naW5lLT5kaXNwbGF5LmNyZWF0ZQkJPSBudjA0X2Rpc3BsYXlfY3JlYXRlOworCQllbmdpbmUtPmRpc3BsYXkuaW5pdAkJPSBudjA0X2Rpc3BsYXlfaW5pdDsKKwkJZW5naW5lLT5kaXNwbGF5LmRlc3Ryb3kJCT0gbnYwNF9kaXNwbGF5X2Rlc3Ryb3k7CisJCWVuZ2luZS0+Z3Bpby5pbml0CQk9IG5vdXZlYXVfc3R1Yl9pbml0OworCQllbmdpbmUtPmdwaW8udGFrZWRvd24JCT0gbm91dmVhdV9zdHViX3Rha2Vkb3duOworCQllbmdpbmUtPmdwaW8uZ2V0CQk9IG52MTBfZ3Bpb19nZXQ7CisJCWVuZ2luZS0+Z3Bpby5zZXQJCT0gbnYxMF9ncGlvX3NldDsKKwkJZW5naW5lLT5ncGlvLmlycV9lbmFibGUJCT0gTlVMTDsKIAkJYnJlYWs7CiAJY2FzZSAweDUwOgogCWNhc2UgMHg4MDogLyogZ290dGEgbG92ZSBOVklESUEncyBjb25zaXN0ZW5jeS4uICovCkBAIC0yNzEsOCArMzE3LDEwIEBACiAJCWVuZ2luZS0+aW5zdG1lbS5jbGVhcgkJPSBudjUwX2luc3RtZW1fY2xlYXI7CiAJCWVuZ2luZS0+aW5zdG1lbS5iaW5kCQk9IG52NTBfaW5zdG1lbV9iaW5kOwogCQllbmdpbmUtPmluc3RtZW0udW5iaW5kCQk9IG52NTBfaW5zdG1lbV91bmJpbmQ7Ci0JCWVuZ2luZS0+aW5zdG1lbS5wcmVwYXJlX2FjY2Vzcwk9IG52NTBfaW5zdG1lbV9wcmVwYXJlX2FjY2VzczsKLQkJZW5naW5lLT5pbnN0bWVtLmZpbmlzaF9hY2Nlc3MJPSBudjUwX2luc3RtZW1fZmluaXNoX2FjY2VzczsKKwkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApCisJCQllbmdpbmUtPmluc3RtZW0uZmx1c2gJPSBudjUwX2luc3RtZW1fZmx1c2g7CisJCWVsc2UKKwkJCWVuZ2luZS0+aW5zdG1lbS5mbHVzaAk9IG52ODRfaW5zdG1lbV9mbHVzaDsKIAkJZW5naW5lLT5tYy5pbml0CQkJPSBudjUwX21jX2luaXQ7CiAJCWVuZ2luZS0+bWMudGFrZWRvd24JCT0gbnY1MF9tY190YWtlZG93bjsKIAkJZW5naW5lLT50aW1lci5pbml0CQk9IG52MDRfdGltZXJfaW5pdDsKQEAgLTMwMCw2ICszNDgsMTYgQEAKIAkJZW5naW5lLT5maWZvLmRlc3Ryb3lfY29udGV4dAk9IG52NTBfZmlmb19kZXN0cm95X2NvbnRleHQ7CiAJCWVuZ2luZS0+Zmlmby5sb2FkX2NvbnRleHQJPSBudjUwX2ZpZm9fbG9hZF9jb250ZXh0OwogCQllbmdpbmUtPmZpZm8udW5sb2FkX2NvbnRleHQJPSBudjUwX2ZpZm9fdW5sb2FkX2NvbnRleHQ7CisJCWVuZ2luZS0+ZGlzcGxheS5lYXJseV9pbml0CT0gbnY1MF9kaXNwbGF5X2Vhcmx5X2luaXQ7CisJCWVuZ2luZS0+ZGlzcGxheS5sYXRlX3Rha2Vkb3duCT0gbnY1MF9kaXNwbGF5X2xhdGVfdGFrZWRvd247CisJCWVuZ2luZS0+ZGlzcGxheS5jcmVhdGUJCT0gbnY1MF9kaXNwbGF5X2NyZWF0ZTsKKwkJZW5naW5lLT5kaXNwbGF5LmluaXQJCT0gbnY1MF9kaXNwbGF5X2luaXQ7CisJCWVuZ2luZS0+ZGlzcGxheS5kZXN0cm95CQk9IG52NTBfZGlzcGxheV9kZXN0cm95OworCQllbmdpbmUtPmdwaW8uaW5pdAkJPSBudjUwX2dwaW9faW5pdDsKKwkJZW5naW5lLT5ncGlvLnRha2Vkb3duCQk9IG5vdXZlYXVfc3R1Yl90YWtlZG93bjsKKwkJZW5naW5lLT5ncGlvLmdldAkJPSBudjUwX2dwaW9fZ2V0OworCQllbmdpbmUtPmdwaW8uc2V0CQk9IG52NTBfZ3Bpb19zZXQ7CisJCWVuZ2luZS0+Z3Bpby5pcnFfZW5hYmxlCQk9IG52NTBfZ3Bpb19pcnFfZW5hYmxlOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlOVl9FUlJPUihkZXYsICJOViUwMnggdW5zdXBwb3J0ZWRcbiIsIGRldl9wcml2LT5jaGlwc2V0KTsKQEAgLTQwNywxMSArNDY1LDYgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9lbmdpbmUgKmVuZ2luZTsKIAlpbnQgcmV0OwogCi0JTlZfREVCVUcoZGV2LCAicHJldiBzdGF0ZSA9ICVkXG4iLCBkZXZfcHJpdi0+aW5pdF9zdGF0ZSk7Ci0KLQlpZiAoZGV2X3ByaXYtPmluaXRfc3RhdGUgPT0gTk9VVkVBVV9DQVJEX0lOSVRfRE9ORSkKLQkJcmV0dXJuIDA7Ci0KIAl2Z2FfY2xpZW50X3JlZ2lzdGVyKGRldi0+cGRldiwgZGV2LCBOVUxMLCBub3V2ZWF1X3ZnYV9zZXRfZGVjb2RlKTsKIAl2Z2Ffc3dpdGNoZXJvb19yZWdpc3Rlcl9jbGllbnQoZGV2LT5wZGV2LCBub3V2ZWF1X3N3aXRjaGVyb29fc2V0X3N0YXRlLAogCQkJCSAgICAgICBub3V2ZWF1X3N3aXRjaGVyb29fY2FuX3N3aXRjaCk7CkBAIC00MjEsMTUgKzQ3NCwxNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCWVuZ2luZSA9ICZkZXZfcHJpdi0+ZW5naW5lOwotCWRldl9wcml2LT5pbml0X3N0YXRlID0gTk9VVkVBVV9DQVJEX0lOSVRfRkFJTEVEOwogCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+Y29udGV4dF9zd2l0Y2hfbG9jayk7CiAKKwkvKiBNYWtlIHRoZSBDUlRDcyBhbmQgSTJDIGJ1c2VzIGFjY2Vzc2libGUgKi8KKwlyZXQgPSBlbmdpbmUtPmRpc3BsYXkuZWFybHlfaW5pdChkZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCiAJLyogUGFyc2UgQklPUyB0YWJsZXMgLyBSdW4gaW5pdCB0YWJsZXMgaWYgY2FyZCBub3QgUE9TVGVkICovCi0JaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpIHsKLQkJcmV0ID0gbm91dmVhdV9iaW9zX2luaXQoZGV2KTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OwotCX0KKwlyZXQgPSBub3V2ZWF1X2Jpb3NfaW5pdChkZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2Rpc3BsYXlfZWFybHk7CiAKIAlyZXQgPSBub3V2ZWF1X21lbV9kZXRlY3QoZGV2KTsKIAlpZiAocmV0KQpAQCAtNDYxLDEwICs1MTYsMTUgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dF9ncHVvYmo7CiAKKwkvKiBQR1BJTyAqLworCXJldCA9IGVuZ2luZS0+Z3Bpby5pbml0KGRldik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfbWM7CisKIAkvKiBQVElNRVIgKi8KIAlyZXQgPSBlbmdpbmUtPnRpbWVyLmluaXQoZGV2KTsKIAlpZiAocmV0KQotCQlnb3RvIG91dF9tYzsKKwkJZ290byBvdXRfZ3BpbzsKIAogCS8qIFBGQiAqLwogCXJldCA9IGVuZ2luZS0+ZmIuaW5pdChkZXYpOwpAQCAtNDg1LDEyICs1NDUsMTYgQEAKIAkJCWdvdG8gb3V0X2dyYXBoOwogCX0KIAorCXJldCA9IGVuZ2luZS0+ZGlzcGxheS5jcmVhdGUoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9maWZvOworCiAJLyogdGhpcyBjYWxsIGlycV9wcmVpbnN0YWxsLCByZWdpc3RlciBpcnEgaGFuZGxlciBhbmQKIAkgKiBjYWxsIGlycV9wb3N0aW5zdGFsbAogCSAqLwogCXJldCA9IGRybV9pcnFfaW5zdGFsbChkZXYpOwogCWlmIChyZXQpCi0JCWdvdG8gb3V0X2ZpZm87CisJCWdvdG8gb3V0X2Rpc3BsYXk7CiAKIAlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZGV2LCAwKTsKIAlpZiAocmV0KQpAQCAtNTA0LDM1ICs1NjgsMTggQEAKIAkJCWdvdG8gb3V0X2lycTsKIAl9CiAKLQlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgewotCQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl81MCkKLQkJCXJldCA9IG52NTBfZGlzcGxheV9jcmVhdGUoZGV2KTsKLQkJZWxzZQotCQkJcmV0ID0gbnYwNF9kaXNwbGF5X2NyZWF0ZShkZXYpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXRfY2hhbm5lbDsKLQl9Ci0KIAlyZXQgPSBub3V2ZWF1X2JhY2tsaWdodF9pbml0KGRldik7CiAJaWYgKHJldCkKIAkJTlZfRVJST1IoZGV2LCAiRXJyb3IgJWQgcmVnaXN0ZXJpbmcgYmFja2xpZ2h0XG4iLCByZXQpOwogCi0JZGV2X3ByaXYtPmluaXRfc3RhdGUgPSBOT1VWRUFVX0NBUkRfSU5JVF9ET05FOwotCi0JaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpIHsKLQkJbm91dmVhdV9mYmNvbl9pbml0KGRldik7Ci0JCWRybV9rbXNfaGVscGVyX3BvbGxfaW5pdChkZXYpOwotCX0KLQorCW5vdXZlYXVfZmJjb25faW5pdChkZXYpOworCWRybV9rbXNfaGVscGVyX3BvbGxfaW5pdChkZXYpOwogCXJldHVybiAwOwogCi1vdXRfY2hhbm5lbDoKLQlpZiAoZGV2X3ByaXYtPmNoYW5uZWwpIHsKLQkJbm91dmVhdV9jaGFubmVsX2ZyZWUoZGV2X3ByaXYtPmNoYW5uZWwpOwotCQlkZXZfcHJpdi0+Y2hhbm5lbCA9IE5VTEw7Ci0JfQogb3V0X2lycToKIAlkcm1faXJxX3VuaW5zdGFsbChkZXYpOworb3V0X2Rpc3BsYXk6CisJZW5naW5lLT5kaXNwbGF5LmRlc3Ryb3koZGV2KTsKIG91dF9maWZvOgogCWlmICghbm91dmVhdV9ub2FjY2VsKQogCQllbmdpbmUtPmZpZm8udGFrZWRvd24oZGV2KTsKQEAgLTU0Myw2ICs1OTAsOCBAQAogCWVuZ2luZS0+ZmIudGFrZWRvd24oZGV2KTsKIG91dF90aW1lcjoKIAllbmdpbmUtPnRpbWVyLnRha2Vkb3duKGRldik7CitvdXRfZ3BpbzoKKwllbmdpbmUtPmdwaW8udGFrZWRvd24oZGV2KTsKIG91dF9tYzoKIAllbmdpbmUtPm1jLnRha2Vkb3duKGRldik7CiBvdXRfZ3B1b2JqOgpAQCAtNTU2LDYgKzYwNSw4IEBACiAJbm91dmVhdV9ncHVvYmpfbGF0ZV90YWtlZG93bihkZXYpOwogb3V0X2Jpb3M6CiAJbm91dmVhdV9iaW9zX3Rha2Vkb3duKGRldik7CitvdXRfZGlzcGxheV9lYXJseToKKwllbmdpbmUtPmRpc3BsYXkubGF0ZV90YWtlZG93bihkZXYpOwogb3V0OgogCXZnYV9jbGllbnRfcmVnaXN0ZXIoZGV2LT5wZGV2LCBOVUxMLCBOVUxMLCBOVUxMKTsKIAlyZXR1cm4gcmV0OwpAQCAtNTY2LDQ1ICs2MTcsMzkgQEAKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBub3V2ZWF1X2VuZ2luZSAqZW5naW5lID0gJmRldl9wcml2LT5lbmdpbmU7CiAKLQlOVl9ERUJVRyhkZXYsICJwcmV2IHN0YXRlID0gJWRcbiIsIGRldl9wcml2LT5pbml0X3N0YXRlKTsKKwlub3V2ZWF1X2JhY2tsaWdodF9leGl0KGRldik7CiAKLQlpZiAoZGV2X3ByaXYtPmluaXRfc3RhdGUgIT0gTk9VVkVBVV9DQVJEX0lOSVRfRE9XTikgewotCi0JCW5vdXZlYXVfYmFja2xpZ2h0X2V4aXQoZGV2KTsKLQotCQlpZiAoZGV2X3ByaXYtPmNoYW5uZWwpIHsKLQkJCW5vdXZlYXVfY2hhbm5lbF9mcmVlKGRldl9wcml2LT5jaGFubmVsKTsKLQkJCWRldl9wcml2LT5jaGFubmVsID0gTlVMTDsKLQkJfQotCi0JCWlmICghbm91dmVhdV9ub2FjY2VsKSB7Ci0JCQllbmdpbmUtPmZpZm8udGFrZWRvd24oZGV2KTsKLQkJCWVuZ2luZS0+Z3JhcGgudGFrZWRvd24oZGV2KTsKLQkJfQotCQllbmdpbmUtPmZiLnRha2Vkb3duKGRldik7Ci0JCWVuZ2luZS0+dGltZXIudGFrZWRvd24oZGV2KTsKLQkJZW5naW5lLT5tYy50YWtlZG93bihkZXYpOwotCi0JCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQkJdHRtX2JvX2NsZWFuX21tKCZkZXZfcHJpdi0+dHRtLmJkZXYsIFRUTV9QTF9WUkFNKTsKLQkJdHRtX2JvX2NsZWFuX21tKCZkZXZfcHJpdi0+dHRtLmJkZXYsIFRUTV9QTF9UVCk7Ci0JCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCQlub3V2ZWF1X3NnZG1hX3Rha2Vkb3duKGRldik7Ci0KLQkJbm91dmVhdV9ncHVvYmpfdGFrZWRvd24oZGV2KTsKLQkJbm91dmVhdV9tZW1fY2xvc2UoZGV2KTsKLQkJZW5naW5lLT5pbnN0bWVtLnRha2Vkb3duKGRldik7Ci0KLQkJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpCi0JCQlkcm1faXJxX3VuaW5zdGFsbChkZXYpOwotCi0JCW5vdXZlYXVfZ3B1b2JqX2xhdGVfdGFrZWRvd24oZGV2KTsKLQkJbm91dmVhdV9iaW9zX3Rha2Vkb3duKGRldik7Ci0KLQkJdmdhX2NsaWVudF9yZWdpc3RlcihkZXYtPnBkZXYsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0JCWRldl9wcml2LT5pbml0X3N0YXRlID0gTk9VVkVBVV9DQVJEX0lOSVRfRE9XTjsKKwlpZiAoZGV2X3ByaXYtPmNoYW5uZWwpIHsKKwkJbm91dmVhdV9jaGFubmVsX2ZyZWUoZGV2X3ByaXYtPmNoYW5uZWwpOworCQlkZXZfcHJpdi0+Y2hhbm5lbCA9IE5VTEw7CiAJfQorCisJaWYgKCFub3V2ZWF1X25vYWNjZWwpIHsKKwkJZW5naW5lLT5maWZvLnRha2Vkb3duKGRldik7CisJCWVuZ2luZS0+Z3JhcGgudGFrZWRvd24oZGV2KTsKKwl9CisJZW5naW5lLT5mYi50YWtlZG93bihkZXYpOworCWVuZ2luZS0+dGltZXIudGFrZWRvd24oZGV2KTsKKwllbmdpbmUtPmdwaW8udGFrZWRvd24oZGV2KTsKKwllbmdpbmUtPm1jLnRha2Vkb3duKGRldik7CisJZW5naW5lLT5kaXNwbGF5LmxhdGVfdGFrZWRvd24oZGV2KTsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwl0dG1fYm9fY2xlYW5fbW0oJmRldl9wcml2LT50dG0uYmRldiwgVFRNX1BMX1ZSQU0pOworCXR0bV9ib19jbGVhbl9tbSgmZGV2X3ByaXYtPnR0bS5iZGV2LCBUVE1fUExfVFQpOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCW5vdXZlYXVfc2dkbWFfdGFrZWRvd24oZGV2KTsKKworCW5vdXZlYXVfZ3B1b2JqX3Rha2Vkb3duKGRldik7CisJbm91dmVhdV9tZW1fY2xvc2UoZGV2KTsKKwllbmdpbmUtPmluc3RtZW0udGFrZWRvd24oZGV2KTsKKworCWRybV9pcnFfdW5pbnN0YWxsKGRldik7CisKKwlub3V2ZWF1X2dwdW9ial9sYXRlX3Rha2Vkb3duKGRldik7CisJbm91dmVhdV9iaW9zX3Rha2Vkb3duKGRldik7CisKKwl2Z2FfY2xpZW50X3JlZ2lzdGVyKGRldi0+cGRldiwgTlVMTCwgTlVMTCwgTlVMTCk7CiB9CiAKIC8qIGhlcmUgYSBjbGllbnQgZGllcywgcmVsZWFzZSB0aGUgc3R1ZmYgdGhhdCB3YXMgYWxsb2NhdGVkIGZvciBpdHMKQEAgLTY5MSw2ICs3MzYsNyBAQAogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdjsKIAl1aW50MzJfdCByZWcwOwogCXJlc291cmNlX3NpemVfdCBtbWlvX3N0YXJ0X29mZnM7CisJaW50IHJldDsKIAogCWRldl9wcml2ID0ga3phbGxvYyhzaXplb2YoKmRldl9wcml2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkZXZfcHJpdikKQEAgLTY5OSw3ICs3NDUsNiBAQAogCWRldl9wcml2LT5kZXYgPSBkZXY7CiAKIAlkZXZfcHJpdi0+ZmxhZ3MgPSBmbGFncyAmIE5PVVZFQVVfRkxBR1M7Ci0JZGV2X3ByaXYtPmluaXRfc3RhdGUgPSBOT1VWRUFVX0NBUkRfSU5JVF9ET1dOOwogCiAJTlZfREVCVUcoZGV2LCAidmVuZG9yOiAweCVYIGRldmljZTogMHglWCBjbGFzczogMHglWFxuIiwKIAkJIGRldi0+cGNpX3ZlbmRvciwgZGV2LT5wY2lfZGV2aWNlLCBkZXYtPnBkZXYtPmNsYXNzKTsKQEAgLTc3MywxMSArODE4LDkgQEAKIAlOVl9JTkZPKGRldiwgIkRldGVjdGVkIGFuIE5WJTJ4IGdlbmVyYXRpb24gY2FyZCAoMHglMDh4KVxuIiwKIAkJZGV2X3ByaXYtPmNhcmRfdHlwZSwgcmVnMCk7CiAKLQlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgewotCQlpbnQgcmV0ID0gbm91dmVhdV9yZW1vdmVfY29uZmxpY3RpbmdfZHJpdmVycyhkZXYpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9CisJcmV0ID0gbm91dmVhdV9yZW1vdmVfY29uZmxpY3RpbmdfZHJpdmVycyhkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAkvKiBNYXAgUFJBTUlOIEJBUiwgb3Igb24gb2xkZXIgY2FyZHMsIHRoZSBhcGVydHVyZSB3aXRoaW5nIEJBUjAgKi8KIAlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl80MCkgewpAQCAtODEyLDQ2ICs4NTUsMjYgQEAKIAkJZGV2X3ByaXYtPmZsYWdzIHw9IE5WX05GT1JDRTI7CiAKIAkvKiBGb3Iga2VybmVsIG1vZGVzZXR0aW5nLCBpbml0IGNhcmQgbm93IGFuZCBicmluZyB1cCBmYmNvbiAqLwotCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKSB7Ci0JCWludCByZXQgPSBub3V2ZWF1X2NhcmRfaW5pdChkZXYpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9CisJcmV0ID0gbm91dmVhdV9jYXJkX2luaXQoZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG5vdXZlYXVfY2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCi0JLyogSW4gdGhlIGNhc2Ugb2YgYW4gZXJyb3IgZGV2X3ByaXYgbWF5IG5vdCBiZSBhbGxvY2F0ZWQgeWV0ICovCi0JaWYgKGRldl9wcml2KQotCQlub3V2ZWF1X2NhcmRfdGFrZWRvd24oZGV2KTsKLX0KLQotLyogS01TOiB3ZSBuZWVkIG1taW8gYXQgbG9hZCB0aW1lLCBub3Qgd2hlbiB0aGUgZmlyc3QgZHJtIGNsaWVudCBvcGVucy4gKi8KIHZvaWQgbm91dmVhdV9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKLQlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkKLQkJcmV0dXJuOwotCi0Jbm91dmVhdV9jbG9zZShkZXYpOwogfQogCiBpbnQgbm91dmVhdV91bmxvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X2VuZ2luZSAqZW5naW5lID0gJmRldl9wcml2LT5lbmdpbmU7CiAKLQlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgewotCQlkcm1fa21zX2hlbHBlcl9wb2xsX2ZpbmkoZGV2KTsKLQkJbm91dmVhdV9mYmNvbl9maW5pKGRldik7Ci0JCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WXzUwKQotCQkJbnY1MF9kaXNwbGF5X2Rlc3Ryb3koZGV2KTsKLQkJZWxzZQotCQkJbnYwNF9kaXNwbGF5X2Rlc3Ryb3koZGV2KTsKLQkJbm91dmVhdV9jbG9zZShkZXYpOwotCX0KKwlkcm1fa21zX2hlbHBlcl9wb2xsX2ZpbmkoZGV2KTsKKwlub3V2ZWF1X2ZiY29uX2ZpbmkoZGV2KTsKKwllbmdpbmUtPmRpc3BsYXkuZGVzdHJveShkZXYpOworCW5vdXZlYXVfY2FyZF90YWtlZG93bihkZXYpOwogCiAJaW91bm1hcChkZXZfcHJpdi0+bW1pbyk7CiAJaW91bm1hcChkZXZfcHJpdi0+cmFtaW4pOwpAQCAtODY3LDggKzg5MCw2IEBACiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfZ2V0cGFyYW0gKmdldHBhcmFtID0gZGF0YTsKIAotCU5PVVZFQVVfQ0hFQ0tfSU5JVElBTElTRURfV0lUSF9SRVRVUk47Ci0KIAlzd2l0Y2ggKGdldHBhcmFtLT5wYXJhbSkgewogCWNhc2UgTk9VVkVBVV9HRVRQQVJBTV9DSElQU0VUX0lEOgogCQlnZXRwYXJhbS0+dmFsdWUgPSBkZXZfcHJpdi0+Y2hpcHNldDsKQEAgLTkzNyw4ICs5NTgsNiBAQAogewogCXN0cnVjdCBkcm1fbm91dmVhdV9zZXRwYXJhbSAqc2V0cGFyYW0gPSBkYXRhOwogCi0JTk9VVkVBVV9DSEVDS19JTklUSUFMSVNFRF9XSVRIX1JFVFVSTjsKLQogCXN3aXRjaCAoc2V0cGFyYW0tPnBhcmFtKSB7CiAJZGVmYXVsdDoKIAkJTlZfRVJST1IoZGV2LCAidW5rbm93biBwYXJhbWV0ZXIgJWxsZFxuIiwgc2V0cGFyYW0tPnBhcmFtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdHRtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3R0bS5jCmluZGV4IGMzODVkNTAuLmJkMzVmOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdHRtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV90dG0uYwpAQCAtNDIsMTMgKzQyLDEzIEBACiB9CiAKIHN0YXRpYyBpbnQKLW5vdXZlYXVfdHRtX21lbV9nbG9iYWxfaW5pdChzdHJ1Y3QgdHRtX2dsb2JhbF9yZWZlcmVuY2UgKnJlZikKK25vdXZlYXVfdHRtX21lbV9nbG9iYWxfaW5pdChzdHJ1Y3QgZHJtX2dsb2JhbF9yZWZlcmVuY2UgKnJlZikKIHsKIAlyZXR1cm4gdHRtX21lbV9nbG9iYWxfaW5pdChyZWYtPm9iamVjdCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1ub3V2ZWF1X3R0bV9tZW1fZ2xvYmFsX3JlbGVhc2Uoc3RydWN0IHR0bV9nbG9iYWxfcmVmZXJlbmNlICpyZWYpCitub3V2ZWF1X3R0bV9tZW1fZ2xvYmFsX3JlbGVhc2Uoc3RydWN0IGRybV9nbG9iYWxfcmVmZXJlbmNlICpyZWYpCiB7CiAJdHRtX21lbV9nbG9iYWxfcmVsZWFzZShyZWYtPm9iamVjdCk7CiB9CkBAIC01NiwxNiArNTYsMTYgQEAKIGludAogbm91dmVhdV90dG1fZ2xvYmFsX2luaXQoc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2KQogewotCXN0cnVjdCB0dG1fZ2xvYmFsX3JlZmVyZW5jZSAqZ2xvYmFsX3JlZjsKKwlzdHJ1Y3QgZHJtX2dsb2JhbF9yZWZlcmVuY2UgKmdsb2JhbF9yZWY7CiAJaW50IHJldDsKIAogCWdsb2JhbF9yZWYgPSAmZGV2X3ByaXYtPnR0bS5tZW1fZ2xvYmFsX3JlZjsKLQlnbG9iYWxfcmVmLT5nbG9iYWxfdHlwZSA9IFRUTV9HTE9CQUxfVFRNX01FTTsKKwlnbG9iYWxfcmVmLT5nbG9iYWxfdHlwZSA9IERSTV9HTE9CQUxfVFRNX01FTTsKIAlnbG9iYWxfcmVmLT5zaXplID0gc2l6ZW9mKHN0cnVjdCB0dG1fbWVtX2dsb2JhbCk7CiAJZ2xvYmFsX3JlZi0+aW5pdCA9ICZub3V2ZWF1X3R0bV9tZW1fZ2xvYmFsX2luaXQ7CiAJZ2xvYmFsX3JlZi0+cmVsZWFzZSA9ICZub3V2ZWF1X3R0bV9tZW1fZ2xvYmFsX3JlbGVhc2U7CiAKLQlyZXQgPSB0dG1fZ2xvYmFsX2l0ZW1fcmVmKGdsb2JhbF9yZWYpOworCXJldCA9IGRybV9nbG9iYWxfaXRlbV9yZWYoZ2xvYmFsX3JlZik7CiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgewogCQlEUk1fRVJST1IoIkZhaWxlZCBzZXR0aW5nIHVwIFRUTSBtZW1vcnkgYWNjb3VudGluZ1xuIik7CiAJCWRldl9wcml2LT50dG0ubWVtX2dsb2JhbF9yZWYucmVsZWFzZSA9IE5VTEw7CkBAIC03NCwxNSArNzQsMTUgQEAKIAogCWRldl9wcml2LT50dG0uYm9fZ2xvYmFsX3JlZi5tZW1fZ2xvYiA9IGdsb2JhbF9yZWYtPm9iamVjdDsKIAlnbG9iYWxfcmVmID0gJmRldl9wcml2LT50dG0uYm9fZ2xvYmFsX3JlZi5yZWY7Ci0JZ2xvYmFsX3JlZi0+Z2xvYmFsX3R5cGUgPSBUVE1fR0xPQkFMX1RUTV9CTzsKKwlnbG9iYWxfcmVmLT5nbG9iYWxfdHlwZSA9IERSTV9HTE9CQUxfVFRNX0JPOwogCWdsb2JhbF9yZWYtPnNpemUgPSBzaXplb2Yoc3RydWN0IHR0bV9ib19nbG9iYWwpOwogCWdsb2JhbF9yZWYtPmluaXQgPSAmdHRtX2JvX2dsb2JhbF9pbml0OwogCWdsb2JhbF9yZWYtPnJlbGVhc2UgPSAmdHRtX2JvX2dsb2JhbF9yZWxlYXNlOwogCi0JcmV0ID0gdHRtX2dsb2JhbF9pdGVtX3JlZihnbG9iYWxfcmVmKTsKKwlyZXQgPSBkcm1fZ2xvYmFsX2l0ZW1fcmVmKGdsb2JhbF9yZWYpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKIAkJRFJNX0VSUk9SKCJGYWlsZWQgc2V0dGluZyB1cCBUVE0gQk8gc3Vic3lzdGVtXG4iKTsKLQkJdHRtX2dsb2JhbF9pdGVtX3VucmVmKCZkZXZfcHJpdi0+dHRtLm1lbV9nbG9iYWxfcmVmKTsKKwkJZHJtX2dsb2JhbF9pdGVtX3VucmVmKCZkZXZfcHJpdi0+dHRtLm1lbV9nbG9iYWxfcmVmKTsKIAkJZGV2X3ByaXYtPnR0bS5tZW1fZ2xvYmFsX3JlZi5yZWxlYXNlID0gTlVMTDsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC05Niw4ICs5Niw4IEBACiAJaWYgKGRldl9wcml2LT50dG0ubWVtX2dsb2JhbF9yZWYucmVsZWFzZSA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQl0dG1fZ2xvYmFsX2l0ZW1fdW5yZWYoJmRldl9wcml2LT50dG0uYm9fZ2xvYmFsX3JlZi5yZWYpOwotCXR0bV9nbG9iYWxfaXRlbV91bnJlZigmZGV2X3ByaXYtPnR0bS5tZW1fZ2xvYmFsX3JlZik7CisJZHJtX2dsb2JhbF9pdGVtX3VucmVmKCZkZXZfcHJpdi0+dHRtLmJvX2dsb2JhbF9yZWYucmVmKTsKKwlkcm1fZ2xvYmFsX2l0ZW1fdW5yZWYoJmRldl9wcml2LT50dG0ubWVtX2dsb2JhbF9yZWYpOwogCWRldl9wcml2LT50dG0ubWVtX2dsb2JhbF9yZWYucmVsZWFzZSA9IE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9jcnRjLmMKaW5kZXggZWJhNjg3ZjEuLjFjMjBjMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfY3J0Yy5jCkBAIC0xNTcsNiArMTU3LDcgQEAKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9jcnRjICpudl9jcnRjID0gbm91dmVhdV9jcnRjKGNydGMpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKIAl1bnNpZ25lZCBjaGFyIHNlcTEgPSAwLCBjcnRjMTcgPSAwOwogCXVuc2lnbmVkIGNoYXIgY3J0YzFBOwogCkBAIC0yMTEsNiArMjEyLDEwIEBACiAJTlZWZ2FTZXFSZXNldChkZXYsIG52X2NydGMtPmluZGV4LCBmYWxzZSk7CiAKIAlOVldyaXRlVmdhQ3J0YyhkZXYsIG52X2NydGMtPmluZGV4LCBOVl9DSU9fQ1JFX1JQQzFfSU5ERVgsIGNydGMxQSk7CisKKwkvKiBVcGRhdGUgY29ubmVjdG9yIHBvbGxpbmcgbW9kZXMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpCisJCW5vdXZlYXVfY29ubmVjdG9yX3NldF9wb2xsaW5nKGNvbm5lY3Rvcik7CiB9CiAKIHN0YXRpYyBib29sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RhYy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kYWMuYwppbmRleCAxY2IxOWUzLi5lYTM2MjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RhYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGFjLmMKQEAgLTIyMCw2ICsyMjAsNyBAQAogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9ncGlvX2VuZ2luZSAqZ3BpbyA9ICZkZXZfcHJpdi0+ZW5naW5lLmdwaW87CiAJc3RydWN0IGRjYl9lbnRyeSAqZGNiID0gbm91dmVhdV9lbmNvZGVyKGVuY29kZXIpLT5kY2I7CiAJdWludDMyX3Qgc2FtcGxlLCB0ZXN0dmFsLCByZWdvZmZzZXQgPSBudjA0X2RhY19vdXRwdXRfb2Zmc2V0KGVuY29kZXIpOwogCXVpbnQzMl90IHNhdmVkX3Bvd2VyY3RybF8yID0gMCwgc2F2ZWRfcG93ZXJjdHJsXzQgPSAwLCBzYXZlZF9yb3V0cHV0LApAQCAtMjUxLDIyICsyNTIsMjEgQEAKIAkJbnZXcml0ZU1DKGRldiwgTlZfUEJVU19QT1dFUkNUUkxfNCwgc2F2ZWRfcG93ZXJjdHJsXzQgJiAweGZmZmZmZmNmKTsKIAl9CiAKLQlzYXZlZF9ncGlvMSA9IG52MTdfZ3Bpb19nZXQoZGV2LCBEQ0JfR1BJT19UVkRBQzEpOwotCXNhdmVkX2dwaW8wID0gbnYxN19ncGlvX2dldChkZXYsIERDQl9HUElPX1RWREFDMCk7CisJc2F2ZWRfZ3BpbzEgPSBncGlvLT5nZXQoZGV2LCBEQ0JfR1BJT19UVkRBQzEpOworCXNhdmVkX2dwaW8wID0gZ3Bpby0+Z2V0KGRldiwgRENCX0dQSU9fVFZEQUMwKTsKIAotCW52MTdfZ3Bpb19zZXQoZGV2LCBEQ0JfR1BJT19UVkRBQzEsIGRjYi0+dHlwZSA9PSBPVVRQVVRfVFYpOwotCW52MTdfZ3Bpb19zZXQoZGV2LCBEQ0JfR1BJT19UVkRBQzAsIGRjYi0+dHlwZSA9PSBPVVRQVVRfVFYpOworCWdwaW8tPnNldChkZXYsIERDQl9HUElPX1RWREFDMSwgZGNiLT50eXBlID09IE9VVFBVVF9UVik7CisJZ3Bpby0+c2V0KGRldiwgRENCX0dQSU9fVFZEQUMwLCBkY2ItPnR5cGUgPT0gT1VUUFVUX1RWKTsKIAogCW1zbGVlcCg0KTsKIAogCXNhdmVkX3JvdXRwdXQgPSBOVlJlYWRSQU1EQUMoZGV2LCAwLCBOVl9QUkFNREFDX0RBQ0NMSyArIHJlZ29mZnNldCk7CiAJaGVhZCA9IChzYXZlZF9yb3V0cHV0ICYgMHgxMDApID4+IDg7Ci0jaWYgMAotCS8qIGlmIHRoZXJlJ3MgYSBzcGFyZSBjcnRjLCB1c2luZyBpdCB3aWxsIG1pbmltaXNlIGZsaWNrZXIgZm9yIHRoZSBjYXNlCi0JICogd2hlcmUgdGhlIGluLXVzZSBjcnRjIGlzIGluIHVzZSBieSBhbiBvZmYtY2hpcCB0bWRzIGVuY29kZXIgKi8KLQlpZiAoeGY4Nl9jb25maWctPmNydGNbaGVhZF0tPmVuYWJsZWQgJiYgIXhmODZfY29uZmlnLT5jcnRjW2hlYWQgXiAxXS0+ZW5hYmxlZCkKKworCS8qIGlmIHRoZXJlJ3MgYSBzcGFyZSBjcnRjLCB1c2luZyBpdCB3aWxsIG1pbmltaXNlIGZsaWNrZXIgKi8KKwlpZiAoIShOVlJlYWRWZ2FDcnRjKGRldiwgaGVhZCwgTlZfQ0lPX0NSRV9SUEMxX0lOREVYKSAmIDB4QzApKQogCQloZWFkIF49IDE7Ci0jZW5kaWYKKwogCS8qIG52IGRyaXZlciBhbmQgbnYzMSB1c2UgMHhmZmZmZmVlZSwgbnYzNCBhbmQgNjYwMCB1c2UgMHhmZmZmZmVjZSAqLwogCXJvdXRwdXQgPSAoc2F2ZWRfcm91dHB1dCAmIDB4ZmZmZmZlY2UpIHwgaGVhZCA8PCA4OwogCkBAIC0zMDQsOCArMzA0LDggQEAKIAkJbnZXcml0ZU1DKGRldiwgTlZfUEJVU19QT1dFUkNUUkxfNCwgc2F2ZWRfcG93ZXJjdHJsXzQpOwogCW52V3JpdGVNQyhkZXYsIE5WX1BCVVNfUE9XRVJDVFJMXzIsIHNhdmVkX3Bvd2VyY3RybF8yKTsKIAotCW52MTdfZ3Bpb19zZXQoZGV2LCBEQ0JfR1BJT19UVkRBQzEsIHNhdmVkX2dwaW8xKTsKLQludjE3X2dwaW9fc2V0KGRldiwgRENCX0dQSU9fVFZEQUMwLCBzYXZlZF9ncGlvMCk7CisJZ3Bpby0+c2V0KGRldiwgRENCX0dQSU9fVFZEQUMxLCBzYXZlZF9ncGlvMSk7CisJZ3Bpby0+c2V0KGRldiwgRENCX0dQSU9fVFZEQUMwLCBzYXZlZF9ncGlvMCk7CiAKIAlyZXR1cm4gc2FtcGxlOwogfQpAQCAtMzE1LDkgKzMxNSwxMiBAQAogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CiAJc3RydWN0IGRjYl9lbnRyeSAqZGNiID0gbm91dmVhdV9lbmNvZGVyKGVuY29kZXIpLT5kY2I7Ci0JdWludDMyX3Qgc2FtcGxlID0gbnYxN19kYWNfc2FtcGxlX2xvYWQoZW5jb2Rlcik7CiAKLQlpZiAoc2FtcGxlICYgTlZfUFJBTURBQ19URVNUX0NPTlRST0xfU0VOU0VCX0FMTEhJKSB7CisJaWYgKG52MDRfZGFjX2luX3VzZShlbmNvZGVyKSkKKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCisJaWYgKG52MTdfZGFjX3NhbXBsZV9sb2FkKGVuY29kZXIpICYKKwkgICAgTlZfUFJBTURBQ19URVNUX0NPTlRST0xfU0VOU0VCX0FMTEhJKSB7CiAJCU5WX0lORk8oZGV2LCAiTG9hZCBkZXRlY3RlZCBvbiBvdXRwdXQgJWNcbiIsCiAJCQknQCcgKyBmZnMoZGNiLT5vcikpOwogCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CkBAIC0zMzAsNiArMzMzLDkgQEAKIAkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKIAkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKIHsKKwlpZiAobnYwNF9kYWNfaW5fdXNlKGVuY29kZXIpKQorCQlyZXR1cm4gZmFsc2U7CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDI4LDYgKzQzNCwxNyBAQAogCX0KIH0KIAorLyogQ2hlY2sgaWYgdGhlIERBQyBjb3JyZXNwb25kaW5nIHRvICdlbmNvZGVyJyBpcyBiZWluZyB1c2VkIGJ5CisgKiBzb21lb25lIGVsc2UuICovCitib29sIG52MDRfZGFjX2luX3VzZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5jb2Rlci0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZGNiX2VudHJ5ICpkY2IgPSBub3V2ZWF1X2VuY29kZXIoZW5jb2RlciktPmRjYjsKKworCXJldHVybiBudl9nZjRfZGlzcF9hcmNoKGVuY29kZXItPmRldikgJiYKKwkJKGRldl9wcml2LT5kYWNfdXNlcnNbZmZzKGRjYi0+b3IpIC0gMV0gJiB+KDEgPDwgZGNiLT5pbmRleCkpOworfQorCiBzdGF0aWMgdm9pZCBudjA0X2RhY19kcG1zKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgaW50IG1vZGUpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKQEAgLTUwMSwxMSArNTE4LDEzIEBACiAJLmRlc3Ryb3kgPSBudjA0X2RhY19kZXN0cm95LAogfTsKIAotaW50IG52MDRfZGFjX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZGNiX2VudHJ5ICplbnRyeSkKK2ludAorbnYwNF9kYWNfY3JlYXRlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVjdCBkY2JfZW50cnkgKmVudHJ5KQogewogCWNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgKmhlbHBlcjsKLQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CiAJc3RydWN0IG5vdXZlYXVfZW5jb2RlciAqbnZfZW5jb2RlciA9IE5VTEw7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKIAogCW52X2VuY29kZXIgPSBremFsbG9jKHNpemVvZigqbnZfZW5jb2RlciksIEdGUF9LRVJORUwpOwogCWlmICghbnZfZW5jb2RlcikKQEAgLTUyNyw1ICs1NDYsNiBAQAogCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gZW50cnktPmhlYWRzOwogCWVuY29kZXItPnBvc3NpYmxlX2Nsb25lcyA9IDA7CiAKKwlkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoY29ubmVjdG9yLCBlbmNvZGVyKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGZwLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RmcC5jCmluZGV4IDQxNjM0ZDQuLjMzMTFmM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGZwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kZnAuYwpAQCAtNDEzLDEwICs0MTMsNiBAQAogCXN0cnVjdCBkY2JfZW50cnkgKmRjYmUgPSBudl9lbmNvZGVyLT5kY2I7CiAJaW50IGhlYWQgPSBub3V2ZWF1X2NydGMoZW5jb2Rlci0+Y3J0YyktPmluZGV4OwogCi0JTlZfSU5GTyhkZXYsICJPdXRwdXQgJXMgaXMgcnVubmluZyBvbiBDUlRDICVkIHVzaW5nIG91dHB1dCAlY1xuIiwKLQkJZHJtX2dldF9jb25uZWN0b3JfbmFtZSgmbm91dmVhdV9lbmNvZGVyX2Nvbm5lY3Rvcl9nZXQobnZfZW5jb2RlciktPmJhc2UpLAotCQludl9jcnRjLT5pbmRleCwgJ0AnICsgZmZzKG52X2VuY29kZXItPmRjYi0+b3IpKTsKLQogCWlmIChkY2JlLT50eXBlID09IE9VVFBVVF9UTURTKQogCQlydW5fdG1kc190YWJsZShkZXYsIGRjYmUsIGhlYWQsIG52X2VuY29kZXItPm1vZGUuY2xvY2spOwogCWVsc2UgaWYgKGRjYmUtPnR5cGUgPT0gT1VUUFVUX0xWRFMpCkBAIC01ODQsMTEgKzU4MCwxMiBAQAogCS5kZXN0cm95ID0gbnYwNF9kZnBfZGVzdHJveSwKIH07CiAKLWludCBudjA0X2RmcF9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRjYl9lbnRyeSAqZW50cnkpCitpbnQKK252MDRfZGZwX2NyZWF0ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZGNiX2VudHJ5ICplbnRyeSkKIHsKIAljb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzICpoZWxwZXI7Ci0Jc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwogCXN0cnVjdCBub3V2ZWF1X2VuY29kZXIgKm52X2VuY29kZXIgPSBOVUxMOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKIAlpbnQgdHlwZTsKIAogCXN3aXRjaCAoZW50cnktPnR5cGUpIHsKQEAgLTYxMywxMSArNjEwLDEyIEBACiAJbnZfZW5jb2Rlci0+ZGNiID0gZW50cnk7CiAJbnZfZW5jb2Rlci0+b3IgPSBmZnMoZW50cnktPm9yKSAtIDE7CiAKLQlkcm1fZW5jb2Rlcl9pbml0KGRldiwgZW5jb2RlciwgJm52MDRfZGZwX2Z1bmNzLCB0eXBlKTsKKwlkcm1fZW5jb2Rlcl9pbml0KGNvbm5lY3Rvci0+ZGV2LCBlbmNvZGVyLCAmbnYwNF9kZnBfZnVuY3MsIHR5cGUpOwogCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoZW5jb2RlciwgaGVscGVyKTsKIAogCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gZW50cnktPmhlYWRzOwogCWVuY29kZXItPnBvc3NpYmxlX2Nsb25lcyA9IDA7CiAKKwlkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoY29ubmVjdG9yLCBlbmNvZGVyKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kaXNwbGF5LmMKaW5kZXggYzc4OThiNC4uOWUyOGNmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kaXNwbGF5LmMKQEAgLTMyLDggKzMyLDYgQEAKICNpbmNsdWRlICJub3V2ZWF1X2VuY29kZXIuaCIKICNpbmNsdWRlICJub3V2ZWF1X2Nvbm5lY3Rvci5oIgogCi0jZGVmaW5lIE1VTFRJUExFX0VOQ09ERVJTKGUpIChlICYgKGUgLSAxKSkKLQogc3RhdGljIHZvaWQKIG52MDRfZGlzcGxheV9zdG9yZV9pbml0aWFsX2hlYWRfb3duZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKQEAgLTQxLDcgKzM5LDcgQEAKIAogCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDExKSB7CiAJCWRldl9wcml2LT5jcnRjX293bmVyID0gTlZSZWFkVmdhQ3J0YyhkZXYsIDAsIE5WX0NJT19DUkVfNDQpOwotCQlnb3RvIG93bmVya25vd247CisJCXJldHVybjsKIAl9CiAKIAkvKiByZWFkaW5nIENSNDQgaXMgYnJva2VuIG9uIG52MTEsIHNvIHdlIGF0dGVtcHQgdG8gaW5mZXIgaXQgKi8KQEAgLTUyLDggKzUwLDYgQEAKIAkJYm9vbCB0dkEgPSBmYWxzZTsKIAkJYm9vbCB0dkIgPSBmYWxzZTsKIAotCQlOVkxvY2tWZ2FDcnRjcyhkZXYsIGZhbHNlKTsKLQogCQlzbGF2ZWRfb25fQiA9IE5WUmVhZFZnYUNydGMoZGV2LCAxLCBOVl9DSU9fQ1JFX1BJWEVMX0lOREVYKSAmCiAJCQkJCQkJCQkweDgwOwogCQlpZiAoc2xhdmVkX29uX0IpCkBAIC02Niw4ICs2Miw2IEBACiAJCQl0dkEgPSAhKE5WUmVhZFZnYUNydGMoZGV2LCAwLCBOVl9DSU9fQ1JFX0xDRF9fSU5ERVgpICYKIAkJCQkJTUFTSyhOVl9DSU9fQ1JFX0xDRF9MQ0RfU0VMRUNUKSk7CiAKLQkJTlZMb2NrVmdhQ3J0Y3MoZGV2LCB0cnVlKTsKLQogCQlpZiAoc2xhdmVkX29uX0EgJiYgIXR2QSkKIAkJCWRldl9wcml2LT5jcnRjX293bmVyID0gMHgwOwogCQllbHNlIGlmIChzbGF2ZWRfb25fQiAmJiAhdHZCKQpAQCAtNzksMTQgKzczLDQwIEBACiAJCWVsc2UKIAkJCWRldl9wcml2LT5jcnRjX293bmVyID0gMHgwOwogCX0KK30KIAotb3duZXJrbm93bjoKLQlOVl9JTkZPKGRldiwgIkluaXRpYWwgQ1JUQ19PV05FUiBpcyAlZFxuIiwgZGV2X3ByaXYtPmNydGNfb3duZXIpOworaW50CitudjA0X2Rpc3BsYXlfZWFybHlfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCS8qIE1ha2UgdGhlIEkyQyBidXNlcyBhY2Nlc3NpYmxlLiAqLworCWlmICghbnZfZ2Y0X2Rpc3BfYXJjaChkZXYpKSB7CisJCXVpbnQzMl90IHBtY19lbmFibGUgPSBudl9yZDMyKGRldiwgTlYwM19QTUNfRU5BQkxFKTsKIAotCS8qIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBoZWFkcyBhcmUgbm90IHRpZWQgaGVuY2Vmb3J0aCwgb3IgcmVhZGluZyBhbnkKLQkgKiA4IGJpdCByZWcgb24gaGVhZCBCIHdpbGwgZmFpbAotCSAqIHNldHRpbmcgYSBzaW5nbGUgYXJiaXRyYXJ5IGhlYWQgc29sdmVzIHRoYXQgKi8KLQlOVlNldE93bmVyKGRldiwgMCk7CisJCWlmICghKHBtY19lbmFibGUgJiAxKSkKKwkJCW52X3dyMzIoZGV2LCBOVjAzX1BNQ19FTkFCTEUsIHBtY19lbmFibGUgfCAxKTsKKwl9CisKKwkvKiBVbmxvY2sgdGhlIFZHQSBDUlRDcy4gKi8KKwlOVkxvY2tWZ2FDcnRjcyhkZXYsIGZhbHNlKTsKKworCS8qIE1ha2Ugc3VyZSB0aGUgQ1JUQ3MgYXJlbid0IGluIHNsYXZlZCBtb2RlLiAqLworCWlmIChudl90d29faGVhZHMoZGV2KSkgeworCQludjA0X2Rpc3BsYXlfc3RvcmVfaW5pdGlhbF9oZWFkX293bmVyKGRldik7CisJCU5WU2V0T3duZXIoZGV2LCAwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZAorbnYwNF9kaXNwbGF5X2xhdGVfdGFrZWRvd24oc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKG52X3R3b19oZWFkcyhkZXYpKQorCQlOVlNldE93bmVyKGRldiwgZGV2X3ByaXYtPmNydGNfb3duZXIpOworCisJTlZMb2NrVmdhQ3J0Y3MoZGV2LCB0cnVlKTsKIH0KIAogaW50CkBAIC05NCwxNCArMTE0LDEzIEBACiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZGNiX3RhYmxlICpkY2IgPSAmZGV2X3ByaXYtPnZiaW9zLmRjYjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCAqY3Q7CiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwogCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKIAlpbnQgaSwgcmV0OwogCiAJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CiAKLQlpZiAobnZfdHdvX2hlYWRzKGRldikpCi0JCW52MDRfZGlzcGxheV9zdG9yZV9pbml0aWFsX2hlYWRfb3duZXIoZGV2KTsKIAlub3V2ZWF1X2h3X3NhdmVfdmdhX2ZvbnRzKGRldiwgMSk7CiAKIAlkcm1fbW9kZV9jb25maWdfaW5pdChkZXYpOwpAQCAtMTMyLDE5ICsxNTEsMjMgQEAKIAlmb3IgKGkgPSAwOyBpIDwgZGNiLT5lbnRyaWVzOyBpKyspIHsKIAkJc3RydWN0IGRjYl9lbnRyeSAqZGNiZW50ID0gJmRjYi0+ZW50cnlbaV07CiAKKwkJY29ubmVjdG9yID0gbm91dmVhdV9jb25uZWN0b3JfY3JlYXRlKGRldiwgZGNiZW50LT5jb25uZWN0b3IpOworCQlpZiAoSVNfRVJSKGNvbm5lY3RvcikpCisJCQljb250aW51ZTsKKwogCQlzd2l0Y2ggKGRjYmVudC0+dHlwZSkgewogCQljYXNlIE9VVFBVVF9BTkFMT0c6Ci0JCQlyZXQgPSBudjA0X2RhY19jcmVhdGUoZGV2LCBkY2JlbnQpOworCQkJcmV0ID0gbnYwNF9kYWNfY3JlYXRlKGNvbm5lY3RvciwgZGNiZW50KTsKIAkJCWJyZWFrOwogCQljYXNlIE9VVFBVVF9MVkRTOgogCQljYXNlIE9VVFBVVF9UTURTOgotCQkJcmV0ID0gbnYwNF9kZnBfY3JlYXRlKGRldiwgZGNiZW50KTsKKwkJCXJldCA9IG52MDRfZGZwX2NyZWF0ZShjb25uZWN0b3IsIGRjYmVudCk7CiAJCQlicmVhazsKIAkJY2FzZSBPVVRQVVRfVFY6CiAJCQlpZiAoZGNiZW50LT5sb2NhdGlvbiA9PSBEQ0JfTE9DX09OX0NISVApCi0JCQkJcmV0ID0gbnYxN190dl9jcmVhdGUoZGV2LCBkY2JlbnQpOworCQkJCXJldCA9IG52MTdfdHZfY3JlYXRlKGNvbm5lY3RvciwgZGNiZW50KTsKIAkJCWVsc2UKLQkJCQlyZXQgPSBudjA0X3R2X2NyZWF0ZShkZXYsIGRjYmVudCk7CisJCQkJcmV0ID0gbnYwNF90dl9jcmVhdGUoY29ubmVjdG9yLCBkY2JlbnQpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlOVl9XQVJOKGRldiwgIkRDQiB0eXBlICVkIG5vdCBrbm93blxuIiwgZGNiZW50LT50eXBlKTsKQEAgLTE1NSwxMiArMTc4LDE2IEBACiAJCQljb250aW51ZTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgZGNiLT5jb25uZWN0b3IuZW50cmllczsgaSsrKQotCQlub3V2ZWF1X2Nvbm5lY3Rvcl9jcmVhdGUoZGV2LCAmZGNiLT5jb25uZWN0b3IuZW50cnlbaV0pOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb25uZWN0b3IsIGN0LAorCQkJCSAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgeworCQlpZiAoIWNvbm5lY3Rvci0+ZW5jb2Rlcl9pZHNbMF0pIHsKKwkJCU5WX1dBUk4oZGV2LCAiJXMgaGFzIG5vIGVuY29kZXJzLCByZW1vdmluZ1xuIiwKKwkJCQlkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOworCQkJY29ubmVjdG9yLT5mdW5jcy0+ZGVzdHJveShjb25uZWN0b3IpOworCQl9CisJfQogCiAJLyogU2F2ZSBwcmV2aW91cyBzdGF0ZSAqLwotCU5WTG9ja1ZnYUNydGNzKGRldiwgZmFsc2UpOwotCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpCiAJCWNydGMtPmZ1bmNzLT5zYXZlKGNydGMpOwogCkBAIC0xOTEsOCArMjE4LDYgQEAKIAl9CiAKIAkvKiBSZXN0b3JlIHN0YXRlICovCi0JTlZMb2NrVmdhQ3J0Y3MoZGV2LCBmYWxzZSk7Ci0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgewogCQlzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzICpmdW5jID0gZW5jb2Rlci0+aGVscGVyX3ByaXZhdGU7CiAKQEAgLTIwNywxNSArMjMyLDEyIEBACiAJbm91dmVhdV9od19zYXZlX3ZnYV9mb250cyhkZXYsIDApOwogfQogCi12b2lkCi1udjA0X2Rpc3BsYXlfcmVzdG9yZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoraW50CitudjA0X2Rpc3BsYXlfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwogCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKIAotCU5WTG9ja1ZnYUNydGNzKGRldiwgZmFsc2UpOwotCiAJLyogbWVoLi4gbW9kZXNldCBhcHBhcmVudGx5IGRvZXNuJ3Qgc2V0dXAgYWxsIHRoZSByZWdzIGFuZCBkZXBlbmRzCiAJICogb24gcHJlLWV4aXN0aW5nIHN0YXRlLCBmb3Igbm93IGxvYWQgdGhlIHN0YXRlIG9mIHRoZSBjYXJkICpiZWZvcmUqCiAJICogbm91dmVhdSB3YXMgbG9hZGVkLCBhbmQgdGhlbiBkbyBhIG1vZGVzZXQuCkBAIC0yMzMsMTIgKzI1NSw2IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpCiAJCWNydGMtPmZ1bmNzLT5yZXN0b3JlKGNydGMpOwogCi0JaWYgKG52X3R3b19oZWFkcyhkZXYpKSB7Ci0JCU5WX0lORk8oZGV2LCAiUmVzdG9yaW5nIENSVENfT1dORVIgdG8gJWQuXG4iLAotCQkJZGV2X3ByaXYtPmNydGNfb3duZXIpOwotCQlOVlNldE93bmVyKGRldiwgZGV2X3ByaXYtPmNydGNfb3duZXIpOwotCX0KLQotCU5WTG9ja1ZnYUNydGNzKGRldiwgdHJ1ZSk7CisJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZmlmby5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9maWZvLmMKaW5kZXggNjZmZTU1OS4uMDZjZWRkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9maWZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9maWZvLmMKQEAgLTExMiw2ICsxMTIsMTIgQEAKIAkJCU5WMDNfUEZJRk9fQ0FDSEUxX1BVU0gxX0NISURfTUFTSzsKIH0KIAorI2lmZGVmIF9fQklHX0VORElBTgorI2RlZmluZSBETUFfRkVUQ0hfRU5ESUFOTkVTUyBOVl9QRklGT19DQUNIRTFfQklHX0VORElBTgorI2Vsc2UKKyNkZWZpbmUgRE1BX0ZFVENIX0VORElBTk5FU1MgMAorI2VuZGlmCisKIGludAogbnYwNF9maWZvX2NyZWF0ZV9jb250ZXh0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4pCiB7CkBAIC0xMzEsMTggKzEzNywxMyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+Y29udGV4dF9zd2l0Y2hfbG9jaywgZmxhZ3MpOwogCiAJLyogU2V0dXAgaW5pdGlhbCBzdGF0ZSAqLwotCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5wcmVwYXJlX2FjY2VzcyhkZXYsIHRydWUpOwogCVJBTUZDX1dSKERNQV9QVVQsIGNoYW4tPnB1c2hidWZfYmFzZSk7CiAJUkFNRkNfV1IoRE1BX0dFVCwgY2hhbi0+cHVzaGJ1Zl9iYXNlKTsKIAlSQU1GQ19XUihETUFfSU5TVEFOQ0UsIGNoYW4tPnB1c2hidWYtPmluc3RhbmNlID4+IDQpOwogCVJBTUZDX1dSKERNQV9GRVRDSCwgKE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR18xMjhfQllURVMgfAogCQkJICAgICBOVl9QRklGT19DQUNIRTFfRE1BX0ZFVENIX1NJWkVfMTI4X0JZVEVTIHwKIAkJCSAgICAgTlZfUEZJRk9fQ0FDSEUxX0RNQV9GRVRDSF9NQVhfUkVRU184IHwKLSNpZmRlZiBfX0JJR19FTkRJQU4KLQkJCSAgICAgTlZfUEZJRk9fQ0FDSEUxX0JJR19FTkRJQU4gfAotI2VuZGlmCi0JCQkgICAgIDApKTsKLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOworCQkJICAgICBETUFfRkVUQ0hfRU5ESUFOTkVTUykpOwogCiAJLyogZW5hYmxlIHRoZSBmaWZvIGRtYSBvcGVyYXRpb24gKi8KIAludl93cjMyKGRldiwgTlYwNF9QRklGT19NT0RFLApAQCAtMTY5LDggKzE3MCw2IEBACiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1aW50MzJfdCBmYyA9IE5WMDRfUkFNRkMoY2hpZCksIHRtcDsKIAotCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5wcmVwYXJlX2FjY2VzcyhkZXYsIGZhbHNlKTsKLQogCW52X3dyMzIoZGV2LCBOVjA0X1BGSUZPX0NBQ0hFMV9ETUFfUFVULCBudl9yaTMyKGRldiwgZmMgKyAwKSk7CiAJbnZfd3IzMihkZXYsIE5WMDRfUEZJRk9fQ0FDSEUxX0RNQV9HRVQsIG52X3JpMzIoZGV2LCBmYyArIDQpKTsKIAl0bXAgPSBudl9yaTMyKGRldiwgZmMgKyA4KTsKQEAgLTE4MSw4ICsxODAsNiBAQAogCW52X3dyMzIoZGV2LCBOVjA0X1BGSUZPX0NBQ0hFMV9FTkdJTkUsIG52X3JpMzIoZGV2LCBmYyArIDIwKSk7CiAJbnZfd3IzMihkZXYsIE5WMDRfUEZJRk9fQ0FDSEUxX1BVTEwxLCBudl9yaTMyKGRldiwgZmMgKyAyNCkpOwogCi0JZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLmZpbmlzaF9hY2Nlc3MoZGV2KTsKLQogCW52X3dyMzIoZGV2LCBOVjAzX1BGSUZPX0NBQ0hFMV9HRVQsIDApOwogCW52X3dyMzIoZGV2LCBOVjAzX1BGSUZPX0NBQ0hFMV9QVVQsIDApOwogfQpAQCAtMjIzLDcgKzIyMCw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5wcmVwYXJlX2FjY2VzcyhkZXYsIHRydWUpOwogCVJBTUZDX1dSKERNQV9QVVQsIG52X3JkMzIoZGV2LCBOVjA0X1BGSUZPX0NBQ0hFMV9ETUFfUFVUKSk7CiAJUkFNRkNfV1IoRE1BX0dFVCwgbnZfcmQzMihkZXYsIE5WMDRfUEZJRk9fQ0FDSEUxX0RNQV9HRVQpKTsKIAl0bXAgID0gbnZfcmQzMihkZXYsIE5WMDRfUEZJRk9fQ0FDSEUxX0RNQV9EQ09VTlQpIDw8IDE2OwpAQCAtMjMzLDcgKzIyOSw2IEBACiAJUkFNRkNfV1IoRE1BX0ZFVENILCBudl9yZDMyKGRldiwgTlYwNF9QRklGT19DQUNIRTFfRE1BX0ZFVENIKSk7CiAJUkFNRkNfV1IoRU5HSU5FLCBudl9yZDMyKGRldiwgTlYwNF9QRklGT19DQUNIRTFfRU5HSU5FKSk7CiAJUkFNRkNfV1IoUFVMTDFfRU5HSU5FLCBudl9yZDMyKGRldiwgTlYwNF9QRklGT19DQUNIRTFfUFVMTDEpKTsKLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOwogCiAJbnYwNF9maWZvX2RvX2xvYWRfY29udGV4dChkZXYsIHBmaWZvLT5jaGFubmVscyAtIDEpOwogCW52X3dyMzIoZGV2LCBOVjAzX1BGSUZPX0NBQ0hFMV9QVVNIMSwgcGZpZm8tPmNoYW5uZWxzIC0gMSk7CkBAIC0yOTcsNiArMjkyLDcgQEAKIAogCW52MDRfZmlmb19pbml0X2ludHIoZGV2KTsKIAlwZmlmby0+ZW5hYmxlKGRldik7CisJcGZpZm8tPnJlYXNzaWduKGRldiwgdHJ1ZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPmVuZ2luZS5maWZvLmNoYW5uZWxzOyBpKyspIHsKIAkJaWYgKGRldl9wcml2LT5maWZvc1tpXSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9ncmFwaC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9ncmFwaC5jCmluZGV4IDYxODM1NWUuLmM4OTczNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZ3JhcGguYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2dyYXBoLmMKQEAgLTM0Miw3ICszNDIsNyBAQAogfTsKIAogc3RydWN0IGdyYXBoX3N0YXRlIHsKLQlpbnQgbnYwNFtBUlJBWV9TSVpFKG52MDRfZ3JhcGhfY3R4X3JlZ3MpXTsKKwl1aW50MzJfdCBudjA0W0FSUkFZX1NJWkUobnYwNF9ncmFwaF9jdHhfcmVncyldOwogfTsKIAogc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqCkBAIC01MjcsOCArNTI3LDcgQEAKIG52MDRfZ3JhcGhfbXRoZF9zZXRfcmVmKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIGludCBncmNsYXNzLAogCQkJaW50IG10aGQsIHVpbnQzMl90IGRhdGEpCiB7Ci0JY2hhbi0+ZmVuY2UubGFzdF9zZXF1ZW5jZV9pcnEgPSBkYXRhOwotCW5vdXZlYXVfZmVuY2VfaGFuZGxlcihjaGFuLT5kZXYsIGNoYW4tPmlkKTsKKwlhdG9taWNfc2V0KCZjaGFuLT5mZW5jZS5sYXN0X3NlcXVlbmNlX2lycSwgZGF0YSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfaW5zdG1lbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9pbnN0bWVtLmMKaW5kZXggYTNiOTU2My4uNDQwODIzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9pbnN0bWVtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9pbnN0bWVtLmMKQEAgLTQ5LDEwICs0OSw4IEBACiAJTlZfREVCVUcoZGV2LCAiUkFNSU4gc2l6ZTogJWRLaUJcbiIsIGRldl9wcml2LT5yYW1pbl9yc3ZkX3ZyYW0gPj4gMTApOwogCiAJLyogQ2xlYXIgYWxsIG9mIGl0LCBleGNlcHQgdGhlIEJJT1MgaW1hZ2UgdGhhdCdzIGluIHRoZSBmaXJzdCA2NEtpQiAqLwotCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5wcmVwYXJlX2FjY2VzcyhkZXYsIHRydWUpOwogCWZvciAoaSA9IDY0ICogMTAyNDsgaSA8IGRldl9wcml2LT5yYW1pbl9yc3ZkX3ZyYW07IGkgKz0gNCkKIAkJbnZfd2kzMihkZXYsIGksIDB4MDAwMDAwMDApOwotCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5maW5pc2hfYWNjZXNzKGRldik7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMDYsNyArMTA0LDcgQEAKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXVpbnQzMl90IG9mZnNldDsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0OwogCiAJbnYwNF9pbnN0bWVtX2RldGVybWluZV9hbW91bnQoZGV2KTsKIAludjA0X2luc3RtZW1fY29uZmlndXJlX2ZpeGVkX3RhYmxlcyhkZXYpOwpAQCAtMTI5LDE0ICsxMjcsMTQgQEAKIAkJCW9mZnNldCA9IDB4NDAwMDA7CiAJfQogCi0JcmV0ID0gbm91dmVhdV9tZW1faW5pdF9oZWFwKCZkZXZfcHJpdi0+cmFtaW5faGVhcCwKLQkJCQkgICAgb2Zmc2V0LCBkZXZfcHJpdi0+cmFtaW5fcnN2ZF92cmFtIC0gb2Zmc2V0KTsKKwlyZXQgPSBkcm1fbW1faW5pdCgmZGV2X3ByaXYtPnJhbWluX2hlYXAsIG9mZnNldCwKKwkJCSAgZGV2X3ByaXYtPnJhbWluX3JzdmRfdnJhbSAtIG9mZnNldCk7CiAJaWYgKHJldCkgewotCQlkZXZfcHJpdi0+cmFtaW5faGVhcCA9IE5VTEw7Ci0JCU5WX0VSUk9SKGRldiwgIkZhaWxlZCB0byBpbml0IFJBTUlOIGhlYXBcbiIpOworCQlOVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gaW5pdCBSQU1JTiBoZWFwOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiB2b2lkCkBAIC0xODYsMTIgKzE4NCw3IEBACiB9CiAKIHZvaWQKLW52MDRfaW5zdG1lbV9wcmVwYXJlX2FjY2VzcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBib29sIHdyaXRlKQotewotfQotCi12b2lkCi1udjA0X2luc3RtZW1fZmluaXNoX2FjY2VzcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQorbnYwNF9pbnN0bWVtX2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfbWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfbWMuYwppbmRleCA2MTdlZDFlLi4yYWY0M2ExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X21jLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9tYy5jCkBAIC0xMSw2ICsxMSwxMCBAQAogCSAqLwogCiAJbnZfd3IzMihkZXYsIE5WMDNfUE1DX0VOQUJMRSwgMHhGRkZGRkZGRik7CisKKwkvKiBEaXNhYmxlIFBST00gYWNjZXNzLiAqLworCW52X3dyMzIoZGV2LCBOVl9QQlVTX1BDSV9OVl8yMCwgTlZfUEJVU19QQ0lfTlZfMjBfUk9NX1NIQURPV19FTkFCTEVEKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X3R2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X3R2LmMKaW5kZXggYzRlMzQwNC4uOTRlMjk5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF90di5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfdHYuYwpAQCAtMzQsNjkgKzM0LDI2IEBACiAKICNpbmNsdWRlICJpMmMvY2g3MDA2LmgiCiAKLXN0YXRpYyBzdHJ1Y3QgewotCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBib2FyZF9pbmZvOwotCXN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyBmdW5jczsKLQlzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIGhmdW5jczsKLQl2b2lkICpwYXJhbXM7Ci0KLX0gbnYwNF90dl9lbmNvZGVyX2luZm9bXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gbnYwNF90dl9lbmNvZGVyX2luZm9bXSA9IHsKIAl7Ci0JCS5ib2FyZF9pbmZvID0geyBJMkNfQk9BUkRfSU5GTygiY2g3MDA2IiwgMHg3NSkgfSwKLQkJLnBhcmFtcyA9ICYoc3RydWN0IGNoNzAwNl9lbmNvZGVyX3BhcmFtcykgeworCQlJMkNfQk9BUkRfSU5GTygiY2g3MDA2IiwgMHg3NSksCisJCS5wbGF0Zm9ybV9kYXRhID0gJihzdHJ1Y3QgY2g3MDA2X2VuY29kZXJfcGFyYW1zKSB7CiAJCQlDSDcwMDZfRk9STUFUX1JHQjI0bTEySSwgQ0g3MDA2X0NMT0NLX01BU1RFUiwKIAkJCTAsIDAsIDAsCiAJCQlDSDcwMDZfU1lOQ19TTEFWRSwgQ0g3MDA2X1NZTkNfU0VQQVJBVEVELAogCQkJQ0g3MDA2X1BPVVRfM18zViwgQ0g3MDA2X0FDVElWRV9IU1lOQwotCQl9LAorCQl9CiAJfSwKKwl7IH0KIH07CiAKLXN0YXRpYyBib29sIHByb2JlX2kyY19hZGRyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHIpCi17Ci0Jc3RydWN0IGkyY19tc2cgbXNnID0gewotCQkuYWRkciA9IGFkZHIsCi0JCS5sZW4gPSAwLAotCX07Ci0KLQlyZXR1cm4gaTJjX3RyYW5zZmVyKGFkYXB0ZXIsICZtc2csIDEpID09IDE7Ci19Ci0KIGludCBudjA0X3R2X2lkZW50aWZ5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBpMmNfaW5kZXgpCiB7Ci0Jc3RydWN0IG5vdXZlYXVfaTJjX2NoYW4gKmkyYzsKLQlib29sIHdhc19sb2NrZWQ7Ci0JaW50IGksIHJldDsKLQotCU5WX1RSQUNFKGRldiwgIlByb2JpbmcgVFYgZW5jb2RlcnMgb24gSTJDIGJ1czogJWRcbiIsIGkyY19pbmRleCk7Ci0KLQlpMmMgPSBub3V2ZWF1X2kyY19maW5kKGRldiwgaTJjX2luZGV4KTsKLQlpZiAoIWkyYykKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQl3YXNfbG9ja2VkID0gTlZMb2NrVmdhQ3J0Y3MoZGV2LCBmYWxzZSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShudjA0X3R2X2VuY29kZXJfaW5mbyk7IGkrKykgewotCQlpZiAocHJvYmVfaTJjX2FkZHIoJmkyYy0+YWRhcHRlciwKLQkJCQkgICBudjA0X3R2X2VuY29kZXJfaW5mb1tpXS5ib2FyZF9pbmZvLmFkZHIpKSB7Ci0JCQlyZXQgPSBpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoaSA8IEFSUkFZX1NJWkUobnYwNF90dl9lbmNvZGVyX2luZm8pKSB7Ci0JCU5WX1RSQUNFKGRldiwgIkRldGVjdGVkIFRWIGVuY29kZXI6ICVzXG4iLAotCQkJIG52MDRfdHZfZW5jb2Rlcl9pbmZvW2ldLmJvYXJkX2luZm8udHlwZSk7Ci0KLQl9IGVsc2UgewotCQlOVl9UUkFDRShkZXYsICJObyBUViBlbmNvZGVycyBmb3VuZC5cbiIpOwotCQlpID0gLUVOT0RFVjsKLQl9Ci0KLQlOVkxvY2tWZ2FDcnRjcyhkZXYsIHdhc19sb2NrZWQpOwotCXJldHVybiBpOworCXJldHVybiBub3V2ZWF1X2kyY19pZGVudGlmeShkZXYsICJUViBlbmNvZGVyIiwKKwkJCQkgICAgbnYwNF90dl9lbmNvZGVyX2luZm8sIGkyY19pbmRleCk7CiB9CiAKKwogI2RlZmluZSBQTExTRUxfVFZfQ1JUQzFfTUFTSwkJCQlcCiAJKE5WX1BSQU1EQUNfUExMX0NPRUZGX1NFTEVDVF9UVl9WU0NMSzEJCVwKIAkgfCBOVl9QUkFNREFDX1BMTF9DT0VGRl9TRUxFQ1RfVFZfUENMSzEpCkBAIC0yMTQsMzAgKzE3MSwzMiBAQAogCiBzdGF0aWMgdm9pZCBudjA0X3R2X2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQogewotCXN0cnVjdCBub3V2ZWF1X2VuY29kZXIgKm52X2VuY29kZXIgPSBub3V2ZWF1X2VuY29kZXIoZW5jb2Rlcik7Ci0KIAl0b19lbmNvZGVyX3NsYXZlKGVuY29kZXIpLT5zbGF2ZV9mdW5jcy0+ZGVzdHJveShlbmNvZGVyKTsKIAogCWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7CiAKLQlrZnJlZShudl9lbmNvZGVyKTsKKwlrZnJlZShlbmNvZGVyLT5oZWxwZXJfcHJpdmF0ZSk7CisJa2ZyZWUobm91dmVhdV9lbmNvZGVyKGVuY29kZXIpKTsKIH0KIAotaW50IG52MDRfdHZfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkY2JfZW50cnkgKmVudHJ5KQorc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyBudjA0X3R2X2Z1bmNzID0geworCS5kZXN0cm95ID0gbnYwNF90dl9kZXN0cm95LAorfTsKKworaW50CitudjA0X3R2X2NyZWF0ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZGNiX2VudHJ5ICplbnRyeSkKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpudl9lbmNvZGVyOwogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDsKLQlzdHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3MgKmZ1bmNzID0gTlVMTDsKLQlzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzICpoZnVuY3MgPSBOVUxMOwotCXN0cnVjdCBkcm1fZW5jb2Rlcl9zbGF2ZV9mdW5jcyAqc2Z1bmNzID0gTlVMTDsKLQlpbnQgaTJjX2luZGV4ID0gZW50cnktPmkyY19pbmRleDsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqaGZ1bmNzOworCXN0cnVjdCBkcm1fZW5jb2Rlcl9zbGF2ZV9mdW5jcyAqc2Z1bmNzOworCXN0cnVjdCBub3V2ZWF1X2kyY19jaGFuICppMmMgPQorCQlub3V2ZWF1X2kyY19maW5kKGRldiwgZW50cnktPmkyY19pbmRleCk7CiAJaW50IHR5cGUsIHJldDsKLQlib29sIHdhc19sb2NrZWQ7CiAKIAkvKiBFbnN1cmUgdGhhdCB3ZSBjYW4gdGFsayB0byB0aGlzIGVuY29kZXIgKi8KLQl0eXBlID0gbnYwNF90dl9pZGVudGlmeShkZXYsIGkyY19pbmRleCk7CisJdHlwZSA9IG52MDRfdHZfaWRlbnRpZnkoZGV2LCBlbnRyeS0+aTJjX2luZGV4KTsKIAlpZiAodHlwZSA8IDApCiAJCXJldHVybiB0eXBlOwogCkBAIC0yNDYsNDEgKzIwNSwzMiBAQAogCWlmICghbnZfZW5jb2RlcikKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwloZnVuY3MgPSBremFsbG9jKHNpemVvZigqaGZ1bmNzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFoZnVuY3MpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsX2ZyZWU7CisJfQorCiAJLyogSW5pdGlhbGl6ZSB0aGUgY29tbW9uIG1lbWJlcnMgKi8KIAllbmNvZGVyID0gdG9fZHJtX2VuY29kZXIobnZfZW5jb2Rlcik7CiAKLQlmdW5jcyA9ICZudjA0X3R2X2VuY29kZXJfaW5mb1t0eXBlXS5mdW5jczsKLQloZnVuY3MgPSAmbnYwNF90dl9lbmNvZGVyX2luZm9bdHlwZV0uaGZ1bmNzOwotCi0JZHJtX2VuY29kZXJfaW5pdChkZXYsIGVuY29kZXIsIGZ1bmNzLCBEUk1fTU9ERV9FTkNPREVSX1RWREFDKTsKKwlkcm1fZW5jb2Rlcl9pbml0KGRldiwgZW5jb2RlciwgJm52MDRfdHZfZnVuY3MsIERSTV9NT0RFX0VOQ09ERVJfVFZEQUMpOwogCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoZW5jb2RlciwgaGZ1bmNzKTsKIAogCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gZW50cnktPmhlYWRzOwogCWVuY29kZXItPnBvc3NpYmxlX2Nsb25lcyA9IDA7Ci0KIAludl9lbmNvZGVyLT5kY2IgPSBlbnRyeTsKIAludl9lbmNvZGVyLT5vciA9IGZmcyhlbnRyeS0+b3IpIC0gMTsKIAogCS8qIFJ1biB0aGUgc2xhdmUtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gKi8KLQlhZGFwID0gJmRldl9wcml2LT52Ymlvcy5kY2IuaTJjW2kyY19pbmRleF0uY2hhbi0+YWRhcHRlcjsKLQotCXdhc19sb2NrZWQgPSBOVkxvY2tWZ2FDcnRjcyhkZXYsIGZhbHNlKTsKLQotCXJldCA9IGRybV9pMmNfZW5jb2Rlcl9pbml0KGVuY29kZXItPmRldiwgdG9fZW5jb2Rlcl9zbGF2ZShlbmNvZGVyKSwgYWRhcCwKLQkJCQkgICAmbnYwNF90dl9lbmNvZGVyX2luZm9bdHlwZV0uYm9hcmRfaW5mbyk7Ci0KLQlOVkxvY2tWZ2FDcnRjcyhkZXYsIHdhc19sb2NrZWQpOwotCisJcmV0ID0gZHJtX2kyY19lbmNvZGVyX2luaXQoZGV2LCB0b19lbmNvZGVyX3NsYXZlKGVuY29kZXIpLAorCQkJCSAgICZpMmMtPmFkYXB0ZXIsICZudjA0X3R2X2VuY29kZXJfaW5mb1t0eXBlXSk7CiAJaWYgKHJldCA8IDApCi0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsX2NsZWFudXA7CiAKIAkvKiBGaWxsIHRoZSBmdW5jdGlvbiBwb2ludGVycyAqLwogCXNmdW5jcyA9IHRvX2VuY29kZXJfc2xhdmUoZW5jb2RlciktPnNsYXZlX2Z1bmNzOwogCi0JKmZ1bmNzID0gKHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcykgewotCQkuZGVzdHJveSA9IG52MDRfdHZfZGVzdHJveSwKLQl9OwotCiAJKmhmdW5jcyA9IChzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzKSB7CiAJCS5kcG1zID0gbnYwNF90dl9kcG1zLAogCQkuc2F2ZSA9IHNmdW5jcy0+c2F2ZSwKQEAgLTI5MiwxNCArMjQyLDE3IEBACiAJCS5kZXRlY3QgPSBzZnVuY3MtPmRldGVjdCwKIAl9OwogCi0JLyogU2V0IHRoZSBzbGF2ZSBlbmNvZGVyIGNvbmZpZ3VyYXRpb24gKi8KLQlzZnVuY3MtPnNldF9jb25maWcoZW5jb2RlciwgbnYwNF90dl9lbmNvZGVyX2luZm9bdHlwZV0ucGFyYW1zKTsKKwkvKiBBdHRhY2ggaXQgdG8gdGhlIHNwZWNpZmllZCBjb25uZWN0b3IuICovCisJc2Z1bmNzLT5zZXRfY29uZmlnKGVuY29kZXIsIG52MDRfdHZfZW5jb2Rlcl9pbmZvW3R5cGVdLnBsYXRmb3JtX2RhdGEpOworCXNmdW5jcy0+Y3JlYXRlX3Jlc291cmNlcyhlbmNvZGVyLCBjb25uZWN0b3IpOworCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0b3IsIGVuY29kZXIpOwogCiAJcmV0dXJuIDA7CiAKLWZhaWw6CitmYWlsX2NsZWFudXA6CiAJZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKLQorCWtmcmVlKGhmdW5jcyk7CitmYWlsX2ZyZWU6CiAJa2ZyZWUobnZfZW5jb2Rlcik7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTBfZmlmby5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxMF9maWZvLmMKaW5kZXggN2FlYWJmMi4uN2E0MDY5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxMF9maWZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxMF9maWZvLmMKQEAgLTU1LDcgKzU1LDYgQEAKIAkvKiBGaWxsIGVudHJpZXMgdGhhdCBhcmUgc2VlbiBmaWxsZWQgaW4gZHVtcHMgb2YgbnZpZGlhIGRyaXZlciBqdXN0CiAJICogYWZ0ZXIgY2hhbm5lbCdzIGlzIHB1dCBpbnRvIERNQSBtb2RlCiAJICovCi0JZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByZXBhcmVfYWNjZXNzKGRldiwgdHJ1ZSk7CiAJbnZfd2kzMihkZXYsIGZjICsgIDAsIGNoYW4tPnB1c2hidWZfYmFzZSk7CiAJbnZfd2kzMihkZXYsIGZjICsgIDQsIGNoYW4tPnB1c2hidWZfYmFzZSk7CiAJbnZfd2kzMihkZXYsIGZjICsgMTIsIGNoYW4tPnB1c2hidWYtPmluc3RhbmNlID4+IDQpOwpAQCAtNjYsNyArNjUsNiBAQAogCQkJICAgICAgTlZfUEZJRk9fQ0FDSEUxX0JJR19FTkRJQU4gfAogI2VuZGlmCiAJCQkgICAgICAwKTsKLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOwogCiAJLyogZW5hYmxlIHRoZSBmaWZvIGRtYSBvcGVyYXRpb24gKi8KIAludl93cjMyKGRldiwgTlYwNF9QRklGT19NT0RFLApAQCAtOTEsOCArODksNiBAQAogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdWludDMyX3QgZmMgPSBOVjEwX1JBTUZDKGNoaWQpLCB0bXA7CiAKLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0ucHJlcGFyZV9hY2Nlc3MoZGV2LCBmYWxzZSk7Ci0KIAludl93cjMyKGRldiwgTlYwNF9QRklGT19DQUNIRTFfRE1BX1BVVCwgbnZfcmkzMihkZXYsIGZjICsgMCkpOwogCW52X3dyMzIoZGV2LCBOVjA0X1BGSUZPX0NBQ0hFMV9ETUFfR0VULCBudl9yaTMyKGRldiwgZmMgKyA0KSk7CiAJbnZfd3IzMihkZXYsIE5WMTBfUEZJRk9fQ0FDSEUxX1JFRl9DTlQsIG52X3JpMzIoZGV2LCBmYyArIDgpKTsKQEAgLTExNyw4ICsxMTMsNiBAQAogCW52X3dyMzIoZGV2LCBOVjEwX1BGSUZPX0NBQ0hFMV9ETUFfU1VCUk9VVElORSwgbnZfcmkzMihkZXYsIGZjICsgNDgpKTsKIAogb3V0OgotCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5maW5pc2hfYWNjZXNzKGRldik7Ci0KIAludl93cjMyKGRldiwgTlYwM19QRklGT19DQUNIRTFfR0VULCAwKTsKIAludl93cjMyKGRldiwgTlYwM19QRklGT19DQUNIRTFfUFVULCAwKTsKIH0KQEAgLTE1NSw4ICsxNDksNiBAQAogCQlyZXR1cm4gMDsKIAlmYyA9IE5WMTBfUkFNRkMoY2hpZCk7CiAKLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0ucHJlcGFyZV9hY2Nlc3MoZGV2LCB0cnVlKTsKLQogCW52X3dpMzIoZGV2LCBmYyArICAwLCBudl9yZDMyKGRldiwgTlYwNF9QRklGT19DQUNIRTFfRE1BX1BVVCkpOwogCW52X3dpMzIoZGV2LCBmYyArICA0LCBudl9yZDMyKGRldiwgTlYwNF9QRklGT19DQUNIRTFfRE1BX0dFVCkpOwogCW52X3dpMzIoZGV2LCBmYyArICA4LCBudl9yZDMyKGRldiwgTlYxMF9QRklGT19DQUNIRTFfUkVGX0NOVCkpOwpAQCAtMTc5LDggKzE3MSw2IEBACiAJbnZfd2kzMihkZXYsIGZjICsgNDgsIG52X3JkMzIoZGV2LCBOVjA0X1BGSUZPX0NBQ0hFMV9ETUFfR0VUKSk7CiAKIG91dDoKLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOwotCiAJbnYxMF9maWZvX2RvX2xvYWRfY29udGV4dChkZXYsIHBmaWZvLT5jaGFubmVscyAtIDEpOwogCW52X3dyMzIoZGV2LCBOVjAzX1BGSUZPX0NBQ0hFMV9QVVNIMSwgcGZpZm8tPmNoYW5uZWxzIC0gMSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjEwX2dwaW8uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTBfZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwN2ZjMjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjEwX2dwaW8uYwpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEZyYW5jaXNjbyBKZXJlei4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCisgKiBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIoUykgQU5EL09SIElUUyBTVVBQTElFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAibm91dmVhdV9kcnYuaCIKKyNpbmNsdWRlICJub3V2ZWF1X2h3LmgiCisKK3N0YXRpYyBib29sCitnZXRfZ3Bpb19sb2NhdGlvbihzdHJ1Y3QgZGNiX2dwaW9fZW50cnkgKmVudCwgdWludDMyX3QgKnJlZywgdWludDMyX3QgKnNoaWZ0LAorCQkgIHVpbnQzMl90ICptYXNrKQoreworCWlmIChlbnQtPmxpbmUgPCAyKSB7CisJCSpyZWcgPSBOVl9QQ1JUQ19HUElPOworCQkqc2hpZnQgPSBlbnQtPmxpbmUgKiAxNjsKKwkJKm1hc2sgPSAweDExOworCisJfSBlbHNlIGlmIChlbnQtPmxpbmUgPCAxMCkgeworCQkqcmVnID0gTlZfUENSVENfR1BJT19FWFQ7CisJCSpzaGlmdCA9IChlbnQtPmxpbmUgLSAyKSAqIDQ7CisJCSptYXNrID0gMHgzOworCisJfSBlbHNlIGlmIChlbnQtPmxpbmUgPCAxNCkgeworCQkqcmVnID0gTlZfUENSVENfODUwOworCQkqc2hpZnQgPSAoZW50LT5saW5lIC0gMTApICogNDsKKwkJKm1hc2sgPSAweDM7CisKKwl9IGVsc2UgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK2ludAorbnYxMF9ncGlvX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIGRjYl9ncGlvX3RhZyB0YWcpCit7CisJc3RydWN0IGRjYl9ncGlvX2VudHJ5ICplbnQgPSBub3V2ZWF1X2Jpb3NfZ3Bpb19lbnRyeShkZXYsIHRhZyk7CisJdWludDMyX3QgcmVnLCBzaGlmdCwgbWFzaywgdmFsdWU7CisKKwlpZiAoIWVudCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIWdldF9ncGlvX2xvY2F0aW9uKGVudCwgJnJlZywgJnNoaWZ0LCAmbWFzaykpCisJCXJldHVybiAtRU5PREVWOworCisJdmFsdWUgPSBOVlJlYWRDUlRDKGRldiwgMCwgcmVnKSA+PiBzaGlmdDsKKworCXJldHVybiAoZW50LT5pbnZlcnQgPyAxIDogMCkgXiAodmFsdWUgJiAxKTsKK30KKworaW50CitudjEwX2dwaW9fc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGVudW0gZGNiX2dwaW9fdGFnIHRhZywgaW50IHN0YXRlKQoreworCXN0cnVjdCBkY2JfZ3Bpb19lbnRyeSAqZW50ID0gbm91dmVhdV9iaW9zX2dwaW9fZW50cnkoZGV2LCB0YWcpOworCXVpbnQzMl90IHJlZywgc2hpZnQsIG1hc2ssIHZhbHVlOworCisJaWYgKCFlbnQpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFnZXRfZ3Bpb19sb2NhdGlvbihlbnQsICZyZWcsICZzaGlmdCwgJm1hc2spKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXZhbHVlID0gKChlbnQtPmludmVydCA/IDEgOiAwKSBeIChzdGF0ZSA/IDEgOiAwKSkgPDwgc2hpZnQ7CisJbWFzayA9IH4obWFzayA8PCBzaGlmdCk7CisKKwlOVldyaXRlQ1JUQyhkZXYsIDAsIHJlZywgdmFsdWUgfCAoTlZSZWFkQ1JUQyhkZXYsIDAsIHJlZykgJiBtYXNrKSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTdfZ3Bpby5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxN19ncGlvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlNThjMzMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxN19ncGlvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEZyYW5jaXNjbyBKZXJlei4KLSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCi0gKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKLSAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKLSAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKLSAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwotICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCi0gKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKLSAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCi0gKiBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi0gKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KLSAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIoUykgQU5EL09SIElUUyBTVVBQTElFUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KLSAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgotICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKgotICovCi0KLSNpbmNsdWRlICJkcm1QLmgiCi0jaW5jbHVkZSAibm91dmVhdV9kcnYuaCIKLSNpbmNsdWRlICJub3V2ZWF1X2h3LmgiCi0KLXN0YXRpYyBib29sCi1nZXRfZ3Bpb19sb2NhdGlvbihzdHJ1Y3QgZGNiX2dwaW9fZW50cnkgKmVudCwgdWludDMyX3QgKnJlZywgdWludDMyX3QgKnNoaWZ0LAotCQkgIHVpbnQzMl90ICptYXNrKQotewotCWlmIChlbnQtPmxpbmUgPCAyKSB7Ci0JCSpyZWcgPSBOVl9QQ1JUQ19HUElPOwotCQkqc2hpZnQgPSBlbnQtPmxpbmUgKiAxNjsKLQkJKm1hc2sgPSAweDExOwotCi0JfSBlbHNlIGlmIChlbnQtPmxpbmUgPCAxMCkgewotCQkqcmVnID0gTlZfUENSVENfR1BJT19FWFQ7Ci0JCSpzaGlmdCA9IChlbnQtPmxpbmUgLSAyKSAqIDQ7Ci0JCSptYXNrID0gMHgzOwotCi0JfSBlbHNlIGlmIChlbnQtPmxpbmUgPCAxNCkgewotCQkqcmVnID0gTlZfUENSVENfODUwOwotCQkqc2hpZnQgPSAoZW50LT5saW5lIC0gMTApICogNDsKLQkJKm1hc2sgPSAweDM7Ci0KLQl9IGVsc2UgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLWludAotbnYxN19ncGlvX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIGRjYl9ncGlvX3RhZyB0YWcpCi17Ci0Jc3RydWN0IGRjYl9ncGlvX2VudHJ5ICplbnQgPSBub3V2ZWF1X2Jpb3NfZ3Bpb19lbnRyeShkZXYsIHRhZyk7Ci0JdWludDMyX3QgcmVnLCBzaGlmdCwgbWFzaywgdmFsdWU7Ci0KLQlpZiAoIWVudCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoIWdldF9ncGlvX2xvY2F0aW9uKGVudCwgJnJlZywgJnNoaWZ0LCAmbWFzaykpCi0JCXJldHVybiAtRU5PREVWOwotCi0JdmFsdWUgPSBOVlJlYWRDUlRDKGRldiwgMCwgcmVnKSA+PiBzaGlmdDsKLQotCXJldHVybiAoZW50LT5pbnZlcnQgPyAxIDogMCkgXiAodmFsdWUgJiAxKTsKLX0KLQotaW50Ci1udjE3X2dwaW9fc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGVudW0gZGNiX2dwaW9fdGFnIHRhZywgaW50IHN0YXRlKQotewotCXN0cnVjdCBkY2JfZ3Bpb19lbnRyeSAqZW50ID0gbm91dmVhdV9iaW9zX2dwaW9fZW50cnkoZGV2LCB0YWcpOwotCXVpbnQzMl90IHJlZywgc2hpZnQsIG1hc2ssIHZhbHVlOwotCi0JaWYgKCFlbnQpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKCFnZXRfZ3Bpb19sb2NhdGlvbihlbnQsICZyZWcsICZzaGlmdCwgJm1hc2spKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXZhbHVlID0gKChlbnQtPmludmVydCA/IDEgOiAwKSBeIChzdGF0ZSA/IDEgOiAwKSkgPDwgc2hpZnQ7Ci0JbWFzayA9IH4obWFzayA8PCBzaGlmdCk7Ci0KLQlOVldyaXRlQ1JUQyhkZXYsIDAsIHJlZywgdmFsdWUgfCAoTlZSZWFkQ1JUQyhkZXYsIDAsIHJlZykgJiBtYXNrKSk7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTdfdHYuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTdfdHYuYwppbmRleCA3NGM4ODAzLi40NGZlZmIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjE3X3R2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxN190di5jCkBAIC0zNyw2ICszNyw3IEBACiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X2dwaW9fZW5naW5lICpncGlvID0gJmRldl9wcml2LT5lbmdpbmUuZ3BpbzsKIAl1aW50MzJfdCB0ZXN0dmFsLCByZWdvZmZzZXQgPSBudjA0X2RhY19vdXRwdXRfb2Zmc2V0KGVuY29kZXIpOwogCXVpbnQzMl90IGdwaW8wLCBncGlvMSwgZnBfaHRvdGFsLCBmcF9oc3luY19zdGFydCwgZnBfaHN5bmNfZW5kLAogCQlmcF9jb250cm9sLCB0ZXN0X2N0cmwsIGRhY2NsaywgY3R2XzE0LCBjdHZfMWMsIGN0dl82YzsKQEAgLTUyLDggKzUzLDggQEAKIAloZWFkID0gKGRhY2NsayAmIDB4MTAwKSA+PiA4OwogCiAJLyogU2F2ZSB0aGUgcHJldmlvdXMgc3RhdGUuICovCi0JZ3BpbzEgPSBudjE3X2dwaW9fZ2V0KGRldiwgRENCX0dQSU9fVFZEQUMxKTsKLQlncGlvMCA9IG52MTdfZ3Bpb19nZXQoZGV2LCBEQ0JfR1BJT19UVkRBQzApOworCWdwaW8xID0gZ3Bpby0+Z2V0KGRldiwgRENCX0dQSU9fVFZEQUMxKTsKKwlncGlvMCA9IGdwaW8tPmdldChkZXYsIERDQl9HUElPX1RWREFDMCk7CiAJZnBfaHRvdGFsID0gTlZSZWFkUkFNREFDKGRldiwgaGVhZCwgTlZfUFJBTURBQ19GUF9IVE9UQUwpOwogCWZwX2hzeW5jX3N0YXJ0ID0gTlZSZWFkUkFNREFDKGRldiwgaGVhZCwgTlZfUFJBTURBQ19GUF9IU1lOQ19TVEFSVCk7CiAJZnBfaHN5bmNfZW5kID0gTlZSZWFkUkFNREFDKGRldiwgaGVhZCwgTlZfUFJBTURBQ19GUF9IU1lOQ19FTkQpOwpAQCAtNjQsOCArNjUsOCBAQAogCWN0dl82YyA9IE5WUmVhZFJBTURBQyhkZXYsIGhlYWQsIDB4NjgwYzZjKTsKIAogCS8qIFByZXBhcmUgdGhlIERBQyBmb3IgbG9hZCBkZXRlY3Rpb24uICAqLwotCW52MTdfZ3Bpb19zZXQoZGV2LCBEQ0JfR1BJT19UVkRBQzEsIHRydWUpOwotCW52MTdfZ3Bpb19zZXQoZGV2LCBEQ0JfR1BJT19UVkRBQzAsIHRydWUpOworCWdwaW8tPnNldChkZXYsIERDQl9HUElPX1RWREFDMSwgdHJ1ZSk7CisJZ3Bpby0+c2V0KGRldiwgRENCX0dQSU9fVFZEQUMwLCB0cnVlKTsKIAogCU5WV3JpdGVSQU1EQUMoZGV2LCBoZWFkLCBOVl9QUkFNREFDX0ZQX0hUT1RBTCwgMTM0Myk7CiAJTlZXcml0ZVJBTURBQyhkZXYsIGhlYWQsIE5WX1BSQU1EQUNfRlBfSFNZTkNfU1RBUlQsIDEwNDcpOwpAQCAtMTEwLDEyICsxMTEsMjcgQEAKIAlOVldyaXRlUkFNREFDKGRldiwgaGVhZCwgTlZfUFJBTURBQ19GUF9IU1lOQ19FTkQsIGZwX2hzeW5jX2VuZCk7CiAJTlZXcml0ZVJBTURBQyhkZXYsIGhlYWQsIE5WX1BSQU1EQUNfRlBfSFNZTkNfU1RBUlQsIGZwX2hzeW5jX3N0YXJ0KTsKIAlOVldyaXRlUkFNREFDKGRldiwgaGVhZCwgTlZfUFJBTURBQ19GUF9IVE9UQUwsIGZwX2h0b3RhbCk7Ci0JbnYxN19ncGlvX3NldChkZXYsIERDQl9HUElPX1RWREFDMSwgZ3BpbzEpOwotCW52MTdfZ3Bpb19zZXQoZGV2LCBEQ0JfR1BJT19UVkRBQzAsIGdwaW8wKTsKKwlncGlvLT5zZXQoZGV2LCBEQ0JfR1BJT19UVkRBQzEsIGdwaW8xKTsKKwlncGlvLT5zZXQoZGV2LCBEQ0JfR1BJT19UVkRBQzAsIGdwaW8wKTsKIAogCXJldHVybiBzYW1wbGU7CiB9CiAKK3N0YXRpYyBib29sCitnZXRfdHZfZGV0ZWN0X3F1aXJrcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCAqcGluX21hc2spCit7CisJLyogWm90YWMgRlg1MjAwICovCisJaWYgKGRldi0+cGRldi0+ZGV2aWNlID09IDB4MDMyMiAmJgorCSAgICBkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxOWRhICYmCisJICAgIChkZXYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHgxMDM1IHx8CisJICAgICBkZXYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHgyMDM1KSkgeworCQkqcGluX21hc2sgPSAweGM7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKIG52MTdfdHZfZGV0ZWN0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlciwgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIHsKQEAgLTEyNCwxMiArMTQwLDIwIEBACiAJc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqY29uZiA9ICZkZXYtPm1vZGVfY29uZmlnOwogCXN0cnVjdCBudjE3X3R2X2VuY29kZXIgKnR2X2VuYyA9IHRvX3R2X2VuYyhlbmNvZGVyKTsKIAlzdHJ1Y3QgZGNiX2VudHJ5ICpkY2IgPSB0dl9lbmMtPmJhc2UuZGNiOworCWJvb2wgcmVsaWFibGUgPSBnZXRfdHZfZGV0ZWN0X3F1aXJrcyhkZXYsICZ0dl9lbmMtPnBpbl9tYXNrKTsKIAotCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDQyIHx8Ci0JICAgIGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDMpCi0JCXR2X2VuYy0+cGluX21hc2sgPSBudjQyX3R2X3NhbXBsZV9sb2FkKGVuY29kZXIpID4+IDI4ICYgMHhlOwotCWVsc2UKLQkJdHZfZW5jLT5waW5fbWFzayA9IG52MTdfZGFjX3NhbXBsZV9sb2FkKGVuY29kZXIpID4+IDI4ICYgMHhlOworCWlmIChudjA0X2RhY19pbl91c2UoZW5jb2RlcikpCisJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKworCWlmIChyZWxpYWJsZSkgeworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MiB8fAorCQkgICAgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MykKKwkJCXR2X2VuYy0+cGluX21hc2sgPQorCQkJCW52NDJfdHZfc2FtcGxlX2xvYWQoZW5jb2RlcikgPj4gMjggJiAweGU7CisJCWVsc2UKKwkJCXR2X2VuYy0+cGluX21hc2sgPQorCQkJCW52MTdfZGFjX3NhbXBsZV9sb2FkKGVuY29kZXIpID4+IDI4ICYgMHhlOworCX0KIAogCXN3aXRjaCAodHZfZW5jLT5waW5fbWFzaykgewogCWNhc2UgMHgyOgpAQCAtMTU0LDcgKzE3OCw5IEBACiAJCQkJCSBjb25mLT50dl9zdWJjb25uZWN0b3JfcHJvcGVydHksCiAJCQkJCSB0dl9lbmMtPnN1YmNvbm5lY3Rvcik7CiAKLQlpZiAodHZfZW5jLT5zdWJjb25uZWN0b3IpIHsKKwlpZiAoIXJlbGlhYmxlKSB7CisJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX3Vua25vd247CisJfSBlbHNlIGlmICh0dl9lbmMtPnN1YmNvbm5lY3RvcikgewogCQlOVl9JTkZPKGRldiwgIkxvYWQgZGV0ZWN0ZWQgb24gb3V0cHV0ICVjXG4iLAogCQkJJ0AnICsgZmZzKGRjYi0+b3IpKTsKIAkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwpAQCAtMjk2LDYgKzMyMiw5IEBACiB7CiAJc3RydWN0IG52MTdfdHZfbm9ybV9wYXJhbXMgKnR2X25vcm0gPSBnZXRfdHZfbm9ybShlbmNvZGVyKTsKIAorCWlmIChudjA0X2RhY19pbl91c2UoZW5jb2RlcikpCisJCXJldHVybiBmYWxzZTsKKwogCWlmICh0dl9ub3JtLT5raW5kID09IENUVl9FTkNfTU9ERSkKIAkJYWRqdXN0ZWRfbW9kZS0+Y2xvY2sgPSB0dl9ub3JtLT5jdHZfZW5jX21vZGUubW9kZS5jbG9jazsKIAllbHNlCkBAIC0zMDcsNiArMzM2LDggQEAKIHN0YXRpYyB2b2lkICBudjE3X3R2X2RwbXMoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBpbnQgbW9kZSkKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfZ3Bpb19lbmdpbmUgKmdwaW8gPSAmZGV2X3ByaXYtPmVuZ2luZS5ncGlvOwogCXN0cnVjdCBudjE3X3R2X3N0YXRlICpyZWdzID0gJnRvX3R2X2VuYyhlbmNvZGVyKS0+c3RhdGU7CiAJc3RydWN0IG52MTdfdHZfbm9ybV9wYXJhbXMgKnR2X25vcm0gPSBnZXRfdHZfbm9ybShlbmNvZGVyKTsKIApAQCAtMzMxLDggKzM2Miw4IEBACiAKIAludl9sb2FkX3B0dihkZXYsIHJlZ3MsIDIwMCk7CiAKLQludjE3X2dwaW9fc2V0KGRldiwgRENCX0dQSU9fVFZEQUMxLCBtb2RlID09IERSTV9NT0RFX0RQTVNfT04pOwotCW52MTdfZ3Bpb19zZXQoZGV2LCBEQ0JfR1BJT19UVkRBQzAsIG1vZGUgPT0gRFJNX01PREVfRFBNU19PTik7CisJZ3Bpby0+c2V0KGRldiwgRENCX0dQSU9fVFZEQUMxLCBtb2RlID09IERSTV9NT0RFX0RQTVNfT04pOworCWdwaW8tPnNldChkZXYsIERDQl9HUElPX1RWREFDMCwgbW9kZSA9PSBEUk1fTU9ERV9EUE1TX09OKTsKIAogCW52MDRfZGFjX3VwZGF0ZV9kYWNjbGsoZW5jb2RlciwgbW9kZSA9PSBEUk1fTU9ERV9EUE1TX09OKTsKIH0KQEAgLTc0NCw4ICs3NzUsMTAgQEAKIAkuZGVzdHJveSA9IG52MTdfdHZfZGVzdHJveSwKIH07CiAKLWludCBudjE3X3R2X2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZGNiX2VudHJ5ICplbnRyeSkKK2ludAorbnYxN190dl9jcmVhdGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGRjYl9lbnRyeSAqZW50cnkpCiB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OwogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKIAlzdHJ1Y3QgbnYxN190dl9lbmNvZGVyICp0dl9lbmMgPSBOVUxMOwogCkBAIC03NzQsNSArODA3LDcgQEAKIAllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IGVudHJ5LT5oZWFkczsKIAllbmNvZGVyLT5wb3NzaWJsZV9jbG9uZXMgPSAwOwogCisJbnYxN190dl9jcmVhdGVfcmVzb3VyY2VzKGVuY29kZXIsIGNvbm5lY3Rvcik7CisJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKGNvbm5lY3RvciwgZW5jb2Rlcik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjIwX2dyYXBoLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjIwX2dyYXBoLmMKaW5kZXggZDZmYzBhOC4uMTdmMzA5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYyMF9ncmFwaC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MjBfZ3JhcGguYwpAQCAtMzcwLDY4ICszNzAsNTQgQEAKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OwogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfcGdyYXBoX2VuZ2luZSAqcGdyYXBoID0gJmRldl9wcml2LT5lbmdpbmUuZ3JhcGg7CiAJdm9pZCAoKmN0eF9pbml0KShzdHJ1Y3QgZHJtX2RldmljZSAqLCBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKik7Ci0JdW5zaWduZWQgaW50IGN0eF9zaXplOwogCXVuc2lnbmVkIGludCBpZG9mZnMgPSAweDI4LzQ7CiAJaW50IHJldDsKIAogCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKIAljYXNlIDB4MjA6Ci0JCWN0eF9zaXplID0gTlYyMF9HUkNUWF9TSVpFOwogCQljdHhfaW5pdCA9IG52MjBfZ3JhcGhfY29udGV4dF9pbml0OwogCQlpZG9mZnMgPSAwOwogCQlicmVhazsKIAljYXNlIDB4MjU6CiAJY2FzZSAweDI4OgotCQljdHhfc2l6ZSA9IE5WMjVfR1JDVFhfU0laRTsKIAkJY3R4X2luaXQgPSBudjI1X2dyYXBoX2NvbnRleHRfaW5pdDsKIAkJYnJlYWs7CiAJY2FzZSAweDJhOgotCQljdHhfc2l6ZSA9IE5WMkFfR1JDVFhfU0laRTsKIAkJY3R4X2luaXQgPSBudjJhX2dyYXBoX2NvbnRleHRfaW5pdDsKIAkJaWRvZmZzID0gMDsKIAkJYnJlYWs7CiAJY2FzZSAweDMwOgogCWNhc2UgMHgzMToKLQkJY3R4X3NpemUgPSBOVjMwXzMxX0dSQ1RYX1NJWkU7CiAJCWN0eF9pbml0ID0gbnYzMF8zMV9ncmFwaF9jb250ZXh0X2luaXQ7CiAJCWJyZWFrOwogCWNhc2UgMHgzNDoKLQkJY3R4X3NpemUgPSBOVjM0X0dSQ1RYX1NJWkU7CiAJCWN0eF9pbml0ID0gbnYzNF9ncmFwaF9jb250ZXh0X2luaXQ7CiAJCWJyZWFrOwogCWNhc2UgMHgzNToKIAljYXNlIDB4MzY6Ci0JCWN0eF9zaXplID0gTlYzNV8zNl9HUkNUWF9TSVpFOwogCQljdHhfaW5pdCA9IG52MzVfMzZfZ3JhcGhfY29udGV4dF9pbml0OwogCQlicmVhazsKIAlkZWZhdWx0OgotCQljdHhfc2l6ZSA9IDA7Ci0JCWN0eF9pbml0ID0gbnYzNV8zNl9ncmFwaF9jb250ZXh0X2luaXQ7Ci0JCU5WX0VSUk9SKGRldiwgIlBsZWFzZSBjb250YWN0IHRoZSBkZXZzIGlmIHlvdSB3YW50IHlvdXIgTlYleCIKLQkJCSAgICAgICIgY2FyZCB0byB3b3JrXG4iLCBkZXZfcHJpdi0+Y2hpcHNldCk7Ci0JCXJldHVybiAtRU5PU1lTOwotCQlicmVhazsKKwkJQlVHX09OKDEpOwogCX0KIAotCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ld19yZWYoZGV2LCBjaGFuLCBOVUxMLCAwLCBjdHhfc2l6ZSwgMTYsCi0JCQkJCSAgTlZPQkpfRkxBR19aRVJPX0FMTE9DLAotCQkJCQkgICZjaGFuLT5yYW1pbl9ncmN0eCk7CisJcmV0ID0gbm91dmVhdV9ncHVvYmpfbmV3X3JlZihkZXYsIGNoYW4sIE5VTEwsIDAsIHBncmFwaC0+Z3JjdHhfc2l6ZSwKKwkJCQkgICAgIDE2LCBOVk9CSl9GTEFHX1pFUk9fQUxMT0MsCisJCQkJICAgICAmY2hhbi0+cmFtaW5fZ3JjdHgpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKIAkvKiBJbml0aWFsaXNlIGRlZmF1bHQgY29udGV4dCB2YWx1ZXMgKi8KLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0ucHJlcGFyZV9hY2Nlc3MoZGV2LCB0cnVlKTsKIAljdHhfaW5pdChkZXYsIGNoYW4tPnJhbWluX2dyY3R4LT5ncHVvYmopOwogCiAJLyogbnYyMDogbnZfd28zMihkZXYsIGNoYW4tPnJhbWluX2dyY3R4LT5ncHVvYmosIDEwLCBjaGFuLT5pZDw8MjQpOyAqLwogCW52X3dvMzIoZGV2LCBjaGFuLT5yYW1pbl9ncmN0eC0+Z3B1b2JqLCBpZG9mZnMsCiAJCQkJCShjaGFuLT5pZCA8PCAyNCkgfCAweDEpOyAvKiBDVFhfVVNFUiAqLwogCi0JbnZfd28zMihkZXYsIGRldl9wcml2LT5jdHhfdGFibGUtPmdwdW9iaiwgY2hhbi0+aWQsCi0JCQljaGFuLT5yYW1pbl9ncmN0eC0+aW5zdGFuY2UgPj4gNCk7Ci0KLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOworCW52X3dvMzIoZGV2LCBwZ3JhcGgtPmN0eF90YWJsZS0+Z3B1b2JqLCBjaGFuLT5pZCwKKwkJICAgICBjaGFuLT5yYW1pbl9ncmN0eC0+aW5zdGFuY2UgPj4gNCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ0MCwxMyArNDI2LDEyIEBACiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOwogCiAJaWYgKGNoYW4tPnJhbWluX2dyY3R4KQogCQlub3V2ZWF1X2dwdW9ial9yZWZfZGVsKGRldiwgJmNoYW4tPnJhbWluX2dyY3R4KTsKIAotCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5wcmVwYXJlX2FjY2VzcyhkZXYsIHRydWUpOwotCW52X3dvMzIoZGV2LCBkZXZfcHJpdi0+Y3R4X3RhYmxlLT5ncHVvYmosIGNoYW4tPmlkLCAwKTsKLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOworCW52X3dvMzIoZGV2LCBwZ3JhcGgtPmN0eF90YWJsZS0+Z3B1b2JqLCBjaGFuLT5pZCwgMCk7CiB9CiAKIGludApAQCAtNTM4LDI5ICs1MjMsNDQgQEAKIGludAogbnYyMF9ncmFwaF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0KLQkJKHN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICopZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOwogCXVpbnQzMl90IHRtcCwgdnJhbXN6OwogCWludCByZXQsIGk7CiAKKwlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7CisJY2FzZSAweDIwOgorCQlwZ3JhcGgtPmdyY3R4X3NpemUgPSBOVjIwX0dSQ1RYX1NJWkU7CisJCWJyZWFrOworCWNhc2UgMHgyNToKKwljYXNlIDB4Mjg6CisJCXBncmFwaC0+Z3JjdHhfc2l6ZSA9IE5WMjVfR1JDVFhfU0laRTsKKwkJYnJlYWs7CisJY2FzZSAweDJhOgorCQlwZ3JhcGgtPmdyY3R4X3NpemUgPSBOVjJBX0dSQ1RYX1NJWkU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCU5WX0VSUk9SKGRldiwgInVua25vd24gY2hpcHNldCwgZGlzYWJsaW5nIGFjY2VsZXJhdGlvblxuIik7CisJCXBncmFwaC0+YWNjZWxfYmxvY2tlZCA9IHRydWU7CisJCXJldHVybiAwOworCX0KKwogCW52X3dyMzIoZGV2LCBOVjAzX1BNQ19FTkFCTEUsCiAJCW52X3JkMzIoZGV2LCBOVjAzX1BNQ19FTkFCTEUpICYgfk5WX1BNQ19FTkFCTEVfUEdSQVBIKTsKIAludl93cjMyKGRldiwgTlYwM19QTUNfRU5BQkxFLAogCQludl9yZDMyKGRldiwgTlYwM19QTUNfRU5BQkxFKSB8ICBOVl9QTUNfRU5BQkxFX1BHUkFQSCk7CiAKLQlpZiAoIWRldl9wcml2LT5jdHhfdGFibGUpIHsKKwlpZiAoIXBncmFwaC0+Y3R4X3RhYmxlKSB7CiAJCS8qIENyZWF0ZSBDb250ZXh0IFBvaW50ZXIgVGFibGUgKi8KLQkJZGV2X3ByaXYtPmN0eF90YWJsZV9zaXplID0gMzIgKiA0OwotCQlyZXQgPSBub3V2ZWF1X2dwdW9ial9uZXdfcmVmKGRldiwgTlVMTCwgTlVMTCwgMCwKLQkJCQkJCSAgZGV2X3ByaXYtPmN0eF90YWJsZV9zaXplLCAxNiwKKwkJcmV0ID0gbm91dmVhdV9ncHVvYmpfbmV3X3JlZihkZXYsIE5VTEwsIE5VTEwsIDAsIDMyICogNCwgMTYsCiAJCQkJCQkgIE5WT0JKX0ZMQUdfWkVST19BTExPQywKLQkJCQkJCSAgJmRldl9wcml2LT5jdHhfdGFibGUpOworCQkJCQkJICAmcGdyYXBoLT5jdHhfdGFibGUpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAl9CiAKIAludl93cjMyKGRldiwgTlYyMF9QR1JBUEhfQ0hBTk5FTF9DVFhfVEFCTEUsCi0JCSBkZXZfcHJpdi0+Y3R4X3RhYmxlLT5pbnN0YW5jZSA+PiA0KTsKKwkJICAgICBwZ3JhcGgtPmN0eF90YWJsZS0+aW5zdGFuY2UgPj4gNCk7CiAKIAludjIwX2dyYXBoX3JkaShkZXYpOwogCkBAIC02MTYsNyArNjE2LDcgQEAKIAludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfU1VSRkFDRSwgdG1wKTsKIAogCS8qIGJlZ2luIFJBTSBjb25maWcgKi8KLQl2cmFtc3ogPSBkcm1fZ2V0X3Jlc291cmNlX2xlbihkZXYsIDApIC0gMTsKKwl2cmFtc3ogPSBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgMCkgLSAxOwogCW52X3dyMzIoZGV2LCAweDQwMDlBNCwgbnZfcmQzMihkZXYsIE5WMDRfUEZCX0NGRzApKTsKIAludl93cjMyKGRldiwgMHg0MDA5QTgsIG52X3JkMzIoZGV2LCBOVjA0X1BGQl9DRkcxKSk7CiAJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1JESV9JTkRFWCwgMHgwMEVBMDAwMCk7CkBAIC02NDQsMzQgKzY0NCw1MiBAQAogbnYyMF9ncmFwaF90YWtlZG93bihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfcGdyYXBoX2VuZ2luZSAqcGdyYXBoID0gJmRldl9wcml2LT5lbmdpbmUuZ3JhcGg7CiAKLQlub3V2ZWF1X2dwdW9ial9yZWZfZGVsKGRldiwgJmRldl9wcml2LT5jdHhfdGFibGUpOworCW5vdXZlYXVfZ3B1b2JqX3JlZl9kZWwoZGV2LCAmcGdyYXBoLT5jdHhfdGFibGUpOwogfQogCiBpbnQKIG52MzBfZ3JhcGhfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfcGdyYXBoX2VuZ2luZSAqcGdyYXBoID0gJmRldl9wcml2LT5lbmdpbmUuZ3JhcGg7CiAJaW50IHJldCwgaTsKIAorCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwljYXNlIDB4MzA6CisJY2FzZSAweDMxOgorCQlwZ3JhcGgtPmdyY3R4X3NpemUgPSBOVjMwXzMxX0dSQ1RYX1NJWkU7CisJCWJyZWFrOworCWNhc2UgMHgzNDoKKwkJcGdyYXBoLT5ncmN0eF9zaXplID0gTlYzNF9HUkNUWF9TSVpFOworCQlicmVhazsKKwljYXNlIDB4MzU6CisJY2FzZSAweDM2OgorCQlwZ3JhcGgtPmdyY3R4X3NpemUgPSBOVjM1XzM2X0dSQ1RYX1NJWkU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCU5WX0VSUk9SKGRldiwgInVua25vd24gY2hpcHNldCwgZGlzYWJsaW5nIGFjY2VsZXJhdGlvblxuIik7CisJCXBncmFwaC0+YWNjZWxfYmxvY2tlZCA9IHRydWU7CisJCXJldHVybiAwOworCX0KKwogCW52X3dyMzIoZGV2LCBOVjAzX1BNQ19FTkFCTEUsCiAJCW52X3JkMzIoZGV2LCBOVjAzX1BNQ19FTkFCTEUpICYgfk5WX1BNQ19FTkFCTEVfUEdSQVBIKTsKIAludl93cjMyKGRldiwgTlYwM19QTUNfRU5BQkxFLAogCQludl9yZDMyKGRldiwgTlYwM19QTUNfRU5BQkxFKSB8ICBOVl9QTUNfRU5BQkxFX1BHUkFQSCk7CiAKLQlpZiAoIWRldl9wcml2LT5jdHhfdGFibGUpIHsKKwlpZiAoIXBncmFwaC0+Y3R4X3RhYmxlKSB7CiAJCS8qIENyZWF0ZSBDb250ZXh0IFBvaW50ZXIgVGFibGUgKi8KLQkJZGV2X3ByaXYtPmN0eF90YWJsZV9zaXplID0gMzIgKiA0OwotCQlyZXQgPSBub3V2ZWF1X2dwdW9ial9uZXdfcmVmKGRldiwgTlVMTCwgTlVMTCwgMCwKLQkJCQkJCSAgZGV2X3ByaXYtPmN0eF90YWJsZV9zaXplLCAxNiwKKwkJcmV0ID0gbm91dmVhdV9ncHVvYmpfbmV3X3JlZihkZXYsIE5VTEwsIE5VTEwsIDAsIDMyICogNCwgMTYsCiAJCQkJCQkgIE5WT0JKX0ZMQUdfWkVST19BTExPQywKLQkJCQkJCSAgJmRldl9wcml2LT5jdHhfdGFibGUpOworCQkJCQkJICAmcGdyYXBoLT5jdHhfdGFibGUpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAl9CiAKIAludl93cjMyKGRldiwgTlYyMF9QR1JBUEhfQ0hBTk5FTF9DVFhfVEFCTEUsCi0JCQlkZXZfcHJpdi0+Y3R4X3RhYmxlLT5pbnN0YW5jZSA+PiA0KTsKKwkJICAgICBwZ3JhcGgtPmN0eF90YWJsZS0+aW5zdGFuY2UgPj4gNCk7CiAKIAludl93cjMyKGRldiwgTlYwM19QR1JBUEhfSU5UUiAgICwgMHhGRkZGRkZGRik7CiAJbnZfd3IzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFJfRU4sIDB4RkZGRkZGRkYpOwpAQCAtNzE3LDcgKzczNSw3IEBACiAJbnZfd3IzMihkZXYsIDB4MDA0MDA3NWMgICAgICAgICAgICAgLCAweDAwMDAwMDAxKTsKIAogCS8qIGJlZ2luIFJBTSBjb25maWcgKi8KLQkvKiB2cmFtc3ogPSBkcm1fZ2V0X3Jlc291cmNlX2xlbihkZXYsIDApIC0gMTsgKi8KKwkvKiB2cmFtc3ogPSBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgMCkgLSAxOyAqLwogCW52X3dyMzIoZGV2LCAweDQwMDlBNCwgbnZfcmQzMihkZXYsIE5WMDRfUEZCX0NGRzApKTsKIAludl93cjMyKGRldiwgMHg0MDA5QTgsIG52X3JkMzIoZGV2LCBOVjA0X1BGQl9DRkcxKSk7CiAJaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4MzQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MzBfZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MzBfZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDM1YzhiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYzMF9mYi5jCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRnJhbmNpc2NvIEplcmV6LgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwKKyAqIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUihTKSBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJkcm0uaCIKKyNpbmNsdWRlICJub3V2ZWF1X2Rydi5oIgorI2luY2x1ZGUgIm5vdXZlYXVfZHJtLmgiCisKK3N0YXRpYyBpbnQKK2NhbGNfcmVmKGludCBiLCBpbnQgbCwgaW50IGkpCit7CisJaW50IGosIHggPSAwOworCisJZm9yIChqID0gMDsgaiA8IDQ7IGorKykgeworCQlpbnQgbiA9IChiID4+ICg4ICogaikgJiAweGYpOworCQlpbnQgbSA9IChsID4+ICg4ICogaSkgJiAweGZmKSArIDIgKiAobiAmIDB4OCA/IG4gLSAweDEwIDogbik7CisKKwkJeCB8PSAoMHg4MCB8IChtICYgMHgxZikpIDw8ICg4ICogaik7CisJfQorCisJcmV0dXJuIHg7Cit9CisKK2ludAorbnYzMF9mYl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9mYl9lbmdpbmUgKnBmYiA9ICZkZXZfcHJpdi0+ZW5naW5lLmZiOworCWludCBpLCBqOworCisJcGZiLT5udW1fdGlsZXMgPSBOVjEwX1BGQl9USUxFX19TSVpFOworCisJLyogVHVybiBhbGwgdGhlIHRpbGluZyByZWdpb25zIG9mZi4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgcGZiLT5udW1fdGlsZXM7IGkrKykKKwkJcGZiLT5zZXRfcmVnaW9uX3RpbGluZyhkZXYsIGksIDAsIDAsIDApOworCisJLyogSW5pdCB0aGUgbWVtb3J5IHRpbWluZyByZWdzIGF0IDB4MTAwMzdjLzB4MTAwM2FjICovCisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4MzAgfHwKKwkgICAgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHgzMSB8fAorCSAgICBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDM1KSB7CisJCS8qIFJlbGF0ZWQgdG8gUk9QIGNvdW50ICovCisJCWludCBuID0gKGRldl9wcml2LT5jaGlwc2V0ID09IDB4MzEgPyAyIDogNCk7CisJCWludCBiID0gKGRldl9wcml2LT5jaGlwc2V0ID4gMHgzMCA/CisJCQkgbnZfcmQzMihkZXYsIDB4MTIyYykgJiAweGYgOiAwKTsKKwkJaW50IGwgPSBudl9yZDMyKGRldiwgMHgxMDAzZDApOworCisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCWZvciAoaiA9IDA7IGogPCAzOyBqKyspCisJCQkJbnZfd3IzMihkZXYsIDB4MTAwMzdjICsgMHhjICogaSArIDB4NCAqIGosCisJCQkJCWNhbGNfcmVmKGIsIGwsIGopKTsKKworCQkJZm9yIChqID0gMDsgaiA8IDI7IGorKykKKwkJCQludl93cjMyKGRldiwgMHgxMDAzYWMgKyAweDggKiBpICsgMHg0ICogaiwKKwkJCQkJY2FsY19yZWYoYiwgbCwgaikpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQKK252MzBfZmJfdGFrZWRvd24oc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZmlmby5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY0MF9maWZvLmMKaW5kZXggNTAwY2NmZC4uMmI2N2YxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY0MF9maWZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY0MF9maWZvLmMKQEAgLTQ4LDcgKzQ4LDYgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+Y29udGV4dF9zd2l0Y2hfbG9jaywgZmxhZ3MpOwogCi0JZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByZXBhcmVfYWNjZXNzKGRldiwgdHJ1ZSk7CiAJbnZfd2kzMihkZXYsIGZjICsgIDAsIGNoYW4tPnB1c2hidWZfYmFzZSk7CiAJbnZfd2kzMihkZXYsIGZjICsgIDQsIGNoYW4tPnB1c2hidWZfYmFzZSk7CiAJbnZfd2kzMihkZXYsIGZjICsgMTIsIGNoYW4tPnB1c2hidWYtPmluc3RhbmNlID4+IDQpOwpAQCAtNjEsNyArNjAsNiBAQAogCQkJICAgICAgMHgzMDAwMDAwMCAvKiBubyBpZGVhLi4gKi8pOwogCW52X3dpMzIoZGV2LCBmYyArIDU2LCBjaGFuLT5yYW1pbl9ncmN0eC0+aW5zdGFuY2UgPj4gNCk7CiAJbnZfd2kzMihkZXYsIGZjICsgNjAsIDB4MDAwMUZGRkYpOwotCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5maW5pc2hfYWNjZXNzKGRldik7CiAKIAkvKiBlbmFibGUgdGhlIGZpZm8gZG1hIG9wZXJhdGlvbiAqLwogCW52X3dyMzIoZGV2LCBOVjA0X1BGSUZPX01PREUsCkBAIC04OSw4ICs4Nyw2IEBACiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1aW50MzJfdCBmYyA9IE5WNDBfUkFNRkMoY2hpZCksIHRtcCwgdG1wMjsKIAotCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5wcmVwYXJlX2FjY2VzcyhkZXYsIGZhbHNlKTsKLQogCW52X3dyMzIoZGV2LCBOVjA0X1BGSUZPX0NBQ0hFMV9ETUFfUFVULCBudl9yaTMyKGRldiwgZmMgKyAwKSk7CiAJbnZfd3IzMihkZXYsIE5WMDRfUEZJRk9fQ0FDSEUxX0RNQV9HRVQsIG52X3JpMzIoZGV2LCBmYyArIDQpKTsKIAludl93cjMyKGRldiwgTlYxMF9QRklGT19DQUNIRTFfUkVGX0NOVCwgbnZfcmkzMihkZXYsIGZjICsgOCkpOwpAQCAtMTI3LDggKzEyMyw2IEBACiAJbnZfd3IzMihkZXYsIDB4MjA4OCwgbnZfcmkzMihkZXYsIGZjICsgNzYpKTsKIAludl93cjMyKGRldiwgMHgzMzAwLCBudl9yaTMyKGRldiwgZmMgKyA4MCkpOwogCi0JZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLmZpbmlzaF9hY2Nlc3MoZGV2KTsKLQogCW52X3dyMzIoZGV2LCBOVjAzX1BGSUZPX0NBQ0hFMV9HRVQsIDApOwogCW52X3dyMzIoZGV2LCBOVjAzX1BGSUZPX0NBQ0hFMV9QVVQsIDApOwogfQpAQCAtMTY2LDcgKzE2MCw2IEBACiAJCXJldHVybiAwOwogCWZjID0gTlY0MF9SQU1GQyhjaGlkKTsKIAotCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5wcmVwYXJlX2FjY2VzcyhkZXYsIHRydWUpOwogCW52X3dpMzIoZGV2LCBmYyArIDAsIG52X3JkMzIoZGV2LCBOVjA0X1BGSUZPX0NBQ0hFMV9ETUFfUFVUKSk7CiAJbnZfd2kzMihkZXYsIGZjICsgNCwgbnZfcmQzMihkZXYsIE5WMDRfUEZJRk9fQ0FDSEUxX0RNQV9HRVQpKTsKIAludl93aTMyKGRldiwgZmMgKyA4LCBudl9yZDMyKGRldiwgTlYxMF9QRklGT19DQUNIRTFfUkVGX0NOVCkpOwpAQCAtMjAwLDcgKzE5Myw2IEBACiAJdG1wIHw9IChudl9yZDMyKGRldiwgTlYwNF9QRklGT19DQUNIRTFfUFVUKSA8PCAxNik7CiAJbnZfd2kzMihkZXYsIGZjICsgNzIsIHRtcCk7CiAjZW5kaWYKLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOwogCiAJbnY0MF9maWZvX2RvX2xvYWRfY29udGV4dChkZXYsIHBmaWZvLT5jaGFubmVscyAtIDEpOwogCW52X3dyMzIoZGV2LCBOVjAzX1BGSUZPX0NBQ0hFMV9QVVNIMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZ3JhcGguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZ3JhcGguYwppbmRleCA3MDRhMjVkLi5mZDdkMmI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2dyYXBoLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY0MF9ncmFwaC5jCkBAIC01OCw2ICs1OCw3IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOworCXN0cnVjdCBub3V2ZWF1X2dyY3R4IGN0eCA9IHt9OwogCWludCByZXQ7CiAKIAlyZXQgPSBub3V2ZWF1X2dwdW9ial9uZXdfcmVmKGRldiwgY2hhbiwgTlVMTCwgMCwgcGdyYXBoLT5ncmN0eF9zaXplLApAQCAtNjcsMjAgKzY4LDEzIEBACiAJCXJldHVybiByZXQ7CiAKIAkvKiBJbml0aWFsaXNlIGRlZmF1bHQgY29udGV4dCB2YWx1ZXMgKi8KLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0ucHJlcGFyZV9hY2Nlc3MoZGV2LCB0cnVlKTsKLQlpZiAoIXBncmFwaC0+Y3R4cHJvZykgewotCQlzdHJ1Y3Qgbm91dmVhdV9ncmN0eCBjdHggPSB7fTsKKwljdHguZGV2ID0gY2hhbi0+ZGV2OworCWN0eC5tb2RlID0gTk9VVkVBVV9HUkNUWF9WQUxTOworCWN0eC5kYXRhID0gY2hhbi0+cmFtaW5fZ3JjdHgtPmdwdW9iajsKKwludjQwX2dyY3R4X2luaXQoJmN0eCk7CiAKLQkJY3R4LmRldiA9IGNoYW4tPmRldjsKLQkJY3R4Lm1vZGUgPSBOT1VWRUFVX0dSQ1RYX1ZBTFM7Ci0JCWN0eC5kYXRhID0gY2hhbi0+cmFtaW5fZ3JjdHgtPmdwdW9iajsKLQkJbnY0MF9ncmN0eF9pbml0KCZjdHgpOwotCX0gZWxzZSB7Ci0JCW5vdXZlYXVfZ3JjdHhfdmFsc19sb2FkKGRldiwgY2hhbi0+cmFtaW5fZ3JjdHgtPmdwdW9iaik7Ci0JfQogCW52X3dvMzIoZGV2LCBjaGFuLT5yYW1pbl9ncmN0eC0+Z3B1b2JqLCAwLAogCQkgICAgIGNoYW4tPnJhbWluX2dyY3R4LT5ncHVvYmotPmltX3ByYW1pbi0+c3RhcnQpOwotCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5maW5pc2hfYWNjZXNzKGRldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzOCw3ICsyMzIsOCBAQAogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9CiAJCShzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqKWRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IG5vdXZlYXVfZmJfZW5naW5lICpwZmIgPSAmZGV2X3ByaXYtPmVuZ2luZS5mYjsKLQl1aW50MzJfdCB2cmFtc3o7CisJc3RydWN0IG5vdXZlYXVfZ3JjdHggY3R4ID0ge307CisJdWludDMyX3QgdnJhbXN6LCAqY3A7CiAJaW50IGksIGo7CiAKIAludl93cjMyKGRldiwgTlYwM19QTUNfRU5BQkxFLCBudl9yZDMyKGRldiwgTlYwM19QTUNfRU5BQkxFKSAmCkBAIC0yNDYsMzIgKzI0MSwyMiBAQAogCW52X3dyMzIoZGV2LCBOVjAzX1BNQ19FTkFCTEUsIG52X3JkMzIoZGV2LCBOVjAzX1BNQ19FTkFCTEUpIHwKIAkJCSBOVl9QTUNfRU5BQkxFX1BHUkFQSCk7CiAKLQlpZiAobm91dmVhdV9jdHhmdykgewotCQlub3V2ZWF1X2dyY3R4X3Byb2dfbG9hZChkZXYpOwotCQlkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLmdyY3R4X3NpemUgPSAxNzUgKiAxMDI0OwotCX0KKwljcCA9IGttYWxsb2Moc2l6ZW9mKCpjcCkgKiAyNTYsIEdGUF9LRVJORUwpOworCWlmICghY3ApCisJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKCFkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLmN0eHByb2cpIHsKLQkJc3RydWN0IG5vdXZlYXVfZ3JjdHggY3R4ID0ge307Ci0JCXVpbnQzMl90ICpjcDsKKwljdHguZGV2ID0gZGV2OworCWN0eC5tb2RlID0gTk9VVkVBVV9HUkNUWF9QUk9HOworCWN0eC5kYXRhID0gY3A7CisJY3R4LmN0eHByb2dfbWF4ID0gMjU2OworCW52NDBfZ3JjdHhfaW5pdCgmY3R4KTsKKwlkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLmdyY3R4X3NpemUgPSBjdHguY3R4dmFsc19wb3MgKiA0OwogCi0JCWNwID0ga21hbGxvYyhzaXplb2YoKmNwKSAqIDI1NiwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghY3ApCi0JCQlyZXR1cm4gLUVOT01FTTsKKwludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfQ1RYQ1RMX1VDT0RFX0lOREVYLCAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgY3R4LmN0eHByb2dfbGVuOyBpKyspCisJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9DVFhDVExfVUNPREVfREFUQSwgY3BbaV0pOwogCi0JCWN0eC5kZXYgPSBkZXY7Ci0JCWN0eC5tb2RlID0gTk9VVkVBVV9HUkNUWF9QUk9HOwotCQljdHguZGF0YSA9IGNwOwotCQljdHguY3R4cHJvZ19tYXggPSAyNTY7Ci0JCW52NDBfZ3JjdHhfaW5pdCgmY3R4KTsKLQkJZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC5ncmN0eF9zaXplID0gY3R4LmN0eHZhbHNfcG9zICogNDsKLQotCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfQ1RYQ1RMX1VDT0RFX0lOREVYLCAwKTsKLQkJZm9yIChpID0gMDsgaSA8IGN0eC5jdHhwcm9nX2xlbjsgaSsrKQotCQkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX0NUWENUTF9VQ09ERV9EQVRBLCBjcFtpXSk7Ci0KLQkJa2ZyZWUoY3ApOwotCX0KKwlrZnJlZShjcCk7CiAKIAkvKiBObyBjb250ZXh0IHByZXNlbnQgY3VycmVudGx5ICovCiAJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX0NUWENUTF9DVVIsIDB4MDAwMDAwMDApOwpAQCAtMzY3LDcgKzM1Miw3IEBACiAJCW52NDBfZ3JhcGhfc2V0X3JlZ2lvbl90aWxpbmcoZGV2LCBpLCAwLCAwLCAwKTsKIAogCS8qIGJlZ2luIFJBTSBjb25maWcgKi8KLQl2cmFtc3ogPSBkcm1fZ2V0X3Jlc291cmNlX2xlbihkZXYsIDApIC0gMTsKKwl2cmFtc3ogPSBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgMCkgLSAxOwogCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKIAljYXNlIDB4NDA6CiAJCW52X3dyMzIoZGV2LCAweDQwMDlBNCwgbnZfcmQzMihkZXYsIE5WMDRfUEZCX0NGRzApKTsKQEAgLTQwNyw3ICszOTIsNiBAQAogCiB2b2lkIG52NDBfZ3JhcGhfdGFrZWRvd24oc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKLQlub3V2ZWF1X2dyY3R4X2ZpbmkoZGV2KTsKIH0KIAogc3RydWN0IG5vdXZlYXVfcGdyYXBoX29iamVjdF9jbGFzcyBudjQwX2dyYXBoX2dyY2xhc3NbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfbWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfbWMuYwppbmRleCAyYTM0OTVlLi5lNGU3MmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX21jLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY0MF9tYy5jCkBAIC0xOSw3ICsxOSw3IEBACiAJY2FzZSAweDQ2OiAvKiBHNzIgKi8KIAljYXNlIDB4NGU6CiAJY2FzZSAweDRjOiAvKiBDNTFfRzdYICovCi0JCXRtcCA9IG52X3JkMzIoZGV2LCBOVjQwX1BGQl8wMjBDKTsKKwkJdG1wID0gbnZfcmQzMihkZXYsIE5WMDRfUEZCX0ZJRk9fREFUQSk7CiAJCW52X3dyMzIoZGV2LCBOVjQwX1BNQ18xNzAwLCB0bXApOwogCQludl93cjMyKGRldiwgTlY0MF9QTUNfMTcwNCwgMCk7CiAJCW52X3dyMzIoZGV2LCBOVjQwX1BNQ18xNzA4LCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jcnRjLmMKaW5kZXggYjRlNGEzYi4uNWQxMWVhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jcnRjLmMKQEAgLTQ0MCw0NyArNDQwLDE1IEBACiB7CiAJc3RydWN0IG5vdXZlYXVfY3J0YyAqbnZfY3J0YyA9IG5vdXZlYXVfY3J0YyhjcnRjKTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwotCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKLQl1aW50MzJfdCBkYWMgPSAwLCBzb3IgPSAwOwogCiAJTlZfREVCVUdfS01TKGRldiwgImluZGV4ICVkXG4iLCBudl9jcnRjLT5pbmRleCk7CiAKLQkvKiBEaXNjb25uZWN0IGFsbCB1bnVzZWQgZW5jb2RlcnMuICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKLQkJc3RydWN0IG5vdXZlYXVfZW5jb2RlciAqbnZfZW5jb2RlciA9IG5vdXZlYXVfZW5jb2RlcihlbmNvZGVyKTsKLQotCQlpZiAoIWRybV9oZWxwZXJfZW5jb2Rlcl9pbl91c2UoZW5jb2RlcikpCi0JCQljb250aW51ZTsKLQotCQlpZiAobnZfZW5jb2Rlci0+ZGNiLT50eXBlID09IE9VVFBVVF9BTkFMT0cgfHwKLQkJICAgIG52X2VuY29kZXItPmRjYi0+dHlwZSA9PSBPVVRQVVRfVFYpCi0JCQlkYWMgfD0gKDEgPDwgbnZfZW5jb2Rlci0+b3IpOwotCQllbHNlCi0JCQlzb3IgfD0gKDEgPDwgbnZfZW5jb2Rlci0+b3IpOwotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKSB7Ci0JCXN0cnVjdCBub3V2ZWF1X2VuY29kZXIgKm52X2VuY29kZXIgPSBub3V2ZWF1X2VuY29kZXIoZW5jb2Rlcik7Ci0KLQkJaWYgKG52X2VuY29kZXItPmRjYi0+dHlwZSA9PSBPVVRQVVRfQU5BTE9HIHx8Ci0JCSAgICBudl9lbmNvZGVyLT5kY2ItPnR5cGUgPT0gT1VUUFVUX1RWKSB7Ci0JCQlpZiAoZGFjICYgKDEgPDwgbnZfZW5jb2Rlci0+b3IpKQotCQkJCWNvbnRpbnVlOwotCQl9IGVsc2UgewotCQkJaWYgKHNvciAmICgxIDw8IG52X2VuY29kZXItPm9yKSkKLQkJCQljb250aW51ZTsKLQkJfQotCi0JCW52X2VuY29kZXItPmRpc2Nvbm5lY3QobnZfZW5jb2Rlcik7Ci0JfQotCiAJbnY1MF9jcnRjX2JsYW5rKG52X2NydGMsIHRydWUpOwogfQogCiBzdGF0aWMgdm9pZAogbnY1MF9jcnRjX2NvbW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7Ci0Jc3RydWN0IGRybV9jcnRjICpjcnRjMjsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqZXZvID0gZGV2X3ByaXYtPmV2bzsKQEAgLTQ5MSwyMCArNDU5LDE0IEBACiAKIAludjUwX2NydGNfYmxhbmsobnZfY3J0YywgZmFsc2UpOwogCi0JLyogRXhwbGljaXRseSBibGFuayBhbGwgdW51c2VkIGNydGMncy4gKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMyLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKLQkJaWYgKCFkcm1faGVscGVyX2NydGNfaW5fdXNlKGNydGMyKSkKLQkJCW52NTBfY3J0Y19ibGFuayhub3V2ZWF1X2NydGMoY3J0YzIpLCB0cnVlKTsKLQl9Ci0KIAlyZXQgPSBSSU5HX1NQQUNFKGV2bywgMik7CiAJaWYgKHJldCkgewogCQlOVl9FUlJPUihkZXYsICJubyBzcGFjZSB3aGlsZSBjb21taXR0aW5nIGNydGNcbiIpOwogCQlyZXR1cm47CiAJfQogCUJFR0lOX1JJTkcoZXZvLCAwLCBOVjUwX0VWT19VUERBVEUsIDEpOwotCU9VVF9SSU5HKGV2bywgMCk7Ci0JRklSRV9SSU5HKGV2byk7CisJT1VUX1JJTkcgIChldm8sIDApOworCUZJUkVfUklORyAoZXZvKTsKIH0KIAogc3RhdGljIGJvb2wKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZGFjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2RhYy5jCmluZGV4IDFmZDk1MzcuLjFiYzA4NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZGFjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9kYWMuYwpAQCAtMzcsMjIgKzM3LDMxIEBACiAjaW5jbHVkZSAibnY1MF9kaXNwbGF5LmgiCiAKIHN0YXRpYyB2b2lkCi1udjUwX2RhY19kaXNjb25uZWN0KHN0cnVjdCBub3V2ZWF1X2VuY29kZXIgKm52X2VuY29kZXIpCitudjUwX2RhY19kaXNjb25uZWN0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gdG9fZHJtX2VuY29kZXIobnZfZW5jb2RlciktPmRldjsKKwlzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpudl9lbmNvZGVyID0gbm91dmVhdV9lbmNvZGVyKGVuY29kZXIpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpldm8gPSBkZXZfcHJpdi0+ZXZvOwogCWludCByZXQ7CiAKKwlpZiAoIW52X2VuY29kZXItPmNydGMpCisJCXJldHVybjsKKwludjUwX2NydGNfYmxhbmsobm91dmVhdV9jcnRjKG52X2VuY29kZXItPmNydGMpLCB0cnVlKTsKKwogCU5WX0RFQlVHX0tNUyhkZXYsICJEaXNjb25uZWN0aW5nIERBQyAlZFxuIiwgbnZfZW5jb2Rlci0+b3IpOwogCi0JcmV0ID0gUklOR19TUEFDRShldm8sIDIpOworCXJldCA9IFJJTkdfU1BBQ0UoZXZvLCA0KTsKIAlpZiAocmV0KSB7CiAJCU5WX0VSUk9SKGRldiwgIm5vIHNwYWNlIHdoaWxlIGRpc2Nvbm5lY3RpbmcgREFDXG4iKTsKIAkJcmV0dXJuOwogCX0KIAlCRUdJTl9SSU5HKGV2bywgMCwgTlY1MF9FVk9fREFDKG52X2VuY29kZXItPm9yLCBNT0RFX0NUUkwpLCAxKTsKLQlPVVRfUklORyhldm8sIDApOworCU9VVF9SSU5HICAoZXZvLCAwKTsKKwlCRUdJTl9SSU5HKGV2bywgMCwgTlY1MF9FVk9fVVBEQVRFLCAxKTsKKwlPVVRfUklORyAgKGV2bywgMCk7CisKKwludl9lbmNvZGVyLT5jcnRjID0gTlVMTDsKIH0KIAogc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKQEAgLTIxMyw3ICsyMjIsOCBAQAogCXVpbnQzMl90IG1vZGVfY3RsID0gMCwgbW9kZV9jdGwyID0gMDsKIAlpbnQgcmV0OwogCi0JTlZfREVCVUdfS01TKGRldiwgIm9yICVkXG4iLCBudl9lbmNvZGVyLT5vcik7CisJTlZfREVCVUdfS01TKGRldiwgIm9yICVkIHR5cGUgJWQgY3J0YyAlZFxuIiwKKwkJICAgICBudl9lbmNvZGVyLT5vciwgbnZfZW5jb2Rlci0+ZGNiLT50eXBlLCBjcnRjLT5pbmRleCk7CiAKIAludjUwX2RhY19kcG1zKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT04pOwogCkBAIC0yNDMsNiArMjUzLDE0IEBACiAJQkVHSU5fUklORyhldm8sIDAsIE5WNTBfRVZPX0RBQyhudl9lbmNvZGVyLT5vciwgTU9ERV9DVFJMKSwgMik7CiAJT1VUX1JJTkcoZXZvLCBtb2RlX2N0bCk7CiAJT1VUX1JJTkcoZXZvLCBtb2RlX2N0bDIpOworCisJbnZfZW5jb2Rlci0+Y3J0YyA9IGVuY29kZXItPmNydGM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2NydGMgKgorbnY1MF9kYWNfY3J0Y19nZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXJldHVybiBub3V2ZWF1X2VuY29kZXIoZW5jb2RlciktPmNydGM7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIG52NTBfZGFjX2hlbHBlcl9mdW5jcyA9IHsKQEAgLTI1Myw3ICsyNzEsOSBAQAogCS5wcmVwYXJlID0gbnY1MF9kYWNfcHJlcGFyZSwKIAkuY29tbWl0ID0gbnY1MF9kYWNfY29tbWl0LAogCS5tb2RlX3NldCA9IG52NTBfZGFjX21vZGVfc2V0LAotCS5kZXRlY3QgPSBudjUwX2RhY19kZXRlY3QKKwkuZ2V0X2NydGMgPSBudjUwX2RhY19jcnRjX2dldCwKKwkuZGV0ZWN0ID0gbnY1MF9kYWNfZGV0ZWN0LAorCS5kaXNhYmxlID0gbnY1MF9kYWNfZGlzY29ubmVjdAogfTsKIAogc3RhdGljIHZvaWQKQEAgLTI3NSwxNCArMjk1LDExIEBACiB9OwogCiBpbnQKLW52NTBfZGFjX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZGNiX2VudHJ5ICplbnRyeSkKK252NTBfZGFjX2NyZWF0ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZGNiX2VudHJ5ICplbnRyeSkKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpudl9lbmNvZGVyOwogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKIAotCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwotCU5WX0lORk8oZGV2LCAiRGV0ZWN0ZWQgYSBEQUMgb3V0cHV0XG4iKTsKLQogCW52X2VuY29kZXIgPSBremFsbG9jKHNpemVvZigqbnZfZW5jb2RlciksIEdGUF9LRVJORUwpOwogCWlmICghbnZfZW5jb2RlcikKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yOTEsMTQgKzMwOCwxNCBAQAogCW52X2VuY29kZXItPmRjYiA9IGVudHJ5OwogCW52X2VuY29kZXItPm9yID0gZmZzKGVudHJ5LT5vcikgLSAxOwogCi0JbnZfZW5jb2Rlci0+ZGlzY29ubmVjdCA9IG52NTBfZGFjX2Rpc2Nvbm5lY3Q7Ci0KLQlkcm1fZW5jb2Rlcl9pbml0KGRldiwgZW5jb2RlciwgJm52NTBfZGFjX2VuY29kZXJfZnVuY3MsCisJZHJtX2VuY29kZXJfaW5pdChjb25uZWN0b3ItPmRldiwgZW5jb2RlciwgJm52NTBfZGFjX2VuY29kZXJfZnVuY3MsCiAJCQkgRFJNX01PREVfRU5DT0RFUl9EQUMpOwogCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoZW5jb2RlciwgJm52NTBfZGFjX2hlbHBlcl9mdW5jcyk7CiAKIAllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IGVudHJ5LT5oZWFkczsKIAllbmNvZGVyLT5wb3NzaWJsZV9jbG9uZXMgPSAwOworCisJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKGNvbm5lY3RvciwgZW5jb2Rlcik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9kaXNwbGF5LmMKaW5kZXggNTgwYTVkMS4uZjEzYWQwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9kaXNwbGF5LmMKQEAgLTcxLDE0ICs3MSwxMyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5wcmVwYXJlX2FjY2VzcyhkZXYsIHRydWUpOwogCW52X3dvMzIoZGV2LCBvYmosIDAsICh0aWxlX2ZsYWdzIDw8IDIyKSB8IChtYWdpY19mbGFncyA8PCAxNikgfCBjbGFzcyk7CiAJbnZfd28zMihkZXYsIG9iaiwgMSwgbGltaXQpOwogCW52X3dvMzIoZGV2LCBvYmosIDIsIG9mZnNldCk7CiAJbnZfd28zMihkZXYsIG9iaiwgMywgMHgwMDAwMDAwMCk7CiAJbnZfd28zMihkZXYsIG9iaiwgNCwgMHgwMDAwMDAwMCk7CiAJbnZfd28zMihkZXYsIG9iaiwgNSwgMHgwMDAxMDAwMCk7Ci0JZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLmZpbmlzaF9hY2Nlc3MoZGV2KTsKKwlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmx1c2goZGV2KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTEwLDggKzEwOSw4IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0ID0gbm91dmVhdV9tZW1faW5pdF9oZWFwKCZjaGFuLT5yYW1pbl9oZWFwLCBjaGFuLT5yYW1pbi0+Z3B1b2JqLT4KLQkJCQkgICAgaW1fcHJhbWluLT5zdGFydCwgMzI3NjgpOworCXJldCA9IGRybV9tbV9pbml0KCZjaGFuLT5yYW1pbl9oZWFwLAorCQkJICBjaGFuLT5yYW1pbi0+Z3B1b2JqLT5pbV9wcmFtaW4tPnN0YXJ0LCAzMjc2OCk7CiAJaWYgKHJldCkgewogCQlOVl9FUlJPUihkZXYsICJFcnJvciBpbml0aWFsaXNpbmcgRVZPIFBSQU1JTiBoZWFwOiAlZFxuIiwgcmV0KTsKIAkJbnY1MF9ldm9fY2hhbm5lbF9kZWwocGNoYW4pOwpAQCAtMTc5LDEzICsxNzgsMjUgQEAKIH0KIAogaW50CitudjUwX2Rpc3BsYXlfZWFybHlfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXJldHVybiAwOworfQorCit2b2lkCitudjUwX2Rpc3BsYXlfbGF0ZV90YWtlZG93bihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworfQorCitpbnQKIG52NTBfZGlzcGxheV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3Qgbm91dmVhdV90aW1lcl9lbmdpbmUgKnB0aW1lciA9ICZkZXZfcHJpdi0+ZW5naW5lLnRpbWVyOworCXN0cnVjdCBub3V2ZWF1X2dwaW9fZW5naW5lICpwZ3BpbyA9ICZkZXZfcHJpdi0+ZW5naW5lLmdwaW87CiAJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqZXZvID0gZGV2X3ByaXYtPmV2bzsKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwotCXVpbnQzMl90IHZhbCwgcmFtX2Ftb3VudCwgaHBkX2VuWzJdOworCXVpbnQzMl90IHZhbCwgcmFtX2Ftb3VudDsKIAl1aW50NjRfdCBzdGFydDsKIAlpbnQgcmV0LCBpOwogCkBAIC0zNjYsMjYgKzM3NywxMyBAQAogCQkJCQkgICAgIE5WNTBfUERJU1BMQVlfSU5UUl9FTl9DTEtfVU5LNDApKTsKIAogCS8qIGVuYWJsZSBob3RwbHVnIGludGVycnVwdHMgKi8KLQlocGRfZW5bMF0gPSBocGRfZW5bMV0gPSAwOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgewogCQlzdHJ1Y3Qgbm91dmVhdV9jb25uZWN0b3IgKmNvbm4gPSBub3V2ZWF1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCQlzdHJ1Y3QgZGNiX2dwaW9fZW50cnkgKmdwaW87CiAKIAkJaWYgKGNvbm4tPmRjYi0+Z3Bpb190YWcgPT0gMHhmZikKIAkJCWNvbnRpbnVlOwogCi0JCWdwaW8gPSBub3V2ZWF1X2Jpb3NfZ3Bpb19lbnRyeShkZXYsIGNvbm4tPmRjYi0+Z3Bpb190YWcpOwotCQlpZiAoIWdwaW8pCi0JCQljb250aW51ZTsKLQotCQlocGRfZW5bZ3Bpby0+bGluZSA+PiA0XSB8PSAoMHgwMDAxMDAwMSA8PCAoZ3Bpby0+bGluZSAmIDB4ZikpOwotCX0KLQotCW52X3dyMzIoZGV2LCAweGUwNTQsIDB4ZmZmZmZmZmYpOwotCW52X3dyMzIoZGV2LCAweGUwNTAsIGhwZF9lblswXSk7Ci0JaWYgKGRldl9wcml2LT5jaGlwc2V0ID49IDB4OTApIHsKLQkJbnZfd3IzMihkZXYsIDB4ZTA3NCwgMHhmZmZmZmZmZik7Ci0JCW52X3dyMzIoZGV2LCAweGUwNzAsIGhwZF9lblsxXSk7CisJCXBncGlvLT5pcnFfZW5hYmxlKGRldiwgY29ubi0+ZGNiLT5ncGlvX3RhZywgdHJ1ZSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00NjUsNiArNDYzLDcgQEAKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkY2JfdGFibGUgKmRjYiA9ICZkZXZfcHJpdi0+dmJpb3MuZGNiOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsICpjdDsKIAlpbnQgcmV0LCBpOwogCiAJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CkBAIC01MDcsMTQgKzUwNiwxOCBAQAogCQkJY29udGludWU7CiAJCX0KIAorCQljb25uZWN0b3IgPSBub3V2ZWF1X2Nvbm5lY3Rvcl9jcmVhdGUoZGV2LCBlbnRyeS0+Y29ubmVjdG9yKTsKKwkJaWYgKElTX0VSUihjb25uZWN0b3IpKQorCQkJY29udGludWU7CisKIAkJc3dpdGNoIChlbnRyeS0+dHlwZSkgewogCQljYXNlIE9VVFBVVF9UTURTOgogCQljYXNlIE9VVFBVVF9MVkRTOgogCQljYXNlIE9VVFBVVF9EUDoKLQkJCW52NTBfc29yX2NyZWF0ZShkZXYsIGVudHJ5KTsKKwkJCW52NTBfc29yX2NyZWF0ZShjb25uZWN0b3IsIGVudHJ5KTsKIAkJCWJyZWFrOwogCQljYXNlIE9VVFBVVF9BTkFMT0c6Ci0JCQludjUwX2RhY19jcmVhdGUoZGV2LCBlbnRyeSk7CisJCQludjUwX2RhY19jcmVhdGUoY29ubmVjdG9yLCBlbnRyeSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCU5WX1dBUk4oZGV2LCAiRENCIGVuY29kZXIgJWQgdW5rbm93blxuIiwgZW50cnktPnR5cGUpOwpAQCAtNTIyLDExICs1MjUsMTMgQEAKIAkJfQogCX0KIAotCWZvciAoaSA9IDAgOyBpIDwgZGNiLT5jb25uZWN0b3IuZW50cmllczsgaSsrKSB7Ci0JCWlmIChpICE9IDAgJiYgZGNiLT5jb25uZWN0b3IuZW50cnlbaV0uaW5kZXgyID09Ci0JCQkgICAgICBkY2ItPmNvbm5lY3Rvci5lbnRyeVtpIC0gMV0uaW5kZXgyKQotCQkJY29udGludWU7Ci0JCW5vdXZlYXVfY29ubmVjdG9yX2NyZWF0ZShkZXYsICZkY2ItPmNvbm5lY3Rvci5lbnRyeVtpXSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvbm5lY3RvciwgY3QsCisJCQkJICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJCWlmICghY29ubmVjdG9yLT5lbmNvZGVyX2lkc1swXSkgeworCQkJTlZfV0FSTihkZXYsICIlcyBoYXMgbm8gZW5jb2RlcnMsIHJlbW92aW5nXG4iLAorCQkJCWRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CisJCQljb25uZWN0b3ItPmZ1bmNzLT5kZXN0cm95KGNvbm5lY3Rvcik7CisJCX0KIAl9CiAKIAlyZXQgPSBudjUwX2Rpc3BsYXlfaW5pdChkZXYpOwpAQCAtNTM4LDcgKzU0Myw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBudjUwX2Rpc3BsYXlfZGVzdHJveShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQordm9pZAorbnY1MF9kaXNwbGF5X2Rlc3Ryb3koc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCkBAIC01NDgsMTM1ICs1NTQsMzAgQEAKIAogCW52NTBfZGlzcGxheV9kaXNhYmxlKGRldik7CiAJbnY1MF9ldm9fY2hhbm5lbF9kZWwoJmRldl9wcml2LT5ldm8pOwotCi0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdWludDMyX3QKLW52NTBfZGlzcGxheV9tb2RlX2N0cmwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgYm9vbCBzb3IsIGludCBvcikKLXsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXVpbnQzMl90IG1jOwotCi0JaWYgKHNvcikgewotCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPCAweDkwIHx8Ci0JCSAgICBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDkyIHx8IGRldl9wcml2LT5jaGlwc2V0ID09IDB4YTApCi0JCQltYyA9IG52X3JkMzIoZGV2LCBOVjUwX1BESVNQTEFZX1NPUl9NT0RFX0NUUkxfUChvcikpOwotCQllbHNlCi0JCQltYyA9IG52X3JkMzIoZGV2LCBOVjkwX1BESVNQTEFZX1NPUl9NT0RFX0NUUkxfUChvcikpOwotCX0gZWxzZSB7Ci0JCW1jID0gbnZfcmQzMihkZXYsIE5WNTBfUERJU1BMQVlfREFDX01PREVfQ1RSTF9QKG9yKSk7Ci0JfQotCi0JcmV0dXJuIG1jOwotfQotCi1zdGF0aWMgaW50Ci1udjUwX2Rpc3BsYXlfaXJxX2hlYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50ICpwaGVhZCwKLQkJICAgICAgc3RydWN0IGRjYl9lbnRyeSAqKnBkY2JlbnQpCi17Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1aW50MzJfdCB1bmszMCA9IG52X3JkMzIoZGV2LCBOVjUwX1BESVNQTEFZX1VOSzMwX0NUUkwpOwotCXVpbnQzMl90IGRhYyA9IDAsIHNvciA9IDA7Ci0JaW50IGhlYWQsIGksIG9yID0gMCwgdHlwZSA9IE9VVFBVVF9BTlk7Ci0KLQkvKiBXZSdyZSBhc3N1bWluZyB0aGF0IGhlYWQgMCAqb3IqIGhlYWQgMSB3aWxsIGJlIGFjdGl2ZSBoZXJlLAotCSAqIGFuZCBub3QgYm90aC4gIEknbSBub3Qgc3VyZSBpZiB0aGUgaHcgd2lsbCBldmVuIHNpZ25hbCBib3RoCi0JICogZXZlciwgYnV0IGl0IGRlZmluaXRlbHkgc2hvdWxkbid0IGZvciB1cyBhcyB3ZSBjb21taXQgZWFjaAotCSAqIENSVEMgc2VwYXJhdGVseSwgYW5kIHN1Ym1pc3Npb24gd2lsbCBiZSBibG9ja2VkIGJ5IHRoZSBHUFUKLQkgKiB1bnRpbCB3ZSBoYW5kbGUgZWFjaCBpbiB0dXJuLgotCSAqLwotCU5WX0RFQlVHX0tNUyhkZXYsICIweDYxMDAzMDogMHglMDh4XG4iLCB1bmszMCk7Ci0JaGVhZCA9IGZmcygodW5rMzAgPj4gOSkgJiAzKSAtIDE7Ci0JaWYgKGhlYWQgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIFRoaXMgYXNzdW1lcyBDUlRDcyBhcmUgbmV2ZXIgYm91bmQgdG8gbXVsdGlwbGUgZW5jb2RlcnMsIHdoaWNoCi0JICogc2hvdWxkIGJlIHRoZSBjYXNlLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCAzICYmIHR5cGUgPT0gT1VUUFVUX0FOWTsgaSsrKSB7Ci0JCXVpbnQzMl90IG1jID0gbnY1MF9kaXNwbGF5X21vZGVfY3RybChkZXYsIGZhbHNlLCBpKTsKLQkJaWYgKCEobWMgJiAoMSA8PCBoZWFkKSkpCi0JCQljb250aW51ZTsKLQotCQlzd2l0Y2ggKChtYyA+PiA4KSAmIDB4ZikgewotCQljYXNlIDA6IHR5cGUgPSBPVVRQVVRfQU5BTE9HOyBicmVhazsKLQkJY2FzZSAxOiB0eXBlID0gT1VUUFVUX1RWOyBicmVhazsKLQkJZGVmYXVsdDoKLQkJCU5WX0VSUk9SKGRldiwgInVua25vd24gZGFjIG1vZGVfY3RybDogMHglMDh4XG4iLCBkYWMpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0KLQkJb3IgPSBpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCA0ICYmIHR5cGUgPT0gT1VUUFVUX0FOWTsgaSsrKSB7Ci0JCXVpbnQzMl90IG1jID0gbnY1MF9kaXNwbGF5X21vZGVfY3RybChkZXYsIHRydWUsIGkpOwotCQlpZiAoIShtYyAmICgxIDw8IGhlYWQpKSkKLQkJCWNvbnRpbnVlOwotCi0JCXN3aXRjaCAoKG1jID4+IDgpICYgMHhmKSB7Ci0JCWNhc2UgMDogdHlwZSA9IE9VVFBVVF9MVkRTOyBicmVhazsKLQkJY2FzZSAxOiB0eXBlID0gT1VUUFVUX1RNRFM7IGJyZWFrOwotCQljYXNlIDI6IHR5cGUgPSBPVVRQVVRfVE1EUzsgYnJlYWs7Ci0JCWNhc2UgNTogdHlwZSA9IE9VVFBVVF9UTURTOyBicmVhazsKLQkJY2FzZSA4OiB0eXBlID0gT1VUUFVUX0RQOyBicmVhazsKLQkJY2FzZSA5OiB0eXBlID0gT1VUUFVUX0RQOyBicmVhazsKLQkJZGVmYXVsdDoKLQkJCU5WX0VSUk9SKGRldiwgInVua25vd24gc29yIG1vZGVfY3RybDogMHglMDh4XG4iLCBzb3IpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0KLQkJb3IgPSBpOwotCX0KLQotCU5WX0RFQlVHX0tNUyhkZXYsICJ0eXBlICVkLCBvciAlZFxuIiwgdHlwZSwgb3IpOwotCWlmICh0eXBlID09IE9VVFBVVF9BTlkpIHsKLQkJTlZfRVJST1IoZGV2LCAidW5rbm93biBlbmNvZGVyISFcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT52Ymlvcy5kY2IuZW50cmllczsgaSsrKSB7Ci0JCXN0cnVjdCBkY2JfZW50cnkgKmRjYmVudCA9ICZkZXZfcHJpdi0+dmJpb3MuZGNiLmVudHJ5W2ldOwotCi0JCWlmIChkY2JlbnQtPnR5cGUgIT0gdHlwZSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghKGRjYmVudC0+b3IgJiAoMSA8PCBvcikpKQotCQkJY29udGludWU7Ci0KLQkJKnBoZWFkID0gaGVhZDsKLQkJKnBkY2JlbnQgPSBkY2JlbnQ7Ci0JCXJldHVybiAwOwotCX0KLQotCU5WX0VSUk9SKGRldiwgIm5vIERDQiBlbnRyeSBmb3IgJWQgJWRcbiIsIGRhYyAhPSAwLCBvcik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotbnY1MF9kaXNwbGF5X3NjcmlwdF9zZWxlY3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRjYl9lbnRyeSAqZGNiZW50LAotCQkJICAgaW50IHB4Y2xrKQorc3RhdGljIHUxNgorbnY1MF9kaXNwbGF5X3NjcmlwdF9zZWxlY3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRjYl9lbnRyeSAqZGNiLAorCQkJICAgdTMyIG1jLCBpbnQgcHhjbGspCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3Qgbm91dmVhdV9jb25uZWN0b3IgKm52X2Nvbm5lY3RvciA9IE5VTEw7CiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwogCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPnZiaW9zOwotCXVpbnQzMl90IG1jLCBzY3JpcHQgPSAwLCBvcjsKKwl1MzIgc2NyaXB0ID0gMCwgb3I7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgewogCQlzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpudl9lbmNvZGVyID0gbm91dmVhdV9lbmNvZGVyKGVuY29kZXIpOwogCi0JCWlmIChudl9lbmNvZGVyLT5kY2IgIT0gZGNiZW50KQorCQlpZiAobnZfZW5jb2Rlci0+ZGNiICE9IGRjYikKIAkJCWNvbnRpbnVlOwogCiAJCW52X2Nvbm5lY3RvciA9IG5vdXZlYXVfZW5jb2Rlcl9jb25uZWN0b3JfZ2V0KG52X2VuY29kZXIpOwogCQlicmVhazsKIAl9CiAKLQlvciA9IGZmcyhkY2JlbnQtPm9yKSAtIDE7Ci0JbWMgPSBudjUwX2Rpc3BsYXlfbW9kZV9jdHJsKGRldiwgZGNiZW50LT50eXBlICE9IE9VVFBVVF9BTkFMT0csIG9yKTsKLQlzd2l0Y2ggKGRjYmVudC0+dHlwZSkgeworCW9yID0gZmZzKGRjYi0+b3IpIC0gMTsKKwlzd2l0Y2ggKGRjYi0+dHlwZSkgewogCWNhc2UgT1VUUFVUX0xWRFM6CiAJCXNjcmlwdCA9IChtYyA+PiA4KSAmIDB4ZjsKIAkJaWYgKGJpb3MtPmZwX25vX2RkYykgewpAQCAtNzY3LDE3ICs2NjgsODggQEAKIHN0YXRpYyB2b2lkCiBudjUwX2Rpc3BsYXlfdW5rMTBfaGFuZGxlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBkY2JfZW50cnkgKmRjYmVudDsKLQlpbnQgaGVhZCwgcmV0OworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyIHVuazMwID0gbnZfcmQzMihkZXYsIDB4NjEwMDMwKSwgbWM7CisJaW50IGksIGNydGMsIG9yLCB0eXBlID0gT1VUUFVUX0FOWTsKIAotCXJldCA9IG52NTBfZGlzcGxheV9pcnFfaGVhZChkZXYsICZoZWFkLCAmZGNiZW50KTsKLQlpZiAocmV0KQotCQlnb3RvIGFjazsKKwlOVl9ERUJVR19LTVMoZGV2LCAiMHg2MTAwMzA6IDB4JTA4eFxuIiwgdW5rMzApOworCWRldl9wcml2LT5ldm9faXJxLmRjYiA9IE5VTEw7CiAKIAludl93cjMyKGRldiwgMHg2MTk0OTQsIG52X3JkMzIoZGV2LCAweDYxOTQ5NCkgJiB+OCk7CiAKLQlub3V2ZWF1X2Jpb3NfcnVuX2Rpc3BsYXlfdGFibGUoZGV2LCBkY2JlbnQsIDAsIC0xKTsKKwkvKiBEZXRlcm1pbmUgd2hpY2ggQ1JUQyB3ZSdyZSBkZWFsaW5nIHdpdGgsIG9ubHkgMSBldmVyIHdpbGwgYmUKKwkgKiBzaWduYWxsZWQgYXQgdGhlIHNhbWUgdGltZSB3aXRoIHRoZSBjdXJyZW50IG5vdXZlYXUgY29kZS4KKwkgKi8KKwljcnRjID0gZmZzKCh1bmszMCAmIDB4MDAwMDAwNjApID4+IDUpIC0gMTsKKwlpZiAoY3J0YyA8IDApCisJCWdvdG8gYWNrOwogCisJLyogTm90aGluZyBuZWVkcyB0byBiZSBkb25lIGZvciB0aGUgZW5jb2RlciAqLworCWNydGMgPSBmZnMoKHVuazMwICYgMHgwMDAwMDE4MCkgPj4gNykgLSAxOworCWlmIChjcnRjIDwgMCkKKwkJZ290byBhY2s7CisKKwkvKiBGaW5kIHdoaWNoIGVuY29kZXIgd2FzIGNvbm5lY3RlZCB0byB0aGUgQ1JUQyAqLworCWZvciAoaSA9IDA7IHR5cGUgPT0gT1VUUFVUX0FOWSAmJiBpIDwgMzsgaSsrKSB7CisJCW1jID0gbnZfcmQzMihkZXYsIE5WNTBfUERJU1BMQVlfREFDX01PREVfQ1RSTF9DKGkpKTsKKwkJTlZfREVCVUdfS01TKGRldiwgIkRBQy0lZCBtYzogMHglMDh4XG4iLCBpLCBtYyk7CisJCWlmICghKG1jICYgKDEgPDwgY3J0YykpKQorCQkJY29udGludWU7CisKKwkJc3dpdGNoICgobWMgJiAweDAwMDAwZjAwKSA+PiA4KSB7CisJCWNhc2UgMDogdHlwZSA9IE9VVFBVVF9BTkFMT0c7IGJyZWFrOworCQljYXNlIDE6IHR5cGUgPSBPVVRQVVRfVFY7IGJyZWFrOworCQlkZWZhdWx0OgorCQkJTlZfRVJST1IoZGV2LCAiaW52YWxpZCBtYywgREFDLSVkOiAweCUwOHhcbiIsIGksIG1jKTsKKwkJCWdvdG8gYWNrOworCQl9CisKKwkJb3IgPSBpOworCX0KKworCWZvciAoaSA9IDA7IHR5cGUgPT0gT1VUUFVUX0FOWSAmJiBpIDwgNDsgaSsrKSB7CisJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAgPCAweDkwIHx8CisJCSAgICBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDkyIHx8CisJCSAgICBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweGEwKQorCQkJbWMgPSBudl9yZDMyKGRldiwgTlY1MF9QRElTUExBWV9TT1JfTU9ERV9DVFJMX0MoaSkpOworCQllbHNlCisJCQltYyA9IG52X3JkMzIoZGV2LCBOVjkwX1BESVNQTEFZX1NPUl9NT0RFX0NUUkxfQyhpKSk7CisKKwkJTlZfREVCVUdfS01TKGRldiwgIlNPUi0lZCBtYzogMHglMDh4XG4iLCBpLCBtYyk7CisJCWlmICghKG1jICYgKDEgPDwgY3J0YykpKQorCQkJY29udGludWU7CisKKwkJc3dpdGNoICgobWMgJiAweDAwMDAwZjAwKSA+PiA4KSB7CisJCWNhc2UgMDogdHlwZSA9IE9VVFBVVF9MVkRTOyBicmVhazsKKwkJY2FzZSAxOiB0eXBlID0gT1VUUFVUX1RNRFM7IGJyZWFrOworCQljYXNlIDI6IHR5cGUgPSBPVVRQVVRfVE1EUzsgYnJlYWs7CisJCWNhc2UgNTogdHlwZSA9IE9VVFBVVF9UTURTOyBicmVhazsKKwkJY2FzZSA4OiB0eXBlID0gT1VUUFVUX0RQOyBicmVhazsKKwkJY2FzZSA5OiB0eXBlID0gT1VUUFVUX0RQOyBicmVhazsKKwkJZGVmYXVsdDoKKwkJCU5WX0VSUk9SKGRldiwgImludmFsaWQgbWMsIFNPUi0lZDogMHglMDh4XG4iLCBpLCBtYyk7CisJCQlnb3RvIGFjazsKKwkJfQorCisJCW9yID0gaTsKKwl9CisKKwkvKiBUaGVyZSB3YXMgbm8gZW5jb2RlciB0byBkaXNhYmxlICovCisJaWYgKHR5cGUgPT0gT1VUUFVUX0FOWSkKKwkJZ290byBhY2s7CisKKwkvKiBEaXNhYmxlIHRoZSBlbmNvZGVyICovCisJZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT52Ymlvcy5kY2IuZW50cmllczsgaSsrKSB7CisJCXN0cnVjdCBkY2JfZW50cnkgKmRjYiA9ICZkZXZfcHJpdi0+dmJpb3MuZGNiLmVudHJ5W2ldOworCisJCWlmIChkY2ItPnR5cGUgPT0gdHlwZSAmJiAoZGNiLT5vciAmICgxIDw8IG9yKSkpIHsKKwkJCW5vdXZlYXVfYmlvc19ydW5fZGlzcGxheV90YWJsZShkZXYsIGRjYiwgMCwgLTEpOworCQkJZGV2X3ByaXYtPmV2b19pcnEuZGNiID0gZGNiOworCQkJZ290byBhY2s7CisJCX0KKwl9CisKKwlOVl9FUlJPUihkZXYsICJubyBkY2IgZm9yICVkICVkIDB4JTA4eFxuIiwgb3IsIHR5cGUsIG1jKTsKIGFjazoKIAludl93cjMyKGRldiwgTlY1MF9QRElTUExBWV9JTlRSXzEsIE5WNTBfUERJU1BMQVlfSU5UUl8xX0NMS19VTksxMCk7CiAJbnZfd3IzMihkZXYsIDB4NjEwMDMwLCAweDgwMDAwMDAwKTsKQEAgLTgxNywzMyArNzg5LDEwMyBAQAogc3RhdGljIHZvaWQKIG52NTBfZGlzcGxheV91bmsyMF9oYW5kbGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGRjYl9lbnRyeSAqZGNiZW50OwotCXVpbnQzMl90IHRtcCwgcGNsaywgc2NyaXB0OwotCWludCBoZWFkLCBvciwgcmV0OworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyIHVuazMwID0gbnZfcmQzMihkZXYsIDB4NjEwMDMwKSwgdG1wLCBwY2xrLCBzY3JpcHQsIG1jOworCXN0cnVjdCBkY2JfZW50cnkgKmRjYjsKKwlpbnQgaSwgY3J0Yywgb3IsIHR5cGUgPSBPVVRQVVRfQU5ZOwogCi0JcmV0ID0gbnY1MF9kaXNwbGF5X2lycV9oZWFkKGRldiwgJmhlYWQsICZkY2JlbnQpOwotCWlmIChyZXQpCisJTlZfREVCVUdfS01TKGRldiwgIjB4NjEwMDMwOiAweCUwOHhcbiIsIHVuazMwKTsKKwlkY2IgPSBkZXZfcHJpdi0+ZXZvX2lycS5kY2I7CisJaWYgKGRjYikgeworCQlub3V2ZWF1X2Jpb3NfcnVuX2Rpc3BsYXlfdGFibGUoZGV2LCBkY2IsIDAsIC0yKTsKKwkJZGV2X3ByaXYtPmV2b19pcnEuZGNiID0gTlVMTDsKKwl9CisKKwkvKiBDUlRDIGNsb2NrIGNoYW5nZSByZXF1ZXN0ZWQ/ICovCisJY3J0YyA9IGZmcygodW5rMzAgJiAweDAwMDAwNjAwKSA+PiA5KSAtIDE7CisJaWYgKGNydGMgPj0gMCkgeworCQlwY2xrICA9IG52X3JkMzIoZGV2LCBOVjUwX1BESVNQTEFZX0NSVENfUChjcnRjLCBDTE9DSykpOworCQlwY2xrICY9IDB4MDAzZmZmZmY7CisKKwkJbnY1MF9jcnRjX3NldF9jbG9jayhkZXYsIGNydGMsIHBjbGspOworCisJCXRtcCA9IG52X3JkMzIoZGV2LCBOVjUwX1BESVNQTEFZX0NSVENfQ0xLX0NUUkwyKGNydGMpKTsKKwkJdG1wICY9IH4weDAwMDAwMGY7CisJCW52X3dyMzIoZGV2LCBOVjUwX1BESVNQTEFZX0NSVENfQ0xLX0NUUkwyKGNydGMpLCB0bXApOworCX0KKworCS8qIE5vdGhpbmcgbmVlZHMgdG8gYmUgZG9uZSBmb3IgdGhlIGVuY29kZXIgKi8KKwljcnRjID0gZmZzKCh1bmszMCAmIDB4MDAwMDAxODApID4+IDcpIC0gMTsKKwlpZiAoY3J0YyA8IDApCiAJCWdvdG8gYWNrOwotCW9yID0gZmZzKGRjYmVudC0+b3IpIC0gMTsKLQlwY2xrID0gbnZfcmQzMihkZXYsIE5WNTBfUERJU1BMQVlfQ1JUQ19QKGhlYWQsIENMT0NLKSkgJiAweDNmZmZmZjsKLQlzY3JpcHQgPSBudjUwX2Rpc3BsYXlfc2NyaXB0X3NlbGVjdChkZXYsIGRjYmVudCwgcGNsayk7CisJcGNsayAgPSBudl9yZDMyKGRldiwgTlY1MF9QRElTUExBWV9DUlRDX1AoY3J0YywgQ0xPQ0spKSAmIDB4MDAzZmZmZmY7CiAKLQlOVl9ERUJVR19LTVMoZGV2LCAiaGVhZCAlZCBweGNsazogJWRLSHpcbiIsIGhlYWQsIHBjbGspOworCS8qIEZpbmQgd2hpY2ggZW5jb2RlciBpcyBjb25uZWN0ZWQgdG8gdGhlIENSVEMgKi8KKwlmb3IgKGkgPSAwOyB0eXBlID09IE9VVFBVVF9BTlkgJiYgaSA8IDM7IGkrKykgeworCQltYyA9IG52X3JkMzIoZGV2LCBOVjUwX1BESVNQTEFZX0RBQ19NT0RFX0NUUkxfUChpKSk7CisJCU5WX0RFQlVHX0tNUyhkZXYsICJEQUMtJWQgbWM6IDB4JTA4eFxuIiwgaSwgbWMpOworCQlpZiAoIShtYyAmICgxIDw8IGNydGMpKSkKKwkJCWNvbnRpbnVlOwogCi0JaWYgKGRjYmVudC0+dHlwZSAhPSBPVVRQVVRfRFApCi0JCW5vdXZlYXVfYmlvc19ydW5fZGlzcGxheV90YWJsZShkZXYsIGRjYmVudCwgMCwgLTIpOworCQlzd2l0Y2ggKChtYyAmIDB4MDAwMDBmMDApID4+IDgpIHsKKwkJY2FzZSAwOiB0eXBlID0gT1VUUFVUX0FOQUxPRzsgYnJlYWs7CisJCWNhc2UgMTogdHlwZSA9IE9VVFBVVF9UVjsgYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlOVl9FUlJPUihkZXYsICJpbnZhbGlkIG1jLCBEQUMtJWQ6IDB4JTA4eFxuIiwgaSwgbWMpOworCQkJZ290byBhY2s7CisJCX0KIAotCW52NTBfY3J0Y19zZXRfY2xvY2soZGV2LCBoZWFkLCBwY2xrKTsKKwkJb3IgPSBpOworCX0KIAotCW5vdXZlYXVfYmlvc19ydW5fZGlzcGxheV90YWJsZShkZXYsIGRjYmVudCwgc2NyaXB0LCBwY2xrKTsKKwlmb3IgKGkgPSAwOyB0eXBlID09IE9VVFBVVF9BTlkgJiYgaSA8IDQ7IGkrKykgeworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgIDwgMHg5MCB8fAorCQkgICAgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg5MiB8fAorCQkgICAgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHhhMCkKKwkJCW1jID0gbnZfcmQzMihkZXYsIE5WNTBfUERJU1BMQVlfU09SX01PREVfQ1RSTF9QKGkpKTsKKwkJZWxzZQorCQkJbWMgPSBudl9yZDMyKGRldiwgTlY5MF9QRElTUExBWV9TT1JfTU9ERV9DVFJMX1AoaSkpOwogCi0JbnY1MF9kaXNwbGF5X3VuazIwX2RwX2hhY2soZGV2LCBkY2JlbnQpOworCQlOVl9ERUJVR19LTVMoZGV2LCAiU09SLSVkIG1jOiAweCUwOHhcbiIsIGksIG1jKTsKKwkJaWYgKCEobWMgJiAoMSA8PCBjcnRjKSkpCisJCQljb250aW51ZTsKIAotCXRtcCA9IG52X3JkMzIoZGV2LCBOVjUwX1BESVNQTEFZX0NSVENfQ0xLX0NUUkwyKGhlYWQpKTsKLQl0bXAgJj0gfjB4MDAwMDAwZjsKLQludl93cjMyKGRldiwgTlY1MF9QRElTUExBWV9DUlRDX0NMS19DVFJMMihoZWFkKSwgdG1wKTsKKwkJc3dpdGNoICgobWMgJiAweDAwMDAwZjAwKSA+PiA4KSB7CisJCWNhc2UgMDogdHlwZSA9IE9VVFBVVF9MVkRTOyBicmVhazsKKwkJY2FzZSAxOiB0eXBlID0gT1VUUFVUX1RNRFM7IGJyZWFrOworCQljYXNlIDI6IHR5cGUgPSBPVVRQVVRfVE1EUzsgYnJlYWs7CisJCWNhc2UgNTogdHlwZSA9IE9VVFBVVF9UTURTOyBicmVhazsKKwkJY2FzZSA4OiB0eXBlID0gT1VUUFVUX0RQOyBicmVhazsKKwkJY2FzZSA5OiB0eXBlID0gT1VUUFVUX0RQOyBicmVhazsKKwkJZGVmYXVsdDoKKwkJCU5WX0VSUk9SKGRldiwgImludmFsaWQgbWMsIFNPUi0lZDogMHglMDh4XG4iLCBpLCBtYyk7CisJCQlnb3RvIGFjazsKKwkJfQogCi0JaWYgKGRjYmVudC0+dHlwZSAhPSBPVVRQVVRfQU5BTE9HKSB7CisJCW9yID0gaTsKKwl9CisKKwlpZiAodHlwZSA9PSBPVVRQVVRfQU5ZKQorCQlnb3RvIGFjazsKKworCS8qIEVuYWJsZSB0aGUgZW5jb2RlciAqLworCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+dmJpb3MuZGNiLmVudHJpZXM7IGkrKykgeworCQlkY2IgPSAmZGV2X3ByaXYtPnZiaW9zLmRjYi5lbnRyeVtpXTsKKwkJaWYgKGRjYi0+dHlwZSA9PSB0eXBlICYmIChkY2ItPm9yICYgKDEgPDwgb3IpKSkKKwkJCWJyZWFrOworCX0KKworCWlmIChpID09IGRldl9wcml2LT52Ymlvcy5kY2IuZW50cmllcykgeworCQlOVl9FUlJPUihkZXYsICJubyBkY2IgZm9yICVkICVkIDB4JTA4eFxuIiwgb3IsIHR5cGUsIG1jKTsKKwkJZ290byBhY2s7CisJfQorCisJc2NyaXB0ID0gbnY1MF9kaXNwbGF5X3NjcmlwdF9zZWxlY3QoZGV2LCBkY2IsIG1jLCBwY2xrKTsKKwlub3V2ZWF1X2Jpb3NfcnVuX2Rpc3BsYXlfdGFibGUoZGV2LCBkY2IsIHNjcmlwdCwgcGNsayk7CisKKwludjUwX2Rpc3BsYXlfdW5rMjBfZHBfaGFjayhkZXYsIGRjYik7CisKKwlpZiAoZGNiLT50eXBlICE9IE9VVFBVVF9BTkFMT0cpIHsKIAkJdG1wID0gbnZfcmQzMihkZXYsIE5WNTBfUERJU1BMQVlfU09SX0NMS19DVFJMMihvcikpOwogCQl0bXAgJj0gfjB4MDAwMDBmMGY7CiAJCWlmIChzY3JpcHQgJiAweDAxMDApCkBAIC04NTMsMjQgKzg5NSw2MSBAQAogCQludl93cjMyKGRldiwgTlY1MF9QRElTUExBWV9EQUNfQ0xLX0NUUkwyKG9yKSwgMCk7CiAJfQogCisJZGV2X3ByaXYtPmV2b19pcnEuZGNiID0gZGNiOworCWRldl9wcml2LT5ldm9faXJxLnBjbGsgPSBwY2xrOworCWRldl9wcml2LT5ldm9faXJxLnNjcmlwdCA9IHNjcmlwdDsKKwogYWNrOgogCW52X3dyMzIoZGV2LCBOVjUwX1BESVNQTEFZX0lOVFJfMSwgTlY1MF9QRElTUExBWV9JTlRSXzFfQ0xLX1VOSzIwKTsKIAludl93cjMyKGRldiwgMHg2MTAwMzAsIDB4ODAwMDAwMDApOwogfQogCisvKiBJZiBwcm9ncmFtbWluZyBhIFRNRFMgb3V0cHV0IG9uIGEgU09SIHRoYXQgY2FuIGFsc28gYmUgY29uZmlndXJlZCBmb3IKKyAqIERpc3BsYXlQb3J0LCBtYWtlIHN1cmUgTlY1MF9TT1JfRFBfQ1RSTF9FTkFCTEUgaXMgZm9yY2VkIG9mZi4KKyAqCisgKiBJdCBsb29rcyBsaWtlIHRoZSBWQklPUyBUTURTIHNjcmlwdHMgbWFrZSBhbiBhdHRlbXB0IGF0IHRoaXMsIGhvd2V2ZXIsCisgKiB0aGUgVkJJT1Mgc2NyaXB0cyBvbiBhdCBsZWFzdCBvbmUgYm9hcmQgSSBoYXZlIG9ubHkgc3dpdGNoIGl0IG9mZiBvbgorICogbGluayAwLCBjYXVzaW5nIGEgYmxhbmsgZGlzcGxheSBpZiB0aGUgb3V0cHV0IGhhcyBwcmV2aW91c2x5IGJlZW4KKyAqIHByb2dyYW1tZWQgZm9yIERpc3BsYXlQb3J0LgorICovCitzdGF0aWMgdm9pZAorbnY1MF9kaXNwbGF5X3VuazQwX2RwX3NldF90bWRzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkY2JfZW50cnkgKmRjYikKK3sKKwlpbnQgb3IgPSBmZnMoZGNiLT5vcikgLSAxLCBsaW5rID0gIShkY2ItPmRwY29uZi5zb3IubGluayAmIDEpOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwl1MzIgdG1wOworCisJaWYgKGRjYi0+dHlwZSAhPSBPVVRQVVRfVE1EUykKKwkJcmV0dXJuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKKwkJc3RydWN0IG5vdXZlYXVfZW5jb2RlciAqbnZfZW5jb2RlciA9IG5vdXZlYXVfZW5jb2RlcihlbmNvZGVyKTsKKworCQlpZiAobnZfZW5jb2Rlci0+ZGNiLT50eXBlID09IE9VVFBVVF9EUCAmJgorCQkgICAgbnZfZW5jb2Rlci0+ZGNiLT5vciAmICgxIDw8IG9yKSkgeworCQkJdG1wICA9IG52X3JkMzIoZGV2LCBOVjUwX1NPUl9EUF9DVFJMKG9yLCBsaW5rKSk7CisJCQl0bXAgJj0gfk5WNTBfU09SX0RQX0NUUkxfRU5BQkxFRDsKKwkJCW52X3dyMzIoZGV2LCBOVjUwX1NPUl9EUF9DVFJMKG9yLCBsaW5rKSwgdG1wKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCiBzdGF0aWMgdm9pZAogbnY1MF9kaXNwbGF5X3VuazQwX2hhbmRsZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZGNiX2VudHJ5ICpkY2JlbnQ7Ci0JaW50IGhlYWQsIHBjbGssIHNjcmlwdCwgcmV0OworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRjYl9lbnRyeSAqZGNiID0gZGV2X3ByaXYtPmV2b19pcnEuZGNiOworCXUxNiBzY3JpcHQgPSBkZXZfcHJpdi0+ZXZvX2lycS5zY3JpcHQ7CisJdTMyIHVuazMwID0gbnZfcmQzMihkZXYsIDB4NjEwMDMwKSwgcGNsayA9IGRldl9wcml2LT5ldm9faXJxLnBjbGs7CiAKLQlyZXQgPSBudjUwX2Rpc3BsYXlfaXJxX2hlYWQoZGV2LCAmaGVhZCwgJmRjYmVudCk7Ci0JaWYgKHJldCkKKwlOVl9ERUJVR19LTVMoZGV2LCAiMHg2MTAwMzA6IDB4JTA4eFxuIiwgdW5rMzApOworCWRldl9wcml2LT5ldm9faXJxLmRjYiA9IE5VTEw7CisJaWYgKCFkY2IpCiAJCWdvdG8gYWNrOwotCXBjbGsgPSBudl9yZDMyKGRldiwgTlY1MF9QRElTUExBWV9DUlRDX1AoaGVhZCwgQ0xPQ0spKSAmIDB4M2ZmZmZmOwotCXNjcmlwdCA9IG52NTBfZGlzcGxheV9zY3JpcHRfc2VsZWN0KGRldiwgZGNiZW50LCBwY2xrKTsKIAotCW5vdXZlYXVfYmlvc19ydW5fZGlzcGxheV90YWJsZShkZXYsIGRjYmVudCwgc2NyaXB0LCAtcGNsayk7CisJbm91dmVhdV9iaW9zX3J1bl9kaXNwbGF5X3RhYmxlKGRldiwgZGNiLCBzY3JpcHQsIC1wY2xrKTsKKwludjUwX2Rpc3BsYXlfdW5rNDBfZHBfc2V0X3RtZHMoZGV2LCBkY2IpOwogCiBhY2s6CiAJbnZfd3IzMihkZXYsIE5WNTBfUERJU1BMQVlfSU5UUl8xLCBOVjUwX1BESVNQTEFZX0lOVFJfMV9DTEtfVU5LNDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9kaXNwbGF5LmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2Rpc3BsYXkuaAppbmRleCA1ODFkNDA1Li5jNTUxZjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2Rpc3BsYXkuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2Rpc3BsYXkuaApAQCAtMzgsOSArMzgsMTEgQEAKIHZvaWQgbnY1MF9kaXNwbGF5X2lycV9oYW5kbGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogdm9pZCBudjUwX2Rpc3BsYXlfaXJxX2hhbmRsZXJfYmgoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHZvaWQgbnY1MF9kaXNwbGF5X2lycV9ob3RwbHVnX2JoKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci1pbnQgbnY1MF9kaXNwbGF5X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitpbnQgbnY1MF9kaXNwbGF5X2Vhcmx5X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cit2b2lkIG52NTBfZGlzcGxheV9sYXRlX3Rha2Vkb3duKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogaW50IG52NTBfZGlzcGxheV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci1pbnQgbnY1MF9kaXNwbGF5X2Rlc3Ryb3koc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitpbnQgbnY1MF9kaXNwbGF5X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cit2b2lkIG52NTBfZGlzcGxheV9kZXN0cm95KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogaW50IG52NTBfY3J0Y19ibGFuayhzdHJ1Y3Qgbm91dmVhdV9jcnRjICosIGJvb2wgYmxhbmspOwogaW50IG52NTBfY3J0Y19zZXRfY2xvY2soc3RydWN0IGRybV9kZXZpY2UgKiwgaW50IGhlYWQsIGludCBwY2xrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9maWZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZpZm8uYwppbmRleCBlMjBjMGUyLi5mYjAyODFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZpZm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZpZm8uYwpAQCAtMjgsNDEgKzI4LDMzIEBACiAjaW5jbHVkZSAiZHJtLmgiCiAjaW5jbHVkZSAibm91dmVhdV9kcnYuaCIKIAotc3RydWN0IG52NTBfZmlmb19wcml2IHsKLQlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmpfcmVmICp0aGluZ29bMl07Ci0JaW50IGN1cl90aGluZ287Ci19OwotCi0jZGVmaW5lIElTX0c4MCAoKGRldl9wcml2LT5jaGlwc2V0ICYgMHhmMCkgPT0gMHg1MCkKLQogc3RhdGljIHZvaWQKLW52NTBfZmlmb19pbml0X3RoaW5nbyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQorbnY1MF9maWZvX3BsYXlsaXN0X3VwZGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG52NTBfZmlmb19wcml2ICpwcml2ID0gZGV2X3ByaXYtPmVuZ2luZS5maWZvLnByaXY7CisJc3RydWN0IG5vdXZlYXVfZmlmb19lbmdpbmUgKnBmaWZvID0gJmRldl9wcml2LT5lbmdpbmUuZmlmbzsKIAlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmpfcmVmICpjdXI7CiAJaW50IGksIG5yOwogCiAJTlZfREVCVUcoZGV2LCAiXG4iKTsKIAotCWN1ciA9IHByaXYtPnRoaW5nb1twcml2LT5jdXJfdGhpbmdvXTsKLQlwcml2LT5jdXJfdGhpbmdvID0gIXByaXYtPmN1cl90aGluZ287CisJY3VyID0gcGZpZm8tPnBsYXlsaXN0W3BmaWZvLT5jdXJfcGxheWxpc3RdOworCXBmaWZvLT5jdXJfcGxheWxpc3QgPSAhcGZpZm8tPmN1cl9wbGF5bGlzdDsKIAogCS8qIFdlIG5ldmVyIHNjaGVkdWxlIGNoYW5uZWwgMCBvciAxMjcgKi8KLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0ucHJlcGFyZV9hY2Nlc3MoZGV2LCB0cnVlKTsKIAlmb3IgKGkgPSAxLCBuciA9IDA7IGkgPCAxMjc7IGkrKykgewogCQlpZiAoZGV2X3ByaXYtPmZpZm9zW2ldICYmIGRldl9wcml2LT5maWZvc1tpXS0+cmFtZmMpCiAJCQludl93bzMyKGRldiwgY3VyLT5ncHVvYmosIG5yKyssIGkpOwogCX0KLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOworCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5mbHVzaChkZXYpOwogCiAJbnZfd3IzMihkZXYsIDB4MzJmNCwgY3VyLT5pbnN0YW5jZSA+PiAxMik7CiAJbnZfd3IzMihkZXYsIDB4MzJlYywgbnIpOwogCW52X3dyMzIoZGV2LCAweDI1MDAsIDB4MTAxKTsKIH0KIAotc3RhdGljIGludAotbnY1MF9maWZvX2NoYW5uZWxfZW5hYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjaGFubmVsLCBib29sIG50KQorc3RhdGljIHZvaWQKK252NTBfZmlmb19jaGFubmVsX2VuYWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY2hhbm5lbCkKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4gPSBkZXZfcHJpdi0+Zmlmb3NbY2hhbm5lbF07CkBAIC03MCwzNyArNjIsMjggQEAKIAogCU5WX0RFQlVHKGRldiwgImNoJWRcbiIsIGNoYW5uZWwpOwogCi0JaWYgKCFjaGFuLT5yYW1mYykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoSVNfRzgwKQorCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQogCQlpbnN0ID0gY2hhbi0+cmFtZmMtPmluc3RhbmNlID4+IDEyOwogCWVsc2UKIAkJaW5zdCA9IGNoYW4tPnJhbWZjLT5pbnN0YW5jZSA+PiA4OwotCW52X3dyMzIoZGV2LCBOVjUwX1BGSUZPX0NUWF9UQUJMRShjaGFubmVsKSwKLQkJIGluc3QgfCBOVjUwX1BGSUZPX0NUWF9UQUJMRV9DSEFOTkVMX0VOQUJMRUQpOwogCi0JaWYgKCFudCkKLQkJbnY1MF9maWZvX2luaXRfdGhpbmdvKGRldik7Ci0JcmV0dXJuIDA7CisJbnZfd3IzMihkZXYsIE5WNTBfUEZJRk9fQ1RYX1RBQkxFKGNoYW5uZWwpLCBpbnN0IHwKKwkJICAgICBOVjUwX1BGSUZPX0NUWF9UQUJMRV9DSEFOTkVMX0VOQUJMRUQpOwogfQogCiBzdGF0aWMgdm9pZAotbnY1MF9maWZvX2NoYW5uZWxfZGlzYWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY2hhbm5lbCwgYm9vbCBudCkKK252NTBfZmlmb19jaGFubmVsX2Rpc2FibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNoYW5uZWwpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1aW50MzJfdCBpbnN0OwogCi0JTlZfREVCVUcoZGV2LCAiY2glZCwgbnQ9JWRcbiIsIGNoYW5uZWwsIG50KTsKKwlOVl9ERUJVRyhkZXYsICJjaCVkXG4iLCBjaGFubmVsKTsKIAotCWlmIChJU19HODApCisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApCiAJCWluc3QgPSBOVjUwX1BGSUZPX0NUWF9UQUJMRV9JTlNUQU5DRV9NQVNLX0c4MDsKIAllbHNlCiAJCWluc3QgPSBOVjUwX1BGSUZPX0NUWF9UQUJMRV9JTlNUQU5DRV9NQVNLX0c4NDsKIAludl93cjMyKGRldiwgTlY1MF9QRklGT19DVFhfVEFCTEUoY2hhbm5lbCksIGluc3QpOwotCi0JaWYgKCFudCkKLQkJbnY1MF9maWZvX2luaXRfdGhpbmdvKGRldik7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMzMsMTIgKzExNiwxMiBAQAogCiAJZm9yIChpID0gMDsgaSA8IE5WNTBfUEZJRk9fQ1RYX1RBQkxFX19TSVpFOyBpKyspIHsKIAkJaWYgKGRldl9wcml2LT5maWZvc1tpXSkKLQkJCW52NTBfZmlmb19jaGFubmVsX2VuYWJsZShkZXYsIGksIHRydWUpOworCQkJbnY1MF9maWZvX2NoYW5uZWxfZW5hYmxlKGRldiwgaSk7CiAJCWVsc2UKLQkJCW52NTBfZmlmb19jaGFubmVsX2Rpc2FibGUoZGV2LCBpLCB0cnVlKTsKKwkJCW52NTBfZmlmb19jaGFubmVsX2Rpc2FibGUoZGV2LCBpKTsKIAl9CiAKLQludjUwX2ZpZm9faW5pdF90aGluZ28oZGV2KTsKKwludjUwX2ZpZm9fcGxheWxpc3RfdXBkYXRlKGRldik7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xNjIsNDEgKzE0NSwzOCBAQAogCW52X3dyMzIoZGV2LCAweDMyNzAsIDApOwogCiAJLyogRW5hYmxlIGR1bW15IGNoYW5uZWxzIHNldHVwIGJ5IG52NTBfaW5zdG1lbS5jICovCi0JbnY1MF9maWZvX2NoYW5uZWxfZW5hYmxlKGRldiwgMCwgdHJ1ZSk7Ci0JbnY1MF9maWZvX2NoYW5uZWxfZW5hYmxlKGRldiwgMTI3LCB0cnVlKTsKKwludjUwX2ZpZm9fY2hhbm5lbF9lbmFibGUoZGV2LCAwKTsKKwludjUwX2ZpZm9fY2hhbm5lbF9lbmFibGUoZGV2LCAxMjcpOwogfQogCiBpbnQKIG52NTBfZmlmb19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgbnY1MF9maWZvX3ByaXYgKnByaXY7CisJc3RydWN0IG5vdXZlYXVfZmlmb19lbmdpbmUgKnBmaWZvID0gJmRldl9wcml2LT5lbmdpbmUuZmlmbzsKIAlpbnQgcmV0OwogCiAJTlZfREVCVUcoZGV2LCAiXG4iKTsKIAotCXByaXYgPSBkZXZfcHJpdi0+ZW5naW5lLmZpZm8ucHJpdjsKLQlpZiAocHJpdikgewotCQlwcml2LT5jdXJfdGhpbmdvID0gIXByaXYtPmN1cl90aGluZ287CisJaWYgKHBmaWZvLT5wbGF5bGlzdFswXSkgeworCQlwZmlmby0+Y3VyX3BsYXlsaXN0ID0gIXBmaWZvLT5jdXJfcGxheWxpc3Q7CiAJCWdvdG8ganVzdF9yZXNldDsKIAl9CiAKLQlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByaXYpCi0JCXJldHVybiAtRU5PTUVNOwotCWRldl9wcml2LT5lbmdpbmUuZmlmby5wcml2ID0gcHJpdjsKLQogCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ld19yZWYoZGV2LCBOVUxMLCBOVUxMLCAwLCAxMjgqNCwgMHgxMDAwLAotCQkJCSAgICAgTlZPQkpfRkxBR19aRVJPX0FMTE9DLCAmcHJpdi0+dGhpbmdvWzBdKTsKKwkJCQkgICAgIE5WT0JKX0ZMQUdfWkVST19BTExPQywKKwkJCQkgICAgICZwZmlmby0+cGxheWxpc3RbMF0pOwogCWlmIChyZXQpIHsKLQkJTlZfRVJST1IoZGV2LCAiZXJyb3IgY3JlYXRpbmcgdGhpbmdvMDogJWRcbiIsIHJldCk7CisJCU5WX0VSUk9SKGRldiwgImVycm9yIGNyZWF0aW5nIHBsYXlsaXN0IDA6ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ld19yZWYoZGV2LCBOVUxMLCBOVUxMLCAwLCAxMjgqNCwgMHgxMDAwLAotCQkJCSAgICAgTlZPQkpfRkxBR19aRVJPX0FMTE9DLCAmcHJpdi0+dGhpbmdvWzFdKTsKKwkJCQkgICAgIE5WT0JKX0ZMQUdfWkVST19BTExPQywKKwkJCQkgICAgICZwZmlmby0+cGxheWxpc3RbMV0pOwogCWlmIChyZXQpIHsKLQkJTlZfRVJST1IoZGV2LCAiZXJyb3IgY3JlYXRpbmcgdGhpbmdvMTogJWRcbiIsIHJldCk7CisJCW5vdXZlYXVfZ3B1b2JqX3JlZl9kZWwoZGV2LCAmcGZpZm8tPnBsYXlsaXN0WzBdKTsKKwkJTlZfRVJST1IoZGV2LCAiZXJyb3IgY3JlYXRpbmcgcGxheWxpc3QgMTogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0yMTYsMTggKzE5NiwxNSBAQAogbnY1MF9maWZvX3Rha2Vkb3duKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgbnY1MF9maWZvX3ByaXYgKnByaXYgPSBkZXZfcHJpdi0+ZW5naW5lLmZpZm8ucHJpdjsKKwlzdHJ1Y3Qgbm91dmVhdV9maWZvX2VuZ2luZSAqcGZpZm8gPSAmZGV2X3ByaXYtPmVuZ2luZS5maWZvOwogCiAJTlZfREVCVUcoZGV2LCAiXG4iKTsKIAotCWlmICghcHJpdikKKwlpZiAoIXBmaWZvLT5wbGF5bGlzdFswXSkKIAkJcmV0dXJuOwogCi0Jbm91dmVhdV9ncHVvYmpfcmVmX2RlbChkZXYsICZwcml2LT50aGluZ29bMF0pOwotCW5vdXZlYXVfZ3B1b2JqX3JlZl9kZWwoZGV2LCAmcHJpdi0+dGhpbmdvWzFdKTsKLQotCWRldl9wcml2LT5lbmdpbmUuZmlmby5wcml2ID0gTlVMTDsKLQlrZnJlZShwcml2KTsKKwlub3V2ZWF1X2dwdW9ial9yZWZfZGVsKGRldiwgJnBmaWZvLT5wbGF5bGlzdFswXSk7CisJbm91dmVhdV9ncHVvYmpfcmVmX2RlbChkZXYsICZwZmlmby0+cGxheWxpc3RbMV0pOwogfQogCiBpbnQKQEAgLTI0OCw3ICsyMjUsNyBAQAogCiAJTlZfREVCVUcoZGV2LCAiY2glZFxuIiwgY2hhbi0+aWQpOwogCi0JaWYgKElTX0c4MCkgeworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKSB7CiAJCXVpbnQzMl90IHJhbWluX3BvZmZzZXQgPSBjaGFuLT5yYW1pbi0+Z3B1b2JqLT5pbV9wcmFtaW4tPnN0YXJ0OwogCQl1aW50MzJfdCByYW1pbl92b2Zmc2V0ID0gY2hhbi0+cmFtaW4tPmdwdW9iai0+aW1fYmFja2luZ19zdGFydDsKIApAQCAtMjgxLDEwICsyNTgsMTAgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+Y29udGV4dF9zd2l0Y2hfbG9jaywgZmxhZ3MpOwogCi0JZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByZXBhcmVfYWNjZXNzKGRldiwgdHJ1ZSk7Ci0KIAludl93bzMyKGRldiwgcmFtZmMsIDB4NDgvNCwgY2hhbi0+cHVzaGJ1Zi0+aW5zdGFuY2UgPj4gNCk7Ci0JbnZfd28zMihkZXYsIHJhbWZjLCAweDgwLzQsICgweGMgPDwgMjQpIHwgKGNoYW4tPnJhbWh0LT5pbnN0YW5jZSA+PiA0KSk7CisJbnZfd28zMihkZXYsIHJhbWZjLCAweDgwLzQsICgwIDw8IDI3KSAvKiA0S2lCICovIHwKKwkJCQkgICAgKDQgPDwgMjQpIC8qIFNFQVJDSF9GVUxMICovIHwKKwkJCQkgICAgKGNoYW4tPnJhbWh0LT5pbnN0YW5jZSA+PiA0KSk7CiAJbnZfd28zMihkZXYsIHJhbWZjLCAweDQ0LzQsIDB4MjEwMWZmZmYpOwogCW52X3dvMzIoZGV2LCByYW1mYywgMHg2MC80LCAweDdmZmZmZmZmKTsKIAludl93bzMyKGRldiwgcmFtZmMsIDB4NDAvNCwgMHgwMDAwMDAwMCk7CkBAIC0yOTUsNyArMjcyLDcgQEAKIAkJCQkgICAgY2hhbi0+ZG1hLmliX2Jhc2UgKiA0KTsKIAludl93bzMyKGRldiwgcmFtZmMsIDB4NTQvNCwgZHJtX29yZGVyKGNoYW4tPmRtYS5pYl9tYXggKyAxKSA8PCAxNik7CiAKLQlpZiAoIUlTX0c4MCkgeworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDUwKSB7CiAJCW52X3dvMzIoZGV2LCBjaGFuLT5yYW1pbi0+Z3B1b2JqLCAwLCBjaGFuLT5pZCk7CiAJCW52X3dvMzIoZGV2LCBjaGFuLT5yYW1pbi0+Z3B1b2JqLCAxLAogCQkJCQkJY2hhbi0+cmFtZmMtPmluc3RhbmNlID4+IDgpOwpAQCAtMzA0LDE2ICsyODEsMTAgQEAKIAkJbnZfd28zMihkZXYsIHJhbWZjLCAweDk4LzQsIGNoYW4tPnJhbWluLT5pbnN0YW5jZSA+PiAxMik7CiAJfQogCi0JZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLmZpbmlzaF9hY2Nlc3MoZGV2KTsKKwlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmx1c2goZGV2KTsKIAotCXJldCA9IG52NTBfZmlmb19jaGFubmVsX2VuYWJsZShkZXYsIGNoYW4tPmlkLCBmYWxzZSk7Ci0JaWYgKHJldCkgewotCQlOVl9FUlJPUihkZXYsICJlcnJvciBlbmFibGluZyBjaCVkOiAlZFxuIiwgY2hhbi0+aWQsIHJldCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7Ci0JCW5vdXZlYXVfZ3B1b2JqX3JlZl9kZWwoZGV2LCAmY2hhbi0+cmFtZmMpOwotCQlyZXR1cm4gcmV0OwotCX0KLQorCW52NTBfZmlmb19jaGFubmVsX2VuYWJsZShkZXYsIGNoYW4tPmlkKTsKKwludjUwX2ZpZm9fcGxheWxpc3RfdXBkYXRlKGRldik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmNvbnRleHRfc3dpdGNoX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTMyOCwxMSArMjk5LDEyIEBACiAKIAkvKiBUaGlzIHdpbGwgZW5zdXJlIHRoZSBjaGFubmVsIGlzIHNlZW4gYXMgZGlzYWJsZWQuICovCiAJY2hhbi0+cmFtZmMgPSBOVUxMOwotCW52NTBfZmlmb19jaGFubmVsX2Rpc2FibGUoZGV2LCBjaGFuLT5pZCwgZmFsc2UpOworCW52NTBfZmlmb19jaGFubmVsX2Rpc2FibGUoZGV2LCBjaGFuLT5pZCk7CiAKIAkvKiBEdW1teSBjaGFubmVsLCBhbHNvIHVzZWQgb24gY2ggMTI3ICovCiAJaWYgKGNoYW4tPmlkID09IDApCi0JCW52NTBfZmlmb19jaGFubmVsX2Rpc2FibGUoZGV2LCAxMjcsIGZhbHNlKTsKKwkJbnY1MF9maWZvX2NoYW5uZWxfZGlzYWJsZShkZXYsIDEyNyk7CisJbnY1MF9maWZvX3BsYXlsaXN0X3VwZGF0ZShkZXYpOwogCiAJbm91dmVhdV9ncHVvYmpfcmVmX2RlbChkZXYsICZyYW1mYyk7CiAJbm91dmVhdV9ncHVvYmpfcmVmX2RlbChkZXYsICZjaGFuLT5jYWNoZSk7CkBAIC0zNDksOCArMzIxLDYgQEAKIAogCU5WX0RFQlVHKGRldiwgImNoJWRcbiIsIGNoYW4tPmlkKTsKIAotCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5wcmVwYXJlX2FjY2VzcyhkZXYsIGZhbHNlKTsKLQogCW52X3dyMzIoZGV2LCAweDMzMzAsIG52X3JvMzIoZGV2LCByYW1mYywgMHgwMC80KSk7CiAJbnZfd3IzMihkZXYsIDB4MzMzNCwgbnZfcm8zMihkZXYsIHJhbWZjLCAweDA0LzQpKTsKIAludl93cjMyKGRldiwgMHgzMjQwLCBudl9ybzMyKGRldiwgcmFtZmMsIDB4MDgvNCkpOwpAQCAtMzk2LDcgKzM2Niw3IEBACiAJbnZfd3IzMihkZXYsIE5WMDNfUEZJRk9fQ0FDSEUxX0dFVCwgMCk7CiAKIAkvKiBndWVzc2luZyB0aGF0IGFsbCB0aGUgMHgzNHh4IHJlZ3MgYXJlbid0IG9uIE5WNTAgKi8KLQlpZiAoIUlTX0c4MCkgeworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDUwKSB7CiAJCW52X3dyMzIoZGV2LCAweDM0MGMsIG52X3JvMzIoZGV2LCByYW1mYywgMHg4OC80KSk7CiAJCW52X3dyMzIoZGV2LCAweDM0MDAsIG52X3JvMzIoZGV2LCByYW1mYywgMHg4Yy80KSk7CiAJCW52X3dyMzIoZGV2LCAweDM0MDQsIG52X3JvMzIoZGV2LCByYW1mYywgMHg5MC80KSk7CkBAIC00MDQsOCArMzc0LDYgQEAKIAkJbnZfd3IzMihkZXYsIDB4MzQxMCwgbnZfcm8zMihkZXYsIHJhbWZjLCAweDk4LzQpKTsKIAl9CiAKLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOwotCiAJbnZfd3IzMihkZXYsIE5WMDNfUEZJRk9fQ0FDSEUxX1BVU0gxLCBjaGFuLT5pZCB8ICgxPDwxNikpOwogCXJldHVybiAwOwogfQpAQCAtNDM0LDggKzQwMiw2IEBACiAJcmFtZmMgPSBjaGFuLT5yYW1mYy0+Z3B1b2JqOwogCWNhY2hlID0gY2hhbi0+Y2FjaGUtPmdwdW9iajsKIAotCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5wcmVwYXJlX2FjY2VzcyhkZXYsIHRydWUpOwotCiAJbnZfd28zMihkZXYsIHJhbWZjLCAweDAwLzQsIG52X3JkMzIoZGV2LCAweDMzMzApKTsKIAludl93bzMyKGRldiwgcmFtZmMsIDB4MDQvNCwgbnZfcmQzMihkZXYsIDB4MzMzNCkpOwogCW52X3dvMzIoZGV2LCByYW1mYywgMHgwOC80LCBudl9yZDMyKGRldiwgMHgzMjQwKSk7CkBAIC00ODIsNyArNDQ4LDcgQEAKIAl9CiAKIAkvKiBndWVzc2luZyB0aGF0IGFsbCB0aGUgMHgzNHh4IHJlZ3MgYXJlbid0IG9uIE5WNTAgKi8KLQlpZiAoIUlTX0c4MCkgeworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDUwKSB7CiAJCW52X3dvMzIoZGV2LCByYW1mYywgMHg4NC80LCBwdHIgPj4gMSk7CiAJCW52X3dvMzIoZGV2LCByYW1mYywgMHg4OC80LCBudl9yZDMyKGRldiwgMHgzNDBjKSk7CiAJCW52X3dvMzIoZGV2LCByYW1mYywgMHg4Yy80LCBudl9yZDMyKGRldiwgMHgzNDAwKSk7CkBAIC00OTEsNyArNDU3LDcgQEAKIAkJbnZfd28zMihkZXYsIHJhbWZjLCAweDk4LzQsIG52X3JkMzIoZGV2LCAweDM0MTApKTsKIAl9CiAKLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOworCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5mbHVzaChkZXYpOwogCiAJLypYWFg6IHByb2JhYmx5IHJlbG9hZCBjaDEyNyAoTlVMTCkgc3RhdGUgYmFjayB0b28gKi8KIAludl93cjMyKGRldiwgTlYwM19QRklGT19DQUNIRTFfUFVTSDEsIDEyNyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dwaW8uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3Bpby5jCmluZGV4IGJiNDdhZDcuLmIyZmFiMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3Bpby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3Bpby5jCkBAIC03NCwzICs3NCwzOCBAQAogCW52X3dyMzIoZGV2LCByLCB2KTsKIAlyZXR1cm4gMDsKIH0KKwordm9pZAorbnY1MF9ncGlvX2lycV9lbmFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBkY2JfZ3Bpb190YWcgdGFnLCBib29sIG9uKQoreworCXN0cnVjdCBkY2JfZ3Bpb19lbnRyeSAqZ3BpbzsKKwl1MzIgcmVnLCBtYXNrOworCisJZ3BpbyA9IG5vdXZlYXVfYmlvc19ncGlvX2VudHJ5KGRldiwgdGFnKTsKKwlpZiAoIWdwaW8pIHsKKwkJTlZfRVJST1IoZGV2LCAiZ3BpbyB0YWcgMHglMDJ4IG5vdCBmb3VuZFxuIiwgdGFnKTsKKwkJcmV0dXJuOworCX0KKworCXJlZyAgPSBncGlvLT5saW5lIDwgMTYgPyAweGUwNTAgOiAweGUwNzA7CisJbWFzayA9IDB4MDAwMTAwMDEgPDwgKGdwaW8tPmxpbmUgJiAweGYpOworCisJbnZfd3IzMihkZXYsIHJlZyArIDQsIG1hc2spOworCW52X21hc2soZGV2LCByZWcgKyAwLCBtYXNrLCBvbiA/IG1hc2sgOiAwKTsKK30KKworaW50CitudjUwX2dwaW9faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwkvKiBkaXNhYmxlLCBhbmQgYWNrIGFueSBwZW5kaW5nIGdwaW8gaW50ZXJydXB0cyAqLworCW52X3dyMzIoZGV2LCAweGUwNTAsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweGUwNTQsIDB4ZmZmZmZmZmYpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweDkwKSB7CisJCW52X3dyMzIoZGV2LCAweGUwNzAsIDB4MDAwMDAwMDApOworCQludl93cjMyKGRldiwgMHhlMDc0LCAweGZmZmZmZmZmKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYwppbmRleCBiMjAzZDA2Li4xNDEzMDI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dyYXBoLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ncmFwaC5jCkBAIC0zMCw4ICszMCw2IEBACiAKICNpbmNsdWRlICJub3V2ZWF1X2dyY3R4LmgiCiAKLSNkZWZpbmUgSVNfRzgwICgoZGV2X3ByaXYtPmNoaXBzZXQgJiAweGYwKSA9PSAweDUwKQotCiBzdGF0aWMgdm9pZAogbnY1MF9ncmFwaF9pbml0X3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CkBAIC0xMDMsMzcgKzEwMSwzMyBAQAogbnY1MF9ncmFwaF9pbml0X2N0eGN0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfZ3JjdHggY3R4ID0ge307CisJdWludDMyX3QgKmNwOworCWludCBpOwogCiAJTlZfREVCVUcoZGV2LCAiXG4iKTsKIAotCWlmIChub3V2ZWF1X2N0eGZ3KSB7Ci0JCW5vdXZlYXVfZ3JjdHhfcHJvZ19sb2FkKGRldik7Ci0JCWRldl9wcml2LT5lbmdpbmUuZ3JhcGguZ3JjdHhfc2l6ZSA9IDB4NzAwMDA7CisJY3AgPSBrbWFsbG9jKDUxMiAqIDQsIEdGUF9LRVJORUwpOworCWlmICghY3ApIHsKKwkJTlZfRVJST1IoZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGN0eHByb2dcbiIpOworCQlkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLmFjY2VsX2Jsb2NrZWQgPSB0cnVlOworCQlyZXR1cm4gMDsKIAl9Ci0JaWYgKCFkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLmN0eHByb2cpIHsKLQkJc3RydWN0IG5vdXZlYXVfZ3JjdHggY3R4ID0ge307Ci0JCXVpbnQzMl90ICpjcCA9IGttYWxsb2MoNTEyICogNCwgR0ZQX0tFUk5FTCk7Ci0JCWludCBpOwotCQlpZiAoIWNwKSB7Ci0JCQlOVl9FUlJPUihkZXYsICJDb3VsZG4ndCBhbGxvYyBjdHhwcm9nISBEaXNhYmxpbmcgYWNjZWxlcmF0aW9uLlxuIik7Ci0JCQlkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLmFjY2VsX2Jsb2NrZWQgPSB0cnVlOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY3R4LmRldiA9IGRldjsKLQkJY3R4Lm1vZGUgPSBOT1VWRUFVX0dSQ1RYX1BST0c7Ci0JCWN0eC5kYXRhID0gY3A7Ci0JCWN0eC5jdHhwcm9nX21heCA9IDUxMjsKLQkJaWYgKCFudjUwX2dyY3R4X2luaXQoJmN0eCkpIHsKLQkJCWRldl9wcml2LT5lbmdpbmUuZ3JhcGguZ3JjdHhfc2l6ZSA9IGN0eC5jdHh2YWxzX3BvcyAqIDQ7CiAKLQkJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9DVFhDVExfVUNPREVfSU5ERVgsIDApOwotCQkJZm9yIChpID0gMDsgaSA8IGN0eC5jdHhwcm9nX2xlbjsgaSsrKQotCQkJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9DVFhDVExfVUNPREVfREFUQSwgY3BbaV0pOwotCQl9IGVsc2UgewotCQkJZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC5hY2NlbF9ibG9ja2VkID0gdHJ1ZTsKLQkJfQotCQlrZnJlZShjcCk7CisJY3R4LmRldiA9IGRldjsKKwljdHgubW9kZSA9IE5PVVZFQVVfR1JDVFhfUFJPRzsKKwljdHguZGF0YSA9IGNwOworCWN0eC5jdHhwcm9nX21heCA9IDUxMjsKKwlpZiAoIW52NTBfZ3JjdHhfaW5pdCgmY3R4KSkgeworCQlkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLmdyY3R4X3NpemUgPSBjdHguY3R4dmFsc19wb3MgKiA0OworCisJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9DVFhDVExfVUNPREVfSU5ERVgsIDApOworCQlmb3IgKGkgPSAwOyBpIDwgY3R4LmN0eHByb2dfbGVuOyBpKyspCisJCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfQ1RYQ1RMX1VDT0RFX0RBVEEsIGNwW2ldKTsKKwl9IGVsc2UgeworCQlkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLmFjY2VsX2Jsb2NrZWQgPSB0cnVlOwogCX0KKwlrZnJlZShjcCk7CiAKIAludl93cjMyKGRldiwgMHg0MDAzMjAsIDQpOwogCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9DVFhDVExfQ1VSLCAwKTsKQEAgLTE2NCw3ICsxNTgsNiBAQAogbnY1MF9ncmFwaF90YWtlZG93bihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCU5WX0RFQlVHKGRldiwgIlxuIik7Ci0Jbm91dmVhdV9ncmN0eF9maW5pKGRldik7CiB9CiAKIHZvaWQKQEAgLTIxMiw4ICsyMDUsOSBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKnJhbWluID0gY2hhbi0+cmFtaW4tPmdwdW9iajsKLQlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKmN0eDsKKwlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKm9iajsKIAlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfZW5naW5lICpwZ3JhcGggPSAmZGV2X3ByaXYtPmVuZ2luZS5ncmFwaDsKKwlzdHJ1Y3Qgbm91dmVhdV9ncmN0eCBjdHggPSB7fTsKIAlpbnQgaGRyLCByZXQ7CiAKIAlOVl9ERUJVRyhkZXYsICJjaCVkXG4iLCBjaGFuLT5pZCk7CkBAIC0yMjMsMTAgKzIxNyw5IEBACiAJCQkJICAgICBOVk9CSl9GTEFHX1pFUk9fRlJFRSwgJmNoYW4tPnJhbWluX2dyY3R4KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwotCWN0eCA9IGNoYW4tPnJhbWluX2dyY3R4LT5ncHVvYmo7CisJb2JqID0gY2hhbi0+cmFtaW5fZ3JjdHgtPmdwdW9iajsKIAotCWhkciA9IElTX0c4MCA/IDB4MjAwIDogMHgyMDsKLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0ucHJlcGFyZV9hY2Nlc3MoZGV2LCB0cnVlKTsKKwloZHIgPSAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkgPyAweDIwMCA6IDB4MjA7CiAJbnZfd28zMihkZXYsIHJhbWluLCAoaGRyICsgMHgwMCkvNCwgMHgwMDE5MDAwMik7CiAJbnZfd28zMihkZXYsIHJhbWluLCAoaGRyICsgMHgwNCkvNCwgY2hhbi0+cmFtaW5fZ3JjdHgtPmluc3RhbmNlICsKIAkJCQkJICAgcGdyYXBoLT5ncmN0eF9zaXplIC0gMSk7CkBAIC0yMzQsMjEgKzIyNywxNSBAQAogCW52X3dvMzIoZGV2LCByYW1pbiwgKGhkciArIDB4MGMpLzQsIDApOwogCW52X3dvMzIoZGV2LCByYW1pbiwgKGhkciArIDB4MTApLzQsIDApOwogCW52X3dvMzIoZGV2LCByYW1pbiwgKGhkciArIDB4MTQpLzQsIDB4MDAwMTAwMDApOwotCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5maW5pc2hfYWNjZXNzKGRldik7CiAKLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0ucHJlcGFyZV9hY2Nlc3MoZGV2LCB0cnVlKTsKLQlpZiAoIXBncmFwaC0+Y3R4cHJvZykgewotCQlzdHJ1Y3Qgbm91dmVhdV9ncmN0eCBjdHggPSB7fTsKLQkJY3R4LmRldiA9IGNoYW4tPmRldjsKLQkJY3R4Lm1vZGUgPSBOT1VWRUFVX0dSQ1RYX1ZBTFM7Ci0JCWN0eC5kYXRhID0gY2hhbi0+cmFtaW5fZ3JjdHgtPmdwdW9iajsKLQkJbnY1MF9ncmN0eF9pbml0KCZjdHgpOwotCX0gZWxzZSB7Ci0JCW5vdXZlYXVfZ3JjdHhfdmFsc19sb2FkKGRldiwgY3R4KTsKLQl9Ci0JbnZfd28zMihkZXYsIGN0eCwgMHgwMDAwMC80LCBjaGFuLT5yYW1pbi0+aW5zdGFuY2UgPj4gMTIpOwotCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5maW5pc2hfYWNjZXNzKGRldik7CisJY3R4LmRldiA9IGNoYW4tPmRldjsKKwljdHgubW9kZSA9IE5PVVZFQVVfR1JDVFhfVkFMUzsKKwljdHguZGF0YSA9IG9iajsKKwludjUwX2dyY3R4X2luaXQoJmN0eCk7CiAKKwludl93bzMyKGRldiwgb2JqLCAweDAwMDAwLzQsIGNoYW4tPnJhbWluLT5pbnN0YW5jZSA+PiAxMik7CisKKwlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmx1c2goZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjU3LDE3ICsyNDQsMTYgQEAKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OwogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JaW50IGksIGhkciA9IElTX0c4MCA/IDB4MjAwIDogMHgyMDsKKwlpbnQgaSwgaGRyID0gKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApID8gMHgyMDAgOiAweDIwOwogCiAJTlZfREVCVUcoZGV2LCAiY2glZFxuIiwgY2hhbi0+aWQpOwogCiAJaWYgKCFjaGFuLT5yYW1pbiB8fCAhY2hhbi0+cmFtaW4tPmdwdW9iaikKIAkJcmV0dXJuOwogCi0JZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByZXBhcmVfYWNjZXNzKGRldiwgdHJ1ZSk7CiAJZm9yIChpID0gaGRyOyBpIDwgaGRyICsgMjQ7IGkgKz0gNCkKIAkJbnZfd28zMihkZXYsIGNoYW4tPnJhbWluLT5ncHVvYmosIGkvNCwgMCk7Ci0JZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLmZpbmlzaF9hY2Nlc3MoZGV2KTsKKwlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmx1c2goZGV2KTsKIAogCW5vdXZlYXVfZ3B1b2JqX3JlZl9kZWwoZGV2LCAmY2hhbi0+cmFtaW5fZ3JjdHgpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9pbnN0bWVtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2luc3RtZW0uYwppbmRleCA1ZjIxZGYzLi4zN2M3YjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2luc3RtZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2luc3RtZW0uYwpAQCAtMzUsOCArMzUsNiBAQAogCXN0cnVjdCBub3V2ZWF1X2dwdW9ial9yZWYgKnByYW1pbl9wdDsKIAlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmpfcmVmICpwcmFtaW5fYmFyOwogCXN0cnVjdCBub3V2ZWF1X2dwdW9ial9yZWYgKmZiX2JhcjsKLQotCWJvb2wgbGFzdF9hY2Nlc3Nfd3I7CiB9OwogCiAjZGVmaW5lIE5WNTBfSU5TVE1FTV9QQUdFX1NISUZUIDEyCkBAIC0xNDcsNyArMTQ1LDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKG5vdXZlYXVfbWVtX2luaXRfaGVhcCgmY2hhbi0+cmFtaW5faGVhcCwgY19iYXNlLCBjX3NpemUgLSBjX2Jhc2UpKQorCWlmIChkcm1fbW1faW5pdCgmY2hhbi0+cmFtaW5faGVhcCwgY19iYXNlLCBjX3NpemUgLSBjX2Jhc2UpKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIFJBTUZDICsgemVybyBjaGFubmVsJ3MgUFJBTUlOIHVwIHRvIHN0YXJ0IG9mIFZNIHBhZ2VkaXIgKi8KQEAgLTI0MSw3ICsyMzksNyBAQAogCQlyZXR1cm4gcmV0OwogCUJBUjBfV0kzMihwcml2LT5mYl9iYXItPmdwdW9iaiwgMHgwMCwgMHg3ZmMwMDAwMCk7CiAJQkFSMF9XSTMyKHByaXYtPmZiX2Jhci0+Z3B1b2JqLCAweDA0LCAweDQwMDAwMDAwICsKLQkJCQkJICAgICAgZHJtX2dldF9yZXNvdXJjZV9sZW4oZGV2LCAxKSAtIDEpOworCQkJCQkgICAgICBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgMSkgLSAxKTsKIAlCQVIwX1dJMzIocHJpdi0+ZmJfYmFyLT5ncHVvYmosIDB4MDgsIDB4NDAwMDAwMDApOwogCUJBUjBfV0kzMihwcml2LT5mYl9iYXItPmdwdW9iaiwgMHgwYywgMHgwMDAwMDAwMCk7CiAJQkFSMF9XSTMyKHByaXYtPmZiX2Jhci0+Z3B1b2JqLCAweDEwLCAweDAwMDAwMDAwKTsKQEAgLTI2MiwyMyArMjYwLDE4IEBACiAKIAkvKiBBc3N1bWUgdGhhdCBwcmF5aW5nIGlzbid0IGVub3VnaCwgY2hlY2sgdGhhdCB3ZSBjYW4gcmUtcmVhZCB0aGUKIAkgKiBlbnRpcmUgZmFrZSBjaGFubmVsIGJhY2sgZnJvbSB0aGUgUFJBTUlOIEJBUiAqLwotCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5wcmVwYXJlX2FjY2VzcyhkZXYsIGZhbHNlKTsKIAlmb3IgKGkgPSAwOyBpIDwgY19zaXplOyBpICs9IDQpIHsKIAkJaWYgKG52X3JkMzIoZGV2LCBOVl9SQU1JTiArIGkpICE9IG52X3JpMzIoZGV2LCBpKSkgewogCQkJTlZfRVJST1IoZGV2LCAiRXJyb3IgcmVhZGluZyBiYWNrIFBSQU1JTiBhdCAweCUwOHhcbiIsCiAJCQkJCQkJCQlpKTsKLQkJCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5maW5pc2hfYWNjZXNzKGRldik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOwogCiAJbnZfd3IzMihkZXYsIE5WNTBfUFVOS19CQVIwX1BSQU1JTiwgc2F2ZV9udjAwMTcwMCk7CiAKIAkvKiBHbG9iYWwgUFJBTUlOIGhlYXAgKi8KLQlpZiAobm91dmVhdV9tZW1faW5pdF9oZWFwKCZkZXZfcHJpdi0+cmFtaW5faGVhcCwKLQkJCQkgIGNfc2l6ZSwgZGV2X3ByaXYtPnJhbWluX3NpemUgLSBjX3NpemUpKSB7Ci0JCWRldl9wcml2LT5yYW1pbl9oZWFwID0gTlVMTDsKKwlpZiAoZHJtX21tX2luaXQoJmRldl9wcml2LT5yYW1pbl9oZWFwLCBjX3NpemUsIGRldl9wcml2LT5yYW1pbl9zaXplIC0gY19zaXplKSkgewogCQlOVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gaW5pdCBSQU1JTiBoZWFwXG4iKTsKIAl9CiAKQEAgLTMyMSw3ICszMTQsNyBAQAogCQlub3V2ZWF1X2dwdW9ial9kZWwoZGV2LCAmY2hhbi0+dm1fcGQpOwogCQlub3V2ZWF1X2dwdW9ial9yZWZfZGVsKGRldiwgJmNoYW4tPnJhbWZjKTsKIAkJbm91dmVhdV9ncHVvYmpfcmVmX2RlbChkZXYsICZjaGFuLT5yYW1pbik7Ci0JCW5vdXZlYXVfbWVtX3Rha2Vkb3duKCZjaGFuLT5yYW1pbl9oZWFwKTsKKwkJZHJtX21tX3Rha2Vkb3duKCZjaGFuLT5yYW1pbl9oZWFwKTsKIAogCQlkZXZfcHJpdi0+Zmlmb3NbMF0gPSBkZXZfcHJpdi0+Zmlmb3NbMTI3XSA9IE5VTEw7CiAJCWtmcmVlKGNoYW4pOwpAQCAtNDM2LDE0ICs0MjksMTQgQEAKIAlpZiAoIWdwdW9iai0+aW1fYmFja2luZyB8fCAhZ3B1b2JqLT5pbV9wcmFtaW4gfHwgZ3B1b2JqLT5pbV9ib3VuZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlOVl9ERUJVRyhkZXYsICJzdD0weCUwbGx4IHN6PTB4JTBsbHhcbiIsCisJTlZfREVCVUcoZGV2LCAic3Q9MHglbHggc3o9MHglbHhcbiIsCiAJCSBncHVvYmotPmltX3ByYW1pbi0+c3RhcnQsIGdwdW9iai0+aW1fcHJhbWluLT5zaXplKTsKIAogCXB0ZSAgICAgPSAoZ3B1b2JqLT5pbV9wcmFtaW4tPnN0YXJ0ID4+IDEyKSA8PCAxOwogCXB0ZV9lbmQgPSAoKGdwdW9iai0+aW1fcHJhbWluLT5zaXplID4+IDEyKSA8PCAxKSArIHB0ZTsKIAl2cmFtICAgID0gZ3B1b2JqLT5pbV9iYWNraW5nX3N0YXJ0OwogCi0JTlZfREVCVUcoZGV2LCAicHJhbWluPTB4JWxseCwgcHRlPSVkLCBwdGVfZW5kPSVkXG4iLAorCU5WX0RFQlVHKGRldiwgInByYW1pbj0weCVseCwgcHRlPSVkLCBwdGVfZW5kPSVkXG4iLAogCQkgZ3B1b2JqLT5pbV9wcmFtaW4tPnN0YXJ0LCBwdGUsIHB0ZV9lbmQpOwogCU5WX0RFQlVHKGRldiwgImZpcnN0IHZyYW0gcGFnZTogMHglMDh4XG4iLCBncHVvYmotPmltX2JhY2tpbmdfc3RhcnQpOwogCkBAIC00NTMsMjcgKzQ0NiwxNSBAQAogCQl2cmFtIHw9IDB4MzA7CiAJfQogCi0JZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByZXBhcmVfYWNjZXNzKGRldiwgdHJ1ZSk7CiAJd2hpbGUgKHB0ZSA8IHB0ZV9lbmQpIHsKIAkJbnZfd28zMihkZXYsIHByYW1pbl9wdCwgcHRlKyssIGxvd2VyXzMyX2JpdHModnJhbSkpOwogCQludl93bzMyKGRldiwgcHJhbWluX3B0LCBwdGUrKywgdXBwZXJfMzJfYml0cyh2cmFtKSk7CiAJCXZyYW0gKz0gTlY1MF9JTlNUTUVNX1BBR0VfU0laRTsKIAl9Ci0JZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLmZpbmlzaF9hY2Nlc3MoZGV2KTsKKwlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmx1c2goZGV2KTsKIAotCW52X3dyMzIoZGV2LCAweDEwMGM4MCwgMHgwMDA0MDAwMSk7Ci0JaWYgKCFudl93YWl0KDB4MTAwYzgwLCAweDAwMDAwMDAxLCAweDAwMDAwMDAwKSkgewotCQlOVl9FUlJPUihkZXYsICJ0aW1lb3V0OiAoMHgxMDBjODAgJiAxKSA9PSAwICgxKVxuIik7Ci0JCU5WX0VSUk9SKGRldiwgIjB4MTAwYzgwID0gMHglMDh4XG4iLCBudl9yZDMyKGRldiwgMHgxMDBjODApKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQludl93cjMyKGRldiwgMHgxMDBjODAsIDB4MDAwNjAwMDEpOwotCWlmICghbnZfd2FpdCgweDEwMGM4MCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMCkpIHsKLQkJTlZfRVJST1IoZGV2LCAidGltZW91dDogKDB4MTAwYzgwICYgMSkgPT0gMCAoMilcbiIpOwotCQlOVl9FUlJPUihkZXYsICIweDEwMGM4MCA9IDB4JTA4eFxuIiwgbnZfcmQzMihkZXYsIDB4MTAwYzgwKSk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQorCW52NTBfdm1fZmx1c2goZGV2LCA0KTsKKwludjUwX3ZtX2ZsdXNoKGRldiwgNik7CiAKIAlncHVvYmotPmltX2JvdW5kID0gMTsKIAlyZXR1cm4gMDsKQEAgLTQ5MiwzNiArNDczLDM3IEBACiAJcHRlICAgICA9IChncHVvYmotPmltX3ByYW1pbi0+c3RhcnQgPj4gMTIpIDw8IDE7CiAJcHRlX2VuZCA9ICgoZ3B1b2JqLT5pbV9wcmFtaW4tPnNpemUgPj4gMTIpIDw8IDEpICsgcHRlOwogCi0JZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByZXBhcmVfYWNjZXNzKGRldiwgdHJ1ZSk7CiAJd2hpbGUgKHB0ZSA8IHB0ZV9lbmQpIHsKIAkJbnZfd28zMihkZXYsIHByaXYtPnByYW1pbl9wdC0+Z3B1b2JqLCBwdGUrKywgMHgwMDAwMDAwMCk7CiAJCW52X3dvMzIoZGV2LCBwcml2LT5wcmFtaW5fcHQtPmdwdW9iaiwgcHRlKyssIDB4MDAwMDAwMDApOwogCX0KLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOworCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5mbHVzaChkZXYpOwogCiAJZ3B1b2JqLT5pbV9ib3VuZCA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKIHZvaWQKLW52NTBfaW5zdG1lbV9wcmVwYXJlX2FjY2VzcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBib29sIHdyaXRlKQorbnY1MF9pbnN0bWVtX2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgbnY1MF9pbnN0bWVtX3ByaXYgKnByaXYgPSBkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0ucHJpdjsKLQotCXByaXYtPmxhc3RfYWNjZXNzX3dyID0gd3JpdGU7CisJbnZfd3IzMihkZXYsIDB4MDAzMzBjLCAweDAwMDAwMDAxKTsKKwlpZiAoIW52X3dhaXQoMHgwMDMzMGMsIDB4MDAwMDAwMDIsIDB4MDAwMDAwMDApKQorCQlOVl9FUlJPUihkZXYsICJQUkFNSU4gZmx1c2ggdGltZW91dFxuIik7CiB9CiAKIHZvaWQKLW52NTBfaW5zdG1lbV9maW5pc2hfYWNjZXNzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCitudjg0X2luc3RtZW1fZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBudjUwX2luc3RtZW1fcHJpdiAqcHJpdiA9IGRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5wcml2OworCW52X3dyMzIoZGV2LCAweDA3MDAwMCwgMHgwMDAwMDAwMSk7CisJaWYgKCFudl93YWl0KDB4MDcwMDAwLCAweDAwMDAwMDAyLCAweDAwMDAwMDAwKSkKKwkJTlZfRVJST1IoZGV2LCAiUFJBTUlOIGZsdXNoIHRpbWVvdXRcbiIpOworfQogCi0JaWYgKHByaXYtPmxhc3RfYWNjZXNzX3dyKSB7Ci0JCW52X3dyMzIoZGV2LCAweDA3MDAwMCwgMHgwMDAwMDAwMSk7Ci0JCWlmICghbnZfd2FpdCgweDA3MDAwMCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMCkpCi0JCQlOVl9FUlJPUihkZXYsICJQUkFNSU4gZmx1c2ggdGltZW91dFxuIik7Ci0JfQordm9pZAorbnY1MF92bV9mbHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgZW5naW5lKQoreworCW52X3dyMzIoZGV2LCAweDEwMGM4MCwgKGVuZ2luZSA8PCAxNikgfCAxKTsKKwlpZiAoIW52X3dhaXQoMHgxMDBjODAsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDApKQorCQlOVl9FUlJPUihkZXYsICJ2bSBmbHVzaCB0aW1lb3V0OiBlbmdpbmUgJWRcbiIsIGVuZ2luZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfc29yLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3Nvci5jCmluZGV4IDgxMjc3OGQuLmJjZDRjZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfc29yLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9zb3IuYwpAQCAtMzcsNTIgKzM3LDMyIEBACiAjaW5jbHVkZSAibnY1MF9kaXNwbGF5LmgiCiAKIHN0YXRpYyB2b2lkCi1udjUwX3Nvcl9kaXNjb25uZWN0KHN0cnVjdCBub3V2ZWF1X2VuY29kZXIgKm52X2VuY29kZXIpCitudjUwX3Nvcl9kaXNjb25uZWN0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gdG9fZHJtX2VuY29kZXIobnZfZW5jb2RlciktPmRldjsKKwlzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpudl9lbmNvZGVyID0gbm91dmVhdV9lbmNvZGVyKGVuY29kZXIpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpldm8gPSBkZXZfcHJpdi0+ZXZvOwogCWludCByZXQ7CiAKKwlpZiAoIW52X2VuY29kZXItPmNydGMpCisJCXJldHVybjsKKwludjUwX2NydGNfYmxhbmsobm91dmVhdV9jcnRjKG52X2VuY29kZXItPmNydGMpLCB0cnVlKTsKKwogCU5WX0RFQlVHX0tNUyhkZXYsICJEaXNjb25uZWN0aW5nIFNPUiAlZFxuIiwgbnZfZW5jb2Rlci0+b3IpOwogCi0JcmV0ID0gUklOR19TUEFDRShldm8sIDIpOworCXJldCA9IFJJTkdfU1BBQ0UoZXZvLCA0KTsKIAlpZiAocmV0KSB7CiAJCU5WX0VSUk9SKGRldiwgIm5vIHNwYWNlIHdoaWxlIGRpc2Nvbm5lY3RpbmcgU09SXG4iKTsKIAkJcmV0dXJuOwogCX0KIAlCRUdJTl9SSU5HKGV2bywgMCwgTlY1MF9FVk9fU09SKG52X2VuY29kZXItPm9yLCBNT0RFX0NUUkwpLCAxKTsKLQlPVVRfUklORyhldm8sIDApOwotfQorCU9VVF9SSU5HICAoZXZvLCAwKTsKKwlCRUdJTl9SSU5HKGV2bywgMCwgTlY1MF9FVk9fVVBEQVRFLCAxKTsKKwlPVVRfUklORyAgKGV2bywgMCk7CiAKLXN0YXRpYyB2b2lkCi1udjUwX3Nvcl9kcF9saW5rX3RyYWluKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OwotCXN0cnVjdCBub3V2ZWF1X2VuY29kZXIgKm52X2VuY29kZXIgPSBub3V2ZWF1X2VuY29kZXIoZW5jb2Rlcik7Ci0Jc3RydWN0IGJpdF9kaXNwbGF5cG9ydF9lbmNvZGVyX3RhYmxlICpkcGU7Ci0JaW50IGRwZV9oZWFkZXJsZW47Ci0KLQlkcGUgPSBub3V2ZWF1X2Jpb3NfZHBfdGFibGUoZGV2LCBudl9lbmNvZGVyLT5kY2IsICZkcGVfaGVhZGVybGVuKTsKLQlpZiAoIWRwZSkgewotCQlOVl9FUlJPUihkZXYsICJTT1ItJWQ6IG5vIERQIGVuY29kZXIgdGFibGUhXG4iLCBudl9lbmNvZGVyLT5vcik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoZHBlLT5zY3JpcHQwKSB7Ci0JCU5WX0RFQlVHX0tNUyhkZXYsICJTT1ItJWQ6IHJ1bm5pbmcgRFAgc2NyaXB0IDBcbiIsIG52X2VuY29kZXItPm9yKTsKLQkJbm91dmVhdV9iaW9zX3J1bl9pbml0X3RhYmxlKGRldiwgbGUxNl90b19jcHUoZHBlLT5zY3JpcHQwKSwKLQkJCQkJICAgIG52X2VuY29kZXItPmRjYik7Ci0JfQotCi0JaWYgKCFub3V2ZWF1X2RwX2xpbmtfdHJhaW4oZW5jb2RlcikpCi0JCU5WX0VSUk9SKGRldiwgIlNPUi0lZDogbGluayB0cmFpbmluZyBmYWlsZWRcbiIsIG52X2VuY29kZXItPm9yKTsKLQotCWlmIChkcGUtPnNjcmlwdDEpIHsKLQkJTlZfREVCVUdfS01TKGRldiwgIlNPUi0lZDogcnVubmluZyBEUCBzY3JpcHQgMVxuIiwgbnZfZW5jb2Rlci0+b3IpOwotCQlub3V2ZWF1X2Jpb3NfcnVuX2luaXRfdGFibGUoZGV2LCBsZTE2X3RvX2NwdShkcGUtPnNjcmlwdDEpLAotCQkJCQkgICAgbnZfZW5jb2Rlci0+ZGNiKTsKLQl9CisJbnZfZW5jb2Rlci0+Y3J0YyA9IE5VTEw7CisJbnZfZW5jb2Rlci0+bGFzdF9kcG1zID0gRFJNX01PREVfRFBNU19PRkY7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC05NCwxNCArNzQsMTYgQEAKIAl1aW50MzJfdCB2YWw7CiAJaW50IG9yID0gbnZfZW5jb2Rlci0+b3I7CiAKLQlOVl9ERUJVR19LTVMoZGV2LCAib3IgJWQgbW9kZSAlZFxuIiwgb3IsIG1vZGUpOworCU5WX0RFQlVHX0tNUyhkZXYsICJvciAlZCB0eXBlICVkIG1vZGUgJWRcbiIsIG9yLCBudl9lbmNvZGVyLT5kY2ItPnR5cGUsIG1vZGUpOwogCiAJbnZfZW5jb2Rlci0+bGFzdF9kcG1zID0gbW9kZTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuYywgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKSB7CiAJCXN0cnVjdCBub3V2ZWF1X2VuY29kZXIgKm52ZW5jID0gbm91dmVhdV9lbmNvZGVyKGVuYyk7CiAKIAkJaWYgKG52ZW5jID09IG52X2VuY29kZXIgfHwKLQkJICAgIG52ZW5jLT5kaXNjb25uZWN0ICE9IG52NTBfc29yX2Rpc2Nvbm5lY3QgfHwKKwkJICAgIChudmVuYy0+ZGNiLT50eXBlICE9IE9VVFBVVF9UTURTICYmCisJCSAgICAgbnZlbmMtPmRjYi0+dHlwZSAhPSBPVVRQVVRfTFZEUyAmJgorCQkgICAgIG52ZW5jLT5kY2ItPnR5cGUgIT0gT1VUUFVUX0RQKSB8fAogCQkgICAgbnZlbmMtPmRjYi0+b3IgIT0gbnZfZW5jb2Rlci0+ZGNiLT5vcikKIAkJCWNvbnRpbnVlOwogCkBAIC0xMzMsOCArMTE1LDIyIEBACiAJCQkgbnZfcmQzMihkZXYsIE5WNTBfUERJU1BMQVlfU09SX0RQTVNfU1RBVEUob3IpKSk7CiAJfQogCi0JaWYgKG52X2VuY29kZXItPmRjYi0+dHlwZSA9PSBPVVRQVVRfRFAgJiYgbW9kZSA9PSBEUk1fTU9ERV9EUE1TX09OKQotCQludjUwX3Nvcl9kcF9saW5rX3RyYWluKGVuY29kZXIpOworCWlmIChudl9lbmNvZGVyLT5kY2ItPnR5cGUgPT0gT1VUUFVUX0RQKSB7CisJCXN0cnVjdCBub3V2ZWF1X2kyY19jaGFuICphdXhjaDsKKworCQlhdXhjaCA9IG5vdXZlYXVfaTJjX2ZpbmQoZGV2LCBudl9lbmNvZGVyLT5kY2ItPmkyY19pbmRleCk7CisJCWlmICghYXV4Y2gpCisJCQlyZXR1cm47CisKKwkJaWYgKG1vZGUgPT0gRFJNX01PREVfRFBNU19PTikgeworCQkJdTggc3RhdHVzID0gRFBfU0VUX1BPV0VSX0QwOworCQkJbm91dmVhdV9kcF9hdXhjaChhdXhjaCwgOCwgRFBfU0VUX1BPV0VSLCAmc3RhdHVzLCAxKTsKKwkJCW5vdXZlYXVfZHBfbGlua190cmFpbihlbmNvZGVyKTsKKwkJfSBlbHNlIHsKKwkJCXU4IHN0YXR1cyA9IERQX1NFVF9QT1dFUl9EMzsKKwkJCW5vdXZlYXVfZHBfYXV4Y2goYXV4Y2gsIDgsIERQX1NFVF9QT1dFUiwgJnN0YXR1cywgMSk7CisJCX0KKwl9CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xOTYsNyArMTkyLDggQEAKIAl1aW50MzJfdCBtb2RlX2N0bCA9IDA7CiAJaW50IHJldDsKIAotCU5WX0RFQlVHX0tNUyhkZXYsICJvciAlZFxuIiwgbnZfZW5jb2Rlci0+b3IpOworCU5WX0RFQlVHX0tNUyhkZXYsICJvciAlZCB0eXBlICVkIC0+IGNydGMgJWRcbiIsCisJCSAgICAgbnZfZW5jb2Rlci0+b3IsIG52X2VuY29kZXItPmRjYi0+dHlwZSwgY3J0Yy0+aW5kZXgpOwogCiAJbnY1MF9zb3JfZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09OKTsKIApAQCAtMjM5LDYgKzIzNiwxNCBAQAogCX0KIAlCRUdJTl9SSU5HKGV2bywgMCwgTlY1MF9FVk9fU09SKG52X2VuY29kZXItPm9yLCBNT0RFX0NUUkwpLCAxKTsKIAlPVVRfUklORyhldm8sIG1vZGVfY3RsKTsKKworCW52X2VuY29kZXItPmNydGMgPSBlbmNvZGVyLT5jcnRjOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jcnRjICoKK252NTBfc29yX2NydGNfZ2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlyZXR1cm4gbm91dmVhdV9lbmNvZGVyKGVuY29kZXIpLT5jcnRjOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyBudjUwX3Nvcl9oZWxwZXJfZnVuY3MgPSB7CkBAIC0yNDksNyArMjU0LDkgQEAKIAkucHJlcGFyZSA9IG52NTBfc29yX3ByZXBhcmUsCiAJLmNvbW1pdCA9IG52NTBfc29yX2NvbW1pdCwKIAkubW9kZV9zZXQgPSBudjUwX3Nvcl9tb2RlX3NldCwKLQkuZGV0ZWN0ID0gTlVMTAorCS5nZXRfY3J0YyA9IG52NTBfc29yX2NydGNfZ2V0LAorCS5kZXRlY3QgPSBOVUxMLAorCS5kaXNhYmxlID0gbnY1MF9zb3JfZGlzY29ubmVjdAogfTsKIAogc3RhdGljIHZvaWQKQEAgLTI3MiwzMiArMjc5LDIyIEBACiB9OwogCiBpbnQKLW52NTBfc29yX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZGNiX2VudHJ5ICplbnRyeSkKK252NTBfc29yX2NyZWF0ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZGNiX2VudHJ5ICplbnRyeSkKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpudl9lbmNvZGVyID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwotCWJvb2wgZHVtOwogCWludCB0eXBlOwogCiAJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CiAKIAlzd2l0Y2ggKGVudHJ5LT50eXBlKSB7CiAJY2FzZSBPVVRQVVRfVE1EUzoKLQkJTlZfSU5GTyhkZXYsICJEZXRlY3RlZCBhIFRNRFMgb3V0cHV0XG4iKTsKKwljYXNlIE9VVFBVVF9EUDoKIAkJdHlwZSA9IERSTV9NT0RFX0VOQ09ERVJfVE1EUzsKIAkJYnJlYWs7CiAJY2FzZSBPVVRQVVRfTFZEUzoKLQkJTlZfSU5GTyhkZXYsICJEZXRlY3RlZCBhIExWRFMgb3V0cHV0XG4iKTsKIAkJdHlwZSA9IERSTV9NT0RFX0VOQ09ERVJfTFZEUzsKLQotCQlpZiAobm91dmVhdV9iaW9zX3BhcnNlX2x2ZHNfdGFibGUoZGV2LCAwLCAmZHVtLCAmZHVtKSkgewotCQkJTlZfRVJST1IoZGV2LCAiRmFpbGVkIHBhcnNpbmcgTFZEUyB0YWJsZVxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlicmVhazsKLQljYXNlIE9VVFBVVF9EUDoKLQkJTlZfSU5GTyhkZXYsICJEZXRlY3RlZCBhIERQIG91dHB1dFxuIik7Ci0JCXR5cGUgPSBEUk1fTU9ERV9FTkNPREVSX1RNRFM7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzEwLDggKzMwNyw3IEBACiAKIAludl9lbmNvZGVyLT5kY2IgPSBlbnRyeTsKIAludl9lbmNvZGVyLT5vciA9IGZmcyhlbnRyeS0+b3IpIC0gMTsKLQotCW52X2VuY29kZXItPmRpc2Nvbm5lY3QgPSBudjUwX3Nvcl9kaXNjb25uZWN0OworCW52X2VuY29kZXItPmxhc3RfZHBtcyA9IERSTV9NT0RFX0RQTVNfT0ZGOwogCiAJZHJtX2VuY29kZXJfaW5pdChkZXYsIGVuY29kZXIsICZudjUwX3Nvcl9lbmNvZGVyX2Z1bmNzLCB0eXBlKTsKIAlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGVuY29kZXIsICZudjUwX3Nvcl9oZWxwZXJfZnVuY3MpOwpAQCAtMzQyLDUgKzMzOCw2IEBACiAJCQludl9lbmNvZGVyLT5kcC5tY191bmtub3duID0gNTsKIAl9CiAKKwlkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoY29ubmVjdG9yLCBlbmNvZGVyKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252cmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udnJlZy5oCmluZGV4IDU5OThjMzUuLmFkNjQ2NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252cmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZyZWcuaApAQCAtMTQ3LDI4ICsxNDcsNiBAQAogIwlkZWZpbmUgTlZfVklPX0dYX0RPTlRfQ0FSRV9JTkRFWAkweDA3CiAjCWRlZmluZSBOVl9WSU9fR1hfQklUX01BU0tfSU5ERVgJCTB4MDgKIAotI2RlZmluZSBOVl9QRkJfQk9PVF8wCQkJMHgwMDEwMDAwMAotI2RlZmluZSBOVl9QRkJfQ0ZHMAkJCTB4MDAxMDAyMDAKLSNkZWZpbmUgTlZfUEZCX0NGRzEJCQkweDAwMTAwMjA0Ci0jZGVmaW5lIE5WX1BGQl9DU1RBVFVTCQkJMHgwMDEwMDIwQwotI2RlZmluZSBOVl9QRkJfUkVGQ1RSTAkJCTB4MDAxMDAyMTAKLSMJZGVmaW5lIE5WX1BGQl9SRUZDVFJMX1ZBTElEXzEJCQkoMSA8PCAzMSkKLSNkZWZpbmUgTlZfUEZCX1BBRAkJCTB4MDAxMDAyMUMKLSMJZGVmaW5lIE5WX1BGQl9QQURfQ0tFX05PUk1BTAkJCSgxIDw8IDApCi0jZGVmaW5lIE5WX1BGQl9USUxFX05WMTAJCTB4MDAxMDAyNDAKLSNkZWZpbmUgTlZfUEZCX1RJTEVfU0laRV9OVjEwCQkweDAwMTAwMjQ0Ci0jZGVmaW5lIE5WX1BGQl9SRUYJCQkweDAwMTAwMkQwCi0jCWRlZmluZSBOVl9QRkJfUkVGX0NNRF9SRUZSRVNICQkJKDEgPDwgMCkKLSNkZWZpbmUgTlZfUEZCX1BSRQkJCTB4MDAxMDAyRDQKLSMJZGVmaW5lIE5WX1BGQl9QUkVfQ01EX1BSRUNIQVJHRQkJCSgxIDw8IDApCi0jZGVmaW5lIE5WX1BGQl9DTE9TRV9QQUdFMgkJMHgwMDEwMDMzQwotI2RlZmluZSBOVl9QRkJfVElMRV9OVjQwCQkweDAwMTAwNjAwCi0jZGVmaW5lIE5WX1BGQl9USUxFX1NJWkVfTlY0MAkJMHgwMDEwMDYwNAotCi0jZGVmaW5lIE5WX1BFWFRERVZfQk9PVF8wCQkweDAwMTAxMDAwCi0jCWRlZmluZSBOVl9QRVhUREVWX0JPT1RfMF9TVFJBUF9GUF9JRkFDRV8xMkJJVAkoOCA8PCAxMikKLSNkZWZpbmUgTlZfUEVYVERFVl9CT09UXzMJCTB4MDAxMDEwMGMKLQogI2RlZmluZSBOVl9QQ1JUQ19JTlRSXzAJCQkJCTB4MDA2MDAxMDAKICMJZGVmaW5lIE5WX1BDUlRDX0lOVFJfMF9WQkxBTksJCQkJKDEgPDwgMCkKICNkZWZpbmUgTlZfUENSVENfSU5UUl9FTl8wCQkJCTB4MDA2MDAxNDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfY2NlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2NjZS5jCmluZGV4IGU2NzFkMGUuLjU3MGUxOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfY2NlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9jY2UuYwpAQCAtNDQsNyArNDQsNyBAQAogCiBNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfTkFNRSk7CiAKLXN0YXRpYyBpbnQgUjEyOF9SRUFEX1BMTChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgaW50IGFkZHIpCitzdGF0aWMgaW50IFIxMjhfUkVBRF9QTEwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGFkZHIpCiB7CiAJZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKQEAgLTUzLDcgKzUzLDcgQEAKIH0KIAogI2lmIFIxMjhfRklGT19ERUJVRwotc3RhdGljIHZvaWQgcjEyOF9zdGF0dXMoZHJtX3IxMjhfcHJpdmF0ZV90ICogZGV2X3ByaXYpCitzdGF0aWMgdm9pZCByMTI4X3N0YXR1cyhkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2KQogewogCXByaW50aygiR1VJX1NUQVQgICAgICAgICAgID0gMHglMDh4XG4iLAogCSAgICAgICAodW5zaWduZWQgaW50KVIxMjhfUkVBRChSMTI4X0dVSV9TVEFUKSk7CkBAIC03NCw3ICs3NCw3IEBACiAgKiBFbmdpbmUsIEZJRk8gY29udHJvbAogICovCiAKLXN0YXRpYyBpbnQgcjEyOF9kb19waXhjYWNoZV9mbHVzaChkcm1fcjEyOF9wcml2YXRlX3QgKiBkZXZfcHJpdikKK3N0YXRpYyBpbnQgcjEyOF9kb19waXhjYWNoZV9mbHVzaChkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2KQogewogCXUzMiB0bXA7CiAJaW50IGk7CkBAIC04Myw5ICs4Myw4IEBACiAJUjEyOF9XUklURShSMTI4X1BDX05HVUlfQ1RMU1RBVCwgdG1wKTsKIAogCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+dXNlY190aW1lb3V0OyBpKyspIHsKLQkJaWYgKCEoUjEyOF9SRUFEKFIxMjhfUENfTkdVSV9DVExTVEFUKSAmIFIxMjhfUENfQlVTWSkpIHsKKwkJaWYgKCEoUjEyOF9SRUFEKFIxMjhfUENfTkdVSV9DVExTVEFUKSAmIFIxMjhfUENfQlVTWSkpCiAJCQlyZXR1cm4gMDsKLQkJfQogCQlEUk1fVURFTEFZKDEpOwogCX0KIApAQCAtOTUsNyArOTQsNyBAQAogCXJldHVybiAtRUJVU1k7CiB9CiAKLXN0YXRpYyBpbnQgcjEyOF9kb193YWl0X2Zvcl9maWZvKGRybV9yMTI4X3ByaXZhdGVfdCAqIGRldl9wcml2LCBpbnQgZW50cmllcykKK3N0YXRpYyBpbnQgcjEyOF9kb193YWl0X2Zvcl9maWZvKGRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBlbnRyaWVzKQogewogCWludCBpOwogCkBAIC0xMTIsNyArMTExLDcgQEAKIAlyZXR1cm4gLUVCVVNZOwogfQogCi1zdGF0aWMgaW50IHIxMjhfZG9fd2FpdF9mb3JfaWRsZShkcm1fcjEyOF9wcml2YXRlX3QgKiBkZXZfcHJpdikKK3N0YXRpYyBpbnQgcjEyOF9kb193YWl0X2Zvcl9pZGxlKGRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYpCiB7CiAJaW50IGksIHJldDsKIApAQCAtMTg5LDcgKzE4OCw3IEBACiAgKiBwcmlvciB0byBhIHdhaXQgZm9yIGlkbGUsIGFzIGl0IGluZm9ybXMgdGhlIGVuZ2luZSB0aGF0IHRoZSBjb21tYW5kCiAgKiBzdHJlYW0gaXMgZW5kaW5nLgogICovCi1zdGF0aWMgdm9pZCByMTI4X2RvX2NjZV9mbHVzaChkcm1fcjEyOF9wcml2YXRlX3QgKiBkZXZfcHJpdikKK3N0YXRpYyB2b2lkIHIxMjhfZG9fY2NlX2ZsdXNoKGRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYpCiB7CiAJdTMyIHRtcDsKIApAQCAtMTk5LDcgKzE5OCw3IEBACiAKIC8qIFdhaXQgZm9yIHRoZSBDQ0UgdG8gZ28gaWRsZS4KICAqLwotaW50IHIxMjhfZG9fY2NlX2lkbGUoZHJtX3IxMjhfcHJpdmF0ZV90ICogZGV2X3ByaXYpCitpbnQgcjEyOF9kb19jY2VfaWRsZShkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2KQogewogCWludCBpOwogCkBAIC0yMjUsNyArMjI0LDcgQEAKIAogLyogU3RhcnQgdGhlIENvbmN1cnJlbnQgQ29tbWFuZCBFbmdpbmUuCiAgKi8KLXN0YXRpYyB2b2lkIHIxMjhfZG9fY2NlX3N0YXJ0KGRybV9yMTI4X3ByaXZhdGVfdCAqIGRldl9wcml2KQorc3RhdGljIHZvaWQgcjEyOF9kb19jY2Vfc3RhcnQoZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdikKIHsKIAlyMTI4X2RvX3dhaXRfZm9yX2lkbGUoZGV2X3ByaXYpOwogCkBAIC0yNDIsNyArMjQxLDcgQEAKICAqIGNvbW1hbmRzLCBzbyB5b3UgbXVzdCB3YWl0IGZvciB0aGUgQ0NFIGNvbW1hbmQgc3RyZWFtIHRvIGNvbXBsZXRlCiAgKiBiZWZvcmUgY2FsbGluZyB0aGlzIHJvdXRpbmUuCiAgKi8KLXN0YXRpYyB2b2lkIHIxMjhfZG9fY2NlX3Jlc2V0KGRybV9yMTI4X3ByaXZhdGVfdCAqIGRldl9wcml2KQorc3RhdGljIHZvaWQgcjEyOF9kb19jY2VfcmVzZXQoZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdikKIHsKIAlSMTI4X1dSSVRFKFIxMjhfUE00X0JVRkZFUl9ETF9XUFRSLCAwKTsKIAlSMTI4X1dSSVRFKFIxMjhfUE00X0JVRkZFUl9ETF9SUFRSLCAwKTsKQEAgLTI1Myw3ICsyNTIsNyBAQAogICogY29tbWFuZHMsIHNvIHlvdSBtdXN0IGZsdXNoIHRoZSBjb21tYW5kIHN0cmVhbSBhbmQgd2FpdCBmb3IgdGhlIENDRQogICogdG8gZ28gaWRsZSBiZWZvcmUgY2FsbGluZyB0aGlzIHJvdXRpbmUuCiAgKi8KLXN0YXRpYyB2b2lkIHIxMjhfZG9fY2NlX3N0b3AoZHJtX3IxMjhfcHJpdmF0ZV90ICogZGV2X3ByaXYpCitzdGF0aWMgdm9pZCByMTI4X2RvX2NjZV9zdG9wKGRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYpCiB7CiAJUjEyOF9XUklURShSMTI4X1BNNF9NSUNST19DTlRMLCAwKTsKIAlSMTI4X1dSSVRFKFIxMjhfUE00X0JVRkZFUl9DTlRMLApAQCAtMjY0LDcgKzI2Myw3IEBACiAKIC8qIFJlc2V0IHRoZSBlbmdpbmUuICBUaGlzIHdpbGwgc3RvcCB0aGUgQ0NFIGlmIGl0IGlzIHJ1bm5pbmcuCiAgKi8KLXN0YXRpYyBpbnQgcjEyOF9kb19lbmdpbmVfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgaW50IHIxMjhfZG9fZW5naW5lX3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdTMyIGNsb2NrX2NudGxfaW5kZXgsIG1jbGtfY250bCwgZ2VuX3Jlc2V0X2NudGw7CkBAIC0zMDEsOCArMzAwLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcjEyOF9jY2VfaW5pdF9yaW5nX2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKLQkJCQkgICAgICBkcm1fcjEyOF9wcml2YXRlX3QgKiBkZXZfcHJpdikKK3N0YXRpYyB2b2lkIHIxMjhfY2NlX2luaXRfcmluZ19idWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICBkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2KQogewogCXUzMiByaW5nX3N0YXJ0OwogCXUzMiB0bXA7CkBAIC0zNDAsNyArMzM5LDcgQEAKIAlSMTI4X1dSSVRFKFIxMjhfQlVTX0NOVEwsIHRtcCk7CiB9CiAKLXN0YXRpYyBpbnQgcjEyOF9kb19pbml0X2NjZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgZHJtX3IxMjhfaW5pdF90ICogaW5pdCkKK3N0YXRpYyBpbnQgcjEyOF9kb19pbml0X2NjZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBkcm1fcjEyOF9pbml0X3QgKmluaXQpCiB7CiAJZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdjsKIAlpbnQgcmM7CkBAIC01ODgsNyArNTg3LDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLWludCByMTI4X2RvX2NsZWFudXBfY2NlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQoraW50IHIxMjhfZG9fY2xlYW51cF9jY2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAogCS8qIE1ha2Ugc3VyZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBoZXJlIGJlY2F1c2UgdGhlIHVuaW5zdGFsbCBpb2N0bApAQCAtNjgyLDkgKzY4MSw4IEBACiAJLyogRmx1c2ggYW55IHBlbmRpbmcgQ0NFIGNvbW1hbmRzLiAgVGhpcyBlbnN1cmVzIGFueSBvdXRzdGFuZGluZwogCSAqIGNvbW1hbmRzIGFyZSBleGVjdHV0ZWQgYnkgdGhlIGVuZ2luZSBiZWZvcmUgd2UgdHVybiBpdCBvZmYuCiAJICovCi0JaWYgKHN0b3AtPmZsdXNoKSB7CisJaWYgKHN0b3AtPmZsdXNoKQogCQlyMTI4X2RvX2NjZV9mbHVzaChkZXZfcHJpdik7Ci0JfQogCiAJLyogSWYgd2UgZmFpbCB0byBtYWtlIHRoZSBlbmdpbmUgZ28gaWRsZSwgd2UgcmV0dXJuIGFuIGVycm9yCiAJICogY29kZSBzbyB0aGF0IHRoZSBEUk0gaW9jdGwgd3JhcHBlciBjYW4gdHJ5IGFnYWluLgpAQCAtNzM1LDkgKzczMyw4IEBACiAKIAlERVZfSU5JVF9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsKIAotCWlmIChkZXZfcHJpdi0+Y2NlX3J1bm5pbmcpIHsKKwlpZiAoZGV2X3ByaXYtPmNjZV9ydW5uaW5nKQogCQlyMTI4X2RvX2NjZV9mbHVzaChkZXZfcHJpdik7Ci0JfQogCiAJcmV0dXJuIHIxMjhfZG9fY2NlX2lkbGUoZGV2X3ByaXYpOwogfQpAQCAtNzY1LDcgKzc2Miw3IEBACiAjZGVmaW5lIFIxMjhfQlVGRkVSX0ZSRUUJMAogCiAjaWYgMAotc3RhdGljIGludCByMTI4X2ZyZWVsaXN0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgaW50IHIxMjhfZnJlZWxpc3RfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fZGV2aWNlX2RtYSAqZG1hID0gZGV2LT5kbWE7CiAJZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC04NDgsNyArODQ1LDcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotdm9pZCByMTI4X2ZyZWVsaXN0X3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQordm9pZCByMTI4X2ZyZWVsaXN0X3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9kZXZpY2VfZG1hICpkbWEgPSBkZXYtPmRtYTsKIAlpbnQgaTsKQEAgLTg2NCw3ICs4NjEsNyBAQAogICogQ0NFIGNvbW1hbmQgc3VibWlzc2lvbgogICovCiAKLWludCByMTI4X3dhaXRfcmluZyhkcm1fcjEyOF9wcml2YXRlX3QgKiBkZXZfcHJpdiwgaW50IG4pCitpbnQgcjEyOF93YWl0X3JpbmcoZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IG4pCiB7CiAJZHJtX3IxMjhfcmluZ19idWZmZXJfdCAqcmluZyA9ICZkZXZfcHJpdi0+cmluZzsKIAlpbnQgaTsKQEAgLTg4MSw5ICs4NzgsOSBAQAogCXJldHVybiAtRUJVU1k7CiB9CiAKLXN0YXRpYyBpbnQgcjEyOF9jY2VfZ2V0X2J1ZmZlcnMoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsCitzdGF0aWMgaW50IHIxMjhfY2NlX2dldF9idWZmZXJzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCi0JCQkJc3RydWN0IGRybV9kbWEgKiBkKQorCQkJCXN0cnVjdCBkcm1fZG1hICpkKQogewogCWludCBpOwogCXN0cnVjdCBkcm1fYnVmICpidWY7CkBAIC05MzMsOSArOTMwLDggQEAKIAogCWQtPmdyYW50ZWRfY291bnQgPSAwOwogCi0JaWYgKGQtPnJlcXVlc3RfY291bnQpIHsKKwlpZiAoZC0+cmVxdWVzdF9jb3VudCkKIAkJcmV0ID0gcjEyOF9jY2VfZ2V0X2J1ZmZlcnMoZGV2LCBmaWxlX3ByaXYsIGQpOwotCX0KIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9kcnYuYwppbmRleCBiODA2ZmRjLi4xZTI5NzFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfZHJ2LmMKQEAgLTg1LDcgKzg1LDcgQEAKIAkucGF0Y2hsZXZlbCA9IERSSVZFUl9QQVRDSExFVkVMLAogfTsKIAotaW50IHIxMjhfZHJpdmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCitpbnQgcjEyOF9kcml2ZXJfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXJldHVybiBkcm1fdmJsYW5rX2luaXQoZGV2LCAxKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5oCmluZGV4IDNjNjA4MjkuLjkzMGM3MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9kcnYuaApAQCAtNTMsNyArNTMsNyBAQAogI2RlZmluZSBEUklWRVJfTUlOT1IJCTUKICNkZWZpbmUgRFJJVkVSX1BBVENITEVWRUwJMAogCi0jZGVmaW5lIEdFVF9SSU5HX0hFQUQoZGV2X3ByaXYpCQlSMTI4X1JFQUQoIFIxMjhfUE00X0JVRkZFUl9ETF9SUFRSICkKKyNkZWZpbmUgR0VUX1JJTkdfSEVBRChkZXZfcHJpdikJCVIxMjhfUkVBRChSMTI4X1BNNF9CVUZGRVJfRExfUlBUUikKIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3IxMjhfZnJlZWxpc3QgewogCXVuc2lnbmVkIGludCBhZ2U7CkBAIC0xNDQsMjMgKzE0NCwyMyBAQAogZXh0ZXJuIGludCByMTI4X2Z1bGxzY3JlZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIGludCByMTI4X2NjZV9idWZmZXJzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIAotZXh0ZXJuIHZvaWQgcjEyOF9mcmVlbGlzdF9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CitleHRlcm4gdm9pZCByMTI4X2ZyZWVsaXN0X3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCi1leHRlcm4gaW50IHIxMjhfd2FpdF9yaW5nKGRybV9yMTI4X3ByaXZhdGVfdCAqIGRldl9wcml2LCBpbnQgbik7CitleHRlcm4gaW50IHIxMjhfd2FpdF9yaW5nKGRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBuKTsKIAotZXh0ZXJuIGludCByMTI4X2RvX2NjZV9pZGxlKGRybV9yMTI4X3ByaXZhdGVfdCAqIGRldl9wcml2KTsKLWV4dGVybiBpbnQgcjEyOF9kb19jbGVhbnVwX2NjZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CitleHRlcm4gaW50IHIxMjhfZG9fY2NlX2lkbGUoZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdik7CitleHRlcm4gaW50IHIxMjhfZG9fY2xlYW51cF9jY2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKIGV4dGVybiBpbnQgcjEyOF9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKIGV4dGVybiB2b2lkIHIxMjhfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIHUzMiByMTI4X2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CiBleHRlcm4gaXJxcmV0dXJuX3QgcjEyOF9kcml2ZXJfaXJxX2hhbmRsZXIoRFJNX0lSUV9BUkdTKTsKLWV4dGVybiB2b2lkIHIxMjhfZHJpdmVyX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKK2V4dGVybiB2b2lkIHIxMjhfZHJpdmVyX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCByMTI4X2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCByMTI4X2RyaXZlcl9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKLWV4dGVybiB2b2lkIHIxMjhfZHJpdmVyX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7Ci1leHRlcm4gaW50IHIxMjhfZHJpdmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwotZXh0ZXJuIHZvaWQgcjEyOF9kcml2ZXJfcHJlY2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsCitleHRlcm4gdm9pZCByMTI4X2RyaXZlcl9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgcjEyOF9kcml2ZXJfbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCByMTI4X2RyaXZlcl9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworZXh0ZXJuIHZvaWQgcjEyOF9kcml2ZXJfcHJlY2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogCiBleHRlcm4gbG9uZyByMTI4X2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKQEAgLTM5MCwyNyArMzkwLDI3IEBACiAKICNkZWZpbmUgUjEyOF9QQ0lHQVJUX1RBQkxFX1NJWkUgICAgICAgICAzMjc2OAogCi0jZGVmaW5lIFIxMjhfUkVBRChyZWcpCQlEUk1fUkVBRDMyKCAgZGV2X3ByaXYtPm1taW8sIChyZWcpICkKLSNkZWZpbmUgUjEyOF9XUklURShyZWcsdmFsKQlEUk1fV1JJVEUzMiggZGV2X3ByaXYtPm1taW8sIChyZWcpLCAodmFsKSApCi0jZGVmaW5lIFIxMjhfUkVBRDgocmVnKQkJRFJNX1JFQUQ4KCAgIGRldl9wcml2LT5tbWlvLCAocmVnKSApCi0jZGVmaW5lIFIxMjhfV1JJVEU4KHJlZyx2YWwpCURSTV9XUklURTgoICBkZXZfcHJpdi0+bW1pbywgKHJlZyksICh2YWwpICkKKyNkZWZpbmUgUjEyOF9SRUFEKHJlZykJCURSTV9SRUFEMzIoZGV2X3ByaXYtPm1taW8sIChyZWcpKQorI2RlZmluZSBSMTI4X1dSSVRFKHJlZywgdmFsKQlEUk1fV1JJVEUzMihkZXZfcHJpdi0+bW1pbywgKHJlZyksICh2YWwpKQorI2RlZmluZSBSMTI4X1JFQUQ4KHJlZykJCURSTV9SRUFEOChkZXZfcHJpdi0+bW1pbywgKHJlZykpCisjZGVmaW5lIFIxMjhfV1JJVEU4KHJlZywgdmFsKQlEUk1fV1JJVEU4KGRldl9wcml2LT5tbWlvLCAocmVnKSwgKHZhbCkpCiAKLSNkZWZpbmUgUjEyOF9XUklURV9QTEwoYWRkcix2YWwpCQkJCQlcCisjZGVmaW5lIFIxMjhfV1JJVEVfUExMKGFkZHIsIHZhbCkJCQkJCVwKIGRvIHsJCQkJCQkJCQlcCiAJUjEyOF9XUklURTgoUjEyOF9DTE9DS19DTlRMX0lOREVYLAkJCQlcCiAJCSAgICAoKGFkZHIpICYgMHgxZikgfCBSMTI4X1BMTF9XUl9FTik7CQkJXAogCVIxMjhfV1JJVEUoUjEyOF9DTE9DS19DTlRMX0RBVEEsICh2YWwpKTsJCQlcCiB9IHdoaWxlICgwKQogCi0jZGVmaW5lIENDRV9QQUNLRVQwKCByZWcsIG4gKQkJKFIxMjhfQ0NFX1BBQ0tFVDAgfAkJXAorI2RlZmluZSBDQ0VfUEFDS0VUMChyZWcsIG4pCQkoUjEyOF9DQ0VfUEFDS0VUMCB8CQlcCiAJCQkJCSAoKG4pIDw8IDE2KSB8ICgocmVnKSA+PiAyKSkKLSNkZWZpbmUgQ0NFX1BBQ0tFVDEoIHJlZzAsIHJlZzEgKQkoUjEyOF9DQ0VfUEFDS0VUMSB8CQlcCisjZGVmaW5lIENDRV9QQUNLRVQxKHJlZzAsIHJlZzEpCQkoUjEyOF9DQ0VfUEFDS0VUMSB8CQlcCiAJCQkJCSAoKChyZWcxKSA+PiAyKSA8PCAxMSkgfCAoKHJlZzApID4+IDIpKQogI2RlZmluZSBDQ0VfUEFDS0VUMigpCQkJKFIxMjhfQ0NFX1BBQ0tFVDIpCi0jZGVmaW5lIENDRV9QQUNLRVQzKCBwa3QsIG4gKQkJKFIxMjhfQ0NFX1BBQ0tFVDMgfAkJXAorI2RlZmluZSBDQ0VfUEFDS0VUMyhwa3QsIG4pCQkoUjEyOF9DQ0VfUEFDS0VUMyB8CQlcCiAJCQkJCSAocGt0KSB8ICgobikgPDwgMTYpKQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHIxMjhfdXBkYXRlX3Jpbmdfc25hcHNob3QoZHJtX3IxMjhfcHJpdmF0ZV90ICogZGV2X3ByaXYpCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHIxMjhfdXBkYXRlX3Jpbmdfc25hcHNob3QoZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdikKIHsKIAlkcm1fcjEyOF9yaW5nX2J1ZmZlcl90ICpyaW5nID0gJmRldl9wcml2LT5yaW5nOwogCXJpbmctPnNwYWNlID0gKEdFVF9SSU5HX0hFQUQoZGV2X3ByaXYpIC0gcmluZy0+dGFpbCkgKiBzaXplb2YodTMyKTsKQEAgLTQzMCwzNyArNDMwLDM4IEBACiAJfQkJCQkJCQkJXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBSSU5HX1NQQUNFX1RFU1RfV0lUSF9SRVRVUk4oIGRldl9wcml2ICkJCQkJXAorI2RlZmluZSBSSU5HX1NQQUNFX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpCQkJCVwKIGRvIHsJCQkJCQkJCQlcCiAJZHJtX3IxMjhfcmluZ19idWZmZXJfdCAqcmluZyA9ICZkZXZfcHJpdi0+cmluZzsgaW50IGk7CQlcCi0JaWYgKCByaW5nLT5zcGFjZSA8IHJpbmctPmhpZ2hfbWFyayApIHsJCQkJXAotCQlmb3IgKCBpID0gMCA7IGkgPCBkZXZfcHJpdi0+dXNlY190aW1lb3V0IDsgaSsrICkgewlcCi0JCQlyMTI4X3VwZGF0ZV9yaW5nX3NuYXBzaG90KCBkZXZfcHJpdiApOwkJXAotCQkJaWYgKCByaW5nLT5zcGFjZSA+PSByaW5nLT5oaWdoX21hcmsgKQkJXAorCWlmIChyaW5nLT5zcGFjZSA8IHJpbmctPmhpZ2hfbWFyaykgewkJCQlcCisJCWZvciAoaSA9IDAgOyBpIDwgZGV2X3ByaXYtPnVzZWNfdGltZW91dCA7IGkrKykgewlcCisJCQlyMTI4X3VwZGF0ZV9yaW5nX3NuYXBzaG90KGRldl9wcml2KTsJCVwKKwkJCWlmIChyaW5nLT5zcGFjZSA+PSByaW5nLT5oaWdoX21hcmspCQlcCiAJCQkJZ290byBfX3Jpbmdfc3BhY2VfZG9uZTsJCQlcCi0JCQlEUk1fVURFTEFZKDEpOwkJCQlcCisJCQlEUk1fVURFTEFZKDEpOwkJCQkJXAogCQl9CQkJCQkJCVwKLQkJRFJNX0VSUk9SKCAicmluZyBzcGFjZSBjaGVjayBmYWlsZWQhXG4iICk7CQlcCi0JCXJldHVybiAtRUJVU1k7CQkJCVwKKwkJRFJNX0VSUk9SKCJyaW5nIHNwYWNlIGNoZWNrIGZhaWxlZCFcbiIpOwkJXAorCQlyZXR1cm4gLUVCVVNZOwkJCQkJCVwKIAl9CQkJCQkJCQlcCiAgX19yaW5nX3NwYWNlX2RvbmU6CQkJCQkJCVwKIAk7CQkJCQkJCQlcCiB9IHdoaWxlICgwKQogCi0jZGVmaW5lIFZCX0FHRV9URVNUX1dJVEhfUkVUVVJOKCBkZXZfcHJpdiApCQkJCVwKKyNkZWZpbmUgVkJfQUdFX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpCQkJCVwKIGRvIHsJCQkJCQkJCQlcCiAJZHJtX3IxMjhfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwkJXAotCWlmICggc2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA+PSBSMTI4X01BWF9WQl9BR0UgKSB7CQlcCi0JCWludCBfX3JldCA9IHIxMjhfZG9fY2NlX2lkbGUoIGRldl9wcml2ICk7CQlcCi0JCWlmICggX19yZXQgKSByZXR1cm4gX19yZXQ7CQkJCVwKKwlpZiAoc2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA+PSBSMTI4X01BWF9WQl9BR0UpIHsJCVwKKwkJaW50IF9fcmV0ID0gcjEyOF9kb19jY2VfaWRsZShkZXZfcHJpdik7CQkJXAorCQlpZiAoX19yZXQpCQkJCQkJXAorCQkJcmV0dXJuIF9fcmV0OwkJCQkJXAogCQlzYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0gMDsJCQkJXAotCQlyMTI4X2ZyZWVsaXN0X3Jlc2V0KCBkZXYgKTsJCQkJXAorCQlyMTI4X2ZyZWVsaXN0X3Jlc2V0KGRldik7CQkJCVwKIAl9CQkJCQkJCQlcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIFIxMjhfV0FJVF9VTlRJTF9QQUdFX0ZMSVBQRUQoKSBkbyB7CQkJCVwKLQlPVVRfUklORyggQ0NFX1BBQ0tFVDAoIFIxMjhfV0FJVF9VTlRJTCwgMCApICk7CQkJXAotCU9VVF9SSU5HKCBSMTI4X0VWRU5UX0NSVENfT0ZGU0VUICk7CQkJCVwKKwlPVVRfUklORyhDQ0VfUEFDS0VUMChSMTI4X1dBSVRfVU5USUwsIDApKTsJCQlcCisJT1VUX1JJTkcoUjEyOF9FVkVOVF9DUlRDX09GRlNFVCk7CQkJCVwKIH0gd2hpbGUgKDApCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTQ3MiwxMyArNDczLDEyIEBACiAjZGVmaW5lIFJJTkdfTE9DQUxTCQkJCQkJCVwKIAlpbnQgd3JpdGUsIF9ucjsgdW5zaWduZWQgaW50IHRhaWxfbWFzazsgdm9sYXRpbGUgdTMyICpyaW5nOwogCi0jZGVmaW5lIEJFR0lOX1JJTkcoIG4gKSBkbyB7CQkJCQkJXAotCWlmICggUjEyOF9WRVJCT1NFICkgewkJCQkJCVwKLQkJRFJNX0lORk8oICJCRUdJTl9SSU5HKCAlZCApXG4iLCAobikpOwkJCVwKLQl9CQkJCQkJCQlcCi0JaWYgKCBkZXZfcHJpdi0+cmluZy5zcGFjZSA8PSAobikgKiBzaXplb2YodTMyKSApIHsJCVwKKyNkZWZpbmUgQkVHSU5fUklORyhuKSBkbyB7CQkJCQkJXAorCWlmIChSMTI4X1ZFUkJPU0UpCQkJCQkJXAorCQlEUk1fSU5GTygiQkVHSU5fUklORyglZClcbiIsIChuKSk7CQkJXAorCWlmIChkZXZfcHJpdi0+cmluZy5zcGFjZSA8PSAobikgKiBzaXplb2YodTMyKSkgewkJXAogCQlDT01NSVRfUklORygpOwkJCQkJCVwKLQkJcjEyOF93YWl0X3JpbmcoIGRldl9wcml2LCAobikgKiBzaXplb2YodTMyKSApOwkJXAorCQlyMTI4X3dhaXRfcmluZyhkZXZfcHJpdiwgKG4pICogc2l6ZW9mKHUzMikpOwkJXAogCX0JCQkJCQkJCVwKIAlfbnIgPSBuOyBkZXZfcHJpdi0+cmluZy5zcGFjZSAtPSAobikgKiBzaXplb2YodTMyKTsJCVwKIAlyaW5nID0gZGV2X3ByaXYtPnJpbmcuc3RhcnQ7CQkJCQlcCkBAIC00OTQsNDAgKzQ5NCwzNiBAQAogI2RlZmluZSBSMTI4X0JST0tFTl9DQ0UJMQogCiAjZGVmaW5lIEFEVkFOQ0VfUklORygpIGRvIHsJCQkJCQlcCi0JaWYgKCBSMTI4X1ZFUkJPU0UgKSB7CQkJCQkJXAotCQlEUk1fSU5GTyggIkFEVkFOQ0VfUklORygpIHdyPTB4JTA2eCB0YWlsPTB4JTA2eFxuIiwJXAotCQkJICB3cml0ZSwgZGV2X3ByaXYtPnJpbmcudGFpbCApOwkJCVwKLQl9CQkJCQkJCQlcCi0JaWYgKCBSMTI4X0JST0tFTl9DQ0UgJiYgd3JpdGUgPCAzMiApIHsJCQkJXAotCQltZW1jcHkoIGRldl9wcml2LT5yaW5nLmVuZCwJCQkJXAotCQkJZGV2X3ByaXYtPnJpbmcuc3RhcnQsCQkJCVwKLQkJCXdyaXRlICogc2l6ZW9mKHUzMikgKTsJCQkJXAotCX0JCQkJCQkJCVwKLQlpZiAoKChkZXZfcHJpdi0+cmluZy50YWlsICsgX25yKSAmIHRhaWxfbWFzaykgIT0gd3JpdGUpIHsJXAorCWlmIChSMTI4X1ZFUkJPU0UpCQkJCQkJXAorCQlEUk1fSU5GTygiQURWQU5DRV9SSU5HKCkgd3I9MHglMDZ4IHRhaWw9MHglMDZ4XG4iLAlcCisJCQkgd3JpdGUsIGRldl9wcml2LT5yaW5nLnRhaWwpOwkJCVwKKwlpZiAoUjEyOF9CUk9LRU5fQ0NFICYmIHdyaXRlIDwgMzIpCQkJCVwKKwkJbWVtY3B5KGRldl9wcml2LT5yaW5nLmVuZCwJCQkJXAorCQkgICAgICAgZGV2X3ByaXYtPnJpbmcuc3RhcnQsCQkJCVwKKwkJICAgICAgIHdyaXRlICogc2l6ZW9mKHUzMikpOwkJCQlcCisJaWYgKCgoZGV2X3ByaXYtPnJpbmcudGFpbCArIF9ucikgJiB0YWlsX21hc2spICE9IHdyaXRlKQkJXAogCQlEUk1fRVJST1IoCQkJCQkJXAogCQkJIkFEVkFOQ0VfUklORygpOiBtaXNtYXRjaDogbnI6ICV4IHdyaXRlOiAleCBsaW5lOiAlZFxuIiwJXAogCQkJKChkZXZfcHJpdi0+cmluZy50YWlsICsgX25yKSAmIHRhaWxfbWFzayksCVwKIAkJCXdyaXRlLCBfX0xJTkVfXyk7CQkJCVwKLQl9IGVsc2UJCQkJCQkJCVwKKwllbHNlCQkJCQkJCQlcCiAJCWRldl9wcml2LT5yaW5nLnRhaWwgPSB3cml0ZTsJCQkJXAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBDT01NSVRfUklORygpIGRvIHsJCQkJCQlcCi0JaWYgKCBSMTI4X1ZFUkJPU0UgKSB7CQkJCQkJXAotCQlEUk1fSU5GTyggIkNPTU1JVF9SSU5HKCkgdGFpbD0weCUwNnhcbiIsCQlcCi0JCQlkZXZfcHJpdi0+cmluZy50YWlsICk7CQkJCVwKLQl9CQkJCQkJCQlcCisJaWYgKFIxMjhfVkVSQk9TRSkJCQkJCQlcCisJCURSTV9JTkZPKCJDT01NSVRfUklORygpIHRhaWw9MHglMDZ4XG4iLAkJCVwKKwkJCSBkZXZfcHJpdi0+cmluZy50YWlsKTsJCQkJXAogCURSTV9NRU1PUllCQVJSSUVSKCk7CQkJCQkJXAotCVIxMjhfV1JJVEUoIFIxMjhfUE00X0JVRkZFUl9ETF9XUFRSLCBkZXZfcHJpdi0+cmluZy50YWlsICk7CVwKLQlSMTI4X1JFQUQoIFIxMjhfUE00X0JVRkZFUl9ETF9XUFRSICk7CQkJCVwKKwlSMTI4X1dSSVRFKFIxMjhfUE00X0JVRkZFUl9ETF9XUFRSLCBkZXZfcHJpdi0+cmluZy50YWlsKTsJXAorCVIxMjhfUkVBRChSMTI4X1BNNF9CVUZGRVJfRExfV1BUUik7CQkJCVwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgT1VUX1JJTkcoIHggKSBkbyB7CQkJCQkJXAotCWlmICggUjEyOF9WRVJCT1NFICkgewkJCQkJCVwKLQkJRFJNX0lORk8oICIgICBPVVRfUklORyggMHglMDh4ICkgYXQgMHgleFxuIiwJCVwKLQkJCSAgICh1bnNpZ25lZCBpbnQpKHgpLCB3cml0ZSApOwkJCVwKLQl9CQkJCQkJCQlcCi0JcmluZ1t3cml0ZSsrXSA9IGNwdV90b19sZTMyKCB4ICk7CQkJCVwKKyNkZWZpbmUgT1VUX1JJTkcoeCkgZG8gewkJCQkJCVwKKwlpZiAoUjEyOF9WRVJCT1NFKQkJCQkJCVwKKwkJRFJNX0lORk8oIiAgIE9VVF9SSU5HKCAweCUwOHggKSBhdCAweCV4XG4iLAkJXAorCQkJICh1bnNpZ25lZCBpbnQpKHgpLCB3cml0ZSk7CQkJXAorCXJpbmdbd3JpdGUrK10gPSBjcHVfdG9fbGUzMih4KTsJCQkJCVwKIAl3cml0ZSAmPSB0YWlsX21hc2s7CQkJCQkJXAogfSB3aGlsZSAoMCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfaXJxLmMKaW5kZXggNjk4MTBmYi4uNDI5ZDVhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2lycS5jCkBAIC05MCw3ICs5MCw3IEBACiAJICovCiB9CiAKLXZvaWQgcjEyOF9kcml2ZXJfaXJxX3ByZWluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCit2b2lkIHIxMjhfZHJpdmVyX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fcjEyOF9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIApAQCAtMTA1LDcgKzEwNSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgcjEyOF9kcml2ZXJfaXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK3ZvaWQgcjEyOF9kcml2ZXJfaXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX3IxMjhfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAJaWYgKCFkZXZfcHJpdikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfc3RhdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfc3RhdGUuYwppbmRleCBhZjI2NjVjLi4wNzdhZjFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X3N0YXRlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9zdGF0ZS5jCkBAIC0zNyw4ICszNyw4IEBACiAgKiBDQ0UgaGFyZHdhcmUgc3RhdGUgcHJvZ3JhbW1pbmcgZnVuY3Rpb25zCiAgKi8KIAotc3RhdGljIHZvaWQgcjEyOF9lbWl0X2NsaXBfcmVjdHMoZHJtX3IxMjhfcHJpdmF0ZV90ICogZGV2X3ByaXYsCi0JCQkJIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICogYm94ZXMsIGludCBjb3VudCkKK3N0YXRpYyB2b2lkIHIxMjhfZW1pdF9jbGlwX3JlY3RzKGRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYsCisJCQkJIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpib3hlcywgaW50IGNvdW50KQogewogCXUzMiBhdXhfc2NfY250bCA9IDB4MDAwMDAwMDA7CiAJUklOR19MT0NBTFM7CkBAIC04MCw3ICs4MCw3IEBACiAJQURWQU5DRV9SSU5HKCk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgcjEyOF9lbWl0X2NvcmUoZHJtX3IxMjhfcHJpdmF0ZV90ICogZGV2X3ByaXYpCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHIxMjhfZW1pdF9jb3JlKGRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYpCiB7CiAJZHJtX3IxMjhfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwogCWRybV9yMTI4X2NvbnRleHRfcmVnc190ICpjdHggPSAmc2FyZWFfcHJpdi0+Y29udGV4dF9zdGF0ZTsKQEAgLTk1LDcgKzk1LDcgQEAKIAlBRFZBTkNFX1JJTkcoKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCByMTI4X2VtaXRfY29udGV4dChkcm1fcjEyOF9wcml2YXRlX3QgKiBkZXZfcHJpdikKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgcjEyOF9lbWl0X2NvbnRleHQoZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdikKIHsKIAlkcm1fcjEyOF9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CiAJZHJtX3IxMjhfY29udGV4dF9yZWdzX3QgKmN0eCA9ICZzYXJlYV9wcml2LT5jb250ZXh0X3N0YXRlOwpAQCAtMTIxLDcgKzEyMSw3IEBACiAJQURWQU5DRV9SSU5HKCk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgcjEyOF9lbWl0X3NldHVwKGRybV9yMTI4X3ByaXZhdGVfdCAqIGRldl9wcml2KQorc3RhdGljIF9faW5saW5lX18gdm9pZCByMTI4X2VtaXRfc2V0dXAoZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdikKIHsKIAlkcm1fcjEyOF9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CiAJZHJtX3IxMjhfY29udGV4dF9yZWdzX3QgKmN0eCA9ICZzYXJlYV9wcml2LT5jb250ZXh0X3N0YXRlOwpAQCAtMTM3LDcgKzEzNyw3IEBACiAJQURWQU5DRV9SSU5HKCk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgcjEyOF9lbWl0X21hc2tzKGRybV9yMTI4X3ByaXZhdGVfdCAqIGRldl9wcml2KQorc3RhdGljIF9faW5saW5lX18gdm9pZCByMTI4X2VtaXRfbWFza3MoZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdikKIHsKIAlkcm1fcjEyOF9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CiAJZHJtX3IxMjhfY29udGV4dF9yZWdzX3QgKmN0eCA9ICZzYXJlYV9wcml2LT5jb250ZXh0X3N0YXRlOwpAQCAtMTU2LDcgKzE1Niw3IEBACiAJQURWQU5DRV9SSU5HKCk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgcjEyOF9lbWl0X3dpbmRvdyhkcm1fcjEyOF9wcml2YXRlX3QgKiBkZXZfcHJpdikKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgcjEyOF9lbWl0X3dpbmRvdyhkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2KQogewogCWRybV9yMTI4X3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKIAlkcm1fcjEyOF9jb250ZXh0X3JlZ3NfdCAqY3R4ID0gJnNhcmVhX3ByaXYtPmNvbnRleHRfc3RhdGU7CkBAIC0xNzEsNyArMTcxLDcgQEAKIAlBRFZBTkNFX1JJTkcoKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCByMTI4X2VtaXRfdGV4MChkcm1fcjEyOF9wcml2YXRlX3QgKiBkZXZfcHJpdikKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgcjEyOF9lbWl0X3RleDAoZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdikKIHsKIAlkcm1fcjEyOF9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CiAJZHJtX3IxMjhfY29udGV4dF9yZWdzX3QgKmN0eCA9ICZzYXJlYV9wcml2LT5jb250ZXh0X3N0YXRlOwpAQCAtMTg3LDkgKzE4Nyw4IEBACiAJT1VUX1JJTkcodGV4LT50ZXhfY250bCk7CiAJT1VUX1JJTkcodGV4LT50ZXhfY29tYmluZV9jbnRsKTsKIAlPVVRfUklORyhjdHgtPnRleF9zaXplX3BpdGNoX2MpOwotCWZvciAoaSA9IDA7IGkgPCBSMTI4X01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IFIxMjhfTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCiAJCU9VVF9SSU5HKHRleC0+dGV4X29mZnNldFtpXSk7Ci0JfQogCiAJT1VUX1JJTkcoQ0NFX1BBQ0tFVDAoUjEyOF9DT05TVEFOVF9DT0xPUl9DLCAxKSk7CiAJT1VUX1JJTkcoY3R4LT5jb25zdGFudF9jb2xvcl9jKTsKQEAgLTE5OCw3ICsxOTcsNyBAQAogCUFEVkFOQ0VfUklORygpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHIxMjhfZW1pdF90ZXgxKGRybV9yMTI4X3ByaXZhdGVfdCAqIGRldl9wcml2KQorc3RhdGljIF9faW5saW5lX18gdm9pZCByMTI4X2VtaXRfdGV4MShkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2KQogewogCWRybV9yMTI4X3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKIAlkcm1fcjEyOF90ZXh0dXJlX3JlZ3NfdCAqdGV4ID0gJnNhcmVhX3ByaXYtPnRleF9zdGF0ZVsxXTsKQEAgLTIxMSw5ICsyMTAsOCBAQAogCU9VVF9SSU5HKENDRV9QQUNLRVQwKFIxMjhfU0VDX1RFWF9DTlRMX0MsIDEgKyBSMTI4X01BWF9URVhUVVJFX0xFVkVMUykpOwogCU9VVF9SSU5HKHRleC0+dGV4X2NudGwpOwogCU9VVF9SSU5HKHRleC0+dGV4X2NvbWJpbmVfY250bCk7Ci0JZm9yIChpID0gMDsgaSA8IFIxMjhfTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgUjEyOF9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKIAkJT1VUX1JJTkcodGV4LT50ZXhfb2Zmc2V0W2ldKTsKLQl9CiAKIAlPVVRfUklORyhDQ0VfUEFDS0VUMChSMTI4X1NFQ19URVhUVVJFX0JPUkRFUl9DT0xPUl9DLCAwKSk7CiAJT1VUX1JJTkcodGV4LT50ZXhfYm9yZGVyX2NvbG9yKTsKQEAgLTIyMSw3ICsyMTksNyBAQAogCUFEVkFOQ0VfUklORygpOwogfQogCi1zdGF0aWMgdm9pZCByMTI4X2VtaXRfc3RhdGUoZHJtX3IxMjhfcHJpdmF0ZV90ICogZGV2X3ByaXYpCitzdGF0aWMgdm9pZCByMTI4X2VtaXRfc3RhdGUoZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdikKIHsKIAlkcm1fcjEyOF9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CiAJdW5zaWduZWQgaW50IGRpcnR5ID0gc2FyZWFfcHJpdi0+ZGlydHk7CkBAIC0yNzQsNyArMjcyLDcgQEAKICAqIFBlcmZvcm1hbmNlIG1vbml0b3JpbmcgZnVuY3Rpb25zCiAgKi8KIAotc3RhdGljIHZvaWQgcjEyOF9jbGVhcl9ib3goZHJtX3IxMjhfcHJpdmF0ZV90ICogZGV2X3ByaXYsCitzdGF0aWMgdm9pZCByMTI4X2NsZWFyX2JveChkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2LAogCQkJICAgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsIGludCByLCBpbnQgZywgaW50IGIpCiB7CiAJdTMyIHBpdGNoLCBvZmZzZXQ7CkBAIC0zMjEsMTMgKzMxOSwxMiBAQAogCUFEVkFOQ0VfUklORygpOwogfQogCi1zdGF0aWMgdm9pZCByMTI4X2NjZV9wZXJmb3JtYW5jZV9ib3hlcyhkcm1fcjEyOF9wcml2YXRlX3QgKiBkZXZfcHJpdikKK3N0YXRpYyB2b2lkIHIxMjhfY2NlX3BlcmZvcm1hbmNlX2JveGVzKGRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYpCiB7Ci0JaWYgKGF0b21pY19yZWFkKCZkZXZfcHJpdi0+aWRsZV9jb3VudCkgPT0gMCkgeworCWlmIChhdG9taWNfcmVhZCgmZGV2X3ByaXYtPmlkbGVfY291bnQpID09IDApCiAJCXIxMjhfY2xlYXJfYm94KGRldl9wcml2LCA2NCwgNCwgOCwgOCwgMCwgMjU1LCAwKTsKLQl9IGVsc2UgeworCWVsc2UKIAkJYXRvbWljX3NldCgmZGV2X3ByaXYtPmlkbGVfY291bnQsIDApOwotCX0KIH0KIAogI2VuZGlmCkBAIC0zNTIsOCArMzQ5LDggQEAKIAkJIChmbGFncyAmIFIxMjhfUkVRVUlSRV9RVUlFU0NFTkNFKSA/ICJxdWllc2NlbmNlLCAiIDogIiIpOwogfQogCi1zdGF0aWMgdm9pZCByMTI4X2NjZV9kaXNwYXRjaF9jbGVhcihzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKLQkJCQkgICAgZHJtX3IxMjhfY2xlYXJfdCAqIGNsZWFyKQorc3RhdGljIHZvaWQgcjEyOF9jY2VfZGlzcGF0Y2hfY2xlYXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgZHJtX3IxMjhfY2xlYXJfdCAqY2xlYXIpCiB7CiAJZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX3IxMjhfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwpAQCAtNDU4LDcgKzQ1NSw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCByMTI4X2NjZV9kaXNwYXRjaF9zd2FwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQorc3RhdGljIHZvaWQgcjEyOF9jY2VfZGlzcGF0Y2hfc3dhcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9yMTI4X3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKQEAgLTUyNCw3ICs1MjEsNyBAQAogCUFEVkFOQ0VfUklORygpOwogfQogCi1zdGF0aWMgdm9pZCByMTI4X2NjZV9kaXNwYXRjaF9mbGlwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQorc3RhdGljIHZvaWQgcjEyOF9jY2VfZGlzcGF0Y2hfZmxpcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCVJJTkdfTE9DQUxTOwpAQCAtNTQyLDExICs1MzksMTAgQEAKIAlSMTI4X1dBSVRfVU5USUxfUEFHRV9GTElQUEVEKCk7CiAJT1VUX1JJTkcoQ0NFX1BBQ0tFVDAoUjEyOF9DUlRDX09GRlNFVCwgMCkpOwogCi0JaWYgKGRldl9wcml2LT5jdXJyZW50X3BhZ2UgPT0gMCkgeworCWlmIChkZXZfcHJpdi0+Y3VycmVudF9wYWdlID09IDApCiAJCU9VVF9SSU5HKGRldl9wcml2LT5iYWNrX29mZnNldCk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCU9VVF9SSU5HKGRldl9wcml2LT5mcm9udF9vZmZzZXQpOwotCX0KIAogCUFEVkFOQ0VfUklORygpOwogCkBAIC01NjYsNyArNTYyLDcgQEAKIAlBRFZBTkNFX1JJTkcoKTsKIH0KIAotc3RhdGljIHZvaWQgcjEyOF9jY2VfZGlzcGF0Y2hfdmVydGV4KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBzdHJ1Y3QgZHJtX2J1ZiAqIGJ1ZikKK3N0YXRpYyB2b2lkIHIxMjhfY2NlX2Rpc3BhdGNoX3ZlcnRleChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2J1ZiAqYnVmKQogewogCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9yMTI4X2J1Zl9wcml2X3QgKmJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsKQEAgLTU4NSw5ICs1ODEsOCBAQAogCWlmIChidWYtPnVzZWQpIHsKIAkJYnVmX3ByaXYtPmRpc3BhdGNoZWQgPSAxOwogCi0JCWlmIChzYXJlYV9wcml2LT5kaXJ0eSAmIH5SMTI4X1VQTE9BRF9DTElQUkVDVFMpIHsKKwkJaWYgKHNhcmVhX3ByaXYtPmRpcnR5ICYgflIxMjhfVVBMT0FEX0NMSVBSRUNUUykKIAkJCXIxMjhfZW1pdF9zdGF0ZShkZXZfcHJpdik7Ci0JCX0KIAogCQlkbyB7CiAJCQkvKiBFbWl0IHRoZSBuZXh0IHNldCBvZiB1cCB0byB0aHJlZSBjbGlwcmVjdHMgKi8KQEAgLTYzNiw4ICs2MzEsOCBAQAogCXNhcmVhX3ByaXYtPm5ib3ggPSAwOwogfQogCi1zdGF0aWMgdm9pZCByMTI4X2NjZV9kaXNwYXRjaF9pbmRpcmVjdChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKLQkJCQkgICAgICAgc3RydWN0IGRybV9idWYgKiBidWYsIGludCBzdGFydCwgaW50IGVuZCkKK3N0YXRpYyB2b2lkIHIxMjhfY2NlX2Rpc3BhdGNoX2luZGlyZWN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBkcm1fYnVmICpidWYsIGludCBzdGFydCwgaW50IGVuZCkKIHsKIAlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1fcjEyOF9idWZfcHJpdl90ICpidWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7CkBAIC02OTEsOCArNjg2LDggQEAKIAlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCsrOwogfQogCi1zdGF0aWMgdm9pZCByMTI4X2NjZV9kaXNwYXRjaF9pbmRpY2VzKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LAotCQkJCSAgICAgIHN0cnVjdCBkcm1fYnVmICogYnVmLAorc3RhdGljIHZvaWQgcjEyOF9jY2VfZGlzcGF0Y2hfaW5kaWNlcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBkcm1fYnVmICpidWYsCiAJCQkJICAgICAgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgY291bnQpCiB7CiAJZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC03MTMsOSArNzA4LDggQEAKIAlpZiAoc3RhcnQgIT0gZW5kKSB7CiAJCWJ1Zl9wcml2LT5kaXNwYXRjaGVkID0gMTsKIAotCQlpZiAoc2FyZWFfcHJpdi0+ZGlydHkgJiB+UjEyOF9VUExPQURfQ0xJUFJFQ1RTKSB7CisJCWlmIChzYXJlYV9wcml2LT5kaXJ0eSAmIH5SMTI4X1VQTE9BRF9DTElQUkVDVFMpCiAJCQlyMTI4X2VtaXRfc3RhdGUoZGV2X3ByaXYpOwotCQl9CiAKIAkJZHdvcmRzID0gKGVuZCAtIHN0YXJ0ICsgMykgLyBzaXplb2YodTMyKTsKIApAQCAtNzc1LDkgKzc2OSw5IEBACiAJc2FyZWFfcHJpdi0+bmJveCA9IDA7CiB9CiAKLXN0YXRpYyBpbnQgcjEyOF9jY2VfZGlzcGF0Y2hfYmxpdChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKK3N0YXRpYyBpbnQgcjEyOF9jY2VfZGlzcGF0Y2hfYmxpdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCi0JCQkJICBkcm1fcjEyOF9ibGl0X3QgKiBibGl0KQorCQkJCSAgZHJtX3IxMjhfYmxpdF90ICpibGl0KQogewogCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1fZGV2aWNlX2RtYSAqZG1hID0gZGV2LT5kbWE7CkBAIC04ODcsOCArODgxLDggQEAKICAqIGhhdmUgaGFyZHdhcmUgc3RlbmNpbCBzdXBwb3J0LgogICovCiAKLXN0YXRpYyBpbnQgcjEyOF9jY2VfZGlzcGF0Y2hfd3JpdGVfc3BhbihzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKLQkJCQkJZHJtX3IxMjhfZGVwdGhfdCAqIGRlcHRoKQorc3RhdGljIGludCByMTI4X2NjZV9kaXNwYXRjaF93cml0ZV9zcGFuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCWRybV9yMTI4X2RlcHRoX3QgKmRlcHRoKQogewogCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWludCBjb3VudCwgeCwgeTsKQEAgLTkwMiwxMiArODk2LDEwIEBACiAJaWYgKGNvdW50ID4gNDA5NiB8fCBjb3VudCA8PSAwKQogCQlyZXR1cm4gLUVNU0dTSVpFOwogCi0JaWYgKERSTV9DT1BZX0ZST01fVVNFUigmeCwgZGVwdGgtPngsIHNpemVvZih4KSkpIHsKKwlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKCZ4LCBkZXB0aC0+eCwgc2l6ZW9mKHgpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIoJnksIGRlcHRoLT55LCBzaXplb2YoeSkpKSB7CisJaWYgKERSTV9DT1BZX0ZST01fVVNFUigmeSwgZGVwdGgtPnksIHNpemVvZih5KSkpCiAJCXJldHVybiAtRUZBVUxUOwotCX0KIAogCWJ1ZmZlcl9zaXplID0gZGVwdGgtPm4gKiBzaXplb2YodTMyKTsKIAlidWZmZXIgPSBrbWFsbG9jKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKQEAgLTk4Myw4ICs5NzUsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHIxMjhfY2NlX2Rpc3BhdGNoX3dyaXRlX3BpeGVscyhzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKLQkJCQkJICBkcm1fcjEyOF9kZXB0aF90ICogZGVwdGgpCitzdGF0aWMgaW50IHIxMjhfY2NlX2Rpc3BhdGNoX3dyaXRlX3BpeGVscyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkgIGRybV9yMTI4X2RlcHRoX3QgKmRlcHRoKQogewogCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWludCBjb3VudCwgKngsICp5OwpAQCAtMTAwMSw5ICs5OTMsOCBAQAogCXhidWZfc2l6ZSA9IGNvdW50ICogc2l6ZW9mKCp4KTsKIAl5YnVmX3NpemUgPSBjb3VudCAqIHNpemVvZigqeSk7CiAJeCA9IGttYWxsb2MoeGJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoeCA9PSBOVUxMKSB7CisJaWYgKHggPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCXkgPSBrbWFsbG9jKHlidWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHkgPT0gTlVMTCkgewogCQlrZnJlZSh4KTsKQEAgLTExMDUsOCArMTA5Niw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcjEyOF9jY2VfZGlzcGF0Y2hfcmVhZF9zcGFuKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LAotCQkJCSAgICAgICBkcm1fcjEyOF9kZXB0aF90ICogZGVwdGgpCitzdGF0aWMgaW50IHIxMjhfY2NlX2Rpc3BhdGNoX3JlYWRfc3BhbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgICAgICBkcm1fcjEyOF9kZXB0aF90ICpkZXB0aCkKIHsKIAlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgY291bnQsIHgsIHk7CkBAIC0xMTE3LDEyICsxMTA4LDEwIEBACiAJaWYgKGNvdW50ID4gNDA5NiB8fCBjb3VudCA8PSAwKQogCQlyZXR1cm4gLUVNU0dTSVpFOwogCi0JaWYgKERSTV9DT1BZX0ZST01fVVNFUigmeCwgZGVwdGgtPngsIHNpemVvZih4KSkpIHsKKwlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKCZ4LCBkZXB0aC0+eCwgc2l6ZW9mKHgpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIoJnksIGRlcHRoLT55LCBzaXplb2YoeSkpKSB7CisJaWYgKERSTV9DT1BZX0ZST01fVVNFUigmeSwgZGVwdGgtPnksIHNpemVvZih5KSkpCiAJCXJldHVybiAtRUZBVUxUOwotCX0KIAogCUJFR0lOX1JJTkcoNyk7CiAKQEAgLTExNDgsOCArMTEzNyw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcjEyOF9jY2VfZGlzcGF0Y2hfcmVhZF9waXhlbHMoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsCi0JCQkJCSBkcm1fcjEyOF9kZXB0aF90ICogZGVwdGgpCitzdGF0aWMgaW50IHIxMjhfY2NlX2Rpc3BhdGNoX3JlYWRfcGl4ZWxzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCSBkcm1fcjEyOF9kZXB0aF90ICpkZXB0aCkKIHsKIAlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgY291bnQsICp4LCAqeTsKQEAgLTExNjEsMTYgKzExNTAsMTQgQEAKIAlpZiAoY291bnQgPiA0MDk2IHx8IGNvdW50IDw9IDApCiAJCXJldHVybiAtRU1TR1NJWkU7CiAKLQlpZiAoY291bnQgPiBkZXZfcHJpdi0+ZGVwdGhfcGl0Y2gpIHsKKwlpZiAoY291bnQgPiBkZXZfcHJpdi0+ZGVwdGhfcGl0Y2gpCiAJCWNvdW50ID0gZGV2X3ByaXYtPmRlcHRoX3BpdGNoOwotCX0KIAogCXhidWZfc2l6ZSA9IGNvdW50ICogc2l6ZW9mKCp4KTsKIAl5YnVmX3NpemUgPSBjb3VudCAqIHNpemVvZigqeSk7CiAJeCA9IGttYWxsb2MoeGJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoeCA9PSBOVUxMKSB7CisJaWYgKHggPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCXkgPSBrbWFsbG9jKHlidWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHkgPT0gTlVMTCkgewogCQlrZnJlZSh4KTsKQEAgLTEyMjAsNyArMTIwNyw3IEBACiAgKiBQb2x5Z29uIHN0aXBwbGUKICAqLwogCi1zdGF0aWMgdm9pZCByMTI4X2NjZV9kaXNwYXRjaF9zdGlwcGxlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCB1MzIgKiBzdGlwcGxlKQorc3RhdGljIHZvaWQgcjEyOF9jY2VfZGlzcGF0Y2hfc3RpcHBsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgKnN0aXBwbGUpCiB7CiAJZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IGk7CkBAIC0xMjMwLDkgKzEyMTcsOCBAQAogCUJFR0lOX1JJTkcoMzMpOwogCiAJT1VUX1JJTkcoQ0NFX1BBQ0tFVDAoUjEyOF9CUlVTSF9EQVRBMCwgMzEpKTsKLQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQogCQlPVVRfUklORyhzdGlwcGxlW2ldKTsKLQl9CiAKIAlBRFZBTkNFX1JJTkcoKTsKIH0KQEAgLTEyNjksNyArMTI1NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcjEyOF9kb19pbml0X3BhZ2VmbGlwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQorc3RhdGljIGludCByMTI4X2RvX2luaXRfcGFnZWZsaXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlEUk1fREVCVUcoIlxuIik7CkBAIC0xMjg4LDcgKzEyNzQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHIxMjhfZG9fY2xlYW51cF9wYWdlZmxpcChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK3N0YXRpYyBpbnQgcjEyOF9kb19jbGVhbnVwX3BhZ2VmbGlwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJRFJNX0RFQlVHKCJcbiIpOwpAQCAtMTY0NSwxNyArMTYzMSwxNiBAQAogCXJldHVybiAwOwogfQogCi12b2lkIHIxMjhfZHJpdmVyX3ByZWNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3ZvaWQgcjEyOF9kcml2ZXJfcHJlY2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CiAJaWYgKGRldi0+ZGV2X3ByaXZhdGUpIHsKIAkJZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JCWlmIChkZXZfcHJpdi0+cGFnZV9mbGlwcGluZykgeworCQlpZiAoZGV2X3ByaXYtPnBhZ2VfZmxpcHBpbmcpCiAJCQlyMTI4X2RvX2NsZWFudXBfcGFnZWZsaXAoZGV2KTsKLQkJfQogCX0KIH0KIAotdm9pZCByMTI4X2RyaXZlcl9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCit2b2lkIHIxMjhfZHJpdmVyX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXIxMjhfZG9fY2xlYW51cF9jY2UoZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL01ha2VmaWxlCmluZGV4IDg0YjFmMjcuLmFlYmUwMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZQpAQCAtNjksNSArNjksNiBAQAogCiByYWRlb24tJChDT05GSUdfQ09NUEFUKSArPSByYWRlb25faW9jMzIubwogcmFkZW9uLSQoQ09ORklHX1ZHQV9TV0lUQ0hFUk9PKSArPSByYWRlb25fYXRweF9oYW5kbGVyLm8KK3JhZGVvbi0kKENPTkZJR19BQ1BJKSArPSByYWRlb25fYWNwaS5vCiAKIG9iai0kKENPTkZJR19EUk1fUkFERU9OKSs9IHJhZGVvbi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5jCmluZGV4IDFkNTY5ODMuLjhlNDIxZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5jCkBAIC0xMDgsMTIgKzEwOCwxMSBAQAogCQkJYmFzZSsrOwogCQkJYnJlYWs7CiAJCWNhc2UgQVRPTV9JSU9fUkVBRDoKLQkJCXRlbXAgPSBjdHgtPmNhcmQtPnJlZ19yZWFkKGN0eC0+Y2FyZCwgQ1UxNihiYXNlICsgMSkpOworCQkJdGVtcCA9IGN0eC0+Y2FyZC0+aW9yZWdfcmVhZChjdHgtPmNhcmQsIENVMTYoYmFzZSArIDEpKTsKIAkJCWJhc2UgKz0gMzsKIAkJCWJyZWFrOwogCQljYXNlIEFUT01fSUlPX1dSSVRFOgotCQkJKHZvaWQpY3R4LT5jYXJkLT5yZWdfcmVhZChjdHgtPmNhcmQsIENVMTYoYmFzZSArIDEpKTsKLQkJCWN0eC0+Y2FyZC0+cmVnX3dyaXRlKGN0eC0+Y2FyZCwgQ1UxNihiYXNlICsgMSksIHRlbXApOworCQkJY3R4LT5jYXJkLT5pb3JlZ193cml0ZShjdHgtPmNhcmQsIENVMTYoYmFzZSArIDEpLCB0ZW1wKTsKIAkJCWJhc2UgKz0gMzsKIAkJCWJyZWFrOwogCQljYXNlIEFUT01fSUlPX0NMRUFSOgpAQCAtNzE1LDggKzcxNCw4IEBACiAJCQljamlmZmllcyA9IGppZmZpZXM7CiAJCQlpZiAodGltZV9hZnRlcihjamlmZmllcywgY3R4LT5sYXN0X2p1bXBfamlmZmllcykpIHsKIAkJCQljamlmZmllcyAtPSBjdHgtPmxhc3RfanVtcF9qaWZmaWVzOwotCQkJCWlmICgoamlmZmllc190b19tc2VjcyhjamlmZmllcykgPiAxMDAwKSkgewotCQkJCQlEUk1fRVJST1IoImF0b21iaW9zIHN0dWNrIGluIGxvb3AgZm9yIG1vcmUgdGhhbiAxc2VjIGFib3J0aW5nXG4iKTsKKwkJCQlpZiAoKGppZmZpZXNfdG9fbXNlY3MoY2ppZmZpZXMpID4gNTAwMCkpIHsKKwkJCQkJRFJNX0VSUk9SKCJhdG9tYmlvcyBzdHVjayBpbiBsb29wIGZvciBtb3JlIHRoYW4gNXNlY3MgYWJvcnRpbmdcbiIpOwogCQkJCQljdHgtPmFib3J0ID0gdHJ1ZTsKIAkJCQl9CiAJCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uaAppbmRleCBjZDFiNjRhLi5hNTg5YTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uaApAQCAtMTEzLDYgKzExMyw4IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKIAl2b2lkICgqIHJlZ193cml0ZSkoc3RydWN0IGNhcmRfaW5mbyAqLCB1aW50MzJfdCwgdWludDMyX3QpOyAgIC8qICBmaWxsZWQgYnkgZHJpdmVyICovCiAgICAgICAgIHVpbnQzMl90ICgqIHJlZ19yZWFkKShzdHJ1Y3QgY2FyZF9pbmZvICosIHVpbnQzMl90KTsgICAgICAgICAgLyogIGZpbGxlZCBieSBkcml2ZXIgKi8KKwl2b2lkICgqIGlvcmVnX3dyaXRlKShzdHJ1Y3QgY2FyZF9pbmZvICosIHVpbnQzMl90LCB1aW50MzJfdCk7ICAgLyogIGZpbGxlZCBieSBkcml2ZXIgKi8KKyAgICAgICAgdWludDMyX3QgKCogaW9yZWdfcmVhZCkoc3RydWN0IGNhcmRfaW5mbyAqLCB1aW50MzJfdCk7ICAgICAgICAgIC8qICBmaWxsZWQgYnkgZHJpdmVyICovCiAJdm9pZCAoKiBtY193cml0ZSkoc3RydWN0IGNhcmRfaW5mbyAqLCB1aW50MzJfdCwgdWludDMyX3QpOyAgIC8qICBmaWxsZWQgYnkgZHJpdmVyICovCiAgICAgICAgIHVpbnQzMl90ICgqIG1jX3JlYWQpKHN0cnVjdCBjYXJkX2luZm8gKiwgdWludDMyX3QpOyAgICAgICAgICAvKiAgZmlsbGVkIGJ5IGRyaXZlciAqLwogCXZvaWQgKCogcGxsX3dyaXRlKShzdHJ1Y3QgY2FyZF9pbmZvICosIHVpbnQzMl90LCB1aW50MzJfdCk7ICAgLyogIGZpbGxlZCBieSBkcml2ZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMKaW5kZXggOGMyZDY0Ny4uMTJhZDUxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMKQEAgLTQ0LDEwICs0NCw2IEBACiAKIAltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CiAKLQlhcmdzLnVzT3ZlcnNjYW5SaWdodCA9IDA7Ci0JYXJncy51c092ZXJzY2FuTGVmdCA9IDA7Ci0JYXJncy51c092ZXJzY2FuQm90dG9tID0gMDsKLQlhcmdzLnVzT3ZlcnNjYW5Ub3AgPSAwOwogCWFyZ3MudWNDUlRDID0gcmFkZW9uX2NydGMtPmNydGNfaWQ7CiAKIAlzd2l0Y2ggKHJhZGVvbl9jcnRjLT5ybXhfdHlwZSkgewpAQCAtNTYsNyArNTIsNiBAQAogCQlhcmdzLnVzT3ZlcnNjYW5Cb3R0b20gPSAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtIG1vZGUtPmNydGNfdmRpc3BsYXkpIC8gMjsKIAkJYXJncy51c092ZXJzY2FuTGVmdCA9IChhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5IC0gbW9kZS0+Y3J0Y19oZGlzcGxheSkgLyAyOwogCQlhcmdzLnVzT3ZlcnNjYW5SaWdodCA9IChhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5IC0gbW9kZS0+Y3J0Y19oZGlzcGxheSkgLyAyOwotCQlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKIAkJYnJlYWs7CiAJY2FzZSBSTVhfQVNQRUNUOgogCQlhMSA9IG1vZGUtPmNydGNfdmRpc3BsYXkgKiBhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5OwpAQCAtNjksMTcgKzY0LDE2IEBACiAJCQlhcmdzLnVzT3ZlcnNjYW5MZWZ0ID0gKGFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgLSAoYTEgLyBtb2RlLT5jcnRjX2hkaXNwbGF5KSkgLyAyOwogCQkJYXJncy51c092ZXJzY2FuUmlnaHQgPSAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtIChhMSAvIG1vZGUtPmNydGNfaGRpc3BsYXkpKSAvIDI7CiAJCX0KLQkJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CiAJCWJyZWFrOwogCWNhc2UgUk1YX0ZVTEw6CiAJZGVmYXVsdDoKLQkJYXJncy51c092ZXJzY2FuUmlnaHQgPSAwOwotCQlhcmdzLnVzT3ZlcnNjYW5MZWZ0ID0gMDsKLQkJYXJncy51c092ZXJzY2FuQm90dG9tID0gMDsKLQkJYXJncy51c092ZXJzY2FuVG9wID0gMDsKLQkJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CisJCWFyZ3MudXNPdmVyc2NhblJpZ2h0ID0gcmFkZW9uX2NydGMtPmhfYm9yZGVyOworCQlhcmdzLnVzT3ZlcnNjYW5MZWZ0ID0gcmFkZW9uX2NydGMtPmhfYm9yZGVyOworCQlhcmdzLnVzT3ZlcnNjYW5Cb3R0b20gPSByYWRlb25fY3J0Yy0+dl9ib3JkZXI7CisJCWFyZ3MudXNPdmVyc2NhblRvcCA9IHJhZGVvbl9jcnRjLT52X2JvcmRlcjsKIAkJYnJlYWs7CiAJfQorCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgKHVpbnQzMl90ICopJmFyZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBhdG9tYmlvc19zY2FsZXJfc2V0dXAoc3RydWN0IGRybV9jcnRjICpjcnRjKQpAQCAtMjgyLDIyICsyNzYsMjIgQEAKIAl1MTYgbWlzYyA9IDA7CiAKIAltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7Ci0JYXJncy51c0hfU2l6ZSA9IGNwdV90b19sZTE2KG1vZGUtPmNydGNfaGRpc3BsYXkpOworCWFyZ3MudXNIX1NpemUgPSBjcHVfdG9fbGUxNihtb2RlLT5jcnRjX2hkaXNwbGF5IC0gKHJhZGVvbl9jcnRjLT5oX2JvcmRlciAqIDIpKTsKIAlhcmdzLnVzSF9CbGFua2luZ19UaW1lID0KLQkJY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y19oYmxhbmtfZW5kIC0gbW9kZS0+Y3J0Y19oZGlzcGxheSk7Ci0JYXJncy51c1ZfU2l6ZSA9IGNwdV90b19sZTE2KG1vZGUtPmNydGNfdmRpc3BsYXkpOworCQljcHVfdG9fbGUxNihtb2RlLT5jcnRjX2hibGFua19lbmQgLSBtb2RlLT5jcnRjX2hkaXNwbGF5ICsgKHJhZGVvbl9jcnRjLT5oX2JvcmRlciAqIDIpKTsKKwlhcmdzLnVzVl9TaXplID0gY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y192ZGlzcGxheSAtIChyYWRlb25fY3J0Yy0+dl9ib3JkZXIgKiAyKSk7CiAJYXJncy51c1ZfQmxhbmtpbmdfVGltZSA9Ci0JICAgIGNwdV90b19sZTE2KG1vZGUtPmNydGNfdmJsYW5rX2VuZCAtIG1vZGUtPmNydGNfdmRpc3BsYXkpOworCQljcHVfdG9fbGUxNihtb2RlLT5jcnRjX3ZibGFua19lbmQgLSBtb2RlLT5jcnRjX3ZkaXNwbGF5ICsgKHJhZGVvbl9jcnRjLT52X2JvcmRlciAqIDIpKTsKIAlhcmdzLnVzSF9TeW5jT2Zmc2V0ID0KLQkJY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y19oc3luY19zdGFydCAtIG1vZGUtPmNydGNfaGRpc3BsYXkpOworCQljcHVfdG9fbGUxNihtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0IC0gbW9kZS0+Y3J0Y19oZGlzcGxheSArIHJhZGVvbl9jcnRjLT5oX2JvcmRlcik7CiAJYXJncy51c0hfU3luY1dpZHRoID0KIAkJY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y19oc3luY19lbmQgLSBtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0KTsKIAlhcmdzLnVzVl9TeW5jT2Zmc2V0ID0KLQkJY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y192c3luY19zdGFydCAtIG1vZGUtPmNydGNfdmRpc3BsYXkpOworCQljcHVfdG9fbGUxNihtb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0IC0gbW9kZS0+Y3J0Y192ZGlzcGxheSArIHJhZGVvbl9jcnRjLT52X2JvcmRlcik7CiAJYXJncy51c1ZfU3luY1dpZHRoID0KIAkJY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y192c3luY19lbmQgLSBtb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0KTsKLQkvKmFyZ3MudWNIX0JvcmRlciA9IG1vZGUtPmhib3JkZXI7Ki8KLQkvKmFyZ3MudWNWX0JvcmRlciA9IG1vZGUtPnZib3JkZXI7Ki8KKwlhcmdzLnVjSF9Cb3JkZXIgPSByYWRlb25fY3J0Yy0+aF9ib3JkZXI7CisJYXJncy51Y1ZfQm9yZGVyID0gcmFkZW9uX2NydGMtPnZfYm9yZGVyOwogCiAJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OVlNZTkMpCiAJCW1pc2MgfD0gQVRPTV9WU1lOQ19QT0xBUklUWTsKQEAgLTY2OSw2ICs2NjMsOTAgQEAKIAlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKIH0KIAorc3RhdGljIHZvaWQgYXRvbWJpb3NfY3J0Y19wcm9ncmFtX3BsbChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgICAgaW50IGNydGNfaWQsCisJCQkJICAgICAgaW50IHBsbF9pZCwKKwkJCQkgICAgICB1MzIgZW5jb2Rlcl9tb2RlLAorCQkJCSAgICAgIHUzMiBlbmNvZGVyX2lkLAorCQkJCSAgICAgIHUzMiBjbG9jaywKKwkJCQkgICAgICB1MzIgcmVmX2RpdiwKKwkJCQkgICAgICB1MzIgZmJfZGl2LAorCQkJCSAgICAgIHUzMiBmcmFjX2ZiX2RpdiwKKwkJCQkgICAgICB1MzIgcG9zdF9kaXYpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdTggZnJldiwgY3JldjsKKwlpbnQgaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBTZXRQaXhlbENsb2NrKTsKKwl1bmlvbiBzZXRfcGl4ZWxfY2xvY2sgYXJnczsKKworCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKKworCWlmICghYXRvbV9wYXJzZV9jbWRfaGVhZGVyKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAmZnJldiwKKwkJCQkgICAmY3JldikpCisJCXJldHVybjsKKworCXN3aXRjaCAoZnJldikgeworCWNhc2UgMToKKwkJc3dpdGNoIChjcmV2KSB7CisJCWNhc2UgMToKKwkJCWlmIChjbG9jayA9PSBBVE9NX0RJU0FCTEUpCisJCQkJcmV0dXJuOworCQkJYXJncy52MS51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihjbG9jayAvIDEwKTsKKwkJCWFyZ3MudjEudXNSZWZEaXYgPSBjcHVfdG9fbGUxNihyZWZfZGl2KTsKKwkJCWFyZ3MudjEudXNGYkRpdiA9IGNwdV90b19sZTE2KGZiX2Rpdik7CisJCQlhcmdzLnYxLnVjRnJhY0ZiRGl2ID0gZnJhY19mYl9kaXY7CisJCQlhcmdzLnYxLnVjUG9zdERpdiA9IHBvc3RfZGl2OworCQkJYXJncy52MS51Y1BwbGwgPSBwbGxfaWQ7CisJCQlhcmdzLnYxLnVjQ1JUQyA9IGNydGNfaWQ7CisJCQlhcmdzLnYxLnVjUmVmRGl2U3JjID0gMTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlhcmdzLnYyLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KGNsb2NrIC8gMTApOworCQkJYXJncy52Mi51c1JlZkRpdiA9IGNwdV90b19sZTE2KHJlZl9kaXYpOworCQkJYXJncy52Mi51c0ZiRGl2ID0gY3B1X3RvX2xlMTYoZmJfZGl2KTsKKwkJCWFyZ3MudjIudWNGcmFjRmJEaXYgPSBmcmFjX2ZiX2RpdjsKKwkJCWFyZ3MudjIudWNQb3N0RGl2ID0gcG9zdF9kaXY7CisJCQlhcmdzLnYyLnVjUHBsbCA9IHBsbF9pZDsKKwkJCWFyZ3MudjIudWNDUlRDID0gY3J0Y19pZDsKKwkJCWFyZ3MudjIudWNSZWZEaXZTcmMgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWFyZ3MudjMudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYoY2xvY2sgLyAxMCk7CisJCQlhcmdzLnYzLnVzUmVmRGl2ID0gY3B1X3RvX2xlMTYocmVmX2Rpdik7CisJCQlhcmdzLnYzLnVzRmJEaXYgPSBjcHVfdG9fbGUxNihmYl9kaXYpOworCQkJYXJncy52My51Y0ZyYWNGYkRpdiA9IGZyYWNfZmJfZGl2OworCQkJYXJncy52My51Y1Bvc3REaXYgPSBwb3N0X2RpdjsKKwkJCWFyZ3MudjMudWNQcGxsID0gcGxsX2lkOworCQkJYXJncy52My51Y01pc2NJbmZvID0gKHBsbF9pZCA8PCAyKTsKKwkJCWFyZ3MudjMudWNUcmFuc21pdHRlcklkID0gZW5jb2Rlcl9pZDsKKwkJCWFyZ3MudjMudWNFbmNvZGVyTW9kZSA9IGVuY29kZXJfbW9kZTsKKwkJCWJyZWFrOworCQljYXNlIDU6CisJCQlhcmdzLnY1LnVjQ1JUQyA9IGNydGNfaWQ7CisJCQlhcmdzLnY1LnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KGNsb2NrIC8gMTApOworCQkJYXJncy52NS51Y1JlZkRpdiA9IHJlZl9kaXY7CisJCQlhcmdzLnY1LnVzRmJEaXYgPSBjcHVfdG9fbGUxNihmYl9kaXYpOworCQkJYXJncy52NS51bEZiRGl2RGVjRnJhYyA9IGNwdV90b19sZTMyKGZyYWNfZmJfZGl2ICogMTAwMDAwKTsKKwkJCWFyZ3MudjUudWNQb3N0RGl2ID0gcG9zdF9kaXY7CisJCQlhcmdzLnY1LnVjTWlzY0luZm8gPSAwOyAvKiBIRE1JIGRlcHRoLCBldGMuICovCisJCQlhcmdzLnY1LnVjVHJhbnNtaXR0ZXJJRCA9IGVuY29kZXJfaWQ7CisJCQlhcmdzLnY1LnVjRW5jb2Rlck1vZGUgPSBlbmNvZGVyX21vZGU7CisJCQlhcmdzLnY1LnVjUHBsbCA9IHBsbF9pZDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJVbmtub3duIHRhYmxlIHZlcnNpb24gJWQgJWRcbiIsIGZyZXYsIGNyZXYpOworCQkJcmV0dXJuOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigiVW5rbm93biB0YWJsZSB2ZXJzaW9uICVkICVkXG4iLCBmcmV2LCBjcmV2KTsKKwkJcmV0dXJuOworCX0KKworCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgKHVpbnQzMl90ICopJmFyZ3MpOworfQorCiBzdGF0aWMgdm9pZCBhdG9tYmlvc19jcnRjX3NldF9wbGwoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKIHsKIAlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoY3J0Yyk7CkBAIC02NzYsMTcgKzc1NCwxMiBAQAogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSBOVUxMOwogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSBOVUxMOwotCXU4IGZyZXYsIGNyZXY7Ci0JaW50IGluZGV4OwotCXVuaW9uIHNldF9waXhlbF9jbG9jayBhcmdzOwogCXUzMiBwbGxfY2xvY2sgPSBtb2RlLT5jbG9jazsKIAl1MzIgcmVmX2RpdiA9IDAsIGZiX2RpdiA9IDAsIGZyYWNfZmJfZGl2ID0gMCwgcG9zdF9kaXYgPSAwOwogCXN0cnVjdCByYWRlb25fcGxsICpwbGw7CiAJdTMyIGFkanVzdGVkX2Nsb2NrOwogCWludCBlbmNvZGVyX21vZGUgPSAwOwogCi0JbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOwotCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKIAkJaWYgKGVuY29kZXItPmNydGMgPT0gY3J0YykgewogCQkJcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKQEAgLTcxOCw2OCArNzkxLDEwIEBACiAJcmFkZW9uX2NvbXB1dGVfcGxsKHBsbCwgYWRqdXN0ZWRfY2xvY2ssICZwbGxfY2xvY2ssICZmYl9kaXYsICZmcmFjX2ZiX2RpdiwKIAkJCSAgICZyZWZfZGl2LCAmcG9zdF9kaXYpOwogCi0JaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBTZXRQaXhlbENsb2NrKTsKLQlpZiAoIWF0b21fcGFyc2VfY21kX2hlYWRlcihyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgJmZyZXYsCi0JCQkJICAgJmNyZXYpKQotCQlyZXR1cm47CisJYXRvbWJpb3NfY3J0Y19wcm9ncmFtX3BsbChjcnRjLCByYWRlb25fY3J0Yy0+Y3J0Y19pZCwgcmFkZW9uX2NydGMtPnBsbF9pZCwKKwkJCQkgIGVuY29kZXJfbW9kZSwgcmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQsIG1vZGUtPmNsb2NrLAorCQkJCSAgcmVmX2RpdiwgZmJfZGl2LCBmcmFjX2ZiX2RpdiwgcG9zdF9kaXYpOwogCi0Jc3dpdGNoIChmcmV2KSB7Ci0JY2FzZSAxOgotCQlzd2l0Y2ggKGNyZXYpIHsKLQkJY2FzZSAxOgotCQkJYXJncy52MS51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihtb2RlLT5jbG9jayAvIDEwKTsKLQkJCWFyZ3MudjEudXNSZWZEaXYgPSBjcHVfdG9fbGUxNihyZWZfZGl2KTsKLQkJCWFyZ3MudjEudXNGYkRpdiA9IGNwdV90b19sZTE2KGZiX2Rpdik7Ci0JCQlhcmdzLnYxLnVjRnJhY0ZiRGl2ID0gZnJhY19mYl9kaXY7Ci0JCQlhcmdzLnYxLnVjUG9zdERpdiA9IHBvc3RfZGl2OwotCQkJYXJncy52MS51Y1BwbGwgPSByYWRlb25fY3J0Yy0+cGxsX2lkOwotCQkJYXJncy52MS51Y0NSVEMgPSByYWRlb25fY3J0Yy0+Y3J0Y19pZDsKLQkJCWFyZ3MudjEudWNSZWZEaXZTcmMgPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCWFyZ3MudjIudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYobW9kZS0+Y2xvY2sgLyAxMCk7Ci0JCQlhcmdzLnYyLnVzUmVmRGl2ID0gY3B1X3RvX2xlMTYocmVmX2Rpdik7Ci0JCQlhcmdzLnYyLnVzRmJEaXYgPSBjcHVfdG9fbGUxNihmYl9kaXYpOwotCQkJYXJncy52Mi51Y0ZyYWNGYkRpdiA9IGZyYWNfZmJfZGl2OwotCQkJYXJncy52Mi51Y1Bvc3REaXYgPSBwb3N0X2RpdjsKLQkJCWFyZ3MudjIudWNQcGxsID0gcmFkZW9uX2NydGMtPnBsbF9pZDsKLQkJCWFyZ3MudjIudWNDUlRDID0gcmFkZW9uX2NydGMtPmNydGNfaWQ7Ci0JCQlhcmdzLnYyLnVjUmVmRGl2U3JjID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQlhcmdzLnYzLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KG1vZGUtPmNsb2NrIC8gMTApOwotCQkJYXJncy52My51c1JlZkRpdiA9IGNwdV90b19sZTE2KHJlZl9kaXYpOwotCQkJYXJncy52My51c0ZiRGl2ID0gY3B1X3RvX2xlMTYoZmJfZGl2KTsKLQkJCWFyZ3MudjMudWNGcmFjRmJEaXYgPSBmcmFjX2ZiX2RpdjsKLQkJCWFyZ3MudjMudWNQb3N0RGl2ID0gcG9zdF9kaXY7Ci0JCQlhcmdzLnYzLnVjUHBsbCA9IHJhZGVvbl9jcnRjLT5wbGxfaWQ7Ci0JCQlhcmdzLnYzLnVjTWlzY0luZm8gPSAocmFkZW9uX2NydGMtPnBsbF9pZCA8PCAyKTsKLQkJCWFyZ3MudjMudWNUcmFuc21pdHRlcklkID0gcmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQ7Ci0JCQlhcmdzLnYzLnVjRW5jb2Rlck1vZGUgPSBlbmNvZGVyX21vZGU7Ci0JCQlicmVhazsKLQkJY2FzZSA1OgotCQkJYXJncy52NS51Y0NSVEMgPSByYWRlb25fY3J0Yy0+Y3J0Y19pZDsKLQkJCWFyZ3MudjUudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYobW9kZS0+Y2xvY2sgLyAxMCk7Ci0JCQlhcmdzLnY1LnVjUmVmRGl2ID0gcmVmX2RpdjsKLQkJCWFyZ3MudjUudXNGYkRpdiA9IGNwdV90b19sZTE2KGZiX2Rpdik7Ci0JCQlhcmdzLnY1LnVsRmJEaXZEZWNGcmFjID0gY3B1X3RvX2xlMzIoZnJhY19mYl9kaXYgKiAxMDAwMDApOwotCQkJYXJncy52NS51Y1Bvc3REaXYgPSBwb3N0X2RpdjsKLQkJCWFyZ3MudjUudWNNaXNjSW5mbyA9IDA7IC8qIEhETUkgZGVwdGgsIGV0Yy4gKi8KLQkJCWFyZ3MudjUudWNUcmFuc21pdHRlcklEID0gcmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQ7Ci0JCQlhcmdzLnY1LnVjRW5jb2Rlck1vZGUgPSBlbmNvZGVyX21vZGU7Ci0JCQlhcmdzLnY1LnVjUHBsbCA9IHJhZGVvbl9jcnRjLT5wbGxfaWQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCURSTV9FUlJPUigiVW5rbm93biB0YWJsZSB2ZXJzaW9uICVkICVkXG4iLCBmcmV2LCBjcmV2KTsKLQkJCXJldHVybjsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEUk1fRVJST1IoIlVua25vd24gdGFibGUgdmVyc2lvbiAlZCAlZFxuIiwgZnJldiwgY3Jldik7Ci0JCXJldHVybjsKLQl9Ci0KLQlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKIH0KIAogc3RhdGljIGludCBldmVyZ3JlZW5fY3J0Y19zZXRfYmFzZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCB4LCBpbnQgeSwKQEAgLTc5Nyw3ICs4MTIsNyBAQAogCiAJLyogbm8gZmIgYm91bmQgKi8KIAlpZiAoIWNydGMtPmZiKSB7Ci0JCURSTV9ERUJVRygiTm8gRkIgYm91bmRcbiIpOworCQlEUk1fREVCVUdfS01TKCJObyBGQiBib3VuZFxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtODQxLDYgKzg1NiwxMSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAodGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NQUNSTykKKwkJZmJfZm9ybWF0IHw9IEVWRVJHUkVFTl9HUlBIX0FSUkFZX01PREUoRVZFUkdSRUVOX0dSUEhfQVJSQVlfMkRfVElMRURfVEhJTjEpOworCWVsc2UgaWYgKHRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUlDUk8pCisJCWZiX2Zvcm1hdCB8PSBFVkVSR1JFRU5fR1JQSF9BUlJBWV9NT0RFKEVWRVJHUkVFTl9HUlBIX0FSUkFZXzFEX1RJTEVEX1RISU4xKTsKKwogCXN3aXRjaCAocmFkZW9uX2NydGMtPmNydGNfaWQpIHsKIAljYXNlIDA6CiAJCVdSRUczMihBVklWT19EMVZHQV9DT05UUk9MLCAwKTsKQEAgLTkzMSw3ICs5NTEsNyBAQAogCiAJLyogbm8gZmIgYm91bmQgKi8KIAlpZiAoIWNydGMtPmZiKSB7Ci0JCURSTV9ERUJVRygiTm8gRkIgYm91bmRcbiIpOworCQlEUk1fREVCVUdfS01TKCJObyBGQiBib3VuZFxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtOTc5LDExICs5OTksMTggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKHRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUFDUk8pCi0JCWZiX2Zvcm1hdCB8PSBBVklWT19EMUdSUEhfTUFDUk9fQUREUkVTU19NT0RFOworCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SNjAwKSB7CisJCWlmICh0aWxpbmdfZmxhZ3MgJiBSQURFT05fVElMSU5HX01BQ1JPKQorCQkJZmJfZm9ybWF0IHw9IFI2MDBfRDFHUlBIX0FSUkFZX01PREVfMkRfVElMRURfVEhJTjE7CisJCWVsc2UgaWYgKHRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUlDUk8pCisJCQlmYl9mb3JtYXQgfD0gUjYwMF9EMUdSUEhfQVJSQVlfTU9ERV8xRF9USUxFRF9USElOMTsKKwl9IGVsc2UgeworCQlpZiAodGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NQUNSTykKKwkJCWZiX2Zvcm1hdCB8PSBBVklWT19EMUdSUEhfTUFDUk9fQUREUkVTU19NT0RFOwogCi0JaWYgKHRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUlDUk8pCi0JCWZiX2Zvcm1hdCB8PSBBVklWT19EMUdSUEhfVElMRUQ7CisJCWlmICh0aWxpbmdfZmxhZ3MgJiBSQURFT05fVElMSU5HX01JQ1JPKQorCQkJZmJfZm9ybWF0IHw9IEFWSVZPX0QxR1JQSF9USUxFRDsKKwl9CiAKIAlpZiAocmFkZW9uX2NydGMtPmNydGNfaWQgPT0gMCkKIAkJV1JFRzMyKEFWSVZPX0QxVkdBX0NPTlRST0wsIDApOwpAQCAtMTE0MywxMCArMTE3MCw4IEBACiAJYXRvbWJpb3NfY3J0Y19zZXRfcGxsKGNydGMsIGFkanVzdGVkX21vZGUpOwogCWF0b21iaW9zX2VuYWJsZV9zcyhjcnRjKTsKIAotCWlmIChBU0lDX0lTX0RDRTQocmRldikpCisJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCiAJCWF0b21iaW9zX3NldF9jcnRjX2R0ZF90aW1pbmcoY3J0YywgYWRqdXN0ZWRfbW9kZSk7Ci0JZWxzZSBpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKLQkJYXRvbWJpb3NfY3J0Y19zZXRfdGltaW5nKGNydGMsIGFkanVzdGVkX21vZGUpOwogCWVsc2UgewogCQlhdG9tYmlvc19jcnRjX3NldF90aW1pbmcoY3J0YywgYWRqdXN0ZWRfbW9kZSk7CiAJCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA9PSAwKQpAQCAtMTE5MSw2ICsxMjE2LDI0IEBACiAJYXRvbWJpb3NfbG9ja19jcnRjKGNydGMsIEFUT01fRElTQUJMRSk7CiB9CiAKK3N0YXRpYyB2b2lkIGF0b21iaW9zX2NydGNfZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOworCWF0b21iaW9zX2NydGNfZHBtcyhjcnRjLCBEUk1fTU9ERV9EUE1TX09GRik7CisKKwlzd2l0Y2ggKHJhZGVvbl9jcnRjLT5wbGxfaWQpIHsKKwljYXNlIEFUT01fUFBMTDE6CisJY2FzZSBBVE9NX1BQTEwyOgorCQkvKiBkaXNhYmxlIHRoZSBwcGxsICovCisJCWF0b21iaW9zX2NydGNfcHJvZ3JhbV9wbGwoY3J0YywgcmFkZW9uX2NydGMtPmNydGNfaWQsIHJhZGVvbl9jcnRjLT5wbGxfaWQsCisJCQkJCSAgMCwgMCwgQVRPTV9ESVNBQkxFLCAwLCAwLCAwLCAwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJhZGVvbl9jcnRjLT5wbGxfaWQgPSAtMTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgYXRvbWJpb3NfaGVscGVyX2Z1bmNzID0gewogCS5kcG1zID0gYXRvbWJpb3NfY3J0Y19kcG1zLAogCS5tb2RlX2ZpeHVwID0gYXRvbWJpb3NfY3J0Y19tb2RlX2ZpeHVwLApAQCAtMTE5OSw2ICsxMjQyLDcgQEAKIAkucHJlcGFyZSA9IGF0b21iaW9zX2NydGNfcHJlcGFyZSwKIAkuY29tbWl0ID0gYXRvbWJpb3NfY3J0Y19jb21taXQsCiAJLmxvYWRfbHV0ID0gcmFkZW9uX2NydGNfbG9hZF9sdXQsCisJLmRpc2FibGUgPSBhdG9tYmlvc19jcnRjX2Rpc2FibGUsCiB9OwogCiB2b2lkIHJhZGVvbl9hdG9tYmlvc19pbml0X2NydGMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfZHAuYwppbmRleCBhYmZmYjE0Li4zNmUwZDRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19kcC5jCkBAIC0yOTYsNyArMjk2LDcgQEAKIAkJdTggdGhpc192ID0gZHBfZ2V0X2FkanVzdF9yZXF1ZXN0X3ZvbHRhZ2UobGlua19zdGF0dXMsIGxhbmUpOwogCQl1OCB0aGlzX3AgPSBkcF9nZXRfYWRqdXN0X3JlcXVlc3RfcHJlX2VtcGhhc2lzKGxpbmtfc3RhdHVzLCBsYW5lKTsKIAotCQlEUk1fREVCVUcoInJlcXVlc3RlZCBzaWduYWwgcGFyYW1ldGVyczogbGFuZSAlZCB2b2x0YWdlICVzIHByZV9lbXBoICVzXG4iLAorCQlEUk1fREVCVUdfS01TKCJyZXF1ZXN0ZWQgc2lnbmFsIHBhcmFtZXRlcnM6IGxhbmUgJWQgdm9sdGFnZSAlcyBwcmVfZW1waCAlc1xuIiwKIAkJCSAgbGFuZSwKIAkJCSAgdm9sdGFnZV9uYW1lc1t0aGlzX3YgPj4gRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19TSElGVF0sCiAJCQkgIHByZV9lbXBoX25hbWVzW3RoaXNfcCA+PiBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfU0hJRlRdKTsKQEAgLTMxMyw3ICszMTMsNyBAQAogCWlmIChwID49IGRwX3ByZV9lbXBoYXNpc19tYXgodikpCiAJCXAgPSBkcF9wcmVfZW1waGFzaXNfbWF4KHYpIHwgRFBfVFJBSU5fTUFYX1BSRV9FTVBIQVNJU19SRUFDSEVEOwogCi0JRFJNX0RFQlVHKCJ1c2luZyBzaWduYWwgcGFyYW1ldGVyczogdm9sdGFnZSAlcyBwcmVfZW1waCAlc1xuIiwKKwlEUk1fREVCVUdfS01TKCJ1c2luZyBzaWduYWwgcGFyYW1ldGVyczogdm9sdGFnZSAlcyBwcmVfZW1waCAlc1xuIiwKIAkJICB2b2x0YWdlX25hbWVzWyh2ICYgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19NQVNLKSA+PiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX1NISUZUXSwKIAkJICBwcmVfZW1waF9uYW1lc1socCAmIERQX1RSQUlOX1BSRV9FTVBIQVNJU19NQVNLKSA+PiBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfU0hJRlRdKTsKIApAQCAtMzU4LDcgKzM1OCw3IEBACiAJaWYgKGFyZ3MudjEudWNSZXBseVN0YXR1cyAmJiAhYXJncy52MS51Y0RhdGFPdXRMZW4pIHsKIAkJaWYgKGFyZ3MudjEudWNSZXBseVN0YXR1cyA9PSAweDIwICYmIHJldHJ5X2NvdW50KysgPCAxMCkKIAkJCWdvdG8gcmV0cnk7Ci0JCURSTV9ERUJVRygiZmFpbGVkIHRvIGdldCBhdXhjaCAlMDJ4JTAyeCAlMDJ4ICUwMnggMHglMDJ4ICUwMnggYWZ0ZXIgJWQgcmV0cmllc1xuIiwKKwkJRFJNX0RFQlVHX0tNUygiZmFpbGVkIHRvIGdldCBhdXhjaCAlMDJ4JTAyeCAlMDJ4ICUwMnggMHglMDJ4ICUwMnggYWZ0ZXIgJWQgcmV0cmllc1xuIiwKIAkJCSAgcmVxX2J5dGVzWzFdLCByZXFfYnl0ZXNbMF0sIHJlcV9ieXRlc1syXSwgcmVxX2J5dGVzWzNdLAogCQkJICBjaGFuLT5yZWMuaTJjX2lkLCBhcmdzLnYxLnVjUmVwbHlTdGF0dXMsIHJldHJ5X2NvdW50KTsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtNDYxLDEwICs0NjEsMTAgQEAKIAkJbWVtY3B5KGRpZ19jb25uZWN0b3ItPmRwY2QsIG1zZywgOCk7CiAJCXsKIAkJCWludCBpOwotCQkJRFJNX0RFQlVHKCJEUENEOiAiKTsKKwkJCURSTV9ERUJVR19LTVMoIkRQQ0Q6ICIpOwogCQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJCQlEUk1fREVCVUcoIiUwMnggIiwgbXNnW2ldKTsKLQkJCURSTV9ERUJVRygiXG4iKTsKKwkJCQlEUk1fREVCVUdfS01TKCIlMDJ4ICIsIG1zZ1tpXSk7CisJCQlEUk1fREVCVUdfS01TKCJcbiIpOwogCQl9CiAJCXJldHVybiB0cnVlOwogCX0KQEAgLTUxMiw3ICs1MTIsNyBAQAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JRFJNX0RFQlVHKCJsaW5rIHN0YXR1cyAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwlEUk1fREVCVUdfS01TKCJsaW5rIHN0YXR1cyAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKIAkJICBsaW5rX3N0YXR1c1swXSwgbGlua19zdGF0dXNbMV0sIGxpbmtfc3RhdHVzWzJdLAogCQkgIGxpbmtfc3RhdHVzWzNdLCBsaW5rX3N0YXR1c1s0XSwgbGlua19zdGF0dXNbNV0pOwogCXJldHVybiB0cnVlOwpAQCAtNjk1LDcgKzY5NSw3IEBACiAJaWYgKCFjbG9ja19yZWNvdmVyeSkKIAkJRFJNX0VSUk9SKCJjbG9jayByZWNvdmVyeSBmYWlsZWRcbiIpOwogCWVsc2UKLQkJRFJNX0RFQlVHKCJjbG9jayByZWNvdmVyeSBhdCB2b2x0YWdlICVkIHByZS1lbXBoYXNpcyAlZFxuIiwKKwkJRFJNX0RFQlVHX0tNUygiY2xvY2sgcmVjb3ZlcnkgYXQgdm9sdGFnZSAlZCBwcmUtZW1waGFzaXMgJWRcbiIsCiAJCQkgIHRyYWluX3NldFswXSAmIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSywKIAkJCSAgKHRyYWluX3NldFswXSAmIERQX1RSQUlOX1BSRV9FTVBIQVNJU19NQVNLKSA+PgogCQkJICBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfU0hJRlQpOwpAQCAtNzM5LDcgKzczOSw3IEBACiAJaWYgKCFjaGFubmVsX2VxKQogCQlEUk1fRVJST1IoImNoYW5uZWwgZXEgZmFpbGVkXG4iKTsKIAllbHNlCi0JCURSTV9ERUJVRygiY2hhbm5lbCBlcSBhdCB2b2x0YWdlICVkIHByZS1lbXBoYXNpcyAlZFxuIiwKKwkJRFJNX0RFQlVHX0tNUygiY2hhbm5lbCBlcSBhdCB2b2x0YWdlICVkIHByZS1lbXBoYXNpcyAlZFxuIiwKIAkJCSAgdHJhaW5fc2V0WzBdICYgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19NQVNLLAogCQkJICAodHJhaW5fc2V0WzBdICYgRFBfVFJBSU5fUFJFX0VNUEhBU0lTX01BU0spCiAJCQkgID4+IERQX1RSQUlOX1BSRV9FTVBIQVNJU19TSElGVCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYwppbmRleCAxY2FmNjI1Li45NTdkNTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMKQEAgLTM5LDYgKzM5LDIzIEBACiBzdGF0aWMgdm9pZCBldmVyZ3JlZW5fZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCBldmVyZ3JlZW5fZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKKy8qIGdldCB0ZW1wZXJhdHVyZSBpbiBtaWxsaWRlZ3JlZXMgKi8KK3UzMiBldmVyZ3JlZW5fZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJdTMyIHRlbXAgPSAoUlJFRzMyKENHX01VTFRfVEhFUk1BTF9TVEFUVVMpICYgQVNJQ19UX01BU0spID4+CisJCUFTSUNfVF9TSElGVDsKKwl1MzIgYWN0dWFsX3RlbXAgPSAwOworCisJaWYgKCh0ZW1wID4+IDEwKSAmIDEpCisJCWFjdHVhbF90ZW1wID0gMDsKKwllbHNlIGlmICgodGVtcCA+PiA5KSAmIDEpCisJCWFjdHVhbF90ZW1wID0gMjU1OworCWVsc2UKKwkJYWN0dWFsX3RlbXAgPSAodGVtcCA+PiAxKSAmIDB4ZmY7CisKKwlyZXR1cm4gYWN0dWFsX3RlbXAgKiAxMDAwOworfQorCiB2b2lkIGV2ZXJncmVlbl9wbV9taXNjKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWludCByZXFfcHNfaWR4ID0gcmRldi0+cG0ucmVxdWVzdGVkX3Bvd2VyX3N0YXRlX2luZGV4OwpAQCAtMTExNSw2ICsxMTMyLDcgQEAKIAkJCQkJCQkJIHJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X2JhY2tlbmRzKSAmCiAJCQkJCQkJCUVWRVJHUkVFTl9NQVhfQkFDS0VORFNfTUFTSykpOwogCisJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi50aWxlX2NvbmZpZyA9IGdiX2FkZHJfY29uZmlnOwogCVdSRUczMihHQl9CQUNLRU5EX01BUCwgZ2JfYmFja2VuZF9tYXApOwogCVdSRUczMihHQl9BRERSX0NPTkZJRywgZ2JfYWRkcl9jb25maWcpOwogCVdSRUczMihETUlGX0FERFJfQ09ORklHLCBnYl9hZGRyX2NvbmZpZyk7CkBAIC0xMzM0LDggKzEzNTIsOCBAQAogCX0KIAlyZGV2LT5tYy52cmFtX3dpZHRoID0gbnVtY2hhbiAqIGNoYW5zaXplOwogCS8qIENvdWxkIGFwZXIgc2l6ZSByZXBvcnQgMCA/ICovCi0JcmRldi0+bWMuYXBlcl9iYXNlID0gZHJtX2dldF9yZXNvdXJjZV9zdGFydChyZGV2LT5kZGV2LCAwKTsKLQlyZGV2LT5tYy5hcGVyX3NpemUgPSBkcm1fZ2V0X3Jlc291cmNlX2xlbihyZGV2LT5kZGV2LCAwKTsKKwlyZGV2LT5tYy5hcGVyX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocmRldi0+cGRldiwgMCk7CisJcmRldi0+bWMuYXBlcl9zaXplID0gcGNpX3Jlc291cmNlX2xlbihyZGV2LT5wZGV2LCAwKTsKIAkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCiAJLyogc2l6ZSBpbiBNQiBvbiBldmVyZ3JlZW4gKi8KIAlyZGV2LT5tYy5tY192cmFtX3NpemUgPSBSUkVHMzIoQ09ORklHX01FTVNJWkUpICogMTAyNCAqIDEwMjQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fY3MuYwppbmRleCAwMTA5NjNkLi4zNDVhNzVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX2NzLmMKQEAgLTMzMyw3ICszMzMsNiBAQAogCWhlYWRlciA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaF9pZHgpOwogCWNydGNfaWQgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGhfaWR4ICsgMiArIDcgKyAxKTsKIAlyZWcgPSBDUF9QQUNLRVQwX0dFVF9SRUcoaGVhZGVyKTsKLQltdXRleF9sb2NrKCZwLT5yZGV2LT5kZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CiAJb2JqID0gZHJtX21vZGVfb2JqZWN0X2ZpbmQocC0+cmRldi0+ZGRldiwgY3J0Y19pZCwgRFJNX01PREVfT0JKRUNUX0NSVEMpOwogCWlmICghb2JqKSB7CiAJCURSTV9FUlJPUigiY2Fubm90IGZpbmQgY3J0YyAlZFxuIiwgY3J0Y19pZCk7CkBAIC0zNjgsNyArMzY3LDYgQEAKIAkJfQogCX0KIG91dDoKLQltdXRleF91bmxvY2soJnAtPnJkZXYtPmRkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAlyZXR1cm4gcjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9yZWcuaAppbmRleCBlMDI4YzFjLi4yMzMwZjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9yZWcuaApAQCAtNjEsNiArNjEsMTEgQEAKICMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0ZPUk1BVF84Ql9CR1JBMTAxMDEwMiAgICAgNQogIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfRk9STUFUX1JHQjExMTExMCAgICAgICAgICA2CiAjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9GT1JNQVRfQkdSMTAxMTExICAgICAgICAgIDcKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0FSUkFZX01PREUoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDIwKQorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfQVJSQVlfTElORUFSX0dFTkVSQUwgICAgICAwCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9BUlJBWV9MSU5FQVJfQUxJR05FRCAgICAgIDEKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0FSUkFZXzFEX1RJTEVEX1RISU4xICAgICAgMgorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfQVJSQVlfMkRfVElMRURfVEhJTjEgICAgICA0CiAjZGVmaW5lIEVWRVJHUkVFTl9HUlBIX1NXQVBfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgIDB4NjgwYwogIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfRU5ESUFOX1NXQVAoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgMCkKICMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0VORElBTl9OT05FICAgICAgICAgICAgICAgMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5kLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbmQuaAppbmRleCBhMWNkNjIxLi45Yjc1MzJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbmQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbmQuaApAQCAtMTY1LDYgKzE2NSwxMSBAQAogI2RlZmluZQkJU0VfREJfQlVTWQkJCQkJKDEgPDwgMzApCiAjZGVmaW5lCQlTRV9DQl9CVVNZCQkJCQkoMSA8PCAzMSkKIAorI2RlZmluZQlDR19NVUxUX1RIRVJNQUxfU1RBVFVTCQkJCTB4NzQwCisjZGVmaW5lCQlBU0lDX1QoeCkJCQkgICAgICAgICgoeCkgPDwgMTYpCisjZGVmaW5lCQlBU0lDX1RfTUFTSwkJCSAgICAgICAgMHg3RkYwMDAwCisjZGVmaW5lCQlBU0lDX1RfU0hJRlQJCQkgICAgICAgIDE2CisKICNkZWZpbmUJSERQX0hPU1RfUEFUSF9DTlRMCQkJCTB4MkMwMAogI2RlZmluZQlIRFBfTk9OU1VSRkFDRV9CQVNFCQkJCTB4MkMwNAogI2RlZmluZQlIRFBfTk9OU1VSRkFDRV9JTkZPCQkJCTB4MkMwOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYwppbmRleCAzOTcwZTYyLi5lODE3YTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYwpAQCAtMTQxLDcgKzE0MSw3IEBACiAJLyogb25seSBvbmUgY2xvY2sgbW9kZSBwZXIgcG93ZXIgc3RhdGUgKi8KIAlyZGV2LT5wbS5yZXF1ZXN0ZWRfY2xvY2tfbW9kZV9pbmRleCA9IDA7CiAKLQlEUk1fREVCVUcoIlJlcXVlc3RlZDogZTogJWQgbTogJWQgcDogJWRcbiIsCisJRFJNX0RFQlVHX0RSSVZFUigiUmVxdWVzdGVkOiBlOiAlZCBtOiAlZCBwOiAlZFxuIiwKIAkJICByZGV2LT5wbS5wb3dlcl9zdGF0ZVtyZGV2LT5wbS5yZXF1ZXN0ZWRfcG93ZXJfc3RhdGVfaW5kZXhdLgogCQkgIGNsb2NrX2luZm9bcmRldi0+cG0ucmVxdWVzdGVkX2Nsb2NrX21vZGVfaW5kZXhdLnNjbGssCiAJCSAgcmRldi0+cG0ucG93ZXJfc3RhdGVbcmRldi0+cG0ucmVxdWVzdGVkX3Bvd2VyX3N0YXRlX2luZGV4XS4KQEAgLTI3Niw3ICsyNzYsNyBAQAogCSAgICAgcmRldi0+cG0ucG93ZXJfc3RhdGVbcmRldi0+cG0uY3VycmVudF9wb3dlcl9zdGF0ZV9pbmRleF0ucGNpZV9sYW5lcykpIHsKIAkJcmFkZW9uX3NldF9wY2llX2xhbmVzKHJkZXYsCiAJCQkJICAgICAgcHMtPnBjaWVfbGFuZXMpOwotCQlEUk1fREVCVUcoIlNldHRpbmc6IHA6ICVkXG4iLCBwcy0+cGNpZV9sYW5lcyk7CisJCURSTV9ERUJVR19EUklWRVIoIlNldHRpbmc6IHA6ICVkXG4iLCBwcy0+cGNpZV9sYW5lcyk7CiAJfQogfQogCkBAIC04NDksNyArODQ5LDcgQEAKIAljb25zdCBjaGFyICpmd19uYW1lID0gTlVMTDsKIAlpbnQgZXJyOwogCi0JRFJNX0RFQlVHKCJcbiIpOworCURSTV9ERUJVR19LTVMoIlxuIik7CiAKIAlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgicmFkZW9uX2NwIiwgMCwgTlVMTCwgMCk7CiAJZXJyID0gSVNfRVJSKHBkZXYpOwpAQCAtMTIzMCw3ICsxMjMwLDYgQEAKIAloZWFkZXIgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGhfaWR4KTsKIAljcnRjX2lkID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBoX2lkeCArIDUpOwogCXJlZyA9IENQX1BBQ0tFVDBfR0VUX1JFRyhoZWFkZXIpOwotCW11dGV4X2xvY2soJnAtPnJkZXYtPmRkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAlvYmogPSBkcm1fbW9kZV9vYmplY3RfZmluZChwLT5yZGV2LT5kZGV2LCBjcnRjX2lkLCBEUk1fTU9ERV9PQkpFQ1RfQ1JUQyk7CiAJaWYgKCFvYmopIHsKIAkJRFJNX0VSUk9SKCJjYW5ub3QgZmluZCBjcnRjICVkXG4iLCBjcnRjX2lkKTsKQEAgLTEyNjQsNyArMTI2Myw2IEBACiAJCWliW2hfaWR4ICsgM10gfD0gUkFERU9OX0VOR19ESVNQTEFZX1NFTEVDVF9DUlRDMTsKIAl9CiBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZwLT5yZGV2LT5kZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTE4MDUsNiArMTgwMywxMSBAQAogCQkJcmV0dXJuIHI7CiAJCWJyZWFrOwogCQkvKiB0cmlnZ2VycyBkcmF3aW5nIHVzaW5nIGluZGljZXMgdG8gdmVydGV4IGJ1ZmZlciAqLworCWNhc2UgUEFDS0VUM18zRF9DTEVBUl9ISVo6CisJY2FzZSBQQUNLRVQzXzNEX0NMRUFSX1pNQVNLOgorCQlpZiAocC0+cmRldi0+aHlwZXJ6X2ZpbHAgIT0gcC0+ZmlscCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfTk9QOgogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMjI5Nyw4ICsyMzAwLDggQEAKIAl1NjQgY29uZmlnX2FwZXJfc2l6ZTsKIAogCS8qIHdvcmsgb3V0IGFjY2Vzc2libGUgVlJBTSAqLwotCXJkZXYtPm1jLmFwZXJfYmFzZSA9IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQocmRldi0+ZGRldiwgMCk7Ci0JcmRldi0+bWMuYXBlcl9zaXplID0gZHJtX2dldF9yZXNvdXJjZV9sZW4ocmRldi0+ZGRldiwgMCk7CisJcmRldi0+bWMuYXBlcl9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHJkZXYtPnBkZXYsIDApOworCXJkZXYtPm1jLmFwZXJfc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocmRldi0+cGRldiwgMCk7CiAJcmRldi0+bWMudmlzaWJsZV92cmFtX3NpemUgPSByMTAwX2dldF9hY2Nlc3NpYmxlX3ZyYW0ocmRldik7CiAJLyogRklYTUUgd2UgZG9uJ3QgdXNlIHRoZSBzZWNvbmQgYXBlcnR1cmUgeWV0IHdoZW4gd2UgY291bGQgdXNlIGl0ICovCiAJaWYgKHJkZXYtPm1jLnZpc2libGVfdnJhbV9zaXplID4gcmRldi0+bWMuYXBlcl9zaXplKQpAQCAtMjM1NCw2ICsyMzU3LDcgQEAKIAlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKQogCQliYXNlID0gKFJSRUczMihSQURFT05fTkJfVE9NKSAmIDB4ZmZmZikgPDwgMTY7CiAJcmFkZW9uX3ZyYW1fbG9jYXRpb24ocmRldiwgJnJkZXYtPm1jLCBiYXNlKTsKKwlyZGV2LT5tYy5ndHRfYmFzZV9hbGlnbiA9IDA7CiAJaWYgKCEocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSkKIAkJcmFkZW9uX2d0dF9sb2NhdGlvbihyZGV2LCAmcmRldi0+bWMpOwogCXJhZGVvbl91cGRhdGVfYmFuZHdpZHRoX2luZm8ocmRldik7CkBAIC0yMzY1LDExICsyMzY5LDEwIEBACiAgKi8KIHZvaWQgcjEwMF9wbGxfZXJyYXRhX2FmdGVyX2luZGV4KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCWlmICghKHJkZXYtPnBsbF9lcnJhdGEgJiBDSElQX0VSUkFUQV9QTExfRFVNTVlSRUFEUykpIHsKLQkJcmV0dXJuOworCWlmIChyZGV2LT5wbGxfZXJyYXRhICYgQ0hJUF9FUlJBVEFfUExMX0RVTU1ZUkVBRFMpIHsKKwkJKHZvaWQpUlJFRzMyKFJBREVPTl9DTE9DS19DTlRMX0RBVEEpOworCQkodm9pZClSUkVHMzIoUkFERU9OX0NSVENfR0VOX0NOVEwpOwogCX0KLQkodm9pZClSUkVHMzIoUkFERU9OX0NMT0NLX0NOVExfREFUQSk7Ci0JKHZvaWQpUlJFRzMyKFJBREVPTl9DUlRDX0dFTl9DTlRMKTsKIH0KIAogc3RhdGljIHZvaWQgcjEwMF9wbGxfZXJyYXRhX2FmdGVyX2RhdGEoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCkBAIC0yNjQ0LDcgKzI2NDcsNyBAQAogCQlmbGFncyB8PSBwaXRjaCAvIDg7CiAKIAotCURSTV9ERUJVRygid3JpdGluZyBzdXJmYWNlICVkICVkICV4ICV4XG4iLCByZWcsIGZsYWdzLCBvZmZzZXQsIG9mZnNldCtvYmpfc2l6ZS0xKTsKKwlEUk1fREVCVUdfS01TKCJ3cml0aW5nIHN1cmZhY2UgJWQgJWQgJXggJXhcbiIsIHJlZywgZmxhZ3MsIG9mZnNldCwgb2Zmc2V0K29ial9zaXplLTEpOwogCVdSRUczMihSQURFT05fU1VSRkFDRTBfSU5GTyArIHN1cmZfaW5kZXgsIGZsYWdzKTsKIAlXUkVHMzIoUkFERU9OX1NVUkZBQ0UwX0xPV0VSX0JPVU5EICsgc3VyZl9pbmRleCwgb2Zmc2V0KTsKIAlXUkVHMzIoUkFERU9OX1NVUkZBQ0UwX1VQUEVSX0JPVU5EICsgc3VyZl9pbmRleCwgb2Zmc2V0ICsgb2JqX3NpemUgLSAxKTsKQEAgLTMwNDAsNyArMzA0Myw3IEBACiAJCX0KICNlbmRpZgogCi0JCURSTV9ERUJVRygiR1JQSF9CVUZGRVJfQ05UTCBmcm9tIHRvICV4XG4iLAorCQlEUk1fREVCVUdfS01TKCJHUlBIX0JVRkZFUl9DTlRMIGZyb20gdG8gJXhcbiIsCiAJCQkgIC8qIAkgICh1bnNpZ25lZCBpbnQpaW5mby0+U2F2ZWRSZWctPmdycGhfYnVmZmVyX2NudGwsICovCiAJCQkgICh1bnNpZ25lZCBpbnQpUlJFRzMyKFJBREVPTl9HUlBIX0JVRkZFUl9DTlRMKSk7CiAJfQpAQCAtMzEzNiw3ICszMTM5LDcgQEAKIAkJCVdSRUczMihSUzQwMF9ESVNQMV9SRVFfQ05UTDEsIDB4MjhGQkMzQUMpOwogCQl9CiAKLQkJRFJNX0RFQlVHKCJHUlBIMl9CVUZGRVJfQ05UTCBmcm9tIHRvICV4XG4iLAorCQlEUk1fREVCVUdfS01TKCJHUlBIMl9CVUZGRVJfQ05UTCBmcm9tIHRvICV4XG4iLAogCQkJICAodW5zaWduZWQgaW50KVJSRUczMihSQURFT05fR1JQSDJfQlVGRkVSX0NOVEwpKTsKIAl9CiB9CkBAIC0zODEwLDYgKzM4MTMsMzEgQEAKIAlyZGV2LT5iaW9zID0gTlVMTDsKIH0KIAorLyoKKyAqIER1ZSB0byBob3cga2V4ZWMgd29ya3MsIGl0IGNhbiBsZWF2ZSB0aGUgaHcgZnVsbHkgaW5pdGlhbGlzZWQgd2hlbiBpdAorICogYm9vdHMgdGhlIG5ldyBrZXJuZWwuIEhvd2V2ZXIgZG9pbmcgb3VyIGluaXQgc2VxdWVuY2Ugd2l0aCB0aGUgQ1AgYW5kCisgKiBXQiBzdHVmZiBzZXR1cCBjYXVzZXMgR1BVIGhhbmdzIG9uIHRoZSBSTjUwIGF0IGxlYXN0LiBTbyBhdCBzdGFydHVwCisgKiBkbyBzb21lIHF1aWNrIHNhbml0eSBjaGVja3MgYW5kIHJlc3RvcmUgc2FuZSB2YWx1ZXMgdG8gYXZvaWQgdGhpcworICogcHJvYmxlbS4KKyAqLwordm9pZCByMTAwX3Jlc3RvcmVfc2FuaXR5KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiB0bXA7CisKKwl0bXAgPSBSUkVHMzIoUkFERU9OX0NQX0NTUV9DTlRMKTsKKwlpZiAodG1wKSB7CisJCVdSRUczMihSQURFT05fQ1BfQ1NRX0NOVEwsIDApOworCX0KKwl0bXAgPSBSUkVHMzIoUkFERU9OX0NQX1JCX0NOVEwpOworCWlmICh0bXApIHsKKwkJV1JFRzMyKFJBREVPTl9DUF9SQl9DTlRMLCAwKTsKKwl9CisJdG1wID0gUlJFRzMyKFJBREVPTl9TQ1JBVENIX1VNU0spOworCWlmICh0bXApIHsKKwkJV1JFRzMyKFJBREVPTl9TQ1JBVENIX1VNU0ssIDApOworCX0KK30KKwogaW50IHIxMDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgcjsKQEAgLTM4MjIsNiArMzg1MCw4IEBACiAJcmFkZW9uX3NjcmF0Y2hfaW5pdChyZGV2KTsKIAkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCiAJcmFkZW9uX3N1cmZhY2VfaW5pdChyZGV2KTsKKwkvKiBzYW5pdHkgY2hlY2sgc29tZSByZWdpc3RlciB0byBhdm9pZCBoYW5ncyBsaWtlIGFmdGVyIGtleGVjICovCisJcjEwMF9yZXN0b3JlX3Nhbml0eShyZGV2KTsKIAkvKiBUT0RPOiBkaXNhYmxlIFZHQSBuZWVkIHRvIHVzZSBWR0EgcmVxdWVzdCAqLwogCS8qIEJJT1MqLwogCWlmICghcmFkZW9uX2dldF9iaW9zKHJkZXYpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDBkLmgKaW5kZXggZDAxNmIxNi4uYjEyMWI2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMGQuaApAQCAtNDgsMTAgKzQ4LDEyIEBACiAjZGVmaW5lCQlQQUNLRVQzXzNEX0RSQVdfSU1NRAkJMHgyOQogI2RlZmluZQkJUEFDS0VUM18zRF9EUkFXX0lORFgJCTB4MkEKICNkZWZpbmUJCVBBQ0tFVDNfM0RfTE9BRF9WQlBOVFIJCTB4MkYKKyNkZWZpbmUJCVBBQ0tFVDNfM0RfQ0xFQVJfWk1BU0sJCTB4MzIKICNkZWZpbmUJCVBBQ0tFVDNfSU5EWF9CVUZGRVIJCTB4MzMKICNkZWZpbmUJCVBBQ0tFVDNfM0RfRFJBV19WQlVGXzIJCTB4MzQKICNkZWZpbmUJCVBBQ0tFVDNfM0RfRFJBV19JTU1EXzIJCTB4MzUKICNkZWZpbmUJCVBBQ0tFVDNfM0RfRFJBV19JTkRYXzIJCTB4MzYKKyNkZWZpbmUJCVBBQ0tFVDNfM0RfQ0xFQVJfSElaCQkweDM3CiAjZGVmaW5lCQlQQUNLRVQzX0JJVEJMVF9NVUxUSQkJMHg5QgogCiAjZGVmaW5lIFBBQ0tFVDAocmVnLCBuKQkoQ1BfUEFDS0VUMCB8CQkJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCmluZGV4IDdlODFkYjUuLmM4Mjc3MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCkBAIC00ODEsNiArNDgxLDcgQEAKIAlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKQogCQliYXNlID0gKFJSRUczMihSQURFT05fTkJfVE9NKSAmIDB4ZmZmZikgPDwgMTY7CiAJcmFkZW9uX3ZyYW1fbG9jYXRpb24ocmRldiwgJnJkZXYtPm1jLCBiYXNlKTsKKwlyZGV2LT5tYy5ndHRfYmFzZV9hbGlnbiA9IDA7CiAJaWYgKCEocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSkKIAkJcmFkZW9uX2d0dF9sb2NhdGlvbihyZGV2LCAmcmRldi0+bWMpOwogCXJhZGVvbl91cGRhdGVfYmFuZHdpZHRoX2luZm8ocmRldik7CkBAIC0xMDQ3LDE0ICsxMDQ4LDQ3IEBACiAJCS8qIFJCM0RfQ09MT1JfQ0hBTk5FTF9NQVNLICovCiAJCXRyYWNrLT5jb2xvcl9jaGFubmVsX21hc2sgPSBpZHhfdmFsdWU7CiAJCWJyZWFrOwotCWNhc2UgMHg0ZDFjOgorCWNhc2UgMHg0M2E0OgorCQkvKiBTQ19IWVBFUlpfRU4gKi8KKwkJLyogcjMwMGMgZW1pdHMgdGhpcyByZWdpc3RlciAtIHdlIG5lZWQgdG8gZGlzYWJsZSBoeXBlcnogZm9yIGl0CisJCSAqIHdpdGhvdXQgY29tcGxhaW5pbmcgKi8KKwkJaWYgKHAtPnJkZXYtPmh5cGVyel9maWxwICE9IHAtPmZpbHApIHsKKwkJCWlmIChpZHhfdmFsdWUgJiAweDEpCisJCQkJaWJbaWR4XSA9IGlkeF92YWx1ZSAmIH4xOworCQl9CisJCWJyZWFrOworCWNhc2UgMHg0ZjFjOgogCQkvKiBaQl9CV19DTlRMICovCiAJCXRyYWNrLT56Yl9jYl9jbGVhciA9ICEhKGlkeF92YWx1ZSAmICgxIDw8IDUpKTsKKwkJaWYgKHAtPnJkZXYtPmh5cGVyel9maWxwICE9IHAtPmZpbHApIHsKKwkJCWlmIChpZHhfdmFsdWUgJiAoUjMwMF9ISVpfRU5BQkxFIHwKKwkJCQkJIFIzMDBfUkRfQ09NUF9FTkFCTEUgfAorCQkJCQkgUjMwMF9XUl9DT01QX0VOQUJMRSB8CisJCQkJCSBSMzAwX0ZBU1RfRklMTF9FTkFCTEUpKQorCQkJCWdvdG8gZmFpbDsKKwkJfQogCQlicmVhazsKIAljYXNlIDB4NGUwNDoKIAkJLyogUkIzRF9CTEVORENOVEwgKi8KIAkJdHJhY2stPmJsZW5kX3JlYWRfZW5hYmxlID0gISEoaWR4X3ZhbHVlICYgKDEgPDwgMikpOwogCQlicmVhazsKKwljYXNlIDB4NGYyODogLyogWkJfREVQVEhDTEVBUlZBTFVFICovCisJCWJyZWFrOworCWNhc2UgMHg0ZjMwOiAvKiBaQl9NQVNLX09GRlNFVCAqLworCWNhc2UgMHg0ZjM0OiAvKiBaQl9aTUFTS19QSVRDSCAqLworCWNhc2UgMHg0ZjQ0OiAvKiBaQl9ISVpfT0ZGU0VUICovCisJY2FzZSAweDRmNTQ6IC8qIFpCX0hJWl9QSVRDSCAqLworCQlpZiAoaWR4X3ZhbHVlICYmIChwLT5yZGV2LT5oeXBlcnpfZmlscCAhPSBwLT5maWxwKSkKKwkJCWdvdG8gZmFpbDsKKwkJYnJlYWs7CisJY2FzZSAweDQwMjg6CisJCWlmIChpZHhfdmFsdWUgJiYgKHAtPnJkZXYtPmh5cGVyel9maWxwICE9IHAtPmZpbHApKQorCQkJZ290byBmYWlsOworCQkvKiBHQl9aX1BFUV9DT05GSUcgKi8KKwkJaWYgKHAtPnJkZXYtPmZhbWlseSA+PSBDSElQX1JWMzUwKQorCQkJYnJlYWs7CisJCWdvdG8gZmFpbDsKKwkJYnJlYWs7CiAJY2FzZSAweDRiZTg6CiAJCS8qIHZhbGlkIHJlZ2lzdGVyIG9ubHkgb24gUlY1MzAgKi8KIAkJaWYgKHAtPnJkZXYtPmZhbWlseSA9PSBDSElQX1JWNTMwKQpAQCAtMTA2NSw4ICsxMDk5LDggQEAKIAl9CiAJcmV0dXJuIDA7CiBmYWlsOgotCXByaW50ayhLRVJOX0VSUiAiRm9yYmlkZGVuIHJlZ2lzdGVyIDB4JTA0WCBpbiBjcyBhdCAlZFxuIiwKLQkgICAgICAgcmVnLCBpZHgpOworCXByaW50ayhLRVJOX0VSUiAiRm9yYmlkZGVuIHJlZ2lzdGVyIDB4JTA0WCBpbiBjcyBhdCAlZCAodmFsPSUwOHgpXG4iLAorCSAgICAgICByZWcsIGlkeCwgaWR4X3ZhbHVlKTsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIApAQCAtMTE2MCw2ICsxMTk0LDExIEBACiAJCQlyZXR1cm4gcjsKIAkJfQogCQlicmVhazsKKwljYXNlIFBBQ0tFVDNfM0RfQ0xFQVJfSElaOgorCWNhc2UgUEFDS0VUM18zRF9DTEVBUl9aTUFTSzoKKwkJaWYgKHAtPnJkZXYtPmh5cGVyel9maWxwICE9IHAtPmZpbHApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzX05PUDoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTExNzYsNiArMTIxNSw4IEBACiAJaW50IHI7CiAKIAl0cmFjayA9IGt6YWxsb2Moc2l6ZW9mKCp0cmFjayksIEdGUF9LRVJORUwpOworCWlmICh0cmFjayA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKIAlyMTAwX2NzX3RyYWNrX2NsZWFyKHAtPnJkZXYsIHRyYWNrKTsKIAlwLT50cmFjayA9IHRyYWNrOwogCWRvIHsKQEAgLTEzNzcsNiArMTQxOCw4IEBACiAJLyogSW5pdGlhbGl6ZSBzdXJmYWNlIHJlZ2lzdGVycyAqLwogCXJhZGVvbl9zdXJmYWNlX2luaXQocmRldik7CiAJLyogVE9ETzogZGlzYWJsZSBWR0EgbmVlZCB0byB1c2UgVkdBIHJlcXVlc3QgKi8KKwkvKiByZXN0b3JlIHNvbWUgcmVnaXN0ZXIgdG8gc2FuZSBkZWZhdWx0cyAqLworCXIxMDBfcmVzdG9yZV9zYW5pdHkocmRldik7CiAJLyogQklPUyovCiAJaWYgKCFyYWRlb25fZ2V0X2Jpb3MocmRldikpIHsKIAkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBkLmgKaW5kZXggOTY4YTMzMy4uMGMwMzZjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMGQuaApAQCAtNDgsMTAgKzQ4LDEyIEBACiAjZGVmaW5lCQlQQUNLRVQzXzNEX0RSQVdfSU1NRAkJMHgyOQogI2RlZmluZQkJUEFDS0VUM18zRF9EUkFXX0lORFgJCTB4MkEKICNkZWZpbmUJCVBBQ0tFVDNfM0RfTE9BRF9WQlBOVFIJCTB4MkYKKyNkZWZpbmUJCVBBQ0tFVDNfM0RfQ0xFQVJfWk1BU0sJCTB4MzIKICNkZWZpbmUJCVBBQ0tFVDNfSU5EWF9CVUZGRVIJCTB4MzMKICNkZWZpbmUJCVBBQ0tFVDNfM0RfRFJBV19WQlVGXzIJCTB4MzQKICNkZWZpbmUJCVBBQ0tFVDNfM0RfRFJBV19JTU1EXzIJCTB4MzUKICNkZWZpbmUJCVBBQ0tFVDNfM0RfRFJBV19JTkRYXzIJCTB4MzYKKyNkZWZpbmUJCVBBQ0tFVDNfM0RfQ0xFQVJfSElaCQkweDM3CiAjZGVmaW5lCQlQQUNLRVQzX0JJVEJMVF9NVUxUSQkJMHg5QgogCiAjZGVmaW5lIFBBQ0tFVDAocmVnLCBuKQkoQ1BfUEFDS0VUMCB8CQkJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCmluZGV4IGU2Yzg5MTQuLjU5ZjdiY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCkBAIC0zNDMsNiArMzQzLDggQEAKIAkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCiAJcmFkZW9uX3N1cmZhY2VfaW5pdChyZGV2KTsKIAkvKiBUT0RPOiBkaXNhYmxlIFZHQSBuZWVkIHRvIHVzZSBWR0EgcmVxdWVzdCAqLworCS8qIHJlc3RvcmUgc29tZSByZWdpc3RlciB0byBzYW5lIGRlZmF1bHRzICovCisJcjEwMF9yZXN0b3JlX3Nhbml0eShyZGV2KTsKIAkvKiBCSU9TKi8KIAlpZiAoIXJhZGVvbl9nZXRfYmlvcyhyZGV2KSkgewogCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUwMF9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUwMF9yZWcuaAppbmRleCA5M2M5YTJiLi42YWMxZjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MDBfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTAwX3JlZy5oCkBAIC0zODYsNiArMzg2LDExIEBACiAjICAgICAgIGRlZmluZSBBVklWT19EMUdSUEhfVElMRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjApCiAjICAgICAgIGRlZmluZSBBVklWT19EMUdSUEhfTUFDUk9fQUREUkVTU19NT0RFICAgICAgICAgICAgICAgICAgKDEgPDwgMjEpCiAKKyMgICAgICAgZGVmaW5lIFI2MDBfRDFHUlBIX0FSUkFZX01PREVfTElORUFSX0dFTkVSQUwgICAgICAgICAgICAoMCA8PCAyMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfRDFHUlBIX0FSUkFZX01PREVfTElORUFSX0FMSUdORUQgICAgICAgICAgICAoMSA8PCAyMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfRDFHUlBIX0FSUkFZX01PREVfMURfVElMRURfVEhJTjEgICAgICAgICAgICAoMiA8PCAyMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfRDFHUlBIX0FSUkFZX01PREVfMkRfVElMRURfVEhJTjEgICAgICAgICAgICAoNCA8PCAyMCkKKwogLyogVGhlIFI3eHggKl9ISUdIIHN1cmZhY2UgcmVncyBhcmUgYmFja3dhcmRzOyB0aGUgRDEgcmVncyBhcmUgaW4gdGhlIEQyCiAgKiBibG9jayBhbmQgdmljZSB2ZXJzYS4gIFRoaXMgYXBwbGllcyB0byBHUlBILCBDVVIsIGV0Yy4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjAuYwppbmRleCAzNDMzMGRmLi4xNDU4ZGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjAuYwpAQCAtMTI1LDYgKzEyNSw3IEBACiAJcjUyMF92cmFtX2dldF90eXBlKHJkZXYpOwogCXIxMDBfdnJhbV9pbml0X3NpemVzKHJkZXYpOwogCXJhZGVvbl92cmFtX2xvY2F0aW9uKHJkZXYsICZyZGV2LT5tYywgMCk7CisJcmRldi0+bWMuZ3R0X2Jhc2VfYWxpZ24gPSAwOwogCWlmICghKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkpCiAJCXJhZGVvbl9ndHRfbG9jYXRpb24ocmRldiwgJnJkZXYtPm1jKTsKIAlyYWRlb25fdXBkYXRlX2JhbmR3aWR0aF9pbmZvKHJkZXYpOwpAQCAtMjMwLDYgKzIzMSw4IEBACiAJcmFkZW9uX3NjcmF0Y2hfaW5pdChyZGV2KTsKIAkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCiAJcmFkZW9uX3N1cmZhY2VfaW5pdChyZGV2KTsKKwkvKiByZXN0b3JlIHNvbWUgcmVnaXN0ZXIgdG8gc2FuZSBkZWZhdWx0cyAqLworCXIxMDBfcmVzdG9yZV9zYW5pdHkocmRldik7CiAJLyogVE9ETzogZGlzYWJsZSBWR0EgbmVlZCB0byB1c2UgVkdBIHJlcXVlc3QgKi8KIAkvKiBCSU9TKi8KIAlpZiAoIXJhZGVvbl9nZXRfYmlvcyhyZGV2KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwppbmRleCAzZDY2NDVjLi5kMGViYWU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwpAQCAtOTIsNiArOTIsMjEgQEAKIHZvaWQgcjYwMF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcjYwMF9pcnFfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKKy8qIGdldCB0ZW1wZXJhdHVyZSBpbiBtaWxsaWRlZ3JlZXMgKi8KK3UzMiBydjZ4eF9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1MzIgdGVtcCA9IChSUkVHMzIoQ0dfVEhFUk1BTF9TVEFUVVMpICYgQVNJQ19UX01BU0spID4+CisJCUFTSUNfVF9TSElGVDsKKwl1MzIgYWN0dWFsX3RlbXAgPSAwOworCisJaWYgKCh0ZW1wID4+IDcpICYgMSkKKwkJYWN0dWFsX3RlbXAgPSAwOworCWVsc2UKKwkJYWN0dWFsX3RlbXAgPSAodGVtcCA+PiAxKSAmIDB4ZmY7CisKKwlyZXR1cm4gYWN0dWFsX3RlbXAgKiAxMDAwOworfQorCiB2b2lkIHI2MDBfcG1fZ2V0X2R5bnBtX3N0YXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWludCBpOwpAQCAtMjU2LDcgKzI3MSw3IEBACiAJCX0KIAl9CiAKLQlEUk1fREVCVUcoIlJlcXVlc3RlZDogZTogJWQgbTogJWQgcDogJWRcbiIsCisJRFJNX0RFQlVHX0RSSVZFUigiUmVxdWVzdGVkOiBlOiAlZCBtOiAlZCBwOiAlZFxuIiwKIAkJICByZGV2LT5wbS5wb3dlcl9zdGF0ZVtyZGV2LT5wbS5yZXF1ZXN0ZWRfcG93ZXJfc3RhdGVfaW5kZXhdLgogCQkgIGNsb2NrX2luZm9bcmRldi0+cG0ucmVxdWVzdGVkX2Nsb2NrX21vZGVfaW5kZXhdLnNjbGssCiAJCSAgcmRldi0+cG0ucG93ZXJfc3RhdGVbcmRldi0+cG0ucmVxdWVzdGVkX3Bvd2VyX3N0YXRlX2luZGV4XS4KQEAgLTU3MSw3ICs1ODYsNyBAQAogCQlpZiAodm9sdGFnZS0+dm9sdGFnZSAhPSByZGV2LT5wbS5jdXJyZW50X3ZkZGMpIHsKIAkJCXJhZGVvbl9hdG9tX3NldF92b2x0YWdlKHJkZXYsIHZvbHRhZ2UtPnZvbHRhZ2UpOwogCQkJcmRldi0+cG0uY3VycmVudF92ZGRjID0gdm9sdGFnZS0+dm9sdGFnZTsKLQkJCURSTV9ERUJVRygiU2V0dGluZzogdjogJWRcbiIsIHZvbHRhZ2UtPnZvbHRhZ2UpOworCQkJRFJNX0RFQlVHX0RSSVZFUigiU2V0dGluZzogdjogJWRcbiIsIHZvbHRhZ2UtPnZvbHRhZ2UpOwogCQl9CiAJfQogfQpAQCAtODY5LDcgKzg4NCwxNyBAQAogCXUzMiB0bXA7CiAKIAkvKiBmbHVzaCBoZHAgY2FjaGUgc28gdXBkYXRlcyBoaXQgdnJhbSAqLwotCVdSRUczMihSXzAwNTQ4MF9IRFBfTUVNX0NPSEVSRU5DWV9GTFVTSF9DTlRMLCAweDEpOworCWlmICgocmRldi0+ZmFtaWx5ID49IENISVBfUlY3NzApICYmIChyZGV2LT5mYW1pbHkgPD0gQ0hJUF9SVjc0MCkpIHsKKwkJdm9pZCBfX2lvbWVtICpwdHIgPSAodm9pZCAqKXJkZXYtPmdhcnQudGFibGUudnJhbS5wdHI7CisJCXUzMiB0bXA7CisKKwkJLyogcjd4eCBodyBidWcuICB3cml0ZSB0byBIRFBfREVCVUcxIGZvbGxvd2VkIGJ5IGZiIHJlYWQKKwkJICogcmF0aGVyIHRoYW4gd3JpdGUgdG8gSERQX1JFR19DT0hFUkVOQ1lfRkxVU0hfQ05UTAorCQkgKi8KKwkJV1JFRzMyKEhEUF9ERUJVRzEsIDApOworCQl0bXAgPSByZWFkbCgodm9pZCBfX2lvbWVtICopcHRyKTsKKwl9IGVsc2UKKwkJV1JFRzMyKFJfMDA1NDgwX0hEUF9NRU1fQ09IRVJFTkNZX0ZMVVNIX0NOVEwsIDB4MSk7CiAKIAlXUkVHMzIoVk1fQ09OVEVYVDBfSU5WQUxJREFUSU9OX0xPV19BRERSLCByZGV2LT5tYy5ndHRfc3RhcnQgPj4gMTIpOwogCVdSRUczMihWTV9DT05URVhUMF9JTlZBTElEQVRJT05fSElHSF9BRERSLCAocmRldi0+bWMuZ3R0X2VuZCAtIDEpID4+IDEyKTsKQEAgLTExNzksNiArMTIwNCw3IEBACiAJCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApCiAJCQliYXNlID0gKFJSRUczMihNQ19WTV9GQl9MT0NBVElPTikgJiAweEZGRkYpIDw8IDI0OwogCQlyYWRlb25fdnJhbV9sb2NhdGlvbihyZGV2LCAmcmRldi0+bWMsIGJhc2UpOworCQlyZGV2LT5tYy5ndHRfYmFzZV9hbGlnbiA9IDA7CiAJCXJhZGVvbl9ndHRfbG9jYXRpb24ocmRldiwgbWMpOwogCX0KIH0KQEAgLTEyMTYsOCArMTI0Miw4IEBACiAJfQogCXJkZXYtPm1jLnZyYW1fd2lkdGggPSBudW1jaGFuICogY2hhbnNpemU7CiAJLyogQ291bGQgYXBlciBzaXplIHJlcG9ydCAwID8gKi8KLQlyZGV2LT5tYy5hcGVyX2Jhc2UgPSBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KHJkZXYtPmRkZXYsIDApOwotCXJkZXYtPm1jLmFwZXJfc2l6ZSA9IGRybV9nZXRfcmVzb3VyY2VfbGVuKHJkZXYtPmRkZXYsIDApOworCXJkZXYtPm1jLmFwZXJfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChyZGV2LT5wZGV2LCAwKTsKKwlyZGV2LT5tYy5hcGVyX3NpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHJkZXYtPnBkZXYsIDApOwogCS8qIFNldHVwIEdQVSBtZW1vcnkgc3BhY2UgKi8KIAlyZGV2LT5tYy5tY192cmFtX3NpemUgPSBSUkVHMzIoQ09ORklHX01FTVNJWkUpOwogCXJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID0gUlJFRzMyKENPTkZJR19NRU1TSVpFKTsKQEAgLTE2MDgsNyArMTYzNCw3IEBACiAJCQkJCQkJIHI2MDBfY291bnRfcGlwZV9iaXRzKChjY19yYl9iYWNrZW5kX2Rpc2FibGUgJgogCQkJCQkJCQkJICAgICAgIFI2WFhfTUFYX0JBQ0tFTkRTX01BU0spID4+IDE2KSksCiAJCQkJCQkJKGNjX3JiX2JhY2tlbmRfZGlzYWJsZSA+PiAxNikpOwotCisJcmRldi0+Y29uZmlnLnI2MDAudGlsZV9jb25maWcgPSB0aWxpbmdfY29uZmlnOwogCXRpbGluZ19jb25maWcgfD0gQkFDS0VORF9NQVAoYmFja2VuZF9tYXApOwogCVdSRUczMihHQl9USUxJTkdfQ09ORklHLCB0aWxpbmdfY29uZmlnKTsKIAlXUkVHMzIoRENQX1RJTElOR19DT05GSUcsIHRpbGluZ19jb25maWcgJiAweGZmZmYpOwpAQCAtMzUxMSw1ICszNTM3LDE1IEBACiAgKi8KIHZvaWQgcjYwMF9pb2N0bF93YWl0X2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25fYm8gKmJvKQogewotCVdSRUczMihSXzAwNTQ4MF9IRFBfTUVNX0NPSEVSRU5DWV9GTFVTSF9DTlRMLCAweDEpOworCS8qIHI3eHggaHcgYnVnLiAgd3JpdGUgdG8gSERQX0RFQlVHMSBmb2xsb3dlZCBieSBmYiByZWFkCisJICogcmF0aGVyIHRoYW4gd3JpdGUgdG8gSERQX1JFR19DT0hFUkVOQ1lfRkxVU0hfQ05UTAorCSAqLworCWlmICgocmRldi0+ZmFtaWx5ID49IENISVBfUlY3NzApICYmIChyZGV2LT5mYW1pbHkgPD0gQ0hJUF9SVjc0MCkpIHsKKwkJdm9pZCBfX2lvbWVtICpwdHIgPSAodm9pZCAqKXJkZXYtPmdhcnQudGFibGUudnJhbS5wdHI7CisJCXUzMiB0bXA7CisKKwkJV1JFRzMyKEhEUF9ERUJVRzEsIDApOworCQl0bXAgPSByZWFkbCgodm9pZCBfX2lvbWVtICopcHRyKTsKKwl9IGVsc2UKKwkJV1JFRzMyKFJfMDA1NDgwX0hEUF9NRU1fQ09IRVJFTkNZX0ZMVVNIX0NOVEwsIDB4MSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYXVkaW8uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9hdWRpby5jCmluZGV4IDJiMjY1NTMuLmI1NDQzZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9hdWRpby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9hdWRpby5jCkBAIC02Myw3ICs2Myw4IEBACiAJY2FzZSAweDQ6IHJldHVybiAzMjsKIAl9CiAKLQlEUk1fRVJST1IoIlVua25vd24gYml0cyBwZXIgc2FtcGxlIDB4JXggdXNpbmcgMTYgaW5zdGVhZC5cbiIsIChpbnQpdmFsdWUpOworCWRldl9lcnIocmRldi0+ZGV2LCAiVW5rbm93biBiaXRzIHBlciBzYW1wbGUgMHgleCB1c2luZyAxNiBpbnN0ZWFkXG4iLAorCQkoaW50KXZhbHVlKTsKIAogCXJldHVybiAxNjsKIH0KQEAgLTE1MCw3ICsxNTEsOCBAQAogCQkJcjYwMF9oZG1pX3VwZGF0ZV9hdWRpb19zZXR0aW5ncyhlbmNvZGVyKTsKIAl9CiAKLQlpZihzdGlsbF9nb2luZykgcjYwMF9hdWRpb19zY2hlZHVsZV9wb2xsaW5nKHJkZXYpOworCWlmIChzdGlsbF9nb2luZykKKwkJcjYwMF9hdWRpb19zY2hlZHVsZV9wb2xsaW5nKHJkZXYpOwogfQogCiAvKgpAQCAtMTU4LDggKzE2MCw5IEBACiAgKi8KIHN0YXRpYyB2b2lkIHI2MDBfYXVkaW9fZW5naW5lX2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgYm9vbCBlbmFibGUpCiB7Ci0JRFJNX0lORk8oIiVzIGF1ZGlvIHN1cHBvcnQiLCBlbmFibGUgPyAiRW5hYmxpbmciIDogIkRpc2FibGluZyIpOworCURSTV9JTkZPKCIlcyBhdWRpbyBzdXBwb3J0XG4iLCBlbmFibGUgPyAiRW5hYmxpbmciIDogIkRpc2FibGluZyIpOwogCVdSRUczMl9QKFI2MDBfQVVESU9fRU5BQkxFLCBlbmFibGUgPyAweDgxMDAwMDAwIDogMHgwLCB+MHg4MTAwMDAwMCk7CisJcmRldi0+YXVkaW9fZW5hYmxlZCA9IGVuYWJsZTsKIH0KIAogLyoKQEAgLTE5NSwxMiArMTk4LDE0IEBACiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKIAotCURSTV9ERUJVRygicjYwMF9hdWRpb19lbmFibGVfcG9sbGluZzogJWQiLCByYWRlb25fZW5jb2Rlci0+YXVkaW9fcG9sbGluZ19hY3RpdmUpOworCURSTV9ERUJVRygicjYwMF9hdWRpb19lbmFibGVfcG9sbGluZzogJWRcbiIsCisJCXJhZGVvbl9lbmNvZGVyLT5hdWRpb19wb2xsaW5nX2FjdGl2ZSk7CiAJaWYgKHJhZGVvbl9lbmNvZGVyLT5hdWRpb19wb2xsaW5nX2FjdGl2ZSkKIAkJcmV0dXJuOwogCiAJcmFkZW9uX2VuY29kZXItPmF1ZGlvX3BvbGxpbmdfYWN0aXZlID0gMTsKLQltb2RfdGltZXIoJnJkZXYtPmF1ZGlvX3RpbWVyLCBqaWZmaWVzICsgMSk7CisJaWYgKHJkZXYtPmF1ZGlvX2VuYWJsZWQpCisJCW1vZF90aW1lcigmcmRldi0+YXVkaW9fdGltZXIsIGppZmZpZXMgKyAxKTsKIH0KIAogLyoKQEAgLTIwOSw3ICsyMTQsOCBAQAogdm9pZCByNjAwX2F1ZGlvX2Rpc2FibGVfcG9sbGluZyhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCiB7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOwotCURSTV9ERUJVRygicjYwMF9hdWRpb19kaXNhYmxlX3BvbGxpbmc6ICVkIiwgcmFkZW9uX2VuY29kZXItPmF1ZGlvX3BvbGxpbmdfYWN0aXZlKTsKKwlEUk1fREVCVUcoInI2MDBfYXVkaW9fZGlzYWJsZV9wb2xsaW5nOiAlZFxuIiwKKwkJcmFkZW9uX2VuY29kZXItPmF1ZGlvX3BvbGxpbmdfYWN0aXZlKTsKIAlyYWRlb25fZW5jb2Rlci0+YXVkaW9fcG9sbGluZ19hY3RpdmUgPSAwOwogfQogCkBAIC0yMzYsNyArMjQyLDcgQEAKIAkJV1JFRzMyX1AoUjYwMF9BVURJT19USU1JTkcsIDB4MTAwLCB+MHgzMDEpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlEUk1fRVJST1IoIlVuc3VwcG9ydGVkIGVuY29kZXIgdHlwZSAweCUwMlhcbiIsCisJCWRldl9lcnIocmRldi0+ZGV2LCAiVW5zdXBwb3J0ZWQgZW5jb2RlciB0eXBlIDB4JTAyWFxuIiwKIAkJCSAgcmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQpOwogCQlyZXR1cm47CiAJfQpAQCAtMjY2LDcgKzI3Miw3IEBACiAgKi8KIHZvaWQgcjYwMF9hdWRpb19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCWlmICghcmFkZW9uX2F1ZGlvIHx8ICFyNjAwX2F1ZGlvX2NoaXBzZXRfc3VwcG9ydGVkKHJkZXYpKQorCWlmICghcmRldi0+YXVkaW9fZW5hYmxlZCkKIAkJcmV0dXJuOwogCiAJZGVsX3RpbWVyKCZyZGV2LT5hdWRpb190aW1lcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXQuYwppbmRleCBmNGZiODhlLi5jYTVjMjlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0LmMKQEAgLTUzOCw5ICs1MzgsMTIgQEAKIHI2MDBfcHJlcGFyZV9ibGl0X2NvcHkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OwogCURSTV9ERUJVRygiXG4iKTsKIAotCXI2MDBfbm9tbV9nZXRfdmIoZGV2KTsKKwlyZXQgPSByNjAwX25vbW1fZ2V0X3ZiKGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAogCWRldl9wcml2LT5ibGl0X3ZiLT5maWxlX3ByaXYgPSBmaWxlX3ByaXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X3NoYWRlcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X3NoYWRlcnMuYwppbmRleCAwMjcxYjUzLi5lODE1MWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9zaGFkZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfc2hhZGVycy5jCkBAIC0zOSwzNyArMzksNDUgQEAKIAogY29uc3QgdTMyIHI2eHhfZGVmYXVsdF9zdGF0ZVtdID0KIHsKLQkweGMwMDAyNDAwLAorCTB4YzAwMDI0MDAsIC8qIFNUQVJUXzNEX0NNREJVRiAqLwogCTB4MDAwMDAwMDAsCi0JMHhjMDAxMjgwMCwKKworCTB4YzAwMTI4MDAsIC8qIENPTlRFWFRfQ09OVFJPTCAqLwogCTB4ODAwMDAwMDAsCiAJMHg4MDAwMDAwMCwKKwogCTB4YzAwMTY4MDAsCiAJMHgwMDAwMDAxMCwKLQkweDAwMDA4MDAwLAorCTB4MDAwMDgwMDAsIC8qIFdBSVRfVU5USUwgKi8KKwogCTB4YzAwMTY4MDAsCiAJMHgwMDAwMDU0MiwKLQkweDA3MDAwMDAzLAorCTB4MDcwMDAwMDMsIC8qIFRBX0NOVExfQVVYICovCisKIAkweGMwMDE2ODAwLAogCTB4MDAwMDA1YzUsCi0JMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAvKiBWQ19FTkhBTkNFICovCisKIAkweGMwMDE2ODAwLAogCTB4MDAwMDAzNjMsCi0JMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAvKiBTUV9EWU5fR1BSX0NOVExfUFNfRkxVU0hfUkVRICovCisKIAkweGMwMDE2ODAwLAogCTB4MDAwMDA2MGMsCi0JMHg4MjAwMDAwMCwKKwkweDgyMDAwMDAwLCAvKiBEQl9ERUJVRyAqLworCiAJMHhjMDAxNjgwMCwKIAkweDAwMDAwNjBlLAotCTB4MDEwMjAyMDQsCi0JMHhjMDAxNmYwMCwKKwkweDAxMDIwMjA0LCAvKiBEQl9XQVRFUk1BUktTICovCisKKwkweGMwMDI2ZjAwLAogCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2ZjAwLAotCTB4MDAwMDAwMDEsCi0JMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAvKiBTUV9WVFhfQkFTRV9WVFhfTE9DICovCisJMHgwMDAwMDAwMCwgLyogU1FfVlRYX1NUQVJUX0lOU1RfTE9DICovCisKIAkweGMwMDk2OTAwLAogCTB4MDAwMDAyMmEsCisJMHgwMDAwMDAwMCwgLyogU1FfRVNHU19SSU5HX0lURU1TSVpFICovCiAJMHgwMDAwMDAwMCwKIAkweDAwMDAwMDAwLAogCTB4MDAwMDAwMDAsCkBAIC03OCw1MTUgKzg2LDMxNyBAQAogCTB4MDAwMDAwMDAsCiAJMHgwMDAwMDAwMCwKIAkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCisKIAkweGMwMDE2OTAwLAogCTB4MDAwMDAwMDQsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAorCTB4MDAwMDAwMDAsIC8qIERCX0RFUFRIX0lORk8gKi8KKworCTB4YzAwMjY5MDAsCiAJMHgwMDAwMDAwYSwKLQkweDAwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDAwYiwKLQkweDAwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDEwYywKLQkweDAwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDEwZCwKLQkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIC8qIERCX1NURU5DSUxfQ0xFQVIgKi8KKwkweDAwMDAwMDAwLCAvKiBEQl9ERVBUSF9DTEVBUiAqLworCiAJMHhjMDAxNjkwMCwKIAkweDAwMDAwMjAwLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKKwkweDAwMDAwMDAwLCAvKiBEQl9ERVBUSF9DT05UUk9MICovCisKKwkweGMwMDI2OTAwLAogCTB4MDAwMDAzNDMsCi0JMHgwMDAwMDA2MCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAzNDQsCi0JMHgwMDAwMDA0MCwKKwkweDAwMDAwMDYwLCAvKiBEQl9SRU5ERVJfQ09OVFJPTCAqLworCTB4MDAwMDAwNDAsIC8qIERCX1JFTkRFUl9PVkVSUklERSAqLworCiAJMHhjMDAxNjkwMCwKIAkweDAwMDAwMzUxLAotCTB4MDAwMGFhMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMTA0LAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMTBlLAotCTB4MDAwMDAwMDAsCi0JMHhjMDA0NjkwMCwKLQkweDAwMDAwMTA1LAorCTB4MDAwMGFhMDAsIC8qIERCX0FMUEhBX1RPX01BU0sgKi8KKworCTB4YzAwZjY5MDAsCisJMHgwMDAwMDEwMCwKKwkweDAwMDAwODAwLCAvKiBWR1RfTUFYX1ZUWF9JTkRYICovCisJMHgwMDAwMDAwMCwgLyogVkdUX01JTl9WVFhfSU5EWCAqLworCTB4MDAwMDAwMDAsIC8qIFZHVF9JTkRYX09GRlNFVCAqLworCTB4MDAwMDAwMDAsIC8qIFZHVF9NVUxUSV9QUklNX0lCX1JFU0VUX0lORFggKi8KKwkweDAwMDAwMDAwLCAvKiBTWF9BTFBIQV9URVNUX0NPTlRST0wgKi8KKwkweDAwMDAwMDAwLCAvKiBDQl9CTEVORF9SRUQgKi8KIAkweDAwMDAwMDAwLAogCTB4MDAwMDAwMDAsCiAJMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4YzAwMzY5MDAsCi0JMHgwMDAwMDEwOSwKKwkweDAwMDAwMDAwLCAvKiBDQl9GT0dfUkVEICovCiAJMHgwMDAwMDAwMCwKIAkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgLyogREJfU1RFTkNJTFJFRk1BU0sgKi8KKwkweDAwMDAwMDAwLCAvKiBEQl9TVEVOQ0lMUkVGTUFTS19CRiAqLworCTB4MDAwMDAwMDAsIC8qIFNYX0FMUEhBX1JFRiAqLworCiAJMHhjMDA0NjkwMCwKIAkweDAwMDAwMzBjLAotCTB4MDEwMDAwMDAsCisJMHgwMTAwMDAwMCwgLyogQ0JfQ0xSQ01QX0NOVEwgKi8KIAkweDAwMDAwMDAwLAogCTB4MDAwMDAwMDAsCiAJMHgwMDAwMDAwMCwKKwogCTB4YzAwNDY5MDAsCiAJMHgwMDAwMDA0OCwKLQkweDNmODAwMDAwLAorCTB4M2Y4MDAwMDAsIC8qIENCX0NMRUFSX1JFRCAqLwogCTB4MDAwMDAwMDAsCiAJMHgzZjgwMDAwMCwKIAkweDNmODAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDA4ZSwKLQkweDAwMDAwMDBmLAorCiAJMHhjMDAxNjkwMCwKIAkweDAwMDAwMDgwLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKKwkweDAwMDAwMDAwLCAvKiBQQV9TQ19XSU5ET1dfT0ZGU0VUICovCisKKwkweGMwMGE2OTAwLAogCTB4MDAwMDAwODMsCi0JMHgwMDAwZmZmZiwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwODQsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwODUsCisJMHgwMDAwZmZmZiwgLyogUEFfU0NfQ0xJUF9SRUNUX1JVTEUgKi8KKwkweDAwMDAwMDAwLCAvKiBQQV9TQ19DTElQUkVDVF8wX1RMICovCiAJMHgyMDAwMjAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwODYsCiAJMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwODcsCiAJMHgyMDAwMjAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwODgsCiAJMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwODksCiAJMHgyMDAwMjAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwOGEsCiAJMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwOGIsCiAJMHgyMDAwMjAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwOGMsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAorCTB4MDAwMDAwMDAsIC8qIFBBX1NDX0VER0VSVUxFICovCisKKwkweGMwNDA2OTAwLAogCTB4MDAwMDAwOTQsCi0JMHg4MDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwOTUsCisJMHg4MDAwMDAwMCwgLyogUEFfU0NfVlBPUlRfU0NJU1NPUl8wX1RMICovCisJMHgyMDAwMjAwMCwgLyogUEFfU0NfVlBPUlRfU0NJU1NPUl8wX0JSICovCisJMHg4MDAwMDAwMCwgLyogUEFfU0NfVlBPUlRfU0NJU1NPUl8xX1RMICovCiAJMHgyMDAwMjAwMCwKLQkweGMwMDI2OTAwLAotCTB4MDAwMDAwYjQsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDAwMDAwMDAwLCAvKiBQQV9TQ19WUE9SVF9aTUlOXzAgKi8KKwkweDNmODAwMDAwLAogCTB4MDAwMDAwMDAsCiAJMHgzZjgwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwOTYsCi0JMHg4MDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwOTcsCi0JMHgyMDAwMjAwMCwKLQkweGMwMDI2OTAwLAotCTB4MDAwMDAwYjYsCiAJMHgwMDAwMDAwMCwKIAkweDNmODAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDA5OCwKLQkweDgwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDA5OSwKLQkweDIwMDAyMDAwLAotCTB4YzAwMjY5MDAsCi0JMHgwMDAwMDBiOCwKIAkweDAwMDAwMDAwLAogCTB4M2Y4MDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMDlhLAotCTB4ODAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMDliLAotCTB4MjAwMDIwMDAsCi0JMHhjMDAyNjkwMCwKLQkweDAwMDAwMGJhLAogCTB4MDAwMDAwMDAsCiAJMHgzZjgwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwOWMsCi0JMHg4MDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwOWQsCi0JMHgyMDAwMjAwMCwKLQkweGMwMDI2OTAwLAotCTB4MDAwMDAwYmMsCiAJMHgwMDAwMDAwMCwKIAkweDNmODAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDA5ZSwKLQkweDgwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDA5ZiwKLQkweDIwMDAyMDAwLAotCTB4YzAwMjY5MDAsCi0JMHgwMDAwMDBiZSwKIAkweDAwMDAwMDAwLAogCTB4M2Y4MDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMGEwLAotCTB4ODAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMGExLAotCTB4MjAwMDIwMDAsCi0JMHhjMDAyNjkwMCwKLQkweDAwMDAwMGMwLAogCTB4MDAwMDAwMDAsCiAJMHgzZjgwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwYTIsCi0JMHg4MDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwYTMsCi0JMHgyMDAwMjAwMCwKLQkweGMwMDI2OTAwLAotCTB4MDAwMDAwYzIsCiAJMHgwMDAwMDAwMCwKIAkweDNmODAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDBhNCwKLQkweDgwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDBhNSwKLQkweDIwMDAyMDAwLAotCTB4YzAwMjY5MDAsCi0JMHgwMDAwMDBjNCwKIAkweDAwMDAwMDAwLAogCTB4M2Y4MDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMGE2LAotCTB4ODAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMGE3LAotCTB4MjAwMDIwMDAsCi0JMHhjMDAyNjkwMCwKLQkweDAwMDAwMGM2LAogCTB4MDAwMDAwMDAsCiAJMHgzZjgwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwYTgsCi0JMHg4MDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwYTksCi0JMHgyMDAwMjAwMCwKLQkweGMwMDI2OTAwLAotCTB4MDAwMDAwYzgsCiAJMHgwMDAwMDAwMCwKIAkweDNmODAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDBhYSwKLQkweDgwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDBhYiwKLQkweDIwMDAyMDAwLAotCTB4YzAwMjY5MDAsCi0JMHgwMDAwMDBjYSwKIAkweDAwMDAwMDAwLAogCTB4M2Y4MDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMGFjLAotCTB4ODAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMGFkLAotCTB4MjAwMDIwMDAsCi0JMHhjMDAyNjkwMCwKLQkweDAwMDAwMGNjLAogCTB4MDAwMDAwMDAsCiAJMHgzZjgwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwYWUsCi0JMHg4MDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwYWYsCi0JMHgyMDAwMjAwMCwKLQkweGMwMDI2OTAwLAotCTB4MDAwMDAwY2UsCiAJMHgwMDAwMDAwMCwKIAkweDNmODAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDBiMCwKLQkweDgwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDBiMSwKLQkweDIwMDAyMDAwLAotCTB4YzAwMjY5MDAsCi0JMHgwMDAwMDBkMCwKIAkweDAwMDAwMDAwLAogCTB4M2Y4MDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMGIyLAotCTB4ODAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMGIzLAotCTB4MjAwMDIwMDAsCisKIAkweGMwMDI2OTAwLAotCTB4MDAwMDAwZDIsCi0JMHgwMDAwMDAwMCwKLQkweDNmODAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDI5MywKLQkweDAwMDA0MDEwLAotCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI5MiwKKwkweDAwMDAwMDAwLCAvKiBQQV9TQ19NUEFTU19QU19DTlRMICovCisJMHgwMDAwNDAxMCwgLyogUEFfU0NfTU9ERV9DTlRMICovCisKKwkweGMwMDk2OTAwLAogCTB4MDAwMDAzMDAsCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfTElORV9DTlRMICovCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfQUFfQ09ORklHICovCisJMHgwMDAwMDAyZCwgLyogUEFfU1VfVlRYX0NOVEwgKi8KKwkweDNmODAwMDAwLCAvKiBQQV9DTF9HQl9WRVJUX0NMSVBfQURKICovCisJMHgzZjgwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfU0FNUExFX0xPQ1NfTUNUWCAqLwogCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMzAxLAotCTB4MDAwMDAwMDAsCisKIAkweGMwMDE2OTAwLAogCTB4MDAwMDAzMTIsCi0JMHhmZmZmZmZmZiwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAzMDcsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAzMDgsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyODMsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyOTIsCi0JMHgwMDAwMDAwMCwKKwkweGZmZmZmZmZmLCAvKiBQQV9TQ19BQV9NQVNLICovCisKIAkweGMwMDY2OTAwLAotCTB4MDAwMDAxMGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMjA2LAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMjA3LAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMjA4LAotCTB4MDAwMDAwMDAsCi0JMHhjMDA0NjkwMCwKLQkweDAwMDAwMzAzLAotCTB4M2Y4MDAwMDAsCi0JMHgzZjgwMDAwMCwKLQkweDNmODAwMDAwLAotCTB4M2Y4MDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMjA1LAotCTB4MDAwMDAwMDQsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMjgwLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMjgxLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKIAkweDAwMDAwMzdlLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMzgyLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMzgwLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMzgzLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMzgxLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMjgyLAotCTB4MDAwMDAwMDgsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMzAyLAotCTB4MDAwMDAwMmQsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMzdmLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMWIyLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKKwkweDAwMDAwMDAwLCAvKiBQQV9TVV9QT0xZX09GRlNFVF9EQl9GTVRfQ05UTCAqLworCTB4MDAwMDAwMDAsIC8qIFBBX1NVX1BPTFlfT0ZGU0VUX0NMQU1QICovCisJMHgwMDAwMDAwMCwgLyogUEFfU1VfUE9MWV9PRkZTRVRfRlJPTlRfU0NBTEUgKi8KKwkweDAwMDAwMDAwLCAvKiBQQV9TVV9QT0xZX09GRlNFVF9GUk9OVF9PRkZTRVQgKi8KKwkweDAwMDAwMDAwLCAvKiBQQV9TVV9QT0xZX09GRlNFVF9CQUNLX1NDQUxFICovCisJMHgwMDAwMDAwMCwgLyogUEFfU1VfUE9MWV9PRkZTRVRfQkFDS19PRkZTRVQgKi8KKworCTB4YzAwNDY5MDAsCiAJMHgwMDAwMDFiNiwKLQkweDAwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDFiNywKLQkweDAwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDFiOCwKLQkweDAwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDFiOSwKLQkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIC8qIFNQSV9JTlBVVF9aICovCisJMHgwMDAwMDAwMCwgLyogU1BJX0ZPR19DTlRMICovCisJMHgwMDAwMDAwMCwgLyogU1BJX0ZPR19GVU5DX1NDQUxFICovCisJMHgwMDAwMDAwMCwgLyogU1BJX0ZPR19GVU5DX0JJQVMgKi8KKwogCTB4YzAwMTY5MDAsCiAJMHgwMDAwMDIyNSwKLQkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIC8qIFNRX1BHTV9TVEFSVF9GUyAqLworCiAJMHhjMDAxNjkwMCwKIAkweDAwMDAwMjI5LAotCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgLyogU1FfUEdNX1JFU09VUkNFU19GUyAqLworCiAJMHhjMDAxNjkwMCwKIAkweDAwMDAwMjM3LAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMTAwLAotCTB4MDAwMDA4MDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMTAxLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMTAyLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKKwkweDAwMDAwMDAwLCAvKiBTUV9QR01fQ0ZfT0ZGU0VUX0ZTICovCisKKwkweGMwMDI2OTAwLAogCTB4MDAwMDAyYTgsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyYTksCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAxMDMsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyODQsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyOTAsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyODUsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyODYsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyODcsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyODgsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyODksCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyOGEsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyOGIsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyOGMsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyOGQsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyOGUsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyOGYsCi0JMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAvKiBWR1RfSU5TVEFOQ0VfU1RFUF9SQVRFXzAgKi8KKwkweDAwMDAwMDAwLCAvKiBWR1RfSU5TVEFOQ0VfU1RFUF9SQVRFXzEgKi8KKworCTB4YzAxMTY5MDAsCisJMHgwMDAwMDI4MCwKKwkweDAwMDAwMDAwLCAvKiBQQV9TVV9QT0lOVF9TSVpFICovCisJMHgwMDAwMDAwMCwgLyogUEFfU1VfUE9JTlRfTUlOTUFYICovCisJMHgwMDAwMDAwOCwgLyogUEFfU1VfTElORV9DTlRMICovCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfTElORV9TVElQUExFICovCisJMHgwMDAwMDAwMCwgLyogVkdUX09VVFBVVF9QQVRIX0NOVEwgKi8KKwkweDAwMDAwMDAwLCAvKiBWR1RfSE9TX0NOVEwgKi8KKwkweDAwMDAwMDAwLCAvKiBWR1RfSE9TX01BWF9URVNTX0xFVkVMICovCisJMHgwMDAwMDAwMCwgLyogVkdUX0hPU19NSU5fVEVTU19MRVZFTCAqLworCTB4MDAwMDAwMDAsIC8qIFZHVF9IT1NfUkVVU0VfREVQVEggKi8KKwkweDAwMDAwMDAwLCAvKiBWR1RfR1JPVVBfUFJJTV9UWVBFICovCisJMHgwMDAwMDAwMCwgLyogVkdUX0dST1VQX0ZJUlNUX0RFQ1IgKi8KKwkweDAwMDAwMDAwLCAvKiBWR1RfR1JPVVBfREVDUiAqLworCTB4MDAwMDAwMDAsIC8qIFZHVF9HUk9VUF9WRUNUXzBfQ05UTCAqLworCTB4MDAwMDAwMDAsIC8qIFZHVF9HUk9VUF9WRUNUXzFfQ05UTCAqLworCTB4MDAwMDAwMDAsIC8qIFZHVF9HUk9VUF9WRUNUXzBfRk1UX0NOVEwgKi8KKwkweDAwMDAwMDAwLCAvKiBWR1RfR1JPVVBfVkVDVF8xX0ZNVF9DTlRMICovCisJMHgwMDAwMDAwMCwgLyogVkdUX0dTX01PREUgKi8KKwogCTB4YzAwMTY5MDAsCiAJMHgwMDAwMDJhMSwKLQkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIC8qIFZHVF9QUklNSVRJVkVJRF9FTiAqLworCiAJMHhjMDAxNjkwMCwKIAkweDAwMDAwMmE1LAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKKwkweDAwMDAwMDAwLCAvKiBWR1RfTVVMVElfUFJJTV9JRF9SRVNFVF9FTiAqLworCisJMHhjMDAzNjkwMCwKIAkweDAwMDAwMmFjLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMmFkLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMmFlLAotCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgLyogVkdUX1NUUk1PVVRfRU4gKi8KKwkweDAwMDAwMDAwLCAvKiBWR1RfUkVVU0VfT0ZGICovCisJMHgwMDAwMDAwMCwgLyogVkdUX1ZUWF9DTlRfRU4gKi8KKwogCTB4YzAwMTY5MDAsCiAJMHgwMDAwMDJjOCwKLQkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIC8qIFZHVF9TVFJNT1VUX0JVRkZFUl9FTiAqLworCisJMHhjMDA3NjkwMCwKKwkweDAwMDAwMjAyLAorCTB4MDBjYzAwMDAsIC8qIENCX0NPTE9SX0NPTlRST0wgKi8KKwkweDAwMDAwMjEwLCAvKiBEQl9TSEFERVJfQ05UTCAqLworCTB4MDAwMTAwMDAsIC8qIFBBX0NMX0NMSVBfQ05UTCAqLworCTB4MDAwMDAyNDQsIC8qIFBBX1NVX1NDX01PREVfQ05UTCAqLworCTB4MDAwMDAxMDAsIC8qIFBBX0NMX1ZURV9DTlRMICovCisJMHgwMDAwMDAwMCwgLyogUEFfQ0xfVlNfT1VUX0NOVEwgKi8KKwkweDAwMDAwMDAwLCAvKiBQQV9DTF9OQU5JTkZfQ05UTCAqLworCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMDhlLAorCTB4MDAwMDAwMGYsIC8qIENCX1RBUkdFVF9NQVNLICovCisJMHgwMDAwMDAwZiwgLyogQ0JfU0hBREVSX01BU0sgKi8KKwogCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDIwNiwKLQkweDAwMDAwMTAwLAorCTB4MDAwMDAxZTgsCisJMHgwMDAwMDAwMSwgLyogQ0JfU0hBREVSX0NPTlRST0wgKi8KKwogCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDIwNCwKLQkweDAwMDEwMDAwLAotCTB4YzAwMzZlMDAsCisJMHgwMDAwMDE4NSwKKwkweDAwMDAwMDAwLCAvKiBTUElfVlNfT1VUX0lEXzAgKi8KKworCTB4YzAwMTY5MDAsCisJMHgwMDAwMDE5MSwKKwkweDAwMDAwYjAwLCAvKiBTUElfUFNfSU5QVVRfQ05UTF8wICovCisKKwkweGMwMDU2OTAwLAorCTB4MDAwMDAxYjEsCisJMHgwMDAwMDAwMCwgLyogU1BJX1ZTX09VVF9DT05GSUcgKi8KKwkweDAwMDAwMDAwLCAvKiBTUElfVEhSRUFEX0dST1VQSU5HICovCisJMHgwMDAwMDAwMSwgLyogU1BJX1BTX0lOX0NPTlRST0xfMCAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9QU19JTl9DT05UUk9MXzEgKi8KKwkweDAwMDAwMDAwLCAvKiBTUElfSU5URVJQX0NPTlRST0xfMCAqLworCisJMHhjMDAzNmUwMCwgLyogU0VUX1NBTVBMRVIgKi8KIAkweDAwMDAwMDAwLAogCTB4MDAwMDAwMTIsCiAJMHgwMDAwMDAwMCwKIAkweDAwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDA4ZiwKLQkweDAwMDAwMDBmLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDFlOCwKLQkweDAwMDAwMDAxLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDIwMiwKLQkweDAwY2MwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDIwNSwKLQkweDAwMDAwMjQ0LAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDIwMywKLQkweDAwMDAwMjEwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDFiMSwKLQkweDAwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDE4NSwKLQkweDAwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDFiMywKLQkweDAwMDAwMDAxLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDFiNCwKLQkweDAwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDE5MSwKLQkweDAwMDAwYjAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDFiNSwKLQkweDAwMDAwMDAwLAogfTsKIAogY29uc3QgdTMyIHI3eHhfZGVmYXVsdF9zdGF0ZVtdID0KIHsKLQkweGMwMDEyODAwLAorCTB4YzAwMTI4MDAsIC8qIENPTlRFWFRfQ09OVFJPTCAqLwogCTB4ODAwMDAwMDAsCiAJMHg4MDAwMDAwMCwKKwogCTB4YzAwMTY4MDAsCiAJMHgwMDAwMDAxMCwKLQkweDAwMDA4MDAwLAorCTB4MDAwMDgwMDAsIC8qIFdBSVRfVU5USUwgKi8KKwogCTB4YzAwMTY4MDAsCiAJMHgwMDAwMDU0MiwKLQkweDA3MDAwMDAyLAorCTB4MDcwMDAwMDIsIC8qIFRBX0NOVExfQVVYICovCisKIAkweGMwMDE2ODAwLAogCTB4MDAwMDA1YzUsCi0JMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAvKiBWQ19FTkhBTkNFICovCisKIAkweGMwMDE2ODAwLAogCTB4MDAwMDAzNjMsCi0JMHgwMDAwNDAwMCwKKwkweDAwMDA0MDAwLCAvKiBTUV9EWU5fR1BSX0NOVExfUFNfRkxVU0hfUkVRICovCisKIAkweGMwMDE2ODAwLAogCTB4MDAwMDA2MGMsCi0JMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAvKiBEQl9ERUJVRyAqLworCiAJMHhjMDAxNjgwMCwKIAkweDAwMDAwNjBlLAotCTB4MDA0MjAyMDQsCi0JMHhjMDAxNmYwMCwKKwkweDAwNDIwMjA0LCAvKiBEQl9XQVRFUk1BUktTICovCisKKwkweGMwMDI2ZjAwLAogCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2ZjAwLAotCTB4MDAwMDAwMDEsCi0JMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAvKiBTUV9WVFhfQkFTRV9WVFhfTE9DICovCisJMHgwMDAwMDAwMCwgLyogU1FfVlRYX1NUQVJUX0lOU1RfTE9DICovCisKIAkweGMwMDk2OTAwLAogCTB4MDAwMDAyMmEsCisJMHgwMDAwMDAwMCwgLyogU1FfRVNHU19SSU5HX0lURU1TSVpFICovCiAJMHgwMDAwMDAwMCwKIAkweDAwMDAwMDAwLAogCTB4MDAwMDAwMDAsCkBAIC01OTUsNDcxICs0MDUsMjcwIEBACiAJMHgwMDAwMDAwMCwKIAkweDAwMDAwMDAwLAogCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKKwogCTB4YzAwMTY5MDAsCiAJMHgwMDAwMDAwNCwKLQkweDAwMDAwMDAwLAotCTB4YzAwMTY5MDAsCisJMHgwMDAwMDAwMCwgLyogREJfREVQVEhfSU5GTyAqLworCisJMHhjMDAyNjkwMCwKIAkweDAwMDAwMDBhLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMDBiLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMTBjLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMTBkLAotCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgLyogREJfU1RFTkNJTF9DTEVBUiAqLworCTB4MDAwMDAwMDAsIC8qIERCX0RFUFRIX0NMRUFSICovCisKIAkweGMwMDE2OTAwLAogCTB4MDAwMDAyMDAsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAorCTB4MDAwMDAwMDAsIC8qIERCX0RFUFRIX0NPTlRST0wgKi8KKworCTB4YzAwMjY5MDAsCiAJMHgwMDAwMDM0MywKLQkweDAwMDAwMDYwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDM0NCwKLQkweDAwMDAwMDAwLAorCTB4MDAwMDAwNjAsIC8qIERCX1JFTkRFUl9DT05UUk9MICovCisJMHgwMDAwMDAwMCwgLyogREJfUkVOREVSX09WRVJSSURFICovCisKIAkweGMwMDE2OTAwLAogCTB4MDAwMDAzNTEsCi0JMHgwMDAwYWEwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAxMDQsCisJMHgwMDAwYWEwMCwgLyogREJfQUxQSEFfVE9fTUFTSyAqLworCisJMHhjMDA5NjkwMCwKKwkweDAwMDAwMTAwLAorCTB4MDAwMDA4MDAsIC8qIFZHVF9NQVhfVlRYX0lORFggKi8KKwkweDAwMDAwMDAwLCAvKiBWR1RfTUlOX1ZUWF9JTkRYICovCisJMHgwMDAwMDAwMCwgLyogVkdUX0lORFhfT0ZGU0VUICovCisJMHgwMDAwMDAwMCwgLyogVkdUX01VTFRJX1BSSU1fSUJfUkVTRVRfSU5EWCAqLworCTB4MDAwMDAwMDAsIC8qIFNYX0FMUEhBX1RFU1RfQ09OVFJPTCAqLworCTB4MDAwMDAwMDAsIC8qIENCX0JMRU5EX1JFRCAqLwogCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMTBlLAogCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKworCTB4YzAwMzY5MDAsCisJMHgwMDAwMDEwYywKKwkweDAwMDAwMDAwLCAvKiBEQl9TVEVOQ0lMUkVGTUFTSyAqLworCTB4MDAwMDAwMDAsIC8qIERCX1NURU5DSUxSRUZNQVNLX0JGICovCisJMHgwMDAwMDAwMCwgLyogU1hfQUxQSEFfUkVGICovCisKIAkweGMwMDQ2OTAwLAotCTB4MDAwMDAxMDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDQ2OTAwLAotCTB4MDAwMDAzMGMsCisJMHgwMDAwMDMwYywgLyogQ0JfQ0xSQ01QX0NOVEwgKi8KIAkweDAxMDAwMDAwLAogCTB4MDAwMDAwMDAsCiAJMHgwMDAwMDAwMCwKIAkweDAwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDA4ZSwKLQkweDAwMDAwMDBmLAorCiAJMHhjMDAxNjkwMCwKIAkweDAwMDAwMDgwLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKKwkweDAwMDAwMDAwLCAvKiBQQV9TQ19XSU5ET1dfT0ZGU0VUICovCisKKwkweGMwMGE2OTAwLAogCTB4MDAwMDAwODMsCi0JMHgwMDAwZmZmZiwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwODQsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwODUsCisJMHgwMDAwZmZmZiwgLyogUEFfU0NfQ0xJUF9SRUNUX1JVTEUgKi8KKwkweDAwMDAwMDAwLCAvKiBQQV9TQ19DTElQUkVDVF8wX1RMICovCiAJMHgyMDAwMjAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwODYsCiAJMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwODcsCiAJMHgyMDAwMjAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwODgsCiAJMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwODksCiAJMHgyMDAwMjAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwOGEsCiAJMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwOGIsCiAJMHgyMDAwMjAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwOGMsCi0JMHhhYWFhYWFhYSwKLQkweGMwMDE2OTAwLAorCTB4YWFhYWFhYWEsIC8qIFBBX1NDX0VER0VSVUxFICovCisKKwkweGMwNDA2OTAwLAogCTB4MDAwMDAwOTQsCi0JMHg4MDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwOTUsCisJMHg4MDAwMDAwMCwgLyogUEFfU0NfVlBPUlRfU0NJU1NPUl8wX1RMICovCisJMHgyMDAwMjAwMCwgLyogUEFfU0NfVlBPUlRfU0NJU1NPUl8wX0JSICovCisJMHg4MDAwMDAwMCwgLyogUEFfU0NfVlBPUlRfU0NJU1NPUl8xX1RMICovCiAJMHgyMDAwMjAwMCwKLQkweGMwMDI2OTAwLAotCTB4MDAwMDAwYjQsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDAwMDAwMDAwLCAvKiBQQV9TQ19WUE9SVF9aTUlOXzAgKi8KKwkweDNmODAwMDAwLAogCTB4MDAwMDAwMDAsCiAJMHgzZjgwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwOTYsCi0JMHg4MDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwOTcsCi0JMHgyMDAwMjAwMCwKLQkweGMwMDI2OTAwLAotCTB4MDAwMDAwYjYsCiAJMHgwMDAwMDAwMCwKIAkweDNmODAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDA5OCwKLQkweDgwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDA5OSwKLQkweDIwMDAyMDAwLAotCTB4YzAwMjY5MDAsCi0JMHgwMDAwMDBiOCwKIAkweDAwMDAwMDAwLAogCTB4M2Y4MDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMDlhLAotCTB4ODAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMDliLAotCTB4MjAwMDIwMDAsCi0JMHhjMDAyNjkwMCwKLQkweDAwMDAwMGJhLAogCTB4MDAwMDAwMDAsCiAJMHgzZjgwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwOWMsCi0JMHg4MDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwOWQsCi0JMHgyMDAwMjAwMCwKLQkweGMwMDI2OTAwLAotCTB4MDAwMDAwYmMsCiAJMHgwMDAwMDAwMCwKIAkweDNmODAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDA5ZSwKLQkweDgwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDA5ZiwKLQkweDIwMDAyMDAwLAotCTB4YzAwMjY5MDAsCi0JMHgwMDAwMDBiZSwKIAkweDAwMDAwMDAwLAogCTB4M2Y4MDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMGEwLAotCTB4ODAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMGExLAotCTB4MjAwMDIwMDAsCi0JMHhjMDAyNjkwMCwKLQkweDAwMDAwMGMwLAogCTB4MDAwMDAwMDAsCiAJMHgzZjgwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwYTIsCi0JMHg4MDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwYTMsCi0JMHgyMDAwMjAwMCwKLQkweGMwMDI2OTAwLAotCTB4MDAwMDAwYzIsCiAJMHgwMDAwMDAwMCwKIAkweDNmODAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDBhNCwKLQkweDgwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDBhNSwKLQkweDIwMDAyMDAwLAotCTB4YzAwMjY5MDAsCi0JMHgwMDAwMDBjNCwKIAkweDAwMDAwMDAwLAogCTB4M2Y4MDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMGE2LAotCTB4ODAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMGE3LAotCTB4MjAwMDIwMDAsCi0JMHhjMDAyNjkwMCwKLQkweDAwMDAwMGM2LAogCTB4MDAwMDAwMDAsCiAJMHgzZjgwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwYTgsCi0JMHg4MDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwYTksCi0JMHgyMDAwMjAwMCwKLQkweGMwMDI2OTAwLAotCTB4MDAwMDAwYzgsCiAJMHgwMDAwMDAwMCwKIAkweDNmODAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDBhYSwKLQkweDgwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDBhYiwKLQkweDIwMDAyMDAwLAotCTB4YzAwMjY5MDAsCi0JMHgwMDAwMDBjYSwKIAkweDAwMDAwMDAwLAogCTB4M2Y4MDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMGFjLAotCTB4ODAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMGFkLAotCTB4MjAwMDIwMDAsCi0JMHhjMDAyNjkwMCwKLQkweDAwMDAwMGNjLAogCTB4MDAwMDAwMDAsCiAJMHgzZjgwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwYWUsCi0JMHg4MDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAwYWYsCi0JMHgyMDAwMjAwMCwKLQkweGMwMDI2OTAwLAotCTB4MDAwMDAwY2UsCiAJMHgwMDAwMDAwMCwKIAkweDNmODAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDBiMCwKLQkweDgwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDBiMSwKLQkweDIwMDAyMDAwLAotCTB4YzAwMjY5MDAsCi0JMHgwMDAwMDBkMCwKIAkweDAwMDAwMDAwLAogCTB4M2Y4MDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMGIyLAotCTB4ODAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMGIzLAotCTB4MjAwMDIwMDAsCisKIAkweGMwMDI2OTAwLAotCTB4MDAwMDAwZDIsCi0JMHgwMDAwMDAwMCwKLQkweDNmODAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDI5MywKLQkweDAwNTE0MDAwLAotCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI5MiwKKwkweDAwMDAwMDAwLCAvKiBQQV9TQ19NUEFTU19QU19DTlRMICovCisJMHgwMDUxNDAwMCwgLyogUEFfU0NfTU9ERV9DTlRMICovCisKKwkweGMwMDk2OTAwLAogCTB4MDAwMDAzMDAsCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfTElORV9DTlRMICovCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfQUFfQ09ORklHICovCisJMHgwMDAwMDAyZCwgLyogUEFfU1VfVlRYX0NOVEwgKi8KKwkweDNmODAwMDAwLCAvKiBQQV9DTF9HQl9WRVJUX0NMSVBfQURKICovCisJMHgzZjgwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfU0FNUExFX0xPQ1NfTUNUWCAqLwogCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMzAxLAotCTB4MDAwMDAwMDAsCisKIAkweGMwMDE2OTAwLAogCTB4MDAwMDAzMTIsCi0JMHhmZmZmZmZmZiwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAzMDcsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAzMDgsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyODMsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyOTIsCi0JMHgwMDAwMDAwMCwKKwkweGZmZmZmZmZmLCAvKiBQQV9TQ19BQV9NQVNLICovCisKIAkweGMwMDY2OTAwLAotCTB4MDAwMDAxMGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMjA2LAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMjA3LAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMjA4LAotCTB4MDAwMDAwMDAsCi0JMHhjMDA0NjkwMCwKLQkweDAwMDAwMzAzLAotCTB4M2Y4MDAwMDAsCi0JMHgzZjgwMDAwMCwKLQkweDNmODAwMDAwLAotCTB4M2Y4MDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMjA1LAotCTB4MDAwMDAwMDQsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMjgwLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMjgxLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKIAkweDAwMDAwMzdlLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMzgyLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMzgwLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMzgzLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMzgxLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMjgyLAotCTB4MDAwMDAwMDgsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMzAyLAotCTB4MDAwMDAwMmQsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMzdmLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMWIyLAotCTB4MDAwMDAwMDEsCi0JMHhjMDAxNjkwMCwKKwkweDAwMDAwMDAwLCAvKiBQQV9TVV9QT0xZX09GRlNFVF9EQl9GTVRfQ05UTCAqLworCTB4MDAwMDAwMDAsIC8qIFBBX1NVX1BPTFlfT0ZGU0VUX0NMQU1QICovCisJMHgwMDAwMDAwMCwgLyogUEFfU1VfUE9MWV9PRkZTRVRfRlJPTlRfU0NBTEUgKi8KKwkweDAwMDAwMDAwLCAvKiBQQV9TVV9QT0xZX09GRlNFVF9GUk9OVF9PRkZTRVQgKi8KKwkweDAwMDAwMDAwLCAvKiBQQV9TVV9QT0xZX09GRlNFVF9CQUNLX1NDQUxFICovCisJMHgwMDAwMDAwMCwgLyogUEFfU1VfUE9MWV9PRkZTRVRfQkFDS19PRkZTRVQgKi8KKworCTB4YzAwNDY5MDAsCiAJMHgwMDAwMDFiNiwKLQkweDAwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDFiNywKLQkweDAwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDFiOCwKLQkweDAwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDFiOSwKLQkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIC8qIFNQSV9JTlBVVF9aICovCisJMHgwMDAwMDAwMCwgLyogU1BJX0ZPR19DTlRMICovCisJMHgwMDAwMDAwMCwgLyogU1BJX0ZPR19GVU5DX1NDQUxFICovCisJMHgwMDAwMDAwMCwgLyogU1BJX0ZPR19GVU5DX0JJQVMgKi8KKwogCTB4YzAwMTY5MDAsCiAJMHgwMDAwMDIyNSwKLQkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIC8qIFNRX1BHTV9TVEFSVF9GUyAqLworCiAJMHhjMDAxNjkwMCwKIAkweDAwMDAwMjI5LAotCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgLyogU1FfUEdNX1JFU09VUkNFU19GUyAqLworCiAJMHhjMDAxNjkwMCwKIAkweDAwMDAwMjM3LAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMTAwLAotCTB4MDAwMDA4MDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMTAxLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMTAyLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKKwkweDAwMDAwMDAwLCAvKiBTUV9QR01fQ0ZfT0ZGU0VUX0ZTICovCisKKwkweGMwMDI2OTAwLAogCTB4MDAwMDAyYTgsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyYTksCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAxMDMsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyODQsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyOTAsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyODUsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyODYsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyODcsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyODgsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyODksCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyOGEsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyOGIsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyOGMsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyOGQsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyOGUsCi0JMHgwMDAwMDAwMCwKLQkweGMwMDE2OTAwLAotCTB4MDAwMDAyOGYsCi0JMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAvKiBWR1RfSU5TVEFOQ0VfU1RFUF9SQVRFXzAgKi8KKwkweDAwMDAwMDAwLCAvKiBWR1RfSU5TVEFOQ0VfU1RFUF9SQVRFXzEgKi8KKworCTB4YzAxMTY5MDAsCisJMHgwMDAwMDI4MCwKKwkweDAwMDAwMDAwLCAvKiBQQV9TVV9QT0lOVF9TSVpFICovCisJMHgwMDAwMDAwMCwgLyogUEFfU1VfUE9JTlRfTUlOTUFYICovCisJMHgwMDAwMDAwOCwgLyogUEFfU1VfTElORV9DTlRMICovCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfTElORV9TVElQUExFICovCisJMHgwMDAwMDAwMCwgLyogVkdUX09VVFBVVF9QQVRIX0NOVEwgKi8KKwkweDAwMDAwMDAwLCAvKiBWR1RfSE9TX0NOVEwgKi8KKwkweDAwMDAwMDAwLCAvKiBWR1RfSE9TX01BWF9URVNTX0xFVkVMICovCisJMHgwMDAwMDAwMCwgLyogVkdUX0hPU19NSU5fVEVTU19MRVZFTCAqLworCTB4MDAwMDAwMDAsIC8qIFZHVF9IT1NfUkVVU0VfREVQVEggKi8KKwkweDAwMDAwMDAwLCAvKiBWR1RfR1JPVVBfUFJJTV9UWVBFICovCisJMHgwMDAwMDAwMCwgLyogVkdUX0dST1VQX0ZJUlNUX0RFQ1IgKi8KKwkweDAwMDAwMDAwLCAvKiBWR1RfR1JPVVBfREVDUiAqLworCTB4MDAwMDAwMDAsIC8qIFZHVF9HUk9VUF9WRUNUXzBfQ05UTCAqLworCTB4MDAwMDAwMDAsIC8qIFZHVF9HUk9VUF9WRUNUXzFfQ05UTCAqLworCTB4MDAwMDAwMDAsIC8qIFZHVF9HUk9VUF9WRUNUXzBfRk1UX0NOVEwgKi8KKwkweDAwMDAwMDAwLCAvKiBWR1RfR1JPVVBfVkVDVF8xX0ZNVF9DTlRMICovCisJMHgwMDAwMDAwMCwgLyogVkdUX0dTX01PREUgKi8KKwogCTB4YzAwMTY5MDAsCiAJMHgwMDAwMDJhMSwKLQkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIC8qIFZHVF9QUklNSVRJVkVJRF9FTiAqLworCiAJMHhjMDAxNjkwMCwKIAkweDAwMDAwMmE1LAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKKwkweDAwMDAwMDAwLCAvKiBWR1RfTVVMVElfUFJJTV9JRF9SRVNFVF9FTiAqLworCisJMHhjMDAzNjkwMCwKIAkweDAwMDAwMmFjLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMmFkLAotCTB4MDAwMDAwMDAsCi0JMHhjMDAxNjkwMCwKLQkweDAwMDAwMmFlLAotCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgLyogVkdUX1NUUk1PVVRfRU4gKi8KKwkweDAwMDAwMDAwLCAvKiBWR1RfUkVVU0VfT0ZGICovCisJMHgwMDAwMDAwMCwgLyogVkdUX1ZUWF9DTlRfRU4gKi8KKwogCTB4YzAwMTY5MDAsCiAJMHgwMDAwMDJjOCwKLQkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIC8qIFZHVF9TVFJNT1VUX0JVRkZFUl9FTiAqLworCisJMHhjMDA3NjkwMCwKKwkweDAwMDAwMjAyLAorCTB4MDBjYzAwMDAsIC8qIENCX0NPTE9SX0NPTlRST0wgKi8KKwkweDAwMDAwMjEwLCAvKiBEQl9TSEFERVJfQ05UTCAqLworCTB4MDAwMTAwMDAsIC8qIFBBX0NMX0NMSVBfQ05UTCAqLworCTB4MDAwMDAyNDQsIC8qIFBBX1NVX1NDX01PREVfQ05UTCAqLworCTB4MDAwMDAxMDAsIC8qIFBBX0NMX1ZURV9DTlRMICovCisJMHgwMDAwMDAwMCwgLyogUEFfQ0xfVlNfT1VUX0NOVEwgKi8KKwkweDAwMDAwMDAwLCAvKiBQQV9DTF9OQU5JTkZfQ05UTCAqLworCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMDhlLAorCTB4MDAwMDAwMGYsIC8qIENCX1RBUkdFVF9NQVNLICovCisJMHgwMDAwMDAwZiwgLyogQ0JfU0hBREVSX01BU0sgKi8KKwogCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDIwNiwKLQkweDAwMDAwMTAwLAorCTB4MDAwMDAxZTgsCisJMHgwMDAwMDAwMSwgLyogQ0JfU0hBREVSX0NPTlRST0wgKi8KKwogCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDIwNCwKLQkweDAwMDEwMDAwLAotCTB4YzAwMzZlMDAsCisJMHgwMDAwMDE4NSwKKwkweDAwMDAwMDAwLCAvKiBTUElfVlNfT1VUX0lEXzAgKi8KKworCTB4YzAwMTY5MDAsCisJMHgwMDAwMDE5MSwKKwkweDAwMDAwYjAwLCAvKiBTUElfUFNfSU5QVVRfQ05UTF8wICovCisKKwkweGMwMDU2OTAwLAorCTB4MDAwMDAxYjEsCisJMHgwMDAwMDAwMCwgLyogU1BJX1ZTX09VVF9DT05GSUcgKi8KKwkweDAwMDAwMDAxLCAvKiBTUElfVEhSRUFEX0dST1VQSU5HICovCisJMHgwMDAwMDAwMSwgLyogU1BJX1BTX0lOX0NPTlRST0xfMCAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9QU19JTl9DT05UUk9MXzEgKi8KKwkweDAwMDAwMDAwLCAvKiBTUElfSU5URVJQX0NPTlRST0xfMCAqLworCisJMHhjMDAzNmUwMCwgLyogU0VUX1NBTVBMRVIgKi8KIAkweDAwMDAwMDAwLAogCTB4MDAwMDAwMTIsCiAJMHgwMDAwMDAwMCwKIAkweDAwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDA4ZiwKLQkweDAwMDAwMDBmLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDFlOCwKLQkweDAwMDAwMDAxLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDIwMiwKLQkweDAwY2MwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDIwNSwKLQkweDAwMDAwMjQ0LAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDIwMywKLQkweDAwMDAwMjEwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDFiMSwKLQkweDAwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDE4NSwKLQkweDAwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDFiMywKLQkweDAwMDAwMDAxLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDFiNCwKLQkweDAwMDAwMDAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDE5MSwKLQkweDAwMDAwYjAwLAotCTB4YzAwMTY5MDAsCi0JMHgwMDAwMDFiNSwKLQkweDAwMDAwMDAwLAogfTsKIAogLyogc2FtZSBmb3IgcjZ4eC9yN3h4ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCmluZGV4IGMzOWMxYmMuLmMzZWEyMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCkBAIC0yNSw2ICsyNSw3IEBACiAgKiAgICAgICAgICBBbGV4IERldWNoZXIKICAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKICAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJyYWRlb24uaCIKICNpbmNsdWRlICJyNjAwZC5oIgpAQCAtMTY2LDcgKzE2Nyw3IEBACiBzdGF0aWMgaW5saW5lIGludCByNjAwX2NzX3RyYWNrX3ZhbGlkYXRlX2NiKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLCBpbnQgaSkKIHsKIAlzdHJ1Y3QgcjYwMF9jc190cmFjayAqdHJhY2sgPSBwLT50cmFjazsKLQl1MzIgYnBlID0gMCwgcGl0Y2gsIHNsaWNlX3RpbGVfbWF4LCBzaXplLCB0bXAsIGhlaWdodDsKKwl1MzIgYnBlID0gMCwgcGl0Y2gsIHNsaWNlX3RpbGVfbWF4LCBzaXplLCB0bXAsIGhlaWdodCwgcGl0Y2hfYWxpZ247CiAJdm9sYXRpbGUgdTMyICppYiA9IHAtPmliLT5wdHI7CiAKIAlpZiAoR18wMjgwQTBfVElMRV9NT0RFKHRyYWNrLT5jYl9jb2xvcl9pbmZvW2ldKSkgewpAQCAtMTgwLDU2ICsxODEsNTcgQEAKIAkJCWksIHRyYWNrLT5jYl9jb2xvcl9pbmZvW2ldKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXBpdGNoID0gKEdfMDI4MDYwX1BJVENIX1RJTEVfTUFYKHRyYWNrLT5jYl9jb2xvcl9zaXplW2ldKSArIDEpIDw8IDM7CisJLyogcGl0Y2ggaXMgdGhlIG51bWJlciBvZiA4eDggdGlsZXMgcGVyIHJvdyAqLworCXBpdGNoID0gR18wMjgwNjBfUElUQ0hfVElMRV9NQVgodHJhY2stPmNiX2NvbG9yX3NpemVbaV0pICsgMTsKIAlzbGljZV90aWxlX21heCA9IEdfMDI4MDYwX1NMSUNFX1RJTEVfTUFYKHRyYWNrLT5jYl9jb2xvcl9zaXplW2ldKSArIDE7Ci0JaWYgKCFwaXRjaCkgewotCQlkZXZfd2FybihwLT5kZXYsICIlczolZCBjYiBwaXRjaCAoJWQpIGZvciAlZCBpbnZhbGlkICgweCUwOFgpXG4iLAotCQkJX19mdW5jX18sIF9fTElORV9fLCBwaXRjaCwgaSwgdHJhY2stPmNiX2NvbG9yX3NpemVbaV0pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaGVpZ2h0ID0gc2l6ZSAvIChwaXRjaCAqIGJwZSk7CisJaGVpZ2h0ID0gc2l6ZSAvIChwaXRjaCAqIDggKiBicGUpOwogCWlmIChoZWlnaHQgPiA4MTkyKQogCQloZWlnaHQgPSA4MTkyOworCWlmIChoZWlnaHQgPiA3KQorCQloZWlnaHQgJj0gfjB4NzsKIAlzd2l0Y2ggKEdfMDI4MEEwX0FSUkFZX01PREUodHJhY2stPmNiX2NvbG9yX2luZm9baV0pKSB7CiAJY2FzZSBWXzAyODBBMF9BUlJBWV9MSU5FQVJfR0VORVJBTDoKKwkJLyogdGVjaG5pY2FsbHkgaGVpZ2h0ICYgMHg3ICovCisJCWJyZWFrOwogCWNhc2UgVl8wMjgwQTBfQVJSQVlfTElORUFSX0FMSUdORUQ6Ci0JCWlmIChwaXRjaCAmIDB4M2YpIHsKLQkJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIGNiIHBpdGNoICglZCB4ICVkID0gJWQpIGludmFsaWRcbiIsCi0JCQkJX19mdW5jX18sIF9fTElORV9fLCBwaXRjaCwgYnBlLCBwaXRjaCAqIGJwZSk7CisJCXBpdGNoX2FsaWduID0gbWF4KCh1MzIpNjQsICh1MzIpKHRyYWNrLT5ncm91cF9zaXplIC8gYnBlKSkgLyA4OworCQlpZiAoIUlTX0FMSUdORUQocGl0Y2gsIHBpdGNoX2FsaWduKSkgeworCQkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgY2IgcGl0Y2ggKCVkKSBpbnZhbGlkXG4iLAorCQkJCSBfX2Z1bmNfXywgX19MSU5FX18sIHBpdGNoKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWlmICgocGl0Y2ggKiBicGUpICYgKHRyYWNrLT5ncm91cF9zaXplIC0gMSkpIHsKLQkJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIGNiIHBpdGNoICglZCkgaW52YWxpZFxuIiwKLQkJCQlfX2Z1bmNfXywgX19MSU5FX18sIHBpdGNoKTsKKwkJaWYgKCFJU19BTElHTkVEKGhlaWdodCwgOCkpIHsKKwkJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIGNiIGhlaWdodCAoJWQpIGludmFsaWRcbiIsCisJCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgaGVpZ2h0KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgVl8wMjgwQTBfQVJSQVlfMURfVElMRURfVEhJTjE6Ci0JCWlmICgocGl0Y2ggKiA4ICogYnBlICogdHJhY2stPm5zYW1wbGVzKSAmICh0cmFjay0+Z3JvdXBfc2l6ZSAtIDEpKSB7CisJCXBpdGNoX2FsaWduID0gbWF4KCh1MzIpOCwgKHUzMikodHJhY2stPmdyb3VwX3NpemUgLyAoOCAqIGJwZSAqIHRyYWNrLT5uc2FtcGxlcykpKSAvIDg7CisJCWlmICghSVNfQUxJR05FRChwaXRjaCwgcGl0Y2hfYWxpZ24pKSB7CiAJCQlkZXZfd2FybihwLT5kZXYsICIlczolZCBjYiBwaXRjaCAoJWQpIGludmFsaWRcbiIsCi0JCQkJX19mdW5jX18sIF9fTElORV9fLCBwaXRjaCk7CisJCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgcGl0Y2gpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaGVpZ2h0ICY9IH4weDc7Ci0JCWlmICghaGVpZ2h0KQotCQkJaGVpZ2h0ID0gODsKKwkJaWYgKCFJU19BTElHTkVEKGhlaWdodCwgOCkpIHsKKwkJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIGNiIGhlaWdodCAoJWQpIGludmFsaWRcbiIsCisJCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgaGVpZ2h0KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJCWJyZWFrOwogCWNhc2UgVl8wMjgwQTBfQVJSQVlfMkRfVElMRURfVEhJTjE6Ci0JCWlmIChwaXRjaCAmICgoOCAqIHRyYWNrLT5uYmFua3MpIC0gMSkpIHsKKwkJcGl0Y2hfYWxpZ24gPSBtYXgoKHUzMil0cmFjay0+bmJhbmtzLAorCQkJCSAgKHUzMikoKCh0cmFjay0+Z3JvdXBfc2l6ZSAvIDgpIC8gKGJwZSAqIHRyYWNrLT5uc2FtcGxlcykpICogdHJhY2stPm5iYW5rcykpOworCQlpZiAoIUlTX0FMSUdORUQocGl0Y2gsIHBpdGNoX2FsaWduKSkgewogCQkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgY2IgcGl0Y2ggKCVkKSBpbnZhbGlkXG4iLAogCQkJCV9fZnVuY19fLCBfX0xJTkVfXywgcGl0Y2gpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJdG1wID0gcGl0Y2ggKiA4ICogYnBlICogdHJhY2stPm5zYW1wbGVzOwotCQl0bXAgPSB0bXAgLyB0cmFjay0+bmJhbmtzOwotCQlpZiAodG1wICYgKHRyYWNrLT5ncm91cF9zaXplIC0gMSkpIHsKLQkJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIGNiIHBpdGNoICglZCkgaW52YWxpZFxuIiwKLQkJCQlfX2Z1bmNfXywgX19MSU5FX18sIHBpdGNoKTsKKwkJaWYgKCFJU19BTElHTkVEKChoZWlnaHQgLyA4KSwgdHJhY2stPm5iYW5rcykpIHsKKwkJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIGNiIGhlaWdodCAoJWQpIGludmFsaWRcbiIsCisJCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgaGVpZ2h0KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWhlaWdodCAmPSB+KCgxNiAqIHRyYWNrLT5ucGlwZXMpIC0gMSk7Ci0JCWlmICghaGVpZ2h0KQotCQkJaGVpZ2h0ID0gMTYgKiB0cmFjay0+bnBpcGVzOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfd2FybihwLT5kZXYsICIlcyBpbnZhbGlkIHRpbGluZyAlZCBmb3IgJWQgKDB4JTA4WClcbiIsIF9fZnVuY19fLApAQCAtMjM4LDE2ICsyNDAsMjAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCS8qIGNoZWNrIG9mZnNldCAqLwotCXRtcCA9IGhlaWdodCAqIHBpdGNoOworCXRtcCA9IGhlaWdodCAqIHBpdGNoICogOCAqIGJwZTsKIAlpZiAoKHRtcCArIHRyYWNrLT5jYl9jb2xvcl9ib19vZmZzZXRbaV0pID4gcmFkZW9uX2JvX3NpemUodHJhY2stPmNiX2NvbG9yX2JvW2ldKSkgewotCQlkZXZfd2FybihwLT5kZXYsICIlcyBvZmZzZXRbJWRdICVkIHRvIGJpZ1xuIiwgX19mdW5jX18sIGksIHRyYWNrLT5jYl9jb2xvcl9ib19vZmZzZXRbaV0pOworCQlkZXZfd2FybihwLT5kZXYsICIlcyBvZmZzZXRbJWRdICVkIHRvbyBiaWdcbiIsIF9fZnVuY19fLCBpLCB0cmFjay0+Y2JfY29sb3JfYm9fb2Zmc2V0W2ldKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICghSVNfQUxJR05FRCh0cmFjay0+Y2JfY29sb3JfYm9fb2Zmc2V0W2ldLCB0cmFjay0+Z3JvdXBfc2l6ZSkpIHsKKwkJZGV2X3dhcm4ocC0+ZGV2LCAiJXMgb2Zmc2V0WyVkXSAlZCBub3QgYWxpZ25lZFxuIiwgX19mdW5jX18sIGksIHRyYWNrLT5jYl9jb2xvcl9ib19vZmZzZXRbaV0pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJLyogbGltaXQgbWF4IHRpbGUgKi8KLQl0bXAgPSAoaGVpZ2h0ICogcGl0Y2gpID4+IDY7CisJdG1wID0gKGhlaWdodCAqIHBpdGNoICogOCkgPj4gNjsKIAlpZiAodG1wIDwgc2xpY2VfdGlsZV9tYXgpCiAJCXNsaWNlX3RpbGVfbWF4ID0gdG1wOwotCXRtcCA9IFNfMDI4MDYwX1BJVENIX1RJTEVfTUFYKChwaXRjaCA+PiAzKSAtIDEpIHwKKwl0bXAgPSBTXzAyODA2MF9QSVRDSF9USUxFX01BWChwaXRjaCAtIDEpIHwKIAkJU18wMjgwNjBfU0xJQ0VfVElMRV9NQVgoc2xpY2VfdGlsZV9tYXggLSAxKTsKIAlpYlt0cmFjay0+Y2JfY29sb3Jfc2l6ZV9pZHhbaV1dID0gdG1wOwogCXJldHVybiAwOwpAQCAtMjg5LDcgKzI5NSw3IEBACiAJLyogQ2hlY2sgZGVwdGggYnVmZmVyICovCiAJaWYgKEdfMDI4ODAwX1NURU5DSUxfRU5BQkxFKHRyYWNrLT5kYl9kZXB0aF9jb250cm9sKSB8fAogCQlHXzAyODgwMF9aX0VOQUJMRSh0cmFjay0+ZGJfZGVwdGhfY29udHJvbCkpIHsKLQkJdTMyIG52aWV3cywgYnBlLCBudGlsZXM7CisJCXUzMiBudmlld3MsIGJwZSwgbnRpbGVzLCBwaXRjaCwgcGl0Y2hfYWxpZ24sIGhlaWdodCwgc2l6ZTsKIAkJaWYgKHRyYWNrLT5kYl9ibyA9PSBOVUxMKSB7CiAJCQlkZXZfd2FybihwLT5kZXYsICJ6L3N0ZW5jaWwgd2l0aCBubyBkZXB0aCBidWZmZXJcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMzIsNiArMzM4LDUxIEBACiAJCQl9CiAJCQlpYlt0cmFjay0+ZGJfZGVwdGhfc2l6ZV9pZHhdID0gU18wMjgwMDBfU0xJQ0VfVElMRV9NQVgodG1wIC0gMSkgfCAodHJhY2stPmRiX2RlcHRoX3NpemUgJiAweDNGRik7CiAJCX0gZWxzZSB7CisJCQlzaXplID0gcmFkZW9uX2JvX3NpemUodHJhY2stPmRiX2JvKTsKKwkJCXBpdGNoID0gR18wMjgwMDBfUElUQ0hfVElMRV9NQVgodHJhY2stPmRiX2RlcHRoX3NpemUpICsgMTsKKwkJCWhlaWdodCA9IHNpemUgLyAocGl0Y2ggKiA4ICogYnBlKTsKKwkJCWhlaWdodCAmPSB+MHg3OworCQkJaWYgKCFoZWlnaHQpCisJCQkJaGVpZ2h0ID0gODsKKworCQkJc3dpdGNoIChHXzAyODAxMF9BUlJBWV9NT0RFKHRyYWNrLT5kYl9kZXB0aF9pbmZvKSkgeworCQkJY2FzZSBWXzAyODAxMF9BUlJBWV8xRF9USUxFRF9USElOMToKKwkJCQlwaXRjaF9hbGlnbiA9IChtYXgoKHUzMik4LCAodTMyKSh0cmFjay0+Z3JvdXBfc2l6ZSAvICg4ICogYnBlKSkpIC8gOCk7CisJCQkJaWYgKCFJU19BTElHTkVEKHBpdGNoLCBwaXRjaF9hbGlnbikpIHsKKwkJCQkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgZGIgcGl0Y2ggKCVkKSBpbnZhbGlkXG4iLAorCQkJCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgcGl0Y2gpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CisJCQkJaWYgKCFJU19BTElHTkVEKGhlaWdodCwgOCkpIHsKKwkJCQkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgZGIgaGVpZ2h0ICglZCkgaW52YWxpZFxuIiwKKwkJCQkJCSBfX2Z1bmNfXywgX19MSU5FX18sIGhlaWdodCk7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgVl8wMjgwMTBfQVJSQVlfMkRfVElMRURfVEhJTjE6CisJCQkJcGl0Y2hfYWxpZ24gPSBtYXgoKHUzMil0cmFjay0+bmJhbmtzLAorCQkJCQkJICAodTMyKSgoKHRyYWNrLT5ncm91cF9zaXplIC8gOCkgLyBicGUpICogdHJhY2stPm5iYW5rcykpOworCQkJCWlmICghSVNfQUxJR05FRChwaXRjaCwgcGl0Y2hfYWxpZ24pKSB7CisJCQkJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIGRiIHBpdGNoICglZCkgaW52YWxpZFxuIiwKKwkJCQkJCSBfX2Z1bmNfXywgX19MSU5FX18sIHBpdGNoKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCQkJCWlmICgoaGVpZ2h0IC8gOCkgJiAodHJhY2stPm5iYW5rcyAtIDEpKSB7CisJCQkJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIGRiIGhlaWdodCAoJWQpIGludmFsaWRcbiIsCisJCQkJCQkgX19mdW5jX18sIF9fTElORV9fLCBoZWlnaHQpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWRldl93YXJuKHAtPmRldiwgIiVzIGludmFsaWQgdGlsaW5nICVkICgweCUwOFgpXG4iLCBfX2Z1bmNfXywKKwkJCQkJIEdfMDI4MDEwX0FSUkFZX01PREUodHJhY2stPmRiX2RlcHRoX2luZm8pLAorCQkJCQkgdHJhY2stPmRiX2RlcHRoX2luZm8pOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJaWYgKCFJU19BTElHTkVEKHRyYWNrLT5kYl9vZmZzZXQsIHRyYWNrLT5ncm91cF9zaXplKSkgeworCQkJCWRldl93YXJuKHAtPmRldiwgIiVzIG9mZnNldFslZF0gJWQgbm90IGFsaWduZWRcbiIsIF9fZnVuY19fLCBpLCB0cmFjay0+ZGJfb2Zmc2V0KTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KIAkJCW50aWxlcyA9IEdfMDI4MDAwX1NMSUNFX1RJTEVfTUFYKHRyYWNrLT5kYl9kZXB0aF9zaXplKSArIDE7CiAJCQludmlld3MgPSBHXzAyODAwNF9TTElDRV9NQVgodHJhY2stPmRiX2RlcHRoX3ZpZXcpICsgMTsKIAkJCXRtcCA9IG50aWxlcyAqIGJwZSAqIDY0ICogbnZpZXdzOwpAQCAtNTg1LDcgKzYzNiw3IEBACiAJaGVhZGVyID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBoX2lkeCk7CiAJY3J0Y19pZCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaF9pZHggKyAyICsgNyArIDEpOwogCXJlZyA9IENQX1BBQ0tFVDBfR0VUX1JFRyhoZWFkZXIpOwotCW11dGV4X2xvY2soJnAtPnJkZXYtPmRkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwogCW9iaiA9IGRybV9tb2RlX29iamVjdF9maW5kKHAtPnJkZXYtPmRkZXYsIGNydGNfaWQsIERSTV9NT0RFX09CSkVDVF9DUlRDKTsKIAlpZiAoIW9iaikgewogCQlEUk1fRVJST1IoImNhbm5vdCBmaW5kIGNydGMgJWRcbiIsIGNydGNfaWQpOwpAQCAtNjIwLDcgKzY3MSw2IEBACiAJCWliW2hfaWR4ICsgNF0gPSBBVklWT19EMk1PREVfVkxJTkVfU1RBVFVTID4+IDI7CiAJfQogb3V0OgotCW11dGV4X3VubG9jaygmcC0+cmRldi0+ZGRldi0+bW9kZV9jb25maWcubXV0ZXgpOwogCXJldHVybiByOwogfQogCkBAIC03MjUsNyArNzc1LDI1IEBACiAJCXRyYWNrLT5kYl9kZXB0aF9jb250cm9sID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOwogCQlicmVhazsKIAljYXNlIFJfMDI4MDEwX0RCX0RFUFRIX0lORk86Ci0JCXRyYWNrLT5kYl9kZXB0aF9pbmZvID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOworCQlpZiAocjYwMF9jc19wYWNrZXRfbmV4dF9pc19wa3QzX25vcChwKSkgeworCQkJciA9IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwkJCWlmIChyKSB7CisJCQkJZGV2X3dhcm4ocC0+ZGV2LCAiYmFkIFNFVF9DT05URVhUX1JFRyAiCisJCQkJCSAiMHglMDRYXG4iLCByZWcpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJdHJhY2stPmRiX2RlcHRoX2luZm8gPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCk7CisJCQlpYltpZHhdICY9IENfMDI4MDEwX0FSUkFZX01PREU7CisJCQl0cmFjay0+ZGJfZGVwdGhfaW5mbyAmPSBDXzAyODAxMF9BUlJBWV9NT0RFOworCQkJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUFDUk8pIHsKKwkJCQlpYltpZHhdIHw9IFNfMDI4MDEwX0FSUkFZX01PREUoVl8wMjgwMTBfQVJSQVlfMkRfVElMRURfVEhJTjEpOworCQkJCXRyYWNrLT5kYl9kZXB0aF9pbmZvIHw9IFNfMDI4MDEwX0FSUkFZX01PREUoVl8wMjgwMTBfQVJSQVlfMkRfVElMRURfVEhJTjEpOworCQkJfSBlbHNlIHsKKwkJCQlpYltpZHhdIHw9IFNfMDI4MDEwX0FSUkFZX01PREUoVl8wMjgwMTBfQVJSQVlfMURfVElMRURfVEhJTjEpOworCQkJCXRyYWNrLT5kYl9kZXB0aF9pbmZvIHw9IFNfMDI4MDEwX0FSUkFZX01PREUoVl8wMjgwMTBfQVJSQVlfMURfVElMRURfVEhJTjEpOworCQkJfQorCQl9IGVsc2UKKwkJCXRyYWNrLT5kYl9kZXB0aF9pbmZvID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOwogCQlicmVhazsKIAljYXNlIFJfMDI4MDA0X0RCX0RFUFRIX1ZJRVc6CiAJCXRyYWNrLT5kYl9kZXB0aF92aWV3ID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOwpAQCAtNzU4LDggKzgyNiwyNSBAQAogCWNhc2UgUl8wMjgwQjRfQ0JfQ09MT1I1X0lORk86CiAJY2FzZSBSXzAyODBCOF9DQl9DT0xPUjZfSU5GTzoKIAljYXNlIFJfMDI4MEJDX0NCX0NPTE9SN19JTkZPOgotCQl0bXAgPSAocmVnIC0gUl8wMjgwQTBfQ0JfQ09MT1IwX0lORk8pIC8gNDsKLQkJdHJhY2stPmNiX2NvbG9yX2luZm9bdG1wXSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKKwkJaWYgKHI2MDBfY3NfcGFja2V0X25leHRfaXNfcGt0M19ub3AocCkpIHsKKwkJCXIgPSByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCQlpZiAocikgeworCQkJCWRldl9lcnIocC0+ZGV2LCAiYmFkIFNFVF9DT05URVhUX1JFRyAweCUwNFhcbiIsIHJlZyk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQl0bXAgPSAocmVnIC0gUl8wMjgwQTBfQ0JfQ09MT1IwX0lORk8pIC8gNDsKKwkJCXRyYWNrLT5jYl9jb2xvcl9pbmZvW3RtcF0gPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCk7CisJCQlpZiAocmVsb2MtPmxvYmoudGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NQUNSTykgeworCQkJCWliW2lkeF0gfD0gU18wMjgwQTBfQVJSQVlfTU9ERShWXzAyODBBMF9BUlJBWV8yRF9USUxFRF9USElOMSk7CisJCQkJdHJhY2stPmNiX2NvbG9yX2luZm9bdG1wXSB8PSBTXzAyODBBMF9BUlJBWV9NT0RFKFZfMDI4MEEwX0FSUkFZXzJEX1RJTEVEX1RISU4xKTsKKwkJCX0gZWxzZSBpZiAocmVsb2MtPmxvYmoudGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NSUNSTykgeworCQkJCWliW2lkeF0gfD0gU18wMjgwQTBfQVJSQVlfTU9ERShWXzAyODBBMF9BUlJBWV8xRF9USUxFRF9USElOMSk7CisJCQkJdHJhY2stPmNiX2NvbG9yX2luZm9bdG1wXSB8PSBTXzAyODBBMF9BUlJBWV9NT0RFKFZfMDI4MEEwX0FSUkFZXzFEX1RJTEVEX1RISU4xKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXRtcCA9IChyZWcgLSBSXzAyODBBMF9DQl9DT0xPUjBfSU5GTykgLyA0OworCQkJdHJhY2stPmNiX2NvbG9yX2luZm9bdG1wXSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKKwkJfQogCQlicmVhazsKIAljYXNlIFJfMDI4MDYwX0NCX0NPTE9SMF9TSVpFOgogCWNhc2UgUl8wMjgwNjRfQ0JfQ09MT1IxX1NJWkU6CkBAIC05NDcsOCArMTAzMiw5IEBACiB9CiAKIHN0YXRpYyB2b2lkIHI2MDBfdGV4dHVyZV9zaXplKHVuc2lnbmVkIG5mYWNlcywgdW5zaWduZWQgYmxldmVsLCB1bnNpZ25lZCBubGV2ZWxzLAotCQkJCXVuc2lnbmVkIHcwLCB1bnNpZ25lZCBoMCwgdW5zaWduZWQgZDAsIHVuc2lnbmVkIGJwZSwKLQkJCQl1bnNpZ25lZCAqbDBfc2l6ZSwgdW5zaWduZWQgKm1pcG1hcF9zaXplKQorCQkJICAgICAgdW5zaWduZWQgdzAsIHVuc2lnbmVkIGgwLCB1bnNpZ25lZCBkMCwgdW5zaWduZWQgYnBlLAorCQkJICAgICAgdW5zaWduZWQgcGl0Y2hfYWxpZ24sCisJCQkgICAgICB1bnNpZ25lZCAqbDBfc2l6ZSwgdW5zaWduZWQgKm1pcG1hcF9zaXplKQogewogCXVuc2lnbmVkIG9mZnNldCwgaSwgbGV2ZWwsIGZhY2U7CiAJdW5zaWduZWQgd2lkdGgsIGhlaWdodCwgZGVwdGgsIHJvd3N0cmlkZSwgc2l6ZTsKQEAgLTk2MSwxMyArMTA0NywxMyBAQAogCQloZWlnaHQgPSBtaW5pZnkoaDAsIGkpOwogCQlkZXB0aCA9IG1pbmlmeShkMCwgaSk7CiAJCWZvcihmYWNlID0gMDsgZmFjZSA8IG5mYWNlczsgZmFjZSsrKSB7Ci0JCQlyb3dzdHJpZGUgPSAoKHdpZHRoICogYnBlKSArIDI1NSkgJiB+MjU1OworCQkJcm93c3RyaWRlID0gQUxJR04oKHdpZHRoICogYnBlKSwgcGl0Y2hfYWxpZ24pOwogCQkJc2l6ZSA9IGhlaWdodCAqIHJvd3N0cmlkZSAqIGRlcHRoOwogCQkJb2Zmc2V0ICs9IHNpemU7CiAJCQlvZmZzZXQgPSAob2Zmc2V0ICsgMHgxZikgJiB+MHgxZjsKIAkJfQogCX0KLQkqbDBfc2l6ZSA9ICgoKHcwICogYnBlKSArIDI1NSkgJiB+MjU1KSAqIGgwICogZDA7CisJKmwwX3NpemUgPSBBTElHTigodzAgKiBicGUpLCBwaXRjaF9hbGlnbikgKiBoMCAqIGQwOwogCSptaXBtYXBfc2l6ZSA9IG9mZnNldDsKIAlpZiAoIWJsZXZlbCkKIAkJKm1pcG1hcF9zaXplIC09ICpsMF9zaXplOwpAQCAtOTg2LDE2ICsxMDcyLDIzIEBACiAgKiB0aGUgdGV4dHVyZSBhbmQgbWlwbWFwIGJvIG9iamVjdCBhcmUgYmlnIGVub3VnaCB0byBjb3ZlciB0aGlzIHJlc291cmNlLgogICovCiBzdGF0aWMgaW5saW5lIGludCByNjAwX2NoZWNrX3RleHR1cmVfcmVzb3VyY2Uoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsICB1MzIgaWR4LAotCQkJCQkJc3RydWN0IHJhZGVvbl9ibyAqdGV4dHVyZSwKLQkJCQkJCXN0cnVjdCByYWRlb25fYm8gKm1pcG1hcCkKKwkJCQkJICAgICAgc3RydWN0IHJhZGVvbl9ibyAqdGV4dHVyZSwKKwkJCQkJICAgICAgc3RydWN0IHJhZGVvbl9ibyAqbWlwbWFwLAorCQkJCQkgICAgICB1MzIgdGlsaW5nX2ZsYWdzKQogeworCXN0cnVjdCByNjAwX2NzX3RyYWNrICp0cmFjayA9IHAtPnRyYWNrOwogCXUzMiBuZmFjZXMsIG5sZXZlbHMsIGJsZXZlbCwgdzAsIGgwLCBkMCwgYnBlID0gMDsKLQl1MzIgd29yZDAsIHdvcmQxLCBsMF9zaXplLCBtaXBtYXBfc2l6ZTsKKwl1MzIgd29yZDAsIHdvcmQxLCBsMF9zaXplLCBtaXBtYXBfc2l6ZSwgcGl0Y2gsIHBpdGNoX2FsaWduOwogCiAJLyogb24gbGVnYWN5IGtlcm5lbCB3ZSBkb24ndCBwZXJmb3JtIGFkdmFuY2VkIGNoZWNrICovCiAJaWYgKHAtPnJkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CisKIAl3b3JkMCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMCk7CisJaWYgKHRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUFDUk8pCisJCXdvcmQwIHw9IFNfMDM4MDAwX1RJTEVfTU9ERShWXzAzODAwMF9BUlJBWV8yRF9USUxFRF9USElOMSk7CisJZWxzZSBpZiAodGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NSUNSTykKKwkJd29yZDAgfD0gU18wMzgwMDBfVElMRV9NT0RFKFZfMDM4MDAwX0FSUkFZXzFEX1RJTEVEX1RISU4xKTsKIAl3b3JkMSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSk7CiAJdzAgPSBHXzAzODAwMF9URVhfV0lEVEgod29yZDApICsgMTsKIAloMCA9IEdfMDM4MDA0X1RFWF9IRUlHSFQod29yZDEpICsgMTsKQEAgLTEwMjIsMTEgKzExMTUsNTUgQEAKIAkJCSBfX2Z1bmNfXywgX19MSU5FX18sIEdfMDM4MDA0X0RBVEFfRk9STUFUKHdvcmQxKSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKworCXBpdGNoID0gR18wMzgwMDBfUElUQ0god29yZDApICsgMTsKKwlzd2l0Y2ggKEdfMDM4MDAwX1RJTEVfTU9ERSh3b3JkMCkpIHsKKwljYXNlIFZfMDM4MDAwX0FSUkFZX0xJTkVBUl9HRU5FUkFMOgorCQlwaXRjaF9hbGlnbiA9IDE7CisJCS8qIFhYWCBjaGVjayBoZWlnaHQgYWxpZ24gKi8KKwkJYnJlYWs7CisJY2FzZSBWXzAzODAwMF9BUlJBWV9MSU5FQVJfQUxJR05FRDoKKwkJcGl0Y2hfYWxpZ24gPSBtYXgoKHUzMik2NCwgKHUzMikodHJhY2stPmdyb3VwX3NpemUgLyBicGUpKSAvIDg7CisJCWlmICghSVNfQUxJR05FRChwaXRjaCwgcGl0Y2hfYWxpZ24pKSB7CisJCQlkZXZfd2FybihwLT5kZXYsICIlczolZCB0ZXggcGl0Y2ggKCVkKSBpbnZhbGlkXG4iLAorCQkJCSBfX2Z1bmNfXywgX19MSU5FX18sIHBpdGNoKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCS8qIFhYWCBjaGVjayBoZWlnaHQgYWxpZ24gKi8KKwkJYnJlYWs7CisJY2FzZSBWXzAzODAwMF9BUlJBWV8xRF9USUxFRF9USElOMToKKwkJcGl0Y2hfYWxpZ24gPSBtYXgoKHUzMik4LCAodTMyKSh0cmFjay0+Z3JvdXBfc2l6ZSAvICg4ICogYnBlKSkpIC8gODsKKwkJaWYgKCFJU19BTElHTkVEKHBpdGNoLCBwaXRjaF9hbGlnbikpIHsKKwkJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIHRleCBwaXRjaCAoJWQpIGludmFsaWRcbiIsCisJCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgcGl0Y2gpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJLyogWFhYIGNoZWNrIGhlaWdodCBhbGlnbiAqLworCQlicmVhazsKKwljYXNlIFZfMDM4MDAwX0FSUkFZXzJEX1RJTEVEX1RISU4xOgorCQlwaXRjaF9hbGlnbiA9IG1heCgodTMyKXRyYWNrLT5uYmFua3MsCisJCQkJICAodTMyKSgoKHRyYWNrLT5ncm91cF9zaXplIC8gOCkgLyBicGUpICogdHJhY2stPm5iYW5rcykpOworCQlpZiAoIUlTX0FMSUdORUQocGl0Y2gsIHBpdGNoX2FsaWduKSkgeworCQkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgdGV4IHBpdGNoICglZCkgaW52YWxpZFxuIiwKKwkJCQlfX2Z1bmNfXywgX19MSU5FX18sIHBpdGNoKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCS8qIFhYWCBjaGVjayBoZWlnaHQgYWxpZ24gKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4ocC0+ZGV2LCAiJXMgaW52YWxpZCB0aWxpbmcgJWQgKDB4JTA4WClcbiIsIF9fZnVuY19fLAorCQkJIEdfMDM4MDAwX1RJTEVfTU9ERSh3b3JkMCksIHdvcmQwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qIFhYWCBjaGVjayBvZmZzZXQgYWxpZ24gKi8KKwogCXdvcmQwID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHggKyA0KTsKIAl3b3JkMSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgNSk7CiAJYmxldmVsID0gR18wMzgwMTBfQkFTRV9MRVZFTCh3b3JkMCk7CiAJbmxldmVscyA9IEdfMDM4MDE0X0xBU1RfTEVWRUwod29yZDEpOwotCXI2MDBfdGV4dHVyZV9zaXplKG5mYWNlcywgYmxldmVsLCBubGV2ZWxzLCB3MCwgaDAsIGQwLCBicGUsICZsMF9zaXplLCAmbWlwbWFwX3NpemUpOworCXI2MDBfdGV4dHVyZV9zaXplKG5mYWNlcywgYmxldmVsLCBubGV2ZWxzLCB3MCwgaDAsIGQwLCBicGUsCisJCQkgIChwaXRjaF9hbGlnbiAqIGJwZSksCisJCQkgICZsMF9zaXplLCAmbWlwbWFwX3NpemUpOwogCS8qIHVzaW5nIGdldCBpYiB3aWxsIGdpdmUgdXMgdGhlIG9mZnNldCBpbnRvIHRoZSB0ZXh0dXJlIGJvICovCiAJd29yZDAgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDIpOwogCWlmICgobDBfc2l6ZSArIHdvcmQwKSA+IHJhZGVvbl9ib19zaXplKHRleHR1cmUpKSB7CkBAIC0xMjQwLDYgKzEzNzcsMTAgQEAKIAkJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQkJfQogCQkJCWliW2lkeCsxKyhpKjcpKzJdICs9ICh1MzIpKChyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ID4+IDgpICYgMHhmZmZmZmZmZik7CisJCQkJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUFDUk8pCisJCQkJCWliW2lkeCsxKyhpKjcpKzBdIHw9IFNfMDM4MDAwX1RJTEVfTU9ERShWXzAzODAwMF9BUlJBWV8yRF9USUxFRF9USElOMSk7CisJCQkJZWxzZSBpZiAocmVsb2MtPmxvYmoudGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NSUNSTykKKwkJCQkJaWJbaWR4KzErKGkqNykrMF0gfD0gU18wMzgwMDBfVElMRV9NT0RFKFZfMDM4MDAwX0FSUkFZXzFEX1RJTEVEX1RISU4xKTsKIAkJCQl0ZXh0dXJlID0gcmVsb2MtPnJvYmo7CiAJCQkJLyogdGV4IG1pcCBiYXNlICovCiAJCQkJciA9IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKQEAgLTEyNTAsNyArMTM5MSw3IEBACiAJCQkJaWJbaWR4KzErKGkqNykrM10gKz0gKHUzMikoKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQgPj4gOCkgJiAweGZmZmZmZmZmKTsKIAkJCQltaXBtYXAgPSByZWxvYy0+cm9iajsKIAkJCQlyID0gcjYwMF9jaGVja190ZXh0dXJlX3Jlc291cmNlKHAsICBpZHgrKGkqNykrMSwKLQkJCQkJCXRleHR1cmUsIG1pcG1hcCk7CisJCQkJCQkJCXRleHR1cmUsIG1pcG1hcCwgcmVsb2MtPmxvYmoudGlsaW5nX2ZsYWdzKTsKIAkJCQlpZiAocikKIAkJCQkJcmV0dXJuIHI7CiAJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2hkbWkuYwppbmRleCAyNmI0YmM5Li5lNmE1OGVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfaGRtaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9oZG1pLmMKQEAgLTQzNSw3ICs0MzUsOCBAQAogCQl9CiAJfQogCi0JaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNjAwIHx8IHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNjkwKSB7CisJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNjAwIHx8IHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNjkwIHx8CisJICAgIHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNzQwKSB7CiAJCXJldHVybiBmcmVlX2Jsb2Nrc1swXSA/IFI2MDBfSERNSV9CTE9DSzEgOiAwOwogCX0gZWxzZSBpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUjYwMCkgewogCQlpZiAoZnJlZV9ibG9ja3NbMF0pCkBAIC00NjYsNyArNDY3LDggQEAKIAkJaWYgKEFTSUNfSVNfRENFMzIocmRldikpCiAJCQlyYWRlb25fZW5jb2Rlci0+aGRtaV9jb25maWdfb2Zmc2V0ID0gZGlnLT5kaWdfZW5jb2RlciA/CiAJCQkJUjYwMF9IRE1JX0NPTkZJRzIgOiBSNjAwX0hETUlfQ09ORklHMTsKLQl9IGVsc2UgaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApIHsKKwl9IGVsc2UgaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDAgfHwgcmRldi0+ZmFtaWx5ID09IENISVBfUlM2MDAgfHwKKwkJICAgcmRldi0+ZmFtaWx5ID09IENISVBfUlM2OTAgfHwgcmRldi0+ZmFtaWx5ID09IENISVBfUlM3NDApIHsKIAkJcmFkZW9uX2VuY29kZXItPmhkbWlfb2Zmc2V0ID0gcjYwMF9oZG1pX2ZpbmRfZnJlZV9ibG9jayhkZXYpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaAppbmRleCA1OWMxZjg3Li44NThhMTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBkLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oCkBAIC0yMzksMTIgKzIzOSwxOCBAQAogI2RlZmluZQlHUkJNX1NPRlRfUkVTRVQJCQkJCTB4ODAyMAogI2RlZmluZQkJU09GVF9SRVNFVF9DUAkJCQkJKDE8PDApCiAKKyNkZWZpbmUJQ0dfVEhFUk1BTF9TVEFUVVMJCQkJMHg3RjQKKyNkZWZpbmUJCUFTSUNfVCh4KQkJCSAgICAgICAgKCh4KSA8PCAwKQorI2RlZmluZQkJQVNJQ19UX01BU0sJCQkgICAgICAgIDB4MUZGCisjZGVmaW5lCQlBU0lDX1RfU0hJRlQJCQkgICAgICAgIDAKKwogI2RlZmluZQlIRFBfSE9TVF9QQVRIX0NOVEwJCQkJMHgyQzAwCiAjZGVmaW5lCUhEUF9OT05TVVJGQUNFX0JBU0UJCQkJMHgyQzA0CiAjZGVmaW5lCUhEUF9OT05TVVJGQUNFX0lORk8JCQkJMHgyQzA4CiAjZGVmaW5lCUhEUF9OT05TVVJGQUNFX1NJWkUJCQkJMHgyQzBDCiAjZGVmaW5lIEhEUF9SRUdfQ09IRVJFTkNZX0ZMVVNIX0NOVEwJCQkweDU0QTAKICNkZWZpbmUJSERQX1RJTElOR19DT05GSUcJCQkJMHgyRjNDCisjZGVmaW5lIEhEUF9ERUJVRzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MkYzNAogCiAjZGVmaW5lIE1DX1ZNX0FHUF9UT1AJCQkJCTB4MjE4NAogI2RlZmluZSBNQ19WTV9BR1BfQk9UCQkJCQkweDIxODgKQEAgLTExNTQsNiArMTE2MCwxMCBAQAogI2RlZmluZSAgIFNfMDM4MDAwX1RJTEVfTU9ERSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAzKQogI2RlZmluZSAgIEdfMDM4MDAwX1RJTEVfTU9ERSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHhGKQogI2RlZmluZSAgIENfMDM4MDAwX1RJTEVfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGODcKKyNkZWZpbmUgICAgIFZfMDM4MDAwX0FSUkFZX0xJTkVBUl9HRU5FUkFMICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lICAgICBWXzAzODAwMF9BUlJBWV9MSU5FQVJfQUxJR05FRCAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSAgICAgVl8wMzgwMDBfQVJSQVlfMURfVElMRURfVEhJTjEgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgICAgIFZfMDM4MDAwX0FSUkFZXzJEX1RJTEVEX1RISU4xICAgICAgICAgICAgICAweDAwMDAwMDA0CiAjZGVmaW5lICAgU18wMzgwMDBfVElMRV9UWVBFKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDcpCiAjZGVmaW5lICAgR18wMzgwMDBfVElMRV9UWVBFKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNykgJiAweDEpCiAjZGVmaW5lICAgQ18wMzgwMDBfVElMRV9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkY3RgpAQCAtMTM1Nyw2ICsxMzY3LDggQEAKICNkZWZpbmUgICBTXzAyODAxMF9BUlJBWV9NT0RFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMTUpCiAjZGVmaW5lICAgR18wMjgwMTBfQVJSQVlfTU9ERSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHhGKQogI2RlZmluZSAgIENfMDI4MDEwX0FSUkFZX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGODdGRkYKKyNkZWZpbmUgICAgIFZfMDI4MDEwX0FSUkFZXzFEX1RJTEVEX1RISU4xICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lICAgICBWXzAyODAxMF9BUlJBWV8yRF9USUxFRF9USElOMSAgICAgICAgICAgICAgMHgwMDAwMDAwNAogI2RlZmluZSAgIFNfMDI4MDEwX1RJTEVfU1VSRkFDRV9FTkFCTEUoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKICNkZWZpbmUgICBHXzAyODAxMF9USUxFX1NVUkZBQ0VfRU5BQkxFKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCiAjZGVmaW5lICAgQ18wMjgwMTBfVElMRV9TVVJGQUNFX0VOQUJMRSAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKaW5kZXggYWI2MWFhYS4uM2NkMWM0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCkBAIC0xNzgsNiArMTc4LDkgQEAKIHZvaWQgcmFkZW9uX2F0b21iaW9zX2dldF9wb3dlcl9tb2RlcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJhZGVvbl9hdG9tX3NldF92b2x0YWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1MTYgbGV2ZWwpOwogdm9pZCByczY5MF9wbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB1MzIgcnY2eHhfZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHUzMiBydjc3MF9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdTMyIGV2ZXJncmVlbl9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKIC8qCiAgKiBGZW5jZXMuCkBAIC0yMzIsNyArMjM1LDcgQEAKICAqLwogc3RydWN0IHJhZGVvbl9tbWFuIHsKIAlzdHJ1Y3QgdHRtX2JvX2dsb2JhbF9yZWYgICAgICAgIGJvX2dsb2JhbF9yZWY7Ci0Jc3RydWN0IHR0bV9nbG9iYWxfcmVmZXJlbmNlCW1lbV9nbG9iYWxfcmVmOworCXN0cnVjdCBkcm1fZ2xvYmFsX3JlZmVyZW5jZQltZW1fZ2xvYmFsX3JlZjsKIAlzdHJ1Y3QgdHRtX2JvX2RldmljZQkJYmRldjsKIAlib29sCQkJCW1lbV9nbG9iYWxfcmVmZXJlbmNlZDsKIAlib29sCQkJCWluaXRpYWxpemVkOwpAQCAtMzUxLDYgKzM1NCw3IEBACiAJaW50CQkJdnJhbV9tdHJyOwogCWJvb2wJCQl2cmFtX2lzX2RkcjsKIAlib29sCQkJaWdwX3NpZGVwb3J0X2VuYWJsZWQ7CisJdTY0ICAgICAgICAgICAgICAgICAgICAgZ3R0X2Jhc2VfYWxpZ247CiB9OwogCiBib29sIHJhZGVvbl9jb21iaW9zX3NpZGVwb3J0X3ByZXNlbnQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwpAQCAtNjcwLDYgKzY3NCwxMyBAQAogCWludCBkcG1zX29uX2NtX2lkeDsKIH07CiAKK2VudW0gcmFkZW9uX2ludF90aGVybWFsX3R5cGUgeworCVRIRVJNQUxfVFlQRV9OT05FLAorCVRIRVJNQUxfVFlQRV9SVjZYWCwKKwlUSEVSTUFMX1RZUEVfUlY3NzAsCisJVEhFUk1BTF9UWVBFX0VWRVJHUkVFTiwKK307CisKIHN0cnVjdCByYWRlb25fdm9sdGFnZSB7CiAJZW51bSByYWRlb25fdm9sdGFnZV90eXBlIHR5cGU7CiAJLyogZ3BpbyB2b2x0YWdlICovCkBAIC03NjUsNiArNzc2LDkgQEAKIAllbnVtIHJhZGVvbl9wbV9wcm9maWxlX3R5cGUgcHJvZmlsZTsKIAlpbnQgICAgICAgICAgICAgICAgICAgICBwcm9maWxlX2luZGV4OwogCXN0cnVjdCByYWRlb25fcG1fcHJvZmlsZSBwcm9maWxlc1tQTV9QUk9GSUxFX01BWF07CisJLyogaW50ZXJuYWwgdGhlcm1hbCBjb250cm9sbGVyIG9uIHJ2Nnh4KyAqLworCWVudW0gcmFkZW9uX2ludF90aGVybWFsX3R5cGUgaW50X3RoZXJtYWxfdHlwZTsKKwlzdHJ1Y3QgZGV2aWNlCSAgICAgICAgKmludF9od21vbl9kZXY7CiB9OwogCiAKQEAgLTkwMSw2ICs5MTUsNyBAQAogCXVuc2lnbmVkCQl0aWxpbmdfbmJhbmtzOwogCXVuc2lnbmVkCQl0aWxpbmdfbnBpcGVzOwogCXVuc2lnbmVkCQl0aWxpbmdfZ3JvdXBfc2l6ZTsKKwl1bnNpZ25lZAkJdGlsZV9jb25maWc7CiAJc3RydWN0IHIxMDBfZ3B1X2xvY2t1cAlsb2NrdXA7CiB9OwogCkBAIC05MjUsNiArOTQwLDcgQEAKIAl1bnNpZ25lZAkJdGlsaW5nX25iYW5rczsKIAl1bnNpZ25lZAkJdGlsaW5nX25waXBlczsKIAl1bnNpZ25lZAkJdGlsaW5nX2dyb3VwX3NpemU7CisJdW5zaWduZWQJCXRpbGVfY29uZmlnOwogCXN0cnVjdCByMTAwX2dwdV9sb2NrdXAJbG9ja3VwOwogfTsKIApAQCAtOTUwLDYgKzk2Niw3IEBACiAJdW5zaWduZWQgdGlsaW5nX25iYW5rczsKIAl1bnNpZ25lZCB0aWxpbmdfbnBpcGVzOwogCXVuc2lnbmVkIHRpbGluZ19ncm91cF9zaXplOworCXVuc2lnbmVkIHRpbGVfY29uZmlnOwogfTsKIAogdW5pb24gcmFkZW9uX2FzaWNfY29uZmlnIHsKQEAgLTEwMzIsNiArMTA0OSw5IEBACiAJdWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICBwY2llX3JlZ19tYXNrOwogCXJhZGVvbl9ycmVnX3QJCQlwY2llcF9ycmVnOwogCXJhZGVvbl93cmVnX3QJCQlwY2llcF93cmVnOworCS8qIGlvIHBvcnQgKi8KKwl2b2lkIF9faW9tZW0gICAgICAgICAgICAgICAgICAgICpyaW9fbWVtOworCXJlc291cmNlX3NpemVfdAkJCXJpb19tZW1fc2l6ZTsKIAlzdHJ1Y3QgcmFkZW9uX2Nsb2NrICAgICAgICAgICAgIGNsb2NrOwogCXN0cnVjdCByYWRlb25fbWMJCW1jOwogCXN0cnVjdCByYWRlb25fZ2FydAkJZ2FydDsKQEAgLTEwNjgsNiArMTA4OCw3IEBACiAJc3RydWN0IG11dGV4IHZyYW1fbXV0ZXg7CiAKIAkvKiBhdWRpbyBzdHVmZiAqLworCWJvb2wJCQlhdWRpb19lbmFibGVkOwogCXN0cnVjdCB0aW1lcl9saXN0CWF1ZGlvX3RpbWVyOwogCWludAkJCWF1ZGlvX2NoYW5uZWxzOwogCWludAkJCWF1ZGlvX3JhdGU7CkBAIC0xMDc3LDYgKzEwOTgsOCBAQAogCiAJYm9vbCBwb3dlcmVkX2Rvd247CiAJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGFjcGlfbmI7CisJLyogb25seSBvbmUgdXNlcnNwYWNlIGNhbiB1c2UgSHlwZXJ6IGZlYXR1cmVzIGF0IGEgdGltZSAqLworCXN0cnVjdCBkcm1fZmlsZSAqaHlwZXJ6X2ZpbHA7CiB9OwogCiBpbnQgcmFkZW9uX2RldmljZV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LApAQCAtMTExMyw2ICsxMTM2LDI2IEBACiAJfQogfQogCitzdGF0aWMgaW5saW5lIHUzMiByMTAwX2lvX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHUzMiByZWcpCit7CisJaWYgKHJlZyA8IHJkZXYtPnJpb19tZW1fc2l6ZSkKKwkJcmV0dXJuIGlvcmVhZDMyKHJkZXYtPnJpb19tZW0gKyByZWcpOworCWVsc2UgeworCQlpb3dyaXRlMzIocmVnLCByZGV2LT5yaW9fbWVtICsgUkFERU9OX01NX0lOREVYKTsKKwkJcmV0dXJuIGlvcmVhZDMyKHJkZXYtPnJpb19tZW0gKyBSQURFT05fTU1fREFUQSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcjEwMF9pb193cmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1MzIgcmVnLCB1MzIgdikKK3sKKwlpZiAocmVnIDwgcmRldi0+cmlvX21lbV9zaXplKQorCQlpb3dyaXRlMzIodiwgcmRldi0+cmlvX21lbSArIHJlZyk7CisJZWxzZSB7CisJCWlvd3JpdGUzMihyZWcsIHJkZXYtPnJpb19tZW0gKyBSQURFT05fTU1fSU5ERVgpOworCQlpb3dyaXRlMzIodiwgcmRldi0+cmlvX21lbSArIFJBREVPTl9NTV9EQVRBKTsKKwl9Cit9CisKIC8qCiAgKiBDYXN0IGhlbHBlcgogICovCkBAIC0xMTUxLDYgKzExOTQsOCBAQAogCQlXUkVHMzJfUExMKHJlZywgdG1wXyk7CQkJCVwKIAl9IHdoaWxlICgwKQogI2RlZmluZSBEUkVHMzJfU1lTKHNxZiwgcmRldiwgcmVnKSBzZXFfcHJpbnRmKChzcWYpLCAjcmVnICIgOiAweCUwOFhcbiIsIHIxMDBfbW1fcnJlZygocmRldiksIChyZWcpKSkKKyNkZWZpbmUgUlJFRzMyX0lPKHJlZykgcjEwMF9pb19ycmVnKHJkZXYsIChyZWcpKQorI2RlZmluZSBXUkVHMzJfSU8ocmVnLCB2KSByMTAwX2lvX3dyZWcocmRldiwgKHJlZyksICh2KSkKIAogLyoKICAqIEluZGlyZWN0IHJlZ2lzdGVycyBhY2Nlc3NvcgpAQCAtMTQxNCw2ICsxNDU5LDEzIEBACiBleHRlcm4gdm9pZCBldmVyZ3JlZW5fZGlzYWJsZV9pbnRlcnJ1cHRfc3RhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIGludCBldmVyZ3JlZW5faXJxX3NldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKKy8qIHJhZGVvbl9hY3BpLmMgKi8gCisjaWYgZGVmaW5lZChDT05GSUdfQUNQSSkgCitleHRlcm4gaW50IHJhZGVvbl9hY3BpX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOyAKKyNlbHNlIAorc3RhdGljIGlubGluZSBpbnQgcmFkZW9uX2FjcGlfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikgeyByZXR1cm4gMDsgfSAKKyNlbmRpZiAKKwogLyogZXZlcmdyZWVuICovCiBzdHJ1Y3QgZXZlcmdyZWVuX21jX3NhdmUgewogCXUzMiB2Z2FfY29udHJvbFs2XTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FjcGkuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FjcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjY2MzZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYWNwaS5jCkBAIC0wLDAgKzEsNjcgQEAKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CisjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgorCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgImRybV9zYXJlYS5oIgorI2luY2x1ZGUgImRybV9jcnRjX2hlbHBlci5oIgorI2luY2x1ZGUgInJhZGVvbi5oIgorCisjaW5jbHVkZSA8bGludXgvdmdhX3N3aXRjaGVyb28uaD4KKworLyogQ2FsbCB0aGUgQVRJRiBtZXRob2QKKyAqCisgKiBOb3RlOiBjdXJyZW50bHkgd2UgZGlzY2FyZCB0aGUgb3V0cHV0CisgKi8KK3N0YXRpYyBpbnQgcmFkZW9uX2F0aWZfY2FsbChhY3BpX2hhbmRsZSBoYW5kbGUpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXVuaW9uIGFjcGlfb2JqZWN0IGF0aWZfYXJnX2VsZW1lbnRzWzJdOworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGF0aWZfYXJnOworCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMfTsKKworCWF0aWZfYXJnLmNvdW50ID0gMjsKKwlhdGlmX2FyZy5wb2ludGVyID0gJmF0aWZfYXJnX2VsZW1lbnRzWzBdOworCisJYXRpZl9hcmdfZWxlbWVudHNbMF0udHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCWF0aWZfYXJnX2VsZW1lbnRzWzBdLmludGVnZXIudmFsdWUgPSAwOworCWF0aWZfYXJnX2VsZW1lbnRzWzFdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlhdGlmX2FyZ19lbGVtZW50c1sxXS5pbnRlZ2VyLnZhbHVlID0gMDsKKworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIkFUSUYiLCAmYXRpZl9hcmcsICZidWZmZXIpOworCisJLyogRmFpbCBvbmx5IGlmIGNhbGxpbmcgdGhlIG1ldGhvZCBmYWlscyBhbmQgQVRJRiBpcyBzdXBwb3J0ZWQgKi8KKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykgJiYgc3RhdHVzICE9IEFFX05PVF9GT1VORCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiZmFpbGVkIHRvIGV2YWx1YXRlIEFUSUYgZ290ICVzXG4iLCBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7CisJCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKKwkJcmV0dXJuIDE7CisJfQorCisJa2ZyZWUoYnVmZmVyLnBvaW50ZXIpOworCXJldHVybiAwOworfQorCisvKiBDYWxsIGFsbCBBQ1BJIG1ldGhvZHMgaGVyZSAqLworaW50IHJhZGVvbl9hY3BpX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJYWNwaV9oYW5kbGUgaGFuZGxlOworCWludCByZXQ7CisKKwkvKiBObyBuZWVkIHRvIHByb2NlZWQgaWYgd2UncmUgc3VyZSB0aGF0IEFUSUYgaXMgbm90IHN1cHBvcnRlZCAqLworCWlmICghQVNJQ19JU19BVklWTyhyZGV2KSB8fCAhcmRldi0+YmlvcykKKwkJcmV0dXJuIDA7CisKKwkvKiBHZXQgdGhlIGRldmljZSBoYW5kbGUgKi8KKwloYW5kbGUgPSBERVZJQ0VfQUNQSV9IQU5ETEUoJnJkZXYtPnBkZXYtPmRldik7CisKKwkvKiBDYWxsIHRoZSBBVElGIG1ldGhvZCAqLworCXJldCA9IHJhZGVvbl9hdGlmX2NhbGwoaGFuZGxlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaAppbmRleCBjMGJiYWE2Li5hNWFmZjc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCkBAIC0xMTMsNiArMTEzLDcgQEAKIGludCByMTAwX3diX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHIxMDBfY3BfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByMTAwX3ZnYV9yZW5kZXJfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHIxMDBfcmVzdG9yZV9zYW5pdHkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHIxMDBfY3NfdHJhY2tfY2hlY2tfcGt0M19pbmR4X2J1ZmZlcihzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCQkJIHN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCiAJCQkJCSBzdHJ1Y3QgcmFkZW9uX2JvICpyb2JqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCmluZGV4IDk5YmQ4YTkuLjNiYzJiY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYwpAQCAtMjgwLDYgKzI4MCwxNSBAQAogCQl9CiAJfQogCisJLyogQVNVUyBIRCAzNjAwIGJvYXJkIGxpc3RzIHRoZSBEVkkgcG9ydCBhcyBIRE1JICovCisJaWYgKChkZXYtPnBkZXYtPmRldmljZSA9PSAweDk1OTgpICYmCisJICAgIChkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxMDQzKSAmJgorCSAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDFlNCkpIHsKKwkJaWYgKCpjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEpIHsKKwkJCSpjb25uZWN0b3JfdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJOworCQl9CisJfQorCiAJLyogQVNVUyBIRCAzNDUwIGJvYXJkIGxpc3RzIHRoZSBEVkkgcG9ydCBhcyBIRE1JICovCiAJaWYgKChkZXYtPnBkZXYtPmRldmljZSA9PSAweDk1QzUpICYmCiAJICAgIChkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxMDQzKSAmJgpAQCAtNzE0LDcgKzcyMyw3IEBACiAJCX0KIAogCQlpZiAoaSA9PSBBVE9NX0RFVklDRV9DVl9JTkRFWCkgewotCQkJRFJNX0RFQlVHKCJTa2lwcGluZyBDb21wb25lbnQgVmlkZW9cbiIpOworCQkJRFJNX0RFQlVHX0tNUygiU2tpcHBpbmcgQ29tcG9uZW50IFZpZGVvXG4iKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTEwMjMsMTMgKzEwMzIsMTcgQEAKIAl1OCBmcmV2LCBjcmV2OwogCXUxNiBkYXRhX29mZnNldDsKIAorCS8qIHNpZGVwb3J0IGlzIEFNRCBvbmx5ICovCisJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNjAwKQorCQlyZXR1cm4gZmFsc2U7CisKIAlpZiAoYXRvbV9wYXJzZV9kYXRhX2hlYWRlcihtb2RlX2luZm8tPmF0b21fY29udGV4dCwgaW5kZXgsIE5VTEwsCiAJCQkJICAgJmZyZXYsICZjcmV2LCAmZGF0YV9vZmZzZXQpKSB7CiAJCWlncF9pbmZvID0gKHVuaW9uIGlncF9pbmZvICopKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsKIAkJCQkgICAgICBkYXRhX29mZnNldCk7CiAJCXN3aXRjaCAoY3JldikgewogCQljYXNlIDE6Ci0JCQlpZiAoaWdwX2luZm8tPmluZm8udWNNZW1vcnlUeXBlICYgMHhmMCkKKwkJCWlmIChpZ3BfaW5mby0+aW5mby51bEJvb3RVcE1lbW9yeUNsb2NrKQogCQkJCXJldHVybiB0cnVlOwogCQkJYnJlYWs7CiAJCWNhc2UgMjoKQEAgLTEwNzksNyArMTA5Miw3IEBACiAJCQkgICAgKHRtZHNfaW5mby0+YXNNaXNjSW5mb1tpXS4KIAkJCSAgICAgdWNQTExfVm9sdGFnZVN3aW5nICYgMHhmKSA8PCAxNjsKIAotCQkJRFJNX0RFQlVHKCJUTURTIFBMTCBGcm9tIEFUT01CSU9TICV1ICV4XG4iLAorCQkJRFJNX0RFQlVHX0tNUygiVE1EUyBQTEwgRnJvbSBBVE9NQklPUyAldSAleFxuIiwKIAkJCQkgIHRtZHMtPnRtZHNfcGxsW2ldLmZyZXEsCiAJCQkJICB0bWRzLT50bWRzX3BsbFtpXS52YWx1ZSk7CiAKQEAgLTE3NzMsMTQgKzE3ODYsMjIgQEAKIAkJCX0KIAogCQkJLyogYWRkIHRoZSBpMmMgYnVzIGZvciB0aGVybWFsL2ZhbiBjaGlwICovCi0JCQkvKiBubyBzdXBwb3J0IGZvciBpbnRlcm5hbCBjb250cm9sbGVyIHlldCAqLwogCQkJaWYgKGNvbnRyb2xsZXItPnVjVHlwZSA+IDApIHsKLQkJCQlpZiAoKGNvbnRyb2xsZXItPnVjVHlwZSA9PSBBVE9NX1BQX1RIRVJNQUxDT05UUk9MTEVSX1JWNnh4KSB8fAotCQkJCSAgICAoY29udHJvbGxlci0+dWNUeXBlID09IEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfUlY3NzApIHx8Ci0JCQkJICAgIChjb250cm9sbGVyLT51Y1R5cGUgPT0gQVRPTV9QUF9USEVSTUFMQ09OVFJPTExFUl9FVkVSR1JFRU4pKSB7CisJCQkJaWYgKGNvbnRyb2xsZXItPnVjVHlwZSA9PSBBVE9NX1BQX1RIRVJNQUxDT05UUk9MTEVSX1JWNnh4KSB7CiAJCQkJCURSTV9JTkZPKCJJbnRlcm5hbCB0aGVybWFsIGNvbnRyb2xsZXIgJXMgZmFuIGNvbnRyb2xcbiIsCiAJCQkJCQkgKGNvbnRyb2xsZXItPnVjRmFuUGFyYW1ldGVycyAmCiAJCQkJCQkgIEFUT01fUFBfRkFOUEFSQU1FVEVSU19OT0ZBTikgPyAid2l0aG91dCIgOiAid2l0aCIpOworCQkJCQlyZGV2LT5wbS5pbnRfdGhlcm1hbF90eXBlID0gVEhFUk1BTF9UWVBFX1JWNlhYOworCQkJCX0gZWxzZSBpZiAoY29udHJvbGxlci0+dWNUeXBlID09IEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfUlY3NzApIHsKKwkJCQkJRFJNX0lORk8oIkludGVybmFsIHRoZXJtYWwgY29udHJvbGxlciAlcyBmYW4gY29udHJvbFxuIiwKKwkJCQkJCSAoY29udHJvbGxlci0+dWNGYW5QYXJhbWV0ZXJzICYKKwkJCQkJCSAgQVRPTV9QUF9GQU5QQVJBTUVURVJTX05PRkFOKSA/ICJ3aXRob3V0IiA6ICJ3aXRoIik7CisJCQkJCXJkZXYtPnBtLmludF90aGVybWFsX3R5cGUgPSBUSEVSTUFMX1RZUEVfUlY3NzA7CisJCQkJfSBlbHNlIGlmIChjb250cm9sbGVyLT51Y1R5cGUgPT0gQVRPTV9QUF9USEVSTUFMQ09OVFJPTExFUl9FVkVSR1JFRU4pIHsKKwkJCQkJRFJNX0lORk8oIkludGVybmFsIHRoZXJtYWwgY29udHJvbGxlciAlcyBmYW4gY29udHJvbFxuIiwKKwkJCQkJCSAoY29udHJvbGxlci0+dWNGYW5QYXJhbWV0ZXJzICYKKwkJCQkJCSAgQVRPTV9QUF9GQU5QQVJBTUVURVJTX05PRkFOKSA/ICJ3aXRob3V0IiA6ICJ3aXRoIik7CisJCQkJCXJkZXYtPnBtLmludF90aGVybWFsX3R5cGUgPSBUSEVSTUFMX1RZUEVfRVZFUkdSRUVOOwogCQkJCX0gZWxzZSBpZiAoKGNvbnRyb2xsZXItPnVjVHlwZSA9PQogCQkJCQkgICAgQVRPTV9QUF9USEVSTUFMQ09OVFJPTExFUl9FWFRFUk5BTF9HUElPKSB8fAogCQkJCQkgICAoY29udHJvbGxlci0+dWNUeXBlID09CkBAIC0yMTYzLDExICsyMTg0LDExIEBACiAJaWYgKChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKSAmJgogCSAgICAocmFkZW9uX2Nvbm5lY3Rvci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKSkgewogCQlpZiAoY29ubmVjdGVkKSB7Ci0JCQlEUk1fREVCVUcoIlRWMSBjb25uZWN0ZWRcbiIpOworCQkJRFJNX0RFQlVHX0tNUygiVFYxIGNvbm5lY3RlZFxuIik7CiAJCQliaW9zXzNfc2NyYXRjaCB8PSBBVE9NX1MzX1RWMV9BQ1RJVkU7CiAJCQliaW9zXzZfc2NyYXRjaCB8PSBBVE9NX1M2X0FDQ19SRVFfVFYxOwogCQl9IGVsc2UgewotCQkJRFJNX0RFQlVHKCJUVjEgZGlzY29ubmVjdGVkXG4iKTsKKwkJCURSTV9ERUJVR19LTVMoIlRWMSBkaXNjb25uZWN0ZWRcbiIpOwogCQkJYmlvc18wX3NjcmF0Y2ggJj0gfkFUT01fUzBfVFYxX01BU0s7CiAJCQliaW9zXzNfc2NyYXRjaCAmPSB+QVRPTV9TM19UVjFfQUNUSVZFOwogCQkJYmlvc182X3NjcmF0Y2ggJj0gfkFUT01fUzZfQUNDX1JFUV9UVjE7CkBAIC0yMTc2LDExICsyMTk3LDExIEBACiAJaWYgKChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX0NWX1NVUFBPUlQpICYmCiAJICAgIChyYWRlb25fY29ubmVjdG9yLT5kZXZpY2VzICYgQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpIHsKIAkJaWYgKGNvbm5lY3RlZCkgewotCQkJRFJNX0RFQlVHKCJDViBjb25uZWN0ZWRcbiIpOworCQkJRFJNX0RFQlVHX0tNUygiQ1YgY29ubmVjdGVkXG4iKTsKIAkJCWJpb3NfM19zY3JhdGNoIHw9IEFUT01fUzNfQ1ZfQUNUSVZFOwogCQkJYmlvc182X3NjcmF0Y2ggfD0gQVRPTV9TNl9BQ0NfUkVRX0NWOwogCQl9IGVsc2UgewotCQkJRFJNX0RFQlVHKCJDViBkaXNjb25uZWN0ZWRcbiIpOworCQkJRFJNX0RFQlVHX0tNUygiQ1YgZGlzY29ubmVjdGVkXG4iKTsKIAkJCWJpb3NfMF9zY3JhdGNoICY9IH5BVE9NX1MwX0NWX01BU0s7CiAJCQliaW9zXzNfc2NyYXRjaCAmPSB+QVRPTV9TM19DVl9BQ1RJVkU7CiAJCQliaW9zXzZfc2NyYXRjaCAmPSB+QVRPTV9TNl9BQ0NfUkVRX0NWOwpAQCAtMjE4OSwxMiArMjIxMCwxMiBAQAogCWlmICgocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiBBVE9NX0RFVklDRV9MQ0QxX1NVUFBPUlQpICYmCiAJICAgIChyYWRlb25fY29ubmVjdG9yLT5kZXZpY2VzICYgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JUKSkgewogCQlpZiAoY29ubmVjdGVkKSB7Ci0JCQlEUk1fREVCVUcoIkxDRDEgY29ubmVjdGVkXG4iKTsKKwkJCURSTV9ERUJVR19LTVMoIkxDRDEgY29ubmVjdGVkXG4iKTsKIAkJCWJpb3NfMF9zY3JhdGNoIHw9IEFUT01fUzBfTENEMTsKIAkJCWJpb3NfM19zY3JhdGNoIHw9IEFUT01fUzNfTENEMV9BQ1RJVkU7CiAJCQliaW9zXzZfc2NyYXRjaCB8PSBBVE9NX1M2X0FDQ19SRVFfTENEMTsKIAkJfSBlbHNlIHsKLQkJCURSTV9ERUJVRygiTENEMSBkaXNjb25uZWN0ZWRcbiIpOworCQkJRFJNX0RFQlVHX0tNUygiTENEMSBkaXNjb25uZWN0ZWRcbiIpOwogCQkJYmlvc18wX3NjcmF0Y2ggJj0gfkFUT01fUzBfTENEMTsKIAkJCWJpb3NfM19zY3JhdGNoICY9IH5BVE9NX1MzX0xDRDFfQUNUSVZFOwogCQkJYmlvc182X3NjcmF0Y2ggJj0gfkFUT01fUzZfQUNDX1JFUV9MQ0QxOwpAQCAtMjIwMywxMiArMjIyNCwxMiBAQAogCWlmICgocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQpICYmCiAJICAgIChyYWRlb25fY29ubmVjdG9yLT5kZXZpY2VzICYgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JUKSkgewogCQlpZiAoY29ubmVjdGVkKSB7Ci0JCQlEUk1fREVCVUcoIkNSVDEgY29ubmVjdGVkXG4iKTsKKwkJCURSTV9ERUJVR19LTVMoIkNSVDEgY29ubmVjdGVkXG4iKTsKIAkJCWJpb3NfMF9zY3JhdGNoIHw9IEFUT01fUzBfQ1JUMV9DT0xPUjsKIAkJCWJpb3NfM19zY3JhdGNoIHw9IEFUT01fUzNfQ1JUMV9BQ1RJVkU7CiAJCQliaW9zXzZfc2NyYXRjaCB8PSBBVE9NX1M2X0FDQ19SRVFfQ1JUMTsKIAkJfSBlbHNlIHsKLQkJCURSTV9ERUJVRygiQ1JUMSBkaXNjb25uZWN0ZWRcbiIpOworCQkJRFJNX0RFQlVHX0tNUygiQ1JUMSBkaXNjb25uZWN0ZWRcbiIpOwogCQkJYmlvc18wX3NjcmF0Y2ggJj0gfkFUT01fUzBfQ1JUMV9NQVNLOwogCQkJYmlvc18zX3NjcmF0Y2ggJj0gfkFUT01fUzNfQ1JUMV9BQ1RJVkU7CiAJCQliaW9zXzZfc2NyYXRjaCAmPSB+QVRPTV9TNl9BQ0NfUkVRX0NSVDE7CkBAIC0yMjE3LDEyICsyMjM4LDEyIEBACiAJaWYgKChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCkgJiYKIAkgICAgKHJhZGVvbl9jb25uZWN0b3ItPmRldmljZXMgJiBBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQpKSB7CiAJCWlmIChjb25uZWN0ZWQpIHsKLQkJCURSTV9ERUJVRygiQ1JUMiBjb25uZWN0ZWRcbiIpOworCQkJRFJNX0RFQlVHX0tNUygiQ1JUMiBjb25uZWN0ZWRcbiIpOwogCQkJYmlvc18wX3NjcmF0Y2ggfD0gQVRPTV9TMF9DUlQyX0NPTE9SOwogCQkJYmlvc18zX3NjcmF0Y2ggfD0gQVRPTV9TM19DUlQyX0FDVElWRTsKIAkJCWJpb3NfNl9zY3JhdGNoIHw9IEFUT01fUzZfQUNDX1JFUV9DUlQyOwogCQl9IGVsc2UgewotCQkJRFJNX0RFQlVHKCJDUlQyIGRpc2Nvbm5lY3RlZFxuIik7CisJCQlEUk1fREVCVUdfS01TKCJDUlQyIGRpc2Nvbm5lY3RlZFxuIik7CiAJCQliaW9zXzBfc2NyYXRjaCAmPSB+QVRPTV9TMF9DUlQyX01BU0s7CiAJCQliaW9zXzNfc2NyYXRjaCAmPSB+QVRPTV9TM19DUlQyX0FDVElWRTsKIAkJCWJpb3NfNl9zY3JhdGNoICY9IH5BVE9NX1M2X0FDQ19SRVFfQ1JUMjsKQEAgLTIyMzEsMTIgKzIyNTIsMTIgQEAKIAlpZiAoKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgQVRPTV9ERVZJQ0VfREZQMV9TVVBQT1JUKSAmJgogCSAgICAocmFkZW9uX2Nvbm5lY3Rvci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCkpIHsKIAkJaWYgKGNvbm5lY3RlZCkgewotCQkJRFJNX0RFQlVHKCJERlAxIGNvbm5lY3RlZFxuIik7CisJCQlEUk1fREVCVUdfS01TKCJERlAxIGNvbm5lY3RlZFxuIik7CiAJCQliaW9zXzBfc2NyYXRjaCB8PSBBVE9NX1MwX0RGUDE7CiAJCQliaW9zXzNfc2NyYXRjaCB8PSBBVE9NX1MzX0RGUDFfQUNUSVZFOwogCQkJYmlvc182X3NjcmF0Y2ggfD0gQVRPTV9TNl9BQ0NfUkVRX0RGUDE7CiAJCX0gZWxzZSB7Ci0JCQlEUk1fREVCVUcoIkRGUDEgZGlzY29ubmVjdGVkXG4iKTsKKwkJCURSTV9ERUJVR19LTVMoIkRGUDEgZGlzY29ubmVjdGVkXG4iKTsKIAkJCWJpb3NfMF9zY3JhdGNoICY9IH5BVE9NX1MwX0RGUDE7CiAJCQliaW9zXzNfc2NyYXRjaCAmPSB+QVRPTV9TM19ERlAxX0FDVElWRTsKIAkJCWJpb3NfNl9zY3JhdGNoICY9IH5BVE9NX1M2X0FDQ19SRVFfREZQMTsKQEAgLTIyNDUsMTIgKzIyNjYsMTIgQEAKIAlpZiAoKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgQVRPTV9ERVZJQ0VfREZQMl9TVVBQT1JUKSAmJgogCSAgICAocmFkZW9uX2Nvbm5lY3Rvci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX0RGUDJfU1VQUE9SVCkpIHsKIAkJaWYgKGNvbm5lY3RlZCkgewotCQkJRFJNX0RFQlVHKCJERlAyIGNvbm5lY3RlZFxuIik7CisJCQlEUk1fREVCVUdfS01TKCJERlAyIGNvbm5lY3RlZFxuIik7CiAJCQliaW9zXzBfc2NyYXRjaCB8PSBBVE9NX1MwX0RGUDI7CiAJCQliaW9zXzNfc2NyYXRjaCB8PSBBVE9NX1MzX0RGUDJfQUNUSVZFOwogCQkJYmlvc182X3NjcmF0Y2ggfD0gQVRPTV9TNl9BQ0NfUkVRX0RGUDI7CiAJCX0gZWxzZSB7Ci0JCQlEUk1fREVCVUcoIkRGUDIgZGlzY29ubmVjdGVkXG4iKTsKKwkJCURSTV9ERUJVR19LTVMoIkRGUDIgZGlzY29ubmVjdGVkXG4iKTsKIAkJCWJpb3NfMF9zY3JhdGNoICY9IH5BVE9NX1MwX0RGUDI7CiAJCQliaW9zXzNfc2NyYXRjaCAmPSB+QVRPTV9TM19ERlAyX0FDVElWRTsKIAkJCWJpb3NfNl9zY3JhdGNoICY9IH5BVE9NX1M2X0FDQ19SRVFfREZQMjsKQEAgLTIyNTksMTIgKzIyODAsMTIgQEAKIAlpZiAoKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgQVRPTV9ERVZJQ0VfREZQM19TVVBQT1JUKSAmJgogCSAgICAocmFkZW9uX2Nvbm5lY3Rvci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX0RGUDNfU1VQUE9SVCkpIHsKIAkJaWYgKGNvbm5lY3RlZCkgewotCQkJRFJNX0RFQlVHKCJERlAzIGNvbm5lY3RlZFxuIik7CisJCQlEUk1fREVCVUdfS01TKCJERlAzIGNvbm5lY3RlZFxuIik7CiAJCQliaW9zXzBfc2NyYXRjaCB8PSBBVE9NX1MwX0RGUDM7CiAJCQliaW9zXzNfc2NyYXRjaCB8PSBBVE9NX1MzX0RGUDNfQUNUSVZFOwogCQkJYmlvc182X3NjcmF0Y2ggfD0gQVRPTV9TNl9BQ0NfUkVRX0RGUDM7CiAJCX0gZWxzZSB7Ci0JCQlEUk1fREVCVUcoIkRGUDMgZGlzY29ubmVjdGVkXG4iKTsKKwkJCURSTV9ERUJVR19LTVMoIkRGUDMgZGlzY29ubmVjdGVkXG4iKTsKIAkJCWJpb3NfMF9zY3JhdGNoICY9IH5BVE9NX1MwX0RGUDM7CiAJCQliaW9zXzNfc2NyYXRjaCAmPSB+QVRPTV9TM19ERlAzX0FDVElWRTsKIAkJCWJpb3NfNl9zY3JhdGNoICY9IH5BVE9NX1M2X0FDQ19SRVFfREZQMzsKQEAgLTIyNzMsMTIgKzIyOTQsMTIgQEAKIAlpZiAoKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgQVRPTV9ERVZJQ0VfREZQNF9TVVBQT1JUKSAmJgogCSAgICAocmFkZW9uX2Nvbm5lY3Rvci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX0RGUDRfU1VQUE9SVCkpIHsKIAkJaWYgKGNvbm5lY3RlZCkgewotCQkJRFJNX0RFQlVHKCJERlA0IGNvbm5lY3RlZFxuIik7CisJCQlEUk1fREVCVUdfS01TKCJERlA0IGNvbm5lY3RlZFxuIik7CiAJCQliaW9zXzBfc2NyYXRjaCB8PSBBVE9NX1MwX0RGUDQ7CiAJCQliaW9zXzNfc2NyYXRjaCB8PSBBVE9NX1MzX0RGUDRfQUNUSVZFOwogCQkJYmlvc182X3NjcmF0Y2ggfD0gQVRPTV9TNl9BQ0NfUkVRX0RGUDQ7CiAJCX0gZWxzZSB7Ci0JCQlEUk1fREVCVUcoIkRGUDQgZGlzY29ubmVjdGVkXG4iKTsKKwkJCURSTV9ERUJVR19LTVMoIkRGUDQgZGlzY29ubmVjdGVkXG4iKTsKIAkJCWJpb3NfMF9zY3JhdGNoICY9IH5BVE9NX1MwX0RGUDQ7CiAJCQliaW9zXzNfc2NyYXRjaCAmPSB+QVRPTV9TM19ERlA0X0FDVElWRTsKIAkJCWJpb3NfNl9zY3JhdGNoICY9IH5BVE9NX1M2X0FDQ19SRVFfREZQNDsKQEAgLTIyODcsMTIgKzIzMDgsMTIgQEAKIAlpZiAoKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgQVRPTV9ERVZJQ0VfREZQNV9TVVBQT1JUKSAmJgogCSAgICAocmFkZW9uX2Nvbm5lY3Rvci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX0RGUDVfU1VQUE9SVCkpIHsKIAkJaWYgKGNvbm5lY3RlZCkgewotCQkJRFJNX0RFQlVHKCJERlA1IGNvbm5lY3RlZFxuIik7CisJCQlEUk1fREVCVUdfS01TKCJERlA1IGNvbm5lY3RlZFxuIik7CiAJCQliaW9zXzBfc2NyYXRjaCB8PSBBVE9NX1MwX0RGUDU7CiAJCQliaW9zXzNfc2NyYXRjaCB8PSBBVE9NX1MzX0RGUDVfQUNUSVZFOwogCQkJYmlvc182X3NjcmF0Y2ggfD0gQVRPTV9TNl9BQ0NfUkVRX0RGUDU7CiAJCX0gZWxzZSB7Ci0JCQlEUk1fREVCVUcoIkRGUDUgZGlzY29ubmVjdGVkXG4iKTsKKwkJCURSTV9ERUJVR19LTVMoIkRGUDUgZGlzY29ubmVjdGVkXG4iKTsKIAkJCWJpb3NfMF9zY3JhdGNoICY9IH5BVE9NX1MwX0RGUDU7CiAJCQliaW9zXzNfc2NyYXRjaCAmPSB+QVRPTV9TM19ERlA1X0FDVElWRTsKIAkJCWJpb3NfNl9zY3JhdGNoICY9IH5BVE9NX1M2X0FDQ19SRVFfREZQNTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Jpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Jpb3MuYwppbmRleCAyYzkyMTM3Li42NTQ3ODdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYmlvcy5jCkBAIC01Myw3ICs1Myw3IEBACiAJCQlyZXR1cm4gZmFsc2U7CiAKIAlyZGV2LT5iaW9zID0gTlVMTDsKLQl2cmFtX2Jhc2UgPSBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KHJkZXYtPmRkZXYsIDApOworCXZyYW1fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChyZGV2LT5wZGV2LCAwKTsKIAliaW9zID0gaW9yZW1hcCh2cmFtX2Jhc2UsIHNpemUpOwogCWlmICghYmlvcykgewogCQlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKaW5kZXggZDFjMWQ4ZC4uNWUxNDc0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYwpAQCAtNjkzLDYgKzY5MywxMCBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByZGV2LT5kZGV2OwogCXUxNiBpZ3BfaW5mbzsKIAorCS8qIHNpZGVwb3J0IGlzIEFNRCBvbmx5ICovCisJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNDAwKQorCQlyZXR1cm4gZmFsc2U7CisKIAlpZ3BfaW5mbyA9IGNvbWJpb3NfZ2V0X3RhYmxlX29mZnNldChkZXYsIENPTUJJT1NfSU5URUdSQVRFRF9TWVNURU1fSU5GT19UQUJMRSk7CiAKIAlpZiAoaWdwX2luZm8pIHsKQEAgLTEyMDUsNyArMTIwOSw3IEBACiAJCQkJICAgIFJCSU9TMzIodG1kc19pbmZvICsgaSAqIDEwICsgMHgwOCk7CiAJCQkJdG1kcy0+dG1kc19wbGxbaV0uZnJlcSA9CiAJCQkJICAgIFJCSU9TMTYodG1kc19pbmZvICsgaSAqIDEwICsgMHgxMCk7Ci0JCQkJRFJNX0RFQlVHKCJUTURTIFBMTCBGcm9tIENPTUJJT1MgJXUgJXhcbiIsCisJCQkJRFJNX0RFQlVHX0tNUygiVE1EUyBQTEwgRnJvbSBDT01CSU9TICV1ICV4XG4iLAogCQkJCQkgIHRtZHMtPnRtZHNfcGxsW2ldLmZyZXEsCiAJCQkJCSAgdG1kcy0+dG1kc19wbGxbaV0udmFsdWUpOwogCQkJfQpAQCAtMTIyMyw3ICsxMjI3LDcgQEAKIAkJCQkJc3RyaWRlICs9IDEwOwogCQkJCWVsc2UKIAkJCQkJc3RyaWRlICs9IDY7Ci0JCQkJRFJNX0RFQlVHKCJUTURTIFBMTCBGcm9tIENPTUJJT1MgJXUgJXhcbiIsCisJCQkJRFJNX0RFQlVHX0tNUygiVE1EUyBQTEwgRnJvbSBDT01CSU9TICV1ICV4XG4iLAogCQkJCQkgIHRtZHMtPnRtZHNfcGxsW2ldLmZyZXEsCiAJCQkJCSAgdG1kcy0+dG1kc19wbGxbaV0udmFsdWUpOwogCQkJfQpAQCAtMjIwOCw3ICsyMjEyLDcgQEAKIAkJdWludDE2X3QgdG1kc19pbmZvID0KIAkJICAgIGNvbWJpb3NfZ2V0X3RhYmxlX29mZnNldChkZXYsIENPTUJJT1NfREZQX0lORk9fVEFCTEUpOwogCQlpZiAodG1kc19pbmZvKSB7Ci0JCQlEUk1fREVCVUcoIkZvdW5kIERGUCB0YWJsZSwgYXNzdW1pbmcgRFZJIGNvbm5lY3RvclxuIik7CisJCQlEUk1fREVCVUdfS01TKCJGb3VuZCBERlAgdGFibGUsIGFzc3VtaW5nIERWSSBjb25uZWN0b3JcbiIpOwogCiAJCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKIAkJCQkJCSAgcmFkZW9uX2dldF9lbmNvZGVyX2lkKGRldiwKQEAgLTIyMzQsNyArMjIzOCw3IEBACiAJCX0gZWxzZSB7CiAJCQl1aW50MTZfdCBjcnRfaW5mbyA9CiAJCQkJY29tYmlvc19nZXRfdGFibGVfb2Zmc2V0KGRldiwgQ09NQklPU19DUlRfSU5GT19UQUJMRSk7Ci0JCQlEUk1fREVCVUcoIkZvdW5kIENSVCB0YWJsZSwgYXNzdW1pbmcgVkdBIGNvbm5lY3RvclxuIik7CisJCQlEUk1fREVCVUdfS01TKCJGb3VuZCBDUlQgdGFibGUsIGFzc3VtaW5nIFZHQSBjb25uZWN0b3JcbiIpOwogCQkJaWYgKGNydF9pbmZvKSB7CiAJCQkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCiAJCQkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQoZGV2LApAQCAtMjI1MSw3ICsyMjU1LDcgQEAKIAkJCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9WR0EsCiAJCQkJCQkJICAgICZocGQpOwogCQkJfSBlbHNlIHsKLQkJCQlEUk1fREVCVUcoIk5vIGNvbm5lY3RvciBpbmZvIGZvdW5kXG4iKTsKKwkJCQlEUk1fREVCVUdfS01TKCJObyBjb25uZWN0b3IgaW5mbyBmb3VuZFxuIik7CiAJCQkJcmV0dXJuIGZhbHNlOwogCQkJfQogCQl9CkBAIC0yMzQwLDcgKzIzNDQsNyBAQAogCQkJCQlkZGNfaTJjLnZhbGlkID0gZmFsc2U7CiAJCQkJCWJyZWFrOwogCQkJCX0KLQkJCQlEUk1fREVCVUcoIkxDRCBEREMgSW5mbyBUYWJsZSBmb3VuZCFcbiIpOworCQkJCURSTV9ERUJVR19LTVMoIkxDRCBEREMgSW5mbyBUYWJsZSBmb3VuZCFcbiIpOwogCQkJfSBlbHNlCiAJCQkJZGRjX2kyYy52YWxpZCA9IGZhbHNlOwogCkBAIC0yOTQxLDkgKzI5NDUsOCBAQAogCQlpZiAocmV2IDwgMykgewogCQkJbWVtX2NudGwgPSBSQklPUzMyKG9mZnNldCArIDEpOwogCQkJbWVtX3NpemUgPSBSQklPUzE2KG9mZnNldCArIDUpOwotCQkJaWYgKCgocmRldi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spIDwgQ0hJUF9SMjAwKSAmJgotCQkJICAgICgoZGV2LT5wZGV2LT5kZXZpY2UgIT0gMHg1MTVlKQotCQkJICAgICAmJiAoZGV2LT5wZGV2LT5kZXZpY2UgIT0gMHg1OTY5KSkpCisJCQlpZiAoKHJkZXYtPmZhbWlseSA8IENISVBfUjIwMCkgJiYKKwkJCSAgICAhQVNJQ19JU19STjUwKHJkZXYpKQogCQkJCVdSRUczMihSQURFT05fTUVNX0NOVEwsIG1lbV9jbnRsKTsKIAkJfQogCX0KQEAgLTI5NTQsMTAgKzI5NTcsOCBAQAogCQlpZiAob2Zmc2V0KSB7CiAJCQlyZXYgPSBSQklPUzgob2Zmc2V0IC0gMSk7CiAJCQlpZiAocmV2IDwgMSkgewotCQkJCWlmICgoKHJkZXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA8Ci0JCQkJICAgICBDSElQX1IyMDApCi0JCQkJICAgICYmICgoZGV2LT5wZGV2LT5kZXZpY2UgIT0gMHg1MTVlKQotCQkJCQkmJiAoZGV2LT5wZGV2LT5kZXZpY2UgIT0gMHg1OTY5KSkpIHsKKwkJCQlpZiAoKHJkZXYtPmZhbWlseSA8IENISVBfUjIwMCkKKwkJCQkgICAgJiYgIUFTSUNfSVNfUk41MChyZGV2KSkgewogCQkJCQlpbnQgcmFtID0gMDsKIAkJCQkJaW50IG1lbV9hZGRyX21hcHBpbmcgPSAwOwogCkBAIC0zMDUwLDYgKzMwNTEsMTQgQEAKIAkgICAgcmRldi0+cGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDMwOGIpCiAJCXJldHVybjsKIAorCS8qIHF1aXJrIGZvciByczR4eCBIUCBkdjUwMDAgbGFwdG9wIHRvIG1ha2UgaXQgcmVzdW1lCisJICogLSBpdCBoYW5ncyBvbiByZXN1bWUgaW5zaWRlIHRoZSBkeW5jbGsgMSB0YWJsZS4KKwkgKi8KKwlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUlM0ODAgJiYKKwkgICAgcmRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDEwM2MgJiYKKwkgICAgcmRldi0+cGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDMwYTQpCisJCXJldHVybjsKKwogCS8qIERZTiBDTEsgMSAqLwogCXRhYmxlID0gY29tYmlvc19nZXRfdGFibGVfb2Zmc2V0KGRldiwgQ09NQklPU19EWU5fQ0xLXzFfVEFCTEUpOwogCWlmICh0YWJsZSkKQEAgLTMxMTMsMTQgKzMxMjIsMTQgQEAKIAlpZiAoKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQpICYmCiAJICAgIChyYWRlb25fY29ubmVjdG9yLT5kZXZpY2VzICYgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQpKSB7CiAJCWlmIChjb25uZWN0ZWQpIHsKLQkJCURSTV9ERUJVRygiVFYxIGNvbm5lY3RlZFxuIik7CisJCQlEUk1fREVCVUdfS01TKCJUVjEgY29ubmVjdGVkXG4iKTsKIAkJCS8qIGZpeCBtZSAqLwogCQkJYmlvc180X3NjcmF0Y2ggfD0gUkFERU9OX1RWMV9BVFRBQ0hFRF9TVklERU87CiAJCQkvKnNhdmUtPmJpb3NfNF9zY3JhdGNoIHw9IFJBREVPTl9UVjFfQVRUQUNIRURfQ09NUDsgKi8KIAkJCWJpb3NfNV9zY3JhdGNoIHw9IFJBREVPTl9UVjFfT047CiAJCQliaW9zXzVfc2NyYXRjaCB8PSBSQURFT05fQUNDX1JFUV9UVjE7CiAJCX0gZWxzZSB7Ci0JCQlEUk1fREVCVUcoIlRWMSBkaXNjb25uZWN0ZWRcbiIpOworCQkJRFJNX0RFQlVHX0tNUygiVFYxIGRpc2Nvbm5lY3RlZFxuIik7CiAJCQliaW9zXzRfc2NyYXRjaCAmPSB+UkFERU9OX1RWMV9BVFRBQ0hFRF9NQVNLOwogCQkJYmlvc181X3NjcmF0Y2ggJj0gflJBREVPTl9UVjFfT047CiAJCQliaW9zXzVfc2NyYXRjaCAmPSB+UkFERU9OX0FDQ19SRVFfVFYxOwpAQCAtMzEyOSwxMiArMzEzOCwxMiBAQAogCWlmICgocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiBBVE9NX0RFVklDRV9MQ0QxX1NVUFBPUlQpICYmCiAJICAgIChyYWRlb25fY29ubmVjdG9yLT5kZXZpY2VzICYgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JUKSkgewogCQlpZiAoY29ubmVjdGVkKSB7Ci0JCQlEUk1fREVCVUcoIkxDRDEgY29ubmVjdGVkXG4iKTsKKwkJCURSTV9ERUJVR19LTVMoIkxDRDEgY29ubmVjdGVkXG4iKTsKIAkJCWJpb3NfNF9zY3JhdGNoIHw9IFJBREVPTl9MQ0QxX0FUVEFDSEVEOwogCQkJYmlvc181X3NjcmF0Y2ggfD0gUkFERU9OX0xDRDFfT047CiAJCQliaW9zXzVfc2NyYXRjaCB8PSBSQURFT05fQUNDX1JFUV9MQ0QxOwogCQl9IGVsc2UgewotCQkJRFJNX0RFQlVHKCJMQ0QxIGRpc2Nvbm5lY3RlZFxuIik7CisJCQlEUk1fREVCVUdfS01TKCJMQ0QxIGRpc2Nvbm5lY3RlZFxuIik7CiAJCQliaW9zXzRfc2NyYXRjaCAmPSB+UkFERU9OX0xDRDFfQVRUQUNIRUQ7CiAJCQliaW9zXzVfc2NyYXRjaCAmPSB+UkFERU9OX0xDRDFfT047CiAJCQliaW9zXzVfc2NyYXRjaCAmPSB+UkFERU9OX0FDQ19SRVFfTENEMTsKQEAgLTMxNDMsMTIgKzMxNTIsMTIgQEAKIAlpZiAoKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JUKSAmJgogCSAgICAocmFkZW9uX2Nvbm5lY3Rvci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCkpIHsKIAkJaWYgKGNvbm5lY3RlZCkgewotCQkJRFJNX0RFQlVHKCJDUlQxIGNvbm5lY3RlZFxuIik7CisJCQlEUk1fREVCVUdfS01TKCJDUlQxIGNvbm5lY3RlZFxuIik7CiAJCQliaW9zXzRfc2NyYXRjaCB8PSBSQURFT05fQ1JUMV9BVFRBQ0hFRF9DT0xPUjsKIAkJCWJpb3NfNV9zY3JhdGNoIHw9IFJBREVPTl9DUlQxX09OOwogCQkJYmlvc181X3NjcmF0Y2ggfD0gUkFERU9OX0FDQ19SRVFfQ1JUMTsKIAkJfSBlbHNlIHsKLQkJCURSTV9ERUJVRygiQ1JUMSBkaXNjb25uZWN0ZWRcbiIpOworCQkJRFJNX0RFQlVHX0tNUygiQ1JUMSBkaXNjb25uZWN0ZWRcbiIpOwogCQkJYmlvc180X3NjcmF0Y2ggJj0gflJBREVPTl9DUlQxX0FUVEFDSEVEX01BU0s7CiAJCQliaW9zXzVfc2NyYXRjaCAmPSB+UkFERU9OX0NSVDFfT047CiAJCQliaW9zXzVfc2NyYXRjaCAmPSB+UkFERU9OX0FDQ19SRVFfQ1JUMTsKQEAgLTMxNTcsMTIgKzMxNjYsMTIgQEAKIAlpZiAoKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JUKSAmJgogCSAgICAocmFkZW9uX2Nvbm5lY3Rvci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCkpIHsKIAkJaWYgKGNvbm5lY3RlZCkgewotCQkJRFJNX0RFQlVHKCJDUlQyIGNvbm5lY3RlZFxuIik7CisJCQlEUk1fREVCVUdfS01TKCJDUlQyIGNvbm5lY3RlZFxuIik7CiAJCQliaW9zXzRfc2NyYXRjaCB8PSBSQURFT05fQ1JUMl9BVFRBQ0hFRF9DT0xPUjsKIAkJCWJpb3NfNV9zY3JhdGNoIHw9IFJBREVPTl9DUlQyX09OOwogCQkJYmlvc181X3NjcmF0Y2ggfD0gUkFERU9OX0FDQ19SRVFfQ1JUMjsKIAkJfSBlbHNlIHsKLQkJCURSTV9ERUJVRygiQ1JUMiBkaXNjb25uZWN0ZWRcbiIpOworCQkJRFJNX0RFQlVHX0tNUygiQ1JUMiBkaXNjb25uZWN0ZWRcbiIpOwogCQkJYmlvc180X3NjcmF0Y2ggJj0gflJBREVPTl9DUlQyX0FUVEFDSEVEX01BU0s7CiAJCQliaW9zXzVfc2NyYXRjaCAmPSB+UkFERU9OX0NSVDJfT047CiAJCQliaW9zXzVfc2NyYXRjaCAmPSB+UkFERU9OX0FDQ19SRVFfQ1JUMjsKQEAgLTMxNzEsMTIgKzMxODAsMTIgQEAKIAlpZiAoKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgQVRPTV9ERVZJQ0VfREZQMV9TVVBQT1JUKSAmJgogCSAgICAocmFkZW9uX2Nvbm5lY3Rvci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCkpIHsKIAkJaWYgKGNvbm5lY3RlZCkgewotCQkJRFJNX0RFQlVHKCJERlAxIGNvbm5lY3RlZFxuIik7CisJCQlEUk1fREVCVUdfS01TKCJERlAxIGNvbm5lY3RlZFxuIik7CiAJCQliaW9zXzRfc2NyYXRjaCB8PSBSQURFT05fREZQMV9BVFRBQ0hFRDsKIAkJCWJpb3NfNV9zY3JhdGNoIHw9IFJBREVPTl9ERlAxX09OOwogCQkJYmlvc181X3NjcmF0Y2ggfD0gUkFERU9OX0FDQ19SRVFfREZQMTsKIAkJfSBlbHNlIHsKLQkJCURSTV9ERUJVRygiREZQMSBkaXNjb25uZWN0ZWRcbiIpOworCQkJRFJNX0RFQlVHX0tNUygiREZQMSBkaXNjb25uZWN0ZWRcbiIpOwogCQkJYmlvc180X3NjcmF0Y2ggJj0gflJBREVPTl9ERlAxX0FUVEFDSEVEOwogCQkJYmlvc181X3NjcmF0Y2ggJj0gflJBREVPTl9ERlAxX09OOwogCQkJYmlvc181X3NjcmF0Y2ggJj0gflJBREVPTl9BQ0NfUkVRX0RGUDE7CkBAIC0zMTg1LDEyICszMTk0LDEyIEBACiAJaWYgKChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX0RGUDJfU1VQUE9SVCkgJiYKIAkgICAgKHJhZGVvbl9jb25uZWN0b3ItPmRldmljZXMgJiBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQpKSB7CiAJCWlmIChjb25uZWN0ZWQpIHsKLQkJCURSTV9ERUJVRygiREZQMiBjb25uZWN0ZWRcbiIpOworCQkJRFJNX0RFQlVHX0tNUygiREZQMiBjb25uZWN0ZWRcbiIpOwogCQkJYmlvc180X3NjcmF0Y2ggfD0gUkFERU9OX0RGUDJfQVRUQUNIRUQ7CiAJCQliaW9zXzVfc2NyYXRjaCB8PSBSQURFT05fREZQMl9PTjsKIAkJCWJpb3NfNV9zY3JhdGNoIHw9IFJBREVPTl9BQ0NfUkVRX0RGUDI7CiAJCX0gZWxzZSB7Ci0JCQlEUk1fREVCVUcoIkRGUDIgZGlzY29ubmVjdGVkXG4iKTsKKwkJCURSTV9ERUJVR19LTVMoIkRGUDIgZGlzY29ubmVjdGVkXG4iKTsKIAkJCWJpb3NfNF9zY3JhdGNoICY9IH5SQURFT05fREZQMl9BVFRBQ0hFRDsKIAkJCWJpb3NfNV9zY3JhdGNoICY9IH5SQURFT05fREZQMl9PTjsKIAkJCWJpb3NfNV9zY3JhdGNoICY9IH5SQURFT05fQUNDX1JFUV9ERlAyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCmluZGV4IGY1OGY4YmQuLjIzOTVjODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogCQltb2RlLT50eXBlID0gRFJNX01PREVfVFlQRV9QUkVGRVJSRUQgfCBEUk1fTU9ERV9UWVBFX0RSSVZFUjsKIAkJZHJtX21vZGVfc2V0X25hbWUobW9kZSk7CiAKLQkJRFJNX0RFQlVHKCJBZGRpbmcgbmF0aXZlIHBhbmVsIG1vZGUgJXNcbiIsIG1vZGUtPm5hbWUpOworCQlEUk1fREVCVUdfS01TKCJBZGRpbmcgbmF0aXZlIHBhbmVsIG1vZGUgJXNcbiIsIG1vZGUtPm5hbWUpOwogCX0gZWxzZSBpZiAobmF0aXZlX21vZGUtPmhkaXNwbGF5ICE9IDAgJiYKIAkJICAgbmF0aXZlX21vZGUtPnZkaXNwbGF5ICE9IDApIHsKIAkJLyogbWFjIGxhcHRvcHMgd2l0aG91dCBhbiBlZGlkICovCkBAIC0yMjYsNyArMjI2LDcgQEAKIAkJICovCiAJCW1vZGUgPSBkcm1fY3Z0X21vZGUoZGV2LCBuYXRpdmVfbW9kZS0+aGRpc3BsYXksIG5hdGl2ZV9tb2RlLT52ZGlzcGxheSwgNjAsIHRydWUsIGZhbHNlLCBmYWxzZSk7CiAJCW1vZGUtPnR5cGUgPSBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRCB8IERSTV9NT0RFX1RZUEVfRFJJVkVSOwotCQlEUk1fREVCVUcoIkFkZGluZyBjdnQgYXBwcm94aW1hdGlvbiBvZiBuYXRpdmUgcGFuZWwgbW9kZSAlc1xuIiwgbW9kZS0+bmFtZSk7CisJCURSTV9ERUJVR19LTVMoIkFkZGluZyBjdnQgYXBwcm94aW1hdGlvbiBvZiBuYXRpdmUgcGFuZWwgbW9kZSAlc1xuIiwgbW9kZS0+bmFtZSk7CiAJfQogCXJldHVybiBtb2RlOwogfQpAQCAtMzEyLDYgKzMxMiwyMCBAQAogCQl9CiAJfQogCisJaWYgKHByb3BlcnR5ID09IHJkZXYtPm1vZGVfaW5mby51bmRlcnNjYW5fcHJvcGVydHkpIHsKKwkJLyogbmVlZCB0byBmaW5kIGRpZ2l0YWwgZW5jb2RlciBvbiBjb25uZWN0b3IgKi8KKwkJZW5jb2RlciA9IHJhZGVvbl9maW5kX2VuY29kZXIoY29ubmVjdG9yLCBEUk1fTU9ERV9FTkNPREVSX1RNRFMpOworCQlpZiAoIWVuY29kZXIpCisJCQlyZXR1cm4gMDsKKworCQlyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCisJCWlmIChyYWRlb25fZW5jb2Rlci0+dW5kZXJzY2FuX3R5cGUgIT0gdmFsKSB7CisJCQlyYWRlb25fZW5jb2Rlci0+dW5kZXJzY2FuX3R5cGUgPSB2YWw7CisJCQlyYWRlb25fcHJvcGVydHlfY2hhbmdlX21vZGUoJnJhZGVvbl9lbmNvZGVyLT5iYXNlKTsKKwkJfQorCX0KKwogCWlmIChwcm9wZXJ0eSA9PSByZGV2LT5tb2RlX2luZm8udHZfc3RkX3Byb3BlcnR5KSB7CiAJCWVuY29kZXIgPSByYWRlb25fZmluZF9lbmNvZGVyKGNvbm5lY3RvciwgRFJNX01PREVfRU5DT0RFUl9UVkRBQyk7CiAJCWlmICghZW5jb2RlcikgewpAQCAtNTIyLDcgKzUzNiw3IEBACiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlcjsKIAllbnVtIHJhZGVvbl9ybXhfdHlwZSBybXhfdHlwZTsKIAotCURSTV9ERUJVRygiXG4iKTsKKwlEUk1fREVCVUdfS01TKCJcbiIpOwogCWlmIChwcm9wZXJ0eSAhPSBkZXYtPm1vZGVfY29uZmlnLnNjYWxpbmdfbW9kZV9wcm9wZXJ0eSkKIAkJcmV0dXJuIDA7CiAKQEAgLTc3MSwxNCArNzg1LDE0IEBACiAJCQl9IGVsc2UKIAkJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKIAotCQkJLyogbXVsdGlwbGUgY29ubmVjdG9ycyBvbiB0aGUgc2FtZSBlbmNvZGVyIHdpdGggdGhlIHNhbWUgZGRjIGxpbmUKLQkJCSAqIFRoaXMgdGVuZHMgdG8gYmUgSERNSSBhbmQgRFZJIG9uIHRoZSBzYW1lIGVuY29kZXIgd2l0aCB0aGUKLQkJCSAqIHNhbWUgZGRjIGxpbmUuICBJZiB0aGUgZWRpZCBzYXlzIEhETUksIGNvbnNpZGVyIHRoZSBIRE1JIHBvcnQKLQkJCSAqIGNvbm5lY3RlZCBhbmQgdGhlIERWSSBwb3J0IGRpc2Nvbm5lY3RlZC4gIElmIHRoZSBlZGlkIGRvZXNuJ3QKLQkJCSAqIHNheSBIRE1JLCB2aWNlIHZlcnNhLgorCQkJLyogVGhpcyBnZXRzIGNvbXBsaWNhdGVkLiAgV2UgaGF2ZSBib2FyZHMgd2l0aCBWR0EgKyBIRE1JIHdpdGggYQorCQkJICogc2hhcmVkIEREQyBsaW5lIGFuZCB3ZSBoYXZlIGJvYXJkcyB3aXRoIERWSS1EICsgSERNSSB3aXRoIGEgc2hhcmVkCisJCQkgKiBEREMgbGluZS4gIFRoZSBsYXR0ZXIgaXMgbW9yZSBjb21wbGV4IGJlY2F1c2Ugd2l0aCBEVkk8LT5IRE1JIGFkYXB0ZXJzCisJCQkgKiB5b3UgZG9uJ3QgcmVhbGx5IGtub3cgd2hhdCdzIGNvbm5lY3RlZCB0byB3aGljaCBwb3J0IGFzIGJvdGggYXJlIGRpZ2l0YWwuCiAJCQkgKi8KIAkJCWlmIChyYWRlb25fY29ubmVjdG9yLT5zaGFyZWRfZGRjICYmIChyZXQgPT0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQpKSB7CiAJCQkJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCQkJCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAkJCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqbGlzdF9jb25uZWN0b3I7CiAJCQkJc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKmxpc3RfcmFkZW9uX2Nvbm5lY3RvcjsKIAkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxpc3RfY29ubmVjdG9yLCAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgewpAQCAtNzg4LDE1ICs4MDIsMTAgQEAKIAkJCQkJaWYgKGxpc3RfcmFkZW9uX2Nvbm5lY3Rvci0+c2hhcmVkX2RkYyAmJgogCQkJCQkgICAgKGxpc3RfcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+cmVjLmkyY19pZCA9PQogCQkJCQkgICAgIHJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMtPnJlYy5pMmNfaWQpKSB7Ci0JCQkJCQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkpIHsKLQkJCQkJCQlpZiAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRCkgewotCQkJCQkJCQlrZnJlZShyYWRlb25fY29ubmVjdG9yLT5lZGlkKTsKLQkJCQkJCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IE5VTEw7Ci0JCQkJCQkJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwotCQkJCQkJCX0KLQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJaWYgKChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQSkgfHwKLQkJCQkJCQkgICAgKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0hETUlCKSkgeworCQkJCQkJLyogY2FzZXMgd2hlcmUgYm90aCBjb25uZWN0b3JzIGFyZSBkaWdpdGFsICovCisJCQkJCQlpZiAobGlzdF9jb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EpIHsKKwkJCQkJCQkvKiBocGQgaXMgb3VyIG9ubHkgb3B0aW9uIGluIHRoaXMgY2FzZSAqLworCQkJCQkJCWlmICghcmFkZW9uX2hwZF9zZW5zZShyZGV2LCByYWRlb25fY29ubmVjdG9yLT5ocGQuaHBkKSkgewogCQkJCQkJCQlrZnJlZShyYWRlb25fY29ubmVjdG9yLT5lZGlkKTsKIAkJCQkJCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IE5VTEw7CiAJCQkJCQkJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwpAQCAtMTA4Nyw2ICsxMDk2LDggQEAKIAkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5sb2FkX2RldGVjdF9wcm9wZXJ0eSwKIAkJCQkJICAgICAgMSk7CisJCS8qIG5vIEhQRCBvbiBhbmFsb2cgY29ubmVjdG9ycyAqLworCQlyYWRlb25fY29ubmVjdG9yLT5ocGQuaHBkID0gUkFERU9OX0hQRF9OT05FOwogCQljb25uZWN0b3ItPnBvbGxlZCA9IERSTV9DT05ORUNUT1JfUE9MTF9DT05ORUNUOwogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklBOgpAQCAtMTEwMSw2ICsxMTEyLDggQEAKIAkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5sb2FkX2RldGVjdF9wcm9wZXJ0eSwKIAkJCQkJICAgICAgMSk7CisJCS8qIG5vIEhQRCBvbiBhbmFsb2cgY29ubmVjdG9ycyAqLworCQlyYWRlb25fY29ubmVjdG9yLT5ocGQuaHBkID0gUkFERU9OX0hQRF9OT05FOwogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJOgogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0RWSUQ6CkBAIC0xMTIxLDYgKzExMzQsMTAgQEAKIAkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5jb2hlcmVudF9tb2RlX3Byb3BlcnR5LAogCQkJCQkgICAgICAxKTsKKwkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKKwkJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby51bmRlcnNjYW5fcHJvcGVydHksCisJCQkJCQkgICAgICBVTkRFUlNDQU5fQVVUTyk7CiAJCWlmIChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSkgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGFjX2xvYWRfZGV0ZWN0ID0gdHJ1ZTsKIAkJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLApAQCAtMTE0Niw2ICsxMTYzLDEwIEBACiAJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAogCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8uY29oZXJlbnRfbW9kZV9wcm9wZXJ0eSwKIAkJCQkJICAgICAgMSk7CisJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQorCQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCisJCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8udW5kZXJzY2FuX3Byb3BlcnR5LAorCQkJCQkJICAgICAgVU5ERVJTQ0FOX0FVVE8pOwogCQlzdWJwaXhlbF9vcmRlciA9IFN1YlBpeGVsSG9yaXpvbnRhbFJHQjsKIAkJYnJlYWs7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQ6CkBAIC0xMTc3LDYgKzExOTgsMTAgQEAKIAkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5jb2hlcmVudF9tb2RlX3Byb3BlcnR5LAogCQkJCQkgICAgICAxKTsKKwkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKKwkJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby51bmRlcnNjYW5fcHJvcGVydHksCisJCQkJCQkgICAgICBVTkRFUlNDQU5fQVVUTyk7CiAJCWJyZWFrOwogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTzoKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9Db21wb3NpdGU6CkBAIC0xMTkxLDYgKzEyMTYsOCBAQAogCQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8udHZfc3RkX3Byb3BlcnR5LAogCQkJCQkJICAgICAgcmFkZW9uX2F0b21iaW9zX2dldF90dl9pbmZvKHJkZXYpKTsKKwkJCS8qIG5vIEhQRCBvbiBhbmFsb2cgY29ubmVjdG9ycyAqLworCQkJcmFkZW9uX2Nvbm5lY3Rvci0+aHBkLmhwZCA9IFJBREVPTl9IUERfTk9ORTsKIAkJfQogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTOgpAQCAtMTIxNCw3ICsxMjQxLDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JaWYgKGhwZC0+aHBkID09IFJBREVPTl9IUERfTk9ORSkgeworCWlmIChyYWRlb25fY29ubmVjdG9yLT5ocGQuaHBkID09IFJBREVPTl9IUERfTk9ORSkgewogCQlpZiAoaTJjX2J1cy0+dmFsaWQpCiAJCQljb25uZWN0b3ItPnBvbGxlZCA9IERSTV9DT05ORUNUT1JfUE9MTF9DT05ORUNUOwogCX0gZWxzZQpAQCAtMTI4MSw2ICsxMzA4LDggQEAKIAkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5sb2FkX2RldGVjdF9wcm9wZXJ0eSwKIAkJCQkJICAgICAgMSk7CisJCS8qIG5vIEhQRCBvbiBhbmFsb2cgY29ubmVjdG9ycyAqLworCQlyYWRlb25fY29ubmVjdG9yLT5ocGQuaHBkID0gUkFERU9OX0hQRF9OT05FOwogCQljb25uZWN0b3ItPnBvbGxlZCA9IERSTV9DT05ORUNUT1JfUE9MTF9DT05ORUNUOwogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklBOgpAQCAtMTI5NSw2ICsxMzI0LDggQEAKIAkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5sb2FkX2RldGVjdF9wcm9wZXJ0eSwKIAkJCQkJICAgICAgMSk7CisJCS8qIG5vIEhQRCBvbiBhbmFsb2cgY29ubmVjdG9ycyAqLworCQlyYWRlb25fY29ubmVjdG9yLT5ocGQuaHBkID0gUkFERU9OX0hQRF9OT05FOwogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJOgogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0RWSUQ6CkBAIC0xMzMzLDYgKzEzNjQsOCBAQAogCQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8udHZfc3RkX3Byb3BlcnR5LAogCQkJCQkJICAgICAgcmFkZW9uX2NvbWJpb3NfZ2V0X3R2X2luZm8ocmRldikpOworCQkJLyogbm8gSFBEIG9uIGFuYWxvZyBjb25uZWN0b3JzICovCisJCQlyYWRlb25fY29ubmVjdG9yLT5ocGQuaHBkID0gUkFERU9OX0hQRF9OT05FOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0xWRFM6CkBAIC0xMzUwLDcgKzEzODMsNyBAQAogCQlicmVhazsKIAl9CiAKLQlpZiAoaHBkLT5ocGQgPT0gUkFERU9OX0hQRF9OT05FKSB7CisJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmhwZC5ocGQgPT0gUkFERU9OX0hQRF9OT05FKSB7CiAJCWlmIChpMmNfYnVzLT52YWxpZCkKIAkJCWNvbm5lY3Rvci0+cG9sbGVkID0gRFJNX0NPTk5FQ1RPUl9QT0xMX0NPTk5FQ1Q7CiAJfSBlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYwppbmRleCAyZjA0MmEzLi5lYjZiOWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NwLmMKQEAgLTIxMjAsOCArMjEyMCw4IEBACiAJZWxzZQogCQlkZXZfcHJpdi0+ZmxhZ3MgfD0gUkFERU9OX0lTX1BDSTsKIAotCXJldCA9IGRybV9hZGRtYXAoZGV2LCBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KGRldiwgMiksCi0JCQkgZHJtX2dldF9yZXNvdXJjZV9sZW4oZGV2LCAyKSwgX0RSTV9SRUdJU1RFUlMsCisJcmV0ID0gZHJtX2FkZG1hcChkZXYsIHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBkZXYsIDIpLAorCQkJIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wZGV2LCAyKSwgX0RSTV9SRUdJU1RFUlMsCiAJCQkgX0RSTV9SRUFEX09OTFkgfCBfRFJNX0RSSVZFUiwgJmRldl9wcml2LT5tbWlvKTsKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CkBAIC0yMTk0LDkgKzIxOTQsOSBAQAogCiAJZGV2X3ByaXYtPmdhcnRfaW5mby50YWJsZV9zaXplID0gUkFERU9OX1BDSUdBUlRfVEFCTEVfU0laRTsKIAotCWRldl9wcml2LT5mYl9hcGVyX29mZnNldCA9IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKKwlkZXZfcHJpdi0+ZmJfYXBlcl9vZmZzZXQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCAwKTsKIAlyZXQgPSBkcm1fYWRkbWFwKGRldiwgZGV2X3ByaXYtPmZiX2FwZXJfb2Zmc2V0LAotCQkJIGRybV9nZXRfcmVzb3VyY2VfbGVuKGRldiwgMCksIF9EUk1fRlJBTUVfQlVGRkVSLAorCQkJIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wZGV2LCAwKSwgX0RSTV9GUkFNRV9CVUZGRVIsCiAJCQkgX0RSTV9XUklURV9DT01CSU5JTkcsICZtYXApOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKaW5kZXggNWYzMTczMS4uYTY0ODExYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKQEAgLTIyNiwyMCArMjI2LDIwIEBACiB7CiAJdTY0IHNpemVfYWYsIHNpemVfYmY7CiAKLQlzaXplX2FmID0gMHhGRkZGRkZGRiAtIG1jLT52cmFtX2VuZDsKLQlzaXplX2JmID0gbWMtPnZyYW1fc3RhcnQ7CisJc2l6ZV9hZiA9ICgoMHhGRkZGRkZGRiAtIG1jLT52cmFtX2VuZCkgKyBtYy0+Z3R0X2Jhc2VfYWxpZ24pICYgfm1jLT5ndHRfYmFzZV9hbGlnbjsKKwlzaXplX2JmID0gbWMtPnZyYW1fc3RhcnQgJiB+bWMtPmd0dF9iYXNlX2FsaWduOwogCWlmIChzaXplX2JmID4gc2l6ZV9hZikgewogCQlpZiAobWMtPmd0dF9zaXplID4gc2l6ZV9iZikgewogCQkJZGV2X3dhcm4ocmRldi0+ZGV2LCAibGltaXRpbmcgR1RUXG4iKTsKIAkJCW1jLT5ndHRfc2l6ZSA9IHNpemVfYmY7CiAJCX0KLQkJbWMtPmd0dF9zdGFydCA9IG1jLT52cmFtX3N0YXJ0IC0gbWMtPmd0dF9zaXplOworCQltYy0+Z3R0X3N0YXJ0ID0gKG1jLT52cmFtX3N0YXJ0ICYgfm1jLT5ndHRfYmFzZV9hbGlnbikgLSBtYy0+Z3R0X3NpemU7CiAJfSBlbHNlIHsKIAkJaWYgKG1jLT5ndHRfc2l6ZSA+IHNpemVfYWYpIHsKIAkJCWRldl93YXJuKHJkZXYtPmRldiwgImxpbWl0aW5nIEdUVFxuIik7CiAJCQltYy0+Z3R0X3NpemUgPSBzaXplX2FmOwogCQl9Ci0JCW1jLT5ndHRfc3RhcnQgPSBtYy0+dnJhbV9lbmQgKyAxOworCQltYy0+Z3R0X3N0YXJ0ID0gKG1jLT52cmFtX2VuZCArIDEgKyBtYy0+Z3R0X2Jhc2VfYWxpZ24pICYgfm1jLT5ndHRfYmFzZV9hbGlnbjsKIAl9CiAJbWMtPmd0dF9lbmQgPSBtYy0+Z3R0X3N0YXJ0ICsgbWMtPmd0dF9zaXplIC0gMTsKIAlkZXZfaW5mbyhyZGV2LT5kZXYsICJHVFQ6ICVsbHVNIDB4JTA4bGxYIC0gMHglMDhsbFhcbiIsCkBAIC00MTUsNiArNDE1LDIyIEBACiAJcmV0dXJuIHI7CiB9CiAKK3N0YXRpYyB2b2lkIGNhaWxfaW9yZWdfd3JpdGUoc3RydWN0IGNhcmRfaW5mbyAqaW5mbywgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2YWwpCit7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBpbmZvLT5kZXYtPmRldl9wcml2YXRlOworCisJV1JFRzMyX0lPKHJlZyo0LCB2YWwpOworfQorCitzdGF0aWMgdWludDMyX3QgY2FpbF9pb3JlZ19yZWFkKHN0cnVjdCBjYXJkX2luZm8gKmluZm8sIHVpbnQzMl90IHJlZykKK3sKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGluZm8tPmRldi0+ZGV2X3ByaXZhdGU7CisJdWludDMyX3QgcjsKKworCXIgPSBSUkVHMzJfSU8ocmVnKjQpOworCXJldHVybiByOworfQorCiBpbnQgcmFkZW9uX2F0b21iaW9zX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJc3RydWN0IGNhcmRfaW5mbyAqYXRvbV9jYXJkX2luZm8gPQpAQCAtNDI3LDYgKzQ0MywxNSBAQAogCWF0b21fY2FyZF9pbmZvLT5kZXYgPSByZGV2LT5kZGV2OwogCWF0b21fY2FyZF9pbmZvLT5yZWdfcmVhZCA9IGNhaWxfcmVnX3JlYWQ7CiAJYXRvbV9jYXJkX2luZm8tPnJlZ193cml0ZSA9IGNhaWxfcmVnX3dyaXRlOworCS8qIG5lZWRlZCBmb3IgaWlvIG9wcyAqLworCWlmIChyZGV2LT5yaW9fbWVtKSB7CisJCWF0b21fY2FyZF9pbmZvLT5pb3JlZ19yZWFkID0gY2FpbF9pb3JlZ19yZWFkOworCQlhdG9tX2NhcmRfaW5mby0+aW9yZWdfd3JpdGUgPSBjYWlsX2lvcmVnX3dyaXRlOworCX0gZWxzZSB7CisJCURSTV9FUlJPUigiVW5hYmxlIHRvIGZpbmQgUENJIEkvTyBCQVI7IHVzaW5nIE1NSU8gZm9yIEFUT00gSUlPXG4iKTsKKwkJYXRvbV9jYXJkX2luZm8tPmlvcmVnX3JlYWQgPSBjYWlsX3JlZ19yZWFkOworCQlhdG9tX2NhcmRfaW5mby0+aW9yZWdfd3JpdGUgPSBjYWlsX3JlZ193cml0ZTsKKwl9CiAJYXRvbV9jYXJkX2luZm8tPm1jX3JlYWQgPSBjYWlsX21jX3JlYWQ7CiAJYXRvbV9jYXJkX2luZm8tPm1jX3dyaXRlID0gY2FpbF9tY193cml0ZTsKIAlhdG9tX2NhcmRfaW5mby0+cGxsX3JlYWQgPSBjYWlsX3BsbF9yZWFkOwpAQCAtNTczLDcgKzU5OCw3IEBACiAJCSAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJICAgICAgIHVpbnQzMl90IGZsYWdzKQogewotCWludCByOworCWludCByLCBpOwogCWludCBkbWFfYml0czsKIAogCXJkZXYtPnNodXRkb3duID0gZmFsc2U7CkBAIC02NTAsOCArNjc1LDggQEAKIAogCS8qIFJlZ2lzdGVycyBtYXBwaW5nICovCiAJLyogVE9ETzogYmxvY2sgdXNlcnNwYWNlIG1hcHBpbmcgb2YgaW8gcmVnaXN0ZXIgKi8KLQlyZGV2LT5ybW1pb19iYXNlID0gZHJtX2dldF9yZXNvdXJjZV9zdGFydChyZGV2LT5kZGV2LCAyKTsKLQlyZGV2LT5ybW1pb19zaXplID0gZHJtX2dldF9yZXNvdXJjZV9sZW4ocmRldi0+ZGRldiwgMik7CisJcmRldi0+cm1taW9fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChyZGV2LT5wZGV2LCAyKTsKKwlyZGV2LT5ybW1pb19zaXplID0gcGNpX3Jlc291cmNlX2xlbihyZGV2LT5wZGV2LCAyKTsKIAlyZGV2LT5ybW1pbyA9IGlvcmVtYXAocmRldi0+cm1taW9fYmFzZSwgcmRldi0+cm1taW9fc2l6ZSk7CiAJaWYgKHJkZXYtPnJtbWlvID09IE5VTEwpIHsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC02NTksNiArNjg0LDE3IEBACiAJRFJNX0lORk8oInJlZ2lzdGVyIG1taW8gYmFzZTogMHglMDhYXG4iLCAodWludDMyX3QpcmRldi0+cm1taW9fYmFzZSk7CiAJRFJNX0lORk8oInJlZ2lzdGVyIG1taW8gc2l6ZTogJXVcbiIsICh1bnNpZ25lZClyZGV2LT5ybW1pb19zaXplKTsKIAorCS8qIGlvIHBvcnQgbWFwcGluZyAqLworCWZvciAoaSA9IDA7IGkgPCBERVZJQ0VfQ09VTlRfUkVTT1VSQ0U7IGkrKykgeworCQlpZiAocGNpX3Jlc291cmNlX2ZsYWdzKHJkZXYtPnBkZXYsIGkpICYgSU9SRVNPVVJDRV9JTykgeworCQkJcmRldi0+cmlvX21lbV9zaXplID0gcGNpX3Jlc291cmNlX2xlbihyZGV2LT5wZGV2LCBpKTsKKwkJCXJkZXYtPnJpb19tZW0gPSBwY2lfaW9tYXAocmRldi0+cGRldiwgaSwgcmRldi0+cmlvX21lbV9zaXplKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChyZGV2LT5yaW9fbWVtID09IE5VTEwpCisJCURSTV9FUlJPUigiVW5hYmxlIHRvIGZpbmQgUENJIEkvTyBCQVJcbiIpOworCiAJLyogaWYgd2UgaGF2ZSA+IDEgVkdBIGNhcmRzLCB0aGVuIGRpc2FibGUgdGhlIHJhZGVvbiBWR0EgcmVzb3VyY2VzICovCiAJLyogdGhpcyB3aWxsIGZhaWwgZm9yIGNhcmRzIHRoYXQgYXJlbid0IFZHQSBjbGFzcyBkZXZpY2VzLCBqdXN0CiAJICogaWdub3JlIGl0ICovCkBAIC03MDEsNiArNzM3LDkgQEAKIAlkZXN0cm95X3dvcmtxdWV1ZShyZGV2LT53cSk7CiAJdmdhX3N3aXRjaGVyb29fdW5yZWdpc3Rlcl9jbGllbnQocmRldi0+cGRldik7CiAJdmdhX2NsaWVudF9yZWdpc3RlcihyZGV2LT5wZGV2LCBOVUxMLCBOVUxMLCBOVUxMKTsKKwlpZiAocmRldi0+cmlvX21lbSkKKwkJcGNpX2lvdW5tYXAocmRldi0+cGRldiwgcmRldi0+cmlvX21lbSk7CisJcmRldi0+cmlvX21lbSA9IE5VTEw7CiAJaW91bm1hcChyZGV2LT5ybW1pbyk7CiAJcmRldi0+cm1taW8gPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCmluZGV4IDgxNTRjZGYuLjc0ZGFjOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKQEAgLTQyLDcgKzQyLDcgQEAKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IGk7CiAKLQlEUk1fREVCVUcoIiVkXG4iLCByYWRlb25fY3J0Yy0+Y3J0Y19pZCk7CisJRFJNX0RFQlVHX0tNUygiJWRcbiIsIHJhZGVvbl9jcnRjLT5jcnRjX2lkKTsKIAlXUkVHMzIoQVZJVk9fRENfTFVUQV9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAwKTsKIAogCVdSRUczMihBVklWT19EQ19MVVRBX0JMQUNLX09GRlNFVF9CTFVFICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAwKTsKQEAgLTc1LDcgKzc1LDcgQEAKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IGk7CiAKLQlEUk1fREVCVUcoIiVkXG4iLCByYWRlb25fY3J0Yy0+Y3J0Y19pZCk7CisJRFJNX0RFQlVHX0tNUygiJWRcbiIsIHJhZGVvbl9jcnRjLT5jcnRjX2lkKTsKIAlXUkVHMzIoRVZFUkdSRUVOX0RDX0xVVF9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAwKTsKIAogCVdSRUczMihFVkVSR1JFRU5fRENfTFVUX0JMQUNLX09GRlNFVF9CTFVFICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAwKTsKQEAgLTQ2OSw3ICs0NjksNyBAQAogCXVpbnQzMl90IHBvc3RfZGl2OwogCXUzMiBwbGxfb3V0X21pbiwgcGxsX291dF9tYXg7CiAKLQlEUk1fREVCVUcoIlBMTCBmcmVxICVsbHUgJXUgJXVcbiIsIGZyZXEsIHBsbC0+bWluX3JlZl9kaXYsIHBsbC0+bWF4X3JlZl9kaXYpOworCURSTV9ERUJVR19LTVMoIlBMTCBmcmVxICVsbHUgJXUgJXVcbiIsIGZyZXEsIHBsbC0+bWluX3JlZl9kaXYsIHBsbC0+bWF4X3JlZl9kaXYpOwogCWZyZXEgPSBmcmVxICogMTAwMDsKIAogCWlmIChwbGwtPmZsYWdzICYgUkFERU9OX1BMTF9JU19MQ0QpIHsKQEAgLTU1OCwxNSArNTU4LDE3IEBACiAJCQkJCWN1cnJlbnRfZnJlcSA9IHJhZGVvbl9kaXYodG1wLCByZWZfZGl2ICogcG9zdF9kaXYpOwogCiAJCQkJCWlmIChwbGwtPmZsYWdzICYgUkFERU9OX1BMTF9QUkVGRVJfQ0xPU0VTVF9MT1dFUikgewotCQkJCQkJZXJyb3IgPSBmcmVxIC0gY3VycmVudF9mcmVxOwotCQkJCQkJZXJyb3IgPSBlcnJvciA8IDAgPyAweGZmZmZmZmZmIDogZXJyb3I7CisJCQkJCQlpZiAoZnJlcSA8IGN1cnJlbnRfZnJlcSkKKwkJCQkJCQllcnJvciA9IDB4ZmZmZmZmZmY7CisJCQkJCQllbHNlCisJCQkJCQkJZXJyb3IgPSBmcmVxIC0gY3VycmVudF9mcmVxOwogCQkJCQl9IGVsc2UKIAkJCQkJCWVycm9yID0gYWJzKGN1cnJlbnRfZnJlcSAtIGZyZXEpOwogCQkJCQl2Y29fZGlmZiA9IGFicyh2Y28gLSBiZXN0X3Zjbyk7CiAKIAkJCQkJaWYgKChiZXN0X3ZjbyA9PSAwICYmIGVycm9yIDwgYmVzdF9lcnJvcikgfHwKIAkJCQkJICAgIChiZXN0X3ZjbyAhPSAwICYmCi0JCQkJCSAgICAgKGVycm9yIDwgYmVzdF9lcnJvciAtIDEwMCB8fAorCQkJCQkgICAgICgoYmVzdF9lcnJvciA+IDEwMCAmJiBlcnJvciA8IGJlc3RfZXJyb3IgLSAxMDApIHx8CiAJCQkJCSAgICAgIChhYnMoZXJyb3IgLSBiZXN0X2Vycm9yKSA8IDEwMCAmJiB2Y29fZGlmZiA8IGJlc3RfdmNvX2RpZmYpKSkpIHsKIAkJCQkJCWJlc3RfcG9zdF9kaXYgPSBwb3N0X2RpdjsKIAkJCQkJCWJlc3RfcmVmX2RpdiA9IHJlZl9kaXY7CkBAIC04MDMsNyArODA1LDcgQEAKIAkqcmVmX2Rpdl9wID0gcmVmX2RpdjsKIAkqcG9zdF9kaXZfcCA9IHBvc3RfZGl2OwogCi0JRFJNX0RFQlVHKCIldSAlZC4lZCwgJWQsICVkXG4iLCAqZG90X2Nsb2NrX3AsICpmYl9kaXZfcCwgKmZyYWNfZmJfZGl2X3AsICpyZWZfZGl2X3AsICpwb3N0X2Rpdl9wKTsKKwlEUk1fREVCVUdfS01TKCIldSAlZC4lZCwgJWQsICVkXG4iLCAqZG90X2Nsb2NrX3AsICpmYl9kaXZfcCwgKmZyYWNfZmJfZGl2X3AsICpyZWZfZGl2X3AsICpwb3N0X2Rpdl9wKTsKIH0KIAogdm9pZCByYWRlb25fY29tcHV0ZV9wbGwoc3RydWN0IHJhZGVvbl9wbGwgKnBsbCwKQEAgLTkxOSw2ICs5MjEsMTIgQEAKIAl7IFRWX1NURF9TRUNBTSwgInNlY2FtIiB9LAogfTsKIAorc3RhdGljIHN0cnVjdCBkcm1fcHJvcF9lbnVtX2xpc3QgcmFkZW9uX3VuZGVyc2Nhbl9lbnVtX2xpc3RbXSA9Cit7CXsgVU5ERVJTQ0FOX09GRiwgIm9mZiIgfSwKKwl7IFVOREVSU0NBTl9PTiwgIm9uIiB9LAorCXsgVU5ERVJTQ0FOX0FVVE8sICJhdXRvIiB9LAorfTsKKwogc3RhdGljIGludCByYWRlb25fbW9kZXNldF9jcmVhdGVfcHJvcHMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJaW50IGksIHN6OwpAQCAtOTcyLDYgKzk4MCwxOCBAQAogCQkJCSAgICAgIHJhZGVvbl90dl9zdGRfZW51bV9saXN0W2ldLm5hbWUpOwogCX0KIAorCXN6ID0gQVJSQVlfU0laRShyYWRlb25fdW5kZXJzY2FuX2VudW1fbGlzdCk7CisJcmRldi0+bW9kZV9pbmZvLnVuZGVyc2Nhbl9wcm9wZXJ0eSA9CisJCWRybV9wcm9wZXJ0eV9jcmVhdGUocmRldi0+ZGRldiwKKwkJCQkgICAgRFJNX01PREVfUFJPUF9FTlVNLAorCQkJCSAgICAidW5kZXJzY2FuIiwgc3opOworCWZvciAoaSA9IDA7IGkgPCBzejsgaSsrKSB7CisJCWRybV9wcm9wZXJ0eV9hZGRfZW51bShyZGV2LT5tb2RlX2luZm8udW5kZXJzY2FuX3Byb3BlcnR5LAorCQkJCSAgICAgIGksCisJCQkJICAgICAgcmFkZW9uX3VuZGVyc2Nhbl9lbnVtX2xpc3RbaV0udHlwZSwKKwkJCQkgICAgICByYWRlb25fdW5kZXJzY2FuX2VudW1fbGlzdFtpXS5uYW1lKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA2NywxNSArMTA4NywyNiBAQAogCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKIAlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoY3J0Yyk7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCXN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yOwogCWJvb2wgZmlyc3QgPSB0cnVlOworCXUzMiBzcmNfdiA9IDEsIGRzdF92ID0gMTsKKwl1MzIgc3JjX2ggPSAxLCBkc3RfaCA9IDE7CisKKwlyYWRlb25fY3J0Yy0+aF9ib3JkZXIgPSAwOworCXJhZGVvbl9jcnRjLT52X2JvcmRlciA9IDA7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgewotCQlyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOwogCQlpZiAoZW5jb2Rlci0+Y3J0YyAhPSBjcnRjKQogCQkJY29udGludWU7CisJCXJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CisJCWNvbm5lY3RvciA9IHJhZGVvbl9nZXRfY29ubmVjdG9yX2Zvcl9lbmNvZGVyKGVuY29kZXIpOworCQlyYWRlb25fY29ubmVjdG9yID0gdG9fcmFkZW9uX2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCiAJCWlmIChmaXJzdCkgewogCQkJLyogc2V0IHNjYWxpbmcgKi8KIAkJCWlmIChyYWRlb25fZW5jb2Rlci0+cm14X3R5cGUgPT0gUk1YX09GRikKQEAgLTEwODUsMzEgKzExMTYsNDkgQEAKIAkJCQlyYWRlb25fY3J0Yy0+cm14X3R5cGUgPSByYWRlb25fZW5jb2Rlci0+cm14X3R5cGU7CiAJCQllbHNlCiAJCQkJcmFkZW9uX2NydGMtPnJteF90eXBlID0gUk1YX09GRjsKKwkJCXNyY192ID0gY3J0Yy0+bW9kZS52ZGlzcGxheTsKKwkJCWRzdF92ID0gcmFkZW9uX2NydGMtPm5hdGl2ZV9tb2RlLnZkaXNwbGF5OworCQkJc3JjX2ggPSBjcnRjLT5tb2RlLmhkaXNwbGF5OworCQkJZHN0X2ggPSByYWRlb25fY3J0Yy0+bmF0aXZlX21vZGUudmRpc3BsYXk7CiAJCQkvKiBjb3B5IG5hdGl2ZSBtb2RlICovCiAJCQltZW1jcHkoJnJhZGVvbl9jcnRjLT5uYXRpdmVfbW9kZSwKIAkJCSAgICAgICAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlLAogCQkJCXNpemVvZihzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSkpOworCisJCQkvKiBmaXggdXAgZm9yIG92ZXJzY2FuIG9uIGhkbWkgKi8KKwkJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpICYmCisJCQkgICAgKChyYWRlb25fZW5jb2Rlci0+dW5kZXJzY2FuX3R5cGUgPT0gVU5ERVJTQ0FOX09OKSB8fAorCQkJICAgICAoKHJhZGVvbl9lbmNvZGVyLT51bmRlcnNjYW5fdHlwZSA9PSBVTkRFUlNDQU5fQVVUTykgJiYKKwkJCSAgICAgIGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpKSkpIHsKKwkJCQlyYWRlb25fY3J0Yy0+aF9ib3JkZXIgPSAobW9kZS0+aGRpc3BsYXkgPj4gNSkgKyAxNjsKKwkJCQlyYWRlb25fY3J0Yy0+dl9ib3JkZXIgPSAobW9kZS0+dmRpc3BsYXkgPj4gNSkgKyAxNjsKKwkJCQlyYWRlb25fY3J0Yy0+cm14X3R5cGUgPSBSTVhfRlVMTDsKKwkJCQlzcmNfdiA9IGNydGMtPm1vZGUudmRpc3BsYXk7CisJCQkJZHN0X3YgPSBjcnRjLT5tb2RlLnZkaXNwbGF5IC0gKHJhZGVvbl9jcnRjLT52X2JvcmRlciAqIDIpOworCQkJCXNyY19oID0gY3J0Yy0+bW9kZS5oZGlzcGxheTsKKwkJCQlkc3RfaCA9IGNydGMtPm1vZGUuaGRpc3BsYXkgLSAocmFkZW9uX2NydGMtPmhfYm9yZGVyICogMik7CisJCQl9CiAJCQlmaXJzdCA9IGZhbHNlOwogCQl9IGVsc2UgewogCQkJaWYgKHJhZGVvbl9jcnRjLT5ybXhfdHlwZSAhPSByYWRlb25fZW5jb2Rlci0+cm14X3R5cGUpIHsKIAkJCQkvKiBXQVJOSU5HOiBSaWdodCBub3cgdGhpcyBjYW4ndCBoYXBwZW4gYnV0CiAJCQkJICogaW4gdGhlIGZ1dHVyZSB3ZSBuZWVkIHRvIGNoZWNrIHRoYXQgc2NhbGluZwotCQkJCSAqIGFyZSBjb25zaXN0ZW50IGFjY3Jvc3MgZGlmZmVyZW50IGVuY29kZXIKKwkJCQkgKiBhcmUgY29uc2lzdGVudCBhY3Jvc3MgZGlmZmVyZW50IGVuY29kZXIKIAkJCQkgKiAoaWUgYWxsIGVuY29kZXIgY2FuIHdvcmsgd2l0aCB0aGUgc2FtZQogCQkJCSAqICBzY2FsaW5nKS4KIAkJCQkgKi8KLQkJCQlEUk1fRVJST1IoIlNjYWxpbmcgbm90IGNvbnNpc3RlbnQgYWNjcm9zcyBlbmNvZGVyLlxuIik7CisJCQkJRFJNX0VSUk9SKCJTY2FsaW5nIG5vdCBjb25zaXN0ZW50IGFjcm9zcyBlbmNvZGVyLlxuIik7CiAJCQkJcmV0dXJuIGZhbHNlOwogCQkJfQogCQl9CiAJfQogCWlmIChyYWRlb25fY3J0Yy0+cm14X3R5cGUgIT0gUk1YX09GRikgewogCQlmaXhlZDIwXzEyIGEsIGI7Ci0JCWEuZnVsbCA9IGRmaXhlZF9jb25zdChjcnRjLT5tb2RlLnZkaXNwbGF5KTsKLQkJYi5mdWxsID0gZGZpeGVkX2NvbnN0KHJhZGVvbl9jcnRjLT5uYXRpdmVfbW9kZS5oZGlzcGxheSk7CisJCWEuZnVsbCA9IGRmaXhlZF9jb25zdChzcmNfdik7CisJCWIuZnVsbCA9IGRmaXhlZF9jb25zdChkc3Rfdik7CiAJCXJhZGVvbl9jcnRjLT52c2MuZnVsbCA9IGRmaXhlZF9kaXYoYSwgYik7Ci0JCWEuZnVsbCA9IGRmaXhlZF9jb25zdChjcnRjLT5tb2RlLmhkaXNwbGF5KTsKLQkJYi5mdWxsID0gZGZpeGVkX2NvbnN0KHJhZGVvbl9jcnRjLT5uYXRpdmVfbW9kZS52ZGlzcGxheSk7CisJCWEuZnVsbCA9IGRmaXhlZF9jb25zdChzcmNfaCk7CisJCWIuZnVsbCA9IGRmaXhlZF9jb25zdChkc3RfaCk7CiAJCXJhZGVvbl9jcnRjLT5oc2MuZnVsbCA9IGRmaXhlZF9kaXYoYSwgYik7CiAJfSBlbHNlIHsKIAkJcmFkZW9uX2NydGMtPnZzYy5mdWxsID0gZGZpeGVkX2NvbnN0KDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYwppbmRleCBlMTY2ZmU0Li43OTU0MDNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYwpAQCAtNDYsOSArNDYsMTAgQEAKICAqIC0gMi4zLjAgLSBhZGQgTVNQT1MgKyAzRCB0ZXh0dXJlICsgcjUwMCBWQVAgcmVncwogICogLSAyLjQuMCAtIGFkZCBjcnRjIGlkIHF1ZXJ5CiAgKiAtIDIuNS4wIC0gYWRkIGdldCBhY2NlbCAyIHRvIHdvcmsgYXJvdW5kIGRkeCBicmVha2FnZSBmb3IgZXZlcmdyZWVuCisgKiAtIDIuNi4wIC0gYWRkIHRpbGluZyBjb25maWcgcXVlcnkgKHI2eHgrKSwgYWRkIGluaXRpYWwgSGlaIHN1cHBvcnQgKHIzMDAtPnI1MDApCiAgKi8KICNkZWZpbmUgS01TX0RSSVZFUl9NQUpPUgkyCi0jZGVmaW5lIEtNU19EUklWRVJfTUlOT1IJNQorI2RlZmluZSBLTVNfRFJJVkVSX01JTk9SCTYKICNkZWZpbmUgS01TX0RSSVZFUl9QQVRDSExFVkVMCTAKIGludCByYWRlb25fZHJpdmVyX2xvYWRfa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogaW50IHJhZGVvbl9kcml2ZXJfdW5sb2FkX2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKQEAgLTIzOCw3ICsyMzksNyBAQAogc3RhdGljIGludCBfX2RldmluaXQKIHJhZGVvbl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7Ci0JcmV0dXJuIGRybV9nZXRfZGV2KHBkZXYsIGVudCwgJmttc19kcml2ZXIpOworCXJldHVybiBkcm1fZ2V0X3BjaV9kZXYocGRldiwgZW50LCAma21zX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYwppbmRleCBlMGIzMGIyLi4yNjNjODA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKQEAgLTIwNSwxNCArMjA1LDE0IEBACiAJCWlmIChjb25uZWN0b3ItPmVuY29kZXIgPT0gZW5jb2RlcikgewogCQkJc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IgPSB0b19yYWRlb25fY29ubmVjdG9yKGNvbm5lY3Rvcik7CiAJCQlyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSA9IHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgcmFkZW9uX2Nvbm5lY3Rvci0+ZGV2aWNlczsKLQkJCURSTV9ERUJVRygic2V0dGluZyBhY3RpdmUgZGV2aWNlIHRvICUwOHggZnJvbSAlMDh4ICUwOHggZm9yIGVuY29kZXIgJWRcbiIsCisJCQlEUk1fREVCVUdfS01TKCJzZXR0aW5nIGFjdGl2ZSBkZXZpY2UgdG8gJTA4eCBmcm9tICUwOHggJTA4eCBmb3IgZW5jb2RlciAlZFxuIiwKIAkJCQkgIHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlLCByYWRlb25fZW5jb2Rlci0+ZGV2aWNlcywKIAkJCQkgIHJhZGVvbl9jb25uZWN0b3ItPmRldmljZXMsIGVuY29kZXItPmVuY29kZXJfdHlwZSk7CiAJCX0KIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqCitzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqCiByYWRlb25fZ2V0X2Nvbm5lY3Rvcl9mb3JfZW5jb2RlcihzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKQEAgLTEwMjEsNyArMTAyMSw3IEBACiAKIAltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CiAKLQlEUk1fREVCVUcoImVuY29kZXIgZHBtcyAlZCB0byBtb2RlICVkLCBkZXZpY2VzICUwOHgsIGFjdGl2ZV9kZXZpY2VzICUwOHhcbiIsCisJRFJNX0RFQlVHX0tNUygiZW5jb2RlciBkcG1zICVkIHRvIG1vZGUgJWQsIGRldmljZXMgJTA4eCwgYWN0aXZlX2RldmljZXMgJTA4eFxuIiwKIAkJICByYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZCwgbW9kZSwgcmFkZW9uX2VuY29kZXItPmRldmljZXMsCiAJCSAgcmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UpOwogCXN3aXRjaCAocmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQpIHsKQEAgLTE0ODQsNyArMTQ4NCw3IEBACiAJdWludDMyX3QgYmlvc18wX3NjcmF0Y2g7CiAKIAlpZiAoIWF0b21iaW9zX2RhY19sb2FkX2RldGVjdChlbmNvZGVyLCBjb25uZWN0b3IpKSB7Ci0JCURSTV9ERUJVRygiZGV0ZWN0IHJldHVybmVkIGZhbHNlIFxuIik7CisJCURSTV9ERUJVR19LTVMoImRldGVjdCByZXR1cm5lZCBmYWxzZSBcbiIpOwogCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c191bmtub3duOwogCX0KIApAQCAtMTQ5Myw3ICsxNDkzLDcgQEAKIAllbHNlCiAJCWJpb3NfMF9zY3JhdGNoID0gUlJFRzMyKFJBREVPTl9CSU9TXzBfU0NSQVRDSCk7CiAKLQlEUk1fREVCVUcoIkJpb3MgMCBzY3JhdGNoICV4ICUwOHhcbiIsIGJpb3NfMF9zY3JhdGNoLCByYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyk7CisJRFJNX0RFQlVHX0tNUygiQmlvcyAwIHNjcmF0Y2ggJXggJTA4eFxuIiwgYmlvc18wX3NjcmF0Y2gsIHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzKTsKIAlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCkgewogCQlpZiAoYmlvc18wX3NjcmF0Y2ggJiBBVE9NX1MwX0NSVDFfTUFTSykKIAkJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKQEAgLTE2OTQsNiArMTY5NCw3IEBACiAJcmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQgPSBlbmNvZGVyX2lkOwogCXJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzID0gc3VwcG9ydGVkX2RldmljZTsKIAlyYWRlb25fZW5jb2Rlci0+cm14X3R5cGUgPSBSTVhfT0ZGOworCXJhZGVvbl9lbmNvZGVyLT51bmRlcnNjYW5fdHlwZSA9IFVOREVSU0NBTl9PRkY7CiAKIAlzd2l0Y2ggKHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkKSB7CiAJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9MVkRTOgpAQCAtMTcwNyw2ICsxNzA4LDggQEAKIAkJfSBlbHNlIHsKIAkJCWRybV9lbmNvZGVyX2luaXQoZGV2LCBlbmNvZGVyLCAmcmFkZW9uX2F0b21fZW5jX2Z1bmNzLCBEUk1fTU9ERV9FTkNPREVSX1RNRFMpOwogCQkJcmFkZW9uX2VuY29kZXItPmVuY19wcml2ID0gcmFkZW9uX2F0b21iaW9zX3NldF9kaWdfaW5mbyhyYWRlb25fZW5jb2Rlcik7CisJCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKKwkJCQlyYWRlb25fZW5jb2Rlci0+dW5kZXJzY2FuX3R5cGUgPSBVTkRFUlNDQU5fQVVUTzsKIAkJfQogCQlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGVuY29kZXIsICZyYWRlb25fYXRvbV9kaWdfaGVscGVyX2Z1bmNzKTsKIAkJYnJlYWs7CkBAIC0xNzM2LDYgKzE3MzksOCBAQAogCQl9IGVsc2UgewogCQkJZHJtX2VuY29kZXJfaW5pdChkZXYsIGVuY29kZXIsICZyYWRlb25fYXRvbV9lbmNfZnVuY3MsIERSTV9NT0RFX0VOQ09ERVJfVE1EUyk7CiAJCQlyYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXYgPSByYWRlb25fYXRvbWJpb3Nfc2V0X2RpZ19pbmZvKHJhZGVvbl9lbmNvZGVyKTsKKwkJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQorCQkJCXJhZGVvbl9lbmNvZGVyLT51bmRlcnNjYW5fdHlwZSA9IFVOREVSU0NBTl9BVVRPOwogCQl9CiAJCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoZW5jb2RlciwgJnJhZGVvbl9hdG9tX2RpZ19oZWxwZXJfZnVuY3MpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMKaW5kZXggNmE3MGMwZC4uZGRjZDNiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKIGludCByYWRlb25fZHJpdmVyX2xvYWRfa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXY7Ci0JaW50IHI7CisJaW50IHIsIGFjcGlfc3RhdHVzOwogCiAJcmRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJkZXYgPT0gTlVMTCkgewpAQCAtNzcsNiArNzcsMTIgQEAKIAkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsICJGYXRhbCBlcnJvciBkdXJpbmcgR1BVIGluaXRcbiIpOwogCQlnb3RvIG91dDsKIAl9CisKKwkvKiBDYWxsIEFDUEkgbWV0aG9kcyAqLworCWFjcGlfc3RhdHVzID0gcmFkZW9uX2FjcGlfaW5pdChyZGV2KTsKKwlpZiAoYWNwaV9zdGF0dXMpCisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiRXJyb3IgZHVyaW5nIEFDUEkgbWV0aG9kcyBjYWxsXG4iKTsKKwogCS8qIEFnYWluIG1vZGVzZXRfaW5pdCBzaG91bGQgZmFpbCBvbmx5IG9uIGZhdGFsIGVycm9yCiAJICogb3RoZXJ3aXNlIGl0IHNob3VsZCBwcm92aWRlIGVub3VnaCBmdW5jdGlvbmFsaXRpZXMKIAkgKiBmb3Igc2hhZG93ZmIgdG8gcnVuCkBAIC0xMjgsMjEgKzEzNCw0MyBAQAogCQlmb3IgKGkgPSAwLCBmb3VuZCA9IDA7IGkgPCByZGV2LT5udW1fY3J0YzsgaSsrKSB7CiAJCQljcnRjID0gKHN0cnVjdCBkcm1fY3J0YyAqKW1pbmZvLT5jcnRjc1tpXTsKIAkJCWlmIChjcnRjICYmIGNydGMtPmJhc2UuaWQgPT0gdmFsdWUpIHsKLQkJCQl2YWx1ZSA9IGk7CisJCQkJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOworCQkJCXZhbHVlID0gcmFkZW9uX2NydGMtPmNydGNfaWQ7CiAJCQkJZm91bmQgPSAxOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJCWlmICghZm91bmQpIHsKLQkJCURSTV9ERUJVRygidW5rbm93biBjcnRjIGlkICVkXG4iLCB2YWx1ZSk7CisJCQlEUk1fREVCVUdfS01TKCJ1bmtub3duIGNydGMgaWQgJWRcbiIsIHZhbHVlKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX0lORk9fQUNDRUxfV09SS0lORzI6CiAJCXZhbHVlID0gcmRldi0+YWNjZWxfd29ya2luZzsKIAkJYnJlYWs7CisJY2FzZSBSQURFT05fSU5GT19USUxJTkdfQ09ORklHOgorCQlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfQ0VEQVIpCisJCQl2YWx1ZSA9IHJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4udGlsZV9jb25maWc7CisJCWVsc2UgaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1JWNzcwKQorCQkJdmFsdWUgPSByZGV2LT5jb25maWcucnY3NzAudGlsZV9jb25maWc7CisJCWVsc2UgaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApCisJCQl2YWx1ZSA9IHJkZXYtPmNvbmZpZy5yNjAwLnRpbGVfY29uZmlnOworCQllbHNlIHsKKwkJCURSTV9ERUJVR19LTVMoInRpbGluZyBjb25maWcgaXMgcjZ4eCsgb25seSFcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwljYXNlIFJBREVPTl9JTkZPX1dBTlRfSFlQRVJaOgorCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCWlmIChyZGV2LT5oeXBlcnpfZmlscCkKKwkJCXZhbHVlID0gMDsKKwkJZWxzZSB7CisJCQlyZGV2LT5oeXBlcnpfZmlscCA9IGZpbHA7CisJCQl2YWx1ZSA9IDE7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCURSTV9ERUJVRygiSW52YWxpZCByZXF1ZXN0ICVkXG4iLCBpbmZvLT5yZXF1ZXN0KTsKKwkJRFJNX0RFQlVHX0tNUygiSW52YWxpZCByZXF1ZXN0ICVkXG4iLCBpbmZvLT5yZXF1ZXN0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChEUk1fQ09QWV9UT19VU0VSKHZhbHVlX3B0ciwgJnZhbHVlLCBzaXplb2YodWludDMyX3QpKSkgewpAQCAtMTgwLDkgKzIwOCwxMSBAQAogdm9pZCByYWRlb25fZHJpdmVyX3ByZWNsb3NlX2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogeworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpZiAocmRldi0+aHlwZXJ6X2ZpbHAgPT0gZmlsZV9wcml2KQorCQlyZGV2LT5oeXBlcnpfZmlscCA9IE5VTEw7CiB9CiAKLQogLyoKICAqIFZCbGFuayByZWxhdGVkIGZ1bmN0aW9ucy4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMKaW5kZXggZTFlNTI1NS4uOTg5ZGY1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jCkBAIC0zNjIsMTAgKzM2MiwxMCBAQAogCXVpbnQzMl90IGdlbl9jbnRsX3JlZywgZ2VuX2NudGxfdmFsOwogCWludCByOwogCi0JRFJNX0RFQlVHKCJcbiIpOworCURSTV9ERUJVR19LTVMoIlxuIik7CiAJLyogbm8gZmIgYm91bmQgKi8KIAlpZiAoIWNydGMtPmZiKSB7Ci0JCURSTV9ERUJVRygiTm8gRkIgYm91bmRcbiIpOworCQlEUk1fREVCVUdfS01TKCJObyBGQiBib3VuZFxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNTI4LDcgKzUyOCw3IEBACiAJdWludDMyX3QgY3J0Y192X3N5bmNfc3RydF93aWQ7CiAJYm9vbCBpc190diA9IGZhbHNlOwogCi0JRFJNX0RFQlVHKCJcbiIpOworCURSTV9ERUJVR19LTVMoIlxuIik7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKIAkJaWYgKGVuY29kZXItPmNydGMgPT0gY3J0YykgewogCQkJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOwpAQCAtNzU3LDcgKzc1Nyw3IEBACiAJCX0KIAl9CiAKLQlEUk1fREVCVUcoIlxuIik7CisJRFJNX0RFQlVHX0tNUygiXG4iKTsKIAogCWlmICghdXNlX2Jpb3NfZGl2cykgewogCQlyYWRlb25fY29tcHV0ZV9wbGwocGxsLCBtb2RlLT5jbG9jaywKQEAgLTc3Miw3ICs3NzIsNyBAQAogCQlpZiAoIXBvc3RfZGl2LT5kaXZpZGVyKQogCQkJcG9zdF9kaXYgPSAmcG9zdF9kaXZzWzBdOwogCi0JCURSTV9ERUJVRygiZGM9JXUsIGZkPSVkLCByZD0lZCwgcGQ9JWRcbiIsCisJCURSTV9ERUJVR19LTVMoImRjPSV1LCBmZD0lZCwgcmQ9JWQsIHBkPSVkXG4iLAogCQkJICAodW5zaWduZWQpZnJlcSwKIAkJCSAgZmVlZGJhY2tfZGl2LAogCQkJICByZWZlcmVuY2VfZGl2LApAQCAtODQxLDEyICs4NDEsMTIgQEAKIAkJCSAgICAgICB8IFJBREVPTl9QMlBMTF9TTEVFUAogCQkJICAgICAgIHwgUkFERU9OX1AyUExMX0FUT01JQ19VUERBVEVfRU4pKTsKIAotCQlEUk1fREVCVUcoIldyb3RlMjogMHglMDh4IDB4JTA4eCAweCUwOHggKDB4JTA4eClcbiIsCisJCURSTV9ERUJVR19LTVMoIldyb3RlMjogMHglMDh4IDB4JTA4eCAweCUwOHggKDB4JTA4eClcbiIsCiAJCQkgICh1bnNpZ25lZClwbGxfcmVmX2RpdiwKIAkJCSAgKHVuc2lnbmVkKXBsbF9mYl9wb3N0X2RpdiwKIAkJCSAgKHVuc2lnbmVkKWh0b3RhbF9jbnRsLAogCQkJICBSUkVHMzJfUExMKFJBREVPTl9QMlBMTF9DTlRMKSk7Ci0JCURSTV9ERUJVRygiV3JvdGUyOiByZD0ldSwgZmQ9JXUsIHBkPSV1XG4iLAorCQlEUk1fREVCVUdfS01TKCJXcm90ZTI6IHJkPSV1LCBmZD0ldSwgcGQ9JXVcbiIsCiAJCQkgICh1bnNpZ25lZClwbGxfcmVmX2RpdiAmIFJBREVPTl9QMlBMTF9SRUZfRElWX01BU0ssCiAJCQkgICh1bnNpZ25lZClwbGxfZmJfcG9zdF9kaXYgJiBSQURFT05fUDJQTExfRkIwX0RJVl9NQVNLLAogCQkJICAodW5zaWduZWQpKChwbGxfZmJfcG9zdF9kaXYgJgpAQCAtOTQ3LDEyICs5NDcsMTIgQEAKIAkJCSAgICAgICB8IFJBREVPTl9QUExMX0FUT01JQ19VUERBVEVfRU4KIAkJCSAgICAgICB8IFJBREVPTl9QUExMX1ZHQV9BVE9NSUNfVVBEQVRFX0VOKSk7CiAKLQkJRFJNX0RFQlVHKCJXcm90ZTogMHglMDh4IDB4JTA4eCAweCUwOHggKDB4JTA4eClcbiIsCisJCURSTV9ERUJVR19LTVMoIldyb3RlOiAweCUwOHggMHglMDh4IDB4JTA4eCAoMHglMDh4KVxuIiwKIAkJCSAgcGxsX3JlZl9kaXYsCiAJCQkgIHBsbF9mYl9wb3N0X2RpdiwKIAkJCSAgKHVuc2lnbmVkKWh0b3RhbF9jbnRsLAogCQkJICBSUkVHMzJfUExMKFJBREVPTl9QUExMX0NOVEwpKTsKLQkJRFJNX0RFQlVHKCJXcm90ZTogcmQ9JWQsIGZkPSVkLCBwZD0lZFxuIiwKKwkJRFJNX0RFQlVHX0tNUygiV3JvdGU6IHJkPSVkLCBmZD0lZCwgcGQ9JWRcbiIsCiAJCQkgIHBsbF9yZWZfZGl2ICYgUkFERU9OX1BQTExfUkVGX0RJVl9NQVNLLAogCQkJICBwbGxfZmJfcG9zdF9kaXYgJiBSQURFT05fUFBMTF9GQjNfRElWX01BU0ssCiAJCQkgIChwbGxfZmJfcG9zdF9kaXYgJiBSQURFT05fUFBMTF9QT1NUM19ESVZfTUFTSykgPj4gMTYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfZW5jb2RlcnMuYwppbmRleCBiYWQ3N2Y0Li5iODE0OWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfZW5jb2RlcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfZW5jb2RlcnMuYwpAQCAtNDcsNyArNDcsNyBAQAogCXVpbnQzMl90IGx2ZHNfZ2VuX2NudGwsIGx2ZHNfcGxsX2NudGwsIHBpeGNsa3NfY250bCwgZGlzcF9wd3JfbWFuOwogCWludCBwYW5lbF9wd3JfZGVsYXkgPSAyMDAwOwogCWJvb2wgaXNfbWFjID0gZmFsc2U7Ci0JRFJNX0RFQlVHKCJcbiIpOworCURSTV9ERUJVR19LTVMoIlxuIik7CiAKIAlpZiAocmFkZW9uX2VuY29kZXItPmVuY19wcml2KSB7CiAJCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKQEAgLTEwOCw2ICsxMDgsNyBAQAogCQl1ZGVsYXkocGFuZWxfcHdyX2RlbGF5ICogMTAwMCk7CiAJCVdSRUczMihSQURFT05fTFZEU19HRU5fQ05UTCwgbHZkc19nZW5fY250bCk7CiAJCVdSRUczMl9QTEwoUkFERU9OX1BJWENMS1NfQ05UTCwgcGl4Y2xrc19jbnRsKTsKKwkJdWRlbGF5KHBhbmVsX3B3cl9kZWxheSAqIDEwMDApOwogCQlicmVhazsKIAl9CiAKQEAgLTE1MCw3ICsxNTEsNyBAQAogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKIAl1aW50MzJfdCBsdmRzX3BsbF9jbnRsLCBsdmRzX2dlbl9jbnRsLCBsdmRzX3NzX2dlbl9jbnRsOwogCi0JRFJNX0RFQlVHKCJcbiIpOworCURSTV9ERUJVR19LTVMoIlxuIik7CiAKIAlsdmRzX3BsbF9jbnRsID0gUlJFRzMyKFJBREVPTl9MVkRTX1BMTF9DTlRMKTsKIAlsdmRzX3BsbF9jbnRsICY9IH5SQURFT05fTFZEU19QTExfRU47CkBAIC0xNjYsNyArMTY3LDcgQEAKIAl9IGVsc2UgewogCQlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfbHZkcyAqbHZkcyA9IChzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfbHZkcyAqKXJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKIAkJaWYgKGx2ZHMpIHsKLQkJCURSTV9ERUJVRygiYmlvcyBMVkRTX0dFTl9DTlRMOiAweCV4XG4iLCBsdmRzLT5sdmRzX2dlbl9jbnRsKTsKKwkJCURSTV9ERUJVR19LTVMoImJpb3MgTFZEU19HRU5fQ05UTDogMHgleFxuIiwgbHZkcy0+bHZkc19nZW5fY250bCk7CiAJCQlsdmRzX2dlbl9jbnRsID0gbHZkcy0+bHZkc19nZW5fY250bDsKIAkJCWx2ZHNfc3NfZ2VuX2NudGwgJj0gfigoMHhmIDw8IFJBREVPTl9MVkRTX1BXUlNFUV9ERUxBWTFfU0hJRlQpIHwKIAkJCQkJICAgICAgKDB4ZiA8PCBSQURFT05fTFZEU19QV1JTRVFfREVMQVkyX1NISUZUKSk7CkBAIC0yNDksNyArMjUwLDcgQEAKIAl1aW50MzJfdCBkYWNfY250bCA9IFJSRUczMihSQURFT05fREFDX0NOVEwpOwogCXVpbnQzMl90IGRhY19tYWNyb19jbnRsID0gUlJFRzMyKFJBREVPTl9EQUNfTUFDUk9fQ05UTCk7CiAKLQlEUk1fREVCVUcoIlxuIik7CisJRFJNX0RFQlVHX0tNUygiXG4iKTsKIAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgRFJNX01PREVfRFBNU19PTjoKQEAgLTMxNCw3ICszMTUsNyBAQAogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKIAl1aW50MzJfdCBkaXNwX291dHB1dF9jbnRsLCBkYWNfY250bCwgZGFjMl9jbnRsLCBkYWNfbWFjcm9fY250bDsKIAotCURSTV9ERUJVRygiXG4iKTsKKwlEUk1fREVCVUdfS01TKCJcbiIpOwogCiAJaWYgKHJhZGVvbl9jcnRjLT5jcnRjX2lkID09IDApIHsKIAkJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1IyMDAgfHwgQVNJQ19JU19SMzAwKHJkZXYpKSB7CkBAIC00NDUsNyArNDQ2LDcgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1aW50MzJfdCBmcF9nZW5fY250bCA9IFJSRUczMihSQURFT05fRlBfR0VOX0NOVEwpOwotCURSTV9ERUJVRygiXG4iKTsKKwlEUk1fREVCVUdfS01TKCJcbiIpOwogCiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBEUk1fTU9ERV9EUE1TX09OOgpAQCAtNTAxLDcgKzUwMiw3IEBACiAJdWludDMyX3QgdG1wLCB0bWRzX3BsbF9jbnRsLCB0bWRzX3RyYW5zbWl0dGVyX2NudGwsIGZwX2dlbl9jbnRsOwogCWludCBpOwogCi0JRFJNX0RFQlVHKCJcbiIpOworCURSTV9ERUJVR19LTVMoIlxuIik7CiAKIAl0bXAgPSB0bWRzX3BsbF9jbnRsID0gUlJFRzMyKFJBREVPTl9UTURTX1BMTF9DTlRMKTsKIAl0bXAgJj0gMHhmZmZmZjsKQEAgLTYwOSw3ICs2MTAsNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXVpbnQzMl90IGZwMl9nZW5fY250bCA9IFJSRUczMihSQURFT05fRlAyX0dFTl9DTlRMKTsKLQlEUk1fREVCVUcoIlxuIik7CisJRFJNX0RFQlVHX0tNUygiXG4iKTsKIAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgRFJNX01PREVfRFBNU19PTjoKQEAgLTY2NSw3ICs2NjYsNyBAQAogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKIAl1aW50MzJfdCBmcDJfZ2VuX2NudGw7CiAKLQlEUk1fREVCVUcoIlxuIik7CisJRFJNX0RFQlVHX0tNUygiXG4iKTsKIAogCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKIAkJcmFkZW9uX2VuY29kZXItPnBpeGVsX2Nsb2NrID0gYWRqdXN0ZWRfbW9kZS0+Y2xvY2s7CkBAIC03NTksNyArNzYwLDcgQEAKIAl1aW50MzJfdCBmcDJfZ2VuX2NudGwgPSAwLCBjcnRjMl9nZW5fY250bCA9IDAsIHR2X2RhY19jbnRsID0gMDsKIAl1aW50MzJfdCB0dl9tYXN0ZXJfY250bCA9IDA7CiAJYm9vbCBpc190djsKLQlEUk1fREVCVUcoIlxuIik7CisJRFJNX0RFQlVHX0tNUygiXG4iKTsKIAogCWlzX3R2ID0gcmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiBBVE9NX0RFVklDRV9UVl9TVVBQT1JUID8gdHJ1ZSA6IGZhbHNlOwogCkBAIC04NzcsNyArODc4LDcgQEAKIAl1aW50MzJfdCBkaXNwX2h3X2RlYnVnID0gMCwgZnAyX2dlbl9jbnRsID0gMCwgZGlzcF90dl9vdXRfY250bCA9IDA7CiAJYm9vbCBpc190diA9IGZhbHNlOwogCi0JRFJNX0RFQlVHKCJcbiIpOworCURSTV9ERUJVR19LTVMoIlxuIik7CiAKIAlpc190diA9IHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCA/IHRydWUgOiBmYWxzZTsKIApAQCAtMTA3NCwxMCArMTA3NSwxMCBAQAogCXRtcCA9IFJSRUczMihSQURFT05fVFZfREFDX0NOVEwpOwogCWlmICgodG1wICYgUkFERU9OX1RWX0RBQ19HREFDREVUKSAhPSAwKSB7CiAJCWZvdW5kID0gdHJ1ZTsKLQkJRFJNX0RFQlVHKCJTLXZpZGVvIFRWIGNvbm5lY3Rpb24gZGV0ZWN0ZWRcbiIpOworCQlEUk1fREVCVUdfS01TKCJTLXZpZGVvIFRWIGNvbm5lY3Rpb24gZGV0ZWN0ZWRcbiIpOwogCX0gZWxzZSBpZiAoKHRtcCAmIFJBREVPTl9UVl9EQUNfQkRBQ0RFVCkgIT0gMCkgewogCQlmb3VuZCA9IHRydWU7Ci0JCURSTV9ERUJVRygiQ29tcG9zaXRlIFRWIGNvbm5lY3Rpb24gZGV0ZWN0ZWRcbiIpOworCQlEUk1fREVCVUdfS01TKCJDb21wb3NpdGUgVFYgY29ubmVjdGlvbiBkZXRlY3RlZFxuIik7CiAJfQogCiAJV1JFRzMyKFJBREVPTl9UVl9EQUNfQ05UTCwgdHZfZGFjX2NudGwpOwpAQCAtMTE0MCwxMCArMTE0MSwxMCBAQAogCXRtcCA9IFJSRUczMihSQURFT05fVFZfREFDX0NOVEwpOwogCWlmICh0bXAgJiBSQURFT05fVFZfREFDX0dEQUNERVQpIHsKIAkJZm91bmQgPSB0cnVlOwotCQlEUk1fREVCVUcoIlMtdmlkZW8gVFYgY29ubmVjdGlvbiBkZXRlY3RlZFxuIik7CisJCURSTV9ERUJVR19LTVMoIlMtdmlkZW8gVFYgY29ubmVjdGlvbiBkZXRlY3RlZFxuIik7CiAJfSBlbHNlIGlmICgodG1wICYgUkFERU9OX1RWX0RBQ19CREFDREVUKSAhPSAwKSB7CiAJCWZvdW5kID0gdHJ1ZTsKLQkJRFJNX0RFQlVHKCJDb21wb3NpdGUgVFYgY29ubmVjdGlvbiBkZXRlY3RlZFxuIik7CisJCURSTV9ERUJVR19LTVMoIkNvbXBvc2l0ZSBUViBjb25uZWN0aW9uIGRldGVjdGVkXG4iKTsKIAl9CiAKIAlXUkVHMzIoUkFERU9OX1RWX1BSRV9EQUNfTVVYX0NOVEwsIHR2X3ByZV9kYWNfbXV4X2NudGwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X3R2LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfdHYuYwppbmRleCBmMmVkMjdjLi5jN2I2Y2I0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfdHYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfdHYuYwpAQCAtNDk2LDcgKzQ5Niw3IEBACiAKIAlyZXN0YXJ0IC09IHZfb2Zmc2V0ICsgaF9vZmZzZXQ7CiAKLQlEUk1fREVCVUcoImNvbXB1dGVfcmVzdGFydHM6IGRlZiA9ICV1IGggPSAlZCB2ID0gJWQsIHAxID0gJTA0eCwgcDIgPSAlMDR4LCByZXN0YXJ0ID0gJWRcbiIsCisJRFJNX0RFQlVHX0tNUygiY29tcHV0ZV9yZXN0YXJ0czogZGVmID0gJXUgaCA9ICVkIHYgPSAlZCwgcDEgPSAlMDR4LCBwMiA9ICUwNHgsIHJlc3RhcnQgPSAlZFxuIiwKIAkJICBjb25zdF9wdHItPmRlZl9yZXN0YXJ0LCB0dl9kYWMtPmhfcG9zLCB0dl9kYWMtPnZfcG9zLCBwMSwgcDIsIHJlc3RhcnQpOwogCiAJdHZfZGFjLT50di5ocmVzdGFydCA9IHJlc3RhcnQgJSBoX3RvdGFsOwpAQCAtNTA1LDcgKzUwNSw3IEBACiAJcmVzdGFydCAvPSB2X3RvdGFsOwogCXR2X2RhYy0+dHYuZnJlc3RhcnQgPSByZXN0YXJ0ICUgZl90b3RhbDsKIAotCURSTV9ERUJVRygiY29tcHV0ZV9yZXN0YXJ0OiBGL0gvVj0ldSwldSwldVxuIiwKKwlEUk1fREVCVUdfS01TKCJjb21wdXRlX3Jlc3RhcnQ6IEYvSC9WPSV1LCV1LCV1XG4iLAogCQkgICh1bnNpZ25lZCl0dl9kYWMtPnR2LmZyZXN0YXJ0LAogCQkgICh1bnNpZ25lZCl0dl9kYWMtPnR2LnZyZXN0YXJ0LAogCQkgICh1bnNpZ25lZCl0dl9kYWMtPnR2LmhyZXN0YXJ0KTsKQEAgLTUyMyw3ICs1MjMsNyBAQAogCXR2X2RhYy0+dHYudGltaW5nX2NudGwgPSAodHZfZGFjLT50di50aW1pbmdfY250bCAmIH5SQURFT05fSF9JTkNfTUFTSykgfAogCQkoKHUzMiloX2luYyA8PCBSQURFT05fSF9JTkNfU0hJRlQpOwogCi0JRFJNX0RFQlVHKCJjb21wdXRlX3Jlc3RhcnQ6IGhfc2l6ZSA9ICVkIGhfaW5jID0gJWRcbiIsIHR2X2RhYy0+aF9zaXplLCBoX2luYyk7CisJRFJNX0RFQlVHX0tNUygiY29tcHV0ZV9yZXN0YXJ0OiBoX3NpemUgPSAlZCBoX2luYyA9ICVkXG4iLCB0dl9kYWMtPmhfc2l6ZSwgaF9pbmMpOwogCiAJcmV0dXJuIGhfY2hhbmdlZDsKIH0KQEAgLTY0Miw4ICs2NDIsOCBAQAogCX0KIAlmbGlja2VyX3JlbW92YWwgPSAodG1wICsgNTAwKSAvIDEwMDA7CiAKLQlpZiAoZmxpY2tlcl9yZW1vdmFsIDwgMikKLQkJZmxpY2tlcl9yZW1vdmFsID0gMjsKKwlpZiAoZmxpY2tlcl9yZW1vdmFsIDwgMykKKwkJZmxpY2tlcl9yZW1vdmFsID0gMzsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShTTE9QRV9saW1pdCk7ICsraSkgewogCQlpZiAoZmxpY2tlcl9yZW1vdmFsID09IFNMT1BFX2xpbWl0W2ldKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKaW5kZXggOTU2OTZhYS4uNzFhZWE0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaApAQCAtNjYsNiArNjYsMTIgQEAKIAlUVl9TVERfUEFMX04sCiB9OwogCitlbnVtIHJhZGVvbl91bmRlcnNjYW5fdHlwZSB7CisJVU5ERVJTQ0FOX09GRiwKKwlVTkRFUlNDQU5fT04sCisJVU5ERVJTQ0FOX0FVVE8sCit9OworCiBlbnVtIHJhZGVvbl9ocGRfaWQgewogCVJBREVPTl9IUERfMSA9IDAsCiAJUkFERU9OX0hQRF8yLApAQCAtMjI2LDEwICsyMzIsMTIgQEAKIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpjb2hlcmVudF9tb2RlX3Byb3BlcnR5OwogCS8qIERBQyBlbmFibGUgbG9hZCBkZXRlY3QgKi8KIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpsb2FkX2RldGVjdF9wcm9wZXJ0eTsKLQkvKiBUViBzdGFuZGFyZCBsb2FkIGRldGVjdCAqLworCS8qIFRWIHN0YW5kYXJkICovCiAJc3RydWN0IGRybV9wcm9wZXJ0eSAqdHZfc3RkX3Byb3BlcnR5OwogCS8qIGxlZ2FjeSBUTURTIFBMTCBkZXRlY3QgKi8KIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICp0bWRzX3BsbF9wcm9wZXJ0eTsKKwkvKiB1bmRlcnNjYW4gKi8KKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICp1bmRlcnNjYW5fcHJvcGVydHk7CiAJLyogaGFyZGNvZGVkIERGUCBlZGlkIGZyb20gQklPUyAqLwogCXN0cnVjdCBlZGlkICpiaW9zX2hhcmRjb2RlZF9lZGlkOwogCkBAIC0yNjYsNiArMjc0LDggQEAKIAl1aW50MzJfdCBsZWdhY3lfZGlzcGxheV9iYXNlX2FkZHI7CiAJdWludDMyX3QgbGVnYWN5X2N1cnNvcl9vZmZzZXQ7CiAJZW51bSByYWRlb25fcm14X3R5cGUgcm14X3R5cGU7CisJdTggaF9ib3JkZXI7CisJdTggdl9ib3JkZXI7CiAJZml4ZWQyMF8xMiB2c2M7CiAJZml4ZWQyMF8xMiBoc2M7CiAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbmF0aXZlX21vZGU7CkBAIC0zNTQsNiArMzY0LDcgQEAKIAl1aW50MzJfdCBmbGFnczsKIAl1aW50MzJfdCBwaXhlbF9jbG9jazsKIAllbnVtIHJhZGVvbl9ybXhfdHlwZSBybXhfdHlwZTsKKwllbnVtIHJhZGVvbl91bmRlcnNjYW5fdHlwZSB1bmRlcnNjYW5fdHlwZTsKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBuYXRpdmVfbW9kZTsKIAl2b2lkICplbmNfcHJpdjsKIAlpbnQgYXVkaW9fcG9sbGluZ19hY3RpdmU7CkBAIC0zOTIsNyArNDAzLDcgQEAKIAl1aW50MzJfdCBjb25uZWN0b3JfaWQ7CiAJdWludDMyX3QgZGV2aWNlczsKIAlzdHJ1Y3QgcmFkZW9uX2kyY19jaGFuICpkZGNfYnVzOwotCS8qIHNvbWUgc3lzdGVtcyBoYXZlIGEgYW4gaGRtaSBhbmQgdmdhIHBvcnQgd2l0aCBhIHNoYXJlZCBkZGMgbGluZSAqLworCS8qIHNvbWUgc3lzdGVtcyBoYXZlIGFuIGhkbWkgYW5kIHZnYSBwb3J0IHdpdGggYSBzaGFyZWQgZGRjIGxpbmUgKi8KIAlib29sIHNoYXJlZF9kZGM7CiAJYm9vbCB1c2VfZGlnaXRhbDsKIAkvKiB3ZSBuZWVkIHRvIG1pbmQgdGhlIEVESUQgYmV0d2VlbiBkZXRlY3QKQEAgLTQxNCw2ICs0MjUsOSBAQAogZXh0ZXJuIGVudW0gcmFkZW9uX3R2X3N0ZAogcmFkZW9uX2F0b21iaW9zX2dldF90dl9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAorZXh0ZXJuIHN0cnVjdCBkcm1fY29ubmVjdG9yICoKK3JhZGVvbl9nZXRfY29ubmVjdG9yX2Zvcl9lbmNvZGVyKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7CisKIGV4dGVybiB2b2lkIHJhZGVvbl9jb25uZWN0b3JfaG90cGx1ZyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKIGV4dGVybiBib29sIHJhZGVvbl9kcF9uZWVkc19saW5rX3RyYWluKHN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yKTsKIGV4dGVybiBpbnQgcmFkZW9uX2RwX21vZGVfdmFsaWRfaGVscGVyKHN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYwppbmRleCBkNWI5MzczLi4wYWZkMWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYwpAQCAtMTEwLDYgKzExMCw3IEBACiAJYm8tPnN1cmZhY2VfcmVnID0gLTE7CiAJSU5JVF9MSVNUX0hFQUQoJmJvLT5saXN0KTsKIAorcmV0cnk6CiAJcmFkZW9uX3R0bV9wbGFjZW1lbnRfZnJvbV9kb21haW4oYm8sIGRvbWFpbik7CiAJLyogS2VybmVsIGFsbG9jYXRpb24gYXJlIHVuaW50ZXJydXB0aWJsZSAqLwogCW11dGV4X2xvY2soJnJkZXYtPnZyYW1fbXV0ZXgpOwpAQCAtMTE4LDEwICsxMTksMTUgQEAKIAkJCSZyYWRlb25fdHRtX2JvX2Rlc3Ryb3kpOwogCW11dGV4X3VubG9jaygmcmRldi0+dnJhbV9tdXRleCk7CiAJaWYgKHVubGlrZWx5KHIgIT0gMCkpIHsKLQkJaWYgKHIgIT0gLUVSRVNUQVJUU1lTKQorCQlpZiAociAhPSAtRVJFU1RBUlRTWVMpIHsKKwkJCWlmIChkb21haW4gPT0gUkFERU9OX0dFTV9ET01BSU5fVlJBTSkgeworCQkJCWRvbWFpbiB8PSBSQURFT05fR0VNX0RPTUFJTl9HVFQ7CisJCQkJZ290byByZXRyeTsKKwkJCX0KIAkJCWRldl9lcnIocmRldi0+ZGV2LAogCQkJCSJvYmplY3RfaW5pdCBmYWlsZWQgZm9yICglbHUsIDB4JTA4WClcbiIsCiAJCQkJc2l6ZSwgZG9tYWluKTsKKwkJfQogCQlyZXR1cm4gcjsKIAl9CiAJKmJvX3B0ciA9IGJvOwpAQCAtMzIxLDYgKzMyNyw3IEBACiB7CiAJc3RydWN0IHJhZGVvbl9ib19saXN0ICpsb2JqOwogCXN0cnVjdCByYWRlb25fYm8gKmJvOworCXUzMiBkb21haW47CiAJaW50IHI7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvYmosIGhlYWQsIGxpc3QpIHsKQEAgLTMzMywxNyArMzQwLDE5IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShsb2JqLCBoZWFkLCBsaXN0KSB7CiAJCWJvID0gbG9iai0+Ym87CiAJCWlmICghYm8tPnBpbl9jb3VudCkgewotCQkJaWYgKGxvYmotPndkb21haW4pIHsKLQkJCQlyYWRlb25fdHRtX3BsYWNlbWVudF9mcm9tX2RvbWFpbihibywKLQkJCQkJCQkJbG9iai0+d2RvbWFpbik7Ci0JCQl9IGVsc2UgewotCQkJCXJhZGVvbl90dG1fcGxhY2VtZW50X2Zyb21fZG9tYWluKGJvLAotCQkJCQkJCQlsb2JqLT5yZG9tYWluKTsKLQkJCX0KKwkJCWRvbWFpbiA9IGxvYmotPndkb21haW4gPyBsb2JqLT53ZG9tYWluIDogbG9iai0+cmRvbWFpbjsKKwkJCQorCQlyZXRyeToKKwkJCXJhZGVvbl90dG1fcGxhY2VtZW50X2Zyb21fZG9tYWluKGJvLCBkb21haW4pOwogCQkJciA9IHR0bV9ib192YWxpZGF0ZSgmYm8tPnRibywgJmJvLT5wbGFjZW1lbnQsCiAJCQkJCQl0cnVlLCBmYWxzZSwgZmFsc2UpOwotCQkJaWYgKHVubGlrZWx5KHIpKQorCQkJaWYgKHVubGlrZWx5KHIpKSB7CisJCQkJaWYgKHIgIT0gLUVSRVNUQVJUU1lTICYmIGRvbWFpbiA9PSBSQURFT05fR0VNX0RPTUFJTl9WUkFNKSB7CisJCQkJCWRvbWFpbiB8PSBSQURFT05fR0VNX0RPTUFJTl9HVFQ7CisJCQkJCWdvdG8gcmV0cnk7CisJCQkJfQogCQkJCXJldHVybiByOworCQkJfQogCQl9CiAJCWxvYmotPmdwdV9vZmZzZXQgPSByYWRlb25fYm9fZ3B1X29mZnNldChibyk7CiAJCWxvYmotPnRpbGluZ19mbGFncyA9IGJvLT50aWxpbmdfZmxhZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYwppbmRleCAxMTVkMjZiLi45NWY4YjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKQEAgLTI3LDYgKzI3LDggQEAKICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjZW5kaWYKICNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHkuaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+CiAKICNkZWZpbmUgUkFERU9OX0lETEVfTE9PUF9NUyAxMDAKICNkZWZpbmUgUkFERU9OX1JFQ0xPQ0tfREVMQVlfTVMgMjAwCkBAIC02MCw5ICs2Miw5IEBACiAKIAlpZiAoc3RyY21wKGVudHJ5LT5kZXZpY2VfY2xhc3MsIEFDUElfQUNfQ0xBU1MpID09IDApIHsKIAkJaWYgKHBvd2VyX3N1cHBseV9pc19zeXN0ZW1fc3VwcGxpZWQoKSA+IDApCi0JCQlEUk1fREVCVUcoInBtOiBBQ1xuIik7CisJCQlEUk1fREVCVUdfRFJJVkVSKCJwbTogQUNcbiIpOwogCQllbHNlCi0JCQlEUk1fREVCVUcoInBtOiBEQ1xuIik7CisJCQlEUk1fREVCVUdfRFJJVkVSKCJwbTogRENcbiIpOwogCiAJCWlmIChyZGV2LT5wbS5wbV9tZXRob2QgPT0gUE1fTUVUSE9EX1BST0ZJTEUpIHsKIAkJCWlmIChyZGV2LT5wbS5wcm9maWxlID09IFBNX1BST0ZJTEVfQVVUTykgewpAQCAtMTk2LDcgKzE5OCw3IEBACiAJCQlyYWRlb25fc2V0X2VuZ2luZV9jbG9jayhyZGV2LCBzY2xrKTsKIAkJCXJhZGVvbl9wbV9kZWJ1Z19jaGVja19pbl92YmwocmRldiwgdHJ1ZSk7CiAJCQlyZGV2LT5wbS5jdXJyZW50X3NjbGsgPSBzY2xrOwotCQkJRFJNX0RFQlVHKCJTZXR0aW5nOiBlOiAlZFxuIiwgc2Nsayk7CisJCQlEUk1fREVCVUdfRFJJVkVSKCJTZXR0aW5nOiBlOiAlZFxuIiwgc2Nsayk7CiAJCX0KIAogCQkvKiBzZXQgbWVtb3J5IGNsb2NrICovCkBAIC0yMDUsNyArMjA3LDcgQEAKIAkJCXJhZGVvbl9zZXRfbWVtb3J5X2Nsb2NrKHJkZXYsIG1jbGspOwogCQkJcmFkZW9uX3BtX2RlYnVnX2NoZWNrX2luX3ZibChyZGV2LCB0cnVlKTsKIAkJCXJkZXYtPnBtLmN1cnJlbnRfbWNsayA9IG1jbGs7Ci0JCQlEUk1fREVCVUcoIlNldHRpbmc6IG06ICVkXG4iLCBtY2xrKTsKKwkJCURSTV9ERUJVR19EUklWRVIoIlNldHRpbmc6IG06ICVkXG4iLCBtY2xrKTsKIAkJfQogCiAJCWlmIChtaXNjX2FmdGVyKQpAQCAtMjE3LDcgKzIxOSw3IEBACiAJCXJkZXYtPnBtLmN1cnJlbnRfcG93ZXJfc3RhdGVfaW5kZXggPSByZGV2LT5wbS5yZXF1ZXN0ZWRfcG93ZXJfc3RhdGVfaW5kZXg7CiAJCXJkZXYtPnBtLmN1cnJlbnRfY2xvY2tfbW9kZV9pbmRleCA9IHJkZXYtPnBtLnJlcXVlc3RlZF9jbG9ja19tb2RlX2luZGV4OwogCX0gZWxzZQotCQlEUk1fREVCVUcoInBtOiBHVUkgbm90IGlkbGUhISFcbiIpOworCQlEUk1fREVCVUdfRFJJVkVSKCJwbTogR1VJIG5vdCBpZGxlISEhXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgcmFkZW9uX3BtX3NldF9jbG9ja3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCkBAIC0yOTIsMjcgKzI5NCwyNyBAQAogCXN0cnVjdCByYWRlb25fcG93ZXJfc3RhdGUgKnBvd2VyX3N0YXRlOwogCXN0cnVjdCByYWRlb25fcG1fY2xvY2tfaW5mbyAqY2xvY2tfaW5mbzsKIAotCURSTV9ERUJVRygiJWQgUG93ZXIgU3RhdGUocylcbiIsIHJkZXYtPnBtLm51bV9wb3dlcl9zdGF0ZXMpOworCURSTV9ERUJVR19EUklWRVIoIiVkIFBvd2VyIFN0YXRlKHMpXG4iLCByZGV2LT5wbS5udW1fcG93ZXJfc3RhdGVzKTsKIAlmb3IgKGkgPSAwOyBpIDwgcmRldi0+cG0ubnVtX3Bvd2VyX3N0YXRlczsgaSsrKSB7CiAJCXBvd2VyX3N0YXRlID0gJnJkZXYtPnBtLnBvd2VyX3N0YXRlW2ldOwotCQlEUk1fREVCVUcoIlN0YXRlICVkOiAlc1xuIiwgaSwKKwkJRFJNX0RFQlVHX0RSSVZFUigiU3RhdGUgJWQ6ICVzXG4iLCBpLAogCQkJcmFkZW9uX3BtX3N0YXRlX3R5cGVfbmFtZVtwb3dlcl9zdGF0ZS0+dHlwZV0pOwogCQlpZiAoaSA9PSByZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlX2luZGV4KQotCQkJRFJNX0RFQlVHKCJcdERlZmF1bHQiKTsKKwkJCURSTV9ERUJVR19EUklWRVIoIlx0RGVmYXVsdCIpOwogCQlpZiAoKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpICYmICEocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKSkKLQkJCURSTV9ERUJVRygiXHQlZCBQQ0lFIExhbmVzXG4iLCBwb3dlcl9zdGF0ZS0+cGNpZV9sYW5lcyk7CisJCQlEUk1fREVCVUdfRFJJVkVSKCJcdCVkIFBDSUUgTGFuZXNcbiIsIHBvd2VyX3N0YXRlLT5wY2llX2xhbmVzKTsKIAkJaWYgKHBvd2VyX3N0YXRlLT5mbGFncyAmIFJBREVPTl9QTV9TVEFURV9TSU5HTEVfRElTUExBWV9PTkxZKQotCQkJRFJNX0RFQlVHKCJcdFNpbmdsZSBkaXNwbGF5IG9ubHlcbiIpOwotCQlEUk1fREVCVUcoIlx0JWQgQ2xvY2sgTW9kZShzKVxuIiwgcG93ZXJfc3RhdGUtPm51bV9jbG9ja19tb2Rlcyk7CisJCQlEUk1fREVCVUdfRFJJVkVSKCJcdFNpbmdsZSBkaXNwbGF5IG9ubHlcbiIpOworCQlEUk1fREVCVUdfRFJJVkVSKCJcdCVkIENsb2NrIE1vZGUocylcbiIsIHBvd2VyX3N0YXRlLT5udW1fY2xvY2tfbW9kZXMpOwogCQlmb3IgKGogPSAwOyBqIDwgcG93ZXJfc3RhdGUtPm51bV9jbG9ja19tb2RlczsgaisrKSB7CiAJCQljbG9ja19pbmZvID0gJihwb3dlcl9zdGF0ZS0+Y2xvY2tfaW5mb1tqXSk7CiAJCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKQotCQkJCURSTV9ERUJVRygiXHRcdCVkIGU6ICVkJXNcbiIsCisJCQkJRFJNX0RFQlVHX0RSSVZFUigiXHRcdCVkIGU6ICVkJXNcbiIsCiAJCQkJCWosCiAJCQkJCWNsb2NrX2luZm8tPnNjbGsgKiAxMCwKIAkJCQkJY2xvY2tfaW5mby0+ZmxhZ3MgJiBSQURFT05fUE1fTU9ERV9OT19ESVNQTEFZID8gIlx0Tm8gZGlzcGxheSBvbmx5IiA6ICIiKTsKIAkJCWVsc2UKLQkJCQlEUk1fREVCVUcoIlx0XHQlZCBlOiAlZFx0bTogJWRcdHY6ICVkJXNcbiIsCisJCQkJRFJNX0RFQlVHX0RSSVZFUigiXHRcdCVkIGU6ICVkXHRtOiAlZFx0djogJWQlc1xuIiwKIAkJCQkJaiwKIAkJCQkJY2xvY2tfaW5mby0+c2NsayAqIDEwLAogCQkJCQljbG9ja19pbmZvLT5tY2xrICogMTAsCkBAIC0zMzMsNiArMzM1LDcgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwKIAkJCShjcCA9PSBQTV9QUk9GSUxFX0FVVE8pID8gImF1dG8iIDoKIAkJCShjcCA9PSBQTV9QUk9GSUxFX0xPVykgPyAibG93IiA6CisJCQkoY3AgPT0gUE1fUFJPRklMRV9NSUQpID8gIm1pZCIgOgogCQkJKGNwID09IFBNX1BST0ZJTEVfSElHSCkgPyAiaGlnaCIgOiAiZGVmYXVsdCIpOwogfQogCkBAIC00MjMsNiArNDI2LDgyIEBACiBzdGF0aWMgREVWSUNFX0FUVFIocG93ZXJfcHJvZmlsZSwgU19JUlVHTyB8IFNfSVdVU1IsIHJhZGVvbl9nZXRfcG1fcHJvZmlsZSwgcmFkZW9uX3NldF9wbV9wcm9maWxlKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihwb3dlcl9tZXRob2QsIFNfSVJVR08gfCBTX0lXVVNSLCByYWRlb25fZ2V0X3BtX21ldGhvZCwgcmFkZW9uX3NldF9wbV9tZXRob2QpOwogCitzdGF0aWMgc3NpemVfdCByYWRlb25faHdtb25fc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBwY2lfZ2V0X2RydmRhdGEodG9fcGNpX2RldihkZXYpKTsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRkZXYtPmRldl9wcml2YXRlOworCXUzMiB0ZW1wOworCisJc3dpdGNoIChyZGV2LT5wbS5pbnRfdGhlcm1hbF90eXBlKSB7CisJY2FzZSBUSEVSTUFMX1RZUEVfUlY2WFg6CisJCXRlbXAgPSBydjZ4eF9nZXRfdGVtcChyZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBUSEVSTUFMX1RZUEVfUlY3NzA6CisJCXRlbXAgPSBydjc3MF9nZXRfdGVtcChyZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBUSEVSTUFMX1RZUEVfRVZFUkdSRUVOOgorCQl0ZW1wID0gZXZlcmdyZWVuX2dldF90ZW1wKHJkZXYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl0ZW1wID0gMDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHRlbXApOworfQorCitzdGF0aWMgc3NpemVfdCByYWRlb25faHdtb25fc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgICBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAicmFkZW9uXG4iKTsKK30KKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgcmFkZW9uX2h3bW9uX3Nob3dfdGVtcCwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHJhZGVvbl9od21vbl9zaG93X25hbWUsIE5VTEwsIDApOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaHdtb25fYXR0cmlidXRlc1tdID0geworCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX25hbWUuZGV2X2F0dHIuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBod21vbl9hdHRyZ3JvdXAgPSB7CisJLmF0dHJzID0gaHdtb25fYXR0cmlidXRlcywKK307CisKK3N0YXRpYyB2b2lkIHJhZGVvbl9od21vbl9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCBlcnI7CisKKwlyZGV2LT5wbS5pbnRfaHdtb25fZGV2ID0gTlVMTDsKKworCXN3aXRjaCAocmRldi0+cG0uaW50X3RoZXJtYWxfdHlwZSkgeworCWNhc2UgVEhFUk1BTF9UWVBFX1JWNlhYOgorCWNhc2UgVEhFUk1BTF9UWVBFX1JWNzcwOgorCWNhc2UgVEhFUk1BTF9UWVBFX0VWRVJHUkVFTjoKKwkJcmRldi0+cG0uaW50X2h3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcihyZGV2LT5kZXYpOworCQlkZXZfc2V0X2RydmRhdGEocmRldi0+cG0uaW50X2h3bW9uX2RldiwgcmRldi0+ZGRldik7CisJCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcmRldi0+cG0uaW50X2h3bW9uX2Rldi0+a29iaiwKKwkJCQkJICZod21vbl9hdHRyZ3JvdXApOworCQlpZiAoZXJyKQorCQkJRFJNX0VSUk9SKCJVbmFibGUgdG8gY3JlYXRlIGh3bW9uIHN5c2ZzIGZpbGU6ICVkXG4iLCBlcnIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJhZGVvbl9od21vbl9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWlmIChyZGV2LT5wbS5pbnRfaHdtb25fZGV2KSB7CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmcmRldi0+cG0uaW50X2h3bW9uX2Rldi0+a29iaiwgJmh3bW9uX2F0dHJncm91cCk7CisJCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKHJkZXYtPnBtLmludF9od21vbl9kZXYpOworCX0KK30KKwogdm9pZCByYWRlb25fcG1fc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlib29sIGZsdXNoX3dxID0gZmFsc2U7CkBAIC00NzAsNiArNTQ5LDcgQEAKIAlyZGV2LT5wbS5keW5wbV9jYW5fZG93bmNsb2NrID0gdHJ1ZTsKIAlyZGV2LT5wbS5jdXJyZW50X3NjbGsgPSByZGV2LT5jbG9jay5kZWZhdWx0X3NjbGs7CiAJcmRldi0+cG0uY3VycmVudF9tY2xrID0gcmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrOworCXJkZXYtPnBtLmludF90aGVybWFsX3R5cGUgPSBUSEVSTUFMX1RZUEVfTk9ORTsKIAogCWlmIChyZGV2LT5iaW9zKSB7CiAJCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpCkBAIC00ODAsNiArNTYwLDggQEAKIAkJcmFkZW9uX3BtX2luaXRfcHJvZmlsZShyZGV2KTsKIAl9CiAKKwkvKiBzZXQgdXAgdGhlIGludGVybmFsIHRoZXJtYWwgc2Vuc29yIGlmIGFwcGxpY2FibGUgKi8KKwlyYWRlb25faHdtb25faW5pdChyZGV2KTsKIAlpZiAocmRldi0+cG0ubnVtX3Bvd2VyX3N0YXRlcyA+IDEpIHsKIAkJLyogd2hlcmUncyB0aGUgYmVzdCBwbGFjZSB0byBwdXQgdGhlc2U/ICovCiAJCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZShyZGV2LT5kZXYsICZkZXZfYXR0cl9wb3dlcl9wcm9maWxlKTsKQEAgLTUzNSw2ICs2MTcsNyBAQAogI2VuZGlmCiAJfQogCisJcmFkZW9uX2h3bW9uX2ZpbmkocmRldik7CiAJaWYgKHJkZXYtPnBtLmkyY19idXMpCiAJCXJhZGVvbl9pMmNfZGVzdHJveShyZGV2LT5wbS5pMmNfYnVzKTsKIH0KQEAgLTU3NSw3ICs2NTgsNyBAQAogCQkJCQlyYWRlb25fcG1fZ2V0X2R5bnBtX3N0YXRlKHJkZXYpOwogCQkJCQlyYWRlb25fcG1fc2V0X2Nsb2NrcyhyZGV2KTsKIAotCQkJCQlEUk1fREVCVUcoInJhZGVvbjogZHluYW1pYyBwb3dlciBtYW5hZ2VtZW50IGRlYWN0aXZhdGVkXG4iKTsKKwkJCQkJRFJNX0RFQlVHX0RSSVZFUigicmFkZW9uOiBkeW5hbWljIHBvd2VyIG1hbmFnZW1lbnQgZGVhY3RpdmF0ZWRcbiIpOwogCQkJCX0KIAkJCX0gZWxzZSBpZiAocmRldi0+cG0uYWN0aXZlX2NydGNfY291bnQgPT0gMSkgewogCQkJCS8qIFRPRE86IEluY3JlYXNlIGNsb2NrcyBpZiBuZWVkZWQgZm9yIGN1cnJlbnQgbW9kZSAqLwpAQCAtNTkyLDcgKzY3NSw3IEBACiAJCQkJCXJkZXYtPnBtLmR5bnBtX3N0YXRlID0gRFlOUE1fU1RBVEVfQUNUSVZFOwogCQkJCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRldi0+d3EsICZyZGV2LT5wbS5keW5wbV9pZGxlX3dvcmssCiAJCQkJCQkJICAgbXNlY3NfdG9famlmZmllcyhSQURFT05fSURMRV9MT09QX01TKSk7Ci0JCQkJCURSTV9ERUJVRygicmFkZW9uOiBkeW5hbWljIHBvd2VyIG1hbmFnZW1lbnQgYWN0aXZhdGVkXG4iKTsKKwkJCQkJRFJNX0RFQlVHX0RSSVZFUigicmFkZW9uOiBkeW5hbWljIHBvd2VyIG1hbmFnZW1lbnQgYWN0aXZhdGVkXG4iKTsKIAkJCQl9CiAJCQl9IGVsc2UgeyAvKiBjb3VudCA9PSAwICovCiAJCQkJaWYgKHJkZXYtPnBtLmR5bnBtX3N0YXRlICE9IERZTlBNX1NUQVRFX01JTklNVU0pIHsKQEAgLTY4OCw3ICs3NzEsNyBAQAogCWJvb2wgaW5fdmJsID0gcmFkZW9uX3BtX2luX3ZibChyZGV2KTsKIAogCWlmIChpbl92YmwgPT0gZmFsc2UpCi0JCURSTV9ERUJVRygibm90IGluIHZibCBmb3IgcG0gY2hhbmdlICUwOHggYXQgJXNcbiIsIHN0YXRfY3J0YywKKwkJRFJNX0RFQlVHX0RSSVZFUigibm90IGluIHZibCBmb3IgcG0gY2hhbmdlICUwOHggYXQgJXNcbiIsIHN0YXRfY3J0YywKIAkJCSBmaW5pc2ggPyAiZXhpdCIgOiAiZW50cnkiKTsKIAlyZXR1cm4gaW5fdmJsOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYwppbmRleCBlOTkxOGQ4Li44NGM1M2U0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYwpAQCAtNTksMjggKzU5LDI4IEBACiAvKgogICogR2xvYmFsIG1lbW9yeS4KICAqLwotc3RhdGljIGludCByYWRlb25fdHRtX21lbV9nbG9iYWxfaW5pdChzdHJ1Y3QgdHRtX2dsb2JhbF9yZWZlcmVuY2UgKnJlZikKK3N0YXRpYyBpbnQgcmFkZW9uX3R0bV9tZW1fZ2xvYmFsX2luaXQoc3RydWN0IGRybV9nbG9iYWxfcmVmZXJlbmNlICpyZWYpCiB7CiAJcmV0dXJuIHR0bV9tZW1fZ2xvYmFsX2luaXQocmVmLT5vYmplY3QpOwogfQogCi1zdGF0aWMgdm9pZCByYWRlb25fdHRtX21lbV9nbG9iYWxfcmVsZWFzZShzdHJ1Y3QgdHRtX2dsb2JhbF9yZWZlcmVuY2UgKnJlZikKK3N0YXRpYyB2b2lkIHJhZGVvbl90dG1fbWVtX2dsb2JhbF9yZWxlYXNlKHN0cnVjdCBkcm1fZ2xvYmFsX3JlZmVyZW5jZSAqcmVmKQogewogCXR0bV9tZW1fZ2xvYmFsX3JlbGVhc2UocmVmLT5vYmplY3QpOwogfQogCiBzdGF0aWMgaW50IHJhZGVvbl90dG1fZ2xvYmFsX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0Jc3RydWN0IHR0bV9nbG9iYWxfcmVmZXJlbmNlICpnbG9iYWxfcmVmOworCXN0cnVjdCBkcm1fZ2xvYmFsX3JlZmVyZW5jZSAqZ2xvYmFsX3JlZjsKIAlpbnQgcjsKIAogCXJkZXYtPm1tYW4ubWVtX2dsb2JhbF9yZWZlcmVuY2VkID0gZmFsc2U7CiAJZ2xvYmFsX3JlZiA9ICZyZGV2LT5tbWFuLm1lbV9nbG9iYWxfcmVmOwotCWdsb2JhbF9yZWYtPmdsb2JhbF90eXBlID0gVFRNX0dMT0JBTF9UVE1fTUVNOworCWdsb2JhbF9yZWYtPmdsb2JhbF90eXBlID0gRFJNX0dMT0JBTF9UVE1fTUVNOwogCWdsb2JhbF9yZWYtPnNpemUgPSBzaXplb2Yoc3RydWN0IHR0bV9tZW1fZ2xvYmFsKTsKIAlnbG9iYWxfcmVmLT5pbml0ID0gJnJhZGVvbl90dG1fbWVtX2dsb2JhbF9pbml0OwogCWdsb2JhbF9yZWYtPnJlbGVhc2UgPSAmcmFkZW9uX3R0bV9tZW1fZ2xvYmFsX3JlbGVhc2U7Ci0JciA9IHR0bV9nbG9iYWxfaXRlbV9yZWYoZ2xvYmFsX3JlZik7CisJciA9IGRybV9nbG9iYWxfaXRlbV9yZWYoZ2xvYmFsX3JlZik7CiAJaWYgKHIgIT0gMCkgewogCQlEUk1fRVJST1IoIkZhaWxlZCBzZXR0aW5nIHVwIFRUTSBtZW1vcnkgYWNjb3VudGluZyAiCiAJCQkgICJzdWJzeXN0ZW0uXG4iKTsKQEAgLTkwLDE0ICs5MCwxNCBAQAogCXJkZXYtPm1tYW4uYm9fZ2xvYmFsX3JlZi5tZW1fZ2xvYiA9CiAJCXJkZXYtPm1tYW4ubWVtX2dsb2JhbF9yZWYub2JqZWN0OwogCWdsb2JhbF9yZWYgPSAmcmRldi0+bW1hbi5ib19nbG9iYWxfcmVmLnJlZjsKLQlnbG9iYWxfcmVmLT5nbG9iYWxfdHlwZSA9IFRUTV9HTE9CQUxfVFRNX0JPOworCWdsb2JhbF9yZWYtPmdsb2JhbF90eXBlID0gRFJNX0dMT0JBTF9UVE1fQk87CiAJZ2xvYmFsX3JlZi0+c2l6ZSA9IHNpemVvZihzdHJ1Y3QgdHRtX2JvX2dsb2JhbCk7CiAJZ2xvYmFsX3JlZi0+aW5pdCA9ICZ0dG1fYm9fZ2xvYmFsX2luaXQ7CiAJZ2xvYmFsX3JlZi0+cmVsZWFzZSA9ICZ0dG1fYm9fZ2xvYmFsX3JlbGVhc2U7Ci0JciA9IHR0bV9nbG9iYWxfaXRlbV9yZWYoZ2xvYmFsX3JlZik7CisJciA9IGRybV9nbG9iYWxfaXRlbV9yZWYoZ2xvYmFsX3JlZik7CiAJaWYgKHIgIT0gMCkgewogCQlEUk1fRVJST1IoIkZhaWxlZCBzZXR0aW5nIHVwIFRUTSBCTyBzdWJzeXN0ZW0uXG4iKTsKLQkJdHRtX2dsb2JhbF9pdGVtX3VucmVmKCZyZGV2LT5tbWFuLm1lbV9nbG9iYWxfcmVmKTsKKwkJZHJtX2dsb2JhbF9pdGVtX3VucmVmKCZyZGV2LT5tbWFuLm1lbV9nbG9iYWxfcmVmKTsKIAkJcmV0dXJuIHI7CiAJfQogCkBAIC0xMDgsOCArMTA4LDggQEAKIHN0YXRpYyB2b2lkIHJhZGVvbl90dG1fZ2xvYmFsX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJaWYgKHJkZXYtPm1tYW4ubWVtX2dsb2JhbF9yZWZlcmVuY2VkKSB7Ci0JCXR0bV9nbG9iYWxfaXRlbV91bnJlZigmcmRldi0+bW1hbi5ib19nbG9iYWxfcmVmLnJlZik7Ci0JCXR0bV9nbG9iYWxfaXRlbV91bnJlZigmcmRldi0+bW1hbi5tZW1fZ2xvYmFsX3JlZik7CisJCWRybV9nbG9iYWxfaXRlbV91bnJlZigmcmRldi0+bW1hbi5ib19nbG9iYWxfcmVmLnJlZik7CisJCWRybV9nbG9iYWxfaXRlbV91bnJlZigmcmRldi0+bW1hbi5tZW1fZ2xvYmFsX3JlZik7CiAJCXJkZXYtPm1tYW4ubWVtX2dsb2JhbF9yZWZlcmVuY2VkID0gZmFsc2U7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yMzAwIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yMzAwCmluZGV4IDFlOTdiMmQuLmI1MDZlYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcjMwMAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3IzMDAKQEAgLTE4Nyw3ICsxODcsNiBAQAogMHg0MzY0IFJTX0lOU1RfMTMKIDB4NDM2OCBSU19JTlNUXzE0CiAweDQzNkMgUlNfSU5TVF8xNQotMHg0M0E0IFNDX0hZUEVSWl9FTgogMHg0M0E4IFNDX0VER0VSVUxFCiAweDQzQjAgU0NfQ0xJUF8wX0EKIDB4NDNCNCBTQ19DTElQXzBfQgpAQCAtNzE2LDE2ICs3MTUsNCBAQAogMHg0RjA4IFpCX1NURU5DSUxSRUZNQVNLCiAweDRGMTQgWkJfWlRPUAogMHg0RjE4IFpCX1pDQUNIRV9DVExTVEFUCi0weDRGMUMgWkJfQldfQ05UTAotMHg0RjI4IFpCX0RFUFRIQ0xFQVJWQUxVRQotMHg0RjMwIFpCX1pNQVNLX09GRlNFVAotMHg0RjM0IFpCX1pNQVNLX1BJVENICi0weDRGMzggWkJfWk1BU0tfV1JJTkRFWAotMHg0RjNDIFpCX1pNQVNLX0RXT1JECi0weDRGNDAgWkJfWk1BU0tfUkRJTkRFWAotMHg0RjQ0IFpCX0hJWl9PRkZTRVQKLTB4NEY0OCBaQl9ISVpfV1JJTkRFWAotMHg0RjRDIFpCX0hJWl9EV09SRAotMHg0RjUwIFpCX0hJWl9SRElOREVYCi0weDRGNTQgWkJfSElaX1BJVENICiAweDRGNTggWkJfWlBBU1NfREFUQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yNDIwIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yNDIwCmluZGV4IGU5NTg5ODAuLjhjMTIxNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcjQyMAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3I0MjAKQEAgLTEzMCw2ICsxMzAsNyBAQAogMHg0MDFDIEdCX1NFTEVDVAogMHg0MDIwIEdCX0FBX0NPTkZJRwogMHg0MDI0IEdCX0ZJRk9fU0laRQorMHg0MDI4IEdCX1pfUEVRX0NPTkZJRwogMHg0MTAwIFRYX0lOVkFMVEFHUwogMHg0MjAwIEdBX1BPSU5UX1MwCiAweDQyMDQgR0FfUE9JTlRfVDAKQEAgLTE4Nyw3ICsxODgsNiBAQAogMHg0MzY0IFJTX0lOU1RfMTMKIDB4NDM2OCBSU19JTlNUXzE0CiAweDQzNkMgUlNfSU5TVF8xNQotMHg0M0E0IFNDX0hZUEVSWl9FTgogMHg0M0E4IFNDX0VER0VSVUxFCiAweDQzQjAgU0NfQ0xJUF8wX0EKIDB4NDNCNCBTQ19DTElQXzBfQgpAQCAtNzgyLDE2ICs3ODIsNCBAQAogMHg0RjA4IFpCX1NURU5DSUxSRUZNQVNLCiAweDRGMTQgWkJfWlRPUAogMHg0RjE4IFpCX1pDQUNIRV9DVExTVEFUCi0weDRGMUMgWkJfQldfQ05UTAotMHg0RjI4IFpCX0RFUFRIQ0xFQVJWQUxVRQotMHg0RjMwIFpCX1pNQVNLX09GRlNFVAotMHg0RjM0IFpCX1pNQVNLX1BJVENICi0weDRGMzggWkJfWk1BU0tfV1JJTkRFWAotMHg0RjNDIFpCX1pNQVNLX0RXT1JECi0weDRGNDAgWkJfWk1BU0tfUkRJTkRFWAotMHg0RjQ0IFpCX0hJWl9PRkZTRVQKLTB4NEY0OCBaQl9ISVpfV1JJTkRFWAotMHg0RjRDIFpCX0hJWl9EV09SRAotMHg0RjUwIFpCX0hJWl9SRElOREVYCi0weDRGNTQgWkJfSElaX1BJVENICiAweDRGNTggWkJfWlBBU1NfREFUQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yczYwMCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcnM2MDAKaW5kZXggODNlOGJjMC4uMDgyOGQ4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yczYwMAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3JzNjAwCkBAIC0xODcsNyArMTg3LDYgQEAKIDB4NDM2NCBSU19JTlNUXzEzCiAweDQzNjggUlNfSU5TVF8xNAogMHg0MzZDIFJTX0lOU1RfMTUKLTB4NDNBNCBTQ19IWVBFUlpfRU4KIDB4NDNBOCBTQ19FREdFUlVMRQogMHg0M0IwIFNDX0NMSVBfMF9BCiAweDQzQjQgU0NfQ0xJUF8wX0IKQEAgLTc4MiwxNiArNzgxLDQgQEAKIDB4NEYwOCBaQl9TVEVOQ0lMUkVGTUFTSwogMHg0RjE0IFpCX1pUT1AKIDB4NEYxOCBaQl9aQ0FDSEVfQ1RMU1RBVAotMHg0RjFDIFpCX0JXX0NOVEwKLTB4NEYyOCBaQl9ERVBUSENMRUFSVkFMVUUKLTB4NEYzMCBaQl9aTUFTS19PRkZTRVQKLTB4NEYzNCBaQl9aTUFTS19QSVRDSAotMHg0RjM4IFpCX1pNQVNLX1dSSU5ERVgKLTB4NEYzQyBaQl9aTUFTS19EV09SRAotMHg0RjQwIFpCX1pNQVNLX1JESU5ERVgKLTB4NEY0NCBaQl9ISVpfT0ZGU0VUCi0weDRGNDggWkJfSElaX1dSSU5ERVgKLTB4NEY0QyBaQl9ISVpfRFdPUkQKLTB4NEY1MCBaQl9ISVpfUkRJTkRFWAotMHg0RjU0IFpCX0hJWl9QSVRDSAogMHg0RjU4IFpCX1pQQVNTX0RBVEEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcnY1MTUgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3J2NTE1CmluZGV4IDFlNDYyMzMuLjgyOTM4NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcnY1MTUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9ydjUxNQpAQCAtMjM1LDcgKzIzNSw2IEBACiAweDQzNTQgUlNfSU5TVF8xMwogMHg0MzU4IFJTX0lOU1RfMTQKIDB4NDM1QyBSU19JTlNUXzE1Ci0weDQzQTQgU0NfSFlQRVJaX0VOCiAweDQzQTggU0NfRURHRVJVTEUKIDB4NDNCMCBTQ19DTElQXzBfQQogMHg0M0I0IFNDX0NMSVBfMF9CCkBAIC00NzksMTcgKzQ3OCw1IEBACiAweDRGMDggWkJfU1RFTkNJTFJFRk1BU0sKIDB4NEYxNCBaQl9aVE9QCiAweDRGMTggWkJfWkNBQ0hFX0NUTFNUQVQKLTB4NEYxQyBaQl9CV19DTlRMCi0weDRGMjggWkJfREVQVEhDTEVBUlZBTFVFCi0weDRGMzAgWkJfWk1BU0tfT0ZGU0VUCi0weDRGMzQgWkJfWk1BU0tfUElUQ0gKLTB4NEYzOCBaQl9aTUFTS19XUklOREVYCi0weDRGM0MgWkJfWk1BU0tfRFdPUkQKLTB4NEY0MCBaQl9aTUFTS19SRElOREVYCi0weDRGNDQgWkJfSElaX09GRlNFVAotMHg0RjQ4IFpCX0hJWl9XUklOREVYCi0weDRGNEMgWkJfSElaX0RXT1JECi0weDRGNTAgWkJfSElaX1JESU5ERVgKLTB4NEY1NCBaQl9ISVpfUElUQ0gKIDB4NEY1OCBaQl9aUEFTU19EQVRBCiAweDRGRDQgWkJfU1RFTkNJTFJFRk1BU0tfQkYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYwppbmRleCA5ZTQyNDBiLi5hZTJiNzZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jCkBAIC01NSwxMiArNTUsNiBAQAogCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IDMyICogMTAyNCAqIDEwMjQ7CiAJCXJldHVybjsKIAl9Ci0JaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNDAwIHx8IHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNDgwKSB7Ci0JCS8qIEZJWE1FOiBSUzQwMCAmIFJTNDgwIHNlZW1zIHRvIGhhdmUgaXNzdWUgd2l0aCBHQVJUIHNpemUKLQkJICogaWYgNEcgb2Ygc3lzdGVtIG1lbW9yeSAobmVlZHMgbW9yZSB0ZXN0aW5nKSAqLwotCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IDMyICogMTAyNCAqIDEwMjQ7Ci0JCURSTV9FUlJPUigiRm9yY2luZyB0byAzMk0gR0FSVCBzaXplIChiZWNhdXNlIG9mIEFTSUMgYnVnID8pXG4iKTsKLQl9CiB9CiAKIHZvaWQgcnM0MDBfZ2FydF90bGJfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCkBAIC0yNjMsNiArMjU3LDcgQEAKIAlyMTAwX3ZyYW1faW5pdF9zaXplcyhyZGV2KTsKIAliYXNlID0gKFJSRUczMihSQURFT05fTkJfVE9NKSAmIDB4ZmZmZikgPDwgMTY7CiAJcmFkZW9uX3ZyYW1fbG9jYXRpb24ocmRldiwgJnJkZXYtPm1jLCBiYXNlKTsKKwlyZGV2LT5tYy5ndHRfYmFzZV9hbGlnbiA9IHJkZXYtPm1jLmd0dF9zaXplIC0gMTsKIAlyYWRlb25fZ3R0X2xvY2F0aW9uKHJkZXYsICZyZGV2LT5tYyk7CiAJcmFkZW9uX3VwZGF0ZV9iYW5kd2lkdGhfaW5mbyhyZGV2KTsKIH0KQEAgLTQ4MCw2ICs0NzUsOCBAQAogCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KIAlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOwogCS8qIFRPRE86IGRpc2FibGUgVkdBIG5lZWQgdG8gdXNlIFZHQSByZXF1ZXN0ICovCisJLyogcmVzdG9yZSBzb21lIHJlZ2lzdGVyIHRvIHNhbmUgZGVmYXVsdHMgKi8KKwlyMTAwX3Jlc3RvcmVfc2FuaXR5KHJkZXYpOwogCS8qIEJJT1MqLwogCWlmICghcmFkZW9uX2dldF9iaW9zKHJkZXYpKSB7CiAJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCmluZGV4IDdiYjRjM2UuLmNjMDViMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwLmMKQEAgLTY4Niw4ICs2ODYsOCBAQAogewogCXU2NCBiYXNlOwogCi0JcmRldi0+bWMuYXBlcl9iYXNlID0gZHJtX2dldF9yZXNvdXJjZV9zdGFydChyZGV2LT5kZGV2LCAwKTsKLQlyZGV2LT5tYy5hcGVyX3NpemUgPSBkcm1fZ2V0X3Jlc291cmNlX2xlbihyZGV2LT5kZGV2LCAwKTsKKwlyZGV2LT5tYy5hcGVyX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocmRldi0+cGRldiwgMCk7CisJcmRldi0+bWMuYXBlcl9zaXplID0gcGNpX3Jlc291cmNlX2xlbihyZGV2LT5wZGV2LCAwKTsKIAlyZGV2LT5tYy52cmFtX2lzX2RkciA9IHRydWU7CiAJcmRldi0+bWMudnJhbV93aWR0aCA9IDEyODsKIAlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9IFJSRUczMihSQURFT05fQ09ORklHX01FTVNJWkUpOwpAQCAtNjk2LDggKzY5Niw4IEBACiAJcmRldi0+bWMuaWdwX3NpZGVwb3J0X2VuYWJsZWQgPSByYWRlb25fYXRvbWJpb3Nfc2lkZXBvcnRfcHJlc2VudChyZGV2KTsKIAliYXNlID0gUlJFRzMyX01DKFJfMDAwMDA0X01DX0ZCX0xPQ0FUSU9OKTsKIAliYXNlID0gR18wMDAwMDRfTUNfRkJfU1RBUlQoYmFzZSkgPDwgMTY7Ci0JcmRldi0+bWMuaWdwX3NpZGVwb3J0X2VuYWJsZWQgPSByYWRlb25fYXRvbWJpb3Nfc2lkZXBvcnRfcHJlc2VudChyZGV2KTsKIAlyYWRlb25fdnJhbV9sb2NhdGlvbihyZGV2LCAmcmRldi0+bWMsIGJhc2UpOworCXJkZXYtPm1jLmd0dF9iYXNlX2FsaWduID0gMDsKIAlyYWRlb25fZ3R0X2xvY2F0aW9uKHJkZXYsICZyZGV2LT5tYyk7CiAJcmFkZW9uX3VwZGF0ZV9iYW5kd2lkdGhfaW5mbyhyZGV2KTsKIH0KQEAgLTgxMiw2ICs4MTIsMTMgQEAKIAkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBJQiAoJWQpLlxuIiwgcik7CiAJCXJldHVybiByOwogCX0KKworCXIgPSByNjAwX2F1ZGlvX2luaXQocmRldik7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsZWQgaW5pdGlhbGl6aW5nIGF1ZGlvXG4iKTsKKwkJcmV0dXJuIHI7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTgzOCw2ICs4NDUsNyBAQAogCiBpbnQgcnM2MDBfc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKKwlyNjAwX2F1ZGlvX2ZpbmkocmRldik7CiAJcjEwMF9jcF9kaXNhYmxlKHJkZXYpOwogCXIxMDBfd2JfZGlzYWJsZShyZGV2KTsKIAlyczYwMF9pcnFfZGlzYWJsZShyZGV2KTsKQEAgLTg0Nyw2ICs4NTUsNyBAQAogCiB2b2lkIHJzNjAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CisJcjYwMF9hdWRpb19maW5pKHJkZXYpOwogCXIxMDBfY3BfZmluaShyZGV2KTsKIAlyMTAwX3diX2ZpbmkocmRldik7CiAJcjEwMF9pYl9maW5pKHJkZXYpOwpAQCAtODcwLDYgKzg3OSw4IEBACiAJcmFkZW9uX3NjcmF0Y2hfaW5pdChyZGV2KTsKIAkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCiAJcmFkZW9uX3N1cmZhY2VfaW5pdChyZGV2KTsKKwkvKiByZXN0b3JlIHNvbWUgcmVnaXN0ZXIgdG8gc2FuZSBkZWZhdWx0cyAqLworCXIxMDBfcmVzdG9yZV9zYW5pdHkocmRldik7CiAJLyogQklPUyAqLwogCWlmICghcmFkZW9uX2dldF9iaW9zKHJkZXYpKSB7CiAJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jCmluZGV4IGY0ZjBhNjEuLjNlM2Y3NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMKQEAgLTE1NCwxNCArMTU0LDE1IEBACiAJcmRldi0+bWMudnJhbV93aWR0aCA9IDEyODsKIAlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9IFJSRUczMihSQURFT05fQ09ORklHX01FTVNJWkUpOwogCXJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA9IHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplOwotCXJkZXYtPm1jLmFwZXJfYmFzZSA9IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQocmRldi0+ZGRldiwgMCk7Ci0JcmRldi0+bWMuYXBlcl9zaXplID0gZHJtX2dldF9yZXNvdXJjZV9sZW4ocmRldi0+ZGRldiwgMCk7CisJcmRldi0+bWMuYXBlcl9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHJkZXYtPnBkZXYsIDApOworCXJkZXYtPm1jLmFwZXJfc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocmRldi0+cGRldiwgMCk7CiAJcmRldi0+bWMudmlzaWJsZV92cmFtX3NpemUgPSByZGV2LT5tYy5hcGVyX3NpemU7CiAJYmFzZSA9IFJSRUczMl9NQyhSXzAwMDEwMF9NQ0NGR19GQl9MT0NBVElPTik7CiAJYmFzZSA9IEdfMDAwMTAwX01DX0ZCX1NUQVJUKGJhc2UpIDw8IDE2OwotCXJzNjkwX3BtX2luZm8ocmRldik7CiAJcmRldi0+bWMuaWdwX3NpZGVwb3J0X2VuYWJsZWQgPSByYWRlb25fYXRvbWJpb3Nfc2lkZXBvcnRfcHJlc2VudChyZGV2KTsKKwlyczY5MF9wbV9pbmZvKHJkZXYpOwogCXJhZGVvbl92cmFtX2xvY2F0aW9uKHJkZXYsICZyZGV2LT5tYywgYmFzZSk7CisJcmRldi0+bWMuZ3R0X2Jhc2VfYWxpZ24gPSByZGV2LT5tYy5ndHRfc2l6ZSAtIDE7CiAJcmFkZW9uX2d0dF9sb2NhdGlvbihyZGV2LCAmcmRldi0+bWMpOwogCXJhZGVvbl91cGRhdGVfYmFuZHdpZHRoX2luZm8ocmRldik7CiB9CkBAIC0zOTcsNyArMzk4LDkgQEAKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTEgPSBOVUxMOwogCXN0cnVjdCByczY5MF93YXRlcm1hcmsgd20wOwogCXN0cnVjdCByczY5MF93YXRlcm1hcmsgd20xOwotCXUzMiB0bXAsIGQxbW9kZV9wcmlvcml0eV9hX2NudCwgZDJtb2RlX3ByaW9yaXR5X2FfY250OworCXUzMiB0bXA7CisJdTMyIGQxbW9kZV9wcmlvcml0eV9hX2NudCA9IFNfMDA2NTQ4X0QxTU9ERV9QUklPUklUWV9BX09GRigxKTsKKwl1MzIgZDJtb2RlX3ByaW9yaXR5X2FfY250ID0gU18wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX0FfT0ZGKDEpOwogCWZpeGVkMjBfMTIgcHJpb3JpdHlfbWFyazAyLCBwcmlvcml0eV9tYXJrMTIsIGZpbGxfcmF0ZTsKIAlmaXhlZDIwXzEyIGEsIGI7CiAKQEAgLTQ5NCwxMCArNDk3LDYgQEAKIAkJCWQxbW9kZV9wcmlvcml0eV9hX2NudCB8PSBTXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfQV9BTFdBWVNfT04oMSk7CiAJCQlkMm1vZGVfcHJpb3JpdHlfYV9jbnQgfD0gU18wMDZENDhfRDJNT0RFX1BSSU9SSVRZX0FfQUxXQVlTX09OKDEpOwogCQl9Ci0JCVdSRUczMihSXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfQV9DTlQsIGQxbW9kZV9wcmlvcml0eV9hX2NudCk7Ci0JCVdSRUczMihSXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9DTlQsIGQxbW9kZV9wcmlvcml0eV9hX2NudCk7Ci0JCVdSRUczMihSXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfQV9DTlQsIGQybW9kZV9wcmlvcml0eV9hX2NudCk7Ci0JCVdSRUczMihSXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfQl9DTlQsIGQybW9kZV9wcmlvcml0eV9hX2NudCk7CiAJfSBlbHNlIGlmIChtb2RlMCkgewogCQlpZiAoZGZpeGVkX3RydW5jKHdtMC5kYnBwKSA+IDY0KQogCQkJYS5mdWxsID0gZGZpeGVkX211bCh3bTAuZGJwcCwgd20wLm51bV9saW5lX3BhaXIpOwpAQCAtNTI3LDEzICs1MjYsNyBAQAogCQlkMW1vZGVfcHJpb3JpdHlfYV9jbnQgPSBkZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazAyKTsKIAkJaWYgKHJkZXYtPmRpc3BfcHJpb3JpdHkgPT0gMikKIAkJCWQxbW9kZV9wcmlvcml0eV9hX2NudCB8PSBTXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfQV9BTFdBWVNfT04oMSk7Ci0JCVdSRUczMihSXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfQV9DTlQsIGQxbW9kZV9wcmlvcml0eV9hX2NudCk7Ci0JCVdSRUczMihSXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9DTlQsIGQxbW9kZV9wcmlvcml0eV9hX2NudCk7Ci0JCVdSRUczMihSXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfQV9DTlQsCi0JCQlTXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfQV9PRkYoMSkpOwotCQlXUkVHMzIoUl8wMDZENENfRDJNT0RFX1BSSU9SSVRZX0JfQ05ULAotCQkJU18wMDZENENfRDJNT0RFX1BSSU9SSVRZX0JfT0ZGKDEpKTsKLQl9IGVsc2UgeworCX0gZWxzZSBpZiAobW9kZTEpIHsKIAkJaWYgKGRmaXhlZF90cnVuYyh3bTEuZGJwcCkgPiA2NCkKIAkJCWEuZnVsbCA9IGRmaXhlZF9tdWwod20xLmRicHAsIHdtMS5udW1fbGluZV9wYWlyKTsKIAkJZWxzZQpAQCAtNTYyLDEzICs1NTUsMTIgQEAKIAkJZDJtb2RlX3ByaW9yaXR5X2FfY250ID0gZGZpeGVkX3RydW5jKHByaW9yaXR5X21hcmsxMik7CiAJCWlmIChyZGV2LT5kaXNwX3ByaW9yaXR5ID09IDIpCiAJCQlkMm1vZGVfcHJpb3JpdHlfYV9jbnQgfD0gU18wMDZENDhfRDJNT0RFX1BSSU9SSVRZX0FfQUxXQVlTX09OKDEpOwotCQlXUkVHMzIoUl8wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX0FfQ05ULAotCQkJU18wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX0FfT0ZGKDEpKTsKLQkJV1JFRzMyKFJfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9CX0NOVCwKLQkJCVNfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9CX09GRigxKSk7Ci0JCVdSRUczMihSXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfQV9DTlQsIGQybW9kZV9wcmlvcml0eV9hX2NudCk7Ci0JCVdSRUczMihSXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfQl9DTlQsIGQybW9kZV9wcmlvcml0eV9hX2NudCk7CiAJfQorCisJV1JFRzMyKFJfMDA2NTQ4X0QxTU9ERV9QUklPUklUWV9BX0NOVCwgZDFtb2RlX3ByaW9yaXR5X2FfY250KTsKKwlXUkVHMzIoUl8wMDY1NENfRDFNT0RFX1BSSU9SSVRZX0JfQ05ULCBkMW1vZGVfcHJpb3JpdHlfYV9jbnQpOworCVdSRUczMihSXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfQV9DTlQsIGQybW9kZV9wcmlvcml0eV9hX2NudCk7CisJV1JFRzMyKFJfMDA2RDRDX0QyTU9ERV9QUklPUklUWV9CX0NOVCwgZDJtb2RlX3ByaW9yaXR5X2FfY250KTsKIH0KIAogdWludDMyX3QgcnM2OTBfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKQpAQCAtNjQwLDYgKzYzMiwxMyBAQAogCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIElCICglZCkuXG4iLCByKTsKIAkJcmV0dXJuIHI7CiAJfQorCisJciA9IHI2MDBfYXVkaW9faW5pdChyZGV2KTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxlZCBpbml0aWFsaXppbmcgYXVkaW9cbiIpOworCQlyZXR1cm4gcjsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjY2LDYgKzY2NSw3IEBACiAKIGludCByczY5MF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogeworCXI2MDBfYXVkaW9fZmluaShyZGV2KTsKIAlyMTAwX2NwX2Rpc2FibGUocmRldik7CiAJcjEwMF93Yl9kaXNhYmxlKHJkZXYpOwogCXJzNjAwX2lycV9kaXNhYmxlKHJkZXYpOwpAQCAtNjc1LDYgKzY3NSw3IEBACiAKIHZvaWQgcnM2OTBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKKwlyNjAwX2F1ZGlvX2ZpbmkocmRldik7CiAJcjEwMF9jcF9maW5pKHJkZXYpOwogCXIxMDBfd2JfZmluaShyZGV2KTsKIAlyMTAwX2liX2ZpbmkocmRldik7CkBAIC02OTgsNiArNjk5LDggQEAKIAlyYWRlb25fc2NyYXRjaF9pbml0KHJkZXYpOwogCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KIAlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCS8qIHJlc3RvcmUgc29tZSByZWdpc3RlciB0byBzYW5lIGRlZmF1bHRzICovCisJcjEwMF9yZXN0b3JlX3Nhbml0eShyZGV2KTsKIAkvKiBUT0RPOiBkaXNhYmxlIFZHQSBuZWVkIHRvIHVzZSBWR0EgcmVxdWVzdCAqLwogCS8qIEJJT1MqLwogCWlmICghcmFkZW9uX2dldF9iaW9zKHJkZXYpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMKaW5kZXggN2Q5YTdiMC4uNGQ2ZTg2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYwpAQCAtMTk1LDYgKzE5NSw3IEBACiAJcnY1MTVfdnJhbV9nZXRfdHlwZShyZGV2KTsKIAlyMTAwX3ZyYW1faW5pdF9zaXplcyhyZGV2KTsKIAlyYWRlb25fdnJhbV9sb2NhdGlvbihyZGV2LCAmcmRldi0+bWMsIDApOworCXJkZXYtPm1jLmd0dF9iYXNlX2FsaWduID0gMDsKIAlpZiAoIShyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApKQogCQlyYWRlb25fZ3R0X2xvY2F0aW9uKHJkZXYsICZyZGV2LT5tYyk7CiAJcmFkZW9uX3VwZGF0ZV9iYW5kd2lkdGhfaW5mbyhyZGV2KTsKQEAgLTQ2OCw2ICs0NjksOCBAQAogCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KIAlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOwogCS8qIFRPRE86IGRpc2FibGUgVkdBIG5lZWQgdG8gdXNlIFZHQSByZXF1ZXN0ICovCisJLyogcmVzdG9yZSBzb21lIHJlZ2lzdGVyIHRvIHNhbmUgZGVmYXVsdHMgKi8KKwlyMTAwX3Jlc3RvcmVfc2FuaXR5KHJkZXYpOwogCS8qIEJJT1MqLwogCWlmICghcmFkZW9uX2dldF9iaW9zKHJkZXYpKSB7CiAJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQpAQCAtOTI0LDcgKzkyNyw5IEBACiAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUxID0gTlVMTDsKIAlzdHJ1Y3QgcnY1MTVfd2F0ZXJtYXJrIHdtMDsKIAlzdHJ1Y3QgcnY1MTVfd2F0ZXJtYXJrIHdtMTsKLQl1MzIgdG1wLCBkMW1vZGVfcHJpb3JpdHlfYV9jbnQsIGQybW9kZV9wcmlvcml0eV9hX2NudDsKKwl1MzIgdG1wOworCXUzMiBkMW1vZGVfcHJpb3JpdHlfYV9jbnQgPSBNT0RFX1BSSU9SSVRZX09GRjsKKwl1MzIgZDJtb2RlX3ByaW9yaXR5X2FfY250ID0gTU9ERV9QUklPUklUWV9PRkY7CiAJZml4ZWQyMF8xMiBwcmlvcml0eV9tYXJrMDIsIHByaW9yaXR5X21hcmsxMiwgZmlsbF9yYXRlOwogCWZpeGVkMjBfMTIgYSwgYjsKIApAQCAtOTk4LDEwICsxMDAzLDYgQEAKIAkJCWQxbW9kZV9wcmlvcml0eV9hX2NudCB8PSBNT0RFX1BSSU9SSVRZX0FMV0FZU19PTjsKIAkJCWQybW9kZV9wcmlvcml0eV9hX2NudCB8PSBNT0RFX1BSSU9SSVRZX0FMV0FZU19PTjsKIAkJfQotCQlXUkVHMzIoRDFNT0RFX1BSSU9SSVRZX0FfQ05ULCBkMW1vZGVfcHJpb3JpdHlfYV9jbnQpOwotCQlXUkVHMzIoRDFNT0RFX1BSSU9SSVRZX0JfQ05ULCBkMW1vZGVfcHJpb3JpdHlfYV9jbnQpOwotCQlXUkVHMzIoRDJNT0RFX1BSSU9SSVRZX0FfQ05ULCBkMm1vZGVfcHJpb3JpdHlfYV9jbnQpOwotCQlXUkVHMzIoRDJNT0RFX1BSSU9SSVRZX0JfQ05ULCBkMm1vZGVfcHJpb3JpdHlfYV9jbnQpOwogCX0gZWxzZSBpZiAobW9kZTApIHsKIAkJaWYgKGRmaXhlZF90cnVuYyh3bTAuZGJwcCkgPiA2NCkKIAkJCWEuZnVsbCA9IGRmaXhlZF9kaXYod20wLmRicHAsIHdtMC5udW1fbGluZV9wYWlyKTsKQEAgLTEwMzEsMTEgKzEwMzIsNyBAQAogCQlkMW1vZGVfcHJpb3JpdHlfYV9jbnQgPSBkZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazAyKTsKIAkJaWYgKHJkZXYtPmRpc3BfcHJpb3JpdHkgPT0gMikKIAkJCWQxbW9kZV9wcmlvcml0eV9hX2NudCB8PSBNT0RFX1BSSU9SSVRZX0FMV0FZU19PTjsKLQkJV1JFRzMyKEQxTU9ERV9QUklPUklUWV9BX0NOVCwgZDFtb2RlX3ByaW9yaXR5X2FfY250KTsKLQkJV1JFRzMyKEQxTU9ERV9QUklPUklUWV9CX0NOVCwgZDFtb2RlX3ByaW9yaXR5X2FfY250KTsKLQkJV1JFRzMyKEQyTU9ERV9QUklPUklUWV9BX0NOVCwgTU9ERV9QUklPUklUWV9PRkYpOwotCQlXUkVHMzIoRDJNT0RFX1BSSU9SSVRZX0JfQ05ULCBNT0RFX1BSSU9SSVRZX09GRik7Ci0JfSBlbHNlIHsKKwl9IGVsc2UgaWYgKG1vZGUxKSB7CiAJCWlmIChkZml4ZWRfdHJ1bmMod20xLmRicHApID4gNjQpCiAJCQlhLmZ1bGwgPSBkZml4ZWRfZGl2KHdtMS5kYnBwLCB3bTEubnVtX2xpbmVfcGFpcik7CiAJCWVsc2UKQEAgLTEwNjQsMTEgKzEwNjEsMTIgQEAKIAkJZDJtb2RlX3ByaW9yaXR5X2FfY250ID0gZGZpeGVkX3RydW5jKHByaW9yaXR5X21hcmsxMik7CiAJCWlmIChyZGV2LT5kaXNwX3ByaW9yaXR5ID09IDIpCiAJCQlkMm1vZGVfcHJpb3JpdHlfYV9jbnQgfD0gTU9ERV9QUklPUklUWV9BTFdBWVNfT047Ci0JCVdSRUczMihEMU1PREVfUFJJT1JJVFlfQV9DTlQsIE1PREVfUFJJT1JJVFlfT0ZGKTsKLQkJV1JFRzMyKEQxTU9ERV9QUklPUklUWV9CX0NOVCwgTU9ERV9QUklPUklUWV9PRkYpOwotCQlXUkVHMzIoRDJNT0RFX1BSSU9SSVRZX0FfQ05ULCBkMm1vZGVfcHJpb3JpdHlfYV9jbnQpOwotCQlXUkVHMzIoRDJNT0RFX1BSSU9SSVRZX0JfQ05ULCBkMm1vZGVfcHJpb3JpdHlfYV9jbnQpOwogCX0KKworCVdSRUczMihEMU1PREVfUFJJT1JJVFlfQV9DTlQsIGQxbW9kZV9wcmlvcml0eV9hX2NudCk7CisJV1JFRzMyKEQxTU9ERV9QUklPUklUWV9CX0NOVCwgZDFtb2RlX3ByaW9yaXR5X2FfY250KTsKKwlXUkVHMzIoRDJNT0RFX1BSSU9SSVRZX0FfQ05ULCBkMm1vZGVfcHJpb3JpdHlfYV9jbnQpOworCVdSRUczMihEMk1PREVfUFJJT1JJVFlfQl9DTlQsIGQybW9kZV9wcmlvcml0eV9hX2NudCk7CiB9CiAKIHZvaWQgcnY1MTVfYmFuZHdpZHRoX3VwZGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYwppbmRleCBiN2ZkODIwLi5mMWM3OTY4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYwpAQCAtNDIsNiArNDIsMjEgQEAKIHN0YXRpYyB2b2lkIHJ2NzcwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcnY3NzBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKKy8qIGdldCB0ZW1wZXJhdHVyZSBpbiBtaWxsaWRlZ3JlZXMgKi8KK3UzMiBydjc3MF9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1MzIgdGVtcCA9IChSUkVHMzIoQ0dfTVVMVF9USEVSTUFMX1NUQVRVUykgJiBBU0lDX1RfTUFTSykgPj4KKwkJQVNJQ19UX1NISUZUOworCXUzMiBhY3R1YWxfdGVtcCA9IDA7CisKKwlpZiAoKHRlbXAgPj4gOSkgJiAxKQorCQlhY3R1YWxfdGVtcCA9IDA7CisJZWxzZQorCQlhY3R1YWxfdGVtcCA9ICh0ZW1wID4+IDEpICYgMHhmZjsKKworCXJldHVybiBhY3R1YWxfdGVtcCAqIDEwMDA7Cit9CisKIHZvaWQgcnY3NzBfcG1fbWlzYyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgcmVxX3BzX2lkeCA9IHJkZXYtPnBtLnJlcXVlc3RlZF9wb3dlcl9zdGF0ZV9pbmRleDsKQEAgLTE4OSw3ICsyMDQsMTAgQEAKIAkJV1JFRzMyKCgweDJjMjAgKyBqKSwgMHgwMDAwMDAwMCk7CiAJCVdSRUczMigoMHgyYzI0ICsgaiksIDB4MDAwMDAwMDApOwogCX0KLQlXUkVHMzIoSERQX1JFR19DT0hFUkVOQ1lfRkxVU0hfQ05UTCwgMCk7CisJLyogcjd4eCBodyBidWcuICBSZWFkIGZyb20gSERQX0RFQlVHMSByYXRoZXIKKwkgKiB0aGFuIHdyaXRpbmcgdG8gSERQX1JFR19DT0hFUkVOQ1lfRkxVU0hfQ05UTAorCSAqLworCXRtcCA9IFJSRUczMihIRFBfREVCVUcxKTsKIAogCXJ2NTE1X21jX3N0b3AocmRldiwgJnNhdmUpOwogCWlmIChyNjAwX21jX3dhaXRfZm9yX2lkbGUocmRldikpIHsKQEAgLTY1OSw4ICs2NzcsOSBAQAogCQkJCQkJCQkgcjYwMF9jb3VudF9waXBlX2JpdHMoKGNjX3JiX2JhY2tlbmRfZGlzYWJsZSAmCiAJCQkJCQkJCQkJICAgICAgIFI3WFhfTUFYX0JBQ0tFTkRTX01BU0spID4+IDE2KSksCiAJCQkJCQkJCShjY19yYl9iYWNrZW5kX2Rpc2FibGUgPj4gMTYpKTsKLQlnYl90aWxpbmdfY29uZmlnIHw9IEJBQ0tFTkRfTUFQKGJhY2tlbmRfbWFwKTsKIAorCXJkZXYtPmNvbmZpZy5ydjc3MC50aWxlX2NvbmZpZyA9IGdiX3RpbGluZ19jb25maWc7CisJZ2JfdGlsaW5nX2NvbmZpZyB8PSBCQUNLRU5EX01BUChiYWNrZW5kX21hcCk7CiAKIAlXUkVHMzIoR0JfVElMSU5HX0NPTkZJRywgZ2JfdGlsaW5nX2NvbmZpZyk7CiAJV1JFRzMyKERDUF9USUxJTkdfQ09ORklHLCAoZ2JfdGlsaW5nX2NvbmZpZyAmIDB4ZmZmZikpOwpAQCAtOTE5LDggKzkzOCw4IEBACiAJfQogCXJkZXYtPm1jLnZyYW1fd2lkdGggPSBudW1jaGFuICogY2hhbnNpemU7CiAJLyogQ291bGQgYXBlciBzaXplIHJlcG9ydCAwID8gKi8KLQlyZGV2LT5tYy5hcGVyX2Jhc2UgPSBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KHJkZXYtPmRkZXYsIDApOwotCXJkZXYtPm1jLmFwZXJfc2l6ZSA9IGRybV9nZXRfcmVzb3VyY2VfbGVuKHJkZXYtPmRkZXYsIDApOworCXJkZXYtPm1jLmFwZXJfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChyZGV2LT5wZGV2LCAwKTsKKwlyZGV2LT5tYy5hcGVyX3NpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHJkZXYtPnBkZXYsIDApOwogCS8qIFNldHVwIEdQVSBtZW1vcnkgc3BhY2UgKi8KIAlyZGV2LT5tYy5tY192cmFtX3NpemUgPSBSUkVHMzIoQ09ORklHX01FTVNJWkUpOwogCXJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID0gUlJFRzMyKENPTkZJR19NRU1TSVpFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwZC5oCmluZGV4IDk1MDZmOGMuLmI3YTVhMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBkLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MGQuaApAQCAtMTIyLDEyICsxMjIsMTggQEAKICNkZWZpbmUJCUdVSV9BQ1RJVkUJCQkJCSgxPDwzMSkKICNkZWZpbmUJR1JCTV9TVEFUVVMyCQkJCQkweDgwMTQKIAorI2RlZmluZQlDR19NVUxUX1RIRVJNQUxfU1RBVFVTCQkJCTB4NzQwCisjZGVmaW5lCQlBU0lDX1QoeCkJCQkgICAgICAgICgoeCkgPDwgMTYpCisjZGVmaW5lCQlBU0lDX1RfTUFTSwkJCSAgICAgICAgMHgzRkYwMDAwCisjZGVmaW5lCQlBU0lDX1RfU0hJRlQJCQkgICAgICAgIDE2CisKICNkZWZpbmUJSERQX0hPU1RfUEFUSF9DTlRMCQkJCTB4MkMwMAogI2RlZmluZQlIRFBfTk9OU1VSRkFDRV9CQVNFCQkJCTB4MkMwNAogI2RlZmluZQlIRFBfTk9OU1VSRkFDRV9JTkZPCQkJCTB4MkMwOAogI2RlZmluZQlIRFBfTk9OU1VSRkFDRV9TSVpFCQkJCTB4MkMwQwogI2RlZmluZSBIRFBfUkVHX0NPSEVSRU5DWV9GTFVTSF9DTlRMCQkJMHg1NEEwCiAjZGVmaW5lCUhEUF9USUxJTkdfQ09ORklHCQkJCTB4MkYzQworI2RlZmluZSBIRFBfREVCVUcxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJGMzQKIAogI2RlZmluZSBNQ19TSEFSRURfQ0hNQVAJCQkJCQkweDIwMDQKICNkZWZpbmUJCU5PT0ZDSEFOX1NISUZUCQkJCQkxMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3NhdmFnZS9zYXZhZ2VfYmNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vc2F2YWdlL3NhdmFnZV9iY2kuYwppbmRleCAyZDBjOWNhLi45NzZkYzhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vc2F2YWdlL3NhdmFnZV9iY2kuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vc2F2YWdlL3NhdmFnZV9iY2kuYwpAQCAtNTUyLDcgKzU1Miw3IEBACiAKIAogLyoKLSAqIEluaXRhbGl6ZSBtYXBwaW5ncy4gT24gU2F2YWdlNCBhbmQgU2F2YWdlSVggdGhlIGFsaWdubWVudAorICogSW5pdGlhbGl6ZSBtYXBwaW5ncy4gT24gU2F2YWdlNCBhbmQgU2F2YWdlSVggdGhlIGFsaWdubWVudAogICogYW5kIHNpemUgb2YgdGhlIGFwZXJ0dXJlIGlzIG5vdCBzdWl0YWJsZSBmb3IgYXV0b21hdGljIE1UUlIgc2V0dXAKICAqIGluIGRybV9hZGRtYXAuIFRoZXJlZm9yZSB3ZSBhZGQgdGhlbSBtYW51YWxseSBiZWZvcmUgdGhlIG1hcHMgYXJlCiAgKiBpbml0aWFsaXplZCwgYW5kIHRlYXIgdGhlbSBkb3duIG9uIGxhc3QgY2xvc2UuCkBAIC01NzMsMTMgKzU3MywxMyBAQAogCWRldl9wcml2LT5tdHJyWzJdLmhhbmRsZSA9IC0xOwogCWlmIChTM19TQVZBR0UzRF9TRVJJRVMoZGV2X3ByaXYtPmNoaXBzZXQpKSB7CiAJCWZiX3JzcmMgPSAwOwotCQlmYl9iYXNlID0gZHJtX2dldF9yZXNvdXJjZV9zdGFydChkZXYsIDApOworCQlmYl9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgMCk7CiAJCWZiX3NpemUgPSBTQVZBR0VfRkJfU0laRV9TMzsKIAkJbW1pb19iYXNlID0gZmJfYmFzZSArIFNBVkFHRV9GQl9TSVpFX1MzOwogCQlhcGVyX3JzcmMgPSAwOwogCQlhcGVydHVyZV9iYXNlID0gZmJfYmFzZSArIFNBVkFHRV9BUEVSVFVSRV9PRkZTRVQ7CiAJCS8qIHRoaXMgc2hvdWxkIGFsd2F5cyBiZSB0cnVlICovCi0JCWlmIChkcm1fZ2V0X3Jlc291cmNlX2xlbihkZXYsIDApID09IDB4MDgwMDAwMDApIHsKKwkJaWYgKHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wZGV2LCAwKSA9PSAweDA4MDAwMDAwKSB7CiAJCQkvKiBEb24ndCBtYWtlIE1NSU8gd3JpdGUtY29iaW5pbmchIFdlIG5lZWQgMwogCQkJICogTVRSUnMuICovCiAJCQlkZXZfcHJpdi0+bXRyclswXS5iYXNlID0gZmJfYmFzZTsKQEAgLTU5OSwxOCArNTk5LDE5IEBACiAJCQkJCSBkZXZfcHJpdi0+bXRyclsyXS5zaXplLCBEUk1fTVRSUl9XQyk7CiAJCX0gZWxzZSB7CiAJCQlEUk1fRVJST1IoInN0cmFuZ2UgcGNpX3Jlc291cmNlX2xlbiAlMDhsbHhcbiIsCi0JCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWRybV9nZXRfcmVzb3VyY2VfbGVuKGRldiwgMCkpOworCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCQkgIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wZGV2LCAwKSk7CiAJCX0KIAl9IGVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IFMzX1NVUEVSU0FWQUdFICYmCiAJCSAgIGRldl9wcml2LT5jaGlwc2V0ICE9IFMzX1NBVkFHRTIwMDApIHsKLQkJbW1pb19iYXNlID0gZHJtX2dldF9yZXNvdXJjZV9zdGFydChkZXYsIDApOworCQltbWlvX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCAwKTsKIAkJZmJfcnNyYyA9IDE7Ci0JCWZiX2Jhc2UgPSBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KGRldiwgMSk7CisJCWZiX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCAxKTsKIAkJZmJfc2l6ZSA9IFNBVkFHRV9GQl9TSVpFX1M0OwogCQlhcGVyX3JzcmMgPSAxOwogCQlhcGVydHVyZV9iYXNlID0gZmJfYmFzZSArIFNBVkFHRV9BUEVSVFVSRV9PRkZTRVQ7CiAJCS8qIHRoaXMgc2hvdWxkIGFsd2F5cyBiZSB0cnVlICovCi0JCWlmIChkcm1fZ2V0X3Jlc291cmNlX2xlbihkZXYsIDEpID09IDB4MDgwMDAwMDApIHsKKwkJaWYgKHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wZGV2LCAxKSA9PSAweDA4MDAwMDAwKSB7CiAJCQkvKiBDYW4gdXNlIG9uZSBNVFJSIHRvIGNvdmVyIGJvdGggZmIgYW5kCiAJCQkgKiBhcGVydHVyZS4gKi8KIAkJCWRldl9wcml2LT5tdHJyWzBdLmJhc2UgPSBmYl9iYXNlOwpAQCAtNjIwLDE1ICs2MjEsMTYgQEAKIAkJCQkJIGRldl9wcml2LT5tdHJyWzBdLnNpemUsIERSTV9NVFJSX1dDKTsKIAkJfSBlbHNlIHsKIAkJCURSTV9FUlJPUigic3RyYW5nZSBwY2lfcmVzb3VyY2VfbGVuICUwOGxseFxuIiwKLQkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpZHJtX2dldF9yZXNvdXJjZV9sZW4oZGV2LCAxKSk7CisJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJCSAgcGNpX3Jlc291cmNlX2xlbihkZXYtPnBkZXYsIDEpKTsKIAkJfQogCX0gZWxzZSB7Ci0JCW1taW9fYmFzZSA9IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKKwkJbW1pb19iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgMCk7CiAJCWZiX3JzcmMgPSAxOwotCQlmYl9iYXNlID0gZHJtX2dldF9yZXNvdXJjZV9zdGFydChkZXYsIDEpOwotCQlmYl9zaXplID0gZHJtX2dldF9yZXNvdXJjZV9sZW4oZGV2LCAxKTsKKwkJZmJfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBkZXYsIDEpOworCQlmYl9zaXplID0gcGNpX3Jlc291cmNlX2xlbihkZXYtPnBkZXYsIDEpOwogCQlhcGVyX3JzcmMgPSAyOwotCQlhcGVydHVyZV9iYXNlID0gZHJtX2dldF9yZXNvdXJjZV9zdGFydChkZXYsIDIpOworCQlhcGVydHVyZV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgMik7CiAJCS8qIEF1dG9tYXRpYyBNVFJSIHNldHVwIHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5nLiAqLwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Npcy9zaXNfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vc2lzL3Npc19kcnYuYwppbmRleCA0ZmQxZjA2Li43NzZiZjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vc2lzL3Npc19kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vc2lzL3Npc19kcnYuYwpAQCAtNDcsOSArNDcsOCBAQAogCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2OwogCWRldl9wcml2LT5jaGlwc2V0ID0gY2hpcHNldDsKIAlyZXQgPSBkcm1fc21hbl9pbml0KCZkZXZfcHJpdi0+c21hbiwgMiwgMTIsIDgpOwotCWlmIChyZXQpIHsKKwlpZiAocmV0KQogCQlrZnJlZShkZXZfcHJpdik7Ci0JfQogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zaXMvc2lzX21tLmMgYi9kcml2ZXJzL2dwdS9kcm0vc2lzL3Npc19tbS5jCmluZGV4IGFmMjIxMTEuLjA3ZDBmMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9zaXMvc2lzX21tLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Npcy9zaXNfbW0uYwpAQCAtNzgsNyArNzgsNyBAQAogI2Vsc2UgLyogQ09ORklHX0ZCX1NJU1tfTU9EVUxFXSAqLwogCiAjZGVmaW5lIFNJU19NTV9BTElHTl9TSElGVCA0Ci0jZGVmaW5lIFNJU19NTV9BTElHTl9NQVNLICggKDEgPDwgU0lTX01NX0FMSUdOX1NISUZUKSAtIDEpCisjZGVmaW5lIFNJU19NTV9BTElHTl9NQVNLICgoMSA8PCBTSVNfTU1fQUxJR05fU0hJRlQpIC0gMSkKIAogI2VuZGlmIC8qIENPTkZJR19GQl9TSVNbX01PRFVMRV0gKi8KIApAQCAtMjI1LDkgKzIyNSw4IEBACiAJCW1hcCA9IGVudHJ5LT5tYXA7CiAJCWlmICghbWFwKQogCQkJY29udGludWU7Ci0JCWlmIChtYXAtPnR5cGUgPT0gX0RSTV9SRUdJU1RFUlMpIHsKKwkJaWYgKG1hcC0+dHlwZSA9PSBfRFJNX1JFR0lTVEVSUykKIAkJCXJldHVybiBtYXA7Ci0JCX0KIAl9CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0yNjQsMTAgKzI2MywxMCBAQAogCiAJZW5kID0gamlmZmllcyArIChEUk1fSFogKiAzKTsKIAotCWZvciAoaT0wOyBpPDQ7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKIAkJZG8gewogCQkJaWRsZV9yZWcgPSBTSVNfUkVBRCgweDg1Y2MpOwotCQl9IHdoaWxlICggIXRpbWVfYWZ0ZXJfZXEoamlmZmllcywgZW5kKSAmJgorCQl9IHdoaWxlICghdGltZV9hZnRlcl9lcShqaWZmaWVzLCBlbmQpICYmCiAJCQkgICgoaWRsZV9yZWcgJiAweDgwMDAwMDAwKSAhPSAweDgwMDAwMDAwKSk7CiAJfQogCkBAIC0zMDEsNyArMzAwLDcgQEAKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIH0KIAotdm9pZCBzaXNfcmVjbGFpbV9idWZmZXJzX2xvY2tlZChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKK3ZvaWQgc2lzX3JlY2xhaW1fYnVmZmVyc19sb2NrZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKIAlkcm1fc2lzX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMzEyLDkgKzMxMSw4IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoZGV2LT5kcml2ZXItPmRtYV9xdWllc2NlbnQpIHsKKwlpZiAoZGV2LT5kcml2ZXItPmRtYV9xdWllc2NlbnQpCiAJCWRldi0+ZHJpdmVyLT5kbWFfcXVpZXNjZW50KGRldik7Ci0JfQogCiAJZHJtX3NtYW5fb3duZXJfY2xlYW51cCgmZGV2X3ByaXYtPnNtYW4sICh1bnNpZ25lZCBsb25nKWZpbGVfcHJpdik7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3R0bS9NYWtlZmlsZQppbmRleCA0MjU2ZTIwLi5iMjU2ZDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAKIGNjZmxhZ3MteSA6PSAtSWluY2x1ZGUvZHJtCiB0dG0teSA6PSB0dG1fYWdwX2JhY2tlbmQubyB0dG1fbWVtb3J5Lm8gdHRtX3R0Lm8gdHRtX2JvLm8gXAotCXR0bV9ib191dGlsLm8gdHRtX2JvX3ZtLm8gdHRtX21vZHVsZS5vIHR0bV9nbG9iYWwubyBcCisJdHRtX2JvX3V0aWwubyB0dG1fYm9fdm0ubyB0dG1fbW9kdWxlLm8gXAogCXR0bV9vYmplY3QubyB0dG1fbG9jay5vIHR0bV9leGVjYnVmX3V0aWwubyB0dG1fcGFnZV9hbGxvYy5vCiAKIG9iai0kKENPTkZJR19EUk1fVFRNKSArPSB0dG0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMKaW5kZXggNTU1ZWJiMS4uY2I0Y2Y3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jCkBAIC00NzYsNyArNDc2LDYgQEAKIAkJCSsrcHV0X2NvdW50OwogCQl9CiAJCWlmIChiby0+bWVtLm1tX25vZGUpIHsKLQkJCWJvLT5tZW0ubW1fbm9kZS0+cHJpdmF0ZSA9IE5VTEw7CiAJCQlkcm1fbW1fcHV0X2Jsb2NrKGJvLT5tZW0ubW1fbm9kZSk7CiAJCQliby0+bWVtLm1tX25vZGUgPSBOVUxMOwogCQl9CkBAIC02NzAsNyArNjY5LDYgQEAKIAkJCXByaW50ayhLRVJOX0VSUiBUVE1fUEZYICJCdWZmZXIgZXZpY3Rpb24gZmFpbGVkXG4iKTsKIAkJc3Bpbl9sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAJCWlmIChldmljdF9tZW0ubW1fbm9kZSkgewotCQkJZXZpY3RfbWVtLm1tX25vZGUtPnByaXZhdGUgPSBOVUxMOwogCQkJZHJtX21tX3B1dF9ibG9jayhldmljdF9tZW0ubW1fbm9kZSk7CiAJCQlldmljdF9tZW0ubW1fbm9kZSA9IE5VTEw7CiAJCX0KQEAgLTkyOSw4ICs5MjcsNiBAQAogCQltZW0tPm1tX25vZGUgPSBub2RlOwogCQltZW0tPm1lbV90eXBlID0gbWVtX3R5cGU7CiAJCW1lbS0+cGxhY2VtZW50ID0gY3VyX2ZsYWdzOwotCQlpZiAobm9kZSkKLQkJCW5vZGUtPnByaXZhdGUgPSBibzsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC05NzMsNyArOTY5LDYgQEAKIAkJCQkJCWludGVycnVwdGlibGUsIG5vX3dhaXRfcmVzZXJ2ZSwgbm9fd2FpdF9ncHUpOwogCQlpZiAocmV0ID09IDAgJiYgbWVtLT5tbV9ub2RlKSB7CiAJCQltZW0tPnBsYWNlbWVudCA9IGN1cl9mbGFnczsKLQkJCW1lbS0+bW1fbm9kZS0+cHJpdmF0ZSA9IGJvOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJaWYgKHJldCA9PSAtRVJFU1RBUlRTWVMpCkBAIC0xMDI5LDcgKzEwMjQsNiBAQAogb3V0X3VubG9jazoKIAlpZiAocmV0ICYmIG1lbS5tbV9ub2RlKSB7CiAJCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwotCQltZW0ubW1fbm9kZS0+cHJpdmF0ZSA9IE5VTEw7CiAJCWRybV9tbV9wdXRfYmxvY2sobWVtLm1tX25vZGUpOwogCQlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCX0KQEAgLTE0MDEsNyArMTM5NSw3IEBACiAJa2ZyZWUoZ2xvYik7CiB9CiAKLXZvaWQgdHRtX2JvX2dsb2JhbF9yZWxlYXNlKHN0cnVjdCB0dG1fZ2xvYmFsX3JlZmVyZW5jZSAqcmVmKQordm9pZCB0dG1fYm9fZ2xvYmFsX3JlbGVhc2Uoc3RydWN0IGRybV9nbG9iYWxfcmVmZXJlbmNlICpyZWYpCiB7CiAJc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IgPSByZWYtPm9iamVjdDsKIApAQCAtMTQxMCw3ICsxNDA0LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0wodHRtX2JvX2dsb2JhbF9yZWxlYXNlKTsKIAotaW50IHR0bV9ib19nbG9iYWxfaW5pdChzdHJ1Y3QgdHRtX2dsb2JhbF9yZWZlcmVuY2UgKnJlZikKK2ludCB0dG1fYm9fZ2xvYmFsX2luaXQoc3RydWN0IGRybV9nbG9iYWxfcmVmZXJlbmNlICpyZWYpCiB7CiAJc3RydWN0IHR0bV9ib19nbG9iYWxfcmVmICpib19yZWYgPQogCQljb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgdHRtX2JvX2dsb2JhbF9yZWYsIHJlZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib191dGlsLmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib191dGlsLmMKaW5kZXggMTMwMTJhMS4uN2NmZmIzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdXRpbC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3V0aWwuYwpAQCAtMzUzLDggKzM1Myw2IEBACiAJZmJvLT52bV9ub2RlID0gTlVMTDsKIAogCWZiby0+c3luY19vYmogPSBkcml2ZXItPnN5bmNfb2JqX3JlZihiby0+c3luY19vYmopOwotCWlmIChmYm8tPm1lbS5tbV9ub2RlKQotCQlmYm8tPm1lbS5tbV9ub2RlLT5wcml2YXRlID0gKHZvaWQgKilmYm87CiAJa3JlZl9pbml0KCZmYm8tPmxpc3Rfa3JlZik7CiAJa3JlZl9pbml0KCZmYm8tPmtyZWYpOwogCWZiby0+ZGVzdHJveSA9ICZ0dG1fdHJhbnNmZXJlZF9kZXN0cm95OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fZ2xvYmFsLmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9nbG9iYWwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE3MDA3MS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9nbG9iYWwuYworKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOC0yMDA5IFZNd2FyZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQotICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQotICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwotICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAotICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwotICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCi0gKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKLSAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCi0gKiBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMsIEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCi0gKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKLSAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKLSAqIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIEF1dGhvcnM6IFRob21hcyBIZWxsc3Ryb20gPHRoZWxsc3Ryb20tYXQtdm13YXJlLWRvdC1jb20+Ci0gKi8KLQotI2luY2x1ZGUgInR0bS90dG1fbW9kdWxlLmgiCi0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0KLXN0cnVjdCB0dG1fZ2xvYmFsX2l0ZW0gewotCXN0cnVjdCBtdXRleCBtdXRleDsKLQl2b2lkICpvYmplY3Q7Ci0JaW50IHJlZmNvdW50OwotfTsKLQotc3RhdGljIHN0cnVjdCB0dG1fZ2xvYmFsX2l0ZW0gZ2xvYltUVE1fR0xPQkFMX05VTV07Ci0KLXZvaWQgdHRtX2dsb2JhbF9pbml0KHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgVFRNX0dMT0JBTF9OVU07ICsraSkgewotCQlzdHJ1Y3QgdHRtX2dsb2JhbF9pdGVtICppdGVtID0gJmdsb2JbaV07Ci0JCW11dGV4X2luaXQoJml0ZW0tPm11dGV4KTsKLQkJaXRlbS0+b2JqZWN0ID0gTlVMTDsKLQkJaXRlbS0+cmVmY291bnQgPSAwOwotCX0KLX0KLQotdm9pZCB0dG1fZ2xvYmFsX3JlbGVhc2Uodm9pZCkKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgVFRNX0dMT0JBTF9OVU07ICsraSkgewotCQlzdHJ1Y3QgdHRtX2dsb2JhbF9pdGVtICppdGVtID0gJmdsb2JbaV07Ci0JCUJVR19PTihpdGVtLT5vYmplY3QgIT0gTlVMTCk7Ci0JCUJVR19PTihpdGVtLT5yZWZjb3VudCAhPSAwKTsKLQl9Ci19Ci0KLWludCB0dG1fZ2xvYmFsX2l0ZW1fcmVmKHN0cnVjdCB0dG1fZ2xvYmFsX3JlZmVyZW5jZSAqcmVmKQotewotCWludCByZXQ7Ci0Jc3RydWN0IHR0bV9nbG9iYWxfaXRlbSAqaXRlbSA9ICZnbG9iW3JlZi0+Z2xvYmFsX3R5cGVdOwotCXZvaWQgKm9iamVjdDsKLQotCW11dGV4X2xvY2soJml0ZW0tPm11dGV4KTsKLQlpZiAoaXRlbS0+cmVmY291bnQgPT0gMCkgewotCQlpdGVtLT5vYmplY3QgPSBremFsbG9jKHJlZi0+c2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICh1bmxpa2VseShpdGVtLT5vYmplY3QgPT0gTlVMTCkpIHsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dF9lcnI7Ci0JCX0KLQotCQlyZWYtPm9iamVjdCA9IGl0ZW0tPm9iamVjdDsKLQkJcmV0ID0gcmVmLT5pbml0KHJlZik7Ci0JCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCi0JCQlnb3RvIG91dF9lcnI7Ci0KLQl9Ci0JKytpdGVtLT5yZWZjb3VudDsKLQlyZWYtPm9iamVjdCA9IGl0ZW0tPm9iamVjdDsKLQlvYmplY3QgPSBpdGVtLT5vYmplY3Q7Ci0JbXV0ZXhfdW5sb2NrKCZpdGVtLT5tdXRleCk7Ci0JcmV0dXJuIDA7Ci1vdXRfZXJyOgotCW11dGV4X3VubG9jaygmaXRlbS0+bXV0ZXgpOwotCWl0ZW0tPm9iamVjdCA9IE5VTEw7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0wodHRtX2dsb2JhbF9pdGVtX3JlZik7Ci0KLXZvaWQgdHRtX2dsb2JhbF9pdGVtX3VucmVmKHN0cnVjdCB0dG1fZ2xvYmFsX3JlZmVyZW5jZSAqcmVmKQotewotCXN0cnVjdCB0dG1fZ2xvYmFsX2l0ZW0gKml0ZW0gPSAmZ2xvYltyZWYtPmdsb2JhbF90eXBlXTsKLQotCW11dGV4X2xvY2soJml0ZW0tPm11dGV4KTsKLQlCVUdfT04oaXRlbS0+cmVmY291bnQgPT0gMCk7Ci0JQlVHX09OKHJlZi0+b2JqZWN0ICE9IGl0ZW0tPm9iamVjdCk7Ci0JaWYgKC0taXRlbS0+cmVmY291bnQgPT0gMCkgewotCQlyZWYtPnJlbGVhc2UocmVmKTsKLQkJaXRlbS0+b2JqZWN0ID0gTlVMTDsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZpdGVtLT5tdXRleCk7Ci19Ci1FWFBPUlRfU1lNQk9MKHR0bV9nbG9iYWxfaXRlbV91bnJlZik7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX21vZHVsZS5jIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fbW9kdWxlLmMKaW5kZXggOWE2ZWRiZi4uOTAyZDdjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fbW9kdWxlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fbW9kdWxlLmMKQEAgLTcwLDggKzcwLDYgQEAKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlyZXR1cm4gcmV0OwogCi0JdHRtX2dsb2JhbF9pbml0KCk7Ci0KIAlhdG9taWNfc2V0KCZkZXZpY2VfcmVsZWFzZWQsIDApOwogCXJldCA9IGRybV9jbGFzc19kZXZpY2VfcmVnaXN0ZXIoJnR0bV9kcm1fY2xhc3NfZGV2aWNlKTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQpAQCAtODEsNyArNzksNiBAQAogb3V0X25vX2Rldl9yZWc6CiAJYXRvbWljX3NldCgmZGV2aWNlX3JlbGVhc2VkLCAxKTsKIAl3YWtlX3VwX2FsbCgmZXhpdF9xKTsKLQl0dG1fZ2xvYmFsX3JlbGVhc2UoKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC05NSw3ICs5Miw2IEBACiAJICovCiAKIAl3YWl0X2V2ZW50KGV4aXRfcSwgYXRvbWljX3JlYWQoJmRldmljZV9yZWxlYXNlZCkgPT0gMSk7Ci0JdHRtX2dsb2JhbF9yZWxlYXNlKCk7CiB9CiAKIG1vZHVsZV9pbml0KHR0bV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3BhZ2VfYWxsb2MuYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3BhZ2VfYWxsb2MuYwppbmRleCBiMWQ2N2RjLi5jYTkwNDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9wYWdlX2FsbG9jLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fcGFnZV9hbGxvYy5jCkBAIC00MCwxMSArNDAsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtL2FncC5oPgogCiAjaW5jbHVkZSAidHRtL3R0bV9ib19kcml2ZXIuaCIKICNpbmNsdWRlICJ0dG0vdHRtX3BhZ2VfYWxsb2MuaCIKIAorI2lmZGVmIFRUTV9IQVNfQUdQCisjaW5jbHVkZSA8YXNtL2FncC5oPgorI2VuZGlmCiAKICNkZWZpbmUgTlVNX1BBR0VTX1RPX0FMTE9DCQkoUEFHRV9TSVpFL3NpemVvZihzdHJ1Y3QgcGFnZSAqKSkKICNkZWZpbmUgU01BTExfQUxMT0NBVElPTgkJMTYKQEAgLTM5Miw3ICszOTQsNyBAQAogLyoqCiAgKiBDYWxsYmFjayBmb3IgbW0gdG8gcmVxdWVzdCBwb29sIHRvIHJlZHVjZSBudW1iZXIgb2YgcGFnZSBoZWxkLgogICovCi1zdGF0aWMgaW50IHR0bV9wb29sX21tX3NocmluayhpbnQgc2hyaW5rX3BhZ2VzLCBnZnBfdCBnZnBfbWFzaykKK3N0YXRpYyBpbnQgdHRtX3Bvb2xfbW1fc2hyaW5rKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLCBpbnQgc2hyaW5rX3BhZ2VzLCBnZnBfdCBnZnBfbWFzaykKIHsKIAlzdGF0aWMgYXRvbWljX3Qgc3RhcnRfcG9vbCA9IEFUT01JQ19JTklUKDApOwogCXVuc2lnbmVkIGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2RtYS5jCmluZGV4IGJmYjkyZDIuLjY4ZGRhNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2RtYS5jCkBAIC01OCwyOCArNTgsMjkgQEAKIAkqKCh1aW50MzJfdCAqKSh2YikpID0gKChuUmVnKSA+PiAyKSB8IEhBTENZT05fSEVBREVSMTsJXAogCSooKHVpbnQzMl90ICopKHZiKSArIDEpID0gKG5EYXRhKTsJCQlcCiAJdmIgPSAoKHVpbnQzMl90ICopdmIpICsgMjsJCQkJXAotCWRldl9wcml2LT5kbWFfbG93ICs9ODsJCQkJCVwKKwlkZXZfcHJpdi0+ZG1hX2xvdyArPSA4OwkJCQkJXAogfQogCiAjZGVmaW5lIHZpYV9mbHVzaF93cml0ZV9jb21iaW5lKCkgRFJNX01FTU9SWUJBUlJJRVIoKQogCi0jZGVmaW5lIFZJQV9PVVRfUklOR19RVyh3MSx3MikJCQlcCisjZGVmaW5lIFZJQV9PVVRfUklOR19RVyh3MSwgdzIpCWRvIHsJCVwKIAkqdmIrKyA9ICh3MSk7CQkJCVwKIAkqdmIrKyA9ICh3Mik7CQkJCVwKLQlkZXZfcHJpdi0+ZG1hX2xvdyArPSA4OworCWRldl9wcml2LT5kbWFfbG93ICs9IDg7CQkJXAorfSB3aGlsZSAoMCkKIAotc3RhdGljIHZvaWQgdmlhX2NtZGJ1Zl9zdGFydChkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2KTsKLXN0YXRpYyB2b2lkIHZpYV9jbWRidWZfcGF1c2UoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdik7Ci1zdGF0aWMgdm9pZCB2aWFfY21kYnVmX3Jlc2V0KGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpOwotc3RhdGljIHZvaWQgdmlhX2NtZGJ1Zl9yZXdpbmQoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdik7Ci1zdGF0aWMgaW50IHZpYV93YWl0X2lkbGUoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdik7Ci1zdGF0aWMgdm9pZCB2aWFfcGFkX2NhY2hlKGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYsIGludCBxd29yZHMpOworc3RhdGljIHZvaWQgdmlhX2NtZGJ1Zl9zdGFydChkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYpOworc3RhdGljIHZvaWQgdmlhX2NtZGJ1Zl9wYXVzZShkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYpOworc3RhdGljIHZvaWQgdmlhX2NtZGJ1Zl9yZXNldChkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYpOworc3RhdGljIHZvaWQgdmlhX2NtZGJ1Zl9yZXdpbmQoZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2KTsKK3N0YXRpYyBpbnQgdmlhX3dhaXRfaWRsZShkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYpOworc3RhdGljIHZvaWQgdmlhX3BhZF9jYWNoZShkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBxd29yZHMpOwogCiAvKgogICogRnJlZSBzcGFjZSBpbiBjb21tYW5kIGJ1ZmZlci4KICAqLwogCi1zdGF0aWMgdWludDMyX3QgdmlhX2NtZGJ1Zl9zcGFjZShkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2KQorc3RhdGljIHVpbnQzMl90IHZpYV9jbWRidWZfc3BhY2UoZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2KQogewogCXVpbnQzMl90IGFncF9iYXNlID0gZGV2X3ByaXYtPmRtYV9vZmZzZXQgKyAodWludDMyX3QpIGRldl9wcml2LT5hZ3BBZGRyOwogCXVpbnQzMl90IGh3X2FkZHIgPSAqKGRldl9wcml2LT5od19hZGRyX3B0cikgLSBhZ3BfYmFzZTsKQEAgLTkzLDcgKzk0LDcgQEAKICAqIEhvdyBtdWNoIGRvZXMgdGhlIGNvbW1hbmQgcmVndWxhdG9yIGxhZyBiZWhpbmQ/CiAgKi8KIAotc3RhdGljIHVpbnQzMl90IHZpYV9jbWRidWZfbGFnKGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpCitzdGF0aWMgdWludDMyX3QgdmlhX2NtZGJ1Zl9sYWcoZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2KQogewogCXVpbnQzMl90IGFncF9iYXNlID0gZGV2X3ByaXYtPmRtYV9vZmZzZXQgKyAodWludDMyX3QpIGRldl9wcml2LT5hZ3BBZGRyOwogCXVpbnQzMl90IGh3X2FkZHIgPSAqKGRldl9wcml2LT5od19hZGRyX3B0cikgLSBhZ3BfYmFzZTsKQEAgLTEwOCw3ICsxMDksNyBAQAogICovCiAKIHN0YXRpYyBpbmxpbmUgaW50Ci12aWFfY21kYnVmX3dhaXQoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdiwgdW5zaWduZWQgaW50IHNpemUpCit2aWFfY21kYnVmX3dhaXQoZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2LCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKIAl1aW50MzJfdCBhZ3BfYmFzZSA9IGRldl9wcml2LT5kbWFfb2Zmc2V0ICsgKHVpbnQzMl90KSBkZXZfcHJpdi0+YWdwQWRkcjsKIAl1aW50MzJfdCBjdXJfYWRkciwgaHdfYWRkciwgbmV4dF9hZGRyOwpAQCAtMTQ2LDE0ICsxNDcsMTMgQEAKIAkgICAgZGV2X3ByaXYtPmRtYV9oaWdoKSB7CiAJCXZpYV9jbWRidWZfcmV3aW5kKGRldl9wcml2KTsKIAl9Ci0JaWYgKHZpYV9jbWRidWZfd2FpdChkZXZfcHJpdiwgc2l6ZSkgIT0gMCkgeworCWlmICh2aWFfY21kYnVmX3dhaXQoZGV2X3ByaXYsIHNpemUpICE9IDApCiAJCXJldHVybiBOVUxMOwotCX0KIAogCXJldHVybiAodWludDMyX3QgKikgKGRldl9wcml2LT5kbWFfcHRyICsgZGV2X3ByaXYtPmRtYV9sb3cpOwogfQogCi1pbnQgdmlhX2RtYV9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQoraW50IHZpYV9kbWFfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWlmIChkZXYtPmRldl9wcml2YXRlKSB7CiAJCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9CkBAIC0xNzEsOSArMTcxLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWFfaW5pdGlhbGl6ZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKLQkJCSAgZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdiwKLQkJCSAgZHJtX3ZpYV9kbWFfaW5pdF90ICogaW5pdCkKK3N0YXRpYyBpbnQgdmlhX2luaXRpYWxpemUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2LAorCQkJICBkcm1fdmlhX2RtYV9pbml0X3QgKmluaXQpCiB7CiAJaWYgKCFkZXZfcHJpdiB8fCAhZGV2X3ByaXYtPm1taW8pIHsKIAkJRFJNX0VSUk9SKCJ2aWFfZG1hX2luaXQgY2FsbGVkIGJlZm9yZSB2aWFfbWFwX2luaXRcbiIpOwpAQCAtMjU4LDcgKzI1OCw3IEBACiAJcmV0dXJuIHJldGNvZGU7CiB9CiAKLXN0YXRpYyBpbnQgdmlhX2Rpc3BhdGNoX2NtZGJ1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgZHJtX3ZpYV9jbWRidWZmZXJfdCAqIGNtZCkKK3N0YXRpYyBpbnQgdmlhX2Rpc3BhdGNoX2NtZGJ1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBkcm1fdmlhX2NtZGJ1ZmZlcl90ICpjbWQpCiB7CiAJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2OwogCXVpbnQzMl90ICp2YjsKQEAgLTI3MSw5ICsyNzEsOCBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKLQlpZiAoY21kLT5zaXplID4gVklBX1BDSV9CVUZfU0laRSkgeworCWlmIChjbWQtPnNpemUgPiBWSUFfUENJX0JVRl9TSVpFKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAKIAlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKGRldl9wcml2LT5wY2lfYnVmLCBjbWQtPmJ1ZiwgY21kLT5zaXplKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0yOTEsOSArMjkwLDggQEAKIAl9CiAKIAl2YiA9IHZpYV9jaGVja19kbWEoZGV2X3ByaXYsIChjbWQtPnNpemUgPCAweDEwMCkgPyAweDEwMiA6IGNtZC0+c2l6ZSk7Ci0JaWYgKHZiID09IE5VTEwpIHsKKwlpZiAodmIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FQUdBSU47Ci0JfQogCiAJbWVtY3B5KHZiLCBkZXZfcHJpdi0+cGNpX2J1ZiwgY21kLT5zaXplKTsKIApAQCAtMzExLDEzICszMDksMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHZpYV9kcml2ZXJfZG1hX3F1aWVzY2VudChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK2ludCB2aWFfZHJpdmVyX2RtYV9xdWllc2NlbnQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCi0JaWYgKCF2aWFfd2FpdF9pZGxlKGRldl9wcml2KSkgeworCWlmICghdmlhX3dhaXRfaWRsZShkZXZfcHJpdikpCiAJCXJldHVybiAtRUJVU1k7Ci0JfQogCXJldHVybiAwOwogfQogCkBAIC0zMzksMjIgKzMzNiwxNyBAQAogCURSTV9ERUJVRygiYnVmICVwIHNpemUgJWx1XG4iLCBjbWRidWYtPmJ1ZiwgY21kYnVmLT5zaXplKTsKIAogCXJldCA9IHZpYV9kaXNwYXRjaF9jbWRidWZmZXIoZGV2LCBjbWRidWYpOwotCWlmIChyZXQpIHsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHZpYV9kaXNwYXRjaF9wY2lfY21kYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LAotCQkJCSAgICAgIGRybV92aWFfY21kYnVmZmVyX3QgKiBjbWQpCitzdGF0aWMgaW50IHZpYV9kaXNwYXRjaF9wY2lfY21kYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICAgZHJtX3ZpYV9jbWRidWZmZXJfdCAqY21kKQogewogCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IHJldDsKIAotCWlmIChjbWQtPnNpemUgPiBWSUFfUENJX0JVRl9TSVpFKSB7CisJaWYgKGNtZC0+c2l6ZSA+IFZJQV9QQ0lfQlVGX1NJWkUpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKGRldl9wcml2LT5wY2lfYnVmLCBjbWQtPmJ1ZiwgY21kLT5zaXplKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKQEAgLTM4MCwxOSArMzcyLDE0IEBACiAJRFJNX0RFQlVHKCJidWYgJXAgc2l6ZSAlbHVcbiIsIGNtZGJ1Zi0+YnVmLCBjbWRidWYtPnNpemUpOwogCiAJcmV0ID0gdmlhX2Rpc3BhdGNoX3BjaV9jbWRidWZmZXIoZGV2LCBjbWRidWYpOwotCWlmIChyZXQpIHsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW5saW5lIHVpbnQzMl90ICp2aWFfYWxpZ25fYnVmZmVyKGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYsCitzdGF0aWMgaW5saW5lIHVpbnQzMl90ICp2aWFfYWxpZ25fYnVmZmVyKGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiwKIAkJCQkJIHVpbnQzMl90ICogdmIsIGludCBxd19jb3VudCkKIHsKLQlmb3IgKDsgcXdfY291bnQgPiAwOyAtLXF3X2NvdW50KSB7CisJZm9yICg7IHF3X2NvdW50ID4gMDsgLS1xd19jb3VudCkKIAkJVklBX09VVF9SSU5HX1FXKEhDX0RVTU1ZLCBIQ19EVU1NWSk7Ci0JfQogCXJldHVybiB2YjsKIH0KIApAQCAtNDAxLDcgKzM4OCw3IEBACiAgKgogICogUmV0dXJucyB2aXJ0dWFsIHBvaW50ZXIgdG8gcmluZyBidWZmZXIuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdWludDMyX3QgKnZpYV9nZXRfZG1hKGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpCitzdGF0aWMgaW5saW5lIHVpbnQzMl90ICp2aWFfZ2V0X2RtYShkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYpCiB7CiAJcmV0dXJuICh1aW50MzJfdCAqKSAoZGV2X3ByaXYtPmRtYV9wdHIgKyBkZXZfcHJpdi0+ZG1hX2xvdyk7CiB9CkBAIC00MTEsMTggKzM5OCwxOCBAQAogICogbW9kaWZ5aW5nIHRoZSBwYXVzZSBhZGRyZXNzIHN0b3JlZCBpbiB0aGUgYnVmZmVyIGl0c2VsZi4gSWYKICAqIHRoZSByZWd1bGF0b3IgaGFzIGFscmVhZHkgcGF1c2VkLCByZXN0YXJ0IGl0LgogICovCi1zdGF0aWMgaW50IHZpYV9ob29rX3NlZ21lbnQoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdiwKK3N0YXRpYyBpbnQgdmlhX2hvb2tfc2VnbWVudChkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYsCiAJCQkgICAgdWludDMyX3QgcGF1c2VfYWRkcl9oaSwgdWludDMyX3QgcGF1c2VfYWRkcl9sbywKIAkJCSAgICBpbnQgbm9fcGNpX2ZpcmUpCiB7CiAJaW50IHBhdXNlZCwgY291bnQ7CiAJdm9sYXRpbGUgdWludDMyX3QgKnBhdXNlZF9hdCA9IGRldl9wcml2LT5sYXN0X3BhdXNlX3B0cjsKLQl1aW50MzJfdCByZWFkZXIscHRyOworCXVpbnQzMl90IHJlYWRlciwgcHRyOwogCXVpbnQzMl90IGRpZmY7CiAKIAlwYXVzZWQgPSAwOwogCXZpYV9mbHVzaF93cml0ZV9jb21iaW5lKCk7Ci0JKHZvaWQpICoodm9sYXRpbGUgdWludDMyX3QgKikodmlhX2dldF9kbWEoZGV2X3ByaXYpIC0xKTsKKwkodm9pZCkgKih2b2xhdGlsZSB1aW50MzJfdCAqKSh2aWFfZ2V0X2RtYShkZXZfcHJpdikgLSAxKTsKIAogCSpwYXVzZWRfYXQgPSBwYXVzZV9hZGRyX2xvOwogCXZpYV9mbHVzaF93cml0ZV9jb21iaW5lKCk7CkBAIC00MzUsNyArNDIyLDcgQEAKIAlkZXZfcHJpdi0+bGFzdF9wYXVzZV9wdHIgPSB2aWFfZ2V0X2RtYShkZXZfcHJpdikgLSAxOwogCiAJLyoKLQkgKiBJZiB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQgdGhlIGNvbW1hbmQgcmVhZGVyIHdpbGwgCisJICogSWYgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBjb21tYW5kIHJlYWRlciB3aWxsCiAJICogbWlzcyB0aGUgbmV3IHBhdXNlIGFkZHJlc3MgYW5kIHBhdXNlIG9uIHRoZSBvbGQgb25lLAogCSAqIEluIHRoYXQgY2FzZSB3ZSBuZWVkIHRvIHByb2dyYW0gdGhlIG5ldyBzdGFydCBhZGRyZXNzCiAJICogdXNpbmcgUENJLgpAQCAtNDQzLDkgKzQzMCw5IEBACiAKIAlkaWZmID0gKHVpbnQzMl90KSAocHRyIC0gcmVhZGVyKSAtIGRldl9wcml2LT5kbWFfZGlmZjsKIAljb3VudCA9IDEwMDAwMDAwOwotCXdoaWxlKGRpZmYgPT0gMCAmJiBjb3VudC0tKSB7CisJd2hpbGUgKGRpZmYgPT0gMCAmJiBjb3VudC0tKSB7CiAJCXBhdXNlZCA9IChWSUFfUkVBRCgweDQxYykgJiAweDgwMDAwMDAwKTsKLQkJaWYgKHBhdXNlZCkgCisJCWlmIChwYXVzZWQpCiAJCQlicmVhazsKIAkJcmVhZGVyID0gKihkZXZfcHJpdi0+aHdfYWRkcl9wdHIpOwogCQlkaWZmID0gKHVpbnQzMl90KSAocHRyIC0gcmVhZGVyKSAtIGRldl9wcml2LT5kbWFfZGlmZjsKQEAgLTQ3Nyw3ICs0NjQsNyBAQAogCXJldHVybiBwYXVzZWQ7CiB9CiAKLXN0YXRpYyBpbnQgdmlhX3dhaXRfaWRsZShkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2KQorc3RhdGljIGludCB2aWFfd2FpdF9pZGxlKGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdikKIHsKIAlpbnQgY291bnQgPSAxMDAwMDAwMDsKIApAQCAtNDkxLDkgKzQ3OCw5IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgdWludDMyX3QgKnZpYV9hbGlnbl9jbWQoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdiwgdWludDMyX3QgY21kX3R5cGUsCi0JCQkgICAgICAgdWludDMyX3QgYWRkciwgdWludDMyX3QgKiBjbWRfYWRkcl9oaSwKLQkJCSAgICAgICB1aW50MzJfdCAqIGNtZF9hZGRyX2xvLCBpbnQgc2tpcF93YWl0KQorc3RhdGljIHVpbnQzMl90ICp2aWFfYWxpZ25fY21kKGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiwgdWludDMyX3QgY21kX3R5cGUsCisJCQkgICAgICAgdWludDMyX3QgYWRkciwgdWludDMyX3QgKmNtZF9hZGRyX2hpLAorCQkJICAgICAgIHVpbnQzMl90ICpjbWRfYWRkcl9sbywgaW50IHNraXBfd2FpdCkKIHsKIAl1aW50MzJfdCBhZ3BfYmFzZTsKIAl1aW50MzJfdCBjbWRfYWRkciwgYWRkcl9sbywgYWRkcl9oaTsKQEAgLTUyMSw3ICs1MDgsNyBAQAogCXJldHVybiB2YjsKIH0KIAotc3RhdGljIHZvaWQgdmlhX2NtZGJ1Zl9zdGFydChkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2KQorc3RhdGljIHZvaWQgdmlhX2NtZGJ1Zl9zdGFydChkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYpCiB7CiAJdWludDMyX3QgcGF1c2VfYWRkcl9sbywgcGF1c2VfYWRkcl9oaTsKIAl1aW50MzJfdCBzdGFydF9hZGRyLCBzdGFydF9hZGRyX2xvOwpAQCAtNTgwLDcgKzU2Nyw3IEBACiAJZGV2X3ByaXYtPmRtYV9kaWZmID0gcHRyIC0gcmVhZGVyOwogfQogCi1zdGF0aWMgdm9pZCB2aWFfcGFkX2NhY2hlKGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYsIGludCBxd29yZHMpCitzdGF0aWMgdm9pZCB2aWFfcGFkX2NhY2hlKGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IHF3b3JkcykKIHsKIAl1aW50MzJfdCAqdmI7CiAKQEAgLTU5MCw3ICs1NzcsNyBAQAogCXZpYV9hbGlnbl9idWZmZXIoZGV2X3ByaXYsIHZiLCBxd29yZHMpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdmlhX2R1bW15X2JpdGJsdChkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2KQorc3RhdGljIGlubGluZSB2b2lkIHZpYV9kdW1teV9iaXRibHQoZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2KQogewogCXVpbnQzMl90ICp2YiA9IHZpYV9nZXRfZG1hKGRldl9wcml2KTsKIAlTZXRSZWcyREFHUCgweDBDLCAoMCB8ICgwIDw8IDE2KSkpOwpAQCAtNTk4LDcgKzU4NSw3IEBACiAJU2V0UmVnMkRBR1AoMHgwLCAweDEgfCAweDIwMDAgfCAweEFBMDAwMDAwKTsKIH0KIAotc3RhdGljIHZvaWQgdmlhX2NtZGJ1Zl9qdW1wKGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpCitzdGF0aWMgdm9pZCB2aWFfY21kYnVmX2p1bXAoZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2KQogewogCXVpbnQzMl90IGFncF9iYXNlOwogCXVpbnQzMl90IHBhdXNlX2FkZHJfbG8sIHBhdXNlX2FkZHJfaGk7CkBAIC02MTcsOSArNjA0LDggQEAKIAkgKi8KIAogCWRldl9wcml2LT5kbWFfbG93ID0gMDsKLQlpZiAodmlhX2NtZGJ1Zl93YWl0KGRldl9wcml2LCBDTURCVUZfQUxJR05NRU5UX1NJWkUpICE9IDApIHsKKwlpZiAodmlhX2NtZGJ1Zl93YWl0KGRldl9wcml2LCBDTURCVUZfQUxJR05NRU5UX1NJWkUpICE9IDApCiAJCURSTV9FUlJPUigidmlhX2NtZGJ1Zl9qdW1wIGZhaWxlZFxuIik7Ci0JfQogCiAJdmlhX2R1bW15X2JpdGJsdChkZXZfcHJpdik7CiAJdmlhX2R1bW15X2JpdGJsdChkZXZfcHJpdik7CkBAIC02NTcsMTIgKzY0MywxMiBAQAogfQogCiAKLXN0YXRpYyB2b2lkIHZpYV9jbWRidWZfcmV3aW5kKGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpCitzdGF0aWMgdm9pZCB2aWFfY21kYnVmX3Jld2luZChkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYpCiB7CiAJdmlhX2NtZGJ1Zl9qdW1wKGRldl9wcml2KTsKIH0KIAotc3RhdGljIHZvaWQgdmlhX2NtZGJ1Zl9mbHVzaChkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2LCB1aW50MzJfdCBjbWRfdHlwZSkKK3N0YXRpYyB2b2lkIHZpYV9jbWRidWZfZmx1c2goZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2LCB1aW50MzJfdCBjbWRfdHlwZSkKIHsKIAl1aW50MzJfdCBwYXVzZV9hZGRyX2xvLCBwYXVzZV9hZGRyX2hpOwogCkBAIC02NzAsMTIgKzY1NiwxMiBAQAogCXZpYV9ob29rX3NlZ21lbnQoZGV2X3ByaXYsIHBhdXNlX2FkZHJfaGksIHBhdXNlX2FkZHJfbG8sIDApOwogfQogCi1zdGF0aWMgdm9pZCB2aWFfY21kYnVmX3BhdXNlKGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpCitzdGF0aWMgdm9pZCB2aWFfY21kYnVmX3BhdXNlKGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdikKIHsKIAl2aWFfY21kYnVmX2ZsdXNoKGRldl9wcml2LCBIQ19IQUdQQnBJRF9QQVVTRSk7CiB9CiAKLXN0YXRpYyB2b2lkIHZpYV9jbWRidWZfcmVzZXQoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdikKK3N0YXRpYyB2b2lkIHZpYV9jbWRidWZfcmVzZXQoZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2KQogewogCXZpYV9jbWRidWZfZmx1c2goZGV2X3ByaXYsIEhDX0hBR1BCcElEX1NUT1ApOwogCXZpYV93YWl0X2lkbGUoZGV2X3ByaXYpOwpAQCAtNzA4LDkgKzY5NCw4IEBACiAJY2FzZSBWSUFfQ01EQlVGX1NQQUNFOgogCQl3aGlsZSAoKCh0bXBfc2l6ZSA9IHZpYV9jbWRidWZfc3BhY2UoZGV2X3ByaXYpKSA8IGRfc2l6LT5zaXplKQogCQkgICAgICAgJiYgLS1jb3VudCkgewotCQkJaWYgKCFkX3Npei0+d2FpdCkgeworCQkJaWYgKCFkX3Npei0+d2FpdCkKIAkJCQlicmVhazsKLQkJCX0KIAkJfQogCQlpZiAoIWNvdW50KSB7CiAJCQlEUk1fRVJST1IoIlZJQV9DTURCVUZfU1BBQ0UgdGltZWQgb3V0LlxuIik7CkBAIC03MjAsOSArNzA1LDggQEAKIAljYXNlIFZJQV9DTURCVUZfTEFHOgogCQl3aGlsZSAoKCh0bXBfc2l6ZSA9IHZpYV9jbWRidWZfbGFnKGRldl9wcml2KSkgPiBkX3Npei0+c2l6ZSkKIAkJICAgICAgICYmIC0tY291bnQpIHsKLQkJCWlmICghZF9zaXotPndhaXQpIHsKKwkJCWlmICghZF9zaXotPndhaXQpCiAJCQkJYnJlYWs7Ci0JCQl9CiAJCX0KIAkJaWYgKCFjb3VudCkgewogCQkJRFJNX0VSUk9SKCJWSUFfQ01EQlVGX0xBRyB0aW1lZCBvdXQuXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2RtYWJsaXQuYyBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2RtYWJsaXQuYwppbmRleCA0YzU0ZjA0Li45YjViNGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kbWFibGl0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfZG1hYmxpdC5jCkBAIC03MCw3ICs3MCw3IEBACiAJCWRlc2NyaXB0b3JfdGhpc19wYWdlOwogCWRtYV9hZGRyX3QgbmV4dCA9IHZzZy0+Y2hhaW5fc3RhcnQ7CiAKLQl3aGlsZShudW1fZGVzYy0tKSB7CisJd2hpbGUgKG51bV9kZXNjLS0pIHsKIAkJaWYgKGRlc2NyaXB0b3JfdGhpc19wYWdlLS0gPT0gMCkgewogCQkJY3VyX2Rlc2NyaXB0b3JfcGFnZS0tOwogCQkJZGVzY3JpcHRvcl90aGlzX3BhZ2UgPSB2c2ctPmRlc2NyaXB0b3JzX3Blcl9wYWdlIC0gMTsKQEAgLTE3NCwxOSArMTc0LDE5IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJaW50IGk7CiAKLQlzd2l0Y2godnNnLT5zdGF0ZSkgeworCXN3aXRjaCAodnNnLT5zdGF0ZSkgewogCWNhc2UgZHJfdmlhX2RldmljZV9tYXBwZWQ6CiAJCXZpYV91bm1hcF9ibGl0X2Zyb21fZGV2aWNlKHBkZXYsIHZzZyk7CiAJY2FzZSBkcl92aWFfZGVzY19wYWdlc19hbGxvYzoKLQkJZm9yIChpPTA7IGk8dnNnLT5udW1fZGVzY19wYWdlczsgKytpKSB7CisJCWZvciAoaSA9IDA7IGkgPCB2c2ctPm51bV9kZXNjX3BhZ2VzOyArK2kpIHsKIAkJCWlmICh2c2ctPmRlc2NfcGFnZXNbaV0gIT0gTlVMTCkKLQkJCSAgZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXZzZy0+ZGVzY19wYWdlc1tpXSk7CisJCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXZzZy0+ZGVzY19wYWdlc1tpXSk7CiAJCX0KIAkJa2ZyZWUodnNnLT5kZXNjX3BhZ2VzKTsKIAljYXNlIGRyX3ZpYV9wYWdlc19sb2NrZWQ6Ci0JCWZvciAoaT0wOyBpPHZzZy0+bnVtX3BhZ2VzOyArK2kpIHsKLQkJCWlmICggTlVMTCAhPSAocGFnZSA9IHZzZy0+cGFnZXNbaV0pKSB7Ci0JCQkJaWYgKCEgUGFnZVJlc2VydmVkKHBhZ2UpICYmIChETUFfRlJPTV9ERVZJQ0UgPT0gdnNnLT5kaXJlY3Rpb24pKQorCQlmb3IgKGkgPSAwOyBpIDwgdnNnLT5udW1fcGFnZXM7ICsraSkgeworCQkJaWYgKE5VTEwgIT0gKHBhZ2UgPSB2c2ctPnBhZ2VzW2ldKSkgeworCQkJCWlmICghUGFnZVJlc2VydmVkKHBhZ2UpICYmIChETUFfRlJPTV9ERVZJQ0UgPT0gdnNnLT5kaXJlY3Rpb24pKQogCQkJCQlTZXRQYWdlRGlydHkocGFnZSk7CiAJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCQkJfQpAQCAtMjMyLDcgKzIzMiw3IEBACiB7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGZpcnN0X3BmbiA9IFZJQV9QRk4oeGZlci0+bWVtX2FkZHIpOwotCXZzZy0+bnVtX3BhZ2VzID0gVklBX1BGTih4ZmVyLT5tZW1fYWRkciArICh4ZmVyLT5udW1fbGluZXMgKiB4ZmVyLT5tZW1fc3RyaWRlIC0xKSkgLQorCXZzZy0+bnVtX3BhZ2VzID0gVklBX1BGTih4ZmVyLT5tZW1fYWRkciArICh4ZmVyLT5udW1fbGluZXMgKiB4ZmVyLT5tZW1fc3RyaWRlIC0gMSkpIC0KIAkJZmlyc3RfcGZuICsgMTsKIAogCWlmIChOVUxMID09ICh2c2ctPnBhZ2VzID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IHBhZ2UgKikgKiB2c2ctPm51bV9wYWdlcykpKQpAQCAtMjY4LDcgKzI2OCw3IEBACiB7CiAJaW50IGk7CiAKLQl2c2ctPmRlc2NyaXB0b3JzX3Blcl9wYWdlID0gUEFHRV9TSVpFIC8gc2l6ZW9mKCBkcm1fdmlhX2Rlc2NyaXB0b3JfdCk7CisJdnNnLT5kZXNjcmlwdG9yc19wZXJfcGFnZSA9IFBBR0VfU0laRSAvIHNpemVvZihkcm1fdmlhX2Rlc2NyaXB0b3JfdCk7CiAJdnNnLT5udW1fZGVzY19wYWdlcyA9ICh2c2ctPm51bV9kZXNjICsgdnNnLT5kZXNjcmlwdG9yc19wZXJfcGFnZSAtIDEpIC8KIAkJdnNnLT5kZXNjcmlwdG9yc19wZXJfcGFnZTsKIApAQCAtMjc2LDcgKzI3Niw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJdnNnLT5zdGF0ZSA9IGRyX3ZpYV9kZXNjX3BhZ2VzX2FsbG9jOwotCWZvciAoaT0wOyBpPHZzZy0+bnVtX2Rlc2NfcGFnZXM7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCB2c2ctPm51bV9kZXNjX3BhZ2VzOyArK2kpIHsKIAkJaWYgKE5VTEwgPT0gKHZzZy0+ZGVzY19wYWdlc1tpXSA9CiAJCQkgICAgIChkcm1fdmlhX2Rlc2NyaXB0b3JfdCAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCkpKQogCQkJcmV0dXJuIC1FTk9NRU07CkBAIC0zMTgsMjEgKzMxOCwyMCBAQAogCWRybV92aWFfYmxpdHFfdCAqYmxpdHEgPSBkZXZfcHJpdi0+YmxpdF9xdWV1ZXMgKyBlbmdpbmU7CiAJaW50IGN1cjsKIAlpbnQgZG9uZV90cmFuc2ZlcjsKLQl1bnNpZ25lZCBsb25nIGlycXNhdmU9MDsKKwl1bnNpZ25lZCBsb25nIGlycXNhdmUgPSAwOwogCXVpbnQzMl90IHN0YXR1cyA9IDA7CiAKIAlEUk1fREVCVUcoIkRNQSBibGl0IGhhbmRsZXIgY2FsbGVkLiBlbmdpbmUgPSAlZCwgZnJvbV9pcnEgPSAlZCwgYmxpdHEgPSAweCVseFxuIiwKIAkJICBlbmdpbmUsIGZyb21faXJxLCAodW5zaWduZWQgbG9uZykgYmxpdHEpOwogCi0JaWYgKGZyb21faXJxKSB7CisJaWYgKGZyb21faXJxKQogCQlzcGluX2xvY2soJmJsaXRxLT5ibGl0X2xvY2spOwotCX0gZWxzZSB7CisJZWxzZQogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmxpdHEtPmJsaXRfbG9jaywgaXJxc2F2ZSk7Ci0JfQogCiAJZG9uZV90cmFuc2ZlciA9IGJsaXRxLT5pc19hY3RpdmUgJiYKLQkgICgoIHN0YXR1cyA9IFZJQV9SRUFEKFZJQV9QQ0lfRE1BX0NTUjAgKyBlbmdpbmUqMHgwNCkpICYgVklBX0RNQV9DU1JfVEQpOwotCWRvbmVfdHJhbnNmZXIgPSBkb25lX3RyYW5zZmVyIHx8ICggYmxpdHEtPmFib3J0aW5nICYmICEoc3RhdHVzICYgVklBX0RNQV9DU1JfREUpKTsKKwkgICgoc3RhdHVzID0gVklBX1JFQUQoVklBX1BDSV9ETUFfQ1NSMCArIGVuZ2luZSoweDA0KSkgJiBWSUFfRE1BX0NTUl9URCk7CisJZG9uZV90cmFuc2ZlciA9IGRvbmVfdHJhbnNmZXIgfHwgKGJsaXRxLT5hYm9ydGluZyAmJiAhKHN0YXR1cyAmIFZJQV9ETUFfQ1NSX0RFKSk7CiAKIAljdXIgPSBibGl0cS0+Y3VyOwogCWlmIChkb25lX3RyYW5zZmVyKSB7CkBAIC0zNzcsMTggKzM3NiwxNiBAQAogCQkJaWYgKCF0aW1lcl9wZW5kaW5nKCZibGl0cS0+cG9sbF90aW1lcikpCiAJCQkJbW9kX3RpbWVyKCZibGl0cS0+cG9sbF90aW1lciwgamlmZmllcyArIDEpOwogCQl9IGVsc2UgewotCQkJaWYgKHRpbWVyX3BlbmRpbmcoJmJsaXRxLT5wb2xsX3RpbWVyKSkgeworCQkJaWYgKHRpbWVyX3BlbmRpbmcoJmJsaXRxLT5wb2xsX3RpbWVyKSkKIAkJCQlkZWxfdGltZXIoJmJsaXRxLT5wb2xsX3RpbWVyKTsKLQkJCX0KIAkJCXZpYV9kbWFibGl0X2VuZ2luZV9vZmYoZGV2LCBlbmdpbmUpOwogCQl9CiAJfQogCi0JaWYgKGZyb21faXJxKSB7CisJaWYgKGZyb21faXJxKQogCQlzcGluX3VubG9jaygmYmxpdHEtPmJsaXRfbG9jayk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJsaXRxLT5ibGl0X2xvY2ssIGlycXNhdmUpOwotCX0KIH0KIAogCkBAIC00MTQsMTAgKzQxMSw5IEBACiAJCSgoYmxpdHEtPmN1cl9ibGl0X2hhbmRsZSAtIGhhbmRsZSkgPD0gKDEgPDwgMjMpKTsKIAogCWlmIChxdWV1ZSAmJiBhY3RpdmUpIHsKLQkJc2xvdCA9IGhhbmRsZSAtIGJsaXRxLT5kb25lX2JsaXRfaGFuZGxlICsgYmxpdHEtPmN1ciAtMTsKLQkJaWYgKHNsb3QgPj0gVklBX05VTV9CTElUX1NMT1RTKSB7CisJCXNsb3QgPSBoYW5kbGUgLSBibGl0cS0+ZG9uZV9ibGl0X2hhbmRsZSArIGJsaXRxLT5jdXIgLSAxOworCQlpZiAoc2xvdCA+PSBWSUFfTlVNX0JMSVRfU0xPVFMpCiAJCQlzbG90IC09IFZJQV9OVU1fQkxJVF9TTE9UUzsKLQkJfQogCQkqcXVldWUgPSBibGl0cS0+YmxpdF9xdWV1ZSArIHNsb3Q7CiAJfQogCkBAIC01MDYsMTIgKzUwMiwxMiBAQAogCWludCBjdXJfcmVsZWFzZWQ7CiAKIAotCURSTV9ERUJVRygiV29ya3F1ZXVlIHRhc2sgY2FsbGVkIGZvciBibGl0IGVuZ2luZSAlbGRcbiIsKHVuc2lnbmVkIGxvbmcpCisJRFJNX0RFQlVHKCJXb3JrcXVldWUgdGFzayBjYWxsZWQgZm9yIGJsaXQgZW5naW5lICVsZFxuIiwgKHVuc2lnbmVkIGxvbmcpCiAJCSAgKGJsaXRxIC0gKChkcm1fdmlhX3ByaXZhdGVfdCAqKWRldi0+ZGV2X3ByaXZhdGUpLT5ibGl0X3F1ZXVlcykpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJsaXRxLT5ibGl0X2xvY2ssIGlycXNhdmUpOwogCi0Jd2hpbGUoYmxpdHEtPnNlcnZpY2VkICE9IGJsaXRxLT5jdXIpIHsKKwl3aGlsZSAoYmxpdHEtPnNlcnZpY2VkICE9IGJsaXRxLT5jdXIpIHsKIAogCQljdXJfcmVsZWFzZWQgPSBibGl0cS0+c2VydmljZWQrKzsKIApAQCAtNTQ1LDEzICs1NDEsMTMgQEAKIHZvaWQKIHZpYV9pbml0X2RtYWJsaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKLQlpbnQgaSxqOworCWludCBpLCBqOwogCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fdmlhX3ByaXZhdGVfdCAqKWRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX3ZpYV9ibGl0cV90ICpibGl0cTsKIAogCXBjaV9zZXRfbWFzdGVyKGRldi0+cGRldik7CiAKLQlmb3IgKGk9MDsgaTwgVklBX05VTV9CTElUX0VOR0lORVM7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBWSUFfTlVNX0JMSVRfRU5HSU5FUzsgKytpKSB7CiAJCWJsaXRxID0gZGV2X3ByaXYtPmJsaXRfcXVldWVzICsgaTsKIAkJYmxpdHEtPmRldiA9IGRldjsKIAkJYmxpdHEtPmN1cl9ibGl0X2hhbmRsZSA9IDA7CkBAIC01NjQsOSArNTYwLDggQEAKIAkJYmxpdHEtPmlzX2FjdGl2ZSA9IDA7CiAJCWJsaXRxLT5hYm9ydGluZyA9IDA7CiAJCXNwaW5fbG9ja19pbml0KCZibGl0cS0+YmxpdF9sb2NrKTsKLQkJZm9yIChqPTA7IGo8VklBX05VTV9CTElUX1NMT1RTOyArK2opIHsKKwkJZm9yIChqID0gMDsgaiA8IFZJQV9OVU1fQkxJVF9TTE9UUzsgKytqKQogCQkJRFJNX0lOSVRfV0FJVFFVRVVFKGJsaXRxLT5ibGl0X3F1ZXVlICsgaik7Ci0JCX0KIAkJRFJNX0lOSVRfV0FJVFFVRVVFKCZibGl0cS0+YnVzeV9xdWV1ZSk7CiAJCUlOSVRfV09SSygmYmxpdHEtPndxLCB2aWFfZG1hYmxpdF93b3JrcXVldWUpOwogCQlzZXR1cF90aW1lcigmYmxpdHEtPnBvbGxfdGltZXIsIHZpYV9kbWFibGl0X3RpbWVyLApAQCAtNjg1LDE4ICs2ODAsMTcgQEAKIHN0YXRpYyBpbnQKIHZpYV9kbWFibGl0X2dyYWJfc2xvdChkcm1fdmlhX2JsaXRxX3QgKmJsaXRxLCBpbnQgZW5naW5lKQogewotCWludCByZXQ9MDsKKwlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGlycXNhdmU7CiAKIAlEUk1fREVCVUcoIk51bSBmcmVlIGlzICVkXG4iLCBibGl0cS0+bnVtX2ZyZWUpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZibGl0cS0+YmxpdF9sb2NrLCBpcnFzYXZlKTsKLQl3aGlsZShibGl0cS0+bnVtX2ZyZWUgPT0gMCkgeworCXdoaWxlIChibGl0cS0+bnVtX2ZyZWUgPT0gMCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZibGl0cS0+YmxpdF9sb2NrLCBpcnFzYXZlKTsKIAogCQlEUk1fV0FJVF9PTihyZXQsIGJsaXRxLT5idXN5X3F1ZXVlLCBEUk1fSFosIGJsaXRxLT5udW1fZnJlZSA+IDApOwotCQlpZiAocmV0KSB7CisJCWlmIChyZXQpCiAJCQlyZXR1cm4gKC1FSU5UUiA9PSByZXQpID8gLUVBR0FJTiA6IHJldDsKLQkJfQogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZibGl0cS0+YmxpdF9sb2NrLCBpcnFzYXZlKTsKIAl9CkBAIC03MTksNyArNzEzLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYmxpdHEtPmJsaXRfbG9jaywgaXJxc2F2ZSk7CiAJYmxpdHEtPm51bV9mcmVlKys7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmxpdHEtPmJsaXRfbG9jaywgaXJxc2F2ZSk7Ci0JRFJNX1dBS0VVUCggJmJsaXRxLT5idXN5X3F1ZXVlICk7CisJRFJNX1dBS0VVUCgmYmxpdHEtPmJ1c3lfcXVldWUpOwogfQogCiAvKgpAQCAtNzQ0LDkgKzczOCw4IEBACiAKIAllbmdpbmUgPSAoeGZlci0+dG9fZmIpID8gMCA6IDE7CiAJYmxpdHEgPSBkZXZfcHJpdi0+YmxpdF9xdWV1ZXMgKyBlbmdpbmU7Ci0JaWYgKDAgIT0gKHJldCA9IHZpYV9kbWFibGl0X2dyYWJfc2xvdChibGl0cSwgZW5naW5lKSkpIHsKKwlpZiAoMCAhPSAocmV0ID0gdmlhX2RtYWJsaXRfZ3JhYl9zbG90KGJsaXRxLCBlbmdpbmUpKSkKIAkJcmV0dXJuIHJldDsKLQl9CiAJaWYgKE5VTEwgPT0gKHZzZyA9IGttYWxsb2Moc2l6ZW9mKCp2c2cpLCBHRlBfS0VSTkVMKSkpIHsKIAkJdmlhX2RtYWJsaXRfcmVsZWFzZV9zbG90KGJsaXRxKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC03ODAsNyArNzczLDcgQEAKICAqLwogCiBpbnQKLXZpYV9kbWFfYmxpdF9zeW5jKCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiApCit2aWFfZG1hX2JsaXRfc3luYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKIAlkcm1fdmlhX2JsaXRzeW5jX3QgKnN5bmMgPSBkYXRhOwogCWludCBlcnI7CkBAIC04MDQsNyArNzk3LDcgQEAKICAqLwogCiBpbnQKLXZpYV9kbWFfYmxpdCggc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYgKQordmlhX2RtYV9ibGl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCWRybV92aWFfZG1hYmxpdF90ICp4ZmVyID0gZGF0YTsKIAlpbnQgZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfZG1hYmxpdC5oIGIvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfZG1hYmxpdC5oCmluZGV4IDc0MDhhNTQuLjliNjYyYTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kbWFibGl0LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfZG1hYmxpdC5oCkBAIC00NSwxMiArNDUsMTIgQEAKIAlpbnQgbnVtX2Rlc2M7CiAJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uOwogCXVuc2lnbmVkIGNoYXIgKmJvdW5jZV9idWZmZXI7Ci0gICAgICAgIGRtYV9hZGRyX3QgY2hhaW5fc3RhcnQ7CisJZG1hX2FkZHJfdCBjaGFpbl9zdGFydDsKIAl1aW50MzJfdCBmcmVlX29uX3NlcXVlbmNlOwotICAgICAgICB1bnNpZ25lZCBpbnQgZGVzY3JpcHRvcnNfcGVyX3BhZ2U7CisJdW5zaWduZWQgaW50IGRlc2NyaXB0b3JzX3Blcl9wYWdlOwogCWludCBhYm9ydGVkOwogCWVudW0gewotCSAgICAgICAgZHJfdmlhX2RldmljZV9tYXBwZWQsCisJCWRyX3ZpYV9kZXZpY2VfbWFwcGVkLAogCQlkcl92aWFfZGVzY19wYWdlc19hbGxvYywKIAkJZHJfdmlhX3BhZ2VzX2xvY2tlZCwKIAkJZHJfdmlhX3BhZ2VzX2FsbG9jLApAQCAtNjgsNyArNjgsNyBAQAogCXVuc2lnbmVkIG51bV9mcmVlOwogCXVuc2lnbmVkIG51bV9vdXRzdGFuZGluZzsKIAl1bnNpZ25lZCBsb25nIGVuZDsKLSAgICAgICAgaW50IGFib3J0aW5nOworCWludCBhYm9ydGluZzsKIAlpbnQgaXNfYWN0aXZlOwogCWRybV92aWFfc2dfaW5mb190ICpibGl0c1tWSUFfTlVNX0JMSVRfU0xPVFNdOwogCXNwaW5sb2NrX3QgYmxpdF9sb2NrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuaAppbmRleCBjYWZjYjg0Li45Y2Y4N2Q5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuaApAQCAtMTA3LDkgKzEwNyw5IEBACiAjZGVmaW5lIFZJQV9CQVNFICgoZGV2X3ByaXYtPm1taW8pKQogCiAjZGVmaW5lIFZJQV9SRUFEKHJlZykJCURSTV9SRUFEMzIoVklBX0JBU0UsIHJlZykKLSNkZWZpbmUgVklBX1dSSVRFKHJlZyx2YWwpCURSTV9XUklURTMyKFZJQV9CQVNFLCByZWcsIHZhbCkKKyNkZWZpbmUgVklBX1dSSVRFKHJlZywgdmFsKQlEUk1fV1JJVEUzMihWSUFfQkFTRSwgcmVnLCB2YWwpCiAjZGVmaW5lIFZJQV9SRUFEOChyZWcpCQlEUk1fUkVBRDgoVklBX0JBU0UsIHJlZykKLSNkZWZpbmUgVklBX1dSSVRFOChyZWcsdmFsKQlEUk1fV1JJVEU4KFZJQV9CQVNFLCByZWcsIHZhbCkKKyNkZWZpbmUgVklBX1dSSVRFOChyZWcsIHZhbCkJRFJNX1dSSVRFOChWSUFfQkFTRSwgcmVnLCB2YWwpCiAKIGV4dGVybiBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgdmlhX2lvY3Rsc1tdOwogZXh0ZXJuIGludCB2aWFfbWF4X2lvY3RsOwpAQCAtMTIxLDI4ICsxMjEsMjggQEAKIGV4dGVybiBpbnQgdmlhX21hcF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiBpbnQgdmlhX2RlY29kZXJfZnV0ZXgoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIGludCB2aWFfd2FpdF9pcnEoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwotZXh0ZXJuIGludCB2aWFfZG1hX2JsaXRfc3luYyggc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYgKTsKLWV4dGVybiBpbnQgdmlhX2RtYV9ibGl0KCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiApOworZXh0ZXJuIGludCB2aWFfZG1hX2JsaXRfc3luYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gaW50IHZpYV9kbWFfYmxpdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiAKIGV4dGVybiBpbnQgdmlhX2RyaXZlcl9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgY2hpcHNldCk7CiBleHRlcm4gaW50IHZpYV9kcml2ZXJfdW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCi1leHRlcm4gaW50IHZpYV9pbml0X2NvbnRleHQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIGludCBjb250ZXh0KTsKLWV4dGVybiBpbnQgdmlhX2ZpbmFsX2NvbnRleHQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIGludCBjb250ZXh0KTsKK2V4dGVybiBpbnQgdmlhX2luaXRfY29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY29udGV4dCk7CitleHRlcm4gaW50IHZpYV9maW5hbF9jb250ZXh0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjb250ZXh0KTsKIAotZXh0ZXJuIGludCB2aWFfZG9fY2xlYW51cF9tYXAoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOworZXh0ZXJuIGludCB2aWFfZG9fY2xlYW51cF9tYXAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdTMyIHZpYV9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIGludCB2aWFfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CiBleHRlcm4gdm9pZCB2aWFfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogCiBleHRlcm4gaXJxcmV0dXJuX3QgdmlhX2RyaXZlcl9pcnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpOwotZXh0ZXJuIHZvaWQgdmlhX2RyaXZlcl9pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CitleHRlcm4gdm9pZCB2aWFfZHJpdmVyX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCB2aWFfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKLWV4dGVybiB2b2lkIHZpYV9kcml2ZXJfaXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CitleHRlcm4gdm9pZCB2aWFfZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKLWV4dGVybiBpbnQgdmlhX2RtYV9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKK2V4dGVybiBpbnQgdmlhX2RtYV9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgdmlhX2luaXRfY29tbWFuZF92ZXJpZmllcih2b2lkKTsKLWV4dGVybiBpbnQgdmlhX2RyaXZlcl9kbWFfcXVpZXNjZW50KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKK2V4dGVybiBpbnQgdmlhX2RyaXZlcl9kbWFfcXVpZXNjZW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgdmlhX2luaXRfZnV0ZXgoZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2KTsKIGV4dGVybiB2b2lkIHZpYV9jbGVhbnVwX2Z1dGV4KGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdik7CiBleHRlcm4gdm9pZCB2aWFfcmVsZWFzZV9mdXRleChkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBjb250ZXh0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfaXJxLmMKaW5kZXggMzQwNzlmMi4uZDM5MWY0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfaXJxLmMKQEAgLTE0MSwxMSArMTQxLDEwIEBACiAJCQlhdG9taWNfaW5jKCZjdXJfaXJxLT5pcnFfcmVjZWl2ZWQpOwogCQkJRFJNX1dBS0VVUCgmY3VyX2lycS0+aXJxX3F1ZXVlKTsKIAkJCWhhbmRsZWQgPSAxOwotCQkJaWYgKGRldl9wcml2LT5pcnFfbWFwW2RybV92aWFfaXJxX2RtYTBfdGRdID09IGkpIHsKKwkJCWlmIChkZXZfcHJpdi0+aXJxX21hcFtkcm1fdmlhX2lycV9kbWEwX3RkXSA9PSBpKQogCQkJCXZpYV9kbWFibGl0X2hhbmRsZXIoZGV2LCAwLCAxKTsKLQkJCX0gZWxzZSBpZiAoZGV2X3ByaXYtPmlycV9tYXBbZHJtX3ZpYV9pcnFfZG1hMV90ZF0gPT0gaSkgeworCQkJZWxzZSBpZiAoZGV2X3ByaXYtPmlycV9tYXBbZHJtX3ZpYV9pcnFfZG1hMV90ZF0gPT0gaSkKIAkJCQl2aWFfZG1hYmxpdF9oYW5kbGVyKGRldiwgMSwgMSk7Ci0JCQl9CiAJCX0KIAkJY3VyX2lycSsrOwogCX0KQEAgLTE2MCw3ICsxNTksNyBAQAogCQlyZXR1cm4gSVJRX05PTkU7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgdmlhZHJ2X2Fja25vd2xlZGdlX2lycXMoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdikKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgdmlhZHJ2X2Fja25vd2xlZGdlX2lycXMoZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2KQogewogCXUzMiBzdGF0dXM7CiAKQEAgLTIwNyw3ICsyMDYsNyBAQAogfQogCiBzdGF0aWMgaW50Ci12aWFfZHJpdmVyX2lycV93YWl0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgaXJxLCBpbnQgZm9yY2Vfc2VxdWVuY2UsCit2aWFfZHJpdmVyX2lycV93YWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpcnEsIGludCBmb3JjZV9zZXF1ZW5jZSwKIAkJICAgIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpCiB7CiAJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV92aWFfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0yNjAsNyArMjU5LDcgQEAKICAqIGRybV9kbWEuaCBob29rcwogICovCiAKLXZvaWQgdmlhX2RyaXZlcl9pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK3ZvaWQgdmlhX2RyaXZlcl9pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fdmlhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCXUzMiBzdGF0dXM7CkBAIC0zMjksNyArMzI4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCB2aWFfZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCit2b2lkIHZpYV9kcml2ZXJfaXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fdmlhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCXUzMiBzdGF0dXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9tYXAuYyBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX21hcC5jCmluZGV4IDZlNmY5MTUuLjZjY2E5YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX21hcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX21hcC5jCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAidmlhX2RybS5oIgogI2luY2x1ZGUgInZpYV9kcnYuaCIKIAotc3RhdGljIGludCB2aWFfZG9faW5pdF9tYXAoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIGRybV92aWFfaW5pdF90ICogaW5pdCkKK3N0YXRpYyBpbnQgdmlhX2RvX2luaXRfbWFwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGRybV92aWFfaW5pdF90ICppbml0KQogewogCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKQEAgLTY4LDcgKzY4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHZpYV9kb19jbGVhbnVwX21hcChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK2ludCB2aWFfZG9fY2xlYW51cF9tYXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAl2aWFfZG1hX2NsZWFudXAoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfbW0uYyBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX21tLmMKaW5kZXggZjY5NGNiNS4uNmNjMmRhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfbW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9tbS5jCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiZHJtX3NtYW4uaCIKIAogI2RlZmluZSBWSUFfTU1fQUxJR05fU0hJRlQgNAotI2RlZmluZSBWSUFfTU1fQUxJR05fTUFTSyAoICgxIDw8IFZJQV9NTV9BTElHTl9TSElGVCkgLSAxKQorI2RlZmluZSBWSUFfTU1fQUxJR05fTUFTSyAoKDEgPDwgVklBX01NX0FMSUdOX1NISUZUKSAtIDEpCiAKIGludCB2aWFfYWdwX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CkBAIC0xNzIsNyArMTcyLDcgQEAKIH0KIAogCi12b2lkIHZpYV9yZWNsYWltX2J1ZmZlcnNfbG9ja2VkKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LAordm9pZCB2aWFfcmVjbGFpbV9idWZmZXJzX2xvY2tlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0xODMsOSArMTgzLDggQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChkZXYtPmRyaXZlci0+ZG1hX3F1aWVzY2VudCkgeworCWlmIChkZXYtPmRyaXZlci0+ZG1hX3F1aWVzY2VudCkKIAkJZGV2LT5kcml2ZXItPmRtYV9xdWllc2NlbnQoZGV2KTsKLQl9CiAKIAlkcm1fc21hbl9vd25lcl9jbGVhbnVwKCZkZXZfcHJpdi0+c21hbiwgKHVuc2lnbmVkIGxvbmcpZmlsZV9wcml2KTsKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX3ZlcmlmaWVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV92ZXJpZmllci5jCmluZGV4IDQ2YTU3OTEuLjQ4OTU3YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX3ZlcmlmaWVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfdmVyaWZpZXIuYwpAQCAtMjM1LDcgKzIzNSw3IEBACiBzdGF0aWMgaGF6YXJkX3QgdGFibGUzWzI1Nl07CiAKIHN0YXRpYyBfX2lubGluZV9fIGludAotZWF0X3dvcmRzKGNvbnN0IHVpbnQzMl90ICoqIGJ1ZiwgY29uc3QgdWludDMyX3QgKiBidWZfZW5kLCB1bnNpZ25lZCBudW1fd29yZHMpCitlYXRfd29yZHMoY29uc3QgdWludDMyX3QgKipidWYsIGNvbnN0IHVpbnQzMl90ICpidWZfZW5kLCB1bnNpZ25lZCBudW1fd29yZHMpCiB7CiAJaWYgKChidWZfZW5kIC0gKmJ1ZikgPj0gbnVtX3dvcmRzKSB7CiAJCSpidWYgKz0gbnVtX3dvcmRzOwpAQCAtMjUyLDcgKzI1Miw3IEBACiBzdGF0aWMgX19pbmxpbmVfXyBkcm1fbG9jYWxfbWFwX3QgKnZpYV9kcm1fbG9va3VwX2FncF9tYXAoZHJtX3ZpYV9zdGF0ZV90ICpzZXEsCiAJCQkJCQkgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCiAJCQkJCQkgICAgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCQkJICAgIHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQorCQkJCQkJICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9tYXBfbGlzdCAqcl9saXN0OwogCWRybV9sb2NhbF9tYXBfdCAqbWFwID0gc2VxLT5tYXBfY2FjaGU7CkBAIC0zNDQsNyArMzQ0LDcgQEAKIH0KIAogc3RhdGljIF9faW5saW5lX18gaW50Ci1pbnZlc3RpZ2F0ZV9oYXphcmQodWludDMyX3QgY21kLCBoYXphcmRfdCBoeiwgZHJtX3ZpYV9zdGF0ZV90ICogY3VyX3NlcSkKK2ludmVzdGlnYXRlX2hhemFyZCh1aW50MzJfdCBjbWQsIGhhemFyZF90IGh6LCBkcm1fdmlhX3N0YXRlX3QgKmN1cl9zZXEpCiB7CiAJcmVnaXN0ZXIgdWludDMyX3QgdG1wLCAqdG1wX2FkZHI7CiAKQEAgLTUxOCw3ICs1MTgsNyBAQAogCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQKIHZpYV9jaGVja19wcmltX2xpc3QodWludDMyX3QgY29uc3QgKipidWZmZXIsIGNvbnN0IHVpbnQzMl90ICogYnVmX2VuZCwKLQkJICAgIGRybV92aWFfc3RhdGVfdCAqIGN1cl9zZXEpCisJCSAgICBkcm1fdmlhX3N0YXRlX3QgKmN1cl9zZXEpCiB7CiAJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2ID0KIAkgICAgKGRybV92aWFfcHJpdmF0ZV90ICopIGN1cl9zZXEtPmRldi0+ZGV2X3ByaXZhdGU7CkBAIC02MjEsOCArNjIxLDggQEAKIH0KIAogc3RhdGljIF9faW5saW5lX18gdmVyaWZpZXJfc3RhdGVfdAotdmlhX2NoZWNrX2hlYWRlcjIodWludDMyX3QgY29uc3QgKipidWZmZXIsIGNvbnN0IHVpbnQzMl90ICogYnVmX2VuZCwKLQkJICBkcm1fdmlhX3N0YXRlX3QgKiBoY19zdGF0ZSkKK3ZpYV9jaGVja19oZWFkZXIyKHVpbnQzMl90IGNvbnN0ICoqYnVmZmVyLCBjb25zdCB1aW50MzJfdCAqYnVmX2VuZCwKKwkJICBkcm1fdmlhX3N0YXRlX3QgKmhjX3N0YXRlKQogewogCXVpbnQzMl90IGNtZDsKIAlpbnQgaHpfbW9kZTsKQEAgLTcwNiwxNiArNzA2LDE1IEBACiAJCQlyZXR1cm4gc3RhdGVfZXJyb3I7CiAJCX0KIAl9Ci0JaWYgKGhjX3N0YXRlLT51bmZpbmlzaGVkICYmIGZpbmlzaF9jdXJyZW50X3NlcXVlbmNlKGhjX3N0YXRlKSkgeworCWlmIChoY19zdGF0ZS0+dW5maW5pc2hlZCAmJiBmaW5pc2hfY3VycmVudF9zZXF1ZW5jZShoY19zdGF0ZSkpCiAJCXJldHVybiBzdGF0ZV9lcnJvcjsKLQl9CiAJKmJ1ZmZlciA9IGJ1ZjsKIAlyZXR1cm4gc3RhdGVfY29tbWFuZDsKIH0KIAogc3RhdGljIF9faW5saW5lX18gdmVyaWZpZXJfc3RhdGVfdAotdmlhX3BhcnNlX2hlYWRlcjIoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdiwgdWludDMyX3QgY29uc3QgKipidWZmZXIsCi0JCSAgY29uc3QgdWludDMyX3QgKiBidWZfZW5kLCBpbnQgKmZpcmVfY291bnQpCit2aWFfcGFyc2VfaGVhZGVyMihkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHVpbnQzMl90IGNvbnN0ICoqYnVmZmVyLAorCQkgIGNvbnN0IHVpbnQzMl90ICpidWZfZW5kLCBpbnQgKmZpcmVfY291bnQpCiB7CiAJdWludDMyX3QgY21kOwogCWNvbnN0IHVpbnQzMl90ICpidWYgPSAqYnVmZmVyOwpAQCAtODMzLDggKzgzMiw4IEBACiB9CiAKIHN0YXRpYyBfX2lubGluZV9fIHZlcmlmaWVyX3N0YXRlX3QKLXZpYV9wYXJzZV9oZWFkZXIxKGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYsIHVpbnQzMl90IGNvbnN0ICoqYnVmZmVyLAotCQkgIGNvbnN0IHVpbnQzMl90ICogYnVmX2VuZCkKK3ZpYV9wYXJzZV9oZWFkZXIxKGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiwgdWludDMyX3QgY29uc3QgKipidWZmZXIsCisJCSAgY29uc3QgdWludDMyX3QgKmJ1Zl9lbmQpCiB7CiAJcmVnaXN0ZXIgdWludDMyX3QgY21kOwogCWNvbnN0IHVpbnQzMl90ICpidWYgPSAqYnVmZmVyOwpAQCAtODUxLDcgKzg1MCw3IEBACiB9CiAKIHN0YXRpYyBfX2lubGluZV9fIHZlcmlmaWVyX3N0YXRlX3QKLXZpYV9jaGVja192aGVhZGVyNSh1aW50MzJfdCBjb25zdCAqKmJ1ZmZlciwgY29uc3QgdWludDMyX3QgKiBidWZfZW5kKQordmlhX2NoZWNrX3ZoZWFkZXI1KHVpbnQzMl90IGNvbnN0ICoqYnVmZmVyLCBjb25zdCB1aW50MzJfdCAqYnVmX2VuZCkKIHsKIAl1aW50MzJfdCBkYXRhOwogCWNvbnN0IHVpbnQzMl90ICpidWYgPSAqYnVmZmVyOwpAQCAtODg0LDggKzg4Myw4IEBACiB9CiAKIHN0YXRpYyBfX2lubGluZV9fIHZlcmlmaWVyX3N0YXRlX3QKLXZpYV9wYXJzZV92aGVhZGVyNShkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2LCB1aW50MzJfdCBjb25zdCAqKmJ1ZmZlciwKLQkJICAgY29uc3QgdWludDMyX3QgKiBidWZfZW5kKQordmlhX3BhcnNlX3ZoZWFkZXI1KGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiwgdWludDMyX3QgY29uc3QgKipidWZmZXIsCisJCSAgIGNvbnN0IHVpbnQzMl90ICpidWZfZW5kKQogewogCXVpbnQzMl90IGFkZHIsIGNvdW50LCBpOwogCWNvbnN0IHVpbnQzMl90ICpidWYgPSAqYnVmZmVyOwpAQCAtODkzLDkgKzg5Miw4IEBACiAJYWRkciA9ICpidWYrKyAmIH5WSUFfVklERU9NQVNLOwogCWkgPSBjb3VudCA9ICpidWY7CiAJYnVmICs9IDM7Ci0Jd2hpbGUgKGktLSkgeworCXdoaWxlIChpLS0pCiAJCVZJQV9XUklURShhZGRyLCAqYnVmKyspOwotCX0KIAlpZiAoY291bnQgJiAzKQogCQlidWYgKz0gNCAtIChjb3VudCAmIDMpOwogCSpidWZmZXIgPSBidWY7CkBAIC05NDAsOCArOTM4LDggQEAKIH0KIAogc3RhdGljIF9faW5saW5lX18gdmVyaWZpZXJfc3RhdGVfdAotdmlhX3BhcnNlX3ZoZWFkZXI2KGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYsIHVpbnQzMl90IGNvbnN0ICoqYnVmZmVyLAotCQkgICBjb25zdCB1aW50MzJfdCAqIGJ1Zl9lbmQpCit2aWFfcGFyc2VfdmhlYWRlcjYoZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2LCB1aW50MzJfdCBjb25zdCAqKmJ1ZmZlciwKKwkJICAgY29uc3QgdWludDMyX3QgKmJ1Zl9lbmQpCiB7CiAKIAl1aW50MzJfdCBhZGRyLCBjb3VudCwgaTsKQEAgLTEwMzcsNyArMTAzNSw3IEBACiB9CiAKIGludAotdmlhX3BhcnNlX2NvbW1hbmRfc3RyZWFtKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBjb25zdCB1aW50MzJfdCAqIGJ1ZiwKK3ZpYV9wYXJzZV9jb21tYW5kX3N0cmVhbShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBjb25zdCB1aW50MzJfdCAqYnVmLAogCQkJIHVuc2lnbmVkIGludCBzaXplKQogewogCkBAIC0xMDg1LDkgKzEwODMsOCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9Ci0JaWYgKHN0YXRlID09IHN0YXRlX2Vycm9yKSB7CisJaWYgKHN0YXRlID09IHN0YXRlX2Vycm9yKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwOTYsMTMgKzEwOTMsMTEgQEAKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCAyNTY7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCAyNTY7ICsraSkKIAkJdGFibGVbaV0gPSBmb3JiaWRkZW5fY29tbWFuZDsKLQl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IHNpemU7ICsraSkKIAkJdGFibGVbaW5pdF90YWJsZVtpXS5jb2RlXSA9IGluaXRfdGFibGVbaV0uaHo7Ci0JfQogfQogCiB2b2lkIHZpYV9pbml0X2NvbW1hbmRfdmVyaWZpZXIodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX3ZlcmlmaWVyLmggYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV92ZXJpZmllci5oCmluZGV4IGQ2ZjgyMTQuLjI2YjZkMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX3ZlcmlmaWVyLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfdmVyaWZpZXIuaApAQCAtNTQsOCArNTQsOCBAQAogCWNvbnN0IHVpbnQzMl90ICpidWZfc3RhcnQ7CiB9IGRybV92aWFfc3RhdGVfdDsKIAotZXh0ZXJuIGludCB2aWFfdmVyaWZ5X2NvbW1hbmRfc3RyZWFtKGNvbnN0IHVpbnQzMl90ICogYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSwKLQkJCQkgICAgIHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBpbnQgYWdwKTsKK2V4dGVybiBpbnQgdmlhX3ZlcmlmeV9jb21tYW5kX3N0cmVhbShjb25zdCB1aW50MzJfdCAqYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBhZ3ApOwogZXh0ZXJuIGludCB2aWFfcGFyc2VfY29tbWFuZF9zdHJlYW0oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgY29uc3QgdWludDMyX3QgKmJ1ZiwKIAkJCQkgICAgdW5zaWduZWQgaW50IHNpemUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV92aWRlby5jIGIvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfdmlkZW8uYwppbmRleCA2ZWZhYzgxLi42NzVkMzExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV92aWRlby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX3ZpZGVvLmMKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJ2aWFfZHJtLmgiCiAjaW5jbHVkZSAidmlhX2Rydi5oIgogCi12b2lkIHZpYV9pbml0X2Z1dGV4KGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpCit2b2lkIHZpYV9pbml0X2Z1dGV4KGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIApAQCAtNDEsMTEgKzQxLDExIEBACiAJfQogfQogCi12b2lkIHZpYV9jbGVhbnVwX2Z1dGV4KGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpCit2b2lkIHZpYV9jbGVhbnVwX2Z1dGV4KGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdikKIHsKIH0KIAotdm9pZCB2aWFfcmVsZWFzZV9mdXRleChkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2LCBpbnQgY29udGV4dCkKK3ZvaWQgdmlhX3JlbGVhc2VfZnV0ZXgoZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2LCBpbnQgY29udGV4dCkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAl2b2xhdGlsZSBpbnQgKmxvY2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jCmluZGV4IGI3OTNjOGMuLjlkZDM5NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jCkBAIC03NjQsNyArNzY0LDcgQEAKIAogc3RhdGljIGludCB2bXdfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7Ci0JcmV0dXJuIGRybV9nZXRfZGV2KHBkZXYsIGVudCwgJmRyaXZlcik7CisJcmV0dXJuIGRybV9nZXRfcGNpX2RldihwZGV2LCBlbnQsICZkcml2ZXIpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCB2bXdnZnhfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaAppbmRleCBlYWFkNTIwLi40MjlmOTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaApAQCAtMTY0LDcgKzE2NCw3IEBACiBzdHJ1Y3Qgdm13X3ByaXZhdGUgewogCXN0cnVjdCB0dG1fYm9fZGV2aWNlIGJkZXY7CiAJc3RydWN0IHR0bV9ib19nbG9iYWxfcmVmIGJvX2dsb2JhbF9yZWY7Ci0Jc3RydWN0IHR0bV9nbG9iYWxfcmVmZXJlbmNlIG1lbV9nbG9iYWxfcmVmOworCXN0cnVjdCBkcm1fZ2xvYmFsX3JlZmVyZW5jZSBtZW1fZ2xvYmFsX3JlZjsKIAogCXN0cnVjdCB2bXdfZmlmb19zdGF0ZSBmaWZvOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmIuYwppbmRleCBiMDg2NmYwNGUuLjg3MDk2N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmIuYwpAQCAtNTI4LDcgKzUyOCw3IEBACiAJICogRGlydHkgJiBEZWZlcnJlZCBJTwogCSAqLwogCXBhci0+ZGlydHkueDEgPSBwYXItPmRpcnR5LngyID0gMDsKLQlwYXItPmRpcnR5LnkxID0gcGFyLT5kaXJ0eS55MSA9IDA7CisJcGFyLT5kaXJ0eS55MSA9IHBhci0+ZGlydHkueTIgPSAwOwogCXBhci0+ZGlydHkuYWN0aXZlID0gdHJ1ZTsKIAlzcGluX2xvY2tfaW5pdCgmcGFyLT5kaXJ0eS5sb2NrKTsKIAlpbmZvLT5mYmRlZmlvID0gJnZtd19kZWZpbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKaW5kZXggZjFkNjI2MS4uNDM3YWM3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKQEAgLTk3Miw2ICs5NzIsNyBAQAogCXJldCA9IGNvcHlfZnJvbV91c2VyKHJlY3RzLCB1c2VyX3JlY3RzLCByZWN0c19zaXplKTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CiAJCURSTV9FUlJPUigiRmFpbGVkIHRvIGdldCByZWN0cy5cbiIpOworCQlyZXQgPSAtRUZBVUxUOwogCQlnb3RvIG91dF9mcmVlOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcmVzb3VyY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3Jlc291cmNlLmMKaW5kZXggODYxMjM3OC4uNWYyZDVkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcmVzb3VyY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jCkBAIC0xMDE3LDcgKzEwMTcsNyBAQAogfQogCiAvKgotICogU3RyZWFtIG1hbmFnbWVudAorICogU3RyZWFtIG1hbmFnZW1lbnQKICAqLwogCiBzdGF0aWMgdm9pZCB2bXdfc3RyZWFtX2Rlc3Ryb3koc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfdHRtX2dsdWUuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3R0bV9nbHVlLmMKaW5kZXggZTNkZjRhZC4uODMxMjMyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfdHRtX2dsdWUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF90dG1fZ2x1ZS5jCkBAIC00NCwyOSArNDQsMjkgQEAKIAlyZXR1cm4gdHRtX2JvX21tYXAoZmlscCwgdm1hLCAmZGV2X3ByaXYtPmJkZXYpOwogfQogCi1zdGF0aWMgaW50IHZtd190dG1fbWVtX2dsb2JhbF9pbml0KHN0cnVjdCB0dG1fZ2xvYmFsX3JlZmVyZW5jZSAqcmVmKQorc3RhdGljIGludCB2bXdfdHRtX21lbV9nbG9iYWxfaW5pdChzdHJ1Y3QgZHJtX2dsb2JhbF9yZWZlcmVuY2UgKnJlZikKIHsKIAlEUk1fSU5GTygiZ2xvYmFsIGluaXQuXG4iKTsKIAlyZXR1cm4gdHRtX21lbV9nbG9iYWxfaW5pdChyZWYtPm9iamVjdCk7CiB9CiAKLXN0YXRpYyB2b2lkIHZtd190dG1fbWVtX2dsb2JhbF9yZWxlYXNlKHN0cnVjdCB0dG1fZ2xvYmFsX3JlZmVyZW5jZSAqcmVmKQorc3RhdGljIHZvaWQgdm13X3R0bV9tZW1fZ2xvYmFsX3JlbGVhc2Uoc3RydWN0IGRybV9nbG9iYWxfcmVmZXJlbmNlICpyZWYpCiB7CiAJdHRtX21lbV9nbG9iYWxfcmVsZWFzZShyZWYtPm9iamVjdCk7CiB9CiAKIGludCB2bXdfdHRtX2dsb2JhbF9pbml0KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0Jc3RydWN0IHR0bV9nbG9iYWxfcmVmZXJlbmNlICpnbG9iYWxfcmVmOworCXN0cnVjdCBkcm1fZ2xvYmFsX3JlZmVyZW5jZSAqZ2xvYmFsX3JlZjsKIAlpbnQgcmV0OwogCiAJZ2xvYmFsX3JlZiA9ICZkZXZfcHJpdi0+bWVtX2dsb2JhbF9yZWY7Ci0JZ2xvYmFsX3JlZi0+Z2xvYmFsX3R5cGUgPSBUVE1fR0xPQkFMX1RUTV9NRU07CisJZ2xvYmFsX3JlZi0+Z2xvYmFsX3R5cGUgPSBEUk1fR0xPQkFMX1RUTV9NRU07CiAJZ2xvYmFsX3JlZi0+c2l6ZSA9IHNpemVvZihzdHJ1Y3QgdHRtX21lbV9nbG9iYWwpOwogCWdsb2JhbF9yZWYtPmluaXQgPSAmdm13X3R0bV9tZW1fZ2xvYmFsX2luaXQ7CiAJZ2xvYmFsX3JlZi0+cmVsZWFzZSA9ICZ2bXdfdHRtX21lbV9nbG9iYWxfcmVsZWFzZTsKIAotCXJldCA9IHR0bV9nbG9iYWxfaXRlbV9yZWYoZ2xvYmFsX3JlZik7CisJcmV0ID0gZHJtX2dsb2JhbF9pdGVtX3JlZihnbG9iYWxfcmVmKTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CiAJCURSTV9FUlJPUigiRmFpbGVkIHNldHRpbmcgdXAgVFRNIG1lbW9yeSBhY2NvdW50aW5nLlxuIik7CiAJCXJldHVybiByZXQ7CkBAIC03NSwxMSArNzUsMTEgQEAKIAlkZXZfcHJpdi0+Ym9fZ2xvYmFsX3JlZi5tZW1fZ2xvYiA9CiAJCWRldl9wcml2LT5tZW1fZ2xvYmFsX3JlZi5vYmplY3Q7CiAJZ2xvYmFsX3JlZiA9ICZkZXZfcHJpdi0+Ym9fZ2xvYmFsX3JlZi5yZWY7Ci0JZ2xvYmFsX3JlZi0+Z2xvYmFsX3R5cGUgPSBUVE1fR0xPQkFMX1RUTV9CTzsKKwlnbG9iYWxfcmVmLT5nbG9iYWxfdHlwZSA9IERSTV9HTE9CQUxfVFRNX0JPOwogCWdsb2JhbF9yZWYtPnNpemUgPSBzaXplb2Yoc3RydWN0IHR0bV9ib19nbG9iYWwpOwogCWdsb2JhbF9yZWYtPmluaXQgPSAmdHRtX2JvX2dsb2JhbF9pbml0OwogCWdsb2JhbF9yZWYtPnJlbGVhc2UgPSAmdHRtX2JvX2dsb2JhbF9yZWxlYXNlOwotCQlyZXQgPSB0dG1fZ2xvYmFsX2l0ZW1fcmVmKGdsb2JhbF9yZWYpOworCXJldCA9IGRybV9nbG9iYWxfaXRlbV9yZWYoZ2xvYmFsX3JlZik7CiAKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CiAJCURSTV9FUlJPUigiRmFpbGVkIHNldHRpbmcgdXAgVFRNIGJ1ZmZlciBvYmplY3RzLlxuIik7CkBAIC04OCwxMiArODgsMTIgQEAKIAogCXJldHVybiAwOwogb3V0X25vX2JvOgotCXR0bV9nbG9iYWxfaXRlbV91bnJlZigmZGV2X3ByaXYtPm1lbV9nbG9iYWxfcmVmKTsKKwlkcm1fZ2xvYmFsX2l0ZW1fdW5yZWYoJmRldl9wcml2LT5tZW1fZ2xvYmFsX3JlZik7CiAJcmV0dXJuIHJldDsKIH0KIAogdm9pZCB2bXdfdHRtX2dsb2JhbF9yZWxlYXNlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0JdHRtX2dsb2JhbF9pdGVtX3VucmVmKCZkZXZfcHJpdi0+Ym9fZ2xvYmFsX3JlZi5yZWYpOwotCXR0bV9nbG9iYWxfaXRlbV91bnJlZigmZGV2X3ByaXYtPm1lbV9nbG9iYWxfcmVmKTsKKwlkcm1fZ2xvYmFsX2l0ZW1fdW5yZWYoJmRldl9wcml2LT5ib19nbG9iYWxfcmVmLnJlZik7CisJZHJtX2dsb2JhbF9pdGVtX3VucmVmKCZkZXZfcHJpdi0+bWVtX2dsb2JhbF9yZWYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvS2NvbmZpZyBiL2RyaXZlcnMvaGlkL0tjb25maWcKaW5kZXggMTMyMjc4Zi4uNjM2OWJhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvS2NvbmZpZworKysgYi9kcml2ZXJzL2hpZC9LY29uZmlnCkBAIC02OCw2ICs2OCwxNCBAQAogCS0tLWhlbHAtLS0KIAlTdXBwb3J0IGZvciBBNCB0ZWNoIFg1IGFuZCBXT1AtMzUgLyBUcnVzdCA0NTBMIG1pY2UuCiAKK2NvbmZpZyBISURfQUNSVVhfRkYKKwl0cmlzdGF0ZSAiQUNSVVggZm9yY2UgZmVlZGJhY2sgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwlzZWxlY3QgSU5QVVRfRkZfTUVNTEVTUworCS0tLWhlbHAtLS0KKwlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBmb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBBQ1JVWAorCWdhbWUgY29udHJvbGxlcnMuCisKIGNvbmZpZyBISURfQVBQTEUKIAl0cmlzdGF0ZSAiQXBwbGUiIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiAoVVNCX0hJRCB8fCBCVF9ISURQKQpAQCAtMTQ4LDYgKzE1NiwxMiBAQAogCS0tLWhlbHAtLS0KIAlTdXBwb3J0IGZvciB0aGUgZUdhbGF4IGR1YWwtdG91Y2ggcGFuZWwuCiAKK2NvbmZpZyBISURfRUxFQ09NCisJdHJpc3RhdGUgIkVMRUNPTSIKKwlkZXBlbmRzIG9uIEJUX0hJRFAKKwktLS1oZWxwLS0tCisJU3VwcG9ydCBmb3IgdGhlIEVMRUNPTSBCTTA4NCAoYmx1ZXRvb3RoIG1vdXNlKS4KKwogY29uZmlnIEhJRF9FWktFWQogCXRyaXN0YXRlICJFemtleSIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFVTQl9ISUQKQEAgLTM1OCw2ICszNzIsNyBAQAogY29uZmlnIEhJRF9ST0NDQVRfS09ORQogCXRyaXN0YXRlICJSb2NjYXQgS29uZSBNb3VzZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCX0hJRAorCXNlbGVjdCBISURfUk9DQ0FUCiAJLS0taGVscC0tLQogCVN1cHBvcnQgZm9yIFJvY2NhdCBLb25lIG1vdXNlLgogCkBAIC00MTYsMTAgKzQzMSwxMSBAQAogCWVuYWJsZSBmb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBpdC4KIAogY29uZmlnIEhJRF9UT1BTRUVECi0JdHJpc3RhdGUgIlRvcFNlZWQgQ3liZXJsaW5rIHJlbW90ZSBjb250cm9sIHN1cHBvcnQiCisJdHJpc3RhdGUgIlRvcFNlZWQgQ3liZXJsaW5rLCBCVEMgRW1wcmV4LCBDb25jZXB0cm9uaWMgcmVtb3RlIGNvbnRyb2wgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQl9ISUQKIAktLS1oZWxwLS0tCi0JU2F5IFkgaWYgeW91IGhhdmUgYSBUb3BTZWVkIEN5YmVybGluayBvciBCVEMgRW1wcmV4IHJlbW90ZSBjb250cm9sLgorCVNheSBZIGlmIHlvdSBoYXZlIGEgVG9wU2VlZCBDeWJlcmxpbmsgb3IgQlRDIEVtcHJleCBvciBDb25jZXB0cm9uaWMKKwlDTExSQ01DRSByZW1vdGUgY29udHJvbC4KIAogY29uZmlnIEhJRF9USFJVU1RNQVNURVIKIAl0cmlzdGF0ZSAiVGhydXN0TWFzdGVyIGRldmljZXMgc3VwcG9ydCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL01ha2VmaWxlIGIvZHJpdmVycy9oaWQvTWFrZWZpbGUKaW5kZXggOTg3ZmEwNi4uNDZmMDM3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9oaWQvTWFrZWZpbGUKQEAgLTI0LDYgKzI0LDcgQEAKIAogb2JqLSQoQ09ORklHX0hJRF8zTV9QQ1QpCSs9IGhpZC0zbS1wY3Qubwogb2JqLSQoQ09ORklHX0hJRF9BNFRFQ0gpCSs9IGhpZC1hNHRlY2gubworb2JqLSQoQ09ORklHX0hJRF9BQ1JVWF9GRikJKz0gaGlkLWF4ZmYubwogb2JqLSQoQ09ORklHX0hJRF9BUFBMRSkJCSs9IGhpZC1hcHBsZS5vCiBvYmotJChDT05GSUdfSElEX0JFTEtJTikJKz0gaGlkLWJlbGtpbi5vCiBvYmotJChDT05GSUdfSElEX0NBTkRPKQkJKz0gaGlkLWNhbmRvLm8KQEAgLTMyLDYgKzMzLDcgQEAKIG9iai0kKENPTkZJR19ISURfQ1lQUkVTUykJKz0gaGlkLWN5cHJlc3Mubwogb2JqLSQoQ09ORklHX0hJRF9EUkFHT05SSVNFKQkrPSBoaWQtZHJmZi5vCiBvYmotJChDT05GSUdfSElEX0VHQUxBWCkJKz0gaGlkLWVnYWxheC5vCitvYmotJChDT05GSUdfSElEX0VMRUNPTSkJKz0gaGlkLWVsZWNvbS5vCiBvYmotJChDT05GSUdfSElEX0VaS0VZKQkJKz0gaGlkLWV6a2V5Lm8KIG9iai0kKENPTkZJR19ISURfR1lSQVRJT04pCSs9IGhpZC1neXJhdGlvbi5vCiBvYmotJChDT05GSUdfSElEX0tFTlNJTkdUT04pCSs9IGhpZC1rZW5zaW5ndG9uLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1heGZmLmMgYi9kcml2ZXJzL2hpZC9oaWQtYXhmZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MmVlMTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtYXhmZi5jCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogRm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgQUNSVVggZ2FtZSBjb250cm9sbGVycworICoKKyAqIEZyb20gd2hhdCBJIGhhdmUgZ2F0aGVyZWQsIHRoZXNlIGRldmljZXMgYXJlIG1hc3MgcHJvZHVjZWQgaW4gQ2hpbmEKKyAqIGJ5IHNldmVyYWwgdmVuZG9ycy4gVGhleSBvZnRlbiBzaGFyZSB0aGUgc2FtZSBkZXNpZ24gYXMgdGhlIG9yaWdpbmFsCisgKiBYYm94IDM2MCBjb250cm9sbGVyLgorICoKKyAqIDFhMzQ6MDgwMiAiQUNSVVggVVNCIEdBTUVQQUQgODExNiIKKyAqICAtIHRlc3RlZCB3aXRoIGEgRVhFUSBFUS1QQ1UtMDIwOTAgZ2FtZSBjb250cm9sbGVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTZXJnZWkgS29senVuIDx4MHJAZHYtbGlmZS5ydT4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisjaW5jbHVkZSAidXNiaGlkL3VzYmhpZC5oIgorCitzdHJ1Y3QgYXhmZl9kZXZpY2UgeworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7Cit9OworCitzdGF0aWMgaW50IGF4ZmZfcGxheShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgYXhmZl9kZXZpY2UgKmF4ZmYgPSBkYXRhOworCWludCBsZWZ0LCByaWdodDsKKworCWxlZnQgPSBlZmZlY3QtPnUucnVtYmxlLnN0cm9uZ19tYWduaXR1ZGU7CisJcmlnaHQgPSBlZmZlY3QtPnUucnVtYmxlLndlYWtfbWFnbml0dWRlOworCisJZGJnX2hpZCgiY2FsbGVkIHdpdGggMHglMDR4IDB4JTA0eCIsIGxlZnQsIHJpZ2h0KTsKKworCWxlZnQgPSBsZWZ0ICogMHhmZiAvIDB4ZmZmZjsKKwlyaWdodCA9IHJpZ2h0ICogMHhmZiAvIDB4ZmZmZjsKKworCWF4ZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gbGVmdDsKKwlheGZmLT5yZXBvcnQtPmZpZWxkWzFdLT52YWx1ZVswXSA9IHJpZ2h0OworCWF4ZmYtPnJlcG9ydC0+ZmllbGRbMl0tPnZhbHVlWzBdID0gbGVmdDsKKwlheGZmLT5yZXBvcnQtPmZpZWxkWzNdLT52YWx1ZVswXSA9IHJpZ2h0OworCWRiZ19oaWQoInJ1bm5pbmcgd2l0aCAweCUwMnggMHglMDJ4IiwgbGVmdCwgcmlnaHQpOworCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgYXhmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBheGZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlzdHJ1Y3QgYXhmZl9kZXZpY2UgKmF4ZmY7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCA9IGxpc3RfZmlyc3RfZW50cnkoJmhpZC0+aW5wdXRzLCBzdHJ1Y3QgaGlkX2lucHV0LCBsaXN0KTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpyZXBvcnRfbGlzdCA9JmhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0OworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IGhpZGlucHV0LT5pbnB1dDsKKwlpbnQgZXJyb3I7CisKKwlpZiAobGlzdF9lbXB0eShyZXBvcnRfbGlzdCkpIHsKKwkJZGV2X2VycigmaGlkLT5kZXYsICJubyBvdXRwdXQgcmVwb3J0cyBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJlcG9ydCA9IGxpc3RfZmlyc3RfZW50cnkocmVwb3J0X2xpc3QsIHN0cnVjdCBoaWRfcmVwb3J0LCBsaXN0KTsKKworCWlmIChyZXBvcnQtPm1heGZpZWxkIDwgNCkgeworCQlkZXZfZXJyKCZoaWQtPmRldiwgIm5vIGZpZWxkcyBpbiB0aGUgcmVwb3J0OiAlZFxuIiwgcmVwb3J0LT5tYXhmaWVsZCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWF4ZmYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXhmZl9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWF4ZmYpCisJCXJldHVybiAtRU5PTUVNOworCisJc2V0X2JpdChGRl9SVU1CTEUsIGRldi0+ZmZiaXQpOworCisJZXJyb3IgPSBpbnB1dF9mZl9jcmVhdGVfbWVtbGVzcyhkZXYsIGF4ZmYsIGF4ZmZfcGxheSk7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycl9mcmVlX21lbTsKKworCWF4ZmYtPnJlcG9ydCA9IHJlcG9ydDsKKwlheGZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4MDA7CisJYXhmZi0+cmVwb3J0LT5maWVsZFsxXS0+dmFsdWVbMF0gPSAweDAwOworCWF4ZmYtPnJlcG9ydC0+ZmllbGRbMl0tPnZhbHVlWzBdID0gMHgwMDsKKwlheGZmLT5yZXBvcnQtPmZpZWxkWzNdLT52YWx1ZVswXSA9IDB4MDA7CisJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCBheGZmLT5yZXBvcnQsIFVTQl9ESVJfT1VUKTsKKworCWRldl9pbmZvKCZoaWQtPmRldiwgIkZvcmNlIEZlZWRiYWNrIGZvciBBQ1JVWCBnYW1lIGNvbnRyb2xsZXJzIGJ5IFNlcmdlaSBLb2x6dW48eDByQGR2LWxpZmUucnU+XG4iKTsKKworCXJldHVybiAwOworCitlcnJfZnJlZV9tZW06CisJa2ZyZWUoYXhmZik7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IGF4X3Byb2JlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWQpCit7CisJaW50IGVycm9yOworCisJZGV2X2RiZygmaGRldi0+ZGV2LCAiQUNSVVggSElEIGhhcmR3YXJlIHByb2JlLi4uIik7CisKKwllcnJvciA9IGhpZF9wYXJzZShoZGV2KTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCWVycm9yID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQgJiB+SElEX0NPTk5FQ1RfRkYpOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJZXJyb3IgPSBheGZmX2luaXQoaGRldik7CisJaWYgKGVycm9yKSB7CisJCS8qCisJCSAqIERvIG5vdCBmYWlsIGRldmljZSBpbml0aWFsaXphdGlvbiBjb21wbGV0ZWx5IGFzIGRldmljZQorCQkgKiBtYXkgc3RpbGwgYmUgcGFydGlhbGx5IG9wZXJhYmxlLCBqdXN0IHdhcm4uCisJCSAqLworCQlkZXZfd2FybigmaGRldi0+ZGV2LAorCQkJICJGYWlsZWQgdG8gZW5hYmxlIGZvcmNlIGZlZWRiYWNrIHN1cHBvcnQsIGVycm9yOiAlZFxuIiwKKwkJCSBlcnJvcik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBheF9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FDUlVYLCAweDA4MDIpLCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBheF9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIGF4X2RyaXZlciA9IHsKKwkubmFtZSA9ICJhY3J1eCIsCisJLmlkX3RhYmxlID0gYXhfZGV2aWNlcywKKwkucHJvYmUgPSBheF9wcm9iZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGF4X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmYXhfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGF4X2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmF4X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGF4X2luaXQpOworbW9kdWxlX2V4aXQoYXhfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlNlcmdlaSBLb2x6dW4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgQUNSVVggZ2FtZSBjb250cm9sbGVycyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWNvcmUuYyBiL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKaW5kZXggYWEwZjdkYy4uZTYzNTE5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCkBAIC0xMTU3LDYgKzExNTcsOCBAQAogCiAJaWYgKGhkZXYtPnF1aXJrcyAmIEhJRF9RVUlSS19ISURERVZfRk9SQ0UpCiAJCWNvbm5lY3RfbWFzayB8PSAoSElEX0NPTk5FQ1RfSElEREVWX0ZPUkNFIHwgSElEX0NPTk5FQ1RfSElEREVWKTsKKwlpZiAoaGRldi0+cXVpcmtzICYgSElEX1FVSVJLX0hJRElOUFVUX0ZPUkNFKQorCQljb25uZWN0X21hc2sgfD0gSElEX0NPTk5FQ1RfSElESU5QVVRfRk9SQ0U7CiAJaWYgKGhkZXYtPmJ1cyAhPSBCVVNfVVNCKQogCQljb25uZWN0X21hc2sgJj0gfkhJRF9DT05ORUNUX0hJRERFVjsKIAlpZiAoaGlkX2hpZGRldihoZGV2KSkKQEAgLTEyMzksNiArMTI0MSw5IEBACiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEXzNNLCBVU0JfREVWSUNFX0lEXzNNMjI1NikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQTRURUNILCBVU0JfREVWSUNFX0lEX0E0VEVDSF9XQ1AzMlBVKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BNFRFQ0gsIFVTQl9ERVZJQ0VfSURfQTRURUNIX1g1XzAwNUQpIH0sCisjaWYgZGVmaW5lZChDT05GSUdfSElEX0FDUlVYX0ZGKSB8fCBkZWZpbmVkKENPTkZJR19ISURfQUNSVVhfRkZfTU9EVUxFKQorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BQ1JVWCwgMHgwODAyKSB9LAorI2VuZGlmCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FUVl9JUkNPTlRST0wpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0lSQ09OVFJPTDQpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX01JR0hUWU1PVVNFKSB9LApAQCAtMTI5NCw2ICsxMjk5LDcgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQ1lQUkVTUywgVVNCX0RFVklDRV9JRF9DWVBSRVNTX01PVVNFKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9EUkFHT05SSVNFLCAweDAwMDYpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0RXQVYsIFVTQl9ERVZJQ0VfSURfRFdBVl9FR0FMQVhfTVVMVElUT1VDSCkgfSwKKwl7IEhJRF9CTFVFVE9PVEhfREVWSUNFKFVTQl9WRU5ET1JfSURfRUxFQ09NLCBVU0JfREVWSUNFX0lEX0VMRUNPTV9CTTA4NCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRVpLRVksIFVTQl9ERVZJQ0VfSURfQlRDXzgxOTMpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dBTUVST04sIFVTQl9ERVZJQ0VfSURfR0FNRVJPTl9EVUFMX1BTWF9BREFQVE9SKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HQU1FUk9OLCBVU0JfREVWSUNFX0lEX0dBTUVST05fRFVBTF9QQ1NfQURBUFRPUikgfSwKQEAgLTEzMzcsNiArMTM0MywyNCBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NSUNST1NPRlQsIFVTQl9ERVZJQ0VfSURfV0lSRUxFU1NfT1BUSUNBTF9ERVNLVE9QXzNfMCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTU9OVEVSRVksIFVTQl9ERVZJQ0VfSURfR0VOSVVTX0tCMjlFKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9OVFJJRywgVVNCX0RFVklDRV9JRF9OVFJJR19UT1VDSF9TQ1JFRU4pIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX05UUklHLCBVU0JfREVWSUNFX0lEX05UUklHX1RPVUNIX1NDUkVFTl8xKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9OVFJJRywgVVNCX0RFVklDRV9JRF9OVFJJR19UT1VDSF9TQ1JFRU5fMikgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTlRSSUcsIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOXzMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX05UUklHLCBVU0JfREVWSUNFX0lEX05UUklHX1RPVUNIX1NDUkVFTl80KSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9OVFJJRywgVVNCX0RFVklDRV9JRF9OVFJJR19UT1VDSF9TQ1JFRU5fNSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTlRSSUcsIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOXzYpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX05UUklHLCBVU0JfREVWSUNFX0lEX05UUklHX1RPVUNIX1NDUkVFTl83KSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9OVFJJRywgVVNCX0RFVklDRV9JRF9OVFJJR19UT1VDSF9TQ1JFRU5fOCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTlRSSUcsIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOXzkpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX05UUklHLCBVU0JfREVWSUNFX0lEX05UUklHX1RPVUNIX1NDUkVFTl8xMCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTlRSSUcsIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOXzExKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9OVFJJRywgVVNCX0RFVklDRV9JRF9OVFJJR19UT1VDSF9TQ1JFRU5fMTIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX05UUklHLCBVU0JfREVWSUNFX0lEX05UUklHX1RPVUNIX1NDUkVFTl8xMykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTlRSSUcsIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOXzE0KSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9OVFJJRywgVVNCX0RFVklDRV9JRF9OVFJJR19UT1VDSF9TQ1JFRU5fMTUpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX05UUklHLCBVU0JfREVWSUNFX0lEX05UUklHX1RPVUNIX1NDUkVFTl8xNikgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTlRSSUcsIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOXzE3KSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9OVFJJRywgVVNCX0RFVklDRV9JRF9OVFJJR19UT1VDSF9TQ1JFRU5fMTgpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX09SVEVLLCBVU0JfREVWSUNFX0lEX09SVEVLX1dLQjIwMDApIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1BFVEFMWU5YLCBVU0JfREVWSUNFX0lEX1BFVEFMWU5YX01BWFRFUl9SRU1PVEUpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQU5UQSwgVVNCX0RFVklDRV9JRF9RVUFOVEFfT1BUSUNBTF9UT1VDSCkgfSwKQEAgLTEzNTcsMTAgKzEzODEsMTAgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVEhSVVNUTUFTVEVSLCAweGI2NTMpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUiwgMHhiNjU0KSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9UT1BTRUVELCBVU0JfREVWSUNFX0lEX1RPUFNFRURfQ1lCRVJMSU5LKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9UT1BTRUVEMiwgVVNCX0RFVklDRV9JRF9UT1BTRUVEMl9SRl9DT01CTykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVFdJTkhBTiwgVVNCX0RFVklDRV9JRF9UV0lOSEFOX0lSX1JFTU9URSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0lTRUdST1VQLCBVU0JfREVWSUNFX0lEX1NNQVJUSk9ZX1BMVVMpIH0sCiAJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0dSQVBISVJFX0JMVUVUT09USCkgfSwKLQl7IEhJRF9CTFVFVE9PVEhfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TNF9CTFVFVE9PVEgpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1pFUk9QTFVTLCAweDAwMDUpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1pFUk9QTFVTLCAweDAwMzApIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1pZREFDUk9OLCBVU0JfREVWSUNFX0lEX1pZREFDUk9OX1JFTU9URV9DT05UUk9MKSB9LApAQCAtMTU2OCw2ICsxNTkyLDcgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfREVMT1JNRSwgVVNCX0RFVklDRV9JRF9ERUxPUk1FX0VNX0xUMjApIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0VTU0VOVElBTF9SRUFMSVRZLCBVU0JfREVWSUNFX0lEX0VTU0VOVElBTF9SRUFMSVRZX1A1KSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9FVFQsIFVTQl9ERVZJQ0VfSURfVEM1VUgpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0VUVCwgVVNCX0RFVklDRV9JRF9UQzRVTSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0VORVJBTF9UT1VDSCwgMHgwMDAxKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HRU5FUkFMX1RPVUNILCAweDAwMDIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dFTkVSQUxfVE9VQ0gsIDB4MDAwMykgfSwKQEAgLTE3NjAsNyArMTc4NSw4IEBACiAKIAkvKiB3ZSBuZWVkIHRvIGtpbGwgdGhlbSBoZXJlLCBvdGhlcndpc2UgdGhleSB3aWxsIHN0YXkgYWxsb2NhdGVkIHRvCiAJICogd2FpdCBmb3IgY29taW5nIGRyaXZlciAqLwotCWlmICghKGhkZXYtPnF1aXJrcyAmIEhJRF9RVUlSS19OT19JR05PUkUpICYmIGhpZF9pZ25vcmUoaGRldikpCisJaWYgKCEoaGRldi0+cXVpcmtzICYgSElEX1FVSVJLX05PX0lHTk9SRSkKKyAgICAgICAgICAgICYmIChoaWRfaWdub3JlKGhkZXYpIHx8IChoZGV2LT5xdWlya3MgJiBISURfUVVJUktfSUdOT1JFKSkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogWFhYIGhhY2ssIGFueSBvdGhlciBjbGVhbmVyIHNvbHV0aW9uIGFmdGVyIHRoZSBkcml2ZXIgY29yZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWRlYnVnLmMgYi9kcml2ZXJzL2hpZC9oaWQtZGVidWcuYwppbmRleCBjOTQwMjY3Li44NTBkMDJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtZGVidWcuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtZGVidWcuYwpAQCAtOTQ5LDggKzk0OSw4IEBACiAJaW50IHJldCA9IDAsIGxlbjsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAorCW11dGV4X2xvY2soJmxpc3QtPnJlYWRfbXV0ZXgpOwogCXdoaWxlIChyZXQgPT0gMCkgewotCQltdXRleF9sb2NrKCZsaXN0LT5yZWFkX211dGV4KTsKIAkJaWYgKGxpc3QtPmhlYWQgPT0gbGlzdC0+dGFpbCkgewogCQkJYWRkX3dhaXRfcXVldWUoJmxpc3QtPmhkZXYtPmRlYnVnX3dhaXQsICZ3YWl0KTsKIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtZWxlY29tLmMgYi9kcml2ZXJzL2hpZC9oaWQtZWxlY29tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E0MDg3OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1lbGVjb20uYwpAQCAtMCwwICsxLDU3IEBACisvKgorICogIEhJRCBkcml2ZXIgZm9yIEVsZWNvbSBCTTA4NCAoYmx1ZXRvb3RoIG1vdXNlKS4KKyAqICBSZW1vdmVzIGEgbm9uLWV4aXN0aW5nIGhvcml6b250YWwgd2hlZWwgZnJvbQorICogIHRoZSBISUQgZGVzY3JpcHRvci4KKyAqICAoVGhpcyBtb2R1bGUgaXMgYmFzZWQgb24gImhpZC1vcnRlayIuKQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTAgUmljaGFyZCBOYXViZXIgPFJpY2hhcmQuTmF1YmVyQGdtYWlsLmNvbT4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKK3N0YXRpYyB2b2lkIGVsZWNvbV9yZXBvcnRfZml4dXAoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIF9fdTggKnJkZXNjLAorCQl1bnNpZ25lZCBpbnQgcnNpemUpCit7CisJaWYgKHJzaXplID49IDQ4ICYmIHJkZXNjWzQ2XSA9PSAweDA1ICYmIHJkZXNjWzQ3XSA9PSAweDBjKSB7CisJCWRldl9pbmZvKCZoZGV2LT5kZXYsICJGaXhpbmcgdXAgRWxlY29tIEJNMDg0ICIKKwkJCQkicmVwb3J0IGRlc2NyaXB0b3IuXG4iKTsKKwkJcmRlc2NbNDddID0gMHgwMDsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBlbGVjb21fZGV2aWNlc1tdID0geworCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9FTEVDT00sIFVTQl9ERVZJQ0VfSURfRUxFQ09NX0JNMDg0KX0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIGVsZWNvbV9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIGVsZWNvbV9kcml2ZXIgPSB7CisJLm5hbWUgPSAiZWxlY29tIiwKKwkuaWRfdGFibGUgPSBlbGVjb21fZGV2aWNlcywKKwkucmVwb3J0X2ZpeHVwID0gZWxlY29tX3JlcG9ydF9maXh1cAorfTsKKworc3RhdGljIGludCBfX2luaXQgZWxlY29tX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmZWxlY29tX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBlbGVjb21fZXhpdCh2b2lkKQoreworCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmZWxlY29tX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGVsZWNvbV9pbml0KTsKK21vZHVsZV9leGl0KGVsZWNvbV9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1pZHMuaCBiL2RyaXZlcnMvaGlkL2hpZC1pZHMuaAppbmRleCA2YWY3N2VkLi5kM2ZjMTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKKysrIGIvZHJpdmVycy9oaWQvaGlkLWlkcy5oCkBAIC0zNCw2ICszNCw4IEBACiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUNFQ0FEX0ZMQUlSCTB4MDAwNAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FDRUNBRF8zMDIJMHgwMDA4CiAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BQ1JVWAkJMHgxYTM0CisKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BRFNfVEVDSCAJCTB4MDZlMQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FEU19URUNIX1JBRElPX1NJNDcwWAkweGExNTUKIApAQCAtODEsMTIgKzgzLDEyIEBACiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklOR19BTlNJCTB4MDIyMwogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkdfSVNPCTB4MDIyNAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkdfSklTCTB4MDIyNQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjRfSEZfQU5TSSAgICAweDAyMjkKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0hGX0lTTyAgICAgMHgwMjJhCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9IRl9KSVMgICAgIDB4MDIyYgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU19BTlNJICAweDAyMmMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfSVNPICAgMHgwMjJkCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX1dJUkVMRVNTX0pJUyAgIDB4MDIyZQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjRfSEZfQU5TSQkweDAyMjkKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0hGX0lTTwkweDAyMmEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0hGX0pJUwkweDAyMmIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfQU5TSQkweDAyMmMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfSVNPCTB4MDIyZAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU19KSVMJMHgwMjJlCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzJfQU5TSQkweDAyMzAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HMl9JU08JMHgwMjMxCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzJfSklTCTB4MDIzMgpAQCAtMTE4LDggKzEyMCw4IEBACiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfQVZFUk1FRElBCQkweDA3Y2EKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BVkVSX0ZNX01SODAwCTB4YjgwMAogCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfQkVMS0lOICAgICAgICAgICAweDA1MGQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9GTElQX0tWTSAgICAgICAgIDB4MzIwMQorI2RlZmluZSBVU0JfVkVORE9SX0lEX0JFTEtJTgkJMHgwNTBkCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfRkxJUF9LVk0JCTB4MzIwMQogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfQkVSS1NISVJFCQkweDBjOTgKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9CRVJLU0hJUkVfUENXRAkweDExNDAKQEAgLTEyOCwxMiArMTMwLDEzIEBACiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQlRDX0VNUFJFWF9SRU1PVEUJMHg1NTc4CiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9DQU5ETwkJMHgyMDg3Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ0FORE9fTVVMVElfVE9VQ0ggMHgwYTAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ0FORE9fTVVMVElfVE9VQ0gJMHgwYTAxCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ0FORE9fTVVMVElfVE9VQ0hfMTFfNiAweDBiMDMKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX0NICQkweDA2OGUKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9DSF9QUk9fUEVEQUxTCTB4MDBmMgogI2RlZmluZSBVU0JfREVWSUNFX0lEX0NIX0NPTUJBVFNUSUNLCTB4MDBmNAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0NIX0ZMSUdIVF9TSU1fRUNMSVBTRV9ZT0tFICAgICAgIDB4MDA1MQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0NIX0ZMSUdIVF9TSU1fWU9LRQkweDAwZmYKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9DSF8zQVhJU181QlVUVE9OX1NUSUNLCTB4MDBkMwogCkBAIC0xNzQsNyArMTc3LDcgQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9ERUFMRVhUUkVBTUVfUkFESU9fU0k0NzAxCTB4ODE5YQogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfREVMT1JNRQkJMHgxMTYzCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfREVMT1JNRV9FQVJUSE1BVEUgMHgwMTAwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfREVMT1JNRV9FQVJUSE1BVEUJMHgwMTAwCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfREVMT1JNRV9FTV9MVDIwCTB4MDIwMAogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfRE1JCQkweDBjMGIKQEAgLTE4NiwxOSArMTg5LDIzIEBACiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfRUdBTEFYX1RPVUNIQ09OVFJPTExFUgkweDAwMDEKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9EV0FWX0VHQUxBWF9NVUxUSVRPVUNICTB4NDgwZAogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfRUxFQ09NCQkweDA1NmUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9FTEVDT01fQk0wODQJMHgwMDYxCisKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9FTE8JCTB4MDRFNwogI2RlZmluZSBVU0JfREVWSUNFX0lEX0VMT19UUzI3MDAJMHgwMDIwCiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9FU1NFTlRJQUxfUkVBTElUWQkweDBkN2YKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9FU1NFTlRJQUxfUkVBTElUWV9QNSAweDAxMDAKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX0VUVAkJMHgwNjY0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVEM1VUgJCTB4MDMwOQorI2RlZmluZSBVU0JfREVWSUNFX0lEX1RDNFVNCQkweDAzMDYKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX0VUVVJCT1RPVUNICTB4MjJiOQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0VUVVJCT1RPVUNICTB4MDAwNgogCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfRVRUCQkweDA2NjQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9UQzVVSAkJMHgwMzA5Ci0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9FWktFWSAJCTB4MDUxOAorI2RlZmluZSBVU0JfVkVORE9SX0lEX0VaS0VZCQkweDA1MTgKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9CVENfODE5MwkJMHgwMDAyCiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9HQU1FUk9OCQkweDA4MTAKQEAgLTI5NSw5ICszMDIsMTYgQEAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9LQkdFQVIJCTB4MDg0ZQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0tCR0VBUl9KQU1TVFVESU8JMHgxMDAxCiAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9LRU5TSU5HVE9OCTB4MDQ3ZAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0tTX1NMSU1CTEFERQkweDIwNDEKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX0tXT1JMRAkJMHgxYjgwCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfS1dPUkxEX1JBRElPX0ZNNzAwCTB4ZDcwMAogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfS1lFCQkweDA0NTgKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9LWUVfRVJHT181MjVWCTB4MDA4NworI2RlZmluZSBVU0JfREVWSUNFX0lEX0tZRV9HUEVOXzU2MAkweDUwMDMKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX0xBQlRFQwkJMHgxMDIwCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTEFCVEVDX1dJUkVMRVNTX0tFWUJPQVJECTB4MDAwNgogCkBAIC0zMTcsOSArMzMxLDYgQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9QT1dFUkNPTlRST0wJMHgyMDMwCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfTUFDSElORVRFU1QJMHgyMDQwCiAKLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9LRU5TSU5HVE9OCTB4MDQ3ZAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0tTX1NMSU1CTEFERQkweDIwNDEKLQogI2RlZmluZSBVU0JfVkVORE9SX0lEX0xPR0lURUNICQkweDA0NmQKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9SRUNFSVZFUgkweGMxMDEKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZX0ZJUlNUICAweGMxMTAKQEAgLTM2OSwyOCArMzgwLDQ4IEBACiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTVNfUFJFU0VOVEVSXzhLX0JUCTB4MDcwMQogI2RlZmluZSBVU0JfREVWSUNFX0lEX01TX1BSRVNFTlRFUl84S19VU0IJMHgwNzEzCiAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9NT0pPCQkweDgyODIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9SRVRST19BREFQVEVSCTB4MzIwMQogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfTU9OVEVSRVkJCTB4MDU2NgogI2RlZmluZSBVU0JfREVWSUNFX0lEX0dFTklVU19LQjI5RQkweDMwMDQKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX05BVElPTkFMX1NFTUlDT05EVUNUT1IgMHgwNDAwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTl9TX0hBUk1PTlkJMHhjMzU5CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9OQVRTVQkJMHgwOGI3CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTkFUU1VfR0FNRVBBRAkweDAwMDEKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX05DUgkJMHgwNDA0CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTkNSX0ZJUlNUCQkweDAzMDAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9OQ1JfTEFTVAkJMHgwM2ZmCiAKLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9OQVRJT05BTF9TRU1JQ09ORFVDVE9SIDB4MDQwMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX05fU19IQVJNT05ZICAgICAgIDB4YzM1OQotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfTkFUU1UgICAgICAgICAgICAgMHgwOGI3Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTkFUU1VfR0FNRVBBRCAgICAgMHgwMDAxCi0KICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9ORUMJCTB4MDczZQogI2RlZmluZSBVU0JfREVWSUNFX0lEX05FQ19VU0JfR0FNRV9QQUQJMHgwMzAxCiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9ORVhUV0lORE9XCTB4MTkyNgogI2RlZmluZSBVU0JfREVWSUNFX0lEX05FWFRXSU5ET1dfVE9VQ0hTQ1JFRU4JMHgwMDAzCiAKLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9OVFJJRyAgICAgICAgICAgICAgICAweDFiOTYKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9OVFJJRwkJMHgxYjk2CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOICAgMHgwMDAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOXzEgICAweDAwMDMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9OVFJJR19UT1VDSF9TQ1JFRU5fMiAgIDB4MDAwNAorI2RlZmluZSBVU0JfREVWSUNFX0lEX05UUklHX1RPVUNIX1NDUkVFTl8zICAgMHgwMDA1CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOXzQgICAweDAwMDYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9OVFJJR19UT1VDSF9TQ1JFRU5fNSAgIDB4MDAwNworI2RlZmluZSBVU0JfREVWSUNFX0lEX05UUklHX1RPVUNIX1NDUkVFTl82ICAgMHgwMDA4CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOXzcgICAweDAwMDkKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9OVFJJR19UT1VDSF9TQ1JFRU5fOCAgIDB4MDAwQQorI2RlZmluZSBVU0JfREVWSUNFX0lEX05UUklHX1RPVUNIX1NDUkVFTl85ICAgMHgwMDBCCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOXzEwICAgMHgwMDBDCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOXzExICAgMHgwMDBECisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOXzEyICAgMHgwMDBFCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOXzEzICAgMHgwMDBGCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOXzE0ICAgMHgwMDEwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOXzE1ICAgMHgwMDExCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOXzE2ICAgMHgwMDEyCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOXzE3ICAgMHgwMDEzCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOXzE4ICAgMHgwMDE0CiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9PTlRSQUsJCTB4MGEwNwogI2RlZmluZSBVU0JfREVWSUNFX0lEX09OVFJBS19BRFUxMDAJMHgwMDY0CkBAIC00MDYsOSArNDM3LDEyIEBACiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfUEVUQUxZTlgJCTB4MThiMQogI2RlZmluZSBVU0JfREVWSUNFX0lEX1BFVEFMWU5YX01BWFRFUl9SRU1PVEUJMHgwMDM3CiAKLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9QSElMSVBTICAgICAgIDB4MDQ3MQorI2RlZmluZSBVU0JfVkVORE9SX0lEX1BISUxJUFMJCTB4MDQ3MQogI2RlZmluZSBVU0JfREVWSUNFX0lEX1BISUxJUFNfSUVFRTgwMjE1NF9ET05HTEUgMHgwNjE3CiAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9QSV9FTkdJTkVFUklORwkweDA1ZjMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9QSV9FTkdJTkVFUklOR19WRUNfVVNCX0ZPT1RQRURBTAkweGZmCisKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9QTEFZRE9UQ09NCTB4MGI0MwogI2RlZmluZSBVU0JfREVWSUNFX0lEX1BMQVlET1RDT01fRU1TX1VTQklJCTB4MDAwMwogCkBAIC00MTgsMTYgKzQ1MiwxNiBAQAogI2RlZmluZSBVU0JfVkVORE9SX0lEX1BST0RJR0UJCTB4MDVhZgogI2RlZmluZSBVU0JfREVWSUNFX0lEX1BST0RJR0VfQ09SRExFU1MJMHgzMDYyCiAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9RVUFOVEEJCTB4MDQwOAorI2RlZmluZSBVU0JfREVWSUNFX0lEX1FVQU5UQV9PUFRJQ0FMX1RPVUNICTB4MzAwMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX1BJWEFSVF9JTUFHSU5HX0lOQ19PUFRJQ0FMX1RPVUNIX1NDUkVFTgkweDMwMDEKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX1JPQ0NBVAkJMHgxZTdkCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUk9DQ0FUX0tPTkUJMHgyY2VkCiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TQUlURUsJCTB4MDZhMwogI2RlZmluZSBVU0JfREVWSUNFX0lEX1NBSVRFS19SVU1CTEVQQUQJMHhmZjE3CiAKLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9RVUFOVEEJCTB4MDQwOAotI2RlZmluZSBVU0JfREVWSUNFX0lEX1FVQU5UQV9PUFRJQ0FMX1RPVUNICTB4MzAwMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX1BJWEFSVF9JTUFHSU5HX0lOQ19PUFRJQ0FMX1RPVUNIX1NDUkVFTgkweDMwMDEKLQogI2RlZmluZSBVU0JfVkVORE9SX0lEX1NBTVNVTkcJCTB4MDQxOQogI2RlZmluZSBVU0JfREVWSUNFX0lEX1NBTVNVTkdfSVJfUkVNT1RFCTB4MDAwMQogI2RlZmluZSBVU0JfREVWSUNFX0lEX1NBTVNVTkdfV0lSRUxFU1NfS0JEX01PVVNFCTB4MDYwMApAQCAtNDUxLDIwICs0ODUsMjMgQEAKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUgkweDA0NGYKIAotI2RlZmluZSBVU0JfVkVORE9SX0lEX1RPVUNIUEFDSwkJMHgxYmZkCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfVE9VQ0hQQUNLX1JUUwkweDE2ODgKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9UT1BTRUVECQkweDA3NjYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9UT1BTRUVEX0NZQkVSTElOSwkweDAyMDQKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1RPUFNFRUQyCQkweDE3ODQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9UT1BTRUVEMl9SRl9DT01CTwkweDAwMDQKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX1RPUE1BWAkJMHgwNjYzCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVE9QTUFYX0NPQlJBUEFECTB4MDEwMwogCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfVE9QU0VFRAkJMHgwNzY2Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfVE9QU0VFRF9DWUJFUkxJTksJMHgwMjA0CisjZGVmaW5lIFVTQl9WRU5ET1JfSURfVE9VQ0hQQUNLCQkweDFiZmQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9UT1VDSFBBQ0tfUlRTCTB4MTY4OAogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfVFVSQk9YCQkweDA2MmEKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9UVVJCT1hfS0VZQk9BUkQJMHgwMjAxCiAKLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9UV0lOSEFOICAgICAgICAgICAweDYyNTMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9UV0lOSEFOX0lSX1JFTU9URSAweDAxMDAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9UV0lOSEFOCQkweDYyNTMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9UV0lOSEFOX0lSX1JFTU9URQkweDAxMDAKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX1VDTE9HSUMJCTB4NTU0MwogI2RlZmluZSBVU0JfREVWSUNFX0lEX1VDTE9HSUNfVEFCTEVUX1BGMTIwOQkweDAwNDIKQEAgLTQ3OSw3ICs1MTYsNiBAQAogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfV0FDT00JCTB4MDU2YQogI2RlZmluZSBVU0JfREVWSUNFX0lEX1dBQ09NX0dSQVBISVJFX0JMVUVUT09USAkweDgxCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TNF9CTFVFVE9PVEgJMHhiZAogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfV0lTRUdST1VQCQkweDA5MjUKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TTUFSVEpPWV9QTFVTCTB4MDAwNQpAQCAtNTAxLDkgKzUzNyw0IEBACiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfWllEQUNST04JMHgxM0VDCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfWllEQUNST05fUkVNT1RFX0NPTlRST0wJMHgwMDA2CiAKLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9LWUUJCTB4MDQ1OAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0tZRV9FUkdPXzUyNVYJMHgwMDg3Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfS1lFX0dQRU5fNTYwCTB4NTAwMwotCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWlucHV0LmMgYi9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYwppbmRleCA3YTBkMmU0Li42YzAzZGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYwpAQCAtMTk5LDExICsxOTksMTEgQEAKIAkJY2FzZSBISURfR0RfTU9VU0U6CiAJCWNhc2UgSElEX0dEX1BPSU5URVI6ICBjb2RlICs9IDB4MTEwOyBicmVhazsKIAkJY2FzZSBISURfR0RfSk9ZU1RJQ0s6Ci0JCQkJICAgICAgaWYgKGNvZGUgPD0gMHhmKQotCQkJCQkgICAgICBjb2RlICs9IEJUTl9KT1lTVElDSzsKLQkJCQkgICAgICBlbHNlCi0JCQkJCSAgICAgIGNvZGUgKz0gQlROX1RSSUdHRVJfSEFQUFk7Ci0JCQkJICAgICAgYnJlYWs7CisJCQkJaWYgKGNvZGUgPD0gMHhmKQorCQkJCQljb2RlICs9IEJUTl9KT1lTVElDSzsKKwkJCQllbHNlCisJCQkJCWNvZGUgKz0gQlROX1RSSUdHRVJfSEFQUFk7CisJCQkJYnJlYWs7CiAJCWNhc2UgSElEX0dEX0dBTUVQQUQ6ICBjb2RlICs9IDB4MTMwOyBicmVhazsKIAkJZGVmYXVsdDoKIAkJCXN3aXRjaCAoZmllbGQtPnBoeXNpY2FsKSB7CkBAIC0zMDEsNiArMzAxLDkgQEAKIAogCWNhc2UgSElEX1VQX0RJR0lUSVpFUjoKIAkJc3dpdGNoICh1c2FnZS0+aGlkICYgMHhmZikgeworCQljYXNlIDB4MDA6IC8qIFVuZGVmaW5lZCAqLworCQkJZ290byBpZ25vcmU7CisKIAkJY2FzZSAweDMwOiAvKiBUaXBQcmVzc3VyZSAqLwogCQkJaWYgKCF0ZXN0X2JpdChCVE5fVE9VQ0gsIGlucHV0LT5rZXliaXQpKSB7CiAJCQkJZGV2aWNlLT5xdWlya3MgfD0gSElEX1FVSVJLX05PVE9VQ0g7CkBAIC00ODAsNyArNDgzLDcgQEAKIAogCWNhc2UgSElEX1VQX0xPR0lWRU5ET1I6CiAJCWdvdG8gaWdub3JlOwotCQorCiAJY2FzZSBISURfVVBfUElEOgogCQlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0UpIHsKIAkJY2FzZSAweGE0OiBtYXBfa2V5X2NsZWFyKEJUTl9ERUFEKTsJYnJlYWs7CkBAIC01MzQsNiArNTM3LDkgQEAKIAkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCB1c2FnZS0+Y29kZSwgYSwgYiwgKGIgLSBhKSA+PiA4LCAoYiAtIGEpID4+IDQpOwogCQllbHNlCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCB1c2FnZS0+Y29kZSwgYSwgYiwgMCwgMCk7CiAKKwkJLyogdXNlIGEgbGFyZ2VyIGRlZmF1bHQgaW5wdXQgYnVmZmVyIGZvciBNVCBkZXZpY2VzICovCisJCWlmICh1c2FnZS0+Y29kZSA9PSBBQlNfTVRfUE9TSVRJT05fWCAmJiBpbnB1dC0+aGludF9ldmVudHNfcGVyX3BhY2tldCA9PSAwKQorCQkJaW5wdXRfc2V0X2V2ZW50c19wZXJfcGFja2V0KGlucHV0LCA2MCk7CiAJfQogCiAJaWYgKHVzYWdlLT50eXBlID09IEVWX0FCUyAmJgpAQCAtNTg2LDkgKzU5Miw5IEBACiAJCQloYXRfZGlyID0gKHZhbHVlIC0gdXNhZ2UtPmhhdF9taW4pICogOCAvICh1c2FnZS0+aGF0X21heCAtIHVzYWdlLT5oYXRfbWluICsgMSkgKyAxOwogCQlpZiAoaGF0X2RpciA8IDAgfHwgaGF0X2RpciA+IDgpIGhhdF9kaXIgPSAwOwogCQlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIHVzYWdlLT5jb2RlICAgICwgaGlkX2hhdF90b19heGlzW2hhdF9kaXJdLngpOwotICAgICAgICAgICAgICAgIGlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdXNhZ2UtPmNvZGUgKyAxLCBoaWRfaGF0X3RvX2F4aXNbaGF0X2Rpcl0ueSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisJCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdXNhZ2UtPmNvZGUgKyAxLCBoaWRfaGF0X3RvX2F4aXNbaGF0X2Rpcl0ueSk7CisJCXJldHVybjsKKwl9CiAKIAlpZiAodXNhZ2UtPmhpZCA9PSAoSElEX1VQX0RJR0lUSVpFUiB8IDB4MDAzYykpIHsgLyogSW52ZXJ0ICovCiAJCSpxdWlya3MgPSB2YWx1ZSA/ICgqcXVpcmtzIHwgSElEX1FVSVJLX0lOVkVSVCkgOiAoKnF1aXJrcyAmIH5ISURfUVVJUktfSU5WRVJUKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1tYWdpY21vdXNlLmMgYi9kcml2ZXJzL2hpZC9oaWQtbWFnaWNtb3VzZS5jCmluZGV4IGYxMGQ1NmEuLjMxOWIwZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1tYWdpY21vdXNlLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLW1hZ2ljbW91c2UuYwpAQCAtMzAsNiArMzAsMjEgQEAKIG1vZHVsZV9wYXJhbShlbXVsYXRlX3Njcm9sbF93aGVlbCwgYm9vbCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGVtdWxhdGVfc2Nyb2xsX3doZWVsLCAiRW11bGF0ZSBhIHNjcm9sbCB3aGVlbCIpOwogCitzdGF0aWMgdW5zaWduZWQgaW50IHNjcm9sbF9zcGVlZCA9IDMyOworc3RhdGljIGludCBwYXJhbV9zZXRfc2Nyb2xsX3NwZWVkKGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApIHsKKwl1bnNpZ25lZCBsb25nIHNwZWVkOworCWlmICghdmFsIHx8IHN0cmljdF9zdHJ0b3VsKHZhbCwgMCwgJnNwZWVkKSB8fCBzcGVlZCA+IDYzKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzY3JvbGxfc3BlZWQgPSBzcGVlZDsKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9wYXJhbV9jYWxsKHNjcm9sbF9zcGVlZCwgcGFyYW1fc2V0X3Njcm9sbF9zcGVlZCwgcGFyYW1fZ2V0X3VpbnQsICZzY3JvbGxfc3BlZWQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhzY3JvbGxfc3BlZWQsICJTY3JvbGwgc3BlZWQsIHZhbHVlIGZyb20gMCAoc2xvdykgdG8gNjMgKGZhc3QpIik7CisKK3N0YXRpYyBib29sIHNjcm9sbF9hY2NlbGVyYXRpb24gPSBmYWxzZTsKK21vZHVsZV9wYXJhbShzY3JvbGxfYWNjZWxlcmF0aW9uLCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc2Nyb2xsX2FjY2VsZXJhdGlvbiwgIkFjY2VsZXJhdGUgc2VxdWVudGlhbCBzY3JvbGwgZXZlbnRzIik7CisKIHN0YXRpYyBib29sIHJlcG9ydF90b3VjaGVzID0gdHJ1ZTsKIG1vZHVsZV9wYXJhbShyZXBvcnRfdG91Y2hlcywgYm9vbCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHJlcG9ydF90b3VjaGVzLCAiRW1pdCB0b3VjaCByZWNvcmRzIChvdGhlcndpc2UsIG9ubHkgdXNlIHRoZW0gZm9yIGVtdWxhdGlvbikiKTsKQEAgLTUwLDYgKzY1LDggQEAKICNkZWZpbmUgVE9VQ0hfU1RBVEVfU1RBUlQgMHgzMAogI2RlZmluZSBUT1VDSF9TVEFURV9EUkFHICAweDQwCiAKKyNkZWZpbmUgU0NST0xMX0FDQ0VMX0RFRkFVTFQgNworCiAvKioKICAqIHN0cnVjdCBtYWdpY21vdXNlX3NjIC0gVHJhY2tzIE1hZ2ljIE1vdXNlLXNwZWNpZmljIGRhdGEuCiAgKiBAaW5wdXQ6IElucHV0IGRldmljZSB0aHJvdWdoIHdoaWNoIHdlIHJlcG9ydCBldmVudHMuCkBAIC03OCw4ICs5NSwxMCBAQAogCXN0cnVjdCB7CiAJCXNob3J0IHg7CiAJCXNob3J0IHk7CisJCXNob3J0IHNjcm9sbF94OwogCQlzaG9ydCBzY3JvbGxfeTsKIAkJdTggc2l6ZTsKKwkJdTggZG93bjsKIAl9IHRvdWNoZXNbMTZdOwogCWludCB0cmFja2luZ19pZHNbMTZdOwogfTsKQEAgLTE0MSw3ICsxNjAsNyBAQAogCWlucHV0X3JlcG9ydF9rZXkobXNjLT5pbnB1dCwgQlROX1JJR0hULCBzdGF0ZSAmIDIpOwogCiAJaWYgKHN0YXRlICE9IGxhc3Rfc3RhdGUpCi0JCW1zYy0+c2Nyb2xsX2FjY2VsID0gMDsKKwkJbXNjLT5zY3JvbGxfYWNjZWwgPSBTQ1JPTExfQUNDRUxfREVGQVVMVDsKIH0KIAogc3RhdGljIHZvaWQgbWFnaWNtb3VzZV9lbWl0X3RvdWNoKHN0cnVjdCBtYWdpY21vdXNlX3NjICptc2MsIGludCByYXdfaWQsIHU4ICp0ZGF0YSkKQEAgLTE1Miw2ICsxNzEsNyBAQAogCWludCBpZCA9IChtaXNjID4+IDYpICYgMTU7CiAJaW50IHggPSB4X3kgPDwgMTIgPj4gMjA7CiAJaW50IHkgPSAtKHhfeSA+PiAyMCk7CisJaW50IGRvd24gPSAodGRhdGFbN10gJiBUT1VDSF9TVEFURV9NQVNLKSAhPSBUT1VDSF9TVEFURV9OT05FOwogCiAJLyogU3RvcmUgdHJhY2tpbmcgSUQgYW5kIG90aGVyIGZpZWxkcy4gKi8KIAltc2MtPnRyYWNraW5nX2lkc1tyYXdfaWRdID0gaWQ7CkBAIC0xNjAsNDIgKzE4MCw1NCBAQAogCW1zYy0+dG91Y2hlc1tpZF0uc2l6ZSA9IG1pc2MgJiA2MzsKIAogCS8qIElmIHJlcXVlc3RlZCwgZW11bGF0ZSBhIHNjcm9sbCB3aGVlbCBieSBkZXRlY3Rpbmcgc21hbGwKLQkgKiB2ZXJ0aWNhbCB0b3VjaCBtb3Rpb25zIGFsb25nIHRoZSBtaWRkbGUgb2YgdGhlIG1vdXNlLgorCSAqIHZlcnRpY2FsIHRvdWNoIG1vdGlvbnMuCiAJICovCi0JaWYgKGVtdWxhdGVfc2Nyb2xsX3doZWVsICYmCi0JICAgIG1pZGRsZV9idXR0b25fc3RhcnQgPCB4ICYmIHggPCBtaWRkbGVfYnV0dG9uX3N0b3ApIHsKLQkJc3RhdGljIGNvbnN0IGludCBhY2NlbF9wcm9maWxlW10gPSB7Ci0JCQkyNTYsIDIyOCwgMTkyLCAxNjAsIDEyOCwgOTYsIDY0LCAzMiwKLQkJfTsKKwlpZiAoZW11bGF0ZV9zY3JvbGxfd2hlZWwpIHsKIAkJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOwotCQlpbnQgc3RlcCA9IG1zYy0+dG91Y2hlc1tpZF0uc2Nyb2xsX3kgLSB5OwotCi0JCS8qIFJlc2V0IGFjY2VsZXJhdGlvbiBhZnRlciBoYWxmIGEgc2Vjb25kLiAqLwotCQlpZiAodGltZV9hZnRlcihub3csIG1zYy0+c2Nyb2xsX2ppZmZpZXMgKyBIWiAvIDIpKQotCQkJbXNjLT5zY3JvbGxfYWNjZWwgPSAwOworCQlpbnQgc3RlcF94ID0gbXNjLT50b3VjaGVzW2lkXS5zY3JvbGxfeCAtIHg7CisJCWludCBzdGVwX3kgPSBtc2MtPnRvdWNoZXNbaWRdLnNjcm9sbF95IC0geTsKIAogCQkvKiBDYWxjdWxhdGUgYW5kIGFwcGx5IHRoZSBzY3JvbGwgbW90aW9uLiAqLwogCQlzd2l0Y2ggKHRkYXRhWzddICYgVE9VQ0hfU1RBVEVfTUFTSykgewogCQljYXNlIFRPVUNIX1NUQVRFX1NUQVJUOgorCQkJbXNjLT50b3VjaGVzW2lkXS5zY3JvbGxfeCA9IHg7CiAJCQltc2MtPnRvdWNoZXNbaWRdLnNjcm9sbF95ID0geTsKLQkJCW1zYy0+c2Nyb2xsX2FjY2VsID0gbWluX3QoaW50LCBtc2MtPnNjcm9sbF9hY2NlbCArIDEsCi0JCQkJCQlBUlJBWV9TSVpFKGFjY2VsX3Byb2ZpbGUpIC0gMSk7CisKKwkJCS8qIFJlc2V0IGFjY2VsZXJhdGlvbiBhZnRlciBoYWxmIGEgc2Vjb25kLiAqLworCQkJaWYgKHNjcm9sbF9hY2NlbGVyYXRpb24gJiYgdGltZV9iZWZvcmUobm93LAorCQkJCQkJbXNjLT5zY3JvbGxfamlmZmllcyArIEhaIC8gMikpCisJCQkJbXNjLT5zY3JvbGxfYWNjZWwgPSBtYXhfdChpbnQsCisJCQkJCQltc2MtPnNjcm9sbF9hY2NlbCAtIDEsIDEpOworCQkJZWxzZQorCQkJCW1zYy0+c2Nyb2xsX2FjY2VsID0gU0NST0xMX0FDQ0VMX0RFRkFVTFQ7CisKIAkJCWJyZWFrOwogCQljYXNlIFRPVUNIX1NUQVRFX0RSQUc6Ci0JCQlzdGVwID0gc3RlcCAvIGFjY2VsX3Byb2ZpbGVbbXNjLT5zY3JvbGxfYWNjZWxdOwotCQkJaWYgKHN0ZXAgIT0gMCkgewotCQkJCW1zYy0+dG91Y2hlc1tpZF0uc2Nyb2xsX3kgPSB5OworCQkJc3RlcF94IC89ICg2NCAtIChpbnQpc2Nyb2xsX3NwZWVkKSAqIG1zYy0+c2Nyb2xsX2FjY2VsOworCQkJaWYgKHN0ZXBfeCAhPSAwKSB7CisJCQkJbXNjLT50b3VjaGVzW2lkXS5zY3JvbGxfeCAtPSBzdGVwX3ggKgorCQkJCQkoNjQgLSBzY3JvbGxfc3BlZWQpICogbXNjLT5zY3JvbGxfYWNjZWw7CiAJCQkJbXNjLT5zY3JvbGxfamlmZmllcyA9IG5vdzsKLQkJCQlpbnB1dF9yZXBvcnRfcmVsKGlucHV0LCBSRUxfV0hFRUwsIHN0ZXApOworCQkJCWlucHV0X3JlcG9ydF9yZWwoaW5wdXQsIFJFTF9IV0hFRUwsIC1zdGVwX3gpOworCQkJfQorCisJCQlzdGVwX3kgLz0gKDY0IC0gKGludClzY3JvbGxfc3BlZWQpICogbXNjLT5zY3JvbGxfYWNjZWw7CisJCQlpZiAoc3RlcF95ICE9IDApIHsKKwkJCQltc2MtPnRvdWNoZXNbaWRdLnNjcm9sbF95IC09IHN0ZXBfeSAqCisJCQkJCSg2NCAtIHNjcm9sbF9zcGVlZCkgKiBtc2MtPnNjcm9sbF9hY2NlbDsKKwkJCQltc2MtPnNjcm9sbF9qaWZmaWVzID0gbm93OworCQkJCWlucHV0X3JlcG9ydF9yZWwoaW5wdXQsIFJFTF9XSEVFTCwgc3RlcF95KTsKIAkJCX0KIAkJCWJyZWFrOwogCQl9CiAJfQogCiAJLyogR2VuZXJhdGUgdGhlIGlucHV0IGV2ZW50cyBmb3IgdGhpcyB0b3VjaC4gKi8KLQlpZiAocmVwb3J0X3RvdWNoZXMpIHsKKwlpZiAocmVwb3J0X3RvdWNoZXMgJiYgZG93bikgewogCQlpbnQgb3JpZW50YXRpb24gPSAobWlzYyA+PiAxMCkgLSAzMjsKIAorCQltc2MtPnRvdWNoZXNbaWRdLmRvd24gPSAxOworCiAJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19NVF9UUkFDS0lOR19JRCwgaWQpOwogCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTVRfVE9VQ0hfTUFKT1IsIHRkYXRhWzNdKTsKIAkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX01UX1RPVUNIX01JTk9SLCB0ZGF0YVs0XSk7CkBAIC0yMTUsNyArMjQ3LDcgQEAKIHsKIAlzdHJ1Y3QgbWFnaWNtb3VzZV9zYyAqbXNjID0gaGlkX2dldF9kcnZkYXRhKGhkZXYpOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gbXNjLT5pbnB1dDsKLQlpbnQgeCwgeSwgdHMsIGlpLCBjbGlja3M7CisJaW50IHgsIHksIHRzLCBpaSwgY2xpY2tzLCBsYXN0X3VwOwogCiAJc3dpdGNoIChkYXRhWzBdKSB7CiAJY2FzZSAweDEwOgpAQCAtMjM1LDEyICsyNjcsMjYgQEAKIAkJbXNjLT5udG91Y2hlcyA9IChzaXplIC0gNikgLyA4OwogCQlmb3IgKGlpID0gMDsgaWkgPCBtc2MtPm50b3VjaGVzOyBpaSsrKQogCQkJbWFnaWNtb3VzZV9lbWl0X3RvdWNoKG1zYywgaWksIGRhdGEgKyBpaSAqIDggKyA2KTsKKworCQlpZiAocmVwb3J0X3RvdWNoZXMpIHsKKwkJCWxhc3RfdXAgPSAxOworCQkJZm9yIChpaSA9IDA7IGlpIDwgQVJSQVlfU0laRShtc2MtPnRvdWNoZXMpOyBpaSsrKSB7CisJCQkJaWYgKG1zYy0+dG91Y2hlc1tpaV0uZG93bikgeworCQkJCQlsYXN0X3VwID0gMDsKKwkJCQkJbXNjLT50b3VjaGVzW2lpXS5kb3duID0gMDsKKwkJCQl9CisJCQl9CisJCQlpZiAobGFzdF91cCkgeworCQkJCWlucHV0X210X3N5bmMoaW5wdXQpOworCQkJfQorCQl9CisKIAkJLyogV2hlbiBlbXVsYXRpbmcgdGhyZWUtYnV0dG9uIG1vZGUsIGl0IGlzIGltcG9ydGFudAogCQkgKiB0byBoYXZlIHRoZSBjdXJyZW50IHRvdWNoIGluZm9ybWF0aW9uIGJlZm9yZQogCQkgKiBnZW5lcmF0aW5nIGEgY2xpY2sgZXZlbnQuCiAJCSAqLwotCQl4ID0gKHNpZ25lZCBjaGFyKWRhdGFbMV07Ci0JCXkgPSAoc2lnbmVkIGNoYXIpZGF0YVsyXTsKKwkJeCA9IChpbnQpKCgoZGF0YVszXSAmIDB4MGMpIDw8IDI4KSB8IChkYXRhWzFdIDw8IDIyKSkgPj4gMjI7CisJCXkgPSAoaW50KSgoKGRhdGFbM10gJiAweDMwKSA8PCAyNikgfCAoZGF0YVsyXSA8PCAyMikpID4+IDIyOwogCQljbGlja3MgPSBkYXRhWzNdOwogCQlicmVhazsKIAljYXNlIDB4MjA6IC8qIFRoZW9yZXRpY2FsbHkgYmF0dGVyeSBzdGF0dXMgKDAtMTAwKSwgYnV0IEkgaGF2ZQpAQCAtMzAxLDggKzM0NywxMCBAQAogCV9fc2V0X2JpdChFVl9SRUwsIGlucHV0LT5ldmJpdCk7CiAJX19zZXRfYml0KFJFTF9YLCBpbnB1dC0+cmVsYml0KTsKIAlfX3NldF9iaXQoUkVMX1ksIGlucHV0LT5yZWxiaXQpOwotCWlmIChlbXVsYXRlX3Njcm9sbF93aGVlbCkKKwlpZiAoZW11bGF0ZV9zY3JvbGxfd2hlZWwpIHsKIAkJX19zZXRfYml0KFJFTF9XSEVFTCwgaW5wdXQtPnJlbGJpdCk7CisJCV9fc2V0X2JpdChSRUxfSFdIRUVMLCBpbnB1dC0+cmVsYml0KTsKKwl9CiAKIAlpZiAocmVwb3J0X3RvdWNoZXMpIHsKIAkJX19zZXRfYml0KEVWX0FCUywgaW5wdXQtPmV2Yml0KTsKQEAgLTM0NSw2ICszOTMsOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwltc2MtPnNjcm9sbF9hY2NlbCA9IFNDUk9MTF9BQ0NFTF9ERUZBVUxUOworCiAJbXNjLT5xdWlya3MgPSBpZC0+ZHJpdmVyX2RhdGE7CiAJaGlkX3NldF9kcnZkYXRhKGhkZXYsIG1zYyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1udHJpZy5jIGIvZHJpdmVycy9oaWQvaGlkLW50cmlnLmMKaW5kZXggYjZiMGNhZS4uZmI2OWI4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLW50cmlnLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLW50cmlnLmMKQEAgLTg2OCw2ICs4NjgsNDIgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBudHJpZ19kZXZpY2VzW10gPSB7CiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX05UUklHLCBVU0JfREVWSUNFX0lEX05UUklHX1RPVUNIX1NDUkVFTiksCiAJCS5kcml2ZXJfZGF0YSA9IE5UUklHX0RVUExJQ0FURV9VU0FHRVMgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTlRSSUcsIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOXzEpLAorCQkuZHJpdmVyX2RhdGEgPSBOVFJJR19EVVBMSUNBVEVfVVNBR0VTIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX05UUklHLCBVU0JfREVWSUNFX0lEX05UUklHX1RPVUNIX1NDUkVFTl8yKSwKKwkJLmRyaXZlcl9kYXRhID0gTlRSSUdfRFVQTElDQVRFX1VTQUdFUyB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9OVFJJRywgVVNCX0RFVklDRV9JRF9OVFJJR19UT1VDSF9TQ1JFRU5fMyksCisJCS5kcml2ZXJfZGF0YSA9IE5UUklHX0RVUExJQ0FURV9VU0FHRVMgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTlRSSUcsIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOXzQpLAorCQkuZHJpdmVyX2RhdGEgPSBOVFJJR19EVVBMSUNBVEVfVVNBR0VTIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX05UUklHLCBVU0JfREVWSUNFX0lEX05UUklHX1RPVUNIX1NDUkVFTl81KSwKKwkJLmRyaXZlcl9kYXRhID0gTlRSSUdfRFVQTElDQVRFX1VTQUdFUyB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9OVFJJRywgVVNCX0RFVklDRV9JRF9OVFJJR19UT1VDSF9TQ1JFRU5fNiksCisJCS5kcml2ZXJfZGF0YSA9IE5UUklHX0RVUExJQ0FURV9VU0FHRVMgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTlRSSUcsIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOXzcpLAorCQkuZHJpdmVyX2RhdGEgPSBOVFJJR19EVVBMSUNBVEVfVVNBR0VTIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX05UUklHLCBVU0JfREVWSUNFX0lEX05UUklHX1RPVUNIX1NDUkVFTl84KSwKKwkJLmRyaXZlcl9kYXRhID0gTlRSSUdfRFVQTElDQVRFX1VTQUdFUyB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9OVFJJRywgVVNCX0RFVklDRV9JRF9OVFJJR19UT1VDSF9TQ1JFRU5fOSksCisJCS5kcml2ZXJfZGF0YSA9IE5UUklHX0RVUExJQ0FURV9VU0FHRVMgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTlRSSUcsIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOXzEwKSwKKwkJLmRyaXZlcl9kYXRhID0gTlRSSUdfRFVQTElDQVRFX1VTQUdFUyB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9OVFJJRywgVVNCX0RFVklDRV9JRF9OVFJJR19UT1VDSF9TQ1JFRU5fMTEpLAorCQkuZHJpdmVyX2RhdGEgPSBOVFJJR19EVVBMSUNBVEVfVVNBR0VTIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX05UUklHLCBVU0JfREVWSUNFX0lEX05UUklHX1RPVUNIX1NDUkVFTl8xMiksCisJCS5kcml2ZXJfZGF0YSA9IE5UUklHX0RVUExJQ0FURV9VU0FHRVMgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTlRSSUcsIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOXzEzKSwKKwkJLmRyaXZlcl9kYXRhID0gTlRSSUdfRFVQTElDQVRFX1VTQUdFUyB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9OVFJJRywgVVNCX0RFVklDRV9JRF9OVFJJR19UT1VDSF9TQ1JFRU5fMTQpLAorCQkuZHJpdmVyX2RhdGEgPSBOVFJJR19EVVBMSUNBVEVfVVNBR0VTIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX05UUklHLCBVU0JfREVWSUNFX0lEX05UUklHX1RPVUNIX1NDUkVFTl8xNSksCisJCS5kcml2ZXJfZGF0YSA9IE5UUklHX0RVUExJQ0FURV9VU0FHRVMgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTlRSSUcsIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOXzE2KSwKKwkJLmRyaXZlcl9kYXRhID0gTlRSSUdfRFVQTElDQVRFX1VTQUdFUyB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9OVFJJRywgVVNCX0RFVklDRV9JRF9OVFJJR19UT1VDSF9TQ1JFRU5fMTcpLAorCQkuZHJpdmVyX2RhdGEgPSBOVFJJR19EVVBMSUNBVEVfVVNBR0VTIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX05UUklHLCBVU0JfREVWSUNFX0lEX05UUklHX1RPVUNIX1NDUkVFTl8xOCksCisJCS5kcml2ZXJfZGF0YSA9IE5UUklHX0RVUExJQ0FURV9VU0FHRVMgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgbnRyaWdfZGV2aWNlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtcGljb2xjZC5jIGIvZHJpdmVycy9oaWQvaGlkLXBpY29sY2QuYwppbmRleCA3YWFiZjY1Li4zNDZmMGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtcGljb2xjZC5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1waWNvbGNkLmMKQEAgLTEyNyw2ICsxMjcsMjYgQEAKIAkuaGVpZ2h0ICAgICAgICAgPSAyNiwKIAkuYml0c19wZXJfcGl4ZWwgPSAxLAogCS5ncmF5c2NhbGUgICAgICA9IDEsCisJLnJlZCAgICAgICAgICAgID0geworCQkub2Zmc2V0ID0gMCwKKwkJLmxlbmd0aCA9IDEsCisJCS5tc2JfcmlnaHQgPSAwLAorCX0sCisJLmdyZWVuICAgICAgICAgID0geworCQkub2Zmc2V0ID0gMCwKKwkJLmxlbmd0aCA9IDEsCisJCS5tc2JfcmlnaHQgPSAwLAorCX0sCisJLmJsdWUgICAgICAgICAgID0geworCQkub2Zmc2V0ID0gMCwKKwkJLmxlbmd0aCA9IDEsCisJCS5tc2JfcmlnaHQgPSAwLAorCX0sCisJLnRyYW5zcCAgICAgICAgID0geworCQkub2Zmc2V0ID0gMCwKKwkJLmxlbmd0aCA9IDAsCisJCS5tc2JfcmlnaHQgPSAwLAorCX0sCiB9OwogI2VuZGlmIC8qIENPTkZJR19ISURfUElDT0xDRF9GQiAqLwogCkBAIC0xODgsNiArMjA4LDcgQEAKIAkvKiBGcmFtZWJ1ZmZlciBzdHVmZiAqLwogCXU4IGZiX3VwZGF0ZV9yYXRlOwogCXU4IGZiX2JwcDsKKwl1OCBmYl9mb3JjZTsKIAl1OCAqZmJfdmJpdG1hcDsJCS8qIGxvY2FsIGNvcHkgb2Ygd2hhdCB3YXMgc2VudCB0byBQaWNvTENEICovCiAJdTggKmZiX2JpdG1hcDsJCS8qIGZyYW1lYnVmZmVyICovCiAJc3RydWN0IGZiX2luZm8gKmZiX2luZm87CkBAIC0zNDYsNyArMzY3LDcgQEAKIAkJCWNvbnN0IHU4ICpiZGF0YSA9IGJpdG1hcCArIHRpbGUgKiAyNTYgKyBjaGlwICogOCArIGIgKiAzMjsKIAkJCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7CiAJCQkJdGRhdGFbaV0gPDw9IDE7Ci0JCQkJdGRhdGFbaV0gfD0gKGJkYXRhW2kvOF0gPj4gKDcgLSBpICUgOCkpICYgMHgwMTsKKwkJCQl0ZGF0YVtpXSB8PSAoYmRhdGFbaS84XSA+PiAoaSAlIDgpKSAmIDB4MDE7CiAJCQl9CiAJCX0KIAl9IGVsc2UgaWYgKGJwcCA9PSA4KSB7CkBAIC0zOTksMTMgKzQyMCwxMCBAQAogCiAJaWYgKGRhdGEtPmZiX2JpdG1hcCkgewogCQlpZiAoY2xlYXIpIHsKLQkJCW1lbXNldChkYXRhLT5mYl92Yml0bWFwLCAweGZmLCBQSUNPTENERkJfU0laRSk7CisJCQltZW1zZXQoZGF0YS0+ZmJfdmJpdG1hcCwgMCwgUElDT0xDREZCX1NJWkUpOwogCQkJbWVtc2V0KGRhdGEtPmZiX2JpdG1hcCwgMCwgUElDT0xDREZCX1NJWkUqZGF0YS0+ZmJfYnBwKTsKLQkJfSBlbHNlIHsKLQkJCS8qIGludmVydCAxIGJ5dGUgaW4gZWFjaCB0aWxlIHRvIGZvcmNlIHJlc2VuZCAqLwotCQkJZm9yIChpID0gMDsgaSA8IFBJQ09MQ0RGQl9TSVpFOyBpICs9IDY0KQotCQkJCWRhdGEtPmZiX3ZiaXRtYXBbaV0gPSB+ZGF0YS0+ZmJfdmJpdG1hcFtpXTsKIAkJfQorCQlkYXRhLT5mYl9mb3JjZSA9IDE7CiAJfQogCiAJLyogc2NoZWR1bGUgZmlyc3Qgb3V0cHV0IG9mIGZyYW1lYnVmZmVyICovCkBAIC00MjEsNiArNDM5LDkgQEAKIAlpbnQgY2hpcCwgdGlsZSwgbjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWYgKCFkYXRhKQorCQlyZXR1cm47CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGF0YS0+bG9jaywgZmxhZ3MpOwogCWlmICghKGRhdGEtPnN0YXR1cyAmIFBJQ09MQ0RfUkVBRFlfRkIpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRhdGEtPmxvY2ssIGZsYWdzKTsKQEAgLTQ0MCwxNCArNDYxLDE4IEBACiAJZm9yIChjaGlwID0gMDsgY2hpcCA8IDQ7IGNoaXArKykKIAkJZm9yICh0aWxlID0gMDsgdGlsZSA8IDg7IHRpbGUrKykKIAkJCWlmIChwaWNvbGNkX2ZiX3VwZGF0ZV90aWxlKGRhdGEtPmZiX3ZiaXRtYXAsCi0JCQkJCWRhdGEtPmZiX2JpdG1hcCwgZGF0YS0+ZmJfYnBwLCBjaGlwLCB0aWxlKSkgeworCQkJCQlkYXRhLT5mYl9iaXRtYXAsIGRhdGEtPmZiX2JwcCwgY2hpcCwgdGlsZSkgfHwKKwkJCQlkYXRhLT5mYl9mb3JjZSkgewogCQkJCW4gKz0gMjsKKwkJCQlpZiAoIWRhdGEtPmZiX2luZm8tPnBhcikKKwkJCQkJcmV0dXJuOyAvKiBkZXZpY2UgbG9zdCEgKi8KIAkJCQlpZiAobiA+PSBISURfT1VUUFVUX0ZJRk9fU0laRSAvIDIpIHsKIAkJCQkJdXNiaGlkX3dhaXRfaW8oZGF0YS0+aGRldik7CiAJCQkJCW4gPSAwOwogCQkJCX0KIAkJCQlwaWNvbGNkX2ZiX3NlbmRfdGlsZShkYXRhLT5oZGV2LCBjaGlwLCB0aWxlKTsKIAkJCX0KKwlkYXRhLT5mYl9mb3JjZSA9IGZhbHNlOwogCWlmIChuKQogCQl1c2JoaWRfd2FpdF9pbyhkYXRhLT5oZGV2KTsKIH0KQEAgLTUxMSwxMSArNTM2LDIzIEBACiBzdGF0aWMgdm9pZCBwaWNvbGNkX2ZiX2Rlc3Ryb3koc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IHBpY29sY2RfZGF0YSAqZGF0YSA9IGluZm8tPnBhcjsKKwl1MzIgKnJlZl9jbnQgPSBpbmZvLT5wc2V1ZG9fcGFsZXR0ZTsKKwlpbnQgbWF5X3JlbGVhc2U7CisKIAlpbmZvLT5wYXIgPSBOVUxMOwogCWlmIChkYXRhKQogCQlkYXRhLT5mYl9pbmZvID0gTlVMTDsKIAlmYl9kZWZlcnJlZF9pb19jbGVhbnVwKGluZm8pOwotCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CisKKwlyZWZfY250LS07CisJbXV0ZXhfbG9jaygmaW5mby0+bG9jayk7CisJKCpyZWZfY250KS0tOworCW1heV9yZWxlYXNlID0gIXJlZl9jbnQ7CisJbXV0ZXhfdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwlpZiAobWF5X3JlbGVhc2UpIHsKKwkJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKKwkJdmZyZWUoKHU4ICopaW5mby0+Zml4LnNtZW1fc3RhcnQpOworCX0KIH0KIAogc3RhdGljIGludCBwaWNvbGNkX2ZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgc3RydWN0IGZiX2luZm8gKmluZm8pCkBAIC01MjYsMjkgKzU2MywzNyBAQAogCS8qIG9ubHkgYWxsb3cgMS84IGJpdCBkZXB0aCAoOC1iaXQgaXMgZ3JheXNjYWxlKSAqLwogCSp2YXIgPSBwaWNvbGNkZmJfdmFyOwogCXZhci0+YWN0aXZhdGUgPSBhY3RpdmF0ZTsKLQlpZiAoYnBwID49IDgpCisJaWYgKGJwcCA+PSA4KSB7CiAJCXZhci0+Yml0c19wZXJfcGl4ZWwgPSA4OwotCWVsc2UKKwkJdmFyLT5yZWQubGVuZ3RoICAgICA9IDg7CisJCXZhci0+Z3JlZW4ubGVuZ3RoICAgPSA4OworCQl2YXItPmJsdWUubGVuZ3RoICAgID0gODsKKwl9IGVsc2UgewogCQl2YXItPmJpdHNfcGVyX3BpeGVsID0gMTsKKwkJdmFyLT5yZWQubGVuZ3RoICAgICA9IDE7CisJCXZhci0+Z3JlZW4ubGVuZ3RoICAgPSAxOworCQl2YXItPmJsdWUubGVuZ3RoICAgID0gMTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcGljb2xjZF9zZXRfcGFyKHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCXN0cnVjdCBwaWNvbGNkX2RhdGEgKmRhdGEgPSBpbmZvLT5wYXI7Ci0JdTggKm9fZmIsICpuX2ZiOworCXU4ICp0bXBfZmIsICpvX2ZiOworCWlmICghZGF0YSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9PSBkYXRhLT5mYl9icHApCiAJCXJldHVybiAwOwogCS8qIHN3aXRjaCBiZXR3ZWVuIDEvOCBiaXQgZGVwdGhzICovCiAJaWYgKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCAhPSAxICYmIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCAhPSA4KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW9fZmIgPSBkYXRhLT5mYl9iaXRtYXA7Ci0Jbl9mYiA9IHZtYWxsb2MoUElDT0xDREZCX1NJWkUqaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKTsKLQlpZiAoIW5fZmIpCisJb19mYiAgID0gZGF0YS0+ZmJfYml0bWFwOworCXRtcF9mYiA9IGttYWxsb2MoUElDT0xDREZCX1NJWkUqaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRtcF9mYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlmYl9kZWZlcnJlZF9pb19jbGVhbnVwKGluZm8pOwogCS8qIHRyYW5zbGF0ZSBGQiBjb250ZW50IHRvIG5ldyBiaXRzLXBlci1waXhlbCAqLwogCWlmIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPT0gMSkgewogCQlpbnQgaSwgYjsKQEAgLTU1OCwyNCArNjAzLDg3IEBACiAJCQkJcCA8PD0gMTsKIAkJCQlwIHw9IG9fZmJbaSo4K2JdID8gMHgwMSA6IDB4MDA7CiAJCQl9CisJCQl0bXBfZmJbaV0gPSBwOwogCQl9CisJCW1lbWNweShvX2ZiLCB0bXBfZmIsIFBJQ09MQ0RGQl9TSVpFKTsKIAkJaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9NT05PMDE7CiAJCWluZm8tPmZpeC5saW5lX2xlbmd0aCA9IFBJQ09MQ0RGQl9XSURUSCAvIDg7CiAJfSBlbHNlIHsKIAkJaW50IGk7CisJCW1lbWNweSh0bXBfZmIsIG9fZmIsIFBJQ09MQ0RGQl9TSVpFKTsKIAkJZm9yIChpID0gMDsgaSA8IFBJQ09MQ0RGQl9TSVpFICogODsgaSsrKQotCQkJbl9mYltpXSA9IG9fZmJbaS84XSAmICgweDAxIDw8ICg3IC0gaSAlIDgpKSA/IDB4ZmYgOiAweDAwOwotCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKKwkJCW9fZmJbaV0gPSB0bXBfZmJbaS84XSAmICgweDAxIDw8ICg3IC0gaSAlIDgpKSA/IDB4ZmYgOiAweDAwOworCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX0RJUkVDVENPTE9SOwogCQlpbmZvLT5maXgubGluZV9sZW5ndGggPSBQSUNPTENERkJfV0lEVEg7CiAJfQogCi0JZGF0YS0+ZmJfYml0bWFwICAgPSBuX2ZiOworCWtmcmVlKHRtcF9mYik7CiAJZGF0YS0+ZmJfYnBwICAgICAgPSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWw7Ci0JaW5mby0+c2NyZWVuX2Jhc2UgPSAoY2hhciBfX2ZvcmNlIF9faW9tZW0gKiluX2ZiOwotCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpbl9mYjsKLQlpbmZvLT5maXguc21lbV9sZW4gICA9IFBJQ09MQ0RGQl9TSVpFKmRhdGEtPmZiX2JwcDsKLQlmYl9kZWZlcnJlZF9pb19pbml0KGluZm8pOwotCXZmcmVlKG9fZmIpOworCXJldHVybiAwOworfQorCisvKiBEbyByZWZjb3VudGluZyBvbiBvdXIgRkIgYW5kIGNsZWFudXAgcGVyIHdvcmtlciBpZiBGQiBpcworICogY2xvc2VkIGFmdGVyIHVucGx1ZyBvZiBvdXIgZGV2aWNlCisgKiAoZmJfcmVsZWFzZSBob2xkcyBpbmZvLT5sb2NrIGFuZCBzdGlsbCB0b3VjaGVzIGluZm8gYWZ0ZXIKKyAqICB3ZSByZXR1cm4gc28gd2UgY2FuJ3QgcmVsZWFzZSBpdCBpbW1lZGlhdGVseS4KKyAqLworc3RydWN0IHBpY29sY2RfZmJfY2xlYW51cF9pdGVtIHsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgcGljb2xjZF9mYl9jbGVhbnVwX2l0ZW0gKm5leHQ7Cit9Oworc3RhdGljIHN0cnVjdCBwaWNvbGNkX2ZiX2NsZWFudXBfaXRlbSAqZmJfcGVuZGluZzsKK0RFRklORV9TUElOTE9DSyhmYl9wZW5kaW5nX2xvY2spOworCitzdGF0aWMgdm9pZCBwaWNvbGNkX2ZiX2RvX2NsZWFudXAoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQoreworCXN0cnVjdCBwaWNvbGNkX2ZiX2NsZWFudXBfaXRlbSAqaXRlbTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZG8geworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZmJfcGVuZGluZ19sb2NrLCBmbGFncyk7CisJCWl0ZW0gPSBmYl9wZW5kaW5nOworCQlmYl9wZW5kaW5nID0gaXRlbSA/IGl0ZW0tPm5leHQgOiBOVUxMOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmYl9wZW5kaW5nX2xvY2ssIGZsYWdzKTsKKworCQlpZiAoaXRlbSkgeworCQkJdTggKmZiID0gKHU4ICopaXRlbS0+aW5mby0+Zml4LnNtZW1fc3RhcnQ7CisJCQkvKiBtYWtlIHN1cmUgd2UgZG8gbm90IHJhY2UgYWdhaW5zdCBmYiBjb3JlIHdoZW4KKwkJCSAqIHJlbGVhc2luZyAqLworCQkJbXV0ZXhfbG9jaygmaXRlbS0+aW5mby0+bG9jayk7CisJCQltdXRleF91bmxvY2soJml0ZW0tPmluZm8tPmxvY2spOworCQkJZnJhbWVidWZmZXJfcmVsZWFzZShpdGVtLT5pbmZvKTsKKwkJCXZmcmVlKGZiKTsKKwkJfQorCX0gd2hpbGUgKGl0ZW0pOworfQorCitERUNMQVJFX1dPUksocGljb2xjZF9mYl9jbGVhbnVwLCBwaWNvbGNkX2ZiX2RvX2NsZWFudXApOworCitzdGF0aWMgaW50IHBpY29sY2RfZmJfb3BlbihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHUpCit7CisJdTMyICpyZWZfY250ID0gaW5mby0+cHNldWRvX3BhbGV0dGU7CisJcmVmX2NudC0tOworCisJKCpyZWZfY250KSsrOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBpY29sY2RfZmJfcmVsZWFzZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHUpCit7CisJdTMyICpyZWZfY250ID0gaW5mby0+cHNldWRvX3BhbGV0dGU7CisJcmVmX2NudC0tOworCisJKCpyZWZfY250KSsrOworCWlmICghKnJlZl9jbnQpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJc3RydWN0IHBpY29sY2RfZmJfY2xlYW51cF9pdGVtICppdGVtID0gKHN0cnVjdCBwaWNvbGNkX2ZiX2NsZWFudXBfaXRlbSAqKXJlZl9jbnQ7CisJCWl0ZW0tLTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmZiX3BlbmRpbmdfbG9jaywgZmxhZ3MpOworCQlpdGVtLT5uZXh0ID0gZmJfcGVuZGluZzsKKwkJZmJfcGVuZGluZyA9IGl0ZW07CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZiX3BlbmRpbmdfbG9jaywgZmxhZ3MpOworCQlzY2hlZHVsZV93b3JrKCZwaWNvbGNkX2ZiX2NsZWFudXApOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNTgzLDYgKzY5MSw4IEBACiBzdGF0aWMgc3RydWN0IGZiX29wcyBwaWNvbGNkZmJfb3BzID0gewogCS5vd25lciAgICAgICAgPSBUSElTX01PRFVMRSwKIAkuZmJfZGVzdHJveSAgID0gcGljb2xjZF9mYl9kZXN0cm95LAorCS5mYl9vcGVuICAgICAgPSBwaWNvbGNkX2ZiX29wZW4sCisJLmZiX3JlbGVhc2UgICA9IHBpY29sY2RfZmJfcmVsZWFzZSwKIAkuZmJfcmVhZCAgICAgID0gZmJfc3lzX3JlYWQsCiAJLmZiX3dyaXRlICAgICA9IHBpY29sY2RfZmJfd3JpdGUsCiAJLmZiX2JsYW5rICAgICA9IHBpY29sY2RfZmJfYmxhbmssCkBAIC02NjAsMTEgKzc3MCwxMiBAQAogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkYXRhLT5oZGV2LT5kZXY7CiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBOVUxMOwotCWludCBlcnJvciA9IC1FTk9NRU07CisJaW50IGksIGVycm9yID0gLUVOT01FTTsKIAl1OCAqZmJfdmJpdG1hcCA9IE5VTEw7CiAJdTggKmZiX2JpdG1hcCAgPSBOVUxMOworCXUzMiAqcGFsZXR0ZTsKIAotCWZiX2JpdG1hcCA9IHZtYWxsb2MoUElDT0xDREZCX1NJWkUqcGljb2xjZGZiX3Zhci5iaXRzX3Blcl9waXhlbCk7CisJZmJfYml0bWFwID0gdm1hbGxvYyhQSUNPTENERkJfU0laRSo4KTsKIAlpZiAoZmJfYml0bWFwID09IE5VTEwpIHsKIAkJZGV2X2VycihkZXYsICJjYW4ndCBnZXQgYSBmcmVlIHBhZ2UgZm9yIGZyYW1lYnVmZmVyXG4iKTsKIAkJZ290byBlcnJfbm9tZW07CkBAIC02NzgsMTggKzc4OSwyOSBAQAogCiAJZGF0YS0+ZmJfdXBkYXRlX3JhdGUgPSBQSUNPTENERkJfVVBEQVRFX1JBVEVfREVGQVVMVDsKIAlkYXRhLT5mYl9kZWZpbyA9IHBpY29sY2RfZmJfZGVmaW87Ci0JaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKDAsIGRldik7CisJLyogVGhlIGV4dHJhIG1lbW9yeSBpczoKKwkgKiAtIHN0cnVjdCBwaWNvbGNkX2ZiX2NsZWFudXBfaXRlbQorCSAqIC0gdTMyIGZvciByZWZfY291bnQKKwkgKiAtIDI1Nip1MzIgZm9yIHBzZXVkb19wYWxldHRlCisJICovCisJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKDI1NyAqIHNpemVvZih1MzIpICsgc2l6ZW9mKHN0cnVjdCBwaWNvbGNkX2ZiX2NsZWFudXBfaXRlbSksIGRldik7CiAJaWYgKGluZm8gPT0gTlVMTCkgewogCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBhIGZyYW1lYnVmZmVyXG4iKTsKIAkJZ290byBlcnJfbm9tZW07CiAJfQogCisJcGFsZXR0ZSAgPSBpbmZvLT5wYXIgKyBzaXplb2Yoc3RydWN0IHBpY29sY2RfZmJfY2xlYW51cF9pdGVtKTsKKwkqcGFsZXR0ZSA9IDE7CisJcGFsZXR0ZSsrOworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKwkJcGFsZXR0ZVtpXSA9IGkgPiAwICYmIGkgPCAxNiA/IDB4ZmYgOiAwOworCWluZm8tPnBzZXVkb19wYWxldHRlID0gcGFsZXR0ZTsKIAlpbmZvLT5mYmRlZmlvID0gJmRhdGEtPmZiX2RlZmlvOwogCWluZm8tPnNjcmVlbl9iYXNlID0gKGNoYXIgX19mb3JjZSBfX2lvbWVtICopZmJfYml0bWFwOwogCWluZm8tPmZib3BzID0gJnBpY29sY2RmYl9vcHM7CiAJaW5mby0+dmFyID0gcGljb2xjZGZiX3ZhcjsKIAlpbmZvLT5maXggPSBwaWNvbGNkZmJfZml4OwotCWluZm8tPmZpeC5zbWVtX2xlbiAgID0gUElDT0xDREZCX1NJWkU7CisJaW5mby0+Zml4LnNtZW1fbGVuICAgPSBQSUNPTENERkJfU0laRSo4OwogCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpZmJfYml0bWFwOwogCWluZm8tPnBhciA9IGRhdGE7CiAJaW5mby0+ZmxhZ3MgPSBGQklORk9fRkxBR19ERUZBVUxUOwpAQCAtNzA3LDE4ICs4MjksMjAgQEAKIAkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGF0dHJpYnV0ZXNcbiIpOwogCQlnb3RvIGVycl9jbGVhbnVwOwogCX0KKwlmYl9kZWZlcnJlZF9pb19pbml0KGluZm8pOwogCWRhdGEtPmZiX2luZm8gICAgPSBpbmZvOwogCWVycm9yID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CiAJaWYgKGVycm9yKSB7CiAJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGZyYW1lYnVmZmVyXG4iKTsKIAkJZ290byBlcnJfc3lzZnM7CiAJfQotCWZiX2RlZmVycmVkX2lvX2luaXQoaW5mbyk7CiAJLyogc2NoZWR1bGUgZmlyc3Qgb3V0cHV0IG9mIGZyYW1lYnVmZmVyICovCisJZGF0YS0+ZmJfZm9yY2UgPSAxOwogCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaW5mby0+ZGVmZXJyZWRfd29yaywgMCk7CiAJcmV0dXJuIDA7CiAKIGVycl9zeXNmczoKKwlmYl9kZWZlcnJlZF9pb19jbGVhbnVwKGluZm8pOwogCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9mYl91cGRhdGVfcmF0ZSk7CiBlcnJfY2xlYW51cDoKIAlkYXRhLT5mYl92Yml0bWFwID0gTlVMTDsKQEAgLTczNywxOSArODYxLDE3IEBACiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBkYXRhLT5mYl9pbmZvOwogCXU4ICpmYl92Yml0bWFwID0gZGF0YS0+ZmJfdmJpdG1hcDsKLQl1OCAqZmJfYml0bWFwICA9IGRhdGEtPmZiX2JpdG1hcDsKIAogCWlmICghaW5mbykKIAkJcmV0dXJuOwogCisJaW5mby0+cGFyID0gTlVMTDsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRhdGEtPmhkZXYtPmRldiwgJmRldl9hdHRyX2ZiX3VwZGF0ZV9yYXRlKTsKKwl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOwogCWRhdGEtPmZiX3ZiaXRtYXAgPSBOVUxMOwogCWRhdGEtPmZiX2JpdG1hcCAgPSBOVUxMOwogCWRhdGEtPmZiX2JwcCAgICAgPSAwOwogCWRhdGEtPmZiX2luZm8gICAgPSBOVUxMOwotCWRldmljZV9yZW1vdmVfZmlsZSgmZGF0YS0+aGRldi0+ZGV2LCAmZGV2X2F0dHJfZmJfdXBkYXRlX3JhdGUpOwotCWZiX2RlZmVycmVkX2lvX2NsZWFudXAoaW5mbyk7Ci0JdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKLQl2ZnJlZShmYl9iaXRtYXApOwogCWtmcmVlKGZiX3ZiaXRtYXApOwogfQogCkBAIC0yNTY2LDYgKzI2ODgsMTMgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGF0YS0+bG9jaywgZmxhZ3MpOwogCWRhdGEtPnN0YXR1cyB8PSBQSUNPTENEX0ZBSUxFRDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYXRhLT5sb2NrLCBmbGFncyk7CisjaWZkZWYgQ09ORklHX0hJRF9QSUNPTENEX0ZCCisJLyogc2hvcnQtY2lyY3VpdCBGQiBhcyBlYXJseSBhcyBwb3NzaWJsZSBpbiBvcmRlciB0bworCSAqIGF2b2lkIGxvbmcgZGVsYXlzIGlmIHdlIGhvc3QgY29uc29sZS4KKwkgKi8KKwlpZiAoZGF0YS0+ZmJfaW5mbykKKwkJZGF0YS0+ZmJfaW5mby0+cGFyID0gTlVMTDsKKyNlbmRpZgogCiAJcGljb2xjZF9leGl0X2RldmZzKGRhdGEpOwogCWRldmljZV9yZW1vdmVfZmlsZSgmaGRldi0+ZGV2LCAmZGV2X2F0dHJfb3BlcmF0aW9uX21vZGUpOwpAQCAtMjYyMyw2ICsyNzUyLDEwIEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgcGljb2xjZF9leGl0KHZvaWQpCiB7CiAJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZwaWNvbGNkX2RyaXZlcik7CisjaWZkZWYgQ09ORklHX0hJRF9QSUNPTENEX0ZCCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlXQVJOX09OKGZiX3BlbmRpbmcpOworI2VuZGlmCiB9CiAKIG1vZHVsZV9pbml0KHBpY29sY2RfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYyBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jCmluZGV4IDE3ZjJkYzAuLmY3NzY5NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jCkBAIC0yMiwxMSArMjIsNiBAQAogICogICAgICBJcyBpdCBwb3NzaWJsZSB0byByZW1vdmUgYW5kIHJlaW5zdGFsbCB0aGUgdXJiIGluIHJhdy1ldmVudC0gb3IgYW55CiAgKiAgICAgIG90aGVyIGhhbmRsZXIsIG9yIHRvIGRlZmVyIHRoaXMgYWN0aW9uIHRvIGJlIGV4ZWN1dGVkIHNvbWV3aGVyZSBlbHNlPwogICoKLSAqIFRPRE8gaW1wbGVtZW50IG5vdGlmaWNhdGlvbiBtZWNoYW5pc20gZm9yIG92ZXJsb25nIG1hY3JvIGV4ZWN1dGlvbgotICogICAgICBJZiB1c2VyIHdhbnRzIHRvIGV4ZWN1dGUgYW4gb3ZlcmxvbmcgbWFjcm8gb25seSB0aGUgbmFtZXMgb2YgbWFjcm9zZXQKLSAqICAgICAgYW5kIG1hY3JvIGFyZSBnaXZlbi4gU2hvdWxkIHVzZXJsYW5kIHRhcCBoaWRyYXcgb3IgaXMgdGhlcmUgYW4KLSAqICAgICAgYWRkaXRpb25hbCBzdHJlYW1pbmcgbWVjaGFuaXNtPwotICoKICAqIFRPRE8gaXMgaXQgcG9zc2libGUgdG8gb3ZlcndyaXRlIGdyb3VwIGZvciBzeXNmcyBhdHRyaWJ1dGVzIHZpYSB1ZGV2PwogICovCiAKQEAgLTI3Nyw3ICsyNzIsNyBAQAogCQljb3VudCA9IHNpemVvZihzdHJ1Y3Qga29uZV9zZXR0aW5ncykgLSBvZmY7CiAKIAltdXRleF9sb2NrKCZrb25lLT5rb25lX2xvY2spOwotCW1lbWNweShidWYsICZrb25lLT5zZXR0aW5ncyArIG9mZiwgY291bnQpOworCW1lbWNweShidWYsICgoY2hhciBjb25zdCAqKSZrb25lLT5zZXR0aW5ncykgKyBvZmYsIGNvdW50KTsKIAltdXRleF91bmxvY2soJmtvbmUtPmtvbmVfbG9jayk7CiAKIAlyZXR1cm4gY291bnQ7CkBAIC0zMzcsNyArMzMyLDcgQEAKIAkJY291bnQgPSBzaXplb2Yoc3RydWN0IGtvbmVfcHJvZmlsZSkgLSBvZmY7CiAKIAltdXRleF9sb2NrKCZrb25lLT5rb25lX2xvY2spOwotCW1lbWNweShidWYsICZrb25lLT5wcm9maWxlc1tudW1iZXIgLSAxXSwgc2l6ZW9mKHN0cnVjdCBrb25lX3Byb2ZpbGUpKTsKKwltZW1jcHkoYnVmLCAoKGNoYXIgY29uc3QgKikma29uZS0+cHJvZmlsZXNbbnVtYmVyIC0gMV0pICsgb2ZmLCBjb3VudCk7CiAJbXV0ZXhfdW5sb2NrKCZrb25lLT5rb25lX2xvY2spOwogCiAJcmV0dXJuIGNvdW50OwpAQCAtNjIzLDE4ICs2MTgsNiBAQAogfQogCiAvKgotICogVGhpcyBmaWxlIGlzIHVzZWQgYnkgdXNlcmxhbmQgc29mdHdhcmUgdG8gZmluZCBkZXZpY2VzIHRoYXQgYXJlIGhhbmRsZWQgYnkKLSAqIHRoaXMgZHJpdmVyLiBUaGlzIHByb3ZpZGVzIGEgY29uc2lzdGVudCB3YXkgZm9yIGFjdHVhbCBhbmQgb2xkZXIga2VybmVscwotICogd2hlcmUgdGhpcyBkcml2ZXIgcmVwbGFjZWQgdXNiaGlkIGluc3RlYWQgb2YgZ2VuZXJpYy11c2IuCi0gKiBEcml2ZXIgY2FwYWJpbGl0aWVzIGFyZSBkZXRlcm1pbmVkIGJ5IHZlcnNpb24gbnVtYmVyLgotICovCi1zdGF0aWMgc3NpemVfdCBrb25lX3N5c2ZzX3Nob3dfZHJpdmVyX3ZlcnNpb24oc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgUk9DQ0FUX0tPTkVfRFJJVkVSX1ZFUlNJT04gIlxuIik7Ci19Ci0KLS8qCiAgKiBSZWFkIGFjdHVhbCBkcGkgc2V0dGluZ3MuCiAgKiBSZXR1cm5zIHJhdyB2YWx1ZSBmb3IgZnVydGhlciBwcm9jZXNzaW5nLiBSZWZlciB0byBlbnVtIGtvbmVfcG9sbGluZ19yYXRlcyB0bwogICogZ2V0IHJlYWwgdmFsdWUuCkBAIC02NzEsOSArNjU0LDYgQEAKIAkJa29uZV9zeXNmc19zaG93X3N0YXJ0dXBfcHJvZmlsZSwKIAkJa29uZV9zeXNmc19zZXRfc3RhcnR1cF9wcm9maWxlKTsKIAotc3RhdGljIERFVklDRV9BVFRSKGtvbmVfZHJpdmVyX3ZlcnNpb24sIDA0NDAsCi0JCWtvbmVfc3lzZnNfc2hvd19kcml2ZXJfdmVyc2lvbiwgTlVMTCk7Ci0KIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICprb25lX2F0dHJpYnV0ZXNbXSA9IHsKIAkJJmRldl9hdHRyX2FjdHVhbF9kcGkuYXR0ciwKIAkJJmRldl9hdHRyX2FjdHVhbF9wcm9maWxlLmF0dHIsCkBAIC02ODEsNyArNjYxLDYgQEAKIAkJJmRldl9hdHRyX2Zpcm13YXJlX3ZlcnNpb24uYXR0ciwKIAkJJmRldl9hdHRyX3RjdS5hdHRyLAogCQkmZGV2X2F0dHJfc3RhcnR1cF9wcm9maWxlLmF0dHIsCi0JCSZkZXZfYXR0cl9rb25lX2RyaXZlcl92ZXJzaW9uLmF0dHIsCiAJCU5VTEwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5oIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmgKaW5kZXggMDAzZTZmOC4uMTMwZDY1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmgKKysrIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmgKQEAgLTE0LDggKzE0LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLSNkZWZpbmUgUk9DQ0FUX0tPTkVfRFJJVkVSX1ZFUlNJT04gInYwLjMuMSIKLQogI3ByYWdtYSBwYWNrKHB1c2gpCiAjcHJhZ21hIHBhY2soMSkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jCmluZGV4IGUwNWQ0OGUuLmY2ZTgwYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogCQlwcmludGsoS0VSTl9FTUVSRyAicm9jY2F0IGRldmljZSB3aXRoIG1pbm9yICVkIGRvZXNuJ3QgZXhpc3RcbiIsCiAJCQkJbWlub3IpOwogCQllcnJvciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXhpdF91bmxvY2s7CisJCWdvdG8gZXhpdF9lcnI7CiAJfQogCiAJaWYgKCFkZXZpY2UtPm9wZW4rKykgewpAQCAtMTc4LDcgKzE3OCw3IEBACiAJCQkJCVBNX0hJTlRfRlVMTE9OKTsKIAkJCWlmIChlcnJvciA8IDApIHsKIAkJCQktLWRldmljZS0+b3BlbjsKLQkJCQlnb3RvIGV4aXRfdW5sb2NrOworCQkJCWdvdG8gZXhpdF9lcnI7CiAJCQl9CiAJCX0KIAkJZXJyb3IgPSBkZXZpY2UtPmhpZC0+bGxfZHJpdmVyLT5vcGVuKGRldmljZS0+aGlkKTsKQEAgLTE4Nyw3ICsxODcsNyBAQAogCQkJCWRldmljZS0+aGlkLT5sbF9kcml2ZXItPnBvd2VyKGRldmljZS0+aGlkLAogCQkJCQkJUE1fSElOVF9OT1JNQUwpOwogCQkJLS1kZXZpY2UtPm9wZW47Ci0JCQlnb3RvIGV4aXRfdW5sb2NrOworCQkJZ290byBleGl0X2VycjsKIAkJfQogCX0KIApAQCAtMjAyLDYgKzIwMiw5IEBACiAJbXV0ZXhfdW5sb2NrKCZkZXZpY2UtPnJlYWRlcnNfbG9jayk7CiAJbXV0ZXhfdW5sb2NrKCZkZXZpY2VzX2xvY2spOwogCXJldHVybiBlcnJvcjsKK2V4aXRfZXJyOgorCWtmcmVlKHJlYWRlcik7CisJZ290byBleGl0X3VubG9jazsKIH0KIAogc3RhdGljIGludCByb2NjYXRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuaCBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuaAppbmRleCBkOGFhZTBjLi4wOWU4NjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmgKKysrIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5oCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaGlkLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotI2lmIGRlZmluZWQoQ09ORklHX0hJRF9ST0NDQVQpIHx8IGRlZmluZWQgKENPTkZJR19ISURfUk9DQ0FUX01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19ISURfUk9DQ0FUKSB8fCBkZWZpbmVkKENPTkZJR19ISURfUk9DQ0FUX01PRFVMRSkKIGludCByb2NjYXRfY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKTsKIHZvaWQgcm9jY2F0X2Rpc2Nvbm5lY3QoaW50IG1pbm9yKTsKIGludCByb2NjYXRfcmVwb3J0X2V2ZW50KGludCBtaW5vciwgdTggY29uc3QgKmRhdGEsIGludCBsZW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXRvcHNlZWQuYyBiL2RyaXZlcnMvaGlkL2hpZC10b3BzZWVkLmMKaW5kZXggMmVlYmRjYy4uNTc3MWY4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXRvcHNlZWQuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtdG9wc2VlZC5jCkBAIC02LDYgKzYsOSBAQAogICoKICAqICBNb2RpZmllZCB0byBhbHNvIHN1cHBvcnQgQlRDICJFbXByZXggMzAwOVVSRiBJSUkgVmlzdGEgTUNFIFJlbW90ZSIgYnkKICAqICBXYXluZSBUaG9tYXMgMjAxMC4KKyAqCisgKiAgTW9kaWZpZWQgdG8gc3VwcG9ydCBDb25jZXB0cm9uaWMgQ0xMUkNNQ0UgYnkKKyAqICBLZWVzIEJha2tlciAyMDEwLgogICovCiAKIC8qCkBAIC0zNCw2ICszNyw3IEBACiAJY2FzZSAweDAwZDogdHNfbWFwX2tleV9jbGVhcihLRVlfTUVESUEpOwlicmVhazsKIAljYXNlIDB4MDI0OiB0c19tYXBfa2V5X2NsZWFyKEtFWV9NRU5VKTsJCWJyZWFrOwogCWNhc2UgMHgwMjU6IHRzX21hcF9rZXlfY2xlYXIoS0VZX1RWKTsJCWJyZWFrOworCWNhc2UgMHgwMjc6IHRzX21hcF9rZXlfY2xlYXIoS0VZX01PREUpOwkJYnJlYWs7CiAJY2FzZSAweDAzMTogdHNfbWFwX2tleV9jbGVhcihLRVlfQVVESU8pOwlicmVhazsKIAljYXNlIDB4MDMyOiB0c19tYXBfa2V5X2NsZWFyKEtFWV9URVhUKTsJCWJyZWFrOwogCWNhc2UgMHgwMzM6IHRzX21hcF9rZXlfY2xlYXIoS0VZX0NIQU5ORUwpOwlicmVhazsKQEAgLTYwLDYgKzY0LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCB0c19kZXZpY2VzW10gPSB7CiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RPUFNFRUQsIFVTQl9ERVZJQ0VfSURfVE9QU0VFRF9DWUJFUkxJTkspIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JUQywgVVNCX0RFVklDRV9JRF9CVENfRU1QUkVYX1JFTU9URSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVE9QU0VFRDIsIFVTQl9ERVZJQ0VfSURfVE9QU0VFRDJfUkZfQ09NQk8pIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIHRzX2RldmljZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXdhY29tLmMgYi9kcml2ZXJzL2hpZC9oaWQtd2Fjb20uYwppbmRleCAxZTA1MWYxLi44MDdkY2QxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtd2Fjb20uYworKysgYi9kcml2ZXJzL2hpZC9oaWQtd2Fjb20uYwpAQCAtNDM2LDcgKzQzNiw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCB3YWNvbV9kZXZpY2VzW10gPSB7CiAJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0dSQVBISVJFX0JMVUVUT09USCkgfSwKLQl7IEhJRF9CTFVFVE9PVEhfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TNF9CTFVFVE9PVEgpIH0sCisKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgd2Fjb21fZGV2aWNlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWRyYXcuYyBiL2RyaXZlcnMvaGlkL2hpZHJhdy5jCmluZGV4IDNjY2Q0NzguLjQ3ZDcwYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZHJhdy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZHJhdy5jCkBAIC00Niw3ICs0Niw2IEBACiB7CiAJc3RydWN0IGhpZHJhd19saXN0ICpsaXN0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWludCByZXQgPSAwLCBsZW47Ci0JY2hhciAqcmVwb3J0OwogCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogCiAJbXV0ZXhfbG9jaygmbGlzdC0+cmVhZF9tdXRleCk7CkBAIC04NCw3ICs4Myw2IEBACiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dDsKIAotCQlyZXBvcnQgPSBsaXN0LT5idWZmZXJbbGlzdC0+dGFpbF0udmFsdWU7CiAJCWxlbiA9IGxpc3QtPmJ1ZmZlcltsaXN0LT50YWlsXS5sZW4gPiBjb3VudCA/CiAJCQljb3VudCA6IGxpc3QtPmJ1ZmZlcltsaXN0LT50YWlsXS5sZW47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMKaW5kZXggMWViZDMyNC4uYjcyOWMwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMKQEAgLTgyNywxNCArODI3LDIxIEBACiAJCQkJcmV0Kys7CiAJCX0KIAl9IGVsc2UgeworCQlpbnQgc2tpcHBlZF9yZXBvcnRfaWQgPSAwOworCQlpZiAoYnVmWzBdID09IDB4MCkgeworCQkJLyogRG9uJ3Qgc2VuZCB0aGUgUmVwb3J0IElEICovCisJCQlidWYrKzsKKwkJCWNvdW50LS07CisJCQlza2lwcGVkX3JlcG9ydF9pZCA9IDE7CisJCX0KIAkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCiAJCQlISURfUkVRX1NFVF9SRVBPUlQsCiAJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKIAkJCSgocmVwb3J0X3R5cGUgKyAxKSA8PCA4KSB8ICpidWYsCi0JCQlpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlciwgYnVmICsgMSwgY291bnQgLSAxLAorCQkJaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsIGJ1ZiwgY291bnQsCiAJCQlVU0JfQ1RSTF9TRVRfVElNRU9VVCk7Ci0JCS8qIGNvdW50IGFsc28gdGhlIHJlcG9ydCBpZCAqLwotCQlpZiAocmV0ID4gMCkKKwkJLyogY291bnQgYWxzbyB0aGUgcmVwb3J0IGlkLCBpZiB0aGlzIHdhcyBhIG51bWJlcmVkIHJlcG9ydC4gKi8KKwkJaWYgKHJldCA+IDAgJiYgc2tpcHBlZF9yZXBvcnRfaWQpCiAJCQlyZXQrKzsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCmluZGV4IDVmZjhkMzIuLjI2NDNkMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYwpAQCAtMzQsNiArMzQsNyBAQAogCXsgVVNCX1ZFTkRPUl9JRF9BTFBTLCBVU0JfREVWSUNFX0lEX0lCTV9HQU1FUEFELCBISURfUVVJUktfQkFEUEFEIH0sCiAJeyBVU0JfVkVORE9SX0lEX0NISUMsIFVTQl9ERVZJQ0VfSURfQ0hJQ19HQU1FUEFELCBISURfUVVJUktfQkFEUEFEIH0sCiAJeyBVU0JfVkVORE9SX0lEX0RXQVYsIFVTQl9ERVZJQ0VfSURfRFdBVl9FR0FMQVhfTVVMVElUT1VDSCwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCisJeyBVU0JfVkVORE9SX0lEX01PSk8sIFVTQl9ERVZJQ0VfSURfUkVUUk9fQURBUFRFUiwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0hBUFAsIFVTQl9ERVZJQ0VfSURfVUdDSV9EUklWSU5HLCBISURfUVVJUktfQkFEUEFEIHwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0hBUFAsIFVTQl9ERVZJQ0VfSURfVUdDSV9GTFlJTkcsIEhJRF9RVUlSS19CQURQQUQgfCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfSEFQUCwgVVNCX0RFVklDRV9JRF9VR0NJX0ZJR0hUSU5HLCBISURfUVVJUktfQkFEUEFEIHwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCkBAIC01Niw2ICs1Nyw3IEBACiAJeyBVU0JfVkVORE9SX0lEX0FURU4sIFVTQl9ERVZJQ0VfSURfQVRFTl80UE9SVEtWTSwgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0FURU4sIFVTQl9ERVZJQ0VfSURfQVRFTl80UE9SVEtWTUMsIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9DSCwgVVNCX0RFVklDRV9JRF9DSF9DT01CQVRTVElDSywgSElEX1FVSVJLX05PR0VUIH0sCisJeyBVU0JfVkVORE9SX0lEX0NILCBVU0JfREVWSUNFX0lEX0NIX0ZMSUdIVF9TSU1fRUNMSVBTRV9ZT0tFLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfQ0gsIFVTQl9ERVZJQ0VfSURfQ0hfRkxJR0hUX1NJTV9ZT0tFLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfQ0gsIFVTQl9ERVZJQ0VfSURfQ0hfUFJPX1BFREFMUywgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0NILCBVU0JfREVWSUNFX0lEX0NIXzNBWElTXzVCVVRUT05fU1RJQ0ssIEhJRF9RVUlSS19OT0dFVCB9LApAQCAtNzMsNiArNzUsOCBAQAogCXsgVVNCX1ZFTkRPUl9JRF9XSVNFR1JPVVBfTFRELCBVU0JfREVWSUNFX0lEX1NNQVJUSk9ZX0RVQUxfUExVUywgSElEX1FVSVJLX05PR0VUIHwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCiAJeyBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUF9MVEQyLCBVU0JfREVWSUNFX0lEX1NNQVJUSk9ZX0RVQUxfUExVUywgSElEX1FVSVJLX05PR0VUIHwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCiAKKwl7IFVTQl9WRU5ET1JfSURfUElfRU5HSU5FRVJJTkcsIFVTQl9ERVZJQ0VfSURfUElfRU5HSU5FRVJJTkdfVkVDX1VTQl9GT09UUEVEQUwsIEhJRF9RVUlSS19ISURJTlBVVF9GT1JDRSB9LAorCiAJeyAwLCAwIH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYwppbmRleCBjMjRkMmZhLi4yNTRhMDAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jCkBAIC02Nyw3ICs2Nyw3IEBACiAJc3RydWN0IG11dGV4IHRocmVhZF9sb2NrOwogfTsKIAotc3RhdGljIHN0cnVjdCBoaWRkZXYgKmhpZGRldl90YWJsZVtISURERVZfTUlOT1JTXTsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBoaWRkZXZfZHJpdmVyOwogCiAvKgogICogRmluZCBhIHJlcG9ydCwgZ2l2ZW4gdGhlIHJlcG9ydCdzIHR5cGUgYW5kIElELiAgVGhlIElEIGNhbiBiZSBzcGVjaWZpZWQKQEAgLTI2NSwyMiArMjY1LDE5IEBACiBzdGF0aWMgaW50IGhpZGRldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBoaWRkZXZfbGlzdCAqbGlzdDsKLQlpbnQgcmVzLCBpOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCXN0cnVjdCBoaWRkZXYgKmhpZGRldjsKKwlpbnQgcmVzOwogCi0JLyogU2VlIGNvbW1lbnQgaW4gaGlkZGV2X2Nvbm5lY3QoKSBmb3IgQktMIGV4cGxhbmF0aW9uICovCi0JbG9ja19rZXJuZWwoKTsKLQlpID0gaW1pbm9yKGlub2RlKSAtIEhJRERFVl9NSU5PUl9CQVNFOwotCi0JaWYgKGkgPj0gSElEREVWX01JTk9SUyB8fCBpIDwgMCB8fCAhaGlkZGV2X3RhYmxlW2ldKQorCWludGYgPSB1c2JfZmluZF9pbnRlcmZhY2UoJmhpZGRldl9kcml2ZXIsIGltaW5vcihpbm9kZSkpOworCWlmICghaW50ZikKIAkJcmV0dXJuIC1FTk9ERVY7CisJaGlkZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAogCWlmICghKGxpc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkZGV2X2xpc3QpLCBHRlBfS0VSTkVMKSkpCiAJCXJldHVybiAtRU5PTUVNOwogCW11dGV4X2luaXQoJmxpc3QtPnRocmVhZF9sb2NrKTsKLQotCWxpc3QtPmhpZGRldiA9IGhpZGRldl90YWJsZVtpXTsKLQotCisJbGlzdC0+aGlkZGV2ID0gaGlkZGV2OwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGxpc3Q7CiAKIAkvKgpAQCAtMjg5LDcgKzI4Niw3IEBACiAJICovCiAJaWYgKGxpc3QtPmhpZGRldi0+ZXhpc3QpIHsKIAkJaWYgKCFsaXN0LT5oaWRkZXYtPm9wZW4rKykgewotCQkJcmVzID0gdXNiaGlkX29wZW4oaGlkZGV2X3RhYmxlW2ldLT5oaWQpOworCQkJcmVzID0gdXNiaGlkX29wZW4oaGlkZGV2LT5oaWQpOwogCQkJaWYgKHJlcyA8IDApIHsKIAkJCQlyZXMgPSAtRUlPOwogCQkJCWdvdG8gYmFpbDsKQEAgLTMwMSwxMiArMjk4LDEyIEBACiAJfQogCiAJc3Bpbl9sb2NrX2lycSgmbGlzdC0+aGlkZGV2LT5saXN0X2xvY2spOwotCWxpc3RfYWRkX3RhaWwoJmxpc3QtPm5vZGUsICZoaWRkZXZfdGFibGVbaV0tPmxpc3QpOworCWxpc3RfYWRkX3RhaWwoJmxpc3QtPm5vZGUsICZoaWRkZXYtPmxpc3QpOwogCXNwaW5fdW5sb2NrX2lycSgmbGlzdC0+aGlkZGV2LT5saXN0X2xvY2spOwogCiAJaWYgKCFsaXN0LT5oaWRkZXYtPm9wZW4rKykKIAkJaWYgKGxpc3QtPmhpZGRldi0+ZXhpc3QpIHsKLQkJCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBoaWRkZXZfdGFibGVbaV0tPmhpZDsKKwkJCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBoaWRkZXYtPmhpZDsKIAkJCXJlcyA9IHVzYmhpZF9nZXRfcG93ZXIoaGlkKTsKIAkJCWlmIChyZXMgPCAwKSB7CiAJCQkJcmVzID0gLUVJTzsKQEAgLTMxNCwxMyArMzExLDEwIEBACiAJCQl9CiAJCQl1c2JoaWRfb3BlbihoaWQpOwogCQl9Ci0KLQl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiBiYWlsOgogCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiAJa2ZyZWUobGlzdCk7Ci0JdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTg5NCwzNyArODg4LDE0IEBACiAJaGlkLT5oaWRkZXYgPSBoaWRkZXY7CiAJaGlkZGV2LT5oaWQgPSBoaWQ7CiAJaGlkZGV2LT5leGlzdCA9IDE7Ci0KLQkvKgotCSAqIEJLTCBoZXJlIGlzIHVzZWQgdG8gYXZvaWQgcmFjZSBhZnRlciB1c2JfcmVnaXN0ZXJfZGV2KCkuCi0JICogT25jZSB0aGUgZGV2aWNlIG5vZGUgaGFzIGJlZW4gY3JlYXRlZCwgb3BlbigpIGNvdWxkIGhhcHBlbiBvbiBpdC4KLQkgKiBUaGUgY29kZSBiZWxvdyB3aWxsIHRoZW4gZmFpbCwgYXMgaGlkZGV2X3RhYmxlIGhhc24ndCBiZWVuCi0JICogdXBkYXRlZC4KLQkgKgotCSAqIFRoZSBvYnZpb3VzIGZpeCAtLSBpbnRyb2R1Y2luZyBtdXRleCB0byBndWFyZCBoaWRkZXZfdGFibGVbXQotCSAqIGRvZXNuJ3Qgd29yaywgYXMgdXNiX29wZW4oKSBhbmQgdXNiX3JlZ2lzdGVyX2RldigpIGJvdGggdGFrZQotCSAqIG1pbm9yX3J3c2VtLCB0aHVzIHdlJ2xsIGhhdmUgQUJCQSBkZWFkbG9jay4KLQkgKgotCSAqIEJlZm9yZSBCS0wgcHVzaGRvd24sIHVzYl9vcGVuKCkgaGFkIGJlZW4gYWNxdWlyaW5nIGl0IGluIHJpZ2h0Ci0JICogb3JkZXIsIHNvIF9vcGVuKCkgd2FzIHNhZmUgdG8gdXNlIGl0IHRvIHByb3RlY3QgZnJvbSB0aGlzIHJhY2UuCi0JICogTm93IHRoZSBvcmRlciBpcyBkaWZmZXJlbnQsIGJ1dCBBQi1CQSBkZWFkbG9jayBzdGlsbCBkb2Vzbid0IG9jY3VyCi0JICogYXMgQktMIGlzIGRyb3BwZWQgb24gc2NoZWR1bGUoKSAoaS5lLiB3aGlsZSBzbGVlcGluZyBvbgotCSAqIG1pbm9yX3J3c2VtKS4gRnVnbHkuCi0JICovCi0JbG9ja19rZXJuZWwoKTsKKwl1c2Jfc2V0X2ludGZkYXRhKHVzYmhpZC0+aW50ZiwgdXNiaGlkKTsKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KHVzYmhpZC0+aW50ZiwgJmhpZGRldl9jbGFzcyk7CiAJaWYgKHJldHZhbCkgewogCQllcnJfaGlkKCJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuIik7CiAJCWhpZC0+aGlkZGV2ID0gTlVMTDsKLQkJdW5sb2NrX2tlcm5lbCgpOwogCQlrZnJlZShoaWRkZXYpOwogCQlyZXR1cm4gLTE7Ci0JfSBlbHNlIHsKLQkJaGlkLT5taW5vciA9IHVzYmhpZC0+aW50Zi0+bWlub3I7Ci0JCWhpZGRldl90YWJsZVt1c2JoaWQtPmludGYtPm1pbm9yIC0gSElEREVWX01JTk9SX0JBU0VdID0gaGlkZGV2OwogCX0KLQl1bmxvY2tfa2VybmVsKCk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtOTQyLDcgKzkxMyw2IEBACiAJaGlkZGV2LT5leGlzdCA9IDA7CiAJbXV0ZXhfdW5sb2NrKCZoaWRkZXYtPmV4aXN0YW5jZWxvY2spOwogCi0JaGlkZGV2X3RhYmxlW2hpZGRldi0+aGlkLT5taW5vciAtIEhJRERFVl9NSU5PUl9CQVNFXSA9IE5VTEw7CiAJdXNiX2RlcmVnaXN0ZXJfZGV2KHVzYmhpZC0+aW50ZiwgJmhpZGRldl9jbGFzcyk7CiAKIAlpZiAoaGlkZGV2LT5vcGVuKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKaW5kZXggZTE5Y2Y4ZS4uNGQzODJhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwpAQCAtNDA3LDYgKzQwNywxMyBAQAogCSAgc2Vuc29yIGluc2lkZSB5b3VyIENQVS4gTW9zdCBvZiB0aGUgZmFtaWx5IDYgQ1BVcwogCSAgYXJlIHN1cHBvcnRlZC4gQ2hlY2sgZG9jdW1lbnRhdGlvbi9kcml2ZXIgZm9yIGRldGFpbHMuCiAKK2NvbmZpZyBTRU5TT1JTX1BLR1RFTVAKKwl0cmlzdGF0ZSAiSW50ZWwgcHJvY2Vzc29yIHBhY2thZ2UgdGVtcGVyYXR1cmUgc2Vuc29yIgorCWRlcGVuZHMgb24gWDg2ICYmIFBDSSAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIHBhY2thZ2UgbGV2ZWwgdGVtcGVyYXR1cmUKKwkgIHNlbnNvciBpbnNpZGUgeW91ciBDUFUuIENoZWNrIGRvY3VtZW50YXRpb24vZHJpdmVyIGZvciBkZXRhaWxzLgorCiBjb25maWcgU0VOU09SU19JQk1BRU0KIAl0cmlzdGF0ZSAiSUJNIEFjdGl2ZSBFbmVyZ3kgTWFuYWdlciB0ZW1wZXJhdHVyZS9wb3dlciBzZW5zb3JzIGFuZCBjb250cm9sIgogCXNlbGVjdCBJUE1JX1NJCkBAIC00NDYsNiArNDUzLDE2IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBpdDg3LgogCitjb25maWcgU0VOU09SU19KWjQ3NDAKKwl0cmlzdGF0ZSAiSW5nZW5pYyBKWjQ3NDAgU29DIEFEQyBkcml2ZXIiCisJZGVwZW5kcyBvbiBNQUNIX0paNDc0MCAmJiBNRkRfSlo0NzQwX0FEQworCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciByZWFkaW5nIGFkYyB2YWx1ZXMgZnJvbSB0aGUgQURDSU4KKwkgIHBpbiBvbiBJbmdlbmljIEpaNDc0MCBTb0MgYmFzZWQgYm9hcmRzLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsZCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUgd2lsbCBiZQorCSAgY2FsbGVkIGp6NDc0MC1od21vbi4KKwogY29uZmlnIFNFTlNPUlNfTE02MwogCXRyaXN0YXRlICJOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNNjMgYW5kIExNNjQiCiAJZGVwZW5kcyBvbiBJMkMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCmluZGV4IDIxMzhjZWIuLjkxMDNiZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQpAQCAtMzksNiArMzksNyBAQAogb2JqLSQoQ09ORklHX1NFTlNPUlNfQVNDNzYyMSkJKz0gYXNjNzYyMS5vCiBvYmotJChDT05GSUdfU0VOU09SU19BVFhQMSkJKz0gYXR4cDEubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfQ09SRVRFTVApCSs9IGNvcmV0ZW1wLm8KK29iai0kKENPTkZJR19TRU5TT1JTX1BLR1RFTVApCSs9IHBrZ3RlbXAubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfRE1FMTczNykJKz0gZG1lMTczNy5vCiBvYmotJChDT05GSUdfU0VOU09SU19EUzE2MjEpCSs9IGRzMTYyMS5vCiBvYmotJChDT05GSUdfU0VOU09SU19FTUMxNDAzKQkrPSBlbWMxNDAzLm8KQEAgLTU1LDYgKzU2LDcgQEAKIG9iai0kKENPTkZJR19TRU5TT1JTX0lCTUFFTSkJKz0gaWJtYWVtLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0lCTVBFWCkJKz0gaWJtcGV4Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0lUODcpCSs9IGl0ODcubworb2JqLSQoQ09ORklHX1NFTlNPUlNfSlo0NzQwKQkrPSBqejQ3NDAtaHdtb24ubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfSzhURU1QKQkrPSBrOHRlbXAubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfSzEwVEVNUCkJKz0gazEwdGVtcC5vCiBvYmotJChDT05GSUdfU0VOU09SU19MSVMzTFYwMkQpICs9IGxpczNsdjAyZC5vIGhwX2FjY2VsLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vY29yZXRlbXAuYyBiL2RyaXZlcnMvaHdtb24vY29yZXRlbXAuYwppbmRleCAyOTg4ZGExLi4wNTM0NGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2NvcmV0ZW1wLmMKKysrIGIvZHJpdmVycy9od21vbi9jb3JldGVtcC5jCkBAIC01Myw2ICs1Myw3IEBACiAJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwogCWNvbnN0IGNoYXIgKm5hbWU7CiAJdTMyIGlkOworCXUxNiBjb3JlX2lkOwogCWNoYXIgdmFsaWQ7CQkvKiB6ZXJvIHVudGlsIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7CS8qIGluIGppZmZpZXMgKi8KIAlpbnQgdGVtcDsKQEAgLTc1LDcgKzc2LDcgQEAKIAlpZiAoYXR0ci0+aW5kZXggPT0gU0hPV19OQU1FKQogCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBkYXRhLT5uYW1lKTsKIAllbHNlCS8qIHNob3cgbGFiZWwgKi8KLQkJcmV0ID0gc3ByaW50ZihidWYsICJDb3JlICVkXG4iLCBkYXRhLT5pZCk7CisJCXJldCA9IHNwcmludGYoYnVmLCAiQ29yZSAlZFxuIiwgZGF0YS0+Y29yZV9pZCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzA0LDYgKzMwNSw5IEBACiAJfQogCiAJZGF0YS0+aWQgPSBwZGV2LT5pZDsKKyNpZmRlZiBDT05GSUdfU01QCisJZGF0YS0+Y29yZV9pZCA9IGMtPmNwdV9jb3JlX2lkOworI2VuZGlmCiAJZGF0YS0+bmFtZSA9ICJjb3JldGVtcCI7CiAJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCkBAIC00MDUsNiArNDA5LDEwIEBACiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJdW5zaWduZWQgaW50IGNwdTsKKyNpZmRlZiBDT05GSUdfU01QCisJdTE2IHBoeXNfcHJvY19pZDsKKwl1MTYgY3B1X2NvcmVfaWQ7CisjZW5kaWYKIH07CiAKIHN0YXRpYyBMSVNUX0hFQUQocGRldl9saXN0KTsKQEAgLTQxNSw2ICs0MjMsMjIgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJc3RydWN0IHBkZXZfZW50cnkgKnBkZXZfZW50cnk7CisjaWZkZWYgQ09ORklHX1NNUAorCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShjcHUpOworI2VuZGlmCisKKwltdXRleF9sb2NrKCZwZGV2X2xpc3RfbXV0ZXgpOworCisjaWZkZWYgQ09ORklHX1NNUAorCS8qIFNraXAgc2Vjb25kIEhUIGVudHJ5IG9mIGVhY2ggY29yZSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkocGRldl9lbnRyeSwgJnBkZXZfbGlzdCwgbGlzdCkgeworCQlpZiAoYy0+cGh5c19wcm9jX2lkID09IHBkZXZfZW50cnktPnBoeXNfcHJvY19pZCAmJgorCQkgICAgYy0+Y3B1X2NvcmVfaWQgPT0gcGRldl9lbnRyeS0+Y3B1X2NvcmVfaWQpIHsKKwkJCWVyciA9IDA7CS8qIE5vdCBhbiBlcnJvciAqLworCQkJZ290byBleGl0OworCQl9CisJfQorI2VuZGlmCiAKIAlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKERSVk5BTUUsIGNwdSk7CiAJaWYgKCFwZGV2KSB7CkBAIC00MzgsNyArNDYyLDEwIEBACiAKIAlwZGV2X2VudHJ5LT5wZGV2ID0gcGRldjsKIAlwZGV2X2VudHJ5LT5jcHUgPSBjcHU7Ci0JbXV0ZXhfbG9jaygmcGRldl9saXN0X211dGV4KTsKKyNpZmRlZiBDT05GSUdfU01QCisJcGRldl9lbnRyeS0+cGh5c19wcm9jX2lkID0gYy0+cGh5c19wcm9jX2lkOworCXBkZXZfZW50cnktPmNwdV9jb3JlX2lkID0gYy0+Y3B1X2NvcmVfaWQ7CisjZW5kaWYKIAlsaXN0X2FkZF90YWlsKCZwZGV2X2VudHJ5LT5saXN0LCAmcGRldl9saXN0KTsKIAltdXRleF91bmxvY2soJnBkZXZfbGlzdF9tdXRleCk7CiAKQEAgLTQ0OSw2ICs0NzYsNyBAQAogZXhpdF9kZXZpY2VfcHV0OgogCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CiBleGl0OgorCW11dGV4X3VubG9jaygmcGRldl9saXN0X211dGV4KTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2l0ODcuYyBiL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCmluZGV4IDViZTA5YzAuLjI1NzYzZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCisrKyBiL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCkBAIC04MCw2ICs4MCwxMyBAQAogCXJldHVybiBpbmIoVkFMKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkCitzdXBlcmlvX291dGIoaW50IHJlZywgaW50IHZhbCkKK3sKKwlvdXRiKHJlZywgUkVHKTsKKwlvdXRiKHZhbCwgVkFMKTsKK30KKwogc3RhdGljIGludCBzdXBlcmlvX2ludyhpbnQgcmVnKQogewogCWludCB2YWw7CkBAIC0xNTE3LDYgKzE1MjQsMjEgQEAKIAkJCXNpb19kYXRhLT52aWRfdmFsdWUgPSBzdXBlcmlvX2luYihJVDg3X1NJT19WSURfUkVHKTsKIAogCQlyZWcgPSBzdXBlcmlvX2luYihJVDg3X1NJT19QSU5YMl9SRUcpOworCQkvKgorCQkgKiBUaGUgSVQ4NzIwRiBoYXMgbm8gVklONyBwaW4sIHNvIFZDQ0ggc2hvdWxkIGFsd2F5cyBiZQorCQkgKiByb3V0ZWQgaW50ZXJuYWxseSB0byBWSU43IHdpdGggYW4gaW50ZXJuYWwgZGl2aWRlci4KKwkJICogQ3VyaW91c2x5LCB0aGVyZSBzdGlsbCBpcyBhIGNvbmZpZ3VyYXRpb24gYml0IHRvIGNvbnRyb2wKKwkJICogdGhpcywgd2hpY2ggbWVhbnMgaXQgY2FuIGJlIHNldCBpbmNvcnJlY3RseS4gQW5kIGV2ZW4KKwkJICogbW9yZSBjdXJpb3VzbHksIG1hbnkgYm9hcmRzIG91dCB0aGVyZSBhcmUgaW1wcm9wZXJseQorCQkgKiBjb25maWd1cmVkLCBldmVuIHRob3VnaCB0aGUgSVQ4NzIwRiBkYXRhc2hlZXQgY2xhaW1zCisJCSAqIHRoYXQgdGhlIGludGVybmFsIHJvdXRpbmcgb2YgVkNDSCB0byBWSU43IGlzIHRoZSBkZWZhdWx0CisJCSAqIHNldHRpbmcuIFNvIHdlIGZvcmNlIHRoZSBpbnRlcm5hbCByb3V0aW5nIGluIHRoaXMgY2FzZS4KKwkJICovCisJCWlmIChzaW9fZGF0YS0+dHlwZSA9PSBpdDg3MjAgJiYgIShyZWcgJiAoMSA8PCAxKSkpIHsKKwkJCXJlZyB8PSAoMSA8PCAxKTsKKwkJCXN1cGVyaW9fb3V0YihJVDg3X1NJT19QSU5YMl9SRUcsIHJlZyk7CisJCQlwcl9ub3RpY2UoIml0ODc6IFJvdXRpbmcgaW50ZXJuYWwgVkNDSCB0byBpbjdcbiIpOworCQl9CiAJCWlmIChyZWcgJiAoMSA8PCAwKSkKIAkJCXByX2luZm8oIml0ODc6IGluMyBpcyBWQ0MgKCs1VilcbiIpOwogCQlpZiAocmVnICYgKDEgPDwgMSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2p6NDc0MC1od21vbi5jIGIvZHJpdmVycy9od21vbi9qejQ3NDAtaHdtb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzhiM2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9od21vbi9qejQ3NDAtaHdtb24uYwpAQCAtMCwwICsxLDIzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwLCBMYXJzLVBldGVyIENsYXVzZW4gPGxhcnNAbWV0YWZvby5kZT4KKyAqIEpaNDc0MCBTb0MgSFdNT04gZHJpdmVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KKworI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CisKK3N0cnVjdCBqejQ3NDBfaHdtb24geworCXN0cnVjdCByZXNvdXJjZSAqbWVtOworCXZvaWQgX19pb21lbSAqYmFzZTsKKworCWludCBpcnE7CisKKwlzdHJ1Y3QgbWZkX2NlbGwgKmNlbGw7CisJc3RydWN0IGRldmljZSAqaHdtb247CisKKwlzdHJ1Y3QgY29tcGxldGlvbiByZWFkX2NvbXBsZXRpb247CisKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKK307CisKK3N0YXRpYyBzc2l6ZV90IGp6NDc0MF9od21vbl9zaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZfYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgImp6NDc0MFxuIik7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBqejQ3NDBfaHdtb25faXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGp6NDc0MF9od21vbiAqaHdtb24gPSBkYXRhOworCisJY29tcGxldGUoJmh3bW9uLT5yZWFkX2NvbXBsZXRpb24pOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHNzaXplX3Qgano0NzQwX2h3bW9uX3JlYWRfYWRjaW4oc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZfYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBqejQ3NDBfaHdtb24gKmh3bW9uID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGNvbXBsZXRpb24gKmNvbXBsZXRpb24gPSAmaHdtb24tPnJlYWRfY29tcGxldGlvbjsKKwl1bnNpZ25lZCBsb25nIHQ7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmh3bW9uLT5sb2NrKTsKKworCUlOSVRfQ09NUExFVElPTigqY29tcGxldGlvbik7CisKKwllbmFibGVfaXJxKGh3bW9uLT5pcnEpOworCWh3bW9uLT5jZWxsLT5lbmFibGUodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOworCisJdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KGNvbXBsZXRpb24sIEhaKTsKKworCWlmICh0ID4gMCkgeworCQl2YWwgPSByZWFkdyhod21vbi0+YmFzZSkgJiAweGZmZjsKKwkJdmFsID0gKHZhbCAqIDMzMDApID4+IDEyOworCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwgdmFsKTsKKwl9IGVsc2UgeworCQlyZXQgPSB0ID8gdCA6IC1FVElNRURPVVQ7CisJfQorCisJaHdtb24tPmNlbGwtPmRpc2FibGUodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOworCWRpc2FibGVfaXJxKGh3bW9uLT5pcnEpOworCisJbXV0ZXhfdW5sb2NrKCZod21vbi0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgano0NzQwX2h3bW9uX3Nob3dfbmFtZSwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoaW4wX2lucHV0LCBTX0lSVUdPLCBqejQ3NDBfaHdtb25fcmVhZF9hZGNpbiwgTlVMTCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpqejQ3NDBfaHdtb25fYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9uYW1lLmF0dHIsCisJJmRldl9hdHRyX2luMF9pbnB1dC5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGp6NDc0MF9od21vbl9hdHRyX2dyb3VwID0geworCS5hdHRycyA9IGp6NDc0MF9od21vbl9hdHRyaWJ1dGVzLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgano0NzQwX2h3bW9uX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgano0NzQwX2h3bW9uICpod21vbjsKKworCWh3bW9uID0ga21hbGxvYyhzaXplb2YoKmh3bW9uKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFod21vbikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgZHJpdmVyIHN0cnVjdHVyZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWh3bW9uLT5jZWxsID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlod21vbi0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaHdtb24tPmlycSA8IDApIHsKKwkJcmV0ID0gaHdtb24tPmlycTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBwbGF0Zm9ybSBpcnE6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWh3bW9uLT5tZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghaHdtb24tPm1lbSkgeworCQlyZXQgPSAtRU5PRU5UOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IHBsYXRmb3JtIG1taW8gcmVzb3VyY2VcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWh3bW9uLT5tZW0gPSByZXF1ZXN0X21lbV9yZWdpb24oaHdtb24tPm1lbS0+c3RhcnQsCisJCQlyZXNvdXJjZV9zaXplKGh3bW9uLT5tZW0pLCBwZGV2LT5uYW1lKTsKKwlpZiAoIWh3bW9uLT5tZW0pIHsKKwkJcmV0ID0gLUVCVVNZOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBtbWlvIG1lbW9yeSByZWdpb25cbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWh3bW9uLT5iYXNlID0gaW9yZW1hcF9ub2NhY2hlKGh3bW9uLT5tZW0tPnN0YXJ0LAorCQkJcmVzb3VyY2Vfc2l6ZShod21vbi0+bWVtKSk7CisJaWYgKCFod21vbi0+YmFzZSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBpb3JlbWFwIG1taW8gbWVtb3J5XG4iKTsKKwkJZ290byBlcnJfcmVsZWFzZV9tZW1fcmVnaW9uOworCX0KKworCWluaXRfY29tcGxldGlvbigmaHdtb24tPnJlYWRfY29tcGxldGlvbik7CisJbXV0ZXhfaW5pdCgmaHdtb24tPmxvY2spOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaHdtb24pOworCisJcmV0ID0gcmVxdWVzdF9pcnEoaHdtb24tPmlycSwgano0NzQwX2h3bW9uX2lycSwgMCwgcGRldi0+bmFtZSwgaHdtb24pOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgaXJxOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfaW91bm1hcDsKKwl9CisJZGlzYWJsZV9pcnEoaHdtb24tPmlycSk7CisKKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmano0NzQwX2h3bW9uX2F0dHJfZ3JvdXApOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBncm91cDogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2ZyZWVfaXJxOworCX0KKworCWh3bW9uLT5od21vbiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2KTsKKwlpZiAoSVNfRVJSKGh3bW9uLT5od21vbikpIHsKKwkJcmV0ID0gUFRSX0VSUihod21vbi0+aHdtb24pOworCQlnb3RvIGVycl9yZW1vdmVfZmlsZTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX3JlbW92ZV9maWxlOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZqejQ3NDBfaHdtb25fYXR0cl9ncm91cCk7CitlcnJfZnJlZV9pcnE6CisJZnJlZV9pcnEoaHdtb24tPmlycSwgaHdtb24pOworZXJyX2lvdW5tYXA6CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJaW91bm1hcChod21vbi0+YmFzZSk7CitlcnJfcmVsZWFzZV9tZW1fcmVnaW9uOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihod21vbi0+bWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShod21vbi0+bWVtKSk7CitlcnJfZnJlZToKKwlrZnJlZShod21vbik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBqejQ3NDBfaHdtb25fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGp6NDc0MF9od21vbiAqaHdtb24gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGh3bW9uLT5od21vbik7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJmp6NDc0MF9od21vbl9hdHRyX2dyb3VwKTsKKworCWZyZWVfaXJxKGh3bW9uLT5pcnEsIGh3bW9uKTsKKworCWlvdW5tYXAoaHdtb24tPmJhc2UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihod21vbi0+bWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShod21vbi0+bWVtKSk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlrZnJlZShod21vbik7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBqejQ3NDBfaHdtb25fZHJpdmVyID0geworCS5wcm9iZQk9IGp6NDc0MF9od21vbl9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aoano0NzQwX2h3bW9uX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiano0NzQwLWh3bW9uIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGp6NDc0MF9od21vbl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmano0NzQwX2h3bW9uX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChqejQ3NDBfaHdtb25faW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBqejQ3NDBfaHdtb25fZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZqejQ3NDBfaHdtb25fZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGp6NDc0MF9od21vbl9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJKWjQ3NDAgU29DIEhXTU9OIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmp6NDc0MC1od21vbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9rOHRlbXAuYyBiL2RyaXZlcnMvaHdtb24vazh0ZW1wLmMKaW5kZXggZjI2YWNkYi4uOGJkZjgwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9rOHRlbXAuYworKysgYi9kcml2ZXJzL2h3bW9uL2s4dGVtcC5jCkBAIC0xODAsMTEgKzE4MCwxMyBAQAogCQl9CiAKIAkJaWYgKChtb2RlbCA+PSAweDY5KSAmJgotCQkgICAgIShtb2RlbCA9PSAweGMxIHx8IG1vZGVsID09IDB4NmMgfHwgbW9kZWwgPT0gMHg3YykpIHsKKwkJICAgICEobW9kZWwgPT0gMHhjMSB8fCBtb2RlbCA9PSAweDZjIHx8IG1vZGVsID09IDB4N2MgfHwKKwkJICAgICAgbW9kZWwgPT0gMHg2YiB8fCBtb2RlbCA9PSAweDZmIHx8IG1vZGVsID09IDB4N2YpKSB7CiAJCQkvKgotCQkJICogUmV2RyBkZXNrdG9wIENQVXMgKGkuZS4gbm8gc29ja2V0IFMxRzEgcGFydHMpCi0JCQkgKiBuZWVkIGFkZGl0aW9uYWwgb2Zmc2V0LCBvdGhlcndpc2UgcmVwb3J0ZWQKLQkJCSAqIHRlbXBlcmF0dXJlIGlzIGJlbG93IGFtYmllbnQgdGVtcGVyYXR1cmUKKwkJCSAqIFJldkcgZGVza3RvcCBDUFVzIChpLmUuIG5vIHNvY2tldCBTMUcxIG9yCisJCQkgKiBBU0IxIHBhcnRzKSBuZWVkIGFkZGl0aW9uYWwgb2Zmc2V0LAorCQkJICogb3RoZXJ3aXNlIHJlcG9ydGVkIHRlbXBlcmF0dXJlIGlzIGJlbG93CisJCQkgKiBhbWJpZW50IHRlbXBlcmF0dXJlCiAJCQkgKi8KIAkJCWRhdGEtPnRlbXBfb2Zmc2V0ID0gMjEwMDA7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vcGtndGVtcC5jIGIvZHJpdmVycy9od21vbi9wa2d0ZW1wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQxNTdmYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaHdtb24vcGtndGVtcC5jCkBAIC0wLDAgKzEsNDU2IEBACisvKgorICogcGtndGVtcC5jIC0gTGludXgga2VybmVsIG1vZHVsZSBmb3IgcHJvY2Vzc29yIHBhY2thZ2UgaGFyZHdhcmUgbW9uaXRvcmluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBGZW5naHVhIFl1IDxmZW5naHVhLnl1QGludGVsLmNvbT4KKyAqCisgKiBJbnNwaXJlZCBmcm9tIG1hbnkgaHdtb24gZHJpdmVycyBlc3BlY2lhbGx5IGNvcmV0ZW1wLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vbXNyLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCisjZGVmaW5lIERSVk5BTUUJInBrZ3RlbXAiCisKK2VudW0geyBTSE9XX1RFTVAsIFNIT1dfVEpNQVgsIFNIT1dfVFRBUkdFVCwgU0hPV19MQUJFTCwgU0hPV19OQU1FIH07CisKKy8qCisgKiBGdW5jdGlvbnMgZGVjbGFyYXRpb24KKyAqLworCitzdGF0aWMgc3RydWN0IHBrZ3RlbXBfZGF0YSAqcGtndGVtcF91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7CisKK3N0cnVjdCBwa2d0ZW1wX2RhdGEgeworCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKKwlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1MzIgaWQ7CisJdTE2IHBoeXNfcHJvY19pZDsKKwljaGFyIHZhbGlkOwkJLyogemVybyB1bnRpbCBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLworCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOwkvKiBpbiBqaWZmaWVzICovCisJaW50IHRlbXA7CisJaW50IHRqbWF4OworCWludCB0dGFyZ2V0OworCXU4IGFsYXJtOworfTsKKworLyoKKyAqIFN5c2ZzIHN0dWZmCisgKi8KKworc3RhdGljIHNzaXplX3Qgc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUKKwkJCSAgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3QgcGtndGVtcF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoYXR0ci0+aW5kZXggPT0gU0hPV19OQU1FKQorCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBkYXRhLT5uYW1lKTsKKwllbHNlCS8qIHNob3cgbGFiZWwgKi8KKwkJcmV0ID0gc3ByaW50ZihidWYsICJwaHlzaWNhbCBpZCAlZFxuIiwKKwkJCSAgICAgIGRhdGEtPnBoeXNfcHJvY19pZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCisJCQkgICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBrZ3RlbXBfZGF0YSAqZGF0YSA9IHBrZ3RlbXBfdXBkYXRlX2RldmljZShkZXYpOworCS8qIHJlYWQgdGhlIE91dC1vZi1zcGVjIGxvZywgbmV2ZXIgY2xlYXIgKi8KKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+YWxhcm0pOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXAoc3RydWN0IGRldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCBwa2d0ZW1wX2RhdGEgKmRhdGEgPSBwa2d0ZW1wX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlpbnQgZXJyID0gMDsKKworCWlmIChhdHRyLT5pbmRleCA9PSBTSE9XX1RFTVApCisJCWVyciA9IGRhdGEtPnZhbGlkID8gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+dGVtcCkgOiAtRUFHQUlOOworCWVsc2UgaWYgKGF0dHItPmluZGV4ID09IFNIT1dfVEpNQVgpCisJCWVyciA9IHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPnRqbWF4KTsKKwllbHNlCisJCWVyciA9IHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPnR0YXJnZXQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgU0hPV19URU1QKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfY3JpdCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCBTSE9XX1RKTUFYKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIFNIT1dfVFRBUkdFVCk7CitzdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfY3JpdF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2xhYmVsLCBTX0lSVUdPLCBzaG93X25hbWUsIE5VTEwsIFNIT1dfTEFCRUwpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93X25hbWUsIE5VTEwsIFNIT1dfTkFNRSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpwa2d0ZW1wX2F0dHJpYnV0ZXNbXSA9IHsKKwkmc2Vuc29yX2Rldl9hdHRyX25hbWUuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2xhYmVsLmRldl9hdHRyLmF0dHIsCisJJmRldl9hdHRyX3RlbXAxX2NyaXRfYWxhcm0uYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9jcml0LmRldl9hdHRyLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcGtndGVtcF9ncm91cCA9IHsKKwkuYXR0cnMgPSBwa2d0ZW1wX2F0dHJpYnV0ZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBrZ3RlbXBfZGF0YSAqcGtndGVtcF91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGtndGVtcF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgaW50IGNwdTsKKwlpbnQgZXJyOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJaWYgKCFkYXRhLT52YWxpZCB8fCB0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIEhaKSkgeworCQl1MzIgZWF4LCBlZHg7CisKKwkJZGF0YS0+dmFsaWQgPSAwOworCQljcHUgPSBkYXRhLT5pZDsKKwkJZXJyID0gcmRtc3Jfb25fY3B1KGNwdSwgTVNSX0lBMzJfUEFDS0FHRV9USEVSTV9TVEFUVVMsCisJCQkJICAgJmVheCwgJmVkeCk7CisJCWlmICghZXJyKSB7CisJCQlkYXRhLT5hbGFybSA9IChlYXggPj4gNSkgJiAxOworCQkJZGF0YS0+dGVtcCA9IGRhdGEtPnRqbWF4IC0gKCgoZWF4ID4+IDE2KQorCQkJCQkJCSYgMHg3ZikgKiAxMDAwKTsKKwkJCWRhdGEtPnZhbGlkID0gMTsKKwkJfSBlbHNlCisJCQlkZXZfZGJnKGRldiwgIlRlbXBlcmF0dXJlIGRhdGEgaW52YWxpZCAoMHgleClcbiIsIGVheCk7CisKKwkJZGF0YS0+bGFzdF91cGRhdGVkID0gamlmZmllczsKKwl9CisKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIGludCBnZXRfdGptYXgoaW50IGNwdSwgc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCBkZWZhdWx0X3RqbWF4ID0gMTAwMDAwOworCWludCBlcnI7CisJdTMyIGVheCwgZWR4OworCXUzMiB2YWw7CisKKwkvKiBJQTMyX1RFTVBFUkFUVVJFX1RBUkdFVCBjb250YWlucyB0aGUgVGpNYXggdmFsdWUgKi8KKwllcnIgPSByZG1zcl9zYWZlX29uX2NwdShjcHUsIE1TUl9JQTMyX1RFTVBFUkFUVVJFX1RBUkdFVCwgJmVheCwgJmVkeCk7CisJaWYgKCFlcnIpIHsKKwkJdmFsID0gKGVheCA+PiAxNikgJiAweGZmOworCQlpZiAoKHZhbCA+IDgwKSAmJiAodmFsIDwgMTIwKSkgeworCQkJZGV2X2luZm8oZGV2LCAiVGpNYXggaXMgJWQgQy5cbiIsIHZhbCk7CisJCQlyZXR1cm4gdmFsICogMTAwMDsKKwkJfQorCX0KKwlkZXZfd2FybihkZXYsICJVbmFibGUgdG8gcmVhZCBUak1heCBmcm9tIENQVS5cbiIpOworCXJldHVybiBkZWZhdWx0X3RqbWF4OworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwa2d0ZW1wX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHBrZ3RlbXBfZGF0YSAqZGF0YTsKKwlpbnQgZXJyOworCXUzMiBlYXgsIGVkeDsKKyNpZmRlZiBDT05GSUdfU01QCisJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKHBkZXYtPmlkKTsKKyNlbmRpZgorCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwa2d0ZW1wX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlkYXRhLT5pZCA9IHBkZXYtPmlkOworI2lmZGVmIENPTkZJR19TTVAKKwlkYXRhLT5waHlzX3Byb2NfaWQgPSBjLT5waHlzX3Byb2NfaWQ7CisjZW5kaWYKKwlkYXRhLT5uYW1lID0gInBrZ3RlbXAiOworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCS8qIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgVEhFUk1fU1RBVFVTIE1TUiAqLworCWVyciA9IHJkbXNyX3NhZmVfb25fY3B1KGRhdGEtPmlkLCBNU1JfSUEzMl9QQUNLQUdFX1RIRVJNX1NUQVRVUywKKwkJCQkmZWF4LCAmZWR4KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJVbmFibGUgdG8gYWNjZXNzIFRIRVJNX1NUQVRVUyBNU1IsIGdpdmluZyB1cFxuIik7CisJCWdvdG8gZXhpdF9mcmVlOworCX0KKworCWRhdGEtPnRqbWF4ID0gZ2V0X3RqbWF4KGRhdGEtPmlkLCAmcGRldi0+ZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkYXRhKTsKKworCWVyciA9IHJkbXNyX3NhZmVfb25fY3B1KGRhdGEtPmlkLCBNU1JfSUEzMl9URU1QRVJBVFVSRV9UQVJHRVQsCisJCQkJJmVheCwgJmVkeCk7CisJaWYgKGVycikgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIHJlYWQiCisJCQkJIiBJQTMyX1RFTVBFUkFUVVJFX1RBUkdFVCBNU1JcbiIpOworCX0gZWxzZSB7CisJCWRhdGEtPnR0YXJnZXQgPSBkYXRhLT50am1heCAtICgoKGVheCA+PiA4KSAmIDB4ZmYpICogMTAwMCk7CisJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LAorCQkJCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXhpdF9mcmVlOworCX0KKworCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZwa2d0ZW1wX2dyb3VwKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfZnJlZTsKKworCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2KTsKKwlpZiAoSVNfRVJSKGRhdGEtPmh3bW9uX2RldikpIHsKKwkJZXJyID0gUFRSX0VSUihkYXRhLT5od21vbl9kZXYpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDbGFzcyByZWdpc3RyYXRpb24gZmFpbGVkICglZClcbiIsCisJCQllcnIpOworCQlnb3RvIGV4aXRfY2xhc3M7CisJfQorCisJcmV0dXJuIDA7CisKK2V4aXRfY2xhc3M6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnBrZ3RlbXBfZ3JvdXApOworZXhpdF9mcmVlOgorCWtmcmVlKGRhdGEpOworZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBwa2d0ZW1wX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwa2d0ZW1wX2RhdGEgKmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnBrZ3RlbXBfZ3JvdXApOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWtmcmVlKGRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwa2d0ZW1wX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgPSBEUlZOQU1FLAorCX0sCisJLnByb2JlID0gcGtndGVtcF9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AocGtndGVtcF9yZW1vdmUpLAorfTsKKworc3RydWN0IHBkZXZfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXVuc2lnbmVkIGludCBjcHU7CisjaWZkZWYgQ09ORklHX1NNUAorCXUxNiBwaHlzX3Byb2NfaWQ7CisjZW5kaWYKK307CisKK3N0YXRpYyBMSVNUX0hFQUQocGRldl9saXN0KTsKK3N0YXRpYyBERUZJTkVfTVVURVgocGRldl9saXN0X211dGV4KTsKKworc3RhdGljIGludCBfX2NwdWluaXQgcGtndGVtcF9kZXZpY2VfYWRkKHVuc2lnbmVkIGludCBjcHUpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBwZGV2X2VudHJ5ICpwZGV2X2VudHJ5OworI2lmZGVmIENPTkZJR19TTVAKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoY3B1KTsKKyNlbmRpZgorCisJbXV0ZXhfbG9jaygmcGRldl9saXN0X211dGV4KTsKKworI2lmZGVmIENPTkZJR19TTVAKKwkvKiBPbmx5IGtlZXAgdGhlIGZpcnN0IGVudHJ5IGluIGVhY2ggcGFja2FnZSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkocGRldl9lbnRyeSwgJnBkZXZfbGlzdCwgbGlzdCkgeworCQlpZiAoYy0+cGh5c19wcm9jX2lkID09IHBkZXZfZW50cnktPnBoeXNfcHJvY19pZCkgeworCQkJZXJyID0gMDsgICAgICAgIC8qIE5vdCBhbiBlcnJvciAqLworCQkJZ290byBleGl0OworCQl9CisJfQorI2VuZGlmCisKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKERSVk5BTUUsIGNwdSk7CisJaWYgKCFwZGV2KSB7CisJCWVyciA9IC1FTk9NRU07CisJCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FICI6IERldmljZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlwZGV2X2VudHJ5ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBkZXZfZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBkZXZfZW50cnkpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBleGl0X2RldmljZV9wdXQ7CisJfQorCisJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FICI6IERldmljZSBhZGRpdGlvbiBmYWlsZWQgKCVkKVxuIiwKKwkJICAgICAgIGVycik7CisJCWdvdG8gZXhpdF9kZXZpY2VfZnJlZTsKKwl9CisKKyNpZmRlZiBDT05GSUdfU01QCisJcGRldl9lbnRyeS0+cGh5c19wcm9jX2lkID0gYy0+cGh5c19wcm9jX2lkOworI2VuZGlmCisJcGRldl9lbnRyeS0+cGRldiA9IHBkZXY7CisJcGRldl9lbnRyeS0+Y3B1ID0gY3B1OworCWxpc3RfYWRkX3RhaWwoJnBkZXZfZW50cnktPmxpc3QsICZwZGV2X2xpc3QpOworCW11dGV4X3VubG9jaygmcGRldl9saXN0X211dGV4KTsKKworCXJldHVybiAwOworCitleGl0X2RldmljZV9mcmVlOgorCWtmcmVlKHBkZXZfZW50cnkpOworZXhpdF9kZXZpY2VfcHV0OgorCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CitleGl0OgorCW11dGV4X3VubG9jaygmcGRldl9saXN0X211dGV4KTsKKwlyZXR1cm4gZXJyOworfQorCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCitzdGF0aWMgdm9pZCBwa2d0ZW1wX2RldmljZV9yZW1vdmUodW5zaWduZWQgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgcGRldl9lbnRyeSAqcCwgKm47CisJdW5zaWduZWQgaW50IGk7CisJaW50IGVycjsKKworCW11dGV4X2xvY2soJnBkZXZfbGlzdF9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZwZGV2X2xpc3QsIGxpc3QpIHsKKwkJaWYgKHAtPmNwdSAhPSBjcHUpCisJCQljb250aW51ZTsKKworCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwLT5wZGV2KTsKKwkJbGlzdF9kZWwoJnAtPmxpc3QpOworCQlrZnJlZShwKTsKKwkJZm9yX2VhY2hfY3B1KGksIGNwdV9jb3JlX21hc2soY3B1KSkgeworCQkJaWYgKGkgIT0gY3B1KSB7CisJCQkJZXJyID0gcGtndGVtcF9kZXZpY2VfYWRkKGkpOworCQkJCWlmICghZXJyKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlicmVhazsKKwl9CisJbXV0ZXhfdW5sb2NrKCZwZGV2X2xpc3RfbXV0ZXgpOworfQorCitzdGF0aWMgaW50IF9fY3B1aW5pdCBwa2d0ZW1wX2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKKwkJCQkgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJdW5zaWduZWQgaW50IGNwdSA9ICh1bnNpZ25lZCBsb25nKSBoY3B1OworCisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIENQVV9PTkxJTkU6CisJY2FzZSBDUFVfRE9XTl9GQUlMRUQ6CisJCXBrZ3RlbXBfZGV2aWNlX2FkZChjcHUpOworCQlicmVhazsKKwljYXNlIENQVV9ET1dOX1BSRVBBUkU6CisJCXBrZ3RlbXBfZGV2aWNlX3JlbW92ZShjcHUpOworCQlicmVhazsKKwl9CisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwa2d0ZW1wX2NwdV9ub3RpZmllciBfX3JlZmRhdGEgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBwa2d0ZW1wX2NwdV9jYWxsYmFjaywKK307CisjZW5kaWYJCQkJLyogIUNPTkZJR19IT1RQTFVHX0NQVSAqLworCitzdGF0aWMgaW50IF9faW5pdCBwa2d0ZW1wX2luaXQodm9pZCkKK3sKKwlpbnQgaSwgZXJyID0gLUVOT0RFVjsKKwlzdHJ1Y3QgcGRldl9lbnRyeSAqcCwgKm47CisKKwkvKiBxdWljayBjaGVjayBpZiB3ZSBydW4gSW50ZWwgKi8KKwlpZiAoY3B1X2RhdGEoMCkueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVMKQorCQlnb3RvIGV4aXQ7CisKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnBrZ3RlbXBfZHJpdmVyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKKwkJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKGkpOworCisJCWlmICghY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9QVFMpKQorCQkJY29udGludWU7CisKKwkJZXJyID0gcGtndGVtcF9kZXZpY2VfYWRkKGkpOworCQlpZiAoZXJyKQorCQkJZ290byBleGl0X2RldmljZXNfdW5yZWc7CisJfQorCWlmIChsaXN0X2VtcHR5KCZwZGV2X2xpc3QpKSB7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdF9kcml2ZXJfdW5yZWc7CisJfQorCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisJcmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZwa2d0ZW1wX2NwdV9ub3RpZmllcik7CisjZW5kaWYKKwlyZXR1cm4gMDsKKworZXhpdF9kZXZpY2VzX3VucmVnOgorCW11dGV4X2xvY2soJnBkZXZfbGlzdF9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZwZGV2X2xpc3QsIGxpc3QpIHsKKwkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocC0+cGRldik7CisJCWxpc3RfZGVsKCZwLT5saXN0KTsKKwkJa2ZyZWUocCk7CisJfQorCW11dGV4X3VubG9jaygmcGRldl9saXN0X211dGV4KTsKK2V4aXRfZHJpdmVyX3VucmVnOgorCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwa2d0ZW1wX2RyaXZlcik7CitleGl0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwa2d0ZW1wX2V4aXQodm9pZCkKK3sKKwlzdHJ1Y3QgcGRldl9lbnRyeSAqcCwgKm47CisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisJdW5yZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJnBrZ3RlbXBfY3B1X25vdGlmaWVyKTsKKyNlbmRpZgorCW11dGV4X2xvY2soJnBkZXZfbGlzdF9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZwZGV2X2xpc3QsIGxpc3QpIHsKKwkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocC0+cGRldik7CisJCWxpc3RfZGVsKCZwLT5saXN0KTsKKwkJa2ZyZWUocCk7CisJfQorCW11dGV4X3VubG9jaygmcGRldl9saXN0X211dGV4KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGtndGVtcF9kcml2ZXIpOworfQorCitNT0RVTEVfQVVUSE9SKCJGZW5naHVhIFl1IDxmZW5naHVhLnl1QGludGVsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSW50ZWwgcHJvY2Vzc29yIHBhY2thZ2UgdGVtcGVyYXR1cmUgbW9uaXRvciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfaW5pdChwa2d0ZW1wX2luaXQpCittb2R1bGVfZXhpdChwa2d0ZW1wX2V4aXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3VsdHJhNDVfZW52LmMgYi9kcml2ZXJzL2h3bW9uL3VsdHJhNDVfZW52LmMKaW5kZXggNWRhNTk0Mi4uODk2NDMyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi91bHRyYTQ1X2Vudi5jCisrKyBiL2RyaXZlcnMvaHdtb24vdWx0cmE0NV9lbnYuYwpAQCAtMzExLDEyICszMTEsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgZW52X2luaXQodm9pZCkKIHsKLQlyZXR1cm4gb2ZfcmVnaXN0ZXJfZHJpdmVyKCZlbnZfZHJpdmVyLCAmb2ZfYnVzX3R5cGUpOworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmVudl9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZW52X2V4aXQodm9pZCkKIHsKLQlvZl91bnJlZ2lzdGVyX2RyaXZlcigmZW52X2RyaXZlcik7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmVudl9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChlbnZfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWNwbS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1jcG0uYwppbmRleCBiMDJiNDUzLi5lNTkxZGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWNwbS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtY3BtLmMKQEAgLTY1Miw2ICs2NTIsNyBAQAogCWNwbS0+YWRhcCA9IGNwbV9vcHM7CiAJaTJjX3NldF9hZGFwZGF0YSgmY3BtLT5hZGFwLCBjcG0pOwogCWNwbS0+YWRhcC5kZXYucGFyZW50ID0gJm9mZGV2LT5kZXY7CisJY3BtLT5hZGFwLmRldi5vZl9ub2RlID0gb2Zfbm9kZV9nZXQob2ZkZXYtPmRldi5vZl9ub2RlKTsKIAogCXJlc3VsdCA9IGNwbV9pMmNfc2V0dXAoY3BtKTsKIAlpZiAocmVzdWx0KSB7CkBAIC02NzYsMTEgKzY3Nyw2IEBACiAJZGV2X2RiZygmb2ZkZXYtPmRldiwgImh3IHJvdXRpbmVzIGZvciAlcyByZWdpc3RlcmVkLlxuIiwKIAkJY3BtLT5hZGFwLm5hbWUpOwogCi0JLyoKLQkgKiByZWdpc3RlciBPRiBJMkMgZGV2aWNlcwotCSAqLwotCW9mX3JlZ2lzdGVyX2kyY19kZXZpY2VzKCZjcG0tPmFkYXAsIG9mZGV2LT5kZXYub2Zfbm9kZSk7Ci0KIAlyZXR1cm4gMDsKIG91dF9zaHV0OgogCWNwbV9pMmNfc2h1dGRvd24oY3BtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKaW5kZXggZjRiMjFmMi4uYzYwMDgxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKQEAgLTY1NSw3ICs2NTUsNyBAQAogCQkvKiAmIH4weDgwLCBpZ25vcmUgZW5hYmxlZC9kaXNhYmxlZCBiaXQgKi8KIAkJaWYgKCh0eXBlICYgfjB4ODApICE9IGRtaV9kZXZpY2VzW2ldLnR5cGUpCiAJCQljb250aW51ZTsKLQkJaWYgKHN0cmNtcChuYW1lLCBkbWlfZGV2aWNlc1tpXS5uYW1lKSkKKwkJaWYgKHN0cmNhc2VjbXAobmFtZSwgZG1pX2RldmljZXNbaV0ubmFtZSkpCiAJCQljb250aW51ZTsKIAogCQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKQEAgLTcwNCw5ICs3MDQsNiBAQAogewogCXVuc2lnbmVkIGNoYXIgdGVtcDsKIAlpbnQgZXJyLCBpOwotI2lmIGRlZmluZWQgQ09ORklHX1NFTlNPUlNfRlNDSE1EIHx8IGRlZmluZWQgQ09ORklHX1NFTlNPUlNfRlNDSE1EX01PRFVMRQotCWNvbnN0IGNoYXIgKnZlbmRvcjsKLSNlbmRpZgogCiAJSTgwMV9kZXYgPSBkZXY7CiAJaTgwMV9mZWF0dXJlcyA9IDA7CkBAIC04MDgsOCArODA1LDcgQEAKIAl9CiAjZW5kaWYKICNpZiBkZWZpbmVkIENPTkZJR19TRU5TT1JTX0ZTQ0hNRCB8fCBkZWZpbmVkIENPTkZJR19TRU5TT1JTX0ZTQ0hNRF9NT0RVTEUKLQl2ZW5kb3IgPSBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CT0FSRF9WRU5ET1IpOwotCWlmICh2ZW5kb3IgJiYgIXN0cmNtcCh2ZW5kb3IsICJGVUpJVFNVIFNJRU1FTlMiKSkKKwlpZiAoZG1pX25hbWVfaW5fdmVuZG9ycygiRlVKSVRTVSIpKQogCQlkbWlfd2FsayhkbWlfY2hlY2tfb25ib2FyZF9kZXZpY2VzLCAmaTgwMV9hZGFwdGVyKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlibV9paWMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaWJtX2lpYy5jCmluZGV4IGJmMzQ0MTMuLjExNjhkNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaWJtX2lpYy5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaWJtX2lpYy5jCkBAIC03NDUsNiArNzQ1LDcgQEAKIAkvKiBSZWdpc3RlciBpdCB3aXRoIGkyYyBsYXllciAqLwogCWFkYXAgPSAmZGV2LT5hZGFwOwogCWFkYXAtPmRldi5wYXJlbnQgPSAmb2ZkZXYtPmRldjsKKwlhZGFwLT5kZXYub2Zfbm9kZSA9IG9mX25vZGVfZ2V0KG5wKTsKIAlzdHJsY3B5KGFkYXAtPm5hbWUsICJJQk0gSUlDIiwgc2l6ZW9mKGFkYXAtPm5hbWUpKTsKIAlpMmNfc2V0X2FkYXBkYXRhKGFkYXAsIGRldik7CiAJYWRhcC0+Y2xhc3MgPSBJMkNfQ0xBU1NfSFdNT04gfCBJMkNfQ0xBU1NfU1BEOwpAQCAtNzYwLDkgKzc2MSw2IEBACiAJZGV2X2luZm8oJm9mZGV2LT5kZXYsICJ1c2luZyAlcyBtb2RlXG4iLAogCQkgZGV2LT5mYXN0X21vZGUgPyAiZmFzdCAoNDAwIGtIeikiIDogInN0YW5kYXJkICgxMDAga0h6KSIpOwogCi0JLyogTm93IHJlZ2lzdGVyIGFsbCB0aGUgY2hpbGQgbm9kZXMgKi8KLQlvZl9yZWdpc3Rlcl9pMmNfZGV2aWNlcyhhZGFwLCBucCk7Ci0KIAlyZXR1cm4gMDsKIAogZXJyb3JfY2xlYW51cDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCmluZGV4IGRmMDBlYjEuLjY1NDVkMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYwpAQCAtNjMsNiArNjMsNyBAQAogCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOwogCXN0cnVjdCBpMmNfYWRhcHRlciBhZGFwOwogCWludCBpcnE7CisJdTMyIHJlYWxfY2xrOwogfTsKIAogc3RydWN0IG1wY19pMmNfZGl2aWRlciB7CkBAIC05NiwyMCArOTcsMjMgQEAKIC8qIFNvbWV0aW1lcyA5dGggY2xvY2sgcHVsc2UgaXNuJ3QgZ2VuZXJhdGVkLCBhbmQgc2xhdmUgZG9lc24ndCByZWxlYXNlCiAgKiB0aGUgYnVzLCBiZWNhdXNlIGl0IHdhbnRzIHRvIHNlbmQgQUNLLgogICogRm9sbG93aW5nIHNlcXVlbmNlIG9mIGVuYWJsaW5nL2Rpc2FibGluZyBhbmQgc2VuZGluZyBzdGFydC9zdG9wIGdlbmVyYXRlcwotICogdGhlIHB1bHNlLCBzbyBpdCdzIGFsbCBPSy4KKyAqIHRoZSA5IHB1bHNlcywgc28gaXQncyBhbGwgT0suCiAgKi8KIHN0YXRpYyB2b2lkIG1wY19pMmNfZml4dXAoc3RydWN0IG1wY19pMmMgKmkyYykKIHsKLQl3cml0ZWNjcihpMmMsIDApOwotCXVkZWxheSgzMCk7Ci0Jd3JpdGVjY3IoaTJjLCBDQ1JfTUVOKTsKLQl1ZGVsYXkoMzApOwotCXdyaXRlY2NyKGkyYywgQ0NSX01TVEEgfCBDQ1JfTVRYKTsKLQl1ZGVsYXkoMzApOwotCXdyaXRlY2NyKGkyYywgQ0NSX01TVEEgfCBDQ1JfTVRYIHwgQ0NSX01FTik7Ci0JdWRlbGF5KDMwKTsKLQl3cml0ZWNjcihpMmMsIENDUl9NRU4pOwotCXVkZWxheSgzMCk7CisJaW50IGs7CisJdTMyIGRlbGF5X3ZhbCA9IDEwMDAwMDAgLyBpMmMtPnJlYWxfY2xrICsgMTsKKworCWlmIChkZWxheV92YWwgPCAyKQorCQlkZWxheV92YWwgPSAyOworCisJZm9yIChrID0gOTsgazsgay0tKSB7CisJCXdyaXRlY2NyKGkyYywgMCk7CisJCXdyaXRlY2NyKGkyYywgQ0NSX01TVEEgfCBDQ1JfTVRYIHwgQ0NSX01FTik7CisJCXVkZWxheShkZWxheV92YWwpOworCQl3cml0ZWNjcihpMmMsIENDUl9NRU4pOworCQl1ZGVsYXkoZGVsYXlfdmFsIDw8IDEpOworCX0KIH0KIAogc3RhdGljIGludCBpMmNfd2FpdChzdHJ1Y3QgbXBjX2kyYyAqaTJjLCB1bnNpZ25lZCB0aW1lb3V0LCBpbnQgd3JpdGluZykKQEAgLTE5MCwxNSArMTk0LDE4IEBACiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBtcGNfaTJjX2dldF9mZHJfNTJ4eChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIHUzMiBjbG9jaywKLQkJCQkJICBpbnQgcHJlc2NhbGVyKQorCQkJCQkgIGludCBwcmVzY2FsZXIsIHUzMiAqcmVhbF9jbGspCiB7CiAJY29uc3Qgc3RydWN0IG1wY19pMmNfZGl2aWRlciAqZGl2ID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgcHZyID0gbWZzcHIoU1BSTl9QVlIpOwogCXUzMiBkaXZpZGVyOwogCWludCBpOwogCi0JaWYgKGNsb2NrID09IE1QQ19JMkNfQ0xPQ0tfTEVHQUNZKQorCWlmIChjbG9jayA9PSBNUENfSTJDX0NMT0NLX0xFR0FDWSkgeworCQkvKiBzZWUgYmVsb3cgLSBkZWZhdWx0IGZkciA9IDB4M2YgLT4gZGl2ID0gMjA0OCAqLworCQkqcmVhbF9jbGsgPSBtcGM1eHh4X2dldF9idXNfZnJlcXVlbmN5KG5vZGUpIC8gMjA0ODsKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJLyogRGV0ZXJtaW5lIGRpdmlkZXIgdmFsdWUgKi8KIAlkaXZpZGVyID0gbXBjNXh4eF9nZXRfYnVzX2ZyZXF1ZW5jeShub2RlKSAvIGNsb2NrOwpAQCAtMjE2LDcgKzIyMyw4IEBACiAJCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gZGl2ID8gKGludClkaXYtPmZkciA6IC1FSU5WQUw7CisJKnJlYWxfY2xrID0gbXBjNXh4eF9nZXRfYnVzX2ZyZXF1ZW5jeShub2RlKSAvIGRpdi0+ZGl2aWRlcjsKKwlyZXR1cm4gKGludClkaXYtPmZkcjsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZpbml0IG1wY19pMmNfc2V0dXBfNTJ4eChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCkBAIC0yMzEsMTMgKzIzOSwxNCBAQAogCQlyZXR1cm47CiAJfQogCi0JcmV0ID0gbXBjX2kyY19nZXRfZmRyXzUyeHgobm9kZSwgY2xvY2ssIHByZXNjYWxlcik7CisJcmV0ID0gbXBjX2kyY19nZXRfZmRyXzUyeHgobm9kZSwgY2xvY2ssIHByZXNjYWxlciwgJmkyYy0+cmVhbF9jbGspOwogCWZkciA9IChyZXQgPj0gMCkgPyByZXQgOiAweDNmOyAvKiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCiAKIAl3cml0ZWIoZmRyICYgMHhmZiwgaTJjLT5iYXNlICsgTVBDX0kyQ19GRFIpOwogCiAJaWYgKHJldCA+PSAwKQotCQlkZXZfaW5mbyhpMmMtPmRldiwgImNsb2NrICVkIEh6IChmZHI9JWQpXG4iLCBjbG9jaywgZmRyKTsKKwkJZGV2X2luZm8oaTJjLT5kZXYsICJjbG9jayAldSBIeiAoZmRyPSVkKVxuIiwgaTJjLT5yZWFsX2NsaywKKwkJCSBmZHIpOwogfQogI2Vsc2UgLyogIShDT05GSUdfUFBDX01QQzUyeHggfHwgQ09ORklHX1BQQ19NUEM1MTJ4KSAqLwogc3RhdGljIHZvaWQgX19kZXZpbml0IG1wY19pMmNfc2V0dXBfNTJ4eChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCkBAIC0zMzQsMTQgKzM0MywxNyBAQAogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBtcGNfaTJjX2dldF9mZHJfOHh4eChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIHUzMiBjbG9jaywKLQkJCQkJICB1MzIgcHJlc2NhbGVyKQorCQkJCQkgIHUzMiBwcmVzY2FsZXIsIHUzMiAqcmVhbF9jbGspCiB7CiAJY29uc3Qgc3RydWN0IG1wY19pMmNfZGl2aWRlciAqZGl2ID0gTlVMTDsKIAl1MzIgZGl2aWRlcjsKIAlpbnQgaTsKIAotCWlmIChjbG9jayA9PSBNUENfSTJDX0NMT0NLX0xFR0FDWSkKKwlpZiAoY2xvY2sgPT0gTVBDX0kyQ19DTE9DS19MRUdBQ1kpIHsKKwkJLyogc2VlIGJlbG93IC0gZGVmYXVsdCBmZHIgPSAweDEwMzEgLT4gZGl2ID0gMTYgKiAzMDcyICovCisJCSpyZWFsX2NsayA9IGZzbF9nZXRfc3lzX2ZyZXEoKSAvIHByZXNjYWxlciAvICgxNiAqIDMwNzIpOwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAkvKiBEZXRlcm1pbmUgcHJvcGVyIGRpdmlkZXIgdmFsdWUgKi8KIAlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobm9kZSwgImZzbCxtcGM4NTQ0LWkyYyIpKQpAQCAtMzY0LDYgKzM3Niw3IEBACiAJCQlicmVhazsKIAl9CiAKKwkqcmVhbF9jbGsgPSBmc2xfZ2V0X3N5c19mcmVxKCkgLyBwcmVzY2FsZXIgLyBkaXYtPmRpdmlkZXI7CiAJcmV0dXJuIGRpdiA/IChpbnQpZGl2LT5mZHIgOiAtRUlOVkFMOwogfQogCkBAIC0zODAsNyArMzkzLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCXJldCA9IG1wY19pMmNfZ2V0X2Zkcl84eHh4KG5vZGUsIGNsb2NrLCBwcmVzY2FsZXIpOworCXJldCA9IG1wY19pMmNfZ2V0X2Zkcl84eHh4KG5vZGUsIGNsb2NrLCBwcmVzY2FsZXIsICZpMmMtPnJlYWxfY2xrKTsKIAlmZHIgPSAocmV0ID49IDApID8gcmV0IDogMHgxMDMxOyAvKiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCiAKIAl3cml0ZWIoZmRyICYgMHhmZiwgaTJjLT5iYXNlICsgTVBDX0kyQ19GRFIpOwpAQCAtMzg4LDcgKzQwMSw3IEBACiAKIAlpZiAocmV0ID49IDApCiAJCWRldl9pbmZvKGkyYy0+ZGV2LCAiY2xvY2sgJWQgSHogKGRmc3JyPSVkIGZkcj0lZClcbiIsCi0JCQkgY2xvY2ssIGZkciA+PiA4LCBmZHIgJiAweGZmKTsKKwkJCSBpMmMtPnJlYWxfY2xrLCBmZHIgPj4gOCwgZmRyICYgMHhmZik7CiB9CiAKICNlbHNlIC8qICFDT05GSUdfRlNMX1NPQyAqLwpAQCAtNTAwLDEwICs1MTMsMTQgQEAKIAkJCXJldHVybiAtRUlOVFI7CiAJCX0KIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgb3JpZ19qaWZmaWVzICsgSFopKSB7CisJCQl1OCBzdGF0dXMgPSByZWFkYihpMmMtPmJhc2UgKyBNUENfSTJDX1NSKTsKKwogCQkJZGV2X2RiZyhpMmMtPmRldiwgInRpbWVvdXRcbiIpOwotCQkJaWYgKHJlYWRiKGkyYy0+YmFzZSArIE1QQ19JMkNfU1IpID09Ci0JCQkgICAgKENTUl9NQ0YgfCBDU1JfTUJCIHwgQ1NSX1JYQUspKQorCQkJaWYgKChzdGF0dXMgJiAoQ1NSX01DRiB8IENTUl9NQkIgfCBDU1JfUlhBSykpICE9IDApIHsKKwkJCQl3cml0ZWIoc3RhdHVzICYgfkNTUl9NQUwsCisJCQkJICAgICAgIGkyYy0+YmFzZSArIE1QQ19JMkNfU1IpOwogCQkJCW1wY19pMmNfZml4dXAoaTJjKTsKKwkJCX0KIAkJCXJldHVybiAtRUlPOwogCQl9CiAJCXNjaGVkdWxlKCk7CkBAIC01OTUsMTggKzYxMiwyNiBAQAogCQkJbXBjX2kyY19zZXR1cF84eHh4KG9wLT5kZXYub2Zfbm9kZSwgaTJjLCBjbG9jaywgMCk7CiAJfQogCisJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShvcC0+ZGV2Lm9mX25vZGUsICJmc2wsdGltZW91dCIsICZwbGVuKTsKKwlpZiAocHJvcCAmJiBwbGVuID09IHNpemVvZih1MzIpKSB7CisJCW1wY19vcHMudGltZW91dCA9ICpwcm9wICogSFogLyAxMDAwMDAwOworCQlpZiAobXBjX29wcy50aW1lb3V0IDwgNSkKKwkJCW1wY19vcHMudGltZW91dCA9IDU7CisJfQorCWRldl9pbmZvKGkyYy0+ZGV2LCAidGltZW91dCAldSB1c1xuIiwgbXBjX29wcy50aW1lb3V0ICogMTAwMDAwMCAvIEhaKTsKKwogCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgaTJjKTsKIAogCWkyYy0+YWRhcCA9IG1wY19vcHM7CiAJaTJjX3NldF9hZGFwZGF0YSgmaTJjLT5hZGFwLCBpMmMpOwogCWkyYy0+YWRhcC5kZXYucGFyZW50ID0gJm9wLT5kZXY7CisJaTJjLT5hZGFwLmRldi5vZl9ub2RlID0gb2Zfbm9kZV9nZXQob3AtPmRldi5vZl9ub2RlKTsKIAogCXJlc3VsdCA9IGkyY19hZGRfYWRhcHRlcigmaTJjLT5hZGFwKTsKIAlpZiAocmVzdWx0IDwgMCkgewogCQlkZXZfZXJyKGkyYy0+ZGV2LCAiZmFpbGVkIHRvIGFkZCBhZGFwdGVyXG4iKTsKIAkJZ290byBmYWlsX2FkZDsKIAl9Ci0Jb2ZfcmVnaXN0ZXJfaTJjX2RldmljZXMoJmkyYy0+YWRhcCwgb3AtPmRldi5vZl9ub2RlKTsKIAogCXJldHVybiByZXN1bHQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lieXRlLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpYnl0ZS5jCmluZGV4IDNkNzZhMTguLjBmZTUwNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lieXRlLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaWJ5dGUuYwpAQCAtOTQsNyArOTQsNyBAQAogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtMTsgICAgICAvKiBYWFhLVyBiZXR0ZXIgZXJyb3IgY29kZT8gKi8KKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAogCXdoaWxlIChjc3JfaW4zMihTTUJfQ1NSKGFkYXAsIFJfU01CX1NUQVRVUykpICYgTV9TTUJfQlVTWSkKQEAgLTEwNCw3ICsxMDQsNyBAQAogCWlmIChlcnJvciAmIE1fU01CX0VSUk9SKSB7CiAJCS8qIENsZWFyIGVycm9yIGJpdCBieSB3cml0aW5nIGEgMSAqLwogCQljc3Jfb3V0MzIoTV9TTUJfRVJST1IsIFNNQl9DU1IoYWRhcCwgUl9TTUJfU1RBVFVTKSk7Ci0JCXJldHVybiAtMTsgICAgICAvKiBYWFhLVyBiZXR0ZXIgZXJyb3IgY29kZT8gKi8KKwkJcmV0dXJuIChlcnJvciAmIE1fU01CX0VSUk9SX1RZUEUpID8gLUVJTyA6IC1FTlhJTzsKIAl9CiAKIAlpZiAoZGF0YV9ieXRlcyA9PSAxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKaW5kZXggMWNjYTI2My4uZGY5MzdkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaTJjLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgpAQCAtNzAsNiArNzIsMTAgQEAKIAlpZiAoIWNsaWVudCkKIAkJcmV0dXJuIDA7CiAKKwkvKiBBdHRlbXB0IGFuIE9GIHN0eWxlIG1hdGNoICovCisJaWYgKG9mX2RyaXZlcl9tYXRjaF9kZXZpY2UoZGV2LCBkcnYpKQorCQlyZXR1cm4gMTsKKwogCWRyaXZlciA9IHRvX2kyY19kcml2ZXIoZHJ2KTsKIAkvKiBtYXRjaCBvbiBhbiBpZCB0YWJsZSBpZiB0aGVyZSBpcyBvbmUgKi8KIAlpZiAoZHJpdmVyLT5pZF90YWJsZSkKQEAgLTc5MCw2ICs3OTYsOSBAQAogCWlmIChhZGFwLT5uciA8IF9faTJjX2ZpcnN0X2R5bmFtaWNfYnVzX251bSkKIAkJaTJjX3NjYW5fc3RhdGljX2JvYXJkX2luZm8oYWRhcCk7CiAKKwkvKiBSZWdpc3RlciBkZXZpY2VzIGZyb20gdGhlIGRldmljZSB0cmVlICovCisJb2ZfaTJjX3JlZ2lzdGVyX2RldmljZXMoYWRhcCk7CisKIAkvKiBOb3RpZnkgZHJpdmVycyAqLwogCW11dGV4X2xvY2soJmNvcmVfbG9jayk7CiAJZHVtbXkgPSBidXNfZm9yX2VhY2hfZHJ2KCZpMmNfYnVzX3R5cGUsIE5VTEwsIGFkYXAsCkBAIC0xNDI4LDEzICsxNDM3LDEyIEBACiAJaWYgKCEoYWRhcHRlci0+Y2xhc3MgJiBkcml2ZXItPmNsYXNzKSkKIAkJZ290byBleGl0X2ZyZWU7CiAKLQkvKiBTdG9wIGhlcmUgaWYgd2UgY2FuJ3QgdXNlIFNNQlVTX1FVSUNLICovCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19RVUlDSykpIHsKKwkvKiBTdG9wIGhlcmUgaWYgdGhlIGJ1cyBkb2Vzbid0IHN1cHBvcnQgcHJvYmluZyAqLworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFKSkgewogCQlpZiAoYWRkcmVzc19saXN0WzBdID09IEkyQ19DTElFTlRfRU5EKQogCQkJZ290byBleGl0X2ZyZWU7CiAKLQkJZGV2X3dhcm4oJmFkYXB0ZXItPmRldiwgIlNNQnVzIFF1aWNrIGNvbW1hbmQgbm90IHN1cHBvcnRlZCwgIgotCQkJICJjYW4ndCBwcm9iZSBmb3IgY2hpcHNcbiIpOworCQlkZXZfd2FybigmYWRhcHRlci0+ZGV2LCAiUHJvYmluZyBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gZXhpdF9mcmVlOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1jcy5jIGIvZHJpdmVycy9pZGUvaWRlLWNzLmMKaW5kZXggMGI3ODE1ZC4uMmE0Y2I5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWNzLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWNzLmMKQEAgLTQzLDcgKzQzLDYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CkBAIC05OCw5ICs5Nyw4IEBACiAgICAgaW5mby0+cF9kZXYgPSBsaW5rOwogICAgIGxpbmstPnByaXYgPSBpbmZvOwogCi0gICAgbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLSAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotICAgIGxpbmstPmlvLklPQWRkckxpbmVzID0gMzsKKyAgICBsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisgICAgbGluay0+cmVzb3VyY2VbMV0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF84OwogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIApAQCAtMjI5LDI0ICsyMjcsMjcgQEAKIAogCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQtPmlvLm53aW4gPiAwKSkgewogCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQtPmlvOworCQlwZGV2LT5pb19saW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCiAJCXBkZXYtPmNvbmYuQ29uZmlnSW5kZXggPSBjZmctPmluZGV4OwotCQlwZGV2LT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7Ci0JCXBkZXYtPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCi0JCQlwZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OworCQlwZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBpby0+d2luWzBdLmJhc2U7CisJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpIHsKKwkJCXBkZXYtPnJlc291cmNlWzBdLT5mbGFncyAmPSB+SU9fREFUQV9QQVRIX1dJRFRIOworCQkJcGRldi0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF84OworCQl9CiAJCWlmIChpby0+bndpbiA9PSAyKSB7Ci0JCQlwZGV2LT5pby5OdW1Qb3J0czEgPSA4OwotCQkJcGRldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOwotCQkJcGRldi0+aW8uTnVtUG9ydHMyID0gKHN0ay0+aXNfa21lKSA/IDIgOiAxOwotCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBkZXYsICZwZGV2LT5pbykgIT0gMCkKKwkJCXBkZXYtPnJlc291cmNlWzBdLT5lbmQgPSA4OworCQkJcGRldi0+cmVzb3VyY2VbMV0tPnN0YXJ0ID0gaW8tPndpblsxXS5iYXNlOworCQkJcGRldi0+cmVzb3VyY2VbMV0tPmVuZCA9IChzdGstPmlzX2ttZSkgPyAyIDogMTsKKwkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwZGV2KSAhPSAwKQogCQkJCXJldHVybiAtRU5PREVWOwotCQkJc3RrLT5jdGxfYmFzZSA9IHBkZXYtPmlvLkJhc2VQb3J0MjsKKwkJCXN0ay0+Y3RsX2Jhc2UgPSBwZGV2LT5yZXNvdXJjZVsxXS0+c3RhcnQ7CiAJCX0gZWxzZSBpZiAoKGlvLT5ud2luID09IDEpICYmIChpby0+d2luWzBdLmxlbiA+PSAxNikpIHsKLQkJCXBkZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOwotCQkJcGRldi0+aW8uTnVtUG9ydHMyID0gMDsKLQkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwZGV2LCAmcGRldi0+aW8pICE9IDApCisJCQlwZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gaW8tPndpblswXS5sZW47CisJCQlwZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gMDsKKwkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwZGV2KSAhPSAwKQogCQkJCXJldHVybiAtRU5PREVWOwotCQkJc3RrLT5jdGxfYmFzZSA9IHBkZXYtPmlvLkJhc2VQb3J0MSArIDB4MGU7CisJCQlzdGstPmN0bF9iYXNlID0gcGRldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ICsgMHgwZTsKIAkJfSBlbHNlCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJLyogSWYgd2UndmUgZ290IHRoaXMgZmFyLCB3ZSdyZSBkb25lICovCkBAIC0yODAsNyArMjgxLDcgQEAKIAkgICAgaWYgKHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBwY21jaWFfY2hlY2tfb25lX2NvbmZpZywgc3RrKSkKIAkJICAgIGdvdG8gZmFpbGVkOyAvKiBObyBzdWl0YWJsZSBjb25maWcgZm91bmQgKi8KICAgICB9Ci0gICAgaW9fYmFzZSA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKyAgICBpb19iYXNlID0gbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogICAgIGN0bF9iYXNlID0gc3RrLT5jdGxfYmFzZTsKIAogICAgIGlmICghbGluay0+aXJxKQpAQCAtMjk3LDcgKzI5OCw3IEBACiAJb3V0YigweDgxLCBjdGxfYmFzZSsxKTsKIAogICAgICBob3N0ID0gaWRlY3NfcmVnaXN0ZXIoaW9fYmFzZSwgY3RsX2Jhc2UsIGxpbmstPmlycSwgbGluayk7Ci0gICAgIGlmIChob3N0ID09IE5VTEwgJiYgbGluay0+aW8uTnVtUG9ydHMxID09IDB4MjApIHsKKyAgICAgaWYgKGhvc3QgPT0gTlVMTCAmJiByZXNvdXJjZV9zaXplKGxpbmstPnJlc291cmNlWzBdKSA9PSAweDIwKSB7CiAJICAgIG91dGIoMHgwMiwgY3RsX2Jhc2UgKyAweDEwKTsKIAkgICAgaG9zdCA9IGlkZWNzX3JlZ2lzdGVyKGlvX2Jhc2UgKyAweDEwLCBjdGxfYmFzZSArIDB4MTAsCiAJCQkJICBsaW5rLT5pcnEsIGxpbmspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWdkLmMgYi9kcml2ZXJzL2lkZS9pZGUtZ2QuYwppbmRleCBjMTAyZDIzLi43OTM5OTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZ2QuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZ2QuYwpAQCAtOTIsNyArOTIsNyBAQAogCiAvKgogICogT24gSFBBIGRyaXZlcyB0aGUgY2FwYWNpdHkgbmVlZHMgdG8gYmUKLSAqIHJlaW5pdGlsaXplZCBvbiByZXN1bWUgb3RoZXJ3aXNlIHRoZSBkaXNrCisgKiByZWluaXRpYWxpemVkIG9uIHJlc3VtZSBvdGhlcndpc2UgdGhlIGRpc2sKICAqIGNhbiBub3QgYmUgdXNlZCBhbmQgYSBoYXJkIHJlc2V0IGlzIHJlcXVpcmVkCiAgKi8KIHN0YXRpYyB2b2lkIGlkZV9nZF9yZXN1bWUoaWRlX2RyaXZlX3QgKmRyaXZlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGxlL2ludGVsX2lkbGUuYyBiL2RyaXZlcnMvaWRsZS9pbnRlbF9pZGxlLmMKaW5kZXggNTRmMGZiNC4uMDNkMjAyYiAxMDA3NTUKLS0tIGEvZHJpdmVycy9pZGxlL2ludGVsX2lkbGUuYworKysgYi9kcml2ZXJzL2lkbGUvaW50ZWxfaWRsZS5jCkBAIC0yMzEsNyArMjMxLDcgQEAKIAogCXN0b3BfY3JpdGljYWxfdGltaW5ncygpOwogI2lmbmRlZiBNT0RVTEUKLQl0cmFjZV9wb3dlcl9zdGFydChQT1dFUl9DU1RBVEUsIChlYXggPj4gNCkgKyAxKTsKKwl0cmFjZV9wb3dlcl9zdGFydChQT1dFUl9DU1RBVEUsIChlYXggPj4gNCkgKyAxLCBjcHUpOwogI2VuZGlmCiAJaWYgKCFuZWVkX3Jlc2NoZWQoKSkgewogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9hZGRyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9hZGRyLmMKaW5kZXggMGI5MjZlNC4uYTVlYTFiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvYWRkci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2FkZHIuYwpAQCAtMjE1LDcgKzIxNSw3IEBACiAKIAluZWlnaCA9IG5laWdoX2xvb2t1cCgmYXJwX3RibCwgJnJ0LT5ydF9nYXRld2F5LCBydC0+aWRldi0+ZGV2KTsKIAlpZiAoIW5laWdoIHx8ICEobmVpZ2gtPm51ZF9zdGF0ZSAmIE5VRF9WQUxJRCkpIHsKLQkJbmVpZ2hfZXZlbnRfc2VuZChydC0+dS5kc3QubmVpZ2hib3VyLCBOVUxMKTsKKwkJbmVpZ2hfZXZlbnRfc2VuZChydC0+ZHN0Lm5laWdoYm91ciwgTlVMTCk7CiAJCXJldCA9IC1FTk9EQVRBOwogCQlpZiAobmVpZ2gpCiAJCQlnb3RvIHJlbGVhc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY20uYwppbmRleCBlYmZiMTE3Li5hYmQ2ODNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmMKQEAgLTEzNjQsNyArMTM2NCw3IEBACiAJCSAgICAgICBfX2Z1bmNfXyk7CiAJCWdvdG8gcmVqZWN0OwogCX0KLQlkc3QgPSAmcnQtPnUuZHN0OworCWRzdCA9ICZydC0+ZHN0OwogCWwydCA9IHQzX2wydF9nZXQodGRldiwgZHN0LT5uZWlnaGJvdXIsIGRzdC0+bmVpZ2hib3VyLT5kZXYpOwogCWlmICghbDJ0KSB7CiAJCXByaW50ayhLRVJOX0VSUiBNT0QgIiVzIC0gZmFpbGVkIHRvIGFsbG9jYXRlIGwydCBlbnRyeSFcbiIsCkBAIC0xOTMyLDcgKzE5MzIsNyBAQAogCQllcnIgPSAtRUhPU1RVTlJFQUNIOwogCQlnb3RvIGZhaWwzOwogCX0KLQllcC0+ZHN0ID0gJnJ0LT51LmRzdDsKKwllcC0+ZHN0ID0gJnJ0LT5kc3Q7CiAKIAkvKiBnZXQgYSBsMnQgZW50cnkgKi8KIAllcC0+bDJ0ID0gdDNfbDJ0X2dldChlcC0+Y29tLnRkZXYsIGVwLT5kc3QtPm5laWdoYm91ciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jCmluZGV4IGFlNDdiZmQuLjliYmI2NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcXAuYwpAQCAtODE2LDcgKzgxNiw3IEBACiAJYXRvbWljX2luYygmcWhwLT5yZWZjbnQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFocC0+bG9jaywgKmZsYWcpOwogCi0JLyogbG9ja2luZyBoZWlyYXJjaHk6IGNxIGxvY2sgZmlyc3QsIHRoZW4gcXAgbG9jay4gKi8KKwkvKiBsb2NraW5nIGhpZXJhcmNoeTogY3EgbG9jayBmaXJzdCwgdGhlbiBxcCBsb2NrLiAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZyY2hwLT5sb2NrLCAqZmxhZyk7CiAJc3Bpbl9sb2NrKCZxaHAtPmxvY2spOwogCWN4aW9fZmx1c2hfaHdfY3EoJnJjaHAtPmNxKTsKQEAgLTgyNyw3ICs4MjcsNyBAQAogCWlmIChmbHVzaGVkKQogCQkoKnJjaHAtPmliY3EuY29tcF9oYW5kbGVyKSgmcmNocC0+aWJjcSwgcmNocC0+aWJjcS5jcV9jb250ZXh0KTsKIAotCS8qIGxvY2tpbmcgaGVpcmFyY2h5OiBjcSBsb2NrIGZpcnN0LCB0aGVuIHFwIGxvY2suICovCisJLyogbG9ja2luZyBoaWVyYXJjaHk6IGNxIGxvY2sgZmlyc3QsIHRoZW4gcXAgbG9jay4gKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2NocC0+bG9jaywgKmZsYWcpOwogCXNwaW5fbG9jaygmcWhwLT5sb2NrKTsKIAljeGlvX2ZsdXNoX2h3X2NxKCZzY2hwLT5jcSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jCmluZGV4IDMwY2UwYTguLjhjOWI0ODNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYwpAQCAtOTY5LDcgKzk2OSw4IEBACiAJCWdvdG8gZXJyOwogCWdvdG8gb3V0OwogZXJyOgotCWFib3J0X2Nvbm5lY3Rpb24oZXAsIHNrYiwgR0ZQX0tFUk5FTCk7CisJc3RhdGVfc2V0KCZlcC0+Y29tLCBBQk9SVElORyk7CisJc2VuZF9hYm9ydChlcCwgc2tiLCBHRlBfS0VSTkVMKTsKIG91dDoKIAljb25uZWN0X3JlcGx5X3VwY2FsbChlcCwgZXJyKTsKIAlyZXR1cm47CkBAIC0xMzY0LDcgKzEzNjUsNyBAQAogCQkgICAgICAgX19mdW5jX18pOwogCQlnb3RvIHJlamVjdDsKIAl9Ci0JZHN0ID0gJnJ0LT51LmRzdDsKKwlkc3QgPSAmcnQtPmRzdDsKIAlpZiAoZHN0LT5uZWlnaGJvdXItPmRldi0+ZmxhZ3MgJiBJRkZfTE9PUEJBQ0spIHsKIAkJcGRldiA9IGlwX2Rldl9maW5kKCZpbml0X25ldCwgcGVlcl9pcCk7CiAJCUJVR19PTighcGRldik7CkBAIC0xMzcyLDcgKzEzNzMsNyBAQAogCQkJCSAgICBwZGV2LCAwKTsKIAkJbXR1ID0gcGRldi0+bXR1OwogCQl0eF9jaGFuID0gY3hnYjRfcG9ydF9jaGFuKHBkZXYpOwotCQlzbWFjX2lkeCA9IHR4X2NoYW4gPDwgMTsKKwkJc21hY19pZHggPSAoY3hnYjRfcG9ydF92aWlkKHBkZXYpICYgMHg3RikgPDwgMTsKIAkJc3RlcCA9IGRldi0+cmRldi5sbGRpLm50eHEgLyBkZXYtPnJkZXYubGxkaS5uY2hhbjsKIAkJdHhxX2lkeCA9IGN4Z2I0X3BvcnRfaWR4KHBkZXYpICogc3RlcDsKIAkJc3RlcCA9IGRldi0+cmRldi5sbGRpLm5yeHEgLyBkZXYtPnJkZXYubGxkaS5uY2hhbjsKQEAgLTEzODMsNyArMTM4NCw3IEBACiAJCQkJCWRzdC0+bmVpZ2hib3VyLT5kZXYsIDApOwogCQltdHUgPSBkc3RfbXR1KGRzdCk7CiAJCXR4X2NoYW4gPSBjeGdiNF9wb3J0X2NoYW4oZHN0LT5uZWlnaGJvdXItPmRldik7Ci0JCXNtYWNfaWR4ID0gdHhfY2hhbiA8PCAxOworCQlzbWFjX2lkeCA9IChjeGdiNF9wb3J0X3ZpaWQoZHN0LT5uZWlnaGJvdXItPmRldikgJiAweDdGKSA8PCAxOwogCQlzdGVwID0gZGV2LT5yZGV2LmxsZGkubnR4cSAvIGRldi0+cmRldi5sbGRpLm5jaGFuOwogCQl0eHFfaWR4ID0gY3hnYjRfcG9ydF9pZHgoZHN0LT5uZWlnaGJvdXItPmRldikgKiBzdGVwOwogCQlzdGVwID0gZGV2LT5yZGV2LmxsZGkubnJ4cSAvIGRldi0+cmRldi5sbGRpLm5jaGFuOwpAQCAtMTkzOCw3ICsxOTM5LDcgQEAKIAkJZXJyID0gLUVIT1NUVU5SRUFDSDsKIAkJZ290byBmYWlsMzsKIAl9Ci0JZXAtPmRzdCA9ICZydC0+dS5kc3Q7CisJZXAtPmRzdCA9ICZydC0+ZHN0OwogCiAJLyogZ2V0IGEgbDJ0IGVudHJ5ICovCiAJaWYgKGVwLT5kc3QtPm5laWdoYm91ci0+ZGV2LT5mbGFncyAmIElGRl9MT09QQkFDSykgewpAQCAtMTk1MCw3ICsxOTUxLDcgQEAKIAkJCQkJcGRldiwgMCk7CiAJCWVwLT5tdHUgPSBwZGV2LT5tdHU7CiAJCWVwLT50eF9jaGFuID0gY3hnYjRfcG9ydF9jaGFuKHBkZXYpOwotCQllcC0+c21hY19pZHggPSBlcC0+dHhfY2hhbiA8PCAxOworCQllcC0+c21hY19pZHggPSAoY3hnYjRfcG9ydF92aWlkKHBkZXYpICYgMHg3RikgPDwgMTsKIAkJc3RlcCA9IGVwLT5jb20uZGV2LT5yZGV2LmxsZGkubnR4cSAvCiAJCSAgICAgICBlcC0+Y29tLmRldi0+cmRldi5sbGRpLm5jaGFuOwogCQllcC0+dHhxX2lkeCA9IGN4Z2I0X3BvcnRfaWR4KHBkZXYpICogc3RlcDsKQEAgLTE5NjUsNyArMTk2Niw4IEBACiAJCQkJCWVwLT5kc3QtPm5laWdoYm91ci0+ZGV2LCAwKTsKIAkJZXAtPm10dSA9IGRzdF9tdHUoZXAtPmRzdCk7CiAJCWVwLT50eF9jaGFuID0gY3hnYjRfcG9ydF9jaGFuKGVwLT5kc3QtPm5laWdoYm91ci0+ZGV2KTsKLQkJZXAtPnNtYWNfaWR4ID0gZXAtPnR4X2NoYW4gPDwgMTsKKwkJZXAtPnNtYWNfaWR4ID0gKGN4Z2I0X3BvcnRfdmlpZChlcC0+ZHN0LT5uZWlnaGJvdXItPmRldikgJgorCQkJCTB4N0YpIDw8IDE7CiAJCXN0ZXAgPSBlcC0+Y29tLmRldi0+cmRldi5sbGRpLm50eHEgLwogCQkgICAgICAgZXAtPmNvbS5kZXYtPnJkZXYubGxkaS5uY2hhbjsKIAkJZXAtPnR4cV9pZHggPSBjeGdiNF9wb3J0X2lkeChlcC0+ZHN0LT5uZWlnaGJvdXItPmRldikgKiBzdGVwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY3EuYwppbmRleCAyNDQ3ZjUyLi5mYWM1YzZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY3EuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY3EuYwpAQCAtNzcsNyArNzcsNyBAQAogCWtmcmVlKGNxLT5zd19xdWV1ZSk7CiAJZG1hX2ZyZWVfY29oZXJlbnQoJihyZGV2LT5sbGRpLnBkZXYtPmRldiksCiAJCQkgIGNxLT5tZW1zaXplLCBjcS0+cXVldWUsCi0JCQkgIHBjaV91bm1hcF9hZGRyKGNxLCBtYXBwaW5nKSk7CisJCQkgIGRtYV91bm1hcF9hZGRyKGNxLCBtYXBwaW5nKSk7CiAJYzRpd19wdXRfY3FpZChyZGV2LCBjcS0+Y3FpZCwgdWN0eCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTExMiw3ICsxMTIsNyBAQAogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycjM7CiAJfQotCXBjaV91bm1hcF9hZGRyX3NldChjcSwgbWFwcGluZywgY3EtPmRtYV9hZGRyKTsKKwlkbWFfdW5tYXBfYWRkcl9zZXQoY3EsIG1hcHBpbmcsIGNxLT5kbWFfYWRkcik7CiAJbWVtc2V0KGNxLT5xdWV1ZSwgMCwgY3EtPm1lbXNpemUpOwogCiAJLyogYnVpbGQgZndfcmlfcmVzX3dyICovCkBAIC0xNzksNyArMTc5LDcgQEAKIAlyZXR1cm4gMDsKIGVycjQ6CiAJZG1hX2ZyZWVfY29oZXJlbnQoJnJkZXYtPmxsZGkucGRldi0+ZGV2LCBjcS0+bWVtc2l6ZSwgY3EtPnF1ZXVlLAotCQkJICBwY2lfdW5tYXBfYWRkcihjcSwgbWFwcGluZykpOworCQkJICBkbWFfdW5tYXBfYWRkcihjcSwgbWFwcGluZykpOwogZXJyMzoKIAlrZnJlZShjcS0+c3dfcXVldWUpOwogZXJyMjoKQEAgLTc2NCw3ICs3NjQsNyBAQAogCXN0cnVjdCBjNGl3X2NyZWF0ZV9jcV9yZXNwIHVyZXNwOwogCXN0cnVjdCBjNGl3X3Vjb250ZXh0ICp1Y29udGV4dCA9IE5VTEw7CiAJaW50IHJldDsKLQlzaXplX3QgbWVtc2l6ZTsKKwlzaXplX3QgbWVtc2l6ZSwgaHdlbnRyaWVzOwogCXN0cnVjdCBjNGl3X21tX2VudHJ5ICptbSwgKm1tMjsKIAogCVBEQkcoIiVzIGliX2RldiAlcCBlbnRyaWVzICVkXG4iLCBfX2Z1bmNfXywgaWJkZXYsIGVudHJpZXMpOwpAQCAtNzg4LDE0ICs3ODgsMjkgQEAKIAkgKiBlbnRyaWVzIG11c3QgYmUgbXVsdGlwbGUgb2YgMTYgZm9yIEhXLgogCSAqLwogCWVudHJpZXMgPSByb3VuZHVwKGVudHJpZXMsIDE2KTsKLQltZW1zaXplID0gZW50cmllcyAqIHNpemVvZiAqY2hwLT5jcS5xdWV1ZTsKKworCS8qCisJICogTWFrZSBhY3R1YWwgSFcgcXVldWUgMnggdG8gYXZvaWQgY2RpeF9pbmMgb3ZlcmZsb3dzLgorCSAqLworCWh3ZW50cmllcyA9IGVudHJpZXMgKiAyOworCisJLyoKKwkgKiBNYWtlIEhXIHF1ZXVlIGF0IGxlYXN0IDY0IGVudHJpZXMgc28gR1RTIHVwZGF0ZXMgYXJlbid0IHRvbworCSAqIGZyZXF1ZW50LgorCSAqLworCWlmIChod2VudHJpZXMgPCA2NCkKKwkJaHdlbnRyaWVzID0gNjQ7CisKKwltZW1zaXplID0gaHdlbnRyaWVzICogc2l6ZW9mICpjaHAtPmNxLnF1ZXVlOwogCiAJLyoKIAkgKiBtZW1zaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgcGFnZSBzaXplIGlmIGl0cyBhIHVzZXIgY3EuCiAJICovCi0JaWYgKHVjb250ZXh0KQorCWlmICh1Y29udGV4dCkgewogCQltZW1zaXplID0gcm91bmR1cChtZW1zaXplLCBQQUdFX1NJWkUpOwotCWNocC0+Y3Euc2l6ZSA9IGVudHJpZXM7CisJCWh3ZW50cmllcyA9IG1lbXNpemUgLyBzaXplb2YgKmNocC0+Y3EucXVldWU7CisJfQorCWNocC0+Y3Euc2l6ZSA9IGh3ZW50cmllczsKIAljaHAtPmNxLm1lbXNpemUgPSBtZW1zaXplOwogCiAJcmV0ID0gY3JlYXRlX2NxKCZyaHAtPnJkZXYsICZjaHAtPmNxLApAQCAtODA1LDcgKzgyMCw3IEBACiAKIAljaHAtPnJocCA9IHJocDsKIAljaHAtPmNxLnNpemUtLTsJCQkJLyogc3RhdHVzIHBhZ2UgKi8KLQljaHAtPmliY3EuY3FlID0gY2hwLT5jcS5zaXplIC0gMTsKKwljaHAtPmliY3EuY3FlID0gZW50cmllcyAtIDI7CiAJc3Bpbl9sb2NrX2luaXQoJmNocC0+bG9jayk7CiAJYXRvbWljX3NldCgmY2hwLT5yZWZjbnQsIDEpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNocC0+d2FpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvaXdfY3hnYjQuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9pd19jeGdiNC5oCmluZGV4IDI3N2FiNTguLmQzM2UxYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9pd19jeGdiNC5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9pd19jeGdiNC5oCkBAIC0yNjEsNyArMjYxLDcgQEAKIAogc3RydWN0IGM0aXdfZnJfcGFnZV9saXN0IHsKIAlzdHJ1Y3QgaWJfZmFzdF9yZWdfcGFnZV9saXN0IGlicGw7Ci0JREVDTEFSRV9QQ0lfVU5NQVBfQUREUihtYXBwaW5nKTsKKwlERUZJTkVfRE1BX1VOTUFQX0FERFIobWFwcGluZyk7CiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAlzdHJ1Y3QgYzRpd19kZXYgKmRldjsKIAlpbnQgc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9tZW0uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9tZW0uYwppbmRleCA3Zjk0ZGExLi44MmI1NzAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvbWVtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L21lbS5jCkBAIC03NjQsNyArNzY0LDcgQEAKIAlpZiAoIWM0cGwpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JcGNpX3VubWFwX2FkZHJfc2V0KGM0cGwsIG1hcHBpbmcsIGRtYV9hZGRyKTsKKwlkbWFfdW5tYXBfYWRkcl9zZXQoYzRwbCwgbWFwcGluZywgZG1hX2FkZHIpOwogCWM0cGwtPmRtYV9hZGRyID0gZG1hX2FkZHI7CiAJYzRwbC0+ZGV2ID0gZGV2OwogCWM0cGwtPnNpemUgPSBzaXplOwpAQCAtNzc5LDcgKzc3OSw3IEBACiAJc3RydWN0IGM0aXdfZnJfcGFnZV9saXN0ICpjNHBsID0gdG9fYzRpd19mcl9wYWdlX2xpc3QoaWJwbCk7CiAKIAlkbWFfZnJlZV9jb2hlcmVudCgmYzRwbC0+ZGV2LT5yZGV2LmxsZGkucGRldi0+ZGV2LCBjNHBsLT5zaXplLAotCQkJICBjNHBsLCBwY2lfdW5tYXBfYWRkcihjNHBsLCBtYXBwaW5nKSk7CisJCQkgIGM0cGwsIGRtYV91bm1hcF9hZGRyKGM0cGwsIG1hcHBpbmcpKTsKIH0KIAogaW50IGM0aXdfZGVyZWdfbXIoc3RydWN0IGliX21yICppYl9tcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3FwLmMKaW5kZXggMGMyOGVkMS4uODZiOTNmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3FwLmMKQEAgLTQwLDEwICs0MCwxMCBAQAogCSAqLwogCWRtYV9mcmVlX2NvaGVyZW50KCYocmRldi0+bGxkaS5wZGV2LT5kZXYpLAogCQkJICB3cS0+cnEubWVtc2l6ZSwgd3EtPnJxLnF1ZXVlLAotCQkJICBwY2lfdW5tYXBfYWRkcigmd3EtPnJxLCBtYXBwaW5nKSk7CisJCQkgIGRtYV91bm1hcF9hZGRyKCZ3cS0+cnEsIG1hcHBpbmcpKTsKIAlkbWFfZnJlZV9jb2hlcmVudCgmKHJkZXYtPmxsZGkucGRldi0+ZGV2KSwKIAkJCSAgd3EtPnNxLm1lbXNpemUsIHdxLT5zcS5xdWV1ZSwKLQkJCSAgcGNpX3VubWFwX2FkZHIoJndxLT5zcSwgbWFwcGluZykpOworCQkJICBkbWFfdW5tYXBfYWRkcigmd3EtPnNxLCBtYXBwaW5nKSk7CiAJYzRpd19ycXRwb29sX2ZyZWUocmRldiwgd3EtPnJxLnJxdF9od2FkZHIsIHdxLT5ycS5ycXRfc2l6ZSk7CiAJa2ZyZWUod3EtPnJxLnN3X3JxKTsKIAlrZnJlZSh3cS0+c3Euc3dfc3EpOwpAQCAtOTksNyArOTksNyBAQAogCWlmICghd3EtPnNxLnF1ZXVlKQogCQlnb3RvIGVycjU7CiAJbWVtc2V0KHdxLT5zcS5xdWV1ZSwgMCwgd3EtPnNxLm1lbXNpemUpOwotCXBjaV91bm1hcF9hZGRyX3NldCgmd3EtPnNxLCBtYXBwaW5nLCB3cS0+c3EuZG1hX2FkZHIpOworCWRtYV91bm1hcF9hZGRyX3NldCgmd3EtPnNxLCBtYXBwaW5nLCB3cS0+c3EuZG1hX2FkZHIpOwogCiAJd3EtPnJxLnF1ZXVlID0gZG1hX2FsbG9jX2NvaGVyZW50KCYocmRldi0+bGxkaS5wZGV2LT5kZXYpLAogCQkJCQkgIHdxLT5ycS5tZW1zaXplLCAmKHdxLT5ycS5kbWFfYWRkciksCkBAIC0xMTIsNyArMTEyLDcgQEAKIAkJd3EtPnJxLnF1ZXVlLAogCQkodW5zaWduZWQgbG9uZyBsb25nKXZpcnRfdG9fcGh5cyh3cS0+cnEucXVldWUpKTsKIAltZW1zZXQod3EtPnJxLnF1ZXVlLCAwLCB3cS0+cnEubWVtc2l6ZSk7Ci0JcGNpX3VubWFwX2FkZHJfc2V0KCZ3cS0+cnEsIG1hcHBpbmcsIHdxLT5ycS5kbWFfYWRkcik7CisJZG1hX3VubWFwX2FkZHJfc2V0KCZ3cS0+cnEsIG1hcHBpbmcsIHdxLT5ycS5kbWFfYWRkcik7CiAKIAl3cS0+ZGIgPSByZGV2LT5sbGRpLmRiX3JlZzsKIAl3cS0+Z3RzID0gcmRldi0+bGxkaS5ndHNfcmVnOwpAQCAtMjE3LDExICsyMTcsMTEgQEAKIGVycjc6CiAJZG1hX2ZyZWVfY29oZXJlbnQoJihyZGV2LT5sbGRpLnBkZXYtPmRldiksCiAJCQkgIHdxLT5ycS5tZW1zaXplLCB3cS0+cnEucXVldWUsCi0JCQkgIHBjaV91bm1hcF9hZGRyKCZ3cS0+cnEsIG1hcHBpbmcpKTsKKwkJCSAgZG1hX3VubWFwX2FkZHIoJndxLT5ycSwgbWFwcGluZykpOwogZXJyNjoKIAlkbWFfZnJlZV9jb2hlcmVudCgmKHJkZXYtPmxsZGkucGRldi0+ZGV2KSwKIAkJCSAgd3EtPnNxLm1lbXNpemUsIHdxLT5zcS5xdWV1ZSwKLQkJCSAgcGNpX3VubWFwX2FkZHIoJndxLT5zcSwgbWFwcGluZykpOworCQkJICBkbWFfdW5tYXBfYWRkcigmd3EtPnNxLCBtYXBwaW5nKSk7CiBlcnI1OgogCWM0aXdfcnF0cG9vbF9mcmVlKHJkZXYsIHdxLT5ycS5ycXRfaHdhZGRyLCB3cS0+cnEucnF0X3NpemUpOwogZXJyNDoKQEAgLTkwNSw3ICs5MDUsNyBAQAogCWF0b21pY19pbmMoJnFocC0+cmVmY250KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxaHAtPmxvY2ssICpmbGFnKTsKIAotCS8qIGxvY2tpbmcgaGVpcmFyY2h5OiBjcSBsb2NrIGZpcnN0LCB0aGVuIHFwIGxvY2suICovCisJLyogbG9ja2luZyBoaWVyYXJjaHk6IGNxIGxvY2sgZmlyc3QsIHRoZW4gcXAgbG9jay4gKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcmNocC0+bG9jaywgKmZsYWcpOwogCXNwaW5fbG9jaygmcWhwLT5sb2NrKTsKIAljNGl3X2ZsdXNoX2h3X2NxKCZyY2hwLT5jcSk7CkBAIC05MTYsNyArOTE2LDcgQEAKIAlpZiAoZmx1c2hlZCkKIAkJKCpyY2hwLT5pYmNxLmNvbXBfaGFuZGxlcikoJnJjaHAtPmliY3EsIHJjaHAtPmliY3EuY3FfY29udGV4dCk7CiAKLQkvKiBsb2NraW5nIGhlaXJhcmNoeTogY3EgbG9jayBmaXJzdCwgdGhlbiBxcCBsb2NrLiAqLworCS8qIGxvY2tpbmcgaGllcmFyY2h5OiBjcSBsb2NrIGZpcnN0LCB0aGVuIHFwIGxvY2suICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNjaHAtPmxvY2ssICpmbGFnKTsKIAlzcGluX2xvY2soJnFocC0+bG9jayk7CiAJYzRpd19mbHVzaF9od19jcSgmc2NocC0+Y3EpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3Q0LmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvdDQuaAppbmRleCAxMDU3Y2I5Li45Y2Y4ZDg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvdDQuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvdDQuaApAQCAtMjc5LDcgKzI3OSw3IEBACiBzdHJ1Y3QgdDRfc3EgewogCXVuaW9uIHQ0X3dyICpxdWV1ZTsKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwotCURFQ0xBUkVfUENJX1VOTUFQX0FERFIobWFwcGluZyk7CisJREVGSU5FX0RNQV9VTk1BUF9BRERSKG1hcHBpbmcpOwogCXN0cnVjdCB0NF9zd3NxZSAqc3dfc3E7CiAJc3RydWN0IHQ0X3N3c3FlICpvbGRlc3RfcmVhZDsKIAl1NjQgdWRiOwpAQCAtMjk4LDcgKzI5OCw3IEBACiBzdHJ1Y3QgdDRfcnEgewogCXVuaW9uICB0NF9yZWN2X3dyICpxdWV1ZTsKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwotCURFQ0xBUkVfUENJX1VOTUFQX0FERFIobWFwcGluZyk7CisJREVGSU5FX0RNQV9VTk1BUF9BRERSKG1hcHBpbmcpOwogCXN0cnVjdCB0NF9zd3JxZSAqc3dfcnE7CiAJdTY0IHVkYjsKIAlzaXplX3QgbWVtc2l6ZTsKQEAgLTQyOSw3ICs0MjksNyBAQAogc3RydWN0IHQ0X2NxIHsKIAlzdHJ1Y3QgdDRfY3FlICpxdWV1ZTsKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwotCURFQ0xBUkVfUENJX1VOTUFQX0FERFIobWFwcGluZyk7CisJREVGSU5FX0RNQV9VTk1BUF9BRERSKG1hcHBpbmcpOwogCXN0cnVjdCB0NF9jcWUgKnN3X3F1ZXVlOwogCXZvaWQgX19pb21lbSAqZ3RzOwogCXN0cnVjdCBjNGl3X3JkZXYgKnJkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9oY3BfaWYuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2hjcF9pZi5oCmluZGV4IDM5YzFjMzYuLmE0NmU1MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2hjcF9pZi5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2hjcF9pZi5oCkBAIC00OSw3ICs0OSw3IEBACiAjaW5jbHVkZSAiaGlwel9ody5oIgogCiAvKgotICogaGlwel9oX2FsbG9jX3Jlc291cmNlX2VxIGFsbG9jYXRlcyBFUSByZXNvdXJjZXMgaW4gSFcgYW5kIEZXLCBpbml0YWxpemUKKyAqIGhpcHpfaF9hbGxvY19yZXNvdXJjZV9lcSBhbGxvY2F0ZXMgRVEgcmVzb3VyY2VzIGluIEhXIGFuZCBGVywgaW5pdGlhbGl6ZQogICogcmVzb3VyY2VzLCBjcmVhdGUgdGhlIGVtcHR5IEVRUFQgKHJpbmcpLgogICovCiB1NjQgaGlwel9oX2FsbG9jX3Jlc291cmNlX2VxKGNvbnN0IHN0cnVjdCBpcHpfYWRhcHRlcl9oYW5kbGUgYWRhcHRlcl9oYW5kbGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jCmluZGV4IDljNWM2NmQuLjY1ZWI4OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jCkBAIC0yMDU1LDcgKzIwNTUsNyBAQAogCiAJbXV0ZXhfbG9jaygmaXBhdGhfbXV0ZXgpOwogCi0JZmQgPSAoc3RydWN0IGlwYXRoX2ZpbGVkYXRhICopIGZwLT5wcml2YXRlX2RhdGE7CisJZmQgPSBmcC0+cHJpdmF0ZV9kYXRhOwogCWZwLT5wcml2YXRlX2RhdGEgPSBOVUxMOwogCXBkID0gZmQtPnBkOwogCWlmICghcGQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5jCmluZGV4IDk4NmQ2ZjMuLmQ4NzZkMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uYwpAQCAtMTE0Niw3ICsxMTQ2LDcgQEAKIAl9CiAKIAlpZiAoKG5laWdoID09IE5VTEwpIHx8ICghKG5laWdoLT5udWRfc3RhdGUgJiBOVURfVkFMSUQpKSkKLQkJbmVpZ2hfZXZlbnRfc2VuZChydC0+dS5kc3QubmVpZ2hib3VyLCBOVUxMKTsKKwkJbmVpZ2hfZXZlbnRfc2VuZChydC0+ZHN0Lm5laWdoYm91ciwgTlVMTCk7CiAKIAlpcF9ydF9wdXQocnQpOwogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX25pYy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKaW5kZXggNWNjMGE5YS4uNDJlN2FhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKQEAgLTE1NjcsNiArMTU2NywxMiBAQAogfQogCiAKK3N0YXRpYyBpbnQgbmVzX25ldGRldl9zZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGZsYWdzKQoreworCXJldHVybiBldGh0b29sX29wX3NldF9mbGFncyhuZXRkZXYsIGZsYWdzLCBFVEhfRkxBR19MUk8pOworfQorCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmVzX2V0aHRvb2xfb3BzID0gewogCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiAJLmdldF9zZXR0aW5ncyA9IG5lc19uZXRkZXZfZ2V0X3NldHRpbmdzLApAQCAtMTU4OCw3ICsxNTk0LDcgQEAKIAkuZ2V0X3RzbyA9IGV0aHRvb2xfb3BfZ2V0X3RzbywKIAkuc2V0X3RzbyA9IGV0aHRvb2xfb3Bfc2V0X3RzbywKIAkuZ2V0X2ZsYWdzID0gZXRodG9vbF9vcF9nZXRfZmxhZ3MsCi0JLnNldF9mbGFncyA9IGV0aHRvb2xfb3Bfc2V0X2ZsYWdzLAorCS5zZXRfZmxhZ3MgPSBuZXNfbmV0ZGV2X3NldF9mbGFncywKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9NYWtlZmlsZSBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvTWFrZWZpbGUKaW5kZXggYzY1MTVhMS4uZjEyZDdiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogCXFpYl9xcC5vIHFpYl9xc2ZwLm8gcWliX3JjLm8gcWliX3J1Yy5vIHFpYl9zZG1hLm8gcWliX3NycS5vIFwKIAlxaWJfc3lzZnMubyBxaWJfdHdzaS5vIHFpYl90eC5vIHFpYl91Yy5vIHFpYl91ZC5vIFwKIAlxaWJfdXNlcl9wYWdlcy5vIHFpYl91c2VyX3NkbWEubyBxaWJfdmVyYnNfbWNhc3QubyBxaWJfaWJhNzIyMC5vIFwKLQlxaWJfc2Q3MjIwLm8gcWliX3NkNzIyMF9pbWcubyBxaWJfaWJhNzMyMi5vIHFpYl92ZXJicy5vCisJcWliX3NkNzIyMC5vIHFpYl9pYmE3MzIyLm8gcWliX3ZlcmJzLm8KIAogIyA2MTIwIGhhcyBubyBmYWxsYmFjayBpZiBubyBNU0kgaW50ZXJydXB0cywgb3RoZXJzIGNhbiBkbyBJTlR4CiBpYl9xaWItJChDT05GSUdfUENJX01TSSkgKz0gcWliX2liYTYxMjAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliLmgKaW5kZXggMzJkOTIwOC4uMzU5Mzk4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYi5oCkBAIC02ODYsNiArNjg2LDcgQEAKIAl2b2lkIF9faW9tZW0gKnBpb2Jhc2U7CiAJLyogbWVtLW1hcHBlZCBwb2ludGVyIHRvIGJhc2Ugb2YgdXNlciBjaGlwIHJlZ3MgKGlmIHVzaW5nIFdDIFBBVCkgKi8KIAl1NjQgX19pb21lbSAqdXNlcmJhc2U7CisJdm9pZCBfX2lvbWVtICpwaW92bDE1YmFzZTsgLyogYmFzZSBvZiBWTDE1IGJ1ZmZlcnMsIGlmIG5vdCBXQyAqLwogCS8qCiAJICogcG9pbnRzIHRvIGFyZWEgd2hlcmUgUElPYXZhaWwgcmVnaXN0ZXJzIHdpbGwgYmUgRE1BJ2VkLgogCSAqIEhhcyB0byBiZSBvbiBhIHBhZ2Ugb2YgaXQncyBvd24sIGJlY2F1c2UgdGhlIHBhZ2Ugd2lsbCBiZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfNzIyMC5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfNzIyMC5oCmluZGV4IGVhMGJmZDguLjIxZjM3NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliXzcyMjAuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl83MjIwLmgKQEAgLTEwOSwxMCArMTA5LDYgQEAKICAqLwogaW50IHFpYl9zZDcyMjBfcHJlc2V0cyhzdHJ1Y3QgcWliX2RldmRhdGEgKmRkKTsKIGludCBxaWJfc2Q3MjIwX2luaXQoc3RydWN0IHFpYl9kZXZkYXRhICpkZCk7Ci1pbnQgcWliX3NkNzIyMF9wcm9nX2xkKHN0cnVjdCBxaWJfZGV2ZGF0YSAqZGQsIGludCBzZG51bSwgdTggKmltZywKLQkJICAgICAgIGludCBsZW4sIGludCBvZmZzZXQpOwotaW50IHFpYl9zZDcyMjBfcHJvZ192Znkoc3RydWN0IHFpYl9kZXZkYXRhICpkZCwgaW50IHNkbnVtLCBjb25zdCB1OCAqaW1nLAotCQkJaW50IGxlbiwgaW50IG9mZnNldCk7CiB2b2lkIHFpYl9zZDcyMjBfY2xyX2licGFyKHN0cnVjdCBxaWJfZGV2ZGF0YSAqKTsKIC8qCiAgKiBCZWxvdyB1c2VkIGZvciBzZG51bSBwYXJhbWV0ZXIsIHNlbGVjdGluZyBvbmUgb2YgdGhlIHR3byBzZWN0aW9ucwpAQCAtMTIxLDkgKzExNyw2IEBACiAgKi8KICNkZWZpbmUgSUJfNzIyMF9TRVJERVMgMgogCi1pbnQgcWliX3NkNzIyMF9pYl9sb2FkKHN0cnVjdCBxaWJfZGV2ZGF0YSAqZGQpOwotaW50IHFpYl9zZDcyMjBfaWJfdmZ5KHN0cnVjdCBxaWJfZGV2ZGF0YSAqZGQpOwotCiBzdGF0aWMgaW5saW5lIHUzMiBxaWJfcmVhZF9rcmVnMzIoY29uc3Qgc3RydWN0IHFpYl9kZXZkYXRhICpkZCwKIAkJCQkgIGNvbnN0IHUxNiByZWdubykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliXzczMjJfcmVncy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfNzMyMl9yZWdzLmgKaW5kZXggYTk3NDQwYi4uMzJkYzgxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfNzMyMl9yZWdzLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfNzMyMl9yZWdzLmgKQEAgLTc0MiwxNSArNzQyLDE1IEBACiAjZGVmaW5lIFFJQl83MzIyX0h3RXJyTWFza19JQkNCdXNGcm9tU1BDUGFyaXR5RXJyTWFza18xX0xTQiAweEYKICNkZWZpbmUgUUlCXzczMjJfSHdFcnJNYXNrX0lCQ0J1c0Zyb21TUENQYXJpdHlFcnJNYXNrXzFfTVNCIDB4RgogI2RlZmluZSBRSUJfNzMyMl9Id0Vyck1hc2tfSUJDQnVzRnJvbVNQQ1Bhcml0eUVyck1hc2tfMV9STUFTSyAweDEKLSNkZWZpbmUgUUlCXzczMjJfSHdFcnJNYXNrX3N0YXR1c1ZhbGlkTm9Fb3BNYXNrXzFfTFNCIDB4RQotI2RlZmluZSBRSUJfNzMyMl9Id0Vyck1hc2tfc3RhdHVzVmFsaWROb0VvcE1hc2tfMV9NU0IgMHhFCi0jZGVmaW5lIFFJQl83MzIyX0h3RXJyTWFza19zdGF0dXNWYWxpZE5vRW9wTWFza18xX1JNQVNLIDB4MQorI2RlZmluZSBRSUJfNzMyMl9Id0Vyck1hc2tfSUJDQnVzVG9TUENQYXJpdHlFcnJNYXNrXzFfTFNCIDB4RQorI2RlZmluZSBRSUJfNzMyMl9Id0Vyck1hc2tfSUJDQnVzVG9TUENQYXJpdHlFcnJNYXNrXzFfTVNCIDB4RQorI2RlZmluZSBRSUJfNzMyMl9Id0Vyck1hc2tfSUJDQnVzVG9TUENQYXJpdHlFcnJNYXNrXzFfUk1BU0sgMHgxCiAjZGVmaW5lIFFJQl83MzIyX0h3RXJyTWFza19JQkNCdXNGcm9tU1BDUGFyaXR5RXJyTWFza18wX0xTQiAweEQKICNkZWZpbmUgUUlCXzczMjJfSHdFcnJNYXNrX0lCQ0J1c0Zyb21TUENQYXJpdHlFcnJNYXNrXzBfTVNCIDB4RAogI2RlZmluZSBRSUJfNzMyMl9Id0Vyck1hc2tfSUJDQnVzRnJvbVNQQ1Bhcml0eUVyck1hc2tfMF9STUFTSyAweDEKLSNkZWZpbmUgUUlCXzczMjJfSHdFcnJNYXNrX3N0YXR1c1ZhbGlkTm9Fb3BNYXNrXzBfTFNCIDB4QwotI2RlZmluZSBRSUJfNzMyMl9Id0Vyck1hc2tfc3RhdHVzVmFsaWROb0VvcE1hc2tfMF9NU0IgMHhDCi0jZGVmaW5lIFFJQl83MzIyX0h3RXJyTWFza19zdGF0dXNWYWxpZE5vRW9wTWFza18wX1JNQVNLIDB4MQorI2RlZmluZSBRSUJfNzMyMl9Id0Vyck1hc2tfc3RhdHVzVmFsaWROb0VvcE1hc2tfTFNCIDB4QworI2RlZmluZSBRSUJfNzMyMl9Id0Vyck1hc2tfc3RhdHVzVmFsaWROb0VvcE1hc2tfTVNCIDB4QworI2RlZmluZSBRSUJfNzMyMl9Id0Vyck1hc2tfc3RhdHVzVmFsaWROb0VvcE1hc2tfUk1BU0sgMHgxCiAjZGVmaW5lIFFJQl83MzIyX0h3RXJyTWFza19MQVRyaWdnZXJlZE1hc2tfTFNCIDB4QgogI2RlZmluZSBRSUJfNzMyMl9Id0Vyck1hc2tfTEFUcmlnZ2VyZWRNYXNrX01TQiAweEIKICNkZWZpbmUgUUlCXzczMjJfSHdFcnJNYXNrX0xBVHJpZ2dlcmVkTWFza19STUFTSyAweDEKQEAgLTc5NiwxNSArNzk2LDE1IEBACiAjZGVmaW5lIFFJQl83MzIyX0h3RXJyU3RhdHVzX0lCQ0J1c0Zyb21TUENQYXJpdHlFcnJfMV9MU0IgMHhGCiAjZGVmaW5lIFFJQl83MzIyX0h3RXJyU3RhdHVzX0lCQ0J1c0Zyb21TUENQYXJpdHlFcnJfMV9NU0IgMHhGCiAjZGVmaW5lIFFJQl83MzIyX0h3RXJyU3RhdHVzX0lCQ0J1c0Zyb21TUENQYXJpdHlFcnJfMV9STUFTSyAweDEKLSNkZWZpbmUgUUlCXzczMjJfSHdFcnJTdGF0dXNfc3RhdHVzVmFsaWROb0VvcF8xX0xTQiAweEUKLSNkZWZpbmUgUUlCXzczMjJfSHdFcnJTdGF0dXNfc3RhdHVzVmFsaWROb0VvcF8xX01TQiAweEUKLSNkZWZpbmUgUUlCXzczMjJfSHdFcnJTdGF0dXNfc3RhdHVzVmFsaWROb0VvcF8xX1JNQVNLIDB4MQorI2RlZmluZSBRSUJfNzMyMl9Id0VyclN0YXR1c19JQkNCdXNUb1NQQ1Bhcml0eUVycl8xX0xTQiAweEUKKyNkZWZpbmUgUUlCXzczMjJfSHdFcnJTdGF0dXNfSUJDQnVzVG9TUENQYXJpdHlFcnJfMV9NU0IgMHhFCisjZGVmaW5lIFFJQl83MzIyX0h3RXJyU3RhdHVzX0lCQ0J1c1RvU1BDUGFyaXR5RXJyXzFfUk1BU0sgMHgxCiAjZGVmaW5lIFFJQl83MzIyX0h3RXJyU3RhdHVzX0lCQ0J1c0Zyb21TUENQYXJpdHlFcnJfMF9MU0IgMHhECiAjZGVmaW5lIFFJQl83MzIyX0h3RXJyU3RhdHVzX0lCQ0J1c0Zyb21TUENQYXJpdHlFcnJfMF9NU0IgMHhECiAjZGVmaW5lIFFJQl83MzIyX0h3RXJyU3RhdHVzX0lCQ0J1c0Zyb21TUENQYXJpdHlFcnJfMF9STUFTSyAweDEKLSNkZWZpbmUgUUlCXzczMjJfSHdFcnJTdGF0dXNfc3RhdHVzVmFsaWROb0VvcF8wX0xTQiAweEMKLSNkZWZpbmUgUUlCXzczMjJfSHdFcnJTdGF0dXNfc3RhdHVzVmFsaWROb0VvcF8wX01TQiAweEMKLSNkZWZpbmUgUUlCXzczMjJfSHdFcnJTdGF0dXNfc3RhdHVzVmFsaWROb0VvcF8wX1JNQVNLIDB4MQorI2RlZmluZSBRSUJfNzMyMl9Id0VyclN0YXR1c19zdGF0dXNWYWxpZE5vRW9wX0xTQiAweEMKKyNkZWZpbmUgUUlCXzczMjJfSHdFcnJTdGF0dXNfc3RhdHVzVmFsaWROb0VvcF9NU0IgMHhDCisjZGVmaW5lIFFJQl83MzIyX0h3RXJyU3RhdHVzX3N0YXR1c1ZhbGlkTm9Fb3BfUk1BU0sgMHgxCiAjZGVmaW5lIFFJQl83MzIyX0h3RXJyU3RhdHVzX0xBVHJpZ2dlcmVkX0xTQiAweEIKICNkZWZpbmUgUUlCXzczMjJfSHdFcnJTdGF0dXNfTEFUcmlnZ2VyZWRfTVNCIDB4QgogI2RlZmluZSBRSUJfNzMyMl9Id0VyclN0YXR1c19MQVRyaWdnZXJlZF9STUFTSyAweDEKQEAgLTg1MCwxNSArODUwLDE1IEBACiAjZGVmaW5lIFFJQl83MzIyX0h3RXJyQ2xlYXJfSUJDQnVzRnJvbVNQQ1Bhcml0eUVyckNsZWFyXzFfTFNCIDB4RgogI2RlZmluZSBRSUJfNzMyMl9Id0VyckNsZWFyX0lCQ0J1c0Zyb21TUENQYXJpdHlFcnJDbGVhcl8xX01TQiAweEYKICNkZWZpbmUgUUlCXzczMjJfSHdFcnJDbGVhcl9JQkNCdXNGcm9tU1BDUGFyaXR5RXJyQ2xlYXJfMV9STUFTSyAweDEKLSNkZWZpbmUgUUlCXzczMjJfSHdFcnJDbGVhcl9JQkNCdXNUb1NQQ3Bhcml0eUVyckNsZWFyXzFfTFNCIDB4RQotI2RlZmluZSBRSUJfNzMyMl9Id0VyckNsZWFyX0lCQ0J1c1RvU1BDcGFyaXR5RXJyQ2xlYXJfMV9NU0IgMHhFCi0jZGVmaW5lIFFJQl83MzIyX0h3RXJyQ2xlYXJfSUJDQnVzVG9TUENwYXJpdHlFcnJDbGVhcl8xX1JNQVNLIDB4MQorI2RlZmluZSBRSUJfNzMyMl9Id0VyckNsZWFyX0lCQ0J1c1RvU1BDUGFyaXR5RXJyQ2xlYXJfMV9MU0IgMHhFCisjZGVmaW5lIFFJQl83MzIyX0h3RXJyQ2xlYXJfSUJDQnVzVG9TUENQYXJpdHlFcnJDbGVhcl8xX01TQiAweEUKKyNkZWZpbmUgUUlCXzczMjJfSHdFcnJDbGVhcl9JQkNCdXNUb1NQQ1Bhcml0eUVyckNsZWFyXzFfUk1BU0sgMHgxCiAjZGVmaW5lIFFJQl83MzIyX0h3RXJyQ2xlYXJfSUJDQnVzRnJvbVNQQ1Bhcml0eUVyckNsZWFyXzBfTFNCIDB4RAogI2RlZmluZSBRSUJfNzMyMl9Id0VyckNsZWFyX0lCQ0J1c0Zyb21TUENQYXJpdHlFcnJDbGVhcl8wX01TQiAweEQKICNkZWZpbmUgUUlCXzczMjJfSHdFcnJDbGVhcl9JQkNCdXNGcm9tU1BDUGFyaXR5RXJyQ2xlYXJfMF9STUFTSyAweDEKLSNkZWZpbmUgUUlCXzczMjJfSHdFcnJDbGVhcl9JQkNCdXNUb1NQQ3Bhcml0eUVyckNsZWFyXzBfTFNCIDB4QwotI2RlZmluZSBRSUJfNzMyMl9Id0VyckNsZWFyX0lCQ0J1c1RvU1BDcGFyaXR5RXJyQ2xlYXJfMF9NU0IgMHhDCi0jZGVmaW5lIFFJQl83MzIyX0h3RXJyQ2xlYXJfSUJDQnVzVG9TUENwYXJpdHlFcnJDbGVhcl8wX1JNQVNLIDB4MQorI2RlZmluZSBRSUJfNzMyMl9Id0VyckNsZWFyX3N0YXR1c1ZhbGlkTm9Fb3BDbGVhcl9MU0IgMHhDCisjZGVmaW5lIFFJQl83MzIyX0h3RXJyQ2xlYXJfc3RhdHVzVmFsaWROb0VvcENsZWFyX01TQiAweEMKKyNkZWZpbmUgUUlCXzczMjJfSHdFcnJDbGVhcl9zdGF0dXNWYWxpZE5vRW9wQ2xlYXJfUk1BU0sgMHgxCiAjZGVmaW5lIFFJQl83MzIyX0h3RXJyQ2xlYXJfTEFUcmlnZ2VyZWRDbGVhcl9MU0IgMHhCCiAjZGVmaW5lIFFJQl83MzIyX0h3RXJyQ2xlYXJfTEFUcmlnZ2VyZWRDbGVhcl9NU0IgMHhCCiAjZGVmaW5lIFFJQl83MzIyX0h3RXJyQ2xlYXJfTEFUcmlnZ2VyZWRDbGVhcl9STUFTSyAweDEKQEAgLTg4MCwxNSArODgwLDE1IEBACiAjZGVmaW5lIFFJQl83MzIyX0h3RGlhZ0N0cmxfRm9yY2VJQkNCdXNGcm9tU1BDUGFyaXR5RXJyXzFfTFNCIDB4RgogI2RlZmluZSBRSUJfNzMyMl9Id0RpYWdDdHJsX0ZvcmNlSUJDQnVzRnJvbVNQQ1Bhcml0eUVycl8xX01TQiAweEYKICNkZWZpbmUgUUlCXzczMjJfSHdEaWFnQ3RybF9Gb3JjZUlCQ0J1c0Zyb21TUENQYXJpdHlFcnJfMV9STUFTSyAweDEKLSNkZWZpbmUgUUlCXzczMjJfSHdEaWFnQ3RybF9Gb3JjZXN0YXR1c1ZhbGlkTm9Fb3BfMV9MU0IgMHhFCi0jZGVmaW5lIFFJQl83MzIyX0h3RGlhZ0N0cmxfRm9yY2VzdGF0dXNWYWxpZE5vRW9wXzFfTVNCIDB4RQotI2RlZmluZSBRSUJfNzMyMl9Id0RpYWdDdHJsX0ZvcmNlc3RhdHVzVmFsaWROb0VvcF8xX1JNQVNLIDB4MQorI2RlZmluZSBRSUJfNzMyMl9Id0RpYWdDdHJsX0ZvcmNlSUJDQnVzVG9TUENQYXJpdHlFcnJfMV9MU0IgMHhFCisjZGVmaW5lIFFJQl83MzIyX0h3RGlhZ0N0cmxfRm9yY2VJQkNCdXNUb1NQQ1Bhcml0eUVycl8xX01TQiAweEUKKyNkZWZpbmUgUUlCXzczMjJfSHdEaWFnQ3RybF9Gb3JjZUlCQ0J1c1RvU1BDUGFyaXR5RXJyXzFfUk1BU0sgMHgxCiAjZGVmaW5lIFFJQl83MzIyX0h3RGlhZ0N0cmxfRm9yY2VJQkNCdXNGcm9tU1BDUGFyaXR5RXJyXzBfTFNCIDB4RAogI2RlZmluZSBRSUJfNzMyMl9Id0RpYWdDdHJsX0ZvcmNlSUJDQnVzRnJvbVNQQ1Bhcml0eUVycl8wX01TQiAweEQKICNkZWZpbmUgUUlCXzczMjJfSHdEaWFnQ3RybF9Gb3JjZUlCQ0J1c0Zyb21TUENQYXJpdHlFcnJfMF9STUFTSyAweDEKLSNkZWZpbmUgUUlCXzczMjJfSHdEaWFnQ3RybF9Gb3JjZXN0YXR1c1ZhbGlkTm9Fb3BfMF9MU0IgMHhDCi0jZGVmaW5lIFFJQl83MzIyX0h3RGlhZ0N0cmxfRm9yY2VzdGF0dXNWYWxpZE5vRW9wXzBfTVNCIDB4QwotI2RlZmluZSBRSUJfNzMyMl9Id0RpYWdDdHJsX0ZvcmNlc3RhdHVzVmFsaWROb0VvcF8wX1JNQVNLIDB4MQorI2RlZmluZSBRSUJfNzMyMl9Id0RpYWdDdHJsX0ZvcmNlSUJDQnVzVG9TUENQYXJpdHlFcnJfMF9MU0IgMHhDCisjZGVmaW5lIFFJQl83MzIyX0h3RGlhZ0N0cmxfRm9yY2VJQkNCdXNUb1NQQ1Bhcml0eUVycl8wX01TQiAweEMKKyNkZWZpbmUgUUlCXzczMjJfSHdEaWFnQ3RybF9Gb3JjZUlCQ0J1c1RvU1BDUGFyaXR5RXJyXzBfUk1BU0sgMHgxCiAKICNkZWZpbmUgUUlCXzczMjJfRVhUU3RhdHVzX09GRlMgMHhDMAogI2RlZmluZSBRSUJfNzMyMl9FWFRTdGF0dXNfREVGIDB4MDAwMDAwMDAwMDAwWDAwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfZGlhZy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfZGlhZy5jCmluZGV4IGNhOThkZDUuLjA1ZGNmMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2RpYWcuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9kaWFnLmMKQEAgLTIzMyw2ICsyMzMsNyBAQAogCXUzMiBfX2lvbWVtICprcmIzMiA9ICh1MzIgX19pb21lbSAqKWRkLT5rcmVnYmFzZTsKIAl1MzIgX19pb21lbSAqbWFwID0gTlVMTDsKIAl1MzIgY250ID0gMDsKKwl1MzIgdG90NGssIG9mZnM0azsKIAogCS8qIEZpcnN0LCBzaW1wbGVzdCBjYXNlLCBvZmZzZXQgaXMgd2l0aGluIHRoZSBmaXJzdCBtYXAuICovCiAJa3JlZ2xlbiA9IChkZC0+a3JlZ2VuZCAtIGRkLT5rcmVnYmFzZSkgKiBzaXplb2YodTY0KTsKQEAgLTI1MCw3ICsyNTEsOCBAQAogCWlmIChkZC0+dXNlcmJhc2UpIHsKIAkJLyogSWYgdXNlciByZWdzIG1hcHBlZCwgdGhleSBhcmUgYWZ0ZXIgc2VuZCwgc28gc2V0IGxpbWl0LiAqLwogCQl1MzIgdWxpbSA9IChkZC0+Y2ZnY3R4dHMgKiBkZC0+dXJlZ19hbGlnbikgKyBkZC0+dXJlZ2Jhc2U7Ci0JCXNuZF9saW0gPSBkZC0+dXJlZ2Jhc2U7CisJCWlmICghZGQtPnBpb3ZsMTViYXNlKQorCQkJc25kX2xpbSA9IGRkLT51cmVnYmFzZTsKIAkJa3JiMzIgPSAodTMyIF9faW9tZW0gKilkZC0+dXNlcmJhc2U7CiAJCWlmIChvZmZzZXQgPj0gZGQtPnVyZWdiYXNlICYmIG9mZnNldCA8IHVsaW0pIHsKIAkJCW1hcCA9IGtyYjMyICsgKG9mZnNldCAtIGRkLT51cmVnYmFzZSkgLyBzaXplb2YodTMyKTsKQEAgLTI3NywxNCArMjc5LDE0IEBACiAJLyogSWYgNGsgYnVmZmVycyBleGlzdCwgYWNjb3VudCBmb3IgdGhlbSBieSBidW1waW5nCiAJICogYXBwcm9wcmlhdGUgbGltaXQuCiAJICovCisJdG90NGsgPSBkZC0+cGlvYmNudDRrICogZGQtPmFsaWduNGs7CisJb2ZmczRrID0gZGQtPnBpb2J1ZmJhc2UgPj4gMzI7CiAJaWYgKGRkLT5waW9iY250NGspIHsKLQkJdTMyIHRvdDRrID0gZGQtPnBpb2JjbnQ0ayAqIGRkLT5hbGlnbjRrOwotCQl1MzIgb2ZmczRrID0gZGQtPnBpb2J1ZmJhc2UgPj4gMzI7CiAJCWlmIChzbmRfYm90dG9tID4gb2ZmczRrKQogCQkJc25kX2JvdHRvbSA9IG9mZnM0azsKIAkJZWxzZSB7CiAJCQkvKiA0ayBhYm92ZSAyay4gQnVtcCBzbmRfbGltLCBpZiBuZWVkZWQqLwotCQkJaWYgKCFkZC0+dXNlcmJhc2UpCisJCQlpZiAoIWRkLT51c2VyYmFzZSB8fCBkZC0+cGlvdmwxNWJhc2UpCiAJCQkJc25kX2xpbSA9IG9mZnM0ayArIHRvdDRrOwogCQl9CiAJfQpAQCAtMjk4LDYgKzMwMCwxNSBAQAogCQljbnQgPSBzbmRfbGltIC0gb2Zmc2V0OwogCX0KIAorCWlmICghbWFwICYmIG9mZnM0ayAmJiBkZC0+cGlvdmwxNWJhc2UpIHsKKwkJc25kX2xpbSA9IG9mZnM0ayArIHRvdDRrICsgMiAqIGRkLT5hbGlnbjRrOworCQlpZiAob2Zmc2V0ID49IChvZmZzNGsgKyB0b3Q0aykgJiYgb2Zmc2V0IDwgc25kX2xpbSkgeworCQkJbWFwID0gKHUzMiBfX2lvbWVtICopZGQtPnBpb3ZsMTViYXNlICsKKwkJCQkoKG9mZnNldCAtIChvZmZzNGsgKyB0b3Q0aykpIC8gc2l6ZW9mKHUzMikpOworCQkJY250ID0gc25kX2xpbSAtIG9mZnNldDsKKwkJfQorCX0KKwogbWFwcGVkOgogCWlmIChjbnRwKQogCQkqY250cCA9IGNudDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTYxMjAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTYxMjAuYwppbmRleCAxZWFkYWRjLi5hNWUyOWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE2MTIwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNjEyMC5jCkBAIC0xMzU1LDggKzEzNTUsNyBAQAogCWh3c3RhdCA9IHFpYl9yZWFkX2tyZWc2NChkZCwga3JfaHdlcnJzdGF0dXMpOwogCWlmIChod3N0YXQpIHsKIAkJLyogc2hvdWxkIGp1c3QgaGF2ZSBQTEwsIGNsZWFyIGFsbCBzZXQsIGluIGFuIGNhc2UgKi8KLQkJaWYgKGh3c3RhdCAmIH5RTE9HSUNfSUJfSFdFX1NFUkRFU1BMTEZBSUxFRCkKLQkJCXFpYl93cml0ZV9rcmVnKGRkLCBrcl9od2VycmNsZWFyLCBod3N0YXQpOworCQlxaWJfd3JpdGVfa3JlZyhkZCwga3JfaHdlcnJjbGVhciwgaHdzdGF0KTsKIAkJcWliX3dyaXRlX2tyZWcoZGQsIGtyX2VycmNsZWFyLCBFUlJfTUFTSyhIYXJkd2FyZUVycikpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNzMyMi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNzMyMi5jCmluZGV4IDUwMzk5MmQuLjVlZWRmODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTczMjIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE3MzIyLmMKQEAgLTU0Myw3ICs1NDMsNyBAQAogc3RhdGljIHZvaWQgd3JpdGVfdHhfc2VyZGVzX3BhcmFtKHN0cnVjdCBxaWJfcHBvcnRkYXRhICosIHN0cnVjdCB0eGRkc19lbnQgKik7CiAKICNkZWZpbmUgVFhERFNfVEFCTEVfU1ogMTYgLyogbnVtYmVyIG9mIGVudHJpZXMgcGVyIHNwZWVkIGluIG9uY2hpcCB0YWJsZSAqLwotI2RlZmluZSBUWEREU19FWFRSQV9TWiAxMSAvKiBudW1iZXIgb2YgZXh0cmEgdHggc2V0dGluZ3MgZW50cmllcyAqLworI2RlZmluZSBUWEREU19FWFRSQV9TWiAxMyAvKiBudW1iZXIgb2YgZXh0cmEgdHggc2V0dGluZ3MgZW50cmllcyAqLwogI2RlZmluZSBTRVJERVNfQ0hBTlMgNCAvKiB5ZXMsIGl0J3Mgb2J2aW91cywgYnV0IG9uZSBsZXNzIG1hZ2ljIG51bWJlciAqLwogCiAjZGVmaW5lIEgxX0ZPUkNFX1ZBTCA4CkBAIC0xMTAwLDkgKzExMDAsOSBAQAogCUhXRV9BVVRPX1AoU0RtYU1lbVJlYWRFcnIsIDEpLAogCUhXRV9BVVRPX1AoU0RtYU1lbVJlYWRFcnIsIDApLAogCUhXRV9BVVRPX1AoSUJDQnVzRnJvbVNQQ1Bhcml0eUVyciwgMSksCisJSFdFX0FVVE9fUChJQkNCdXNUb1NQQ1Bhcml0eUVyciwgMSksCiAJSFdFX0FVVE9fUChJQkNCdXNGcm9tU1BDUGFyaXR5RXJyLCAwKSwKLQlIV0VfQVVUT19QKHN0YXR1c1ZhbGlkTm9Fb3AsIDEpLAotCUhXRV9BVVRPX1Aoc3RhdHVzVmFsaWROb0VvcCwgMCksCisJSFdFX0FVVE8oc3RhdHVzVmFsaWROb0VvcCksCiAJSFdFX0FVVE8oTEFUcmlnZ2VyZWQpLAogCXsgLm1hc2sgPSAwIH0KIH07CkBAIC00NzYzLDYgKzQ3NjMsOCBAQAogCQlTWU1fTUFTSyhJQlBDU0NvbmZpZ18wLCB0eF9yeF9yZXNldCk7CiAKIAl2YWwgPSBxaWJfcmVhZF9rcmVnX3BvcnQocHBkLCBrcnBfaWJfcGNzY29uZmlnKTsKKwlxaWJfd3JpdGVfa3JlZyhkZCwga3JfaHdlcnJtYXNrLAorCQkgICAgICAgZGQtPmNzcGVjLT5od2Vycm1hc2sgJiB+SFdFX01BU0soc3RhdHVzVmFsaWROb0VvcCkpOwogCXFpYl93cml0ZV9rcmVnX3BvcnQocHBkLCBrcnBfaWJjY3RybF9hLAogCQkJICAgIHBwZC0+Y3BzcGVjLT5pYmNjdHJsX2EgJgogCQkJICAgIH5TWU1fTUFTSyhJQkNDdHJsQV8wLCBJQkxpbmtFbikpOwpAQCAtNDc3Miw2ICs0Nzc0LDkgQEAKIAlxaWJfd3JpdGVfa3JlZ19wb3J0KHBwZCwga3JwX2liX3Bjc2NvbmZpZywgdmFsICYgfnJlc2V0X2JpdHMpOwogCXFpYl93cml0ZV9rcmVnX3BvcnQocHBkLCBrcnBfaWJjY3RybF9hLCBwcGQtPmNwc3BlYy0+aWJjY3RybF9hKTsKIAlxaWJfd3JpdGVfa3JlZyhkZCwga3Jfc2NyYXRjaCwgMFVMTCk7CisJcWliX3dyaXRlX2tyZWcoZGQsIGtyX2h3ZXJyY2xlYXIsCisJCSAgICAgICBTWU1fTUFTSyhId0VyckNsZWFyLCBzdGF0dXNWYWxpZE5vRW9wQ2xlYXIpKTsKKwlxaWJfd3JpdGVfa3JlZyhkZCwga3JfaHdlcnJtYXNrLCBkZC0+Y3NwZWMtPmh3ZXJybWFzayk7CiB9CiAKIC8qCkBAIC01NjI0LDYgKzU2MjksOCBAQAogCQkJaWYgKHBwZC0+cG9ydCAhPSBwb3J0IHx8ICFwcGQtPmxpbmtfc3BlZWRfc3VwcG9ydGVkKQogCQkJCWNvbnRpbnVlOwogCQkJcHBkLT5jcHNwZWMtPm5vX2VlcCA9IHZhbDsKKwkJCWlmIChzZXRoMSkKKwkJCQlwcGQtPmNwc3BlYy0+aDFfdmFsID0gaDE7CiAJCQkvKiBub3cgY2hhbmdlIHRoZSBJQkMgYW5kIHNlcmRlcywgb3ZlcnJpZGluZyBnZW5lcmljICovCiAJCQlpbml0X3R4ZGRzX3RhYmxlKHBwZCwgMSk7CiAJCQlhbnkrKzsKQEAgLTYwNjQsOSArNjA3MSw5IEBACiAJCSAqIHRoZSAiY2FibGUgaW5mbyIgc2V0dXAgaGVyZS4gIENhbiBiZSBvdmVycmlkZGVuCiAJCSAqIGluIGFkYXB0ZXItc3BlY2lmaWMgcm91dGluZXMuCiAJCSAqLwotCQlpZiAoIShwcGQtPmRkLT5mbGFncyAmIFFJQl9IQVNfUVNGUCkpIHsKLQkJCWlmICghSVNfUU1IKHBwZC0+ZGQpICYmICFJU19RTUUocHBkLT5kZCkpCi0JCQkJcWliX2RldmluZm8ocHBkLT5kZC0+cGNpZGV2LCAiSUIldToldTogIgorCQlpZiAoIShkZC0+ZmxhZ3MgJiBRSUJfSEFTX1FTRlApKSB7CisJCQlpZiAoIUlTX1FNSChkZCkgJiYgIUlTX1FNRShkZCkpCisJCQkJcWliX2RldmluZm8oZGQtPnBjaWRldiwgIklCJXU6JXU6ICIKIAkJCQkJICAgICJVbmtub3duIG1lenphbmluZSBjYXJkIHR5cGVcbiIsCiAJCQkJCSAgICBkZC0+dW5pdCwgcHBkLT5wb3J0KTsKIAkJCWNwLT5oMV92YWwgPSBJU19RTUgoZGQpID8gSDFfRk9SQ0VfUU1IIDogSDFfRk9SQ0VfUU1FOwpAQCAtNjExOSw5ICs2MTI2LDI1IEBACiAJcWliX3NldF9jdHh0Y250KGRkKTsKIAogCWlmIChxaWJfd2NfcGF0KSB7Ci0JCXJldCA9IGluaXRfY2hpcF93Y19wYXQoZGQsIE5VTV9WTDE1X0JVRlMgKiBkZC0+YWxpZ240ayk7CisJCXJlc291cmNlX3NpemVfdCB2bDE1b2ZmOworCQkvKgorCQkgKiBXZSBkbyBub3Qgc2V0IFdDIG9uIHRoZSBWTDE1IGJ1ZmZlcnMgdG8gYXZvaWQKKwkJICogYSByYXJlIHByb2JsZW0gd2l0aCB1bmFsaWduZWQgd3JpdGVzIGZyb20KKwkJICogaW50ZXJydXB0LWZsdXNoZWQgc3RvcmUgYnVmZmVycywgc28gd2UgbmVlZAorCQkgKiB0byBtYXAgdGhvc2Ugc2VwYXJhdGVseSBoZXJlLiAgV2UgY2FuJ3Qgc29sdmUKKwkJICogdGhpcyBmb3IgdGhlIHJhcmVseSB1c2VkIG10cnIgY2FzZS4KKwkJICovCisJCXJldCA9IGluaXRfY2hpcF93Y19wYXQoZGQsIDApOwogCQlpZiAocmV0KQogCQkJZ290byBiYWlsOworCisJCS8qIHZsMTUgYnVmZmVycyBzdGFydCBqdXN0IGFmdGVyIHRoZSA0ayBidWZmZXJzICovCisJCXZsMTVvZmYgPSBkZC0+cGh5c2FkZHIgKyAoZGQtPnBpb2J1ZmJhc2UgPj4gMzIpICsKKwkJCWRkLT5waW9iY250NGsgKiBkZC0+YWxpZ240azsKKwkJZGQtPnBpb3ZsMTViYXNlCT0gaW9yZW1hcF9ub2NhY2hlKHZsMTVvZmYsCisJCQkJCQkgIE5VTV9WTDE1X0JVRlMgKiBkZC0+YWxpZ240ayk7CisJCWlmICghZGQtPnBpb3ZsMTViYXNlKQorCQkJZ290byBiYWlsOwogCX0KIAlxaWJfNzMyMl9zZXRfYmFzZWFkZHJzKGRkKTsgLyogc2V0IGNoaXAgYWNjZXNzIHBvaW50ZXJzIG5vdyAqLwogCkBAIC02OTMyLDYgKzY5NTUsOCBAQAogCXsgIDAsIDAsIDAsIDExIH0sCS8qIFFNRTczNDIgYmFja3BsYW5lIHNldHRpbmdzICovCiAJeyAgMCwgMCwgMCwgMTEgfSwJLyogUU1FNzM0MiBiYWNrcGxhbmUgc2V0dGluZ3MgKi8KIAl7ICAwLCAwLCAwLCAxMSB9LAkvKiBRTUU3MzQyIGJhY2twbGFuZSBzZXR0aW5ncyAqLworCXsgIDAsIDAsIDAsICAzIH0sCS8qIFFNSDczNDIgYmFja3BsYW5lIHNldHRpbmdzICovCisJeyAgMCwgMCwgMCwgIDQgfSwJLyogUU1INzM0MiBiYWNrcGxhbmUgc2V0dGluZ3MgKi8KIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHhkZHNfZW50IHR4ZGRzX2V4dHJhX2RkcltUWEREU19FWFRSQV9TWl0gPSB7CkBAIC02OTQ3LDYgKzY5NzIsOCBAQAogCXsgIDAsIDAsIDAsIDEzIH0sCS8qIFFNRTczNDIgYmFja3BsYW5lIHNldHRpbmdzICovCiAJeyAgMCwgMCwgMCwgMTMgfSwJLyogUU1FNzM0MiBiYWNrcGxhbmUgc2V0dGluZ3MgKi8KIAl7ICAwLCAwLCAwLCAxMyB9LAkvKiBRTUU3MzQyIGJhY2twbGFuZSBzZXR0aW5ncyAqLworCXsgIDAsIDAsIDAsICA5IH0sCS8qIFFNSDczNDIgYmFja3BsYW5lIHNldHRpbmdzICovCisJeyAgMCwgMCwgMCwgMTAgfSwJLyogUU1INzM0MiBiYWNrcGxhbmUgc2V0dGluZ3MgKi8KIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHhkZHNfZW50IHR4ZGRzX2V4dHJhX3FkcltUWEREU19FWFRSQV9TWl0gPSB7CkBAIC02OTYyLDYgKzY5ODksOCBAQAogCXsgIDAsIDEsIDEyLCAgNiB9LAkvKiBRTUU3MzQyIGJhY2twbGFuZSBzZXR0aW5nICovCiAJeyAgMCwgMSwgMTIsICA3IH0sCS8qIFFNRTczNDIgYmFja3BsYW5lIHNldHRpbmcgKi8KIAl7ICAwLCAxLCAxMiwgIDggfSwJLyogUU1FNzM0MiBiYWNrcGxhbmUgc2V0dGluZyAqLworCXsgIDAsIDEsICAwLCAxMCB9LAkvKiBRTUg3MzQyIGJhY2twbGFuZSBzZXR0aW5ncyAqLworCXsgIDAsIDEsICAwLCAxMiB9LAkvKiBRTUg3MzQyIGJhY2twbGFuZSBzZXR0aW5ncyAqLwogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB0eGRkc19lbnQgKmdldF9hdHRlbl90YWJsZShjb25zdCBzdHJ1Y3QgdHhkZHNfZW50ICp0eGRkcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2luaXQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2luaXQuYwppbmRleCA5YjQwZjM0Li5hODczZGQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pbml0LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaW5pdC5jCkBAIC0xMDU5LDcgKzEwNTksNyBAQAogCQlnb3RvIGJhaWxfZGV2OwogCX0KIAotCXFpYl9jcV93cSA9IGNyZWF0ZV93b3JrcXVldWUoInFpYl9jcSIpOworCXFpYl9jcV93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJxaWJfY3EiKTsKIAlpZiAoIXFpYl9jcV93cSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGJhaWxfd3E7CkBAIC0xMjg5LDggKzEyODksMTggQEAKIAogCWlmIChxaWJfbWluaV9pbml0IHx8IGluaXRmYWlsIHx8IHJldCkgewogCQlxaWJfc3RvcF90aW1lcnMoZGQpOworCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCQlmb3IgKHBpZHggPSAwOyBwaWR4IDwgZGQtPm51bV9wcG9ydHM7ICsrcGlkeCkKIAkJCWRkLT5mX3F1aWV0X3NlcmRlcyhkZC0+cHBvcnQgKyBwaWR4KTsKKwkJaWYgKHFpYl9taW5pX2luaXQpCisJCQlnb3RvIGJhaWw7CisJCWlmICghaikgeworCQkJKHZvaWQpIHFpYmZzX3JlbW92ZShkZCk7CisJCQlxaWJfZGV2aWNlX3JlbW92ZShkZCk7CisJCX0KKwkJaWYgKCFyZXQpCisJCQlxaWJfdW5yZWdpc3Rlcl9pYl9kZXZpY2UoZGQpOworCQlxaWJfcG9zdGluaXRfY2xlYW51cChkZCk7CiAJCWlmIChpbml0ZmFpbCkKIAkJCXJldCA9IGluaXRmYWlsOwogCQlnb3RvIGJhaWw7CkBAIC0xNDcyLDYgKzE0ODIsOSBAQAogCQlkbWFfYWRkcl90IHBhID0gcmNkLT5yY3ZlZ3JidWZfcGh5c1tjaHVua107CiAJCXVuc2lnbmVkIGk7CiAKKwkJLyogY2xlYXIgZm9yIHNlY3VyaXR5IGFuZCBzYW5pdHkgb24gZWFjaCB1c2UgKi8KKwkJbWVtc2V0KHJjZC0+cmN2ZWdyYnVmW2NodW5rXSwgMCwgc2l6ZSk7CisKIAkJZm9yIChpID0gMDsgZSA8IGVncmNudCAmJiBpIDwgZWdycGVyY2h1bms7IGUrKywgaSsrKSB7CiAJCQlkZC0+Zl9wdXRfdGlkKGRkLCBlICsgZWdyb2ZmICsKIAkJCQkJICAodTY0IF9faW9tZW0gKikKQEAgLTE0OTksNiArMTUxMiwxMiBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCisvKgorICogTm90ZTogQ2hhbmdlcyB0byB0aGlzIHJvdXRpbmUgc2hvdWxkIGJlIG1pcnJvcmVkCisgKiBmb3IgdGhlIGRpYWdub3N0aWNzIHJvdXRpbmUgcWliX3JlbWFwX2lvYWRkcjMyKCkuCisgKiBUaGVyZSBpcyBhbHNvIHJlbGF0ZWQgY29kZSBmb3IgVkwxNSBidWZmZXJzIGluIHFpYl9pbml0XzczMjJfdmFyaWFibGVzKCkuCisgKiBUaGUgdGVhcmRvd24gY29kZSB0aGF0IHVubWFwcyBpcyBpbiBxaWJfcGNpZV9kZGNsZWFudXAoKQorICovCiBpbnQgaW5pdF9jaGlwX3djX3BhdChzdHJ1Y3QgcWliX2RldmRhdGEgKmRkLCB1MzIgdmwxNWJ1ZmxlbikKIHsKIAl1NjQgX19pb21lbSAqcWliX2tyZWdiYXNlID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3BjaWUuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3BjaWUuYwppbmRleCBjOTI2YmY0Li43ZmE2ZTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9wY2llLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfcGNpZS5jCkBAIC0xNzksNiArMTc5LDggQEAKIAkJaW91bm1hcChkZC0+cGlvYmFzZSk7CiAJaWYgKGRkLT51c2VyYmFzZSkKIAkJaW91bm1hcChkZC0+dXNlcmJhc2UpOworCWlmIChkZC0+cGlvdmwxNWJhc2UpCisJCWlvdW5tYXAoZGQtPnBpb3ZsMTViYXNlKTsKIAogCXBjaV9kaXNhYmxlX2RldmljZShkZC0+cGNpZGV2KTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKGRkLT5wY2lkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfc2Q3MjIwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9zZDcyMjAuYwppbmRleCAwYWVlZDBlLi5lOWY5ZjhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9zZDcyMjAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9zZDcyMjAuYwpAQCAtMSw1ICsxLDYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgUUxvZ2ljIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIFFMb2dpYyBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KQEAgLTM3LDEwICszOCwxNCBAQAogCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogCiAjaW5jbHVkZSAicWliLmgiCiAjaW5jbHVkZSAicWliXzcyMjAuaCIKIAorI2RlZmluZSBTRDcyMjBfRldfTkFNRSAicWxvZ2ljL3NkNzIyMC5mdyIKK01PRFVMRV9GSVJNV0FSRShTRDcyMjBfRldfTkFNRSk7CisKIC8qCiAgKiBTYW1lIGFzIGluIHFpYl9pYmE3MjIwLmMsIGJ1dCBqdXN0IHRoZSByZWdpc3RlcnMgbmVlZGVkIGhlcmUuCiAgKiBDb3VsZCBtb3ZlIHdob2xlIHNldCB0byBxaWJfNzIyMC5oLCBidXQgZGVjaWRlZCBiZXR0ZXIgdG8ga2VlcApAQCAtMTAyLDYgKzEwNywxMCBAQAogLyogVHdlYWsgdGhlIHJlZ2lzdGVyIChDTVVDVFJMNSkgdGhhdCBjb250YWlucyB0aGUgVFJJTVNFTEYgY29udHJvbHMgKi8KIHN0YXRpYyBpbnQgcWliX3NkX3RyaW1zZWxmKHN0cnVjdCBxaWJfZGV2ZGF0YSAqZGQsIGludCB2YWwpOwogc3RhdGljIGludCBlcGJfYWNjZXNzKHN0cnVjdCBxaWJfZGV2ZGF0YSAqZGQsIGludCBzZG51bSwgaW50IGNsYWltKTsKK3N0YXRpYyBpbnQgcWliX3NkNzIyMF9pYl9sb2FkKHN0cnVjdCBxaWJfZGV2ZGF0YSAqZGQsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KTsKK3N0YXRpYyBpbnQgcWliX3NkNzIyMF9pYl92Znkoc3RydWN0IHFpYl9kZXZkYXRhICpkZCwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyk7CiAKIC8qCiAgKiBCZWxvdyBrZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSAib25jZSBwZXIgcG93ZXItb24iIGluaXRpYWxpemF0aW9uIGhhcwpAQCAtMTEwLDEwICsxMTksMTMgQEAKICAqIHN0YXRlIG9mIHRoZSByZXNldCAicGluIiwgaXMgbm8gbG9uZ2VyIHZhbGlkLiBJbnN0ZWFkLCB3ZSBjaGVjayBmb3IgdGhlCiAgKiBhY3R1YWwgdUMgY29kZSBoYXZpbmcgYmVlbiBsb2FkZWQuCiAgKi8KLXN0YXRpYyBpbnQgcWliX2lic2RfdWNvZGVfbG9hZGVkKHN0cnVjdCBxaWJfcHBvcnRkYXRhICpwcGQpCitzdGF0aWMgaW50IHFpYl9pYnNkX3Vjb2RlX2xvYWRlZChzdHJ1Y3QgcWliX3Bwb3J0ZGF0YSAqcHBkLAorCQkJCSBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQogewogCXN0cnVjdCBxaWJfZGV2ZGF0YSAqZGQgPSBwcGQtPmRkOwotCWlmICghZGQtPmNzcGVjLT5zZXJkZXNfZmlyc3RfaW5pdF9kb25lICYmIChxaWJfc2Q3MjIwX2liX3ZmeShkZCkgPiAwKSkKKworCWlmICghZGQtPmNzcGVjLT5zZXJkZXNfZmlyc3RfaW5pdF9kb25lICYmCisJICAgIHFpYl9zZDcyMjBfaWJfdmZ5KGRkLCBmdykgPiAwKQogCQlkZC0+Y3NwZWMtPnNlcmRlc19maXJzdF9pbml0X2RvbmUgPSAxOwogCXJldHVybiBkZC0+Y3NwZWMtPnNlcmRlc19maXJzdF9pbml0X2RvbmU7CiB9CkBAIC0zNzcsNiArMzg5LDcgQEAKICAqLwogaW50IHFpYl9zZDcyMjBfaW5pdChzdHJ1Y3QgcWliX2RldmRhdGEgKmRkKQogeworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CiAJaW50IHJldCA9IDE7IC8qIGRlZmF1bHQgdG8gZmFpbHVyZSAqLwogCWludCBmaXJzdF9yZXNldCwgd2FzX3Jlc2V0OwogCkBAIC0zODcsOCArNDAwLDE1IEBACiAJCXFpYl9pYnNkX3Jlc2V0KGRkLCAxKTsKIAkJcWliX3NkX3RyaW1kb25lX21vbml0b3IoZGQsICJEcml2ZXItcmVsb2FkIik7CiAJfQorCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIFNENzIyMF9GV19OQU1FLCAmZGQtPnBjaWRldi0+ZGV2KTsKKwlpZiAocmV0KSB7CisJCXFpYl9kZXZfZXJyKGRkLCAiRmFpbGVkIHRvIGxvYWQgSUIgU0VSREVTIGltYWdlXG4iKTsKKwkJZ290byBkb25lOworCX0KKwogCS8qIFN1YnN0aXR1dGUgb3VyIGRlZHVjZWQgdmFsdWUgZm9yIHdhc19yZXNldCAqLwotCXJldCA9IHFpYl9pYnNkX3Vjb2RlX2xvYWRlZChkZC0+cHBvcnQpOworCXJldCA9IHFpYl9pYnNkX3Vjb2RlX2xvYWRlZChkZC0+cHBvcnQsIGZ3KTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBiYWlsOwogCkBAIC00MzcsMTMgKzQ1NywxMyBAQAogCQlpbnQgdmZ5OwogCQlpbnQgdHJpbV9kb25lOwogCi0JCXJldCA9IHFpYl9zZDcyMjBfaWJfbG9hZChkZCk7CisJCXJldCA9IHFpYl9zZDcyMjBfaWJfbG9hZChkZCwgZncpOwogCQlpZiAocmV0IDwgMCkgewogCQkJcWliX2Rldl9lcnIoZGQsICJGYWlsZWQgdG8gbG9hZCBJQiBTRVJERVMgaW1hZ2VcbiIpOwogCQkJZ290byBiYWlsOwogCQl9IGVsc2UgewogCQkJLyogTG9hZGVkIGltYWdlLCB0cnkgdG8gdmVyaWZ5ICovCi0JCQl2ZnkgPSBxaWJfc2Q3MjIwX2liX3ZmeShkZCk7CisJCQl2ZnkgPSBxaWJfc2Q3MjIwX2liX3ZmeShkZCwgZncpOwogCQkJaWYgKHZmeSAhPSByZXQpIHsKIAkJCQlxaWJfZGV2X2VycihkZCwgIlNFUkRFUyBQUkFNIFZGWSBmYWlsZWRcbiIpOwogCQkJCWdvdG8gYmFpbDsKQEAgLTUwNiw2ICs1MjYsOCBAQAogZG9uZToKIAkvKiBzdGFydCByZWxvY2sgdGltZXIgcmVnYXJkbGVzcywgYnV0IHN0YXJ0IGF0IDEgc2Vjb25kICovCiAJc2V0XzcyMjBfcmVsb2NrX3BvbGwoZGQsIC0xKTsKKworCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTgyOSw4ICs4NTEsOCBAQAogCiAjZGVmaW5lIFBST0dfQ0hVTksgNjQKIAotaW50IHFpYl9zZDcyMjBfcHJvZ19sZChzdHJ1Y3QgcWliX2RldmRhdGEgKmRkLCBpbnQgc2RudW0sCi0JCSAgICAgICB1OCAqaW1nLCBpbnQgbGVuLCBpbnQgb2Zmc2V0KQorc3RhdGljIGludCBxaWJfc2Q3MjIwX3Byb2dfbGQoc3RydWN0IHFpYl9kZXZkYXRhICpkZCwgaW50IHNkbnVtLAorCQkJICAgICAgY29uc3QgdTggKmltZywgaW50IGxlbiwgaW50IG9mZnNldCkKIHsKIAlpbnQgY250LCBzb2ZhciwgcmVxOwogCkBAIC04NDAsNyArODYyLDcgQEAKIAkJaWYgKHJlcSA+IFBST0dfQ0hVTkspCiAJCQlyZXEgPSBQUk9HX0NIVU5LOwogCQljbnQgPSBxaWJfc2Q3MjIwX3JhbV94ZmVyKGRkLCBzZG51bSwgb2Zmc2V0ICsgc29mYXIsCi0JCQkJCSAgaW1nICsgc29mYXIsIHJlcSwgMCk7CisJCQkJCSAgKHU4ICopaW1nICsgc29mYXIsIHJlcSwgMCk7CiAJCWlmIChjbnQgPCByZXEpIHsKIAkJCXNvZmFyID0gLTE7CiAJCQlicmVhazsKQEAgLTg1Myw4ICs4NzUsOCBAQAogI2RlZmluZSBWRllfQ0hVTksgNjQKICNkZWZpbmUgU0RfUFJBTV9FUlJPUl9MSU1JVCA0MgogCi1pbnQgcWliX3NkNzIyMF9wcm9nX3ZmeShzdHJ1Y3QgcWliX2RldmRhdGEgKmRkLCBpbnQgc2RudW0sCi0JCQljb25zdCB1OCAqaW1nLCBpbnQgbGVuLCBpbnQgb2Zmc2V0KQorc3RhdGljIGludCBxaWJfc2Q3MjIwX3Byb2dfdmZ5KHN0cnVjdCBxaWJfZGV2ZGF0YSAqZGQsIGludCBzZG51bSwKKwkJCSAgICAgICBjb25zdCB1OCAqaW1nLCBpbnQgbGVuLCBpbnQgb2Zmc2V0KQogewogCWludCBjbnQsIHNvZmFyLCByZXEsIGlkeCwgZXJyb3JzOwogCXVuc2lnbmVkIGNoYXIgcmVhZGJhY2tbVkZZX0NIVU5LXTsKQEAgLTg4MSw2ICs5MDMsMTggQEAKIAlyZXR1cm4gZXJyb3JzID8gLWVycm9ycyA6IHNvZmFyOwogfQogCitzdGF0aWMgaW50CitxaWJfc2Q3MjIwX2liX2xvYWQoc3RydWN0IHFpYl9kZXZkYXRhICpkZCwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKK3sKKwlyZXR1cm4gcWliX3NkNzIyMF9wcm9nX2xkKGRkLCBJQl83MjIwX1NFUkRFUywgZnctPmRhdGEsIGZ3LT5zaXplLCAwKTsKK30KKworc3RhdGljIGludAorcWliX3NkNzIyMF9pYl92Znkoc3RydWN0IHFpYl9kZXZkYXRhICpkZCwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKK3sKKwlyZXR1cm4gcWliX3NkNzIyMF9wcm9nX3ZmeShkZCwgSUJfNzIyMF9TRVJERVMsIGZ3LT5kYXRhLCBmdy0+c2l6ZSwgMCk7Cit9CisKIC8qCiAgKiBJUlEgbm90IHNldCB1cCBhdCB0aGlzIHBvaW50IGluIGluaXQsIHNvIHdlIHBvbGwuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3NkNzIyMF9pbWcuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3NkNzIyMF9pbWcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTExMThmYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9zZDcyMjBfaW1nLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggUUxvZ2ljIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCi0gKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKLSAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQotICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKLSAqCi0gKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgotICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZwotICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICAgICAgZGlzY2xhaW1lci4KLSAqCi0gKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAotICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUwotICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgotICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQotICogU09GVFdBUkUuCi0gKi8KLQotLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbWVtb3J5IGltYWdlIGZyb20gdGhlIHZlbmRvciwgdG8gYmUgY29waWVkIGludG8KLSAqIHRoZSBJQiBTRVJERVMgb2YgdGhlIElCQTcyMjAgZHVyaW5nIGluaXRpYWxpemF0aW9uLgotICogVGhlIGZpbGUgYWxzbyBpbmNsdWRlcyB0aGUgdHdvIGZ1bmN0aW9ucyB3aGljaCB1c2UgdGhpcyBpbWFnZS4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0KLSNpbmNsdWRlICJxaWIuaCIKLSNpbmNsdWRlICJxaWJfNzIyMC5oIgotCi1zdGF0aWMgdW5zaWduZWQgY2hhciBxaWJfc2Q3MjIwX2liX2ltZ1tdID0gewotLyowMDAwKi8weDAyLCAweDBBLCAweDI5LCAweDAyLCAweDBBLCAweDg3LCAweEU1LCAweEU2LAotCTB4MzAsIDB4RTYsIDB4MDQsIDB4N0YsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N0YsCi0vKjAwMTAqLzB4MDAsIDB4RTUsIDB4RTIsIDB4MzAsIDB4RTQsIDB4MDQsIDB4N0UsIDB4MDEsCi0JMHg4MCwgMHgwMiwgMHg3RSwgMHgwMCwgMHhFRSwgMHg1RiwgMHg2MCwgMHgwOCwKLS8qMDAyMCovMHg1MywgMHhGOSwgMHhGNywgMHhFNCwgMHhGNSwgMHhGRSwgMHg4MCwgMHgwOCwKLQkweDdGLCAweDBBLCAweDEyLCAweDE3LCAweDMxLCAweDEyLCAweDBFLCAweEEyLAotLyowMDMwKi8weDc1LCAweEZDLCAweDA4LCAweEU0LCAweEY1LCAweEZELCAweEU1LCAweEU3LAotCTB4MjAsIDB4RTcsIDB4MDMsIDB4NDMsIDB4RjksIDB4MDgsIDB4MjIsIDB4MDAsCi0vKjAwNDAqLzB4MDEsIDB4MjAsIDB4MTEsIDB4MDAsIDB4MDQsIDB4MjAsIDB4MDAsIDB4NzUsCi0JMHg1MSwgMHgwMSwgMHhFNCwgMHhGNSwgMHg1MiwgMHhGNSwgMHg1MywgMHhGNSwKLS8qMDA1MCovMHg1MiwgMHhGNSwgMHg3RSwgMHg3RiwgMHgwNCwgMHgwMiwgMHgwNCwgMHgzOCwKLQkweEMyLCAweDM2LCAweDA1LCAweDUyLCAweEU1LCAweDUyLCAweEQzLCAweDk0LAotLyowMDYwKi8weDBDLCAweDQwLCAweDA1LCAweDc1LCAweDUyLCAweDAxLCAweEQyLCAweDM2LAotCTB4OTAsIDB4MDcsIDB4MEMsIDB4NzQsIDB4MDcsIDB4RjAsIDB4QTMsIDB4NzQsCi0vKjAwNzAqLzB4RkYsIDB4RjAsIDB4RTQsIDB4RjUsIDB4MEMsIDB4QTMsIDB4RjAsIDB4OTAsCi0JMHgwNywgMHgxNCwgMHhGMCwgMHhBMywgMHhGMCwgMHg3NSwgMHgwQiwgMHgyMCwKLS8qMDA4MCovMHhGNSwgMHgwOSwgMHhFNCwgMHhGNSwgMHgwOCwgMHhFNSwgMHgwOCwgMHhEMywKLQkweDk0LCAweDMwLCAweDQwLCAweDAzLCAweDAyLCAweDA0LCAweDA0LCAweDEyLAotLyowMDkwKi8weDAwLCAweDA2LCAweDE1LCAweDBCLCAweEU1LCAweDA4LCAweDcwLCAweDA0LAotCTB4N0YsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N0YsIDB4MDAsIDB4RTUsIDB4MDksCi0vKjAwQTAqLzB4NzAsIDB4MDQsIDB4N0UsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N0UsIDB4MDAsCi0JMHhFRSwgMHg1RiwgMHg2MCwgMHgwNSwgMHgxMiwgMHgxOCwgMHg3MSwgMHhEMiwKLS8qMDBCMCovMHgzNSwgMHg1MywgMHhFMSwgMHhGNywgMHhFNSwgMHgwOCwgMHg0NSwgMHgwOSwKLQkweEZGLCAweEU1LCAweDBCLCAweDI1LCAweEUwLCAweDI1LCAweEUwLCAweDI0LAotLyowMEMwKi8weDgzLCAweEY1LCAweDgyLCAweEU0LCAweDM0LCAweDA3LCAweEY1LCAweDgzLAotCTB4RUYsIDB4RjAsIDB4ODUsIDB4RTIsIDB4MjAsIDB4RTUsIDB4NTIsIDB4RDMsCi0vKjAwRDAqLzB4OTQsIDB4MDEsIDB4NDAsIDB4MEQsIDB4MTIsIDB4MTksIDB4RjMsIDB4RTAsCi0JMHg1NCwgMHhBMCwgMHg2NCwgMHg0MCwgMHg3MCwgMHgwMywgMHgwMiwgMHgwMywKLS8qMDBFMCovMHhGQiwgMHg1MywgMHhGOSwgMHhGOCwgMHg5MCwgMHg5NCwgMHg3MCwgMHhFNCwKLQkweEYwLCAweEUwLCAweEY1LCAweDEwLCAweEFGLCAweDA5LCAweDEyLCAweDFFLAotLyowMEYwKi8weEIzLCAweEFGLCAweDA4LCAweEVGLCAweDQ0LCAweDA4LCAweEY1LCAweDgyLAotCTB4NzUsIDB4ODMsIDB4ODAsIDB4RTAsIDB4RjUsIDB4MjksIDB4RUYsIDB4NDQsCi0vKjAxMDAqLzB4MDcsIDB4MTIsIDB4MUEsIDB4M0MsIDB4RjUsIDB4MjIsIDB4NTQsIDB4NDAsCi0JMHhEMywgMHg5NCwgMHgwMCwgMHg0MCwgMHgxRSwgMHhFNSwgMHgyOSwgMHg1NCwKLS8qMDExMCovMHhGMCwgMHg3MCwgMHgyMSwgMHgxMiwgMHgxOSwgMHhGMywgMHhFMCwgMHg0NCwKLQkweDgwLCAweEYwLCAweEU1LCAweDIyLCAweDU0LCAweDMwLCAweDY1LCAweDA4LAotLyowMTIwKi8weDcwLCAweDA5LCAweDEyLCAweDE5LCAweEYzLCAweEUwLCAweDU0LCAweEJGLAotCTB4RjAsIDB4ODAsIDB4MDksIDB4MTIsIDB4MTksIDB4RjMsIDB4NzQsIDB4NDAsCi0vKjAxMzAqLzB4RjAsIDB4MDIsIDB4MDMsIDB4RkIsIDB4MTIsIDB4MUEsIDB4MTIsIDB4NzUsCi0JMHg4MywgMHhBRSwgMHg3NCwgMHhGRiwgMHhGMCwgMHhBRiwgMHgwOCwgMHg3RSwKLS8qMDE0MCovMHgwMCwgMHhFRiwgMHg0NCwgMHgwNywgMHhGNSwgMHg4MiwgMHhFMCwgMHhGRCwKLQkweEU1LCAweDBCLCAweDI1LCAweEUwLCAweDI1LCAweEUwLCAweDI0LCAweDgxLAotLyowMTUwKi8weEY1LCAweDgyLCAweEU0LCAweDM0LCAweDA3LCAweEY1LCAweDgzLCAweEVELAotCTB4RjAsIDB4OTAsIDB4MDcsIDB4MEUsIDB4RTAsIDB4MDQsIDB4RjAsIDB4RUYsCi0vKjAxNjAqLzB4NDQsIDB4MDcsIDB4RjUsIDB4ODIsIDB4NzUsIDB4ODMsIDB4OTgsIDB4RTAsCi0JMHhGNSwgMHgyOCwgMHgxMiwgMHgxQSwgMHgyMywgMHg0MCwgMHgwQywgMHgxMiwKLS8qMDE3MCovMHgxOSwgMHhGMywgMHhFMCwgMHg0NCwgMHgwMSwgMHgxMiwgMHgxQSwgMHgzMiwKLQkweDAyLCAweDAzLCAweEY2LCAweEFGLCAweDA4LCAweDdFLCAweDAwLCAweDc0LAotLyowMTgwKi8weDgwLCAweENELCAweEVGLCAweENELCAweDhELCAweDgyLCAweEY1LCAweDgzLAotCTB4RTAsIDB4MzAsIDB4RTAsIDB4MEEsIDB4MTIsIDB4MTksIDB4RjMsIDB4RTAsCi0vKjAxOTAqLzB4NDQsIDB4MjAsIDB4RjAsIDB4MDIsIDB4MDMsIDB4RkIsIDB4MTIsIDB4MTksCi0JMHhGMywgMHhFMCwgMHg1NCwgMHhERiwgMHhGMCwgMHhFRSwgMHg0NCwgMHhBRSwKLS8qMDFBMCovMHgxMiwgMHgxQSwgMHg0MywgMHgzMCwgMHhFNCwgMHgwMywgMHgwMiwgMHgwMywKLQkweEZCLCAweDc0LCAweDlFLCAweDEyLCAweDFBLCAweDA1LCAweDIwLCAweEUwLAotLyowMUIwKi8weDAzLCAweDAyLCAweDAzLCAweEZCLCAweDhGLCAweDgyLCAweDhFLCAweDgzLAotCTB4RTAsIDB4MjAsIDB4RTAsIDB4MDMsIDB4MDIsIDB4MDMsIDB4RkIsIDB4MTIsCi0vKjAxQzAqLzB4MTksIDB4RjMsIDB4RTAsIDB4NDQsIDB4MTAsIDB4RjAsIDB4RTUsIDB4RTMsCi0JMHgyMCwgMHhFNywgMHgwOCwgMHhFNSwgMHgwOCwgMHgxMiwgMHgxQSwgMHgzQSwKLS8qMDFEMCovMHg0NCwgMHgwNCwgMHhGMCwgMHhBRiwgMHgwOCwgMHg3RSwgMHgwMCwgMHhFRiwKLQkweDEyLCAweDFBLCAweDNBLCAweDIwLCAweEUyLCAweDM0LCAweDEyLCAweDE5LAotLyowMUUwKi8weEYzLCAweEUwLCAweDQ0LCAweDA4LCAweEYwLCAweEU1LCAweEU0LCAweDMwLAotCTB4RTYsIDB4MDQsIDB4N0QsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N0QsIDB4MDAsCi0vKjAxRjAqLzB4RTUsIDB4N0UsIDB4QzMsIDB4OTQsIDB4MDQsIDB4NTAsIDB4MDQsIDB4N0MsCi0JMHgwMSwgMHg4MCwgMHgwMiwgMHg3QywgMHgwMCwgMHhFQywgMHg0RCwgMHg2MCwKLS8qMDIwMCovMHgwNSwgMHhDMiwgMHgzNSwgMHgwMiwgMHgwMywgMHhGQiwgMHhFRSwgMHg0NCwKLQkweEQyLCAweDEyLCAweDFBLCAweDQzLCAweDQ0LCAweDQwLCAweEYwLCAweDAyLAotLyowMjEwKi8weDAzLCAweEZCLCAweDEyLCAweDE5LCAweEYzLCAweEUwLCAweDU0LCAweEY3LAotCTB4RjAsIDB4MTIsIDB4MUEsIDB4MTIsIDB4NzUsIDB4ODMsIDB4RDIsIDB4RTAsCi0vKjAyMjAqLzB4NTQsIDB4QkYsIDB4RjAsIDB4OTAsIDB4MDcsIDB4MTQsIDB4RTAsIDB4MDQsCi0JMHhGMCwgMHhFNSwgMHg3RSwgMHg3MCwgMHgwMywgMHg3NSwgMHg3RSwgMHgwMSwKLS8qMDIzMCovMHhBRiwgMHgwOCwgMHg3RSwgMHgwMCwgMHgxMiwgMHgxQSwgMHgyMywgMHg0MCwKLQkweDEyLCAweDEyLCAweDE5LCAweEYzLCAweEUwLCAweDQ0LCAweDAxLCAweDEyLAotLyowMjQwKi8weDE5LCAweEYyLCAweEUwLCAweDU0LCAweDAyLCAweDEyLCAweDFBLCAweDMyLAotCTB4MDIsIDB4MDMsIDB4RkIsIDB4MTIsIDB4MTksIDB4RjMsIDB4RTAsIDB4NDQsCi0vKjAyNTAqLzB4MDIsIDB4MTIsIDB4MTksIDB4RjIsIDB4RTAsIDB4NTQsIDB4RkUsIDB4RjAsCi0JMHhDMiwgMHgzNSwgMHhFRSwgMHg0NCwgMHg4QSwgMHg4RiwgMHg4MiwgMHhGNSwKLS8qMDI2MCovMHg4MywgMHhFMCwgMHhGNSwgMHgxNywgMHg1NCwgMHg4RiwgMHg0NCwgMHg0MCwKLQkweEYwLCAweDc0LCAweDkwLCAweEZDLCAweEU1LCAweDA4LCAweDQ0LCAweDA3LAotLyowMjcwKi8weEZELCAweEY1LCAweDgyLCAweDhDLCAweDgzLCAweEUwLCAweDU0LCAweDNGLAotCTB4OTAsIDB4MDcsIDB4MDIsIDB4RjAsIDB4RTAsIDB4NTQsIDB4QzAsIDB4OEQsCi0vKjAyODAqLzB4ODIsIDB4OEMsIDB4ODMsIDB4RjAsIDB4NzQsIDB4OTIsIDB4MTIsIDB4MUEsCi0JMHgwNSwgMHg5MCwgMHgwNywgMHgwMywgMHgxMiwgMHgxQSwgMHgxOSwgMHg3NCwKLS8qMDI5MCovMHg4MiwgMHgxMiwgMHgxQSwgMHgwNSwgMHg5MCwgMHgwNywgMHgwNCwgMHgxMiwKLQkweDFBLCAweDE5LCAweDc0LCAweEI0LCAweDEyLCAweDFBLCAweDA1LCAweDkwLAotLyowMkEwKi8weDA3LCAweDA1LCAweDEyLCAweDFBLCAweDE5LCAweDc0LCAweDk0LCAweEZFLAotCTB4RTUsIDB4MDgsIDB4NDQsIDB4MDYsIDB4MTIsIDB4MUEsIDB4MEEsIDB4RjUsCi0vKjAyQjAqLzB4MTAsIDB4MzAsIDB4RTAsIDB4MDQsIDB4RDIsIDB4MzcsIDB4ODAsIDB4MDIsCi0JMHhDMiwgMHgzNywgMHhFNSwgMHgxMCwgMHg1NCwgMHg3RiwgMHg4RiwgMHg4MiwKLS8qMDJDMCovMHg4RSwgMHg4MywgMHhGMCwgMHgzMCwgMHg0NCwgMHgzMCwgMHgxMiwgMHgxQSwKLQkweDAzLCAweDU0LCAweDgwLCAweEQzLCAweDk0LCAweDAwLCAweDQwLCAweDA0LAotLyowMkQwKi8weEQyLCAweDM5LCAweDgwLCAweDAyLCAweEMyLCAweDM5LCAweDhGLCAweDgyLAotCTB4OEUsIDB4ODMsIDB4RTAsIDB4NDQsIDB4ODAsIDB4RjAsIDB4MTIsIDB4MUEsCi0vKjAyRTAqLzB4MDMsIDB4NTQsIDB4NDAsIDB4RDMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDQsCi0JMHhEMiwgMHgzQSwgMHg4MCwgMHgwMiwgMHhDMiwgMHgzQSwgMHg4RiwgMHg4MiwKLS8qMDJGMCovMHg4RSwgMHg4MywgMHhFMCwgMHg0NCwgMHg0MCwgMHhGMCwgMHg3NCwgMHg5MiwKLQkweEZFLCAweEU1LCAweDA4LCAweDQ0LCAweDA2LCAweDEyLCAweDFBLCAweDBBLAotLyowMzAwKi8weDMwLCAweEU3LCAweDA0LCAweEQyLCAweDM4LCAweDgwLCAweDAyLCAweEMyLAotCTB4MzgsIDB4OEYsIDB4ODIsIDB4OEUsIDB4ODMsIDB4RTAsIDB4NTQsIDB4N0YsCi0vKjAzMTAqLzB4RjAsIDB4MTIsIDB4MUUsIDB4NDYsIDB4RTQsIDB4RjUsIDB4MEEsIDB4MjAsCi0JMHgwMywgMHgwMiwgMHg4MCwgMHgwMywgMHgzMCwgMHg0MywgMHgwMywgMHgxMiwKLS8qMDMyMCovMHgxOSwgMHg5NSwgMHgyMCwgMHgwMiwgMHgwMiwgMHg4MCwgMHgwMywgMHgzMCwKLQkweDQyLCAweDAzLCAweDEyLCAweDBDLCAweDhGLCAweDMwLCAweDMwLCAweDA2LAotLyowMzMwKi8weDEyLCAweDE5LCAweDk1LCAweDEyLCAweDBDLCAweDhGLCAweDEyLCAweDBELAotCTB4NDcsIDB4MTIsIDB4MTksIDB4RjMsIDB4RTAsIDB4NTQsIDB4RkIsIDB4RjAsCi0vKjAzNDAqLzB4RTUsIDB4MEEsIDB4QzMsIDB4OTQsIDB4MDEsIDB4NDAsIDB4NDYsIDB4NDMsCi0JMHhFMSwgMHgwOCwgMHgxMiwgMHgxOSwgMHhGMywgMHhFMCwgMHg0NCwgMHgwNCwKLS8qMDM1MCovMHhGMCwgMHhFNSwgMHhFNCwgMHgyMCwgMHhFNywgMHgyQSwgMHgxMiwgMHgxQSwKLQkweDEyLCAweDc1LCAweDgzLCAweEQyLCAweEUwLCAweDU0LCAweDA4LCAweEQzLAotLyowMzYwKi8weDk0LCAweDAwLCAweDQwLCAweDA0LCAweDdGLCAweDAxLCAweDgwLCAweDAyLAotCTB4N0YsIDB4MDAsIDB4RTUsIDB4MEEsIDB4QzMsIDB4OTQsIDB4MDEsIDB4NDAsCi0vKjAzNzAqLzB4MDQsIDB4N0UsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N0UsIDB4MDAsIDB4RUYsCi0JMHg1RSwgMHg2MCwgMHgwNSwgMHgxMiwgMHgxRCwgMHhENywgMHg4MCwgMHgxNywKLS8qMDM4MCovMHgxMiwgMHgxQSwgMHgxMiwgMHg3NSwgMHg4MywgMHhEMiwgMHhFMCwgMHg0NCwKLQkweDA4LCAweEYwLCAweDAyLCAweDAzLCAweEZCLCAweDEyLCAweDFBLCAweDEyLAotLyowMzkwKi8weDc1LCAweDgzLCAweEQyLCAweEUwLCAweDU0LCAweEY3LCAweEYwLCAweDEyLAotCTB4MUUsIDB4NDYsIDB4N0YsIDB4MDgsIDB4MTIsIDB4MTcsIDB4MzEsIDB4NzQsCi0vKjAzQTAqLzB4OEUsIDB4RkUsIDB4MTIsIDB4MUEsIDB4MTIsIDB4OEUsIDB4ODMsIDB4RTAsCi0JMHhGNSwgMHgxMCwgMHg1NCwgMHhGRSwgMHhGMCwgMHhFNSwgMHgxMCwgMHg0NCwKLS8qMDNCMCovMHgwMSwgMHhGRiwgMHhFNSwgMHgwOCwgMHhGRCwgMHhFRCwgMHg0NCwgMHgwNywKLQkweEY1LCAweDgyLCAweEVGLCAweEYwLCAweEU1LCAweDEwLCAweDU0LCAweEZFLAotLyowM0MwKi8weEZGLCAweEVELCAweDQ0LCAweDA3LCAweEY1LCAweDgyLCAweEVGLCAweDEyLAotCTB4MUEsIDB4MTEsIDB4NzUsIDB4ODMsIDB4ODYsIDB4RTAsIDB4NDQsIDB4MTAsCi0vKjAzRDAqLzB4MTIsIDB4MUEsIDB4MTEsIDB4RTAsIDB4NDQsIDB4MTAsIDB4RjAsIDB4MTIsCi0JMHgxOSwgMHhGMywgMHhFMCwgMHg1NCwgMHhGRCwgMHg0NCwgMHgwMSwgMHhGRiwKLS8qMDNFMCovMHgxMiwgMHgxOSwgMHhGMywgMHhFRiwgMHgxMiwgMHgxQSwgMHgzMiwgMHgzMCwKLQkweDMyLCAweDBDLCAweEU1LCAweDA4LCAweDQ0LCAweDA4LCAweEY1LCAweDgyLAotLyowM0YwKi8weDc1LCAweDgzLCAweDgyLCAweDc0LCAweDA1LCAweEYwLCAweEFGLCAweDBCLAotCTB4MTIsIDB4MTgsIDB4RDcsIDB4NzQsIDB4MTAsIDB4MjUsIDB4MDgsIDB4RjUsCi0vKjA0MDAqLzB4MDgsIDB4MDIsIDB4MDAsIDB4ODUsIDB4MDUsIDB4MDksIDB4RTUsIDB4MDksCi0JMHhEMywgMHg5NCwgMHgwNywgMHg1MCwgMHgwMywgMHgwMiwgMHgwMCwgMHg4MiwKLS8qMDQxMCovMHhFNSwgMHg3RSwgMHhEMywgMHg5NCwgMHgwMCwgMHg0MCwgMHgwNCwgMHg3RiwKLQkweDAxLCAweDgwLCAweDAyLCAweDdGLCAweDAwLCAweEU1LCAweDdFLCAweEMzLAotLyowNDIwKi8weDk0LCAweEZBLCAweDUwLCAweDA0LCAweDdFLCAweDAxLCAweDgwLCAweDAyLAotCTB4N0UsIDB4MDAsIDB4RUUsIDB4NUYsIDB4NjAsIDB4MDIsIDB4MDUsIDB4N0UsCi0vKjA0MzAqLzB4MzAsIDB4MzUsIDB4MEIsIDB4NDMsIDB4RTEsIDB4MDEsIDB4N0YsIDB4MDksCi0JMHgxMiwgMHgxNywgMHgzMSwgMHgwMiwgMHgwMCwgMHg1OCwgMHg1MywgMHhFMSwKLS8qMDQ0MCovMHhGRSwgMHgwMiwgMHgwMCwgMHg1OCwgMHg4RSwgMHg2QSwgMHg4RiwgMHg2QiwKLQkweDhDLCAweDZDLCAweDhELCAweDZELCAweDc1LCAweDZFLCAweDAxLCAweDc1LAotLyowNDUwKi8weDZGLCAweDAxLCAweDc1LCAweDcwLCAweDAxLCAweEU0LCAweEY1LCAweDczLAotCTB4RjUsIDB4NzQsIDB4RjUsIDB4NzUsIDB4OTAsIDB4MDcsIDB4MkYsIDB4RjAsCi0vKjA0NjAqLzB4RjUsIDB4M0MsIDB4RjUsIDB4M0UsIDB4RjUsIDB4NDYsIDB4RjUsIDB4NDcsCi0JMHhGNSwgMHgzRCwgMHhGNSwgMHgzRiwgMHhGNSwgMHg2RiwgMHhFNSwgMHg2RiwKLS8qMDQ3MCovMHg3MCwgMHgwRiwgMHhFNSwgMHg2QiwgMHg0NSwgMHg2QSwgMHgxMiwgMHgwNywKLQkweDJBLCAweDc1LCAweDgzLCAweDgwLCAweDc0LCAweDNBLCAweEYwLCAweDgwLAotLyowNDgwKi8weDA5LCAweDEyLCAweDA3LCAweDJBLCAweDc1LCAweDgzLCAweDgwLCAweDc0LAotCTB4MUEsIDB4RjAsIDB4RTQsIDB4RjUsIDB4NkUsIDB4QzMsIDB4NzQsIDB4M0YsCi0vKjA0OTAqLzB4OTUsIDB4NkUsIDB4RkYsIDB4MTIsIDB4MDgsIDB4NjUsIDB4NzUsIDB4ODMsCi0JMHg4MiwgMHhFRiwgMHhGMCwgMHgxMiwgMHgxQSwgMHg0RCwgMHgxMiwgMHgwOCwKLS8qMDRBMCovMHhDNiwgMHhFNSwgMHgzMywgMHhGMCwgMHgxMiwgMHgwOCwgMHhGQSwgMHgxMiwKLQkweDA4LCAweEIxLCAweDQwLCAweEUxLCAweEU1LCAweDZGLCAweDcwLCAweDBCLAotLyowNEIwKi8weDEyLCAweDA3LCAweDJBLCAweDc1LCAweDgzLCAweDgwLCAweDc0LCAweDM2LAotCTB4RjAsIDB4ODAsIDB4MDksIDB4MTIsIDB4MDcsIDB4MkEsIDB4NzUsIDB4ODMsCi0vKjA0QzAqLzB4ODAsIDB4NzQsIDB4MTYsIDB4RjAsIDB4NzUsIDB4NkUsIDB4MDEsIDB4MTIsCi0JMHgwNywgMHgyQSwgMHg3NSwgMHg4MywgMHhCNCwgMHhFNSwgMHg2RSwgMHhGMCwKLS8qMDREMCovMHgxMiwgMHgxQSwgMHg0RCwgMHg3NCwgMHgzRiwgMHgyNSwgMHg2RSwgMHhGNSwKLQkweDgyLCAweEU0LCAweDM0LCAweDAwLCAweEY1LCAweDgzLCAweEU1LCAweDMzLAotLyowNEUwKi8weEYwLCAweDc0LCAweEJGLCAweDI1LCAweDZFLCAweEY1LCAweDgyLCAweEU0LAotCTB4MzQsIDB4MDAsIDB4MTIsIDB4MDgsIDB4QjEsIDB4NDAsIDB4RDgsIDB4RTQsCi0vKjA0RjAqLzB4RjUsIDB4NzAsIDB4RjUsIDB4NDYsIDB4RjUsIDB4NDcsIDB4RjUsIDB4NkUsCi0JMHgxMiwgMHgwOCwgMHhGQSwgMHhGNSwgMHg4MywgMHhFMCwgMHhGRSwgMHgxMiwKLS8qMDUwMCovMHgwOCwgMHhDNiwgMHhFMCwgMHg3QywgMHgwMCwgMHgyNCwgMHgwMCwgMHhGRiwKLQkweEVDLCAweDNFLCAweEZFLCAweEFELCAweDNCLCAweEQzLCAweEVGLCAweDlELAotLyowNTEwKi8weEVFLCAweDlDLCAweDUwLCAweDA0LCAweDdCLCAweDAxLCAweDgwLCAweDAyLAotCTB4N0IsIDB4MDAsIDB4RTUsIDB4NzAsIDB4NzAsIDB4MDQsIDB4N0EsIDB4MDEsCi0vKjA1MjAqLzB4ODAsIDB4MDIsIDB4N0EsIDB4MDAsIDB4RUIsIDB4NUEsIDB4NjAsIDB4MDYsCi0JMHg4NSwgMHg2RSwgMHg0NiwgMHg3NSwgMHg3MCwgMHgwMSwgMHhEMywgMHhFRiwKLS8qMDUzMCovMHg5RCwgMHhFRSwgMHg5QywgMHg1MCwgMHgwNCwgMHg3RiwgMHgwMSwgMHg4MCwKLQkweDAyLCAweDdGLCAweDAwLCAweEU1LCAweDcwLCAweEI0LCAweDAxLCAweDA0LAotLyowNTQwKi8weDdFLCAweDAxLCAweDgwLCAweDAyLCAweDdFLCAweDAwLCAweEVGLCAweDVFLAotCTB4NjAsIDB4MDMsIDB4ODUsIDB4NkUsIDB4NDcsIDB4MDUsIDB4NkUsIDB4RTUsCi0vKjA1NTAqLzB4NkUsIDB4NjQsIDB4N0YsIDB4NzAsIDB4QTMsIDB4RTUsIDB4NDYsIDB4NjAsCi0JMHgwNSwgMHhFNSwgMHg0NywgMHhCNCwgMHg3RSwgMHgwMywgMHg4NSwgMHg0NiwKLS8qMDU2MCovMHg0NywgMHhFNSwgMHg2RiwgMHg3MCwgMHgwOCwgMHg4NSwgMHg0NiwgMHg3NiwKLQkweDg1LCAweDQ3LCAweDc3LCAweDgwLCAweDBFLCAweEMzLCAweDc0LCAweDdGLAotLyowNTcwKi8weDk1LCAweDQ2LCAweEY1LCAweDc4LCAweEMzLCAweDc0LCAweDdGLCAweDk1LAotCTB4NDcsIDB4RjUsIDB4NzksIDB4RTUsIDB4NkYsIDB4NzAsIDB4MzcsIDB4RTUsCi0vKjA1ODAqLzB4NDYsIDB4NjUsIDB4NDcsIDB4NzAsIDB4MEMsIDB4NzUsIDB4NzMsIDB4MDEsCi0JMHg3NSwgMHg3NCwgMHgwMSwgMHhGNSwgMHgzQywgMHhGNSwgMHgzRCwgMHg4MCwKLS8qMDU5MCovMHgzNSwgMHhFNCwgMHhGNSwgMHg0RSwgMHhDMywgMHhFNSwgMHg0NywgMHg5NSwKLQkweDQ2LCAweEY1LCAweDNDLCAweEMzLCAweDEzLCAweEY1LCAweDcxLCAweDI1LAotLyowNUEwKi8weDQ2LCAweEY1LCAweDcyLCAweEMzLCAweDk0LCAweDNGLCAweDQwLCAweDA1LAotCTB4RTQsIDB4RjUsIDB4M0QsIDB4ODAsIDB4NDAsIDB4QzMsIDB4NzQsIDB4M0YsCi0vKjA1QjAqLzB4OTUsIDB4NzIsIDB4RjUsIDB4M0QsIDB4ODAsIDB4MzcsIDB4RTUsIDB4NDYsCi0JMHg2NSwgMHg0NywgMHg3MCwgMHgwRiwgMHg3NSwgMHg3MywgMHgwMSwgMHg3NSwKLS8qMDVDMCovMHg3NSwgMHgwMSwgMHhGNSwgMHgzRSwgMHhGNSwgMHgzRiwgMHg3NSwgMHg0RSwKLQkweDAxLCAweDgwLCAweDIyLCAweEU0LCAweEY1LCAweDRFLCAweEMzLCAweEU1LAotLyowNUQwKi8weDQ3LCAweDk1LCAweDQ2LCAweEY1LCAweDNFLCAweEMzLCAweDEzLCAweEY1LAotCTB4NzEsIDB4MjUsIDB4NDYsIDB4RjUsIDB4NzIsIDB4RDMsIDB4OTQsIDB4M0YsCi0vKjA1RTAqLzB4NTAsIDB4MDUsIDB4RTQsIDB4RjUsIDB4M0YsIDB4ODAsIDB4MDYsIDB4RTUsCi0JMHg3MiwgMHgyNCwgMHhDMSwgMHhGNSwgMHgzRiwgMHgwNSwgMHg2RiwgMHhFNSwKLS8qMDVGMCovMHg2RiwgMHhDMywgMHg5NCwgMHgwMiwgMHg1MCwgMHgwMywgMHgwMiwgMHgwNCwKLQkweDZFLCAweEU1LCAweDZELCAweDQ1LCAweDZDLCAweDcwLCAweDAyLCAweDgwLAotLyowNjAwKi8weDA0LCAweEU1LCAweDc0LCAweDQ1LCAweDc1LCAweDkwLCAweDA3LCAweDJGLAotCTB4RjAsIDB4N0YsIDB4MDEsIDB4RTUsIDB4M0UsIDB4NjAsIDB4MDQsIDB4RTUsCi0vKjA2MTAqLzB4M0MsIDB4NzAsIDB4MTQsIDB4RTQsIDB4RjUsIDB4M0MsIDB4RjUsIDB4M0QsCi0JMHhGNSwgMHgzRSwgMHhGNSwgMHgzRiwgMHgxMiwgMHgwOCwgMHhEMiwgMHg3MCwKLS8qMDYyMCovMHgwNCwgMHhGMCwgMHgwMiwgMHgwNiwgMHhBNCwgMHg4MCwgMHg3QSwgMHhFNSwKLQkweDNDLCAweEMzLCAweDk1LCAweDNFLCAweDQwLCAweDA3LCAweEU1LCAweDNDLAotLyowNjMwKi8weDk1LCAweDNFLCAweEZGLCAweDgwLCAweDA2LCAweEMzLCAweEU1LCAweDNFLAotCTB4OTUsIDB4M0MsIDB4RkYsIDB4RTUsIDB4NzYsIDB4RDMsIDB4OTUsIDB4NzksCi0vKjA2NDAqLzB4NDAsIDB4MDUsIDB4ODUsIDB4NzYsIDB4N0EsIDB4ODAsIDB4MDMsIDB4ODUsCi0JMHg3OSwgMHg3QSwgMHhFNSwgMHg3NywgMHhDMywgMHg5NSwgMHg3OCwgMHg1MCwKLS8qMDY1MCovMHgwNSwgMHg4NSwgMHg3NywgMHg3QiwgMHg4MCwgMHgwMywgMHg4NSwgMHg3OCwKLQkweDdCLCAweEU1LCAweDdCLCAweEQzLCAweDk1LCAweDdBLCAweDQwLCAweDMwLAotLyowNjYwKi8weEU1LCAweDdCLCAweDk1LCAweDdBLCAweEY1LCAweDNDLCAweEY1LCAweDNFLAotCTB4QzMsIDB4RTUsIDB4N0IsIDB4OTUsIDB4N0EsIDB4OTAsIDB4MDcsIDB4MTksCi0vKjA2NzAqLzB4RjAsIDB4RTUsIDB4M0MsIDB4QzMsIDB4MTMsIDB4RjUsIDB4NzEsIDB4MjUsCi0JMHg3QSwgMHhGNSwgMHg3MiwgMHhDMywgMHg5NCwgMHgzRiwgMHg0MCwgMHgwNSwKLS8qMDY4MCovMHhFNCwgMHhGNSwgMHgzRCwgMHg4MCwgMHgxRiwgMHhDMywgMHg3NCwgMHgzRiwKLQkweDk1LCAweDcyLCAweEY1LCAweDNELCAweEY1LCAweDNGLCAweDgwLCAweDE0LAotLyowNjkwKi8weEU0LCAweEY1LCAweDNDLCAweEY1LCAweDNFLCAweDkwLCAweDA3LCAweDE5LAotCTB4RjAsIDB4MTIsIDB4MDgsIDB4RDIsIDB4NzAsIDB4MDMsIDB4RjAsIDB4ODAsCi0vKjA2QTAqLzB4MDMsIDB4NzQsIDB4MDEsIDB4RjAsIDB4MTIsIDB4MDgsIDB4NjUsIDB4NzUsCi0JMHg4MywgMHhEMCwgMHhFMCwgMHg1NCwgMHgwRiwgMHhGRSwgMHhBRCwgMHgzQywKLS8qMDZCMCovMHg3MCwgMHgwMiwgMHg3RSwgMHgwNywgMHhCRSwgMHgwRiwgMHgwMiwgMHg3RSwKLQkweDgwLCAweEVFLCAweEZCLCAweEVGLCAweEQzLCAweDlCLCAweDc0LCAweDgwLAotLyowNkMwKi8weEY4LCAweDk4LCAweDQwLCAweDFGLCAweEU0LCAweEY1LCAweDNDLCAweEY1LAotCTB4M0UsIDB4MTIsIDB4MDgsIDB4RDIsIDB4NzAsIDB4MDMsIDB4RjAsIDB4ODAsCi0vKjA2RDAqLzB4MTIsIDB4NzQsIDB4MDEsIDB4RjAsIDB4RTUsIDB4MDgsIDB4RkIsIDB4RUIsCi0JMHg0NCwgMHgwNywgMHhGNSwgMHg4MiwgMHg3NSwgMHg4MywgMHhEMiwgMHhFMCwKLS8qMDZFMCovMHg0NCwgMHgxMCwgMHhGMCwgMHhFNSwgMHgwOCwgMHhGQiwgMHhFQiwgMHg0NCwKLQkweDA5LCAweEY1LCAweDgyLCAweDc1LCAweDgzLCAweDlFLCAweEVELCAweEYwLAotLyowNkYwKi8weEVCLCAweDQ0LCAweDA3LCAweEY1LCAweDgyLCAweDc1LCAweDgzLCAweENBLAotCTB4RUQsIDB4RjAsIDB4MTIsIDB4MDgsIDB4NjUsIDB4NzUsIDB4ODMsIDB4Q0MsCi0vKjA3MDAqLzB4RUYsIDB4RjAsIDB4MjIsIDB4RTUsIDB4MDgsIDB4NDQsIDB4MDcsIDB4RjUsCi0JMHg4MiwgMHg3NSwgMHg4MywgMHhCQywgMHhFMCwgMHg1NCwgMHhGMCwgMHhGMCwKLS8qMDcxMCovMHhFNSwgMHgwOCwgMHg0NCwgMHgwNywgMHhGNSwgMHg4MiwgMHg3NSwgMHg4MywKLQkweEJFLCAweEUwLCAweDU0LCAweEYwLCAweEYwLCAweEU1LCAweDA4LCAweDQ0LAotLyowNzIwKi8weDA3LCAweEY1LCAweDgyLCAweDc1LCAweDgzLCAweEMwLCAweEUwLCAweDU0LAotCTB4RjAsIDB4RjAsIDB4RTUsIDB4MDgsIDB4NDQsIDB4MDcsIDB4RjUsIDB4ODIsCi0vKjA3MzAqLzB4MjIsIDB4RjAsIDB4OTAsIDB4MDcsIDB4MjgsIDB4RTAsIDB4RkUsIDB4QTMsCi0JMHhFMCwgMHhGNSwgMHg4MiwgMHg4RSwgMHg4MywgMHgyMiwgMHg4NSwgMHg0MiwKLS8qMDc0MCovMHg0MiwgMHg4NSwgMHg0MSwgMHg0MSwgMHg4NSwgMHg0MCwgMHg0MCwgMHg3NCwKLQkweEMwLCAweDJGLCAweEY1LCAweDgyLCAweDc0LCAweDAyLCAweDNFLCAweEY1LAotLyowNzUwKi8weDgzLCAweEU1LCAweDQyLCAweEYwLCAweDc0LCAweEUwLCAweDJGLCAweEY1LAotCTB4ODIsIDB4NzQsIDB4MDIsIDB4M0UsIDB4RjUsIDB4ODMsIDB4MjIsIDB4RTUsCi0vKjA3NjAqLzB4NDIsIDB4MjksIDB4RkQsIDB4RTQsIDB4MzMsIDB4RkMsIDB4RTUsIDB4M0MsCi0JMHhDMywgMHg5RCwgMHhFQywgMHg2NCwgMHg4MCwgMHhGOCwgMHg3NCwgMHg4MCwKLS8qMDc3MCovMHg5OCwgMHgyMiwgMHhGNSwgMHg4MywgMHhFMCwgMHg5MCwgMHgwNywgMHgyMiwKLQkweDU0LCAweDFGLCAweEZELCAweEUwLCAweEZBLCAweEEzLCAweEUwLCAweEY1LAotLyowNzgwKi8weDgyLCAweDhBLCAweDgzLCAweEVELCAweEYwLCAweDIyLCAweDkwLCAweDA3LAotCTB4MjIsIDB4RTAsIDB4RkMsIDB4QTMsIDB4RTAsIDB4RjUsIDB4ODIsIDB4OEMsCi0vKjA3OTAqLzB4ODMsIDB4MjIsIDB4OTAsIDB4MDcsIDB4MjQsIDB4RkYsIDB4RUQsIDB4NDQsCi0JMHgwNywgMHhDRiwgMHhGMCwgMHhBMywgMHhFRiwgMHhGMCwgMHgyMiwgMHg4NSwKLS8qMDdBMCovMHgzOCwgMHgzOCwgMHg4NSwgMHgzOSwgMHgzOSwgMHg4NSwgMHgzQSwgMHgzQSwKLQkweDc0LCAweEMwLCAweDJGLCAweEY1LCAweDgyLCAweDc0LCAweDAyLCAweDNFLAotLyowN0IwKi8weEY1LCAweDgzLCAweDIyLCAweDkwLCAweDA3LCAweDI2LCAweEZGLCAweEVELAotCTB4NDQsIDB4MDcsIDB4Q0YsIDB4RjAsIDB4QTMsIDB4RUYsIDB4RjAsIDB4MjIsCi0vKjA3QzAqLzB4RjAsIDB4NzQsIDB4QTAsIDB4MkYsIDB4RjUsIDB4ODIsIDB4NzQsIDB4MDIsCi0JMHgzRSwgMHhGNSwgMHg4MywgMHgyMiwgMHg3NCwgMHhDMCwgMHgyNSwgMHgxMSwKLS8qMDdEMCovMHhGNSwgMHg4MiwgMHhFNCwgMHgzNCwgMHgwMSwgMHhGNSwgMHg4MywgMHgyMiwKLQkweDc0LCAweDAwLCAweDI1LCAweDExLCAweEY1LCAweDgyLCAweEU0LCAweDM0LAotLyowN0UwKi8weDAyLCAweEY1LCAweDgzLCAweDIyLCAweDc0LCAweDYwLCAweDI1LCAweDExLAotCTB4RjUsIDB4ODIsIDB4RTQsIDB4MzQsIDB4MDMsIDB4RjUsIDB4ODMsIDB4MjIsCi0vKjA3RjAqLzB4NzQsIDB4ODAsIDB4MjUsIDB4MTEsIDB4RjUsIDB4ODIsIDB4RTQsIDB4MzQsCi0JMHgwMywgMHhGNSwgMHg4MywgMHgyMiwgMHg3NCwgMHhFMCwgMHgyNSwgMHgxMSwKLS8qMDgwMCovMHhGNSwgMHg4MiwgMHhFNCwgMHgzNCwgMHgwMywgMHhGNSwgMHg4MywgMHgyMiwKLQkweDc0LCAweDQwLCAweDI1LCAweDExLCAweEY1LCAweDgyLCAweEU0LCAweDM0LAotLyowODEwKi8weDA2LCAweEY1LCAweDgzLCAweDIyLCAweDc0LCAweDgwLCAweDJGLCAweEY1LAotCTB4ODIsIDB4NzQsIDB4MDIsIDB4M0UsIDB4RjUsIDB4ODMsIDB4MjIsIDB4QUYsCi0vKjA4MjAqLzB4MDgsIDB4N0UsIDB4MDAsIDB4RUYsIDB4NDQsIDB4MDcsIDB4RjUsIDB4ODIsCi0JMHgyMiwgMHhGNSwgMHg4MywgMHhFNSwgMHg4MiwgMHg0NCwgMHgwNywgMHhGNSwKLS8qMDgzMCovMHg4MiwgMHhFNSwgMHg0MCwgMHhGMCwgMHgyMiwgMHg3NCwgMHg0MCwgMHgyNSwKLQkweDExLCAweEY1LCAweDgyLCAweEU0LCAweDM0LCAweDAyLCAweEY1LCAweDgzLAotLyowODQwKi8weDIyLCAweDc0LCAweEMwLCAweDI1LCAweDExLCAweEY1LCAweDgyLCAweEU0LAotCTB4MzQsIDB4MDMsIDB4RjUsIDB4ODMsIDB4MjIsIDB4NzQsIDB4MDAsIDB4MjUsCi0vKjA4NTAqLzB4MTEsIDB4RjUsIDB4ODIsIDB4RTQsIDB4MzQsIDB4MDYsIDB4RjUsIDB4ODMsCi0JMHgyMiwgMHg3NCwgMHgyMCwgMHgyNSwgMHgxMSwgMHhGNSwgMHg4MiwgMHhFNCwKLS8qMDg2MCovMHgzNCwgMHgwNiwgMHhGNSwgMHg4MywgMHgyMiwgMHhFNSwgMHgwOCwgMHhGRCwKLQkweEVELCAweDQ0LCAweDA3LCAweEY1LCAweDgyLCAweDIyLCAweEU1LCAweDQxLAotLyowODcwKi8weEYwLCAweEU1LCAweDY1LCAweDY0LCAweDAxLCAweDQ1LCAweDY0LCAweDIyLAotCTB4N0UsIDB4MDAsIDB4RkIsIDB4N0EsIDB4MDAsIDB4RkQsIDB4N0MsIDB4MDAsCi0vKjA4ODAqLzB4MjIsIDB4NzQsIDB4MjAsIDB4MjUsIDB4MTEsIDB4RjUsIDB4ODIsIDB4RTQsCi0JMHgzNCwgMHgwMiwgMHgyMiwgMHg3NCwgMHhBMCwgMHgyNSwgMHgxMSwgMHhGNSwKLS8qMDg5MCovMHg4MiwgMHhFNCwgMHgzNCwgMHgwMywgMHgyMiwgMHg4NSwgMHgzRSwgMHg0MiwKLQkweDg1LCAweDNGLCAweDQxLCAweDhGLCAweDQwLCAweDIyLCAweDg1LCAweDNDLAotLyowOEEwKi8weDQyLCAweDg1LCAweDNELCAweDQxLCAweDhGLCAweDQwLCAweDIyLCAweDc1LAotCTB4NDUsIDB4M0YsIDB4OTAsIDB4MDcsIDB4MjAsIDB4RTQsIDB4RjAsIDB4QTMsCi0vKjA4QjAqLzB4MjIsIDB4RjUsIDB4ODMsIDB4RTUsIDB4MzIsIDB4RjAsIDB4MDUsIDB4NkUsCi0JMHhFNSwgMHg2RSwgMHhDMywgMHg5NCwgMHg0MCwgMHgyMiwgMHhGMCwgMHhFNSwKLS8qMDhDMCovMHgwOCwgMHg0NCwgMHgwNiwgMHhGNSwgMHg4MiwgMHgyMiwgMHg3NCwgMHgwMCwKLQkweDI1LCAweDZFLCAweEY1LCAweDgyLCAweEU0LCAweDM0LCAweDAwLCAweEY1LAotLyowOEQwKi8weDgzLCAweDIyLCAweEU1LCAweDZELCAweDQ1LCAweDZDLCAweDkwLCAweDA3LAotCTB4MkYsIDB4MjIsIDB4RTQsIDB4RjksIDB4RTUsIDB4M0MsIDB4RDMsIDB4OTUsCi0vKjA4RTAqLzB4M0UsIDB4MjIsIDB4NzQsIDB4ODAsIDB4MkUsIDB4RjUsIDB4ODIsIDB4RTQsCi0JMHgzNCwgMHgwMiwgMHhGNSwgMHg4MywgMHhFMCwgMHgyMiwgMHg3NCwgMHhBMCwKLS8qMDhGMCovMHgyRSwgMHhGNSwgMHg4MiwgMHhFNCwgMHgzNCwgMHgwMiwgMHhGNSwgMHg4MywKLQkweEUwLCAweDIyLCAweDc0LCAweDgwLCAweDI1LCAweDZFLCAweEY1LCAweDgyLAotLyowOTAwKi8weEU0LCAweDM0LCAweDAwLCAweDIyLCAweDI1LCAweDQyLCAweEZELCAweEU0LAotCTB4MzMsIDB4RkMsIDB4MjIsIDB4ODUsIDB4NDIsIDB4NDIsIDB4ODUsIDB4NDEsCi0vKjA5MTAqLzB4NDEsIDB4ODUsIDB4NDAsIDB4NDAsIDB4MjIsIDB4RUQsIDB4NEMsIDB4NjAsCi0JMHgwMywgMHgwMiwgMHgwOSwgMHhFNSwgMHhFRiwgMHg0RSwgMHg3MCwgMHgzNywKLS8qMDkyMCovMHg5MCwgMHgwNywgMHgyNiwgMHgxMiwgMHgwNywgMHg4OSwgMHhFMCwgMHhGRCwKLQkweDEyLCAweDA3LCAweENDLCAweEVELCAweEYwLCAweDkwLCAweDA3LCAweDI4LAotLyowOTMwKi8weDEyLCAweDA3LCAweDg5LCAweEUwLCAweEZELCAweDEyLCAweDA3LCAweEQ4LAotCTB4RUQsIDB4RjAsIDB4MTIsIDB4MDcsIDB4ODYsIDB4RTAsIDB4NTQsIDB4MUYsCi0vKjA5NDAqLzB4RkQsIDB4MTIsIDB4MDgsIDB4ODEsIDB4RjUsIDB4ODMsIDB4RUQsIDB4RjAsCi0JMHg5MCwgMHgwNywgMHgyNCwgMHgxMiwgMHgwNywgMHg4OSwgMHhFMCwgMHg1NCwKLS8qMDk1MCovMHgxRiwgMHhGRCwgMHgxMiwgMHgwOCwgMHgzNSwgMHhFRCwgMHhGMCwgMHhFRiwKLQkweDY0LCAweDA0LCAweDRFLCAweDcwLCAweDM3LCAweDkwLCAweDA3LCAweDI2LAotLyowOTYwKi8weDEyLCAweDA3LCAweDg5LCAweEUwLCAweEZELCAweDEyLCAweDA3LCAweEU0LAotCTB4RUQsIDB4RjAsIDB4OTAsIDB4MDcsIDB4MjgsIDB4MTIsIDB4MDcsIDB4ODksCi0vKjA5NzAqLzB4RTAsIDB4RkQsIDB4MTIsIDB4MDcsIDB4RjAsIDB4RUQsIDB4RjAsIDB4MTIsCi0JMHgwNywgMHg4NiwgMHhFMCwgMHg1NCwgMHgxRiwgMHhGRCwgMHgxMiwgMHgwOCwKLS8qMDk4MCovMHg4QiwgMHhGNSwgMHg4MywgMHhFRCwgMHhGMCwgMHg5MCwgMHgwNywgMHgyNCwKLQkweDEyLCAweDA3LCAweDg5LCAweEUwLCAweDU0LCAweDFGLCAweEZELCAweDEyLAotLyowOTkwKi8weDA4LCAweDQxLCAweEVELCAweEYwLCAweEVGLCAweDY0LCAweDAxLCAweDRFLAotCTB4NzAsIDB4MDQsIDB4N0QsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N0QsIDB4MDAsCi0vKjA5QTAqLzB4RUYsIDB4NjQsIDB4MDIsIDB4NEUsIDB4NzAsIDB4MDQsIDB4N0YsIDB4MDEsCi0JMHg4MCwgMHgwMiwgMHg3RiwgMHgwMCwgMHhFRiwgMHg0RCwgMHg2MCwgMHg3OCwKLS8qMDlCMCovMHg5MCwgMHgwNywgMHgyNiwgMHgxMiwgMHgwNywgMHgzNSwgMHhFMCwgMHhGRiwKLQkweDEyLCAweDA3LCAweEZDLCAweEVGLCAweDEyLCAweDA3LCAweDMxLCAweEUwLAotLyowOUMwKi8weEZGLCAweDEyLCAweDA4LCAweDA4LCAweEVGLCAweEYwLCAweDkwLCAweDA3LAotCTB4MjIsIDB4MTIsIDB4MDcsIDB4MzUsIDB4RTAsIDB4NTQsIDB4MUYsIDB4RkYsCi0vKjA5RDAqLzB4MTIsIDB4MDgsIDB4NEQsIDB4RUYsIDB4RjAsIDB4OTAsIDB4MDcsIDB4MjQsCi0JMHgxMiwgMHgwNywgMHgzNSwgMHhFMCwgMHg1NCwgMHgxRiwgMHhGRiwgMHgxMiwKLS8qMDlFMCovMHgwOCwgMHg1OSwgMHhFRiwgMHhGMCwgMHgyMiwgMHgxMiwgMHgwNywgMHhDQywKLQkweEU0LCAweEYwLCAweDEyLCAweDA3LCAweEQ4LCAweEU0LCAweEYwLCAweDEyLAotLyowOUYwKi8weDA4LCAweDgxLCAweEY1LCAweDgzLCAweEU0LCAweEYwLCAweDEyLCAweDA4LAotCTB4MzUsIDB4NzQsIDB4MTQsIDB4RjAsIDB4MTIsIDB4MDcsIDB4RTQsIDB4RTQsCi0vKjBBMDAqLzB4RjAsIDB4MTIsIDB4MDcsIDB4RjAsIDB4RTQsIDB4RjAsIDB4MTIsIDB4MDgsCi0JMHg4QiwgMHhGNSwgMHg4MywgMHhFNCwgMHhGMCwgMHgxMiwgMHgwOCwgMHg0MSwKLS8qMEExMCovMHg3NCwgMHgxNCwgMHhGMCwgMHgxMiwgMHgwNywgMHhGQywgMHhFNCwgMHhGMCwKLQkweDEyLCAweDA4LCAweDA4LCAweEU0LCAweEYwLCAweDEyLCAweDA4LCAweDRELAotLyowQTIwKi8weEU0LCAweEYwLCAweDEyLCAweDA4LCAweDU5LCAweDc0LCAweDE0LCAweEYwLAotCTB4MjIsIDB4NTMsIDB4RjksIDB4RjcsIDB4NzUsIDB4RkMsIDB4MTAsIDB4RTQsCi0vKjBBMzAqLzB4RjUsIDB4RkQsIDB4NzUsIDB4RkUsIDB4MzAsIDB4RjUsIDB4RkYsIDB4RTUsCi0JMHhFNywgMHgyMCwgMHhFNywgMHgwMywgMHg0MywgMHhGOSwgMHgwOCwgMHhFNSwKLS8qMEE0MCovMHhFNiwgMHgyMCwgMHhFNywgMHgwQiwgMHg3OCwgMHhGRiwgMHhFNCwgMHhGNiwKLQkweEQ4LCAweEZELCAweDUzLCAweEU2LCAweEZFLCAweDgwLCAweDA5LCAweDc4LAotLyowQTUwKi8weDA4LCAweEU0LCAweEY2LCAweEQ4LCAweEZELCAweDUzLCAweEU2LCAweEZFLAotCTB4NzUsIDB4ODEsIDB4ODAsIDB4RTQsIDB4RjUsIDB4QTgsIDB4RDIsIDB4QTgsCi0vKjBBNjAqLzB4QzIsIDB4QTksIDB4RDIsIDB4QUYsIDB4RTUsIDB4RTIsIDB4MjAsIDB4RTUsCi0JMHgwNSwgMHgyMCwgMHhFNiwgMHgwMiwgMHg4MCwgMHgwMywgMHg0MywgMHhFMSwKLS8qMEE3MCovMHgwMiwgMHhFNSwgMHhFMiwgMHgyMCwgMHhFMCwgMHgwRSwgMHg5MCwgMHgwMCwKLQkweDAwLCAweDdGLCAweDAwLCAweDdFLCAweDA4LCAweEU0LCAweEYwLCAweEEzLAotLyowQTgwKi8weERGLCAweEZDLCAweERFLCAweEZBLCAweDAyLCAweDBBLCAweERCLCAweDQzLAotCTB4RkEsIDB4MDEsIDB4QzAsIDB4RTAsIDB4QzAsIDB4RjAsIDB4QzAsIDB4ODMsCi0vKjBBOTAqLzB4QzAsIDB4ODIsIDB4QzAsIDB4RDAsIDB4MTIsIDB4MUMsIDB4RTcsIDB4RDAsCi0JMHhEMCwgMHhEMCwgMHg4MiwgMHhEMCwgMHg4MywgMHhEMCwgMHhGMCwgMHhEMCwKLS8qMEFBMCovMHhFMCwgMHg1MywgMHhGQSwgMHhGRSwgMHgzMiwgMHgwMiwgMHgxQiwgMHg1NSwKLQkweEU0LCAweDkzLCAweEEzLCAweEY4LCAweEU0LCAweDkzLCAweEEzLCAweEY2LAotLyowQUIwKi8weDA4LCAweERGLCAweEY5LCAweDgwLCAweDI5LCAweEU0LCAweDkzLCAweEEzLAotCTB4RjgsIDB4NTQsIDB4MDcsIDB4MjQsIDB4MEMsIDB4QzgsIDB4QzMsIDB4MzMsCi0vKjBBQzAqLzB4QzQsIDB4NTQsIDB4MEYsIDB4NDQsIDB4MjAsIDB4QzgsIDB4ODMsIDB4NDAsCi0JMHgwNCwgMHhGNCwgMHg1NiwgMHg4MCwgMHgwMSwgMHg0NiwgMHhGNiwgMHhERiwKLS8qMEFEMCovMHhFNCwgMHg4MCwgMHgwQiwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwKLQkweDIwLCAweDQwLCAweDgwLCAweDkwLCAweDAwLCAweDNGLCAweEU0LCAweDdFLAotLyowQUUwKi8weDAxLCAweDkzLCAweDYwLCAweEMxLCAweEEzLCAweEZGLCAweDU0LCAweDNGLAotCTB4MzAsIDB4RTUsIDB4MDksIDB4NTQsIDB4MUYsIDB4RkUsIDB4RTQsIDB4OTMsCi0vKjBBRjAqLzB4QTMsIDB4NjAsIDB4MDEsIDB4MEUsIDB4Q0YsIDB4NTQsIDB4QzAsIDB4MjUsCi0JMHhFMCwgMHg2MCwgMHhBRCwgMHg0MCwgMHhCOCwgMHg4MCwgMHhGRSwgMHg4QywKLS8qMEIwMCovMHg2NCwgMHg4RCwgMHg2NSwgMHg4QSwgMHg2NiwgMHg4QiwgMHg2NywgMHhFNCwKLQkweEY1LCAweDY5LCAweEVGLCAweDRFLCAweDcwLCAweDAzLCAweDAyLCAweDFELAotLyowQjEwKi8weDU1LCAweEU0LCAweEY1LCAweDY4LCAweEU1LCAweDY3LCAweDQ1LCAweDY2LAotCTB4NzAsIDB4MzIsIDB4MTIsIDB4MDcsIDB4MkEsIDB4NzUsIDB4ODMsIDB4OTAsCi0vKjBCMjAqLzB4RTQsIDB4MTIsIDB4MDcsIDB4MjksIDB4NzUsIDB4ODMsIDB4QzIsIDB4RTQsCi0JMHgxMiwgMHgwNywgMHgyOSwgMHg3NSwgMHg4MywgMHhDNCwgMHhFNCwgMHgxMiwKLS8qMEIzMCovMHgwOCwgMHg3MCwgMHg3MCwgMHgyOSwgMHgxMiwgMHgwNywgMHgyQSwgMHg3NSwKLQkweDgzLCAweDkyLCAweEU0LCAweDEyLCAweDA3LCAweDI5LCAweDc1LCAweDgzLAotLyowQjQwKi8weEM2LCAweEU0LCAweDEyLCAweDA3LCAweDI5LCAweDc1LCAweDgzLCAweEM4LAotCTB4RTQsIDB4RjAsIDB4ODAsIDB4MTEsIDB4OTAsIDB4MDcsIDB4MjYsIDB4MTIsCi0vKjBCNTAqLzB4MDcsIDB4MzUsIDB4RTQsIDB4MTIsIDB4MDgsIDB4NzAsIDB4NzAsIDB4MDUsCi0JMHgxMiwgMHgwNywgMHgzMiwgMHhFNCwgMHhGMCwgMHgxMiwgMHgxRCwgMHg1NSwKLS8qMEI2MCovMHgxMiwgMHgxRSwgMHhCRiwgMHhFNSwgMHg2NywgMHg0NSwgMHg2NiwgMHg3MCwKLQkweDMzLCAweDEyLCAweDA3LCAweDJBLCAweDc1LCAweDgzLCAweDkwLCAweEU1LAotLyowQjcwKi8weDQxLCAweDEyLCAweDA3LCAweDI5LCAweDc1LCAweDgzLCAweEMyLCAweEU1LAotCTB4NDEsIDB4MTIsIDB4MDcsIDB4MjksIDB4NzUsIDB4ODMsIDB4QzQsIDB4MTIsCi0vKjBCODAqLzB4MDgsIDB4NkUsIDB4NzAsIDB4MjksIDB4MTIsIDB4MDcsIDB4MkEsIDB4NzUsCi0JMHg4MywgMHg5MiwgMHhFNSwgMHg0MCwgMHgxMiwgMHgwNywgMHgyOSwgMHg3NSwKLS8qMEI5MCovMHg4MywgMHhDNiwgMHhFNSwgMHg0MCwgMHgxMiwgMHgwNywgMHgyOSwgMHg3NSwKLQkweDgzLCAweEM4LCAweDgwLCAweDBFLCAweDkwLCAweDA3LCAweDI2LCAweDEyLAotLyowQkEwKi8weDA3LCAweDM1LCAweDEyLCAweDA4LCAweDZFLCAweDcwLCAweDA2LCAweDEyLAotCTB4MDcsIDB4MzIsIDB4RTUsIDB4NDAsIDB4RjAsIDB4QUYsIDB4NjksIDB4N0UsCi0vKjBCQjAqLzB4MDAsIDB4QUQsIDB4NjcsIDB4QUMsIDB4NjYsIDB4MTIsIDB4MDQsIDB4NDQsCi0JMHgxMiwgMHgwNywgMHgyQSwgMHg3NSwgMHg4MywgMHhDQSwgMHhFMCwgMHhEMywKLS8qMEJDMCovMHg5NCwgMHgwMCwgMHg1MCwgMHgwQywgMHgwNSwgMHg2OCwgMHhFNSwgMHg2OCwKLQkweEMzLCAweDk0LCAweDA1LCAweDUwLCAweDAzLCAweDAyLCAweDBCLCAweDE0LAotLyowQkQwKi8weDIyLCAweDhDLCAweDYwLCAweDhELCAweDYxLCAweDEyLCAweDA4LCAweERBLAotCTB4NzQsIDB4MjAsIDB4NDAsIDB4MEQsIDB4MkYsIDB4RjUsIDB4ODIsIDB4NzQsCi0vKjBCRTAqLzB4MDMsIDB4M0UsIDB4RjUsIDB4ODMsIDB4RTUsIDB4M0UsIDB4RjAsIDB4ODAsCi0JMHgwQiwgMHgyRiwgMHhGNSwgMHg4MiwgMHg3NCwgMHgwMywgMHgzRSwgMHhGNSwKLS8qMEJGMCovMHg4MywgMHhFNSwgMHgzQywgMHhGMCwgMHhFNSwgMHgzQywgMHhEMywgMHg5NSwKLQkweDNFLCAweDQwLCAweDNDLCAweEU1LCAweDYxLCAweDQ1LCAweDYwLCAweDcwLAotLyowQzAwKi8weDEwLCAweEU5LCAweDEyLCAweDA5LCAweDA0LCAweEU1LCAweDNFLCAweDEyLAotCTB4MDcsIDB4NjgsIDB4NDAsIDB4M0IsIDB4MTIsIDB4MDgsIDB4OTUsIDB4ODAsCi0vKjBDMTAqLzB4MTgsIDB4RTUsIDB4M0UsIDB4QzMsIDB4OTUsIDB4MzgsIDB4NDAsIDB4MUQsCi0JMHg4NSwgMHgzRSwgMHgzOCwgMHhFNSwgMHgzRSwgMHg2MCwgMHgwNSwgMHg4NSwKLS8qMEMyMCovMHgzRiwgMHgzOSwgMHg4MCwgMHgwMywgMHg4NSwgMHgzOSwgMHgzOSwgMHg4RiwKLQkweDNBLCAweDEyLCAweDA4LCAweDE0LCAweEU1LCAweDNFLCAweDEyLCAweDA3LAotLyowQzMwKi8weEMwLCAweEU1LCAweDNGLCAweEYwLCAweDIyLCAweDgwLCAweDQzLCAweEU1LAotCTB4NjEsIDB4NDUsIDB4NjAsIDB4NzAsIDB4MTksIDB4MTIsIDB4MDcsIDB4NUYsCi0vKjBDNDAqLzB4NDAsIDB4MDUsIDB4MTIsIDB4MDgsIDB4OUUsIDB4ODAsIDB4MjcsIDB4MTIsCi0JMHgwOSwgMHgwQiwgMHgxMiwgMHgwOCwgMHgxNCwgMHhFNSwgMHg0MiwgMHgxMiwKLS8qMEM1MCovMHgwNywgMHhDMCwgMHhFNSwgMHg0MSwgMHhGMCwgMHgyMiwgMHhFNSwgMHgzQywKLQkweEMzLCAweDk1LCAweDM4LCAweDQwLCAweDFELCAweDg1LCAweDNDLCAweDM4LAotLyowQzYwKi8weEU1LCAweDNDLCAweDYwLCAweDA1LCAweDg1LCAweDNELCAweDM5LCAweDgwLAotCTB4MDMsIDB4ODUsIDB4MzksIDB4MzksIDB4OEYsIDB4M0EsIDB4MTIsIDB4MDgsCi0vKjBDNzAqLzB4MTQsIDB4RTUsIDB4M0MsIDB4MTIsIDB4MDcsIDB4QzAsIDB4RTUsIDB4M0QsCi0JMHhGMCwgMHgyMiwgMHg4NSwgMHgzOCwgMHgzOCwgMHg4NSwgMHgzOSwgMHgzOSwKLS8qMEM4MCovMHg4NSwgMHgzQSwgMHgzQSwgMHgxMiwgMHgwOCwgMHgxNCwgMHhFNSwgMHgzOCwKLQkweDEyLCAweDA3LCAweEMwLCAweEU1LCAweDM5LCAweEYwLCAweDIyLCAweDdGLAotLyowQzkwKi8weDA2LCAweDEyLCAweDE3LCAweDMxLCAweDEyLCAweDFELCAweDIzLCAweDEyLAotCTB4MEUsIDB4MDQsIDB4MTIsIDB4MEUsIDB4MzMsIDB4RTAsIDB4NDQsIDB4MEEsCi0vKjBDQTAqLzB4RjAsIDB4NzQsIDB4OEUsIDB4RkUsIDB4MTIsIDB4MEUsIDB4MDQsIDB4MTIsCi0JMHgwRSwgMHgwQiwgMHhFRiwgMHhGMCwgMHhFNSwgMHgyOCwgMHgzMCwgMHhFNSwKLS8qMENCMCovMHgwMywgMHhEMywgMHg4MCwgMHgwMSwgMHhDMywgMHg0MCwgMHgwNSwgMHg3NSwKLQkweDE0LCAweDIwLCAweDgwLCAweDAzLCAweDc1LCAweDE0LCAweDA4LCAweDEyLAotLyowQ0MwKi8weDBFLCAweDA0LCAweDc1LCAweDgzLCAweDhBLCAweEU1LCAweDE0LCAweEYwLAotCTB4QjQsIDB4RkYsIDB4MDUsIDB4NzUsIDB4MTIsIDB4ODAsIDB4ODAsIDB4MDYsCi0vKjBDRDAqLzB4RTUsIDB4MTQsIDB4QzMsIDB4MTMsIDB4RjUsIDB4MTIsIDB4RTQsIDB4RjUsCi0JMHgxNiwgMHhGNSwgMHg3RiwgMHgxMiwgMHgxOSwgMHgzNiwgMHgxMiwgMHgxMywKLS8qMENFMCovMHhBMywgMHhFNSwgMHgwQSwgMHhDMywgMHg5NCwgMHgwMSwgMHg1MCwgMHgwOSwKLQkweDA1LCAweDE2LCAweEU1LCAweDE2LCAweEMzLCAweDk0LCAweDE0LCAweDQwLAotLyowQ0YwKi8weEVBLCAweEU1LCAweEU0LCAweDIwLCAweEU3LCAweDI4LCAweDEyLCAweDBFLAotCTB4MDQsIDB4NzUsIDB4ODMsIDB4RDIsIDB4RTAsIDB4NTQsIDB4MDgsIDB4RDMsCi0vKjBEMDAqLzB4OTQsIDB4MDAsIDB4NDAsIDB4MDQsIDB4N0YsIDB4MDEsIDB4ODAsIDB4MDIsCi0JMHg3RiwgMHgwMCwgMHhFNSwgMHgwQSwgMHhDMywgMHg5NCwgMHgwMSwgMHg0MCwKLS8qMEQxMCovMHgwNCwgMHg3RSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3RSwgMHgwMCwgMHhFRiwKLQkweDVFLCAweDYwLCAweDAzLCAweDEyLCAweDFELCAweEQ3LCAweEU1LCAweDdGLAotLyowRDIwKi8weEMzLCAweDk0LCAweDExLCAweDQwLCAweDE0LCAweDEyLCAweDBFLCAweDA0LAotCTB4NzUsIDB4ODMsIDB4RDIsIDB4RTAsIDB4NDQsIDB4ODAsIDB4RjAsIDB4RTUsCi0vKjBEMzAqLzB4RTQsIDB4MjAsIDB4RTcsIDB4MEYsIDB4MTIsIDB4MUQsIDB4RDcsIDB4ODAsCi0JMHgwQSwgMHgxMiwgMHgwRSwgMHgwNCwgMHg3NSwgMHg4MywgMHhEMiwgMHhFMCwKLS8qMEQ0MCovMHg1NCwgMHg3RiwgMHhGMCwgMHgxMiwgMHgxRCwgMHgyMywgMHgyMiwgMHg3NCwKLQkweDhBLCAweDg1LCAweDA4LCAweDgyLCAweEY1LCAweDgzLCAweEU1LCAweDE3LAotLyowRDUwKi8weEYwLCAweDEyLCAweDBFLCAweDNBLCAweEU0LCAweEYwLCAweDkwLCAweDA3LAotCTB4MDIsIDB4RTAsIDB4MTIsIDB4MEUsIDB4MTcsIDB4NzUsIDB4ODMsIDB4OTAsCi0vKjBENjAqLzB4RUYsIDB4RjAsIDB4NzQsIDB4OTIsIDB4RkUsIDB4RTUsIDB4MDgsIDB4NDQsCi0JMHgwNywgMHhGRiwgMHhGNSwgMHg4MiwgMHg4RSwgMHg4MywgMHhFMCwgMHg1NCwKLS8qMEQ3MCovMHhDMCwgMHhGRCwgMHg5MCwgMHgwNywgMHgwMywgMHhFMCwgMHg1NCwgMHgzRiwKLQkweDRELCAweDhGLCAweDgyLCAweDhFLCAweDgzLCAweEYwLCAweDkwLCAweDA3LAotLyowRDgwKi8weDA0LCAweEUwLCAweDEyLCAweDBFLCAweDE3LCAweDc1LCAweDgzLCAweDgyLAotCTB4RUYsIDB4RjAsIDB4OTAsIDB4MDcsIDB4MDUsIDB4RTAsIDB4RkYsIDB4RUQsCi0vKjBEOTAqLzB4NDQsIDB4MDcsIDB4RjUsIDB4ODIsIDB4NzUsIDB4ODMsIDB4QjQsIDB4RUYsCi0JMHgxMiwgMHgwRSwgMHgwMywgMHg3NSwgMHg4MywgMHg4MCwgMHhFMCwgMHg1NCwKLS8qMERBMCovMHhCRiwgMHhGMCwgMHgzMCwgMHgzNywgMHgwQSwgMHgxMiwgMHgwRSwgMHg5MSwKLQkweDc1LCAweDgzLCAweDk0LCAweEUwLCAweDQ0LCAweDgwLCAweEYwLCAweDMwLAotLyowREIwKi8weDM4LCAweDBBLCAweDEyLCAweDBFLCAweDkxLCAweDc1LCAweDgzLCAweDkyLAotCTB4RTAsIDB4NDQsIDB4ODAsIDB4RjAsIDB4RTUsIDB4MjgsIDB4MzAsIDB4RTQsCi0vKjBEQzAqLzB4MUEsIDB4MjAsIDB4MzksIDB4MEEsIDB4MTIsIDB4MEUsIDB4MDQsIDB4NzUsCi0JMHg4MywgMHg4OCwgMHhFMCwgMHg1NCwgMHg3RiwgMHhGMCwgMHgyMCwgMHgzQSwKLS8qMEREMCovMHgwQSwgMHgxMiwgMHgwRSwgMHgwNCwgMHg3NSwgMHg4MywgMHg4OCwgMHhFMCwKLQkweDU0LCAweEJGLCAweEYwLCAweDc0LCAweDhDLCAweEZFLCAweDEyLCAweDBFLAotLyowREUwKi8weDA0LCAweDhFLCAweDgzLCAweEUwLCAweDU0LCAweDBGLCAweDEyLCAweDBFLAotCTB4MDMsIDB4NzUsIDB4ODMsIDB4ODYsIDB4RTAsIDB4NTQsIDB4QkYsIDB4RjAsCi0vKjBERjAqLzB4RTUsIDB4MDgsIDB4NDQsIDB4MDYsIDB4MTIsIDB4MEQsIDB4RkQsIDB4NzUsCi0JMHg4MywgMHg4QSwgMHhFNCwgMHhGMCwgMHgyMiwgMHhGNSwgMHg4MiwgMHg3NSwKLS8qMEUwMCovMHg4MywgMHg4MiwgMHhFNCwgMHhGMCwgMHhFNSwgMHgwOCwgMHg0NCwgMHgwNywKLQkweEY1LCAweDgyLCAweDIyLCAweDhFLCAweDgzLCAweEUwLCAweEY1LCAweDEwLAotLyowRTEwKi8weDU0LCAweEZFLCAweEYwLCAweEU1LCAweDEwLCAweDQ0LCAweDAxLCAweEZGLAotCTB4RTUsIDB4MDgsIDB4RkQsIDB4RUQsIDB4NDQsIDB4MDcsIDB4RjUsIDB4ODIsCi0vKjBFMjAqLzB4MjIsIDB4RTUsIDB4MTUsIDB4QzQsIDB4NTQsIDB4MDcsIDB4RkYsIDB4RTUsCi0JMHgwOCwgMHhGRCwgMHhFRCwgMHg0NCwgMHgwOCwgMHhGNSwgMHg4MiwgMHg3NSwKLS8qMEUzMCovMHg4MywgMHg4MiwgMHgyMiwgMHg3NSwgMHg4MywgMHg4MCwgMHhFMCwgMHg0NCwKLQkweDQwLCAweEYwLCAweEU1LCAweDA4LCAweDQ0LCAweDA4LCAweEY1LCAweDgyLAotLyowRTQwKi8weDc1LCAweDgzLCAweDhBLCAweDIyLCAweEU1LCAweDE2LCAweDI1LCAweEUwLAotCTB4MjUsIDB4RTAsIDB4MjQsIDB4QUYsIDB4RjUsIDB4ODIsIDB4RTQsIDB4MzQsCi0vKjBFNTAqLzB4MUEsIDB4RjUsIDB4ODMsIDB4RTQsIDB4OTMsIDB4RjUsIDB4MEQsIDB4MjIsCi0JMHg0MywgMHhFMSwgMHgxMCwgMHg0MywgMHhFMSwgMHg4MCwgMHg1MywgMHhFMSwKLS8qMEU2MCovMHhGRCwgMHg4NSwgMHhFMSwgMHgxMCwgMHgyMiwgMHhFNSwgMHgxNiwgMHgyNSwKLQkweEUwLCAweDI1LCAweEUwLCAweDI0LCAweEIyLCAweEY1LCAweDgyLCAweEU0LAotLyowRTcwKi8weDM0LCAweDFBLCAweEY1LCAweDgzLCAweEU0LCAweDkzLCAweDIyLCAweDg1LAotCTB4NTUsIDB4ODIsIDB4ODUsIDB4NTQsIDB4ODMsIDB4RTUsIDB4MTUsIDB4RjAsCi0vKjBFODAqLzB4MjIsIDB4RTUsIDB4RTIsIDB4NTQsIDB4MjAsIDB4RDMsIDB4OTQsIDB4MDAsCi0JMHgyMiwgMHhFNSwgMHhFMiwgMHg1NCwgMHg0MCwgMHhEMywgMHg5NCwgMHgwMCwKLS8qMEU5MCovMHgyMiwgMHhFNSwgMHgwOCwgMHg0NCwgMHgwNiwgMHhGNSwgMHg4MiwgMHgyMiwKLQkweEZELCAweEU1LCAweDA4LCAweEZCLCAweEVCLCAweDQ0LCAweDA3LCAweEY1LAotLyowRUEwKi8weDgyLCAweDIyLCAweDUzLCAweEY5LCAweEY3LCAweDc1LCAweEZFLCAweDMwLAotCTB4MjIsIDB4RUYsIDB4NEUsIDB4NzAsIDB4MjYsIDB4MTIsIDB4MDcsIDB4Q0MsCi0vKjBFQjAqLzB4RTAsIDB4RkQsIDB4OTAsIDB4MDcsIDB4MjYsIDB4MTIsIDB4MDcsIDB4N0IsCi0JMHgxMiwgMHgwNywgMHhEOCwgMHhFMCwgMHhGRCwgMHg5MCwgMHgwNywgMHgyOCwKLS8qMEVDMCovMHgxMiwgMHgwNywgMHg3QiwgMHgxMiwgMHgwOCwgMHg4MSwgMHgxMiwgMHgwNywKLQkweDcyLCAweDEyLCAweDA4LCAweDM1LCAweEUwLCAweDkwLCAweDA3LCAweDI0LAotLyowRUQwKi8weDEyLCAweDA3LCAweDc4LCAweEVGLCAweDY0LCAweDA0LCAweDRFLCAweDcwLAotCTB4MjksIDB4MTIsIDB4MDcsIDB4RTQsIDB4RTAsIDB4RkQsIDB4OTAsIDB4MDcsCi0vKjBFRTAqLzB4MjYsIDB4MTIsIDB4MDcsIDB4N0IsIDB4MTIsIDB4MDcsIDB4RjAsIDB4RTAsCi0JMHhGRCwgMHg5MCwgMHgwNywgMHgyOCwgMHgxMiwgMHgwNywgMHg3QiwgMHgxMiwKLS8qMEVGMCovMHgwOCwgMHg4QiwgMHgxMiwgMHgwNywgMHg3MiwgMHgxMiwgMHgwOCwgMHg0MSwKLQkweEUwLCAweDU0LCAweDFGLCAweEZELCAweDkwLCAweDA3LCAweDI0LCAweDEyLAotLyowRjAwKi8weDA3LCAweDdCLCAweEVGLCAweDY0LCAweDAxLCAweDRFLCAweDcwLCAweDA0LAotCTB4N0QsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N0QsIDB4MDAsIDB4RUYsIDB4NjQsCi0vKjBGMTAqLzB4MDIsIDB4NEUsIDB4NzAsIDB4MDQsIDB4N0YsIDB4MDEsIDB4ODAsIDB4MDIsCi0JMHg3RiwgMHgwMCwgMHhFRiwgMHg0RCwgMHg2MCwgMHgzNSwgMHgxMiwgMHgwNywKLS8qMEYyMCovMHhGQywgMHhFMCwgMHhGRiwgMHg5MCwgMHgwNywgMHgyNiwgMHgxMiwgMHgwNywKLQkweDg5LCAweEVGLCAweEYwLCAweDEyLCAweDA4LCAweDA4LCAweEUwLCAweEZGLAotLyowRjMwKi8weDkwLCAweDA3LCAweDI4LCAweDEyLCAweDA3LCAweDg5LCAweEVGLCAweEYwLAotCTB4MTIsIDB4MDgsIDB4NEQsIDB4RTAsIDB4NTQsIDB4MUYsIDB4RkYsIDB4MTIsCi0vKjBGNDAqLzB4MDcsIDB4ODYsIDB4RUYsIDB4RjAsIDB4MTIsIDB4MDgsIDB4NTksIDB4RTAsCi0JMHg1NCwgMHgxRiwgMHhGRiwgMHg5MCwgMHgwNywgMHgyNCwgMHgxMiwgMHgwNywKLS8qMEY1MCovMHg4OSwgMHhFRiwgMHhGMCwgMHgyMiwgMHhFNCwgMHhGNSwgMHg1MywgMHgxMiwKLQkweDBFLCAweDgxLCAweDQwLCAweDA0LCAweDdGLCAweDAxLCAweDgwLCAweDAyLAotLyowRjYwKi8weDdGLCAweDAwLCAweDEyLCAweDBFLCAweDg5LCAweDQwLCAweDA0LCAweDdFLAotCTB4MDEsIDB4ODAsIDB4MDIsIDB4N0UsIDB4MDAsIDB4RUUsIDB4NEYsIDB4NzAsCi0vKjBGNzAqLzB4MDMsIDB4MDIsIDB4MEYsIDB4RjYsIDB4ODUsIDB4RTEsIDB4MTAsIDB4NDMsCi0JMHhFMSwgMHgwMiwgMHg1MywgMHhFMSwgMHgwRiwgMHg4NSwgMHhFMSwgMHgxMCwKLS8qMEY4MCovMHhFNCwgMHhGNSwgMHg1MSwgMHhFNSwgMHhFMywgMHg1NCwgMHgzRiwgMHhGNSwKLQkweDUyLCAweDEyLCAweDBFLCAweDg5LCAweDQwLCAweDFELCAweEFELCAweDUyLAotLyowRjkwKi8weEFGLCAweDUxLCAweDEyLCAweDExLCAweDE4LCAweEVGLCAweDYwLCAweDA4LAotCTB4ODUsIDB4RTEsIDB4MTAsIDB4NDMsIDB4RTEsIDB4NDAsIDB4ODAsIDB4MEIsCi0vKjBGQTAqLzB4NTMsIDB4RTEsIDB4QkYsIDB4MTIsIDB4MEUsIDB4NTgsIDB4MTIsIDB4MDAsCi0JMHgwNiwgMHg4MCwgMHhGQiwgMHhFNSwgMHhFMywgMHg1NCwgMHgzRiwgMHhGNSwKLS8qMEZCMCovMHg1MSwgMHhFNSwgMHhFNCwgMHg1NCwgMHgzRiwgMHhGNSwgMHg1MiwgMHgxMiwKLQkweDBFLCAweDgxLCAweDQwLCAweDFELCAweEFELCAweDUyLCAweEFGLCAweDUxLAotLyowRkMwKi8weDEyLCAweDExLCAweDE4LCAweEVGLCAweDYwLCAweDA4LCAweDg1LCAweEUxLAotCTB4MTAsIDB4NDMsIDB4RTEsIDB4MjAsIDB4ODAsIDB4MEIsIDB4NTMsIDB4RTEsCi0vKjBGRDAqLzB4REYsIDB4MTIsIDB4MEUsIDB4NTgsIDB4MTIsIDB4MDAsIDB4MDYsIDB4ODAsCi0JMHhGQiwgMHgxMiwgMHgwRSwgMHg4MSwgMHg0MCwgMHgwNCwgMHg3RiwgMHgwMSwKLS8qMEZFMCovMHg4MCwgMHgwMiwgMHg3RiwgMHgwMCwgMHgxMiwgMHgwRSwgMHg4OSwgMHg0MCwKLQkweDA0LCAweDdFLCAweDAxLCAweDgwLCAweDAyLCAweDdFLCAweDAwLCAweEVFLAotLyowRkYwKi8weDRGLCAweDYwLCAweDAzLCAweDEyLCAweDBFLCAweDVCLCAweDIyLCAweDEyLAotCTB4MEUsIDB4MjEsIDB4RUYsIDB4RjAsIDB4MTIsIDB4MTAsIDB4OTEsIDB4MjIsCi0vKjEwMDAqLzB4MDIsIDB4MTEsIDB4MDAsIDB4MDIsIDB4MTAsIDB4NDAsIDB4MDIsIDB4MTAsCi0JMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLS8qMTAxMCovMHgwMSwgMHgyMCwgMHgwMSwgMHgyMCwgMHhFNCwgMHhGNSwgMHg1NywgMHgxMiwKLQkweDE2LCAweEJELCAweDEyLCAweDE2LCAweDQ0LCAweEU0LCAweDEyLCAweDEwLAotLyoxMDIwKi8weDU2LCAweDEyLCAweDE0LCAweEI3LCAweDkwLCAweDA3LCAweDI2LCAweDEyLAotCTB4MDcsIDB4MzUsIDB4RTQsIDB4MTIsIDB4MDcsIDB4MzEsIDB4RTQsIDB4RjAsCi0vKjEwMzAqLzB4MTIsIDB4MTAsIDB4NTYsIDB4MTIsIDB4MTQsIDB4QjcsIDB4OTAsIDB4MDcsCi0JMHgyNiwgMHgxMiwgMHgwNywgMHgzNSwgMHhFNSwgMHg0MSwgMHgxMiwgMHgwNywKLS8qMTA0MCovMHgzMSwgMHhFNSwgMHg0MCwgMHhGMCwgMHhBRiwgMHg1NywgMHg3RSwgMHgwMCwKLQkweEFELCAweDU2LCAweDdDLCAweDAwLCAweDEyLCAweDA0LCAweDQ0LCAweEFGLAotLyoxMDUwKi8weDU2LCAweDdFLCAweDAwLCAweDAyLCAweDExLCAweEVFLCAweEZGLCAweDkwLAotCTB4MDcsIDB4MjAsIDB4QTMsIDB4RTAsIDB4RkQsIDB4RTQsIDB4RjUsIDB4NTYsCi0vKjEwNjAqLzB4RjUsIDB4NDAsIDB4RkUsIDB4RkMsIDB4QUIsIDB4NTYsIDB4RkEsIDB4MTIsCi0JMHgxMSwgMHg1MSwgMHg3RiwgMHgwRiwgMHg3RCwgMHgxOCwgMHhFNCwgMHhGNSwKLS8qMTA3MCovMHg1NiwgMHhGNSwgMHg0MCwgMHhGRSwgMHhGQywgMHhBQiwgMHg1NiwgMHhGQSwKLQkweDEyLCAweDE1LCAweDQxLCAweEFGLCAweDU2LCAweDdFLCAweDAwLCAweDEyLAotLyoxMDgwKi8weDFBLCAweEZGLCAweEU0LCAweEZGLCAweEY1LCAweDU2LCAweDdELCAweDFGLAotCTB4RjUsIDB4NDAsIDB4RkUsIDB4RkMsIDB4QUIsIDB4NTYsIDB4RkEsIDB4MjIsCi0vKjEwOTAqLzB4MjIsIDB4RTQsIDB4RjUsIDB4NTUsIDB4RTUsIDB4MDgsIDB4RkQsIDB4NzQsCi0JMHhBMCwgMHhGNSwgMHg1NiwgMHhFRCwgMHg0NCwgMHgwNywgMHhGNSwgMHg1NywKLS8qMTBBMCovMHhFNSwgMHgyOCwgMHgzMCwgMHhFNSwgMHgwMywgMHhEMywgMHg4MCwgMHgwMSwKLQkweEMzLCAweDQwLCAweDA1LCAweDdGLCAweDI4LCAweEVGLCAweDgwLCAweDA0LAotLyoxMEIwKi8weDdGLCAweDE0LCAweEVGLCAweEMzLCAweDEzLCAweEY1LCAweDU0LCAweEU0LAotCTB4RjksIDB4MTIsIDB4MEUsIDB4MTgsIDB4NzUsIDB4ODMsIDB4OEUsIDB4RTAsCi0vKjEwQzAqLzB4RjUsIDB4MTAsIDB4Q0UsIDB4RUYsIDB4Q0UsIDB4RUUsIDB4RDMsIDB4OTQsCi0JMHgwMCwgMHg0MCwgMHgyNiwgMHhFNSwgMHgxMCwgMHg1NCwgMHhGRSwgMHgxMiwKLS8qMTBEMCovMHgwRSwgMHg5OCwgMHg3NSwgMHg4MywgMHg4RSwgMHhFRCwgMHhGMCwgMHhFNSwKLQkweDEwLCAweDQ0LCAweDAxLCAweEZELCAweEVCLCAweDQ0LCAweDA3LCAweEY1LAotLyoxMEUwKi8weDgyLCAweEVELCAweEYwLCAweDg1LCAweDU3LCAweDgyLCAweDg1LCAweDU2LAotCTB4ODMsIDB4RTAsIDB4MzAsIDB4RTMsIDB4MDEsIDB4MDksIDB4MUUsIDB4ODAsCi0vKjEwRjAqLzB4RDQsIDB4QzIsIDB4MzQsIDB4RTksIDB4QzMsIDB4OTUsIDB4NTQsIDB4NDAsCi0JMHgwMiwgMHhEMiwgMHgzNCwgMHgyMiwgMHgwMiwgMHgwMCwgMHgwNiwgMHgyMiwKLS8qMTEwMCovMHgzMCwgMHgzMCwgMHgxMSwgMHg5MCwgMHgxMCwgMHgwMCwgMHhFNCwgMHg5MywKLQkweEY1LCAweDEwLCAweDkwLCAweDEwLCAweDEwLCAweEU0LCAweDkzLCAweEY1LAotLyoxMTEwKi8weDEwLCAweDEyLCAweDEwLCAweDkwLCAweDEyLCAweDExLCAweDUwLCAweDIyLAotCTB4RTQsIDB4RkMsIDB4QzMsIDB4RUQsIDB4OUYsIDB4RkEsIDB4RUYsIDB4RjUsCi0vKjExMjAqLzB4ODMsIDB4NzUsIDB4ODIsIDB4MDAsIDB4NzksIDB4RkYsIDB4RTQsIDB4OTMsCi0JMHhDQywgMHg2QywgMHhDQywgMHhBMywgMHhEOSwgMHhGOCwgMHhEQSwgMHhGNiwKLS8qMTEzMCovMHhFNSwgMHhFMiwgMHgzMCwgMHhFNCwgMHgwMiwgMHg4QywgMHhFNSwgMHhFRCwKLQkweDI0LCAweEZGLCAweEZGLCAweEVGLCAweDc1LCAweDgyLCAweEZGLCAweEY1LAotLyoxMTQwKi8weDgzLCAweEU0LCAweDkzLCAweDZDLCAweDcwLCAweDAzLCAweDdGLCAweDAxLAotCTB4MjIsIDB4N0YsIDB4MDAsIDB4MjIsIDB4MjIsIDB4MTEsIDB4MDAsIDB4MDAsCi0vKjExNTAqLzB4MjIsIDB4OEUsIDB4NTgsIDB4OEYsIDB4NTksIDB4OEMsIDB4NUEsIDB4OEQsCi0JMHg1QiwgMHg4QSwgMHg1QywgMHg4QiwgMHg1RCwgMHg3NSwgMHg1RSwgMHgwMSwKLS8qMTE2MCovMHhFNCwgMHhGNSwgMHg1RiwgMHhGNSwgMHg2MCwgMHhGNSwgMHg2MiwgMHgxMiwKLQkweDA3LCAweDJBLCAweDc1LCAweDgzLCAweEQwLCAweEUwLCAweEZGLCAweEM0LAotLyoxMTcwKi8weDU0LCAweDBGLCAweEY1LCAweDYxLCAweDEyLCAweDFFLCAweEE1LCAweDg1LAotCTB4NTksIDB4NUUsIDB4RDMsIDB4RTUsIDB4NUUsIDB4OTUsIDB4NUIsIDB4RTUsCi0vKjExODAqLzB4NUEsIDB4MTIsIDB4MDcsIDB4NkIsIDB4NTAsIDB4NEIsIDB4MTIsIDB4MDcsCi0JMHgwMywgMHg3NSwgMHg4MywgMHhCQywgMHhFMCwgMHg0NSwgMHg1RSwgMHgxMiwKLS8qMTE5MCovMHgwNywgMHgyOSwgMHg3NSwgMHg4MywgMHhCRSwgMHhFMCwgMHg0NSwgMHg1RSwKLQkweDEyLCAweDA3LCAweDI5LCAweDc1LCAweDgzLCAweEMwLCAweEUwLCAweDQ1LAotLyoxMUEwKi8weDVFLCAweEYwLCAweEFGLCAweDVGLCAweEU1LCAweDYwLCAweDEyLCAweDA4LAotCTB4NzgsIDB4MTIsIDB4MEEsIDB4RkYsIDB4QUYsIDB4NjIsIDB4N0UsIDB4MDAsCi0vKjExQjAqLzB4QUQsIDB4NUQsIDB4QUMsIDB4NUMsIDB4MTIsIDB4MDQsIDB4NDQsIDB4RTUsCi0JMHg2MSwgMHhBRiwgMHg1RSwgMHg3RSwgMHgwMCwgMHhCNCwgMHgwMywgMHgwNSwKLS8qMTFDMCovMHgxMiwgMHgxRSwgMHgyMSwgMHg4MCwgMHgwNywgMHhBRCwgMHg1RCwgMHhBQywKLQkweDVDLCAweDEyLCAweDEzLCAweDE3LCAweDA1LCAweDVFLCAweDAyLCAweDExLAotLyoxMUQwKi8weDdBLCAweDEyLCAweDA3LCAweDAzLCAweDc1LCAweDgzLCAweEJDLCAweEUwLAotCTB4NDUsIDB4NDAsIDB4MTIsIDB4MDcsIDB4MjksIDB4NzUsIDB4ODMsIDB4QkUsCi0vKjExRTAqLzB4RTAsIDB4NDUsIDB4NDAsIDB4MTIsIDB4MDcsIDB4MjksIDB4NzUsIDB4ODMsCi0JMHhDMCwgMHhFMCwgMHg0NSwgMHg0MCwgMHhGMCwgMHgyMiwgMHg4RSwgMHg1OCwKLS8qMTFGMCovMHg4RiwgMHg1OSwgMHg3NSwgMHg1QSwgMHgwMSwgMHg3OSwgMHgwMSwgMHg3NSwKLQkweDVCLCAweDAxLCAweEU0LCAweEZCLCAweDEyLCAweDA3LCAweDJBLCAweDc1LAotLyoxMjAwKi8weDgzLCAweEFFLCAweEUwLCAweDU0LCAweDFBLCAweEZGLCAweDEyLCAweDA4LAotCTB4NjUsIDB4RTAsIDB4QzQsIDB4MTMsIDB4NTQsIDB4MDcsIDB4RkUsIDB4RUYsCi0vKjEyMTAqLzB4NzAsIDB4MEMsIDB4RUUsIDB4NjUsIDB4MzUsIDB4NzAsIDB4MDcsIDB4OTAsCi0JMHgwNywgMHgyRiwgMHhFMCwgMHhCNCwgMHgwMSwgMHgwRCwgMHhBRiwgMHgzNSwKLS8qMTIyMCovMHg3RSwgMHgwMCwgMHgxMiwgMHgwRSwgMHhBOSwgMHhDRiwgMHhFQiwgMHhDRiwKLQkweDAyLCAweDFFLCAweDYwLCAweEU1LCAweDU5LCAweDY0LCAweDAyLCAweDQ1LAotLyoxMjMwKi8weDU4LCAweDcwLCAweDA0LCAweDdGLCAweDAxLCAweDgwLCAweDAyLCAweDdGLAotCTB4MDAsIDB4RTUsIDB4NTksIDB4NDUsIDB4NTgsIDB4NzAsIDB4MDQsIDB4N0UsCi0vKjEyNDAqLzB4MDEsIDB4ODAsIDB4MDIsIDB4N0UsIDB4MDAsIDB4RUUsIDB4NEYsIDB4NjAsCi0JMHgyMywgMHg4NSwgMHg0MSwgMHg0OSwgMHg4NSwgMHg0MCwgMHg0QiwgMHhFNSwKLS8qMTI1MCovMHg1OSwgMHg0NSwgMHg1OCwgMHg3MCwgMHgyQywgMHhBRiwgMHg1QSwgMHhGRSwKLQkweENELCAweEU5LCAweENELCAweEZDLCAweEFCLCAweDU5LCAweEFBLCAweDU4LAotLyoxMjYwKi8weDEyLCAweDBBLCAweEZGLCAweEFGLCAweDVCLCAweDdFLCAweDAwLCAweDEyLAotCTB4MUUsIDB4NjAsIDB4ODAsIDB4MTUsIDB4QUYsIDB4NUIsIDB4N0UsIDB4MDAsCi0vKjEyNzAqLzB4MTIsIDB4MUUsIDB4NjAsIDB4OTAsIDB4MDcsIDB4MjYsIDB4MTIsIDB4MDcsCi0JMHgzNSwgMHhFNSwgMHg0OSwgMHgxMiwgMHgwNywgMHgzMSwgMHhFNSwgMHg0QiwKLS8qMTI4MCovMHhGMCwgMHhFNCwgMHhGRCwgMHhBRiwgMHgzNSwgMHhGRSwgMHhGQywgMHgxMiwKLQkweDA5LCAweDE1LCAweDIyLCAweDhDLCAweDY0LCAweDhELCAweDY1LCAweDEyLAotLyoxMjkwKi8weDA4LCAweERBLCAweDQwLCAweDNDLCAweEU1LCAweDY1LCAweDQ1LCAweDY0LAotCTB4NzAsIDB4MTAsIDB4MTIsIDB4MDksIDB4MDQsIDB4QzMsIDB4RTUsIDB4M0UsCi0vKjEyQTAqLzB4MTIsIDB4MDcsIDB4NjksIDB4NDAsIDB4M0IsIDB4MTIsIDB4MDgsIDB4OTUsCi0JMHg4MCwgMHgxOCwgMHhFNSwgMHgzRSwgMHhDMywgMHg5NSwgMHgzOCwgMHg0MCwKLS8qMTJCMCovMHgxRCwgMHg4NSwgMHgzRSwgMHgzOCwgMHhFNSwgMHgzRSwgMHg2MCwgMHgwNSwKLQkweDg1LCAweDNGLCAweDM5LCAweDgwLCAweDAzLCAweDg1LCAweDM5LCAweDM5LAotLyoxMkMwKi8weDhGLCAweDNBLCAweDEyLCAweDA3LCAweEE4LCAweEU1LCAweDNFLCAweDEyLAotCTB4MDcsIDB4NTMsIDB4RTUsIDB4M0YsIDB4RjAsIDB4MjIsIDB4ODAsIDB4M0IsCi0vKjEyRDAqLzB4RTUsIDB4NjUsIDB4NDUsIDB4NjQsIDB4NzAsIDB4MTEsIDB4MTIsIDB4MDcsCi0JMHg1RiwgMHg0MCwgMHgwNSwgMHgxMiwgMHgwOCwgMHg5RSwgMHg4MCwgMHgxRiwKLS8qMTJFMCovMHgxMiwgMHgwNywgMHgzRSwgMHhFNSwgMHg0MSwgMHhGMCwgMHgyMiwgMHhFNSwKLQkweDNDLCAweEMzLCAweDk1LCAweDM4LCAweDQwLCAweDFELCAweDg1LCAweDNDLAotLyoxMkYwKi8weDM4LCAweEU1LCAweDNDLCAweDYwLCAweDA1LCAweDg1LCAweDNELCAweDM5LAotCTB4ODAsIDB4MDMsIDB4ODUsIDB4MzksIDB4MzksIDB4OEYsIDB4M0EsIDB4MTIsCi0vKjEzMDAqLzB4MDcsIDB4QTgsIDB4RTUsIDB4M0MsIDB4MTIsIDB4MDcsIDB4NTMsIDB4RTUsCi0JMHgzRCwgMHhGMCwgMHgyMiwgMHgxMiwgMHgwNywgMHg5RiwgMHhFNSwgMHgzOCwKLS8qMTMxMCovMHgxMiwgMHgwNywgMHg1MywgMHhFNSwgMHgzOSwgMHhGMCwgMHgyMiwgMHg4QywKLQkweDYzLCAweDhELCAweDY0LCAweDEyLCAweDA4LCAweERBLCAweDQwLCAweDNDLAotLyoxMzIwKi8weEU1LCAweDY0LCAweDQ1LCAweDYzLCAweDcwLCAweDEwLCAweDEyLCAweDA5LAotCTB4MDQsIDB4QzMsIDB4RTUsIDB4M0UsIDB4MTIsIDB4MDcsIDB4NjksIDB4NDAsCi0vKjEzMzAqLzB4M0IsIDB4MTIsIDB4MDgsIDB4OTUsIDB4ODAsIDB4MTgsIDB4RTUsIDB4M0UsCi0JMHhDMywgMHg5NSwgMHgzOCwgMHg0MCwgMHgxRCwgMHg4NSwgMHgzRSwgMHgzOCwKLS8qMTM0MCovMHhFNSwgMHgzRSwgMHg2MCwgMHgwNSwgMHg4NSwgMHgzRiwgMHgzOSwgMHg4MCwKLQkweDAzLCAweDg1LCAweDM5LCAweDM5LCAweDhGLCAweDNBLCAweDEyLCAweDA3LAotLyoxMzUwKi8weEE4LCAweEU1LCAweDNFLCAweDEyLCAweDA3LCAweDUzLCAweEU1LCAweDNGLAotCTB4RjAsIDB4MjIsIDB4ODAsIDB4M0IsIDB4RTUsIDB4NjQsIDB4NDUsIDB4NjMsCi0vKjEzNjAqLzB4NzAsIDB4MTEsIDB4MTIsIDB4MDcsIDB4NUYsIDB4NDAsIDB4MDUsIDB4MTIsCi0JMHgwOCwgMHg5RSwgMHg4MCwgMHgxRiwgMHgxMiwgMHgwNywgMHgzRSwgMHhFNSwKLS8qMTM3MCovMHg0MSwgMHhGMCwgMHgyMiwgMHhFNSwgMHgzQywgMHhDMywgMHg5NSwgMHgzOCwKLQkweDQwLCAweDFELCAweDg1LCAweDNDLCAweDM4LCAweEU1LCAweDNDLCAweDYwLAotLyoxMzgwKi8weDA1LCAweDg1LCAweDNELCAweDM5LCAweDgwLCAweDAzLCAweDg1LCAweDM5LAotCTB4MzksIDB4OEYsIDB4M0EsIDB4MTIsIDB4MDcsIDB4QTgsIDB4RTUsIDB4M0MsCi0vKjEzOTAqLzB4MTIsIDB4MDcsIDB4NTMsIDB4RTUsIDB4M0QsIDB4RjAsIDB4MjIsIDB4MTIsCi0JMHgwNywgMHg5RiwgMHhFNSwgMHgzOCwgMHgxMiwgMHgwNywgMHg1MywgMHhFNSwKLS8qMTNBMCovMHgzOSwgMHhGMCwgMHgyMiwgMHhFNSwgMHgwRCwgMHhGRSwgMHhFNSwgMHgwOCwKLQkweDhFLCAweDU0LCAweDQ0LCAweDA1LCAweEY1LCAweDU1LCAweDc1LCAweDE1LAotLyoxM0IwKi8weDBGLCAweEY1LCAweDgyLCAweDEyLCAweDBFLCAweDdBLCAweDEyLCAweDE3LAotCTB4QTMsIDB4MjAsIDB4MzEsIDB4MDUsIDB4NzUsIDB4MTUsIDB4MDMsIDB4ODAsCi0vKjEzQzAqLzB4MDMsIDB4NzUsIDB4MTUsIDB4MEIsIDB4RTUsIDB4MEEsIDB4QzMsIDB4OTQsCi0JMHgwMSwgMHg1MCwgMHgzOCwgMHgxMiwgMHgxNCwgMHgyMCwgMHgyMCwgMHgzMSwKLS8qMTNEMCovMHgwNiwgMHgwNSwgMHgxNSwgMHgwNSwgMHgxNSwgMHg4MCwgMHgwNCwgMHgxNSwKLQkweDE1LCAweDE1LCAweDE1LCAweEU1LCAweDBBLCAweEMzLCAweDk0LCAweDAxLAotLyoxM0UwKi8weDUwLCAweDIxLCAweDEyLCAweDE0LCAweDIwLCAweDIwLCAweDMxLCAweDA0LAotCTB4MDUsIDB4MTUsIDB4ODAsIDB4MDIsIDB4MTUsIDB4MTUsIDB4RTUsIDB4MEEsCi0vKjEzRjAqLzB4QzMsIDB4OTQsIDB4MDEsIDB4NTAsIDB4MEUsIDB4MTIsIDB4MEUsIDB4NzcsCi0JMHgxMiwgMHgxNywgMHhBMywgMHgyMCwgMHgzMSwgMHgwNSwgMHgwNSwgMHgxNSwKLS8qMTQwMCovMHgxMiwgMHgwRSwgMHg3NywgMHhFNSwgMHgxNSwgMHhCNCwgMHgwOCwgMHgwNCwKLQkweDdGLCAweDAxLCAweDgwLCAweDAyLCAweDdGLCAweDAwLCAweEU1LCAweDE1LAotLyoxNDEwKi8weEI0LCAweDA3LCAweDA0LCAweDdFLCAweDAxLCAweDgwLCAweDAyLCAweDdFLAotCTB4MDAsIDB4RUUsIDB4NEYsIDB4NjAsIDB4MDIsIDB4MDUsIDB4N0YsIDB4MjIsCi0vKjE0MjAqLzB4ODUsIDB4NTUsIDB4ODIsIDB4ODUsIDB4NTQsIDB4ODMsIDB4RTUsIDB4MTUsCi0JMHhGMCwgMHgxMiwgMHgxNywgMHhBMywgMHgyMiwgMHgxMiwgMHgwNywgMHgyQSwKLS8qMTQzMCovMHg3NSwgMHg4MywgMHhBRSwgMHg3NCwgMHhGRiwgMHgxMiwgMHgwNywgMHgyOSwKLQkweEUwLCAweDU0LCAweDFBLCAweEY1LCAweDM0LCAweEUwLCAweEM0LCAweDEzLAotLyoxNDQwKi8weDU0LCAweDA3LCAweEY1LCAweDM1LCAweDI0LCAweEZFLCAweDYwLCAweDI0LAotCTB4MjQsIDB4RkUsIDB4NjAsIDB4M0MsIDB4MjQsIDB4MDQsIDB4NzAsIDB4NjMsCi0vKjE0NTAqLzB4NzUsIDB4MzEsIDB4MkQsIDB4RTUsIDB4MDgsIDB4RkQsIDB4NzQsIDB4QjYsCi0JMHgxMiwgMHgwNywgMHg5MiwgMHg3NCwgMHhCQywgMHg5MCwgMHgwNywgMHgyMiwKLS8qMTQ2MCovMHgxMiwgMHgwNywgMHg5NSwgMHg3NCwgMHg5MCwgMHgxMiwgMHgwNywgMHhCMywKLQkweDc0LCAweDkyLCAweDgwLCAweDNDLCAweDc1LCAweDMxLCAweDNBLCAweEU1LAotLyoxNDcwKi8weDA4LCAweEZELCAweDc0LCAweEJBLCAweDEyLCAweDA3LCAweDkyLCAweDc0LAotCTB4QzAsIDB4OTAsIDB4MDcsIDB4MjIsIDB4MTIsIDB4MDcsIDB4QjYsIDB4NzQsCi0vKjE0ODAqLzB4QzQsIDB4MTIsIDB4MDcsIDB4QjMsIDB4NzQsIDB4QzgsIDB4ODAsIDB4MjAsCi0JMHg3NSwgMHgzMSwgMHgzNSwgMHhFNSwgMHgwOCwgMHhGRCwgMHg3NCwgMHhCOCwKLS8qMTQ5MCovMHgxMiwgMHgwNywgMHg5MiwgMHg3NCwgMHhCRSwgMHhGRiwgMHhFRCwgMHg0NCwKLQkweDA3LCAweDkwLCAweDA3LCAweDIyLCAweENGLCAweEYwLCAweEEzLCAweEVGLAotLyoxNEEwKi8weEYwLCAweDc0LCAweEMyLCAweDEyLCAweDA3LCAweEIzLCAweDc0LCAweEM2LAotCTB4RkYsIDB4RUQsIDB4NDQsIDB4MDcsIDB4QTMsIDB4Q0YsIDB4RjAsIDB4QTMsCi0vKjE0QjAqLzB4RUYsIDB4RjAsIDB4MjIsIDB4NzUsIDB4MzQsIDB4MDEsIDB4MjIsIDB4OEUsCi0JMHg1OCwgMHg4RiwgMHg1OSwgMHg4QywgMHg1QSwgMHg4RCwgMHg1QiwgMHg4QSwKLS8qMTRDMCovMHg1QywgMHg4QiwgMHg1RCwgMHg3NSwgMHg1RSwgMHgwMSwgMHhFNCwgMHhGNSwKLQkweDVGLCAweDEyLCAweDFFLCAweEE1LCAweDg1LCAweDU5LCAweDVFLCAweEQzLAotLyoxNEQwKi8weEU1LCAweDVFLCAweDk1LCAweDVCLCAweEU1LCAweDVBLCAweDEyLCAweDA3LAotCTB4NkIsIDB4NTAsIDB4NTcsIDB4RTUsIDB4NUQsIDB4NDUsIDB4NUMsIDB4NzAsCi0vKjE0RTAqLzB4MzAsIDB4MTIsIDB4MDcsIDB4MkEsIDB4NzUsIDB4ODMsIDB4OTIsIDB4RTUsCi0JMHg1RSwgMHgxMiwgMHgwNywgMHgyOSwgMHg3NSwgMHg4MywgMHhDNiwgMHhFNSwKLS8qMTRGMCovMHg1RSwgMHgxMiwgMHgwNywgMHgyOSwgMHg3NSwgMHg4MywgMHhDOCwgMHhFNSwKLQkweDVFLCAweDEyLCAweDA3LCAweDI5LCAweDc1LCAweDgzLCAweDkwLCAweEU1LAotLyoxNTAwKi8weDVFLCAweDEyLCAweDA3LCAweDI5LCAweDc1LCAweDgzLCAweEMyLCAweEU1LAotCTB4NUUsIDB4MTIsIDB4MDcsIDB4MjksIDB4NzUsIDB4ODMsIDB4QzQsIDB4ODAsCi0vKjE1MTAqLzB4MDMsIDB4MTIsIDB4MDcsIDB4MzIsIDB4RTUsIDB4NUUsIDB4RjAsIDB4QUYsCi0JMHg1RiwgMHg3RSwgMHgwMCwgMHhBRCwgMHg1RCwgMHhBQywgMHg1QywgMHgxMiwKLS8qMTUyMCovMHgwNCwgMHg0NCwgMHhBRiwgMHg1RSwgMHg3RSwgMHgwMCwgMHhBRCwgMHg1RCwKLQkweEFDLCAweDVDLCAweDEyLCAweDBCLCAweEQxLCAweDA1LCAweDVFLCAweDAyLAotLyoxNTMwKi8weDE0LCAweENGLCAweEFCLCAweDVELCAweEFBLCAweDVDLCAweEFELCAweDVCLAotCTB4QUMsIDB4NUEsIDB4QUYsIDB4NTksIDB4QUUsIDB4NTgsIDB4MDIsIDB4MUIsCi0vKjE1NDAqLzB4RkIsIDB4OEMsIDB4NUMsIDB4OEQsIDB4NUQsIDB4OEEsIDB4NUUsIDB4OEIsCi0JMHg1RiwgMHg3NSwgMHg2MCwgMHgwMSwgMHhFNCwgMHhGNSwgMHg2MSwgMHhGNSwKLS8qMTU1MCovMHg2MiwgMHhGNSwgMHg2MywgMHgxMiwgMHgxRSwgMHhBNSwgMHg4RiwgMHg2MCwKLQkweEQzLCAweEU1LCAweDYwLCAweDk1LCAweDVELCAweEU1LCAweDVDLCAweDEyLAotLyoxNTYwKi8weDA3LCAweDZCLCAweDUwLCAweDYxLCAweEU1LCAweDVGLCAweDQ1LCAweDVFLAotCTB4NzAsIDB4MjcsIDB4MTIsIDB4MDcsIDB4MkEsIDB4NzUsIDB4ODMsIDB4QjYsCi0vKjE1NzAqLzB4RTUsIDB4NjAsIDB4MTIsIDB4MDcsIDB4MjksIDB4NzUsIDB4ODMsIDB4QjgsCi0JMHhFNSwgMHg2MCwgMHgxMiwgMHgwNywgMHgyOSwgMHg3NSwgMHg4MywgMHhCQSwKLS8qMTU4MCovMHhFNSwgMHg2MCwgMHhGMCwgMHhBRiwgMHg2MSwgMHg3RSwgMHgwMCwgMHhFNSwKLQkweDYyLCAweDEyLCAweDA4LCAweDdBLCAweDEyLCAweDBBLCAweEZGLCAweDgwLAotLyoxNTkwKi8weDE5LCAweDkwLCAweDA3LCAweDI0LCAweDEyLCAweDA3LCAweDM1LCAweEU1LAotCTB4NjAsIDB4MTIsIDB4MDcsIDB4MjksIDB4NzUsIDB4ODMsIDB4OEUsIDB4RTQsCi0vKjE1QTAqLzB4MTIsIDB4MDcsIDB4MjksIDB4NzQsIDB4MDEsIDB4MTIsIDB4MDcsIDB4MjksCi0JMHhFNCwgMHhGMCwgMHhBRiwgMHg2MywgMHg3RSwgMHgwMCwgMHhBRCwgMHg1RiwKLS8qMTVCMCovMHhBQywgMHg1RSwgMHgxMiwgMHgwNCwgMHg0NCwgMHhBRiwgMHg2MCwgMHg3RSwKLQkweDAwLCAweEFELCAweDVGLCAweEFDLCAweDVFLCAweDEyLCAweDEyLCAweDhCLAotLyoxNUMwKi8weDA1LCAweDYwLCAweDAyLCAweDE1LCAweDU4LCAweDIyLCAweDkwLCAweDExLAotCTB4NEQsIDB4RTQsIDB4OTMsIDB4OTAsIDB4MDcsIDB4MkUsIDB4RjAsIDB4MTIsCi0vKjE1RDAqLzB4MDgsIDB4MUYsIDB4NzUsIDB4ODMsIDB4QUUsIDB4RTAsIDB4NTQsIDB4MUEsCi0JMHhGNSwgMHgzNCwgMHg3MCwgMHg2NywgMHhFRiwgMHg0NCwgMHgwNywgMHhGNSwKLS8qMTVFMCovMHg4MiwgMHg3NSwgMHg4MywgMHhDRSwgMHhFMCwgMHhGRiwgMHgxMywgMHgxMywKLQkweDEzLCAweDU0LCAweDA3LCAweEY1LCAweDM2LCAweDU0LCAweDBGLCAweEQzLAotLyoxNUYwKi8weDk0LCAweDAwLCAweDQwLCAweDA2LCAweDEyLCAweDE0LCAweDJELCAweDEyLAotCTB4MUIsIDB4QTksIDB4RTUsIDB4MzYsIDB4NTQsIDB4MEYsIDB4MjQsIDB4RkUsCi0vKjE2MDAqLzB4NjAsIDB4MEMsIDB4MTQsIDB4NjAsIDB4MEMsIDB4MTQsIDB4NjAsIDB4MTksCi0JMHgyNCwgMHgwMywgMHg3MCwgMHgzNywgMHg4MCwgMHgxMCwgMHgwMiwgMHgxRSwKLS8qMTYxMCovMHg5MSwgMHgxMiwgMHgxRSwgMHg5MSwgMHgxMiwgMHgwNywgMHgyQSwgMHg3NSwKLQkweDgzLCAweENFLCAweEUwLCAweDU0LCAweEVGLCAweEYwLCAweDAyLCAweDFELAotLyoxNjIwKi8weEFFLCAweDEyLCAweDEwLCAweDE0LCAweEU0LCAweEY1LCAweDU1LCAweDEyLAotCTB4MUQsIDB4ODUsIDB4MDUsIDB4NTUsIDB4RTUsIDB4NTUsIDB4QzMsIDB4OTQsCi0vKjE2MzAqLzB4MDUsIDB4NDAsIDB4RjQsIDB4MTIsIDB4MDcsIDB4MkEsIDB4NzUsIDB4ODMsCi0JMHhDRSwgMHhFMCwgMHg1NCwgMHhDNywgMHgxMiwgMHgwNywgMHgyOSwgMHhFMCwKLS8qMTY0MCovMHg0NCwgMHgwOCwgMHhGMCwgMHgyMiwgMHhFNCwgMHhGNSwgMHg1OCwgMHhGNSwKLQkweDU5LCAweEFGLCAweDA4LCAweEVGLCAweDQ0LCAweDA3LCAweEY1LCAweDgyLAotLyoxNjUwKi8weDc1LCAweDgzLCAweEQwLCAweEUwLCAweEZELCAweEM0LCAweDU0LCAweDBGLAotCTB4RjUsIDB4NUEsIDB4RUYsIDB4NDQsIDB4MDcsIDB4RjUsIDB4ODIsIDB4NzUsCi0vKjE2NjAqLzB4ODMsIDB4ODAsIDB4NzQsIDB4MDEsIDB4RjAsIDB4MTIsIDB4MDgsIDB4MjEsCi0JMHg3NSwgMHg4MywgMHg4MiwgMHhFNSwgMHg0NSwgMHhGMCwgMHhFRiwgMHg0NCwKLS8qMTY3MCovMHgwNywgMHhGNSwgMHg4MiwgMHg3NSwgMHg4MywgMHg4QSwgMHg3NCwgMHhGRiwKLQkweEYwLCAweDEyLCAweDFBLCAweDRELCAweDEyLCAweDA3LCAweDJBLCAweDc1LAotLyoxNjgwKi8weDgzLCAweEJDLCAweEUwLCAweDU0LCAweEVGLCAweDEyLCAweDA3LCAweDI5LAotCTB4NzUsIDB4ODMsIDB4QkUsIDB4RTAsIDB4NTQsIDB4RUYsIDB4MTIsIDB4MDcsCi0vKjE2OTAqLzB4MjksIDB4NzUsIDB4ODMsIDB4QzAsIDB4RTAsIDB4NTQsIDB4RUYsIDB4MTIsCi0JMHgwNywgMHgyOSwgMHg3NSwgMHg4MywgMHhCQywgMHhFMCwgMHg0NCwgMHgxMCwKLS8qMTZBMCovMHgxMiwgMHgwNywgMHgyOSwgMHg3NSwgMHg4MywgMHhCRSwgMHhFMCwgMHg0NCwKLQkweDEwLCAweDEyLCAweDA3LCAweDI5LCAweDc1LCAweDgzLCAweEMwLCAweEUwLAotLyoxNkIwKi8weDQ0LCAweDEwLCAweEYwLCAweEFGLCAweDU4LCAweEU1LCAweDU5LCAweDEyLAotCTB4MDgsIDB4NzgsIDB4MDIsIDB4MEEsIDB4RkYsIDB4RTQsIDB4RjUsIDB4NTgsCi0vKjE2QzAqLzB4N0QsIDB4MDEsIDB4RjUsIDB4NTksIDB4QUYsIDB4MzUsIDB4RkUsIDB4RkMsCi0JMHgxMiwgMHgwOSwgMHgxNSwgMHgxMiwgMHgwNywgMHgyQSwgMHg3NSwgMHg4MywKLS8qMTZEMCovMHhCNiwgMHg3NCwgMHgxMCwgMHgxMiwgMHgwNywgMHgyOSwgMHg3NSwgMHg4MywKLQkweEI4LCAweDc0LCAweDEwLCAweDEyLCAweDA3LCAweDI5LCAweDc1LCAweDgzLAotLyoxNkUwKi8weEJBLCAweDc0LCAweDEwLCAweDEyLCAweDA3LCAweDI5LCAweDc1LCAweDgzLAotCTB4QkMsIDB4NzQsIDB4MTAsIDB4MTIsIDB4MDcsIDB4MjksIDB4NzUsIDB4ODMsCi0vKjE2RjAqLzB4QkUsIDB4NzQsIDB4MTAsIDB4MTIsIDB4MDcsIDB4MjksIDB4NzUsIDB4ODMsCi0JMHhDMCwgMHg3NCwgMHgxMCwgMHgxMiwgMHgwNywgMHgyOSwgMHg3NSwgMHg4MywKLS8qMTcwMCovMHg5MCwgMHhFNCwgMHgxMiwgMHgwNywgMHgyOSwgMHg3NSwgMHg4MywgMHhDMiwKLQkweEU0LCAweDEyLCAweDA3LCAweDI5LCAweDc1LCAweDgzLCAweEM0LCAweEU0LAotLyoxNzEwKi8weDEyLCAweDA3LCAweDI5LCAweDc1LCAweDgzLCAweDkyLCAweEU0LCAweDEyLAotCTB4MDcsIDB4MjksIDB4NzUsIDB4ODMsIDB4QzYsIDB4RTQsIDB4MTIsIDB4MDcsCi0vKjE3MjAqLzB4MjksIDB4NzUsIDB4ODMsIDB4QzgsIDB4RTQsIDB4RjAsIDB4QUYsIDB4NTgsCi0JMHhGRSwgMHhFNSwgMHg1OSwgMHgxMiwgMHgwOCwgMHg3QSwgMHgwMiwgMHgwQSwKLS8qMTczMCovMHhGRiwgMHhFNSwgMHhFMiwgMHgzMCwgMHhFNCwgMHg2QywgMHhFNSwgMHhFNywKLQkweDU0LCAweEMwLCAweDY0LCAweDQwLCAweDcwLCAweDY0LCAweEU1LCAweDA5LAotLyoxNzQwKi8weEM0LCAweDU0LCAweDMwLCAweEZFLCAweEU1LCAweDA4LCAweDI1LCAweEUwLAotCTB4MjUsIDB4RTAsIDB4NTQsIDB4QzAsIDB4NEUsIDB4RkUsIDB4RUYsIDB4NTQsCi0vKjE3NTAqLzB4M0YsIDB4NEUsIDB4RkQsIDB4RTUsIDB4MkIsIDB4QUUsIDB4MkEsIDB4NzgsCi0JMHgwMiwgMHhDMywgMHgzMywgMHhDRSwgMHgzMywgMHhDRSwgMHhEOCwgMHhGOSwKLS8qMTc2MCovMHhGNSwgMHg4MiwgMHg4RSwgMHg4MywgMHhFRCwgMHhGMCwgMHhFNSwgMHgyQiwKLQkweEFFLCAweDJBLCAweDc4LCAweDAyLCAweEMzLCAweDMzLCAweENFLCAweDMzLAotLyoxNzcwKi8weENFLCAweEQ4LCAweEY5LCAweEZGLCAweEY1LCAweDgyLCAweDhFLCAweDgzLAotCTB4QTMsIDB4RTUsIDB4RkUsIDB4RjAsIDB4OEYsIDB4ODIsIDB4OEUsIDB4ODMsCi0vKjE3ODAqLzB4QTMsIDB4QTMsIDB4RTUsIDB4RkQsIDB4RjAsIDB4OEYsIDB4ODIsIDB4OEUsCi0JMHg4MywgMHhBMywgMHhBMywgMHhBMywgMHhFNSwgMHhGQywgMHhGMCwgMHhDMywKLS8qMTc5MCovMHhFNSwgMHgyQiwgMHg5NCwgMHhGQSwgMHhFNSwgMHgyQSwgMHg5NCwgMHgwMCwKLQkweDUwLCAweDA4LCAweDA1LCAweDJCLCAweEU1LCAweDJCLCAweDcwLCAweDAyLAotLyoxN0EwKi8weDA1LCAweDJBLCAweDIyLCAweEU0LCAweEZGLCAweEU0LCAweEY1LCAweDU4LAotCTB4RjUsIDB4NTYsIDB4RjUsIDB4NTcsIDB4NzQsIDB4ODIsIDB4RkMsIDB4MTIsCi0vKjE3QjAqLzB4MEUsIDB4MDQsIDB4OEMsIDB4ODMsIDB4RTAsIDB4RjUsIDB4MTAsIDB4NTQsCi0JMHg3RiwgMHhGMCwgMHhFNSwgMHgxMCwgMHg0NCwgMHg4MCwgMHgxMiwgMHgwRSwKLS8qMTdDMCovMHg5OCwgMHhFRCwgMHhGMCwgMHg3RSwgMHgwQSwgMHgxMiwgMHgwRSwgMHgwNCwKLQkweDc1LCAweDgzLCAweEEwLCAweEUwLCAweDIwLCAweEUwLCAweDI2LCAweERFLAotLyoxN0QwKi8weEY0LCAweDA1LCAweDU3LCAweEU1LCAweDU3LCAweDcwLCAweDAyLCAweDA1LAotCTB4NTYsIDB4RTUsIDB4MTQsIDB4MjQsIDB4MDEsIDB4RkQsIDB4RTQsIDB4MzMsCi0vKjE3RTAqLzB4RkMsIDB4RDMsIDB4RTUsIDB4NTcsIDB4OUQsIDB4RTUsIDB4NTYsIDB4OUMsCi0JMHg0MCwgMHhEOSwgMHhFNSwgMHgwQSwgMHg5NCwgMHgyMCwgMHg1MCwgMHgwMiwKLS8qMTdGMCovMHgwNSwgMHgwQSwgMHg0MywgMHhFMSwgMHgwOCwgMHhDMiwgMHgzMSwgMHgxMiwKLQkweDBFLCAweDA0LCAweDc1LCAweDgzLCAweEE2LCAweEUwLCAweDU1LCAweDEyLAotLyoxODAwKi8weDY1LCAweDEyLCAweDcwLCAweDAzLCAweEQyLCAweDMxLCAweDIyLCAweEMyLAotCTB4MzEsIDB4MjIsIDB4OTAsIDB4MDcsIDB4MjYsIDB4RTAsIDB4RkEsIDB4QTMsCi0vKjE4MTAqLzB4RTAsIDB4RjUsIDB4ODIsIDB4OEEsIDB4ODMsIDB4RTAsIDB4RjUsIDB4NDEsCi0JMHhFNSwgMHgzOSwgMHhDMywgMHg5NSwgMHg0MSwgMHg0MCwgMHgyNiwgMHhFNSwKLS8qMTgyMCovMHgzOSwgMHg5NSwgMHg0MSwgMHhDMywgMHg5RiwgMHhFRSwgMHgxMiwgMHgwNywKLQkweDZCLCAweDQwLCAweDA0LCAweDdDLCAweDAxLCAweDgwLCAweDAyLCAweDdDLAotLyoxODMwKi8weDAwLCAweEU1LCAweDQxLCAweDY0LCAweDNGLCAweDYwLCAweDA0LCAweDdCLAotCTB4MDEsIDB4ODAsIDB4MDIsIDB4N0IsIDB4MDAsIDB4RUMsIDB4NUIsIDB4NjAsCi0vKjE4NDAqLzB4MjksIDB4MDUsIDB4NDEsIDB4ODAsIDB4MjgsIDB4QzMsIDB4RTUsIDB4NDEsCi0JMHg5NSwgMHgzOSwgMHhDMywgMHg5RiwgMHhFRSwgMHgxMiwgMHgwNywgMHg2QiwKLS8qMTg1MCovMHg0MCwgMHgwNCwgMHg3RiwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3RiwgMHgwMCwKLQkweEU1LCAweDQxLCAweDYwLCAweDA0LCAweDdFLCAweDAxLCAweDgwLCAweDAyLAotLyoxODYwKi8weDdFLCAweDAwLCAweEVGLCAweDVFLCAweDYwLCAweDA0LCAweDE1LCAweDQxLAotCTB4ODAsIDB4MDMsIDB4ODUsIDB4MzksIDB4NDEsIDB4ODUsIDB4M0EsIDB4NDAsCi0vKjE4NzAqLzB4MjIsIDB4RTUsIDB4RTIsIDB4MzAsIDB4RTQsIDB4NjAsIDB4RTUsIDB4RTEsCi0JMHgzMCwgMHhFMiwgMHg1QiwgMHhFNSwgMHgwOSwgMHg3MCwgMHgwNCwgMHg3RiwKLS8qMTg4MCovMHgwMSwgMHg4MCwgMHgwMiwgMHg3RiwgMHgwMCwgMHhFNSwgMHgwOCwgMHg3MCwKLQkweDA0LCAweDdFLCAweDAxLCAweDgwLCAweDAyLCAweDdFLCAweDAwLCAweEVFLAotLyoxODkwKi8weDVGLCAweDYwLCAweDQzLCAweDUzLCAweEY5LCAweEY4LCAweEU1LCAweEUyLAotCTB4MzAsIDB4RTQsIDB4M0IsIDB4RTUsIDB4RTEsIDB4MzAsIDB4RTIsIDB4MkUsCi0vKjE4QTAqLzB4NDMsIDB4RkEsIDB4MDIsIDB4NTMsIDB4RkEsIDB4RkIsIDB4RTQsIDB4RjUsCi0JMHgxMCwgMHg5MCwgMHg5NCwgMHg3MCwgMHhFNSwgMHgxMCwgMHhGMCwgMHhFNSwKLS8qMThCMCovMHhFMSwgMHgzMCwgMHhFMiwgMHhFNywgMHg5MCwgMHg5NCwgMHg3MCwgMHhFMCwKLQkweDY1LCAweDEwLCAweDYwLCAweDAzLCAweDQzLCAweEZBLCAweDA0LCAweDA1LAotLyoxOEMwKi8weDEwLCAweDkwLCAweDk0LCAweDcwLCAweEU1LCAweDEwLCAweEYwLCAweDcwLAotCTB4RTYsIDB4MTIsIDB4MDAsIDB4MDYsIDB4ODAsIDB4RTEsIDB4NTMsIDB4RkEsCi0vKjE4RDAqLzB4RkQsIDB4NTMsIDB4RkEsIDB4RkIsIDB4ODAsIDB4QzAsIDB4MjIsIDB4OEYsCi0JMHg1NCwgMHgxMiwgMHgwMCwgMHgwNiwgMHhFNSwgMHhFMSwgMHgzMCwgMHhFMCwKLS8qMThFMCovMHgwNCwgMHg3RiwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3RiwgMHgwMCwgMHhFNSwKLQkweDdFLCAweEQzLCAweDk0LCAweDA1LCAweDQwLCAweDA0LCAweDdFLCAweDAxLAotLyoxOEYwKi8weDgwLCAweDAyLCAweDdFLCAweDAwLCAweEVFLCAweDRGLCAweDYwLCAweDNELAotCTB4ODUsIDB4NTQsIDB4MTEsIDB4RTUsIDB4RTIsIDB4MjAsIDB4RTEsIDB4MzIsCi0vKjE5MDAqLzB4NzQsIDB4Q0UsIDB4MTIsIDB4MUEsIDB4MDUsIDB4MzAsIDB4RTcsIDB4MDQsCi0JMHg3RCwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3RCwgMHgwMCwgMHg4RiwgMHg4MiwKLS8qMTkxMCovMHg4RSwgMHg4MywgMHhFMCwgMHgzMCwgMHhFNiwgMHgwNCwgMHg3RiwgMHgwMSwKLQkweDgwLCAweDAyLCAweDdGLCAweDAwLCAweEVGLCAweDVELCAweDcwLCAweDE1LAotLyoxOTIwKi8weDEyLCAweDE1LCAweEM2LCAweDc0LCAweENFLCAweDEyLCAweDFBLCAweDA1LAotCTB4MzAsIDB4RTYsIDB4MDcsIDB4RTAsIDB4NDQsIDB4ODAsIDB4RjAsIDB4NDMsCi0vKjE5MzAqLzB4RjksIDB4ODAsIDB4MTIsIDB4MTgsIDB4NzEsIDB4MjIsIDB4MTIsIDB4MEUsCi0JMHg0NCwgMHhFNSwgMHgxNiwgMHgyNSwgMHhFMCwgMHgyNSwgMHhFMCwgMHgyNCwKLS8qMTk0MCovMHhCMCwgMHhGNSwgMHg4MiwgMHhFNCwgMHgzNCwgMHgxQSwgMHhGNSwgMHg4MywKLQkweEU0LCAweDkzLCAweEY1LCAweDBGLCAweEU1LCAweDE2LCAweDI1LCAweEUwLAotLyoxOTUwKi8weDI1LCAweEUwLCAweDI0LCAweEIxLCAweEY1LCAweDgyLCAweEU0LCAweDM0LAotCTB4MUEsIDB4RjUsIDB4ODMsIDB4RTQsIDB4OTMsIDB4RjUsIDB4MEUsIDB4MTIsCi0vKjE5NjAqLzB4MEUsIDB4NjUsIDB4RjUsIDB4MTAsIDB4RTUsIDB4MEYsIDB4NTQsIDB4RjAsCi0JMHgxMiwgMHgwRSwgMHgxNywgMHg3NSwgMHg4MywgMHg4QywgMHhFRiwgMHhGMCwKLS8qMTk3MCovMHhFNSwgMHgwRiwgMHgzMCwgMHhFMCwgMHgwQywgMHgxMiwgMHgwRSwgMHgwNCwKLQkweDc1LCAweDgzLCAweDg2LCAweEUwLCAweDQ0LCAweDQwLCAweEYwLCAweDgwLAotLyoxOTgwKi8weDBBLCAweDEyLCAweDBFLCAweDA0LCAweDc1LCAweDgzLCAweDg2LCAweEUwLAotCTB4NTQsIDB4QkYsIDB4RjAsIDB4MTIsIDB4MEUsIDB4OTEsIDB4NzUsIDB4ODMsCi0vKjE5OTAqLzB4ODIsIDB4RTUsIDB4MEUsIDB4RjAsIDB4MjIsIDB4N0YsIDB4MDUsIDB4MTIsCi0JMHgxNywgMHgzMSwgMHgxMiwgMHgwRSwgMHgwNCwgMHgxMiwgMHgwRSwgMHgzMywKLS8qMTlBMCovMHg3NCwgMHgwMiwgMHhGMCwgMHg3NCwgMHg4RSwgMHhGRSwgMHgxMiwgMHgwRSwKLQkweDA0LCAweDEyLCAweDBFLCAweDBCLCAweEVGLCAweEYwLCAweDc1LCAweDE1LAotLyoxOUIwKi8weDcwLCAweDEyLCAweDBGLCAweEY3LCAweDIwLCAweDM0LCAweDA1LCAweDc1LAotCTB4MTUsIDB4MTAsIDB4ODAsIDB4MDMsIDB4NzUsIDB4MTUsIDB4NTAsIDB4MTIsCi0vKjE5QzAqLzB4MEYsIDB4RjcsIDB4MjAsIDB4MzQsIDB4MDQsIDB4NzQsIDB4MTAsIDB4ODAsCi0JMHgwMiwgMHg3NCwgMHhGMCwgMHgyNSwgMHgxNSwgMHhGNSwgMHgxNSwgMHgxMiwKLS8qMTlEMCovMHgwRSwgMHgyMSwgMHhFRiwgMHhGMCwgMHgxMiwgMHgxMCwgMHg5MSwgMHgyMCwKLQkweDM0LCAweDE3LCAweEU1LCAweDE1LCAweDY0LCAweDMwLCAweDYwLCAweDBDLAotLyoxOUUwKi8weDc0LCAweDEwLCAweDI1LCAweDE1LCAweEY1LCAweDE1LCAweEI0LCAweDgwLAotCTB4MDMsIDB4RTQsIDB4RjUsIDB4MTUsIDB4MTIsIDB4MEUsIDB4MjEsIDB4RUYsCi0vKjE5RjAqLzB4RjAsIDB4MjIsIDB4RjAsIDB4RTUsIDB4MEIsIDB4MjUsIDB4RTAsIDB4MjUsCi0JMHhFMCwgMHgyNCwgMHg4MiwgMHhGNSwgMHg4MiwgMHhFNCwgMHgzNCwgMHgwNywKLS8qMUEwMCovMHhGNSwgMHg4MywgMHgyMiwgMHg3NCwgMHg4OCwgMHhGRSwgMHhFNSwgMHgwOCwKLQkweDQ0LCAweDA3LCAweEZGLCAweEY1LCAweDgyLCAweDhFLCAweDgzLCAweEUwLAotLyoxQTEwKi8weDIyLCAweEYwLCAweEU1LCAweDA4LCAweDQ0LCAweDA3LCAweEY1LCAweDgyLAotCTB4MjIsIDB4RjAsIDB4RTAsIDB4NTQsIDB4QzAsIDB4OEYsIDB4ODIsIDB4OEUsCi0vKjFBMjAqLzB4ODMsIDB4RjAsIDB4MjIsIDB4RUYsIDB4NDQsIDB4MDcsIDB4RjUsIDB4ODIsCi0JMHg3NSwgMHg4MywgMHg4NiwgMHhFMCwgMHg1NCwgMHgxMCwgMHhEMywgMHg5NCwKLS8qMUEzMCovMHgwMCwgMHgyMiwgMHhGMCwgMHg5MCwgMHgwNywgMHgxNSwgMHhFMCwgMHgwNCwKLQkweEYwLCAweDIyLCAweDQ0LCAweDA2LCAweEY1LCAweDgyLCAweDc1LCAweDgzLAotLyoxQTQwKi8weDlFLCAweEUwLCAweDIyLCAweEZFLCAweEVGLCAweDQ0LCAweDA3LCAweEY1LAotCTB4ODIsIDB4OEUsIDB4ODMsIDB4RTAsIDB4MjIsIDB4RTQsIDB4OTAsIDB4MDcsCi0vKjFBNTAqLzB4MkEsIDB4RjAsIDB4QTMsIDB4RjAsIDB4MTIsIDB4MDcsIDB4MkEsIDB4NzUsCi0JMHg4MywgMHg4MiwgMHhFMCwgMHg1NCwgMHg3RiwgMHgxMiwgMHgwNywgMHgyOSwKLS8qMUE2MCovMHhFMCwgMHg0NCwgMHg4MCwgMHhGMCwgMHgxMiwgMHgxMCwgMHhGQywgMHgxMiwKLQkweDA4LCAweDFGLCAweDc1LCAweDgzLCAweEEwLCAweEUwLCAweDIwLCAweEUwLAotLyoxQTcwKi8weDFBLCAweDkwLCAweDA3LCAweDJCLCAweEUwLCAweDA0LCAweEYwLCAweDcwLAotCTB4MDYsIDB4OTAsIDB4MDcsIDB4MkEsIDB4RTAsIDB4MDQsIDB4RjAsIDB4OTAsCi0vKjFBODAqLzB4MDcsIDB4MkEsIDB4RTAsIDB4QjQsIDB4MTAsIDB4RTEsIDB4QTMsIDB4RTAsCi0JMHhCNCwgMHgwMCwgMHhEQywgMHhFRSwgMHg0NCwgMHhBNiwgMHhGQywgMHhFRiwKLS8qMUE5MCovMHg0NCwgMHgwNywgMHhGNSwgMHg4MiwgMHg4QywgMHg4MywgMHhFMCwgMHhGNSwKLQkweDMyLCAweEVFLCAweDQ0LCAweEE4LCAweEZFLCAweEVGLCAweDQ0LCAweDA3LAotLyoxQUEwKi8weEY1LCAweDgyLCAweDhFLCAweDgzLCAweEUwLCAweEY1LCAweDMzLCAweDIyLAotCTB4MDEsIDB4MjAsIDB4MTEsIDB4MDAsIDB4MDQsIDB4MjAsIDB4MDAsIDB4OTAsCi0vKjFBQjAqLzB4MDAsIDB4MjAsIDB4MEYsIDB4OTIsIDB4MDAsIDB4MjEsIDB4MEYsIDB4OTQsCi0JMHgwMCwgMHgyMiwgMHgwRiwgMHg5NiwgMHgwMCwgMHgyMywgMHgwRiwgMHg5OCwKLS8qMUFDMCovMHgwMCwgMHgyNCwgMHgwRiwgMHg5QSwgMHgwMCwgMHgyNSwgMHgwRiwgMHg5QywKLQkweDAwLCAweDI2LCAweDBGLCAweDlFLCAweDAwLCAweDI3LCAweDBGLCAweEEwLAotLyoxQUQwKi8weDAxLCAweDIwLCAweDAxLCAweEEyLCAweDAxLCAweDIxLCAweDAxLCAweEE0LAotCTB4MDEsIDB4MjIsIDB4MDEsIDB4QTYsIDB4MDEsIDB4MjMsIDB4MDEsIDB4QTgsCi0vKjFBRTAqLzB4MDEsIDB4MjQsIDB4MDEsIDB4QUEsIDB4MDEsIDB4MjUsIDB4MDEsIDB4QUMsCi0JMHgwMSwgMHgyNiwgMHgwMSwgMHhBRSwgMHgwMSwgMHgyNywgMHgwMSwgMHhCMCwKLS8qMUFGMCovMHgwMSwgMHgyOCwgMHgwMSwgMHhCNCwgMHgwMCwgMHgyOCwgMHgwRiwgMHhCNiwKLQkweDQwLCAweDI4LCAweDBGLCAweEI4LCAweDYxLCAweDI4LCAweDAxLCAweENCLAotLyoxQjAwKi8weEVGLCAweENCLCAweENBLCAweEVFLCAweENBLCAweDdGLCAweDAxLCAweEU0LAotCTB4RkQsIDB4RUIsIDB4NEEsIDB4NzAsIDB4MjQsIDB4RTUsIDB4MDgsIDB4RjUsCi0vKjFCMTAqLzB4ODIsIDB4NzQsIDB4QjYsIDB4MTIsIDB4MDgsIDB4MjksIDB4RTUsIDB4MDgsCi0JMHhGNSwgMHg4MiwgMHg3NCwgMHhCOCwgMHgxMiwgMHgwOCwgMHgyOSwgMHhFNSwKLS8qMUIyMCovMHgwOCwgMHhGNSwgMHg4MiwgMHg3NCwgMHhCQSwgMHgxMiwgMHgwOCwgMHgyOSwKLQkweDdFLCAweDAwLCAweDdDLCAweDAwLCAweDEyLCAweDBBLCAweEZGLCAweDgwLAotLyoxQjMwKi8weDEyLCAweDkwLCAweDA3LCAweDI2LCAweDEyLCAweDA3LCAweDM1LCAweEU1LAotCTB4NDEsIDB4RjAsIDB4OTAsIDB4MDcsIDB4MjQsIDB4MTIsIDB4MDcsIDB4MzUsCi0vKjFCNDAqLzB4RTUsIDB4NDAsIDB4RjAsIDB4MTIsIDB4MDcsIDB4MkEsIDB4NzUsIDB4ODMsCi0JMHg4RSwgMHhFNCwgMHgxMiwgMHgwNywgMHgyOSwgMHg3NCwgMHgwMSwgMHgxMiwKLS8qMUI1MCovMHgwNywgMHgyOSwgMHhFNCwgMHhGMCwgMHgyMiwgMHhFNCwgMHhGNSwgMHgyNiwKLQkweEY1LCAweDI3LCAweDUzLCAweEUxLCAweEZFLCAweEY1LCAweDJBLCAweDc1LAotLyoxQjYwKi8weDJCLCAweDAxLCAweEY1LCAweDA4LCAweDdGLCAweDAxLCAweDEyLCAweDE3LAotCTB4MzEsIDB4MzAsIDB4MzAsIDB4MUMsIDB4OTAsIDB4MUEsIDB4QTksIDB4RTQsCi0vKjFCNzAqLzB4OTMsIDB4RjUsIDB4MTAsIDB4OTAsIDB4MUYsIDB4RjksIDB4RTQsIDB4OTMsCi0JMHhGNSwgMHgxMCwgMHg5MCwgMHgwMCwgMHg0MSwgMHhFNCwgMHg5MywgMHhGNSwKLS8qMUI4MCovMHgxMCwgMHg5MCwgMHgxRSwgMHhDQSwgMHhFNCwgMHg5MywgMHhGNSwgMHgxMCwKLQkweDdGLCAweDAyLCAweDEyLCAweDE3LCAweDMxLCAweDEyLCAweDBGLCAweDU0LAotLyoxQjkwKi8weDdGLCAweDAzLCAweDEyLCAweDE3LCAweDMxLCAweDEyLCAweDAwLCAweDA2LAotCTB4RTUsIDB4RTIsIDB4MzAsIDB4RTcsIDB4MDksIDB4MTIsIDB4MTAsIDB4MDAsCi0vKjFCQTAqLzB4MzAsIDB4MzAsIDB4MDMsIDB4MTIsIDB4MTEsIDB4MDAsIDB4MDIsIDB4MDAsCi0JMHg0NywgMHgxMiwgMHgwOCwgMHgxRiwgMHg3NSwgMHg4MywgMHhEMCwgMHhFMCwKLS8qMUJCMCovMHhDNCwgMHg1NCwgMHgwRiwgMHhGRCwgMHg3NSwgMHg0MywgMHgwMSwgMHg3NSwKLQkweDQ0LCAweEZGLCAweDEyLCAweDA4LCAweEFBLCAweDc0LCAweDA0LCAweEYwLAotLyoxQkMwKi8weDc1LCAweDNCLCAweDAxLCAweEVELCAweDE0LCAweDYwLCAweDBDLCAweDE0LAotCTB4NjAsIDB4MEIsIDB4MTQsIDB4NjAsIDB4MEYsIDB4MjQsIDB4MDMsIDB4NzAsCi0vKjFCRDAqLzB4MEIsIDB4ODAsIDB4MDksIDB4ODAsIDB4MDAsIDB4MTIsIDB4MDgsIDB4QTcsCi0JMHgwNCwgMHhGMCwgMHg4MCwgMHgwNiwgMHgxMiwgMHgwOCwgMHhBNywgMHg3NCwKLS8qMUJFMCovMHgwNCwgMHhGMCwgMHhFRSwgMHg0NCwgMHg4MiwgMHhGRSwgMHhFRiwgMHg0NCwKLQkweDA3LCAweEY1LCAweDgyLCAweDhFLCAweDgzLCAweEU1LCAweDQ1LCAweDEyLAotLyoxQkYwKi8weDA4LCAweEJFLCAweDc1LCAweDgzLCAweDgyLCAweEU1LCAweDMxLCAweEYwLAotCTB4MDIsIDB4MTEsIDB4NEMsIDB4OEUsIDB4NjAsIDB4OEYsIDB4NjEsIDB4MTIsCi0vKjFDMDAqLzB4MUUsIDB4QTUsIDB4RTQsIDB4RkYsIDB4Q0UsIDB4RUQsIDB4Q0UsIDB4RUUsCi0JMHhEMywgMHg5NSwgMHg2MSwgMHhFNSwgMHg2MCwgMHgxMiwgMHgwNywgMHg2QiwKLS8qMUMxMCovMHg0MCwgMHgzOSwgMHg3NCwgMHgyMCwgMHgyRSwgMHhGNSwgMHg4MiwgMHhFNCwKLQkweDM0LCAweDAzLCAweEY1LCAweDgzLCAweEUwLCAweDcwLCAweDAzLCAweEZGLAotLyoxQzIwKi8weDgwLCAweDI2LCAweDEyLCAweDA4LCAweEUyLCAweEZELCAweEMzLCAweDlGLAotCTB4NDAsIDB4MUUsIDB4Q0YsIDB4RUQsIDB4Q0YsIDB4RUIsIDB4NEEsIDB4NzAsCi0vKjFDMzAqLzB4MEIsIDB4OEQsIDB4NDIsIDB4MTIsIDB4MDgsIDB4RUUsIDB4RjUsIDB4NDEsCi0JMHg4RSwgMHg0MCwgMHg4MCwgMHgwQywgMHgxMiwgMHgwOCwgMHhFMiwgMHhGNSwKLS8qMUM0MCovMHgzOCwgMHgxMiwgMHgwOCwgMHhFRSwgMHhGNSwgMHgzOSwgMHg4RSwgMHgzQSwKLQkweDFFLCAweDgwLCAweEJDLCAweDIyLCAweDc1LCAweDU4LCAweDAxLCAweEU1LAotLyoxQzUwKi8weDM1LCAweDcwLCAweDBDLCAweDEyLCAweDA3LCAweENDLCAweEUwLCAweEY1LAotCTB4NEEsIDB4MTIsIDB4MDcsIDB4RDgsIDB4RTAsIDB4RjUsIDB4NEMsIDB4RTUsCi0vKjFDNjAqLzB4MzUsIDB4QjQsIDB4MDQsIDB4MEMsIDB4MTIsIDB4MDcsIDB4RTQsIDB4RTAsCi0JMHhGNSwgMHg0QSwgMHgxMiwgMHgwNywgMHhGMCwgMHhFMCwgMHhGNSwgMHg0QywKLS8qMUM3MCovMHhFNSwgMHgzNSwgMHhCNCwgMHgwMSwgMHgwNCwgMHg3RiwgMHgwMSwgMHg4MCwKLQkweDAyLCAweDdGLCAweDAwLCAweEU1LCAweDM1LCAweEI0LCAweDAyLCAweDA0LAotLyoxQzgwKi8weDdFLCAweDAxLCAweDgwLCAweDAyLCAweDdFLCAweDAwLCAweEVFLCAweDRGLAotCTB4NjAsIDB4MEMsIDB4MTIsIDB4MDcsIDB4RkMsIDB4RTAsIDB4RjUsIDB4NEEsCi0vKjFDOTAqLzB4MTIsIDB4MDgsIDB4MDgsIDB4RTAsIDB4RjUsIDB4NEMsIDB4ODUsIDB4NDEsCi0JMHg0OSwgMHg4NSwgMHg0MCwgMHg0QiwgMHgyMiwgMHg3NSwgMHg1QiwgMHgwMSwKLS8qMUNBMCovMHg5MCwgMHgwNywgMHgyNCwgMHgxMiwgMHgwNywgMHgzNSwgMHhFMCwgMHg1NCwKLQkweDFGLCAweEZGLCAweEQzLCAweDk0LCAweDAyLCAweDUwLCAweDA0LCAweDhGLAotLyoxQ0IwKi8weDU4LCAweDgwLCAweDA1LCAweEVGLCAweDI0LCAweEZFLCAweEY1LCAweDU4LAotCTB4RUYsIDB4QzMsIDB4OTQsIDB4MTgsIDB4NDAsIDB4MDUsIDB4NzUsIDB4NTksCi0vKjFDQzAqLzB4MTgsIDB4ODAsIDB4MDQsIDB4RUYsIDB4MDQsIDB4RjUsIDB4NTksIDB4ODUsCi0JMHg0MywgMHg1QSwgMHhBRiwgMHg1OCwgMHg3RSwgMHgwMCwgMHhBRCwgMHg1OSwKLS8qMUNEMCovMHg3QywgMHgwMCwgMHhBQiwgMHg1QiwgMHg3QSwgMHgwMCwgMHgxMiwgMHgxNSwKLQkweDQxLCAweEFGLCAweDVBLCAweDdFLCAweDAwLCAweDEyLCAweDE4LCAweDBBLAotLyoxQ0UwKi8weEFGLCAweDVCLCAweDdFLCAweDAwLCAweDAyLCAweDFBLCAweEZGLCAweEU1LAotCTB4RTIsIDB4MzAsIDB4RTcsIDB4MEUsIDB4MTIsIDB4MTAsIDB4MDMsIDB4QzIsCi0vKjFDRjAqLzB4MzAsIDB4MzAsIDB4MzAsIDB4MDMsIDB4MTIsIDB4MTAsIDB4RkYsIDB4MjAsCi0JMHgzMywgMHgyOCwgMHhFNSwgMHhFNywgMHgzMCwgMHhFNywgMHgwNSwgMHgxMiwKLS8qMUQwMCovMHgwRSwgMHhBMiwgMHg4MCwgMHgwRCwgMHhFNSwgMHhGRSwgMHhDMywgMHg5NCwKLQkweDIwLCAweDUwLCAweDA2LCAweDEyLCAweDBFLCAweEEyLCAweDQzLCAweEY5LAotLyoxRDEwKi8weDA4LCAweEU1LCAweEYyLCAweDMwLCAweEU3LCAweDAzLCAweDUzLCAweEY5LAotCTB4N0YsIDB4RTUsIDB4RjEsIDB4NTQsIDB4NzAsIDB4RDMsIDB4OTQsIDB4MDAsCi0vKjFEMjAqLzB4NTAsIDB4RDgsIDB4MjIsIDB4MTIsIDB4MEUsIDB4MDQsIDB4NzUsIDB4ODMsCi0JMHg4MCwgMHhFNCwgMHhGMCwgMHhFNSwgMHgwOCwgMHg0NCwgMHgwNywgMHgxMiwKLS8qMUQzMCovMHgwRCwgMHhGRCwgMHg3NSwgMHg4MywgMHg4NCwgMHgxMiwgMHgwRSwgMHgwMiwKLQkweDc1LCAweDgzLCAweDg2LCAweDEyLCAweDBFLCAweDAyLCAweDc1LCAweDgzLAotLyoxRDQwKi8weDhDLCAweEUwLCAweDU0LCAweEYzLCAweDEyLCAweDBFLCAweDAzLCAweDc1LAotCTB4ODMsIDB4OEUsIDB4MTIsIDB4MEUsIDB4MDIsIDB4NzUsIDB4ODMsIDB4OTQsCi0vKjFENTAqLzB4RTAsIDB4NTQsIDB4RkIsIDB4RjAsIDB4MjIsIDB4MTIsIDB4MDcsIDB4MkEsCi0JMHg3NSwgMHg4MywgMHg4RSwgMHhFNCwgMHgxMiwgMHgwNywgMHgyOSwgMHg3NCwKLS8qMUQ2MCovMHgwMSwgMHgxMiwgMHgwNywgMHgyOSwgMHhFNCwgMHgxMiwgMHgwOCwgMHhCRSwKLQkweDc1LCAweDgzLCAweDhDLCAweEUwLCAweDQ0LCAweDIwLCAweDEyLCAweDA4LAotLyoxRDcwKi8weEJFLCAweEUwLCAweDU0LCAweERGLCAweEYwLCAweDc0LCAweDg0LCAweDg1LAotCTB4MDgsIDB4ODIsIDB4RjUsIDB4ODMsIDB4RTAsIDB4NTQsIDB4N0YsIDB4RjAsCi0vKjFEODAqLzB4RTAsIDB4NDQsIDB4ODAsIDB4RjAsIDB4MjIsIDB4NzUsIDB4NTYsIDB4MDEsCi0JMHhFNCwgMHhGRCwgMHhGNSwgMHg1NywgMHhBRiwgMHgzNSwgMHhGRSwgMHhGQywKLS8qMUQ5MCovMHgxMiwgMHgwOSwgMHgxNSwgMHgxMiwgMHgxQywgMHg5RCwgMHgxMiwgMHgxRSwKLQkweDdBLCAweDEyLCAweDFDLCAweDRDLCAweEFGLCAweDU3LCAweDdFLCAweDAwLAotLyoxREEwKi8weEFELCAweDU2LCAweDdDLCAweDAwLCAweDEyLCAweDA0LCAweDQ0LCAweEFGLAotCTB4NTYsIDB4N0UsIDB4MDAsIDB4MDIsIDB4MTEsIDB4RUUsIDB4NzUsIDB4NTYsCi0vKjFEQjAqLzB4MDEsIDB4RTQsIDB4RkQsIDB4RjUsIDB4NTcsIDB4QUYsIDB4MzUsIDB4RkUsCi0JMHhGQywgMHgxMiwgMHgwOSwgMHgxNSwgMHgxMiwgMHgxQywgMHg5RCwgMHgxMiwKLS8qMURDMCovMHgxRSwgMHg3QSwgMHgxMiwgMHgxQywgMHg0QywgMHhBRiwgMHg1NywgMHg3RSwKLQkweDAwLCAweEFELCAweDU2LCAweDdDLCAweDAwLCAweDEyLCAweDA0LCAweDQ0LAotLyoxREQwKi8weEFGLCAweDU2LCAweDdFLCAweDAwLCAweDAyLCAweDExLCAweEVFLCAweEU0LAotCTB4RjUsIDB4MTYsIDB4MTIsIDB4MEUsIDB4NDQsIDB4RkUsIDB4RTUsIDB4MDgsCi0vKjFERTAqLzB4NDQsIDB4MDUsIDB4RkYsIDB4MTIsIDB4MEUsIDB4NjUsIDB4OEYsIDB4ODIsCi0JMHg4RSwgMHg4MywgMHhGMCwgMHgwNSwgMHgxNiwgMHhFNSwgMHgxNiwgMHhDMywKLS8qMURGMCovMHg5NCwgMHgxNCwgMHg0MCwgMHhFNiwgMHhFNSwgMHgwOCwgMHgxMiwgMHgwRSwKLQkweDJCLCAweEU0LCAweEYwLCAweDIyLCAweEU0LCAweEY1LCAweDU4LCAweEY1LAotLyoxRTAwKi8weDU5LCAweEY1LCAweDVBLCAweEZGLCAweEZFLCAweEFELCAweDU4LCAweEZDLAotCTB4MTIsIDB4MDksIDB4MTUsIDB4N0YsIDB4MDQsIDB4N0UsIDB4MDAsIDB4QUQsCi0vKjFFMTAqLzB4NTgsIDB4N0MsIDB4MDAsIDB4MTIsIDB4MDksIDB4MTUsIDB4N0YsIDB4MDIsCi0JMHg3RSwgMHgwMCwgMHhBRCwgMHg1OCwgMHg3QywgMHgwMCwgMHgwMiwgMHgwOSwKLS8qMUUyMCovMHgxNSwgMHhFNSwgMHgzQywgMHgyNSwgMHgzRSwgMHhGQywgMHhFNSwgMHg0MiwKLQkweDI0LCAweDAwLCAweEZCLCAweEU0LCAweDMzLCAweEZBLCAweEVDLCAweEMzLAotLyoxRTMwKi8weDlCLCAweEVBLCAweDEyLCAweDA3LCAweDZCLCAweDQwLCAweDBCLCAweDhDLAotCTB4NDIsIDB4RTUsIDB4M0QsIDB4MjUsIDB4M0YsIDB4RjUsIDB4NDEsIDB4OEYsCi0vKjFFNDAqLzB4NDAsIDB4MjIsIDB4MTIsIDB4MDksIDB4MEIsIDB4MjIsIDB4NzQsIDB4ODQsCi0JMHhGNSwgMHgxOCwgMHg4NSwgMHgwOCwgMHgxOSwgMHg4NSwgMHgxOSwgMHg4MiwKLS8qMUU1MCovMHg4NSwgMHgxOCwgMHg4MywgMHhFMCwgMHg1NCwgMHg3RiwgMHhGMCwgMHhFMCwKLQkweDQ0LCAweDgwLCAweEYwLCAweEUwLCAweDQ0LCAweDgwLCAweEYwLCAweDIyLAotLyoxRTYwKi8weEVGLCAweDRFLCAweDcwLCAweDBCLCAweDEyLCAweDA3LCAweDJBLCAweDc1LAotCTB4ODMsIDB4RDIsIDB4RTAsIDB4NTQsIDB4REYsIDB4RjAsIDB4MjIsIDB4MTIsCi0vKjFFNzAqLzB4MDcsIDB4MkEsIDB4NzUsIDB4ODMsIDB4RDIsIDB4RTAsIDB4NDQsIDB4MjAsCi0JMHhGMCwgMHgyMiwgMHg3NSwgMHg1OCwgMHgwMSwgMHg5MCwgMHgwNywgMHgyNiwKLS8qMUU4MCovMHgxMiwgMHgwNywgMHgzNSwgMHhFMCwgMHg1NCwgMHgzRiwgMHhGNSwgMHg0MSwKLQkweDEyLCAweDA3LCAweDMyLCAweEUwLCAweDU0LCAweDNGLCAweEY1LCAweDQwLAotLyoxRTkwKi8weDIyLCAweDc1LCAweDU2LCAweDAyLCAweEU0LCAweEY1LCAweDU3LCAweDEyLAotCTB4MUQsIDB4RkMsIDB4QUYsIDB4NTcsIDB4N0UsIDB4MDAsIDB4QUQsIDB4NTYsCi0vKjFFQTAqLzB4N0MsIDB4MDAsIDB4MDIsIDB4MDQsIDB4NDQsIDB4RTQsIDB4RjUsIDB4NDIsCi0JMHhGNSwgMHg0MSwgMHhGNSwgMHg0MCwgMHhGNSwgMHgzOCwgMHhGNSwgMHgzOSwKLS8qMUVCMCovMHhGNSwgMHgzQSwgMHgyMiwgMHhFRiwgMHg1NCwgMHgwNywgMHhGRiwgMHhFNSwKLQkweEY5LCAweDU0LCAweEY4LCAweDRGLCAweEY1LCAweEY5LCAweDIyLCAweDdGLAotLyoxRUMwKi8weDAxLCAweEU0LCAweEZFLCAweDBGLCAweDBFLCAweEJFLCAweEZGLCAweEZCLAotCTB4MjIsIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDEsIDB4MDQsIDB4MjAsIDB4MDAsCi0vKjFFRDAqLzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLS8qMUVFMCovMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotLyoxRUYwKi8weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0vKjFGMDAqLzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLS8qMUYxMCovMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotLyoxRjIwKi8weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0vKjFGMzAqLzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLS8qMUY0MCovMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotLyoxRjUwKi8weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0vKjFGNjAqLzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLS8qMUY3MCovMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotLyoxRjgwKi8weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0vKjFGOTAqLzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLS8qMUZBMCovMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotLyoxRkIwKi8weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0vKjFGQzAqLzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLS8qMUZEMCovMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotLyoxRkUwKi8weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0vKjFGRjAqLzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMSwgMHgyMCwgMHgxMSwgMHgwMCwgMHgwNCwgMHgyMCwgMHgwMCwgMHg4MQotfTsKLQotaW50IHFpYl9zZDcyMjBfaWJfbG9hZChzdHJ1Y3QgcWliX2RldmRhdGEgKmRkKQotewotCXJldHVybiBxaWJfc2Q3MjIwX3Byb2dfbGQoZGQsIElCXzcyMjBfU0VSREVTLCBxaWJfc2Q3MjIwX2liX2ltZywKLQkJc2l6ZW9mKHFpYl9zZDcyMjBfaWJfaW1nKSwgMCk7Ci19Ci0KLWludCBxaWJfc2Q3MjIwX2liX3ZmeShzdHJ1Y3QgcWliX2RldmRhdGEgKmRkKQotewotCXJldHVybiBxaWJfc2Q3MjIwX3Byb2dfdmZ5KGRkLCBJQl83MjIwX1NFUkRFUywgcWliX3NkNzIyMF9pYl9pbWcsCi0JCXNpemVvZihxaWJfc2Q3MjIwX2liX2ltZyksIDApOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdHguYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3R4LmMKaW5kZXggZjdlYjFkZC4uYWYzMDIzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdHguYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl90eC5jCkBAIC0zNDAsOSArMzQwLDEzIEBACiAJCWlmIChpIDwgZGQtPnBpb2JjbnQyaykKIAkJCWJ1ZiA9ICh1MzIgX19pb21lbSAqKShkZC0+cGlvMmtiYXNlICsKIAkJCQlpICogZGQtPnBhbGlnbik7Ci0JCWVsc2UKKwkJZWxzZSBpZiAoaSA8IGRkLT5waW9iY250MmsgKyBkZC0+cGlvYmNudDRrIHx8ICFkZC0+cGlvdmwxNWJhc2UpCiAJCQlidWYgPSAodTMyIF9faW9tZW0gKikoZGQtPnBpbzRrYmFzZSArCiAJCQkJKGkgLSBkZC0+cGlvYmNudDJrKSAqIGRkLT5hbGlnbjRrKTsKKwkJZWxzZQorCQkJYnVmID0gKHUzMiBfX2lvbWVtICopKGRkLT5waW92bDE1YmFzZSArCisJCQkJKGkgLSAoZGQtPnBpb2JjbnQyayArIGRkLT5waW9iY250NGspKSAqCisJCQkJZGQtPmFsaWduNGspOwogCQlpZiAocGJ1Zm51bSkKIAkJCSpwYnVmbnVtID0gaTsKIAkJZGQtPnVwZF9waW9fc2hhZG93ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfZXRodG9vbC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9ldGh0b29sLmMKaW5kZXggNDBlODU4NC4uMWExNjU3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9ldGh0b29sLmMKQEAgLTE0Nyw2ICsxNDcsMTEgQEAKIAlkYXRhW2luZGV4KytdID0gcHJpdi0+bHJvLmxyb19tZ3Iuc3RhdHMubm9fZGVzYzsKIH0KIAorc3RhdGljIGludCBpcG9pYl9zZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZsYWdzKQoreworCXJldHVybiBldGh0b29sX29wX3NldF9mbGFncyhkZXYsIGZsYWdzLCBFVEhfRkxBR19MUk8pOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlwb2liX2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSBpcG9pYl9nZXRfZHJ2aW5mbywKIAkuZ2V0X3J4X2NzdW0JCT0gaXBvaWJfZ2V0X3J4X2NzdW0sCkBAIC0xNTQsNyArMTU5LDcgQEAKIAkuZ2V0X2NvYWxlc2NlCQk9IGlwb2liX2dldF9jb2FsZXNjZSwKIAkuc2V0X2NvYWxlc2NlCQk9IGlwb2liX3NldF9jb2FsZXNjZSwKIAkuZ2V0X2ZsYWdzCQk9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAotCS5zZXRfZmxhZ3MJCT0gZXRodG9vbF9vcF9zZXRfZmxhZ3MsCisJLnNldF9mbGFncwkJPSBpcG9pYl9zZXRfZmxhZ3MsCiAJLmdldF9zdHJpbmdzCQk9IGlwb2liX2dldF9zdHJpbmdzLAogCS5nZXRfc3NldF9jb3VudAkJPSBpcG9pYl9nZXRfc3NldF9jb3VudCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBpcG9pYl9nZXRfZXRodG9vbF9zdGF0cywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKaW5kZXggZGYzZWI4Yy4uYjRiMjI1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKQEAgLTExNjMsNyArMTE2Myw3IEBACiAKIAlyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7CiB9Ci1zdGF0aWMgREVWSUNFX0FUVFIoY3JlYXRlX2NoaWxkLCBTX0lXVUdPLCBOVUxMLCBjcmVhdGVfY2hpbGQpOworc3RhdGljIERFVklDRV9BVFRSKGNyZWF0ZV9jaGlsZCwgU19JV1VTUiwgTlVMTCwgY3JlYXRlX2NoaWxkKTsKIAogc3RhdGljIHNzaXplX3QgZGVsZXRlX2NoaWxkKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTExODMsNyArMTE4Myw3IEBACiAJcmV0dXJuIHJldCA/IHJldCA6IGNvdW50OwogCiB9Ci1zdGF0aWMgREVWSUNFX0FUVFIoZGVsZXRlX2NoaWxkLCBTX0lXVUdPLCBOVUxMLCBkZWxldGVfY2hpbGQpOworc3RhdGljIERFVklDRV9BVFRSKGRlbGV0ZV9jaGlsZCwgU19JV1VTUiwgTlVMTCwgZGVsZXRlX2NoaWxkKTsKIAogaW50IGlwb2liX2FkZF9wa2V5X2F0dHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZXZkZXYuYyBiL2RyaXZlcnMvaW5wdXQvZXZkZXYuYwppbmRleCAyZWU2YzdhLi4wNTRlZGYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9ldmRldi5jCkBAIC0xMCw3ICsxMCw4IEBACiAKICNkZWZpbmUgRVZERVZfTUlOT1JfQkFTRQk2NAogI2RlZmluZSBFVkRFVl9NSU5PUlMJCTMyCi0jZGVmaW5lIEVWREVWX0JVRkZFUl9TSVpFCTY0CisjZGVmaW5lIEVWREVWX01JTl9CVUZGRVJfU0laRQk2NFUKKyNkZWZpbmUgRVZERVZfQlVGX1BBQ0tFVFMJOAogCiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC0yMyw3ICsyNCw2IEBACiAjaW5jbHVkZSAiaW5wdXQtY29tcGF0LmgiCiAKIHN0cnVjdCBldmRldiB7Ci0JaW50IGV4aXN0OwogCWludCBvcGVuOwogCWludCBtaW5vcjsKIAlzdHJ1Y3QgaW5wdXRfaGFuZGxlIGhhbmRsZTsKQEAgLTMzLDE2ICszMywxOCBAQAogCXNwaW5sb2NrX3QgY2xpZW50X2xvY2s7IC8qIHByb3RlY3RzIGNsaWVudF9saXN0ICovCiAJc3RydWN0IG11dGV4IG11dGV4OwogCXN0cnVjdCBkZXZpY2UgZGV2OworCWJvb2wgZXhpc3Q7CiB9OwogCiBzdHJ1Y3QgZXZkZXZfY2xpZW50IHsKLQlzdHJ1Y3QgaW5wdXRfZXZlbnQgYnVmZmVyW0VWREVWX0JVRkZFUl9TSVpFXTsKIAlpbnQgaGVhZDsKIAlpbnQgdGFpbDsKIAlzcGlubG9ja190IGJ1ZmZlcl9sb2NrOyAvKiBwcm90ZWN0cyBhY2Nlc3MgdG8gYnVmZmVyLCBoZWFkIGFuZCB0YWlsICovCiAJc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luYzsKIAlzdHJ1Y3QgZXZkZXYgKmV2ZGV2OwogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwlpbnQgYnVmc2l6ZTsKKwlzdHJ1Y3QgaW5wdXRfZXZlbnQgYnVmZmVyW107CiB9OwogCiBzdGF0aWMgc3RydWN0IGV2ZGV2ICpldmRldl90YWJsZVtFVkRFVl9NSU5PUlNdOwpAQCAtNTIsMTEgKzU0LDE1IEBACiAJCQkgICAgIHN0cnVjdCBpbnB1dF9ldmVudCAqZXZlbnQpCiB7CiAJLyoKLQkgKiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwganVzdCBhY3F1aXJlIHRoZSBsb2NrCisJICogSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsIGp1c3QgYWNxdWlyZSB0aGUgbG9jay4KKwkgKiBNYWtlIHN1cmUgd2UgZG9uJ3QgbGVhdmUgd2l0aCB0aGUgY2xpZW50IGJ1ZmZlcgorCSAqICJlbXB0eSIgYnkgaGF2aW5nIGNsaWVudC0+aGVhZCA9PSBjbGllbnQtPnRhaWwuCiAJICovCiAJc3Bpbl9sb2NrKCZjbGllbnQtPmJ1ZmZlcl9sb2NrKTsKLQljbGllbnQtPmJ1ZmZlcltjbGllbnQtPmhlYWQrK10gPSAqZXZlbnQ7Ci0JY2xpZW50LT5oZWFkICY9IEVWREVWX0JVRkZFUl9TSVpFIC0gMTsKKwlkbyB7CisJCWNsaWVudC0+YnVmZmVyW2NsaWVudC0+aGVhZCsrXSA9ICpldmVudDsKKwkJY2xpZW50LT5oZWFkICY9IGNsaWVudC0+YnVmc2l6ZSAtIDE7CisJfSB3aGlsZSAoY2xpZW50LT5oZWFkID09IGNsaWVudC0+dGFpbCk7CiAJc3Bpbl91bmxvY2soJmNsaWVudC0+YnVmZmVyX2xvY2spOwogCiAJaWYgKGV2ZW50LT50eXBlID09IEVWX1NZTikKQEAgLTI0MiwxMSArMjQ4LDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZXZkZXZfY29tcHV0ZV9idWZmZXJfc2l6ZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJdW5zaWduZWQgaW50IG5fZXZlbnRzID0KKwkJbWF4KGRldi0+aGludF9ldmVudHNfcGVyX3BhY2tldCAqIEVWREVWX0JVRl9QQUNLRVRTLAorCQkgICAgRVZERVZfTUlOX0JVRkZFUl9TSVpFKTsKKworCXJldHVybiByb3VuZHVwX3Bvd19vZl90d28obl9ldmVudHMpOworfQorCiBzdGF0aWMgaW50IGV2ZGV2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGV2ZGV2ICpldmRldjsKIAlzdHJ1Y3QgZXZkZXZfY2xpZW50ICpjbGllbnQ7CiAJaW50IGkgPSBpbWlub3IoaW5vZGUpIC0gRVZERVZfTUlOT1JfQkFTRTsKKwl1bnNpZ25lZCBpbnQgYnVmc2l6ZTsKIAlpbnQgZXJyb3I7CiAKIAlpZiAoaSA+PSBFVkRFVl9NSU5PUlMpCkBAIC0yNjMsMTIgKzI3OSwxNyBAQAogCWlmICghZXZkZXYpCiAJCXJldHVybiAtRU5PREVWOwogCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGV2ZGV2X2NsaWVudCksIEdGUF9LRVJORUwpOworCWJ1ZnNpemUgPSBldmRldl9jb21wdXRlX2J1ZmZlcl9zaXplKGV2ZGV2LT5oYW5kbGUuZGV2KTsKKworCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBldmRldl9jbGllbnQpICsKKwkJCQlidWZzaXplICogc2l6ZW9mKHN0cnVjdCBpbnB1dF9ldmVudCksCisJCQkgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjbGllbnQpIHsKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9wdXRfZXZkZXY7CiAJfQogCisJY2xpZW50LT5idWZzaXplID0gYnVmc2l6ZTsKIAlzcGluX2xvY2tfaW5pdCgmY2xpZW50LT5idWZmZXJfbG9jayk7CiAJY2xpZW50LT5ldmRldiA9IGV2ZGV2OwogCWV2ZGV2X2F0dGFjaF9jbGllbnQoZXZkZXYsIGNsaWVudCk7CkBAIC0zMzQsNyArMzU1LDcgQEAKIAloYXZlX2V2ZW50ID0gY2xpZW50LT5oZWFkICE9IGNsaWVudC0+dGFpbDsKIAlpZiAoaGF2ZV9ldmVudCkgewogCQkqZXZlbnQgPSBjbGllbnQtPmJ1ZmZlcltjbGllbnQtPnRhaWwrK107Ci0JCWNsaWVudC0+dGFpbCAmPSBFVkRFVl9CVUZGRVJfU0laRSAtIDE7CisJCWNsaWVudC0+dGFpbCAmPSBjbGllbnQtPmJ1ZnNpemUgLSAxOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycSgmY2xpZW50LT5idWZmZXJfbG9jayk7CkBAIC0zODIsMTAgKzQwMywxNSBAQAogewogCXN0cnVjdCBldmRldl9jbGllbnQgKmNsaWVudCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZXZkZXYgKmV2ZGV2ID0gY2xpZW50LT5ldmRldjsKKwl1bnNpZ25lZCBpbnQgbWFzazsKIAogCXBvbGxfd2FpdChmaWxlLCAmZXZkZXYtPndhaXQsIHdhaXQpOwotCXJldHVybiAoKGNsaWVudC0+aGVhZCA9PSBjbGllbnQtPnRhaWwpID8gMCA6IChQT0xMSU4gfCBQT0xMUkROT1JNKSkgfAotCQkoZXZkZXYtPmV4aXN0ID8gMCA6IChQT0xMSFVQIHwgUE9MTEVSUikpOworCisJbWFzayA9IGV2ZGV2LT5leGlzdCA/IFBPTExPVVQgfCBQT0xMV1JOT1JNIDogUE9MTEhVUCB8IFBPTExFUlI7CisJaWYgKGNsaWVudC0+aGVhZCAhPSBjbGllbnQtPnRhaWwpCisJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKKworCXJldHVybiBtYXNrOwogfQogCiAjaWZkZWYgQ09ORklHX0NPTVBBVApAQCAtNjY1LDYgKzY5MSwxMCBAQAogCQkJCQkJCQkgIHNpemVvZihzdHJ1Y3QgaW5wdXRfYWJzaW5mbykpKSkKIAkJCQkJcmV0dXJuIC1FRkFVTFQ7CiAKKwkJCQkvKiBXZSBjYW4ndCBjaGFuZ2UgbnVtYmVyIG9mIHJlc2VydmVkIE1UIHNsb3RzICovCisJCQkJaWYgKHQgPT0gQUJTX01UX1NMT1QpCisJCQkJCXJldHVybiAtRUlOVkFMOworCiAJCQkJLyoKIAkJCQkgKiBUYWtlIGV2ZW50IGxvY2sgdG8gZW5zdXJlIHRoYXQgd2UgYXJlIG5vdAogCQkJCSAqIGNoYW5naW5nIGRldmljZSBwYXJhbWV0ZXJzIGluIHRoZSBtaWRkbGUKQEAgLTc2OCw3ICs3OTgsNyBAQAogc3RhdGljIHZvaWQgZXZkZXZfbWFya19kZWFkKHN0cnVjdCBldmRldiAqZXZkZXYpCiB7CiAJbXV0ZXhfbG9jaygmZXZkZXYtPm11dGV4KTsKLQlldmRldi0+ZXhpc3QgPSAwOworCWV2ZGV2LT5leGlzdCA9IGZhbHNlOwogCW11dGV4X3VubG9jaygmZXZkZXYtPm11dGV4KTsKIH0KIApAQCAtODE3LDcgKzg0Nyw3IEBACiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZXZkZXYtPndhaXQpOwogCiAJZGV2X3NldF9uYW1lKCZldmRldi0+ZGV2LCAiZXZlbnQlZCIsIG1pbm9yKTsKLQlldmRldi0+ZXhpc3QgPSAxOworCWV2ZGV2LT5leGlzdCA9IHRydWU7CiAJZXZkZXYtPm1pbm9yID0gbWlub3I7CiAKIAlldmRldi0+aGFuZGxlLmRldiA9IGlucHV0X2dldF9kZXZpY2UoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwppbmRleCA5Yzc5YmQ1Li5lMTI0M2I0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2lucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCkBAIC0zMywyNSArMzMsNiBAQAogCiAjZGVmaW5lIElOUFVUX0RFVklDRVMJMjU2CiAKLS8qCi0gKiBFVl9BQlMgZXZlbnRzIHdoaWNoIHNob3VsZCBub3QgYmUgY2FjaGVkIGFyZSBsaXN0ZWQgaGVyZS4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBpbnB1dF9hYnNfYnlwYXNzX2luaXRfZGF0YVtdIF9faW5pdGRhdGEgPSB7Ci0JQUJTX01UX1RPVUNIX01BSk9SLAotCUFCU19NVF9UT1VDSF9NSU5PUiwKLQlBQlNfTVRfV0lEVEhfTUFKT1IsCi0JQUJTX01UX1dJRFRIX01JTk9SLAotCUFCU19NVF9PUklFTlRBVElPTiwKLQlBQlNfTVRfUE9TSVRJT05fWCwKLQlBQlNfTVRfUE9TSVRJT05fWSwKLQlBQlNfTVRfVE9PTF9UWVBFLAotCUFCU19NVF9CTE9CX0lELAotCUFCU19NVF9UUkFDS0lOR19JRCwKLQlBQlNfTVRfUFJFU1NVUkUsCi0JMAotfTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGlucHV0X2Fic19ieXBhc3NbQklUU19UT19MT05HUyhBQlNfQ05UKV07Ci0KIHN0YXRpYyBMSVNUX0hFQUQoaW5wdXRfZGV2X2xpc3QpOwogc3RhdGljIExJU1RfSEVBRChpbnB1dF9oYW5kbGVyX2xpc3QpOwogCkBAIC0xODEsNiArMTYyLDU2IEBACiAjZGVmaW5lIElOUFVUX1BBU1NfVE9fREVWSUNFCTIKICNkZWZpbmUgSU5QVVRfUEFTU19UT19BTEwJKElOUFVUX1BBU1NfVE9fSEFORExFUlMgfCBJTlBVVF9QQVNTX1RPX0RFVklDRSkKIAorc3RhdGljIGludCBpbnB1dF9oYW5kbGVfYWJzX2V2ZW50KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwKKwkJCQkgIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgKnB2YWwpCit7CisJYm9vbCBpc19tdF9ldmVudDsKKwlpbnQgKnBvbGQ7CisKKwlpZiAoY29kZSA9PSBBQlNfTVRfU0xPVCkgeworCQkvKgorCQkgKiAiU3RhZ2UiIHRoZSBldmVudDsgd2UnbGwgZmx1c2ggaXQgbGF0ZXIsIHdoZW4gd2UKKwkJICogZ2V0IGFjdGl1YWwgdG91Y2ggZGF0YS4KKwkJICovCisJCWlmICgqcHZhbCA+PSAwICYmICpwdmFsIDwgZGV2LT5tdHNpemUpCisJCQlkZXYtPnNsb3QgPSAqcHZhbDsKKworCQlyZXR1cm4gSU5QVVRfSUdOT1JFX0VWRU5UOworCX0KKworCWlzX210X2V2ZW50ID0gY29kZSA+PSBBQlNfTVRfRklSU1QgJiYgY29kZSA8PSBBQlNfTVRfTEFTVDsKKworCWlmICghaXNfbXRfZXZlbnQpIHsKKwkJcG9sZCA9ICZkZXYtPmFic1tjb2RlXTsKKwl9IGVsc2UgaWYgKGRldi0+bXQpIHsKKwkJc3RydWN0IGlucHV0X210X3Nsb3QgKm10c2xvdCA9ICZkZXYtPm10W2Rldi0+c2xvdF07CisJCXBvbGQgPSAmbXRzbG90LT5hYnNbY29kZSAtIEFCU19NVF9GSVJTVF07CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQnlwYXNzIGZpbHRlcmluZyBmb3IgbXVsdGl0b3VjaCBldmVudHMgd2hlbgorCQkgKiBub3QgZW1wbG95aW5nIHNsb3RzLgorCQkgKi8KKwkJcG9sZCA9IE5VTEw7CisJfQorCisJaWYgKHBvbGQpIHsKKwkJKnB2YWwgPSBpbnB1dF9kZWZ1enpfYWJzX2V2ZW50KCpwdmFsLCAqcG9sZCwKKwkJCQkJCWRldi0+YWJzZnV6eltjb2RlXSk7CisJCWlmICgqcG9sZCA9PSAqcHZhbCkKKwkJCXJldHVybiBJTlBVVF9JR05PUkVfRVZFTlQ7CisKKwkJKnBvbGQgPSAqcHZhbDsKKwl9CisKKwkvKiBGbHVzaCBwZW5kaW5nICJzbG90IiBldmVudCAqLworCWlmIChpc19tdF9ldmVudCAmJiBkZXYtPnNsb3QgIT0gZGV2LT5hYnNbQUJTX01UX1NMT1RdKSB7CisJCWRldi0+YWJzW0FCU19NVF9TTE9UXSA9IGRldi0+c2xvdDsKKwkJaW5wdXRfcGFzc19ldmVudChkZXYsIEVWX0FCUywgQUJTX01UX1NMT1QsIGRldi0+c2xvdCk7CisJfQorCisJcmV0dXJuIElOUFVUX1BBU1NfVE9fSEFORExFUlM7Cit9CisKIHN0YXRpYyB2b2lkIGlucHV0X2hhbmRsZV9ldmVudChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpCiB7CkBAIC0xOTYsMTIgKzIyNywxMiBAQAogCiAJCWNhc2UgU1lOX1JFUE9SVDoKIAkJCWlmICghZGV2LT5zeW5jKSB7Ci0JCQkJZGV2LT5zeW5jID0gMTsKKwkJCQlkZXYtPnN5bmMgPSB0cnVlOwogCQkJCWRpc3Bvc2l0aW9uID0gSU5QVVRfUEFTU19UT19IQU5ETEVSUzsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFNZTl9NVF9SRVBPUlQ6Ci0JCQlkZXYtPnN5bmMgPSAwOworCQkJZGV2LT5zeW5jID0gZmFsc2U7CiAJCQlkaXNwb3NpdGlvbiA9IElOUFVUX1BBU1NfVE9fSEFORExFUlM7CiAJCQlicmVhazsKIAkJfQpAQCAtMjMzLDIxICsyNjQsOSBAQAogCQlicmVhazsKIAogCWNhc2UgRVZfQUJTOgotCQlpZiAoaXNfZXZlbnRfc3VwcG9ydGVkKGNvZGUsIGRldi0+YWJzYml0LCBBQlNfTUFYKSkgeworCQlpZiAoaXNfZXZlbnRfc3VwcG9ydGVkKGNvZGUsIGRldi0+YWJzYml0LCBBQlNfTUFYKSkKKwkJCWRpc3Bvc2l0aW9uID0gaW5wdXRfaGFuZGxlX2Fic19ldmVudChkZXYsIGNvZGUsICZ2YWx1ZSk7CiAKLQkJCWlmICh0ZXN0X2JpdChjb2RlLCBpbnB1dF9hYnNfYnlwYXNzKSkgewotCQkJCWRpc3Bvc2l0aW9uID0gSU5QVVRfUEFTU19UT19IQU5ETEVSUzsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJdmFsdWUgPSBpbnB1dF9kZWZ1enpfYWJzX2V2ZW50KHZhbHVlLAotCQkJCQlkZXYtPmFic1tjb2RlXSwgZGV2LT5hYnNmdXp6W2NvZGVdKTsKLQotCQkJaWYgKGRldi0+YWJzW2NvZGVdICE9IHZhbHVlKSB7Ci0JCQkJZGV2LT5hYnNbY29kZV0gPSB2YWx1ZTsKLQkJCQlkaXNwb3NpdGlvbiA9IElOUFVUX1BBU1NfVE9fSEFORExFUlM7Ci0JCQl9Ci0JCX0KIAkJYnJlYWs7CiAKIAljYXNlIEVWX1JFTDoKQEAgLTI5OCw3ICszMTcsNyBAQAogCX0KIAogCWlmIChkaXNwb3NpdGlvbiAhPSBJTlBVVF9JR05PUkVfRVZFTlQgJiYgdHlwZSAhPSBFVl9TWU4pCi0JCWRldi0+c3luYyA9IDA7CisJCWRldi0+c3luYyA9IGZhbHNlOwogCiAJaWYgKChkaXNwb3NpdGlvbiAmIElOUFVUX1BBU1NfVE9fREVWSUNFKSAmJiBkZXYtPmV2ZW50KQogCQlkZXYtPmV2ZW50KGRldiwgdHlwZSwgY29kZSwgdmFsdWUpOwpAQCAtNTI4LDEyICs1NDcsMzAgQEAKIEVYUE9SVF9TWU1CT0woaW5wdXRfY2xvc2VfZGV2aWNlKTsKIAogLyoKKyAqIFNpbXVsYXRlIGtleXVwIGV2ZW50cyBmb3IgYWxsIGtleXMgdGhhdCBhcmUgbWFya2VkIGFzIHByZXNzZWQuCisgKiBUaGUgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBkZXYtPmV2ZW50X2xvY2sgaGVsZC4KKyAqLworc3RhdGljIHZvaWQgaW5wdXRfZGV2X3JlbGVhc2Vfa2V5cyhzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJaW50IGNvZGU7CisKKwlpZiAoaXNfZXZlbnRfc3VwcG9ydGVkKEVWX0tFWSwgZGV2LT5ldmJpdCwgRVZfTUFYKSkgeworCQlmb3IgKGNvZGUgPSAwOyBjb2RlIDw9IEtFWV9NQVg7IGNvZGUrKykgeworCQkJaWYgKGlzX2V2ZW50X3N1cHBvcnRlZChjb2RlLCBkZXYtPmtleWJpdCwgS0VZX01BWCkgJiYKKwkJCSAgICBfX3Rlc3RfYW5kX2NsZWFyX2JpdChjb2RlLCBkZXYtPmtleSkpIHsKKwkJCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgRVZfS0VZLCBjb2RlLCAwKTsKKwkJCX0KKwkJfQorCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgRVZfU1lOLCBTWU5fUkVQT1JULCAxKTsKKwl9Cit9CisKKy8qCiAgKiBQcmVwYXJlIGRldmljZSBmb3IgdW5yZWdpc3RlcmluZwogICovCiBzdGF0aWMgdm9pZCBpbnB1dF9kaXNjb25uZWN0X2RldmljZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGlucHV0X2hhbmRsZSAqaGFuZGxlOwotCWludCBjb2RlOwogCiAJLyoKIAkgKiBNYXJrIGRldmljZSBhcyBnb2luZyBhd2F5LiBOb3RlIHRoYXQgd2UgdGFrZSBkZXYtPm11dGV4IGhlcmUKQEAgLTU1MiwxNSArNTg5LDcgQEAKIAkgKiBnZW5lcmF0ZSBldmVudHMgZXZlbiBhZnRlciB3ZSBkb25lIGhlcmUgYnV0IHRoZXkgd2lsbCBub3QKIAkgKiByZWFjaCBhbnkgaGFuZGxlcnMuCiAJICovCi0JaWYgKGlzX2V2ZW50X3N1cHBvcnRlZChFVl9LRVksIGRldi0+ZXZiaXQsIEVWX01BWCkpIHsKLQkJZm9yIChjb2RlID0gMDsgY29kZSA8PSBLRVlfTUFYOyBjb2RlKyspIHsKLQkJCWlmIChpc19ldmVudF9zdXBwb3J0ZWQoY29kZSwgZGV2LT5rZXliaXQsIEtFWV9NQVgpICYmCi0JCQkgICAgX190ZXN0X2FuZF9jbGVhcl9iaXQoY29kZSwgZGV2LT5rZXkpKSB7Ci0JCQkJaW5wdXRfcGFzc19ldmVudChkZXYsIEVWX0tFWSwgY29kZSwgMCk7Ci0JCQl9Ci0JCX0KLQkJaW5wdXRfcGFzc19ldmVudChkZXYsIEVWX1NZTiwgU1lOX1JFUE9SVCwgMSk7Ci0JfQorCWlucHV0X2Rldl9yZWxlYXNlX2tleXMoZGV2KTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoaGFuZGxlLCAmZGV2LT5oX2xpc3QsIGRfbm9kZSkKIAkJaGFuZGxlLT5vcGVuID0gMDsKQEAgLTY4NCw3ICs3MTMsNyBAQAogCQkgICAgICB1bnNpZ25lZCBpbnQgc2NhbmNvZGUsIHVuc2lnbmVkIGludCBrZXljb2RlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IG9sZF9rZXljb2RlOworCXVuc2lnbmVkIGludCBvbGRfa2V5Y29kZTsKIAlpbnQgcmV0dmFsOwogCiAJaWYgKGtleWNvZGUgPiBLRVlfTUFYKQpAQCAtMTI3OCw2ICsxMzA3LDcgQEAKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSB0b19pbnB1dF9kZXYoZGV2aWNlKTsKIAogCWlucHV0X2ZmX2Rlc3Ryb3koZGV2KTsKKwlpbnB1dF9tdF9kZXN0cm95X3Nsb3RzKGRldik7CiAJa2ZyZWUoZGV2KTsKIAogCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwpAQCAtMTQzMyw2ICsxNDYzLDE1IEBACiAKIAltdXRleF9sb2NrKCZpbnB1dF9kZXYtPm11dGV4KTsKIAlpbnB1dF9kZXZfcmVzZXQoaW5wdXRfZGV2LCB0cnVlKTsKKworCS8qCisJICogS2V5cyB0aGF0IGhhdmUgYmVlbiBwcmVzc2VkIGF0IHN1c3BlbmQgdGltZSBhcmUgdW5saWtlbHkKKwkgKiB0byBiZSBzdGlsbCBwcmVzc2VkIHdoZW4gd2UgcmVzdW1lLgorCSAqLworCXNwaW5fbG9ja19pcnEoJmlucHV0X2Rldi0+ZXZlbnRfbG9jayk7CisJaW5wdXRfZGV2X3JlbGVhc2Vfa2V5cyhpbnB1dF9kZXYpOworCXNwaW5fdW5sb2NrX2lycSgmaW5wdXRfZGV2LT5ldmVudF9sb2NrKTsKKwogCW11dGV4X3VubG9jaygmaW5wdXRfZGV2LT5tdXRleCk7CiAKIAlyZXR1cm4gMDsKQEAgLTE1MTgsNiArMTU1Nyw0NSBAQAogRVhQT1JUX1NZTUJPTChpbnB1dF9mcmVlX2RldmljZSk7CiAKIC8qKgorICogaW5wdXRfbXRfY3JlYXRlX3Nsb3RzKCkgLSBjcmVhdGUgTVQgaW5wdXQgc2xvdHMKKyAqIEBkZXY6IGlucHV0IGRldmljZSBzdXBwb3J0aW5nIE1UIGV2ZW50cyBhbmQgZmluZ2VyIHRyYWNraW5nCisgKiBAbnVtX3Nsb3RzOiBudW1iZXIgb2Ygc2xvdHMgdXNlZCBieSB0aGUgZGV2aWNlCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYWxsIG5lY2Vzc2FyeSBtZW1vcnkgZm9yIE1UIHNsb3QgaGFuZGxpbmcKKyAqIGluIHRoZSBpbnB1dCBkZXZpY2UsIGFuZCBhZGRzIEFCU19NVF9TTE9UIHRvIHRoZSBkZXZpY2UgY2FwYWJpbGl0aWVzLgorICovCitpbnQgaW5wdXRfbXRfY3JlYXRlX3Nsb3RzKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5zaWduZWQgaW50IG51bV9zbG90cykKK3sKKwlpZiAoIW51bV9zbG90cykKKwkJcmV0dXJuIDA7CisKKwlkZXYtPm10ID0ga2NhbGxvYyhudW1fc2xvdHMsIHNpemVvZihzdHJ1Y3QgaW5wdXRfbXRfc2xvdCksIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5tdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXYtPm10c2l6ZSA9IG51bV9zbG90czsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19NVF9TTE9ULCAwLCBudW1fc2xvdHMgLSAxLCAwLCAwKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChpbnB1dF9tdF9jcmVhdGVfc2xvdHMpOworCisvKioKKyAqIGlucHV0X210X2Rlc3Ryb3lfc2xvdHMoKSAtIGZyZWVzIHRoZSBNVCBzbG90cyBvZiB0aGUgaW5wdXQgZGV2aWNlCisgKiBAZGV2OiBpbnB1dCBkZXZpY2Ugd2l0aCBhbGxvY2F0ZWQgTVQgc2xvdHMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgbmVlZGVkIGluIGVycm9yIHBhdGggYXMgdGhlIGlucHV0IGNvcmUgd2lsbAorICogYXV0b21hdGljYWxseSBmcmVlIHRoZSBNVCBzbG90cyB3aGVuIHRoZSBkZXZpY2UgaXMgZGVzdHJveWVkLgorICovCit2b2lkIGlucHV0X210X2Rlc3Ryb3lfc2xvdHMoc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCWtmcmVlKGRldi0+bXQpOworCWRldi0+bXQgPSBOVUxMOworCWRldi0+bXRzaXplID0gMDsKK30KK0VYUE9SVF9TWU1CT0woaW5wdXRfbXRfZGVzdHJveV9zbG90cyk7CisKKy8qKgogICogaW5wdXRfc2V0X2NhcGFiaWxpdHkgLSBtYXJrIGRldmljZSBhcyBjYXBhYmxlIG9mIGEgY2VydGFpbiBldmVudAogICogQGRldjogZGV2aWNlIHRoYXQgaXMgY2FwYWJsZSBvZiBlbWl0dGluZyBvciBhY2NlcHRpbmcgZXZlbnQKICAqIEB0eXBlOiB0eXBlIG9mIHRoZSBldmVudCAoRVZfS0VZLCBFVl9SRUwsIGV0Yy4uLikKQEAgLTE5MjYsMjAgKzIwMDQsMTAgQEAKIAkub3BlbiA9IGlucHV0X29wZW5fZmlsZSwKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBpbnB1dF9pbml0X2Fic19ieXBhc3Modm9pZCkKLXsKLQljb25zdCB1bnNpZ25lZCBpbnQgKnA7Ci0KLQlmb3IgKHAgPSBpbnB1dF9hYnNfYnlwYXNzX2luaXRfZGF0YTsgKnA7IHArKykKLQkJaW5wdXRfYWJzX2J5cGFzc1tCSVRfV09SRCgqcCldIHw9IEJJVF9NQVNLKCpwKTsKLX0KLQogc3RhdGljIGludCBfX2luaXQgaW5wdXRfaW5pdCh2b2lkKQogewogCWludCBlcnI7CiAKLQlpbnB1dF9pbml0X2Fic19ieXBhc3MoKTsKLQogCWVyciA9IGNsYXNzX3JlZ2lzdGVyKCZpbnB1dF9jbGFzcyk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgImlucHV0OiB1bmFibGUgdG8gcmVnaXN0ZXIgaW5wdXRfZGV2IGNsYXNzXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMgYi9kcml2ZXJzL2lucHV0L2pveWRldi5jCmluZGV4IDM0MTU3YmIuLjYzODM0NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lkZXYuYwpAQCAtMzcsNyArMzcsNiBAQAogI2RlZmluZSBKT1lERVZfQlVGRkVSX1NJWkUJNjQKIAogc3RydWN0IGpveWRldiB7Ci0JaW50IGV4aXN0OwogCWludCBvcGVuOwogCWludCBtaW5vcjsKIAlzdHJ1Y3QgaW5wdXRfaGFuZGxlIGhhbmRsZTsKQEAgLTQ2LDYgKzQ1LDcgQEAKIAlzcGlubG9ja190IGNsaWVudF9sb2NrOyAvKiBwcm90ZWN0cyBjbGllbnRfbGlzdCAqLwogCXN0cnVjdCBtdXRleCBtdXRleDsKIAlzdHJ1Y3QgZGV2aWNlIGRldjsKKwlib29sIGV4aXN0OwogCiAJc3RydWN0IGpzX2NvcnIgY29ycltBQlNfQ05UXTsKIAlzdHJ1Y3QgSlNfREFUQV9TQVZFX1RZUEUgZ2x1ZTsKQEAgLTc2MCw3ICs3NjAsNyBAQAogc3RhdGljIHZvaWQgam95ZGV2X21hcmtfZGVhZChzdHJ1Y3Qgam95ZGV2ICpqb3lkZXYpCiB7CiAJbXV0ZXhfbG9jaygmam95ZGV2LT5tdXRleCk7Ci0Jam95ZGV2LT5leGlzdCA9IDA7CisJam95ZGV2LT5leGlzdCA9IGZhbHNlOwogCW11dGV4X3VubG9jaygmam95ZGV2LT5tdXRleCk7CiB9CiAKQEAgLTgxNywxMCArODE3LDkgQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZqb3lkZXYtPndhaXQpOwogCiAJZGV2X3NldF9uYW1lKCZqb3lkZXYtPmRldiwgImpzJWQiLCBtaW5vcik7Ci0Jam95ZGV2LT5leGlzdCA9IDE7CisJam95ZGV2LT5leGlzdCA9IHRydWU7CiAJam95ZGV2LT5taW5vciA9IG1pbm9yOwogCi0Jam95ZGV2LT5leGlzdCA9IDE7CiAJam95ZGV2LT5oYW5kbGUuZGV2ID0gaW5wdXRfZ2V0X2RldmljZShkZXYpOwogCWpveWRldi0+aGFuZGxlLm5hbWUgPSBkZXZfbmFtZSgmam95ZGV2LT5kZXYpOwogCWpveWRldi0+aGFuZGxlLmhhbmRsZXIgPSBoYW5kbGVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9nYW1lY29uLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dhbWVjb24uYwppbmRleCBmYmQ2MmFiLi4wZmZhZjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dhbWVjb24uYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dhbWVjb24uYwpAQCAtODksNyArODksNiBAQAogc3RydWN0IGdjIHsKIAlzdHJ1Y3QgcGFyZGV2aWNlICpwZDsKIAlzdHJ1Y3QgZ2NfcGFkIHBhZHNbR0NfTUFYX0RFVklDRVNdOwotCXN0cnVjdCBpbnB1dF9kZXYgKmRldltHQ19NQVhfREVWSUNFU107CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiAJaW50IHBhZF9jb3VudFtHQ19NQVhdOwogCWludCB1c2VkOwpAQCAtMzg3LDcgKzM4Niw3IEBACiAJZm9yIChpID0gMDsgaSA8IEdDX01BWF9ERVZJQ0VTOyBpKyspIHsKIAogCQlwYWQgPSAmZ2MtPnBhZHNbaV07Ci0JCWRldiA9IGdjLT5kZXZbaV07CisJCWRldiA9IHBhZC0+ZGV2OwogCQlzID0gZ2Nfc3RhdHVzX2JpdFtpXTsKIAogCQlzd2l0Y2ggKHBhZC0+dHlwZSkgewpAQCAtNTc5LDcgKzU3OCw3IEBACiAJCXJlYWQgPSBwYXJwb3J0X3JlYWRfc3RhdHVzKHBvcnQpIF4gMHg4MDsKIAogCQlmb3IgKGogPSAwOyBqIDwgR0NfTUFYX0RFVklDRVM7IGorKykgewotCQkJc3RydWN0IGdjX3BhZCAqcGFkID0gJmdjLT5wYWRzW2ldOworCQkJc3RydWN0IGdjX3BhZCAqcGFkID0gJmdjLT5wYWRzW2pdOwogCiAJCQlpZiAocGFkLT50eXBlID09IEdDX1BTWCB8fCBwYWQtPnR5cGUgPT0gR0NfRERSKQogCQkJCWRhdGFbal0gfD0gKHJlYWQgJiBnY19zdGF0dXNfYml0W2pdKSA/ICgxIDw8IGkpIDogMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKaW5kZXggYzEwODdjZS4uMjY5YTg0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKQEAgLTksNiArOSw3IEBACiAgKiAgICAgICAgICAgICAgIDIwMDUgRG9taW5pYyBDZXJxdWV0dGkgPGJpbmFyeTEyMzBAeWFob28uY29tPgogICogICAgICAgICAgICAgICAyMDA2IEFkYW0gQnVjaGJpbmRlciA8YWRhbS5idWNoYmluZGVyQGdtYWlsLmNvbT4KICAqICAgICAgICAgICAgICAgMjAwNyBKYW4gS3JhdG9jaHZpbCA8aG9uemFAamlrb3MuY3o+CisgKiAgICAgICAgICAgICAgIDIwMTAgQ2hyaXN0b3BoIEZyaXR6IDxjaGYuZnJpdHpAZ29vZ2xlbWFpbC5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTg4LDYgKzg5LDkgQEAKICAgIGJ1dCB3ZSBtYXAgdGhlbSB0byBheGVzIHdoZW4gcG9zc2libGUgdG8gc2ltcGxpZnkgdGhpbmdzICovCiAjZGVmaW5lIE1BUF9EUEFEX1RPX0JVVFRPTlMJCSgxIDw8IDApCiAjZGVmaW5lIE1BUF9UUklHR0VSU19UT19CVVRUT05TCQkoMSA8PCAxKQorI2RlZmluZSBNQVBfU1RJQ0tTX1RPX05VTEwJCSgxIDw8IDIpCisjZGVmaW5lIERBTkNFUEFEX01BUF9DT05GSUcJKE1BUF9EUEFEX1RPX0JVVFRPTlMgfAkJCVwKKwkJCQlNQVBfVFJJR0dFUlNfVE9fQlVUVE9OUyB8IE1BUF9TVElDS1NfVE9fTlVMTCkKIAogI2RlZmluZSBYVFlQRV9YQk9YICAgICAgICAwCiAjZGVmaW5lIFhUWVBFX1hCT1gzNjAgICAgIDEKQEAgLTEwMiw2ICsxMDYsMTAgQEAKIG1vZHVsZV9wYXJhbSh0cmlnZ2Vyc190b19idXR0b25zLCBib29sLCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0ModHJpZ2dlcnNfdG9fYnV0dG9ucywgIk1hcCB0cmlnZ2VycyB0byBidXR0b25zIHJhdGhlciB0aGFuIGF4ZXMgZm9yIHVua25vd24gcGFkcyIpOwogCitzdGF0aWMgaW50IHN0aWNrc190b19udWxsOworbW9kdWxlX3BhcmFtKHN0aWNrc190b19udWxsLCBib29sLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0Moc3RpY2tzX3RvX251bGwsICJEbyBub3QgbWFwIHN0aWNrcyBhdCBhbGwgZm9yIHVua25vd24gcGFkcyIpOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHhwYWRfZGV2aWNlIHsKIAl1MTYgaWRWZW5kb3I7CiAJdTE2IGlkUHJvZHVjdDsKQEAgLTExNCw3ICsxMjIsNyBAQAogCXsgMHgwNDVlLCAweDAyODUsICJNaWNyb3NvZnQgWC1Cb3ggcGFkIChKYXBhbikiLCAwLCBYVFlQRV9YQk9YIH0sCiAJeyAweDA0NWUsIDB4MDI4NywgIk1pY3Jvc29mdCBYYm94IENvbnRyb2xsZXIgUyIsIDAsIFhUWVBFX1hCT1ggfSwKIAl7IDB4MDQ1ZSwgMHgwNzE5LCAiWGJveCAzNjAgV2lyZWxlc3MgUmVjZWl2ZXIiLCBNQVBfRFBBRF9UT19CVVRUT05TLCBYVFlQRV9YQk9YMzYwVyB9LAotCXsgMHgwYzEyLCAweDg4MDksICJSZWRPY3RhbmUgWGJveCBEYW5jZSBQYWQiLCBNQVBfRFBBRF9UT19CVVRUT05TLCBYVFlQRV9YQk9YIH0sCisJeyAweDBjMTIsIDB4ODgwOSwgIlJlZE9jdGFuZSBYYm94IERhbmNlIFBhZCIsIERBTkNFUEFEX01BUF9DT05GSUcsIFhUWVBFX1hCT1ggfSwKIAl7IDB4MDQ0ZiwgMHgwZjA3LCAiVGhydXN0bWFzdGVyLCBJbmMuIENvbnRyb2xsZXIiLCAwLCBYVFlQRV9YQk9YIH0sCiAJeyAweDA0NmQsIDB4YzI0MiwgIkxvZ2l0ZWNoIENoaWxsc3RyZWFtIENvbnRyb2xsZXIiLCAwLCBYVFlQRV9YQk9YMzYwIH0sCiAJeyAweDA0NmQsIDB4Y2E4NCwgIkxvZ2l0ZWNoIFhib3ggQ29yZGxlc3MgQ29udHJvbGxlciIsIDAsIFhUWVBFX1hCT1ggfSwKQEAgLTE1MSw2ICsxNTksNyBAQAogCXsgMHgwNDVlLCAweDAyOGUsICJNaWNyb3NvZnQgWC1Cb3ggMzYwIHBhZCIsIDAsIFhUWVBFX1hCT1gzNjAgfSwKIAl7IDB4MWJhZCwgMHgwMDAzLCAiSGFybW9uaXggUm9jayBCYW5kIERydW1raXQiLCBNQVBfRFBBRF9UT19CVVRUT05TLCBYVFlQRV9YQk9YMzYwIH0sCiAJeyAweDBmMGQsIDB4MDAxNiwgIkhvcmkgUmVhbCBBcmNhZGUgUHJvLkVYIiwgTUFQX1RSSUdHRVJTX1RPX0JVVFRPTlMsIFhUWVBFX1hCT1gzNjAgfSwKKwl7IDB4MGYwZCwgMHgwMDBkLCAiSG9yaSBGaWdodGluZyBTdGljayBFWDIiLCBNQVBfVFJJR0dFUlNfVE9fQlVUVE9OUywgWFRZUEVfWEJPWDM2MCB9LAogCXsgMHhmZmZmLCAweGZmZmYsICJDaGluZXNlLW1hZGUgWGJveCBDb250cm9sbGVyIiwgMCwgWFRZUEVfWEJPWCB9LAogCXsgMHgwMDAwLCAweDAwMDAsICJHZW5lcmljIFgtQm94IHBhZCIsIDAsIFhUWVBFX1VOS05PV04gfQogfTsKQEAgLTE1OCw3ICsxNjcsNyBAQAogLyogYnV0dG9ucyBzaGFyZWQgd2l0aCB4Ym94IGFuZCB4Ym94MzYwICovCiBzdGF0aWMgY29uc3Qgc2lnbmVkIHNob3J0IHhwYWRfY29tbW9uX2J0bltdID0gewogCUJUTl9BLCBCVE5fQiwgQlROX1gsIEJUTl9ZLAkJCS8qICJhbmFsb2ciIGJ1dHRvbnMgKi8KLQlCVE5fU1RBUlQsIEJUTl9CQUNLLCBCVE5fVEhVTUJMLCBCVE5fVEhVTUJSLAkvKiBzdGFydC9iYWNrL3N0aWNrcyAqLworCUJUTl9TVEFSVCwgQlROX1NFTEVDVCwgQlROX1RIVU1CTCwgQlROX1RIVU1CUiwJLyogc3RhcnQvYmFjay9zdGlja3MgKi8KIAktMQkJCQkJCS8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCkBAIC0xNjgsMTAgKzE3NywxMCBAQAogCS0xCQkJLyogdGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKLS8qIHVzZWQgd2hlbiBkcGFkIGlzIG1hcHBlZCB0byBudXR0b25zICovCisvKiB1c2VkIHdoZW4gZHBhZCBpcyBtYXBwZWQgdG8gYnV0dG9ucyAqLwogc3RhdGljIGNvbnN0IHNpZ25lZCBzaG9ydCB4cGFkX2J0bl9wYWRbXSA9IHsKLQlCVE5fTEVGVCwgQlROX1JJR0hULAkJLyogZC1wYWQgbGVmdCwgcmlnaHQgKi8KLQlCVE5fMCwgQlROXzEsCQkJLyogZC1wYWQgdXAsIGRvd24gKFhYWCBuYW1lcz8/KSAqLworCUJUTl9UUklHR0VSX0hBUFBZMSwgQlROX1RSSUdHRVJfSEFQUFkyLAkJLyogZC1wYWQgbGVmdCwgcmlnaHQgKi8KKwlCVE5fVFJJR0dFUl9IQVBQWTMsIEJUTl9UUklHR0VSX0hBUFBZNCwJCS8qIGQtcGFkIHVwLCBkb3duICovCiAJLTEJCQkJLyogdGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKQEAgLTI3OSwxNyArMjg4LDE5IEBACiB7CiAJc3RydWN0IGlucHV0X2RldiAqZGV2ID0geHBhZC0+ZGV2OwogCi0JLyogbGVmdCBzdGljayAqLwotCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwKLQkJCSAoX19zMTYpIGxlMTZfdG9fY3B1cCgoX19sZTE2ICopKGRhdGEgKyAxMikpKTsKLQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksCi0JCQkgfihfX3MxNikgbGUxNl90b19jcHVwKChfX2xlMTYgKikoZGF0YSArIDE0KSkpOworCWlmICghKHhwYWQtPm1hcHBpbmcgJiBNQVBfU1RJQ0tTX1RPX05VTEwpKSB7CisJCS8qIGxlZnQgc3RpY2sgKi8KKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLAorCQkJCSAoX19zMTYpIGxlMTZfdG9fY3B1cCgoX19sZTE2ICopKGRhdGEgKyAxMikpKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLAorCQkJCSB+KF9fczE2KSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgMTQpKSk7CiAKLQkvKiByaWdodCBzdGljayAqLwotCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUlgsCi0JCQkgKF9fczE2KSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgMTYpKSk7Ci0JaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19SWSwKLQkJCSB+KF9fczE2KSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgMTgpKSk7CisJCS8qIHJpZ2h0IHN0aWNrICovCisJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUlgsCisJCQkJIChfX3MxNikgbGUxNl90b19jcHVwKChfX2xlMTYgKikoZGF0YSArIDE2KSkpOworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1JZLAorCQkJCSB+KF9fczE2KSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgMTgpKSk7CisJfQogCiAJLyogdHJpZ2dlcnMgbGVmdC9yaWdodCAqLwogCWlmICh4cGFkLT5tYXBwaW5nICYgTUFQX1RSSUdHRVJTX1RPX0JVVFRPTlMpIHsKQEAgLTMwMiwxMCArMzEzLDExIEBACiAKIAkvKiBkaWdpdGFsIHBhZCAqLwogCWlmICh4cGFkLT5tYXBwaW5nICYgTUFQX0RQQURfVE9fQlVUVE9OUykgewotCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0xFRlQsICBkYXRhWzJdICYgMHgwNCk7Ci0JCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fUklHSFQsIGRhdGFbMl0gJiAweDA4KTsKLQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl8wLCAgICAgZGF0YVsyXSAmIDB4MDEpOyAvKiB1cCAqLwotCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROXzEsICAgICBkYXRhWzJdICYgMHgwMik7IC8qIGRvd24gKi8KKwkJLyogZHBhZCBhcyBidXR0b25zIChsZWZ0LCByaWdodCwgdXAsIGRvd24pICovCisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVFJJR0dFUl9IQVBQWTEsIGRhdGFbMl0gJiAweDA0KTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UUklHR0VSX0hBUFBZMiwgZGF0YVsyXSAmIDB4MDgpOworCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RSSUdHRVJfSEFQUFkzLCBkYXRhWzJdICYgMHgwMSk7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVFJJR0dFUl9IQVBQWTQsIGRhdGFbMl0gJiAweDAyKTsKIAl9IGVsc2UgewogCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX0hBVDBYLAogCQkJCSAhIShkYXRhWzJdICYgMHgwOCkgLSAhIShkYXRhWzJdICYgMHgwNCkpOwpAQCAtMzE1LDcgKzMyNyw3IEBACiAKIAkvKiBzdGFydC9iYWNrIGJ1dHRvbnMgYW5kIHN0aWNrIHByZXNzIGxlZnQvcmlnaHQgKi8KIAlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1NUQVJULCAgZGF0YVsyXSAmIDB4MTApOwotCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fQkFDSywgICBkYXRhWzJdICYgMHgyMCk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TRUxFQ1QsIGRhdGFbMl0gJiAweDIwKTsKIAlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RIVU1CTCwgZGF0YVsyXSAmIDB4NDApOwogCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVEhVTUJSLCBkYXRhWzJdICYgMHg4MCk7CiAKQEAgLTM0OSwxMSArMzYxLDExIEBACiAKIAkvKiBkaWdpdGFsIHBhZCAqLwogCWlmICh4cGFkLT5tYXBwaW5nICYgTUFQX0RQQURfVE9fQlVUVE9OUykgewotCQkvKiBkcGFkIGFzIGJ1dHRvbnMgKHJpZ2h0LCBsZWZ0LCBkb3duLCB1cCkgKi8KLQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9MRUZULCBkYXRhWzJdICYgMHgwNCk7Ci0JCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fUklHSFQsIGRhdGFbMl0gJiAweDA4KTsKLQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl8wLCBkYXRhWzJdICYgMHgwMSk7CS8qIHVwICovCi0JCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fMSwgZGF0YVsyXSAmIDB4MDIpOwkvKiBkb3duICovCisJCS8qIGRwYWQgYXMgYnV0dG9ucyAobGVmdCwgcmlnaHQsIHVwLCBkb3duKSAqLworCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RSSUdHRVJfSEFQUFkxLCBkYXRhWzJdICYgMHgwNCk7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVFJJR0dFUl9IQVBQWTIsIGRhdGFbMl0gJiAweDA4KTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UUklHR0VSX0hBUFBZMywgZGF0YVsyXSAmIDB4MDEpOworCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RSSUdHRVJfSEFQUFk0LCBkYXRhWzJdICYgMHgwMik7CiAJfSBlbHNlIHsKIAkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19IQVQwWCwKIAkJCQkgISEoZGF0YVsyXSAmIDB4MDgpIC0gISEoZGF0YVsyXSAmIDB4MDQpKTsKQEAgLTM2Myw3ICszNzUsNyBAQAogCiAJLyogc3RhcnQvYmFjayBidXR0b25zICovCiAJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TVEFSVCwgIGRhdGFbMl0gJiAweDEwKTsKLQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0JBQ0ssICAgZGF0YVsyXSAmIDB4MjApOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU0VMRUNULCBkYXRhWzJdICYgMHgyMCk7CiAKIAkvKiBzdGljayBwcmVzcyBsZWZ0L3JpZ2h0ICovCiAJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9USFVNQkwsIGRhdGFbMl0gJiAweDQwKTsKQEAgLTM3OCwxNyArMzkwLDE5IEBACiAJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UUiwJZGF0YVszXSAmIDB4MDIpOwogCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTU9ERSwJZGF0YVszXSAmIDB4MDQpOwogCi0JLyogbGVmdCBzdGljayAqLwotCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwKLQkJCSAoX19zMTYpIGxlMTZfdG9fY3B1cCgoX19sZTE2ICopKGRhdGEgKyA2KSkpOwotCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwKLQkJCSB+KF9fczE2KSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgOCkpKTsKKwlpZiAoISh4cGFkLT5tYXBwaW5nICYgTUFQX1NUSUNLU19UT19OVUxMKSkgeworCQkvKiBsZWZ0IHN0aWNrICovCisJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwKKwkJCQkgKF9fczE2KSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgNikpKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLAorCQkJCSB+KF9fczE2KSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgOCkpKTsKIAotCS8qIHJpZ2h0IHN0aWNrICovCi0JaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19SWCwKLQkJCSAoX19zMTYpIGxlMTZfdG9fY3B1cCgoX19sZTE2ICopKGRhdGEgKyAxMCkpKTsKLQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1JZLAotCQkJIH4oX19zMTYpIGxlMTZfdG9fY3B1cCgoX19sZTE2ICopKGRhdGEgKyAxMikpKTsKKwkJLyogcmlnaHQgc3RpY2sgKi8KKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19SWCwKKwkJCQkgKF9fczE2KSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgMTApKSk7CisJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUlksCisJCQkJIH4oX19zMTYpIGxlMTZfdG9fY3B1cCgoX19sZTE2ICopKGRhdGEgKyAxMikpKTsKKwl9CiAKIAkvKiB0cmlnZ2VycyBsZWZ0L3JpZ2h0ICovCiAJaWYgKHhwYWQtPm1hcHBpbmcgJiBNQVBfVFJJR0dFUlNfVE9fQlVUVE9OUykgewpAQCAtODE0LDYgKzgyOCw4IEBACiAJCQl4cGFkLT5tYXBwaW5nIHw9IE1BUF9EUEFEX1RPX0JVVFRPTlM7CiAJCWlmICh0cmlnZ2Vyc190b19idXR0b25zKQogCQkJeHBhZC0+bWFwcGluZyB8PSBNQVBfVFJJR0dFUlNfVE9fQlVUVE9OUzsKKwkJaWYgKHN0aWNrc190b19udWxsKQorCQkJeHBhZC0+bWFwcGluZyB8PSBNQVBfU1RJQ0tTX1RPX05VTEw7CiAJfQogCiAJeHBhZC0+ZGV2ID0gaW5wdXRfZGV2OwpAQCAtODMwLDE2ICs4NDYsMjAgQEAKIAlpbnB1dF9kZXYtPm9wZW4gPSB4cGFkX29wZW47CiAJaW5wdXRfZGV2LT5jbG9zZSA9IHhwYWRfY2xvc2U7CiAKLQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX0FCUyk7CisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSk7CiAKLQkvKiBzZXQgdXAgc3RhbmRhcmQgYnV0dG9ucyBhbmQgYXhlcyAqLworCWlmICghKHhwYWQtPm1hcHBpbmcgJiBNQVBfU1RJQ0tTX1RPX05VTEwpKSB7CisJCWlucHV0X2Rldi0+ZXZiaXRbMF0gfD0gQklUX01BU0soRVZfQUJTKTsKKwkJLyogc2V0IHVwIGF4ZXMgKi8KKwkJZm9yIChpID0gMDsgeHBhZF9hYnNbaV0gPj0gMDsgaSsrKQorCQkJeHBhZF9zZXRfdXBfYWJzKGlucHV0X2RldiwgeHBhZF9hYnNbaV0pOworCX0KKworCS8qIHNldCB1cCBzdGFuZGFyZCBidXR0b25zICovCiAJZm9yIChpID0gMDsgeHBhZF9jb21tb25fYnRuW2ldID49IDA7IGkrKykKIAkJX19zZXRfYml0KHhwYWRfY29tbW9uX2J0bltpXSwgaW5wdXRfZGV2LT5rZXliaXQpOwogCi0JZm9yIChpID0gMDsgeHBhZF9hYnNbaV0gPj0gMDsgaSsrKQotCQl4cGFkX3NldF91cF9hYnMoaW5wdXRfZGV2LCB4cGFkX2Fic1tpXSk7Ci0KLQkvKiBOb3cgc2V0IHVwIG1vZGVsLXNwZWNpZmljIG9uZXMgKi8KKwkvKiBzZXQgdXAgbW9kZWwtc3BlY2lmaWMgb25lcyAqLwogCWlmICh4cGFkLT54dHlwZSA9PSBYVFlQRV9YQk9YMzYwIHx8IHhwYWQtPnh0eXBlID09IFhUWVBFX1hCT1gzNjBXKSB7CiAJCWZvciAoaSA9IDA7IHhwYWQzNjBfYnRuW2ldID49IDA7IGkrKykKIAkJCV9fc2V0X2JpdCh4cGFkMzYwX2J0bltpXSwgaW5wdXRfZGV2LT5rZXliaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCmluZGV4IDBmOWE0NzguLmIxNzFmNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKQEAgLTY5LDExICs2OSwxMSBAQAogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGF0YWtiZC4KIAogY29uZmlnIEtFWUJPQVJEX0FUS0JECi0JdHJpc3RhdGUgIkFUIGtleWJvYXJkIiBpZiBFTUJFRERFRCB8fCAhWDg2IHx8IFg4Nl9NUlNUCisJdHJpc3RhdGUgIkFUIGtleWJvYXJkIiBpZiBFTUJFRERFRCB8fCAhWDg2CiAJZGVmYXVsdCB5CiAJc2VsZWN0IFNFUklPCiAJc2VsZWN0IFNFUklPX0xJQlBTMgotCXNlbGVjdCBTRVJJT19JODA0MiBpZiBYODYgJiYgIVg4Nl9NUlNUCisJc2VsZWN0IFNFUklPX0k4MDQyIGlmIFg4NgogCXNlbGVjdCBTRVJJT19HU0NQUzIgaWYgR1NDCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBzdGFuZGFyZCBBVCBvciBQUy8yIGtleWJvYXJkLiBVc3VhbGx5CkBAIC0xMjQsNyArMTI0LDcgQEAKIAkgIHJpZ2h0LWhhbmQgY29sdW1uIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgdGhlIGtleSBzaG93biBpbiB0aGUKIAkgIGxlZnQtaGFuZCBjb2x1bW4uCiAKLWNvbmZpZyBRVDIxNjAKK2NvbmZpZyBLRVlCT0FSRF9RVDIxNjAKIAl0cmlzdGF0ZSAiQXRtZWwgQVQ0MlFUMjE2MCBUb3VjaCBTZW5zb3IgQ2hpcCIKIAlkZXBlbmRzIG9uIEkyQyAmJiBFWFBFUklNRU5UQUwKIAloZWxwCkBAIC0yOTcsNiArMjk3LDE4IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtYXg3MzU5X2tleXBhZC4KIAorY29uZmlnIEtFWUJPQVJEX01DUworCXRyaXN0YXRlICJNRUxGQVMgTUNTIFRvdWNoa2V5IgorCWRlcGVuZHMgb24gSTJDCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSB0aGUgTUVMRkFTIE1DUzUwMDAvNTA4MCB0b3VjaGtleSBjb250cm9sbGVyCisJICBjaGlwIGluIHlvdXIgc3lzdGVtLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtY3NfdG91Y2hrZXkuCisKIGNvbmZpZyBLRVlCT0FSRF9JTVgKIAl0cmlzdGF0ZSAiSU1YIGtleXBhZCBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJDSF9NWEMKQEAgLTM0Miw2ICszNTQsMTUgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHB4YTkzMF9yb3RhcnkuCiAKK2NvbmZpZyBLRVlCT0FSRF9TQU1TVU5HCisJdHJpc3RhdGUgIlNhbXN1bmcga2V5cGFkIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTQU1TVU5HX0RFVl9LRVlQQUQKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgU2Ftc3VuZyBrZXlwYWQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNhbXN1bmcta2V5cGFkLgorCiBjb25maWcgS0VZQk9BUkRfU1RPV0FXQVkKIAl0cmlzdGF0ZSAiU3Rvd2F3YXkga2V5Ym9hcmQiCiAJc2VsZWN0IFNFUklPCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL01ha2VmaWxlIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZQppbmRleCA0NTk2ZDBjLi4xYTY2ZDVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvTWFrZWZpbGUKQEAgLTI2LDEyICsyNiwxNCBAQAogb2JqLSQoQ09ORklHX0tFWUJPQVJEX01BUExFKQkJKz0gbWFwbGVfa2V5Yi5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfTUFUUklYKQkJKz0gbWF0cml4X2tleXBhZC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSkJCSs9IG1heDczNTlfa2V5cGFkLm8KK29iai0kKENPTkZJR19LRVlCT0FSRF9NQ1MpCQkrPSBtY3NfdG91Y2hrZXkubwogb2JqLSQoQ09ORklHX0tFWUJPQVJEX05FV1RPTikJCSs9IG5ld3RvbmtiZC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfT01BUCkJCSs9IG9tYXAta2V5cGFkLm8KIG9iai0kKENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMpCSs9IG9wZW5jb3Jlcy1rYmQubwogb2JqLSQoQ09ORklHX0tFWUJPQVJEX1BYQTI3eCkJCSs9IHB4YTI3eF9rZXlwYWQubwogb2JqLSQoQ09ORklHX0tFWUJPQVJEX1BYQTkzMF9ST1RBUlkpCSs9IHB4YTkzMF9yb3Rhcnkubwogb2JqLSQoQ09ORklHX0tFWUJPQVJEX1FUMjE2MCkJCSs9IHF0MjE2MC5vCitvYmotJChDT05GSUdfS0VZQk9BUkRfU0FNU1VORykJCSs9IHNhbXN1bmcta2V5cGFkLm8KIG9iai0kKENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQykJCSs9IHNoX2tleXNjLm8KIG9iai0kKENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSkJCSs9IHN0b3dhd2F5Lm8KIG9iai0kKENPTkZJR19LRVlCT0FSRF9TVU5LQkQpCQkrPSBzdW5rYmQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hZHA1NTg4LWtleXMuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYWRwNTU4OC1rZXlzLmMKaW5kZXggNzQ0NjAwZS4uZDY5MThjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hZHA1NTg4LWtleXMuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2FkcDU1ODgta2V5cy5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSA8bGludXgvaTJjL2FkcDU1ODguaD4KQEAgLTU0LDYgKzU1LDEwIEBACiAKICNkZWZpbmUgS0VZUF9NQVhfRVZFTlQJCTEwCiAKKyNkZWZpbmUgTUFYR1BJTwkJCTE4CisjZGVmaW5lIEFEUF9CQU5LKG9mZnMpCQkoKG9mZnMpID4+IDMpCisjZGVmaW5lIEFEUF9CSVQob2ZmcykJCSgxdSA8PCAoKG9mZnMpICYgMHg3KSkKKwogLyoKICAqIEVhcmx5IHByZSA0LjAgU2lsaWNvbiByZXF1aXJlZCB0byBkZWxheSByZWFkb3V0IGJ5IGF0IGxlYXN0IDI1bXMsCiAgKiBzaW5jZSB0aGUgRXZlbnQgQ291bnRlciBSZWdpc3RlciB1cGRhdGVkIDI1bXMgYWZ0ZXIgdGhlIGludGVycnVwdApAQCAtNjcsNiArNzIsMTYgQEAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CiAJdW5zaWduZWQgbG9uZyBkZWxheTsKIAl1bnNpZ25lZCBzaG9ydCBrZXljb2RlW0FEUDU1ODhfS0VZTUFQU0laRV07CisJY29uc3Qgc3RydWN0IGFkcDU1ODhfZ3BpX21hcCAqZ3BpbWFwOworCXVuc2lnbmVkIHNob3J0IGdwaW1hcHNpemU7CisjaWZkZWYgQ09ORklHX0dQSU9MSUIKKwl1bnNpZ25lZCBjaGFyIGdwaW9tYXBbTUFYR1BJT107CisJYm9vbCBleHBvcnRfZ3BpbzsKKwlzdHJ1Y3QgZ3Bpb19jaGlwIGdjOworCXN0cnVjdCBtdXRleCBncGlvX2xvY2s7CS8qIFByb3RlY3QgY2FjaGVkIGRpciwgZGF0X291dCAqLworCXU4IGRhdF9vdXRbM107CisJdTggZGlyWzNdOworI2VuZGlmCiB9OwogCiBzdGF0aWMgaW50IGFkcDU1ODhfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCkBAIC04NCwxMiArOTksMjIyIEBACiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfR1BJT0xJQgorc3RhdGljIGludCBhZHA1NTg4X2dwaW9fZ2V0X3ZhbHVlKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZikKK3sKKwlzdHJ1Y3QgYWRwNTU4OF9rcGFkICprcGFkID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhZHA1NTg4X2twYWQsIGdjKTsKKwl1bnNpZ25lZCBpbnQgYmFuayA9IEFEUF9CQU5LKGtwYWQtPmdwaW9tYXBbb2ZmXSk7CisJdW5zaWduZWQgaW50IGJpdCA9IEFEUF9CSVQoa3BhZC0+Z3Bpb21hcFtvZmZdKTsKKworCXJldHVybiAhIShhZHA1NTg4X3JlYWQoa3BhZC0+Y2xpZW50LCBHUElPX0RBVF9TVEFUMSArIGJhbmspICYgYml0KTsKK30KKworc3RhdGljIHZvaWQgYWRwNTU4OF9ncGlvX3NldF92YWx1ZShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCSAgIHVuc2lnbmVkIG9mZiwgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgYWRwNTU4OF9rcGFkICprcGFkID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhZHA1NTg4X2twYWQsIGdjKTsKKwl1bnNpZ25lZCBpbnQgYmFuayA9IEFEUF9CQU5LKGtwYWQtPmdwaW9tYXBbb2ZmXSk7CisJdW5zaWduZWQgaW50IGJpdCA9IEFEUF9CSVQoa3BhZC0+Z3Bpb21hcFtvZmZdKTsKKworCW11dGV4X2xvY2soJmtwYWQtPmdwaW9fbG9jayk7CisKKwlpZiAodmFsKQorCQlrcGFkLT5kYXRfb3V0W2JhbmtdIHw9IGJpdDsKKwllbHNlCisJCWtwYWQtPmRhdF9vdXRbYmFua10gJj0gfmJpdDsKKworCWFkcDU1ODhfd3JpdGUoa3BhZC0+Y2xpZW50LCBHUElPX0RBVF9PVVQxICsgYmFuaywKKwkJCSAgIGtwYWQtPmRhdF9vdXRbYmFua10pOworCisJbXV0ZXhfdW5sb2NrKCZrcGFkLT5ncGlvX2xvY2spOworfQorCitzdGF0aWMgaW50IGFkcDU1ODhfZ3Bpb19kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2ZmKQoreworCXN0cnVjdCBhZHA1NTg4X2twYWQgKmtwYWQgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGFkcDU1ODhfa3BhZCwgZ2MpOworCXVuc2lnbmVkIGludCBiYW5rID0gQURQX0JBTksoa3BhZC0+Z3Bpb21hcFtvZmZdKTsKKwl1bnNpZ25lZCBpbnQgYml0ID0gQURQX0JJVChrcGFkLT5ncGlvbWFwW29mZl0pOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZrcGFkLT5ncGlvX2xvY2spOworCisJa3BhZC0+ZGlyW2JhbmtdICY9IH5iaXQ7CisJcmV0ID0gYWRwNTU4OF93cml0ZShrcGFkLT5jbGllbnQsIEdQSU9fRElSMSArIGJhbmssIGtwYWQtPmRpcltiYW5rXSk7CisKKwltdXRleF91bmxvY2soJmtwYWQtPmdwaW9fbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFkcDU1ODhfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJCSB1bnNpZ25lZCBvZmYsIGludCB2YWwpCit7CisJc3RydWN0IGFkcDU1ODhfa3BhZCAqa3BhZCA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgYWRwNTU4OF9rcGFkLCBnYyk7CisJdW5zaWduZWQgaW50IGJhbmsgPSBBRFBfQkFOSyhrcGFkLT5ncGlvbWFwW29mZl0pOworCXVuc2lnbmVkIGludCBiaXQgPSBBRFBfQklUKGtwYWQtPmdwaW9tYXBbb2ZmXSk7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmtwYWQtPmdwaW9fbG9jayk7CisKKwlrcGFkLT5kaXJbYmFua10gfD0gYml0OworCisJaWYgKHZhbCkKKwkJa3BhZC0+ZGF0X291dFtiYW5rXSB8PSBiaXQ7CisJZWxzZQorCQlrcGFkLT5kYXRfb3V0W2JhbmtdICY9IH5iaXQ7CisKKwlyZXQgPSBhZHA1NTg4X3dyaXRlKGtwYWQtPmNsaWVudCwgR1BJT19EQVRfT1VUMSArIGJhbmssCisJCQkJIGtwYWQtPmRhdF9vdXRbYmFua10pOworCXJldCB8PSBhZHA1NTg4X3dyaXRlKGtwYWQtPmNsaWVudCwgR1BJT19ESVIxICsgYmFuaywKKwkJCQkga3BhZC0+ZGlyW2JhbmtdKTsKKworCW11dGV4X3VubG9jaygma3BhZC0+Z3Bpb19sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFkcDU1ODhfYnVpbGRfZ3Bpb21hcChzdHJ1Y3QgYWRwNTU4OF9rcGFkICprcGFkLAorCQkJCWNvbnN0IHN0cnVjdCBhZHA1NTg4X2twYWRfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJYm9vbCBwaW5fdXNlZFtNQVhHUElPXTsKKwlpbnQgbl91bnVzZWQgPSAwOworCWludCBpOworCisJbWVtc2V0KHBpbl91c2VkLCAwLCBzaXplb2YocGluX3VzZWQpKTsKKworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+cm93czsgaSsrKQorCQlwaW5fdXNlZFtpXSA9IHRydWU7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPmNvbHM7IGkrKykKKwkJcGluX3VzZWRbaSArIEdQSV9QSU5fQ09MX0JBU0UgLSBHUElfUElOX0JBU0VdID0gdHJ1ZTsKKworCWZvciAoaSA9IDA7IGkgPCBrcGFkLT5ncGltYXBzaXplOyBpKyspCisJCXBpbl91c2VkW2twYWQtPmdwaW1hcFtpXS5waW4gLSBHUElfUElOX0JBU0VdID0gdHJ1ZTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhHUElPOyBpKyspCisJCWlmICghcGluX3VzZWRbaV0pCisJCQlrcGFkLT5ncGlvbWFwW25fdW51c2VkKytdID0gaTsKKworCXJldHVybiBuX3VudXNlZDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgYWRwNTU4OF9ncGlvX2FkZChzdHJ1Y3QgYWRwNTU4OF9rcGFkICprcGFkKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZrcGFkLT5jbGllbnQtPmRldjsKKwljb25zdCBzdHJ1Y3QgYWRwNTU4OF9rcGFkX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWNvbnN0IHN0cnVjdCBhZHA1NTg4X2dwaW9fcGxhdGZvcm1fZGF0YSAqZ3Bpb19kYXRhID0gcGRhdGEtPmdwaW9fZGF0YTsKKwlpbnQgaSwgZXJyb3I7CisKKwlpZiAoIWdwaW9fZGF0YSkKKwkJcmV0dXJuIDA7CisKKwlrcGFkLT5nYy5uZ3BpbyA9IGFkcDU1ODhfYnVpbGRfZ3Bpb21hcChrcGFkLCBwZGF0YSk7CisJaWYgKGtwYWQtPmdjLm5ncGlvID09IDApIHsKKwkJZGV2X2luZm8oZGV2LCAiTm8gdW51c2VkIGdwaW9zIGxlZnQgdG8gZXhwb3J0XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJa3BhZC0+ZXhwb3J0X2dwaW8gPSB0cnVlOworCisJa3BhZC0+Z2MuZGlyZWN0aW9uX2lucHV0ID0gYWRwNTU4OF9ncGlvX2RpcmVjdGlvbl9pbnB1dDsKKwlrcGFkLT5nYy5kaXJlY3Rpb25fb3V0cHV0ID0gYWRwNTU4OF9ncGlvX2RpcmVjdGlvbl9vdXRwdXQ7CisJa3BhZC0+Z2MuZ2V0ID0gYWRwNTU4OF9ncGlvX2dldF92YWx1ZTsKKwlrcGFkLT5nYy5zZXQgPSBhZHA1NTg4X2dwaW9fc2V0X3ZhbHVlOworCWtwYWQtPmdjLmNhbl9zbGVlcCA9IDE7CisKKwlrcGFkLT5nYy5iYXNlID0gZ3Bpb19kYXRhLT5ncGlvX3N0YXJ0OworCWtwYWQtPmdjLmxhYmVsID0ga3BhZC0+Y2xpZW50LT5uYW1lOworCWtwYWQtPmdjLm93bmVyID0gVEhJU19NT0RVTEU7CisKKwltdXRleF9pbml0KCZrcGFkLT5ncGlvX2xvY2spOworCisJZXJyb3IgPSBncGlvY2hpcF9hZGQoJmtwYWQtPmdjKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycihkZXYsICJncGlvY2hpcF9hZGQgZmFpbGVkLCBlcnI6ICVkXG4iLCBlcnJvcik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDw9IEFEUF9CQU5LKE1BWEdQSU8pOyBpKyspIHsKKwkJa3BhZC0+ZGF0X291dFtpXSA9IGFkcDU1ODhfcmVhZChrcGFkLT5jbGllbnQsCisJCQkJCQlHUElPX0RBVF9PVVQxICsgaSk7CisJCWtwYWQtPmRpcltpXSA9IGFkcDU1ODhfcmVhZChrcGFkLT5jbGllbnQsIEdQSU9fRElSMSArIGkpOworCX0KKworCWlmIChncGlvX2RhdGEtPnNldHVwKSB7CisJCWVycm9yID0gZ3Bpb19kYXRhLT5zZXR1cChrcGFkLT5jbGllbnQsCisJCQkJCSBrcGFkLT5nYy5iYXNlLCBrcGFkLT5nYy5uZ3BpbywKKwkJCQkJIGdwaW9fZGF0YS0+Y29udGV4dCk7CisJCWlmIChlcnJvcikKKwkJCWRldl93YXJuKGRldiwgInNldHVwIGZhaWxlZCwgJWRcbiIsIGVycm9yKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGFkcDU1ODhfZ3Bpb19yZW1vdmUoc3RydWN0IGFkcDU1ODhfa3BhZCAqa3BhZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAma3BhZC0+Y2xpZW50LT5kZXY7CisJY29uc3Qgc3RydWN0IGFkcDU1ODhfa3BhZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwljb25zdCBzdHJ1Y3QgYWRwNTU4OF9ncGlvX3BsYXRmb3JtX2RhdGEgKmdwaW9fZGF0YSA9IHBkYXRhLT5ncGlvX2RhdGE7CisJaW50IGVycm9yOworCisJaWYgKCFrcGFkLT5leHBvcnRfZ3BpbykKKwkJcmV0dXJuOworCisJaWYgKGdwaW9fZGF0YS0+dGVhcmRvd24pIHsKKwkJZXJyb3IgPSBncGlvX2RhdGEtPnRlYXJkb3duKGtwYWQtPmNsaWVudCwKKwkJCQkJICAgIGtwYWQtPmdjLmJhc2UsIGtwYWQtPmdjLm5ncGlvLAorCQkJCQkgICAgZ3Bpb19kYXRhLT5jb250ZXh0KTsKKwkJaWYgKGVycm9yKQorCQkJZGV2X3dhcm4oZGV2LCAidGVhcmRvd24gZmFpbGVkICVkXG4iLCBlcnJvcik7CisJfQorCisJZXJyb3IgPSBncGlvY2hpcF9yZW1vdmUoJmtwYWQtPmdjKTsKKwlpZiAoZXJyb3IpCisJCWRldl93YXJuKGRldiwgImdwaW9jaGlwX3JlbW92ZSBmYWlsZWQgJWRcbiIsIGVycm9yKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBhZHA1NTg4X2dwaW9fYWRkKHN0cnVjdCBhZHA1NTg4X2twYWQgKmtwYWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZHA1NTg4X2dwaW9fcmVtb3ZlKHN0cnVjdCBhZHA1NTg4X2twYWQgKmtwYWQpCit7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgYWRwNTU4OF9yZXBvcnRfZXZlbnRzKHN0cnVjdCBhZHA1NTg4X2twYWQgKmtwYWQsIGludCBldl9jbnQpCit7CisJaW50IGksIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgZXZfY250OyBpKyspIHsKKwkJaW50IGtleSA9IGFkcDU1ODhfcmVhZChrcGFkLT5jbGllbnQsIEtleV9FVkVOVEEgKyBpKTsKKwkJaW50IGtleV92YWwgPSBrZXkgJiBLRVlfRVZfTUFTSzsKKworCQlpZiAoa2V5X3ZhbCA+PSBHUElfUElOX0JBU0UgJiYga2V5X3ZhbCA8PSBHUElfUElOX0VORCkgeworCQkJZm9yIChqID0gMDsgaiA8IGtwYWQtPmdwaW1hcHNpemU7IGorKykgeworCQkJCWlmIChrZXlfdmFsID09IGtwYWQtPmdwaW1hcFtqXS5waW4pIHsKKwkJCQkJaW5wdXRfcmVwb3J0X3N3aXRjaChrcGFkLT5pbnB1dCwKKwkJCQkJCQlrcGFkLT5ncGltYXBbal0uc3dfZXZ0LAorCQkJCQkJCWtleSAmIEtFWV9FVl9QUkVTU0VEKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJaW5wdXRfcmVwb3J0X2tleShrcGFkLT5pbnB1dCwKKwkJCQkJIGtwYWQtPmtleWNvZGVba2V5X3ZhbCAtIDFdLAorCQkJCQkga2V5ICYgS0VZX0VWX1BSRVNTRUQpOworCQl9CisJfQorfQorCiBzdGF0aWMgdm9pZCBhZHA1NTg4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBhZHA1NTg4X2twYWQgKmtwYWQgPSBjb250YWluZXJfb2Yod29yaywKIAkJCQkJCXN0cnVjdCBhZHA1NTg4X2twYWQsIHdvcmsud29yayk7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGtwYWQtPmNsaWVudDsKLQlpbnQgaSwga2V5LCBzdGF0dXMsIGV2X2NudDsKKwlpbnQgc3RhdHVzLCBldl9jbnQ7CiAKIAlzdGF0dXMgPSBhZHA1NTg4X3JlYWQoY2xpZW50LCBJTlRfU1RBVCk7CiAKQEAgLTk5LDEyICszMjQsNyBAQAogCWlmIChzdGF0dXMgJiBLRV9JTlQpIHsKIAkJZXZfY250ID0gYWRwNTU4OF9yZWFkKGNsaWVudCwgS0VZX0xDS19FQ19TVEFUKSAmIEtFQzsKIAkJaWYgKGV2X2NudCkgewotCQkJZm9yIChpID0gMDsgaSA8IGV2X2NudDsgaSsrKSB7Ci0JCQkJa2V5ID0gYWRwNTU4OF9yZWFkKGNsaWVudCwgS2V5X0VWRU5UQSArIGkpOwotCQkJCWlucHV0X3JlcG9ydF9rZXkoa3BhZC0+aW5wdXQsCi0JCQkJCWtwYWQtPmtleWNvZGVbKGtleSAmIEtFWV9FVl9NQVNLKSAtIDFdLAotCQkJCQlrZXkgJiBLRVlfRVZfUFJFU1NFRCk7Ci0JCQl9CisJCQlhZHA1NTg4X3JlcG9ydF9ldmVudHMoa3BhZCwgZXZfY250KTsKIAkJCWlucHV0X3N5bmMoa3BhZC0+aW5wdXQpOwogCQl9CiAJfQpAQCAtMTI4LDggKzM0OCwxMCBAQAogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhZHA1NTg4X3NldHVwKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IGFkcDU1ODhfa3BhZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJY29uc3Qgc3RydWN0IGFkcDU1ODhfa3BhZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJY29uc3Qgc3RydWN0IGFkcDU1ODhfZ3Bpb19wbGF0Zm9ybV9kYXRhICpncGlvX2RhdGEgPSBwZGF0YS0+Z3Bpb19kYXRhOwogCWludCBpLCByZXQ7CisJdW5zaWduZWQgY2hhciBldnRfbW9kZTEgPSAwLCBldnRfbW9kZTIgPSAwLCBldnRfbW9kZTMgPSAwOwogCiAJcmV0ID0gYWRwNTU4OF93cml0ZShjbGllbnQsIEtQX0dQSU8xLCBLUF9TRUwocGRhdGEtPnJvd3MpKTsKIAlyZXQgfD0gYWRwNTU4OF93cml0ZShjbGllbnQsIEtQX0dQSU8yLCBLUF9TRUwocGRhdGEtPmNvbHMpICYgMHhGRik7CkBAIC0xNDQsNiArMzY2LDMyIEBACiAJZm9yIChpID0gMDsgaSA8IEtFWVBfTUFYX0VWRU5UOyBpKyspCiAJCXJldCB8PSBhZHA1NTg4X3JlYWQoY2xpZW50LCBLZXlfRVZFTlRBKTsKIAorCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+Z3BpbWFwc2l6ZTsgaSsrKSB7CisJCXVuc2lnbmVkIHNob3J0IHBpbiA9IHBkYXRhLT5ncGltYXBbaV0ucGluOworCisJCWlmIChwaW4gPD0gR1BJX1BJTl9ST1dfRU5EKSB7CisJCQlldnRfbW9kZTEgfD0gKDEgPDwgKHBpbiAtIEdQSV9QSU5fUk9XX0JBU0UpKTsKKwkJfSBlbHNlIHsKKwkJCWV2dF9tb2RlMiB8PSAoKDEgPDwgKHBpbiAtIEdQSV9QSU5fQ09MX0JBU0UpKSAmIDB4RkYpOworCQkJZXZ0X21vZGUzIHw9ICgoMSA8PCAocGluIC0gR1BJX1BJTl9DT0xfQkFTRSkpID4+IDgpOworCQl9CisJfQorCisJaWYgKHBkYXRhLT5ncGltYXBzaXplKSB7CisJCXJldCB8PSBhZHA1NTg4X3dyaXRlKGNsaWVudCwgR1BJX0VNMSwgZXZ0X21vZGUxKTsKKwkJcmV0IHw9IGFkcDU1ODhfd3JpdGUoY2xpZW50LCBHUElfRU0yLCBldnRfbW9kZTIpOworCQlyZXQgfD0gYWRwNTU4OF93cml0ZShjbGllbnQsIEdQSV9FTTMsIGV2dF9tb2RlMyk7CisJfQorCisJaWYgKGdwaW9fZGF0YSkgeworCQlmb3IgKGkgPSAwOyBpIDw9IEFEUF9CQU5LKE1BWEdQSU8pOyBpKyspIHsKKwkJCWludCBwdWxsX21hc2sgPSBncGlvX2RhdGEtPnB1bGx1cF9kaXNfbWFzazsKKworCQkJcmV0IHw9IGFkcDU1ODhfd3JpdGUoY2xpZW50LCBHUElPX1BVTEwxICsgaSwKKwkJCQkocHVsbF9tYXNrID4+ICg4ICogaSkpICYgMHhGRik7CisJCX0KKwl9CisKIAlyZXQgfD0gYWRwNTU4OF93cml0ZShjbGllbnQsIElOVF9TVEFULCBDTVAyX0lOVCB8IENNUDFfSU5UIHwKIAkJCQkJT1ZSX0ZMT1dfSU5UIHwgS19MQ0tfSU5UIHwKIAkJCQkJR1BJX0lOVCB8IEtFX0lOVCk7IC8qIFN0YXR1cyBpcyBXMUMgKi8KQEAgLTE1OCwxMSArNDA2LDQ5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBhZHA1NTg4X3JlcG9ydF9zd2l0Y2hfc3RhdGUoc3RydWN0IGFkcDU1ODhfa3BhZCAqa3BhZCkKK3sKKwlpbnQgZ3BpX3N0YXQxID0gYWRwNTU4OF9yZWFkKGtwYWQtPmNsaWVudCwgR1BJT19EQVRfU1RBVDEpOworCWludCBncGlfc3RhdDIgPSBhZHA1NTg4X3JlYWQoa3BhZC0+Y2xpZW50LCBHUElPX0RBVF9TVEFUMik7CisJaW50IGdwaV9zdGF0MyA9IGFkcDU1ODhfcmVhZChrcGFkLT5jbGllbnQsIEdQSU9fREFUX1NUQVQzKTsKKwlpbnQgZ3BpX3N0YXRfdG1wLCBwaW5fbG9jOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGtwYWQtPmdwaW1hcHNpemU7IGkrKykgeworCQl1bnNpZ25lZCBzaG9ydCBwaW4gPSBrcGFkLT5ncGltYXBbaV0ucGluOworCisJCWlmIChwaW4gPD0gR1BJX1BJTl9ST1dfRU5EKSB7CisJCQlncGlfc3RhdF90bXAgPSBncGlfc3RhdDE7CisJCQlwaW5fbG9jID0gcGluIC0gR1BJX1BJTl9ST1dfQkFTRTsKKwkJfSBlbHNlIGlmICgocGluIC0gR1BJX1BJTl9DT0xfQkFTRSkgPCA4KSB7CisJCQlncGlfc3RhdF90bXAgPSBncGlfc3RhdDI7CisJCQlwaW5fbG9jID0gcGluIC0gR1BJX1BJTl9DT0xfQkFTRTsKKwkJfSBlbHNlIHsKKwkJCWdwaV9zdGF0X3RtcCA9IGdwaV9zdGF0MzsKKwkJCXBpbl9sb2MgPSBwaW4gLSBHUElfUElOX0NPTF9CQVNFIC0gODsKKwkJfQorCisJCWlmIChncGlfc3RhdF90bXAgPCAwKSB7CisJCQlkZXZfZXJyKCZrcGFkLT5jbGllbnQtPmRldiwKKwkJCQkiQ2FuJ3QgcmVhZCBHUElPX0RBVF9TVEFUIHN3aXRjaCAlZCBkZWZhdWx0IHRvIE9GRlxuIiwKKwkJCQlwaW4pOworCQkJZ3BpX3N0YXRfdG1wID0gMDsKKwkJfQorCisJCWlucHV0X3JlcG9ydF9zd2l0Y2goa3BhZC0+aW5wdXQsCisJCQkJICAgIGtwYWQtPmdwaW1hcFtpXS5zd19ldnQsCisJCQkJICAgICEoZ3BpX3N0YXRfdG1wICYgKDEgPDwgcGluX2xvYykpKTsKKwl9CisKKwlpbnB1dF9zeW5jKGtwYWQtPmlucHV0KTsKK30KKworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhZHA1NTg4X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgYWRwNTU4OF9rcGFkICprcGFkOwotCXN0cnVjdCBhZHA1NTg4X2twYWRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCWNvbnN0IHN0cnVjdCBhZHA1NTg4X2twYWRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OwogCXVuc2lnbmVkIGludCByZXZpZDsKIAlpbnQgcmV0LCBpOwpAQCAtMTg5LDYgKzQ3NSwzNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAoIXBkYXRhLT5ncGltYXAgJiYgcGRhdGEtPmdwaW1hcHNpemUpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJpbnZhbGlkIGdwaW1hcCBmcm9tIHBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHBkYXRhLT5ncGltYXBzaXplID4gQURQNTU4OF9HUElNQVBTSVpFX01BWCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImludmFsaWQgZ3BpbWFwc2l6ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+Z3BpbWFwc2l6ZTsgaSsrKSB7CisJCXVuc2lnbmVkIHNob3J0IHBpbiA9IHBkYXRhLT5ncGltYXBbaV0ucGluOworCisJCWlmIChwaW4gPCBHUElfUElOX0JBU0UgfHwgcGluID4gR1BJX1BJTl9FTkQpIHsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiaW52YWxpZCBncGkgcGluIGRhdGFcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAocGluIDw9IEdQSV9QSU5fUk9XX0VORCkgeworCQkJaWYgKHBpbiAtIEdQSV9QSU5fUk9XX0JBU0UgKyAxIDw9IHBkYXRhLT5yb3dzKSB7CisJCQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJpbnZhbGlkIGdwaSByb3cgZGF0YVxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAocGluIC0gR1BJX1BJTl9DT0xfQkFTRSArIDEgPD0gcGRhdGEtPmNvbHMpIHsKKwkJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImludmFsaWQgZ3BpIGNvbCBkYXRhXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfQorCX0KKwogCWlmICghY2xpZW50LT5pcnEpIHsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJubyBJUlE/XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yMzMsNiArNTUwLDkgQEAKIAltZW1jcHkoa3BhZC0+a2V5Y29kZSwgcGRhdGEtPmtleW1hcCwKIAkJcGRhdGEtPmtleW1hcHNpemUgKiBpbnB1dC0+a2V5Y29kZXNpemUpOwogCisJa3BhZC0+Z3BpbWFwID0gcGRhdGEtPmdwaW1hcDsKKwlrcGFkLT5ncGltYXBzaXplID0gcGRhdGEtPmdwaW1hcHNpemU7CisKIAkvKiBzZXR1cCBpbnB1dCBkZXZpY2UgKi8KIAlfX3NldF9iaXQoRVZfS0VZLCBpbnB1dC0+ZXZiaXQpOwogCkBAIC0yNDMsNiArNTYzLDExIEBACiAJCV9fc2V0X2JpdChrcGFkLT5rZXljb2RlW2ldICYgS0VZX01BWCwgaW5wdXQtPmtleWJpdCk7CiAJX19jbGVhcl9iaXQoS0VZX1JFU0VSVkVELCBpbnB1dC0+a2V5Yml0KTsKIAorCWlmIChrcGFkLT5ncGltYXBzaXplKQorCQlfX3NldF9iaXQoRVZfU1csIGlucHV0LT5ldmJpdCk7CisJZm9yIChpID0gMDsgaSA8IGtwYWQtPmdwaW1hcHNpemU7IGkrKykKKwkJX19zZXRfYml0KGtwYWQtPmdwaW1hcFtpXS5zd19ldnQsIGlucHV0LT5zd2JpdCk7CisKIAllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dCk7CiAJaWYgKGVycm9yKSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAidW5hYmxlIHRvIHJlZ2lzdGVyIGlucHV0IGRldmljZVxuIik7CkBAIC0yNjEsNiArNTg2LDEzIEBACiAJaWYgKGVycm9yKQogCQlnb3RvIGVycl9mcmVlX2lycTsKIAorCWlmIChrcGFkLT5ncGltYXBzaXplKQorCQlhZHA1NTg4X3JlcG9ydF9zd2l0Y2hfc3RhdGUoa3BhZCk7CisKKwllcnJvciA9IGFkcDU1ODhfZ3Bpb19hZGQoa3BhZCk7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycl9mcmVlX2lycTsKKwogCWRldmljZV9pbml0X3dha2V1cCgmY2xpZW50LT5kZXYsIDEpOwogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGtwYWQpOwogCkBAIC0yODcsNiArNjE5LDcgQEAKIAlmcmVlX2lycShjbGllbnQtPmlycSwga3BhZCk7CiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZrcGFkLT53b3JrKTsKIAlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShrcGFkLT5pbnB1dCk7CisJYWRwNTU4OF9ncGlvX3JlbW92ZShrcGFkKTsKIAlrZnJlZShrcGFkKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMKaW5kZXggYjgyMTNmZC4uYTlmZDE0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCkBAIC0zMSw2ICszMSw3IEBACiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJaW50IHRpbWVyX2RlYm91bmNlOwkvKiBpbiBtc2VjcyAqLwogCWJvb2wgZGlzYWJsZWQ7CiB9OwogCkBAIC0xMDksNyArMTEwLDcgQEAKIAkJICogRGlzYWJsZSBJUlEgYW5kIHBvc3NpYmxlIGRlYm91bmNpbmcgdGltZXIuCiAJCSAqLwogCQlkaXNhYmxlX2lycShncGlvX3RvX2lycShiZGF0YS0+YnV0dG9uLT5ncGlvKSk7Ci0JCWlmIChiZGF0YS0+YnV0dG9uLT5kZWJvdW5jZV9pbnRlcnZhbCkKKwkJaWYgKGJkYXRhLT50aW1lcl9kZWJvdW5jZSkKIAkJCWRlbF90aW1lcl9zeW5jKCZiZGF0YS0+dGltZXIpOwogCiAJCWJkYXRhLT5kaXNhYmxlZCA9IHRydWU7CkBAIC0zNDcsOSArMzQ4LDkgQEAKIAogCUJVR19PTihpcnEgIT0gZ3Bpb190b19pcnEoYnV0dG9uLT5ncGlvKSk7CiAKLQlpZiAoYnV0dG9uLT5kZWJvdW5jZV9pbnRlcnZhbCkKKwlpZiAoYmRhdGEtPnRpbWVyX2RlYm91bmNlKQogCQltb2RfdGltZXIoJmJkYXRhLT50aW1lciwKLQkJCWppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGJ1dHRvbi0+ZGVib3VuY2VfaW50ZXJ2YWwpKTsKKwkJCWppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGJkYXRhLT50aW1lcl9kZWJvdW5jZSkpOwogCWVsc2UKIAkJc2NoZWR1bGVfd29yaygmYmRhdGEtPndvcmspOwogCkBAIC0zODMsNiArMzg0LDE0IEBACiAJCWdvdG8gZmFpbDM7CiAJfQogCisJaWYgKGJ1dHRvbi0+ZGVib3VuY2VfaW50ZXJ2YWwpIHsKKwkJZXJyb3IgPSBncGlvX3NldF9kZWJvdW5jZShidXR0b24tPmdwaW8sCisJCQkJCSAgYnV0dG9uLT5kZWJvdW5jZV9pbnRlcnZhbCAqIDEwMDApOworCQkvKiB1c2UgdGltZXIgaWYgZ3Bpb2xpYiBkb2Vzbid0IHByb3ZpZGUgZGVib3VuY2UgKi8KKwkJaWYgKGVycm9yIDwgMCkKKwkJCWJkYXRhLT50aW1lcl9kZWJvdW5jZSA9IGJ1dHRvbi0+ZGVib3VuY2VfaW50ZXJ2YWw7CisJfQorCiAJaXJxID0gZ3Bpb190b19pcnEoYnV0dG9uLT5ncGlvKTsKIAlpZiAoaXJxIDwgMCkgewogCQllcnJvciA9IGlycTsKQEAgLTQ5OCw3ICs1MDcsNyBAQAogIGZhaWwyOgogCXdoaWxlICgtLWkgPj0gMCkgewogCQlmcmVlX2lycShncGlvX3RvX2lycShwZGF0YS0+YnV0dG9uc1tpXS5ncGlvKSwgJmRkYXRhLT5kYXRhW2ldKTsKLQkJaWYgKHBkYXRhLT5idXR0b25zW2ldLmRlYm91bmNlX2ludGVydmFsKQorCQlpZiAoZGRhdGEtPmRhdGFbaV0udGltZXJfZGVib3VuY2UpCiAJCQlkZWxfdGltZXJfc3luYygmZGRhdGEtPmRhdGFbaV0udGltZXIpOwogCQljYW5jZWxfd29ya19zeW5jKCZkZGF0YS0+ZGF0YVtpXS53b3JrKTsKIAkJZ3Bpb19mcmVlKHBkYXRhLT5idXR0b25zW2ldLmdwaW8pOwpAQCAtNTI2LDcgKzUzNSw3IEBACiAJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5uYnV0dG9uczsgaSsrKSB7CiAJCWludCBpcnEgPSBncGlvX3RvX2lycShwZGF0YS0+YnV0dG9uc1tpXS5ncGlvKTsKIAkJZnJlZV9pcnEoaXJxLCAmZGRhdGEtPmRhdGFbaV0pOwotCQlpZiAocGRhdGEtPmJ1dHRvbnNbaV0uZGVib3VuY2VfaW50ZXJ2YWwpCisJCWlmIChkZGF0YS0+ZGF0YVtpXS50aW1lcl9kZWJvdW5jZSkKIAkJCWRlbF90aW1lcl9zeW5jKCZkZGF0YS0+ZGF0YVtpXS50aW1lcik7CiAJCWNhbmNlbF93b3JrX3N5bmMoJmRkYXRhLT5kYXRhW2ldLndvcmspOwogCQlncGlvX2ZyZWUocGRhdGEtPmJ1dHRvbnNbaV0uZ3Bpbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2xtODMyMy5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9sbTgzMjMuYwppbmRleCA0MGIwMzJmLi5mN2MyYTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2xtODMyMy5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbG04MzIzLmMKQEAgLTY0Miw2ICs2NDIsNyBAQAogCXN0cnVjdCBsbTgzMjNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlkZXY7CiAJc3RydWN0IGxtODMyM19jaGlwICpsbTsKKwlpbnQgcHdtOwogCWludCBpLCBlcnI7CiAJdW5zaWduZWQgbG9uZyB0bW87CiAJdTggZGF0YVsyXTsKQEAgLTcxMCw4ICs3MTEsOSBAQAogCQlnb3RvIGZhaWwxOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBMTTgzMjNfTlVNX1BXTVM7IGkrKykgewotCQllcnIgPSBpbml0X3B3bShsbSwgaSArIDEsICZjbGllbnQtPmRldiwgcGRhdGEtPnB3bV9uYW1lc1tpXSk7CisJZm9yIChwd20gPSAwOyBwd20gPCBMTTgzMjNfTlVNX1BXTVM7IHB3bSsrKSB7CisJCWVyciA9IGluaXRfcHdtKGxtLCBwd20gKyAxLCAmY2xpZW50LT5kZXYsCisJCQkgICAgICAgcGRhdGEtPnB3bV9uYW1lc1twd21dKTsKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIGZhaWwyOwogCX0KQEAgLTc2NCw5ICs3NjYsOSBAQAogZmFpbDM6CiAJZGV2aWNlX3JlbW92ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2Rpc2FibGVfa3ApOwogZmFpbDI6Ci0Jd2hpbGUgKC0taSA+PSAwKQotCQlpZiAobG0tPnB3bVtpXS5lbmFibGVkKQotCQkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmxtLT5wd21baV0uY2Rldik7CisJd2hpbGUgKC0tcHdtID49IDApCisJCWlmIChsbS0+cHdtW3B3bV0uZW5hYmxlZCkKKwkJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZsbS0+cHdtW3B3bV0uY2Rldik7CiBmYWlsMToKIAlpbnB1dF9mcmVlX2RldmljZShpZGV2KTsKIAlrZnJlZShsbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21hdHJpeF9rZXlwYWQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbWF0cml4X2tleXBhZC5jCmluZGV4IGI0NDNlMDguLmIwMmU0MjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21hdHJpeF9rZXlwYWQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21hdHJpeF9rZXlwYWQuYwpAQCAtMzcsNiArMzcsNyBAQAogCXNwaW5sb2NrX3QgbG9jazsKIAlib29sIHNjYW5fcGVuZGluZzsKIAlib29sIHN0b3BwZWQ7CisJYm9vbCBncGlvX2FsbF9kaXNhYmxlZDsKIH07CiAKIC8qCkBAIC04Nyw4ICs4OCwxMiBAQAogCWNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5cGFkX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0ga2V5cGFkLT5wZGF0YTsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3Jvd19ncGlvczsgaSsrKQotCQllbmFibGVfaXJxKGdwaW9fdG9faXJxKHBkYXRhLT5yb3dfZ3Bpb3NbaV0pKTsKKwlpZiAocGRhdGEtPmNsdXN0ZXJlZF9pcnEgPiAwKQorCQllbmFibGVfaXJxKHBkYXRhLT5jbHVzdGVyZWRfaXJxKTsKKwllbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fcm93X2dwaW9zOyBpKyspCisJCQllbmFibGVfaXJxKGdwaW9fdG9faXJxKHBkYXRhLT5yb3dfZ3Bpb3NbaV0pKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGRpc2FibGVfcm93X2lycXMoc3RydWN0IG1hdHJpeF9rZXlwYWQgKmtleXBhZCkKQEAgLTk2LDggKzEwMSwxMiBAQAogCWNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5cGFkX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0ga2V5cGFkLT5wZGF0YTsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3Jvd19ncGlvczsgaSsrKQotCQlkaXNhYmxlX2lycV9ub3N5bmMoZ3Bpb190b19pcnEocGRhdGEtPnJvd19ncGlvc1tpXSkpOworCWlmIChwZGF0YS0+Y2x1c3RlcmVkX2lycSA+IDApCisJCWRpc2FibGVfaXJxX25vc3luYyhwZGF0YS0+Y2x1c3RlcmVkX2lycSk7CisJZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3Jvd19ncGlvczsgaSsrKQorCQkJZGlzYWJsZV9pcnFfbm9zeW5jKGdwaW9fdG9faXJxKHBkYXRhLT5yb3dfZ3Bpb3NbaV0pKTsKKwl9CiB9CiAKIC8qCkBAIC0yMTYsMjUgKzIyNSw1OCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IG1hdHJpeF9rZXlwYWRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBtYXRyaXhfa2V5cGFkX2VuYWJsZV93YWtldXAoc3RydWN0IG1hdHJpeF9rZXlwYWQgKmtleXBhZCkKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IG1hdHJpeF9rZXlwYWQgKmtleXBhZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCWNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5cGFkX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0ga2V5cGFkLT5wZGF0YTsKKwl1bnNpZ25lZCBpbnQgZ3BpbzsKIAlpbnQgaTsKIAotCW1hdHJpeF9rZXlwYWRfc3RvcChrZXlwYWQtPmlucHV0X2Rldik7CisJaWYgKHBkYXRhLT5jbHVzdGVyZWRfaXJxID4gMCkgeworCQlpZiAoZW5hYmxlX2lycV93YWtlKHBkYXRhLT5jbHVzdGVyZWRfaXJxKSA9PSAwKQorCQkJa2V5cGFkLT5ncGlvX2FsbF9kaXNhYmxlZCA9IHRydWU7CisJfSBlbHNlIHsKIAotCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkgewogCQlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9yb3dfZ3Bpb3M7IGkrKykgewogCQkJaWYgKCF0ZXN0X2JpdChpLCBrZXlwYWQtPmRpc2FibGVkX2dwaW9zKSkgewotCQkJCXVuc2lnbmVkIGludCBncGlvID0gcGRhdGEtPnJvd19ncGlvc1tpXTsKKwkJCQlncGlvID0gcGRhdGEtPnJvd19ncGlvc1tpXTsKIAogCQkJCWlmIChlbmFibGVfaXJxX3dha2UoZ3Bpb190b19pcnEoZ3BpbykpID09IDApCiAJCQkJCV9fc2V0X2JpdChpLCBrZXlwYWQtPmRpc2FibGVkX2dwaW9zKTsKIAkJCX0KIAkJfQogCX0KK30KKworc3RhdGljIHZvaWQgbWF0cml4X2tleXBhZF9kaXNhYmxlX3dha2V1cChzdHJ1Y3QgbWF0cml4X2tleXBhZCAqa2V5cGFkKQoreworCWNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5cGFkX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0ga2V5cGFkLT5wZGF0YTsKKwl1bnNpZ25lZCBpbnQgZ3BpbzsKKwlpbnQgaTsKKworCWlmIChwZGF0YS0+Y2x1c3RlcmVkX2lycSA+IDApIHsKKwkJaWYgKGtleXBhZC0+Z3Bpb19hbGxfZGlzYWJsZWQpIHsKKwkJCWRpc2FibGVfaXJxX3dha2UocGRhdGEtPmNsdXN0ZXJlZF9pcnEpOworCQkJa2V5cGFkLT5ncGlvX2FsbF9kaXNhYmxlZCA9IGZhbHNlOworCQl9CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fcm93X2dwaW9zOyBpKyspIHsKKwkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoaSwga2V5cGFkLT5kaXNhYmxlZF9ncGlvcykpIHsKKwkJCQlncGlvID0gcGRhdGEtPnJvd19ncGlvc1tpXTsKKwkJCQlkaXNhYmxlX2lycV93YWtlKGdwaW9fdG9faXJxKGdwaW8pKTsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIGludCBtYXRyaXhfa2V5cGFkX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgbWF0cml4X2tleXBhZCAqa2V5cGFkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwltYXRyaXhfa2V5cGFkX3N0b3Aoa2V5cGFkLT5pbnB1dF9kZXYpOworCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKQorCQltYXRyaXhfa2V5cGFkX2VuYWJsZV93YWtldXAoa2V5cGFkKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjQzLDE4ICsyODUsOSBAQAogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgbWF0cml4X2tleXBhZCAqa2V5cGFkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0JY29uc3Qgc3RydWN0IG1hdHJpeF9rZXlwYWRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBrZXlwYWQtPnBkYXRhOwotCWludCBpOwogCi0JaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3Jvd19ncGlvczsgaSsrKSB7Ci0JCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KGksIGtleXBhZC0+ZGlzYWJsZWRfZ3Bpb3MpKSB7Ci0JCQkJdW5zaWduZWQgaW50IGdwaW8gPSBwZGF0YS0+cm93X2dwaW9zW2ldOwotCi0JCQkJZGlzYWJsZV9pcnFfd2FrZShncGlvX3RvX2lycShncGlvKSk7Ci0JCQl9Ci0JCX0KLQl9CisJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKQorCQltYXRyaXhfa2V5cGFkX2Rpc2FibGVfd2FrZXVwKGtleXBhZCk7CiAKIAltYXRyaXhfa2V5cGFkX3N0YXJ0KGtleXBhZC0+aW5wdXRfZGV2KTsKIApAQCAtMjk2LDE3ICszMjksMzEgQEAKIAkJZ3Bpb19kaXJlY3Rpb25faW5wdXQocGRhdGEtPnJvd19ncGlvc1tpXSk7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fcm93X2dwaW9zOyBpKyspIHsKLQkJZXJyID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEocGRhdGEtPnJvd19ncGlvc1tpXSksCisJaWYgKHBkYXRhLT5jbHVzdGVyZWRfaXJxID4gMCkgeworCQllcnIgPSByZXF1ZXN0X2lycShwZGF0YS0+Y2x1c3RlcmVkX2lycSwKIAkJCQltYXRyaXhfa2V5cGFkX2ludGVycnVwdCwKLQkJCQlJUlFGX0RJU0FCTEVEIHwKLQkJCQlJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCisJCQkJcGRhdGEtPmNsdXN0ZXJlZF9pcnFfZmxhZ3MsCiAJCQkJIm1hdHJpeC1rZXlwYWQiLCBrZXlwYWQpOwogCQlpZiAoZXJyKSB7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkJIlVuYWJsZSB0byBhY3F1aXJlIGludGVycnVwdCBmb3IgR1BJTyBsaW5lICVpXG4iLAotCQkJCXBkYXRhLT5yb3dfZ3Bpb3NbaV0pOwotCQkJZ290byBlcnJfZnJlZV9pcnFzOworCQkJCSJVbmFibGUgdG8gYWNxdWlyZSBjbHVzdGVyZWQgaW50ZXJydXB0XG4iKTsKKwkJCWdvdG8gZXJyX2ZyZWVfcm93czsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3Jvd19ncGlvczsgaSsrKSB7CisJCQllcnIgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShwZGF0YS0+cm93X2dwaW9zW2ldKSwKKwkJCQkJbWF0cml4X2tleXBhZF9pbnRlcnJ1cHQsCisJCQkJCUlSUUZfRElTQUJMRUQgfAorCQkJCQlJUlFGX1RSSUdHRVJfUklTSU5HIHwKKwkJCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcsCisJCQkJCSJtYXRyaXgta2V5cGFkIiwga2V5cGFkKTsKKwkJCWlmIChlcnIpIHsKKwkJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJCSJVbmFibGUgdG8gYWNxdWlyZSBpbnRlcnJ1cHQgIgorCQkJCQkiZm9yIEdQSU8gbGluZSAlaVxuIiwKKwkJCQkJcGRhdGEtPnJvd19ncGlvc1tpXSk7CisJCQkJZ290byBlcnJfZnJlZV9pcnFzOworCQkJfQogCQl9CiAJfQogCkBAIC00MTgsMTEgKzQ2NSwxNiBAQAogCiAJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDApOwogCi0JZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fcm93X2dwaW9zOyBpKyspIHsKLQkJZnJlZV9pcnEoZ3Bpb190b19pcnEocGRhdGEtPnJvd19ncGlvc1tpXSksIGtleXBhZCk7Ci0JCWdwaW9fZnJlZShwZGF0YS0+cm93X2dwaW9zW2ldKTsKKwlpZiAocGRhdGEtPmNsdXN0ZXJlZF9pcnEgPiAwKSB7CisJCWZyZWVfaXJxKHBkYXRhLT5jbHVzdGVyZWRfaXJxLCBrZXlwYWQpOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3Jvd19ncGlvczsgaSsrKQorCQkJZnJlZV9pcnEoZ3Bpb190b19pcnEocGRhdGEtPnJvd19ncGlvc1tpXSksIGtleXBhZCk7CiAJfQogCisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fcm93X2dwaW9zOyBpKyspCisJCWdwaW9fZnJlZShwZGF0YS0+cm93X2dwaW9zW2ldKTsKKwogCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX2NvbF9ncGlvczsgaSsrKQogCQlncGlvX2ZyZWUocGRhdGEtPmNvbF9ncGlvc1tpXSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbWNzX3RvdWNoa2V5LmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21jc190b3VjaGtleS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYjg0OWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21jc190b3VjaGtleS5jCkBAIC0wLDAgKzEsMjM5IEBACisvKgorICogbWNzX3RvdWNoa2V5LmMgLSBUb3VjaGtleSBkcml2ZXIgZm9yIE1FTEZBUyBNQ1M1MDAwLzUwODAgY29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLkx0ZAorICogQXV0aG9yOiBIZXVuZ0p1biBLaW0gPHJpdmVyZnVsLmtpbUBzYW1zdW5nLmNvbT4KKyAqIEF1dGhvcjogSm9vbnlvdW5nIFNoaW0gPGp5MDkyMi5zaGltQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvbWNzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKy8qIE1DUzUwMDAgVG91Y2hrZXkgKi8KKyNkZWZpbmUgTUNTNTAwMF9UT1VDSEtFWV9TVEFUVVMJCTB4MDQKKyNkZWZpbmUgTUNTNTAwMF9UT1VDSEtFWV9TVEFUVVNfUFJFU1MJNworI2RlZmluZSBNQ1M1MDAwX1RPVUNIS0VZX0ZXCQkweDBhCisjZGVmaW5lIE1DUzUwMDBfVE9VQ0hLRVlfQkFTRV9WQUwJMHg2MQorCisvKiBNQ1M1MDgwIFRvdWNoa2V5ICovCisjZGVmaW5lIE1DUzUwODBfVE9VQ0hLRVlfU1RBVFVTCQkweDAwCisjZGVmaW5lIE1DUzUwODBfVE9VQ0hLRVlfU1RBVFVTX1BSRVNTCTMKKyNkZWZpbmUgTUNTNTA4MF9UT1VDSEtFWV9GVwkJMHgwMQorI2RlZmluZSBNQ1M1MDgwX1RPVUNIS0VZX0JBU0VfVkFMCTB4MQorCitlbnVtIG1jc190b3VjaGtleV90eXBlIHsKKwlNQ1M1MDAwX1RPVUNIS0VZLAorCU1DUzUwODBfVE9VQ0hLRVksCit9OworCitzdHJ1Y3QgbWNzX3RvdWNoa2V5X2NoaXAgeworCXVuc2lnbmVkIGludCBzdGF0dXNfcmVnOworCXVuc2lnbmVkIGludCBwcmVzc2JpdDsKKwl1bnNpZ25lZCBpbnQgcHJlc3NfaW52ZXJ0OworCXVuc2lnbmVkIGludCBiYXNldmFsOworfTsKKworc3RydWN0IG1jc190b3VjaGtleV9kYXRhIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKKwlzdHJ1Y3QgbWNzX3RvdWNoa2V5X2NoaXAgY2hpcDsKKwl1bnNpZ25lZCBpbnQga2V5X2NvZGU7CisJdW5zaWduZWQgaW50IGtleV92YWw7CisJdW5zaWduZWQgc2hvcnQga2V5Y29kZXNbXTsKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtY3NfdG91Y2hrZXlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbWNzX3RvdWNoa2V5X2RhdGEgKmRhdGEgPSBkZXZfaWQ7CisJc3RydWN0IG1jc190b3VjaGtleV9jaGlwICpjaGlwID0gJmRhdGEtPmNoaXA7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IGRhdGEtPmlucHV0X2RldjsKKwl1bnNpZ25lZCBpbnQga2V5X3ZhbDsKKwl1bnNpZ25lZCBpbnQgcHJlc3NlZDsKKwlpbnQgdmFsOworCisJdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgY2hpcC0+c3RhdHVzX3JlZyk7CisJaWYgKHZhbCA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJpMmMgcmVhZCBlcnJvciBbJWRdXG4iLCB2YWwpOworCQlnb3RvIG91dDsKKwl9CisKKwlwcmVzc2VkID0gKHZhbCAmICgxIDw8IGNoaXAtPnByZXNzYml0KSkgPj4gY2hpcC0+cHJlc3NiaXQ7CisJaWYgKGNoaXAtPnByZXNzX2ludmVydCkKKwkJcHJlc3NlZCBePSBjaGlwLT5wcmVzc19pbnZlcnQ7CisKKwkvKiBrZXlfdmFsIGlzIDAgd2hlbiByZWxlYXNlZCwgc28gd2Ugc2hvdWxkIHVzZSBrZXlfdmFsIG9mIHByZXNzLiAqLworCWlmIChwcmVzc2VkKSB7CisJCWtleV92YWwgPSB2YWwgJiAoMHhmZiA+PiAoOCAtIGNoaXAtPnByZXNzYml0KSk7CisJCWlmICgha2V5X3ZhbCkKKwkJCWdvdG8gb3V0OworCQlrZXlfdmFsIC09IGNoaXAtPmJhc2V2YWw7CisJCWRhdGEtPmtleV9jb2RlID0gZGF0YS0+a2V5Y29kZXNba2V5X3ZhbF07CisJCWRhdGEtPmtleV92YWwgPSBrZXlfdmFsOworCX0KKworCWlucHV0X2V2ZW50KGlucHV0LCBFVl9NU0MsIE1TQ19TQ0FOLCBkYXRhLT5rZXlfdmFsKTsKKwlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBkYXRhLT5rZXlfY29kZSwgcHJlc3NlZCk7CisJaW5wdXRfc3luYyhpbnB1dCk7CisKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgImtleSAlZCAlZCAlc1xuIiwgZGF0YS0+a2V5X3ZhbCwgZGF0YS0+a2V5X2NvZGUsCisJCXByZXNzZWQgPyAicHJlc3NlZCIgOiAicmVsZWFzZWQiKTsKKworIG91dDoKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1jc190b3VjaGtleV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJY29uc3Qgc3RydWN0IG1jc19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgbWNzX3RvdWNoa2V5X2RhdGEgKmRhdGE7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCXVuc2lnbmVkIGludCBmd19yZWc7CisJaW50IGZ3X3ZlcjsKKwlpbnQgZXJyb3I7CisJaW50IGk7CisKKwlwZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFwZGF0YSkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIm5vIHBsYXRmb3JtIGRhdGEgZGVmaW5lZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWNzX3RvdWNoa2V5X2RhdGEpICsKKwkJCXNpemVvZihkYXRhLT5rZXljb2Rlc1swXSkgKiAocGRhdGEtPmtleV9tYXh2YWwgKyAxKSwKKwkJCUdGUF9LRVJORUwpOworCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghZGF0YSB8fCAhaW5wdXRfZGV2KSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxuIik7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9tZW07CisJfQorCisJZGF0YS0+Y2xpZW50ID0gY2xpZW50OworCWRhdGEtPmlucHV0X2RldiA9IGlucHV0X2RldjsKKworCWlmIChpZC0+ZHJpdmVyX2RhdGEgPT0gTUNTNTAwMF9UT1VDSEtFWSkgeworCQlkYXRhLT5jaGlwLnN0YXR1c19yZWcgPSBNQ1M1MDAwX1RPVUNIS0VZX1NUQVRVUzsKKwkJZGF0YS0+Y2hpcC5wcmVzc2JpdCA9IE1DUzUwMDBfVE9VQ0hLRVlfU1RBVFVTX1BSRVNTOworCQlkYXRhLT5jaGlwLmJhc2V2YWwgPSBNQ1M1MDAwX1RPVUNIS0VZX0JBU0VfVkFMOworCQlmd19yZWcgPSBNQ1M1MDAwX1RPVUNIS0VZX0ZXOworCX0gZWxzZSB7CisJCWRhdGEtPmNoaXAuc3RhdHVzX3JlZyA9IE1DUzUwODBfVE9VQ0hLRVlfU1RBVFVTOworCQlkYXRhLT5jaGlwLnByZXNzYml0ID0gTUNTNTA4MF9UT1VDSEtFWV9TVEFUVVNfUFJFU1M7CisJCWRhdGEtPmNoaXAucHJlc3NfaW52ZXJ0ID0gMTsKKwkJZGF0YS0+Y2hpcC5iYXNldmFsID0gTUNTNTA4MF9UT1VDSEtFWV9CQVNFX1ZBTDsKKwkJZndfcmVnID0gTUNTNTA4MF9UT1VDSEtFWV9GVzsKKwl9CisKKwlmd192ZXIgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBmd19yZWcpOworCWlmIChmd192ZXIgPCAwKSB7CisJCWVycm9yID0gZndfdmVyOworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImkyYyByZWFkIGVycm9yWyVkXVxuIiwgZXJyb3IpOworCQlnb3RvIGVycl9mcmVlX21lbTsKKwl9CisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiRmlybXdhcmUgdmVyc2lvbjogJWRcbiIsIGZ3X3Zlcik7CisKKwlpbnB1dF9kZXYtPm5hbWUgPSAiTUVMUEFTIE1DUyBUb3VjaGtleSI7CisJaW5wdXRfZGV2LT5pZC5idXN0eXBlID0gQlVTX0kyQzsKKwlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmY2xpZW50LT5kZXY7CisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSk7CisJaWYgKCFwZGF0YS0+bm9fYXV0b3JlcGVhdCkKKwkJaW5wdXRfZGV2LT5ldmJpdFswXSB8PSBCSVRfTUFTSyhFVl9SRVApOworCWlucHV0X2Rldi0+a2V5Y29kZSA9IGRhdGEtPmtleWNvZGVzOworCWlucHV0X2Rldi0+a2V5Y29kZXNpemUgPSBzaXplb2YoZGF0YS0+a2V5Y29kZXNbMF0pOworCWlucHV0X2Rldi0+a2V5Y29kZW1heCA9IHBkYXRhLT5rZXlfbWF4dmFsICsgMTsKKworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+a2V5bWFwX3NpemU7IGkrKykgeworCQl1bnNpZ25lZCBpbnQgdmFsID0gTUNTX0tFWV9WQUwocGRhdGEtPmtleW1hcFtpXSk7CisJCXVuc2lnbmVkIGludCBjb2RlID0gTUNTX0tFWV9DT0RFKHBkYXRhLT5rZXltYXBbaV0pOworCisJCWRhdGEtPmtleWNvZGVzW3ZhbF0gPSBjb2RlOworCQlfX3NldF9iaXQoY29kZSwgaW5wdXRfZGV2LT5rZXliaXQpOworCX0KKworCWlucHV0X3NldF9jYXBhYmlsaXR5KGlucHV0X2RldiwgRVZfTVNDLCBNU0NfU0NBTik7CisJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBkYXRhKTsKKworCWlmIChwZGF0YS0+Y2ZnX3BpbikKKwkJcGRhdGEtPmNmZ19waW4oKTsKKworCWVycm9yID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoY2xpZW50LT5pcnEsIE5VTEwsIG1jc190b3VjaGtleV9pbnRlcnJ1cHQsCisJCQlJUlFGX1RSSUdHRVJfRkFMTElORywgY2xpZW50LT5kZXYuZHJpdmVyLT5uYW1lLCBkYXRhKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgaW50ZXJydXB0XG4iKTsKKwkJZ290byBlcnJfZnJlZV9tZW07CisJfQorCisJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXJyX2ZyZWVfaXJxOworCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGF0YSk7CisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2lycToKKwlmcmVlX2lycShjbGllbnQtPmlycSwgZGF0YSk7CitlcnJfZnJlZV9tZW06CisJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKKwlrZnJlZShkYXRhKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1jc190b3VjaGtleV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgbWNzX3RvdWNoa2V5X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWZyZWVfaXJxKGNsaWVudC0+aXJxLCBkYXRhKTsKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShkYXRhLT5pbnB1dF9kZXYpOworCWtmcmVlKGRhdGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBtY3NfdG91Y2hrZXlfaWRbXSA9IHsKKwl7ICJtY3M1MDAwX3RvdWNoa2V5IiwgTUNTNTAwMF9UT1VDSEtFWSB9LAorCXsgIm1jczUwODBfdG91Y2hrZXkiLCBNQ1M1MDgwX1RPVUNIS0VZIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIG1jc190b3VjaGtleV9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtY3NfdG91Y2hrZXlfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gIm1jc190b3VjaGtleSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IG1jc190b3VjaGtleV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1jc190b3VjaGtleV9yZW1vdmUpLAorCS5pZF90YWJsZQk9IG1jc190b3VjaGtleV9pZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1jc190b3VjaGtleV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZtY3NfdG91Y2hrZXlfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG1jc190b3VjaGtleV9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJm1jc190b3VjaGtleV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtY3NfdG91Y2hrZXlfaW5pdCk7Cittb2R1bGVfZXhpdChtY3NfdG91Y2hrZXlfZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0FVVEhPUigiSm9vbnlvdW5nIFNoaW0gPGp5MDkyMi5zaGltQHNhbXN1bmcuY29tPiIpOworTU9EVUxFX0FVVEhPUigiSGV1bmdKdW4gS2ltIDxyaXZlcmZ1bC5raW1Ac2Ftc3VuZy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRvdWNoa2V5IGRyaXZlciBmb3IgTUVMRkFTIE1DUzUwMDAvNTA4MCBjb250cm9sbGVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NhbXN1bmcta2V5cGFkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NhbXN1bmcta2V5cGFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY4OWY0OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2Ftc3VuZy1rZXlwYWQuYwpAQCAtMCwwICsxLDQ5MSBAQAorLyoKKyAqIFNhbXN1bmcga2V5cGFkIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLkx0ZAorICogQXV0aG9yOiBKb29ueW91bmcgU2hpbSA8ankwOTIyLnNoaW1Ac2Ftc3VuZy5jb20+CisgKiBBdXRob3I6IERvbmdod2EgTGVlIDxkaDA5LmxlZUBzYW1zdW5nLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8cGxhdC9rZXlwYWQuaD4KKworI2RlZmluZSBTQU1TVU5HX0tFWUlGQ09OCQkJMHgwMAorI2RlZmluZSBTQU1TVU5HX0tFWUlGU1RTQ0xSCQkJMHgwNAorI2RlZmluZSBTQU1TVU5HX0tFWUlGQ09MCQkJMHgwOAorI2RlZmluZSBTQU1TVU5HX0tFWUlGUk9XCQkJMHgwYworI2RlZmluZSBTQU1TVU5HX0tFWUlGRkMJCQkJMHgxMAorCisvKiBTQU1TVU5HX0tFWUlGQ09OICovCisjZGVmaW5lIFNBTVNVTkdfS0VZSUZDT05fSU5UX0ZfRU4JCSgxIDw8IDApCisjZGVmaW5lIFNBTVNVTkdfS0VZSUZDT05fSU5UX1JfRU4JCSgxIDw8IDEpCisjZGVmaW5lIFNBTVNVTkdfS0VZSUZDT05fREZfRU4JCQkoMSA8PCAyKQorI2RlZmluZSBTQU1TVU5HX0tFWUlGQ09OX0ZDX0VOCQkJKDEgPDwgMykKKyNkZWZpbmUgU0FNU1VOR19LRVlJRkNPTl9XQUtFVVBFTgkJKDEgPDwgNCkKKworLyogU0FNU1VOR19LRVlJRlNUU0NMUiAqLworI2RlZmluZSBTQU1TVU5HX0tFWUlGU1RTQ0xSX1BfSU5UX01BU0sJCSgweGZmIDw8IDApCisjZGVmaW5lIFNBTVNVTkdfS0VZSUZTVFNDTFJfUl9JTlRfTUFTSwkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgU0FNU1VOR19LRVlJRlNUU0NMUl9SX0lOVF9PRkZTRVQJOAorI2RlZmluZSBTNVBWMjEwX0tFWUlGU1RTQ0xSX1BfSU5UX01BU0sJCSgweDNmZmYgPDwgMCkKKyNkZWZpbmUgUzVQVjIxMF9LRVlJRlNUU0NMUl9SX0lOVF9NQVNLCQkoMHgzZmZmIDw8IDE2KQorI2RlZmluZSBTNVBWMjEwX0tFWUlGU1RTQ0xSX1JfSU5UX09GRlNFVAkxNgorCisvKiBTQU1TVU5HX0tFWUlGQ09MICovCisjZGVmaW5lIFNBTVNVTkdfS0VZSUZDT0xfTUFTSwkJCSgweGZmIDw8IDApCisjZGVmaW5lIFM1UFYyMTBfS0VZSUZDT0xFTl9NQVNLCQkJKDB4ZmYgPDwgOCkKKworLyogU0FNU1VOR19LRVlJRlJPVyAqLworI2RlZmluZSBTQU1TVU5HX0tFWUlGUk9XX01BU0sJCQkoMHhmZiA8PCAwKQorI2RlZmluZSBTNVBWMjEwX0tFWUlGUk9XX01BU0sJCQkoMHgzZmZmIDw8IDApCisKKy8qIFNBTVNVTkdfS0VZSUZGQyAqLworI2RlZmluZSBTQU1TVU5HX0tFWUlGRkNfTUFTSwkJCSgweDNmZiA8PCAwKQorCitlbnVtIHNhbXN1bmdfa2V5cGFkX3R5cGUgeworCUtFWVBBRF9UWVBFX1NBTVNVTkcsCisJS0VZUEFEX1RZUEVfUzVQVjIxMCwKK307CisKK3N0cnVjdCBzYW1zdW5nX2tleXBhZCB7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCXN0cnVjdCBjbGsgKmNsazsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKKwlib29sIHN0b3BwZWQ7CisJaW50IGlycTsKKwl1bnNpZ25lZCBpbnQgcm93X3NoaWZ0OworCXVuc2lnbmVkIGludCByb3dzOworCXVuc2lnbmVkIGludCBjb2xzOworCXVuc2lnbmVkIGludCByb3dfc3RhdGVbU0FNU1VOR19NQVhfQ09MU107CisJdW5zaWduZWQgc2hvcnQga2V5Y29kZXNbXTsKK307CisKK3N0YXRpYyBpbnQgc2Ftc3VuZ19rZXlwYWRfaXNfczVwdjIxMChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCWVudW0gc2Ftc3VuZ19rZXlwYWRfdHlwZSB0eXBlID0KKwkJcGxhdGZvcm1fZ2V0X2RldmljZV9pZChwZGV2KS0+ZHJpdmVyX2RhdGE7CisKKwlyZXR1cm4gdHlwZSA9PSBLRVlQQURfVFlQRV9TNVBWMjEwOworfQorCitzdGF0aWMgdm9pZCBzYW1zdW5nX2tleXBhZF9zY2FuKHN0cnVjdCBzYW1zdW5nX2tleXBhZCAqa2V5cGFkLAorCQkJCXVuc2lnbmVkIGludCAqcm93X3N0YXRlKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGtleXBhZC0+aW5wdXRfZGV2LT5kZXYucGFyZW50OworCXVuc2lnbmVkIGludCBjb2w7CisJdW5zaWduZWQgaW50IHZhbDsKKworCWZvciAoY29sID0gMDsgY29sIDwga2V5cGFkLT5jb2xzOyBjb2wrKykgeworCQlpZiAoc2Ftc3VuZ19rZXlwYWRfaXNfczVwdjIxMChkZXYpKSB7CisJCQl2YWwgPSBTNVBWMjEwX0tFWUlGQ09MRU5fTUFTSzsKKwkJCXZhbCAmPSB+KDEgPDwgY29sKSA8PCA4OworCQl9IGVsc2UgeworCQkJdmFsID0gU0FNU1VOR19LRVlJRkNPTF9NQVNLOworCQkJdmFsICY9IH4oMSA8PCBjb2wpOworCQl9CisKKwkJd3JpdGVsKHZhbCwga2V5cGFkLT5iYXNlICsgU0FNU1VOR19LRVlJRkNPTCk7CisJCW1kZWxheSgxKTsKKworCQl2YWwgPSByZWFkbChrZXlwYWQtPmJhc2UgKyBTQU1TVU5HX0tFWUlGUk9XKTsKKwkJcm93X3N0YXRlW2NvbF0gPSB+dmFsICYgKCgxIDw8IGtleXBhZC0+cm93cykgLSAxKTsKKwl9CisKKwkvKiBLRVlJRkNPTCByZWcgY2xlYXIgKi8KKwl3cml0ZWwoMCwga2V5cGFkLT5iYXNlICsgU0FNU1VOR19LRVlJRkNPTCk7Cit9CisKK3N0YXRpYyBib29sIHNhbXN1bmdfa2V5cGFkX3JlcG9ydChzdHJ1Y3Qgc2Ftc3VuZ19rZXlwYWQgKmtleXBhZCwKKwkJCQkgIHVuc2lnbmVkIGludCAqcm93X3N0YXRlKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiA9IGtleXBhZC0+aW5wdXRfZGV2OworCXVuc2lnbmVkIGludCBjaGFuZ2VkOworCXVuc2lnbmVkIGludCBwcmVzc2VkOworCXVuc2lnbmVkIGludCBrZXlfZG93biA9IDA7CisJdW5zaWduZWQgaW50IHZhbDsKKwl1bnNpZ25lZCBpbnQgY29sLCByb3c7CisKKwlmb3IgKGNvbCA9IDA7IGNvbCA8IGtleXBhZC0+Y29sczsgY29sKyspIHsKKwkJY2hhbmdlZCA9IHJvd19zdGF0ZVtjb2xdIF4ga2V5cGFkLT5yb3dfc3RhdGVbY29sXTsKKwkJa2V5X2Rvd24gfD0gcm93X3N0YXRlW2NvbF07CisJCWlmICghY2hhbmdlZCkKKwkJCWNvbnRpbnVlOworCisJCWZvciAocm93ID0gMDsgcm93IDwga2V5cGFkLT5yb3dzOyByb3crKykgeworCQkJaWYgKCEoY2hhbmdlZCAmICgxIDw8IHJvdykpKQorCQkJCWNvbnRpbnVlOworCisJCQlwcmVzc2VkID0gcm93X3N0YXRlW2NvbF0gJiAoMSA8PCByb3cpOworCisJCQlkZXZfZGJnKCZrZXlwYWQtPmlucHV0X2Rldi0+ZGV2LAorCQkJCSJrZXkgJXMsIHJvdzogJWQsIGNvbDogJWRcbiIsCisJCQkJcHJlc3NlZCA/ICJwcmVzc2VkIiA6ICJyZWxlYXNlZCIsIHJvdywgY29sKTsKKworCQkJdmFsID0gTUFUUklYX1NDQU5fQ09ERShyb3csIGNvbCwga2V5cGFkLT5yb3dfc2hpZnQpOworCisJCQlpbnB1dF9ldmVudChpbnB1dF9kZXYsIEVWX01TQywgTVNDX1NDQU4sIHZhbCk7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0X2RldiwKKwkJCQkJa2V5cGFkLT5rZXljb2Rlc1t2YWxdLCBwcmVzc2VkKTsKKwkJfQorCQlpbnB1dF9zeW5jKGtleXBhZC0+aW5wdXRfZGV2KTsKKwl9CisKKwltZW1jcHkoa2V5cGFkLT5yb3dfc3RhdGUsIHJvd19zdGF0ZSwgc2l6ZW9mKGtleXBhZC0+cm93X3N0YXRlKSk7CisKKwlyZXR1cm4ga2V5X2Rvd247Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzYW1zdW5nX2tleXBhZF9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzYW1zdW5nX2tleXBhZCAqa2V5cGFkID0gZGV2X2lkOworCXVuc2lnbmVkIGludCByb3dfc3RhdGVbU0FNU1VOR19NQVhfQ09MU107CisJdW5zaWduZWQgaW50IHZhbDsKKwlib29sIGtleV9kb3duOworCisJZG8geworCQl2YWwgPSByZWFkbChrZXlwYWQtPmJhc2UgKyBTQU1TVU5HX0tFWUlGU1RTQ0xSKTsKKwkJLyogQ2xlYXIgaW50ZXJydXB0LiAqLworCQl3cml0ZWwofjB4MCwga2V5cGFkLT5iYXNlICsgU0FNU1VOR19LRVlJRlNUU0NMUik7CisKKwkJc2Ftc3VuZ19rZXlwYWRfc2NhbihrZXlwYWQsIHJvd19zdGF0ZSk7CisKKwkJa2V5X2Rvd24gPSBzYW1zdW5nX2tleXBhZF9yZXBvcnQoa2V5cGFkLCByb3dfc3RhdGUpOworCQlpZiAoa2V5X2Rvd24pCisJCQl3YWl0X2V2ZW50X3RpbWVvdXQoa2V5cGFkLT53YWl0LCBrZXlwYWQtPnN0b3BwZWQsCisJCQkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoNTApKTsKKworCX0gd2hpbGUgKGtleV9kb3duICYmICFrZXlwYWQtPnN0b3BwZWQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBzYW1zdW5nX2tleXBhZF9zdGFydChzdHJ1Y3Qgc2Ftc3VuZ19rZXlwYWQgKmtleXBhZCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJLyogVGVsbCBJUlEgdGhyZWFkIHRoYXQgaXQgbWF5IHBvbGwgdGhlIGRldmljZS4gKi8KKwlrZXlwYWQtPnN0b3BwZWQgPSBmYWxzZTsKKworCWNsa19lbmFibGUoa2V5cGFkLT5jbGspOworCisJLyogRW5hYmxlIGludGVycnVwdCBiaXRzLiAqLworCXZhbCA9IHJlYWRsKGtleXBhZC0+YmFzZSArIFNBTVNVTkdfS0VZSUZDT04pOworCXZhbCB8PSBTQU1TVU5HX0tFWUlGQ09OX0lOVF9GX0VOIHwgU0FNU1VOR19LRVlJRkNPTl9JTlRfUl9FTjsKKwl3cml0ZWwodmFsLCBrZXlwYWQtPmJhc2UgKyBTQU1TVU5HX0tFWUlGQ09OKTsKKworCS8qIEtFWUlGQ09MIHJlZyBjbGVhci4gKi8KKwl3cml0ZWwoMCwga2V5cGFkLT5iYXNlICsgU0FNU1VOR19LRVlJRkNPTCk7Cit9CisKK3N0YXRpYyB2b2lkIHNhbXN1bmdfa2V5cGFkX3N0b3Aoc3RydWN0IHNhbXN1bmdfa2V5cGFkICprZXlwYWQpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCS8qIFNpZ25hbCBJUlEgdGhyZWFkIHRvIHN0b3AgcG9sbGluZyBhbmQgZGlzYWJsZSB0aGUgaGFuZGxlci4gKi8KKwlrZXlwYWQtPnN0b3BwZWQgPSB0cnVlOworCXdha2VfdXAoJmtleXBhZC0+d2FpdCk7CisJZGlzYWJsZV9pcnEoa2V5cGFkLT5pcnEpOworCisJLyogQ2xlYXIgaW50ZXJydXB0LiAqLworCXdyaXRlbCh+MHgwLCBrZXlwYWQtPmJhc2UgKyBTQU1TVU5HX0tFWUlGU1RTQ0xSKTsKKworCS8qIERpc2FibGUgaW50ZXJydXB0IGJpdHMuICovCisJdmFsID0gcmVhZGwoa2V5cGFkLT5iYXNlICsgU0FNU1VOR19LRVlJRkNPTik7CisJdmFsICY9IH4oU0FNU1VOR19LRVlJRkNPTl9JTlRfRl9FTiB8IFNBTVNVTkdfS0VZSUZDT05fSU5UX1JfRU4pOworCXdyaXRlbCh2YWwsIGtleXBhZC0+YmFzZSArIFNBTVNVTkdfS0VZSUZDT04pOworCisJY2xrX2Rpc2FibGUoa2V5cGFkLT5jbGspOworCisJLyoKKwkgKiBOb3cgdGhhdCBjaGlwIHNob3VsZCBub3QgZ2VuZXJhdGUgaW50ZXJydXB0cyB3ZSBjYW4gc2FmZWx5CisJICogcmUtZW5hYmxlIHRoZSBoYW5kbGVyLgorCSAqLworCWVuYWJsZV9pcnEoa2V5cGFkLT5pcnEpOworfQorCitzdGF0aWMgaW50IHNhbXN1bmdfa2V5cGFkX29wZW4oc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KQoreworCXN0cnVjdCBzYW1zdW5nX2tleXBhZCAqa2V5cGFkID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXRfZGV2KTsKKworCXNhbXN1bmdfa2V5cGFkX3N0YXJ0KGtleXBhZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2Ftc3VuZ19rZXlwYWRfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KQoreworCXN0cnVjdCBzYW1zdW5nX2tleXBhZCAqa2V5cGFkID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXRfZGV2KTsKKworCXNhbXN1bmdfa2V5cGFkX3N0b3Aoa2V5cGFkKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc2Ftc3VuZ19rZXlwYWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb25zdCBzdHJ1Y3Qgc2Ftc3VuZ19rZXlwYWRfcGxhdGRhdGEgKnBkYXRhOworCWNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgKmtleW1hcF9kYXRhOworCXN0cnVjdCBzYW1zdW5nX2tleXBhZCAqa2V5cGFkOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKKwl1bnNpZ25lZCBpbnQgcm93X3NoaWZ0OworCXVuc2lnbmVkIGludCBrZXltYXBfc2l6ZTsKKwlpbnQgZXJyb3I7CisKKwlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghcGRhdGEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YSBkZWZpbmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJa2V5bWFwX2RhdGEgPSBwZGF0YS0+a2V5bWFwX2RhdGE7CisJaWYgKCFrZXltYXBfZGF0YSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBrZXltYXAgZGF0YSBkZWZpbmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFwZGF0YS0+cm93cyB8fCBwZGF0YS0+cm93cyA+IFNBTVNVTkdfTUFYX1JPV1MpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFwZGF0YS0+Y29scyB8fCBwZGF0YS0+Y29scyA+IFNBTVNVTkdfTUFYX0NPTFMpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogaW5pdGlhbGl6ZSB0aGUgZ3BpbyAqLworCWlmIChwZGF0YS0+Y2ZnX2dwaW8pCisJCXBkYXRhLT5jZmdfZ3BpbyhwZGF0YS0+cm93cywgcGRhdGEtPmNvbHMpOworCisJcm93X3NoaWZ0ID0gZ2V0X2NvdW50X29yZGVyKHBkYXRhLT5jb2xzKTsKKwlrZXltYXBfc2l6ZSA9IChwZGF0YS0+cm93cyA8PCByb3dfc2hpZnQpICogc2l6ZW9mKGtleXBhZC0+a2V5Y29kZXNbMF0pOworCisJa2V5cGFkID0ga3phbGxvYyhzaXplb2YoKmtleXBhZCkgKyBrZXltYXBfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFrZXlwYWQgfHwgIWlucHV0X2RldikgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfbWVtOworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZXJyb3IgPSAtRU5PREVWOworCQlnb3RvIGVycl9mcmVlX21lbTsKKwl9CisKKwlrZXlwYWQtPmJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFrZXlwYWQtPmJhc2UpIHsKKwkJZXJyb3IgPSAtRUJVU1k7CisJCWdvdG8gZXJyX2ZyZWVfbWVtOworCX0KKworCWtleXBhZC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAia2V5cGFkIik7CisJaWYgKElTX0VSUihrZXlwYWQtPmNsaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBrZXlwYWQgY2xrXG4iKTsKKwkJZXJyb3IgPSBQVFJfRVJSKGtleXBhZC0+Y2xrKTsKKwkJZ290byBlcnJfdW5tYXBfYmFzZTsKKwl9CisKKwlrZXlwYWQtPmlucHV0X2RldiA9IGlucHV0X2RldjsKKwlrZXlwYWQtPnJvd19zaGlmdCA9IHJvd19zaGlmdDsKKwlrZXlwYWQtPnJvd3MgPSBwZGF0YS0+cm93czsKKwlrZXlwYWQtPmNvbHMgPSBwZGF0YS0+Y29sczsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZrZXlwYWQtPndhaXQpOworCisJaW5wdXRfZGV2LT5uYW1lID0gcGRldi0+bmFtZTsKKwlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKKwlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCWlucHV0X3NldF9kcnZkYXRhKGlucHV0X2Rldiwga2V5cGFkKTsKKworCWlucHV0X2Rldi0+b3BlbiA9IHNhbXN1bmdfa2V5cGFkX29wZW47CisJaW5wdXRfZGV2LT5jbG9zZSA9IHNhbXN1bmdfa2V5cGFkX2Nsb3NlOworCisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSk7CisJaWYgKCFwZGF0YS0+bm9fYXV0b3JlcGVhdCkKKwkJaW5wdXRfZGV2LT5ldmJpdFswXSB8PSBCSVRfTUFTSyhFVl9SRVApOworCisJaW5wdXRfc2V0X2NhcGFiaWxpdHkoaW5wdXRfZGV2LCBFVl9NU0MsIE1TQ19TQ0FOKTsKKworCWlucHV0X2Rldi0+a2V5Y29kZSA9IGtleXBhZC0+a2V5Y29kZXM7CisJaW5wdXRfZGV2LT5rZXljb2Rlc2l6ZSA9IHNpemVvZihrZXlwYWQtPmtleWNvZGVzWzBdKTsKKwlpbnB1dF9kZXYtPmtleWNvZGVtYXggPSBwZGF0YS0+cm93cyA8PCByb3dfc2hpZnQ7CisKKwltYXRyaXhfa2V5cGFkX2J1aWxkX2tleW1hcChrZXltYXBfZGF0YSwgcm93X3NoaWZ0LAorCQkJaW5wdXRfZGV2LT5rZXljb2RlLCBpbnB1dF9kZXYtPmtleWJpdCk7CisKKwlrZXlwYWQtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGtleXBhZC0+aXJxIDwgMCkgeworCQllcnJvciA9IGtleXBhZC0+aXJxOworCQlnb3RvIGVycl9wdXRfY2xrOworCX0KKworCWVycm9yID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoa2V5cGFkLT5pcnEsIE5VTEwsIHNhbXN1bmdfa2V5cGFkX2lycSwKKwkJCUlSUUZfT05FU0hPVCwgZGV2X25hbWUoJnBkZXYtPmRldiksIGtleXBhZCk7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBrZXlwYWQgaW50ZXJydXB0XG4iKTsKKwkJZ290byBlcnJfcHV0X2NsazsKKwl9CisKKwllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShrZXlwYWQtPmlucHV0X2Rldik7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycl9mcmVlX2lycTsKKworCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCBwZGF0YS0+d2FrZXVwKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBrZXlwYWQpOworCXJldHVybiAwOworCitlcnJfZnJlZV9pcnE6CisJZnJlZV9pcnEoa2V5cGFkLT5pcnEsIGtleXBhZCk7CitlcnJfcHV0X2NsazoKKwljbGtfcHV0KGtleXBhZC0+Y2xrKTsKK2Vycl91bm1hcF9iYXNlOgorCWlvdW5tYXAoa2V5cGFkLT5iYXNlKTsKK2Vycl9mcmVlX21lbToKKwlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworCWtmcmVlKGtleXBhZCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNhbXN1bmdfa2V5cGFkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzYW1zdW5nX2tleXBhZCAqa2V5cGFkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShrZXlwYWQtPmlucHV0X2Rldik7CisKKwkvKgorCSAqIEl0IGlzIHNhZmUgdG8gZnJlZSBJUlEgYWZ0ZXIgdW5yZWdpc3RlcmluZyBkZXZpY2UgYmVjYXVzZQorCSAqIHNhbXN1bmdfa2V5cGFkX2Nsb3NlIHdpbGwgc2h1dCBvZmYgaW50ZXJydXB0cy4KKwkgKi8KKwlmcmVlX2lycShrZXlwYWQtPmlycSwga2V5cGFkKTsKKworCWNsa19wdXQoa2V5cGFkLT5jbGspOworCisJaW91bm1hcChrZXlwYWQtPmJhc2UpOworCWtmcmVlKGtleXBhZCk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIHZvaWQgc2Ftc3VuZ19rZXlwYWRfdG9nZ2xlX3dha2V1cChzdHJ1Y3Qgc2Ftc3VuZ19rZXlwYWQgKmtleXBhZCwKKwkJCQkJIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGtleXBhZC0+aW5wdXRfZGV2LT5kZXYucGFyZW50OworCXVuc2lnbmVkIGludCB2YWw7CisKKwljbGtfZW5hYmxlKGtleXBhZC0+Y2xrKTsKKworCXZhbCA9IHJlYWRsKGtleXBhZC0+YmFzZSArIFNBTVNVTkdfS0VZSUZDT04pOworCWlmIChlbmFibGUpIHsKKwkJdmFsIHw9IFNBTVNVTkdfS0VZSUZDT05fV0FLRVVQRU47CisJCWlmIChkZXZpY2VfbWF5X3dha2V1cChkZXYpKQorCQkJZW5hYmxlX2lycV93YWtlKGtleXBhZC0+aXJxKTsKKwl9IGVsc2UgeworCQl2YWwgJj0gflNBTVNVTkdfS0VZSUZDT05fV0FLRVVQRU47CisJCWlmIChkZXZpY2VfbWF5X3dha2V1cChkZXYpKQorCQkJZGlzYWJsZV9pcnFfd2FrZShrZXlwYWQtPmlycSk7CisJfQorCXdyaXRlbCh2YWwsIGtleXBhZC0+YmFzZSArIFNBTVNVTkdfS0VZSUZDT04pOworCisJY2xrX2Rpc2FibGUoa2V5cGFkLT5jbGspOworfQorCitzdGF0aWMgaW50IHNhbXN1bmdfa2V5cGFkX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3Qgc2Ftc3VuZ19rZXlwYWQgKmtleXBhZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiA9IGtleXBhZC0+aW5wdXRfZGV2OworCisJbXV0ZXhfbG9jaygmaW5wdXRfZGV2LT5tdXRleCk7CisKKwlpZiAoaW5wdXRfZGV2LT51c2VycykKKwkJc2Ftc3VuZ19rZXlwYWRfc3RvcChrZXlwYWQpOworCisJc2Ftc3VuZ19rZXlwYWRfdG9nZ2xlX3dha2V1cChrZXlwYWQsIHRydWUpOworCisJbXV0ZXhfdW5sb2NrKCZpbnB1dF9kZXYtPm11dGV4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhbXN1bmdfa2V5cGFkX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBzYW1zdW5nX2tleXBhZCAqa2V5cGFkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0ga2V5cGFkLT5pbnB1dF9kZXY7CisKKwltdXRleF9sb2NrKCZpbnB1dF9kZXYtPm11dGV4KTsKKworCXNhbXN1bmdfa2V5cGFkX3RvZ2dsZV93YWtldXAoa2V5cGFkLCBmYWxzZSk7CisKKwlpZiAoaW5wdXRfZGV2LT51c2VycykKKwkJc2Ftc3VuZ19rZXlwYWRfc3RhcnQoa2V5cGFkKTsKKworCW11dGV4X3VubG9jaygmaW5wdXRfZGV2LT5tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHNhbXN1bmdfa2V5cGFkX3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IHNhbXN1bmdfa2V5cGFkX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzYW1zdW5nX2tleXBhZF9yZXN1bWUsCit9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIHNhbXN1bmdfa2V5cGFkX2RyaXZlcl9pZHNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJzYW1zdW5nLWtleXBhZCIsCisJCS5kcml2ZXJfZGF0YQk9IEtFWVBBRF9UWVBFX1NBTVNVTkcsCisJfSwgeworCQkubmFtZQkJPSAiczVwdjIxMC1rZXlwYWQiLAorCQkuZHJpdmVyX2RhdGEJPSBLRVlQQURfVFlQRV9TNVBWMjEwLAorCX0sCisJeyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGxhdGZvcm0sIHNhbXN1bmdfa2V5cGFkX2RyaXZlcl9pZHMpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzYW1zdW5nX2tleXBhZF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHNhbXN1bmdfa2V5cGFkX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc2Ftc3VuZ19rZXlwYWRfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAic2Ftc3VuZy1rZXlwYWQiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtCT0gJnNhbXN1bmdfa2V5cGFkX3BtX29wcywKKyNlbmRpZgorCX0sCisJLmlkX3RhYmxlCT0gc2Ftc3VuZ19rZXlwYWRfZHJpdmVyX2lkcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNhbXN1bmdfa2V5cGFkX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzYW1zdW5nX2tleXBhZF9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoc2Ftc3VuZ19rZXlwYWRfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzYW1zdW5nX2tleXBhZF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNhbXN1bmdfa2V5cGFkX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChzYW1zdW5nX2tleXBhZF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTYW1zdW5nIGtleXBhZCBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkpvb255b3VuZyBTaGltIDxqeTA5MjIuc2hpbUBzYW1zdW5nLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkRvbmdod2EgTGVlIDxkaDA5LmxlZUBzYW1zdW5nLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06c2Ftc3VuZy1rZXlwYWQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdHdsNDAzMF9rZXlwYWQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdHdsNDAzMF9rZXlwYWQuYwppbmRleCA3YWE1OWUwLi5mYjE2YjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3R3bDQwMzBfa2V5cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90d2w0MDMwX2tleXBhZC5jCkBAIC01MSw4ICs1MSwxMiBAQAogICovCiAjZGVmaW5lIFRXTDQwMzBfTUFYX1JPV1MJOAkvKiBUV0w0MDMwIGhhcmQgbGltaXQgKi8KICNkZWZpbmUgVFdMNDAzMF9NQVhfQ09MUwk4Ci0jZGVmaW5lIFRXTDQwMzBfUk9XX1NISUZUCTMKLSNkZWZpbmUgVFdMNDAzMF9LRVlNQVBfU0laRQkoVFdMNDAzMF9NQVhfUk9XUyAqIFRXTDQwMzBfTUFYX0NPTFMpCisvKgorICogTm90ZSB0aGF0IHdlIGFkZCBzcGFjZSBmb3IgYW4gZXh0cmEgY29sdW1uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZQorICogcm93IGxpbmVzIGNvbm5lY3RlZCB0byB0aGUgZ25kIChzZWUgdHdsNDAzMF9jb2xfeGxhdGUoKSkuCisgKi8KKyNkZWZpbmUgVFdMNDAzMF9ST1dfU0hJRlQJNAorI2RlZmluZSBUV0w0MDMwX0tFWU1BUF9TSVpFCShUV0w0MDMwX01BWF9ST1dTIDw8IFRXTDQwMzBfUk9XX1NISUZUKQogCiBzdHJ1Y3QgdHdsNDAzMF9rZXlwYWQgewogCXVuc2lnbmVkIHNob3J0CWtleW1hcFtUV0w0MDMwX0tFWU1BUF9TSVpFXTsKQEAgLTE4Miw3ICsxODYsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdHdsNDAzMF9pc19pbl9naG9zdF9zdGF0ZShzdHJ1Y3QgdHdsNDAzMF9rZXlwYWQgKmtwLCB1MTYgKmtleV9zdGF0ZSkKK3N0YXRpYyBib29sIHR3bDQwMzBfaXNfaW5fZ2hvc3Rfc3RhdGUoc3RydWN0IHR3bDQwMzBfa2V5cGFkICprcCwgdTE2ICprZXlfc3RhdGUpCiB7CiAJaW50IGk7CiAJdTE2IGNoZWNrID0gMDsKQEAgLTE5MSwxMiArMTk1LDEyIEBACiAJCXUxNiBjb2wgPSBrZXlfc3RhdGVbaV07CiAKIAkJaWYgKChjb2wgJiBjaGVjaykgJiYgaHdlaWdodDE2KGNvbCkgPiAxKQotCQkJcmV0dXJuIDE7CisJCQlyZXR1cm4gdHJ1ZTsKIAogCQljaGVjayB8PSBjb2w7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGZhbHNlOwogfQogCiBzdGF0aWMgdm9pZCB0d2w0MDMwX2twX3NjYW4oc3RydWN0IHR3bDQwMzBfa2V5cGFkICprcCwgYm9vbCByZWxlYXNlX2FsbCkKQEAgLTIyNSw3ICsyMjksOCBAQAogCQlpZiAoIWNoYW5nZWQpCiAJCQljb250aW51ZTsKIAotCQlmb3IgKGNvbCA9IDA7IGNvbCA8IGtwLT5uX2NvbHM7IGNvbCsrKSB7CisJCS8qIEV4dHJhIGNvbHVtbiBoYW5kbGVzICJhbGwgZ25kIiByb3dzICovCisJCWZvciAoY29sID0gMDsgY29sIDwga3AtPm5fY29scyArIDE7IGNvbCsrKSB7CiAJCQlpbnQgY29kZTsKIAogCQkJaWYgKCEoY2hhbmdlZCAmICgxIDw8IGNvbCkpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC93OTBwOTEwX2tleXBhZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC93OTBwOTEwX2tleXBhZC5jCmluZGV4IDRlZjc2NGMuLmVlMmJmNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdzkwcDkxMF9rZXlwYWQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3c5MHA5MTBfa2V5cGFkLmMKQEAgLTI1OCw3ICsyNTgsNyBAQAogCS5wcm9iZQkJPSB3OTBwOTEwX2tleXBhZF9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHc5MHA5MTBfa2V5cGFkX3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7Ci0JCS5uYW1lCT0gIm51YzkwMC1rZXlwYWQiLAorCQkubmFtZQk9ICJudWM5MDAta3BpIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnCmluZGV4IGM0NGI5ZWEuLmI0OWUyMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnCkBAIC0zMjcsNiArMzI3LDE3IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwY2Y4NTc0X2tleXBhZC4KIAorY29uZmlnIElOUFVUX1BXTV9CRUVQRVIKKwl0cmlzdGF0ZSAiUFdNIGJlZXBlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gSEFWRV9QV00KKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGdldCBzdXBwb3J0IGZvciBQV00gYmFzZWQgYmVlcGVyIGRldmljZXMuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZQorCSAgY2FsbGVkIHB3bS1iZWVwZXIuCisKIGNvbmZpZyBJTlBVVF9HUElPX1JPVEFSWV9FTkNPREVSCiAJdHJpc3RhdGUgIlJvdGFyeSBlbmNvZGVycyBjb25uZWN0ZWQgdG8gR1BJTyBwaW5zIgogCWRlcGVuZHMgb24gR1BJT0xJQiAmJiBHRU5FUklDX0dQSU8KQEAgLTM5MCw0ICs0MDEsNDEgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBjYXBfa2V5cy4KIAorY29uZmlnIElOUFVUX0FEWEwzNFgKKwl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQURYTDM0eCBUaHJlZS1BeGlzIERpZ2l0YWwgQWNjZWxlcm9tZXRlciIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgQWNjZWxlcm9tZXRlciBpbnRlcmZhY2UgdXNpbmcgdGhlCisJICBBRFhMMzQ1LzYgY29udHJvbGxlciwgYW5kIHlvdXIgYm9hcmQtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24KKwkgIGNvZGUgaW5jbHVkZXMgdGhhdCBpbiBpdHMgdGFibGUgb2YgZGV2aWNlcy4KKworCSAgVGhpcyBkcml2ZXIgY2FuIHVzZSBlaXRoZXIgSTJDIG9yIFNQSSBjb21tdW5pY2F0aW9uIHRvIHRoZQorCSAgQURYTDM0NS82IGNvbnRyb2xsZXIuICBTZWxlY3QgdGhlIGFwcHJvcHJpYXRlIG1ldGhvZCBmb3IKKwkgIHlvdXIgc3lzdGVtLgorCisJICBJZiB1bnN1cmUsIHNheSBOIChidXQgaXQncyBzYWZlIHRvIHNheSAiWSIpLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhZHhsMzR4LgorCitjb25maWcgSU5QVVRfQURYTDM0WF9JMkMKKwl0cmlzdGF0ZSAic3VwcG9ydCBJMkMgYnVzIGNvbm5lY3Rpb24iCisJZGVwZW5kcyBvbiBJTlBVVF9BRFhMMzRYICYmIEkyQworCWRlZmF1bHQgeQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgQURYTDM0NS82IGhvb2tlZCB0byBhbiBJMkMgYnVzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhZHhsMzR4LWkyYy4KKworY29uZmlnIElOUFVUX0FEWEwzNFhfU1BJCisJdHJpc3RhdGUgInN1cHBvcnQgU1BJIGJ1cyBjb25uZWN0aW9uIgorCWRlcGVuZHMgb24gSU5QVVRfQURYTDM0WCAmJiBTUEkKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIEFEWEwzNDUvNiBob29rZWQgdG8gYSBTUEkgYnVzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhZHhsMzR4LXNwaS4KKwogZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQvbWlzYy9NYWtlZmlsZQppbmRleCA3MWZlNTdkLi4xOWNjY2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlCkBAIC04LDYgKzgsOSBAQAogb2JqLSQoQ09ORklHX0lOUFVUX0FENzE0WCkJCSs9IGFkNzE0eC5vCiBvYmotJChDT05GSUdfSU5QVVRfQUQ3MTRYX0kyQykJCSs9IGFkNzE0eC1pMmMubwogb2JqLSQoQ09ORklHX0lOUFVUX0FENzE0WF9TUEkpCQkrPSBhZDcxNHgtc3BpLm8KK29iai0kKENPTkZJR19JTlBVVF9BRFhMMzRYKQkJKz0gYWR4bDM0eC5vCitvYmotJChDT05GSUdfSU5QVVRfQURYTDM0WF9JMkMpCQkrPSBhZHhsMzR4LWkyYy5vCitvYmotJChDT05GSUdfSU5QVVRfQURYTDM0WF9TUEkpCQkrPSBhZHhsMzR4LXNwaS5vCiBvYmotJChDT05GSUdfSU5QVVRfQVBBTkVMKQkJKz0gYXBhbmVsLm8KIG9iai0kKENPTkZJR19JTlBVVF9BVElfUkVNT1RFKQkJKz0gYXRpX3JlbW90ZS5vCiBvYmotJChDT05GSUdfSU5QVVRfQVRJX1JFTU9URTIpCQkrPSBhdGlfcmVtb3RlMi5vCkBAIC0yNiw2ICsyOSw3IEBACiBvYmotJChDT05GSUdfSU5QVVRfUENGODU3NCkJCSs9IHBjZjg1NzRfa2V5cGFkLm8KIG9iai0kKENPTkZJR19JTlBVVF9QQ1NQS1IpCQkrPSBwY3Nwa3Iubwogb2JqLSQoQ09ORklHX0lOUFVUX1BPV0VSTUFURSkJCSs9IHBvd2VybWF0ZS5vCitvYmotJChDT05GSUdfSU5QVVRfUFdNX0JFRVBFUikJCSs9IHB3bS1iZWVwZXIubwogb2JqLSQoQ09ORklHX0lOUFVUX1JCNTMyX0JVVFRPTikJKz0gcmI1MzJfYnV0dG9uLm8KIG9iai0kKENPTkZJR19JTlBVVF9HUElPX1JPVEFSWV9FTkNPREVSKQkrPSByb3RhcnlfZW5jb2Rlci5vCiBvYmotJChDT05GSUdfSU5QVVRfU0dJX0JUTlMpCQkrPSBzZ2lfYnRucy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvYWQ3MTR4LmMgYi9kcml2ZXJzL2lucHV0L21pc2MvYWQ3MTR4LmMKaW5kZXggMGZlMjdiYS4uYzQzMWQwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2FkNzE0eC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9hZDcxNHguYwpAQCAtMTExOCw3ICsxMTE4LDcgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZXJyX2ZyZWVfbWVtOwogCi0JLyogaW5pdGlsaXplIGFuZCByZXF1ZXN0IHN3L2h3IHJlc291cmNlcyAqLworCS8qIGluaXRpYWxpemUgYW5kIHJlcXVlc3Qgc3cvaHcgcmVzb3VyY2VzICovCiAKIAlhZDcxNHhfaHdfaW5pdChhZDcxNHgpOwogCW11dGV4X2luaXQoJmFkNzE0eC0+bXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2FkeGwzNHgtaTJjLmMgYi9kcml2ZXJzL2lucHV0L21pc2MvYWR4bDM0eC1pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzc5NzI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL2FkeGwzNHgtaTJjLmMKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBBRExYMzQ1LzM0NiBUaHJlZS1BeGlzIERpZ2l0YWwgQWNjZWxlcm9tZXRlcnMgKEkyQyBJbnRlcmZhY2UpCisgKgorICogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1pY2hhZWwgSGVubmVyaWNoLCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CS8qIEJVU19JMkMgKi8KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgImFkeGwzNHguaCIKKworc3RhdGljIGludCBhZHhsMzR4X3NtYnVzX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlZykKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCisJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7Cit9CisKK3N0YXRpYyBpbnQgYWR4bDM0eF9zbWJ1c193cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgdmFsKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisKKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsKTsKK30KKworc3RhdGljIGludCBhZHhsMzR4X3NtYnVzX3JlYWRfYmxvY2soc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICB1bnNpZ25lZCBjaGFyIHJlZywgaW50IGNvdW50LAorCQkJCSAgICB2b2lkICpidWYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKworCXJldHVybiBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShjbGllbnQsIHJlZywgY291bnQsIGJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgYWR4bDM0eF9pMmNfcmVhZF9ibG9jayhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICB1bnNpZ25lZCBjaGFyIHJlZywgaW50IGNvdW50LAorCQkJCSAgdm9pZCAqYnVmKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJaW50IHJldDsKKworCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsICZyZWcsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgYnVmLCBjb3VudCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAocmV0ICE9IGNvdW50KQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGFkeGwzNHhfYnVzX29wcyBhZHhsMzR4X3NtYnVzX2JvcHMgPSB7CisJLmJ1c3R5cGUJPSBCVVNfSTJDLAorCS53cml0ZQkJPSBhZHhsMzR4X3NtYnVzX3dyaXRlLAorCS5yZWFkCQk9IGFkeGwzNHhfc21idXNfcmVhZCwKKwkucmVhZF9ibG9jawk9IGFkeGwzNHhfc21idXNfcmVhZF9ibG9jaywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWR4bDM0eF9idXNfb3BzIGFkeGwzNHhfaTJjX2JvcHMgPSB7CisJLmJ1c3R5cGUJPSBCVVNfSTJDLAorCS53cml0ZQkJPSBhZHhsMzR4X3NtYnVzX3dyaXRlLAorCS5yZWFkCQk9IGFkeGwzNHhfc21idXNfcmVhZCwKKwkucmVhZF9ibG9jawk9IGFkeGwzNHhfaTJjX3JlYWRfYmxvY2ssCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhZHhsMzR4X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGFkeGwzNHggKmFjOworCWludCBlcnJvcjsKKworCWVycm9yID0gaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLAorCQkJSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKTsKKwlpZiAoIWVycm9yKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiU01CVVMgQnl0ZSBEYXRhIG5vdCBTdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlhYyA9IGFkeGwzNHhfcHJvYmUoJmNsaWVudC0+ZGV2LCBjbGllbnQtPmlycSwgZmFsc2UsCisJCQkgICBpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsCisJCQkJCQkgICBJMkNfRlVOQ19TTUJVU19SRUFEX0kyQ19CTE9DSykgPworCQkJCSZhZHhsMzR4X3NtYnVzX2JvcHMgOiAmYWR4bDM0eF9pMmNfYm9wcyk7CisJaWYgKElTX0VSUihhYykpCisJCXJldHVybiBQVFJfRVJSKGFjKTsKKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGFjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhZHhsMzR4X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgYWR4bDM0eCAqYWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXJldHVybiBhZHhsMzR4X3JlbW92ZShhYyk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgYWR4bDM0eF9pMmNfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3sKKwlzdHJ1Y3QgYWR4bDM0eCAqYWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWFkeGwzNHhfc3VzcGVuZChhYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZHhsMzR4X2kyY19yZXN1bWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgYWR4bDM0eCAqYWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWFkeGwzNHhfcmVzdW1lKGFjKTsKKworCXJldHVybiAwOworfQorI2Vsc2UKKyMgZGVmaW5lIGFkeGwzNHhfaTJjX3N1c3BlbmQgTlVMTAorIyBkZWZpbmUgYWR4bDM0eF9pMmNfcmVzdW1lICBOVUxMCisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGFkeGwzNHhfaWRbXSA9IHsKKwl7ICJhZHhsMzR4IiwgMCB9LAorCXsgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFkeGwzNHhfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWR4bDM0eF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiYWR4bDM0eCIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlICAgID0gYWR4bDM0eF9pMmNfcHJvYmUsCisJLnJlbW92ZSAgID0gX19kZXZleGl0X3AoYWR4bDM0eF9pMmNfcmVtb3ZlKSwKKwkuc3VzcGVuZCAgPSBhZHhsMzR4X2kyY19zdXNwZW5kLAorCS5yZXN1bWUgICA9IGFkeGwzNHhfaTJjX3Jlc3VtZSwKKwkuaWRfdGFibGUgPSBhZHhsMzR4X2lkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWR4bDM0eF9pMmNfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmYWR4bDM0eF9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoYWR4bDM0eF9pMmNfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhZHhsMzR4X2kyY19leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJmFkeGwzNHhfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGFkeGwzNHhfaTJjX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEhlbm5lcmljaCA8aGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBRFhMMzQ1LzM0NiBUaHJlZS1BeGlzIERpZ2l0YWwgQWNjZWxlcm9tZXRlciBJMkMgQnVzIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2FkeGwzNHgtc3BpLmMgYi9kcml2ZXJzL2lucHV0L21pc2MvYWR4bDM0eC1zcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODJkZTllCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL2FkeGwzNHgtc3BpLmMKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBBRExYMzQ1LzM0NiBUaHJlZS1BeGlzIERpZ2l0YWwgQWNjZWxlcm9tZXRlcnMgKFNQSSBJbnRlcmZhY2UpCisgKgorICogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1pY2hhZWwgSGVubmVyaWNoLCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CS8qIEJVU19TUEkgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlICJhZHhsMzR4LmgiCisKKyNkZWZpbmUgTUFYX1NQSV9GUkVRX0haCQk1MDAwMDAwCisjZGVmaW5lIE1BWF9GUkVRX05PX0ZJRk9ERUxBWQkxNTAwMDAwCisjZGVmaW5lIEFEWEwzNFhfQ01EX01VTFRCCSgxIDw8IDYpCisjZGVmaW5lIEFEWEwzNFhfQ01EX1JFQUQJKDEgPDwgNykKKyNkZWZpbmUgQURYTDM0WF9XUklURUNNRChyZWcpCShyZWcgJiAweDNGKQorI2RlZmluZSBBRFhMMzRYX1JFQURDTUQocmVnKQkoQURYTDM0WF9DTURfUkVBRCB8IChyZWcgJiAweDNGKSkKKyNkZWZpbmUgQURYTDM0WF9SRUFETUJfQ01EKHJlZykgKEFEWEwzNFhfQ01EX1JFQUQgfCBBRFhMMzRYX0NNRF9NVUxUQiBcCisJCQkJCXwgKHJlZyAmIDB4M0YpKQorCitzdGF0aWMgaW50IGFkeGwzNHhfc3BpX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlZykKK3sKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShkZXYpOworCXVuc2lnbmVkIGNoYXIgY21kOworCisJY21kID0gQURYTDM0WF9SRUFEQ01EKHJlZyk7CisKKwlyZXR1cm4gc3BpX3c4cjgoc3BpLCBjbWQpOworfQorCitzdGF0aWMgaW50IGFkeGwzNHhfc3BpX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgdmFsKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGRldik7CisJdW5zaWduZWQgY2hhciBidWZbMl07CisKKwlidWZbMF0gPSBBRFhMMzRYX1dSSVRFQ01EKHJlZyk7CisJYnVmWzFdID0gdmFsOworCisJcmV0dXJuIHNwaV93cml0ZShzcGksIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworfQorCitzdGF0aWMgaW50IGFkeGwzNHhfc3BpX3JlYWRfYmxvY2soc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgdW5zaWduZWQgY2hhciByZWcsIGludCBjb3VudCwKKwkJCQkgIHZvaWQgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShkZXYpOworCXNzaXplX3Qgc3RhdHVzOworCisJcmVnID0gQURYTDM0WF9SRUFETUJfQ01EKHJlZyk7CisJc3RhdHVzID0gc3BpX3dyaXRlX3RoZW5fcmVhZChzcGksICZyZWcsIDEsIGJ1ZiwgY291bnQpOworCisJcmV0dXJuIChzdGF0dXMgPCAwKSA/IHN0YXR1cyA6IDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWR4bDM0eF9idXNfb3BzIGFkeDEzNHhfc3BpX2JvcHMgPSB7CisJLmJ1c3R5cGUJPSBCVVNfU1BJLAorCS53cml0ZQkJPSBhZHhsMzR4X3NwaV93cml0ZSwKKwkucmVhZAkJPSBhZHhsMzR4X3NwaV9yZWFkLAorCS5yZWFkX2Jsb2NrCT0gYWR4bDM0eF9zcGlfcmVhZF9ibG9jaywKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFkeGwzNHhfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGFkeGwzNHggKmFjOworCisJLyogZG9uJ3QgZXhjZWVkIG1heCBzcGVjaWZpZWQgU1BJIENMSyBmcmVxdWVuY3kgKi8KKwlpZiAoc3BpLT5tYXhfc3BlZWRfaHogPiBNQVhfU1BJX0ZSRVFfSFopIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJTUEkgQ0xLICVkIEh6IHRvbyBmYXN0XG4iLCBzcGktPm1heF9zcGVlZF9oeik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWFjID0gYWR4bDM0eF9wcm9iZSgmc3BpLT5kZXYsIHNwaS0+aXJxLAorCQkJICAgc3BpLT5tYXhfc3BlZWRfaHogPiBNQVhfRlJFUV9OT19GSUZPREVMQVksCisJCQkgICAmYWR4MTM0eF9zcGlfYm9wcyk7CisKKwlpZiAoSVNfRVJSKGFjKSkKKwkJcmV0dXJuIFBUUl9FUlIoYWMpOworCisJc3BpX3NldF9kcnZkYXRhKHNwaSwgYWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGFkeGwzNHhfc3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBhZHhsMzR4ICphYyA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOworCisJcmV0dXJuIGFkeGwzNHhfcmVtb3ZlKGFjKTsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBhZHhsMzR4X3NwaV9zdXNwZW5kKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQoreworCXN0cnVjdCBhZHhsMzR4ICphYyA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOworCisJYWR4bDM0eF9zdXNwZW5kKGFjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkeGwzNHhfc3BpX3Jlc3VtZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBhZHhsMzR4ICphYyA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOworCisJYWR4bDM0eF9yZXN1bWUoYWMpOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorIyBkZWZpbmUgYWR4bDM0eF9zcGlfc3VzcGVuZCBOVUxMCisjIGRlZmluZSBhZHhsMzR4X3NwaV9yZXN1bWUgIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgYWR4bDM0eF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiYWR4bDM0eCIsCisJCS5idXMgPSAmc3BpX2J1c190eXBlLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSAgID0gYWR4bDM0eF9zcGlfcHJvYmUsCisJLnJlbW92ZSAgPSBfX2RldmV4aXRfcChhZHhsMzR4X3NwaV9yZW1vdmUpLAorCS5zdXNwZW5kID0gYWR4bDM0eF9zcGlfc3VzcGVuZCwKKwkucmVzdW1lICA9IGFkeGwzNHhfc3BpX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFkeGwzNHhfc3BpX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmYWR4bDM0eF9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoYWR4bDM0eF9zcGlfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhZHhsMzR4X3NwaV9leGl0KHZvaWQpCit7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZhZHhsMzR4X2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChhZHhsMzR4X3NwaV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTWljaGFlbCBIZW5uZXJpY2ggPGhlbm5lcmljaEBibGFja2Zpbi51Y2xpbnV4Lm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQURYTDM0NS8zNDYgVGhyZWUtQXhpcyBEaWdpdGFsIEFjY2VsZXJvbWV0ZXIgU1BJIEJ1cyBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9hZHhsMzR4LmMgYi9kcml2ZXJzL2lucHV0L21pc2MvYWR4bDM0eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyY2EwMTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lucHV0L21pc2MvYWR4bDM0eC5jCkBAIC0wLDAgKzEsOTE1IEBACisvKgorICogQURYTDM0NS8zNDYgVGhyZWUtQXhpcyBEaWdpdGFsIEFjY2VsZXJvbWV0ZXJzCisgKgorICogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1pY2hhZWwgSGVubmVyaWNoLCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L2FkeGwzNHguaD4KKworI2luY2x1ZGUgImFkeGwzNHguaCIKKworLyogQURYTDM0NS82IFJlZ2lzdGVyIE1hcCAqLworI2RlZmluZSBERVZJRAkJMHgwMAkvKiBSICAgRGV2aWNlIElEICovCisjZGVmaW5lIFRIUkVTSF9UQVAJMHgxRAkvKiBSL1cgVGFwIHRocmVzaG9sZCAqLworI2RlZmluZSBPRlNYCQkweDFFCS8qIFIvVyBYLWF4aXMgb2Zmc2V0ICovCisjZGVmaW5lIE9GU1kJCTB4MUYJLyogUi9XIFktYXhpcyBvZmZzZXQgKi8KKyNkZWZpbmUgT0ZTWgkJMHgyMAkvKiBSL1cgWi1heGlzIG9mZnNldCAqLworI2RlZmluZSBEVVIJCTB4MjEJLyogUi9XIFRhcCBkdXJhdGlvbiAqLworI2RlZmluZSBMQVRFTlQJCTB4MjIJLyogUi9XIFRhcCBsYXRlbmN5ICovCisjZGVmaW5lIFdJTkRPVwkJMHgyMwkvKiBSL1cgVGFwIHdpbmRvdyAqLworI2RlZmluZSBUSFJFU0hfQUNUCTB4MjQJLyogUi9XIEFjdGl2aXR5IHRocmVzaG9sZCAqLworI2RlZmluZSBUSFJFU0hfSU5BQ1QJMHgyNQkvKiBSL1cgSW5hY3Rpdml0eSB0aHJlc2hvbGQgKi8KKyNkZWZpbmUgVElNRV9JTkFDVAkweDI2CS8qIFIvVyBJbmFjdGl2aXR5IHRpbWUgKi8KKyNkZWZpbmUgQUNUX0lOQUNUX0NUTAkweDI3CS8qIFIvVyBBeGlzIGVuYWJsZSBjb250cm9sIGZvciBhY3Rpdml0eSBhbmQgKi8KKwkJCQkvKiBpbmFjdGl2aXR5IGRldGVjdGlvbiAqLworI2RlZmluZSBUSFJFU0hfRkYJMHgyOAkvKiBSL1cgRnJlZS1mYWxsIHRocmVzaG9sZCAqLworI2RlZmluZSBUSU1FX0ZGCQkweDI5CS8qIFIvVyBGcmVlLWZhbGwgdGltZSAqLworI2RlZmluZSBUQVBfQVhFUwkweDJBCS8qIFIvVyBBeGlzIGNvbnRyb2wgZm9yIHRhcC9kb3VibGUgdGFwICovCisjZGVmaW5lIEFDVF9UQVBfU1RBVFVTCTB4MkIJLyogUiAgIFNvdXJjZSBvZiB0YXAvZG91YmxlIHRhcCAqLworI2RlZmluZSBCV19SQVRFCQkweDJDCS8qIFIvVyBEYXRhIHJhdGUgYW5kIHBvd2VyIG1vZGUgY29udHJvbCAqLworI2RlZmluZSBQT1dFUl9DVEwJMHgyRAkvKiBSL1cgUG93ZXIgc2F2aW5nIGZlYXR1cmVzIGNvbnRyb2wgKi8KKyNkZWZpbmUgSU5UX0VOQUJMRQkweDJFCS8qIFIvVyBJbnRlcnJ1cHQgZW5hYmxlIGNvbnRyb2wgKi8KKyNkZWZpbmUgSU5UX01BUAkJMHgyRgkvKiBSL1cgSW50ZXJydXB0IG1hcHBpbmcgY29udHJvbCAqLworI2RlZmluZSBJTlRfU09VUkNFCTB4MzAJLyogUiAgIFNvdXJjZSBvZiBpbnRlcnJ1cHRzICovCisjZGVmaW5lIERBVEFfRk9STUFUCTB4MzEJLyogUi9XIERhdGEgZm9ybWF0IGNvbnRyb2wgKi8KKyNkZWZpbmUgREFUQVgwCQkweDMyCS8qIFIgICBYLUF4aXMgRGF0YSAwICovCisjZGVmaW5lIERBVEFYMQkJMHgzMwkvKiBSICAgWC1BeGlzIERhdGEgMSAqLworI2RlZmluZSBEQVRBWTAJCTB4MzQJLyogUiAgIFktQXhpcyBEYXRhIDAgKi8KKyNkZWZpbmUgREFUQVkxCQkweDM1CS8qIFIgICBZLUF4aXMgRGF0YSAxICovCisjZGVmaW5lIERBVEFaMAkJMHgzNgkvKiBSICAgWi1BeGlzIERhdGEgMCAqLworI2RlZmluZSBEQVRBWjEJCTB4MzcJLyogUiAgIFotQXhpcyBEYXRhIDEgKi8KKyNkZWZpbmUgRklGT19DVEwJMHgzOAkvKiBSL1cgRklGTyBjb250cm9sICovCisjZGVmaW5lIEZJRk9fU1RBVFVTCTB4MzkJLyogUiAgIEZJRk8gc3RhdHVzICovCisjZGVmaW5lIFRBUF9TSUdOCTB4M0EJLyogUiAgIFNpZ24gYW5kIHNvdXJjZSBmb3IgdGFwL2RvdWJsZSB0YXAgKi8KKy8qIE9yaWVudGF0aW9uIEFEWEwzNDYgb25seSAqLworI2RlZmluZSBPUklFTlRfQ09ORgkweDNCCS8qIFIvVyBPcmllbnRhdGlvbiBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIE9SSUVOVAkJMHgzQwkvKiBSICAgT3JpZW50YXRpb24gc3RhdHVzICovCisKKy8qIERFVklEcyAqLworI2RlZmluZSBJRF9BRFhMMzQ1CTB4RTUKKyNkZWZpbmUgSURfQURYTDM0NgkweEU2CisKKy8qIElOVF9FTkFCTEUvSU5UX01BUC9JTlRfU09VUkNFIEJpdHMgKi8KKyNkZWZpbmUgREFUQV9SRUFEWQkoMSA8PCA3KQorI2RlZmluZSBTSU5HTEVfVEFQCSgxIDw8IDYpCisjZGVmaW5lIERPVUJMRV9UQVAJKDEgPDwgNSkKKyNkZWZpbmUgQUNUSVZJVFkJKDEgPDwgNCkKKyNkZWZpbmUgSU5BQ1RJVklUWQkoMSA8PCAzKQorI2RlZmluZSBGUkVFX0ZBTEwJKDEgPDwgMikKKyNkZWZpbmUgV0FURVJNQVJLCSgxIDw8IDEpCisjZGVmaW5lIE9WRVJSVU4JCSgxIDw8IDApCisKKy8qIEFDVF9JTkFDVF9DT05UUk9MIEJpdHMgKi8KKyNkZWZpbmUgQUNUX0FDREMJKDEgPDwgNykKKyNkZWZpbmUgQUNUX1hfRU4JKDEgPDwgNikKKyNkZWZpbmUgQUNUX1lfRU4JKDEgPDwgNSkKKyNkZWZpbmUgQUNUX1pfRU4JKDEgPDwgNCkKKyNkZWZpbmUgSU5BQ1RfQUNEQwkoMSA8PCAzKQorI2RlZmluZSBJTkFDVF9YX0VOCSgxIDw8IDIpCisjZGVmaW5lIElOQUNUX1lfRU4JKDEgPDwgMSkKKyNkZWZpbmUgSU5BQ1RfWl9FTgkoMSA8PCAwKQorCisvKiBUQVBfQVhFUyBCaXRzICovCisjZGVmaW5lIFNVUFBSRVNTCSgxIDw8IDMpCisjZGVmaW5lIFRBUF9YX0VOCSgxIDw8IDIpCisjZGVmaW5lIFRBUF9ZX0VOCSgxIDw8IDEpCisjZGVmaW5lIFRBUF9aX0VOCSgxIDw8IDApCisKKy8qIEFDVF9UQVBfU1RBVFVTIEJpdHMgKi8KKyNkZWZpbmUgQUNUX1hfU1JDCSgxIDw8IDYpCisjZGVmaW5lIEFDVF9ZX1NSQwkoMSA8PCA1KQorI2RlZmluZSBBQ1RfWl9TUkMJKDEgPDwgNCkKKyNkZWZpbmUgQVNMRUVQCQkoMSA8PCAzKQorI2RlZmluZSBUQVBfWF9TUkMJKDEgPDwgMikKKyNkZWZpbmUgVEFQX1lfU1JDCSgxIDw8IDEpCisjZGVmaW5lIFRBUF9aX1NSQwkoMSA8PCAwKQorCisvKiBCV19SQVRFIEJpdHMgKi8KKyNkZWZpbmUgTE9XX1BPV0VSCSgxIDw8IDQpCisjZGVmaW5lIFJBVEUoeCkJCSgoeCkgJiAweEYpCisKKy8qIFBPV0VSX0NUTCBCaXRzICovCisjZGVmaW5lIFBDVExfTElOSwkoMSA8PCA1KQorI2RlZmluZSBQQ1RMX0FVVE9fU0xFRVAgKDEgPDwgNCkKKyNkZWZpbmUgUENUTF9NRUFTVVJFCSgxIDw8IDMpCisjZGVmaW5lIFBDVExfU0xFRVAJKDEgPDwgMikKKyNkZWZpbmUgUENUTF9XQUtFVVAoeCkJKCh4KSAmIDB4MykKKworLyogREFUQV9GT1JNQVQgQml0cyAqLworI2RlZmluZSBTRUxGX1RFU1QJKDEgPDwgNykKKyNkZWZpbmUgU1BJCQkoMSA8PCA2KQorI2RlZmluZSBJTlRfSU5WRVJUCSgxIDw8IDUpCisjZGVmaW5lIEZVTExfUkVTCSgxIDw8IDMpCisjZGVmaW5lIEpVU1RJRlkJCSgxIDw8IDIpCisjZGVmaW5lIFJBTkdFKHgpCSgoeCkgJiAweDMpCisjZGVmaW5lIFJBTkdFX1BNXzJnCTAKKyNkZWZpbmUgUkFOR0VfUE1fNGcJMQorI2RlZmluZSBSQU5HRV9QTV84ZwkyCisjZGVmaW5lIFJBTkdFX1BNXzE2ZwkzCisKKy8qCisgKiBNYXhpbXVtIHZhbHVlIG91ciBheGlzIG1heSBnZXQgaW4gZnVsbCByZXMgbW9kZSBmb3IgdGhlIGlucHV0IGRldmljZQorICogKHNpZ25lZCAxMyBiaXRzKQorICovCisjZGVmaW5lIEFEWExfRlVMTFJFU19NQVhfVkFMIDQwOTYKKworLyoKKyAqIE1heGltdW0gdmFsdWUgb3VyIGF4aXMgbWF5IGdldCBpbiBmaXhlZCByZXMgbW9kZSBmb3IgdGhlIGlucHV0IGRldmljZQorICogKHNpZ25lZCAxMCBiaXRzKQorICovCisjZGVmaW5lIEFEWExfRklYRURSRVNfTUFYX1ZBTCA1MTIKKworLyogRklGT19DVEwgQml0cyAqLworI2RlZmluZSBGSUZPX01PREUoeCkJKCgoeCkgJiAweDMpIDw8IDYpCisjZGVmaW5lIEZJRk9fQllQQVNTCTAKKyNkZWZpbmUgRklGT19GSUZPCTEKKyNkZWZpbmUgRklGT19TVFJFQU0JMgorI2RlZmluZSBGSUZPX1RSSUdHRVIJMworI2RlZmluZSBUUklHR0VSCQkoMSA8PCA1KQorI2RlZmluZSBTQU1QTEVTKHgpCSgoeCkgJiAweDFGKQorCisvKiBGSUZPX1NUQVRVUyBCaXRzICovCisjZGVmaW5lIEZJRk9fVFJJRwkoMSA8PCA3KQorI2RlZmluZSBFTlRSSUVTKHgpCSgoeCkgJiAweDNGKQorCisvKiBUQVBfU0lHTiBCaXRzIEFEWEwzNDYgb25seSAqLworI2RlZmluZSBYU0lHTgkJKDEgPDwgNikKKyNkZWZpbmUgWVNJR04JCSgxIDw8IDUpCisjZGVmaW5lIFpTSUdOCQkoMSA8PCA0KQorI2RlZmluZSBYVEFQCQkoMSA8PCAzKQorI2RlZmluZSBZVEFQCQkoMSA8PCAyKQorI2RlZmluZSBaVEFQCQkoMSA8PCAxKQorCisvKiBPUklFTlRfQ09ORiBBRFhMMzQ2IG9ubHkgKi8KKyNkZWZpbmUgT1JJRU5UX0RFQURaT05FKHgpCSgoKHgpICYgMHg3KSA8PCA0KQorI2RlZmluZSBPUklFTlRfRElWSVNPUih4KQkoKHgpICYgMHg3KQorCisvKiBPUklFTlQgQURYTDM0NiBvbmx5ICovCisjZGVmaW5lIEFEWEwzNDZfMkRfVkFMSUQJCSgxIDw8IDYpCisjZGVmaW5lIEFEWEwzNDZfMkRfT1JJRU5UKHgpCQkoKCh4KSAmIDB4MykgPj4gNCkKKyNkZWZpbmUgQURYTDM0Nl8zRF9WQUxJRAkJKDEgPDwgMykKKyNkZWZpbmUgQURYTDM0Nl8zRF9PUklFTlQoeCkJCSgoeCkgJiAweDcpCisjZGVmaW5lIEFEWEwzNDZfMkRfUE9SVFJBSVRfUE9TCQkwCS8qICtYICovCisjZGVmaW5lIEFEWEwzNDZfMkRfUE9SVFJBSVRfTkVHCQkxCS8qIC1YICovCisjZGVmaW5lIEFEWEwzNDZfMkRfTEFORFNDQVBFX1BPUwkyCS8qICtZICovCisjZGVmaW5lIEFEWEwzNDZfMkRfTEFORFNDQVBFX05FRwkzCS8qIC1ZICovCisKKyNkZWZpbmUgQURYTDM0Nl8zRF9GUk9OVAkJMwkvKiArWCAqLworI2RlZmluZSBBRFhMMzQ2XzNEX0JBQ0sJCQk0CS8qIC1YICovCisjZGVmaW5lIEFEWEwzNDZfM0RfUklHSFQJCTIJLyogK1kgKi8KKyNkZWZpbmUgQURYTDM0Nl8zRF9MRUZUCQkJNQkvKiAtWSAqLworI2RlZmluZSBBRFhMMzQ2XzNEX1RPUAkJCTEJLyogK1ogKi8KKyNkZWZpbmUgQURYTDM0Nl8zRF9CT1RUT00JCTYJLyogLVogKi8KKworI3VuZGVmIEFEWExfREVCVUcKKworI2RlZmluZSBBRFhMX1hfQVhJUwkJCTAKKyNkZWZpbmUgQURYTF9ZX0FYSVMJCQkxCisjZGVmaW5lIEFEWExfWl9BWElTCQkJMgorCisjZGVmaW5lIEFDX1JFQUQoYWMsIHJlZykJKChhYyktPmJvcHMtPnJlYWQoKGFjKS0+ZGV2LCByZWcpKQorI2RlZmluZSBBQ19XUklURShhYywgcmVnLCB2YWwpCSgoYWMpLT5ib3BzLT53cml0ZSgoYWMpLT5kZXYsIHJlZywgdmFsKSkKKworc3RydWN0IGF4aXNfdHJpcGxlIHsKKwlpbnQgeDsKKwlpbnQgeTsKKwlpbnQgejsKK307CisKK3N0cnVjdCBhZHhsMzR4IHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CisJc3RydWN0IG11dGV4IG11dGV4OwkvKiByZWVudHJhbnQgcHJvdGVjdGlvbiBmb3Igc3RydWN0ICovCisJc3RydWN0IGFkeGwzNHhfcGxhdGZvcm1fZGF0YSBwZGF0YTsKKwlzdHJ1Y3QgYXhpc190cmlwbGUgc3djYWw7CisJc3RydWN0IGF4aXNfdHJpcGxlIGh3Y2FsOworCXN0cnVjdCBheGlzX3RyaXBsZSBzYXZlZDsKKwljaGFyIHBoeXNbMzJdOworCXVuc2lnbmVkIG9yaWVudDJkX3NhdmVkOworCXVuc2lnbmVkIG9yaWVudDNkX3NhdmVkOworCWJvb2wgZGlzYWJsZWQ7CS8qIFA6IG11dGV4ICovCisJYm9vbCBvcGVuZWQ7CS8qIFA6IG11dGV4ICovCisJYm9vbCBzdXNwZW5kZWQ7CS8qIFA6IG11dGV4ICovCisJYm9vbCBmaWZvX2RlbGF5OworCWludCBpcnE7CisJdW5zaWduZWQgbW9kZWw7CisJdW5zaWduZWQgaW50X21hc2s7CisKKwljb25zdCBzdHJ1Y3QgYWR4bDM0eF9idXNfb3BzICpib3BzOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhZHhsMzR4X3BsYXRmb3JtX2RhdGEgYWR4bDM0eF9kZWZhdWx0X2luaXQgPSB7CisJLnRhcF90aHJlc2hvbGQgPSAzNSwKKwkudGFwX2R1cmF0aW9uID0gMywKKwkudGFwX2xhdGVuY3kgPSAyMCwKKwkudGFwX3dpbmRvdyA9IDIwLAorCS50YXBfYXhpc19jb250cm9sID0gQURYTF9UQVBfWF9FTiB8IEFEWExfVEFQX1lfRU4gfCBBRFhMX1RBUF9aX0VOLAorCS5hY3RfYXhpc19jb250cm9sID0gMHhGRiwKKwkuYWN0aXZpdHlfdGhyZXNob2xkID0gNiwKKwkuaW5hY3Rpdml0eV90aHJlc2hvbGQgPSA0LAorCS5pbmFjdGl2aXR5X3RpbWUgPSAzLAorCS5mcmVlX2ZhbGxfdGhyZXNob2xkID0gOCwKKwkuZnJlZV9mYWxsX3RpbWUgPSAweDIwLAorCS5kYXRhX3JhdGUgPSA4LAorCS5kYXRhX3JhbmdlID0gQURYTF9GVUxMX1JFUywKKworCS5ldl90eXBlID0gRVZfQUJTLAorCS5ldl9jb2RlX3ggPSBBQlNfWCwJLyogRVZfUkVMICovCisJLmV2X2NvZGVfeSA9IEFCU19ZLAkvKiBFVl9SRUwgKi8KKwkuZXZfY29kZV96ID0gQUJTX1osCS8qIEVWX1JFTCAqLworCisJLmV2X2NvZGVfdGFwID0ge0JUTl9UT1VDSCwgQlROX1RPVUNILCBCVE5fVE9VQ0h9LCAvKiBFVl9LRVkge3gseSx6fSAqLworCS5wb3dlcl9tb2RlID0gQURYTF9BVVRPX1NMRUVQIHwgQURYTF9MSU5LLAorCS5maWZvX21vZGUgPSBGSUZPX1NUUkVBTSwKKwkud2F0ZXJtYXJrID0gMCwKK307CisKK3N0YXRpYyB2b2lkIGFkeGwzNHhfZ2V0X3RyaXBsZShzdHJ1Y3QgYWR4bDM0eCAqYWMsIHN0cnVjdCBheGlzX3RyaXBsZSAqYXhpcykKK3sKKwlzaG9ydCBidWZbM107CisKKwlhYy0+Ym9wcy0+cmVhZF9ibG9jayhhYy0+ZGV2LCBEQVRBWDAsIERBVEFaMSAtIERBVEFYMCArIDEsIGJ1Zik7CisKKwltdXRleF9sb2NrKCZhYy0+bXV0ZXgpOworCWFjLT5zYXZlZC54ID0gKHMxNikgbGUxNl90b19jcHUoYnVmWzBdKTsKKwlheGlzLT54ID0gYWMtPnNhdmVkLng7CisKKwlhYy0+c2F2ZWQueSA9IChzMTYpIGxlMTZfdG9fY3B1KGJ1ZlsxXSk7CisJYXhpcy0+eSA9IGFjLT5zYXZlZC55OworCisJYWMtPnNhdmVkLnogPSAoczE2KSBsZTE2X3RvX2NwdShidWZbMl0pOworCWF4aXMtPnogPSBhYy0+c2F2ZWQuejsKKwltdXRleF91bmxvY2soJmFjLT5tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkeGwzNHhfc2VydmljZV9ldl9maWZvKHN0cnVjdCBhZHhsMzR4ICphYykKK3sKKwlzdHJ1Y3QgYWR4bDM0eF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9ICZhYy0+cGRhdGE7CisJc3RydWN0IGF4aXNfdHJpcGxlIGF4aXM7CisKKwlhZHhsMzR4X2dldF90cmlwbGUoYWMsICZheGlzKTsKKworCWlucHV0X2V2ZW50KGFjLT5pbnB1dCwgcGRhdGEtPmV2X3R5cGUsIHBkYXRhLT5ldl9jb2RlX3gsCisJCSAgICBheGlzLnggLSBhYy0+c3djYWwueCk7CisJaW5wdXRfZXZlbnQoYWMtPmlucHV0LCBwZGF0YS0+ZXZfdHlwZSwgcGRhdGEtPmV2X2NvZGVfeSwKKwkJICAgIGF4aXMueSAtIGFjLT5zd2NhbC55KTsKKwlpbnB1dF9ldmVudChhYy0+aW5wdXQsIHBkYXRhLT5ldl90eXBlLCBwZGF0YS0+ZXZfY29kZV96LAorCQkgICAgYXhpcy56IC0gYWMtPnN3Y2FsLnopOworfQorCitzdGF0aWMgdm9pZCBhZHhsMzR4X3JlcG9ydF9rZXlfc2luZ2xlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LCBpbnQga2V5KQoreworCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIGtleSwgdHJ1ZSk7CisJaW5wdXRfc3luYyhpbnB1dCk7CisJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwga2V5LCBmYWxzZSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkeGwzNHhfc2VuZF9rZXlfZXZlbnRzKHN0cnVjdCBhZHhsMzR4ICphYywKKwkJc3RydWN0IGFkeGwzNHhfcGxhdGZvcm1fZGF0YSAqcGRhdGEsIGludCBzdGF0dXMsIGludCBwcmVzcykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IEFEWExfWF9BWElTOyBpIDw9IEFEWExfWl9BWElTOyBpKyspIHsKKwkJaWYgKHN0YXR1cyAmICgxIDw8IChBRFhMX1pfQVhJUyAtIGkpKSkKKwkJCWlucHV0X3JlcG9ydF9rZXkoYWMtPmlucHV0LAorCQkJCQkgcGRhdGEtPmV2X2NvZGVfdGFwW2ldLCBwcmVzcyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhZHhsMzR4X2RvX3RhcChzdHJ1Y3QgYWR4bDM0eCAqYWMsCisJCXN0cnVjdCBhZHhsMzR4X3BsYXRmb3JtX2RhdGEgKnBkYXRhLCBpbnQgc3RhdHVzKQoreworCWFkeGwzNHhfc2VuZF9rZXlfZXZlbnRzKGFjLCBwZGF0YSwgc3RhdHVzLCB0cnVlKTsKKwlpbnB1dF9zeW5jKGFjLT5pbnB1dCk7CisJYWR4bDM0eF9zZW5kX2tleV9ldmVudHMoYWMsIHBkYXRhLCBzdGF0dXMsIGZhbHNlKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGFkeGwzNHhfaXJxKGludCBpcnEsIHZvaWQgKmhhbmRsZSkKK3sKKwlzdHJ1Y3QgYWR4bDM0eCAqYWMgPSBoYW5kbGU7CisJc3RydWN0IGFkeGwzNHhfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSAmYWMtPnBkYXRhOworCWludCBpbnRfc3RhdCwgdGFwX3N0YXQsIHNhbXBsZXMsIG9yaWVudCwgb3JpZW50X2NvZGU7CisKKwkvKgorCSAqIEFDVF9UQVBfU1RBVFVTIHNob3VsZCBiZSByZWFkIGJlZm9yZSBjbGVhcmluZyB0aGUgaW50ZXJydXB0CisJICogQXZvaWQgcmVhZGluZyBBQ1RfVEFQX1NUQVRVUyBpbiBjYXNlIFRBUCBkZXRlY3Rpb24gaXMgZGlzYWJsZWQKKwkgKi8KKworCWlmIChwZGF0YS0+dGFwX2F4aXNfY29udHJvbCAmIChUQVBfWF9FTiB8IFRBUF9ZX0VOIHwgVEFQX1pfRU4pKQorCQl0YXBfc3RhdCA9IEFDX1JFQUQoYWMsIEFDVF9UQVBfU1RBVFVTKTsKKwllbHNlCisJCXRhcF9zdGF0ID0gMDsKKworCWludF9zdGF0ID0gQUNfUkVBRChhYywgSU5UX1NPVVJDRSk7CisKKwlpZiAoaW50X3N0YXQgJiBGUkVFX0ZBTEwpCisJCWFkeGwzNHhfcmVwb3J0X2tleV9zaW5nbGUoYWMtPmlucHV0LCBwZGF0YS0+ZXZfY29kZV9mZik7CisKKwlpZiAoaW50X3N0YXQgJiBPVkVSUlVOKQorCQlkZXZfZGJnKGFjLT5kZXYsICJPVkVSUlVOXG4iKTsKKworCWlmIChpbnRfc3RhdCAmIChTSU5HTEVfVEFQIHwgRE9VQkxFX1RBUCkpIHsKKwkJYWR4bDM0eF9kb190YXAoYWMsIHBkYXRhLCB0YXBfc3RhdCk7CisKKwkJaWYgKGludF9zdGF0ICYgRE9VQkxFX1RBUCkKKwkJCWFkeGwzNHhfZG9fdGFwKGFjLCBwZGF0YSwgdGFwX3N0YXQpOworCX0KKworCWlmIChwZGF0YS0+ZXZfY29kZV9hY3RfaW5hY3Rpdml0eSkgeworCQlpZiAoaW50X3N0YXQgJiBBQ1RJVklUWSkKKwkJCWlucHV0X3JlcG9ydF9rZXkoYWMtPmlucHV0LAorCQkJCQkgcGRhdGEtPmV2X2NvZGVfYWN0X2luYWN0aXZpdHksIDEpOworCQlpZiAoaW50X3N0YXQgJiBJTkFDVElWSVRZKQorCQkJaW5wdXRfcmVwb3J0X2tleShhYy0+aW5wdXQsCisJCQkJCSBwZGF0YS0+ZXZfY29kZV9hY3RfaW5hY3Rpdml0eSwgMCk7CisJfQorCisJLyoKKwkgKiBPUklFTlRBVElPTiBTRU5TSU5HIEFEWEwzNDYgb25seQorCSAqLworCWlmIChwZGF0YS0+b3JpZW50YXRpb25fZW5hYmxlKSB7CisJCW9yaWVudCA9IEFDX1JFQUQoYWMsIE9SSUVOVCk7CisJCWlmICgocGRhdGEtPm9yaWVudGF0aW9uX2VuYWJsZSAmIEFEWExfRU5fT1JJRU5UQVRJT05fMkQpICYmCisJCSAgICAob3JpZW50ICYgQURYTDM0Nl8yRF9WQUxJRCkpIHsKKworCQkJb3JpZW50X2NvZGUgPSBBRFhMMzQ2XzJEX09SSUVOVChvcmllbnQpOworCQkJLyogUmVwb3J0IG9yaWVudGF0aW9uIG9ubHkgd2hlbiBpdCBjaGFuZ2VzICovCisJCQlpZiAoYWMtPm9yaWVudDJkX3NhdmVkICE9IG9yaWVudF9jb2RlKSB7CisJCQkJYWMtPm9yaWVudDJkX3NhdmVkID0gb3JpZW50X2NvZGU7CisJCQkJYWR4bDM0eF9yZXBvcnRfa2V5X3NpbmdsZShhYy0+aW5wdXQsCisJCQkJCXBkYXRhLT5ldl9jb2Rlc19vcmllbnRfMmRbb3JpZW50X2NvZGVdKTsKKwkJCX0KKwkJfQorCisJCWlmICgocGRhdGEtPm9yaWVudGF0aW9uX2VuYWJsZSAmIEFEWExfRU5fT1JJRU5UQVRJT05fM0QpICYmCisJCSAgICAob3JpZW50ICYgQURYTDM0Nl8zRF9WQUxJRCkpIHsKKworCQkJb3JpZW50X2NvZGUgPSBBRFhMMzQ2XzNEX09SSUVOVChvcmllbnQpIC0gMTsKKwkJCS8qIFJlcG9ydCBvcmllbnRhdGlvbiBvbmx5IHdoZW4gaXQgY2hhbmdlcyAqLworCQkJaWYgKGFjLT5vcmllbnQzZF9zYXZlZCAhPSBvcmllbnRfY29kZSkgeworCQkJCWFjLT5vcmllbnQzZF9zYXZlZCA9IG9yaWVudF9jb2RlOworCQkJCWFkeGwzNHhfcmVwb3J0X2tleV9zaW5nbGUoYWMtPmlucHV0LAorCQkJCQlwZGF0YS0+ZXZfY29kZXNfb3JpZW50XzNkW29yaWVudF9jb2RlXSk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoaW50X3N0YXQgJiAoREFUQV9SRUFEWSB8IFdBVEVSTUFSSykpIHsKKworCQlpZiAocGRhdGEtPmZpZm9fbW9kZSkKKwkJCXNhbXBsZXMgPSBFTlRSSUVTKEFDX1JFQUQoYWMsIEZJRk9fU1RBVFVTKSkgKyAxOworCQllbHNlCisJCQlzYW1wbGVzID0gMTsKKworCQlmb3IgKDsgc2FtcGxlcyA+IDA7IHNhbXBsZXMtLSkgeworCQkJYWR4bDM0eF9zZXJ2aWNlX2V2X2ZpZm8oYWMpOworCQkJLyoKKwkJCSAqIFRvIGVuc3VyZSB0aGF0IHRoZSBGSUZPIGhhcworCQkJICogY29tcGxldGVseSBwb3BwZWQsIHRoZXJlIG11c3QgYmUgYXQgbGVhc3QgNSB1cyBiZXR3ZWVuCisJCQkgKiB0aGUgZW5kIG9mIHJlYWRpbmcgdGhlIGRhdGEgcmVnaXN0ZXJzLCBzaWduaWZpZWQgYnkgdGhlCisJCQkgKiB0cmFuc2l0aW9uIHRvIHJlZ2lzdGVyIDB4MzggZnJvbSAweDM3IG9yIHRoZSBDUyBwaW4KKwkJCSAqIGdvaW5nIGhpZ2gsIGFuZCB0aGUgc3RhcnQgb2YgbmV3IHJlYWRzIG9mIHRoZSBGSUZPIG9yCisJCQkgKiByZWFkaW5nIHRoZSBGSUZPX1NUQVRVUyByZWdpc3Rlci4gRm9yIFNQSSBvcGVyYXRpb24gYXQKKwkJCSAqIDEuNSBNSHogb3IgbG93ZXIsIHRoZSByZWdpc3RlciBhZGRyZXNzaW5nIHBvcnRpb24gb2YgdGhlCisJCQkgKiB0cmFuc21pc3Npb24gaXMgc3VmZmljaWVudCBkZWxheSB0byBlbnN1cmUgdGhlIEZJRk8gaGFzCisJCQkgKiBjb21wbGV0ZWx5IHBvcHBlZC4gSXQgaXMgbmVjZXNzYXJ5IGZvciBTUEkgb3BlcmF0aW9uCisJCQkgKiBncmVhdGVyIHRoYW4gMS41IE1IeiB0byBkZS1hc3NlcnQgdGhlIENTIHBpbiB0byBlbnN1cmUgYQorCQkJICogdG90YWwgb2YgNSB1cywgd2hpY2ggaXMgYXQgbW9zdCAzLjQgdXMgYXQgNSBNSHoKKwkJCSAqIG9wZXJhdGlvbi4KKwkJCSAqLworCQkJaWYgKGFjLT5maWZvX2RlbGF5ICYmIChzYW1wbGVzID4gMSkpCisJCQkJdWRlbGF5KDMpOworCQl9CisJfQorCisJaW5wdXRfc3luYyhhYy0+aW5wdXQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBfX2FkeGwzNHhfZGlzYWJsZShzdHJ1Y3QgYWR4bDM0eCAqYWMpCit7CisJLyoKKwkgKiBBICcwJyBwbGFjZXMgdGhlIEFEWEwzNHggaW50byBzdGFuZGJ5IG1vZGUKKwkgKiB3aXRoIG1pbmltdW0gcG93ZXIgY29uc3VtcHRpb24uCisJICovCisJQUNfV1JJVEUoYWMsIFBPV0VSX0NUTCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fYWR4bDM0eF9lbmFibGUoc3RydWN0IGFkeGwzNHggKmFjKQoreworCUFDX1dSSVRFKGFjLCBQT1dFUl9DVEwsIGFjLT5wZGF0YS5wb3dlcl9tb2RlIHwgUENUTF9NRUFTVVJFKTsKK30KKwordm9pZCBhZHhsMzR4X3N1c3BlbmQoc3RydWN0IGFkeGwzNHggKmFjKQoreworCW11dGV4X2xvY2soJmFjLT5tdXRleCk7CisKKwlpZiAoIWFjLT5zdXNwZW5kZWQgJiYgIWFjLT5kaXNhYmxlZCAmJiBhYy0+b3BlbmVkKQorCQlfX2FkeGwzNHhfZGlzYWJsZShhYyk7CisKKwlhYy0+c3VzcGVuZGVkID0gdHJ1ZTsKKworCW11dGV4X3VubG9jaygmYWMtPm11dGV4KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFkeGwzNHhfc3VzcGVuZCk7CisKK3ZvaWQgYWR4bDM0eF9yZXN1bWUoc3RydWN0IGFkeGwzNHggKmFjKQoreworCW11dGV4X2xvY2soJmFjLT5tdXRleCk7CisKKwlpZiAoYWMtPnN1c3BlbmRlZCAmJiAhYWMtPmRpc2FibGVkICYmIGFjLT5vcGVuZWQpCisJCV9fYWR4bDM0eF9lbmFibGUoYWMpOworCisJYWMtPnN1c3BlbmRlZCA9IGZhbHNlOworCisJbXV0ZXhfdW5sb2NrKCZhYy0+bXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYWR4bDM0eF9yZXN1bWUpOworCitzdGF0aWMgc3NpemVfdCBhZHhsMzR4X2Rpc2FibGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGFkeGwzNHggKmFjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgYWMtPmRpc2FibGVkKTsKK30KKworc3RhdGljIHNzaXplX3QgYWR4bDM0eF9kaXNhYmxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGFkeGwzNHggKmFjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCW11dGV4X2xvY2soJmFjLT5tdXRleCk7CisKKwlpZiAoIWFjLT5zdXNwZW5kZWQgJiYgYWMtPm9wZW5lZCkgeworCQlpZiAodmFsKSB7CisJCQlpZiAoIWFjLT5kaXNhYmxlZCkKKwkJCQlfX2FkeGwzNHhfZGlzYWJsZShhYyk7CisJCX0gZWxzZSB7CisJCQlpZiAoYWMtPmRpc2FibGVkKQorCQkJCV9fYWR4bDM0eF9lbmFibGUoYWMpOworCQl9CisJfQorCisJYWMtPmRpc2FibGVkID0gISF2YWw7CisKKwltdXRleF91bmxvY2soJmFjLT5tdXRleCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihkaXNhYmxlLCAwNjY0LCBhZHhsMzR4X2Rpc2FibGVfc2hvdywgYWR4bDM0eF9kaXNhYmxlX3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgYWR4bDM0eF9jYWxpYnJhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWR4bDM0eCAqYWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzc2l6ZV90IGNvdW50OworCisJbXV0ZXhfbG9jaygmYWMtPm11dGV4KTsKKwljb3VudCA9IHNwcmludGYoYnVmLCAiJWQsJWQsJWRcbiIsCisJCQlhYy0+aHdjYWwueCAqIDQgKyBhYy0+c3djYWwueCwKKwkJCWFjLT5od2NhbC55ICogNCArIGFjLT5zd2NhbC55LAorCQkJYWMtPmh3Y2FsLnogKiA0ICsgYWMtPnN3Y2FsLnopOworCW11dGV4X3VubG9jaygmYWMtPm11dGV4KTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgYWR4bDM0eF9jYWxpYnJhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGFkeGwzNHggKmFjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwkvKgorCSAqIEhhcmR3YXJlIG9mZnNldCBjYWxpYnJhdGlvbiBoYXMgYSByZXNvbHV0aW9uIG9mIDE1LjYgbWcvTFNCLgorCSAqIFdlIHVzZSBIVyBjYWxpYnJhdGlvbiBhbmQgaGFuZGxlIHRoZSByZW1haW5pbmcgYml0cyBpbiBTVy4gKDRtZy9MU0IpCisJICovCisKKwltdXRleF9sb2NrKCZhYy0+bXV0ZXgpOworCWFjLT5od2NhbC54IC09IChhYy0+c2F2ZWQueCAvIDQpOworCWFjLT5zd2NhbC54ID0gYWMtPnNhdmVkLnggJSA0OworCisJYWMtPmh3Y2FsLnkgLT0gKGFjLT5zYXZlZC55IC8gNCk7CisJYWMtPnN3Y2FsLnkgPSBhYy0+c2F2ZWQueSAlIDQ7CisKKwlhYy0+aHdjYWwueiAtPSAoYWMtPnNhdmVkLnogLyA0KTsKKwlhYy0+c3djYWwueiA9IGFjLT5zYXZlZC56ICUgNDsKKworCUFDX1dSSVRFKGFjLCBPRlNYLCAoczgpIGFjLT5od2NhbC54KTsKKwlBQ19XUklURShhYywgT0ZTWSwgKHM4KSBhYy0+aHdjYWwueSk7CisJQUNfV1JJVEUoYWMsIE9GU1osIChzOCkgYWMtPmh3Y2FsLnopOworCW11dGV4X3VubG9jaygmYWMtPm11dGV4KTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGNhbGlicmF0ZSwgMDY2NCwKKwkJICAgYWR4bDM0eF9jYWxpYnJhdGVfc2hvdywgYWR4bDM0eF9jYWxpYnJhdGVfc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBhZHhsMzR4X3JhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGFkeGwzNHggKmFjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgUkFURShhYy0+cGRhdGEuZGF0YV9yYXRlKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkeGwzNHhfcmF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhZHhsMzR4ICphYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCBlcnJvcjsKKworCWVycm9yID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwltdXRleF9sb2NrKCZhYy0+bXV0ZXgpOworCisJYWMtPnBkYXRhLmRhdGFfcmF0ZSA9IFJBVEUodmFsKTsKKwlBQ19XUklURShhYywgQldfUkFURSwKKwkJIGFjLT5wZGF0YS5kYXRhX3JhdGUgfAorCQkJKGFjLT5wZGF0YS5sb3dfcG93ZXJfbW9kZSA/IExPV19QT1dFUiA6IDApKTsKKworCW11dGV4X3VubG9jaygmYWMtPm11dGV4KTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHJhdGUsIDA2NjQsIGFkeGwzNHhfcmF0ZV9zaG93LCBhZHhsMzR4X3JhdGVfc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBhZHhsMzR4X2F1dG9zbGVlcF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWR4bDM0eCAqYWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLAorCQlhYy0+cGRhdGEucG93ZXJfbW9kZSAmIChQQ1RMX0FVVE9fU0xFRVAgfCBQQ1RMX0xJTkspID8gMSA6IDApOworfQorCitzdGF0aWMgc3NpemVfdCBhZHhsMzR4X2F1dG9zbGVlcF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhZHhsMzR4ICphYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCBlcnJvcjsKKworCWVycm9yID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwltdXRleF9sb2NrKCZhYy0+bXV0ZXgpOworCisJaWYgKHZhbCkKKwkJYWMtPnBkYXRhLnBvd2VyX21vZGUgfD0gKFBDVExfQVVUT19TTEVFUCB8IFBDVExfTElOSyk7CisJZWxzZQorCQlhYy0+cGRhdGEucG93ZXJfbW9kZSAmPSB+KFBDVExfQVVUT19TTEVFUCB8IFBDVExfTElOSyk7CisKKwlpZiAoIWFjLT5kaXNhYmxlZCAmJiAhYWMtPnN1c3BlbmRlZCAmJiBhYy0+b3BlbmVkKQorCQlBQ19XUklURShhYywgUE9XRVJfQ1RMLCBhYy0+cGRhdGEucG93ZXJfbW9kZSB8IFBDVExfTUVBU1VSRSk7CisKKwltdXRleF91bmxvY2soJmFjLT5tdXRleCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihhdXRvc2xlZXAsIDA2NjQsCisJCSAgIGFkeGwzNHhfYXV0b3NsZWVwX3Nob3csIGFkeGwzNHhfYXV0b3NsZWVwX3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgYWR4bDM0eF9wb3NpdGlvbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWR4bDM0eCAqYWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzc2l6ZV90IGNvdW50OworCisJbXV0ZXhfbG9jaygmYWMtPm11dGV4KTsKKwljb3VudCA9IHNwcmludGYoYnVmLCAiKCVkLCAlZCwgJWQpXG4iLAorCQkJYWMtPnNhdmVkLngsIGFjLT5zYXZlZC55LCBhYy0+c2F2ZWQueik7CisJbXV0ZXhfdW5sb2NrKCZhYy0+bXV0ZXgpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIocG9zaXRpb24sIFNfSVJVR08sIGFkeGwzNHhfcG9zaXRpb25fc2hvdywgTlVMTCk7CisKKyNpZmRlZiBBRFhMX0RFQlVHCitzdGF0aWMgc3NpemVfdCBhZHhsMzR4X3dyaXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWR4bDM0eCAqYWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgZXJyb3I7CisKKwkvKgorCSAqIFRoaXMgYWxsb3dzIGJhc2ljIEFEWEwgcmVnaXN0ZXIgd3JpdGUgYWNjZXNzIGZvciBkZWJ1ZyBwdXJwb3Nlcy4KKwkgKi8KKwllcnJvciA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTYsICZ2YWwpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJbXV0ZXhfbG9jaygmYWMtPm11dGV4KTsKKwlBQ19XUklURShhYywgdmFsID4+IDgsIHZhbCAmIDB4RkYpOworCW11dGV4X3VubG9jaygmYWMtPm11dGV4KTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHdyaXRlLCAwNjY0LCBOVUxMLCBhZHhsMzR4X3dyaXRlX3N0b3JlKTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWR4bDM0eF9hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX2Rpc2FibGUuYXR0ciwKKwkmZGV2X2F0dHJfY2FsaWJyYXRlLmF0dHIsCisJJmRldl9hdHRyX3JhdGUuYXR0ciwKKwkmZGV2X2F0dHJfYXV0b3NsZWVwLmF0dHIsCisJJmRldl9hdHRyX3Bvc2l0aW9uLmF0dHIsCisjaWZkZWYgQURYTF9ERUJVRworCSZkZXZfYXR0cl93cml0ZS5hdHRyLAorI2VuZGlmCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWR4bDM0eF9hdHRyX2dyb3VwID0geworCS5hdHRycyA9IGFkeGwzNHhfYXR0cmlidXRlcywKK307CisKK3N0YXRpYyBpbnQgYWR4bDM0eF9pbnB1dF9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQoreworCXN0cnVjdCBhZHhsMzR4ICphYyA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0KTsKKworCW11dGV4X2xvY2soJmFjLT5tdXRleCk7CisKKwlpZiAoIWFjLT5zdXNwZW5kZWQgJiYgIWFjLT5kaXNhYmxlZCkKKwkJX19hZHhsMzR4X2VuYWJsZShhYyk7CisKKwlhYy0+b3BlbmVkID0gdHJ1ZTsKKworCW11dGV4X3VubG9jaygmYWMtPm11dGV4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhZHhsMzR4X2lucHV0X2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQoreworCXN0cnVjdCBhZHhsMzR4ICphYyA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0KTsKKworCW11dGV4X2xvY2soJmFjLT5tdXRleCk7CisKKwlpZiAoIWFjLT5zdXNwZW5kZWQgJiYgIWFjLT5kaXNhYmxlZCkKKwkJX19hZHhsMzR4X2Rpc2FibGUoYWMpOworCisJYWMtPm9wZW5lZCA9IGZhbHNlOworCisJbXV0ZXhfdW5sb2NrKCZhYy0+bXV0ZXgpOworfQorCitzdHJ1Y3QgYWR4bDM0eCAqYWR4bDM0eF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBpcnEsCisJCQkgICAgICBib29sIGZpZm9fZGVsYXlfZGVmYXVsdCwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBhZHhsMzR4X2J1c19vcHMgKmJvcHMpCit7CisJc3RydWN0IGFkeGwzNHggKmFjOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKKwljb25zdCBzdHJ1Y3QgYWR4bDM0eF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlpbnQgZXJyLCByYW5nZSwgaTsKKwl1bnNpZ25lZCBjaGFyIHJldmlkOworCisJaWYgKCFpcnEpIHsKKwkJZGV2X2VycihkZXYsICJubyBJUlE/XG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJfb3V0OworCX0KKworCWFjID0ga3phbGxvYyhzaXplb2YoKmFjKSwgR0ZQX0tFUk5FTCk7CisJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFhYyB8fCAhaW5wdXRfZGV2KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfbWVtOworCX0KKworCWFjLT5maWZvX2RlbGF5ID0gZmlmb19kZWxheV9kZWZhdWx0OworCisJcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJaWYgKCFwZGF0YSkgeworCQlkZXZfZGJnKGRldiwKKwkJCSJObyBwbGF0ZnJvbSBkYXRhOiBVc2luZyBkZWZhdWx0IGluaXRpYWxpemF0aW9uXG4iKTsKKwkJcGRhdGEgPSAmYWR4bDM0eF9kZWZhdWx0X2luaXQ7CisJfQorCisJYWMtPnBkYXRhID0gKnBkYXRhOworCXBkYXRhID0gJmFjLT5wZGF0YTsKKworCWFjLT5pbnB1dCA9IGlucHV0X2RldjsKKwlhYy0+ZGlzYWJsZWQgPSB0cnVlOworCWFjLT5kZXYgPSBkZXY7CisJYWMtPmlycSA9IGlycTsKKwlhYy0+Ym9wcyA9IGJvcHM7CisKKwltdXRleF9pbml0KCZhYy0+bXV0ZXgpOworCisJaW5wdXRfZGV2LT5uYW1lID0gIkFEWEwzNHggYWNjZWxlcm9tZXRlciI7CisJcmV2aWQgPSBhYy0+Ym9wcy0+cmVhZChkZXYsIERFVklEKTsKKworCXN3aXRjaCAocmV2aWQpIHsKKwljYXNlIElEX0FEWEwzNDU6CisJCWFjLT5tb2RlbCA9IDM0NTsKKwkJYnJlYWs7CisJY2FzZSBJRF9BRFhMMzQ2OgorCQlhYy0+bW9kZWwgPSAzNDY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHByb2JlICVzXG4iLCBpbnB1dF9kZXYtPm5hbWUpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl9mcmVlX21lbTsKKwl9CisKKwlzbnByaW50ZihhYy0+cGh5cywgc2l6ZW9mKGFjLT5waHlzKSwgIiVzL2lucHV0MCIsIGRldl9uYW1lKGRldikpOworCisJaW5wdXRfZGV2LT5waHlzID0gYWMtPnBoeXM7CisJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gZGV2OworCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IGFjLT5tb2RlbDsKKwlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBib3BzLT5idXN0eXBlOworCWlucHV0X2Rldi0+b3BlbiA9IGFkeGwzNHhfaW5wdXRfb3BlbjsKKwlpbnB1dF9kZXYtPmNsb3NlID0gYWR4bDM0eF9pbnB1dF9jbG9zZTsKKworCWlucHV0X3NldF9kcnZkYXRhKGlucHV0X2RldiwgYWMpOworCisJX19zZXRfYml0KGFjLT5wZGF0YS5ldl90eXBlLCBpbnB1dF9kZXYtPmV2Yml0KTsKKworCWlmIChhYy0+cGRhdGEuZXZfdHlwZSA9PSBFVl9SRUwpIHsKKwkJX19zZXRfYml0KFJFTF9YLCBpbnB1dF9kZXYtPnJlbGJpdCk7CisJCV9fc2V0X2JpdChSRUxfWSwgaW5wdXRfZGV2LT5yZWxiaXQpOworCQlfX3NldF9iaXQoUkVMX1osIGlucHV0X2Rldi0+cmVsYml0KTsKKwl9IGVsc2UgeworCQkvKiBFVl9BQlMgKi8KKwkJX19zZXRfYml0KEFCU19YLCBpbnB1dF9kZXYtPmFic2JpdCk7CisJCV9fc2V0X2JpdChBQlNfWSwgaW5wdXRfZGV2LT5hYnNiaXQpOworCQlfX3NldF9iaXQoQUJTX1osIGlucHV0X2Rldi0+YWJzYml0KTsKKworCQlpZiAocGRhdGEtPmRhdGFfcmFuZ2UgJiBGVUxMX1JFUykKKwkJCXJhbmdlID0gQURYTF9GVUxMUkVTX01BWF9WQUw7CS8qIFNpZ25lZCAxMy1iaXQgKi8KKwkJZWxzZQorCQkJcmFuZ2UgPSBBRFhMX0ZJWEVEUkVTX01BWF9WQUw7CS8qIFNpZ25lZCAxMC1iaXQgKi8KKworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19YLCAtcmFuZ2UsIHJhbmdlLCAzLCAzKTsKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWSwgLXJhbmdlLCByYW5nZSwgMywgMyk7CisJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1osIC1yYW5nZSwgcmFuZ2UsIDMsIDMpOworCX0KKworCV9fc2V0X2JpdChFVl9LRVksIGlucHV0X2Rldi0+ZXZiaXQpOworCV9fc2V0X2JpdChwZGF0YS0+ZXZfY29kZV90YXBbQURYTF9YX0FYSVNdLCBpbnB1dF9kZXYtPmtleWJpdCk7CisJX19zZXRfYml0KHBkYXRhLT5ldl9jb2RlX3RhcFtBRFhMX1lfQVhJU10sIGlucHV0X2Rldi0+a2V5Yml0KTsKKwlfX3NldF9iaXQocGRhdGEtPmV2X2NvZGVfdGFwW0FEWExfWl9BWElTXSwgaW5wdXRfZGV2LT5rZXliaXQpOworCisJaWYgKHBkYXRhLT5ldl9jb2RlX2ZmKSB7CisJCWFjLT5pbnRfbWFzayA9IEZSRUVfRkFMTDsKKwkJX19zZXRfYml0KHBkYXRhLT5ldl9jb2RlX2ZmLCBpbnB1dF9kZXYtPmtleWJpdCk7CisJfQorCisJaWYgKHBkYXRhLT5ldl9jb2RlX2FjdF9pbmFjdGl2aXR5KQorCQlfX3NldF9iaXQocGRhdGEtPmV2X2NvZGVfYWN0X2luYWN0aXZpdHksIGlucHV0X2Rldi0+a2V5Yml0KTsKKworCWFjLT5pbnRfbWFzayB8PSBBQ1RJVklUWSB8IElOQUNUSVZJVFk7CisKKwlpZiAocGRhdGEtPndhdGVybWFyaykgeworCQlhYy0+aW50X21hc2sgfD0gV0FURVJNQVJLOworCQlpZiAoIUZJRk9fTU9ERShwZGF0YS0+Zmlmb19tb2RlKSkKKwkJCWFjLT5wZGF0YS5maWZvX21vZGUgfD0gRklGT19TVFJFQU07CisJfSBlbHNlIHsKKwkJYWMtPmludF9tYXNrIHw9IERBVEFfUkVBRFk7CisJfQorCisJaWYgKHBkYXRhLT50YXBfYXhpc19jb250cm9sICYgKFRBUF9YX0VOIHwgVEFQX1lfRU4gfCBUQVBfWl9FTikpCisJCWFjLT5pbnRfbWFzayB8PSBTSU5HTEVfVEFQIHwgRE9VQkxFX1RBUDsKKworCWlmIChGSUZPX01PREUocGRhdGEtPmZpZm9fbW9kZSkgPT0gRklGT19CWVBBU1MpCisJCWFjLT5maWZvX2RlbGF5ID0gZmFsc2U7CisKKwlhYy0+Ym9wcy0+d3JpdGUoZGV2LCBQT1dFUl9DVEwsIDApOworCisJZXJyID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoYWMtPmlycSwgTlVMTCwgYWR4bDM0eF9pcnEsCisJCQkJICAgSVJRRl9UUklHR0VSX0hJR0ggfCBJUlFGX09ORVNIT1QsCisJCQkJICAgZGV2X25hbWUoZGV2KSwgYWMpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihkZXYsICJpcnEgJWQgYnVzeT9cbiIsIGFjLT5pcnEpOworCQlnb3RvIGVycl9mcmVlX21lbTsKKwl9CisKKwllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJmFkeGwzNHhfYXR0cl9ncm91cCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfZnJlZV9pcnE7CisKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9yZW1vdmVfYXR0cjsKKworCUFDX1dSSVRFKGFjLCBUSFJFU0hfVEFQLCBwZGF0YS0+dGFwX3RocmVzaG9sZCk7CisJQUNfV1JJVEUoYWMsIE9GU1gsIHBkYXRhLT54X2F4aXNfb2Zmc2V0KTsKKwlhYy0+aHdjYWwueCA9IHBkYXRhLT54X2F4aXNfb2Zmc2V0OworCUFDX1dSSVRFKGFjLCBPRlNZLCBwZGF0YS0+eV9heGlzX29mZnNldCk7CisJYWMtPmh3Y2FsLnkgPSBwZGF0YS0+eV9heGlzX29mZnNldDsKKwlBQ19XUklURShhYywgT0ZTWiwgcGRhdGEtPnpfYXhpc19vZmZzZXQpOworCWFjLT5od2NhbC56ID0gcGRhdGEtPnpfYXhpc19vZmZzZXQ7CisJQUNfV1JJVEUoYWMsIFRIUkVTSF9UQVAsIHBkYXRhLT50YXBfdGhyZXNob2xkKTsKKwlBQ19XUklURShhYywgRFVSLCBwZGF0YS0+dGFwX2R1cmF0aW9uKTsKKwlBQ19XUklURShhYywgTEFURU5ULCBwZGF0YS0+dGFwX2xhdGVuY3kpOworCUFDX1dSSVRFKGFjLCBXSU5ET1csIHBkYXRhLT50YXBfd2luZG93KTsKKwlBQ19XUklURShhYywgVEhSRVNIX0FDVCwgcGRhdGEtPmFjdGl2aXR5X3RocmVzaG9sZCk7CisJQUNfV1JJVEUoYWMsIFRIUkVTSF9JTkFDVCwgcGRhdGEtPmluYWN0aXZpdHlfdGhyZXNob2xkKTsKKwlBQ19XUklURShhYywgVElNRV9JTkFDVCwgcGRhdGEtPmluYWN0aXZpdHlfdGltZSk7CisJQUNfV1JJVEUoYWMsIFRIUkVTSF9GRiwgcGRhdGEtPmZyZWVfZmFsbF90aHJlc2hvbGQpOworCUFDX1dSSVRFKGFjLCBUSU1FX0ZGLCBwZGF0YS0+ZnJlZV9mYWxsX3RpbWUpOworCUFDX1dSSVRFKGFjLCBUQVBfQVhFUywgcGRhdGEtPnRhcF9heGlzX2NvbnRyb2wpOworCUFDX1dSSVRFKGFjLCBBQ1RfSU5BQ1RfQ1RMLCBwZGF0YS0+YWN0X2F4aXNfY29udHJvbCk7CisJQUNfV1JJVEUoYWMsIEJXX1JBVEUsIFJBVEUoYWMtPnBkYXRhLmRhdGFfcmF0ZSkgfAorCQkgKHBkYXRhLT5sb3dfcG93ZXJfbW9kZSA/IExPV19QT1dFUiA6IDApKTsKKwlBQ19XUklURShhYywgREFUQV9GT1JNQVQsIHBkYXRhLT5kYXRhX3JhbmdlKTsKKwlBQ19XUklURShhYywgRklGT19DVEwsIEZJRk9fTU9ERShwZGF0YS0+Zmlmb19tb2RlKSB8CisJCQlTQU1QTEVTKHBkYXRhLT53YXRlcm1hcmspKTsKKworCWlmIChwZGF0YS0+dXNlX2ludDIpIHsKKwkJLyogTWFwIGFsbCBJTlRzIHRvIElOVDIgKi8KKwkJQUNfV1JJVEUoYWMsIElOVF9NQVAsIGFjLT5pbnRfbWFzayB8IE9WRVJSVU4pOworCX0gZWxzZSB7CisJCS8qIE1hcCBhbGwgSU5UcyB0byBJTlQxICovCisJCUFDX1dSSVRFKGFjLCBJTlRfTUFQLCAwKTsKKwl9CisKKwlpZiAoYWMtPm1vZGVsID09IDM0NiAmJiBhYy0+cGRhdGEub3JpZW50YXRpb25fZW5hYmxlKSB7CisJCUFDX1dSSVRFKGFjLCBPUklFTlRfQ09ORiwKKwkJCU9SSUVOVF9ERUFEWk9ORShhYy0+cGRhdGEuZGVhZHpvbmVfYW5nbGUpIHwKKwkJCU9SSUVOVF9ESVZJU09SKGFjLT5wZGF0YS5kaXZpc29yX2xlbmd0aCkpOworCisJCWFjLT5vcmllbnQyZF9zYXZlZCA9IDEyMzQ7CisJCWFjLT5vcmllbnQzZF9zYXZlZCA9IDEyMzQ7CisKKwkJaWYgKHBkYXRhLT5vcmllbnRhdGlvbl9lbmFibGUgJiBBRFhMX0VOX09SSUVOVEFUSU9OXzNEKQorCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGRhdGEtPmV2X2NvZGVzX29yaWVudF8zZCk7IGkrKykKKwkJCQlfX3NldF9iaXQocGRhdGEtPmV2X2NvZGVzX29yaWVudF8zZFtpXSwKKwkJCQkJICBpbnB1dF9kZXYtPmtleWJpdCk7CisKKwkJaWYgKHBkYXRhLT5vcmllbnRhdGlvbl9lbmFibGUgJiBBRFhMX0VOX09SSUVOVEFUSU9OXzJEKQorCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGRhdGEtPmV2X2NvZGVzX29yaWVudF8yZCk7IGkrKykKKwkJCQlfX3NldF9iaXQocGRhdGEtPmV2X2NvZGVzX29yaWVudF8yZFtpXSwKKwkJCQkJICBpbnB1dF9kZXYtPmtleWJpdCk7CisJfSBlbHNlIHsKKwkJYWMtPnBkYXRhLm9yaWVudGF0aW9uX2VuYWJsZSA9IDA7CisJfQorCisJQUNfV1JJVEUoYWMsIElOVF9FTkFCTEUsIGFjLT5pbnRfbWFzayB8IE9WRVJSVU4pOworCisJYWMtPnBkYXRhLnBvd2VyX21vZGUgJj0gKFBDVExfQVVUT19TTEVFUCB8IFBDVExfTElOSyk7CisKKwlyZXR1cm4gYWM7CisKKyBlcnJfcmVtb3ZlX2F0dHI6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZhZHhsMzR4X2F0dHJfZ3JvdXApOworIGVycl9mcmVlX2lycToKKwlmcmVlX2lycShhYy0+aXJxLCBhYyk7CisgZXJyX2ZyZWVfbWVtOgorCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CisJa2ZyZWUoYWMpOworIGVycl9vdXQ6CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFkeGwzNHhfcHJvYmUpOworCitpbnQgYWR4bDM0eF9yZW1vdmUoc3RydWN0IGFkeGwzNHggKmFjKQoreworCXN5c2ZzX3JlbW92ZV9ncm91cCgmYWMtPmRldi0+a29iaiwgJmFkeGwzNHhfYXR0cl9ncm91cCk7CisJZnJlZV9pcnEoYWMtPmlycSwgYWMpOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGFjLT5pbnB1dCk7CisJZGV2X2RiZyhhYy0+ZGV2LCAidW5yZWdpc3RlcmVkIGFjY2VsZXJvbWV0ZXJcbiIpOworCWtmcmVlKGFjKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYWR4bDM0eF9yZW1vdmUpOworCitNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEhlbm5lcmljaCA8aGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBRFhMMzQ1LzM0NiBUaHJlZS1BeGlzIERpZ2l0YWwgQWNjZWxlcm9tZXRlciBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9hZHhsMzR4LmggYi9kcml2ZXJzL2lucHV0L21pc2MvYWR4bDM0eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYmM4MGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lucHV0L21pc2MvYWR4bDM0eC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBBRFhMMzQ1LzM0NiBUaHJlZS1BeGlzIERpZ2l0YWwgQWNjZWxlcm9tZXRlcnMgKEkyQy9TUEkgSW50ZXJmYWNlKQorICoKKyAqIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNaWNoYWVsIEhlbm5lcmljaCwgQW5hbG9nIERldmljZXMgSW5jLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKKyNpZm5kZWYgX0FEWEwzNFhfSF8KKyNkZWZpbmUgX0FEWEwzNFhfSF8KKworc3RydWN0IGRldmljZTsKK3N0cnVjdCBhZHhsMzR4OworCitzdHJ1Y3QgYWR4bDM0eF9idXNfb3BzIHsKKwl1MTYgYnVzdHlwZTsKKwlpbnQgKCpyZWFkKShzdHJ1Y3QgZGV2aWNlICosIHVuc2lnbmVkIGNoYXIpOworCWludCAoKnJlYWRfYmxvY2spKHN0cnVjdCBkZXZpY2UgKiwgdW5zaWduZWQgY2hhciwgaW50LCB2b2lkICopOworCWludCAoKndyaXRlKShzdHJ1Y3QgZGV2aWNlICosIHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGNoYXIpOworfTsKKwordm9pZCBhZHhsMzR4X3N1c3BlbmQoc3RydWN0IGFkeGwzNHggKmFjKTsKK3ZvaWQgYWR4bDM0eF9yZXN1bWUoc3RydWN0IGFkeGwzNHggKmFjKTsKK3N0cnVjdCBhZHhsMzR4ICphZHhsMzR4X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGlycSwKKwkJCSAgICAgIGJvb2wgZmlmb19kZWxheV9kZWZhdWx0LAorCQkJICAgICAgY29uc3Qgc3RydWN0IGFkeGwzNHhfYnVzX29wcyAqYm9wcyk7CitpbnQgYWR4bDM0eF9yZW1vdmUoc3RydWN0IGFkeGwzNHggKmFjKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvYXRsYXNfYnRucy5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2F0bGFzX2J0bnMuYwppbmRleCBkZmFhOWEwLi42MDFmNzM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvYXRsYXNfYnRucy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9hdGxhc19idG5zLmMKQEAgLTIxLDYgKzIxLDggQEAKICAqCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNjAsMTIgKzYyLDExIEBACiAJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRfZGV2LCBhdGxhc19rZXltYXBbY29kZV0sIGtleV9kb3duKTsKIAkJaW5wdXRfc3luYyhpbnB1dF9kZXYpOwogCi0JCXN0YXR1cyA9IDA7CisJCXN0YXR1cyA9IEFFX09LOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImF0bGFzOiBzaHJ1Z2dlZCBvbiB1bmV4cGVjdGVkIGZ1bmN0aW9uIgotCQkJIjpmdW5jdGlvbj0leCxhZGRyZXNzPSVseCx2YWx1ZT0leFxuIiwKKwkJcHJfd2Fybigic2hydWdnZWQgb24gdW5leHBlY3RlZCBmdW5jdGlvbjogZnVuY3Rpb249JXgsYWRkcmVzcz0lbHgsdmFsdWU9JXhcbiIsCiAJCQlmdW5jdGlvbiwgKHVuc2lnbmVkIGxvbmcpYWRkcmVzcywgKHUzMikqdmFsdWUpOwotCQlzdGF0dXMgPSAtRUlOVkFMOworCQlzdGF0dXMgPSBBRV9CQURfUEFSQU1FVEVSOwogCX0KIAogCXJldHVybiBzdGF0dXM7CkBAIC03OSw3ICs4MCw3IEBACiAKIAlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIWlucHV0X2RldikgewotCQlwcmludGsoS0VSTl9FUlIgImF0bGFzOiB1bmFibGUgdG8gYWxsb2NhdGUgaW5wdXQgZGV2aWNlXG4iKTsKKwkJcHJfZXJyKCJ1bmFibGUgdG8gYWxsb2NhdGUgaW5wdXQgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xMDIsNyArMTAzLDcgQEAKIAogCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dF9kZXYpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhdGxhczogY291bGRuJ3QgcmVnaXN0ZXIgaW5wdXQgZGV2aWNlXG4iKTsKKwkJcHJfZXJyKCJjb3VsZG4ndCByZWdpc3RlciBpbnB1dCBkZXZpY2VcbiIpOwogCQlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOwogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTExMiwxMiArMTEzLDEyIEBACiAJCQkJMHg4MSwgJmFjcGlfYXRsYXNfYnV0dG9uX2hhbmRsZXIsCiAJCQkJJmFjcGlfYXRsYXNfYnV0dG9uX3NldHVwLCBkZXZpY2UpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlwcmludGsoS0VSTl9FUlIgIkF0bGFzOiBFcnJvciBpbnN0YWxsaW5nIGFkZHIgc3BjIGhhbmRsZXJcbiIpOworCQlwcl9lcnIoImVycm9yIGluc3RhbGxpbmcgYWRkciBzcGMgaGFuZGxlclxuIik7CiAJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7Ci0JCXN0YXR1cyA9IC1FSU5WQUw7CisJCWVyciA9IC1FSU5WQUw7CiAJfQogCi0JcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IGF0bGFzX2FjcGlfYnV0dG9uX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCkBAIC0xMjYsMTQgKzEyNywxMiBAQAogCiAJc3RhdHVzID0gYWNwaV9yZW1vdmVfYWRkcmVzc19zcGFjZV9oYW5kbGVyKGRldmljZS0+aGFuZGxlLAogCQkJCTB4ODEsICZhY3BpX2F0bGFzX2J1dHRvbl9oYW5kbGVyKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJBdGxhczogRXJyb3IgcmVtb3ZpbmcgYWRkciBzcGMgaGFuZGxlclxuIik7Ci0JCXN0YXR1cyA9IC1FSU5WQUw7Ci0JfQorCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcHJfZXJyKCJlcnJvciByZW1vdmluZyBhZGRyIHNwYyBoYW5kbGVyXG4iKTsKIAogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CiAKLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGF0bGFzX2RldmljZV9pZHNbXSA9IHsKQEAgLTE0NSw2ICsxNDQsNyBAQAogc3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBhdGxhc19hY3BpX2RyaXZlciA9IHsKIAkubmFtZQk9IEFDUElfQVRMQVNfTkFNRSwKIAkuY2xhc3MJPSBBQ1BJX0FUTEFTX0NMQVNTLAorCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCS5pZHMJPSBhdGxhc19kZXZpY2VfaWRzLAogCS5vcHMJPSB7CiAJCS5hZGQJPSBhdGxhc19hY3BpX2J1dHRvbl9hZGQsCkBAIC0xNTQsMTggKzE1NCwxMCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhdGxhc19hY3BpX2luaXQodm9pZCkKIHsKLQlpbnQgcmVzdWx0OwotCiAJaWYgKGFjcGlfZGlzYWJsZWQpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmVzdWx0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhdGxhc19hY3BpX2RyaXZlcik7Ci0JaWYgKHJlc3VsdCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJBdGxhcyBBQ1BJOiBVbmFibGUgdG8gcmVnaXN0ZXIgZHJpdmVyXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYXRsYXNfYWNwaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYXRsYXNfYWNwaV9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvaXhwNHh4LWJlZXBlci5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2l4cDR4eC1iZWVwZXIuYwppbmRleCA5OTQ2ZDczLi45ZGZkNmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvaXhwNHh4LWJlZXBlci5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9peHA0eHgtYmVlcGVyLmMKQEAgLTExNSw3ICsxMTUsOCBAQAogCWlucHV0X2Rldi0+ZXZlbnQgPSBpeHA0eHhfc3Brcl9ldmVudDsKIAogCWVyciA9IHJlcXVlc3RfaXJxKElSUV9JWFA0WFhfVElNRVIyLCAmaXhwNHh4X3Nwa3JfaW50ZXJydXB0LAotCQkJICBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwgIml4cDR4eC1iZWVwZXIiLCAodm9pZCAqKSBkZXYtPmlkKTsKKwkJCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfTk9fU1VTUEVORCwgIml4cDR4eC1iZWVwZXIiLAorCQkJICAodm9pZCAqKSBkZXYtPmlkKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlX2RldmljZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3B3bS1iZWVwZXIuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9wd20tYmVlcGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdjMjk0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9wd20tYmVlcGVyLmMKQEAgLTAsMCArMSwxOTkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwLCBMYXJzLVBldGVyIENsYXVzZW4gPGxhcnNAbWV0YWZvby5kZT4KKyAqICBQV00gYmVlcGVyIGRyaXZlcgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3B3bS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworc3RydWN0IHB3bV9iZWVwZXIgeworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OworCXN0cnVjdCBwd21fZGV2aWNlICpwd207CisJdW5zaWduZWQgbG9uZyBwZXJpb2Q7Cit9OworCisjZGVmaW5lIEhaX1RPX05BTk9TRUNPTkRTKHgpICgxMDAwMDAwMDAwVUwvKHgpKQorCitzdGF0aWMgaW50IHB3bV9iZWVwZXJfZXZlbnQoc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCisJCQkgICAgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHB3bV9iZWVwZXIgKmJlZXBlciA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0KTsKKwl1bnNpZ25lZCBsb25nIHBlcmlvZDsKKworCWlmICh0eXBlICE9IEVWX1NORCB8fCB2YWx1ZSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChjb2RlKSB7CisJY2FzZSBTTkRfQkVMTDoKKwkJdmFsdWUgPSB2YWx1ZSA/IDEwMDAgOiAwOworCQlicmVhazsKKwljYXNlIFNORF9UT05FOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodmFsdWUgPT0gMCkgeworCQlwd21fY29uZmlnKGJlZXBlci0+cHdtLCAwLCAwKTsKKwkJcHdtX2Rpc2FibGUoYmVlcGVyLT5wd20pOworCX0gZWxzZSB7CisJCXBlcmlvZCA9IEhaX1RPX05BTk9TRUNPTkRTKHZhbHVlKTsKKwkJcmV0ID0gcHdtX2NvbmZpZyhiZWVwZXItPnB3bSwgcGVyaW9kIC8gMiwgcGVyaW9kKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCXJldCA9IHB3bV9lbmFibGUoYmVlcGVyLT5wd20pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJYmVlcGVyLT5wZXJpb2QgPSBwZXJpb2Q7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHB3bV9iZWVwZXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwl1bnNpZ25lZCBsb25nIHB3bV9pZCA9ICh1bnNpZ25lZCBsb25nKXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBwd21fYmVlcGVyICpiZWVwZXI7CisJaW50IGVycm9yOworCisJYmVlcGVyID0ga3phbGxvYyhzaXplb2YoKmJlZXBlciksIEdGUF9LRVJORUwpOworCWlmICghYmVlcGVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWJlZXBlci0+cHdtID0gcHdtX3JlcXVlc3QocHdtX2lkLCAicHdtIGJlZXBlciIpOworCisJaWYgKElTX0VSUihiZWVwZXItPnB3bSkpIHsKKwkJZXJyb3IgPSBQVFJfRVJSKGJlZXBlci0+cHdtKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgcHdtIGRldmljZTogJWRcbiIsIGVycm9yKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwliZWVwZXItPmlucHV0ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFiZWVwZXItPmlucHV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBpbnB1dCBkZXZpY2VcbiIpOworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3B3bV9mcmVlOworCX0KKwliZWVwZXItPmlucHV0LT5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKworCWJlZXBlci0+aW5wdXQtPm5hbWUgPSAicHdtLWJlZXBlciI7CisJYmVlcGVyLT5pbnB1dC0+cGh5cyA9ICJwd20vaW5wdXQwIjsKKwliZWVwZXItPmlucHV0LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7CisJYmVlcGVyLT5pbnB1dC0+aWQudmVuZG9yID0gMHgwMDFmOworCWJlZXBlci0+aW5wdXQtPmlkLnByb2R1Y3QgPSAweDAwMDE7CisJYmVlcGVyLT5pbnB1dC0+aWQudmVyc2lvbiA9IDB4MDEwMDsKKworCWJlZXBlci0+aW5wdXQtPmV2Yml0WzBdID0gQklUKEVWX1NORCk7CisJYmVlcGVyLT5pbnB1dC0+c25kYml0WzBdID0gQklUKFNORF9UT05FKSB8IEJJVChTTkRfQkVMTCk7CisKKwliZWVwZXItPmlucHV0LT5ldmVudCA9IHB3bV9iZWVwZXJfZXZlbnQ7CisKKwlpbnB1dF9zZXRfZHJ2ZGF0YShiZWVwZXItPmlucHV0LCBiZWVwZXIpOworCisJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoYmVlcGVyLT5pbnB1dCk7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBpbnB1dCBkZXZpY2U6ICVkXG4iLCBlcnJvcik7CisJCWdvdG8gZXJyX2lucHV0X2ZyZWU7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgYmVlcGVyKTsKKworCXJldHVybiAwOworCitlcnJfaW5wdXRfZnJlZToKKwlpbnB1dF9mcmVlX2RldmljZShiZWVwZXItPmlucHV0KTsKK2Vycl9wd21fZnJlZToKKwlwd21fZnJlZShiZWVwZXItPnB3bSk7CitlcnJfZnJlZToKKwlrZnJlZShiZWVwZXIpOworCisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBwd21fYmVlcGVyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwd21fYmVlcGVyICpiZWVwZXIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGJlZXBlci0+aW5wdXQpOworCisJcHdtX2Rpc2FibGUoYmVlcGVyLT5wd20pOworCXB3bV9mcmVlKGJlZXBlci0+cHdtKTsKKworCWtmcmVlKGJlZXBlcik7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBwd21fYmVlcGVyX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwd21fYmVlcGVyICpiZWVwZXIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChiZWVwZXItPnBlcmlvZCkKKwkJcHdtX2Rpc2FibGUoYmVlcGVyLT5wd20pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHdtX2JlZXBlcl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwd21fYmVlcGVyICpiZWVwZXIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChiZWVwZXItPnBlcmlvZCkgeworCQlwd21fY29uZmlnKGJlZXBlci0+cHdtLCBiZWVwZXItPnBlcmlvZCAvIDIsIGJlZXBlci0+cGVyaW9kKTsKKwkJcHdtX2VuYWJsZShiZWVwZXItPnB3bSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhwd21fYmVlcGVyX3BtX29wcywKKwkJCSBwd21fYmVlcGVyX3N1c3BlbmQsIHB3bV9iZWVwZXJfcmVzdW1lKTsKKworI2RlZmluZSBQV01fQkVFUEVSX1BNX09QUyAoJnB3bV9iZWVwZXJfcG1fb3BzKQorI2Vsc2UKKyNkZWZpbmUgUFdNX0JFRVBFUl9QTV9PUFMgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHB3bV9iZWVwZXJfZHJpdmVyID0geworCS5wcm9iZQk9IHB3bV9iZWVwZXJfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHB3bV9iZWVwZXJfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJwd20tYmVlcGVyIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5wbQk9IFBXTV9CRUVQRVJfUE1fT1BTLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwd21fYmVlcGVyX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwd21fYmVlcGVyX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChwd21fYmVlcGVyX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgcHdtX2JlZXBlcl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnB3bV9iZWVwZXJfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHB3bV9iZWVwZXJfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkxhcnMtUGV0ZXIgQ2xhdXNlbiA8bGFyc0BtZXRhZm9vLmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQV00gYmVlcGVyIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpwd20tYmVlcGVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2Mvc3BhcmNzcGtyLmMgYi9kcml2ZXJzL2lucHV0L21pc2Mvc3BhcmNzcGtyLmMKaW5kZXggMWRhY2FlNC4uZjNiYjkyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3NwYXJjc3Brci5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9zcGFyY3Nwa3IuYwpAQCAtMzUzLDE0ICszNTMsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgc3BhcmNzcGtyX2luaXQodm9pZCkKIHsKLQlpbnQgZXJyID0gb2ZfcmVnaXN0ZXJfZHJpdmVyKCZiYmNfYmVlcF9kcml2ZXIsCi0JCQkJICAgICAmb2ZfcGxhdGZvcm1fYnVzX3R5cGUpOworCWludCBlcnIgPSBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmJiY19iZWVwX2RyaXZlcik7CiAKIAlpZiAoIWVycikgewotCQllcnIgPSBvZl9yZWdpc3Rlcl9kcml2ZXIoJmdyb3Zlcl9iZWVwX2RyaXZlciwKLQkJCQkJICZvZl9wbGF0Zm9ybV9idXNfdHlwZSk7CisJCWVyciA9IG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZ3JvdmVyX2JlZXBfZHJpdmVyKTsKIAkJaWYgKGVycikKLQkJCW9mX3VucmVnaXN0ZXJfZHJpdmVyKCZiYmNfYmVlcF9kcml2ZXIpOworCQkJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmJiY19iZWVwX2RyaXZlcik7CiAJfQogCiAJcmV0dXJuIGVycjsKQEAgLTM2OCw4ICszNjYsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc3BhcmNzcGtyX2V4aXQodm9pZCkKIHsKLQlvZl91bnJlZ2lzdGVyX2RyaXZlcigmYmJjX2JlZXBfZHJpdmVyKTsKLQlvZl91bnJlZ2lzdGVyX2RyaXZlcigmZ3JvdmVyX2JlZXBfZHJpdmVyKTsKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmYmJjX2JlZXBfZHJpdmVyKTsKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZ3JvdmVyX2JlZXBfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoc3BhcmNzcGtyX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3R3bDQwMzAtcHdyYnV0dG9uLmMgYi9kcml2ZXJzL2lucHV0L21pc2MvdHdsNDAzMC1wd3JidXR0b24uYwppbmRleCBlOTA2OWI4Li5mMTY5NzJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvdHdsNDAzMC1wd3JidXR0b24uYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvdHdsNDAzMC1wd3JidXR0b24uYwpAQCAtNTIsNyArNTIsNyBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgdHdsNDAzMF9wd3JidXR0b25fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19pbml0IHR3bDQwMzBfcHdyYnV0dG9uX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGlucHV0X2RldiAqcHdyOwogCWludCBpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwpAQCAtOTUsNyArOTUsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IHR3bDQwMzBfcHdyYnV0dG9uX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2V4aXQgdHdsNDAzMF9wd3JidXR0b25fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGlucHV0X2RldiAqcHdyID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJaW50IGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CkBAIC0xMDYsOSArMTA2LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0d2w0MDMwX3B3cmJ1dHRvbl9kcml2ZXIgPSB7Ci0JLnByb2JlCQk9IHR3bDQwMzBfcHdyYnV0dG9uX3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3AodHdsNDAzMF9wd3JidXR0b25fcmVtb3ZlKSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHR3bDQwMzBfcHdyYnV0dG9uX2RyaXZlciA9IHsKKwkucmVtb3ZlCQk9IF9fZXhpdF9wKHR3bDQwMzBfcHdyYnV0dG9uX3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gInR3bDQwMzBfcHdyYnV0dG9uIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCkBAIC0xMTcsNyArMTE2LDggQEAKIAogc3RhdGljIGludCBfX2luaXQgdHdsNDAzMF9wd3JidXR0b25faW5pdCh2b2lkKQogewotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnR3bDQwMzBfcHdyYnV0dG9uX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmdHdsNDAzMF9wd3JidXR0b25fZHJpdmVyLAorCQkJdHdsNDAzMF9wd3JidXR0b25fcHJvYmUpOwogfQogbW9kdWxlX2luaXQodHdsNDAzMF9wd3JidXR0b25faW5pdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYwppbmRleCA0ZGFjOGI3Li4xMjUwMWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jCkBAIC0xMzQ3LDcgKzEzNDcsNyBAQAogCiAJZXJyID0gbWFwX2Jpb3MoKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIGVycl9mcmVlX2tleW1hcDsKIAogCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmd2lzdHJvbl9kcml2ZXIpOwogCWlmIChlcnIpCkBAIC0xMzcxLDYgKzEzNzEsOCBAQAogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3aXN0cm9uX2RyaXZlcik7CiAgZXJyX3VubWFwX2Jpb3M6CiAJdW5tYXBfYmlvcygpOworIGVycl9mcmVlX2tleW1hcDoKKwlrZnJlZShrZXltYXApOwogCiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvS2NvbmZpZwppbmRleCBlZWI1OGMxYy4uYzcxNGNhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvS2NvbmZpZwpAQCAtMTcsNyArMTcsNyBAQAogCWRlZmF1bHQgeQogCXNlbGVjdCBTRVJJTwogCXNlbGVjdCBTRVJJT19MSUJQUzIKLQlzZWxlY3QgU0VSSU9fSTgwNDIgaWYgWDg2ICYmICFYODZfTVJTVAorCXNlbGVjdCBTRVJJT19JODA0MiBpZiBYODYKIAlzZWxlY3QgU0VSSU9fR1NDUFMyIGlmIEdTQwogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBQUy8yIG1vdXNlIGNvbm5lY3RlZCB0byB5b3VyIHN5c3RlbS4gVGhpcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9iY201OTc0LmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2JjbTU5NzQuYwppbmRleCA2ZGVkZGVkLi5lYTY3YzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2JjbTU5NzQuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2JjbTU5NzQuYwpAQCAtMzEyLDYgKzMxMiw4IEBACiAJX19zZXRfYml0KEJUTl9UT09MX1RSSVBMRVRBUCwgaW5wdXRfZGV2LT5rZXliaXQpOwogCV9fc2V0X2JpdChCVE5fVE9PTF9RVUFEVEFQLCBpbnB1dF9kZXYtPmtleWJpdCk7CiAJX19zZXRfYml0KEJUTl9MRUZULCBpbnB1dF9kZXYtPmtleWJpdCk7CisKKwlpbnB1dF9zZXRfZXZlbnRzX3Blcl9wYWNrZXQoaW5wdXRfZGV2LCA2MCk7CiB9CiAKIC8qIHJlcG9ydCBidXR0b24gZGF0YSBhcyBsb2dpY2FsIGJ1dHRvbiBzdGF0ZSAqLwpAQCAtNTgwLDIzICs1ODIsMzAgQEAKICAqLwogc3RhdGljIGludCBiY201OTc0X3N0YXJ0X3RyYWZmaWMoc3RydWN0IGJjbTU5NzQgKmRldikKIHsKLQlpZiAoYmNtNTk3NF93ZWxsc3ByaW5nX21vZGUoZGV2LCB0cnVlKSkgeworCWludCBlcnJvcjsKKworCWVycm9yID0gYmNtNTk3NF93ZWxsc3ByaW5nX21vZGUoZGV2LCB0cnVlKTsKKwlpZiAoZXJyb3IpIHsKIAkJZHByaW50aygxLCAiYmNtNTk3NDogbW9kZSBzd2l0Y2ggZmFpbGVkXG4iKTsKLQkJZ290byBlcnJvcjsKKwkJZ290byBlcnJfb3V0OwogCX0KIAotCWlmICh1c2Jfc3VibWl0X3VyYihkZXYtPmJ0X3VyYiwgR0ZQX0tFUk5FTCkpCi0JCWdvdG8gZXJyb3I7CisJZXJyb3IgPSB1c2Jfc3VibWl0X3VyYihkZXYtPmJ0X3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycl9yZXNldF9tb2RlOwogCi0JaWYgKHVzYl9zdWJtaXRfdXJiKGRldi0+dHBfdXJiLCBHRlBfS0VSTkVMKSkKKwllcnJvciA9IHVzYl9zdWJtaXRfdXJiKGRldi0+dHBfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAoZXJyb3IpCiAJCWdvdG8gZXJyX2tpbGxfYnQ7CiAKIAlyZXR1cm4gMDsKIAogZXJyX2tpbGxfYnQ6CiAJdXNiX2tpbGxfdXJiKGRldi0+YnRfdXJiKTsKLWVycm9yOgotCXJldHVybiAtRUlPOworZXJyX3Jlc2V0X21vZGU6CisJYmNtNTk3NF93ZWxsc3ByaW5nX21vZGUoZGV2LCBmYWxzZSk7CitlcnJfb3V0OgorCXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIHZvaWQgYmNtNTk3NF9wYXVzZV90cmFmZmljKHN0cnVjdCBiY201OTc0ICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYwppbmRleCA0MGNlYTMzLi44YzMyNDQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKQEAgLTE0MSw4ICsxNDEsMTMgQEAKIAlwcml2LT5jYXBhYmlsaXRpZXMgPSAoY2FwWzBdIDw8IDE2KSB8IChjYXBbMV0gPDwgOCkgfCBjYXBbMl07CiAJcHJpdi0+ZXh0X2NhcCA9IHByaXYtPmV4dF9jYXBfMGMgPSAwOwogCi0JaWYgKCFTWU5fQ0FQX1ZBTElEKHByaXYtPmNhcGFiaWxpdGllcykpCisJLyoKKwkgKiBPbGRlciBmaXJtd2FyZXMgaGFkIHN1Ym1vZGVsIElEIGZpeGVkIHRvIDB4NDcKKwkgKi8KKwlpZiAoU1lOX0lEX0ZVTEwocHJpdi0+aWRlbnRpdHkpIDwgMHg3MDUgJiYKKwkgICAgU1lOX0NBUF9TVUJNT0RFTF9JRChwcml2LT5jYXBhYmlsaXRpZXMpICE9IDB4NDcpIHsKIAkJcmV0dXJuIC0xOworCX0KIAogCS8qCiAJICogVW5sZXNzIGNhcEV4dGVuZGVkIGlzIHNldCB0aGUgcmVzdCBvZiB0aGUgZmxhZ3Mgc2hvdWxkIGJlIGlnbm9yZWQKQEAgLTIwNiw2ICsyMTEsNyBAQAogCXVuc2lnbmVkIGNoYXIgbWF4WzNdOwogCiAJaWYgKFNZTl9JRF9NQUpPUihwcml2LT5pZGVudGl0eSkgPCA0KQorCQlyZXR1cm4gMDsKIAogCWlmIChzeW5hcHRpY3Nfc2VuZF9jbWQocHNtb3VzZSwgU1lOX1FVRV9SRVNPTFVUSU9OLCByZXMpID09IDApIHsKIAkJaWYgKHJlc1swXSAhPSAwICYmIChyZXNbMV0gJiAweDgwKSAmJiByZXNbMl0gIT0gMCkgewpAQCAtNDk2LDcgKzUwMiw5IEBACiAJfQogCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUFJFU1NVUkUsIGh3LnopOwogCi0JaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19UT09MX1dJRFRILCBmaW5nZXJfd2lkdGgpOworCWlmIChTWU5fQ0FQX1BBTE1ERVRFQ1QocHJpdi0+Y2FwYWJpbGl0aWVzKSkKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19UT09MX1dJRFRILCBmaW5nZXJfd2lkdGgpOworCiAJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT09MX0ZJTkdFUiwgbnVtX2ZpbmdlcnMgPT0gMSk7CiAJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9MRUZULCBody5sZWZ0KTsKIAlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1JJR0hULCBody5yaWdodCk7CkBAIC01OTYsNyArNjA0LDkgQEAKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19ZLAogCQkJICAgICBZTUlOX05PTUlOQUwsIHByaXYtPnlfbWF4ID86IFlNQVhfTk9NSU5BTCwgMCwgMCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LCBBQlNfUFJFU1NVUkUsIDAsIDI1NSwgMCwgMCk7Ci0JX19zZXRfYml0KEFCU19UT09MX1dJRFRILCBkZXYtPmFic2JpdCk7CisKKwlpZiAoU1lOX0NBUF9QQUxNREVURUNUKHByaXYtPmNhcGFiaWxpdGllcykpCisJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1RPT0xfV0lEVEgsIDAsIDE1LCAwLCAwKTsKIAogCV9fc2V0X2JpdChFVl9LRVksIGRldi0+ZXZiaXQpOwogCV9fc2V0X2JpdChCVE5fVE9VQ0gsIGRldi0+a2V5Yml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmggYi9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5oCmluZGV4IDdkNGQ1ZTEuLmI2YWE3ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmgKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuaApAQCAtNDcsNyArNDcsNyBAQAogI2RlZmluZSBTWU5fQ0FQX0ZPVVJfQlVUVE9OKGMpCQkoKGMpICYgKDEgPDwgMykpCiAjZGVmaW5lIFNZTl9DQVBfTVVMVElGSU5HRVIoYykJCSgoYykgJiAoMSA8PCAxKSkKICNkZWZpbmUgU1lOX0NBUF9QQUxNREVURUNUKGMpCQkoKGMpICYgKDEgPDwgMCkpCi0jZGVmaW5lIFNZTl9DQVBfVkFMSUQoYykJCSgoKChjKSAmIDB4MDBmZjAwKSA+PiA4KSA9PSAweDQ3KQorI2RlZmluZSBTWU5fQ0FQX1NVQk1PREVMX0lEKGMpCQkoKChjKSAmIDB4MDBmZjAwKSA+PiA4KQogI2RlZmluZSBTWU5fRVhUX0NBUF9SRVFVRVNUUyhjKQkJKCgoYykgJiAweDcwMDAwMCkgPj4gMjApCiAjZGVmaW5lIFNZTl9DQVBfTVVMVElfQlVUVE9OX05PKGVjKQkoKChlYykgJiAweDAwZjAwMCkgPj4gMTIpCiAjZGVmaW5lIFNZTl9DQVBfUFJPRFVDVF9JRChlYykJCSgoKGVjKSAmIDB4ZmYwMDAwKSA+PiAxNikKQEAgLTY2LDYgKzY2LDcgQEAKICNkZWZpbmUgU1lOX0lEX01PREVMKGkpCQkJKCgoaSkgPj4gNCkgJiAweDBmKQogI2RlZmluZSBTWU5fSURfTUFKT1IoaSkJCQkoKGkpICYgMHgwZikKICNkZWZpbmUgU1lOX0lEX01JTk9SKGkpCQkJKCgoaSkgPj4gMTYpICYgMHhmZikKKyNkZWZpbmUgU1lOX0lEX0ZVTEwoaSkJCQkoKFNZTl9JRF9NQUpPUihpKSA8PCA4KSB8IFNZTl9JRF9NSU5PUihpKSkKICNkZWZpbmUgU1lOX0lEX0lTX1NZTkFQVElDUyhpKQkJKCgoKGkpID4+IDgpICYgMHhmZikgPT0gMHg0NykKIAogLyogc3luYXB0aWNzIHNwZWNpYWwgY29tbWFuZHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYwppbmRleCBmMzRiMjJiLi5kOGY2OGY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZWRldi5jCkBAIC01Nyw3ICs1Nyw2IEBACiB9OwogCiBzdHJ1Y3QgbW91c2VkZXYgewotCWludCBleGlzdDsKIAlpbnQgb3BlbjsKIAlpbnQgbWlub3I7CiAJc3RydWN0IGlucHV0X2hhbmRsZSBoYW5kbGU7CkBAIC02Niw2ICs2NSw3IEBACiAJc3BpbmxvY2tfdCBjbGllbnRfbG9jazsgLyogcHJvdGVjdHMgY2xpZW50X2xpc3QgKi8KIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CiAJc3RydWN0IGRldmljZSBkZXY7CisJYm9vbCBleGlzdDsKIAogCXN0cnVjdCBsaXN0X2hlYWQgbWl4ZGV2X25vZGU7CiAJaW50IG1peGRldl9vcGVuOwpAQCAtNzY1LDEwICs3NjUsMTUgQEAKIHsKIAlzdHJ1Y3QgbW91c2VkZXZfY2xpZW50ICpjbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IG1vdXNlZGV2ICptb3VzZWRldiA9IGNsaWVudC0+bW91c2VkZXY7CisJdW5zaWduZWQgaW50IG1hc2s7CiAKIAlwb2xsX3dhaXQoZmlsZSwgJm1vdXNlZGV2LT53YWl0LCB3YWl0KTsKLQlyZXR1cm4gKChjbGllbnQtPnJlYWR5IHx8IGNsaWVudC0+YnVmZmVyKSA/IChQT0xMSU4gfCBQT0xMUkROT1JNKSA6IDApIHwKLQkJKG1vdXNlZGV2LT5leGlzdCA/IDAgOiAoUE9MTEhVUCB8IFBPTExFUlIpKTsKKworCW1hc2sgPSBtb3VzZWRldi0+ZXhpc3QgPyBQT0xMT1VUIHwgUE9MTFdSTk9STSA6IFBPTExIVVAgfCBQT0xMRVJSOworCWlmIChjbGllbnQtPnJlYWR5IHx8IGNsaWVudC0+YnVmZmVyKQorCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07CisKKwlyZXR1cm4gbWFzazsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbW91c2VkZXZfZm9wcyA9IHsKQEAgLTgwMiw3ICs4MDcsNyBAQAogc3RhdGljIHZvaWQgbW91c2VkZXZfbWFya19kZWFkKHN0cnVjdCBtb3VzZWRldiAqbW91c2VkZXYpCiB7CiAJbXV0ZXhfbG9jaygmbW91c2VkZXYtPm11dGV4KTsKLQltb3VzZWRldi0+ZXhpc3QgPSAwOworCW1vdXNlZGV2LT5leGlzdCA9IGZhbHNlOwogCW11dGV4X3VubG9jaygmbW91c2VkZXYtPm11dGV4KTsKIH0KIApAQCAtODYyLDcgKzg2Nyw3IEBACiAJCWRldl9zZXRfbmFtZSgmbW91c2VkZXYtPmRldiwgIm1vdXNlJWQiLCBtaW5vcik7CiAKIAltb3VzZWRldi0+bWlub3IgPSBtaW5vcjsKLQltb3VzZWRldi0+ZXhpc3QgPSAxOworCW1vdXNlZGV2LT5leGlzdCA9IHRydWU7CiAJbW91c2VkZXYtPmhhbmRsZS5kZXYgPSBpbnB1dF9nZXRfZGV2aWNlKGRldik7CiAJbW91c2VkZXYtPmhhbmRsZS5uYW1lID0gZGV2X25hbWUoJm1vdXNlZGV2LT5kZXYpOwogCW1vdXNlZGV2LT5oYW5kbGUuaGFuZGxlciA9IGhhbmRsZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWcKaW5kZXggMjU2YjllOS4uM2JmZThmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZwpAQCAtMjIsNyArMjIsNyBAQAogCXRyaXN0YXRlICJpODA0MiBQQyBLZXlib2FyZCBjb250cm9sbGVyIiBpZiBFTUJFRERFRCB8fCAhWDg2CiAJZGVmYXVsdCB5CiAJZGVwZW5kcyBvbiAhUEFSSVNDICYmICghQVJNIHx8IEFSQ0hfU0hBUksgfHwgRk9PVEJSSURHRV9IT1NUKSAmJiBcCi0JCSAgICghU1VQRVJIIHx8IFNIX0NBWU1BTikgJiYgIU02OEsgJiYgIUJMQUNLRklOICYmICFYODZfTVJTVAorCQkgICAoIVNVUEVSSCB8fCBTSF9DQVlNQU4pICYmICFNNjhLICYmICFCTEFDS0ZJTgogCWhlbHAKIAkgIGk4MDQyIGlzIHRoZSBjaGlwIG92ZXIgd2hpY2ggdGhlIHN0YW5kYXJkIEFUIGtleWJvYXJkIGFuZCBQUy8yCiAJICBtb3VzZSBhcmUgY29ubmVjdGVkIHRvIHRoZSBjb21wdXRlci4gSWYgeW91IHVzZSB0aGVzZSBkZXZpY2VzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi1pby5oIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi1pby5oCmluZGV4IDg0N2Y0YWEuLjVkNDhiYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDItaW8uaAorKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLWlvLmgKQEAgLTI3LDYgKzI3LDExIEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2VsaWYgZGVmaW5lZChDT05GSUdfU0hfQ0FZTUFOKQogI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHX1BQQykKK2V4dGVybiBpbnQgb2ZfaTgwNDJfa2JkX2lycTsKK2V4dGVybiBpbnQgb2ZfaTgwNDJfYXV4X2lycTsKKyMgZGVmaW5lIEk4MDQyX0tCRF9JUlEgIG9mX2k4MDQyX2tiZF9pcnEKKyMgZGVmaW5lIEk4MDQyX0FVWF9JUlEgIG9mX2k4MDQyX2F1eF9pcnEKICNlbHNlCiAjIGRlZmluZSBJODA0Ml9LQkRfSVJRCTEKICMgZGVmaW5lIEk4MDQyX0FVWF9JUlEJMTIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDItcHBjaW8uaCBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDItcHBjaW8uaAppbmRleCAyOTA2ZTFiLi5mNzA4Yzc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXBwY2lvLmgKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi1wcGNpby5oCkBAIC01Miw4MSArNTIsNiBAQAogewogfQogCi0jZWxpZiBkZWZpbmVkKENPTkZJR19TUFJVQ0UpCi0KLSNkZWZpbmUgSTgwNDJfS0JEX0lSUSAyMgotI2RlZmluZSBJODA0Ml9BVVhfSVJRIDIxCi0KLSNkZWZpbmUgSTgwNDJfS0JEX1BIWVNfREVTQyAic3BydWNlcHMyL3NlcmlvMCIKLSNkZWZpbmUgSTgwNDJfQVVYX1BIWVNfREVTQyAic3BydWNlcHMyL3NlcmlvMSIKLSNkZWZpbmUgSTgwNDJfTVVYX1BIWVNfREVTQyAic3BydWNlcHMyL3NlcmlvJWQiCi0KLSNkZWZpbmUgSTgwNDJfQ09NTUFORF9SRUcgMHhmZjgxMDAwMAotI2RlZmluZSBJODA0Ml9EQVRBX1JFRyAweGZmODEwMDAxCi0KLXN0YXRpYyBpbmxpbmUgaW50IGk4MDQyX3JlYWRfZGF0YSh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcga2JkX2RhdGE7Ci0KLQlfX3Jhd193cml0ZWwoMHgwMDAwMDA4OCwgMHhmZjUwMDAwOCk7Ci0JZWllaW8oKTsKLQotCV9fcmF3X3dyaXRlbCgweDAzMDAwMDAwLCAweGZmNTAwMDBjKTsKLQllaWVpbygpOwotCi0JYXNtIHZvbGF0aWxlKCJsaXMgICAgIDcsMHhmZjg4ICAgICAgICBcblwKLQkJICAgICAgbHN3aSAgICA2LDcsMHg4ICAgICAgICAgXG5cCi0JCSAgICAgIG1yICAgICAgJTAsNiIKLQkgICAgICAgICAgICAgIDogIj1yIiAoa2JkX2RhdGEpIDo6ICI2IiwgIjciKTsKLQotCV9fcmF3X3dyaXRlbCgweDAwMDAwMDAwLCAweGZmNTAwMDBjKTsKLQllaWVpbygpOwotCi0JcmV0dXJuICh1bnNpZ25lZCBjaGFyKShrYmRfZGF0YSA+PiAyNCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGk4MDQyX3JlYWRfc3RhdHVzKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBrYmRfc3RhdHVzOwotCi0JX19yYXdfd3JpdGVsKDB4MDAwMDAwODgsIDB4ZmY1MDAwMDgpOwotCWVpZWlvKCk7Ci0KLQlfX3Jhd193cml0ZWwoMHgwMzAwMDAwMCwgMHhmZjUwMDAwYyk7Ci0JZWllaW8oKTsKLQotCWFzbSB2b2xhdGlsZSgibGlzICAgICA3LDB4ZmY4OCAgICAgICAgXG5cCi0JCSAgICAgIG9yaSAgICAgNyw3LDB4OCAgICAgICAgIFxuXAotCQkgICAgICBsc3dpICAgIDYsNywweDggICAgICAgICBcblwKLQkJICAgICAgbXIgICAgICAlMCw2IgotCQkgICAgICA6ICI9ciIgKGtiZF9zdGF0dXMpIDo6ICI2IiwgIjciKTsKLQotCV9fcmF3X3dyaXRlbCgweDAwMDAwMDAwLCAweGZmNTAwMDBjKTsKLQllaWVpbygpOwotCi0JcmV0dXJuICh1bnNpZ25lZCBjaGFyKShrYmRfc3RhdHVzID4+IDI0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGk4MDQyX3dyaXRlX2RhdGEoaW50IHZhbCkKLXsKLQkqKCh1bnNpZ25lZCBjaGFyICopMHhmZjgxMDAwMCkgPSAoY2hhcil2YWw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpODA0Ml93cml0ZV9jb21tYW5kKGludCB2YWwpCi17Ci0JKigodW5zaWduZWQgY2hhciAqKTB4ZmY4MTAwMDEpID0gKGNoYXIpdmFsOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpODA0Ml9wbGF0Zm9ybV9pbml0KHZvaWQpCi17Ci0JaTgwNDJfcmVzZXQgPSAxOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaTgwNDJfcGxhdGZvcm1fZXhpdCh2b2lkKQotewotfQotCiAjZWxzZQogCiAjaW5jbHVkZSAiaTgwNDItaW8uaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDItc3BhcmNpby5oIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi1zcGFyY2lvLmgKaW5kZXggMDRlMzJmMi4uY2IyYTI0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi1zcGFyY2lvLmgKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi1zcGFyY2lvLmgKQEAgLTU4LDkgKzU4LDkgQEAKIAkJaWYgKCFzdHJjbXAoZHAtPm5hbWUsIE9CUF9QUzJLQkRfTkFNRTEpIHx8CiAJCSAgICAhc3RyY21wKGRwLT5uYW1lLCBPQlBfUFMyS0JEX05BTUUyKSkgewogCQkJc3RydWN0IG9mX2RldmljZSAqa2JkID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShkcCk7Ci0JCQl1bnNpZ25lZCBpbnQgaXJxID0ga2JkLT5pcnFzWzBdOworCQkJdW5zaWduZWQgaW50IGlycSA9IGtiZC0+YXJjaGRhdGEuaXJxc1swXTsKIAkJCWlmIChpcnEgPT0gMHhmZmZmZmZmZikKLQkJCQlpcnEgPSBvcC0+aXJxc1swXTsKKwkJCQlpcnEgPSBvcC0+YXJjaGRhdGEuaXJxc1swXTsKIAkJCWk4MDQyX2tiZF9pcnEgPSBpcnE7CiAJCQlrYmRfaW9iYXNlID0gb2ZfaW9yZW1hcCgma2JkLT5yZXNvdXJjZVswXSwKIAkJCQkJCTAsIDgsICJrYmQiKTsKQEAgLTY4LDkgKzY4LDkgQEAKIAkJfSBlbHNlIGlmICghc3RyY21wKGRwLT5uYW1lLCBPQlBfUFMyTVNfTkFNRTEpIHx8CiAJCQkgICAhc3RyY21wKGRwLT5uYW1lLCBPQlBfUFMyTVNfTkFNRTIpKSB7CiAJCQlzdHJ1Y3Qgb2ZfZGV2aWNlICptcyA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUoZHApOwotCQkJdW5zaWduZWQgaW50IGlycSA9IG1zLT5pcnFzWzBdOworCQkJdW5zaWduZWQgaW50IGlycSA9IG1zLT5hcmNoZGF0YS5pcnFzWzBdOwogCQkJaWYgKGlycSA9PSAweGZmZmZmZmZmKQotCQkJCWlycSA9IG9wLT5pcnFzWzBdOworCQkJCWlycSA9IG9wLT5hcmNoZGF0YS5pcnFzWzBdOwogCQkJaTgwNDJfYXV4X2lycSA9IGlycTsKIAkJfQogCkBAIC0xMTYsOCArMTE2LDcgQEAKIAkJaWYgKCFrYmRfaW9iYXNlKQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJfSBlbHNlIHsKLQkJaW50IGVyciA9IG9mX3JlZ2lzdGVyX2RyaXZlcigmc3BhcmNfaTgwNDJfZHJpdmVyLAotCQkJCQkgICAgICZvZl9idXNfdHlwZSk7CisJCWludCBlcnIgPSBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnNwYXJjX2k4MDQyX2RyaXZlcik7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCkBAIC0xNDEsNyArMTQwLDcgQEAKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3QgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiLyIpOwogCiAJaWYgKHN0cmNtcChyb290LT5uYW1lLCAiU1VOVyxKYXZhU3RhdGlvbi0xIikpCi0JCW9mX3VucmVnaXN0ZXJfZHJpdmVyKCZzcGFyY19pODA0Ml9kcml2ZXIpOworCQlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmc3BhcmNfaTgwNDJfZHJpdmVyKTsKIH0KIAogI2Vsc2UgLyogIUNPTkZJR19QQ0kgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmggYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oCmluZGV4IDYxNjg0NjkuLmVkN2FkNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaApAQCAtNyw2ICs3LDEwIEBACiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKKyNpZmRlZiBDT05GSUdfWDg2CisjaW5jbHVkZSA8YXNtL3g4Nl9pbml0Lmg+CisjZW5kaWYKKwogLyoKICAqIE5hbWVzLgogICovCkBAIC0xNjYsNiArMTcwLDEzIEBACiAJCX0sCiAJfSwKIAl7CisJCS8qIEdpZ2FieXRlIFNwcmluZyBQZWFrIC0gZGVmaW5lcyB3cm9uZyBjaGFzc2lzIHR5cGUgKi8KKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJHSUdBQllURSIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJTcHJpbmcgUGVhayIpLAorCQl9LAorCX0sCisJewogCQkubWF0Y2hlcyA9IHsKIAkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkhld2xldHQtUGFja2FyZCIpLAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJIUCBQYXZpbGlvbiBkdjk3MDAiKSwKQEAgLTg0MCw2ICs4NTEsMTIgQEAKIHsKIAlpbnQgcmV0dmFsOwogCisjaWZkZWYgQ09ORklHX1g4NgorCS8qIEp1c3QgcmV0dXJuIGlmIHByZS1kZXRlY3Rpb24gc2hvd3Mgbm8gaTgwNDIgY29udHJvbGxlciBleGlzdCAqLworCWlmICgheDg2X3BsYXRmb3JtLmk4MDQyX2RldGVjdCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKyNlbmRpZgorCiAvKgogICogT24gaXg4NiBwbGF0Zm9ybXMgdG91Y2hpbmcgdGhlIGk4MDQyIGRhdGEgcmVnaXN0ZXIgcmVnaW9uIGNhbiBkbyByZWFsbHkKICAqIGJhZCB0aGluZ3MuIEJlY2F1c2Ugb2YgdGhpcyB0aGUgcmVnaW9uIGlzIGFsd2F5cyByZXNlcnZlZCBvbiBpeDg2IGJveGVzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCmluZGV4IDY0NDBhOGYuLjI1OGI5OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKQEAgLTg2MSw5ICs4NjEsNiBAQAogCXVuc2lnbmVkIGNoYXIgcGFyYW07CiAJaW50IGkgPSAwOwogCi0JaWYgKCFpODA0Ml9yZXNldCkKLQkJcmV0dXJuIDA7Ci0KIAkvKgogCSAqIFdlIHRyeSB0aGlzIDUgdGltZXM7IG9uIHNvbWUgcmVhbGx5IGZyYWdpbGUgc3lzdGVtcyB0aGlzIGRvZXMgbm90CiAJICogdGFrZSB0aGUgZmlyc3QgdGltZS4uLgpAQCAtMTAyMCw3ICsxMDE3LDggQEAKICAqIFJlc2V0IHRoZSBjb250cm9sbGVyIGlmIHJlcXVlc3RlZC4KICAqLwogCi0JaTgwNDJfY29udHJvbGxlcl9zZWxmdGVzdCgpOworCWlmIChpODA0Ml9yZXNldCkKKwkJaTgwNDJfY29udHJvbGxlcl9zZWxmdGVzdCgpOwogCiAvKgogICogUmVzdG9yZSB0aGUgb3JpZ2luYWwgY29udHJvbCByZWdpc3RlciBzZXR0aW5nLgpAQCAtMTA5NCwyMyArMTA5MiwxMSBAQAogI2lmZGVmIENPTkZJR19QTQogCiAvKgotICogSGVyZSB3ZSB0cnkgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgQklPUyBzZXR0aW5ncyB0byBhdm9pZAotICogdXBzZXR0aW5nIGl0LgotICovCi0KLXN0YXRpYyBpbnQgaTgwNDJfcG1fcmVzZXQoc3RydWN0IGRldmljZSAqZGV2KQotewotCWk4MDQyX2NvbnRyb2xsZXJfcmVzZXQoKTsKLQotCXJldHVybiAwOwotfQotCi0vKgogICogSGVyZSB3ZSB0cnkgdG8gcmVzZXQgZXZlcnl0aGluZyBiYWNrIHRvIGEgc3RhdGUgd2UgaGFkCiAgKiBiZWZvcmUgc3VzcGVuZGluZy4KICAqLwogCi1zdGF0aWMgaW50IGk4MDQyX3BtX3Jlc3RvcmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBpODA0Ml9jb250cm9sbGVyX3Jlc3VtZShib29sIGZvcmNlX3Jlc2V0KQogewogCWludCBlcnJvcjsKIApAQCAtMTExOCw5ICsxMTA0LDExIEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQllcnJvciA9IGk4MDQyX2NvbnRyb2xsZXJfc2VsZnRlc3QoKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKKwlpZiAoaTgwNDJfcmVzZXQgfHwgZm9yY2VfcmVzZXQpIHsKKwkJZXJyb3IgPSBpODA0Ml9jb250cm9sbGVyX3NlbGZ0ZXN0KCk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKwl9CiAKIC8qCiAgKiBSZXN0b3JlIG9yaWdpbmFsIENUUiB2YWx1ZSBhbmQgZGlzYWJsZSBhbGwgcG9ydHMKQEAgLTExNjIsNiArMTE1MCwyOCBAQAogCXJldHVybiAwOwogfQogCisvKgorICogSGVyZSB3ZSB0cnkgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgQklPUyBzZXR0aW5ncyB0byBhdm9pZAorICogdXBzZXR0aW5nIGl0LgorICovCisKK3N0YXRpYyBpbnQgaTgwNDJfcG1fcmVzZXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWk4MDQyX2NvbnRyb2xsZXJfcmVzZXQoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGk4MDQyX3BtX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJLyoKKwkgKiBPbiByZXN1bWUgZnJvbSBTMlIgd2UgYWx3YXlzIHRyeSB0byByZXNldCB0aGUgY29udHJvbGxlcgorCSAqIHRvIGJyaW5nIGl0IGluIGEgc2FuZSBzdGF0ZS4gKEluIGNhc2Ugb2YgUzJEIHdlIGV4cGVjdAorCSAqIEJJT1MgdG8gcmVzZXQgdGhlIGNvbnRyb2xsZXIgZm9yIHVzLikKKwkgKi8KKwlyZXR1cm4gaTgwNDJfY29udHJvbGxlcl9yZXN1bWUodHJ1ZSk7Cit9CisKIHN0YXRpYyBpbnQgaTgwNDJfcG1fdGhhdyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJaTgwNDJfaW50ZXJydXB0KDAsIE5VTEwpOwpAQCAtMTE2OSw5ICsxMTc5LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaTgwNDJfcG1fcmVzdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGk4MDQyX2NvbnRyb2xsZXJfcmVzdW1lKGZhbHNlKTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGk4MDQyX3BtX29wcyA9IHsKIAkuc3VzcGVuZAk9IGk4MDQyX3BtX3Jlc2V0LAotCS5yZXN1bWUJCT0gaTgwNDJfcG1fcmVzdG9yZSwKKwkucmVzdW1lCQk9IGk4MDQyX3BtX3Jlc3VtZSwKIAkudGhhdwkJPSBpODA0Ml9wbV90aGF3LAogCS5wb3dlcm9mZgk9IGk4MDQyX3BtX3Jlc2V0LAogCS5yZXN0b3JlCT0gaTgwNDJfcG1fcmVzdG9yZSwKQEAgLTEzODksOSArMTQwNCwxMSBAQAogCiAJaTgwNDJfcGxhdGZvcm1fZGV2aWNlID0gZGV2OwogCi0JZXJyb3IgPSBpODA0Ml9jb250cm9sbGVyX3NlbGZ0ZXN0KCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7CisJaWYgKGk4MDQyX3Jlc2V0KSB7CisJCWVycm9yID0gaTgwNDJfY29udHJvbGxlcl9zZWxmdGVzdCgpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisJfQogCiAJZXJyb3IgPSBpODA0Ml9jb250cm9sbGVyX2luaXQoKTsKIAlpZiAoZXJyb3IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuYyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jCmluZGV4IDQxNWY2MzAuLmNlMGI0NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jCkBAIC0xNTgsNiArMTU4LDM5IEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyBpbnQgd2Fjb21fZHR1X2lycShzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbSkKK3sKKwlzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgKmZlYXR1cmVzID0gJndhY29tLT5mZWF0dXJlczsKKwljaGFyICpkYXRhID0gd2Fjb20tPmRhdGE7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSB3YWNvbS0+aW5wdXQ7CisJaW50IHByb3ggPSBkYXRhWzFdICYgMHgyMCwgcHJlc3N1cmU7CisKKwlkYmcoIndhY29tX2R0dV9pcnE6IHJlY2VpdmVkIHJlcG9ydCAjJWQiLCBkYXRhWzBdKTsKKworCWlmIChwcm94KSB7CisJCS8qIEdvaW5nIGludG8gcHJveGltaXR5IHNlbGVjdCB0b29sICovCisJCXdhY29tLT50b29sWzBdID0gKGRhdGFbMV0gJiAweDBjKSA/IEJUTl9UT09MX1JVQkJFUiA6IEJUTl9UT09MX1BFTjsKKwkJaWYgKHdhY29tLT50b29sWzBdID09IEJUTl9UT09MX1BFTikKKwkJCXdhY29tLT5pZFswXSA9IFNUWUxVU19ERVZJQ0VfSUQ7CisJCWVsc2UKKwkJCXdhY29tLT5pZFswXSA9IEVSQVNFUl9ERVZJQ0VfSUQ7CisJfQorCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9TVFlMVVMsIGRhdGFbMV0gJiAweDAyKTsKKwlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fU1RZTFVTMiwgZGF0YVsxXSAmIDB4MTApOworCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19YLCBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKSZkYXRhWzJdKSk7CisJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX1ksIGxlMTZfdG9fY3B1cCgoX19sZTE2ICopJmRhdGFbNF0pKTsKKwlwcmVzc3VyZSA9ICgoZGF0YVs3XSAmIDB4MDEpIDw8IDgpIHwgZGF0YVs2XTsKKwlpZiAocHJlc3N1cmUgPCAwKQorCQlwcmVzc3VyZSA9IGZlYXR1cmVzLT5wcmVzc3VyZV9tYXggKyBwcmVzc3VyZSArIDE7CisJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX1BSRVNTVVJFLCBwcmVzc3VyZSk7CisJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPVUNILCBkYXRhWzFdICYgMHgwNSk7CisJaWYgKCFwcm94KSAvKiBvdXQtcHJveCAqLworCQl3YWNvbS0+aWRbMF0gPSAwOworCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIHdhY29tLT50b29sWzBdLCBwcm94KTsKKwlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTUlTQywgd2Fjb20tPmlkWzBdKTsKKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIGludCB3YWNvbV9ncmFwaGlyZV9pcnEoc3RydWN0IHdhY29tX3dhYyAqd2Fjb20pCiB7CiAJc3RydWN0IHdhY29tX2ZlYXR1cmVzICpmZWF0dXJlcyA9ICZ3YWNvbS0+ZmVhdHVyZXM7CkBAIC04NDUsNiArODc4LDEwIEBACiAJCXN5bmMgPSB3YWNvbV9wdHVfaXJxKHdhY29tX3dhYyk7CiAJCWJyZWFrOwogCisJY2FzZSBEVFU6CisJCXN5bmMgPSB3YWNvbV9kdHVfaXJxKHdhY29tX3dhYyk7CisJCWJyZWFrOworCiAJY2FzZSBJTlRVT1M6CiAJY2FzZSBJTlRVT1MzUzoKIAljYXNlIElOVFVPUzM6CkBAIC0xMDMwLDYgKzEwNjcsNyBAQAogCiAJY2FzZSBQTDoKIAljYXNlIFBUVToKKwljYXNlIERUVToKIAkJX19zZXRfYml0KEJUTl9UT09MX1BFTiwgaW5wdXRfZGV2LT5rZXliaXQpOwogCQlfX3NldF9iaXQoQlROX1NUWUxVUywgaW5wdXRfZGV2LT5rZXliaXQpOwogCQlfX3NldF9iaXQoQlROX1NUWUxVUzIsIGlucHV0X2Rldi0+a2V5Yml0KTsKQEAgLTExNTUsNiArMTE5MywxMCBAQAogCXsgIldhY29tIENpbnRpcSAxMldYIiwgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgNTMwMjAsIDMzNDQwLCAxMDIzLCA2MywgV0FDT01fQkVFIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4QzcgPQogCXsgIldhY29tIERUVTE5MzEiLCAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMzc4MzIsIDMwMzA1LCAgNTExLCAgMCwgUEwgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhDRSA9CisJeyAiV2Fjb20gRFRVMjIzMSIsICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICA0Nzg2NCwgMjcwMTEsICA1MTEsICAwLCBEVFUgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhGMCA9CisJeyAiV2Fjb20gRFRVMTYzMSIsICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAzNDYyMywgMTk1NTMsICA1MTEsICAwLCBEVFUgfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhDQyA9CiAJeyAiV2Fjb20gQ2ludGlxIDIxVVgyIiwgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA4NzIwMCwgNjU2MDAsIDIwNDcsIDYzLCBXQUNPTV8yMVVYMiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDkwID0KQEAgLTEyMzQsNiArMTI3Niw4IEBACiAJeyBVU0JfREVWSUNFX1dBQ09NKDB4QzUpIH0sCiAJeyBVU0JfREVWSUNFX1dBQ09NKDB4QzYpIH0sCiAJeyBVU0JfREVWSUNFX1dBQ09NKDB4QzcpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4Q0UpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4RjApIH0sCiAJeyBVU0JfREVWSUNFX1dBQ09NKDB4Q0MpIH0sCiAJeyBVU0JfREVWSUNFX1dBQ09NKDB4OTApIH0sCiAJeyBVU0JfREVWSUNFX1dBQ09NKDB4OTMpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuaCBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5oCmluZGV4IDg1NGI5MjAuLjk5ZTFhNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5oCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5oCkBAIC00Myw2ICs0Myw3IEBACiAJV0FDT01fRzQsCiAJUFRVLAogCVBMLAorCURUVSwKIAlJTlRVT1MsCiAJSU5UVU9TM1MsCiAJSU5UVU9TMywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZwppbmRleCAzYjlkNWUyLi42MWYzNTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnCkBAIC01NSwzNyArNTUsMzYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFkNzg3Ny4KIAotY29uZmlnIFRPVUNIU0NSRUVOX0FENzg3OV9JMkMKLQl0cmlzdGF0ZSAiQUQ3ODc5IGJhc2VkIHRvdWNoc2NyZWVuczogQUQ3ODc5LTEgSTJDIEludGVyZmFjZSIKLQlkZXBlbmRzIG9uIEkyQwotCXNlbGVjdCBUT1VDSFNDUkVFTl9BRDc4NzkKK2NvbmZpZyBUT1VDSFNDUkVFTl9BRDc4NzkKKwl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQUQ3ODc5LTEvQUQ3ODg5LTEgdG91Y2hzY3JlZW4gaW50ZXJmYWNlIgogCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSB0b3VjaHNjcmVlbiBpbnRlcmZhY2UgdXNpbmcgdGhlCi0JICBBRDc4NzktMS9BRDc4ODktMSBjb250cm9sbGVyLCBhbmQgeW91ciBib2FyZC1zcGVjaWZpYwotCSAgaW5pdGlhbGl6YXRpb24gY29kZSBpbmNsdWRlcyB0aGF0IGluIGl0cyB0YWJsZSBvZiBJMkMgZGV2aWNlcy4KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gc3VwcG9ydCBhIHRvdWNoc2NyZWVuIGludGVyZmFjZSB1c2luZworCSAgdGhlIEFENzg3OS0xL0FENzg4OS0xIGNvbnRyb2xsZXIuCiAKLQkgIElmIHVuc3VyZSwgc2F5IE4gKGJ1dCBpdCdzIHNhZmUgdG8gc2F5ICJZIikuCisJICBZb3Ugc2hvdWxkIHNlbGVjdCBhIGJ1cyBjb25uZWN0aW9uIHRvby4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWQ3ODc5LgogCitjb25maWcgVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQworCXRyaXN0YXRlICJzdXBwb3J0IEkyQyBidXMgY29ubmVjdGlvbiIKKwlkZXBlbmRzIG9uIFRPVUNIU0NSRUVOX0FENzg3OSAmJiBJMkMKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIEFENzg3OS0xL0FENzg4OS0xIGhvb2tlZCB0byBhbiBJMkMgYnVzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhZDc4NzktaTJjLgorCiBjb25maWcgVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSQotCXRyaXN0YXRlICJBRDc4NzkgYmFzZWQgdG91Y2hzY3JlZW5zOiBBRDc4NzkgU1BJIEludGVyZmFjZSIKLQlkZXBlbmRzIG9uIFNQSV9NQVNURVIgJiYgVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQyA9IG4KLQlzZWxlY3QgVE9VQ0hTQ1JFRU5fQUQ3ODc5CisJdHJpc3RhdGUgInN1cHBvcnQgU1BJIGJ1cyBjb25uZWN0aW9uIgorCWRlcGVuZHMgb24gVE9VQ0hTQ1JFRU5fQUQ3ODc5ICYmIFNQSV9NQVNURVIKIAloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgdG91Y2hzY3JlZW4gaW50ZXJmYWNlIHVzaW5nIHRoZQotCSAgQUQ3ODc5L0FENzg4OSBjb250cm9sbGVyLCBhbmQgeW91ciBib2FyZC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbgotCSAgY29kZSBpbmNsdWRlcyB0aGF0IGluIGl0cyB0YWJsZSBvZiBTUEkgZGV2aWNlcy4KKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgQUQ3ODc5LTEvQUQ3ODg5LTEgaG9va2VkIHRvIGEgU1BJIGJ1cy4KIAogCSAgSWYgdW5zdXJlLCBzYXkgTiAoYnV0IGl0J3Mgc2FmZSB0byBzYXkgIlkiKS4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWQ3ODc5LgotCi1jb25maWcgVE9VQ0hTQ1JFRU5fQUQ3ODc5Ci0JdHJpc3RhdGUKLQlkZWZhdWx0IG4KKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhZDc4Nzktc3BpLgogCiBjb25maWcgVE9VQ0hTQ1JFRU5fQklUU1kKIAl0cmlzdGF0ZSAiQ29tcGFxIGlQQVEgSDM2MDAgKEJpdHN5KSB0b3VjaHNjcmVlbiIKQEAgLTk5LDYgKzk4LDIwIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBoMzYwMF90c19pbnB1dC4KIAorY29uZmlnIFRPVUNIU0NSRUVOX0NZOENUTUcxMTAKKwl0cmlzdGF0ZSAiY3k4Y3RtZzExMCB0b3VjaHNjcmVlbiIKKwlkZXBlbmRzIG9uIEkyQworCWRlcGVuZHMgb24gR1BJT0xJQgorCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIGN5OGN0bWcxMTAgY2FwYWNpdGl2ZSB0b3VjaHNjcmVlbiBvbgorCSAgYW4gQUFWQSBkZXZpY2UuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN5OGN0bWcxMTBfdHMuCisKIGNvbmZpZyBUT1VDSFNDUkVFTl9EQTkwMzQKIAl0cmlzdGF0ZSAiVG91Y2hzY3JlZW4gc3VwcG9ydCBmb3IgRGlhbG9nIFNlbWljb25kdWN0b3IgREE5MDM0IgogCWRlcGVuZHMgb24gUE1JQ19EQTkwM1gKQEAgLTI5Miw2ICszMDUsMTggQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBlbm1vdW50LgogCitjb25maWcgVE9VQ0hTQ1JFRU5fUVQ2MDIyNDAKKwl0cmlzdGF0ZSAiUVQ2MDIyNDAgSTJDIFRvdWNoc2NyZWVuIgorCWRlcGVuZHMgb24gSTJDCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSB0aGUgQVQ0MlFUNjAyMjQwL0FUTVhUMjI0IEkyQyB0b3VjaHNjcmVlbgorCSAgY29ubmVjdGVkIHRvIHlvdXIgc3lzdGVtLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBxdDYwMjI0MF90cy4KKwogY29uZmlnIFRPVUNIU0NSRUVOX01JR09SCiAJdHJpc3RhdGUgIlJlbmVzYXMgTUlHTy1SIHRvdWNoc2NyZWVuIgogCWRlcGVuZHMgb24gU0hfTUlHT1IgJiYgSTJDCkBAIC01NDAsOSArNTY1LDkgQEAKIAlib29sICJaeXRyb25pYyBjb250cm9sbGVyIiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURQogCi1jb25maWcgVE9VQ0hTQ1JFRU5fVVNCX0VUVF9UQzVVSAorY29uZmlnIFRPVUNIU0NSRUVOX1VTQl9FVFRfVEM0NVVTQgogCWRlZmF1bHQgeQotCWJvb2wgIkVUJlQgVEM1VUggdG91Y2hzY3JlZW4gY29udHJvbGVyIHN1cHBvcnQiIGlmIEVNQkVEREVECisJYm9vbCAiRVQmVCBVU0Igc2VyaWVzIFRDNFVNL1RDNVVIIHRvdWNoc2NyZWVuIGNvbnRyb2xlciBzdXBwb3J0IiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURQogCiBjb25maWcgVE9VQ0hTQ1JFRU5fVVNCX05FWElPCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL01ha2VmaWxlIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9NYWtlZmlsZQppbmRleCA0OTc5NjRhLi5iZDZmMzBiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL01ha2VmaWxlCkBAIC05LDkgKzksMTMgQEAKIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl84OFBNODYwWCkJKz0gODhwbTg2MHgtdHMubwogb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3NykJKz0gYWQ3ODc3Lm8KIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkpCSs9IGFkNzg3OS5vCitvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQykJKz0gYWQ3ODc5LWkyYy5vCitvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSSkJKz0gYWQ3ODc5LXNwaS5vCiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NikJKz0gYWRzNzg0Ni5vCiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fQVRNRUxfVFNBRENDKQkrPSBhdG1lbF90c2FkY2Mubwogb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX0JJVFNZKQkJKz0gaDM2MDBfdHNfaW5wdXQubworb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX0NZOENUTUcxMTApCSs9IGN5OGN0bWcxMTBfdHMubworb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX0RBOTAzNCkJKz0gZGE5MDM0LXRzLm8KIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9EWU5BUFJPKQkrPSBkeW5hcHJvLm8KIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9IQU1QU0hJUkUpCSs9IGhhbXBzaGlyZS5vCiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUpCQkrPSBndW56ZS5vCkBAIC0zMCw2ICszNCw3IEBACiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSkJKz0gdXNidG91Y2hzY3JlZW4ubwogb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX1BDQVApCQkrPSBwY2FwX3RzLm8KIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCkJKz0gcGVubW91bnQubworb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX1FUNjAyMjQwKQkrPSBxdDYwMjI0MF90cy5vCiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fUzNDMjQxMCkJKz0gczNjMjQxMF90cy5vCiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMykJKz0gdG91Y2hpdDIxMy5vCiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCkJKz0gdG91Y2hyaWdodC5vCkBAIC0zOCw3ICs0Myw2IEBACiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fVUNCMTQwMCkJKz0gdWNiMTQwMF90cy5vCiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEpCSs9IHdhY29tX3c4MDAxLm8KIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9XTTk3WFgpCSs9IHdtOTd4eC10cy5vCi1vYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fREE5MDM0KQkrPSBkYTkwMzQtdHMubwogd205N3h4LXRzLSQoQ09ORklHX1RPVUNIU0NSRUVOX1dNOTcwNSkJKz0gd205NzA1Lm8KIHdtOTd4eC10cy0kKENPTkZJR19UT1VDSFNDUkVFTl9XTTk3MTIpCSs9IHdtOTcxMi5vCiB3bTk3eHgtdHMtJChDT05GSUdfVE9VQ0hTQ1JFRU5fV005NzEzKQkrPSB3bTk3MTMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZDc4NzktaTJjLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2FkNzg3OS1pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODJhMzhlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZDc4NzktaTJjLmMKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBBRDc4NzktMS9BRDc4ODktMSB0b3VjaHNjcmVlbiAoSTJDIGJ1cykKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMCBNaWNoYWVsIEhlbm5lcmljaCwgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4JLyogQlVTX0kyQyAqLworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlICJhZDc4NzkuaCIKKworI2RlZmluZSBBRDc4NzlfREVWSUQJCTB4NzkJLyogQUQ3ODc5LTEvQUQ3ODg5LTEgKi8KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBhZDc4NzlfaTJjX3N1c3BlbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJc3RydWN0IGFkNzg3OSAqdHMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWFkNzg3OV9zdXNwZW5kKHRzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkNzg3OV9pMmNfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGFkNzg3OSAqdHMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWFkNzg3OV9yZXN1bWUodHMpOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorIyBkZWZpbmUgYWQ3ODc5X2kyY19zdXNwZW5kIE5VTEwKKyMgZGVmaW5lIGFkNzg3OV9pMmNfcmVzdW1lICBOVUxMCisjZW5kaWYKKworLyogQWxsIHJlZ2lzdGVycyBhcmUgd29yZC1zaXplZC4KKyAqIEFENzg3OSB1c2VzIGEgaGlnaC1ieXRlIGZpcnN0IGNvbnZlbnRpb24uCisgKi8KK3N0YXRpYyBpbnQgYWQ3ODc5X2kyY19yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTggcmVnKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisKKwlyZXR1cm4gc3dhYjE2KGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIHJlZykpOworfQorCitzdGF0aWMgaW50IGFkNzg3OV9pMmNfbXVsdGlfcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJIHU4IGZpcnN0X3JlZywgdTggY291bnQsIHUxNiAqYnVmKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJdTggaWR4OworCisJaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCBmaXJzdF9yZWcsIGNvdW50ICogMiwgKHU4ICopYnVmKTsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgY291bnQ7ICsraWR4KQorCQlidWZbaWR4XSA9IHN3YWIxNihidWZbaWR4XSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZDc4NzlfaTJjX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgdTggcmVnLCB1MTYgdmFsKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisKKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShjbGllbnQsIHJlZywgc3dhYjE2KHZhbCkpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGFkNzg3OV9idXNfb3BzIGFkNzg3OV9pMmNfYnVzX29wcyA9IHsKKwkuYnVzdHlwZQk9IEJVU19JMkMsCisJLnJlYWQJCT0gYWQ3ODc5X2kyY19yZWFkLAorCS5tdWx0aV9yZWFkCT0gYWQ3ODc5X2kyY19tdWx0aV9yZWFkLAorCS53cml0ZQkJPSBhZDc4NzlfaTJjX3dyaXRlLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgYWQ3ODc5X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgYWQ3ODc5ICp0czsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLAorCQkJCSAgICAgSTJDX0ZVTkNfU01CVVNfV09SRF9EQVRBKSkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIlNNQlVTIFdvcmQgRGF0YSBub3QgU3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJdHMgPSBhZDc4NzlfcHJvYmUoJmNsaWVudC0+ZGV2LCBBRDc4NzlfREVWSUQsIGNsaWVudC0+aXJxLAorCQkJICAmYWQ3ODc5X2kyY19idXNfb3BzKTsKKwlpZiAoSVNfRVJSKHRzKSkKKwkJcmV0dXJuIFBUUl9FUlIodHMpOworCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgdHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGFkNzg3OV9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGFkNzg3OSAqdHMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWFkNzg3OV9yZW1vdmUodHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhZDc4NzlfaWRbXSA9IHsKKwl7ICJhZDc4NzkiLCAwIH0sCisJeyAiYWQ3ODg5IiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhZDc4NzlfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWQ3ODc5X2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiYWQ3ODc5IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gYWQ3ODc5X2kyY19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGFkNzg3OV9pMmNfcmVtb3ZlKSwKKwkuc3VzcGVuZAk9IGFkNzg3OV9pMmNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGFkNzg3OV9pMmNfcmVzdW1lLAorCS5pZF90YWJsZQk9IGFkNzg3OV9pZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFkNzg3OV9pMmNfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmYWQ3ODc5X2kyY19kcml2ZXIpOworfQorbW9kdWxlX2luaXQoYWQ3ODc5X2kyY19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGFkNzg3OV9pMmNfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZhZDc4NzlfaTJjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChhZDc4NzlfaTJjX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEhlbm5lcmljaCA8aGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBRDc4NzkoLTEpIHRvdWNoc2NyZWVuIEkyQyBidXMgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoImkyYzphZDc4NzkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWQ3ODc5LXNwaS5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZDc4Nzktc3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljNmU2OGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2FkNzg3OS1zcGkuYwpAQCAtMCwwICsxLDE5OCBAQAorLyoKKyAqIEFENzg3OS9BRDc4ODkgdG91Y2hzY3JlZW4gKFNQSSBidXMpCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAgTWljaGFlbCBIZW5uZXJpY2gsIEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CS8qIEJVU19TUEkgKi8KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisKKyNpbmNsdWRlICJhZDc4NzkuaCIKKworI2RlZmluZSBBRDc4NzlfREVWSUQJCTB4N0EJLyogQUQ3ODc5L0FENzg4OSAqLworCisjZGVmaW5lIE1BWF9TUElfRlJFUV9IWiAgICAgIDUwMDAwMDAKKyNkZWZpbmUgQUQ3ODc5X0NNRF9NQUdJQyAgICAgMHhFMDAwCisjZGVmaW5lIEFENzg3OV9DTURfUkVBRCAgICAgICgxIDw8IDEwKQorI2RlZmluZSBBRDc4NzlfQ01EKHJlZykgICAgICAoQUQ3ODc5X0NNRF9NQUdJQyB8ICgocmVnKSAmIDB4RikpCisjZGVmaW5lIEFENzg3OV9XUklURUNNRChyZWcpIChBRDc4NzlfQ01EKHJlZykpCisjZGVmaW5lIEFENzg3OV9SRUFEQ01EKHJlZykgIChBRDc4NzlfQ01EKHJlZykgfCBBRDc4NzlfQ01EX1JFQUQpCisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgYWQ3ODc5X3NwaV9zdXNwZW5kKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQoreworCXN0cnVjdCBhZDc4NzkgKnRzID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CisKKwlhZDc4Nzlfc3VzcGVuZCh0cyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZDc4Nzlfc3BpX3Jlc3VtZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBhZDc4NzkgKnRzID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CisKKwlhZDc4NzlfcmVzdW1lKHRzKTsKKworCXJldHVybiAwOworfQorI2Vsc2UKKyMgZGVmaW5lIGFkNzg3OV9zcGlfc3VzcGVuZCBOVUxMCisjIGRlZmluZSBhZDc4Nzlfc3BpX3Jlc3VtZSAgTlVMTAorI2VuZGlmCisKKy8qCisgKiBhZDc4NzlfcmVhZC93cml0ZSBhcmUgb25seSB1c2VkIGZvciBpbml0aWFsIHNldHVwIGFuZCBmb3Igc3lzZnMgY29udHJvbHMuCisgKiBUaGUgbWFpbiB0cmFmZmljIGlzIGRvbmUgaW4gYWQ3ODc5X2NvbGxlY3QoKS4KKyAqLworCitzdGF0aWMgaW50IGFkNzg3OV9zcGlfeGZlcihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAorCQkJICAgdTE2IGNtZCwgdTggY291bnQsIHUxNiAqdHhfYnVmLCB1MTYgKnJ4X2J1ZikKK3sKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOworCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnhmZXJzOworCXZvaWQgKnNwaV9kYXRhOworCXUxNiAqY29tbWFuZDsKKwl1MTYgKl9yeF9idWYgPSBfcnhfYnVmOyAvKiBzaHV0IGdjYyB1cCAqLworCXU4IGlkeDsKKwlpbnQgcmV0OworCisJeGZlcnMgPSBzcGlfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCp4ZmVycykgKiAoY291bnQgKyAyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzcGlfZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtc2cpOworCisJY29tbWFuZCA9IHNwaV9kYXRhOworCWNvbW1hbmRbMF0gPSBjbWQ7CisJaWYgKGNvdW50ID09IDEpIHsKKwkJLyogYWQ3ODc5X3NwaV97cmVhZCx3cml0ZX0gZ2F2ZSB1cyBidWYgb24gc3RhY2sgKi8KKwkJY29tbWFuZFsxXSA9ICp0eF9idWY7CisJCXR4X2J1ZiA9ICZjb21tYW5kWzFdOworCQlfcnhfYnVmID0gcnhfYnVmOworCQlyeF9idWYgPSAmY29tbWFuZFsyXTsKKwl9CisKKwkrK3hmZXJzOworCXhmZXJzWzBdLnR4X2J1ZiA9IGNvbW1hbmQ7CisJeGZlcnNbMF0ubGVuID0gMjsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlcnNbMF0sICZtc2cpOworCSsreGZlcnM7CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IGNvdW50OyArK2lkeCkgeworCQlpZiAocnhfYnVmKQorCQkJeGZlcnNbaWR4XS5yeF9idWYgPSAmcnhfYnVmW2lkeF07CisJCWlmICh0eF9idWYpCisJCQl4ZmVyc1tpZHhdLnR4X2J1ZiA9ICZ0eF9idWZbaWR4XTsKKwkJeGZlcnNbaWR4XS5sZW4gPSAyOworCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlcnNbaWR4XSwgJm1zZyk7CisJfQorCisJcmV0ID0gc3BpX3N5bmMoc3BpLCAmbXNnKTsKKworCWlmIChjb3VudCA9PSAxKQorCQlfcnhfYnVmWzBdID0gY29tbWFuZFsyXTsKKworCWtmcmVlKHNwaV9kYXRhKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWQ3ODc5X3NwaV9tdWx0aV9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgdTggZmlyc3RfcmVnLCB1OCBjb3VudCwgdTE2ICpidWYpCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHRvX3NwaV9kZXZpY2UoZGV2KTsKKworCXJldHVybiBhZDc4Nzlfc3BpX3hmZXIoc3BpLCBBRDc4NzlfUkVBRENNRChmaXJzdF9yZWcpLCBjb3VudCwgTlVMTCwgYnVmKTsKK30KKworc3RhdGljIGludCBhZDc4Nzlfc3BpX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCB1OCByZWcpCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHRvX3NwaV9kZXZpY2UoZGV2KTsKKwl1MTYgcmV0LCBkdW1teTsKKworCXJldHVybiBhZDc4Nzlfc3BpX3hmZXIoc3BpLCBBRDc4NzlfUkVBRENNRChyZWcpLCAxLCAmZHVtbXksICZyZXQpID8gOiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWQ3ODc5X3NwaV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHU4IHJlZywgdTE2IHZhbCkKK3sKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShkZXYpOworCXUxNiBkdW1teTsKKworCXJldHVybiBhZDc4Nzlfc3BpX3hmZXIoc3BpLCBBRDc4NzlfV1JJVEVDTUQocmVnKSwgMSwgJnZhbCwgJmR1bW15KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhZDc4NzlfYnVzX29wcyBhZDc4Nzlfc3BpX2J1c19vcHMgPSB7CisJLmJ1c3R5cGUJPSBCVVNfU1BJLAorCS5yZWFkCQk9IGFkNzg3OV9zcGlfcmVhZCwKKwkubXVsdGlfcmVhZAk9IGFkNzg3OV9zcGlfbXVsdGlfcmVhZCwKKwkud3JpdGUJCT0gYWQ3ODc5X3NwaV93cml0ZSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFkNzg3OV9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgYWQ3ODc5ICp0czsKKwlpbnQgZXJyOworCisJLyogZG9uJ3QgZXhjZWVkIG1heCBzcGVjaWZpZWQgU1BJIENMSyBmcmVxdWVuY3kgKi8KKwlpZiAoc3BpLT5tYXhfc3BlZWRfaHogPiBNQVhfU1BJX0ZSRVFfSFopIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJTUEkgQ0xLICVkIEh6P1xuIiwgc3BpLT5tYXhfc3BlZWRfaHopOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGktPmJpdHNfcGVyX3dvcmQgPSAxNjsKKwllcnIgPSBzcGlfc2V0dXAoc3BpKTsKKwlpZiAoZXJyKSB7CisJICAgICAgICBkZXZfZGJnKCZzcGktPmRldiwgInNwaSBtYXN0ZXIgZG9lc24ndCBzdXBwb3J0IDE2IGJpdHMvd29yZFxuIik7CisJICAgICAgICByZXR1cm4gZXJyOworCX0KKworCXRzID0gYWQ3ODc5X3Byb2JlKCZzcGktPmRldiwgQUQ3ODc5X0RFVklELCBzcGktPmlycSwgJmFkNzg3OV9zcGlfYnVzX29wcyk7CisJaWYgKElTX0VSUih0cykpCisJCXJldHVybiBQVFJfRVJSKHRzKTsKKworCXNwaV9zZXRfZHJ2ZGF0YShzcGksIHRzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhZDc4Nzlfc3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBhZDc4NzkgKnRzID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CisKKwlhZDc4NzlfcmVtb3ZlKHRzKTsKKwlzcGlfc2V0X2RydmRhdGEoc3BpLCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgYWQ3ODc5X3NwaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiYWQ3ODc5IiwKKwkJLmJ1cwk9ICZzcGlfYnVzX3R5cGUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IGFkNzg3OV9zcGlfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChhZDc4Nzlfc3BpX3JlbW92ZSksCisJLnN1c3BlbmQJPSBhZDc4Nzlfc3BpX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBhZDc4Nzlfc3BpX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFkNzg3OV9zcGlfaW5pdCh2b2lkKQoreworCXJldHVybiBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZhZDc4Nzlfc3BpX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChhZDc4Nzlfc3BpX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYWQ3ODc5X3NwaV9leGl0KHZvaWQpCit7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZhZDc4Nzlfc3BpX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChhZDc4Nzlfc3BpX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEhlbm5lcmljaCA8aGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBRDc4NzkoLTEpIHRvdWNoc2NyZWVuIFNQSSBidXMgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInNwaTphZDc4NzkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWQ3ODc5LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2FkNzg3OS5jCmluZGV4IDRiMzJmYjQuLmJhNmYwYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWQ3ODc5LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZDc4NzkuYwpAQCAtMSwyNSArMSw5IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTWljaGFlbCBIZW5uZXJpY2gsIEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIEFENzg3OS9BRDc4ODkgYmFzZWQgdG91Y2hzY3JlZW4gYW5kIEdQSU8gZHJpdmVyCiAgKgotICogRGVzY3JpcHRpb246CUFENzg3OS9BRDc4ODkgYmFzZWQgdG91Y2hzY3JlZW4sIGFuZCBHUElPIGRyaXZlcgotICoJCShJMkMvU1BJIEludGVyZmFjZSkKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwIE1pY2hhZWwgSGVubmVyaWNoLCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQnVnczogICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqCiAgKiBIaXN0b3J5OgogICogQ29weXJpZ2h0IChjKSAyMDA1IERhdmlkIEJyb3duZWxsCkBAIC00NCwxMiArMjgsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPGxpbnV4L3NwaS9hZDc4NzkuaD4KKyNpbmNsdWRlICJhZDc4NzkuaCIKIAogI2RlZmluZSBBRDc4NzlfUkVHX1pFUk9TCQkwCiAjZGVmaW5lIEFENzg3OV9SRUdfQ1RSTDEJCTEKQEAgLTEyMCwzMCArMTA0LDE5IEBACiAjZGVmaW5lCU1BWF8xMkJJVAkJCSgoMTw8MTIpLTEpCiAjZGVmaW5lCVRTX1BFTl9VUF9USU1FT1VUCQltc2Vjc190b19qaWZmaWVzKDUwKQogCi0jaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSSkgfHwgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSV9NT0RVTEUpCi0jZGVmaW5lIEFENzg3OV9ERVZJRAkJMHg3QQotdHlwZWRlZiBzdHJ1Y3Qgc3BpX2RldmljZQlidXNfZGV2aWNlOwotI2VsaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQykgfHwgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQ19NT0RVTEUpCi0jZGVmaW5lIEFENzg3OV9ERVZJRAkJMHg3OQotdHlwZWRlZiBzdHJ1Y3QgaTJjX2NsaWVudAlidXNfZGV2aWNlOwotI2VuZGlmCi0KIHN0cnVjdCBhZDc4NzkgewotCWJ1c19kZXZpY2UJCSpidXM7CisJY29uc3Qgc3RydWN0IGFkNzg3OV9idXNfb3BzICpib3BzOworCisJc3RydWN0IGRldmljZQkJKmRldjsKIAlzdHJ1Y3QgaW5wdXRfZGV2CSppbnB1dDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKIAlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcjsKICNpZmRlZiBDT05GSUdfR1BJT0xJQgogCXN0cnVjdCBncGlvX2NoaXAJZ2M7Ci0jZW5kaWYKIAlzdHJ1Y3QgbXV0ZXgJCW11dGV4OwotCXVuc2lnbmVkCQlkaXNhYmxlZDoxOwkvKiBQOiBtdXRleCAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSSkgfHwgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSV9NT0RVTEUpCi0Jc3RydWN0IHNwaV9tZXNzYWdlCW1zZzsKLQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyCXhmZXJbQUQ3ODc5X05SX1NFTlNFICsgMV07Ci0JdTE2CQkJY21kOwogI2VuZGlmCisJdW5zaWduZWQgaW50CQlpcnE7CisJYm9vbAkJCWRpc2FibGVkOwkvKiBQOiBpbnB1dC0+bXV0ZXggKi8KKwlib29sCQkJc3VzcGVuZGVkOwkvKiBQOiBpbnB1dC0+bXV0ZXggKi8KIAl1MTYJCQljb252ZXJzaW9uX2RhdGFbQUQ3ODc5X05SX1NFTlNFXTsKIAljaGFyCQkJcGh5c1szMl07CiAJdTgJCQlmaXJzdF9jb252ZXJzaW9uX2RlbGF5OwpAQCAtMTU4LDExICsxMzEsMjIgQEAKIAl1MTYJCQljbWRfY3J0bDM7CiB9OwogCi1zdGF0aWMgaW50IGFkNzg3OV9yZWFkKGJ1c19kZXZpY2UgKiwgdTgpOwotc3RhdGljIGludCBhZDc4Nzlfd3JpdGUoYnVzX2RldmljZSAqLCB1OCwgdTE2KTsKLXN0YXRpYyB2b2lkIGFkNzg3OV9jb2xsZWN0KHN0cnVjdCBhZDc4NzkgKik7CitzdGF0aWMgaW50IGFkNzg3OV9yZWFkKHN0cnVjdCBhZDc4NzkgKnRzLCB1OCByZWcpCit7CisJcmV0dXJuIHRzLT5ib3BzLT5yZWFkKHRzLT5kZXYsIHJlZyk7Cit9CiAKLXN0YXRpYyB2b2lkIGFkNzg3OV9yZXBvcnQoc3RydWN0IGFkNzg3OSAqdHMpCitzdGF0aWMgaW50IGFkNzg3OV9tdWx0aV9yZWFkKHN0cnVjdCBhZDc4NzkgKnRzLCB1OCBmaXJzdF9yZWcsIHU4IGNvdW50LCB1MTYgKmJ1ZikKK3sKKwlyZXR1cm4gdHMtPmJvcHMtPm11bHRpX3JlYWQodHMtPmRldiwgZmlyc3RfcmVnLCBjb3VudCwgYnVmKTsKK30KKworc3RhdGljIGludCBhZDc4Nzlfd3JpdGUoc3RydWN0IGFkNzg3OSAqdHMsIHU4IHJlZywgdTE2IHZhbCkKK3sKKwlyZXR1cm4gdHMtPmJvcHMtPndyaXRlKHRzLT5kZXYsIHJlZywgdmFsKTsKK30KKworc3RhdGljIGludCBhZDc4NzlfcmVwb3J0KHN0cnVjdCBhZDc4NzkgKnRzKQogewogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiA9IHRzLT5pbnB1dDsKIAl1bnNpZ25lZCBSdDsKQEAgLTE3NSwxMiArMTU5LDE0IEBACiAKIAkvKgogCSAqIFRoZSBzYW1wbGVzIHByb2Nlc3NlZCBoZXJlIGFyZSBhbHJlYWR5IHByZXByb2Nlc3NlZCBieSB0aGUgQUQ3ODc5LgotCSAqIFRoZSBwcmVwcm9jZXNzaW5nIGZ1bmN0aW9uIGNvbnNpc3RzIG9mIGEgbWVkaWFuIGFuZCBhbiBhdmVyYWdpbmcgZmlsdGVyLgotCSAqIFRoZSBjb21iaW5hdGlvbiBvZiB0aGVzZSB0d28gdGVjaG5pcXVlcyBwcm92aWRlcyBhIHJvYnVzdCBzb2x1dGlvbiwKLQkgKiBkaXNjYXJkaW5nIHRoZSBzcHVyaW91cyBub2lzZSBpbiB0aGUgc2lnbmFsIGFuZCBrZWVwaW5nIG9ubHkgdGhlIGRhdGEgb2YgaW50ZXJlc3QuCi0JICogVGhlIHNpemUgb2YgYm90aCBmaWx0ZXJzIGlzIHByb2dyYW1tYWJsZS4gKGRldi5wbGF0Zm9ybV9kYXRhLCBzZWUgbGludXgvc3BpL2FkNzg3OS5oKQotCSAqIE90aGVyIHVzZXItcHJvZ3JhbW1hYmxlIGNvbnZlcnNpb24gY29udHJvbHMgaW5jbHVkZSB2YXJpYWJsZSBhY3F1aXNpdGlvbiB0aW1lLAotCSAqIGFuZCBmaXJzdCBjb252ZXJzaW9uIGRlbGF5LiBVcCB0byAxNiBhdmVyYWdlcyBjYW4gYmUgdGFrZW4gcGVyIGNvbnZlcnNpb24uCisJICogVGhlIHByZXByb2Nlc3NpbmcgZnVuY3Rpb24gY29uc2lzdHMgb2YgYSBtZWRpYW4gYW5kIGFuIGF2ZXJhZ2luZworCSAqIGZpbHRlci4gIFRoZSBjb21iaW5hdGlvbiBvZiB0aGVzZSB0d28gdGVjaG5pcXVlcyBwcm92aWRlcyBhIHJvYnVzdAorCSAqIHNvbHV0aW9uLCBkaXNjYXJkaW5nIHRoZSBzcHVyaW91cyBub2lzZSBpbiB0aGUgc2lnbmFsIGFuZCBrZWVwaW5nCisJICogb25seSB0aGUgZGF0YSBvZiBpbnRlcmVzdC4gIFRoZSBzaXplIG9mIGJvdGggZmlsdGVycyBpcworCSAqIHByb2dyYW1tYWJsZS4gKGRldi5wbGF0Zm9ybV9kYXRhLCBzZWUgbGludXgvc3BpL2FkNzg3OS5oKSBPdGhlcgorCSAqIHVzZXItcHJvZ3JhbW1hYmxlIGNvbnZlcnNpb24gY29udHJvbHMgaW5jbHVkZSB2YXJpYWJsZSBhY3F1aXNpdGlvbgorCSAqIHRpbWUsIGFuZCBmaXJzdCBjb252ZXJzaW9uIGRlbGF5LiBVcCB0byAxNiBhdmVyYWdlcyBjYW4gYmUgdGFrZW4KKwkgKiBwZXIgY29udmVyc2lvbi4KIAkgKi8KIAogCWlmIChsaWtlbHkoeCAmJiB6MSkpIHsKQEAgLTE4OSwyMSArMTc1LDE3IEBACiAJCVJ0IC89IHoxOwogCQlSdCA9IChSdCArIDIwNDcpID4+IDEyOwogCisJCWlmICghdGltZXJfcGVuZGluZygmdHMtPnRpbWVyKSkKKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRfZGV2LCBCVE5fVE9VQ0gsIDEpOworCiAJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRfZGV2LCBBQlNfWCwgeCk7CiAJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRfZGV2LCBBQlNfWSwgeSk7CiAJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRfZGV2LCBBQlNfUFJFU1NVUkUsIFJ0KTsKIAkJaW5wdXRfc3luYyhpbnB1dF9kZXYpOworCQlyZXR1cm4gMDsKIAl9Ci19CiAKLXN0YXRpYyB2b2lkIGFkNzg3OV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgYWQ3ODc5ICp0cyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWQ3ODc5LCB3b3JrKTsKLQotCS8qIHVzZSBrZXZlbnRkIGNvbnRleHQgdG8gcmVhZCB0aGUgcmVzdWx0IHJlZ2lzdGVycyAqLwotCWFkNzg3OV9jb2xsZWN0KHRzKTsKLQlhZDc4NzlfcmVwb3J0KHRzKTsKLQltb2RfdGltZXIoJnRzLT50aW1lciwgamlmZmllcyArIFRTX1BFTl9VUF9USU1FT1VUKTsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIHZvaWQgYWQ3ODc5X3RzX2V2ZW50X3JlbGVhc2Uoc3RydWN0IGFkNzg3OSAqdHMpCkBAIC0yMTEsNiArMTkzLDcgQEAKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYgPSB0cy0+aW5wdXQ7CiAKIAlpbnB1dF9yZXBvcnRfYWJzKGlucHV0X2RldiwgQUJTX1BSRVNTVVJFLCAwKTsKKwlpbnB1dF9yZXBvcnRfa2V5KGlucHV0X2RldiwgQlROX1RPVUNILCAwKTsKIAlpbnB1dF9zeW5jKGlucHV0X2Rldik7CiB9CiAKQEAgLTIyNSw1NiArMjA4LDk4IEBACiB7CiAJc3RydWN0IGFkNzg3OSAqdHMgPSBoYW5kbGU7CiAKLQkvKiBUaGUgcmVwZWF0ZWQgY29udmVyc2lvbiBzZXF1ZW5jZXIgY29udHJvbGxlZCBieSBUTVIga2lja2VkIG9mZiB0b28gZmFzdC4KLQkgKiBXZSBpZ25vcmUgdGhlIGxhc3QgYW5kIHByb2Nlc3MgdGhlIHNhbXBsZSBzZXF1ZW5jZSBjdXJyZW50bHkgaW4gdGhlIHF1ZXVlLgotCSAqIEl0IGNhbid0IGJlIG9sZGVyIHRoYW4gOS40bXMKLQkgKi8KKwlhZDc4NzlfbXVsdGlfcmVhZCh0cywgQUQ3ODc5X1JFR19YUExVUywgQUQ3ODc5X05SX1NFTlNFLCB0cy0+Y29udmVyc2lvbl9kYXRhKTsKIAotCWlmICghd29ya19wZW5kaW5nKCZ0cy0+d29yaykpCi0JCXNjaGVkdWxlX3dvcmsoJnRzLT53b3JrKTsKKwlpZiAoIWFkNzg3OV9yZXBvcnQodHMpKQorCQltb2RfdGltZXIoJnRzLT50aW1lciwgamlmZmllcyArIFRTX1BFTl9VUF9USU1FT1VUKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIHZvaWQgYWQ3ODc5X3NldHVwKHN0cnVjdCBhZDc4NzkgKnRzKQorc3RhdGljIHZvaWQgX19hZDc4NzlfZW5hYmxlKHN0cnVjdCBhZDc4NzkgKnRzKQogewotCWFkNzg3OV93cml0ZSh0cy0+YnVzLCBBRDc4NzlfUkVHX0NUUkwyLCB0cy0+Y21kX2NydGwyKTsKLQlhZDc4Nzlfd3JpdGUodHMtPmJ1cywgQUQ3ODc5X1JFR19DVFJMMywgdHMtPmNtZF9jcnRsMyk7Ci0JYWQ3ODc5X3dyaXRlKHRzLT5idXMsIEFENzg3OV9SRUdfQ1RSTDEsIHRzLT5jbWRfY3J0bDEpOworCWFkNzg3OV93cml0ZSh0cywgQUQ3ODc5X1JFR19DVFJMMiwgdHMtPmNtZF9jcnRsMik7CisJYWQ3ODc5X3dyaXRlKHRzLCBBRDc4NzlfUkVHX0NUUkwzLCB0cy0+Y21kX2NydGwzKTsKKwlhZDc4Nzlfd3JpdGUodHMsIEFENzg3OV9SRUdfQ1RSTDEsIHRzLT5jbWRfY3J0bDEpOworCisJZW5hYmxlX2lycSh0cy0+aXJxKTsKIH0KIAotc3RhdGljIHZvaWQgYWQ3ODc5X2Rpc2FibGUoc3RydWN0IGFkNzg3OSAqdHMpCitzdGF0aWMgdm9pZCBfX2FkNzg3OV9kaXNhYmxlKHN0cnVjdCBhZDc4NzkgKnRzKQogewotCW11dGV4X2xvY2soJnRzLT5tdXRleCk7CisJZGlzYWJsZV9pcnEodHMtPmlycSk7CiAKLQlpZiAoIXRzLT5kaXNhYmxlZCkgeworCWlmIChkZWxfdGltZXJfc3luYygmdHMtPnRpbWVyKSkKKwkJYWQ3ODc5X3RzX2V2ZW50X3JlbGVhc2UodHMpOwogCi0JCXRzLT5kaXNhYmxlZCA9IDE7Ci0JCWRpc2FibGVfaXJxKHRzLT5idXMtPmlycSk7Ci0KLQkJY2FuY2VsX3dvcmtfc3luYygmdHMtPndvcmspOwotCi0JCWlmIChkZWxfdGltZXJfc3luYygmdHMtPnRpbWVyKSkKLQkJCWFkNzg3OV90c19ldmVudF9yZWxlYXNlKHRzKTsKLQotCQlhZDc4Nzlfd3JpdGUodHMtPmJ1cywgQUQ3ODc5X1JFR19DVFJMMiwKLQkJCSAgICAgQUQ3ODc5X1BNKEFENzg3OV9QTV9TSFVURE9XTikpOwotCX0KLQotCW11dGV4X3VubG9jaygmdHMtPm11dGV4KTsKKwlhZDc4Nzlfd3JpdGUodHMsIEFENzg3OV9SRUdfQ1RSTDIsIEFENzg3OV9QTShBRDc4NzlfUE1fU0hVVERPV04pKTsKIH0KIAotc3RhdGljIHZvaWQgYWQ3ODc5X2VuYWJsZShzdHJ1Y3QgYWQ3ODc5ICp0cykKLXsKLQltdXRleF9sb2NrKCZ0cy0+bXV0ZXgpOwogCi0JaWYgKHRzLT5kaXNhYmxlZCkgewotCQlhZDc4Nzlfc2V0dXAodHMpOwotCQl0cy0+ZGlzYWJsZWQgPSAwOwotCQllbmFibGVfaXJxKHRzLT5idXMtPmlycSk7CitzdGF0aWMgaW50IGFkNzg3OV9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQoreworCXN0cnVjdCBhZDc4NzkgKnRzID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXQpOworCisJLyogcHJvdGVjdGVkIGJ5IGlucHV0LT5tdXRleCAqLworCWlmICghdHMtPmRpc2FibGVkICYmICF0cy0+c3VzcGVuZGVkKQorCQlfX2FkNzg3OV9lbmFibGUodHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFkNzg3OV9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2KiBpbnB1dCkKK3sKKwlzdHJ1Y3QgYWQ3ODc5ICp0cyA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0KTsKKworCS8qIHByb3RlY3RlZCBieSBpbnB1dC0+bXV0ZXggKi8KKwlpZiAoIXRzLT5kaXNhYmxlZCAmJiAhdHMtPnN1c3BlbmRlZCkKKwkJX19hZDc4NzlfZGlzYWJsZSh0cyk7Cit9CisKK3ZvaWQgYWQ3ODc5X3N1c3BlbmQoc3RydWN0IGFkNzg3OSAqdHMpCit7CisJbXV0ZXhfbG9jaygmdHMtPmlucHV0LT5tdXRleCk7CisKKwlpZiAoIXRzLT5zdXNwZW5kZWQgJiYgIXRzLT5kaXNhYmxlZCAmJiB0cy0+aW5wdXQtPnVzZXJzKQorCQlfX2FkNzg3OV9kaXNhYmxlKHRzKTsKKworCXRzLT5zdXNwZW5kZWQgPSB0cnVlOworCisJbXV0ZXhfdW5sb2NrKCZ0cy0+aW5wdXQtPm11dGV4KTsKK30KK0VYUE9SVF9TWU1CT0woYWQ3ODc5X3N1c3BlbmQpOworCit2b2lkIGFkNzg3OV9yZXN1bWUoc3RydWN0IGFkNzg3OSAqdHMpCit7CisJbXV0ZXhfbG9jaygmdHMtPmlucHV0LT5tdXRleCk7CisKKwlpZiAodHMtPnN1c3BlbmRlZCAmJiAhdHMtPmRpc2FibGVkICYmIHRzLT5pbnB1dC0+dXNlcnMpCisJCV9fYWQ3ODc5X2VuYWJsZSh0cyk7CisKKwl0cy0+c3VzcGVuZGVkID0gZmFsc2U7CisKKwltdXRleF91bmxvY2soJnRzLT5pbnB1dC0+bXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTChhZDc4NzlfcmVzdW1lKTsKKworc3RhdGljIHZvaWQgYWQ3ODc5X3RvZ2dsZShzdHJ1Y3QgYWQ3ODc5ICp0cywgYm9vbCBkaXNhYmxlKQoreworCW11dGV4X2xvY2soJnRzLT5pbnB1dC0+bXV0ZXgpOworCisJaWYgKCF0cy0+c3VzcGVuZGVkICYmIHRzLT5pbnB1dC0+dXNlcnMgIT0gMCkgeworCisJCWlmIChkaXNhYmxlKSB7CisJCQlpZiAodHMtPmRpc2FibGVkKQorCQkJCV9fYWQ3ODc5X2VuYWJsZSh0cyk7CisJCX0gZWxzZSB7CisJCQlpZiAoIXRzLT5kaXNhYmxlZCkKKwkJCQlfX2FkNzg3OV9kaXNhYmxlKHRzKTsKKwkJfQogCX0KIAotCW11dGV4X3VubG9jaygmdHMtPm11dGV4KTsKKwl0cy0+ZGlzYWJsZWQgPSBkaXNhYmxlOworCisJbXV0ZXhfdW5sb2NrKCZ0cy0+aW5wdXQtPm11dGV4KTsKIH0KIAogc3RhdGljIHNzaXplX3QgYWQ3ODc5X2Rpc2FibGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0yOTcsMTAgKzMyMiw3IEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlpZiAodmFsKQotCQlhZDc4NzlfZGlzYWJsZSh0cyk7Ci0JZWxzZQotCQlhZDc4NzlfZW5hYmxlKHRzKTsKKwlhZDc4NzlfdG9nZ2xlKHRzLCB2YWwpOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMzI1LDcgKzM0Nyw3IEBACiAKIAltdXRleF9sb2NrKCZ0cy0+bXV0ZXgpOwogCXRzLT5jbWRfY3J0bDIgfD0gQUQ3ODc5X0dQSU9fRU4gfCBBRDc4NzlfR1BJT0RJUiB8IEFENzg3OV9HUElPUE9MOwotCWVyciA9IGFkNzg3OV93cml0ZSh0cy0+YnVzLCBBRDc4NzlfUkVHX0NUUkwyLCB0cy0+Y21kX2NydGwyKTsKKwllcnIgPSBhZDc4Nzlfd3JpdGUodHMsIEFENzg3OV9SRUdfQ1RSTDIsIHRzLT5jbWRfY3J0bDIpOwogCW11dGV4X3VubG9jaygmdHMtPm11dGV4KTsKIAogCXJldHVybiBlcnI7CkBAIC0zNDUsNyArMzY3LDcgQEAKIAllbHNlCiAJCXRzLT5jbWRfY3J0bDIgJj0gfkFENzg3OV9HUElPX0RBVEE7CiAKLQllcnIgPSBhZDc4Nzlfd3JpdGUodHMtPmJ1cywgQUQ3ODc5X1JFR19DVFJMMiwgdHMtPmNtZF9jcnRsMik7CisJZXJyID0gYWQ3ODc5X3dyaXRlKHRzLCBBRDc4NzlfUkVHX0NUUkwyLCB0cy0+Y21kX2NydGwyKTsKIAltdXRleF91bmxvY2soJnRzLT5tdXRleCk7CiAKIAlyZXR1cm4gZXJyOwpAQCAtMzU3LDcgKzM3OSw3IEBACiAJdTE2IHZhbDsKIAogCW11dGV4X2xvY2soJnRzLT5tdXRleCk7Ci0JdmFsID0gYWQ3ODc5X3JlYWQodHMtPmJ1cywgQUQ3ODc5X1JFR19DVFJMMik7CisJdmFsID0gYWQ3ODc5X3JlYWQodHMsIEFENzg3OV9SRUdfQ1RSTDIpOwogCW11dGV4X3VubG9jaygmdHMtPm11dGV4KTsKIAogCXJldHVybiAhISh2YWwgJiBBRDc4NzlfR1BJT19EQVRBKTsKQEAgLTM3NCwxNiArMzk2LDE3IEBACiAJZWxzZQogCQl0cy0+Y21kX2NydGwyICY9IH5BRDc4NzlfR1BJT19EQVRBOwogCi0JYWQ3ODc5X3dyaXRlKHRzLT5idXMsIEFENzg3OV9SRUdfQ1RSTDIsIHRzLT5jbWRfY3J0bDIpOworCWFkNzg3OV93cml0ZSh0cywgQUQ3ODc5X1JFR19DVFJMMiwgdHMtPmNtZF9jcnRsMik7CiAJbXV0ZXhfdW5sb2NrKCZ0cy0+bXV0ZXgpOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBhZDc4NzlfZ3Bpb19hZGQoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhZDc4NzlfZ3Bpb19hZGQoc3RydWN0IGFkNzg3OSAqdHMsCisJCQkgICBjb25zdCBzdHJ1Y3QgYWQ3ODc5X3BsYXRmb3JtX2RhdGEgKnBkYXRhKQogewotCXN0cnVjdCBhZDc4NzkgKnRzID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGFkNzg3OV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAlpbnQgcmV0ID0gMDsKIAorCW11dGV4X2luaXQoJnRzLT5tdXRleCk7CisKIAlpZiAocGRhdGEtPmdwaW9fZXhwb3J0KSB7CiAJCXRzLT5nYy5kaXJlY3Rpb25faW5wdXQgPSBhZDc4NzlfZ3Bpb19kaXJlY3Rpb25faW5wdXQ7CiAJCXRzLT5nYy5kaXJlY3Rpb25fb3V0cHV0ID0gYWQ3ODc5X2dwaW9fZGlyZWN0aW9uX291dHB1dDsKQEAgLTM5NCw3MiArNDE3LDc1IEBACiAJCXRzLT5nYy5uZ3BpbyA9IDE7CiAJCXRzLT5nYy5sYWJlbCA9ICJBRDc4NzktR1BJTyI7CiAJCXRzLT5nYy5vd25lciA9IFRISVNfTU9EVUxFOwotCQl0cy0+Z2MuZGV2ID0gZGV2OworCQl0cy0+Z2MuZGV2ID0gdHMtPmRldjsKIAogCQlyZXQgPSBncGlvY2hpcF9hZGQoJnRzLT5nYyk7CiAJCWlmIChyZXQpCi0JCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBncGlvICVkXG4iLAorCQkJZGV2X2Vycih0cy0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGdwaW8gJWRcbiIsCiAJCQkJdHMtPmdjLmJhc2UpOwogCX0KIAogCXJldHVybiByZXQ7CiB9CiAKLS8qCi0gKiBXZSBtYXJrIGFkNzg3OV9ncGlvX3JlbW92ZSBpbmxpbmUgc28gdGhlcmUgaXMgYSBjaGFuY2UgdGhlIGNvZGUKLSAqIGdldHMgZGlzY2FyZGVkIHdoZW4gbm90IG5lZWRlZC4gV2UgY2FuJ3QgZG8gX19kZXZpbml0L19fZGV2ZXhpdAotICogbWFya3VwIHNpbmNlIGl0IGlzIHVzZWQgaW4gYm90aCBwcm9iZSBhbmQgcmVtb3ZlIG1ldGhvZHMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZDc4NzlfZ3Bpb19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIHZvaWQgYWQ3ODc5X2dwaW9fcmVtb3ZlKHN0cnVjdCBhZDc4NzkgKnRzKQogewotCXN0cnVjdCBhZDc4NzkgKnRzID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGFkNzg3OV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwljb25zdCBzdHJ1Y3QgYWQ3ODc5X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gdHMtPmRldi0+cGxhdGZvcm1fZGF0YTsKIAlpbnQgcmV0OwogCiAJaWYgKHBkYXRhLT5ncGlvX2V4cG9ydCkgewogCQlyZXQgPSBncGlvY2hpcF9yZW1vdmUoJnRzLT5nYyk7CiAJCWlmIChyZXQpCi0JCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZW1vdmUgZ3BpbyAlZFxuIiwKKwkJCWRldl9lcnIodHMtPmRldiwgImZhaWxlZCB0byByZW1vdmUgZ3BpbyAlZFxuIiwKIAkJCQl0cy0+Z2MuYmFzZSk7CiAJfQogfQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGFkNzg3OV9ncGlvX2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW5saW5lIGludCBhZDc4NzlfZ3Bpb19hZGQoc3RydWN0IGFkNzg3OSAqdHMsCisJCQkJICBjb25zdCBzdHJ1Y3QgYWQ3ODc5X3BsYXRmb3JtX2RhdGEgKnBkYXRhKQogewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYWQ3ODc5X2dwaW9fcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZDc4NzlfZ3Bpb19yZW1vdmUoc3RydWN0IGFkNzg3OSAqdHMpCiB7CiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBfX2RldmluaXQgYWQ3ODc5X2NvbnN0cnVjdChidXNfZGV2aWNlICpidXMsIHN0cnVjdCBhZDc4NzkgKnRzKQorc3RydWN0IGFkNzg3OSAqYWQ3ODc5X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdTggZGV2aWQsIHVuc2lnbmVkIGludCBpcnEsCisJCQkgICAgY29uc3Qgc3RydWN0IGFkNzg3OV9idXNfb3BzICpib3BzKQogeworCXN0cnVjdCBhZDc4NzlfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGFkNzg3OSAqdHM7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwotCXN0cnVjdCBhZDc4NzlfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBidXMtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWludCBlcnI7CiAJdTE2IHJldmlkOwogCi0JaWYgKCFidXMtPmlycSkgewotCQlkZXZfZXJyKCZidXMtPmRldiwgIm5vIElSUT9cbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIWlycSkgeworCQlkZXZfZXJyKGRldiwgIm5vIElSUT9cbiIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycl9vdXQ7CiAJfQogCiAJaWYgKCFwZGF0YSkgewotCQlkZXZfZXJyKCZidXMtPmRldiwgIm5vIHBsYXRmb3JtIGRhdGE/XG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWRldl9lcnIoZGV2LCAibm8gcGxhdGZvcm0gZGF0YT9cbiIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycl9vdXQ7CiAJfQogCisJdHMgPSBremFsbG9jKHNpemVvZigqdHMpLCBHRlBfS0VSTkVMKTsKIAlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIWlucHV0X2RldikKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKCF0cyB8fCAhaW5wdXRfZGV2KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfbWVtOworCX0KIAorCXRzLT5ib3BzID0gYm9wczsKKwl0cy0+ZGV2ID0gZGV2OwogCXRzLT5pbnB1dCA9IGlucHV0X2RldjsKKwl0cy0+aXJxID0gaXJxOwogCiAJc2V0dXBfdGltZXIoJnRzLT50aW1lciwgYWQ3ODc5X3RpbWVyLCAodW5zaWduZWQgbG9uZykgdHMpOwotCUlOSVRfV09SSygmdHMtPndvcmssIGFkNzg3OV93b3JrKTsKLQltdXRleF9pbml0KCZ0cy0+bXV0ZXgpOwogCiAJdHMtPnhfcGxhdGVfb2htcyA9IHBkYXRhLT54X3BsYXRlX29obXMgPyA6IDQwMDsKIAl0cy0+cHJlc3N1cmVfbWF4ID0gcGRhdGEtPnByZXNzdXJlX21heCA/IDogfjA7CkBAIC00NzAsMTcgKzQ5NiwyNiBAQAogCXRzLT5wZW5fZG93bl9hY2NfaW50ZXJ2YWwgPSBwZGF0YS0+cGVuX2Rvd25fYWNjX2ludGVydmFsOwogCXRzLT5tZWRpYW4gPSBwZGF0YS0+bWVkaWFuOwogCi0Jc25wcmludGYodHMtPnBoeXMsIHNpemVvZih0cy0+cGh5cyksICIlcy9pbnB1dDAiLCBkZXZfbmFtZSgmYnVzLT5kZXYpKTsKKwlzbnByaW50Zih0cy0+cGh5cywgc2l6ZW9mKHRzLT5waHlzKSwgIiVzL2lucHV0MCIsIGRldl9uYW1lKGRldikpOwogCiAJaW5wdXRfZGV2LT5uYW1lID0gIkFENzg3OSBUb3VjaHNjcmVlbiI7CiAJaW5wdXRfZGV2LT5waHlzID0gdHMtPnBoeXM7Ci0JaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmJ1cy0+ZGV2OworCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9IGRldjsKKwlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBib3BzLT5idXN0eXBlOworCisJaW5wdXRfZGV2LT5vcGVuID0gYWQ3ODc5X29wZW47CisJaW5wdXRfZGV2LT5jbG9zZSA9IGFkNzg3OV9jbG9zZTsKKworCWlucHV0X3NldF9kcnZkYXRhKGlucHV0X2RldiwgdHMpOwogCiAJX19zZXRfYml0KEVWX0FCUywgaW5wdXRfZGV2LT5ldmJpdCk7CiAJX19zZXRfYml0KEFCU19YLCBpbnB1dF9kZXYtPmFic2JpdCk7CiAJX19zZXRfYml0KEFCU19ZLCBpbnB1dF9kZXYtPmFic2JpdCk7CiAJX19zZXRfYml0KEFCU19QUkVTU1VSRSwgaW5wdXRfZGV2LT5hYnNiaXQpOwogCisJX19zZXRfYml0KEVWX0tFWSwgaW5wdXRfZGV2LT5ldmJpdCk7CisJX19zZXRfYml0KEJUTl9UT1VDSCwgaW5wdXRfZGV2LT5rZXliaXQpOworCiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWCwKIAkJCXBkYXRhLT54X21pbiA/IDogMCwKIAkJCXBkYXRhLT54X21heCA/IDogTUFYXzEyQklULApAQCAtNDkyLDE3ICs1MjcsMTggQEAKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19QUkVTU1VSRSwKIAkJCXBkYXRhLT5wcmVzc3VyZV9taW4sIHBkYXRhLT5wcmVzc3VyZV9tYXgsIDAsIDApOwogCi0JZXJyID0gYWQ3ODc5X3dyaXRlKGJ1cywgQUQ3ODc5X1JFR19DVFJMMiwgQUQ3ODc5X1JFU0VUKTsKLQorCWVyciA9IGFkNzg3OV93cml0ZSh0cywgQUQ3ODc5X1JFR19DVFJMMiwgQUQ3ODc5X1JFU0VUKTsKIAlpZiAoZXJyIDwgMCkgewotCQlkZXZfZXJyKCZidXMtPmRldiwgIkZhaWxlZCB0byB3cml0ZSAlc1xuIiwgaW5wdXRfZGV2LT5uYW1lKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gd3JpdGUgJXNcbiIsIGlucHV0X2Rldi0+bmFtZSk7CiAJCWdvdG8gZXJyX2ZyZWVfbWVtOwogCX0KIAotCXJldmlkID0gYWQ3ODc5X3JlYWQoYnVzLCBBRDc4NzlfUkVHX1JFVklEKTsKLQotCWlmICgocmV2aWQgJiAweEZGKSAhPSBBRDc4NzlfREVWSUQpIHsKLQkJZGV2X2VycigmYnVzLT5kZXYsICJGYWlsZWQgdG8gcHJvYmUgJXNcbiIsIGlucHV0X2Rldi0+bmFtZSk7CisJcmV2aWQgPSBhZDc4NzlfcmVhZCh0cywgQUQ3ODc5X1JFR19SRVZJRCk7CisJaW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gKHJldmlkICYgMHhmZik7CisJaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gcmV2aWQgPj4gODsKKwlpZiAoaW5wdXRfZGV2LT5pZC5wcm9kdWN0ICE9IGRldmlkKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHByb2JlICVzICgleCB2cyAleClcbiIsCisJCQlpbnB1dF9kZXYtPm5hbWUsIGRldmlkLCByZXZpZCk7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX2ZyZWVfbWVtOwogCX0KQEAgLTUyNCwyMSArNTYwLDIxIEBACiAJCQlBRDc4NzlfQUNRKHRzLT5hY3F1aXNpdGlvbl90aW1lKSB8CiAJCQlBRDc4NzlfVE1SKHRzLT5wZW5fZG93bl9hY2NfaW50ZXJ2YWwpOwogCi0JYWQ3ODc5X3NldHVwKHRzKTsKLQotCWVyciA9IHJlcXVlc3RfaXJxKGJ1cy0+aXJxLCBhZDc4NzlfaXJxLAotCQkJICBJUlFGX1RSSUdHRVJfRkFMTElORywgYnVzLT5kZXYuZHJpdmVyLT5uYW1lLCB0cyk7Ci0KKwllcnIgPSByZXF1ZXN0X3RocmVhZGVkX2lycSh0cy0+aXJxLCBOVUxMLCBhZDc4NzlfaXJxLAorCQkJCSAgIElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJCSAgIGRldl9uYW1lKGRldiksIHRzKTsKIAlpZiAoZXJyKSB7Ci0JCWRldl9lcnIoJmJ1cy0+ZGV2LCAiaXJxICVkIGJ1c3k/XG4iLCBidXMtPmlycSk7CisJCWRldl9lcnIoZGV2LCAiaXJxICVkIGJ1c3k/XG4iLCB0cy0+aXJxKTsKIAkJZ290byBlcnJfZnJlZV9tZW07CiAJfQogCi0JZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZidXMtPmRldi5rb2JqLCAmYWQ3ODc5X2F0dHJfZ3JvdXApOworCV9fYWQ3ODc5X2Rpc2FibGUodHMpOworCisJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZhZDc4NzlfYXR0cl9ncm91cCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfZnJlZV9pcnE7CiAKLQllcnIgPSBhZDc4NzlfZ3Bpb19hZGQoJmJ1cy0+ZGV2KTsKKwllcnIgPSBhZDc4NzlfZ3Bpb19hZGQodHMsIHBkYXRhKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9yZW1vdmVfYXR0cjsKIApAQCAtNTQ2LDMyMSArNTgyLDMyIEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfcmVtb3ZlX2dwaW87CiAKLQlkZXZfaW5mbygmYnVzLT5kZXYsICJSZXYuJWQgdG91Y2hzY3JlZW4sIGlycSAlZFxuIiwKLQkJIHJldmlkID4+IDgsIGJ1cy0+aXJxKTsKLQotCXJldHVybiAwOworCXJldHVybiB0czsKIAogZXJyX3JlbW92ZV9ncGlvOgotCWFkNzg3OV9ncGlvX3JlbW92ZSgmYnVzLT5kZXYpOworCWFkNzg3OV9ncGlvX3JlbW92ZSh0cyk7CiBlcnJfcmVtb3ZlX2F0dHI6Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZidXMtPmRldi5rb2JqLCAmYWQ3ODc5X2F0dHJfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmYWQ3ODc5X2F0dHJfZ3JvdXApOwogZXJyX2ZyZWVfaXJxOgotCWZyZWVfaXJxKGJ1cy0+aXJxLCB0cyk7CisJZnJlZV9pcnEodHMtPmlycSwgdHMpOwogZXJyX2ZyZWVfbWVtOgogCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7Ci0KLQlyZXR1cm4gZXJyOworCWtmcmVlKHRzKTsKK2Vycl9vdXQ6CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KK0VYUE9SVF9TWU1CT0woYWQ3ODc5X3Byb2JlKTsKIAotc3RhdGljIGludCBfX2RldmV4aXQgYWQ3ODc5X2Rlc3Ryb3koYnVzX2RldmljZSAqYnVzLCBzdHJ1Y3QgYWQ3ODc5ICp0cykKK3ZvaWQgYWQ3ODc5X3JlbW92ZShzdHJ1Y3QgYWQ3ODc5ICp0cykKIHsKLQlhZDc4NzlfZ3Bpb19yZW1vdmUoJmJ1cy0+ZGV2KTsKLQlhZDc4NzlfZGlzYWJsZSh0cyk7Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZ0cy0+YnVzLT5kZXYua29iaiwgJmFkNzg3OV9hdHRyX2dyb3VwKTsKLQlmcmVlX2lycSh0cy0+YnVzLT5pcnEsIHRzKTsKKwlhZDc4NzlfZ3Bpb19yZW1vdmUodHMpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmdHMtPmRldi0+a29iaiwgJmFkNzg3OV9hdHRyX2dyb3VwKTsKKwlmcmVlX2lycSh0cy0+aXJxLCB0cyk7CiAJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UodHMtPmlucHV0KTsKLQlkZXZfZGJnKCZidXMtPmRldiwgInVucmVnaXN0ZXJlZCB0b3VjaHNjcmVlblxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBhZDc4Nzlfc3VzcGVuZChidXNfZGV2aWNlICpidXMsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQotewotCXN0cnVjdCBhZDc4NzkgKnRzID0gZGV2X2dldF9kcnZkYXRhKCZidXMtPmRldik7Ci0KLQlhZDc4NzlfZGlzYWJsZSh0cyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZDc4NzlfcmVzdW1lKGJ1c19kZXZpY2UgKmJ1cykKLXsKLQlzdHJ1Y3QgYWQ3ODc5ICp0cyA9IGRldl9nZXRfZHJ2ZGF0YSgmYnVzLT5kZXYpOwotCi0JYWQ3ODc5X2VuYWJsZSh0cyk7Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbHNlCi0jZGVmaW5lIGFkNzg3OV9zdXNwZW5kIE5VTEwKLSNkZWZpbmUgYWQ3ODc5X3Jlc3VtZSAgTlVMTAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJKSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJX01PRFVMRSkKLSNkZWZpbmUgTUFYX1NQSV9GUkVRX0haCQk1MDAwMDAwCi0jZGVmaW5lIEFENzg3OV9DTURfTUFHSUMJMHhFMDAwCi0jZGVmaW5lIEFENzg3OV9DTURfUkVBRAkJKDEgPDwgMTApCi0jZGVmaW5lIEFENzg3OV9XUklURUNNRChyZWcpCShBRDc4NzlfQ01EX01BR0lDIHwgKHJlZyAmIDB4RikpCi0jZGVmaW5lIEFENzg3OV9SRUFEQ01EKHJlZykJKEFENzg3OV9DTURfTUFHSUMgfCBBRDc4NzlfQ01EX1JFQUQgfCAocmVnICYgMHhGKSkKLQotc3RydWN0IHNlcl9yZXEgewotCXUxNgkJCWNvbW1hbmQ7Ci0JdTE2CQkJZGF0YTsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UJbXNnOwotCXN0cnVjdCBzcGlfdHJhbnNmZXIJeGZlclsyXTsKLX07Ci0KLS8qCi0gKiBhZDc4NzlfcmVhZC93cml0ZSBhcmUgb25seSB1c2VkIGZvciBpbml0aWFsIHNldHVwIGFuZCBmb3Igc3lzZnMgY29udHJvbHMuCi0gKiBUaGUgbWFpbiB0cmFmZmljIGlzIGRvbmUgaW4gYWQ3ODc5X2NvbGxlY3QoKS4KLSAqLwotCi1zdGF0aWMgaW50IGFkNzg3OV9yZWFkKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHU4IHJlZykKLXsKLQlzdHJ1Y3Qgc2VyX3JlcSAqcmVxOwotCWludCBzdGF0dXMsIHJldDsKLQotCXJlcSA9IGt6YWxsb2Moc2l6ZW9mICpyZXEsIEdGUF9LRVJORUwpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXNwaV9tZXNzYWdlX2luaXQoJnJlcS0+bXNnKTsKLQotCXJlcS0+Y29tbWFuZCA9ICh1MTYpIEFENzg3OV9SRUFEQ01EKHJlZyk7Ci0JcmVxLT54ZmVyWzBdLnR4X2J1ZiA9ICZyZXEtPmNvbW1hbmQ7Ci0JcmVxLT54ZmVyWzBdLmxlbiA9IDI7Ci0KLQlyZXEtPnhmZXJbMV0ucnhfYnVmID0gJnJlcS0+ZGF0YTsKLQlyZXEtPnhmZXJbMV0ubGVuID0gMjsKLQotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZyZXEtPnhmZXJbMF0sICZyZXEtPm1zZyk7Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnJlcS0+eGZlclsxXSwgJnJlcS0+bXNnKTsKLQotCXN0YXR1cyA9IHNwaV9zeW5jKHNwaSwgJnJlcS0+bXNnKTsKLQlyZXQgPSBzdGF0dXMgPyA6IHJlcS0+ZGF0YTsKLQotCWtmcmVlKHJlcSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGFkNzg3OV93cml0ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCB1OCByZWcsIHUxNiB2YWwpCi17Ci0Jc3RydWN0IHNlcl9yZXEgKnJlcTsKLQlpbnQgc3RhdHVzOwotCi0JcmVxID0ga3phbGxvYyhzaXplb2YgKnJlcSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jc3BpX21lc3NhZ2VfaW5pdCgmcmVxLT5tc2cpOwotCi0JcmVxLT5jb21tYW5kID0gKHUxNikgQUQ3ODc5X1dSSVRFQ01EKHJlZyk7Ci0JcmVxLT54ZmVyWzBdLnR4X2J1ZiA9ICZyZXEtPmNvbW1hbmQ7Ci0JcmVxLT54ZmVyWzBdLmxlbiA9IDI7Ci0KLQlyZXEtPmRhdGEgPSB2YWw7Ci0JcmVxLT54ZmVyWzFdLnR4X2J1ZiA9ICZyZXEtPmRhdGE7Ci0JcmVxLT54ZmVyWzFdLmxlbiA9IDI7Ci0KLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmcmVxLT54ZmVyWzBdLCAmcmVxLT5tc2cpOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZyZXEtPnhmZXJbMV0sICZyZXEtPm1zZyk7Ci0KLQlzdGF0dXMgPSBzcGlfc3luYyhzcGksICZyZXEtPm1zZyk7Ci0KLQlrZnJlZShyZXEpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIHZvaWQgYWQ3ODc5X2NvbGxlY3Qoc3RydWN0IGFkNzg3OSAqdHMpCi17Ci0JaW50IHN0YXR1cyA9IHNwaV9zeW5jKHRzLT5idXMsICZ0cy0+bXNnKTsKLQotCWlmIChzdGF0dXMpCi0JCWRldl9lcnIoJnRzLT5idXMtPmRldiwgInNwaV9zeW5jIC0tPiAlZFxuIiwgc3RhdHVzKTsKLX0KLQotc3RhdGljIHZvaWQgYWQ3ODc5X3NldHVwX3RzX2RlZl9tc2coc3RydWN0IGFkNzg3OSAqdHMpCi17Ci0Jc3RydWN0IHNwaV9tZXNzYWdlICptOwotCWludCBpOwotCi0JdHMtPmNtZCA9ICh1MTYpIEFENzg3OV9SRUFEQ01EKEFENzg3OV9SRUdfWFBMVVMpOwotCi0JbSA9ICZ0cy0+bXNnOwotCXNwaV9tZXNzYWdlX2luaXQobSk7Ci0JdHMtPnhmZXJbMF0udHhfYnVmID0gJnRzLT5jbWQ7Ci0JdHMtPnhmZXJbMF0ubGVuID0gMjsKLQotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0cy0+eGZlclswXSwgbSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQUQ3ODc5X05SX1NFTlNFOyBpKyspIHsKLQkJdHMtPnhmZXJbaSArIDFdLnJ4X2J1ZiA9ICZ0cy0+Y29udmVyc2lvbl9kYXRhW2ldOwotCQl0cy0+eGZlcltpICsgMV0ubGVuID0gMjsKLQkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRzLT54ZmVyW2kgKyAxXSwgbSk7Ci0JfQotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBhZDc4NzlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlzdHJ1Y3QgYWQ3ODc5ICp0czsKLQlpbnQgZXJyb3I7Ci0KLQkvKiBkb24ndCBleGNlZWQgbWF4IHNwZWNpZmllZCBTUEkgQ0xLIGZyZXF1ZW5jeSAqLwotCWlmIChzcGktPm1heF9zcGVlZF9oeiA+IE1BWF9TUElfRlJFUV9IWikgewotCQlkZXZfZXJyKCZzcGktPmRldiwgIlNQSSBDTEsgJWQgSHo/XG4iLCBzcGktPm1heF9zcGVlZF9oeik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXRzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFkNzg3OSksIEdGUF9LRVJORUwpOwotCWlmICghdHMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgdHMpOwotCXRzLT5idXMgPSBzcGk7Ci0KLQlhZDc4Nzlfc2V0dXBfdHNfZGVmX21zZyh0cyk7Ci0KLQllcnJvciA9IGFkNzg3OV9jb25zdHJ1Y3Qoc3BpLCB0cyk7Ci0JaWYgKGVycm9yKSB7Ci0JCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIE5VTEwpOwotCQlrZnJlZSh0cyk7Ci0JfQotCi0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBhZDc4NzlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0Jc3RydWN0IGFkNzg3OSAqdHMgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKLQotCWFkNzg3OV9kZXN0cm95KHNwaSwgdHMpOwotCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIE5VTEwpOwogCWtmcmVlKHRzKTsKLQotCXJldHVybiAwOwogfQotCi1zdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgYWQ3ODc5X2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZQk9ICJhZDc4NzkiLAotCQkuYnVzCT0gJnNwaV9idXNfdHlwZSwKLQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JfSwKLQkucHJvYmUJCT0gYWQ3ODc5X3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoYWQ3ODc5X3JlbW92ZSksCi0JLnN1c3BlbmQJPSBhZDc4Nzlfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGFkNzg3OV9yZXN1bWUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBhZDc4NzlfaW5pdCh2b2lkKQotewotCXJldHVybiBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZhZDc4NzlfZHJpdmVyKTsKLX0KLW1vZHVsZV9pbml0KGFkNzg3OV9pbml0KTsKLQotc3RhdGljIHZvaWQgX19leGl0IGFkNzg3OV9leGl0KHZvaWQpCi17Ci0Jc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZhZDc4NzlfZHJpdmVyKTsKLX0KLW1vZHVsZV9leGl0KGFkNzg3OV9leGl0KTsKLQotI2VsaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQykgfHwgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQ19NT0RVTEUpCi0KLS8qIEFsbCByZWdpc3RlcnMgYXJlIHdvcmQtc2l6ZWQuCi0gKiBBRDc4NzkgdXNlcyBhIGhpZ2gtYnl0ZSBmaXJzdCBjb252ZW50aW9uLgotICovCi1zdGF0aWMgaW50IGFkNzg3OV9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKLXsKLQlyZXR1cm4gc3dhYjE2KGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIHJlZykpOwotfQotCi1zdGF0aWMgaW50IGFkNzg3OV93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHUxNiB2YWwpCi17Ci0JcmV0dXJuIGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoY2xpZW50LCByZWcsIHN3YWIxNih2YWwpKTsKLX0KLQotc3RhdGljIHZvaWQgYWQ3ODc5X2NvbGxlY3Qoc3RydWN0IGFkNzg3OSAqdHMpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQUQ3ODc5X05SX1NFTlNFOyBpKyspCi0JCXRzLT5jb252ZXJzaW9uX2RhdGFbaV0gPSBhZDc4NzlfcmVhZCh0cy0+YnVzLAotCQkJCQkJICAgICBBRDc4NzlfUkVHX1hQTFVTICsgaSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGFkNzg3OV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IGFkNzg3OSAqdHM7Ci0JaW50IGVycm9yOwotCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsCi0JCQkJCUkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSkpIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJTTUJVUyBXb3JkIERhdGEgbm90IFN1cHBvcnRlZFxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXRzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFkNzg3OSksIEdGUF9LRVJORUwpOwotCWlmICghdHMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgdHMpOwotCXRzLT5idXMgPSBjbGllbnQ7Ci0KLQllcnJvciA9IGFkNzg3OV9jb25zdHJ1Y3QoY2xpZW50LCB0cyk7Ci0JaWYgKGVycm9yKQotCQlrZnJlZSh0cyk7Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZleGl0IGFkNzg3OV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgYWQ3ODc5ICp0cyA9IGRldl9nZXRfZHJ2ZGF0YSgmY2xpZW50LT5kZXYpOwotCi0JYWQ3ODc5X2Rlc3Ryb3koY2xpZW50LCB0cyk7Ci0Ja2ZyZWUodHMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhZDc4NzlfaWRbXSA9IHsKLQl7ICJhZDc4NzkiLCAwIH0sCi0JeyAiYWQ3ODg5IiwgMCB9LAotCXsgfQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhZDc4NzlfaWQpOwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWQ3ODc5X2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZQk9ICJhZDc4NzkiLAotCQkub3duZXIJPSBUSElTX01PRFVMRSwKLQl9LAotCS5wcm9iZQkJPSBhZDc4NzlfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChhZDc4NzlfcmVtb3ZlKSwKLQkuc3VzcGVuZAk9IGFkNzg3OV9zdXNwZW5kLAotCS5yZXN1bWUJCT0gYWQ3ODc5X3Jlc3VtZSwKLQkuaWRfdGFibGUJPSBhZDc4NzlfaWQsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBhZDc4NzlfaW5pdCh2b2lkKQotewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmYWQ3ODc5X2RyaXZlcik7Ci19Ci1tb2R1bGVfaW5pdChhZDc4NzlfaW5pdCk7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBhZDc4NzlfZXhpdCh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZhZDc4NzlfZHJpdmVyKTsKLX0KLW1vZHVsZV9leGl0KGFkNzg3OV9leGl0KTsKLSNlbmRpZgorRVhQT1JUX1NZTUJPTChhZDc4NzlfcmVtb3ZlKTsKIAogTU9EVUxFX0FVVEhPUigiTWljaGFlbCBIZW5uZXJpY2ggPGhlbm5lcmljaEBibGFja2Zpbi51Y2xpbnV4Lm9yZz4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQUQ3ODc5KC0xKSB0b3VjaHNjcmVlbiBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BTElBUygic3BpOmFkNzg3OSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZDc4NzkuaCBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWQ3ODc5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI0NWEyNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWQ3ODc5LmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIEFENzg3OS9BRDc4ODkgdG91Y2hzY3JlZW4gKGJ1cyBpbnRlcmZhY2VzKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwIE1pY2hhZWwgSGVubmVyaWNoLCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKKyNpZm5kZWYgX0FENzg3OV9IXworI2RlZmluZSBfQUQ3ODc5X0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgYWQ3ODc5Oworc3RydWN0IGRldmljZTsKKworc3RydWN0IGFkNzg3OV9idXNfb3BzIHsKKwl1MTYgYnVzdHlwZTsKKwlpbnQgKCpyZWFkKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHU4IHJlZyk7CisJaW50ICgqbXVsdGlfcmVhZCkoc3RydWN0IGRldmljZSAqZGV2LCB1OCBmaXJzdF9yZWcsIHU4IGNvdW50LCB1MTYgKmJ1Zik7CisJaW50ICgqd3JpdGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdTggcmVnLCB1MTYgdmFsKTsKK307CisKK3ZvaWQgYWQ3ODc5X3N1c3BlbmQoc3RydWN0IGFkNzg3OSAqKTsKK3ZvaWQgYWQ3ODc5X3Jlc3VtZShzdHJ1Y3QgYWQ3ODc5ICopOworc3RydWN0IGFkNzg3OSAqYWQ3ODc5X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdTggZGV2aWQsIHVuc2lnbmVkIGlycSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgYWQ3ODc5X2J1c19vcHMgKmJvcHMpOwordm9pZCBhZDc4NzlfcmVtb3ZlKHN0cnVjdCBhZDc4NzkgKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYwppbmRleCBhOWZkZjU1Li4xNjAzMTkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYwpAQCAtNjgsNiArNjgsOCBAQAogCXUxNgl5OwogCXUxNgl6MSwgejI7CiAJaW50CWlnbm9yZTsKKwl1OAl4X2J1ZlszXTsKKwl1OAl5X2J1ZlszXTsKIH07CiAKIC8qCkBAIC03OSw2ICs4MSw4IEBACiAJdTgJCQlyZWFkX3gsIHJlYWRfeSwgcmVhZF96MSwgcmVhZF96MiwgcHdyZG93bjsKIAl1MTYJCQlkdW1teTsJCS8qIGZvciB0aGUgcHdyZG93biByZWFkICovCiAJc3RydWN0IHRzX2V2ZW50CQl0YzsKKwkvKiBmb3IgYWRzNzg0NSB3aXRoIG1wYzUxMjEgcHNjIHNwaSB3ZSB1c2UgMy1ieXRlIGJ1ZmZlcnMgKi8KKwl1OAkJCXJlYWRfeF9jbWRbM10sIHJlYWRfeV9jbWRbM10sIHB3cmRvd25fY21kWzNdOwogfTsKIAogc3RydWN0IGFkczc4NDYgewpAQCAtMjA3LDYgKzIxMSwxNCBAQAogCXN0cnVjdCBzcGlfdHJhbnNmZXIJeGZlcls2XTsKIH07CiAKK3N0cnVjdCBhZHM3ODQ1X3Nlcl9yZXEgeworCXU4CQkJY29tbWFuZFszXTsKKwl1OAkJCXB3cmRvd25bM107CisJdTgJCQlzYW1wbGVbM107CisJc3RydWN0IHNwaV9tZXNzYWdlCW1zZzsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyCXhmZXJbMl07Cit9OworCiBzdGF0aWMgdm9pZCBhZHM3ODQ2X2VuYWJsZShzdHJ1Y3QgYWRzNzg0NiAqdHMpOwogc3RhdGljIHZvaWQgYWRzNzg0Nl9kaXNhYmxlKHN0cnVjdCBhZHM3ODQ2ICp0cyk7CiAKQEAgLTI4Nyw2ICsyOTksNDEgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitzdGF0aWMgaW50IGFkczc4NDVfcmVhZDEyX3NlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNvbW1hbmQpCit7CisJc3RydWN0IHNwaV9kZXZpY2UJKnNwaSA9IHRvX3NwaV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgYWRzNzg0NgkJKnRzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGFkczc4NDVfc2VyX3JlcQkqcmVxID0ga3phbGxvYyhzaXplb2YgKnJlcSwgR0ZQX0tFUk5FTCk7CisJaW50CQkJc3RhdHVzOworCisJaWYgKCFyZXEpCisJCXJldHVybiAtRU5PTUVNOworCisJc3BpX21lc3NhZ2VfaW5pdCgmcmVxLT5tc2cpOworCisJcmVxLT5jb21tYW5kWzBdID0gKHU4KSBjb21tYW5kOworCXJlcS0+eGZlclswXS50eF9idWYgPSByZXEtPmNvbW1hbmQ7CisJcmVxLT54ZmVyWzBdLnJ4X2J1ZiA9IHJlcS0+c2FtcGxlOworCXJlcS0+eGZlclswXS5sZW4gPSAzOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZyZXEtPnhmZXJbMF0sICZyZXEtPm1zZyk7CisKKwl0cy0+aXJxX2Rpc2FibGVkID0gMTsKKwlkaXNhYmxlX2lycShzcGktPmlycSk7CisJc3RhdHVzID0gc3BpX3N5bmMoc3BpLCAmcmVxLT5tc2cpOworCXRzLT5pcnFfZGlzYWJsZWQgPSAwOworCWVuYWJsZV9pcnEoc3BpLT5pcnEpOworCisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCS8qIEJFMTIgdmFsdWUsIHRoZW4gcGFkZGluZyAqLworCQlzdGF0dXMgPSBiZTE2X3RvX2NwdSgqKCh1MTYgKikmcmVxLT5zYW1wbGVbMV0pKTsKKwkJc3RhdHVzID0gc3RhdHVzID4+IDM7CisJCXN0YXR1cyAmPSAweDBmZmY7CisJfQorCisJa2ZyZWUocmVxKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCiAjaWYgZGVmaW5lZChDT05GSUdfSFdNT04pIHx8IGRlZmluZWQoQ09ORklHX0hXTU9OX01PRFVMRSkKIAogI2RlZmluZSBTSE9XKG5hbWUsIHZhciwgYWRqdXN0KSBzdGF0aWMgc3NpemVfdCBcCkBAIC01NDAsMTAgKzU4NywxNyBAQAogCS8qIGFkczc4NDZfcnhfdmFsKCkgZGlkIGluLXBsYWNlIGNvbnZlcnNpb24gKGluY2x1ZGluZyBieXRlc3dhcCkgZnJvbQogCSAqIG9uLXRoZS13aXJlIGZvcm1hdCBhcyBwYXJ0IG9mIGRlYm91bmNpbmcgdG8gZ2V0IHN0YWJsZSByZWFkaW5ncy4KIAkgKi8KLQl4ID0gcGFja2V0LT50Yy54OwotCXkgPSBwYWNrZXQtPnRjLnk7Ci0JejEgPSBwYWNrZXQtPnRjLnoxOwotCXoyID0gcGFja2V0LT50Yy56MjsKKwlpZiAodHMtPm1vZGVsID09IDc4NDUpIHsKKwkJeCA9ICoodTE2ICopcGFja2V0LT50Yy54X2J1ZjsKKwkJeSA9ICoodTE2ICopcGFja2V0LT50Yy55X2J1ZjsKKwkJejEgPSAwOworCQl6MiA9IDA7CisJfSBlbHNlIHsKKwkJeCA9IHBhY2tldC0+dGMueDsKKwkJeSA9IHBhY2tldC0+dGMueTsKKwkJejEgPSBwYWNrZXQtPnRjLnoxOworCQl6MiA9IHBhY2tldC0+dGMuejI7CisJfQogCiAJLyogcmFuZ2UgZmlsdGVyaW5nICovCiAJaWYgKHggPT0gTUFYXzEyQklUKQpAQCAtNTUxLDYgKzYwNSwxMiBAQAogCiAJaWYgKHRzLT5tb2RlbCA9PSA3ODQzKSB7CiAJCVJ0ID0gdHMtPnByZXNzdXJlX21heCAvIDI7CisJfSBlbHNlIGlmICh0cy0+bW9kZWwgPT0gNzg0NSkgeworCQlpZiAoZ2V0X3BlbmRvd25fc3RhdGUodHMpKQorCQkJUnQgPSB0cy0+cHJlc3N1cmVfbWF4IC8gMjsKKwkJZWxzZQorCQkJUnQgPSAwOworCQlkZXZfdmRiZygmdHMtPnNwaS0+ZGV2LCAieC95OiAlZC8lZCwgUEQgJWRcbiIsIHgsIHksIFJ0KTsKIAl9IGVsc2UgaWYgKGxpa2VseSh4ICYmIHoxKSkgewogCQkvKiBjb21wdXRlIHRvdWNoIHByZXNzdXJlIHJlc2lzdGFuY2UgdXNpbmcgZXF1YXRpb24gIzIgKi8KIAkJUnQgPSB6MjsKQEAgLTY3MSwxMCArNzMxLDE0IEBACiAJbSA9ICZ0cy0+bXNnW3RzLT5tc2dfaWR4XTsKIAl0ID0gbGlzdF9lbnRyeShtLT50cmFuc2ZlcnMucHJldiwgc3RydWN0IHNwaV90cmFuc2ZlciwgdHJhbnNmZXJfbGlzdCk7CiAKLQkvKiBhZGp1c3Q6ICBvbi13aXJlIGlzIGEgbXVzdC1pZ25vcmUgYml0LCBhIEJFMTIgdmFsdWUsIHRoZW4gcGFkZGluZzsKLQkgKiBidWlsdCBmcm9tIHR3byA4IGJpdCB2YWx1ZXMgd3JpdHRlbiBtc2ItZmlyc3QuCi0JICovCi0JdmFsID0gYmUxNl90b19jcHVwKChfX2JlMTYgKil0LT5yeF9idWYpID4+IDM7CisJaWYgKHRzLT5tb2RlbCA9PSA3ODQ1KSB7CisJCXZhbCA9IGJlMTZfdG9fY3B1cCgoX19iZTE2ICopJigoKGNoYXIqKXQtPnJ4X2J1ZilbMV0pKSA+PiAzOworCX0gZWxzZSB7CisJCS8qIGFkanVzdDogIG9uLXdpcmUgaXMgYSBtdXN0LWlnbm9yZSBiaXQsIGEgQkUxMiB2YWx1ZSwgdGhlbgorCQkgKiBwYWRkaW5nOyBidWlsdCBmcm9tIHR3byA4IGJpdCB2YWx1ZXMgd3JpdHRlbiBtc2ItZmlyc3QuCisJCSAqLworCQl2YWwgPSBiZTE2X3RvX2NwdXAoKF9fYmUxNiAqKXQtPnJ4X2J1ZikgPj4gMzsKKwl9CiAKIAlhY3Rpb24gPSB0cy0+ZmlsdGVyKHRzLT5maWx0ZXJfZGF0YSwgdHMtPm1zZ19pZHgsICZ2YWwpOwogCXN3aXRjaCAoYWN0aW9uKSB7CkBAIC04NzgsMTQgKzk0MiwxNSBAQAogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhZHM3ODQ2X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7Ci0Jc3RydWN0IGFkczc4NDYJCQkqdHM7Ci0Jc3RydWN0IGFkczc4NDZfcGFja2V0CQkqcGFja2V0OwotCXN0cnVjdCBpbnB1dF9kZXYJCSppbnB1dF9kZXY7Ci0Jc3RydWN0IGFkczc4NDZfcGxhdGZvcm1fZGF0YQkqcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOwotCXN0cnVjdCBzcGlfbWVzc2FnZQkJKm07Ci0Jc3RydWN0IHNwaV90cmFuc2ZlcgkJKng7Ci0JaW50CQkJCXZyZWY7Ci0JaW50CQkJCWVycjsKKwlzdHJ1Y3QgYWRzNzg0NiAqdHM7CisJc3RydWN0IGFkczc4NDZfcGFja2V0ICpwYWNrZXQ7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCWNvbnN0IHN0cnVjdCBhZHM3ODQ2X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gc3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm07CisJc3RydWN0IHNwaV90cmFuc2ZlciAqeDsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlpbnQgdnJlZjsKKwlpbnQgZXJyOwogCiAJaWYgKCFzcGktPmlycSkgewogCQlkZXZfZGJnKCZzcGktPmRldiwgIm5vIElSUT9cbiIpOwpAQCAtMTAwOCwxNiArMTA3MywyNiBAQAogCiAJc3BpX21lc3NhZ2VfaW5pdChtKTsKIAotCS8qIHktIHN0aWxsIG9uOyB0dXJuIG9uIG9ubHkgeSsgKGFuZCBBREMpICovCi0JcGFja2V0LT5yZWFkX3kgPSBSRUFEX1kodnJlZik7Ci0JeC0+dHhfYnVmID0gJnBhY2tldC0+cmVhZF95OwotCXgtPmxlbiA9IDE7Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CisJaWYgKHRzLT5tb2RlbCA9PSA3ODQ1KSB7CisJCXBhY2tldC0+cmVhZF95X2NtZFswXSA9IFJFQURfWSh2cmVmKTsKKwkJcGFja2V0LT5yZWFkX3lfY21kWzFdID0gMDsKKwkJcGFja2V0LT5yZWFkX3lfY21kWzJdID0gMDsKKwkJeC0+dHhfYnVmID0gJnBhY2tldC0+cmVhZF95X2NtZFswXTsKKwkJeC0+cnhfYnVmID0gJnBhY2tldC0+dGMueV9idWZbMF07CisJCXgtPmxlbiA9IDM7CisJCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOworCX0gZWxzZSB7CisJCS8qIHktIHN0aWxsIG9uOyB0dXJuIG9uIG9ubHkgeSsgKGFuZCBBREMpICovCisJCXBhY2tldC0+cmVhZF95ID0gUkVBRF9ZKHZyZWYpOworCQl4LT50eF9idWYgPSAmcGFja2V0LT5yZWFkX3k7CisJCXgtPmxlbiA9IDE7CisJCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOwogCi0JeCsrOwotCXgtPnJ4X2J1ZiA9ICZwYWNrZXQtPnRjLnk7Ci0JeC0+bGVuID0gMjsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKKwkJeCsrOworCQl4LT5yeF9idWYgPSAmcGFja2V0LT50Yy55OworCQl4LT5sZW4gPSAyOworCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKKwl9CiAKIAkvKiB0aGUgZmlyc3Qgc2FtcGxlIGFmdGVyIHN3aXRjaGluZyBkcml2ZXJzIGNhbiBiZSBsb3cgcXVhbGl0eTsKIAkgKiBvcHRpb25hbGx5IGRpc2NhcmQgaXQsIHVzaW5nIGEgc2Vjb25kIG9uZSBhZnRlciB0aGUgc2lnbmFscwpAQCAtMTA0MywxNyArMTExOCwyOCBAQAogCW0rKzsKIAlzcGlfbWVzc2FnZV9pbml0KG0pOwogCi0JLyogdHVybiB5LSBvZmYsIHgrIG9uLCB0aGVuIGxlYXZlIGluIGxvd3Bvd2VyICovCi0JeCsrOwotCXBhY2tldC0+cmVhZF94ID0gUkVBRF9YKHZyZWYpOwotCXgtPnR4X2J1ZiA9ICZwYWNrZXQtPnJlYWRfeDsKLQl4LT5sZW4gPSAxOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOworCWlmICh0cy0+bW9kZWwgPT0gNzg0NSkgeworCQl4Kys7CisJCXBhY2tldC0+cmVhZF94X2NtZFswXSA9IFJFQURfWCh2cmVmKTsKKwkJcGFja2V0LT5yZWFkX3hfY21kWzFdID0gMDsKKwkJcGFja2V0LT5yZWFkX3hfY21kWzJdID0gMDsKKwkJeC0+dHhfYnVmID0gJnBhY2tldC0+cmVhZF94X2NtZFswXTsKKwkJeC0+cnhfYnVmID0gJnBhY2tldC0+dGMueF9idWZbMF07CisJCXgtPmxlbiA9IDM7CisJCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOworCX0gZWxzZSB7CisJCS8qIHR1cm4geS0gb2ZmLCB4KyBvbiwgdGhlbiBsZWF2ZSBpbiBsb3dwb3dlciAqLworCQl4Kys7CisJCXBhY2tldC0+cmVhZF94ID0gUkVBRF9YKHZyZWYpOworCQl4LT50eF9idWYgPSAmcGFja2V0LT5yZWFkX3g7CisJCXgtPmxlbiA9IDE7CisJCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOwogCi0JeCsrOwotCXgtPnJ4X2J1ZiA9ICZwYWNrZXQtPnRjLng7Ci0JeC0+bGVuID0gMjsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKKwkJeCsrOworCQl4LT5yeF9idWYgPSAmcGFja2V0LT50Yy54OworCQl4LT5sZW4gPSAyOworCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKKwl9CiAKIAkvKiAuLi4gbWF5YmUgZGlzY2FyZCBmaXJzdCBzYW1wbGUgLi4uICovCiAJaWYgKHBkYXRhLT5zZXR0bGVfZGVsYXlfdXNlY3MpIHsKQEAgLTExNDQsMTUgKzEyMzAsMjUgQEAKIAltKys7CiAJc3BpX21lc3NhZ2VfaW5pdChtKTsKIAotCXgrKzsKLQlwYWNrZXQtPnB3cmRvd24gPSBQV1JET1dOOwotCXgtPnR4X2J1ZiA9ICZwYWNrZXQtPnB3cmRvd247Ci0JeC0+bGVuID0gMTsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKKwlpZiAodHMtPm1vZGVsID09IDc4NDUpIHsKKwkJeCsrOworCQlwYWNrZXQtPnB3cmRvd25fY21kWzBdID0gUFdSRE9XTjsKKwkJcGFja2V0LT5wd3Jkb3duX2NtZFsxXSA9IDA7CisJCXBhY2tldC0+cHdyZG93bl9jbWRbMl0gPSAwOworCQl4LT50eF9idWYgPSAmcGFja2V0LT5wd3Jkb3duX2NtZFswXTsKKwkJeC0+bGVuID0gMzsKKwl9IGVsc2UgeworCQl4Kys7CisJCXBhY2tldC0+cHdyZG93biA9IFBXUkRPV047CisJCXgtPnR4X2J1ZiA9ICZwYWNrZXQtPnB3cmRvd247CisJCXgtPmxlbiA9IDE7CisJCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOwogCi0JeCsrOwotCXgtPnJ4X2J1ZiA9ICZwYWNrZXQtPmR1bW15OwotCXgtPmxlbiA9IDI7CisJCXgrKzsKKwkJeC0+cnhfYnVmID0gJnBhY2tldC0+ZHVtbXk7CisJCXgtPmxlbiA9IDI7CisJfQorCiAJQ1NfQ0hBTkdFKCp4KTsKIAlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKIApAQCAtMTE3NCwxNyArMTI3MCwyMiBAQAogCQlnb3RvIGVycl9wdXRfcmVndWxhdG9yOwogCX0KIAotCWlmIChyZXF1ZXN0X2lycShzcGktPmlycSwgYWRzNzg0Nl9pcnEsIElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJc3BpLT5kZXYuZHJpdmVyLT5uYW1lLCB0cykpIHsKKwlpcnFfZmxhZ3MgPSBwZGF0YS0+aXJxX2ZsYWdzID8gOiBJUlFGX1RSSUdHRVJfRkFMTElORzsKKworCWVyciA9IHJlcXVlc3RfaXJxKHNwaS0+aXJxLCBhZHM3ODQ2X2lycSwgaXJxX2ZsYWdzLAorCQkJICBzcGktPmRldi5kcml2ZXItPm5hbWUsIHRzKTsKKworCWlmIChlcnIgJiYgIXBkYXRhLT5pcnFfZmxhZ3MpIHsKIAkJZGV2X2luZm8oJnNwaS0+ZGV2LAogCQkJInRyeWluZyBwaW4gY2hhbmdlIHdvcmthcm91bmQgb24gaXJxICVkXG4iLCBzcGktPmlycSk7CiAJCWVyciA9IHJlcXVlc3RfaXJxKHNwaS0+aXJxLCBhZHM3ODQ2X2lycSwKIAkJCQkgIElSUUZfVFJJR0dFUl9GQUxMSU5HIHwgSVJRRl9UUklHR0VSX1JJU0lORywKIAkJCQkgIHNwaS0+ZGV2LmRyaXZlci0+bmFtZSwgdHMpOwotCQlpZiAoZXJyKSB7Ci0JCQlkZXZfZGJnKCZzcGktPmRldiwgImlycSAlZCBidXN5P1xuIiwgc3BpLT5pcnEpOwotCQkJZ290byBlcnJfZGlzYWJsZV9yZWd1bGF0b3I7Ci0JCX0KKwl9CisKKwlpZiAoZXJyKSB7CisJCWRldl9kYmcoJnNwaS0+ZGV2LCAiaXJxICVkIGJ1c3k/XG4iLCBzcGktPmlycSk7CisJCWdvdG8gZXJyX2Rpc2FibGVfcmVndWxhdG9yOwogCX0KIAogCWVyciA9IGFkczc4NHhfaHdtb25fcmVnaXN0ZXIoc3BpLCB0cyk7CkBAIC0xMTk2LDggKzEyOTcsMTEgQEAKIAkvKiB0YWtlIGEgZmlyc3Qgc2FtcGxlLCBsZWF2aW5nIG5QRU5JUlEgYWN0aXZlIGFuZCB2UkVGIG9mZjsgYXZvaWQKIAkgKiB0aGUgdG91Y2hzY3JlZW4sIGluIGNhc2UgaXQncyBub3QgY29ubmVjdGVkLgogCSAqLwotCSh2b2lkKSBhZHM3ODQ2X3JlYWQxMl9zZXIoJnNwaS0+ZGV2LAotCQkJICBSRUFEXzEyQklUX1NFUih2YXV4KSB8IEFEU19QRDEwX0FMTF9PTik7CisJaWYgKHRzLT5tb2RlbCA9PSA3ODQ1KQorCQlhZHM3ODQ1X3JlYWQxMl9zZXIoJnNwaS0+ZGV2LCBQV1JET1dOKTsKKwllbHNlCisJCSh2b2lkKSBhZHM3ODQ2X3JlYWQxMl9zZXIoJnNwaS0+ZGV2LAorCQkJCVJFQURfMTJCSVRfU0VSKHZhdXgpIHwgQURTX1BEMTBfQUxMX09OKTsKIAogCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmc3BpLT5kZXYua29iaiwgJmFkczc4NHhfYXR0cl9ncm91cCk7CiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vY3k4Y3RtZzExMF90cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jeThjdG1nMTEwX3RzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGViN2RmMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vY3k4Y3RtZzExMF90cy5jCkBAIC0wLDAgKzEsMzYzIEBACisvKgorICogRHJpdmVyIGZvciBjeXByZXNzIHRvdWNoIHNjcmVlbiBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IEFhdmEgTW9iaWxlCisgKgorICogU29tZSBjbGVhbnVwcyBieSBBbGFuIENveCA8YWxhbkBsaW51eC5pbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L2N5OGN0bWcxMTBfcGRhdGEuaD4KKworI2RlZmluZSBDWThDVE1HMTEwX0RSSVZFUl9OQU1FICAgICAgImN5OGN0bWcxMTAiCisKKy8qIFRvdWNoIGNvb3JkaW5hdGVzICovCisjZGVmaW5lIENZOENUTUcxMTBfWF9NSU4JCTAKKyNkZWZpbmUgQ1k4Q1RNRzExMF9ZX01JTgkJMAorI2RlZmluZSBDWThDVE1HMTEwX1hfTUFYCQk3NTkKKyNkZWZpbmUgQ1k4Q1RNRzExMF9ZX01BWAkJNDY1CisKKworLyogY3k4Y3RtZzExMCByZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBDWThDVE1HMTEwX1RPVUNIX1dBS0VVUF9USU1FCTAKKyNkZWZpbmUgQ1k4Q1RNRzExMF9UT1VDSF9TTEVFUF9USU1FCTIKKyNkZWZpbmUgQ1k4Q1RNRzExMF9UT1VDSF9YMQkJMworI2RlZmluZSBDWThDVE1HMTEwX1RPVUNIX1kxCQk1CisjZGVmaW5lIENZOENUTUcxMTBfVE9VQ0hfWDIJCTcKKyNkZWZpbmUgQ1k4Q1RNRzExMF9UT1VDSF9ZMgkJOQorI2RlZmluZSBDWThDVE1HMTEwX0ZJTkdFUlMJCTExCisjZGVmaW5lIENZOENUTUcxMTBfR0VTVFVSRQkJMTIKKyNkZWZpbmUgQ1k4Q1RNRzExMF9SRUdfTUFYCQkxMworCisKKy8qCisgKiBUaGUgdG91Y2ggZHJpdmVyIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IGN5OGN0bWcxMTAgeworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OworCWNoYXIgcGh5c1szMl07CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlpbnQgcmVzZXRfcGluOworCWludCBpcnFfcGluOworfTsKKworLyoKKyAqIGN5OGN0bWcxMTBfcG93ZXIgaXMgdGhlIHJvdXRpbmUgdGhhdCBpcyBjYWxsZWQgd2hlbiB0b3VjaCBoYXJkd2FyZQorICogd2lsbCBwb3dlcmVkIG9mZiBvciBvbi4KKyAqLworc3RhdGljIHZvaWQgY3k4Y3RtZzExMF9wb3dlcihzdHJ1Y3QgY3k4Y3RtZzExMCAqdHMsIGJvb2wgcG93ZXJvbikKK3sKKwlpZiAodHMtPnJlc2V0X3BpbikKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHRzLT5yZXNldF9waW4sIDEgLSBwb3dlcm9uKTsKK30KKworc3RhdGljIGludCBjeThjdG1nMTEwX3dyaXRlX3JlZ3Moc3RydWN0IGN5OGN0bWcxMTAgKnRzYywgdW5zaWduZWQgY2hhciByZWcsCisJCXVuc2lnbmVkIGNoYXIgbGVuLCB1bnNpZ25lZCBjaGFyICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdHNjLT5jbGllbnQ7CisJdW5zaWduZWQgaW50IHJldDsKKwl1bnNpZ25lZCBjaGFyIGkyY19kYXRhWzZdOworCisJQlVHX09OKGxlbiA+IDUpOworCisJaTJjX2RhdGFbMF0gPSByZWc7CisJbWVtY3B5KGkyY19kYXRhICsgMSwgdmFsdWUsIGxlbik7CisKKwlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBpMmNfZGF0YSwgbGVuICsgMSk7CisJaWYgKHJldCAhPSAxKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiaTJjIHdyaXRlIGRhdGEgY21kIGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3k4Y3RtZzExMF9yZWFkX3JlZ3Moc3RydWN0IGN5OGN0bWcxMTAgKnRzYywKKwkJdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgY2hhciBsZW4sIHVuc2lnbmVkIGNoYXIgY21kKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0c2MtPmNsaWVudDsKKwl1bnNpZ25lZCBpbnQgcmV0OworCXN0cnVjdCBpMmNfbXNnIG1zZ1syXSA9IHsKKwkJLyogZmlyc3Qgd3JpdGUgc2xhdmUgcG9zaXRpb24gdG8gaTJjIGRldmljZXMgKi8KKwkJeyBjbGllbnQtPmFkZHIsIDAsIDEsICZjbWQgfSwKKwkJLyogU2Vjb25kIHJlYWQgZGF0YSBmcm9tIHBvc2l0aW9uICovCisJCXsgY2xpZW50LT5hZGRyLCBJMkNfTV9SRCwgbGVuLCBkYXRhIH0KKwl9OworCisJcmV0ID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNnLCAyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN5OGN0bWcxMTBfdG91Y2hfcG9zKHN0cnVjdCBjeThjdG1nMTEwICp0c2MpCit7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSB0c2MtPmlucHV0OworCXVuc2lnbmVkIGNoYXIgcmVnX3BbQ1k4Q1RNRzExMF9SRUdfTUFYXTsKKwlpbnQgeCwgeTsKKworCW1lbXNldChyZWdfcCwgMCwgQ1k4Q1RNRzExMF9SRUdfTUFYKTsKKworCS8qIFJlYWRpbmcgY29vcmRpbmF0ZXMgKi8KKwlpZiAoY3k4Y3RtZzExMF9yZWFkX3JlZ3ModHNjLCByZWdfcCwgOSwgQ1k4Q1RNRzExMF9UT1VDSF9YMSkgIT0gMCkKKwkJcmV0dXJuIC1FSU87CisKKwl5ID0gcmVnX3BbMl0gPDwgOCB8IHJlZ19wWzNdOworCXggPSByZWdfcFswXSA8PCA4IHwgcmVnX3BbMV07CisKKwkvKiBOdW1iZXIgb2YgdG91Y2ggKi8KKwlpZiAocmVnX3BbOF0gPT0gMCkgeworCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fVE9VQ0gsIDApOworCX0gZWxzZSAgeworCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fVE9VQ0gsIDEpOworCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfWCwgeCk7CisJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19ZLCB5KTsKKwl9CisKKwlpbnB1dF9zeW5jKGlucHV0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN5OGN0bWcxMTBfc2V0X3NsZWVwbW9kZShzdHJ1Y3QgY3k4Y3RtZzExMCAqdHMsIGJvb2wgc2xlZXApCit7CisJdW5zaWduZWQgY2hhciByZWdfcFszXTsKKworCWlmIChzbGVlcCkgeworCQlyZWdfcFswXSA9IDB4MDA7CisJCXJlZ19wWzFdID0gMHhmZjsKKwkJcmVnX3BbMl0gPSA1OworCX0gZWxzZSB7CisJCXJlZ19wWzBdID0gMHgxMDsKKwkJcmVnX3BbMV0gPSAweGZmOworCQlyZWdfcFsyXSA9IDA7CisJfQorCisJcmV0dXJuIGN5OGN0bWcxMTBfd3JpdGVfcmVncyh0cywgQ1k4Q1RNRzExMF9UT1VDSF9XQUtFVVBfVElNRSwgMywgcmVnX3ApOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgY3k4Y3RtZzExMF9pcnFfdGhyZWFkKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgY3k4Y3RtZzExMCAqdHNjID0gZGV2X2lkOworCisJY3k4Y3RtZzExMF90b3VjaF9wb3ModHNjKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgY3k4Y3RtZzExMF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJY29uc3Qgc3RydWN0IGN5OGN0bWcxMTBfcGRhdGEgKnBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgY3k4Y3RtZzExMCAqdHM7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCWludCBlcnI7CisKKwkvKiBObyBwZGF0YSBubyB3YXkgZm9yd2FyZCAqLworCWlmIChwZGF0YSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAibm8gcGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwKKwkJCQkJSTJDX0ZVTkNfU01CVVNfUkVBRF9XT1JEX0RBVEEpKQorCQlyZXR1cm4gLUVJTzsKKworCXRzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGN5OGN0bWcxMTApLCBHRlBfS0VSTkVMKTsKKwlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIXRzIHx8ICFpbnB1dF9kZXYpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9tZW07CisJfQorCisJdHMtPmNsaWVudCA9IGNsaWVudDsKKwl0cy0+aW5wdXQgPSBpbnB1dF9kZXY7CisKKwlzbnByaW50Zih0cy0+cGh5cywgc2l6ZW9mKHRzLT5waHlzKSwKKwkJICIlcy9pbnB1dDAiLCBkZXZfbmFtZSgmY2xpZW50LT5kZXYpKTsKKworCWlucHV0X2Rldi0+bmFtZSA9IENZOENUTUcxMTBfRFJJVkVSX05BTUUgIiBUb3VjaHNjcmVlbiI7CisJaW5wdXRfZGV2LT5waHlzID0gdHMtPnBoeXM7CisJaW5wdXRfZGV2LT5pZC5idXN0eXBlID0gQlVTX0kyQzsKKwlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmY2xpZW50LT5kZXY7CisKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX0FCUyk7CisJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX1RPVUNIKV0gPSBCSVRfTUFTSyhCVE5fVE9VQ0gpOworCisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWCwKKwkJCUNZOENUTUcxMTBfWF9NSU4sIENZOENUTUcxMTBfWF9NQVgsIDAsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1ksCisJCQlDWThDVE1HMTEwX1lfTUlOLCBDWThDVE1HMTEwX1lfTUFYLCAwLCAwKTsKKworCWlmICh0cy0+cmVzZXRfcGluKSB7CisJCWVyciA9IGdwaW9fcmVxdWVzdCh0cy0+cmVzZXRfcGluLCBOVUxMKTsKKwkJaWYgKGVycikgeworCQkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkJIlVuYWJsZSB0byByZXF1ZXN0IEdQSU8gcGluICVkLlxuIiwKKwkJCQl0cy0+cmVzZXRfcGluKTsKKwkJCWdvdG8gZXJyX2ZyZWVfbWVtOworCQl9CisJfQorCisJY3k4Y3RtZzExMF9wb3dlcih0cywgdHJ1ZSk7CisJY3k4Y3RtZzExMF9zZXRfc2xlZXBtb2RlKHRzLCBmYWxzZSk7CisKKwllcnIgPSBncGlvX3JlcXVlc3QodHMtPmlycV9waW4sICJ0b3VjaF9pcnFfa2V5Iik7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkiRmFpbGVkIHRvIHJlcXVlc3QgR1BJTyAlZCwgZXJyb3IgJWRcbiIsCisJCQl0cy0+aXJxX3BpbiwgZXJyKTsKKwkJZ290byBlcnJfc2h1dG9mZl9kZXZpY2U7CisJfQorCisJZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQodHMtPmlycV9waW4pOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJIkZhaWxlZCB0byBjb25maWd1cmUgaW5wdXQgZGlyZWN0aW9uIGZvciBHUElPICVkLCBlcnJvciAlZFxuIiwKKwkJCXRzLT5pcnFfcGluLCBlcnIpOworCQlnb3RvIGVycl9mcmVlX2lycV9ncGlvOworCX0KKworCWNsaWVudC0+aXJxID0gZ3Bpb190b19pcnEodHMtPmlycV9waW4pOworCWlmIChjbGllbnQtPmlycSA8IDApIHsKKwkJZXJyID0gY2xpZW50LT5pcnE7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJIlVuYWJsZSB0byBnZXQgaXJxIG51bWJlciBmb3IgR1BJTyAlZCwgZXJyb3IgJWRcbiIsCisJCQl0cy0+aXJxX3BpbiwgZXJyKTsKKwkJZ290byBlcnJfZnJlZV9pcnFfZ3BpbzsKKwl9CisKKwllcnIgPSByZXF1ZXN0X3RocmVhZGVkX2lycShjbGllbnQtPmlycSwgTlVMTCwgY3k4Y3RtZzExMF9pcnFfdGhyZWFkLAorCQkJCSAgIElSUUZfVFJJR0dFUl9SSVNJTkcsICJ0b3VjaF9yZXNldF9rZXkiLCB0cyk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkiaXJxICVkIGJ1c3k/IGVycm9yICVkXG4iLCBjbGllbnQtPmlycSwgZXJyKTsKKwkJZ290byBlcnJfZnJlZV9pcnFfZ3BpbzsKKwl9CisKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9mcmVlX2lycTsKKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHRzKTsKKwlkZXZpY2VfaW5pdF93YWtldXAoJmNsaWVudC0+ZGV2LCAxKTsKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfaXJxOgorCWZyZWVfaXJxKGNsaWVudC0+aXJxLCB0cyk7CitlcnJfZnJlZV9pcnFfZ3BpbzoKKwlncGlvX2ZyZWUodHMtPmlycV9waW4pOworZXJyX3NodXRvZmZfZGV2aWNlOgorCWN5OGN0bWcxMTBfc2V0X3NsZWVwbW9kZSh0cywgdHJ1ZSk7CisJY3k4Y3RtZzExMF9wb3dlcih0cywgZmFsc2UpOworCWlmICh0cy0+cmVzZXRfcGluKQorCQlncGlvX2ZyZWUodHMtPnJlc2V0X3Bpbik7CitlcnJfZnJlZV9tZW06CisJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKKwlrZnJlZSh0cyk7CisJcmV0dXJuIGVycjsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBjeThjdG1nMTEwX3N1c3BlbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgcG1fbWVzc2FnZV90IG1lc2cpCit7CisJc3RydWN0IGN5OGN0bWcxMTAgKnRzID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlpZiAoZGV2aWNlX21heV93YWtldXAoJmNsaWVudC0+ZGV2KSkKKwkJZW5hYmxlX2lycV93YWtlKGNsaWVudC0+aXJxKTsKKwllbHNlIHsKKwkJY3k4Y3RtZzExMF9zZXRfc2xlZXBtb2RlKHRzLCB0cnVlKTsKKwkJY3k4Y3RtZzExMF9wb3dlcih0cywgZmFsc2UpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeThjdG1nMTEwX3Jlc3VtZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBjeThjdG1nMTEwICp0cyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZjbGllbnQtPmRldikpCisJCWRpc2FibGVfaXJxX3dha2UoY2xpZW50LT5pcnEpOworCWVsc2UgeworCQljeThjdG1nMTEwX3Bvd2VyKHRzLCB0cnVlKTsKKwkJY3k4Y3RtZzExMF9zZXRfc2xlZXBtb2RlKHRzLCBmYWxzZSk7CisJfQorCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGN5OGN0bWcxMTBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGN5OGN0bWcxMTAgKnRzID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwljeThjdG1nMTEwX3NldF9zbGVlcG1vZGUodHMsIHRydWUpOworCWN5OGN0bWcxMTBfcG93ZXIodHMsIGZhbHNlKTsKKworCWZyZWVfaXJxKGNsaWVudC0+aXJxLCB0cyk7CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UodHMtPmlucHV0KTsKKwlncGlvX2ZyZWUodHMtPmlycV9waW4pOworCWlmICh0cy0+cmVzZXRfcGluKQorCQlncGlvX2ZyZWUodHMtPnJlc2V0X3Bpbik7CisJa2ZyZWUodHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RldmljZV9pZCBjeThjdG1nMTEwX2lkdGFibGVbXSA9IHsKKwl7IENZOENUTUcxMTBfRFJJVkVSX05BTUUsIDEgfSwKKwl7IH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBjeThjdG1nMTEwX2lkdGFibGUpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgY3k4Y3RtZzExMF9kcml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9IENZOENUTUcxMTBfRFJJVkVSX05BTUUsCisJfSwKKwkuaWRfdGFibGUJPSBjeThjdG1nMTEwX2lkdGFibGUsCisJLnByb2JlCQk9IGN5OGN0bWcxMTBfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChjeThjdG1nMTEwX3JlbW92ZSksCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQJPSBjeThjdG1nMTEwX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBjeThjdG1nMTEwX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBfX2luaXQgY3k4Y3RtZzExMF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZjeThjdG1nMTEwX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjeThjdG1nMTEwX2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmY3k4Y3RtZzExMF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChjeThjdG1nMTEwX2luaXQpOworbW9kdWxlX2V4aXQoY3k4Y3RtZzExMF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiU2FtdWxpIEtvbnR0aWxhIDxzYW11bGkua29udHRpbGFAYWF2YW1vYmlsZS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oImN5OGN0bWcxMTAgVG91Y2hTY3JlZW4gRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL21jczUwMDBfdHMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWNzNTAwMF90cy5jCmluZGV4IDFmYjBjMmYuLjZlZTk5NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWNzNTAwMF90cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWNzNTAwMF90cy5jCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy9tY3M1MDAwX3RzLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL21jcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CkBAIC0xMDUsNyArMTA1LDcgQEAKIHN0cnVjdCBtY3M1MDAwX3RzX2RhdGEgewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwotCWNvbnN0IHN0cnVjdCBtY3M1MDAwX3RzX3BsYXRmb3JtX2RhdGEgKnBsYXRmb3JtX2RhdGE7CisJY29uc3Qgc3RydWN0IG1jc19wbGF0Zm9ybV9kYXRhICpwbGF0Zm9ybV9kYXRhOwogfTsKIAogc3RhdGljIGlycXJldHVybl90IG1jczUwMDBfdHNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKQEAgLTE2NCw3ICsxNjQsNyBAQAogCiBzdGF0aWMgdm9pZCBtY3M1MDAwX3RzX3BoeXNfaW5pdChzdHJ1Y3QgbWNzNTAwMF90c19kYXRhICpkYXRhKQogewotCWNvbnN0IHN0cnVjdCBtY3M1MDAwX3RzX3BsYXRmb3JtX2RhdGEgKnBsYXRmb3JtX2RhdGEgPQorCWNvbnN0IHN0cnVjdCBtY3NfcGxhdGZvcm1fZGF0YSAqcGxhdGZvcm1fZGF0YSA9CiAJCWRhdGEtPnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9xdDYwMjI0MF90cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9xdDYwMjI0MF90cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YjI2YWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3F0NjAyMjQwX3RzLmMKQEAgLTAsMCArMSwxNDAxIEBACisvKgorICogQVQ0MlFUNjAyMjQwL0FUTVhUMjI0IFRvdWNoc2NyZWVuIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLkx0ZAorICogQXV0aG9yOiBKb29ueW91bmcgU2hpbSA8ankwOTIyLnNoaW1Ac2Ftc3VuZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3F0NjAyMjQwX3RzLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKy8qIFZlcnNpb24gKi8KKyNkZWZpbmUgUVQ2MDIyNDBfVkVSXzIwCQkJMjAKKyNkZWZpbmUgUVQ2MDIyNDBfVkVSXzIxCQkJMjEKKyNkZWZpbmUgUVQ2MDIyNDBfVkVSXzIyCQkJMjIKKworLyogU2xhdmUgYWRkcmVzc2VzICovCisjZGVmaW5lIFFUNjAyMjQwX0FQUF9MT1cJCTB4NGEKKyNkZWZpbmUgUVQ2MDIyNDBfQVBQX0hJR0gJCTB4NGIKKyNkZWZpbmUgUVQ2MDIyNDBfQk9PVF9MT1cJCTB4MjQKKyNkZWZpbmUgUVQ2MDIyNDBfQk9PVF9ISUdICQkweDI1CisKKy8qIEZpcm13YXJlICovCisjZGVmaW5lIFFUNjAyMjQwX0ZXX05BTUUJCSJxdDYwMjI0MC5mdyIKKworLyogUmVnaXN0ZXJzICovCisjZGVmaW5lIFFUNjAyMjQwX0ZBTUlMWV9JRAkJMHgwMAorI2RlZmluZSBRVDYwMjI0MF9WQVJJQU5UX0lECQkweDAxCisjZGVmaW5lIFFUNjAyMjQwX1ZFUlNJT04JCTB4MDIKKyNkZWZpbmUgUVQ2MDIyNDBfQlVJTEQJCQkweDAzCisjZGVmaW5lIFFUNjAyMjQwX01BVFJJWF9YX1NJWkUJCTB4MDQKKyNkZWZpbmUgUVQ2MDIyNDBfTUFUUklYX1lfU0laRQkJMHgwNQorI2RlZmluZSBRVDYwMjI0MF9PQkpFQ1RfTlVNCQkweDA2CisjZGVmaW5lIFFUNjAyMjQwX09CSkVDVF9TVEFSVAkJMHgwNworCisjZGVmaW5lIFFUNjAyMjQwX09CSkVDVF9TSVpFCQk2CisKKy8qIE9iamVjdCB0eXBlcyAqLworI2RlZmluZSBRVDYwMjI0MF9ERUJVR19ESUFHTk9TVElDCTM3CisjZGVmaW5lIFFUNjAyMjQwX0dFTl9NRVNTQUdFCQk1CisjZGVmaW5lIFFUNjAyMjQwX0dFTl9DT01NQU5ECQk2CisjZGVmaW5lIFFUNjAyMjQwX0dFTl9QT1dFUgkJNworI2RlZmluZSBRVDYwMjI0MF9HRU5fQUNRVUlSRQkJOAorI2RlZmluZSBRVDYwMjI0MF9UT1VDSF9NVUxUSQkJOQorI2RlZmluZSBRVDYwMjI0MF9UT1VDSF9LRVlBUlJBWQkJMTUKKyNkZWZpbmUgUVQ2MDIyNDBfVE9VQ0hfUFJPWElNSVRZCTIzCisjZGVmaW5lIFFUNjAyMjQwX1BST0NJX0dSSVBGQUNFCQkyMAorI2RlZmluZSBRVDYwMjI0MF9QUk9DR19OT0lTRQkJMjIKKyNkZWZpbmUgUVQ2MDIyNDBfUFJPQ0lfT05FVE9VQ0gJCTI0CisjZGVmaW5lIFFUNjAyMjQwX1BST0NJX1RXT1RPVUNICQkyNworI2RlZmluZSBRVDYwMjI0MF9TUFRfQ09NTVNDT05GSUcJMTgJLyogZmlybXdhcmUgdmVyIDIxIG92ZXIgKi8KKyNkZWZpbmUgUVQ2MDIyNDBfU1BUX0dQSU9QV00JCTE5CisjZGVmaW5lIFFUNjAyMjQwX1NQVF9TRUxGVEVTVAkJMjUKKyNkZWZpbmUgUVQ2MDIyNDBfU1BUX0NURUNPTkZJRwkJMjgKKyNkZWZpbmUgUVQ2MDIyNDBfU1BUX1VTRVJEQVRBCQkzOAkvKiBmaXJtd2FyZSB2ZXIgMjEgb3ZlciAqLworCisvKiBRVDYwMjI0MF9HRU5fQ09NTUFORCBmaWVsZCAqLworI2RlZmluZSBRVDYwMjI0MF9DT01NQU5EX1JFU0VUCQkwCisjZGVmaW5lIFFUNjAyMjQwX0NPTU1BTkRfQkFDS1VQTlYJMQorI2RlZmluZSBRVDYwMjI0MF9DT01NQU5EX0NBTElCUkFURQkyCisjZGVmaW5lIFFUNjAyMjQwX0NPTU1BTkRfUkVQT1JUQUxMCTMKKyNkZWZpbmUgUVQ2MDIyNDBfQ09NTUFORF9ESUFHTk9TVElDCTUKKworLyogUVQ2MDIyNDBfR0VOX1BPV0VSIGZpZWxkICovCisjZGVmaW5lIFFUNjAyMjQwX1BPV0VSX0lETEVBQ1FJTlQJMAorI2RlZmluZSBRVDYwMjI0MF9QT1dFUl9BQ1RWQUNRSU5UCTEKKyNkZWZpbmUgUVQ2MDIyNDBfUE9XRVJfQUNUVjJJRExFVE8JMgorCisvKiBRVDYwMjI0MF9HRU5fQUNRVUlSRSBmaWVsZCAqLworI2RlZmluZSBRVDYwMjI0MF9BQ1FVSVJFX0NIUkdUSU1FCTAKKyNkZWZpbmUgUVQ2MDIyNDBfQUNRVUlSRV9UQ0hEUklGVAkyCisjZGVmaW5lIFFUNjAyMjQwX0FDUVVJUkVfRFJJRlRTVAkzCisjZGVmaW5lIFFUNjAyMjQwX0FDUVVJUkVfVENIQVVUT0NBTAk0CisjZGVmaW5lIFFUNjAyMjQwX0FDUVVJUkVfU1lOQwkJNQorI2RlZmluZSBRVDYwMjI0MF9BQ1FVSVJFX0FUQ0hDQUxTVAk2CisjZGVmaW5lIFFUNjAyMjQwX0FDUVVJUkVfQVRDSENBTFNUSFIJNworCisvKiBRVDYwMjI0MF9UT1VDSF9NVUxUSSBmaWVsZCAqLworI2RlZmluZSBRVDYwMjI0MF9UT1VDSF9DVFJMCQkwCisjZGVmaW5lIFFUNjAyMjQwX1RPVUNIX1hPUklHSU4JCTEKKyNkZWZpbmUgUVQ2MDIyNDBfVE9VQ0hfWU9SSUdJTgkJMgorI2RlZmluZSBRVDYwMjI0MF9UT1VDSF9YU0laRQkJMworI2RlZmluZSBRVDYwMjI0MF9UT1VDSF9ZU0laRQkJNAorI2RlZmluZSBRVDYwMjI0MF9UT1VDSF9CTEVOCQk2CisjZGVmaW5lIFFUNjAyMjQwX1RPVUNIX1RDSFRIUgkJNworI2RlZmluZSBRVDYwMjI0MF9UT1VDSF9UQ0hESQkJOAorI2RlZmluZSBRVDYwMjI0MF9UT1VDSF9PUklFTlQJCTkKKyNkZWZpbmUgUVQ2MDIyNDBfVE9VQ0hfTU9WSFlTVEkJCTExCisjZGVmaW5lIFFUNjAyMjQwX1RPVUNIX01PVkhZU1ROCQkxMgorI2RlZmluZSBRVDYwMjI0MF9UT1VDSF9OVU1UT1VDSAkJMTQKKyNkZWZpbmUgUVQ2MDIyNDBfVE9VQ0hfTVJHSFlTVAkJMTUKKyNkZWZpbmUgUVQ2MDIyNDBfVE9VQ0hfTVJHVEhSCQkxNgorI2RlZmluZSBRVDYwMjI0MF9UT1VDSF9BTVBIWVNUCQkxNworI2RlZmluZSBRVDYwMjI0MF9UT1VDSF9YUkFOR0VfTFNCCTE4CisjZGVmaW5lIFFUNjAyMjQwX1RPVUNIX1hSQU5HRV9NU0IJMTkKKyNkZWZpbmUgUVQ2MDIyNDBfVE9VQ0hfWVJBTkdFX0xTQgkyMAorI2RlZmluZSBRVDYwMjI0MF9UT1VDSF9ZUkFOR0VfTVNCCTIxCisjZGVmaW5lIFFUNjAyMjQwX1RPVUNIX1hMT0NMSVAJCTIyCisjZGVmaW5lIFFUNjAyMjQwX1RPVUNIX1hISUNMSVAJCTIzCisjZGVmaW5lIFFUNjAyMjQwX1RPVUNIX1lMT0NMSVAJCTI0CisjZGVmaW5lIFFUNjAyMjQwX1RPVUNIX1lISUNMSVAJCTI1CisjZGVmaW5lIFFUNjAyMjQwX1RPVUNIX1hFREdFQ1RSTAkyNgorI2RlZmluZSBRVDYwMjI0MF9UT1VDSF9YRURHRURJU1QJMjcKKyNkZWZpbmUgUVQ2MDIyNDBfVE9VQ0hfWUVER0VDVFJMCTI4CisjZGVmaW5lIFFUNjAyMjQwX1RPVUNIX1lFREdFRElTVAkyOQorI2RlZmluZSBRVDYwMjI0MF9UT1VDSF9KVU1QTElNSVQJMzAJLyogZmlybXdhcmUgdmVyIDIyIG92ZXIgKi8KKworLyogUVQ2MDIyNDBfUFJPQ0lfR1JJUEZBQ0UgZmllbGQgKi8KKyNkZWZpbmUgUVQ2MDIyNDBfR1JJUEZBQ0VfQ1RSTAkJMAorI2RlZmluZSBRVDYwMjI0MF9HUklQRkFDRV9YTE9HUklQCTEKKyNkZWZpbmUgUVQ2MDIyNDBfR1JJUEZBQ0VfWEhJR1JJUAkyCisjZGVmaW5lIFFUNjAyMjQwX0dSSVBGQUNFX1lMT0dSSVAJMworI2RlZmluZSBRVDYwMjI0MF9HUklQRkFDRV9ZSElHUklQCTQKKyNkZWZpbmUgUVQ2MDIyNDBfR1JJUEZBQ0VfTUFYVENIUwk1CisjZGVmaW5lIFFUNjAyMjQwX0dSSVBGQUNFX1NaVEhSMQk3CisjZGVmaW5lIFFUNjAyMjQwX0dSSVBGQUNFX1NaVEhSMgk4CisjZGVmaW5lIFFUNjAyMjQwX0dSSVBGQUNFX1NIUFRIUjEJOQorI2RlZmluZSBRVDYwMjI0MF9HUklQRkFDRV9TSFBUSFIyCTEwCisjZGVmaW5lIFFUNjAyMjQwX0dSSVBGQUNFX1NVUEVYVFRPCTExCisKKy8qIFFUNjAyMjQwX1BST0NJX05PSVNFIGZpZWxkICovCisjZGVmaW5lIFFUNjAyMjQwX05PSVNFX0NUUkwJCTAKKyNkZWZpbmUgUVQ2MDIyNDBfTk9JU0VfT1VURkxFTgkJMQorI2RlZmluZSBRVDYwMjI0MF9OT0lTRV9HQ0FGVUxfTFNCCTMKKyNkZWZpbmUgUVQ2MDIyNDBfTk9JU0VfR0NBRlVMX01TQgk0CisjZGVmaW5lIFFUNjAyMjQwX05PSVNFX0dDQUZMTF9MU0IJNQorI2RlZmluZSBRVDYwMjI0MF9OT0lTRV9HQ0FGTExfTVNCCTYKKyNkZWZpbmUgUVQ2MDIyNDBfTk9JU0VfQUNUVkdDQUZWQUxJRAk3CisjZGVmaW5lIFFUNjAyMjQwX05PSVNFX05PSVNFVEhSCQk4CisjZGVmaW5lIFFUNjAyMjQwX05PSVNFX0ZSRVFIT1BTQ0FMRQkxMAorI2RlZmluZSBRVDYwMjI0MF9OT0lTRV9GUkVRMAkJMTEKKyNkZWZpbmUgUVQ2MDIyNDBfTk9JU0VfRlJFUTEJCTEyCisjZGVmaW5lIFFUNjAyMjQwX05PSVNFX0ZSRVEyCQkxMworI2RlZmluZSBRVDYwMjI0MF9OT0lTRV9GUkVRMwkJMTQKKyNkZWZpbmUgUVQ2MDIyNDBfTk9JU0VfRlJFUTQJCTE1CisjZGVmaW5lIFFUNjAyMjQwX05PSVNFX0lETEVHQ0FGVkFMSUQJMTYKKworLyogUVQ2MDIyNDBfU1BUX0NPTU1TQ09ORklHICovCisjZGVmaW5lIFFUNjAyMjQwX0NPTU1TX0NUUkwJCTAKKyNkZWZpbmUgUVQ2MDIyNDBfQ09NTVNfQ01ECQkxCisKKy8qIFFUNjAyMjQwX1NQVF9DVEVDT05GSUcgZmllbGQgKi8KKyNkZWZpbmUgUVQ2MDIyNDBfQ1RFX0NUUkwJCTAKKyNkZWZpbmUgUVQ2MDIyNDBfQ1RFX0NNRAkJMQorI2RlZmluZSBRVDYwMjI0MF9DVEVfTU9ERQkJMgorI2RlZmluZSBRVDYwMjI0MF9DVEVfSURMRUdDQUZERVBUSAkzCisjZGVmaW5lIFFUNjAyMjQwX0NURV9BQ1RWR0NBRkRFUFRICTQKKyNkZWZpbmUgUVQ2MDIyNDBfQ1RFX1ZPTFRBR0UJCTUJLyogZmlybXdhcmUgdmVyIDIxIG92ZXIgKi8KKworI2RlZmluZSBRVDYwMjI0MF9WT0xUQUdFX0RFRkFVTFQJMjcwMDAwMAorI2RlZmluZSBRVDYwMjI0MF9WT0xUQUdFX1NURVAJCTEwMDAwCisKKy8qIERlZmluZSBmb3IgUVQ2MDIyNDBfR0VOX0NPTU1BTkQgKi8KKyNkZWZpbmUgUVQ2MDIyNDBfQk9PVF9WQUxVRQkJMHhhNQorI2RlZmluZSBRVDYwMjI0MF9CQUNLVVBfVkFMVUUJCTB4NTUKKyNkZWZpbmUgUVQ2MDIyNDBfQkFDS1VQX1RJTUUJCTI1CS8qIG1zZWMgKi8KKyNkZWZpbmUgUVQ2MDIyNDBfUkVTRVRfVElNRQkJNjUJLyogbXNlYyAqLworCisjZGVmaW5lIFFUNjAyMjQwX0ZXUkVTRVRfVElNRQkJMTc1CS8qIG1zZWMgKi8KKworLyogQ29tbWFuZCB0byB1bmxvY2sgYm9vdGxvYWRlciAqLworI2RlZmluZSBRVDYwMjI0MF9VTkxPQ0tfQ01EX01TQgkJMHhhYQorI2RlZmluZSBRVDYwMjI0MF9VTkxPQ0tfQ01EX0xTQgkJMHhkYworCisvKiBCb290bG9hZGVyIG1vZGUgc3RhdHVzICovCisjZGVmaW5lIFFUNjAyMjQwX1dBSVRJTkdfQk9PVExPQURfQ01ECTB4YzAJLyogdmFsaWQgNyA2IGJpdCBvbmx5ICovCisjZGVmaW5lIFFUNjAyMjQwX1dBSVRJTkdfRlJBTUVfREFUQQkweDgwCS8qIHZhbGlkIDcgNiBiaXQgb25seSAqLworI2RlZmluZSBRVDYwMjI0MF9GUkFNRV9DUkNfQ0hFQ0sJMHgwMgorI2RlZmluZSBRVDYwMjI0MF9GUkFNRV9DUkNfRkFJTAkJMHgwMworI2RlZmluZSBRVDYwMjI0MF9GUkFNRV9DUkNfUEFTUwkJMHgwNAorI2RlZmluZSBRVDYwMjI0MF9BUFBfQ1JDX0ZBSUwJCTB4NDAJLyogdmFsaWQgNyA4IGJpdCBvbmx5ICovCisjZGVmaW5lIFFUNjAyMjQwX0JPT1RfU1RBVFVTX01BU0sJMHgzZgorCisvKiBUb3VjaCBzdGF0dXMgKi8KKyNkZWZpbmUgUVQ2MDIyNDBfU1VQUFJFU1MJCSgxIDw8IDEpCisjZGVmaW5lIFFUNjAyMjQwX0FNUAkJCSgxIDw8IDIpCisjZGVmaW5lIFFUNjAyMjQwX1ZFQ1RPUgkJCSgxIDw8IDMpCisjZGVmaW5lIFFUNjAyMjQwX01PVkUJCQkoMSA8PCA0KQorI2RlZmluZSBRVDYwMjI0MF9SRUxFQVNFCQkoMSA8PCA1KQorI2RlZmluZSBRVDYwMjI0MF9QUkVTUwkJCSgxIDw8IDYpCisjZGVmaW5lIFFUNjAyMjQwX0RFVEVDVAkJCSgxIDw8IDcpCisKKy8qIFRvdWNoc2NyZWVuIGFic29sdXRlIHZhbHVlcyAqLworI2RlZmluZSBRVDYwMjI0MF9NQVhfWEMJCQkweDNmZgorI2RlZmluZSBRVDYwMjI0MF9NQVhfWUMJCQkweDNmZgorI2RlZmluZSBRVDYwMjI0MF9NQVhfQVJFQQkJMHhmZgorCisjZGVmaW5lIFFUNjAyMjQwX01BWF9GSU5HRVIJCTEwCisKKy8qIEluaXRpYWwgcmVnaXN0ZXIgdmFsdWVzIHJlY29tbWVuZGVkIGZyb20gY2hpcCB2ZW5kb3IgKi8KK3N0YXRpYyBjb25zdCB1OCBpbml0X3ZhbHNfdmVyXzIwW10gPSB7CisJLyogUVQ2MDIyNDBfR0VOX0NPTU1BTkQoNikgKi8KKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCS8qIFFUNjAyMjQwX0dFTl9QT1dFUig3KSAqLworCTB4MjAsIDB4ZmYsIDB4MzIsCisJLyogUVQ2MDIyNDBfR0VOX0FDUVVJUkUoOCkgKi8KKwkweDA4LCAweDA1LCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDE0LAorCS8qIFFUNjAyMjQwX1RPVUNIX01VTFRJKDkpICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwKKwkweDAwLCAweDAxLCAweDAxLCAweDBlLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4NjQsCisJLyogUVQ2MDIyNDBfVE9VQ0hfS0VZQVJSQVkoMTUpICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLAorCS8qIFFUNjAyMjQwX1NQVF9HUElPUFdNKDE5KSAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwKKwkvKiBRVDYwMjI0MF9QUk9DSV9HUklQRkFDRSgyMCkgKi8KKwkweDAwLCAweDY0LCAweDY0LCAweDY0LCAweDY0LCAweDAwLCAweDAwLCAweDFlLCAweDE0LCAweDA0LAorCTB4MWUsIDB4MDAsCisJLyogUVQ2MDIyNDBfUFJPQ0dfTk9JU0UoMjIpICovCisJMHgwNSwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMCwgMHhlNywgMHhmZiwgMHgwNCwgMHgzMiwgMHgwMCwKKwkweDAxLCAweDBhLCAweDBmLCAweDE0LCAweDAwLCAweDAwLCAweGU4LAorCS8qIFFUNjAyMjQwX1RPVUNIX1BST1hJTUlUWSgyMykgKi8KKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsCisJLyogUVQ2MDIyNDBfUFJPQ0lfT05FVE9VQ0goMjQpICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCS8qIFFUNjAyMjQwX1NQVF9TRUxGVEVTVCgyNSkgKi8KKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJLyogUVQ2MDIyNDBfUFJPQ0lfVFdPVE9VQ0goMjcpICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkvKiBRVDYwMjI0MF9TUFRfQ1RFQ09ORklHKDI4KSAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDgsCit9OworCitzdGF0aWMgY29uc3QgdTggaW5pdF92YWxzX3Zlcl8yMVtdID0geworCS8qIFFUNjAyMjQwX0dFTl9DT01NQU5EKDYpICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkvKiBRVDYwMjI0MF9HRU5fUE9XRVIoNykgKi8KKwkweDIwLCAweGZmLCAweDMyLAorCS8qIFFUNjAyMjQwX0dFTl9BQ1FVSVJFKDgpICovCisJMHgwYSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgyMywKKwkvKiBRVDYwMjI0MF9UT1VDSF9NVUxUSSg5KSAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsCisJMHgwMCwgMHgwMSwgMHgwMSwgMHgwZSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCS8qIFFUNjAyMjQwX1RPVUNIX0tFWUFSUkFZKDE1KSAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwKKwkvKiBRVDYwMjI0MF9TUFRfR1BJT1BXTSgxOSkgKi8KKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJLyogUVQ2MDIyNDBfUFJPQ0lfR1JJUEZBQ0UoMjApICovCisJMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgyOCwgMHgwNCwKKwkweDBmLCAweDBhLAorCS8qIFFUNjAyMjQwX1BST0NHX05PSVNFKDIyKSAqLworCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjMsIDB4MDAsCisJMHgwMCwgMHgwNSwgMHgwZiwgMHgxOSwgMHgyMywgMHgyZCwgMHgwMywKKwkvKiBRVDYwMjI0MF9UT1VDSF9QUk9YSU1JVFkoMjMpICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLAorCS8qIFFUNjAyMjQwX1BST0NJX09ORVRPVUNIKDI0KSAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkvKiBRVDYwMjI0MF9TUFRfU0VMRlRFU1QoMjUpICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCS8qIFFUNjAyMjQwX1BST0NJX1RXT1RPVUNIKDI3KSAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJLyogUVQ2MDIyNDBfU1BUX0NURUNPTkZJRygyOCkgKi8KKwkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDEwLCAweDAwLAorfTsKKworc3RhdGljIGNvbnN0IHU4IGluaXRfdmFsc192ZXJfMjJbXSA9IHsKKwkvKiBRVDYwMjI0MF9HRU5fQ09NTUFORCg2KSAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJLyogUVQ2MDIyNDBfR0VOX1BPV0VSKDcpICovCisJMHgyMCwgMHhmZiwgMHgzMiwKKwkvKiBRVDYwMjI0MF9HRU5fQUNRVUlSRSg4KSAqLworCTB4MGEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MjMsCisJLyogUVQ2MDIyNDBfVE9VQ0hfTVVMVEkoOSkgKi8KKwkweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLAorCTB4MDAsIDB4MDEsIDB4MDEsIDB4MGUsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLAorCS8qIFFUNjAyMjQwX1RPVUNIX0tFWUFSUkFZKDE1KSAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwKKwkvKiBRVDYwMjI0MF9TUFRfR1BJT1BXTSgxOSkgKi8KKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJLyogUVQ2MDIyNDBfUFJPQ0lfR1JJUEZBQ0UoMjApICovCisJMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgyOCwgMHgwNCwKKwkweDBmLCAweDBhLAorCS8qIFFUNjAyMjQwX1BST0NHX05PSVNFKDIyKSAqLworCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjMsIDB4MDAsCisJMHgwMCwgMHgwNSwgMHgwZiwgMHgxOSwgMHgyMywgMHgyZCwgMHgwMywKKwkvKiBRVDYwMjI0MF9UT1VDSF9QUk9YSU1JVFkoMjMpICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCS8qIFFUNjAyMjQwX1BST0NJX09ORVRPVUNIKDI0KSAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkvKiBRVDYwMjI0MF9TUFRfU0VMRlRFU1QoMjUpICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCS8qIFFUNjAyMjQwX1BST0NJX1RXT1RPVUNIKDI3KSAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJLyogUVQ2MDIyNDBfU1BUX0NURUNPTkZJRygyOCkgKi8KKwkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDEwLCAweDAwLAorfTsKKworc3RydWN0IHF0NjAyMjQwX2luZm8geworCXU4IGZhbWlseV9pZDsKKwl1OCB2YXJpYW50X2lkOworCXU4IHZlcnNpb247CisJdTggYnVpbGQ7CisJdTggbWF0cml4X3hzaXplOworCXU4IG1hdHJpeF95c2l6ZTsKKwl1OCBvYmplY3RfbnVtOworfTsKKworc3RydWN0IHF0NjAyMjQwX29iamVjdCB7CisJdTggdHlwZTsKKwl1MTYgc3RhcnRfYWRkcmVzczsKKwl1OCBzaXplOworCXU4IGluc3RhbmNlczsKKwl1OCBudW1fcmVwb3J0X2lkczsKKworCS8qIHRvIG1hcCBvYmplY3QgYW5kIG1lc3NhZ2UgKi8KKwl1OCBtYXhfcmVwb3J0aWQ7Cit9OworCitzdHJ1Y3QgcXQ2MDIyNDBfbWVzc2FnZSB7CisJdTggcmVwb3J0aWQ7CisJdTggbWVzc2FnZVs3XTsKKwl1OCBjaGVja3N1bTsKK307CisKK3N0cnVjdCBxdDYwMjI0MF9maW5nZXIgeworCWludCBzdGF0dXM7CisJaW50IHg7CisJaW50IHk7CisJaW50IGFyZWE7Cit9OworCisvKiBFYWNoIGNsaWVudCBoYXMgdGhpcyBhZGRpdGlvbmFsIGRhdGEgKi8KK3N0cnVjdCBxdDYwMjI0MF9kYXRhIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKKwljb25zdCBzdHJ1Y3QgcXQ2MDIyNDBfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IHF0NjAyMjQwX29iamVjdCAqb2JqZWN0X3RhYmxlOworCXN0cnVjdCBxdDYwMjI0MF9pbmZvIGluZm87CisJc3RydWN0IHF0NjAyMjQwX2ZpbmdlciBmaW5nZXJbUVQ2MDIyNDBfTUFYX0ZJTkdFUl07CisJdW5zaWduZWQgaW50IGlycTsKK307CisKK3N0YXRpYyBib29sIHF0NjAyMjQwX29iamVjdF9yZWFkYWJsZSh1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFFUNjAyMjQwX0dFTl9NRVNTQUdFOgorCWNhc2UgUVQ2MDIyNDBfR0VOX0NPTU1BTkQ6CisJY2FzZSBRVDYwMjI0MF9HRU5fUE9XRVI6CisJY2FzZSBRVDYwMjI0MF9HRU5fQUNRVUlSRToKKwljYXNlIFFUNjAyMjQwX1RPVUNIX01VTFRJOgorCWNhc2UgUVQ2MDIyNDBfVE9VQ0hfS0VZQVJSQVk6CisJY2FzZSBRVDYwMjI0MF9UT1VDSF9QUk9YSU1JVFk6CisJY2FzZSBRVDYwMjI0MF9QUk9DSV9HUklQRkFDRToKKwljYXNlIFFUNjAyMjQwX1BST0NHX05PSVNFOgorCWNhc2UgUVQ2MDIyNDBfUFJPQ0lfT05FVE9VQ0g6CisJY2FzZSBRVDYwMjI0MF9QUk9DSV9UV09UT1VDSDoKKwljYXNlIFFUNjAyMjQwX1NQVF9DT01NU0NPTkZJRzoKKwljYXNlIFFUNjAyMjQwX1NQVF9HUElPUFdNOgorCWNhc2UgUVQ2MDIyNDBfU1BUX1NFTEZURVNUOgorCWNhc2UgUVQ2MDIyNDBfU1BUX0NURUNPTkZJRzoKKwljYXNlIFFUNjAyMjQwX1NQVF9VU0VSREFUQToKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworc3RhdGljIGJvb2wgcXQ2MDIyNDBfb2JqZWN0X3dyaXRhYmxlKHVuc2lnbmVkIGludCB0eXBlKQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgUVQ2MDIyNDBfR0VOX0NPTU1BTkQ6CisJY2FzZSBRVDYwMjI0MF9HRU5fUE9XRVI6CisJY2FzZSBRVDYwMjI0MF9HRU5fQUNRVUlSRToKKwljYXNlIFFUNjAyMjQwX1RPVUNIX01VTFRJOgorCWNhc2UgUVQ2MDIyNDBfVE9VQ0hfS0VZQVJSQVk6CisJY2FzZSBRVDYwMjI0MF9UT1VDSF9QUk9YSU1JVFk6CisJY2FzZSBRVDYwMjI0MF9QUk9DSV9HUklQRkFDRToKKwljYXNlIFFUNjAyMjQwX1BST0NHX05PSVNFOgorCWNhc2UgUVQ2MDIyNDBfUFJPQ0lfT05FVE9VQ0g6CisJY2FzZSBRVDYwMjI0MF9QUk9DSV9UV09UT1VDSDoKKwljYXNlIFFUNjAyMjQwX1NQVF9HUElPUFdNOgorCWNhc2UgUVQ2MDIyNDBfU1BUX1NFTEZURVNUOgorCWNhc2UgUVQ2MDIyNDBfU1BUX0NURUNPTkZJRzoKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworc3RhdGljIHZvaWQgcXQ2MDIyNDBfZHVtcF9tZXNzYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBxdDYwMjI0MF9tZXNzYWdlICptZXNzYWdlKQoreworCWRldl9kYmcoZGV2LCAicmVwb3J0aWQ6XHQweCV4XG4iLCBtZXNzYWdlLT5yZXBvcnRpZCk7CisJZGV2X2RiZyhkZXYsICJtZXNzYWdlMTpcdDB4JXhcbiIsIG1lc3NhZ2UtPm1lc3NhZ2VbMF0pOworCWRldl9kYmcoZGV2LCAibWVzc2FnZTI6XHQweCV4XG4iLCBtZXNzYWdlLT5tZXNzYWdlWzFdKTsKKwlkZXZfZGJnKGRldiwgIm1lc3NhZ2UzOlx0MHgleFxuIiwgbWVzc2FnZS0+bWVzc2FnZVsyXSk7CisJZGV2X2RiZyhkZXYsICJtZXNzYWdlNDpcdDB4JXhcbiIsIG1lc3NhZ2UtPm1lc3NhZ2VbM10pOworCWRldl9kYmcoZGV2LCAibWVzc2FnZTU6XHQweCV4XG4iLCBtZXNzYWdlLT5tZXNzYWdlWzRdKTsKKwlkZXZfZGJnKGRldiwgIm1lc3NhZ2U2Olx0MHgleFxuIiwgbWVzc2FnZS0+bWVzc2FnZVs1XSk7CisJZGV2X2RiZyhkZXYsICJtZXNzYWdlNzpcdDB4JXhcbiIsIG1lc3NhZ2UtPm1lc3NhZ2VbNl0pOworCWRldl9kYmcoZGV2LCAiY2hlY2tzdW06XHQweCV4XG4iLCBtZXNzYWdlLT5jaGVja3N1bSk7Cit9CisKK3N0YXRpYyBpbnQgcXQ2MDIyNDBfY2hlY2tfYm9vdGxvYWRlcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCSAgICAgdW5zaWduZWQgaW50IHN0YXRlKQoreworCXU4IHZhbDsKKworcmVjaGVjazoKKwlpZiAoaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgJnZhbCwgMSkgIT0gMSkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOiBpMmMgcmVjdiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgUVQ2MDIyNDBfV0FJVElOR19CT09UTE9BRF9DTUQ6CisJY2FzZSBRVDYwMjI0MF9XQUlUSU5HX0ZSQU1FX0RBVEE6CisJCXZhbCAmPSB+UVQ2MDIyNDBfQk9PVF9TVEFUVVNfTUFTSzsKKwkJYnJlYWs7CisJY2FzZSBRVDYwMjI0MF9GUkFNRV9DUkNfUEFTUzoKKwkJaWYgKHZhbCA9PSBRVDYwMjI0MF9GUkFNRV9DUkNfQ0hFQ0spCisJCQlnb3RvIHJlY2hlY2s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh2YWwgIT0gc3RhdGUpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJVbnZhbGlkIGJvb3Rsb2FkZXIgbW9kZSBzdGF0ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHF0NjAyMjQwX3VubG9ja19ib290bG9hZGVyKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJdTggYnVmWzJdOworCisJYnVmWzBdID0gUVQ2MDIyNDBfVU5MT0NLX0NNRF9MU0I7CisJYnVmWzFdID0gUVQ2MDIyNDBfVU5MT0NLX0NNRF9NU0I7CisKKwlpZiAoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAyKSAhPSAyKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IGkyYyBzZW5kIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxdDYwMjI0MF9md193cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICAgICBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGZyYW1lX3NpemUpCit7CisJaWYgKGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGRhdGEsIGZyYW1lX3NpemUpICE9IGZyYW1lX3NpemUpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczogaTJjIHNlbmQgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fcXQ2MDIyNDBfcmVhZF9yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSAgICAgICB1MTYgcmVnLCB1MTYgbGVuLCB2b2lkICp2YWwpCit7CisJc3RydWN0IGkyY19tc2cgeGZlclsyXTsKKwl1OCBidWZbMl07CisKKwlidWZbMF0gPSByZWcgJiAweGZmOworCWJ1ZlsxXSA9IChyZWcgPj4gOCkgJiAweGZmOworCisJLyogV3JpdGUgcmVnaXN0ZXIgKi8KKwl4ZmVyWzBdLmFkZHIgPSBjbGllbnQtPmFkZHI7CisJeGZlclswXS5mbGFncyA9IDA7CisJeGZlclswXS5sZW4gPSAyOworCXhmZXJbMF0uYnVmID0gYnVmOworCisJLyogUmVhZCBkYXRhICovCisJeGZlclsxXS5hZGRyID0gY2xpZW50LT5hZGRyOworCXhmZXJbMV0uZmxhZ3MgPSBJMkNfTV9SRDsKKwl4ZmVyWzFdLmxlbiA9IGxlbjsKKwl4ZmVyWzFdLmJ1ZiA9IHZhbDsKKworCWlmIChpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCB4ZmVyLCAyKSAhPSAyKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IGkyYyB0cmFuc2ZlciBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcXQ2MDIyNDBfcmVhZF9yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IHJlZywgdTggKnZhbCkKK3sKKwlyZXR1cm4gX19xdDYwMjI0MF9yZWFkX3JlZyhjbGllbnQsIHJlZywgMSwgdmFsKTsKK30KKworc3RhdGljIGludCBxdDYwMjI0MF93cml0ZV9yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IHJlZywgdTggdmFsKQoreworCXU4IGJ1ZlszXTsKKworCWJ1ZlswXSA9IHJlZyAmIDB4ZmY7CisJYnVmWzFdID0gKHJlZyA+PiA4KSAmIDB4ZmY7CisJYnVmWzJdID0gdmFsOworCisJaWYgKGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMykgIT0gMykgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOiBpMmMgc2VuZCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcXQ2MDIyNDBfcmVhZF9vYmplY3RfdGFibGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgICAgICB1MTYgcmVnLCB1OCAqb2JqZWN0X2J1ZikKK3sKKwlyZXR1cm4gX19xdDYwMjI0MF9yZWFkX3JlZyhjbGllbnQsIHJlZywgUVQ2MDIyNDBfT0JKRUNUX1NJWkUsCisJCQkJICAgb2JqZWN0X2J1Zik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcXQ2MDIyNDBfb2JqZWN0ICoKK3F0NjAyMjQwX2dldF9vYmplY3Qoc3RydWN0IHF0NjAyMjQwX2RhdGEgKmRhdGEsIHU4IHR5cGUpCit7CisJc3RydWN0IHF0NjAyMjQwX29iamVjdCAqb2JqZWN0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPmluZm8ub2JqZWN0X251bTsgaSsrKSB7CisJCW9iamVjdCA9IGRhdGEtPm9iamVjdF90YWJsZSArIGk7CisJCWlmIChvYmplY3QtPnR5cGUgPT0gdHlwZSkKKwkJCXJldHVybiBvYmplY3Q7CisJfQorCisJZGV2X2VycigmZGF0YS0+Y2xpZW50LT5kZXYsICJJbnZhbGlkIG9iamVjdCB0eXBlXG4iKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBxdDYwMjI0MF9yZWFkX21lc3NhZ2Uoc3RydWN0IHF0NjAyMjQwX2RhdGEgKmRhdGEsCisJCQkJIHN0cnVjdCBxdDYwMjI0MF9tZXNzYWdlICptZXNzYWdlKQoreworCXN0cnVjdCBxdDYwMjI0MF9vYmplY3QgKm9iamVjdDsKKwl1MTYgcmVnOworCisJb2JqZWN0ID0gcXQ2MDIyNDBfZ2V0X29iamVjdChkYXRhLCBRVDYwMjI0MF9HRU5fTUVTU0FHRSk7CisJaWYgKCFvYmplY3QpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVnID0gb2JqZWN0LT5zdGFydF9hZGRyZXNzOworCXJldHVybiBfX3F0NjAyMjQwX3JlYWRfcmVnKGRhdGEtPmNsaWVudCwgcmVnLAorCQkJc2l6ZW9mKHN0cnVjdCBxdDYwMjI0MF9tZXNzYWdlKSwgbWVzc2FnZSk7Cit9CisKK3N0YXRpYyBpbnQgcXQ2MDIyNDBfcmVhZF9vYmplY3Qoc3RydWN0IHF0NjAyMjQwX2RhdGEgKmRhdGEsCisJCQkJdTggdHlwZSwgdTggb2Zmc2V0LCB1OCAqdmFsKQoreworCXN0cnVjdCBxdDYwMjI0MF9vYmplY3QgKm9iamVjdDsKKwl1MTYgcmVnOworCisJb2JqZWN0ID0gcXQ2MDIyNDBfZ2V0X29iamVjdChkYXRhLCB0eXBlKTsKKwlpZiAoIW9iamVjdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZWcgPSBvYmplY3QtPnN0YXJ0X2FkZHJlc3M7CisJcmV0dXJuIF9fcXQ2MDIyNDBfcmVhZF9yZWcoZGF0YS0+Y2xpZW50LCByZWcgKyBvZmZzZXQsIDEsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgcXQ2MDIyNDBfd3JpdGVfb2JqZWN0KHN0cnVjdCBxdDYwMjI0MF9kYXRhICpkYXRhLAorCQkJCSB1OCB0eXBlLCB1OCBvZmZzZXQsIHU4IHZhbCkKK3sKKwlzdHJ1Y3QgcXQ2MDIyNDBfb2JqZWN0ICpvYmplY3Q7CisJdTE2IHJlZzsKKworCW9iamVjdCA9IHF0NjAyMjQwX2dldF9vYmplY3QoZGF0YSwgdHlwZSk7CisJaWYgKCFvYmplY3QpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVnID0gb2JqZWN0LT5zdGFydF9hZGRyZXNzOworCXJldHVybiBxdDYwMjI0MF93cml0ZV9yZWcoZGF0YS0+Y2xpZW50LCByZWcgKyBvZmZzZXQsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHF0NjAyMjQwX2lucHV0X3JlcG9ydChzdHJ1Y3QgcXQ2MDIyNDBfZGF0YSAqZGF0YSwgaW50IHNpbmdsZV9pZCkKK3sKKwlzdHJ1Y3QgcXQ2MDIyNDBfZmluZ2VyICpmaW5nZXIgPSBkYXRhLT5maW5nZXI7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0gZGF0YS0+aW5wdXRfZGV2OworCWludCBzdGF0dXMgPSBmaW5nZXJbc2luZ2xlX2lkXS5zdGF0dXM7CisJaW50IGZpbmdlcl9udW0gPSAwOworCWludCBpZDsKKworCWZvciAoaWQgPSAwOyBpZCA8IFFUNjAyMjQwX01BWF9GSU5HRVI7IGlkKyspIHsKKwkJaWYgKCFmaW5nZXJbaWRdLnN0YXR1cykKKwkJCWNvbnRpbnVlOworCisJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRfZGV2LCBBQlNfTVRfVE9VQ0hfTUFKT1IsCisJCQkJZmluZ2VyW2lkXS5zdGF0dXMgIT0gUVQ2MDIyNDBfUkVMRUFTRSA/CisJCQkJZmluZ2VyW2lkXS5hcmVhIDogMCk7CisJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRfZGV2LCBBQlNfTVRfUE9TSVRJT05fWCwKKwkJCQlmaW5nZXJbaWRdLngpOworCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0X2RldiwgQUJTX01UX1BPU0lUSU9OX1ksCisJCQkJZmluZ2VyW2lkXS55KTsKKwkJaW5wdXRfbXRfc3luYyhpbnB1dF9kZXYpOworCisJCWlmIChmaW5nZXJbaWRdLnN0YXR1cyA9PSBRVDYwMjI0MF9SRUxFQVNFKQorCQkJZmluZ2VyW2lkXS5zdGF0dXMgPSAwOworCQllbHNlCisJCQlmaW5nZXJfbnVtKys7CisJfQorCisJaW5wdXRfcmVwb3J0X2tleShpbnB1dF9kZXYsIEJUTl9UT1VDSCwgZmluZ2VyX251bSA+IDApOworCisJaWYgKHN0YXR1cyAhPSBRVDYwMjI0MF9SRUxFQVNFKSB7CisJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRfZGV2LCBBQlNfWCwgZmluZ2VyW3NpbmdsZV9pZF0ueCk7CisJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRfZGV2LCBBQlNfWSwgZmluZ2VyW3NpbmdsZV9pZF0ueSk7CisJfQorCisJaW5wdXRfc3luYyhpbnB1dF9kZXYpOworfQorCitzdGF0aWMgdm9pZCBxdDYwMjI0MF9pbnB1dF90b3VjaGV2ZW50KHN0cnVjdCBxdDYwMjI0MF9kYXRhICpkYXRhLAorCQkJCSAgICAgIHN0cnVjdCBxdDYwMjI0MF9tZXNzYWdlICptZXNzYWdlLCBpbnQgaWQpCit7CisJc3RydWN0IHF0NjAyMjQwX2ZpbmdlciAqZmluZ2VyID0gZGF0YS0+ZmluZ2VyOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkYXRhLT5jbGllbnQtPmRldjsKKwl1OCBzdGF0dXMgPSBtZXNzYWdlLT5tZXNzYWdlWzBdOworCWludCB4OworCWludCB5OworCWludCBhcmVhOworCisJLyogQ2hlY2sgdGhlIHRvdWNoIGlzIHByZXNlbnQgb24gdGhlIHNjcmVlbiAqLworCWlmICghKHN0YXR1cyAmIFFUNjAyMjQwX0RFVEVDVCkpIHsKKwkJaWYgKHN0YXR1cyAmIFFUNjAyMjQwX1JFTEVBU0UpIHsKKwkJCWRldl9kYmcoZGV2LCAiWyVkXSByZWxlYXNlZFxuIiwgaWQpOworCisJCQlmaW5nZXJbaWRdLnN0YXR1cyA9IFFUNjAyMjQwX1JFTEVBU0U7CisJCQlxdDYwMjI0MF9pbnB1dF9yZXBvcnQoZGF0YSwgaWQpOworCQl9CisJCXJldHVybjsKKwl9CisKKwkvKiBDaGVjayBvbmx5IEFNUCBkZXRlY3Rpb24gKi8KKwlpZiAoIShzdGF0dXMgJiAoUVQ2MDIyNDBfUFJFU1MgfCBRVDYwMjI0MF9NT1ZFKSkpCisJCXJldHVybjsKKworCXggPSAobWVzc2FnZS0+bWVzc2FnZVsxXSA8PCAyKSB8ICgobWVzc2FnZS0+bWVzc2FnZVszXSAmIH4weDNmKSA+PiA2KTsKKwl5ID0gKG1lc3NhZ2UtPm1lc3NhZ2VbMl0gPDwgMikgfCAoKG1lc3NhZ2UtPm1lc3NhZ2VbM10gJiB+MHhmMykgPj4gMik7CisJYXJlYSA9IG1lc3NhZ2UtPm1lc3NhZ2VbNF07CisKKwlkZXZfZGJnKGRldiwgIlslZF0gJXMgeDogJWQsIHk6ICVkLCBhcmVhOiAlZFxuIiwgaWQsCisJCXN0YXR1cyAmIFFUNjAyMjQwX01PVkUgPyAibW92ZWQiIDogInByZXNzZWQiLAorCQl4LCB5LCBhcmVhKTsKKworCWZpbmdlcltpZF0uc3RhdHVzID0gc3RhdHVzICYgUVQ2MDIyNDBfTU9WRSA/CisJCQkJUVQ2MDIyNDBfTU9WRSA6IFFUNjAyMjQwX1BSRVNTOworCWZpbmdlcltpZF0ueCA9IHg7CisJZmluZ2VyW2lkXS55ID0geTsKKwlmaW5nZXJbaWRdLmFyZWEgPSBhcmVhOworCisJcXQ2MDIyNDBfaW5wdXRfcmVwb3J0KGRhdGEsIGlkKTsKK30KKworc3RhdGljIGlycXJldHVybl90IHF0NjAyMjQwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHF0NjAyMjQwX2RhdGEgKmRhdGEgPSBkZXZfaWQ7CisJc3RydWN0IHF0NjAyMjQwX21lc3NhZ2UgbWVzc2FnZTsKKwlzdHJ1Y3QgcXQ2MDIyNDBfb2JqZWN0ICpvYmplY3Q7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmNsaWVudC0+ZGV2OworCWludCBpZDsKKwl1OCByZXBvcnRpZDsKKwl1OCBtYXhfcmVwb3J0aWQ7CisJdTggbWluX3JlcG9ydGlkOworCisJZG8geworCQlpZiAocXQ2MDIyNDBfcmVhZF9tZXNzYWdlKGRhdGEsICZtZXNzYWdlKSkgeworCQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVhZCBtZXNzYWdlXG4iKTsKKwkJCWdvdG8gZW5kOworCQl9CisKKwkJcmVwb3J0aWQgPSBtZXNzYWdlLnJlcG9ydGlkOworCisJCS8qIHdoZXRoZXIgcmVwb3J0aWQgaXMgdGhpbmcgb2YgUVQ2MDIyNDBfVE9VQ0hfTVVMVEkgKi8KKwkJb2JqZWN0ID0gcXQ2MDIyNDBfZ2V0X29iamVjdChkYXRhLCBRVDYwMjI0MF9UT1VDSF9NVUxUSSk7CisJCWlmICghb2JqZWN0KQorCQkJZ290byBlbmQ7CisKKwkJbWF4X3JlcG9ydGlkID0gb2JqZWN0LT5tYXhfcmVwb3J0aWQ7CisJCW1pbl9yZXBvcnRpZCA9IG1heF9yZXBvcnRpZCAtIG9iamVjdC0+bnVtX3JlcG9ydF9pZHMgKyAxOworCQlpZCA9IHJlcG9ydGlkIC0gbWluX3JlcG9ydGlkOworCisJCWlmIChyZXBvcnRpZCA+PSBtaW5fcmVwb3J0aWQgJiYgcmVwb3J0aWQgPD0gbWF4X3JlcG9ydGlkKQorCQkJcXQ2MDIyNDBfaW5wdXRfdG91Y2hldmVudChkYXRhLCAmbWVzc2FnZSwgaWQpOworCQllbHNlCisJCQlxdDYwMjI0MF9kdW1wX21lc3NhZ2UoZGV2LCAmbWVzc2FnZSk7CisJfSB3aGlsZSAocmVwb3J0aWQgIT0gMHhmZik7CisKK2VuZDoKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgcXQ2MDIyNDBfY2hlY2tfcmVnX2luaXQoc3RydWN0IHF0NjAyMjQwX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IHF0NjAyMjQwX29iamVjdCAqb2JqZWN0OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkYXRhLT5jbGllbnQtPmRldjsKKwlpbnQgaW5kZXggPSAwOworCWludCBpLCBqOworCXU4IHZlcnNpb24gPSBkYXRhLT5pbmZvLnZlcnNpb247CisJdTggKmluaXRfdmFsczsKKworCXN3aXRjaCAodmVyc2lvbikgeworCWNhc2UgUVQ2MDIyNDBfVkVSXzIwOgorCQlpbml0X3ZhbHMgPSAodTggKilpbml0X3ZhbHNfdmVyXzIwOworCQlicmVhazsKKwljYXNlIFFUNjAyMjQwX1ZFUl8yMToKKwkJaW5pdF92YWxzID0gKHU4ICopaW5pdF92YWxzX3Zlcl8yMTsKKwkJYnJlYWs7CisJY2FzZSBRVDYwMjI0MF9WRVJfMjI6CisJCWluaXRfdmFscyA9ICh1OCAqKWluaXRfdmFsc192ZXJfMjI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LCAiRmlybXdhcmUgdmVyc2lvbiAlZCBkb2Vzbid0IHN1cHBvcnRcbiIsIHZlcnNpb24pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+aW5mby5vYmplY3RfbnVtOyBpKyspIHsKKwkJb2JqZWN0ID0gZGF0YS0+b2JqZWN0X3RhYmxlICsgaTsKKworCQlpZiAoIXF0NjAyMjQwX29iamVjdF93cml0YWJsZShvYmplY3QtPnR5cGUpKQorCQkJY29udGludWU7CisKKwkJZm9yIChqID0gMDsgaiA8IG9iamVjdC0+c2l6ZSArIDE7IGorKykKKwkJCXF0NjAyMjQwX3dyaXRlX29iamVjdChkYXRhLCBvYmplY3QtPnR5cGUsIGosCisJCQkJCWluaXRfdmFsc1tpbmRleCArIGpdKTsKKworCQlpbmRleCArPSBvYmplY3QtPnNpemUgKyAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHF0NjAyMjQwX2NoZWNrX21hdHJpeF9zaXplKHN0cnVjdCBxdDYwMjI0MF9kYXRhICpkYXRhKQoreworCWNvbnN0IHN0cnVjdCBxdDYwMjI0MF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRhdGEtPnBkYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkYXRhLT5jbGllbnQtPmRldjsKKwlpbnQgbW9kZSA9IC0xOworCWludCBlcnJvcjsKKwl1OCB2YWw7CisKKwlkZXZfZGJnKGRldiwgIk51bWJlciBvZiBYIGxpbmVzOiAlZFxuIiwgcGRhdGEtPnhfbGluZSk7CisJZGV2X2RiZyhkZXYsICJOdW1iZXIgb2YgWSBsaW5lczogJWRcbiIsIHBkYXRhLT55X2xpbmUpOworCisJc3dpdGNoIChwZGF0YS0+eF9saW5lKSB7CisJY2FzZSAwIC4uLiAxNToKKwkJaWYgKHBkYXRhLT55X2xpbmUgPD0gMTQpCisJCQltb2RlID0gMDsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJaWYgKHBkYXRhLT55X2xpbmUgPD0gMTIpCisJCQltb2RlID0gMTsKKwkJaWYgKHBkYXRhLT55X2xpbmUgPT0gMTMgfHwgcGRhdGEtPnlfbGluZSA9PSAxNCkKKwkJCW1vZGUgPSAwOworCQlicmVhazsKKwljYXNlIDE3OgorCQlpZiAocGRhdGEtPnlfbGluZSA8PSAxMSkKKwkJCW1vZGUgPSAyOworCQlpZiAocGRhdGEtPnlfbGluZSA9PSAxMiB8fCBwZGF0YS0+eV9saW5lID09IDEzKQorCQkJbW9kZSA9IDE7CisJCWJyZWFrOworCWNhc2UgMTg6CisJCWlmIChwZGF0YS0+eV9saW5lIDw9IDEwKQorCQkJbW9kZSA9IDM7CisJCWlmIChwZGF0YS0+eV9saW5lID09IDExIHx8IHBkYXRhLT55X2xpbmUgPT0gMTIpCisJCQltb2RlID0gMjsKKwkJYnJlYWs7CisJY2FzZSAxOToKKwkJaWYgKHBkYXRhLT55X2xpbmUgPD0gOSkKKwkJCW1vZGUgPSA0OworCQlpZiAocGRhdGEtPnlfbGluZSA9PSAxMCB8fCBwZGF0YS0+eV9saW5lID09IDExKQorCQkJbW9kZSA9IDM7CisJCWJyZWFrOworCWNhc2UgMjA6CisJCW1vZGUgPSA0OworCX0KKworCWlmIChtb2RlIDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkludmFsaWQgWC9ZIGxpbmVzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZXJyb3IgPSBxdDYwMjI0MF9yZWFkX29iamVjdChkYXRhLCBRVDYwMjI0MF9TUFRfQ1RFQ09ORklHLAorCQkJCVFUNjAyMjQwX0NURV9NT0RFLCAmdmFsKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWlmIChtb2RlID09IHZhbCkKKwkJcmV0dXJuIDA7CisKKwkvKiBDaGFuZ2UgdGhlIENURSBjb25maWd1cmF0aW9uICovCisJcXQ2MDIyNDBfd3JpdGVfb2JqZWN0KGRhdGEsIFFUNjAyMjQwX1NQVF9DVEVDT05GSUcsCisJCQlRVDYwMjI0MF9DVEVfQ1RSTCwgMSk7CisJcXQ2MDIyNDBfd3JpdGVfb2JqZWN0KGRhdGEsIFFUNjAyMjQwX1NQVF9DVEVDT05GSUcsCisJCQlRVDYwMjI0MF9DVEVfTU9ERSwgbW9kZSk7CisJcXQ2MDIyNDBfd3JpdGVfb2JqZWN0KGRhdGEsIFFUNjAyMjQwX1NQVF9DVEVDT05GSUcsCisJCQlRVDYwMjI0MF9DVEVfQ1RSTCwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxdDYwMjI0MF9tYWtlX2hpZ2hjaGcoc3RydWN0IHF0NjAyMjQwX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmNsaWVudC0+ZGV2OworCWludCBjb3VudCA9IDEwOworCWludCBlcnJvcjsKKwl1OCB2YWw7CisKKwkvKiBSZWFkIGR1bW15IG1lc3NhZ2UgdG8gbWFrZSBoaWdoIENIRyBwaW4gKi8KKwlkbyB7CisJCWVycm9yID0gcXQ2MDIyNDBfcmVhZF9vYmplY3QoZGF0YSwgUVQ2MDIyNDBfR0VOX01FU1NBR0UsIDAsICZ2YWwpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisJfSB3aGlsZSAoKHZhbCAhPSAweGZmKSAmJiAtLWNvdW50KTsKKworCWlmICghY291bnQpIHsKKwkJZGV2X2VycihkZXYsICJDSEcgcGluIGlzbid0IGNsZWFyZWRcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBxdDYwMjI0MF9oYW5kbGVfcGRhdGEoc3RydWN0IHF0NjAyMjQwX2RhdGEgKmRhdGEpCit7CisJY29uc3Qgc3RydWN0IHF0NjAyMjQwX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGF0YS0+cGRhdGE7CisJdTggdm9sdGFnZTsKKworCS8qIFNldCB0b3VjaHNjcmVlbiBsaW5lcyAqLworCXF0NjAyMjQwX3dyaXRlX29iamVjdChkYXRhLCBRVDYwMjI0MF9UT1VDSF9NVUxUSSwgUVQ2MDIyNDBfVE9VQ0hfWFNJWkUsCisJCQlwZGF0YS0+eF9saW5lKTsKKwlxdDYwMjI0MF93cml0ZV9vYmplY3QoZGF0YSwgUVQ2MDIyNDBfVE9VQ0hfTVVMVEksIFFUNjAyMjQwX1RPVUNIX1lTSVpFLAorCQkJcGRhdGEtPnlfbGluZSk7CisKKwkvKiBTZXQgdG91Y2hzY3JlZW4gb3JpZW50ICovCisJcXQ2MDIyNDBfd3JpdGVfb2JqZWN0KGRhdGEsIFFUNjAyMjQwX1RPVUNIX01VTFRJLCBRVDYwMjI0MF9UT1VDSF9PUklFTlQsCisJCQlwZGF0YS0+b3JpZW50KTsKKworCS8qIFNldCB0b3VjaHNjcmVlbiBidXJzdCBsZW5ndGggKi8KKwlxdDYwMjI0MF93cml0ZV9vYmplY3QoZGF0YSwgUVQ2MDIyNDBfVE9VQ0hfTVVMVEksCisJCQlRVDYwMjI0MF9UT1VDSF9CTEVOLCBwZGF0YS0+Ymxlbik7CisKKwkvKiBTZXQgdG91Y2hzY3JlZW4gdGhyZXNob2xkICovCisJcXQ2MDIyNDBfd3JpdGVfb2JqZWN0KGRhdGEsIFFUNjAyMjQwX1RPVUNIX01VTFRJLAorCQkJUVQ2MDIyNDBfVE9VQ0hfVENIVEhSLCBwZGF0YS0+dGhyZXNob2xkKTsKKworCS8qIFNldCB0b3VjaHNjcmVlbiByZXNvbHV0aW9uICovCisJcXQ2MDIyNDBfd3JpdGVfb2JqZWN0KGRhdGEsIFFUNjAyMjQwX1RPVUNIX01VTFRJLAorCQkJUVQ2MDIyNDBfVE9VQ0hfWFJBTkdFX0xTQiwgKHBkYXRhLT54X3NpemUgLSAxKSAmIDB4ZmYpOworCXF0NjAyMjQwX3dyaXRlX29iamVjdChkYXRhLCBRVDYwMjI0MF9UT1VDSF9NVUxUSSwKKwkJCVFUNjAyMjQwX1RPVUNIX1hSQU5HRV9NU0IsIChwZGF0YS0+eF9zaXplIC0gMSkgPj4gOCk7CisJcXQ2MDIyNDBfd3JpdGVfb2JqZWN0KGRhdGEsIFFUNjAyMjQwX1RPVUNIX01VTFRJLAorCQkJUVQ2MDIyNDBfVE9VQ0hfWVJBTkdFX0xTQiwgKHBkYXRhLT55X3NpemUgLSAxKSAmIDB4ZmYpOworCXF0NjAyMjQwX3dyaXRlX29iamVjdChkYXRhLCBRVDYwMjI0MF9UT1VDSF9NVUxUSSwKKwkJCVFUNjAyMjQwX1RPVUNIX1lSQU5HRV9NU0IsIChwZGF0YS0+eV9zaXplIC0gMSkgPj4gOCk7CisKKwkvKiBTZXQgdG91Y2hzY3JlZW4gdm9sdGFnZSAqLworCWlmIChkYXRhLT5pbmZvLnZlcnNpb24gPj0gUVQ2MDIyNDBfVkVSXzIxICYmIHBkYXRhLT52b2x0YWdlKSB7CisJCWlmIChwZGF0YS0+dm9sdGFnZSA8IFFUNjAyMjQwX1ZPTFRBR0VfREVGQVVMVCkgeworCQkJdm9sdGFnZSA9IChRVDYwMjI0MF9WT0xUQUdFX0RFRkFVTFQgLSBwZGF0YS0+dm9sdGFnZSkgLworCQkJCVFUNjAyMjQwX1ZPTFRBR0VfU1RFUDsKKwkJCXZvbHRhZ2UgPSAweGZmIC0gdm9sdGFnZSArIDE7CisJCX0gZWxzZQorCQkJdm9sdGFnZSA9IChwZGF0YS0+dm9sdGFnZSAtIFFUNjAyMjQwX1ZPTFRBR0VfREVGQVVMVCkgLworCQkJCVFUNjAyMjQwX1ZPTFRBR0VfU1RFUDsKKworCQlxdDYwMjI0MF93cml0ZV9vYmplY3QoZGF0YSwgUVQ2MDIyNDBfU1BUX0NURUNPTkZJRywKKwkJCQlRVDYwMjI0MF9DVEVfVk9MVEFHRSwgdm9sdGFnZSk7CisJfQorfQorCitzdGF0aWMgaW50IHF0NjAyMjQwX2dldF9pbmZvKHN0cnVjdCBxdDYwMjI0MF9kYXRhICpkYXRhKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CisJc3RydWN0IHF0NjAyMjQwX2luZm8gKmluZm8gPSAmZGF0YS0+aW5mbzsKKwlpbnQgZXJyb3I7CisJdTggdmFsOworCisJZXJyb3IgPSBxdDYwMjI0MF9yZWFkX3JlZyhjbGllbnQsIFFUNjAyMjQwX0ZBTUlMWV9JRCwgJnZhbCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisJaW5mby0+ZmFtaWx5X2lkID0gdmFsOworCisJZXJyb3IgPSBxdDYwMjI0MF9yZWFkX3JlZyhjbGllbnQsIFFUNjAyMjQwX1ZBUklBTlRfSUQsICZ2YWwpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCWluZm8tPnZhcmlhbnRfaWQgPSB2YWw7CisKKwllcnJvciA9IHF0NjAyMjQwX3JlYWRfcmVnKGNsaWVudCwgUVQ2MDIyNDBfVkVSU0lPTiwgJnZhbCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisJaW5mby0+dmVyc2lvbiA9IHZhbDsKKworCWVycm9yID0gcXQ2MDIyNDBfcmVhZF9yZWcoY2xpZW50LCBRVDYwMjI0MF9CVUlMRCwgJnZhbCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisJaW5mby0+YnVpbGQgPSB2YWw7CisKKwllcnJvciA9IHF0NjAyMjQwX3JlYWRfcmVnKGNsaWVudCwgUVQ2MDIyNDBfT0JKRUNUX05VTSwgJnZhbCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisJaW5mby0+b2JqZWN0X251bSA9IHZhbDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHF0NjAyMjQwX2dldF9vYmplY3RfdGFibGUoc3RydWN0IHF0NjAyMjQwX2RhdGEgKmRhdGEpCit7CisJaW50IGVycm9yOworCWludCBpOworCXUxNiByZWc7CisJdTggcmVwb3J0aWQgPSAwOworCXU4IGJ1ZltRVDYwMjI0MF9PQkpFQ1RfU0laRV07CisKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+aW5mby5vYmplY3RfbnVtOyBpKyspIHsKKwkJc3RydWN0IHF0NjAyMjQwX29iamVjdCAqb2JqZWN0ID0gZGF0YS0+b2JqZWN0X3RhYmxlICsgaTsKKworCQlyZWcgPSBRVDYwMjI0MF9PQkpFQ1RfU1RBUlQgKyBRVDYwMjI0MF9PQkpFQ1RfU0laRSAqIGk7CisJCWVycm9yID0gcXQ2MDIyNDBfcmVhZF9vYmplY3RfdGFibGUoZGF0YS0+Y2xpZW50LCByZWcsIGJ1Zik7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKworCQlvYmplY3QtPnR5cGUgPSBidWZbMF07CisJCW9iamVjdC0+c3RhcnRfYWRkcmVzcyA9IChidWZbMl0gPDwgOCkgfCBidWZbMV07CisJCW9iamVjdC0+c2l6ZSA9IGJ1ZlszXTsKKwkJb2JqZWN0LT5pbnN0YW5jZXMgPSBidWZbNF07CisJCW9iamVjdC0+bnVtX3JlcG9ydF9pZHMgPSBidWZbNV07CisKKwkJaWYgKG9iamVjdC0+bnVtX3JlcG9ydF9pZHMpIHsKKwkJCXJlcG9ydGlkICs9IG9iamVjdC0+bnVtX3JlcG9ydF9pZHMgKgorCQkJCQkob2JqZWN0LT5pbnN0YW5jZXMgKyAxKTsKKwkJCW9iamVjdC0+bWF4X3JlcG9ydGlkID0gcmVwb3J0aWQ7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxdDYwMjI0MF9pbml0aWFsaXplKHN0cnVjdCBxdDYwMjI0MF9kYXRhICpkYXRhKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CisJc3RydWN0IHF0NjAyMjQwX2luZm8gKmluZm8gPSAmZGF0YS0+aW5mbzsKKwlpbnQgZXJyb3I7CisJdTggdmFsOworCisJZXJyb3IgPSBxdDYwMjI0MF9nZXRfaW5mbyhkYXRhKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWRhdGEtPm9iamVjdF90YWJsZSA9IGtjYWxsb2MoaW5mby0+b2JqZWN0X251bSwKKwkJCQkgICAgIHNpemVvZihzdHJ1Y3QgcXQ2MDIyNDBfZGF0YSksCisJCQkJICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEtPm9iamVjdF90YWJsZSkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBHZXQgb2JqZWN0IHRhYmxlIGluZm9ybWF0aW9uICovCisJZXJyb3IgPSBxdDYwMjI0MF9nZXRfb2JqZWN0X3RhYmxlKGRhdGEpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJLyogQ2hlY2sgcmVnaXN0ZXIgaW5pdCB2YWx1ZXMgKi8KKwllcnJvciA9IHF0NjAyMjQwX2NoZWNrX3JlZ19pbml0KGRhdGEpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJLyogQ2hlY2sgWC9ZIG1hdHJpeCBzaXplICovCisJZXJyb3IgPSBxdDYwMjI0MF9jaGVja19tYXRyaXhfc2l6ZShkYXRhKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWVycm9yID0gcXQ2MDIyNDBfbWFrZV9oaWdoY2hnKGRhdGEpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJcXQ2MDIyNDBfaGFuZGxlX3BkYXRhKGRhdGEpOworCisJLyogQmFja3VwIHRvIG1lbW9yeSAqLworCXF0NjAyMjQwX3dyaXRlX29iamVjdChkYXRhLCBRVDYwMjI0MF9HRU5fQ09NTUFORCwKKwkJCVFUNjAyMjQwX0NPTU1BTkRfQkFDS1VQTlYsCisJCQlRVDYwMjI0MF9CQUNLVVBfVkFMVUUpOworCW1zbGVlcChRVDYwMjI0MF9CQUNLVVBfVElNRSk7CisKKwkvKiBTb2Z0IHJlc2V0ICovCisJcXQ2MDIyNDBfd3JpdGVfb2JqZWN0KGRhdGEsIFFUNjAyMjQwX0dFTl9DT01NQU5ELAorCQkJUVQ2MDIyNDBfQ09NTUFORF9SRVNFVCwgMSk7CisJbXNsZWVwKFFUNjAyMjQwX1JFU0VUX1RJTUUpOworCisJLyogVXBkYXRlIG1hdHJpeCBzaXplIGF0IGluZm8gc3RydWN0ICovCisJZXJyb3IgPSBxdDYwMjI0MF9yZWFkX3JlZyhjbGllbnQsIFFUNjAyMjQwX01BVFJJWF9YX1NJWkUsICZ2YWwpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCWluZm8tPm1hdHJpeF94c2l6ZSA9IHZhbDsKKworCWVycm9yID0gcXQ2MDIyNDBfcmVhZF9yZWcoY2xpZW50LCBRVDYwMjI0MF9NQVRSSVhfWV9TSVpFLCAmdmFsKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKwlpbmZvLT5tYXRyaXhfeXNpemUgPSB2YWw7CisKKwlkZXZfaW5mbygmY2xpZW50LT5kZXYsCisJCQkiRmFtaWx5IElEOiAlZCBWYXJpYW50IElEOiAlZCBWZXJzaW9uOiAlZCBCdWlsZDogJWRcbiIsCisJCQlpbmZvLT5mYW1pbHlfaWQsIGluZm8tPnZhcmlhbnRfaWQsIGluZm8tPnZlcnNpb24sCisJCQlpbmZvLT5idWlsZCk7CisKKwlkZXZfaW5mbygmY2xpZW50LT5kZXYsCisJCQkiTWF0cml4IFggU2l6ZTogJWQgTWF0cml4IFkgU2l6ZTogJWQgT2JqZWN0IE51bTogJWRcbiIsCisJCQlpbmZvLT5tYXRyaXhfeHNpemUsIGluZm8tPm1hdHJpeF95c2l6ZSwKKwkJCWluZm8tPm9iamVjdF9udW0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHF0NjAyMjQwX29iamVjdF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcXQ2MDIyNDBfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBxdDYwMjI0MF9vYmplY3QgKm9iamVjdDsKKwlpbnQgY291bnQgPSAwOworCWludCBpLCBqOworCWludCBlcnJvcjsKKwl1OCB2YWw7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+aW5mby5vYmplY3RfbnVtOyBpKyspIHsKKwkJb2JqZWN0ID0gZGF0YS0+b2JqZWN0X3RhYmxlICsgaTsKKworCQljb3VudCArPSBzcHJpbnRmKGJ1ZiArIGNvdW50LAorCQkJCSJPYmplY3QgVGFibGUgRWxlbWVudCAlZChUeXBlICVkKVxuIiwKKwkJCQlpICsgMSwgb2JqZWN0LT50eXBlKTsKKworCQlpZiAoIXF0NjAyMjQwX29iamVjdF9yZWFkYWJsZShvYmplY3QtPnR5cGUpKSB7CisJCQljb3VudCArPSBzcHJpbnRmKGJ1ZiArIGNvdW50LCAiXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZm9yIChqID0gMDsgaiA8IG9iamVjdC0+c2l6ZSArIDE7IGorKykgeworCQkJZXJyb3IgPSBxdDYwMjI0MF9yZWFkX29iamVjdChkYXRhLAorCQkJCQkJb2JqZWN0LT50eXBlLCBqLCAmdmFsKTsKKwkJCWlmIChlcnJvcikKKwkJCQlyZXR1cm4gZXJyb3I7CisKKwkJCWNvdW50ICs9IHNwcmludGYoYnVmICsgY291bnQsCisJCQkJCSIgIEJ5dGUgJWQ6IDB4JXggKCVkKVxuIiwgaiwgdmFsLCB2YWwpOworCQl9CisKKwkJY291bnQgKz0gc3ByaW50ZihidWYgKyBjb3VudCwgIlxuIik7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IHF0NjAyMjQwX2xvYWRfZncoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpmbikKK3sKKwlzdHJ1Y3QgcXQ2MDIyNDBfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IE5VTEw7CisJdW5zaWduZWQgaW50IGZyYW1lX3NpemU7CisJdW5zaWduZWQgaW50IHBvcyA9IDA7CisJaW50IHJldDsKKworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmbiwgZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIG9wZW4gZmlybXdhcmUgJXNcbiIsIGZuKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBDaGFuZ2UgdG8gdGhlIGJvb3Rsb2FkZXIgbW9kZSAqLworCXF0NjAyMjQwX3dyaXRlX29iamVjdChkYXRhLCBRVDYwMjI0MF9HRU5fQ09NTUFORCwKKwkJCVFUNjAyMjQwX0NPTU1BTkRfUkVTRVQsIFFUNjAyMjQwX0JPT1RfVkFMVUUpOworCW1zbGVlcChRVDYwMjI0MF9SRVNFVF9USU1FKTsKKworCS8qIENoYW5nZSB0byBzbGF2ZSBhZGRyZXNzIG9mIGJvb3Rsb2FkZXIgKi8KKwlpZiAoY2xpZW50LT5hZGRyID09IFFUNjAyMjQwX0FQUF9MT1cpCisJCWNsaWVudC0+YWRkciA9IFFUNjAyMjQwX0JPT1RfTE9XOworCWVsc2UKKwkJY2xpZW50LT5hZGRyID0gUVQ2MDIyNDBfQk9PVF9ISUdIOworCisJcmV0ID0gcXQ2MDIyNDBfY2hlY2tfYm9vdGxvYWRlcihjbGllbnQsIFFUNjAyMjQwX1dBSVRJTkdfQk9PVExPQURfQ01EKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCS8qIFVubG9jayBib290bG9hZGVyICovCisJcXQ2MDIyNDBfdW5sb2NrX2Jvb3Rsb2FkZXIoY2xpZW50KTsKKworCXdoaWxlIChwb3MgPCBmdy0+c2l6ZSkgeworCQlyZXQgPSBxdDYwMjI0MF9jaGVja19ib290bG9hZGVyKGNsaWVudCwKKwkJCQkJCVFUNjAyMjQwX1dBSVRJTkdfRlJBTUVfREFUQSk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKworCQlmcmFtZV9zaXplID0gKCgqKGZ3LT5kYXRhICsgcG9zKSA8PCA4KSB8ICooZnctPmRhdGEgKyBwb3MgKyAxKSk7CisKKwkJLyogV2Ugc2hvdWxkIGFkZCAyIGF0IGZyYW1lIHNpemUgYXMgdGhlIHRoZSBmaXJtd2FyZSBkYXRhIGlzIG5vdAorCQkgKiBpbmNsdWRlZCB0aGUgQ1JDIGJ5dGVzLgorCQkgKi8KKwkJZnJhbWVfc2l6ZSArPSAyOworCisJCS8qIFdyaXRlIG9uZSBmcmFtZSB0byBkZXZpY2UgKi8KKwkJcXQ2MDIyNDBfZndfd3JpdGUoY2xpZW50LCBmdy0+ZGF0YSArIHBvcywgZnJhbWVfc2l6ZSk7CisKKwkJcmV0ID0gcXQ2MDIyNDBfY2hlY2tfYm9vdGxvYWRlcihjbGllbnQsCisJCQkJCQlRVDYwMjI0MF9GUkFNRV9DUkNfUEFTUyk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKworCQlwb3MgKz0gZnJhbWVfc2l6ZTsKKworCQlkZXZfZGJnKGRldiwgIlVwZGF0ZWQgJWQgYnl0ZXMgLyAlemQgYnl0ZXNcbiIsIHBvcywgZnctPnNpemUpOworCX0KKworb3V0OgorCXJlbGVhc2VfZmlybXdhcmUoZncpOworCisJLyogQ2hhbmdlIHRvIHNsYXZlIGFkZHJlc3Mgb2YgYXBwbGljYXRpb24gKi8KKwlpZiAoY2xpZW50LT5hZGRyID09IFFUNjAyMjQwX0JPT1RfTE9XKQorCQljbGllbnQtPmFkZHIgPSBRVDYwMjI0MF9BUFBfTE9XOworCWVsc2UKKwkJY2xpZW50LT5hZGRyID0gUVQ2MDIyNDBfQVBQX0hJR0g7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBxdDYwMjI0MF91cGRhdGVfZndfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHF0NjAyMjQwX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBpbnQgdmVyc2lvbjsKKwlpbnQgZXJyb3I7CisKKwlpZiAoc3NjYW5mKGJ1ZiwgIiV1IiwgJnZlcnNpb24pICE9IDEpIHsKKwkJZGV2X2VycihkZXYsICJJbnZhbGlkIHZhbHVlc1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChkYXRhLT5pbmZvLnZlcnNpb24gPCBRVDYwMjI0MF9WRVJfMjEgfHwgdmVyc2lvbiA8IFFUNjAyMjQwX1ZFUl8yMSkgeworCQlkZXZfZXJyKGRldiwgIkZXIHVwZGF0ZSBzdXBwb3J0ZWQgc3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDIxXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGlzYWJsZV9pcnEoZGF0YS0+aXJxKTsKKworCWVycm9yID0gcXQ2MDIyNDBfbG9hZF9mdyhkZXYsIFFUNjAyMjQwX0ZXX05BTUUpOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKGRldiwgIlRoZSBmaXJtd2FyZSB1cGRhdGUgZmFpbGVkKCVkKVxuIiwgZXJyb3IpOworCQljb3VudCA9IGVycm9yOworCX0gZWxzZSB7CisJCWRldl9kYmcoZGV2LCAiVGhlIGZpcm13YXJlIHVwZGF0ZSBzdWNjZWVkZWRcbiIpOworCisJCS8qIFdhaXQgZm9yIHJlc2V0ICovCisJCW1zbGVlcChRVDYwMjI0MF9GV1JFU0VUX1RJTUUpOworCisJCWtmcmVlKGRhdGEtPm9iamVjdF90YWJsZSk7CisJCWRhdGEtPm9iamVjdF90YWJsZSA9IE5VTEw7CisKKwkJcXQ2MDIyNDBfaW5pdGlhbGl6ZShkYXRhKTsKKwl9CisKKwllbmFibGVfaXJxKGRhdGEtPmlycSk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihvYmplY3QsIDA0NDQsIHF0NjAyMjQwX29iamVjdF9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih1cGRhdGVfZncsIDA2NjQsIE5VTEwsIHF0NjAyMjQwX3VwZGF0ZV9md19zdG9yZSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpxdDYwMjI0MF9hdHRyc1tdID0geworCSZkZXZfYXR0cl9vYmplY3QuYXR0ciwKKwkmZGV2X2F0dHJfdXBkYXRlX2Z3LmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcXQ2MDIyNDBfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBxdDYwMjI0MF9hdHRycywKK307CisKK3N0YXRpYyB2b2lkIHF0NjAyMjQwX3N0YXJ0KHN0cnVjdCBxdDYwMjI0MF9kYXRhICpkYXRhKQoreworCS8qIFRvdWNoIGVuYWJsZSAqLworCXF0NjAyMjQwX3dyaXRlX29iamVjdChkYXRhLAorCQkJUVQ2MDIyNDBfVE9VQ0hfTVVMVEksIFFUNjAyMjQwX1RPVUNIX0NUUkwsIDB4ODMpOworfQorCitzdGF0aWMgdm9pZCBxdDYwMjI0MF9zdG9wKHN0cnVjdCBxdDYwMjI0MF9kYXRhICpkYXRhKQoreworCS8qIFRvdWNoIGRpc2FibGUgKi8KKwlxdDYwMjI0MF93cml0ZV9vYmplY3QoZGF0YSwKKwkJCVFUNjAyMjQwX1RPVUNIX01VTFRJLCBRVDYwMjI0MF9UT1VDSF9DVFJMLCAwKTsKK30KKworc3RhdGljIGludCBxdDYwMjI0MF9pbnB1dF9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgcXQ2MDIyNDBfZGF0YSAqZGF0YSA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisKKwlxdDYwMjI0MF9zdGFydChkYXRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBxdDYwMjI0MF9pbnB1dF9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IHF0NjAyMjQwX2RhdGEgKmRhdGEgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCisJcXQ2MDIyNDBfc3RvcChkYXRhKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgcXQ2MDIyNDBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBxdDYwMjI0MF9kYXRhICpkYXRhOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKKwlpbnQgZXJyb3I7CisKKwlpZiAoIWNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGEpCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBxdDYwMjI0MF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFkYXRhIHx8ICFpbnB1dF9kZXYpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5XG4iKTsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX21lbTsKKwl9CisKKwlpbnB1dF9kZXYtPm5hbWUgPSAiQVQ0MlFUNjAyMjQwL0FUTVhUMjI0IFRvdWNoc2NyZWVuIjsKKwlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSTJDOworCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZjbGllbnQtPmRldjsKKwlpbnB1dF9kZXYtPm9wZW4gPSBxdDYwMjI0MF9pbnB1dF9vcGVuOworCWlucHV0X2Rldi0+Y2xvc2UgPSBxdDYwMjI0MF9pbnB1dF9jbG9zZTsKKworCV9fc2V0X2JpdChFVl9BQlMsIGlucHV0X2Rldi0+ZXZiaXQpOworCV9fc2V0X2JpdChFVl9LRVksIGlucHV0X2Rldi0+ZXZiaXQpOworCV9fc2V0X2JpdChCVE5fVE9VQ0gsIGlucHV0X2Rldi0+a2V5Yml0KTsKKworCS8qIEZvciBzaW5nbGUgdG91Y2ggKi8KKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19YLAorCQkJICAgICAwLCBRVDYwMjI0MF9NQVhfWEMsIDAsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1ksCisJCQkgICAgIDAsIFFUNjAyMjQwX01BWF9ZQywgMCwgMCk7CisKKwkvKiBGb3IgbXVsdGkgdG91Y2ggKi8KKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19NVF9UT1VDSF9NQUpPUiwKKwkJCSAgICAgMCwgUVQ2MDIyNDBfTUFYX0FSRUEsIDAsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX01UX1BPU0lUSU9OX1gsCisJCQkgICAgIDAsIFFUNjAyMjQwX01BWF9YQywgMCwgMCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfTVRfUE9TSVRJT05fWSwKKwkJCSAgICAgMCwgUVQ2MDIyNDBfTUFYX1lDLCAwLCAwKTsKKworCWlucHV0X3NldF9kcnZkYXRhKGlucHV0X2RldiwgZGF0YSk7CisKKwlkYXRhLT5jbGllbnQgPSBjbGllbnQ7CisJZGF0YS0+aW5wdXRfZGV2ID0gaW5wdXRfZGV2OworCWRhdGEtPnBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlkYXRhLT5pcnEgPSBjbGllbnQtPmlycTsKKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhdGEpOworCisJZXJyb3IgPSBxdDYwMjI0MF9pbml0aWFsaXplKGRhdGEpOworCWlmIChlcnJvcikKKwkJZ290byBlcnJfZnJlZV9vYmplY3Q7CisKKwllcnJvciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGNsaWVudC0+aXJxLCBOVUxMLCBxdDYwMjI0MF9pbnRlcnJ1cHQsCisJCQlJUlFGX1RSSUdHRVJfRkFMTElORywgY2xpZW50LT5kZXYuZHJpdmVyLT5uYW1lLCBkYXRhKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgaW50ZXJydXB0XG4iKTsKKwkJZ290byBlcnJfZnJlZV9vYmplY3Q7CisJfQorCisJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXJyX2ZyZWVfaXJxOworCisJZXJyb3IgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZxdDYwMjI0MF9hdHRyX2dyb3VwKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXJyX3VucmVnaXN0ZXJfZGV2aWNlOworCisJcmV0dXJuIDA7CisKK2Vycl91bnJlZ2lzdGVyX2RldmljZToKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShpbnB1dF9kZXYpOworCWlucHV0X2RldiA9IE5VTEw7CitlcnJfZnJlZV9pcnE6CisJZnJlZV9pcnEoY2xpZW50LT5pcnEsIGRhdGEpOworZXJyX2ZyZWVfb2JqZWN0OgorCWtmcmVlKGRhdGEtPm9iamVjdF90YWJsZSk7CitlcnJfZnJlZV9tZW06CisJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKKwlrZnJlZShkYXRhKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHF0NjAyMjQwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBxdDYwMjI0MF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZxdDYwMjI0MF9hdHRyX2dyb3VwKTsKKwlmcmVlX2lycShkYXRhLT5pcnEsIGRhdGEpOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGRhdGEtPmlucHV0X2Rldik7CisJa2ZyZWUoZGF0YS0+b2JqZWN0X3RhYmxlKTsKKwlrZnJlZShkYXRhKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHF0NjAyMjQwX3N1c3BlbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgcG1fbWVzc2FnZV90IG1lc2cpCit7CisJc3RydWN0IHF0NjAyMjQwX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYgPSBkYXRhLT5pbnB1dF9kZXY7CisKKwltdXRleF9sb2NrKCZpbnB1dF9kZXYtPm11dGV4KTsKKworCWlmIChpbnB1dF9kZXYtPnVzZXJzKQorCQlxdDYwMjI0MF9zdG9wKGRhdGEpOworCisJbXV0ZXhfdW5sb2NrKCZpbnB1dF9kZXYtPm11dGV4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHF0NjAyMjQwX3Jlc3VtZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBxdDYwMjI0MF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0gZGF0YS0+aW5wdXRfZGV2OworCisJLyogU29mdCByZXNldCAqLworCXF0NjAyMjQwX3dyaXRlX29iamVjdChkYXRhLCBRVDYwMjI0MF9HRU5fQ09NTUFORCwKKwkJCVFUNjAyMjQwX0NPTU1BTkRfUkVTRVQsIDEpOworCisJbXNsZWVwKFFUNjAyMjQwX1JFU0VUX1RJTUUpOworCisJbXV0ZXhfbG9jaygmaW5wdXRfZGV2LT5tdXRleCk7CisKKwlpZiAoaW5wdXRfZGV2LT51c2VycykKKwkJcXQ2MDIyNDBfc3RhcnQoZGF0YSk7CisKKwltdXRleF91bmxvY2soJmlucHV0X2Rldi0+bXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBxdDYwMjI0MF9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgcXQ2MDIyNDBfcmVzdW1lCQlOVUxMCisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHF0NjAyMjQwX2lkW10gPSB7CisJeyAicXQ2MDIyNDBfdHMiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHF0NjAyMjQwX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHF0NjAyMjQwX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJxdDYwMjI0MF90cyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHF0NjAyMjQwX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocXQ2MDIyNDBfcmVtb3ZlKSwKKwkuc3VzcGVuZAk9IHF0NjAyMjQwX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBxdDYwMjI0MF9yZXN1bWUsCisJLmlkX3RhYmxlCT0gcXQ2MDIyNDBfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBxdDYwMjI0MF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZxdDYwMjI0MF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcXQ2MDIyNDBfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZxdDYwMjI0MF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChxdDYwMjI0MF9pbml0KTsKK21vZHVsZV9leGl0KHF0NjAyMjQwX2V4aXQpOworCisvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KK01PRFVMRV9BVVRIT1IoIkpvb255b3VuZyBTaGltIDxqeTA5MjIuc2hpbUBzYW1zdW5nLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQVQ0MlFUNjAyMjQwL0FUTVhUMjI0IFRvdWNoc2NyZWVuIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi90cHM2NTA3eC10cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi90cHM2NTA3eC10cy5jCmluZGV4IDViNzBhMTQuLmE2NDRkMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdHBzNjUwN3gtdHMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3RwczY1MDd4LXRzLmMKQEAgLTM1NSw5ICszNTUsNiBAQAogCXN0cnVjdCB0cHM2NTA3eF90cyAqdHNjID0gdHBzNjUwN3hfZGV2LT50czsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYgPSB0c2MtPmlucHV0X2RldjsKIAotCWlmICghdHNjKQotCQlyZXR1cm4gMDsKLQogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmdHNjLT53b3JrKTsKIAlkZXN0cm95X3dvcmtxdWV1ZSh0c2MtPndxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi91c2J0b3VjaHNjcmVlbi5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi91c2J0b3VjaHNjcmVlbi5jCmluZGV4IDU2N2Q1NzIuLmY0NWY4MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdXNidG91Y2hzY3JlZW4uYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3VzYnRvdWNoc2NyZWVuLmMKQEAgLTk1LDYgKzk1LDcgQEAKIAlpbnQgICgqZ2V0X3BrdF9sZW4pICh1bnNpZ25lZCBjaGFyICpwa3QsIGludCBsZW4pOwogCiAJaW50ICAoKnJlYWRfZGF0YSkgICAoc3RydWN0IHVzYnRvdWNoX3VzYiAqdXNidG91Y2gsIHVuc2lnbmVkIGNoYXIgKnBrdCk7CisJaW50ICAoKmFsbG9jKSAgICAgICAoc3RydWN0IHVzYnRvdWNoX3VzYiAqdXNidG91Y2gpOwogCWludCAgKCppbml0KSAgICAgICAgKHN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoKTsKIAl2b2lkICgqZXhpdCkJICAgIChzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCk7CiB9OwpAQCAtMTM1LDcgKzEzNiw3IEBACiAJREVWVFlQRV9KQVNURUMsCiAJREVWVFlQRV9FMkksCiAJREVWVFlQRV9aWVRST05JQywKLQlERVZUWVBFX1RDNVVILAorCURFVlRZUEVfVEM0NVVTQiwKIAlERVZUWVBFX05FWElPLAogfTsKIApAQCAtMjIyLDggKzIyMywxMSBAQAogCXtVU0JfREVWSUNFKDB4MTRjOCwgMHgwMDAzKSwgLmRyaXZlcl9pbmZvID0gREVWVFlQRV9aWVRST05JQ30sCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfRVRUX1RDNVVICi0Je1VTQl9ERVZJQ0UoMHgwNjY0LCAweDAzMDkpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX1RDNVVIfSwKKyNpZmRlZiBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0VUVF9UQzQ1VVNCCisJLyogVEM1VUggKi8KKwl7VVNCX0RFVklDRSgweDA2NjQsIDB4MDMwOSksIC5kcml2ZXJfaW5mbyA9IERFVlRZUEVfVEM0NVVTQn0sCisJLyogVEM0VU0gKi8KKwl7VVNCX0RFVklDRSgweDA2NjQsIDB4MDMwNiksIC5kcml2ZXJfaW5mbyA9IERFVlRZUEVfVEM0NVVTQn0sCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfTkVYSU8KQEAgLTUwNyw3ICs1MTEsNyBAQAogCWludCByZXQgPSAtRU5PTUVNOwogCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKIAotCWJ1ZiA9IGttYWxsb2MoMiwgR0ZQX0tFUk5FTCk7CisJYnVmID0ga21hbGxvYygyLCBHRlBfTk9JTyk7CiAJaWYgKCFidWYpCiAJCWdvdG8gZXJyX25vYnVmOwogCS8qIHJlc2V0ICovCkBAIC01NzQsMTAgKzU3OCwxMCBAQAogI2VuZGlmCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRVQmVCBUQzVVSCBwYXJ0CisgKiBFVCZUIFRDNVVIL1RDNFVNIHBhcnQKICAqLwotI2lmZGVmIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfRVRUX1RDNVVICi1zdGF0aWMgaW50IHRjNXVoX3JlYWRfZGF0YShzdHJ1Y3QgdXNidG91Y2hfdXNiICpkZXYsIHVuc2lnbmVkIGNoYXIgKnBrdCkKKyNpZmRlZiBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0VUVF9UQzQ1VVNCCitzdGF0aWMgaW50IHRjNDV1c2JfcmVhZF9kYXRhKHN0cnVjdCB1c2J0b3VjaF91c2IgKmRldiwgdW5zaWduZWQgY2hhciAqcGt0KQogewogCWRldi0+eCA9ICgocGt0WzJdICYgMHgwRikgPDwgOCkgfCBwa3RbMV07CiAJZGV2LT55ID0gKChwa3RbNF0gJiAweDBGKSA8PCA4KSB8IHBrdFszXTsKQEAgLTczMiwxMSArNzM2LDQzIEBACiB7CiB9CiAKK3N0YXRpYyBpbnQgbmV4aW9fYWxsb2Moc3RydWN0IHVzYnRvdWNoX3VzYiAqdXNidG91Y2gpCit7CisJc3RydWN0IG5leGlvX3ByaXYgKnByaXY7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwl1c2J0b3VjaC0+cHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXhpb19wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1c2J0b3VjaC0+cHJpdikKKwkJZ290byBvdXRfYnVmOworCisJcHJpdiA9IHVzYnRvdWNoLT5wcml2OworCisJcHJpdi0+YWNrX2J1ZiA9IGttZW1kdXAobmV4aW9fYWNrX3BrdCwgc2l6ZW9mKG5leGlvX2Fja19wa3QpLAorCQkJCUdGUF9LRVJORUwpOworCWlmICghcHJpdi0+YWNrX2J1ZikKKwkJZ290byBlcnJfcHJpdjsKKworCXByaXYtPmFjayA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2LT5hY2spIHsKKwkJZGJnKCIlcyAtIHVzYl9hbGxvY191cmIgZmFpbGVkOiB1c2J0b3VjaC0+YWNrIiwgX19mdW5jX18pOworCQlnb3RvIGVycl9hY2tfYnVmOworCX0KKworCXJldHVybiAwOworCitlcnJfYWNrX2J1ZjoKKwlrZnJlZShwcml2LT5hY2tfYnVmKTsKK2Vycl9wcml2OgorCWtmcmVlKHByaXYpOworb3V0X2J1ZjoKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IG5leGlvX2luaXQoc3RydWN0IHVzYnRvdWNoX3VzYiAqdXNidG91Y2gpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYodXNidG91Y2gtPmludGVyZmFjZSk7CiAJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdXNidG91Y2gtPmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7Ci0Jc3RydWN0IG5leGlvX3ByaXYgKnByaXY7CisJc3RydWN0IG5leGlvX3ByaXYgKnByaXYgPSB1c2J0b3VjaC0+cHJpdjsKIAlpbnQgcmV0ID0gLUVOT01FTTsKIAlpbnQgYWN0dWFsX2xlbiwgaTsKIAl1bnNpZ25lZCBjaGFyICpidWY7CkBAIC03NTUsNyArNzkxLDcgQEAKIAlpZiAoIWlucHV0X2VwIHx8ICFvdXRwdXRfZXApCiAJCXJldHVybiAtRU5YSU87CiAKLQlidWYgPSBrbWFsbG9jKE5FWElPX0JVRlNJWkUsIEdGUF9LRVJORUwpOworCWJ1ZiA9IGttYWxsb2MoTkVYSU9fQlVGU0laRSwgR0ZQX05PSU8pOwogCWlmICghYnVmKQogCQlnb3RvIG91dF9idWY7CiAKQEAgLTc4NywxMSArODIzLDExIEBACiAJCXN3aXRjaCAoYnVmWzBdKSB7CiAJCWNhc2UgMHg4MzoJLyogZmlybXdhcmUgdmVyc2lvbiAqLwogCQkJaWYgKCFmaXJtd2FyZV92ZXIpCi0JCQkJZmlybXdhcmVfdmVyID0ga3N0cmR1cCgmYnVmWzJdLCBHRlBfS0VSTkVMKTsKKwkJCQlmaXJtd2FyZV92ZXIgPSBrc3RyZHVwKCZidWZbMl0sIEdGUF9OT0lPKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4ODQ6CS8qIGRldmljZSBuYW1lICovCiAJCQlpZiAoIWRldmljZV9uYW1lKQotCQkJCWRldmljZV9uYW1lID0ga3N0cmR1cCgmYnVmWzJdLCBHRlBfS0VSTkVMKTsKKwkJCQlkZXZpY2VfbmFtZSA9IGtzdHJkdXAoJmJ1ZlsyXSwgR0ZQX05PSU8pOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC04MDIsMzYgKzgzOCwxMSBAQAogCWtmcmVlKGZpcm13YXJlX3Zlcik7CiAJa2ZyZWUoZGV2aWNlX25hbWUpOwogCi0JLyogcHJlcGFyZSBBQ0sgVVJCICovCi0JcmV0ID0gLUVOT01FTTsKLQotCXVzYnRvdWNoLT5wcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG5leGlvX3ByaXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXVzYnRvdWNoLT5wcml2KQotCQlnb3RvIG91dF9idWY7Ci0KLQlwcml2ID0gdXNidG91Y2gtPnByaXY7Ci0KLQlwcml2LT5hY2tfYnVmID0ga21lbWR1cChuZXhpb19hY2tfcGt0LCBzaXplb2YobmV4aW9fYWNrX3BrdCksCi0JCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwcml2LT5hY2tfYnVmKQotCQlnb3RvIGVycl9wcml2OwotCi0JcHJpdi0+YWNrID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByaXYtPmFjaykgewotCQlkYmcoIiVzIC0gdXNiX2FsbG9jX3VyYiBmYWlsZWQ6IHVzYnRvdWNoLT5hY2siLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyX2Fja19idWY7Ci0JfQotCiAJdXNiX2ZpbGxfYnVsa191cmIocHJpdi0+YWNrLCBkZXYsIHVzYl9zbmRidWxrcGlwZShkZXYsIG91dHB1dF9lcCksCiAJCQkgIHByaXYtPmFja19idWYsIHNpemVvZihuZXhpb19hY2tfcGt0KSwKIAkJCSAgbmV4aW9fYWNrX2NvbXBsZXRlLCB1c2J0b3VjaCk7CiAJcmV0ID0gMDsKLQlnb3RvIG91dF9idWY7CiAKLWVycl9hY2tfYnVmOgotCWtmcmVlKHByaXYtPmFja19idWYpOwotZXJyX3ByaXY6Ci0Ja2ZyZWUocHJpdik7CiBvdXRfYnVmOgogCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIHJldDsKQEAgLTg0OSwyOSArODYwLDMyIEBACiAKIHN0YXRpYyBpbnQgbmV4aW9fcmVhZF9kYXRhKHN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoLCB1bnNpZ25lZCBjaGFyICpwa3QpCiB7Ci0JaW50IHgsIHksIGJlZ2luX3gsIGJlZ2luX3ksIGVuZF94LCBlbmRfeSwgdywgaCwgcmV0OwogCXN0cnVjdCBuZXhpb190b3VjaF9wYWNrZXQgKnBhY2tldCA9ICh2b2lkICopIHBrdDsKIAlzdHJ1Y3QgbmV4aW9fcHJpdiAqcHJpdiA9IHVzYnRvdWNoLT5wcml2OworCXVuc2lnbmVkIGludCBkYXRhX2xlbiA9IGJlMTZfdG9fY3B1KHBhY2tldC0+ZGF0YV9sZW4pOworCXVuc2lnbmVkIGludCB4X2xlbiA9IGJlMTZfdG9fY3B1KHBhY2tldC0+eF9sZW4pOworCXVuc2lnbmVkIGludCB5X2xlbiA9IGJlMTZfdG9fY3B1KHBhY2tldC0+eV9sZW4pOworCWludCB4LCB5LCBiZWdpbl94LCBiZWdpbl95LCBlbmRfeCwgZW5kX3ksIHcsIGgsIHJldDsKIAogCS8qIGdvdCB0b3VjaCBkYXRhPyAqLwogCWlmICgocGt0WzBdICYgMHhlMCkgIT0gMHhlMCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoYmUxNl90b19jcHUocGFja2V0LT5kYXRhX2xlbikgPiAweGZmKQotCQlwYWNrZXQtPmRhdGFfbGVuID0gY3B1X3RvX2JlMTYoYmUxNl90b19jcHUocGFja2V0LT5kYXRhX2xlbikgLSAweDEwMCk7Ci0JaWYgKGJlMTZfdG9fY3B1KHBhY2tldC0+eF9sZW4pID4gMHhmZikKLQkJcGFja2V0LT54X2xlbiA9IGNwdV90b19iZTE2KGJlMTZfdG9fY3B1KHBhY2tldC0+eF9sZW4pIC0gMHg4MCk7CisJaWYgKGRhdGFfbGVuID4gMHhmZikKKwkJZGF0YV9sZW4gLT0gMHgxMDA7CisJaWYgKHhfbGVuID4gMHhmZikKKwkJeF9sZW4gLT0gMHg4MDsKIAogCS8qIHNlbmQgQUNLICovCiAJcmV0ID0gdXNiX3N1Ym1pdF91cmIocHJpdi0+YWNrLCBHRlBfQVRPTUlDKTsKIAogCWlmICghdXNidG91Y2gtPnR5cGUtPm1heF94YykgewotCQl1c2J0b3VjaC0+dHlwZS0+bWF4X3hjID0gMiAqIGJlMTZfdG9fY3B1KHBhY2tldC0+eF9sZW4pOwotCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyh1c2J0b3VjaC0+aW5wdXQsIEFCU19YLCAwLAotCQkJCSAgICAgMiAqIGJlMTZfdG9fY3B1KHBhY2tldC0+eF9sZW4pLCAwLCAwKTsKLQkJdXNidG91Y2gtPnR5cGUtPm1heF95YyA9IDIgKiBiZTE2X3RvX2NwdShwYWNrZXQtPnlfbGVuKTsKLQkJaW5wdXRfc2V0X2Fic19wYXJhbXModXNidG91Y2gtPmlucHV0LCBBQlNfWSwgMCwKLQkJCQkgICAgIDIgKiBiZTE2X3RvX2NwdShwYWNrZXQtPnlfbGVuKSwgMCwgMCk7CisJCXVzYnRvdWNoLT50eXBlLT5tYXhfeGMgPSAyICogeF9sZW47CisJCWlucHV0X3NldF9hYnNfcGFyYW1zKHVzYnRvdWNoLT5pbnB1dCwgQUJTX1gsCisJCQkJICAgICAwLCB1c2J0b3VjaC0+dHlwZS0+bWF4X3hjLCAwLCAwKTsKKwkJdXNidG91Y2gtPnR5cGUtPm1heF95YyA9IDIgKiB5X2xlbjsKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXModXNidG91Y2gtPmlucHV0LCBBQlNfWSwKKwkJCQkgICAgIDAsIHVzYnRvdWNoLT50eXBlLT5tYXhfeWMsIDAsIDApOwogCX0KIAkvKgogCSAqIFRoZSBkZXZpY2UgcmVwb3J0cyBzdGF0ZSBvZiBJUiBzZW5zb3JzIG9uIFggYW5kIFkgYXhlcy4KQEAgLTg4MSwyMiArODk1LDIxIEBACiAJICogaXQncyBkaXNhYmxlZCAoYW5kIHVudGVzdGVkKSBoZXJlIGFzIHRoZXJlJ3Mgbm8gWCBkcml2ZXIgZm9yIHRoYXQuCiAJICovCiAJYmVnaW5feCA9IGVuZF94ID0gYmVnaW5feSA9IGVuZF95ID0gLTE7Ci0JZm9yICh4ID0gMDsgeCA8IGJlMTZfdG9fY3B1KHBhY2tldC0+eF9sZW4pOyB4KyspIHsKKwlmb3IgKHggPSAwOyB4IDwgeF9sZW47IHgrKykgewogCQlpZiAoYmVnaW5feCA9PSAtMSAmJiBwYWNrZXQtPmRhdGFbeF0gPiBORVhJT19USFJFU0hPTEQpIHsKIAkJCWJlZ2luX3ggPSB4OwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKGVuZF94ID09IC0xICYmIGJlZ2luX3ggIT0gLTEgJiYgcGFja2V0LT5kYXRhW3hdIDwgTkVYSU9fVEhSRVNIT0xEKSB7CiAJCQllbmRfeCA9IHggLSAxOwotCQkJZm9yICh5ID0gYmUxNl90b19jcHUocGFja2V0LT54X2xlbik7Ci0JCQkgICAgIHkgPCBiZTE2X3RvX2NwdShwYWNrZXQtPmRhdGFfbGVuKTsgeSsrKSB7CisJCQlmb3IgKHkgPSB4X2xlbjsgeSA8IGRhdGFfbGVuOyB5KyspIHsKIAkJCQlpZiAoYmVnaW5feSA9PSAtMSAmJiBwYWNrZXQtPmRhdGFbeV0gPiBORVhJT19USFJFU0hPTEQpIHsKLQkJCQkJYmVnaW5feSA9IHkgLSBiZTE2X3RvX2NwdShwYWNrZXQtPnhfbGVuKTsKKwkJCQkJYmVnaW5feSA9IHkgLSB4X2xlbjsKIAkJCQkJY29udGludWU7CiAJCQkJfQogCQkJCWlmIChlbmRfeSA9PSAtMSAmJgogCQkJCSAgICBiZWdpbl95ICE9IC0xICYmIHBhY2tldC0+ZGF0YVt5XSA8IE5FWElPX1RIUkVTSE9MRCkgewotCQkJCQllbmRfeSA9IHkgLSAxIC0gYmUxNl90b19jcHUocGFja2V0LT54X2xlbik7CisJCQkJCWVuZF95ID0geSAtIDEgLSB4X2xlbjsKIAkJCQkJdyA9IGVuZF94IC0gYmVnaW5feDsKIAkJCQkJaCA9IGVuZF95IC0gYmVnaW5feTsKICNpZiAwCkBAIC0xMTA0LDE0ICsxMTE3LDE0IEBACiAJfSwKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9FVFRfVEM1VUgKLQlbREVWVFlQRV9UQzVVSF0gPSB7CisjaWZkZWYgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9FVFRfVEM0NVVTQgorCVtERVZUWVBFX1RDNDVVU0JdID0gewogCQkubWluX3hjCQk9IDB4MCwKIAkJLm1heF94YwkJPSAweDBmZmYsCiAJCS5taW5feWMJCT0gMHgwLAogCQkubWF4X3ljCQk9IDB4MGZmZiwKIAkJLnJlcHRfc2l6ZQk9IDUsCi0JCS5yZWFkX2RhdGEJPSB0YzV1aF9yZWFkX2RhdGEsCisJCS5yZWFkX2RhdGEJPSB0YzQ1dXNiX3JlYWRfZGF0YSwKIAl9LAogI2VuZGlmCiAKQEAgLTExMjAsNiArMTEzMyw3IEBACiAJCS5yZXB0X3NpemUJPSAxMDI0LAogCQkuaXJxX2Fsd2F5cwk9IHRydWUsCiAJCS5yZWFkX2RhdGEJPSBuZXhpb19yZWFkX2RhdGEsCisJCS5hbGxvYwkJPSBuZXhpb19hbGxvYywKIAkJLmluaXQJCT0gbmV4aW9faW5pdCwKIAkJLmV4aXQJCT0gbmV4aW9fZXhpdCwKIAl9LApAQCAtMTI2Myw2ICsxMjc3LDcgQEAKIAl1c2J0b3VjaC0+dHlwZS0+cHJvY2Vzc19wa3QodXNidG91Y2gsIHVzYnRvdWNoLT5kYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCiBleGl0OgorCXVzYl9tYXJrX2xhc3RfYnVzeShpbnRlcmZhY2VfdG9fdXNiZGV2KHVzYnRvdWNoLT5pbnRlcmZhY2UpKTsKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXR2YWwpCiAJCWVycigiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQ6ICVkIiwKQEAgLTEyNzIsMjUgKzEyODcsODkgQEAKIHN0YXRpYyBpbnQgdXNidG91Y2hfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKIHsKIAlzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0KTsKKwlpbnQgcjsKIAogCXVzYnRvdWNoLT5pcnEtPmRldiA9IGludGVyZmFjZV90b191c2JkZXYodXNidG91Y2gtPmludGVyZmFjZSk7CiAKKwlyID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHVzYnRvdWNoLT5pbnRlcmZhY2UpID8gLUVJTyA6IDA7CisJaWYgKHIgPCAwKQorCQlnb3RvIG91dDsKKwogCWlmICghdXNidG91Y2gtPnR5cGUtPmlycV9hbHdheXMpIHsKLQkJaWYgKHVzYl9zdWJtaXRfdXJiKHVzYnRvdWNoLT5pcnEsIEdGUF9LRVJORUwpKQotCQkgIHJldHVybiAtRUlPOworCQlpZiAodXNiX3N1Ym1pdF91cmIodXNidG91Y2gtPmlycSwgR0ZQX0tFUk5FTCkpIHsKKwkJCXIgPSAtRUlPOworCQkJZ290byBvdXRfcHV0OworCQl9CiAJfQogCi0JcmV0dXJuIDA7CisJdXNidG91Y2gtPmludGVyZmFjZS0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDE7CitvdXRfcHV0OgorCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZSh1c2J0b3VjaC0+aW50ZXJmYWNlKTsKK291dDoKKwlyZXR1cm4gcjsKIH0KIAogc3RhdGljIHZvaWQgdXNidG91Y2hfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqaW5wdXQpCiB7CiAJc3RydWN0IHVzYnRvdWNoX3VzYiAqdXNidG91Y2ggPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dCk7CisJaW50IHI7CiAKIAlpZiAoIXVzYnRvdWNoLT50eXBlLT5pcnFfYWx3YXlzKQogCQl1c2Jfa2lsbF91cmIodXNidG91Y2gtPmlycSk7CisJciA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZSh1c2J0b3VjaC0+aW50ZXJmYWNlKTsKKwl1c2J0b3VjaC0+aW50ZXJmYWNlLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMDsKKwlpZiAoIXIpCisJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZSh1c2J0b3VjaC0+aW50ZXJmYWNlKTsKIH0KIAorc3RhdGljIGludCB1c2J0b3VjaF9zdXNwZW5kCisoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQoreworCXN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCXVzYl9raWxsX3VyYih1c2J0b3VjaC0+aXJxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVzYnRvdWNoX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSB1c2J0b3VjaC0+aW5wdXQ7CisJaW50IHJlc3VsdCA9IDA7CisKKwltdXRleF9sb2NrKCZpbnB1dC0+bXV0ZXgpOworCWlmIChpbnB1dC0+dXNlcnMgfHwgdXNidG91Y2gtPnR5cGUtPmlycV9hbHdheXMpCisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVzYnRvdWNoLT5pcnEsIEdGUF9OT0lPKTsKKwltdXRleF91bmxvY2soJmlucHV0LT5tdXRleCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IHVzYnRvdWNoX3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSB1c2J0b3VjaC0+aW5wdXQ7CisJaW50IGVyciA9IDA7CisKKwkvKiByZWluaXQgdGhlIGRldmljZSAqLworCWlmICh1c2J0b3VjaC0+dHlwZS0+aW5pdCkgeworCQllcnIgPSB1c2J0b3VjaC0+dHlwZS0+aW5pdCh1c2J0b3VjaCk7CisJCWlmIChlcnIpIHsKKwkJCWRiZygiJXMgLSB0eXBlLT5pbml0KCkgZmFpbGVkLCBlcnI6ICVkIiwKKwkJCSAgICBfX2Z1bmNfXywgZXJyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwkvKiByZXN0YXJ0IElPIGlmIG5lZWRlZCAqLworCW11dGV4X2xvY2soJmlucHV0LT5tdXRleCk7CisJaWYgKGlucHV0LT51c2VycykKKwkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXNidG91Y2gtPmlycSwgR0ZQX05PSU8pOworCW11dGV4X3VubG9jaygmaW5wdXQtPm11dGV4KTsKKworCXJldHVybiBlcnI7Cit9CiAKIHN0YXRpYyB2b2lkIHVzYnRvdWNoX2ZyZWVfYnVmZmVycyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKIAkJCQkgIHN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoKQpAQCAtMTQxMSwxMiArMTQ5MCwyMSBAQAogCXVzYnRvdWNoLT5pcnEtPnRyYW5zZmVyX2RtYSA9IHVzYnRvdWNoLT5kYXRhX2RtYTsKIAl1c2J0b3VjaC0+aXJxLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKIAotCS8qIGRldmljZSBzcGVjaWZpYyBpbml0ICovCisJLyogZGV2aWNlIHNwZWNpZmljIGFsbG9jYXRpb25zICovCisJaWYgKHR5cGUtPmFsbG9jKSB7CisJCWVyciA9IHR5cGUtPmFsbG9jKHVzYnRvdWNoKTsKKwkJaWYgKGVycikgeworCQkJZGJnKCIlcyAtIHR5cGUtPmFsbG9jKCkgZmFpbGVkLCBlcnI6ICVkIiwgX19mdW5jX18sIGVycik7CisJCQlnb3RvIG91dF9mcmVlX3VyYjsKKwkJfQorCX0KKworCS8qIGRldmljZSBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbiovCiAJaWYgKHR5cGUtPmluaXQpIHsKIAkJZXJyID0gdHlwZS0+aW5pdCh1c2J0b3VjaCk7CiAJCWlmIChlcnIpIHsKIAkJCWRiZygiJXMgLSB0eXBlLT5pbml0KCkgZmFpbGVkLCBlcnI6ICVkIiwgX19mdW5jX18sIGVycik7Ci0JCQlnb3RvIG91dF9mcmVlX3VyYjsKKwkJCWdvdG8gb3V0X2RvX2V4aXQ7CiAJCX0KIAl9CiAKQEAgLTE0MjksOCArMTUxNywxMSBAQAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgdXNidG91Y2gpOwogCiAJaWYgKHVzYnRvdWNoLT50eXBlLT5pcnFfYWx3YXlzKSB7CisJCS8qIHRoaXMgY2FuJ3QgZmFpbCAqLworCQl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoaW50Zik7CiAJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVzYnRvdWNoLT5pcnEsIEdGUF9LRVJORUwpOwogCQlpZiAoZXJyKSB7CisJCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoaW50Zik7CiAJCQllcnIoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0OiAlZCIsCiAJCQkgICAgX19mdW5jX18sIGVycik7CiAJCQlnb3RvIG91dF91bnJlZ2lzdGVyX2lucHV0OwpAQCAtMTQ4MSw3ICsxNTcyLDExIEBACiAJLm5hbWUJCT0gInVzYnRvdWNoc2NyZWVuIiwKIAkucHJvYmUJCT0gdXNidG91Y2hfcHJvYmUsCiAJLmRpc2Nvbm5lY3QJPSB1c2J0b3VjaF9kaXNjb25uZWN0LAorCS5zdXNwZW5kCT0gdXNidG91Y2hfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHVzYnRvdWNoX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lCT0gdXNidG91Y2hfcmVzZXRfcmVzdW1lLAogCS5pZF90YWJsZQk9IHVzYnRvdWNoX2RldmljZXMsCisJLnN1cHBvcnRzX2F1dG9zdXNwZW5kID0gMSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHVzYnRvdWNoX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdzkwcDkxMF90cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93OTBwOTEwX3RzLmMKaW5kZXggY2MxODI2NWIuLjdhNDVkNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdzkwcDkxMF90cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdzkwcDkxMF90cy5jCkBAIC0yMzMsNyArMjMzLDcgQEAKIAl3OTBwOTEwX3RzLT5zdGF0ZSA9IFRTX0lETEU7CiAJc3Bpbl9sb2NrX2luaXQoJnc5MHA5MTBfdHMtPmxvY2spOwogCXNldHVwX3RpbWVyKCZ3OTBwOTEwX3RzLT50aW1lciwgdzkwcDkxMF9jaGVja19wZW5fdXAsCi0JCSAgICAodW5zaWduZWQgbG9uZykmdzkwcDkxMF90cyk7CisJCSAgICAodW5zaWduZWQgbG9uZyl3OTBwOTEwX3RzKTsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyZXMpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQveGVuLWtiZGZyb250LmMgYi9kcml2ZXJzL2lucHV0L3hlbi1rYmRmcm9udC5jCmluZGV4IGUxNDA4MTYuLmViYjExOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQveGVuLWtiZGZyb250LmMKKysrIGIvZHJpdmVycy9pbnB1dC94ZW4ta2JkZnJvbnQuYwpAQCAtMzM5LDcgKzMzOSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHhlbmtiZF9pbml0KHZvaWQpCiB7Ci0JaWYgKCF4ZW5fZG9tYWluKCkpCisJaWYgKCF4ZW5fcHZfZG9tYWluKCkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogTm90aGluZyB0byBkbyBpZiBydW5uaW5nIGluIGRvbTAuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMgYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMKaW5kZXggMGNhYmUzMS4uZjgwYTdjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgpAQCAtNTAsNiArNDksNyBAQAogCiAvKiAtLS0tLS0tLSBkcml2ZXIgaW5mb3JtYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorc3RhdGljIERFRklORV9NVVRFWChjYXBpX211dGV4KTsKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKmNhcGlfY2xhc3M7CiBzdGF0aWMgaW50IGNhcGlfbWFqb3IgPSA2ODsJCS8qIGFsbG9jYXRlZCAqLwogCkBAIC02OTEsNyArNjkxLDcgQEAKIHN0YXRpYyBzc2l6ZV90CiBjYXBpX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBjYXBpZGV2ICpjZGV2ID0gKHN0cnVjdCBjYXBpZGV2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjYXBpZGV2ICpjZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc2l6ZV90IGNvcGllZDsKIAlpbnQgZXJyOwpAQCAtNzI2LDcgKzcyNiw3IEBACiBzdGF0aWMgc3NpemVfdAogY2FwaV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IGNhcGlkZXYgKmNkZXYgPSAoc3RydWN0IGNhcGlkZXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGNhcGlkZXYgKmNkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1MTYgbWxlbjsKIApAQCAtNzczLDcgKzc3Myw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50CiBjYXBpX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKiB3YWl0KQogewotCXN0cnVjdCBjYXBpZGV2ICpjZGV2ID0gKHN0cnVjdCBjYXBpZGV2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjYXBpZGV2ICpjZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGludCBtYXNrID0gMDsKIAogCWlmICghY2Rldi0+YXAuYXBwbGlkKQpAQCAtOTg1LDkgKzk4NSw5IEBACiB7CiAJaW50IHJldDsKIAotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmY2FwaV9tdXRleCk7CiAJcmV0ID0gY2FwaV9pb2N0bChmaWxlLCBjbWQsIGFyZyk7Ci0JdW5sb2NrX2tlcm5lbCgpOworCW11dGV4X3VubG9jaygmY2FwaV9tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaWRydi5jIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaWRydi5jCmluZGV4IGJmNTVlZDUuLjI5NzhiZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGlkcnYuYworKysgYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpZHJ2LmMKQEAgLTE0NTAsMTIgKzE0NTAsOSBAQAogICAgIAl9CiAKIAlmb3IgKHAgPSBkYXRhLCBlbmQgPSBkYXRhK2xlbjsgcCA8IGVuZDsgcCsrKSB7Ci0JCXU4IHc7CiAJCVBVVEJZVEVfVE9fU1RBVFVTKGNhcmQsICcgJyk7Ci0JCXcgPSAoKnAgPj4gNCkgJiAweGY7Ci0JCVBVVEJZVEVfVE9fU1RBVFVTKGNhcmQsICh3IDwgMTApID8gJzAnK3cgOiAnQSctMTArdyk7Ci0JCXcgPSAqcCAmIDB4ZjsKLQkJUFVUQllURV9UT19TVEFUVVMoY2FyZCwgKHcgPCAxMCkgPyAnMCcrdyA6ICdBJy0xMCt3KTsKKwkJUFVUQllURV9UT19TVEFUVVMoY2FyZCwgaGV4X2FzY19oaSgqcCkpOworCQlQVVRCWVRFX1RPX1NUQVRVUyhjYXJkLCBoZXhfYXNjX2xvKCpwKSk7CiAJfQogCVBVVEJZVEVfVE9fU1RBVFVTKGNhcmQsICdcbicpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2RpdmVydF9wcm9jZnMuYyBiL2RyaXZlcnMvaXNkbi9kaXZlcnQvZGl2ZXJ0X3Byb2Nmcy5jCmluZGV4IGM1M2UyNDE3Li4zM2VjOWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2RpdmVydF9wcm9jZnMuYworKysgYi9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2RpdmVydF9wcm9jZnMuYwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaXNkbmlmLmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSAiaXNkbl9kaXZlcnQuaCIKIAogCkBAIC0yOCw2ICsyOCw3IEBACiAvKiBWYXJpYWJsZXMgZm9yIGludGVyZmFjZSBxdWV1ZSAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHVsb25nIGlmX3VzZWQgPSAwOwkJLyogbnVtYmVyIG9mIGludGVyZmFjZSB1c2VycyAqLworc3RhdGljIERFRklORV9NVVRFWChpc2RuX2RpdmVydF9tdXRleCk7CiBzdGF0aWMgc3RydWN0IGRpdmVydF9pbmZvICpkaXZlcnRfaW5mb19oZWFkID0gTlVMTDsJLyogaGVhZCBvZiBxdWV1ZSAqLwogc3RhdGljIHN0cnVjdCBkaXZlcnRfaW5mbyAqZGl2ZXJ0X2luZm9fdGFpbCA9IE5VTEw7CS8qIHBvaW50ZXIgdG8gbGFzdCBlbnRyeSAqLwogc3RhdGljIERFRklORV9TUElOTE9DSyhkaXZlcnRfaW5mb19sb2NrKTsvKiBsb2NrIGZvciBxdWV1ZSAqLwpAQCAtMjYxLDkgKzI2Miw5IEBACiB7CiAJbG9uZyByZXQ7CiAKLQlsb2NrX2tlcm5lbCgpOworCW11dGV4X2xvY2soJmlzZG5fZGl2ZXJ0X211dGV4KTsKIAlyZXQgPSBpc2RuX2RpdmVydF9pb2N0bF91bmxvY2tlZChmaWxlLCBjbWQsIGFyZyk7Ci0JdW5sb2NrX2tlcm5lbCgpOworCW11dGV4X3VubG9jaygmaXNkbl9kaXZlcnRfbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L0tjb25maWcgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9LY29uZmlnCmluZGV4IGRjZWZlZGMuLmIxOGE5MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L0tjb25maWcKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvS2NvbmZpZwpAQCAtMTcsOCArMTcsNyBAQAogaWYgSVNETl9EUlZfR0lHQVNFVAogCiBjb25maWcgR0lHQVNFVF9DQVBJCi0JYm9vbCAiR2lnYXNldCBDQVBJIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlib29sICJHaWdhc2V0IENBUEkgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIElTRE5fQ0FQST0neSd8fChJU0ROX0NBUEk9J20nJiZJU0ROX0RSVl9HSUdBU0VUPSdtJykKIAlkZWZhdWx0IElTRE5fSTRMPSduJwogCWhlbHAKQEAgLTI3LDYgKzI2LDcgQEAKIAkgIHN1YnN5c3RlbSB5b3UnbGwgaGF2ZSB0byBlbmFibGUgdGhlIGNhcGlkcnYgZ2x1ZSBkcml2ZXIuCiAJICAoc2VsZWN0IElTRE5fQ0FQSV9DQVBJRFJWLikKIAkgIFNheSBOIHRvIGJ1aWxkIHRoZSBvbGQgbmF0aXZlIElTRE40TGludXggdmFyaWFudC4KKwkgIElmIHVuc3VyZSwgc2F5IFkuCiAKIGNvbmZpZyBHSUdBU0VUX0k0TAogCWJvb2wKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2Jhcy1naWdhc2V0LmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9iYXMtZ2lnYXNldC5jCmluZGV4IDQ3YTVmZmUuLjBkZWQzNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2Jhcy1naWdhc2V0LmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYmFzLWdpZ2FzZXQuYwpAQCAtMTE4OCwyNCArMTE4OCw2IEBACiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KLSNpZmRlZiBDT05GSUdfR0lHQVNFVF9ERUJVRwotCQkJLyogY2hlY2sgYXNzdW1wdGlvbiBvbiByZW1haW5pbmcgZnJhbWVzICovCi0JCQlmb3IgKDsgaSA8IEJBU19OVU1GUkFNRVM7IGkrKykgewotCQkJCWlmZCA9ICZ1cmItPmlzb19mcmFtZV9kZXNjW2ldOwotCQkJCWlmIChpZmQtPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MKLQkJCQkgICAgfHwgaWZkLT5hY3R1YWxfbGVuZ3RoICE9IDApIHsKLQkJCQkJZGV2X3dhcm4oY3MtPmRldiwKLQkJCQkJICAgICAiaXNvY2hyb25vdXMgd3JpdGU6IGZyYW1lICVkOiAlcywgIgotCQkJCQkgICAgICIlZCBvZiAlZCBieXRlcyBzZW50XG4iLAotCQkJCQkgICAgIGksIGdldF91c2Jfc3RhdG1zZyhpZmQtPnN0YXR1cyksCi0JCQkJCSAgICAgaWZkLT5hY3R1YWxfbGVuZ3RoLCBpZmQtPmxlbmd0aCk7Ci0JCQkJCW9mZnNldCA9IChpZmQtPm9mZnNldCArCi0JCQkJCQkgIGlmZC0+YWN0dWFsX2xlbmd0aCkKLQkJCQkJCSAlIEJBU19PVVRCVUZTSVpFOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0jZW5kaWYKIAkJCWJyZWFrOwogCQljYXNlIC1FUElQRToJCQkvKiBzdGFsbCAtIHByb2JhYmx5IHVuZGVycnVuICovCiAJCQlkZXZfZXJyKGNzLT5kZXYsICJpc29jaHJvbm91cyB3cml0ZSBzdGFsbGVkXG4iKTsKQEAgLTE5MTMsNjUgKzE4OTUsNDEgQEAKICAqIFVTQiB0cmFuc21pc3Npb24gaXMgc3RhcnRlZCBpZiBuZWNlc3NhcnkuCiAgKiBwYXJhbWV0ZXJzOgogICoJY3MJCWNvbnRyb2xsZXIgc3RhdGUgc3RydWN0dXJlCi0gKglidWYJCWNvbW1hbmQgc3RyaW5nIHRvIHNlbmQKLSAqCWxlbgkJbnVtYmVyIG9mIGJ5dGVzIHRvIHNlbmQgKG1heC4gSUZfV1JJVEVCVUYpCi0gKgl3YWtlX3Rhc2tsZXQJdGFza2xldCB0byBydW4gd2hlbiB0cmFuc21pc3Npb24gaXMgY29tcGxldGVkCi0gKgkJCShOVUxMIGlmIG5vbmUpCisgKgljYgkJY29tbWFuZCBidWZmZXIgc3RydWN0dXJlCiAgKiByZXR1cm4gdmFsdWU6CiAgKgludW1iZXIgb2YgYnl0ZXMgcXVldWVkIG9uIHN1Y2Nlc3MKICAqCWVycm9yIGNvZGUgPCAwIG9uIGVycm9yCiAgKi8KLXN0YXRpYyBpbnQgZ2lnYXNldF93cml0ZV9jbWQoc3RydWN0IGNhcmRzdGF0ZSAqY3MsCi0JCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbiwKLQkJCSAgICAgc3RydWN0IHRhc2tsZXRfc3RydWN0ICp3YWtlX3Rhc2tsZXQpCitzdGF0aWMgaW50IGdpZ2FzZXRfd3JpdGVfY21kKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCBzdHJ1Y3QgY21kYnVmX3QgKmNiKQogewotCXN0cnVjdCBjbWRidWZfdCAqY2I7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmM7CiAKIAlnaWdhc2V0X2RiZ19idWZmZXIoY3MtPm1zdGF0ZSAhPSBNU19MT0NLRUQgPwogCQkJICAgICBERUJVR19UUkFOU0NNRCA6IERFQlVHX0xPQ0tDTUQsCi0JCQkgICAiQ01EIFRyYW5zbWl0IiwgbGVuLCBidWYpOwotCi0JaWYgKGxlbiA8PSAwKSB7Ci0JCS8qIG5vdGhpbmcgdG8gZG8gKi8KLQkJcmMgPSAwOwotCQlnb3RvIG5vdHF1ZXVlZDsKLQl9CisJCQkgICAiQ01EIFRyYW5zbWl0IiwgY2ItPmxlbiwgY2ItPmJ1Zik7CiAKIAkvKiB0cmFuc2xhdGUgIisrKyIgZXNjYXBlIHNlcXVlbmNlIHNlbnQgYXMgYSBzaW5nbGUgc2VwYXJhdGUgY29tbWFuZAogCSAqIGludG8gImNsb3NlIEFUIGNoYW5uZWwiIGNvbW1hbmQgZm9yIGVycm9yIHJlY292ZXJ5CiAJICogVGhlIG5leHQgY29tbWFuZCB3aWxsIHJlb3BlbiB0aGUgQVQgY2hhbm5lbCBhdXRvbWF0aWNhbGx5LgogCSAqLwotCWlmIChsZW4gPT0gMyAmJiAhbWVtY21wKGJ1ZiwgIisrKyIsIDMpKSB7CisJaWYgKGNiLT5sZW4gPT0gMyAmJiAhbWVtY21wKGNiLT5idWYsICIrKysiLCAzKSkgeworCQlrZnJlZShjYik7CiAJCXJjID0gcmVxX3N1Ym1pdChjcy0+YmNzLCBIRF9DTE9TRV9BVENIQU5ORUwsIDAsIEJBU19USU1FT1VUKTsKLQkJZ290byBub3RxdWV1ZWQ7CisJCWlmIChjYi0+d2FrZV90YXNrbGV0KQorCQkJdGFza2xldF9zY2hlZHVsZShjYi0+d2FrZV90YXNrbGV0KTsKKwkJcmV0dXJuIHJjIDwgMCA/IHJjIDogY2ItPmxlbjsKIAl9CiAKLQlpZiAobGVuID4gSUZfV1JJVEVCVUYpCi0JCWxlbiA9IElGX1dSSVRFQlVGOwotCWNiID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNtZGJ1Zl90KSArIGxlbiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFjYikgewotCQlkZXZfZXJyKGNzLT5kZXYsICIlczogb3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOwotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gbm90cXVldWVkOwotCX0KLQotCW1lbWNweShjYi0+YnVmLCBidWYsIGxlbik7Ci0JY2ItPmxlbiA9IGxlbjsKLQljYi0+b2Zmc2V0ID0gMDsKLQljYi0+bmV4dCA9IE5VTEw7Ci0JY2ItPndha2VfdGFza2xldCA9IHdha2VfdGFza2xldDsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+Y21kbG9jaywgZmxhZ3MpOwogCWNiLT5wcmV2ID0gY3MtPmxhc3RjbWRidWY7CiAJaWYgKGNzLT5sYXN0Y21kYnVmKQogCQljcy0+bGFzdGNtZGJ1Zi0+bmV4dCA9IGNiOwogCWVsc2UgewogCQljcy0+Y21kYnVmID0gY2I7Ci0JCWNzLT5jdXJsZW4gPSBsZW47CisJCWNzLT5jdXJsZW4gPSBjYi0+bGVuOwogCX0KLQljcy0+Y21kYnl0ZXMgKz0gbGVuOworCWNzLT5jbWRieXRlcyArPSBjYi0+bGVuOwogCWNzLT5sYXN0Y21kYnVmID0gY2I7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmNtZGxvY2ssIGZsYWdzKTsKIApAQCAtMTk4OCwxMiArMTk0Niw3IEBACiAJfQogCXJjID0gc3RhcnRfY2JzZW5kKGNzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwotCXJldHVybiByYyA8IDAgPyByYyA6IGxlbjsKLQotbm90cXVldWVkOgkJCS8qIHJlcXVlc3QgaGFuZGxlZCB3aXRob3V0IHF1ZXVpbmcgKi8KLQlpZiAod2FrZV90YXNrbGV0KQotCQl0YXNrbGV0X3NjaGVkdWxlKHdha2VfdGFza2xldCk7Ci0JcmV0dXJuIHJjOworCXJldHVybiByYyA8IDAgPyByYyA6IGNiLT5sZW47CiB9CiAKIC8qIGdpZ2FzZXRfd3JpdGVfcm9vbQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvY2FwaS5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvY2FwaS5jCmluZGV4IDZmYmU4OTkuLmU1ZWEzNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2NhcGkuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9jYXBpLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNkZWZpbmUgQ0FQSV9GQUNJTElUWV9MSQkweDAwMDUKIAogI2RlZmluZSBDQVBJX1NVUFBTVkNfR0VUU1VQUE9SVEVECTB4MDAwMAorI2RlZmluZSBDQVBJX1NVUFBTVkNfTElTVEVOCQkweDAwMDEKIAogLyogbWlzc2luZyBmcm9tIGNhcGl1dGlsLmggKi8KICNkZWZpbmUgQ0FQSU1TR19QTENJX1BBUlQobSkJQ0FQSU1TR19VOChtLCA5KQpAQCAtMjcwLDkgKzI3MSwxMyBAQAogCWtmcmVlKGRiZ2xpbmUpOwogCWlmIChDQVBJTVNHX0NPTU1BTkQoZGF0YSkgPT0gQ0FQSV9EQVRBX0IzICYmCiAJICAgIChDQVBJTVNHX1NVQkNPTU1BTkQoZGF0YSkgPT0gQ0FQSV9SRVEgfHwKLQkgICAgIENBUElNU0dfU1VCQ09NTUFORChkYXRhKSA9PSBDQVBJX0lORCkgJiYKLQkgICAgQ0FQSU1TR19EQVRBTEVOKGRhdGEpID4gMCkgeworCSAgICAgQ0FQSU1TR19TVUJDT01NQU5EKGRhdGEpID09IENBUElfSU5EKSkgewogCQlsID0gQ0FQSU1TR19EQVRBTEVOKGRhdGEpOworCQlnaWdfZGJnKGxldmVsLCAiICAgRGF0YUxlbmd0aD0lZCIsIGwpOworCQlpZiAobCA8PSAwIHx8ICEoZ2lnYXNldF9kZWJ1Z2xldmVsICYgREVCVUdfTExEQVRBKSkKKwkJCXJldHVybjsKKwkJaWYgKGwgPiA2NCkKKwkJCWwgPSA2NDsgLyogYXJiaXRyYXJ5IGxpbWl0ICovCiAJCWRiZ2xpbmUgPSBrbWFsbG9jKDMqbCwgR0ZQX0FUT01JQyk7CiAJCWlmICghZGJnbGluZSkKIAkJCXJldHVybjsKQEAgLTM3OCwxMyArMzgzLDEzIEBACiAJKytiY3MtPnRyYW5zX3VwOwogCiAJaWYgKCFhcCkgewotCQlkZXZfZXJyKGNzLT5kZXYsICIlczogbm8gYXBwbGljYXRpb25cbiIsIF9fZnVuY19fKTsKKwkJZ2lnX2RiZyhERUJVR19NQ01ELCAiJXM6IGFwcGxpY2F0aW9uIGdvbmUiLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBkb24ndCBzZW5kIGZ1cnRoZXIgQjMgbWVzc2FnZXMgaWYgZGlzY29ubmVjdGVkICovCiAJaWYgKGJjcy0+YXBjb25uc3RhdGUgPCBBUENPTk5fQUNUSVZFKSB7Ci0JCWdpZ19kYmcoREVCVUdfTExEQVRBLCAiZGlzY29ubmVjdGVkLCBkaXNjYXJkaW5nIGFjayIpOworCQlnaWdfZGJnKERFQlVHX01DTUQsICIlczogZGlzY29ubmVjdGVkIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCkBAIC00MjIsMTMgKzQyNywxNCBAQAogCWJjcy0+dHJhbnNfZG93bisrOwogCiAJaWYgKCFhcCkgewotCQlkZXZfZXJyKGNzLT5kZXYsICIlczogbm8gYXBwbGljYXRpb25cbiIsIF9fZnVuY19fKTsKKwkJZ2lnX2RiZyhERUJVR19NQ01ELCAiJXM6IGFwcGxpY2F0aW9uIGdvbmUiLCBfX2Z1bmNfXyk7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBkb24ndCBzZW5kIGZ1cnRoZXIgQjMgbWVzc2FnZXMgaWYgZGlzY29ubmVjdGVkICovCiAJaWYgKGJjcy0+YXBjb25uc3RhdGUgPCBBUENPTk5fQUNUSVZFKSB7Ci0JCWdpZ19kYmcoREVCVUdfTExEQVRBLCAiZGlzY29ubmVjdGVkLCBkaXNjYXJkaW5nIGRhdGEiKTsKKwkJZ2lnX2RiZyhERUJVR19NQ01ELCAiJXM6IGRpc2Nvbm5lY3RlZCIsIF9fZnVuY19fKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcmV0dXJuOwogCX0KQEAgLTQ1NCw3ICs0NjAsNyBAQAogCS8qIERhdGE2NCBwYXJhbWV0ZXIgbm90IHByZXNlbnQgKi8KIAogCS8qIGVtaXQgbWVzc2FnZSAqLwotCWR1bXBfcmF3bXNnKERFQlVHX0xMREFUQSwgIkRBVEFfQjNfSU5EIiwgc2tiLT5kYXRhKTsKKwlkdW1wX3Jhd21zZyhERUJVR19NQ01ELCBfX2Z1bmNfXywgc2tiLT5kYXRhKTsKIAljYXBpX2N0cl9oYW5kbGVfbWVzc2FnZSgmaWlmLT5jdHIsIGFwLT5pZCwgc2tiKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdpZ2FzZXRfc2tiX3JjdmQpOwpAQCAtNzQ3LDcgKzc1Myw3IEBACiAJYXAgPSBiY3MtPmFwOwogCWlmICghYXApIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNzLT5hcGxvY2ssIGZsYWdzKTsKLQkJZGV2X2Vycihjcy0+ZGV2LCAiJXM6IG5vIGFwcGxpY2F0aW9uXG4iLCBfX2Z1bmNfXyk7CisJCWdpZ19kYmcoREVCVUdfQ01ELCAiJXM6IGFwcGxpY2F0aW9uIGdvbmUiLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAJaWYgKGJjcy0+YXBjb25uc3RhdGUgPT0gQVBDT05OX05PTkUpIHsKQEAgLTg0Myw3ICs4NDksNyBAQAogCWFwID0gYmNzLT5hcDsKIAlpZiAoIWFwKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjcy0+YXBsb2NrLCBmbGFncyk7Ci0JCWRldl9lcnIoY3MtPmRldiwgIiVzOiBubyBhcHBsaWNhdGlvblxuIiwgX19mdW5jX18pOworCQlnaWdfZGJnKERFQlVHX0NNRCwgIiVzOiBhcHBsaWNhdGlvbiBnb25lIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCWlmICghYmNzLT5hcGNvbm5zdGF0ZSkgewpAQCAtOTAxLDEzICs5MDcsMTIgQEAKICAqLwogdm9pZCBnaWdhc2V0X2lzZG5faHVwQihzdHJ1Y3QgYmNfc3RhdGUgKmJjcykKIHsKLQlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IGJjcy0+Y3M7CiAJc3RydWN0IGdpZ2FzZXRfY2FwaV9hcHBsICphcCA9IGJjcy0+YXA7CiAKIAkvKiBUb0RvOiBhc3N1cmUgb3JkZXIgb2YgRElTQ09OTkVDVF9CM19JTkQgYW5kIERJU0NPTk5FQ1RfSU5EID8gKi8KIAogCWlmICghYXApIHsKLQkJZGV2X2Vycihjcy0+ZGV2LCAiJXM6IG5vIGFwcGxpY2F0aW9uXG4iLCBfX2Z1bmNfXyk7CisJCWdpZ19kYmcoREVCVUdfQ01ELCAiJXM6IGFwcGxpY2F0aW9uIGdvbmUiLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTk3OCw2ICs5ODMsOSBAQAogCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gY3RyLT5kcml2ZXJkYXRhOwogCXN0cnVjdCBnaWdhc2V0X2NhcGlfYXBwbCAqYXA7CiAKKwlnaWdfZGJnKERFQlVHX0NNRCwgIiVzIFsldV0gbDNjbnQ9JXUgYmxrY250PSV1IGJsa2xlbj0ldSIsCisJCV9fZnVuY19fLCBhcHBsLCBycC0+bGV2ZWwzY250LCBycC0+ZGF0YWJsa2NudCwgcnAtPmRhdGFibGtsZW4pOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShhcCwgJmlpZi0+YXBwbHMsIGN0cmxpc3QpCiAJCWlmIChhcC0+aWQgPT0gYXBwbCkgewogCQkJZGV2X25vdGljZShjcy0+ZGV2LApAQCAtMTA2Miw2ICsxMDcwLDggQEAKIAlzdHJ1Y3QgZ2lnYXNldF9jYXBpX2FwcGwgKmFwLCAqdG1wOwogCXVuc2lnbmVkIGNoOwogCisJZ2lnX2RiZyhERUJVR19DTUQsICIlcyBbJXVdIiwgX19mdW5jX18sIGFwcGwpOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGFwLCB0bXAsICZpaWYtPmFwcGxzLCBjdHJsaXN0KQogCQlpZiAoYXAtPmlkID09IGFwcGwpIHsKIAkJCS8qIHJlbW92ZSBmcm9tIGFueSBjaGFubmVscyAqLwpAQCAtMTE0Miw3ICsxMTUyLDcgQEAKIAljYXNlIENBUElfRkFDSUxJVFlfU1VQUFNWQzoKIAkJLyogZGVjb2RlIEZ1bmN0aW9uIHBhcmFtZXRlciAqLwogCQlwcGFyYW0gPSBjbXNnLT5GYWNpbGl0eVJlcXVlc3RQYXJhbWV0ZXI7Ci0JCWlmIChwcGFyYW0gPT0gTlVMTCB8fCAqcHBhcmFtIDwgMikgeworCQlpZiAocHBhcmFtID09IE5VTEwgfHwgcHBhcmFtWzBdIDwgMikgewogCQkJZGV2X25vdGljZShjcy0+ZGV2LCAiJXM6ICVzIG1pc3NpbmdcbiIsICJGQUNJTElUWV9SRVEiLAogCQkJCSAgICJGYWNpbGl0eSBSZXF1ZXN0IFBhcmFtZXRlciIpOwogCQkJc2VuZF9jb25mKGlpZiwgYXAsIHNrYiwgQ2FwaUlsbE1lc3NhZ2VQYXJtQ29kaW5nKTsKQEAgLTExNTksOCArMTE2OSwzMiBAQAogCQkJLyogU3VwcG9ydGVkIFNlcnZpY2VzOiBub25lICovCiAJCQljYXBpbXNnX3NldHUzMihjb25mcGFyYW0sIDYsIDApOwogCQkJYnJlYWs7CisJCWNhc2UgQ0FQSV9TVVBQU1ZDX0xJU1RFTjoKKwkJCWlmIChwcGFyYW1bMF0gPCA3IHx8IHBwYXJhbVszXSA8IDQpIHsKKwkJCQlkZXZfbm90aWNlKGNzLT5kZXYsICIlczogJXMgbWlzc2luZ1xuIiwKKwkJCQkJICAgIkZBQ0lMSVRZX1JFUSIsICJOb3RpZmljYXRpb24gTWFzayIpOworCQkJCXNlbmRfY29uZihpaWYsIGFwLCBza2IsCisJCQkJCSAgQ2FwaUlsbE1lc3NhZ2VQYXJtQ29kaW5nKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlpZiAoQ0FQSU1TR19VMzIocHBhcmFtLCA0KSAhPSAwKSB7CisJCQkJZGV2X25vdGljZShjcy0+ZGV2LAorCSIlczogdW5zdXBwb3J0ZWQgc3VwcGxlbWVudGFyeSBzZXJ2aWNlIG5vdGlmaWNhdGlvbiBtYXNrIDB4JXhcbiIsCisJCQkJICAgIkZBQ0lMSVRZX1JFUSIsIENBUElNU0dfVTMyKHBwYXJhbSwgNCkpOworCQkJCWluZm8gPSBDYXBpRmFjaWxpdHlTcGVjaWZpY0Z1bmN0aW9uTm90U3VwcG9ydGVkOworCQkJCWNvbmZwYXJhbVszXSA9IDI7CS8qIGxlbmd0aCAqLworCQkJCWNhcGltc2dfc2V0dTE2KGNvbmZwYXJhbSwgNCwKKwkJCQkJQ2FwaVN1cHBsZW1lbnRhcnlTZXJ2aWNlTm90U3VwcG9ydGVkKTsKKwkJCX0KKwkJCWluZm8gPSBDYXBpU3VjY2VzczsKKwkJCWNvbmZwYXJhbVszXSA9IDI7CS8qIGxlbmd0aCAqLworCQkJY2FwaW1zZ19zZXR1MTYoY29uZnBhcmFtLCA0LCBDYXBpU3VjY2Vzcyk7CisJCQlicmVhazsKIAkJLyogVG9EbzogYWRkIHN1cHBvcnRlZCBzZXJ2aWNlcyAqLwogCQlkZWZhdWx0OgorCQkJZGV2X25vdGljZShjcy0+ZGV2LAorCQkiJXM6IHVuc3VwcG9ydGVkIHN1cHBsZW1lbnRhcnkgc2VydmljZSBmdW5jdGlvbiAweCUwNHhcbiIsCisJCQkJICAgIkZBQ0lMSVRZX1JFUSIsIGZ1bmN0aW9uKTsKIAkJCWluZm8gPSBDYXBpRmFjaWxpdHlTcGVjaWZpY0Z1bmN0aW9uTm90U3VwcG9ydGVkOwogCQkJLyogU3VwcGxlbWVudGFyeSBTZXJ2aWNlIHNwZWNpZmljIHBhcmFtZXRlciAqLwogCQkJY29uZnBhcmFtWzNdID0gMjsJLyogbGVuZ3RoICovCkBAIC0xOTUxLDExICsxOTg1LDcgQEAKIAl1MTYgaGFuZGxlID0gQ0FQSU1TR19IQU5ETEVfUkVRKHNrYi0+ZGF0YSk7CiAKIAkvKiBmcmVxdWVudCBtZXNzYWdlLCBhdm9pZCBfY21zZyBvdmVyaGVhZCAqLwotCWR1bXBfcmF3bXNnKERFQlVHX0xMREFUQSwgIkRBVEFfQjNfUkVRIiwgc2tiLT5kYXRhKTsKLQotCWdpZ19kYmcoREVCVUdfTExEQVRBLAotCQkiUmVjZWl2aW5nIGRhdGEgZnJvbSBMTCAoY2g6ICVkLCBmbGc6ICV4LCBzejogJWR8JWQpIiwKLQkJY2hhbm5lbCwgZmxhZ3MsIG1zZ2xlbiwgZGF0YWxlbik7CisJZHVtcF9yYXdtc2coREVCVUdfTUNNRCwgX19mdW5jX18sIHNrYi0+ZGF0YSk7CiAKIAkvKiBjaGVjayBwYXJhbWV0ZXJzICovCiAJaWYgKGNoYW5uZWwgPT0gMCB8fCBjaGFubmVsID4gY3MtPmNoYW5uZWxzIHx8IG5jY2kgIT0gMSkgewpAQCAtMjA2NCw3ICsyMDk0LDcgQEAKIAkJCSAgICBzdHJ1Y3QgZ2lnYXNldF9jYXBpX2FwcGwgKmFwLAogCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JZHVtcF9yYXdtc2coREVCVUdfTExEQVRBLCBfX2Z1bmNfXywgc2tiLT5kYXRhKTsKKwlkdW1wX3Jhd21zZyhERUJVR19NQ01ELCBfX2Z1bmNfXywgc2tiLT5kYXRhKTsKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9jb21tb24uYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2NvbW1vbi5jCmluZGV4IDVkNGJlZmIuLjNjYTU2MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2NvbW1vbi5jCkBAIC03OTEsOCArNzkxLDYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCXNldHVwX3RpbWVyKCZjcy0+dGltZXIsIHRpbWVyX3RpY2ssICh1bnNpZ25lZCBsb25nKSBjcyk7CiAJY3MtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhHSUdfVElDSyk7Ci0JLyogRklYTUU6IGNhbiBqaWZmaWVzIGluY3JlYXNlIHRvbyBtdWNoIHVudGlsIHRoZSB0aW1lciBpcyBhZGRlZD8KLQkgKiBTYW1lIHByb2JsZW0oPykgd2l0aCBtb2RfdGltZXIoKSBpbiB0aW1lcl90aWNrKCkuICovCiAJYWRkX3RpbWVyKCZjcy0+dGltZXIpOwogCiAJZ2lnX2RiZyhERUJVR19JTklULCAiY3MgaW5pdGlhbGl6ZWQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2V2LWxheWVyLmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9ldi1sYXllci5jCmluZGV4IGNlYWVmOWEuLmExNDE4NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2V2LWxheWVyLmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvZXYtbGF5ZXIuYwpAQCAtMzUsNTMgKzM1LDQwIEBACiAjZGVmaW5lIFJUX1JJTkcJCTIKICNkZWZpbmUgUlRfTlVNQkVSCTMKICNkZWZpbmUgUlRfU1RSSU5HCTQKLSNkZWZpbmUgUlRfSEVYCQk1CiAjZGVmaW5lIFJUX1pDQVUJCTYKIAogLyogUG9zc2libGUgQVNDSUkgcmVzcG9uc2VzICovCiAjZGVmaW5lIFJTUF9PSwkJMAotI2RlZmluZSBSU1BfQlVTWQkxCi0jZGVmaW5lIFJTUF9DT05ORUNUCTIKKyNkZWZpbmUgUlNQX0VSUk9SCTEKICNkZWZpbmUgUlNQX1pHQ0kJMwogI2RlZmluZSBSU1BfUklORwk0Ci0jZGVmaW5lIFJTUF9aQU9DCTUKLSNkZWZpbmUgUlNQX1pDU1RSCTYKLSNkZWZpbmUgUlNQX1pDRkdUCTcKLSNkZWZpbmUgUlNQX1pDRkcJOAotI2RlZmluZSBSU1BfWkNDUgk5Ci0jZGVmaW5lIFJTUF9FTVBUWQkxMAotI2RlZmluZSBSU1BfWkxPRwkxMQotI2RlZmluZSBSU1BfWkNBVQkxMgotI2RlZmluZSBSU1BfWk1XSQkxMwotI2RlZmluZSBSU1BfWkFCSU5GTwkxNAotI2RlZmluZSBSU1BfWlNNTFNUQ0hHCTE1CisjZGVmaW5lIFJTUF9aVkxTCTUKKyNkZWZpbmUgUlNQX1pDQVUJNgorCisvKiByZXNwb25zZXMgd2l0aCB2YWx1ZXMgdG8gc3RvcmUgaW4gYXRfc3RhdGUgKi8KKy8qIC0gbnVtZXJpYyAqLwogI2RlZmluZSBSU1BfVkFSCQkxMDAKICNkZWZpbmUgUlNQX1pTQVUJKFJTUF9WQVIgKyBWQVJfWlNBVSkKICNkZWZpbmUgUlNQX1pETEUJKFJTUF9WQVIgKyBWQVJfWkRMRSkKLSNkZWZpbmUgUlNQX1pWTFMJKFJTUF9WQVIgKyBWQVJfWlZMUykKICNkZWZpbmUgUlNQX1pDVFAJKFJTUF9WQVIgKyBWQVJfWkNUUCkKKy8qIC0gc3RyaW5nICovCiAjZGVmaW5lIFJTUF9TVFIJCShSU1BfVkFSICsgVkFSX05VTSkKICNkZWZpbmUgUlNQX05NQlIJKFJTUF9TVFIgKyBTVFJfTk1CUikKICNkZWZpbmUgUlNQX1pDUE4JKFJTUF9TVFIgKyBTVFJfWkNQTikKICNkZWZpbmUgUlNQX1pDT04JKFJTUF9TVFIgKyBTVFJfWkNPTikKICNkZWZpbmUgUlNQX1pCQwkJKFJTUF9TVFIgKyBTVFJfWkJDKQogI2RlZmluZSBSU1BfWkhMQwkoUlNQX1NUUiArIFNUUl9aSExDKQotI2RlZmluZSBSU1BfRVJST1IJLTEJLyogRVJST1IgICAgICAgICAgICAgICovCisKICNkZWZpbmUgUlNQX1dST05HX0NJRAktMgkvKiB1bmtub3duIGNpZCBpbiBjbWQgKi8KLSNkZWZpbmUgUlNQX1VOS05PV04JLTQJLyogdW5rbm93biByZXNwb25zZSAgICovCi0jZGVmaW5lIFJTUF9GQUlMCS01CS8qIGludGVybmFsIGVycm9yICAgICAqLwogI2RlZmluZSBSU1BfSU5WQUwJLTYJLyogaW52YWxpZCByZXNwb25zZSAgICovCisjZGVmaW5lIFJTUF9OT0RFVgktOQkvKiBkZXZpY2Ugbm90IGNvbm5lY3RlZCAqLwogCiAjZGVmaW5lIFJTUF9OT05FCS0xOQogI2RlZmluZSBSU1BfU1RSSU5HCS0yMAogI2RlZmluZSBSU1BfTlVMTAktMjEKLSNkZWZpbmUgUlNQX1JFVFJZRkFJTAktMjIKLSNkZWZpbmUgUlNQX1JFVFJZCS0yMwotI2RlZmluZSBSU1BfU0tJUAktMjQKICNkZWZpbmUgUlNQX0lOSVQJLTI3CiAjZGVmaW5lIFJTUF9BTlkJCS0yNgogI2RlZmluZSBSU1BfTEFTVAktMjgKLSNkZWZpbmUgUlNQX05PREVWCS05CiAKIC8qIGFjdGlvbnMgZm9yIHByb2Nlc3NfcmVzcG9uc2UgKi8KICNkZWZpbmUgQUNUX05PVEhJTkcJCTAKQEAgLTI1OSwxMyArMjQ2LDYgQEAKIAogLyogbWlzYy4gKi8KIHtSU1BfRVJST1IsCSAtMSwgIC0xLCAtMSwJCQkgLTEsIC0xLCB7QUNUX0VSUk9SfSB9LAote1JTUF9aQ0ZHVCwJIC0xLCAgLTEsIC0xLAkJCSAtMSwgLTEsIHtBQ1RfREVCVUd9IH0sCi17UlNQX1pDRkcsCSAtMSwgIC0xLCAtMSwJCQkgLTEsIC0xLCB7QUNUX0RFQlVHfSB9LAote1JTUF9aTE9HLAkgLTEsICAtMSwgLTEsCQkJIC0xLCAtMSwge0FDVF9ERUJVR30gfSwKLXtSU1BfWk1XSSwJIC0xLCAgLTEsIC0xLAkJCSAtMSwgLTEsIHtBQ1RfREVCVUd9IH0sCi17UlNQX1pBQklORk8sCSAtMSwgIC0xLCAtMSwJCQkgLTEsIC0xLCB7QUNUX0RFQlVHfSB9LAote1JTUF9aU01MU1RDSEcsCSAtMSwgIC0xLCAtMSwJCQkgLTEsIC0xLCB7QUNUX0RFQlVHfSB9LAotCiB7UlNQX1pDQVUsCSAtMSwgIC0xLCAtMSwJCQkgLTEsIC0xLCB7QUNUX1pDQVV9IH0sCiB7UlNQX05PTkUsCSAtMSwgIC0xLCAtMSwJCQkgLTEsIC0xLCB7QUNUX0RFQlVHfSB9LAoge1JTUF9BTlksCSAtMSwgIC0xLCAtMSwJCQkgLTEsIC0xLCB7QUNUX1dBUk59IH0sCkBAIC0zNjEsMTAgKzM0MSw2IEBACiAKIC8qIG1pc2MuICovCiB7UlNQX1pDT04sCSAtMSwgIC0xLCAtMSwJCQkgLTEsIC0xLCB7QUNUX0RFQlVHfSB9LAote1JTUF9aQ0NSLAkgLTEsICAtMSwgLTEsCQkJIC0xLCAtMSwge0FDVF9ERUJVR30gfSwKLXtSU1BfWkFPQywJIC0xLCAgLTEsIC0xLAkJCSAtMSwgLTEsIHtBQ1RfREVCVUd9IH0sCi17UlNQX1pDU1RSLAkgLTEsICAtMSwgLTEsCQkJIC0xLCAtMSwge0FDVF9ERUJVR30gfSwKLQoge1JTUF9aQ0FVLAkgLTEsICAtMSwgLTEsCQkJIC0xLCAtMSwge0FDVF9aQ0FVfSB9LAoge1JTUF9OT05FLAkgLTEsICAtMSwgLTEsCQkJIC0xLCAtMSwge0FDVF9ERUJVR30gfSwKIHtSU1BfQU5ZLAkgLTEsICAtMSwgLTEsCQkJIC0xLCAtMSwge0FDVF9XQVJOfSB9LApAQCAtMzg3LDIwICszNjMsMTEgQEAKIAl7IlpWTFMiLAlSU1BfWlZMUywJUlRfTlVNQkVSfSwKIAl7IlpDVFAiLAlSU1BfWkNUUCwJUlRfTlVNQkVSfSwKIAl7IlpETEUiLAlSU1BfWkRMRSwJUlRfTlVNQkVSfSwKLQl7IlpDRkdUIiwJUlNQX1pDRkdULAlSVF9OVU1CRVJ9LAotCXsiWkNDUiIsCVJTUF9aQ0NSLAlSVF9OVU1CRVJ9LAotCXsiWk1XSSIsCVJTUF9aTVdJLAlSVF9OVU1CRVJ9LAogCXsiWkhMQyIsCVJTUF9aSExDLAlSVF9TVFJJTkd9LAogCXsiWkJDIiwJCVJTUF9aQkMsCVJUX1NUUklOR30sCiAJeyJOTUJSIiwJUlNQX05NQlIsCVJUX1NUUklOR30sCiAJeyJaQ1BOIiwJUlNQX1pDUE4sCVJUX1NUUklOR30sCiAJeyJaQ09OIiwJUlNQX1pDT04sCVJUX1NUUklOR30sCi0JeyJaQU9DIiwJUlNQX1pBT0MsCVJUX1NUUklOR30sCi0JeyJaQ1NUUiIsCVJTUF9aQ1NUUiwJUlRfU1RSSU5HfSwKLQl7IlpDRkciLAlSU1BfWkNGRywJUlRfSEVYfSwKLQl7IlpMT0ciLAlSU1BfWkxPRywJUlRfTk9USElOR30sCi0JeyJaQUJJTkZPIiwJUlNQX1pBQklORk8sCVJUX05PVEhJTkd9LAotCXsiWlNNTFNUQ0hHIiwJUlNQX1pTTUxTVENIRywJUlRfTk9USElOR30sCiAJe05VTEwsCQkwLAkJMH0KIH07CiAKQEAgLTQxOCw2NCArMzg1LDE4IEBACiAJe05VTEwsCQkJCVpTQVVfVU5LTk9XTn0KIH07CiAKLS8qCi0gKiBHZXQgaW50ZWdlciBmcm9tIGNoYXItcG9pbnRlcgotICovCi1zdGF0aWMgaW50IGlzZG5fZ2V0bnVtKGNoYXIgKnApCi17Ci0JaW50IHYgPSAtMTsKLQotCWdpZ19kYmcoREVCVUdfRVZFTlQsICJzdHJpbmc6ICVzIiwgcCk7Ci0KLQl3aGlsZSAoKnAgPj0gJzAnICYmICpwIDw9ICc5JykKLQkJdiA9ICgodiA8IDApID8gMCA6ICh2ICogMTApKSArIChpbnQpICgoKnArKykgLSAnMCcpOwotCWlmICgqcCkKLQkJdiA9IC0xOyAvKiBpbnZhbGlkIENoYXJhY3RlciAqLwotCXJldHVybiB2OwotfQotCi0vKgotICogR2V0IGludGVnZXIgZnJvbSBjaGFyLXBvaW50ZXIKLSAqLwotc3RhdGljIGludCBpc2RuX2dldGhleChjaGFyICpwKQotewotCWludCB2ID0gMDsKLQlpbnQgYzsKLQotCWdpZ19kYmcoREVCVUdfRVZFTlQsICJzdHJpbmc6ICVzIiwgcCk7Ci0KLQlpZiAoISpwKQotCQlyZXR1cm4gLTE7Ci0KLQlkbyB7Ci0JCWlmICh2ID4gKElOVF9NQVggLSAxNSkgLyAxNikKLQkJCXJldHVybiAtMTsKLQkJYyA9ICpwOwotCQlpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpCi0JCQljIC09ICcwJzsKLQkJZWxzZSBpZiAoYyA+PSAnYScgJiYgYyA8PSAnZicpCi0JCQljIC09ICdhJyAtIDEwOwotCQllbHNlIGlmIChjID49ICdBJyAmJiBjIDw9ICdGJykKLQkJCWMgLT0gJ0EnIC0gMTA7Ci0JCWVsc2UKLQkJCXJldHVybiAtMTsKLQkJdiA9IHYgKiAxNiArIGM7Ci0JfSB3aGlsZSAoKisrcCk7Ci0KLQlyZXR1cm4gdjsKLX0KLQogLyogcmV0cmlldmUgQ0lEIGZyb20gcGFyc2VkIHJlc3BvbnNlCiAgKiByZXR1cm5zIDAgaWYgbm8gQ0lELCAtMSBpZiBpbnZhbGlkIENJRCwgb3IgQ0lEIHZhbHVlIDEuLjY1NTM1CiAgKi8KIHN0YXRpYyBpbnQgY2lkX29mX3Jlc3BvbnNlKGNoYXIgKnMpCiB7Ci0JaW50IGNpZDsKKwl1bnNpZ25lZCBsb25nIGNpZDsKKwlpbnQgcmM7CiAKIAlpZiAoc1stMV0gIT0gJzsnKQogCQlyZXR1cm4gMDsJLyogbm8gQ0lEIHNlcGFyYXRvciAqLwotCWNpZCA9IGlzZG5fZ2V0bnVtKHMpOwotCWlmIChjaWQgPCAwKQorCXJjID0gc3RyaWN0X3N0cnRvdWwocywgMTAsICZjaWQpOworCWlmIChyYykKIAkJcmV0dXJuIDA7CS8qIENJRCBub3QgbnVtZXJpYyAqLwogCWlmIChjaWQgPCAxIHx8IGNpZCA+IDY1NTM1KQogCQlyZXR1cm4gLTE7CS8qIENJRCBvdXQgb2YgcmFuZ2UgKi8KQEAgLTU4OCwxMCArNTA5LDEwIEBACiAJCQkJCWJyZWFrOwogCiAJCQlpZiAoIXJ0LT5yZXNwb25zZSkgewotCQkJCWV2ZW50LT50eXBlID0gUlNQX1VOS05PV047Ci0JCQkJZGV2X3dhcm4oY3MtPmRldiwKLQkJCQkJICJ1bmtub3duIG1vZGVtIHJlc3BvbnNlOiAlc1xuIiwKLQkJCQkJIGFyZ3ZbY3VyYXJnXSk7CisJCQkJZXZlbnQtPnR5cGUgPSBSU1BfTk9ORTsKKwkJCQlnaWdfZGJnKERFQlVHX0VWRU5ULAorCQkJCQkidW5rbm93biBtb2RlbSByZXNwb25zZTogJyVzJ1xuIiwKKwkJCQkJYXJndltjdXJhcmddKTsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtNjQ1LDI3ICs1NjYsMjcgQEAKIAkJY2FzZSBSVF9aQ0FVOgogCQkJZXZlbnQtPnBhcmFtZXRlciA9IC0xOwogCQkJaWYgKGN1cmFyZyArIDEgPCBwYXJhbXMpIHsKLQkJCQlpID0gaXNkbl9nZXRoZXgoYXJndltjdXJhcmddKTsKLQkJCQlqID0gaXNkbl9nZXRoZXgoYXJndltjdXJhcmcgKyAxXSk7Ci0JCQkJaWYgKGkgPj0gMCAmJiBpIDwgMjU2ICYmIGogPj0gMCAmJiBqIDwgMjU2KQotCQkJCQlldmVudC0+cGFyYW1ldGVyID0gKHVuc2lnbmVkKSBpIDw8IDgKLQkJCQkJCQkgICB8IGo7Ci0JCQkJY3VyYXJnICs9IDI7CisJCQkJdW5zaWduZWQgbG9uZyB0eXBlLCB2YWx1ZTsKKworCQkJCWkgPSBzdHJpY3Rfc3RydG91bChhcmd2W2N1cmFyZysrXSwgMTYsICZ0eXBlKTsKKwkJCQlqID0gc3RyaWN0X3N0cnRvdWwoYXJndltjdXJhcmcrK10sIDE2LCAmdmFsdWUpOworCisJCQkJaWYgKGkgPT0gMCAmJiB0eXBlIDwgMjU2ICYmCisJCQkJICAgIGogPT0gMCAmJiB2YWx1ZSA8IDI1NikKKwkJCQkJZXZlbnQtPnBhcmFtZXRlciA9ICh0eXBlIDw8IDgpIHwgdmFsdWU7CiAJCQl9IGVsc2UKIAkJCQljdXJhcmcgPSBwYXJhbXMgLSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgUlRfTlVNQkVSOgotCQljYXNlIFJUX0hFWDoKKwkJCWV2ZW50LT5wYXJhbWV0ZXIgPSAtMTsKIAkJCWlmIChjdXJhcmcgPCBwYXJhbXMpIHsKLQkJCQlpZiAocGFyYW1fdHlwZSA9PSBSVF9IRVgpCi0JCQkJCWV2ZW50LT5wYXJhbWV0ZXIgPQotCQkJCQkJaXNkbl9nZXRoZXgoYXJndltjdXJhcmddKTsKLQkJCQllbHNlCi0JCQkJCWV2ZW50LT5wYXJhbWV0ZXIgPQotCQkJCQkJaXNkbl9nZXRudW0oYXJndltjdXJhcmddKTsKLQkJCQkrK2N1cmFyZzsKLQkJCX0gZWxzZQotCQkJCWV2ZW50LT5wYXJhbWV0ZXIgPSAtMTsKKwkJCQl1bnNpZ25lZCBsb25nIHJlczsKKwkJCQlpbnQgcmM7CisKKwkJCQlyYyA9IHN0cmljdF9zdHJ0b3VsKGFyZ3ZbY3VyYXJnKytdLCAxMCwgJnJlcyk7CisJCQkJaWYgKHJjID09IDApCisJCQkJCWV2ZW50LT5wYXJhbWV0ZXIgPSByZXM7CisJCQl9CiAJCQlnaWdfZGJnKERFQlVHX0VWRU5ULCAicGFyYW1ldGVyPT0lZCIsIGV2ZW50LT5wYXJhbWV0ZXIpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTc5Nyw0OCArNzE4LDI3IEBACiBzdGF0aWMgdm9pZCBzZW5kX2NvbW1hbmQoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIGNvbnN0IGNoYXIgKmNtZCwgaW50IGNpZCwKIAkJCSBpbnQgZGxlLCBnZnBfdCBrbWFsbG9jZmxhZ3MpCiB7Ci0Jc2l6ZV90IGNtZGxlbiwgYnVmbGVuOwotCWNoYXIgKmNtZHBvcywgKmNtZGJ1ZiwgKmNtZHRhaWw7CisJc3RydWN0IGNtZGJ1Zl90ICpjYjsKKwlzaXplX3QgYnVmbGVuOwogCi0JY21kbGVuID0gc3RybGVuKGNtZCk7Ci0JYnVmbGVuID0gMTEgKyBjbWRsZW47Ci0JaWYgKHVubGlrZWx5KGJ1ZmxlbiA8PSBjbWRsZW4pKSB7Ci0JCWRldl9lcnIoY3MtPmRldiwgImludGVnZXIgb3ZlcmZsb3cgaW4gYnVmbGVuXG4iKTsKKwlidWZsZW4gPSBzdHJsZW4oY21kKSArIDEyOyAvKiBETEUgKCBBIFQgMSAyIDMgNCA1IDxjbWQ+IERMRSApIFwwICovCisJY2IgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY21kYnVmX3QpICsgYnVmbGVuLCBrbWFsbG9jZmxhZ3MpOworCWlmICghY2IpIHsKKwkJZGV2X2Vycihjcy0+ZGV2LCAiJXM6IG91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KLQotCWNtZGJ1ZiA9IGttYWxsb2MoYnVmbGVuLCBrbWFsbG9jZmxhZ3MpOwotCWlmICh1bmxpa2VseSghY21kYnVmKSkgewotCQlkZXZfZXJyKGNzLT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWNtZHBvcyA9IGNtZGJ1ZiArIDk7Ci0JY21kdGFpbCA9IGNtZHBvcyArIGNtZGxlbjsKLQltZW1jcHkoY21kcG9zLCBjbWQsIGNtZGxlbik7Ci0KLQlpZiAoY2lkID4gMCAmJiBjaWQgPD0gNjU1MzUpIHsKLQkJZG8gewotCQkJKi0tY21kcG9zID0gJzAnICsgY2lkICUgMTA7Ci0JCQljaWQgLz0gMTA7Ci0JCQkrK2NtZGxlbjsKLQkJfSB3aGlsZSAoY2lkKTsKLQl9Ci0KLQljbWRsZW4gKz0gMjsKLQkqLS1jbWRwb3MgPSAnVCc7Ci0JKi0tY21kcG9zID0gJ0EnOwotCi0JaWYgKGRsZSkgewotCQljbWRsZW4gKz0gNDsKLQkJKi0tY21kcG9zID0gJygnOwotCQkqLS1jbWRwb3MgPSAweDEwOwotCQkqY21kdGFpbCsrID0gMHgxMDsKLQkJKmNtZHRhaWwrKyA9ICcpJzsKLQl9Ci0KLQljcy0+b3BzLT53cml0ZV9jbWQoY3MsIGNtZHBvcywgY21kbGVuLCBOVUxMKTsKLQlrZnJlZShjbWRidWYpOworCWlmIChjaWQgPiAwICYmIGNpZCA8PSA2NTUzNSkKKwkJY2ItPmxlbiA9IHNucHJpbnRmKGNiLT5idWYsIGJ1ZmxlbiwKKwkJCQkgIGRsZSA/ICJcMDIwKEFUJWQlc1wwMjApIiA6ICJBVCVkJXMiLAorCQkJCSAgY2lkLCBjbWQpOworCWVsc2UKKwkJY2ItPmxlbiA9IHNucHJpbnRmKGNiLT5idWYsIGJ1ZmxlbiwKKwkJCQkgIGRsZSA/ICJcMDIwKEFUJXNcMDIwKSIgOiAiQVQlcyIsCisJCQkJICBjbWQpOworCWNiLT5vZmZzZXQgPSAwOworCWNiLT5uZXh0ID0gTlVMTDsKKwljYi0+d2FrZV90YXNrbGV0ID0gTlVMTDsKKwljcy0+b3BzLT53cml0ZV9jbWQoY3MsIGNiKTsKIH0KIAogc3RhdGljIHN0cnVjdCBhdF9zdGF0ZV90ICphdF9zdGF0ZV9mcm9tX2NpZChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgaW50IGNpZCkKQEAgLTEyNDAsOCArMTE0MCwyMiBAQAogCQlicmVhazsKIAljYXNlIEFDVF9IVVBNT0RFTToKIAkJLyogc2VuZCAiKysrIiAoaGFuZ3VwIGluIHVuaW1vZGVtIG1vZGUpICovCi0JCWlmIChjcy0+Y29ubmVjdGVkKQotCQkJY3MtPm9wcy0+d3JpdGVfY21kKGNzLCAiKysrIiwgMywgTlVMTCk7CisJCWlmIChjcy0+Y29ubmVjdGVkKSB7CisJCQlzdHJ1Y3QgY21kYnVmX3QgKmNiOworCisJCQljYiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRidWZfdCkgKyAzLCBHRlBfQVRPTUlDKTsKKwkJCWlmICghY2IpIHsKKwkJCQlkZXZfZXJyKGNzLT5kZXYsICIlczogb3V0IG9mIG1lbW9yeVxuIiwKKwkJCQkJX19mdW5jX18pOworCQkJCXJldHVybjsKKwkJCX0KKwkJCW1lbWNweShjYi0+YnVmLCAiKysrIiwgMyk7CisJCQljYi0+bGVuID0gMzsKKwkJCWNiLT5vZmZzZXQgPSAwOworCQkJY2ItPm5leHQgPSBOVUxMOworCQkJY2ItPndha2VfdGFza2xldCA9IE5VTEw7CisJCQljcy0+b3BzLT53cml0ZV9jbWQoY3MsIGNiKTsKKwkJfQogCQlicmVhazsKIAljYXNlIEFDVF9SSU5HOgogCQkvKiBnZXQgZnJlc2ggQVQgc3RhdGUgc3RydWN0dXJlIGZvciBuZXcgQ0lEICovCkBAIC0xODU1LDE5ICsxNzY5LDEzIEBACiAJCQkJZ2lnX2RiZyhERUJVR19FVkVOVCwgIlNjaGVkdWxpbmcgUENfQ0lETU9ERSIpOwogCQkJCWNzLT5jb21tYW5kc19wZW5kaW5nID0gMTsKIAkJCQlyZXR1cm47Ci0jaWZkZWYgR0lHX01BWUlOSVRPTkRJQUwKIAkJCWNhc2UgTV9VTktOT1dOOgogCQkJCXNjaGVkdWxlX2luaXQoY3MsIE1TX0lOSVQpOwogCQkJCXJldHVybjsKLSNlbmRpZgogCQkJfQogCQkJYmNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzICY9IH5QQ19DSUQ7CiAJCQljcy0+Y3VyY2hhbm5lbCA9IGJjcy0+Y2hhbm5lbDsKLSNpZmRlZiBHSUdfUkVUUllDSUQKIAkJCWNzLT5yZXRyeV9jb3VudCA9IDI7Ci0jZWxzZQotCQkJY3MtPnJldHJ5X2NvdW50ID0gMTsKLSNlbmRpZgogCQkJc2NoZWR1bGVfc2VxdWVuY2UoY3MsICZjcy0+YXRfc3RhdGUsIFNFUV9DSUQpOwogCQkJcmV0dXJuOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9naWdhc2V0LmggYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9naWdhc2V0LmgKaW5kZXggODczOGIwOC4uYTY5NTEyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvZ2lnYXNldC5oCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2dpZ2FzZXQuaApAQCAtNDYsMTMgKzQ2LDYgQEAKIAogI2RlZmluZSBSQlVGU0laRSA4MTkyCiAKLS8qIGNvbXBpbGUgdGltZSBvcHRpb25zICovCi0jZGVmaW5lIEdJR19NQUpPUiAwCi0KLSNkZWZpbmUgR0lHX01BWUlOSVRPTkRJQUwKLSNkZWZpbmUgR0lHX1JFVFJZQ0lECi0jZGVmaW5lIEdJR19YNzUKLQogI2RlZmluZSBHSUdfVElDSyAxMDAJCS8qIGluIG1pbGxpc2Vjb25kcyAqLwogCiAvKiB0aW1lb3V0IHZhbHVlcyAodW5pdDogMSBzZWMpICovCkBAIC0xOTMsOSArMTg2LDggQEAKIC8qIHZhcmlhYmxlcyBpbiBzdHJ1Y3QgYXRfc3RhdGVfdCAqLwogI2RlZmluZSBWQVJfWlNBVQkwCiAjZGVmaW5lIFZBUl9aRExFCTEKLSNkZWZpbmUgVkFSX1pWTFMJMgotI2RlZmluZSBWQVJfWkNUUAkzCi0jZGVmaW5lIFZBUl9OVU0JCTQKKyNkZWZpbmUgVkFSX1pDVFAJMgorI2RlZmluZSBWQVJfTlVNCQkzCiAKICNkZWZpbmUgU1RSX05NQlIJMAogI2RlZmluZSBTVFJfWkNQTgkxCkBAIC01NzQsOSArNTY2LDcgQEAKIHN0cnVjdCBnaWdhc2V0X29wcyB7CiAJLyogQ2FsbGVkIGZyb20gZXYtbGF5ZXIuYy9pbnRlcmZhY2UuYyBmb3Igc2VuZGluZyBBVCBjb21tYW5kcyB0byB0aGUKIAkgICBkZXZpY2UgKi8KLQlpbnQgKCp3cml0ZV9jbWQpKHN0cnVjdCBjYXJkc3RhdGUgKmNzLAotCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbiwKLQkJCSBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKndha2VfdGFza2xldCk7CisJaW50ICgqd3JpdGVfY21kKShzdHJ1Y3QgY2FyZHN0YXRlICpjcywgc3RydWN0IGNtZGJ1Zl90ICpjYik7CiAKIAkvKiBDYWxsZWQgZnJvbSBpbnRlcmZhY2UuYyBmb3IgYWRkaXRpb25hbCBkZXZpY2UgY29udHJvbCAqLwogCWludCAoKndyaXRlX3Jvb20pKHN0cnVjdCBjYXJkc3RhdGUgKmNzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2k0bC5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaTRsLmMKaW5kZXggZjAxYzNjMi4uMzRiY2EzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaTRsLmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaTRsLmMKQEAgLTQxOSw2ICs0MTksOCBAQAogCWRldl9lcnIoYmNzLT5jcy0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CiAJZm9yIChpID0gMDsgaSA8IEFUX05VTTsgKytpKQogCQlrZnJlZShjb21tYW5kc1tpXSk7CisJa2ZyZWUoY29tbWFuZHMpOworCWdpZ2FzZXRfZnJlZV9jaGFubmVsKGJjcyk7CiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKQEAgLTY0Myw5ICs2NDUsNyBAQAogCWlpZi0+bWF4YnVmc2l6ZSA9IE1BWF9CVUZfU0laRTsKIAlpaWYtPmZlYXR1cmVzID0gSVNETl9GRUFUVVJFX0wyX1RSQU5TIHwKIAkJSVNETl9GRUFUVVJFX0wyX0hETEMgfAotI2lmZGVmIEdJR19YNzUKIAkJSVNETl9GRUFUVVJFX0wyX1g3NUkgfAotI2VuZGlmCiAJCUlTRE5fRkVBVFVSRV9MM19UUkFOUyB8CiAJCUlTRE5fRkVBVFVSRV9QX0VVUk87CiAJaWlmLT5obF9oZHJsZW4gPSBIV19IRFJfTEVOOwkJLyogQXJlYSBmb3Igc3RvcmluZyBhY2sgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2ludGVyZmFjZS5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaW50ZXJmYWNlLmMKaW5kZXggYzlmMjhkZC4uYmI3MTBkMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2ludGVyZmFjZS5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2ludGVyZmFjZS5jCkBAIC0zMzksNyArMzM5LDggQEAKIHN0YXRpYyBpbnQgaWZfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCiB7CiAJc3RydWN0IGNhcmRzdGF0ZSAqY3M7Ci0JaW50IHJldHZhbCA9IC1FTk9ERVY7CisJc3RydWN0IGNtZGJ1Zl90ICpjYjsKKwlpbnQgcmV0dmFsOwogCiAJY3MgPSAoc3RydWN0IGNhcmRzdGF0ZSAqKSB0dHktPmRyaXZlcl9kYXRhOwogCWlmICghY3MpIHsKQEAgLTM1NSwxOCArMzU2LDM5IEBACiAJaWYgKCFjcy0+Y29ubmVjdGVkKSB7CiAJCWdpZ19kYmcoREVCVUdfSUYsICJub3QgY29ubmVjdGVkIik7CiAJCXJldHZhbCA9IC1FTk9ERVY7Ci0JfSBlbHNlIGlmICghY3MtPm9wZW5fY291bnQpCisJCWdvdG8gZG9uZTsKKwl9CisJaWYgKCFjcy0+b3Blbl9jb3VudCkgewogCQlkZXZfd2Fybihjcy0+ZGV2LCAiJXM6IGRldmljZSBub3Qgb3BlbmVkXG4iLCBfX2Z1bmNfXyk7Ci0JZWxzZSBpZiAoY3MtPm1zdGF0ZSAhPSBNU19MT0NLRUQpIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBkb25lOworCX0KKwlpZiAoY3MtPm1zdGF0ZSAhPSBNU19MT0NLRUQpIHsKIAkJZGV2X3dhcm4oY3MtPmRldiwgImNhbid0IHdyaXRlIHRvIHVubG9ja2VkIGRldmljZVxuIik7CiAJCXJldHZhbCA9IC1FQlVTWTsKLQl9IGVsc2UgewotCQlyZXR2YWwgPSBjcy0+b3BzLT53cml0ZV9jbWQoY3MsIGJ1ZiwgY291bnQsCi0JCQkJCSAgICAmY3MtPmlmX3dha2VfdGFza2xldCk7CisJCWdvdG8gZG9uZTsKKwl9CisJaWYgKGNvdW50IDw9IDApIHsKKwkJLyogbm90aGluZyB0byBkbyAqLworCQlyZXR2YWwgPSAwOworCQlnb3RvIGRvbmU7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOworCWNiID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNtZGJ1Zl90KSArIGNvdW50LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNiKSB7CisJCWRldl9lcnIoY3MtPmRldiwgIiVzOiBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CiAKKwltZW1jcHkoY2ItPmJ1ZiwgYnVmLCBjb3VudCk7CisJY2ItPmxlbiA9IGNvdW50OworCWNiLT5vZmZzZXQgPSAwOworCWNiLT5uZXh0ID0gTlVMTDsKKwljYi0+d2FrZV90YXNrbGV0ID0gJmNzLT5pZl93YWtlX3Rhc2tsZXQ7CisJcmV0dmFsID0gY3MtPm9wcy0+d3JpdGVfY21kKGNzLCBjYik7Citkb25lOgorCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC02NTUsNyArNjc3LDYgQEAKIAkJZ290byBlbm9tZW07CiAKIAl0dHktPm1hZ2ljID0JCVRUWV9EUklWRVJfTUFHSUMsCi0JdHR5LT5tYWpvciA9CQlHSUdfTUFKT1IsCiAJdHR5LT50eXBlID0JCVRUWV9EUklWRVJfVFlQRV9TRVJJQUwsCiAJdHR5LT5zdWJ0eXBlID0JCVNFUklBTF9UWVBFX05PUk1BTCwKIAl0dHktPmZsYWdzID0JCVRUWV9EUklWRVJfUkVBTF9SQVcgfCBUVFlfRFJJVkVSX0RZTkFNSUNfREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvc2VyLWdpZ2FzZXQuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Nlci1naWdhc2V0LmMKaW5kZXggZTk2YzA1OC4uZDE1MWRjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvc2VyLWdpZ2FzZXQuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9zZXItZ2lnYXNldC5jCkBAIC0yNDEsMzAgKzI0MSwxMyBAQAogICogcmV0dXJuIHZhbHVlOgogICoJbnVtYmVyIG9mIGJ5dGVzIHF1ZXVlZCwgb3IgZXJyb3IgY29kZSA8IDAKICAqLwotc3RhdGljIGludCBnaWdhc2V0X3dyaXRlX2NtZChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAotCQkJICAgICBpbnQgbGVuLCBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKndha2VfdGFza2xldCkKK3N0YXRpYyBpbnQgZ2lnYXNldF93cml0ZV9jbWQoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHN0cnVjdCBjbWRidWZfdCAqY2IpCiB7Ci0Jc3RydWN0IGNtZGJ1Zl90ICpjYjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZ2lnYXNldF9kYmdfYnVmZmVyKGNzLT5tc3RhdGUgIT0gTVNfTE9DS0VEID8KIAkJCQlERUJVR19UUkFOU0NNRCA6IERFQlVHX0xPQ0tDTUQsCi0JCQkgICAiQ01EIFRyYW5zbWl0IiwgbGVuLCBidWYpOwotCi0JaWYgKGxlbiA8PSAwKQotCQlyZXR1cm4gMDsKLQotCWNiID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNtZGJ1Zl90KSArIGxlbiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFjYikgewotCQlkZXZfZXJyKGNzLT5kZXYsICIlczogb3V0IG9mIG1lbW9yeSFcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JbWVtY3B5KGNiLT5idWYsIGJ1ZiwgbGVuKTsKLQljYi0+bGVuID0gbGVuOwotCWNiLT5vZmZzZXQgPSAwOwotCWNiLT5uZXh0ID0gTlVMTDsKLQljYi0+d2FrZV90YXNrbGV0ID0gd2FrZV90YXNrbGV0OworCQkJICAgIkNNRCBUcmFuc21pdCIsIGNiLT5sZW4sIGNiLT5idWYpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5jbWRsb2NrLCBmbGFncyk7CiAJY2ItPnByZXYgPSBjcy0+bGFzdGNtZGJ1ZjsKQEAgLTI3Miw5ICsyNTUsOSBAQAogCQljcy0+bGFzdGNtZGJ1Zi0+bmV4dCA9IGNiOwogCWVsc2UgewogCQljcy0+Y21kYnVmID0gY2I7Ci0JCWNzLT5jdXJsZW4gPSBsZW47CisJCWNzLT5jdXJsZW4gPSBjYi0+bGVuOwogCX0KLQljcy0+Y21kYnl0ZXMgKz0gbGVuOworCWNzLT5jbWRieXRlcyArPSBjYi0+bGVuOwogCWNzLT5sYXN0Y21kYnVmID0gY2I7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmNtZGxvY2ssIGZsYWdzKTsKIApAQCAtMjgyLDcgKzI2NSw3IEBACiAJaWYgKGNzLT5jb25uZWN0ZWQpCiAJCXRhc2tsZXRfc2NoZWR1bGUoJmNzLT53cml0ZV90YXNrbGV0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwotCXJldHVybiBsZW47CisJcmV0dXJuIGNiLT5sZW47CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC91c2ItZ2lnYXNldC5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvdXNiLWdpZ2FzZXQuYwppbmRleCA3NmRiYjIwLi40YTY2MzM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC91c2ItZ2lnYXNldC5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L3VzYi1naWdhc2V0LmMKQEAgLTM5LDcgKzM5LDggQEAKICNkZWZpbmUgR0lHQVNFVF9NT0RVTEVOQU1FICJ1c2JfZ2lnYXNldCIKICNkZWZpbmUgR0lHQVNFVF9ERVZOQU1FICAgICJ0dHlHVSIKIAotI2RlZmluZSBJRl9XUklURUJVRiAyMDAwCS8qIGFyYml0cmFyeSBsaW1pdCAqLworLyogbGVuZ3RoIGxpbWl0IGFjY29yZGluZyB0byBTaWVtZW5zIDMwNzB1c2ItcHJvdG9rb2xsLmRvYyBjaC4gMi4xICovCisjZGVmaW5lIElGX1dSSVRFQlVGIDI2NAogCiAvKiBWYWx1ZXMgZm9yIHRoZSBHaWdhc2V0IE0xMDUgRGF0YSAqLwogI2RlZmluZSBVU0JfTTEwNV9WRU5ET1JfSUQJMHgwNjgxCkBAIC00OTMsMjkgKzQ5NCwxMyBAQAogfQogCiAvKiBTZW5kIGNvbW1hbmQgdG8gZGV2aWNlLiAqLwotc3RhdGljIGludCBnaWdhc2V0X3dyaXRlX2NtZChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAotCQkJICAgICBpbnQgbGVuLCBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKndha2VfdGFza2xldCkKK3N0YXRpYyBpbnQgZ2lnYXNldF93cml0ZV9jbWQoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHN0cnVjdCBjbWRidWZfdCAqY2IpCiB7Ci0Jc3RydWN0IGNtZGJ1Zl90ICpjYjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZ2lnYXNldF9kYmdfYnVmZmVyKGNzLT5tc3RhdGUgIT0gTVNfTE9DS0VEID8KIAkJCSAgICAgREVCVUdfVFJBTlNDTUQgOiBERUJVR19MT0NLQ01ELAotCQkJICAgIkNNRCBUcmFuc21pdCIsIGxlbiwgYnVmKTsKLQotCWlmIChsZW4gPD0gMCkKLQkJcmV0dXJuIDA7Ci0JY2IgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY21kYnVmX3QpICsgbGVuLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWNiKSB7Ci0JCWRldl9lcnIoY3MtPmRldiwgIiVzOiBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCW1lbWNweShjYi0+YnVmLCBidWYsIGxlbik7Ci0JY2ItPmxlbiA9IGxlbjsKLQljYi0+b2Zmc2V0ID0gMDsKLQljYi0+bmV4dCA9IE5VTEw7Ci0JY2ItPndha2VfdGFza2xldCA9IHdha2VfdGFza2xldDsKKwkJCSAgICJDTUQgVHJhbnNtaXQiLCBjYi0+bGVuLCBjYi0+YnVmKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+Y21kbG9jaywgZmxhZ3MpOwogCWNiLT5wcmV2ID0gY3MtPmxhc3RjbWRidWY7CkBAIC01MjMsOSArNTA4LDkgQEAKIAkJY3MtPmxhc3RjbWRidWYtPm5leHQgPSBjYjsKIAllbHNlIHsKIAkJY3MtPmNtZGJ1ZiA9IGNiOwotCQljcy0+Y3VybGVuID0gbGVuOworCQljcy0+Y3VybGVuID0gY2ItPmxlbjsKIAl9Ci0JY3MtPmNtZGJ5dGVzICs9IGxlbjsKKwljcy0+Y21kYnl0ZXMgKz0gY2ItPmxlbjsKIAljcy0+bGFzdGNtZGJ1ZiA9IGNiOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5jbWRsb2NrLCBmbGFncyk7CiAKQEAgLTUzMyw3ICs1MTgsNyBAQAogCWlmIChjcy0+Y29ubmVjdGVkKQogCQl0YXNrbGV0X3NjaGVkdWxlKCZjcy0+d3JpdGVfdGFza2xldCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gbGVuOworCXJldHVybiBjYi0+bGVuOwogfQogCiBzdGF0aWMgaW50IGdpZ2FzZXRfd3JpdGVfcm9vbShzdHJ1Y3QgY2FyZHN0YXRlICpjcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYXZtX2NzLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2F2bV9jcy5jCmluZGV4IGY0MTBkMGUuLjA5YjE3OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYXZtX2NzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9hdm1fY3MuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzY29kZS5oPgpAQCAtNzYsOSArNzUsOCBAQAogewogCiAgICAgLyogVGhlIGlvIHN0cnVjdHVyZSBkZXNjcmliZXMgSU8gcG9ydCBtYXBwaW5nICovCi0gICAgcF9kZXYtPmlvLk51bVBvcnRzMSA9IDE2OwotICAgIHBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotICAgIHBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOworICAgIHBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gMTY7CisgICAgcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfODsKIAogICAgIC8qIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gKi8KICAgICBwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwpAQCAtMTIwLDEzICsxMTgsOSBAQAogCWlmIChjZi0+aW8ubndpbiA8PSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7Ci0JcF9kZXYtPmlvLk51bVBvcnRzMSA9IGNmLT5pby53aW5bMF0ubGVuOwotCXBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOwotCXByaW50ayhLRVJOX0lORk8gImF2bV9jczogdGVzdGluZyBpL28gJSN4LSUjeFxuIiwKLQkgICAgICAgcF9kZXYtPmlvLkJhc2VQb3J0MSwKLQkgICAgICAgcF9kZXYtPmlvLkJhc2VQb3J0MStwX2Rldi0+aW8uTnVtUG9ydHMxLTEpOwotCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbyk7CisJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGNmLT5pby53aW5bMF0uYmFzZTsKKwlwX2Rldi0+cmVzb3VyY2VbMF0tPmVuZCA9IGNmLT5pby53aW5bMF0ubGVuOworCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2Rldik7CiB9CiAKIHN0YXRpYyBpbnQgYXZtY3NfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQpAQCAtMTkyLDkgKzE4NiwxMCBAQAogCWRlZmF1bHQ6CiAgICAgICAgIGNhc2UgQVZNX0NBUkRUWVBFX0IxOiBhZGRjYXJkID0gYjFwY21jaWFfYWRkY2FyZF9iMTsgYnJlYWs7CiAgICAgfQotICAgIGlmICgoaSA9ICgqYWRkY2FyZCkobGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pcnEpKSA8IDApIHsKLQkgICAgZGV2X2VycigmbGluay0+ZGV2LCAiYXZtX2NzOiBmYWlsZWQgdG8gYWRkIEFWTS1Db250cm9sbGVyIGF0IGkvbyAlI3gsIGlycSAlZFxuIiwKLQkJICAgIGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aXJxKTsKKyAgICBpZiAoKGkgPSAoKmFkZGNhcmQpKGxpbmstPnJlc291cmNlWzBdLT5zdGFydCwgbGluay0+aXJxKSkgPCAwKSB7CisJICAgIGRldl9lcnIoJmxpbmstPmRldiwKKwkJICAgICJhdm1fY3M6IGZhaWxlZCB0byBhZGQgQVZNLUNvbnRyb2xsZXIgYXQgaS9vICUjeCwgaXJxICVkXG4iLAorCQkgICAgKHVuc2lnbmVkIGludCkgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0LCBsaW5rLT5pcnEpOwogCSAgICBhdm1jc19yZWxlYXNlKGxpbmspOwogCSAgICByZXR1cm4gLUVOT0RFVjsKICAgICB9CkBAIC0yMTIsNyArMjA3LDcgQEAKIAogc3RhdGljIHZvaWQgYXZtY3NfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQliMXBjbWNpYV9kZWxjYXJkKGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aXJxKTsKKwliMXBjbWNpYV9kZWxjYXJkKGxpbmstPnJlc291cmNlWzBdLT5zdGFydCwgbGluay0+aXJxKTsKIAlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9IC8qIGF2bWNzX3JlbGVhc2UgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFtbnQuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhbW50LmMKaW5kZXggMWU4NWY3NC4uZjFkNDY0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFtbnQuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YW1udC5jCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgInBsYXRmb3JtLmgiCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiZGl2YXN5bmMuaCIKICNpbmNsdWRlICJkZWJ1Z19pZi5oIgogCitzdGF0aWMgREVGSU5FX01VVEVYKG1haW50X211dGV4KTsKIHN0YXRpYyBjaGFyICptYWluX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMS4zMi42LjEwICQiOwogCiBzdGF0aWMgaW50IG1ham9yOwpAQCAtMTMwLDcgKzEzMSw3IEBACiB7CiAJaW50IHJldDsKIAotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmbWFpbnRfbXV0ZXgpOwogCS8qIG9ubHkgb25lIG9wZW4gaXMgYWxsb3dlZCwgc28gd2UgdGVzdAogCSAgIGl0IGF0b21pY2FsbHkgKi8KIAlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmb3BlbmVkKSkKQEAgLTEzOSw3ICsxNDAsNyBAQAogCQlmaWxlcC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKIAkJcmV0ID0gbm9uc2Vla2FibGVfb3Blbihpbm8sIGZpbGVwKTsKIAl9Ci0JdW5sb2NrX2tlcm5lbCgpOworCW11dGV4X3VubG9jaygmbWFpbnRfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc2kuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc2kuYwppbmRleCBmNTc3NzE5Li40MmQzYjgzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFzaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc2kuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgInBsYXRmb3JtLmgiCkBAIC00MDIsNyArNDAxLDYgQEAKIAogc3RhdGljIGludCB1bV9pZGlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQljeWNsZV9rZXJuZWxfbG9jaygpOwogCXJldHVybiAoMCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc21haW4uYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc21haW4uYwppbmRleCBmYmJjYjI3Li5lZDljNTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YXNtYWluLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFzbWFpbi5jCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgInBsYXRmb3JtLmgiCiAjdW5kZWYgSURfTUFTSwpAQCAtMTEzLDQxICsxMTIsNDAgQEAKICAgVGhpcyB0YWJsZSBzaG91bGQgYmUgc29ydGVkIGJ5IFBDSSBkZXZpY2UgSUQKICAgKi8KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBkaXZhc19wY2lfdGJsW10gPSB7Ci0vKiBEaXZhIFNlcnZlciBCUkktMk0gUENJIDB4RTAxMCAqLwotCXtQQ0lfVkVORE9SX0lEX0VJQ09OLCBQQ0lfREVWSUNFX0lEX0VJQ09OX01BRVNUUkEsCi0JIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENBUkRUWVBFX01BRVNUUkFfUENJfSwKLS8qIERpdmEgU2VydmVyIDRCUkktOE0gUENJIDB4RTAxMiAqLwotCXtQQ0lfVkVORE9SX0lEX0VJQ09OLCBQQ0lfREVWSUNFX0lEX0VJQ09OX01BRVNUUkFRLAotCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDQVJEVFlQRV9ESVZBU1JWX1FfOE1fUENJfSwKLS8qIERpdmEgU2VydmVyIDRCUkktOE0gMi4wIFBDSSAweEUwMTMgKi8KLQl7UENJX1ZFTkRPUl9JRF9FSUNPTiwgUENJX0RFVklDRV9JRF9FSUNPTl9NQUVTVFJBUV9VLAotCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDQVJEVFlQRV9ESVZBU1JWX1FfOE1fVjJfUENJfSwKLS8qIERpdmEgU2VydmVyIFBSSS0zME0gUENJIDB4RTAxNCAqLwotCXtQQ0lfVkVORE9SX0lEX0VJQ09OLCBQQ0lfREVWSUNFX0lEX0VJQ09OX01BRVNUUkFQLAotCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDQVJEVFlQRV9ESVZBU1JWX1BfMzBNX1BDSX0sCi0vKiBEaXZhIFNlcnZlciBQUkkgMi4wIGFkYXB0ZXIgMHhFMDE1ICovCi0Je1BDSV9WRU5ET1JfSURfRUlDT04sIFBDSV9ERVZJQ0VfSURfRUlDT05fTUFFU1RSQVBfMiwKLQkgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0FSRFRZUEVfRElWQVNSVl9QXzMwTV9WMl9QQ0l9LAotLyogRGl2YSBTZXJ2ZXIgVm9pY2UgNEJSSS04TSBQQ0kgMHhFMDE2ICovCi0Je1BDSV9WRU5ET1JfSURfRUlDT04sIFBDSV9ERVZJQ0VfSURfRUlDT05fNEJSSV9WT0lQLAotCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDQVJEVFlQRV9ESVZBU1JWX1ZPSUNFX1FfOE1fUENJfSwKLS8qIERpdmEgU2VydmVyIFZvaWNlIDRCUkktOE0gMi4wIFBDSSAweEUwMTcgKi8KLQl7UENJX1ZFTkRPUl9JRF9FSUNPTiwgUENJX0RFVklDRV9JRF9FSUNPTl80QlJJXzJfVk9JUCwKLQkgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0FSRFRZUEVfRElWQVNSVl9WT0lDRV9RXzhNX1YyX1BDSX0sCi0vKiBEaXZhIFNlcnZlciBCUkktMk0gMi4wIFBDSSAweEUwMTggKi8KLQl7UENJX1ZFTkRPUl9JRF9FSUNPTiwgUENJX0RFVklDRV9JRF9FSUNPTl9CUkkyTV8yLAotCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDQVJEVFlQRV9ESVZBU1JWX0JfMk1fVjJfUENJfSwKLS8qIERpdmEgU2VydmVyIFZvaWNlIFBSSSAyLjAgUENJIDB4RTAxOSAqLwotCXtQQ0lfVkVORE9SX0lEX0VJQ09OLCBQQ0lfREVWSUNFX0lEX0VJQ09OX01BRVNUUkFQXzJfVk9JUCwKLQkgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKLQkgQ0FSRFRZUEVfRElWQVNSVl9WT0lDRV9QXzMwTV9WMl9QQ0l9LAotLyogRGl2YSBTZXJ2ZXIgMkZYIDB4RTAxQSAqLwotCXtQQ0lfVkVORE9SX0lEX0VJQ09OLCBQQ0lfREVWSUNFX0lEX0VJQ09OXzJGLAotCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDQVJEVFlQRV9ESVZBU1JWX0JfMkZfUENJfSwKLS8qIERpdmEgU2VydmVyIFZvaWNlIEJSSS0yTSAyLjAgUENJIDB4RTAxQiAqLwotCXtQQ0lfVkVORE9SX0lEX0VJQ09OLCBQQ0lfREVWSUNFX0lEX0VJQ09OX0JSSTJNXzJfVk9JUCwKLQkgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0FSRFRZUEVfRElWQVNSVl9WT0lDRV9CXzJNX1YyX1BDSX0sCi0JezAsfQkJCS8qIDAgdGVybWluYXRlZCBsaXN0LiAqLworCS8qIERpdmEgU2VydmVyIEJSSS0yTSBQQ0kgMHhFMDEwICovCisJeyBQQ0lfVkRFVklDRShFSUNPTiwgUENJX0RFVklDRV9JRF9FSUNPTl9NQUVTVFJBKSwKKwkJQ0FSRFRZUEVfTUFFU1RSQV9QQ0kgfSwKKwkvKiBEaXZhIFNlcnZlciA0QlJJLThNIFBDSSAweEUwMTIgKi8KKwl7IFBDSV9WREVWSUNFKEVJQ09OLCBQQ0lfREVWSUNFX0lEX0VJQ09OX01BRVNUUkFRKSwKKwkJQ0FSRFRZUEVfRElWQVNSVl9RXzhNX1BDSSB9LAorCS8qIERpdmEgU2VydmVyIDRCUkktOE0gMi4wIFBDSSAweEUwMTMgKi8KKwl7IFBDSV9WREVWSUNFKEVJQ09OLCBQQ0lfREVWSUNFX0lEX0VJQ09OX01BRVNUUkFRX1UpLAorCQlDQVJEVFlQRV9ESVZBU1JWX1FfOE1fVjJfUENJIH0sCisJLyogRGl2YSBTZXJ2ZXIgUFJJLTMwTSBQQ0kgMHhFMDE0ICovCisJeyBQQ0lfVkRFVklDRShFSUNPTiwgUENJX0RFVklDRV9JRF9FSUNPTl9NQUVTVFJBUCksCisJCUNBUkRUWVBFX0RJVkFTUlZfUF8zME1fUENJIH0sCisJLyogRGl2YSBTZXJ2ZXIgUFJJIDIuMCBhZGFwdGVyIDB4RTAxNSAqLworCXsgUENJX1ZERVZJQ0UoRUlDT04sIFBDSV9ERVZJQ0VfSURfRUlDT05fTUFFU1RSQVBfMiksCisJCUNBUkRUWVBFX0RJVkFTUlZfUF8zME1fVjJfUENJIH0sCisJLyogRGl2YSBTZXJ2ZXIgVm9pY2UgNEJSSS04TSBQQ0kgMHhFMDE2ICovCisJeyBQQ0lfVkRFVklDRShFSUNPTiwgUENJX0RFVklDRV9JRF9FSUNPTl80QlJJX1ZPSVApLAorCQlDQVJEVFlQRV9ESVZBU1JWX1ZPSUNFX1FfOE1fUENJIH0sCisJLyogRGl2YSBTZXJ2ZXIgVm9pY2UgNEJSSS04TSAyLjAgUENJIDB4RTAxNyAqLworCXsgUENJX1ZERVZJQ0UoRUlDT04sIFBDSV9ERVZJQ0VfSURfRUlDT05fNEJSSV8yX1ZPSVApLAorCQlDQVJEVFlQRV9ESVZBU1JWX1ZPSUNFX1FfOE1fVjJfUENJIH0sCisJLyogRGl2YSBTZXJ2ZXIgQlJJLTJNIDIuMCBQQ0kgMHhFMDE4ICovCisJeyBQQ0lfVkRFVklDRShFSUNPTiwgUENJX0RFVklDRV9JRF9FSUNPTl9CUkkyTV8yKSwKKwkJQ0FSRFRZUEVfRElWQVNSVl9CXzJNX1YyX1BDSSB9LAorCS8qIERpdmEgU2VydmVyIFZvaWNlIFBSSSAyLjAgUENJIDB4RTAxOSAqLworCXsgUENJX1ZERVZJQ0UoRUlDT04sIFBDSV9ERVZJQ0VfSURfRUlDT05fTUFFU1RSQVBfMl9WT0lQKSwKKwkJQ0FSRFRZUEVfRElWQVNSVl9WT0lDRV9QXzMwTV9WMl9QQ0kgfSwKKwkvKiBEaXZhIFNlcnZlciAyRlggMHhFMDFBICovCisJeyBQQ0lfVkRFVklDRShFSUNPTiwgUENJX0RFVklDRV9JRF9FSUNPTl8yRiksCisJCUNBUkRUWVBFX0RJVkFTUlZfQl8yRl9QQ0kgfSwKKwkvKiBEaXZhIFNlcnZlciBWb2ljZSBCUkktMk0gMi4wIFBDSSAweEUwMUIgKi8KKwl7IFBDSV9WREVWSUNFKEVJQ09OLCBQQ0lfREVWSUNFX0lEX0VJQ09OX0JSSTJNXzJfVk9JUCksCisJCUNBUkRUWVBFX0RJVkFTUlZfVk9JQ0VfQl8yTV9WMl9QQ0kgfSwKKwl7IDAsIH0JCQkvKiAwIHRlcm1pbmF0ZWQgbGlzdC4gKi8KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZGl2YXNfcGNpX3RibCk7CiAKQEAgLTU4MSw3ICs1NzksNiBAQAogICovCiBzdGF0aWMgaW50IGRpdmFzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JY3ljbGVfa2VybmVsX2xvY2soKTsKIAlyZXR1cm4gKDApOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vYXZtZnJpdHouYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9hdm1mcml0ei5jCmluZGV4IGQ0MjE1MzYuLjQ3MmEyYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9hdm1mcml0ei5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9hdm1mcml0ei5jCkBAIC0xMTE2LDcgKzExMTYsNyBAQAogCQlyZWxlYXNlX2NhcmQoY2FyZCk7CiAJZWxzZQogCQlpZiAoZGVidWcpCi0JCQlwcl9pbmZvKCIlczogZHJ2ZGF0YSBhbGxyZWFkeSByZW1vdmVkXG4iLCBfX2Z1bmNfXyk7CisJCQlwcl9pbmZvKCIlczogZHJ2ZGF0YSBhbHJlYWR5IHJlbW92ZWRcbiIsIF9fZnVuY19fKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGZjcGNpX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjbXVsdGkuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNtdWx0aS5jCmluZGV4IDA5NWVkNzYuLjRlMzc4MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNtdWx0aS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNtdWx0aS5jCkBAIC00MjY4LDcgKzQyNjgsNyBAQAogCQlnb3RvIGVycm9yOwogCS8qCiAJICogRmluYWxseSBlbmFibGUgSVJRIG91dHB1dAotCSAqIHRoaXMgaXMgb25seSBhbGxvd2VkLCBpZiBhbiBJUlEgcm91dGluZSBpcyBhbGxyZWFkeQorCSAqIHRoaXMgaXMgb25seSBhbGxvd2VkLCBpZiBhbiBJUlEgcm91dGluZSBpcyBhbHJlYWR5CiAJICogZXN0YWJsaXNoZWQgZm9yIHRoaXMgSEZDLCBzbyBkb24ndCBkbyB0aGF0IGVhcmxpZXIKIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaGMtPmxvY2ssIGZsYWdzKTsKQEAgLTUyMTIsNyArNTIxMiw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJkhGQ2xvY2ssIGZsYWdzKTsKIAl9ICBlbHNlIHsKIAkJaWYgKGRlYnVnKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkcnZkYXRhIGFsbHJlYWR5IHJlbW92ZWRcbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRydmRhdGEgYWxyZWFkeSByZW1vdmVkXG4iLAogCQkJICAgIF9fZnVuY19fKTsKIAl9CiB9CkBAIC01MzU0LDEyICs1MzU0LDkgQEAKIAl7IFBDSV9WRU5ET1JfSURfQ0NELCBQQ0lfREVWSUNFX0lEX0NDRF9IRkNFMSwgUENJX1ZFTkRPUl9JRF9DQ0QsCiAJCVBDSV9TVUJERVZJQ0VfSURfQ0NEX0pIU0UxLCAwLCAwLCBIKDI1KX0sIC8qIEp1bmdoYW5ucyBFMSAqLwogCi0JeyBQQ0lfVkVORE9SX0lEX0NDRCwgUENJX0RFVklDRV9JRF9DQ0RfSEZDNFMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCi0JCTAsIDAsIDB9LAotCXsgUENJX1ZFTkRPUl9JRF9DQ0QsIFBDSV9ERVZJQ0VfSURfQ0NEX0hGQzhTLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAotCQkwLCAwLCAwfSwKLQl7IFBDSV9WRU5ET1JfSURfQ0NELCBQQ0lfREVWSUNFX0lEX0NDRF9IRkNFMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKLQkJMCwgMCwgMH0sCisJeyBQQ0lfVkRFVklDRShDQ0QsIFBDSV9ERVZJQ0VfSURfQ0NEX0hGQzRTKSwgMCB9LAorCXsgUENJX1ZERVZJQ0UoQ0NELCBQQ0lfREVWSUNFX0lEX0NDRF9IRkM4UyksIDAgfSwKKwl7IFBDSV9WREVWSUNFKENDRCwgUENJX0RFVklDRV9JRF9DQ0RfSEZDRTEpLCAwIH0sCiAJezAsIH0KIH07CiAjdW5kZWYgSApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3BjaS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3BjaS5jCmluZGV4IDU5NDBhMmMuLjE1ZDMyM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNwY2kuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjcGNpLmMKQEAgLTE3NzMsNyArMTc3Myw3IEBACiAJCWluaXRoZmNwY2koaGMpOwogCQkvKgogCQkgKiBGaW5hbGx5IGVuYWJsZSBJUlEgb3V0cHV0Ci0JCSAqIHRoaXMgaXMgb25seSBhbGxvd2VkLCBpZiBhbiBJUlEgcm91dGluZSBpcyBhbGxyZWFkeQorCQkgKiB0aGlzIGlzIG9ubHkgYWxsb3dlZCwgaWYgYW4gSVJRIHJvdXRpbmUgaXMgYWxyZWFkeQogCQkgKiBlc3RhYmxpc2hlZCBmb3IgdGhpcyBIRkMsIHNvIGRvbid0IGRvIHRoYXQgZWFybGllcgogCQkgKi8KIAkJZW5hYmxlX2h3aXJxKGhjKTsKQEAgLTIxODgsNTIgKzIxODgsNTIgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhmY19pZHNbXSA9CiB7Ci0Je1BDSV9WRU5ET1JfSURfQ0NELCBQQ0lfREVWSUNFX0lEX0NDRF8yQkQwLAotCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAodW5zaWduZWQgbG9uZykgJmhmY19tYXBbMF19LAotCXtQQ0lfVkVORE9SX0lEX0NDRCwgUENJX0RFVklDRV9JRF9DQ0RfQjAwMCwKLQkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgKHVuc2lnbmVkIGxvbmcpICZoZmNfbWFwWzFdfSwKLQl7UENJX1ZFTkRPUl9JRF9DQ0QsIFBDSV9ERVZJQ0VfSURfQ0NEX0IwMDYsCi0JCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsICh1bnNpZ25lZCBsb25nKSAmaGZjX21hcFsyXX0sCi0Je1BDSV9WRU5ET1JfSURfQ0NELCBQQ0lfREVWSUNFX0lEX0NDRF9CMDA3LAotCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAodW5zaWduZWQgbG9uZykgJmhmY19tYXBbM119LAotCXtQQ0lfVkVORE9SX0lEX0NDRCwgUENJX0RFVklDRV9JRF9DQ0RfQjAwOCwKLQkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgKHVuc2lnbmVkIGxvbmcpICZoZmNfbWFwWzRdfSwKLQl7UENJX1ZFTkRPUl9JRF9DQ0QsIFBDSV9ERVZJQ0VfSURfQ0NEX0IwMDksCi0JCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsICh1bnNpZ25lZCBsb25nKSAmaGZjX21hcFs1XX0sCi0Je1BDSV9WRU5ET1JfSURfQ0NELCBQQ0lfREVWSUNFX0lEX0NDRF9CMDBBLAotCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAodW5zaWduZWQgbG9uZykgJmhmY19tYXBbNl19LAotCXtQQ0lfVkVORE9SX0lEX0NDRCwgUENJX0RFVklDRV9JRF9DQ0RfQjAwQiwKLQkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgKHVuc2lnbmVkIGxvbmcpICZoZmNfbWFwWzddfSwKLQl7UENJX1ZFTkRPUl9JRF9DQ0QsIFBDSV9ERVZJQ0VfSURfQ0NEX0IwMEMsCi0JCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsICh1bnNpZ25lZCBsb25nKSAmaGZjX21hcFs4XX0sCi0Je1BDSV9WRU5ET1JfSURfQ0NELCBQQ0lfREVWSUNFX0lEX0NDRF9CMTAwLAotCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAodW5zaWduZWQgbG9uZykgJmhmY19tYXBbOV19LAotCXtQQ0lfVkVORE9SX0lEX0NDRCwgUENJX0RFVklDRV9JRF9DQ0RfQjcwMCwKLQkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgKHVuc2lnbmVkIGxvbmcpICZoZmNfbWFwWzEwXX0sCi0Je1BDSV9WRU5ET1JfSURfQ0NELCBQQ0lfREVWSUNFX0lEX0NDRF9CNzAxLAotCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAodW5zaWduZWQgbG9uZykgJmhmY19tYXBbMTFdfSwKLQl7UENJX1ZFTkRPUl9JRF9BQk9DT00sIFBDSV9ERVZJQ0VfSURfQUJPQ09NXzJCRDEsCi0JCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsICh1bnNpZ25lZCBsb25nKSAmaGZjX21hcFsxMl19LAotCXtQQ0lfVkVORE9SX0lEX0FTVVNURUssIFBDSV9ERVZJQ0VfSURfQVNVU1RFS18wNjc1LAotCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAodW5zaWduZWQgbG9uZykgJmhmY19tYXBbMTNdfSwKLQl7UENJX1ZFTkRPUl9JRF9CRVJLT00sIFBDSV9ERVZJQ0VfSURfQkVSS09NX1RfQ09OQ0VQVCwKLQkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgKHVuc2lnbmVkIGxvbmcpICZoZmNfbWFwWzE0XX0sCi0Je1BDSV9WRU5ET1JfSURfQkVSS09NLCBQQ0lfREVWSUNFX0lEX0JFUktPTV9BMVQsCi0JCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsICh1bnNpZ25lZCBsb25nKSAmaGZjX21hcFsxNV19LAotCXtQQ0lfVkVORE9SX0lEX0FOSUdNQSwgUENJX0RFVklDRV9JRF9BTklHTUFfTUMxNDU1NzUsCi0JCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsICh1bnNpZ25lZCBsb25nKSAmaGZjX21hcFsxNl19LAotCXtQQ0lfVkVORE9SX0lEX1pPTFRSSVgsIFBDSV9ERVZJQ0VfSURfWk9MVFJJWF8yQkQwLAotCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAodW5zaWduZWQgbG9uZykgJmhmY19tYXBbMTddfSwKLQl7UENJX1ZFTkRPUl9JRF9ESUdJLCBQQ0lfREVWSUNFX0lEX0RJR0lfREZfTV9JT00yX0UsCi0JCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsICh1bnNpZ25lZCBsb25nKSAmaGZjX21hcFsxOF19LAotCXtQQ0lfVkVORE9SX0lEX0RJR0ksIFBDSV9ERVZJQ0VfSURfRElHSV9ERl9NX0UsCi0JCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsICh1bnNpZ25lZCBsb25nKSAmaGZjX21hcFsxOV19LAotCXtQQ0lfVkVORE9SX0lEX0RJR0ksIFBDSV9ERVZJQ0VfSURfRElHSV9ERl9NX0lPTTJfQSwKLQkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgKHVuc2lnbmVkIGxvbmcpICZoZmNfbWFwWzIwXX0sCi0Je1BDSV9WRU5ET1JfSURfRElHSSwgUENJX0RFVklDRV9JRF9ESUdJX0RGX01fQSwKLQkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgKHVuc2lnbmVkIGxvbmcpICZoZmNfbWFwWzIxXX0sCi0Je1BDSV9WRU5ET1JfSURfU0lURUNPTSwgUENJX0RFVklDRV9JRF9TSVRFQ09NX0RDMTA1VjIsCi0JCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsICh1bnNpZ25lZCBsb25nKSAmaGZjX21hcFsyMl19LAorCXsgUENJX1ZERVZJQ0UoQ0NELCBQQ0lfREVWSUNFX0lEX0NDRF8yQkQwKSwKKwkJKHVuc2lnbmVkIGxvbmcpICZoZmNfbWFwWzBdIH0sCisJeyBQQ0lfVkRFVklDRShDQ0QsIFBDSV9ERVZJQ0VfSURfQ0NEX0IwMDApLAorCQkodW5zaWduZWQgbG9uZykgJmhmY19tYXBbMV0gfSwKKwl7IFBDSV9WREVWSUNFKENDRCwgUENJX0RFVklDRV9JRF9DQ0RfQjAwNiksCisJCSh1bnNpZ25lZCBsb25nKSAmaGZjX21hcFsyXSB9LAorCXsgUENJX1ZERVZJQ0UoQ0NELCBQQ0lfREVWSUNFX0lEX0NDRF9CMDA3KSwKKwkJKHVuc2lnbmVkIGxvbmcpICZoZmNfbWFwWzNdIH0sCisJeyBQQ0lfVkRFVklDRShDQ0QsIFBDSV9ERVZJQ0VfSURfQ0NEX0IwMDgpLAorCQkodW5zaWduZWQgbG9uZykgJmhmY19tYXBbNF0gfSwKKwl7IFBDSV9WREVWSUNFKENDRCwgUENJX0RFVklDRV9JRF9DQ0RfQjAwOSksCisJCSh1bnNpZ25lZCBsb25nKSAmaGZjX21hcFs1XSB9LAorCXsgUENJX1ZERVZJQ0UoQ0NELCBQQ0lfREVWSUNFX0lEX0NDRF9CMDBBKSwKKwkJKHVuc2lnbmVkIGxvbmcpICZoZmNfbWFwWzZdIH0sCisJeyBQQ0lfVkRFVklDRShDQ0QsIFBDSV9ERVZJQ0VfSURfQ0NEX0IwMEIpLAorCQkodW5zaWduZWQgbG9uZykgJmhmY19tYXBbN10gfSwKKwl7IFBDSV9WREVWSUNFKENDRCwgUENJX0RFVklDRV9JRF9DQ0RfQjAwQyksCisJCSh1bnNpZ25lZCBsb25nKSAmaGZjX21hcFs4XSB9LAorCXsgUENJX1ZERVZJQ0UoQ0NELCBQQ0lfREVWSUNFX0lEX0NDRF9CMTAwKSwKKwkJKHVuc2lnbmVkIGxvbmcpICZoZmNfbWFwWzldIH0sCisJeyBQQ0lfVkRFVklDRShDQ0QsIFBDSV9ERVZJQ0VfSURfQ0NEX0I3MDApLAorCQkodW5zaWduZWQgbG9uZykgJmhmY19tYXBbMTBdIH0sCisJeyBQQ0lfVkRFVklDRShDQ0QsIFBDSV9ERVZJQ0VfSURfQ0NEX0I3MDEpLAorCQkodW5zaWduZWQgbG9uZykgJmhmY19tYXBbMTFdIH0sCisJeyBQQ0lfVkRFVklDRShBQk9DT00sIFBDSV9ERVZJQ0VfSURfQUJPQ09NXzJCRDEpLAorCQkodW5zaWduZWQgbG9uZykgJmhmY19tYXBbMTJdIH0sCisJeyBQQ0lfVkRFVklDRShBU1VTVEVLLCBQQ0lfREVWSUNFX0lEX0FTVVNURUtfMDY3NSksCisJCSh1bnNpZ25lZCBsb25nKSAmaGZjX21hcFsxM10gfSwKKwl7IFBDSV9WREVWSUNFKEJFUktPTSwgUENJX0RFVklDRV9JRF9CRVJLT01fVF9DT05DRVBUKSwKKwkJKHVuc2lnbmVkIGxvbmcpICZoZmNfbWFwWzE0XSB9LAorCXsgUENJX1ZERVZJQ0UoQkVSS09NLCBQQ0lfREVWSUNFX0lEX0JFUktPTV9BMVQpLAorCQkodW5zaWduZWQgbG9uZykgJmhmY19tYXBbMTVdIH0sCisJeyBQQ0lfVkRFVklDRShBTklHTUEsIFBDSV9ERVZJQ0VfSURfQU5JR01BX01DMTQ1NTc1KSwKKwkJKHVuc2lnbmVkIGxvbmcpICZoZmNfbWFwWzE2XSB9LAorCXsgUENJX1ZERVZJQ0UoWk9MVFJJWCwgUENJX0RFVklDRV9JRF9aT0xUUklYXzJCRDApLAorCQkodW5zaWduZWQgbG9uZykgJmhmY19tYXBbMTddIH0sCisJeyBQQ0lfVkRFVklDRShESUdJLCBQQ0lfREVWSUNFX0lEX0RJR0lfREZfTV9JT00yX0UpLAorCQkodW5zaWduZWQgbG9uZykgJmhmY19tYXBbMThdIH0sCisJeyBQQ0lfVkRFVklDRShESUdJLCBQQ0lfREVWSUNFX0lEX0RJR0lfREZfTV9FKSwKKwkJKHVuc2lnbmVkIGxvbmcpICZoZmNfbWFwWzE5XSB9LAorCXsgUENJX1ZERVZJQ0UoRElHSSwgUENJX0RFVklDRV9JRF9ESUdJX0RGX01fSU9NMl9BKSwKKwkJKHVuc2lnbmVkIGxvbmcpICZoZmNfbWFwWzIwXSB9LAorCXsgUENJX1ZERVZJQ0UoRElHSSwgUENJX0RFVklDRV9JRF9ESUdJX0RGX01fQSksCisJCSh1bnNpZ25lZCBsb25nKSAmaGZjX21hcFsyMV0gfSwKKwl7IFBDSV9WREVWSUNFKFNJVEVDT00sIFBDSV9ERVZJQ0VfSURfU0lURUNPTV9EQzEwNVYyKSwKKwkJKHVuc2lnbmVkIGxvbmcpICZoZmNfbWFwWzIyXSB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL21JU0ROaW5maW5lb24uYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9tSVNETmluZmluZW9uLmMKaW5kZXggZjViM2QyYi4uZDJkZDYxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL21JU0ROaW5maW5lb24uYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vbUlTRE5pbmZpbmVvbi5jCkBAIC0xMjUsMzYgKzEyNSwyNSBAQAogI2RlZmluZSBQQ0lfU1VCX0lEX1NFRExCQVVFUiAgICAgICAgICAgIDB4MDEKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGluZmluZW9uX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JeyBQQ0lfVkVORE9SX0lEX0VJQ09OLCBQQ0lfREVWSUNFX0lEX0VJQ09OX0RJVkEyMCwKLQkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIElORl9ESVZBMjB9LAotCXsgUENJX1ZFTkRPUl9JRF9FSUNPTiwgUENJX0RFVklDRV9JRF9FSUNPTl9ESVZBMjBfVSwKLQkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIElORl9ESVZBMjBVfSwKLQl7IFBDSV9WRU5ET1JfSURfRUlDT04sIFBDSV9ERVZJQ0VfSURfRUlDT05fRElWQTIwMSwKLQkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIElORl9ESVZBMjAxfSwKLQl7IFBDSV9WRU5ET1JfSURfRUlDT04sIFBDSV9ERVZJQ0VfSURfRUlDT05fRElWQTIwMiwKLQkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIElORl9ESVZBMjAyfSwKKwl7IFBDSV9WREVWSUNFKEVJQ09OLCBQQ0lfREVWSUNFX0lEX0VJQ09OX0RJVkEyMCksIElORl9ESVZBMjAgfSwKKwl7IFBDSV9WREVWSUNFKEVJQ09OLCBQQ0lfREVWSUNFX0lEX0VJQ09OX0RJVkEyMF9VKSwgSU5GX0RJVkEyMFUgfSwKKwl7IFBDSV9WREVWSUNFKEVJQ09OLCBQQ0lfREVWSUNFX0lEX0VJQ09OX0RJVkEyMDEpLCBJTkZfRElWQTIwMSB9LAorCXsgUENJX1ZERVZJQ0UoRUlDT04sIFBDSV9ERVZJQ0VfSURfRUlDT05fRElWQTIwMiksIElORl9ESVZBMjAyIH0sCiAJeyBQQ0lfVkVORE9SX0lEX1RJR0VSSkVULCBQQ0lfREVWSUNFX0lEX1RJR0VSSkVUXzEwMCwKIAkgIFBDSV9TVUJWRU5ET1JfU0VETEJBVUVSX1BDSSwgUENJX1NVQl9JRF9TRURMQkFVRVIsIDAsIDAsCi0JICBJTkZfU1BFRURXSU59LAorCSAgSU5GX1NQRUVEV0lOIH0sCiAJeyBQQ0lfVkVORE9SX0lEX1RJR0VSSkVULCBQQ0lfREVWSUNFX0lEX1RJR0VSSkVUXzEwMCwKLQkgIFBDSV9TVUJWRU5ET1JfSFNUX1NBUEhJUjMsIFBDSV9TVUJfSURfU0VETEJBVUVSLCAwLCAwLCBJTkZfU0FQSElSM30sCi0JeyBQQ0lfVkVORE9SX0lEX0VMU0EsIFBDSV9ERVZJQ0VfSURfRUxTQV9NSUNST0xJTkssCi0JICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBJTkZfUVMxMDAwfSwKLQl7IFBDSV9WRU5ET1JfSURfRUxTQSwgUENJX0RFVklDRV9JRF9FTFNBX1FTMzAwMCwKLQkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIElORl9RUzMwMDB9LAotCXsgUENJX1ZFTkRPUl9JRF9TQVRTQUdFTSwgUENJX0RFVklDRV9JRF9TQVRTQUdFTV9OSUNDWSwKLQkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIElORl9OSUNDWX0sCisJICBQQ0lfU1VCVkVORE9SX0hTVF9TQVBISVIzLCBQQ0lfU1VCX0lEX1NFRExCQVVFUiwgMCwgMCwgSU5GX1NBUEhJUjMgfSwKKwl7IFBDSV9WREVWSUNFKEVMU0EsIFBDSV9ERVZJQ0VfSURfRUxTQV9NSUNST0xJTkspLCBJTkZfUVMxMDAwIH0sCisJeyBQQ0lfVkRFVklDRShFTFNBLCBQQ0lfREVWSUNFX0lEX0VMU0FfUVMzMDAwKSwgSU5GX1FTMzAwMCB9LAorCXsgUENJX1ZERVZJQ0UoU0FUU0FHRU0sIFBDSV9ERVZJQ0VfSURfU0FUU0FHRU1fTklDQ1kpLCBJTkZfTklDQ1kgfSwKIAl7IFBDSV9WRU5ET1JfSURfUExYLCBQQ0lfREVWSUNFX0lEX1BMWF85MDUwLAogCSAgUENJX1ZFTkRPUl9JRF9CRVJLT00sIFBDSV9ERVZJQ0VfSURfQkVSS09NX1NDSVRFTF9RVUFEUk8sIDAsIDAsCi0JICBJTkZfU0NUXzF9LAotCXsgUENJX1ZFTkRPUl9JRF9QTFgsIFBDSV9ERVZJQ0VfSURfUExYX1I2ODUsCi0JICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBJTkZfR0FaRUxfUjY4NX0sCi0JeyBQQ0lfVkVORE9SX0lEX1BMWCwgUENJX0RFVklDRV9JRF9QTFhfUjc1MywKLQkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIElORl9HQVpFTF9SNzUzfSwKLQl7IFBDSV9WRU5ET1JfSURfUExYLCBQQ0lfREVWSUNFX0lEX1BMWF9ESklOTl9JVE9PLAotCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgSU5GX0dBWkVMX1I3NTN9LAotCXsgUENJX1ZFTkRPUl9JRF9QTFgsIFBDSV9ERVZJQ0VfSURfUExYX09MSVRFQywKLQkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIElORl9HQVpFTF9SNzUzfSwKKwkgIElORl9TQ1RfMSB9LAorCXsgUENJX1ZERVZJQ0UoUExYLCBQQ0lfREVWSUNFX0lEX1BMWF9SNjg1KSwgSU5GX0dBWkVMX1I2ODUgfSwKKwl7IFBDSV9WREVWSUNFKFBMWCwgUENJX0RFVklDRV9JRF9QTFhfUjc1MyksIElORl9HQVpFTF9SNzUzIH0sCisJeyBQQ0lfVkRFVklDRShQTFgsIFBDSV9ERVZJQ0VfSURfUExYX0RKSU5OX0lUT08pLCBJTkZfR0FaRUxfUjc1MyB9LAorCXsgUENJX1ZERVZJQ0UoUExYLCBQQ0lfREVWSUNFX0lEX1BMWF9PTElURUMpLCBJTkZfR0FaRUxfUjc1MyB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpbmZpbmVvbl9pZHMpOwpAQCAtMTE1MCw3ICsxMTM5LDcgQEAKIAlpZiAoY2FyZCkKIAkJcmVsZWFzZV9jYXJkKGNhcmQpOwogCWVsc2UKLQkJcHJfZGVidWcoIiVzOiBkcnZkYXRhIGFsbHJlYWR5IHJlbW92ZWRcbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiVzOiBkcnZkYXRhIGFscmVhZHkgcmVtb3ZlZFxuIiwgX19mdW5jX18pOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaW5maW5lb25fZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL3NwZWVkZmF4LmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vc3BlZWRmYXguYwppbmRleCBkMDk3YTRlLi45ZTA3MjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vc3BlZWRmYXguYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vc3BlZWRmYXguYwpAQCAtNDg0LDcgKzQ4NCw3IEBACiAJaWYgKGNhcmQpCiAJCXJlbGVhc2VfY2FyZChjYXJkKTsKIAllbHNlCi0JCXByX2RlYnVnKCIlczogZHJ2ZGF0YSBhbGxyZWFkeSByZW1vdmVkXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogZHJ2ZGF0YSBhbHJlYWR5IHJlbW92ZWRcbiIsIF9fZnVuY19fKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNmYXhwY2lfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi93NjY5Mi5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL3c2NjkyLmMKaW5kZXggMzFmOWQ3MS4uOWU4NDg3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL3c2NjkyLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL3c2NjkyLmMKQEAgLTE0MDIsNyArMTQwMiw3IEBACiAJCXJlbGVhc2VfY2FyZChjYXJkKTsKIAllbHNlCiAJCWlmIChkZWJ1ZykKLQkJCXByX25vdGljZSgiJXM6IGRydmRhdGEgYWxscmVhZHkgcmVtb3ZlZFxuIiwgX19mdW5jX18pOworCQkJcHJfbm90aWNlKCIlczogZHJ2ZGF0YSBhbHJlYWR5IHJlbW92ZWRcbiIsIF9fZnVuY19fKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHc2NjkyX2lkc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2F2bWExX2NzLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtYTFfY3MuYwppbmRleCBhODBhNzYxLi45NDI2M2MyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtYTFfY3MuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtYTFfY3MuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KQEAgLTc5LDExICs3OCwxMCBAQAogICAgIGRldl9kYmcoJnBfZGV2LT5kZXYsICJhdm1hMWNzX2F0dGFjaCgpXG4iKTsKIAogICAgIC8qIFRoZSBpbyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIElPIHBvcnQgbWFwcGluZyAqLwotICAgIHBfZGV2LT5pby5OdW1Qb3J0czEgPSAxNjsKLSAgICBwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLSAgICBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMTY7Ci0gICAgcF9kZXYtPmlvLkF0dHJpYnV0ZXMyID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OwotICAgIHBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IDU7CisgICAgcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSAxNjsKKyAgICBwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF84OworICAgIHBfZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gMTY7CisgICAgcF9kZXYtPnJlc291cmNlWzFdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7CiAKICAgICAvKiBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uICovCiAgICAgcF9kZXYtPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKQEAgLTEyNywxMyArMTI1LDEwIEBACiAJaWYgKGNmLT5pby5ud2luIDw9IDApCiAJCXJldHVybiAtRU5PREVWOwogCi0JcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGNmLT5pby53aW5bMF0uYmFzZTsKLQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gY2YtPmlvLndpblswXS5sZW47Ci0JcF9kZXYtPmlvLk51bVBvcnRzMiA9IDA7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiYXZtYTFfY3M6IHRlc3RpbmcgaS9vICUjeC0lI3hcbiIsCi0JICAgICAgIHBfZGV2LT5pby5CYXNlUG9ydDEsCi0JICAgICAgIHBfZGV2LT5pby5CYXNlUG9ydDErcF9kZXYtPmlvLk51bVBvcnRzMS0xKTsKLQlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pOworCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBjZi0+aW8ud2luWzBdLmJhc2U7CisJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBjZi0+aW8ud2luWzBdLmxlbjsKKwlwX2Rldi0+aW9fbGluZXMgPSA1OworCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2Rldik7CiB9CiAKIApAQCAtMTgxLDE2ICsxNzYsMTggQEAKICAgICB9CiAKICAgICBwcmludGsoS0VSTl9OT1RJQ0UgImF2bWExX2NzOiBjaGVja2luZyBhdCBpL28gJSN4LCBpcnEgJWRcbiIsCi0JCQkJbGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pcnEpOworCQkodW5zaWduZWQgaW50KSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQsIGxpbmstPmlycSk7CiAKICAgICBpY2FyZC5wYXJhWzBdID0gbGluay0+aXJxOwotICAgIGljYXJkLnBhcmFbMV0gPSBsaW5rLT5pby5CYXNlUG9ydDE7CisgICAgaWNhcmQucGFyYVsxXSA9IGxpbmstPnJlc291cmNlWzBdLT5zdGFydDsKICAgICBpY2FyZC5wcm90b2NvbCA9IGlzZG5wcm90OwogICAgIGljYXJkLnR5cCA9IElTRE5fQ1RZUEVfQTFfUENNQ0lBOwogICAgIAogICAgIGkgPSBoaXNheF9pbml0X3BjbWNpYShsaW5rLCAmYnVzeSwgJmljYXJkKTsKICAgICBpZiAoaSA8IDApIHsKLSAgICAJcHJpbnRrKEtFUk5fRVJSICJhdm1hMV9jczogZmFpbGVkIHRvIGluaXRpYWxpemUgQVZNIEExIFBDTUNJQSAlZCBhdCBpL28gJSN4XG4iLCBpLCBsaW5rLT5pby5CYXNlUG9ydDEpOworCXByaW50ayhLRVJOX0VSUiAiYXZtYTFfY3M6IGZhaWxlZCB0byBpbml0aWFsaXplIEFWTSBBMSAiCisJCQkiUENNQ0lBICVkIGF0IGkvbyAlI3hcbiIsIGksCisJCQkodW5zaWduZWQgaW50KSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQpOwogCWF2bWExY3NfcmVsZWFzZShsaW5rKTsKIAlyZXR1cm4gLUVOT0RFVjsKICAgICB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvY2FsbGMuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9jYWxsYy5jCmluZGV4IGY1OGRlZDguLmYxNTAzMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9jYWxsYy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9jYWxsYy5jCkBAIC0xMTcyLDcgKzExNzIsNyBAQAogCQkJa2ZyZWUoY3N0YS0+Y2hhbm5lbFtpXS5iX3N0KTsKIAkJCWNzdGEtPmNoYW5uZWxbaV0uYl9zdCA9IE5VTEw7CiAJCX0gZWxzZQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FsbGNGcmVlQ2hhbiBiX3N0IGNoJWQgYWxscmVhZHkgZnJlZWRcbiIsIGkpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FsbGNGcmVlQ2hhbiBiX3N0IGNoJWQgYWxyZWFkeSBmcmVlZFxuIiwgaSk7CiAJCWlmIChpIHx8IHRlc3RfYml0KEZMR19UV09fRENIQU4sICZjc3RhLT5IV19GbGFncykpIHsKIAkJCXJlbGVhc2VfZF9zdChjc3RhLT5jaGFubmVsICsgaSk7CiAJCX0gZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2NvbmZpZy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2NvbmZpZy5jCmluZGV4IDU0NGNmNGIuLjZmOWFmY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9jb25maWcuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvY29uZmlnLmMKQEAgLTE5MDksNjggKzE5MDksNjggQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhpc2F4X3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0gewogI2lmZGVmIENPTkZJR19ISVNBWF9GUklUWlBDSQotCXtQQ0lfVkVORE9SX0lEX0FWTSwgICAgICBQQ0lfREVWSUNFX0lEX0FWTV9BMSwgICAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAorCXtQQ0lfVkRFVklDRShBVk0sICAgICAgUENJX0RFVklDRV9JRF9BVk1fQTEpCQkJfSwKICNlbmRpZgogI2lmZGVmIENPTkZJR19ISVNBWF9ESUVITERJVkEKLQl7UENJX1ZFTkRPUl9JRF9FSUNPTiwgICAgUENJX0RFVklDRV9JRF9FSUNPTl9ESVZBMjAsICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEfSwKLQl7UENJX1ZFTkRPUl9JRF9FSUNPTiwgICAgUENJX0RFVklDRV9JRF9FSUNPTl9ESVZBMjBfVSwgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEfSwKLQl7UENJX1ZFTkRPUl9JRF9FSUNPTiwgICAgUENJX0RFVklDRV9JRF9FSUNPTl9ESVZBMjAxLCAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEfSwKLS8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMJCi0Je1BDSV9WRU5ET1JfSURfRUlDT04sICAgIFBDSV9ERVZJQ0VfSURfRUlDT05fRElWQTIwMiwgICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRH0sCi0vLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCQorCXtQQ0lfVkRFVklDRShFSUNPTiwgICAgUENJX0RFVklDRV9JRF9FSUNPTl9ESVZBMjApCQl9LAorCXtQQ0lfVkRFVklDRShFSUNPTiwgICAgUENJX0RFVklDRV9JRF9FSUNPTl9ESVZBMjBfVSkJfSwKKwl7UENJX1ZERVZJQ0UoRUlDT04sICAgIFBDSV9ERVZJQ0VfSURfRUlDT05fRElWQTIwMSkJCX0sCisvKiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjKi8KKwl7UENJX1ZERVZJQ0UoRUlDT04sICAgIFBDSV9ERVZJQ0VfSURfRUlDT05fRElWQTIwMikJCX0sCisvKiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjKi8KICNlbmRpZgogI2lmZGVmIENPTkZJR19ISVNBWF9FTFNBCi0Je1BDSV9WRU5ET1JfSURfRUxTQSwgICAgIFBDSV9ERVZJQ0VfSURfRUxTQV9NSUNST0xJTkssICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRH0sCi0Je1BDSV9WRU5ET1JfSURfRUxTQSwgICAgIFBDSV9ERVZJQ0VfSURfRUxTQV9RUzMwMDAsICAgICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRH0sCisJe1BDSV9WREVWSUNFKEVMU0EsICAgICBQQ0lfREVWSUNFX0lEX0VMU0FfTUlDUk9MSU5LKQl9LAorCXtQQ0lfVkRFVklDRShFTFNBLCAgICAgUENJX0RFVklDRV9JRF9FTFNBX1FTMzAwMCkJCX0sCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfSElTQVhfR0FaRUwKLQl7UENJX1ZFTkRPUl9JRF9QTFgsICAgICAgUENJX0RFVklDRV9JRF9QTFhfUjY4NSwgICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEfSwKLQl7UENJX1ZFTkRPUl9JRF9QTFgsICAgICAgUENJX0RFVklDRV9JRF9QTFhfUjc1MywgICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEfSwKLQl7UENJX1ZFTkRPUl9JRF9QTFgsICAgICAgUENJX0RFVklDRV9JRF9QTFhfREpJTk5fSVRPTywgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEfSwKLQl7UENJX1ZFTkRPUl9JRF9QTFgsICAgICAgUENJX0RFVklDRV9JRF9QTFhfT0xJVEVDLCAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEfSwKKwl7UENJX1ZERVZJQ0UoUExYLCAgICAgIFBDSV9ERVZJQ0VfSURfUExYX1I2ODUpCQkJfSwKKwl7UENJX1ZERVZJQ0UoUExYLCAgICAgIFBDSV9ERVZJQ0VfSURfUExYX1I3NTMpCQkJfSwKKwl7UENJX1ZERVZJQ0UoUExYLCAgICAgIFBDSV9ERVZJQ0VfSURfUExYX0RKSU5OX0lUT08pCX0sCisJe1BDSV9WREVWSUNFKFBMWCwgICAgICBQQ0lfREVWSUNFX0lEX1BMWF9PTElURUMpCQl9LAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0hJU0FYX1NDVF9RVUFEUk8KLQl7UENJX1ZFTkRPUl9JRF9QTFgsICAgICAgUENJX0RFVklDRV9JRF9QTFhfOTA1MCwgICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEfSwKKwl7UENJX1ZERVZJQ0UoUExYLCAgICAgIFBDSV9ERVZJQ0VfSURfUExYXzkwNTApCQkJfSwKICNlbmRpZgogI2lmZGVmIENPTkZJR19ISVNBWF9OSUNDWQotCXtQQ0lfVkVORE9SX0lEX1NBVFNBR0VNLCBQQ0lfREVWSUNFX0lEX1NBVFNBR0VNX05JQ0NZLCAgIFBDSV9BTllfSUQsUENJX0FOWV9JRH0sCisJe1BDSV9WREVWSUNFKFNBVFNBR0VNLCBQQ0lfREVWSUNFX0lEX1NBVFNBR0VNX05JQ0NZKQl9LAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0hJU0FYX1NFRExCQVVFUgotCXtQQ0lfVkVORE9SX0lEX1RJR0VSSkVULCBQQ0lfREVWSUNFX0lEX1RJR0VSSkVUXzEwMCwgICAgIFBDSV9BTllfSUQsUENJX0FOWV9JRH0sCisJe1BDSV9WREVWSUNFKFRJR0VSSkVULCBQQ0lfREVWSUNFX0lEX1RJR0VSSkVUXzEwMCkJCX0sCiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19ISVNBWF9ORVRKRVQpIHx8IGRlZmluZWQoQ09ORklHX0hJU0FYX05FVEpFVF9VKQotCXtQQ0lfVkVORE9SX0lEX1RJR0VSSkVULCBQQ0lfREVWSUNFX0lEX1RJR0VSSkVUXzMwMCwgICAgIFBDSV9BTllfSUQsUENJX0FOWV9JRH0sCisJe1BDSV9WREVWSUNFKFRJR0VSSkVULCBQQ0lfREVWSUNFX0lEX1RJR0VSSkVUXzMwMCkJCX0sCiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19ISVNBWF9URUxFU1BDSSkgfHwgZGVmaW5lZChDT05GSUdfSElTQVhfU0NUX1FVQURSTykKLQl7UENJX1ZFTkRPUl9JRF9aT1JBTiwgICAgUENJX0RFVklDRV9JRF9aT1JBTl8zNjEyMCwgICAgICBQQ0lfQU5ZX0lELFBDSV9BTllfSUR9LAorCXtQQ0lfVkRFVklDRShaT1JBTiwgICAgUENJX0RFVklDRV9JRF9aT1JBTl8zNjEyMCkJCX0sCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfSElTQVhfVzY2OTIKLQl7UENJX1ZFTkRPUl9JRF9EWU5BTElOSywgUENJX0RFVklDRV9JRF9EWU5BTElOS19JUzY0UEgsICBQQ0lfQU5ZX0lELFBDSV9BTllfSUR9LAotCXtQQ0lfVkVORE9SX0lEX1dJTkJPTkQyLCBQQ0lfREVWSUNFX0lEX1dJTkJPTkQyXzY2OTIsICAgIFBDSV9BTllfSUQsUENJX0FOWV9JRH0sCisJe1BDSV9WREVWSUNFKERZTkFMSU5LLCBQQ0lfREVWSUNFX0lEX0RZTkFMSU5LX0lTNjRQSCkJfSwKKwl7UENJX1ZERVZJQ0UoV0lOQk9ORDIsIFBDSV9ERVZJQ0VfSURfV0lOQk9ORDJfNjY5MikJCX0sCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfSElTQVhfSEZDX1BDSQotCXtQQ0lfVkVORE9SX0lEX0NDRCwgICAgICBQQ0lfREVWSUNFX0lEX0NDRF8yQkQwLCAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAotCXtQQ0lfVkVORE9SX0lEX0NDRCwgICAgICBQQ0lfREVWSUNFX0lEX0NDRF9CMDAwLCAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAotCXtQQ0lfVkVORE9SX0lEX0NDRCwgICAgICBQQ0lfREVWSUNFX0lEX0NDRF9CMDA2LCAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAotCXtQQ0lfVkVORE9SX0lEX0NDRCwgICAgICBQQ0lfREVWSUNFX0lEX0NDRF9CMDA3LCAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAotCXtQQ0lfVkVORE9SX0lEX0NDRCwgICAgICBQQ0lfREVWSUNFX0lEX0NDRF9CMDA4LCAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAotCXtQQ0lfVkVORE9SX0lEX0NDRCwgICAgICBQQ0lfREVWSUNFX0lEX0NDRF9CMDA5LCAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAotCXtQQ0lfVkVORE9SX0lEX0NDRCwgICAgICBQQ0lfREVWSUNFX0lEX0NDRF9CMDBBLCAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAotCXtQQ0lfVkVORE9SX0lEX0NDRCwgICAgICBQQ0lfREVWSUNFX0lEX0NDRF9CMDBCLCAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAotCXtQQ0lfVkVORE9SX0lEX0NDRCwgICAgICBQQ0lfREVWSUNFX0lEX0NDRF9CMDBDLCAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAotCXtQQ0lfVkVORE9SX0lEX0NDRCwgICAgICBQQ0lfREVWSUNFX0lEX0NDRF9CMTAwLCAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAotCXtQQ0lfVkVORE9SX0lEX0NDRCwgICAgICBQQ0lfREVWSUNFX0lEX0NDRF9CNzAwLCAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAotCXtQQ0lfVkVORE9SX0lEX0NDRCwgICAgICBQQ0lfREVWSUNFX0lEX0NDRF9CNzAxLCAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAotCXtQQ0lfVkVORE9SX0lEX0FCT0NPTSwgICBQQ0lfREVWSUNFX0lEX0FCT0NPTV8yQkQxLCAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAotCXtQQ0lfVkVORE9SX0lEX0FTVVNURUssICBQQ0lfREVWSUNFX0lEX0FTVVNURUtfMDY3NSwgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAotCXtQQ0lfVkVORE9SX0lEX0JFUktPTSwgICBQQ0lfREVWSUNFX0lEX0JFUktPTV9UX0NPTkNFUFQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAotCXtQQ0lfVkVORE9SX0lEX0JFUktPTSwgICBQQ0lfREVWSUNFX0lEX0JFUktPTV9BMVQsICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAotCXtQQ0lfVkVORE9SX0lEX0FOSUdNQSwgICBQQ0lfREVWSUNFX0lEX0FOSUdNQV9NQzE0NTU3NSwgIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAotCXtQQ0lfVkVORE9SX0lEX1pPTFRSSVgsICBQQ0lfREVWSUNFX0lEX1pPTFRSSVhfMkJEMCwgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAotCXtQQ0lfVkVORE9SX0lEX0RJR0ksICAgICBQQ0lfREVWSUNFX0lEX0RJR0lfREZfTV9JT00yX0UsIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAotCXtQQ0lfVkVORE9SX0lEX0RJR0ksICAgICBQQ0lfREVWSUNFX0lEX0RJR0lfREZfTV9FLCAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAotCXtQQ0lfVkVORE9SX0lEX0RJR0ksICAgICBQQ0lfREVWSUNFX0lEX0RJR0lfREZfTV9JT00yX0EsIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAotCXtQQ0lfVkVORE9SX0lEX0RJR0ksICAgICBQQ0lfREVWSUNFX0lEX0RJR0lfREZfTV9BLCAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAorCXtQQ0lfVkRFVklDRShDQ0QsICAgICAgUENJX0RFVklDRV9JRF9DQ0RfMkJEMCkJCQl9LAorCXtQQ0lfVkRFVklDRShDQ0QsICAgICAgUENJX0RFVklDRV9JRF9DQ0RfQjAwMCkJCQl9LAorCXtQQ0lfVkRFVklDRShDQ0QsICAgICAgUENJX0RFVklDRV9JRF9DQ0RfQjAwNikJCQl9LAorCXtQQ0lfVkRFVklDRShDQ0QsICAgICAgUENJX0RFVklDRV9JRF9DQ0RfQjAwNykJCQl9LAorCXtQQ0lfVkRFVklDRShDQ0QsICAgICAgUENJX0RFVklDRV9JRF9DQ0RfQjAwOCkJCQl9LAorCXtQQ0lfVkRFVklDRShDQ0QsICAgICAgUENJX0RFVklDRV9JRF9DQ0RfQjAwOSkJCQl9LAorCXtQQ0lfVkRFVklDRShDQ0QsICAgICAgUENJX0RFVklDRV9JRF9DQ0RfQjAwQSkJCQl9LAorCXtQQ0lfVkRFVklDRShDQ0QsICAgICAgUENJX0RFVklDRV9JRF9DQ0RfQjAwQikJCQl9LAorCXtQQ0lfVkRFVklDRShDQ0QsICAgICAgUENJX0RFVklDRV9JRF9DQ0RfQjAwQykJCQl9LAorCXtQQ0lfVkRFVklDRShDQ0QsICAgICAgUENJX0RFVklDRV9JRF9DQ0RfQjEwMCkJCQl9LAorCXtQQ0lfVkRFVklDRShDQ0QsICAgICAgUENJX0RFVklDRV9JRF9DQ0RfQjcwMCkJCQl9LAorCXtQQ0lfVkRFVklDRShDQ0QsICAgICAgUENJX0RFVklDRV9JRF9DQ0RfQjcwMSkJCQl9LAorCXtQQ0lfVkRFVklDRShBQk9DT00sICAgUENJX0RFVklDRV9JRF9BQk9DT01fMkJEMSkJCX0sCisJe1BDSV9WREVWSUNFKEFTVVNURUssICBQQ0lfREVWSUNFX0lEX0FTVVNURUtfMDY3NSkJCX0sCisJe1BDSV9WREVWSUNFKEJFUktPTSwgICBQQ0lfREVWSUNFX0lEX0JFUktPTV9UX0NPTkNFUFQpCX0sCisJe1BDSV9WREVWSUNFKEJFUktPTSwgICBQQ0lfREVWSUNFX0lEX0JFUktPTV9BMVQpCQl9LAorCXtQQ0lfVkRFVklDRShBTklHTUEsICAgUENJX0RFVklDRV9JRF9BTklHTUFfTUMxNDU1NzUpCX0sCisJe1BDSV9WREVWSUNFKFpPTFRSSVgsICBQQ0lfREVWSUNFX0lEX1pPTFRSSVhfMkJEMCkJCX0sCisJe1BDSV9WREVWSUNFKERJR0ksICAgICBQQ0lfREVWSUNFX0lEX0RJR0lfREZfTV9JT00yX0UpCX0sCisJe1BDSV9WREVWSUNFKERJR0ksICAgICBQQ0lfREVWSUNFX0lEX0RJR0lfREZfTV9FKQkJfSwKKwl7UENJX1ZERVZJQ0UoRElHSSwgICAgIFBDSV9ERVZJQ0VfSURfRElHSV9ERl9NX0lPTTJfQSkJfSwKKwl7UENJX1ZERVZJQ0UoRElHSSwgICAgIFBDSV9ERVZJQ0VfSURfRElHSV9ERl9NX0EpCQl9LAogI2VuZGlmCiAJeyB9CQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2FfY3MuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhX2NzLmMKaW5kZXggMjE4OTI3ZS4uYjNjMDhhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2FfY3MuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYV9jcy5jCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KQEAgLTEyNyw5ICsxMjYsOCBAQAogICAgICAgYW5kIGF0dHJpYnV0ZXMgb2YgSU8gd2luZG93cykgYXJlIGZpeGVkIGJ5IHRoZSBuYXR1cmUgb2YgdGhlCiAgICAgICBkZXZpY2UsIGFuZCBjYW4gYmUgaGFyZC13aXJlZCBoZXJlLgogICAgICovCi0gICAgbGluay0+aW8uTnVtUG9ydHMxID0gODsKLSAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotICAgIGxpbmstPmlvLklPQWRkckxpbmVzID0gMzsKKyAgICBsaW5rLT5yZXNvdXJjZVswXS0+ZW5kID0gODsKKyAgICBsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CiAKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CkBAIC0xNzQsMTYgKzE3MiwxOCBAQAogewogCWludCBqOwogCisJcF9kZXYtPmlvX2xpbmVzID0gMzsKKwogCWlmICgoY2YtPmlvLm53aW4gPiAwKSAmJiBjZi0+aW8ud2luWzBdLmJhc2UpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiKGVsc2FfY3M6IGxvb2tzIGxpa2UgdGhlIDk2IG1vZGVsKVxuIik7Ci0JCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7Ci0JCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKQorCQlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gY2YtPmlvLndpblswXS5iYXNlOworCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2KSkKIAkJCXJldHVybiAwOwogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0lORk8gIihlbHNhX2NzOiBsb29rcyBsaWtlIHRoZSA5NyBtb2RlbClcbiIpOwogCQlmb3IgKGogPSAweDJmMDsgaiA+IDB4MTAwOyBqIC09IDB4MTApIHsKLQkJCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBqOwotCQkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbykpCisJCQlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gajsKKwkJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpKQogCQkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtMjE1LDIzICsyMTUsMjEgQEAKIAkgICAgbGluay0+Y29uZi5Db25maWdJbmRleCk7CiAgICAgaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkKIAlwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxKTsKLSAgICBpZiAobGluay0+aW8uTnVtUG9ydHMxKQotICAgICAgICBwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKLSAgICAgICAgICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MStsaW5rLT5pby5OdW1Qb3J0czEtMSk7Ci0gICAgaWYgKGxpbmstPmlvLk51bVBvcnRzMikKLSAgICAgICAgcHJpbnRrKCIgJiAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQyLAotICAgICAgICAgICAgICAgbGluay0+aW8uQmFzZVBvcnQyK2xpbmstPmlvLk51bVBvcnRzMi0xKTsKKyAgICBpZiAobGluay0+cmVzb3VyY2VbMF0pCisJcHJpbnRrKCIgJiAlcFIiLCBsaW5rLT5yZXNvdXJjZVswXSk7CisgICAgaWYgKGxpbmstPnJlc291cmNlWzFdKQorCXByaW50aygiICYgJXBSIiwgbGluay0+cmVzb3VyY2VbMV0pOwogICAgIHByaW50aygiXG4iKTsKIAogICAgIGljYXJkLnBhcmFbMF0gPSBsaW5rLT5pcnE7Ci0gICAgaWNhcmQucGFyYVsxXSA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKyAgICBpY2FyZC5wYXJhWzFdID0gbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogICAgIGljYXJkLnByb3RvY29sID0gcHJvdG9jb2w7CiAgICAgaWNhcmQudHlwID0gSVNETl9DVFlQRV9FTFNBX1BDTUNJQTsKICAgICAKICAgICBpID0gaGlzYXhfaW5pdF9wY21jaWEobGluaywgJigoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmJ1c3kpLCAmaWNhcmQpOwogICAgIGlmIChpIDwgMCkgewotICAgIAlwcmludGsoS0VSTl9FUlIgImVsc2FfY3M6IGZhaWxlZCB0byBpbml0aWFsaXplIEVsc2EgUENNQ0lBICVkIGF0IGkvbyAlI3hcbiIsCi0gICAgCQlpLCBsaW5rLT5pby5CYXNlUG9ydDEpOworCXByaW50ayhLRVJOX0VSUiAiZWxzYV9jczogZmFpbGVkIHRvIGluaXRpYWxpemUgRWxzYSAiCisJCSJQQ01DSUEgJWQgd2l0aCAlcFJcbiIsIGksIGxpbmstPnJlc291cmNlWzBdKTsKICAgICAJZWxzYV9jc19yZWxlYXNlKGxpbmspOwogICAgIH0gZWxzZQogICAgIAkoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmNhcmRuciA9IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvcTkzMS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3E5MzEuYwppbmRleCA4Yjg1M2Q1Li5jMDc3MWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvcTkzMS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9xOTMxLmMKQEAgLTExNTIsMjAgKzExNTIsMTEgQEAKIHsKIAlyZWdpc3RlciBpbnQgaTsKIAlyZWdpc3RlciBjaGFyICp0ID0gdHh0OwotCXJlZ2lzdGVyIHVfY2hhciB3OwogCiAJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKSB7CiAJCSp0KysgPSAnICc7Ci0JCXcgPSAocFtpXSA+PiA0KSAmIDB4MGY7Ci0JCWlmICh3IDwgMTApCi0JCQkqdCsrID0gJzAnICsgdzsKLQkJZWxzZQotCQkJKnQrKyA9ICdBJyAtIDEwICsgdzsKLQkJdyA9IHBbaV0gJiAweDBmOwotCQlpZiAodyA8IDEwKQotCQkJKnQrKyA9ICcwJyArIHc7Ci0JCWVsc2UKLQkJCSp0KysgPSAnQScgLSAxMCArIHc7CisJCSp0KysgPSBoZXhfYXNjX2hpKHBbaV0pOworCQkqdCsrID0gaGV4X2FzY19sbyhwW2ldKTsKIAl9CiAJKnQrKyA9IDA7CiAJcmV0dXJuICh0IC0gdHh0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXJfY3MuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXJfY3MuYwppbmRleCAxZjRmZWFhLi5hMDI0MTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyX2NzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlcl9jcy5jCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KQEAgLTEzMCw5ICsxMjksOCBAQAogICAgIC8qIGZyb20gb2xkIHNlZGxfY3MgCiAgICAgKi8KICAgICAvKiBUaGUgaW8gc3RydWN0dXJlIGRlc2NyaWJlcyBJTyBwb3J0IG1hcHBpbmcgKi8KLSAgICBsaW5rLT5pby5OdW1Qb3J0czEgPSA4OwotICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0gICAgbGluay0+aW8uSU9BZGRyTGluZXMgPSAzOworICAgIGxpbmstPnJlc291cmNlWzBdLT5lbmQgPSA4OworICAgIGxpbmstPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfODsKIAogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IDA7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CkBAIC0xNzMsOCArMTcxLDYgQEAKIAkJCQkgIHVuc2lnbmVkIGludCB2Y2MsCiAJCQkJICB2b2lkICpwcml2X2RhdGEpCiB7Ci0Jd2luX3JlcV90ICpyZXEgPSBwcml2X2RhdGE7Ci0KIAlpZiAoY2ZnLT5pbmRleCA9PSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtMjAyLDUyICsxOTgsMjUgQEAKIAlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKIAogCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLwotCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwlwX2Rldi0+cmVzb3VyY2VbMF0tPmVuZCA9IHBfZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gMDsKIAlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKIAkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKLQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKLQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOwotCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBpby0+d2luWzBdLmJhc2U7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gaW8tPndpblswXS5sZW47CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgJj0gfklPX0RBVEFfUEFUSF9XSURUSDsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyB8PQorCQkJCQlwY21jaWFfaW9fY2ZnX2RhdGFfd2lkdGgoaW8tPmZsYWdzKTsKIAkJaWYgKGlvLT5ud2luID4gMSkgewotCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMyID0gcF9kZXYtPmlvLkF0dHJpYnV0ZXMxOwotCQkJcF9kZXYtPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKLQkJCXBfZGV2LT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+ZmxhZ3MgPSBwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzOworCQkJcF9kZXYtPnJlc291cmNlWzFdLT5zdGFydCA9IGlvLT53aW5bMV0uYmFzZTsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gaW8tPndpblsxXS5sZW47CiAJCX0KIAkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KLQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSAhPSAwKQorCQlwX2Rldi0+aW9fbGluZXMgPSAzOworCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpICE9IDApCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQkvKgotCSAgTm93IHNldCB1cCBhIGNvbW1vbiBtZW1vcnkgd2luZG93LCBpZiBuZWVkZWQuICBUaGVyZSBpcyByb29tCi0JICBpbiB0aGUgc3RydWN0IHBjbWNpYV9kZXZpY2Ugc3RydWN0dXJlIGZvciBvbmUgbWVtb3J5IHdpbmRvdyBoYW5kbGUsCi0JICBidXQgaWYgdGhlIGJhc2UgYWRkcmVzc2VzIG5lZWQgdG8gYmUgc2F2ZWQsIG9yIGlmIG11bHRpcGxlCi0JICB3aW5kb3dzIGFyZSBuZWVkZWQsIHRoZSBpbmZvIHNob3VsZCBnbyBpbiB0aGUgcHJpdmF0ZSBkYXRhCi0JICBzdHJ1Y3R1cmUgZm9yIHRoaXMgZGV2aWNlLgotCi0JICBOb3RlIHRoYXQgdGhlIG1lbW9yeSB3aW5kb3cgYmFzZSBpcyBhIHBoeXNpY2FsIGFkZHJlc3MsIGFuZAotCSAgbmVlZHMgdG8gYmUgbWFwcGVkIHRvIHZpcnR1YWwgc3BhY2Ugd2l0aCBpb3JlbWFwKCkgYmVmb3JlIGl0Ci0JICBpcyB1c2VkLgotCSovCi0JaWYgKChjZmctPm1lbS5ud2luID4gMCkgfHwgKGRmbHQtPm1lbS5ud2luID4gMCkpIHsKLQkJY2lzdHBsX21lbV90ICptZW0gPSAoY2ZnLT5tZW0ubndpbikgPyAmY2ZnLT5tZW0gOiAmZGZsdC0+bWVtOwotCQltZW1yZXFfdCBtYXA7Ci0JCXJlcS0+QXR0cmlidXRlcyA9IFdJTl9EQVRBX1dJRFRIXzE2fFdJTl9NRU1PUllfVFlQRV9DTTsKLQkJcmVxLT5BdHRyaWJ1dGVzIHw9IFdJTl9FTkFCTEU7Ci0JCXJlcS0+QmFzZSA9IG1lbS0+d2luWzBdLmhvc3RfYWRkcjsKLQkJcmVxLT5TaXplID0gbWVtLT53aW5bMF0ubGVuOwotCQlyZXEtPkFjY2Vzc1NwZWVkID0gMDsKLQkJaWYgKHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhwX2RldiwgcmVxLCAmcF9kZXYtPndpbikgIT0gMCkKLQkJCXJldHVybiAtRU5PREVWOwotCQltYXAuUGFnZSA9IDA7Ci0JCW1hcC5DYXJkT2Zmc2V0ID0gbWVtLT53aW5bMF0uY2FyZF9hZGRyOwotCQlpZiAocGNtY2lhX21hcF9tZW1fcGFnZShwX2RldiwgcF9kZXYtPndpbiwgJm1hcCkgIT0gMCkKLQkJCXJldHVybiAtRU5PREVWOwotCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjU1LDE2ICsyMjQsMTEgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgc2VkbGJhdWVyX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICB3aW5fcmVxX3QgKnJlcTsKICAgICBpbnQgcmV0OwogICAgIElzZG5DYXJkX3QgIGljYXJkOwogCiAgICAgZGV2X2RiZygmbGluay0+ZGV2LCAic2VkbGJhdWVyX2NvbmZpZygweCVwKVxuIiwgbGluayk7CiAKLSAgICByZXEgPSBremFsbG9jKHNpemVvZih3aW5fcmVxX3QpLCBHRlBfS0VSTkVMKTsKLSAgICBpZiAoIXJlcSkKLQkgICAgcmV0dXJuIC1FTk9NRU07Ci0KICAgICAvKgogICAgICAgSW4gdGhpcyBsb29wLCB3ZSBzY2FuIHRoZSBDSVMgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGUgZW50cmllcywKICAgICAgIGVhY2ggb2Ygd2hpY2ggZGVzY3JpYmVzIGEgdmFsaWQgY2FyZCBjb25maWd1cmF0aW9uLCBpbmNsdWRpbmcKQEAgLTI3Nyw3ICsyNDEsNyBAQAogICAgICAgdGhlc2UgdGhpbmdzIHdpdGhvdXQgY29uc3VsdGluZyB0aGUgQ0lTLCBhbmQgbW9zdCBjbGllbnQgZHJpdmVycwogICAgICAgd2lsbCBvbmx5IHVzZSB0aGUgQ0lTIHRvIGZpbGwgaW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCBkZXRhaWxzLgogICAgICovCi0gICAgcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIHNlZGxiYXVlcl9jb25maWdfY2hlY2ssIHJlcSk7CisgICAgcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIHNlZGxiYXVlcl9jb25maWdfY2hlY2ssIE5VTEwpOwogICAgIGlmIChyZXQpCiAJICAgIGdvdG8gZmFpbGVkOwogCkBAIC0yOTcsMjcgKzI2MSwyMiBAQAogCXByaW50aygiLCBWcHAgJWQuJWQiLCBsaW5rLT5jb25mLlZwcC8xMCwgbGluay0+Y29uZi5WcHAlMTApOwogICAgIGlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCiAJcHJpbnRrKCIsIGlycSAlZCIsIGxpbmstPmlycSk7Ci0gICAgaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKLQlwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKLQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQxK2xpbmstPmlvLk51bVBvcnRzMS0xKTsKLSAgICBpZiAobGluay0+aW8uTnVtUG9ydHMyKQotCXByaW50aygiICYgMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MiwKLQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQyK2xpbmstPmlvLk51bVBvcnRzMi0xKTsKLSAgICBpZiAobGluay0+d2luKQotCXByaW50aygiLCBtZW0gMHglMDZseC0weCUwNmx4IiwgcmVxLT5CYXNlLAotCSAgICAgICByZXEtPkJhc2UrcmVxLT5TaXplLTEpOworICAgIGlmIChsaW5rLT5yZXNvdXJjZVswXSkKKwlwcmludGsoIiAmICVwUiIsIGxpbmstPnJlc291cmNlWzBdKTsKKyAgICBpZiAobGluay0+cmVzb3VyY2VbMV0pCisJcHJpbnRrKCIgJiAlcFIiLCBsaW5rLT5yZXNvdXJjZVsxXSk7CiAgICAgcHJpbnRrKCJcbiIpOwogCiAgICAgaWNhcmQucGFyYVswXSA9IGxpbmstPmlycTsKLSAgICBpY2FyZC5wYXJhWzFdID0gbGluay0+aW8uQmFzZVBvcnQxOworICAgIGljYXJkLnBhcmFbMV0gPSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAgICAgaWNhcmQucHJvdG9jb2wgPSBwcm90b2NvbDsKICAgICBpY2FyZC50eXAgPSBJU0ROX0NUWVBFX1NFRExCQVVFUl9QQ01DSUE7CiAgICAgCiAgICAgcmV0ID0gaGlzYXhfaW5pdF9wY21jaWEobGluaywgCiAJCQkgICAgJigoKGxvY2FsX2luZm9fdCAqKWxpbmstPnByaXYpLT5zdG9wKSwgJmljYXJkKTsKICAgICBpZiAocmV0IDwgMCkgewotCXByaW50ayhLRVJOX0VSUiAic2VkbGJhdWVyX2NzOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBTRURMQkFVRVIgUENNQ0lBICVkIGF0IGkvbyAlI3hcbiIsCi0JCXJldCwgbGluay0+aW8uQmFzZVBvcnQxKTsKKwlwcmludGsoS0VSTl9FUlIgInNlZGxiYXVlcl9jczogZmFpbGVkIHRvIGluaXRpYWxpemUgU0VETEJBVUVSIFBDTUNJQSAlZCB3aXRoICVwUlxuIiwKKwkJcmV0LCBsaW5rLT5yZXNvdXJjZVswXSk7CiAgICAgCXNlZGxiYXVlcl9yZWxlYXNlKGxpbmspOwogCXJldHVybiAtRU5PREVWOwogICAgIH0gZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlaS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3RlaS5jCmluZGV4IGY0Y2IxNzguLjg0MmY5YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWkuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVpLmMKQEAgLTEzMCw3ICsxMzAsNyBAQAogCiAJaWYgKHN0LT5sMi50ZWkgIT0gLTEpIHsKIAkJc3QtPm1hLnRlaV9tLnByaW50ZGVidWcoJnN0LT5tYS50ZWlfbSwKLQkJCSJhc3NpZ24gcmVxdWVzdCBmb3IgYWxscmVhZHkgYXNpZ25lZCB0ZWkgJWQiLAorCQkJImFzc2lnbiByZXF1ZXN0IGZvciBhbHJlYWR5IGFzaWduZWQgdGVpICVkIiwKIAkJCXN0LT5sMi50ZWkpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzX2NzLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNfY3MuYwppbmRleCA1NzcxOTU1Li43Mjk2MTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNfY3MuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNfY3MuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CkBAIC0xMDcsOSArMTA2LDggQEAKICAgICAgIGFuZCBhdHRyaWJ1dGVzIG9mIElPIHdpbmRvd3MpIGFyZSBmaXhlZCBieSB0aGUgbmF0dXJlIG9mIHRoZQogICAgICAgZGV2aWNlLCBhbmQgY2FuIGJlIGhhcmQtd2lyZWQgaGVyZS4KICAgICAqLwotICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IDk2OwotICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0gICAgbGluay0+aW8uSU9BZGRyTGluZXMgPSA1OworICAgIGxpbmstPnJlc291cmNlWzBdLT5lbmQgPSA5NjsKKyAgICBsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CiAKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CkBAIC0xNTQsMTYgKzE1MiwxOCBAQAogewogCWludCBqOwogCisJcF9kZXYtPmlvX2xpbmVzID0gNTsKKwogCWlmICgoY2YtPmlvLm53aW4gPiAwKSAmJiBjZi0+aW8ud2luWzBdLmJhc2UpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiKHRlbGVzX2NzOiBsb29rcyBsaWtlIHRoZSA5NiBtb2RlbClcbiIpOwotCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOwotCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGNmLT5pby53aW5bMF0uYmFzZTsKKwkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldikpCiAJCQlyZXR1cm4gMDsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9JTkZPICIodGVsZXNfY3M6IGxvb2tzIGxpa2UgdGhlIDk3IG1vZGVsKVxuIik7CiAJCWZvciAoaiA9IDB4MmYwOyBqID4gMHgxMDA7IGogLT0gMHgxMCkgewotCQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGo7Ci0JCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkKKwkJCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBqOworCQkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldikpCiAJCQkJcmV0dXJuIDA7CiAJCX0KIAl9CkBAIC0xOTUsMjMgKzE5NSwyMSBAQAogCSAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4KTsKICAgICBpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQogCSAgICBwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxKTsKLSAgICBpZiAobGluay0+aW8uTnVtUG9ydHMxKQotICAgICAgICBwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKLSAgICAgICAgICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MStsaW5rLT5pby5OdW1Qb3J0czEtMSk7Ci0gICAgaWYgKGxpbmstPmlvLk51bVBvcnRzMikKLSAgICAgICAgcHJpbnRrKCIgJiAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQyLAotICAgICAgICAgICAgICAgbGluay0+aW8uQmFzZVBvcnQyK2xpbmstPmlvLk51bVBvcnRzMi0xKTsKKyAgICBpZiAobGluay0+cmVzb3VyY2VbMF0pCisJcHJpbnRrKCIgJiAlcFIiLCBsaW5rLT5yZXNvdXJjZVswXSk7CisgICAgaWYgKGxpbmstPnJlc291cmNlWzFdKQorCXByaW50aygiICYgJXBSIiwgbGluay0+cmVzb3VyY2VbMV0pOwogICAgIHByaW50aygiXG4iKTsKIAogICAgIGljYXJkLnBhcmFbMF0gPSBsaW5rLT5pcnE7Ci0gICAgaWNhcmQucGFyYVsxXSA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKyAgICBpY2FyZC5wYXJhWzFdID0gbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogICAgIGljYXJkLnByb3RvY29sID0gcHJvdG9jb2w7CiAgICAgaWNhcmQudHlwID0gSVNETl9DVFlQRV9URUxFU1BDTUNJQTsKICAgICAKICAgICBpID0gaGlzYXhfaW5pdF9wY21jaWEobGluaywgJigoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmJ1c3kpLCAmaWNhcmQpOwogICAgIGlmIChpIDwgMCkgewogICAgIAlwcmludGsoS0VSTl9FUlIgInRlbGVzX2NzOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBUZWxlcyBQQ01DSUEgJWQgYXQgaS9vICUjeFxuIiwKLSAgICAJCWksIGxpbmstPmlvLkJhc2VQb3J0MSk7CisJCQlpLCAodW5zaWduZWQgaW50KSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQpOwogICAgIAl0ZWxlc19jc19yZWxlYXNlKGxpbmspOwogCXJldHVybiAtRU5PREVWOwogICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jY29uZi5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Njb25mLmMKaW5kZXggODA5NjY0Ni4uOTZiM2UzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Njb25mLmMKKysrIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Njb25mLmMKQEAgLTE3LDExICsxNywxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAKICNpbmNsdWRlICJoeXNkbl9kZWZzLmgiCiAKK3N0YXRpYyBERUZJTkVfTVVURVgoaHlzZG5fY29uZl9tdXRleCk7CiBzdGF0aWMgY2hhciAqaHlzZG5fcHJvY2NvbmZfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjguNi40ICQiOwogCiAjZGVmaW5lIElORk9fT1VUX0xFTiA4MAkJLyogbGVuZ3RoIG9mIGluZm8gbGluZSBpbmNsdWRpbmcgbGYgKi8KQEAgLTIzNCw3ICsyMzUsNyBAQAogCWNoYXIgKmNwLCAqdG1wOwogCiAJLyogbm93IHNlYXJjaCB0aGUgYWRkcmVzc2VkIGNhcmQgKi8KLQlsb2NrX2tlcm5lbCgpOworCW11dGV4X2xvY2soJmh5c2RuX2NvbmZfbXV0ZXgpOwogCWNhcmQgPSBjYXJkX3Jvb3Q7CiAJd2hpbGUgKGNhcmQpIHsKIAkJcGQgPSBjYXJkLT5wcm9jY29uZjsKQEAgLTI0Myw3ICsyNDQsNyBAQAogCQljYXJkID0gY2FyZC0+bmV4dDsJLyogc2VhcmNoIG5leHQgZW50cnkgKi8KIAl9CiAJaWYgKCFjYXJkKSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKKwkJbXV0ZXhfdW5sb2NrKCZoeXNkbl9jb25mX211dGV4KTsKIAkJcmV0dXJuICgtRU5PREVWKTsJLyogZGV2aWNlIGlzIHVua25vd24vaW52YWxpZCAqLwogCX0KIAlpZiAoY2FyZC0+ZGVidWdfZmxhZ3MgJiAoTE9HX1BST0NfT1BFTiB8IExPR19QUk9DX0FMTCkpCkBAIC0yNTUsNyArMjU2LDcgQEAKIAkJLyogd3JpdGUgb25seSBhY2Nlc3MgLT4gd3JpdGUgYm9vdCBmaWxlIG9yIGNvbmYgbGluZSAqLwogCiAJCWlmICghKGNuZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjb25mX3dyaXRlZGF0YSksIEdGUF9LRVJORUwpKSkgewotCQkJdW5sb2NrX2tlcm5lbCgpOworCQkJbXV0ZXhfdW5sb2NrKCZoeXNkbl9jb25mX211dGV4KTsKIAkJCXJldHVybiAoLUVGQVVMVCk7CiAJCX0KIAkJY25mLT5jYXJkID0gY2FyZDsKQEAgLTI2Nyw3ICsyNjgsNyBAQAogCQkvKiByZWFkIGFjY2VzcyAtPiBvdXRwdXQgY2FyZCBpbmZvIGRhdGEgKi8KIAogCQlpZiAoISh0bXAgPSBrbWFsbG9jKElORk9fT1VUX0xFTiAqIDIgKyAyLCBHRlBfS0VSTkVMKSkpIHsKLQkJCXVubG9ja19rZXJuZWwoKTsKKwkJCW11dGV4X3VubG9jaygmaHlzZG5fY29uZl9tdXRleCk7CiAJCQlyZXR1cm4gKC1FRkFVTFQpOwkvKiBvdXQgb2YgbWVtb3J5ICovCiAJCX0KIAkJZmlsZXAtPnByaXZhdGVfZGF0YSA9IHRtcDsJLyogc3RhcnQgb2Ygc3RyaW5nICovCkBAIC0zMDEsMTAgKzMwMiwxMCBAQAogCQkqY3ArKyA9ICdcbic7CiAJCSpjcCA9IDA7CS8qIGVuZCBvZiBzdHJpbmcgKi8KIAl9IGVsc2UgewkJLyogc2ltdWx0YW5lb3VzIHJlYWQvd3JpdGUgYWNjZXNzIGZvcmJpZGRlbiAhICovCi0JCXVubG9ja19rZXJuZWwoKTsKKwkJbXV0ZXhfdW5sb2NrKCZoeXNkbl9jb25mX211dGV4KTsKIAkJcmV0dXJuICgtRVBFUk0pOwkvKiBubyBwZXJtaXNzaW9uIHRoaXMgdGltZSAqLwogCX0KLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZoeXNkbl9jb25mX211dGV4KTsKIAlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm8sIGZpbGVwKTsKIH0JCQkJLyogaHlzZG5fY29uZl9vcGVuICovCiAKQEAgLTMxOSw3ICszMjAsNyBAQAogCWludCByZXR2YWwgPSAwOwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGQ7CiAKLQlsb2NrX2tlcm5lbCgpOworCW11dGV4X2xvY2soJmh5c2RuX2NvbmZfbXV0ZXgpOwogCS8qIHNlYXJjaCB0aGUgYWRkcmVzc2VkIGNhcmQgKi8KIAljYXJkID0gY2FyZF9yb290OwogCXdoaWxlIChjYXJkKSB7CkBAIC0zMjksNyArMzMwLDcgQEAKIAkJY2FyZCA9IGNhcmQtPm5leHQ7CS8qIHNlYXJjaCBuZXh0IGVudHJ5ICovCiAJfQogCWlmICghY2FyZCkgewotCQl1bmxvY2tfa2VybmVsKCk7CisJCW11dGV4X3VubG9jaygmaHlzZG5fY29uZl9tdXRleCk7CiAJCXJldHVybiAoLUVOT0RFVik7CS8qIGRldmljZSBpcyB1bmtub3duL2ludmFsaWQgKi8KIAl9CiAJaWYgKGNhcmQtPmRlYnVnX2ZsYWdzICYgKExPR19QUk9DX09QRU4gfCBMT0dfUFJPQ19BTEwpKQpAQCAtMzUyLDcgKzM1Myw3IEBACiAKIAkJa2ZyZWUoZmlsZXAtPnByaXZhdGVfZGF0YSk7CS8qIHJlbGVhc2UgbWVtb3J5ICovCiAJfQotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJmh5c2RuX2NvbmZfbXV0ZXgpOwogCXJldHVybiAocmV0dmFsKTsKIH0JCQkJLyogaHlzZG5fY29uZl9jbG9zZSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2xvZy5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Nsb2cuYwppbmRleCBlODNmNmZkLi4yZWU5M2QwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2xvZy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jbG9nLmMKQEAgLTE1LDEzICsxNSwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKICNpbmNsdWRlICJoeXNkbl9kZWZzLmgiCiAKIC8qIHRoZSBwcm9jIHN1YmRpciBmb3IgdGhlIGludGVyZmFjZSBpcyBkZWZpbmVkIGluIHRoZSBwcm9jY29uZiBtb2R1bGUgKi8KIGV4dGVybiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmh5c2RuX3Byb2NfZW50cnk7CiAKK3N0YXRpYyBERUZJTkVfTVVURVgoaHlzZG5fbG9nX211dGV4KTsKIHN0YXRpYyB2b2lkIHB1dF9sb2dfYnVmZmVyKGh5c2RuX2NhcmQgKiBjYXJkLCBjaGFyICpjcCk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTU0LDEwICsxNTYsOSBAQAogaHlzZG5fbG9nX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqIG9mZikKIHsKIAl1bnNpZ25lZCBsb25nIHUgPSAwOwotCWludCBmb3VuZCA9IDA7Ci0JdW5zaWduZWQgY2hhciAqY3AsIHZhbGJ1ZlsxMjhdOwotCWxvbmcgYmFzZSA9IDEwOwotCWh5c2RuX2NhcmQgKmNhcmQgPSAoaHlzZG5fY2FyZCAqKSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IHJjOworCXVuc2lnbmVkIGNoYXIgdmFsYnVmWzEyOF07CisJaHlzZG5fY2FyZCAqY2FyZCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAogCWlmIChjb3VudCA+IChzaXplb2YodmFsYnVmKSAtIDEpKQogCQljb3VudCA9IHNpemVvZih2YWxidWYpIC0gMTsJLyogbGltaXQgbGVuZ3RoICovCkBAIC0xNjUsMzIgKzE2NiwxMCBAQAogCQlyZXR1cm4gKC1FRkFVTFQpOwkvKiBjb3B5IGZhaWxlZCAqLwogCiAJdmFsYnVmW2NvdW50XSA9IDA7CS8qIHRlcm1pbmF0aW5nIDAgKi8KLQljcCA9IHZhbGJ1ZjsKLQlpZiAoKGNvdW50ID4gMikgJiYgKHZhbGJ1ZlswXSA9PSAnMCcpICYmICh2YWxidWZbMV0gPT0gJ3gnKSkgewotCQljcCArPSAyOwkvKiBwb2ludGVyIGFmdGVyIGhleCBtb2RpZmllciAqLwotCQliYXNlID0gMTY7Ci0JfQotCS8qIHNjYW4gdGhlIGlucHV0IGZvciBkZWJ1ZyBmbGFncyAqLwotCXdoaWxlICgqY3ApIHsKLQkJaWYgKCgqY3AgPj0gJzAnKSAmJiAoKmNwIDw9ICc5JykpIHsKLQkJCWZvdW5kID0gMTsKLQkJCXUgKj0gYmFzZTsJLyogYWRqdXN0IHRvIG5leHQgZGlnaXQgKi8KLQkJCXUgKz0gKmNwKysgLSAnMCc7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoYmFzZSAhPSAxNikKLQkJCWJyZWFrOwkvKiBlbmQgb2YgbnVtYmVyICovCiAKLQkJaWYgKCgqY3AgPj0gJ2EnKSAmJiAoKmNwIDw9ICdmJykpIHsKLQkJCWZvdW5kID0gMTsKLQkJCXUgKj0gYmFzZTsJLyogYWRqdXN0IHRvIG5leHQgZGlnaXQgKi8KLQkJCXUgKz0gKmNwKysgLSAnYScgKyAxMDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWJyZWFrOwkJLyogdGVybWluYXRlZCAqLwotCX0KKwlyYyA9IHN0cmljdF9zdHJ0b3VsKHZhbGJ1ZiwgMCwgJnUpOwogCi0JaWYgKGZvdW5kKSB7CisJaWYgKHJjID09IDApIHsKIAkJY2FyZC0+ZGVidWdfZmxhZ3MgPSB1OwkvKiByZW1lbWJlciBkZWJ1ZyBmbGFncyAqLwogCQloeXNkbl9hZGRsb2coY2FyZCwgImRlYnVnIHNldCB0byAweCVseCIsIGNhcmQtPmRlYnVnX2ZsYWdzKTsKIAl9CkBAIC0yNTEsNyArMjMwLDcgQEAKIAlzdHJ1Y3QgcHJvY2RhdGEgKnBkID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JbG9ja19rZXJuZWwoKTsKKwltdXRleF9sb2NrKCZoeXNkbl9sb2dfbXV0ZXgpOwogCWNhcmQgPSBjYXJkX3Jvb3Q7CiAJd2hpbGUgKGNhcmQpIHsKIAkJcGQgPSBjYXJkLT5wcm9jbG9nOwpAQCAtMjYwLDcgKzIzOSw3IEBACiAJCWNhcmQgPSBjYXJkLT5uZXh0OwkvKiBzZWFyY2ggbmV4dCBlbnRyeSAqLwogCX0KIAlpZiAoIWNhcmQpIHsKLQkJdW5sb2NrX2tlcm5lbCgpOworCQltdXRleF91bmxvY2soJmh5c2RuX2xvZ19tdXRleCk7CiAJCXJldHVybiAoLUVOT0RFVik7CS8qIGRldmljZSBpcyB1bmtub3duL2ludmFsaWQgKi8KIAl9CiAJZmlsZXAtPnByaXZhdGVfZGF0YSA9IGNhcmQ7CS8qIHJlbWVtYmVyIG91ciBvd24gY2FyZCAqLwpAQCAtMjc4LDEwICsyNTcsMTAgQEAKIAkJCWZpbGVwLT5wcml2YXRlX2RhdGEgPSAmcGQtPmxvZ19oZWFkOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5oeXNkbl9sb2NrLCBmbGFncyk7CiAJfSBlbHNlIHsJCS8qIHNpbXVsdGFuZW91cyByZWFkL3dyaXRlIGFjY2VzcyBmb3JiaWRkZW4gISAqLwotCQl1bmxvY2tfa2VybmVsKCk7CisJCW11dGV4X3VubG9jaygmaHlzZG5fbG9nX211dGV4KTsKIAkJcmV0dXJuICgtRVBFUk0pOwkvKiBubyBwZXJtaXNzaW9uIHRoaXMgdGltZSAqLwogCX0KLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZoeXNkbl9sb2dfbXV0ZXgpOwogCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlubywgZmlsZXApOwogfQkJCQkvKiBoeXNkbl9sb2dfb3BlbiAqLwogCkBAIC0zMDAsNyArMjc5LDcgQEAKIAloeXNkbl9jYXJkICpjYXJkOwogCWludCByZXR2YWwgPSAwOwogCi0JbG9ja19rZXJuZWwoKTsKKwltdXRleF9sb2NrKCZoeXNkbl9sb2dfbXV0ZXgpOwogCWlmICgoZmlsZXAtPmZfbW9kZSAmIChGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEUpKSA9PSBGTU9ERV9XUklURSkgewogCQkvKiB3cml0ZSBvbmx5IGFjY2VzcyAtPiB3cml0ZSBkZWJ1ZyBsZXZlbCB3cml0dGVuICovCiAJCXJldHZhbCA9IDA7CS8qIHN1Y2Nlc3MgKi8KQEAgLTMzOSw3ICszMTgsNyBAQAogCQkJCQlrZnJlZShpbmYpOwogCQkJCX0KIAl9CQkJLyogcmVhZCBhY2Nlc3MgKi8KLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZoeXNkbl9sb2dfbXV0ZXgpOwogCiAJcmV0dXJuIChyZXR2YWwpOwogfQkJCQkvKiBoeXNkbl9sb2dfY2xvc2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9jb21tb24uYyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9jb21tb24uYwppbmRleCBhNDRjZGI0Li4xNTYzMmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fY29tbW9uLmMKKysrIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX2NvbW1vbi5jCkBAIC0xNyw3ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9pc2RuLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgImlzZG5fY29tbW9uLmgiCiAjaW5jbHVkZSAiaXNkbl90dHkuaCIKICNpbmNsdWRlICJpc2RuX25ldC5oIgpAQCAtNDIsNiArNDIsNyBAQAogCiBpc2RuX2RldiAqZGV2OwogCitzdGF0aWMgREVGSU5FX01VVEVYKGlzZG5fbXV0ZXgpOwogc3RhdGljIGNoYXIgKmlzZG5fcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjEuMi4zICQiOwogCiBleHRlcm4gY2hhciAqaXNkbl9uZXRfcmV2aXNpb247CkBAIC0xMDcwLDcgKzEwNzEsNyBAQAogCWludCByZXR2YWw7CiAJY2hhciAqcDsKIAotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmaXNkbl9tdXRleCk7CiAJaWYgKG1pbm9yID09IElTRE5fTUlOT1JfU1RBVFVTKSB7CiAJCWlmICghZmlsZS0+cHJpdmF0ZV9kYXRhKSB7CiAJCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKQEAgLTExNjMsNyArMTE2NCw3IEBACiAjZW5kaWYKIAlyZXR2YWwgPSAtRU5PREVWOwogIG91dDoKLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZpc2RuX211dGV4KTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0xMTgwLDcgKzExODEsNyBAQAogCWlmICghZGV2LT5kcml2ZXJzKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmaXNkbl9tdXRleCk7CiAJaWYgKG1pbm9yIDw9IElTRE5fTUlOT1JfQk1BWCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJpc2RuX3dyaXRlIG1pbm9yICVkIG9ic29sZXRlIVxuIiwgbWlub3IpOwogCQlkcnZpZHggPSBpc2RuX21pbm9yMmRydihtaW5vcik7CkBAIC0xMjI1LDcgKzEyMjYsNyBAQAogI2VuZGlmCiAJcmV0dmFsID0gLUVOT0RFVjsKICBvdXQ6Ci0JdW5sb2NrX2tlcm5lbCgpOworCW11dGV4X3VubG9jaygmaXNkbl9tdXRleCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTIzNiw3ICsxMjM3LDcgQEAKIAl1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJaW50IGRydmlkeCA9IGlzZG5fbWlub3IyZHJ2KG1pbm9yIC0gSVNETl9NSU5PUl9DVFJMKTsKIAotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmaXNkbl9tdXRleCk7CiAJaWYgKG1pbm9yID09IElTRE5fTUlOT1JfU1RBVFVTKSB7CiAJCXBvbGxfd2FpdChmaWxlLCAmKGRldi0+aW5mb193YWl0cSksIHdhaXQpOwogCQkvKiBtYXNrID0gUE9MTE9VVCB8IFBPTExXUk5PUk07ICovCkBAIC0xMjY2LDcgKzEyNjcsNyBAQAogI2VuZGlmCiAJbWFzayA9IFBPTExFUlI7CiAgb3V0OgotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJmlzZG5fbXV0ZXgpOwogCXJldHVybiBtYXNrOwogfQogCkBAIC0xNzI3LDkgKzE3MjgsOSBAQAogewogCWludCByZXQ7CiAKLQlsb2NrX2tlcm5lbCgpOworCW11dGV4X2xvY2soJmlzZG5fbXV0ZXgpOwogCXJldCA9IGlzZG5faW9jdGwoZmlsZSwgY21kLCBhcmcpOwotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJmlzZG5fbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE3NDUsNyArMTc0Niw3IEBACiAJaW50IGNoaWR4OwogCWludCByZXR2YWwgPSAtRU5PREVWOwogCi0JbG9ja19rZXJuZWwoKTsKKwltdXRleF9sb2NrKCZpc2RuX211dGV4KTsKIAlpZiAobWlub3IgPT0gSVNETl9NSU5PUl9TVEFUVVMpIHsKIAkJaW5mb3N0cnVjdCAqcDsKIApAQCAtMTc5Niw3ICsxNzk3LDcgQEAKICNlbmRpZgogIG91dDoKIAlub25zZWVrYWJsZV9vcGVuKGlubywgZmlsZXApOwotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJmlzZG5fbXV0ZXgpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTE4MDUsNyArMTgwNiw3IEBACiB7CiAJdWludCBtaW5vciA9IGltaW5vcihpbm8pOwogCi0JbG9ja19rZXJuZWwoKTsKKwltdXRleF9sb2NrKCZpc2RuX211dGV4KTsKIAlpZiAobWlub3IgPT0gSVNETl9NSU5PUl9TVEFUVVMpIHsKIAkJaW5mb3N0cnVjdCAqcCA9IGRldi0+aW5mb2NoYWluOwogCQlpbmZvc3RydWN0ICpxID0gTlVMTDsKQEAgLTE4MzksNyArMTg0MCw3IEBACiAjZW5kaWYKIAogIG91dDoKLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZpc2RuX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX25ldC5jIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX25ldC5jCmluZGV4IDhjODVkMWUuLjI2ZDQ0YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9uZXQuYworKysgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fbmV0LmMKQEAgLTI5MjQsMTYgKzI5MjQsMTcgQEAKIAkJY2ZnLT5kaWFsdGltZW91dCA9IGxwLT5kaWFsdGltZW91dCA+PSAwID8gbHAtPmRpYWx0aW1lb3V0IC8gSFogOiAtMTsKIAkJY2ZnLT5kaWFsd2FpdCA9IGxwLT5kaWFsd2FpdCAvIEhaOwogCQlpZiAobHAtPnNsYXZlKSB7Ci0JCQlpZiAoc3RybGVuKGxwLT5zbGF2ZS0+bmFtZSkgPiA4KQorCQkJaWYgKHN0cmxlbihscC0+c2xhdmUtPm5hbWUpID49IDEwKQogCQkJCXN0cmNweShjZmctPnNsYXZlLCAidG9vLWxvbmciKTsKIAkJCWVsc2UKIAkJCQlzdHJjcHkoY2ZnLT5zbGF2ZSwgbHAtPnNsYXZlLT5uYW1lKTsKIAkJfSBlbHNlCiAJCQljZmctPnNsYXZlWzBdID0gJ1wwJzsKIAkJaWYgKGxwLT5tYXN0ZXIpIHsKLQkJCWlmIChzdHJsZW4obHAtPm1hc3Rlci0+bmFtZSkgPiA4KQorCQkJaWYgKHN0cmxlbihscC0+bWFzdGVyLT5uYW1lKSA+PSAxMCkKIAkJCQlzdHJjcHkoY2ZnLT5tYXN0ZXIsICJ0b28tbG9uZyIpOwotCQkJc3RyY3B5KGNmZy0+bWFzdGVyLCBscC0+bWFzdGVyLT5uYW1lKTsKKwkJCWVsc2UKKwkJCQlzdHJjcHkoY2ZnLT5tYXN0ZXIsIGxwLT5tYXN0ZXItPm5hbWUpOwogCQl9IGVsc2UKIAkJCWNmZy0+bWFzdGVyWzBdID0gJ1wwJzsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fcHBwLmMgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fcHBwLmMKaW5kZXggZjM3YjhmNi4uZmU4MjRlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3BwcC5jCisrKyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9wcHAuYwpAQCAtNDQ5LDE0ICs0NDksOSBAQAogCiAJLyogdXByb2cubGVuIGlzIHVuc2lnbmVkIHNob3J0LCBzbyBubyBvdmVyZmxvdyBoZXJlICovCiAJbGVuID0gdXByb2cubGVuICogc2l6ZW9mKHN0cnVjdCBzb2NrX2ZpbHRlcik7Ci0JY29kZSA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoY29kZSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWlmIChjb3B5X2Zyb21fdXNlcihjb2RlLCB1cHJvZy5maWx0ZXIsIGxlbikpIHsKLQkJa2ZyZWUoY29kZSk7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KKwljb2RlID0gbWVtZHVwX3VzZXIodXByb2cuZmlsdGVyLCBsZW4pOworCWlmIChJU19FUlIoY29kZSkpCisJCXJldHVybiBQVFJfRVJSKGNvZGUpOwogCiAJZXJyID0gc2tfY2hrX2ZpbHRlcihjb2RlLCB1cHJvZy5sZW4pOwogCWlmIChlcnIpIHsKQEAgLTQ4Miw3ICs0NzcsNyBAQAogCXN0cnVjdCBpc2RuX3BwcF9jb21wX2RhdGEgZGF0YTsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAotCWlzID0gKHN0cnVjdCBpcHBwX3N0cnVjdCAqKSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaXMgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJbHAgPSBpcy0+bHA7CiAKIAlpZiAoaXMtPmRlYnVnICYgMHgxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3R0eS5jIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3R0eS5jCmluZGV4IGZjODQ1NGQuLjUxZGM2MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl90dHkuYworKysgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fdHR5LmMKQEAgLTI2MzYsMTIgKzI2MzYsNiBAQAogCQlpZiAoKGluZm8tPmZsYWdzICYgSVNETl9BU1lOQ19DTE9TSU5HKSB8fCAoIWluZm8tPnR0eSkpIHsKIAkJCXJldHVybjsKIAkJfQotI2lmZGVmIENPTkZJR19JU0ROX0FVRElPCi0JCWlmICggIWluZm8tPnZvbmxpbmUgKQotCQkJdHR5X2xkaXNjX2ZsdXNoKGluZm8tPnR0eSk7Ci0jZWxzZQotCQl0dHlfbGRpc2NfZmx1c2goaW5mby0+dHR5KTsKLSNlbmRpZgogCQlpZiAoKGluZm8tPmZsYWdzICYgSVNETl9BU1lOQ19DSEVDS19DRCkgJiYKIAkJICAgICghKChpbmZvLT5mbGFncyAmIElTRE5fQVNZTkNfQ0FMTE9VVF9BQ1RJVkUpICYmCiAJCSAgICAgICAoaW5mby0+ZmxhZ3MgJiBJU0ROX0FTWU5DX0NBTExPVVRfTk9IVVApKSkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9tSVNETi90ZWkuYyBiL2RyaXZlcnMvaXNkbi9tSVNETi90ZWkuYwppbmRleCAzNGU4OThmLi4xYjg1ZDlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vbUlTRE4vdGVpLmMKKysrIGIvZHJpdmVycy9pc2RuL21JU0ROL3RlaS5jCkBAIC00NTcsNyArNDU3LDcgQEAKIAogCWlmICh0bS0+bDItPnRlaSAhPSBHUk9VUF9URUkpIHsKIAkJdG0tPnRlaV9tLnByaW50ZGVidWcoJnRtLT50ZWlfbSwKLQkJCSJhc3NpZ24gcmVxdWVzdCBmb3IgYWxscmVhZHkgYXNzaWduZWQgdGVpICVkIiwKKwkJCSJhc3NpZ24gcmVxdWVzdCBmb3IgYWxyZWFkeSBhc3NpZ25lZCB0ZWkgJWQiLAogCQkJdG0tPmwyLT50ZWkpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL21JU0ROL3RpbWVyZGV2LmMgYi9kcml2ZXJzL2lzZG4vbUlTRE4vdGltZXJkZXYuYwppbmRleCA4MTA0OGI4Li5kZTQzYzhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vbUlTRE4vdGltZXJkZXYuYworKysgYi9kcml2ZXJzL2lzZG4vbUlTRE4vdGltZXJkZXYuYwpAQCAtMjQsOSArMjQsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbUlTRE5pZi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlICJjb3JlLmgiCiAKK3N0YXRpYyBERUZJTkVfTVVURVgobUlTRE5fbXV0ZXgpOwogc3RhdGljIHVfaW50CSpkZWJ1ZzsKIAogCkBAIC0yMjQsNyArMjI1LDcgQEAKIAlpZiAoKmRlYnVnICYgREVCVUdfVElNRVIpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlcyglcCwgJXgsICVseClcbiIsIF9fZnVuY19fLAogCQkgICAgZmlsZXAsIGNtZCwgYXJnKTsKLQlsb2NrX2tlcm5lbCgpOworCW11dGV4X2xvY2soJm1JU0ROX211dGV4KTsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgSU1BRERUSU1FUjoKIAkJaWYgKGdldF91c2VyKHRvdXQsIChpbnQgX191c2VyICopYXJnKSkgewpAQCAtMjU2LDcgKzI1Nyw3IEBACiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVJTlZBTDsKIAl9Ci0JdW5sb2NrX2tlcm5lbCgpOworCW11dGV4X3VubG9jaygmbUlTRE5fbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9wY2JpdC9kcnYuYyBiL2RyaXZlcnMvaXNkbi9wY2JpdC9kcnYuYwppbmRleCAxMjNjMWQ2Li4xNTA3ZDJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vcGNiaXQvZHJ2LmMKKysrIGIvZHJpdmVycy9pc2RuL3BjYml0L2Rydi5jCkBAIC00MTEsMTQgKzQxMSwxMCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQljYnVmID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOwotCQlpZiAoIWNidWYpCi0JCQlyZXR1cm4gLUVOT01FTTsKKwkJY2J1ZiA9IG1lbWR1cF91c2VyKGJ1ZiwgbGVuKTsKKwkJaWYgKElTX0VSUihjYnVmKSkKKwkJCXJldHVybiBQVFJfRVJSKGNidWYpOwogCi0JCWlmIChjb3B5X2Zyb21fdXNlcihjYnVmLCBidWYsIGxlbikpIHsKLQkJCWtmcmVlKGNidWYpOwotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KIAkJbWVtY3B5X3RvaW8oZGV2LT5zaF9tZW0sIGNidWYsIGxlbik7CiAJCWtmcmVlKGNidWYpOwogCQlyZXR1cm4gbGVuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL3NjL2lvY3RsLmMgYi9kcml2ZXJzL2lzZG4vc2MvaW9jdGwuYwppbmRleCAxMDgxMDkxLi40M2M1ZGMzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL3NjL2lvY3RsLmMKKysrIGIvZHJpdmVycy9pc2RuL3NjL2lvY3RsLmMKQEAgLTIxNSwxOSArMjE1LDEzIEBACiAJCXByX2RlYnVnKCIlczogRENCSU9TRVRTUElEOiBpb2N0bCByZWNlaXZlZFxuIiwKIAkJCQlzY19hZGFwdGVyW2NhcmRdLT5kZXZpY2VuYW1lKTsKIAotCQlzcGlkID0ga21hbGxvYyhTQ0lPQ19TUElEU0laRSwgR0ZQX0tFUk5FTCk7Ci0JCWlmKCFzcGlkKSB7Ci0JCQlrZnJlZShyY3Ztc2cpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQogCQkvKgogCQkgKiBHZXQgdGhlIHNwaWQgZnJvbSB1c2VyIHNwYWNlCiAJCSAqLwotCQlpZiAoY29weV9mcm9tX3VzZXIoc3BpZCwgZGF0YS0+ZGF0YXB0ciwgU0NJT0NfU1BJRFNJWkUpKSB7CisJCXNwaWQgPSBtZW1kdXBfdXNlcihkYXRhLT5kYXRhcHRyLCBTQ0lPQ19TUElEU0laRSk7CisJCWlmIChJU19FUlIoc3BpZCkpIHsKIAkJCWtmcmVlKHJjdm1zZyk7Ci0JCQlrZnJlZShzcGlkKTsKLQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIFBUUl9FUlIoc3BpZCk7CiAJCX0KIAogCQlwcl9kZWJ1ZygiJXM6IFNDSU9DU0VUU1BJRDogc2V0dGluZyBjaGFubmVsICVkIHNwaWQgdG8gJXNcbiIsIApAQCAtMjk2LDE4ICsyOTAsMTMgQEAKIAkJcHJfZGVidWcoIiVzOiBTQ0lPU0VURE46IGlvY3RsIHJlY2VpdmVkXG4iLAogCQkJCXNjX2FkYXB0ZXJbY2FyZF0tPmRldmljZW5hbWUpOwogCi0JCWRuID0ga21hbGxvYyhTQ0lPQ19ETlNJWkUsIEdGUF9LRVJORUwpOwotCQlpZiAoIWRuKSB7Ci0JCQlrZnJlZShyY3Ztc2cpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KIAkJLyoKIAkJICogR2V0IHRoZSBzcGlkIGZyb20gdXNlciBzcGFjZQogCQkgKi8KLQkJaWYgKGNvcHlfZnJvbV91c2VyKGRuLCBkYXRhLT5kYXRhcHRyLCBTQ0lPQ19ETlNJWkUpKSB7CisJCWRuID0gbWVtZHVwX3VzZXIoZGF0YS0+ZGF0YXB0ciwgU0NJT0NfRE5TSVpFKTsKKwkJaWYgKElTX0VSUihkbikpIHsKIAkJCWtmcmVlKHJjdm1zZyk7Ci0JCQlrZnJlZShkbik7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldHVybiBQVFJfRVJSKGRuKTsKIAkJfQogCiAJCXByX2RlYnVnKCIlczogU0NJT0NTRVRETjogc2V0dGluZyBjaGFubmVsICVkIGRuIHRvICVzXG4iLCAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9LY29uZmlnIGIvZHJpdmVycy9sZWRzL0tjb25maWcKaW5kZXggODFiZjI1ZS4uZTQxMTI2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL0tjb25maWcKKysrIGIvZHJpdmVycy9sZWRzL0tjb25maWcKQEAgLTMwMiw2ICszMDIsMTUgQEAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZSBzdXBwb3J0IGZvciBvbi1jaGlwIExFRCBkcml2ZXJzIGZvdW5kCiAJICBvbiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBNQzEzNzgzIFBNSUMuCiAKK2NvbmZpZyBMRURTX05TMgorCXRyaXN0YXRlICJMRUQgc3VwcG9ydCBmb3IgTmV0d29yayBTcGFjZSB2MiBHUElPIExFRHMiCisJZGVwZW5kcyBvbiBNQUNIX05FVFNQQUNFX1YyIHx8IE1BQ0hfSU5FVFNQQUNFX1YyIHx8IE1BQ0hfTkVUU1BBQ0VfTUFYX1YyCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBkdWFsLUdQSU8gTEVEIGZvdW5kIG9uIHRoZQorCSAgTmV0d29yayBTcGFjZSB2MiBib2FyZCAoYW5kIHBhcmVudHMpLiBUaGlzIGluY2x1ZGUgSW50ZXJuZXQgU3BhY2UgdjIsCisJICBOZXR3b3JrIFNwYWNlIChNYXgpIHYyIGFuZCBkMiBOZXR3b3JrIHYyIGJvYXJkcy4KKwogY29uZmlnIExFRFNfVFJJR0dFUlMKIAlib29sICJMRUQgVHJpZ2dlciBzdXBwb3J0IgogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9NYWtlZmlsZSBiL2RyaXZlcnMvbGVkcy9NYWtlZmlsZQppbmRleCAyNDkzZGU0Li43ZDZiOTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9sZWRzL01ha2VmaWxlCkBAIC0zNyw2ICszNyw3IEBACiBvYmotJChDT05GSUdfTEVEU19BRFA1NTIwKQkJKz0gbGVkcy1hZHA1NTIwLm8KIG9iai0kKENPTkZJR19MRURTX0RFTExfTkVUQk9PS1MpCSs9IGRlbGwtbGVkLm8KIG9iai0kKENPTkZJR19MRURTX01DMTM3ODMpCQkrPSBsZWRzLW1jMTM3ODMubworb2JqLSQoQ09ORklHX0xFRFNfTlMyKQkJCSs9IGxlZHMtbnMyLm8KIAogIyBMRUQgU1BJIERyaXZlcnMKIG9iai0kKENPTkZJR19MRURTX0RBQzEyNFMwODUpCQkrPSBsZWRzLWRhYzEyNHMwODUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtYmQyODAyLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1iZDI4MDIuYwppbmRleCA1ZGNkZjlkLi4xOWRjNGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1iZDI4MDIuYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1iZDI4MDIuYwpAQCAtMzUxLDcgKzM1MSw3IEBACiAJcmV0dXJuIGNvdW50OwkJCQkJCQlcCiB9CQkJCQkJCQkJXAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGJkMjgwMl9yZWcjI3JlZ19hZGRyIyNfYXR0ciA9IHsJCVwKLQkuYXR0ciA9IHsubmFtZSA9IHJlZ19uYW1lLCAubW9kZSA9IDA2NDQsIC5vd25lciA9IFRISVNfTU9EVUxFfSwJXAorCS5hdHRyID0gey5uYW1lID0gcmVnX25hbWUsIC5tb2RlID0gMDY0NH0sCQkJXAogCS5zdG9yZSA9IGJkMjgwMl9zdG9yZV9yZWcjI3JlZ19hZGRyLAkJCQlcCiB9OwogCkBAIC00ODIsNyArNDgyLDYgQEAKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAiYWR2YW5jZWRfY29uZmlndXJhdGlvbiIsCiAJCS5tb2RlID0gMDY0NCwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUKIAl9LAogCS5zaG93ID0gYmQyODAyX3Nob3dfYWR2X2NvbmYsCiAJLnN0b3JlID0gYmQyODAyX3N0b3JlX2Fkdl9jb25mLApAQCAtNTE5LDcgKzUxOCw2IEBACiAJLmF0dHIgPSB7CQkJCQkJCVwKIAkJLm5hbWUgPSBuYW1lX3N0ciwJCQkJCVwKIAkJLm1vZGUgPSAwNjQ0LAkJCQkJCVwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUJCQkJCVwKIAl9LAkJCQkJCQkJXAogCS5zaG93ID0gYmQyODAyX3Nob3dfIyNhdHRyX25hbWUsCQkJCVwKIAkuc3RvcmUgPSBiZDI4MDJfc3RvcmVfIyNhdHRyX25hbWUsCQkJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLW5zMi5jIGIvZHJpdmVycy9sZWRzL2xlZHMtbnMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRkY2U0YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLW5zMi5jCkBAIC0wLDAgKzEsMzM4IEBACisvKgorICogbGVkcy1uczIuYyAtIERyaXZlciBmb3IgdGhlIE5ldHdvcmsgU3BhY2UgdjIgKGFuZCBwYXJlbnRzKSBkdWFsLUdQSU8gTEVECisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIExhQ2llCisgKgorICogQXV0aG9yOiBTaW1vbiBHdWlub3QgPHNndWlub3RAbGFjaWUuY29tPgorICoKKyAqIEJhc2VkIG9uIGxlZHMtZ3Bpby5jIGJ5IFJhcGhhZWwgQXNzZW5hdCA8cmFwaEA4ZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bWFjaC9sZWRzLW5zMi5oPgorCisvKgorICogVGhlIE5ldHdvcmsgU3BhY2UgdjIgZHVhbC1HUElPIExFRCBpcyB3aXJlZCB0byBhIENQTEQgYW5kIGNhbiBibGluayBpbgorICogcmVsYXRpb24gd2l0aCB0aGUgU0FUQSBhY3Rpdml0eS4gVGhpcyBjYXBhYmlsaXR5IGlzIGV4cG9zZWQgdGhyb3VnaCB0aGUKKyAqICJzYXRhIiBzeXNmcyBhdHRyaWJ1dGUuCisgKgorICogVGhlIGZvbGxvd2luZyBhcnJheSBkZXRhaWwgdGhlIGRpZmZlcmVudCBMRUQgcmVnaXN0ZXJzIGFuZCB0aGUgY29tYmluYXRpb24KKyAqIG9mIHRoZWlyIHBvc3NpYmxlIHZhbHVlczoKKyAqCisgKiAgY21kX2xlZCAgIHwgIHNsb3dfbGVkICB8IC9TQVRBIGFjdGl2ZSB8IExFRCBzdGF0ZQorICogICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAorICogICAgIDEgICAgICB8ICAgICAwICAgICAgfCAgICAgIHggICAgICAgfCAgb2ZmCisgKiAgICAgLSAgICAgIHwgICAgIDEgICAgICB8ICAgICAgeCAgICAgICB8ICBvbgorICogICAgIDAgICAgICB8ICAgICAwICAgICAgfCAgICAgIDEgICAgICAgfCAgb24KKyAqICAgICAwICAgICAgfCAgICAgMCAgICAgIHwgICAgICAwICAgICAgIHwgIGJsaW5rIChyYXRlIDMwMG1zKQorICovCisKK2VudW0gbnMyX2xlZF9tb2RlcyB7CisJTlNfVjJfTEVEX09GRiwKKwlOU19WMl9MRURfT04sCisJTlNfVjJfTEVEX1NBVEEsCit9OworCitzdHJ1Y3QgbnMyX2xlZF9tb2RlX3ZhbHVlIHsKKwllbnVtIG5zMl9sZWRfbW9kZXMJbW9kZTsKKwlpbnQJCQljbWRfbGV2ZWw7CisJaW50CQkJc2xvd19sZXZlbDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbnMyX2xlZF9tb2RlX3ZhbHVlIG5zMl9sZWRfbW9kdmFsW10gPSB7CisJeyBOU19WMl9MRURfT0ZGCSwgMSwgMCB9LAorCXsgTlNfVjJfTEVEX09OCSwgMCwgMSB9LAorCXsgTlNfVjJfTEVEX09OCSwgMSwgMSB9LAorCXsgTlNfVjJfTEVEX1NBVEEsIDAsIDAgfSwKK307CisKK3N0cnVjdCBuczJfbGVkX2RhdGEgeworCXN0cnVjdCBsZWRfY2xhc3NkZXYJY2RldjsKKwl1bnNpZ25lZAkJY21kOworCXVuc2lnbmVkCQlzbG93OworCXVuc2lnbmVkIGNoYXIJCXNhdGE7IC8qIFRydWUgd2hlbiBTQVRBIG1vZGUgYWN0aXZlLiAqLworCXJ3bG9ja190CQlyd19sb2NrOyAvKiBMb2NrIEdQSU9zLiAqLworfTsKKworc3RhdGljIGludCBuczJfbGVkX2dldF9tb2RlKHN0cnVjdCBuczJfbGVkX2RhdGEgKmxlZF9kYXQsCisJCQkgICAgZW51bSBuczJfbGVkX21vZGVzICptb2RlKQoreworCWludCBpOworCWludCByZXQgPSAtRUlOVkFMOworCWludCBjbWRfbGV2ZWw7CisJaW50IHNsb3dfbGV2ZWw7CisKKwlyZWFkX2xvY2soJmxlZF9kYXQtPnJ3X2xvY2spOworCisJY21kX2xldmVsID0gZ3Bpb19nZXRfdmFsdWUobGVkX2RhdC0+Y21kKTsKKwlzbG93X2xldmVsID0gZ3Bpb19nZXRfdmFsdWUobGVkX2RhdC0+c2xvdyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShuczJfbGVkX21vZHZhbCk7IGkrKykgeworCQlpZiAoY21kX2xldmVsID09IG5zMl9sZWRfbW9kdmFsW2ldLmNtZF9sZXZlbCAmJgorCQkgICAgc2xvd19sZXZlbCA9PSBuczJfbGVkX21vZHZhbFtpXS5zbG93X2xldmVsKSB7CisJCQkqbW9kZSA9IG5zMl9sZWRfbW9kdmFsW2ldLm1vZGU7CisJCQlyZXQgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZWFkX3VubG9jaygmbGVkX2RhdC0+cndfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBuczJfbGVkX3NldF9tb2RlKHN0cnVjdCBuczJfbGVkX2RhdGEgKmxlZF9kYXQsCisJCQkgICAgIGVudW0gbnMyX2xlZF9tb2RlcyBtb2RlKQoreworCWludCBpOworCisJd3JpdGVfbG9jaygmbGVkX2RhdC0+cndfbG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShuczJfbGVkX21vZHZhbCk7IGkrKykgeworCQlpZiAobW9kZSA9PSBuczJfbGVkX21vZHZhbFtpXS5tb2RlKSB7CisJCQlncGlvX3NldF92YWx1ZShsZWRfZGF0LT5jbWQsCisJCQkJICAgICAgIG5zMl9sZWRfbW9kdmFsW2ldLmNtZF9sZXZlbCk7CisJCQlncGlvX3NldF92YWx1ZShsZWRfZGF0LT5zbG93LAorCQkJCSAgICAgICBuczJfbGVkX21vZHZhbFtpXS5zbG93X2xldmVsKTsKKwkJfQorCX0KKworCXdyaXRlX3VubG9jaygmbGVkX2RhdC0+cndfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIG5zMl9sZWRfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbnMyX2xlZF9kYXRhICpsZWRfZGF0ID0KKwkJY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgbnMyX2xlZF9kYXRhLCBjZGV2KTsKKwllbnVtIG5zMl9sZWRfbW9kZXMgbW9kZTsKKworCWlmICh2YWx1ZSA9PSBMRURfT0ZGKQorCQltb2RlID0gTlNfVjJfTEVEX09GRjsKKwllbHNlIGlmIChsZWRfZGF0LT5zYXRhKQorCQltb2RlID0gTlNfVjJfTEVEX1NBVEE7CisJZWxzZQorCQltb2RlID0gTlNfVjJfTEVEX09OOworCisJbnMyX2xlZF9zZXRfbW9kZShsZWRfZGF0LCBtb2RlKTsKK30KKworc3RhdGljIHNzaXplX3QgbnMyX2xlZF9zYXRhX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IGNvdW50KQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBlbmFibGU7CisJZW51bSBuczJfbGVkX21vZGVzIG1vZGU7CisJc3RydWN0IG5zMl9sZWRfZGF0YSAqbGVkX2RhdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmZiwgMTAsICZlbmFibGUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZW5hYmxlID0gISFlbmFibGU7CisKKwlpZiAobGVkX2RhdC0+c2F0YSA9PSBlbmFibGUpCisJCXJldHVybiBjb3VudDsKKworCXJldCA9IG5zMl9sZWRfZ2V0X21vZGUobGVkX2RhdCwgJm1vZGUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKGVuYWJsZSAmJiBtb2RlID09IE5TX1YyX0xFRF9PTikKKwkJbnMyX2xlZF9zZXRfbW9kZShsZWRfZGF0LCBOU19WMl9MRURfU0FUQSk7CisJaWYgKCFlbmFibGUgJiYgbW9kZSA9PSBOU19WMl9MRURfU0FUQSkKKwkJbnMyX2xlZF9zZXRfbW9kZShsZWRfZGF0LCBOU19WMl9MRURfT04pOworCisJbGVkX2RhdC0+c2F0YSA9IGVuYWJsZTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgbnMyX2xlZF9zYXRhX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBuczJfbGVkX2RhdGEgKmxlZF9kYXQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBsZWRfZGF0LT5zYXRhKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHNhdGEsIDA2NDQsIG5zMl9sZWRfc2F0YV9zaG93LCBuczJfbGVkX3NhdGFfc3RvcmUpOworCitzdGF0aWMgaW50IF9fZGV2aW5pdAorY3JlYXRlX25zMl9sZWQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3RydWN0IG5zMl9sZWRfZGF0YSAqbGVkX2RhdCwKKwkgICAgICAgY29uc3Qgc3RydWN0IG5zMl9sZWQgKnRlbXBsYXRlKQoreworCWludCByZXQ7CisJZW51bSBuczJfbGVkX21vZGVzIG1vZGU7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QodGVtcGxhdGUtPmNtZCwgdGVtcGxhdGUtPm5hbWUpOworCWlmIChyZXQgPT0gMCkgeworCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQodGVtcGxhdGUtPmNtZCwKKwkJCQkJICAgIGdwaW9fZ2V0X3ZhbHVlKHRlbXBsYXRlLT5jbWQpKTsKKwkJaWYgKHJldCkKKwkJCWdwaW9fZnJlZSh0ZW1wbGF0ZS0+Y21kKTsKKwl9CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogZmFpbGVkIHRvIHNldHVwIGNvbW1hbmQgR1BJT1xuIiwKKwkJCXRlbXBsYXRlLT5uYW1lKTsKKwl9CisKKwlyZXQgPSBncGlvX3JlcXVlc3QodGVtcGxhdGUtPnNsb3csIHRlbXBsYXRlLT5uYW1lKTsKKwlpZiAocmV0ID09IDApIHsKKwkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHRlbXBsYXRlLT5zbG93LAorCQkJCQkgICAgZ3Bpb19nZXRfdmFsdWUodGVtcGxhdGUtPnNsb3cpKTsKKwkJaWYgKHJldCkKKwkJCWdwaW9fZnJlZSh0ZW1wbGF0ZS0+c2xvdyk7CisJfQorCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IGZhaWxlZCB0byBzZXR1cCBzbG93IEdQSU9cbiIsCisJCQl0ZW1wbGF0ZS0+bmFtZSk7CisJCWdvdG8gZXJyX2ZyZWVfY21kOworCX0KKworCXJ3bG9ja19pbml0KCZsZWRfZGF0LT5yd19sb2NrKTsKKworCWxlZF9kYXQtPmNkZXYubmFtZSA9IHRlbXBsYXRlLT5uYW1lOworCWxlZF9kYXQtPmNkZXYuZGVmYXVsdF90cmlnZ2VyID0gdGVtcGxhdGUtPmRlZmF1bHRfdHJpZ2dlcjsKKwlsZWRfZGF0LT5jZGV2LmJsaW5rX3NldCA9IE5VTEw7CisJbGVkX2RhdC0+Y2Rldi5icmlnaHRuZXNzX3NldCA9IG5zMl9sZWRfc2V0OworCWxlZF9kYXQtPmNkZXYuZmxhZ3MgfD0gTEVEX0NPUkVfU1VTUEVORFJFU1VNRTsKKwlsZWRfZGF0LT5jbWQgPSB0ZW1wbGF0ZS0+Y21kOworCWxlZF9kYXQtPnNsb3cgPSB0ZW1wbGF0ZS0+c2xvdzsKKworCXJldCA9IG5zMl9sZWRfZ2V0X21vZGUobGVkX2RhdCwgJm1vZGUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9mcmVlX3Nsb3c7CisKKwkvKiBTZXQgTEVEIGluaXRpYWwgc3RhdGUuICovCisJbGVkX2RhdC0+c2F0YSA9IChtb2RlID09IE5TX1YyX0xFRF9TQVRBKSA/IDEgOiAwOworCWxlZF9kYXQtPmNkZXYuYnJpZ2h0bmVzcyA9CisJCShtb2RlID09IE5TX1YyX0xFRF9PRkYpID8gTEVEX09GRiA6IExFRF9GVUxMOworCisJcmV0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZsZWRfZGF0LT5jZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfZnJlZV9zbG93OworCisJZGV2X3NldF9kcnZkYXRhKGxlZF9kYXQtPmNkZXYuZGV2LCBsZWRfZGF0KTsKKwlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUobGVkX2RhdC0+Y2Rldi5kZXYsICZkZXZfYXR0cl9zYXRhKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfZnJlZV9jZGV2OworCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2NkZXY6CisJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmxlZF9kYXQtPmNkZXYpOworZXJyX2ZyZWVfc2xvdzoKKwlncGlvX2ZyZWUobGVkX2RhdC0+c2xvdyk7CitlcnJfZnJlZV9jbWQ6CisJZ3Bpb19mcmVlKGxlZF9kYXQtPmNtZCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZGVsZXRlX25zMl9sZWQoc3RydWN0IG5zMl9sZWRfZGF0YSAqbGVkX2RhdCkKK3sKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUobGVkX2RhdC0+Y2Rldi5kZXYsICZkZXZfYXR0cl9zYXRhKTsKKwlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbGVkX2RhdC0+Y2Rldik7CisJZ3Bpb19mcmVlKGxlZF9kYXQtPmNtZCk7CisJZ3Bpb19mcmVlKGxlZF9kYXQtPnNsb3cpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBuczJfbGVkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5zMl9sZWRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbnMyX2xlZF9kYXRhICpsZWRzX2RhdGE7CisJaW50IGk7CisJaW50IHJldDsKKworCWlmICghcGRhdGEpCisJCXJldHVybiAtRUlOVkFMOworCisJbGVkc19kYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5zMl9sZWRfZGF0YSkgKgorCQkJICAgIHBkYXRhLT5udW1fbGVkcywgR0ZQX0tFUk5FTCk7CisJaWYgKCFsZWRzX2RhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fbGVkczsgaSsrKSB7CisJCXJldCA9IGNyZWF0ZV9uczJfbGVkKHBkZXYsICZsZWRzX2RhdGFbaV0sICZwZGF0YS0+bGVkc1tpXSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlcnI7CisKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBsZWRzX2RhdGEpOworCisJcmV0dXJuIDA7CisKK2VycjoKKwlmb3IgKGkgPSBpIC0gMTsgaSA+PSAwOyBpLS0pCisJCWRlbGV0ZV9uczJfbGVkKCZsZWRzX2RhdGFbaV0pOworCisJa2ZyZWUobGVkc19kYXRhKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG5zMl9sZWRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IGk7CisJc3RydWN0IG5zMl9sZWRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbnMyX2xlZF9kYXRhICpsZWRzX2RhdGE7CisKKwlsZWRzX2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX2xlZHM7IGkrKykKKwkJZGVsZXRlX25zMl9sZWQoJmxlZHNfZGF0YVtpXSk7CisKKwlrZnJlZShsZWRzX2RhdGEpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG5zMl9sZWRfZHJpdmVyID0geworCS5wcm9iZQkJPSBuczJfbGVkX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobnMyX2xlZF9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJsZWRzLW5zMiIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpsZWRzLW5zMiIpOworCitzdGF0aWMgaW50IF9faW5pdCBuczJfbGVkX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZuczJfbGVkX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBuczJfbGVkX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbnMyX2xlZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChuczJfbGVkX2luaXQpOworbW9kdWxlX2V4aXQobnMyX2xlZF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiU2ltb24gR3Vpbm90IDxzZ3Vpbm90QGxhY2llLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTmV0d29yayBTcGFjZSB2MiBMRUQgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC9tYWNpb19zeXNmcy5jIGIvZHJpdmVycy9tYWNpbnRvc2gvbWFjaW9fc3lzZnMuYwppbmRleCA2OTk5Y2U1Li42MDI0MDM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC9tYWNpb19zeXNmcy5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL21hY2lvX3N5c2ZzLmMKQEAgLTQxLDEwICs0MSw3IEBACiBzdGF0aWMgc3NpemVfdCBtb2RhbGlhc19zaG93IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgICAgY2hhciAqYnVmKQogewotCXN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2ID0gdG9fb2ZfZGV2aWNlKGRldik7Ci0JaW50IGxlbjsKLQotCWxlbiA9IG9mX2RldmljZV9nZXRfbW9kYWxpYXMob2ZkZXYsIGJ1ZiwgUEFHRV9TSVpFIC0gMik7CisJaW50IGxlbiA9IG9mX2RldmljZV9nZXRfbW9kYWxpYXMoZGV2LCBidWYsIFBBR0VfU0laRSAtIDIpOwogCiAJYnVmW2xlbl0gPSAnXG4nOwogCWJ1ZltsZW4rMV0gPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCmluZGV4IDNkNGZjMGYuLjM1YmMyNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKQEAgLTQwMCwxMSArNDAwLDEyIEBACiAJCXByaW50ayhLRVJOX0VSUiAidmlhLXBtdTogY2FuJ3QgbWFwIGludGVycnVwdFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQkvKiBXZSBzZXQgSVJRRl9USU1FUiBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdGhlIGludGVycnVwdCB0byBiZSBkaXNhYmxlZAotCSAqIGJldHdlZW4gdGhlIDIgcGFzc2VzIG9mIGRyaXZlciBzdXNwZW5kLCB3ZSBjb250cm9sIG91ciBvd24gZGlzYWJsaW5nCi0JICogZm9yIHRoYXQgb25lCisJLyogV2Ugc2V0IElSUUZfTk9fU1VTUEVORCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdGhlIGludGVycnVwdAorCSAqIHRvIGJlIGRpc2FibGVkIGJldHdlZW4gdGhlIDIgcGFzc2VzIG9mIGRyaXZlciBzdXNwZW5kLCB3ZQorCSAqIGNvbnRyb2wgb3VyIG93biBkaXNhYmxpbmcgZm9yIHRoYXQgb25lCiAJICovCi0JaWYgKHJlcXVlc3RfaXJxKGlycSwgdmlhX3BtdV9pbnRlcnJ1cHQsIElSUUZfVElNRVIsICJWSUEtUE1VIiwgKHZvaWQgKikwKSkgeworCWlmIChyZXF1ZXN0X2lycShpcnEsIHZpYV9wbXVfaW50ZXJydXB0LCBJUlFGX05PX1NVU1BFTkQsCisJCQkiVklBLVBNVSIsICh2b2lkICopMCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ2aWEtcG11OiBjYW4ndCByZXF1ZXN0IGlycSAlZFxuIiwgaXJxKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9JUi9LY29uZmlnCmluZGV4IGQyMmE4ZWMuLjk5OWE4MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvSVIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL0lSL0tjb25maWcKQEAgLTgsNiArOCwxNyBAQAogCWRlcGVuZHMgb24gSVJfQ09SRQogCWRlZmF1bHQgSVJfQ09SRQogCitjb25maWcgTElSQworCXRyaXN0YXRlCisJZGVmYXVsdCB5CisKKwktLS1oZWxwLS0tCisJICAgRW5hYmxlIHRoaXMgb3B0aW9uIHRvIGJ1aWxkIHRoZSBMaW51eCBJbmZyYXJlZCBSZW1vdGUKKwkgICBDb250cm9sIChMSVJDKSBjb3JlIGRldmljZSBpbnRlcmZhY2UgZHJpdmVyLiBUaGUgTElSQworCSAgIGludGVyZmFjZSBwYXNzZXMgcmF3IElSIHRvIGFuZCBmcm9tIHVzZXJzcGFjZSwgd2hlcmUgdGhlCisJICAgTElSQyBkYWVtb24gaGFuZGxlcyBwcm90b2NvbCBkZWNvZGluZyBmb3IgSVIgcmVjZXB0aW9uIGFubgorCSAgIGVuY29kaW5nIGZvciBJUiB0cmFuc21pdHRpbmcgKGFrYSAiYmxhc3RpbmciKS4KKwogc291cmNlICJkcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvS2NvbmZpZyIKIAogY29uZmlnIElSX05FQ19ERUNPREVSCkBAIC0zMyw2ICs0NCw3IEBACiBjb25maWcgSVJfUkM2X0RFQ09ERVIKIAl0cmlzdGF0ZSAiRW5hYmxlIElSIHJhdyBkZWNvZGVyIGZvciB0aGUgUkM2IHByb3RvY29sIgogCWRlcGVuZHMgb24gSVJfQ09SRQorCXNlbGVjdCBCSVRSRVZFUlNFCiAJZGVmYXVsdCB5CiAKIAktLS1oZWxwLS0tCkBAIC00Miw2ICs1NCw3IEBACiBjb25maWcgSVJfSlZDX0RFQ09ERVIKIAl0cmlzdGF0ZSAiRW5hYmxlIElSIHJhdyBkZWNvZGVyIGZvciB0aGUgSlZDIHByb3RvY29sIgogCWRlcGVuZHMgb24gSVJfQ09SRQorCXNlbGVjdCBCSVRSRVZFUlNFCiAJZGVmYXVsdCB5CiAKIAktLS1oZWxwLS0tCkBAIC01Nyw2ICs3MCwxNiBAQAogCSAgIEVuYWJsZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhbiBpbmZyYXJlZCByZW1vdGUgY29udHJvbCB3aGljaAogCSAgIHVzZXMgdGhlIFNvbnkgcHJvdG9jb2wsIGFuZCB5b3UgbmVlZCBzb2Z0d2FyZSBkZWNvZGluZyBzdXBwb3J0LgogCitjb25maWcgSVJfTElSQ19DT0RFQworCXRyaXN0YXRlICJFbmFibGUgSVIgdG8gTElSQyBicmlkZ2UiCisJZGVwZW5kcyBvbiBJUl9DT1JFCisJZGVwZW5kcyBvbiBMSVJDCisJZGVmYXVsdCB5CisKKwktLS1oZWxwLS0tCisJICAgRW5hYmxlIHRoaXMgb3B0aW9uIHRvIHBhc3MgcmF3IElSIHRvIGFuZCBmcm9tIHVzZXJzcGFjZSB2aWEKKwkgICB0aGUgTElSQyBpbnRlcmZhY2UuCisKIGNvbmZpZyBJUl9JTU9OCiAJdHJpc3RhdGUgIlNvdW5kR3JhcGggaU1PTiBSZWNlaXZlciBhbmQgRGlzcGxheSIKIAlkZXBlbmRzIG9uIFVTQl9BUkNIX0hBU19IQ0QKQEAgLTY4LDMgKzkxLDE1IEBACiAKIAkgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaW1vbi4KKworY29uZmlnIElSX01DRVVTQgorCXRyaXN0YXRlICJXaW5kb3dzIE1lZGlhIENlbnRlciBFZC4gZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXIiCisJZGVwZW5kcyBvbiBVU0JfQVJDSF9IQVNfSENECisJZGVwZW5kcyBvbiBJUl9DT1JFCisJc2VsZWN0IFVTQgorCS0tLWhlbHAtLS0KKwkgICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIFdpbmRvd3MgTWVkaWEgQ2VudGVyIEVkaXRpb24KKwkgICBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlci4KKworCSAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtY2V1c2IuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9JUi9NYWtlZmlsZQppbmRleCBiOTk4ZmNjLi4yYWU0ZjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIvTWFrZWZpbGUKQEAgLTUsMTEgKzUsMTQgQEAKIAogb2JqLSQoQ09ORklHX0lSX0NPUkUpICs9IGlyLWNvcmUubwogb2JqLSQoQ09ORklHX1ZJREVPX0lSKSArPSBpci1jb21tb24ubworb2JqLSQoQ09ORklHX0xJUkMpICs9IGxpcmNfZGV2Lm8KIG9iai0kKENPTkZJR19JUl9ORUNfREVDT0RFUikgKz0gaXItbmVjLWRlY29kZXIubwogb2JqLSQoQ09ORklHX0lSX1JDNV9ERUNPREVSKSArPSBpci1yYzUtZGVjb2Rlci5vCiBvYmotJChDT05GSUdfSVJfUkM2X0RFQ09ERVIpICs9IGlyLXJjNi1kZWNvZGVyLm8KIG9iai0kKENPTkZJR19JUl9KVkNfREVDT0RFUikgKz0gaXItanZjLWRlY29kZXIubwogb2JqLSQoQ09ORklHX0lSX1NPTllfREVDT0RFUikgKz0gaXItc29ueS1kZWNvZGVyLm8KK29iai0kKENPTkZJR19JUl9MSVJDX0NPREVDKSArPSBpci1saXJjLWNvZGVjLm8KIAogIyBzdGFuZC1hbG9uZSBJUiByZWNlaXZlcnMvdHJhbnNtaXR0ZXJzCiBvYmotJChDT05GSUdfSVJfSU1PTikgKz0gaW1vbi5vCitvYmotJChDT05GSUdfSVJfTUNFVVNCKSArPSBtY2V1c2IubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9pbW9uLmMgYi9kcml2ZXJzL21lZGlhL0lSL2ltb24uYwppbmRleCA0YmJkNDVmLi42NWMxMjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2ltb24uYworKysgYi9kcml2ZXJzL21lZGlhL0lSL2ltb24uYwpAQCAtNDA3LDcgKzQwNyw3IEBACiAJc3RydWN0IGltb25fY29udGV4dCAqaWN0eCA9IE5VTEw7CiAJaW50IHJldHZhbCA9IDA7CiAKLQlpY3R4ID0gKHN0cnVjdCBpbW9uX2NvbnRleHQgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJaWN0eCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAogCWlmICghaWN0eCkgewogCQllcnIoIiVzOiBubyBjb250ZXh0IGZvciBkZXZpY2UiLCBfX2Z1bmNfXyk7CkBAIC04MTIsNyArODEyLDcgQEAKIAljb25zdCB1bnNpZ25lZCBjaGFyIHZmZF9wYWNrZXQ2W10gPSB7CiAJCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkYsIDB4RkYgfTsKIAotCWljdHggPSAoc3RydWN0IGltb25fY29udGV4dCAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlpY3R4ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWlmICghaWN0eCkgewogCQllcnIoIiVzOiBubyBjb250ZXh0IGZvciBkZXZpY2UiLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtODk2LDcgKzg5Niw3IEBACiAJaW50IHJldHZhbCA9IDA7CiAJc3RydWN0IGltb25fY29udGV4dCAqaWN0eDsKIAotCWljdHggPSAoc3RydWN0IGltb25fY29udGV4dCAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlpY3R4ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWlmICghaWN0eCkgewogCQllcnIoIiVzOiBubyBjb250ZXh0IGZvciBkZXZpY2UiLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTk0Myw3ICsxOTQzLDcgQEAKIAlyZXR1cm4gaWN0eDsKIAogdXJiX3N1Ym1pdF9mYWlsZWQ6Ci0JaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaWN0eC0+aWRldik7CisJaXJfaW5wdXRfdW5yZWdpc3RlcihpY3R4LT5pZGV2KTsKIAlpbnB1dF9mcmVlX2RldmljZShpY3R4LT5pZGV2KTsKIGlkZXZfc2V0dXBfZmFpbGVkOgogZmluZF9lbmRwb2ludF9mYWlsZWQ6CkBAIC0yMDY3LDYgKzIwNjcsNyBAQAogCQlkZXRlY3RlZF9kaXNwbGF5X3R5cGUgPSBJTU9OX0RJU1BMQVlfVFlQRV9WRkQ7CiAJCWJyZWFrOwogCS8qIGlNT04gTENELCBNQ0UgSVIgKi8KKwljYXNlIDB4OWU6CiAJY2FzZSAweDlmOgogCQlkZXZfaW5mbyhpY3R4LT5kZXYsICIweGZmZGMgaU1PTiBMQ0QsIE1DRSBJUiIpOwogCQlkZXRlY3RlZF9kaXNwbGF5X3R5cGUgPSBJTU9OX0RJU1BMQVlfVFlQRV9MQ0Q7CkBAIC0yMzA2LDcgKzIzMDcsNyBAQAogCWlmIChpZm51bSA9PSAwKSB7CiAJCWljdHgtPmRldl9wcmVzZW50X2ludGYwID0gZmFsc2U7CiAJCXVzYl9raWxsX3VyYihpY3R4LT5yeF91cmJfaW50ZjApOwotCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShpY3R4LT5pZGV2KTsKKwkJaXJfaW5wdXRfdW5yZWdpc3RlcihpY3R4LT5pZGV2KTsKIAkJaWYgKGljdHgtPmRpc3BsYXlfc3VwcG9ydGVkKSB7CiAJCQlpZiAoaWN0eC0+ZGlzcGxheV90eXBlID09IElNT05fRElTUExBWV9UWVBFX0xDRCkKIAkJCQl1c2JfZGVyZWdpc3Rlcl9kZXYoaW50ZXJmYWNlLCAmaW1vbl9sY2RfY2xhc3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9pci1jb3JlLXByaXYuaCBiL2RyaXZlcnMvbWVkaWEvSVIvaXItY29yZS1wcml2LmgKaW5kZXggOWE1ZTY1YS4uYmFiZDUyMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvSVIvaXItY29yZS1wcml2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9JUi9pci1jb3JlLXByaXYuaApAQCAtMjIsMTcgKzIyLDYyIEBACiBzdHJ1Y3QgaXJfcmF3X2hhbmRsZXIgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAorCXU2NCBwcm90b2NvbHM7IC8qIHdoaWNoIGFyZSBoYW5kbGVkIGJ5IHRoaXMgaGFuZGxlciAqLwogCWludCAoKmRlY29kZSkoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBzdHJ1Y3QgaXJfcmF3X2V2ZW50IGV2ZW50KTsKKworCS8qIFRoZXNlIHR3byBzaG91bGQgb25seSBiZSB1c2VkIGJ5IHRoZSBsaXJjIGRlY29kZXIgKi8KIAlpbnQgKCpyYXdfcmVnaXN0ZXIpKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldik7CiAJaW50ICgqcmF3X3VucmVnaXN0ZXIpKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldik7CiB9OwogCiBzdHJ1Y3QgaXJfcmF3X2V2ZW50X2N0cmwgeworCXN0cnVjdCBsaXN0X2hlYWQJCWxpc3Q7CQkvKiB0byBrZWVwIHRyYWNrIG9mIHJhdyBjbGllbnRzICovCiAJc3RydWN0IHdvcmtfc3RydWN0CQlyeF93b3JrOwkvKiBmb3IgdGhlIHJ4IGRlY29kaW5nIHdvcmtxdWV1ZSAqLwogCXN0cnVjdCBrZmlmbwkJCWtmaWZvOwkJLyogZmlmbyBmb3IgdGhlIHB1bHNlL3NwYWNlIGR1cmF0aW9ucyAqLwogCWt0aW1lX3QJCQkJbGFzdF9ldmVudDsJLyogd2hlbiBsYXN0IGV2ZW50IG9jY3VycmVkICovCiAJZW51bSByYXdfZXZlbnRfdHlwZQkJbGFzdF90eXBlOwkvKiBsYXN0IGV2ZW50IHR5cGUgKi8KIAlzdHJ1Y3QgaW5wdXRfZGV2CQkqaW5wdXRfZGV2OwkvKiBwb2ludGVyIHRvIHRoZSBwYXJlbnQgaW5wdXRfZGV2ICovCisJdTY0CQkJCWVuYWJsZWRfcHJvdG9jb2xzOyAvKiBlbmFibGVkIHJhdyBwcm90b2NvbCBkZWNvZGVycyAqLworCisJLyogcmF3IGRlY29kZXIgc3RhdGUgZm9sbG93cyAqLworCXN0cnVjdCBpcl9yYXdfZXZlbnQgcHJldl9ldjsKKwlzdHJ1Y3QgbmVjX2RlYyB7CisJCWludCBzdGF0ZTsKKwkJdW5zaWduZWQgY291bnQ7CisJCXUzMiBiaXRzOworCX0gbmVjOworCXN0cnVjdCByYzVfZGVjIHsKKwkJaW50IHN0YXRlOworCQl1MzIgYml0czsKKwkJdW5zaWduZWQgY291bnQ7CisJCXVuc2lnbmVkIHdhbnRlZF9iaXRzOworCX0gcmM1OworCXN0cnVjdCByYzZfZGVjIHsKKwkJaW50IHN0YXRlOworCQl1OCBoZWFkZXI7CisJCXUzMiBib2R5OworCQlib29sIHRvZ2dsZTsKKwkJdW5zaWduZWQgY291bnQ7CisJCXVuc2lnbmVkIHdhbnRlZF9iaXRzOworCX0gcmM2OworCXN0cnVjdCBzb255X2RlYyB7CisJCWludCBzdGF0ZTsKKwkJdTMyIGJpdHM7CisJCXVuc2lnbmVkIGNvdW50OworCX0gc29ueTsKKwlzdHJ1Y3QganZjX2RlYyB7CisJCWludCBzdGF0ZTsKKwkJdTE2IGJpdHM7CisJCXUxNiBvbGRfYml0czsKKwkJdW5zaWduZWQgY291bnQ7CisJCWJvb2wgZmlyc3Q7CisJCWJvb2wgdG9nZ2xlOworCX0ganZjOworCXN0cnVjdCBsaXJjX2NvZGVjIHsKKwkJc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2OworCQlzdHJ1Y3QgbGlyY19kcml2ZXIgKmRydjsKKwkJaW50IGxpcmNkYXRhOworCX0gbGlyYzsKIH07CiAKIC8qIG1hY3JvcyBmb3IgSVIgZGVjb2RlcnMgKi8KQEAgLTc0LDYgKzExOSw3IEBACiAvKgogICogUm91dGluZXMgZnJvbSBpci1yYXctZXZlbnQuYyB0byBiZSB1c2VkIGludGVybmFsbHkgYW5kIGJ5IGRlY29kZXJzCiAgKi8KK3U2NCBpcl9yYXdfZ2V0X2FsbG93ZWRfcHJvdG9jb2xzKHZvaWQpOwogaW50IGlyX3Jhd19ldmVudF9yZWdpc3RlcihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYpOwogdm9pZCBpcl9yYXdfZXZlbnRfdW5yZWdpc3RlcihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYpOwogaW50IGlyX3Jhd19oYW5kbGVyX3JlZ2lzdGVyKHN0cnVjdCBpcl9yYXdfaGFuZGxlciAqaXJfcmF3X2hhbmRsZXIpOwpAQCAtMTIzLDQgKzE2OSwxMiBAQAogI2RlZmluZSBsb2FkX3NvbnlfZGVjb2RlKCkJMAogI2VuZGlmCiAKKy8qIGZyb20gaXItbGlyYy1jb2RlYy5jICovCisjaWZkZWYgQ09ORklHX0lSX0xJUkNfQ09ERUNfTU9EVUxFCisjZGVmaW5lIGxvYWRfbGlyY19jb2RlYygpCXJlcXVlc3RfbW9kdWxlKCJpci1saXJjLWNvZGVjIikKKyNlbHNlCisjZGVmaW5lIGxvYWRfbGlyY19jb2RlYygpCTAKKyNlbmRpZgorCisKICNlbmRpZiAvKiBfSVJfUkFXX0VWRU5UICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2lyLWp2Yy1kZWNvZGVyLmMgYi9kcml2ZXJzL21lZGlhL0lSL2lyLWp2Yy1kZWNvZGVyLmMKaW5kZXggMGI4MDQ5NC4uODg5NGQ4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9pci1qdmMtZGVjb2Rlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIvaXItanZjLWRlY29kZXIuYwpAQCAtMjUsMTAgKzI1LDYgQEAKICNkZWZpbmUgSlZDX1RSQUlMRVJfUFVMU0UJKDEgICogSlZDX1VOSVQpCiAjZGVmaW5lCUpWQ19UUkFJTEVSX1NQQUNFCSgzNSAqIEpWQ19VTklUKQogCi0vKiBVc2VkIHRvIHJlZ2lzdGVyIGp2Y19kZWNvZGVyIGNsaWVudHMgKi8KLXN0YXRpYyBMSVNUX0hFQUQoZGVjb2Rlcl9saXN0KTsKLURFRklORV9TUElOTE9DSyhkZWNvZGVyX2xvY2spOwotCiBlbnVtIGp2Y19zdGF0ZSB7CiAJU1RBVEVfSU5BQ1RJVkUsCiAJU1RBVEVfSEVBREVSX1NQQUNFLApAQCAtMzgsODcgKzM0LDYgQEAKIAlTVEFURV9UUkFJTEVSX1NQQUNFLAogfTsKIAotc3RydWN0IGRlY29kZXJfZGF0YSB7Ci0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0OwotCXN0cnVjdCBpcl9pbnB1dF9kZXYJKmlyX2RldjsKLQlpbnQJCQllbmFibGVkOjE7Ci0KLQkvKiBTdGF0ZSBtYWNoaW5lIGNvbnRyb2wgKi8KLQllbnVtIGp2Y19zdGF0ZQkJc3RhdGU7Ci0JdTE2CQkJanZjX2JpdHM7Ci0JdTE2CQkJanZjX29sZF9iaXRzOwotCXVuc2lnbmVkCQljb3VudDsKLQlib29sCQkJZmlyc3Q7Ci0JYm9vbAkJCXRvZ2dsZTsKLX07Ci0KLQotLyoqCi0gKiBnZXRfZGVjb2Rlcl9kYXRhKCkJLSBnZXRzIGRlY29kZXIgZGF0YQotICogQGlucHV0X2RldjoJaW5wdXQgZGV2aWNlCi0gKgotICogUmV0dXJucyB0aGUgc3RydWN0IGRlY29kZXJfZGF0YSB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgZGV2aWNlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZGVjb2Rlcl9kYXRhICpnZXRfZGVjb2Rlcl9kYXRhKHN0cnVjdCAgaXJfaW5wdXRfZGV2ICppcl9kZXYpCi17Ci0Jc3RydWN0IGRlY29kZXJfZGF0YSAqZGF0YSA9IE5VTEw7Ci0KLQlzcGluX2xvY2soJmRlY29kZXJfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShkYXRhLCAmZGVjb2Rlcl9saXN0LCBsaXN0KSB7Ci0JCWlmIChkYXRhLT5pcl9kZXYgPT0gaXJfZGV2KQotCQkJYnJlYWs7Ci0JfQotCXNwaW5fdW5sb2NrKCZkZWNvZGVyX2xvY2spOwotCXJldHVybiBkYXRhOwotfQotCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9lbmFibGVkKHN0cnVjdCBkZXZpY2UgKmQsCi0JCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICptYXR0ciwKLQkJCSAgICAgY29uc3QgY2hhciAqYnVmLAotCQkJICAgICBzaXplX3QgbGVuKQotewotCXVuc2lnbmVkIGxvbmcgdmFsdWU7Ci0Jc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwotCXN0cnVjdCBkZWNvZGVyX2RhdGEgKmRhdGEgPSBnZXRfZGVjb2Rlcl9kYXRhKGlyX2Rldik7Ci0KLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWx1ZSkgfHwgdmFsdWUgPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRhdGEtPmVuYWJsZWQgPSB2YWx1ZTsKLQotCXJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfZW5hYmxlZChzdHJ1Y3QgZGV2aWNlICpkLAotCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbWF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7Ci0Jc3RydWN0IGRlY29kZXJfZGF0YSAqZGF0YSA9IGdldF9kZWNvZGVyX2RhdGEoaXJfZGV2KTsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoZGF0YS0+ZW5hYmxlZCkKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiMVxuIik7Ci0JZWxzZQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjBcbiIpOwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIoZW5hYmxlZCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfZW5hYmxlZCwgc3RvcmVfZW5hYmxlZCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZWNvZGVyX2F0dHJpYnV0ZXNbXSA9IHsKLQkmZGV2X2F0dHJfZW5hYmxlZC5hdHRyLAotCU5VTEwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGRlY29kZXJfYXR0cmlidXRlX2dyb3VwID0gewotCS5uYW1lCT0gImp2Y19kZWNvZGVyIiwKLQkuYXR0cnMJPSBkZWNvZGVyX2F0dHJpYnV0ZXMsCi19OwotCiAvKioKICAqIGlyX2p2Y19kZWNvZGUoKSAtIERlY29kZSBvbmUgSlZDIHB1bHNlIG9yIHNwYWNlCiAgKiBAaW5wdXRfZGV2Ogl0aGUgc3RydWN0IGlucHV0X2RldiBkZXNjcmlwdG9yIG9mIHRoZSBkZXZpY2UKQEAgLTEyOCwxNCArNDMsMTAgQEAKICAqLwogc3RhdGljIGludCBpcl9qdmNfZGVjb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IGlyX3Jhd19ldmVudCBldikKIHsKLQlzdHJ1Y3QgZGVjb2Rlcl9kYXRhICpkYXRhOwogCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0X2Rldik7CisJc3RydWN0IGp2Y19kZWMgKmRhdGEgPSAmaXJfZGV2LT5yYXctPmp2YzsKIAotCWRhdGEgPSBnZXRfZGVjb2Rlcl9kYXRhKGlyX2Rldik7Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghZGF0YS0+ZW5hYmxlZCkKKwlpZiAoIShpcl9kZXYtPnJhdy0+ZW5hYmxlZF9wcm90b2NvbHMgJiBJUl9UWVBFX0pWQykpCiAJCXJldHVybiAwOwogCiAJaWYgKElTX1JFU0VUKGV2KSkgewpAQCAtMTg4LDkgKzk5LDkgQEAKIAkJaWYgKGV2LnB1bHNlKQogCQkJYnJlYWs7CiAKLQkJZGF0YS0+anZjX2JpdHMgPDw9IDE7CisJCWRhdGEtPmJpdHMgPDw9IDE7CiAJCWlmIChlcV9tYXJnaW4oZXYuZHVyYXRpb24sIEpWQ19CSVRfMV9TUEFDRSwgSlZDX1VOSVQgLyAyKSkgewotCQkJZGF0YS0+anZjX2JpdHMgfD0gMTsKKwkJCWRhdGEtPmJpdHMgfD0gMTsKIAkJCWRlY3JlYXNlX2R1cmF0aW9uKCZldiwgSlZDX0JJVF8xX1NQQUNFKTsKIAkJfSBlbHNlIGlmIChlcV9tYXJnaW4oZXYuZHVyYXRpb24sIEpWQ19CSVRfMF9TUEFDRSwgSlZDX1VOSVQgLyAyKSkKIAkJCWRlY3JlYXNlX2R1cmF0aW9uKCZldiwgSlZDX0JJVF8wX1NQQUNFKTsKQEAgLTIyMywxMyArMTM0LDEzIEBACiAKIAkJaWYgKGRhdGEtPmZpcnN0KSB7CiAJCQl1MzIgc2NhbmNvZGU7Ci0JCQlzY2FuY29kZSA9IChiaXRyZXY4KChkYXRhLT5qdmNfYml0cyA+PiA4KSAmIDB4ZmYpIDw8IDgpIHwKLQkJCQkgICAoYml0cmV2OCgoZGF0YS0+anZjX2JpdHMgPj4gMCkgJiAweGZmKSA8PCAwKTsKKwkJCXNjYW5jb2RlID0gKGJpdHJldjgoKGRhdGEtPmJpdHMgPj4gOCkgJiAweGZmKSA8PCA4KSB8CisJCQkJICAgKGJpdHJldjgoKGRhdGEtPmJpdHMgPj4gMCkgJiAweGZmKSA8PCAwKTsKIAkJCUlSX2RwcmludGsoMSwgIkpWQyBzY2FuY29kZSAweCUwNHhcbiIsIHNjYW5jb2RlKTsKIAkJCWlyX2tleWRvd24oaW5wdXRfZGV2LCBzY2FuY29kZSwgZGF0YS0+dG9nZ2xlKTsKIAkJCWRhdGEtPmZpcnN0ID0gZmFsc2U7Ci0JCQlkYXRhLT5qdmNfb2xkX2JpdHMgPSBkYXRhLT5qdmNfYml0czsKLQkJfSBlbHNlIGlmIChkYXRhLT5qdmNfYml0cyA9PSBkYXRhLT5qdmNfb2xkX2JpdHMpIHsKKwkJCWRhdGEtPm9sZF9iaXRzID0gZGF0YS0+Yml0czsKKwkJfSBlbHNlIGlmIChkYXRhLT5iaXRzID09IGRhdGEtPm9sZF9iaXRzKSB7CiAJCQlJUl9kcHJpbnRrKDEsICJKVkMgcmVwZWF0XG4iKTsKIAkJCWlyX3JlcGVhdChpbnB1dF9kZXYpOwogCQl9IGVsc2UgewpAQCAtMjQ5LDU0ICsxNjAsOSBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IGlyX2p2Y19yZWdpc3RlcihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYpCi17Ci0Jc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXRfZGV2KTsKLQlzdHJ1Y3QgZGVjb2Rlcl9kYXRhICpkYXRhOwotCWludCByYzsKLQotCXJjID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZpcl9kZXYtPmRldi5rb2JqLCAmZGVjb2Rlcl9hdHRyaWJ1dGVfZ3JvdXApOwotCWlmIChyYyA8IDApCi0JCXJldHVybiByYzsKLQotCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkgewotCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmlyX2Rldi0+ZGV2LmtvYmosICZkZWNvZGVyX2F0dHJpYnV0ZV9ncm91cCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWRhdGEtPmlyX2RldiA9IGlyX2RldjsKLQlkYXRhLT5lbmFibGVkID0gMTsKLQotCXNwaW5fbG9jaygmZGVjb2Rlcl9sb2NrKTsKLQlsaXN0X2FkZF90YWlsKCZkYXRhLT5saXN0LCAmZGVjb2Rlcl9saXN0KTsKLQlzcGluX3VubG9jaygmZGVjb2Rlcl9sb2NrKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlyX2p2Y191bnJlZ2lzdGVyKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldikKLXsKLQlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dF9kZXYpOwotCXN0YXRpYyBzdHJ1Y3QgZGVjb2Rlcl9kYXRhICpkYXRhOwotCi0JZGF0YSA9IGdldF9kZWNvZGVyX2RhdGEoaXJfZGV2KTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiAwOwotCi0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZpcl9kZXYtPmRldi5rb2JqLCAmZGVjb2Rlcl9hdHRyaWJ1dGVfZ3JvdXApOwotCi0Jc3Bpbl9sb2NrKCZkZWNvZGVyX2xvY2spOwotCWxpc3RfZGVsKCZkYXRhLT5saXN0KTsKLQlzcGluX3VubG9jaygmZGVjb2Rlcl9sb2NrKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IGlyX3Jhd19oYW5kbGVyIGp2Y19oYW5kbGVyID0geworCS5wcm90b2NvbHMJPSBJUl9UWVBFX0pWQywKIAkuZGVjb2RlCQk9IGlyX2p2Y19kZWNvZGUsCi0JLnJhd19yZWdpc3Rlcgk9IGlyX2p2Y19yZWdpc3RlciwKLQkucmF3X3VucmVnaXN0ZXIJPSBpcl9qdmNfdW5yZWdpc3RlciwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGlyX2p2Y19kZWNvZGVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9pci1rZXl0YWJsZS5jIGIvZHJpdmVycy9tZWRpYS9JUi9pci1rZXl0YWJsZS5jCmluZGV4IDk0YTg1NzcuLjE1YTBmMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvSVIvaXIta2V5dGFibGUuYworKysgYi9kcml2ZXJzL21lZGlhL0lSL2lyLWtleXRhYmxlLmMKQEAgLTQ5Nyw4ICs0OTcsOSBAQAogCQkJCWdvdG8gb3V0X2V2ZW50OwogCQl9CiAKLQlJUl9kcHJpbnRrKDEsICJSZWdpc3RlcmVkIGlucHV0IGRldmljZSBvbiAlcyBmb3IgJXMgcmVtb3RlLlxuIiwKLQkJICAgZHJpdmVyX25hbWUsIHJjX3RhYi0+bmFtZSk7CisJSVJfZHByaW50aygxLCAiUmVnaXN0ZXJlZCBpbnB1dCBkZXZpY2Ugb24gJXMgZm9yICVzIHJlbW90ZSVzLlxuIiwKKwkJICAgZHJpdmVyX25hbWUsIHJjX3RhYi0+bmFtZSwKKwkJICAgaXJfZGV2LT5wcm9wcy0+ZHJpdmVyX3R5cGUgPT0gUkNfRFJJVkVSX0lSX1JBVyA/ICIgaW4gcmF3IG1vZGUiIDogIiIpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIvaXItbGlyYy1jb2RlYy5jIGIvZHJpdmVycy9tZWRpYS9JUi9pci1saXJjLWNvZGVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JhNDgyZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIvaXItbGlyYy1jb2RlYy5jCkBAIC0wLDAgKzEsMjc4IEBACisvKiBpci1saXJjLWNvZGVjLmMgLSBpci1jb3JlIHRvIGNsYXNzaWMgbGlyYyBpbnRlcmZhY2UgYnJpZGdlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIGJ5IEphcm9kIFdpbHNvbiA8amFyb2RAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPG1lZGlhL2xpcmMuaD4KKyNpbmNsdWRlIDxtZWRpYS9saXJjX2Rldi5oPgorI2luY2x1ZGUgPG1lZGlhL2lyLWNvcmUuaD4KKyNpbmNsdWRlICJpci1jb3JlLXByaXYuaCIKKworI2RlZmluZSBMSVJDQlVGX1NJWkUgMjU2CisKKy8qKgorICogaXJfbGlyY19kZWNvZGUoKSAtIFNlbmQgcmF3IElSIGRhdGEgdG8gbGlyY19kZXYgdG8gYmUgcmVsYXllZCB0byB0aGUKKyAqCQkgICAgICBsaXJjZCB1c2Vyc3BhY2UgZGFlbW9uIGZvciBkZWNvZGluZy4KKyAqIEBpbnB1dF9kZXY6CXRoZSBzdHJ1Y3QgaW5wdXRfZGV2IGRlc2NyaXB0b3Igb2YgdGhlIGRldmljZQorICogQGR1cmF0aW9uOgl0aGUgc3RydWN0IGlyX3Jhd19ldmVudCBkZXNjcmlwdG9yIG9mIHRoZSBwdWxzZS9zcGFjZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAtRUlOVkFMIGlmIHRoZSBsaXJjIGludGVyZmFjZXMgYXJlbid0IHdpcmVkIHVwLgorICovCitzdGF0aWMgaW50IGlyX2xpcmNfZGVjb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IGlyX3Jhd19ldmVudCBldikKK3sKKwlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dF9kZXYpOworCisJaWYgKCEoaXJfZGV2LT5yYXctPmVuYWJsZWRfcHJvdG9jb2xzICYgSVJfVFlQRV9MSVJDKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWlyX2Rldi0+cmF3LT5saXJjLmRydiB8fCAhaXJfZGV2LT5yYXctPmxpcmMuZHJ2LT5yYnVmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCUlSX2RwcmludGsoMiwgIkxJUkMgZGF0YSB0cmFuc2ZlciBzdGFydGVkICgldXVzICVzKVxuIiwKKwkJICAgVE9fVVMoZXYuZHVyYXRpb24pLCBUT19TVFIoZXYucHVsc2UpKTsKKworCWlyX2Rldi0+cmF3LT5saXJjLmxpcmNkYXRhICs9IGV2LmR1cmF0aW9uIC8gMTAwMDsKKwlpZiAoZXYucHVsc2UpCisJCWlyX2Rldi0+cmF3LT5saXJjLmxpcmNkYXRhIHw9IFBVTFNFX0JJVDsKKworCWxpcmNfYnVmZmVyX3dyaXRlKGlyX2Rldi0+cmF3LT5saXJjLmRydi0+cmJ1ZiwKKwkJCSAgKHVuc2lnbmVkIGNoYXIgKikgJmlyX2Rldi0+cmF3LT5saXJjLmxpcmNkYXRhKTsKKwl3YWtlX3VwKCZpcl9kZXYtPnJhdy0+bGlyYy5kcnYtPnJidWYtPndhaXRfcG9sbCk7CisKKwlpcl9kZXYtPnJhdy0+bGlyYy5saXJjZGF0YSA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgaXJfbGlyY190cmFuc21pdF9pcihzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmLAorCQkJCSAgIHNpemVfdCBuLCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGxpcmNfY29kZWMgKmxpcmM7CisJc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2OworCWludCAqdHhidWY7IC8qIGJ1ZmZlciB3aXRoIHZhbHVlcyB0byB0cmFuc21pdCAqLworCWludCByZXQgPSAwLCBjb3VudDsKKworCWxpcmMgPSBsaXJjX2dldF9wZGF0YShmaWxlKTsKKwlpZiAoIWxpcmMpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKG4gJSBzaXplb2YoaW50KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljb3VudCA9IG4gLyBzaXplb2YoaW50KTsKKwlpZiAoY291bnQgPiBMSVJDQlVGX1NJWkUgfHwgY291bnQgJSAyID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJdHhidWYgPSBtZW1kdXBfdXNlcihidWYsIG4pOworCWlmIChJU19FUlIodHhidWYpKQorCQlyZXR1cm4gUFRSX0VSUih0eGJ1Zik7CisKKwlpcl9kZXYgPSBsaXJjLT5pcl9kZXY7CisJaWYgKCFpcl9kZXYpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGlyX2Rldi0+cHJvcHMgJiYgaXJfZGV2LT5wcm9wcy0+dHhfaXIpCisJCXJldCA9IGlyX2Rldi0+cHJvcHMtPnR4X2lyKGlyX2Rldi0+cHJvcHMtPnByaXYsIHR4YnVmLCAodTMyKW4pOworCitvdXQ6CisJa2ZyZWUodHhidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBsb25nIGlyX2xpcmNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgbGlyY19jb2RlYyAqbGlyYzsKKwlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXY7CisJaW50IHJldCA9IDA7CisJdm9pZCAqZHJ2X2RhdGE7CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwlsaXJjID0gbGlyY19nZXRfcGRhdGEoZmlsZXApOworCWlmICghbGlyYykKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpcl9kZXYgPSBsaXJjLT5pcl9kZXY7CisJaWYgKCFpcl9kZXYgfHwgIWlyX2Rldi0+cHJvcHMgfHwgIWlyX2Rldi0+cHJvcHMtPnByaXYpCisJCXJldHVybiAtRUZBVUxUOworCisJZHJ2X2RhdGEgPSBpcl9kZXYtPnByb3BzLT5wcml2OworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIExJUkNfU0VUX1RSQU5TTUlUVEVSX01BU0s6CisJCXJldCA9IGdldF91c2VyKHZhbCwgKHVuc2lnbmVkIGxvbmcgKilhcmcpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlpZiAoaXJfZGV2LT5wcm9wcyAmJiBpcl9kZXYtPnByb3BzLT5zX3R4X21hc2spCisJCQlyZXQgPSBpcl9kZXYtPnByb3BzLT5zX3R4X21hc2soZHJ2X2RhdGEsICh1MzIpdmFsKTsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCisJY2FzZSBMSVJDX1NFVF9TRU5EX0NBUlJJRVI6CisJCXJldCA9IGdldF91c2VyKHZhbCwgKHVuc2lnbmVkIGxvbmcgKilhcmcpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlpZiAoaXJfZGV2LT5wcm9wcyAmJiBpcl9kZXYtPnByb3BzLT5zX3R4X2NhcnJpZXIpCisJCQlpcl9kZXYtPnByb3BzLT5zX3R4X2NhcnJpZXIoZHJ2X2RhdGEsICh1MzIpdmFsKTsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCisJY2FzZSBMSVJDX0dFVF9TRU5EX01PREU6CisJCXZhbCA9IExJUkNfQ0FOX1NFTkRfUFVMU0UgJiBMSVJDX0NBTl9TRU5EX01BU0s7CisJCXJldCA9IHB1dF91c2VyKHZhbCwgKHVuc2lnbmVkIGxvbmcgKilhcmcpOworCQlicmVhazsKKworCWNhc2UgTElSQ19TRVRfU0VORF9NT0RFOgorCQlyZXQgPSBnZXRfdXNlcih2YWwsICh1bnNpZ25lZCBsb25nICopYXJnKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJaWYgKHZhbCAhPSAoTElSQ19NT0RFX1BVTFNFICYgTElSQ19DQU5fU0VORF9NQVNLKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiBsaXJjX2Rldl9mb3BfaW9jdGwoZmlsZXAsIGNtZCwgYXJnKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlyX2xpcmNfb3Blbih2b2lkICpkYXRhKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpcl9saXJjX2Nsb3NlKHZvaWQgKmRhdGEpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsaXJjX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS53cml0ZQkJPSBpcl9saXJjX3RyYW5zbWl0X2lyLAorCS51bmxvY2tlZF9pb2N0bAk9IGlyX2xpcmNfaW9jdGwsCisJLnJlYWQJCT0gbGlyY19kZXZfZm9wX3JlYWQsCisJLnBvbGwJCT0gbGlyY19kZXZfZm9wX3BvbGwsCisJLm9wZW4JCT0gbGlyY19kZXZfZm9wX29wZW4sCisJLnJlbGVhc2UJPSBsaXJjX2Rldl9mb3BfY2xvc2UsCit9OworCitzdGF0aWMgaW50IGlyX2xpcmNfcmVnaXN0ZXIoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KQoreworCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0X2Rldik7CisJc3RydWN0IGxpcmNfZHJpdmVyICpkcnY7CisJc3RydWN0IGxpcmNfYnVmZmVyICpyYnVmOworCWludCByYyA9IC1FTk9NRU07CisJdW5zaWduZWQgbG9uZyBmZWF0dXJlczsKKworCWRydiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsaXJjX2RyaXZlciksIEdGUF9LRVJORUwpOworCWlmICghZHJ2KQorCQlyZXR1cm4gcmM7CisKKwlyYnVmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxpcmNfYnVmZmVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyYnVmKQorCQlnb3RvIHJidWZfYWxsb2NfZmFpbGVkOworCisJcmMgPSBsaXJjX2J1ZmZlcl9pbml0KHJidWYsIHNpemVvZihpbnQpLCBMSVJDQlVGX1NJWkUpOworCWlmIChyYykKKwkJZ290byByYnVmX2luaXRfZmFpbGVkOworCisJZmVhdHVyZXMgPSBMSVJDX0NBTl9SRUNfTU9ERTI7CisJaWYgKGlyX2Rldi0+cHJvcHMtPnR4X2lyKSB7CisJCWZlYXR1cmVzIHw9IExJUkNfQ0FOX1NFTkRfUFVMU0U7CisJCWlmIChpcl9kZXYtPnByb3BzLT5zX3R4X21hc2spCisJCQlmZWF0dXJlcyB8PSBMSVJDX0NBTl9TRVRfVFJBTlNNSVRURVJfTUFTSzsKKwkJaWYgKGlyX2Rldi0+cHJvcHMtPnNfdHhfY2FycmllcikKKwkJCWZlYXR1cmVzIHw9IExJUkNfQ0FOX1NFVF9TRU5EX0NBUlJJRVI7CisJfQorCisJc25wcmludGYoZHJ2LT5uYW1lLCBzaXplb2YoZHJ2LT5uYW1lKSwgImlyLWxpcmMtY29kZWMgKCVzKSIsCisJCSBpcl9kZXYtPmRyaXZlcl9uYW1lKTsKKwlkcnYtPm1pbm9yID0gLTE7CisJZHJ2LT5mZWF0dXJlcyA9IGZlYXR1cmVzOworCWRydi0+ZGF0YSA9ICZpcl9kZXYtPnJhdy0+bGlyYzsKKwlkcnYtPnJidWYgPSByYnVmOworCWRydi0+c2V0X3VzZV9pbmMgPSAmaXJfbGlyY19vcGVuOworCWRydi0+c2V0X3VzZV9kZWMgPSAmaXJfbGlyY19jbG9zZTsKKwlkcnYtPmNvZGVfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBpcl9yYXdfZXZlbnQpICogODsKKwlkcnYtPmZvcHMgPSAmbGlyY19mb3BzOworCWRydi0+ZGV2ID0gJmlyX2Rldi0+ZGV2OworCWRydi0+b3duZXIgPSBUSElTX01PRFVMRTsKKworCWRydi0+bWlub3IgPSBsaXJjX3JlZ2lzdGVyX2RyaXZlcihkcnYpOworCWlmIChkcnYtPm1pbm9yIDwgMCkgeworCQlyYyA9IC1FTk9ERVY7CisJCWdvdG8gbGlyY19yZWdpc3Rlcl9mYWlsZWQ7CisJfQorCisJaXJfZGV2LT5yYXctPmxpcmMuZHJ2ID0gZHJ2OworCWlyX2Rldi0+cmF3LT5saXJjLmlyX2RldiA9IGlyX2RldjsKKwlpcl9kZXYtPnJhdy0+bGlyYy5saXJjZGF0YSA9IFBVTFNFX01BU0s7CisKKwlyZXR1cm4gMDsKKworbGlyY19yZWdpc3Rlcl9mYWlsZWQ6CityYnVmX2luaXRfZmFpbGVkOgorCWtmcmVlKHJidWYpOworcmJ1Zl9hbGxvY19mYWlsZWQ6CisJa2ZyZWUoZHJ2KTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBpcl9saXJjX3VucmVnaXN0ZXIoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KQoreworCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0X2Rldik7CisJc3RydWN0IGxpcmNfY29kZWMgKmxpcmMgPSAmaXJfZGV2LT5yYXctPmxpcmM7CisKKwlsaXJjX3VucmVnaXN0ZXJfZHJpdmVyKGxpcmMtPmRydi0+bWlub3IpOworCWxpcmNfYnVmZmVyX2ZyZWUobGlyYy0+ZHJ2LT5yYnVmKTsKKwlrZnJlZShsaXJjLT5kcnYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJfcmF3X2hhbmRsZXIgbGlyY19oYW5kbGVyID0geworCS5wcm90b2NvbHMJPSBJUl9UWVBFX0xJUkMsCisJLmRlY29kZQkJPSBpcl9saXJjX2RlY29kZSwKKwkucmF3X3JlZ2lzdGVyCT0gaXJfbGlyY19yZWdpc3RlciwKKwkucmF3X3VucmVnaXN0ZXIJPSBpcl9saXJjX3VucmVnaXN0ZXIsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpcl9saXJjX2NvZGVjX2luaXQodm9pZCkKK3sKKwlpcl9yYXdfaGFuZGxlcl9yZWdpc3RlcigmbGlyY19oYW5kbGVyKTsKKworCXByaW50ayhLRVJOX0lORk8gIklSIExJUkMgYnJpZGdlIGhhbmRsZXIgaW5pdGlhbGl6ZWRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaXJfbGlyY19jb2RlY19leGl0KHZvaWQpCit7CisJaXJfcmF3X2hhbmRsZXJfdW5yZWdpc3RlcigmbGlyY19oYW5kbGVyKTsKK30KKworbW9kdWxlX2luaXQoaXJfbGlyY19jb2RlY19pbml0KTsKK21vZHVsZV9leGl0KGlyX2xpcmNfY29kZWNfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkphcm9kIFdpbHNvbiA8amFyb2RAcmVkaGF0LmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIlJlZCBIYXQgSW5jLiAoaHR0cDovL3d3dy5yZWRoYXQuY29tKSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJMSVJDIElSIGhhbmRsZXIgYnJpZGdlIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2lyLW5lYy1kZWNvZGVyLmMgYi9kcml2ZXJzL21lZGlhL0lSL2lyLW5lYy1kZWNvZGVyLmMKaW5kZXggYmE3OTIzMy4uNTJlMGYzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9pci1uZWMtZGVjb2Rlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIvaXItbmVjLWRlY29kZXIuYwpAQCAtMjcsMTAgKzI3LDYgQEAKICNkZWZpbmUJTkVDX1RSQUlMRVJfUFVMU0UJKDEgICogTkVDX1VOSVQpCiAjZGVmaW5lCU5FQ19UUkFJTEVSX1NQQUNFCSgxMCAqIE5FQ19VTklUKSAvKiBldmVuIGxvbmdlciBpbiByZWFsaXR5ICovCiAKLS8qIFVzZWQgdG8gcmVnaXN0ZXIgbmVjX2RlY29kZXIgY2xpZW50cyAqLwotc3RhdGljIExJU1RfSEVBRChkZWNvZGVyX2xpc3QpOwotc3RhdGljIERFRklORV9TUElOTE9DSyhkZWNvZGVyX2xvY2spOwotCiBlbnVtIG5lY19zdGF0ZSB7CiAJU1RBVEVfSU5BQ1RJVkUsCiAJU1RBVEVfSEVBREVSX1NQQUNFLApAQCAtNDAsODQgKzM2LDYgQEAKIAlTVEFURV9UUkFJTEVSX1NQQUNFLAogfTsKIAotc3RydWN0IGRlY29kZXJfZGF0YSB7Ci0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0OwotCXN0cnVjdCBpcl9pbnB1dF9kZXYJKmlyX2RldjsKLQlpbnQJCQllbmFibGVkOjE7Ci0KLQkvKiBTdGF0ZSBtYWNoaW5lIGNvbnRyb2wgKi8KLQllbnVtIG5lY19zdGF0ZQkJc3RhdGU7Ci0JdTMyCQkJbmVjX2JpdHM7Ci0JdW5zaWduZWQJCWNvdW50OwotfTsKLQotCi0vKioKLSAqIGdldF9kZWNvZGVyX2RhdGEoKQktIGdldHMgZGVjb2RlciBkYXRhCi0gKiBAaW5wdXRfZGV2OglpbnB1dCBkZXZpY2UKLSAqCi0gKiBSZXR1cm5zIHRoZSBzdHJ1Y3QgZGVjb2Rlcl9kYXRhIHRoYXQgY29ycmVzcG9uZHMgdG8gYSBkZXZpY2UKLSAqLwotc3RhdGljIHN0cnVjdCBkZWNvZGVyX2RhdGEgKmdldF9kZWNvZGVyX2RhdGEoc3RydWN0ICBpcl9pbnB1dF9kZXYgKmlyX2RldikKLXsKLQlzdHJ1Y3QgZGVjb2Rlcl9kYXRhICpkYXRhID0gTlVMTDsKLQotCXNwaW5fbG9jaygmZGVjb2Rlcl9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRhdGEsICZkZWNvZGVyX2xpc3QsIGxpc3QpIHsKLQkJaWYgKGRhdGEtPmlyX2RldiA9PSBpcl9kZXYpCi0JCQlicmVhazsKLQl9Ci0Jc3Bpbl91bmxvY2soJmRlY29kZXJfbG9jayk7Ci0JcmV0dXJuIGRhdGE7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHN0b3JlX2VuYWJsZWQoc3RydWN0IGRldmljZSAqZCwKLQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm1hdHRyLAotCQkJICAgICBjb25zdCBjaGFyICpidWYsCi0JCQkgICAgIHNpemVfdCBsZW4pCi17Ci0JdW5zaWduZWQgbG9uZyB2YWx1ZTsKLQlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7Ci0Jc3RydWN0IGRlY29kZXJfZGF0YSAqZGF0YSA9IGdldF9kZWNvZGVyX2RhdGEoaXJfZGV2KTsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbHVlKSB8fCB2YWx1ZSA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZGF0YS0+ZW5hYmxlZCA9IHZhbHVlOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd19lbmFibGVkKHN0cnVjdCBkZXZpY2UgKmQsCi0JCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICptYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQlzdHJ1Y3QgZGVjb2Rlcl9kYXRhICpkYXRhID0gZ2V0X2RlY29kZXJfZGF0YShpcl9kZXYpOwotCi0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChkYXRhLT5lbmFibGVkKQotCQlyZXR1cm4gc3ByaW50ZihidWYsICIxXG4iKTsKLQllbHNlCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiMFxuIik7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihlbmFibGVkLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19lbmFibGVkLCBzdG9yZV9lbmFibGVkKTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRlY29kZXJfYXR0cmlidXRlc1tdID0gewotCSZkZXZfYXR0cl9lbmFibGVkLmF0dHIsCi0JTlVMTAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZGVjb2Rlcl9hdHRyaWJ1dGVfZ3JvdXAgPSB7Ci0JLm5hbWUJPSAibmVjX2RlY29kZXIiLAotCS5hdHRycwk9IGRlY29kZXJfYXR0cmlidXRlcywKLX07Ci0KIC8qKgogICogaXJfbmVjX2RlY29kZSgpIC0gRGVjb2RlIG9uZSBORUMgcHVsc2Ugb3Igc3BhY2UKICAqIEBpbnB1dF9kZXY6CXRoZSBzdHJ1Y3QgaW5wdXRfZGV2IGRlc2NyaXB0b3Igb2YgdGhlIGRldmljZQpAQCAtMTI3LDE2ICs0NSwxMiBAQAogICovCiBzdGF0aWMgaW50IGlyX25lY19kZWNvZGUoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBzdHJ1Y3QgaXJfcmF3X2V2ZW50IGV2KQogewotCXN0cnVjdCBkZWNvZGVyX2RhdGEgKmRhdGE7CiAJc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXRfZGV2KTsKKwlzdHJ1Y3QgbmVjX2RlYyAqZGF0YSA9ICZpcl9kZXYtPnJhdy0+bmVjOwogCXUzMiBzY2FuY29kZTsKIAl1OCBhZGRyZXNzLCBub3RfYWRkcmVzcywgY29tbWFuZCwgbm90X2NvbW1hbmQ7CiAKLQlkYXRhID0gZ2V0X2RlY29kZXJfZGF0YShpcl9kZXYpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIWRhdGEtPmVuYWJsZWQpCisJaWYgKCEoaXJfZGV2LT5yYXctPmVuYWJsZWRfcHJvdG9jb2xzICYgSVJfVFlQRV9ORUMpKQogCQlyZXR1cm4gMDsKIAogCWlmIChJU19SRVNFVChldikpIHsKQEAgLTE5MSw5ICsxMDUsOSBAQAogCQlpZiAoZXYucHVsc2UpCiAJCQlicmVhazsKIAotCQlkYXRhLT5uZWNfYml0cyA8PD0gMTsKKwkJZGF0YS0+Yml0cyA8PD0gMTsKIAkJaWYgKGVxX21hcmdpbihldi5kdXJhdGlvbiwgTkVDX0JJVF8xX1NQQUNFLCBORUNfVU5JVCAvIDIpKQotCQkJZGF0YS0+bmVjX2JpdHMgfD0gMTsKKwkJCWRhdGEtPmJpdHMgfD0gMTsKIAkJZWxzZSBpZiAoIWVxX21hcmdpbihldi5kdXJhdGlvbiwgTkVDX0JJVF8wX1NQQUNFLCBORUNfVU5JVCAvIDIpKQogCQkJYnJlYWs7CiAJCWRhdGEtPmNvdW50Kys7CkBAIC0yMjIsMTQgKzEzNiwxNCBAQAogCQlpZiAoIWdlcV9tYXJnaW4oZXYuZHVyYXRpb24sIE5FQ19UUkFJTEVSX1NQQUNFLCBORUNfVU5JVCAvIDIpKQogCQkJYnJlYWs7CiAKLQkJYWRkcmVzcyAgICAgPSBiaXRyZXY4KChkYXRhLT5uZWNfYml0cyA+PiAyNCkgJiAweGZmKTsKLQkJbm90X2FkZHJlc3MgPSBiaXRyZXY4KChkYXRhLT5uZWNfYml0cyA+PiAxNikgJiAweGZmKTsKLQkJY29tbWFuZAkgICAgPSBiaXRyZXY4KChkYXRhLT5uZWNfYml0cyA+PiAgOCkgJiAweGZmKTsKLQkJbm90X2NvbW1hbmQgPSBiaXRyZXY4KChkYXRhLT5uZWNfYml0cyA+PiAgMCkgJiAweGZmKTsKKwkJYWRkcmVzcyAgICAgPSBiaXRyZXY4KChkYXRhLT5iaXRzID4+IDI0KSAmIDB4ZmYpOworCQlub3RfYWRkcmVzcyA9IGJpdHJldjgoKGRhdGEtPmJpdHMgPj4gMTYpICYgMHhmZik7CisJCWNvbW1hbmQJICAgID0gYml0cmV2OCgoZGF0YS0+Yml0cyA+PiAgOCkgJiAweGZmKTsKKwkJbm90X2NvbW1hbmQgPSBiaXRyZXY4KChkYXRhLT5iaXRzID4+ICAwKSAmIDB4ZmYpOwogCiAJCWlmICgoY29tbWFuZCBeIG5vdF9jb21tYW5kKSAhPSAweGZmKSB7CiAJCQlJUl9kcHJpbnRrKDEsICJORUMgY2hlY2tzdW0gZXJyb3I6IHJlY2VpdmVkIDB4JTA4eFxuIiwKLQkJCQkgICBkYXRhLT5uZWNfYml0cyk7CisJCQkJICAgZGF0YS0+Yml0cyk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0yNTYsNTQgKzE3MCw5IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgaXJfbmVjX3JlZ2lzdGVyKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldikKLXsKLQlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dF9kZXYpOwotCXN0cnVjdCBkZWNvZGVyX2RhdGEgKmRhdGE7Ci0JaW50IHJjOwotCi0JcmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmlyX2Rldi0+ZGV2LmtvYmosICZkZWNvZGVyX2F0dHJpYnV0ZV9ncm91cCk7Ci0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOwotCi0JZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKSB7Ci0JCXN5c2ZzX3JlbW92ZV9ncm91cCgmaXJfZGV2LT5kZXYua29iaiwgJmRlY29kZXJfYXR0cmlidXRlX2dyb3VwKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JZGF0YS0+aXJfZGV2ID0gaXJfZGV2OwotCWRhdGEtPmVuYWJsZWQgPSAxOwotCi0Jc3Bpbl9sb2NrKCZkZWNvZGVyX2xvY2spOwotCWxpc3RfYWRkX3RhaWwoJmRhdGEtPmxpc3QsICZkZWNvZGVyX2xpc3QpOwotCXNwaW5fdW5sb2NrKCZkZWNvZGVyX2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaXJfbmVjX3VucmVnaXN0ZXIoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KQotewotCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0X2Rldik7Ci0Jc3RhdGljIHN0cnVjdCBkZWNvZGVyX2RhdGEgKmRhdGE7Ci0KLQlkYXRhID0gZ2V0X2RlY29kZXJfZGF0YShpcl9kZXYpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuIDA7Ci0KLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmlyX2Rldi0+ZGV2LmtvYmosICZkZWNvZGVyX2F0dHJpYnV0ZV9ncm91cCk7Ci0KLQlzcGluX2xvY2soJmRlY29kZXJfbG9jayk7Ci0JbGlzdF9kZWwoJmRhdGEtPmxpc3QpOwotCXNwaW5fdW5sb2NrKCZkZWNvZGVyX2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaXJfcmF3X2hhbmRsZXIgbmVjX2hhbmRsZXIgPSB7CisJLnByb3RvY29scwk9IElSX1RZUEVfTkVDLAogCS5kZWNvZGUJCT0gaXJfbmVjX2RlY29kZSwKLQkucmF3X3JlZ2lzdGVyCT0gaXJfbmVjX3JlZ2lzdGVyLAotCS5yYXdfdW5yZWdpc3Rlcgk9IGlyX25lY191bnJlZ2lzdGVyLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaXJfbmVjX2RlY29kZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2lyLXJhdy1ldmVudC5jIGIvZHJpdmVycy9tZWRpYS9JUi9pci1yYXctZXZlbnQuYwppbmRleCBlYTY4YTNmLi42ZjE5MmVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2lyLXJhdy1ldmVudC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIvaXItcmF3LWV2ZW50LmMKQEAgLTIwLDM1ICsyMCwxMyBAQAogLyogRGVmaW5lIHRoZSBtYXggbnVtYmVyIG9mIHB1bHNlL3NwYWNlIHRyYW5zaXRpb25zIHRvIGJ1ZmZlciAqLwogI2RlZmluZSBNQVhfSVJfRVZFTlRfU0laRSAgICAgIDUxMgogCi0vKiBVc2VkIHRvIGhhbmRsZSBJUiByYXcgaGFuZGxlciBleHRlbnNpb25zICovCi1zdGF0aWMgTElTVF9IRUFEKGlyX3Jhd19oYW5kbGVyX2xpc3QpOwotc3RhdGljIERFRklORV9TUElOTE9DSyhpcl9yYXdfaGFuZGxlcl9sb2NrKTsKKy8qIFVzZWQgdG8ga2VlcCB0cmFjayBvZiBJUiByYXcgY2xpZW50cywgcHJvdGVjdGVkIGJ5IGlyX3Jhd19oYW5kbGVyX2xvY2sgKi8KK3N0YXRpYyBMSVNUX0hFQUQoaXJfcmF3X2NsaWVudF9saXN0KTsKIAotLyoqCi0gKiBSVU5fREVDT0RFUigpCS0gcnVucyBhbiBvcGVyYXRpb24gb24gYWxsIElSIGRlY29kZXJzCi0gKiBAb3BzOglJUiByYXcgaGFuZGxlciBvcGVyYXRpb24gdG8gYmUgY2FsbGVkCi0gKiBAYXJnOglhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjawotICoKLSAqIENhbGxzIGlyX3Jhd19oYW5kbGVyOjpvcHMgZm9yIGFsbCByZWdpc3RlcmVkIElSIGhhbmRsZXJzLiBJdCBwcmV2ZW50cwotICogbmV3IGRlY29kZSBhZGRpdGlvbi9yZW1vdmFsIHdoaWxlIHJ1bm5pbmcsIGJ5IGxvY2tpbmcgaXJfcmF3X2hhbmRsZXJfbG9jawotICogbXV0ZXguIElmIGFuIGVycm9yIG9jY3VycywgaXQgc3RvcHMgdGhlIG9wcy4gT3RoZXJ3aXNlLCBpdCByZXR1cm5zIGEgc3VtCi0gKiBvZiB0aGUgcmV0dXJuIGNvZGVzLgotICovCi0jZGVmaW5lIFJVTl9ERUNPREVSKG9wcywgLi4uKSAoewkJCQkJICAgIFwKLQlzdHJ1Y3QgaXJfcmF3X2hhbmRsZXIJCSpfaXJfcmF3X2hhbmRsZXI7CQkgICAgXAotCWludCBfc3VtcmMgPSAwLCBfcmM7CQkJCQkJICAgIFwKLQlzcGluX2xvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOwkJCQkgICAgXAotCWxpc3RfZm9yX2VhY2hfZW50cnkoX2lyX3Jhd19oYW5kbGVyLCAmaXJfcmF3X2hhbmRsZXJfbGlzdCwgbGlzdCkgeyAgXAotCQlpZiAoX2lyX3Jhd19oYW5kbGVyLT5vcHMpIHsJCQkJICAgIFwKLQkJCV9yYyA9IF9pcl9yYXdfaGFuZGxlci0+b3BzKF9fVkFfQVJHU19fKTsJICAgIFwKLQkJCWlmIChfcmMgPCAwKQkJCQkJICAgIFwKLQkJCQlicmVhazsJCQkJCSAgICBcCi0JCQlfc3VtcmMgKz0gX3JjOwkJCQkJICAgIFwKLQkJfQkJCQkJCQkgICAgXAotCX0JCQkJCQkJCSAgICBcCi0Jc3Bpbl91bmxvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOwkJCQkgICAgXAotCV9zdW1yYzsJCQkJCQkJCSAgICBcCi19KQorLyogVXNlZCB0byBoYW5kbGUgSVIgcmF3IGhhbmRsZXIgZXh0ZW5zaW9ucyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhpcl9yYXdfaGFuZGxlcl9sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQoaXJfcmF3X2hhbmRsZXJfbGlzdCk7CitzdGF0aWMgdTY0IGF2YWlsYWJsZV9wcm90b2NvbHM7CiAKICNpZmRlZiBNT0RVTEUKIC8qIFVzZWQgdG8gbG9hZCB0aGUgZGVjb2RlcnMgKi8KQEAgLTU4LDU3ICszNiwxNyBAQAogc3RhdGljIHZvaWQgaXJfcmF3X2V2ZW50X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBpcl9yYXdfZXZlbnQgZXY7CisJc3RydWN0IGlyX3Jhd19oYW5kbGVyICpoYW5kbGVyOwogCXN0cnVjdCBpcl9yYXdfZXZlbnRfY3RybCAqcmF3ID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpcl9yYXdfZXZlbnRfY3RybCwgcnhfd29yayk7CiAKLQl3aGlsZSAoa2ZpZm9fb3V0KCZyYXctPmtmaWZvLCAmZXYsIHNpemVvZihldikpID09IHNpemVvZihldikpCi0JCVJVTl9ERUNPREVSKGRlY29kZSwgcmF3LT5pbnB1dF9kZXYsIGV2KTsKLX0KLQotaW50IGlyX3Jhd19ldmVudF9yZWdpc3RlcihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYpCi17Ci0Jc3RydWN0IGlyX2lucHV0X2RldiAqaXIgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dF9kZXYpOwotCWludCByYzsKLQotCWlyLT5yYXcgPSBremFsbG9jKHNpemVvZigqaXItPnJhdyksIEdGUF9LRVJORUwpOwotCWlmICghaXItPnJhdykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpci0+cmF3LT5pbnB1dF9kZXYgPSBpbnB1dF9kZXY7Ci0JSU5JVF9XT1JLKCZpci0+cmF3LT5yeF93b3JrLCBpcl9yYXdfZXZlbnRfd29yayk7Ci0KLQlyYyA9IGtmaWZvX2FsbG9jKCZpci0+cmF3LT5rZmlmbywgc2l6ZW9mKHM2NCkgKiBNQVhfSVJfRVZFTlRfU0laRSwKLQkJCSBHRlBfS0VSTkVMKTsKLQlpZiAocmMgPCAwKSB7Ci0JCWtmcmVlKGlyLT5yYXcpOwotCQlpci0+cmF3ID0gTlVMTDsKLQkJcmV0dXJuIHJjOworCXdoaWxlIChrZmlmb19vdXQoJnJhdy0+a2ZpZm8sICZldiwgc2l6ZW9mKGV2KSkgPT0gc2l6ZW9mKGV2KSkgeworCQlzcGluX2xvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhbmRsZXIsICZpcl9yYXdfaGFuZGxlcl9saXN0LCBsaXN0KQorCQkJaGFuZGxlci0+ZGVjb2RlKHJhdy0+aW5wdXRfZGV2LCBldik7CisJCXNwaW5fdW5sb2NrKCZpcl9yYXdfaGFuZGxlcl9sb2NrKTsKKwkJcmF3LT5wcmV2X2V2ID0gZXY7CiAJfQotCi0JcmMgPSBSVU5fREVDT0RFUihyYXdfcmVnaXN0ZXIsIGlucHV0X2Rldik7Ci0JaWYgKHJjIDwgMCkgewotCQlrZmlmb19mcmVlKCZpci0+cmF3LT5rZmlmbyk7Ci0JCWtmcmVlKGlyLT5yYXcpOwotCQlpci0+cmF3ID0gTlVMTDsKLQkJcmV0dXJuIHJjOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotdm9pZCBpcl9yYXdfZXZlbnRfdW5yZWdpc3RlcihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYpCi17Ci0Jc3RydWN0IGlyX2lucHV0X2RldiAqaXIgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dF9kZXYpOwotCi0JaWYgKCFpci0+cmF3KQotCQlyZXR1cm47Ci0KLQljYW5jZWxfd29ya19zeW5jKCZpci0+cmF3LT5yeF93b3JrKTsKLQlSVU5fREVDT0RFUihyYXdfdW5yZWdpc3RlciwgaW5wdXRfZGV2KTsKLQotCWtmaWZvX2ZyZWUoJmlyLT5yYXctPmtmaWZvKTsKLQlrZnJlZShpci0+cmF3KTsKLQlpci0+cmF3ID0gTlVMTDsKIH0KIAogLyoqCkBAIC0yMDQsMjMgKzE0MiwxMDMgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlyX3Jhd19ldmVudF9oYW5kbGUpOwogCisvKiB1c2VkIGludGVybmFsbHkgYnkgdGhlIHN5c2ZzIGludGVyZmFjZSAqLwordTY0Citpcl9yYXdfZ2V0X2FsbG93ZWRfcHJvdG9jb2xzKCkKK3sKKwl1NjQgcHJvdG9jb2xzOworCXNwaW5fbG9jaygmaXJfcmF3X2hhbmRsZXJfbG9jayk7CisJcHJvdG9jb2xzID0gYXZhaWxhYmxlX3Byb3RvY29sczsKKwlzcGluX3VubG9jaygmaXJfcmF3X2hhbmRsZXJfbG9jayk7CisJcmV0dXJuIHByb3RvY29sczsKK30KKworLyoKKyAqIFVzZWQgdG8gKHVuKXJlZ2lzdGVyIHJhdyBldmVudCBjbGllbnRzCisgKi8KK2ludCBpcl9yYXdfZXZlbnRfcmVnaXN0ZXIoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KQoreworCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXRfZGV2KTsKKwlpbnQgcmM7CisJc3RydWN0IGlyX3Jhd19oYW5kbGVyICpoYW5kbGVyOworCisJaXItPnJhdyA9IGt6YWxsb2Moc2l6ZW9mKCppci0+cmF3KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpci0+cmF3KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlyLT5yYXctPmlucHV0X2RldiA9IGlucHV0X2RldjsKKwlJTklUX1dPUksoJmlyLT5yYXctPnJ4X3dvcmssIGlyX3Jhd19ldmVudF93b3JrKTsKKwlpci0+cmF3LT5lbmFibGVkX3Byb3RvY29scyA9IH4wOworCXJjID0ga2ZpZm9fYWxsb2MoJmlyLT5yYXctPmtmaWZvLCBzaXplb2YoczY0KSAqIE1BWF9JUl9FVkVOVF9TSVpFLAorCQkJIEdGUF9LRVJORUwpOworCWlmIChyYyA8IDApIHsKKwkJa2ZyZWUoaXItPnJhdyk7CisJCWlyLT5yYXcgPSBOVUxMOworCQlyZXR1cm4gcmM7CisJfQorCisJc3Bpbl9sb2NrKCZpcl9yYXdfaGFuZGxlcl9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZpci0+cmF3LT5saXN0LCAmaXJfcmF3X2NsaWVudF9saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhbmRsZXIsICZpcl9yYXdfaGFuZGxlcl9saXN0LCBsaXN0KQorCQlpZiAoaGFuZGxlci0+cmF3X3JlZ2lzdGVyKQorCQkJaGFuZGxlci0+cmF3X3JlZ2lzdGVyKGlyLT5yYXctPmlucHV0X2Rldik7CisJc3Bpbl91bmxvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaXJfcmF3X2V2ZW50X3VucmVnaXN0ZXIoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KQoreworCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXRfZGV2KTsKKwlzdHJ1Y3QgaXJfcmF3X2hhbmRsZXIgKmhhbmRsZXI7CisKKwlpZiAoIWlyLT5yYXcpCisJCXJldHVybjsKKworCWNhbmNlbF93b3JrX3N5bmMoJmlyLT5yYXctPnJ4X3dvcmspOworCisJc3Bpbl9sb2NrKCZpcl9yYXdfaGFuZGxlcl9sb2NrKTsKKwlsaXN0X2RlbCgmaXItPnJhdy0+bGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShoYW5kbGVyLCAmaXJfcmF3X2hhbmRsZXJfbGlzdCwgbGlzdCkKKwkJaWYgKGhhbmRsZXItPnJhd191bnJlZ2lzdGVyKQorCQkJaGFuZGxlci0+cmF3X3VucmVnaXN0ZXIoaXItPnJhdy0+aW5wdXRfZGV2KTsKKwlzcGluX3VubG9jaygmaXJfcmF3X2hhbmRsZXJfbG9jayk7CisKKwlrZmlmb19mcmVlKCZpci0+cmF3LT5rZmlmbyk7CisJa2ZyZWUoaXItPnJhdyk7CisJaXItPnJhdyA9IE5VTEw7Cit9CisKIC8qCiAgKiBFeHRlbnNpb24gaW50ZXJmYWNlIC0gdXNlZCB0byByZWdpc3RlciB0aGUgSVIgZGVjb2RlcnMKICAqLwogCiBpbnQgaXJfcmF3X2hhbmRsZXJfcmVnaXN0ZXIoc3RydWN0IGlyX3Jhd19oYW5kbGVyICppcl9yYXdfaGFuZGxlcikKIHsKKwlzdHJ1Y3QgaXJfcmF3X2V2ZW50X2N0cmwgKnJhdzsKKwogCXNwaW5fbG9jaygmaXJfcmF3X2hhbmRsZXJfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmaXJfcmF3X2hhbmRsZXItPmxpc3QsICZpcl9yYXdfaGFuZGxlcl9saXN0KTsKKwlpZiAoaXJfcmF3X2hhbmRsZXItPnJhd19yZWdpc3RlcikKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShyYXcsICZpcl9yYXdfY2xpZW50X2xpc3QsIGxpc3QpCisJCQlpcl9yYXdfaGFuZGxlci0+cmF3X3JlZ2lzdGVyKHJhdy0+aW5wdXRfZGV2KTsKKwlhdmFpbGFibGVfcHJvdG9jb2xzIHw9IGlyX3Jhd19oYW5kbGVyLT5wcm90b2NvbHM7CiAJc3Bpbl91bmxvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOworCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGlyX3Jhd19oYW5kbGVyX3JlZ2lzdGVyKTsKIAogdm9pZCBpcl9yYXdfaGFuZGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBpcl9yYXdfaGFuZGxlciAqaXJfcmF3X2hhbmRsZXIpCiB7CisJc3RydWN0IGlyX3Jhd19ldmVudF9jdHJsICpyYXc7CisKIAlzcGluX2xvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOwogCWxpc3RfZGVsKCZpcl9yYXdfaGFuZGxlci0+bGlzdCk7CisJaWYgKGlyX3Jhd19oYW5kbGVyLT5yYXdfdW5yZWdpc3RlcikKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShyYXcsICZpcl9yYXdfY2xpZW50X2xpc3QsIGxpc3QpCisJCQlpcl9yYXdfaGFuZGxlci0+cmF3X3VucmVnaXN0ZXIocmF3LT5pbnB1dF9kZXYpOworCWF2YWlsYWJsZV9wcm90b2NvbHMgJj0gfmlyX3Jhd19oYW5kbGVyLT5wcm90b2NvbHM7CiAJc3Bpbl91bmxvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOwogfQogRVhQT1JUX1NZTUJPTChpcl9yYXdfaGFuZGxlcl91bnJlZ2lzdGVyKTsKQEAgLTIzNSw2ICsyNTMsNyBAQAogCWxvYWRfcmM2X2RlY29kZSgpOwogCWxvYWRfanZjX2RlY29kZSgpOwogCWxvYWRfc29ueV9kZWNvZGUoKTsKKwlsb2FkX2xpcmNfY29kZWMoKTsKIAogCS8qIElmIG5lZWRlZCwgd2UgbWF5IGxhdGVyIGFkZCBzb21lIGluaXQgY29kZS4gSW4gdGhpcyBjYXNlLAogCSAgIGl0IGlzIG5lZWRlZCB0byBjaGFuZ2UgdGhlIENPTkZJR19NT0RVTEUgdGVzdCBhdCBpci1jb3JlLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIvaXItcmM1LWRlY29kZXIuYyBiL2RyaXZlcnMvbWVkaWEvSVIvaXItcmM1LWRlY29kZXIuYwppbmRleCAyM2NkYjFiLi5kZjQ3NzBkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9pci1yYzUtZGVjb2Rlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIvaXItcmM1LWRlY29kZXIuYwpAQCAtMzAsMTAgKzMwLDYgQEAKICNkZWZpbmUgUkM1X0JJVF9FTkQJCSgxICogUkM1X1VOSVQpCiAjZGVmaW5lIFJDNVhfU1BBQ0UJCSg0ICogUkM1X1VOSVQpCiAKLS8qIFVzZWQgdG8gcmVnaXN0ZXIgcmM1X2RlY29kZXIgY2xpZW50cyAqLwotc3RhdGljIExJU1RfSEVBRChkZWNvZGVyX2xpc3QpOwotc3RhdGljIERFRklORV9TUElOTE9DSyhkZWNvZGVyX2xvY2spOwotCiBlbnVtIHJjNV9zdGF0ZSB7CiAJU1RBVEVfSU5BQ1RJVkUsCiAJU1RBVEVfQklUX1NUQVJULApAQCAtNDIsODcgKzM4LDYgQEAKIAlTVEFURV9GSU5JU0hFRCwKIH07CiAKLXN0cnVjdCBkZWNvZGVyX2RhdGEgewotCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKLQlzdHJ1Y3QgaXJfaW5wdXRfZGV2CSppcl9kZXY7Ci0JaW50CQkJZW5hYmxlZDoxOwotCi0JLyogU3RhdGUgbWFjaGluZSBjb250cm9sICovCi0JZW51bSByYzVfc3RhdGUJCXN0YXRlOwotCXUzMgkJCXJjNV9iaXRzOwotCXN0cnVjdCBpcl9yYXdfZXZlbnQJcHJldl9ldjsKLQl1bnNpZ25lZAkJY291bnQ7Ci0JdW5zaWduZWQJCXdhbnRlZF9iaXRzOwotfTsKLQotCi0vKioKLSAqIGdldF9kZWNvZGVyX2RhdGEoKQktIGdldHMgZGVjb2RlciBkYXRhCi0gKiBAaW5wdXRfZGV2OglpbnB1dCBkZXZpY2UKLSAqCi0gKiBSZXR1cm5zIHRoZSBzdHJ1Y3QgZGVjb2Rlcl9kYXRhIHRoYXQgY29ycmVzcG9uZHMgdG8gYSBkZXZpY2UKLSAqLwotCi1zdGF0aWMgc3RydWN0IGRlY29kZXJfZGF0YSAqZ2V0X2RlY29kZXJfZGF0YShzdHJ1Y3QgIGlyX2lucHV0X2RldiAqaXJfZGV2KQotewotCXN0cnVjdCBkZWNvZGVyX2RhdGEgKmRhdGEgPSBOVUxMOwotCi0Jc3Bpbl9sb2NrKCZkZWNvZGVyX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGF0YSwgJmRlY29kZXJfbGlzdCwgbGlzdCkgewotCQlpZiAoZGF0YS0+aXJfZGV2ID09IGlyX2RldikKLQkJCWJyZWFrOwotCX0KLQlzcGluX3VubG9jaygmZGVjb2Rlcl9sb2NrKTsKLQlyZXR1cm4gZGF0YTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc3RvcmVfZW5hYmxlZChzdHJ1Y3QgZGV2aWNlICpkLAotCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbWF0dHIsCi0JCQkgICAgIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCSAgICAgc2l6ZV90IGxlbikKLXsKLQl1bnNpZ25lZCBsb25nIHZhbHVlOwotCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQlzdHJ1Y3QgZGVjb2Rlcl9kYXRhICpkYXRhID0gZ2V0X2RlY29kZXJfZGF0YShpcl9kZXYpOwotCi0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsdWUpIHx8IHZhbHVlID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkYXRhLT5lbmFibGVkID0gdmFsdWU7Ci0KLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgc3NpemVfdCBzaG93X2VuYWJsZWQoc3RydWN0IGRldmljZSAqZCwKLQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm1hdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwotCXN0cnVjdCBkZWNvZGVyX2RhdGEgKmRhdGEgPSBnZXRfZGVjb2Rlcl9kYXRhKGlyX2Rldik7Ci0KLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGRhdGEtPmVuYWJsZWQpCi0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjFcbiIpOwotCWVsc2UKLQlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4iKTsKLX0KLQotc3RhdGljIERFVklDRV9BVFRSKGVuYWJsZWQsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2VuYWJsZWQsIHN0b3JlX2VuYWJsZWQpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGVjb2Rlcl9hdHRyaWJ1dGVzW10gPSB7Ci0JJmRldl9hdHRyX2VuYWJsZWQuYXR0ciwKLQlOVUxMCi19OwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBkZWNvZGVyX2F0dHJpYnV0ZV9ncm91cCA9IHsKLQkubmFtZQk9ICJyYzVfZGVjb2RlciIsCi0JLmF0dHJzCT0gZGVjb2Rlcl9hdHRyaWJ1dGVzLAotfTsKLQogLyoqCiAgKiBpcl9yYzVfZGVjb2RlKCkgLSBEZWNvZGUgb25lIFJDLTUgcHVsc2Ugb3Igc3BhY2UKICAqIEBpbnB1dF9kZXY6CXRoZSBzdHJ1Y3QgaW5wdXRfZGV2IGRlc2NyaXB0b3Igb2YgdGhlIGRldmljZQpAQCAtMTMyLDE3ICs0NywxMyBAQAogICovCiBzdGF0aWMgaW50IGlyX3JjNV9kZWNvZGUoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBzdHJ1Y3QgaXJfcmF3X2V2ZW50IGV2KQogewotCXN0cnVjdCBkZWNvZGVyX2RhdGEgKmRhdGE7CiAJc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXRfZGV2KTsKKwlzdHJ1Y3QgcmM1X2RlYyAqZGF0YSA9ICZpcl9kZXYtPnJhdy0+cmM1OwogCXU4IHRvZ2dsZTsKIAl1MzIgc2NhbmNvZGU7CiAKLQlkYXRhID0gZ2V0X2RlY29kZXJfZGF0YShpcl9kZXYpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIWRhdGEtPmVuYWJsZWQpCi0JCXJldHVybiAwOworICAgICAgICBpZiAoIShpcl9kZXYtPnJhdy0+ZW5hYmxlZF9wcm90b2NvbHMgJiBJUl9UWVBFX1JDNSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAKIAlpZiAoSVNfUkVTRVQoZXYpKSB7CiAJCWRhdGEtPnN0YXRlID0gU1RBVEVfSU5BQ1RJVkU7CkBAIC0xNzYsMTYgKzg3LDE1IEBACiAJCWlmICghZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBSQzVfQklUX1NUQVJULCBSQzVfVU5JVCAvIDIpKQogCQkJYnJlYWs7CiAKLQkJZGF0YS0+cmM1X2JpdHMgPDw9IDE7CisJCWRhdGEtPmJpdHMgPDw9IDE7CiAJCWlmICghZXYucHVsc2UpCi0JCQlkYXRhLT5yYzVfYml0cyB8PSAxOworCQkJZGF0YS0+Yml0cyB8PSAxOwogCQlkYXRhLT5jb3VudCsrOwotCQlkYXRhLT5wcmV2X2V2ID0gZXY7CiAJCWRhdGEtPnN0YXRlID0gU1RBVEVfQklUX0VORDsKIAkJcmV0dXJuIDA7CiAKIAljYXNlIFNUQVRFX0JJVF9FTkQ6Ci0JCWlmICghaXNfdHJhbnNpdGlvbigmZXYsICZkYXRhLT5wcmV2X2V2KSkKKwkJaWYgKCFpc190cmFuc2l0aW9uKCZldiwgJmlyX2Rldi0+cmF3LT5wcmV2X2V2KSkKIAkJCWJyZWFrOwogCiAJCWlmIChkYXRhLT5jb3VudCA9PSBkYXRhLT53YW50ZWRfYml0cykKQEAgLTIxNywxMSArMTI3LDExIEBACiAJCWlmIChkYXRhLT53YW50ZWRfYml0cyA9PSBSQzVYX05CSVRTKSB7CiAJCQkvKiBSQzVYICovCiAJCQl1OCB4ZGF0YSwgY29tbWFuZCwgc3lzdGVtOwotCQkJeGRhdGEgICAgPSAoZGF0YS0+cmM1X2JpdHMgJiAweDAwMDNGKSA+PiAwOwotCQkJY29tbWFuZCAgPSAoZGF0YS0+cmM1X2JpdHMgJiAweDAwRkMwKSA+PiA2OwotCQkJc3lzdGVtICAgPSAoZGF0YS0+cmM1X2JpdHMgJiAweDFGMDAwKSA+PiAxMjsKLQkJCXRvZ2dsZSAgID0gKGRhdGEtPnJjNV9iaXRzICYgMHgyMDAwMCkgPyAxIDogMDsKLQkJCWNvbW1hbmQgKz0gKGRhdGEtPnJjNV9iaXRzICYgMHgwMTAwMCkgPyAwIDogMHg0MDsKKwkJCXhkYXRhICAgID0gKGRhdGEtPmJpdHMgJiAweDAwMDNGKSA+PiAwOworCQkJY29tbWFuZCAgPSAoZGF0YS0+Yml0cyAmIDB4MDBGQzApID4+IDY7CisJCQlzeXN0ZW0gICA9IChkYXRhLT5iaXRzICYgMHgxRjAwMCkgPj4gMTI7CisJCQl0b2dnbGUgICA9IChkYXRhLT5iaXRzICYgMHgyMDAwMCkgPyAxIDogMDsKKwkJCWNvbW1hbmQgKz0gKGRhdGEtPmJpdHMgJiAweDAxMDAwKSA/IDAgOiAweDQwOwogCQkJc2NhbmNvZGUgPSBzeXN0ZW0gPDwgMTYgfCBjb21tYW5kIDw8IDggfCB4ZGF0YTsKIAogCQkJSVJfZHByaW50aygxLCAiUkM1WCBzY2FuY29kZSAweCUwNnggKHRvZ2dsZTogJXUpXG4iLApAQCAtMjMwLDEwICsxNDAsMTAgQEAKIAkJfSBlbHNlIHsKIAkJCS8qIFJDNSAqLwogCQkJdTggY29tbWFuZCwgc3lzdGVtOwotCQkJY29tbWFuZCAgPSAoZGF0YS0+cmM1X2JpdHMgJiAweDAwMDNGKSA+PiAwOwotCQkJc3lzdGVtICAgPSAoZGF0YS0+cmM1X2JpdHMgJiAweDAwN0MwKSA+PiA2OwotCQkJdG9nZ2xlICAgPSAoZGF0YS0+cmM1X2JpdHMgJiAweDAwODAwKSA/IDEgOiAwOwotCQkJY29tbWFuZCArPSAoZGF0YS0+cmM1X2JpdHMgJiAweDAxMDAwKSA/IDAgOiAweDQwOworCQkJY29tbWFuZCAgPSAoZGF0YS0+Yml0cyAmIDB4MDAwM0YpID4+IDA7CisJCQlzeXN0ZW0gICA9IChkYXRhLT5iaXRzICYgMHgwMDdDMCkgPj4gNjsKKwkJCXRvZ2dsZSAgID0gKGRhdGEtPmJpdHMgJiAweDAwODAwKSA/IDEgOiAwOworCQkJY29tbWFuZCArPSAoZGF0YS0+Yml0cyAmIDB4MDEwMDApID8gMCA6IDB4NDA7CiAJCQlzY2FuY29kZSA9IHN5c3RlbSA8PCA4IHwgY29tbWFuZDsKIAogCQkJSVJfZHByaW50aygxLCAiUkM1IHNjYW5jb2RlIDB4JTA0eCAodG9nZ2xlOiAldSlcbiIsCkBAIC0yNTIsNTQgKzE2Miw5IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgaXJfcmM1X3JlZ2lzdGVyKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldikKLXsKLQlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dF9kZXYpOwotCXN0cnVjdCBkZWNvZGVyX2RhdGEgKmRhdGE7Ci0JaW50IHJjOwotCi0JcmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmlyX2Rldi0+ZGV2LmtvYmosICZkZWNvZGVyX2F0dHJpYnV0ZV9ncm91cCk7Ci0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOwotCi0JZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKSB7Ci0JCXN5c2ZzX3JlbW92ZV9ncm91cCgmaXJfZGV2LT5kZXYua29iaiwgJmRlY29kZXJfYXR0cmlidXRlX2dyb3VwKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JZGF0YS0+aXJfZGV2ID0gaXJfZGV2OwotCWRhdGEtPmVuYWJsZWQgPSAxOwotCi0Jc3Bpbl9sb2NrKCZkZWNvZGVyX2xvY2spOwotCWxpc3RfYWRkX3RhaWwoJmRhdGEtPmxpc3QsICZkZWNvZGVyX2xpc3QpOwotCXNwaW5fdW5sb2NrKCZkZWNvZGVyX2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaXJfcmM1X3VucmVnaXN0ZXIoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KQotewotCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0X2Rldik7Ci0Jc3RhdGljIHN0cnVjdCBkZWNvZGVyX2RhdGEgKmRhdGE7Ci0KLQlkYXRhID0gZ2V0X2RlY29kZXJfZGF0YShpcl9kZXYpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuIDA7Ci0KLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmlyX2Rldi0+ZGV2LmtvYmosICZkZWNvZGVyX2F0dHJpYnV0ZV9ncm91cCk7Ci0KLQlzcGluX2xvY2soJmRlY29kZXJfbG9jayk7Ci0JbGlzdF9kZWwoJmRhdGEtPmxpc3QpOwotCXNwaW5fdW5sb2NrKCZkZWNvZGVyX2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaXJfcmF3X2hhbmRsZXIgcmM1X2hhbmRsZXIgPSB7CisJLnByb3RvY29scwk9IElSX1RZUEVfUkM1LAogCS5kZWNvZGUJCT0gaXJfcmM1X2RlY29kZSwKLQkucmF3X3JlZ2lzdGVyCT0gaXJfcmM1X3JlZ2lzdGVyLAotCS5yYXdfdW5yZWdpc3Rlcgk9IGlyX3JjNV91bnJlZ2lzdGVyLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaXJfcmM1X2RlY29kZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2lyLXJjNi1kZWNvZGVyLmMgYi9kcml2ZXJzL21lZGlhL0lSL2lyLXJjNi1kZWNvZGVyLmMKaW5kZXggMmJmNDc5Zi4uZjE2MjRiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9pci1yYzYtZGVjb2Rlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIvaXItcmM2LWRlY29kZXIuYwpAQCAtMzYsMTAgKzM2LDYgQEAKICNkZWZpbmUgUkM2X1NUQVJUQklUX01BU0sJMHgwOAkvKiBmb3IgdGhlIGhlYWRlciBiaXRzICovCiAjZGVmaW5lIFJDNl82QV9NQ0VfVE9HR0xFX01BU0sJMHg4MDAwCS8qIGZvciB0aGUgYm9keSBiaXRzICovCiAKLS8qIFVzZWQgdG8gcmVnaXN0ZXIgcmM2X2RlY29kZXIgY2xpZW50cyAqLwotc3RhdGljIExJU1RfSEVBRChkZWNvZGVyX2xpc3QpOwotc3RhdGljIERFRklORV9TUElOTE9DSyhkZWNvZGVyX2xvY2spOwotCiBlbnVtIHJjNl9tb2RlIHsKIAlSQzZfTU9ERV8wLAogCVJDNl9NT0RFXzZBLApAQCAtNTgsODkgKzU0LDggQEAKIAlTVEFURV9GSU5JU0hFRCwKIH07CiAKLXN0cnVjdCBkZWNvZGVyX2RhdGEgewotCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKLQlzdHJ1Y3QgaXJfaW5wdXRfZGV2CSppcl9kZXY7Ci0JaW50CQkJZW5hYmxlZDoxOwotCi0JLyogU3RhdGUgbWFjaGluZSBjb250cm9sICovCi0JZW51bSByYzZfc3RhdGUJCXN0YXRlOwotCXU4CQkJaGVhZGVyOwotCXUzMgkJCWJvZHk7Ci0Jc3RydWN0IGlyX3Jhd19ldmVudAlwcmV2X2V2OwotCWJvb2wJCQl0b2dnbGU7Ci0JdW5zaWduZWQJCWNvdW50OwotCXVuc2lnbmVkCQl3YW50ZWRfYml0czsKLX07Ci0KLQotLyoqCi0gKiBnZXRfZGVjb2Rlcl9kYXRhKCkJLSBnZXRzIGRlY29kZXIgZGF0YQotICogQGlucHV0X2RldjoJaW5wdXQgZGV2aWNlCi0gKgotICogUmV0dXJucyB0aGUgc3RydWN0IGRlY29kZXJfZGF0YSB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgZGV2aWNlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZGVjb2Rlcl9kYXRhICpnZXRfZGVjb2Rlcl9kYXRhKHN0cnVjdCAgaXJfaW5wdXRfZGV2ICppcl9kZXYpCitzdGF0aWMgZW51bSByYzZfbW9kZSByYzZfbW9kZShzdHJ1Y3QgcmM2X2RlYyAqZGF0YSkKIHsKLQlzdHJ1Y3QgZGVjb2Rlcl9kYXRhICpkYXRhID0gTlVMTDsKLQotCXNwaW5fbG9jaygmZGVjb2Rlcl9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRhdGEsICZkZWNvZGVyX2xpc3QsIGxpc3QpIHsKLQkJaWYgKGRhdGEtPmlyX2RldiA9PSBpcl9kZXYpCi0JCQlicmVhazsKLQl9Ci0Jc3Bpbl91bmxvY2soJmRlY29kZXJfbG9jayk7Ci0JcmV0dXJuIGRhdGE7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHN0b3JlX2VuYWJsZWQoc3RydWN0IGRldmljZSAqZCwKLQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm1hdHRyLAotCQkJICAgICBjb25zdCBjaGFyICpidWYsCi0JCQkgICAgIHNpemVfdCBsZW4pCi17Ci0JdW5zaWduZWQgbG9uZyB2YWx1ZTsKLQlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7Ci0Jc3RydWN0IGRlY29kZXJfZGF0YSAqZGF0YSA9IGdldF9kZWNvZGVyX2RhdGEoaXJfZGV2KTsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbHVlKSB8fCB2YWx1ZSA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZGF0YS0+ZW5hYmxlZCA9IHZhbHVlOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd19lbmFibGVkKHN0cnVjdCBkZXZpY2UgKmQsCi0JCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICptYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQlzdHJ1Y3QgZGVjb2Rlcl9kYXRhICpkYXRhID0gZ2V0X2RlY29kZXJfZGF0YShpcl9kZXYpOwotCi0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChkYXRhLT5lbmFibGVkKQotCQlyZXR1cm4gc3ByaW50ZihidWYsICIxXG4iKTsKLQllbHNlCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiMFxuIik7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihlbmFibGVkLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19lbmFibGVkLCBzdG9yZV9lbmFibGVkKTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRlY29kZXJfYXR0cmlidXRlc1tdID0gewotCSZkZXZfYXR0cl9lbmFibGVkLmF0dHIsCi0JTlVMTAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZGVjb2Rlcl9hdHRyaWJ1dGVfZ3JvdXAgPSB7Ci0JLm5hbWUJPSAicmM2X2RlY29kZXIiLAotCS5hdHRycwk9IGRlY29kZXJfYXR0cmlidXRlcywKLX07Ci0KLXN0YXRpYyBlbnVtIHJjNl9tb2RlIHJjNl9tb2RlKHN0cnVjdCBkZWNvZGVyX2RhdGEgKmRhdGEpIHsKIAlzd2l0Y2ggKGRhdGEtPmhlYWRlciAmIFJDNl9NT0RFX01BU0spIHsKIAljYXNlIDA6CiAJCXJldHVybiBSQzZfTU9ERV8wOwpAQCAtMTYyLDE2ICs3NywxMiBAQAogICovCiBzdGF0aWMgaW50IGlyX3JjNl9kZWNvZGUoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBzdHJ1Y3QgaXJfcmF3X2V2ZW50IGV2KQogewotCXN0cnVjdCBkZWNvZGVyX2RhdGEgKmRhdGE7CiAJc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXRfZGV2KTsKKwlzdHJ1Y3QgcmM2X2RlYyAqZGF0YSA9ICZpcl9kZXYtPnJhdy0+cmM2OwogCXUzMiBzY2FuY29kZTsKIAl1OCB0b2dnbGU7CiAKLQlkYXRhID0gZ2V0X2RlY29kZXJfZGF0YShpcl9kZXYpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIWRhdGEtPmVuYWJsZWQpCisJaWYgKCEoaXJfZGV2LT5yYXctPmVuYWJsZWRfcHJvdG9jb2xzICYgSVJfVFlQRV9SQzYpKQogCQlyZXR1cm4gMDsKIAogCWlmIChJU19SRVNFVChldikpIHsKQEAgLTIyMywxMiArMTM0LDExIEBACiAJCWlmIChldi5wdWxzZSkKIAkJCWRhdGEtPmhlYWRlciB8PSAxOwogCQlkYXRhLT5jb3VudCsrOwotCQlkYXRhLT5wcmV2X2V2ID0gZXY7CiAJCWRhdGEtPnN0YXRlID0gU1RBVEVfSEVBREVSX0JJVF9FTkQ7CiAJCXJldHVybiAwOwogCiAJY2FzZSBTVEFURV9IRUFERVJfQklUX0VORDoKLQkJaWYgKCFpc190cmFuc2l0aW9uKCZldiwgJmRhdGEtPnByZXZfZXYpKQorCQlpZiAoIWlzX3RyYW5zaXRpb24oJmV2LCAmaXJfZGV2LT5yYXctPnByZXZfZXYpKQogCQkJYnJlYWs7CiAKIAkJaWYgKGRhdGEtPmNvdW50ID09IFJDNl9IRUFERVJfTkJJVFMpCkBAIC0yNDQsMTIgKzE1NCwxMSBAQAogCQkJYnJlYWs7CiAKIAkJZGF0YS0+dG9nZ2xlID0gZXYucHVsc2U7Ci0JCWRhdGEtPnByZXZfZXYgPSBldjsKIAkJZGF0YS0+c3RhdGUgPSBTVEFURV9UT0dHTEVfRU5EOwogCQlyZXR1cm4gMDsKIAogCWNhc2UgU1RBVEVfVE9HR0xFX0VORDoKLQkJaWYgKCFpc190cmFuc2l0aW9uKCZldiwgJmRhdGEtPnByZXZfZXYpIHx8CisJCWlmICghaXNfdHJhbnNpdGlvbigmZXYsICZpcl9kZXYtPnJhdy0+cHJldl9ldikgfHwKIAkJICAgICFnZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBSQzZfVE9HR0xFX0VORCwgUkM2X1VOSVQgLyAyKSkKIAkJCWJyZWFrOwogCkBAIC0yNTksNyArMTY4LDYgQEAKIAkJfQogCiAJCWRhdGEtPnN0YXRlID0gU1RBVEVfQk9EWV9CSVRfU1RBUlQ7Ci0JCWRhdGEtPnByZXZfZXYgPSBldjsKIAkJZGVjcmVhc2VfZHVyYXRpb24oJmV2LCBSQzZfVE9HR0xFX0VORCk7CiAJCWRhdGEtPmNvdW50ID0gMDsKIApAQCAtMjkxLDEzICsxOTksMTEgQEAKIAkJaWYgKGV2LnB1bHNlKQogCQkJZGF0YS0+Ym9keSB8PSAxOwogCQlkYXRhLT5jb3VudCsrOwotCQlkYXRhLT5wcmV2X2V2ID0gZXY7Ci0KIAkJZGF0YS0+c3RhdGUgPSBTVEFURV9CT0RZX0JJVF9FTkQ7CiAJCXJldHVybiAwOwogCiAJY2FzZSBTVEFURV9CT0RZX0JJVF9FTkQ6Ci0JCWlmICghaXNfdHJhbnNpdGlvbigmZXYsICZkYXRhLT5wcmV2X2V2KSkKKwkJaWYgKCFpc190cmFuc2l0aW9uKCZldiwgJmlyX2Rldi0+cmF3LT5wcmV2X2V2KSkKIAkJCWJyZWFrOwogCiAJCWlmIChkYXRhLT5jb3VudCA9PSBkYXRhLT53YW50ZWRfYml0cykKQEAgLTM0OCw1NCArMjU0LDkgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCBpcl9yYzZfcmVnaXN0ZXIoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KQotewotCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0X2Rldik7Ci0Jc3RydWN0IGRlY29kZXJfZGF0YSAqZGF0YTsKLQlpbnQgcmM7Ci0KLQlyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmaXJfZGV2LT5kZXYua29iaiwgJmRlY29kZXJfYXR0cmlidXRlX2dyb3VwKTsKLQlpZiAocmMgPCAwKQotCQlyZXR1cm4gcmM7Ci0KLQlkYXRhID0ga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpIHsKLQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZpcl9kZXYtPmRldi5rb2JqLCAmZGVjb2Rlcl9hdHRyaWJ1dGVfZ3JvdXApOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlkYXRhLT5pcl9kZXYgPSBpcl9kZXY7Ci0JZGF0YS0+ZW5hYmxlZCA9IDE7Ci0KLQlzcGluX2xvY2soJmRlY29kZXJfbG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmZGF0YS0+bGlzdCwgJmRlY29kZXJfbGlzdCk7Ci0Jc3Bpbl91bmxvY2soJmRlY29kZXJfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpcl9yYzZfdW5yZWdpc3RlcihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYpCi17Ci0Jc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXRfZGV2KTsKLQlzdGF0aWMgc3RydWN0IGRlY29kZXJfZGF0YSAqZGF0YTsKLQotCWRhdGEgPSBnZXRfZGVjb2Rlcl9kYXRhKGlyX2Rldik7Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm4gMDsKLQotCXN5c2ZzX3JlbW92ZV9ncm91cCgmaXJfZGV2LT5kZXYua29iaiwgJmRlY29kZXJfYXR0cmlidXRlX2dyb3VwKTsKLQotCXNwaW5fbG9jaygmZGVjb2Rlcl9sb2NrKTsKLQlsaXN0X2RlbCgmZGF0YS0+bGlzdCk7Ci0Jc3Bpbl91bmxvY2soJmRlY29kZXJfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHN0cnVjdCBpcl9yYXdfaGFuZGxlciByYzZfaGFuZGxlciA9IHsKKwkucHJvdG9jb2xzCT0gSVJfVFlQRV9SQzYsCiAJLmRlY29kZQkJPSBpcl9yYzZfZGVjb2RlLAotCS5yYXdfcmVnaXN0ZXIJPSBpcl9yYzZfcmVnaXN0ZXIsCi0JLnJhd191bnJlZ2lzdGVyCT0gaXJfcmM2X3VucmVnaXN0ZXIsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpcl9yYzZfZGVjb2RlX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIvaXItc29ueS1kZWNvZGVyLmMgYi9kcml2ZXJzL21lZGlhL0lSL2lyLXNvbnktZGVjb2Rlci5jCmluZGV4IDlmNDQwYzUuLmI5MDc0ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvSVIvaXItc29ueS1kZWNvZGVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9JUi9pci1zb255LWRlY29kZXIuYwpAQCAtMjMsMTAgKzIzLDYgQEAKICNkZWZpbmUgU09OWV9CSVRfU1BBQ0UJCSgxICogU09OWV9VTklUKQogI2RlZmluZSBTT05ZX1RSQUlMRVJfU1BBQ0UJKDEwICogU09OWV9VTklUKSAvKiBtaW5pbXVtICovCiAKLS8qIFVzZWQgdG8gcmVnaXN0ZXIgc29ueV9kZWNvZGVyIGNsaWVudHMgKi8KLXN0YXRpYyBMSVNUX0hFQUQoZGVjb2Rlcl9saXN0KTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZGVjb2Rlcl9sb2NrKTsKLQogZW51bSBzb255X3N0YXRlIHsKIAlTVEFURV9JTkFDVElWRSwKIAlTVEFURV9IRUFERVJfU1BBQ0UsCkBAIC0zNSw4NCArMzEsNiBAQAogCVNUQVRFX0ZJTklTSEVELAogfTsKIAotc3RydWN0IGRlY29kZXJfZGF0YSB7Ci0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0OwotCXN0cnVjdCBpcl9pbnB1dF9kZXYJKmlyX2RldjsKLQlpbnQJCQllbmFibGVkOjE7Ci0KLQkvKiBTdGF0ZSBtYWNoaW5lIGNvbnRyb2wgKi8KLQllbnVtIHNvbnlfc3RhdGUJCXN0YXRlOwotCXUzMgkJCXNvbnlfYml0czsKLQl1bnNpZ25lZAkJY291bnQ7Ci19OwotCi0KLS8qKgotICogZ2V0X2RlY29kZXJfZGF0YSgpCS0gZ2V0cyBkZWNvZGVyIGRhdGEKLSAqIEBpbnB1dF9kZXY6CWlucHV0IGRldmljZQotICoKLSAqIFJldHVybnMgdGhlIHN0cnVjdCBkZWNvZGVyX2RhdGEgdGhhdCBjb3JyZXNwb25kcyB0byBhIGRldmljZQotICovCi1zdGF0aWMgc3RydWN0IGRlY29kZXJfZGF0YSAqZ2V0X2RlY29kZXJfZGF0YShzdHJ1Y3QgIGlyX2lucHV0X2RldiAqaXJfZGV2KQotewotCXN0cnVjdCBkZWNvZGVyX2RhdGEgKmRhdGEgPSBOVUxMOwotCi0Jc3Bpbl9sb2NrKCZkZWNvZGVyX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGF0YSwgJmRlY29kZXJfbGlzdCwgbGlzdCkgewotCQlpZiAoZGF0YS0+aXJfZGV2ID09IGlyX2RldikKLQkJCWJyZWFrOwotCX0KLQlzcGluX3VubG9jaygmZGVjb2Rlcl9sb2NrKTsKLQlyZXR1cm4gZGF0YTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc3RvcmVfZW5hYmxlZChzdHJ1Y3QgZGV2aWNlICpkLAotCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbWF0dHIsCi0JCQkgICAgIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCSAgICAgc2l6ZV90IGxlbikKLXsKLQl1bnNpZ25lZCBsb25nIHZhbHVlOwotCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQlzdHJ1Y3QgZGVjb2Rlcl9kYXRhICpkYXRhID0gZ2V0X2RlY29kZXJfZGF0YShpcl9kZXYpOwotCi0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsdWUpIHx8IHZhbHVlID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkYXRhLT5lbmFibGVkID0gdmFsdWU7Ci0KLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgc3NpemVfdCBzaG93X2VuYWJsZWQoc3RydWN0IGRldmljZSAqZCwKLQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm1hdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwotCXN0cnVjdCBkZWNvZGVyX2RhdGEgKmRhdGEgPSBnZXRfZGVjb2Rlcl9kYXRhKGlyX2Rldik7Ci0KLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGRhdGEtPmVuYWJsZWQpCi0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjFcbiIpOwotCWVsc2UKLQlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4iKTsKLX0KLQotc3RhdGljIERFVklDRV9BVFRSKGVuYWJsZWQsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2VuYWJsZWQsIHN0b3JlX2VuYWJsZWQpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGVjb2Rlcl9hdHRyaWJ1dGVzW10gPSB7Ci0JJmRldl9hdHRyX2VuYWJsZWQuYXR0ciwKLQlOVUxMCi19OwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBkZWNvZGVyX2F0dHJpYnV0ZV9ncm91cCA9IHsKLQkubmFtZQk9ICJzb255X2RlY29kZXIiLAotCS5hdHRycwk9IGRlY29kZXJfYXR0cmlidXRlcywKLX07Ci0KIC8qKgogICogaXJfc29ueV9kZWNvZGUoKSAtIERlY29kZSBvbmUgU29ueSBwdWxzZSBvciBzcGFjZQogICogQGlucHV0X2RldjoJdGhlIHN0cnVjdCBpbnB1dF9kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCkBAIC0xMjIsMTYgKzQwLDEyIEBACiAgKi8KIHN0YXRpYyBpbnQgaXJfc29ueV9kZWNvZGUoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBzdHJ1Y3QgaXJfcmF3X2V2ZW50IGV2KQogewotCXN0cnVjdCBkZWNvZGVyX2RhdGEgKmRhdGE7CiAJc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXRfZGV2KTsKKwlzdHJ1Y3Qgc29ueV9kZWMgKmRhdGEgPSAmaXJfZGV2LT5yYXctPnNvbnk7CiAJdTMyIHNjYW5jb2RlOwogCXU4IGRldmljZSwgc3ViZGV2aWNlLCBmdW5jdGlvbjsKIAotCWRhdGEgPSBnZXRfZGVjb2Rlcl9kYXRhKGlyX2Rldik7Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghZGF0YS0+ZW5hYmxlZCkKKwlpZiAoIShpcl9kZXYtPnJhdy0+ZW5hYmxlZF9wcm90b2NvbHMgJiBJUl9UWVBFX1NPTlkpKQogCQlyZXR1cm4gMDsKIAogCWlmIChJU19SRVNFVChldikpIHsKQEAgLTE3Miw5ICs4Niw5IEBACiAJCWlmICghZXYucHVsc2UpCiAJCQlicmVhazsKIAotCQlkYXRhLT5zb255X2JpdHMgPDw9IDE7CisJCWRhdGEtPmJpdHMgPDw9IDE7CiAJCWlmIChlcV9tYXJnaW4oZXYuZHVyYXRpb24sIFNPTllfQklUXzFfUFVMU0UsIFNPTllfVU5JVCAvIDIpKQotCQkJZGF0YS0+c29ueV9iaXRzIHw9IDE7CisJCQlkYXRhLT5iaXRzIHw9IDE7CiAJCWVsc2UgaWYgKCFlcV9tYXJnaW4oZXYuZHVyYXRpb24sIFNPTllfQklUXzBfUFVMU0UsIFNPTllfVU5JVCAvIDIpKQogCQkJYnJlYWs7CiAKQEAgLTIwOCwxOSArMTIyLDE5IEBACiAKIAkJc3dpdGNoIChkYXRhLT5jb3VudCkgewogCQljYXNlIDEyOgotCQkJZGV2aWNlICAgID0gYml0cmV2OCgoZGF0YS0+c29ueV9iaXRzIDw8ICAzKSAmIDB4RjgpOworCQkJZGV2aWNlICAgID0gYml0cmV2OCgoZGF0YS0+Yml0cyA8PCAgMykgJiAweEY4KTsKIAkJCXN1YmRldmljZSA9IDA7Ci0JCQlmdW5jdGlvbiAgPSBiaXRyZXY4KChkYXRhLT5zb255X2JpdHMgPj4gIDQpICYgMHhGRSk7CisJCQlmdW5jdGlvbiAgPSBiaXRyZXY4KChkYXRhLT5iaXRzID4+ICA0KSAmIDB4RkUpOwogCQkJYnJlYWs7CiAJCWNhc2UgMTU6Ci0JCQlkZXZpY2UgICAgPSBiaXRyZXY4KChkYXRhLT5zb255X2JpdHMgPj4gIDApICYgMHhGRik7CisJCQlkZXZpY2UgICAgPSBiaXRyZXY4KChkYXRhLT5iaXRzID4+ICAwKSAmIDB4RkYpOwogCQkJc3ViZGV2aWNlID0gMDsKLQkJCWZ1bmN0aW9uICA9IGJpdHJldjgoKGRhdGEtPnNvbnlfYml0cyA+PiAgNykgJiAweEZEKTsKKwkJCWZ1bmN0aW9uICA9IGJpdHJldjgoKGRhdGEtPmJpdHMgPj4gIDcpICYgMHhGRCk7CiAJCQlicmVhazsKIAkJY2FzZSAyMDoKLQkJCWRldmljZSAgICA9IGJpdHJldjgoKGRhdGEtPnNvbnlfYml0cyA+PiAgNSkgJiAweEY4KTsKLQkJCXN1YmRldmljZSA9IGJpdHJldjgoKGRhdGEtPnNvbnlfYml0cyA+PiAgMCkgJiAweEZGKTsKLQkJCWZ1bmN0aW9uICA9IGJpdHJldjgoKGRhdGEtPnNvbnlfYml0cyA+PiAxMikgJiAweEZFKTsKKwkJCWRldmljZSAgICA9IGJpdHJldjgoKGRhdGEtPmJpdHMgPj4gIDUpICYgMHhGOCk7CisJCQlzdWJkZXZpY2UgPSBiaXRyZXY4KChkYXRhLT5iaXRzID4+ICAwKSAmIDB4RkYpOworCQkJZnVuY3Rpb24gID0gYml0cmV2OCgoZGF0YS0+Yml0cyA+PiAxMikgJiAweEZFKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJSVJfZHByaW50aygxLCAiU29ueSBpbnZhbGlkIGJpdGNvdW50ICV1XG4iLCBkYXRhLT5jb3VudCk7CkBAIC0yNDEsNTQgKzE1NSw5IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgaXJfc29ueV9yZWdpc3RlcihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYpCi17Ci0Jc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXRfZGV2KTsKLQlzdHJ1Y3QgZGVjb2Rlcl9kYXRhICpkYXRhOwotCWludCByYzsKLQotCXJjID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZpcl9kZXYtPmRldi5rb2JqLCAmZGVjb2Rlcl9hdHRyaWJ1dGVfZ3JvdXApOwotCWlmIChyYyA8IDApCi0JCXJldHVybiByYzsKLQotCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkgewotCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmlyX2Rldi0+ZGV2LmtvYmosICZkZWNvZGVyX2F0dHJpYnV0ZV9ncm91cCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWRhdGEtPmlyX2RldiA9IGlyX2RldjsKLQlkYXRhLT5lbmFibGVkID0gMTsKLQotCXNwaW5fbG9jaygmZGVjb2Rlcl9sb2NrKTsKLQlsaXN0X2FkZF90YWlsKCZkYXRhLT5saXN0LCAmZGVjb2Rlcl9saXN0KTsKLQlzcGluX3VubG9jaygmZGVjb2Rlcl9sb2NrKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlyX3NvbnlfdW5yZWdpc3RlcihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYpCi17Ci0Jc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXRfZGV2KTsKLQlzdGF0aWMgc3RydWN0IGRlY29kZXJfZGF0YSAqZGF0YTsKLQotCWRhdGEgPSBnZXRfZGVjb2Rlcl9kYXRhKGlyX2Rldik7Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm4gMDsKLQotCXN5c2ZzX3JlbW92ZV9ncm91cCgmaXJfZGV2LT5kZXYua29iaiwgJmRlY29kZXJfYXR0cmlidXRlX2dyb3VwKTsKLQotCXNwaW5fbG9jaygmZGVjb2Rlcl9sb2NrKTsKLQlsaXN0X2RlbCgmZGF0YS0+bGlzdCk7Ci0Jc3Bpbl91bmxvY2soJmRlY29kZXJfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHN0cnVjdCBpcl9yYXdfaGFuZGxlciBzb255X2hhbmRsZXIgPSB7CisJLnByb3RvY29scwk9IElSX1RZUEVfU09OWSwKIAkuZGVjb2RlCQk9IGlyX3NvbnlfZGVjb2RlLAotCS5yYXdfcmVnaXN0ZXIJPSBpcl9zb255X3JlZ2lzdGVyLAotCS5yYXdfdW5yZWdpc3Rlcgk9IGlyX3NvbnlfdW5yZWdpc3RlciwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGlyX3NvbnlfZGVjb2RlX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIvaXItc3lzZnMuYyBiL2RyaXZlcnMvbWVkaWEvSVIvaXItc3lzZnMuYwppbmRleCAyMDk4ZGQxLi42MjczMDQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2lyLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9JUi9pci1zeXNmcy5jCkBAIC0zMywxMjUgKzMzLDE3MiBAQAogCS5kZXZub2RlCT0gaXJfZGV2bm9kZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgeworCXU2NAl0eXBlOworCWNoYXIJKm5hbWU7Cit9IHByb3RvX25hbWVzW10gPSB7CisJeyBJUl9UWVBFX1VOS05PV04sCSJ1bmtub3duIgl9LAorCXsgSVJfVFlQRV9SQzUsCQkicmMtNSIJCX0sCisJeyBJUl9UWVBFX05FQywJCSJuZWMiCQl9LAorCXsgSVJfVFlQRV9SQzYsCQkicmMtNiIJCX0sCisJeyBJUl9UWVBFX0pWQywJCSJqdmMiCQl9LAorCXsgSVJfVFlQRV9TT05ZLAkJInNvbnkiCQl9LAorCXsgSVJfVFlQRV9MSVJDLAkJImxpcmMiCQl9LAorfTsKKworI2RlZmluZSBQUk9UT19OT05FCSJub25lIgorCiAvKioKLSAqIHNob3dfcHJvdG9jb2woKSAtIHNob3dzIHRoZSBjdXJyZW50IElSIHByb3RvY29sCisgKiBzaG93X3Byb3RvY29scygpIC0gc2hvd3MgdGhlIGN1cnJlbnQgSVIgcHJvdG9jb2wocykKICAqIEBkOgkJdGhlIGRldmljZSBkZXNjcmlwdG9yCiAgKiBAbWF0dHI6CXRoZSBkZXZpY2UgYXR0cmlidXRlIHN0cnVjdCAodW51c2VkKQogICogQGJ1ZjoJYSBwb2ludGVyIHRvIHRoZSBvdXRwdXQgYnVmZmVyCiAgKgotICogVGhpcyByb3V0aW5lIGlzIGEgY2FsbGJhY2sgcm91dGluZSBmb3IgaW5wdXQgcmVhZCB0aGUgSVIgcHJvdG9jb2wgdHlwZS4KLSAqIGl0IGlzIHRyaWdnZWQgYnkgcmVhZGluZyAvc3lzL2NsYXNzL3JjL3JjPy9jdXJyZW50X3Byb3RvY29sLgotICogSXQgcmV0dXJucyB0aGUgcHJvdG9jb2wgbmFtZSwgYXMgdW5kZXJzdG9vZCBieSB0aGUgZHJpdmVyLgorICogVGhpcyByb3V0aW5lIGlzIGEgY2FsbGJhY2sgcm91dGluZSBmb3IgaW5wdXQgcmVhZCB0aGUgSVIgcHJvdG9jb2wgdHlwZShzKS4KKyAqIGl0IGlzIHRyaWdnZWQgYnkgcmVhZGluZyAvc3lzL2NsYXNzL3JjL3JjPy9wcm90b2NvbHMuCisgKiBJdCByZXR1cm5zIHRoZSBwcm90b2NvbCBuYW1lcyBvZiBzdXBwb3J0ZWQgcHJvdG9jb2xzLgorICogRW5hYmxlZCBwcm90b2NvbHMgYXJlIHByaW50ZWQgaW4gYnJhY2tldHMuCiAgKi8KLXN0YXRpYyBzc2l6ZV90IHNob3dfcHJvdG9jb2woc3RydWN0IGRldmljZSAqZCwKLQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm1hdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X3Byb3RvY29scyhzdHJ1Y3QgZGV2aWNlICpkLAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm1hdHRyLCBjaGFyICpidWYpCiB7Ci0JY2hhciAqczsKIAlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7Ci0JdTY0IGlyX3R5cGUgPSBpcl9kZXYtPnJjX3RhYi5pcl90eXBlOworCXU2NCBhbGxvd2VkLCBlbmFibGVkOworCWNoYXIgKnRtcCA9IGJ1ZjsKKwlpbnQgaTsKIAotCUlSX2RwcmludGsoMSwgIkN1cnJlbnQgcHJvdG9jb2wgaXMgJWxsZFxuIiwgKGxvbmcgbG9uZylpcl90eXBlKTsKKwlpZiAoaXJfZGV2LT5wcm9wcy0+ZHJpdmVyX3R5cGUgPT0gUkNfRFJJVkVSX1NDQU5DT0RFKSB7CisJCWVuYWJsZWQgPSBpcl9kZXYtPnJjX3RhYi5pcl90eXBlOworCQlhbGxvd2VkID0gaXJfZGV2LT5wcm9wcy0+YWxsb3dlZF9wcm90b3M7CisJfSBlbHNlIHsKKwkJZW5hYmxlZCA9IGlyX2Rldi0+cmF3LT5lbmFibGVkX3Byb3RvY29sczsKKwkJYWxsb3dlZCA9IGlyX3Jhd19nZXRfYWxsb3dlZF9wcm90b2NvbHMoKTsKKwl9CiAKLQkvKiBGSVhNRTogZG9lc24ndCBzdXBwb3J0IG11bHRpcGxlIHByb3RvY29scyBhdCB0aGUgc2FtZSB0aW1lICovCi0JaWYgKGlyX3R5cGUgPT0gSVJfVFlQRV9VTktOT1dOKQotCQlzID0gIlVua25vd24iOwotCWVsc2UgaWYgKGlyX3R5cGUgPT0gSVJfVFlQRV9SQzUpCi0JCXMgPSAicmMtNSI7Ci0JZWxzZSBpZiAoaXJfdHlwZSA9PSBJUl9UWVBFX05FQykKLQkJcyA9ICJuZWMiOwotCWVsc2UgaWYgKGlyX3R5cGUgPT0gSVJfVFlQRV9SQzYpCi0JCXMgPSAicmM2IjsKLQllbHNlIGlmIChpcl90eXBlID09IElSX1RZUEVfSlZDKQotCQlzID0gImp2YyI7Ci0JZWxzZSBpZiAoaXJfdHlwZSA9PSBJUl9UWVBFX1NPTlkpCi0JCXMgPSAic29ueSI7Ci0JZWxzZQotCQlzID0gIm90aGVyIjsKKwlJUl9kcHJpbnRrKDEsICJhbGxvd2VkIC0gMHglbGx4LCBlbmFibGVkIC0gMHglbGx4XG4iLAorCQkgICAobG9uZyBsb25nKWFsbG93ZWQsCisJCSAgIChsb25nIGxvbmcpZW5hYmxlZCk7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgcyk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJvdG9fbmFtZXMpOyBpKyspIHsKKwkJaWYgKGFsbG93ZWQgJiBlbmFibGVkICYgcHJvdG9fbmFtZXNbaV0udHlwZSkKKwkJCXRtcCArPSBzcHJpbnRmKHRtcCwgIlslc10gIiwgcHJvdG9fbmFtZXNbaV0ubmFtZSk7CisJCWVsc2UgaWYgKGFsbG93ZWQgJiBwcm90b19uYW1lc1tpXS50eXBlKQorCQkJdG1wICs9IHNwcmludGYodG1wLCAiJXMgIiwgcHJvdG9fbmFtZXNbaV0ubmFtZSk7CisJfQorCisJaWYgKHRtcCAhPSBidWYpCisJCXRtcC0tOworCSp0bXAgPSAnXG4nOworCXJldHVybiB0bXAgKyAxIC0gYnVmOwogfQogCiAvKioKLSAqIHN0b3JlX3Byb3RvY29sKCkgLSBzaG93cyB0aGUgY3VycmVudCBJUiBwcm90b2NvbAorICogc3RvcmVfcHJvdG9jb2xzKCkgLSBjaGFuZ2VzIHRoZSBjdXJyZW50IElSIHByb3RvY29sKHMpCiAgKiBAZDoJCXRoZSBkZXZpY2UgZGVzY3JpcHRvcgogICogQG1hdHRyOgl0aGUgZGV2aWNlIGF0dHJpYnV0ZSBzdHJ1Y3QgKHVudXNlZCkKICAqIEBidWY6CWEgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyCiAgKiBAbGVuOglsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlcgogICoKICAqIFRoaXMgcm91dGluZSBpcyBhIGNhbGxiYWNrIHJvdXRpbmUgZm9yIGNoYW5naW5nIHRoZSBJUiBwcm90b2NvbCB0eXBlLgotICogaXQgaXMgdHJpZ2dlZCBieSByZWFkaW5nIC9zeXMvY2xhc3MvcmMvcmM/L2N1cnJlbnRfcHJvdG9jb2wuCi0gKiBJdCBjaGFuZ2VzIHRoZSBJUiB0aGUgcHJvdG9jb2wgbmFtZSwgaWYgdGhlIElSIHR5cGUgaXMgcmVjb2duaXplZAotICogYnkgdGhlIGRyaXZlci4KLSAqIElmIGFuIHVua25vd24gcHJvdG9jb2wgbmFtZSBpcyB1c2VkLCByZXR1cm5zIC1FSU5WQUwuCisgKiBJdCBpcyB0cmlnZ2VkIGJ5IHdyaXRpbmcgdG8gL3N5cy9jbGFzcy9yYy9yYz8vcHJvdG9jb2xzLgorICogV3JpdGluZyAiK3Byb3RvIiB3aWxsIGFkZCBhIHByb3RvY29sIHRvIHRoZSBsaXN0IG9mIGVuYWJsZWQgcHJvdG9jb2xzLgorICogV3JpdGluZyAiLXByb3RvIiB3aWxsIHJlbW92ZSBhIHByb3RvY29sIGZyb20gdGhlIGxpc3Qgb2YgZW5hYmxlZCBwcm90b2NvbHMuCisgKiBXcml0aW5nICJwcm90byIgd2lsbCBlbmFibGUgb25seSAicHJvdG8iLgorICogV3JpdGluZyAibm9uZSIgd2lsbCBkaXNhYmxlIGFsbCBwcm90b2NvbHMuCisgKiBSZXR1cm5zIC1FSU5WQUwgaWYgYW4gaW52YWxpZCBwcm90b2NvbCBjb21iaW5hdGlvbiBvciB1bmtub3duIHByb3RvY29sIG5hbWUKKyAqIGlzIHVzZWQsIG90aGVyd2lzZSBAbGVuLgogICovCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9wcm90b2NvbChzdHJ1Y3QgZGV2aWNlICpkLAotCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm1hdHRyLAotCQkJICAgICAgY29uc3QgY2hhciAqZGF0YSwKLQkJCSAgICAgIHNpemVfdCBsZW4pCitzdGF0aWMgc3NpemVfdCBzdG9yZV9wcm90b2NvbHMoc3RydWN0IGRldmljZSAqZCwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbWF0dHIsCisJCQkgICAgICAgY29uc3QgY2hhciAqZGF0YSwKKwkJCSAgICAgICBzaXplX3QgbGVuKQogewogCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQl1NjQgaXJfdHlwZSA9IDA7Ci0JaW50IHJjID0gLUVJTlZBTDsKKwlib29sIGVuYWJsZSwgZGlzYWJsZTsKKwljb25zdCBjaGFyICp0bXA7CisJdTY0IHR5cGU7CisJdTY0IG1hc2s7CisJaW50IHJjLCBpLCBjb3VudCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQljaGFyICpidWY7CiAKLQl3aGlsZSAoKGJ1ZiA9IHN0cnNlcCgoY2hhciAqKikgJmRhdGEsICIgXG4iKSkgIT0gTlVMTCkgewotCQlpZiAoIXN0cmNhc2VjbXAoYnVmLCAicmMtNSIpIHx8ICFzdHJjYXNlY21wKGJ1ZiwgInJjNSIpKQotCQkJaXJfdHlwZSB8PSBJUl9UWVBFX1JDNTsKLQkJaWYgKCFzdHJjYXNlY21wKGJ1ZiwgIm5lYyIpKQotCQkJaXJfdHlwZSB8PSBJUl9UWVBFX05FQzsKLQkJaWYgKCFzdHJjYXNlY21wKGJ1ZiwgImp2YyIpKQotCQkJaXJfdHlwZSB8PSBJUl9UWVBFX0pWQzsKLQkJaWYgKCFzdHJjYXNlY21wKGJ1ZiwgInNvbnkiKSkKLQkJCWlyX3R5cGUgfD0gSVJfVFlQRV9TT05ZOworCWlmIChpcl9kZXYtPnByb3BzLT5kcml2ZXJfdHlwZSA9PSBSQ19EUklWRVJfU0NBTkNPREUpCisJCXR5cGUgPSBpcl9kZXYtPnJjX3RhYi5pcl90eXBlOworCWVsc2UKKwkJdHlwZSA9IGlyX2Rldi0+cmF3LT5lbmFibGVkX3Byb3RvY29sczsKKworCXdoaWxlICgodG1wID0gc3Ryc2VwKChjaGFyICoqKSAmZGF0YSwgIiBcbiIpKSAhPSBOVUxMKSB7CisJCWlmICghKnRtcCkKKwkJCWJyZWFrOworCisJCWlmICgqdG1wID09ICcrJykgeworCQkJZW5hYmxlID0gdHJ1ZTsKKwkJCWRpc2FibGUgPSBmYWxzZTsKKwkJCXRtcCsrOworCQl9IGVsc2UgaWYgKCp0bXAgPT0gJy0nKSB7CisJCQllbmFibGUgPSBmYWxzZTsKKwkJCWRpc2FibGUgPSB0cnVlOworCQkJdG1wKys7CisJCX0gZWxzZSB7CisJCQllbmFibGUgPSBmYWxzZTsKKwkJCWRpc2FibGUgPSBmYWxzZTsKKwkJfQorCisJCWlmICghZW5hYmxlICYmICFkaXNhYmxlICYmICFzdHJuY2FzZWNtcCh0bXAsIFBST1RPX05PTkUsIHNpemVvZihQUk9UT19OT05FKSkpIHsKKwkJCXRtcCArPSBzaXplb2YoUFJPVE9fTk9ORSk7CisJCQltYXNrID0gMDsKKwkJCWNvdW50Kys7CisJCX0gZWxzZSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcm90b19uYW1lcyk7IGkrKykgeworCQkJCWlmICghc3RybmNhc2VjbXAodG1wLCBwcm90b19uYW1lc1tpXS5uYW1lLCBzdHJsZW4ocHJvdG9fbmFtZXNbaV0ubmFtZSkpKSB7CisJCQkJCXRtcCArPSBzdHJsZW4ocHJvdG9fbmFtZXNbaV0ubmFtZSk7CisJCQkJCW1hc2sgPSBwcm90b19uYW1lc1tpXS50eXBlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoaSA9PSBBUlJBWV9TSVpFKHByb3RvX25hbWVzKSkgeworCQkJCUlSX2RwcmludGsoMSwgIlVua25vd24gcHJvdG9jb2w6ICclcydcbiIsIHRtcCk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQljb3VudCsrOworCQl9CisKKwkJaWYgKGVuYWJsZSkKKwkJCXR5cGUgfD0gbWFzazsKKwkJZWxzZSBpZiAoZGlzYWJsZSkKKwkJCXR5cGUgJj0gfm1hc2s7CisJCWVsc2UKKwkJCXR5cGUgPSBtYXNrOwogCX0KIAotCWlmICghaXJfdHlwZSkgewotCQlJUl9kcHJpbnRrKDEsICJVbmtub3duIHByb3RvY29sXG4iKTsKKwlpZiAoIWNvdW50KSB7CisJCUlSX2RwcmludGsoMSwgIlByb3RvY29sIG5vdCBzcGVjaWZpZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoaXJfZGV2LT5wcm9wcyAmJiBpcl9kZXYtPnByb3BzLT5jaGFuZ2VfcHJvdG9jb2wpCisJaWYgKGlyX2Rldi0+cHJvcHMgJiYgaXJfZGV2LT5wcm9wcy0+Y2hhbmdlX3Byb3RvY29sKSB7CiAJCXJjID0gaXJfZGV2LT5wcm9wcy0+Y2hhbmdlX3Byb3RvY29sKGlyX2Rldi0+cHJvcHMtPnByaXYsCi0JCQkJCQkgICAgaXJfdHlwZSk7Ci0KLQlpZiAocmMgPCAwKSB7Ci0JCUlSX2RwcmludGsoMSwgIkVycm9yIHNldHRpbmcgcHJvdG9jb2wgdG8gJWxsZFxuIiwKLQkJCSAgIChsb25nIGxvbmcpaXJfdHlwZSk7Ci0JCXJldHVybiAtRUlOVkFMOworCQkJCQkJICAgIHR5cGUpOworCQlpZiAocmMgPCAwKSB7CisJCQlJUl9kcHJpbnRrKDEsICJFcnJvciBzZXR0aW5nIHByb3RvY29scyB0byAweCVsbHhcbiIsCisJCQkJICAgKGxvbmcgbG9uZyl0eXBlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJfQogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlyX2Rldi0+cmNfdGFiLmxvY2ssIGZsYWdzKTsKLQlpcl9kZXYtPnJjX3RhYi5pcl90eXBlID0gaXJfdHlwZTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcl9kZXYtPnJjX3RhYi5sb2NrLCBmbGFncyk7CisJaWYgKGlyX2Rldi0+cHJvcHMtPmRyaXZlcl90eXBlID09IFJDX0RSSVZFUl9TQ0FOQ09ERSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJfZGV2LT5yY190YWIubG9jaywgZmxhZ3MpOworCQlpcl9kZXYtPnJjX3RhYi5pcl90eXBlID0gdHlwZTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJfZGV2LT5yY190YWIubG9jaywgZmxhZ3MpOworCX0gZWxzZSB7CisJCWlyX2Rldi0+cmF3LT5lbmFibGVkX3Byb3RvY29scyA9IHR5cGU7CisJfQogCi0JSVJfZHByaW50aygxLCAiQ3VycmVudCBwcm90b2NvbChzKSBpcyhhcmUpICVsbGRcbiIsCi0JCSAgIChsb25nIGxvbmcpaXJfdHlwZSk7CisJSVJfZHByaW50aygxLCAiQ3VycmVudCBwcm90b2NvbChzKTogMHglbGx4XG4iLAorCQkgICAobG9uZyBsb25nKXR5cGUpOwogCiAJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd19zdXBwb3J0ZWRfcHJvdG9jb2xzKHN0cnVjdCBkZXZpY2UgKmQsCi0JCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICptYXR0ciwgY2hhciAqYnVmKQotewotCWNoYXIgKm9yZ2J1ZiA9IGJ1ZjsKLQlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7Ci0KLQkvKiBGSVhNRTogZG9lc24ndCBzdXBwb3J0IG11bHRpcGxlIHByb3RvY29scyBhdCB0aGUgc2FtZSB0aW1lICovCi0JaWYgKGlyX2Rldi0+cHJvcHMtPmFsbG93ZWRfcHJvdG9zID09IElSX1RZUEVfVU5LTk9XTikKLQkJYnVmICs9IHNwcmludGYoYnVmLCAidW5rbm93biAiKTsKLQlpZiAoaXJfZGV2LT5wcm9wcy0+YWxsb3dlZF9wcm90b3MgJiBJUl9UWVBFX1JDNSkKLQkJYnVmICs9IHNwcmludGYoYnVmLCAicmMtNSAiKTsKLQlpZiAoaXJfZGV2LT5wcm9wcy0+YWxsb3dlZF9wcm90b3MgJiBJUl9UWVBFX05FQykKLQkJYnVmICs9IHNwcmludGYoYnVmLCAibmVjICIpOwotCWlmIChidWYgPT0gb3JnYnVmKQotCQlidWYgKz0gc3ByaW50ZihidWYsICJvdGhlciAiKTsKLQotCWJ1ZiArPSBzcHJpbnRmKGJ1ZiAtIDEsICJcbiIpOwotCi0JcmV0dXJuIGJ1ZiAtIG9yZ2J1ZjsKLX0KLQogI2RlZmluZSBBRERfSE9UUExVR19WQVIoZm10LCB2YWwuLi4pCQkJCQlcCiAJZG8gewkJCQkJCQkJXAogCQlpbnQgZXJyID0gYWRkX3VldmVudF92YXIoZW52LCBmbXQsIHZhbCk7CQlcCkBAIC0xNTksNyArMjA2LDcgQEAKIAkJCXJldHVybiBlcnI7CQkJCQlcCiAJfSB3aGlsZSAoMCkKIAotc3RhdGljIGludCBpcl9kZXZfdWV2ZW50KHN0cnVjdCBkZXZpY2UgKmRldmljZSwgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KQorc3RhdGljIGludCByY19kZXZfdWV2ZW50KHN0cnVjdCBkZXZpY2UgKmRldmljZSwgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KQogewogCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXZpY2UpOwogCkBAIC0xNzQsMzQgKzIyMSwyNiBAQAogLyoKICAqIFN0YXRpYyBkZXZpY2UgYXR0cmlidXRlIHN0cnVjdCB3aXRoIHRoZSBzeXNmcyBhdHRyaWJ1dGVzIGZvciBJUidzCiAgKi8KLXN0YXRpYyBERVZJQ0VfQVRUUihwcm90b2NvbCwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgIHNob3dfcHJvdG9jb2wsIHN0b3JlX3Byb3RvY29sKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihwcm90b2NvbHMsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICBzaG93X3Byb3RvY29scywgc3RvcmVfcHJvdG9jb2xzKTsKIAotc3RhdGljIERFVklDRV9BVFRSKHN1cHBvcnRlZF9wcm90b2NvbHMsIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICBzaG93X3N1cHBvcnRlZF9wcm90b2NvbHMsIE5VTEwpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaXJfaHdfZGV2X2F0dHJzW10gPSB7Ci0JJmRldl9hdHRyX3Byb3RvY29sLmF0dHIsCi0JJmRldl9hdHRyX3N1cHBvcnRlZF9wcm90b2NvbHMuYXR0ciwKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpyY19kZXZfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfcHJvdG9jb2xzLmF0dHIsCiAJTlVMTCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGlyX2h3X2Rldl9hdHRyX2dycCA9IHsKLQkuYXR0cnMJPSBpcl9od19kZXZfYXR0cnMsCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCByY19kZXZfYXR0cl9ncnAgPSB7CisJLmF0dHJzCT0gcmNfZGV2X2F0dHJzLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmlyX2h3X2Rldl9hdHRyX2dyb3Vwc1tdID0gewotCSZpcl9od19kZXZfYXR0cl9ncnAsCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqcmNfZGV2X2F0dHJfZ3JvdXBzW10gPSB7CisJJnJjX2Rldl9hdHRyX2dycCwKIAlOVUxMCiB9OwogCiBzdGF0aWMgc3RydWN0IGRldmljZV90eXBlIHJjX2Rldl90eXBlID0gewotCS5ncm91cHMJCT0gaXJfaHdfZGV2X2F0dHJfZ3JvdXBzLAotCS51ZXZlbnQJCT0gaXJfZGV2X3VldmVudCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX3R5cGUgaXJfcmF3X2Rldl90eXBlID0gewotCS51ZXZlbnQJCT0gaXJfZGV2X3VldmVudCwKKwkuZ3JvdXBzCQk9IHJjX2Rldl9hdHRyX2dyb3VwcywKKwkudWV2ZW50CQk9IHJjX2Rldl91ZXZlbnQsCiB9OwogCiAvKioKQEAgLTIyMSwxMSArMjYwLDcgQEAKIAlpZiAodW5saWtlbHkoZGV2bm8gPCAwKSkKIAkJcmV0dXJuIGRldm5vOwogCi0JaWYgKGlyX2Rldi0+cHJvcHMpIHsKLQkJaWYgKGlyX2Rldi0+cHJvcHMtPmRyaXZlcl90eXBlID09IFJDX0RSSVZFUl9TQ0FOQ09ERSkKLQkJCWlyX2Rldi0+ZGV2LnR5cGUgPSAmcmNfZGV2X3R5cGU7Ci0JfSBlbHNlCi0JCWlyX2Rldi0+ZGV2LnR5cGUgPSAmaXJfcmF3X2Rldl90eXBlOworCWlyX2Rldi0+ZGV2LnR5cGUgPSAmcmNfZGV2X3R5cGU7CiAKIAlpcl9kZXYtPmRldi5jbGFzcyA9ICZpcl9pbnB1dF9jbGFzczsKIAlpcl9kZXYtPmRldi5wYXJlbnQgPSBpbnB1dF9kZXYtPmRldi5wYXJlbnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvTWFrZWZpbGUKaW5kZXggYWVhNjQ5Zi4uY2JlZTA2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9NYWtlZmlsZQpAQCAtMTQsNiArMTQsOCBAQAogCQkJcmMtYnVkZ2V0LWNpLW9sZC5vIFwKIAkJCXJjLWNpbmVyZ3ktMTQwMC5vIFwKIAkJCXJjLWNpbmVyZ3kubyBcCisJCQlyYy1kaWIwNzAwLW5lYy5vIFwKKwkJCXJjLWRpYjA3MDAtcmM1Lm8gXAogCQkJcmMtZG0xMTA1LW5lYy5vIFwKIAkJCXJjLWRudHYtbGl2ZS1kdmItdC5vIFwKIAkJCXJjLWRudHYtbGl2ZS1kdmJ0LXByby5vIFwKQEAgLTM3LDYgKzM5LDcgQEAKIAkJCXJjLWthaW9teS5vIFwKIAkJCXJjLWt3b3JsZC0zMTV1Lm8gXAogCQkJcmMta3dvcmxkLXBsdXMtdHYtYW5hbG9nLm8gXAorCQkJcmMtbGlyYy5vIFwKIAkJCXJjLW1hbmxpLm8gXAogCQkJcmMtbXNpLXR2YW55d2hlcmUubyBcCiAJCQlyYy1tc2ktdHZhbnl3aGVyZS1wbHVzLm8gXApAQCAtNTcsNiArNjAsNyBAQAogCQkJcmMtcHY5NTEubyBcCiAJCQlyYy1yYzUtaGF1cHBhdWdlLW5ldy5vIFwKIAkJCXJjLXJjNS10di5vIFwKKwkJCXJjLXJjNi1tY2UubyBcCiAJCQlyYy1yZWFsLWF1ZGlvLTIyMC0zMi1rZXlzLm8gXAogCQkJcmMtdGJzLW5lYy5vIFwKIAkJCXJjLXRlcnJhdGVjLWNpbmVyZ3kteHMubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtZGliMDcwMC1uZWMuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1kaWIwNzAwLW5lYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMTgzMjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtZGliMDcwMC1uZWMuYwpAQCAtMCwwICsxLDEyNCBAQAorLyogcmMtZHZiMDcwMC1iaWcuYyAtIEtleXRhYmxlIGZvciBkZXZpY2VzIGluIGR2YjA3MDAKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVE9ETzogVGhpcyB0YWJsZSBpcyBhIHJlYWwgbWVzcywgYXMgaXQgbWVyZ2VzIFJDIGNvZGVzIGZyb20gc2V2ZXJhbAorICogZGV2aWNlcyBpbnRvIGEgYmlnIHRhYmxlLiBJdCBhbHNvIGhhcyBib3RoIFJDLTUgYW5kIE5FQyBjb2RlcyBpbnNpZGUuCisgKiBJdCBzaG91bGQgYmUgYnJva2VuIGludG8gc21hbGwgdGFibGVzLCBhbmQgdGhlIHByb3RvY29scyBzaG91bGQgcHJvcGVybHkKKyAqIGJlIGluZGVudGlmaWNhdGVkLgorICoKKyAqIFRoZSB0YWJsZSB3ZXJlIGltcG9ydGVkIGZyb20gZGliMDcwMF9kZXZpY2VzLmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgZGliMDcwMF9uZWNfdGFibGVbXSA9IHsKKwkvKiBLZXkgY29kZXMgZm9yIHRoZSBQaXhlbHZpZXcgU0JUVkQgcmVtb3RlICovCisJeyAweDg2MTMsIEtFWV9NVVRFIH0sCisJeyAweDg2MTIsIEtFWV9QT1dFUiB9LAorCXsgMHg4NjAxLCBLRVlfMSB9LAorCXsgMHg4NjAyLCBLRVlfMiB9LAorCXsgMHg4NjAzLCBLRVlfMyB9LAorCXsgMHg4NjA0LCBLRVlfNCB9LAorCXsgMHg4NjA1LCBLRVlfNSB9LAorCXsgMHg4NjA2LCBLRVlfNiB9LAorCXsgMHg4NjA3LCBLRVlfNyB9LAorCXsgMHg4NjA4LCBLRVlfOCB9LAorCXsgMHg4NjA5LCBLRVlfOSB9LAorCXsgMHg4NjAwLCBLRVlfMCB9LAorCXsgMHg4NjBkLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDg2MTksIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHg4NjEwLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4ODYwYywgS0VZX1ZPTFVNRURPV04gfSwKKworCXsgMHg4NjBhLCBLRVlfQ0FNRVJBIH0sCisJeyAweDg2MGIsIEtFWV9aT09NIH0sCisJeyAweDg2MWIsIEtFWV9CQUNLU1BBQ0UgfSwKKwl7IDB4ODYxNSwgS0VZX0VOVEVSIH0sCisKKwl7IDB4ODYxZCwgS0VZX1VQIH0sCisJeyAweDg2MWUsIEtFWV9ET1dOIH0sCisJeyAweDg2MGUsIEtFWV9MRUZUIH0sCisJeyAweDg2MGYsIEtFWV9SSUdIVCB9LAorCisJeyAweDg2MTgsIEtFWV9SRUNPUkQgfSwKKwl7IDB4ODYxYSwgS0VZX1NUT1AgfSwKKworCS8qIEtleSBjb2RlcyBmb3IgdGhlIEV2b2x1dGVQQyBUVldheSsgcmVtb3RlICovCisJeyAweDdhMDAsIEtFWV9NRU5VIH0sCisJeyAweDdhMDEsIEtFWV9SRUNPUkQgfSwKKwl7IDB4N2EwMiwgS0VZX1BMQVkgfSwKKwl7IDB4N2EwMywgS0VZX1NUT1AgfSwKKwl7IDB4N2ExMCwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHg3YTExLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4N2ExMiwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDdhMTMsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDdhNDAsIEtFWV9QT1dFUiB9LAorCXsgMHg3YTQxLCBLRVlfTVVURSB9LAorCisJLyogS2V5IGNvZGVzIGZvciB0aGUgRWxnYXRvIEV5ZVRWIERpdmVyc2l0eSBzaWx2ZXIgcmVtb3RlICovCisJeyAweDQ1MDEsIEtFWV9QT1dFUiB9LAorCXsgMHg0NTAyLCBLRVlfTVVURSB9LAorCXsgMHg0NTAzLCBLRVlfMSB9LAorCXsgMHg0NTA0LCBLRVlfMiB9LAorCXsgMHg0NTA1LCBLRVlfMyB9LAorCXsgMHg0NTA2LCBLRVlfNCB9LAorCXsgMHg0NTA3LCBLRVlfNSB9LAorCXsgMHg0NTA4LCBLRVlfNiB9LAorCXsgMHg0NTA5LCBLRVlfNyB9LAorCXsgMHg0NTBhLCBLRVlfOCB9LAorCXsgMHg0NTBiLCBLRVlfOSB9LAorCXsgMHg0NTBjLCBLRVlfTEFTVCB9LAorCXsgMHg0NTBkLCBLRVlfMCB9LAorCXsgMHg0NTBlLCBLRVlfRU5URVIgfSwKKwl7IDB4NDUwZiwgS0VZX1JFRCB9LAorCXsgMHg0NTEwLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDQ1MTEsIEtFWV9HUkVFTiB9LAorCXsgMHg0NTEyLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHg0NTEzLCBLRVlfT0sgfSwKKwl7IDB4NDUxNCwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDQ1MTUsIEtFWV9ZRUxMT1cgfSwKKwl7IDB4NDUxNiwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDQ1MTcsIEtFWV9CTFVFIH0sCisJeyAweDQ1MTgsIEtFWV9MRUZUIH0sIC8qIFNraXAgYmFja3dhcmRzICovCisJeyAweDQ1MTksIEtFWV9QTEFZUEFVU0UgfSwKKwl7IDB4NDUxYSwgS0VZX1JJR0hUIH0sIC8qIFNraXAgZm9yd2FyZCAqLworCXsgMHg0NTFiLCBLRVlfUkVXSU5EIH0sCisJeyAweDQ1MWMsIEtFWV9MIH0sIC8qIExpdmUgKi8KKwl7IDB4NDUxZCwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDQ1MWUsIEtFWV9TVE9QIH0sIC8qICdSZXZlYWwnIGZvciBUZWxldGV4dCAqLworCXsgMHg0NTFmLCBLRVlfTUVOVSB9LCAvKiBLRVlfVEVYVCBmb3IgVGVsZXRleHQgKi8KKwl7IDB4NDU0MCwgS0VZX1JFQ09SRCB9LCAvKiBGb250ICdTaXplJyBmb3IgVGVsZXRleHQgKi8KKwl7IDB4NDU0MSwgS0VZX1NDUkVFTiB9LCAvKiAgRnVsbCBzY3JlZW4gdG9nZ2xlLCAnSG9sZCcgZm9yIFRlbGV0ZXh0ICovCisJeyAweDQ1NDIsIEtFWV9TRUxFQ1QgfSwgLyogU2VsZWN0IHZpZGVvIGlucHV0LCAnU2VsZWN0JyBmb3IgVGVsZXRleHQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIGRpYjA3MDBfbmVjX21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IGRpYjA3MDBfbmVjX3RhYmxlLAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoZGliMDcwMF9uZWNfdGFibGUpLAorCQkuaXJfdHlwZSA9IElSX1RZUEVfTkVDLAorCQkubmFtZSAgICA9IFJDX01BUF9ESUIwNzAwX05FQ19UQUJMRSwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcCh2b2lkKQoreworCXJldHVybiBpcl9yZWdpc3Rlcl9tYXAoJmRpYjA3MDBfbmVjX21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcCh2b2lkKQoreworCWlyX3VucmVnaXN0ZXJfbWFwKCZkaWIwNzAwX25lY19tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcCkKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1kaWIwNzAwLXJjNS5jIGIvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWRpYjA3MDAtcmM1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE0Nzk3YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1kaWIwNzAwLXJjNS5jCkBAIC0wLDAgKzEsMjM1IEBACisvKiByYy1kdmIwNzAwLWJpZy5jIC0gS2V5dGFibGUgZm9yIGRldmljZXMgaW4gZHZiMDcwMAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBUT0RPOiBUaGlzIHRhYmxlIGlzIGEgcmVhbCBtZXNzLCBhcyBpdCBtZXJnZXMgUkMgY29kZXMgZnJvbSBzZXZlcmFsCisgKiBkZXZpY2VzIGludG8gYSBiaWcgdGFibGUuIEl0IGFsc28gaGFzIGJvdGggUkMtNSBhbmQgTkVDIGNvZGVzIGluc2lkZS4KKyAqIEl0IHNob3VsZCBiZSBicm9rZW4gaW50byBzbWFsbCB0YWJsZXMsIGFuZCB0aGUgcHJvdG9jb2xzIHNob3VsZCBwcm9wZXJseQorICogYmUgaW5kZW50aWZpY2F0ZWQuCisgKgorICogVGhlIHRhYmxlIHdlcmUgaW1wb3J0ZWQgZnJvbSBkaWIwNzAwX2RldmljZXMuYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBkaWIwNzAwX3JjNV90YWJsZVtdID0geworCS8qIEtleSBjb2RlcyBmb3IgdGhlIHRpbnkgUGlubmFjbGUgcmVtb3RlKi8KKwl7IDB4MDcwMCwgS0VZX01VVEUgfSwKKwl7IDB4MDcwMSwgS0VZX01FTlUgfSwgLyogUGlubmFjbGUgbG9nbyAqLworCXsgMHgwNzM5LCBLRVlfUE9XRVIgfSwKKwl7IDB4MDcwMywgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDA3MDksIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDA3MDYsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MDcwYywgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDA3MGYsIEtFWV8xIH0sCisJeyAweDA3MTUsIEtFWV8yIH0sCisJeyAweDA3MTAsIEtFWV8zIH0sCisJeyAweDA3MTgsIEtFWV80IH0sCisJeyAweDA3MWIsIEtFWV81IH0sCisJeyAweDA3MWUsIEtFWV82IH0sCisJeyAweDA3MTEsIEtFWV83IH0sCisJeyAweDA3MjEsIEtFWV84IH0sCisJeyAweDA3MTIsIEtFWV85IH0sCisJeyAweDA3MjcsIEtFWV8wIH0sCisJeyAweDA3MjQsIEtFWV9TQ1JFRU4gfSwgLyogJ1NxdWFyZScga2V5ICovCisJeyAweDA3MmEsIEtFWV9URVhUIH0sICAgLyogJ1QnIGtleSAqLworCXsgMHgwNzJkLCBLRVlfUkVXSU5EIH0sCisJeyAweDA3MzAsIEtFWV9QTEFZIH0sCisJeyAweDA3MzMsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHgwNzM2LCBLRVlfUkVDT1JEIH0sCisJeyAweDA3M2MsIEtFWV9TVE9QIH0sCisJeyAweDA3M2YsIEtFWV9DQU5DRUwgfSwgLyogJz8nIGtleSAqLworCisJLyogS2V5IGNvZGVzIGZvciB0aGUgVGVycmF0ZWMgQ2luZXJneSBEVCBYUyBEaXZlcnNpdHksIHNpbWlsYXIgdG8gY2luZXJneVQyLmMgKi8KKwl7IDB4ZWIwMSwgS0VZX1BPV0VSIH0sCisJeyAweGViMDIsIEtFWV8xIH0sCisJeyAweGViMDMsIEtFWV8yIH0sCisJeyAweGViMDQsIEtFWV8zIH0sCisJeyAweGViMDUsIEtFWV80IH0sCisJeyAweGViMDYsIEtFWV81IH0sCisJeyAweGViMDcsIEtFWV82IH0sCisJeyAweGViMDgsIEtFWV83IH0sCisJeyAweGViMDksIEtFWV84IH0sCisJeyAweGViMGEsIEtFWV85IH0sCisJeyAweGViMGIsIEtFWV9WSURFTyB9LAorCXsgMHhlYjBjLCBLRVlfMCB9LAorCXsgMHhlYjBkLCBLRVlfUkVGUkVTSCB9LAorCXsgMHhlYjBmLCBLRVlfRVBHIH0sCisJeyAweGViMTAsIEtFWV9VUCB9LAorCXsgMHhlYjExLCBLRVlfTEVGVCB9LAorCXsgMHhlYjEyLCBLRVlfT0sgfSwKKwl7IDB4ZWIxMywgS0VZX1JJR0hUIH0sCisJeyAweGViMTQsIEtFWV9ET1dOIH0sCisJeyAweGViMTYsIEtFWV9JTkZPIH0sCisJeyAweGViMTcsIEtFWV9SRUQgfSwKKwl7IDB4ZWIxOCwgS0VZX0dSRUVOIH0sCisJeyAweGViMTksIEtFWV9ZRUxMT1cgfSwKKwl7IDB4ZWIxYSwgS0VZX0JMVUUgfSwKKwl7IDB4ZWIxYiwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHhlYjFjLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4ZWIxZCwgS0VZX01VVEUgfSwKKwl7IDB4ZWIxZSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4ZWIxZiwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweGViNDAsIEtFWV9QQVVTRSB9LAorCXsgMHhlYjQxLCBLRVlfSE9NRSB9LAorCXsgMHhlYjQyLCBLRVlfTUVOVSB9LCAvKiBEVkQgTWVudSAqLworCXsgMHhlYjQzLCBLRVlfU1VCVElUTEUgfSwKKwl7IDB4ZWI0NCwgS0VZX1RFWFQgfSwgLyogVGVsZXRleHQgKi8KKwl7IDB4ZWI0NSwgS0VZX0RFTEVURSB9LAorCXsgMHhlYjQ2LCBLRVlfVFYgfSwKKwl7IDB4ZWI0NywgS0VZX0RWRCB9LAorCXsgMHhlYjQ4LCBLRVlfU1RPUCB9LAorCXsgMHhlYjQ5LCBLRVlfVklERU8gfSwKKwl7IDB4ZWI0YSwgS0VZX0FVRElPIH0sIC8qIE11c2ljICovCisJeyAweGViNGIsIEtFWV9TQ1JFRU4gfSwgLyogUGljICovCisJeyAweGViNGMsIEtFWV9QTEFZIH0sCisJeyAweGViNGQsIEtFWV9CQUNLIH0sCisJeyAweGViNGUsIEtFWV9SRVdJTkQgfSwKKwl7IDB4ZWI0ZiwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweGViNTQsIEtFWV9QUkVWSU9VUyB9LAorCXsgMHhlYjU4LCBLRVlfUkVDT1JEIH0sCisJeyAweGViNWMsIEtFWV9ORVhUIH0sCisKKwkvKiBLZXkgY29kZXMgZm9yIHRoZSBIYXVwYXVnZSBXaW5UViBOb3ZhLVRELCBjb3BpZWQgZnJvbSBub3ZhLXQtdXNiMi5jIChOb3ZhLVQgVVNCMikgKi8KKwl7IDB4MWUwMCwgS0VZXzAgfSwKKwl7IDB4MWUwMSwgS0VZXzEgfSwKKwl7IDB4MWUwMiwgS0VZXzIgfSwKKwl7IDB4MWUwMywgS0VZXzMgfSwKKwl7IDB4MWUwNCwgS0VZXzQgfSwKKwl7IDB4MWUwNSwgS0VZXzUgfSwKKwl7IDB4MWUwNiwgS0VZXzYgfSwKKwl7IDB4MWUwNywgS0VZXzcgfSwKKwl7IDB4MWUwOCwgS0VZXzggfSwKKwl7IDB4MWUwOSwgS0VZXzkgfSwKKwl7IDB4MWUwYSwgS0VZX0tQQVNURVJJU0sgfSwKKwl7IDB4MWUwYiwgS0VZX1JFRCB9LAorCXsgMHgxZTBjLCBLRVlfUkFESU8gfSwKKwl7IDB4MWUwZCwgS0VZX01FTlUgfSwKKwl7IDB4MWUwZSwgS0VZX0dSQVZFIH0sIC8qICMgKi8KKwl7IDB4MWUwZiwgS0VZX01VVEUgfSwKKwl7IDB4MWUxMCwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDFlMTEsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDFlMTIsIEtFWV9DSEFOTkVMIH0sCisJeyAweDFlMTQsIEtFWV9VUCB9LAorCXsgMHgxZTE1LCBLRVlfRE9XTiB9LAorCXsgMHgxZTE2LCBLRVlfTEVGVCB9LAorCXsgMHgxZTE3LCBLRVlfUklHSFQgfSwKKwl7IDB4MWUxOCwgS0VZX1ZJREVPIH0sCisJeyAweDFlMTksIEtFWV9BVURJTyB9LAorCXsgMHgxZTFhLCBLRVlfTUVESUEgfSwKKwl7IDB4MWUxYiwgS0VZX0VQRyB9LAorCXsgMHgxZTFjLCBLRVlfVFYgfSwKKwl7IDB4MWUxZSwgS0VZX05FWFQgfSwKKwl7IDB4MWUxZiwgS0VZX0JBQ0sgfSwKKwl7IDB4MWUyMCwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgxZTIxLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MWUyNCwgS0VZX0xBU1QgfSwgLyogU2tpcCBiYWNrd2FyZHMgKi8KKwl7IDB4MWUyNSwgS0VZX09LIH0sCisJeyAweDFlMjksIEtFWV9CTFVFfSwKKwl7IDB4MWUyZSwgS0VZX0dSRUVOIH0sCisJeyAweDFlMzAsIEtFWV9QQVVTRSB9LAorCXsgMHgxZTMyLCBLRVlfUkVXSU5EIH0sCisJeyAweDFlMzQsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHgxZTM1LCBLRVlfUExBWSB9LAorCXsgMHgxZTM2LCBLRVlfU1RPUCB9LAorCXsgMHgxZTM3LCBLRVlfUkVDT1JEIH0sCisJeyAweDFlMzgsIEtFWV9ZRUxMT1cgfSwKKwl7IDB4MWUzYiwgS0VZX0dPVE8gfSwKKwl7IDB4MWUzZCwgS0VZX1BPV0VSIH0sCisKKwkvKiBLZXkgY29kZXMgZm9yIHRoZSBMZWFkdGVrIFdpbmZhc3QgRFRWIERvbmdsZSAqLworCXsgMHgwMDQyLCBLRVlfUE9XRVIgfSwKKwl7IDB4MDc3YywgS0VZX1RVTkVSIH0sCisJeyAweDBmNGUsIEtFWV9QUklOVCB9LCAvKiBQUkVWSUVXICovCisJeyAweDA4NDAsIEtFWV9TQ1JFRU4gfSwgLyogZnVsbCBzY3JlZW4gdG9nZ2xlKi8KKwl7IDB4MGY3MSwgS0VZX0RPVCB9LCAvKiBmcmVxdWVuY3kgKi8KKwl7IDB4MDc0MywgS0VZXzAgfSwKKwl7IDB4MGM0MSwgS0VZXzEgfSwKKwl7IDB4MDQ0MywgS0VZXzIgfSwKKwl7IDB4MGI3ZiwgS0VZXzMgfSwKKwl7IDB4MGU0MSwgS0VZXzQgfSwKKwl7IDB4MDY0MywgS0VZXzUgfSwKKwl7IDB4MDk3ZiwgS0VZXzYgfSwKKwl7IDB4MGQ3ZSwgS0VZXzcgfSwKKwl7IDB4MDU3YywgS0VZXzggfSwKKwl7IDB4MGE0MCwgS0VZXzkgfSwKKwl7IDB4MGU0ZSwgS0VZX0NMRUFSIH0sCisJeyAweDA0N2MsIEtFWV9DSEFOTkVMIH0sIC8qIHNob3cgY2hhbm5lbCBudW1iZXIgKi8KKwl7IDB4MGY0MSwgS0VZX0xBU1QgfSwgLyogcmVjYWxsICovCisJeyAweDAzNDIsIEtFWV9NVVRFIH0sCisJeyAweDA2NGMsIEtFWV9SRVNFUlZFRCB9LCAvKiBQSVAgYnV0dG9uKi8KKwl7IDB4MDE3MiwgS0VZX1NIVUZGTEUgfSwgLyogU05BUFNIT1QgKi8KKwl7IDB4MGM0ZSwgS0VZX1BMQVlQQVVTRSB9LCAvKiBUSU1FU0hJRlQgKi8KKwl7IDB4MGI3MCwgS0VZX1JFQ09SRCB9LAorCXsgMHgwMzdkLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MDE3ZCwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MDI0MiwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgwMDdkLCBLRVlfQ0hBTk5FTERPV04gfSwKKworCS8qIEtleSBjb2RlcyBmb3IgTm92YS1URCAiY3JlZGl0IGNhcmQiIHJlbW90ZSBjb250cm9sLiAqLworCXsgMHgxZDAwLCBLRVlfMCB9LAorCXsgMHgxZDAxLCBLRVlfMSB9LAorCXsgMHgxZDAyLCBLRVlfMiB9LAorCXsgMHgxZDAzLCBLRVlfMyB9LAorCXsgMHgxZDA0LCBLRVlfNCB9LAorCXsgMHgxZDA1LCBLRVlfNSB9LAorCXsgMHgxZDA2LCBLRVlfNiB9LAorCXsgMHgxZDA3LCBLRVlfNyB9LAorCXsgMHgxZDA4LCBLRVlfOCB9LAorCXsgMHgxZDA5LCBLRVlfOSB9LAorCXsgMHgxZDBhLCBLRVlfVEVYVCB9LAorCXsgMHgxZDBkLCBLRVlfTUVOVSB9LAorCXsgMHgxZDBmLCBLRVlfTVVURSB9LAorCXsgMHgxZDEwLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MWQxMSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MWQxMiwgS0VZX0NIQU5ORUwgfSwKKwl7IDB4MWQxNCwgS0VZX1VQIH0sCisJeyAweDFkMTUsIEtFWV9ET1dOIH0sCisJeyAweDFkMTYsIEtFWV9MRUZUIH0sCisJeyAweDFkMTcsIEtFWV9SSUdIVCB9LAorCXsgMHgxZDFjLCBLRVlfVFYgfSwKKwl7IDB4MWQxZSwgS0VZX05FWFQgfSwKKwl7IDB4MWQxZiwgS0VZX0JBQ0sgfSwKKwl7IDB4MWQyMCwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgxZDIxLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MWQyNCwgS0VZX0xBU1QgfSwKKwl7IDB4MWQyNSwgS0VZX09LIH0sCisJeyAweDFkMzAsIEtFWV9QQVVTRSB9LAorCXsgMHgxZDMyLCBLRVlfUkVXSU5EIH0sCisJeyAweDFkMzQsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHgxZDM1LCBLRVlfUExBWSB9LAorCXsgMHgxZDM2LCBLRVlfU1RPUCB9LAorCXsgMHgxZDM3LCBLRVlfUkVDT1JEIH0sCisJeyAweDFkM2IsIEtFWV9HT1RPIH0sCisJeyAweDFkM2QsIEtFWV9QT1dFUiB9LAorfTsKKworc3RhdGljIHN0cnVjdCByY19rZXltYXAgZGliMDcwMF9yYzVfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gZGliMDcwMF9yYzVfdGFibGUsCisJCS5zaXplICAgID0gQVJSQVlfU0laRShkaWIwNzAwX3JjNV90YWJsZSksCisJCS5pcl90eXBlID0gSVJfVFlQRV9SQzUsCisJCS5uYW1lICAgID0gUkNfTUFQX0RJQjA3MDBfUkM1X1RBQkxFLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwKHZvaWQpCit7CisJcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmZGliMDcwMF9yYzVfbWFwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwKHZvaWQpCit7CisJaXJfdW5yZWdpc3Rlcl9tYXAoJmRpYjA3MDBfcmM1X21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwKQorbW9kdWxlX2V4aXQoZXhpdF9yY19tYXApCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWxpcmMuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1saXJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNmY2Y5MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1saXJjLmMKQEAgLTAsMCArMSw0MSBAQAorLyogcmMtbGlyYy5jIC0gRW1wdHkgZHVtbXkga2V5dGFibGUsIGZvciB1c2Ugd2hlbiBpdHMgcHJlZmVycmVkIHRvIHBhc3MKKyAqIGFsbCByYXcgSVIgZGF0YSB0byB0aGUgbGlyYyB1c2Vyc3BhY2UgZGVjb2Rlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgSmFyb2QgV2lsc29uIDxqYXJvZEByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL2lyLWNvcmUuaD4KKworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBsaXJjW10gPSB7CisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCByY19rZXltYXAgbGlyY19tYXAgPSB7CisJLm1hcCA9IHsKKwkJLnNjYW4gICAgPSBsaXJjLAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUobGlyYyksCisJCS5pcl90eXBlID0gSVJfVFlQRV9MSVJDLAorCQkubmFtZSAgICA9IFJDX01BUF9MSVJDLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2xpcmModm9pZCkKK3sKKwlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZsaXJjX21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9saXJjKHZvaWQpCit7CisJaXJfdW5yZWdpc3Rlcl9tYXAoJmxpcmNfbWFwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfbGlyYykKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX2xpcmMpCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkphcm9kIFdpbHNvbiA8amFyb2RAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1yYzYtbWNlLmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtcmM2LW1jZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NzI2YTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtcmM2LW1jZS5jCkBAIC0wLDAgKzEsMTA1IEBACisvKiByYy1yYzYtbWNlLmMgLSBLZXl0YWJsZSBmb3IgV2luZG93cyBNZWRpYSBDZW50ZXIgUkMtNiByZW1vdGVzIGZvciB1c2UKKyAqIHdpdGggdGhlIE1lZGlhIENlbnRlciBFZGl0aW9uIGVIb21lIEluZnJhcmVkIFRyYW5zY2VpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBieSBKYXJvZCBXaWxzb24gPGphcm9kQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgcmM2X21jZVtdID0geworCXsgMHg4MDBmMDQxNSwgS0VZX1JFV0lORCB9LAorCXsgMHg4MDBmMDQxNCwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDgwMGYwNDFiLCBLRVlfUFJFVklPVVMgfSwKKwl7IDB4ODAwZjA0MWEsIEtFWV9ORVhUIH0sCisKKwl7IDB4ODAwZjA0MTYsIEtFWV9QTEFZIH0sCisJeyAweDgwMGYwNDE4LCBLRVlfUEFVU0UgfSwKKwl7IDB4ODAwZjA0MTksIEtFWV9TVE9QIH0sCisJeyAweDgwMGYwNDE3LCBLRVlfUkVDT1JEIH0sCisKKwl7IDB4ODAwZjA0MWUsIEtFWV9VUCB9LAorCXsgMHg4MDBmMDQxZiwgS0VZX0RPV04gfSwKKwl7IDB4ODAwZjA0MjAsIEtFWV9MRUZUIH0sCisJeyAweDgwMGYwNDIxLCBLRVlfUklHSFQgfSwKKworCXsgMHg4MDBmMDQwYiwgS0VZX0VOVEVSIH0sCisJeyAweDgwMGYwNDIyLCBLRVlfT0sgfSwKKwl7IDB4ODAwZjA0MjMsIEtFWV9FWElUIH0sCisJeyAweDgwMGYwNDBhLCBLRVlfREVMRVRFIH0sCisKKwl7IDB4ODAwZjA0MGUsIEtFWV9NVVRFIH0sCisJeyAweDgwMGYwNDEwLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4ODAwZjA0MTEsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDgwMGYwNDEyLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDgwMGYwNDEzLCBLRVlfQ0hBTk5FTERPV04gfSwKKworCXsgMHg4MDBmMDQwMSwgS0VZX05VTUVSSUNfMSB9LAorCXsgMHg4MDBmMDQwMiwgS0VZX05VTUVSSUNfMiB9LAorCXsgMHg4MDBmMDQwMywgS0VZX05VTUVSSUNfMyB9LAorCXsgMHg4MDBmMDQwNCwgS0VZX05VTUVSSUNfNCB9LAorCXsgMHg4MDBmMDQwNSwgS0VZX05VTUVSSUNfNSB9LAorCXsgMHg4MDBmMDQwNiwgS0VZX05VTUVSSUNfNiB9LAorCXsgMHg4MDBmMDQwNywgS0VZX05VTUVSSUNfNyB9LAorCXsgMHg4MDBmMDQwOCwgS0VZX05VTUVSSUNfOCB9LAorCXsgMHg4MDBmMDQwOSwgS0VZX05VTUVSSUNfOSB9LAorCXsgMHg4MDBmMDQwMCwgS0VZX05VTUVSSUNfMCB9LAorCisJeyAweDgwMGYwNDFkLCBLRVlfTlVNRVJJQ19TVEFSIH0sCisJeyAweDgwMGYwNDFjLCBLRVlfTlVNRVJJQ19QT1VORCB9LAorCisJeyAweDgwMGYwNDQ2LCBLRVlfVFYgfSwKKwl7IDB4ODAwZjA0NDcsIEtFWV9BVURJTyB9LCAvKiBNeSBNdXNpYyAqLworCXsgMHg4MDBmMDQ0OCwgS0VZX1BWUiB9LCAvKiBSZWNvcmRlZFRWICovCisJeyAweDgwMGYwNDQ5LCBLRVlfQ0FNRVJBIH0sCisJeyAweDgwMGYwNDRhLCBLRVlfVklERU8gfSwKKwl7IDB4ODAwZjA0MjQsIEtFWV9EVkQgfSwKKwl7IDB4ODAwZjA0MjUsIEtFWV9UVU5FUiB9LCAvKiBMaXZlVFYgKi8KKwl7IDB4ODAwZjA0NTAsIEtFWV9SQURJTyB9LAorCisJeyAweDgwMGYwNDRjLCBLRVlfTEFOR1VBR0UgfSwKKwl7IDB4ODAwZjA0MjcsIEtFWV9aT09NIH0sIC8qIEFzcGVjdCAqLworCisJeyAweDgwMGYwNDViLCBLRVlfUkVEIH0sCisJeyAweDgwMGYwNDVjLCBLRVlfR1JFRU4gfSwKKwl7IDB4ODAwZjA0NWQsIEtFWV9ZRUxMT1cgfSwKKwl7IDB4ODAwZjA0NWUsIEtFWV9CTFVFIH0sCisKKwl7IDB4ODAwZjA0MGYsIEtFWV9JTkZPIH0sCisJeyAweDgwMGYwNDI2LCBLRVlfRVBHIH0sIC8qIEd1aWRlICovCisJeyAweDgwMGYwNDVhLCBLRVlfU1VCVElUTEUgfSwgLyogQ2FwdGlvbi9UZWxldGV4dCAqLworCXsgMHg4MDBmMDQ0ZCwgS0VZX1RJVExFIH0sCisKKwl7IDB4ODAwZjA0MGMsIEtFWV9QT1dFUiB9LAorCXsgMHg4MDBmMDQwZCwgS0VZX1BST0cxIH0sIC8qIFdpbmRvd3MgTUNFIGJ1dHRvbiAqLworCit9OworCitzdGF0aWMgc3RydWN0IHJjX2tleW1hcCByYzZfbWNlX21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IHJjNl9tY2UsCisJCS5zaXplICAgID0gQVJSQVlfU0laRShyYzZfbWNlKSwKKwkJLmlyX3R5cGUgPSBJUl9UWVBFX1JDNiwKKwkJLm5hbWUgICAgPSBSQ19NQVBfUkM2X01DRSwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9yYzZfbWNlKHZvaWQpCit7CisJcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmcmM2X21jZV9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfcmM2X21jZSh2b2lkKQoreworCWlyX3VucmVnaXN0ZXJfbWFwKCZyYzZfbWNlX21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX3JjNl9tY2UpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9yYzZfbWNlKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKYXJvZCBXaWxzb24gPGphcm9kQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2xpcmNfZGV2LmMgYi9kcml2ZXJzL21lZGlhL0lSL2xpcmNfZGV2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk5ODkxYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIvbGlyY19kZXYuYwpAQCAtMCwwICsxLDc2NCBAQAorLyoKKyAqIExJUkMgYmFzZSBkcml2ZXIKKyAqCisgKiBieSBBcnR1ciBMaXBvd3NraSA8YWxpcG93c2tpQGludGVyaWEucGw+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2Rldi5oPgorCisjaW5jbHVkZSA8bWVkaWEvbGlyYy5oPgorI2luY2x1ZGUgPG1lZGlhL2xpcmNfZGV2Lmg+CisKK3N0YXRpYyBpbnQgZGVidWc7CisKKyNkZWZpbmUgSVJDVExfREVWX05BTUUJIkJhc2VSZW1vdGVDdGwiCisjZGVmaW5lIE5PUExVRwkJLTEKKyNkZWZpbmUgTE9HSEVBRAkJImxpcmNfZGV2ICglc1slZF0pOiAiCisKK3N0YXRpYyBkZXZfdCBsaXJjX2Jhc2VfZGV2OworCitzdHJ1Y3QgaXJjdGwgeworCXN0cnVjdCBsaXJjX2RyaXZlciBkOworCWludCBhdHRhY2hlZDsKKwlpbnQgb3BlbjsKKworCXN0cnVjdCBtdXRleCBpcmN0bF9sb2NrOworCXN0cnVjdCBsaXJjX2J1ZmZlciAqYnVmOworCXVuc2lnbmVkIGludCBjaHVua19zaXplOworCisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCWxvbmcgamlmZmllc190b193YWl0OworCisJc3RydWN0IGNkZXYgY2RldjsKK307CisKK3N0YXRpYyBERUZJTkVfTVVURVgobGlyY19kZXZfbG9jayk7CisKK3N0YXRpYyBzdHJ1Y3QgaXJjdGwgKmlyY3Rsc1tNQVhfSVJDVExfREVWSUNFU107CisKKy8qIE9ubHkgdXNlZCBmb3Igc3lzZnMgYnV0IGRlZmluZWQgdG8gdm9pZCBvdGhlcndpc2UgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xhc3MgKmxpcmNfY2xhc3M7CisKKy8qICBoZWxwZXIgZnVuY3Rpb24KKyAqICBpbml0aWFsaXplcyB0aGUgaXJjdGwgc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIGluaXRfaXJjdGwoc3RydWN0IGlyY3RsICppcikKK3sKKwlkZXZfZGJnKGlyLT5kLmRldiwgTE9HSEVBRCAiaW5pdGlhbGl6aW5nIGlyY3RsXG4iLAorCQlpci0+ZC5uYW1lLCBpci0+ZC5taW5vcik7CisJbXV0ZXhfaW5pdCgmaXItPmlyY3RsX2xvY2spOworCWlyLT5kLm1pbm9yID0gTk9QTFVHOworfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwKHN0cnVjdCBpcmN0bCAqaXIpCit7CisJZGV2X2RiZyhpci0+ZC5kZXYsIExPR0hFQUQgImNsZWFuaW5nIHVwXG4iLCBpci0+ZC5uYW1lLCBpci0+ZC5taW5vcik7CisKKwlkZXZpY2VfZGVzdHJveShsaXJjX2NsYXNzLCBNS0RFVihNQUpPUihsaXJjX2Jhc2VfZGV2KSwgaXItPmQubWlub3IpKTsKKworCWlmIChpci0+YnVmICE9IGlyLT5kLnJidWYpIHsKKwkJbGlyY19idWZmZXJfZnJlZShpci0+YnVmKTsKKwkJa2ZyZWUoaXItPmJ1Zik7CisJfQorCWlyLT5idWYgPSBOVUxMOworfQorCisvKiAgaGVscGVyIGZ1bmN0aW9uCisgKiAgcmVhZHMga2V5IGNvZGVzIGZyb20gZHJpdmVyIGFuZCBwdXRzIHRoZW0gaW50byBidWZmZXIKKyAqICByZXR1cm5zIDAgb24gc3VjY2VzcworICovCitzdGF0aWMgaW50IGFkZF90b19idWYoc3RydWN0IGlyY3RsICppcikKK3sKKwlpZiAoaXItPmQuYWRkX3RvX2J1ZikgeworCQlpbnQgcmVzID0gLUVOT0RBVEE7CisJCWludCBnb3RfZGF0YSA9IDA7CisKKwkJLyoKKwkJICogc2VydmljZSB0aGUgZGV2aWNlIGFzIGxvbmcgYXMgaXQgaXMgcmV0dXJuaW5nCisJCSAqIGRhdGEgYW5kIHdlIGhhdmUgc3BhY2UKKwkJICovCitnZXRfZGF0YToKKwkJcmVzID0gaXItPmQuYWRkX3RvX2J1Zihpci0+ZC5kYXRhLCBpci0+YnVmKTsKKwkJaWYgKHJlcyA9PSAwKSB7CisJCQlnb3RfZGF0YSsrOworCQkJZ290byBnZXRfZGF0YTsKKwkJfQorCisJCWlmIChyZXMgPT0gLUVOT0RFVikKKwkJCWt0aHJlYWRfc3RvcChpci0+dGFzayk7CisKKwkJcmV0dXJuIGdvdF9kYXRhID8gMCA6IHJlczsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogbWFpbiBmdW5jdGlvbiBvZiB0aGUgcG9sbGluZyB0aHJlYWQKKyAqLworc3RhdGljIGludCBsaXJjX3RocmVhZCh2b2lkICppcmN0bCkKK3sKKwlzdHJ1Y3QgaXJjdGwgKmlyID0gaXJjdGw7CisKKwlkZXZfZGJnKGlyLT5kLmRldiwgTE9HSEVBRCAicG9sbCB0aHJlYWQgc3RhcnRlZFxuIiwKKwkJaXItPmQubmFtZSwgaXItPmQubWlub3IpOworCisJZG8geworCQlpZiAoaXItPm9wZW4pIHsKKwkJCWlmIChpci0+amlmZmllc190b193YWl0KSB7CisJCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCQlzY2hlZHVsZV90aW1lb3V0KGlyLT5qaWZmaWVzX3RvX3dhaXQpOworCQkJfQorCQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKKwkJCQlicmVhazsKKwkJCWlmICghYWRkX3RvX2J1ZihpcikpCisJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpci0+YnVmLT53YWl0X3BvbGwpOworCQl9IGVsc2UgeworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCXNjaGVkdWxlKCk7CisJCX0KKwl9IHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKTsKKworCWRldl9kYmcoaXItPmQuZGV2LCBMT0dIRUFEICJwb2xsIHRocmVhZCBlbmRlZFxuIiwKKwkJaXItPmQubmFtZSwgaXItPmQubWlub3IpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnJlYWQJCT0gbGlyY19kZXZfZm9wX3JlYWQsCisJLndyaXRlCQk9IGxpcmNfZGV2X2ZvcF93cml0ZSwKKwkucG9sbAkJPSBsaXJjX2Rldl9mb3BfcG9sbCwKKwkudW5sb2NrZWRfaW9jdGwJPSBsaXJjX2Rldl9mb3BfaW9jdGwsCisJLm9wZW4JCT0gbGlyY19kZXZfZm9wX29wZW4sCisJLnJlbGVhc2UJPSBsaXJjX2Rldl9mb3BfY2xvc2UsCit9OworCitzdGF0aWMgaW50IGxpcmNfY2Rldl9hZGQoc3RydWN0IGlyY3RsICppcikKK3sKKwlpbnQgcmV0dmFsOworCXN0cnVjdCBsaXJjX2RyaXZlciAqZCA9ICZpci0+ZDsKKworCWlmIChkLT5mb3BzKSB7CisJCWNkZXZfaW5pdCgmaXItPmNkZXYsIGQtPmZvcHMpOworCQlpci0+Y2Rldi5vd25lciA9IGQtPm93bmVyOworCX0gZWxzZSB7CisJCWNkZXZfaW5pdCgmaXItPmNkZXYsICZmb3BzKTsKKwkJaXItPmNkZXYub3duZXIgPSBUSElTX01PRFVMRTsKKwl9CisJa29iamVjdF9zZXRfbmFtZSgmaXItPmNkZXYua29iaiwgImxpcmMlZCIsIGQtPm1pbm9yKTsKKworCXJldHZhbCA9IGNkZXZfYWRkKCZpci0+Y2RldiwgTUtERVYoTUFKT1IobGlyY19iYXNlX2RldiksIGQtPm1pbm9yKSwgMSk7CisJaWYgKHJldHZhbCkKKwkJa29iamVjdF9wdXQoJmlyLT5jZGV2LmtvYmopOworCisJcmV0dXJuIHJldHZhbDsKK30KKworaW50IGxpcmNfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBsaXJjX2RyaXZlciAqZCkKK3sKKwlzdHJ1Y3QgaXJjdGwgKmlyOworCWludCBtaW5vcjsKKwlpbnQgYnl0ZXNfaW5fa2V5OworCXVuc2lnbmVkIGludCBjaHVua19zaXplOworCXVuc2lnbmVkIGludCBidWZmZXJfc2l6ZTsKKwlpbnQgZXJyOworCisJaWYgKCFkKSB7CisJCXByaW50ayhLRVJOX0VSUiAibGlyY19kZXY6IGxpcmNfcmVnaXN0ZXJfZHJpdmVyOiAiCisJCSAgICAgICAiZHJpdmVyIHBvaW50ZXIgbXVzdCBiZSBub3QgTlVMTCFcbiIpOworCQllcnIgPSAtRUJBRFJRQzsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKE1BWF9JUkNUTF9ERVZJQ0VTIDw9IGQtPm1pbm9yKSB7CisJCWRldl9lcnIoZC0+ZGV2LCAibGlyY19kZXY6IGxpcmNfcmVnaXN0ZXJfZHJpdmVyOiAiCisJCQkiXCJtaW5vclwiIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAlZCAoJWQpIVxuIiwKKwkJCU1BWF9JUkNUTF9ERVZJQ0VTLTEsIGQtPm1pbm9yKTsKKwkJZXJyID0gLUVCQURSUUM7CisJCWdvdG8gb3V0OworCX0KKworCWlmICgxID4gZC0+Y29kZV9sZW5ndGggfHwgKEJVRkxFTiAqIDgpIDwgZC0+Y29kZV9sZW5ndGgpIHsKKwkJZGV2X2VycihkLT5kZXYsICJsaXJjX2RldjogbGlyY19yZWdpc3Rlcl9kcml2ZXI6ICIKKwkJCSJjb2RlIGxlbmd0aCBpbiBiaXRzIGZvciBtaW5vciAoJWQpICIKKwkJCSJtdXN0IGJlIGxlc3MgdGhhbiAlZCFcbiIsCisJCQlkLT5taW5vciwgQlVGTEVOICogOCk7CisJCWVyciA9IC1FQkFEUlFDOworCQlnb3RvIG91dDsKKwl9CisKKwlkZXZfZGJnKGQtPmRldiwgImxpcmNfZGV2OiBsaXJjX3JlZ2lzdGVyX2RyaXZlcjogc2FtcGxlX3JhdGU6ICVkXG4iLAorCQlkLT5zYW1wbGVfcmF0ZSk7CisJaWYgKGQtPnNhbXBsZV9yYXRlKSB7CisJCWlmICgyID4gZC0+c2FtcGxlX3JhdGUgfHwgSFogPCBkLT5zYW1wbGVfcmF0ZSkgeworCQkJZGV2X2VycihkLT5kZXYsICJsaXJjX2RldjogbGlyY19yZWdpc3Rlcl9kcml2ZXI6ICIKKwkJCQkic2FtcGxlX3JhdGUgbXVzdCBiZSBiZXR3ZWVuIDIgYW5kICVkIVxuIiwgSFopOworCQkJZXJyID0gLUVCQURSUUM7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAoIWQtPmFkZF90b19idWYpIHsKKwkJCWRldl9lcnIoZC0+ZGV2LCAibGlyY19kZXY6IGxpcmNfcmVnaXN0ZXJfZHJpdmVyOiAiCisJCQkJImFkZF90b19idWYgY2Fubm90IGJlIE5VTEwgd2hlbiAiCisJCQkJInNhbXBsZV9yYXRlIGlzIHNldFxuIik7CisJCQllcnIgPSAtRUJBRFJRQzsKKwkJCWdvdG8gb3V0OworCQl9CisJfSBlbHNlIGlmICghKGQtPmZvcHMgJiYgZC0+Zm9wcy0+cmVhZCkgJiYgIWQtPnJidWYpIHsKKwkJZGV2X2VycihkLT5kZXYsICJsaXJjX2RldjogbGlyY19yZWdpc3Rlcl9kcml2ZXI6ICIKKwkJCSJmb3BzLT5yZWFkIGFuZCByYnVmIGNhbm5vdCBhbGwgYmUgTlVMTCFcbiIpOworCQllcnIgPSAtRUJBRFJRQzsKKwkJZ290byBvdXQ7CisJfSBlbHNlIGlmICghZC0+cmJ1ZikgeworCQlpZiAoIShkLT5mb3BzICYmIGQtPmZvcHMtPnJlYWQgJiYgZC0+Zm9wcy0+cG9sbCAmJgorCQkgICAgICBkLT5mb3BzLT51bmxvY2tlZF9pb2N0bCkpIHsKKwkJCWRldl9lcnIoZC0+ZGV2LCAibGlyY19kZXY6IGxpcmNfcmVnaXN0ZXJfZHJpdmVyOiAiCisJCQkJIm5laXRoZXIgcmVhZCwgcG9sbCBub3IgdW5sb2NrZWRfaW9jdGwgY2FuIGJlIE5VTEwhXG4iKTsKKwkJCWVyciA9IC1FQkFEUlFDOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwltdXRleF9sb2NrKCZsaXJjX2Rldl9sb2NrKTsKKworCW1pbm9yID0gZC0+bWlub3I7CisKKwlpZiAobWlub3IgPCAwKSB7CisJCS8qIGZpbmQgZmlyc3QgZnJlZSBzbG90IGZvciBkcml2ZXIgKi8KKwkJZm9yIChtaW5vciA9IDA7IG1pbm9yIDwgTUFYX0lSQ1RMX0RFVklDRVM7IG1pbm9yKyspCisJCQlpZiAoIWlyY3Rsc1ttaW5vcl0pCisJCQkJYnJlYWs7CisJCWlmIChNQVhfSVJDVExfREVWSUNFUyA9PSBtaW5vcikgeworCQkJZGV2X2VycihkLT5kZXYsICJsaXJjX2RldjogbGlyY19yZWdpc3Rlcl9kcml2ZXI6ICIKKwkJCQkibm8gZnJlZSBzbG90cyBmb3IgZHJpdmVycyFcbiIpOworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0X2xvY2s7CisJCX0KKwl9IGVsc2UgaWYgKGlyY3Rsc1ttaW5vcl0pIHsKKwkJZGV2X2VycihkLT5kZXYsICJsaXJjX2RldjogbGlyY19yZWdpc3Rlcl9kcml2ZXI6ICIKKwkJCSJtaW5vciAoJWQpIGp1c3QgcmVnaXN0ZXJlZCFcbiIsIG1pbm9yKTsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIG91dF9sb2NrOworCX0KKworCWlyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlyY3RsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpcikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dF9sb2NrOworCX0KKwlpbml0X2lyY3RsKGlyKTsKKwlpcmN0bHNbbWlub3JdID0gaXI7CisJZC0+bWlub3IgPSBtaW5vcjsKKworCWlmIChkLT5zYW1wbGVfcmF0ZSkgeworCQlpci0+amlmZmllc190b193YWl0ID0gSFogLyBkLT5zYW1wbGVfcmF0ZTsKKwl9IGVsc2UgeworCQkvKiBpdCBtZWFucyAtIHdhaXQgZm9yIGV4dGVybmFsIGV2ZW50IGluIHRhc2sgcXVldWUgKi8KKwkJaXItPmppZmZpZXNfdG9fd2FpdCA9IDA7CisJfQorCisJLyogc29tZSBzYWZldHkgY2hlY2sgOC0pICovCisJZC0+bmFtZVtzaXplb2YoZC0+bmFtZSktMV0gPSAnXDAnOworCisJYnl0ZXNfaW5fa2V5ID0gQklUU19UT19MT05HUyhkLT5jb2RlX2xlbmd0aCkgKworCQkJKGQtPmNvZGVfbGVuZ3RoICUgOCA/IDEgOiAwKTsKKwlidWZmZXJfc2l6ZSA9IGQtPmJ1ZmZlcl9zaXplID8gZC0+YnVmZmVyX3NpemUgOiBCVUZMRU4gLyBieXRlc19pbl9rZXk7CisJY2h1bmtfc2l6ZSAgPSBkLT5jaHVua19zaXplICA/IGQtPmNodW5rX3NpemUgIDogYnl0ZXNfaW5fa2V5OworCisJaWYgKGQtPnJidWYpIHsKKwkJaXItPmJ1ZiA9IGQtPnJidWY7CisJfSBlbHNlIHsKKwkJaXItPmJ1ZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBsaXJjX2J1ZmZlciksIEdGUF9LRVJORUwpOworCQlpZiAoIWlyLT5idWYpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIG91dF9sb2NrOworCQl9CisJCWVyciA9IGxpcmNfYnVmZmVyX2luaXQoaXItPmJ1ZiwgY2h1bmtfc2l6ZSwgYnVmZmVyX3NpemUpOworCQlpZiAoZXJyKSB7CisJCQlrZnJlZShpci0+YnVmKTsKKwkJCWdvdG8gb3V0X2xvY2s7CisJCX0KKwl9CisJaXItPmNodW5rX3NpemUgPSBpci0+YnVmLT5jaHVua19zaXplOworCisJaWYgKGQtPmZlYXR1cmVzID09IDApCisJCWQtPmZlYXR1cmVzID0gTElSQ19DQU5fUkVDX0xJUkNDT0RFOworCisJaXItPmQgPSAqZDsKKwlpci0+ZC5taW5vciA9IG1pbm9yOworCisJZGV2aWNlX2NyZWF0ZShsaXJjX2NsYXNzLCBpci0+ZC5kZXYsCisJCSAgICAgIE1LREVWKE1BSk9SKGxpcmNfYmFzZV9kZXYpLCBpci0+ZC5taW5vciksIE5VTEwsCisJCSAgICAgICJsaXJjJXUiLCBpci0+ZC5taW5vcik7CisKKwlpZiAoZC0+c2FtcGxlX3JhdGUpIHsKKwkJLyogdHJ5IHRvIGZpcmUgdXAgcG9sbGluZyB0aHJlYWQgKi8KKwkJaXItPnRhc2sgPSBrdGhyZWFkX3J1bihsaXJjX3RocmVhZCwgKHZvaWQgKilpciwgImxpcmNfZGV2Iik7CisJCWlmIChJU19FUlIoaXItPnRhc2spKSB7CisJCQlkZXZfZXJyKGQtPmRldiwgImxpcmNfZGV2OiBsaXJjX3JlZ2lzdGVyX2RyaXZlcjogIgorCQkJCSJjYW5ub3QgcnVuIHBvbGwgdGhyZWFkIGZvciBtaW5vciA9ICVkXG4iLAorCQkJCWQtPm1pbm9yKTsKKwkJCWVyciA9IC1FQ0hJTEQ7CisJCQlnb3RvIG91dF9zeXNmczsKKwkJfQorCX0KKworCWVyciA9IGxpcmNfY2Rldl9hZGQoaXIpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3N5c2ZzOworCisJaXItPmF0dGFjaGVkID0gMTsKKwltdXRleF91bmxvY2soJmxpcmNfZGV2X2xvY2spOworCisJZGV2X2luZm8oaXItPmQuZGV2LCAibGlyY19kZXY6IGRyaXZlciAlcyByZWdpc3RlcmVkIGF0IG1pbm9yID0gJWRcbiIsCisJCSBpci0+ZC5uYW1lLCBpci0+ZC5taW5vcik7CisJcmV0dXJuIG1pbm9yOworCitvdXRfc3lzZnM6CisJZGV2aWNlX2Rlc3Ryb3kobGlyY19jbGFzcywgTUtERVYoTUFKT1IobGlyY19iYXNlX2RldiksIGlyLT5kLm1pbm9yKSk7CitvdXRfbG9jazoKKwltdXRleF91bmxvY2soJmxpcmNfZGV2X2xvY2spOworb3V0OgorCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKGxpcmNfcmVnaXN0ZXJfZHJpdmVyKTsKKworaW50IGxpcmNfdW5yZWdpc3Rlcl9kcml2ZXIoaW50IG1pbm9yKQoreworCXN0cnVjdCBpcmN0bCAqaXI7CisKKwlpZiAobWlub3IgPCAwIHx8IG1pbm9yID49IE1BWF9JUkNUTF9ERVZJQ0VTKSB7CisJCXByaW50ayhLRVJOX0VSUiAibGlyY19kZXY6IGxpcmNfdW5yZWdpc3Rlcl9kcml2ZXI6ICIKKwkJICAgICAgICJcIm1pbm9yICglZClcIiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgJWQhXG4iLAorCQkgICAgICAgbWlub3IsIE1BWF9JUkNUTF9ERVZJQ0VTLTEpOworCQlyZXR1cm4gLUVCQURSUUM7CisJfQorCisJaXIgPSBpcmN0bHNbbWlub3JdOworCisJbXV0ZXhfbG9jaygmbGlyY19kZXZfbG9jayk7CisKKwlpZiAoaXItPmQubWlub3IgIT0gbWlub3IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJsaXJjX2RldjogbGlyY191bnJlZ2lzdGVyX2RyaXZlcjogIgorCQkgICAgICAgIm1pbm9yICglZCkgZGV2aWNlIG5vdCByZWdpc3RlcmVkISIsIG1pbm9yKTsKKwkJbXV0ZXhfdW5sb2NrKCZsaXJjX2Rldl9sb2NrKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJLyogZW5kIHVwIHBvbGxpbmcgdGhyZWFkICovCisJaWYgKGlyLT50YXNrKQorCQlrdGhyZWFkX3N0b3AoaXItPnRhc2spOworCisJZGV2X2RiZyhpci0+ZC5kZXYsICJsaXJjX2RldjogZHJpdmVyICVzIHVucmVnaXN0ZXJlZCBmcm9tIG1pbm9yID0gJWRcbiIsCisJCWlyLT5kLm5hbWUsIGlyLT5kLm1pbm9yKTsKKworCWlyLT5hdHRhY2hlZCA9IDA7CisJaWYgKGlyLT5vcGVuKSB7CisJCWRldl9kYmcoaXItPmQuZGV2LCBMT0dIRUFEICJyZWxlYXNpbmcgb3BlbmVkIGRyaXZlclxuIiwKKwkJCWlyLT5kLm5hbWUsIGlyLT5kLm1pbm9yKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpci0+YnVmLT53YWl0X3BvbGwpOworCQltdXRleF9sb2NrKCZpci0+aXJjdGxfbG9jayk7CisJCWlyLT5kLnNldF91c2VfZGVjKGlyLT5kLmRhdGEpOworCQltb2R1bGVfcHV0KGlyLT5kLm93bmVyKTsKKwkJbXV0ZXhfdW5sb2NrKCZpci0+aXJjdGxfbG9jayk7CisJCWNkZXZfZGVsKCZpci0+Y2Rldik7CisJfSBlbHNlIHsKKwkJY2xlYW51cChpcik7CisJCWNkZXZfZGVsKCZpci0+Y2Rldik7CisJCWtmcmVlKGlyKTsKKwkJaXJjdGxzW21pbm9yXSA9IE5VTEw7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZsaXJjX2Rldl9sb2NrKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChsaXJjX3VucmVnaXN0ZXJfZHJpdmVyKTsKKworaW50IGxpcmNfZGV2X2ZvcF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBpcmN0bCAqaXI7CisJaW50IHJldHZhbCA9IDA7CisKKwlpZiAoaW1pbm9yKGlub2RlKSA+PSBNQVhfSVJDVExfREVWSUNFUykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJsaXJjX2RldiBbJWRdOiBvcGVuIHJlc3VsdCA9IC1FTk9ERVZcbiIsCisJCSAgICAgICBpbWlub3IoaW5vZGUpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmbGlyY19kZXZfbG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlpciA9IGlyY3Rsc1tpbWlub3IoaW5vZGUpXTsKKwlpZiAoIWlyKSB7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3I7CisJfQorCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlyOworCisJZGV2X2RiZyhpci0+ZC5kZXYsIExPR0hFQUQgIm9wZW4gY2FsbGVkXG4iLCBpci0+ZC5uYW1lLCBpci0+ZC5taW5vcik7CisKKwlpZiAoaXItPmQubWlub3IgPT0gTk9QTFVHKSB7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKGlyLT5vcGVuKSB7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAodHJ5X21vZHVsZV9nZXQoaXItPmQub3duZXIpKSB7CisJCSsraXItPm9wZW47CisJCXJldHZhbCA9IGlyLT5kLnNldF91c2VfaW5jKGlyLT5kLmRhdGEpOworCisJCWlmIChyZXR2YWwpIHsKKwkJCW1vZHVsZV9wdXQoaXItPmQub3duZXIpOworCQkJLS1pci0+b3BlbjsKKwkJfSBlbHNlIHsKKwkJCWxpcmNfYnVmZmVyX2NsZWFyKGlyLT5idWYpOworCQl9CisJCWlmIChpci0+dGFzaykKKwkJCXdha2VfdXBfcHJvY2Vzcyhpci0+dGFzayk7CisJfQorCitlcnJvcjoKKwlpZiAoaXIpCisJCWRldl9kYmcoaXItPmQuZGV2LCBMT0dIRUFEICJvcGVuIHJlc3VsdCA9ICVkXG4iLAorCQkJaXItPmQubmFtZSwgaXItPmQubWlub3IsIHJldHZhbCk7CisKKwltdXRleF91bmxvY2soJmxpcmNfZGV2X2xvY2spOworCisJcmV0dXJuIHJldHZhbDsKK30KK0VYUE9SVF9TWU1CT0wobGlyY19kZXZfZm9wX29wZW4pOworCitpbnQgbGlyY19kZXZfZm9wX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBpcmN0bCAqaXIgPSBpcmN0bHNbaW1pbm9yKGlub2RlKV07CisKKwlkZXZfZGJnKGlyLT5kLmRldiwgTE9HSEVBRCAiY2xvc2UgY2FsbGVkXG4iLCBpci0+ZC5uYW1lLCBpci0+ZC5taW5vcik7CisKKwlXQVJOX09OKG11dGV4X2xvY2tfa2lsbGFibGUoJmxpcmNfZGV2X2xvY2spKTsKKworCS0taXItPm9wZW47CisJaWYgKGlyLT5hdHRhY2hlZCkgeworCQlpci0+ZC5zZXRfdXNlX2RlYyhpci0+ZC5kYXRhKTsKKwkJbW9kdWxlX3B1dChpci0+ZC5vd25lcik7CisJfSBlbHNlIHsKKwkJY2xlYW51cChpcik7CisJCWlyY3Rsc1tpci0+ZC5taW5vcl0gPSBOVUxMOworCQlrZnJlZShpcik7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZsaXJjX2Rldl9sb2NrKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChsaXJjX2Rldl9mb3BfY2xvc2UpOworCit1bnNpZ25lZCBpbnQgbGlyY19kZXZfZm9wX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IGlyY3RsICppciA9IGlyY3Rsc1tpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpXTsKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJZGV2X2RiZyhpci0+ZC5kZXYsIExPR0hFQUQgInBvbGwgY2FsbGVkXG4iLCBpci0+ZC5uYW1lLCBpci0+ZC5taW5vcik7CisKKwlpZiAoIWlyLT5hdHRhY2hlZCkgeworCQltdXRleF91bmxvY2soJmlyLT5pcmN0bF9sb2NrKTsKKwkJcmV0dXJuIFBPTExFUlI7CisJfQorCisJcG9sbF93YWl0KGZpbGUsICZpci0+YnVmLT53YWl0X3BvbGwsIHdhaXQpOworCisJaWYgKGlyLT5idWYpCisJCWlmIChsaXJjX2J1ZmZlcl9lbXB0eShpci0+YnVmKSkKKwkJCXJldCA9IDA7CisJCWVsc2UKKwkJCXJldCA9IFBPTExJTiB8IFBPTExSRE5PUk07CisJZWxzZQorCQlyZXQgPSBQT0xMRVJSOworCisJZGV2X2RiZyhpci0+ZC5kZXYsIExPR0hFQUQgInBvbGwgcmVzdWx0ID0gJWRcbiIsCisJCWlyLT5kLm5hbWUsIGlyLT5kLm1pbm9yLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wobGlyY19kZXZfZm9wX3BvbGwpOworCitsb25nIGxpcmNfZGV2X2ZvcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJdW5zaWduZWQgbG9uZyBtb2RlOworCWludCByZXN1bHQgPSAwOworCXN0cnVjdCBpcmN0bCAqaXIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlkZXZfZGJnKGlyLT5kLmRldiwgTE9HSEVBRCAiaW9jdGwgY2FsbGVkICgweCV4KVxuIiwKKwkJaXItPmQubmFtZSwgaXItPmQubWlub3IsIGNtZCk7CisKKwlpZiAoaXItPmQubWlub3IgPT0gTk9QTFVHIHx8ICFpci0+YXR0YWNoZWQpIHsKKwkJZGV2X2RiZyhpci0+ZC5kZXYsIExPR0hFQUQgImlvY3RsIHJlc3VsdCA9IC1FTk9ERVZcbiIsCisJCQlpci0+ZC5uYW1lLCBpci0+ZC5taW5vcik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCW11dGV4X2xvY2soJmlyLT5pcmN0bF9sb2NrKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBMSVJDX0dFVF9GRUFUVVJFUzoKKwkJcmVzdWx0ID0gcHV0X3VzZXIoaXItPmQuZmVhdHVyZXMsICh1bnNpZ25lZCBsb25nICopYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBMSVJDX0dFVF9SRUNfTU9ERToKKwkJaWYgKCEoaXItPmQuZmVhdHVyZXMgJiBMSVJDX0NBTl9SRUNfTUFTSykpIHsKKwkJCXJlc3VsdCA9IC1FTk9TWVM7CisJCQlicmVhazsKKwkJfQorCisJCXJlc3VsdCA9IHB1dF91c2VyKExJUkNfUkVDMk1PREUKKwkJCQkgIChpci0+ZC5mZWF0dXJlcyAmIExJUkNfQ0FOX1JFQ19NQVNLKSwKKwkJCQkgICh1bnNpZ25lZCBsb25nICopYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBMSVJDX1NFVF9SRUNfTU9ERToKKwkJaWYgKCEoaXItPmQuZmVhdHVyZXMgJiBMSVJDX0NBTl9SRUNfTUFTSykpIHsKKwkJCXJlc3VsdCA9IC1FTk9TWVM7CisJCQlicmVhazsKKwkJfQorCisJCXJlc3VsdCA9IGdldF91c2VyKG1vZGUsICh1bnNpZ25lZCBsb25nICopYXJnKTsKKwkJaWYgKCFyZXN1bHQgJiYgIShMSVJDX01PREUyUkVDKG1vZGUpICYgaXItPmQuZmVhdHVyZXMpKQorCQkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJLyoKKwkJICogRklYTUU6IFdlIHNob3VsZCBhY3R1YWxseSBzZXQgdGhlIG1vZGUgc29tZWhvdyBidXQKKwkJICogZm9yIG5vdywgbGlyY19zZXJpYWwgZG9lc24ndCBzdXBwb3J0IG1vZGUgY2hhbmdpbmcgZWl0aGVyCisJCSAqLworCQlicmVhazsKKwljYXNlIExJUkNfR0VUX0xFTkdUSDoKKwkJcmVzdWx0ID0gcHV0X3VzZXIoaXItPmQuY29kZV9sZW5ndGgsICh1bnNpZ25lZCBsb25nICopYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBMSVJDX0dFVF9NSU5fVElNRU9VVDoKKwkJaWYgKCEoaXItPmQuZmVhdHVyZXMgJiBMSVJDX0NBTl9TRVRfUkVDX1RJTUVPVVQpIHx8CisJCSAgICBpci0+ZC5taW5fdGltZW91dCA9PSAwKSB7CisJCQlyZXN1bHQgPSAtRU5PU1lTOworCQkJYnJlYWs7CisJCX0KKworCQlyZXN1bHQgPSBwdXRfdXNlcihpci0+ZC5taW5fdGltZW91dCwgKHVuc2lnbmVkIGxvbmcgKilhcmcpOworCQlicmVhazsKKwljYXNlIExJUkNfR0VUX01BWF9USU1FT1VUOgorCQlpZiAoIShpci0+ZC5mZWF0dXJlcyAmIExJUkNfQ0FOX1NFVF9SRUNfVElNRU9VVCkgfHwKKwkJICAgIGlyLT5kLm1heF90aW1lb3V0ID09IDApIHsKKwkJCXJlc3VsdCA9IC1FTk9TWVM7CisJCQlicmVhazsKKwkJfQorCisJCXJlc3VsdCA9IHB1dF91c2VyKGlyLT5kLm1heF90aW1lb3V0LCAodW5zaWduZWQgbG9uZyAqKWFyZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJfQorCisJZGV2X2RiZyhpci0+ZC5kZXYsIExPR0hFQUQgImlvY3RsIHJlc3VsdCA9ICVkXG4iLAorCQlpci0+ZC5uYW1lLCBpci0+ZC5taW5vciwgcmVzdWx0KTsKKworCW11dGV4X3VubG9jaygmaXItPmlyY3RsX2xvY2spOworCisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0wobGlyY19kZXZfZm9wX2lvY3RsKTsKKworc3NpemVfdCBsaXJjX2Rldl9mb3BfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgY2hhciAqYnVmZmVyLAorCQkJICBzaXplX3QgbGVuZ3RoLAorCQkJICBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGlyY3RsICppciA9IGlyY3Rsc1tpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpXTsKKwl1bnNpZ25lZCBjaGFyIGJ1Zltpci0+Y2h1bmtfc2l6ZV07CisJaW50IHJldCA9IDAsIHdyaXR0ZW4gPSAwOworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCisJZGV2X2RiZyhpci0+ZC5kZXYsIExPR0hFQUQgInJlYWQgY2FsbGVkXG4iLCBpci0+ZC5uYW1lLCBpci0+ZC5taW5vcik7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZpci0+aXJjdGxfbG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJaWYgKCFpci0+YXR0YWNoZWQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZpci0+aXJjdGxfbG9jayk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChsZW5ndGggJSBpci0+Y2h1bmtfc2l6ZSkgeworCQlkZXZfZGJnKGlyLT5kLmRldiwgTE9HSEVBRCAicmVhZCByZXN1bHQgPSAtRUlOVkFMXG4iLAorCQkJaXItPmQubmFtZSwgaXItPmQubWlub3IpOworCQltdXRleF91bmxvY2soJmlyLT5pcmN0bF9sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiB3ZSBhZGQgb3Vyc2VsdmVzIHRvIHRoZSB0YXNrIHF1ZXVlIGJlZm9yZSBidWZmZXIgY2hlY2sKKwkgKiB0byBhdm9pZCBsb3Npbmcgc2NhbiBjb2RlIChpbiBjYXNlIHdoZW4gcXVldWUgaXMgYXdha2VuIHNvbWV3aGVyZQorCSAqIGJldHdlZW4gd2hpbGUgY29uZGl0aW9uIGNoZWNraW5nIGFuZCBzY2hlZHVsaW5nKQorCSAqLworCWFkZF93YWl0X3F1ZXVlKCZpci0+YnVmLT53YWl0X3BvbGwsICZ3YWl0KTsKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCisJLyoKKwkgKiB3aGlsZSB3ZSBkaWRuJ3QgcHJvdmlkZSAnbGVuZ3RoJyBieXRlcywgZGV2aWNlIGlzIG9wZW5lZCBpbiBibG9ja2luZworCSAqIG1vZGUgYW5kICdjb3B5X3RvX3VzZXInIGlzIGhhcHB5LCB3YWl0IGZvciBkYXRhLgorCSAqLworCXdoaWxlICh3cml0dGVuIDwgbGVuZ3RoICYmIHJldCA9PSAwKSB7CisJCWlmIChsaXJjX2J1ZmZlcl9lbXB0eShpci0+YnVmKSkgeworCQkJLyogQWNjb3JkaW5nIHRvIHRoZSByZWFkKDIpIG1hbiBwYWdlLCAnd3JpdHRlbicgY2FuIGJlCisJCQkgKiByZXR1cm5lZCBhcyBsZXNzIHRoYW4gJ2xlbmd0aCcsIGluc3RlYWQgb2YgYmxvY2tpbmcKKwkJCSAqIGFnYWluLCByZXR1cm5pbmcgLUVXT1VMREJMT0NLLCBvciByZXR1cm5pbmcKKwkJCSAqIC1FUkVTVEFSVFNZUyAqLworCQkJaWYgKHdyaXR0ZW4pCisJCQkJYnJlYWs7CisJCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCQlyZXQgPSAtRVdPVUxEQkxPQ0s7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCW11dGV4X3VubG9jaygmaXItPmlyY3RsX2xvY2spOworCQkJc2NoZWR1bGUoKTsKKwkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisKKwkJCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmlyLT5pcmN0bF9sb2NrKSkgeworCQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKKwkJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmaXItPmJ1Zi0+d2FpdF9wb2xsLCAmd2FpdCk7CisJCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkJCQlnb3RvIG91dF91bmxvY2tlZDsKKwkJCX0KKworCQkJaWYgKCFpci0+YXR0YWNoZWQpIHsKKwkJCQlyZXQgPSAtRU5PREVWOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJbGlyY19idWZmZXJfcmVhZChpci0+YnVmLCBidWYpOworCQkJcmV0ID0gY29weV90b191c2VyKCh2b2lkICopYnVmZmVyK3dyaXR0ZW4sIGJ1ZiwKKwkJCQkJICAgaXItPmJ1Zi0+Y2h1bmtfc2l6ZSk7CisJCQl3cml0dGVuICs9IGlyLT5idWYtPmNodW5rX3NpemU7CisJCX0KKwl9CisKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmaXItPmJ1Zi0+d2FpdF9wb2xsLCAmd2FpdCk7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwltdXRleF91bmxvY2soJmlyLT5pcmN0bF9sb2NrKTsKKworb3V0X3VubG9ja2VkOgorCWRldl9kYmcoaXItPmQuZGV2LCBMT0dIRUFEICJyZWFkIHJlc3VsdCA9ICVzICglZClcbiIsCisJCWlyLT5kLm5hbWUsIGlyLT5kLm1pbm9yLCByZXQgPyAiLUVGQVVMVCIgOiAiT0siLCByZXQpOworCisJcmV0dXJuIHJldCA/IHJldCA6IHdyaXR0ZW47Cit9CitFWFBPUlRfU1lNQk9MKGxpcmNfZGV2X2ZvcF9yZWFkKTsKKwordm9pZCAqbGlyY19nZXRfcGRhdGEoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJdm9pZCAqZGF0YSA9IE5VTEw7CisKKwlpZiAoZmlsZSAmJiBmaWxlLT5mX2RlbnRyeSAmJiBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSAmJgorCSAgICBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9yZGV2KSB7CisJCXN0cnVjdCBpcmN0bCAqaXI7CisJCWlyID0gaXJjdGxzW2ltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSldOworCQlkYXRhID0gaXItPmQuZGF0YTsKKwl9CisKKwlyZXR1cm4gZGF0YTsKK30KK0VYUE9SVF9TWU1CT0wobGlyY19nZXRfcGRhdGEpOworCisKK3NzaXplX3QgbGlyY19kZXZfZm9wX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpidWZmZXIsCisJCQkgICBzaXplX3QgbGVuZ3RoLCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGlyY3RsICppciA9IGlyY3Rsc1tpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpXTsKKworCWRldl9kYmcoaXItPmQuZGV2LCBMT0dIRUFEICJ3cml0ZSBjYWxsZWRcbiIsIGlyLT5kLm5hbWUsIGlyLT5kLm1pbm9yKTsKKworCWlmICghaXItPmF0dGFjaGVkKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTChsaXJjX2Rldl9mb3Bfd3JpdGUpOworCisKK3N0YXRpYyBpbnQgX19pbml0IGxpcmNfZGV2X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJbGlyY19jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgImxpcmMiKTsKKwlpZiAoSVNfRVJSKGxpcmNfY2xhc3MpKSB7CisJCXJldHZhbCA9IFBUUl9FUlIobGlyY19jbGFzcyk7CisJCXByaW50ayhLRVJOX0VSUiAibGlyY19kZXY6IGNsYXNzX2NyZWF0ZSBmYWlsZWRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCXJldHZhbCA9IGFsbG9jX2NocmRldl9yZWdpb24oJmxpcmNfYmFzZV9kZXYsIDAsIE1BWF9JUkNUTF9ERVZJQ0VTLAorCQkJCSAgICAgSVJDVExfREVWX05BTUUpOworCWlmIChyZXR2YWwpIHsKKwkJY2xhc3NfZGVzdHJveShsaXJjX2NsYXNzKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJsaXJjX2RldjogYWxsb2NfY2hyZGV2X3JlZ2lvbiBmYWlsZWRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCisJcHJpbnRrKEtFUk5fSU5GTyAibGlyY19kZXY6IElSIFJlbW90ZSBDb250cm9sIGRyaXZlciByZWdpc3RlcmVkLCAiCisJICAgICAgICJtYWpvciAlZCBcbiIsIE1BSk9SKGxpcmNfYmFzZV9kZXYpKTsKKworZXJyb3I6CisJcmV0dXJuIHJldHZhbDsKK30KKworCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBsaXJjX2Rldl9leGl0KHZvaWQpCit7CisJY2xhc3NfZGVzdHJveShsaXJjX2NsYXNzKTsKKwl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24obGlyY19iYXNlX2RldiwgTUFYX0lSQ1RMX0RFVklDRVMpOworCXByaW50ayhLRVJOX0lORk8gImxpcmNfZGV2OiBtb2R1bGUgdW5sb2FkZWRcbiIpOworfQorCittb2R1bGVfaW5pdChsaXJjX2Rldl9pbml0KTsKK21vZHVsZV9leGl0KGxpcmNfZGV2X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkxJUkMgYmFzZSBkcml2ZXIgbW9kdWxlIik7CitNT0RVTEVfQVVUSE9SKCJBcnR1ciBMaXBvd3NraSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgZGVidWdnaW5nIG1lc3NhZ2VzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL21jZXVzYi5jIGIvZHJpdmVycy9tZWRpYS9JUi9tY2V1c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGJmN2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9JUi9tY2V1c2IuYwpAQCAtMCwwICsxLDExNDMgQEAKKy8qCisgKiBEcml2ZXIgZm9yIFVTQiBXaW5kb3dzIE1lZGlhIENlbnRlciBFZC4gZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXJzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IEphcm9kIFdpbHNvbiA8amFyb2RAcmVkaGF0LmNvbT4KKyAqCisgKiBCYXNlZCBvbiB0aGUgb3JpZ2luYWwgbGlyY19tY2V1c2IgYW5kIGxpcmNfbWNldXNiMiBkcml2ZXJzLCBieSBEYW4KKyAqIENvbnRpLCBNYXJ0aW4gQmxhdHRlciBhbmQgRGFuaWVsIE1lbGFuZGVyLCB0aGUgbGF0dGVyIG9mIHdoaWNoIHdhcworICogaW4gdHVybiBhbHNvIGJhc2VkIG9uIHRoZSBsaXJjX2F0aXVzYiBkcml2ZXIgYnkgUGF1bCBNaWxsZXIuIFRoZQorICogdHdvIG1jZSBkcml2ZXJzIHdlcmUgbWVyZ2VkIGludG8gb25lIGJ5IEphcm9kIFdpbHNvbiwgd2l0aCB0cmFuc21pdAorICogc3VwcG9ydCBmb3IgdGhlIDFzdC1nZW4gZGV2aWNlIGFkZGVkIHByaW1hcmlseSBieSBQYXRyaWNrIENhbGhvdW4sCisgKiB3aXRoIGEgYml0IG9mIHR3ZWFrcyBieSBKYXJvZC4gRGVidWdnaW5nIGltcHJvdmVtZW50cyBhbmQgcHJvcGVyCisgKiBzdXBwb3J0IGZvciB3aGF0IGFwcGVhcnMgdG8gYmUgM3JkLWdlbiBoYXJkd2FyZSBhZGRlZCBieSBKYXJvZC4KKyAqIEluaXRpYWwgcG9ydCBmcm9tIGxpcmMgZHJpdmVyIHRvIGlyLWNvcmUgZHJpdmVyeSBieSBKYXJvZCwgYmFzZWQKKyAqIHBhcnRpYWxseSBvbiBhIHBvcnQgdG8gYW4gZWFybGllciBwcm9wb3NlZCBJUiBpbmZyYXN0cnVjdHVyZSBieQorICogSm9uIFNtaXJsLCB3aGljaCBpbmNsdWRlZCBlbmhhbmNlbWVudHMgYW5kIHNpbXBsaWZpY2F0aW9ucyB0byB0aGUKKyAqIGluY29taW5nIElSIGJ1ZmZlciBwYXJzaW5nIHJvdXRpbmVzLgorICoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bWVkaWEvaXItY29yZS5oPgorI2luY2x1ZGUgPG1lZGlhL2lyLWNvbW1vbi5oPgorCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCSIxLjkxIgorI2RlZmluZSBEUklWRVJfQVVUSE9SCSJKYXJvZCBXaWxzb24gPGphcm9kQHdpbHNvbmV0LmNvbT4iCisjZGVmaW5lIERSSVZFUl9ERVNDCSJXaW5kb3dzIE1lZGlhIENlbnRlciBFZC4gZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXIgIiBcCisJCQkiZGV2aWNlIGRyaXZlciIKKyNkZWZpbmUgRFJJVkVSX05BTUUJIm1jZXVzYiIKKworI2RlZmluZSBVU0JfQlVGTEVOCTMyCS8qIFVTQiByZWNlcHRpb24gYnVmZmVyIGxlbmd0aCAqLworI2RlZmluZSBVU0JfQ1RSTF9NU0dfU1oJMgkvKiBTaXplIG9mIHVzYiBjdHJsIG1zZyBvbiBnZW4xIGh3ICovCisjZGVmaW5lIE1DRV9HMV9JTklUX01TR1MgNDAJLyogSW5pdCBtZXNzYWdlcyBvbiBnZW4xIGh3IHRvIHRocm93IG91dCAqLworCisvKiBNQ0UgY29uc3RhbnRzICovCisjZGVmaW5lIE1DRV9DTURCVUZfU0laRQkzODQgLyogTUNFIENvbW1hbmQgYnVmZmVyIGxlbmd0aCAqLworI2RlZmluZSBNQ0VfVElNRV9VTklUCTUwIC8qIEFwcHJveCA1MHVzIHJlc29sdXRpb24gKi8KKyNkZWZpbmUgTUNFX0NPREVfTEVOR1RICTUgLyogTm9ybWFsIGxlbmd0aCBvZiBwYWNrZXQgKHdpdGggaGVhZGVyKSAqLworI2RlZmluZSBNQ0VfUEFDS0VUX1NJWkUJNCAvKiBOb3JtYWwgbGVuZ3RoIG9mIHBhY2tldCAod2l0aG91dCBoZWFkZXIpICovCisjZGVmaW5lIE1DRV9QQUNLRVRfSEVBREVSIDB4ODQgLyogQWN0dWFsIGhlYWRlciBmb3JtYXQgaXMgMHg4MCArIG51bV9ieXRlcyAqLworI2RlZmluZSBNQ0VfQ09OVFJPTF9IRUFERVIgMHg5RiAvKiBNQ0Ugc3RhdHVzIGhlYWRlciAqLworI2RlZmluZSBNQ0VfVFhfSEVBREVSX0xFTkdUSCAzIC8qICMgb2YgYnl0ZXMgaW4gdGhlIGluaXRpYWxpemluZyB0eCBoZWFkZXIgKi8KKyNkZWZpbmUgTUNFX01BWF9DSEFOTkVMUyAyIC8qIFR3byB0cmFuc21pdHRlcnMsIGhhcmR3YXJlIGRlcGVuZGVudD8gKi8KKyNkZWZpbmUgTUNFX0RFRkFVTFRfVFhfTUFTSyAweDAzIC8qIFZhbCBvcHRzOiBUWDE9MHgwMSwgVFgyPTB4MDIsIEFMTD0weDAzICovCisjZGVmaW5lIE1DRV9QVUxTRV9CSVQJMHg4MCAvKiBQdWxzZSBiaXQsIE1TQiBzZXQgPT0gUFVMU0UgZWxzZSBTUEFDRSAqLworI2RlZmluZSBNQ0VfUFVMU0VfTUFTSwkweDdGIC8qIFB1bHNlIG1hc2sgKi8KKyNkZWZpbmUgTUNFX01BWF9QVUxTRV9MRU5HVEggMHg3RiAvKiBMb25nZXN0IHRyYW5zbWl0dGFibGUgcHVsc2Ugc3ltYm9sICovCisjZGVmaW5lIE1DRV9QQUNLRVRfTEVOR1RIX01BU0sgIDB4MUYgLyogUGFja2V0IGxlbmd0aCBtYXNrICovCisKKworLyogbW9kdWxlIHBhcmFtZXRlcnMgKi8KKyNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCitzdGF0aWMgaW50IGRlYnVnID0gMTsKKyNlbHNlCitzdGF0aWMgaW50IGRlYnVnOworI2VuZGlmCisKKy8qIGdlbmVyYWwgY29uc3RhbnRzICovCisjZGVmaW5lIFNFTkRfRkxBR19JTl9QUk9HUkVTUwkxCisjZGVmaW5lIFNFTkRfRkxBR19DT01QTEVURQkyCisjZGVmaW5lIFJFQ1ZfRkxBR19JTl9QUk9HUkVTUwkzCisjZGVmaW5lIFJFQ1ZfRkxBR19DT01QTEVURQk0CisKKyNkZWZpbmUgTUNFVVNCX1JYCQkxCisjZGVmaW5lIE1DRVVTQl9UWAkJMgorCisjZGVmaW5lIFZFTkRPUl9QSElMSVBTCQkweDA0NzEKKyNkZWZpbmUgVkVORE9SX1NNSwkJMHgwNjA5CisjZGVmaW5lIFZFTkRPUl9UQVRVTkcJCTB4MTQ2MAorI2RlZmluZSBWRU5ET1JfR0FURVdBWQkJMHgxMDdiCisjZGVmaW5lIFZFTkRPUl9TSFVUVExFCQkweDEzMDgKKyNkZWZpbmUgVkVORE9SX1NIVVRUTEUyCQkweDA1MWMKKyNkZWZpbmUgVkVORE9SX01JVFNVTUkJCTB4MDNlZQorI2RlZmluZSBWRU5ET1JfVE9QU0VFRAkJMHgxNzg0CisjZGVmaW5lIFZFTkRPUl9SSUNBVklTSU9OCTB4MTc5ZAorI2RlZmluZSBWRU5ET1JfSVRST04JCTB4MTk1ZAorI2RlZmluZSBWRU5ET1JfRklDCQkweDE1MDkKKyNkZWZpbmUgVkVORE9SX0xHCQkweDA0M2UKKyNkZWZpbmUgVkVORE9SX01JQ1JPU09GVAkweDA0NWUKKyNkZWZpbmUgVkVORE9SX0ZPUk1PU0EJCTB4MTQ3YQorI2RlZmluZSBWRU5ET1JfRklOVEVLCQkweDE5MzQKKyNkZWZpbmUgVkVORE9SX1BJTk5BQ0xFCQkweDIzMDQKKyNkZWZpbmUgVkVORE9SX0VDUwkJMHgxMDE5CisjZGVmaW5lIFZFTkRPUl9XSVNUUk9OCQkweDBmYjgKKyNkZWZpbmUgVkVORE9SX0NPTVBSTwkJMHgxODViCisjZGVmaW5lIFZFTkRPUl9OT1JUSFNUQVIJMHgwNGViCisjZGVmaW5lIFZFTkRPUl9SRUFMVEVLCQkweDBiZGEKKyNkZWZpbmUgVkVORE9SX1RJVk8JCTB4MTA1YQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgbWNldXNiX2Rldl90YWJsZVtdID0geworCS8qIE9yaWdpbmFsIE1pY3Jvc29mdCBNQ0UgSVIgVHJhbnNjZWl2ZXIgKG9mdGVuIEhQLWJyYW5kZWQpICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9NSUNST1NPRlQsIDB4MDA2ZCkgfSwKKwkvKiBQaGlsaXBzIEluZnJhcmVkIFRyYW5zY2VpdmVyIC0gU2FoYXJhIGJyYW5kZWQgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1BISUxJUFMsIDB4MDYwOCkgfSwKKwkvKiBQaGlsaXBzIEluZnJhcmVkIFRyYW5zY2VpdmVyIC0gSFAgYnJhbmRlZCAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfUEhJTElQUywgMHgwNjBjKSB9LAorCS8qIFBoaWxpcHMgU1JNNTEwMCAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfUEhJTElQUywgMHgwNjBkKSB9LAorCS8qIFBoaWxpcHMgSW5mcmFyZWQgVHJhbnNjZWl2ZXIgLSBPbWF1cmEgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1BISUxJUFMsIDB4MDYwZikgfSwKKwkvKiBQaGlsaXBzIEluZnJhcmVkIFRyYW5zY2VpdmVyIC0gU3BpbmVsIHBsdXMgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1BISUxJUFMsIDB4MDYxMykgfSwKKwkvKiBQaGlsaXBzIGVIb21lIEluZnJhcmVkIFRyYW5zY2VpdmVyICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9QSElMSVBTLCAweDA4MTUpIH0sCisJLyogUmVhbHRlayBNQ0UgSVIgUmVjZWl2ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1JFQUxURUssIDB4MDE2MSkgfSwKKwkvKiBTTUsvVG9zaGliYSBHODNDMDAwNEQ0MTAgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1NNSywgMHgwMzFkKSB9LAorCS8qIFNNSyBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlciAoU29ueSBWQUlPKSAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfU01LLCAweDAzMjIpIH0sCisJLyogYnVuZGxlZCB3aXRoIEhhdXBwYXVnZSBQVlItMTUwICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9TTUssIDB4MDMzNCkgfSwKKwkvKiBTTUsgZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1NNSywgMHgwMzM4KSB9LAorCS8qIFRhdHVuZyBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlciAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfVEFUVU5HLCAweDkxNTApIH0sCisJLyogU2h1dHRsZSBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlciAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfU0hVVFRMRSwgMHhjMDAxKSB9LAorCS8qIFNodXR0bGUgZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1NIVVRUTEUyLCAweGMwMDEpIH0sCisJLyogR2F0ZXdheSBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlciAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfR0FURVdBWSwgMHgzMDA5KSB9LAorCS8qIE1pdHN1bWkgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX01JVFNVTUksIDB4MjUwMSkgfSwKKwkvKiBUb3BzZWVkIGVIb21lIEluZnJhcmVkIFRyYW5zY2VpdmVyICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9UT1BTRUVELCAweDAwMDEpIH0sCisJLyogVG9wc2VlZCBIUCBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlciAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfVE9QU0VFRCwgMHgwMDA2KSB9LAorCS8qIFRvcHNlZWQgZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1RPUFNFRUQsIDB4MDAwNykgfSwKKwkvKiBUb3BzZWVkIGVIb21lIEluZnJhcmVkIFRyYW5zY2VpdmVyICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9UT1BTRUVELCAweDAwMDgpIH0sCisJLyogVG9wc2VlZCBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlciAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfVE9QU0VFRCwgMHgwMDBhKSB9LAorCS8qIFRvcHNlZWQgZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1RPUFNFRUQsIDB4MDAxMSkgfSwKKwkvKiBSaWNhdmlzaW9uIGludGVybmFsIEluZnJhcmVkIFRyYW5zY2VpdmVyICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9SSUNBVklTSU9OLCAweDAwMTApIH0sCisJLyogSXRyb24gaW9uZSBMaWJyYSBRLTExICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9JVFJPTiwgMHg3MDAyKSB9LAorCS8qIEZJQyBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlciAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfRklDLCAweDkyNDIpIH0sCisJLyogTEcgZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX0xHLCAweDk4MDMpIH0sCisJLyogTWljcm9zb2Z0IE1DRSBJbmZyYXJlZCBUcmFuc2NlaXZlciAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfTUlDUk9TT0ZULCAweDAwYTApIH0sCisJLyogRm9ybW9zYSBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlciAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfRk9STU9TQSwgMHhlMDE1KSB9LAorCS8qIEZvcm1vc2EyMSAvIGVIb21lIEluZnJhcmVkIFJlY2VpdmVyICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9GT1JNT1NBLCAweGUwMTYpIH0sCisJLyogRm9ybW9zYSBhaW0gLyBUcnVzdCBNQ0UgSW5mcmFyZWQgUmVjZWl2ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX0ZPUk1PU0EsIDB4ZTAxNykgfSwKKwkvKiBGb3Jtb3NhIEluZHVzdHJpYWwgQ29tcHV0aW5nIC8gQmVhbmJhZyBFbXVsYXRpb24gRGV2aWNlICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9GT1JNT1NBLCAweGUwMTgpIH0sCisJLyogRm9ybW9zYTIxIC8gZUhvbWUgSW5mcmFyZWQgUmVjZWl2ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX0ZPUk1PU0EsIDB4ZTAzYSkgfSwKKwkvKiBGb3Jtb3NhIEluZHVzdHJpYWwgQ29tcHV0aW5nIEFJTSBJUjYwNS9BICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9GT1JNT1NBLCAweGUwM2MpIH0sCisJLyogRm9ybW9zYSBJbmR1c3RyaWFsIENvbXB1dGluZyAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfRk9STU9TQSwgMHhlMDNlKSB9LAorCS8qIEZpbnRlayBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlciAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfRklOVEVLLCAweDA2MDIpIH0sCisJLyogRmludGVrIGVIb21lIEluZnJhcmVkIFRyYW5zY2VpdmVyIChpbiB0aGUgQU9wZW4gTVA0NSkgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX0ZJTlRFSywgMHgwNzAyKSB9LAorCS8qIFBpbm5hY2xlIFJlbW90ZSBLaXQgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1BJTk5BQ0xFLCAweDAyMjUpIH0sCisJLyogRWxpdGVncm91cCBDb21wdXRlciBTeXN0ZW1zIElSICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9FQ1MsIDB4MGYzOCkgfSwKKwkvKiBXaXN0cm9uIENvcnAuIGVIb21lIEluZnJhcmVkIFJlY2VpdmVyICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9XSVNUUk9OLCAweDAwMDIpIH0sCisJLyogQ29tcHJvIEsxMDAgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX0NPTVBSTywgMHgzMDIwKSB9LAorCS8qIENvbXBybyBLMTAwIHYyICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9DT01QUk8sIDB4MzA4MikgfSwKKwkvKiBOb3J0aHN0YXIgU3lzdGVtcywgSW5jLiBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlciAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfTk9SVEhTVEFSLCAweGUwMDQpIH0sCisJLyogVGlWbyBQQyBJUiBSZWNlaXZlciAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfVElWTywgMHgyMDAwKSB9LAorCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZ2VuM19saXN0W10gPSB7CisJeyBVU0JfREVWSUNFKFZFTkRPUl9QSU5OQUNMRSwgMHgwMjI1KSB9LAorCXsgVVNCX0RFVklDRShWRU5ET1JfVE9QU0VFRCwgMHgwMDA4KSB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgbWljcm9zb2Z0X2dlbjFfbGlzdFtdID0geworCXsgVVNCX0RFVklDRShWRU5ET1JfTUlDUk9TT0ZULCAweDAwNmQpIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzdGRfdHhfbWFza19saXN0W10gPSB7CisJeyBVU0JfREVWSUNFKFZFTkRPUl9NSUNST1NPRlQsIDB4MDA2ZCkgfSwKKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1BISUxJUFMsIDB4MDYwYykgfSwKKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1NNSywgMHgwMzFkKSB9LAorCXsgVVNCX0RFVklDRShWRU5ET1JfU01LLCAweDAzMjIpIH0sCisJeyBVU0JfREVWSUNFKFZFTkRPUl9TTUssIDB4MDMzNCkgfSwKKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1RPUFNFRUQsIDB4MDAwMSkgfSwKKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1RPUFNFRUQsIDB4MDAwNikgfSwKKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1RPUFNFRUQsIDB4MDAwNykgfSwKKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1RPUFNFRUQsIDB4MDAwOCkgfSwKKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1RPUFNFRUQsIDB4MDAwYSkgfSwKKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1RPUFNFRUQsIDB4MDAxMSkgfSwKKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1BJTk5BQ0xFLCAweDAyMjUpIH0sCisJe30KK307CisKKy8qIGRhdGEgc3RydWN0dXJlIGZvciBlYWNoIHVzYiB0cmFuc2NlaXZlciAqLworc3RydWN0IG1jZXVzYl9kZXYgeworCS8qIGlyLWNvcmUgYml0cyAqLworCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyZGV2OworCXN0cnVjdCBpcl9kZXZfcHJvcHMgKnByb3BzOworCXN0cnVjdCBpcl9yYXdfZXZlbnQgcmF3aXI7CisKKwkvKiBjb3JlIGRldmljZSBiaXRzICovCisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBpbnB1dF9kZXYgKmlkZXY7CisKKwkvKiB1c2IgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OworCXN0cnVjdCB1cmIgKnVyYl9pbjsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKnVzYl9lcF9pbjsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKnVzYl9lcF9vdXQ7CisKKwkvKiBidWZmZXJzIGFuZCBkbWEgKi8KKwl1bnNpZ25lZCBjaGFyICpidWZfaW47CisJdW5zaWduZWQgaW50IGxlbl9pbjsKKwl1OCBjbWQ7CQkvKiBNQ0UgY29tbWFuZCB0eXBlICovCisJdTggcmVtOwkJLyogUmVtYWluaW5nIElSIGRhdGEgYnl0ZXMgaW4gcGFja2V0ICovCisJZG1hX2FkZHJfdCBkbWFfaW47CisJZG1hX2FkZHJfdCBkbWFfb3V0OworCisJc3RydWN0IHsKKwkJdTMyIGNvbm5lY3RlZDoxOworCQl1MzIgdHhfbWFza19pbnZlcnRlZDoxOworCQl1MzIgbWljcm9zb2Z0X2dlbjE6MTsKKwkJdTMyIHJlc2VydmVkOjI5OworCX0gZmxhZ3M7CisKKwkvKiB0cmFuc21pdCBzdXBwb3J0ICovCisJaW50IHNlbmRfZmxhZ3M7CisJdTMyIGNhcnJpZXI7CisJdW5zaWduZWQgY2hhciB0eF9tYXNrOworCisJY2hhciBuYW1lWzEyOF07CisJY2hhciBwaHlzWzY0XTsKK307CisKKy8qCisgKiBNQ0UgRGV2aWNlIENvbW1hbmQgU3RyaW5ncworICogRGV2aWNlIGNvbW1hbmQgcmVzcG9uc2VzIHZhcnkgZnJvbSBkZXZpY2UgdG8gZGV2aWNlLi4uCisgKiAtIERFVklDRV9SRVNFVCByZXNldHMgdGhlIGhhcmR3YXJlIHRvIGl0cyBkZWZhdWx0IHN0YXRlCisgKiAtIEdFVF9SRVZJU0lPTiBmZXRjaGVzIHRoZSBoYXJkd2FyZS9zb2Z0d2FyZSByZXZpc2lvbiwgY29tbW9uCisgKiAgIHJlcGxpZXMgYXJlIGZmIDBiIDQ1IGZmIDFiIDA4IGFuZCBmZiAwYiA1MCBmZiAxYiA0MgorICogLSBHRVRfQ0FSUklFUl9GUkVRIGdldHMgdGhlIGNhcnJpZXIgbW9kZSBhbmQgZnJlcXVlbmN5IG9mIHRoZQorICogICBkZXZpY2UsIHdpdGggcmVwbGllcyBpbiB0aGUgZm9ybSBvZiA5ZiAwNiBNTSBGRiwgd2hlcmUgTU0gaXMgMC0zLAorICogICBtZWFuaW5nIGNsayBvZiAxMDAwMDAwMCwgMjUwMDAwMCwgNjI1MDAwIG9yIDE1NjI1MCwgYW5kIEZGIGlzCisgKiAgICgoY2xrIC8gZnJlcXVlbmN5KSAtIDEpCisgKiAtIEdFVF9SWF9USU1FT1VUIGZldGNoZXMgdGhlIHJlY2VpdmVyIHRpbWVvdXQgaW4gdW5pdHMgb2YgNTB1cywKKyAqICAgcmVzcG9uc2UgaW4gdGhlIGZvcm0gb2YgOWYgMGMgbXNiIGxzYgorICogLSBHRVRfVFhfQklUTUFTSyBmZXRjaGVzIHRoZSB0cmFuc21pdHRlciBiaXRtYXNrLCByZXBsaWVzIGluCisgKiAgIHRoZSBmb3JtIG9mIDlmIDA4IGJtLCB3aGVyZSBibSBpcyB0aGUgYml0bWFzaworICogLSBHRVRfUlhfU0VOU09SIGZldGNoZXMgdGhlIFJYIHNlbnNvciBzZXR0aW5nIC0tIGxvbmctcmFuZ2UKKyAqICAgZ2VuZXJhbCB1c2Ugb25lIG9yIHNob3J0LXJhbmdlIGxlYXJuaW5nIG9uZSwgaW4gdGhlIGZvcm0gb2YKKyAqICAgOWYgMTQgc3MsIHdoZXJlIHNzIGlzIGVpdGhlciAwMSBmb3IgbG9uZy1yYW5nZSBvciAwMiBmb3Igc2hvcnQKKyAqIC0gU0VUX0NBUlJJRVJfRlJFUSBzZXRzIGEgbmV3IGNhcnJpZXIgbW9kZSBhbmQgZnJlcXVlbmN5CisgKiAtIFNFVF9UWF9CSVRNQVNLIHNldHMgdGhlIHRyYW5zbWl0dGVyIGJpdG1hc2sKKyAqIC0gU0VUX1JYX1RJTUVPVVQgc2V0cyB0aGUgcmVjZWl2ZXIgdGltZW91dAorICogLSBTRVRfUlhfU0VOU09SIHNldHMgd2hpY2ggcmVjZWl2ZXIgc2Vuc29yIHRvIHVzZQorICovCitzdGF0aWMgY2hhciBERVZJQ0VfUkVTRVRbXQk9IHsweDAwLCAweGZmLCAweGFhfTsKK3N0YXRpYyBjaGFyIEdFVF9SRVZJU0lPTltdCT0gezB4ZmYsIDB4MGJ9Oworc3RhdGljIGNoYXIgR0VUX1VOS05PV05bXQk9IHsweGZmLCAweDE4fTsKK3N0YXRpYyBjaGFyIEdFVF9VTktOT1dOMltdCT0gezB4OWYsIDB4MDV9Oworc3RhdGljIGNoYXIgR0VUX0NBUlJJRVJfRlJFUVtdCT0gezB4OWYsIDB4MDd9Oworc3RhdGljIGNoYXIgR0VUX1JYX1RJTUVPVVRbXQk9IHsweDlmLCAweDBkfTsKK3N0YXRpYyBjaGFyIEdFVF9UWF9CSVRNQVNLW10JPSB7MHg5ZiwgMHgxM307CitzdGF0aWMgY2hhciBHRVRfUlhfU0VOU09SW10JPSB7MHg5ZiwgMHgxNX07CisvKiBzdWIgaW4gZGVzaXJlZCB2YWx1ZXMgaW4gbG93ZXIgYnl0ZSBvciBieXRlcyBmb3IgZnVsbCBjb21tYW5kICovCisvKiBGSVhNRTogbWFrZSB1c2Ugb2YgdGhlc2UgZm9yIHRyYW5zbWl0Lgorc3RhdGljIGNoYXIgU0VUX0NBUlJJRVJfRlJFUVtdCT0gezB4OWYsIDB4MDYsIDB4MDAsIDB4MDB9Oworc3RhdGljIGNoYXIgU0VUX1RYX0JJVE1BU0tbXQk9IHsweDlmLCAweDA4LCAweDAwfTsKK3N0YXRpYyBjaGFyIFNFVF9SWF9USU1FT1VUW10JPSB7MHg5ZiwgMHgwYywgMHgwMCwgMHgwMH07CitzdGF0aWMgY2hhciBTRVRfUlhfU0VOU09SW10JPSB7MHg5ZiwgMHgxNCwgMHgwMH07CisqLworCitzdGF0aWMgdm9pZCBtY2V1c2JfZGV2X3ByaW50ZGF0YShzdHJ1Y3QgbWNldXNiX2RldiAqaXIsIGNoYXIgKmJ1ZiwKKwkJCQkgaW50IGxlbiwgYm9vbCBvdXQpCit7CisJY2hhciBjb2Rlc1tVU0JfQlVGTEVOICogMyArIDFdOworCWNoYXIgaW5vdXRbOV07CisJaW50IGk7CisJdTggY21kLCBzdWJjbWQsIGRhdGExLCBkYXRhMjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpci0+ZGV2OworCWludCBpZHggPSAwOworCisJLyogc2tpcCBtZWFuaW5nbGVzcyAweGIxIDB4NjAgaGVhZGVyIGJ5dGVzIG9uIG9yaWcgcmVjZWl2ZXIgKi8KKwlpZiAoaXItPmZsYWdzLm1pY3Jvc29mdF9nZW4xICYmICFvdXQpCisJCWlkeCA9IDI7CisKKwlpZiAobGVuIDw9IGlkeCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGxlbiAmJiBpIDwgVVNCX0JVRkxFTjsgaSsrKQorCQlzbnByaW50Zihjb2RlcyArIGkgKiAzLCA0LCAiJTAyeCAiLCBidWZbaV0gJiAweEZGKTsKKworCWRldl9pbmZvKGRldiwgIiVzeCBkYXRhOiAlcyAobGVuZ3RoPSVkKVxuIiwKKwkJIChvdXQgPyAidCIgOiAiciIpLCBjb2RlcywgbGVuKTsKKworCWlmIChvdXQpCisJCXN0cmNweShpbm91dCwgIlJlcXVlc3RcMCIpOworCWVsc2UKKwkJc3RyY3B5KGlub3V0LCAiR290XDAiKTsKKworCWNtZCAgICA9IGJ1ZltpZHhdICYgMHhmZjsKKwlzdWJjbWQgPSBidWZbaWR4ICsgMV0gJiAweGZmOworCWRhdGExICA9IGJ1ZltpZHggKyAyXSAmIDB4ZmY7CisJZGF0YTIgID0gYnVmW2lkeCArIDNdICYgMHhmZjsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSAweDAwOgorCQlpZiAoc3ViY21kID09IDB4ZmYgJiYgZGF0YTEgPT0gMHhhYSkKKwkJCWRldl9pbmZvKGRldiwgIkRldmljZSByZXNldCByZXF1ZXN0ZWRcbiIpOworCQllbHNlCisJCQlkZXZfaW5mbyhkZXYsICJVbmtub3duIGNvbW1hbmQgMHglMDJ4IDB4JTAyeFxuIiwKKwkJCQkgY21kLCBzdWJjbWQpOworCQlicmVhazsKKwljYXNlIDB4ZmY6CisJCXN3aXRjaCAoc3ViY21kKSB7CisJCWNhc2UgMHgwYjoKKwkJCWlmIChsZW4gPT0gMikKKwkJCQlkZXZfaW5mbyhkZXYsICJHZXQgaHcvc3cgcmV2P1xuIik7CisJCQllbHNlCisJCQkJZGV2X2luZm8oZGV2LCAiaHcvc3cgcmV2IDB4JTAyeCAweCUwMnggIgorCQkJCQkgIjB4JTAyeCAweCUwMnhcbiIsIGRhdGExLCBkYXRhMiwKKwkJCQkJIGJ1ZltpZHggKyA0XSwgYnVmW2lkeCArIDVdKTsKKwkJCWJyZWFrOworCQljYXNlIDB4YWE6CisJCQlkZXZfaW5mbyhkZXYsICJEZXZpY2UgcmVzZXQgcmVxdWVzdGVkXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIDB4ZmU6CisJCQlkZXZfaW5mbyhkZXYsICJQcmV2aW91cyBjb21tYW5kIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgMHgxODoKKwkJY2FzZSAweDFiOgorCQlkZWZhdWx0OgorCQkJZGV2X2luZm8oZGV2LCAiVW5rbm93biBjb21tYW5kIDB4JTAyeCAweCUwMnhcbiIsCisJCQkJIGNtZCwgc3ViY21kKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgMHg5ZjoKKwkJc3dpdGNoIChzdWJjbWQpIHsKKwkJY2FzZSAweDAzOgorCQkJZGV2X2luZm8oZGV2LCAiUGluZ1xuIik7CisJCQlicmVhazsKKwkJY2FzZSAweDA0OgorCQkJZGV2X2luZm8oZGV2LCAiUmVzcCB0byA5ZiAwNSBvZiAweCUwMnggMHglMDJ4XG4iLAorCQkJCSBkYXRhMSwgZGF0YTIpOworCQkJYnJlYWs7CisJCWNhc2UgMHgwNjoKKwkJCWRldl9pbmZvKGRldiwgIiVzIGNhcnJpZXIgbW9kZSBhbmQgZnJlcSBvZiAiCisJCQkJICIweCUwMnggMHglMDJ4XG4iLCBpbm91dCwgZGF0YTEsIGRhdGEyKTsKKwkJCWJyZWFrOworCQljYXNlIDB4MDc6CisJCQlkZXZfaW5mbyhkZXYsICJHZXQgY2FycmllciBtb2RlIGFuZCBmcmVxXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIDB4MDg6CisJCQlkZXZfaW5mbyhkZXYsICIlcyB0cmFuc21pdCBibGFzdGVyIG1hc2sgb2YgMHglMDJ4XG4iLAorCQkJCSBpbm91dCwgZGF0YTEpOworCQkJYnJlYWs7CisJCWNhc2UgMHgwYzoKKwkJCS8qIHZhbHVlIGlzIGluIHVuaXRzIG9mIDUwdXMsIHNvIHgqNTAvMTAwIG9yIHgvMiBtcyAqLworCQkJZGV2X2luZm8oZGV2LCAiJXMgcmVjZWl2ZSB0aW1lb3V0IG9mICVkIG1zXG4iLAorCQkJCSBpbm91dCwgKChkYXRhMSA8PCA4KSB8IGRhdGEyKSAvIDIpOworCQkJYnJlYWs7CisJCWNhc2UgMHgwZDoKKwkJCWRldl9pbmZvKGRldiwgIkdldCByZWNlaXZlIHRpbWVvdXRcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgMHgxMzoKKwkJCWRldl9pbmZvKGRldiwgIkdldCB0cmFuc21pdCBibGFzdGVyIG1hc2tcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgMHgxNDoKKwkJCWRldl9pbmZvKGRldiwgIiVzICVzLXJhbmdlIHJlY2VpdmUgc2Vuc29yIGluIHVzZVxuIiwKKwkJCQkgaW5vdXQsIGRhdGExID09IDB4MDIgPyAic2hvcnQiIDogImxvbmciKTsKKwkJCWJyZWFrOworCQljYXNlIDB4MTU6CisJCQlpZiAobGVuID09IDIpCisJCQkJZGV2X2luZm8oZGV2LCAiR2V0IHJlY2VpdmUgc2Vuc29yXG4iKTsKKwkJCWVsc2UKKwkJCQlkZXZfaW5mbyhkZXYsICJSZWNlaXZlZCBwdWxzZSBjb3VudCBpcyAlZFxuIiwKKwkJCQkJICgoZGF0YTEgPDwgOCkgfCBkYXRhMikpOworCQkJYnJlYWs7CisJCWNhc2UgMHhmZToKKwkJCWRldl9pbmZvKGRldiwgIkVycm9yISBIYXJkd2FyZSBpcyBsaWtlbHkgd2VkZ2VkLi4uXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIDB4MDU6CisJCWNhc2UgMHgwOToKKwkJY2FzZSAweDBmOgorCQlkZWZhdWx0OgorCQkJZGV2X2luZm8oZGV2LCAiVW5rbm93biBjb21tYW5kIDB4JTAyeCAweCUwMnhcbiIsCisJCQkJIGNtZCwgc3ViY21kKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgdXNiX2FzeW5jX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IG1jZXVzYl9kZXYgKmlyOworCWludCBsZW47CisKKwlpZiAoIXVyYikKKwkJcmV0dXJuOworCisJaXIgPSB1cmItPmNvbnRleHQ7CisJaWYgKGlyKSB7CisJCWxlbiA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKworCQlkZXZfZGJnKGlyLT5kZXYsICJjYWxsYmFjayBjYWxsZWQgKHN0YXR1cz0lZCBsZW49JWQpXG4iLAorCQkJdXJiLT5zdGF0dXMsIGxlbik7CisKKwkJaWYgKGRlYnVnKQorCQkJbWNldXNiX2Rldl9wcmludGRhdGEoaXIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJCQkgICAgIGxlbiwgdHJ1ZSk7CisJfQorCit9CisKKy8qIHJlcXVlc3QgaW5jb21pbmcgb3Igc2VuZCBvdXRnb2luZyB1c2IgcGFja2V0IC0gdXNlZCB0byBpbml0aWFsaXplIHJlbW90ZSAqLworc3RhdGljIHZvaWQgbWNlX3JlcXVlc3RfcGFja2V0KHN0cnVjdCBtY2V1c2JfZGV2ICppciwKKwkJCSAgICAgICBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwLAorCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBzaXplLCBpbnQgdXJiX3R5cGUpCit7CisJaW50IHJlczsKKwlzdHJ1Y3QgdXJiICphc3luY191cmI7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaXItPmRldjsKKwl1bnNpZ25lZCBjaGFyICphc3luY19idWY7CisKKwlpZiAodXJiX3R5cGUgPT0gTUNFVVNCX1RYKSB7CisJCWFzeW5jX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCWlmICh1bmxpa2VseSghYXN5bmNfdXJiKSkgeworCQkJZGV2X2VycihkZXYsICJFcnJvciwgY291bGRuJ3QgYWxsb2NhdGUgdXJiIVxuIik7CisJCQlyZXR1cm47CisJCX0KKworCQlhc3luY19idWYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIWFzeW5jX2J1ZikgeworCQkJZGV2X2VycihkZXYsICJFcnJvciwgY291bGRuJ3QgYWxsb2NhdGUgYnVmIVxuIik7CisJCQl1c2JfZnJlZV91cmIoYXN5bmNfdXJiKTsKKwkJCXJldHVybjsKKwkJfQorCisJCS8qIG91dGJvdW5kIGRhdGEgKi8KKwkJdXNiX2ZpbGxfaW50X3VyYihhc3luY191cmIsIGlyLT51c2JkZXYsCisJCQl1c2Jfc25kaW50cGlwZShpci0+dXNiZGV2LCBlcC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQlhc3luY19idWYsIHNpemUsICh1c2JfY29tcGxldGVfdCkgdXNiX2FzeW5jX2NhbGxiYWNrLAorCQkJaXIsIGVwLT5iSW50ZXJ2YWwpOworCQltZW1jcHkoYXN5bmNfYnVmLCBkYXRhLCBzaXplKTsKKworCX0gZWxzZSBpZiAodXJiX3R5cGUgPT0gTUNFVVNCX1JYKSB7CisJCS8qIHN0YW5kYXJkIHJlcXVlc3QgKi8KKwkJYXN5bmNfdXJiID0gaXItPnVyYl9pbjsKKwkJaXItPnNlbmRfZmxhZ3MgPSBSRUNWX0ZMQUdfSU5fUFJPR1JFU1M7CisKKwl9IGVsc2UgeworCQlkZXZfZXJyKGRldiwgIkVycm9yISBVbmtub3duIHVyYiB0eXBlICVkXG4iLCB1cmJfdHlwZSk7CisJCXJldHVybjsKKwl9CisKKwlkZXZfZGJnKGRldiwgInJlY2VpdmUgcmVxdWVzdCBjYWxsZWQgKHNpemU9JSN4KVxuIiwgc2l6ZSk7CisKKwlhc3luY191cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBzaXplOworCWFzeW5jX3VyYi0+ZGV2ID0gaXItPnVzYmRldjsKKworCXJlcyA9IHVzYl9zdWJtaXRfdXJiKGFzeW5jX3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlcykgeworCQlkZXZfZGJnKGRldiwgInJlY2VpdmUgcmVxdWVzdCBGQUlMRUQhIChyZXM9JWQpXG4iLCByZXMpOworCQlyZXR1cm47CisJfQorCWRldl9kYmcoZGV2LCAicmVjZWl2ZSByZXF1ZXN0IGNvbXBsZXRlIChyZXM9JWQpXG4iLCByZXMpOworfQorCitzdGF0aWMgdm9pZCBtY2VfYXN5bmNfb3V0KHN0cnVjdCBtY2V1c2JfZGV2ICppciwgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IHNpemUpCit7CisJbWNlX3JlcXVlc3RfcGFja2V0KGlyLCBpci0+dXNiX2VwX291dCwgZGF0YSwgc2l6ZSwgTUNFVVNCX1RYKTsKK30KKworc3RhdGljIHZvaWQgbWNlX3N5bmNfaW4oc3RydWN0IG1jZXVzYl9kZXYgKmlyLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwltY2VfcmVxdWVzdF9wYWNrZXQoaXIsIGlyLT51c2JfZXBfaW4sIGRhdGEsIHNpemUsIE1DRVVTQl9SWCk7Cit9CisKKy8qIFNlbmQgZGF0YSBvdXQgdGhlIElSIGJsYXN0ZXIgcG9ydChzKSAqLworc3RhdGljIGludCBtY2V1c2JfdHhfaXIodm9pZCAqcHJpdiwgaW50ICp0eGJ1ZiwgdTMyIG4pCit7CisJc3RydWN0IG1jZXVzYl9kZXYgKmlyID0gcHJpdjsKKwlpbnQgaSwgcmV0ID0gMDsKKwlpbnQgY291bnQsIGNtZGNvdW50ID0gMDsKKwl1bnNpZ25lZCBjaGFyICpjbWRidWY7IC8qIE1DRSBjb21tYW5kIGJ1ZmZlciAqLworCWxvbmcgc2lnbmFsX2R1cmF0aW9uID0gMDsgLyogU2luZ25hbCBsZW5ndGggaW4gdXMgKi8KKwlzdHJ1Y3QgdGltZXZhbCBzdGFydF90aW1lLCBlbmRfdGltZTsKKworCWRvX2dldHRpbWVvZmRheSgmc3RhcnRfdGltZSk7CisKKwljb3VudCA9IG4gLyBzaXplb2YoaW50KTsKKworCWNtZGJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKGludCkgKiBNQ0VfQ01EQlVGX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghY21kYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIE1DRSB0eCBpbml0IGhlYWRlciAqLworCWNtZGJ1ZltjbWRjb3VudCsrXSA9IE1DRV9DT05UUk9MX0hFQURFUjsKKwljbWRidWZbY21kY291bnQrK10gPSAweDA4OworCWNtZGJ1ZltjbWRjb3VudCsrXSA9IGlyLT50eF9tYXNrOworCisJLyogR2VuZXJhdGUgbWNlIHBhY2tldCBkYXRhICovCisJZm9yIChpID0gMDsgKGkgPCBjb3VudCkgJiYgKGNtZGNvdW50IDwgTUNFX0NNREJVRl9TSVpFKTsgaSsrKSB7CisJCXNpZ25hbF9kdXJhdGlvbiArPSB0eGJ1ZltpXTsKKwkJdHhidWZbaV0gPSB0eGJ1ZltpXSAvIE1DRV9USU1FX1VOSVQ7CisKKwkJZG8geyAvKiBsb29wIHRvIHN1cHBvcnQgbG9uZyBwdWxzZXMvc3BhY2VzID4gMTI3KjUwdXM9Ni4zNW1zICovCisKKwkJCS8qIEluc2VydCBtY2UgcGFja2V0IGhlYWRlciBldmVyeSA0dGggZW50cnkgKi8KKwkJCWlmICgoY21kY291bnQgPCBNQ0VfQ01EQlVGX1NJWkUpICYmCisJCQkgICAgKGNtZGNvdW50IC0gTUNFX1RYX0hFQURFUl9MRU5HVEgpICUKKwkJCSAgICAgTUNFX0NPREVfTEVOR1RIID09IDApCisJCQkJY21kYnVmW2NtZGNvdW50KytdID0gTUNFX1BBQ0tFVF9IRUFERVI7CisKKwkJCS8qIEluc2VydCBtY2UgcGFja2V0IGRhdGEgKi8KKwkJCWlmIChjbWRjb3VudCA8IE1DRV9DTURCVUZfU0laRSkKKwkJCQljbWRidWZbY21kY291bnQrK10gPQorCQkJCQkodHhidWZbaV0gPCBNQ0VfUFVMU0VfQklUID8KKwkJCQkJIHR4YnVmW2ldIDogTUNFX01BWF9QVUxTRV9MRU5HVEgpIHwKKwkJCQkJIChpICYgMSA/IDB4MDAgOiBNQ0VfUFVMU0VfQklUKTsKKwkJCWVsc2UgeworCQkJCXJldCA9IC1FSU5WQUw7CisJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJfSB3aGlsZSAoKHR4YnVmW2ldID4gTUNFX01BWF9QVUxTRV9MRU5HVEgpICYmCisJCQkgKHR4YnVmW2ldIC09IE1DRV9NQVhfUFVMU0VfTEVOR1RIKSk7CisJfQorCisJLyogRml4IHBhY2tldCBsZW5ndGggaW4gbGFzdCBoZWFkZXIgKi8KKwljbWRidWZbY21kY291bnQgLSAoY21kY291bnQgLSBNQ0VfVFhfSEVBREVSX0xFTkdUSCkgJSBNQ0VfQ09ERV9MRU5HVEhdID0KKwkJMHg4MCArIChjbWRjb3VudCAtIE1DRV9UWF9IRUFERVJfTEVOR1RIKSAlIE1DRV9DT0RFX0xFTkdUSCAtIDE7CisKKwkvKiBDaGVjayBpZiB3ZSBoYXZlIHJvb20gZm9yIHRoZSBlbXB0eSBwYWNrZXQgYXQgdGhlIGVuZCAqLworCWlmIChjbWRjb3VudCA+PSBNQ0VfQ01EQlVGX1NJWkUpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogQWxsIG1jZSBjb21tYW5kcyBlbmQgd2l0aCBhbiBlbXB0eSBwYWNrZXQgKDB4ODApICovCisJY21kYnVmW2NtZGNvdW50KytdID0gMHg4MDsKKworCS8qIFRyYW5zbWl0IHRoZSBjb21tYW5kIHRvIHRoZSBtY2UgZGV2aWNlICovCisJbWNlX2FzeW5jX291dChpciwgY21kYnVmLCBjbWRjb3VudCk7CisKKwkvKgorCSAqIFRoZSBsaXJjZCBnYXAgY2FsY3VsYXRpb24gZXhwZWN0cyB0aGUgd3JpdGUgZnVuY3Rpb24gdG8KKwkgKiB3YWl0IHRoZSB0aW1lIGl0IHRha2VzIGZvciB0aGUgaXJjb21tYW5kIHRvIGJlIHNlbnQgYmVmb3JlCisJICogaXQgcmV0dXJucy4KKwkgKi8KKwlkb19nZXR0aW1lb2ZkYXkoJmVuZF90aW1lKTsKKwlzaWduYWxfZHVyYXRpb24gLT0gKGVuZF90aW1lLnR2X3VzZWMgLSBzdGFydF90aW1lLnR2X3VzZWMpICsKKwkJCSAgIChlbmRfdGltZS50dl9zZWMgLSBzdGFydF90aW1lLnR2X3NlYykgKiAxMDAwMDAwOworCisJLyogZGVsYXkgd2l0aCB0aGUgY2xvc2VzdCBudW1iZXIgb2YgdGlja3MgKi8KKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCXNjaGVkdWxlX3RpbWVvdXQodXNlY3NfdG9famlmZmllcyhzaWduYWxfZHVyYXRpb24pKTsKKworb3V0OgorCWtmcmVlKGNtZGJ1Zik7CisJcmV0dXJuIHJldCA/IHJldCA6IG47Cit9CisKKy8qIFNldHMgYWN0aXZlIElSIG91dHB1dHMgLS0gbWNlIGRldmljZXMgdHlwaWNhbGx5IChhbGw/KSBoYXZlIHR3byAqLworc3RhdGljIGludCBtY2V1c2Jfc2V0X3R4X21hc2sodm9pZCAqcHJpdiwgdTMyIG1hc2spCit7CisJc3RydWN0IG1jZXVzYl9kZXYgKmlyID0gcHJpdjsKKworCWlmIChpci0+ZmxhZ3MudHhfbWFza19pbnZlcnRlZCkKKwkJaXItPnR4X21hc2sgPSAobWFzayAhPSAweDAzID8gbWFzayBeIDB4MDMgOiBtYXNrKSA8PCAxOworCWVsc2UKKwkJaXItPnR4X21hc2sgPSBtYXNrOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFNldHMgdGhlIHNlbmQgY2FycmllciBmcmVxdWVuY3kgYW5kIG1vZGUgKi8KK3N0YXRpYyBpbnQgbWNldXNiX3NldF90eF9jYXJyaWVyKHZvaWQgKnByaXYsIHUzMiBjYXJyaWVyKQoreworCXN0cnVjdCBtY2V1c2JfZGV2ICppciA9IHByaXY7CisJaW50IGNsayA9IDEwMDAwMDAwOworCWludCBwcmVzY2FsZXIgPSAwLCBkaXZpc29yID0gMDsKKwl1bnNpZ25lZCBjaGFyIGNtZGJ1Zls0XSA9IHsgMHg5ZiwgMHgwNiwgMHgwMCwgMHgwMCB9OworCisJLyogQ2FycmllciBoYXMgY2hhbmdlZCAqLworCWlmIChpci0+Y2FycmllciAhPSBjYXJyaWVyKSB7CisKKwkJaWYgKGNhcnJpZXIgPT0gMCkgeworCQkJaXItPmNhcnJpZXIgPSBjYXJyaWVyOworCQkJY21kYnVmWzJdID0gMHgwMTsKKwkJCWNtZGJ1ZlszXSA9IDB4ODA7CisJCQlkZXZfZGJnKGlyLT5kZXYsICIlczogZGlzYWJsaW5nIGNhcnJpZXIgIgorCQkJCSJtb2R1bGF0aW9uXG4iLCBfX2Z1bmNfXyk7CisJCQltY2VfYXN5bmNfb3V0KGlyLCBjbWRidWYsIHNpemVvZihjbWRidWYpKTsKKwkJCXJldHVybiBjYXJyaWVyOworCQl9CisKKwkJZm9yIChwcmVzY2FsZXIgPSAwOyBwcmVzY2FsZXIgPCA0OyArK3ByZXNjYWxlcikgeworCQkJZGl2aXNvciA9IChjbGsgPj4gKDIgKiBwcmVzY2FsZXIpKSAvIGNhcnJpZXI7CisJCQlpZiAoZGl2aXNvciA8PSAweEZGKSB7CisJCQkJaXItPmNhcnJpZXIgPSBjYXJyaWVyOworCQkJCWNtZGJ1ZlsyXSA9IHByZXNjYWxlcjsKKwkJCQljbWRidWZbM10gPSBkaXZpc29yOworCQkJCWRldl9kYmcoaXItPmRldiwgIiVzOiByZXF1ZXN0aW5nICV1IEhaICIKKwkJCQkJImNhcnJpZXJcbiIsIF9fZnVuY19fLCBjYXJyaWVyKTsKKworCQkJCS8qIFRyYW5zbWl0IG5ldyBjYXJyaWVyIHRvIG1jZSBkZXZpY2UgKi8KKwkJCQltY2VfYXN5bmNfb3V0KGlyLCBjbWRidWYsIHNpemVvZihjbWRidWYpKTsKKwkJCQlyZXR1cm4gY2FycmllcjsKKwkJCX0KKwkJfQorCisJCXJldHVybiAtRUlOVkFMOworCisJfQorCisJcmV0dXJuIGNhcnJpZXI7Cit9CisKK3N0YXRpYyB2b2lkIG1jZXVzYl9wcm9jZXNzX2lyX2RhdGEoc3RydWN0IG1jZXVzYl9kZXYgKmlyLCBpbnQgYnVmX2xlbikKK3sKKwlzdHJ1Y3QgaXJfcmF3X2V2ZW50IHJhd2lyID0geyAucHVsc2UgPSBmYWxzZSwgLmR1cmF0aW9uID0gMCB9OworCWludCBpLCBzdGFydF9pbmRleCA9IDA7CisJdTggaGRyID0gTUNFX0NPTlRST0xfSEVBREVSOworCisJLyogc2tpcCBtZWFuaW5nbGVzcyAweGIxIDB4NjAgaGVhZGVyIGJ5dGVzIG9uIG9yaWcgcmVjZWl2ZXIgKi8KKwlpZiAoaXItPmZsYWdzLm1pY3Jvc29mdF9nZW4xKQorCQlzdGFydF9pbmRleCA9IDI7CisKKwlmb3IgKGkgPSBzdGFydF9pbmRleDsgaSA8IGJ1Zl9sZW47KSB7CisJCWlmIChpci0+cmVtID09IDApIHsKKwkJCS8qIGRlY29kZSBtY2UgcGFja2V0cyBvZiB0aGUgZm9ybSAoODQpLEFBLEJCLENDLEREICovCisJCQkvKiBJUiBkYXRhIHBhY2tldHMgY2FuIHNwYW4gVVNCIG1lc3NhZ2VzIC0gcmVtICovCisJCQloZHIgPSBpci0+YnVmX2luW2ldOworCQkJaXItPnJlbSA9IChoZHIgJiBNQ0VfUEFDS0VUX0xFTkdUSF9NQVNLKTsKKwkJCWlyLT5jbWQgPSAoaGRyICYgfk1DRV9QQUNLRVRfTEVOR1RIX01BU0spOworCQkJZGV2X2RiZyhpci0+ZGV2LCAiTmV3IGRhdGEuIHJlbTogMHglMDJ4LCBjbWQ6IDB4JTAyeFxuIiwKKwkJCQlpci0+cmVtLCBpci0+Y21kKTsKKwkJCWkrKzsKKwkJfQorCisJCS8qIGRvbid0IHByb2Nlc3MgTUNFIGNvbW1hbmRzICovCisJCWlmIChoZHIgPT0gTUNFX0NPTlRST0xfSEVBREVSIHx8IGhkciA9PSAweGZmKSB7CisJCQlpci0+cmVtID0gMDsKKwkJCXJldHVybjsKKwkJfQorCisJCWZvciAoOyAoaXItPnJlbSA+IDApICYmIChpIDwgYnVmX2xlbik7IGkrKykgeworCQkJaXItPnJlbS0tOworCisJCQlyYXdpci5wdWxzZSA9ICgoaXItPmJ1Zl9pbltpXSAmIE1DRV9QVUxTRV9CSVQpICE9IDApOworCQkJcmF3aXIuZHVyYXRpb24gPSAoaXItPmJ1Zl9pbltpXSAmIE1DRV9QVUxTRV9NQVNLKQorCQkJCQkgKiBNQ0VfVElNRV9VTklUICogMTAwMDsKKworCQkJaWYgKChpci0+YnVmX2luW2ldICYgTUNFX1BVTFNFX01BU0spID09IDB4N2YpIHsKKwkJCQlpZiAoaXItPnJhd2lyLnB1bHNlID09IHJhd2lyLnB1bHNlKQorCQkJCQlpci0+cmF3aXIuZHVyYXRpb24gKz0gcmF3aXIuZHVyYXRpb247CisJCQkJZWxzZSB7CisJCQkJCWlyLT5yYXdpci5kdXJhdGlvbiA9IHJhd2lyLmR1cmF0aW9uOworCQkJCQlpci0+cmF3aXIucHVsc2UgPSByYXdpci5wdWxzZTsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQl9CisJCQlyYXdpci5kdXJhdGlvbiArPSBpci0+cmF3aXIuZHVyYXRpb247CisJCQlpci0+cmF3aXIuZHVyYXRpb24gPSAwOworCQkJaXItPnJhd2lyLnB1bHNlID0gcmF3aXIucHVsc2U7CisKKwkJCWRldl9kYmcoaXItPmRldiwgIlN0b3JpbmcgJXMgd2l0aCBkdXJhdGlvbiAlZFxuIiwKKwkJCQlyYXdpci5wdWxzZSA/ICJwdWxzZSIgOiAic3BhY2UiLAorCQkJCXJhd2lyLmR1cmF0aW9uKTsKKworCQkJaXJfcmF3X2V2ZW50X3N0b3JlKGlyLT5pZGV2LCAmcmF3aXIpOworCQl9CisKKwkJaWYgKGlyLT5idWZfaW5baV0gPT0gMHg4MCB8fCBpci0+YnVmX2luW2ldID09IDB4OWYpCisJCQlpci0+cmVtID0gMDsKKworCQlkZXZfZGJnKGlyLT5kZXYsICJjYWxsaW5nIGlyX3Jhd19ldmVudF9oYW5kbGVcbiIpOworCQlpcl9yYXdfZXZlbnRfaGFuZGxlKGlyLT5pZGV2KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG1jZXVzYl9kZXZfcmVjdihzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBtY2V1c2JfZGV2ICppcjsKKwlpbnQgYnVmX2xlbjsKKworCWlmICghdXJiKQorCQlyZXR1cm47CisKKwlpciA9IHVyYi0+Y29udGV4dDsKKwlpZiAoIWlyKSB7CisJCXVzYl91bmxpbmtfdXJiKHVyYik7CisJCXJldHVybjsKKwl9CisKKwlidWZfbGVuID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCisJaWYgKGRlYnVnKQorCQltY2V1c2JfZGV2X3ByaW50ZGF0YShpciwgdXJiLT50cmFuc2Zlcl9idWZmZXIsIGJ1Zl9sZW4sIGZhbHNlKTsKKworCWlmIChpci0+c2VuZF9mbGFncyA9PSBSRUNWX0ZMQUdfSU5fUFJPR1JFU1MpIHsKKwkJaXItPnNlbmRfZmxhZ3MgPSBTRU5EX0ZMQUdfQ09NUExFVEU7CisJCWRldl9kYmcoJmlyLT5pcmRldi0+ZGV2LCAic2V0dXAgYW5zd2VyIHJlY2VpdmVkICVkIGJ5dGVzXG4iLAorCQkJYnVmX2xlbik7CisJfQorCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCS8qIHN1Y2Nlc3MgKi8KKwljYXNlIDA6CisJCW1jZXVzYl9wcm9jZXNzX2lyX2RhdGEoaXIsIGJ1Zl9sZW4pOworCQlicmVhazsKKworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJdXNiX3VubGlua191cmIodXJiKTsKKwkJcmV0dXJuOworCisJY2FzZSAtRVBJUEU6CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKK30KKworc3RhdGljIHZvaWQgbWNldXNiX2dlbjFfaW5pdChzdHJ1Y3QgbWNldXNiX2RldiAqaXIpCit7CisJaW50IHJldDsKKwlpbnQgbWF4cCA9IGlyLT5sZW5faW47CisJc3RydWN0IGRldmljZSAqZGV2ID0gaXItPmRldjsKKwljaGFyICpkYXRhOworCisJZGF0YSA9IGt6YWxsb2MoVVNCX0NUUkxfTVNHX1NaLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpIHsKKwkJZGV2X2VycihkZXYsICIlczogbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIVxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBUaGlzIGlzIGEgc3RyYW5nZSBvbmUuIFdpbmRvd3MgaXNzdWVzIGEgc2V0IGFkZHJlc3MgdG8gdGhlIGRldmljZQorCSAqIG9uIHRoZSByZWNlaXZlIGNvbnRyb2wgcGlwZSBhbmQgZXhwZWN0IGEgY2VydGFpbiB2YWx1ZSBwYWlyIGJhY2sKKwkgKi8KKwlyZXQgPSB1c2JfY29udHJvbF9tc2coaXItPnVzYmRldiwgdXNiX3JjdmN0cmxwaXBlKGlyLT51c2JkZXYsIDApLAorCQkJICAgICAgVVNCX1JFUV9TRVRfQUREUkVTUywgVVNCX1RZUEVfVkVORE9SLCAwLCAwLAorCQkJICAgICAgZGF0YSwgVVNCX0NUUkxfTVNHX1NaLCBIWiAqIDMpOworCWRldl9kYmcoZGV2LCAiJXMgLSByZXQgPSAlZFxuIiwgX19mdW5jX18sIHJldCk7CisJZGV2X2RiZyhkZXYsICIlcyAtIGRhdGFbMF0gPSAlZCwgZGF0YVsxXSA9ICVkXG4iLAorCQlfX2Z1bmNfXywgZGF0YVswXSwgZGF0YVsxXSk7CisKKwkvKiBzZXQgZmVhdHVyZTogYml0IHJhdGUgMzg0MDAgYnBzICovCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGlyLT51c2JkZXYsIHVzYl9zbmRjdHJscGlwZShpci0+dXNiZGV2LCAwKSwKKwkJCSAgICAgIFVTQl9SRVFfU0VUX0ZFQVRVUkUsIFVTQl9UWVBFX1ZFTkRPUiwKKwkJCSAgICAgIDB4YzA0ZSwgMHgwMDAwLCBOVUxMLCAwLCBIWiAqIDMpOworCisJZGV2X2RiZyhkZXYsICIlcyAtIHJldCA9ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKworCS8qIGJSZXF1ZXN0IDQ6IHNldCBjaGFyIGxlbmd0aCB0byA4IGJpdHMgKi8KKwlyZXQgPSB1c2JfY29udHJvbF9tc2coaXItPnVzYmRldiwgdXNiX3NuZGN0cmxwaXBlKGlyLT51c2JkZXYsIDApLAorCQkJICAgICAgNCwgVVNCX1RZUEVfVkVORE9SLAorCQkJICAgICAgMHgwODA4LCAweDAwMDAsIE5VTEwsIDAsIEhaICogMyk7CisJZGV2X2RiZyhkZXYsICIlcyAtIHJldEIgPSAlZFxuIiwgX19mdW5jX18sIHJldCk7CisKKwkvKiBiUmVxdWVzdCAyOiBzZXQgaGFuZHNoYWtpbmcgdG8gdXNlIERUUi9EU1IgKi8KKwlyZXQgPSB1c2JfY29udHJvbF9tc2coaXItPnVzYmRldiwgdXNiX3NuZGN0cmxwaXBlKGlyLT51c2JkZXYsIDApLAorCQkJICAgICAgMiwgVVNCX1RZUEVfVkVORE9SLAorCQkJICAgICAgMHgwMDAwLCAweDAxMDAsIE5VTEwsIDAsIEhaICogMyk7CisJZGV2X2RiZyhkZXYsICIlcyAtIHJldEMgPSAlZFxuIiwgX19mdW5jX18sIHJldCk7CisKKwkvKiBkZXZpY2UgcmVzZXQgKi8KKwltY2VfYXN5bmNfb3V0KGlyLCBERVZJQ0VfUkVTRVQsIHNpemVvZihERVZJQ0VfUkVTRVQpKTsKKwltY2Vfc3luY19pbihpciwgTlVMTCwgbWF4cCk7CisKKwkvKiBnZXQgaHcvc3cgcmV2aXNpb24/ICovCisJbWNlX2FzeW5jX291dChpciwgR0VUX1JFVklTSU9OLCBzaXplb2YoR0VUX1JFVklTSU9OKSk7CisJbWNlX3N5bmNfaW4oaXIsIE5VTEwsIG1heHApOworCisJa2ZyZWUoZGF0YSk7Cit9OworCitzdGF0aWMgdm9pZCBtY2V1c2JfZ2VuMl9pbml0KHN0cnVjdCBtY2V1c2JfZGV2ICppcikKK3sKKwlpbnQgbWF4cCA9IGlyLT5sZW5faW47CisKKwkvKiBkZXZpY2UgcmVzZXQgKi8KKwltY2VfYXN5bmNfb3V0KGlyLCBERVZJQ0VfUkVTRVQsIHNpemVvZihERVZJQ0VfUkVTRVQpKTsKKwltY2Vfc3luY19pbihpciwgTlVMTCwgbWF4cCk7CisKKwkvKiBnZXQgaHcvc3cgcmV2aXNpb24/ICovCisJbWNlX2FzeW5jX291dChpciwgR0VUX1JFVklTSU9OLCBzaXplb2YoR0VUX1JFVklTSU9OKSk7CisJbWNlX3N5bmNfaW4oaXIsIE5VTEwsIG1heHApOworCisJLyogdW5rbm93biB3aGF0IHRoZSBuZXh0IHR3byBhY3R1YWxseSByZXR1cm4uLi4gKi8KKwltY2VfYXN5bmNfb3V0KGlyLCBHRVRfVU5LTk9XTiwgc2l6ZW9mKEdFVF9VTktOT1dOKSk7CisJbWNlX3N5bmNfaW4oaXIsIE5VTEwsIG1heHApOworCW1jZV9hc3luY19vdXQoaXIsIEdFVF9VTktOT1dOMiwgc2l6ZW9mKEdFVF9VTktOT1dOMikpOworCW1jZV9zeW5jX2luKGlyLCBOVUxMLCBtYXhwKTsKK30KKworc3RhdGljIHZvaWQgbWNldXNiX2dldF9wYXJhbWV0ZXJzKHN0cnVjdCBtY2V1c2JfZGV2ICppcikKK3sKKwlpbnQgbWF4cCA9IGlyLT5sZW5faW47CisKKwkvKiBnZXQgdGhlIGNhcnJpZXIgYW5kIGZyZXF1ZW5jeSAqLworCW1jZV9hc3luY19vdXQoaXIsIEdFVF9DQVJSSUVSX0ZSRVEsIHNpemVvZihHRVRfQ0FSUklFUl9GUkVRKSk7CisJbWNlX3N5bmNfaW4oaXIsIE5VTEwsIG1heHApOworCisJLyogZ2V0IHRoZSB0cmFuc21pdHRlciBiaXRtYXNrICovCisJbWNlX2FzeW5jX291dChpciwgR0VUX1RYX0JJVE1BU0ssIHNpemVvZihHRVRfVFhfQklUTUFTSykpOworCW1jZV9zeW5jX2luKGlyLCBOVUxMLCBtYXhwKTsKKworCS8qIGdldCByZWNlaXZlciB0aW1lb3V0IHZhbHVlICovCisJbWNlX2FzeW5jX291dChpciwgR0VUX1JYX1RJTUVPVVQsIHNpemVvZihHRVRfUlhfVElNRU9VVCkpOworCW1jZV9zeW5jX2luKGlyLCBOVUxMLCBtYXhwKTsKKworCS8qIGdldCByZWNlaXZlciBzZW5zb3Igc2V0dGluZyAqLworCW1jZV9hc3luY19vdXQoaXIsIEdFVF9SWF9TRU5TT1IsIHNpemVvZihHRVRfUlhfU0VOU09SKSk7CisJbWNlX3N5bmNfaW4oaXIsIE5VTEwsIG1heHApOworfQorCitzdGF0aWMgc3RydWN0IGlucHV0X2RldiAqbWNldXNiX2luaXRfaW5wdXRfZGV2KHN0cnVjdCBtY2V1c2JfZGV2ICppcikKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2OworCXN0cnVjdCBpcl9kZXZfcHJvcHMgKnByb3BzOworCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGlyLT5kZXY7CisJaW50IHJldCA9IC1FTk9ERVY7CisKKwlpZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFpZGV2KSB7CisJCWRldl9lcnIoZGV2LCAicmVtb3RlIGlucHV0IGRldiBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gaWRldl9hbGxvY19mYWlsZWQ7CisJfQorCisJcmV0ID0gLUVOT01FTTsKKwlwcm9wcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpcl9kZXZfcHJvcHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByb3BzKSB7CisJCWRldl9lcnIoZGV2LCAicmVtb3RlIGlyIGRldiBwcm9wcyBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gcHJvcHNfYWxsb2NfZmFpbGVkOworCX0KKworCWlyZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlyX2lucHV0X2RldiksIEdGUF9LRVJORUwpOworCWlmICghaXJkZXYpIHsKKwkJZGV2X2VycihkZXYsICJyZW1vdGUgaXIgaW5wdXQgZGV2IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBpcl9kZXZfYWxsb2NfZmFpbGVkOworCX0KKworCXNucHJpbnRmKGlyLT5uYW1lLCBzaXplb2YoaXItPm5hbWUpLCAiTWVkaWEgQ2VudGVyIEVkLiBlSG9tZSAiCisJCSAiSW5mcmFyZWQgUmVtb3RlIFRyYW5zY2VpdmVyICglMDR4OiUwNHgpIiwKKwkJIGxlMTZfdG9fY3B1KGlyLT51c2JkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQkgbGUxNl90b19jcHUoaXItPnVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKKworCWlkZXYtPm5hbWUgPSBpci0+bmFtZTsKKwl1c2JfbWFrZV9wYXRoKGlyLT51c2JkZXYsIGlyLT5waHlzLCBzaXplb2YoaXItPnBoeXMpKTsKKwlzdHJsY2F0KGlyLT5waHlzLCAiL2lucHV0MCIsIHNpemVvZihpci0+cGh5cykpOworCWlkZXYtPnBoeXMgPSBpci0+cGh5czsKKworCXByb3BzLT5wcml2ID0gaXI7CisJcHJvcHMtPmRyaXZlcl90eXBlID0gUkNfRFJJVkVSX0lSX1JBVzsKKwlwcm9wcy0+YWxsb3dlZF9wcm90b3MgPSBJUl9UWVBFX0FMTDsKKwlwcm9wcy0+c190eF9tYXNrID0gbWNldXNiX3NldF90eF9tYXNrOworCXByb3BzLT5zX3R4X2NhcnJpZXIgPSBtY2V1c2Jfc2V0X3R4X2NhcnJpZXI7CisJcHJvcHMtPnR4X2lyID0gbWNldXNiX3R4X2lyOworCisJaXItPnByb3BzID0gcHJvcHM7CisJaXItPmlyZGV2ID0gaXJkZXY7CisKKwlpbnB1dF9zZXRfZHJ2ZGF0YShpZGV2LCBpcmRldik7CisKKwlyZXQgPSBpcl9pbnB1dF9yZWdpc3RlcihpZGV2LCBSQ19NQVBfUkM2X01DRSwgcHJvcHMsIERSSVZFUl9OQU1FKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgInJlbW90ZSBpbnB1dCBkZXZpY2UgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKKwkJZ290byBpcmRldl9mYWlsZWQ7CisJfQorCisJcmV0dXJuIGlkZXY7CisKK2lyZGV2X2ZhaWxlZDoKKwlrZnJlZShpcmRldik7Citpcl9kZXZfYWxsb2NfZmFpbGVkOgorCWtmcmVlKHByb3BzKTsKK3Byb3BzX2FsbG9jX2ZhaWxlZDoKKwlpbnB1dF9mcmVlX2RldmljZShpZGV2KTsKK2lkZXZfYWxsb2NfZmFpbGVkOgorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtY2V1c2JfZGV2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZGVzYzsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwX2luID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwX291dCA9IE5VTEw7CisJc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqY29uZmlnOworCXN0cnVjdCBtY2V1c2JfZGV2ICppciA9IE5VTEw7CisJaW50IHBpcGUsIG1heHAsIGk7CisJY2hhciBidWZbNjNdLCBuYW1lWzEyOF0gPSAiIjsKKwlib29sIGlzX2dlbjM7CisJYm9vbCBpc19taWNyb3NvZnRfZ2VuMTsKKwlib29sIHR4X21hc2tfaW52ZXJ0ZWQ7CisKKwlkZXZfZGJnKCZpbnRmLT5kZXYsICI6ICVzIGNhbGxlZFxuIiwgX19mdW5jX18pOworCisJY29uZmlnID0gZGV2LT5hY3Rjb25maWc7CisJaWRlc2MgID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisKKwlpc19nZW4zID0gdXNiX21hdGNoX2lkKGludGYsIGdlbjNfbGlzdCkgPyAxIDogMDsKKwlpc19taWNyb3NvZnRfZ2VuMSA9IHVzYl9tYXRjaF9pZChpbnRmLCBtaWNyb3NvZnRfZ2VuMV9saXN0KSA/IDEgOiAwOworCXR4X21hc2tfaW52ZXJ0ZWQgPSB1c2JfbWF0Y2hfaWQoaW50Ziwgc3RkX3R4X21hc2tfbGlzdCkgPyAwIDogMTsKKworCS8qIHN0ZXAgdGhyb3VnaCB0aGUgZW5kcG9pbnRzIHRvIGZpbmQgZmlyc3QgYnVsayBpbiBhbmQgb3V0IGVuZHBvaW50ICovCisJZm9yIChpID0gMDsgaSA8IGlkZXNjLT5kZXNjLmJOdW1FbmRwb2ludHM7ICsraSkgeworCQllcCA9ICZpZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYzsKKworCQlpZiAoKGVwX2luID09IE5VTEwpCisJCQkmJiAoKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKQorCQkJICAgID09IFVTQl9ESVJfSU4pCisJCQkmJiAoKChlcC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCisJCQkgICAgPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSykKKwkJCXx8ICgoZXAtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQorCQkJICAgID09IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkpKSB7CisKKwkJCWVwX2luID0gZXA7CisJCQllcF9pbi0+Ym1BdHRyaWJ1dGVzID0gVVNCX0VORFBPSU5UX1hGRVJfSU5UOworCQkJZXBfaW4tPmJJbnRlcnZhbCA9IDE7CisJCQlkZXZfZGJnKCZpbnRmLT5kZXYsICI6IGFjY2VwdGFibGUgaW5ib3VuZCBlbmRwb2ludCAiCisJCQkJImZvdW5kXG4iKTsKKwkJfQorCisJCWlmICgoZXBfb3V0ID09IE5VTEwpCisJCQkmJiAoKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKQorCQkJICAgID09IFVTQl9ESVJfT1VUKQorCQkJJiYgKCgoZXAtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQorCQkJICAgID09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspCisJCQl8fCAoKGVwLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKKwkJCSAgICA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpKSkgeworCisJCQllcF9vdXQgPSBlcDsKKwkJCWVwX291dC0+Ym1BdHRyaWJ1dGVzID0gVVNCX0VORFBPSU5UX1hGRVJfSU5UOworCQkJZXBfb3V0LT5iSW50ZXJ2YWwgPSAxOworCQkJZGV2X2RiZygmaW50Zi0+ZGV2LCAiOiBhY2NlcHRhYmxlIG91dGJvdW5kIGVuZHBvaW50ICIKKwkJCQkiZm91bmRcbiIpOworCQl9CisJfQorCWlmIChlcF9pbiA9PSBOVUxMKSB7CisJCWRldl9kYmcoJmludGYtPmRldiwgIjogaW5ib3VuZCBhbmQvb3IgZW5kcG9pbnQgbm90IGZvdW5kXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcGlwZSA9IHVzYl9yY3ZpbnRwaXBlKGRldiwgZXBfaW4tPmJFbmRwb2ludEFkZHJlc3MpOworCW1heHAgPSB1c2JfbWF4cGFja2V0KGRldiwgcGlwZSwgdXNiX3BpcGVvdXQocGlwZSkpOworCisJaXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWNldXNiX2RldiksIEdGUF9LRVJORUwpOworCWlmICghaXIpCisJCWdvdG8gbWVtX2FsbG9jX2ZhaWw7CisKKwlpci0+YnVmX2luID0gdXNiX2FsbG9jX2NvaGVyZW50KGRldiwgbWF4cCwgR0ZQX0FUT01JQywgJmlyLT5kbWFfaW4pOworCWlmICghaXItPmJ1Zl9pbikKKwkJZ290byBidWZfaW5fYWxsb2NfZmFpbDsKKworCWlyLT51cmJfaW4gPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghaXItPnVyYl9pbikKKwkJZ290byB1cmJfaW5fYWxsb2NfZmFpbDsKKworCWlyLT51c2JkZXYgPSBkZXY7CisJaXItPmRldiA9ICZpbnRmLT5kZXY7CisJaXItPmxlbl9pbiA9IG1heHA7CisJaXItPmZsYWdzLm1pY3Jvc29mdF9nZW4xID0gaXNfbWljcm9zb2Z0X2dlbjE7CisJaXItPmZsYWdzLnR4X21hc2tfaW52ZXJ0ZWQgPSB0eF9tYXNrX2ludmVydGVkOworCisJLyogU2F2aW5nIHVzYiBpbnRlcmZhY2UgZGF0YSBmb3IgdXNlIGJ5IHRoZSB0cmFuc21pdHRlciByb3V0aW5lICovCisJaXItPnVzYl9lcF9pbiA9IGVwX2luOworCWlyLT51c2JfZXBfb3V0ID0gZXBfb3V0OworCisJaWYgKGRldi0+ZGVzY3JpcHRvci5pTWFudWZhY3R1cmVyCisJICAgICYmIHVzYl9zdHJpbmcoZGV2LCBkZXYtPmRlc2NyaXB0b3IuaU1hbnVmYWN0dXJlciwKKwkJCSAgYnVmLCBzaXplb2YoYnVmKSkgPiAwKQorCQlzdHJsY3B5KG5hbWUsIGJ1Ziwgc2l6ZW9mKG5hbWUpKTsKKwlpZiAoZGV2LT5kZXNjcmlwdG9yLmlQcm9kdWN0CisJICAgICYmIHVzYl9zdHJpbmcoZGV2LCBkZXYtPmRlc2NyaXB0b3IuaVByb2R1Y3QsCisJCQkgIGJ1Ziwgc2l6ZW9mKGJ1ZikpID4gMCkKKwkJc25wcmludGYobmFtZSArIHN0cmxlbihuYW1lKSwgc2l6ZW9mKG5hbWUpIC0gc3RybGVuKG5hbWUpLAorCQkJICIgJXMiLCBidWYpOworCisJaXItPmlkZXYgPSBtY2V1c2JfaW5pdF9pbnB1dF9kZXYoaXIpOworCWlmICghaXItPmlkZXYpCisJCWdvdG8gaW5wdXRfZGV2X2ZhaWw7CisKKwkvKiBmbHVzaCBidWZmZXJzIG9uIHRoZSBkZXZpY2UgKi8KKwltY2Vfc3luY19pbihpciwgTlVMTCwgbWF4cCk7CisJbWNlX3N5bmNfaW4oaXIsIE5VTEwsIG1heHApOworCisJLyogd2lyZSB1cCBpbmJvdW5kIGRhdGEgaGFuZGxlciAqLworCXVzYl9maWxsX2ludF91cmIoaXItPnVyYl9pbiwgZGV2LCBwaXBlLCBpci0+YnVmX2luLAorCQltYXhwLCAodXNiX2NvbXBsZXRlX3QpIG1jZXVzYl9kZXZfcmVjdiwgaXIsIGVwX2luLT5iSW50ZXJ2YWwpOworCWlyLT51cmJfaW4tPnRyYW5zZmVyX2RtYSA9IGlyLT5kbWFfaW47CisJaXItPnVyYl9pbi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisKKwkvKiBpbml0aWFsaXplIGRldmljZSAqLworCWlmIChpci0+ZmxhZ3MubWljcm9zb2Z0X2dlbjEpCisJCW1jZXVzYl9nZW4xX2luaXQoaXIpOworCWVsc2UgaWYgKCFpc19nZW4zKQorCQltY2V1c2JfZ2VuMl9pbml0KGlyKTsKKworCW1jZXVzYl9nZXRfcGFyYW1ldGVycyhpcik7CisKKwltY2V1c2Jfc2V0X3R4X21hc2soaXIsIE1DRV9ERUZBVUxUX1RYX01BU0spOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBpcik7CisKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiUmVnaXN0ZXJlZCAlcyBvbiB1c2IlZDolZFxuIiwgbmFtZSwKKwkJIGRldi0+YnVzLT5idXNudW0sIGRldi0+ZGV2bnVtKTsKKworCXJldHVybiAwOworCisJLyogRXJyb3ItaGFuZGxpbmcgcGF0aCAqLworaW5wdXRfZGV2X2ZhaWw6CisJdXNiX2ZyZWVfdXJiKGlyLT51cmJfaW4pOwordXJiX2luX2FsbG9jX2ZhaWw6CisJdXNiX2ZyZWVfY29oZXJlbnQoZGV2LCBtYXhwLCBpci0+YnVmX2luLCBpci0+ZG1hX2luKTsKK2J1Zl9pbl9hbGxvY19mYWlsOgorCWtmcmVlKGlyKTsKK21lbV9hbGxvY19mYWlsOgorCWRldl9lcnIoJmludGYtPmRldiwgIiVzOiBkZXZpY2Ugc2V0dXAgZmFpbGVkIVxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIC1FTk9NRU07Cit9CisKKworc3RhdGljIHZvaWQgX19kZXZleGl0IG1jZXVzYl9kZXZfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgbWNldXNiX2RldiAqaXIgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKworCWlmICghaXIpCisJCXJldHVybjsKKworCWlyLT51c2JkZXYgPSBOVUxMOworCWlyX2lucHV0X3VucmVnaXN0ZXIoaXItPmlkZXYpOworCXVzYl9raWxsX3VyYihpci0+dXJiX2luKTsKKwl1c2JfZnJlZV91cmIoaXItPnVyYl9pbik7CisJdXNiX2ZyZWVfY29oZXJlbnQoZGV2LCBpci0+bGVuX2luLCBpci0+YnVmX2luLCBpci0+ZG1hX2luKTsKKworCWtmcmVlKGlyKTsKK30KKworc3RhdGljIGludCBtY2V1c2JfZGV2X3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQoreworCXN0cnVjdCBtY2V1c2JfZGV2ICppciA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJZGV2X2luZm8oaXItPmRldiwgInN1c3BlbmRcbiIpOworCXVzYl9raWxsX3VyYihpci0+dXJiX2luKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtY2V1c2JfZGV2X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgbWNldXNiX2RldiAqaXIgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCWRldl9pbmZvKGlyLT5kZXYsICJyZXN1bWVcbiIpOworCWlmICh1c2Jfc3VibWl0X3VyYihpci0+dXJiX2luLCBHRlBfQVRPTUlDKSkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBtY2V1c2JfZGV2X2RyaXZlciA9IHsKKwkubmFtZSA9CQlEUklWRVJfTkFNRSwKKwkucHJvYmUgPQltY2V1c2JfZGV2X3Byb2JlLAorCS5kaXNjb25uZWN0ID0JbWNldXNiX2Rldl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JbWNldXNiX2Rldl9zdXNwZW5kLAorCS5yZXN1bWUgPQltY2V1c2JfZGV2X3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0JbWNldXNiX2Rldl9yZXN1bWUsCisJLmlkX3RhYmxlID0JbWNldXNiX2Rldl90YWJsZQorfTsKKworc3RhdGljIGludCBfX2luaXQgbWNldXNiX2Rldl9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9yZWdpc3RlcigmbWNldXNiX2Rldl9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUKKwkJICAgICAgICI6IHVzYiByZWdpc3RlciBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG1jZXVzYl9kZXZfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZtY2V1c2JfZGV2X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG1jZXVzYl9kZXZfaW5pdCk7Cittb2R1bGVfZXhpdChtY2V1c2JfZGV2X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBtY2V1c2JfZGV2X3RhYmxlKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfZm9wcy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMKaW5kZXggNzM2NGI5NjQuLjRkYTJhNTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYwpAQCAtNTcsNyArNTcsNyBAQAogCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7CiAKIAl2aWRlb2J1Zl93YWl0b24oJmJ1Zi0+dmIsMCwwKTsKLQl2aWRlb2J1Zl9kbWFfdW5tYXAocSwgZG1hKTsKKwl2aWRlb2J1Zl9kbWFfdW5tYXAocS0+ZGV2LCBkbWEpOwogCXZpZGVvYnVmX2RtYV9mcmVlKGRtYSk7CiAJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZiaS5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92YmkuYwppbmRleCA3NGUyYjU2Li44MjI0YzMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfdmJpLmMKQEAgLTM3NSw3ICszNzUsNyBAQAogCiBzdGF0aWMgaW50IHZiaV9vcGVuKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmggPSAoc3RydWN0IHNhYTcxNDZfZmggKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNhYTcxNDZfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCiAJdTMyIGFyYnRyX2N0cmwJPSBzYWE3MTQ2X3JlYWQoZGV2LCBQQ0lfQlRfVjEpOwogCWludCByZXQgPSAwOwpAQCAtNDM3LDcgKzQzNyw3IEBACiAKIHN0YXRpYyB2b2lkIHZiaV9jbG9zZShzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IHNhYTcxNDZfZmggKmZoID0gKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzYWE3MTQ2X2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CiAJREVCX1ZCSSgoImRldjolcCwgZmg6JXBcbiIsZGV2LGZoKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfdmlkZW8uYwppbmRleCBiOGIyYzU1Li5hMjEyYTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92aWRlby5jCkBAIC0xMzcwLDcgKzEzNzAsNyBAQAogCiBzdGF0aWMgaW50IHZpZGVvX29wZW4oc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBzYWE3MTQ2X2ZoICpmaCA9IChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNhYTcxNDZfZm9ybWF0ICpzZm10OwogCiAJZmgtPnZpZGVvX2ZtdC53aWR0aCA9IDM4NDsKQEAgLTEzOTQsNyArMTM5NCw3IEBACiAKIHN0YXRpYyB2b2lkIHZpZGVvX2Nsb3NlKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmggPSAoc3RydWN0IHNhYTcxNDZfZmggKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNhYTcxNDZfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKIAlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEgPSAmZmgtPnZpZGVvX3E7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKaW5kZXggYjJlMTU0NS4uNzk1NWU0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKQEAgLTEyNDksNyArMTI0OSw3IEBACiAJCQkJICAgICBzdHJ1Y3QgdGRhMTgyNzFfY29uZmlnICpjZmcpCiB7CiAJc3RydWN0IHRkYTE4MjcxX3ByaXYgKnByaXYgPSBOVUxMOwotCWludCBpbnN0YW5jZTsKKwlpbnQgaW5zdGFuY2UsIHJldDsKIAogCW11dGV4X2xvY2soJnRkYTE4MjcxX2xpc3RfbXV0ZXgpOwogCkBAIC0xMjY4LDEwICsxMjY4LDEyIEBACiAJCXByaXYtPmNhbF9pbml0aWFsaXplZCA9IGZhbHNlOwogCQltdXRleF9pbml0KCZwcml2LT5sb2NrKTsKIAotCQlpZiAodGRhX2ZhaWwodGRhMTgyNzFfZ2V0X2lkKGZlKSkpCisJCXJldCA9IHRkYTE4MjcxX2dldF9pZChmZSk7CisJCWlmICh0ZGFfZmFpbChyZXQpKQogCQkJZ290byBmYWlsOwogCi0JCWlmICh0ZGFfZmFpbCh0ZGExODI3MV9hc3NpZ25fbWFwX2xheW91dChmZSkpKQorCQlyZXQgPSB0ZGExODI3MV9hc3NpZ25fbWFwX2xheW91dChmZSk7CisJCWlmICh0ZGFfZmFpbChyZXQpKQogCQkJZ290byBmYWlsOwogCiAJCW11dGV4X2xvY2soJnByaXYtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXNpbXBsZS5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXNpbXBsZS5jCmluZGV4IDhhYmJjYzUuLmY4ZWUyOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci1zaW1wbGUuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItc2ltcGxlLmMKQEAgLTUyNCw2ICs1MjQsNyBAQAogCQlidWZmZXJbM10gPSAweDM5OwogCQlicmVhazsKIAljYXNlIFRVTkVSX1BISUxJUFNfRlExMjE2TE1FX01LMzoKKwljYXNlIFRVTkVSX1BISUxJUFNfRlExMjM2X01LNToKIAkJdHVuZXJfZXJyKCJUaGlzIHR1bmVyIGRvZXNuJ3QgaGF2ZSBGTVxuIik7CiAJCS8qIFNldCB0aGUgbG93IGJhbmQgZm9yIHNhbml0eSwgc2luY2UgaXQgY292ZXJzIDg4LTEwOCBNSHogKi8KIAkJYnVmZmVyWzNdID0gMHgwMTsKQEAgLTU0NSwxNCArNTQ2LDExIEBACiAJc3RydWN0IHR1bmVyX3NpbXBsZV9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CiAJdTggY29uZmlnLCBjYjsKIAl1MTYgZGl2OwotCXN0cnVjdCB0dW5lcnR5cGUgKnR1bjsKIAl1OCBidWZmZXJbNF07CiAJaW50IHJjLCBJRlBDb2ZmLCBpOwogCWVudW0gcGFyYW1fdHlwZSBkZXNpcmVkX3R5cGU7CiAJc3RydWN0IHR1bmVyX3BhcmFtcyAqdF9wYXJhbXM7CiAKLQl0dW4gPSBwcml2LT50dW47Ci0KIAkvKiBJRlBDb2ZmID0gVmlkZW8gSW50ZXJtZWRpYXRlIEZyZXF1ZW5jeSAtIFZpZjoKIAkJOTQwICA9MTYqNTguNzUgIE5UU0MvSiAoSmFwYW4pCiAJCTczMiAgPTE2KjQ1Ljc1ICBNL04gU1RECmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItdHlwZXMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci10eXBlcy5jCmluZGV4IGQ5YWFhY2EuLjU4YTUxM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci10eXBlcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci10eXBlcy5jCkBAIC0xMzUzLDYgKzEzNTMsMTcgQEAKIAl9LAogfTsKIAorLyogLS0tLS0tLS0tLS0tIFRVTkVSX1BISUxJUFNfRlExMjM2X01LNSAtIFBoaWxpcHMgTlRTQyAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfcGhpbGlwc19mcTEyMzZfbWs1X3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfTlRTQywKKwkJLnJhbmdlcyA9IHR1bmVyX2ZtMTIzNl9tazNfbnRzY19yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2ZtMTIzNl9tazNfbnRzY19yYW5nZXMpLAorCQkuaGFzX3RkYTk4ODcgPSAxLCAvKiBUREE5ODg1LCBubyBGTSByYWRpbyAqLworCX0sCit9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IHR1bmVydHlwZSB0dW5lcnNbXSA9IHsKQEAgLTE4MjYsNiArMTgzNywxMSBAQAogCQkucGFyYW1zID0gdHVuZXJfc29ueV9idGZfcHhuMDF6X3BhcmFtcywKIAkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfc29ueV9idGZfcHhuMDF6X3BhcmFtcyksCiAJfSwKKwlbVFVORVJfUEhJTElQU19GUTEyMzZfTUs1XSA9IHsgLyogTlRTQywgVERBOTg4NSwgbm8gRk0gcmFkaW8gKi8KKwkJLm5hbWUgICA9ICJQaGlsaXBzIEZRMTIzNiBNSzUiLAorCQkucGFyYW1zID0gdHVuZXJfcGhpbGlwc19mcTEyMzZfbWs1X3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGhpbGlwc19mcTEyMzZfbWs1X3BhcmFtcyksCisJfSwKIH07CiBFWFBPUlRfU1lNQk9MKHR1bmVycyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy94YzUwMDAuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy94YzUwMDAuYwppbmRleCA0MzIwMDNkLi5kMmIyYzEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM1MDAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3hjNTAwMC5jCkBAIC0yMTcsNiArMjE3LDcgQEAKIAlyZXR1cm4gWENfUkVTVUxUX1NVQ0NFU1M7CiB9CiAKKyNpZiAwCiAvKiBUaGlzIHJvdXRpbmUgaXMgbmV2ZXIgdXNlZCBiZWNhdXNlIHRoZSBvbmx5IHRpbWUgd2UgcmVhZCBkYXRhIGZyb20gdGhlCiAgICBpMmMgYnVzIGlzIHdoZW4gd2UgcmVhZCByZWdpc3RlcnMsIGFuZCB3ZSB3YW50IHRoYXQgdG8gYmUgYW4gYXRvbWljIGkyYwogICAgdHJhbnNhY3Rpb24gaW4gY2FzZSB3ZSBhcmUgb24gYSBtdWx0aS1tYXN0ZXIgYnVzICovCkBAIC0yMzEsNiArMjMyLDI3IEBACiAJfQogCXJldHVybiAwOwogfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgeGM1MDAwX3JlYWRyZWcoc3RydWN0IHhjNTAwMF9wcml2ICpwcml2LCB1MTYgcmVnLCB1MTYgKnZhbCkKK3sKKwl1OCBidWZbMl0gPSB7IHJlZyA+PiA4LCByZWcgJiAweGZmIH07CisJdTggYnZhbFsyXSA9IHsgMCwgMCB9OworCXN0cnVjdCBpMmNfbXNnIG1zZ1syXSA9IHsKKwkJeyAuYWRkciA9IHByaXYtPmkyY19wcm9wcy5hZGRyLAorCQkJLmZsYWdzID0gMCwgLmJ1ZiA9ICZidWZbMF0sIC5sZW4gPSAyIH0sCisJCXsgLmFkZHIgPSBwcml2LT5pMmNfcHJvcHMuYWRkciwKKwkJCS5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gJmJ2YWxbMF0sIC5sZW4gPSAyIH0sCisJfTsKKworCWlmIChpMmNfdHJhbnNmZXIocHJpdi0+aTJjX3Byb3BzLmFkYXAsIG1zZywgMikgIT0gMikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ4YzUwMDA6IEkyQyByZWFkIGZhaWxlZFxuIik7CisJCXJldHVybiAtRVJFTU9URUlPOworCX0KKworCSp2YWwgPSAoYnZhbFswXSA8PCA4KSB8IGJ2YWxbMV07CisJcmV0dXJuIFhDX1JFU1VMVF9TVUNDRVNTOworfQogCiBzdGF0aWMgdm9pZCB4Y193YWl0KGludCB3YWl0X21zKQogewpAQCAtMjc1LDIwICsyOTcsMTQgQEAKIAlpZiAocmVzdWx0ID09IFhDX1JFU1VMVF9TVUNDRVNTKSB7CiAJCS8qIHdhaXQgZm9yIGJ1c3kgZmxhZyB0byBjbGVhciAqLwogCQl3aGlsZSAoKFdhdGNoRG9nVGltZXIgPiAwKSAmJiAocmVzdWx0ID09IFhDX1JFU1VMVF9TVUNDRVNTKSkgewotCQkJYnVmWzBdID0gMDsKLQkJCWJ1ZlsxXSA9IFhSRUdfQlVTWTsKLQotCQkJcmVzdWx0ID0geGNfc2VuZF9pMmNfZGF0YShwcml2LCBidWYsIDIpOworCQkJcmVzdWx0ID0geGM1MDAwX3JlYWRyZWcocHJpdiwgWFJFR19CVVNZLCAodTE2ICopYnVmKTsKIAkJCWlmIChyZXN1bHQgPT0gWENfUkVTVUxUX1NVQ0NFU1MpIHsKLQkJCQlyZXN1bHQgPSB4Y19yZWFkX2kyY19kYXRhKHByaXYsIGJ1ZiwgMik7Ci0JCQkJaWYgKHJlc3VsdCA9PSBYQ19SRVNVTFRfU1VDQ0VTUykgewotCQkJCQlpZiAoKGJ1ZlswXSA9PSAwKSAmJiAoYnVmWzFdID09IDApKSB7Ci0JCQkJCQkvKiBidXN5IGZsYWcgY2xlYXJlZCAqLworCQkJCWlmICgoYnVmWzBdID09IDApICYmIChidWZbMV0gPT0gMCkpIHsKKwkJCQkJLyogYnVzeSBmbGFnIGNsZWFyZWQgKi8KIAkJCQkJYnJlYWs7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQl4Y193YWl0KDUpOyAvKiB3YWl0IDUgbXMgKi8KLQkJCQkJCVdhdGNoRG9nVGltZXItLTsKLQkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCXhjX3dhaXQoNSk7IC8qIHdhaXQgNSBtcyAqLworCQkJCQlXYXRjaERvZ1RpbWVyLS07CiAJCQkJfQogCQkJfQogCQl9CkBAIC01MjYsMjUgKzU0Miw2IEBACiAJcmV0dXJuIGZvdW5kOwogfQogCi1zdGF0aWMgaW50IHhjNTAwMF9yZWFkcmVnKHN0cnVjdCB4YzUwMDBfcHJpdiAqcHJpdiwgdTE2IHJlZywgdTE2ICp2YWwpCi17Ci0JdTggYnVmWzJdID0geyByZWcgPj4gOCwgcmVnICYgMHhmZiB9OwotCXU4IGJ2YWxbMl0gPSB7IDAsIDAgfTsKLQlzdHJ1Y3QgaTJjX21zZyBtc2dbMl0gPSB7Ci0JCXsgLmFkZHIgPSBwcml2LT5pMmNfcHJvcHMuYWRkciwKLQkJCS5mbGFncyA9IDAsIC5idWYgPSAmYnVmWzBdLCAubGVuID0gMiB9LAotCQl7IC5hZGRyID0gcHJpdi0+aTJjX3Byb3BzLmFkZHIsCi0JCQkuZmxhZ3MgPSBJMkNfTV9SRCwgLmJ1ZiA9ICZidmFsWzBdLCAubGVuID0gMiB9LAotCX07Ci0KLQlpZiAoaTJjX3RyYW5zZmVyKHByaXYtPmkyY19wcm9wcy5hZGFwLCBtc2csIDIpICE9IDIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAieGM1MDAwOiBJMkMgcmVhZCBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVSRU1PVEVJTzsKLQl9Ci0KLQkqdmFsID0gKGJ2YWxbMF0gPDwgOCkgfCBidmFsWzFdOwotCXJldHVybiBYQ19SRVNVTFRfU1VDQ0VTUzsKLX0KIAogc3RhdGljIGludCB4YzUwMDBfZnd1cGxvYWQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3RfY2EuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jYS5jCmluZGV4IDc3MDI0M2MuLmNmODcwNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jYS5jCkBAIC01NjUsNyArNTY1LDcgQEAKIAlpbnQgcmVzdWx0ID0gMDsKIAogCWxvY2tfa2VybmVsKCk7Ci0JZHZiZGV2ID0gKHN0cnVjdCBkdmJfZGV2aWNlICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCWR2YmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdGF0ZSA9IChzdHJ1Y3QgZHN0X3N0YXRlICopZHZiZGV2LT5wcml2OwogCXBfY2FfbWVzc2FnZSA9IGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgY2FfbXNnKSwgR0ZQX0tFUk5FTCk7CiAJcF9jYV9zbG90X2luZm8gPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IGNhX3Nsb3RfaW5mbyksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZG14ZGV2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYwppbmRleCA0MjU4NjJmLi4wMDQyMzA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYwpAQCAtMjA3LDcgKzIwNyw3IEBACiAJfQogCS8qIFRPRE8gKi8KIAlkdmJkZXYtPnVzZXJzLS07Ci0JaWYoZHZiZGV2LT51c2Vycz09LTEgJiYgZG14ZGV2LT5leGl0PT0xKSB7CisJaWYgKGR2YmRldi0+dXNlcnMgPT0gMSAmJiBkbXhkZXYtPmV4aXQgPT0gMSkgewogCQlmb3BzX3B1dChmaWxlLT5mX29wKTsKIAkJZmlsZS0+Zl9vcCA9IE5VTEw7CiAJCW11dGV4X3VubG9jaygmZG14ZGV2LT5tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfY2FfZW41MDIyMS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2NhX2VuNTAyMjEuYwppbmRleCBlZjI1OWEwLi5jYjk3ZTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfY2FfZW41MDIyMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9jYV9lbjUwMjIxLmMKQEAgLTEzMTgsOCArMTMxOCwxMSBAQAogCiAJCWZyYWdidWZbMF0gPSBjb25uZWN0aW9uX2lkOwogCQlmcmFnYnVmWzFdID0gKChmcmFncG9zICsgZnJhZ2xlbikgPCBjb3VudCkgPyAweDgwIDogMHgwMDsKLQkJaWYgKChzdGF0dXMgPSBjb3B5X2Zyb21fdXNlcihmcmFnYnVmICsgMiwgYnVmICsgZnJhZ3BvcywgZnJhZ2xlbikpICE9IDApCisJCXN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKGZyYWdidWYgKyAyLCBidWYgKyBmcmFncG9zLCBmcmFnbGVuKTsKKwkJaWYgKHN0YXR1cykgeworCQkJc3RhdHVzID0gLUVGQVVMVDsKIAkJCWdvdG8gZXhpdDsKKwkJfQogCiAJCXRpbWVvdXQgPSBqaWZmaWVzICsgSFogLyAyOwogCQl3cml0dGVuID0gMDsKQEAgLTE0OTQsOCArMTQ5NywxMSBAQAogCiAJaGRyWzBdID0gc2xvdDsKIAloZHJbMV0gPSBjb25uZWN0aW9uX2lkOwotCWlmICgoc3RhdHVzID0gY29weV90b191c2VyKGJ1ZiwgaGRyLCAyKSkgIT0gMCkKKwlzdGF0dXMgPSBjb3B5X3RvX3VzZXIoYnVmLCBoZHIsIDIpOworCWlmIChzdGF0dXMpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKIAkJZ290byBleGl0OworCX0KIAlzdGF0dXMgPSBwa3RsZW47CiAKIGV4aXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZGVtdXguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9kZW11eC5jCmluZGV4IDk3N2RkYmEuLjRhODhhM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9kZW11eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9kZW11eC5jCkBAIC0xMTMwLDEzICsxMTMwLDkgQEAKIAlpZiAoKCFkZW11eC0+ZnJvbnRlbmQpIHx8IChkZW11eC0+ZnJvbnRlbmQtPnNvdXJjZSAhPSBETVhfTUVNT1JZX0ZFKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlwID0ga21hbGxvYyhjb3VudCwgR0ZQX1VTRVIpOwotCWlmICghcCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JaWYgKGNvcHlfZnJvbV91c2VyKHAsIGJ1ZiwgY291bnQpKSB7Ci0JCWtmcmVlKHApOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9CisJcCA9IG1lbWR1cF91c2VyKGJ1ZiwgY291bnQpOworCWlmIChJU19FUlIocCkpCisJCXJldHVybiBQVFJfRVJSKHApOwogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmR2YmRlbXV4LT5tdXRleCkpIHsKIAkJa2ZyZWUocCk7CiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCmluZGV4IDQ0YWU4OWUuLjRkNDViN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCkBAIC00NjUsNyArNDY1LDcgQEAKIAlpZiAoKGZlcHJpdi0+c3RhdGUgJiBGRVNUQVRFX1NFQVJDSElOR19GQVNUKSB8fCAoZmVwcml2LT5zdGF0ZSAmIEZFU1RBVEVfUkVUVU5FKSkgewogCQlmZXByaXYtPmRlbGF5ID0gZmVwcml2LT5taW5fZGVsYXk7CiAKLQkJLyogcGVmb3JtIGEgdHVuZSAqLworCQkvKiBwZXJmb3JtIGEgdHVuZSAqLwogCQlyZXR2YWwgPSBkdmJfZnJvbnRlbmRfc3d6aWd6YWdfYXV0b3R1bmUoZmUsCiAJCQkJCQkJZmVwcml2LT5jaGVja193cmFwcGVkKTsKIAkJaWYgKHJldHZhbCA8IDApIHsKQEAgLTc5MSw3ICs3OTEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkdmJfZnJvbnRlbmRfZ2V0X2ZyZXF1ZW55X2xpbWl0cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKK3N0YXRpYyB2b2lkIGR2Yl9mcm9udGVuZF9nZXRfZnJlcXVlbmN5X2xpbWl0cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAkJCQkJdTMyICpmcmVxX21pbiwgdTMyICpmcmVxX21heCkKIHsKIAkqZnJlcV9taW4gPSBtYXgoZmUtPm9wcy5pbmZvLmZyZXF1ZW5jeV9taW4sIGZlLT5vcHMudHVuZXJfb3BzLmluZm8uZnJlcXVlbmN5X21pbik7CkBAIC04MTUsNyArODE1LDcgQEAKIAl1MzIgZnJlcV9tYXg7CiAKIAkvKiByYW5nZSBjaGVjazogZnJlcXVlbmN5ICovCi0JZHZiX2Zyb250ZW5kX2dldF9mcmVxdWVueV9saW1pdHMoZmUsICZmcmVxX21pbiwgJmZyZXFfbWF4KTsKKwlkdmJfZnJvbnRlbmRfZ2V0X2ZyZXF1ZW5jeV9saW1pdHMoZmUsICZmcmVxX21pbiwgJmZyZXFfbWF4KTsKIAlpZiAoKGZyZXFfbWluICYmIHBhcm1zLT5mcmVxdWVuY3kgPCBmcmVxX21pbikgfHwKIAkgICAgKGZyZXFfbWF4ICYmIHBhcm1zLT5mcmVxdWVuY3kgPiBmcmVxX21heCkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiRFZCOiBhZGFwdGVyICVpIGZyb250ZW5kICVpIGZyZXF1ZW5jeSAldSBvdXQgb2YgcmFuZ2UgKCV1Li4ldSlcbiIsCkBAIC0xNjI3LDcgKzE2MjcsNyBAQAogCWNhc2UgRkVfR0VUX0lORk86IHsKIAkJc3RydWN0IGR2Yl9mcm9udGVuZF9pbmZvKiBpbmZvID0gcGFyZzsKIAkJbWVtY3B5KGluZm8sICZmZS0+b3BzLmluZm8sIHNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX2luZm8pKTsKLQkJZHZiX2Zyb250ZW5kX2dldF9mcmVxdWVueV9saW1pdHMoZmUsICZpbmZvLT5mcmVxdWVuY3lfbWluLCAmaW5mby0+ZnJlcXVlbmN5X21heCk7CisJCWR2Yl9mcm9udGVuZF9nZXRfZnJlcXVlbmN5X2xpbWl0cyhmZSwgJmluZm8tPmZyZXF1ZW5jeV9taW4sICZpbmZvLT5mcmVxdWVuY3lfbWF4KTsKIAogCQkvKiBGb3JjZSB0aGUgQ0FOX0lOVkVSU0lPTl9BVVRPIGJpdCBvbi4gSWYgdGhlIGZyb250ZW5kIGRvZXNuJ3QKIAkJICogZG8gaXQsIGl0IGlzIGRvbmUgZm9yIGl0LiAqLwpAQCAtMTcyNiw3ICsxNzI2LDcgQEAKIAkJCSAqIChzdHYwMjk5IGZvciBpbnN0YW5jZSkgdGFrZSBsb25nZXIgdGhhbiA4bXNlYyB0bwogCQkJICogcmVzcG9uZCB0byBhIHNldF92b2x0YWdlIGNvbW1hbmQuICBUaG9zZSBzd2l0Y2hlcwogCQkJICogbmVlZCBjdXN0b20gcm91dGluZXMgdG8gc3dpdGNoIHByb3Blcmx5LiAgRm9yIGFsbAotCQkJICogb3RoZXIgZnJvbnRlbmRzLCB0aGUgZm9sbG93aW5nIHNob3VsZSB3b3JrIG9rLgorCQkJICogb3RoZXIgZnJvbnRlbmRzLCB0aGUgZm9sbG93aW5nIHNob3VsZCB3b3JrIG9rLgogCQkJICogRGlzaCBuZXR3b3JrIGxlZ2FjeSBzd2l0Y2hlcyAoYXMgdXNlZCBieSBEaXNoNTAwKQogCQkJICogYXJlIGNvbnRyb2xsZWQgYnkgc2VuZGluZyA5LWJpdCBjb21tYW5kIHdvcmRzCiAJCQkgKiBzcGFjZWQgOG1zZWMgYXBhcnQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2E4MDAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYTgwMC5jCmluZGV4IGI2Y2JiMWQuLmE1YzM2MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYTgwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYTgwMC5jCkBAIC0zNyw3ICszNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgaXJfY29kZXNfYTgwMF90YWJsZVtdID0geworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19hODAwX3RhYmxlW10gPSB7CiAJeyAweDAyMDEsIEtFWV9QUk9HMSB9LCAgICAgICAvKiBTT1VSQ0UgKi8KIAl7IDB4MDIwMCwgS0VZX1BPV0VSIH0sICAgICAgIC8qIFBPV0VSICovCiAJeyAweDAyMDUsIEtFWV8xIH0sICAgICAgICAgICAvKiAxICovCkBAIC0xNDYsMTAgKzE0NiwxMiBAQAogCS5wb3dlcl9jdHJsICAgICAgID0gYTgwMF9wb3dlcl9jdHJsLAogCS5pZGVudGlmeV9zdGF0ZSAgID0gYTgwMF9pZGVudGlmeV9zdGF0ZSwKIAotCS5yY19pbnRlcnZhbCAgICAgID0gREVGQVVMVF9SQ19JTlRFUlZBTCwKLQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2E4MDBfdGFibGUsCi0JLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2E4MDBfdGFibGUpLAotCS5yY19xdWVyeSAgICAgICAgID0gYTgwMF9yY19xdWVyeSwKKwkucmMubGVnYWN5ID0geworCQkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCisJCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfYTgwMF90YWJsZSwKKwkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2E4MDBfdGFibGUpLAorCQkucmNfcXVlcnkgICAgICAgICA9IGE4MDBfcmNfcXVlcnksCisJfSwKIAogCS5pMmNfYWxnbyAgICAgICAgID0gJmRpYnVzYl9pMmNfYWxnbywKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMDUtcmVtb3RlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAwNS1yZW1vdGUuYwppbmRleCBiNDFmYTg3Li42OTYyMDdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAwNS1yZW1vdGUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAwNS1yZW1vdGUuYwpAQCAtMzMsNyArMzMsNyBAQAogCiAjZGVmaW5lIGRlYl9kZWNvZGUoYXJncy4uLikgICBkcHJpbnRrKGR2Yl91c2JfYWY5MDA1X3JlbW90ZV9kZWJ1ZywweDAxLGFyZ3MpCiAKLXN0cnVjdCBkdmJfdXNiX3JjX2tleSBpcl9jb2Rlc19hZjkwMDVfdGFibGVbXSA9IHsKK3N0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19hZjkwMDVfdGFibGVbXSA9IHsKIAogCXsweDAxYjcsIEtFWV9QT1dFUn0sCiAJezB4MDFhNywgS0VZX1ZPTFVNRVVQfSwKQEAgLTEzMyw3ICsxMzMsNyBAQAogCQkJZm9yIChpID0gMDsgaSA8IGlyX2NvZGVzX2FmOTAwNV90YWJsZV9zaXplOyBpKyspIHsKIAkJCQlpZiAocmM1X2N1c3RvbSgmaXJfY29kZXNfYWY5MDA1X3RhYmxlW2ldKSA9PSBjdXN0CiAJCQkJICAgICYmIHJjNV9kYXRhKCZpcl9jb2Rlc19hZjkwMDVfdGFibGVbaV0pID09IGRhdCkgewotCQkJCQkqZXZlbnQgPSBpcl9jb2Rlc19hZjkwMDVfdGFibGVbaV0uZXZlbnQ7CisJCQkJCSpldmVudCA9IGlyX2NvZGVzX2FmOTAwNV90YWJsZVtpXS5rZXljb2RlOwogCQkJCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7CiAJCQkJCWRlYl9kZWNvZGUKIAkJCQkJICAgICgia2V5IHByZXNzZWQsIGV2ZW50ICV4XG4iLCAqZXZlbnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMDUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDA1LmMKaW5kZXggY2ZkNjEwNy4uOGVjYmE4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMDUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAwNS5jCkBAIC01NCw1MCArNTQsNiBAQAogCWludCBsZWRfc3RhdGU7CiB9OwogCi1zdGF0aWMgaW50IGFmOTAwNV91c2JfZ2VuZXJpY19ydyhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHU4ICp3YnVmLCB1MTYgd2xlbiwKLQkJCSAgdTggKnJidWYsIHUxNiBybGVuLCBpbnQgZGVsYXlfbXMpCi17Ci0JaW50IGFjdGxlbiwgcmV0ID0gLUVOT01FTTsKLQotCWlmICh3YnVmID09IE5VTEwgfHwgd2xlbiA9PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICgocmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkLT51c2JfbXV0ZXgpKSkKLQkJcmV0dXJuIHJldDsKLQotCWRlYl94ZmVyKCI+Pj4gIik7Ci0JZGVidWdfZHVtcCh3YnVmLCB3bGVuLCBkZWJfeGZlcik7Ci0KLQlyZXQgPSB1c2JfYnVsa19tc2coZC0+dWRldiwgdXNiX3NuZGJ1bGtwaXBlKGQtPnVkZXYsCi0JCQkJCQkgICAgMiksIHdidWYsIHdsZW4sCi0JCQkgICAmYWN0bGVuLCAyMDAwKTsKLQotCWlmIChyZXQpCi0JCWVycigiYnVsayBtZXNzYWdlIGZhaWxlZDogJWQgKCVkLyVkKSIsIHJldCwgd2xlbiwgYWN0bGVuKTsKLQllbHNlCi0JCXJldCA9IGFjdGxlbiAhPSB3bGVuID8gLTEgOiAwOwotCi0JLyogYW4gYW5zd2VyIGlzIGV4cGVjdGVkLCBhbmQgbm8gZXJyb3IgYmVmb3JlICovCi0JaWYgKCFyZXQgJiYgcmJ1ZiAmJiBybGVuKSB7Ci0JCWlmIChkZWxheV9tcykKLQkJCW1zbGVlcChkZWxheV9tcyk7Ci0KLQkJcmV0ID0gdXNiX2J1bGtfbXNnKGQtPnVkZXYsIHVzYl9yY3ZidWxrcGlwZShkLT51ZGV2LAotCQkJCQkJCSAgICAweDAxKSwgcmJ1ZiwKLQkJCQkgICBybGVuLCAmYWN0bGVuLCAyMDAwKTsKLQotCQlpZiAocmV0KQotCQkJZXJyKCJyZWN2IGJ1bGsgbWVzc2FnZSBmYWlsZWQ6ICVkIiwgcmV0KTsKLQkJZWxzZSB7Ci0JCQlkZWJfeGZlcigiPDw8ICIpOwotCQkJZGVidWdfZHVtcChyYnVmLCBhY3RsZW4sIGRlYl94ZmVyKTsKLQkJfQotCX0KLQotCW11dGV4X3VubG9jaygmZC0+dXNiX211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgaW50IGFmOTAwNV9nZW5lcmljX3JlYWRfd3JpdGUoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1MTYgcmVnLAogCQkJICAgICAgaW50IHJlYWR3cml0ZSwgaW50IHR5cGUsIHU4ICogdmFsdWVzLCBpbnQgbGVuKQogewpAQCAtMTQ2LDcgKzEwMiw3IEBACiAJCW9idWZbOF0gPSB2YWx1ZXNbMF07CiAJb2J1Zls3XSA9IGNvbW1hbmQ7CiAKLQlyZXQgPSBhZjkwMDVfdXNiX2dlbmVyaWNfcncoZCwgb2J1ZiwgMTYsIGlidWYsIDE3LCAwKTsKKwlyZXQgPSBkdmJfdXNiX2dlbmVyaWNfcncoZCwgb2J1ZiwgMTYsIGlidWYsIDE3LCAwKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC01MzQsNyArNDkwLDcgQEAKIAlidWZbNl0gPSB3bGVuOwogCWZvciAoaSA9IDA7IGkgPCB3bGVuOyBpKyspCiAJCWJ1Zls3ICsgaV0gPSB3YnVmW2ldOwotCXJldCA9IGFmOTAwNV91c2JfZ2VuZXJpY19ydyhkLCBidWYsIHdsZW4gKyA3LCBpYnVmLCBybGVuICsgNywgMCk7CisJcmV0ID0gZHZiX3VzYl9nZW5lcmljX3J3KGQsIGJ1Ziwgd2xlbiArIDcsIGlidWYsIHJsZW4gKyA3LCAwKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCWlmIChpYnVmWzJdICE9IDB4MjcpIHsKQEAgLTU4MSw3ICs1MzcsNyBAQAogCiAJb2J1Zls2XSA9IGxlbjsKIAlvYnVmWzddID0gYWRkcmVzczsKLQlyZXQgPSBhZjkwMDVfdXNiX2dlbmVyaWNfcncoZCwgb2J1ZiwgMTYsIGlidWYsIDE0LCAwKTsKKwlyZXQgPSBkdmJfdXNiX2dlbmVyaWNfcncoZCwgb2J1ZiwgMTYsIGlidWYsIDE0LCAwKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCWlmIChpYnVmWzJdICE9IDB4MmIpIHsKQEAgLTg4Miw3ICs4MzgsNyBAQAogCW9idWZbMl0gPSAweDQwOwkJLyogcmVhZCByZW1vdGUgKi8KIAlvYnVmWzNdID0gMTsJCS8qIHJlc3Qgb2YgcGFja2V0IGxlbmd0aCAqLwogCW9idWZbNF0gPSBzdC0+c2VxdWVuY2UrKzsJLyogc2VxdWVuY2UgbnVtYmVyICovCi0JcmV0ID0gYWY5MDA1X3VzYl9nZW5lcmljX3J3KGQsIG9idWYsIDUsIGlidWYsIDI1NiwgMCk7CisJcmV0ID0gZHZiX3VzYl9nZW5lcmljX3J3KGQsIG9idWYsIDUsIGlidWYsIDI1NiwgMCk7CiAJaWYgKHJldCkgewogCQllcnIoInJjIHF1ZXJ5IGZhaWxlZCIpOwogCQlyZXR1cm4gcmV0OwpAQCAtMTA2OSwxMCArMTAyNSwxNSBAQAogCiAJLmkyY19hbGdvID0gJmFmOTAwNV9pMmNfYWxnbywKIAotCS5yY19pbnRlcnZhbCA9IDIwMCwKLQkucmNfa2V5X21hcCA9IE5VTEwsCi0JLnJjX2tleV9tYXBfc2l6ZSA9IDAsCi0JLnJjX3F1ZXJ5ID0gYWY5MDA1X3JjX3F1ZXJ5LAorCS5yYy5sZWdhY3kgPSB7CisJCS5yY19pbnRlcnZhbCA9IDIwMCwKKwkJLnJjX2tleV9tYXAgPSBOVUxMLAorCQkucmNfa2V5X21hcF9zaXplID0gMCwKKwkJLnJjX3F1ZXJ5ID0gYWY5MDA1X3JjX3F1ZXJ5LAorCX0sCisKKwkuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQgICAgICAgICAgPSAyLAorCS5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludF9yZXNwb25zZSA9IDEsCiAKIAkubnVtX2RldmljZV9kZXNjcyA9IDMsCiAJLmRldmljZXMgPSB7CkBAIC0xMTEzLDEwICsxMDc0LDEwIEBACiAJcmNfa2V5c19zaXplID0gc3ltYm9sX3JlcXVlc3QoaXJfY29kZXNfYWY5MDA1X3RhYmxlX3NpemUpOwogCWlmIChyY19kZWNvZGUgPT0gTlVMTCB8fCByY19rZXlzID09IE5VTEwgfHwgcmNfa2V5c19zaXplID09IE5VTEwpIHsKIAkJZXJyKCJhZjkwMDVfcmNfZGVjb2RlIGZ1bmN0aW9uIG5vdCBmb3VuZCwgZGlzYWJsaW5nIHJlbW90ZSIpOwotCQlhZjkwMDVfcHJvcGVydGllcy5yY19xdWVyeSA9IE5VTEw7CisJCWFmOTAwNV9wcm9wZXJ0aWVzLnJjLmxlZ2FjeS5yY19xdWVyeSA9IE5VTEw7CiAJfSBlbHNlIHsKLQkJYWY5MDA1X3Byb3BlcnRpZXMucmNfa2V5X21hcCA9IHJjX2tleXM7Ci0JCWFmOTAwNV9wcm9wZXJ0aWVzLnJjX2tleV9tYXBfc2l6ZSA9ICpyY19rZXlzX3NpemU7CisJCWFmOTAwNV9wcm9wZXJ0aWVzLnJjLmxlZ2FjeS5yY19rZXlfbWFwID0gcmNfa2V5czsKKwkJYWY5MDA1X3Byb3BlcnRpZXMucmMubGVnYWN5LnJjX2tleV9tYXBfc2l6ZSA9ICpyY19rZXlzX3NpemU7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAwNS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMDUuaAppbmRleCAwODhlNzA4Li4zYzFmYmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAwNS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDA1LmgKQEAgLTM0OTAsNyArMzQ5MCw3IEBACiAvKiByZW1vdGUgY29udHJvbCBkZWNvZGVyICovCiBleHRlcm4gaW50IGFmOTAwNV9yY19kZWNvZGUoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1OCAqIGRhdGEsIGludCBsZW4sCiAJCQkgICAgdTMyICogZXZlbnQsIGludCAqc3RhdGUpOwotZXh0ZXJuIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBpcl9jb2Rlc19hZjkwMDVfdGFibGVbXTsKK2V4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfYWY5MDA1X3RhYmxlW107CiBleHRlcm4gaW50IGlyX2NvZGVzX2FmOTAwNV90YWJsZV9zaXplOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5jCmluZGV4IDY2YzdjM2UuLmVhMWVkM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuYwpAQCAtNzM1LDcgKzczNSw3IEBACiAKIHN0cnVjdCBhZjkwMTVfc2V0dXAgewogCXVuc2lnbmVkIGludCBpZDsKLQlzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgKnJjX2tleV9tYXA7CisJc3RydWN0IGlyX3NjYW5jb2RlICpyY19rZXlfbWFwOwogCXVuc2lnbmVkIGludCByY19rZXlfbWFwX3NpemU7CiAJdTggKmlyX3RhYmxlOwogCXVuc2lnbmVkIGludCBpcl90YWJsZV9zaXplOwpAQCAtODQ3LDggKzg0Nyw4IEBACiAJfQogCiAJaWYgKHRhYmxlKSB7Ci0JCXByb3BzLT5yY19rZXlfbWFwID0gdGFibGUtPnJjX2tleV9tYXA7Ci0JCXByb3BzLT5yY19rZXlfbWFwX3NpemUgPSB0YWJsZS0+cmNfa2V5X21hcF9zaXplOworCQlwcm9wcy0+cmMubGVnYWN5LnJjX2tleV9tYXAgPSB0YWJsZS0+cmNfa2V5X21hcDsKKwkJcHJvcHMtPnJjLmxlZ2FjeS5yY19rZXlfbWFwX3NpemUgPSB0YWJsZS0+cmNfa2V5X21hcF9zaXplOwogCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0gdGFibGUtPmlyX3RhYmxlOwogCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPSB0YWJsZS0+aXJfdGFibGVfc2l6ZTsKIAl9CkBAIC04NzgsOCArODc4LDggQEAKIAlkZWJfaW5mbygiJXM6IElSIG1vZGU6JWRcbiIsIF9fZnVuY19fLCB2YWwpOwogCWZvciAoaSA9IDA7IGkgPCBhZjkwMTVfcHJvcGVydGllc19jb3VudDsgaSsrKSB7CiAJCWlmICh2YWwgPT0gQUY5MDE1X0lSX01PREVfRElTQUJMRUQpIHsKLQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPSBOVUxMOwotCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplICA9IDA7CisJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yYy5sZWdhY3kucmNfa2V5X21hcCA9IE5VTEw7CisJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yYy5sZWdhY3kucmNfa2V5X21hcF9zaXplICA9IDA7CiAJCX0gZWxzZQogCQkJYWY5MDE1X3NldF9yZW1vdGVfY29uZmlnKHVkZXYsICZhZjkwMTVfcHJvcGVydGllc1tpXSk7CiAJfQpAQCAtMTA2Myw3ICsxMDYzLDcgQEAKIHsKIAl1OCBidWZbOF07CiAJc3RydWN0IHJlcV90IHJlcSA9IHtHRVRfSVJfQ09ERSwgMCwgMCwgMCwgMCwgc2l6ZW9mKGJ1ZiksIGJ1Zn07Ci0Jc3RydWN0IGR2Yl91c2JfcmNfa2V5ICprZXltYXAgPSBkLT5wcm9wcy5yY19rZXlfbWFwOworCXN0cnVjdCBpcl9zY2FuY29kZSAqa2V5bWFwID0gZC0+cHJvcHMucmMubGVnYWN5LnJjX2tleV9tYXA7CiAJaW50IGksIHJldDsKIAogCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKQEAgLTEwNzUsMTAgKzEwNzUsMTAgQEAKIAkqZXZlbnQgPSAwOwogCSpzdGF0ZSA9IFJFTU9URV9OT19LRVlfUFJFU1NFRDsKIAotCWZvciAoaSA9IDA7IGkgPCBkLT5wcm9wcy5yY19rZXlfbWFwX3NpemU7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBkLT5wcm9wcy5yYy5sZWdhY3kucmNfa2V5X21hcF9zaXplOyBpKyspIHsKIAkJaWYgKCFidWZbMV0gJiYgcmM1X2N1c3RvbSgma2V5bWFwW2ldKSA9PSBidWZbMF0gJiYKIAkJICAgIHJjNV9kYXRhKCZrZXltYXBbaV0pID09IGJ1ZlsyXSkgewotCQkJKmV2ZW50ID0ga2V5bWFwW2ldLmV2ZW50OworCQkJKmV2ZW50ID0ga2V5bWFwW2ldLmtleWNvZGU7CiAJCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7CiAJCQlicmVhazsKIAkJfQpAQCAtMTI5OSw2ICsxMjk5LDcgQEAKIAl7VVNCX0RFVklDRShVU0JfVklEX0xFQURURUssICAgVVNCX1BJRF9XSU5GQVNUX0RUVjIwMDBEUyl9LAogLyogMzAgKi97VVNCX0RFVklDRShVU0JfVklEX0tXT1JMRF8yLCAgVVNCX1BJRF9LV09STERfVUIzODNfVCl9LAogCXtVU0JfREVWSUNFKFVTQl9WSURfS1dPUkxEXzIsICBVU0JfUElEX0tXT1JMRF8zOTVVXzQpfSwKKwl7VVNCX0RFVklDRShVU0JfVklEX0FWRVJNRURJQSwgVVNCX1BJRF9BVkVSTUVESUFfQTgxNU0pfSwKIAl7MH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGFmOTAxNV91c2JfdGFibGUpOwpAQCAtMTM1Myw4ICsxMzU0LDEwIEBACiAKIAkJLmlkZW50aWZ5X3N0YXRlID0gYWY5MDE1X2lkZW50aWZ5X3N0YXRlLAogCi0JCS5yY19xdWVyeSAgICAgICAgID0gYWY5MDE1X3JjX3F1ZXJ5LAotCQkucmNfaW50ZXJ2YWwgICAgICA9IDE1MCwKKwkJLnJjLmxlZ2FjeSA9IHsKKwkJCS5yY19xdWVyeSAgICAgICAgID0gYWY5MDE1X3JjX3F1ZXJ5LAorCQkJLnJjX2ludGVydmFsICAgICAgPSAxNTAsCisJCX0sCiAKIAkJLmkyY19hbGdvID0gJmFmOTAxNV9pMmNfYWxnbywKIApAQCAtMTQ2MCw4ICsxNDYzLDEwIEBACiAKIAkJLmlkZW50aWZ5X3N0YXRlID0gYWY5MDE1X2lkZW50aWZ5X3N0YXRlLAogCi0JCS5yY19xdWVyeSAgICAgICAgID0gYWY5MDE1X3JjX3F1ZXJ5LAotCQkucmNfaW50ZXJ2YWwgICAgICA9IDE1MCwKKwkJLnJjLmxlZ2FjeSA9IHsKKwkJCS5yY19xdWVyeSAgICAgICAgID0gYWY5MDE1X3JjX3F1ZXJ5LAorCQkJLnJjX2ludGVydmFsICAgICAgPSAxNTAsCisJCX0sCiAKIAkJLmkyY19hbGdvID0gJmFmOTAxNV9pMmNfYWxnbywKIApAQCAtMTU2NywxMiArMTU3MiwxNCBAQAogCiAJCS5pZGVudGlmeV9zdGF0ZSA9IGFmOTAxNV9pZGVudGlmeV9zdGF0ZSwKIAotCQkucmNfcXVlcnkgICAgICAgICA9IGFmOTAxNV9yY19xdWVyeSwKLQkJLnJjX2ludGVydmFsICAgICAgPSAxNTAsCisJCS5yYy5sZWdhY3kgPSB7CisJCQkucmNfcXVlcnkgICAgICAgICA9IGFmOTAxNV9yY19xdWVyeSwKKwkJCS5yY19pbnRlcnZhbCAgICAgID0gMTUwLAorCQl9LAogCiAJCS5pMmNfYWxnbyA9ICZhZjkwMTVfaTJjX2FsZ28sCiAKLQkJLm51bV9kZXZpY2VfZGVzY3MgPSA4LCAvKiBtYXggOSAqLworCQkubnVtX2RldmljZV9kZXNjcyA9IDksIC8qIG1heCA5ICovCiAJCS5kZXZpY2VzID0gewogCQkJewogCQkJCS5uYW1lID0gIkF2ZXJNZWRpYSBBVmVyVFYgVm9sYXIgR1BTIDgwNSAoQTgwNSkiLApAQCAtMTYxNyw2ICsxNjI0LDExIEBACiAJCQkJLmNvbGRfaWRzID0geyZhZjkwMTVfdXNiX3RhYmxlWzMwXSwgTlVMTH0sCiAJCQkJLndhcm1faWRzID0ge05VTEx9LAogCQkJfSwKKwkJCXsKKwkJCQkubmFtZSA9ICJBdmVyTWVkaWEgQVZlclRWIFZvbGFyIE0gKEE4MTVNYWMpIiwKKwkJCQkuY29sZF9pZHMgPSB7JmFmOTAxNV91c2JfdGFibGVbMzJdLCBOVUxMfSwKKwkJCQkud2FybV9pZHMgPSB7TlVMTH0sCisJCQl9LAogCQl9CiAJfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuaAppbmRleCA2M2IyYTQ5Li5jOGU5MzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmgKQEAgLTEyMyw3ICsxMjMsNyBAQAogCiAvKiBMZWFkVGVrIC0gWTA0RzAwNTEgKi8KIC8qIExlYWR0ZWsgV2luRmFzdCBEVFYgRG9uZ2xlIEdvbGQgKi8KLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgaXJfY29kZXNfYWY5MDE1X3RhYmxlX2xlYWR0ZWtbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfYWY5MDE1X3RhYmxlX2xlYWR0ZWtbXSA9IHsKIAl7IDB4MDAxZSwgS0VZXzEgfSwKIAl7IDB4MDAxZiwgS0VZXzIgfSwKIAl7IDB4MDAyMCwgS0VZXzMgfSwKQEAgLTIyNyw3ICsyMjcsNyBAQAogfTsKIAogLyogVHdpbkhhbiBBenVyZVdhdmUgQUQtVFU3MDAoNzA0SikgKi8KLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgaXJfY29kZXNfYWY5MDE1X3RhYmxlX3R3aW5oYW5bXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfYWY5MDE1X3RhYmxlX3R3aW5oYW5bXSA9IHsKIAl7IDB4MDUzZiwgS0VZX1BPV0VSIH0sCiAJeyAweDAwMTksIEtFWV9GQVZPUklURVMgfSwgICAgLyogRmF2b3JpdGUgTGlzdCAqLwogCXsgMHgwMDA0LCBLRVlfVEVYVCB9LCAgICAgICAgIC8qIFRlbGV0ZXh0ICovCkBAIC0zMzgsNyArMzM4LDcgQEAKIH07CiAKIC8qIEEtTGluayBEVFUobSkgKi8KLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgaXJfY29kZXNfYWY5MDE1X3RhYmxlX2FfbGlua1tdID0geworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19hZjkwMTVfdGFibGVfYV9saW5rW10gPSB7CiAJeyAweDAwMWUsIEtFWV8xIH0sCiAJeyAweDAwMWYsIEtFWV8yIH0sCiAJeyAweDAwMjAsIEtFWV8zIH0sCkBAIC0zODEsNyArMzgxLDcgQEAKIH07CiAKIC8qIE1TSSBESUdJVk9YIG1pbmkgSUkgVjMuMCAqLwotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBpcl9jb2Rlc19hZjkwMTVfdGFibGVfbXNpW10gPSB7CitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2FmOTAxNV90YWJsZV9tc2lbXSA9IHsKIAl7IDB4MDAxZSwgS0VZXzEgfSwKIAl7IDB4MDAxZiwgS0VZXzIgfSwKIAl7IDB4MDAyMCwgS0VZXzMgfSwKQEAgLTQyNCw3ICs0MjQsNyBAQAogfTsKIAogLyogTVlHSUNUViBVNzE4ICovCi1zdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IGlyX2NvZGVzX2FmOTAxNV90YWJsZV9teWdpY3R2W10gPSB7CitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2FmOTAxNV90YWJsZV9teWdpY3R2W10gPSB7CiAJeyAweDAwM2QsIEtFWV9TV0lUQ0hWSURFT01PREUgfSwKIAkJCQkJICAvKiBUViAvIEFWICovCiAJeyAweDA1NDUsIEtFWV9QT1dFUiB9LApAQCAtNTUwLDcgKzU1MCw3IEBACiB9OwogCiAvKiBBdmVyTWVkaWEgVm9sYXIgWCAqLwotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBpcl9jb2Rlc19hZjkwMTVfdGFibGVfYXZlcm1lZGlhW10gPSB7CitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2FmOTAxNV90YWJsZV9hdmVybWVkaWFbXSA9IHsKIAl7IDB4MDUzZCwgS0VZX1BST0cxIH0sICAgICAgIC8qIFNPVVJDRSAqLwogCXsgMHgwNTEyLCBLRVlfUE9XRVIgfSwgICAgICAgLyogUE9XRVIgKi8KIAl7IDB4MDUxZSwgS0VZXzEgfSwgICAgICAgICAgIC8qIDEgKi8KQEAgLTY1Niw3ICs2NTYsNyBAQAogfTsKIAogLyogRGlnaXR0cmFkZSBEVkItVCBVU0IgU3RpY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgaXJfY29kZXNfYWY5MDE1X3RhYmxlX2RpZ2l0dHJhZGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfYWY5MDE1X3RhYmxlX2RpZ2l0dHJhZGVbXSA9IHsKIAl7IDB4MDEwZiwgS0VZX0xBU1QgfSwJLyogUkVUVVJOICovCiAJeyAweDA1MTcsIEtFWV9URVhUIH0sCS8qIFRFTEVURVhUICovCiAJeyAweDAxMDgsIEtFWV9FUEcgfSwJLyogRVBHICovCkBAIC03MTksNyArNzE5LDcgQEAKIH07CiAKIC8qIFRSRUtTVE9SIERWQi1UIFVTQiBTdGljayAqLwotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBpcl9jb2Rlc19hZjkwMTVfdGFibGVfdHJla3N0b3JbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfYWY5MDE1X3RhYmxlX3RyZWtzdG9yW10gPSB7CiAJeyAweDA3MDQsIEtFWV9BR0FJTiB9LAkJLyogSG9tZSAqLwogCXsgMHgwNzA1LCBLRVlfTVVURSB9LAkJLyogTXV0ZSAqLwogCXsgMHgwNzA2LCBLRVlfVVAgfSwJCQkvKiBVcCAqLwpAQCAtNzgyLDcgKzc4Miw3IEBACiB9OwogCiAvKiBNU0kgRElHSVZPWCBtaW5pIElJSSAqLwotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBpcl9jb2Rlc19hZjkwMTVfdGFibGVfbXNpX2RpZ2l2b3hfaWlpW10gPSB7CitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2FmOTAxNV90YWJsZV9tc2lfZGlnaXZveF9paWlbXSA9IHsKIAl7IDB4MDcxMywgS0VZX1BPV0VSIH0sICAgICAgIC8qIFtyZWQgcG93ZXIgYnV0dG9uXSAqLwogCXsgMHgwNzNiLCBLRVlfVklERU8gfSwgICAgICAgLyogU291cmNlICovCiAJeyAweDA3M2UsIEtFWV9aT09NIH0sICAgICAgICAvKiBab29tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FueXNlZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hbnlzZWUuYwppbmRleCBmYWNhMWFkLi40Njg1MjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FueXNlZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYW55c2VlLmMKQEAgLTM3Nyw3ICszNzcsNyBAQAogc3RhdGljIGludCBhbnlzZWVfcmNfcXVlcnkoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1MzIgKmV2ZW50LCBpbnQgKnN0YXRlKQogewogCXU4IGJ1ZltdID0ge0NNRF9HRVRfSVJfQ09ERX07Ci0Jc3RydWN0IGR2Yl91c2JfcmNfa2V5ICprZXltYXAgPSBkLT5wcm9wcy5yY19rZXlfbWFwOworCXN0cnVjdCBpcl9zY2FuY29kZSAqa2V5bWFwID0gZC0+cHJvcHMucmMubGVnYWN5LnJjX2tleV9tYXA7CiAJdTggaXJjb2RlWzJdOwogCWludCBpLCByZXQ7CiAKQEAgLTM4OCwxMCArMzg4LDEwIEBACiAJKmV2ZW50ID0gMDsKIAkqc3RhdGUgPSBSRU1PVEVfTk9fS0VZX1BSRVNTRUQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmNfa2V5X21hcF9zaXplOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmMubGVnYWN5LnJjX2tleV9tYXBfc2l6ZTsgaSsrKSB7CiAJCWlmIChyYzVfY3VzdG9tKCZrZXltYXBbaV0pID09IGlyY29kZVswXSAmJgogCQkgICAgcmM1X2RhdGEoJmtleW1hcFtpXSkgPT0gaXJjb2RlWzFdKSB7Ci0JCQkqZXZlbnQgPSBrZXltYXBbaV0uZXZlbnQ7CisJCQkqZXZlbnQgPSBrZXltYXBbaV0ua2V5Y29kZTsKIAkJCSpzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0zOTksNyArMzk5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBpcl9jb2Rlc19hbnlzZWVfdGFibGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfYW55c2VlX3RhYmxlW10gPSB7CiAJeyAweDAxMDAsIEtFWV8wIH0sCiAJeyAweDAxMDEsIEtFWV8xIH0sCiAJeyAweDAxMDIsIEtFWV8yIH0sCkBAIC00NjMsNiArNDYzLDExIEBACiAJaWYgKGludGYtPm51bV9hbHRzZXR0aW5nIDwgMSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwkvKgorCSAqIEFueXNlZSBpcyBhbHdheXMgd2FybSAoaXRzIFVTQi1icmlkZ2UsIEN5cHJlc3MgRlgyLCB1cGxvYWRzCisJICogZmlybXdhcmUgZnJvbSBlZXByb20pLiAgSWYgZHZiX3VzYl9kZXZpY2VfaW5pdCgpIHN1Y2NlZWRzIHRoYXQKKwkgKiBtZWFucyBkIGlzIGEgdmFsaWQgcG9pbnRlci4KKwkgKi8KIAlyZXQgPSBkdmJfdXNiX2RldmljZV9pbml0KGludGYsICZhbnlzZWVfcHJvcGVydGllcywgVEhJU19NT0RVTEUsICZkLAogCQlhZGFwdGVyX25yKTsKIAlpZiAocmV0KQpAQCAtNDc5LDEwICs0ODQsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAoZCkKLQkJcmV0ID0gYW55c2VlX2luaXQoZCk7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBhbnlzZWVfaW5pdChkKTsKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGFueXNlZV90YWJsZVtdID0gewpAQCAtNTE4LDEwICs1MjAsMTIgQEAKIAkJfQogCX0sCiAKLQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2FueXNlZV90YWJsZSwKLQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoaXJfY29kZXNfYW55c2VlX3RhYmxlKSwKLQkucmNfcXVlcnkgICAgICAgICA9IGFueXNlZV9yY19xdWVyeSwKLQkucmNfaW50ZXJ2YWwgICAgICA9IDIwMCwgIC8qIHdpbmRvd3MgZHJpdmVyIHVzZXMgNTAwbXMgKi8KKwkucmMubGVnYWN5ID0geworCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2FueXNlZV90YWJsZSwKKwkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2FueXNlZV90YWJsZSksCisJCS5yY19xdWVyeSAgICAgICAgID0gYW55c2VlX3JjX3F1ZXJ5LAorCQkucmNfaW50ZXJ2YWwgICAgICA9IDIwMCwgIC8qIHdpbmRvd3MgZHJpdmVyIHVzZXMgNTAwbXMgKi8KKwl9LAogCiAJLmkyY19hbGdvICAgICAgICAgPSAmYW55c2VlX2kyY19hbGdvLAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2F6NjAyNy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hejYwMjcuYwppbmRleCA2NjgxYWMxLi42MmM1ODI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2F6NjAyNy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYXo2MDI3LmMKQEAgLTM4Niw3ICszODYsNyBAQAogfQogCiAvKiBrZXlzIGZvciB0aGUgZW5jbG9zZWQgcmVtb3RlIGNvbnRyb2wgKi8KLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgaXJfY29kZXNfYXo2MDI3X3RhYmxlW10gPSB7CitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2F6NjAyN190YWJsZVtdID0gewogCXsgMHgwMSwgS0VZXzEgfSwKIAl7IDB4MDIsIEtFWV8yIH0sCiB9OwpAQCAtMTEyNSwxMCArMTEyNSwxMyBAQAogCS5wb3dlcl9jdHJsICAgICAgID0gYXo2MDI3X3Bvd2VyX2N0cmwsCiAJLnJlYWRfbWFjX2FkZHJlc3MgPSBhejYwMjdfcmVhZF9tYWNfYWRkciwKICAqLwotCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfYXo2MDI3X3RhYmxlLAotCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShpcl9jb2Rlc19hejYwMjdfdGFibGUpLAotCS5yY19pbnRlcnZhbCAgICAgID0gNDAwLAotCS5yY19xdWVyeSAgICAgICAgID0gYXo2MDI3X3JjX3F1ZXJ5LAorCS5yYy5sZWdhY3kgPSB7CisJCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfYXo2MDI3X3RhYmxlLAorCQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoaXJfY29kZXNfYXo2MDI3X3RhYmxlKSwKKwkJLnJjX2ludGVydmFsICAgICAgPSA0MDAsCisJCS5yY19xdWVyeSAgICAgICAgID0gYXo2MDI3X3JjX3F1ZXJ5LAorCX0sCisKIAkuaTJjX2FsZ28gICAgICAgICA9ICZhejYwMjdfaTJjX2FsZ28sCiAKIAkubnVtX2RldmljZV9kZXNjcyA9IDUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NpbmVyZ3lUMi1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NpbmVyZ3lUMi1jb3JlLmMKaW5kZXggNWE5YzE0Yi4uNGY1YWE4M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2luZXJneVQyLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NpbmVyZ3lUMi1jb3JlLmMKQEAgLTg0LDcgKzg0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBpcl9jb2Rlc19jaW5lcmd5dDJfdGFibGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfY2luZXJneXQyX3RhYmxlW10gPSB7CiAJeyAweDA0MDEsIEtFWV9QT1dFUiB9LAogCXsgMHgwNDAyLCBLRVlfMSB9LAogCXsgMHgwNDAzLCBLRVlfMiB9LApAQCAtMjE3LDEwICsyMTcsMTIgQEAKIAogCS5wb3dlcl9jdHJsICAgICAgID0gY2luZXJneXQyX3Bvd2VyX2N0cmwsCiAKLQkucmNfaW50ZXJ2YWwgICAgICA9IDUwLAotCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfY2luZXJneXQyX3RhYmxlLAotCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShpcl9jb2Rlc19jaW5lcmd5dDJfdGFibGUpLAotCS5yY19xdWVyeSAgICAgICAgID0gY2luZXJneXQyX3JjX3F1ZXJ5LAorCS5yYy5sZWdhY3kgPSB7CisJCS5yY19pbnRlcnZhbCAgICAgID0gNTAsCisJCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfY2luZXJneXQyX3RhYmxlLAorCQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoaXJfY29kZXNfY2luZXJneXQyX3RhYmxlKSwKKwkJLnJjX3F1ZXJ5ICAgICAgICAgPSBjaW5lcmd5dDJfcmNfcXVlcnksCisJfSwKIAogCS5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCA9IDEsCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYwppbmRleCAxMWU5ZTg1Li5jZDlmMzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jCkBAIC0zODUsNyArMzg1LDcgQEAKIAogc3RhdGljIGludCBjeHVzYl9yY19xdWVyeShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUzMiAqZXZlbnQsIGludCAqc3RhdGUpCiB7Ci0Jc3RydWN0IGR2Yl91c2JfcmNfa2V5ICprZXltYXAgPSBkLT5wcm9wcy5yY19rZXlfbWFwOworCXN0cnVjdCBpcl9zY2FuY29kZSAqa2V5bWFwID0gZC0+cHJvcHMucmMubGVnYWN5LnJjX2tleV9tYXA7CiAJdTggaXJjb2RlWzRdOwogCWludCBpOwogCkBAIC0zOTQsMTAgKzM5NCwxMCBAQAogCSpldmVudCA9IDA7CiAJKnN0YXRlID0gUkVNT1RFX05PX0tFWV9QUkVTU0VEOwogCi0JZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjX2tleV9tYXBfc2l6ZTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19rZXlfbWFwX3NpemU7IGkrKykgewogCQlpZiAocmM1X2N1c3RvbSgma2V5bWFwW2ldKSA9PSBpcmNvZGVbMl0gJiYKIAkJICAgIHJjNV9kYXRhKCZrZXltYXBbaV0pID09IGlyY29kZVszXSkgewotCQkJKmV2ZW50ID0ga2V5bWFwW2ldLmV2ZW50OworCQkJKmV2ZW50ID0ga2V5bWFwW2ldLmtleWNvZGU7CiAJCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7CiAKIAkJCXJldHVybiAwOwpAQCAtNDEwLDcgKzQxMCw3IEBACiBzdGF0aWMgaW50IGN4dXNiX2JsdWViaXJkMl9yY19xdWVyeShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUzMiAqZXZlbnQsCiAJCQkJICAgIGludCAqc3RhdGUpCiB7Ci0Jc3RydWN0IGR2Yl91c2JfcmNfa2V5ICprZXltYXAgPSBkLT5wcm9wcy5yY19rZXlfbWFwOworCXN0cnVjdCBpcl9zY2FuY29kZSAqa2V5bWFwID0gZC0+cHJvcHMucmMubGVnYWN5LnJjX2tleV9tYXA7CiAJdTggaXJjb2RlWzRdOwogCWludCBpOwogCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSAweDZiLCAuZmxhZ3MgPSBJMkNfTV9SRCwKQEAgLTQyMiwxMCArNDIyLDEwIEBACiAJaWYgKGN4dXNiX2kyY194ZmVyKCZkLT5pMmNfYWRhcCwgJm1zZywgMSkgIT0gMSkKIAkJcmV0dXJuIDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmNfa2V5X21hcF9zaXplOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmMubGVnYWN5LnJjX2tleV9tYXBfc2l6ZTsgaSsrKSB7CiAJCWlmIChyYzVfY3VzdG9tKCZrZXltYXBbaV0pID09IGlyY29kZVsxXSAmJgogCQkgICAgcmM1X2RhdGEoJmtleW1hcFtpXSkgPT0gaXJjb2RlWzJdKSB7Ci0JCQkqZXZlbnQgPSBrZXltYXBbaV0uZXZlbnQ7CisJCQkqZXZlbnQgPSBrZXltYXBbaV0ua2V5Y29kZTsKIAkJCSpzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKIAogCQkJcmV0dXJuIDA7CkBAIC00MzgsNyArNDM4LDcgQEAKIHN0YXRpYyBpbnQgY3h1c2JfZDY4MF9kbWJfcmNfcXVlcnkoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1MzIgKmV2ZW50LAogCQlpbnQgKnN0YXRlKQogewotCXN0cnVjdCBkdmJfdXNiX3JjX2tleSAqa2V5bWFwID0gZC0+cHJvcHMucmNfa2V5X21hcDsKKwlzdHJ1Y3QgaXJfc2NhbmNvZGUgKmtleW1hcCA9IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19rZXlfbWFwOwogCXU4IGlyY29kZVsyXTsKIAlpbnQgaTsKIApAQCAtNDQ4LDEwICs0NDgsMTAgQEAKIAlpZiAoY3h1c2JfY3RybF9tc2coZCwgMHgxMCwgTlVMTCwgMCwgaXJjb2RlLCAyKSA8IDApCiAJCXJldHVybiAwOwogCi0JZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjX2tleV9tYXBfc2l6ZTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19rZXlfbWFwX3NpemU7IGkrKykgewogCQlpZiAocmM1X2N1c3RvbSgma2V5bWFwW2ldKSA9PSBpcmNvZGVbMF0gJiYKIAkJICAgIHJjNV9kYXRhKCZrZXltYXBbaV0pID09IGlyY29kZVsxXSkgewotCQkJKmV2ZW50ID0ga2V5bWFwW2ldLmV2ZW50OworCQkJKmV2ZW50ID0ga2V5bWFwW2ldLmtleWNvZGU7CiAJCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7CiAKIAkJCXJldHVybiAwOwpAQCAtNDYxLDcgKzQ2MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgaXJfY29kZXNfZHZpY29fbWNlX3RhYmxlW10gPSB7CitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2R2aWNvX21jZV90YWJsZVtdID0gewogCXsgMHhmZTAyLCBLRVlfVFYgfSwKIAl7IDB4ZmUwZSwgS0VZX01QMyB9LAogCXsgMHhmZTFhLCBLRVlfRFZEIH0sCkBAIC01MDksNyArNTA5LDcgQEAKIAl7IDB4ZmU0ZSwgS0VZX1BPV0VSIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IGlyX2NvZGVzX2R2aWNvX3BvcnRhYmxlX3RhYmxlW10gPSB7CitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2R2aWNvX3BvcnRhYmxlX3RhYmxlW10gPSB7CiAJeyAweGZjMDIsIEtFWV9TRVRVUCB9LCAgICAgICAvKiBQcm9maWxlICovCiAJeyAweGZjNDMsIEtFWV9QT1dFUjIgfSwKIAl7IDB4ZmMwNiwgS0VZX0VQRyB9LApAQCAtNTQ4LDcgKzU0OCw3IEBACiAJeyAweGZjMDAsIEtFWV9VTktOT1dOIH0sICAgIC8qIEhEICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IGlyX2NvZGVzX2Q2ODBfZG1iX3RhYmxlW10gPSB7CitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2Q2ODBfZG1iX3RhYmxlW10gPSB7CiAJeyAweDAwMzgsIEtFWV9VTktOT1dOIH0sCS8qIFRWL0FWICovCiAJeyAweDA4MGMsIEtFWV9aT09NIH0sCiAJeyAweDA4MDAsIEtFWV8wIH0sCkBAIC05MjMsNyArOTIzLDcgQEAKIAkJcmV0dXJuIC1FSU87CiAKIAkvKiB0cnkgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGlzIG5vIElSIGRlY29kZXIgb24gdGhlIEkyQyBidXMgKi8KLQlmb3IgKGkgPSAwOyBhZGFwLT5kZXYtPnByb3BzLnJjX2tleV9tYXAgIT0gTlVMTCAmJiBpIDwgNTsgaSsrKSB7CisJZm9yIChpID0gMDsgYWRhcC0+ZGV2LT5wcm9wcy5yYy5sZWdhY3kucmNfa2V5X21hcCAhPSBOVUxMICYmIGkgPCA1OyBpKyspIHsKIAkJbXNsZWVwKDIwKTsKIAkJaWYgKGN4dXNiX2kyY194ZmVyKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAmbXNnLCAxKSAhPSAxKQogCQkJZ290byBub19JUjsKQEAgLTkzMSw3ICs5MzEsNyBAQAogCQkJY29udGludWU7CiAJCWlmIChpcmNvZGVbMl0gKyBpcmNvZGVbM10gIT0gMHhmZikgewogbm9fSVI6Ci0JCQlhZGFwLT5kZXYtPnByb3BzLnJjX2tleV9tYXAgPSBOVUxMOworCQkJYWRhcC0+ZGV2LT5wcm9wcy5yYy5sZWdhY3kucmNfa2V5X21hcCA9IE5VTEw7CiAJCQlpbmZvKCJObyBJUiByZWNlaXZlciBkZXRlY3RlZCBvbiB0aGlzIGRldmljZS4iKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xNDUxLDEwICsxNDUxLDEyIEBACiAKIAkuaTJjX2FsZ28gICAgICAgICA9ICZjeHVzYl9pMmNfYWxnbywKIAotCS5yY19pbnRlcnZhbCAgICAgID0gMTAwLAotCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfZHZpY29fcG9ydGFibGVfdGFibGUsCi0JLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2R2aWNvX3BvcnRhYmxlX3RhYmxlKSwKLQkucmNfcXVlcnkgICAgICAgICA9IGN4dXNiX3JjX3F1ZXJ5LAorCS5yYy5sZWdhY3kgPSB7CisJCS5yY19pbnRlcnZhbCAgICAgID0gMTAwLAorCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2R2aWNvX3BvcnRhYmxlX3RhYmxlLAorCQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZHZpY29fcG9ydGFibGVfdGFibGUpLAorCQkucmNfcXVlcnkgICAgICAgICA9IGN4dXNiX3JjX3F1ZXJ5LAorCX0sCiAKIAkuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQgPSAweDAxLAogCkBAIC0xNTAyLDEwICsxNTA0LDEyIEBACiAKIAkuaTJjX2FsZ28gICAgICAgICA9ICZjeHVzYl9pMmNfYWxnbywKIAotCS5yY19pbnRlcnZhbCAgICAgID0gMTUwLAotCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfZHZpY29fbWNlX3RhYmxlLAotCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShpcl9jb2Rlc19kdmljb19tY2VfdGFibGUpLAotCS5yY19xdWVyeSAgICAgICAgID0gY3h1c2JfcmNfcXVlcnksCisJLnJjLmxlZ2FjeSA9IHsKKwkJLnJjX2ludGVydmFsICAgICAgPSAxNTAsCisJCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfZHZpY29fbWNlX3RhYmxlLAorCQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZHZpY29fbWNlX3RhYmxlKSwKKwkJLnJjX3F1ZXJ5ICAgICAgICAgPSBjeHVzYl9yY19xdWVyeSwKKwl9LAogCiAJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHgwMSwKIApAQCAtMTU2MSwxMCArMTU2NSwxMiBAQAogCiAJLmkyY19hbGdvICAgICAgICAgPSAmY3h1c2JfaTJjX2FsZ28sCiAKLQkucmNfaW50ZXJ2YWwgICAgICA9IDEwMCwKLQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2R2aWNvX3BvcnRhYmxlX3RhYmxlLAotCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShpcl9jb2Rlc19kdmljb19wb3J0YWJsZV90YWJsZSksCi0JLnJjX3F1ZXJ5ICAgICAgICAgPSBjeHVzYl9yY19xdWVyeSwKKwkucmMubGVnYWN5ID0geworCQkucmNfaW50ZXJ2YWwgICAgICA9IDEwMCwKKwkJLnJjX2tleV9tYXAgICAgICAgPSBpcl9jb2Rlc19kdmljb19wb3J0YWJsZV90YWJsZSwKKwkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2R2aWNvX3BvcnRhYmxlX3RhYmxlKSwKKwkJLnJjX3F1ZXJ5ICAgICAgICAgPSBjeHVzYl9yY19xdWVyeSwKKwl9LAogCiAJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHgwMSwKIAkubnVtX2RldmljZV9kZXNjcyA9IDEsCkBAIC0xNjExLDEwICsxNjE3LDEyIEBACiAKIAkuaTJjX2FsZ28gICAgICAgICA9ICZjeHVzYl9pMmNfYWxnbywKIAotCS5yY19pbnRlcnZhbCAgICAgID0gMTAwLAotCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfZHZpY29fcG9ydGFibGVfdGFibGUsCi0JLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2R2aWNvX3BvcnRhYmxlX3RhYmxlKSwKLQkucmNfcXVlcnkgICAgICAgICA9IGN4dXNiX3JjX3F1ZXJ5LAorCS5yYy5sZWdhY3kgPSB7CisJCS5yY19pbnRlcnZhbCAgICAgID0gMTAwLAorCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2R2aWNvX3BvcnRhYmxlX3RhYmxlLAorCQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZHZpY29fcG9ydGFibGVfdGFibGUpLAorCQkucmNfcXVlcnkgICAgICAgICA9IGN4dXNiX3JjX3F1ZXJ5LAorCX0sCiAKIAkuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQgPSAweDAxLAogCkBAIC0xNjYwLDEwICsxNjY4LDEyIEBACiAKIAkuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQgPSAweDAxLAogCi0JLnJjX2ludGVydmFsICAgICAgPSAxMDAsCi0JLnJjX2tleV9tYXAgICAgICAgPSBpcl9jb2Rlc19kdmljb19tY2VfdGFibGUsCi0JLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2R2aWNvX21jZV90YWJsZSksCi0JLnJjX3F1ZXJ5ICAgICAgICAgPSBjeHVzYl9ibHVlYmlyZDJfcmNfcXVlcnksCisJLnJjLmxlZ2FjeSA9IHsKKwkJLnJjX2ludGVydmFsICAgICAgPSAxMDAsCisJCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfZHZpY29fbWNlX3RhYmxlLAorCQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZHZpY29fbWNlX3RhYmxlKSwKKwkJLnJjX3F1ZXJ5ICAgICAgICAgPSBjeHVzYl9ibHVlYmlyZDJfcmNfcXVlcnksCisJfSwKIAogCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKIAkuZGV2aWNlcyA9IHsKQEAgLTE3MDgsMTAgKzE3MTgsMTIgQEAKIAogCS5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCA9IDB4MDEsCiAKLQkucmNfaW50ZXJ2YWwgICAgICA9IDEwMCwKLQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2R2aWNvX3BvcnRhYmxlX3RhYmxlLAotCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShpcl9jb2Rlc19kdmljb19wb3J0YWJsZV90YWJsZSksCi0JLnJjX3F1ZXJ5ICAgICAgICAgPSBjeHVzYl9ibHVlYmlyZDJfcmNfcXVlcnksCisJLnJjLmxlZ2FjeSA9IHsKKwkJLnJjX2ludGVydmFsICAgICAgPSAxMDAsCisJCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfZHZpY29fcG9ydGFibGVfdGFibGUsCisJCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShpcl9jb2Rlc19kdmljb19wb3J0YWJsZV90YWJsZSksCisJCS5yY19xdWVyeSAgICAgICAgID0gY3h1c2JfYmx1ZWJpcmQyX3JjX3F1ZXJ5LAorCX0sCiAKIAkubnVtX2RldmljZV9kZXNjcyA9IDEsCiAJLmRldmljZXMgPSB7CkBAIC0xNzU4LDEwICsxNzcwLDEyIEBACiAKIAkuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQgPSAweDAxLAogCi0JLnJjX2ludGVydmFsICAgICAgPSAxMDAsCi0JLnJjX2tleV9tYXAgICAgICAgPSBpcl9jb2Rlc19kdmljb19wb3J0YWJsZV90YWJsZSwKLQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZHZpY29fcG9ydGFibGVfdGFibGUpLAotCS5yY19xdWVyeSAgICAgICAgID0gY3h1c2JfcmNfcXVlcnksCisJLnJjLmxlZ2FjeSA9IHsKKwkJLnJjX2ludGVydmFsICAgICAgPSAxMDAsCisJCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfZHZpY29fcG9ydGFibGVfdGFibGUsCisJCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShpcl9jb2Rlc19kdmljb19wb3J0YWJsZV90YWJsZSksCisJCS5yY19xdWVyeSAgICAgICAgID0gY3h1c2JfcmNfcXVlcnksCisJfSwKIAogCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKIAkuZGV2aWNlcyA9IHsKQEAgLTE4NDksMTAgKzE4NjMsMTIgQEAKIAogCS5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCA9IDB4MDEsCiAKLQkucmNfaW50ZXJ2YWwgICAgICA9IDEwMCwKLQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2R2aWNvX21jZV90YWJsZSwKLQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZHZpY29fbWNlX3RhYmxlKSwKLQkucmNfcXVlcnkgICAgICAgICA9IGN4dXNiX3JjX3F1ZXJ5LAorCS5yYy5sZWdhY3kgPSB7CisJCS5yY19pbnRlcnZhbCAgICAgID0gMTAwLAorCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2R2aWNvX21jZV90YWJsZSwKKwkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2R2aWNvX21jZV90YWJsZSksCisJCS5yY19xdWVyeSAgICAgICAgID0gY3h1c2JfcmNfcXVlcnksCisJfSwKIAogCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKIAkuZGV2aWNlcyA9IHsKQEAgLTE4OTcsMTAgKzE5MTMsMTIgQEAKIAogCS5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCA9IDB4MDEsCiAKLQkucmNfaW50ZXJ2YWwgICAgICA9IDEwMCwKLQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2Q2ODBfZG1iX3RhYmxlLAotCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShpcl9jb2Rlc19kNjgwX2RtYl90YWJsZSksCi0JLnJjX3F1ZXJ5ICAgICAgICAgPSBjeHVzYl9kNjgwX2RtYl9yY19xdWVyeSwKKwkucmMubGVnYWN5ID0geworCQkucmNfaW50ZXJ2YWwgICAgICA9IDEwMCwKKwkJLnJjX2tleV9tYXAgICAgICAgPSBpcl9jb2Rlc19kNjgwX2RtYl90YWJsZSwKKwkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2Q2ODBfZG1iX3RhYmxlKSwKKwkJLnJjX3F1ZXJ5ICAgICAgICAgPSBjeHVzYl9kNjgwX2RtYl9yY19xdWVyeSwKKwl9LAogCiAJLm51bV9kZXZpY2VfZGVzY3MgPSAxLAogCS5kZXZpY2VzID0gewpAQCAtMTk0NiwxMCArMTk2NCwxMiBAQAogCiAJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHgwMSwKIAotCS5yY19pbnRlcnZhbCAgICAgID0gMTAwLAotCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfZDY4MF9kbWJfdGFibGUsCi0JLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2Q2ODBfZG1iX3RhYmxlKSwKLQkucmNfcXVlcnkgICAgICAgICA9IGN4dXNiX2Q2ODBfZG1iX3JjX3F1ZXJ5LAorCS5yYy5sZWdhY3kgPSB7CisJCS5yY19pbnRlcnZhbCAgICAgID0gMTAwLAorCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2Q2ODBfZG1iX3RhYmxlLAorCQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZDY4MF9kbWJfdGFibGUpLAorCQkucmNfcXVlcnkgICAgICAgICA9IGN4dXNiX2Q2ODBfZG1iX3JjX3F1ZXJ5LAorCX0sCiAKIAkubnVtX2RldmljZV9kZXNjcyA9IDEsCiAJLmRldmljZXMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMC5oCmluZGV4IDgzZmMyNGEuLmMyYzlkMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMC5oCkBAIC02MCw2ICs2MCw3IEBACiBleHRlcm4gc3RydWN0IGkyY19hbGdvcml0aG0gZGliMDcwMF9pMmNfYWxnbzsKIGV4dGVybiBpbnQgZGliMDcwMF9pZGVudGlmeV9zdGF0ZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgKnByb3BzLAogCQkJc3RydWN0IGR2Yl91c2JfZGV2aWNlX2Rlc2NyaXB0aW9uICoqZGVzYywgaW50ICpjb2xkKTsKK2V4dGVybiBpbnQgZGliMDcwMF9jaGFuZ2VfcHJvdG9jb2wodm9pZCAqcHJpdiwgdTY0IGlyX3R5cGUpOwogCiBleHRlcm4gaW50IGRpYjA3MDBfZGV2aWNlX2NvdW50OwogZXh0ZXJuIGludCBkdmJfdXNiX2RpYjA3MDBfaXJfcHJvdG87CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfY29yZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2NvcmUuYwppbmRleCA0Zjk2MWQyLi5mZTgxODM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9jb3JlLmMKQEAgLTEzLDEwICsxMyw2IEBACiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsZHZiX3VzYl9kaWIwNzAwX2RlYnVnLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInNldCBkZWJ1Z2dpbmcgbGV2ZWwgKDE9aW5mbywyPWZ3LDQ9ZndkYXRhLDg9ZGF0YSAob3ItYWJsZSkpLiIgRFZCX1VTQl9ERUJVR19TVEFUVVMpOwogCi1pbnQgZHZiX3VzYl9kaWIwNzAwX2lyX3Byb3RvID0gMTsKLW1vZHVsZV9wYXJhbShkdmJfdXNiX2RpYjA3MDBfaXJfcHJvdG8sIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGR2Yl91c2JfZGliMDcwMF9pcl9wcm90bywgInNldCBpciBwcm90b2NvbCAoMD1ORUMsIDE9UkM1IChkZWZhdWx0KSwgMj1SQzYpLiIpOwotCiBzdGF0aWMgaW50IG5iX3BhY2tldF9idWZmZXJfc2l6ZSA9IDIxOwogbW9kdWxlX3BhcmFtKG5iX3BhY2tldF9idWZmZXJfc2l6ZSwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobmJfcGFja2V0X2J1ZmZlcl9zaXplLApAQCAtNTMsNyArNDksNyBAQAogCWludCBzdGF0dXM7CiAKIAlkZWJfZGF0YSgiPj4+ICIpOwotCWRlYnVnX2R1bXAodHgsdHhsZW4sZGViX2RhdGEpOworCWRlYnVnX2R1bXAodHgsIHR4bGVuLCBkZWJfZGF0YSk7CiAKIAlzdGF0dXMgPSB1c2JfY29udHJvbF9tc2coZC0+dWRldiwgdXNiX3NuZGN0cmxwaXBlKGQtPnVkZXYsMCksCiAJCXR4WzBdLCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCwgMCwgMCwgdHgsIHR4bGVuLApAQCAtOTgsNyArOTQsNyBAQAogCQlkZWJfaW5mbygiZXAgMCByZWFkIGVycm9yIChzdGF0dXMgPSAlZClcbiIsc3RhdHVzKTsKIAogCWRlYl9kYXRhKCI8PDwgIik7Ci0JZGVidWdfZHVtcChyeCxyeGxlbixkZWJfZGF0YSk7CisJZGVidWdfZHVtcChyeCwgcnhsZW4sIGRlYl9kYXRhKTsKIAogCXJldHVybiBzdGF0dXM7IC8qIGxlbmd0aCBpbiBjYXNlIG9mIHN1Y2Nlc3MgKi8KIH0KQEAgLTEwNiwyOCArMTAyLDI5IEBACiBpbnQgZGliMDcwMF9zZXRfZ3BpbyhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIGVudW0gZGliMDd4MF9ncGlvcyBncGlvLCB1OCBncGlvX2RpciwgdTggZ3Bpb192YWwpCiB7CiAJdTggYnVmWzNdID0geyBSRVFVRVNUX1NFVF9HUElPLCBncGlvLCAoKGdwaW9fZGlyICYgMHgwMSkgPDwgNykgfCAoKGdwaW9fdmFsICYgMHgwMSkgPDwgNikgfTsKLQlyZXR1cm4gZGliMDcwMF9jdHJsX3dyKGQsYnVmLDMpOworCXJldHVybiBkaWIwNzAwX2N0cmxfd3IoZCwgYnVmLCBzaXplb2YoYnVmKSk7CiB9CiAKIHN0YXRpYyBpbnQgZGliMDcwMF9zZXRfdXNiX3hmZXJfbGVuKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTE2IG5iX3RzX3BhY2tldHMpCiB7Ci0gICAgc3RydWN0IGRpYjA3MDBfc3RhdGUgKnN0ID0gZC0+cHJpdjsKLSAgICB1OCBiWzNdOwotICAgIGludCByZXQ7CisJc3RydWN0IGRpYjA3MDBfc3RhdGUgKnN0ID0gZC0+cHJpdjsKKwl1OCBiWzNdOworCWludCByZXQ7CiAKLSAgICBpZiAoc3QtPmZ3X3ZlcnNpb24gPj0gMHgxMDIwMSkgewotCWJbMF0gPSBSRVFVRVNUX1NFVF9VU0JfWEZFUl9MRU47Ci0JYlsxXSA9IChuYl90c19wYWNrZXRzID4+IDgpJjB4ZmY7Ci0JYlsyXSA9IG5iX3RzX3BhY2tldHMgJiAweGZmOworCWlmIChzdC0+ZndfdmVyc2lvbiA+PSAweDEwMjAxKSB7CisJCWJbMF0gPSBSRVFVRVNUX1NFVF9VU0JfWEZFUl9MRU47CisJCWJbMV0gPSAobmJfdHNfcGFja2V0cyA+PiA4KSAmIDB4ZmY7CisJCWJbMl0gPSBuYl90c19wYWNrZXRzICYgMHhmZjsKIAotCWRlYl9pbmZvKCJzZXQgdGhlIFVTQiB4ZmVyIGxlbiB0byAlaSBUcyBwYWNrZXRcbiIsIG5iX3RzX3BhY2tldHMpOworCQlkZWJfaW5mbygic2V0IHRoZSBVU0IgeGZlciBsZW4gdG8gJWkgVHMgcGFja2V0XG4iLCBuYl90c19wYWNrZXRzKTsKIAotCXJldCA9IGRpYjA3MDBfY3RybF93cihkLCBiLCAzKTsKLSAgICB9IGVsc2UgewotCWRlYl9pbmZvKCJ0aGlzIGZpcm13YXJlIGRvZXMgbm90IGFsbG93IHRvIGNoYW5nZSB0aGUgVVNCIHhmZXIgbGVuXG4iKTsKLQlyZXQgPSAtRUlPOwotICAgIH0KLSAgICByZXR1cm4gcmV0OworCQlyZXQgPSBkaWIwNzAwX2N0cmxfd3IoZCwgYiwgc2l6ZW9mKGIpKTsKKwl9IGVsc2UgeworCQlkZWJfaW5mbygidGhpcyBmaXJtd2FyZSBkb2VzIG5vdCBhbGxvdyB0byBjaGFuZ2UgdGhlIFVTQiB4ZmVyIGxlblxuIik7CisJCXJldCA9IC1FSU87CisJfQorCisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTE3OCw3ICsxNzUsOCBAQAogCQkJdmFsdWUgPSAoKGVuX3N0YXJ0IDw8IDcpIHwgKGVuX3N0b3AgPDwgNikgfAogCQkJCSAobXNnW2ldLmxlbiAmIDB4M0YpKSA8PCA4IHwgaTJjX2Rlc3Q7CiAJCQkvKiBJMkMgY3RybCArIEZFIGJ1czsgKi8KLQkJCWluZGV4ID0gKChnZW5fbW9kZTw8NikmMHhDMCkgfCAoKGJ1c19tb2RlPDw0KSYweDMwKTsKKwkJCWluZGV4ID0gKChnZW5fbW9kZSA8PCA2KSAmIDB4QzApIHwKKwkJCQkoKGJ1c19tb2RlIDw8IDQpICYgMHgzMCk7CiAKIAkJCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhkLT51ZGV2LAogCQkJCQkJIHVzYl9yY3ZjdHJscGlwZShkLT51ZGV2LCAwKSwKQEAgLTE5OCwxMSArMTk2LDEyIEBACiAJCX0gZWxzZSB7CiAJCQkvKiBXcml0ZSByZXF1ZXN0ICovCiAJCQlidWZbMF0gPSBSRVFVRVNUX05FV19JMkNfV1JJVEU7Ci0JCQlidWZbMV0gPSAobXNnW2ldLmFkZHIgPDwgMSk7CisJCQlidWZbMV0gPSBtc2dbaV0uYWRkciA8PCAxOwogCQkJYnVmWzJdID0gKGVuX3N0YXJ0IDw8IDcpIHwgKGVuX3N0b3AgPDwgNikgfAogCQkJCShtc2dbaV0ubGVuICYgMHgzRik7CiAJCQkvKiBJMkMgY3RybCArIEZFIGJ1czsgKi8KLQkJCWJ1ZlszXSA9ICgoZ2VuX21vZGU8PDYpJjB4QzApIHwgKChidXNfbW9kZTw8NCkmMHgzMCk7CisJCQlidWZbM10gPSAoKGdlbl9tb2RlIDw8IDYpICYgMHhDMCkgfAorCQkJCSAoKGJ1c19tb2RlIDw8IDQpICYgMHgzMCk7CiAJCQkvKiBUaGUgQWN0dWFsIGkyYyBwYXlsb2FkICovCiAJCQltZW1jcHkoJmJ1Zls0XSwgbXNnW2ldLmJ1ZiwgbXNnW2ldLmxlbik7CiAKQEAgLTI0MCw3ICsyMzksNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CiAJCS8qIGZpbGwgaW4gdGhlIGFkZHJlc3MgKi8KLQkJYnVmWzFdID0gKG1zZ1tpXS5hZGRyIDw8IDEpOworCQlidWZbMV0gPSBtc2dbaV0uYWRkciA8PCAxOwogCQkvKiBmaWxsIHRoZSBidWZmZXIgKi8KIAkJbWVtY3B5KCZidWZbMl0sIG1zZ1tpXS5idWYsIG1zZ1tpXS5sZW4pOwogCkBAIC0zNjgsNyArMzY3LDggQEAKIAl1OCBidWZbMjYwXTsKIAogCXdoaWxlICgocmV0ID0gZHZiX3VzYl9nZXRfaGV4bGluZShmdywgJmh4LCAmcG9zKSkgPiAwKSB7Ci0JCWRlYl9md2RhdGEoIndyaXRpbmcgdG8gYWRkcmVzcyAweCUwOHggKGJ1ZmZlcjogMHglMDJ4ICUwMngpXG4iLGh4LmFkZHIsIGh4LmxlbiwgaHguY2hrKTsKKwkJZGViX2Z3ZGF0YSgid3JpdGluZyB0byBhZGRyZXNzIDB4JTA4eCAoYnVmZmVyOiAweCUwMnggJTAyeClcbiIsCisJCQkJaHguYWRkciwgaHgubGVuLCBoeC5jaGspOwogCiAJCWJ1ZlswXSA9IGh4LmxlbjsKIAkJYnVmWzFdID0gKGh4LmFkZHIgPj4gOCkgJiAweGZmOwpAQCAtNDA4LDE2ICs0MDgsMTYgQEAKIAkJCQkgIFJFUVVFU1RfR0VUX1ZFUlNJT04sCiAJCQkJICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOLCAwLCAwLAogCQkJCSAgYiwgc2l6ZW9mKGIpLCBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7Ci0JZndfdmVyc2lvbiA9IChiWzhdIDw8IDI0KSAgfCAoYls5XSA8PCAxNikgIHwgKGJbMTBdIDw8IDgpIHwgYlsxMV07CisJZndfdmVyc2lvbiA9IChiWzhdIDw8IDI0KSB8IChiWzldIDw8IDE2KSB8IChiWzEwXSA8PCA4KSB8IGJbMTFdOwogCiAJLyogc2V0IHRoZSBidWZmZXIgc2l6ZSAtIERWQi1VU0IgaXMgYWxsb2NhdGluZyBVUkIgYnVmZmVycwogCSAqIG9ubHkgYWZ0ZXIgdGhlIGZpcndtYXJlIGRvd25sb2FkIHdhcyBzdWNjZXNzZnVsICovCiAJZm9yIChpID0gMDsgaSA8IGRpYjA3MDBfZGV2aWNlX2NvdW50OyBpKyspIHsKIAkJZm9yIChhZGFwX251bSA9IDA7IGFkYXBfbnVtIDwgZGliMDcwMF9kZXZpY2VzW2ldLm51bV9hZGFwdGVyczsKIAkJCQlhZGFwX251bSsrKSB7Ci0JCQlpZiAoZndfdmVyc2lvbiA+PSAweDEwMjAxKQorCQkJaWYgKGZ3X3ZlcnNpb24gPj0gMHgxMDIwMSkgewogCQkJCWRpYjA3MDBfZGV2aWNlc1tpXS5hZGFwdGVyW2FkYXBfbnVtXS5zdHJlYW0udS5idWxrLmJ1ZmZlcnNpemUgPSAxODgqbmJfcGFja2V0X2J1ZmZlcl9zaXplOwotCQkJZWxzZSB7CisJCQl9IGVsc2UgewogCQkJCS8qIGZvciBmdyB2ZXJzaW9uIG9sZGVyIHRoYW4gMS4yMC4xLAogCQkJCSAqIHRoZSBidWZmZXJzaXplIGhhcyB0byBiZSBuIHRpbWVzIDUxMiAqLwogCQkJCWRpYjA3MDBfZGV2aWNlc1tpXS5hZGFwdGVyW2FkYXBfbnVtXS5zdHJlYW0udS5idWxrLmJ1ZmZlcnNpemUgPSAoKDE4OCpuYl9wYWNrZXRfYnVmZmVyX3NpemUrMTg4LzIpLzUxMikqNTEyOwpAQCAtNDUzLDcgKzQ1Myw3IEBACiAJaWYgKHN0LT5kaXNhYmxlX3N0cmVhbWluZ19tYXN0ZXJfbW9kZSA9PSAxKQogCQliWzJdID0gMHgwMDsKIAllbHNlCi0JCWJbMl0gPSAoMHgwMSA8PCA0KTsgLyogTWFzdGVyIG1vZGUgKi8KKwkJYlsyXSA9IDB4MDEgPDwgNDsgLyogTWFzdGVyIG1vZGUgKi8KIAogCWJbM10gPSAweDAwOwogCkBAIC00NjYsMTEgKzQ2Niw0NCBAQAogCiAJYlsyXSB8PSBzdC0+Y2hhbm5lbF9zdGF0ZTsKIAotCWRlYl9pbmZvKCJkYXRhIGZvciBzdHJlYW1pbmc6ICV4ICV4XG4iLGJbMV0sYlsyXSk7CisJZGViX2luZm8oImRhdGEgZm9yIHN0cmVhbWluZzogJXggJXhcbiIsIGJbMV0sIGJbMl0pOwogCiAJcmV0dXJuIGRpYjA3MDBfY3RybF93cihhZGFwLT5kZXYsIGIsIDQpOwogfQogCitpbnQgZGliMDcwMF9jaGFuZ2VfcHJvdG9jb2wodm9pZCAqcHJpdiwgdTY0IGlyX3R5cGUpCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gcHJpdjsKKwlzdHJ1Y3QgZGliMDcwMF9zdGF0ZSAqc3QgPSBkLT5wcml2OworCXU4IHJjX3NldHVwWzNdID0geyBSRVFVRVNUX1NFVF9SQywgMCwgMCB9OworCWludCBuZXdfcHJvdG8sIHJldDsKKworCS8qIFNldCB0aGUgSVIgbW9kZSAqLworCWlmIChpcl90eXBlID09IElSX1RZUEVfUkM1KQorCQluZXdfcHJvdG8gPSAxOworCWVsc2UgaWYgKGlyX3R5cGUgPT0gSVJfVFlQRV9ORUMpCisJCW5ld19wcm90byA9IDA7CisJZWxzZSBpZiAoaXJfdHlwZSA9PSBJUl9UWVBFX1JDNikgeworCQlpZiAoc3QtPmZ3X3ZlcnNpb24gPCAweDEwMjAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJbmV3X3Byb3RvID0gMjsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyY19zZXR1cFsxXSA9IG5ld19wcm90bzsKKworCXJldCA9IGRpYjA3MDBfY3RybF93cihkLCByY19zZXR1cCwgc2l6ZW9mKHJjX3NldHVwKSk7CisJaWYgKHJldCA8IDApIHsKKwkJZXJyKCJpciBwcm90b2NvbCBzZXR1cCBmYWlsZWQiKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkLT5wcm9wcy5yYy5jb3JlLnByb3RvY29sID0gaXJfdHlwZTsKKworCXJldHVybiByZXQ7Cit9CisKIC8qIE51bWJlciBvZiBrZXlwcmVzc2VzIHRvIGlnbm9yZSBiZWZvcmUgc3RhcnQgcmVwZWF0aW5nICovCiAjZGVmaW5lIFJDX1JFUEVBVF9ERUxBWV9WMV8yMCAxMAogCkBAIC00NzgsNyArNTExLDEzIEBACiBzdHJ1Y3QgZGliMDcwMF9yY19yZXNwb25zZSB7CiAJdTggcmVwb3J0X2lkOwogCXU4IGRhdGFfc3RhdGU7Ci0JdTE2IHN5c3RlbTsKKwl1bmlvbiB7CisJCXUxNiBzeXN0ZW0xNjsKKwkJc3RydWN0IHsKKwkJCXU4IHN5c3RlbTsKKwkJCXU4IG5vdF9zeXN0ZW07CisJCX07CisJfTsKIAl1OCBkYXRhOwogCXU4IG5vdF9kYXRhOwogfTsKQEAgLTQ4NywxNCArNTI2LDEwIEBACiBzdGF0aWMgdm9pZCBkaWIwNzAwX3JjX3VyYl9jb21wbGV0aW9uKHN0cnVjdCB1cmIgKnB1cmIpCiB7CiAJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gcHVyYi0+Y29udGV4dDsKLQlzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgKmtleW1hcDsKIAlzdHJ1Y3QgZGliMDcwMF9zdGF0ZSAqc3Q7Ci0Jc3RydWN0IGRpYjA3MDBfcmNfcmVzcG9uc2UgcG9sbF9yZXBseTsKLQl1OCAqYnVmOwotCWludCBmb3VuZCA9IDA7Ci0JdTMyIGV2ZW50OwotCWludCBzdGF0ZTsKLQlpbnQgaTsKKwlzdHJ1Y3QgZGliMDcwMF9yY19yZXNwb25zZSAqcG9sbF9yZXBseTsKKwl1MzIgdW5pbml0aWFsaXplZF92YXIoa2V5Y29kZSk7CisJdTggdG9nZ2xlOwogCiAJZGViX2luZm8oIiVzKClcbiIsIF9fZnVuY19fKTsKIAlpZiAoZCA9PSBOVUxMKQpAQCAtNTA2LDkgKzU0MSw4IEBACiAJCXJldHVybjsKIAl9CiAKLQlrZXltYXAgPSBkLT5wcm9wcy5yY19rZXlfbWFwOwogCXN0ID0gZC0+cHJpdjsKLQlidWYgPSAodTggKilwdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJcG9sbF9yZXBseSA9IHB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAogCWlmIChwdXJiLT5zdGF0dXMgPCAwKSB7CiAJCWRlYl9pbmZvKCJkaXNjb250aW51aW5nIHBvbGxpbmdcbiIpOwpAQCAtNTIxLDEwNCArNTU1LDUyIEBACiAJCWdvdG8gcmVzdWJtaXQ7CiAJfQogCi0JLyogU2V0IGluaXRpYWwgcmVzdWx0cyBpbiBjYXNlIHdlIGV4aXQgdGhlIGZ1bmN0aW9uIGVhcmx5ICovCi0JZXZlbnQgPSAwOwotCXN0YXRlID0gUkVNT1RFX05PX0tFWV9QUkVTU0VEOworCWRlYl9kYXRhKCJJUiBJRCA9ICUwMlggc3RhdGUgPSAlMDJYIFN5c3RlbSA9ICUwMlggJTAyWCBDbWQgPSAlMDJYICUwMlggKGxlbiAlZClcbiIsCisJCSBwb2xsX3JlcGx5LT5yZXBvcnRfaWQsIHBvbGxfcmVwbHktPmRhdGFfc3RhdGUsCisJCSBwb2xsX3JlcGx5LT5zeXN0ZW0sIHBvbGxfcmVwbHktPm5vdF9zeXN0ZW0sCisJCSBwb2xsX3JlcGx5LT5kYXRhLCBwb2xsX3JlcGx5LT5ub3RfZGF0YSwKKwkJIHB1cmItPmFjdHVhbF9sZW5ndGgpOwogCi0JZGViX2RhdGEoIklSIHJhdyAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAobGVuICVkKVxuIiwgYnVmWzBdLAotCQkgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSwgYnVmWzRdLCBidWZbNV0sIHB1cmItPmFjdHVhbF9sZW5ndGgpOwotCi0Jc3dpdGNoIChkdmJfdXNiX2RpYjA3MDBfaXJfcHJvdG8pIHsKLQljYXNlIDA6Ci0JCS8qIE5FQyBQcm90b2NvbCAqLwotCQlwb2xsX3JlcGx5LnJlcG9ydF9pZCAgPSAwOwotCQlwb2xsX3JlcGx5LmRhdGFfc3RhdGUgPSAxOwotCQlwb2xsX3JlcGx5LnN5c3RlbSAgICAgPSBidWZbMl07Ci0JCXBvbGxfcmVwbHkuZGF0YSAgICAgICA9IGJ1Zls0XTsKLQkJcG9sbF9yZXBseS5ub3RfZGF0YSAgID0gYnVmWzVdOworCXN3aXRjaCAoZC0+cHJvcHMucmMuY29yZS5wcm90b2NvbCkgeworCWNhc2UgSVJfVFlQRV9ORUM6CisJCXRvZ2dsZSA9IDA7CiAKIAkJLyogTkVDIHByb3RvY29sIHNlbmRzIHJlcGVhdCBjb2RlIGFzIDAgMCAwIEZGICovCi0JCWlmICgocG9sbF9yZXBseS5zeXN0ZW0gPT0gMHgwMCkgJiYgKHBvbGxfcmVwbHkuZGF0YSA9PSAweDAwKQotCQkgICAgJiYgKHBvbGxfcmVwbHkubm90X2RhdGEgPT0gMHhmZikpIHsKLQkJCXBvbGxfcmVwbHkuZGF0YV9zdGF0ZSA9IDI7CisJCWlmICgocG9sbF9yZXBseS0+c3lzdGVtID09IDB4MDApICYmIChwb2xsX3JlcGx5LT5kYXRhID09IDB4MDApCisJCSAgICAmJiAocG9sbF9yZXBseS0+bm90X2RhdGEgPT0gMHhmZikpIHsKKwkJCXBvbGxfcmVwbHktPmRhdGFfc3RhdGUgPSAyOwogCQkJYnJlYWs7CiAJCX0KKworCQlpZiAoKHBvbGxfcmVwbHktPnN5c3RlbSBeIHBvbGxfcmVwbHktPm5vdF9zeXN0ZW0pICE9IDB4ZmYpIHsKKwkJCWRlYl9kYXRhKCJORUMgZXh0ZW5kZWQgcHJvdG9jb2xcbiIpOworCQkJLyogTkVDIGV4dGVuZGVkIGNvZGUgLSAyNCBiaXRzICovCisJCQlrZXljb2RlID0gcG9sbF9yZXBseS0+c3lzdGVtMTYgPDwgOCB8IHBvbGxfcmVwbHktPmRhdGE7CisJCX0gZWxzZSB7CisJCQlkZWJfZGF0YSgiTkVDIG5vcm1hbCBwcm90b2NvbFxuIik7CisJCQkvKiBub3JtYWwgTkVDIGNvZGUgLSAxNiBiaXRzICovCisJCQlrZXljb2RlID0gcG9sbF9yZXBseS0+c3lzdGVtIDw8IDggfCBwb2xsX3JlcGx5LT5kYXRhOworCQl9CisKIAkJYnJlYWs7CiAJZGVmYXVsdDoKKwkJZGViX2RhdGEoIlJDNSBwcm90b2NvbFxuIik7CiAJCS8qIFJDNSBQcm90b2NvbCAqLwotCQlwb2xsX3JlcGx5LnJlcG9ydF9pZCAgPSBidWZbMF07Ci0JCXBvbGxfcmVwbHkuZGF0YV9zdGF0ZSA9IGJ1ZlsxXTsKLQkJcG9sbF9yZXBseS5zeXN0ZW0gICAgID0gKGJ1ZlsyXSA8PCA4KSB8IGJ1ZlszXTsKLQkJcG9sbF9yZXBseS5kYXRhICAgICAgID0gYnVmWzRdOwotCQlwb2xsX3JlcGx5Lm5vdF9kYXRhICAgPSBidWZbNV07CisJCXRvZ2dsZSA9IHBvbGxfcmVwbHktPnJlcG9ydF9pZDsKKwkJa2V5Y29kZSA9IHBvbGxfcmVwbHktPnN5c3RlbTE2IDw8IDggfCBwb2xsX3JlcGx5LT5kYXRhOworCiAJCWJyZWFrOwogCX0KIAotCWlmICgocG9sbF9yZXBseS5kYXRhICsgcG9sbF9yZXBseS5ub3RfZGF0YSkgIT0gMHhmZikgeworCWlmICgocG9sbF9yZXBseS0+ZGF0YSArIHBvbGxfcmVwbHktPm5vdF9kYXRhKSAhPSAweGZmKSB7CiAJCS8qIEtleSBmYWlsZWQgaW50ZWdyaXR5IGNoZWNrICovCiAJCWVycigia2V5IGZhaWxlZCBpbnRlZ3JpdHkgY2hlY2s6ICUwNHggJTAyeCAlMDJ4IiwKLQkJICAgIHBvbGxfcmVwbHkuc3lzdGVtLAotCQkgICAgcG9sbF9yZXBseS5kYXRhLCBwb2xsX3JlcGx5Lm5vdF9kYXRhKTsKKwkJICAgIHBvbGxfcmVwbHktPnN5c3RlbSwKKwkJICAgIHBvbGxfcmVwbHktPmRhdGEsIHBvbGxfcmVwbHktPm5vdF9kYXRhKTsKIAkJZ290byByZXN1Ym1pdDsKIAl9CiAKLQlkZWJfZGF0YSgicmlkPSUwMnggZHM9JTAyeCBzbT0lMDR4IGQ9JTAyeCBuZD0lMDJ4XG4iLAotCQkgcG9sbF9yZXBseS5yZXBvcnRfaWQsIHBvbGxfcmVwbHkuZGF0YV9zdGF0ZSwKLQkJIHBvbGxfcmVwbHkuc3lzdGVtLCBwb2xsX3JlcGx5LmRhdGEsIHBvbGxfcmVwbHkubm90X2RhdGEpOwotCi0JLyogRmluZCB0aGUga2V5IGluIHRoZSBtYXAgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmNfa2V5X21hcF9zaXplOyBpKyspIHsKLQkJaWYgKHJjNV9jdXN0b20oJmtleW1hcFtpXSkgPT0gKHBvbGxfcmVwbHkuc3lzdGVtICYgMHhmZikgJiYKLQkJICAgIHJjNV9kYXRhKCZrZXltYXBbaV0pID09IHBvbGxfcmVwbHkuZGF0YSkgewotCQkJZXZlbnQgPSBrZXltYXBbaV0uZXZlbnQ7Ci0JCQlmb3VuZCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChmb3VuZCA9PSAwKSB7Ci0JCWVycigiVW5rbm93biByZW1vdGUgY29udHJvbGxlciBrZXk6ICUwNHggJTAyeCAlMDJ4IiwKLQkJICAgIHBvbGxfcmVwbHkuc3lzdGVtLCBwb2xsX3JlcGx5LmRhdGEsIHBvbGxfcmVwbHkubm90X2RhdGEpOwotCQlkLT5sYXN0X2V2ZW50ID0gMDsKLQkJZ290byByZXN1Ym1pdDsKLQl9Ci0KLQlpZiAocG9sbF9yZXBseS5kYXRhX3N0YXRlID09IDEpIHsKLQkJLyogTmV3IGtleSBoaXQgKi8KLQkJc3QtPnJjX2NvdW50ZXIgPSAwOwotCQlldmVudCA9IGtleW1hcFtpXS5ldmVudDsKLQkJc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7Ci0JCWQtPmxhc3RfZXZlbnQgPSBrZXltYXBbaV0uZXZlbnQ7Ci0JfSBlbHNlIGlmIChwb2xsX3JlcGx5LmRhdGFfc3RhdGUgPT0gMikgewotCQkvKiBLZXkgcmVwZWF0ZWQgKi8KLQkJc3QtPnJjX2NvdW50ZXIrKzsKLQotCQkvKiBwcmV2ZW50cyB1bndhbnRlZCBkb3VibGUgaGl0cyAqLwotCQlpZiAoc3QtPnJjX2NvdW50ZXIgPiBSQ19SRVBFQVRfREVMQVlfVjFfMjApIHsKLQkJCWV2ZW50ID0gZC0+bGFzdF9ldmVudDsKLQkJCXN0YXRlID0gUkVNT1RFX0tFWV9QUkVTU0VEOwotCQkJc3QtPnJjX2NvdW50ZXIgPSBSQ19SRVBFQVRfREVMQVlfVjFfMjA7Ci0JCX0KLQl9IGVsc2UgewotCQllcnIoIlVua25vd24gZGF0YSBzdGF0ZSBbJWRdIiwgcG9sbF9yZXBseS5kYXRhX3N0YXRlKTsKLQl9Ci0KLQlzd2l0Y2ggKHN0YXRlKSB7Ci0JY2FzZSBSRU1PVEVfTk9fS0VZX1BSRVNTRUQ6Ci0JCWJyZWFrOwotCWNhc2UgUkVNT1RFX0tFWV9QUkVTU0VEOgotCQlkZWJfaW5mbygia2V5IHByZXNzZWRcbiIpOwotCQlkLT5sYXN0X2V2ZW50ID0gZXZlbnQ7Ci0JY2FzZSBSRU1PVEVfS0VZX1JFUEVBVDoKLQkJZGViX2luZm8oImtleSByZXBlYXRlZFxuIik7Ci0JCWlucHV0X2V2ZW50KGQtPnJjX2lucHV0X2RldiwgRVZfS0VZLCBldmVudCwgMSk7Ci0JCWlucHV0X3N5bmMoZC0+cmNfaW5wdXRfZGV2KTsKLQkJaW5wdXRfZXZlbnQoZC0+cmNfaW5wdXRfZGV2LCBFVl9LRVksIGQtPmxhc3RfZXZlbnQsIDApOwotCQlpbnB1dF9zeW5jKGQtPnJjX2lucHV0X2Rldik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KKwlpcl9rZXlkb3duKGQtPnJjX2lucHV0X2Rldiwga2V5Y29kZSwgdG9nZ2xlKTsKIAogcmVzdWJtaXQ6CiAJLyogQ2xlYW4gdGhlIGJ1ZmZlciBiZWZvcmUgd2UgcmVxdWV1ZSAqLwpAQCAtNjMxLDIxICs2MTMsMTAgQEAKIGludCBkaWIwNzAwX3JjX3NldHVwKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKIHsKIAlzdHJ1Y3QgZGliMDcwMF9zdGF0ZSAqc3QgPSBkLT5wcml2OwotCXU4IHJjX3NldHVwWzNdID0ge1JFUVVFU1RfU0VUX1JDLCBkdmJfdXNiX2RpYjA3MDBfaXJfcHJvdG8sIDB9OwogCXN0cnVjdCB1cmIgKnB1cmI7CiAJaW50IHJldDsKLQlpbnQgaTsKIAotCWlmIChkLT5wcm9wcy5yY19rZXlfbWFwID09IE5VTEwpCi0JCXJldHVybiAwOwotCi0JLyogU2V0IHRoZSBJUiBtb2RlICovCi0JaSA9IGRpYjA3MDBfY3RybF93cihkLCByY19zZXR1cCwgMyk7Ci0JaWYgKGk8MCkgewotCQllcnIoImlyIHByb3RvY29sIHNldHVwIGZhaWxlZCIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCisJLyogUG9sbC1iYXNlZC4gRG9uJ3QgaW5pdGlhbGl6ZSBidWxrIG1vZGUgKi8KIAlpZiAoc3QtPmZ3X3ZlcnNpb24gPCAweDEwMjAwKQogCQlyZXR1cm4gMDsKIApAQCAtNjUzLDE0ICs2MjQsMTQgQEAKIAlwdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAlpZiAocHVyYiA9PSBOVUxMKSB7CiAJCWVycigicmMgdXNiIGFsbG9jIHVyYiBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCXB1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGt6YWxsb2MoUkNfTVNHX1NJWkVfVjFfMjAsIEdGUF9LRVJORUwpOwogCWlmIChwdXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkgewogCQllcnIoInJjIGt6YWxsb2MgZmFpbGVkXG4iKTsKIAkJdXNiX2ZyZWVfdXJiKHB1cmIpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCXB1cmItPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKQEAgLTY2OSwxMiArNjQwLDEwIEBACiAJCQkgIGRpYjA3MDBfcmNfdXJiX2NvbXBsZXRpb24sIGQpOwogCiAJcmV0ID0gdXNiX3N1Ym1pdF91cmIocHVyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJldCAhPSAwKSB7CisJaWYgKHJldCkKIAkJZXJyKCJyYyBzdWJtaXQgdXJiIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtMTsKLQl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGRpYjA3MDBfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCkBAIC02OTgsNiArNjY3LDE1IEBACiAJCQlzdC0+ZndfdmVyc2lvbiA9IGZ3X3ZlcnNpb247CiAJCQlzdC0+bmJfcGFja2V0X2J1ZmZlcl9zaXplID0gKHUzMiluYl9wYWNrZXRfYnVmZmVyX3NpemU7CiAKKwkJCS8qIERpc2FibGUgcG9sbGluZyBtb2RlIG9uIG5ld2VyIGZpcm13YXJlcyAqLworCQkJaWYgKHN0LT5md192ZXJzaW9uID49IDB4MTAyMDApCisJCQkJZGV2LT5wcm9wcy5yYy5jb3JlLmJ1bGtfbW9kZSA9IHRydWU7CisJCQllbHNlCisJCQkJZGV2LT5wcm9wcy5yYy5jb3JlLmJ1bGtfbW9kZSA9IGZhbHNlOworCisJCQkvKiBOZWVkIGEgaGlnaGVyIGRlbGF5LCB0byBhdm9pZCB3cm9uZyByZXBlYXQgKi8KKwkJCWRldi0+cmNfaW5wdXRfZGV2LT5yZXBbUkVQX0RFTEFZXSA9IDUwMDsKKwogCQkJZGliMDcwMF9yY19zZXR1cChkZXYpOwogCiAJCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCmluZGV4IDgwMDgwMGEuLmY2MzRkMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYwpAQCAtNDczLDE2ICs0NzMsMTkgQEAKIC8qIE51bWJlciBvZiBrZXlwcmVzc2VzIHRvIGlnbm9yZSBiZWZvcmUgc3RhcnQgcmVwZWF0aW5nICovCiAjZGVmaW5lIFJDX1JFUEVBVF9ERUxBWSA2CiAKLXN0YXRpYyBpbnQgZGliMDcwMF9yY19xdWVyeShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUzMiAqZXZlbnQsIGludCAqc3RhdGUpCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgd2hlbiBmaXJtd2FyZSBpcyA8IDEuMjAgdmVyc2lvbi4gTmV3ZXIKKyAqIGZpcm13YXJlcyB1c2UgYnVsayBtb2RlLCB3aXRoIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCBhdCBkaWIwNzAwX2NvcmUsCisgKiBhdCBkaWIwNzAwX3JjX3VyYl9jb21wbGV0aW9uKCkKKyAqLworc3RhdGljIGludCBkaWIwNzAwX3JjX3F1ZXJ5X29sZF9maXJtd2FyZShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCiB7CiAJdTgga2V5WzRdOworCXUzMiBrZXljb2RlOworCXU4IHRvZ2dsZTsKIAlpbnQgaTsKLQlzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgKmtleW1hcCA9IGQtPnByb3BzLnJjX2tleV9tYXA7CiAJc3RydWN0IGRpYjA3MDBfc3RhdGUgKnN0ID0gZC0+cHJpdjsKIAotCSpldmVudCA9IDA7Ci0JKnN0YXRlID0gUkVNT1RFX05PX0tFWV9QUkVTU0VEOwotCiAJaWYgKHN0LT5md192ZXJzaW9uID49IDB4MTAyMDApIHsKIAkJLyogRm9yIDEuMjAgZmlybXdhcmUgLCBXZSBuZWVkIHRvIGtlZXAgdGhlIFJDIHBvbGxpbmcKIAkJICAgY2FsbGJhY2sgc28gd2UgY2FuIHJldXNlIHRoZSBpbnB1dCBkZXZpY2Ugc2V0dXAgaW4KQEAgLTQ5MSwzNDggKzQ5NCw0NSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpPWRpYjA3MDBfY3RybF9yZChkLHJjX3JlcXVlc3QsMixrZXksNCk7Ci0JaWYgKGk8PTApIHsKKwlpID0gZGliMDcwMF9jdHJsX3JkKGQsIHJjX3JlcXVlc3QsIDIsIGtleSwgNCk7CisJaWYgKGkgPD0gMCkgewogCQllcnIoIlJDIFF1ZXJ5IEZhaWxlZCIpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJLyogbG9zaW5nIGhhbGYgb2YgS0VZXzAgZXZlbnRzIGZyb20gUGhpbGlwcHMgcmM1IHJlbW90ZXMuLiAqLwotCWlmIChrZXlbMF09PTAgJiYga2V5WzFdPT0wICYmIGtleVsyXT09MCAmJiBrZXlbM109PTApIHJldHVybiAwOworCWlmIChrZXlbMF0gPT0gMCAmJiBrZXlbMV0gPT0gMCAmJiBrZXlbMl0gPT0gMCAmJiBrZXlbM10gPT0gMCkKKwkJcmV0dXJuIDA7CiAKIAkvKiBpbmZvKCIlZDogJTJYICUyWCAlMlggJTJYIixkdmJfdXNiX2RpYjA3MDBfaXJfcHJvdG8sKGludClrZXlbMy0yXSwoaW50KWtleVszLTNdLChpbnQpa2V5WzMtMV0sKGludClrZXlbM10pOyAgKi8KIAogCWRpYjA3MDBfcmNfc2V0dXAoZCk7IC8qIHJlc2V0IGlyIHNlbnNvciBkYXRhIHRvIHByZXZlbnQgZmFsc2UgZXZlbnRzICovCiAKLQlzd2l0Y2ggKGR2Yl91c2JfZGliMDcwMF9pcl9wcm90bykgewotCWNhc2UgMDogeworCWQtPmxhc3RfZXZlbnQgPSAwOworCXN3aXRjaCAoZC0+cHJvcHMucmMuY29yZS5wcm90b2NvbCkgeworCWNhc2UgSVJfVFlQRV9ORUM6CiAJCS8qIE5FQyBwcm90b2NvbCBzZW5kcyByZXBlYXQgY29kZSBhcyAwIDAgMCBGRiAqLwogCQlpZiAoKGtleVszLTJdID09IDB4MDApICYmIChrZXlbMy0zXSA9PSAweDAwKSAmJgotCQkgICAgKGtleVszXSA9PSAweEZGKSkgewotCQkJc3QtPnJjX2NvdW50ZXIrKzsKLQkJCWlmIChzdC0+cmNfY291bnRlciA+IFJDX1JFUEVBVF9ERUxBWSkgewotCQkJCSpldmVudCA9IGQtPmxhc3RfZXZlbnQ7Ci0JCQkJKnN0YXRlID0gUkVNT1RFX0tFWV9QUkVTU0VEOwotCQkJCXN0LT5yY19jb3VudGVyID0gUkNfUkVQRUFUX0RFTEFZOwotCQkJfQotCQkJcmV0dXJuIDA7CisJCSAgICAoa2V5WzNdID09IDB4ZmYpKQorCQkJa2V5Y29kZSA9IGQtPmxhc3RfZXZlbnQ7CisJCWVsc2UgeworCQkJa2V5Y29kZSA9IGtleVszLTJdIDw8IDggfCBrZXlbMy0zXTsKKwkJCWQtPmxhc3RfZXZlbnQgPSBrZXljb2RlOwogCQl9Ci0JCWZvciAoaT0wO2k8ZC0+cHJvcHMucmNfa2V5X21hcF9zaXplOyBpKyspIHsKLQkJCWlmIChyYzVfY3VzdG9tKCZrZXltYXBbaV0pID09IGtleVszLTJdICYmCi0JCQkgICAgcmM1X2RhdGEoJmtleW1hcFtpXSkgPT0ga2V5WzMtM10pIHsKLQkJCQlzdC0+cmNfY291bnRlciA9IDA7Ci0JCQkJKmV2ZW50ID0ga2V5bWFwW2ldLmV2ZW50OwotCQkJCSpzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKLQkJCQlkLT5sYXN0X2V2ZW50ID0ga2V5bWFwW2ldLmV2ZW50OwotCQkJCXJldHVybiAwOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCX0KLQlkZWZhdWx0OiB7Ci0JCS8qIFJDLTUgcHJvdG9jb2wgY2hhbmdlcyB0b2dnbGUgYml0IG9uIG5ldyBrZXlwcmVzcyAqLwotCQlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmNfa2V5X21hcF9zaXplOyBpKyspIHsKLQkJCWlmIChyYzVfY3VzdG9tKCZrZXltYXBbaV0pID09IGtleVszLTJdICYmCi0JCQkgICAgcmM1X2RhdGEoJmtleW1hcFtpXSkgPT0ga2V5WzMtM10pIHsKLQkJCQlpZiAoZC0+bGFzdF9ldmVudCA9PSBrZXltYXBbaV0uZXZlbnQgJiYKLQkJCQkJa2V5WzMtMV0gPT0gc3QtPnJjX3RvZ2dsZSkgewotCQkJCQlzdC0+cmNfY291bnRlcisrOwotCQkJCQkvKiBwcmV2ZW50cyB1bndhbnRlZCBkb3VibGUgaGl0cyAqLwotCQkJCQlpZiAoc3QtPnJjX2NvdW50ZXIgPiBSQ19SRVBFQVRfREVMQVkpIHsKLQkJCQkJCSpldmVudCA9IGQtPmxhc3RfZXZlbnQ7Ci0JCQkJCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7Ci0JCQkJCQlzdC0+cmNfY291bnRlciA9IFJDX1JFUEVBVF9ERUxBWTsKLQkJCQkJfQogCi0JCQkJCXJldHVybiAwOwotCQkJCX0KLQkJCQlzdC0+cmNfY291bnRlciA9IDA7Ci0JCQkJKmV2ZW50ID0ga2V5bWFwW2ldLmV2ZW50OwotCQkJCSpzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKLQkJCQlzdC0+cmNfdG9nZ2xlID0ga2V5WzMtMV07Ci0JCQkJZC0+bGFzdF9ldmVudCA9IGtleW1hcFtpXS5ldmVudDsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJfQorCQlpcl9rZXlkb3duKGQtPnJjX2lucHV0X2Rldiwga2V5Y29kZSwgMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIFJDLTUgcHJvdG9jb2wgY2hhbmdlcyB0b2dnbGUgYml0IG9uIG5ldyBrZXlwcmVzcyAqLworCQlrZXljb2RlID0ga2V5WzMtMl0gPDwgOCB8IGtleVszLTNdOworCQl0b2dnbGUgPSBrZXlbMy0xXTsKKwkJaXJfa2V5ZG93bihkLT5yY19pbnB1dF9kZXYsIGtleWNvZGUsIHRvZ2dsZSk7CisKIAkJYnJlYWs7CiAJfQotCX0KLQllcnIoIlVua25vd24gcmVtb3RlIGNvbnRyb2xsZXIga2V5OiAlMlggJTJYICUyWCAlMlgiLCAoaW50KSBrZXlbMy0yXSwgKGludCkga2V5WzMtM10sIChpbnQpIGtleVszLTFdLCAoaW50KSBrZXlbM10pOwotCWQtPmxhc3RfZXZlbnQgPSAwOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IGlyX2NvZGVzX2RpYjA3MDBfdGFibGVbXSA9IHsKLQkvKiBLZXkgY29kZXMgZm9yIHRoZSB0aW55IFBpbm5hY2xlIHJlbW90ZSovCi0JeyAweDA3MDAsIEtFWV9NVVRFIH0sCi0JeyAweDA3MDEsIEtFWV9NRU5VIH0sIC8qIFBpbm5hY2xlIGxvZ28gKi8KLQl7IDB4MDczOSwgS0VZX1BPV0VSIH0sCi0JeyAweDA3MDMsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgwNzA5LCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgwNzA2LCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDA3MGMsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgwNzBmLCBLRVlfMSB9LAotCXsgMHgwNzE1LCBLRVlfMiB9LAotCXsgMHgwNzEwLCBLRVlfMyB9LAotCXsgMHgwNzE4LCBLRVlfNCB9LAotCXsgMHgwNzFiLCBLRVlfNSB9LAotCXsgMHgwNzFlLCBLRVlfNiB9LAotCXsgMHgwNzExLCBLRVlfNyB9LAotCXsgMHgwNzIxLCBLRVlfOCB9LAotCXsgMHgwNzEyLCBLRVlfOSB9LAotCXsgMHgwNzI3LCBLRVlfMCB9LAotCXsgMHgwNzI0LCBLRVlfU0NSRUVOIH0sIC8qICdTcXVhcmUnIGtleSAqLwotCXsgMHgwNzJhLCBLRVlfVEVYVCB9LCAgIC8qICdUJyBrZXkgKi8KLQl7IDB4MDcyZCwgS0VZX1JFV0lORCB9LAotCXsgMHgwNzMwLCBLRVlfUExBWSB9LAotCXsgMHgwNzMzLCBLRVlfRkFTVEZPUldBUkQgfSwKLQl7IDB4MDczNiwgS0VZX1JFQ09SRCB9LAotCXsgMHgwNzNjLCBLRVlfU1RPUCB9LAotCXsgMHgwNzNmLCBLRVlfQ0FOQ0VMIH0sIC8qICc/JyBrZXkgKi8KLQkvKiBLZXkgY29kZXMgZm9yIHRoZSBUZXJyYXRlYyBDaW5lcmd5IERUIFhTIERpdmVyc2l0eSwgc2ltaWxhciB0byBjaW5lcmd5VDIuYyAqLwotCXsgMHhlYjAxLCBLRVlfUE9XRVIgfSwKLQl7IDB4ZWIwMiwgS0VZXzEgfSwKLQl7IDB4ZWIwMywgS0VZXzIgfSwKLQl7IDB4ZWIwNCwgS0VZXzMgfSwKLQl7IDB4ZWIwNSwgS0VZXzQgfSwKLQl7IDB4ZWIwNiwgS0VZXzUgfSwKLQl7IDB4ZWIwNywgS0VZXzYgfSwKLQl7IDB4ZWIwOCwgS0VZXzcgfSwKLQl7IDB4ZWIwOSwgS0VZXzggfSwKLQl7IDB4ZWIwYSwgS0VZXzkgfSwKLQl7IDB4ZWIwYiwgS0VZX1ZJREVPIH0sCi0JeyAweGViMGMsIEtFWV8wIH0sCi0JeyAweGViMGQsIEtFWV9SRUZSRVNIIH0sCi0JeyAweGViMGYsIEtFWV9FUEcgfSwKLQl7IDB4ZWIxMCwgS0VZX1VQIH0sCi0JeyAweGViMTEsIEtFWV9MRUZUIH0sCi0JeyAweGViMTIsIEtFWV9PSyB9LAotCXsgMHhlYjEzLCBLRVlfUklHSFQgfSwKLQl7IDB4ZWIxNCwgS0VZX0RPV04gfSwKLQl7IDB4ZWIxNiwgS0VZX0lORk8gfSwKLQl7IDB4ZWIxNywgS0VZX1JFRCB9LAotCXsgMHhlYjE4LCBLRVlfR1JFRU4gfSwKLQl7IDB4ZWIxOSwgS0VZX1lFTExPVyB9LAotCXsgMHhlYjFhLCBLRVlfQkxVRSB9LAotCXsgMHhlYjFiLCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweGViMWMsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHhlYjFkLCBLRVlfTVVURSB9LAotCXsgMHhlYjFlLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHhlYjFmLCBLRVlfQ0hBTk5FTERPV04gfSwKLQl7IDB4ZWI0MCwgS0VZX1BBVVNFIH0sCi0JeyAweGViNDEsIEtFWV9IT01FIH0sCi0JeyAweGViNDIsIEtFWV9NRU5VIH0sIC8qIERWRCBNZW51ICovCi0JeyAweGViNDMsIEtFWV9TVUJUSVRMRSB9LAotCXsgMHhlYjQ0LCBLRVlfVEVYVCB9LCAvKiBUZWxldGV4dCAqLwotCXsgMHhlYjQ1LCBLRVlfREVMRVRFIH0sCi0JeyAweGViNDYsIEtFWV9UViB9LAotCXsgMHhlYjQ3LCBLRVlfRFZEIH0sCi0JeyAweGViNDgsIEtFWV9TVE9QIH0sCi0JeyAweGViNDksIEtFWV9WSURFTyB9LAotCXsgMHhlYjRhLCBLRVlfQVVESU8gfSwgLyogTXVzaWMgKi8KLQl7IDB4ZWI0YiwgS0VZX1NDUkVFTiB9LCAvKiBQaWMgKi8KLQl7IDB4ZWI0YywgS0VZX1BMQVkgfSwKLQl7IDB4ZWI0ZCwgS0VZX0JBQ0sgfSwKLQl7IDB4ZWI0ZSwgS0VZX1JFV0lORCB9LAotCXsgMHhlYjRmLCBLRVlfRkFTVEZPUldBUkQgfSwKLQl7IDB4ZWI1NCwgS0VZX1BSRVZJT1VTIH0sCi0JeyAweGViNTgsIEtFWV9SRUNPUkQgfSwKLQl7IDB4ZWI1YywgS0VZX05FWFQgfSwKLQotCS8qIEtleSBjb2RlcyBmb3IgdGhlIEhhdXBhdWdlIFdpblRWIE5vdmEtVEQsIGNvcGllZCBmcm9tIG5vdmEtdC11c2IyLmMgKE5vdmEtVCBVU0IyKSAqLwotCXsgMHgxZTAwLCBLRVlfMCB9LAotCXsgMHgxZTAxLCBLRVlfMSB9LAotCXsgMHgxZTAyLCBLRVlfMiB9LAotCXsgMHgxZTAzLCBLRVlfMyB9LAotCXsgMHgxZTA0LCBLRVlfNCB9LAotCXsgMHgxZTA1LCBLRVlfNSB9LAotCXsgMHgxZTA2LCBLRVlfNiB9LAotCXsgMHgxZTA3LCBLRVlfNyB9LAotCXsgMHgxZTA4LCBLRVlfOCB9LAotCXsgMHgxZTA5LCBLRVlfOSB9LAotCXsgMHgxZTBhLCBLRVlfS1BBU1RFUklTSyB9LAotCXsgMHgxZTBiLCBLRVlfUkVEIH0sCi0JeyAweDFlMGMsIEtFWV9SQURJTyB9LAotCXsgMHgxZTBkLCBLRVlfTUVOVSB9LAotCXsgMHgxZTBlLCBLRVlfR1JBVkUgfSwgLyogIyAqLwotCXsgMHgxZTBmLCBLRVlfTVVURSB9LAotCXsgMHgxZTEwLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MWUxMSwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MWUxMiwgS0VZX0NIQU5ORUwgfSwKLQl7IDB4MWUxNCwgS0VZX1VQIH0sCi0JeyAweDFlMTUsIEtFWV9ET1dOIH0sCi0JeyAweDFlMTYsIEtFWV9MRUZUIH0sCi0JeyAweDFlMTcsIEtFWV9SSUdIVCB9LAotCXsgMHgxZTE4LCBLRVlfVklERU8gfSwKLQl7IDB4MWUxOSwgS0VZX0FVRElPIH0sCi0JeyAweDFlMWEsIEtFWV9NRURJQSB9LAotCXsgMHgxZTFiLCBLRVlfRVBHIH0sCi0JeyAweDFlMWMsIEtFWV9UViB9LAotCXsgMHgxZTFlLCBLRVlfTkVYVCB9LAotCXsgMHgxZTFmLCBLRVlfQkFDSyB9LAotCXsgMHgxZTIwLCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDFlMjEsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgxZTI0LCBLRVlfTEFTVCB9LCAvKiBTa2lwIGJhY2t3YXJkcyAqLwotCXsgMHgxZTI1LCBLRVlfT0sgfSwKLQl7IDB4MWUyOSwgS0VZX0JMVUV9LAotCXsgMHgxZTJlLCBLRVlfR1JFRU4gfSwKLQl7IDB4MWUzMCwgS0VZX1BBVVNFIH0sCi0JeyAweDFlMzIsIEtFWV9SRVdJTkQgfSwKLQl7IDB4MWUzNCwgS0VZX0ZBU1RGT1JXQVJEIH0sCi0JeyAweDFlMzUsIEtFWV9QTEFZIH0sCi0JeyAweDFlMzYsIEtFWV9TVE9QIH0sCi0JeyAweDFlMzcsIEtFWV9SRUNPUkQgfSwKLQl7IDB4MWUzOCwgS0VZX1lFTExPVyB9LAotCXsgMHgxZTNiLCBLRVlfR09UTyB9LAotCXsgMHgxZTNkLCBLRVlfUE9XRVIgfSwKLQotCS8qIEtleSBjb2RlcyBmb3IgdGhlIExlYWR0ZWsgV2luZmFzdCBEVFYgRG9uZ2xlICovCi0JeyAweDAwNDIsIEtFWV9QT1dFUiB9LAotCXsgMHgwNzdjLCBLRVlfVFVORVIgfSwKLQl7IDB4MGY0ZSwgS0VZX1BSSU5UIH0sIC8qIFBSRVZJRVcgKi8KLQl7IDB4MDg0MCwgS0VZX1NDUkVFTiB9LCAvKiBmdWxsIHNjcmVlbiB0b2dnbGUqLwotCXsgMHgwZjcxLCBLRVlfRE9UIH0sIC8qIGZyZXF1ZW5jeSAqLwotCXsgMHgwNzQzLCBLRVlfMCB9LAotCXsgMHgwYzQxLCBLRVlfMSB9LAotCXsgMHgwNDQzLCBLRVlfMiB9LAotCXsgMHgwYjdmLCBLRVlfMyB9LAotCXsgMHgwZTQxLCBLRVlfNCB9LAotCXsgMHgwNjQzLCBLRVlfNSB9LAotCXsgMHgwOTdmLCBLRVlfNiB9LAotCXsgMHgwZDdlLCBLRVlfNyB9LAotCXsgMHgwNTdjLCBLRVlfOCB9LAotCXsgMHgwYTQwLCBLRVlfOSB9LAotCXsgMHgwZTRlLCBLRVlfQ0xFQVIgfSwKLQl7IDB4MDQ3YywgS0VZX0NIQU5ORUwgfSwgLyogc2hvdyBjaGFubmVsIG51bWJlciAqLwotCXsgMHgwZjQxLCBLRVlfTEFTVCB9LCAvKiByZWNhbGwgKi8KLQl7IDB4MDM0MiwgS0VZX01VVEUgfSwKLQl7IDB4MDY0YywgS0VZX1JFU0VSVkVEIH0sIC8qIFBJUCBidXR0b24qLwotCXsgMHgwMTcyLCBLRVlfU0hVRkZMRSB9LCAvKiBTTkFQU0hPVCAqLwotCXsgMHgwYzRlLCBLRVlfUExBWVBBVVNFIH0sIC8qIFRJTUVTSElGVCAqLwotCXsgMHgwYjcwLCBLRVlfUkVDT1JEIH0sCi0JeyAweDAzN2QsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgwMTdkLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgwMjQyLCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDAwN2QsIEtFWV9DSEFOTkVMRE9XTiB9LAotCi0JLyogS2V5IGNvZGVzIGZvciBOb3ZhLVREICJjcmVkaXQgY2FyZCIgcmVtb3RlIGNvbnRyb2wuICovCi0JeyAweDFkMDAsIEtFWV8wIH0sCi0JeyAweDFkMDEsIEtFWV8xIH0sCi0JeyAweDFkMDIsIEtFWV8yIH0sCi0JeyAweDFkMDMsIEtFWV8zIH0sCi0JeyAweDFkMDQsIEtFWV80IH0sCi0JeyAweDFkMDUsIEtFWV81IH0sCi0JeyAweDFkMDYsIEtFWV82IH0sCi0JeyAweDFkMDcsIEtFWV83IH0sCi0JeyAweDFkMDgsIEtFWV84IH0sCi0JeyAweDFkMDksIEtFWV85IH0sCi0JeyAweDFkMGEsIEtFWV9URVhUIH0sCi0JeyAweDFkMGQsIEtFWV9NRU5VIH0sCi0JeyAweDFkMGYsIEtFWV9NVVRFIH0sCi0JeyAweDFkMTAsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgxZDExLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgxZDEyLCBLRVlfQ0hBTk5FTCB9LAotCXsgMHgxZDE0LCBLRVlfVVAgfSwKLQl7IDB4MWQxNSwgS0VZX0RPV04gfSwKLQl7IDB4MWQxNiwgS0VZX0xFRlQgfSwKLQl7IDB4MWQxNywgS0VZX1JJR0hUIH0sCi0JeyAweDFkMWMsIEtFWV9UViB9LAotCXsgMHgxZDFlLCBLRVlfTkVYVCB9LAotCXsgMHgxZDFmLCBLRVlfQkFDSyB9LAotCXsgMHgxZDIwLCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDFkMjEsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgxZDI0LCBLRVlfTEFTVCB9LAotCXsgMHgxZDI1LCBLRVlfT0sgfSwKLQl7IDB4MWQzMCwgS0VZX1BBVVNFIH0sCi0JeyAweDFkMzIsIEtFWV9SRVdJTkQgfSwKLQl7IDB4MWQzNCwgS0VZX0ZBU1RGT1JXQVJEIH0sCi0JeyAweDFkMzUsIEtFWV9QTEFZIH0sCi0JeyAweDFkMzYsIEtFWV9TVE9QIH0sCi0JeyAweDFkMzcsIEtFWV9SRUNPUkQgfSwKLQl7IDB4MWQzYiwgS0VZX0dPVE8gfSwKLQl7IDB4MWQzZCwgS0VZX1BPV0VSIH0sCi0KLQkvKiBLZXkgY29kZXMgZm9yIHRoZSBQaXhlbHZpZXcgU0JUVkQgcmVtb3RlIChwcm90byBORUMpICovCi0JeyAweDg2MTMsIEtFWV9NVVRFIH0sCi0JeyAweDg2MTIsIEtFWV9QT1dFUiB9LAotCXsgMHg4NjAxLCBLRVlfMSB9LAotCXsgMHg4NjAyLCBLRVlfMiB9LAotCXsgMHg4NjAzLCBLRVlfMyB9LAotCXsgMHg4NjA0LCBLRVlfNCB9LAotCXsgMHg4NjA1LCBLRVlfNSB9LAotCXsgMHg4NjA2LCBLRVlfNiB9LAotCXsgMHg4NjA3LCBLRVlfNyB9LAotCXsgMHg4NjA4LCBLRVlfOCB9LAotCXsgMHg4NjA5LCBLRVlfOSB9LAotCXsgMHg4NjAwLCBLRVlfMCB9LAotCXsgMHg4NjBkLCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDg2MTksIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHg4NjEwLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4ODYwYywgS0VZX1ZPTFVNRURPV04gfSwKLQotCXsgMHg4NjBhLCBLRVlfQ0FNRVJBIH0sCi0JeyAweDg2MGIsIEtFWV9aT09NIH0sCi0JeyAweDg2MWIsIEtFWV9CQUNLU1BBQ0UgfSwKLQl7IDB4ODYxNSwgS0VZX0VOVEVSIH0sCi0KLQl7IDB4ODYxZCwgS0VZX1VQIH0sCi0JeyAweDg2MWUsIEtFWV9ET1dOIH0sCi0JeyAweDg2MGUsIEtFWV9MRUZUIH0sCi0JeyAweDg2MGYsIEtFWV9SSUdIVCB9LAotCi0JeyAweDg2MTgsIEtFWV9SRUNPUkQgfSwKLQl7IDB4ODYxYSwgS0VZX1NUT1AgfSwKLQotCS8qIEtleSBjb2RlcyBmb3IgdGhlIEV2b2x1dGVQQyBUVldheSsgcmVtb3RlIChwcm90byBORUMpICovCi0JeyAweDdhMDAsIEtFWV9NRU5VIH0sCi0JeyAweDdhMDEsIEtFWV9SRUNPUkQgfSwKLQl7IDB4N2EwMiwgS0VZX1BMQVkgfSwKLQl7IDB4N2EwMywgS0VZX1NUT1AgfSwKLQl7IDB4N2ExMCwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHg3YTExLCBLRVlfQ0hBTk5FTERPV04gfSwKLQl7IDB4N2ExMiwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDdhMTMsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDdhNDAsIEtFWV9QT1dFUiB9LAotCXsgMHg3YTQxLCBLRVlfTVVURSB9LAotCi0JLyogS2V5IGNvZGVzIGZvciB0aGUgRWxnYXRvIEV5ZVRWIERpdmVyc2l0eSBzaWx2ZXIgcmVtb3RlLAotCSAgIHNldCBkdmJfdXNiX2RpYjA3MDBfaXJfcHJvdG89MCAqLwotCXsgMHg0NTAxLCBLRVlfUE9XRVIgfSwKLQl7IDB4NDUwMiwgS0VZX01VVEUgfSwKLQl7IDB4NDUwMywgS0VZXzEgfSwKLQl7IDB4NDUwNCwgS0VZXzIgfSwKLQl7IDB4NDUwNSwgS0VZXzMgfSwKLQl7IDB4NDUwNiwgS0VZXzQgfSwKLQl7IDB4NDUwNywgS0VZXzUgfSwKLQl7IDB4NDUwOCwgS0VZXzYgfSwKLQl7IDB4NDUwOSwgS0VZXzcgfSwKLQl7IDB4NDUwYSwgS0VZXzggfSwKLQl7IDB4NDUwYiwgS0VZXzkgfSwKLQl7IDB4NDUwYywgS0VZX0xBU1QgfSwKLQl7IDB4NDUwZCwgS0VZXzAgfSwKLQl7IDB4NDUwZSwgS0VZX0VOVEVSIH0sCi0JeyAweDQ1MGYsIEtFWV9SRUQgfSwKLQl7IDB4NDUxMCwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHg0NTExLCBLRVlfR1JFRU4gfSwKLQl7IDB4NDUxMiwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4NDUxMywgS0VZX09LIH0sCi0JeyAweDQ1MTQsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHg0NTE1LCBLRVlfWUVMTE9XIH0sCi0JeyAweDQ1MTYsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHg0NTE3LCBLRVlfQkxVRSB9LAotCXsgMHg0NTE4LCBLRVlfTEVGVCB9LCAvKiBTa2lwIGJhY2t3YXJkcyAqLwotCXsgMHg0NTE5LCBLRVlfUExBWVBBVVNFIH0sCi0JeyAweDQ1MWEsIEtFWV9SSUdIVCB9LCAvKiBTa2lwIGZvcndhcmQgKi8KLQl7IDB4NDUxYiwgS0VZX1JFV0lORCB9LAotCXsgMHg0NTFjLCBLRVlfTCB9LCAvKiBMaXZlICovCi0JeyAweDQ1MWQsIEtFWV9GQVNURk9SV0FSRCB9LAotCXsgMHg0NTFlLCBLRVlfU1RPUCB9LCAvKiAnUmV2ZWFsJyBmb3IgVGVsZXRleHQgKi8KLQl7IDB4NDUxZiwgS0VZX01FTlUgfSwgLyogS0VZX1RFWFQgZm9yIFRlbGV0ZXh0ICovCi0JeyAweDQ1NDAsIEtFWV9SRUNPUkQgfSwgLyogRm9udCAnU2l6ZScgZm9yIFRlbGV0ZXh0ICovCi0JeyAweDQ1NDEsIEtFWV9TQ1JFRU4gfSwgLyogIEZ1bGwgc2NyZWVuIHRvZ2dsZSwgJ0hvbGQnIGZvciBUZWxldGV4dCAqLwotCXsgMHg0NTQyLCBLRVlfU0VMRUNUIH0sIC8qIFNlbGVjdCB2aWRlbyBpbnB1dCwgJ1NlbGVjdCcgZm9yIFRlbGV0ZXh0ICovCi19OwotCiAvKiBTVEs3NzAwUDogSGF1cHBhdWdlIE5vdmEtVCBTdGljaywgQVZlck1lZGlhIFZvbGFyICovCiBzdGF0aWMgc3RydWN0IGRpYngwMDBfYWdjX2NvbmZpZyBzdGs3NzAwcF83MDAwbV9tdDIwNjBfYWdjX2NvbmZpZyA9IHsKIAlCQU5EX1VIRiB8IEJBTkRfVkhGLApAQCAtMjE2OCwxMCArMTg2OCwxNyBAQAogCQkJfQogCQl9LAogCi0JCS5yY19pbnRlcnZhbCAgICAgID0gREVGQVVMVF9SQ19JTlRFUlZBTCwKLQkJLnJjX2tleV9tYXAgICAgICAgPSBpcl9jb2Rlc19kaWIwNzAwX3RhYmxlLAotCQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZGliMDcwMF90YWJsZSksCi0JCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeQorCQkucmMuY29yZSA9IHsKKwkJCS5yY19pbnRlcnZhbCAgICAgID0gREVGQVVMVF9SQ19JTlRFUlZBTCwKKwkJCS5yY19jb2RlcyAgICAgICAgID0gUkNfTUFQX0RJQjA3MDBfUkM1X1RBQkxFLAorCQkJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWIwNzAwX3JjX3F1ZXJ5X29sZF9maXJtd2FyZSwKKwkJCS5yY19wcm9wcyA9IHsKKwkJCQkuYWxsb3dlZF9wcm90b3MgPSBJUl9UWVBFX1JDNSB8CisJCQkJCQkgIElSX1RZUEVfUkM2IHwKKwkJCQkJCSAgSVJfVFlQRV9ORUMsCisJCQkJLmNoYW5nZV9wcm90b2NvbCA9IGRpYjA3MDBfY2hhbmdlX3Byb3RvY29sLAorCQkJfSwKKwkJfSwKIAl9LCB7IERJQjA3MDBfREVGQVVMVF9ERVZJQ0VfUFJPUEVSVElFUywKIAogCQkubnVtX2FkYXB0ZXJzID0gMiwKQEAgLTIxOTcsMTAgKzE5MDQsMTcgQEAKIAkJCX0sCiAJCX0sCiAKLQkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAotCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2RpYjA3MDBfdGFibGUsCi0JCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShpcl9jb2Rlc19kaWIwNzAwX3RhYmxlKSwKLQkJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWIwNzAwX3JjX3F1ZXJ5CisJCS5yYy5jb3JlID0geworCQkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAorCQkJLnJjX2NvZGVzICAgICAgICAgPSBSQ19NQVBfRElCMDcwMF9SQzVfVEFCTEUsCisJCQkucmNfcXVlcnkgICAgICAgICA9IGRpYjA3MDBfcmNfcXVlcnlfb2xkX2Zpcm13YXJlLAorCQkJLnJjX3Byb3BzID0geworCQkJCS5hbGxvd2VkX3Byb3RvcyA9IElSX1RZUEVfUkM1IHwKKwkJCQkJCSAgSVJfVFlQRV9SQzYgfAorCQkJCQkJICBJUl9UWVBFX05FQywKKwkJCQkuY2hhbmdlX3Byb3RvY29sID0gZGliMDcwMF9jaGFuZ2VfcHJvdG9jb2wsCisJCQl9LAorCQl9LAogCX0sIHsgRElCMDcwMF9ERUZBVUxUX0RFVklDRV9QUk9QRVJUSUVTLAogCiAJCS5udW1fYWRhcHRlcnMgPSAyLApAQCAtMjI1MSwxMSArMTk2NSwxNyBAQAogCiAJCX0sCiAKLQkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAotCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2RpYjA3MDBfdGFibGUsCi0JCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShpcl9jb2Rlc19kaWIwNzAwX3RhYmxlKSwKLQkJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWIwNzAwX3JjX3F1ZXJ5Ci0KKwkJLnJjLmNvcmUgPSB7CisJCQkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCisJCQkucmNfY29kZXMgICAgICAgICA9IFJDX01BUF9ESUIwNzAwX1JDNV9UQUJMRSwKKwkJCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeV9vbGRfZmlybXdhcmUsCisJCQkucmNfcHJvcHMgPSB7CisJCQkJLmFsbG93ZWRfcHJvdG9zID0gSVJfVFlQRV9SQzUgfAorCQkJCQkJICBJUl9UWVBFX1JDNiB8CisJCQkJCQkgIElSX1RZUEVfTkVDLAorCQkJCS5jaGFuZ2VfcHJvdG9jb2wgPSBkaWIwNzAwX2NoYW5nZV9wcm90b2NvbCwKKwkJCX0sCisJCX0sCiAJfSwgeyBESUIwNzAwX0RFRkFVTFRfREVWSUNFX1BST1BFUlRJRVMsCiAKIAkJLm51bV9hZGFwdGVycyA9IDEsCkBAIC0yMjg4LDEwICsyMDA4LDE4IEBACiAJCQl9CiAJCX0sCiAKLQkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAotCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2RpYjA3MDBfdGFibGUsCi0JCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShpcl9jb2Rlc19kaWIwNzAwX3RhYmxlKSwKLQkJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWIwNzAwX3JjX3F1ZXJ5CisJCS5yYy5jb3JlID0geworCQkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAorCQkJLnJjX2NvZGVzICAgICAgICAgPSBSQ19NQVBfRElCMDcwMF9SQzVfVEFCTEUsCisJCQkubW9kdWxlX25hbWUJICA9ICJkaWIwNzAwIiwKKwkJCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeV9vbGRfZmlybXdhcmUsCisJCQkucmNfcHJvcHMgPSB7CisJCQkJLmFsbG93ZWRfcHJvdG9zID0gSVJfVFlQRV9SQzUgfAorCQkJCQkJICBJUl9UWVBFX1JDNiB8CisJCQkJCQkgIElSX1RZUEVfTkVDLAorCQkJCS5jaGFuZ2VfcHJvdG9jb2wgPSBkaWIwNzAwX2NoYW5nZV9wcm90b2NvbCwKKwkJCX0sCisJCX0sCiAJfSwgeyBESUIwNzAwX0RFRkFVTFRfREVWSUNFX1BST1BFUlRJRVMsCiAKIAkJLm51bV9hZGFwdGVycyA9IDEsCkBAIC0yMzU4LDExICsyMDg2LDE4IEBACiAJCQl9LAogCQl9LAogCi0JCS5yY19pbnRlcnZhbCAgICAgID0gREVGQVVMVF9SQ19JTlRFUlZBTCwKLQkJLnJjX2tleV9tYXAgICAgICAgPSBpcl9jb2Rlc19kaWIwNzAwX3RhYmxlLAotCQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZGliMDcwMF90YWJsZSksCi0JCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeQotCisJCS5yYy5jb3JlID0geworCQkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAorCQkJLnJjX2NvZGVzICAgICAgICAgPSBSQ19NQVBfRElCMDcwMF9SQzVfVEFCTEUsCisJCQkubW9kdWxlX25hbWUJICA9ICJkaWIwNzAwIiwKKwkJCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeV9vbGRfZmlybXdhcmUsCisJCQkucmNfcHJvcHMgPSB7CisJCQkJLmFsbG93ZWRfcHJvdG9zID0gSVJfVFlQRV9SQzUgfAorCQkJCQkJICBJUl9UWVBFX1JDNiB8CisJCQkJCQkgIElSX1RZUEVfTkVDLAorCQkJCS5jaGFuZ2VfcHJvdG9jb2wgPSBkaWIwNzAwX2NoYW5nZV9wcm90b2NvbCwKKwkJCX0sCisJCX0sCiAJfSwgeyBESUIwNzAwX0RFRkFVTFRfREVWSUNFX1BST1BFUlRJRVMsCiAKIAkJLm51bV9hZGFwdGVycyA9IDEsCkBAIC0yMzk3LDExICsyMTMyLDE4IEBACiAJCQl9LAogCQl9LAogCi0JCS5yY19pbnRlcnZhbCAgICAgID0gREVGQVVMVF9SQ19JTlRFUlZBTCwKLQkJLnJjX2tleV9tYXAgICAgICAgPSBpcl9jb2Rlc19kaWIwNzAwX3RhYmxlLAotCQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZGliMDcwMF90YWJsZSksCi0JCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeQotCisJCS5yYy5jb3JlID0geworCQkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAorCQkJLnJjX2NvZGVzICAgICAgICAgPSBSQ19NQVBfRElCMDcwMF9SQzVfVEFCTEUsCisJCQkubW9kdWxlX25hbWUJICA9ICJkaWIwNzAwIiwKKwkJCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeV9vbGRfZmlybXdhcmUsCisJCQkucmNfcHJvcHMgPSB7CisJCQkJLmFsbG93ZWRfcHJvdG9zID0gSVJfVFlQRV9SQzUgfAorCQkJCQkJICBJUl9UWVBFX1JDNiB8CisJCQkJCQkgIElSX1RZUEVfTkVDLAorCQkJCS5jaGFuZ2VfcHJvdG9jb2wgPSBkaWIwNzAwX2NoYW5nZV9wcm90b2NvbCwKKwkJCX0sCisJCX0sCiAJfSwgeyBESUIwNzAwX0RFRkFVTFRfREVWSUNFX1BST1BFUlRJRVMsCiAKIAkJLm51bV9hZGFwdGVycyA9IDIsCkBAIC0yNDMxLDcgKzIxNzMsNyBAQAogCQkJfQogCQl9LAogCi0JCS5udW1fZGV2aWNlX2Rlc2NzID0gNywKKwkJLm51bV9kZXZpY2VfZGVzY3MgPSA2LAogCQkuZGV2aWNlcyA9IHsKIAkJCXsgICAiRGlCY29tIFNUSzcwNzBQRCByZWZlcmVuY2UgZGVzaWduIiwKIAkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVsxN10sIE5VTEwgfSwKQEAgLTI0NTgsMTUgKzIyMDAsNjkgQEAKIAkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs0NF0sIE5VTEwgfSwKIAkJCQl7IE5VTEwgfSwKIAkJCX0sCisJCX0sCisKKwkJLnJjLmNvcmUgPSB7CisJCQkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCisJCQkucmNfY29kZXMgICAgICAgICA9IFJDX01BUF9ESUIwNzAwX1JDNV9UQUJMRSwKKwkJCS5tb2R1bGVfbmFtZQkgID0gImRpYjA3MDAiLAorCQkJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWIwNzAwX3JjX3F1ZXJ5X29sZF9maXJtd2FyZSwKKwkJCS5yY19wcm9wcyA9IHsKKwkJCQkuYWxsb3dlZF9wcm90b3MgPSBJUl9UWVBFX1JDNSB8CisJCQkJCQkgIElSX1RZUEVfUkM2IHwKKwkJCQkJCSAgSVJfVFlQRV9ORUMsCisJCQkJLmNoYW5nZV9wcm90b2NvbCA9IGRpYjA3MDBfY2hhbmdlX3Byb3RvY29sLAorCQkJfSwKKwkJfSwKKwl9LCB7IERJQjA3MDBfREVGQVVMVF9ERVZJQ0VfUFJPUEVSVElFUywKKworCQkubnVtX2FkYXB0ZXJzID0gMiwKKwkJLmFkYXB0ZXIgPSB7CisJCQl7CisJCQkJLmNhcHMgPSBEVkJfVVNCX0FEQVBfSEFTX1BJRF9GSUxURVIgfCBEVkJfVVNCX0FEQVBfUElEX0ZJTFRFUl9DQU5fQkVfVFVSTkVEX09GRiwKKwkJCQkucGlkX2ZpbHRlcl9jb3VudCA9IDMyLAorCQkJCS5waWRfZmlsdGVyICAgICAgID0gc3RrNzB4MHBfcGlkX2ZpbHRlciwKKwkJCQkucGlkX2ZpbHRlcl9jdHJsICA9IHN0azcweDBwX3BpZF9maWx0ZXJfY3RybCwKKwkJCQkuZnJvbnRlbmRfYXR0YWNoICA9IHN0azcwNzBwZF9mcm9udGVuZF9hdHRhY2gwLAorCQkJCS50dW5lcl9hdHRhY2ggICAgID0gZGliNzA3MHBfdHVuZXJfYXR0YWNoLAorCisJCQkJRElCMDcwMF9ERUZBVUxUX1NUUkVBTUlOR19DT05GSUcoMHgwMiksCisKKwkJCQkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgZGliMDcwMF9hZGFwdGVyX3N0YXRlKSwKKwkJCX0sIHsKKwkJCQkuY2FwcyA9IERWQl9VU0JfQURBUF9IQVNfUElEX0ZJTFRFUiB8IERWQl9VU0JfQURBUF9QSURfRklMVEVSX0NBTl9CRV9UVVJORURfT0ZGLAorCQkJCS5waWRfZmlsdGVyX2NvdW50ID0gMzIsCisJCQkJLnBpZF9maWx0ZXIgICAgICAgPSBzdGs3MHgwcF9waWRfZmlsdGVyLAorCQkJCS5waWRfZmlsdGVyX2N0cmwgID0gc3RrNzB4MHBfcGlkX2ZpbHRlcl9jdHJsLAorCQkJCS5mcm9udGVuZF9hdHRhY2ggID0gc3RrNzA3MHBkX2Zyb250ZW5kX2F0dGFjaDEsCisJCQkJLnR1bmVyX2F0dGFjaCAgICAgPSBkaWI3MDcwcF90dW5lcl9hdHRhY2gsCisKKwkJCQlESUIwNzAwX0RFRkFVTFRfU1RSRUFNSU5HX0NPTkZJRygweDAzKSwKKworCQkJCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCBkaWIwNzAwX2FkYXB0ZXJfc3RhdGUpLAorCQkJfQorCQl9LAorCisJCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKKwkJLmRldmljZXMgPSB7CiAJCQl7ICAgIkVsZ2F0byBFeWVUViBEaXZlcnNpdHkiLAogCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzY4XSwgTlVMTCB9LAogCQkJCXsgTlVMTCB9LAogCQkJfSwKIAkJfSwKLQkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAotCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2RpYjA3MDBfdGFibGUsCi0JCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShpcl9jb2Rlc19kaWIwNzAwX3RhYmxlKSwKLQkJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWIwNzAwX3JjX3F1ZXJ5CisKKwkJLnJjLmNvcmUgPSB7CisJCQkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCisJCQkucmNfY29kZXMgICAgICAgICA9IFJDX01BUF9ESUIwNzAwX05FQ19UQUJMRSwKKwkJCS5tb2R1bGVfbmFtZQkgID0gImRpYjA3MDAiLAorCQkJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWIwNzAwX3JjX3F1ZXJ5X29sZF9maXJtd2FyZSwKKwkJCS5yY19wcm9wcyA9IHsKKwkJCQkuYWxsb3dlZF9wcm90b3MgPSBJUl9UWVBFX1JDNSB8CisJCQkJCQkgIElSX1RZUEVfUkM2IHwKKwkJCQkJCSAgSVJfVFlQRV9ORUMsCisJCQkJLmNoYW5nZV9wcm90b2NvbCA9IGRpYjA3MDBfY2hhbmdlX3Byb3RvY29sLAorCQkJfSwKKwkJfSwKIAl9LCB7IERJQjA3MDBfREVGQVVMVF9ERVZJQ0VfUFJPUEVSVElFUywKIAogCQkubnVtX2FkYXB0ZXJzID0gMSwKQEAgLTI1MjUsMTAgKzIzMjEsMTkgQEAKIAkJCQl7IE5VTEwgfSwKIAkJCX0sCiAJCX0sCi0JCS5yY19pbnRlcnZhbCAgICAgID0gREVGQVVMVF9SQ19JTlRFUlZBTCwKLQkJLnJjX2tleV9tYXAgICAgICAgPSBpcl9jb2Rlc19kaWIwNzAwX3RhYmxlLAotCQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZGliMDcwMF90YWJsZSksCi0JCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeQorCisJCS5yYy5jb3JlID0geworCQkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAorCQkJLnJjX2NvZGVzICAgICAgICAgPSBSQ19NQVBfRElCMDcwMF9SQzVfVEFCTEUsCisJCQkubW9kdWxlX25hbWUJICA9ICJkaWIwNzAwIiwKKwkJCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeV9vbGRfZmlybXdhcmUsCisJCQkucmNfcHJvcHMgPSB7CisJCQkJLmFsbG93ZWRfcHJvdG9zID0gSVJfVFlQRV9SQzUgfAorCQkJCQkJICBJUl9UWVBFX1JDNiB8CisJCQkJCQkgIElSX1RZUEVfTkVDLAorCQkJCS5jaGFuZ2VfcHJvdG9jb2wgPSBkaWIwNzAwX2NoYW5nZV9wcm90b2NvbCwKKwkJCX0sCisJCX0sCiAJfSwgeyBESUIwNzAwX0RFRkFVTFRfREVWSUNFX1BST1BFUlRJRVMsCiAJCS5udW1fYWRhcHRlcnMgPSAxLAogCQkuYWRhcHRlciA9IHsKQEAgLTI1NTQsMTAgKzIzNTksMTkgQEAKIAkJCQl7IE5VTEwgfSwKIAkJCX0sCiAJCX0sCi0JCS5yY19pbnRlcnZhbCAgICAgID0gREVGQVVMVF9SQ19JTlRFUlZBTCwKLQkJLnJjX2tleV9tYXAgICAgICAgPSBpcl9jb2Rlc19kaWIwNzAwX3RhYmxlLAotCQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZGliMDcwMF90YWJsZSksCi0JCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeQorCisJCS5yYy5jb3JlID0geworCQkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAorCQkJLnJjX2NvZGVzICAgICAgICAgPSBSQ19NQVBfRElCMDcwMF9SQzVfVEFCTEUsCisJCQkubW9kdWxlX25hbWUJICA9ICJkaWIwNzAwIiwKKwkJCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeV9vbGRfZmlybXdhcmUsCisJCQkucmNfcHJvcHMgPSB7CisJCQkJLmFsbG93ZWRfcHJvdG9zID0gSVJfVFlQRV9SQzUgfAorCQkJCQkJICBJUl9UWVBFX1JDNiB8CisJCQkJCQkgIElSX1RZUEVfTkVDLAorCQkJCS5jaGFuZ2VfcHJvdG9jb2wgPSBkaWIwNzAwX2NoYW5nZV9wcm90b2NvbCwKKwkJCX0sCisJCX0sCiAJfSwgeyBESUIwNzAwX0RFRkFVTFRfREVWSUNFX1BST1BFUlRJRVMsCiAJCS5udW1fYWRhcHRlcnMgPSAxLAogCQkuYWRhcHRlciA9IHsKQEAgLTI2MTUsMTAgKzI0MjksMTkgQEAKIAkJCQl7IE5VTEwgfSwKIAkJCX0sCiAJCX0sCi0JCS5yY19pbnRlcnZhbCAgICAgID0gREVGQVVMVF9SQ19JTlRFUlZBTCwKLQkJLnJjX2tleV9tYXAgICAgICAgPSBpcl9jb2Rlc19kaWIwNzAwX3RhYmxlLAotCQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZGliMDcwMF90YWJsZSksCi0JCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeQorCisJCS5yYy5jb3JlID0geworCQkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAorCQkJLnJjX2NvZGVzICAgICAgICAgPSBSQ19NQVBfRElCMDcwMF9SQzVfVEFCTEUsCisJCQkubW9kdWxlX25hbWUJICA9ICJkaWIwNzAwIiwKKwkJCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeV9vbGRfZmlybXdhcmUsCisJCQkucmNfcHJvcHMgPSB7CisJCQkJLmFsbG93ZWRfcHJvdG9zID0gSVJfVFlQRV9SQzUgfAorCQkJCQkJICBJUl9UWVBFX1JDNiB8CisJCQkJCQkgIElSX1RZUEVfTkVDLAorCQkJCS5jaGFuZ2VfcHJvdG9jb2wgPSBkaWIwNzAwX2NoYW5nZV9wcm90b2NvbCwKKwkJCX0sCisJCX0sCiAJfSwgeyBESUIwNzAwX0RFRkFVTFRfREVWSUNFX1BST1BFUlRJRVMsCiAJCS5udW1fYWRhcHRlcnMgPSAxLAogCQkuYWRhcHRlciA9IHsKQEAgLTI2NTMsMTEgKzI0NzYsMTggQEAKIAkJCX0sCiAJCX0sCiAKLQkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAotCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2RpYjA3MDBfdGFibGUsCi0JCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShpcl9jb2Rlc19kaWIwNzAwX3RhYmxlKSwKLQkJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWIwNzAwX3JjX3F1ZXJ5Ci0KKwkJLnJjLmNvcmUgPSB7CisJCQkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCisJCQkucmNfY29kZXMgICAgICAgICA9IFJDX01BUF9ESUIwNzAwX05FQ19UQUJMRSwKKwkJCS5tb2R1bGVfbmFtZQkgID0gImRpYjA3MDAiLAorCQkJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWIwNzAwX3JjX3F1ZXJ5X29sZF9maXJtd2FyZSwKKwkJCS5yY19wcm9wcyA9IHsKKwkJCQkuYWxsb3dlZF9wcm90b3MgPSBJUl9UWVBFX1JDNSB8CisJCQkJCQkgIElSX1RZUEVfUkM2IHwKKwkJCQkJCSAgSVJfVFlQRV9ORUMsCisJCQkJLmNoYW5nZV9wcm90b2NvbCA9IGRpYjA3MDBfY2hhbmdlX3Byb3RvY29sLAorCQkJfSwKKwkJfSwKIAl9LCB7IERJQjA3MDBfREVGQVVMVF9ERVZJQ0VfUFJPUEVSVElFUywKIAkJLm51bV9hZGFwdGVycyA9IDIsCiAJCS5hZGFwdGVyID0gewpAQCAtMjY5NywxMCArMjUyNywxOCBAQAogCQkJfSwKIAkJfSwKIAotCQkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCi0JCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfZGliMDcwMF90YWJsZSwKLQkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2RpYjA3MDBfdGFibGUpLAotCQkucmNfcXVlcnkgICAgICAgICA9IGRpYjA3MDBfcmNfcXVlcnkKKwkJLnJjLmNvcmUgPSB7CisJCQkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCisJCQkucmNfY29kZXMgICAgICAgICA9IFJDX01BUF9ESUIwNzAwX1JDNV9UQUJMRSwKKwkJCS5tb2R1bGVfbmFtZQkgID0gImRpYjA3MDAiLAorCQkJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWIwNzAwX3JjX3F1ZXJ5X29sZF9maXJtd2FyZSwKKwkJCS5yY19wcm9wcyA9IHsKKwkJCQkuYWxsb3dlZF9wcm90b3MgPSBJUl9UWVBFX1JDNSB8CisJCQkJCQkgIElSX1RZUEVfUkM2IHwKKwkJCQkJCSAgSVJfVFlQRV9ORUMsCisJCQkJLmNoYW5nZV9wcm90b2NvbCA9IGRpYjA3MDBfY2hhbmdlX3Byb3RvY29sLAorCQkJfSwKKwkJfSwKIAl9LCB7IERJQjA3MDBfREVGQVVMVF9ERVZJQ0VfUFJPUEVSVElFUywKIAkJLm51bV9hZGFwdGVycyA9IDEsCiAJCS5hZGFwdGVyID0gewpAQCAtMjcyOCwxMCArMjU2NiwxOCBAQAogCQkJfSwKIAkJfSwKIAotCQkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCi0JCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfZGliMDcwMF90YWJsZSwKLQkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2RpYjA3MDBfdGFibGUpLAotCQkucmNfcXVlcnkgICAgICAgICA9IGRpYjA3MDBfcmNfcXVlcnkKKwkJLnJjLmNvcmUgPSB7CisJCQkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCisJCQkucmNfY29kZXMgICAgICAgICA9IFJDX01BUF9ESUIwNzAwX1JDNV9UQUJMRSwKKwkJCS5tb2R1bGVfbmFtZQkgID0gImRpYjA3MDAiLAorCQkJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWIwNzAwX3JjX3F1ZXJ5X29sZF9maXJtd2FyZSwKKwkJCS5yY19wcm9wcyA9IHsKKwkJCQkuYWxsb3dlZF9wcm90b3MgPSBJUl9UWVBFX1JDNSB8CisJCQkJCQkgIElSX1RZUEVfUkM2IHwKKwkJCQkJCSAgSVJfVFlQRV9ORUMsCisJCQkJLmNoYW5nZV9wcm90b2NvbCA9IGRpYjA3MDBfY2hhbmdlX3Byb3RvY29sLAorCQkJfSwKKwkJfSwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1jb21tb24uYwppbmRleCBiYzA4YmMwLi5iYTk5MWFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1jb21tb24uYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1jb21tb24uYwpAQCAtMzI3LDcgKzMyNyw3IEBACiAvKgogICogY29tbW9uIHJlbW90ZSBjb250cm9sIHN0dWZmCiAgKi8KLXN0cnVjdCBkdmJfdXNiX3JjX2tleSBpcl9jb2Rlc19kaWJ1c2JfdGFibGVbXSA9IHsKK3N0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19kaWJ1c2JfdGFibGVbXSA9IHsKIAkvKiBLZXkgY29kZXMgZm9yIHRoZSBsaXR0bGUgQXJ0ZWMgVDEvVHdpbmhhbi9IQU1BLyByZW1vdGUuICovCiAJeyAweDAwMTYsIEtFWV9QT1dFUiB9LAogCXsgMHgwMDEwLCBLRVlfTVVURSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItbWIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLW1iLmMKaW5kZXggZWIyZTZmMC4uOGUzYzBkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItbWIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1tYi5jCkBAIC0yMTEsMTAgKzIxMSwxMiBAQAogCiAJLnBvd2VyX2N0cmwgICAgICAgPSBkaWJ1c2JfcG93ZXJfY3RybCwKIAotCS5yY19pbnRlcnZhbCAgICAgID0gREVGQVVMVF9SQ19JTlRFUlZBTCwKLQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2RpYnVzYl90YWJsZSwKLQkucmNfa2V5X21hcF9zaXplICA9IDExMSwgLyogd293LCB0aGF0IGlzIHVnbHkgLi4uIEkgd2FudCB0byBsb2FkIGl0IHRvIHRoZSBkcml2ZXIgZHluYW1pY2FsbHkgKi8KLQkucmNfcXVlcnkgICAgICAgICA9IGRpYnVzYl9yY19xdWVyeSwKKwkucmMubGVnYWN5ID0geworCQkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCisJCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfZGlidXNiX3RhYmxlLAorCQkucmNfa2V5X21hcF9zaXplICA9IDExMSwgLyogd293LCB0aGF0IGlzIHVnbHkgLi4uIEkgd2FudCB0byBsb2FkIGl0IHRvIHRoZSBkcml2ZXIgZHluYW1pY2FsbHkgKi8KKwkJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWJ1c2JfcmNfcXVlcnksCisJfSwKIAogCS5pMmNfYWxnbyAgICAgICAgID0gJmRpYnVzYl9pMmNfYWxnbywKIApAQCAtMjk1LDEwICsyOTcsMTIgQEAKIAl9LAogCS5wb3dlcl9jdHJsICAgICAgID0gZGlidXNiX3Bvd2VyX2N0cmwsCiAKLQkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCi0JLnJjX2tleV9tYXAgICAgICAgPSBpcl9jb2Rlc19kaWJ1c2JfdGFibGUsCi0JLnJjX2tleV9tYXBfc2l6ZSAgPSAxMTEsIC8qIHdvdywgdGhhdCBpcyB1Z2x5IC4uLiBJIHdhbnQgdG8gbG9hZCBpdCB0byB0aGUgZHJpdmVyIGR5bmFtaWNhbGx5ICovCi0JLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWJ1c2JfcmNfcXVlcnksCisJLnJjLmxlZ2FjeSA9IHsKKwkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAorCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2RpYnVzYl90YWJsZSwKKwkJLnJjX2tleV9tYXBfc2l6ZSAgPSAxMTEsIC8qIHdvdywgdGhhdCBpcyB1Z2x5IC4uLiBJIHdhbnQgdG8gbG9hZCBpdCB0byB0aGUgZHJpdmVyIGR5bmFtaWNhbGx5ICovCisJCS5yY19xdWVyeSAgICAgICAgID0gZGlidXNiX3JjX3F1ZXJ5LAorCX0sCiAKIAkuaTJjX2FsZ28gICAgICAgICA9ICZkaWJ1c2JfaTJjX2FsZ28sCiAKQEAgLTM1OSwxMCArMzYzLDEyIEBACiAJfSwKIAkucG93ZXJfY3RybCAgICAgICA9IGRpYnVzYjJfMF9wb3dlcl9jdHJsLAogCi0JLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAotCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfZGlidXNiX3RhYmxlLAotCS5yY19rZXlfbWFwX3NpemUgID0gMTExLCAvKiB3b3csIHRoYXQgaXMgdWdseSAuLi4gSSB3YW50IHRvIGxvYWQgaXQgdG8gdGhlIGRyaXZlciBkeW5hbWljYWxseSAqLwotCS5yY19xdWVyeSAgICAgICAgID0gZGlidXNiX3JjX3F1ZXJ5LAorCS5yYy5sZWdhY3kgPSB7CisJCS5yY19pbnRlcnZhbCAgICAgID0gREVGQVVMVF9SQ19JTlRFUlZBTCwKKwkJLnJjX2tleV9tYXAgICAgICAgPSBpcl9jb2Rlc19kaWJ1c2JfdGFibGUsCisJCS5yY19rZXlfbWFwX3NpemUgID0gMTExLCAvKiB3b3csIHRoYXQgaXMgdWdseSAuLi4gSSB3YW50IHRvIGxvYWQgaXQgdG8gdGhlIGRyaXZlciBkeW5hbWljYWxseSAqLworCQkucmNfcXVlcnkgICAgICAgICA9IGRpYnVzYl9yY19xdWVyeSwKKwl9LAogCiAJLmkyY19hbGdvICAgICAgICAgPSAmZGlidXNiX2kyY19hbGdvLAogCkBAIC00MTYsMTAgKzQyMiwxMiBAQAogCX0sCiAJLnBvd2VyX2N0cmwgICAgICAgPSBkaWJ1c2IyXzBfcG93ZXJfY3RybCwKIAotCS5yY19pbnRlcnZhbCAgICAgID0gREVGQVVMVF9SQ19JTlRFUlZBTCwKLQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2RpYnVzYl90YWJsZSwKLQkucmNfa2V5X21hcF9zaXplICA9IDExMSwgLyogd293LCB0aGF0IGlzIHVnbHkgLi4uIEkgd2FudCB0byBsb2FkIGl0IHRvIHRoZSBkcml2ZXIgZHluYW1pY2FsbHkgKi8KLQkucmNfcXVlcnkgICAgICAgICA9IGRpYnVzYl9yY19xdWVyeSwKKwkucmMubGVnYWN5ID0geworCQkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCisJCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfZGlidXNiX3RhYmxlLAorCQkucmNfa2V5X21hcF9zaXplICA9IDExMSwgLyogd293LCB0aGF0IGlzIHVnbHkgLi4uIEkgd2FudCB0byBsb2FkIGl0IHRvIHRoZSBkcml2ZXIgZHluYW1pY2FsbHkgKi8KKwkJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWJ1c2JfcmNfcXVlcnksCisJfSwKIAogCS5pMmNfYWxnbyAgICAgICAgID0gJmRpYnVzYl9pMmNfYWxnbywKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItbWMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLW1jLmMKaW5kZXggNTg4MzA4ZS4uMWNiYzQxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItbWMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1tYy5jCkBAIC04MSwxMCArODEsMTIgQEAKIAl9LAogCS5wb3dlcl9jdHJsICAgICAgID0gZGlidXNiMl8wX3Bvd2VyX2N0cmwsCiAKLQkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCi0JLnJjX2tleV9tYXAgICAgICAgPSBpcl9jb2Rlc19kaWJ1c2JfdGFibGUsCi0JLnJjX2tleV9tYXBfc2l6ZSAgPSAxMTEsIC8qIEZJWE1FICovCi0JLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWJ1c2JfcmNfcXVlcnksCisJLnJjLmxlZ2FjeSA9IHsKKwkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAorCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2RpYnVzYl90YWJsZSwKKwkJLnJjX2tleV9tYXBfc2l6ZSAgPSAxMTEsIC8qIEZJWE1FICovCisJCS5yY19xdWVyeSAgICAgICAgID0gZGlidXNiX3JjX3F1ZXJ5LAorCX0sCiAKIAkuaTJjX2FsZ28gICAgICAgICA9ICZkaWJ1c2JfaTJjX2FsZ28sCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi5oCmluZGV4IDNkNTBhYzUuLjYxYTZiZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2IuaApAQCAtMTI0LDcgKzEyNCw3IEBACiAjZGVmaW5lIERFRkFVTFRfUkNfSU5URVJWQUwgMTUwCiAvLyNkZWZpbmUgREVGQVVMVF9SQ19JTlRFUlZBTCAxMDAwMDAKIAotZXh0ZXJuIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBpcl9jb2Rlc19kaWJ1c2JfdGFibGVbXTsKK2V4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfZGlidXNiX3RhYmxlW107CiBleHRlcm4gaW50IGRpYnVzYl9yY19xdWVyeShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKiwgdTMyICosIGludCAqKTsKIGV4dGVybiBpbnQgZGlidXNiX3JlYWRfZWVwcm9tX2J5dGUoc3RydWN0IGR2Yl91c2JfZGV2aWNlICosIHU4LCB1OCAqKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWdpdHYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlnaXR2LmMKaW5kZXggZTgyNjA3Ny4uMTNkMDA2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWdpdHYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpZ2l0di5jCkBAIC0xNjEsNyArMTYxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBpcl9jb2Rlc19kaWdpdHZfdGFibGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfZGlnaXR2X3RhYmxlW10gPSB7CiAJeyAweDVmNTUsIEtFWV8wIH0sCiAJeyAweDZmNTUsIEtFWV8xIH0sCiAJeyAweDlmNTUsIEtFWV8yIH0sCkBAIC0yMzcsMTAgKzIzNywxMCBAQAogCS8qIGlmIHNvbWV0aGluZyBpcyBpbnNpZGUgdGhlIGJ1ZmZlciwgc2ltdWxhdGUga2V5IHByZXNzICovCiAJaWYgKGtleVsxXSAhPSAwKQogCXsKLQkJICBmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmNfa2V5X21hcF9zaXplOyBpKyspIHsKLQkJCWlmIChyYzVfY3VzdG9tKCZkLT5wcm9wcy5yY19rZXlfbWFwW2ldKSA9PSBrZXlbMV0gJiYKLQkJCSAgICByYzVfZGF0YSgmZC0+cHJvcHMucmNfa2V5X21hcFtpXSkgPT0ga2V5WzJdKSB7Ci0JCQkJKmV2ZW50ID0gZC0+cHJvcHMucmNfa2V5X21hcFtpXS5ldmVudDsKKwkJICBmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmMubGVnYWN5LnJjX2tleV9tYXBfc2l6ZTsgaSsrKSB7CisJCQlpZiAocmM1X2N1c3RvbSgmZC0+cHJvcHMucmMubGVnYWN5LnJjX2tleV9tYXBbaV0pID09IGtleVsxXSAmJgorCQkJICAgIHJjNV9kYXRhKCZkLT5wcm9wcy5yYy5sZWdhY3kucmNfa2V5X21hcFtpXSkgPT0ga2V5WzJdKSB7CisJCQkJKmV2ZW50ID0gZC0+cHJvcHMucmMubGVnYWN5LnJjX2tleV9tYXBbaV0ua2V5Y29kZTsKIAkJCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CkBAIC0zMTAsMTAgKzMxMCwxMiBAQAogCX0sCiAJLmlkZW50aWZ5X3N0YXRlICAgPSBkaWdpdHZfaWRlbnRpZnlfc3RhdGUsCiAKLQkucmNfaW50ZXJ2YWwgICAgICA9IDEwMDAsCi0JLnJjX2tleV9tYXAgICAgICAgPSBpcl9jb2Rlc19kaWdpdHZfdGFibGUsCi0JLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2RpZ2l0dl90YWJsZSksCi0JLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWdpdHZfcmNfcXVlcnksCisJLnJjLmxlZ2FjeSA9IHsKKwkJLnJjX2ludGVydmFsICAgICAgPSAxMDAwLAorCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2RpZ2l0dl90YWJsZSwKKwkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2RpZ2l0dl90YWJsZSksCisJCS5yY19xdWVyeSAgICAgICAgID0gZGlnaXR2X3JjX3F1ZXJ5LAorCX0sCiAKIAkuaTJjX2FsZ28gICAgICAgICA9ICZkaWdpdHZfaTJjX2FsZ28sCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHR0MjAwdS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdHQyMDB1LmMKaW5kZXggZjU3ZTU5MC4uY2E0OTVlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdHQyMDB1LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdHQyMDB1LmMKQEAgLTU3LDcgKzU3LDcgQEAKIAogLyogcmVtb3RlIGNvbnRyb2wgKi8KIC8qIGtleSBsaXN0IGZvciB0aGUgdGlueSByZW1vdGUgY29udHJvbCAoWWFrdW1vLCBkb24ndCBrbm93IGFib3V0IHRoZSBvdGhlcnMpICovCi1zdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IGlyX2NvZGVzX2R0dDIwMHVfdGFibGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfZHR0MjAwdV90YWJsZVtdID0gewogCXsgMHg4MDAxLCBLRVlfTVVURSB9LAogCXsgMHg4MDAyLCBLRVlfQ0hBTk5FTERPV04gfSwKIAl7IDB4ODAwMywgS0VZX1ZPTFVNRURPV04gfSwKQEAgLTE2MSwxMCArMTYxLDEyIEBACiAJfSwKIAkucG93ZXJfY3RybCAgICAgID0gZHR0MjAwdV9wb3dlcl9jdHJsLAogCi0JLnJjX2ludGVydmFsICAgICA9IDMwMCwKLQkucmNfa2V5X21hcCAgICAgID0gaXJfY29kZXNfZHR0MjAwdV90YWJsZSwKLQkucmNfa2V5X21hcF9zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19kdHQyMDB1X3RhYmxlKSwKLQkucmNfcXVlcnkgICAgICAgID0gZHR0MjAwdV9yY19xdWVyeSwKKwkucmMubGVnYWN5ID0geworCQkucmNfaW50ZXJ2YWwgICAgID0gMzAwLAorCQkucmNfa2V5X21hcCAgICAgID0gaXJfY29kZXNfZHR0MjAwdV90YWJsZSwKKwkJLnJjX2tleV9tYXBfc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZHR0MjAwdV90YWJsZSksCisJCS5yY19xdWVyeSAgICAgICAgPSBkdHQyMDB1X3JjX3F1ZXJ5LAorCX0sCiAKIAkuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQgPSAweDAxLAogCkBAIC0yMDYsMTAgKzIwOCwxMiBAQAogCX0sCiAJLnBvd2VyX2N0cmwgICAgICA9IGR0dDIwMHVfcG93ZXJfY3RybCwKIAotCS5yY19pbnRlcnZhbCAgICAgPSAzMDAsCi0JLnJjX2tleV9tYXAgICAgICA9IGlyX2NvZGVzX2R0dDIwMHVfdGFibGUsCi0JLnJjX2tleV9tYXBfc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZHR0MjAwdV90YWJsZSksCi0JLnJjX3F1ZXJ5ICAgICAgICA9IGR0dDIwMHVfcmNfcXVlcnksCisJLnJjLmxlZ2FjeSA9IHsKKwkJLnJjX2ludGVydmFsICAgICA9IDMwMCwKKwkJLnJjX2tleV9tYXAgICAgICA9IGlyX2NvZGVzX2R0dDIwMHVfdGFibGUsCisJCS5yY19rZXlfbWFwX3NpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2R0dDIwMHVfdGFibGUpLAorCQkucmNfcXVlcnkgICAgICAgID0gZHR0MjAwdV9yY19xdWVyeSwKKwl9LAogCiAJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHgwMSwKIApAQCAtMjUxLDEwICsyNTUsMTIgQEAKIAl9LAogCS5wb3dlcl9jdHJsICAgICAgPSBkdHQyMDB1X3Bvd2VyX2N0cmwsCiAKLQkucmNfaW50ZXJ2YWwgICAgID0gMzAwLAotCS5yY19rZXlfbWFwICAgICAgPSBpcl9jb2Rlc19kdHQyMDB1X3RhYmxlLAotCS5yY19rZXlfbWFwX3NpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2R0dDIwMHVfdGFibGUpLAotCS5yY19xdWVyeSAgICAgICAgPSBkdHQyMDB1X3JjX3F1ZXJ5LAorCS5yYy5sZWdhY3kgPSB7CisJCS5yY19pbnRlcnZhbCAgICAgPSAzMDAsCisJCS5yY19rZXlfbWFwICAgICAgPSBpcl9jb2Rlc19kdHQyMDB1X3RhYmxlLAorCQkucmNfa2V5X21hcF9zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19kdHQyMDB1X3RhYmxlKSwKKwkJLnJjX3F1ZXJ5ICAgICAgICA9IGR0dDIwMHVfcmNfcXVlcnksCisJfSwKIAogCS5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCA9IDB4MDEsCiAKQEAgLTI5NiwxMCArMzAyLDEyIEBACiAJfSwKIAkucG93ZXJfY3RybCAgICAgID0gZHR0MjAwdV9wb3dlcl9jdHJsLAogCi0JLnJjX2ludGVydmFsICAgICA9IDMwMCwKLQkucmNfa2V5X21hcCAgICAgID0gaXJfY29kZXNfZHR0MjAwdV90YWJsZSwKLQkucmNfa2V5X21hcF9zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19kdHQyMDB1X3RhYmxlKSwKLQkucmNfcXVlcnkgICAgICAgID0gZHR0MjAwdV9yY19xdWVyeSwKKwkucmMubGVnYWN5ID0geworCQkucmNfaW50ZXJ2YWwgICAgID0gMzAwLAorCQkucmNfa2V5X21hcCAgICAgID0gaXJfY29kZXNfZHR0MjAwdV90YWJsZSwKKwkJLnJjX2tleV9tYXBfc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZHR0MjAwdV90YWJsZSksCisJCS5yY19xdWVyeSAgICAgICAgPSBkdHQyMDB1X3JjX3F1ZXJ5LAorCX0sCiAKIAkuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQgPSAweDAxLAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKaW5kZXggYjRhZmU2Zi4uMWE3NzRkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaApAQCAtMTk3LDYgKzE5Nyw3IEBACiAjZGVmaW5lIFVTQl9QSURfQVZFUk1FRElBX0EzMTAJCQkJMHhhMzEwCiAjZGVmaW5lIFVTQl9QSURfQVZFUk1FRElBX0E4NTAJCQkJMHg4NTBhCiAjZGVmaW5lIFVTQl9QSURfQVZFUk1FRElBX0E4MDUJCQkJMHhhODA1CisjZGVmaW5lIFVTQl9QSURfQVZFUk1FRElBX0E4MTVNCQkJCTB4ODE1YQogI2RlZmluZSBVU0JfUElEX1RFQ0hOT1RSRU5EX0NPTk5FQ1RfUzI0MDAgICAgICAgICAgICAgICAweDMwMDYKICNkZWZpbmUgVVNCX1BJRF9URUNITk9UUkVORF9DT05ORUNUX0NUMzY1MAkJMHgzMDBkCiAjZGVmaW5lIFVTQl9QSURfVEVSUkFURUNfQ0lORVJHWV9EVF9YU19ESVZFUlNJVFkJMHgwMDVhCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaW5pdC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWluaXQuYwppbmRleCA1ZDkxZjcwLi4yZTNlYTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaW5pdC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pbml0LmMKQEAgLTE1LDcgKzE1LDcgQEAKIAogLyogZGVidWcgKi8KIGludCBkdmJfdXNiX2RlYnVnOwotbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLGR2Yl91c2JfZGVidWcsIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGR2Yl91c2JfZGVidWcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAic2V0IGRlYnVnZ2luZyBsZXZlbCAoMT1pbmZvLHhmZXI9MixwbGw9NCx0cz04LGVycj0xNixyYz0zMixmdz02NCxtZW09MTI4LHV4ZmVyPTI1NiAgKG9yLWFibGUpKS4iIERWQl9VU0JfREVCVUdfU1RBVFVTKTsKIAogaW50IGR2Yl91c2JfZGlzYWJsZV9yY19wb2xsaW5nOwpAQCAtMjksNyArMjksNyBAQAogc3RhdGljIGludCBkdmJfdXNiX2FkYXB0ZXJfaW5pdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHNob3J0ICphZGFwdGVyX25ycykKIHsKIAlzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwOwotCWludCByZXQsbjsKKwlpbnQgcmV0LCBuOwogCiAJZm9yIChuID0gMDsgbiA8IGQtPnByb3BzLm51bV9hZGFwdGVyczsgbisrKSB7CiAJCWFkYXAgPSAmZC0+YWRhcHRlcltuXTsKQEAgLTM4LDcgKzM4LDcgQEAKIAogCQltZW1jcHkoJmFkYXAtPnByb3BzLCAmZC0+cHJvcHMuYWRhcHRlcltuXSwgc2l6ZW9mKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXJfcHJvcGVydGllcykpOwogCi0vKiBzcGVlZCAtIHdoZW4gcnVubmluZyBhdCBGVUxMIHNwZWVkIHdlIG5lZWQgYSBIVyBQSUQgZmlsdGVyICovCisJCS8qIHNwZWVkIC0gd2hlbiBydW5uaW5nIGF0IEZVTEwgc3BlZWQgd2UgbmVlZCBhIEhXIFBJRCBmaWx0ZXIgKi8KIAkJaWYgKGQtPnVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9GVUxMICYmICEoYWRhcC0+cHJvcHMuY2FwcyAmIERWQl9VU0JfQURBUF9IQVNfUElEX0ZJTFRFUikpIHsKIAkJCWVycigiVGhpcyBVU0IyLjAgZGV2aWNlIGNhbm5vdCBiZSBydW4gb24gYSBVU0IxLjEgcG9ydC4gKGl0IGxhY2tzIGEgaGFyZHdhcmUgUElEIGZpbHRlcikiKTsKIAkJCXJldHVybiAtRU5PREVWOwpAQCAtNDYsNyArNDYsNyBAQAogCiAJCWlmICgoZC0+dWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwgJiYgYWRhcC0+cHJvcHMuY2FwcyAmIERWQl9VU0JfQURBUF9IQVNfUElEX0ZJTFRFUikgfHwKIAkJCShhZGFwLT5wcm9wcy5jYXBzICYgRFZCX1VTQl9BREFQX05FRURfUElEX0ZJTFRFUklORykpIHsKLQkJCWluZm8oIndpbGwgdXNlIHRoZSBkZXZpY2UncyBoYXJkd2FyZSBQSUQgZmlsdGVyICh0YWJsZSBjb3VudDogJWQpLiIsYWRhcC0+cHJvcHMucGlkX2ZpbHRlcl9jb3VudCk7CisJCQlpbmZvKCJ3aWxsIHVzZSB0aGUgZGV2aWNlJ3MgaGFyZHdhcmUgUElEIGZpbHRlciAodGFibGUgY291bnQ6ICVkKS4iLCBhZGFwLT5wcm9wcy5waWRfZmlsdGVyX2NvdW50KTsKIAkJCWFkYXAtPnBpZF9maWx0ZXJpbmcgID0gMTsKIAkJCWFkYXAtPm1heF9mZWVkX2NvdW50ID0gYWRhcC0+cHJvcHMucGlkX2ZpbHRlcl9jb3VudDsKIAkJfSBlbHNlIHsKQEAgLTY0LDkgKzY0LDkgQEAKIAkJfQogCiAJCWlmIChhZGFwLT5wcm9wcy5zaXplX29mX3ByaXYgPiAwKSB7Ci0JCQlhZGFwLT5wcml2ID0ga3phbGxvYyhhZGFwLT5wcm9wcy5zaXplX29mX3ByaXYsR0ZQX0tFUk5FTCk7CisJCQlhZGFwLT5wcml2ID0ga3phbGxvYyhhZGFwLT5wcm9wcy5zaXplX29mX3ByaXYsIEdGUF9LRVJORUwpOwogCQkJaWYgKGFkYXAtPnByaXYgPT0gTlVMTCkgewotCQkJCWVycigibm8gbWVtb3J5IGZvciBwcml2IGZvciBhZGFwdGVyICVkLiIsbik7CisJCQkJZXJyKCJubyBtZW1vcnkgZm9yIHByaXYgZm9yIGFkYXB0ZXIgJWQuIiwgbik7CiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQl9CiAJCX0KQEAgLTg2LDggKzg2LDggQEAKIAkgKiBzb21ldGltZXMgYSB0aW1lb3V0IG9jY3VyZXMsIHRoaXMgaGVscHMKIAkgKi8KIAlpZiAoZC0+cHJvcHMuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQgIT0gMCkgewotCQl1c2JfY2xlYXJfaGFsdChkLT51ZGV2LHVzYl9zbmRidWxrcGlwZShkLT51ZGV2LGQtPnByb3BzLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50KSk7Ci0JCXVzYl9jbGVhcl9oYWx0KGQtPnVkZXYsdXNiX3JjdmJ1bGtwaXBlKGQtPnVkZXYsZC0+cHJvcHMuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQpKTsKKwkJdXNiX2NsZWFyX2hhbHQoZC0+dWRldiwgdXNiX3NuZGJ1bGtwaXBlKGQtPnVkZXYsIGQtPnByb3BzLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50KSk7CisJCXVzYl9jbGVhcl9oYWx0KGQtPnVkZXYsIHVzYl9yY3ZidWxrcGlwZShkLT51ZGV2LCBkLT5wcm9wcy5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCkpOwogCX0KIAogCXJldHVybiAwOwpAQCAtOTYsNiArOTYsNyBAQAogc3RhdGljIGludCBkdmJfdXNiX2FkYXB0ZXJfZXhpdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCiB7CiAJaW50IG47CisKIAlmb3IgKG4gPSAwOyBuIDwgZC0+bnVtX2FkYXB0ZXJzX2luaXRpYWxpemVkOyBuKyspIHsKIAkJZHZiX3VzYl9hZGFwdGVyX2Zyb250ZW5kX2V4aXQoJmQtPmFkYXB0ZXJbbl0pOwogCQlkdmJfdXNiX2FkYXB0ZXJfZHZiX2V4aXQoJmQtPmFkYXB0ZXJbbl0pOwpAQCAtMTExLDExICsxMTIsMTEgQEAKIC8qIGdlbmVyYWwgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICovCiBzdGF0aWMgaW50IGR2Yl91c2JfZXhpdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCiB7Ci0JZGViX2luZm8oInN0YXRlIGJlZm9yZSBleGl0aW5nIGV2ZXJ5dGhpbmc6ICV4XG4iLGQtPnN0YXRlKTsKKwlkZWJfaW5mbygic3RhdGUgYmVmb3JlIGV4aXRpbmcgZXZlcnl0aGluZzogJXhcbiIsIGQtPnN0YXRlKTsKIAlkdmJfdXNiX3JlbW90ZV9leGl0KGQpOwogCWR2Yl91c2JfYWRhcHRlcl9leGl0KGQpOwogCWR2Yl91c2JfaTJjX2V4aXQoZCk7Ci0JZGViX2luZm8oInN0YXRlIHNob3VsZCBiZSB6ZXJvIG5vdzogJXhcbiIsZC0+c3RhdGUpOworCWRlYl9pbmZvKCJzdGF0ZSBzaG91bGQgYmUgemVybyBub3c6ICV4XG4iLCBkLT5zdGF0ZSk7CiAJZC0+c3RhdGUgPSBEVkJfVVNCX1NUQVRFX0lOSVQ7CiAJa2ZyZWUoZC0+cHJpdik7CiAJa2ZyZWUoZCk7CkBAIC0xMzIsMTQgKzEzMywxNCBAQAogCWQtPnN0YXRlID0gRFZCX1VTQl9TVEFURV9JTklUOwogCiAJaWYgKGQtPnByb3BzLnNpemVfb2ZfcHJpdiA+IDApIHsKLQkJZC0+cHJpdiA9IGt6YWxsb2MoZC0+cHJvcHMuc2l6ZV9vZl9wcml2LEdGUF9LRVJORUwpOworCQlkLT5wcml2ID0ga3phbGxvYyhkLT5wcm9wcy5zaXplX29mX3ByaXYsIEdGUF9LRVJORUwpOwogCQlpZiAoZC0+cHJpdiA9PSBOVUxMKSB7CiAJCQllcnIoIm5vIG1lbW9yeSBmb3IgcHJpdiBpbiAnc3RydWN0IGR2Yl91c2JfZGV2aWNlJyIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAl9CiAKLS8qIGNoZWNrIHRoZSBjYXBhYmlsaXRpZXMgYW5kIHNldCBhcHByb3ByaWF0ZSB2YXJpYWJsZXMgKi8KKwkvKiBjaGVjayB0aGUgY2FwYWJpbGl0aWVzIGFuZCBzZXQgYXBwcm9wcmlhdGUgdmFyaWFibGVzICovCiAJZHZiX3VzYl9kZXZpY2VfcG93ZXJfY3RybChkLCAxKTsKIAogCWlmICgocmV0ID0gZHZiX3VzYl9pMmNfaW5pdChkKSkgfHwKQEAgLTE1NywxNiArMTU4LDE3IEBACiB9CiAKIC8qIGRldGVybWluZSB0aGUgbmFtZSBhbmQgdGhlIHN0YXRlIG9mIHRoZSBqdXN0IGZvdW5kIFVTQiBkZXZpY2UgKi8KLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfZGVzY3JpcHRpb24gKiBkdmJfdXNiX2ZpbmRfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzICpwcm9wcywgaW50ICpjb2xkKQorc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9kZXNjcmlwdGlvbiAqZHZiX3VzYl9maW5kX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgKnByb3BzLCBpbnQgKmNvbGQpCiB7Ci0JaW50IGksajsKKwlpbnQgaSwgajsKIAlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfZGVzY3JpcHRpb24gKmRlc2MgPSBOVUxMOworCiAJKmNvbGQgPSAtMTsKIAogCWZvciAoaSA9IDA7IGkgPCBwcm9wcy0+bnVtX2RldmljZV9kZXNjczsgaSsrKSB7CiAKIAkJZm9yIChqID0gMDsgaiA8IERWQl9VU0JfSURfTUFYX05VTSAmJiBwcm9wcy0+ZGV2aWNlc1tpXS5jb2xkX2lkc1tqXSAhPSBOVUxMOyBqKyspIHsKLQkJCWRlYl9pbmZvKCJjaGVjayBmb3IgY29sZCAleCAleFxuIixwcm9wcy0+ZGV2aWNlc1tpXS5jb2xkX2lkc1tqXS0+aWRWZW5kb3IsIHByb3BzLT5kZXZpY2VzW2ldLmNvbGRfaWRzW2pdLT5pZFByb2R1Y3QpOworCQkJZGViX2luZm8oImNoZWNrIGZvciBjb2xkICV4ICV4XG4iLCBwcm9wcy0+ZGV2aWNlc1tpXS5jb2xkX2lkc1tqXS0+aWRWZW5kb3IsIHByb3BzLT5kZXZpY2VzW2ldLmNvbGRfaWRzW2pdLT5pZFByb2R1Y3QpOwogCQkJaWYgKHByb3BzLT5kZXZpY2VzW2ldLmNvbGRfaWRzW2pdLT5pZFZlbmRvciAgPT0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgJiYKIAkJCQlwcm9wcy0+ZGV2aWNlc1tpXS5jb2xkX2lkc1tqXS0+aWRQcm9kdWN0ID09IGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSkgewogCQkJCSpjb2xkID0gMTsKQEAgLTE3OSw3ICsxODEsNyBAQAogCQkJYnJlYWs7CiAKIAkJZm9yIChqID0gMDsgaiA8IERWQl9VU0JfSURfTUFYX05VTSAmJiBwcm9wcy0+ZGV2aWNlc1tpXS53YXJtX2lkc1tqXSAhPSBOVUxMOyBqKyspIHsKLQkJCWRlYl9pbmZvKCJjaGVjayBmb3Igd2FybSAleCAleFxuIixwcm9wcy0+ZGV2aWNlc1tpXS53YXJtX2lkc1tqXS0+aWRWZW5kb3IsIHByb3BzLT5kZXZpY2VzW2ldLndhcm1faWRzW2pdLT5pZFByb2R1Y3QpOworCQkJZGViX2luZm8oImNoZWNrIGZvciB3YXJtICV4ICV4XG4iLCBwcm9wcy0+ZGV2aWNlc1tpXS53YXJtX2lkc1tqXS0+aWRWZW5kb3IsIHByb3BzLT5kZXZpY2VzW2ldLndhcm1faWRzW2pdLT5pZFByb2R1Y3QpOwogCQkJaWYgKHByb3BzLT5kZXZpY2VzW2ldLndhcm1faWRzW2pdLT5pZFZlbmRvciA9PSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSAmJgogCQkJCXByb3BzLT5kZXZpY2VzW2ldLndhcm1faWRzW2pdLT5pZFByb2R1Y3QgPT0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKSB7CiAJCQkJKmNvbGQgPSAwOwpAQCAtMTkwLDcgKzE5Miw3IEBACiAJfQogCiAJaWYgKGRlc2MgIT0gTlVMTCAmJiBwcm9wcy0+aWRlbnRpZnlfc3RhdGUgIT0gTlVMTCkKLQkJcHJvcHMtPmlkZW50aWZ5X3N0YXRlKHVkZXYscHJvcHMsJmRlc2MsY29sZCk7CisJCXByb3BzLT5pZGVudGlmeV9zdGF0ZSh1ZGV2LCBwcm9wcywgJmRlc2MsIGNvbGQpOwogCiAJcmV0dXJuIGRlc2M7CiB9CkBAIC0yMDIsNyArMjA0LDcgQEAKIAllbHNlCiAJCWQtPnBvd2VyZWQtLTsKIAotCWlmIChkLT5wb3dlcmVkID09IDAgfHwgKG9ub2ZmICYmIGQtPnBvd2VyZWQgPT0gMSkpIHsgLy8gd2hlbiBzd2l0Y2hpbmcgZnJvbSAxIHRvIDAgb3IgZnJvbSAwIHRvIDEKKwlpZiAoZC0+cG93ZXJlZCA9PSAwIHx8IChvbm9mZiAmJiBkLT5wb3dlcmVkID09IDEpKSB7IC8qIHdoZW4gc3dpdGNoaW5nIGZyb20gMSB0byAwIG9yIGZyb20gMCB0byAxICovCiAJCWRlYl9pbmZvKCJwb3dlciBjb250cm9sOiAlZFxuIiwgb25vZmYpOwogCQlpZiAoZC0+cHJvcHMucG93ZXJfY3RybCkKIAkJCXJldHVybiBkLT5wcm9wcy5wb3dlcl9jdHJsKGQsIG9ub2ZmKTsKQEAgLTIyMiwzMiArMjI0LDMyIEBACiAJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gTlVMTDsKIAlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfZGVzY3JpcHRpb24gKmRlc2MgPSBOVUxMOwogCi0JaW50IHJldCA9IC1FTk9NRU0sY29sZD0wOworCWludCByZXQgPSAtRU5PTUVNLCBjb2xkID0gMDsKIAogCWlmIChkdSAhPSBOVUxMKQogCQkqZHUgPSBOVUxMOwogCi0JaWYgKChkZXNjID0gZHZiX3VzYl9maW5kX2RldmljZSh1ZGV2LHByb3BzLCZjb2xkKSkgPT0gTlVMTCkgeworCWlmICgoZGVzYyA9IGR2Yl91c2JfZmluZF9kZXZpY2UodWRldiwgcHJvcHMsICZjb2xkKSkgPT0gTlVMTCkgewogCQlkZWJfZXJyKCJzb21ldGhpbmcgd2VudCB2ZXJ5IHdyb25nLCBkZXZpY2Ugd2FzIG5vdCBmb3VuZCBpbiBjdXJyZW50IGRldmljZSBsaXN0IC0gbGV0J3Mgc2VlIHdoYXQgY29tZXMgbmV4dC5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAoY29sZCkgewotCQlpbmZvKCJmb3VuZCBhICclcycgaW4gY29sZCBzdGF0ZSwgd2lsbCB0cnkgdG8gbG9hZCBhIGZpcm13YXJlIixkZXNjLT5uYW1lKTsKLQkJcmV0ID0gZHZiX3VzYl9kb3dubG9hZF9maXJtd2FyZSh1ZGV2LHByb3BzKTsKKwkJaW5mbygiZm91bmQgYSAnJXMnIGluIGNvbGQgc3RhdGUsIHdpbGwgdHJ5IHRvIGxvYWQgYSBmaXJtd2FyZSIsIGRlc2MtPm5hbWUpOworCQlyZXQgPSBkdmJfdXNiX2Rvd25sb2FkX2Zpcm13YXJlKHVkZXYsIHByb3BzKTsKIAkJaWYgKCFwcm9wcy0+bm9fcmVjb25uZWN0IHx8IHJldCAhPSAwKQogCQkJcmV0dXJuIHJldDsKIAl9CiAKLQlpbmZvKCJmb3VuZCBhICclcycgaW4gd2FybSBzdGF0ZS4iLGRlc2MtPm5hbWUpOwotCQlkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGR2Yl91c2JfZGV2aWNlKSxHRlBfS0VSTkVMKTsKKwlpbmZvKCJmb3VuZCBhICclcycgaW4gd2FybSBzdGF0ZS4iLCBkZXNjLT5uYW1lKTsKKwlkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGR2Yl91c2JfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGQgPT0gTlVMTCkgewogCQllcnIoIm5vIG1lbW9yeSBmb3IgJ3N0cnVjdCBkdmJfdXNiX2RldmljZSciKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJZC0+dWRldiA9IHVkZXY7Ci0JbWVtY3B5KCZkLT5wcm9wcyxwcm9wcyxzaXplb2Yoc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMpKTsKKwltZW1jcHkoJmQtPnByb3BzLCBwcm9wcywgc2l6ZW9mKHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzKSk7CiAJZC0+ZGVzYyA9IGRlc2M7CiAJZC0+b3duZXIgPSBvd25lcjsKIApAQCAtMjU5LDkgKzI2MSw5IEBACiAJcmV0ID0gZHZiX3VzYl9pbml0KGQsIGFkYXB0ZXJfbnVtcyk7CiAKIAlpZiAocmV0ID09IDApCi0JCWluZm8oIiVzIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBhbmQgY29ubmVjdGVkLiIsZGVzYy0+bmFtZSk7CisJCWluZm8oIiVzIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBhbmQgY29ubmVjdGVkLiIsIGRlc2MtPm5hbWUpOwogCWVsc2UKLQkJaW5mbygiJXMgZXJyb3Igd2hpbGUgbG9hZGluZyBkcml2ZXIgKCVkKSIsZGVzYy0+bmFtZSxyZXQpOworCQlpbmZvKCIlcyBlcnJvciB3aGlsZSBsb2FkaW5nIGRyaXZlciAoJWQpIiwgZGVzYy0+bmFtZSwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChkdmJfdXNiX2RldmljZV9pbml0KTsKQEAgLTI3MSwxMiArMjczLDEyIEBACiAJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAljb25zdCBjaGFyICpuYW1lID0gImdlbmVyaWMgRFZCLVVTQiBtb2R1bGUiOwogCi0JdXNiX3NldF9pbnRmZGF0YShpbnRmLE5VTEwpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CiAJaWYgKGQgIT0gTlVMTCAmJiBkLT5kZXNjICE9IE5VTEwpIHsKIAkJbmFtZSA9IGQtPmRlc2MtPm5hbWU7CiAJCWR2Yl91c2JfZXhpdChkKTsKIAl9Ci0JaW5mbygiJXMgc3VjY2Vzc2Z1bGx5IGRlaW5pdGlhbGl6ZWQgYW5kIGRpc2Nvbm5lY3RlZC4iLG5hbWUpOworCWluZm8oIiVzIHN1Y2Nlc3NmdWxseSBkZWluaXRpYWxpemVkIGFuZCBkaXNjb25uZWN0ZWQuIiwgbmFtZSk7CiAKIH0KIEVYUE9SVF9TWU1CT0woZHZiX3VzYl9kZXZpY2VfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItcmVtb3RlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItcmVtb3RlLmMKaW5kZXggODUyZmU4OS4uYjU3OWZlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXJlbW90ZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1yZW1vdGUuYwpAQCAtOCwyOSArOCwyOSBAQAogI2luY2x1ZGUgImR2Yi11c2ItY29tbW9uLmgiCiAjaW5jbHVkZSA8bGludXgvdXNiL2lucHV0Lmg+CiAKLXN0YXRpYyBpbnQgZHZiX3VzYl9nZXRrZXljb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwKK3N0YXRpYyBpbnQgbGVnYWN5X2R2Yl91c2JfZ2V0a2V5Y29kZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsCiAJCQkJdW5zaWduZWQgaW50IHNjYW5jb2RlLCB1bnNpZ25lZCBpbnQgKmtleWNvZGUpCiB7CiAJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKIAotCXN0cnVjdCBkdmJfdXNiX3JjX2tleSAqa2V5bWFwID0gZC0+cHJvcHMucmNfa2V5X21hcDsKKwlzdHJ1Y3QgaXJfc2NhbmNvZGUgKmtleW1hcCA9IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19rZXlfbWFwOwogCWludCBpOwogCiAJLyogU2VlIGlmIHdlIGNhbiBtYXRjaCB0aGUgcmF3IGtleSBjb2RlLiAqLwotCWZvciAoaSA9IDA7IGkgPCBkLT5wcm9wcy5yY19rZXlfbWFwX3NpemU7IGkrKykKLQkJaWYgKGtleW1hcFtpXS5zY2FuID09IHNjYW5jb2RlKSB7Ci0JCQkqa2V5Y29kZSA9IGtleW1hcFtpXS5ldmVudDsKKwlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmMubGVnYWN5LnJjX2tleV9tYXBfc2l6ZTsgaSsrKQorCQlpZiAoa2V5bWFwW2ldLnNjYW5jb2RlID09IHNjYW5jb2RlKSB7CisJCQkqa2V5Y29kZSA9IGtleW1hcFtpXS5rZXljb2RlOwogCQkJcmV0dXJuIDA7CiAJCX0KIAogCS8qCiAJICogSWYgaXMgdGhlcmUgZXh0cmEgc3BhY2UsIHJldHVybnMgS0VZX1JFU0VSVkVELAotCSAqIG90aGVyd2lzZSwgaW5wdXQgY29yZSB3b24ndCBsZXQgZHZiX3VzYl9zZXRrZXljb2RlCisJICogb3RoZXJ3aXNlLCBpbnB1dCBjb3JlIHdvbid0IGxldCBsZWdhY3lfZHZiX3VzYl9zZXRrZXljb2RlCiAJICogdG8gd29yawogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBkLT5wcm9wcy5yY19rZXlfbWFwX3NpemU7IGkrKykKLQkJaWYgKGtleW1hcFtpXS5ldmVudCA9PSBLRVlfUkVTRVJWRUQgfHwKLQkJICAgIGtleW1hcFtpXS5ldmVudCA9PSBLRVlfVU5LTk9XTikgeworCWZvciAoaSA9IDA7IGkgPCBkLT5wcm9wcy5yYy5sZWdhY3kucmNfa2V5X21hcF9zaXplOyBpKyspCisJCWlmIChrZXltYXBbaV0ua2V5Y29kZSA9PSBLRVlfUkVTRVJWRUQgfHwKKwkJICAgIGtleW1hcFtpXS5rZXljb2RlID09IEtFWV9VTktOT1dOKSB7CiAJCQkqa2V5Y29kZSA9IEtFWV9SRVNFUlZFRDsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0zOCwyNyArMzgsMjcgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCBkdmJfdXNiX3NldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqZGV2LAorc3RhdGljIGludCBsZWdhY3lfZHZiX3VzYl9zZXRrZXljb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwKIAkJCQl1bnNpZ25lZCBpbnQgc2NhbmNvZGUsIHVuc2lnbmVkIGludCBrZXljb2RlKQogewogCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CiAKLQlzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgKmtleW1hcCA9IGQtPnByb3BzLnJjX2tleV9tYXA7CisJc3RydWN0IGlyX3NjYW5jb2RlICprZXltYXAgPSBkLT5wcm9wcy5yYy5sZWdhY3kucmNfa2V5X21hcDsKIAlpbnQgaTsKIAogCS8qIFNlYXJjaCBpZiBpdCBpcyByZXBsYWNpbmcgYW4gZXhpc3Rpbmcga2V5Y29kZSAqLwotCWZvciAoaSA9IDA7IGkgPCBkLT5wcm9wcy5yY19rZXlfbWFwX3NpemU7IGkrKykKLQkJaWYgKGtleW1hcFtpXS5zY2FuID09IHNjYW5jb2RlKSB7Ci0JCQlrZXltYXBbaV0uZXZlbnQgPSBrZXljb2RlOworCWZvciAoaSA9IDA7IGkgPCBkLT5wcm9wcy5yYy5sZWdhY3kucmNfa2V5X21hcF9zaXplOyBpKyspCisJCWlmIChrZXltYXBbaV0uc2NhbmNvZGUgPT0gc2NhbmNvZGUpIHsKKwkJCWtleW1hcFtpXS5rZXljb2RlID0ga2V5Y29kZTsKIAkJCXJldHVybiAwOwogCQl9CiAKIAkvKiBTZWFyY2ggaWYgaXMgdGhlcmUgYSBjbGVhbiBlbnRyeS4gSWYgc28sIHVzZSBpdCAqLwotCWZvciAoaSA9IDA7IGkgPCBkLT5wcm9wcy5yY19rZXlfbWFwX3NpemU7IGkrKykKLQkJaWYgKGtleW1hcFtpXS5ldmVudCA9PSBLRVlfUkVTRVJWRUQgfHwKLQkJICAgIGtleW1hcFtpXS5ldmVudCA9PSBLRVlfVU5LTk9XTikgewotCQkJa2V5bWFwW2ldLnNjYW4gPSBzY2FuY29kZTsKLQkJCWtleW1hcFtpXS5ldmVudCA9IGtleWNvZGU7CisJZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19rZXlfbWFwX3NpemU7IGkrKykKKwkJaWYgKGtleW1hcFtpXS5rZXljb2RlID09IEtFWV9SRVNFUlZFRCB8fAorCQkgICAga2V5bWFwW2ldLmtleWNvZGUgPT0gS0VZX1VOS05PV04pIHsKKwkJCWtleW1hcFtpXS5zY2FuY29kZSA9IHNjYW5jb2RlOworCQkJa2V5bWFwW2ldLmtleWNvZGUgPSBrZXljb2RlOwogCQkJcmV0dXJuIDA7CiAJCX0KIApAQCAtNzgsNyArNzgsNyBAQAogICoKICAqIFRPRE86IEZpeCB0aGUgcmVwZWF0IHJhdGUgb2YgdGhlIGlucHV0IGRldmljZS4KICAqLwotc3RhdGljIHZvaWQgZHZiX3VzYl9yZWFkX3JlbW90ZV9jb250cm9sKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyB2b2lkIGxlZ2FjeV9kdmJfdXNiX3JlYWRfcmVtb3RlX2NvbnRyb2woc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UsIHJjX3F1ZXJ5X3dvcmsud29yayk7CkBAIC05Miw3ICs5Miw3IEBACiAJaWYgKGR2Yl91c2JfZGlzYWJsZV9yY19wb2xsaW5nKQogCQlyZXR1cm47CiAKLQlpZiAoZC0+cHJvcHMucmNfcXVlcnkoZCwmZXZlbnQsJnN0YXRlKSkgeworCWlmIChkLT5wcm9wcy5yYy5sZWdhY3kucmNfcXVlcnkoZCwmZXZlbnQsJnN0YXRlKSkgewogCQllcnIoImVycm9yIHdoaWxlIHF1ZXJ5aW5nIGZvciBhbiByZW1vdGUgY29udHJvbCBldmVudC4iKTsKIAkJZ290byBzY2hlZHVsZTsKIAl9CkBAIC0xNTEsMTggKzE1MSwxMTcgQEAKICovCiAKIHNjaGVkdWxlOgotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZC0+cmNfcXVlcnlfd29yayxtc2Vjc190b19qaWZmaWVzKGQtPnByb3BzLnJjX2ludGVydmFsKSk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkLT5yY19xdWVyeV93b3JrLG1zZWNzX3RvX2ppZmZpZXMoZC0+cHJvcHMucmMubGVnYWN5LnJjX2ludGVydmFsKSk7Cit9CisKK3N0YXRpYyBpbnQgbGVnYWN5X2R2Yl91c2JfcmVtb3RlX2luaXQoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLAorCQkJCSAgICAgIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldikKK3sKKwlpbnQgaSwgZXJyLCByY19pbnRlcnZhbDsKKworCWlucHV0X2Rldi0+Z2V0a2V5Y29kZSA9IGxlZ2FjeV9kdmJfdXNiX2dldGtleWNvZGU7CisJaW5wdXRfZGV2LT5zZXRrZXljb2RlID0gbGVnYWN5X2R2Yl91c2Jfc2V0a2V5Y29kZTsKKworCS8qIHNldCB0aGUgYml0cyBmb3IgdGhlIGtleXMgKi8KKwlkZWJfcmMoImtleSBtYXAgc2l6ZTogJWRcbiIsIGQtPnByb3BzLnJjLmxlZ2FjeS5yY19rZXlfbWFwX3NpemUpOworCWZvciAoaSA9IDA7IGkgPCBkLT5wcm9wcy5yYy5sZWdhY3kucmNfa2V5X21hcF9zaXplOyBpKyspIHsKKwkJZGViX3JjKCJzZXR0aW5nIGJpdCBmb3IgZXZlbnQgJWQgaXRlbSAlZFxuIiwKKwkJCWQtPnByb3BzLnJjLmxlZ2FjeS5yY19rZXlfbWFwW2ldLmtleWNvZGUsIGkpOworCQlzZXRfYml0KGQtPnByb3BzLnJjLmxlZ2FjeS5yY19rZXlfbWFwW2ldLmtleWNvZGUsIGlucHV0X2Rldi0+a2V5Yml0KTsKKwl9CisKKwkvKiBzZXR0aW5nIHRoZXNlIHR3byB2YWx1ZXMgdG8gbm9uLXplcm8sIHdlIGhhdmUgdG8gbWFuYWdlIGtleSByZXBlYXRzICovCisJaW5wdXRfZGV2LT5yZXBbUkVQX1BFUklPRF0gPSBkLT5wcm9wcy5yYy5sZWdhY3kucmNfaW50ZXJ2YWw7CisJaW5wdXRfZGV2LT5yZXBbUkVQX0RFTEFZXSAgPSBkLT5wcm9wcy5yYy5sZWdhY3kucmNfaW50ZXJ2YWwgKyAxNTA7CisKKwlpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dF9kZXYsIGQpOworCisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CisJaWYgKGVycikKKwkJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKKworCXJjX2ludGVydmFsID0gZC0+cHJvcHMucmMubGVnYWN5LnJjX2ludGVydmFsOworCisJSU5JVF9ERUxBWUVEX1dPUksoJmQtPnJjX3F1ZXJ5X3dvcmssIGxlZ2FjeV9kdmJfdXNiX3JlYWRfcmVtb3RlX2NvbnRyb2wpOworCisJaW5mbygic2NoZWR1bGUgcmVtb3RlIHF1ZXJ5IGludGVydmFsIHRvICVkIG1zZWNzLiIsIHJjX2ludGVydmFsKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmQtPnJjX3F1ZXJ5X3dvcmssCisJCQkgICAgICBtc2Vjc190b19qaWZmaWVzKHJjX2ludGVydmFsKSk7CisKKwlkLT5zdGF0ZSB8PSBEVkJfVVNCX1NUQVRFX1JFTU9URTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qIFJlbW90ZS1jb250cm9sIHBvbGwgZnVuY3Rpb24gLSBjYWxsZWQgZXZlcnkgZGliLT5yY19xdWVyeV9pbnRlcnZhbCBtcyB0byBzZWUKKyAqIHdoZXRoZXIgdGhlIHJlbW90ZSBjb250cm9sIGhhcyByZWNlaXZlZCBhbnl0aGluZy4KKyAqCisgKiBUT0RPOiBGaXggdGhlIHJlcGVhdCByYXRlIG9mIHRoZSBpbnB1dCBkZXZpY2UuCisgKi8KK3N0YXRpYyB2b2lkIGR2Yl91c2JfcmVhZF9yZW1vdGVfY29udHJvbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkdmJfdXNiX2RldmljZSwgcmNfcXVlcnlfd29yay53b3JrKTsKKwlpbnQgZXJyOworCisJLyogVE9ETzogbmVlZCBhIGxvY2sgaGVyZS4gIFdlIGNhbiBzaW1wbHkgc2tpcCBjaGVja2luZyBmb3IgdGhlIHJlbW90ZSBjb250cm9sCisJICAgaWYgd2UncmUgYnVzeS4gKi8KKworCS8qIHdoZW4gdGhlIHBhcmFtZXRlciBoYXMgYmVlbiBzZXQgdG8gMSB2aWEgc3lzZnMgd2hpbGUgdGhlCisJICogZHJpdmVyIHdhcyBydW5uaW5nLCBvciB3aGVuIGJ1bGsgbW9kZSBpcyBlbmFibGVkIGFmdGVyIElSIGluaXQKKwkgKi8KKwlpZiAoZHZiX3VzYl9kaXNhYmxlX3JjX3BvbGxpbmcgfHwgZC0+cHJvcHMucmMuY29yZS5idWxrX21vZGUpCisJCXJldHVybjsKKworCWVyciA9IGQtPnByb3BzLnJjLmNvcmUucmNfcXVlcnkoZCk7CisJaWYgKGVycikKKwkJZXJyKCJlcnJvciAlZCB3aGlsZSBxdWVyeWluZyBmb3IgYW4gcmVtb3RlIGNvbnRyb2wgZXZlbnQuIiwgZXJyKTsKKworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZC0+cmNfcXVlcnlfd29yaywKKwkJCSAgICAgIG1zZWNzX3RvX2ppZmZpZXMoZC0+cHJvcHMucmMuY29yZS5yY19pbnRlcnZhbCkpOworfQorCitzdGF0aWMgaW50IHJjX2NvcmVfZHZiX3VzYl9yZW1vdGVfaW5pdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsCisJCQkJICAgICAgIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldikKK3sKKwlpbnQgZXJyLCByY19pbnRlcnZhbDsKKworCWQtPnByb3BzLnJjLmNvcmUucmNfcHJvcHMucHJpdiA9IGQ7CisJZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaW5wdXRfZGV2LAorCQkJCSBkLT5wcm9wcy5yYy5jb3JlLnJjX2NvZGVzLAorCQkJCSAmZC0+cHJvcHMucmMuY29yZS5yY19wcm9wcywKKwkJCQkgZC0+cHJvcHMucmMuY29yZS5tb2R1bGVfbmFtZSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlpZiAoIWQtPnByb3BzLnJjLmNvcmUucmNfcXVlcnkgfHwgZC0+cHJvcHMucmMuY29yZS5idWxrX21vZGUpCisJCXJldHVybiAwOworCisJLyogUG9sbGluZyBtb2RlIC0gaW5pdGlhbGl6ZSBhIHdvcmsgcXVldWUgZm9yIGhhbmRsaW5nIGl0ICovCisJSU5JVF9ERUxBWUVEX1dPUksoJmQtPnJjX3F1ZXJ5X3dvcmssIGR2Yl91c2JfcmVhZF9yZW1vdGVfY29udHJvbCk7CisKKwlyY19pbnRlcnZhbCA9IGQtPnByb3BzLnJjLmNvcmUucmNfaW50ZXJ2YWw7CisKKwlpbmZvKCJzY2hlZHVsZSByZW1vdGUgcXVlcnkgaW50ZXJ2YWwgdG8gJWQgbXNlY3MuIiwgcmNfaW50ZXJ2YWwpOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZC0+cmNfcXVlcnlfd29yaywKKwkJCSAgICAgIG1zZWNzX3RvX2ppZmZpZXMocmNfaW50ZXJ2YWwpKTsKKworCXJldHVybiAwOwogfQogCiBpbnQgZHZiX3VzYl9yZW1vdGVfaW5pdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCiB7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwotCWludCBpOwogCWludCBlcnI7CiAKLQlpZiAoZC0+cHJvcHMucmNfa2V5X21hcCA9PSBOVUxMIHx8Ci0JCWQtPnByb3BzLnJjX3F1ZXJ5ID09IE5VTEwgfHwKLQkJZHZiX3VzYl9kaXNhYmxlX3JjX3BvbGxpbmcpCisJaWYgKGR2Yl91c2JfZGlzYWJsZV9yY19wb2xsaW5nKQorCQlyZXR1cm4gMDsKKworCWlmIChkLT5wcm9wcy5yYy5sZWdhY3kucmNfa2V5X21hcCAmJiBkLT5wcm9wcy5yYy5sZWdhY3kucmNfcXVlcnkpCisJCWQtPnByb3BzLnJjLm1vZGUgPSBEVkJfUkNfTEVHQUNZOworCWVsc2UgaWYgKGQtPnByb3BzLnJjLmNvcmUucmNfY29kZXMpCisJCWQtPnByb3BzLnJjLm1vZGUgPSBEVkJfUkNfQ09SRTsKKwllbHNlCiAJCXJldHVybiAwOwogCiAJdXNiX21ha2VfcGF0aChkLT51ZGV2LCBkLT5yY19waHlzLCBzaXplb2YoZC0+cmNfcGh5cykpOwpAQCAtMTc3LDM5ICsyNzYsMTkgQEAKIAlpbnB1dF9kZXYtPnBoeXMgPSBkLT5yY19waHlzOwogCXVzYl90b19pbnB1dF9pZChkLT51ZGV2LCAmaW5wdXRfZGV2LT5pZCk7CiAJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmQtPnVkZXYtPmRldjsKLQlpbnB1dF9kZXYtPmdldGtleWNvZGUgPSBkdmJfdXNiX2dldGtleWNvZGU7Ci0JaW5wdXRfZGV2LT5zZXRrZXljb2RlID0gZHZiX3VzYl9zZXRrZXljb2RlOwotCi0JLyogc2V0IHRoZSBiaXRzIGZvciB0aGUga2V5cyAqLwotCWRlYl9yYygia2V5IG1hcCBzaXplOiAlZFxuIiwgZC0+cHJvcHMucmNfa2V5X21hcF9zaXplKTsKLQlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmNfa2V5X21hcF9zaXplOyBpKyspIHsKLQkJZGViX3JjKCJzZXR0aW5nIGJpdCBmb3IgZXZlbnQgJWQgaXRlbSAlZFxuIiwKLQkJCWQtPnByb3BzLnJjX2tleV9tYXBbaV0uZXZlbnQsIGkpOwotCQlzZXRfYml0KGQtPnByb3BzLnJjX2tleV9tYXBbaV0uZXZlbnQsIGlucHV0X2Rldi0+a2V5Yml0KTsKLQl9CiAKIAkvKiBTdGFydCB0aGUgcmVtb3RlLWNvbnRyb2wgcG9sbGluZy4gKi8KLQlpZiAoZC0+cHJvcHMucmNfaW50ZXJ2YWwgPCA0MCkKLQkJZC0+cHJvcHMucmNfaW50ZXJ2YWwgPSAxMDA7IC8qIGRlZmF1bHQgKi8KLQotCS8qIHNldHRpbmcgdGhlc2UgdHdvIHZhbHVlcyB0byBub24temVybywgd2UgaGF2ZSB0byBtYW5hZ2Uga2V5IHJlcGVhdHMgKi8KLQlpbnB1dF9kZXYtPnJlcFtSRVBfUEVSSU9EXSA9IGQtPnByb3BzLnJjX2ludGVydmFsOwotCWlucHV0X2Rldi0+cmVwW1JFUF9ERUxBWV0gID0gZC0+cHJvcHMucmNfaW50ZXJ2YWwgKyAxNTA7Ci0KLQlpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dF9kZXYsIGQpOwotCi0JZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7Ci0JaWYgKGVycikgewotCQlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOwotCQlyZXR1cm4gZXJyOwotCX0KKwlpZiAoZC0+cHJvcHMucmMubGVnYWN5LnJjX2ludGVydmFsIDwgNDApCisJCWQtPnByb3BzLnJjLmxlZ2FjeS5yY19pbnRlcnZhbCA9IDEwMDsgLyogZGVmYXVsdCAqLwogCiAJZC0+cmNfaW5wdXRfZGV2ID0gaW5wdXRfZGV2OwogCi0JSU5JVF9ERUxBWUVEX1dPUksoJmQtPnJjX3F1ZXJ5X3dvcmssIGR2Yl91c2JfcmVhZF9yZW1vdGVfY29udHJvbCk7Ci0KLQlpbmZvKCJzY2hlZHVsZSByZW1vdGUgcXVlcnkgaW50ZXJ2YWwgdG8gJWQgbXNlY3MuIiwgZC0+cHJvcHMucmNfaW50ZXJ2YWwpOwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZC0+cmNfcXVlcnlfd29yayxtc2Vjc190b19qaWZmaWVzKGQtPnByb3BzLnJjX2ludGVydmFsKSk7CisJaWYgKGQtPnByb3BzLnJjLm1vZGUgPT0gRFZCX1JDX0xFR0FDWSkKKwkJZXJyID0gbGVnYWN5X2R2Yl91c2JfcmVtb3RlX2luaXQoZCwgaW5wdXRfZGV2KTsKKwllbHNlCisJCWVyciA9IHJjX2NvcmVfZHZiX3VzYl9yZW1vdGVfaW5pdChkLCBpbnB1dF9kZXYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKIAlkLT5zdGF0ZSB8PSBEVkJfVVNCX1NUQVRFX1JFTU9URTsKIApAQCAtMjIxLDcgKzMwMCwxMCBAQAogCWlmIChkLT5zdGF0ZSAmIERWQl9VU0JfU1RBVEVfUkVNT1RFKSB7CiAJCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoJmQtPnJjX3F1ZXJ5X3dvcmspOwogCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShkLT5yY19pbnB1dF9kZXYpOworCQlpZiAoZC0+cHJvcHMucmMubW9kZSA9PSBEVkJfUkNfTEVHQUNZKQorCQkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoZC0+cmNfaW5wdXRfZGV2KTsKKwkJZWxzZQorCQkJaXJfaW5wdXRfdW5yZWdpc3RlcihkLT5yY19pbnB1dF9kZXYpOwogCX0KIAlkLT5zdGF0ZSAmPSB+RFZCX1VTQl9TVEFURV9SRU1PVEU7CiAJcmV0dXJuIDA7CkBAIC0yMzQsNyArMzE2LDcgQEAKIAkJdTgga2V5YnVmWzVdLCB1MzIgKmV2ZW50LCBpbnQgKnN0YXRlKQogewogCWludCBpOwotCXN0cnVjdCBkdmJfdXNiX3JjX2tleSAqa2V5bWFwID0gZC0+cHJvcHMucmNfa2V5X21hcDsKKwlzdHJ1Y3QgaXJfc2NhbmNvZGUgKmtleW1hcCA9IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19rZXlfbWFwOwogCSpldmVudCA9IDA7CiAJKnN0YXRlID0gUkVNT1RFX05PX0tFWV9QUkVTU0VEOwogCXN3aXRjaCAoa2V5YnVmWzBdKSB7CkBAIC0yNDcsMTAgKzMyOSwxMCBAQAogCQkJCWJyZWFrOwogCQkJfQogCQkJLyogU2VlIGlmIHdlIGNhbiBtYXRjaCB0aGUgcmF3IGtleSBjb2RlLiAqLwotCQkJZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjX2tleV9tYXBfc2l6ZTsgaSsrKQorCQkJZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19rZXlfbWFwX3NpemU7IGkrKykKIAkJCQlpZiAocmM1X2N1c3RvbSgma2V5bWFwW2ldKSA9PSBrZXlidWZbMV0gJiYKIAkJCQkJcmM1X2RhdGEoJmtleW1hcFtpXSkgPT0ga2V5YnVmWzNdKSB7Ci0JCQkJCSpldmVudCA9IGtleW1hcFtpXS5ldmVudDsKKwkJCQkJKmV2ZW50ID0ga2V5bWFwW2ldLmtleWNvZGU7CiAJCQkJCSpzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKIAkJCQkJcmV0dXJuIDA7CiAJCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2IuaAppbmRleCA0YTlmNjc2Li4zNGY3YjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2IuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2IuaApAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxtZWRpYS9pci1jb3JlLmg+CiAKICNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKICNpbmNsdWRlICJkdmJfZGVtdXguaCIKQEAgLTc0LDMwICs3NSwxOSBAQAogCXN0cnVjdCB1c2JfZGV2aWNlX2lkICp3YXJtX2lkc1tEVkJfVVNCX0lEX01BWF9OVU1dOwogfTsKIAotLyoqCi0gKiBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgLSBhIHJlbW90ZSBjb250cm9sIGtleSBhbmQgaXRzIGlucHV0LWV2ZW50Ci0gKiBAY3VzdG9tOiB0aGUgdmVuZG9yL2N1c3RvbSBwYXJ0IG9mIHRoZSBrZXkKLSAqIEBkYXRhOiB0aGUgYWN0dWFsIGtleSBwYXJ0Ci0gKiBAZXZlbnQ6IHRoZSBpbnB1dCBldmVudCBhc3NpZ25lZCB0byBrZXkgaWRlbnRpZmllZCBieSBjdXN0b20gYW5kIGRhdGEKLSAqLwotc3RydWN0IGR2Yl91c2JfcmNfa2V5IHsKLQl1MTYgc2NhbjsKLQl1MzIgZXZlbnQ7Ci19OwotCi1zdGF0aWMgaW5saW5lIHU4IHJjNV9jdXN0b20oc3RydWN0IGR2Yl91c2JfcmNfa2V5ICprZXkpCitzdGF0aWMgaW5saW5lIHU4IHJjNV9jdXN0b20oc3RydWN0IGlyX3NjYW5jb2RlICprZXkpCiB7Ci0JcmV0dXJuIChrZXktPnNjYW4gPj4gOCkgJiAweGZmOworCXJldHVybiAoa2V5LT5zY2FuY29kZSA+PiA4KSAmIDB4ZmY7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTggcmM1X2RhdGEoc3RydWN0IGR2Yl91c2JfcmNfa2V5ICprZXkpCitzdGF0aWMgaW5saW5lIHU4IHJjNV9kYXRhKHN0cnVjdCBpcl9zY2FuY29kZSAqa2V5KQogewotCXJldHVybiBrZXktPnNjYW4gJiAweGZmOworCXJldHVybiBrZXktPnNjYW5jb2RlICYgMHhmZjsKIH0KIAotc3RhdGljIGlubGluZSB1OCByYzVfc2NhbihzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgKmtleSkKK3N0YXRpYyBpbmxpbmUgdTggcmM1X3NjYW4oc3RydWN0IGlyX3NjYW5jb2RlICprZXkpCiB7Ci0JcmV0dXJuIGtleS0+c2NhbiAmIDB4ZmZmZjsKKwlyZXR1cm4ga2V5LT5zY2FuY29kZSAmIDB4ZmZmZjsKIH0KIAogc3RydWN0IGR2Yl91c2JfZGV2aWNlOwpAQCAtMTY4LDYgKzE1OCw1NSBAQAogfTsKIAogLyoqCisgKiBzdHJ1Y3QgZHZiX3JjX2xlZ2FjeSAtIG9sZCBwcm9wZXJ0aWVzIG9mIHJlbW90ZSBjb250cm9sbGVyCisgKiBAcmNfa2V5X21hcDogYSBoYXJkLXdpcmVkIGFycmF5IG9mIHN0cnVjdCBpcl9zY2FuY29kZSAoTlVMTCB0byBkaXNhYmxlCisgKiAgcmVtb3RlIGNvbnRyb2wgaGFuZGxpbmcpLgorICogQHJjX2tleV9tYXBfc2l6ZTogbnVtYmVyIG9mIGl0ZW1zIGluIEByY19rZXlfbWFwLgorICogQHJjX3F1ZXJ5OiBjYWxsZWQgdG8gcXVlcnkgYW4gZXZlbnQgZXZlbnQuCisgKiBAcmNfaW50ZXJ2YWw6IHRpbWUgaW4gbXMgYmV0d2VlbiB0d28gcXVlcmllcy4KKyAqLworc3RydWN0IGR2Yl9yY19sZWdhY3kgeworLyogcmVtb3RlIGNvbnRyb2wgcHJvcGVydGllcyAqLworI2RlZmluZSBSRU1PVEVfTk9fS0VZX1BSRVNTRUQgICAgICAweDAwCisjZGVmaW5lIFJFTU9URV9LRVlfUFJFU1NFRCAgICAgICAgIDB4MDEKKyNkZWZpbmUgUkVNT1RFX0tFWV9SRVBFQVQgICAgICAgICAgMHgwMgorCXN0cnVjdCBpcl9zY2FuY29kZSAgKnJjX2tleV9tYXA7CisJaW50IHJjX2tleV9tYXBfc2l6ZTsKKwlpbnQgKCpyY19xdWVyeSkgKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqLCB1MzIgKiwgaW50ICopOworCWludCByY19pbnRlcnZhbDsKK307CisKKy8qKgorICogc3RydWN0IGR2Yl9yYyBwcm9wZXJ0aWVzIG9mIHJlbW90ZSBjb250cm9sbGVyLCB1c2luZyByYy1jb3JlCisgKiBAcmNfY29kZXM6IG5hbWUgb2YgcmMgY29kZXMgdGFibGUKKyAqIEBwcm90b2NvbDogdHlwZSBvZiBwcm90b2NvbChzKSBjdXJyZW50bHkgdXNlZCBieSB0aGUgZHJpdmVyCisgKiBAcmNfcXVlcnk6IGNhbGxlZCB0byBxdWVyeSBhbiBldmVudCBldmVudC4KKyAqIEByY19pbnRlcnZhbDogdGltZSBpbiBtcyBiZXR3ZWVuIHR3byBxdWVyaWVzLgorICogQHJjX3Byb3BzOiByZW1vdGUgY29udHJvbGxlciBwcm9wZXJ0aWVzCisgKiBAYnVsa19tb2RlOiBkZXZpY2Ugc3VwcG9ydHMgYnVsayBtb2RlIGZvciBSQyAoZGlzYWJsZSBwb2xsaW5nIG1vZGUpCisgKi8KK3N0cnVjdCBkdmJfcmMgeworCWNoYXIgKnJjX2NvZGVzOworCXU2NCBwcm90b2NvbDsKKwljaGFyICptb2R1bGVfbmFtZTsKKwlpbnQgKCpyY19xdWVyeSkgKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCk7CisJaW50IHJjX2ludGVydmFsOworCXN0cnVjdCBpcl9kZXZfcHJvcHMgcmNfcHJvcHM7CisJYm9vbCBidWxrX21vZGU7CQkJCS8qIHVzZXMgYnVsayBtb2RlICovCit9OworCisvKioKKyAqIGVudW0gZHZiX3VzYl9tb2RlIC0gU3BlY2lmaWVzIGlmIGl0IGlzIHVzaW5nIGEgbGVnYWN5IGRyaXZlciBvciBhIG5ldyBvbmUKKyAqCQkgICAgICAgYmFzZWQgb24gcmMtY29yZQorICogVGhpcyBpcyBpbml0aWFsaXplZC91c2VkIG9ubHkgaW5zaWRlIGR2Yi11c2ItcmVtb3RlLmMuCisgKiBJdCBzaG91bGRuJ3QgYmUgc2V0IGJ5IHRoZSBkcml2ZXJzLgorICovCitlbnVtIGR2Yl91c2JfbW9kZSB7CisJRFZCX1JDX0xFR0FDWSwKKwlEVkJfUkNfQ09SRSwKK307CisKKy8qKgogICogc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgLSBwcm9wZXJ0aWVzIG9mIGEgZHZiLXVzYi1kZXZpY2UKICAqIEB1c2JfY3RybDogd2hpY2ggVVNCIGRldmljZS1zaWRlIGNvbnRyb2xsZXIgaXMgaW4gdXNlLiBOZWVkZWQgZm9yIGZpcm13YXJlCiAgKiAgZG93bmxvYWQuCkBAIC0xODUsMTEgKzIyNCw3IEBACiAgKiBAaWRlbnRpZnlfc3RhdGU6IGNhbGxlZCB0byBkZXRlcm1pbmUgdGhlIHN0YXRlIChjb2xkIG9yIHdhcm0pLCB3aGVuIGl0CiAgKiAgaXMgbm90IGRpc3Rpbmd1aXNoYWJsZSBieSB0aGUgVVNCIElEcy4KICAqCi0gKiBAcmNfa2V5X21hcDogYSBoYXJkLXdpcmVkIGFycmF5IG9mIHN0cnVjdCBkdmJfdXNiX3JjX2tleSAoTlVMTCB0byBkaXNhYmxlCi0gKiAgcmVtb3RlIGNvbnRyb2wgaGFuZGxpbmcpLgotICogQHJjX2tleV9tYXBfc2l6ZTogbnVtYmVyIG9mIGl0ZW1zIGluIEByY19rZXlfbWFwLgotICogQHJjX3F1ZXJ5OiBjYWxsZWQgdG8gcXVlcnkgYW4gZXZlbnQgZXZlbnQuCi0gKiBAcmNfaW50ZXJ2YWw6IHRpbWUgaW4gbXMgYmV0d2VlbiB0d28gcXVlcmllcy4KKyAqIEByYzogcmVtb3RlIGNvbnRyb2xsZXIgcHJvcGVydGllcwogICoKICAqIEBpMmNfYWxnbzogaTJjX2FsZ29yaXRobSBpZiB0aGUgZGV2aWNlIGhhcyBJMkNvdmVyVVNCLgogICoKQEAgLTIzMywxNCArMjY4LDExIEBACiAJaW50ICgqaWRlbnRpZnlfc3RhdGUpICAgKHN0cnVjdCB1c2JfZGV2aWNlICosIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzICosCiAJCQlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfZGVzY3JpcHRpb24gKiosIGludCAqKTsKIAotLyogcmVtb3RlIGNvbnRyb2wgcHJvcGVydGllcyAqLwotI2RlZmluZSBSRU1PVEVfTk9fS0VZX1BSRVNTRUQgICAgICAweDAwCi0jZGVmaW5lIFJFTU9URV9LRVlfUFJFU1NFRCAgICAgICAgIDB4MDEKLSNkZWZpbmUgUkVNT1RFX0tFWV9SRVBFQVQgICAgICAgICAgMHgwMgotCXN0cnVjdCBkdmJfdXNiX3JjX2tleSAgKnJjX2tleV9tYXA7Ci0JaW50IHJjX2tleV9tYXBfc2l6ZTsKLQlpbnQgKCpyY19xdWVyeSkgKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqLCB1MzIgKiwgaW50ICopOwotCWludCByY19pbnRlcnZhbDsKKwlzdHJ1Y3QgeworCQllbnVtIGR2Yl91c2JfbW9kZSBtb2RlOwkvKiBEcml2ZXJzIHNob3VsZG4ndCB0b3VjaCBvbiBpdCAqLworCQlzdHJ1Y3QgZHZiX3JjX2xlZ2FjeSBsZWdhY3k7CisJCXN0cnVjdCBkdmJfcmMgY29yZTsKKwl9IHJjOwogCiAJc3RydWN0IGkyY19hbGdvcml0aG0gKmkyY19hbGdvOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R3MjEwMi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdzIxMDIuYwppbmRleCBlOGZiODUzLi43NzRkZjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R3MjEwMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHcyMTAyLmMKQEAgLTc0LDcgKzc0LDcgQEAKIAkJIm9uIGZpcm13YXJlLXByb2JsZW1zLiIKIAogc3RydWN0IGlyX2NvZGVzX2R2Yl91c2JfdGFibGVfdGFibGUgewotCXN0cnVjdCBkdmJfdXNiX3JjX2tleSAqcmNfa2V5czsKKwlzdHJ1Y3QgaXJfc2NhbmNvZGUgKnJjX2tleXM7CiAJaW50IHJjX2tleXNfc2l6ZTsKIH07CiAKQEAgLTk0OCw3ICs5NDgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IGlyX2NvZGVzX2R3MjEweF90YWJsZVtdID0geworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19kdzIxMHhfdGFibGVbXSA9IHsKIAl7IDB4ZjgwYSwgS0VZX1EgfSwJCS8qcG93ZXIqLwogCXsgMHhmODBjLCBLRVlfTSB9LAkJLyptdXRlKi8KIAl7IDB4ZjgxMSwgS0VZXzEgfSwKQEAgLTk4Miw3ICs5ODIsNyBAQAogCXsgMHhmODFiLCBLRVlfQiB9LAkJLypyZWNhbGwqLwogfTsKIAotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBpcl9jb2Rlc190ZXZpaV90YWJsZVtdID0geworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc190ZXZpaV90YWJsZVtdID0gewogCXsgMHhmODBhLCBLRVlfUE9XRVIgfSwKIAl7IDB4ZjgwYywgS0VZX01VVEUgfSwKIAl7IDB4ZjgxMSwgS0VZXzEgfSwKQEAgLTEwMzIsNyArMTAzMiw3IEBACiAJeyAweGY4NTgsIEtFWV9TV0lUQ0hWSURFT01PREUgfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgaXJfY29kZXNfdGJzX3RhYmxlW10gPSB7CitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3Ric190YWJsZVtdID0gewogCXsgMHhmODg0LCBLRVlfUE9XRVIgfSwKIAl7IDB4Zjg5NCwgS0VZX01VVEUgfSwKIAl7IDB4Zjg4NywgS0VZXzEgfSwKQEAgLTEwNzUsOCArMTA3NSw4IEBACiAKIHN0YXRpYyBpbnQgZHcyMTAyX3JjX3F1ZXJ5KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTMyICpldmVudCwgaW50ICpzdGF0ZSkKIHsKLQlzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgKmtleW1hcCA9IGQtPnByb3BzLnJjX2tleV9tYXA7Ci0JaW50IGtleW1hcF9zaXplID0gZC0+cHJvcHMucmNfa2V5X21hcF9zaXplOworCXN0cnVjdCBpcl9zY2FuY29kZSAqa2V5bWFwID0gZC0+cHJvcHMucmMubGVnYWN5LnJjX2tleV9tYXA7CisJaW50IGtleW1hcF9zaXplID0gZC0+cHJvcHMucmMubGVnYWN5LnJjX2tleV9tYXBfc2l6ZTsKIAl1OCBrZXlbMl07CiAJc3RydWN0IGkyY19tc2cgbXNnID0gewogCQkuYWRkciA9IERXMjEwMl9SQ19RVUVSWSwKQEAgLTEwOTYsNyArMTA5Niw3IEBACiAJCWZvciAoaSA9IDA7IGkgPCBrZXltYXBfc2l6ZSA7IGkrKykgewogCQkJaWYgKHJjNV9kYXRhKCZrZXltYXBbaV0pID09IG1zZy5idWZbMF0pIHsKIAkJCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7Ci0JCQkJKmV2ZW50ID0ga2V5bWFwW2ldLmV2ZW50OworCQkJCSpldmVudCA9IGtleW1hcFtpXS5rZXljb2RlOwogCQkJCWJyZWFrOwogCQkJfQogCkBAIC0xMTg1LDEzICsxMTg1LDEzIEBACiAJCS8qIGluaXQgcmVnaXN0ZXJzICovCiAJCXN3aXRjaCAoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgewogCQljYXNlIFVTQl9QSURfUFJPRl8xMTAwOgotCQkJczZ4MF9wcm9wZXJ0aWVzLnJjX2tleV9tYXAgPSBpcl9jb2Rlc190YnNfdGFibGU7Ci0JCQlzNngwX3Byb3BlcnRpZXMucmNfa2V5X21hcF9zaXplID0KKwkJCXM2eDBfcHJvcGVydGllcy5yYy5sZWdhY3kucmNfa2V5X21hcCA9IGlyX2NvZGVzX3Ric190YWJsZTsKKwkJCXM2eDBfcHJvcGVydGllcy5yYy5sZWdhY3kucmNfa2V5X21hcF9zaXplID0KIAkJCQkJQVJSQVlfU0laRShpcl9jb2Rlc190YnNfdGFibGUpOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX1BJRF9URVZJSV9TNjUwOgotCQkJZHcyMTA0X3Byb3BlcnRpZXMucmNfa2V5X21hcCA9IGlyX2NvZGVzX3RldmlpX3RhYmxlOwotCQkJZHcyMTA0X3Byb3BlcnRpZXMucmNfa2V5X21hcF9zaXplID0KKwkJCWR3MjEwNF9wcm9wZXJ0aWVzLnJjLmxlZ2FjeS5yY19rZXlfbWFwID0gaXJfY29kZXNfdGV2aWlfdGFibGU7CisJCQlkdzIxMDRfcHJvcGVydGllcy5yYy5sZWdhY3kucmNfa2V5X21hcF9zaXplID0KIAkJCQkJQVJSQVlfU0laRShpcl9jb2Rlc190ZXZpaV90YWJsZSk7CiAJCWNhc2UgVVNCX1BJRF9EVzIxMDQ6CiAJCQlyZXNldCA9IDE7CkBAIC0xMjU1LDEwICsxMjU1LDEzIEBACiAJLm5vX3JlY29ubmVjdCA9IDEsCiAKIAkuaTJjX2FsZ28gPSAmZHcyMTAyX3Nlcml0X2kyY19hbGdvLAotCS5yY19rZXlfbWFwID0gaXJfY29kZXNfZHcyMTB4X3RhYmxlLAotCS5yY19rZXlfbWFwX3NpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2R3MjEweF90YWJsZSksCi0JLnJjX2ludGVydmFsID0gMTUwLAotCS5yY19xdWVyeSA9IGR3MjEwMl9yY19xdWVyeSwKKworCS5yYy5sZWdhY3kgPSB7CisJCS5yY19rZXlfbWFwID0gaXJfY29kZXNfZHcyMTB4X3RhYmxlLAorCQkucmNfa2V5X21hcF9zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19kdzIxMHhfdGFibGUpLAorCQkucmNfaW50ZXJ2YWwgPSAxNTAsCisJCS5yY19xdWVyeSA9IGR3MjEwMl9yY19xdWVyeSwKKwl9LAogCiAJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHg4MSwKIAkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCkBAIC0xMzA2LDEwICsxMzA5LDEyIEBACiAJLm5vX3JlY29ubmVjdCA9IDEsCiAKIAkuaTJjX2FsZ28gPSAmZHcyMTA0X2kyY19hbGdvLAotCS5yY19rZXlfbWFwID0gaXJfY29kZXNfZHcyMTB4X3RhYmxlLAotCS5yY19rZXlfbWFwX3NpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2R3MjEweF90YWJsZSksCi0JLnJjX2ludGVydmFsID0gMTUwLAotCS5yY19xdWVyeSA9IGR3MjEwMl9yY19xdWVyeSwKKwkucmMubGVnYWN5ID0geworCQkucmNfa2V5X21hcCA9IGlyX2NvZGVzX2R3MjEweF90YWJsZSwKKwkJLnJjX2tleV9tYXBfc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZHcyMTB4X3RhYmxlKSwKKwkJLnJjX2ludGVydmFsID0gMTUwLAorCQkucmNfcXVlcnkgPSBkdzIxMDJfcmNfcXVlcnksCisJfSwKIAogCS5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCA9IDB4ODEsCiAJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLwpAQCAtMTM1MywxMCArMTM1OCwxMiBAQAogCS5ub19yZWNvbm5lY3QgPSAxLAogCiAJLmkyY19hbGdvID0gJmR3MzEwMV9pMmNfYWxnbywKLQkucmNfa2V5X21hcCA9IGlyX2NvZGVzX2R3MjEweF90YWJsZSwKLQkucmNfa2V5X21hcF9zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19kdzIxMHhfdGFibGUpLAotCS5yY19pbnRlcnZhbCA9IDE1MCwKLQkucmNfcXVlcnkgPSBkdzIxMDJfcmNfcXVlcnksCisJLnJjLmxlZ2FjeSA9IHsKKwkJLnJjX2tleV9tYXAgPSBpcl9jb2Rlc19kdzIxMHhfdGFibGUsCisJCS5yY19rZXlfbWFwX3NpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2R3MjEweF90YWJsZSksCisJCS5yY19pbnRlcnZhbCA9IDE1MCwKKwkJLnJjX3F1ZXJ5ID0gZHcyMTAyX3JjX3F1ZXJ5LAorCX0sCiAKIAkuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQgPSAweDgxLAogCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KQEAgLTEzOTYsMTAgKzE0MDMsMTIgQEAKIAkubm9fcmVjb25uZWN0ID0gMSwKIAogCS5pMmNfYWxnbyA9ICZzNngwX2kyY19hbGdvLAotCS5yY19rZXlfbWFwID0gaXJfY29kZXNfdGV2aWlfdGFibGUsCi0JLnJjX2tleV9tYXBfc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfdGV2aWlfdGFibGUpLAotCS5yY19pbnRlcnZhbCA9IDE1MCwKLQkucmNfcXVlcnkgPSBkdzIxMDJfcmNfcXVlcnksCisJLnJjLmxlZ2FjeSA9IHsKKwkJLnJjX2tleV9tYXAgPSBpcl9jb2Rlc190ZXZpaV90YWJsZSwKKwkJLnJjX2tleV9tYXBfc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfdGV2aWlfdGFibGUpLAorCQkucmNfaW50ZXJ2YWwgPSAxNTAsCisJCS5yY19xdWVyeSA9IGR3MjEwMl9yY19xdWVyeSwKKwl9LAogCiAJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHg4MSwKIAkubnVtX2FkYXB0ZXJzID0gMSwKQEAgLTE0NTksOCArMTQ2OCw4IEBACiAJLyogZmlsbCBvbmx5IGRpZmZlcmVudCBmaWVsZHMgKi8KIAlwNzUwMC0+ZmlybXdhcmUgPSAiZHZiLXVzYi1wNzUwMC5mdyI7CiAJcDc1MDAtPmRldmljZXNbMF0gPSBkNzUwMDsKLQlwNzUwMC0+cmNfa2V5X21hcCA9IGlyX2NvZGVzX3Ric190YWJsZTsKLQlwNzUwMC0+cmNfa2V5X21hcF9zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc190YnNfdGFibGUpOworCXA3NTAwLT5yYy5sZWdhY3kucmNfa2V5X21hcCA9IGlyX2NvZGVzX3Ric190YWJsZTsKKwlwNzUwMC0+cmMubGVnYWN5LnJjX2tleV9tYXBfc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfdGJzX3RhYmxlKTsKIAlwNzUwMC0+YWRhcHRlci0+ZnJvbnRlbmRfYXR0YWNoID0gcHJvZl83NTAwX2Zyb250ZW5kX2F0dGFjaDsKIAogCWlmICgwID09IGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgJmR3MjEwMl9wcm9wZXJ0aWVzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9ncDhwc2stZmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZ3A4cHNrLWZlLmMKaW5kZXggN2E3ZjFiMi4uZGJkYjUzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9ncDhwc2stZmUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2dwOHBzay1mZS5jCkBAIC0zNDksNyArMzQ5LDcgQEAKIAkJCSAqIEZFX0NBTl9RQU1fMTYgaXMgZm9yIGNvbXBhdGliaWxpdHkKIAkJCSAqIChNeXRoIGluY29ycmVjdGx5IGRldGVjdHMgVHVyYm8tUVBTSyBhcyBwbGFpbiBRQU0tMTYpCiAJCQkgKi8KLQkJCUZFX0NBTl9RUFNLIHwgRkVfQ0FOX1FBTV8xNgorCQkJRkVfQ0FOX1FQU0sgfCBGRV9DQU5fUUFNXzE2IHwgRkVfQ0FOX1RVUkJPX0ZFQwogCX0sCiAKIAkucmVsZWFzZSA9IGdwOHBza19mZV9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9tOTIweC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9tOTIweC5jCmluZGV4IGMyMTFmZWYuLmJkZWYxYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvbTkyMHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmMKQEAgLTY5LDcgKzY5LDcgQEAKIAlpbnQgYWRhcF9lbmFibGVkW005MjA2X01BWF9BREFQVEVSU10gPSB7IDAgfTsKIAogCS8qIFJlbW90ZSBjb250cm9sbGVyIGluaXQuICovCi0JaWYgKGQtPnByb3BzLnJjX3F1ZXJ5KSB7CisJaWYgKGQtPnByb3BzLnJjLmxlZ2FjeS5yY19xdWVyeSkgewogCQlkZWIoIkluaXRpYWxpc2luZyByZW1vdGUgY29udHJvbFxuIik7CiAJCXdoaWxlIChyY19zZXEtPmFkZHJlc3MpIHsKIAkJCWlmICgocmV0ID0gbTkyMHhfd3JpdGUoZC0+dWRldiwgTTkyMDZfQ09SRSwKQEAgLTE0Miw5ICsxNDIsOSBAQAogCWlmICgocmV0ID0gbTkyMHhfcmVhZChkLT51ZGV2LCBNOTIwNl9DT1JFLCAweDAsIE05MjA2X1JDX0tFWSwgcmNfc3RhdGUgKyAxLCAxKSkgIT0gMCkKIAkJZ290byB1bmxvY2s7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmNfa2V5X21hcF9zaXplOyBpKyspCi0JCWlmIChyYzVfZGF0YSgmZC0+cHJvcHMucmNfa2V5X21hcFtpXSkgPT0gcmNfc3RhdGVbMV0pIHsKLQkJCSpldmVudCA9IGQtPnByb3BzLnJjX2tleV9tYXBbaV0uZXZlbnQ7CisJZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19rZXlfbWFwX3NpemU7IGkrKykKKwkJaWYgKHJjNV9kYXRhKCZkLT5wcm9wcy5yYy5sZWdhY3kucmNfa2V5X21hcFtpXSkgPT0gcmNfc3RhdGVbMV0pIHsKKwkJCSpldmVudCA9IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19rZXlfbWFwW2ldLmtleWNvZGU7CiAKIAkJCXN3aXRjaChyY19zdGF0ZVswXSkgewogCQkJY2FzZSAweDgwOgpAQCAtNTg5LDcgKzU4OSw3IEBACiB9OwogCiAvKiBpciBrZXltYXBzICovCi1zdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IGlyX2NvZGVzX21lZ2Fza3lfdGFibGUgW10gPSB7CitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX21lZ2Fza3lfdGFibGVbXSA9IHsKIAl7IDB4MDAxMiwgS0VZX1BPV0VSIH0sCiAJeyAweDAwMWUsIEtFWV9DWUNMRVdJTkRPV1MgfSwgLyogbWluL21heCAqLwogCXsgMHgwMDAyLCBLRVlfQ0hBTk5FTFVQIH0sCkBAIC02MDgsNyArNjA4LDcgQEAKIAl7IDB4MDAwZSwgS0VZX0NPRkZFRSB9LCAvKiAiTVRTIiAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBpcl9jb2Rlc190dndhbGtlcnR3aW5fdGFibGUgW10gPSB7CitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3R2d2Fsa2VydHdpbl90YWJsZVtdID0gewogCXsgMHgwMDAxLCBLRVlfWk9PTSB9LCAvKiBGdWxsIFNjcmVlbiAqLwogCXsgMHgwMDAyLCBLRVlfQ0FNRVJBIH0sIC8qIHNuYXBzaG90ICovCiAJeyAweDAwMDMsIEtFWV9NVVRFIH0sCkBAIC02MjgsNyArNjI4LDcgQEAKIAl7IDB4MDAxZSwgS0VZX1ZPTFVNRVVQIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IGlyX2NvZGVzX3Bpbm5hY2xlMzEwZV90YWJsZVtdID0geworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19waW5uYWNsZTMxMGVfdGFibGVbXSA9IHsKIAl7IDB4MTYsIEtFWV9QT1dFUiB9LAogCXsgMHgxNywgS0VZX0ZBVk9SSVRFUyB9LAogCXsgMHgwZiwgS0VZX1RFWFQgfSwKQEAgLTc4NCwxMCArNzg0LDEyIEBACiAJLmZpcm13YXJlID0gImR2Yi11c2ItbWVnYXNreS0wMi5mdyIsCiAJLmRvd25sb2FkX2Zpcm13YXJlID0gbTkyMHhfZmlybXdhcmVfZG93bmxvYWQsCiAKLQkucmNfaW50ZXJ2YWwgICAgICA9IDEwMCwKLQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX21lZ2Fza3lfdGFibGUsCi0JLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX21lZ2Fza3lfdGFibGUpLAotCS5yY19xdWVyeSAgICAgICAgID0gbTkyMHhfcmNfcXVlcnksCisJLnJjLmxlZ2FjeSA9IHsKKwkJLnJjX2ludGVydmFsICAgICAgPSAxMDAsCisJCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfbWVnYXNreV90YWJsZSwKKwkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX21lZ2Fza3lfdGFibGUpLAorCQkucmNfcXVlcnkgICAgICAgICA9IG05MjB4X3JjX3F1ZXJ5LAorCX0sCiAKIAkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgbTkyMHhfc3RhdGUpLAogCkBAIC04ODUsMTAgKzg4NywxMiBAQAogCS5maXJtd2FyZSA9ICJkdmItdXNiLXR2d2Fsa2VydC5mdyIsCiAJLmRvd25sb2FkX2Zpcm13YXJlID0gbTkyMHhfZmlybXdhcmVfZG93bmxvYWQsCiAKLQkucmNfaW50ZXJ2YWwgICAgICA9IDEwMCwKLQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX3R2d2Fsa2VydHdpbl90YWJsZSwKLQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoaXJfY29kZXNfdHZ3YWxrZXJ0d2luX3RhYmxlKSwKLQkucmNfcXVlcnkgICAgICAgICA9IG05MjB4X3JjX3F1ZXJ5LAorCS5yYy5sZWdhY3kgPSB7CisJCS5yY19pbnRlcnZhbCAgICAgID0gMTAwLAorCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX3R2d2Fsa2VydHdpbl90YWJsZSwKKwkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX3R2d2Fsa2VydHdpbl90YWJsZSksCisJCS5yY19xdWVyeSAgICAgICAgID0gbTkyMHhfcmNfcXVlcnksCisJfSwKIAogCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCBtOTIweF9zdGF0ZSksCiAKQEAgLTk5MiwxMCArOTk2LDEyIEBACiAJLnVzYl9jdHJsID0gREVWSUNFX1NQRUNJRklDLAogCS5kb3dubG9hZF9maXJtd2FyZSA9IE5VTEwsCiAKLQkucmNfaW50ZXJ2YWwgICAgICA9IDEwMCwKLQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX3Bpbm5hY2xlMzEwZV90YWJsZSwKLQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoaXJfY29kZXNfcGlubmFjbGUzMTBlX3RhYmxlKSwKLQkucmNfcXVlcnkgICAgICAgICA9IG05MjB4X3JjX3F1ZXJ5LAorCS5yYy5sZWdhY3kgPSB7CisJCS5yY19pbnRlcnZhbCAgICAgID0gMTAwLAorCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX3Bpbm5hY2xlMzEwZV90YWJsZSwKKwkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX3Bpbm5hY2xlMzEwZV90YWJsZSksCisJCS5yY19xdWVyeSAgICAgICAgID0gbTkyMHhfcmNfcXVlcnksCisJfSwKIAogCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCBtOTIweF9zdGF0ZSksCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2Ivbm92YS10LXVzYjIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2Ivbm92YS10LXVzYjIuYwppbmRleCBkMTk1YTU4Li4xODFmMzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL25vdmEtdC11c2IyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9ub3ZhLXQtdXNiMi5jCkBAIC0yMSw3ICsyMSw3IEBACiAjZGVmaW5lIGRlYl9lZShhcmdzLi4uKSBkcHJpbnRrKGRlYnVnLDB4MDIsYXJncykKIAogLyogSGF1cHBhdWdlIE5PVkEtVCBVU0IyIGtleXMgKi8KLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgaXJfY29kZXNfaGF1cHBfdGFibGUgW10gPSB7CitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2hhdXBwX3RhYmxlW10gPSB7CiAJeyAweDFlMDAsIEtFWV8wIH0sCiAJeyAweDFlMDEsIEtFWV8xIH0sCiAJeyAweDFlMDIsIEtFWV8yIH0sCkBAIC05OCw3ICs5OCw3IEBACiAJCQkJCWRlYl9yYygiYzogJXgsIGQ6ICV4XG4iLCByYzVfZGF0YSgmaXJfY29kZXNfaGF1cHBfdGFibGVbaV0pLAogCQkJCQkJCQkgcmM1X2N1c3RvbSgmaXJfY29kZXNfaGF1cHBfdGFibGVbaV0pKTsKIAotCQkJCQkqZXZlbnQgPSBpcl9jb2Rlc19oYXVwcF90YWJsZVtpXS5ldmVudDsKKwkJCQkJKmV2ZW50ID0gaXJfY29kZXNfaGF1cHBfdGFibGVbaV0ua2V5Y29kZTsKIAkJCQkJKnN0YXRlID0gUkVNT1RFX0tFWV9QUkVTU0VEOwogCQkJCQlpZiAoc3QtPm9sZF90b2dnbGUgPT0gdG9nZ2xlKSB7CiAJCQkJCQlpZiAoc3QtPmxhc3RfcmVwZWF0X2NvdW50KysgPCAyKQpAQCAtMTk1LDEwICsxOTUsMTIgQEAKIAkucG93ZXJfY3RybCAgICAgICA9IGRpYnVzYjJfMF9wb3dlcl9jdHJsLAogCS5yZWFkX21hY19hZGRyZXNzID0gbm92YV90X3JlYWRfbWFjX2FkZHJlc3MsCiAKLQkucmNfaW50ZXJ2YWwgICAgICA9IDEwMCwKLQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2hhdXBwX3RhYmxlLAotCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShpcl9jb2Rlc19oYXVwcF90YWJsZSksCi0JLnJjX3F1ZXJ5ICAgICAgICAgPSBub3ZhX3RfcmNfcXVlcnksCisJLnJjLmxlZ2FjeSA9IHsKKwkJLnJjX2ludGVydmFsICAgICAgPSAxMDAsCisJCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfaGF1cHBfdGFibGUsCisJCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShpcl9jb2Rlc19oYXVwcF90YWJsZSksCisJCS5yY19xdWVyeSAgICAgICAgID0gbm92YV90X3JjX3F1ZXJ5LAorCX0sCiAKIAkuaTJjX2FsZ28gICAgICAgICA9ICZkaWJ1c2JfaTJjX2FsZ28sCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2Ivb3BlcmExLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL29wZXJhMS5jCmluZGV4IGRmYjgxZmYuLjZiMjJlYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2Ivb3BlcmExLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9vcGVyYTEuYwpAQCAtMzMxLDcgKzMzMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgaXJfY29kZXNfb3BlcmExX3RhYmxlW10gPSB7CitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX29wZXJhMV90YWJsZVtdID0gewogCXsweDVmYTAsIEtFWV8xfSwKIAl7MHg1MWFmLCBLRVlfMn0sCiAJezB4NWRhMiwgS0VZXzN9LApAQCAtNDA3LDkgKzQwNyw5IEBACiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlyX2NvZGVzX29wZXJhMV90YWJsZSk7IGkrKykgewogCQkJaWYgKHJjNV9zY2FuKCZpcl9jb2Rlc19vcGVyYTFfdGFibGVbaV0pID09IChzZW5kX2tleSAmIDB4ZmZmZikpIHsKIAkJCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7Ci0JCQkJKmV2ZW50ID0gaXJfY29kZXNfb3BlcmExX3RhYmxlW2ldLmV2ZW50OworCQkJCSpldmVudCA9IGlyX2NvZGVzX29wZXJhMV90YWJsZVtpXS5rZXljb2RlOwogCQkJCW9wc3QtPmxhc3Rfa2V5X3ByZXNzZWQgPQotCQkJCQlpcl9jb2Rlc19vcGVyYTFfdGFibGVbaV0uZXZlbnQ7CisJCQkJCWlyX2NvZGVzX29wZXJhMV90YWJsZVtpXS5rZXljb2RlOwogCQkJCWJyZWFrOwogCQkJfQogCQkJb3BzdC0+bGFzdF9rZXlfcHJlc3NlZCA9IDA7CkBAIC00OTgsMTAgKzQ5OCwxMiBAQAogCS5wb3dlcl9jdHJsID0gb3BlcmExX3Bvd2VyX2N0cmwsCiAJLmkyY19hbGdvID0gJm9wZXJhMV9pMmNfYWxnbywKIAotCS5yY19rZXlfbWFwID0gaXJfY29kZXNfb3BlcmExX3RhYmxlLAotCS5yY19rZXlfbWFwX3NpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX29wZXJhMV90YWJsZSksCi0JLnJjX2ludGVydmFsID0gMjAwLAotCS5yY19xdWVyeSA9IG9wZXJhMV9yY19xdWVyeSwKKwkucmMubGVnYWN5ID0geworCQkucmNfa2V5X21hcCA9IGlyX2NvZGVzX29wZXJhMV90YWJsZSwKKwkJLnJjX2tleV9tYXBfc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfb3BlcmExX3RhYmxlKSwKKwkJLnJjX2ludGVydmFsID0gMjAwLAorCQkucmNfcXVlcnkgPSBvcGVyYTFfcmNfcXVlcnksCisJfSwKIAkucmVhZF9tYWNfYWRkcmVzcyA9IG9wZXJhMV9yZWFkX21hY19hZGRyZXNzLAogCS5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCA9IDB4MDAsCiAJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwMnguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDJ4LmMKaW5kZXggNGQzMzI0NS4uNWM5ZjMyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwMnguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzAyeC5jCkBAIC0xNzQsNyArMTc0LDcgQEAKIH0KIAogLyoga2V5cyBmb3IgdGhlIGVuY2xvc2VkIHJlbW90ZSBjb250cm9sICovCi1zdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IGlyX2NvZGVzX3ZwNzAyeF90YWJsZVtdID0geworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc192cDcwMnhfdGFibGVbXSA9IHsKIAl7IDB4MDAwMSwgS0VZXzEgfSwKIAl7IDB4MDAwMiwgS0VZXzIgfSwKIH07CkBAIC0yMDAsNyArMjAwLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpcl9jb2Rlc192cDcwMnhfdGFibGUpOyBpKyspCiAJCWlmIChyYzVfY3VzdG9tKCZpcl9jb2Rlc192cDcwMnhfdGFibGVbaV0pID09IGtleVsxXSkgewogCQkJKnN0YXRlID0gUkVNT1RFX0tFWV9QUkVTU0VEOwotCQkJKmV2ZW50ID0gaXJfY29kZXNfdnA3MDJ4X3RhYmxlW2ldLmV2ZW50OworCQkJKmV2ZW50ID0gaXJfY29kZXNfdnA3MDJ4X3RhYmxlW2ldLmtleWNvZGU7CiAJCQlicmVhazsKIAkJfQogCXJldHVybiAwOwpAQCAtMjgzLDEwICsyODMsMTIgQEAKIAl9LAogCS5yZWFkX21hY19hZGRyZXNzID0gdnA3MDJ4X3JlYWRfbWFjX2FkZHIsCiAKLQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX3ZwNzAyeF90YWJsZSwKLQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoaXJfY29kZXNfdnA3MDJ4X3RhYmxlKSwKLQkucmNfaW50ZXJ2YWwgICAgICA9IDQwMCwKLQkucmNfcXVlcnkgICAgICAgICA9IHZwNzAyeF9yY19xdWVyeSwKKwkucmMubGVnYWN5ID0geworCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX3ZwNzAyeF90YWJsZSwKKwkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX3ZwNzAyeF90YWJsZSksCisJCS5yY19pbnRlcnZhbCAgICAgID0gNDAwLAorCQkucmNfcXVlcnkgICAgICAgICA9IHZwNzAyeF9yY19xdWVyeSwKKwl9LAogCiAJLm51bV9kZXZpY2VfZGVzY3MgPSAxLAogCS5kZXZpY2VzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwNDUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDQ1LmMKaW5kZXggMDM2ODkzZi4uZjEzNzkxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwNDUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzA0NS5jCkBAIC05OSw3ICs5OSw3IEBACiAKIC8qIFRoZSBrZXltYXBwaW5nIHN0cnVjdC4gU29tZWhvdyB0aGlzIHNob3VsZCBiZSBsb2FkZWQgdG8gdGhlIGRyaXZlciwgYnV0CiAgKiBjdXJyZW50bHkgaXQgaXMgaGFyZGNvZGVkLiAqLwotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBpcl9jb2Rlc192cDcwNDVfdGFibGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfdnA3MDQ1X3RhYmxlW10gPSB7CiAJeyAweDAwMTYsIEtFWV9QT1dFUiB9LAogCXsgMHgwMDEwLCBLRVlfTVVURSB9LAogCXsgMHgwMDAzLCBLRVlfMSB9LApAQCAtMTY4LDcgKzE2OCw3IEBACiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXJfY29kZXNfdnA3MDQ1X3RhYmxlKTsgaSsrKQogCQlpZiAocmM1X2RhdGEoJmlyX2NvZGVzX3ZwNzA0NV90YWJsZVtpXSkgPT0ga2V5KSB7CiAJCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7Ci0JCQkqZXZlbnQgPSBpcl9jb2Rlc192cDcwNDVfdGFibGVbaV0uZXZlbnQ7CisJCQkqZXZlbnQgPSBpcl9jb2Rlc192cDcwNDVfdGFibGVbaV0ua2V5Y29kZTsKIAkJCWJyZWFrOwogCQl9CiAJcmV0dXJuIDA7CkBAIC0yNTksMTAgKzI1OSwxMiBAQAogCS5wb3dlcl9jdHJsICAgICAgID0gdnA3MDQ1X3Bvd2VyX2N0cmwsCiAJLnJlYWRfbWFjX2FkZHJlc3MgPSB2cDcwNDVfcmVhZF9tYWNfYWRkciwKIAotCS5yY19pbnRlcnZhbCAgICAgID0gNDAwLAotCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfdnA3MDQ1X3RhYmxlLAotCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShpcl9jb2Rlc192cDcwNDVfdGFibGUpLAotCS5yY19xdWVyeSAgICAgICAgID0gdnA3MDQ1X3JjX3F1ZXJ5LAorCS5yYy5sZWdhY3kgPSB7CisJCS5yY19pbnRlcnZhbCAgICAgID0gNDAwLAorCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX3ZwNzA0NV90YWJsZSwKKwkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX3ZwNzA0NV90YWJsZSksCisJCS5yY19xdWVyeSAgICAgICAgID0gdnA3MDQ1X3JjX3F1ZXJ5LAorCX0sCiAKIAkubnVtX2RldmljZV9kZXNjcyA9IDIsCiAJLmRldmljZXMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCmluZGV4IGNkN2Y5YjcuLjUxZDU3OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCkBAIC01ODQsNiArNTg0LDcgQEAKIGNvbmZpZyBEVkJfTEdTOEdYWAogCXRyaXN0YXRlICJMZWdlbmQgU2lsaWNvbiBMR1M4OTEzL0xHUzhHTDUvTEdTOEdYWCBETUItVEggZGVtb2R1bGF0b3IiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlzZWxlY3QgRldfTE9BREVSCiAJZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKIAloZWxwCiAJICBBIERNQi1USCB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2FmOTAxMy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2FmOTAxMy5jCmluZGV4IDEyZTAxOGIuLmRhYzkxN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hZjkwMTMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYWY5MDEzLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogRFZCIFVTQiBMaW51eCBkcml2ZXIgZm9yIEFmYXRlY2ggQUY5MDE1IERWQi1UIFVTQjIuMCByZWNlaXZlcgorICogQWZhdGVjaCBBRjkwMTMgZGVtb2R1bGF0b3IgZHJpdmVyCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPgogICoKQEAgLTc2MSw2ICs3NjEsMTAgQEAKIAogCXN0YXRlLT5mcmVxdWVuY3kgPSBwYXJhbXMtPmZyZXF1ZW5jeTsKIAorCS8qIHByb2dyYW0gdHVuZXIgKi8KKwlpZiAoZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcykKKwkJZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyhmZSwgcGFyYW1zKTsKKwogCS8qIHByb2dyYW0gQ0ZPRSBjb2VmZmljaWVudHMgKi8KIAlyZXQgPSBhZjkwMTNfc2V0X2NvZWZmKHN0YXRlLCBwYXJhbXMtPnUub2ZkbS5iYW5kd2lkdGgpOwogCWlmIChyZXQpCkBAIC03OTEsMTAgKzc5NSw2IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJvcjsKIAotCS8qIHByb2dyYW0gdHVuZXIgKi8KLQlpZiAoZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcykKLQkJZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyhmZSwgcGFyYW1zKTsKLQogCS8qIHByb2dyYW0gVFBTIGFuZCBiYW5kd2lkdGgsIGNoZWNrIGlmIGF1dG8gbW9kZSBuZWVkZWQgKi8KIAlyZXQgPSBhZjkwMTNfc2V0X29mZG1fcGFyYW1zKHN0YXRlLCAmcGFyYW1zLT51Lm9mZG0sICZhdXRvX21vZGUpOwogCWlmIChyZXQpCkBAIC0xMTg0LDIxICsxMTg0LDQzIEBACiAJdTggdG1wOwogCSpzdGF0dXMgPSAwOwogCi0JLyogVFBTIGxvY2sgKi8KLQlyZXQgPSBhZjkwMTNfcmVhZF9yZWdfYml0cyhzdGF0ZSwgMHhkMzMwLCAzLCAxLCAmdG1wKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycm9yOwotCWlmICh0bXApCi0JCSpzdGF0dXMgfD0gRkVfSEFTX1ZJVEVSQkkgfCBGRV9IQVNfQ0FSUklFUiB8IEZFX0hBU19TSUdOQUw7Ci0KIAkvKiBNUEVHMiBsb2NrICovCiAJcmV0ID0gYWY5MDEzX3JlYWRfcmVnX2JpdHMoc3RhdGUsIDB4ZDUwNywgNiwgMSwgJnRtcCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcjsKIAlpZiAodG1wKQotCQkqc3RhdHVzIHw9IEZFX0hBU19TWU5DIHwgRkVfSEFTX0xPQ0s7CisJCSpzdGF0dXMgfD0gRkVfSEFTX1NJR05BTCB8IEZFX0hBU19DQVJSSUVSIHwgRkVfSEFTX1ZJVEVSQkkgfAorCQkJRkVfSEFTX1NZTkMgfCBGRV9IQVNfTE9DSzsKIAotCWlmICghKCpzdGF0dXMgJiBGRV9IQVNfU0lHTkFMKSkgeworCWlmICghKnN0YXR1cykgeworCQkvKiBUUFMgbG9jayAqLworCQlyZXQgPSBhZjkwMTNfcmVhZF9yZWdfYml0cyhzdGF0ZSwgMHhkMzMwLCAzLCAxLCAmdG1wKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJCWlmICh0bXApCisJCQkqc3RhdHVzIHw9IEZFX0hBU19TSUdOQUwgfCBGRV9IQVNfQ0FSUklFUiB8CisJCQkJRkVfSEFTX1ZJVEVSQkk7CisJfQorCisJaWYgKCEqc3RhdHVzKSB7CisJCS8qIENGTyBsb2NrICovCisJCXJldCA9IGFmOTAxM19yZWFkX3JlZ19iaXRzKHN0YXRlLCAweGQzMzMsIDcsIDEsICZ0bXApOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwkJaWYgKHRtcCkKKwkJCSpzdGF0dXMgfD0gRkVfSEFTX1NJR05BTCB8IEZFX0hBU19DQVJSSUVSOworCX0KKworCWlmICghKnN0YXR1cykgeworCQkvKiBTRk9FIGxvY2sgKi8KKwkJcmV0ID0gYWY5MDEzX3JlYWRfcmVnX2JpdHMoc3RhdGUsIDB4ZDMzNCwgNiwgMSwgJnRtcCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCQlpZiAodG1wKQorCQkJKnN0YXR1cyB8PSBGRV9IQVNfU0lHTkFMIHwgRkVfSEFTX0NBUlJJRVI7CisJfQorCisJaWYgKCEqc3RhdHVzKSB7CiAJCS8qIEFHQyBsb2NrICovCiAJCXJldCA9IGFmOTAxM19yZWFkX3JlZ19iaXRzKHN0YXRlLCAweGQxYTAsIDYsIDEsICZ0bXApOwogCQlpZiAocmV0KQpAQCAtMTIwNywyNCArMTIyOSw2IEBACiAJCQkqc3RhdHVzIHw9IEZFX0hBU19TSUdOQUw7CiAJfQogCi0JaWYgKCEoKnN0YXR1cyAmIEZFX0hBU19DQVJSSUVSKSkgewotCQkvKiBDRk8gbG9jayAqLwotCQlyZXQgPSBhZjkwMTNfcmVhZF9yZWdfYml0cyhzdGF0ZSwgMHhkMzMzLCA3LCAxLCAmdG1wKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZXJyb3I7Ci0JCWlmICh0bXApCi0JCQkqc3RhdHVzIHw9IEZFX0hBU19DQVJSSUVSOwotCX0KLQotCWlmICghKCpzdGF0dXMgJiBGRV9IQVNfQ0FSUklFUikpIHsKLQkJLyogU0ZPRSBsb2NrICovCi0JCXJldCA9IGFmOTAxM19yZWFkX3JlZ19iaXRzKHN0YXRlLCAweGQzMzQsIDYsIDEsICZ0bXApOwotCQlpZiAocmV0KQotCQkJZ290byBlcnJvcjsKLQkJaWYgKHRtcCkKLQkJCSpzdGF0dXMgfD0gRkVfSEFTX0NBUlJJRVI7Ci0JfQotCiAJcmV0ID0gYWY5MDEzX3VwZGF0ZV9zdGF0aXN0aWNzKGZlKTsKIAogZXJyb3I6CkBAIC0xNTc0LDcgKzE1NzgsNyBAQAogewogCWludCByZXQ7CiAJc3RydWN0IGFmOTAxM19zdGF0ZSAqc3RhdGUgPSBOVUxMOwotCXU4IGJ1ZlszXSwgaTsKKwl1OCBidWZbNF0sIGk7CiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLwogCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFmOTAxM19zdGF0ZSksIEdGUF9LRVJORUwpOwpAQCAtMTYwNywxMiArMTYxMSwxMiBAQAogCX0KIAogCS8qIGZpcm13YXJlIHZlcnNpb24gKi8KLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQlyZXQgPSBhZjkwMTNfcmVhZF9yZWcoc3RhdGUsIDB4NTEwMyArIGksICZidWZbaV0pOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJvcjsKIAl9Ci0JaW5mbygiZmlybXdhcmUgdmVyc2lvbjolZC4lZC4lZCIsIGJ1ZlswXSwgYnVmWzFdLCBidWZbMl0pOworCWluZm8oImZpcm13YXJlIHZlcnNpb246JWQuJWQuJWQuJWQiLCBidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10pOwogCiAJLyogc2V0dGluZ3MgZm9yIG1wMmlmICovCiAJaWYgKHN0YXRlLT5jb25maWcub3V0cHV0X21vZGUgPT0gQUY5MDEzX09VVFBVVF9NT0RFX1VTQikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2FmOTAxMy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2FmOTAxMy5oCmluZGV4IGU5MGZhOTIuLjcyYzcxYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hZjkwMTMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYWY5MDEzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogRFZCIFVTQiBMaW51eCBkcml2ZXIgZm9yIEFmYXRlY2ggQUY5MDE1IERWQi1UIFVTQjIuMCByZWNlaXZlcgorICogQWZhdGVjaCBBRjkwMTMgZGVtb2R1bGF0b3IgZHJpdmVyCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hZjkwMTNfcHJpdi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2FmOTAxM19wcml2LmgKaW5kZXggMTYzZTI1MS4uMGZkNDJiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2FmOTAxM19wcml2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2FmOTAxM19wcml2LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogRFZCIFVTQiBMaW51eCBkcml2ZXIgZm9yIEFmYXRlY2ggQUY5MDE1IERWQi1UIFVTQjIuMCByZWNlaXZlcgorICogQWZhdGVjaCBBRjkwMTMgZGVtb2R1bGF0b3IgZHJpdmVyCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPgogICoKQEAgLTEzMiw2ICsxMzIsOCBAQAogCXsgMHhkNzQwLCAyLCAxLCAweDAwIH0sCiAJeyAweGQ3NDAsIDMsIDEsIDB4MDEgfSwKIAl7IDB4ZDNjMSwgNCwgMSwgMHgwMSB9LAorCXsgMHg5MTI0LCAwLCA4LCAweDU4IH0sCisJeyAweDkxMjUsIDAsIDIsIDB4MDIgfSwKIAl7IDB4ZDNhMiwgMCwgOCwgMHgwMCB9LAogCXsgMHhkM2EzLCAwLCA4LCAweDA0IH0sCiAJeyAweGQzMDUsIDAsIDgsIDB4MzIgfSwKQEAgLTE0Myw3ICsxNDUsNyBAQAogCXsgMHg5MTFiLCAwLCAxLCAweDAxIH0sCiAJeyAweDliY2UsIDAsIDQsIDB4MDIgfSwKIAl7IDB4OTExNiwgMCwgMSwgMHgwMSB9LAotCXsgMHg5YmQxLCAwLCAxLCAweDAxIH0sCisJeyAweDkxMjIsIDAsIDgsIDB4ZDAgfSwKIAl7IDB4ZDJlMCwgMCwgOCwgMHhkMCB9LAogCXsgMHhkMmU5LCAwLCA0LCAweDBkIH0sCiAJeyAweGQzOGMsIDAsIDgsIDB4ZmMgfSwKQEAgLTE2NSw3ICsxNjcsNiBAQAogCXsgMHhkMDgxLCA0LCA0LCAweDA5IH0sCiAJeyAweGQwOTgsIDQsIDQsIDB4MGYgfSwKIAl7IDB4ZDA5OCwgMCwgNCwgMHgwMyB9LAotCXsgMHhkYmMwLCAzLCAxLCAweDAxIH0sCiAJeyAweGRiYzAsIDQsIDEsIDB4MDEgfSwKIAl7IDB4ZGJjNywgMCwgOCwgMHgwOCB9LAogCXsgMHhkYmM4LCA0LCA0LCAweDAwIH0sCkBAIC0xNzksNiArMTgwLDcgQEAKIAl7IDB4ZDBmMCwgMCwgNywgMHgxYSB9LAogCXsgMHhkMGYxLCA0LCAxLCAweDAxIH0sCiAJeyAweGQwZjIsIDAsIDgsIDB4MGMgfSwKKwl7IDB4ZDEwMSwgNSwgMywgMHgwNiB9LAogCXsgMHhkMTAzLCAwLCA0LCAweDA4IH0sCiAJeyAweGQwZjgsIDAsIDcsIDB4MjAgfSwKIAl7IDB4ZDExMSwgNSwgMSwgMHgwMCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDBtYi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDBtYi5jCmluZGV4IGFkNGM4Y2YuLmU4MGM1OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwbWIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1iLmMKQEAgLTM4LDExICszOCwxMCBAQAogI2RlZmluZSBEUklWRVJfREVTQyAiRGlCY29tIDMwMDBNLUIgRFZCLVQgZGVtb2R1bGF0b3IiCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlBhdHJpY2sgQm9ldHRjaGVyLCBwYXRyaWNrLmJvZXR0Y2hlckBkZXN5LmRlIgogCi0jaWZkZWYgQ09ORklHX0RWQl9ESUJDT01fREVCVUcKIHN0YXRpYyBpbnQgZGVidWc7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAic2V0IGRlYnVnZ2luZyBsZXZlbCAoMT1pbmZvLDI9eGZlciw0PXNldGZlLDg9Z2V0ZmUgKHwtYWJsZSkpLiIpOwotI2VuZGlmCisKICNkZWZpbmUgZGViX2luZm8oYXJncy4uLikgZHByaW50aygweDAxLGFyZ3MpCiAjZGVmaW5lIGRlYl9pMmMoYXJncy4uLikgIGRwcmludGsoMHgwMixhcmdzKQogI2RlZmluZSBkZWJfc3JjaChhcmdzLi4uKSBkcHJpbnRrKDB4MDQsYXJncykKQEAgLTUxLDEyICs1MCw2IEBACiAjZGVmaW5lIGRlYl9zZXRmKGFyZ3MuLi4pIGRwcmludGsoMHgwNCxhcmdzKQogI2RlZmluZSBkZWJfZ2V0ZihhcmdzLi4uKSBkcHJpbnRrKDB4MDgsYXJncykKIAotI2lmZGVmIENPTkZJR19EVkJfRElCQ09NX0RFQlVHCi1zdGF0aWMgaW50IGRlYnVnOwotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInNldCBkZWJ1Z2dpbmcgbGV2ZWwgKDE9aW5mbywyPWkyYyw0PXNyY2ggKHwtYWJsZSkpLiIpOwotI2VuZGlmCi0KIHN0YXRpYyBpbnQgZGliMzAwMF9yZWFkX3JlZyhzdHJ1Y3QgZGliMzAwMF9zdGF0ZSAqc3RhdGUsIHUxNiByZWcpCiB7CiAJdTggd2JbXSA9IHsgKChyZWcgPj4gOCkgfCAweDgwKSAmIDB4ZmYsIHJlZyAmIDB4ZmYgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwbWJfcHJpdi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDBtYl9wcml2LmgKaW5kZXggMWExMjc0Ny4uMTZjNTI2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDBtYl9wcml2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDBtYl9wcml2LmgKQEAgLTM3LDEyICszNyw4IEBACiAKIC8qIGRlYnVnICovCiAKLSNpZmRlZiBDT05GSUdfRFZCX0RJQkNPTV9ERUJVRwogI2RlZmluZSBkcHJpbnRrKGxldmVsLGFyZ3MuLi4pIFwKICAgICBkbyB7IGlmICgoZGVidWcgJiBsZXZlbCkpIHsgcHJpbnRrKGFyZ3MpOyB9IH0gd2hpbGUgKDApCi0jZWxzZQotI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIGRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZgogCiAvKiBtYXNrIGZvciBlbmFibGluZyBhIHNwZWNpZmljIHBpZCBmb3IgdGhlIHBpZF9maWx0ZXIgKi8KICNkZWZpbmUgRElCMzAwMF9BQ1RJVkFURV9QSURfRklMVEVSSU5HCSgweDIwMDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1jLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1jLmMKaW5kZXggYWZhZDI1Mi4uMDg4ZTdmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDBtYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwbWMuYwpAQCAtODIyLDcgKzgyMiw3IEBACiAKIAlkbWNzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkaWIzMDAwbWNfc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZG1jc3QgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiAtRU5PTUVNOwogCiAJZG1jc3QtPmkyY19hZGFwID0gaTJjOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMDUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMwNS5jCmluZGV4IGQ2OWM3NzUuLjMyNzI4ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMwNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMwNS5jCkBAIC0xLDcgKzEsOSBAQAogLyoKLSAqICAgIFN1cHBvcnQgZm9yIExHRFQzMzA1IC0gVlNCL1FBTQorICogICAgU3VwcG9ydCBmb3IgTEcgRWxlY3Ryb25pY3MgTEdEVDMzMDQgYW5kIExHRFQzMzA1IC0gVlNCL1FBTQogICoKLSAqICAgIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBNaWNoYWVsIEtydWZreSA8bWtydWZreUBsaW51eHR2Lm9yZz4KKyAqICAgIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCBNaWNoYWVsIEtydWZreSA8bWtydWZreUBsaW51eHR2Lm9yZz4KKyAqCisgKiAgICBMR0RUMzMwNCBzdXBwb3J0IGJ5IEphcm9kIFdpbHNvbiA8amFyb2RAcmVkaGF0LmNvbT4KICAqCiAgKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTY1LDYgKzY3LDggQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKKy8qIEZJWE1FOiB2ZXJpZnkgJiBkb2N1bWVudCB0aGUgTEdEVDMzMDQgcmVnaXN0ZXJzICovCisKICNkZWZpbmUgTEdEVDMzMDVfR0VOX0NUUkxfMSAgICAgICAgICAgICAgICAgICAweDAwMDAKICNkZWZpbmUgTEdEVDMzMDVfR0VOX0NUUkxfMiAgICAgICAgICAgICAgICAgICAweDAwMDEKICNkZWZpbmUgTEdEVDMzMDVfR0VOX0NUUkxfMyAgICAgICAgICAgICAgICAgICAweDAwMDIKQEAgLTM1OCw3ICszNjIsMTIgQEAKIAljYXNlIFFBTV8yNTY6CiAJCWFnY2RlbGF5ID0gMHgwNDZiOwogCQlyZmJ3ICAgICA9IDB4ODg4OTsKLQkJaWZidyAgICAgPSAweDg4ODg7CisJCS8qIEZJWE1FOiBpbnZlc3RpZ2F0ZSBvcHRpbWFsIGlmYncgJiByZmJ3IHZhbHVlcyBmb3IgdGhlCisJCSAqICAgICAgICBEVDMzMDQgYW5kIHJlLXdyaXRlIHRoaXMgc3dpdGNoLi5jYXNlIGJsb2NrICovCisJCWlmIChzdGF0ZS0+Y2ZnLT5kZW1vZF9jaGlwID09IExHRFQzMzA0KQorCQkJaWZidyA9IDB4NjY2NjsKKwkJZWxzZSAvKiAoc3RhdGUtPmNmZy0+ZGVtb2RfY2hpcCA9PSBMR0RUMzMwNSkgKi8KKwkJCWlmYncgPSAweDg4ODg7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDEwLDggKzQxOSwxOCBAQAogCWxnX2RiZygibG9ja2R0ZW4gPSAlZCwgYWNxZW4gPSAlZFxuIiwgbG9ja2R0ZW4sIGFjcWVuKTsKIAogCS8qIGNvbnRyb2wgYWdjIGZ1bmN0aW9uICovCi0JbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9BR0NfQ1RSTF80LCAweGUxIHwgbG9ja2R0ZW4gPDwgMSk7Ci0JbGdkdDMzMDVfc2V0X3JlZ19iaXQoc3RhdGUsIExHRFQzMzA1X0FHQ19DVFJMXzEsIDIsIGFjcWVuKTsKKwlzd2l0Y2ggKHN0YXRlLT5jZmctPmRlbW9kX2NoaXApIHsKKwljYXNlIExHRFQzMzA0OgorCQlsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIDB4MDMxNCwgMHhlMSB8IGxvY2tkdGVuIDw8IDEpOworCQlsZ2R0MzMwNV9zZXRfcmVnX2JpdChzdGF0ZSwgMHgwMzBlLCAyLCBhY3Flbik7CisJCWJyZWFrOworCWNhc2UgTEdEVDMzMDU6CisJCWxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfQUdDX0NUUkxfNCwgMHhlMSB8IGxvY2tkdGVuIDw8IDEpOworCQlsZ2R0MzMwNV9zZXRfcmVnX2JpdChzdGF0ZSwgTEdEVDMzMDVfQUdDX0NUUkxfMSwgMiwgYWNxZW4pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAlyZXR1cm4gbGdkdDMzMDVfcmZhZ2NfbG9vcChzdGF0ZSwgcGFyYW0pOwogfQpAQCAtNTc3LDYxICs1OTYsNzkgQEAKIAlzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJaW50IHJldDsKIAorCXN0YXRpYyBzdHJ1Y3QgbGdkdDMzMDVfcmVnIGxnZHQzMzA0X2luaXRfZGF0YVtdID0geworCQl7IC5yZWcgPSBMR0RUMzMwNV9HRU5fQ1RSTF8xLCAgICAgICAgICAgLnZhbCA9IDB4MDMsIH0sCisJCXsgLnJlZyA9IDB4MDAwZCwgICAgICAgICAgICAgICAgICAgICAgICAudmFsID0gMHgwMiwgfSwKKwkJeyAucmVnID0gMHgwMDBlLCAgICAgICAgICAgICAgICAgICAgICAgIC52YWwgPSAweDAyLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9ER1RMX0FHQ19SRUZfMSwgICAgICAgLnZhbCA9IDB4MzIsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0RHVExfQUdDX1JFRl8yLCAgICAgICAudmFsID0gMHhjNCwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfQ1JfQ1RSX0ZSRVFfMSwgICAgICAgIC52YWwgPSAweDAwLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9DUl9DVFJfRlJFUV8yLCAgICAgICAgLnZhbCA9IDB4MDAsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0NSX0NUUl9GUkVRXzMsICAgICAgICAudmFsID0gMHgwMCwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfQ1JfQ1RSX0ZSRVFfNCwgICAgICAgIC52YWwgPSAweDAwLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9DUl9DVFJMXzcsICAgICAgICAgICAgLnZhbCA9IDB4ZjksIH0sCisJCXsgLnJlZyA9IDB4MDExMiwgICAgICAgICAgICAgICAgICAgICAgICAudmFsID0gMHgxNywgfSwKKwkJeyAucmVnID0gMHgwMTEzLCAgICAgICAgICAgICAgICAgICAgICAgIC52YWwgPSAweDE1LCB9LAorCQl7IC5yZWcgPSAweDAxMTQsICAgICAgICAgICAgICAgICAgICAgICAgLnZhbCA9IDB4MTgsIH0sCisJCXsgLnJlZyA9IDB4MDExNSwgICAgICAgICAgICAgICAgICAgICAgICAudmFsID0gMHhmZiwgfSwKKwkJeyAucmVnID0gMHgwMTE2LCAgICAgICAgICAgICAgICAgICAgICAgIC52YWwgPSAweDNjLCB9LAorCQl7IC5yZWcgPSAweDAyMTQsICAgICAgICAgICAgICAgICAgICAgICAgLnZhbCA9IDB4NjcsIH0sCisJCXsgLnJlZyA9IDB4MDQyNCwgICAgICAgICAgICAgICAgICAgICAgICAudmFsID0gMHg4ZCwgfSwKKwkJeyAucmVnID0gMHgwNDI3LCAgICAgICAgICAgICAgICAgICAgICAgIC52YWwgPSAweDEyLCB9LAorCQl7IC5yZWcgPSAweDA0MjgsICAgICAgICAgICAgICAgICAgICAgICAgLnZhbCA9IDB4NGYsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0lGQldfMSwgICAgICAgICAgICAgICAudmFsID0gMHg4MCwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfSUZCV18yLCAgICAgICAgICAgICAgIC52YWwgPSAweDAwLCB9LAorCQl7IC5yZWcgPSAweDAzMGEsICAgICAgICAgICAgICAgICAgICAgICAgLnZhbCA9IDB4MDgsIH0sCisJCXsgLnJlZyA9IDB4MDMwYiwgICAgICAgICAgICAgICAgICAgICAgICAudmFsID0gMHg5YiwgfSwKKwkJeyAucmVnID0gMHgwMzBkLCAgICAgICAgICAgICAgICAgICAgICAgIC52YWwgPSAweDAwLCB9LAorCQl7IC5yZWcgPSAweDAzMGUsICAgICAgICAgICAgICAgICAgICAgICAgLnZhbCA9IDB4MWMsIH0sCisJCXsgLnJlZyA9IDB4MDMxNCwgICAgICAgICAgICAgICAgICAgICAgICAudmFsID0gMHhlMSwgfSwKKwkJeyAucmVnID0gMHgwMDBkLCAgICAgICAgICAgICAgICAgICAgICAgIC52YWwgPSAweDgyLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9UUF9DVFJMXzEsICAgICAgICAgICAgLnZhbCA9IDB4NWIsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X1RQX0NUUkxfMSwgICAgICAgICAgICAudmFsID0gMHg1YiwgfSwKKwl9OworCiAJc3RhdGljIHN0cnVjdCBsZ2R0MzMwNV9yZWcgbGdkdDMzMDVfaW5pdF9kYXRhW10gPSB7Ci0JCXsgLnJlZyA9IExHRFQzMzA1X0dFTl9DVFJMXzEsCi0JCSAgLnZhbCA9IDB4MDMsIH0sCi0JCXsgLnJlZyA9IExHRFQzMzA1X0dFTl9DVFJMXzIsCi0JCSAgLnZhbCA9IDB4YjAsIH0sCi0JCXsgLnJlZyA9IExHRFQzMzA1X0dFTl9DVFJMXzMsCi0JCSAgLnZhbCA9IDB4MDEsIH0sCi0JCXsgLnJlZyA9IExHRFQzMzA1X0dFTl9DT05UUk9MLAotCQkgIC52YWwgPSAweDZmLCB9LAotCQl7IC5yZWcgPSBMR0RUMzMwNV9HRU5fQ1RSTF80LAotCQkgIC52YWwgPSAweDAzLCB9LAotCQl7IC5yZWcgPSBMR0RUMzMwNV9ER1RMX0FHQ19SRUZfMSwKLQkJICAudmFsID0gMHgzMiwgfSwKLQkJeyAucmVnID0gTEdEVDMzMDVfREdUTF9BR0NfUkVGXzIsCi0JCSAgLnZhbCA9IDB4YzQsIH0sCi0JCXsgLnJlZyA9IExHRFQzMzA1X0NSX0NUUl9GUkVRXzEsCi0JCSAgLnZhbCA9IDB4MDAsIH0sCi0JCXsgLnJlZyA9IExHRFQzMzA1X0NSX0NUUl9GUkVRXzIsCi0JCSAgLnZhbCA9IDB4MDAsIH0sCi0JCXsgLnJlZyA9IExHRFQzMzA1X0NSX0NUUl9GUkVRXzMsCi0JCSAgLnZhbCA9IDB4MDAsIH0sCi0JCXsgLnJlZyA9IExHRFQzMzA1X0NSX0NUUl9GUkVRXzQsCi0JCSAgLnZhbCA9IDB4MDAsIH0sCi0JCXsgLnJlZyA9IExHRFQzMzA1X0NSX0NUUkxfNywKLQkJICAudmFsID0gMHg3OSwgfSwKLQkJeyAucmVnID0gTEdEVDMzMDVfQUdDX1BPV0VSX1JFRl8xLAotCQkgIC52YWwgPSAweDMyLCB9LAotCQl7IC5yZWcgPSBMR0RUMzMwNV9BR0NfUE9XRVJfUkVGXzIsCi0JCSAgLnZhbCA9IDB4YzQsIH0sCi0JCXsgLnJlZyA9IExHRFQzMzA1X0FHQ19ERUxBWV9QVF8xLAotCQkgIC52YWwgPSAweDBkLCB9LAotCQl7IC5yZWcgPSBMR0RUMzMwNV9BR0NfREVMQVlfUFRfMiwKLQkJICAudmFsID0gMHgzMCwgfSwKLQkJeyAucmVnID0gTEdEVDMzMDVfUkZBR0NfTE9PUF9GTFRSX0JXXzEsCi0JCSAgLnZhbCA9IDB4ODAsIH0sCi0JCXsgLnJlZyA9IExHRFQzMzA1X1JGQUdDX0xPT1BfRkxUUl9CV18yLAotCQkgIC52YWwgPSAweDAwLCB9LAotCQl7IC5yZWcgPSBMR0RUMzMwNV9JRkJXXzEsCi0JCSAgLnZhbCA9IDB4ODAsIH0sCi0JCXsgLnJlZyA9IExHRFQzMzA1X0lGQldfMiwKLQkJICAudmFsID0gMHgwMCwgfSwKLQkJeyAucmVnID0gTEdEVDMzMDVfQUdDX0NUUkxfMSwKLQkJICAudmFsID0gMHgzMCwgfSwKLQkJeyAucmVnID0gTEdEVDMzMDVfQUdDX0NUUkxfNCwKLQkJICAudmFsID0gMHg2MSwgfSwKLQkJeyAucmVnID0gTEdEVDMzMDVfRkVDX0JMT0NLX0NUUkwsCi0JCSAgLnZhbCA9IDB4ZmYsIH0sCi0JCXsgLnJlZyA9IExHRFQzMzA1X1RQX0NUUkxfMSwKLQkJICAudmFsID0gMHgxYiwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfR0VOX0NUUkxfMSwgICAgICAgICAgIC52YWwgPSAweDAzLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9HRU5fQ1RSTF8yLCAgICAgICAgICAgLnZhbCA9IDB4YjAsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0dFTl9DVFJMXzMsICAgICAgICAgICAudmFsID0gMHgwMSwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfR0VOX0NPTlRST0wsICAgICAgICAgIC52YWwgPSAweDZmLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9HRU5fQ1RSTF80LCAgICAgICAgICAgLnZhbCA9IDB4MDMsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0RHVExfQUdDX1JFRl8xLCAgICAgICAudmFsID0gMHgzMiwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfREdUTF9BR0NfUkVGXzIsICAgICAgIC52YWwgPSAweGM0LCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9DUl9DVFJfRlJFUV8xLCAgICAgICAgLnZhbCA9IDB4MDAsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0NSX0NUUl9GUkVRXzIsICAgICAgICAudmFsID0gMHgwMCwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfQ1JfQ1RSX0ZSRVFfMywgICAgICAgIC52YWwgPSAweDAwLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9DUl9DVFJfRlJFUV80LCAgICAgICAgLnZhbCA9IDB4MDAsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0NSX0NUUkxfNywgICAgICAgICAgICAudmFsID0gMHg3OSwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfQUdDX1BPV0VSX1JFRl8xLCAgICAgIC52YWwgPSAweDMyLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9BR0NfUE9XRVJfUkVGXzIsICAgICAgLnZhbCA9IDB4YzQsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0FHQ19ERUxBWV9QVF8xLCAgICAgICAudmFsID0gMHgwZCwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfQUdDX0RFTEFZX1BUXzIsICAgICAgIC52YWwgPSAweDMwLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9SRkFHQ19MT09QX0ZMVFJfQldfMSwgLnZhbCA9IDB4ODAsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X1JGQUdDX0xPT1BfRkxUUl9CV18yLCAudmFsID0gMHgwMCwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfSUZCV18xLCAgICAgICAgICAgICAgIC52YWwgPSAweDgwLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9JRkJXXzIsICAgICAgICAgICAgICAgLnZhbCA9IDB4MDAsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0FHQ19DVFJMXzEsICAgICAgICAgICAudmFsID0gMHgzMCwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfQUdDX0NUUkxfNCwgICAgICAgICAgIC52YWwgPSAweDYxLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9GRUNfQkxPQ0tfQ1RSTCwgICAgICAgLnZhbCA9IDB4ZmYsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X1RQX0NUUkxfMSwgICAgICAgICAgICAudmFsID0gMHgxYiwgfSwKIAl9OwogCiAJbGdfZGJnKCJcbiIpOwogCi0JcmV0ID0gbGdkdDMzMDVfd3JpdGVfcmVncyhzdGF0ZSwgbGdkdDMzMDVfaW5pdF9kYXRhLAotCQkJCSAgQVJSQVlfU0laRShsZ2R0MzMwNV9pbml0X2RhdGEpKTsKKwlzd2l0Y2ggKHN0YXRlLT5jZmctPmRlbW9kX2NoaXApIHsKKwljYXNlIExHRFQzMzA0OgorCQlyZXQgPSBsZ2R0MzMwNV93cml0ZV9yZWdzKHN0YXRlLCBsZ2R0MzMwNF9pbml0X2RhdGEsCisJCQkJCSAgQVJSQVlfU0laRShsZ2R0MzMwNF9pbml0X2RhdGEpKTsKKwkJYnJlYWs7CisJY2FzZSBMR0RUMzMwNToKKwkJcmV0ID0gbGdkdDMzMDVfd3JpdGVfcmVncyhzdGF0ZSwgbGdkdDMzMDVfaW5pdF9kYXRhLAorCQkJCQkgIEFSUkFZX1NJWkUobGdkdDMzMDVfaW5pdF9kYXRhKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJfQogCWlmIChsZ19mYWlsKHJldCkpCiAJCWdvdG8gZmFpbDsKIApAQCAtNjQwLDYgKzY3Nyw3NiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgbGdkdDMzMDRfc2V0X3BhcmFtZXRlcnMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbSkKK3sKKwlzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaW50IHJldDsKKworCWxnX2RiZygiKCVkLCAlZClcbiIsIHBhcmFtLT5mcmVxdWVuY3ksIHBhcmFtLT51LnZzYi5tb2R1bGF0aW9uKTsKKworCWlmIChmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zKSB7CisJCXJldCA9IGZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMoZmUsIHBhcmFtKTsKKwkJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisJCWlmIChsZ19mYWlsKHJldCkpCisJCQlnb3RvIGZhaWw7CisJCXN0YXRlLT5jdXJyZW50X2ZyZXF1ZW5jeSA9IHBhcmFtLT5mcmVxdWVuY3k7CisJfQorCisJcmV0ID0gbGdkdDMzMDVfc2V0X21vZHVsYXRpb24oc3RhdGUsIHBhcmFtKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisKKwlyZXQgPSBsZ2R0MzMwNV9wYXNzYmFuZF9kaWdpdGFsX2FnYyhzdGF0ZSwgcGFyYW0pOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKworCXJldCA9IGxnZHQzMzA1X2FnY19zZXR1cChzdGF0ZSwgcGFyYW0pOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKworCS8qIHJlZyAweDAzMGQgaXMgMzMwNC1vbmx5Li4uIHNlZW4gaW4gdnNiIGFuZCBxYW0gdXNic25vb3BzLi4uICovCisJc3dpdGNoIChwYXJhbS0+dS52c2IubW9kdWxhdGlvbikgeworCWNhc2UgVlNCXzg6CisJCWxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgMHgwMzBkLCAweDAwKTsKKwkJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9DUl9DVFJfRlJFUV8xLCAweDRmKTsKKwkJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9DUl9DVFJfRlJFUV8yLCAweDBjKTsKKwkJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9DUl9DVFJfRlJFUV8zLCAweGFjKTsKKwkJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9DUl9DVFJfRlJFUV80LCAweGJhKTsKKwkJYnJlYWs7CisJY2FzZSBRQU1fNjQ6CisJY2FzZSBRQU1fMjU2OgorCQlsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIDB4MDMwZCwgMHgxNCk7CisJCXJldCA9IGxnZHQzMzA1X3NldF9pZihzdGF0ZSwgcGFyYW0pOworCQlpZiAobGdfZmFpbChyZXQpKQorCQkJZ290byBmYWlsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKworCXJldCA9IGxnZHQzMzA1X3NwZWN0cmFsX2ludmVyc2lvbihzdGF0ZSwgcGFyYW0sCisJCQkJCSAgc3RhdGUtPmNmZy0+c3BlY3RyYWxfaW52ZXJzaW9uCisJCQkJCSAgPyAxIDogMCk7CisJaWYgKGxnX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCisJc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbiA9IHBhcmFtLT51LnZzYi5tb2R1bGF0aW9uOworCisJcmV0ID0gbGdkdDMzMDVfbXBlZ19tb2RlKHN0YXRlLCBzdGF0ZS0+Y2ZnLT5tcGVnX21vZGUpOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKworCS8qIGxnZHQzMzA1X21wZWdfbW9kZV9wb2xhcml0eSBjYWxscyBsZ2R0MzMwNV9zb2Z0X3Jlc2V0ICovCisJcmV0ID0gbGdkdDMzMDVfbXBlZ19tb2RlX3BvbGFyaXR5KHN0YXRlLAorCQkJCQkgIHN0YXRlLT5jZmctPnRwY2xrX2VkZ2UsCisJCQkJCSAgc3RhdGUtPmNmZy0+dHB2YWxpZF9wb2xhcml0eSk7CitmYWlsOgorCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgbGdkdDMzMDVfc2V0X3BhcmFtZXRlcnMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCiAJCQkJICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbSkKIHsKQEAgLTg0OCw2ICs5NTUsMTAgQEAKIAlzd2l0Y2ggKHN0YXRlLT5jdXJyZW50X21vZHVsYXRpb24pIHsKIAljYXNlIFFBTV8yNTY6CiAJY2FzZSBRQU1fNjQ6CisJCS8qIHNpZ25hbCBiaXQgaXMgdW5yZWxpYWJsZSBvbiB0aGUgRFQzMzA0IGluIFFBTSBtb2RlICovCisJCWlmICgoKExHRFQzMzA0ID09IHN0YXRlLT5jZmctPmRlbW9kX2NoaXApKSAmJiAoY3JfbG9jaykpCisJCQkqc3RhdHVzIHw9IEZFX0hBU19TSUdOQUw7CisKIAkJcmV0ID0gbGdkdDMzMDVfcmVhZF9mZWNfbG9ja19zdGF0dXMoc3RhdGUsICZmZWNfbG9jayk7CiAJCWlmIChsZ19mYWlsKHJldCkpCiAJCQlnb3RvIGZhaWw7CkBAIC05OTMsNiArMTEwNCw3IEBACiAJa2ZyZWUoc3RhdGUpOwogfQogCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgbGdkdDMzMDRfb3BzOwogc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGxnZHQzMzA1X29wczsKIAogc3RydWN0IGR2Yl9mcm9udGVuZCAqbGdkdDMzMDVfYXR0YWNoKGNvbnN0IHN0cnVjdCBsZ2R0MzMwNV9jb25maWcgKmNvbmZpZywKQEAgLTEwMTMsMTEgKzExMjUsMjEgQEAKIAlzdGF0ZS0+Y2ZnID0gY29uZmlnOwogCXN0YXRlLT5pMmNfYWRhcCA9IGkyY19hZGFwOwogCi0JbWVtY3B5KCZzdGF0ZS0+ZnJvbnRlbmQub3BzLCAmbGdkdDMzMDVfb3BzLAotCSAgICAgICBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKKwlzd2l0Y2ggKGNvbmZpZy0+ZGVtb2RfY2hpcCkgeworCWNhc2UgTEdEVDMzMDQ6CisJCW1lbWNweSgmc3RhdGUtPmZyb250ZW5kLm9wcywgJmxnZHQzMzA0X29wcywKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOworCQlicmVhazsKKwljYXNlIExHRFQzMzA1OgorCQltZW1jcHkoJnN0YXRlLT5mcm9udGVuZC5vcHMsICZsZ2R0MzMwNV9vcHMsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ290byBmYWlsOworCX0KIAlzdGF0ZS0+ZnJvbnRlbmQuZGVtb2R1bGF0b3JfcHJpdiA9IHN0YXRlOwogCi0JLyogdmVyaWZ5IHRoYXQgd2UncmUgdGFsa2luZyB0byBhIGxnIGR0MzMwNSAqLworCS8qIHZlcmlmeSB0aGF0IHdlJ3JlIHRhbGtpbmcgdG8gYSBsZyBkdDMzMDQvNSAqLwogCXJldCA9IGxnZHQzMzA1X3JlYWRfcmVnKHN0YXRlLCBMR0RUMzMwNV9HRU5fQ1RSTF8yLCAmdmFsKTsKIAlpZiAoKGxnX2ZhaWwocmV0KSkgfCAodmFsID09IDApKQogCQlnb3RvIGZhaWw7CkBAIC0xMDM2LDEyICsxMTU4LDM1IEBACiAKIAlyZXR1cm4gJnN0YXRlLT5mcm9udGVuZDsKIGZhaWw6Ci0JbGdfd2FybigidW5hYmxlIHRvIGRldGVjdCBMR0RUMzMwNSBoYXJkd2FyZVxuIik7CisJbGdfd2FybigidW5hYmxlIHRvIGRldGVjdCAlcyBoYXJkd2FyZVxuIiwKKwkJY29uZmlnLT5kZW1vZF9jaGlwID8gIkxHRFQzMzA0IiA6ICJMR0RUMzMwNSIpOwogCWtmcmVlKHN0YXRlKTsKIAlyZXR1cm4gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0wobGdkdDMzMDVfYXR0YWNoKTsKIAorc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGxnZHQzMzA0X29wcyA9IHsKKwkuaW5mbyA9IHsKKwkJLm5hbWUgPSAiTEcgRWxlY3Ryb25pY3MgTEdEVDMzMDQgVlNCL1FBTSBGcm9udGVuZCIsCisJCS50eXBlICAgICAgICAgICAgICAgPSBGRV9BVFNDLAorCQkuZnJlcXVlbmN5X21pbiAgICAgID0gNTQwMDAwMDAsCisJCS5mcmVxdWVuY3lfbWF4ICAgICAgPSA4NTgwMDAwMDAsCisJCS5mcmVxdWVuY3lfc3RlcHNpemUgPSA2MjUwMCwKKwkJLmNhcHMgPSBGRV9DQU5fUUFNXzY0IHwgRkVfQ0FOX1FBTV8yNTYgfCBGRV9DQU5fOFZTQgorCX0sCisJLmkyY19nYXRlX2N0cmwgICAgICAgID0gbGdkdDMzMDVfaTJjX2dhdGVfY3RybCwKKwkuaW5pdCAgICAgICAgICAgICAgICAgPSBsZ2R0MzMwNV9pbml0LAorCS5zZXRfZnJvbnRlbmQgICAgICAgICA9IGxnZHQzMzA0X3NldF9wYXJhbWV0ZXJzLAorCS5nZXRfZnJvbnRlbmQgICAgICAgICA9IGxnZHQzMzA1X2dldF9mcm9udGVuZCwKKwkuZ2V0X3R1bmVfc2V0dGluZ3MgICAgPSBsZ2R0MzMwNV9nZXRfdHVuZV9zZXR0aW5ncywKKwkucmVhZF9zdGF0dXMgICAgICAgICAgPSBsZ2R0MzMwNV9yZWFkX3N0YXR1cywKKwkucmVhZF9iZXIgICAgICAgICAgICAgPSBsZ2R0MzMwNV9yZWFkX2JlciwKKwkucmVhZF9zaWduYWxfc3RyZW5ndGggPSBsZ2R0MzMwNV9yZWFkX3NpZ25hbF9zdHJlbmd0aCwKKwkucmVhZF9zbnIgICAgICAgICAgICAgPSBsZ2R0MzMwNV9yZWFkX3NuciwKKwkucmVhZF91Y2Jsb2NrcyAgICAgICAgPSBsZ2R0MzMwNV9yZWFkX3VjYmxvY2tzLAorCS5yZWxlYXNlICAgICAgICAgICAgICA9IGxnZHQzMzA1X3JlbGVhc2UsCit9OworCiBzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgbGdkdDMzMDVfb3BzID0gewogCS5pbmZvID0gewogCQkubmFtZSA9ICJMRyBFbGVjdHJvbmljcyBMR0RUMzMwNSBWU0IvUUFNIEZyb250ZW5kIiwKQEAgLTEwNjUsMTAgKzEyMTAsMTAgQEAKIAkucmVsZWFzZSAgICAgICAgICAgICAgPSBsZ2R0MzMwNV9yZWxlYXNlLAogfTsKIAotTU9EVUxFX0RFU0NSSVBUSU9OKCJMRyBFbGVjdHJvbmljcyBMR0RUMzMwNSBBVFNDL1FBTS1CIERlbW9kdWxhdG9yIERyaXZlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJMRyBFbGVjdHJvbmljcyBMR0RUMzMwNC81IEFUU0MvUUFNLUIgRGVtb2R1bGF0b3IgRHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEtydWZreSA8bWtydWZreUBsaW51eHR2Lm9yZz4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9WRVJTSU9OKCIwLjEiKTsKK01PRFVMRV9WRVJTSU9OKCIwLjIiKTsKIAogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMwNS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzA1LmgKaW5kZXggOWNiMTFjOS4uMDIxNzJlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzA1LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzA1LmgKQEAgLTEsNyArMSw3IEBACiAvKgotICogICAgU3VwcG9ydCBmb3IgTEdEVDMzMDUgLSBWU0IvUUFNCisgKiAgICBTdXBwb3J0IGZvciBMRyBFbGVjdHJvbmljcyBMR0RUMzMwNCBhbmQgTEdEVDMzMDUgLSBWU0IvUUFNCiAgKgotICogICAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IE1pY2hhZWwgS3J1Zmt5IDxta3J1Zmt5QGxpbnV4dHYub3JnPgorICogICAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwIE1pY2hhZWwgS3J1Zmt5IDxta3J1Zmt5QGxpbnV4dHYub3JnPgogICoKICAqICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNDEsNiArNDEsMTEgQEAKIAlMR0RUMzMwNV9UUF9WQUxJRF9ISUdIID0gMSwKIH07CiAKK2VudW0gbGdkdF9kZW1vZF9jaGlwX3R5cGUgeworCUxHRFQzMzA1ID0gMCwKKwlMR0RUMzMwNCA9IDEsCit9OworCiBzdHJ1Y3QgbGdkdDMzMDVfY29uZmlnIHsKIAl1OCBpMmNfYWRkcjsKIApAQCAtNjUsNiArNzAsNyBAQAogCWVudW0gbGdkdDMzMDVfbXBlZ19tb2RlIG1wZWdfbW9kZTsKIAllbnVtIGxnZHQzMzA1X3RwX2Nsb2NrX2VkZ2UgdHBjbGtfZWRnZTsKIAllbnVtIGxnZHQzMzA1X3RwX3ZhbGlkX3BvbGFyaXR5IHRwdmFsaWRfcG9sYXJpdHk7CisJZW51bSBsZ2R0X2RlbW9kX2NoaXBfdHlwZSBkZW1vZF9jaGlwOwogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0RWQl9MR0RUMzMwNSkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9MR0RUMzMwNV9NT0RVTEUpICYmIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ3M4Z3h4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdzOGd4eC5jCmluZGV4IGRlZTUzOTYuLjVlYTI4YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ3M4Z3h4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnczhneHguYwpAQCAtMjQsNiArMjQsNyBAQAogICovCiAKICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogCiAjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCiAKQEAgLTQ2LDQyICs0Nyw2IEBACiBNT0RVTEVfUEFSTV9ERVNDKGZha2Vfc2lnbmFsX3N0ciwgImZha2Ugc2lnbmFsIHN0cmVuZ3RoIGZvciBMR1M4OTEzLiIKICJTaWduYWwgc3RyZW5ndGggY2FsY3VsYXRpb24gaXMgc2xvdy4oZGVmYXVsdDpvbikuIik7CiAKLXN0YXRpYyBjb25zdCB1OCBsZ3M4Zzc1X2luaXRkYXRbXSA9IHsKLQkweDAxLCAweDMwLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4MDAsIDB4MDEsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEU0LCAweEY1LCAweEE4LCAweEY1LCAweEI4LCAweEY1LCAweDg4LCAweEY1LAotCTB4ODksIDB4RjUsIDB4ODcsIDB4NzUsIDB4RDAsIDB4MDAsIDB4MTEsIDB4NTAsCi0JMHgxMSwgMHg1MCwgMHhGNCwgMHhGNSwgMHg4MCwgMHhGNSwgMHg5MCwgMHhGNSwKLQkweEEwLCAweEY1LCAweEIwLCAweDc1LCAweDgxLCAweDMwLCAweDgwLCAweDAxLAotCTB4MzIsIDB4OTAsIDB4ODAsIDB4MTIsIDB4NzQsIDB4RkYsIDB4RjAsIDB4OTAsCi0JMHg4MCwgMHgxMywgMHg3NCwgMHgxRiwgMHhGMCwgMHg5MCwgMHg4MCwgMHgyMywKLQkweDc0LCAweDAxLCAweEYwLCAweDkwLCAweDgwLCAweDIyLCAweEYwLCAweDkwLAotCTB4MDAsIDB4NDgsIDB4NzQsIDB4MDAsIDB4RjAsIDB4OTAsIDB4ODAsIDB4NEQsCi0JMHg3NCwgMHgwNSwgMHhGMCwgMHg5MCwgMHg4MCwgMHgwOSwgMHhFMCwgMHg2MCwKLQkweDIxLCAweDEyLCAweDAwLCAweERELCAweDE0LCAweDYwLCAweDFCLCAweDEyLAotCTB4MDAsIDB4REQsIDB4MTQsIDB4NjAsIDB4MTUsIDB4MTIsIDB4MDAsIDB4REQsCi0JMHgxNCwgMHg2MCwgMHgwRiwgMHgxMiwgMHgwMCwgMHhERCwgMHgxNCwgMHg2MCwKLQkweDA5LCAweDEyLCAweDAwLCAweERELCAweDE0LCAweDYwLCAweDAzLCAweDEyLAotCTB4MDAsIDB4REQsIDB4OTAsIDB4ODAsIDB4NDIsIDB4RTAsIDB4NjAsIDB4MEIsCi0JMHgxNCwgMHg2MCwgMHgwQywgMHgxNCwgMHg2MCwgMHgwRCwgMHgxNCwgMHg2MCwKLQkweDBFLCAweDAxLCAweEIzLCAweDc0LCAweDA0LCAweDAxLCAweEI5LCAweDc0LAotCTB4MDUsIDB4MDEsIDB4QjksIDB4NzQsIDB4MDcsIDB4MDEsIDB4QjksIDB4NzQsCi0JMHgwQSwgMHhDMCwgMHhFMCwgMHg3NCwgMHhDOCwgMHgxMiwgMHgwMCwgMHhFMiwKLQkweEQwLCAweEUwLCAweDE0LCAweDcwLCAweEY0LCAweDkwLCAweDgwLCAweDA5LAotCTB4RTAsIDB4NzAsIDB4QUUsIDB4MTIsIDB4MDAsIDB4RjYsIDB4MTIsIDB4MDAsCi0JMHhGRSwgMHg5MCwgMHgwMCwgMHg0OCwgMHhFMCwgMHgwNCwgMHhGMCwgMHg5MCwKLQkweDgwLCAweDRFLCAweEYwLCAweDAxLCAweDczLCAweDkwLCAweDgwLCAweDA4LAotCTB4RjAsIDB4MjIsIDB4RjgsIDB4N0EsIDB4MEMsIDB4NzksIDB4RkQsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhEOSwKLQkweEY2LCAweERBLCAweEYyLCAweEQ4LCAweEVFLCAweDIyLCAweDkwLCAweDgwLAotCTB4NjUsIDB4RTAsIDB4NTQsIDB4RkQsIDB4RjAsIDB4MjIsIDB4OTAsIDB4ODAsCi0JMHg2NSwgMHhFMCwgMHg0NCwgMHhDMiwgMHhGMCwgMHgyMgotfTsKLQogLyogTEdTOEdYWCBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zICovCiAKIHN0YXRpYyBpbnQgbGdzOGd4eF93cml0ZV9yZWcoc3RydWN0IGxnczhneHhfc3RhdGUgKnByaXYsIHU4IHJlZywgdTggZGF0YSkKQEAgLTYyNyw5ICs1OTIsMTQgQEAKIAogc3RhdGljIGludCBsZ3M4Zzc1X2luaXRfZGF0YShzdHJ1Y3QgbGdzOGd4eF9zdGF0ZSAqcHJpdikKIHsKLQljb25zdCB1OCAqcCA9IGxnczhnNzVfaW5pdGRhdDsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWludCByYzsKIAlpbnQgaTsKIAorCXJjID0gcmVxdWVzdF9maXJtd2FyZSgmZncsICJsZ3M4Zzc1LmZ3IiwgJnByaXYtPmkyYy0+ZGV2KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwogCWxnczhneHhfd3JpdGVfcmVnKHByaXYsIDB4QzYsIDB4NDApOwogCiAJbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHgzRCwgMHgwNCk7CkBAIC02NDAsMTYgKzYxMCwxNiBAQAogCWxnczhneHhfd3JpdGVfcmVnKHByaXYsIDB4M0IsIDB4MDApOwogCWxnczhneHhfd3JpdGVfcmVnKHByaXYsIDB4MzgsIDB4MDApOwogCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihsZ3M4Zzc1X2luaXRkYXQpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgZnctPnNpemU7IGkrKykgewogCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDM4LCAweDAwKTsKIAkJbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHgzQSwgKHU4KShpJjB4ZmYpKTsKIAkJbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHgzQiwgKHU4KShpPj44KSk7Ci0JCWxnczhneHhfd3JpdGVfcmVnKHByaXYsIDB4M0MsICpwKTsKLQkJcCsrOworCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDNDLCBmdy0+ZGF0YVtpXSk7CiAJfQogCiAJbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHgzOCwgMHgwMCk7CiAKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL21iODZhMTYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tYjg2YTE2LmMKaW5kZXggNTk5ZDFhYS4uMzNiNjMyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL21iODZhMTYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbWI4NmExNi5jCkBAIC0xODMzLDcgKzE4MzMsNiBAQAogCiAJLmdldF9mcm9udGVuZF9hbGdvCQk9IG1iODZhMTZfZnJvbnRlbmRfYWxnbywKIAkuc2VhcmNoCQkJCT0gbWI4NmExNl9zZWFyY2gsCi0JLnJlYWRfc3RhdHVzCQkJPSBtYjg2YTE2X3JlYWRfc3RhdHVzLAogCS5pbml0CQkJCT0gbWI4NmExNl9pbml0LAogCS5zbGVlcAkJCQk9IG1iODZhMTZfc2xlZXAsCiAJLnJlYWRfc3RhdHVzCQkJPSBtYjg2YTE2X3JlYWRfc3RhdHVzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDQ4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNDguYwppbmRleCA0ZTJhN2M4Li45M2Y2YTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNDguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNDguYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgogI2luY2x1ZGUgImR2Yl9tYXRoLmgiCkBAIC00OSw4ICs1MCw4IEBACiAjZGVmaW5lIFREQTEwMDQ4X0NPTkZfQzRfMSAgICAgICAgIDB4MUUKICNkZWZpbmUgVERBMTAwNDhfQ09ORl9DNF8yICAgICAgICAgMHgxRgogI2RlZmluZSBUREExMDA0OF9DT0RFX0lOX1JBTSAgICAgICAweDIwCi0jZGVmaW5lIFREQTEwMDQ4X0NIQU5ORUxfSU5GT18xX1IgIDB4MjIKLSNkZWZpbmUgVERBMTAwNDhfQ0hBTk5FTF9JTkZPXzJfUiAgMHgyMworI2RlZmluZSBUREExMDA0OF9DSEFOTkVMX0lORk8xX1IgICAweDIyCisjZGVmaW5lIFREQTEwMDQ4X0NIQU5ORUxfSU5GTzJfUiAgIDB4MjMKICNkZWZpbmUgVERBMTAwNDhfQ0hBTk5FTF9JTkZPMSAgICAgMHgyNAogI2RlZmluZSBUREExMDA0OF9DSEFOTkVMX0lORk8yICAgICAweDI1CiAjZGVmaW5lIFREQTEwMDQ4X1RJTUVfRVJST1JfUiAgICAgIDB4MjYKQEAgLTYzLDggKzY0LDggQEAKICNkZWZpbmUgVERBMTAwNDhfSVRfU1RBVCAgICAgICAgICAgMHgzMgogI2RlZmluZSBUREExMDA0OF9EU1BfQURfTFNCICAgICAgICAweDNDCiAjZGVmaW5lIFREQTEwMDQ4X0RTUF9BRF9NU0IgICAgICAgIDB4M0QKLSNkZWZpbmUgVERBMTAwNDhfRFNQX1JFRl9MU0IgICAgICAgMHgzRQotI2RlZmluZSBUREExMDA0OF9EU1BfUkVGX01TQiAgICAgICAweDNGCisjZGVmaW5lIFREQTEwMDQ4X0RTUF9SRUdfTFNCICAgICAgIDB4M0UKKyNkZWZpbmUgVERBMTAwNDhfRFNQX1JFR19NU0IgICAgICAgMHgzRgogI2RlZmluZSBUREExMDA0OF9DT05GX1RSSVNUQVRFMSAgICAweDQ0CiAjZGVmaW5lIFREQTEwMDQ4X0NPTkZfVFJJU1RBVEUyICAgIDB4NDUKICNkZWZpbmUgVERBMTAwNDhfQ09ORl9QT0xBUklUWSAgICAgMHg0NgpAQCAtMTEyLDcgKzExMyw3IEBACiAjZGVmaW5lIFREQTEwMDQ4X0ZSRUVfUkVHXzEgICAgICAgIDB4QjIKICNkZWZpbmUgVERBMTAwNDhfRlJFRV9SRUdfMiAgICAgICAgMHhCMwogI2RlZmluZSBUREExMDA0OF9DT05GX0MzXzEgICAgICAgICAweEMwCi0jZGVmaW5lIFREQTEwMDQ4X0NZQkVSX0NUUkwgICAgICAgIDB4QzIKKyNkZWZpbmUgVERBMTAwNDhfQ1ZCRVJfQ1RSTCAgICAgICAgMHhDMgogI2RlZmluZSBUREExMDA0OF9DQkVSX05NQVhfTFNCICAgICAweEM0CiAjZGVmaW5lIFREQTEwMDQ4X0NCRVJfTk1BWF9NU0IgICAgIDB4QzUKICNkZWZpbmUgVERBMTAwNDhfQ0JFUl9MU0IgICAgICAgICAgMHhDNgpAQCAtMTIwLDcgKzEyMSw3IEBACiAjZGVmaW5lIFREQTEwMDQ4X1ZCRVJfTFNCICAgICAgICAgIDB4QzgKICNkZWZpbmUgVERBMTAwNDhfVkJFUl9NSUQgICAgICAgICAgMHhDOQogI2RlZmluZSBUREExMDA0OF9WQkVSX01TQiAgICAgICAgICAweENBCi0jZGVmaW5lIFREQTEwMDQ4X0NZQkVSX0xVVCAgICAgICAgIDB4Q0MKKyNkZWZpbmUgVERBMTAwNDhfQ1ZCRVJfTFVUICAgICAgICAgMHhDQwogI2RlZmluZSBUREExMDA0OF9VTkNPUl9DVFJMICAgICAgICAweENECiAjZGVmaW5lIFREQTEwMDQ4X1VOQ09SX0NQVF9MU0IgICAgIDB4Q0UKICNkZWZpbmUgVERBMTAwNDhfVU5DT1JfQ1BUX01TQiAgICAgMHhDRgpAQCAtMTgzLDcgKzE4NCw3IEBACiAJeyBUREExMDA0OF9BR0NfSUZfTUFYLCAweGZmIH0sCiAJeyBUREExMDA0OF9BR0NfVEhSRVNIT0xEX01TQiwgMHgwMCB9LAogCXsgVERBMTAwNDhfQUdDX1RIUkVTSE9MRF9MU0IsIDB4NzAgfSwKLQl7IFREQTEwMDQ4X0NZQkVSX0NUUkwsIDB4MzggfSwKKwl7IFREQTEwMDQ4X0NWQkVSX0NUUkwsIDB4MzggfSwKIAl7IFREQTEwMDQ4X0FHQ19HQUlOUywgMHgxMiB9LAogCXsgVERBMTAwNDhfQ09ORl9YTywgMHgwMCB9LAogCXsgVERBMTAwNDhfQ09ORl9UUzEsIDB4MDcgfSwKQEAgLTY4OCw3ICs2ODksNyBAQAogCQlwLT5ndWFyZF9pbnRlcnZhbCA9ICBHVUFSRF9JTlRFUlZBTF8xXzQ7CiAJCWJyZWFrOwogCX0KLQlzd2l0Y2ggKHZhbCAmIDB4MDIpIHsKKwlzd2l0Y2ggKHZhbCAmIDB4MDMpIHsKIAljYXNlIDA6CiAJCXAtPnRyYW5zbWlzc2lvbl9tb2RlID0gVFJBTlNNSVNTSU9OX01PREVfMks7CiAJCWJyZWFrOwpAQCAtNzY1LDYgKzc2Niw4IEBACiAKIAkvKiBFbmFibGUgZGVtb2QgVFBTIGF1dG8gZGV0ZWN0aW9uIGFuZCBiZWdpbiBhY3F1aXNpdGlvbiAqLwogCXRkYTEwMDQ4X3dyaXRlcmVnKHN0YXRlLCBUREExMDA0OF9BVVRPLCAweDU3KTsKKwkvKiB0cmlnZ2VyIGNiZXIgYW5kIHZiZXIgYWNxdWlzaXRpb24gKi8KKwl0ZGExMDA0OF93cml0ZXJlZyhzdGF0ZSwgVERBMTAwNDhfQ1ZCRVJfQ1RSTCwgMHgzQik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTgzMCwxMiArODMzLDI3IEBACiBzdGF0aWMgaW50IHRkYTEwMDQ4X3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJlcikKIHsKIAlzdHJ1Y3QgdGRhMTAwNDhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RhdGljIHUzMiBjYmVyX2N1cnJlbnQ7CisJdTMyIGNiZXJfbm1heDsKKwl1NjQgY2Jlcl90bXA7CiAKIAlkcHJpbnRrKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQkvKiBUT0RPOiBBIHJlc2V0IG1heSBiZSByZXF1aXJlZCBoZXJlICovCi0JKmJlciA9IHRkYTEwMDQ4X3JlYWRyZWcoc3RhdGUsIFREQTEwMDQ4X0NCRVJfTVNCKSA8PCA4IHwKLQkJdGRhMTAwNDhfcmVhZHJlZyhzdGF0ZSwgVERBMTAwNDhfQ0JFUl9MU0IpOworCS8qIHVwZGF0ZSBjYmVyIG9uIGludGVycnVwdCAqLworCWlmICh0ZGExMDA0OF9yZWFkcmVnKHN0YXRlLCBUREExMDA0OF9TT0ZUX0lUX0MzKSAmIDB4MDEpIHsKKwkJY2Jlcl90bXAgPSB0ZGExMDA0OF9yZWFkcmVnKHN0YXRlLCBUREExMDA0OF9DQkVSX01TQikgPDwgOCB8CisJCQl0ZGExMDA0OF9yZWFkcmVnKHN0YXRlLCBUREExMDA0OF9DQkVSX0xTQik7CisJCWNiZXJfbm1heCA9IHRkYTEwMDQ4X3JlYWRyZWcoc3RhdGUsIFREQTEwMDQ4X0NCRVJfTk1BWF9NU0IpIDw8IDggfAorCQkJdGRhMTAwNDhfcmVhZHJlZyhzdGF0ZSwgVERBMTAwNDhfQ0JFUl9OTUFYX0xTQik7CisJCWNiZXJfdG1wICo9IDEwMDAwMDAwMDsKKwkJY2Jlcl90bXAgKj0gMjsKKwkJY2Jlcl90bXAgPSBkaXZfdTY0KGNiZXJfdG1wLCAoY2Jlcl9ubWF4ICogMzIpICsgMSk7CisJCWNiZXJfY3VycmVudCA9ICh1MzIpY2Jlcl90bXA7CisJCS8qIHJldHJpZ2dlciBjYmVyIGFjcXVpc2l0aW9uICovCisJCXRkYTEwMDQ4X3dyaXRlcmVnKHN0YXRlLCBUREExMDA0OF9DVkJFUl9DVFJMLCAweDM5KTsKKwl9CisJLyogYWN0dWFsIGNiZXIgaXMgKCpiZXIpLzFlOCAqLworCSpiZXIgPSBjYmVyX2N1cnJlbnQ7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMTUsNiArMTAzMyw5IEBACiAKIAkqdWNibG9ja3MgPSB0ZGExMDA0OF9yZWFkcmVnKHN0YXRlLCBUREExMDA0OF9VTkNPUl9DUFRfTVNCKSA8PCA4IHwKIAkJdGRhMTAwNDhfcmVhZHJlZyhzdGF0ZSwgVERBMTAwNDhfVU5DT1JfQ1BUX0xTQik7CisJLyogY2xlYXIgdGhlIHVuY29ycmVjdGVkIFRTIHBhY2tldHMgY291bnRlciB3aGVuIHNhdHVyYXRlZCAqLworCWlmICgqdWNibG9ja3MgPT0gMHhGRkZGKQorCQl0ZGExMDA0OF93cml0ZXJlZyhzdGF0ZSwgVERBMTAwNDhfVU5DT1JfQ1RSTCwgMHg4MCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL0tjb25maWcKaW5kZXggZjdiNzJhMy4uZGVjZGVkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL0tjb25maWcKQEAgLTEwLDkgKzEwLDE1IEBACiBjb25maWcgRFZCX01BTlRJUwogCXRyaXN0YXRlICJNQU5USVMgYmFzZWQgY2FyZHMiCiAJZGVwZW5kcyBvbiBNQU5USVNfQ09SRSAmJiBEVkJfQ09SRSAmJiBQQ0kgJiYgSTJDCi0Jc2VsZWN0IERWQl9NQjg2QTE2Ci0Jc2VsZWN0IERWQl9aTDEwMzUzCi0Jc2VsZWN0IERWQl9TVFYwMjk5CisJc2VsZWN0IERWQl9NQjg2QTE2IGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9aTDEwMzUzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9TVFYwMjk5IGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9MTkJQMjEgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1NUQjA4OTkgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1NUQjYxMDAgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1REQTY2NXggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1REQTEwMDIxIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9UREExMDAyMyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfUExMCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgUENJIGNhcmRzIGJhc2VkIG9uIHRoZSBNYW50aXMgUENJIGJyaWRnZS4KQEAgLTIzLDcgKzI5LDcgQEAKIGNvbmZpZyBEVkJfSE9QUEVSCiAJdHJpc3RhdGUgIkhPUFBFUiBiYXNlZCBjYXJkcyIKIAlkZXBlbmRzIG9uIE1BTlRJU19DT1JFICYmIERWQl9DT1JFICYmIFBDSSAmJiBJMkMKLQlzZWxlY3QgRFZCX1pMMTAzNTMKKwlzZWxlY3QgRFZCX1pMMTAzNTMgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1BMTAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIFBDSSBjYXJkcyBiYXNlZCBvbiB0aGUgSG9wcGVyICBQQ0kgYnJpZGdlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19pbnB1dC5jCmluZGV4IDNkNGU0NjYuLmE5OTQ4OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX2lucHV0LmMKQEAgLTE5LDcgKzE5LDcgQEAKICovCiAKICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotI2luY2x1ZGUgPG1lZGlhL2lyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL2lyLWNvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KIAogI2luY2x1ZGUgImRteGRldi5oIgpAQCAtMTA0LDcgKzEwNCw2IEBACiBpbnQgbWFudGlzX2lucHV0X2luaXQoc3RydWN0IG1hbnRpc19wY2kgKm1hbnRpcykKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpyYzsKLQlzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgcmNfc3RhdGU7CiAJY2hhciBuYW1lWzgwXSwgZGV2WzgwXTsKIAlpbnQgZXJyOwogCkBAIC0xMjAsOCArMTE5LDYgQEAKIAlyYy0+bmFtZSA9IG5hbWU7CiAJcmMtPnBoeXMgPSBkZXY7CiAKLQlpcl9pbnB1dF9pbml0KHJjLCAmcmNfc3RhdGUsIElSX1RZUEVfT1RIRVIpOwotCiAJcmMtPmlkLmJ1c3R5cGUJPSBCVVNfUENJOwogCXJjLT5pZC52ZW5kb3IJPSBtYW50aXMtPnZlbmRvcl9pZDsKIAlyYy0+aWQucHJvZHVjdAk9IG1hbnRpcy0+ZGV2aWNlX2lkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYwppbmRleCBjZmY3N2UyLi4yNWI0M2U1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYwpAQCAtNjQsOSArNjQsMTEgQEAKIAkJLnR5cGUJPSBTTVNfTk9WQV9CMCwKIAkJLmZ3W0RFVklDRV9NT0RFX0lTREJUX0JEQV0gPSAic21zMXh4eC1oY3ctNTV4eHgtaXNkYnQtMDIuZnciLAogCQkuZndbREVWSUNFX01PREVfRFZCVF9CREFdID0gInNtczF4eHgtaGN3LTU1eHh4LWR2YnQtMDIuZnciLAorCQkucmNfY29kZXMgPSBSQ19NQVBfUkM1X0hBVVBQQVVHRV9ORVcsCiAJCS5ib2FyZF9jZmcubGVkc19wb3dlciA9IDI2LAogCQkuYm9hcmRfY2ZnLmxlZDAgPSAyNywKIAkJLmJvYXJkX2NmZy5sZWQxID0gMjgsCisJCS5ib2FyZF9jZmcuaXIgPSA5LAogCQkubGVkX3Bvd2VyID0gMjYsCiAJCS5sZWRfbG8gICAgPSAyNywKIAkJLmxlZF9oaSAgICA9IDI4LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuaAppbmRleCA4ZjE5ZmMwLi5kOGNkZjc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuaApAQCAtNzUsNyArNzUsNyBAQAogCWVudW0gc21zX2RldmljZV90eXBlX3N0IHR5cGU7CiAJY2hhciAqbmFtZSwgKmZ3W0RFVklDRV9NT0RFX01BWF07CiAJc3RydWN0IHNtc19ib2FyZF9ncGlvX2NmZyBib2FyZF9jZmc7Ci0JZW51bSBpcl9rYl90eXBlIGlyX2tiX3R5cGU7CisJY2hhciAqcmNfY29kZXM7CQkJCS8qIE5hbWUgb2YgSVIgY29kZXMgdGFibGUgKi8KIAogCS8qIGdwaW9zICovCiAJaW50IGxlZF9wb3dlciwgbGVkX2hpLCBsZWRfbG8sIGxuYV9jdHJsLCByZl9zd2l0Y2g7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmMKaW5kZXggMGM4N2EzYy4uN2YyYzk0YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmMKQEAgLTExNiw5ICsxMTYsNyBAQAogCQkJcmV0dXJuIGVudHJ5OwogCQl9CiAJfQotCWVudHJ5ID0gKHN0cnVjdCBzbXNjb3JlX3JlZ2lzdHJ5X2VudHJ5X3QgKikKLQkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbXNjb3JlX3JlZ2lzdHJ5X2VudHJ5X3QpLAotCQkJCUdGUF9LRVJORUwpOworCWVudHJ5ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNtc2NvcmVfcmVnaXN0cnlfZW50cnlfdCksIEdGUF9LRVJORUwpOwogCWlmIChlbnRyeSkgewogCQllbnRyeS0+bW9kZSA9IGRlZmF1bHRfbW9kZTsKIAkJc3RyY3B5KGVudHJ5LT5kZXZwYXRoLCBkZXZwYXRoKTsKQEAgLTEyOTcsNyArMTI5NSw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChzbXNjbGllbnRfc2VuZHJlcXVlc3QpOwogCiAKLS8qIG9sZCBHUElPIG1hbmFnbWVudHMgaW1wbGVtZW50YXRpb24gKi8KKy8qIG9sZCBHUElPIG1hbmFnZW1lbnRzIGltcGxlbWVudGF0aW9uICovCiBpbnQgc21zY29yZV9jb25maWd1cmVfZ3BpbyhzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwgdTMyIHBpbiwKIAkJCSAgIHN0cnVjdCBzbXNjb3JlX2NvbmZpZ19ncGlvICpwaW5jb25maWcpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNpci5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zaXIuYwppbmRleCBhNTZlYWM3Li5kMGU0NjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNpci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2lyLmMKQEAgLTQsNiArNCwxMSBAQAogIE1EVFYgcmVjZWl2ZXIga2VybmVsIG1vZHVsZXMuCiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDksIFVyaSBTaGtvbG5pawogCisgQ29weXJpZ2h0IChjKSAyMDEwIC0gTWF1cm8gQ2FydmFsaG8gQ2hlaGFiCisJLSBQb3J0ZWQgdGhlIGRyaXZlciB0byB1c2UgcmMtY29yZQorCS0gSVIgcmF3IGV2ZW50IGRlY29kaW5nIGlzIG5vdyBkb25lIGF0IHJjLWNvcmUKKwktIENvZGUgYWxtb3N0IHJlLXdyaXR0ZW4KKwogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgpAQCAtMjcsMjI2ICszMiwyOCBAQAogI2luY2x1ZGUgInNtc2lyLmgiCiAjaW5jbHVkZSAic21zLWNhcmRzLmgiCiAKLS8qIEluIG9yZGVyIHRvIGFkZCBuZXcgSVIgcmVtb3RlIGNvbnRyb2wgLQotICogMSkgQWRkIGl0IHRvIHRoZSA8ZW51bSBpcl9rYl90eXBlPiBAIHNtc2lyLGgsCi0gKiAyKSBBZGQgaXRzIG1hcCB0byBrZXlib2FyZF9sYXlvdXRfbWFwcyBiZWxvdwotICogMykgU2V0IHlvdXIgYm9hcmQgKHNtcy1jYXJkcyBzdWItbW9kdWxlKSB0byB1c2UgaXQKLSAqLwotCi1zdGF0aWMgc3RydWN0IGtleWJvYXJkX2xheW91dF9tYXBfdCBrZXlib2FyZF9sYXlvdXRfbWFwc1tdID0gewotCQlbU01TX0lSX0tCX0RFRkFVTFRfVFZdID0gewotCQkJLmlyX3Byb3RvY29sID0gSVJfUkM1LAotCQkJLnJjNV9rYmRfYWRkcmVzcyA9IEtFWUJPQVJEX0FERFJFU1NfVFYxLAotCQkJLmtleWJvYXJkX2xheW91dF9tYXAgPSB7Ci0JCQkJCUtFWV8wLCBLRVlfMSwgS0VZXzIsCi0JCQkJCUtFWV8zLCBLRVlfNCwgS0VZXzUsCi0JCQkJCUtFWV82LCBLRVlfNywgS0VZXzgsCi0JCQkJCUtFWV85LCAwLCAwLCBLRVlfUE9XRVIsCi0JCQkJCUtFWV9NVVRFLCAwLCAwLAotCQkJCQlLRVlfVk9MVU1FVVAsIEtFWV9WT0xVTUVET1dOLAotCQkJCQlLRVlfQlJJR0hUTkVTU1VQLAotCQkJCQlLRVlfQlJJR0hUTkVTU0RPV04sIEtFWV9DSEFOTkVMVVAsCi0JCQkJCUtFWV9DSEFOTkVMRE9XTiwKLQkJCQkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLQkJCQkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLQkJCQkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLQkJCQkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLQkJCQkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAotCQkJfQotCQl9LAotCQlbU01TX0lSX0tCX0hDV19TSUxWRVJdID0gewotCQkJLmlyX3Byb3RvY29sID0gSVJfUkM1LAotCQkJLnJjNV9rYmRfYWRkcmVzcyA9IEtFWUJPQVJEX0FERFJFU1NfTElHSFRJTkcxLAotCQkJLmtleWJvYXJkX2xheW91dF9tYXAgPSB7Ci0JCQkJCUtFWV8wLCBLRVlfMSwgS0VZXzIsCi0JCQkJCUtFWV8zLCBLRVlfNCwgS0VZXzUsCi0JCQkJCUtFWV82LCBLRVlfNywgS0VZXzgsCi0JCQkJCUtFWV85LCBLRVlfVEVYVCwgS0VZX1JFRCwKLQkJCQkJS0VZX1JBRElPLCBLRVlfTUVOVSwKLQkJCQkJS0VZX1NVQlRJVExFLAotCQkJCQlLRVlfTVVURSwgS0VZX1ZPTFVNRVVQLAotCQkJCQlLRVlfVk9MVU1FRE9XTiwgS0VZX1BSRVZJT1VTLCAwLAotCQkJCQlLRVlfVVAsIEtFWV9ET1dOLCBLRVlfTEVGVCwKLQkJCQkJS0VZX1JJR0hULCBLRVlfVklERU8sIEtFWV9BVURJTywKLQkJCQkJS0VZX01IUCwgS0VZX0VQRywgS0VZX1RWLAotCQkJCQkwLCBLRVlfTkVYVFNPTkcsIEtFWV9FWElULAotCQkJCQlLRVlfQ0hBTk5FTFVQLCAJS0VZX0NIQU5ORUxET1dOLAotCQkJCQlLRVlfQ0hBTk5FTCwgMCwKLQkJCQkJS0VZX1BSRVZJT1VTU09ORywgS0VZX0VOVEVSLAotCQkJCQlLRVlfU0xFRVAsIDAsIDAsIEtFWV9CTFVFLAotCQkJCQkwLCAwLCAwLCAwLCBLRVlfR1JFRU4sIDAsCi0JCQkJCUtFWV9QQVVTRSwgMCwgS0VZX1JFV0lORCwKLQkJCQkJMCwgS0VZX0ZBU1RGT1JXQVJELCBLRVlfUExBWSwKLQkJCQkJS0VZX1NUT1AsIEtFWV9SRUNPUkQsCi0JCQkJCUtFWV9ZRUxMT1csIDAsIDAsIEtFWV9TRUxFQ1QsCi0JCQkJCUtFWV9aT09NLCBLRVlfUE9XRVIsIDAsIDAKLQkJCX0KLQkJfSwKLQkJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCi19OwotCi1zdGF0aWMgdTMyIGlyX3BvczsKLXN0YXRpYyB1MzIgaXJfd29yZDsKLXN0YXRpYyB1MzIgaXJfdG9nZ2xlOwotCi0jZGVmaW5lIFJDNV9QVVNIX0JJVChkc3QsIGJpdCwgcG9zKQlcCi0JeyBkc3QgPDw9IDE7IGRzdCB8PSBiaXQ7IHBvcysrOyB9Ci0KLQotc3RhdGljIHZvaWQgc21zX2lyX3JjNV9ldmVudChzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwKLQkJCQl1MzIgdG9nZ2xlLCB1MzIgYWRkciwgdTMyIGNtZCkKLXsKLQlib29sIHRvZ2dsZV9jaGFuZ2VkOwotCXUxNiBrZXljb2RlOwotCi0Jc21zX2xvZygiSVIgUkM1IHdvcmQ6IGFkZHJlc3MgJWQsIGNvbW1hbmQgJWQsIHRvZ2dsZSAlZCIsCi0JCQkJYWRkciwgY21kLCB0b2dnbGUpOwotCi0JdG9nZ2xlX2NoYW5nZWQgPSBpcl90b2dnbGUgIT0gdG9nZ2xlOwotCS8qIGtlZXAgdG9nZ2xlICovCi0JaXJfdG9nZ2xlID0gdG9nZ2xlOwotCi0JaWYgKGFkZHIgIT0KLQkJa2V5Ym9hcmRfbGF5b3V0X21hcHNbY29yZWRldi0+aXIuaXJfa2JfdHlwZV0ucmM1X2tiZF9hZGRyZXNzKQotCQlyZXR1cm47IC8qIENoZWNrIGZvciB2YWxpZCBhZGRyZXNzICovCi0KLQlrZXljb2RlID0KLQkJa2V5Ym9hcmRfbGF5b3V0X21hcHMKLQkJW2NvcmVkZXYtPmlyLmlyX2tiX3R5cGVdLmtleWJvYXJkX2xheW91dF9tYXBbY21kXTsKLQotCWlmICghdG9nZ2xlX2NoYW5nZWQgJiYKLQkJCShrZXljb2RlICE9IEtFWV9WT0xVTUVVUCAmJiBrZXljb2RlICE9IEtFWV9WT0xVTUVET1dOKSkKLQkJcmV0dXJuOyAvKiBhY2NlcHQgb25seSByZXBlYXRlZCB2b2x1bWUsIHJlamVjdCBvdGhlciBrZXlzICovCi0KLQlzbXNfbG9nKCJrZXJuZWwgaW5wdXQga2V5Y29kZSAoZnJvbSBpcikgJWQiLCBrZXljb2RlKTsKLQlpbnB1dF9yZXBvcnRfa2V5KGNvcmVkZXYtPmlyLmlucHV0X2Rldiwga2V5Y29kZSwgMSk7Ci0JaW5wdXRfc3luYyhjb3JlZGV2LT5pci5pbnB1dF9kZXYpOwotCi19Ci0KLS8qIGRlY29kZSByYXcgYml0IHBhdHRlcm4gdG8gUkM1IGNvZGUgKi8KLS8qIHRha2VuIGZyb20gaXItZnVuY3Rpb25zLmMgKi8KLXN0YXRpYyB1MzIgaXJfcmM1X2RlY29kZSh1bnNpZ25lZCBpbnQgY29kZSkKLXsKLS8qCXVuc2lnbmVkIGludCBvcmdfY29kZSA9IGNvZGU7Ki8KLQl1bnNpZ25lZCBpbnQgcGFpcjsKLQl1bnNpZ25lZCBpbnQgcmM1ID0gMDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAxNDsgKytpKSB7Ci0JCXBhaXIgPSBjb2RlICYgMHgzOwotCQljb2RlID4+PSAyOwotCi0JCXJjNSA8PD0gMTsKLQkJc3dpdGNoIChwYWlyKSB7Ci0JCWNhc2UgMDoKLQkJY2FzZSAyOgotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCXJjNSB8PSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLS8qCWRwcmludGsoMSwgImlyLWNvbW1vbjogaXJfcmM1X2RlY29kZSgleCkgYmFkIGNvZGVcbiIsIG9yZ19jb2RlKTsqLwotCQkJc21zX2xvZygiYmFkIGNvZGUiKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfQotLyoKLQlkcHJpbnRrKDEsICJpci1jb21tb246IGNvZGU9JXgsIHJjNT0leCwgc3RhcnQ9JXgsCi0JCXRvZ2dsZT0leCwgYWRkcmVzcz0leCwgIgotCQkiaW5zdHI9JXhcbiIsIHJjNSwgb3JnX2NvZGUsIFJDNV9TVEFSVChyYzUpLAotCQlSQzVfVE9HR0xFKHJjNSksIFJDNV9BRERSKHJjNSksIFJDNV9JTlNUUihyYzUpKTsKLSovCi0JcmV0dXJuIHJjNTsKLX0KLQotc3RhdGljIHZvaWQgc21zX3JjNV9wYXJzZV93b3JkKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2KQotewotCSNkZWZpbmUgUkM1X1NUQVJUKHgpICAgICgoKHgpPj4xMikmMykKLQkjZGVmaW5lIFJDNV9UT0dHTEUoeCkgICAoKCh4KT4+MTEpJjEpCi0JI2RlZmluZSBSQzVfQUREUih4KSAgICAgKCgoeCk+PjYpJjB4MUYpCi0JI2RlZmluZSBSQzVfSU5TVFIoeCkgICAgKCh4KSYweDNGKQotCi0JaW50IGksIGo7Ci0JdTMyIHJjNV93b3JkID0gMDsKLQotCS8qIFJldmVyc2UgdGhlIElSIHdvcmQgZGlyZWN0aW9uICovCi0JZm9yIChpID0gMCA7IGkgPCAyOCA7IGkrKykKLQkJUkM1X1BVU0hfQklUKHJjNV93b3JkLCAoaXJfd29yZD4+aSkmMSwgaikKLQotCXJjNV93b3JkID0gaXJfcmM1X2RlY29kZShyYzVfd29yZCk7Ci0JLyogc21zX2xvZygidGVtcCA9IDB4JXgsIHJjNV9jb2RlID0gMHgleCIsIGlyX3dvcmQsIHJjNV93b3JkKTsgKi8KLQotCXNtc19pcl9yYzVfZXZlbnQoY29yZWRldiwKLQkJCQlSQzVfVE9HR0xFKHJjNV93b3JkKSwKLQkJCQlSQzVfQUREUihyYzVfd29yZCksCi0JCQkJUkM1X0lOU1RSKHJjNV93b3JkKSk7Ci19Ci0KLQotc3RhdGljIHZvaWQgc21zX3JjNV9hY2N1bXVsYXRlX2JpdHMoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsCi0JCXMzMiBpcl9zYW1wbGUpCi17Ci0JI2RlZmluZSBSQzVfVElNRV9HUkFOVUxBUklUWQkyMDAKLQkjZGVmaW5lIFJDNV9ERUZfQklUX1RJTUUJCTg4OQotCSNkZWZpbmUgUkM1X01BWF9TQU1FX0JJVF9DT05UCTQKLQkjZGVmaW5lIFJDNV9XT1JEX0xFTgkJCTI3IC8qIDI4IGJpdCAqLwotCi0JdTMyIGksIGo7Ci0JczMyIGRlbHRhX3RpbWU7Ci0JdTMyIHRpbWUgPSAoaXJfc2FtcGxlID4gMCkgPyBpcl9zYW1wbGUgOiAoMC1pcl9zYW1wbGUpOwotCXUzMiBsZXZlbCA9IChpcl9zYW1wbGUgPCAwKSA/IDAgOiAxOwotCi0JZm9yIChpID0gUkM1X01BWF9TQU1FX0JJVF9DT05UOyBpID4gMDsgaS0tKSB7Ci0JCWRlbHRhX3RpbWUgPSB0aW1lIC0gKGkqUkM1X0RFRl9CSVRfVElNRSkgKyBSQzVfVElNRV9HUkFOVUxBUklUWTsKLQkJaWYgKGRlbHRhX3RpbWUgPCAwKQotCQkJY29udGludWU7IC8qIG5vdCBzbyBtYW55IGNvbnNlY3V0aXZlIGJpdHMgKi8KLQkJaWYgKGRlbHRhX3RpbWUgPiAoMiAqIFJDNV9USU1FX0dSQU5VTEFSSVRZKSkgewotCQkJLyogdGltZW91dCAqLwotCQkJaWYgKGlyX3BvcyA9PSAoUkM1X1dPUkRfTEVOLTEpKQotCQkJCS8qIGNvbXBsZXRlIGxhc3QgYml0ICovCi0JCQkJUkM1X1BVU0hfQklUKGlyX3dvcmQsIGxldmVsLCBpcl9wb3MpCi0KLQkJCWlmIChpcl9wb3MgPT0gUkM1X1dPUkRfTEVOKQotCQkJCXNtc19yYzVfcGFyc2Vfd29yZChjb3JlZGV2KTsKLQkJCWVsc2UgaWYgKGlyX3BvcykgLyogdGltZW91dCB3aXRoaW4gYSB3b3JkICovCi0JCQkJc21zX2xvZygiSVIgZXJyb3IgcGFyc2luZyBhIHdvcmQiKTsKLQotCQkJaXJfcG9zID0gMDsKLQkJCWlyX3dvcmQgPSAwOwotCQkJLyogc21zX2xvZygidGltZW91dCAlZCIsIHRpbWUpOyAqLwotCQkJYnJlYWs7Ci0JCX0KLQkJLyogVGhlIHRpbWUgaXMgd2l0aGluIHRoZSByYW5nZSBvZiB0aGlzIG51bWJlciBvZiBiaXRzICovCi0JCWZvciAoaiA9IDAgOyBqIDwgaSA7IGorKykKLQkJCVJDNV9QVVNIX0JJVChpcl93b3JkLCBsZXZlbCwgaXJfcG9zKQotCi0JCWJyZWFrOwotCX0KLX0KKyNkZWZpbmUgTU9EVUxFX05BTUUgInNtc21kdHYiCiAKIHZvaWQgc21zX2lyX2V2ZW50KHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LCBjb25zdCBjaGFyICpidWYsIGludCBsZW4pCiB7Ci0JI2RlZmluZSBJUl9EQVRBX1JFQ0VJVkVfTUFYX0xFTgk1MjAgLyogMTI4KjQgKyA0ICsgNCAqLwotCXUzMiBpOwotCWVudW0gaXJfcHJvdG9jb2wgaXJfcHJvdG9jb2wgPQotCQkJa2V5Ym9hcmRfbGF5b3V0X21hcHNbY29yZWRldi0+aXIuaXJfa2JfdHlwZV0KLQkJCQkJICAgICAuaXJfcHJvdG9jb2w7Ci0JczMyICpzYW1wbGVzOwotCWludCBjb3VudCA9IGxlbj4+MjsKKwlpbnQgaTsKKwljb25zdCBzMzIgKnNhbXBsZXMgPSAoY29uc3Qgdm9pZCAqKWJ1ZjsKIAotCXNhbXBsZXMgPSAoczMyICopYnVmOwotLyoJc21zX2xvZygiSVIgYnVmZmVyIHJlY2VpdmVkLCBsZW5ndGggPSAlZCIsIGNvdW50KTsqLworCWZvciAoaSA9IDA7IGkgPCBsZW4gPj4gMjsgaSsrKSB7CisJCXN0cnVjdCBpcl9yYXdfZXZlbnQgZXY7CiAKLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLQkJaWYgKGlyX3Byb3RvY29sID09IElSX1JDNSkKLQkJCXNtc19yYzVfYWNjdW11bGF0ZV9iaXRzKGNvcmVkZXYsIHNhbXBsZXNbaV0pOwotCS8qICBJUl9SQ01NIG5vdCBpbXBsZW1lbnRlZCAqLworCQlldi5kdXJhdGlvbiA9IGFicyhzYW1wbGVzW2ldKSAqIDEwMDA7IC8qIENvbnZlcnQgdG8gbnMgKi8KKwkJZXYucHVsc2UgPSAoc2FtcGxlc1tpXSA+IDApID8gZmFsc2UgOiB0cnVlOworCisJCWlyX3Jhd19ldmVudF9zdG9yZShjb3JlZGV2LT5pci5pbnB1dF9kZXYsICZldik7CisJfQorCWlyX3Jhd19ldmVudF9oYW5kbGUoY29yZWRldi0+aXIuaW5wdXRfZGV2KTsKIH0KIAogaW50IHNtc19pcl9pbml0KHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2KQogewogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKKwlpbnQgYm9hcmRfaWQgPSBzbXNjb3JlX2dldF9ib2FyZF9pZChjb3JlZGV2KTsKIAogCXNtc19sb2coIkFsbG9jYXRpbmcgaW5wdXQgZGV2aWNlIik7CiAJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CkBAIC0yNTYsMzMgKzYzLDM4IEBACiAJfQogCiAJY29yZWRldi0+aXIuaW5wdXRfZGV2ID0gaW5wdXRfZGV2OwotCWNvcmVkZXYtPmlyLmlyX2tiX3R5cGUgPQotCQlzbXNfZ2V0X2JvYXJkKHNtc2NvcmVfZ2V0X2JvYXJkX2lkKGNvcmVkZXYpKS0+aXJfa2JfdHlwZTsKLQljb3JlZGV2LT5pci5rZXlib2FyZF9sYXlvdXRfbWFwID0KLQkJa2V5Ym9hcmRfbGF5b3V0X21hcHNbY29yZWRldi0+aXIuaXJfa2JfdHlwZV0uCi0JCQkJa2V5Ym9hcmRfbGF5b3V0X21hcDsKLQlzbXNfbG9nKCJJUiByZW1vdGUga2V5Ym9hcmQgdHlwZSBpcyAlZCIsIGNvcmVkZXYtPmlyLmlyX2tiX3R5cGUpOwogCiAJY29yZWRldi0+aXIuY29udHJvbGxlciA9IDA7CS8qIFRvZG86IHZlZ2Evbm92YSBTUEkgbnVtYmVyICovCiAJY29yZWRldi0+aXIudGltZW91dCA9IElSX0RFRkFVTFRfVElNRU9VVDsKIAlzbXNfbG9nKCJJUiBwb3J0ICVkLCB0aW1lb3V0ICVkIG1zIiwKIAkJCWNvcmVkZXYtPmlyLmNvbnRyb2xsZXIsIGNvcmVkZXYtPmlyLnRpbWVvdXQpOwogCi0Jc25wcmludGYoY29yZWRldi0+aXIubmFtZSwKLQkJCQlJUl9ERVZfTkFNRV9NQVhfTEVOLAotCQkJCSJTTVMgSVIgdy9rYmQgdHlwZSAlZCIsCi0JCQkJY29yZWRldi0+aXIuaXJfa2JfdHlwZSk7CisJc25wcmludGYoY29yZWRldi0+aXIubmFtZSwgc2l6ZW9mKGNvcmVkZXYtPmlyLm5hbWUpLAorCQkgIlNNUyBJUiAoJXMpIiwgc21zX2dldF9ib2FyZChib2FyZF9pZCktPm5hbWUpOworCisJc3RybGNweShjb3JlZGV2LT5pci5waHlzLCBjb3JlZGV2LT5kZXZwYXRoLCBzaXplb2YoY29yZWRldi0+aXIucGh5cykpOworCXN0cmxjYXQoY29yZWRldi0+aXIucGh5cywgIi9pcjAiLCBzaXplb2YoY29yZWRldi0+aXIucGh5cykpOworCiAJaW5wdXRfZGV2LT5uYW1lID0gY29yZWRldi0+aXIubmFtZTsKLQlpbnB1dF9kZXYtPnBoeXMgPSBjb3JlZGV2LT5pci5uYW1lOworCWlucHV0X2Rldi0+cGh5cyA9IGNvcmVkZXYtPmlyLnBoeXM7CiAJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gY29yZWRldi0+ZGV2aWNlOwogCi0JLyogS2V5IHByZXNzIGV2ZW50cyBvbmx5ICovCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSk7Ci0JaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROXzApXSA9IEJJVF9NQVNLKEJUTl8wKTsKKyNpZiAwCisJLyogVE9ETzogcHJvcGVybHkgaW5pdGlhbGl6ZSB0aGUgcGFyYW1ldGVycyBiZWxsb3cgKi8KKwlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfVVNCOworCWlucHV0X2Rldi0+aWQudmVyc2lvbiA9IDE7CisJaW5wdXRfZGV2LT5pZC52ZW5kb3IgPSBsZTE2X3RvX2NwdShkZXYtPnVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOworCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IGxlMTZfdG9fY3B1KGRldi0+dWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworI2VuZGlmCisKKwljb3JlZGV2LT5pci5wcm9wcy5wcml2ID0gY29yZWRldjsKKwljb3JlZGV2LT5pci5wcm9wcy5kcml2ZXJfdHlwZSA9IFJDX0RSSVZFUl9JUl9SQVc7CisJY29yZWRldi0+aXIucHJvcHMuYWxsb3dlZF9wcm90b3MgPSBJUl9UWVBFX0FMTDsKIAogCXNtc19sb2coIklucHV0IGRldmljZSAoSVIpICVzIGlzIHNldCBmb3Iga2V5IGV2ZW50cyIsIGlucHV0X2Rldi0+bmFtZSk7CiAKLQlpZiAoaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2RldikpIHsKKwlpZiAoaXJfaW5wdXRfcmVnaXN0ZXIoaW5wdXRfZGV2LCBzbXNfZ2V0X2JvYXJkKGJvYXJkX2lkKS0+cmNfY29kZXMsCisJCQkgICAgICAmY29yZWRldi0+aXIucHJvcHMsIE1PRFVMRV9OQU1FKSkgewogCQlzbXNfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGV2aWNlIik7CiAJCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CiAJCXJldHVybiAtRUFDQ0VTOwpAQCAtMjk0LDggKzEwNiw3IEBACiB2b2lkIHNtc19pcl9leGl0KHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2KQogewogCWlmIChjb3JlZGV2LT5pci5pbnB1dF9kZXYpCi0JCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGNvcmVkZXYtPmlyLmlucHV0X2Rldik7CisJCWlyX2lucHV0X3VucmVnaXN0ZXIoY29yZWRldi0+aXIuaW5wdXRfZGV2KTsKIAogCXNtc19sb2coIiIpOwogfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNpci5oIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zaXIuaAppbmRleCBiN2Q3MDNlLi45MjZlMjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNpci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2lyLmgKQEAgLTQsNiArNCwxMSBAQAogTURUViByZWNlaXZlciBrZXJuZWwgbW9kdWxlcy4KIENvcHlyaWdodCAoQykgMjAwNi0yMDA5LCBVcmkgU2hrb2xuaWsKIAorIENvcHlyaWdodCAoYykgMjAxMCAtIE1hdXJvIENhcnZhbGhvIENoZWhhYgorCS0gUG9ydGVkIHRoZSBkcml2ZXIgdG8gdXNlIHJjLWNvcmUKKwktIElSIHJhdyBldmVudCBkZWNvZGluZyBpcyBub3cgZG9uZSBhdCByYy1jb3JlCisJLSBDb2RlIGFsbW9zdCByZS13cml0dGVuCisKIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKQEAgLTIzLDYzICsyOCwyMSBAQAogI2RlZmluZSBfX1NNU19JUl9IX18KIAogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bWVkaWEvaXItY29yZS5oPgogCi0jZGVmaW5lIElSX0RFVl9OQU1FX01BWF9MRU4JCTIzIC8qICJTTVMgSVIga2JkIHR5cGUgbm5cMCIgKi8KLSNkZWZpbmUgSVJfS0VZQk9BUkRfTEFZT1VUX1NJWkUJNjQKICNkZWZpbmUgSVJfREVGQVVMVF9USU1FT1VUCQkxMDAKIAotZW51bSBpcl9rYl90eXBlIHsKLQlTTVNfSVJfS0JfREVGQVVMVF9UViwKLQlTTVNfSVJfS0JfSENXX1NJTFZFUgotfTsKLQotZW51bSByYzVfa2V5Ym9hcmRfYWRkcmVzcyB7Ci0JS0VZQk9BUkRfQUREUkVTU19UVjEgPSAwLAotCUtFWUJPQVJEX0FERFJFU1NfVFYyID0gMSwKLQlLRVlCT0FSRF9BRERSRVNTX1RFTEVURVhUID0gMiwKLQlLRVlCT0FSRF9BRERSRVNTX1ZJREVPID0gMywKLQlLRVlCT0FSRF9BRERSRVNTX0xWMSA9IDQsCi0JS0VZQk9BUkRfQUREUkVTU19WQ1IxID0gNSwKLQlLRVlCT0FSRF9BRERSRVNTX1ZDUjIgPSA2LAotCUtFWUJPQVJEX0FERFJFU1NfRVhQRVJJTUVOVEFMID0gNywKLQlLRVlCT0FSRF9BRERSRVNTX1NBVDEgPSA4LAotCUtFWUJPQVJEX0FERFJFU1NfQ0FNRVJBID0gOSwKLQlLRVlCT0FSRF9BRERSRVNTX1NBVDIgPSAxMCwKLQlLRVlCT0FSRF9BRERSRVNTX0NEViA9IDEyLAotCUtFWUJPQVJEX0FERFJFU1NfQ0FNQ09SREVSID0gMTMsCi0JS0VZQk9BUkRfQUREUkVTU19QUkVfQU1QID0gMTYsCi0JS0VZQk9BUkRfQUREUkVTU19UVU5FUiA9IDE3LAotCUtFWUJPQVJEX0FERFJFU1NfUkVDT1JERVIxID0gMTgsCi0JS0VZQk9BUkRfQUREUkVTU19QUkVfQU1QMSA9IDE5LAotCUtFWUJPQVJEX0FERFJFU1NfQ0RfUExBWUVSID0gMjAsCi0JS0VZQk9BUkRfQUREUkVTU19QSE9OTyA9IDIxLAotCUtFWUJPQVJEX0FERFJFU1NfU0FUQSA9IDIyLAotCUtFWUJPQVJEX0FERFJFU1NfUkVDT1JERVIyID0gMjMsCi0JS0VZQk9BUkRfQUREUkVTU19DRFIgPSAyNiwKLQlLRVlCT0FSRF9BRERSRVNTX0xJR0hUSU5HID0gMjksCi0JS0VZQk9BUkRfQUREUkVTU19MSUdIVElORzEgPSAzMCwgLyogS0VZQk9BUkRfQUREUkVTU19IQ1dfU0lMVkVSICovCi0JS0VZQk9BUkRfQUREUkVTU19QSE9ORSA9IDMxLAotCUtFWUJPQVJEX0FERFJFU1NfTk9UX1JDNSA9IDB4RkZGRgotfTsKLQotZW51bSBpcl9wcm90b2NvbCB7Ci0JSVJfUkM1LAotCUlSX1JDTU0KLX07Ci0KLXN0cnVjdCBrZXlib2FyZF9sYXlvdXRfbWFwX3QgewotCWVudW0gaXJfcHJvdG9jb2wgaXJfcHJvdG9jb2w7Ci0JZW51bSByYzVfa2V5Ym9hcmRfYWRkcmVzcyByYzVfa2JkX2FkZHJlc3M7Ci0JdTE2IGtleWJvYXJkX2xheW91dF9tYXBbSVJfS0VZQk9BUkRfTEFZT1VUX1NJWkVdOwotfTsKLQogc3RydWN0IHNtc2NvcmVfZGV2aWNlX3Q7CiAKIHN0cnVjdCBpcl90IHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7Ci0JZW51bSBpcl9rYl90eXBlIGlyX2tiX3R5cGU7Ci0JY2hhciBuYW1lW0lSX0RFVl9OQU1FX01BWF9MRU4rMV07Ci0JdTE2ICprZXlib2FyZF9sYXlvdXRfbWFwOworCWNoYXIgbmFtZVs0MF07CisJY2hhciBwaHlzWzMyXTsKKworCWNoYXIgKnJjX2NvZGVzOworCXU2NCBwcm90b2NvbDsKKwlzdHJ1Y3QgaXJfZGV2X3Byb3BzIHByb3BzOworCiAJdTMyIHRpbWVvdXQ7CiAJdTMyIGNvbnRyb2xsZXI7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zdXNiLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXN1c2IuYwppbmRleCBhOWMyN2ZiLi41MGQ0MzM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXN1c2IuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXN1c2IuYwpAQCAtMzUyLDggKzM1Miw3IEBACiAJcGFyYW1zLm51bV9idWZmZXJzID0gTUFYX0JVRkZFUlM7CiAJcGFyYW1zLnNlbmRyZXF1ZXN0X2hhbmRsZXIgPSBzbXN1c2Jfc2VuZHJlcXVlc3Q7CiAJcGFyYW1zLmNvbnRleHQgPSBkZXY7Ci0Jc25wcmludGYocGFyYW1zLmRldnBhdGgsIHNpemVvZihwYXJhbXMuZGV2cGF0aCksCi0JCSAidXNiXFwlZC0lcyIsIGRldi0+dWRldi0+YnVzLT5idXNudW0sIGRldi0+dWRldi0+ZGV2cGF0aCk7CisJdXNiX21ha2VfcGF0aChkZXYtPnVkZXYsIHBhcmFtcy5kZXZwYXRoLCBzaXplb2YocGFyYW1zLmRldnBhdGgpKTsKIAogCS8qIHJlZ2lzdGVyIGluIHNtc2NvcmUgKi8KIAlyYyA9IHNtc2NvcmVfcmVnaXN0ZXJfZGV2aWNlKCZwYXJhbXMsICZkZXYtPmNvcmVkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LWNvbW1vbi5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LWNvbW1vbi5jCmluZGV4IDQ3MDc1ZmMuLjk5MjdhNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzB4L3JhZGlvLXNpNDcweC1jb21tb24uYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtY29tbW9uLmMKQEAgLTc0OCw3ICs3NDgsNyBAQAogCQlzdHJ1Y3QgdjRsMl90dW5lciAqdHVuZXIpCiB7CiAJc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQlpbnQgcmV0dmFsID0gLUVJTlZBTDsKKwlpbnQgcmV0dmFsID0gMDsKIAogCS8qIHNhZmV0eSBjaGVja3MgKi8KIAlyZXR2YWwgPSBzaTQ3MHhfZGlzY29ubmVjdF9jaGVjayhyYWRpbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcxMy1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzEzLWkyYy5jCmluZGV4IGFiNjNkZDUuLmZjN2Y0YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzEzLWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzEzLWkyYy5jCkBAIC0xMDA5LDggKzEwMDksMTAgQEAKIAkJCWdvdG8gZXhpdDsKIAkJfQogCQlydmFsID0gY29weV9mcm9tX3VzZXIocHNfbmFtZSwgY29udHJvbC0+c3RyaW5nLCBsZW4pOwotCQlpZiAocnZhbCA8IDApCisJCWlmIChydmFsKSB7CisJCQlydmFsID0gLUVGQVVMVDsKIAkJCWdvdG8gZXhpdDsKKwkJfQogCQlwc19uYW1lW2xlbl0gPSAnXDAnOwogCiAJCWlmIChzdHJsZW4ocHNfbmFtZSkgJSB2cWMuc3RlcCkgewpAQCAtMTAzMSw4ICsxMDMzLDEwIEBACiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAkJcnZhbCA9IGNvcHlfZnJvbV91c2VyKHJhZGlvX3RleHQsIGNvbnRyb2wtPnN0cmluZywgbGVuKTsKLQkJaWYgKHJ2YWwgPCAwKQorCQlpZiAocnZhbCkgeworCQkJcnZhbCA9IC1FRkFVTFQ7CiAJCQlnb3RvIGV4aXQ7CisJCX0KIAkJcmFkaW9fdGV4dFtsZW5dID0gJ1wwJzsKIAogCQlpZiAoc3RybGVuKHJhZGlvX3RleHQpICUgdnFjLnN0ZXApIHsKQEAgLTEzNjcsNiArMTM3MSw4IEBACiAJCX0KIAkJcnZhbCA9IGNvcHlfdG9fdXNlcihjb250cm9sLT5zdHJpbmcsIHNkZXYtPnJkc19pbmZvLnBzX25hbWUsCiAJCQkJCXN0cmxlbihzZGV2LT5yZHNfaW5mby5wc19uYW1lKSArIDEpOworCQlpZiAocnZhbCkKKwkJCXJ2YWwgPSAtRUZBVUxUOwogCQlicmVhazsKIAogCWNhc2UgVjRMMl9DSURfUkRTX1RYX1JBRElPX1RFWFQ6CkBAIC0xMzc3LDYgKzEzODMsOCBAQAogCQl9CiAJCXJ2YWwgPSBjb3B5X3RvX3VzZXIoY29udHJvbC0+c3RyaW5nLCBzZGV2LT5yZHNfaW5mby5yYWRpb190ZXh0LAogCQkJCQlzdHJsZW4oc2Rldi0+cmRzX2luZm8ucmFkaW9fdGV4dCkgKyAxKTsKKwkJaWYgKHJ2YWwpCisJCQlydmFsID0gLUVGQVVMVDsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCmluZGV4IGJkYmM5ZDMuLjJlMTU5MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKQEAgLTUxNywxOSArNTE3LDYgQEAKIAogZW5kbWVudSAjIGVuY29kZXIgLyBkZWNvZGVyIGNoaXBzCiAKLWNvbmZpZyBESVNQTEFZX0RBVklOQ0lfRE02NDZYX0VWTQotCXRyaXN0YXRlICJETTY0NnggRVZNIFZpZGVvIERpc3BsYXkiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgTUFDSF9EQVZJTkNJX0RNNjQ2N19FVk0KLQlzZWxlY3QgVklERU9CVUZfRE1BX0NPTlRJRwotCXNlbGVjdCBWSURFT19EQVZJTkNJX1ZQSUYKLQlzZWxlY3QgVklERU9fQURWNzM0MwotCXNlbGVjdCBWSURFT19USFM3MzAzCi0JaGVscAotCSAgU3VwcG9ydCBmb3IgRE02NDY3IGJhc2VkIGRpc3BsYXkgZGV2aWNlLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2cGlmX2Rpc3BsYXkuCi0KIGNvbmZpZyBWSURFT19TSF9WT1UKIAl0cmlzdGF0ZSAiU3VwZXJIIFZPVSB2aWRlbyBvdXRwdXQgZHJpdmVyIgogCWRlcGVuZHMgb24gVklERU9fREVWICYmIEFSQ0hfU0hNT0JJTEUKQEAgLTUzNywyOSArNTI0LDIyIEBACiAJaGVscAogCSAgU3VwcG9ydCBmb3IgdGhlIFZpZGVvIE91dHB1dCBVbml0IChWT1UpIG9uIFN1cGVySCBTb0NzLgogCi1jb25maWcgQ0FQVFVSRV9EQVZJTkNJX0RNNjQ2WF9FVk0KLQl0cmlzdGF0ZSAiRE02NDZ4IEVWTSBWaWRlbyBDYXB0dXJlIgotCWRlcGVuZHMgb24gVklERU9fREVWICYmIE1BQ0hfREFWSU5DSV9ETTY0NjdfRVZNCitjb25maWcgVklERU9fVklVCisJdHJpc3RhdGUgIkZyZWVzY2FsZSBWSVUgVmlkZW8gRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBQUENfTVBDNTEyeAogCXNlbGVjdCBWSURFT0JVRl9ETUFfQ09OVElHCi0Jc2VsZWN0IFZJREVPX0RBVklOQ0lfVlBJRgotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIERNNjQ2NyBiYXNlZCBjYXB0dXJlIGRldmljZS4KKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciBGcmVlc2NhbGUgVklVIHZpZGVvIGRyaXZlci4gVGhpcyBkZXZpY2UgY2FwdHVyZXMKKwkgIHZpZGVvIGRhdGEsIG9yIG92ZXJsYXlzIHZpZGVvIG9uIERJVSBmcmFtZSBidWZmZXIuCiAKLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZwaWZfY2FwdHVyZS4KLQotY29uZmlnIFZJREVPX0RBVklOQ0lfVlBJRgotCXRyaXN0YXRlICJEYVZpbmNpIFZQSUYgRHJpdmVyIgotCWRlcGVuZHMgb24gRElTUExBWV9EQVZJTkNJX0RNNjQ2WF9FVk0KLQloZWxwCi0JICBTdXBwb3J0IGZvciBEYVZpbmNpIFZQSUYgRHJpdmVyLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2cGlmLgorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgVklVIGRldmljZSBvbiBNUEM1MTIxZSBSZXYyKy4KKwkgIEluIGRvdWJ0LCBzYXkgTi4KIAogY29uZmlnIFZJREVPX1ZJVkkKIAl0cmlzdGF0ZSAiVmlydHVhbCBWaWRlbyBEcml2ZXIiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgVklERU9fVjRMMiAmJiAhU1BBUkMzMiAmJiAhU1BBUkM2NCAmJiBGT05UUworCWRlcGVuZHMgb24gVklERU9fREVWICYmIFZJREVPX1Y0TDIgJiYgIVNQQVJDMzIgJiYgIVNQQVJDNjQKKwlkZXBlbmRzIG9uIChGUkFNRUJVRkZFUl9DT05TT0xFIHx8IFNUSV9DT05TT0xFKSAmJiBGT05UUwogCXNlbGVjdCBGT05UXzh4MTYKIAlzZWxlY3QgVklERU9CVUZfVk1BTExPQwogCWRlZmF1bHQgbgpAQCAtNTcwLDY2ICs1NTAsNyBAQAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB0ZXN0IHZpZGVvIGFwcHMgb3IgZGVidWcgVjRMIGRldmljZXMuCiAJICBJbiBkb3VidCwgc2F5IE4uCiAKLWNvbmZpZyBWSURFT19WUFNTX1NZU1RFTQotCXRyaXN0YXRlICJWUFNTIFN5c3RlbSBtb2R1bGUgZHJpdmVyIgotCWRlcGVuZHMgb24gQVJDSF9EQVZJTkNJCi0JaGVscAotCSAgU3VwcG9ydCBmb3IgdnBzcyBzeXN0ZW0gbW9kdWxlIGZvciB2aWRlbyBkcml2ZXIKLQotY29uZmlnIFZJREVPX1ZQRkVfQ0FQVFVSRQotCXRyaXN0YXRlICJWUEZFIFZpZGVvIENhcHR1cmUgRHJpdmVyIgotCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBBUkNIX0RBVklOQ0kKLQlzZWxlY3QgVklERU9CVUZfRE1BX0NPTlRJRwotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIERNWFhYWCBWUEZFIGJhc2VkIGZyYW1lIGdyYWJiZXIuIFRoaXMgaXMgdGhlCi0JICBjb21tb24gVjRMMiBtb2R1bGUgZm9yIGZvbGxvd2luZyBETVhYWCBTb0NzIGZyb20gVGV4YXMKLQkgIEluc3RydW1lbnRzOi0gRE02NDQ2ICYgRE0zNTUuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZwZmUtY2FwdHVyZS4KLQotY29uZmlnIFZJREVPX0RNNjQ0Nl9DQ0RDCi0JdHJpc3RhdGUgIkRNNjQ0NiBDQ0RDIEhXIG1vZHVsZSIKLQlkZXBlbmRzIG9uIEFSQ0hfREFWSU5DSV9ETTY0NHggJiYgVklERU9fVlBGRV9DQVBUVVJFCi0Jc2VsZWN0IFZJREVPX1ZQU1NfU1lTVEVNCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgIEVuYWJsZXMgRGFWaW5jaSBDQ0QgaHcgbW9kdWxlLiBEYVZpbmNpIENDREMgaHcgaW50ZXJmYWNlcwotCSAgIHdpdGggZGVjb2RlciBtb2R1bGVzIHN1Y2ggYXMgVFZQNTE0NiBvdmVyIEJUNjU2IG9yCi0JICAgc2Vuc29yIG1vZHVsZSBzdWNoIGFzIE1UOVQwMDEgb3ZlciBhIHJhdyBpbnRlcmZhY2UuIFRoaXMKLQkgICBtb2R1bGUgY29uZmlndXJlcyB0aGUgaW50ZXJmYWNlIGFuZCBDQ0RDL0lTSUYgdG8gZG8KLQkgICB2aWRlbyBmcmFtZSBjYXB0dXJlIGZyb20gc2xhdmUgZGVjb2RlcnMuCi0KLQkgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdnBmZS4KLQotY29uZmlnIFZJREVPX0RNMzU1X0NDREMKLQl0cmlzdGF0ZSAiRE0zNTUgQ0NEQyBIVyBtb2R1bGUiCi0JZGVwZW5kcyBvbiBBUkNIX0RBVklOQ0lfRE0zNTUgJiYgVklERU9fVlBGRV9DQVBUVVJFCi0Jc2VsZWN0IFZJREVPX1ZQU1NfU1lTVEVNCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgIEVuYWJsZXMgRE0zNTUgQ0NEIGh3IG1vZHVsZS4gRE0zNTUgQ0NEQyBodyBpbnRlcmZhY2VzCi0JICAgd2l0aCBkZWNvZGVyIG1vZHVsZXMgc3VjaCBhcyBUVlA1MTQ2IG92ZXIgQlQ2NTYgb3IKLQkgICBzZW5zb3IgbW9kdWxlIHN1Y2ggYXMgTVQ5VDAwMSBvdmVyIGEgcmF3IGludGVyZmFjZS4gVGhpcwotCSAgIG1vZHVsZSBjb25maWd1cmVzIHRoZSBpbnRlcmZhY2UgYW5kIENDREMvSVNJRiB0byBkbwotCSAgIHZpZGVvIGZyYW1lIGNhcHR1cmUgZnJvbSBhIHNsYXZlIGRlY29kZXJzCi0KLQkgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdnBmZS4KLQotY29uZmlnIFZJREVPX0lTSUYKLQl0cmlzdGF0ZSAiSVNJRiBIVyBtb2R1bGUiCi0JZGVwZW5kcyBvbiBBUkNIX0RBVklOQ0lfRE0zNjUgJiYgVklERU9fVlBGRV9DQVBUVVJFCi0Jc2VsZWN0IFZJREVPX1ZQU1NfU1lTVEVNCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgIEVuYWJsZXMgSVNJRiBodyBtb2R1bGUuIFRoaXMgaXMgdGhlIGhhcmR3YXJlIG1vZHVsZSBmb3IKLQkgICBjb25maWd1cmluZyBJU0lGIGluIFZQRkUgdG8gY2FwdHVyZSBSYXcgQmF5ZXIgUkdCIGRhdGEgIGZyb20KLQkgICBhIGltYWdlIHNlbnNvciBvciBZVVYgZGF0YSBmcm9tIGEgWVVWIHNvdXJjZS4KLQotCSAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2cGZlLgorc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAvS2NvbmZpZyIKIApAQCAtOTU1LDYgKzg3NiwxMiBAQAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSB2NGwyIGRyaXZlciBmb3IgdGhlIFBYQTI3eCBRdWljayBDYXB0dXJlIEludGVyZmFjZQogCitjb25maWcgVklERU9fU0hfTU9CSUxFX0NTSTIKKwl0cmlzdGF0ZSAiU3VwZXJIIE1vYmlsZSBNSVBJIENTSS0yIEludGVyZmFjZSBkcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgU09DX0NBTUVSQSAmJiBIQVZFX0NMSworCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYSB2NGwyIGRyaXZlciBmb3IgdGhlIFN1cGVySCBNSVBJIENTSS0yIEludGVyZmFjZQorCiBjb25maWcgVklERU9fU0hfTU9CSUxFX0NFVQogCXRyaXN0YXRlICJTdXBlckggTW9iaWxlIENFVSBJbnRlcmZhY2UgZHJpdmVyIgogCWRlcGVuZHMgb24gVklERU9fREVWICYmIFNPQ19DQU1FUkEgJiYgSEFTX0RNQSAmJiBIQVZFX0NMSwpAQCAtOTY5LDYgKzg5NiwxOSBAQAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSB2NGwyIGRyaXZlciBmb3IgdGhlIFRJIE9NQVAyIGNhbWVyYSBjYXB0dXJlIGludGVyZmFjZQogCitjb25maWcgVklERU9fTVgyX0hPU1RTVVBQT1JUCisgICAgICAgIGJvb2wKKworY29uZmlnIFZJREVPX01YMgorCXRyaXN0YXRlICJpLk1YMjcvaS5NWDI1IENhbWVyYSBTZW5zb3IgSW50ZXJmYWNlIGRyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBTT0NfQ0FNRVJBICYmIChNQUNIX01YMjcgfHwgQVJDSF9NWDI1KQorCXNlbGVjdCBWSURFT0JVRl9ETUFfQ09OVElHCisJc2VsZWN0IFZJREVPX01YMl9IT1NUU1VQUE9SVAorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYSB2NGwyIGRyaXZlciBmb3IgdGhlIGkuTVgyNyBhbmQgdGhlIGkuTVgyNSBDYW1lcmEgU2Vuc29yCisJICBJbnRlcmZhY2UKKworCiAjCiAjIFVTQiBNdWx0aW1lZGlhIGRldmljZSBjb25maWd1cmF0aW9uCiAjCkBAIC0xMDAwLDYxICs5NDAsNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvS2NvbmZpZyIKIAotY29uZmlnIFZJREVPX09WQ0FNQ0hJUAotCXRyaXN0YXRlICJPbW5pVmlzaW9uIENhbWVyYSBDaGlwIHN1cHBvcnQgKERFUFJFQ0FURUQpIgotCWRlcGVuZHMgb24gSTJDICYmIFZJREVPX1Y0TDEKLQlkZWZhdWx0IG4KLQktLS1oZWxwLS0tCi0JICBUaGlzIGRyaXZlciBpcyBERVBSRUNBVEVEIHBsZWFzZSB1c2UgdGhlIGdzcGNhIG92NTE5IG1vZHVsZQotCSAgaW5zdGVhZC4gTm90ZSB0aGF0IGZvciB0aGUgb3Y1MTEgLyBvdjUxOCBzdXBwb3J0IG9mIHRoZSBnc3BjYSBtb2R1bGUKLQkgIHlvdSBuZWVkIGF0bGVhc3QgdmVyc2lvbiAwLjYuMCBvZiBsaWJ2NGwgYW5kIGZvciB0aGUgdzk5NjhjZgotCSAgYXRsZWFzdCB2ZXJzaW9uIDAuNi4zIG9mIGxpYnY0bC4KLQotCSAgU3VwcG9ydCBmb3IgdGhlIE9tbmlWaXNpb24gT1Y2eHh4IGFuZCBPVjd4eHggc2VyaWVzIG9mIGNhbWVyYSBjaGlwcy4KLQkgIFRoaXMgZHJpdmVyIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCB0aGUgb3Y1MTEgYW5kIHc5OTY4Y2YgVVNCCi0JICBjYW1lcmEgZHJpdmVycy4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgb3ZjYW1jaGlwLgotCi1jb25maWcgVVNCX1c5OTY4Q0YKLQl0cmlzdGF0ZSAiVVNCIFc5OTZbODddQ0YgSlBFRyBEdWFsIE1vZGUgQ2FtZXJhIHN1cHBvcnQgKERFUFJFQ0FURUQpIgotCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBJMkMgJiYgVklERU9fT1ZDQU1DSElQCi0JZGVmYXVsdCBuCi0JLS0taGVscC0tLQotCSAgVGhpcyBkcml2ZXIgaXMgREVQUkVDQVRFRCBwbGVhc2UgdXNlIHRoZSBnc3BjYSBvdjUxOSBtb2R1bGUKLQkgIGluc3RlYWQuIE5vdGUgdGhhdCBmb3IgdGhlIHc5OTY4Y2Ygc3VwcG9ydCBvZiB0aGUgZ3NwY2EgbW9kdWxlCi0JICB5b3UgbmVlZCBhdGxlYXN0IHZlcnNpb24gMC42LjMgb2YgbGlidjRsLgotCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gT1Y2ODEgb3IKLQkgIFdpbmJvbmQgVzk5NjdDRi9XOTk2OENGIEpQRUcgVVNCIER1YWwgTW9kZSBDYW1lcmEgQ2hpcHMuCi0KLQkgIFRoaXMgZHJpdmVyIGhhcyBhbiBvcHRpb25hbCBwbHVnaW4sIHdoaWNoIGlzIGRpc3RyaWJ1dGVkIGFzIGEKLQkgIHNlcGFyYXRlIG1vZHVsZSBvbmx5IChyZWxlYXNlZCB1bmRlciBHUEwpLiBJdCBhbGxvd3MgdG8gdXNlIGhpZ2hlcgotCSAgcmVzb2x1dGlvbnMgYW5kIGZyYW1lcmF0ZXMsIGJ1dCBjYW5ub3QgYmUgaW5jbHVkZWQgaW4gdGhlIG9mZmljaWFsCi0JICBMaW51eCBrZXJuZWwgZm9yIHBlcmZvcm1hbmNlIHB1cnBvc2VzLgotCi0JICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC93OTk2OGNmLnR4dD4gZm9yIG1vcmUgaW5mby4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdzk5NjhjZi4KLQotY29uZmlnIFVTQl9PVjUxMQotCXRyaXN0YXRlICJVU0IgT1Y1MTEgQ2FtZXJhIHN1cHBvcnQgKERFUFJFQ0FURUQpIgotCWRlcGVuZHMgb24gVklERU9fVjRMMQotCWRlZmF1bHQgbgotCS0tLWhlbHAtLS0KLQkgIFRoaXMgZHJpdmVyIGlzIERFUFJFQ0FURUQgcGxlYXNlIHVzZSB0aGUgZ3NwY2Egb3Y1MTkgbW9kdWxlCi0JICBpbnN0ZWFkLiBOb3RlIHRoYXQgZm9yIHRoZSBvdjUxMSAvIG92NTE4IHN1cHBvcnQgb2YgdGhlIGdzcGNhIG1vZHVsZQotCSAgeW91IG5lZWQgYXRsZWFzdCB2ZXJzaW9uIDAuNi4wIG9mIGxpYnY0bC4KLQotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IHRoaXMgdHlwZSBvZiBjYW1lcmEgdG8geW91cgotCSAgY29tcHV0ZXIncyBVU0IgcG9ydC4gU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvb3Y1MTEudHh0PgotCSAgZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGNhbWVyYXMuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG92NTExLgotCiBjb25maWcgVVNCX1NFNDAxCiAJdHJpc3RhdGUgIlVTQiBTRTQwMSBDYW1lcmEgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDEKQEAgLTEwNjgsMjUgKzk1Myw2IEBACiAKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL0tjb25maWciCiAKLWNvbmZpZyBVU0JfU1RWNjgwCi0JdHJpc3RhdGUgIlVTQiBTVFY2ODAgKFBlbmNhbSkgQ2FtZXJhIHN1cHBvcnQgKERFUFJFQ0FURUQpIgotCWRlcGVuZHMgb24gVklERU9fVjRMMQotCWRlZmF1bHQgbgotCS0tLWhlbHAtLS0KLQkgIFRoaXMgZHJpdmVyIGlzIERFUFJFQ0FURUQgcGxlYXNlIHVzZSB0aGUgZ3NwY2Egc3R2MDY4MCBtb2R1bGUKLQkgIGluc3RlYWQuIE5vdGUgdGhhdCBmb3IgdGhlIGdzcGNhIHN0djA2ODAgbW9kdWxlIHlvdSBuZWVkCi0JICBhdGxlYXN0IHZlcnNpb24gMC42LjMgb2YgbGlidjRsLgotCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdGhpcyB0eXBlIG9mIGNhbWVyYSB0byB5b3VyCi0JICBjb21wdXRlcidzIFVTQiBwb3J0LiBUaGlzIGluY2x1ZGVzIHRoZSBQZW5jYW0gbGluZSBvZiBjYW1lcmFzLgotCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvc3R2NjgwLnR4dD4gZm9yIG1vcmUgaW5mb3JtYXRpb24KLQkgIGFuZCBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCBjYW1lcmFzLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzdHY2ODAuCi0KLXNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvS2NvbmZpZyIKLQogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9LY29uZmlnIgogCiBjb25maWcgVVNCX1pSMzY0WFgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCmluZGV4IGNjOTM4NTkuLjEwNTFlY2M2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKQEAgLTEwNSw3ICsxMDUsNiBAQAogb2JqLSQoQ09ORklHX1ZJREVPX0NYMjMxWFgpICs9IGN4MjMxeHgvCiBvYmotJChDT05GSUdfVklERU9fVVNCVklTSU9OKSArPSB1c2J2aXNpb24vCiBvYmotJChDT05GSUdfVklERU9fUFZSVVNCMikgKz0gcHZydXNiMi8KLW9iai0kKENPTkZJR19WSURFT19PVkNBTUNISVApICs9IG92Y2FtY2hpcC8KIG9iai0kKENPTkZJR19WSURFT19DUElBMikgKz0gY3BpYTIvCiBvYmotJChDT05GSUdfVklERU9fTVhCKSArPSBteGIubwogb2JqLSQoQ09ORklHX1ZJREVPX0hFWElVTV9PUklPTikgKz0gaGV4aXVtX29yaW9uLm8KQEAgLTEyNywxNyArMTI2LDEzIEBACiBvYmotJChDT05GSUdfVklERU9fQ0FGRV9DQ0lDKSArPSBjYWZlX2NjaWMubwogCiBvYmotJChDT05GSUdfVVNCX0RBQlVTQikgICAgICAgICs9IGRhYnVzYi5vCi1vYmotJChDT05GSUdfVVNCX09WNTExKSAgICAgICAgICs9IG92NTExLm8KIG9iai0kKENPTkZJR19VU0JfU0U0MDEpICAgICAgICAgKz0gc2U0MDEubwotb2JqLSQoQ09ORklHX1VTQl9TVFY2ODApICAgICAgICArPSBzdHY2ODAubwotb2JqLSQoQ09ORklHX1VTQl9XOTk2OENGKSAgICAgICArPSB3OTk2OGNmLm8KIG9iai0kKENPTkZJR19VU0JfWlIzNjRYWCkgICAgICAgKz0genIzNjR4eC5vCiBvYmotJChDT05GSUdfVVNCX1NUS1dFQkNBTSkgICAgICs9IHN0a3dlYmNhbS5vCiAKIG9iai0kKENPTkZJR19VU0JfU045QzEwMikgICAgICAgKz0gc245YzEwMi8KIG9iai0kKENPTkZJR19VU0JfRVQ2MVgyNTEpICAgICAgKz0gZXQ2MXgyNTEvCiBvYmotJChDT05GSUdfVVNCX1BXQykgICAgICAgICAgICs9IHB3Yy8KLW9iai0kKENPTkZJR19VU0JfWkMwMzAxKSAgICAgICAgKz0gemMwMzAxLwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQSkgICAgICAgICArPSBnc3BjYS8KIAogb2JqLSQoQ09ORklHX1ZJREVPX0hEUFZSKQkrPSBoZHB2ci8KQEAgLTE1MSw2ICsxNDYsNyBAQAogb2JqLSQoQ09ORklHX1ZJREVPX0lWVFYpICs9IGl2dHYvCiBvYmotJChDT05GSUdfVklERU9fQ1gxOCkgKz0gY3gxOC8KIAorb2JqLSQoQ09ORklHX1ZJREVPX1ZJVSkgKz0gZnNsLXZpdS5vCiBvYmotJChDT05GSUdfVklERU9fVklWSSkgKz0gdml2aS5vCiBvYmotJChDT05GSUdfVklERU9fTUVNMk1FTV9URVNUREVWKSArPSBtZW0ybWVtX3Rlc3RkZXYubwogb2JqLSQoQ09ORklHX1ZJREVPX0NYMjM4ODUpICs9IGN4MjM4ODUvCkBAIC0xNjIsOCArMTU4LDEwIEBACiBvYmotJChDT05GSUdfU09DX0NBTUVSQV9QTEFURk9STSkJKz0gc29jX2NhbWVyYV9wbGF0Zm9ybS5vCiAjIHNvYy1jYW1lcmEgaG9zdCBkcml2ZXJzIGhhdmUgdG8gYmUgbGlua2VkIGFmdGVyIGNhbWVyYSBkcml2ZXJzCiBvYmotJChDT05GSUdfVklERU9fTVgxKQkJCSs9IG14MV9jYW1lcmEubworb2JqLSQoQ09ORklHX1ZJREVPX01YMikJCQkrPSBteDJfY2FtZXJhLm8KIG9iai0kKENPTkZJR19WSURFT19NWDMpCQkJKz0gbXgzX2NhbWVyYS5vCiBvYmotJChDT05GSUdfVklERU9fUFhBMjd4KQkJKz0gcHhhX2NhbWVyYS5vCitvYmotJChDT05GSUdfVklERU9fU0hfTU9CSUxFX0NTSTIpCSs9IHNoX21vYmlsZV9jc2kyLm8KIG9iai0kKENPTkZJR19WSURFT19TSF9NT0JJTEVfQ0VVKQkrPSBzaF9tb2JpbGVfY2V1X2NhbWVyYS5vCiAKIG9iai0kKENPTkZJR19BUkNIX0RBVklOQ0kpCQkrPSBkYXZpbmNpLwpAQCAtMTc3LDcgKzE3NSw3IEBACiAKIG9iai0kKENPTkZJR19WSURFT19JUl9JMkMpICArPSBpci1rYmQtaTJjLm8KIAotb2JqLSQoQ09ORklHX0FSQ0hfREFWSU5DSSkJKz0gZGF2aW5jaS8KK29iai15CSs9IGRhdmluY2kvCiAKIG9iai0kKENPTkZJR19BUkNIX09NQVApCSs9IG9tYXAvCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWs4ODF4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2FrODgxeC5jCmluZGV4IDE1NzMzOTIuLmIzODg2NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWs4ODF4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hazg4MXguYwpAQCAtMTI2LDcgKzEyNiw3IEBACiAJdjRsX2JvdW5kX2FsaWduX2ltYWdlKCZtZi0+d2lkdGgsIDAsIDcyMCwgMiwKIAkJCSAgICAgICZtZi0+aGVpZ2h0LCAwLCBhazg4MXgtPmxpbmVzLCAxLCAwKTsKIAltZi0+ZmllbGQJPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7Ci0JbWYtPmNvZGUJPSBWNEwyX01CVVNfRk1UX1lVWVY4XzJYOF9MRTsKKwltZi0+Y29kZQk9IFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4OwogCW1mLT5jb2xvcnNwYWNlCT0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTsKIAogCXJldHVybiAwOwpAQCAtMTM2LDcgKzEzNiw3IEBACiAJCQkgICAgIHN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKm1mKQogewogCWlmIChtZi0+ZmllbGQgIT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEIHx8Ci0JICAgIG1mLT5jb2RlICE9IFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0xFKQorCSAgICBtZi0+Y29kZSAhPSBWNEwyX01CVVNfRk1UX1lVWVY4XzJYOCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR1cm4gYWs4ODF4X3RyeV9nX21idXNfZm10KHNkLCBtZik7CkBAIC0xNDgsNyArMTQ4LDcgQEAKIAlpZiAoaW5kZXgpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JKmNvZGUgPSBWNEwyX01CVVNfRk1UX1lVWVY4XzJYOF9MRTsKKwkqY29kZSA9IFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4OwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L01ha2VmaWxlCmluZGV4IDRkMjYyMzEuLjVjN2YyZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L01ha2VmaWxlCkBAIC0xLDQgKzEsNCBAQAotYXUwODI4LW9ianMJOj0gYXUwODI4LWNvcmUubyBhdTA4MjgtaTJjLm8gYXUwODI4LWNhcmRzLm8gYXUwODI4LWR2Yi5vIGF1MDgyOC12aWRlby5vCithdTA4Mjgtb2Jqcwk6PSBhdTA4MjgtY29yZS5vIGF1MDgyOC1pMmMubyBhdTA4MjgtY2FyZHMubyBhdTA4MjgtZHZiLm8gYXUwODI4LXZpZGVvLm8gYXUwODI4LXZiaS5vCiAKIG9iai0kKENPTkZJR19WSURFT19BVTA4MjgpICs9IGF1MDgyOC5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC12YmkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2Y1OTMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LXZiaS5jCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICAgYXUwODI4LXZiaS5jIC0gVkJJIGRyaXZlciBmb3IgYXUwODI4CisKKyAgIENvcHlyaWdodCAoQykgMjAxMCBEZXZpbiBIZWl0bXVlbGxlciA8ZGhlaXRtdWVsbGVyQGtlcm5lbGxhYnMuY29tPgorCisgICBUaGlzIHdvcmsgd2FzIHNwb25zb3JlZCBieSBHZXRXZWxsTmV0d29yayBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSAiYXUwODI4LmgiCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdmJpYnVmcyA9IDU7Cittb2R1bGVfcGFyYW0odmJpYnVmcywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModmJpYnVmcywgIm51bWJlciBvZiB2YmkgYnVmZmVycywgcmFuZ2UgMi0zMiIpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQKK2ZyZWVfYnVmZmVyKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCBhdTA4MjhfYnVmZmVyICpidWYpCit7CisJc3RydWN0IGF1MDgyOF9maCAgICAgKmZoICA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IGF1MDgyOF9kZXYgICAgKmRldiA9IGZoLT5kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJaWYgKGluX2ludGVycnVwdCgpKQorCQlCVUcoKTsKKworCS8qIFdlIHVzZWQgdG8gd2FpdCBmb3IgdGhlIGJ1ZmZlciB0byBmaW5pc2ggaGVyZSwgYnV0IHRoaXMgZGlkbid0IHdvcmsKKwkgICBiZWNhdXNlLCBhcyB3ZSB3ZXJlIGtlZXBpbmcgdGhlIHN0YXRlIGFzIFZJREVPQlVGX1FVRVVFRCwKKwkgICB2aWRlb2J1Zl9xdWV1ZV9jYW5jZWwgbWFya2VkIGl0IGFzIGZpbmlzaGVkIGZvciB1cy4KKwkgICAoQWxzbywgaXQgY291bGQgd2VkZ2UgZm9yZXZlciBpZiB0aGUgaGFyZHdhcmUgd2FzIG1pc2NvbmZpZ3VyZWQuKQorCisJICAgVGhpcyBzaG91bGQgYmUgc2FmZTsgYnkgdGhlIHRpbWUgd2UgZ2V0IGhlcmUsIHRoZSBidWZmZXIgaXNuJ3QKKwkgICBxdWV1ZWQgYW55bW9yZS4gSWYgd2UgZXZlciBzdGFydCBtYXJraW5nIHRoZSBidWZmZXJzIGFzCisJICAgVklERU9CVUZfQUNUSVZFLCBpdCB3b24ndCBiZSwgdGhvdWdoLgorCSovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c2xvY2ssIGZsYWdzKTsKKwlpZiAoZGV2LT5pc29jX2N0bC52YmlfYnVmID09IGJ1ZikKKwkJZGV2LT5pc29jX2N0bC52YmlfYnVmID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNsb2NrLCBmbGFncyk7CisKKwl2aWRlb2J1Zl92bWFsbG9jX2ZyZWUoJmJ1Zi0+dmIpOworCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9ORUVEU19JTklUOworfQorCitzdGF0aWMgaW50Cit2Ymlfc2V0dXAoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1bnNpZ25lZCBpbnQgKnNpemUpCit7CisJc3RydWN0IGF1MDgyOF9maCAgICAgKmZoICA9IHEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgYXUwODI4X2RldiAgICAqZGV2ID0gZmgtPmRldjsKKworCSpzaXplID0gZGV2LT52Ymlfd2lkdGggKiBkZXYtPnZiaV9oZWlnaHQgKiAyOworCisJaWYgKDAgPT0gKmNvdW50KQorCQkqY291bnQgPSB2YmlidWZzOworCWlmICgqY291bnQgPCAyKQorCQkqY291bnQgPSAyOworCWlmICgqY291bnQgPiAzMikKKwkJKmNvdW50ID0gMzI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3ZiaV9wcmVwYXJlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsCisJICAgIGVudW0gdjRsMl9maWVsZCBmaWVsZCkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICAgICAqZmggID0gcS0+cHJpdl9kYXRhOworCXN0cnVjdCBhdTA4MjhfZGV2ICAgICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBhdTA4MjhfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCBhdTA4MjhfYnVmZmVyLCB2Yik7CisJaW50ICAgICAgICAgICAgICAgICAgcmMgPSAwOworCisJYnVmLT52Yi5zaXplID0gZGV2LT52Ymlfd2lkdGggKiBkZXYtPnZiaV9oZWlnaHQgKiAyOworCisJaWYgKDAgIT0gYnVmLT52Yi5iYWRkciAgJiYgIGJ1Zi0+dmIuYnNpemUgPCBidWYtPnZiLnNpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJYnVmLT52Yi53aWR0aCAgPSBkZXYtPnZiaV93aWR0aDsKKwlidWYtPnZiLmhlaWdodCA9IGRldi0+dmJpX2hlaWdodDsKKwlidWYtPnZiLmZpZWxkICA9IGZpZWxkOworCisJaWYgKFZJREVPQlVGX05FRURTX0lOSVQgPT0gYnVmLT52Yi5zdGF0ZSkgeworCQlyYyA9IHZpZGVvYnVmX2lvbG9jayhxLCAmYnVmLT52YiwgTlVMTCk7CisJCWlmIChyYyA8IDApCisJCQlnb3RvIGZhaWw7CisJfQorCisJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1BSRVBBUkVEOworCXJldHVybiAwOworCitmYWlsOgorCWZyZWVfYnVmZmVyKHEsIGJ1Zik7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZAordmJpX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBhdTA4MjhfYnVmZmVyICAgICpidWYgICAgID0gY29udGFpbmVyX29mKHZiLAorCQkJCQkJCXN0cnVjdCBhdTA4MjhfYnVmZmVyLAorCQkJCQkJCXZiKTsKKwlzdHJ1Y3QgYXUwODI4X2ZoICAgICAgICAqZmggICAgICA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IGF1MDgyOF9kZXYgICAgICAgKmRldiAgICAgPSBmaC0+ZGV2OworCXN0cnVjdCBhdTA4MjhfZG1hcXVldWUgICp2YmlxICAgID0gJmRldi0+dmJpcTsKKworCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnZiaXEtPmFjdGl2ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHZiaV9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IGF1MDgyOF9idWZmZXIgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IGF1MDgyOF9idWZmZXIsIHZiKTsKKwlmcmVlX2J1ZmZlcihxLCBidWYpOworfQorCitzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIGF1MDgyOF92YmlfcW9wcyA9IHsKKwkuYnVmX3NldHVwICAgID0gdmJpX3NldHVwLAorCS5idWZfcHJlcGFyZSAgPSB2YmlfcHJlcGFyZSwKKwkuYnVmX3F1ZXVlICAgID0gdmJpX3F1ZXVlLAorCS5idWZfcmVsZWFzZSAgPSB2YmlfcmVsZWFzZSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC12aWRlby5jCmluZGV4IDUyZjI1YWEuLjc5ODlhN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC12aWRlby5jCkBAIC0zMTQsNiArMzE0LDIzIEBACiAJd2FrZV91cCgmYnVmLT52Yi5kb25lKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHZiaV9idWZmZXJfZmlsbGVkKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgYXUwODI4X2RtYXF1ZXVlICpkbWFfcSwKKwkJCQkgICAgIHN0cnVjdCBhdTA4MjhfYnVmZmVyICpidWYpCit7CisJLyogQWR2aWNlIHRoYXQgYnVmZmVyIHdhcyBmaWxsZWQgKi8KKwlhdTA4MjhfaXNvY2RiZygiWyVwLyVkXSB3YWtldXBcbiIsIGJ1ZiwgYnVmLT52Yi5pKTsKKworCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9ET05FOworCWJ1Zi0+dmIuZmllbGRfY291bnQrKzsKKwlkb19nZXR0aW1lb2ZkYXkoJmJ1Zi0+dmIudHMpOworCisJZGV2LT5pc29jX2N0bC52YmlfYnVmID0gTlVMTDsKKworCWxpc3RfZGVsKCZidWYtPnZiLnF1ZXVlKTsKKwl3YWtlX3VwKCZidWYtPnZiLmRvbmUpOworfQorCiAvKgogICogSWRlbnRpZnkgdGhlIGJ1ZmZlciBoZWFkZXIgdHlwZSBhbmQgcHJvcGVybHkgaGFuZGxlcwogICovCkBAIC0zMjcsNiArMzQ0LDkgQEAKIAlpbnQgIGxpbmVzZG9uZSwgY3VycmxpbmVkb25lLCBvZmZzZXQsIGxlbmNvcHksIHJlbWFpbjsKIAlpbnQgYnl0ZXNwZXJsaW5lID0gZGV2LT53aWR0aCA8PCAxOyAvKiBBc3N1bWVzIDE2LWJpdCBkZXB0aCBAQEBAICovCiAKKwlpZiAobGVuID09IDApCisJCXJldHVybjsKKwogCWlmIChkbWFfcS0+cG9zICsgbGVuID4gYnVmLT52Yi5zaXplKQogCQlsZW4gPSBidWYtPnZiLnNpemUgLSBkbWFfcS0+cG9zOwogCkBAIC00MTQsMTcgKzQzNCw5OCBAQAogCXJldHVybjsKIH0KIAorc3RhdGljIHZvaWQgYXUwODI4X2NvcHlfdmJpKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgYXUwODI4X2RtYXF1ZXVlICAqZG1hX3EsCisJCQkgICAgICBzdHJ1Y3QgYXUwODI4X2J1ZmZlciAqYnVmLAorCQkJICAgICAgdW5zaWduZWQgY2hhciAqcCwKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHAsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXVuc2lnbmVkIGNoYXIgKnN0YXJ0d3JpdGUsICpzdGFydHJlYWQ7CisJaW50IGJ5dGVzcGVybGluZTsKKwlpbnQgaSwgaiA9IDA7CisKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJYXUwODI4X2lzb2NkYmcoImRldiBpcyBudWxsXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChkbWFfcSA9PSBOVUxMKSB7CisJCWF1MDgyOF9pc29jZGJnKCJkbWFfcSBpcyBudWxsXG4iKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoYnVmID09IE5VTEwpCisJCXJldHVybjsKKwlpZiAocCA9PSBOVUxMKSB7CisJCWF1MDgyOF9pc29jZGJnKCJwIGlzIG51bGxcbiIpOworCQlyZXR1cm47CisJfQorCWlmIChvdXRwID09IE5VTEwpIHsKKwkJYXUwODI4X2lzb2NkYmcoIm91dHAgaXMgbnVsbFxuIik7CisJCXJldHVybjsKKwl9CisKKwlieXRlc3BlcmxpbmUgPSBkZXYtPnZiaV93aWR0aDsKKworCWlmIChkbWFfcS0+cG9zICsgbGVuID4gYnVmLT52Yi5zaXplKQorCQlsZW4gPSBidWYtPnZiLnNpemUgLSBkbWFfcS0+cG9zOworCisJc3RhcnRyZWFkID0gcDsKKwlzdGFydHdyaXRlID0gb3V0cCArIChkbWFfcS0+cG9zIC8gMik7CisKKwkvKiBNYWtlIHN1cmUgdGhlIGJvdHRvbSBmaWVsZCBwb3B1bGF0ZXMgdGhlIHNlY29uZCBoYWxmIG9mIHRoZSBmcmFtZSAqLworCWlmIChidWYtPnRvcF9maWVsZCA9PSAwKQorCQlzdGFydHdyaXRlICs9IGJ5dGVzcGVybGluZSAqIGRldi0+dmJpX2hlaWdodDsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMikKKwkJc3RhcnR3cml0ZVtqKytdID0gc3RhcnRyZWFkW2krMV07CisKKwlkbWFfcS0+cG9zICs9IGxlbjsKK30KKworCisvKgorICogdmlkZW8tYnVmIGdlbmVyaWMgcm91dGluZSB0byBnZXQgdGhlIG5leHQgYXZhaWxhYmxlIFZCSSBidWZmZXIKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHZiaV9nZXRfbmV4dF9idWYoc3RydWN0IGF1MDgyOF9kbWFxdWV1ZSAqZG1hX3EsCisJCQkJICAgIHN0cnVjdCBhdTA4MjhfYnVmZmVyICoqYnVmKQoreworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBjb250YWluZXJfb2YoZG1hX3EsIHN0cnVjdCBhdTA4MjhfZGV2LCB2YmlxKTsKKwljaGFyICpvdXRwOworCisJaWYgKGxpc3RfZW1wdHkoJmRtYV9xLT5hY3RpdmUpKSB7CisJCWF1MDgyOF9pc29jZGJnKCJObyBhY3RpdmUgcXVldWUgdG8gc2VydmVcbiIpOworCQlkZXYtPmlzb2NfY3RsLnZiaV9idWYgPSBOVUxMOworCQkqYnVmID0gTlVMTDsKKwkJcmV0dXJuOworCX0KKworCS8qIEdldCB0aGUgbmV4dCBidWZmZXIgKi8KKwkqYnVmID0gbGlzdF9lbnRyeShkbWFfcS0+YWN0aXZlLm5leHQsIHN0cnVjdCBhdTA4MjhfYnVmZmVyLCB2Yi5xdWV1ZSk7CisJLyogQ2xlYW5zIHVwIGJ1ZmZlciAtIFVzZWZ1bGwgZm9yIHRlc3RpbmcgZm9yIGZyYW1lL1VSQiBsb3NzICovCisJb3V0cCA9IHZpZGVvYnVmX3RvX3ZtYWxsb2MoJigqYnVmKS0+dmIpOworCW1lbXNldChvdXRwLCAweDAwLCAoKmJ1ZiktPnZiLnNpemUpOworCisJZGV2LT5pc29jX2N0bC52YmlfYnVmID0gKmJ1ZjsKKworCXJldHVybjsKK30KKwogLyoKICAqIENvbnRyb2xzIHRoZSBpc29jIGNvcHkgb2YgZWFjaCB1cmIgcGFja2V0CiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGF1MDgyOF9pc29jX2NvcHkoc3RydWN0IGF1MDgyOF9kZXYgKmRldiwgc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCBhdTA4MjhfYnVmZmVyICAgICpidWY7CisJc3RydWN0IGF1MDgyOF9idWZmZXIgICAgKnZiaV9idWY7CiAJc3RydWN0IGF1MDgyOF9kbWFxdWV1ZSAgKmRtYV9xID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBhdTA4MjhfZG1hcXVldWUgICp2YmlfZG1hX3EgPSAmZGV2LT52YmlxOwogCXVuc2lnbmVkIGNoYXIgKm91dHAgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgKnZiaW91dHAgPSBOVUxMOwogCWludCBpLCBsZW4gPSAwLCByYyA9IDE7CiAJdW5zaWduZWQgY2hhciAqcDsKIAl1bnNpZ25lZCBjaGFyIGZieXRlOworCXVuc2lnbmVkIGludCB2YmlfZmllbGRfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcmVtYWluLCBsZW5jb3B5OwogCiAJaWYgKCFkZXYpCiAJCXJldHVybiAwOwpAQCAtNDQzLDYgKzU0NCwxMCBAQAogCWlmIChidWYgIT0gTlVMTCkKIAkJb3V0cCA9IHZpZGVvYnVmX3RvX3ZtYWxsb2MoJmJ1Zi0+dmIpOwogCisJdmJpX2J1ZiA9IGRldi0+aXNvY19jdGwudmJpX2J1ZjsKKwlpZiAodmJpX2J1ZiAhPSBOVUxMKQorCQl2YmlvdXRwID0gdmlkZW9idWZfdG9fdm1hbGxvYygmdmJpX2J1Zi0+dmIpOworCiAJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgewogCQlpbnQgc3RhdHVzID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXM7CiAKQEAgLTQ3Miw2ICs1NzcsMTkgQEAKIAkJCWF1MDgyOF9pc29jZGJnKCJWaWRlbyBmcmFtZSAlc1xuIiwKIAkJCQkgICAgICAgKGZieXRlICYgMHg0MCkgPyAib2RkIiA6ICJldmVuIik7CiAJCQlpZiAoIShmYnl0ZSAmIDB4NDApKSB7CisJCQkJLyogVkJJICovCisJCQkJaWYgKHZiaV9idWYgIT0gTlVMTCkKKwkJCQkJdmJpX2J1ZmZlcl9maWxsZWQoZGV2LAorCQkJCQkJCSAgdmJpX2RtYV9xLAorCQkJCQkJCSAgdmJpX2J1Zik7CisJCQkJdmJpX2dldF9uZXh0X2J1Zih2YmlfZG1hX3EsICZ2YmlfYnVmKTsKKwkJCQlpZiAodmJpX2J1ZiA9PSBOVUxMKQorCQkJCQl2YmlvdXRwID0gTlVMTDsKKwkJCQllbHNlCisJCQkJCXZiaW91dHAgPSB2aWRlb2J1Zl90b192bWFsbG9jKAorCQkJCQkJJnZiaV9idWYtPnZiKTsKKworCQkJCS8qIFZpZGVvICovCiAJCQkJaWYgKGJ1ZiAhPSBOVUxMKQogCQkJCQlidWZmZXJfZmlsbGVkKGRldiwgZG1hX3EsIGJ1Zik7CiAJCQkJZ2V0X25leHRfYnVmKGRtYV9xLCAmYnVmKTsKQEAgLTQ4OCw5ICs2MDYsMzYgQEAKIAkJCQkJYnVmLT50b3BfZmllbGQgPSAwOwogCQkJfQogCisJCQlpZiAodmJpX2J1ZiAhPSBOVUxMKSB7CisJCQkJaWYgKGZieXRlICYgMHg0MCkKKwkJCQkJdmJpX2J1Zi0+dG9wX2ZpZWxkID0gMTsKKwkJCQllbHNlCisJCQkJCXZiaV9idWYtPnRvcF9maWVsZCA9IDA7CisJCQl9CisKKwkJCWRldi0+dmJpX3JlYWQgPSAwOworCQkJdmJpX2RtYV9xLT5wb3MgPSAwOwogCQkJZG1hX3EtPnBvcyA9IDA7CiAJCX0KLQkJaWYgKGJ1ZiAhPSBOVUxMKQorCisJCXZiaV9maWVsZF9zaXplID0gZGV2LT52Ymlfd2lkdGggKiBkZXYtPnZiaV9oZWlnaHQgKiAyOworCQlpZiAoZGV2LT52YmlfcmVhZCA8IHZiaV9maWVsZF9zaXplKSB7CisJCQlyZW1haW4gID0gdmJpX2ZpZWxkX3NpemUgLSBkZXYtPnZiaV9yZWFkOworCQkJaWYgKGxlbiA8IHJlbWFpbikKKwkJCQlsZW5jb3B5ID0gbGVuOworCQkJZWxzZQorCQkJCWxlbmNvcHkgPSByZW1haW47CisKKwkJCWlmICh2YmlfYnVmICE9IE5VTEwpCisJCQkJYXUwODI4X2NvcHlfdmJpKGRldiwgdmJpX2RtYV9xLCB2YmlfYnVmLCBwLAorCQkJCQkJdmJpb3V0cCwgbGVuKTsKKworCQkJbGVuIC09IGxlbmNvcHk7CisJCQlwICs9IGxlbmNvcHk7CisJCQlkZXYtPnZiaV9yZWFkICs9IGxlbmNvcHk7CisJCX0KKworCQlpZiAoZGV2LT52YmlfcmVhZCA+PSB2YmlfZmllbGRfc2l6ZSAmJiBidWYgIT0gTlVMTCkKIAkJCWF1MDgyOF9jb3B5X3ZpZGVvKGRldiwgZG1hX3EsIGJ1ZiwgcCwgb3V0cCwgbGVuKTsKIAl9CiAJcmV0dXJuIHJjOwpAQCAtNjQyLDcgKzc4Nyw3IEBACiAJYXUwODI4X3dyaXRlcmVnKGQsIDB4MTE0LCAweGEwKTsKIAlhdTA4Mjhfd3JpdGVyZWcoZCwgMHgxMTUsIDB4MDUpOwogCS8qIHNldCB5IHBvc2l0aW9uICovCi0JYXUwODI4X3dyaXRlcmVnKGQsIDB4MTEyLCAweDAyKTsKKwlhdTA4Mjhfd3JpdGVyZWcoZCwgMHgxMTIsIDB4MDApOwogCWF1MDgyOF93cml0ZXJlZyhkLCAweDExMywgMHgwMCk7CiAJYXUwODI4X3dyaXRlcmVnKGQsIDB4MTE2LCAweGYyKTsKIAlhdTA4Mjhfd3JpdGVyZWcoZCwgMHgxMTcsIDB4MDApOwpAQCAtNzAzLDQ3ICs4NDgsODMgQEAKIAogCiAvKiBVc2FnZSBsb2NrIGNoZWNrIGZ1bmN0aW9ucyAqLwotc3RhdGljIGludCByZXNfZ2V0KHN0cnVjdCBhdTA4MjhfZmggKmZoKQorc3RhdGljIGludCByZXNfZ2V0KHN0cnVjdCBhdTA4MjhfZmggKmZoLCB1bnNpZ25lZCBpbnQgYml0KQogewotCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCWludAkJIHJjICAgPSAwOworCXN0cnVjdCBhdTA4MjhfZGV2ICAgICpkZXYgPSBmaC0+ZGV2OwogCi0JLyogVGhpcyBpbnN0YW5jZSBhbHJlYWR5IGhhcyBzdHJlYW1fb24gKi8KLQlpZiAoZmgtPnN0cmVhbV9vbikKLQkJcmV0dXJuIHJjOworCWlmIChmaC0+cmVzb3VyY2VzICYgYml0KQorCQkvKiBoYXZlIGl0IGFscmVhZHkgYWxsb2NhdGVkICovCisJCXJldHVybiAxOwogCi0JaWYgKGRldi0+c3RyZWFtX29uKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JZGV2LT5zdHJlYW1fb24gPSAxOwotCWZoLT5zdHJlYW1fb24gID0gMTsKLQlyZXR1cm4gcmM7CisJLyogaXMgaXQgZnJlZT8gKi8KKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCWlmIChkZXYtPnJlc291cmNlcyAmIGJpdCkgeworCQkvKiBubywgc29tZW9uZSBlbHNlIHVzZXMgaXQgKi8KKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCQlyZXR1cm4gMDsKKwl9CisJLyogaXQncyBmcmVlLCBncmFiIGl0ICovCisJZmgtPnJlc291cmNlcyAgfD0gYml0OworCWRldi0+cmVzb3VyY2VzIHw9IGJpdDsKKwlkcHJpbnRrKDEsICJyZXM6IGdldCAlZFxuIiwgYml0KTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgcmVzX2NoZWNrKHN0cnVjdCBhdTA4MjhfZmggKmZoKQorc3RhdGljIGludCByZXNfY2hlY2soc3RydWN0IGF1MDgyOF9maCAqZmgsIHVuc2lnbmVkIGludCBiaXQpCiB7Ci0JcmV0dXJuIGZoLT5zdHJlYW1fb247CisJcmV0dXJuIGZoLT5yZXNvdXJjZXMgJiBiaXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHJlc19mcmVlKHN0cnVjdCBhdTA4MjhfZmggKmZoKQorc3RhdGljIGludCByZXNfbG9ja2VkKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBiaXQpCiB7Ci0Jc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJcmV0dXJuIGRldi0+cmVzb3VyY2VzICYgYml0OworfQogCi0JZmgtPnN0cmVhbV9vbiA9IDA7Ci0JZGV2LT5zdHJlYW1fb24gPSAwOworc3RhdGljIHZvaWQgcmVzX2ZyZWUoc3RydWN0IGF1MDgyOF9maCAqZmgsIHVuc2lnbmVkIGludCBiaXRzKQoreworCXN0cnVjdCBhdTA4MjhfZGV2ICAgICpkZXYgPSBmaC0+ZGV2OworCisJQlVHX09OKChmaC0+cmVzb3VyY2VzICYgYml0cykgIT0gYml0cyk7CisKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCWZoLT5yZXNvdXJjZXMgICY9IH5iaXRzOworCWRldi0+cmVzb3VyY2VzICY9IH5iaXRzOworCWRwcmludGsoMSwgInJlczogcHV0ICVkXG4iLCBiaXRzKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3Jlc3NvdXJjZShzdHJ1Y3QgYXUwODI4X2ZoICpmaCkKK3sKKwlzd2l0Y2ggKGZoLT50eXBlKSB7CisJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6CisJCXJldHVybiBBVTA4MjhfUkVTT1VSQ0VfVklERU87CisJY2FzZSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOgorCQlyZXR1cm4gQVUwODI4X1JFU09VUkNFX1ZCSTsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuIDA7CisJfQogfQogCiBzdGF0aWMgaW50IGF1MDgyOF92NGwyX29wZW4oc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJaW50IHJldCA9IDA7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlscCk7CiAJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlscCk7CiAJc3RydWN0IGF1MDgyOF9maCAqZmg7Ci0JaW50IHR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJaW50IHR5cGU7CiAKLSNpZmRlZiBWQklfSVNfV09SS0lORwotCWlmICh2aWRlb19kZXZkYXRhKGZpbHApLT52ZmxfdHlwZSA9PSBWRkxfVFlQRV9HUkFCQkVSKQorCXN3aXRjaCAodmRldi0+dmZsX3R5cGUpIHsKKwljYXNlIFZGTF9UWVBFX0dSQUJCRVI6CisJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCWJyZWFrOworCWNhc2UgVkZMX1RZUEVfVkJJOgogCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKLSNlbmRpZgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAlmaCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhdTA4MjhfZmgpLCBHRlBfS0VSTkVMKTsKIAlpZiAoTlVMTCA9PSBmaCkgewpAQCAtNzgxLDEwICs5NjIsMjEgQEAKIAlkZXYtPnVzZXJzKys7CiAKIAl2aWRlb2J1Zl9xdWV1ZV92bWFsbG9jX2luaXQoJmZoLT52Yl92aWRxLCAmYXUwODI4X3ZpZGVvX3FvcHMsCi0JCQkJICAgIE5VTEwsICZkZXYtPnNsb2NrLCBmaC0+dHlwZSwKKwkJCQkgICAgTlVMTCwgJmRldi0+c2xvY2ssCisJCQkJICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKIAkJCQkgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAogCQkJCSAgICBzaXplb2Yoc3RydWN0IGF1MDgyOF9idWZmZXIpLCBmaCk7CiAKKwkvKiBWQkkgU2V0dXAgKi8KKwlkZXYtPnZiaV93aWR0aCA9IDcyMDsKKwlkZXYtPnZiaV9oZWlnaHQgPSAxOworCXZpZGVvYnVmX3F1ZXVlX3ZtYWxsb2NfaW5pdCgmZmgtPnZiX3ZiaXEsICZhdTA4MjhfdmJpX3FvcHMsCisJCQkJICAgIE5VTEwsICZkZXYtPnNsb2NrLAorCQkJCSAgICBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFLAorCQkJCSAgICBWNEwyX0ZJRUxEX1NFUV9UQiwKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBhdTA4MjhfYnVmZmVyKSwgZmgpOworCisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC03OTQsMTcgKzk4NiwxOSBAQAogCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCi0JbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKLQlpZiAocmVzX2NoZWNrKGZoKSkKLQkJcmVzX2ZyZWUoZmgpOworCWlmIChyZXNfY2hlY2soZmgsIEFVMDgyOF9SRVNPVVJDRV9WSURFTykpIHsKKwkJdmlkZW9idWZfc3RvcCgmZmgtPnZiX3ZpZHEpOworCQlyZXNfZnJlZShmaCwgQVUwODI4X1JFU09VUkNFX1ZJREVPKTsKKwl9CisKKwlpZiAocmVzX2NoZWNrKGZoLCBBVTA4MjhfUkVTT1VSQ0VfVkJJKSkgeworCQl2aWRlb2J1Zl9zdG9wKCZmaC0+dmJfdmJpcSk7CisJCXJlc19mcmVlKGZoLCBBVTA4MjhfUkVTT1VSQ0VfVkJJKTsKKwl9CiAKIAlpZiAoZGV2LT51c2VycyA9PSAxKSB7Ci0JCXZpZGVvYnVmX3N0b3AoJmZoLT52Yl92aWRxKTsKLQkJdmlkZW9idWZfbW1hcF9mcmVlKCZmaC0+dmJfdmlkcSk7Ci0KIAkJaWYgKGRldi0+ZGV2X3N0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgewogCQkJYXUwODI4X2FuYWxvZ191bnJlZ2lzdGVyKGRldik7Ci0JCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJCQlrZnJlZShkZXYpOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTgyMywxMCArMTAxNywxMSBAQAogCQkJcHJpbnRrKEtFUk5fSU5GTyAiQXUwODI4IGNhbid0IHNldCBhbHRlcm5hdGUgdG8gMCFcbiIpOwogCX0KIAorCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPnZiX3ZpZHEpOworCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPnZiX3ZiaXEpOwogCWtmcmVlKGZoKTsKIAlkZXYtPnVzZXJzLS07CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX25yKCZkZXYtPm9wZW4sIDEpOwotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODQyLDE2ICsxMDM3LDIxIEBACiAJCXJldHVybiByYzsKIAogCWlmIChmaC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKLQkJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKLQkJcmMgPSByZXNfZ2V0KGZoKTsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwotCi0JCWlmICh1bmxpa2VseShyYyA8IDApKQotCQkJcmV0dXJuIHJjOworCQlpZiAocmVzX2xvY2tlZChkZXYsIEFVMDgyOF9SRVNPVVJDRV9WSURFTykpCisJCQlyZXR1cm4gLUVCVVNZOwogCiAJCXJldHVybiB2aWRlb2J1Zl9yZWFkX3N0cmVhbSgmZmgtPnZiX3ZpZHEsIGJ1ZiwgY291bnQsIHBvcywgMCwKIAkJCQkJZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwogCX0KKworCWlmIChmaC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKSB7CisJCWlmICghcmVzX2dldChmaCwgQVUwODI4X1JFU09VUkNFX1ZCSSkpCisJCQlyZXR1cm4gLUVCVVNZOworCisJCXJldHVybiB2aWRlb2J1Zl9yZWFkX3N0cmVhbSgmZmgtPnZiX3ZiaXEsIGJ1ZiwgY291bnQsIHBvcywgMCwKKwkJCQkJICAgIGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtODY1LDE3ICsxMDY1LDE3IEBACiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCi0JbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKLQlyYyA9IHJlc19nZXQoZmgpOwotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQotCWlmICh1bmxpa2VseShyYyA8IDApKQorCWlmIChmaC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJaWYgKCFyZXNfZ2V0KGZoLCBBVTA4MjhfUkVTT1VSQ0VfVklERU8pKQorCQkJcmV0dXJuIFBPTExFUlI7CisJCXJldHVybiB2aWRlb2J1Zl9wb2xsX3N0cmVhbShmaWxwLCAmZmgtPnZiX3ZpZHEsIHdhaXQpOworCX0gZWxzZSBpZiAoZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkgeworCQlpZiAoIXJlc19nZXQoZmgsIEFVMDgyOF9SRVNPVVJDRV9WQkkpKQorCQkJcmV0dXJuIFBPTExFUlI7CisJCXJldHVybiB2aWRlb2J1Zl9wb2xsX3N0cmVhbShmaWxwLCAmZmgtPnZiX3ZiaXEsIHdhaXQpOworCX0gZWxzZSB7CiAJCXJldHVybiBQT0xMRVJSOwotCi0JaWYgKFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSAhPSBmaC0+dHlwZSkKLQkJcmV0dXJuIFBPTExFUlI7Ci0KLQlyZXR1cm4gdmlkZW9idWZfcG9sbF9zdHJlYW0oZmlscCwgJmZoLT52Yl92aWRxLCB3YWl0KTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgYXUwODI4X3Y0bDJfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCkBAIC04ODgsMTQgKzEwODgsMTAgQEAKIAlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKLQltdXRleF9sb2NrKCZkZXYtPmxvY2spOwotCXJjID0gcmVzX2dldChmaCk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwotCi0JaWYgKHVubGlrZWx5KHJjIDwgMCkpCi0JCXJldHVybiByYzsKLQotCXJjID0gdmlkZW9idWZfbW1hcF9tYXBwZXIoJmZoLT52Yl92aWRxLCB2bWEpOworCWlmIChmaC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJjID0gdmlkZW9idWZfbW1hcF9tYXBwZXIoJmZoLT52Yl92aWRxLCB2bWEpOworCWVsc2UgaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpCisJCXJjID0gdmlkZW9idWZfbW1hcF9tYXBwZXIoJmZoLT52Yl92YmlxLCB2bWEpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtOTExLDE0ICsxMTA3LDYgQEAKIAltYXh3aWR0aCA9IDcyMDsKIAltYXhoZWlnaHQgPSA0ODA7CiAKLSNpZmRlZiBWQklfSVNfV09SS0lORwotCWlmIChmb3JtYXQtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkUpIHsKLQkJZHByaW50aygxLCAiVkJJIGZvcm1hdCBzZXQ6IHRvIGJlIHN1cHBvcnRlZCFcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKGZvcm1hdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKQotCQlyZXR1cm4gMDsKLSNlbmRpZgogCWlmIChmb3JtYXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtOTk5LDkgKzExODcsNyBAQAogCiAJLypzZXQgdGhlIGRldmljZSBjYXBhYmlsaXRpZXMgKi8KIAljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAotI2lmZGVmIFZCSV9JU19XT1JLSU5HCiAJCVY0TDJfQ0FQX1ZCSV9DQVBUVVJFIHwKLSNlbmRpZgogCQlWNEwyX0NBUF9BVURJTyB8CiAJCVY0TDJfQ0FQX1JFQURXUklURSB8CiAJCVY0TDJfQ0FQX1NUUkVBTUlORyB8CkBAIC0xMDU2LDIwICsxMjQyLDIxIEBACiAJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CiAJaW50IHJjOwogCisJcmMgPSBjaGVja19kZXYoZGV2KTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCiAJaWYgKHZpZGVvYnVmX3F1ZXVlX2lzX2J1c3koJmZoLT52Yl92aWRxKSkgewogCQlwcmludGsoS0VSTl9JTkZPICIlcyBxdWV1ZSBidXN5XG4iLCBfX2Z1bmNfXyk7CiAJCXJjID0gLUVCVVNZOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoZGV2LT5zdHJlYW1fb24gJiYgIWZoLT5zdHJlYW1fb24pIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgZGV2aWNlIGluIHVzZSBieSBhbm90aGVyIGZoXG4iLCBfX2Z1bmNfXyk7Ci0JCXJjID0gLUVCVVNZOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyZXR1cm4gYXUwODI4X3NldF9mb3JtYXQoZGV2LCBWSURJT0NfU19GTVQsIGYpOworCXJjID0gYXUwODI4X3NldF9mb3JtYXQoZGV2LCBWSURJT0NfU19GTVQsIGYpOwogb3V0OgorCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTEzMDAsNiArMTQ4NywyOSBAQAogCXJldHVybiAwOwogfQogCisKKy8qIFJBVyBWQkkgaW9jdGxzICovCisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZm10X3ZiaV9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmb3JtYXQpCit7CisJc3RydWN0IGF1MDgyOF9maCAgICAgICpmaCAgPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICAgICAqZGV2ID0gZmgtPmRldjsKKworCWZvcm1hdC0+Zm10LnZiaS5zYW1wbGVzX3Blcl9saW5lID0gZGV2LT52Ymlfd2lkdGg7CisJZm9ybWF0LT5mbXQudmJpLnNhbXBsZV9mb3JtYXQgPSBWNEwyX1BJWF9GTVRfR1JFWTsKKwlmb3JtYXQtPmZtdC52Ymkub2Zmc2V0ID0gMDsKKwlmb3JtYXQtPmZtdC52YmkuZmxhZ3MgPSAwOworCWZvcm1hdC0+Zm10LnZiaS5zYW1wbGluZ19yYXRlID0gNjc1MDAwMCAqIDQgLyAyOworCisJZm9ybWF0LT5mbXQudmJpLmNvdW50WzBdID0gZGV2LT52YmlfaGVpZ2h0OworCWZvcm1hdC0+Zm10LnZiaS5jb3VudFsxXSA9IGRldi0+dmJpX2hlaWdodDsKKwlmb3JtYXQtPmZtdC52Ymkuc3RhcnRbMF0gPSAyMTsKKwlmb3JtYXQtPmZtdC52Ymkuc3RhcnRbMV0gPSAyODQ7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCB2aWRpb2NfZ19jaGlwX2lkZW50KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCSAgICAgICBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKIHsKQEAgLTEzNDUsMjUgKzE1NTUsMzIgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpCiB7Ci0Jc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OwotCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCWludCByYzsKKwlzdHJ1Y3QgYXUwODI4X2ZoICAgICAgKmZoICA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgICAgICpkZXYgPSBmaC0+ZGV2OworCWludCAgICAgICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7CiAKIAlyYyA9IGNoZWNrX2RldihkZXYpOwogCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKIAorCWlmICh1bmxpa2VseSh0eXBlICE9IGZoLT50eXBlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkcHJpbnRrKDEsICJ2aWRpb2Nfc3RyZWFtb24gZmg9JXAgdD0lZCBmaC0+cmVzPSVkIGRldi0+cmVzPSVkXG4iLAorCQlmaCwgdHlwZSwgZmgtPnJlc291cmNlcywgZGV2LT5yZXNvdXJjZXMpOworCisJaWYgKHVubGlrZWx5KCFyZXNfZ2V0KGZoLCBnZXRfcmVzc291cmNlKGZoKSkpKQorCQlyZXR1cm4gLUVCVVNZOworCiAJaWYgKHR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CiAJCWF1MDgyOF9hbmFsb2dfc3RyZWFtX2VuYWJsZShkZXYpOwogCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgdmlkZW8sIHNfc3RyZWFtLCAxKTsKIAl9CiAKLQltdXRleF9sb2NrKCZkZXYtPmxvY2spOwotCXJjID0gcmVzX2dldChmaCk7Ci0KLQlpZiAobGlrZWx5KHJjID49IDApKQorCWlmIChmaC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCiAJCXJjID0gdmlkZW9idWZfc3RyZWFtb24oJmZoLT52Yl92aWRxKTsKLQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJZWxzZSBpZiAoZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKKwkJcmMgPSB2aWRlb2J1Zl9zdHJlYW1vbigmZmgtPnZiX3ZiaXEpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMTM3MSwzOCArMTU4OCw0MiBAQAogc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlKQogewotCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKLQlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKLQlpbnQgaTsKLQlpbnQgcmV0OwotCWludCByYzsKKwlzdHJ1Y3QgYXUwODI4X2ZoICAgICAgKmZoICA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgICAgICpkZXYgPSBmaC0+ZGV2OworCWludCAgICAgICAgICAgICAgICAgICByYzsKKwlpbnQgICAgICAgICAgICAgICAgICAgaTsKIAogCXJjID0gY2hlY2tfZGV2KGRldik7CiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCi0JaWYgKGZoLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFICYmCisJICAgIGZoLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmICh0eXBlICE9IGZoLT50eXBlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICh0eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgeworCWRwcmludGsoMSwgInZpZGlvY19zdHJlYW1vZmYgZmg9JXAgdD0lZCBmaC0+cmVzPSVkIGRldi0+cmVzPSVkXG4iLAorCQlmaCwgdHlwZSwgZmgtPnJlc291cmNlcywgZGV2LT5yZXNvdXJjZXMpOworCisJaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgewogCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgdmlkZW8sIHNfc3RyZWFtLCAwKTsKLQkJcmV0ID0gYXUwODI4X3N0cmVhbV9pbnRlcnJ1cHQoZGV2KTsKLQkJaWYgKHJldCAhPSAwKQotCQkJcmV0dXJuIHJldDsKLQl9CisJCXJjID0gYXUwODI4X3N0cmVhbV9pbnRlcnJ1cHQoZGV2KTsKKwkJaWYgKHJjICE9IDApCisJCQlyZXR1cm4gcmM7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVUwODI4X01BWF9JTlBVVDsgaSsrKSB7Ci0JCWlmIChBVVZJX0lOUFVUKGkpLmF1ZGlvX3NldHVwID09IE5VTEwpCi0JCQljb250aW51ZTsKLQkJKEFVVklfSU5QVVQoaSkuYXVkaW9fc2V0dXApKGRldiwgMCk7Ci0JfQorCQlmb3IgKGkgPSAwOyBpIDwgQVUwODI4X01BWF9JTlBVVDsgaSsrKSB7CisJCQlpZiAoQVVWSV9JTlBVVChpKS5hdWRpb19zZXR1cCA9PSBOVUxMKQorCQkJCWNvbnRpbnVlOworCQkJKEFVVklfSU5QVVQoaSkuYXVkaW9fc2V0dXApKGRldiwgMCk7CisJCX0KIAotCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0JdmlkZW9idWZfc3RyZWFtb2ZmKCZmaC0+dmJfdmlkcSk7Ci0JcmVzX2ZyZWUoZmgpOwotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwkJdmlkZW9idWZfc3RyZWFtb2ZmKCZmaC0+dmJfdmlkcSk7CisJCXJlc19mcmVlKGZoLCBBVTA4MjhfUkVTT1VSQ0VfVklERU8pOworCX0gZWxzZSBpZiAoZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkgeworCQl2aWRlb2J1Zl9zdHJlYW1vZmYoJmZoLT52Yl92YmlxKTsKKwkJcmVzX2ZyZWUoZmgsIEFVMDgyOF9SRVNPVVJDRV9WQkkpOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTUyNywxOSArMTc0OCwxMSBAQAogCS52aWRpb2NfZ19mbXRfdmlkX2NhcCAgICAgICA9IHZpZGlvY19nX2ZtdF92aWRfY2FwLAogCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwICAgICA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAsCiAJLnZpZGlvY19zX2ZtdF92aWRfY2FwICAgICAgID0gdmlkaW9jX3NfZm10X3ZpZF9jYXAsCi0jaWZkZWYgVkJJX0lTX1dPUktJTkcKIAkudmlkaW9jX2dfZm10X3ZiaV9jYXAgICAgICAgPSB2aWRpb2NfZ19mbXRfdmJpX2NhcCwKLQkudmlkaW9jX3RyeV9mbXRfdmJpX2NhcCAgICAgPSB2aWRpb2Nfc19mbXRfdmJpX2NhcCwKLQkudmlkaW9jX3NfZm10X3ZiaV9jYXAgICAgICAgPSB2aWRpb2Nfc19mbXRfdmJpX2NhcCwKLSNlbmRpZgorCS52aWRpb2Nfc19mbXRfdmJpX2NhcCAgICAgICA9IHZpZGlvY19nX2ZtdF92YmlfY2FwLAogCS52aWRpb2NfZ19hdWRpbyAgICAgICAgICAgICA9IHZpZGlvY19nX2F1ZGlvLAogCS52aWRpb2Nfc19hdWRpbyAgICAgICAgICAgICA9IHZpZGlvY19zX2F1ZGlvLAogCS52aWRpb2NfY3JvcGNhcCAgICAgICAgICAgICA9IHZpZGlvY19jcm9wY2FwLAotI2lmZGVmIFZCSV9JU19XT1JLSU5HCi0JLnZpZGlvY19nX2ZtdF9zbGljZWRfdmJpX2NhcCAgID0gdmlkaW9jX2dfZm10X3NsaWNlZF92YmlfY2FwLAotCS52aWRpb2NfdHJ5X2ZtdF9zbGljZWRfdmJpX2NhcCA9IHZpZGlvY190cnlfc2V0X3NsaWNlZF92YmlfY2FwLAotCS52aWRpb2Nfc19mbXRfc2xpY2VkX3ZiaV9jYXAgICA9IHZpZGlvY190cnlfc2V0X3NsaWNlZF92YmlfY2FwLAotI2VuZGlmCiAJLnZpZGlvY19yZXFidWZzICAgICAgICAgICAgID0gdmlkaW9jX3JlcWJ1ZnMsCiAJLnZpZGlvY19xdWVyeWJ1ZiAgICAgICAgICAgID0gdmlkaW9jX3F1ZXJ5YnVmLAogCS52aWRpb2NfcWJ1ZiAgICAgICAgICAgICAgICA9IHZpZGlvY19xYnVmLApAQCAtMTYyMSw4ICsxODM0LDExIEBACiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+c2xvY2spOwogCW11dGV4X2luaXQoJmRldi0+bG9jayk7CiAKKwkvKiBpbml0IHZpZGVvIGRtYSBxdWV1ZXMgKi8KIAlJTklUX0xJU1RfSEVBRCgmZGV2LT52aWRxLmFjdGl2ZSk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmlkcS5xdWV1ZWQpOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZiaXEuYWN0aXZlKTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT52YmlxLnF1ZXVlZCk7CiAKIAlkZXYtPndpZHRoID0gTlRTQ19TVERfVzsKIAlkZXYtPmhlaWdodCA9IE5UU0NfU1REX0g7CkBAIC0xNjM4LDI2ICsxODU0LDIzIEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotI2lmZGVmIFZCSV9JU19XT1JLSU5HCisJLyogYWxsb2NhdGUgdGhlIFZCSSBzdHJ1Y3QgKi8KIAlkZXYtPnZiaV9kZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKIAlpZiAoTlVMTCA9PSBkZXYtPnZiaV9kZXYpIHsKIAkJZHByaW50aygxLCAiQ2FuJ3QgYWxsb2NhdGUgdmJpX2RldmljZS5cbiIpOwogCQlrZnJlZShkZXYtPnZkZXYpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0jZW5kaWYKIAogCS8qIEZpbGwgdGhlIHZpZGVvIGNhcHR1cmUgZGV2aWNlIHN0cnVjdCAqLwogCSpkZXYtPnZkZXYgPSBhdTA4MjhfdmlkZW9fdGVtcGxhdGU7CiAJZGV2LT52ZGV2LT5wYXJlbnQgPSAmZGV2LT51c2JkZXYtPmRldjsKIAlzdHJjcHkoZGV2LT52ZGV2LT5uYW1lLCAiYXUwODI4YSB2aWRlbyIpOwogCi0jaWZkZWYgVkJJX0lTX1dPUktJTkcKIAkvKiBTZXR1cCB0aGUgVkJJIGRldmljZSAqLwogCSpkZXYtPnZiaV9kZXYgPSBhdTA4MjhfdmlkZW9fdGVtcGxhdGU7CiAJZGV2LT52YmlfZGV2LT5wYXJlbnQgPSAmZGV2LT51c2JkZXYtPmRldjsKIAlzdHJjcHkoZGV2LT52YmlfZGV2LT5uYW1lLCAiYXUwODI4YSB2YmkiKTsKLSNlbmRpZgogCiAJLyogUmVnaXN0ZXIgdGhlIHY0bDIgZGV2aWNlICovCiAJdmlkZW9fc2V0X2RydmRhdGEoZGV2LT52ZGV2LCBkZXYpOwpAQCAtMTY2OSw3ICsxODgyLDYgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0jaWZkZWYgVkJJX0lTX1dPUktJTkcKIAkvKiBSZWdpc3RlciB0aGUgdmJpIGRldmljZSAqLwogCXZpZGVvX3NldF9kcnZkYXRhKGRldi0+dmJpX2RldiwgZGV2KTsKIAlyZXR2YWwgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoZGV2LT52YmlfZGV2LCBWRkxfVFlQRV9WQkksIC0xKTsKQEAgLTE2ODAsNyArMTg5Miw2IEBACiAJCXZpZGVvX2RldmljZV9yZWxlYXNlKGRldi0+dmRldik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLSNlbmRpZgogCiAJZHByaW50aygxLCAiJXMgY29tcGxldGVkIVxuIiwgX19mdW5jX18pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC5oCmluZGV4IDIwN2YzMmQuLjk5MDViYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC5oCkBAIC02MCw2ICs2MCwxMCBAQAogCiAjZGVmaW5lIEFVMDgyOF9NQVhfSU5QVVQgICAgICAgIDQKIAorLyogYXUwODI4IHJlc291cmNlIHR5cGVzICh1c2VkIGZvciByZXNfZ2V0L3Jlc19sb2NrIGV0YyAqLworI2RlZmluZSBBVTA4MjhfUkVTT1VSQ0VfVklERU8gMHgwMQorI2RlZmluZSBBVTA4MjhfUkVTT1VSQ0VfVkJJICAgMHgwMgorCiBlbnVtIGF1MDgyOF9pdHlwZSB7CiAJQVUwODI4X1ZNVVhfVU5ERUZJTkVEID0gMCwKIAlBVTA4MjhfVk1VWF9DT01QT1NJVEUsCkBAIC0xMTUsOCArMTE5LDEwIEBACiAKIHN0cnVjdCBhdTA4MjhfZmggewogCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXY7Ci0JdW5zaWduZWQgaW50ICBzdHJlYW1fb246MTsJLyogTG9ja3Mgc3RyZWFtcyAqLworCXVuc2lnbmVkIGludCAgcmVzb3VyY2VzOworCiAJc3RydWN0IHZpZGVvYnVmX3F1ZXVlICAgICAgICB2Yl92aWRxOworCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAgICAgICAgdmJfdmJpcTsKIAllbnVtIHY0bDJfYnVmX3R5cGUgICAgICAgICAgIHR5cGU7CiB9OwogCkBAIC0xNDUsNyArMTUxLDggQEAKIAlpbnQJCQkJdG1wX2J1Zl9sZW47CiAKIAkJLyogU3RvcmVzIGFscmVhZHkgcmVxdWVzdGVkIGJ1ZmZlcnMgKi8KLQlzdHJ1Y3QgYXUwODI4X2J1ZmZlciAgICAJKmJ1ZjsKKwlzdHJ1Y3QgYXUwODI4X2J1ZmZlcgkJKmJ1ZjsKKwlzdHJ1Y3QgYXUwODI4X2J1ZmZlcgkJKnZiaV9idWY7CiAKIAkJLyogU3RvcmVzIHRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgZmllbGRzICovCiAJaW50CQkJCW5maWVsZHM7CkBAIC0xOTQsMTEgKzIwMSwxNCBAQAogCS8qIEFuYWxvZyAqLwogCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKIAlpbnQgdXNlcnM7Ci0JdW5zaWduZWQgaW50IHN0cmVhbV9vbjoxOwkvKiBMb2NrcyBzdHJlYW1zICovCisJdW5zaWduZWQgaW50IHJlc291cmNlczsJLyogcmVzb3VyY2VzIGluIHVzZSAqLwogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXY7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmJpX2RldjsKIAlpbnQgd2lkdGg7CiAJaW50IGhlaWdodDsKKwlpbnQgdmJpX3dpZHRoOworCWludCB2YmlfaGVpZ2h0OworCXUzMiB2YmlfcmVhZDsKIAl1MzIgZmllbGRfc2l6ZTsKIAl1MzIgZnJhbWVfc2l6ZTsKIAl1MzIgYnl0ZXNwZXJsaW5lOwpAQCAtMjE5LDYgKzIyOSw3IEBACiAKIAkvKiBJc29jIGNvbnRyb2wgc3RydWN0ICovCiAJc3RydWN0IGF1MDgyOF9kbWFxdWV1ZSB2aWRxOworCXN0cnVjdCBhdTA4MjhfZG1hcXVldWUgdmJpcTsKIAlzdHJ1Y3QgYXUwODI4X3VzYl9pc29jX2N0bCBpc29jX2N0bDsKIAlzcGlubG9ja190IHNsb2NrOwogCkBAIC0yNzgsNiArMjg5LDkgQEAKIGV4dGVybiBpbnQgYXUwODI4X2R2Yl9yZWdpc3RlcihzdHJ1Y3QgYXUwODI4X2RldiAqZGV2KTsKIGV4dGVybiB2b2lkIGF1MDgyOF9kdmJfdW5yZWdpc3RlcihzdHJ1Y3QgYXUwODI4X2RldiAqZGV2KTsKIAorLyogYXUwODI4LXZiaS5jICovCitleHRlcm4gc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBhdTA4MjhfdmJpX3FvcHM7CisKICNkZWZpbmUgZHByaW50ayhsZXZlbCwgZm10LCBhcmcuLi4pXAogCWRvIHsgaWYgKGF1MDgyOF9kZWJ1ZyAmIGxldmVsKVwKIAkJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIi8wOiAiIGZtdCwgIyMgYXJnKTtcCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtcmlzYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LXJpc2MuYwppbmRleCBjMjRiMWMxLi4wZmE5ZjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtcmlzYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1yaXNjLmMKQEAgLTU4Myw3ICs1ODMsNyBAQAogCiAJQlVHX09OKGluX2ludGVycnVwdCgpKTsKIAl2aWRlb2J1Zl93YWl0b24oJmJ1Zi0+dmIsMCwwKTsKLQl2aWRlb2J1Zl9kbWFfdW5tYXAocSwgZG1hKTsKKwl2aWRlb2J1Zl9kbWFfdW5tYXAocS0+ZGV2LCBkbWEpOwogCXZpZGVvYnVmX2RtYV9mcmVlKGRtYSk7CiAJYnRjeF9yaXNjbWVtX2ZyZWUoYnR2LT5jLnBjaSwmYnVmLT5ib3R0b20pOwogCWJ0Y3hfcmlzY21lbV9mcmVlKGJ0di0+Yy5wY2ksJmJ1Zi0+dG9wKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYV91c2IuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYV91c2IuYwppbmRleCBlZjFmODkzLi41OGQxOTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWFfdXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhX3VzYi5jCkBAIC01ODQsNyArNTg0LDYgQEAKIHsKIAlzdHJ1Y3QgY2FtX2RhdGEgKmNhbSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAJc3RydWN0IHVzYl9jcGlhICp1Y3BpYTsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CiAJaWYgKCFjYW0pCkBAIC02MDYsOCArNjA1LDYgQEAKIAlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmdWNwaWEtPndxX3N0cmVhbSkpCiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdWNwaWEtPndxX3N0cmVhbSk7CiAKLQl1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKLQogCXVjcGlhLT5jdXJidWZmID0gdWNwaWEtPndvcmtidWZmID0gTlVMTDsKIAogCXZmcmVlKHVjcGlhLT5idWZmZXJzWzJdKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pb2N0bC5jCmluZGV4IDIwZWFmMzguLmQ2NzkyNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuYwpAQCAtMTA4MSw3ICsxMDgxLDcgQEAKIAkJICAgIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCA9IHZpZGVvX2RldmRhdGEoZmlscCk7Ci0Jc3RydWN0IGN4MThfb3Blbl9pZCAqaWQgPSAoc3RydWN0IGN4MThfb3Blbl9pZCAqKWZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gxOF9vcGVuX2lkICppZCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgY3gxOCAqY3ggPSBpZC0+Y3g7CiAJbG9uZyByZXM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCmluZGV4IGQ2MzkxODYuLjIwMTRkYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYwpAQCAtNDA4LDEwICs0MDgsMTggQEAKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyNzUsCiAJfSwgewogCQkuc3VidmVuZG9yID0gMHgwMDcwLAorCQkuc3ViZGV2aWNlID0gMHgyMjFkLAorCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI3NSwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweDIyNTEsCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjU1LAogCX0sIHsKIAkJLnN1YnZlbmRvciA9IDB4MDA3MCwKKwkJLnN1YmRldmljZSA9IDB4MjI1OSwKKwkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyNTUsCisJfSwgeworCQkuc3VidmVuZG9yID0gMHgwMDcwLAogCQkuc3ViZGV2aWNlID0gMHgyMjkxLAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTIxMCwKIAl9LCB7CkBAIC00MTksNiArNDI3LDM4IEBACiAJCS5zdWJkZXZpY2UgPSAweDIyOTUsCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjEwLAogCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4MDA3MCwKKwkJLnN1YmRldmljZSA9IDB4MjI5OSwKKwkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyMTAsCisJfSwgeworCQkuc3VidmVuZG9yID0gMHgwMDcwLAorCQkuc3ViZGV2aWNlID0gMHgyMjlkLAorCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTIxMCwgLyogSFZSMTIxNSAqLworCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4MDA3MCwKKwkJLnN1YmRldmljZSA9IDB4MjJmMCwKKwkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyMTAsCisJfSwgeworCQkuc3VidmVuZG9yID0gMHgwMDcwLAorCQkuc3ViZGV2aWNlID0gMHgyMmYxLAorCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI1NSwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgPSAweDIyZjIsCisJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjc1LAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4MDA3MCwKKwkJLnN1YmRldmljZSA9IDB4MjJmMywKKwkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyMTAsIC8qIEhWUjEyMTUgKi8KKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgPSAweDIyZjQsCisJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjEwLAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4MDA3MCwKKwkJLnN1YmRldmljZSA9IDB4MjJmNSwKKwkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyMTAsIC8qIEhWUjEyMTUgKi8KKwl9LCB7CiAJCS5zdWJ2ZW5kb3IgPSAweDE0ZjEsCiAJCS5zdWJkZXZpY2UgPSAweDg2NTEsCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX01ZR0lDQV9YODUwNiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNvcmUuYwppbmRleCAwZGRlNTdlLi5mZjc2ZjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY29yZS5jCkBAIC0xMTQyLDcgKzExNDIsNyBAQAogCiAJQlVHX09OKGluX2ludGVycnVwdCgpKTsKIAl2aWRlb2J1Zl93YWl0b24oJmJ1Zi0+dmIsIDAsIDApOwotCXZpZGVvYnVmX2RtYV91bm1hcChxLCBkbWEpOworCXZpZGVvYnVmX2RtYV91bm1hcChxLT5kZXYsIGRtYSk7CiAJdmlkZW9idWZfZG1hX2ZyZWUoZG1hKTsKIAlidGN4X3Jpc2NtZW1fZnJlZSh0b19wY2lfZGV2KHEtPmRldiksICZidWYtPnJpc2MpOwogCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9ORUVEU19JTklUOwpAQCAtMTk1Myw4ICsxOTUzLDEyIEBACiAJCWdvdG8gZmFpbF9pcnE7CiAJfQogCi0JZXJyID0gcmVxdWVzdF9pcnEocGNpX2Rldi0+aXJxLCBjeDIzODg1X2lycSwKLQkJCSAgSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELCBkZXYtPm5hbWUsIGRldik7CisJaWYgKCFwY2lfZW5hYmxlX21zaShwY2lfZGV2KSkKKwkJZXJyID0gcmVxdWVzdF9pcnEocGNpX2Rldi0+aXJxLCBjeDIzODg1X2lycSwKKwkJCQkgIElSUUZfRElTQUJMRUQsIGRldi0+bmFtZSwgZGV2KTsKKwllbHNlCisJCWVyciA9IHJlcXVlc3RfaXJxKHBjaV9kZXYtPmlycSwgY3gyMzg4NV9pcnEsCisJCQkJICBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAoZXJyIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCBnZXQgSVJRICVkXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBwY2lfZGV2LT5pcnEpOwpAQCAtMjAwMCw2ICsyMDA0LDcgQEAKIAogCS8qIHVucmVnaXN0ZXIgc3R1ZmYgKi8KIAlmcmVlX2lycShwY2lfZGV2LT5pcnEsIGRldik7CisJcGNpX2Rpc2FibGVfbXNpKHBjaV9kZXYpOwogCiAJY3gyMzg4NV9kZXZfdW5yZWdpc3RlcihkZXYpOwogCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIodjRsMl9kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1kdmIuYwppbmRleCAwYTE5OWQ3Li4zZDcwYWYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1kdmIuYwpAQCAtOTkxLDcgKzk5MSw3IEBACiAJcmV0ID0gdmlkZW9idWZfZHZiX3JlZ2lzdGVyX2J1cygmcG9ydC0+ZnJvbnRlbmRzLCBUSElTX01PRFVMRSwgcG9ydCwKIAkJCQkJJmRldi0+cGNpLT5kZXYsIGFkYXB0ZXJfbnIsIDAsCiAJCQkJCWN4MjM4ODVfZHZiX2ZlX2lvY3RsX292ZXJyaWRlKTsKLQlpZiAoIXJldCkKKwlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJLyogaW5pdCBDSSAmIE1BQyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWlucHV0LmMKaW5kZXggNWRlNmJhOS4uZDBiMTYxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pbnB1dC5jCkBAIC0zNywxNjEgKzM3LDU1IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxtZWRpYS9pci1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS9pci1jb3JlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1zdWJkZXYuaD4KIAogI2luY2x1ZGUgImN4MjM4ODUuaCIKIAotI2RlZmluZSBSQzVfQklUUwkJMTQKLSNkZWZpbmUgUkM1X0hBTEZfQklUUwkJKDIqUkM1X0JJVFMpCi0jZGVmaW5lIFJDNV9IQUxGX0JJVFNfTUFTSwkoKDEgPDwgUkM1X0hBTEZfQklUUykgLSAxKQotCi0jZGVmaW5lIFJDNV9TVEFSVF9CSVRTX05PUk1BTAkweDMgLyogQ29tbWFuZCByYW5nZSAgMCAtICA2MyAqLwotI2RlZmluZSBSQzVfU1RBUlRfQklUU19FWFRFTkRFRAkweDIgLyogQ29tbWFuZCByYW5nZSA2NCAtIDEyNyAqLwotCi0jZGVmaW5lIFJDNV9FWFRFTkRFRF9DT01NQU5EX09GRlNFVAk2NAotCiAjZGVmaW5lIE1PRFVMRV9OQU1FICJjeDIzODg1IgogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCByYzVfY29tbWFuZCh1MzIgcmM1X2Jhc2ViYW5kKQorc3RhdGljIHZvaWQgY29udmVydF9tZWFzdXJlbWVudCh1MzIgeCwgc3RydWN0IGlyX3Jhd19ldmVudCAqeSkKIHsKLQlyZXR1cm4gUkM1X0lOU1RSKHJjNV9iYXNlYmFuZCkgKwotCQkoKFJDNV9TVEFSVChyYzVfYmFzZWJhbmQpID09IFJDNV9TVEFSVF9CSVRTX0VYVEVOREVEKQotCQkJPyBSQzVfRVhURU5ERURfQ09NTUFORF9PRkZTRVQgOiAwKTsKKwlpZiAoeCA9PSBWNEwyX1NVQkRFVl9JUl9QVUxTRV9SWF9TRVFfRU5EKSB7CisJCXktPnB1bHNlID0gZmFsc2U7CisJCXktPmR1cmF0aW9uID0gVjRMMl9TVUJERVZfSVJfUFVMU0VfTUFYX1dJRFRIX05TOworCQlyZXR1cm47CisJfQorCisJeS0+cHVsc2UgPSAoeCAmIFY0TDJfU1VCREVWX0lSX1BVTFNFX0xFVkVMX01BU0spID8gdHJ1ZSA6IGZhbHNlOworCXktPmR1cmF0aW9uID0geCAmIFY0TDJfU1VCREVWX0lSX1BVTFNFX01BWF9XSURUSF9OUzsKIH0KIAotc3RhdGljIHZvaWQgY3gyMzg4NV9pbnB1dF9wcm9jZXNzX3Jhd19yYzUoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYpCitzdGF0aWMgdm9pZCBjeDIzODg1X2lucHV0X3Byb2Nlc3NfbWVhc3VyZW1lbnRzKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LAorCQkJCQkgICAgICAgYm9vbCBvdmVycnVuKQogewotCXN0cnVjdCBjYXJkX2lyICppcl9pbnB1dCA9IGRldi0+aXJfaW5wdXQ7Ci0JdW5zaWduZWQgaW50IGNvZGUsIGNvbW1hbmQ7Ci0JdTMyIHJjNTsKKwlzdHJ1Y3QgY3gyMzg4NV9rZXJuZWxfaXIgKmtlcm5lbF9pciA9IGRldi0+a2VybmVsX2lyOworCXN0cnVjdCBpcl9yYXdfZXZlbnQga2VybmVsX2lyX2V2ZW50OwogCi0JLyogSWdub3JlIGNvZGVzIHRoYXQgYXJlIHRvbyBzaG9ydCB0byBiZSB2YWxpZCBSQy01ICovCi0JaWYgKGlyX2lucHV0LT5sYXN0X2JpdCA8IChSQzVfSEFMRl9CSVRTIC0gMSkpCi0JCXJldHVybjsKLQotCS8qIFRoZSBsaWJyYXJ5IGhhcyB0aGUgbWFuY2hlc3RlciBjb2RpbmcgYmFja3dhcmRzOyBYT1IgdG8gYWRhcHQuICovCi0JY29kZSA9IChpcl9pbnB1dC0+Y29kZSAmIFJDNV9IQUxGX0JJVFNfTUFTSykgXiBSQzVfSEFMRl9CSVRTX01BU0s7Ci0JcmM1ID0gaXJfcmM1X2RlY29kZShjb2RlKTsKLQotCXN3aXRjaCAoUkM1X1NUQVJUKHJjNSkpIHsKLQljYXNlIFJDNV9TVEFSVF9CSVRTX05PUk1BTDoKLQkJYnJlYWs7Ci0JY2FzZSBSQzVfU1RBUlRfQklUU19FWFRFTkRFRDoKLQkJLyogRG9uJ3QgYWxsb3cgaWYgdGhlIHJlbW90ZSBvbmx5IGVtaXRzIHN0YW5kYXJkIGNvbW1hbmRzICovCi0JCWlmIChpcl9pbnB1dC0+c3RhcnQgPT0gUkM1X1NUQVJUX0JJVFNfTk9STUFMKQotCQkJcmV0dXJuOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGlyX2lucHV0LT5hZGRyICE9IFJDNV9BRERSKHJjNSkpCi0JCXJldHVybjsKLQotCS8qIERvbid0IGdlbmVyYXRlIGEga2V5cHJlc3MgZm9yIFJDLTUgYXV0by1yZXBlYXRlZCBrZXlwcmVzc2VzICovCi0JY29tbWFuZCA9IHJjNV9jb21tYW5kKHJjNSk7Ci0JaWYgKFJDNV9UT0dHTEUocmM1KSAhPSBSQzVfVE9HR0xFKGlyX2lucHV0LT5sYXN0X3JjNSkgfHwKLQkgICAgY29tbWFuZCAhPSByYzVfY29tbWFuZChpcl9pbnB1dC0+bGFzdF9yYzUpIHx8Ci0JICAgIC8qIENhdGNoIFQgPT0gMCwgQ01EID09IDAgKGUuZy4gJzAnKSBhcyBmaXJzdCBrZXlwcmVzcyBhZnRlciBpbml0ICovCi0JICAgIFJDNV9TVEFSVChpcl9pbnB1dC0+bGFzdF9yYzUpID09IDApIHsKLQkJLyogVGhpcyBrZXlwcmVzcyBpcyBkaWZmZXJuZXQ6IG5vdCBhbiBhdXRvIHJlcGVhdCAqLwotCQlpcl9pbnB1dF9ub2tleShpcl9pbnB1dC0+ZGV2LCAmaXJfaW5wdXQtPmlyKTsKLQkJaXJfaW5wdXRfa2V5ZG93bihpcl9pbnB1dC0+ZGV2LCAmaXJfaW5wdXQtPmlyLCBjb21tYW5kKTsKLQl9Ci0JaXJfaW5wdXQtPmxhc3RfcmM1ID0gcmM1OwotCi0JLyogU2NoZWR1bGUgd2hlbiB3ZSBzaG91bGQgZG8gdGhlIGtleSB1cCBldmVudDogaXJfaW5wdXRfbm9rZXkoKSAqLwotCW1vZF90aW1lcigmaXJfaW5wdXQtPnRpbWVyX2tleXVwLAotCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGlyX2lucHV0LT5yYzVfa2V5X3RpbWVvdXQpKTsKLX0KLQotc3RhdGljIHZvaWQgY3gyMzg4NV9pbnB1dF9uZXh0X3B1bHNlX3dpZHRoX3JjNShzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwKLQkJCQkJICAgICAgIHUzMiBuc19wdWxzZSkKLXsKLQljb25zdCBpbnQgcmM1X3F1YXJ0ZXJiaXRfbnMgPSA0NDQ0NDQ7IC8qIDMyIGN5Y2xlcy8zNiBrSHovMiA9IDQ0NCB1cyAqLwotCXN0cnVjdCBjYXJkX2lyICppcl9pbnB1dCA9IGRldi0+aXJfaW5wdXQ7Ci0JaW50IGksIGxldmVsLCBxdWFydGVyYml0cywgaGFsZmJpdHM7Ci0KLQlpZiAoIWlyX2lucHV0LT5hY3RpdmUpIHsKLQkJaXJfaW5wdXQtPmFjdGl2ZSA9IDE7Ci0JCS8qIGFzc3VtZSBhbiBpbml0aWFsIHNwYWNlIHRoYXQgd2UgbWF5IG5vdCBkZXRlY3Qgb3IgbWVhc3VyZSAqLwotCQlpcl9pbnB1dC0+Y29kZSA9IDA7Ci0JCWlyX2lucHV0LT5sYXN0X2JpdCA9IDA7Ci0JfQotCi0JaWYgKG5zX3B1bHNlID09IFY0TDJfU1VCREVWX0lSX1BVTFNFX1JYX1NFUV9FTkQpIHsKLQkJaXJfaW5wdXQtPmxhc3RfYml0Kys7IC8qIEFjY291bnQgZm9yIHRoZSBmaW5hbCBzcGFjZSAqLwotCQlpcl9pbnB1dC0+YWN0aXZlID0gMDsKLQkJY3gyMzg4NV9pbnB1dF9wcm9jZXNzX3Jhd19yYzUoZGV2KTsKLQkJcmV0dXJuOwotCX0KLQotCWxldmVsID0gKG5zX3B1bHNlICYgVjRMMl9TVUJERVZfSVJfUFVMU0VfTEVWRUxfTUFTSykgPyAxIDogMDsKLQotCS8qIFNraXAgYW55IGxlYWRpbmcgc3BhY2UgdG8gc3luYyB0byB0aGUgc3RhcnQgYml0ICovCi0JaWYgKGlyX2lucHV0LT5sYXN0X2JpdCA9PSAwICYmIGxldmVsID09IDApCi0JCXJldHVybjsKLQotCS8qCi0JICogV2l0aCB2YWxpZCBSQy01IHdlIGNhbiBnZXQgdXAgdG8gdHdvIGNvbnNlY3V0aXZlIGhhbGYtYml0cyBpbiBhCi0JICogc2luZ2xlIHB1bHNlIG1lYXN1cm1lbnQuICBFeHBlcmltZW50cyBoYXZlIHNob3duIHRoYXQgdGhlIGR1cmF0aW9uCi0JICogb2YgYSBoYWxmLWJpdCBjYW4gdmFyeS4gIE1ha2Ugc3VyZSB3ZSBhbHdheXMgZW5kIHVwIHdpdGggYW4gZXZlbgotCSAqIG51bWJlciBvZiBxdWFydGVyIGJpdHMgYXQgdGhlIHNhbWUgbGV2ZWwgKG1hcmsgb3Igc3BhY2UpLgotCSAqLwotCW5zX3B1bHNlICY9IFY0TDJfU1VCREVWX0lSX1BVTFNFX01BWF9XSURUSF9OUzsKLQlxdWFydGVyYml0cyA9IG5zX3B1bHNlIC8gcmM1X3F1YXJ0ZXJiaXRfbnM7Ci0JaWYgKHF1YXJ0ZXJiaXRzICYgMSkKLQkJcXVhcnRlcmJpdHMrKzsKLQloYWxmYml0cyA9IHF1YXJ0ZXJiaXRzIC8gMjsKLQotCWZvciAoaSA9IDA7IGkgPCBoYWxmYml0czsgaSsrKSB7Ci0JCWlyX2lucHV0LT5sYXN0X2JpdCsrOwotCQlpcl9pbnB1dC0+Y29kZSB8PSAobGV2ZWwgPDwgaXJfaW5wdXQtPmxhc3RfYml0KTsKLQotCQlpZiAoaXJfaW5wdXQtPmxhc3RfYml0ID49IFJDNV9IQUxGX0JJVFMtMSkgewotCQkJaXJfaW5wdXQtPmFjdGl2ZSA9IDA7Ci0JCQljeDIzODg1X2lucHV0X3Byb2Nlc3NfcmF3X3JjNShkZXYpOwotCQkJLyoKLQkJCSAqIElmIGxldmVsIGlzIDEsIGEgbGVhZGluZyBtYXJrIGlzIGludmFsaWQgZm9yIFJDNS4KLQkJCSAqIElmIGxldmVsIGlzIDAsIHdlIHNjYW4gcGFzdCBleHRyYSBpbnRpYWwgc3BhY2UuCi0JCQkgKiBFaXRoZXIgd2F5IHdlIGRvbid0IHdhbnQgdG8gcmVhY3RpdmF0ZSBjb2xsZWN0aW5nCi0JCQkgKiBtYXJrcyBvciBzcGFjZXMgaGVyZSB3aXRoIGFueSBsZWZ0IG92ZXIgaGFsZi1iaXRzLgotCQkJICovCi0JCQlicmVhazsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgY3gyMzg4NV9pbnB1dF9wcm9jZXNzX3B1bHNlX3dpZHRoc19yYzUoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsCi0JCQkJCQkgICBib29sIGFkZF9lb20pCi17Ci0Jc3RydWN0IGNhcmRfaXIgKmlyX2lucHV0ID0gZGV2LT5pcl9pbnB1dDsKLQlzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgKmlyX2lucHV0X3N0YXRlID0gJmlyX2lucHV0LT5pcjsKLQotCXUzMiBuc19wdWxzZVtSQzVfSEFMRl9CSVRTKzFdOwotCXNzaXplX3QgbnVtID0gMDsKKwl1MzIgc2RfaXJfZGF0YVs2NF07CisJc3NpemVfdCBudW07CiAJaW50IGNvdW50LCBpOworCWJvb2wgaGFuZGxlID0gZmFsc2U7CiAKIAlkbyB7Ci0JCXY0bDJfc3ViZGV2X2NhbGwoZGV2LT5zZF9pciwgaXIsIHJ4X3JlYWQsICh1OCAqKSBuc19wdWxzZSwKLQkJCQkgc2l6ZW9mKG5zX3B1bHNlKSwgJm51bSk7CisJCW51bSA9IDA7CisJCXY0bDJfc3ViZGV2X2NhbGwoZGV2LT5zZF9pciwgaXIsIHJ4X3JlYWQsICh1OCAqKSBzZF9pcl9kYXRhLAorCQkJCSBzaXplb2Yoc2RfaXJfZGF0YSksICZudW0pOwogCiAJCWNvdW50ID0gbnVtIC8gc2l6ZW9mKHUzMik7CiAKLQkJLyogQXBwZW5kIGFuIGVuZCBvZiBSeCBzZXEsIGlmIHRoZSBjYWxsZXIgcmVxdWVzdGVkICovCi0JCWlmIChhZGRfZW9tICYmIGNvdW50IDwgQVJSQVlfU0laRShuc19wdWxzZSkpIHsKLQkJCW5zX3B1bHNlW2NvdW50XSA9IFY0TDJfU1VCREVWX0lSX1BVTFNFX1JYX1NFUV9FTkQ7Ci0JCQljb3VudCsrOworCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQkJY29udmVydF9tZWFzdXJlbWVudChzZF9pcl9kYXRhW2ldLCAma2VybmVsX2lyX2V2ZW50KTsKKwkJCWlyX3Jhd19ldmVudF9zdG9yZShrZXJuZWxfaXItPmlucF9kZXYsCisJCQkJCSAgICZrZXJuZWxfaXJfZXZlbnQpOworCQkJaGFuZGxlID0gdHJ1ZTsKIAkJfQotCi0JCS8qIEp1c3QgZHJhaW4gdGhlIFJ4IEZJRk8sIGlmIHdlJ3JlIGNhbGxlZCwgYnV0IG5vdCBSQy01ICovCi0JCWlmIChpcl9pbnB1dF9zdGF0ZS0+aXJfdHlwZSAhPSBJUl9UWVBFX1JDNSkKLQkJCWNvbnRpbnVlOwotCi0JCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotCQkJY3gyMzg4NV9pbnB1dF9uZXh0X3B1bHNlX3dpZHRoX3JjNShkZXYsIG5zX3B1bHNlW2ldKTsKIAl9IHdoaWxlIChudW0gIT0gMCk7CisKKwlpZiAob3ZlcnJ1bikKKwkJaXJfcmF3X2V2ZW50X3Jlc2V0KGtlcm5lbF9pci0+aW5wX2Rldik7CisJZWxzZSBpZiAoaGFuZGxlKQorCQlpcl9yYXdfZXZlbnRfaGFuZGxlKGtlcm5lbF9pci0+aW5wX2Rldik7CiB9CiAKIHZvaWQgY3gyMzg4NV9pbnB1dF9yeF93b3JrX2hhbmRsZXIoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHUzMiBldmVudHMpCkBAIC0yMzAsNyArMTI0LDcgQEAKIAl9CiAKIAlpZiAoZGF0YV9hdmFpbGFibGUpCi0JCWN4MjM4ODVfaW5wdXRfcHJvY2Vzc19wdWxzZV93aWR0aHNfcmM1KGRldiwgb3ZlcnJ1bik7CisJCWN4MjM4ODVfaW5wdXRfcHJvY2Vzc19tZWFzdXJlbWVudHMoZGV2LCBvdmVycnVuKTsKIAogCWlmIChvdmVycnVuKSB7CiAJCS8qIElmIHRoZXJlIHdhcyBhIEZJRk8gb3ZlcnJ1biwgY2xlYXIgJiByZXN0YXJ0IHRoZSBkZXZpY2UgKi8KQEAgLTI0MSwzNCArMTM1LDE1IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBjeDIzODg1X2lucHV0X2lyX3N0YXJ0KHN0cnVjdCBjeDIzODg1X2RldiAqZGV2KQorc3RhdGljIGludCBjeDIzODg1X2lucHV0X2lyX3N0YXJ0KHN0cnVjdCBjeDIzODg1X2RldiAqZGV2KQogewotCXN0cnVjdCBjYXJkX2lyICppcl9pbnB1dCA9IGRldi0+aXJfaW5wdXQ7Ci0Jc3RydWN0IGlyX2lucHV0X3N0YXRlICppcl9pbnB1dF9zdGF0ZSA9ICZpcl9pbnB1dC0+aXI7CiAJc3RydWN0IHY0bDJfc3ViZGV2X2lyX3BhcmFtZXRlcnMgcGFyYW1zOwogCiAJaWYgKGRldi0+c2RfaXIgPT0gTlVMTCkKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCWF0b21pY19zZXQoJmRldi0+aXJfaW5wdXRfc3RvcHBpbmcsIDApOwogCi0JLyoga2V5dXAgdGltZXIgc2V0IHVwLCBpZiBuZWVkZWQgKi8KLQlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKLQljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE4NTA6Ci0JY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjkwOgotCQlzZXR1cF90aW1lcigmaXJfaW5wdXQtPnRpbWVyX2tleXVwLAotCQkJICAgIGlyX3JjNV90aW1lcl9rZXl1cCwJLyogTm90IGFjdHVhbGx5IFJDLTUgc3BlY2lmaWMgKi8KLQkJCSAgICAodW5zaWduZWQgbG9uZykgaXJfaW5wdXQpOwotCQlpZiAoaXJfaW5wdXRfc3RhdGUtPmlyX3R5cGUgPT0gSVJfVFlQRV9SQzUpIHsKLQkJCS8qCi0JCQkgKiBSQy01IHJlcGVhdHMgYSBoZWxkIGtleSBldmVyeQotCQkJICogNjQgYml0cyAqICgyICogMzIvMzYwMDApIHNlYy9iaXQgPSAxMTMuNzc4IG1zCi0JCQkgKi8KLQkJCWlyX2lucHV0LT5yYzVfa2V5X3RpbWVvdXQgPSAxMTU7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCiAJdjRsMl9zdWJkZXZfY2FsbChkZXYtPnNkX2lyLCBpciwgcnhfZ19wYXJhbWV0ZXJzLCAmcGFyYW1zKTsKIAlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE4NTA6CkBAIC0yOTksMTEgKzE3NCwyMSBAQAogCQlicmVhazsKIAl9CiAJdjRsMl9zdWJkZXZfY2FsbChkZXYtPnNkX2lyLCBpciwgcnhfc19wYXJhbWV0ZXJzLCAmcGFyYW1zKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDIzODg1X2lucHV0X2lyX29wZW4odm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3QgY3gyMzg4NV9rZXJuZWxfaXIgKmtlcm5lbF9pciA9IHByaXY7CisKKwlpZiAoa2VybmVsX2lyLT5jeCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBjeDIzODg1X2lucHV0X2lyX3N0YXJ0KGtlcm5lbF9pci0+Y3gpOwogfQogCiBzdGF0aWMgdm9pZCBjeDIzODg1X2lucHV0X2lyX3N0b3Aoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYpCiB7Ci0Jc3RydWN0IGNhcmRfaXIgKmlyX2lucHV0ID0gZGV2LT5pcl9pbnB1dDsKIAlzdHJ1Y3QgdjRsMl9zdWJkZXZfaXJfcGFyYW1ldGVycyBwYXJhbXM7CiAKIAlpZiAoZGV2LT5zZF9pciA9PSBOVUxMKQpAQCAtMzI3LDIxICsyMTIsMjYgQEAKIAl9CiAKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworfQogCi0Jc3dpdGNoIChkZXYtPmJvYXJkKSB7Ci0JY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODUwOgotCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI5MDoKLQkJZGVsX3RpbWVyX3N5bmMoJmlyX2lucHV0LT50aW1lcl9rZXl1cCk7Ci0JCWJyZWFrOwotCX0KK3N0YXRpYyB2b2lkIGN4MjM4ODVfaW5wdXRfaXJfY2xvc2Uodm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3QgY3gyMzg4NV9rZXJuZWxfaXIgKmtlcm5lbF9pciA9IHByaXY7CisKKwlpZiAoa2VybmVsX2lyLT5jeCAhPSBOVUxMKQorCQljeDIzODg1X2lucHV0X2lyX3N0b3Aoa2VybmVsX2lyLT5jeCk7CiB9CiAKIGludCBjeDIzODg1X2lucHV0X2luaXQoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYpCiB7Ci0Jc3RydWN0IGNhcmRfaXIgKmlyOwotCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKLQljaGFyICppcl9jb2RlcyA9IE5VTEw7Ci0JaW50IGlyX3R5cGUsIGlyX2FkZHIsIGlyX3N0YXJ0OworCXN0cnVjdCBjeDIzODg1X2tlcm5lbF9pciAqa2VybmVsX2lyOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucF9kZXY7CisJc3RydWN0IGlyX2Rldl9wcm9wcyAqcHJvcHM7CisKKwljaGFyICpyY19tYXA7CisJZW51bSByY19kcml2ZXJfdHlwZSBkcml2ZXJfdHlwZTsKKwl1bnNpZ25lZCBsb25nIGFsbG93ZWRfcHJvdG9zOworCiAJaW50IHJldDsKIAogCS8qCkBAIC0zNTQsNTMgKzI0NCw1OSBAQAogCXN3aXRjaCAoZGV2LT5ib2FyZCkgewogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTg1MDoKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyOTA6Ci0JCS8qIFBhcmFtZXRlcnMgZm9yIHRoZSBncmV5IEhhdXBwYXVnZSByZW1vdGUgZm9yIHRoZSBIVlItMTg1MCAqLwotCQlpcl9jb2RlcyA9IFJDX01BUF9IQVVQUEFVR0VfTkVXOwotCQlpcl90eXBlID0gSVJfVFlQRV9SQzU7Ci0JCWlyX2FkZHIgPSAweDFlOyAvKiBSQy01IHN5c3RlbSBiaXRzIGVtaXR0ZWQgYnkgdGhlIHJlbW90ZSAqLwotCQlpcl9zdGFydCA9IFJDNV9TVEFSVF9CSVRTX05PUk1BTDsgLyogQSBiYXNpYyBSQy01IHJlbW90ZSAqLworCQkvKiBJbnRlZ3JhdGVkIENYMjM4ODggSVIgY29udHJvbGxlciAqLworCQlkcml2ZXJfdHlwZSA9IFJDX0RSSVZFUl9JUl9SQVc7CisJCWFsbG93ZWRfcHJvdG9zID0gSVJfVFlQRV9BTEw7CisJCS8qIFRoZSBncmV5IEhhdXBwYXVnZSBSQy01IHJlbW90ZSAqLworCQlyY19tYXAgPSBSQ19NQVBfUkM1X0hBVVBQQVVHRV9ORVc7CiAJCWJyZWFrOwotCX0KLQlpZiAoaXJfY29kZXMgPT0gTlVMTCkKKwlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKLQlpciA9IGt6YWxsb2Moc2l6ZW9mKCppciksIEdGUF9LRVJORUwpOwotCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwotCWlmICghaXIgfHwgIWlucHV0X2RldikgeworCS8qIGN4MjM4ODUgYm9hcmQgaW5zdGFuY2Uga2VybmVsIElSIHN0YXRlICovCisJa2VybmVsX2lyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGN4MjM4ODVfa2VybmVsX2lyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGtlcm5lbF9pciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWtlcm5lbF9pci0+Y3ggPSBkZXY7CisJa2VybmVsX2lyLT5uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJjeDIzODg1IElSICglcykiLAorCQkJCSAgICBjeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5uYW1lKTsKKwlrZXJuZWxfaXItPnBoeXMgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgInBjaS0lcy9pcjAiLAorCQkJCSAgICBwY2lfbmFtZShkZXYtPnBjaSkpOworCisJLyogaW5wdXQgZGV2aWNlICovCisJaW5wX2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmIChpbnBfZGV2ID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJfb3V0X2ZyZWU7CiAJfQogCi0JaXItPmRldiA9IGlucHV0X2RldjsKLQlpci0+YWRkciA9IGlyX2FkZHI7Ci0JaXItPnN0YXJ0ID0gaXJfc3RhcnQ7Ci0KLQkvKiBpbml0IGlucHV0IGRldmljZSAqLwotCXNucHJpbnRmKGlyLT5uYW1lLCBzaXplb2YoaXItPm5hbWUpLCAiY3gyMzg4NSBJUiAoJXMpIiwKLQkJIGN4MjM4ODVfYm9hcmRzW2Rldi0+Ym9hcmRdLm5hbWUpOwotCXNucHJpbnRmKGlyLT5waHlzLCBzaXplb2YoaXItPnBoeXMpLCAicGNpLSVzL2lyMCIsIHBjaV9uYW1lKGRldi0+cGNpKSk7Ci0KLQlyZXQgPSBpcl9pbnB1dF9pbml0KGlucHV0X2RldiwgJmlyLT5pciwgaXJfdHlwZSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyX291dF9mcmVlOwotCi0JaW5wdXRfZGV2LT5uYW1lID0gaXItPm5hbWU7Ci0JaW5wdXRfZGV2LT5waHlzID0gaXItPnBoeXM7Ci0JaW5wdXRfZGV2LT5pZC5idXN0eXBlID0gQlVTX1BDSTsKLQlpbnB1dF9kZXYtPmlkLnZlcnNpb24gPSAxOworCWtlcm5lbF9pci0+aW5wX2RldiA9IGlucF9kZXY7CisJaW5wX2Rldi0+bmFtZSA9IGtlcm5lbF9pci0+bmFtZTsKKwlpbnBfZGV2LT5waHlzID0ga2VybmVsX2lyLT5waHlzOworCWlucF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfUENJOworCWlucF9kZXYtPmlkLnZlcnNpb24gPSAxOwogCWlmIChkZXYtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvcikgewotCQlpbnB1dF9kZXYtPmlkLnZlbmRvciAgPSBkZXYtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvcjsKLQkJaW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gZGV2LT5wY2ktPnN1YnN5c3RlbV9kZXZpY2U7CisJCWlucF9kZXYtPmlkLnZlbmRvciAgPSBkZXYtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvcjsKKwkJaW5wX2Rldi0+aWQucHJvZHVjdCA9IGRldi0+cGNpLT5zdWJzeXN0ZW1fZGV2aWNlOwogCX0gZWxzZSB7Ci0JCWlucHV0X2Rldi0+aWQudmVuZG9yICA9IGRldi0+cGNpLT52ZW5kb3I7Ci0JCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IGRldi0+cGNpLT5kZXZpY2U7CisJCWlucF9kZXYtPmlkLnZlbmRvciAgPSBkZXYtPnBjaS0+dmVuZG9yOworCQlpbnBfZGV2LT5pZC5wcm9kdWN0ID0gZGV2LT5wY2ktPmRldmljZTsKIAl9Ci0JaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmRldi0+cGNpLT5kZXY7CisJaW5wX2Rldi0+ZGV2LnBhcmVudCA9ICZkZXYtPnBjaS0+ZGV2OwogCi0JZGV2LT5pcl9pbnB1dCA9IGlyOwotCWN4MjM4ODVfaW5wdXRfaXJfc3RhcnQoZGV2KTsKKwkvKiBrZXJuZWwgaXIgZGV2aWNlIHByb3BlcnRpZXMgKi8KKwlwcm9wcyA9ICZrZXJuZWxfaXItPnByb3BzOworCXByb3BzLT5kcml2ZXJfdHlwZSA9IGRyaXZlcl90eXBlOworCXByb3BzLT5hbGxvd2VkX3Byb3RvcyA9IGFsbG93ZWRfcHJvdG9zOworCXByb3BzLT5wcml2ID0ga2VybmVsX2lyOworCXByb3BzLT5vcGVuID0gY3gyMzg4NV9pbnB1dF9pcl9vcGVuOworCXByb3BzLT5jbG9zZSA9IGN4MjM4ODVfaW5wdXRfaXJfY2xvc2U7CiAKLQlyZXQgPSBpcl9pbnB1dF9yZWdpc3Rlcihpci0+ZGV2LCBpcl9jb2RlcywgTlVMTCwgTU9EVUxFX05BTUUpOworCS8qIEdvICovCisJZGV2LT5rZXJuZWxfaXIgPSBrZXJuZWxfaXI7CisJcmV0ID0gaXJfaW5wdXRfcmVnaXN0ZXIoaW5wX2RldiwgcmNfbWFwLCBwcm9wcywgTU9EVUxFX05BTUUpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX291dF9zdG9wOwogCkBAIC00MDgsOSArMzA0LDEyIEBACiAKIGVycl9vdXRfc3RvcDoKIAljeDIzODg1X2lucHV0X2lyX3N0b3AoZGV2KTsKLQlkZXYtPmlyX2lucHV0ID0gTlVMTDsKKwlkZXYtPmtlcm5lbF9pciA9IE5VTEw7CisJLyogVE9ETzogZG91YmxlIGNoZWNrIGNsZWFuLXVwIG9mIGtlcm5lbF9pci0+aW5wX2RldiAqLwogZXJyX291dF9mcmVlOgotCWtmcmVlKGlyKTsKKwlrZnJlZShrZXJuZWxfaXItPnBoeXMpOworCWtmcmVlKGtlcm5lbF9pci0+bmFtZSk7CisJa2ZyZWUoa2VybmVsX2lyKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC00MTksOSArMzE4LDExIEBACiAJLyogQWx3YXlzIHN0b3AgdGhlIElSIGhhcmR3YXJlIGZyb20gZ2VuZXJhdGluZyBpbnRlcnJ1cHRzICovCiAJY3gyMzg4NV9pbnB1dF9pcl9zdG9wKGRldik7CiAKLQlpZiAoZGV2LT5pcl9pbnB1dCA9PSBOVUxMKQorCWlmIChkZXYtPmtlcm5lbF9pciA9PSBOVUxMKQogCQlyZXR1cm47Ci0JaXJfaW5wdXRfdW5yZWdpc3RlcihkZXYtPmlyX2lucHV0LT5kZXYpOwotCWtmcmVlKGRldi0+aXJfaW5wdXQpOwotCWRldi0+aXJfaW5wdXQgPSBOVUxMOworCWlyX2lucHV0X3VucmVnaXN0ZXIoZGV2LT5rZXJuZWxfaXItPmlucF9kZXYpOworCWtmcmVlKGRldi0+a2VybmVsX2lyLT5waHlzKTsKKwlrZnJlZShkZXYtPmtlcm5lbF9pci0+bmFtZSk7CisJa2ZyZWUoZGV2LT5rZXJuZWxfaXIpOworCWRldi0+a2VybmVsX2lyID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWlyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pci5jCmluZGV4IDlhNjc3ZWIuLjZjZWFiZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWlyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaXIuYwpAQCAtNTMsNyArNTMsNyBAQAogCWlmIChldmVudHMgPT0gMCkKIAkJcmV0dXJuOwogCi0JaWYgKGRldi0+aXJfaW5wdXQpCisJaWYgKGRldi0+a2VybmVsX2lyKQogCQljeDIzODg1X2lucHV0X3J4X3dvcmtfaGFuZGxlcihkZXYsIGV2ZW50cyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCmluZGV4IDhkNmE1NWUuLmEzM2YyYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPG1lZGlhL3R2ZWVwcm9tLmg+CiAjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtZG1hLXNnLmg+CiAjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtZHZiLmg+CisjaW5jbHVkZSA8bWVkaWEvaXItY29yZS5oPgogCiAjaW5jbHVkZSAiYnRjeC1yaXNjLmgiCiAjaW5jbHVkZSAiY3gyMzg4NS1yZWcuaCIKQEAgLTMwNCw2ICszMDUsMTUgQEAKIAl2b2lkICAgICAgICAgICAgICAgICAgICAgICAqcG9ydF9wcml2OwogfTsKIAorc3RydWN0IGN4MjM4ODVfa2VybmVsX2lyIHsKKwlzdHJ1Y3QgY3gyMzg4NV9kZXYJKmN4OworCWNoYXIJCQkqbmFtZTsKKwljaGFyCQkJKnBoeXM7CisKKwlzdHJ1Y3QgaW5wdXRfZGV2CSppbnBfZGV2OworCXN0cnVjdCBpcl9kZXZfcHJvcHMJcHJvcHM7Cit9OworCiBzdHJ1Y3QgY3gyMzg4NV9kZXYgewogCWF0b21pY190ICAgICAgICAgICAgICAgICAgIHJlZmNvdW50OwogCXN0cnVjdCB2NGwyX2RldmljZSAJICAgdjRsMl9kZXY7CkBAIC0zNjMsNyArMzczLDcgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJICAgaXJfdHhfd29yazsKIAl1bnNpZ25lZCBsb25nCQkgICBpcl90eF9ub3RpZmljYXRpb25zOwogCi0Jc3RydWN0IGNhcmRfaXIJCSAgICppcl9pbnB1dDsKKwlzdHJ1Y3QgY3gyMzg4NV9rZXJuZWxfaXIgICAqa2VybmVsX2lyOwogCWF0b21pY190CQkgICBpcl9pbnB1dF9zdG9wcGluZzsKIAogCS8qIFY0bCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jCmluZGV4IDMzMDgyYzkuLjRmMzgzY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMKQEAgLTU0LDYgKzU0LDEyIEBACiAJRGF0YSB0eXBlIGRlY2xhcmF0aW9ucyAtIENhbiBiZSBtb2RlZCB0byBhIGhlYWRlciBmaWxlIGxhdGVyCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RydWN0IGN4ODhfYXVkaW9fYnVmZmVyIHsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICBicGw7CisJc3RydWN0IGJ0Y3hfcmlzY21lbSAgICAgICAgcmlzYzsKKwlzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICAgICBkbWE7Cit9OworCiBzdHJ1Y3QgY3g4OF9hdWRpb19kZXYgewogCXN0cnVjdCBjeDg4X2NvcmUgICAgICAgICAgICpjb3JlOwogCXN0cnVjdCBjeDg4X2RtYXF1ZXVlICAgICAgIHE7CkBAIC03NSw3ICs4MSw3IEBACiAKIAlzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICAgICAqZG1hX3Jpc2M7CiAKLQlzdHJ1Y3QgY3g4OF9idWZmZXIJICAgKmJ1ZjsKKwlzdHJ1Y3QgY3g4OF9hdWRpb19idWZmZXIgICAqYnVmOwogCiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICAgKnN1YnN0cmVhbTsKIH07CkBAIC0xMjMsNyArMTI5LDcgQEAKIAogc3RhdGljIGludCBfY3g4OF9zdGFydF9hdWRpb19kbWEoc25kX2N4ODhfY2FyZF90ICpjaGlwKQogewotCXN0cnVjdCBjeDg4X2J1ZmZlciAgICpidWYgPSBjaGlwLT5idWY7CisJc3RydWN0IGN4ODhfYXVkaW9fYnVmZmVyICpidWYgPSBjaGlwLT5idWY7CiAJc3RydWN0IGN4ODhfY29yZSAqY29yZT1jaGlwLT5jb3JlOwogCXN0cnVjdCBzcmFtX2NoYW5uZWwgKmF1ZGlvX2NoID0gJmN4ODhfc3JhbV9jaGFubmVsc1tTUkFNX0NIMjVdOwogCkBAIC0yODMsNyArMjg5LDcgQEAKIAlCVUdfT04oIWNoaXAtPmRtYV9zaXplKTsKIAogCWRwcmludGsoMiwiRnJlZWluZyBidWZmZXJcbiIpOwotCXZpZGVvYnVmX3NnX2RtYV91bm1hcCgmY2hpcC0+cGNpLT5kZXYsIGNoaXAtPmRtYV9yaXNjKTsKKwl2aWRlb2J1Zl9kbWFfdW5tYXAoJmNoaXAtPnBjaS0+ZGV2LCBjaGlwLT5kbWFfcmlzYyk7CiAJdmlkZW9idWZfZG1hX2ZyZWUoY2hpcC0+ZG1hX3Jpc2MpOwogCWJ0Y3hfcmlzY21lbV9mcmVlKGNoaXAtPnBjaSwmY2hpcC0+YnVmLT5yaXNjKTsKIAlrZnJlZShjaGlwLT5idWYpOwpAQCAtMzc2LDcgKzM4Miw3IEBACiAJc25kX2N4ODhfY2FyZF90ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwogCXN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYTsKIAotCXN0cnVjdCBjeDg4X2J1ZmZlciAqYnVmOworCXN0cnVjdCBjeDg4X2F1ZGlvX2J1ZmZlciAqYnVmOwogCWludCByZXQ7CiAKIAlpZiAoc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSkgewpAQCAtMzkxLDMwICszOTcsMjUgQEAKIAlCVUdfT04oIWNoaXAtPmRtYV9zaXplKTsKIAlCVUdfT04oY2hpcC0+bnVtX3BlcmlvZHMgJiAoY2hpcC0+bnVtX3BlcmlvZHMtMSkpOwogCi0JYnVmID0gdmlkZW9idWZfc2dfYWxsb2Moc2l6ZW9mKCpidWYpKTsKKwlidWYgPSBremFsbG9jKHNpemVvZigqYnVmKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKE5VTEwgPT0gYnVmKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWJ1Zi0+dmIubWVtb3J5ID0gVjRMMl9NRU1PUllfTU1BUDsKLQlidWYtPnZiLmZpZWxkICA9IFY0TDJfRklFTERfTk9ORTsKLQlidWYtPnZiLndpZHRoICA9IGNoaXAtPnBlcmlvZF9zaXplOwotCWJ1Zi0+YnBsICAgICAgID0gY2hpcC0+cGVyaW9kX3NpemU7Ci0JYnVmLT52Yi5oZWlnaHQgPSBjaGlwLT5udW1fcGVyaW9kczsKLQlidWYtPnZiLnNpemUgICA9IGNoaXAtPmRtYV9zaXplOworCWJ1Zi0+YnBsID0gY2hpcC0+cGVyaW9kX3NpemU7CiAKLQlkbWEgPSB2aWRlb2J1Zl90b19kbWEoJmJ1Zi0+dmIpOworCWRtYSA9ICZidWYtPmRtYTsKIAl2aWRlb2J1Zl9kbWFfaW5pdChkbWEpOwogCXJldCA9IHZpZGVvYnVmX2RtYV9pbml0X2tlcm5lbChkbWEsIFBDSV9ETUFfRlJPTURFVklDRSwKLQkJCShQQUdFX0FMSUdOKGJ1Zi0+dmIuc2l6ZSkgPj4gUEFHRV9TSElGVCkpOworCQkJKFBBR0VfQUxJR04oY2hpcC0+ZG1hX3NpemUpID4+IFBBR0VfU0hJRlQpKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJvcjsKIAotCXJldCA9IHZpZGVvYnVmX3NnX2RtYV9tYXAoJmNoaXAtPnBjaS0+ZGV2LCBkbWEpOworCXJldCA9IHZpZGVvYnVmX2RtYV9tYXAoJmNoaXAtPnBjaS0+ZGV2LCBkbWEpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycm9yOwogCiAJcmV0ID0gY3g4OF9yaXNjX2RhdGFidWZmZXIoY2hpcC0+cGNpLCAmYnVmLT5yaXNjLCBkbWEtPnNnbGlzdCwKLQkJCQkgICBidWYtPnZiLndpZHRoLCBidWYtPnZiLmhlaWdodCwgMSk7CisJCQkJICAgY2hpcC0+cGVyaW9kX3NpemUsIGNoaXAtPm51bV9wZXJpb2RzLCAxKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJvcjsKIApAQCAtNDIyLDEyICs0MjMsMTAgQEAKIAlidWYtPnJpc2Muam1wWzBdID0gY3B1X3RvX2xlMzIoUklTQ19KVU1QfFJJU0NfSVJRMXxSSVNDX0NOVF9JTkMpOwogCWJ1Zi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihidWYtPnJpc2MuZG1hKTsKIAotCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9QUkVQQVJFRDsKLQogCWNoaXAtPmJ1ZiA9IGJ1ZjsKIAljaGlwLT5kbWFfcmlzYyA9IGRtYTsKIAotCXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEgPSBjaGlwLT5kbWFfcmlzYy0+dm1hbGxvYzsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhID0gY2hpcC0+ZG1hX3Jpc2MtPnZhZGRyOwogCXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2J5dGVzID0gY2hpcC0+ZG1hX3NpemU7CiAJc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYWRkciA9IDA7CiAJcmV0dXJuIDA7CkBAIC03NDAsNyArNzM5LDcgQEAKIAogCXBjaV9zZXRfbWFzdGVyKHBjaSk7CiAKLQljaGlwID0gKHNuZF9jeDg4X2NhcmRfdCAqKSBjYXJkLT5wcml2YXRlX2RhdGE7CisJY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAogCWNvcmUgPSBjeDg4X2NvcmVfZ2V0KHBjaSk7CiAJaWYgKE5VTEwgPT0gY29yZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKaW5kZXggMjkxOGE2ZS4uZTg0MTZiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCkBAIC00NSw2ICs0NSwxMCBAQAogbW9kdWxlX3BhcmFtKGxhdGVuY3ksaW50LDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhsYXRlbmN5LCJwY2kgbGF0ZW5jeSB0aW1lciIpOwogCitzdGF0aWMgaW50IGRpc2FibGVfaXI7Cittb2R1bGVfcGFyYW0oZGlzYWJsZV9pciwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobGF0ZW5jeSwgIkRpc2FibGUgSVIgc3VwcG9ydCIpOworCiAjZGVmaW5lIGluZm9fcHJpbnRrKGNvcmUsIGZtdCwgYXJnLi4uKSBcCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIgZm10LCBjb3JlLT5uYW1lICwgIyMgYXJnKQogCkBAIC0zNDk4LDcgKzM1MDIsMTAgQEAKIAl9CiAKIAljeDg4X2NhcmRfc2V0dXAoY29yZSk7Ci0JY3g4OF9pcl9pbml0KGNvcmUsIHBjaSk7CisJaWYgKCFkaXNhYmxlX2lyKSB7CisJCWN4ODhfaTJjX2luaXRfaXIoY29yZSk7CisJCWN4ODhfaXJfaW5pdChjb3JlLCBwY2kpOworCX0KIAogCXJldHVybiBjb3JlOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCmluZGV4IDhiMjE0NTcuLjg1ZWIyNjZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCkBAIC0yMTgsNyArMjE4LDcgQEAKIAogCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7CiAJdmlkZW9idWZfd2FpdG9uKCZidWYtPnZiLDAsMCk7Ci0JdmlkZW9idWZfZG1hX3VubWFwKHEsIGRtYSk7CisJdmlkZW9idWZfZG1hX3VubWFwKHEtPmRldiwgZG1hKTsKIAl2aWRlb2J1Zl9kbWFfZnJlZShkbWEpOwogCWJ0Y3hfcmlzY21lbV9mcmVlKHRvX3BjaV9kZXYocS0+ZGV2KSwgJmJ1Zi0+cmlzYyk7CiAJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCmluZGV4IGZiMzlmMTEuLjM3NWFkNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCkBAIC0xODEsNiArMTgxLDExIEBACiAJfSBlbHNlCiAJCXByaW50aygiJXM6IGkyYyByZWdpc3RlciBGQUlMRURcbiIsIGNvcmUtPm5hbWUpOwogCisJcmV0dXJuIGNvcmUtPmkyY19yYzsKK30KKwordm9pZCBjeDg4X2kyY19pbml0X2lyKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUpCit7CiAJLyogSW5zdGFudGlhdGUgdGhlIElSIHJlY2VpdmVyIGRldmljZSwgaWYgcHJlc2VudCAqLwogCWlmICgwID09IGNvcmUtPmkyY19yYykgewogCQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKQEAgLTIwNyw3ICsyMTIsNiBAQAogCQkJfQogCQl9CiAJfQotCXJldHVybiBjb3JlLT5pMmNfcmM7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYwppbmRleCBlMTg1Mjg5Li5lY2NjNWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgImN4ODguaCIKKyNpbmNsdWRlIDxtZWRpYS9pci1jb3JlLmg+CiAjaW5jbHVkZSA8bWVkaWEvaXItY29tbW9uLmg+CiAKICNkZWZpbmUgTU9EVUxFX05BTUUgImN4ODh4eCIKQEAgLTM5LDggKzQwLDggQEAKIHN0cnVjdCBjeDg4X0lSIHsKIAlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OwotCXN0cnVjdCBpcl9pbnB1dF9zdGF0ZSBpcjsKIAlzdHJ1Y3QgaXJfZGV2X3Byb3BzIHByb3BzOworCXU2NCBpcl90eXBlOwogCiAJaW50IHVzZXJzOwogCkBAIC01MSw3ICs1Miw2IEBACiAJdTMyIHNhbXBsaW5nOwogCXUzMiBzYW1wbGVzWzE2XTsKIAlpbnQgc2NvdW50OwotCXVuc2lnbmVkIGxvbmcgcmVsZWFzZTsKIAogCS8qIHBvbGwgZXh0ZXJuYWwgZGVjb2RlciAqLwogCWludCBwb2xsaW5nOwpAQCAtMTI1LDI5ICsxMjUsMjEgQEAKIAogCQlkYXRhID0gKGRhdGEgPDwgNCkgfCAoKGdwaW9fa2V5ICYgMHhmMCkgPj4gNCk7CiAKLQkJaXJfaW5wdXRfa2V5ZG93bihpci0+aW5wdXQsICZpci0+aXIsIGRhdGEpOwotCQlpcl9pbnB1dF9ub2tleShpci0+aW5wdXQsICZpci0+aXIpOworCQlpcl9rZXlkb3duKGlyLT5pbnB1dCwgZGF0YSwgMCk7CiAKIAl9IGVsc2UgaWYgKGlyLT5tYXNrX2tleWRvd24pIHsKIAkJLyogYml0IHNldCBvbiBrZXlkb3duICovCi0JCWlmIChncGlvICYgaXItPm1hc2tfa2V5ZG93bikgewotCQkJaXJfaW5wdXRfa2V5ZG93bihpci0+aW5wdXQsICZpci0+aXIsIGRhdGEpOwotCQl9IGVsc2UgewotCQkJaXJfaW5wdXRfbm9rZXkoaXItPmlucHV0LCAmaXItPmlyKTsKLQkJfQorCQlpZiAoZ3BpbyAmIGlyLT5tYXNrX2tleWRvd24pCisJCQlpcl9rZXlkb3duKGlyLT5pbnB1dCwgZGF0YSwgMCk7CiAKIAl9IGVsc2UgaWYgKGlyLT5tYXNrX2tleXVwKSB7CiAJCS8qIGJpdCBjbGVhcmVkIG9uIGtleWRvd24gKi8KLQkJaWYgKDAgPT0gKGdwaW8gJiBpci0+bWFza19rZXl1cCkpIHsKLQkJCWlyX2lucHV0X2tleWRvd24oaXItPmlucHV0LCAmaXItPmlyLCBkYXRhKTsKLQkJfSBlbHNlIHsKLQkJCWlyX2lucHV0X25va2V5KGlyLT5pbnB1dCwgJmlyLT5pcik7Ci0JCX0KKwkJaWYgKDAgPT0gKGdwaW8gJiBpci0+bWFza19rZXl1cCkpCisJCQlpcl9rZXlkb3duKGlyLT5pbnB1dCwgZGF0YSwgMCk7CiAKIAl9IGVsc2UgewogCQkvKiBjYW4ndCBkaXN0aW5ndWlzaCBrZXlkb3duL3VwIDotLyAqLwotCQlpcl9pbnB1dF9rZXlkb3duKGlyLT5pbnB1dCwgJmlyLT5pciwgZGF0YSk7Ci0JCWlyX2lucHV0X25va2V5KGlyLT5pbnB1dCwgJmlyLT5pcik7CisJCWlyX2tleWRvd24oaXItPmlucHV0LCBkYXRhLCAwKTsKIAl9CiB9CiAKQEAgLTQzOSw5ICs0MzEsNyBAQAogCXNucHJpbnRmKGlyLT5uYW1lLCBzaXplb2YoaXItPm5hbWUpLCAiY3g4OCBJUiAoJXMpIiwgY29yZS0+Ym9hcmQubmFtZSk7CiAJc25wcmludGYoaXItPnBoeXMsIHNpemVvZihpci0+cGh5cyksICJwY2ktJXMvaXIwIiwgcGNpX25hbWUocGNpKSk7CiAKLQllcnIgPSBpcl9pbnB1dF9pbml0KGlucHV0X2RldiwgJmlyLT5pciwgaXJfdHlwZSk7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gZXJyX291dF9mcmVlOworCWlyLT5pcl90eXBlID0gaXJfdHlwZTsKIAogCWlucHV0X2Rldi0+bmFtZSA9IGlyLT5uYW1lOwogCWlucHV0X2Rldi0+cGh5cyA9IGlyLT5waHlzOwpAQCAtNTE2LDggKzUwNiw2IEBACiAJfQogCWlmICghaXItPnNjb3VudCkgewogCQkvKiBub3RoaW5nIHRvIHNhbXBsZSAqLwotCQlpZiAoaXItPmlyLmtleXByZXNzZWQgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBpci0+cmVsZWFzZSkpCi0JCQlpcl9pbnB1dF9ub2tleShpci0+aW5wdXQsICZpci0+aXIpOwogCQlyZXR1cm47CiAJfQogCkBAIC01NTMsNyArNTQxLDcgQEAKIAogCQlpZiAoaXJjb2RlID09IDApIHsgLyoga2V5IHN0aWxsIHByZXNzZWQgKi8KIAkJCWlyX2RwcmludGsoInB1bHNlIGRpc3RhbmNlIGRlY29kZWQgcmVwZWF0IGNvZGVcbiIpOwotCQkJaXItPnJlbGVhc2UgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMjApOworCQkJaXJfcmVwZWF0KGlyLT5pbnB1dCk7CiAJCQlicmVhazsKIAkJfQogCkBAIC01NjcsMTAgKzU1NSw4IEBACiAJCQlicmVhazsKIAkJfQogCi0JCWlyX2RwcmludGsoIktleSBDb2RlOiAleFxuIiwgKGlyY29kZSA+PiAxNikgJiAweDdmKTsKLQotCQlpcl9pbnB1dF9rZXlkb3duKGlyLT5pbnB1dCwgJmlyLT5pciwgKGlyY29kZSA+PiAxNikgJiAweDdmKTsKLQkJaXItPnJlbGVhc2UgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMjApOworCQlpcl9kcHJpbnRrKCJLZXkgQ29kZTogJXhcbiIsIChpcmNvZGUgPj4gMTYpICYgMHhmZik7CisJCWlyX2tleWRvd24oaXItPmlucHV0LCAoaXJjb2RlID4+IDE2KSAmIDB4ZmYsIDApOwogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFOgogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfRFZCX1QxOgpAQCAtNjA2LDE2ICs1OTIsMTYgQEAKIAkJaWYgKCBkZXYgIT0gMHgxZSAmJiBkZXYgIT0gMHgxZiApCiAJCQkvKiBub3QgYSBoYXVwcGF1Z2UgcmVtb3RlICovCiAJCQlicmVhazsKLQkJaXJfaW5wdXRfa2V5ZG93bihpci0+aW5wdXQsICZpci0+aXIsIGNvZGUpOwotCQlpci0+cmVsZWFzZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEyMCk7CisJCWlyX2tleWRvd24oaXItPmlucHV0LCBjb2RlLCB0b2dnbGUpOwogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfUElOTkFDTEVfUENUVl9IRF84MDBpOgogCQlpcmNvZGUgPSBpcl9kZWNvZGVfYmlwaGFzZShpci0+c2FtcGxlcywgaXItPnNjb3VudCwgNSwgNyk7CiAJCWlyX2RwcmludGsoImJpcGhhc2UgZGVjb2RlZDogJXhcbiIsIGlyY29kZSk7CiAJCWlmICgoaXJjb2RlICYgMHhmZmZmZjAwMCkgIT0gMHgzMDAwKQogCQkJYnJlYWs7Ci0JCWlyX2lucHV0X2tleWRvd24oaXItPmlucHV0LCAmaXItPmlyLCBpcmNvZGUgJiAweDNmKTsKLQkJaXItPnJlbGVhc2UgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMjApOworCQkvKiBOb3RlOiBiaXQgMHg4MDAgYmVpbmcgdGhlIHRvZ2dsZSBpcyBhc3N1bWVkLCBub3QgY2hlY2tlZAorCQkgICB3aXRoIHJlYWwgaGFyZHdhcmUgICovCisJCWlyX2tleWRvd24oaXItPmlucHV0LCBpcmNvZGUgJiAweDNmLCBpcmNvZGUgJiAweDA4MDAgPyAxIDogMCk7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKaW5kZXggYmRiMDNkMy4uMzNkMTYxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCkBAIC02MzYsNiArNjM2LDcgQEAKIC8qIGN4ODgtaTJjLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKIGV4dGVybiBpbnQgY3g4OF9pMmNfaW5pdChzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCBzdHJ1Y3QgcGNpX2RldiAqcGNpKTsKK2V4dGVybiB2b2lkIGN4ODhfaTJjX2luaXRfaXIoc3RydWN0IGN4ODhfY29yZSAqY29yZSk7CiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jCmluZGV4IDBmNTA1MDguLjViMTc2YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYwpAQCAtNzA2LDE2ICs3MDYsMTEgQEAKIAlzd2l0Y2ggKGNtZCkgewogCiAJY2FzZSBJT0NUTF9EQUJfQlVMSzoKLQkJcGJ1bGsgPSBrbWFsbG9jKHNpemVvZiAoYnVsa190cmFuc2Zlcl90KSwgR0ZQX0tFUk5FTCk7CisJCXBidWxrID0gbWVtZHVwX3VzZXIoKHZvaWQgX191c2VyICopYXJnLAorCQkJCSAgICBzaXplb2YoYnVsa190cmFuc2Zlcl90KSk7CiAKLQkJaWYgKCFwYnVsaykgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKGNvcHlfZnJvbV91c2VyIChwYnVsaywgKHZvaWQgX191c2VyICopIGFyZywgc2l6ZW9mIChidWxrX3RyYW5zZmVyX3QpKSkgewotCQkJcmV0ID0gLUVGQVVMVDsKLQkJCWtmcmVlIChwYnVsayk7CisJCWlmIChJU19FUlIocGJ1bGspKSB7CisJCQlyZXQgPSBQVFJfRVJSKHBidWxrKTsKIAkJCWJyZWFrOwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxOTU0MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9LY29uZmlnCkBAIC0wLDAgKzEsOTMgQEAKK2NvbmZpZyBESVNQTEFZX0RBVklOQ0lfRE02NDZYX0VWTQorCXRyaXN0YXRlICJETTY0NnggRVZNIFZpZGVvIERpc3BsYXkiCisJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgTUFDSF9EQVZJTkNJX0RNNjQ2N19FVk0KKwlzZWxlY3QgVklERU9CVUZfRE1BX0NPTlRJRworCXNlbGVjdCBWSURFT19EQVZJTkNJX1ZQSUYKKwlzZWxlY3QgVklERU9fQURWNzM0MworCXNlbGVjdCBWSURFT19USFM3MzAzCisJaGVscAorCSAgU3VwcG9ydCBmb3IgRE02NDY3IGJhc2VkIGRpc3BsYXkgZGV2aWNlLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2cGlmX2Rpc3BsYXkuCisKK2NvbmZpZyBDQVBUVVJFX0RBVklOQ0lfRE02NDZYX0VWTQorCXRyaXN0YXRlICJETTY0NnggRVZNIFZpZGVvIENhcHR1cmUiCisJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgTUFDSF9EQVZJTkNJX0RNNjQ2N19FVk0KKwlzZWxlY3QgVklERU9CVUZfRE1BX0NPTlRJRworCXNlbGVjdCBWSURFT19EQVZJTkNJX1ZQSUYKKwloZWxwCisJICBTdXBwb3J0IGZvciBETTY0NjcgYmFzZWQgY2FwdHVyZSBkZXZpY2UuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZwaWZfY2FwdHVyZS4KKworY29uZmlnIFZJREVPX0RBVklOQ0lfVlBJRgorCXRyaXN0YXRlICJEYVZpbmNpIFZQSUYgRHJpdmVyIgorCWRlcGVuZHMgb24gRElTUExBWV9EQVZJTkNJX0RNNjQ2WF9FVk0KKwloZWxwCisJICBTdXBwb3J0IGZvciBEYVZpbmNpIFZQSUYgRHJpdmVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2cGlmLgorCitjb25maWcgVklERU9fVlBTU19TWVNURU0KKwl0cmlzdGF0ZSAiVlBTUyBTeXN0ZW0gbW9kdWxlIGRyaXZlciIKKwlkZXBlbmRzIG9uIEFSQ0hfREFWSU5DSQorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHZwc3Mgc3lzdGVtIG1vZHVsZSBmb3IgdmlkZW8gZHJpdmVyCisKK2NvbmZpZyBWSURFT19WUEZFX0NBUFRVUkUKKwl0cmlzdGF0ZSAiVlBGRSBWaWRlbyBDYXB0dXJlIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgKEFSQ0hfREFWSU5DSSB8fCBBUkNIX09NQVAzKQorCXNlbGVjdCBWSURFT0JVRl9ETUFfQ09OVElHCisJaGVscAorCSAgU3VwcG9ydCBmb3IgRE14L0FNeCBWUEZFIGJhc2VkIGZyYW1lIGdyYWJiZXIuIFRoaXMgaXMgdGhlCisJICBjb21tb24gVjRMMiBtb2R1bGUgZm9yIGZvbGxvd2luZyBETXgvQU14IFNvQ3MgZnJvbSBUZXhhcworCSAgSW5zdHJ1bWVudHM6LSBETTY0NDYsIERNMzY1LCBETTM1NSAmIEFNMzUxNy8wNS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdnBmZS1jYXB0dXJlLgorCitjb25maWcgVklERU9fRE02NDQ2X0NDREMKKwl0cmlzdGF0ZSAiRE02NDQ2IENDREMgSFcgbW9kdWxlIgorCWRlcGVuZHMgb24gVklERU9fVlBGRV9DQVBUVVJFCisJc2VsZWN0IFZJREVPX1ZQU1NfU1lTVEVNCisJZGVmYXVsdCB5CisJaGVscAorCSAgIEVuYWJsZXMgRGFWaW5jaSBDQ0QgaHcgbW9kdWxlLiBEYVZpbmNpIENDREMgaHcgaW50ZXJmYWNlcworCSAgIHdpdGggZGVjb2RlciBtb2R1bGVzIHN1Y2ggYXMgVFZQNTE0NiBvdmVyIEJUNjU2IG9yCisJICAgc2Vuc29yIG1vZHVsZSBzdWNoIGFzIE1UOVQwMDEgb3ZlciBhIHJhdyBpbnRlcmZhY2UuIFRoaXMKKwkgICBtb2R1bGUgY29uZmlndXJlcyB0aGUgaW50ZXJmYWNlIGFuZCBDQ0RDL0lTSUYgdG8gZG8KKwkgICB2aWRlbyBmcmFtZSBjYXB0dXJlIGZyb20gc2xhdmUgZGVjb2RlcnMuCisKKwkgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdnBmZS4KKworY29uZmlnIFZJREVPX0RNMzU1X0NDREMKKwl0cmlzdGF0ZSAiRE0zNTUgQ0NEQyBIVyBtb2R1bGUiCisJZGVwZW5kcyBvbiBBUkNIX0RBVklOQ0lfRE0zNTUgJiYgVklERU9fVlBGRV9DQVBUVVJFCisJc2VsZWN0IFZJREVPX1ZQU1NfU1lTVEVNCisJZGVmYXVsdCB5CisJaGVscAorCSAgIEVuYWJsZXMgRE0zNTUgQ0NEIGh3IG1vZHVsZS4gRE0zNTUgQ0NEQyBodyBpbnRlcmZhY2VzCisJICAgd2l0aCBkZWNvZGVyIG1vZHVsZXMgc3VjaCBhcyBUVlA1MTQ2IG92ZXIgQlQ2NTYgb3IKKwkgICBzZW5zb3IgbW9kdWxlIHN1Y2ggYXMgTVQ5VDAwMSBvdmVyIGEgcmF3IGludGVyZmFjZS4gVGhpcworCSAgIG1vZHVsZSBjb25maWd1cmVzIHRoZSBpbnRlcmZhY2UgYW5kIENDREMvSVNJRiB0byBkbworCSAgIHZpZGVvIGZyYW1lIGNhcHR1cmUgZnJvbSBhIHNsYXZlIGRlY29kZXJzCisKKwkgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdnBmZS4KKworY29uZmlnIFZJREVPX0lTSUYKKwl0cmlzdGF0ZSAiSVNJRiBIVyBtb2R1bGUiCisJZGVwZW5kcyBvbiBBUkNIX0RBVklOQ0lfRE0zNjUgJiYgVklERU9fVlBGRV9DQVBUVVJFCisJc2VsZWN0IFZJREVPX1ZQU1NfU1lTVEVNCisJZGVmYXVsdCB5CisJaGVscAorCSAgIEVuYWJsZXMgSVNJRiBodyBtb2R1bGUuIFRoaXMgaXMgdGhlIGhhcmR3YXJlIG1vZHVsZSBmb3IKKwkgICBjb25maWd1cmluZyBJU0lGIGluIFZQRkUgdG8gY2FwdHVyZSBSYXcgQmF5ZXIgUkdCIGRhdGEgIGZyb20KKwkgICBhIGltYWdlIHNlbnNvciBvciBZVVYgZGF0YSBmcm9tIGEgWVVWIHNvdXJjZS4KKworCSAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2cGZlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYwppbmRleCAzYTRmZDg1Li5mZmJlNTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYwpAQCAtMTU4LDYgKzE1OCwyMiBAQAogCXsgLTEsCQkJLTEsCS0xLAkJLTF9LAogfTsKIAorLyoKKyAqIEtXb3JsZCBQbHVzVFYgMzQwVSBhbmQgVUI0MzUtUSAoQVRTQykgR1BJT3MgbWFwOgorICogRU1fR1BJT18wIC0gY3VycmVudGx5IHVua25vd24KKyAqIEVNX0dQSU9fMSAtIExFRCBkaXNhYmxlL2VuYWJsZSAoMSA9IG9mZiwgMCA9IG9uKQorICogRU1fR1BJT18yIC0gY3VycmVudGx5IHVua25vd24KKyAqIEVNX0dQSU9fMyAtIGN1cnJlbnRseSB1bmtub3duCisgKiBFTV9HUElPXzQgLSBUREExODI3MUhEL0MxIHR1bmVyICgxID0gYWN0aXZlLCAwID0gaW4gcmVzZXQpCisgKiBFTV9HUElPXzUgLSBMR0RUMzMwNCBBVFNDL1FBTSBkZW1vZCAoMSA9IGFjdGl2ZSwgMCA9IGluIHJlc2V0KQorICogRU1fR1BJT182IC0gY3VycmVudGx5IHVua25vd24KKyAqIEVNX0dQSU9fNyAtIGN1cnJlbnRseSB1bmtub3duCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZW0yOHh4X3JlZ19zZXEga3dvcmxkX2EzNDBfZGlnaXRhbFtdID0geworCXtFTTI4WFhfUjA4X0dQSU8sCTB4NmQsCQl+RU1fR1BJT180LAkxMH0sCisJeyAtMSwJCQktMSwJCS0xLAkJLTF9LAorfTsKKwogLyogUGlubmFjbGUgSHlicmlkIFBybyBlYjFhOjI4ODEgKi8KIHN0YXRpYyBzdHJ1Y3QgZW0yOHh4X3JlZ19zZXEgcGlubmFjbGVfaHlicmlkX3Byb19hbmFsb2dbXSA9IHsKIAl7RU0yOFhYX1IwOF9HUElPLAkweGZkLCAgIH5FTV9HUElPXzQsCTEwfSwKQEAgLTE2NjcsNiArMTY4MywxNiBAQAogCQkudHVuZXJfZ3BpbyAgICA9IHJlZGRvX2R2Yl9jX3VzYl9ib3gsCiAJCS5oYXNfZHZiICAgICAgID0gMSwKIAl9LAorCS8qIDFiODA6YTM0MCAtIEVtcGlhIEVNMjg3MCwgTlhQIFREQTE4MjcxSEQgYW5kIExHIERUMzMwNCwgc29sZAorCSAqIGluaXRpYWxseSBhcyB0aGUgS1dvcmxkIFBsdXNUViAzNDBVLCB0aGVuIGFzIHRoZSBVQjQzNS1RLgorCSAqIEVhcmx5IHZhcmlhbnRzIGhhdmUgYSBUREExODI3MUhEL0MxLCBsYXRlciBvbmVzIGEgVERBMTgyNzFIRC9DMiAqLworCVtFTTI4NzBfQk9BUkRfS1dPUkxEX0EzNDBdID0geworCQkubmFtZSAgICAgICA9ICJLV29ybGQgUGx1c1RWIDM0MFUgb3IgVUI0MzUtUSAoQVRTQykiLAorCQkudHVuZXJfdHlwZSA9IFRVTkVSX0FCU0VOVCwJLyogRGlnaXRhbC1vbmx5IFREQTE4MjcxSEQgKi8KKwkJLmhhc19kdmIgICAgPSAxLAorCQkuZHZiX2dwaW8gICA9IGt3b3JsZF9hMzQwX2RpZ2l0YWwsCisJCS50dW5lcl9ncGlvID0gZGVmYXVsdF90dW5lcl9ncGlvLAorCX0sCiB9OwogY29uc3QgdW5zaWduZWQgaW50IGVtMjh4eF9iY291bnQgPSBBUlJBWV9TSVpFKGVtMjh4eF9ib2FyZHMpOwogCkBAIC0xNzg4LDYgKzE4MTQsOCBAQAogCQkJLmRyaXZlcl9pbmZvID0gRU0yODIwX0JPQVJEX0lPREFUQV9HVk1WUF9TWiB9LAogCXsgVVNCX0RFVklDRSgweGViMWEsIDB4NTBhNiksCiAJCQkuZHJpdmVyX2luZm8gPSBFTTI4NjBfQk9BUkRfR0FETUVJX1VUVjMzMCB9LAorCXsgVVNCX0RFVklDRSgweDFiODAsIDB4YTM0MCksCisJCQkuZHJpdmVyX2luZm8gPSBFTTI4NzBfQk9BUkRfS1dPUkxEX0EzNDAgfSwKIAl7IH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGVtMjh4eF9pZF90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtZHZiLmMKaW5kZXggY2YxZDhjMy4uM2FjOGQzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1kdmIuYwpAQCAtMzAsMTEgKzMwLDEzIEBACiAjaW5jbHVkZSAidHVuZXItc2ltcGxlLmgiCiAKICNpbmNsdWRlICJsZ2R0MzMweC5oIgorI2luY2x1ZGUgImxnZHQzMzA1LmgiCiAjaW5jbHVkZSAiemwxMDM1My5oIgogI2luY2x1ZGUgInM1aDE0MDkuaCIKICNpbmNsdWRlICJtdDM1Mi5oIgogI2luY2x1ZGUgIm10MzUyX3ByaXYuaCIgLyogRklYTUUgKi8KICNpbmNsdWRlICJ0ZGExMDAyeC5oIgorI2luY2x1ZGUgInRkYTE4MjcxLmgiCiAKIE1PRFVMRV9ERVNDUklQVElPTigiZHJpdmVyIGZvciBlbTI4eHggYmFzZWQgRFZCIGNhcmRzIik7CiBNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4iKTsKQEAgLTIzMSw2ICsyMzMsMTggQEAKIAkuZGVtb2RfY2hpcCA9IExHRFQzMzAzLAogfTsKIAorc3RhdGljIHN0cnVjdCBsZ2R0MzMwNV9jb25maWcgZW0yODcwX2xnZHQzMzA0X2RldiA9IHsKKwkuaTJjX2FkZHIgICAgICAgICAgID0gMHgwZSwKKwkuZGVtb2RfY2hpcCAgICAgICAgID0gTEdEVDMzMDQsCisJLnNwZWN0cmFsX2ludmVyc2lvbiA9IDEsCisJLmRlbnlfaTJjX3JwdHIgICAgICA9IDEsCisJLm1wZWdfbW9kZSAgICAgICAgICA9IExHRFQzMzA1X01QRUdfUEFSQUxMRUwsCisJLnRwY2xrX2VkZ2UgICAgICAgICA9IExHRFQzMzA1X1RQQ0xLX0ZBTExJTkdfRURHRSwKKwkudHB2YWxpZF9wb2xhcml0eSAgID0gTEdEVDMzMDVfVFBfVkFMSURfSElHSCwKKwkudnNiX2lmX2toeiAgICAgICAgID0gMzI1MCwKKwkucWFtX2lmX2toeiAgICAgICAgID0gNDAwMCwKK307CisKIHN0YXRpYyBzdHJ1Y3QgemwxMDM1M19jb25maWcgZW0yOHh4X3psMTAzNTNfd2l0aF94YzMwMjggPSB7CiAJLmRlbW9kX2FkZHJlc3MgPSAoMHgxZSA+PiAxKSwKIAkubm9fdHVuZXIgPSAxLApAQCAtMjQ3LDYgKzI2MSwxNyBAQAogCS5tcGVnX3RpbWluZyAgID0gUzVIMTQwOV9NUEVHVElNSU5HX0NPTlRJTk9VU19OT05JTlZFUlRJTkdfQ0xPQ0sKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdGRhMTgyNzFfc3RkX21hcCBrd29ybGRfYTM0MF9zdGRfbWFwID0geworCS5hdHNjXzYgICA9IHsgLmlmX2ZyZXEgPSAzMjUwLCAuYWdjX21vZGUgPSAzLCAuc3RkID0gMCwKKwkJICAgICAgLmlmX2x2bCA9IDEsIC5yZmFnY190b3AgPSAweDM3LCB9LAorCS5xYW1fNiAgICA9IHsgLmlmX2ZyZXEgPSA0MDAwLCAuYWdjX21vZGUgPSAzLCAuc3RkID0gMSwKKwkJICAgICAgLmlmX2x2bCA9IDEsIC5yZmFnY190b3AgPSAweDM3LCB9LAorfTsKKworc3RhdGljIHN0cnVjdCB0ZGExODI3MV9jb25maWcga3dvcmxkX2EzNDBfY29uZmlnID0geworCS5zdGRfbWFwICAgICAgICAgICA9ICZrd29ybGRfYTM0MF9zdGRfbWFwLAorfTsKKwogc3RhdGljIHN0cnVjdCB6bDEwMzUzX2NvbmZpZyBlbTI4eHhfemwxMDM1M194YzMwMjhfbm9faTJjX2dhdGUgPSB7CiAJLmRlbW9kX2FkZHJlc3MgPSAoMHgxZSA+PiAxKSwKIAkubm9fdHVuZXIgPSAxLApAQCAtNTcyLDYgKzU5NywxNCBAQAogCQkJfQogCQl9CiAJCWJyZWFrOworCWNhc2UgRU0yODcwX0JPQVJEX0tXT1JMRF9BMzQwOgorCQlkdmItPmZyb250ZW5kID0gZHZiX2F0dGFjaChsZ2R0MzMwNV9hdHRhY2gsCisJCQkJCSAgICZlbTI4NzBfbGdkdDMzMDRfZGV2LAorCQkJCQkgICAmZGV2LT5pMmNfYWRhcCk7CisJCWlmIChkdmItPmZyb250ZW5kICE9IE5VTEwpCisJCQlkdmJfYXR0YWNoKHRkYTE4MjcxX2F0dGFjaCwgZHZiLT5mcm9udGVuZCwgMHg2MCwKKwkJCQkgICAmZGV2LT5pMmNfYWRhcCwgJmt3b3JsZF9hMzQwX2NvbmZpZyk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWVtMjh4eF9lcnJkZXYoIi8yOiBUaGUgZnJvbnRlbmQgb2YgeW91ciBEVkIvQVRTQyBjYXJkIgogCQkJCSIgaXNuJ3Qgc3VwcG9ydGVkIHlldFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jCmluZGV4IDVjM2ZkOTQuLjY3NTljZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jCkBAIC02NSwxNyArNjUsMTQgQEAKIHN0cnVjdCBlbTI4eHhfSVIgewogCXN0cnVjdCBlbTI4eHggKmRldjsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKLQlzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgaXI7CiAJY2hhciBuYW1lWzMyXTsKIAljaGFyIHBoeXNbMzJdOwogCiAJLyogcG9sbCBleHRlcm5hbCBkZWNvZGVyICovCiAJaW50IHBvbGxpbmc7CiAJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwotCXVuc2lnbmVkIGludCBsYXN0X3RvZ2dsZToxOwogCXVuc2lnbmVkIGludCBmdWxsX2NvZGU6MTsKIAl1bnNpZ25lZCBpbnQgbGFzdF9yZWFkY291bnQ7Ci0JdW5zaWduZWQgaW50IHJlcGVhdF9pbnRlcnZhbDsKIAogCWludCAgKCpnZXRfa2V5KShzdHJ1Y3QgZW0yOHh4X0lSICosIHN0cnVjdCBlbTI4eHhfaXJfcG9sbF9yZXN1bHQgKik7CiAKQEAgLTI5MSw2NyArMjg4LDM5IEBACiBzdGF0aWMgdm9pZCBlbTI4eHhfaXJfaGFuZGxlX2tleShzdHJ1Y3QgZW0yOHh4X0lSICppcikKIHsKIAlpbnQgcmVzdWx0OwotCWludCBkb19zZW5ka2V5ID0gMDsKIAlzdHJ1Y3QgZW0yOHh4X2lyX3BvbGxfcmVzdWx0IHBvbGxfcmVzdWx0OwogCiAJLyogcmVhZCB0aGUgcmVnaXN0ZXJzIGNvbnRhaW5pbmcgdGhlIElSIHN0YXR1cyAqLwogCXJlc3VsdCA9IGlyLT5nZXRfa2V5KGlyLCAmcG9sbF9yZXN1bHQpOwotCWlmIChyZXN1bHQgPCAwKSB7CisJaWYgKHVubGlrZWx5KHJlc3VsdCA8IDApKSB7CiAJCWRwcmludGsoImlyLT5nZXRfa2V5KCkgZmFpbGVkICVkXG4iLCByZXN1bHQpOwogCQlyZXR1cm47CiAJfQogCi0JZHByaW50aygiaXItPmdldF9rZXkgcmVzdWx0IHRiPSUwMnggcmM9JTAyeCBscj0lMDJ4IGRhdGE9JTAyeCUwMnhcbiIsCi0JCXBvbGxfcmVzdWx0LnRvZ2dsZV9iaXQsIHBvbGxfcmVzdWx0LnJlYWRfY291bnQsCi0JCWlyLT5sYXN0X3JlYWRjb3VudCwgcG9sbF9yZXN1bHQucmNfYWRkcmVzcywKLQkJcG9sbF9yZXN1bHQucmNfZGF0YVswXSk7Ci0KLQlpZiAoaXItPmRldi0+Y2hpcF9pZCA9PSBDSElQX0lEX0VNMjg3NCkgewotCQkvKiBUaGUgZW0yODc0IGNsZWFycyB0aGUgcmVhZGNvdW50IGZpZWxkIGV2ZXJ5IHRpbWUgdGhlCi0JCSAgIHJlZ2lzdGVyIGlzIHJlYWQuICBUaGUgZW0yODYwLzI4ODAgZGF0YXNoZWV0IHNheXMgdGhhdCBpdAotCQkgICBpcyBzdXBwb3NlZCB0byBjbGVhciB0aGUgcmVhZGNvdW50LCBidXQgaXQgZG9lc24ndC4gIFNvIHdpdGgKLQkJICAgdGhlIGVtMjg3NCwgd2UgYXJlIGxvb2tpbmcgZm9yIGEgbm9uLXplcm8gcmVhZCBjb3VudCBhcwotCQkgICBvcHBvc2VkIHRvIGEgcmVhZGNvdW50IHRoYXQgaXMgaW5jcmVtZW50aW5nICovCi0JCWlyLT5sYXN0X3JlYWRjb3VudCA9IDA7Ci0JfQotCi0JaWYgKHBvbGxfcmVzdWx0LnJlYWRfY291bnQgPT0gMCkgewotCQkvKiBUaGUgYnV0dG9uIGhhcyBub3QgYmVlbiBwcmVzc2VkIHNpbmNlIHRoZSBsYXN0IHJlYWQgKi8KLQl9IGVsc2UgaWYgKGlyLT5sYXN0X3RvZ2dsZSAhPSBwb2xsX3Jlc3VsdC50b2dnbGVfYml0KSB7Ci0JCS8qIEEgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQgKi8KLQkJZHByaW50aygiYnV0dG9uIGhhcyBiZWVuIHByZXNzZWRcbiIpOwotCQlpci0+bGFzdF90b2dnbGUgPSBwb2xsX3Jlc3VsdC50b2dnbGVfYml0OwotCQlpci0+cmVwZWF0X2ludGVydmFsID0gMDsKLQkJZG9fc2VuZGtleSA9IDE7Ci0JfSBlbHNlIGlmIChwb2xsX3Jlc3VsdC50b2dnbGVfYml0ID09IGlyLT5sYXN0X3RvZ2dsZSAmJgotCQkgICBwb2xsX3Jlc3VsdC5yZWFkX2NvdW50ID4gMCAmJgotCQkgICBwb2xsX3Jlc3VsdC5yZWFkX2NvdW50ICE9IGlyLT5sYXN0X3JlYWRjb3VudCkgewotCQkvKiBUaGUgYnV0dG9uIGlzIHN0aWxsIGJlaW5nIGhlbGQgZG93biAqLwotCQlkcHJpbnRrKCJidXR0b24gYmVpbmcgaGVsZCBkb3duXG4iKTsKLQotCQkvKiBEZWJvdW5jZXIgZm9yIGZpcnN0IGtleXByZXNzICovCi0JCWlmIChpci0+cmVwZWF0X2ludGVydmFsKysgPiA5KSB7Ci0JCQkvKiBTdGFydCByZXBlYXRpbmcgYWZ0ZXIgMSBzZWNvbmQgKi8KLQkJCWRvX3NlbmRrZXkgPSAxOwotCQl9Ci0JfQotCi0JaWYgKGRvX3NlbmRrZXkpIHsKLQkJZHByaW50aygic2VuZGluZyBrZXlwcmVzc1xuIik7Ci0KKwlpZiAodW5saWtlbHkocG9sbF9yZXN1bHQucmVhZF9jb3VudCAhPSBpci0+bGFzdF9yZWFkY291bnQpKSB7CisJCWRwcmludGsoIiVzOiB0b2dnbGU6ICVkLCBjb3VudDogJWQsIGtleSAweCUwMnglMDJ4XG4iLCBfX2Z1bmNfXywKKwkJCXBvbGxfcmVzdWx0LnRvZ2dsZV9iaXQsIHBvbGxfcmVzdWx0LnJlYWRfY291bnQsCisJCQlwb2xsX3Jlc3VsdC5yY19hZGRyZXNzLCBwb2xsX3Jlc3VsdC5yY19kYXRhWzBdKTsKIAkJaWYgKGlyLT5mdWxsX2NvZGUpCi0JCQlpcl9pbnB1dF9rZXlkb3duKGlyLT5pbnB1dCwgJmlyLT5pciwKLQkJCQkJIHBvbGxfcmVzdWx0LnJjX2FkZHJlc3MgPDwgOCB8Ci0JCQkJCSBwb2xsX3Jlc3VsdC5yY19kYXRhWzBdKTsKKwkJCWlyX2tleWRvd24oaXItPmlucHV0LAorCQkJCSAgIHBvbGxfcmVzdWx0LnJjX2FkZHJlc3MgPDwgOCB8CisJCQkJICAgcG9sbF9yZXN1bHQucmNfZGF0YVswXSwKKwkJCQkgICBwb2xsX3Jlc3VsdC50b2dnbGVfYml0KTsKIAkJZWxzZQotCQkJaXJfaW5wdXRfa2V5ZG93bihpci0+aW5wdXQsICZpci0+aXIsCi0JCQkJCSBwb2xsX3Jlc3VsdC5yY19kYXRhWzBdKTsKKwkJCWlyX2tleWRvd24oaXItPmlucHV0LAorCQkJCSAgIHBvbGxfcmVzdWx0LnJjX2RhdGFbMF0sCisJCQkJICAgcG9sbF9yZXN1bHQudG9nZ2xlX2JpdCk7CiAKLQkJaXJfaW5wdXRfbm9rZXkoaXItPmlucHV0LCAmaXItPmlyKTsKKwkJaWYgKGlyLT5kZXYtPmNoaXBfaWQgPT0gQ0hJUF9JRF9FTTI4NzQpCisJCQkvKiBUaGUgZW0yODc0IGNsZWFycyB0aGUgcmVhZGNvdW50IGZpZWxkIGV2ZXJ5IHRpbWUgdGhlCisJCQkgICByZWdpc3RlciBpcyByZWFkLiAgVGhlIGVtMjg2MC8yODgwIGRhdGFzaGVldCBzYXlzIHRoYXQgaXQKKwkJCSAgIGlzIHN1cHBvc2VkIHRvIGNsZWFyIHRoZSByZWFkY291bnQsIGJ1dCBpdCBkb2Vzbid0LiAgU28gd2l0aAorCQkJICAgdGhlIGVtMjg3NCwgd2UgYXJlIGxvb2tpbmcgZm9yIGEgbm9uLXplcm8gcmVhZCBjb3VudCBhcworCQkJICAgb3Bwb3NlZCB0byBhIHJlYWRjb3VudCB0aGF0IGlzIGluY3JlbWVudGluZyAqLworCQkJaXItPmxhc3RfcmVhZGNvdW50ID0gMDsKKwkJZWxzZQorCQkJaXItPmxhc3RfcmVhZGNvdW50ID0gcG9sbF9yZXN1bHQucmVhZF9jb3VudDsKIAl9Ci0KLQlpci0+bGFzdF9yZWFkY291bnQgPSBwb2xsX3Jlc3VsdC5yZWFkX2NvdW50OwotCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgZW0yOHh4X2lyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtNDY2LDExICs0MzUsNiBAQAogCXVzYl9tYWtlX3BhdGgoZGV2LT51ZGV2LCBpci0+cGh5cywgc2l6ZW9mKGlyLT5waHlzKSk7CiAJc3RybGNhdChpci0+cGh5cywgIi9pbnB1dDAiLCBzaXplb2YoaXItPnBoeXMpKTsKIAotCS8qIFNldCBJUiBwcm90b2NvbCAqLwotCWVyciA9IGlyX2lucHV0X2luaXQoaW5wdXRfZGV2LCAmaXItPmlyLCBJUl9UWVBFX09USEVSKTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0KIAlpbnB1dF9kZXYtPm5hbWUgPSBpci0+bmFtZTsKIAlpbnB1dF9kZXYtPnBoeXMgPSBpci0+cGh5czsKIAlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfVVNCOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwppbmRleCAyMDA5MGUzLi43YjllYzZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwpAQCAtNjU0LDEyICs2NTQsMTIgQEAKIAkJfQogCiAJCWlmIChidWYgIT0gTlVMTCAmJiBkZXYtPmNhcHR1cmVfdHlwZSA9PSAyKSB7Ci0JCQlpZiAobGVuID4gNCAmJiBwWzBdID09IDB4ODggJiYgcFsxXSA9PSAweDg4ICYmCisJCQlpZiAobGVuID49IDQgJiYgcFswXSA9PSAweDg4ICYmIHBbMV0gPT0gMHg4OCAmJgogCQkJICAgIHBbMl0gPT0gMHg4OCAmJiBwWzNdID09IDB4ODgpIHsKIAkJCQlwICs9IDQ7CiAJCQkJbGVuIC09IDQ7CiAJCQl9Ci0JCQlpZiAobGVuID4gNCAmJiBwWzBdID09IDB4MjIgJiYgcFsxXSA9PSAweDVhKSB7CisJCQlpZiAobGVuID49IDQgJiYgcFswXSA9PSAweDIyICYmIHBbMV0gPT0gMHg1YSkgewogCQkJCWVtMjh4eF9pc29jZGJnKCJWaWRlbyBmcmFtZSAlZCwgbGVuPSVpLCAlc1xuIiwKIAkJCQkJICAgICAgIHBbMl0sIGxlbiwgKHBbMl0gJiAxKSA/CiAJCQkJCSAgICAgICAib2RkIiA6ICJldmVuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oCmluZGV4IGIyNTJkMWIuLjFjNjFhNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxtZWRpYS9pci1rYmQtaTJjLmg+CisjaW5jbHVkZSA8bWVkaWEvaXItY29yZS5oPgogI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX0VNMjhYWF9EVkIpIHx8IGRlZmluZWQoQ09ORklHX1ZJREVPX0VNMjhYWF9EVkJfTU9EVUxFKQogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWR2Yi5oPgogI2VuZGlmCkBAIC0xMTMsNiArMTE0LDcgQEAKICNkZWZpbmUgRU0yODcwX0JPQVJEX1JFRERPX0RWQl9DX1VTQl9CT1ggICAgICAgICAgNzMKICNkZWZpbmUgRU0yODAwX0JPQVJEX1ZDMjExQQkJCSAgNzQKICNkZWZpbmUgRU0yODgyX0JPQVJEX0RJS09NX0RLMzAwCQkgIDc1CisjZGVmaW5lIEVNMjg3MF9CT0FSRF9LV09STERfQTM0MAkJICA3NgogCiAvKiBMaW1pdHMgbWluaW11bSBhbmQgZGVmYXVsdCBudW1iZXIgb2YgYnVmZmVycyAqLwogI2RlZmluZSBFTTI4WFhfTUlOX0JVRiA0CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2ZzbC12aXUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZnNsLXZpdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMWM5NGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2ZzbC12aXUuYwpAQCAtMCwwICsxLDE2MzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogIEZyZWVzY2FsZSBWSVUgdmlkZW8gZHJpdmVyCisgKgorICogIEF1dGhvcnM6IEhvbmdqdW4gQ2hlbiA8aG9uZy1qdW4uY2hlbkBmcmVlc2NhbGUuY29tPgorICoJICAgICBQb3J0aW5nIHRvIDIuNi4zNSBieSBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLAorICoJICAgICBBbmF0b2xpaiBHdXN0c2NoaW4gPGFndXN0QGRlbnguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtZG1hLWNvbnRpZy5oPgorCisjZGVmaW5lIERSVl9OQU1FCQkiZnNsX3ZpdSIKKyNkZWZpbmUgVklVX01BSk9SX1ZFUlNJT04JMAorI2RlZmluZSBWSVVfTUlOT1JfVkVSU0lPTgk1CisjZGVmaW5lIFZJVV9SRUxFQVNFCQkwCisjZGVmaW5lIFZJVV9WRVJTSU9OCQlLRVJORUxfVkVSU0lPTihWSVVfTUFKT1JfVkVSU0lPTiwgXAorCQkJCQkgICAgICAgVklVX01JTk9SX1ZFUlNJT04sIFwKKwkJCQkJICAgICAgIFZJVV9SRUxFQVNFKQorCisjZGVmaW5lIEJVRkZFUl9USU1FT1VUCQltc2Vjc190b19qaWZmaWVzKDUwMCkgIC8qIDAuNSBzZWNvbmRzICovCisKKyNkZWZpbmUJVklVX1ZJRF9NRU1fTElNSVQJNAkvKiBWaWRlbyBtZW1vcnkgbGltaXQsIGluIE1iICovCisKKy8qIEkyQyBhZGRyZXNzIG9mIHZpZGVvIGRlY29kZXIgY2hpcCBpcyAweDRBICovCisjZGVmaW5lIFZJVV9WSURFT19ERUNPREVSX0FERFIJMHgyNQorCisvKiBzdXBwb3J0ZWQgY29udHJvbHMgKi8KK3N0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgdml1X3FjdHJsW10gPSB7CisJeworCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgICAgICAgPSAiQnJpZ2h0bmVzcyIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSAyNTUsCisJCS5zdGVwICAgICAgICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxMjcsCisJCS5mbGFncyAgICAgICAgID0gMCwKKwl9LCB7CisJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQ09OVFJBU1QsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgICAgICAgPSAiQ29udHJhc3QiLAorCQkubWluaW11bSAgICAgICA9IDAsCisJCS5tYXhpbXVtICAgICAgID0gMjU1LAorCQkuc3RlcCAgICAgICAgICA9IDB4MSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAweDEwLAorCQkuZmxhZ3MgICAgICAgICA9IDAsCisJfSwgeworCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX1NBVFVSQVRJT04sCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgICAgICAgPSAiU2F0dXJhdGlvbiIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSAyNTUsCisJCS5zdGVwICAgICAgICAgID0gMHgxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDEyNywKKwkJLmZsYWdzICAgICAgICAgPSAwLAorCX0sIHsKKwkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9IVUUsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgICAgICAgPSAiSHVlIiwKKwkJLm1pbmltdW0gICAgICAgPSAtMTI4LAorCQkubWF4aW11bSAgICAgICA9IDEyNywKKwkJLnN0ZXAgICAgICAgICAgPSAweDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwkJLmZsYWdzICAgICAgICAgPSAwLAorCX0KK307CisKK3N0YXRpYyBpbnQgcWN0bF9yZWdzW0FSUkFZX1NJWkUodml1X3FjdHJsKV07CisKK3N0YXRpYyBpbnQgaW5mb19sZXZlbDsKKworI2RlZmluZSBkcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLikJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmIChsZXZlbCA8PSBpbmZvX2xldmVsKQkJCQlcCisJCQlwcmludGsoS0VSTl9ERUJVRyAidml1OiAiIGZtdCAsICMjIGFyZyk7CVwKKwl9IHdoaWxlICgwKQorCisvKgorICogQmFzaWMgc3RydWN0dXJlcworICovCitzdHJ1Y3Qgdml1X2ZtdCB7CisJY2hhciAgbmFtZVszMl07CisJdTMyICAgZm91cmNjOwkJLyogdjRsMiBmb3JtYXQgaWQgKi8KKwl1MzIgICBwaXhlbGZvcm1hdDsKKwlpbnQgICBkZXB0aDsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgdml1X2ZtdCBmb3JtYXRzW10gPSB7CisJeworCQkubmFtZQkJPSAiUkdCLTE2ICg1L0ItNi9HLTUvUikiLAorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9SR0I1NjUsCisJCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9SR0I1NjUsCisJCS5kZXB0aAkJPSAxNiwKKwl9LCB7CisJCS5uYW1lCQk9ICJSR0ItMzIgKEEtUi1HLUIpIiwKKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfUkdCMzIsCisJCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9SR0IzMiwKKwkJLmRlcHRoCQk9IDMyLAorCX0KK307CisKK3N0cnVjdCB2aXVfZGV2Oworc3RydWN0IHZpdV9idWY7CisKKy8qIGJ1ZmZlciBmb3Igb25lIHZpZGVvIGZyYW1lICovCitzdHJ1Y3Qgdml1X2J1ZiB7CisJLyogY29tbW9uIHY0bCBidWZmZXIgc3R1ZmYgLS0gbXVzdCBiZSBmaXJzdCAqLworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgdmI7CisJc3RydWN0IHZpdV9mbXQgKmZtdDsKK307CisKK3N0cnVjdCB2aXVfZG1hcXVldWUgeworCXN0cnVjdCB2aXVfZGV2CQkqZGV2OworCXN0cnVjdCBsaXN0X2hlYWQJYWN0aXZlOworCXN0cnVjdCBsaXN0X2hlYWQJcXVldWVkOworCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVvdXQ7Cit9OworCitzdHJ1Y3Qgdml1X3N0YXR1cyB7CisJdTMyIGZpZWxkX2lycTsKKwl1MzIgdnN5bmNfaXJxOworCXUzMiBoc3luY19pcnE7CisJdTMyIHZzdGFydF9pcnE7CisJdTMyIGRtYV9lbmRfaXJxOworCXUzMiBlcnJvcl9pcnE7Cit9OworCitzdHJ1Y3Qgdml1X3JlZyB7CisJdTMyIHN0YXR1c19jZmc7CisJdTMyIGx1bWluYW5jZTsKKwl1MzIgY2hyb21hX3I7CisJdTMyIGNocm9tYV9nOworCXUzMiBjaHJvbWFfYjsKKwl1MzIgZmllbGRfYmFzZV9hZGRyOworCXUzMiBkbWFfaW5jOworCXUzMiBwaWN0dXJlX2NvdW50OworCXUzMiByZXFfYWxhcm07CisJdTMyIGFscGhhOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCB2aXVfZGV2IHsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UJdjRsMl9kZXY7CisJc3RydWN0IG11dGV4CQlsb2NrOworCXNwaW5sb2NrX3QJCXNsb2NrOworCWludAkJCXVzZXJzOworCisJc3RydWN0IGRldmljZQkJKmRldjsKKwkvKiB2YXJpb3VzIGRldmljZSBpbmZvICovCisJc3RydWN0IHZpZGVvX2RldmljZQkqdmRldjsKKwlzdHJ1Y3Qgdml1X2RtYXF1ZXVlCXZpZHE7CisJZW51bSB2NGwyX2ZpZWxkCQljYXBmaWVsZDsKKwlpbnQJCQlmaWVsZDsKKwlpbnQJCQlmaXJzdDsKKwlpbnQJCQlkbWFfZG9uZTsKKworCS8qIEhhcmR3YXJlIHJlZ2lzdGVyIGFyZWEgKi8KKwlzdHJ1Y3Qgdml1X3JlZwkJKnZyOworCisJLyogSW50ZXJydXB0IHZlY3RvciAqLworCWludAkJCWlycTsKKwlzdHJ1Y3Qgdml1X3N0YXR1cwlpcnFzOworCisJLyogdmlkZW8gb3ZlcmxheSAqLworCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyCW92YnVmOworCXN0cnVjdCB2aXVfZm10CQkqb3ZmbXQ7CisJdW5zaWduZWQgaW50CQlvdmVuYWJsZTsKKwllbnVtIHY0bDJfZmllbGQJCW92ZmllbGQ7CisKKwkvKiBjcm9wICovCisJc3RydWN0IHY0bDJfcmVjdAljcm9wX2N1cnJlbnQ7CisKKwkvKiBjbG9jayBwb2ludGVyICovCisJc3RydWN0IGNsawkJKmNsazsKKworCS8qIGRlY29kZXIgKi8KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYJKmRlY29kZXI7Cit9OworCitzdHJ1Y3Qgdml1X2ZoIHsKKwlzdHJ1Y3Qgdml1X2RldgkJKmRldjsKKworCS8qIHZpZGVvIGNhcHR1cmUgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUJdmJfdmlkcTsKKwlzcGlubG9ja190CQl2YnFfbG9jazsgLyogc3BpbmxvY2sgZm9yIHRoZSB2aWRlb2J1ZiBxdWV1ZSAqLworCisJLyogdmlkZW8gb3ZlcmxheSAqLworCXN0cnVjdCB2NGwyX3dpbmRvdwl3aW47CisJc3RydWN0IHY0bDJfY2xpcAljbGlwc1sxXTsKKworCS8qIHZpZGVvIGNhcHR1cmUgKi8KKwlzdHJ1Y3Qgdml1X2ZtdAkJKmZtdDsKKwlpbnQJCQl3aWR0aCwgaGVpZ2h0LCBzaXplaW1hZ2U7CisJZW51bSB2NGwyX2J1Zl90eXBlCXR5cGU7Cit9OworCitzdGF0aWMgc3RydWN0IHZpdV9yZWcgcmVnX3ZhbDsKKworLyoKKyAqIE1hY3JvIGRlZmluaXRpb25zIG9mIFZJVSByZWdpc3RlcnMKKyAqLworCisvKiBTVEFUVVNfQ09ORklHIHJlZ2lzdGVyICovCitlbnVtIHN0YXR1c19jb25maWcgeworCVNPRlRfUlNUCQk9IDEgPDwgMCwKKworCUVSUl9NQVNLCQk9IDB4MGYgPDwgNCwJLyogRXJyb3IgY29kZSBtYXNrICovCisJRVJSX05PCQkJPSAweDAwLAkJLyogTm8gZXJyb3IgKi8KKwlFUlJfRE1BX1YJCT0gMHgwMSA8PCA0LAkvKiBETUEgaW4gdmVydGljYWwgYWN0aXZlICovCisJRVJSX0RNQV9WQgkJPSAweDAyIDw8IDQsCS8qIERNQSBpbiB2ZXJ0aWNhbCBibGFua2luZyAqLworCUVSUl9MSU5FX1RPT19MT05HCT0gMHgwNCA8PCA0LAkvKiBMaW5lIHRvbyBsb25nICovCisJRVJSX1RPT19NQU5HX0xJTkVTCT0gMHgwNSA8PCA0LAkvKiBUb28gbWFueSBsaW5lcyBpbiBmaWVsZCAqLworCUVSUl9MSU5FX1RPT19TSE9SVAk9IDB4MDYgPDwgNCwJLyogTGluZSB0b28gc2hvcnQgKi8KKwlFUlJfTk9UX0VOT1VHSF9MSU5FCT0gMHgwNyA8PCA0LAkvKiBOb3QgZW5vdWdoIGxpbmVzIGluIGZpZWxkICovCisJRVJSX0ZJRk9fT1ZFUkZMT1cJPSAweDA4IDw8IDQsCS8qIEZJRk8gb3ZlcmZsb3cgKi8KKwlFUlJfRklGT19VTkRFUkZMT1cJPSAweDA5IDw8IDQsCS8qIEZJRk8gdW5kZXJmbG93ICovCisJRVJSXzFiaXRfRUNDCQk9IDB4MGEgPDwgNCwJLyogT25lIGJpdCBFQ0MgZXJyb3IgKi8KKwlFUlJfTU9SRV9FQ0MJCT0gMHgwYiA8PCA0LAkvKiBUd28vbW9yZSBiaXRzIEVDQyBlcnJvciAqLworCisJSU5UX0ZJRUxEX0VOCQk9IDB4MDEgPDwgOCwJLyogRW5hYmxlIGZpZWxkIGludGVycnVwdCAqLworCUlOVF9WU1lOQ19FTgkJPSAweDAxIDw8IDksCS8qIEVuYWJsZSB2c3luYyBpbnRlcnJ1cHQgKi8KKwlJTlRfSFNZTkNfRU4JCT0gMHgwMSA8PCAxMCwJLyogRW5hYmxlIGhzeW5jIGludGVycnVwdCAqLworCUlOVF9WU1RBUlRfRU4JCT0gMHgwMSA8PCAxMSwJLyogRW5hYmxlIHZzdGFydCBpbnRlcnJ1cHQgKi8KKwlJTlRfRE1BX0VORF9FTgkJPSAweDAxIDw8IDEyLAkvKiBFbmFibGUgRE1BIGVuZCBpbnRlcnJ1cHQgKi8KKwlJTlRfRVJST1JfRU4JCT0gMHgwMSA8PCAxMywJLyogRW5hYmxlIGVycm9yIGludGVycnVwdCAqLworCUlOVF9FQ0NfRU4JCT0gMHgwMSA8PCAxNCwJLyogRW5hYmxlIEVDQyBpbnRlcnJ1cHQgKi8KKworCUlOVF9GSUVMRF9TVEFUVVMJPSAweDAxIDw8IDE2LAkvKiBmaWVsZCBpbnRlcnJ1cHQgc3RhdHVzICovCisJSU5UX1ZTWU5DX1NUQVRVUwk9IDB4MDEgPDwgMTcsCS8qIHZzeW5jIGludGVycnVwdCBzdGF0dXMgKi8KKwlJTlRfSFNZTkNfU1RBVFVTCT0gMHgwMSA8PCAxOCwJLyogaHN5bmMgaW50ZXJydXB0IHN0YXR1cyAqLworCUlOVF9WU1RBUlRfU1RBVFVTCT0gMHgwMSA8PCAxOSwJLyogdnN0YXJ0IGludGVycnVwdCBzdGF0dXMgKi8KKwlJTlRfRE1BX0VORF9TVEFUVVMJPSAweDAxIDw8IDIwLAkvKiBETUEgZW5kIGludGVycnVwdCBzdGF0dXMgKi8KKwlJTlRfRVJST1JfU1RBVFVTCT0gMHgwMSA8PCAyMSwJLyogZXJyb3IgaW50ZXJydXB0IHN0YXR1cyAqLworCisJRE1BX0FDVAkJCT0gMHgwMSA8PCAyNywJLyogRW5hYmxlIERNQSB0cmFuc2ZlciAqLworCUZJRUxEX05PCQk9IDB4MDEgPDwgMjgsCS8qIEZpZWxkIG51bWJlciAqLworCURJVEhFUl9PTgkJPSAweDAxIDw8IDI5LAkvKiBEaXRoZXJpbmcgaXMgb24gKi8KKwlST1VORF9PTgkJPSAweDAxIDw8IDMwLAkvKiBSb3VuZCBpcyBvbiAqLworCU1PREVfMzJCSVQJCT0gMHgwMSA8PCAzMSwJLyogRGF0YSBpbiBSR0JhODg4LAorCQkJCQkJICogMCBpbiBSR0I1NjUKKwkJCQkJCSAqLworfTsKKworI2RlZmluZSBub3JtX21heHcoKQk3MjAKKyNkZWZpbmUgbm9ybV9tYXhoKCkJNTc2CisKKyNkZWZpbmUgSU5UX0FMTF9TVEFUVVMJKElOVF9GSUVMRF9TVEFUVVMgfCBJTlRfVlNZTkNfU1RBVFVTIHwgXAorCQkJIElOVF9IU1lOQ19TVEFUVVMgfCBJTlRfVlNUQVJUX1NUQVRVUyB8IFwKKwkJCSBJTlRfRE1BX0VORF9TVEFUVVMgfCBJTlRfRVJST1JfU1RBVFVTKQorCisjZGVmaW5lIE5VTV9GT1JNQVRTCUFSUkFZX1NJWkUoZm9ybWF0cykKKworc3RhdGljIGlycXJldHVybl90IHZpdV9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CisKK3N0cnVjdCB2aXVfZm10ICpmb3JtYXRfYnlfZm91cmNjKGludCBmb3VyY2MpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykgeworCQlpZiAoZm9ybWF0c1tpXS5waXhlbGZvcm1hdCA9PSBmb3VyY2MpCisJCQlyZXR1cm4gZm9ybWF0cyArIGk7CisJfQorCisJZHByaW50aygwLCAidW5rbm93biBwaXhlbGZvcm1hdDonJTQuNHMnXG4iLCAoY2hhciAqKSZmb3VyY2MpOworCXJldHVybiBOVUxMOworfQorCit2b2lkIHZpdV9zdGFydF9kbWEoc3RydWN0IHZpdV9kZXYgKmRldikKK3sKKwlzdHJ1Y3Qgdml1X3JlZyAqdnIgPSBkZXYtPnZyOworCisJZGV2LT5maWVsZCA9IDA7CisKKwkvKiBFbmFibGUgRE1BIG9wZXJhdGlvbiAqLworCW91dF9iZTMyKCZ2ci0+c3RhdHVzX2NmZywgU09GVF9SU1QpOworCW91dF9iZTMyKCZ2ci0+c3RhdHVzX2NmZywgSU5UX0ZJRUxEX0VOKTsKK30KKwordm9pZCB2aXVfc3RvcF9kbWEoc3RydWN0IHZpdV9kZXYgKmRldikKK3sKKwlzdHJ1Y3Qgdml1X3JlZyAqdnIgPSBkZXYtPnZyOworCWludCBjbnQgPSAxMDA7CisJdTMyIHN0YXR1c19jZmc7CisKKwlvdXRfYmUzMigmdnItPnN0YXR1c19jZmcsIDApOworCisJLyogQ2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJc3RhdHVzX2NmZyA9IGluX2JlMzIoJnZyLT5zdGF0dXNfY2ZnKTsKKwlpZiAoc3RhdHVzX2NmZyAmIDB4M2YwMDAwKQorCQlvdXRfYmUzMigmdnItPnN0YXR1c19jZmcsIHN0YXR1c19jZmcgJiAweDNmMDAwMCk7CisKKwlpZiAoc3RhdHVzX2NmZyAmIERNQV9BQ1QpIHsKKwkJZG8geworCQkJc3RhdHVzX2NmZyA9IGluX2JlMzIoJnZyLT5zdGF0dXNfY2ZnKTsKKwkJCWlmIChzdGF0dXNfY2ZnICYgSU5UX0RNQV9FTkRfU1RBVFVTKQorCQkJCWJyZWFrOworCQl9IHdoaWxlIChjbnQtLSk7CisKKwkJaWYgKGNudCA8IDApIHsKKwkJCS8qIHRpbWVkIG91dCwgaXNzdWUgc29mdCByZXNldCAqLworCQkJb3V0X2JlMzIoJnZyLT5zdGF0dXNfY2ZnLCBTT0ZUX1JTVCk7CisJCQlvdXRfYmUzMigmdnItPnN0YXR1c19jZmcsIDApOworCQl9IGVsc2UgeworCQkJLyogY2xlYXIgRE1BX0VORCBhbmQgb3RoZXIgcGVuZGluZyBpcnFzICovCisJCQlvdXRfYmUzMigmdnItPnN0YXR1c19jZmcsIHN0YXR1c19jZmcgJiAweDNmMDAwMCk7CisJCX0KKwl9CisKKwlkZXYtPmZpZWxkID0gMDsKK30KKworc3RhdGljIGludCByZXN0YXJ0X3ZpZGVvX3F1ZXVlKHN0cnVjdCB2aXVfZG1hcXVldWUgKnZpZHEpCit7CisJc3RydWN0IHZpdV9idWYgKmJ1ZiwgKnByZXY7CisKKwlkcHJpbnRrKDEsICIlcyB2aWRxPTB4JTA4bHhcbiIsIF9fZnVuY19fLCAodW5zaWduZWQgbG9uZyl2aWRxKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnZpZHEtPmFjdGl2ZSkpIHsKKwkJYnVmID0gbGlzdF9lbnRyeSh2aWRxLT5hY3RpdmUubmV4dCwgc3RydWN0IHZpdV9idWYsIHZiLnF1ZXVlKTsKKwkJZHByaW50aygyLCAicmVzdGFydF9xdWV1ZSBbJXAvJWRdOiByZXN0YXJ0IGRtYVxuIiwKKwkJCWJ1ZiwgYnVmLT52Yi5pKTsKKworCQl2aXVfc3RvcF9kbWEodmlkcS0+ZGV2KTsKKworCQkvKiBjYW5jZWwgYWxsIG91dHN0YW5kaW5nIGNhcHR1cmUgcmVxdWVzdHMgKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJ1ZiwgcHJldiwgJnZpZHEtPmFjdGl2ZSwgdmIucXVldWUpIHsKKwkJCWxpc3RfZGVsKCZidWYtPnZiLnF1ZXVlKTsKKwkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9FUlJPUjsKKwkJCXdha2VfdXAoJmJ1Zi0+dmIuZG9uZSk7CisJCX0KKwkJbW9kX3RpbWVyKCZ2aWRxLT50aW1lb3V0LCBqaWZmaWVzK0JVRkZFUl9USU1FT1VUKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcHJldiA9IE5VTEw7CisJZm9yICg7OykgeworCQlpZiAobGlzdF9lbXB0eSgmdmlkcS0+cXVldWVkKSkKKwkJCXJldHVybiAwOworCQlidWYgPSBsaXN0X2VudHJ5KHZpZHEtPnF1ZXVlZC5uZXh0LCBzdHJ1Y3Qgdml1X2J1ZiwgdmIucXVldWUpOworCQlpZiAocHJldiA9PSBOVUxMKSB7CisJCQlsaXN0X2RlbCgmYnVmLT52Yi5xdWV1ZSk7CisJCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmdmlkcS0+YWN0aXZlKTsKKworCQkJZHByaW50aygxLCAiUmVzdGFydGluZyB2aWRlbyBkbWFcbiIpOworCQkJdml1X3N0b3BfZG1hKHZpZHEtPmRldik7CisJCQl2aXVfc3RhcnRfZG1hKHZpZHEtPmRldik7CisKKwkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJCQltb2RfdGltZXIoJnZpZHEtPnRpbWVvdXQsIGppZmZpZXMrQlVGRkVSX1RJTUVPVVQpOworCQkJZHByaW50aygyLCAiWyVwLyVkXSByZXN0YXJ0X3F1ZXVlIC0gZmlyc3QgYWN0aXZlXG4iLAorCQkJCWJ1ZiwgYnVmLT52Yi5pKTsKKworCQl9IGVsc2UgaWYgKHByZXYtPnZiLndpZHRoICA9PSBidWYtPnZiLndpZHRoICAmJgorCQkJICAgcHJldi0+dmIuaGVpZ2h0ID09IGJ1Zi0+dmIuaGVpZ2h0ICYmCisJCQkgICBwcmV2LT5mbXQgICAgICAgPT0gYnVmLT5mbXQpIHsKKwkJCWxpc3RfZGVsKCZidWYtPnZiLnF1ZXVlKTsKKwkJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZ2aWRxLT5hY3RpdmUpOworCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwkJCWRwcmludGsoMiwgIlslcC8lZF0gcmVzdGFydF9xdWV1ZSAtIG1vdmUgdG8gYWN0aXZlXG4iLAorCQkJCWJ1ZiwgYnVmLT52Yi5pKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAwOworCQl9CisJCXByZXYgPSBidWY7CisJfQorfQorCitzdGF0aWMgdm9pZCB2aXVfdmlkX3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCB2aXVfZGV2ICpkZXYgPSAoc3RydWN0IHZpdV9kZXYgKilkYXRhOworCXN0cnVjdCB2aXVfYnVmICpidWY7CisJc3RydWN0IHZpdV9kbWFxdWV1ZSAqdmlkcSA9ICZkZXYtPnZpZHE7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnZpZHEtPmFjdGl2ZSkpIHsKKwkJYnVmID0gbGlzdF9lbnRyeSh2aWRxLT5hY3RpdmUubmV4dCwgc3RydWN0IHZpdV9idWYsIHZiLnF1ZXVlKTsKKwkJbGlzdF9kZWwoJmJ1Zi0+dmIucXVldWUpOworCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfRVJST1I7CisJCXdha2VfdXAoJmJ1Zi0+dmIuZG9uZSk7CisJCWRwcmludGsoMSwgInZpdS8wOiBbJXAvJWRdIHRpbWVvdXRcbiIsIGJ1ZiwgYnVmLT52Yi5pKTsKKwl9CisKKwlyZXN0YXJ0X3ZpZGVvX3F1ZXVlKHZpZHEpOworfQorCisvKgorICogVmlkZW9idWYgb3BlcmF0aW9ucworICovCitzdGF0aWMgaW50IGJ1ZmZlcl9zZXR1cChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgKmNvdW50LAorCQkJdW5zaWduZWQgaW50ICpzaXplKQoreworCXN0cnVjdCB2aXVfZmggKmZoID0gdnEtPnByaXZfZGF0YTsKKworCSpzaXplID0gZmgtPndpZHRoICogZmgtPmhlaWdodCAqIGZoLT5mbXQtPmRlcHRoID4+IDM7CisJaWYgKCpjb3VudCA9PSAwKQorCQkqY291bnQgPSAzMjsKKworCXdoaWxlICgqc2l6ZSAqICpjb3VudCA+IFZJVV9WSURfTUVNX0xJTUlUICogMTAyNCAqIDEwMjQpCisJCSgqY291bnQpLS07CisKKwlkcHJpbnRrKDEsICIlcywgY291bnQ9JWQsIHNpemU9JWRcbiIsIF9fZnVuY19fLCAqY291bnQsICpzaXplKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9idWZmZXIoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgc3RydWN0IHZpdV9idWYgKmJ1ZikKK3sKKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiA9ICZidWYtPnZiOworCXZvaWQgKnZhZGRyID0gTlVMTDsKKworCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7CisKKwl2aWRlb2J1Zl93YWl0b24oJmJ1Zi0+dmIsIDAsIDApOworCisJaWYgKHZxLT5pbnRfb3BzICYmIHZxLT5pbnRfb3BzLT52YWRkcikKKwkJdmFkZHIgPSB2cS0+aW50X29wcy0+dmFkZHIodmIpOworCisJaWYgKHZhZGRyKQorCQl2aWRlb2J1Zl9kbWFfY29udGlnX2ZyZWUodnEsICZidWYtPnZiKTsKKworCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9ORUVEU19JTklUOworfQorCitpbmxpbmUgaW50IGJ1ZmZlcl9hY3RpdmF0ZShzdHJ1Y3Qgdml1X2RldiAqZGV2LCBzdHJ1Y3Qgdml1X2J1ZiAqYnVmKQoreworCXN0cnVjdCB2aXVfcmVnICp2ciA9IGRldi0+dnI7CisJaW50IGJwcDsKKworCS8qIHNldHVwIHRoZSBETUEgYmFzZSBhZGRyZXNzICovCisJcmVnX3ZhbC5maWVsZF9iYXNlX2FkZHIgPSB2aWRlb2J1Zl90b19kbWFfY29udGlnKCZidWYtPnZiKTsKKworCWRwcmludGsoMSwgImJ1ZmZlcl9hY3RpdmF0ZSBbJXAvJWRdOiBkbWEgYWRkciAweCVseFxuIiwKKwkJYnVmLCBidWYtPnZiLmksICh1bnNpZ25lZCBsb25nKXJlZ192YWwuZmllbGRfYmFzZV9hZGRyKTsKKworCS8qIGludGVybGFjZSBpcyBvbiBieSBkZWZhdWx0LCBzZXQgaG9yaXpvbnRhbCBETUEgaW5jcmVtZW50ICovCisJcmVnX3ZhbC5zdGF0dXNfY2ZnID0gMDsKKwlicHAgPSBidWYtPmZtdC0+ZGVwdGggPj4gMzsKKwlzd2l0Y2ggKGJwcCkgeworCWNhc2UgMjoKKwkJcmVnX3ZhbC5zdGF0dXNfY2ZnICY9IH5NT0RFXzMyQklUOworCQlyZWdfdmFsLmRtYV9pbmMgPSBidWYtPnZiLndpZHRoICogMjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlyZWdfdmFsLnN0YXR1c19jZmcgfD0gTU9ERV8zMkJJVDsKKwkJcmVnX3ZhbC5kbWFfaW5jID0gYnVmLT52Yi53aWR0aCAqIDQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRwcmludGsoMCwgImRvZXNuJ3Qgc3VwcG9ydCBjb2xvciBkZXB0aCglZClcbiIsCisJCQlicHAgKiA4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogc2V0dXAgcGljdHVyZV9jb3VudCByZWdpc3RlciAqLworCXJlZ192YWwucGljdHVyZV9jb3VudCA9IChidWYtPnZiLmhlaWdodCAvIDIpIDw8IDE2IHwKKwkJCQlidWYtPnZiLndpZHRoOworCisJcmVnX3ZhbC5zdGF0dXNfY2ZnIHw9IERNQV9BQ1QgfCBJTlRfRE1BX0VORF9FTiB8IElOVF9GSUVMRF9FTjsKKworCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJZGV2LT5jYXBmaWVsZCA9IGJ1Zi0+dmIuZmllbGQ7CisKKwkvKiByZXNldCBkbWEgaW5jcmVtZW50IGlmIG5lZWRlZCAqLworCWlmICghVjRMMl9GSUVMRF9IQVNfQk9USChidWYtPnZiLmZpZWxkKSkKKwkJcmVnX3ZhbC5kbWFfaW5jID0gMDsKKworCW91dF9iZTMyKCZ2ci0+ZG1hX2luYywgcmVnX3ZhbC5kbWFfaW5jKTsKKwlvdXRfYmUzMigmdnItPnBpY3R1cmVfY291bnQsIHJlZ192YWwucGljdHVyZV9jb3VudCk7CisJb3V0X2JlMzIoJnZyLT5maWVsZF9iYXNlX2FkZHIsIHJlZ192YWwuZmllbGRfYmFzZV9hZGRyKTsKKwltb2RfdGltZXIoJmRldi0+dmlkcS50aW1lb3V0LCBqaWZmaWVzICsgQlVGRkVSX1RJTUVPVVQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJ1ZmZlcl9wcmVwYXJlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsCisJCQkgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLAorCQkJICBlbnVtIHY0bDJfZmllbGQgZmllbGQpCit7CisJc3RydWN0IHZpdV9maCAgKmZoICA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IHZpdV9idWYgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IHZpdV9idWYsIHZiKTsKKwlpbnQgcmM7CisKKwlCVUdfT04oZmgtPmZtdCA9PSBOVUxMKTsKKworCWlmIChmaC0+d2lkdGggIDwgNDggfHwgZmgtPndpZHRoICA+IG5vcm1fbWF4dygpIHx8CisJICAgIGZoLT5oZWlnaHQgPCAzMiB8fCBmaC0+aGVpZ2h0ID4gbm9ybV9tYXhoKCkpCisJCXJldHVybiAtRUlOVkFMOworCWJ1Zi0+dmIuc2l6ZSA9IChmaC0+d2lkdGggKiBmaC0+aGVpZ2h0ICogZmgtPmZtdC0+ZGVwdGgpID4+IDM7CisJaWYgKGJ1Zi0+dmIuYmFkZHIgIT0gMCAmJiBidWYtPnZiLmJzaXplIDwgYnVmLT52Yi5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChidWYtPmZtdCAgICAgICAhPSBmaC0+Zm10CSB8fAorCSAgICBidWYtPnZiLndpZHRoICAhPSBmaC0+d2lkdGggIHx8CisJICAgIGJ1Zi0+dmIuaGVpZ2h0ICE9IGZoLT5oZWlnaHQgfHwKKwkgICAgYnVmLT52Yi5maWVsZCAgIT0gZmllbGQpIHsKKwkJYnVmLT5mbXQgICAgICAgPSBmaC0+Zm10OworCQlidWYtPnZiLndpZHRoICA9IGZoLT53aWR0aDsKKwkJYnVmLT52Yi5oZWlnaHQgPSBmaC0+aGVpZ2h0OworCQlidWYtPnZiLmZpZWxkICA9IGZpZWxkOworCX0KKworCWlmIChidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX05FRURTX0lOSVQpIHsKKwkJcmMgPSB2aWRlb2J1Zl9pb2xvY2sodnEsICZidWYtPnZiLCBOVUxMKTsKKwkJaWYgKHJjICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJYnVmLT52Yi53aWR0aCAgPSBmaC0+d2lkdGg7CisJCWJ1Zi0+dmIuaGVpZ2h0ID0gZmgtPmhlaWdodDsKKwkJYnVmLT52Yi5maWVsZCAgPSBmaWVsZDsKKwkJYnVmLT5mbXQgICAgICAgPSBmaC0+Zm10OworCX0KKworCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9QUkVQQVJFRDsKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlmcmVlX2J1ZmZlcih2cSwgYnVmKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3Qgdml1X2J1ZiAgICAgICAqYnVmICAgICA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IHZpdV9idWYsIHZiKTsKKwlzdHJ1Y3Qgdml1X2ZoICAgICAgICAqZmggICAgICA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IHZpdV9kZXYgICAgICAgKmRldiAgICAgPSBmaC0+ZGV2OworCXN0cnVjdCB2aXVfZG1hcXVldWUgICp2aWRxICAgID0gJmRldi0+dmlkcTsKKwlzdHJ1Y3Qgdml1X2J1ZiAgICAgICAqcHJldjsKKworCWlmICghbGlzdF9lbXB0eSgmdmlkcS0+cXVldWVkKSkgeworCQlkcHJpbnRrKDEsICJhZGRpbmcgdmIgcXVldWU9MHglMDhseFxuIiwKKwkJCQkodW5zaWduZWQgbG9uZykmYnVmLT52Yi5xdWV1ZSk7CisJCWRwcmludGsoMSwgInZpZHEgcG9pbnRlciAweCVwLCBxdWV1ZWQgMHglcFxuIiwKKwkJCQl2aWRxLCAmdmlkcS0+cXVldWVkKTsKKwkJZHByaW50aygxLCAiZGV2ICVwLCBxdWV1ZWQ6IHNlbGYgJXAsIG5leHQgJXAsIGhlYWQgJXBcbiIsCisJCQlkZXYsICZ2aWRxLT5xdWV1ZWQsIHZpZHEtPnF1ZXVlZC5uZXh0LAorCQkJdmlkcS0+cXVldWVkLnByZXYpOworCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmdmlkcS0+cXVldWVkKTsKKwkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKKwkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gcXVldWVkXG4iLAorCQkJYnVmLCBidWYtPnZiLmkpOworCX0gZWxzZSBpZiAobGlzdF9lbXB0eSgmdmlkcS0+YWN0aXZlKSkgeworCQlkcHJpbnRrKDEsICJhZGRpbmcgdmIgYWN0aXZlPTB4JTA4bHhcbiIsCisJCQkJKHVuc2lnbmVkIGxvbmcpJmJ1Zi0+dmIucXVldWUpOworCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmdmlkcS0+YWN0aXZlKTsKKwkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwkJbW9kX3RpbWVyKCZ2aWRxLT50aW1lb3V0LCBqaWZmaWVzK0JVRkZFUl9USU1FT1VUKTsKKwkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBhY3RpdmVcbiIsCisJCQlidWYsIGJ1Zi0+dmIuaSk7CisKKwkJYnVmZmVyX2FjdGl2YXRlKGRldiwgYnVmKTsKKwl9IGVsc2UgeworCQlkcHJpbnRrKDEsICJhZGRpbmcgdmIgcXVldWUyPTB4JTA4bHhcbiIsCisJCQkJKHVuc2lnbmVkIGxvbmcpJmJ1Zi0+dmIucXVldWUpOworCQlwcmV2ID0gbGlzdF9lbnRyeSh2aWRxLT5hY3RpdmUucHJldiwgc3RydWN0IHZpdV9idWYsIHZiLnF1ZXVlKTsKKwkJaWYgKHByZXYtPnZiLndpZHRoICA9PSBidWYtPnZiLndpZHRoICAmJgorCQkgICAgcHJldi0+dmIuaGVpZ2h0ID09IGJ1Zi0+dmIuaGVpZ2h0ICYmCisJCSAgICBwcmV2LT5mbXQgICAgICAgPT0gYnVmLT5mbXQpIHsKKwkJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZ2aWRxLT5hY3RpdmUpOworCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwkJCWRwcmludGsoMiwgIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gYXBwZW5kIHRvIGFjdGl2ZVxuIiwKKwkJCQlidWYsIGJ1Zi0+dmIuaSk7CisJCX0gZWxzZSB7CisJCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmdmlkcS0+cXVldWVkKTsKKwkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJCQlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGZpcnN0IHF1ZXVlZFxuIiwKKwkJCQlidWYsIGJ1Zi0+dmIuaSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsCisJCQkJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IHZpdV9idWYgKmJ1ZiAgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCB2aXVfYnVmLCB2Yik7CisJc3RydWN0IHZpdV9maCAgKmZoICAgPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCB2aXVfZGV2ICpkZXYgID0gKHN0cnVjdCB2aXVfZGV2ICopZmgtPmRldjsKKworCXZpdV9zdG9wX2RtYShkZXYpOworCWZyZWVfYnVmZmVyKHZxLCBidWYpOworfQorCitzdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyB2aXVfdmlkZW9fcW9wcyA9IHsKKwkuYnVmX3NldHVwICAgICAgPSBidWZmZXJfc2V0dXAsCisJLmJ1Zl9wcmVwYXJlICAgID0gYnVmZmVyX3ByZXBhcmUsCisJLmJ1Zl9xdWV1ZSAgICAgID0gYnVmZmVyX3F1ZXVlLAorCS5idWZfcmVsZWFzZSAgICA9IGJ1ZmZlcl9yZWxlYXNlLAorfTsKKworLyoKKyAqIElPQ1RMIHZpZGlvYyBoYW5kbGluZworICovCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKK3sKKwlzdHJjcHkoY2FwLT5kcml2ZXIsICJ2aXUiKTsKKwlzdHJjcHkoY2FwLT5jYXJkLCAidml1Iik7CisJY2FwLT52ZXJzaW9uID0gVklVX1ZFUlNJT047CisJY2FwLT5jYXBhYmlsaXRpZXMgPQlWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKKwkJCQlWNEwyX0NBUF9TVFJFQU1JTkcgICAgIHwKKwkJCQlWNEwyX0NBUF9WSURFT19PVkVSTEFZIHwKKwkJCQlWNEwyX0NBUF9SRUFEV1JJVEU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1fZm10KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZikKK3sKKwlpbnQgaW5kZXggPSBmLT5pbmRleDsKKworCWlmIChmLT5pbmRleCA+IE5VTV9GT1JNQVRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0cmxjcHkoZi0+ZGVzY3JpcHRpb24sIGZvcm1hdHNbaW5kZXhdLm5hbWUsIHNpemVvZihmLT5kZXNjcmlwdGlvbikpOworCWYtPnBpeGVsZm9ybWF0ID0gZm9ybWF0c1tpbmRleF0uZm91cmNjOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgdml1X2ZoICpmaCA9IHByaXY7CisKKwlmLT5mbXQucGl4LndpZHRoICAgICAgICA9IGZoLT53aWR0aDsKKwlmLT5mbXQucGl4LmhlaWdodCAgICAgICA9IGZoLT5oZWlnaHQ7CisJZi0+Zm10LnBpeC5maWVsZCAgICAgICAgPSBmaC0+dmJfdmlkcS5maWVsZDsKKwlmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICA9IGZoLT5mbXQtPnBpeGVsZm9ybWF0OworCWYtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0KKwkJCShmLT5mbXQucGl4LndpZHRoICogZmgtPmZtdC0+ZGVwdGgpID4+IDM7CisJZi0+Zm10LnBpeC5zaXplaW1hZ2UJPSBmaC0+c2l6ZWltYWdlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY190cnlfZm10X2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCB2aXVfZm10ICpmbXQ7CisJZW51bSB2NGwyX2ZpZWxkIGZpZWxkOworCXVuc2lnbmVkIGludCBtYXh3LCBtYXhoOworCisJZm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKKwlpZiAoIWZtdCkgeworCQlkcHJpbnRrKDEsICJGb3VyY2MgZm9ybWF0ICgweCUwOHgpIGludmFsaWQuIiwKKwkJCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmaWVsZCA9IGYtPmZtdC5waXguZmllbGQ7CisKKwlpZiAoZmllbGQgPT0gVjRMMl9GSUVMRF9BTlkpIHsKKwkJZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJfSBlbHNlIGlmIChmaWVsZCAhPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQpIHsKKwkJZHByaW50aygxLCAiRmllbGQgdHlwZSBpbnZhbGlkLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1heHcgID0gbm9ybV9tYXh3KCk7CisJbWF4aCAgPSBub3JtX21heGgoKTsKKworCWYtPmZtdC5waXguZmllbGQgPSBmaWVsZDsKKwlpZiAoZi0+Zm10LnBpeC5oZWlnaHQgPCAzMikKKwkJZi0+Zm10LnBpeC5oZWlnaHQgPSAzMjsKKwlpZiAoZi0+Zm10LnBpeC5oZWlnaHQgPiBtYXhoKQorCQlmLT5mbXQucGl4LmhlaWdodCA9IG1heGg7CisJaWYgKGYtPmZtdC5waXgud2lkdGggPCA0OCkKKwkJZi0+Zm10LnBpeC53aWR0aCA9IDQ4OworCWlmIChmLT5mbXQucGl4LndpZHRoID4gbWF4dykKKwkJZi0+Zm10LnBpeC53aWR0aCA9IG1heHc7CisJZi0+Zm10LnBpeC53aWR0aCAmPSB+MHgwMzsKKwlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9CisJCShmLT5mbXQucGl4LndpZHRoICogZm10LT5kZXB0aCkgPj4gMzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgdml1X2ZoICpmaCA9IHByaXY7CisJaW50IHJldDsKKworCXJldCA9IHZpZGlvY190cnlfZm10X2NhcChmaWxlLCBmaCwgZik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlmaC0+Zm10ICAgICAgICAgICA9IGZvcm1hdF9ieV9mb3VyY2MoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7CisJZmgtPndpZHRoICAgICAgICAgPSBmLT5mbXQucGl4LndpZHRoOworCWZoLT5oZWlnaHQgICAgICAgID0gZi0+Zm10LnBpeC5oZWlnaHQ7CisJZmgtPnNpemVpbWFnZSAgICAgPSBmLT5mbXQucGl4LnNpemVpbWFnZTsKKwlmaC0+dmJfdmlkcS5maWVsZCA9IGYtPmZtdC5waXguZmllbGQ7CisJZmgtPnR5cGUgICAgICAgICAgPSBmLT50eXBlOworCWRwcmludGsoMSwgInNldCB0byBwaXhlbGZvcm1hdCAnJTQuNnMnXG4iLCAoY2hhciAqKSZmaC0+Zm10LT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19mbXRfb3ZlcmxheShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCB2aXVfZmggKmZoID0gcHJpdjsKKworCWYtPmZtdC53aW4gPSBmaC0+d2luOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZlcmlmeV9wcmV2aWV3KHN0cnVjdCB2aXVfZGV2ICpkZXYsIHN0cnVjdCB2NGwyX3dpbmRvdyAqd2luKQoreworCWVudW0gdjRsMl9maWVsZCBmaWVsZDsKKwlpbnQgbWF4dywgbWF4aDsKKworCWlmIChkZXYtPm92YnVmLmJhc2UgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRldi0+b3ZmbXQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHdpbi0+dy53aWR0aCA8IDQ4IHx8IHdpbi0+dy5oZWlnaHQgPCAzMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmaWVsZCA9IHdpbi0+ZmllbGQ7CisJbWF4dyAgPSBkZXYtPmNyb3BfY3VycmVudC53aWR0aDsKKwltYXhoICA9IGRldi0+Y3JvcF9jdXJyZW50LmhlaWdodDsKKworCWlmIChmaWVsZCA9PSBWNEwyX0ZJRUxEX0FOWSkgeworCQlmaWVsZCA9ICh3aW4tPncuaGVpZ2h0ID4gbWF4aC8yKQorCQkJPyBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQKKwkJCTogVjRMMl9GSUVMRF9UT1A7CisJfQorCXN3aXRjaCAoZmllbGQpIHsKKwljYXNlIFY0TDJfRklFTERfVE9QOgorCWNhc2UgVjRMMl9GSUVMRF9CT1RUT006CisJCW1heGggPSBtYXhoIC8gMjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXdpbi0+ZmllbGQgPSBmaWVsZDsKKwlpZiAod2luLT53LndpZHRoID4gbWF4dykKKwkJd2luLT53LndpZHRoID0gbWF4dzsKKwlpZiAod2luLT53LmhlaWdodCA+IG1heGgpCisJCXdpbi0+dy5oZWlnaHQgPSBtYXhoOworCXJldHVybiAwOworfQorCitpbmxpbmUgdm9pZCB2aXVfYWN0aXZhdGVfb3ZlcmxheShzdHJ1Y3Qgdml1X3JlZyAqdml1X3JlZykKK3sKKwlzdHJ1Y3Qgdml1X3JlZyAqdnIgPSB2aXVfcmVnOworCisJb3V0X2JlMzIoJnZyLT5maWVsZF9iYXNlX2FkZHIsIHJlZ192YWwuZmllbGRfYmFzZV9hZGRyKTsKKwlvdXRfYmUzMigmdnItPmRtYV9pbmMsIHJlZ192YWwuZG1hX2luYyk7CisJb3V0X2JlMzIoJnZyLT5waWN0dXJlX2NvdW50LCByZWdfdmFsLnBpY3R1cmVfY291bnQpOworfQorCitzdGF0aWMgaW50IHZpdV9zdGFydF9wcmV2aWV3KHN0cnVjdCB2aXVfZGV2ICpkZXYsIHN0cnVjdCB2aXVfZmggKmZoKQoreworCWludCBicHA7CisKKwlkcHJpbnRrKDEsICIlcyAlZHglZCAlc1xuIiwgX19mdW5jX18sCisJCWZoLT53aW4udy53aWR0aCwgZmgtPndpbi53LmhlaWdodCwgZGV2LT5vdmZtdC0+bmFtZSk7CisKKwlyZWdfdmFsLnN0YXR1c19jZmcgPSAwOworCisJLyogc2V0dXAgd2luZG93ICovCisJcmVnX3ZhbC5waWN0dXJlX2NvdW50ID0gKGZoLT53aW4udy5oZWlnaHQgLyAyKSA8PCAxNiB8CisJCQkJZmgtPndpbi53LndpZHRoOworCisJLyogc2V0dXAgY29sb3IgZGVwdGggYW5kIGRtYSBpbmNyZW1lbnQgKi8KKwlicHAgPSBkZXYtPm92Zm10LT5kZXB0aCAvIDg7CisJc3dpdGNoIChicHApIHsKKwljYXNlIDI6CisJCXJlZ192YWwuc3RhdHVzX2NmZyAmPSB+TU9ERV8zMkJJVDsKKwkJcmVnX3ZhbC5kbWFfaW5jID0gZmgtPndpbi53LndpZHRoICogMjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlyZWdfdmFsLnN0YXR1c19jZmcgfD0gTU9ERV8zMkJJVDsKKwkJcmVnX3ZhbC5kbWFfaW5jID0gZmgtPndpbi53LndpZHRoICogNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZHByaW50aygwLCAiZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBjb2xvciBkZXB0aCglZClcbiIsCisJCQlicHAgKiA4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2LT5vdmZpZWxkID0gZmgtPndpbi5maWVsZDsKKwlpZiAoIVY0TDJfRklFTERfSEFTX0JPVEgoZGV2LT5vdmZpZWxkKSkKKwkJcmVnX3ZhbC5kbWFfaW5jID0gMDsKKworCXJlZ192YWwuc3RhdHVzX2NmZyB8PSBETUFfQUNUIHwgSU5UX0RNQV9FTkRfRU4gfCBJTlRfRklFTERfRU47CisKKwkvKiBzZXR1cCB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBvdmVybGF5IGJ1ZmZlciAqLworCXJlZ192YWwuZmllbGRfYmFzZV9hZGRyID0gKHUzMilkZXYtPm92YnVmLmJhc2U7CisKKwlkZXYtPm92ZW5hYmxlID0gMTsKKwl2aXVfYWN0aXZhdGVfb3ZlcmxheShkZXYtPnZyKTsKKworCS8qIHN0YXJ0IGRtYSAqLworCXZpdV9zdGFydF9kbWEoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mbXRfb3ZlcmxheShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCB2aXVfZmggICpmaCAgPSBwcml2OworCXN0cnVjdCB2aXVfZGV2ICpkZXYgPSAoc3RydWN0IHZpdV9kZXYgKilmaC0+ZGV2OworCXVuc2lnbmVkIGxvbmcgIGZsYWdzOworCWludCBlcnI7CisKKwllcnIgPSB2ZXJpZnlfcHJldmlldyhkZXYsICZmLT5mbXQud2luKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlmaC0+d2luID0gZi0+Zm10LndpbjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNsb2NrLCBmbGFncyk7CisJdml1X3N0YXJ0X3ByZXZpZXcoZGV2LCBmaCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfdHJ5X2ZtdF9vdmVybGF5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCB2aWRpb2NfZ19mYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqYXJnKQoreworCXN0cnVjdCB2aXVfZmggICpmaCA9IHByaXY7CisJc3RydWN0IHZpdV9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKmZiID0gYXJnOworCisJKmZiID0gZGV2LT5vdmJ1ZjsKKwlmYi0+Y2FwYWJpbGl0eSA9IFY0TDJfRkJVRl9DQVBfTElTVF9DTElQUElORzsKKwlyZXR1cm4gMDsKK30KKworaW50IHZpZGlvY19zX2ZidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICphcmcpCit7CisJc3RydWN0IHZpdV9maCAgKmZoID0gcHJpdjsKKwlzdHJ1Y3Qgdml1X2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqZmIgPSBhcmc7CisJc3RydWN0IHZpdV9mbXQgKmZtdDsKKworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSAmJiAhY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCS8qIGNoZWNrIGFyZ3MgKi8KKwlmbXQgPSBmb3JtYXRfYnlfZm91cmNjKGZiLT5mbXQucGl4ZWxmb3JtYXQpOworCWlmIChmbXQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBvaywgYWNjZXB0IGl0ICovCisJZGV2LT5vdmJ1ZiA9ICpmYjsKKwlkZXYtPm92Zm10ID0gZm10OworCWlmIChkZXYtPm92YnVmLmZtdC5ieXRlc3BlcmxpbmUgPT0gMCkgeworCQlkZXYtPm92YnVmLmZtdC5ieXRlc3BlcmxpbmUgPQorCQkJZGV2LT5vdmJ1Zi5mbXQud2lkdGggKiBmbXQtPmRlcHRoIC8gODsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3JlcWJ1ZnMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnApCit7CisJc3RydWN0IHZpdV9maCAqZmggPSBwcml2OworCisJcmV0dXJuIHZpZGVvYnVmX3JlcWJ1ZnMoJmZoLT52Yl92aWRxLCBwKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2J1ZmZlciAqcCkKK3sKKwlzdHJ1Y3Qgdml1X2ZoICpmaCA9IHByaXY7CisKKwlyZXR1cm4gdmlkZW9idWZfcXVlcnlidWYoJmZoLT52Yl92aWRxLCBwKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpwKQoreworCXN0cnVjdCB2aXVfZmggKmZoID0gcHJpdjsKKworCXJldHVybiB2aWRlb2J1Zl9xYnVmKCZmaC0+dmJfdmlkcSwgcCk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCit7CisJc3RydWN0IHZpdV9maCAqZmggPSBwcml2OworCisJcmV0dXJuIHZpZGVvYnVmX2RxYnVmKCZmaC0+dmJfdmlkcSwgcCwKKwkJCQlmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKK3sKKwlzdHJ1Y3Qgdml1X2ZoICpmaCA9IHByaXY7CisKKwlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZmgtPnR5cGUgIT0gaSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gdmlkZW9idWZfc3RyZWFtb24oJmZoLT52Yl92aWRxKTsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKK3sKKwlzdHJ1Y3Qgdml1X2ZoICAqZmggPSBwcml2OworCisJaWYgKGZoLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGZoLT50eXBlICE9IGkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9mZigmZmgtPnZiX3ZpZHEpOworfQorCisjZGVmaW5lIGRlY29kZXJfY2FsbCh2aXUsIG8sIGYsIGFyZ3MuLi4pIFwKKwl2NGwyX3N1YmRldl9jYWxsKHZpdS0+ZGVjb2RlciwgbywgZiwgIyNhcmdzKQorCitzdGF0aWMgaW50IHZpZGlvY19zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKmlkKQoreworCXN0cnVjdCB2aXVfZmggKmZoID0gcHJpdjsKKworCWRlY29kZXJfY2FsbChmaC0+ZGV2LCBjb3JlLCBzX3N0ZCwgKmlkKTsKKwlyZXR1cm4gMDsKK30KKworLyogb25seSBvbmUgaW5wdXQgaW4gdGhpcyBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2lucHV0ICppbnApCit7CisJc3RydWN0IHZpdV9maCAqZmggPSBwcml2OworCisJaWYgKGlucC0+aW5kZXggIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbnAtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOworCWlucC0+c3RkID0gZmgtPmRldi0+dmRldi0+dHZub3JtczsKKwlzdHJjcHkoaW5wLT5uYW1lLCAiQ2FtZXJhIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKK3sKKwkqaSA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQoreworCXN0cnVjdCB2aXVfZmggKmZoID0gcHJpdjsKKworCWlmIChpID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZWNvZGVyX2NhbGwoZmgtPmRldiwgdmlkZW8sIHNfcm91dGluZywgaSwgMCwgMCk7CisJcmV0dXJuIDA7Cit9CisKKy8qIENvbnRyb2xzICovCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZpdV9xY3RybCk7IGkrKykgeworCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSB2aXVfcWN0cmxbaV0uaWQpIHsKKwkJCW1lbWNweShxYywgJih2aXVfcWN0cmxbaV0pLCBzaXplb2YoKnFjKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2aXVfcWN0cmwpOyBpKyspIHsKKwkJaWYgKGN0cmwtPmlkID09IHZpdV9xY3RybFtpXS5pZCkgeworCQkJY3RybC0+dmFsdWUgPSBxY3RsX3JlZ3NbaV07CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KK3N0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodml1X3FjdHJsKTsgaSsrKSB7CisJCWlmIChjdHJsLT5pZCA9PSB2aXVfcWN0cmxbaV0uaWQpIHsKKwkJCWlmIChjdHJsLT52YWx1ZSA8IHZpdV9xY3RybFtpXS5taW5pbXVtCisJCQkJfHwgY3RybC0+dmFsdWUgPiB2aXVfcWN0cmxbaV0ubWF4aW11bSkKKwkJCQkJcmV0dXJuIC1FUkFOR0U7CisJCQlxY3RsX3JlZ3NbaV0gPSBjdHJsLT52YWx1ZTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitpbmxpbmUgdm9pZCB2aXVfYWN0aXZhdGVfbmV4dF9idWYoc3RydWN0IHZpdV9kZXYgKmRldiwKKwkJCQlzdHJ1Y3Qgdml1X2RtYXF1ZXVlICp2aXVxKQoreworCXN0cnVjdCB2aXVfZG1hcXVldWUgKnZpZHEgPSB2aXVxOworCXN0cnVjdCB2aXVfYnVmICpidWY7CisKKwkvKiBsYXVuY2ggYW5vdGhlciBETUEgb3BlcmF0aW9uIGZvciBhbiBhY3RpdmUvcXVldWVkIGJ1ZmZlciAqLworCWlmICghbGlzdF9lbXB0eSgmdmlkcS0+YWN0aXZlKSkgeworCQlidWYgPSBsaXN0X2VudHJ5KHZpZHEtPmFjdGl2ZS5uZXh0LCBzdHJ1Y3Qgdml1X2J1ZiwKKwkJCQkJdmIucXVldWUpOworCQlkcHJpbnRrKDEsICJzdGFydCBhbm90aGVyIHF1ZXVlZCBidWZmZXI6IDB4JXBcbiIsIGJ1Zik7CisJCWJ1ZmZlcl9hY3RpdmF0ZShkZXYsIGJ1Zik7CisJfSBlbHNlIGlmICghbGlzdF9lbXB0eSgmdmlkcS0+cXVldWVkKSkgeworCQlidWYgPSBsaXN0X2VudHJ5KHZpZHEtPnF1ZXVlZC5uZXh0LCBzdHJ1Y3Qgdml1X2J1ZiwKKwkJCQkJdmIucXVldWUpOworCQlsaXN0X2RlbCgmYnVmLT52Yi5xdWV1ZSk7CisKKwkJZHByaW50aygxLCAic3RhcnQgYW5vdGhlciBxdWV1ZWQgYnVmZmVyOiAweCVwXG4iLCBidWYpOworCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmdmlkcS0+YWN0aXZlKTsKKwkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwkJYnVmZmVyX2FjdGl2YXRlKGRldiwgYnVmKTsKKwl9Cit9CisKK2lubGluZSB2b2lkIHZpdV9kZWZhdWx0X3NldHRpbmdzKHN0cnVjdCB2aXVfcmVnICp2aXVfcmVnKQoreworCXN0cnVjdCB2aXVfcmVnICp2ciA9IHZpdV9yZWc7CisKKwlvdXRfYmUzMigmdnItPmx1bWluYW5jZSwgMHg5NTEyQTI1NCk7CisJb3V0X2JlMzIoJnZyLT5jaHJvbWFfciwgMHgwMzMxMDAwMCk7CisJb3V0X2JlMzIoJnZyLT5jaHJvbWFfZywgMHgwNjYwMEYzOCk7CisJb3V0X2JlMzIoJnZyLT5jaHJvbWFfYiwgMHgwMDAwMDQwOSk7CisJb3V0X2JlMzIoJnZyLT5hbHBoYSwgMHgwMDAwMDBmZik7CisJb3V0X2JlMzIoJnZyLT5yZXFfYWxhcm0sIDB4MDAwMDAwOTApOworCWRwcmludGsoMSwgInN0YXR1cyByZWc6IDB4JTA4eCwgZmllbGQgYmFzZTogMHglMDh4XG4iLAorCQlpbl9iZTMyKCZ2ci0+c3RhdHVzX2NmZyksIGluX2JlMzIoJnZyLT5maWVsZF9iYXNlX2FkZHIpKTsKK30KKworc3RhdGljIHZvaWQgdml1X292ZXJsYXlfaW50cihzdHJ1Y3Qgdml1X2RldiAqZGV2LCB1MzIgc3RhdHVzKQoreworCXN0cnVjdCB2aXVfcmVnICp2ciA9IGRldi0+dnI7CisKKwlpZiAoc3RhdHVzICYgSU5UX0RNQV9FTkRfU1RBVFVTKQorCQlkZXYtPmRtYV9kb25lID0gMTsKKworCWlmIChzdGF0dXMgJiBJTlRfRklFTERfU1RBVFVTKSB7CisJCWlmIChkZXYtPmRtYV9kb25lKSB7CisJCQl1MzIgYWRkciA9IHJlZ192YWwuZmllbGRfYmFzZV9hZGRyOworCisJCQlkZXYtPmRtYV9kb25lID0gMDsKKwkJCWlmIChzdGF0dXMgJiBGSUVMRF9OTykKKwkJCQlhZGRyICs9IHJlZ192YWwuZG1hX2luYzsKKworCQkJb3V0X2JlMzIoJnZyLT5maWVsZF9iYXNlX2FkZHIsIGFkZHIpOworCQkJb3V0X2JlMzIoJnZyLT5kbWFfaW5jLCByZWdfdmFsLmRtYV9pbmMpOworCQkJb3V0X2JlMzIoJnZyLT5zdGF0dXNfY2ZnLAorCQkJCSAoc3RhdHVzICYgMHhmZmMwZmZmZikgfAorCQkJCSAoc3RhdHVzICYgSU5UX0FMTF9TVEFUVVMpIHwKKwkJCQkgcmVnX3ZhbC5zdGF0dXNfY2ZnKTsKKwkJfSBlbHNlIGlmIChzdGF0dXMgJiBJTlRfVlNZTkNfU1RBVFVTKSB7CisJCQlvdXRfYmUzMigmdnItPnN0YXR1c19jZmcsCisJCQkJIChzdGF0dXMgJiAweGZmYzBmZmZmKSB8CisJCQkJIChzdGF0dXMgJiBJTlRfQUxMX1NUQVRVUykgfAorCQkJCSByZWdfdmFsLnN0YXR1c19jZmcpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCB2aXVfY2FwdHVyZV9pbnRyKHN0cnVjdCB2aXVfZGV2ICpkZXYsIHUzMiBzdGF0dXMpCit7CisJc3RydWN0IHZpdV9kbWFxdWV1ZSAqdmlkcSA9ICZkZXYtPnZpZHE7CisJc3RydWN0IHZpdV9yZWcgKnZyID0gZGV2LT52cjsKKwlzdHJ1Y3Qgdml1X2J1ZiAqYnVmOworCWludCBmaWVsZF9udW07CisJaW50IG5lZWRfdHdvOworCWludCBkbWFfZG9uZSA9IDA7CisKKwlmaWVsZF9udW0gPSBzdGF0dXMgJiBGSUVMRF9OTzsKKwluZWVkX3R3byA9IFY0TDJfRklFTERfSEFTX0JPVEgoZGV2LT5jYXBmaWVsZCk7CisKKwlpZiAoc3RhdHVzICYgSU5UX0RNQV9FTkRfU1RBVFVTKSB7CisJCWRtYV9kb25lID0gMTsKKwkJaWYgKCgoZmllbGRfbnVtID09IDApICYmIChkZXYtPmZpZWxkID09IDApKSB8fAorCQkgICAgKGZpZWxkX251bSAmJiAoZGV2LT5maWVsZCA9PSAxKSkpCisJCQlkZXYtPmZpZWxkKys7CisJfQorCisJaWYgKHN0YXR1cyAmIElOVF9GSUVMRF9TVEFUVVMpIHsKKwkJZHByaW50aygxLCAiaXJxOiBmaWVsZCAlZCwgZG9uZSAlZFxuIiwKKwkJCSEhZmllbGRfbnVtLCBkbWFfZG9uZSk7CisJCWlmICh1bmxpa2VseShkZXYtPmZpcnN0KSkgeworCQkJaWYgKGZpZWxkX251bSA9PSAwKSB7CisJCQkJZGV2LT5maXJzdCA9IDA7CisJCQkJZHByaW50aygxLCAiYWN0aXZhdGUgZmlyc3QgYnVmXG4iKTsKKwkJCQl2aXVfYWN0aXZhdGVfbmV4dF9idWYoZGV2LCB2aWRxKTsKKwkJCX0gZWxzZQorCQkJCWRwcmludGsoMSwgIndhaXQgZmllbGQgMFxuIik7CisJCQlyZXR1cm47CisJCX0KKworCQkvKiBzZXR1cCBidWZmZXIgYWRkcmVzcyBmb3IgbmV4dCBkbWEgb3BlcmF0aW9uICovCisJCWlmICghbGlzdF9lbXB0eSgmdmlkcS0+YWN0aXZlKSkgeworCQkJdTMyIGFkZHIgPSByZWdfdmFsLmZpZWxkX2Jhc2VfYWRkcjsKKworCQkJaWYgKGZpZWxkX251bSAmJiBuZWVkX3R3bykgeworCQkJCWFkZHIgKz0gcmVnX3ZhbC5kbWFfaW5jOworCQkJCWRwcmludGsoMSwgImZpZWxkIDEsIDB4JWx4LCBkZXYgZmllbGQgJWRcbiIsCisJCQkJCSh1bnNpZ25lZCBsb25nKWFkZHIsIGRldi0+ZmllbGQpOworCQkJfQorCQkJb3V0X2JlMzIoJnZyLT5maWVsZF9iYXNlX2FkZHIsIGFkZHIpOworCQkJb3V0X2JlMzIoJnZyLT5kbWFfaW5jLCByZWdfdmFsLmRtYV9pbmMpOworCQkJb3V0X2JlMzIoJnZyLT5zdGF0dXNfY2ZnLAorCQkJCSAoc3RhdHVzICYgMHhmZmMwZmZmZikgfAorCQkJCSAoc3RhdHVzICYgSU5UX0FMTF9TVEFUVVMpIHwKKwkJCQkgcmVnX3ZhbC5zdGF0dXNfY2ZnKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWlmIChkbWFfZG9uZSAmJiBmaWVsZF9udW0gJiYgKGRldi0+ZmllbGQgPT0gMikpIHsKKwkJZGV2LT5maWVsZCA9IDA7CisJCWJ1ZiA9IGxpc3RfZW50cnkodmlkcS0+YWN0aXZlLm5leHQsCisJCQkJIHN0cnVjdCB2aXVfYnVmLCB2Yi5xdWV1ZSk7CisJCWRwcmludGsoMSwgInZpdS8wOiBbJXAvJWRdIDB4JWx4LzB4JWx4OiBkbWEgY29tcGxldGVcbiIsCisJCQlidWYsIGJ1Zi0+dmIuaSwKKwkJCSh1bnNpZ25lZCBsb25nKXZpZGVvYnVmX3RvX2RtYV9jb250aWcoJmJ1Zi0+dmIpLAorCQkJKHVuc2lnbmVkIGxvbmcpaW5fYmUzMigmdnItPmZpZWxkX2Jhc2VfYWRkcikpOworCisJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZidWYtPnZiLmRvbmUpKSB7CisJCQlsaXN0X2RlbCgmYnVmLT52Yi5xdWV1ZSk7CisJCQlkb19nZXR0aW1lb2ZkYXkoJmJ1Zi0+dmIudHMpOworCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0RPTkU7CisJCQlidWYtPnZiLmZpZWxkX2NvdW50Kys7CisJCQl3YWtlX3VwKCZidWYtPnZiLmRvbmUpOworCQl9CisJCS8qIGFjdGl2YXRlIG5leHQgZG1hIGJ1ZmZlciAqLworCQl2aXVfYWN0aXZhdGVfbmV4dF9idWYoZGV2LCB2aWRxKTsKKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB2aXVfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHZpdV9kZXYgKmRldiAgPSAoc3RydWN0IHZpdV9kZXYgKilkZXZfaWQ7CisJc3RydWN0IHZpdV9yZWcgKnZyID0gZGV2LT52cjsKKwl1MzIgc3RhdHVzOworCXUzMiBlcnJvcjsKKworCXN0YXR1cyA9IGluX2JlMzIoJnZyLT5zdGF0dXNfY2ZnKTsKKworCWlmIChzdGF0dXMgJiBJTlRfRVJST1JfU1RBVFVTKSB7CisJCWRldi0+aXJxcy5lcnJvcl9pcnErKzsKKwkJZXJyb3IgPSBzdGF0dXMgJiBFUlJfTUFTSzsKKwkJaWYgKGVycm9yKQorCQkJZHByaW50aygxLCAiRXJyOiBlcnJvciglZCksIHRpbWVzOiVkIVxuIiwKKwkJCQllcnJvciA+PiA0LCBkZXYtPmlycXMuZXJyb3JfaXJxKTsKKwkJLyogQ2xlYXIgaW50ZXJydXB0IGVycm9yIGJpdCBhbmQgZXJyb3IgZmxhZ3MgKi8KKwkJb3V0X2JlMzIoJnZyLT5zdGF0dXNfY2ZnLAorCQkJIChzdGF0dXMgJiAweGZmYzBmZmZmKSB8IElOVF9FUlJPUl9TVEFUVVMpOworCX0KKworCWlmIChzdGF0dXMgJiBJTlRfRE1BX0VORF9TVEFUVVMpIHsKKwkJZGV2LT5pcnFzLmRtYV9lbmRfaXJxKys7CisJCWRldi0+ZG1hX2RvbmUgPSAxOworCQlkcHJpbnRrKDIsICJWSVUgRE1BIGVuZCBpbnRlcnJ1cHQgdGltZXM6ICVkXG4iLAorCQkJCQlkZXYtPmlycXMuZG1hX2VuZF9pcnEpOworCX0KKworCWlmIChzdGF0dXMgJiBJTlRfSFNZTkNfU1RBVFVTKQorCQlkZXYtPmlycXMuaHN5bmNfaXJxKys7CisKKwlpZiAoc3RhdHVzICYgSU5UX0ZJRUxEX1NUQVRVUykgeworCQlkZXYtPmlycXMuZmllbGRfaXJxKys7CisJCWRwcmludGsoMiwgIlZJVSBmaWVsZCBpbnRlcnJ1cHQgdGltZXM6ICVkXG4iLAorCQkJCQlkZXYtPmlycXMuZmllbGRfaXJxKTsKKwl9CisKKwlpZiAoc3RhdHVzICYgSU5UX1ZTVEFSVF9TVEFUVVMpCisJCWRldi0+aXJxcy52c3RhcnRfaXJxKys7CisKKwlpZiAoc3RhdHVzICYgSU5UX1ZTWU5DX1NUQVRVUykgeworCQlkZXYtPmlycXMudnN5bmNfaXJxKys7CisJCWRwcmludGsoMiwgIlZJVSB2c3luYyBpbnRlcnJ1cHQgdGltZXM6ICVkXG4iLAorCQkJZGV2LT5pcnFzLnZzeW5jX2lycSk7CisJfQorCisJLyogY2xlYXIgYWxsIHBlbmRpbmcgaXJxcyAqLworCXN0YXR1cyA9IGluX2JlMzIoJnZyLT5zdGF0dXNfY2ZnKTsKKwlvdXRfYmUzMigmdnItPnN0YXR1c19jZmcsCisJCSAoc3RhdHVzICYgMHhmZmMwZmZmZikgfCAoc3RhdHVzICYgSU5UX0FMTF9TVEFUVVMpKTsKKworCWlmIChkZXYtPm92ZW5hYmxlKSB7CisJCXZpdV9vdmVybGF5X2ludHIoZGV2LCBzdGF0dXMpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJLyogQ2FwdHVyZSBtb2RlICovCisJdml1X2NhcHR1cmVfaW50cihkZXYsIHN0YXR1cyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKgorICogRmlsZSBvcGVyYXRpb25zIGZvciB0aGUgZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgdml1X29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHZpdV9kZXYgKmRldiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworCXN0cnVjdCB2aXVfZmggKmZoOworCXN0cnVjdCB2aXVfcmVnICp2cjsKKwlpbnQgbWlub3IgPSB2ZGV2LT5taW5vcjsKKwl1MzIgc3RhdHVzX2NmZzsKKwlpbnQgaTsKKworCWRwcmludGsoMSwgInZpdTogb3BlbiAobWlub3I9JWQpXG4iLCBtaW5vcik7CisKKwlkZXYtPnVzZXJzKys7CisJaWYgKGRldi0+dXNlcnMgPiAxKSB7CisJCWRldi0+dXNlcnMtLTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwl2ciA9IGRldi0+dnI7CisKKwlkcHJpbnRrKDEsICJvcGVuIG1pbm9yPSVkIHR5cGU9JXMgdXNlcnM9JWRcbiIsIG1pbm9yLAorCQl2NGwyX3R5cGVfbmFtZXNbVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFXSwgZGV2LT51c2Vycyk7CisKKwkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCisJZmggPSBremFsbG9jKHNpemVvZigqZmgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZoKSB7CisJCWRldi0+dXNlcnMtLTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CisJZmgtPmRldiA9IGRldjsKKworCWZoLT50eXBlICAgICA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwlmaC0+Zm10ICAgICAgPSBmb3JtYXRfYnlfZm91cmNjKFY0TDJfUElYX0ZNVF9SR0IzMik7CisJZmgtPndpZHRoICAgID0gbm9ybV9tYXh3KCk7CisJZmgtPmhlaWdodCAgID0gbm9ybV9tYXhoKCk7CisJZGV2LT5jcm9wX2N1cnJlbnQud2lkdGggID0gZmgtPndpZHRoOworCWRldi0+Y3JvcF9jdXJyZW50LmhlaWdodCA9IGZoLT5oZWlnaHQ7CisKKwkvKiBQdXQgYWxsIGNvbnRyb2xzIGF0IGEgc2FuZSBzdGF0ZSAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZpdV9xY3RybCk7IGkrKykKKwkJcWN0bF9yZWdzW2ldID0gdml1X3FjdHJsW2ldLmRlZmF1bHRfdmFsdWU7CisKKwlkcHJpbnRrKDEsICJPcGVuOiBmaD0weCUwOGx4LCBkZXY9MHglMDhseCwgZGV2LT52aWRxPTB4JTA4bHhcbiIsCisJCSh1bnNpZ25lZCBsb25nKWZoLCAodW5zaWduZWQgbG9uZylkZXYsCisJCSh1bnNpZ25lZCBsb25nKSZkZXYtPnZpZHEpOworCWRwcmludGsoMSwgIk9wZW46IGxpc3RfZW1wdHkgcXVldWVkPSVkXG4iLAorCQlsaXN0X2VtcHR5KCZkZXYtPnZpZHEucXVldWVkKSk7CisJZHByaW50aygxLCAiT3BlbjogbGlzdF9lbXB0eSBhY3RpdmU9JWRcbiIsCisJCWxpc3RfZW1wdHkoJmRldi0+dmlkcS5hY3RpdmUpKTsKKworCXZpdV9kZWZhdWx0X3NldHRpbmdzKHZyKTsKKworCXN0YXR1c19jZmcgPSBpbl9iZTMyKCZ2ci0+c3RhdHVzX2NmZyk7CisJb3V0X2JlMzIoJnZyLT5zdGF0dXNfY2ZnLAorCQkgc3RhdHVzX2NmZyAmIH4oSU5UX1ZTWU5DX0VOIHwgSU5UX0hTWU5DX0VOIHwKKwkJCQlJTlRfRklFTERfRU4gfCBJTlRfVlNUQVJUX0VOIHwKKwkJCQlJTlRfRE1BX0VORF9FTiB8IElOVF9FUlJPUl9FTiB8IElOVF9FQ0NfRU4pKTsKKworCXN0YXR1c19jZmcgPSBpbl9iZTMyKCZ2ci0+c3RhdHVzX2NmZyk7CisJb3V0X2JlMzIoJnZyLT5zdGF0dXNfY2ZnLCBzdGF0dXNfY2ZnIHwgSU5UX0FMTF9TVEFUVVMpOworCisJc3Bpbl9sb2NrX2luaXQoJmZoLT52YnFfbG9jayk7CisJdmlkZW9idWZfcXVldWVfZG1hX2NvbnRpZ19pbml0KCZmaC0+dmJfdmlkcSwgJnZpdV92aWRlb19xb3BzLAorCQkJCSAgICAgICBkZXYtPmRldiwgJmZoLT52YnFfbG9jaywKKwkJCQkgICAgICAgZmgtPnR5cGUsIFY0TDJfRklFTERfSU5URVJMQUNFRCwKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB2aXVfYnVmKSwgZmgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCB2aXVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmRhdGEsIHNpemVfdCBjb3VudCwKKwkJCWxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3Qgdml1X2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgdml1X2RldiAqZGV2ID0gZmgtPmRldjsKKwlpbnQgcmV0ID0gMDsKKworCWRwcmludGsoMiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJaWYgKGRldi0+b3ZlbmFibGUpCisJCWRldi0+b3ZlbmFibGUgPSAwOworCisJaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgeworCQl2aXVfc3RhcnRfZG1hKGRldik7CisJCXJldCA9IHZpZGVvYnVmX3JlYWRfc3RyZWFtKCZmaC0+dmJfdmlkcSwgZGF0YSwgY291bnQsCisJCQkJcHBvcywgMCwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB2aXVfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQoreworCXN0cnVjdCB2aXVfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSA9ICZmaC0+dmJfdmlkcTsKKworCWlmIChWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgIT0gZmgtPnR5cGUpCisJCXJldHVybiBQT0xMRVJSOworCisJcmV0dXJuIHZpZGVvYnVmX3BvbGxfc3RyZWFtKGZpbGUsIHEsIHdhaXQpOworfQorCitzdGF0aWMgaW50IHZpdV9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2aXVfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB2aXVfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCBtaW5vciA9IHZpZGVvX2RldmRhdGEoZmlsZSktPm1pbm9yOworCisJdml1X3N0b3BfZG1hKGRldik7CisJdmlkZW9idWZfc3RvcCgmZmgtPnZiX3ZpZHEpOworCisJa2ZyZWUoZmgpOworCisJZGV2LT51c2Vycy0tOworCWRwcmludGsoMSwgImNsb3NlIChtaW5vcj0lZCwgdXNlcnM9JWQpXG4iLAorCQltaW5vciwgZGV2LT51c2Vycyk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgdml1X3Jlc2V0KHN0cnVjdCB2aXVfcmVnICpyZWcpCit7CisJb3V0X2JlMzIoJnJlZy0+c3RhdHVzX2NmZywgMCk7CisJb3V0X2JlMzIoJnJlZy0+bHVtaW5hbmNlLCAweDk1MTJhMjU0KTsKKwlvdXRfYmUzMigmcmVnLT5jaHJvbWFfciwgMHgwMzMxMDAwMCk7CisJb3V0X2JlMzIoJnJlZy0+Y2hyb21hX2csIDB4MDY2MDBmMzgpOworCW91dF9iZTMyKCZyZWctPmNocm9tYV9iLCAweDAwMDAwNDA5KTsKKwlvdXRfYmUzMigmcmVnLT5maWVsZF9iYXNlX2FkZHIsIDApOworCW91dF9iZTMyKCZyZWctPmRtYV9pbmMsIDApOworCW91dF9iZTMyKCZyZWctPnBpY3R1cmVfY291bnQsIDB4MDFlMDAyZDApOworCW91dF9iZTMyKCZyZWctPnJlcV9hbGFybSwgMHgwMDAwMDA5MCk7CisJb3V0X2JlMzIoJnJlZy0+YWxwaGEsIDB4MDAwMDAwZmYpOworfQorCitzdGF0aWMgaW50IHZpdV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3Qgdml1X2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0OworCisJZHByaW50aygxLCAibW1hcCBjYWxsZWQsIHZtYT0weCUwOGx4XG4iLCAodW5zaWduZWQgbG9uZyl2bWEpOworCisJcmV0ID0gdmlkZW9idWZfbW1hcF9tYXBwZXIoJmZoLT52Yl92aWRxLCB2bWEpOworCisJZHByaW50aygxLCAidm1hIHN0YXJ0PTB4JTA4bHgsIHNpemU9JWxkLCByZXQ9JWRcbiIsCisJCSh1bnNpZ25lZCBsb25nKXZtYS0+dm1fc3RhcnQsCisJCSh1bnNpZ25lZCBsb25nKXZtYS0+dm1fZW5kLSh1bnNpZ25lZCBsb25nKXZtYS0+dm1fc3RhcnQsCisJCXJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHZpdV9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSB2aXVfb3BlbiwKKwkucmVsZWFzZQk9IHZpdV9yZWxlYXNlLAorCS5yZWFkCQk9IHZpdV9yZWFkLAorCS5wb2xsCQk9IHZpdV9wb2xsLAorCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsIC8qIFY0TDIgaW9jdGwgaGFuZGxlciAqLworCS5tbWFwCQk9IHZpdV9tbWFwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB2aXVfaW9jdGxfb3BzID0geworCS52aWRpb2NfcXVlcnljYXAJPSB2aWRpb2NfcXVlcnljYXAsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwICA9IHZpZGlvY19lbnVtX2ZtdCwKKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAgICAgID0gdmlkaW9jX2dfZm10X2NhcCwKKwkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcCAgID0gdmlkaW9jX3RyeV9mbXRfY2FwLAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcCAgICAgPSB2aWRpb2Nfc19mbXRfY2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX292ZXJsYXkgPSB2aWRpb2NfZW51bV9mbXQsCisJLnZpZGlvY19nX2ZtdF92aWRfb3ZlcmxheSA9IHZpZGlvY19nX2ZtdF9vdmVybGF5LAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfb3ZlcmxheSA9IHZpZGlvY190cnlfZm10X292ZXJsYXksCisJLnZpZGlvY19zX2ZtdF92aWRfb3ZlcmxheSA9IHZpZGlvY19zX2ZtdF9vdmVybGF5LAorCS52aWRpb2NfZ19mYnVmCSAgICAgID0gdmlkaW9jX2dfZmJ1ZiwKKwkudmlkaW9jX3NfZmJ1ZgkgICAgICA9IHZpZGlvY19zX2ZidWYsCisJLnZpZGlvY19yZXFidWZzICAgICAgID0gdmlkaW9jX3JlcWJ1ZnMsCisJLnZpZGlvY19xdWVyeWJ1ZiAgICAgID0gdmlkaW9jX3F1ZXJ5YnVmLAorCS52aWRpb2NfcWJ1ZiAgICAgICAgICA9IHZpZGlvY19xYnVmLAorCS52aWRpb2NfZHFidWYgICAgICAgICA9IHZpZGlvY19kcWJ1ZiwKKwkudmlkaW9jX3Nfc3RkICAgICAgICAgPSB2aWRpb2Nfc19zdGQsCisJLnZpZGlvY19lbnVtX2lucHV0ICAgID0gdmlkaW9jX2VudW1faW5wdXQsCisJLnZpZGlvY19nX2lucHV0ICAgICAgID0gdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0ICAgICAgID0gdmlkaW9jX3NfaW5wdXQsCisJLnZpZGlvY19xdWVyeWN0cmwgICAgID0gdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX2dfY3RybCAgICAgICAgPSB2aWRpb2NfZ19jdHJsLAorCS52aWRpb2Nfc19jdHJsICAgICAgICA9IHZpZGlvY19zX2N0cmwsCisJLnZpZGlvY19zdHJlYW1vbiAgICAgID0gdmlkaW9jX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmICAgICA9IHZpZGlvY19zdHJlYW1vZmYsCit9OworCitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSB2aXVfdGVtcGxhdGUgPSB7CisJLm5hbWUJCT0gIkZTTCB2aXUiLAorCS5mb3BzCQk9ICZ2aXVfZm9wcywKKwkubWlub3IJCT0gLTEsCisJLmlvY3RsX29wcwk9ICZ2aXVfaW9jdGxfb3BzLAorCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCisKKwkudHZub3JtcyAgICAgICAgPSBWNEwyX1NURF9OVFNDX00gfCBWNEwyX1NURF9QQUwsCisJLmN1cnJlbnRfbm9ybSAgID0gVjRMMl9TVERfTlRTQ19NLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgdml1X29mX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9wLAorCQkJCSAgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCit7CisJc3RydWN0IHZpdV9kZXYgKnZpdV9kZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgcjsKKwlzdHJ1Y3Qgdml1X3JlZyBfX2lvbWVtICp2aXVfcmVnczsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkOworCWludCByZXQsIHZpdV9pcnE7CisKKwlyZXQgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG9wLT5kZXYub2Zfbm9kZSwgMCwgJnIpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycigmb3AtPmRldiwgIkNhbid0IHBhcnNlIGRldmljZSBub2RlIHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJdml1X2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG9wLT5kZXYub2Zfbm9kZSwgMCk7CisJaWYgKHZpdV9pcnEgPT0gTk9fSVJRKSB7CisJCWRldl9lcnIoJm9wLT5kZXYsICJFcnJvciB3aGlsZSBtYXBwaW5nIHRoZSBpcnFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiByZXF1ZXN0IG1lbSByZWdpb24gKi8KKwlpZiAoIWRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZvcC0+ZGV2LCByLnN0YXJ0LAorCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCB2aXVfcmVnKSwgRFJWX05BTUUpKSB7CisJCWRldl9lcnIoJm9wLT5kZXYsICJFcnJvciB3aGlsZSByZXF1ZXN0aW5nIG1lbSByZWdpb25cbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyOworCX0KKworCS8qIHJlbWFwIHJlZ2lzdGVycyAqLworCXZpdV9yZWdzID0gZGV2bV9pb3JlbWFwKCZvcC0+ZGV2LCByLnN0YXJ0LCBzaXplb2Yoc3RydWN0IHZpdV9yZWcpKTsKKwlpZiAoIXZpdV9yZWdzKSB7CisJCWRldl9lcnIoJm9wLT5kZXYsICJDYW4ndCBtYXAgcmVnaXN0ZXIgc2V0XG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJLyogUHJlcGFyZSBvdXIgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwl2aXVfZGV2ID0gZGV2bV9remFsbG9jKCZvcC0+ZGV2LCBzaXplb2Yoc3RydWN0IHZpdV9kZXYpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXZpdV9kZXYpIHsKKwkJZGV2X2Vycigmb3AtPmRldiwgIkNhbid0IGFsbG9jYXRlIHByaXZhdGUgc3RydWN0dXJlXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJdml1X2Rldi0+dnIgPSB2aXVfcmVnczsKKwl2aXVfZGV2LT5pcnEgPSB2aXVfaXJxOworCXZpdV9kZXYtPmRldiA9ICZvcC0+ZGV2OworCisJLyogaW5pdCB2aWRlbyBkbWEgcXVldWVzICovCisJSU5JVF9MSVNUX0hFQUQoJnZpdV9kZXYtPnZpZHEuYWN0aXZlKTsKKwlJTklUX0xJU1RfSEVBRCgmdml1X2Rldi0+dmlkcS5xdWV1ZWQpOworCisJLyogaW5pdGlhbGl6ZSBsb2NrcyAqLworCW11dGV4X2luaXQoJnZpdV9kZXYtPmxvY2spOworCisJc25wcmludGYodml1X2Rldi0+djRsMl9kZXYubmFtZSwKKwkJIHNpemVvZih2aXVfZGV2LT52NGwyX2Rldi5uYW1lKSwgIiVzIiwgIlZJVSIpOworCXJldCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKHZpdV9kZXYtPmRldiwgJnZpdV9kZXYtPnY0bDJfZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZvcC0+ZGV2LCAidjRsMl9kZXZpY2VfcmVnaXN0ZXIoKSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwlhZCA9IGkyY19nZXRfYWRhcHRlcigwKTsKKwl2aXVfZGV2LT5kZWNvZGVyID0gdjRsMl9pMmNfbmV3X3N1YmRldigmdml1X2Rldi0+djRsMl9kZXYsIGFkLAorCQkJInNhYTcxMTUiLCAic2FhNzExMyIsIFZJVV9WSURFT19ERUNPREVSX0FERFIsIE5VTEwpOworCisJdml1X2Rldi0+dmlkcS50aW1lb3V0LmZ1bmN0aW9uID0gdml1X3ZpZF90aW1lb3V0OworCXZpdV9kZXYtPnZpZHEudGltZW91dC5kYXRhICAgICA9ICh1bnNpZ25lZCBsb25nKXZpdV9kZXY7CisJaW5pdF90aW1lcigmdml1X2Rldi0+dmlkcS50aW1lb3V0KTsKKwl2aXVfZGV2LT5maXJzdCA9IDE7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHZpZGVvIGRldmljZSAqLworCXZkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAodmRldiA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3ZkZXY7CisJfQorCisJbWVtY3B5KHZkZXYsICZ2aXVfdGVtcGxhdGUsIHNpemVvZih2aXVfdGVtcGxhdGUpKTsKKworCXZkZXYtPnY0bDJfZGV2ID0gJnZpdV9kZXYtPnY0bDJfZGV2OworCisJdml1X2Rldi0+dmRldiA9IHZkZXY7CisKKwl2aWRlb19zZXRfZHJ2ZGF0YSh2aXVfZGV2LT52ZGV2LCB2aXVfZGV2KTsKKworCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2aXVfZGV2LT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7CisJaWYgKHJldCA8IDApIHsKKwkJdmlkZW9fZGV2aWNlX3JlbGVhc2Uodml1X2Rldi0+dmRldik7CisJCWdvdG8gZXJyX3ZkZXY7CisJfQorCisJLyogZW5hYmxlIFZJVSBjbG9jayAqLworCXZpdV9kZXYtPmNsayA9IGNsa19nZXQoJm9wLT5kZXYsICJ2aXVfY2xrIik7CisJaWYgKElTX0VSUih2aXVfZGV2LT5jbGspKSB7CisJCWRldl9lcnIoJm9wLT5kZXYsICJmYWlsZWQgdG8gZmluZCB0aGUgY2xvY2sgbW9kdWxlIVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2NsazsKKwl9IGVsc2UgeworCQljbGtfZW5hYmxlKHZpdV9kZXYtPmNsayk7CisJfQorCisJLyogcmVzZXQgVklVIG1vZHVsZSAqLworCXZpdV9yZXNldCh2aXVfZGV2LT52cik7CisKKwkvKiBpbnN0YWxsIGludGVycnVwdCBoYW5kbGVyICovCisJaWYgKHJlcXVlc3RfaXJxKHZpdV9kZXYtPmlycSwgdml1X2ludHIsIDAsICJ2aXUiLCAodm9pZCAqKXZpdV9kZXYpKSB7CisJCWRldl9lcnIoJm9wLT5kZXYsICJSZXF1ZXN0IFZJVSBJUlEgZmFpbGVkLlxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2lycTsKKwl9CisKKwlkZXZfaW5mbygmb3AtPmRldiwgIkZyZWVzY2FsZSBWSVUgVmlkZW8gQ2FwdHVyZSBCb2FyZFxuIik7CisJcmV0dXJuIHJldDsKKworZXJyX2lycToKKwljbGtfZGlzYWJsZSh2aXVfZGV2LT5jbGspOworCWNsa19wdXQodml1X2Rldi0+Y2xrKTsKK2Vycl9jbGs6CisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2Uodml1X2Rldi0+dmRldik7CitlcnJfdmRldjoKKwlpMmNfcHV0X2FkYXB0ZXIoYWQpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnZpdV9kZXYtPnY0bDJfZGV2KTsKK2VycjoKKwlpcnFfZGlzcG9zZV9tYXBwaW5nKHZpdV9pcnEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHZpdV9vZl9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb3ApCit7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YSgmb3AtPmRldik7CisJc3RydWN0IHZpdV9kZXYgKmRldiA9IGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IHZpdV9kZXYsIHY0bDJfZGV2KTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkZXYgPSBsaXN0X2VudHJ5KHY0bDJfZGV2LT5zdWJkZXZzLm5leHQsCisJCQkJCSAgICAgIHN0cnVjdCB2NGwyX3N1YmRldiwgbGlzdCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2Rldik7CisKKwlmcmVlX2lycShkZXYtPmlycSwgKHZvaWQgKilkZXYpOworCWlycV9kaXNwb3NlX21hcHBpbmcoZGV2LT5pcnEpOworCisJY2xrX2Rpc2FibGUoZGV2LT5jbGspOworCWNsa19wdXQoZGV2LT5jbGspOworCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT52ZGV2KTsKKwlpMmNfcHV0X2FkYXB0ZXIoY2xpZW50LT5hZGFwdGVyKTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCB2aXVfc3VzcGVuZChzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoJm9wLT5kZXYpOworCXN0cnVjdCB2aXVfZGV2ICpkZXYgPSBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCB2aXVfZGV2LCB2NGwyX2Rldik7CisKKwljbGtfZGlzYWJsZShkZXYtPmNsayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdml1X3Jlc3VtZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKK3sKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZvcC0+ZGV2KTsKKwlzdHJ1Y3Qgdml1X2RldiAqZGV2ID0gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3Qgdml1X2RldiwgdjRsMl9kZXYpOworCisJY2xrX2VuYWJsZShkZXYtPmNsayk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyoKKyAqIEluaXRpYWxpemF0aW9uIGFuZCBtb2R1bGUgc3R1ZmYKKyAqLworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjNTEyeF92aXVfb2ZfbWF0Y2hbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXZpdSIsCisJfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtcGM1MTJ4X3ZpdV9vZl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIHZpdV9vZl9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLnByb2JlID0gdml1X29mX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh2aXVfb2ZfcmVtb3ZlKSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCA9IHZpdV9zdXNwZW5kLAorCS5yZXN1bWUgPSB2aXVfcmVzdW1lLAorI2VuZGlmCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBEUlZfTkFNRSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9IG1wYzUxMnhfdml1X29mX21hdGNoLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCB2aXVfaW5pdCh2b2lkKQoreworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnZpdV9vZl9wbGF0Zm9ybV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdml1X2V4aXQodm9pZCkKK3sKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmdml1X29mX3BsYXRmb3JtX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHZpdV9pbml0KTsKK21vZHVsZV9leGl0KHZpdV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJGcmVlc2NhbGUgVmlkZW8tSW4oVklVKSIpOworTU9EVUxFX0FVVEhPUigiSG9uZ2p1biBDaGVuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL0tjb25maWcKaW5kZXggNWQ5MjBlNS4uMjNkYjBjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvS2NvbmZpZwpAQCAtMjQ2LDYgKzI0NiwxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2Ffc3BjYTU2MS4KIAorY29uZmlnIFVTQl9HU1BDQV9TUENBMTUyOAorCXRyaXN0YXRlICJTUENBMTUyOCBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBTUENBMTUyOCBjaGlwLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9zcGNhMTUyOC4KKwogY29uZmlnIFVTQl9HU1BDQV9TUTkwNQogCXRyaXN0YXRlICJTUSBUZWNobm9sb2dpZXMgU1E5MDUgYmFzZWQgVVNCIENhbWVyYSBEcml2ZXIiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQpAQCAtMjY0LDYgKzI3MywxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2Ffc3E5MDVjLgogCitjb25maWcgVVNCX0dTUENBX1NROTMwWAorCXRyaXN0YXRlICJTUSBUZWNobm9sb2dpZXMgU1E5MzBYIGJhc2VkIFVTQiBDYW1lcmEgRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIFNROTMwWCBjaGlwLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9zcTkzMHguCisKIGNvbmZpZyBVU0JfR1NQQ0FfU1RLMDE0CiAJdHJpc3RhdGUgIlN5bnRlayBEVjQwMDAgKFNUSzAxNCkgVVNCIENhbWVyYSBEcml2ZXIiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvTWFrZWZpbGUKaW5kZXggNmU0Y2YxYy4uZjY2MTZkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL01ha2VmaWxlCkBAIC0yMyw4ICsyMywxMCBAQAogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TUENBNTA2KSAgKz0gZ3NwY2Ffc3BjYTUwNi5vCiBvYmotJChDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDgpICArPSBnc3BjYV9zcGNhNTA4Lm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfU1BDQTU2MSkgICs9IGdzcGNhX3NwY2E1NjEubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TUENBMTUyOCkgKz0gZ3NwY2Ffc3BjYTE1Mjgubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TUTkwNSkgICAgKz0gZ3NwY2Ffc3E5MDUubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TUTkwNUMpICAgKz0gZ3NwY2Ffc3E5MDVjLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU1E5MzBYKSAgICs9IGdzcGNhX3NxOTMweC5vCiBvYmotJChDT05GSUdfVVNCX0dTUENBX1NVTlBMVVMpICArPSBnc3BjYV9zdW5wbHVzLm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfU1RLMDE0KSAgICs9IGdzcGNhX3N0azAxNC5vCiBvYmotJChDT05GSUdfVVNCX0dTUENBX1NUVjA2ODApICArPSBnc3BjYV9zdHYwNjgwLm8KQEAgLTU4LDggKzYwLDEwIEBACiBnc3BjYV9zcGNhNTA2LW9ianMgIDo9IHNwY2E1MDYubwogZ3NwY2Ffc3BjYTUwOC1vYmpzICA6PSBzcGNhNTA4Lm8KIGdzcGNhX3NwY2E1NjEtb2JqcyAgOj0gc3BjYTU2MS5vCitnc3BjYV9zcGNhMTUyOC1vYmpzIDo9IHNwY2ExNTI4Lm8KIGdzcGNhX3NxOTA1LW9ianMgICAgOj0gc3E5MDUubwogZ3NwY2Ffc3E5MDVjLW9ianMgICA6PSBzcTkwNWMubworZ3NwY2Ffc3E5MzB4LW9ianMgICA6PSBzcTkzMHgubwogZ3NwY2Ffc3RrMDE0LW9ianMgICA6PSBzdGswMTQubwogZ3NwY2Ffc3R2MDY4MC1vYmpzICA6PSBzdHYwNjgwLm8KIGdzcGNhX3N1bnBsdXMtb2JqcyAgOj0gc3VucGx1cy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvbmV4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvbmV4LmMKaW5kZXggMTlmZTZiMi4uZDZhNzU3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb25leC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29uZXguYwpAQCAtNDEsNyArNDEsNyBAQAogI2RlZmluZSBRVUFMSVRZX01BWCA2MAogI2RlZmluZSBRVUFMSVRZX0RFRiA0MAogCi0JdTggKmpwZWdfaGRyOworCXU4IGpwZWdfaGRyW0pQRUdfSERSX1NaXTsKIH07CiAKIC8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KQEAgLTg0NSw5ICs4NDUsNiBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCS8qIGNyZWF0ZSB0aGUgSlBFRyBoZWFkZXIgKi8KLQlzZC0+anBlZ19oZHIgPSBrbWFsbG9jKEpQRUdfSERSX1NaLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNkLT5qcGVnX2hkcikKLQkJcmV0dXJuIC1FTk9NRU07CiAJanBlZ19kZWZpbmUoc2QtPmpwZWdfaGRyLCBnc3BjYV9kZXYtPmhlaWdodCwgZ3NwY2FfZGV2LT53aWR0aCwKIAkJCTB4MjIpOwkJLyogSlBFRyA0MTEgKi8KIAlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOwpAQCAtODYyLDExICs4NTksOCBAQAogLyogY2FsbGVkIG9uIHN0cmVhbW9mZiB3aXRoIGFsdCAwIGFuZCBvbiBkaXNjb25uZWN0ICovCiBzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCByZXRyeSA9IDUwOwogCi0Ja2ZyZWUoc2QtPmpwZWdfaGRyKTsKLQogCWlmICghZ3NwY2FfZGV2LT5wcmVzZW50KQogCQlyZXR1cm47CiAJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHgwMDAwLCAweDAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY3BpYTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY3BpYTEuYwppbmRleCA1OGI2OTZmLi4zNzQ3YTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NwaWExLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jcGlhMS5jCkBAIC0xNzYwLDIyICsxNzYwLDE5IEBACiAJICAgIGRhdGFbMjVdID09IHNkLT5wYXJhbXMucm9pLmNvbEVuZCAmJgogCSAgICBkYXRhWzI2XSA9PSBzZC0+cGFyYW1zLnJvaS5yb3dTdGFydCAmJgogCSAgICBkYXRhWzI3XSA9PSBzZC0+cGFyYW1zLnJvaS5yb3dFbmQpIHsKLQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSA9IGdzcGNhX2dldF9pX2ZyYW1lKGdzcGNhX2Rldik7CisJCXU4ICppbWFnZTsKIAogCQlhdG9taWNfc2V0KCZzZC0+Y2FtX2V4cG9zdXJlLCBkYXRhWzM5XSAqIDIpOwogCQlhdG9taWNfc2V0KCZzZC0+ZnBzLCBkYXRhWzQxXSk7CiAKLQkJaWYgKGZyYW1lID09IE5VTEwpIHsKLQkJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOwotCQkJcmV0dXJuOwotCQl9Ci0KIAkJLyogQ2hlY2sgZm9yIHByb3BlciBFT0YgZm9yIGxhc3QgZnJhbWUgKi8KLQkJaWYgKChmcmFtZS0+ZGF0YV9lbmQgLSBmcmFtZS0+ZGF0YSkgPiA0ICYmCi0JCSAgICBmcmFtZS0+ZGF0YV9lbmRbLTRdID09IDB4ZmYgJiYKLQkJICAgIGZyYW1lLT5kYXRhX2VuZFstM10gPT0gMHhmZiAmJgotCQkgICAgZnJhbWUtPmRhdGFfZW5kWy0yXSA9PSAweGZmICYmCi0JCSAgICBmcmFtZS0+ZGF0YV9lbmRbLTFdID09IDB4ZmYpCisJCWltYWdlID0gZ3NwY2FfZGV2LT5pbWFnZTsKKwkJaWYgKGltYWdlICE9IE5VTEwgJiYKKwkJICAgIGdzcGNhX2Rldi0+aW1hZ2VfbGVuID4gNCAmJgorCQkgICAgaW1hZ2VbZ3NwY2FfZGV2LT5pbWFnZV9sZW4gLSA0XSA9PSAweGZmICYmCisJCSAgICBpbWFnZVtnc3BjYV9kZXYtPmltYWdlX2xlbiAtIDNdID09IDB4ZmYgJiYKKwkJICAgIGltYWdlW2dzcGNhX2Rldi0+aW1hZ2VfbGVuIC0gMl0gPT0gMHhmZiAmJgorCQkgICAgaW1hZ2VbZ3NwY2FfZGV2LT5pbWFnZV9sZW4gLSAxXSA9PSAweGZmKQogCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCiAJCQkJCQlOVUxMLCAwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC1taTIwMjAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAtbWkyMDIwLmMKaW5kZXggN2MzMWI0Zi4uNTc3ODJlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC1taTIwMjAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLW1pMjAyMC5jCkBAIC0xLDYgKzEsNyBAQAogLyogU3ViZHJpdmVyIGZvciB0aGUgR0w4NjAgY2hpcCB3aXRoIHRoZSBNSTIwMjAgc2Vuc29yCi0gKiBBdXRob3IgT2xpdmllciBMT1JJTiwgZnJvbSBJY2UvU29ybzIwMDUncyBsb2dzKEEpLCBGcmV0X3Nhdy9IdWxraWUncwotICogbG9ncyhCKSBhbmQgVHJpY2lkInMgbG9ncyhDKS4gV2l0aCB0aGUgaGVscCBvZiBLeXRyaXgvQlVHYWJ1bmRvL0JsYXplcmNpc3QuCisgKiBBdXRob3IgT2xpdmllciBMT1JJTiwgZnJvbSBsb2dzIGJ5IEljZW1hbi9Tb3JvMjAwNSArIEZyZXRfc2F3L0h1bGtpZS9UcmljaWQKKyAqIHdpdGggdGhlIGhlbHAgb2YgS3l0cml4L0JVR2FidW5kby9CbGF6ZXJjaXN0LgorICogRHJpdmVyIGFjaGlldmVkIHRoYW5rcyB0byBhIHdlYmNhbSBnaWZ0IGJ5IEt5dHJpeC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIwLDQ3ICsyMSw3MCBAQAogCiAjaW5jbHVkZSAiZ2w4NjAuaCIKIAorc3RhdGljIHU4IGRhdF93YmFsMVtdID0gezB4OGMsIDB4YTIsIDB4MGN9OworCiBzdGF0aWMgdTggZGF0X2JyaWdodDFbXSA9IHsweDhjLCAweGEyLCAweDA2fTsKIHN0YXRpYyB1OCBkYXRfYnJpZ2h0M1tdID0gezB4OGMsIDB4YTEsIDB4MDJ9Owogc3RhdGljIHU4IGRhdF9icmlnaHQ0W10gPSB7MHg5MCwgMHgwMCwgMHgwZn07CiBzdGF0aWMgdTggZGF0X2JyaWdodDVbXSA9IHsweDhjLCAweGExLCAweDAzfTsKIHN0YXRpYyB1OCBkYXRfYnJpZ2h0NltdID0gezB4OTAsIDB4MDAsIDB4MDV9OwogCi1zdGF0aWMgdTggZGF0X2R1bW15MVtdID0gezB4OTAsIDB4MDAsIDB4MDZ9OwotLypzdGF0aWMgdTggZHVtbXkyW10gPSB7MHg4YywgMHhhMSwgMHgwMn07Ki8KLS8qc3RhdGljIHU4IGR1bW15M1tdID0gezB4OTAsIDB4MDAsIDB4MWZ9OyovCi0KIHN0YXRpYyB1OCBkYXRfaHZmbGlwMVtdID0gezB4OGMsIDB4MjcsIDB4MTl9Owogc3RhdGljIHU4IGRhdF9odmZsaXAzW10gPSB7MHg4YywgMHgyNywgMHgzYn07CiBzdGF0aWMgdTggZGF0X2h2ZmxpcDVbXSA9IHsweDhjLCAweGExLCAweDAzfTsKIHN0YXRpYyB1OCBkYXRfaHZmbGlwNltdID0gezB4OTAsIDB4MDAsIDB4MDZ9OwogCitzdGF0aWMgc3RydWN0IGlkeGRhdGEgdGJsX21pZGRsZV9odmZsaXBfbG93W10gPSB7CisJezB4MzMsICJceDkwXHgwMFx4MDYifSwKKwl7NiwgIlx4ZmZceGZmXHhmZiJ9LAorCXsweDMzLCAiXHg5MFx4MDBceDA2In0sCisJezYsICJceGZmXHhmZlx4ZmYifSwKKwl7MHgzMywgIlx4OTBceDAwXHgwNiJ9LAorCXs2LCAiXHhmZlx4ZmZceGZmIn0sCisJezB4MzMsICJceDkwXHgwMFx4MDYifSwKKwl7NiwgIlx4ZmZceGZmXHhmZiJ9LAorfTsKKworc3RhdGljIHN0cnVjdCBpZHhkYXRhIHRibF9taWRkbGVfaHZmbGlwX2JpZ1tdID0geworCXsweDMzLCAiXHg4Y1x4YTFceDAzIn0sIHsweDMzLCAiXHg5MFx4MDBceDAxIn0sIHsweDMzLCAiXHg4Y1x4YTFceDIwIn0sCisJezB4MzMsICJceDkwXHgwMFx4MDAifSwgezB4MzMsICJceDhjXHhhN1x4MDIifSwgezB4MzMsICJceDkwXHgwMFx4MDAifSwKKwl7MTAyLCAiXHhmZlx4ZmZceGZmIn0sCisJezB4MzMsICJceDhjXHhhMVx4MDMifSwgezB4MzMsICJceDkwXHgwMFx4MDIifSwgezB4MzMsICJceDhjXHhhMVx4MjAifSwKKwl7MHgzMywgIlx4OTBceDAwXHg3MiJ9LCB7MHgzMywgIlx4OGNceGE3XHgwMiJ9LCB7MHgzMywgIlx4OTBceDAwXHgwMSJ9LAorfTsKKworc3RhdGljIHN0cnVjdCBpZHhkYXRhIHRibF9lbmRfaHZmbGlwW10gPSB7CisJezB4MzMsICJceDhjXHhhMVx4MDIifSwgezB4MzMsICJceDkwXHgwMFx4MWYifSwKKwl7NiwgIlx4ZmZceGZmXHhmZiJ9LAorCXsweDMzLCAiXHg4Y1x4YTFceDAyIn0sIHsweDMzLCAiXHg5MFx4MDBceDFmIn0sCisJezYsICJceGZmXHhmZlx4ZmYifSwKKwl7MHgzMywgIlx4OGNceGExXHgwMiJ9LCB7MHgzMywgIlx4OTBceDAwXHgxZiJ9LAorCXs2LCAiXHhmZlx4ZmZceGZmIn0sCisJezB4MzMsICJceDhjXHhhMVx4MDIifSwgezB4MzMsICJceDkwXHgwMFx4MWYifSwKK307CisKIHN0YXRpYyB1OCBkYXRfZnJlcTFbXSA9IHsgMHg4YywgMHhhNCwgMHgwNCB9OwogCiBzdGF0aWMgdTggZGF0X211bHRpNVtdID0geyAweDhjLCAweGExLCAweDAzIH07CiBzdGF0aWMgdTggZGF0X211bHRpNltdID0geyAweDkwLCAweDAwLCAweDA1IH07CiAKLXN0YXRpYyBzdHJ1Y3QgdmFsaWR4IHRibF9jb21tb24xW10gPSB7Ci0JezB4MDAwMCwgMHgwMDAwfSwKLQl7MSwgMHhmZmZmfSwgLyogbXNsZWVwKDM1KTsgKi8KLQl7MHgwMDZhLCAweDAwMDd9LCB7MHgwMDYzLCAweDAwMDZ9LCB7MHgwMDZhLCAweDAwMGR9LCB7MHgwMDAwLCAweDAwYzB9LAotCXsweDAwMTAsIDB4MDAxMH0sIHsweDAwMDMsIDB4MDBjMX0sIHsweDAwNDIsIDB4MDBjMn0sIHsweDAwMDQsIDB4MDBkOH0sCi0JezB4MDAwMCwgMHgwMDU4fSwgezB4MDAwMiwgMHgwMDA0fSwgezB4MDA0MSwgMHgwMDAwfSwKK3N0YXRpYyBzdHJ1Y3QgdmFsaWR4IHRibF9pbml0X2F0X3N0YXJ0dXBbXSA9IHsKKwl7MHgwMDAwLCAweDAwMDB9LCB7MHgwMDEwLCAweDAwMTB9LCB7MHgwMDA4LCAweDAwYzB9LCB7MHgwMDAxLDB4MDBjMX0sCisJezB4MDAwMSwgMHgwMGMyfSwgezB4MDAyMCwgMHgwMDA2fSwgezB4MDA2YSwgMHgwMDBkfSwKKwl7NTMsIDB4ZmZmZn0sCisJezB4MDA0MCwgMHgwMDAwfSwgezB4MDA2MywgMHgwMDA2fSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdmFsaWR4IHRibF9jb21tb24yW10gPSB7Ci0JezB4MDA2YSwgMHgwMDA3fSwKLQl7MzUsIDB4ZmZmZn0sCi0JezB4MDBlZiwgMHgwMDA2fSwKLQl7MzUsIDB4ZmZmZn0sCi0JezB4MDA2YSwgMHgwMDBkfSwKLQl7MzUsIDB4ZmZmZn0sCi0JezB4MDAwMCwgMHgwMGMwfSwgezB4MDAxMCwgMHgwMDEwfSwgezB4MDAwMywgMHgwMGMxfSwgezB4MDA0MiwgMHgwMGMyfSwKK3N0YXRpYyBzdHJ1Y3QgdmFsaWR4IHRibF9jb21tb25fMEJbXSA9IHsKKwl7MHgwMDAyLCAweDAwMDR9LCB7MHgwMDZhLCAweDAwMDd9LCB7MHgwMGVmLCAweDAwMDZ9LCB7MHgwMDZhLDB4MDAwZH0sCisJezB4MDAwMCwgMHgwMGMwfSwgezB4MDAxMCwgMHgwMDEwfSwgezB4MDAwMywgMHgwMGMxfSwgezB4MDA0MiwweDAwYzJ9LAogCXsweDAwMDQsIDB4MDBkOH0sIHsweDAwMDAsIDB4MDA1OH0sIHsweDAwNDEsIDB4MDAwMH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGlkeGRhdGEgdGJsX2NvbW1vbjNbXSA9IHsKLQl7MHgzMiwgIlx4MDJceDAwXHgwOCJ9LCB7MHgzMywgIlx4ZjRceDAzXHgxZCJ9LAorc3RhdGljIHN0cnVjdCBpZHhkYXRhIHRibF9jb21tb25fM0JbXSA9IHsKKwl7MHgzMywgIlx4ODZceDI1XHgwMSJ9LCB7MHgzMywgIlx4ODZceDI1XHgwMCJ9LAorCXsyLCAiXHhmZlx4ZmZceGZmIn0sCisJezB4MzAsICJceDFhXHgwYVx4Y2MifSwgezB4MzIsICJceDAyXHgwMFx4MDgifSwgezB4MzMsICJceGY0XHgwM1x4MWQifSwKIAl7NiwgIlx4ZmZceGZmXHhmZiJ9LCAvKiAxMiAqLwogCXsweDM0LCAiXHgxZVx4OGZceDA5In0sIHsweDM0LCAiXHgxY1x4MDFceDI4In0sIHsweDM0LCAiXHgxZVx4OGZceDA5In0sCiAJezIsICJceGZmXHhmZlx4ZmYifSwgLyogLSAqLwpAQCAtOTgsODUgKzEyMiw1OCBAQAogCXsweDM1LCAiXHg1MFx4MDBceDA2In0sIHsweDM1LCAiXHg0OFx4MDdceGZmIn0sIHsweDM1LCAiXHg2MFx4MDVceDg5In0sCiAJezB4MzUsICJceDU4XHgwN1x4ZmYifSwgezB4MzUsICJceDQwXHgwMFx4YTAifSwgezB4MzUsICJceDQyXHgwMFx4MDAifSwKIAl7MHgzMiwgIlx4MTBceDAxXHhmYyJ9LCB7MHgzMywgIlx4OGNceGExXHgxOCJ9LCB7MHgzMywgIlx4OTBceDAwXHgzYyJ9LAotCXsxLCAiXHhmZlx4ZmZceGZmIn0sCiAJezB4MzMsICJceDc4XHgwMFx4MDAifSwKLQl7MSwgIlx4ZmZceGZmXHhmZiJ9LAorCXsyLCAiXHhmZlx4ZmZceGZmIn0sCiAJezB4MzUsICJceGI4XHgxZlx4MjAifSwgezB4MzMsICJceDhjXHhhMlx4MDYifSwgezB4MzMsICJceDkwXHgwMFx4MTAifSwKIAl7MHgzMywgIlx4OGNceGEyXHgwNyJ9LCB7MHgzMywgIlx4OTBceDAwXHgwOCJ9LCB7MHgzMywgIlx4OGNceGEyXHg0MiJ9LAogCXsweDMzLCAiXHg5MFx4MDBceDBiIn0sIHsweDMzLCAiXHg4Y1x4YTJceDRhIn0sIHsweDMzLCAiXHg5MFx4MDBceDhjIn0sCiAJezB4MzUsICJceGJhXHhmYVx4MDgifSwgezB4MzMsICJceDhjXHhhMlx4MDIifSwgezB4MzMsICJceDkwXHgwMFx4MjIifSwKLQl7MHgzMywgIlx4OGNceGEyXHgwMyJ9LCB7MHgzMywgIlx4OTBceDAwXHhiYiJ9LAotfTsKLQotc3RhdGljIHN0cnVjdCBpZHhkYXRhIHRibF9jb21tb240W10gPSB7Ci0JezB4MzMsICJceDhjXHgyMlx4MmUifSwgezB4MzMsICJceDkwXHgwMFx4YTAifSwgezB4MzMsICJceDhjXHhhNFx4MDgifSwKKwl7MHgzMywgIlx4OGNceGEyXHgwMyJ9LCB7MHgzMywgIlx4OTBceDAwXHhiYiJ9LCB7MHgzMywgIlx4OGNceGE0XHgwNCJ9LAorCXsweDMzLCAiXHg5MFx4MDBceDgwIn0sIHsweDMzLCAiXHg4Y1x4YTdceDlkIn0sIHsweDMzLCAiXHg5MFx4MDBceDAwIn0sCisJezB4MzMsICJceDhjXHhhN1x4OWUifSwgezB4MzMsICJceDkwXHgwMFx4MDAifSwgezB4MzMsICJceDhjXHhhMlx4MGMifSwKKwl7MHgzMywgIlx4OTBceDAwXHgxNyJ9LCB7MHgzMywgIlx4OGNceGEyXHgxNSJ9LCB7MHgzMywgIlx4OTBceDAwXHgwNCJ9LAorCXsweDMzLCAiXHg4Y1x4YTJceDE0In0sIHsweDMzLCAiXHg5MFx4MDBceDIwIn0sIHsweDMzLCAiXHg4Y1x4YTFceDAzIn0sCisJezB4MzMsICJceDkwXHgwMFx4MDAifSwgezB4MzMsICJceDhjXHgyN1x4MTcifSwgezB4MzMsICJceDkwXHgyMVx4MTEifSwKKwl7MHgzMywgIlx4OGNceDI3XHgxYiJ9LCB7MHgzMywgIlx4OTBceDAyXHg0ZiJ9LCB7MHgzMywgIlx4OGNceDI3XHgyNSJ9LAorCXsweDMzLCAiXHg5MFx4MDZceDBmIn0sIHsweDMzLCAiXHg4Y1x4MjdceDM5In0sIHsweDMzLCAiXHg5MFx4MjFceDExIn0sCisJezB4MzMsICJceDhjXHgyN1x4M2QifSwgezB4MzMsICJceDkwXHgwMVx4MjAifSwgezB4MzMsICJceDhjXHgyN1x4NDcifSwKKwl7MHgzMywgIlx4OTBceDA5XHg0YyJ9LCB7MHgzMywgIlx4OGNceDI3XHgwMyJ9LCB7MHgzMywgIlx4OTBceDAyXHg4NCJ9LAorCXsweDMzLCAiXHg4Y1x4MjdceDA1In0sIHsweDMzLCAiXHg5MFx4MDFceGUyIn0sIHsweDMzLCAiXHg4Y1x4MjdceDA3In0sCisJezB4MzMsICJceDkwXHgwNlx4NDAifSwgezB4MzMsICJceDhjXHgyN1x4MDkifSwgezB4MzMsICJceDkwXHgwNFx4YjAifSwKKwl7MHgzMywgIlx4OGNceDI3XHgwZCJ9LCB7MHgzMywgIlx4OTBceDAwXHgwMCJ9LCB7MHgzMywgIlx4OGNceDI3XHgwZiJ9LAorCXsweDMzLCAiXHg5MFx4MDBceDAwIn0sIHsweDMzLCAiXHg4Y1x4MjdceDExIn0sIHsweDMzLCAiXHg5MFx4MDRceGJkIn0sCisJezB4MzMsICJceDhjXHgyN1x4MTMifSwgezB4MzMsICJceDkwXHgwNlx4NGQifSwgezB4MzMsICJceDhjXHgyN1x4MTUifSwKKwl7MHgzMywgIlx4OTBceDAwXHgwMCJ9LCB7MHgzMywgIlx4OGNceDI3XHgxNyJ9LCB7MHgzMywgIlx4OTBceDIxXHgxMSJ9LAorCXsweDMzLCAiXHg4Y1x4MjdceDE5In0sIHsweDMzLCAiXHg5MFx4MDRceDZjIn0sIHsweDMzLCAiXHg4Y1x4MjdceDFiIn0sCisJezB4MzMsICJceDkwXHgwMlx4NGYifSwgezB4MzMsICJceDhjXHgyN1x4MWQifSwgezB4MzMsICJceDkwXHgwMVx4MDIifSwKKwl7MHgzMywgIlx4OGNceDI3XHgxZiJ9LCB7MHgzMywgIlx4OTBceDAyXHg3OSJ9LCB7MHgzMywgIlx4OGNceDI3XHgyMSJ9LAorCXsweDMzLCAiXHg5MFx4MDFceDU1In0sIHsweDMzLCAiXHg4Y1x4MjdceDIzIn0sIHsweDMzLCAiXHg5MFx4MDJceDg1In0sCisJezB4MzMsICJceDhjXHgyN1x4MjUifSwgezB4MzMsICJceDkwXHgwNlx4MGYifSwgezB4MzMsICJceDhjXHgyN1x4MjcifSwKKwl7MHgzMywgIlx4OTBceDIwXHgyMCJ9LCB7MHgzMywgIlx4OGNceDI3XHgyOSJ9LCB7MHgzMywgIlx4OTBceDIwXHgyMCJ9LAorCXsweDMzLCAiXHg4Y1x4MjdceDJiIn0sIHsweDMzLCAiXHg5MFx4MTBceDIwIn0sIHsweDMzLCAiXHg4Y1x4MjdceDJkIn0sCisJezB4MzMsICJceDkwXHgyMFx4MDcifSwgezB4MzMsICJceDhjXHgyN1x4MmYifSwgezB4MzMsICJceDkwXHgwMFx4MDQifSwKKwl7MHgzMywgIlx4OGNceDI3XHgzMSJ9LCB7MHgzMywgIlx4OTBceDAwXHgwNCJ9LCB7MHgzMywgIlx4OGNceDI3XHgzMyJ9LAorCXsweDMzLCAiXHg5MFx4MDRceGJiIn0sIHsweDMzLCAiXHg4Y1x4MjdceDM1In0sIHsweDMzLCAiXHg5MFx4MDZceDRiIn0sCisJezB4MzMsICJceDhjXHgyN1x4MzcifSwgezB4MzMsICJceDkwXHgwMFx4MDAifSwgezB4MzMsICJceDhjXHgyN1x4MzkifSwKKwl7MHgzMywgIlx4OTBceDIxXHgxMSJ9LCB7MHgzMywgIlx4OGNceDI3XHgzYiJ9LCB7MHgzMywgIlx4OTBceDAwXHgyNCJ9LAorCXsweDMzLCAiXHg4Y1x4MjdceDNkIn0sIHsweDMzLCAiXHg5MFx4MDFceDIwIn0sIHsweDMzLCAiXHg4Y1x4MjdceDQxIn0sCisJezB4MzMsICJceDkwXHgwMVx4NjkifSwgezB4MzMsICJceDhjXHgyN1x4NDUifSwgezB4MzMsICJceDkwXHgwNFx4ZWQifSwKKwl7MHgzMywgIlx4OGNceDI3XHg0NyJ9LCB7MHgzMywgIlx4OTBceDA5XHg0YyJ9LCB7MHgzMywgIlx4OGNceDI3XHg1MSJ9LAorCXsweDMzLCAiXHg5MFx4MDBceDAwIn0sIHsweDMzLCAiXHg4Y1x4MjdceDUzIn0sIHsweDMzLCAiXHg5MFx4MDNceDIwIn0sCisJezB4MzMsICJceDhjXHgyN1x4NTUifSwgezB4MzMsICJceDkwXHgwMFx4MDAifSwgezB4MzMsICJceDhjXHgyN1x4NTcifSwKKwl7MHgzMywgIlx4OTBceDAyXHg1OCJ9LCB7MHgzMywgIlx4OGNceDI3XHg1ZiJ9LCB7MHgzMywgIlx4OTBceDAwXHgwMCJ9LAorCXsweDMzLCAiXHg4Y1x4MjdceDYxIn0sIHsweDMzLCAiXHg5MFx4MDZceDQwIn0sIHsweDMzLCAiXHg4Y1x4MjdceDYzIn0sCisJezB4MzMsICJceDkwXHgwMFx4MDAifSwgezB4MzMsICJceDhjXHgyN1x4NjUifSwgezB4MzMsICJceDkwXHgwNFx4YjAifSwKKwl7MHgzMywgIlx4OGNceDIyXHgyZSJ9LCB7MHgzMywgIlx4OTBceDAwXHhhMSJ9LCB7MHgzMywgIlx4OGNceGE0XHgwOCJ9LAogCXsweDMzLCAiXHg5MFx4MDBceDFmIn0sIHsweDMzLCAiXHg4Y1x4YTRceDA5In0sIHsweDMzLCAiXHg5MFx4MDBceDIxIn0sCiAJezB4MzMsICJceDhjXHhhNFx4MGEifSwgezB4MzMsICJceDkwXHgwMFx4MjUifSwgezB4MzMsICJceDhjXHhhNFx4MGIifSwKLQl7MHgzMywgIlx4OTBceDAwXHgyNyJ9LCB7MHgzMywgIlx4OGNceDI0XHgxMSJ9LCB7MHgzMywgIlx4OTBceDAwXHhhMCJ9LAotCXsweDMzLCAiXHg4Y1x4MjRceDEzIn0sIHsweDMzLCAiXHg5MFx4MDBceGMwIn0sIHsweDMzLCAiXHg4Y1x4MjRceDE1In0sCi0JezB4MzMsICJceDkwXHgwMFx4YTAifSwgezB4MzMsICJceDhjXHgyNFx4MTcifSwgezB4MzMsICJceDkwXHgwMFx4YzAifSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaWR4ZGF0YSB0YmxfY29tbW9uNVtdID0gewotCXsweDMzLCAiXHg4Y1x4YTRceDA0In0sIHsweDMzLCAiXHg5MFx4MDBceDgwIn0sIHsweDMzLCAiXHg4Y1x4YTdceDlkIn0sCi0JezB4MzMsICJceDkwXHgwMFx4MDAifSwgezB4MzMsICJceDhjXHhhN1x4OWUifSwgezB4MzMsICJceDkwXHgwMFx4MDAifSwKLQl7MHgzMywgIlx4OGNceGEyXHgwYyJ9LCB7MHgzMywgIlx4OTBceDAwXHgxNyJ9LCB7MHgzMywgIlx4OGNceGEyXHgxNSJ9LAotCXsweDMzLCAiXHg5MFx4MDBceDA0In0sIHsweDMzLCAiXHg4Y1x4YTJceDE0In0sIHsweDMzLCAiXHg5MFx4MDBceDIwIn0sCi0JezB4MzMsICJceDhjXHhhMVx4MDMifSwgezB4MzMsICJceDkwXHgwMFx4MDAifSwgezB4MzMsICJceDhjXHgyN1x4MTcifSwKLQkvKiBtc2xlZXAoNTMpOyAqLwotCXsweDMzLCAiXHg5MFx4MjFceDExIn0sIHsweDMzLCAiXHg4Y1x4MjdceDFiIn0sIHsweDMzLCAiXHg5MFx4MDJceDRmIn0sCi0JezB4MzMsICJceDhjXHgyN1x4MjUifSwgezB4MzMsICJceDkwXHgwNlx4MGYifSwgezB4MzMsICJceDhjXHgyN1x4MzkifSwKLQl7MHgzMywgIlx4OTBceDIxXHgxMSJ9LCB7MHgzMywgIlx4OGNceDI3XHgzZCJ9LCB7MHgzMywgIlx4OTBceDAxXHgyMCJ9LAotCXsweDMzLCAiXHg4Y1x4MjdceDQ3In0sIHsweDMzLCAiXHg5MFx4MDlceDRjIn0sIHsweDMzLCAiXHg4Y1x4MjdceDAzIn0sCi0JezB4MzMsICJceDkwXHgwMlx4ODQifSwgezB4MzMsICJceDhjXHgyN1x4MDUifSwgezB4MzMsICJceDkwXHgwMVx4ZTIifSwKLQl7MHgzMywgIlx4OGNceDI3XHgwNyJ9LCB7MHgzMywgIlx4OTBceDA2XHg0MCJ9LCB7MHgzMywgIlx4OGNceDI3XHgwOSJ9LAotCXsweDMzLCAiXHg5MFx4MDRceGIwIn0sIHsweDMzLCAiXHg4Y1x4MjdceDBkIn0sIHsweDMzLCAiXHg5MFx4MDBceDAwIn0sCi0JezB4MzMsICJceDhjXHgyN1x4MGYifSwgezB4MzMsICJceDkwXHgwMFx4MDAifSwgezB4MzMsICJceDhjXHgyN1x4MTEifSwKLQl7MHgzMywgIlx4OTBceDA0XHhiZCJ9LCB7MHgzMywgIlx4OGNceDI3XHgxMyJ9LCB7MHgzMywgIlx4OTBceDA2XHg0ZCJ9LAotCXsweDMzLCAiXHg4Y1x4MjdceDE1In0sIHsweDMzLCAiXHg5MFx4MDBceDAwIn0sIHsweDMzLCAiXHg4Y1x4MjdceDE3In0sCi0JezB4MzMsICJceDkwXHgyMVx4MTEifSwgezB4MzMsICJceDhjXHgyN1x4MTkifSwgezB4MzMsICJceDkwXHgwNFx4NmMifSwKLQl7MHgzMywgIlx4OGNceDI3XHgxYiJ9LCB7MHgzMywgIlx4OTBceDAyXHg0ZiJ9LCB7MHgzMywgIlx4OGNceDI3XHgxZCJ9LAotCXsweDMzLCAiXHg5MFx4MDFceDAyIn0sIHsweDMzLCAiXHg4Y1x4MjdceDFmIn0sIHsweDMzLCAiXHg5MFx4MDJceDc5In0sCi0JezB4MzMsICJceDhjXHgyN1x4MjEifSwgezB4MzMsICJceDkwXHgwMVx4NTUifSwgezB4MzMsICJceDhjXHgyN1x4MjMifSwKLQl7MHgzMywgIlx4OTBceDAyXHg4NSJ9LCB7MHgzMywgIlx4OGNceDI3XHgyNSJ9LCB7MHgzMywgIlx4OTBceDA2XHgwZiJ9LAotCXsweDMzLCAiXHg4Y1x4MjdceDI3In0sIHsweDMzLCAiXHg5MFx4MjBceDIwIn0sIHsweDMzLCAiXHg4Y1x4MjdceDI5In0sCi0JezB4MzMsICJceDkwXHgyMFx4MjAifSwgezB4MzMsICJceDhjXHgyN1x4MmIifSwgezB4MzMsICJceDkwXHgxMFx4MjAifSwKLQl7MHgzMywgIlx4OGNceDI3XHgyZCJ9LCB7MHgzMywgIlx4OTBceDIwXHgwNyJ9LCB7MHgzMywgIlx4OGNceDI3XHgyZiJ9LAotCXsweDMzLCAiXHg5MFx4MDBceDA0In0sIHsweDMzLCAiXHg4Y1x4MjdceDMxIn0sIHsweDMzLCAiXHg5MFx4MDBceDA0In0sCi0JezB4MzMsICJceDhjXHgyN1x4MzMifSwgezB4MzMsICJceDkwXHgwNFx4YmIifSwgezB4MzMsICJceDhjXHgyN1x4MzUifSwKLQl7MHgzMywgIlx4OTBceDA2XHg0YiJ9LCB7MHgzMywgIlx4OGNceDI3XHgzNyJ9LCB7MHgzMywgIlx4OTBceDAwXHgwMCJ9LAotCXsweDMzLCAiXHg4Y1x4MjdceDM5In0sIHsweDMzLCAiXHg5MFx4MjFceDExIn0sIHsweDMzLCAiXHg4Y1x4MjdceDNiIn0sCi0JezB4MzMsICJceDkwXHgwMFx4MjQifSwgezB4MzMsICJceDhjXHgyN1x4M2QifSwgezB4MzMsICJceDkwXHgwMVx4MjAifSwKLQl7MHgzMywgIlx4OGNceDI3XHg0MSJ9LCB7MHgzMywgIlx4OTBceDAxXHg2OSJ9LCB7MHgzMywgIlx4OGNceDI3XHg0NSJ9LAotCXsweDMzLCAiXHg5MFx4MDRceGVkIn0sIHsweDMzLCAiXHg4Y1x4MjdceDQ3In0sIHsweDMzLCAiXHg5MFx4MDlceDRjIn0sCi0JezB4MzMsICJceDhjXHgyN1x4NTEifSwgezB4MzMsICJceDkwXHgwMFx4MDAifSwgezB4MzMsICJceDhjXHgyN1x4NTMifSwKLQl7MHgzMywgIlx4OTBceDAzXHgyMCJ9LCB7MHgzMywgIlx4OGNceDI3XHg1NSJ9LCB7MHgzMywgIlx4OTBceDAwXHgwMCJ9LAotCXsweDMzLCAiXHg4Y1x4MjdceDU3In0sIHsweDMzLCAiXHg5MFx4MDJceDU4In0sIHsweDMzLCAiXHg4Y1x4MjdceDVmIn0sCi0JezB4MzMsICJceDkwXHgwMFx4MDAifSwgezB4MzMsICJceDhjXHgyN1x4NjEifSwgezB4MzMsICJceDkwXHgwNlx4NDAifSwKLQl7MHgzMywgIlx4OGNceDI3XHg2MyJ9LCB7MHgzMywgIlx4OTBceDAwXHgwMCJ9LCB7MHgzMywgIlx4OGNceDI3XHg2NSJ9LAotCXsweDMzLCAiXHg5MFx4MDRceGIwIn0sIHsweDMzLCAiXHg4Y1x4MjJceDJlIn0sIHsweDMzLCAiXHg5MFx4MDBceGExIn0sCi0JezB4MzMsICJceDhjXHhhNFx4MDgifSwgezB4MzMsICJceDkwXHgwMFx4MWYifSwgezB4MzMsICJceDhjXHhhNFx4MDkifSwKLQl7MHgzMywgIlx4OTBceDAwXHgyMSJ9LCB7MHgzMywgIlx4OGNceGE0XHgwYSJ9LCB7MHgzMywgIlx4OTBceDAwXHgyNSJ9LAotCXsweDMzLCAiXHg4Y1x4YTRceDBiIn0sIHsweDMzLCAiXHg5MFx4MDBceDI3In0sIHsweDMzLCAiXHg4Y1x4MjRceDExIn0sCi0JezB4MzMsICJceDkwXHgwMFx4YTEifSwgezB4MzMsICJceDhjXHgyNFx4MTMifSwgezB4MzMsICJceDkwXHgwMFx4YzEifSwKLQl7MHgzMywgIlx4OGNceDI0XHgxNSJ9LAotfTsKLQotc3RhdGljIHN0cnVjdCB2YWxpZHggdGJsX2luaXRfYXRfc3RhcnR1cFtdID0gewotCXsweDAwMDAsIDB4MDAwMH0sCi0JezUzLCAweGZmZmZ9LAotCXsweDAwMTAsIDB4MDAxMH0sCi0JezUzLCAweGZmZmZ9LAotCXsweDAwMDgsIDB4MDBjMH0sCi0JezUzLCAweGZmZmZ9LAotCXsweDAwMDEsIDB4MDBjMX0sCi0JezUzLCAweGZmZmZ9LAotCXsweDAwMDEsIDB4MDBjMn0sCi0JezUzLCAweGZmZmZ9LAotCXsweDAwMjAsIDB4MDAwNn0sCi0JezUzLCAweGZmZmZ9LAotCXsweDAwNmEsIDB4MDAwZH0sCi0JezUzLCAweGZmZmZ9LAorCXsweDMzLCAiXHg5MFx4MDBceDI3In0sIHsweDMzLCAiXHg4Y1x4MjRceDExIn0sIHsweDMzLCAiXHg5MFx4MDBceGExIn0sCisJezB4MzMsICJceDhjXHgyNFx4MTMifSwgezB4MzMsICJceDkwXHgwMFx4YzEifSwgezB4MzMsICJceDhjXHgyNFx4MTUifSwKKwl7MHgzMywgIlx4OTBceDAwXHg2YSJ9LCB7MHgzMywgIlx4OGNceDI0XHgxNyJ9LCB7MHgzMywgIlx4OTBceDAwXHg4MCJ9LAorCXsweDMzLCAiXHg4Y1x4YTFceDAzIn0sIHsweDMzLCAiXHg5MFx4MDBceDA1In0sCisJezIsICJceGZmXHhmZlx4ZmYifSwKKwl7MHgzMywgIlx4OGNceGExXHgwMyJ9LCB7MHgzMywgIlx4OTBceDAwXHgwNiJ9LAorCXszLCAiXHhmZlx4ZmZceGZmIn0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGlkeGRhdGEgdGJsX2luaXRfcG9zdF9hbHRfbG93MVtdID0gewpAQCAtMjA5LDcgKzIwNiw3IEBACiAJezIsICJceGZmXHhmZlx4ZmYifSwKIAl7MHgzMywgIlx4OGNceGExXHgyMCJ9LCB7MHgzMywgIlx4OTBceDAwXHgwMCJ9LCB7MHgzMywgIlx4OGNceGExXHgwMyJ9LAogCXsweDMzLCAiXHg5MFx4MDBceDAxIn0sIHsweDMzLCAiXHg4Y1x4YTdceDAyIn0sIHsweDMzLCAiXHg5MFx4MDBceDAwIn0sCi0JezIsICJceGZmXHhmZlx4ZmYifSwgLyogLSAqICovCisJezIsICJceGZmXHhmZlx4ZmYifSwKIAl7MHgzMywgIlx4OGNceGExXHgwMyJ9LCB7MHgzMywgIlx4OTBceDAwXHgwNSJ9LAogCXsyLCAiXHhmZlx4ZmZceGZmIn0sCiAJezB4MzMsICJceDhjXHhhMVx4MDMifSwgezB4MzMsICJceDkwXHgwMFx4MDYifSwKQEAgLTIxNyw2MSArMjE0LDE1IEBACiAJezB4MzMsICJceDhjXHhhMVx4MDMifSwgezB4MzMsICJceDkwXHgwMFx4MDUifSwKIAl7MiwgIlx4ZmZceGZmXHhmZiJ9LAogCXsweDMzLCAiXHg4Y1x4YTFceDAzIn0sIHsweDMzLCAiXHg5MFx4MDBceDA2In0sCi0JezEsICJceGZmXHhmZlx4ZmYifSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaWR4ZGF0YSB0YmxfaW5pdF9wb3N0X2FsdF9sb3c0W10gPSB7Ci0JezB4MzIsICJceDEwXHgwMVx4ZjgifSwgezB4MzQsICJceGNlXHgwMVx4YTgifSwgezB4MzQsICJceGQwXHg2Nlx4MzMifSwKLQl7MHgzNCwgIlx4ZDJceDMxXHg5YSJ9LCB7MHgzNCwgIlx4ZDRceDk0XHg2MyJ9LCB7MHgzNCwgIlx4ZDZceDRiXHgyNSJ9LAotCXsweDM0LCAiXHhkOFx4MjZceDcwIn0sIHsweDM0LCAiXHhkYVx4NzJceDRjIn0sIHsweDM0LCAiXHhkY1x4ZmZceDA0In0sCi0JezB4MzQsICJceGRlXHgwMVx4NWIifSwgezB4MzQsICJceGU2XHgwMVx4MTMifSwgezB4MzQsICJceGVlXHgwYlx4ZjAifSwKLQl7MHgzNCwgIlx4ZjZceDBiXHhhNCJ9LCB7MHgzNSwgIlx4MDBceGY2XHhlNyJ9LCB7MHgzNSwgIlx4MDhceDBkXHhmZCJ9LAotCXsweDM1LCAiXHgxMFx4MjVceDYzIn0sIHsweDM1LCAiXHgxOFx4MzVceDZjIn0sIHsweDM1LCAiXHgyMFx4NDJceDdlIn0sCi0JezB4MzUsICJceDI4XHgxOVx4NDQifSwgezB4MzUsICJceDMwXHgzOVx4ZDQifSwgezB4MzUsICJceDM4XHhmNVx4YTgifSwKLQl7MHgzNSwgIlx4NGNceDA3XHg5MCJ9LCB7MHgzNSwgIlx4NDRceDA3XHhiOCJ9LCB7MHgzNSwgIlx4NWNceDA2XHg4OCJ9LAotCXsweDM1LCAiXHg1NFx4MDdceGZmIn0sIHsweDM0LCAiXHhlMFx4MDFceDUyIn0sIHsweDM0LCAiXHhlOFx4MDBceGNjIn0sCi0JezB4MzQsICJceGYwXHgwZFx4ODMifSwgezB4MzQsICJceGY4XHgwY1x4YjMifSwgezB4MzUsICJceDAyXHhmZVx4YmEifSwKLQl7MHgzNSwgIlx4MGFceDA0XHhlMCJ9LCB7MHgzNSwgIlx4MTJceDFjXHg2MyJ9LCB7MHgzNSwgIlx4MWFceDJiXHg1YSJ9LAotCXsweDM1LCAiXHgyMlx4MzJceDVlIn0sIHsweDM1LCAiXHgyYVx4MGRceDI4In0sIHsweDM1LCAiXHgzMlx4MmNceDAyIn0sCi0JezB4MzUsICJceDNhXHhmNFx4ZmEifSwgezB4MzUsICJceDRlXHgwN1x4ZWYifSwgezB4MzUsICJceDQ2XHgwN1x4ODgifSwKLQl7MHgzNSwgIlx4NWVceDA3XHhjMSJ9LCB7MHgzNSwgIlx4NTZceDA0XHg2NCJ9LCB7MHgzNCwgIlx4ZTRceDAxXHgxNSJ9LAotCXsweDM0LCAiXHhlY1x4MDBceDgyIn0sIHsweDM0LCAiXHhmNFx4MGNceGNlIn0sIHsweDM0LCAiXHhmY1x4MGNceGJhIn0sCi0JezB4MzUsICJceDA2XHgxZlx4MDIifSwgezB4MzUsICJceDBlXHgwMlx4ZTMifSwgezB4MzUsICJceDE2XHgxYVx4NTAifSwKLQl7MHgzNSwgIlx4MWVceDI0XHgzOSJ9LCB7MHgzNSwgIlx4MjZceDIzXHg0YyJ9LCB7MHgzNSwgIlx4MmVceGY5XHgxYiJ9LAotCXsweDM1LCAiXHgzNlx4MjNceDE5In0sIHsweDM1LCAiXHgzZVx4MTJceDA4In0sIHsweDM1LCAiXHg1Mlx4MDdceDIyIn0sCi0JezB4MzUsICJceDRhXHgwM1x4ZDMifSwgezB4MzUsICJceDYyXHgwNlx4NTQifSwgezB4MzUsICJceDVhXHgwNFx4NWQifSwKLQl7MHgzNCwgIlx4ZTJceDAxXHgwNCJ9LCB7MHgzNCwgIlx4ZWFceDAwXHhhMCJ9LCB7MHgzNCwgIlx4ZjJceDBjXHhiYyJ9LAotCXsweDM0LCAiXHhmYVx4MGNceDViIn0sIHsweDM1LCAiXHgwNFx4MTdceGYyIn0sIHsweDM1LCAiXHgwY1x4MDJceDA4In0sCi0JezB4MzUsICJceDE0XHgyOFx4NDMifSwgezB4MzUsICJceDFjXHgyOFx4NjIifSwgezB4MzUsICJceDI0XHgyYlx4NjAifSwKLQl7MHgzNSwgIlx4MmNceDA3XHgzMyJ9LCB7MHgzNSwgIlx4MzRceDFmXHhiMCJ9LCB7MHgzNSwgIlx4M2NceGVkXHhjZCJ9LAotCXsweDM1LCAiXHg1MFx4MDBceDA2In0sIHsweDM1LCAiXHg0OFx4MDdceGZmIn0sIHsweDM1LCAiXHg2MFx4MDVceDg5In0sCi0JezB4MzUsICJceDU4XHgwN1x4ZmYifSwgezB4MzUsICJceDQwXHgwMFx4YTAifSwgezB4MzUsICJceDQyXHgwMFx4MDAifSwKLQl7MHgzMiwgIlx4MTBceDAxXHhmYyJ9LCB7MHgzMywgIlx4OGNceGExXHgxOCJ9LAotCS8qIEZsaXAvTWlycm9yIGgvdj0xICovCi0JezB4MzMsICJceDkwXHgwMFx4M2MifSwgezB4MzMsICJceDhjXHgyN1x4MTkifSwgezB4MzMsICJceDkwXHgwNFx4NmMifSwKLQl7MHgzMywgIlx4OGNceDI3XHgzYiJ9LCB7MHgzMywgIlx4OTBceDAwXHgyNCJ9LCB7MHgzMywgIlx4OGNceGExXHgwMyJ9LAotCXsweDMzLCAiXHg5MFx4MDBceDA2In0sCi0JezEzMCwgIlx4ZmZceGZmXHhmZiJ9LAotCXsweDMzLCAiXHg5MFx4MDBceDA2In0sIHsweDMzLCAiXHg5MFx4MDBceDA2In0sIHsweDMzLCAiXHg5MFx4MDBceDA2In0sCi0JezB4MzMsICJceDkwXHgwMFx4MDYifSwgezB4MzMsICJceDkwXHgwMFx4MDYifSwgezB4MzMsICJceDkwXHgwMFx4MDYifSwKLQl7MTAwLCAiXHhmZlx4ZmZceGZmIn0sCi0JLyogPz8gKi8KLQl7MHgzMywgIlx4OGNceGExXHgwMiJ9LCB7MHgzMywgIlx4OTBceDAwXHgxZiJ9LCB7MHgzMywgIlx4OGNceGExXHgwMiJ9LAotCXsweDMzLCAiXHg5MFx4MDBceDFmIn0sIHsweDMzLCAiXHg4Y1x4YTFceDAyIn0sIHsweDMzLCAiXHg5MFx4MDBceDFmIn0sCi0JezB4MzMsICJceDhjXHhhMVx4MDIifSwgezB4MzMsICJceDkwXHgwMFx4MWYifSwKLQkvKiBCcmlndGhuZXNzPTcwICovCi0JezB4MzMsICJceDhjXHhhMlx4MDYifSwgezB4MzMsICJceDkwXHgwMFx4NDYifSwgezB4MzMsICJceDhjXHhhMVx4MDIifSwKLQl7MHgzMywgIlx4OTBceDAwXHgwZiJ9LCB7MHgzMywgIlx4OGNceGExXHgwMyJ9LCB7MHgzMywgIlx4OTBceDAwXHgwNSJ9LAotCS8qIFNoYXJwbmVzcz0yMCAqLwotCXsweDMyLCAiXHg2Y1x4MTRceDA4In0sCi19OwotCi1zdGF0aWMgc3RydWN0IGlkeGRhdGEgdGJsX2luaXRfcG9zdF9hbHRfYmlnMVtdID0geworc3RhdGljIHN0cnVjdCBpZHhkYXRhIHRibF9pbml0X3Bvc3RfYWx0X2JpZ1tdID0gewogCXsweDMzLCAiXHg4Y1x4YTFceDAzIn0sIHsweDMzLCAiXHg5MFx4MDBceDA1In0sCiAJezIsICJceGZmXHhmZlx4ZmYifSwKIAl7MHgzMywgIlx4OGNceGExXHgwMyJ9LCB7MHgzMywgIlx4OTBceDAwXHgwNiJ9LAogCXsyLCAiXHhmZlx4ZmZceGZmIn0sCiAJezB4MzQsICJceDFlXHg4Zlx4MDkifSwgezB4MzQsICJceDFjXHgwMVx4MjgifSwgezB4MzQsICJceDFlXHg4Zlx4MDkifSwKKwl7MiwgIlx4ZmZceGZmXHhmZiJ9LAogCXsweDM0LCAiXHgxZVx4OGZceDA5In0sIHsweDMyLCAiXHgxNFx4MDZceGU2In0sIHsweDMzLCAiXHg4Y1x4YTFceDAzIn0sCiAJezB4MzMsICJceDkwXHgwMFx4MDUifSwKIAl7MiwgIlx4ZmZceGZmXHhmZiJ9LApAQCAtMjg1LDkgKzIzNiwxNyBAQAogCXsweDMzLCAiXHg5MFx4MDBceDAzIn0sIHsweDMzLCAiXHg4Y1x4YTFceDM0In0sIHsweDMzLCAiXHg5MFx4MDBceDAzIn0sCiAJezB4MzMsICJceDhjXHhhMVx4MDMifSwgezB4MzMsICJceDkwXHgwMFx4MDIifSwgezB4MzMsICJceDJlXHgwMVx4MDAifSwKIAl7MHgzNCwgIlx4MDRceDAwXHgyYSJ9LCB7MHgzMywgIlx4OGNceGE3XHgwMiJ9LCB7MHgzMywgIlx4OTBceDAwXHgwMSJ9LAorCXsweDMzLCAiXHg4Y1x4MjdceDk3In0sIHsweDMzLCAiXHg5MFx4MDFceDAwIn0sCisJezUxLCAiXHhmZlx4ZmZceGZmIn0sCisJezB4MzMsICJceDhjXHhhMVx4MjAifSwgezB4MzMsICJceDkwXHgwMFx4MDAifSwgezB4MzMsICJceDhjXHhhMVx4MDMifSwKKwl7MHgzMywgIlx4OTBceDAwXHgwMSJ9LCB7MHgzMywgIlx4OGNceGE3XHgwMiJ9LCB7MHgzMywgIlx4OTBceDAwXHgwMCJ9LAorCXs1MSwgIlx4ZmZceGZmXHhmZiJ9LAorCXsweDMzLCAiXHg4Y1x4YTFceDIwIn0sIHsweDMzLCAiXHg5MFx4MDBceDcyIn0sIHsweDMzLCAiXHg4Y1x4YTFceDAzIn0sCisJezB4MzMsICJceDkwXHgwMFx4MDIifSwgezB4MzMsICJceDhjXHhhN1x4MDIifSwgezB4MzMsICJceDkwXHgwMFx4MDEifSwKKwl7NTEsICJceGZmXHhmZlx4ZmYifSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaWR4ZGF0YSB0YmxfaW5pdF9wb3N0X2FsdF9iaWcyW10gPSB7CitzdGF0aWMgc3RydWN0IGlkeGRhdGEgdGJsX2luaXRfcG9zdF9hbHRfM0JbXSA9IHsKIAl7MHgzMiwgIlx4MTBceDAxXHhmOCJ9LCB7MHgzNCwgIlx4Y2VceDAxXHhhOCJ9LCB7MHgzNCwgIlx4ZDBceDY2XHgzMyJ9LAogCXsweDM0LCAiXHhkMlx4MzFceDlhIn0sIHsweDM0LCAiXHhkNFx4OTRceDYzIn0sIHsweDM0LCAiXHhkNlx4NGJceDI1In0sCiAJezB4MzQsICJceGQ4XHgyNlx4NzAifSwgezB4MzQsICJceGRhXHg3Mlx4NGMifSwgezB4MzQsICJceGRjXHhmZlx4MDQifSwKQEAgLTMxNiwxNyArMjc1LDYgQEAKIAl7MHgzMiwgIlx4MTBceDAxXHhmYyJ9LCB7MHgzMywgIlx4OGNceGExXHgxOCJ9LCB7MHgzMywgIlx4OTBceDAwXHgzYyJ9LAogfTsKIAotc3RhdGljIHN0cnVjdCBpZHhkYXRhIHRibF9pbml0X3Bvc3RfYWx0X2JpZzNbXSA9IHsKLQl7MHgzMywgIlx4OGNceGExXHgwMiJ9LAotCXsweDMzLCAiXHg5MFx4MDBceDFmIn0sCi0JezB4MzMsICJceDhjXHhhMVx4MDIifSwKLQl7MHgzMywgIlx4OTBceDAwXHgxZiJ9LAotCXsweDMzLCAiXHg4Y1x4YTFceDAyIn0sCi0JezB4MzMsICJceDkwXHgwMFx4MWYifSwKLQl7MHgzMywgIlx4OGNceGExXHgwMiJ9LAotCXsweDMzLCAiXHg5MFx4MDBceDFmIn0sCi19OwotCiBzdGF0aWMgdTggKmRhdF82NDAgID0gIlx4ZDBceDAyXHhkMVx4MDhceGQyXHhlMVx4ZDNceDAyXHhkNFx4MTBceGQ1XHg4MSI7CiBzdGF0aWMgdTggKmRhdF84MDAgID0gIlx4ZDBceDAyXHhkMVx4MTBceGQyXHg1N1x4ZDNceDAyXHhkNFx4MThceGQ1XHgyMSI7CiBzdGF0aWMgdTggKmRhdF8xMjgwID0gIlx4ZDBceDAyXHhkMVx4MjBceGQyXHgwMVx4ZDNceDAyXHhkNFx4MjhceGQ1XHgwMSI7CkBAIC0zNTEsNyArMjk5LDcgQEAKIAlzZC0+dmN1ci5nYW1tYSAgICAgID0gIDA7CiAJc2QtPnZjdXIuaHVlICAgICAgICA9ICAwOwogCXNkLT52Y3VyLnNhdHVyYXRpb24gPSA2MDsKLQlzZC0+dmN1ci53aGl0ZWJhbCAgID0gNTA7CisJc2QtPnZjdXIud2hpdGViYWwgICA9ICAwOyAvKiA1MCwgbm90IGRvbmUgYnkgaGFyZHdhcmUgKi8KIAlzZC0+dmN1ci5taXJyb3IgPSAwOwogCXNkLT52Y3VyLmZsaXAgICA9IDA7CiAJc2QtPnZjdXIuQUM1MEh6ID0gMTsKQEAgLTM2MSwxNyArMzA5LDEyIEBACiAJc2QtPnZtYXguc2hhcnBuZXNzICA9ICA0MDsKIAlzZC0+dm1heC5jb250cmFzdCAgID0gICAzOwogCXNkLT52bWF4LmdhbW1hICAgICAgPSAgIDI7Ci0Jc2QtPnZtYXguaHVlICAgICAgICA9ICAgMCArIDE7IC8qIDIwMCAqLwotCXNkLT52bWF4LnNhdHVyYXRpb24gPSAgIDA7ICAgICAvKiAxMDAgKi8KLQlzZC0+dm1heC53aGl0ZWJhbCAgID0gICAwOyAgICAgLyogMTAwICovCisJc2QtPnZtYXguaHVlICAgICAgICA9ICAgMCArIDE7IC8qIDIwMCwgbm90IGRvbmUgYnkgaGFyZHdhcmUgKi8KKwlzZC0+dm1heC5zYXR1cmF0aW9uID0gICAwOyAgICAgLyogMTAwLCBub3QgZG9uZSBieSBoYXJkd2FyZSAqLworCXNkLT52bWF4LndoaXRlYmFsICAgPSAgIDI7ICAgICAvKiAxMDAsIG5vdCBkb25lIGJ5IGhhcmR3YXJlICovCiAJc2QtPnZtYXgubWlycm9yID0gMTsKIAlzZC0+dm1heC5mbGlwICAgPSAxOwogCXNkLT52bWF4LkFDNTBIeiA9IDE7Ci0JaWYgKF9NSTIwMjBiXykgewotCQlzZC0+dm1heC5jb250cmFzdCAgPSAwOwotCQlzZC0+dm1heC5nYW1tYSAgICAgPSAwOwotCQlzZC0+dm1heC5iYWNrbGlnaHQgPSAwOwotCX0KIAogCXNkLT5kZXZfY2FtZXJhX3NldHRpbmdzID0gbWkyMDIwX2NhbWVyYV9zZXR0aW5nczsKIAlzZC0+ZGV2X2luaXRfYXRfc3RhcnR1cCA9IG1pMjAyMF9pbml0X2F0X3N0YXJ0dXA7CkBAIC0zODQsNTEgKzMyNyw5IEBACiAKIHN0YXRpYyB2b2lkIGNvbW1vbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0JczMyIHJlc28gPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoczMyKSBnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKLQotCWlmIChfTUkyMDIwYl8pIHsKLQkJZmV0Y2hfdmFsaWR4KGdzcGNhX2RldiwgdGJsX2NvbW1vbjEsIEFSUkFZX1NJWkUodGJsX2NvbW1vbjEpKTsKLQl9IGVsc2UgewotCQlpZiAoX01JMjAyMF8pCi0JCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsICAxLCAweDAwMDgsIDB4MDAwNCwgIDAsIE5VTEwpOwotCQllbHNlCi0JCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsICAxLCAweDAwMDIsIDB4MDAwNCwgIDAsIE5VTEwpOwotCQltc2xlZXAoMzUpOwotCQlmZXRjaF92YWxpZHgoZ3NwY2FfZGV2LCB0YmxfY29tbW9uMiwgQVJSQVlfU0laRSh0YmxfY29tbW9uMikpOwotCX0KLQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsICAzLCAweDdhMDAsIDB4MDAzMywgIDMsICJceDg2XHgyNVx4MDEiKTsKLQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsICAzLCAweDdhMDAsIDB4MDAzMywgIDMsICJceDg2XHgyNVx4MDAiKTsKLQltc2xlZXAoMik7IC8qIC0gKiAqLwotCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgIDMsIDB4N2EwMCwgMHgwMDMwLCAgMywgIlx4MWFceDBhXHhjYyIpOwotCWlmIChyZXNvID09IElNQUdFXzE2MDApCi0JCW1zbGVlcCgyKTsgLyogMTYwMCAqLwotCWZldGNoX2lkeGRhdGEoZ3NwY2FfZGV2LCB0YmxfY29tbW9uMywgQVJSQVlfU0laRSh0YmxfY29tbW9uMykpOwotCi0JaWYgKF9NSTIwMjBiXyB8fCBfTUkyMDIwXykKLQkJZmV0Y2hfaWR4ZGF0YShnc3BjYV9kZXYsIHRibF9jb21tb240LAotCQkJCUFSUkFZX1NJWkUodGJsX2NvbW1vbjQpKTsKLQotCWZldGNoX2lkeGRhdGEoZ3NwY2FfZGV2LCB0YmxfY29tbW9uNSwgQVJSQVlfU0laRSh0YmxfY29tbW9uNSkpOwotCWlmIChfTUkyMDIwYl8gfHwgX01JMjAyMF8pIHsKLQkJLyogRGlmZmVyZW50IGZyb20gZnJldCAqLwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg5MFx4MDBceDc4Iik7Ci0JCS8qIFNhbWUgYXMgZnJldCAqLwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg4Y1x4MjRceDE3Iik7Ci0JCS8qIERpZmZlcmVudCBmcm9tIGZyZXQgKi8KLQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OTBceDAwXHg5MCIpOwotCX0gZWxzZSB7Ci0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDkwXHgwMFx4NmEiKTsKLQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OGNceDI0XHgxNyIpOwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg5MFx4MDBceDgwIik7Ci0JfQotCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDhjXHhhMVx4MDMiKTsKLQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg5MFx4MDBceDA1Iik7Ci0JbXNsZWVwKDIpOwotCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDhjXHhhMVx4MDMiKTsKLQlpZiAocmVzbyA9PSBJTUFHRV8xNjAwKQotCQltc2xlZXAoMTQpOyAvKiAxNjAwICovCi0JY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OTBceDAwXHgwNiIpOwotCW1zbGVlcCgyKTsKKwlmZXRjaF92YWxpZHgoZ3NwY2FfZGV2LCB0YmxfY29tbW9uXzBCLCBBUlJBWV9TSVpFKHRibF9jb21tb25fMEIpKTsKKwlmZXRjaF9pZHhkYXRhKGdzcGNhX2RldiwgdGJsX2NvbW1vbl8zQiwgQVJSQVlfU0laRSh0YmxfY29tbW9uXzNCKSk7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwNDEsIDB4MDAwMCwgMCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbnQgbWkyMDIwX2luaXRfYXRfc3RhcnR1cChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCkBAIC00NDEsOCArMzQyLDE2IEBACiAJZmV0Y2hfdmFsaWR4KGdzcGNhX2RldiwgdGJsX2luaXRfYXRfc3RhcnR1cCwKIAkJCUFSUkFZX1NJWkUodGJsX2luaXRfYXRfc3RhcnR1cCkpOwogCisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAgMSwgMHg3YTAwLCAweDgwMzAsICAwLCBOVUxMKTsKKwljdHJsX2luKGdzcGNhX2RldiwgMHhjMCwgIDIsIDB4N2EwMCwgMHg4MDMwLCAgMSwgJmMpOworCiAJY29tbW9uKGdzcGNhX2Rldik7CiAKKwltc2xlZXAoNjEpOworLyoJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxMSwgMHgwMDAwLCAweDAwMDAsICAwLCBOVUxMKTsgKi8KKy8qCW1zbGVlcCgzNik7ICovCisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAgMSwgMHgwMDAxLCAweDAwMDAsICAwLCBOVUxMKTsKKwogCXJldHVybiAwOwogfQogCkBAIC00NTAsMTcgKzM1OSwxNyBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCXNkLT5taXJyb3JNYXNrID0gMDsKKwlzZC0+bWlycm9yTWFzayA9ICAwOworCXNkLT52b2xkLmh1ZSAgID0gLTE7CiAKLQlzZC0+dm9sZC5iYWNrbGlnaHQgID0gLTE7CisJLyogVGhlc2UgY29udHJvbHMgbmVlZCB0byBiZSByZXNldCAqLwogCXNkLT52b2xkLmJyaWdodG5lc3MgPSAtMTsKIAlzZC0+dm9sZC5zaGFycG5lc3MgID0gLTE7Ci0Jc2QtPnZvbGQuY29udHJhc3QgICA9IC0xOwotCXNkLT52b2xkLmdhbW1hICA9IC0xOwotCXNkLT52b2xkLmh1ZSAgICA9IC0xOwotCXNkLT52b2xkLm1pcnJvciA9IC0xOwotCXNkLT52b2xkLmZsaXAgICA9IC0xOwotCXNkLT52b2xkLkFDNTBIeiA9IC0xOworCisJLyogSWYgbm90IGRpZmZlcmVudCBmcm9tIGRlZmF1bHQsIHRoZXkgZG8gbm90IG5lZWQgdG8gYmUgc2V0ICovCisJc2QtPnZvbGQuY29udHJhc3QgID0gMDsKKwlzZC0+dm9sZC5nYW1tYSAgICAgPSAwOworCXNkLT52b2xkLmJhY2tsaWdodCA9IDA7CiAKIAltaTIwMjBfaW5pdF9wb3N0X2FsdChnc3BjYV9kZXYpOwogCkBAIC00NzIsMTAgKzM4MSwxMCBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlzMzIgcmVzbyA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhzMzIpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2OwogCi0JczMyIGJhY2tsaWdodCA9IHNkLT52Y3VyLmJhY2tsaWdodDsKIAlzMzIgbWlycm9yID0gKCgoc2QtPnZjdXIubWlycm9yID4gMCkgXiBzZC0+bWlycm9yTWFzaykgPiAwKTsKIAlzMzIgZmxpcCAgID0gKCgoc2QtPnZjdXIuZmxpcCAgID4gMCkgXiBzZC0+bWlycm9yTWFzaykgPiAwKTsKIAlzMzIgZnJlcSAgID0gKHNkLT52Y3VyLkFDNTBIeiAgPiAwKTsKKwlzMzIgd2JhbCAgID0gc2QtPnZjdXIud2hpdGViYWw7CiAKIAl1OCBkYXRfZnJlcTJbXSA9IHsweDkwLCAweDAwLCAweDgwfTsKIAl1OCBkYXRfbXVsdGkxW10gPSB7MHg4YywgMHhhNywgMHgwMH07CkBAIC00ODQsNiArMzkzLDcgQEAKIAl1OCBkYXRfbXVsdGk0W10gPSB7MHg5MCwgMHgwMCwgMHgwMH07CiAJdTggZGF0X2h2ZmxpcDJbXSA9IHsweDkwLCAweDA0LCAweDZjfTsKIAl1OCBkYXRfaHZmbGlwNFtdID0gezB4OTAsIDB4MDAsIDB4MjR9OworCXU4IGRhdF93YmFsMltdID0gezB4OTAsIDB4MDAsIDB4MDB9OwogCXU4IGM7CiAKIAlzZC0+bmJJbSA9IC0xOwpAQCAtNDkxLDIzICs0MDEsMjYgQEAKIAlkYXRfZnJlcTJbMl0gPSBmcmVxID8gMHhjMCA6IDB4ODA7CiAJZGF0X211bHRpMVsyXSA9IDB4OWQ7CiAJZGF0X211bHRpM1syXSA9IGRhdF9tdWx0aTFbMl0gKyAxOwotCWRhdF9tdWx0aTRbMl0gPSBkYXRfbXVsdGkyWzJdID0gYmFja2xpZ2h0OworCWlmICh3YmFsID09IDApIHsKKwkJZGF0X211bHRpNFsyXSA9IGRhdF9tdWx0aTJbMl0gPSAwOworCQlkYXRfd2JhbDJbMl0gPSAweDE3OworCX0gZWxzZSBpZiAod2JhbCA9PSAxKSB7CisJCWRhdF9tdWx0aTRbMl0gPSBkYXRfbXVsdGkyWzJdID0gMDsKKwkJZGF0X3diYWwyWzJdID0gMHgzNTsKKwl9IGVsc2UgaWYgKHdiYWwgPT0gMikgeworCQlkYXRfbXVsdGk0WzJdID0gZGF0X211bHRpMlsyXSA9IDB4MjA7CisJCWRhdF93YmFsMlsyXSA9IDB4MTc7CisJfQogCWRhdF9odmZsaXAyWzJdID0gMHg2YyArIDIgKiAoMSAtIGZsaXApICsgKDEgLSBtaXJyb3IpOwogCWRhdF9odmZsaXA0WzJdID0gMHgyNCArIDIgKiAoMSAtIGZsaXApICsgKDEgLSBtaXJyb3IpOwogCiAJbXNsZWVwKDIwMCk7Ci0KIAljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDUsIDB4MDAwMSwgMHgwMDAwLCAwLCBOVUxMKTsKLQltc2xlZXAoMyk7IC8qIDM1ICogKi8KKwltc2xlZXAoMik7CiAKIAljb21tb24oZ3NwY2FfZGV2KTsKIAotCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgIDEsIDB4MDA0MSwgMHgwMDAwLCAgMCwgTlVMTCk7Ci0JbXNsZWVwKDcwKTsKLQotCWlmIChfTUkyMDIwYl8pCi0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgIDEsIDB4MDA0MCwgMHgwMDAwLCAgMCwgTlVMTCk7Ci0KKwltc2xlZXAoMTQyKTsKIAljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsICAxLCAweDAwMTAsIDB4MDAxMCwgIDAsIE5VTEwpOwogCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgIDEsIDB4MDAwMywgMHgwMGMxLCAgMCwgTlVMTCk7CiAJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAgMSwgMHgwMDQyLCAweDAwYzIsICAwLCBOVUxMKTsKQEAgLTUyMyw4ICs0MzYsNyBAQAogCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAgMywgMHgwMDAwLCAweDAyMDAsCiAJCQkJMTIsIGRhdF84MDApOwogCi0JCWlmIChfTUkyMDIwY18pCi0JCQlmZXRjaF9pZHhkYXRhKGdzcGNhX2RldiwgdGJsX2luaXRfcG9zdF9hbHRfbG93MSwKKwkJZmV0Y2hfaWR4ZGF0YShnc3BjYV9kZXYsIHRibF9pbml0X3Bvc3RfYWx0X2xvdzEsCiAJCQkJCUFSUkFZX1NJWkUodGJsX2luaXRfcG9zdF9hbHRfbG93MSkpOwogCiAJCWlmIChyZXNvID09IElNQUdFXzgwMCkKQEAgLTUzNCw4NyArNDQ2LDEwIEBACiAJCWZldGNoX2lkeGRhdGEoZ3NwY2FfZGV2LCB0YmxfaW5pdF9wb3N0X2FsdF9sb3czLAogCQkJCUFSUkFZX1NJWkUodGJsX2luaXRfcG9zdF9hbHRfbG93MykpOwogCi0JCWlmIChfTUkyMDIwYl8pIHsKLQkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHgwMDAxLCAweDAwMTAsIDAsIE5VTEwpOwotCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwMDAsIDB4MDBjMSwgMCwgTlVMTCk7Ci0JCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDA0MSwgMHgwMGMyLCAwLCBOVUxMKTsKLQkJCW1zbGVlcCgxNTApOwotCQl9IGVsc2UgaWYgKF9NSTIwMjBjXykgewotCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwMTAsIDB4MDAxMCwgMCwgTlVMTCk7Ci0JCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDAwMCwgMHgwMGMxLCAwLCBOVUxMKTsKLQkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHgwMDQxLCAweDAwYzIsIDAsIE5VTEwpOwotCQkJbXNsZWVwKDEyMCk7Ci0JCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDA0MCwgMHgwMDAwLCAwLCBOVUxMKTsKLQkJCW1zbGVlcCgzMCk7Ci0JCX0gZWxzZSBpZiAoX01JMjAyMF8pIHsKLQkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHgwMDAxLCAweDAwMTAsIDAsIE5VTEwpOwotCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwMDAsIDB4MDBjMSwgMCwgTlVMTCk7Ci0JCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDA0MSwgMHgwMGMyLCAwLCBOVUxMKTsKLQkJCW1zbGVlcCgxMjApOwotCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwNDAsIDB4MDAwMCwgMCwgTlVMTCk7Ci0JCQltc2xlZXAoMzApOwotCQl9Ci0KLQkJLyogQUMgcG93ZXIgZnJlcXVlbmN5ICovCi0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9mcmVxMSk7Ci0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9mcmVxMik7Ci0JCW1zbGVlcCgyMCk7Ci0JCS8qIGJhY2tsaWdodCAqLwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGkxKTsKLQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpMik7Ci0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTMpOwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGk0KTsKLQkJLyogYXQgaW5pdCB0aW1lIGJ1dCBub3QgYWZ0ZXIgKi8KLQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OGNceGEyXHgwYyIpOwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg5MFx4MDBceDE3Iik7Ci0JCS8qIGZpbmlzaCB0aGUgYmFja2xpZ2h0ICovCi0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTUpOwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGk2KTsKLQkJbXNsZWVwKDUpOy8qICIgKi8KLQotCQlpZiAoX01JMjAyMGNfKSB7Ci0JCQlmZXRjaF9pZHhkYXRhKGdzcGNhX2RldiwgdGJsX2luaXRfcG9zdF9hbHRfbG93NCwKLQkJCQkJQVJSQVlfU0laRSh0YmxfaW5pdF9wb3N0X2FsdF9sb3c0KSk7Ci0JCX0gZWxzZSB7Ci0JCQljdHJsX2luKGdzcGNhX2RldiwgMHhjMCwgMiwgMHgwMDAwLCAweDAwMDAsIDEsICZjKTsKLQkJCW1zbGVlcCgxNCk7IC8qIDB4ZDggKi8KLQotCQkJLyogZmxpcC9taXJyb3IgKi8KLQkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsCi0JCQkJCTMsIGRhdF9odmZsaXAxKTsKLQkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsCi0JCQkJCTMsIGRhdF9odmZsaXAyKTsKLQkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsCi0JCQkJCTMsIGRhdF9odmZsaXAzKTsKLQkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsCi0JCQkJCTMsIGRhdF9odmZsaXA0KTsKLQkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsCi0JCQkJCTMsIGRhdF9odmZsaXA1KTsKLQkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsCi0JCQkJCTMsIGRhdF9odmZsaXA2KTsKLQkJCW1zbGVlcCgyMSk7Ci0JCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLAotCQkJCQkzLCBkYXRfZHVtbXkxKTsKLQkJCW1zbGVlcCg1KTsKLQkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsCi0JCQkJCTMsIGRhdF9kdW1teTEpOwotCQkJbXNsZWVwKDUpOwotCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywKLQkJCQkJMywgZGF0X2R1bW15MSk7Ci0JCQltc2xlZXAoNSk7Ci0JCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLAotCQkJCQkzLCBkYXRfZHVtbXkxKTsKLQkJCW1zbGVlcCg1KTsKLQkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsCi0JCQkJCTMsIGRhdF9kdW1teTEpOwotCQkJbXNsZWVwKDUpOwotCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywKLQkJCQkJMywgZGF0X2R1bW15MSk7Ci0JCQkvKiBlbmQgb2YgZmxpcC9taXJyb3IgbWFpbiBwYXJ0ICovCi0JCQltc2xlZXAoMjQ2KTsgLyogMTQ2ICovCi0KLQkJCXNkLT5uYkltID0gMDsKLQkJfQorCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDAxMCwgMHgwMDEwLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwMDAsIDB4MDBjMSwgMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHgwMDQxLCAweDAwYzIsIDAsIE5VTEwpOworCQltc2xlZXAoMTIwKTsKIAkJYnJlYWs7CiAKIAljYXNlIElNQUdFXzEyODA6CkBAIC02NDMsMTA4ICs0NzgsNjIgQEAKIAkJCQkJMywgIlx4OTBceDA0XHhiMCIpOwogCQl9CiAKLQkJZmV0Y2hfaWR4ZGF0YShnc3BjYV9kZXYsIHRibF9pbml0X3Bvc3RfYWx0X2JpZzEsCi0JCQkJQVJSQVlfU0laRSh0YmxfaW5pdF9wb3N0X2FsdF9iaWcxKSk7CisJCWZldGNoX2lkeGRhdGEoZ3NwY2FfZGV2LCB0YmxfaW5pdF9wb3N0X2FsdF9iaWcsCisJCQkJQVJSQVlfU0laRSh0YmxfaW5pdF9wb3N0X2FsdF9iaWcpKTsKIAotCQlpZiAocmVzbyA9PSBJTUFHRV8xNjAwKQotCQkJbXNsZWVwKDEzKTsgLyogMTYwMCAqLwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg4Y1x4MjdceDk3Iik7Ci0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDkwXHgwMVx4MDAiKTsKLQkJbXNsZWVwKDUzKTsKLQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OGNceGExXHgyMCIpOwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg5MFx4MDBceDAwIik7Ci0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDhjXHhhMVx4MDMiKTsKLQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OTBceDAwXHgwMSIpOwotCQlpZiAocmVzbyA9PSBJTUFHRV8xNjAwKQotCQkJbXNsZWVwKDEzKTsgLyogMTYwMCAqLwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg4Y1x4YTdceDAyIik7Ci0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDkwXHgwMFx4MDAiKTsKLQkJbXNsZWVwKDUzKTsKLQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OGNceGExXHgyMCIpOwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg5MFx4MDBceDcyIik7Ci0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDhjXHhhMVx4MDMiKTsKLQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OTBceDAwXHgwMiIpOwotCQlpZiAocmVzbyA9PSBJTUFHRV8xNjAwKQotCQkJbXNsZWVwKDEzKTsgLyogMTYwMCAqLwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg4Y1x4YTdceDAyIik7Ci0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDkwXHgwMFx4MDEiKTsKLQkJbXNsZWVwKDUzKTsKLQotCQlpZiAoX01JMjAyMGJfKSB7Ci0JCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDAwMSwgMHgwMDEwLCAwLCBOVUxMKTsKLQkJCWlmIChyZXNvID09IElNQUdFXzE2MDApCi0JCQkJbXNsZWVwKDUwMCk7IC8qIDE2MDAgKi8KLQkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHgwMDAwLCAweDAwYzEsIDAsIE5VTEwpOwotCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwNDEsIDB4MDBjMiwgMCwgTlVMTCk7Ci0JCQltc2xlZXAoMTg1MCk7Ci0JCX0gZWxzZSBpZiAoX01JMjAyMGNfIHx8IF9NSTIwMjBfKSB7Ci0JCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDAwMSwgMHgwMDEwLCAwLCBOVUxMKTsKLQkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHgwMDAwLCAweDAwYzEsIDAsIE5VTEwpOwotCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwNDEsIDB4MDBjMiwgMCwgTlVMTCk7Ci0JCQltc2xlZXAoMTg1MCk7Ci0JCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDA0MCwgMHgwMDAwLCAwLCBOVUxMKTsKLQkJCW1zbGVlcCgzMCk7Ci0JCX0KLQotCQkvKiBBQyBwb3dlciBmcmVxdWVuY3kgKi8KLQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2ZyZXExKTsKLQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2ZyZXEyKTsKLQkJbXNsZWVwKDIwKTsKLQkJLyogYmFja2xpZ2h0ICovCi0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTEpOwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGkyKTsKLQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpMyk7Ci0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTQpOwotCQkvKiBhdCBpbml0IHRpbWUgYnV0IG5vdCBhZnRlciAqLwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg4Y1x4YTJceDBjIik7Ci0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDkwXHgwMFx4MTciKTsKLQkJLyogZmluaXNoIHRoZSBiYWNrbGlnaHQgKi8KLQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpNSk7Ci0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTYpOwotCQltc2xlZXAoNik7IC8qICIgKi8KLQotCQljdHJsX2luKGdzcGNhX2RldiwgMHhjMCwgMiwgMHgwMDAwLCAweDAwMDAsIDEsICZjKTsKLQkJbXNsZWVwKDE0KTsKLQotCQlpZiAoX01JMjAyMGNfKQotCQkJZmV0Y2hfaWR4ZGF0YShnc3BjYV9kZXYsIHRibF9pbml0X3Bvc3RfYWx0X2JpZzIsCi0JCQkJCUFSUkFZX1NJWkUodGJsX2luaXRfcG9zdF9hbHRfYmlnMikpOwotCi0JCS8qIGZsaXAvbWlycm9yICovCi0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9odmZsaXAxKTsKLQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2h2ZmxpcDIpOwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfaHZmbGlwMyk7Ci0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9odmZsaXA0KTsKLQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2h2ZmxpcDUpOwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfaHZmbGlwNik7Ci0JCS8qIGVuZCBvZiBmbGlwL21pcnJvciBtYWluIHBhcnQgKi8KLQkJbXNsZWVwKDE2KTsKLQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OGNceGExXHgwMyIpOwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg5MFx4MDBceDAxIik7Ci0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDhjXHhhMVx4MjAiKTsKLQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OTBceDAwXHgwMCIpOwotCQlpZiAocmVzbyA9PSBJTUFHRV8xNjAwKQotCQkJbXNsZWVwKDI1KTsgLyogMTYwMCAqLwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg4Y1x4YTdceDAyIik7Ci0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDkwXHgwMFx4MDAiKTsKLQkJbXNsZWVwKDEwMyk7Ci0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDhjXHhhMVx4MDMiKTsKLQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OTBceDAwXHgwMiIpOwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg4Y1x4YTFceDIwIik7Ci0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDkwXHgwMFx4NzIiKTsKLQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OGNceGE3XHgwMiIpOwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg5MFx4MDBceDAxIik7Ci0JCXNkLT5uYkltID0gMDsKLQotCQlpZiAoX01JMjAyMGNfKQotCQkJZmV0Y2hfaWR4ZGF0YShnc3BjYV9kZXYsIHRibF9pbml0X3Bvc3RfYWx0X2JpZzMsCi0JCQkJCUFSUkFZX1NJWkUodGJsX2luaXRfcG9zdF9hbHRfYmlnMykpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDAwMSwgMHgwMDEwLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwMDAsIDB4MDBjMSwgMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHgwMDQxLCAweDAwYzIsIDAsIE5VTEwpOworCQltc2xlZXAoMTg1MCk7CiAJfQogCisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwNDAsIDB4MDAwMCwgMCwgTlVMTCk7CisJbXNsZWVwKDQwKTsKKworCS8qIEFDIHBvd2VyIGZyZXF1ZW5jeSAqLworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9mcmVxMSk7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2ZyZXEyKTsKKwltc2xlZXAoMzMpOworCS8qIGxpZ2h0IHNvdXJjZSAqLworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTEpOworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTIpOworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTMpOworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTQpOworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF93YmFsMSk7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X3diYWwyKTsKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGk1KTsKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGk2KTsKKwltc2xlZXAoNyk7CisJY3RybF9pbihnc3BjYV9kZXYsIDB4YzAsIDIsIDB4MDAwMCwgMHgwMDAwLCAxLCAmYyk7CisKKwlmZXRjaF9pZHhkYXRhKGdzcGNhX2RldiwgdGJsX2luaXRfcG9zdF9hbHRfM0IsCisJCQlBUlJBWV9TSVpFKHRibF9pbml0X3Bvc3RfYWx0XzNCKSk7CisKKwkvKiBodmZsaXAgKi8KKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfaHZmbGlwMSk7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2h2ZmxpcDIpOworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9odmZsaXAzKTsKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfaHZmbGlwNCk7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2h2ZmxpcDUpOworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9odmZsaXA2KTsKKwltc2xlZXAoMjUwKTsKKworCWlmIChyZXNvID09IElNQUdFXzY0MCB8fCByZXNvID09IElNQUdFXzgwMCkKKwkJZmV0Y2hfaWR4ZGF0YShnc3BjYV9kZXYsIHRibF9taWRkbGVfaHZmbGlwX2xvdywKKwkJCQlBUlJBWV9TSVpFKHRibF9taWRkbGVfaHZmbGlwX2xvdykpOworCWVsc2UKKwkJZmV0Y2hfaWR4ZGF0YShnc3BjYV9kZXYsIHRibF9taWRkbGVfaHZmbGlwX2JpZywKKwkJCQlBUlJBWV9TSVpFKHRibF9taWRkbGVfaHZmbGlwX2JpZykpOworCisJZmV0Y2hfaWR4ZGF0YShnc3BjYV9kZXYsIHRibF9lbmRfaHZmbGlwLAorCQkJQVJSQVlfU0laRSh0YmxfZW5kX2h2ZmxpcCkpOworCisJc2QtPm5iSW0gPSAwOworCiAJc2QtPnZvbGQubWlycm9yICAgID0gbWlycm9yOwogCXNkLT52b2xkLmZsaXAgICAgICA9IGZsaXA7CiAJc2QtPnZvbGQuQUM1MEh6ICAgID0gZnJlcTsKLQlzZC0+dm9sZC5iYWNrbGlnaHQgPSBiYWNrbGlnaHQ7CisJc2QtPnZvbGQud2hpdGViYWwgID0gd2JhbDsKIAogCW1pMjAyMF9jYW1lcmFfc2V0dGluZ3MoZ3NwY2FfZGV2KTsKIApAQCAtNzcyLDYgKzU2MSw3IEBACiBzdGF0aWMgaW50IG1pMjAyMF9jYW1lcmFfc2V0dGluZ3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzMzIgcmVzbyA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhzMzIpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2OwogCiAJczMyIGJhY2tsaWdodCA9IHNkLT52Y3VyLmJhY2tsaWdodDsKIAlzMzIgYnJpZ2h0ID0gIHNkLT52Y3VyLmJyaWdodG5lc3M7CkBAIC03ODIsNiArNTcyLDcgQEAKIAlzMzIgbWlycm9yID0gKCgoc2QtPnZjdXIubWlycm9yID4gMCkgXiBzZC0+bWlycm9yTWFzaykgPiAwKTsKIAlzMzIgZmxpcCAgID0gKCgoc2QtPnZjdXIuZmxpcCAgID4gMCkgXiBzZC0+bWlycm9yTWFzaykgPiAwKTsKIAlzMzIgZnJlcSAgID0gKHNkLT52Y3VyLkFDNTBIeiA+IDApOworCXMzMiB3YmFsICAgPSBzZC0+dmN1ci53aGl0ZWJhbDsKIAogCXU4IGRhdF9zaGFycFtdID0gezB4NmMsIDB4MDAsIDB4MDh9OwogCXU4IGRhdF9icmlnaHQyW10gPSB7MHg5MCwgMHgwMCwgMHgwMH07CkBAIC03OTIsNiArNTgzLDcgQEAKIAl1OCBkYXRfbXVsdGk0W10gPSB7MHg5MCwgMHgwMCwgMHgwMH07CiAJdTggZGF0X2h2ZmxpcDJbXSA9IHsweDkwLCAweDA0LCAweDZjfTsKIAl1OCBkYXRfaHZmbGlwNFtdID0gezB4OTAsIDB4MDAsIDB4MjR9OworCXU4IGRhdF93YmFsMltdID0gezB4OTAsIDB4MDAsIDB4MDB9OwogCiAJLyogTGVzcyB0aGFuIDQgaW1hZ2VzIHJlY2VpdmVkIC0+IHRvbyBlYXJseSB0byBzZXQgdGhlIHNldHRpbmdzICovCiAJaWYgKHNkLT5uYkltIDwgNCkgewpAQCAtODA5LDQxICs2MDEsOTUgQEAKIAkJbXNsZWVwKDIwKTsKIAl9CiAKKwlpZiAod2JhbCAhPSBzZC0+dm9sZC53aGl0ZWJhbCkgeworCQlzZC0+dm9sZC53aGl0ZWJhbCA9IHdiYWw7CisJCWlmICh3YmFsIDwgMCB8fCB3YmFsID4gc2QtPnZtYXgud2hpdGViYWwpCisJCQl3YmFsID0gMDsKKworCQlkYXRfbXVsdGkxWzJdID0gMHg5ZDsKKwkJZGF0X211bHRpM1syXSA9IGRhdF9tdWx0aTFbMl0gKyAxOworCQlpZiAod2JhbCA9PSAwKSB7CisJCQlkYXRfbXVsdGk0WzJdID0gZGF0X211bHRpMlsyXSA9IDA7CisJCQlkYXRfd2JhbDJbMl0gPSAweDE3OworCQl9IGVsc2UgaWYgKHdiYWwgPT0gMSkgeworCQkJZGF0X211bHRpNFsyXSA9IGRhdF9tdWx0aTJbMl0gPSAwOworCQkJZGF0X3diYWwyWzJdID0gMHgzNTsKKwkJfSBlbHNlIGlmICh3YmFsID09IDIpIHsKKwkJCWRhdF9tdWx0aTRbMl0gPSBkYXRfbXVsdGkyWzJdID0gMHgyMDsKKwkJCWRhdF93YmFsMlsyXSA9IDB4MTc7CisJCX0KKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpMSk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTIpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGkzKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpNCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF93YmFsMSk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF93YmFsMik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTUpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGk2KTsKKwl9CisKIAlpZiAobWlycm9yICE9IHNkLT52b2xkLm1pcnJvciB8fCBmbGlwICE9IHNkLT52b2xkLmZsaXApIHsKIAkJc2QtPnZvbGQubWlycm9yID0gbWlycm9yOwogCQlzZC0+dm9sZC5mbGlwICAgPSBmbGlwOwogCiAJCWRhdF9odmZsaXAyWzJdID0gMHg2YyArIDIgKiAoMSAtIGZsaXApICsgKDEgLSBtaXJyb3IpOwogCQlkYXRfaHZmbGlwNFsyXSA9IDB4MjQgKyAyICogKDEgLSBmbGlwKSArICgxIC0gbWlycm9yKTsKKworCQlmZXRjaF9pZHhkYXRhKGdzcGNhX2RldiwgdGJsX2luaXRfcG9zdF9hbHRfM0IsCisJCQkJQVJSQVlfU0laRSh0YmxfaW5pdF9wb3N0X2FsdF8zQikpOworCiAJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9odmZsaXAxKTsKIAkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2h2ZmxpcDIpOwogCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfaHZmbGlwMyk7CiAJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9odmZsaXA0KTsKIAkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2h2ZmxpcDUpOwogCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfaHZmbGlwNik7Ci0JCW1zbGVlcCgxMzApOwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfZHVtbXkxKTsKLQkJbXNsZWVwKDYpOwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfZHVtbXkxKTsKLQkJbXNsZWVwKDYpOwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfZHVtbXkxKTsKLQkJbXNsZWVwKDYpOwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfZHVtbXkxKTsKLQkJbXNsZWVwKDYpOwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfZHVtbXkxKTsKLQkJbXNsZWVwKDYpOwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfZHVtbXkxKTsKLQkJbXNsZWVwKDYpOworCQltc2xlZXAoNDApOwogCi0JCS8qIFNvbWV0aW1lcyBwcmVzZW50LCBzb21ldGltZXMgbm90LCB1c2VmdWw/ICovCi0JCS8qIGN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGR1bW15Mik7Ci0JCSAqIGN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGR1bW15Myk7Ci0JCSAqIGN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGR1bW15Mik7Ci0JCSAqIGN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGR1bW15Myk7Ci0JCSAqIGN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGR1bW15Mik7Ci0JCSAqIGN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGR1bW15Myk7Ci0JCSAqIGN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGR1bW15Mik7Ci0JCSAqIGN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGR1bW15Myk7Ki8KKwkJaWYgKHJlc28gPT0gSU1BR0VfNjQwIHx8IHJlc28gPT0gSU1BR0VfODAwKQorCQkJZmV0Y2hfaWR4ZGF0YShnc3BjYV9kZXYsIHRibF9taWRkbGVfaHZmbGlwX2xvdywKKwkJCQkJQVJSQVlfU0laRSh0YmxfbWlkZGxlX2h2ZmxpcF9sb3cpKTsKKwkJZWxzZQorCQkJZmV0Y2hfaWR4ZGF0YShnc3BjYV9kZXYsIHRibF9taWRkbGVfaHZmbGlwX2JpZywKKwkJCQkJQVJSQVlfU0laRSh0YmxfbWlkZGxlX2h2ZmxpcF9iaWcpKTsKKworCQlmZXRjaF9pZHhkYXRhKGdzcGNhX2RldiwgdGJsX2VuZF9odmZsaXAsCisJCQkJQVJSQVlfU0laRSh0YmxfZW5kX2h2ZmxpcCkpOworCX0KKworCWlmIChicmlnaHQgIT0gc2QtPnZvbGQuYnJpZ2h0bmVzcykgeworCQlzZC0+dm9sZC5icmlnaHRuZXNzID0gYnJpZ2h0OworCQlpZiAoYnJpZ2h0IDwgMCB8fCBicmlnaHQgPiBzZC0+dm1heC5icmlnaHRuZXNzKQorCQkJYnJpZ2h0ID0gMDsKKworCQlkYXRfYnJpZ2h0MlsyXSA9IGJyaWdodDsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2JyaWdodDEpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfYnJpZ2h0Mik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9icmlnaHQzKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2JyaWdodDQpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfYnJpZ2h0NSk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9icmlnaHQ2KTsKKwl9CisKKwlpZiAoY250ciAhPSBzZC0+dm9sZC5jb250cmFzdCB8fCBnYW0gIT0gc2QtPnZvbGQuZ2FtbWEpIHsKKwkJc2QtPnZvbGQuY29udHJhc3QgPSBjbnRyOworCQlpZiAoY250ciA8IDAgfHwgY250ciA+IHNkLT52bWF4LmNvbnRyYXN0KQorCQkJY250ciA9IDA7CisJCXNkLT52b2xkLmdhbW1hID0gZ2FtOworCQlpZiAoZ2FtIDwgMCB8fCBnYW0gPiBzZC0+dm1heC5nYW1tYSkKKwkJCWdhbSA9IDA7CisKKwkJZGF0X211bHRpMVsyXSA9IDB4NmQ7CisJCWRhdF9tdWx0aTNbMl0gPSBkYXRfbXVsdGkxWzJdICsgMTsKKwkJaWYgKGNudHIgPT0gMCkKKwkJCWNudHIgPSA0OworCQlkYXRfbXVsdGk0WzJdID0gZGF0X211bHRpMlsyXSA9IGNudHIgKiAweDEwICsgMiAtIGdhbTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpMSk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTIpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGkzKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpNCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTUpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGk2KTsKIAl9CiAKIAlpZiAoYmFja2xpZ2h0ICE9IHNkLT52b2xkLmJhY2tsaWdodCkgewpAQCAtODYyLDUyICs3MDgsNiBAQAogCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGk2KTsKIAl9CiAKLQlpZiAoZ2FtICE9IHNkLT52b2xkLmdhbW1hKSB7Ci0JCXNkLT52b2xkLmdhbW1hID0gZ2FtOwotCQlpZiAoZ2FtIDwgMCB8fCBnYW0gPiBzZC0+dm1heC5nYW1tYSkKLQkJCWdhbSA9IDA7Ci0KLQkJZGF0X211bHRpMVsyXSA9IDB4NmQ7Ci0JCWRhdF9tdWx0aTNbMl0gPSBkYXRfbXVsdGkxWzJdICsgMTsKLQkJZGF0X211bHRpNFsyXSA9IGRhdF9tdWx0aTJbMl0gPSAweDQwICsgZ2FtOwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGkxKTsKLQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpMik7Ci0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTMpOwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGk0KTsKLQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpNSk7Ci0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTYpOwotCX0KLQotCWlmIChjbnRyICE9IHNkLT52b2xkLmNvbnRyYXN0KSB7Ci0JCXNkLT52b2xkLmNvbnRyYXN0ID0gY250cjsKLQkJaWYgKGNudHIgPCAwIHx8IGNudHIgPiBzZC0+dm1heC5jb250cmFzdCkKLQkJCWNudHIgPSAwOwotCi0JCWRhdF9tdWx0aTFbMl0gPSAweDZkOwotCQlkYXRfbXVsdGkzWzJdID0gZGF0X211bHRpMVsyXSArIDE7Ci0JCWRhdF9tdWx0aTRbMl0gPSBkYXRfbXVsdGkyWzJdID0gMHgxMiArIDE2ICogY250cjsKLQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpMSk7Ci0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTIpOwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGkzKTsKLQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpNCk7Ci0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTUpOwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGk2KTsKLQl9Ci0KLQlpZiAoYnJpZ2h0ICE9IHNkLT52b2xkLmJyaWdodG5lc3MpIHsKLQkJc2QtPnZvbGQuYnJpZ2h0bmVzcyA9IGJyaWdodDsKLQkJaWYgKGJyaWdodCA8IDAgfHwgYnJpZ2h0ID4gc2QtPnZtYXguYnJpZ2h0bmVzcykKLQkJCWJyaWdodCA9IDA7Ci0KLQkJZGF0X2JyaWdodDJbMl0gPSBicmlnaHQ7Ci0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9icmlnaHQxKTsKLQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2JyaWdodDIpOwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfYnJpZ2h0Myk7Ci0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9icmlnaHQ0KTsKLQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2JyaWdodDUpOwotCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfYnJpZ2h0Nik7Ci0JfQotCiAJaWYgKHNoYXJwICE9IHNkLT52b2xkLnNoYXJwbmVzcykgewogCQlzZC0+dm9sZC5zaGFycG5lc3MgPSBzaGFycDsKIAkJaWYgKHNoYXJwIDwgMCB8fCBzaGFycCA+IHNkLT52bWF4LnNoYXJwbmVzcykKQEAgLTkyOCw5ICs3MjgsNiBAQAogc3RhdGljIHZvaWQgbWkyMDIwX3Bvc3RfdW5zZXRfYWx0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDUsIDB4MDAwMCwgMHgwMDAwLCAwLCBOVUxMKTsKLQltc2xlZXAoMjApOwotCWlmIChfTUkyMDIwY18gfHwgX01JMjAyMF8pCi0JCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHgwMDAxLCAweDAwMDAsIDAsIE5VTEwpOwotCWVsc2UKLQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwNDEsIDB4MDAwMCwgMCwgTlVMTCk7CisJbXNsZWVwKDQwKTsKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDAwMSwgMHgwMDAwLCAwLCBOVUxMKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAtb3Y5NjU1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLW92OTY1NS5jCmluZGV4IGQ0MTI2OTQuLjVhZTk2MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAtb3Y5NjU1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC1vdjk2NTUuYwpAQCAtNjksNyArNjksNyBAQAogCSJceGQwXHgwMVx4ZDFceDA4XHhkMlx4ZTBceGQzXHgwMSIgIlx4ZDRceDEwXHhkNVx4ODAiCiB9OwogCi1zdGF0aWMgdTggKnRibF84MDBbXSA9IHsKK3N0YXRpYyB1OCAqdGJsXzEyODBbXSA9IHsKIAkiXHgwMFx4NDBceDA3XHg2YVx4MDZceGYzXHgwZFx4NmEiICJceDEwXHgxMFx4YzFceDAxIgogCSwKIAkiXHgxMlx4ODBceDAwXHgwMFx4MDFceDk4XHgwMlx4ODAiICJceDAzXHgxMlx4MDRceDAxXHgwYlx4NTdceDBlXHg2MSIKQEAgLTIxNyw3ICsyMTcsNyBAQAogCiAJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCA1LCAweDAwMDEsIDB4MDAwMCwgMCwgTlVMTCk7CiAKLQl0YmwgPSAocmVzbyA9PSBJTUFHRV82NDApID8gdGJsXzY0MCA6IHRibF84MDA7CisJdGJsID0gKHJlc28gPT0gSU1BR0VfNjQwKSA/IHRibF82NDAgOiB0YmxfMTI4MDsKIAogCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHgwMDAwLCAweDAyMDAsCiAJCQl0YmxfbGVuZ3RoWzBdLCB0YmxbMF0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC5jCmluZGV4IDllNDI0NzYuLmU4NmViOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLmMKQEAgLTYzLDcgKzYzLDcgQEAKIFwKIAlzZC0+dmN1ci50aGVuYW1lID0gdmFsO1wKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpXAotCQlzZC0+ZGV2X2NhbWVyYV9zZXR0aW5ncyhnc3BjYV9kZXYpO1wKKwkJc2QtPndhaXRTZXQgPSAxO1wKIAlyZXR1cm4gMDtcCiB9IFwKIHN0YXRpYyBpbnQgc2RfZ2V0XyMjdGhlbmFtZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHMzMiAqdmFsKVwKQEAgLTkxLDcgKzkxLDYgQEAKIC8qIGNvbnRyb2wgdGFibGUgKi8KIHN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc19taTEzMjBbR0w4NjBfTkNUUkxTXTsKIHN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc19taTIwMjBbR0w4NjBfTkNUUkxTXTsKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc19taTIwMjBiW0dMODYwX05DVFJMU107CiBzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNfb3YyNjQwW0dMODYwX05DVFJMU107CiBzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNfb3Y5NjU1W0dMODYwX05DVFJMU107CiAKQEAgLTEyMSw4ICsxMjAsNiBAQAogCQlzZF9jdHJscyA9IHNkX2N0cmxzX21pMTMyMDsKIAllbHNlIGlmIChfTUkyMDIwXykKIAkJc2RfY3RybHMgPSBzZF9jdHJsc19taTIwMjA7Ci0JZWxzZSBpZiAoX01JMjAyMGJfKQotCQlzZF9jdHJscyA9IHNkX2N0cmxzX21pMjAyMGI7CiAJZWxzZSBpZiAoX09WMjY0MF8pCiAJCXNkX2N0cmxzID0gc2RfY3RybHNfb3YyNjQwOwogCWVsc2UgaWYgKF9PVjk2NTVfKQpAQCAtMTg3LDE5ICsxODQsNiBAQAogCS5kcV9jYWxsYmFjayA9IHNkX2NhbGxiYWNrLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2NfbWkyMDIwYiA9IHsKLQkubmFtZSAgICAgICAgPSBNT0RVTEVfTkFNRSwKLQkuY3RybHMgICAgICAgPSBzZF9jdHJsc19taTIwMjBiLAotCS5uY3RybHMgICAgICA9IEdMODYwX05DVFJMUywKLQkuY29uZmlnICAgICAgPSBzZF9jb25maWcsCi0JLmluaXQgICAgICAgID0gc2RfaW5pdCwKLQkuaXNvY19pbml0ICAgPSBzZF9pc29jX2luaXQsCi0JLnN0YXJ0ICAgICAgID0gc2Rfc3RhcnQsCi0JLnN0b3AwICAgICAgID0gc2Rfc3RvcDAsCi0JLnBrdF9zY2FuICAgID0gc2RfcGt0X3NjYW4sCi0JLmRxX2NhbGxiYWNrID0gc2RfY2FsbGJhY2ssCi19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzY19vdjI2NDAgPSB7CiAJLm5hbWUgICAgICAgID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzICAgICAgID0gc2RfY3RybHNfb3YyNjQwLApAQCAtMjM1LDkgKzIxOSw5IEBACiAJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCiAJCS5wcml2ID0gMAogCX0sCi0JeyA4MDAsICA2MDAsIFY0TDJfUElYX0ZNVF9TR0JSRzgsIFY0TDJfRklFTERfTk9ORSwKKwl7IDgwMCwgIDU5OCwgVjRMMl9QSVhfRk1UX1NHQlJHOCwgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gODAwLAotCQkuc2l6ZWltYWdlID0gODAwICogNjAwLAorCQkuc2l6ZWltYWdlID0gODAwICogNTk4LAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAogCQkucHJpdiA9IDEKIAl9LApAQCAtMjQ3LDkgKzIzMSw5IEBACiAJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCiAJCS5wcml2ID0gMgogCX0sCi0JezE2MDAsIDEyMDAsIFY0TDJfUElYX0ZNVF9TR0JSRzgsIFY0TDJfRklFTERfTk9ORSwKKwl7MTYwMCwgMTE5OCwgVjRMMl9QSVhfRk1UX1NHQlJHOCwgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gMTYwMCwKLQkJLnNpemVpbWFnZSA9IDE2MDAgKiAxMjAwLAorCQkuc2l6ZWltYWdlID0gMTYwMCAqIDExOTgsCiAJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCiAJCS5wcml2ID0gMwogCX0sCkBAIC0zNDQsOCArMzI4LDYgQEAKIAkJc2QtPnNlbnNvciA9IElEX09WOTY1NTsKIAllbHNlIGlmIChzdHJjbXAoc2Vuc29yLCAiTUkyMDIwIikgPT0gMCkKIAkJc2QtPnNlbnNvciA9IElEX01JMjAyMDsKLQllbHNlIGlmIChzdHJjbXAoc2Vuc29yLCAiTUkyMDIwYiIpID09IDApCi0JCXNkLT5zZW5zb3IgPSBJRF9NSTIwMjBiOwogCiAJLyogR2V0IHNlbnNvciBhbmQgc2V0IHRoZSBzdWl0YWJsZSBpbml0L3N0YXJ0Ly4uL3N0b3AgZnVuY3Rpb25zICovCiAJaWYgKGdsODYwX2d1ZXNzX3NlbnNvcihnc3BjYV9kZXYsIHZlbmRvcl9pZCwgcHJvZHVjdF9pZCkgPT0gLTEpCkBAIC0zNjksMTMgKzM1MSw2IEBACiAJCWRldl9pbml0X3NldHRpbmdzICAgPSBtaTIwMjBfaW5pdF9zZXR0aW5nczsKIAkJYnJlYWs7CiAKLQljYXNlIElEX01JMjAyMGI6Ci0JCWdzcGNhX2Rldi0+c2RfZGVzYyA9ICZzZF9kZXNjX21pMjAyMGI7Ci0JCWNhbS0+Y2FtX21vZGUgPSBtaTIwMjBfbW9kZTsKLQkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKG1pMjAyMF9tb2RlKTsKLQkJZGV2X2luaXRfc2V0dGluZ3MgICA9IG1pMjAyMF9pbml0X3NldHRpbmdzOwotCQlicmVhazsKLQogCWNhc2UgSURfT1YyNjQwOgogCQlnc3BjYV9kZXYtPnNkX2Rlc2MgPSAmc2RfZGVzY19vdjI2NDA7CiAJCWNhbS0+Y2FtX21vZGUgPSBvdjI2NDBfbW9kZTsKQEAgLTYyMCwxMCArNTk1LDcgQEAKIAllbHNlIGlmIChsZW4gPiAxICYmIHIgPCBsZW4pCiAJCVBERUJVRyhEX0VSUiwgInNob3J0IGN0cmwgdHJhbnNmZXIgJWQvJWQiLCByLCBsZW4pOwogCi0JaWYgKChfTUkyMDIwXyB8fCBfTUkyMDIwYl8gfHwgX01JMjAyMGNfKSAmJiAodmFsIHx8IGluZGV4KSkKLQkJbXNsZWVwKDEpOwotCWlmIChfT1YyNjQwXykKLQkJbXNsZWVwKDEpOworCW1zbGVlcCgxKTsKIAogCXJldHVybiByOwogfQpAQCAtNzY3LDggKzczOSw2IEBACiAJCVBERUJVRyhEX1BST0JFLCAiMDVlMzpmMTkxIHNlbnNvciBNSTEzMjAgKDEuM00pIik7CiAJfSBlbHNlIGlmIChfTUkyMDIwXykgewogCQlQREVCVUcoRF9QUk9CRSwgIjA1ZTM6MDUwMyBzZW5zb3IgTUkyMDIwICgyLjBNKSIpOwotCX0gZWxzZSBpZiAoX01JMjAyMGJfKSB7Ci0JCVBERUJVRyhEX1BST0JFLCAiMDVlMzowNTAzIHNlbnNvciBNSTIwMjAgYWx0LiBkcml2ZXIgKDIuME0pIik7CiAJfSBlbHNlIGlmIChfT1Y5NjU1XykgewogCQlQREVCVUcoRF9QUk9CRSwgIjA1ZTM6MDUwMyBzZW5zb3IgT1Y5NjU1ICgxLjNNKSIpOwogCX0gZWxzZSBpZiAoX09WMjY0MF8pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAuaAppbmRleCAzMDUwNjFmLi40OWFkNGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC5oCkBAIC0zMiwxOSArMzIsMTYgQEAKICNkZWZpbmUgSURfT1YyNjQwICAgMgogI2RlZmluZSBJRF9PVjk2NTUgICA0CiAjZGVmaW5lIElEX01JMjAyMCAgIDgKLSNkZWZpbmUgSURfTUkyMDIwYiAxNgogCiAjZGVmaW5lIF9NSTEzMjBfICAoKChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2KS0+c2Vuc29yID09IElEX01JMTMyMCkKICNkZWZpbmUgX01JMjAyMF8gICgoKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXYpLT5zZW5zb3IgPT0gSURfTUkyMDIwKQotI2RlZmluZSBfTUkyMDIwYl8gKCgoc3RydWN0IHNkICopIGdzcGNhX2RldiktPnNlbnNvciA9PSBJRF9NSTIwMjBiKQotI2RlZmluZSBfTUkyMDIwY18gMAogI2RlZmluZSBfT1YyNjQwXyAgKCgoc3RydWN0IHNkICopIGdzcGNhX2RldiktPnNlbnNvciA9PSBJRF9PVjI2NDApCiAjZGVmaW5lIF9PVjk2NTVfICAoKChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2KS0+c2Vuc29yID09IElEX09WOTY1NSkKIAogI2RlZmluZSBJTUFHRV82NDAgICAwCiAjZGVmaW5lIElNQUdFXzgwMCAgIDEKICNkZWZpbmUgSU1BR0VfMTI4MCAgMgotI2RlZmluZSBJTUFHRV8xNjAwIDMKKyNkZWZpbmUgSU1BR0VfMTYwMCAgMwogCiBzdHJ1Y3Qgc2RfZ2w4NjAgewogCXUxNiBiYWNrbGlnaHQ7CkBAIC03NSwxMCArNzIsMTAgQEAKIAlpbnQgICgqZGV2X2NhbWVyYV9zZXR0aW5ncykoc3RydWN0IGdzcGNhX2RldiAqKTsKIAogCXU4ICAgc3dhcFJCOwotCXU4ICBtaXJyb3JNYXNrOwotCXU4ICBzZW5zb3I7Ci0JczMyIG5iSW07Ci0JczMyIG5iUmlnaHRVcDsKKwl1OCAgIG1pcnJvck1hc2s7CisJdTggICBzZW5zb3I7CisJczMyICBuYkltOworCXMzMiAgbmJSaWdodFVwOwogCXU4ICAgd2FpdFNldDsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYwppbmRleCA2Nzg2NzViLi5kOTUxYjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCkBAIC0yMDEsNyArMjAxLDcgQEAKIAogCWJ1ZmZlcl9sZW4gPSBsZTE2X3RvX2NwdShlcC0+d01heFBhY2tldFNpemUpOwogCWludGVydmFsID0gZXAtPmJJbnRlcnZhbDsKLQlQREVCVUcoRF9QUk9CRSwgImZvdW5kIGludCBpbiBlbmRwb2ludDogMHgleCwgIgorCVBERUJVRyhEX0NPTkYsICJmb3VuZCBpbnQgaW4gZW5kcG9pbnQ6IDB4JXgsICIKIAkJImJ1ZmZlcl9sZW49JXUsIGludGVydmFsPSV1IiwKIAkJZXAtPmJFbmRwb2ludEFkZHJlc3MsIGJ1ZmZlcl9sZW4sIGludGVydmFsKTsKIApAQCAtMjI2LDcgKzIyNiw3IEBACiAJZ3NwY2FfZGV2LT5pbnRfdXJiID0gdXJiOwogCXJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJldCA8IDApIHsKLQkJUERFQlVHKERfRVJSLCAic3VibWl0IFVSQiBmYWlsZWQgd2l0aCBlcnJvciAlaSIsIHJldCk7CisJCVBERUJVRyhEX0VSUiwgInN1Ym1pdCBpbnQgVVJCIGZhaWxlZCB3aXRoIGVycm9yICVpIiwgcmV0KTsKIAkJZ290byBlcnJvcl9zdWJtaXQ7CiAJfQogCXJldHVybiByZXQ7CkBAIC0yOTQsMTkgKzI5NCw2IEBACiB9CiAjZW5kaWYKIAotLyogZ2V0IHRoZSBjdXJyZW50IGlucHV0IGZyYW1lIGJ1ZmZlciAqLwotc3RydWN0IGdzcGNhX2ZyYW1lICpnc3BjYV9nZXRfaV9mcmFtZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZTsKLQotCWZyYW1lID0gZ3NwY2FfZGV2LT5jdXJfZnJhbWU7Ci0JaWYgKChmcmFtZS0+djRsMl9idWYuZmxhZ3MgJiBCVUZfQUxMX0ZMQUdTKQotCQkJCSE9IFY0TDJfQlVGX0ZMQUdfUVVFVUVEKQotCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gZnJhbWU7Ci19Ci1FWFBPUlRfU1lNQk9MKGdzcGNhX2dldF9pX2ZyYW1lKTsKLQogLyoKICAqIGZpbGwgYSB2aWRlbyBmcmFtZSBmcm9tIGFuIFVSQiBhbmQgcmVzdWJtaXQKICAqLwpAQCAtNDM5LDIwICs0MjYsMjAgQEAKIAogCVBERUJVRyhEX1BBQ0ssICJhZGQgdDolZCBsOiVkIiwJcGFja2V0X3R5cGUsIGxlbik7CiAKLQkvKiBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZSBmcmFtZSBidWZmZXIgKi8KLQlmcmFtZSA9IGdzcGNhX2Rldi0+Y3VyX2ZyYW1lOwotCWlmICgoZnJhbWUtPnY0bDJfYnVmLmZsYWdzICYgQlVGX0FMTF9GTEFHUykKLQkJCQkJIT0gVjRMMl9CVUZfRkxBR19RVUVVRUQpIHsKLQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiB3aGVuIHN0YXJ0IG9mIGEgbmV3IGZyYW1lLCBpZiB0aGUgY3VycmVudCBmcmFtZSBidWZmZXIKLQkgKiBpcyBub3QgcXVldWVkLCBkaXNjYXJkIHRoZSB3aG9sZSBmcmFtZSAqLwogCWlmIChwYWNrZXRfdHlwZSA9PSBGSVJTVF9QQUNLRVQpIHsKLQkJZnJhbWUtPmRhdGFfZW5kID0gZnJhbWUtPmRhdGE7CisJCWkgPSBhdG9taWNfcmVhZCgmZ3NwY2FfZGV2LT5mcl9pKTsKKworCQkvKiBpZiB0aGVyZSBhcmUgbm8gcXVldWVkIGJ1ZmZlciwgZGlzY2FyZCB0aGUgd2hvbGUgZnJhbWUgKi8KKwkJaWYgKGkgPT0gYXRvbWljX3JlYWQoJmdzcGNhX2Rldi0+ZnJfcSkpIHsKKwkJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOworCQkJcmV0dXJuOworCQl9CisJCWogPSBnc3BjYV9kZXYtPmZyX3F1ZXVlW2ldOworCQlmcmFtZSA9ICZnc3BjYV9kZXYtPmZyYW1lW2pdOwogCQlmcmFtZS0+djRsMl9idWYudGltZXN0YW1wID0ga3RpbWVfdG9fdGltZXZhbChrdGltZV9nZXQoKSk7CiAJCWZyYW1lLT52NGwyX2J1Zi5zZXF1ZW5jZSA9ICsrZ3NwY2FfZGV2LT5zZXF1ZW5jZTsKKwkJZ3NwY2FfZGV2LT5pbWFnZSA9IGZyYW1lLT5kYXRhOworCQlnc3BjYV9kZXYtPmltYWdlX2xlbiA9IDA7CiAJfSBlbHNlIGlmIChnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPT0gRElTQ0FSRF9QQUNLRVQpIHsKIAkJaWYgKHBhY2tldF90eXBlID09IExBU1RfUEFDS0VUKQogCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gcGFja2V0X3R5cGU7CkBAIC00NjEsMzQgKzQ0OCwzNyBAQAogCiAJLyogYXBwZW5kIHRoZSBwYWNrZXQgdG8gdGhlIGZyYW1lIGJ1ZmZlciAqLwogCWlmIChsZW4gPiAwKSB7Ci0JCWlmIChmcmFtZS0+ZGF0YV9lbmQgLSBmcmFtZS0+ZGF0YSArIGxlbgotCQkJCQkJID4gZnJhbWUtPnY0bDJfYnVmLmxlbmd0aCkgewotCQkJUERFQlVHKERfRVJSfERfUEFDSywgImZyYW1lIG92ZXJmbG93ICV6ZCA+ICVkIiwKLQkJCQlmcmFtZS0+ZGF0YV9lbmQgLSBmcmFtZS0+ZGF0YSArIGxlbiwKLQkJCQlmcmFtZS0+djRsMl9idWYubGVuZ3RoKTsKKwkJaWYgKGdzcGNhX2Rldi0+aW1hZ2VfbGVuICsgbGVuID4gZ3NwY2FfZGV2LT5mcnN6KSB7CisJCQlQREVCVUcoRF9FUlJ8RF9QQUNLLCAiZnJhbWUgb3ZlcmZsb3cgJWQgPiAlZCIsCisJCQkJZ3NwY2FfZGV2LT5pbWFnZV9sZW4gKyBsZW4sCisJCQkJZ3NwY2FfZGV2LT5mcnN6KTsKIAkJCXBhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CiAJCX0gZWxzZSB7Ci0JCQltZW1jcHkoZnJhbWUtPmRhdGFfZW5kLCBkYXRhLCBsZW4pOwotCQkJZnJhbWUtPmRhdGFfZW5kICs9IGxlbjsKKwkJCW1lbWNweShnc3BjYV9kZXYtPmltYWdlICsgZ3NwY2FfZGV2LT5pbWFnZV9sZW4sCisJCQkJZGF0YSwgbGVuKTsKKwkJCWdzcGNhX2Rldi0+aW1hZ2VfbGVuICs9IGxlbjsKIAkJfQogCX0KIAlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBwYWNrZXRfdHlwZTsKIAotCS8qIGlmIGxhc3QgcGFja2V0LCB3YWtlIHVwIHRoZSBhcHBsaWNhdGlvbiBhbmQgYWR2YW5jZSBpbiB0aGUgcXVldWUgKi8KKwkvKiBpZiBsYXN0IHBhY2tldCwgaW52YWxpZGF0ZSBwYWNrZXQgY29uY2F0ZW5hdGlvbiB1bnRpbAorCSAqIG5leHQgZmlyc3QgcGFja2V0LCB3YWtlIHVwIHRoZSBhcHBsaWNhdGlvbiBhbmQgYWR2YW5jZQorCSAqIGluIHRoZSBxdWV1ZSAqLwogCWlmIChwYWNrZXRfdHlwZSA9PSBMQVNUX1BBQ0tFVCkgewotCQlmcmFtZS0+djRsMl9idWYuYnl0ZXN1c2VkID0gZnJhbWUtPmRhdGFfZW5kIC0gZnJhbWUtPmRhdGE7Ci0JCWZyYW1lLT52NGwyX2J1Zi5mbGFncyAmPSB+VjRMMl9CVUZfRkxBR19RVUVVRUQ7Ci0JCWZyYW1lLT52NGwyX2J1Zi5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX0RPTkU7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT53cSk7CS8qIGV2ZW50ID0gbmV3IGZyYW1lICovCi0JCWkgPSAoZ3NwY2FfZGV2LT5mcl9pICsgMSkgJSBnc3BjYV9kZXYtPm5mcmFtZXM7Ci0JCWdzcGNhX2Rldi0+ZnJfaSA9IGk7Ci0JCVBERUJVRyhEX0ZSQU0sICJmcmFtZSBjb21wbGV0ZSBsZW46JWQgcTolZCBpOiVkIG86JWQiLAotCQkJZnJhbWUtPnY0bDJfYnVmLmJ5dGVzdXNlZCwKLQkJCWdzcGNhX2Rldi0+ZnJfcSwKLQkJCWksCi0JCQlnc3BjYV9kZXYtPmZyX28pOworCQlpID0gYXRvbWljX3JlYWQoJmdzcGNhX2Rldi0+ZnJfaSk7CiAJCWogPSBnc3BjYV9kZXYtPmZyX3F1ZXVlW2ldOwotCQlnc3BjYV9kZXYtPmN1cl9mcmFtZSA9ICZnc3BjYV9kZXYtPmZyYW1lW2pdOworCQlmcmFtZSA9ICZnc3BjYV9kZXYtPmZyYW1lW2pdOworCQlmcmFtZS0+djRsMl9idWYuYnl0ZXN1c2VkID0gZ3NwY2FfZGV2LT5pbWFnZV9sZW47CisJCWZyYW1lLT52NGwyX2J1Zi5mbGFncyA9IChmcmFtZS0+djRsMl9idWYuZmxhZ3MKKwkJCQkJIHwgVjRMMl9CVUZfRkxBR19ET05FKQorCQkJCQkmIH5WNEwyX0JVRl9GTEFHX1FVRVVFRDsKKwkJaSA9IChpICsgMSkgJSBHU1BDQV9NQVhfRlJBTUVTOworCQlhdG9taWNfc2V0KCZnc3BjYV9kZXYtPmZyX2ksIGkpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+d3EpOwkvKiBldmVudCA9IG5ldyBmcmFtZSAqLworCQlQREVCVUcoRF9GUkFNLCAiZnJhbWUgY29tcGxldGUgbGVuOiVkIiwKKwkJCWZyYW1lLT52NGwyX2J1Zi5ieXRlc3VzZWQpOworCQlnc3BjYV9kZXYtPmltYWdlID0gTlVMTDsKKwkJZ3NwY2FfZGV2LT5pbWFnZV9sZW4gPSAwOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woZ3NwY2FfZnJhbWVfYWRkKTsKQEAgLTUwNiwzNiArNDk2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgKnJ2bWFsbG9jKGxvbmcgc2l6ZSkKLXsKLQl2b2lkICptZW07Ci0JdW5zaWduZWQgbG9uZyBhZHI7Ci0KLQltZW0gPSB2bWFsbG9jXzMyKHNpemUpOwotCWlmIChtZW0gIT0gTlVMTCkgewotCQlhZHIgPSAodW5zaWduZWQgbG9uZykgbWVtOwotCQl3aGlsZSAoc2l6ZSA+IDApIHsKLQkJCVNldFBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKikgYWRyKSk7Ci0JCQlhZHIgKz0gUEFHRV9TSVpFOwotCQkJc2l6ZSAtPSBQQUdFX1NJWkU7Ci0JCX0KLQl9Ci0JcmV0dXJuIG1lbTsKLX0KLQotc3RhdGljIHZvaWQgcnZmcmVlKHZvaWQgKm1lbSwgbG9uZyBzaXplKQotewotCXVuc2lnbmVkIGxvbmcgYWRyOwotCi0JYWRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKLQl3aGlsZSAoc2l6ZSA+IDApIHsKLQkJQ2xlYXJQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKCh2b2lkICopIGFkcikpOwotCQlhZHIgKz0gUEFHRV9TSVpFOwotCQlzaXplIC09IFBBR0VfU0laRTsKLQl9Ci0JdmZyZWUobWVtKTsKLX0KLQogc3RhdGljIGludCBmcmFtZV9hbGxvYyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQl1bnNpZ25lZCBpbnQgY291bnQpCiB7CkBAIC01NDgsOSArNTA4LDkgQEAKIAlQREVCVUcoRF9TVFJFQU0sICJmcmFtZSBhbGxvYyBmcnN6OiAlZCIsIGZyc3opOwogCWZyc3ogPSBQQUdFX0FMSUdOKGZyc3opOwogCWdzcGNhX2Rldi0+ZnJzeiA9IGZyc3o7Ci0JaWYgKGNvdW50ID4gR1NQQ0FfTUFYX0ZSQU1FUykKLQkJY291bnQgPSBHU1BDQV9NQVhfRlJBTUVTOwotCWdzcGNhX2Rldi0+ZnJidWYgPSBydm1hbGxvYyhmcnN6ICogY291bnQpOworCWlmIChjb3VudCA+PSBHU1BDQV9NQVhfRlJBTUVTKQorCQljb3VudCA9IEdTUENBX01BWF9GUkFNRVMgLSAxOworCWdzcGNhX2Rldi0+ZnJidWYgPSB2bWFsbG9jXzMyKGZyc3ogKiBjb3VudCk7CiAJaWYgKCFnc3BjYV9kZXYtPmZyYnVmKSB7CiAJCWVycigiZnJhbWUgYWxsb2MgZmFpbGVkIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNTY1LDE0ICs1MjUsMTIgQEAKIAkJZnJhbWUtPnY0bDJfYnVmLmxlbmd0aCA9IGZyc3o7CiAJCWZyYW1lLT52NGwyX2J1Zi5tZW1vcnkgPSBnc3BjYV9kZXYtPm1lbW9yeTsKIAkJZnJhbWUtPnY0bDJfYnVmLnNlcXVlbmNlID0gMDsKLQkJZnJhbWUtPmRhdGEgPSBmcmFtZS0+ZGF0YV9lbmQgPQotCQkJCQlnc3BjYV9kZXYtPmZyYnVmICsgaSAqIGZyc3o7CisJCWZyYW1lLT5kYXRhID0gZ3NwY2FfZGV2LT5mcmJ1ZiArIGkgKiBmcnN6OwogCQlmcmFtZS0+djRsMl9idWYubS5vZmZzZXQgPSBpICogZnJzejsKIAl9Ci0JZ3NwY2FfZGV2LT5mcl9pID0gZ3NwY2FfZGV2LT5mcl9vID0gZ3NwY2FfZGV2LT5mcl9xID0gMDsKLQlnc3BjYV9kZXYtPmN1cl9mcmFtZSA9ICZnc3BjYV9kZXYtPmZyYW1lWzBdOwotCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOwotCWdzcGNhX2Rldi0+c2VxdWVuY2UgPSAwOworCWF0b21pY19zZXQoJmdzcGNhX2Rldi0+ZnJfcSwgMCk7CisJYXRvbWljX3NldCgmZ3NwY2FfZGV2LT5mcl9pLCAwKTsKKwlnc3BjYV9kZXYtPmZyX28gPSAwOwogCXJldHVybiAwOwogfQogCkBAIC01ODIsOCArNTQwLDcgQEAKIAogCVBERUJVRyhEX1NUUkVBTSwgImZyYW1lIGZyZWUiKTsKIAlpZiAoZ3NwY2FfZGV2LT5mcmJ1ZiAhPSBOVUxMKSB7Ci0JCXJ2ZnJlZShnc3BjYV9kZXYtPmZyYnVmLAotCQkJZ3NwY2FfZGV2LT5uZnJhbWVzICogZ3NwY2FfZGV2LT5mcnN6KTsKKwkJdmZyZWUoZ3NwY2FfZGV2LT5mcmJ1Zik7CiAJCWdzcGNhX2Rldi0+ZnJidWYgPSBOVUxMOwogCQlmb3IgKGkgPSAwOyBpIDwgZ3NwY2FfZGV2LT5uZnJhbWVzOyBpKyspCiAJCQlnc3BjYV9kZXYtPmZyYW1lW2ldLmRhdGEgPSBOVUxMOwpAQCAtNjgzLDEyICs2NDAsMTYgQEAKIAkJCQkgICA6IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0M7CiAJaSA9IGdzcGNhX2Rldi0+YWx0OwkJCS8qIHByZXZpb3VzIGFsdCBzZXR0aW5nICovCiAJaWYgKGdzcGNhX2Rldi0+Y2FtLnJldmVyc2VfYWx0cykgeworCQlpZiAoZ3NwY2FfZGV2LT5hdWRpbykKKwkJCWkrKzsKIAkJd2hpbGUgKCsraSA8IGdzcGNhX2Rldi0+bmJhbHQpIHsKIAkJCWVwID0gYWx0X3hmZXIoJmludGYtPmFsdHNldHRpbmdbaV0sIHhmZXIpOwogCQkJaWYgKGVwKQogCQkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIHsKKwkJaWYgKGdzcGNhX2Rldi0+YXVkaW8pCisJCQlpLS07CiAJCXdoaWxlICgtLWkgPj0gMCkgewogCQkJZXAgPSBhbHRfeGZlcigmaW50Zi0+YWx0c2V0dGluZ1tpXSwgeGZlcik7CiAJCQlpZiAoZXApCkBAIC04MTEsNiArNzcyLDEyIEBACiAJCWdvdG8gb3V0OwogCX0KIAorCS8qIHJlc2V0IHRoZSBzdHJlYW1pbmcgdmFyaWFibGVzICovCisJZ3NwY2FfZGV2LT5pbWFnZSA9IE5VTEw7CisJZ3NwY2FfZGV2LT5pbWFnZV9sZW4gPSAwOworCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOworCWdzcGNhX2Rldi0+c2VxdWVuY2UgPSAwOworCiAJZ3NwY2FfZGV2LT51c2JfZXJyID0gMDsKIAogCS8qIHNldCB0aGUgaGlnaGVyIGFsdGVybmF0ZSBzZXR0aW5nIGFuZApAQCAtMTQzMywzNCArMTQwMCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLypmaXhtZTogaGF2ZSBhbiBhdWRpbyBmbGFnIGluIGdzcGNhX2Rldj8qLwotc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCSBzdHJ1Y3QgdjRsMl9hdWRpbyAqYXVkaW8pCi17Ci0JaWYgKGF1ZGlvLT5pbmRleCAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCSBzdHJ1Y3QgdjRsMl9hdWRpbyAqYXVkaW8pCi17Ci0Jc3RyY3B5KGF1ZGlvLT5uYW1lLCAiTWljcm9waG9uZSIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19lbnVtYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkgc3RydWN0IHY0bDJfYXVkaW8gKmF1ZGlvKQotewotCWlmIChhdWRpby0+aW5kZXggIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzdHJjcHkoYXVkaW8tPm5hbWUsICJNaWNyb3Bob25lIik7Ci0JYXVkaW8tPmNhcGFiaWxpdHkgPSAwOwotCWF1ZGlvLT5tb2RlID0gMDsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB2aWRpb2NfcXVlcnltZW51KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgIHN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqcW1lbnUpCiB7CkBAIC0xNTA0LDcgKzE0NDMsOCBAQAogCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IHByaXY7CiAJaW50IGksIHJldCA9IDAsIHN0cmVhbWluZzsKIAotCXN3aXRjaCAocmItPm1lbW9yeSkgeworCWkgPSByYi0+bWVtb3J5OwkJCS8qIChhdm9pZCBjb21waWxhdGlvbiB3YXJuaW5nKSAqLworCXN3aXRjaCAoaSkgewogCWNhc2UgR1NQQ0FfTUVNT1JZX1JFQUQ6CQkJLyogKGludGVybmFsIGNhbGwpICovCiAJY2FzZSBWNEwyX01FTU9SWV9NTUFQOgogCWNhc2UgVjRMMl9NRU1PUllfVVNFUlBUUjoKQEAgLTE2MjYsNyArMTU2Niw3IEBACiAJCQkJZW51bSB2NGwyX2J1Zl90eXBlIGJ1Zl90eXBlKQogewogCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IHByaXY7Ci0JaW50IGksIHJldDsKKwlpbnQgcmV0OwogCiAJaWYgKGJ1Zl90eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNjUwLDEyICsxNTkwLDEwIEBACiAJZ3NwY2Ffc3RyZWFtX29mZihnc3BjYV9kZXYpOwogCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CiAKLQkvKiBlbXB0eSB0aGUgYXBwbGljYXRpb24gcXVldWVzICovCi0JZm9yIChpID0gMDsgaSA8IGdzcGNhX2Rldi0+bmZyYW1lczsgaSsrKQotCQlnc3BjYV9kZXYtPmZyYW1lW2ldLnY0bDJfYnVmLmZsYWdzICY9IH5CVUZfQUxMX0ZMQUdTOwotCWdzcGNhX2Rldi0+ZnJfaSA9IGdzcGNhX2Rldi0+ZnJfbyA9IGdzcGNhX2Rldi0+ZnJfcSA9IDA7Ci0JZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7Ci0JZ3NwY2FfZGV2LT5zZXF1ZW5jZSA9IDA7CisJLyogZW1wdHkgdGhlIHRyYW5zZmVyIHF1ZXVlcyAqLworCWF0b21pY19zZXQoJmdzcGNhX2Rldi0+ZnJfcSwgMCk7CisJYXRvbWljX3NldCgmZ3NwY2FfZGV2LT5mcl9pLCAwKTsKKwlnc3BjYV9kZXYtPmZyX28gPSAwOwogCXJldCA9IDA7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnF1ZXVlX2xvY2spOwpAQCAtMTczMiw3ICsxNjcwLDcgQEAKIAlpbnQgbjsKIAogCW4gPSBwYXJtLT5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnM7Ci0JaWYgKG4gPT0gMCB8fCBuID4gR1NQQ0FfTUFYX0ZSQU1FUykKKwlpZiAobiA9PSAwIHx8IG4gPj0gR1NQQ0FfTUFYX0ZSQU1FUykKIAkJcGFybS0+cGFybS5jYXB0dXJlLnJlYWRidWZmZXJzID0gZ3NwY2FfZGV2LT5uYnVmcmVhZDsKIAllbHNlCiAJCWdzcGNhX2Rldi0+bmJ1ZnJlYWQgPSBuOwpAQCAtMTc1NSw0OSArMTY5Myw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLXN0YXRpYyBpbnQgdmlkaW9jZ21idWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQlzdHJ1Y3QgdmlkZW9fbWJ1ZiAqbWJ1ZikKLXsKLQlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JaW50IGk7Ci0KLQlQREVCVUcoRF9TVFJFQU0sICJjZ21idWYiKTsKLQlpZiAoZ3NwY2FfZGV2LT5uZnJhbWVzID09IDApIHsKLQkJaW50IHJldDsKLQotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgZm10OwotCi0JCQlmbXQudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQkJCWkgPSBnc3BjYV9kZXYtPmNhbS5ubW9kZXMgLSAxOwkvKiBoaWdoZXN0IG1vZGUgKi8KLQkJCWZtdC5mbXQucGl4LndpZHRoID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbaV0ud2lkdGg7Ci0JCQlmbXQuZm10LnBpeC5oZWlnaHQgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtpXS5oZWlnaHQ7Ci0JCQlmbXQuZm10LnBpeC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9CR1IyNDsKLQkJCXJldCA9IHZpZGlvY19zX2ZtdF92aWRfY2FwKGZpbGUsIHByaXYsICZmbXQpOwotCQkJaWYgKHJldCAhPSAwKQotCQkJCXJldHVybiByZXQ7Ci0JCX0KLQkJewotCQkJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgcmI7Ci0KLQkJCW1lbXNldCgmcmIsIDAsIHNpemVvZiByYik7Ci0JCQlyYi5jb3VudCA9IDQ7Ci0JCQlyYi50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCQkJcmIubWVtb3J5ID0gVjRMMl9NRU1PUllfTU1BUDsKLQkJCXJldCA9IHZpZGlvY19yZXFidWZzKGZpbGUsIHByaXYsICZyYik7Ci0JCQlpZiAocmV0ICE9IDApCi0JCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQltYnVmLT5mcmFtZXMgPSBnc3BjYV9kZXYtPm5mcmFtZXM7Ci0JbWJ1Zi0+c2l6ZSA9IGdzcGNhX2Rldi0+ZnJzeiAqIGdzcGNhX2Rldi0+bmZyYW1lczsKLQlmb3IgKGkgPSAwOyBpIDwgbWJ1Zi0+ZnJhbWVzOyBpKyspCi0JCW1idWYtPm9mZnNldHNbaV0gPSBnc3BjYV9kZXYtPmZyYW1lW2ldLnY0bDJfYnVmLm0ub2Zmc2V0OwotCXJldHVybiAwOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgZGV2X21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKQEAgLTE4MzgsMTIgKzE3MzMsNyBAQAogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9Ci0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0JLyogdjRsMSBtYXBzIGFsbCB0aGUgYnVmZmVycyAqLwotCWlmIChpICE9IDAKLQkgICAgfHwgc2l6ZSAhPSBmcmFtZS0+djRsMl9idWYubGVuZ3RoICogZ3NwY2FfZGV2LT5uZnJhbWVzKQotI2VuZGlmCi0JICAgIGlmIChzaXplICE9IGZyYW1lLT52NGwyX2J1Zi5sZW5ndGgpIHsKKwlpZiAoc2l6ZSAhPSBmcmFtZS0+djRsMl9idWYubGVuZ3RoKSB7CiAJCVBERUJVRyhEX1NUUkVBTSwgIm1tYXAgYmFkIHNpemUiKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CkBAIC0xODgzLDIxICsxNzczLDE3IEBACiBzdGF0aWMgaW50IGZyYW1lX3dhaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJaW50IG5vbmJsb2NrX2luZykKIHsKLQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lOwotCWludCBpLCBqLCByZXQ7CisJaW50IGksIHJldDsKIAogCS8qIGNoZWNrIGlmIGEgZnJhbWUgaXMgcmVhZHkgKi8KIAlpID0gZ3NwY2FfZGV2LT5mcl9vOwotCWogPSBnc3BjYV9kZXYtPmZyX3F1ZXVlW2ldOwotCWZyYW1lID0gJmdzcGNhX2Rldi0+ZnJhbWVbal07Ci0KLQlpZiAoIShmcmFtZS0+djRsMl9idWYuZmxhZ3MgJiBWNEwyX0JVRl9GTEFHX0RPTkUpKSB7CisJaWYgKGkgPT0gYXRvbWljX3JlYWQoJmdzcGNhX2Rldi0+ZnJfaSkpIHsKIAkJaWYgKG5vbmJsb2NrX2luZykKIAkJCXJldHVybiAtRUFHQUlOOwogCiAJCS8qIHdhaXQgdGlsbCBhIGZyYW1lIGlzIHJlYWR5ICovCiAJCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGdzcGNhX2Rldi0+d3EsCi0JCQkoZnJhbWUtPnY0bDJfYnVmLmZsYWdzICYgVjRMMl9CVUZfRkxBR19ET05FKSB8fAorCQkJaSAhPSBhdG9taWNfcmVhZCgmZ3NwY2FfZGV2LT5mcl9pKSB8fAogCQkJIWdzcGNhX2Rldi0+c3RyZWFtaW5nIHx8ICFnc3BjYV9kZXYtPnByZXNlbnQsCiAJCQltc2Vjc190b19qaWZmaWVzKDMwMDApKTsKIAkJaWYgKHJldCA8IDApCkBAIC0xOTA2LDExICsxNzkyLDcgQEAKIAkJCXJldHVybiAtRUlPOwogCX0KIAotCWdzcGNhX2Rldi0+ZnJfbyA9IChpICsgMSkgJSBnc3BjYV9kZXYtPm5mcmFtZXM7Ci0JUERFQlVHKERfRlJBTSwgImZyYW1lIHdhaXQgcTolZCBpOiVkIG86JWQiLAotCQlnc3BjYV9kZXYtPmZyX3EsCi0JCWdzcGNhX2Rldi0+ZnJfaSwKLQkJZ3NwY2FfZGV2LT5mcl9vKTsKKwlnc3BjYV9kZXYtPmZyX28gPSAoaSArIDEpICUgR1NQQ0FfTUFYX0ZSQU1FUzsKIAogCWlmIChnc3BjYV9kZXYtPnNkX2Rlc2MtPmRxX2NhbGxiYWNrKSB7CiAJCW11dGV4X2xvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOwpAQCAtMTkxOSw3ICsxODAxLDcgQEAKIAkJCWdzcGNhX2Rldi0+c2RfZGVzYy0+ZHFfY2FsbGJhY2soZ3NwY2FfZGV2KTsKIAkJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKIAl9Ci0JcmV0dXJuIGo7CisJcmV0dXJuIGdzcGNhX2Rldi0+ZnJfcXVldWVbaV07CiB9CiAKIC8qCkBAIC0yMDI0LDE1ICsxOTA2LDkgQEAKIAl9CiAKIAkvKiBwdXQgdGhlIGJ1ZmZlciBpbiB0aGUgJ3F1ZXVlZCcgcXVldWUgKi8KLQlpID0gZ3NwY2FfZGV2LT5mcl9xOworCWkgPSBhdG9taWNfcmVhZCgmZ3NwY2FfZGV2LT5mcl9xKTsKIAlnc3BjYV9kZXYtPmZyX3F1ZXVlW2ldID0gaW5kZXg7Ci0JaWYgKGdzcGNhX2Rldi0+ZnJfaSA9PSBpKQotCQlnc3BjYV9kZXYtPmN1cl9mcmFtZSA9IGZyYW1lOwotCWdzcGNhX2Rldi0+ZnJfcSA9IChpICsgMSkgJSBnc3BjYV9kZXYtPm5mcmFtZXM7Ci0JUERFQlVHKERfRlJBTSwgInFidWYgcTolZCBpOiVkIG86JWQiLAotCQlnc3BjYV9kZXYtPmZyX3EsCi0JCWdzcGNhX2Rldi0+ZnJfaSwKLQkJZ3NwY2FfZGV2LT5mcl9vKTsKKwlhdG9taWNfc2V0KCZnc3BjYV9kZXYtPmZyX3EsIChpICsgMSkgJSBHU1BDQV9NQVhfRlJBTUVTKTsKIAogCXY0bDJfYnVmLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX1FVRVVFRDsKIAl2NGwyX2J1Zi0+ZmxhZ3MgJj0gflY0TDJfQlVGX0ZMQUdfRE9ORTsKQEAgLTIwODgsNyArMTk2NCw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGRldl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQogewogCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlpbnQgaSwgcmV0OworCWludCByZXQ7CiAKIAlQREVCVUcoRF9GUkFNLCAicG9sbCIpOwogCkBAIC0yMTA2LDExICsxOTgyLDkgQEAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnF1ZXVlX2xvY2spICE9IDApCiAJCXJldHVybiBQT0xMRVJSOwogCi0JLyogY2hlY2sgdGhlIG5leHQgaW5jb21pbmcgYnVmZmVyICovCi0JaSA9IGdzcGNhX2Rldi0+ZnJfbzsKLQlpID0gZ3NwY2FfZGV2LT5mcl9xdWV1ZVtpXTsKLQlpZiAoZ3NwY2FfZGV2LT5mcmFtZVtpXS52NGwyX2J1Zi5mbGFncyAmIFY0TDJfQlVGX0ZMQUdfRE9ORSkKLQkJcmV0ID0gUE9MTElOIHwgUE9MTFJETk9STTsJLyogc29tZXRoaW5nIHRvIHJlYWQgKi8KKwkvKiBjaGVjayBpZiBhbiBpbWFnZSBoYXMgYmVlbiByZWNlaXZlZCAqLworCWlmIChnc3BjYV9kZXYtPmZyX28gIT0gYXRvbWljX3JlYWQoJmdzcGNhX2Rldi0+ZnJfaSkpCisJCXJldCA9IFBPTExJTiB8IFBPTExSRE5PUk07CS8qIHllcyAqLwogCWVsc2UKIAkJcmV0ID0gMDsKIAltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+cXVldWVfbG9jayk7CkBAIC0yMjE0LDkgKzIwODgsNiBAQAogCS52aWRpb2NfcXVlcnljdHJsCT0gdmlkaW9jX3F1ZXJ5Y3RybCwKIAkudmlkaW9jX2dfY3RybAkJPSB2aWRpb2NfZ19jdHJsLAogCS52aWRpb2Nfc19jdHJsCQk9IHZpZGlvY19zX2N0cmwsCi0JLnZpZGlvY19nX2F1ZGlvCQk9IHZpZGlvY19nX2F1ZGlvLAotCS52aWRpb2Nfc19hdWRpbwkJPSB2aWRpb2Nfc19hdWRpbywKLQkudmlkaW9jX2VudW1hdWRpbwk9IHZpZGlvY19lbnVtYXVkaW8sCiAJLnZpZGlvY19xdWVyeW1lbnUJPSB2aWRpb2NfcXVlcnltZW51LAogCS52aWRpb2NfZW51bV9pbnB1dAk9IHZpZGlvY19lbnVtX2lucHV0LAogCS52aWRpb2NfZ19pbnB1dAkJPSB2aWRpb2NfZ19pbnB1dCwKQEAgLTIyMzUsOSArMjEwNiw2IEBACiAJLnZpZGlvY19zX3JlZ2lzdGVyCT0gdmlkaW9jX3NfcmVnaXN0ZXIsCiAjZW5kaWYKIAkudmlkaW9jX2dfY2hpcF9pZGVudAk9IHZpZGlvY19nX2NoaXBfaWRlbnQsCi0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0JLnZpZGlvY2dtYnVmICAgICAgICAgID0gdmlkaW9jZ21idWYsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGdzcGNhX3RlbXBsYXRlID0gewpAQCAtMjI1MywzMSArMjEyMSwxOCBAQAogICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBieSB0aGUgc3ViLWRyaXZlciB3aGVuIGl0IGlzCiAgKiBjYWxsZWQgZm9yIHByb2JpbmcgYSBuZXcgZGV2aWNlLgogICovCi1pbnQgZ3NwY2FfZGV2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAoraW50IGdzcGNhX2Rldl9wcm9iZTIoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCwKIAkJY29uc3Qgc3RydWN0IHNkX2Rlc2MgKnNkX2Rlc2MsCiAJCWludCBkZXZfc2l6ZSwKIAkJc3RydWN0IG1vZHVsZSAqbW9kdWxlKQogewotCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgKmludGVyZmFjZTsKIAlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CiAJaW50IHJldDsKIAogCVBERUJVRyhEX1BST0JFLCAicHJvYmluZyAlMDR4OiUwNHgiLCBpZC0+aWRWZW5kb3IsIGlkLT5pZFByb2R1Y3QpOwogCi0JLyogd2UgZG9uJ3QgaGFuZGxlIG11bHRpLWNvbmZpZyBjYW1lcmFzICovCi0JaWYgKGRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgIT0gMSkgewotCQlQREVCVUcoRF9FUlIsICJUb28gbWFueSBjb25maWciKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JLyogdGhlIFVTQiB2aWRlbyBpbnRlcmZhY2UgbXVzdCBiZSB0aGUgZmlyc3Qgb25lICovCi0JaW50ZXJmYWNlID0gJmludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjOwotCWlmIChkZXYtPmNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlcyAhPSAxICYmCi0JICAgIGludGVyZmFjZS0+YkludGVyZmFjZU51bWJlciAhPSAwKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCS8qIGNyZWF0ZSB0aGUgZGV2aWNlICovCiAJaWYgKGRldl9zaXplIDwgc2l6ZW9mICpnc3BjYV9kZXYpCiAJCWRldl9zaXplID0gc2l6ZW9mICpnc3BjYV9kZXY7CkBAIC0yMjkzLDggKzIxNDgsMjYgQEAKIAkJZ290byBvdXQ7CiAJfQogCWdzcGNhX2Rldi0+ZGV2ID0gZGV2OwotCWdzcGNhX2Rldi0+aWZhY2UgPSBpbnRlcmZhY2UtPmJJbnRlcmZhY2VOdW1iZXI7CisJZ3NwY2FfZGV2LT5pZmFjZSA9IGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CiAJZ3NwY2FfZGV2LT5uYmFsdCA9IGludGYtPm51bV9hbHRzZXR0aW5nOworCisJLyogY2hlY2sgaWYgYW55IGF1ZGlvIGRldmljZSAqLworCWlmIChkZXYtPmNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlcyAhPSAxKSB7CisJCWludCBpOworCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjI7CisKKwkJZm9yIChpID0gMDsgaSA8IGRldi0+Y29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzOyBpKyspIHsKKwkJCWludGYyID0gZGV2LT5jb25maWctPmludGVyZmFjZVtpXTsKKwkJCWlmIChpbnRmMiAhPSBOVUxMCisJCQkgJiYgaW50ZjItPmFsdHNldHRpbmcgIT0gTlVMTAorCQkJICYmIGludGYyLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyA9PQorCQkJCQkgVVNCX0NMQVNTX0FVRElPKSB7CisJCQkJZ3NwY2FfZGV2LT5hdWRpbyA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKIAlnc3BjYV9kZXYtPnNkX2Rlc2MgPSBzZF9kZXNjOwogCWdzcGNhX2Rldi0+bmJ1ZnJlYWQgPSAyOwogCWdzcGNhX2Rldi0+ZW1wdHlfcGFja2V0ID0gLTE7CS8qIGRvbid0IGNoZWNrIHRoZSBlbXB0eSBwYWNrZXRzICovCkBAIC0yMzQ1LDYgKzIyMTgsMzEgQEAKIAlrZnJlZShnc3BjYV9kZXYpOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGdzcGNhX2Rldl9wcm9iZTIpOworCisvKiBzYW1lIGZ1bmN0aW9uIGFzIHRoZSBwcmV2aW91cyBvbmUsIGJ1dCBjaGVjayB0aGUgaW50ZXJmYWNlICovCitpbnQgZ3NwY2FfZGV2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsCisJCWNvbnN0IHN0cnVjdCBzZF9kZXNjICpzZF9kZXNjLAorCQlpbnQgZGV2X3NpemUsCisJCXN0cnVjdCBtb2R1bGUgKm1vZHVsZSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKworCS8qIHdlIGRvbid0IGhhbmRsZSBtdWx0aS1jb25maWcgY2FtZXJhcyAqLworCWlmIChkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpIHsKKwkJUERFQlVHKERfRVJSLCAiJTA0eDolMDR4IHRvbyBtYW55IGNvbmZpZyIsCisJCQkJaWQtPmlkVmVuZG9yLCBpZC0+aWRQcm9kdWN0KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogdGhlIFVTQiB2aWRlbyBpbnRlcmZhY2UgbXVzdCBiZSB0aGUgZmlyc3Qgb25lICovCisJaWYgKGRldi0+Y29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzICE9IDEKKwkgJiYgaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciAhPSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBnc3BjYV9kZXZfcHJvYmUyKGludGYsIGlkLCBzZF9kZXNjLCBkZXZfc2l6ZSwgbW9kdWxlKTsKK30KIEVYUE9SVF9TWU1CT0woZ3NwY2FfZGV2X3Byb2JlKTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaAppbmRleCA4Yjk2M2RmLi5iNzQ5YzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oCkBAIC03LDcgKzcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKIC8qIGNvbXBpbGF0aW9uIG9wdGlvbiAqLwogI2RlZmluZSBHU1BDQV9ERUJVRyAxCkBAIC0xNDgsNyArMTQ3LDYgQEAKIAogc3RydWN0IGdzcGNhX2ZyYW1lIHsKIAlfX3U4ICpkYXRhOwkJCS8qIGZyYW1lIGJ1ZmZlciAqLwotCV9fdTggKmRhdGFfZW5kOwkJCS8qIGVuZCBvZiBmcmFtZSB3aGlsZSBmaWxsaW5nICovCiAJaW50IHZtYV91c2VfY291bnQ7CiAJc3RydWN0IHY0bDJfYnVmZmVyIHY0bDJfYnVmOwogfTsKQEAgLTE3NywxMyArMTc1LDE0IEBACiAKIAlfX3U4ICpmcmJ1ZjsJCQkJLyogYnVmZmVyIGZvciBuZnJhbWVzICovCiAJc3RydWN0IGdzcGNhX2ZyYW1lIGZyYW1lW0dTUENBX01BWF9GUkFNRVNdOwotCXN0cnVjdCBnc3BjYV9mcmFtZSAqY3VyX2ZyYW1lOwkJLyogZnJhbWUgYmVlaW5nIGZpbGxlZCAqLworCXU4ICppbWFnZTsJCQkJLyogaW1hZ2UgYmVlaW5nIGZpbGxlZCAqLwogCV9fdTMyIGZyc3o7CQkJCS8qIGZyYW1lIHNpemUgKi8KLQljaGFyIG5mcmFtZXM7CQkJCS8qIG51bWJlciBvZiBmcmFtZXMgKi8KLQljaGFyIGZyX2k7CQkJCS8qIGZyYW1lIGJlaW5nIGZpbGxlZCAqLwotCWNoYXIgZnJfcTsJCQkJLyogbmV4dCBmcmFtZSB0byBxdWV1ZSAqLwotCWNoYXIgZnJfbzsJCQkJLyogbmV4dCBmcmFtZSB0byBkZXF1ZXVlICovCisJdTMyIGltYWdlX2xlbjsJCQkJLyogY3VycmVudCBsZW5ndGggb2YgaW1hZ2UgKi8KKwlhdG9taWNfdCBmcl9xOwkJCQkvKiBuZXh0IGZyYW1lIHRvIHF1ZXVlICovCisJYXRvbWljX3QgZnJfaTsJCQkJLyogZnJhbWUgYmVpbmcgZmlsbGVkICovCiAJc2lnbmVkIGNoYXIgZnJfcXVldWVbR1NQQ0FfTUFYX0ZSQU1FU107CS8qIGZyYW1lIHF1ZXVlICovCisJY2hhciBuZnJhbWVzOwkJCQkvKiBudW1iZXIgb2YgZnJhbWVzICovCisJdTggZnJfbzsJCQkJLyogbmV4dCBmcmFtZSB0byBkZXF1ZXVlICovCiAJX191OCBsYXN0X3BhY2tldF90eXBlOwogCV9fczggZW1wdHlfcGFja2V0OwkJLyogaWYgKC0xKSBkb24ndCBjaGVjayBlbXB0eSBwYWNrZXRzICovCiAJX191OCBzdHJlYW1pbmc7CkBAIC0xOTksNiArMTk4LDcgQEAKIAlzdHJ1Y3QgbXV0ZXggcmVhZF9sb2NrOwkJLyogcmVhZCBwcm90ZWN0aW9uICovCiAJc3RydWN0IG11dGV4IHF1ZXVlX2xvY2s7CS8qIElTT0MgcXVldWUgcHJvdGVjdGlvbiAqLwogCWludCB1c2JfZXJyOwkJCS8qIFVTQiBlcnJvciAtIHByb3RlY3RlZCBieSB1c2JfbG9jayAqLworCXUxNiBwa3Rfc2l6ZTsJCQkvKiBJU09DIHBhY2tldCBzaXplICovCiAjaWZkZWYgQ09ORklHX1BNCiAJY2hhciBmcm96ZW47CQkJLyogc3VzcGVuZCAtIHJlc3VtZSAqLwogI2VuZGlmCkBAIC0yMDksNyArMjA5LDcgQEAKIAlfX3U4IGlmYWNlOwkJCS8qIFVTQiBpbnRlcmZhY2UgbnVtYmVyICovCiAJX191OCBhbHQ7CQkJLyogVVNCIGFsdGVybmF0ZSBzZXR0aW5nICovCiAJX191OCBuYmFsdDsJCQkvKiBudW1iZXIgb2YgVVNCIGFsdGVybmF0ZSBzZXR0aW5ncyAqLwotCXUxNiBwa3Rfc2l6ZTsJCQkvKiBJU09DIHBhY2tldCBzaXplICovCisJdTggYXVkaW87CQkJLyogcHJlc2VuY2Ugb2YgYXVkaW8gZGV2aWNlICovCiB9OwogCiBpbnQgZ3NwY2FfZGV2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLApAQCAtMjE3LDEyICsyMTcsMTYgQEAKIAkJY29uc3Qgc3RydWN0IHNkX2Rlc2MgKnNkX2Rlc2MsCiAJCWludCBkZXZfc2l6ZSwKIAkJc3RydWN0IG1vZHVsZSAqbW9kdWxlKTsKK2ludCBnc3BjYV9kZXZfcHJvYmUyKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsCisJCWNvbnN0IHN0cnVjdCBzZF9kZXNjICpzZF9kZXNjLAorCQlpbnQgZGV2X3NpemUsCisJCXN0cnVjdCBtb2R1bGUgKm1vZHVsZSk7CiB2b2lkIGdzcGNhX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOwogdm9pZCBnc3BjYV9mcmFtZV9hZGQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJZW51bSBnc3BjYV9wYWNrZXRfdHlwZSBwYWNrZXRfdHlwZSwKIAkJCWNvbnN0IHU4ICpkYXRhLAogCQkJaW50IGxlbik7Ci1zdHJ1Y3QgZ3NwY2FfZnJhbWUgKmdzcGNhX2dldF9pX2ZyYW1lKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CiAjaWZkZWYgQ09ORklHX1BNCiBpbnQgZ3NwY2Ffc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpOwogaW50IGdzcGNhX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2plaWxpbmouYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvamVpbGluai5jCmluZGV4IDg0ZWNkNTYuLjEyZDljZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvamVpbGluai5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvamVpbGluai5jCkBAIC01MCw3ICs1MCw3IEBACiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtfdGhyZWFkOwogCXU4IHF1YWxpdHk7CQkJCSAvKiBpbWFnZSBxdWFsaXR5ICovCiAJdTgganBlZ3F1YWw7CQkJCS8qIHdlYmNhbSBxdWFsaXR5ICovCi0JdTggKmpwZWdfaGRyOworCXU4IGpwZWdfaGRyW0pQRUdfSERSX1NaXTsKIH07CiAKIAlzdHJ1Y3QgamxqX2NvbW1hbmQgewpAQCAtMjgyLDcgKzI4Miw2IEBACiAJZGVzdHJveV93b3JrcXVldWUoZGV2LT53b3JrX3RocmVhZCk7CiAJZGV2LT53b3JrX3RocmVhZCA9IE5VTEw7CiAJbXV0ZXhfbG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7Ci0Ja2ZyZWUoZGV2LT5qcGVnX2hkcik7CiB9CiAKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLwpAQCAtMjk4LDkgKzI5Nyw2IEBACiAJaW50IHJldDsKIAogCS8qIGNyZWF0ZSB0aGUgSlBFRyBoZWFkZXIgKi8KLQlkZXYtPmpwZWdfaGRyID0ga21hbGxvYyhKUEVHX0hEUl9TWiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRldi0+anBlZ19oZHIgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CiAJanBlZ19kZWZpbmUoZGV2LT5qcGVnX2hkciwgZ3NwY2FfZGV2LT5oZWlnaHQsIGdzcGNhX2Rldi0+d2lkdGgsCiAJCQkweDIxKTsgICAgICAgICAgLyogSlBFRyA0MjIgKi8KIAlqcGVnX3NldF9xdWFsKGRldi0+anBlZ19oZHIsIGRldi0+cXVhbGl0eSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX2JyaWRnZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9icmlkZ2UuaAppbmRleCAxMTI3YTQwLi41MWFmM2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX2JyaWRnZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfYnJpZGdlLmgKQEAgLTE5LDYgKzE5LDcgQEAKICNpZm5kZWYgTTU2MDJfQlJJREdFX0hfCiAjZGVmaW5lIE01NjAyX0JSSURHRV9IXwogCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgImdzcGNhLmgiCiAKICNkZWZpbmUgTU9EVUxFX05BTUUgIkFMaSBtNTYwMiIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9jb3JlLmMKaW5kZXggNDI5NGM3NS4uYjA3M2Q2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9jb3JlLmMKQEAgLTMwNSwzMCArMzA1LDIzIEBACiAJCSAgICAgICBzZC0+ZnJhbWVfY291bnQpOwogCiAJfSBlbHNlIHsKLQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZTsKIAkJaW50IGN1cl9mcmFtZV9sZW47CiAKLQkJZnJhbWUgPSBnc3BjYV9nZXRfaV9mcmFtZShnc3BjYV9kZXYpOwotCQlpZiAoZnJhbWUgPT0gTlVMTCkgewotCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQljdXJfZnJhbWVfbGVuID0gZnJhbWUtPmRhdGFfZW5kIC0gZnJhbWUtPmRhdGE7CisJCWN1cl9mcmFtZV9sZW4gPSBnc3BjYV9kZXYtPmltYWdlX2xlbjsKIAkJLyogUmVtb3ZlIHVyYiBoZWFkZXIgKi8KIAkJZGF0YSArPSA0OwogCQlsZW4gLT0gNDsKIAotCQlpZiAoY3VyX2ZyYW1lX2xlbiArIGxlbiA8PSBmcmFtZS0+djRsMl9idWYubGVuZ3RoKSB7CisJCWlmIChjdXJfZnJhbWVfbGVuICsgbGVuIDw9IGdzcGNhX2Rldi0+ZnJzeikgewogCQkJUERFQlVHKERfRlJBTSwgIkNvbnRpbnVpbmcgZnJhbWUgJWQgY29weWluZyAlZCBieXRlcyIsCiAJCQkgICAgICAgc2QtPmZyYW1lX2NvdW50LCBsZW4pOwogCiAJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsCiAJCQkJCWRhdGEsIGxlbik7Ci0JCX0gZWxzZSBpZiAoZnJhbWUtPnY0bDJfYnVmLmxlbmd0aCAtIGN1cl9mcmFtZV9sZW4gPiAwKSB7CisJCX0gZWxzZSB7CiAJCQkvKiBBZGQgdGhlIHJlbWFpbmluZyBkYXRhIHVwIHRvIGZyYW1lIHNpemUgKi8KIAkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZGF0YSwKLQkJCQkgICAgZnJhbWUtPnY0bDJfYnVmLmxlbmd0aCAtIGN1cl9mcmFtZV9sZW4pOworCQkJCSAgICBnc3BjYV9kZXYtPmZyc3ogLSBjdXJfZnJhbWVfbGVuKTsKIAkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azgzYS5jCmluZGV4IDZiM2JlNGYuLmZiZDkxNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs4M2EuYwpAQCAtMTcsNyArMTcsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgIm01NjAyX3M1azgzYS5oIgogCiBzdGF0aWMgaW50IHM1azgzYV9zZXRfZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21hcnMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jCmluZGV4IDNkOTIyOWUuLjAzMWY3MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jCkBAIC00MSw3ICs0MSw3IEBACiAjZGVmaW5lIFFVQUxJVFlfTUFYIDcwCiAjZGVmaW5lIFFVQUxJVFlfREVGIDUwCiAKLQl1OCAqanBlZ19oZHI7CisJdTgganBlZ19oZHJbSlBFR19IRFJfU1pdOwogfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwpAQCAtMjAwLDkgKzIwMCw2IEBACiAJaW50IGk7CiAKIAkvKiBjcmVhdGUgdGhlIEpQRUcgaGVhZGVyICovCi0Jc2QtPmpwZWdfaGRyID0ga21hbGxvYyhKUEVHX0hEUl9TWiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzZC0+anBlZ19oZHIpCi0JCXJldHVybiAtRU5PTUVNOwogCWpwZWdfZGVmaW5lKHNkLT5qcGVnX2hkciwgZ3NwY2FfZGV2LT5oZWlnaHQsIGdzcGNhX2Rldi0+d2lkdGgsCiAJCQkweDIxKTsJCS8qIEpQRUcgNDIyICovCiAJanBlZ19zZXRfcXVhbChzZC0+anBlZ19oZHIsIHNkLT5xdWFsaXR5KTsKQEAgLTMxNywxMyArMzE0LDYgQEAKIAkJUERFQlVHKERfRVJSLCAiQ2FtZXJhIFN0b3AgZmFpbGVkIik7CiB9CiAKLXN0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQlrZnJlZShzZC0+anBlZ19oZHIpOwotfQotCiBzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQl1OCAqZGF0YSwJCQkvKiBpc29jIHBhY2tldCAqLwogCQkJaW50IGxlbikJCQkvKiBpc28gcGFja2V0IGxlbmd0aCAqLwpAQCAtNDg2LDcgKzQ3Niw2IEBACiAJLmluaXQgPSBzZF9pbml0LAogCS5zdGFydCA9IHNkX3N0YXJ0LAogCS5zdG9wTiA9IHNkX3N0b3BOLAotCS5zdG9wMCA9IHNkX3N0b3AwLAogCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAogCS5nZXRfamNvbXAgPSBzZF9nZXRfamNvbXAsCiAJLnNldF9qY29tcCA9IHNkX3NldF9qY29tcCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYwppbmRleCBmMzZlMTFhLi4yYjJjYmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCkBAIC00MSw2ICs0MSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSAiZ3NwY2EuaCIKIAorLyogVGhlIGpwZWdfaGRyIGlzIHVzZWQgYnkgdzk5NlhjZiBvbmx5ICovCisvKiBUaGUgQ09ORVhfQ0FNIGRlZmluZSBmb3IganBlZy5oIG5lZWRzIHJlbmFtaW5nLCBub3cgaXRzIHVzZWQgaGVyZSB0b28gKi8KKyNkZWZpbmUgQ09ORVhfQ0FNCisjaW5jbHVkZSAianBlZy5oIgorCiBNT0RVTEVfQVVUSE9SKCJKZWFuLUZyYW5jb2lzIE1vaW5lIDxodHRwOi8vbW9pbmVqZi5mcmVlLmZyPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJPVjUxOSBVU0IgQ2FtZXJhIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtOTAsNiArOTUsNyBAQAogI2RlZmluZSBRVUFMSVRZX0RFRiA1MAogCiAJX191OCBzdG9wcGVkOwkJLyogU3RyZWFtaW5nIGlzIHRlbXBvcmFyaWx5IHBhdXNlZCAqLworCV9fdTggZmlyc3RfZnJhbWU7CiAKIAlfX3U4IGZyYW1lX3JhdGU7CS8qIGN1cnJlbnQgRnJhbWVyYXRlICovCiAJX191OCBjbG9ja2RpdjsJCS8qIGNsb2NrZGl2IG92ZXJyaWRlICovCkBAIC0xMTUsNyArMTIxLDcgQEAKIAlpbnQgc2Vuc29yX2hlaWdodDsKIAlpbnQgc2Vuc29yX3JlZ19jYWNoZVsyNTZdOwogCi0JdTggKmpwZWdfaGRyOworCXU4IGpwZWdfaGRyW0pQRUdfSERSX1NaXTsKIH07CiAKIC8qIE5vdGUgdGhpcyBpcyBhIGJpdCBvZiBhIGhhY2ssIGJ1dCB0aGUgdzk5NjhjZiBkcml2ZXIgbmVlZHMgdGhlIGNvZGUgZm9yIGFsbApAQCAtMzE0Nyw3ICszMTUzLDcgQEAKIAlzZC0+YXV0b2JyaWdodG5lc3MgPSBBVVRPQlJJR0hUX0RFRjsKIAlpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjcwKSB7CiAJCXNkLT5mcmVxID0gT1Y3NjcwX0ZSRVFfREVGOwotCQlnc3BjYV9kZXYtPmN0cmxfZGlzID0gMSA8PCBGUkVRX0lEWDsKKwkJZ3NwY2FfZGV2LT5jdHJsX2RpcyA9ICgxIDw8IEZSRVFfSURYKSB8ICgxIDw8IENPTE9SX0lEWCk7CiAJfSBlbHNlIHsKIAkJc2QtPmZyZXEgPSBGUkVRX0RFRjsKIAkJZ3NwY2FfZGV2LT5jdHJsX2RpcyA9ICgxIDw8IEhGTElQX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwKQEAgLTM5NjEsNiArMzk2Nyw4IEBACiAJc2RfcmVzZXRfc25hcHNob3QoZ3NwY2FfZGV2KTsKIAlzZC0+c25hcHNob3RfcHJlc3NlZCA9IDA7CiAKKwlzZC0+Zmlyc3RfZnJhbWUgPSAzOworCiAJcmV0ID0gb3Y1MXhfcmVzdGFydChzZCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwpAQCAtNDE1MywxMyArNDE2MSwyMyBAQAogCQkJdTggKmRhdGEsCQkJLyogaXNvYyBwYWNrZXQgKi8KIAkJCWludCBsZW4pCQkJLyogaXNvIHBhY2tldCBsZW5ndGggKi8KIHsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGRhdGEsIGxlbik7CisKIAkvKiBBIHNob3J0IHJlYWQgc2lnbmFscyBFT0YgKi8KIAlpZiAobGVuIDwgT1ZGWDJfQlVMS19TSVpFKSB7Ci0JCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULCBkYXRhLCBsZW4pOworCQkvKiBJZiB0aGUgZnJhbWUgaXMgc2hvcnQsIGFuZCBpdCBpcyBvbmUgb2YgdGhlIGZpcnN0IG9uZXMKKwkJICAgdGhlIHNlbnNvciBhbmQgYnJpZGdlIGFyZSBzdGlsbCBzeW5jaW5nLCBzbyBkcm9wIGl0LiAqLworCQlpZiAoc2QtPmZpcnN0X2ZyYW1lKSB7CisJCQlzZC0+Zmlyc3RfZnJhbWUtLTsKKwkJCWlmIChnc3BjYV9kZXYtPmltYWdlX2xlbiA8CisJCQkJICBzZC0+Z3NwY2FfZGV2LndpZHRoICogc2QtPmdzcGNhX2Rldi5oZWlnaHQpCisJCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CisJCX0KKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsIE5VTEwsIDApOwogCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsIE5VTEwsIDApOwotCQlyZXR1cm47CiAJfQotCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZGF0YSwgbGVuKTsKIH0KIAogc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUzNC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUzNC5jCmluZGV4IGRjMWU0ZWYuLjk2Y2IzYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTM0LmMKQEAgLTk4NywxMyArOTg3LDggQEAKIAkJCQkJZGF0YSArIDEyLCBsZW4gLSAxMik7CiAJCS8qIElmIHRoaXMgcGFja2V0IGlzIG1hcmtlZCBhcyBFT0YsIGVuZCB0aGUgZnJhbWUgKi8KIAkJfSBlbHNlIGlmIChkYXRhWzFdICYgVVZDX1NUUkVBTV9FT0YpIHsKLQkJCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWU7Ci0KIAkJCXNkLT5sYXN0X3B0cyA9IDA7Ci0JCQlmcmFtZSA9IGdzcGNhX2dldF9pX2ZyYW1lKGdzcGNhX2Rldik7Ci0JCQlpZiAoZnJhbWUgPT0gTlVMTCkKLQkJCQlnb3RvIGRpc2NhcmQ7Ci0JCQlpZiAoZnJhbWUtPmRhdGFfZW5kIC0gZnJhbWUtPmRhdGEgKyAobGVuIC0gMTIpICE9CisJCQlpZiAoZ3NwY2FfZGV2LT5pbWFnZV9sZW4gKyBsZW4gLSAxMiAhPQogCQkJICAgIGdzcGNhX2Rldi0+d2lkdGggKiBnc3BjYV9kZXYtPmhlaWdodCAqIDIpIHsKIAkJCQlQREVCVUcoRF9QQUNLLCAid3Jvbmcgc2l6ZWQgZnJhbWUiKTsKIAkJCQlnb3RvIGRpc2NhcmQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMwMi5jCmluZGV4IDJhNjgyMjAuLmE2NmRmMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMwMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMwMi5jCkBAIC00MDIsNyArNDAyLDcgQEAKIAltZW1jcHkoZ3NwY2FfZGV2LT51c2JfYnVmLCBidWZmZXIsIGxlbik7CiAJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKLQkJCTEsCQkvKiByZXF1ZXN0ICovCisJCQkwLAkJLyogcmVxdWVzdCAqLwogCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAogCQkJMCwJCS8qIHZhbHVlICovCiAJCQlpbmRleCwgZ3NwY2FfZGV2LT51c2JfYnVmLCBsZW4sCkBAIC04MDQsNyArODA0LDYgQEAKIH07CiAKIHN0YXRpYyB2b2lkIHBhY19zdGFydF9mcmFtZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWUsCiAJCV9fdTE2IGxpbmVzLCBfX3UxNiBzYW1wbGVzX3Blcl9saW5lKQogewogCXVuc2lnbmVkIGNoYXIgdG1wYnVmWzRdOwpAQCAtODI5LDE5ICs4MjgsMTMgQEAKIAkJCWludCBsZW4pCQkJLyogaXNvIHBhY2tldCBsZW5ndGggKi8KIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0Jc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZTsKKwl1OCAqaW1hZ2U7CiAJdW5zaWduZWQgY2hhciAqc29mOwogCiAJc29mID0gcGFjX2ZpbmRfc29mKCZzZC0+c29mX3JlYWQsIGRhdGEsIGxlbik7CiAJaWYgKHNvZikgewogCQlpbnQgbiwgbHVtX29mZnNldCwgZm9vdGVyX2xlbmd0aDsKIAotCQlmcmFtZSA9IGdzcGNhX2dldF9pX2ZyYW1lKGdzcGNhX2Rldik7Ci0JCWlmIChmcmFtZSA9PSBOVUxMKSB7Ci0JCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsKLQkJCXJldHVybjsKLQkJfQotCiAJCS8qIDYgYnl0ZXMgYWZ0ZXIgdGhlIEZGIEQ5IEVPRiBtYXJrZXIgYSBudW1iZXIgb2YgbHVtaW5hdGlvbgogCQkgICBieXRlcyBhcmUgc2VuZCBjb3JyZXNwb25kaW5nIHRvIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUKIAkJICAgaW1hZ2UsIHRoZSAxNHRoIGFuZCAxNXRoIGJ5dGUgYWZ0ZXIgdGhlIEVPRiBzZWVtIHRvCkBAIC04NTIsMTYgKzg0NSwxNyBAQAogCQkvKiBGaW5pc2ggZGVjb2RpbmcgY3VycmVudCBmcmFtZSAqLwogCQluID0gKHNvZiAtIGRhdGEpIC0gKGZvb3Rlcl9sZW5ndGggKyBzaXplb2YgcGFjX3NvZl9tYXJrZXIpOwogCQlpZiAobiA8IDApIHsKLQkJCWZyYW1lLT5kYXRhX2VuZCArPSBuOworCQkJZ3NwY2FfZGV2LT5pbWFnZV9sZW4gKz0gbjsKIAkJCW4gPSAwOworCQl9IGVsc2UgeworCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBkYXRhLCBuKTsKIAkJfQotCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsCi0JCQkJCWRhdGEsIG4pOwotCQlpZiAoZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlICE9IERJU0NBUkRfUEFDS0VUICYmCi0JCQkJZnJhbWUtPmRhdGFfZW5kWy0yXSA9PSAweGZmICYmCi0JCQkJZnJhbWUtPmRhdGFfZW5kWy0xXSA9PSAweGQ5KQotCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCi0JCQkJCQlOVUxMLCAwKTsKKworCQlpbWFnZSA9IGdzcGNhX2Rldi0+aW1hZ2U7CisJCWlmIChpbWFnZSAhPSBOVUxMCisJCSAmJiBpbWFnZVtnc3BjYV9kZXYtPmltYWdlX2xlbiAtIDJdID09IDB4ZmYKKwkJICYmIGltYWdlW2dzcGNhX2Rldi0+aW1hZ2VfbGVuIC0gMV0gPT0gMHhkOSkKKwkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULCBOVUxMLCAwKTsKIAogCQluID0gc29mIC0gZGF0YTsKIAkJbGVuIC09IG47CkBAIC04NzcsNyArODcxLDcgQEAKIAogCQkvKiBTdGFydCB0aGUgbmV3IGZyYW1lIHdpdGggdGhlIGpwZWcgaGVhZGVyICovCiAJCS8qIFRoZSBQQUM3MzAyIGhhcyB0aGUgaW1hZ2Ugcm90YXRlZCA5MCBkZWdyZWVzICovCi0JCXBhY19zdGFydF9mcmFtZShnc3BjYV9kZXYsIGZyYW1lLAorCQlwYWNfc3RhcnRfZnJhbWUoZ3NwY2FfZGV2LAogCQkJZ3NwY2FfZGV2LT53aWR0aCwgZ3NwY2FfZGV2LT5oZWlnaHQpOwogCX0KIAlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGRhdGEsIGxlbik7CkBAIC0xMjAwLDYgKzExOTQsNyBAQAogCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNjIxKX0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI2MjIpLCAuZHJpdmVyX2luZm8gPSBGTF9WRkxJUH0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI2MjQpLCAuZHJpdmVyX2luZm8gPSBGTF9WRkxJUH0sCisJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI2MjUpfSwKIAl7VVNCX0RFVklDRSgweDA5M2EsIDB4MjYyNil9LAogCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNjI4KX0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI2MjkpLCAuZHJpdmVyX2luZm8gPSBGTF9WRkxJUH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jCmluZGV4IDQ0ZmVkOTYuLjFjYjdlOTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYwpAQCAtMjcwLDcgKzI3MCw3IEBACiAJbWVtY3B5KGdzcGNhX2Rldi0+dXNiX2J1ZiwgYnVmZmVyLCBsZW4pOwogCXJldCA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKIAkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCi0JCQkxLAkJLyogcmVxdWVzdCAqLworCQkJMCwJCS8qIHJlcXVlc3QgKi8KIAkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKIAkJCTAsCQkvKiB2YWx1ZSAqLwogCQkJaW5kZXgsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgbGVuLApAQCAtNTk5LDcgKzU5OSw2IEBACiB9OwogCiBzdGF0aWMgdm9pZCBwYWNfc3RhcnRfZnJhbWUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLAogCQlfX3UxNiBsaW5lcywgX191MTYgc2FtcGxlc19wZXJfbGluZSkKIHsKIAl1bnNpZ25lZCBjaGFyIHRtcGJ1Zls0XTsKQEAgLTYyNCwxOSArNjIzLDEzIEBACiAJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4ICppbWFnZTsKIAl1bnNpZ25lZCBjaGFyICpzb2Y7Ci0Jc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZTsKIAogCXNvZiA9IHBhY19maW5kX3NvZigmc2QtPnNvZl9yZWFkLCBkYXRhLCBsZW4pOwogCWlmIChzb2YpIHsKIAkJaW50IG4sIGx1bV9vZmZzZXQsIGZvb3Rlcl9sZW5ndGg7CiAKLQkJZnJhbWUgPSBnc3BjYV9nZXRfaV9mcmFtZShnc3BjYV9kZXYpOwotCQlpZiAoZnJhbWUgPT0gTlVMTCkgewotCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7Ci0JCQlyZXR1cm47Ci0JCX0KLQogCQkvKiA2IGJ5dGVzIGFmdGVyIHRoZSBGRiBEOSBFT0YgbWFya2VyIGEgbnVtYmVyIG9mIGx1bWluYXRpb24KIAkJICAgYnl0ZXMgYXJlIHNlbmQgY29ycmVzcG9uZGluZyB0byBkaWZmZXJlbnQgcGFydHMgb2YgdGhlCiAJCSAgIGltYWdlLCB0aGUgMTR0aCBhbmQgMTV0aCBieXRlIGFmdGVyIHRoZSBFT0Ygc2VlbSB0bwpAQCAtNjQ3LDE2ICs2NDAsMTYgQEAKIAkJLyogRmluaXNoIGRlY29kaW5nIGN1cnJlbnQgZnJhbWUgKi8KIAkJbiA9IChzb2YgLSBkYXRhKSAtIChmb290ZXJfbGVuZ3RoICsgc2l6ZW9mIHBhY19zb2ZfbWFya2VyKTsKIAkJaWYgKG4gPCAwKSB7Ci0JCQlmcmFtZS0+ZGF0YV9lbmQgKz0gbjsKKwkJCWdzcGNhX2Rldi0+aW1hZ2VfbGVuICs9IG47CiAJCQluID0gMDsKKwkJfSBlbHNlIHsKKwkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZGF0YSwgbik7CiAJCX0KLQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULAotCQkJCQlkYXRhLCBuKTsKLQkJaWYgKGdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSAhPSBESVNDQVJEX1BBQ0tFVCAmJgotCQkJCWZyYW1lLT5kYXRhX2VuZFstMl0gPT0gMHhmZiAmJgotCQkJCWZyYW1lLT5kYXRhX2VuZFstMV0gPT0gMHhkOSkKLQkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULAotCQkJCQkJTlVMTCwgMCk7CisJCWltYWdlID0gZ3NwY2FfZGV2LT5pbWFnZTsKKwkJaWYgKGltYWdlICE9IE5VTEwKKwkJICYmIGltYWdlW2dzcGNhX2Rldi0+aW1hZ2VfbGVuIC0gMl0gPT0gMHhmZgorCQkgJiYgaW1hZ2VbZ3NwY2FfZGV2LT5pbWFnZV9sZW4gLSAxXSA9PSAweGQ5KQorCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsIE5VTEwsIDApOwogCiAJCW4gPSBzb2YgLSBkYXRhOwogCQlsZW4gLT0gbjsKQEAgLTY3MSw3ICs2NjQsNyBAQAogCQkJYXRvbWljX3NldCgmc2QtPmF2Z19sdW0sIC0xKTsKIAogCQkvKiBTdGFydCB0aGUgbmV3IGZyYW1lIHdpdGggdGhlIGpwZWcgaGVhZGVyICovCi0JCXBhY19zdGFydF9mcmFtZShnc3BjYV9kZXYsIGZyYW1lLAorCQlwYWNfc3RhcnRfZnJhbWUoZ3NwY2FfZGV2LAogCQkJZ3NwY2FfZGV2LT5oZWlnaHQsIGdzcGNhX2Rldi0+d2lkdGgpOwogCX0KIAlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGRhdGEsIGxlbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc245YzIweC5jCmluZGV4IDY0NGE3ZmQuLjgzYTcxOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc245YzIweC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc245YzIweC5jCkBAIC0yMCw3ICsyMCw2IEBACiAKICNpZmRlZiBDT05GSUdfSU5QVVQKICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNlbmRpZgogCiAjaW5jbHVkZSAiZ3NwY2EuaCIKQEAgLTg5LDcgKzg4LDcgQEAKIAl1OCBoc3RhcnQ7CiAJdTggdnN0YXJ0OwogCi0JdTggKmpwZWdfaGRyOworCXU4IGpwZWdfaGRyW0pQRUdfSERSX1NaXTsKIAl1OCBxdWFsaXR5OwogCiAJdTggZmxhZ3M7CkBAIC0yMTYyLDEwICsyMTYxLDYgQEAKIAlpbnQgaGVpZ2h0ID0gZ3NwY2FfZGV2LT5oZWlnaHQ7CiAJdTggZm10LCBzY2FsZSA9IDA7CiAKLQlzZC0+anBlZ19oZHIgPSBrbWFsbG9jKEpQRUdfSERSX1NaLCBHRlBfS0VSTkVMKTsKLQlpZiAoc2QtPmpwZWdfaGRyID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCiAJanBlZ19kZWZpbmUoc2QtPmpwZWdfaGRyLCBoZWlnaHQsIHdpZHRoLAogCQkJMHgyMSk7CiAJanBlZ19zZXRfcXVhbChzZC0+anBlZ19oZHIsIHNkLT5xdWFsaXR5KTsKQEAgLTIxOTcsOCArMjE5Miw4IEBACiAJfQogCiAJY29uZmlndXJlX3NlbnNvcl9vdXRwdXQoZ3NwY2FfZGV2LCBtb2RlKTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MTEwMCwgc2QtPmpwZWdfaGRyICsgSlBFR19RVDBfT0ZGU0VULCA2NCk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDExNDAsIHNkLT5qcGVnX2hkciArIEpQRUdfUVQxX09GRlNFVCwgNjQpOworCXJlZ193KGdzcGNhX2RldiwgMHgxMTAwLCAmc2QtPmpwZWdfaGRyW0pQRUdfUVQwX09GRlNFVF0sIDY0KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTE0MCwgJnNkLT5qcGVnX2hkcltKUEVHX1FUMV9PRkZTRVRdLCA2NCk7CiAJcmVnX3coZ3NwY2FfZGV2LCAweDEwZmIsIENMUl9XSU4od2lkdGgsIGhlaWdodCksIDUpOwogCXJlZ193KGdzcGNhX2RldiwgMHgxMTgwLCBIV19XSU4obW9kZSwgc2QtPmhzdGFydCwgc2QtPnZzdGFydCksIDYpOwogCXJlZ193MShnc3BjYV9kZXYsIDB4MTE4OSwgc2NhbGUpOwpAQCAtMjIyNiwxMiArMjIyMSw2IEBACiAJcmVnX3cxKGdzcGNhX2RldiwgMHgxMDYxLCBnc3BjYV9kZXYtPnVzYl9idWZbMF0gJiB+MHgwMik7CiB9CiAKLXN0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0Ja2ZyZWUoc2QtPmpwZWdfaGRyKTsKLX0KLQogc3RhdGljIHZvaWQgZG9fYXV0b2V4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IGF2Z19sdW0pCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtMjM5Nyw3ICsyMzg2LDYgQEAKIAkuaW5pdCA9IHNkX2luaXQsCiAJLnN0YXJ0ID0gc2Rfc3RhcnQsCiAJLnN0b3BOID0gc2Rfc3RvcE4sCi0JLnN0b3AwID0gc2Rfc3RvcDAsCiAJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCiAjaWZkZWYgQ09ORklHX0lOUFVUCiAJLmludF9wa3Rfc2NhbiA9IHNkX2ludF9wa3Rfc2NhbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4Yi5jCmluZGV4IDk1MzU0YTMuLjIwNGJiM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGIuYwpAQCAtMTI1MSwxNiArMTI1MSwxMCBAQAogCWlmIChjYW0tPmNhbV9tb2RlW2dzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2ICYgTU9ERV9SQVcpIHsKIAkJLyogSW4gcmF3IG1vZGUgd2Ugc29tZXRpbWVzIGdldCBzb21lIGdhcmJhZ2UgYWZ0ZXIgdGhlIGZyYW1lCiAJCSAgIGlnbm9yZSB0aGlzICovCi0JCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWU7CiAJCWludCB1c2VkOwogCQlpbnQgc2l6ZSA9IGNhbS0+Y2FtX21vZGVbZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnNpemVpbWFnZTsKIAotCQlmcmFtZSA9IGdzcGNhX2dldF9pX2ZyYW1lKGdzcGNhX2Rldik7Ci0JCWlmIChmcmFtZSA9PSBOVUxMKSB7Ci0JCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsKLQkJCXJldHVybjsKLQkJfQotCQl1c2VkID0gZnJhbWUtPmRhdGFfZW5kIC0gZnJhbWUtPmRhdGE7CisJCXVzZWQgPSBnc3BjYV9kZXYtPmltYWdlX2xlbjsKIAkJaWYgKHVzZWQgKyBsZW4gPiBzaXplKQogCQkJbGVuID0gc2l6ZSAtIHVzZWQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMKaW5kZXggMTc2YzViMy4uZWUxN2IwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jCkBAIC0yMiw3ICsyMiw2IEBACiAjZGVmaW5lIE1PRFVMRV9OQU1FICJzb25peGoiCiAKICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlICJnc3BjYS5oIgogI2luY2x1ZGUgImpwZWcuaCIKIApAQCAtMzkyLDcgKzM5MSw3IEBACiAKIHN0YXRpYyBjb25zdCB1OCBzbl9odjcxMzFbMHgxY10gPSB7CiAvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KLQkweDAwLAkweDAzLAkweDY0LAkweDAwLAkweDFhLAkweDIwLAkweDIwLAkweDIwLAorCTB4MDAsCTB4MDMsCTB4NjAsCTB4MDAsCTB4MWEsCTB4MjAsCTB4MjAsCTB4MjAsCiAvKglyZWc4CXJlZzkJcmVnYQlyZWdiCXJlZ2MJcmVnZAlyZWdlCXJlZ2YgKi8KIAkweDgxLAkweDExLAkweDAwLAkweDAwLAkweDAwLAkweDAwLAkweDAwLAkweDAwLAogLyoJcmVnMTAJcmVnMTEJcmVnMTIJcmVnMTMJcmVnMTQJcmVnMTUJcmVnMTYJcmVnMTcgKi8KQEAgLTQwMyw3ICs0MDIsNyBAQAogCiBzdGF0aWMgY29uc3QgdTggc25fbWkwMzYwWzB4MWNdID0gewogLyoJcmVnMAlyZWcxCXJlZzIJcmVnMwlyZWc0CXJlZzUJcmVnNglyZWc3ICovCi0JMHgwMCwJMHg2MSwJMHg0NCwJMHgwMCwJMHgxYSwJMHgyMCwJMHgyMCwJMHgyMCwKKwkweDAwLAkweDYxLAkweDQwLAkweDAwLAkweDFhLAkweDIwLAkweDIwLAkweDIwLAogLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCiAJMHg4MSwJMHg1ZCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwKIC8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCkBAIC0xNjQ0LDYgKzE2NDMsNyBAQAogCQkJICBjb25zdCB1OCAqc245YzF4eCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggcmVnMDEwMlsyXTsKIAljb25zdCB1OCAqcmVnOWE7CiAJc3RhdGljIGNvbnN0IHU4IHJlZzlhX2RlZltdID0KIAkJezB4MDAsIDB4NDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDB9OwpAQCAtMTY1Niw3ICsxNjU2LDExIEBACiAJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgc245YzF4eFsxXSk7CiAKIAkvKiBjb25maWd1cmUgZ3BpbyAqLwotCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgJnNuOWMxeHhbMV0sIDIpOworCXJlZzAxMDJbMF0gPSBzbjljMXh4WzFdOworCXJlZzAxMDJbMV0gPSBzbjljMXh4WzJdOworCWlmIChnc3BjYV9kZXYtPmF1ZGlvKQorCQlyZWcwMTAyWzFdIHw9IDB4MDQ7CS8qIGtlZXAgdGhlIGF1ZGlvIGNvbm5lY3Rpb24gKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIHJlZzAxMDIsIDIpOwogCXJlZ193KGdzcGNhX2RldiwgMHgwOCwgJnNuOWMxeHhbOF0sIDIpOwogCXJlZ193KGdzcGNhX2RldiwgMHgxNywgJnNuOWMxeHhbMHgxN10sIDUpOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewpAQCAtMTczNywxMyArMTc0MSwxMiBAQAogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCAweDQwKTsKIAkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfUE8yMDMwTjoKKwljYXNlIFNFTlNPUl9PVjc2NjA6CiAJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NjMpOwogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDE3LCAweDIwKTsKIAkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg2Mik7CiAJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NDIpOwogCQlicmVhazsKLQljYXNlIFNFTlNPUl9PVjc2NjA6Ci0JCS8qIGZhbGwgdGhydSAqLwogCWNhc2UgU0VOU09SX1NQODA3MDg6CiAJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NjMpOwogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDE3LCAweDIwKTsKQEAgLTE4MTYsNyArMTgxOSw3IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWNvbnN0IHU4ICpzbjljMXh4OwotCXU4IHJlZ0dwaW9bXSA9IHsgMHgyOSwgMHg3NCB9OworCXU4IHJlZ0dwaW9bXSA9IHsgMHgyOSwgMHg3NCB9OwkJLyogd2l0aCBhdWRpbyAqLwogCXU4IHJlZ0YxOwogCiAJLyogc2V0dXAgYSBzZWxlY3RvciBieSBicmlkZ2UgKi8KQEAgLTE4NTYsNyArMTg1OSw3IEBACiAJCQlwbzIwMzBuX3Byb2JlKGdzcGNhX2Rldik7CiAJCQlicmVhazsKIAkJfQotCQlyZWdHcGlvWzFdID0gMHg3MDsKKwkJcmVnR3Bpb1sxXSA9IDB4NzA7CQkvKiBubyBhdWRpbyAqLwogCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIHJlZ0dwaW8sIDIpOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMjI3NCw3ICsyMjc3LDcgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGk7Ci0JdTggcmVnMSwgcmVnMiwgcmVnMTc7CisJdTggcmVnMSwgcmVnMTc7CiAJY29uc3QgdTggKnNuOWMxeHg7CiAJY29uc3QgdTggKCppbml0KVs4XTsKIAlpbnQgbW9kZTsKQEAgLTIzMDQsMjMgKzIzMDcsNiBAQAogCS8qIGluaXRpYWxpemUgdGhlIHNlbnNvciAqLwogCWkyY193X3NlcShnc3BjYV9kZXYsIHNlbnNvcl9pbml0W3NkLT5zZW5zb3JdKTsKIAotCXN3aXRjaCAoc2QtPnNlbnNvcikgewotCWNhc2UgU0VOU09SX0FEQ00xNzAwOgotCQlyZWcyID0gMHg2MDsKLQkJYnJlYWs7Ci0JY2FzZSBTRU5TT1JfT002ODAyOgotCQlyZWcyID0gMHg3MTsKLQkJYnJlYWs7Ci0JY2FzZSBTRU5TT1JfU1A4MDcwODoKLQkJcmVnMiA9IDB4NjI7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJlZzIgPSAweDQwOwotCQlicmVhazsKLQl9Ci0JcmVnX3cxKGdzcGNhX2RldiwgMHgwMiwgcmVnMik7Ci0JcmVnX3cxKGdzcGNhX2RldiwgMHgwMiwgcmVnMik7Ci0KIAlyZWdfdzEoZ3NwY2FfZGV2LCAweDE1LCBzbjljMXh4WzB4MTVdKTsKIAlyZWdfdzEoZ3NwY2FfZGV2LCAweDE2LCBzbjljMXh4WzB4MTZdKTsKIAlyZWdfdzEoZ3NwY2FfZGV2LCAweDEyLCBzbjljMXh4WzB4MTJdKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTE1MjguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTE1MjguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjUxNGViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhMTUyOC5jCkBAIC0wLDAgKzEsNjA1IEBACisvKgorICogc3BjYTE1Mjggc3ViZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEplYW4tRnJhbmNvaXMgTW9pbmUgKGh0dHA6Ly9tb2luZWpmLmZyZWUuZnIpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjZGVmaW5lIE1PRFVMRV9OQU1FICJzcGNhMTUyOCIKKworI2luY2x1ZGUgImdzcGNhLmgiCisjaW5jbHVkZSAianBlZy5oIgorCitNT0RVTEVfQVVUSE9SKCJKZWFuLUZyYW5jb2lzIE1vaW5lIDxodHRwOi8vbW9pbmVqZi5mcmVlLmZyPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTUENBMTUyOCBVU0IgQ2FtZXJhIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBzcGVjaWZpYyB3ZWJjYW0gZGVzY3JpcHRvciAqLworc3RydWN0IHNkIHsKKwlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCisJdTggYnJpZ2h0bmVzczsKKwl1OCBjb250cmFzdDsKKwl1OCBodWU7CisJdTggY29sb3I7CisJdTggc2hhcnBuZXNzOworCisJdTggcGt0X3NlcTsKKworCXU4IGpwZWdfaGRyW0pQRUdfSERSX1NaXTsKK307CisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRodWUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRodWUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Y29sb3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb2xvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJCcmlnaHRuZXNzIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDI1NSwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBCUklHSFRORVNTX0RFRiAxMjgKKwkJLmRlZmF1bHRfdmFsdWUgPSBCUklHSFRORVNTX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCisJICAgIC5nZXQgPSBzZF9nZXRicmlnaHRuZXNzLAorCX0sCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfQ09OVFJBU1QsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiQ29udHJhc3QiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gOCwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBDT05UUkFTVF9ERUYgMQorCQkuZGVmYXVsdF92YWx1ZSA9IENPTlRSQVNUX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGNvbnRyYXN0LAorCSAgICAuZ2V0ID0gc2RfZ2V0Y29udHJhc3QsCisJfSwKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9IVUUsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiSHVlIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDI1NSwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBIVUVfREVGIDAKKwkJLmRlZmF1bHRfdmFsdWUgPSBIVUVfREVGLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0aHVlLAorCSAgICAuZ2V0ID0gc2RfZ2V0aHVlLAorCX0sCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfU0FUVVJBVElPTiwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJTYXR1cmF0aW9uIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDgsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgQ09MT1JfREVGIDEKKwkJLmRlZmF1bHRfdmFsdWUgPSBDT0xPUl9ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRjb2xvciwKKwkgICAgLmdldCA9IHNkX2dldGNvbG9yLAorCX0sCisJeworCSAgICB7CisJCS5pZAkgPSBWNEwyX0NJRF9TSEFSUE5FU1MsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiU2hhcnBuZXNzIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDI1NSwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBTSEFSUE5FU1NfREVGIDAKKwkJLmRlZmF1bHRfdmFsdWUgPSBTSEFSUE5FU1NfREVGLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0c2hhcnBuZXNzLAorCSAgICAuZ2V0ID0gc2RfZ2V0c2hhcnBuZXNzLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCB2Z2FfbW9kZVtdID0geworLyoJCShkb2VzIG5vdCB3b3JrIGNvcnJlY3RseSkKKwl7MTc2LCAxNDQsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxNzYsCisJCS5zaXplaW1hZ2UgPSAxNzYgKiAxNDQgKiA1IC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAzfSwKKyovCisJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAorCQkuc2l6ZWltYWdlID0gMzIwICogMjQwICogNCAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMn0sCisJezY0MCwgNDgwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gNjQwLAorCQkuc2l6ZWltYWdlID0gNjQwICogNDgwICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMX0sCit9OworCisvKiByZWFkIDxsZW4+IGJ5dGVzIHRvIGdzcGNhIHVzYl9idWYgKi8KK3N0YXRpYyB2b2lkIHJlZ19yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4IHJlcSwKKwkJCXUxNiBpbmRleCwKKwkJCWludCBsZW4pCit7CisjaWYgVVNCX0JVRl9TWiA8IDY0CisjZXJyb3IgIlVTQiBidWZmZXIgdG9vIHNtYWxsIgorI2VuZGlmCisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCWludCByZXQ7CisKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuOworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLAorCQkJcmVxLAorCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkweDAwMDAsCQkJLyogdmFsdWUgKi8KKwkJCWluZGV4LAorCQkJZ3NwY2FfZGV2LT51c2JfYnVmLCBsZW4sCisJCQk1MDApOworCVBERUJVRyhEX1VTQkksICJHRVQgJTAyeCAwMDAwICUwNHggJTAyeCIsIHJlcSwgaW5kZXgsCisJCQkgZ3NwY2FfZGV2LT51c2JfYnVmWzBdKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9FUlIsICJyZWdfciBlcnIgJWQiLCByZXQpOworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfQorfQorCitzdGF0aWMgdm9pZCByZWdfdyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1OCByZXEsCisJCQl1MTYgdmFsdWUsCisJCQl1MTYgaW5kZXgpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCWludCByZXQ7CisKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuOworCVBERUJVRyhEX1VTQk8sICJTRVQgJTAyeCAlMDR4ICUwNHgiLCByZXEsIHZhbHVlLCBpbmRleCk7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQlyZXEsCisJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQl2YWx1ZSwgaW5kZXgsCisJCQlOVUxMLCAwLCA1MDApOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgInJlZ193IGVyciAlZCIsIHJldCk7CisJCWdzcGNhX2Rldi0+dXNiX2VyciA9IHJldDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlZ193YihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1OCByZXEsCisJCQl1MTYgdmFsdWUsCisJCQl1MTYgaW5kZXgsCisJCQl1OCBieXRlKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwlpbnQgcmV0OworCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKKwlQREVCVUcoRF9VU0JPLCAiU0VUICUwMnggJTA0eCAlMDR4ICUwMngiLCByZXEsIHZhbHVlLCBpbmRleCwgYnl0ZSk7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gYnl0ZTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKKwkJCXJlcSwKKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCXZhbHVlLCBpbmRleCwKKwkJCWdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwgNTAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9FUlIsICJyZWdfdyBlcnIgJWQiLCByZXQpOworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfQorfQorCitzdGF0aWMgdm9pZCB3YWl0X3N0YXR1c18wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgaTsKKworCWkgPSAyMDsKKwlkbyB7CisJCXJlZ19yKGdzcGNhX2RldiwgMHgyMSwgMHgwMDAwLCAxKTsKKwkJaWYgKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9PSAwKQorCQkJcmV0dXJuOworCQltc2xlZXAoMzApOworCX0gd2hpbGUgKC0taSA+IDApOworCVBERUJVRyhEX0VSUiwgIndhaXRfc3RhdHVzXzAgdGltZW91dCIpOworCWdzcGNhX2Rldi0+dXNiX2VyciA9IC1FVElNRTsKK30KKworc3RhdGljIHZvaWQgd2FpdF9zdGF0dXNfMShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IGk7CisKKwlpID0gMTA7CisJZG8geworCQlyZWdfcihnc3BjYV9kZXYsIDB4MjEsIDB4MDAwMSwgMSk7CisJCW1zbGVlcCgxMCk7CisJCWlmIChnc3BjYV9kZXYtPnVzYl9idWZbMF0gPT0gMSkgeworCQkJcmVnX3diKGdzcGNhX2RldiwgMHgyMSwgMHgwMDAwLCAweDAwMDEsIDB4MDApOworCQkJcmVnX3IoZ3NwY2FfZGV2LCAweDIxLCAweDAwMDEsIDEpOworCQkJcmV0dXJuOworCQl9CisJfSB3aGlsZSAoLS1pID4gMCk7CisJUERFQlVHKERfRVJSLCAid2FpdF9zdGF0dXNfMSB0aW1lb3V0Iik7CisJZ3NwY2FfZGV2LT51c2JfZXJyID0gLUVUSU1FOworfQorCitzdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlyZWdfd2IoZ3NwY2FfZGV2LCAweGMwLCAweDAwMDAsIDB4MDBjMCwgc2QtPmJyaWdodG5lc3MpOworfQorCitzdGF0aWMgdm9pZCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJcmVnX3diKGdzcGNhX2RldiwgMHhjMSwgMHgwMDAwLCAweDAwYzEsIHNkLT5jb250cmFzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldGh1ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJcmVnX3diKGdzcGNhX2RldiwgMHhjMiwgMHgwMDAwLCAweDAwMDAsIHNkLT5odWUpOworfQorCitzdGF0aWMgdm9pZCBzZXRjb2xvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJcmVnX3diKGdzcGNhX2RldiwgMHhjMywgMHgwMDAwLCAweDAwYzMsIHNkLT5jb2xvcik7Cit9CisKK3N0YXRpYyB2b2lkIHNldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJcmVnX3diKGdzcGNhX2RldiwgMHhjNCwgMHgwMDAwLCAweDAwYzQsIHNkLT5zaGFycG5lc3MpOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGUgPSB2Z2FfbW9kZTsKKwlnc3BjYV9kZXYtPmNhbS5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKKwlnc3BjYV9kZXYtPmNhbS5ucGt0ID0gMTI4OyAvKiBudW1iZXIgb2YgcGFja2V0cyBwZXIgSVNPQyBtZXNzYWdlICovCisJCQkvKmZpeG1lOiAyNTYgaW4gbXMtd2luIHRyYWNlcyovCisKKwlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOworCXNkLT5jb250cmFzdCA9IENPTlRSQVNUX0RFRjsKKwlzZC0+aHVlID0gSFVFX0RFRjsKKwlzZC0+Y29sb3IgPSBDT0xPUl9ERUY7CisJc2QtPnNoYXJwbmVzcyA9IFNIQVJQTkVTU19ERUY7CisKKwlnc3BjYV9kZXYtPm5iYWx0ID0gNDsJCS8qIHVzZSBhbHRlcm5hdGUgc2V0dGluZyAzICovCisKKwlyZXR1cm4gMDsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHgwMDAxLCAweDIwNjcpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHgwMGQwLCAweDIwNmIpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHgwMDAwLCAweDIwNmMpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHgwMDAxLCAweDIwNjkpOworCW1zbGVlcCg4KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4MDBjMCwgMHgyMDZiKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4MDAwMCwgMHgyMDZjKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4MDAwMSwgMHgyMDY5KTsKKworCXJlZ19yKGdzcGNhX2RldiwgMHgyMCwgMHgwMDAwLCAxKTsKKwlyZWdfcihnc3BjYV9kZXYsIDB4MjAsIDB4MDAwMCwgNSk7CisJcmVnX3IoZ3NwY2FfZGV2LCAweDIzLCAweDAwMDAsIDY0KTsKKwlQREVCVUcoRF9QUk9CRSwgIiVzJXMiLCAmZ3NwY2FfZGV2LT51c2JfYnVmWzB4MWNdLAorCQkJCSZnc3BjYV9kZXYtPnVzYl9idWZbMHgzMF0pOworCXJlZ19yKGdzcGNhX2RldiwgMHgyMywgMHgwMDAxLCA2NCk7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKK30KKworLyogZnVuY3Rpb24gY2FsbGVkIGF0IHN0YXJ0IHRpbWUgYmVmb3JlIFVSQiBjcmVhdGlvbiAqLworc3RhdGljIGludCBzZF9pc29jX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXU4IG1vZGU7CisKKwlyZWdfcihnc3BjYV9kZXYsIDB4MDAsIDB4MjUyMCwgMSk7CisJd2FpdF9zdGF0dXNfMChnc3BjYV9kZXYpOworCXJlZ193KGdzcGNhX2RldiwgMHhjNSwgMHgwMDAzLCAweDAwMDApOworCXdhaXRfc3RhdHVzXzEoZ3NwY2FfZGV2KTsKKworCXdhaXRfc3RhdHVzXzAoZ3NwY2FfZGV2KTsKKwltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CisJcmVnX3diKGdzcGNhX2RldiwgMHgyNSwgMHgwMDAwLCAweDAwMDQsIG1vZGUpOworCXJlZ19yKGdzcGNhX2RldiwgMHgyNSwgMHgwMDA0LCAxKTsKKwlyZWdfd2IoZ3NwY2FfZGV2LCAweDI3LCAweDAwMDAsIDB4MDAwMCwgMHgwNik7CisJcmVnX3IoZ3NwY2FfZGV2LCAweDI3LCAweDAwMDAsIDEpOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKKy8qIC0tIHN0YXJ0IHRoZSBjYW1lcmEgLS0gKi8KK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCS8qIGluaXRpYWxpemUgdGhlIEpQRUcgaGVhZGVyICovCisJanBlZ19kZWZpbmUoc2QtPmpwZWdfaGRyLCBnc3BjYV9kZXYtPmhlaWdodCwgZ3NwY2FfZGV2LT53aWR0aCwKKwkJCTB4MjIpOwkJLyogSlBFRyA0MTEgKi8KKworCS8qIHRoZSBKUEVHIHF1YWxpdHkgc2VlbXMgdG8gYmUgODIlICovCisJanBlZ19zZXRfcXVhbChzZC0+anBlZ19oZHIsIDgyKTsKKworCS8qIHNldCB0aGUgY29udHJvbHMgKi8KKwlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKKwlzZXRodWUoZ3NwY2FfZGV2KTsKKwlzZXRjb2xvcihnc3BjYV9kZXYpOworCXNldHNoYXJwbmVzcyhnc3BjYV9kZXYpOworCisJbXNsZWVwKDUpOworCXJlZ19yKGdzcGNhX2RldiwgMHgwMCwgMHgyNTIwLCAxKTsKKwltc2xlZXAoOCk7CisKKwkvKiBzdGFydCB0aGUgY2FwdHVyZSAqLworCXdhaXRfc3RhdHVzXzAoZ3NwY2FfZGV2KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MzEsIDB4MDAwMCwgMHgwMDA0KTsKKwl3YWl0X3N0YXR1c18xKGdzcGNhX2Rldik7CisJd2FpdF9zdGF0dXNfMChnc3BjYV9kZXYpOworCW1zbGVlcCgyMDApOworCisJc2QtPnBrdF9zZXEgPSAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwkvKiBzdG9wIHRoZSBjYXB0dXJlICovCisJd2FpdF9zdGF0dXNfMChnc3BjYV9kZXYpOworCXJlZ193KGdzcGNhX2RldiwgMHgzMSwgMHgwMDAwLCAweDAwMDApOworCXdhaXRfc3RhdHVzXzEoZ3NwY2FfZGV2KTsKKwl3YWl0X3N0YXR1c18wKGdzcGNhX2Rldik7Cit9CisKKy8qIG1vdmUgYSBwYWNrZXQgYWRkaW5nIDB4MDAgYWZ0ZXIgMHhmZiAqLworc3RhdGljIHZvaWQgYWRkX3BhY2tldChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1OCAqZGF0YSwKKwkJCWludCBsZW4pCit7CisJaW50IGk7CisKKwlpID0gMDsKKwlkbyB7CisJCWlmIChkYXRhW2ldID09IDB4ZmYpIHsKKwkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwKKwkJCQkJZGF0YSwgaSArIDEpOworCQkJbGVuIC09IGk7CisJCQlkYXRhICs9IGk7CisJCQkqZGF0YSA9IDB4MDA7CisJCQlpID0gMDsKKwkJfQorCX0gd2hpbGUgKCsraSA8IGxlbik7CisJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBkYXRhLCBsZW4pOworfQorCitzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1OCAqZGF0YSwJCQkvKiBpc29jIHBhY2tldCAqLworCQkJaW50IGxlbikJCQkvKiBpc28gcGFja2V0IGxlbmd0aCAqLworeworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdGF0aWMgY29uc3QgdTggZmZkOVtdID0gezB4ZmYsIDB4ZDl9OworCisJLyogaW1hZ2UgcGFja2V0cyBzdGFydCB3aXRoOgorCSAqCTAyIDhuCisJICogd2l0aCA8bj4gYml0OgorCSAqCTB4MDE6IGV2ZW4gKDApIC8gb2RkICgxKSBpbWFnZQorCSAqCTB4MDI6IGVuZCBvZiBpbWFnZSB3aGVuIHNldAorCSAqLworCWlmIChsZW4gPCAzKQorCQlyZXR1cm47CQkJCS8qIGVtcHR5IHBhY2tldCAqLworCWlmICgqZGF0YSA9PSAweDAyKSB7CisJCWlmIChkYXRhWzFdICYgMHgwMikgeworCQkJc2QtPnBrdF9zZXEgPSAhKGRhdGFbMV0gJiAxKTsKKwkJCWFkZF9wYWNrZXQoZ3NwY2FfZGV2LCBkYXRhICsgMiwgbGVuIC0gMik7CisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwKKwkJCQkJZmZkOSwgMik7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKChkYXRhWzFdICYgMSkgIT0gc2QtPnBrdF9zZXEpCisJCQlnb3RvIGVycjsKKwkJaWYgKGdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9PSBMQVNUX1BBQ0tFVCkKKwkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwKKwkJCQkJc2QtPmpwZWdfaGRyLCBKUEVHX0hEUl9TWik7CisJCWFkZF9wYWNrZXQoZ3NwY2FfZGV2LCBkYXRhICsgMiwgbGVuIC0gMik7CisJCXJldHVybjsKKwl9CitlcnI6CisJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+YnJpZ2h0bmVzcyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOworfQorCitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+Y29udHJhc3QgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+Y29udHJhc3Q7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0aHVlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5odWUgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRodWUoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOworfQorCitzdGF0aWMgaW50IHNkX2dldGh1ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5odWU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0Y29sb3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmNvbG9yID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0Y29sb3IoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOworfQorCitzdGF0aWMgaW50IHNkX2dldGNvbG9yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmNvbG9yOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+c2hhcnBuZXNzID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0c2hhcnBuZXNzKGdzcGNhX2Rldik7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKK30KKworc3RhdGljIGludCBzZF9nZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+c2hhcnBuZXNzOworCXJldHVybiAwOworfQorCisvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5jdHJscyA9IHNkX2N0cmxzLAorCS5uY3RybHMgPSBBUlJBWV9TSVpFKHNkX2N0cmxzKSwKKwkuY29uZmlnID0gc2RfY29uZmlnLAorCS5pbml0ID0gc2RfaW5pdCwKKwkuaXNvY19pbml0ID0gc2RfaXNvY19pbml0LAorCS5zdGFydCA9IHNkX3N0YXJ0LAorCS5zdG9wTiA9IHNkX3N0b3BOLAorCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorfTsKKworLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCitzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDA0ZmMsIDB4MTUyOCl9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCitzdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCS8qIHRoZSB2aWRlbyBpbnRlcmZhY2UgZm9yIGlzb2Nocm9ub3VzIHRyYW5zZmVyIGlzIDEgKi8KKwlpZiAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciAhPSAxKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBnc3BjYV9kZXZfcHJvYmUyKGludGYsIGlkLCAmc2RfZGVzYywgc2l6ZW9mKHN0cnVjdCBzZCksCisJCQkJVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlID0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZSA9IHNkX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gZ3NwY2FfZGlzY29ubmVjdCwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCA9IGdzcGNhX3N1c3BlbmQsCisJLnJlc3VtZSA9IGdzcGNhX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLworc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWluZm8oInJlZ2lzdGVyZWQiKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyB2b2lkIF9fZXhpdCBzZF9tb2RfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWluZm8oImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jCmluZGV4IGI4NjZjNzMuLmMwMmJlYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jCkBAIC01Nyw3ICs1Nyw3IEBACiAjZGVmaW5lIFBhbG1QaXhEQzg1IDEzCiAjZGVmaW5lIFRvcHRyb0luZHVzIDE0CiAKLQl1OCAqanBlZ19oZHI7CisJdTgganBlZ19oZHJbSlBFR19IRFJfU1pdOwogfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwpAQCAtNjY5LDkgKzY2OSw2IEBACiAJX191OCB4bXVsdCwgeW11bHQ7CiAKIAkvKiBjcmVhdGUgdGhlIEpQRUcgaGVhZGVyICovCi0Jc2QtPmpwZWdfaGRyID0ga21hbGxvYyhKUEVHX0hEUl9TWiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzZC0+anBlZ19oZHIpCi0JCXJldHVybiAtRU5PTUVNOwogCWpwZWdfZGVmaW5lKHNkLT5qcGVnX2hkciwgZ3NwY2FfZGV2LT5oZWlnaHQsIGdzcGNhX2Rldi0+d2lkdGgsCiAJCQkweDIyKTsJCS8qIEpQRUcgNDExICovCiAJanBlZ19zZXRfcXVhbChzZC0+anBlZ19oZHIsIHNkLT5xdWFsaXR5KTsKQEAgLTg5MSwxMyArODg4LDYgQEAKIAkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdKTsKIH0KIAotc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCWtmcmVlKHNkLT5qcGVnX2hkcik7Ci19Ci0KIHN0YXRpYyB2b2lkIHNkX3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCXU4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCiAJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCkBAIC0xMDU1LDcgKzEwNDUsNiBAQAogCS5pbml0ID0gc2RfaW5pdCwKIAkuc3RhcnQgPSBzZF9zdGFydCwKIAkuc3RvcE4gPSBzZF9zdG9wTiwKLQkuc3RvcDAgPSBzZF9zdG9wMCwKIAkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKIAkuZ2V0X2pjb21wID0gc2RfZ2V0X2pjb21wLAogCS5zZXRfamNvbXAgPSBzZF9zZXRfamNvbXAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTMweC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcTkzMHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2NlZTVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcTkzMHguYwpAQCAtMCwwICsxLDE0MDIgQEAKKy8qCisgKiBTUTkzMHggc3ViZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEplYW4tRnJhbsOnb2lzIE1vaW5lIDxodHRwOi8vbW9pbmVqZi5mcmVlLmZyPgorICogQ29weXJpZ2h0IChDKSAyMDA2IC0yMDA4IEdlcmFyZCBLbGF2ZXIgPGdlcmFyZCBhdCBna2FsbCBkb3QgaG9iYnkgZG90IG5sPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFNhbSBSZXZpdGNoIDxzYW1yN0Bjcy53YXNoaW5ndG9uLmVkdT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNkZWZpbmUgTU9EVUxFX05BTUUgInNxOTMweCIKKworI2luY2x1ZGUgImdzcGNhLmgiCisjaW5jbHVkZSAianBlZy5oIgorCitNT0RVTEVfQVVUSE9SKCJKZWFuLUZyYW5jb2lzIE1vaW5lIDxodHRwOi8vbW9pbmVqZi5mcmVlLmZyPlxuIgorCQkiR2VyYXJkIEtsYXZlciA8Z2VyYXJkIGF0IGdrYWxsIGRvdCBob2JieSBkb3QgbmxcbiIKKwkJIlNhbSBSZXZpdGNoIDxzYW1yN0Bjcy53YXNoaW5ndG9uLmVkdT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiR1NQQ0EvU1E5MzB4IFVTQiBDYW1lcmEgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNkZWZpbmUgQlVMS19UUkFOU0ZFUl9MRU4gNTEyOAorCisvKiBTdHJ1Y3R1cmUgdG8gaG9sZCBhbGwgb2Ygb3VyIGRldmljZSBzcGVjaWZpYyBzdHVmZiAqLworc3RydWN0IHNkIHsKKwlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCisJdTE2IGV4cG87CisJdTggZ2FpbjsKKworCXU4IHF1YWxpdHk7CQkvKiB3ZWJjYW0gcXVhbGl0eSAwLi4zICovCisjZGVmaW5lIFFVQUxJVFlfREVGIDEKKworCXU4IGdwaW9bMl07CisKKwl1OCBlb2ZfbGVuOworCXU4IGRvX2N0cmw7CisKKwl1OCBzZW5zb3I7CitlbnVtIHsKKwlTRU5TT1JfSUNYMDk4QlEsCisJU0VOU09SX0xaMjRCUCwKKwlTRU5TT1JfTUkwMzYwLAorCVNFTlNPUl9NVDlWMTExLAorCVNFTlNPUl9PVjc2NjAsCisJU0VOU09SX09WOTYzMCwKK30gc2Vuc29yczsKKwl1OCB0eXBlOworI2RlZmluZSBHZW5lcmljIDAKKyNkZWZpbmUgQ3JlYXRpdmVfbGl2ZV9tb3Rpb24gMQorCisJdTgganBlZ19oZHJbSlBFR19IRFJfU1pdOworfTsKKworc3RhdGljIGludCBzZF9zZXRleHBvKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0ZXhwbyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKKwl7CisJICAgIHsKKwkJLmlkID0gVjRMMl9DSURfRVhQT1NVUkUsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgPSAiRXhwb3N1cmUiLAorCQkubWluaW11bSA9IDB4MDAwMSwKKwkJLm1heGltdW0gPSAweDBmZmYsCisJCS5zdGVwID0gMSwKKyNkZWZpbmUgRVhQT19ERUYgMHgwMjdkCisJCS5kZWZhdWx0X3ZhbHVlID0gRVhQT19ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRleHBvLAorCSAgICAuZ2V0ID0gc2RfZ2V0ZXhwbywKKwl9LAorCXsKKwkgICAgeworCQkuaWQgPSBWNEwyX0NJRF9HQUlOLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lID0gIkdhaW4iLAorCQkubWluaW11bSA9IDB4MDEsCisJCS5tYXhpbXVtID0gMHhmZiwKKwkJLnN0ZXAgPSAxLAorI2RlZmluZSBHQUlOX0RFRiAweDYxCisJCS5kZWZhdWx0X3ZhbHVlID0gR0FJTl9ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRnYWluLAorCSAgICAuZ2V0ID0gc2RfZ2V0Z2FpbiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKKwl7MTYwLCAxMjAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxNjAsCisJCS5zaXplaW1hZ2UgPSAxNjAgKiAxMjAgKiA1IC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAwfSwKKwl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiA0IC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAxfSwKKwl7NjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA2NDAsCisJCS5zaXplaW1hZ2UgPSA2NDAgKiA0ODAgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAyfSwKK307CisKKy8qIEpQRUcgcXVhbGl0eSBpbmRleGVkIGJ5IHdlYmNhbSBxdWFsaXR5ICovCisjZGVmaW5lIFFVQUxfMCA5MAorI2RlZmluZSBRVUFMXzEgODUKKyNkZWZpbmUgUVVBTF8yIDc1CisjZGVmaW5lIFFVQUxfMyA3MAorc3RhdGljIGNvbnN0IHU4IHF1YWxpdHlfdGJbNF0gPSB7IFFVQUxfMCwgUVVBTF8xLCBRVUFMXzIsIFFVQUxfMyB9OworCisvKiBzcTkzMHggcmVnaXN0ZXJzICovCisjZGVmaW5lIFNROTMwX0NUUkxfVUNCVVNfSU8JMHgwMDAxCisjZGVmaW5lIFNROTMwX0NUUkxfSTJDX0lPCTB4MDAwMgorI2RlZmluZSBTUTkzMF9DVFJMX0dQSU8JCTB4MDAwNQorI2RlZmluZSBTUTkzMF9DVFJMX0NBUF9TVEFSVAkweDAwMTAKKyNkZWZpbmUgU1E5MzBfQ1RSTF9DQVBfU1RPUAkweDAwMTEKKyNkZWZpbmUgU1E5MzBfQ1RSTF9TRVRfRVhQT1NVUkUgMHgwMDFkCisjZGVmaW5lIFNROTMwX0NUUkxfUkVTRVQJMHgwMDFlCisjZGVmaW5lIFNROTMwX0NUUkxfR0VUX0RFVl9JTkZPIDB4MDAxZgorCisvKiBncGlvIDEgKDguLjE1KSAqLworI2RlZmluZSBTUTkzMF9HUElPX0RGTF9JMkNfU0RBCTB4MDAwMQorI2RlZmluZSBTUTkzMF9HUElPX0RGTF9JMkNfU0NMCTB4MDAwMgorI2RlZmluZSBTUTkzMF9HUElPX1JTVEJBUgkweDAwMDQKKyNkZWZpbmUgU1E5MzBfR1BJT19FWFRSQTEJMHgwMDQwCisjZGVmaW5lIFNROTMwX0dQSU9fRVhUUkEyCTB4MDA4MAorLyogZ3BpbyAzICgyNC4uMzEpICovCisjZGVmaW5lIFNROTMwX0dQSU9fUE9XRVIJMHgwMjAwCisjZGVmaW5lIFNROTMwX0dQSU9fREZMX0xFRAkweDEwMDAKKworc3RydWN0IHVjYnVzX3dyaXRlX2NtZCB7CisJdTE2CWJ3X2FkZHI7CisJdTgJYndfZGF0YTsKK307CitzdHJ1Y3QgaTJjX3dyaXRlX2NtZCB7CisJdTgJcmVnOworCXUxNgl2YWw7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVjYnVzX3dyaXRlX2NtZCBpY3gwOThicV9zdGFydF8wW10gPSB7CisJezB4MDM1NCwgMHgwMH0sIHsweDAzZmEsIDB4MDB9LCB7MHhmODAwLCAweDAyfSwgezB4ZjgwMSwgMHhjZX0sCisJezB4ZjgwMiwgMHhjMX0sIHsweGY4MDQsIDB4MDB9LCB7MHhmODA4LCAweDAwfSwgezB4ZjgwOSwgMHgwZX0sCisJezB4ZjgwYSwgMHgwMX0sIHsweGY4MGIsIDB4ZWV9LCB7MHhmODA3LCAweDYwfSwgezB4ZjgwYywgMHgwMn0sCisJezB4ZjgwZCwgMHhmMH0sIHsweGY4MGUsIDB4MDN9LCB7MHhmODBmLCAweDBhfSwgezB4ZjgxYywgMHgwMn0sCisJezB4ZjgxZCwgMHhmMH0sIHsweGY4MWUsIDB4MDN9LCB7MHhmODFmLCAweDBhfSwgezB4ZjgzYSwgMHgwMH0sCisJezB4ZjgzYiwgMHgxMH0sIHsweGY4M2MsIDB4MDB9LCB7MHhmODNkLCAweDRlfSwgezB4ZjgxMCwgMHgwNH0sCisJezB4ZjgxMSwgMHgwMH0sIHsweGY4MTIsIDB4MDJ9LCB7MHhmODEzLCAweDEwfSwgezB4ZjgwMywgMHgwMH0sCisJezB4ZjgxNCwgMHgwMX0sIHsweGY4MTUsIDB4MTh9LCB7MHhmODE2LCAweDAwfSwgezB4ZjgxNywgMHg0OH0sCisJezB4ZjgxOCwgMHgwMH0sIHsweGY4MTksIDB4MjV9LCB7MHhmODFhLCAweDAwfSwgezB4ZjgxYiwgMHgzY30sCisJezB4ZjgyZiwgMHgwM30sIHsweGY4MjAsIDB4ZmZ9LCB7MHhmODIxLCAweDBkfSwgezB4ZjgyMiwgMHhmZn0sCisJezB4ZjgyMywgMHgwN30sIHsweGY4MjQsIDB4ZmZ9LCB7MHhmODI1LCAweDAzfSwgezB4ZjgyNiwgMHhmZn0sCisJezB4ZjgyNywgMHgwNn0sIHsweGY4MjgsIDB4ZmZ9LCB7MHhmODI5LCAweDAzfSwgezB4ZjgyYSwgMHhmZn0sCisJezB4ZjgyYiwgMHgwY30sIHsweGY4MmMsIDB4ZmR9LCB7MHhmODJkLCAweDAxfSwgezB4ZjgyZSwgMHgwMH0sCisJezB4ZjgzMCwgMHgwMH0sIHsweGY4MzEsIDB4NDd9LCB7MHhmODMyLCAweDAwfSwgezB4ZjgzMywgMHgwMH0sCisJezB4Zjg1MCwgMHgwMH0sIHsweGY4NTEsIDB4MDB9LCB7MHhmODUyLCAweDAwfSwgezB4Zjg1MywgMHgyNH0sCisJezB4Zjg1NCwgMHgwMH0sIHsweGY4NTUsIDB4MTh9LCB7MHhmODU2LCAweDAwfSwgezB4Zjg1NywgMHgzY30sCisJezB4Zjg1OCwgMHgwMH0sIHsweGY4NTksIDB4MGN9LCB7MHhmODVhLCAweDAwfSwgezB4Zjg1YiwgMHgzMH0sCisJezB4Zjg1YywgMHgwMH0sIHsweGY4NWQsIDB4MGN9LCB7MHhmODVlLCAweDAwfSwgezB4Zjg1ZiwgMHgzMH0sCisJezB4Zjg2MCwgMHgwMH0sIHsweGY4NjEsIDB4NDh9LCB7MHhmODYyLCAweDAxfSwgezB4Zjg2MywgMHhkY30sCisJezB4Zjg2NCwgMHhmZn0sIHsweGY4NjUsIDB4OTh9LCB7MHhmODY2LCAweGZmfSwgezB4Zjg2NywgMHhjMH0sCisJezB4Zjg2OCwgMHhmZn0sIHsweGY4NjksIDB4NzB9LCB7MHhmODZjLCAweGZmfSwgezB4Zjg2ZCwgMHgwMH0sCisJezB4Zjg2YSwgMHhmZn0sIHsweGY4NmIsIDB4NDh9LCB7MHhmODZlLCAweGZmfSwgezB4Zjg2ZiwgMHgwMH0sCisJezB4Zjg3MCwgMHgwMX0sIHsweGY4NzEsIDB4ZGJ9LCB7MHhmODcyLCAweDAxfSwgezB4Zjg3MywgMHhmYX0sCisJezB4Zjg3NCwgMHgwMX0sIHsweGY4NzUsIDB4ZGJ9LCB7MHhmODc2LCAweDAxfSwgezB4Zjg3NywgMHhmYX0sCisJezB4Zjg3OCwgMHgwZn0sIHsweGY4NzksIDB4MGZ9LCB7MHhmODdhLCAweGZmfSwgezB4Zjg3YiwgMHhmZn0sCisJezB4ZjgwMCwgMHgwM30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVjYnVzX3dyaXRlX2NtZCBpY3gwOThicV9zdGFydF8xW10gPSB7CisJezB4ZjVmMCwgMHgwMH0sIHsweGY1ZjEsIDB4Y2R9LCB7MHhmNWYyLCAweDgwfSwgezB4ZjVmMywgMHg4MH0sCisJezB4ZjVmNCwgMHhjMH0sCisJezB4ZjVmMCwgMHg0OX0sIHsweGY1ZjEsIDB4Y2R9LCB7MHhmNWYyLCAweDgwfSwgezB4ZjVmMywgMHg4MH0sCisJezB4ZjVmNCwgMHhjMH0sCisJezB4ZjVmYSwgMHgwMH0sIHsweGY1ZjYsIDB4MDB9LCB7MHhmNWY3LCAweDAwfSwgezB4ZjVmOCwgMHgwMH0sCisJezB4ZjVmOSwgMHgwMH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdWNidXNfd3JpdGVfY21kIGljeDA5OGJxX3N0YXJ0XzJbXSA9IHsKKwl7MHhmODAwLCAweDAyfSwgezB4ZjgwNywgMHhmZn0sIHsweGY4MDUsIDB4ODJ9LCB7MHhmODA2LCAweDAwfSwKKwl7MHhmODA3LCAweDdmfSwgezB4ZjgwMCwgMHgwM30sCisJezB4ZjgwMCwgMHgwMn0sIHsweGY4MDcsIDB4ZmZ9LCB7MHhmODA1LCAweDQwfSwgezB4ZjgwNiwgMHgwMH0sCisJezB4ZjgwNywgMHg3Zn0sIHsweGY4MDAsIDB4MDN9LAorCXsweGY4MDAsIDB4MDJ9LCB7MHhmODA3LCAweGZmfSwgezB4ZjgwNSwgMHhjZn0sIHsweGY4MDYsIDB4ZDB9LAorCXsweGY4MDcsIDB4N2Z9LCB7MHhmODAwLCAweDAzfSwKKwl7MHhmODAwLCAweDAyfSwgezB4ZjgwNywgMHhmZn0sIHsweGY4MDUsIDB4MDB9LCB7MHhmODA2LCAweDAwfSwKKwl7MHhmODA3LCAweDdmfSwgezB4ZjgwMCwgMHgwM30KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdWNidXNfd3JpdGVfY21kIGx6MjRicF9zdGFydF8wW10gPSB7CisJezB4MDM1NCwgMHgwMH0sIHsweDAzZmEsIDB4MDB9LCB7MHhmODAwLCAweDAyfSwgezB4ZjgwMSwgMHhiZX0sCisJezB4ZjgwMiwgMHhjNn0sIHsweGY4MDQsIDB4MDB9LCB7MHhmODA4LCAweDAwfSwgezB4ZjgwOSwgMHgwNn0sCisJezB4ZjgwYSwgMHgwMX0sIHsweGY4MGIsIDB4ZmV9LCB7MHhmODA3LCAweDg0fSwgezB4ZjgwYywgMHgwMn0sCisJezB4ZjgwZCwgMHhmN30sIHsweGY4MGUsIDB4MDN9LCB7MHhmODBmLCAweDBifSwgezB4ZjgxYywgMHgwMH0sCisJezB4ZjgxZCwgMHg0OX0sIHsweGY4MWUsIDB4MDN9LCB7MHhmODFmLCAweDBifSwgezB4ZjgzYSwgMHgwMH0sCisJezB4ZjgzYiwgMHgwMX0sIHsweGY4M2MsIDB4MDB9LCB7MHhmODNkLCAweDZifSwgezB4ZjgxMCwgMHgwM30sCisJezB4ZjgxMSwgMHgxMH0sIHsweGY4MTIsIDB4MDJ9LCB7MHhmODEzLCAweDZmfSwgezB4ZjgwMywgMHgwMH0sCisJezB4ZjgxNCwgMHgwMH0sIHsweGY4MTUsIDB4NDR9LCB7MHhmODE2LCAweDAwfSwgezB4ZjgxNywgMHg0OH0sCisJezB4ZjgxOCwgMHgwMH0sIHsweGY4MTksIDB4MjV9LCB7MHhmODFhLCAweDAwfSwgezB4ZjgxYiwgMHgzY30sCisJezB4ZjgyZiwgMHgwM30sIHsweGY4MjAsIDB4ZmZ9LCB7MHhmODIxLCAweDBkfSwgezB4ZjgyMiwgMHhmZn0sCisJezB4ZjgyMywgMHgwN30sIHsweGY4MjQsIDB4ZmR9LCB7MHhmODI1LCAweDA3fSwgezB4ZjgyNiwgMHhmMH0sCisJezB4ZjgyNywgMHgwY30sIHsweGY4MjgsIDB4ZmZ9LCB7MHhmODI5LCAweDAzfSwgezB4ZjgyYSwgMHhmZn0sCisJezB4ZjgyYiwgMHgwY30sIHsweGY4MmMsIDB4ZmN9LCB7MHhmODJkLCAweDAxfSwgezB4ZjgyZSwgMHgwMH0sCisJezB4ZjgzMCwgMHgwMH0sIHsweGY4MzEsIDB4NDd9LCB7MHhmODMyLCAweDAwfSwgezB4ZjgzMywgMHgwMH0sCisJezB4Zjg1MCwgMHgwMH0sIHsweGY4NTEsIDB4MDB9LCB7MHhmODUyLCAweDAwfSwgezB4Zjg1MywgMHgyNH0sCisJezB4Zjg1NCwgMHgwMH0sIHsweGY4NTUsIDB4MGN9LCB7MHhmODU2LCAweDAwfSwgezB4Zjg1NywgMHgzMH0sCisJezB4Zjg1OCwgMHgwMH0sIHsweGY4NTksIDB4MTh9LCB7MHhmODVhLCAweDAwfSwgezB4Zjg1YiwgMHgzY30sCisJezB4Zjg1YywgMHgwMH0sIHsweGY4NWQsIDB4MTh9LCB7MHhmODVlLCAweDAwfSwgezB4Zjg1ZiwgMHgzY30sCisJezB4Zjg2MCwgMHhmZn0sIHsweGY4NjEsIDB4Mzd9LCB7MHhmODYyLCAweGZmfSwgezB4Zjg2MywgMHgxZH0sCisJezB4Zjg2NCwgMHhmZn0sIHsweGY4NjUsIDB4OTh9LCB7MHhmODY2LCAweGZmfSwgezB4Zjg2NywgMHhjMH0sCisJezB4Zjg2OCwgMHgwMH0sIHsweGY4NjksIDB4Mzd9LCB7MHhmODZjLCAweDAyfSwgezB4Zjg2ZCwgMHgxZH0sCisJezB4Zjg2YSwgMHgwMH0sIHsweGY4NmIsIDB4Mzd9LCB7MHhmODZlLCAweDAyfSwgezB4Zjg2ZiwgMHgxZH0sCisJezB4Zjg3MCwgMHgwMX0sIHsweGY4NzEsIDB4YzZ9LCB7MHhmODcyLCAweDAyfSwgezB4Zjg3MywgMHgwNH0sCisJezB4Zjg3NCwgMHgwMX0sIHsweGY4NzUsIDB4YzZ9LCB7MHhmODc2LCAweDAyfSwgezB4Zjg3NywgMHgwNH0sCisJezB4Zjg3OCwgMHgwZn0sIHsweGY4NzksIDB4MGZ9LCB7MHhmODdhLCAweGZmfSwgezB4Zjg3YiwgMHhmZn0sCisJezB4ZjgwMCwgMHgwM30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVjYnVzX3dyaXRlX2NtZCBsejI0YnBfc3RhcnRfMV9nZW5bXSA9IHsKKwl7MHhmNWYwLCAweDAwfSwgezB4ZjVmMSwgMHhmZn0sIHsweGY1ZjIsIDB4ODB9LCB7MHhmNWYzLCAweDgwfSwKKwl7MHhmNWY0LCAweGIzfSwKKwl7MHhmNWYwLCAweDQwfSwgezB4ZjVmMSwgMHhmZn0sIHsweGY1ZjIsIDB4ODB9LCB7MHhmNWYzLCAweDgwfSwKKwl7MHhmNWY0LCAweGIzfSwKKwl7MHhmNWZhLCAweDAwfSwgezB4ZjVmNiwgMHgwMH0sIHsweGY1ZjcsIDB4MDB9LCB7MHhmNWY4LCAweDAwfSwKKwl7MHhmNWY5LCAweDAwfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1Y2J1c193cml0ZV9jbWQgbHoyNGJwX3N0YXJ0XzFfY2xtW10gPSB7CisJezB4ZjVmMCwgMHgwMH0sIHsweGY1ZjEsIDB4ZmZ9LCB7MHhmNWYyLCAweDg4fSwgezB4ZjVmMywgMHg4OH0sCisJezB4ZjVmNCwgMHhjMH0sCisJezB4ZjVmMCwgMHg0MH0sIHsweGY1ZjEsIDB4ZmZ9LCB7MHhmNWYyLCAweDg4fSwgezB4ZjVmMywgMHg4OH0sCisJezB4ZjVmNCwgMHhjMH0sCisJezB4ZjVmYSwgMHgwMH0sIHsweGY1ZjYsIDB4MDB9LCB7MHhmNWY3LCAweDAwfSwgezB4ZjVmOCwgMHgwMH0sCisJezB4ZjVmOSwgMHgwMH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdWNidXNfd3JpdGVfY21kIGx6MjRicF9zdGFydF8yW10gPSB7CisJezB4ZjgwMCwgMHgwMn0sIHsweGY4MDcsIDB4ZmZ9LCB7MHhmODA1LCAweDgwfSwgezB4ZjgwNiwgMHgwMH0sCisJezB4ZjgwNywgMHg3Zn0sIHsweGY4MDAsIDB4MDN9LAorCXsweGY4MDAsIDB4MDJ9LCB7MHhmODA3LCAweGZmfSwgezB4ZjgwNSwgMHg0ZX0sIHsweGY4MDYsIDB4MDB9LAorCXsweGY4MDcsIDB4N2Z9LCB7MHhmODAwLCAweDAzfSwKKwl7MHhmODAwLCAweDAyfSwgezB4ZjgwNywgMHhmZn0sIHsweGY4MDUsIDB4YzB9LCB7MHhmODA2LCAweDQ4fSwKKwl7MHhmODA3LCAweDdmfSwgezB4ZjgwMCwgMHgwM30sCisJezB4ZjgwMCwgMHgwMn0sIHsweGY4MDcsIDB4ZmZ9LCB7MHhmODA1LCAweDAwfSwgezB4ZjgwNiwgMHgwMH0sCisJezB4ZjgwNywgMHg3Zn0sIHsweGY4MDAsIDB4MDN9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVjYnVzX3dyaXRlX2NtZCBtaTAzNjBfc3RhcnRfMFtdID0geworCXsweDAzNTQsIDB4MDB9LCB7MHgwM2ZhLCAweDAwfSwgezB4ZjMzMiwgMHhjY30sIHsweGYzMzMsIDB4Y2N9LAorCXsweGYzMzQsIDB4Y2N9LCB7MHhmMzM1LCAweGNjfSwgezB4ZjMzZiwgMHgwMH0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY193cml0ZV9jbWQgbWkwMzYwX2luaXRfMjNbXSA9IHsKKwl7MHgzMCwgMHgwMDQwfSwJCS8qIHJlc2VydmVkIC0gZGVmIDB4MDAwNSAqLworCXsweDMxLCAweDAwMDB9LAkJLyogcmVzZXJ2ZWQgLSBkZWYgMHgwMDJhICovCisJezB4MzQsIDB4MDEwMH0sCQkvKiByZXNlcnZlZCAtIGRlZiAweDAxMDAgKi8KKwl7MHgzZCwgMHgwNjhmfSwJCS8qIHJlc2VydmVkIC0gZGVmIDB4MDY4ZiAqLworfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX3dyaXRlX2NtZCBtaTAzNjBfaW5pdF8yNFtdID0geworCXsweDAzLCAweDAxZTV9LAkJLyogd2luZG93IGhlaWdodCAqLworCXsweDA0LCAweDAyODV9LAkJLyogd2luZG93IHdpZHRoICovCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfd3JpdGVfY21kIG1pMDM2MF9pbml0XzI1W10gPSB7CisJezB4MzUsIDB4MDAyMH0sCQkvKiBnbG9iYWwgZ2FpbiAqLworCXsweDJiLCAweDAwMjB9LAkJLyogZ3JlZW4xIGdhaW4gKi8KKwl7MHgyYywgMHgwMDJhfSwJCS8qIGJsdWUgZ2FpbiAqLworCXsweDJkLCAweDAwMjh9LAkJLyogcmVkIGdhaW4gKi8KKwl7MHgyZSwgMHgwMDIwfSwJCS8qIGdyZWVuMiBnYWluICovCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB1Y2J1c193cml0ZV9jbWQgbWkwMzYwX3N0YXJ0XzFbXSA9IHsKKwl7MHhmNWYwLCAweDExfSwgezB4ZjVmMSwgMHg5OX0sIHsweGY1ZjIsIDB4ODB9LCB7MHhmNWYzLCAweDgwfSwKKwl7MHhmNWY0LCAweGE2fSwKKwl7MHhmNWYwLCAweDUxfSwgezB4ZjVmMSwgMHg5OX0sIHsweGY1ZjIsIDB4ODB9LCB7MHhmNWYzLCAweDgwfSwKKwl7MHhmNWY0LCAweGE2fSwKKwl7MHhmNWZhLCAweDAwfSwgezB4ZjVmNiwgMHgwMH0sIHsweGY1ZjcsIDB4MDB9LCB7MHhmNWY4LCAweDAwfSwKKwl7MHhmNWY5LCAweDAwfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX3dyaXRlX2NtZCBtaTAzNjBfc3RhcnRfMltdID0geworCXsweDYyLCAweDA0MWR9LAkJLyogcmVzZXJ2ZWQgLSBkZWYgMHgwNDE4ICovCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfd3JpdGVfY21kIG1pMDM2MF9zdGFydF8zW10gPSB7CisJezB4MDUsIDB4MDA3Yn0sCQkvKiBob3JpeiBibGFua2luZyAqLworfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX3dyaXRlX2NtZCBtaTAzNjBfc3RhcnRfNFtdID0geworCXsweDA1LCAweDAzZjV9LAkJLyogaG9yaXogYmxhbmtpbmcgKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX3dyaXRlX2NtZCBtdDl2MTExX2luaXRfMFtdID0geworCXsweDAxLCAweDAwMDF9LAkJLyogc2VsZWN0IElGUC9TT0MgcmVnaXN0ZXJzICovCisJezB4MDYsIDB4MzAwY30sCQkvKiBvcGVyYXRpbmcgbW9kZSBjb250cm9sICovCisJezB4MDgsIDB4Y2MwMH0sCQkvKiBvdXRwdXQgZm9ybWF0IGNvbnRyb2wgKFJHQikgKi8KKwl7MHgwMSwgMHgwMDA0fSwJCS8qIHNlbGVjdCBjb3JlIHJlZ2lzdGVycyAqLworfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX3dyaXRlX2NtZCBtdDl2MTExX2luaXRfMVtdID0geworCXsweDAzLCAweDAxZTV9LAkJLyogd2luZG93IGhlaWdodCAqLworCXsweDA0LCAweDAyODV9LAkJLyogd2luZG93IHdpZHRoICovCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfd3JpdGVfY21kIG10OXYxMTFfaW5pdF8yW10gPSB7CisJezB4MzAsIDB4NzgwMH0sCisJezB4MzEsIDB4MDAwMH0sCisJezB4MDcsIDB4MzAwMn0sCQkvKiBvdXRwdXQgY29udHJvbCAqLworCXsweDM1LCAweDAwMjB9LAkJLyogZ2xvYmFsIGdhaW4gKi8KKwl7MHgyYiwgMHgwMDIwfSwJCS8qIGdyZWVuMSBnYWluICovCisJezB4MmMsIDB4MDAyMH0sCQkvKiBibHVlIGdhaW4gKi8KKwl7MHgyZCwgMHgwMDIwfSwJCS8qIHJlZCBnYWluICovCisJezB4MmUsIDB4MDAyMH0sCQkvKiBncmVlbjIgZ2FpbiAqLworfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdWNidXNfd3JpdGVfY21kIG10OXYxMTFfc3RhcnRfMVtdID0geworCXsweGY1ZjAsIDB4MTF9LCB7MHhmNWYxLCAweDk2fSwgezB4ZjVmMiwgMHg4MH0sIHsweGY1ZjMsIDB4ODB9LAorCXsweGY1ZjQsIDB4YWF9LAorCXsweGY1ZjAsIDB4NTF9LCB7MHhmNWYxLCAweDk2fSwgezB4ZjVmMiwgMHg4MH0sIHsweGY1ZjMsIDB4ODB9LAorCXsweGY1ZjQsIDB4YWF9LAorCXsweGY1ZmEsIDB4MDB9LCB7MHhmNWY2LCAweDBhfSwgezB4ZjVmNywgMHgwYX0sIHsweGY1ZjgsIDB4MGF9LAorCXsweGY1ZjksIDB4MGF9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfd3JpdGVfY21kIG10OXYxMTFfaW5pdF8zW10gPSB7CisJezB4NjIsIDB4MDQwNX0sCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfd3JpdGVfY21kIG10OXYxMTFfaW5pdF80W10gPSB7CisJezB4MDUsIDB4MDBjZX0sCQkvKiBob3Jpem9udGFsIGJsYW5raW5nICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVjYnVzX3dyaXRlX2NtZCBvdjc2NjBfc3RhcnRfMFtdID0geworCXsweDAzNTQsIDB4MDB9LCB7MHgwM2ZhLCAweDAwfSwgezB4ZjMzMiwgMHgwMH0sIHsweGYzMzMsIDB4YzB9LAorCXsweGYzMzQsIDB4Mzl9LCB7MHhmMzM1LCAweGU3fSwgezB4ZjMzZiwgMHgwM30KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdWNidXNfd3JpdGVfY21kIG92OTYzMF9zdGFydF8wW10gPSB7CisJezB4MDM1NCwgMHgwMH0sIHsweDAzZmEsIDB4MDB9LCB7MHhmMzMyLCAweDAwfSwgezB4ZjMzMywgMHgwMH0sCisJezB4ZjMzNCwgMHgzZX0sIHsweGYzMzUsIDB4Zjh9LCB7MHhmMzNmLCAweDAzfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjYXBfcyB7CisJdTgJY2Nfc2l6ZWlkOworCXU4CWNjX2J5dGVzWzMyXTsKK30gY2FwY29uZmlnWzRdWzNdID0geworCVtTRU5TT1JfSUNYMDk4QlFdID0geworCQl7MCwJCQkJLyogSlBFRywgMTYweDEyMCAqLworCQkgIHsweDAxLCAweDFmLCAweDIwLCAweDBlLCAweDAwLCAweDlmLCAweDAyLCAweGVlLAorCQkgICAweDAxLCAweDAyLCAweDAwLCAweDA4LCAweDE4LCAweDEyLCAweDc4LCAweGM4LAorCQkgICAweDAyLCAweDhiLCAweDAwLCAweDhiLCAweDAwLCAweDQxLCAweDAxLCAweDQxLAorCQkgICAweDAxLCAweDQxLCAweDAxLCAweDA1LCAweDQwLCAweDAxLCAweGYwLCAweDAwfSB9LAorCQl7MiwJCQkJLyogSlBFRywgMzIweDI0MCAqLworCQkgIHsweDAxLCAweDFmLCAweDIwLCAweDBlLCAweDAwLCAweDlmLCAweDAyLCAweGVlLAorCQkgICAweDAxLCAweDAyLCAweDAwLCAweDA4LCAweDE4LCAweDEyLCAweDc4LCAweGM4LAorCQkgICAweDAyLCAweGRmLCAweDAxLCAweDAwLCAweDAwLCAweDNmLCAweDAxLCAweDNmLAorCQkgICAweDAxLCAweDAwLCAweDAwLCAweDA1LCAweDQwLCAweDAxLCAweGYwLCAweDAwfSB9LAorCQl7NCwJCQkJLyogSlBFRywgNjQweDQ4MCAqLworCQkgIHsweDAxLCAweDIyLCAweDIwLCAweDBlLCAweDAwLCAweGEyLCAweDAyLCAweGYwLAorCQkgICAweDAxLCAweDAyLCAweDAwLCAweDA4LCAweDE4LCAweDEyLCAweDc4LCAweGM4LAorCQkgICAweDA3LCAweGUxLCAweDAxLCAweGUxLCAweDAxLCAweDNmLCAweDAxLCAweDNmLAorCQkgICAweDAxLCAweDNmLCAweDAxLCAweDA1LCAweDgwLCAweDAyLCAweGUwLCAweDAxfSB9LAorCX0sCisJW1NFTlNPUl9MWjI0QlBdID0geworCQl7MCwJCQkJLyogSlBFRywgMTYweDEyMCAqLworCQkgIHsweDAxLCAweDFmLCAweDIwLCAweDBlLCAweDAwLCAweDlmLCAweDAyLCAweGVlLAorCQkgICAweDAxLCAweDAyLCAweDAwLCAweDA4LCAweDE4LCAweDEyLCAweDc4LCAweGM4LAorCQkgICAweDAyLCAweDhiLCAweDAwLCAweDhiLCAweDAwLCAweDQxLCAweDAxLCAweDQxLAorCQkgICAweDAxLCAweDQxLCAweDAxLCAweDA1LCAweDQwLCAweDAxLCAweGYwLCAweDAwfSB9LAorCQl7MiwJCQkJLyogSlBFRywgMzIweDI0MCAqLworCQkgIHsweDAxLCAweDIyLCAweDIwLCAweDBlLCAweDAwLCAweGEyLCAweDAyLCAweGVlLAorCQkgICAweDAxLCAweDAyLCAweDAwLCAweDA4LCAweDE4LCAweDEyLCAweDc4LCAweGM4LAorCQkgICAweDAyLCAweGRmLCAweDAxLCAweDAwLCAweDAwLCAweDNmLCAweDAxLCAweDNmLAorCQkgICAweDAxLCAweDAwLCAweDAwLCAweDA1LCAweDQwLCAweDAxLCAweGYwLCAweDAwfSB9LAorCQl7NCwJCQkJLyogSlBFRywgNjQweDQ4MCAqLworCQkgIHsweDAxLCAweDIyLCAweDIwLCAweDBlLCAweDAwLCAweGEyLCAweDAyLCAweGYwLAorCQkgICAweDAxLCAweDAyLCAweDAwLCAweDA4LCAweDE4LCAweDEyLCAweDc4LCAweGM4LAorCQkgICAweDA3LCAweGUxLCAweDAxLCAweGUxLCAweDAxLCAweDNmLCAweDAxLCAweDNmLAorCQkgICAweDAxLCAweDNmLCAweDAxLCAweDA1LCAweDgwLCAweDAyLCAweGUwLCAweDAxfSB9LAorCX0sCisJW1NFTlNPUl9NSTAzNjBdID0geworCQl7MCwJCQkJLyogSlBFRywgMTYweDEyMCAqLworCQkgIHsweDA1LCAweDNkLCAweDIwLCAweDBiLCAweDAwLCAweGJkLCAweDAyLCAweDBiLAorCQkgICAweDAyLCAweDAyLCAweDAwLCAweDA4LCAweDE4LCAweDEyLCAweDc4LCAweGM4LAorCQkgICAweDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDlmLCAweDAwLCAweDlmLAorCQkgICAweDAwLCAweDlmLCAweDAxLCAweDA1LCAweGEwLCAweDAwLCAweDgwLCAweDAwfSB9LAorCQl7MiwJCQkJLyogSlBFRywgMzIweDI0MCAqLworCQkgIHsweDAxLCAweDAyLCAweDIwLCAweDAxLCAweDIwLCAweDgyLCAweDAyLCAweGUxLAorLypmaXhtZQkJCQkgICAgICAgMDMJCSAgICAgICBlMyAqLworCQkgICAweDAxLCAweDAyLCAweDAwLCAweDA4LCAweDE4LCAweDEyLCAweDc4LCAweGM4LAorCQkgICAweDAyLCAweGRmLCAweDAxLCAweDAwLCAweDAwLCAweDNmLCAweDAxLCAweDNmLAorCQkgICAweDAxLCAweDAwLCAweDAwLCAweDA1LCAweDQwLCAweDAxLCAweGYwLCAweDAwfSB9LAorCQl7NCwJCQkJLyogSlBFRywgNjQweDQ4MCAqLworCQkgIHsweDAxLCAweDAyLCAweDIwLCAweDAxLCAweDIwLCAweDgyLCAweDAyLCAweGUzLAorCQkgICAweDAxLCAweDAyLCAweDAwLCAweDA4LCAweDE4LCAweDEyLCAweDc4LCAweGM4LAorCQkgICAweDA3LCAweGUxLCAweDAxLCAweGUxLCAweDAxLCAweDNmLCAweDAxLCAweDNmLAorCQkgICAweDAxLCAweDNmLCAweDAxLCAweDA1LCAweDgwLCAweDAyLCAweGUwLCAweDAxfSB9LAorCX0sCisJW1NFTlNPUl9NVDlWMTExXSA9IHsKKwkJezAsCQkJCS8qIEpQRUcsIDE2MHgxMjAgKi8KKwkJICB7MHgwNSwgMHgzZCwgMHgyMCwgMHgwYiwgMHgwMCwgMHhiZCwgMHgwMiwgMHgwYiwKKwkJICAgMHgwMiwgMHgwMiwgMHgwMCwgMHgwOCwgMHgxOCwgMHgxMiwgMHg3OCwgMHhjOCwKKwkJICAgMHgwMiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg5ZiwgMHgwMCwgMHg5ZiwKKwkJICAgMHgwMCwgMHg5ZiwgMHgwMSwgMHgwNSwgMHhhMCwgMHgwMCwgMHg4MCwgMHgwMH0gfSwKKwkJezIsCQkJCS8qIEpQRUcsIDMyMHgyNDAgKi8KKwkJICB7MHgwMSwgMHgwMiwgMHgyMCwgMHgwMywgMHgyMCwgMHg4MiwgMHgwMiwgMHhlMywKKwkJICAgMHgwMSwgMHgwMiwgMHgwMCwgMHgwOCwgMHgxOCwgMHgxMiwgMHg3OCwgMHhjOCwKKwkJICAgMHgwMiwgMHhkZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzZiwgMHgwMSwgMHgzZiwKKwkJICAgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0MCwgMHgwMSwgMHhmMCwgMHgwMH0gfSwKKwkJezQsCQkJCS8qIEpQRUcsIDY0MHg0ODAgKi8KKwkJICB7MHgwMSwgMHgwMiwgMHgyMCwgMHgwMywgMHgyMCwgMHg4MiwgMHgwMiwgMHhlMywKKwkJICAgMHgwMSwgMHgwMiwgMHgwMCwgMHgwOCwgMHgxOCwgMHgxMiwgMHg3OCwgMHhjOCwKKwkJICAgMHgwNywgMHhlMSwgMHgwMSwgMHhlMSwgMHgwMSwgMHgzZiwgMHgwMSwgMHgzZiwKKwkJICAgMHgwMSwgMHgzZiwgMHgwMSwgMHgwNSwgMHg4MCwgMHgwMiwgMHhlMCwgMHgwMX0gfSwKKwl9LAorfTsKKworc3RydWN0IHNlbnNvcl9zIHsKKwljb25zdCBjaGFyICpuYW1lOworCXU4IGkyY19hZGRyOworCXU4IGkyY19kdW07CisJdTggZ3Bpb1s1XTsKKwl1OCBjbWRfbGVuOworCWNvbnN0IHN0cnVjdCB1Y2J1c193cml0ZV9jbWQgKmNtZDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Vuc29yX3Mgc2Vuc29yX3RiW10gPSB7CisJW1NFTlNPUl9JQ1gwOThCUV0gPSB7CisJCSJpY3gwOThicCIsCisJCTB4MDAsIDB4MDAsCisJCXswLAorCQkgU1E5MzBfR1BJT19ERkxfSTJDX1NEQSB8IFNROTMwX0dQSU9fREZMX0kyQ19TQ0wsCisJCSBTUTkzMF9HUElPX0RGTF9JMkNfU0RBLAorCQkgMCwKKwkJIFNROTMwX0dQSU9fUlNUQkFSCisJCX0sCisJCTgsIGljeDA5OGJxX3N0YXJ0XzAKKwkgICAgfSwKKwlbU0VOU09SX0xaMjRCUF0gPSB7CisJCSJsejI0YnAiLAorCQkweDAwLCAweDAwLAorCQl7MCwKKwkJIFNROTMwX0dQSU9fREZMX0kyQ19TREEgfCBTUTkzMF9HUElPX0RGTF9JMkNfU0NMLAorCQkgU1E5MzBfR1BJT19ERkxfSTJDX1NEQSwKKwkJIDAsCisJCSBTUTkzMF9HUElPX1JTVEJBUgorCQl9LAorCQk4LCBsejI0YnBfc3RhcnRfMAorCSAgICB9LAorCVtTRU5TT1JfTUkwMzYwXSA9IHsKKwkJIm1pMDM2MCIsCisJCTB4NWQsIDB4ODAsCisJCXtTUTkzMF9HUElPX1JTVEJBUiwKKwkJIFNROTMwX0dQSU9fREZMX0kyQ19TREEgfCBTUTkzMF9HUElPX0RGTF9JMkNfU0NMLAorCQkgU1E5MzBfR1BJT19ERkxfSTJDX1NEQSwKKwkJIDAsCisJCSAwCisJCX0sCisJCTcsIG1pMDM2MF9zdGFydF8wCisJICAgIH0sCisJW1NFTlNPUl9NVDlWMTExXSA9IHsKKwkJIm10OXYxMTEiLAorCQkweDVjLCAweDdmLAorCQl7U1E5MzBfR1BJT19SU1RCQVIsCisJCSBTUTkzMF9HUElPX0RGTF9JMkNfU0RBIHwgU1E5MzBfR1BJT19ERkxfSTJDX1NDTCwKKwkJIFNROTMwX0dQSU9fREZMX0kyQ19TREEsCisJCSAwLAorCQkgMAorCQl9LAorCQk3LCBtaTAzNjBfc3RhcnRfMAorCSAgICB9LAorCVtTRU5TT1JfT1Y3NjYwXSA9IHsKKwkJIm92NzY2MCIsCisJCTB4MjEsIDB4MDAsCisJCXswLAorCQkgU1E5MzBfR1BJT19ERkxfSTJDX1NEQSB8IFNROTMwX0dQSU9fREZMX0kyQ19TQ0wsCisJCSBTUTkzMF9HUElPX0RGTF9JMkNfU0RBLAorCQkgMCwKKwkJIFNROTMwX0dQSU9fUlNUQkFSCisJCX0sCisJCTcsIG92NzY2MF9zdGFydF8wCisJICAgIH0sCisJW1NFTlNPUl9PVjk2MzBdID0geworCQkib3Y5NjMwIiwKKwkJMHgzMCwgMHgwMCwKKwkJezAsCisJCSBTUTkzMF9HUElPX0RGTF9JMkNfU0RBIHwgU1E5MzBfR1BJT19ERkxfSTJDX1NDTCwKKwkJIFNROTMwX0dQSU9fREZMX0kyQ19TREEsCisJCSAwLAorCQkgU1E5MzBfR1BJT19SU1RCQVIKKwkJfSwKKwkJNywgb3Y5NjMwX3N0YXJ0XzAKKwkgICAgfSwKK307CisKK3N0YXRpYyB2b2lkIHJlZ19yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJdTE2IHZhbHVlLCBpbnQgbGVuKQoreworCWludCByZXQ7CisKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuOworCXJldCA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCXVzYl9yY3ZjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQkweDBjLAorCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQl2YWx1ZSwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLCBsZW4sCisJCQk1MDApOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgInJlZ19yICUwNHggZmFpbGVkICVkIiwgdmFsdWUsIHJldCk7CisJCWdzcGNhX2Rldi0+dXNiX2VyciA9IHJldDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlZ193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IHZhbHVlLCB1MTYgaW5kZXgpCit7CisJaW50IHJldDsKKworCWlmIChnc3BjYV9kZXYtPnVzYl9lcnIgPCAwKQorCQlyZXR1cm47CisJUERFQlVHKERfVVNCTywgInJlZ193IHY6ICUwNHggaTogJTA0eCIsIHZhbHVlLCBpbmRleCk7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCTB4MGMsCQkJLyogcmVxdWVzdCAqLworCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJdmFsdWUsIGluZGV4LCBOVUxMLCAwLAorCQkJNTAwKTsKKwltc2xlZXAoMzApOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgInJlZ193ICUwNHggJTA0eCBmYWlsZWQgJWQiLCB2YWx1ZSwgaW5kZXgsIHJldCk7CisJCWdzcGNhX2Rldi0+dXNiX2VyciA9IHJldDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlZ193YihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LAorCQljb25zdCB1OCAqZGF0YSwgaW50IGxlbikKK3sKKwlpbnQgcmV0OworCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKKwlQREVCVUcoRF9VU0JPLCAicmVnX3diIHY6ICUwNHggaTogJTA0eCAlMDJ4Li4uJTAyeCIsCisJCQl2YWx1ZSwgaW5kZXgsICpkYXRhLCBkYXRhW2xlbiAtIDFdKTsKKwltZW1jcHkoZ3NwY2FfZGV2LT51c2JfYnVmLCBkYXRhLCBsZW4pOworCXJldCA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQkweDBjLAkJCS8qIHJlcXVlc3QgKi8KKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCXZhbHVlLCBpbmRleCwgZ3NwY2FfZGV2LT51c2JfYnVmLCBsZW4sCisJCQkxMDAwKTsKKwltc2xlZXAoMzApOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgInJlZ193YiAlMDR4ICUwNHggZmFpbGVkICVkIiwgdmFsdWUsIGluZGV4LCByZXQpOworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBpMmNfd3JpdGUoc3RydWN0IHNkICpzZCwKKwkJCWNvbnN0IHN0cnVjdCBpMmNfd3JpdGVfY21kICpjbWQsCisJCQlpbnQgbmNtZHMpCit7CisJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gJnNkLT5nc3BjYV9kZXY7CisJY29uc3Qgc3RydWN0IHNlbnNvcl9zICpzZW5zb3I7CisJdTE2IHZhbCwgaWR4OworCXU4ICpidWY7CisJaW50IHJldDsKKworCWlmIChnc3BjYV9kZXYtPnVzYl9lcnIgPCAwKQorCQlyZXR1cm47CisKKwlzZW5zb3IgPSAmc2Vuc29yX3RiW3NkLT5zZW5zb3JdOworCisJdmFsID0gKHNlbnNvci0+aTJjX2FkZHIgPDwgOCkgfCBTUTkzMF9DVFJMX0kyQ19JTzsKKwlpZHggPSAoY21kLT52YWwgJiAweGZmMDApIHwgY21kLT5yZWc7CisKKwlidWYgPSBnc3BjYV9kZXYtPnVzYl9idWY7CisJKmJ1ZisrID0gc2Vuc29yLT5pMmNfZHVtOworCSpidWYrKyA9IGNtZC0+dmFsOworCisJd2hpbGUgKC0tbmNtZHMgPiAwKSB7CisJCWNtZCsrOworCQkqYnVmKysgPSBjbWQtPnJlZzsKKwkJKmJ1ZisrID0gY21kLT52YWwgPj4gODsKKwkJKmJ1ZisrID0gc2Vuc29yLT5pMmNfZHVtOworCQkqYnVmKysgPSBjbWQtPnZhbDsKKwl9CisKKwlQREVCVUcoRF9VU0JPLCAiaTJjX3cgdjogJTA0eCBpOiAlMDR4ICUwMnguLi4lMDJ4IiwKKwkJCXZhbCwgaWR4LCBnc3BjYV9kZXYtPnVzYl9idWZbMF0sIGJ1ZlstMV0pOworCXJldCA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQkweDBjLAkJCS8qIHJlcXVlc3QgKi8KKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCXZhbCwgaWR4LAorCQkJZ3NwY2FfZGV2LT51c2JfYnVmLCBidWYgLSBnc3BjYV9kZXYtPnVzYl9idWYsCisJCQk1MDApOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgImkyY193cml0ZSBmYWlsZWQgJWQiLCByZXQpOworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfQorfQorCitzdGF0aWMgdm9pZCB1Y2J1c193cml0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQljb25zdCBzdHJ1Y3QgdWNidXNfd3JpdGVfY21kICpjbWQsCisJCQlpbnQgbmNtZHMsCisJCQlpbnQgYmF0Y2hzaXplKQoreworCXU4ICpidWY7CisJdTE2IHZhbCwgaWR4OworCWludCBsZW4sIHJldDsKKworCWlmIChnc3BjYV9kZXYtPnVzYl9lcnIgPCAwKQorCQlyZXR1cm47CisKKyNpZmRlZiBHU1BDQV9ERUJVRworCWlmICgoYmF0Y2hzaXplIC0gMSkgKiAzID4gVVNCX0JVRl9TWikgeworCQllcnIoIkJ1ZzogdXNiX2J1ZiBvdmVyZmxvdyIpOworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSAtRU5PTUVNOworCQlyZXR1cm47CisJfQorI2VuZGlmCisKKwlmb3IgKDs7KSB7CisJCWxlbiA9IG5jbWRzOworCQlpZiAobGVuID4gYmF0Y2hzaXplKQorCQkJbGVuID0gYmF0Y2hzaXplOworCQluY21kcyAtPSBsZW47CisKKwkJdmFsID0gKGNtZC0+YndfYWRkciA8PCA4KSB8IFNROTMwX0NUUkxfVUNCVVNfSU87CisJCWlkeCA9IChjbWQtPmJ3X2RhdGEgPDwgOCkgfCAoY21kLT5id19hZGRyID4+IDgpOworCisJCWJ1ZiA9IGdzcGNhX2Rldi0+dXNiX2J1ZjsKKwkJd2hpbGUgKC0tbGVuID4gMCkgeworCQkJY21kKys7CisJCQkqYnVmKysgPSBjbWQtPmJ3X2FkZHI7CisJCQkqYnVmKysgPSBjbWQtPmJ3X2FkZHIgPj4gODsKKwkJCSpidWYrKyA9IGNtZC0+YndfZGF0YTsKKwkJfQorCQlpZiAoYnVmICE9IGdzcGNhX2Rldi0+dXNiX2J1ZikKKwkJCVBERUJVRyhEX1VTQk8sICJ1Y2J1cyB2OiAlMDR4IGk6ICUwNHggJTAyeC4uLiUwMngiLAorCQkJCQl2YWwsIGlkeCwKKwkJCQkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdLCBidWZbLTFdKTsKKwkJZWxzZQorCQkJUERFQlVHKERfVVNCTywgInVjYnVzIHY6ICUwNHggaTogJTA0eCIsCisJCQkJCXZhbCwgaWR4KTsKKwkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQkJMHgwYywJCQkvKiByZXF1ZXN0ICovCisJCQkgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJdmFsLCBpZHgsCisJCQkJZ3NwY2FfZGV2LT51c2JfYnVmLCBidWYgLSBnc3BjYV9kZXYtPnVzYl9idWYsCisJCQkJNTAwKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCVBERUJVRyhEX0VSUiwgInVjYnVzX3dyaXRlIGZhaWxlZCAlZCIsIHJldCk7CisJCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJCQlyZXR1cm47CisJCX0KKwkJbXNsZWVwKDMwKTsKKwkJaWYgKG5jbWRzIDw9IDApCisJCQlicmVhazsKKwkJY21kKys7CisJfQorfQorCitzdGF0aWMgdm9pZCBncGlvX3NldChzdHJ1Y3Qgc2QgKnNkLCB1MTYgdmFsLCB1MTYgbWFzaykKK3sKKwlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSAmc2QtPmdzcGNhX2RldjsKKworCWlmIChtYXNrICYgMHgwMGZmKSB7CisJCXNkLT5ncGlvWzBdICY9IH5tYXNrOworCQlzZC0+Z3Bpb1swXSB8PSB2YWw7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwMTAwIHwgU1E5MzBfQ1RSTF9HUElPLAorCQkJfnNkLT5ncGlvWzBdIDw8IDgpOworCX0KKwltYXNrID4+PSA4OworCXZhbCA+Pj0gODsKKwlpZiAobWFzaykgeworCQlzZC0+Z3Bpb1sxXSAmPSB+bWFzazsKKwkJc2QtPmdwaW9bMV0gfD0gdmFsOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDMwMCB8IFNROTMwX0NUUkxfR1BJTywKKwkJCX5zZC0+Z3Bpb1sxXSA8PCA4KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGdwaW9faW5pdChzdHJ1Y3Qgc2QgKnNkLAorCQkJY29uc3QgdTggKmdwaW8pCit7CisJZ3Bpb19zZXQoc2QsICpncGlvKyssIDB4MDAwZik7CisJZ3Bpb19zZXQoc2QsICpncGlvKyssIDB4MDAwZik7CisJZ3Bpb19zZXQoc2QsICpncGlvKyssIDB4MDAwZik7CisJZ3Bpb19zZXQoc2QsICpncGlvKyssIDB4MDAwZik7CisJZ3Bpb19zZXQoc2QsICpncGlvLCAweDAwMGYpOworfQorCitzdGF0aWMgdm9pZCBicmlkZ2VfaW5pdChzdHJ1Y3Qgc2QgKnNkKQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgdWNidXNfd3JpdGVfY21kIGNsa2ZyZXFfY21kID0geworCQkJCTB4ZjAzMSwgMAkvKiBTUTkzMF9DTEtGUkVRXzYwTUhaICovCisJfTsKKworCXVjYnVzX3dyaXRlKCZzZC0+Z3NwY2FfZGV2LCAmY2xrZnJlcV9jbWQsIDEsIDEpOworCisJZ3Bpb19zZXQoc2QsIFNROTMwX0dQSU9fUE9XRVIsIDB4ZmYwMCk7Cit9CisKK3N0YXRpYyB2b2lkIGNtb3NfcHJvYmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgaTsKKwljb25zdCBzdHJ1Y3Qgc2Vuc29yX3MgKnNlbnNvcjsKKwlzdGF0aWMgY29uc3QgdTggcHJvYmVfb3JkZXJbXSA9IHsKKy8qCQlTRU5TT1JfTFoyNEJQLAkJKHRlc3RlZCBhcyBjY2QpICovCisJCVNFTlNPUl9PVjk2MzAsCisJCVNFTlNPUl9NSTAzNjAsCisJCVNFTlNPUl9PVjc2NjAsCisJCVNFTlNPUl9NVDlWMTExLAorCX07CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcm9iZV9vcmRlcik7IGkrKykgeworCQlzZW5zb3IgPSAmc2Vuc29yX3RiW3Byb2JlX29yZGVyW2ldXTsKKwkJdWNidXNfd3JpdGUoJnNkLT5nc3BjYV9kZXYsIHNlbnNvci0+Y21kLCBzZW5zb3ItPmNtZF9sZW4sIDgpOworCQlncGlvX2luaXQoc2QsIHNlbnNvci0+Z3Bpbyk7CisJCW1zbGVlcCgxMDApOworCQlyZWdfcihnc3BjYV9kZXYsIChzZW5zb3ItPmkyY19hZGRyIDw8IDgpIHwgMHgwMDFjLCAxKTsKKwkJbXNsZWVwKDEwMCk7CisJCWlmIChnc3BjYV9kZXYtPnVzYl9idWZbMF0gIT0gMCkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA+PSBBUlJBWV9TSVpFKHByb2JlX29yZGVyKSkKKwkJUERFQlVHKERfUFJPQkUsICJVbmtub3duIHNlbnNvciIpOworCWVsc2UKKwkJc2QtPnNlbnNvciA9IHByb2JlX29yZGVyW2ldOworfQorCitzdGF0aWMgdm9pZCBtdDl2MTExX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCBpLCBud2FpdDsKKwlzdGF0aWMgY29uc3QgdTggY21kXzAwMWJbXSA9IHsKKwkJMHgwMCwgMHgzYiwgMHhmNiwgMHgwMSwgMHgwMywgMHgwMiwgMHgwMCwgMHgwMCwKKwkJMHgwMCwgMHgwMCwgMHgwMAorCX07CisJc3RhdGljIGNvbnN0IHU4IGNtZF8wMTFiW11bN10gPSB7CisJCXsweDEwLCAweDAxLCAweDY2LCAweDA4LCAweDAwLCAweDAwLCAweDAwfSwKKwkJezB4MDEsIDB4MDAsIDB4MWEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDB9LAorCQl7MHgyMCwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJCXsweDAyLCAweDAxLCAweGFlLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwKKwl9OworCisJcmVnX3diKGdzcGNhX2RldiwgMHgwMDFiLCAweDAwMDAsIGNtZF8wMDFiLCBzaXplb2YgY21kXzAwMWIpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNtZF8wMTFiKTsgaSsrKSB7CisJCXJlZ193Yihnc3BjYV9kZXYsIDB4MDAxYiwgMHgwMDAwLCBjbWRfMDExYltpXSwKKwkJCQlBUlJBWV9TSVpFKGNtZF8wMTFiWzBdKSk7CisJCW1zbGVlcCg0MDApOworCQlud2FpdCA9IDIwOworCQlmb3IgKDs7KSB7CisJCQlyZWdfcihnc3BjYV9kZXYsIDB4MDMxYiwgMSk7CisJCQlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzBdID09IDAKKwkJCSB8fCBnc3BjYV9kZXYtPnVzYl9lcnIgIT0gMCkKKwkJCQlicmVhazsKKwkJCWlmICgtLW53YWl0IDwgMCkgeworCQkJCVBERUJVRyhEX1BST0JFLCAibXQ5djExMV9pbml0IHRpbWVvdXQiKTsKKwkJCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSAtRVRJTUU7CisJCQkJcmV0dXJuOworCQkJfQorCQkJbXNsZWVwKDUwKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZ2xvYmFsX2luaXQoc3RydWN0IHNkICpzZCwgaW50IGZpcnN0X3RpbWUpCit7CisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfSUNYMDk4QlE6CisJCWlmIChmaXJzdF90aW1lKQorCQkJdWNidXNfd3JpdGUoJnNkLT5nc3BjYV9kZXYsCisJCQkJCWljeDA5OGJxX3N0YXJ0XzAsCisJCQkJCTgsIDgpOworCQlncGlvX2luaXQoc2QsIHNlbnNvcl90YltzZC0+c2Vuc29yXS5ncGlvKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfTFoyNEJQOgorCQlpZiAoc2QtPnR5cGUgIT0gQ3JlYXRpdmVfbGl2ZV9tb3Rpb24pCisJCQlncGlvX3NldChzZCwgU1E5MzBfR1BJT19FWFRSQTEsIDB4MDBmZik7CisJCWVsc2UKKwkJCWdwaW9fc2V0KHNkLCAwLCAweDAwZmYpOworCQltc2xlZXAoNTApOworCQlpZiAoZmlyc3RfdGltZSkKKwkJCXVjYnVzX3dyaXRlKCZzZC0+Z3NwY2FfZGV2LAorCQkJCQlsejI0YnBfc3RhcnRfMCwKKwkJCQkJOCwgOCk7CisJCWdwaW9faW5pdChzZCwgc2Vuc29yX3RiW3NkLT5zZW5zb3JdLmdwaW8pOworCQlicmVhazsKKwljYXNlIFNFTlNPUl9NSTAzNjA6CisJCWlmIChmaXJzdF90aW1lKQorCQkJdWNidXNfd3JpdGUoJnNkLT5nc3BjYV9kZXYsCisJCQkJCW1pMDM2MF9zdGFydF8wLAorCQkJCQlBUlJBWV9TSVpFKG1pMDM2MF9zdGFydF8wKSwKKwkJCQkJOCk7CisJCWdwaW9faW5pdChzZCwgc2Vuc29yX3RiW3NkLT5zZW5zb3JdLmdwaW8pOworCQlncGlvX3NldChzZCwgU1E5MzBfR1BJT19FWFRSQTIsIFNROTMwX0dQSU9fRVhUUkEyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKy8qCWNhc2UgU0VOU09SX01UOVYxMTE6ICovCisJCWlmIChmaXJzdF90aW1lKQorCQkJbXQ5djExMV9pbml0KCZzZC0+Z3NwY2FfZGV2KTsKKwkJZWxzZQorCQkJZ3Bpb19pbml0KHNkLCBzZW5zb3JfdGJbc2QtPnNlbnNvcl0uZ3Bpbyk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgbHoyNGJwX3BwbChzdHJ1Y3Qgc2QgKnNkLCB1MTYgcHBsKQoreworCXN0cnVjdCB1Y2J1c193cml0ZV9jbWQgY21kc1syXSA9IHsKKwkJezB4ZjgxMCwgcHBsID4+IDh9LAorCQl7MHhmODExLCBwcGx9CisJfTsKKworCXVjYnVzX3dyaXRlKCZzZC0+Z3NwY2FfZGV2LCBjbWRzLCBBUlJBWV9TSVpFKGNtZHMpLCAyKTsKK30KKworc3RhdGljIHZvaWQgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgaSwgaW50ZWdjbGtzLCBpbnRzdGFydGNsaywgZnJhbWVjbGtzLCBtaW5fZnJjbGs7CisJY29uc3Qgc3RydWN0IHNlbnNvcl9zICpzZW5zb3I7CisJdTE2IGNtZDsKKwl1OCBidWZbMTVdOworCisJaW50ZWdjbGtzID0gc2QtPmV4cG87CisJaSA9IDA7CisJY21kID0gU1E5MzBfQ1RSTF9TRVRfRVhQT1NVUkU7CisKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9JQ1gwOThCUToJCQkvKiBjY2QgKi8KKwljYXNlIFNFTlNPUl9MWjI0QlA6CisJCW1pbl9mcmNsayA9IHNkLT5zZW5zb3IgPT0gU0VOU09SX0lDWDA5OEJRID8gMHgyMTAgOiAweDI2ZjsKKwkJaWYgKGludGVnY2xrcyA+PSBtaW5fZnJjbGspIHsKKwkJCWludHN0YXJ0Y2xrID0gMDsKKwkJCWZyYW1lY2xrcyA9IGludGVnY2xrczsKKwkJfSBlbHNlIHsKKwkJCWludHN0YXJ0Y2xrID0gbWluX2ZyY2xrIC0gaW50ZWdjbGtzOworCQkJZnJhbWVjbGtzID0gbWluX2ZyY2xrOworCQl9CisJCWJ1ZltpKytdID0gaW50c3RhcnRjbGsgPj4gODsKKwkJYnVmW2krK10gPSBpbnRzdGFydGNsazsKKwkJYnVmW2krK10gPSBmcmFtZWNsa3MgPj4gODsKKwkJYnVmW2krK10gPSBmcmFtZWNsa3M7CisJCWJ1ZltpKytdID0gc2QtPmdhaW47CisJCWJyZWFrOworCWRlZmF1bHQ6CQkJCS8qIGNtb3MgKi8KKy8qCWNhc2UgU0VOU09SX01JMDM2MDogKi8KKy8qCWNhc2UgU0VOU09SX01UOVYxMTE6ICovCisJCWNtZCB8PSAweDAxMDA7CisJCXNlbnNvciA9ICZzZW5zb3JfdGJbc2QtPnNlbnNvcl07CisJCWJ1ZltpKytdID0gc2Vuc29yLT5pMmNfYWRkcjsJLyogaTJjX3NsYXZlX2FkZHIgKi8KKwkJYnVmW2krK10gPSAweDA4OwkvKiAyICogbmkyYyAqLworCQlidWZbaSsrXSA9IDB4MDk7CS8qIHJlZyA9IHNodXR0ZXIgd2lkdGggKi8KKwkJYnVmW2krK10gPSBpbnRlZ2Nsa3MgPj4gODsgLyogdmFsIEggKi8KKwkJYnVmW2krK10gPSBzZW5zb3ItPmkyY19kdW07CisJCWJ1ZltpKytdID0gaW50ZWdjbGtzOwkvKiB2YWwgTCAqLworCQlidWZbaSsrXSA9IDB4MzU7CS8qIHJlZyA9IGdsb2JhbCBnYWluICovCisJCWJ1ZltpKytdID0gMHgwMDsJLyogdmFsIEggKi8KKwkJYnVmW2krK10gPSBzZW5zb3ItPmkyY19kdW07CisJCWJ1ZltpKytdID0gc2QtPmdhaW47CS8qIHZhbCBMICovCisJCWJ1ZltpKytdID0gMHgwMDsKKwkJYnVmW2krK10gPSAweDAwOworCQlidWZbaSsrXSA9IDB4MDA7CisJCWJ1ZltpKytdID0gMHgwMDsKKwkJYnVmW2krK10gPSAweDgzOworCQlicmVhazsKKwl9CisJcmVnX3diKGdzcGNhX2RldiwgY21kLCAwLCBidWYsIGkpOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lIGp1c3QgYmVmb3JlIHNkX2luaXQgKi8KK3N0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdHJ1Y3QgY2FtICpjYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisKKwlzZC0+c2Vuc29yID0gaWQtPmRyaXZlcl9pbmZvID4+IDg7CisJc2QtPnR5cGUgPSBpZC0+ZHJpdmVyX2luZm87CisKKwljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7CisJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKKworCWNhbS0+YnVsayA9IDE7CisJY2FtLT5idWxrX3NpemUgPSBCVUxLX1RSQU5TRkVSX0xFTjsKKy8qCWNhbS0+YnVsa19udXJicyA9IDI7CWZpeG1lOiBpZiBubyBzZXRleHBvIHN5bmMgKi8KKworCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9ERUY7CisJc2QtPmdhaW4gPSBHQUlOX0RFRjsKKwlzZC0+ZXhwbyA9IEVYUE9fREVGOworCisJcmV0dXJuIDA7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLworc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+Z3Bpb1swXSA9IHNkLT5ncGlvWzFdID0gMHhmZjsJLyogZm9yY2UgZ3BpbyByZXdyaXRlICovCisKKy8qZml4bWU6IGlzIHRoaXMgbmVlZGVkIGZvciBpY3gwOThicCBhbmQgbWkwMzYwPworCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9MWjI0QlApCisJCXJlZ193KGdzcGNhX2RldiwgU1E5MzBfQ1RSTF9SRVNFVCwgMHgwMDAwKTsKKyAqLworCisJcmVnX3IoZ3NwY2FfZGV2LCBTUTkzMF9DVFJMX0dFVF9ERVZfSU5GTywgOCk7CisvKiBpdCByZXR1cm5zOgorICogMDMgMDAgMTIgOTMgMGIgZjYgYzkgMDAJbGl2ZSEgdWx0cmEKKyAqIDAzIDAwIDA3IDkzIDBiIGY2IGNhIDAwCWxpdmUhIHVsdHJhIGZvciBub3RlYm9vaworICogMDMgMDAgMTIgOTMgMGIgZmUgYzggMDAJVHJ1c3QgV0ItMzUwMFQKKyAqIDAyIDAwIDA2IDkzIDBiIGZlIGM4IDAwCUpveS1JVCAzMThTCisgKiAwMyAwMCAxMiA5MyAwYiBmNiBjZiAwMAlpY2FtIHRyYWNlciAtIHNlbnNvciBpY3gwOThicQorICogMDIgMDAgMTIgOTMgMGIgZmUgY2YgMDAJUHJvUSBNb3Rpb24gV2ViY2FtCisgKgorICogYnl0ZQorICogMDogMDIgPSB1c2IgMS4wICgxMk1iaXQpIC8gMDMgPSB1c2IyLjAgKDQ4ME1iaXQpCisgKiAxOiAwMAorICogMjogMDYgLyAwNyAvIDEyID0gbW9kZSB3ZWJjYW0/IGZpcm13YXJlPz8KKyAqIDM6IDkzIGNoaXAgPSA5MzBiICg5MzBiIG9yIDkzMGMpCisgKiA0OiAwYgorICogNTogZjYgPSBjZGQgKGljeDA5OGJxLCBsejI0YnApIC8gZmUgb3IgZGUgPSBjbW9zIChpMmMpIChvdGhlciBzZW5zb3JzKQorICogNjogYzggLyBjOSAvIGNhIC8gY2YgPSBtb2RlIHdlYmNhbT8sIHNlbnNvcj8gd2ViY2FtPworICogNzogMDAKKyAqLworCVBERUJVRyhEX1BST0JFLCAiaW5mbzogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IiwKKwkJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSwKKwkJCWdzcGNhX2Rldi0+dXNiX2J1ZlsxXSwKKwkJCWdzcGNhX2Rldi0+dXNiX2J1ZlsyXSwKKwkJCWdzcGNhX2Rldi0+dXNiX2J1ZlszXSwKKwkJCWdzcGNhX2Rldi0+dXNiX2J1Zls0XSwKKwkJCWdzcGNhX2Rldi0+dXNiX2J1Zls1XSwKKwkJCWdzcGNhX2Rldi0+dXNiX2J1Zls2XSwKKwkJCWdzcGNhX2Rldi0+dXNiX2J1Zls3XSk7CisKKwlicmlkZ2VfaW5pdChzZCk7CisKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfTUkwMzYwKSB7CisKKwkJLyogbm8gc2Vuc29yIHByb2JlIGZvciBpY2FtIHRyYWNlciAqLworCQlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzVdID09IDB4ZjYpIHsJLyogaWYgQ01PUyAqLworCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9JQ1gwOThCUTsKKwkJCWdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlID0gJnZnYV9tb2RlWzFdOworCQkJZ3NwY2FfZGV2LT5jYW0ubm1vZGVzID0gMTsJLyogb25seSAzMjB4MjQwICovCisJCX0gZWxzZSB7CisJCQljbW9zX3Byb2JlKGdzcGNhX2Rldik7CisJCX0KKwl9CisKKwlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciAlcyIsIHNlbnNvcl90YltzZC0+c2Vuc29yXS5uYW1lKTsKKworCWdsb2JhbF9pbml0KHNkLCAxKTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOworfQorCisvKiBzcGVjaWFsIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgcXVhbnRpemF0aW9uIHRhYmxlcyBvZiB0aGUgSlBFRyBoZWFkZXIgKi8KK3N0YXRpYyB2b2lkIHNkX2pwZWdfc2V0X3F1YWwodTggKmpwZWdfaGRyLAorCQkJCWludCBxdWFsaXR5KQoreworCWludCBpLCBzYzEsIHNjMjsKKworCXF1YWxpdHkgPSBxdWFsaXR5X3RiW3F1YWxpdHldOwkvKiBjb252ZXJ0IHRvIEpQRUcgcXVhbGl0eSAqLworLyoKKyAqIGFwcHJveGltYXRpdmUgcXVhbGl0aWVzIGZvciBZIGFuZCBVL1Y6CisgKglxdWFudCA9IDA6OTQlLzkxJSAxOjkxJS84NyUgMjo4MiUvNzMlIDM6NjklLzU2JQorICogc2hvdWxkIGhhdmU6CisgKglxdWFudCA9IDA6OTQlLzkxJSAxOjkxJS84Ny41JSAyOjgxLjUlLzcyJSAzOjY5JS81NC41JQorICovCisJc2MxID0gMjAwIC0gcXVhbGl0eSAqIDI7CisJcXVhbGl0eSA9IHF1YWxpdHkgKiA3IC8gNSAtIDQwOwkJLyogVVYgcXVhbGl0eSAqLworCXNjMiA9IDIwMCAtIHF1YWxpdHkgKiAyOworCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7CisJCWpwZWdfaGRyW0pQRUdfUVQwX09GRlNFVCArIGldID0KKwkJCShqcGVnX2hlYWRbSlBFR19RVDBfT0ZGU0VUICsgaV0gKiBzYzEgKyA1MCkgLyAxMDA7CisJCWpwZWdfaGRyW0pQRUdfUVQxX09GRlNFVCArIGldID0KKwkJCShqcGVnX2hlYWRbSlBFR19RVDFfT0ZGU0VUICsgaV0gKiBzYzIgKyA1MCkgLyAxMDA7CisJfQorfQorCisvKiBzZW5kIHRoZSBzdGFydC9zdG9wIGNvbW1hbmRzIHRvIHRoZSB3ZWJjYW0gKi8KK3N0YXRpYyB2b2lkIHNlbmRfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwljb25zdCBzdHJ1Y3QgY2FwX3MgKmNhcDsKKwlpbnQgbW9kZSwgcXVhbGl0eTsKKworCW1vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKKwljYXAgPSAmY2FwY29uZmlnW3NkLT5zZW5zb3JdW21vZGVdOworCXF1YWxpdHkgPSBzZC0+cXVhbGl0eTsKKwlyZWdfd2IoZ3NwY2FfZGV2LCAocXVhbGl0eSA8PCAxMikKKwkJCQkgfCAweDBhMDAJLyogOTAwIGZvciBCYXllciAqLworCQkJCSB8IFNROTMwX0NUUkxfQ0FQX1NUQVJULAorCQkJMHgwNTAwCQkJLyogYTAwIGZvciBCYXllciAqLworCQkJCSB8IGNhcC0+Y2Nfc2l6ZWlkLAorCQkJY2FwLT5jY19ieXRlcywgMzIpOworfTsKK3N0YXRpYyB2b2lkIHNlbmRfc3RvcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJcmVnX3coZ3NwY2FfZGV2LCBTUTkzMF9DVFJMX0NBUF9TVE9QLCAwKTsKK307CisKKy8qIGZ1bmN0aW9uIGNhbGxlZCBhdCBzdGFydCB0aW1lIGJlZm9yZSBVUkIgY3JlYXRpb24gKi8KK3N0YXRpYyBpbnQgc2RfaXNvY19pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlnc3BjYV9kZXYtPmNhbS5idWxrX251cmJzID0gMTsJLyogdGhlcmUgbXVzdCBiZSBvbmUgVVJCIG9ubHkgKi8KKwlzZC0+ZG9fY3RybCA9IDA7CisJcmV0dXJuIDA7Cit9CisKKy8qIHN0YXJ0IHRoZSBjYXB0dXJlICovCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IG1vZGU7CisKKwkvKiBpbml0aWFsaXplIHRoZSBKUEVHIGhlYWRlciAqLworCWpwZWdfZGVmaW5lKHNkLT5qcGVnX2hkciwgZ3NwY2FfZGV2LT5oZWlnaHQsIGdzcGNhX2Rldi0+d2lkdGgsCisJCQkweDIxKTsJCS8qIEpQRUcgNDIyICovCisJc2RfanBlZ19zZXRfcXVhbChzZC0+anBlZ19oZHIsIHNkLT5xdWFsaXR5KTsKKworCWJyaWRnZV9pbml0KHNkKTsKKwlnbG9iYWxfaW5pdChzZCwgMCk7CisJbXNsZWVwKDEwMCk7CisKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9JQ1gwOThCUToKKwkJdWNidXNfd3JpdGUoZ3NwY2FfZGV2LCBpY3gwOThicV9zdGFydF8wLAorCQkJCUFSUkFZX1NJWkUoaWN4MDk4YnFfc3RhcnRfMCksCisJCQkJOCk7CisJCXVjYnVzX3dyaXRlKGdzcGNhX2RldiwgaWN4MDk4YnFfc3RhcnRfMSwKKwkJCQlBUlJBWV9TSVpFKGljeDA5OGJxX3N0YXJ0XzEpLAorCQkJCTUpOworCQl1Y2J1c193cml0ZShnc3BjYV9kZXYsIGljeDA5OGJxX3N0YXJ0XzIsCisJCQkJQVJSQVlfU0laRShpY3gwOThicV9zdGFydF8yKSwKKwkJCQk2KTsKKwkJbXNsZWVwKDUwKTsKKworCQkvKiAxc3Qgc3RhcnQgKi8KKwkJc2VuZF9zdGFydChnc3BjYV9kZXYpOworCQlncGlvX3NldChzZCwgU1E5MzBfR1BJT19FWFRSQTIgfCBTUTkzMF9HUElPX1JTVEJBUiwgMHgwMGZmKTsKKwkJbXNsZWVwKDcwKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCBTUTkzMF9DVFJMX0NBUF9TVE9QLCAweDAwMDApOworCQlncGlvX3NldChzZCwgMHg3ZiwgMHgwMGZmKTsKKworCQkvKiAybmQgc3RhcnQgKi8KKwkJc2VuZF9zdGFydChnc3BjYV9kZXYpOworCQlncGlvX3NldChzZCwgU1E5MzBfR1BJT19FWFRSQTIgfCBTUTkzMF9HUElPX1JTVEJBUiwgMHgwMGZmKTsKKwkJZ290byBvdXQ7CisJY2FzZSBTRU5TT1JfTFoyNEJQOgorCQl1Y2J1c193cml0ZShnc3BjYV9kZXYsIGx6MjRicF9zdGFydF8wLAorCQkJCUFSUkFZX1NJWkUobHoyNGJwX3N0YXJ0XzApLAorCQkJCTgpOworCQlpZiAoc2QtPnR5cGUgIT0gQ3JlYXRpdmVfbGl2ZV9tb3Rpb24pCisJCQl1Y2J1c193cml0ZShnc3BjYV9kZXYsIGx6MjRicF9zdGFydF8xX2dlbiwKKwkJCQkJQVJSQVlfU0laRShsejI0YnBfc3RhcnRfMV9nZW4pLAorCQkJCQk1KTsKKwkJZWxzZQorCQkJdWNidXNfd3JpdGUoZ3NwY2FfZGV2LCBsejI0YnBfc3RhcnRfMV9jbG0sCisJCQkJCUFSUkFZX1NJWkUobHoyNGJwX3N0YXJ0XzFfY2xtKSwKKwkJCQkJNSk7CisJCXVjYnVzX3dyaXRlKGdzcGNhX2RldiwgbHoyNGJwX3N0YXJ0XzIsCisJCQkJQVJSQVlfU0laRShsejI0YnBfc3RhcnRfMiksCisJCQkJNik7CisJCW1vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKKwkJbHoyNGJwX3BwbChzZCwgbW9kZSA9PSAyID8gMHgwNTY0IDogMHgwMzEwKTsKKwkJbXNsZWVwKDEwKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfTUkwMzYwOgorCQl1Y2J1c193cml0ZShnc3BjYV9kZXYsIG1pMDM2MF9zdGFydF8wLAorCQkJCUFSUkFZX1NJWkUobWkwMzYwX3N0YXJ0XzApLAorCQkJCTgpOworCQlpMmNfd3JpdGUoc2QsIG1pMDM2MF9pbml0XzIzLAorCQkJCUFSUkFZX1NJWkUobWkwMzYwX2luaXRfMjMpKTsKKwkJaTJjX3dyaXRlKHNkLCBtaTAzNjBfaW5pdF8yNCwKKwkJCQlBUlJBWV9TSVpFKG1pMDM2MF9pbml0XzI0KSk7CisJCWkyY193cml0ZShzZCwgbWkwMzYwX2luaXRfMjUsCisJCQkJQVJSQVlfU0laRShtaTAzNjBfaW5pdF8yNSkpOworCQl1Y2J1c193cml0ZShnc3BjYV9kZXYsIG1pMDM2MF9zdGFydF8xLAorCQkJCUFSUkFZX1NJWkUobWkwMzYwX3N0YXJ0XzEpLAorCQkJCTUpOworCQlpMmNfd3JpdGUoc2QsIG1pMDM2MF9zdGFydF8yLAorCQkJCUFSUkFZX1NJWkUobWkwMzYwX3N0YXJ0XzIpKTsKKwkJaTJjX3dyaXRlKHNkLCBtaTAzNjBfc3RhcnRfMywKKwkJCQlBUlJBWV9TSVpFKG1pMDM2MF9zdGFydF8zKSk7CisKKwkJLyogMXN0IHN0YXJ0ICovCisJCXNlbmRfc3RhcnQoZ3NwY2FfZGV2KTsKKwkJbXNsZWVwKDYwKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCBTUTkzMF9DVFJMX0NBUF9TVE9QLCAweDAwMDApOworCisJCWkyY193cml0ZShzZCwKKwkJCW1pMDM2MF9zdGFydF80LCBBUlJBWV9TSVpFKG1pMDM2MF9zdGFydF80KSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisvKgljYXNlIFNFTlNPUl9NVDlWMTExOiAqLworCQl1Y2J1c193cml0ZShnc3BjYV9kZXYsIG1pMDM2MF9zdGFydF8wLAorCQkJCUFSUkFZX1NJWkUobWkwMzYwX3N0YXJ0XzApLAorCQkJCTgpOworCQlpMmNfd3JpdGUoc2QsIG10OXYxMTFfaW5pdF8wLAorCQkJCUFSUkFZX1NJWkUobXQ5djExMV9pbml0XzApKTsKKwkJaTJjX3dyaXRlKHNkLCBtdDl2MTExX2luaXRfMSwKKwkJCQlBUlJBWV9TSVpFKG10OXYxMTFfaW5pdF8xKSk7CisJCWkyY193cml0ZShzZCwgbXQ5djExMV9pbml0XzIsCisJCQkJQVJSQVlfU0laRShtdDl2MTExX2luaXRfMikpOworCQl1Y2J1c193cml0ZShnc3BjYV9kZXYsIG10OXYxMTFfc3RhcnRfMSwKKwkJCQlBUlJBWV9TSVpFKG10OXYxMTFfc3RhcnRfMSksCisJCQkJOCk7CisJCWkyY193cml0ZShzZCwgbXQ5djExMV9pbml0XzMsCisJCQkJQVJSQVlfU0laRShtdDl2MTExX2luaXRfMykpOworCQlpMmNfd3JpdGUoc2QsIG10OXYxMTFfaW5pdF80LAorCQkJCUFSUkFZX1NJWkUobXQ5djExMV9pbml0XzQpKTsKKwkJYnJlYWs7CisJfQorCisJc2VuZF9zdGFydChnc3BjYV9kZXYpOworb3V0OgorCW1zbGVlcCgxMDAwKTsKKworCXNkLT5lb2ZfbGVuID0gMDsJLyogaW5pdCBwYWNrZXQgc2NhbiAqLworCisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX01UOVYxMTEpCisJCWdwaW9fc2V0KHNkLCBTUTkzMF9HUElPX0RGTF9MRUQsIFNROTMwX0dQSU9fREZMX0xFRCk7CisKKwlzZC0+ZG9fY3RybCA9IDE7CS8qIHNldCB0aGUgZXhwb3N1cmUgKi8KKworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfTVQ5VjExMSkKKwkJZ3Bpb19zZXQoc2QsIDAsIFNROTMwX0dQSU9fREZMX0xFRCk7CisJc2VuZF9zdG9wKGdzcGNhX2Rldik7Cit9CisKKy8qIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBnZXRzIGEgbmV3IGZyYW1lICovCisvKiBJdCBzZXRzIHRoZSBleHBvc3VyZSBpZiByZXF1aXJlZCBhbmQgcmVzdGFydCB0aGUgYnVsayB0cmFuc2Zlci4gKi8KK3N0YXRpYyB2b2lkIHNkX2RxX2NhbGxiYWNrKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHJldDsKKworCWlmICghc2QtPmRvX2N0cmwgfHwgZ3NwY2FfZGV2LT5jYW0uYnVsa19udXJicyAhPSAwKQorCQlyZXR1cm47CisJc2QtPmRvX2N0cmwgPSAwOworCisJc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2KTsKKworCWdzcGNhX2Rldi0+Y2FtLmJ1bGtfbnVyYnMgPSAxOworCXJldCA9IHVzYl9zdWJtaXRfdXJiKGdzcGNhX2Rldi0+dXJiWzBdLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0IDwgMCkKKwkJUERFQlVHKERfRVJSfERfUEFDSywgInNkX2RxX2NhbGxiYWNrKCkgZXJyICVkIiwgcmV0KTsKKworCS8qIHdhaXQgYSBsaXR0bGUgdGltZSwgb3RoZXJ3aXNlIHRoZSB3ZWJjYW0gY3Jhc2hlcyAqLworCW1zbGVlcCgxMDApOworfQorCisvKiBtb3ZlIGEgcGFja2V0IGFkZGluZyAweDAwIGFmdGVyIDB4ZmYgKi8KK3N0YXRpYyB2b2lkIGFkZF9wYWNrZXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTggKmRhdGEsCisJCQlpbnQgbGVuKQoreworCWludCBpOworCisJaSA9IDA7CisJZG8geworCQlpZiAoZGF0YVtpXSA9PSAweGZmKSB7CisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsCisJCQkJCWRhdGEsIGkgKyAxKTsKKwkJCWxlbiAtPSBpOworCQkJZGF0YSArPSBpOworCQkJKmRhdGEgPSAweDAwOworCQkJaSA9IDA7CisJCX0KKwl9IHdoaWxlICgrK2kgPCBsZW4pOworCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZGF0YSwgbGVuKTsKK30KKworLyogZW5kIGEgZnJhbWUgYW5kIHN0YXJ0IGEgbmV3IG9uZSAqLworc3RhdGljIHZvaWQgZW9mX3NvZihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXN0YXRpYyBjb25zdCB1OCBmZmQ5W10gPSB7MHhmZiwgMHhkOX07CisKKwkvKiBpZiBjb250cm9sIHNldCwgc3RvcCBidWxrIHRyYW5zZmVyICovCisJaWYgKHNkLT5kb19jdHJsCisJICYmIGdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9PSBJTlRFUl9QQUNLRVQpCisJCWdzcGNhX2Rldi0+Y2FtLmJ1bGtfbnVyYnMgPSAwOworCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULAorCQkJZmZkOSwgMik7CisJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULAorCQkJc2QtPmpwZWdfaGRyLCBKUEVHX0hEUl9TWik7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4ICpkYXRhLAkJLyogaXNvYyBwYWNrZXQgKi8KKwkJCWludCBsZW4pCQkvKiBpc28gcGFja2V0IGxlbmd0aCAqLworeworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCAqcDsKKwlpbnQgbDsKKworCWxlbiAtPSA4OwkvKiBpZ25vcmUgbGFzdCA4IGJ5dGVzICgwMCAwMCA1NSBhYSA1NSBhYSAwMCAwMCkgKi8KKworCS8qCisJICogdGhlIGVuZC9zdGFydCBvZiBmcmFtZSBpcyBpbmRpY2F0ZWQgYnkKKwkgKgkweDAwICogMTYgLSAgMHhhYiAqIDgKKwkgKiBhbGlnbmVkIG9uIDggYnl0ZXMgYm91bmRhcnkKKwkgKi8KKwlpZiAoc2QtPmVvZl9sZW4gIT0gMCkgewkJLyogaWYgJ2FiYWJhYmFiJyBpbiBwcmV2aW91cyBwa3QgKi8KKwkJaWYgKCooKHUzMiAqKSBkYXRhKSA9PSAweGFiYWJhYmFiKSB7CisJCQkJLypmaXhtZTogc2hvdWxkIHJlbW92ZSBwcmV2aW91cyAwMDAwYWJhYmFiKi8KKwkJCWVvZl9zb2YoZ3NwY2FfZGV2KTsKKwkJCWRhdGEgKz0gNDsKKwkJCWxlbiAtPSA0OworCQl9CisJCXNkLT5lb2ZfbGVuID0gMDsKKwl9CisJcCA9IGRhdGE7CisJbCA9IGxlbjsKKwlmb3IgKDs7KSB7CisJCWlmICgqKCh1MzIgKikgcCkgPT0gMHhhYmFiYWJhYikgeworCQkJaWYgKGwgPCA4KSB7CQkvKiAobWF5IGJlIDQgb25seSkgKi8KKwkJCQlzZC0+ZW9mX2xlbiA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoKigodTMyICopIHAgKyAxKSA9PSAweGFiYWJhYmFiKSB7CisJCQkJYWRkX3BhY2tldChnc3BjYV9kZXYsIGRhdGEsIHAgLSBkYXRhIC0gMTYpOworCQkJCQkJLyogcmVtb3ZlIHByZXZpb3VzIHplcm9zICovCisJCQkJZW9mX3NvZihnc3BjYV9kZXYpOworCQkJCXAgKz0gODsKKwkJCQlsIC09IDg7CisJCQkJaWYgKGwgPD0gMCkKKwkJCQkJcmV0dXJuOworCQkJCWxlbiA9IGw7CisJCQkJZGF0YSA9IHA7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJcCArPSA0OworCQlsIC09IDQ7CisJCWlmIChsIDw9IDApCisJCQlicmVhazsKKwl9CisJYWRkX3BhY2tldChnc3BjYV9kZXYsIGRhdGEsIGxlbik7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+Z2FpbiA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNkLT5kb19jdHJsID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmdhaW47CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW50IHNkX3NldGV4cG8oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmV4cG8gPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZC0+ZG9fY3RybCA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0ZXhwbyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5leHBvOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldF9qY29tcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKmpjb21wKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgcXVhbGl0eTsKKworCWlmIChqY29tcC0+cXVhbGl0eSA+PSAoUVVBTF8wICsgUVVBTF8xKSAvIDIpCisJCXF1YWxpdHkgPSAwOworCWVsc2UgaWYgKGpjb21wLT5xdWFsaXR5ID49IChRVUFMXzEgKyBRVUFMXzIpIC8gMikKKwkJcXVhbGl0eSA9IDE7CisJZWxzZSBpZiAoamNvbXAtPnF1YWxpdHkgPj0gKFFVQUxfMiArIFFVQUxfMykgLyAyKQorCQlxdWFsaXR5ID0gMjsKKwllbHNlCisJCXF1YWxpdHkgPSAzOworCisJaWYgKHF1YWxpdHkgIT0gc2QtPnF1YWxpdHkpIHsKKwkJc2QtPnF1YWxpdHkgPSBxdWFsaXR5OworCQlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKKwkJCXNlbmRfc3RvcChnc3BjYV9kZXYpOworCQkJc2RfanBlZ19zZXRfcXVhbChzZC0+anBlZ19oZHIsIHNkLT5xdWFsaXR5KTsKKwkJCW1zbGVlcCg3MCk7CisJCQlzZW5kX3N0YXJ0KGdzcGNhX2Rldik7CisJCX0KKwl9CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKK30KKworc3RhdGljIGludCBzZF9nZXRfamNvbXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpqY29tcCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwltZW1zZXQoamNvbXAsIDAsIHNpemVvZiAqamNvbXApOworCWpjb21wLT5xdWFsaXR5ID0gcXVhbGl0eV90YltzZC0+cXVhbGl0eV07CisJamNvbXAtPmpwZWdfbWFya2VycyA9IFY0TDJfSlBFR19NQVJLRVJfREhUCisJCQl8IFY0TDJfSlBFR19NQVJLRVJfRFFUOworCXJldHVybiAwOworfQorCisvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKKwkubmFtZSAgID0gTU9EVUxFX05BTUUsCisJLmN0cmxzID0gc2RfY3RybHMsCisJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLAorCS5jb25maWcgPSBzZF9jb25maWcsCisJLmluaXQgICA9IHNkX2luaXQsCisJLmlzb2NfaW5pdCA9IHNkX2lzb2NfaW5pdCwKKwkuc3RhcnQgID0gc2Rfc3RhcnQsCisJLnN0b3BOICA9IHNkX3N0b3BOLAorCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorCS5kcV9jYWxsYmFjayA9IHNkX2RxX2NhbGxiYWNrLAorCS5nZXRfamNvbXAgPSBzZF9nZXRfamNvbXAsCisJLnNldF9qY29tcCA9IHNkX3NldF9qY29tcCwKK307CisKKy8qIFRhYmxlIG9mIHN1cHBvcnRlZCBVU0IgZGV2aWNlcyAqLworI2RlZmluZSBTVChzZW5zb3IsIHR5cGUpIFwKKwkuZHJpdmVyX2luZm8gPSAoU0VOU09SXyAjIyBzZW5zb3IgPDwgOCkgXAorCQkJfCAodHlwZSkKK3N0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworCXtVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDM4KSwgU1QoTUkwMzYwLCAwKX0sCisJe1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwM2MpLCBTVChMWjI0QlAsIDApfSwKKwl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDAzZCksIFNUKExaMjRCUCwgMCl9LAorCXtVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDQxKSwgU1QoTFoyNEJQLCBDcmVhdGl2ZV9saXZlX21vdGlvbil9LAorCXtVU0JfREVWSUNFKDB4Mjc3MCwgMHg5MzBiKSwgU1QoTUkwMzYwLCAwKX0sCisJe1VTQl9ERVZJQ0UoMHgyNzcwLCAweDkzMGMpLCBTVChNSTAzNjAsIDApfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOworCisKKy8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCitzdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGdzcGNhX2Rldl9wcm9iZShpbnRmLCBpZCwgJnNkX2Rlc2MsIHNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lCSAgICA9IE1PRFVMRV9OQU1FLAorCS5pZF90YWJsZSAgID0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZQkgICAgPSBzZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgICAgPSBnc3BjYV9zdXNwZW5kLAorCS5yZXN1bWUgICAgID0gZ3NwY2FfcmVzdW1lLAorI2VuZGlmCit9OworCisvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCitzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJaW5mbygicmVnaXN0ZXJlZCIpOworCXJldHVybiAwOworfQorc3RhdGljIHZvaWQgX19leGl0IHNkX21vZF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaW5mbygiZGVyZWdpc3RlcmVkIik7Cit9CisKK21vZHVsZV9pbml0KHNkX21vZF9pbml0KTsKK21vZHVsZV9leGl0KHNkX21vZF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3RrMDE0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0azAxNC5jCmluZGV4IDBmYjUzNDIuLjJhZWRmNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3RrMDE0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdGswMTQuYwpAQCAtMzYsMTEgKzM2LDExIEBACiAJdW5zaWduZWQgY2hhciBjb2xvcnM7CiAJdW5zaWduZWQgY2hhciBsaWdodGZyZXE7CiAJdTggcXVhbGl0eTsKLSNkZWZpbmUgUVVBTElUWV9NSU4gNjAKKyNkZWZpbmUgUVVBTElUWV9NSU4gNzAKICNkZWZpbmUgUVVBTElUWV9NQVggOTUKLSNkZWZpbmUgUVVBTElUWV9ERUYgODAKKyNkZWZpbmUgUVVBTElUWV9ERUYgODgKIAotCXU4ICpqcGVnX2hkcjsKKwl1OCBqcGVnX2hkcltKUEVHX0hEUl9TWl07CiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCkBAIC0zMzcsOSArMzM3LDYgQEAKIAlpbnQgcmV0LCB2YWx1ZTsKIAogCS8qIGNyZWF0ZSB0aGUgSlBFRyBoZWFkZXIgKi8KLQlzZC0+anBlZ19oZHIgPSBrbWFsbG9jKEpQRUdfSERSX1NaLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNkLT5qcGVnX2hkcikKLQkJcmV0dXJuIC1FTk9NRU07CiAJanBlZ19kZWZpbmUoc2QtPmpwZWdfaGRyLCBnc3BjYV9kZXYtPmhlaWdodCwgZ3NwY2FfZGV2LT53aWR0aCwKIAkJCTB4MjIpOwkJLyogSlBFRyA0MTEgKi8KIAlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOwpAQCAtNDEyLDEzICs0MDksNiBAQAogCVBERUJVRyhEX1NUUkVBTSwgImNhbWVyYSBzdG9wcGVkIik7CiB9CiAKLXN0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQlrZnJlZShzZC0+anBlZ19oZHIpOwotfQotCiBzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQl1OCAqZGF0YSwJCQkvKiBpc29jIHBhY2tldCAqLwogCQkJaW50IGxlbikJCQkvKiBpc28gcGFja2V0IGxlbmd0aCAqLwpAQCAtNTc4LDcgKzU2OCw2IEBACiAJLmluaXQgPSBzZF9pbml0LAogCS5zdGFydCA9IHNkX3N0YXJ0LAogCS5zdG9wTiA9IHNkX3N0b3BOLAotCS5zdG9wMCA9IHNkX3N0b3AwLAogCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAogCS5xdWVyeW1lbnUgPSBzZF9xdWVyeW1lbnUsCiAJLmdldF9qY29tcCA9IHNkX2dldF9qY29tcCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5oCmluZGV4IDk5MmNlNTMuLjA1M2EyN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguaApAQCAtMzAsNiArMzAsNyBAQAogI2lmbmRlZiBTVFYwNlhYX0hfCiAjZGVmaW5lIFNUVjA2WFhfSF8KIAorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlICJnc3BjYS5oIgogCiAjZGVmaW5lIE1PRFVMRV9OQU1FICJTVFYwNnh4IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYwppbmRleCAwYzc4NmUwLi45NDk0Zjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYwpAQCAtNTQsNyArNTQsNyBAQAogI2RlZmluZSBNZWdhcGl4VjQgNAogI2RlZmluZSBNZWdhSW1hZ2VWSSA1CiAKLQl1OCAqanBlZ19oZHI7CisJdTgganBlZ19oZHJbSlBFR19IRFJfU1pdOwogfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwpAQCAtODA1LDcgKzgwNSw3IEBACiAJCQkvKiBTZXQgQUUgQVdCIEJhbmRpbmcgVHlwZSAzLT4gNTBIeiAyLT4gNjBIeiAqLwogCQkJc3BjYTUwNEFfYWNrbm93bGVkZ2VkX2NvbW1hbmQoZ3NwY2FfZGV2LCAweDI0LAogCQkJCQkJCTgsIDMsIDB4OWUsIDEpOwotCQkJLyogVHdpY2Ugc2VxdWVuY2lhbCBuZWVkIHN0YXR1cyAweGZmLT4weDllLT4weDlkICovCisJCQkvKiBUd2ljZSBzZXF1ZW50aWFsIG5lZWQgc3RhdHVzIDB4ZmYtPjB4OWUtPjB4OWQgKi8KIAkJCXNwY2E1MDRBX2Fja25vd2xlZGdlZF9jb21tYW5kKGdzcGNhX2RldiwgMHgyNCwKIAkJCQkJCQk4LCAzLCAweDllLCAwKTsKIApAQCAtODQyLDkgKzg0Miw2IEBACiAJaW50IGVuYWJsZTsKIAogCS8qIGNyZWF0ZSB0aGUgSlBFRyBoZWFkZXIgKi8KLQlzZC0+anBlZ19oZHIgPSBrbWFsbG9jKEpQRUdfSERSX1NaLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNkLT5qcGVnX2hkcikKLQkJcmV0dXJuIC1FTk9NRU07CiAJanBlZ19kZWZpbmUoc2QtPmpwZWdfaGRyLCBnc3BjYV9kZXYtPmhlaWdodCwgZ3NwY2FfZGV2LT53aWR0aCwKIAkJCTB4MjIpOwkJLyogSlBFRyA0MTEgKi8KIAlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOwpAQCAtODgwLDcgKzg3Nyw3IEBACiAJCQkvKiBTZXQgQUUgQVdCIEJhbmRpbmcgVHlwZSAzLT4gNTBIeiAyLT4gNjBIeiAqLwogCQkJc3BjYTUwNEFfYWNrbm93bGVkZ2VkX2NvbW1hbmQoZ3NwY2FfZGV2LCAweDI0LAogCQkJCQkJCTgsIDMsIDB4OWUsIDEpOwotCQkJLyogVHdpY2Ugc2VxdWVuY2lhbCBuZWVkIHN0YXR1cyAweGZmLT4weDllLT4weDlkICovCisJCQkvKiBUd2ljZSBzZXF1ZW50aWFsIG5lZWQgc3RhdHVzIDB4ZmYtPjB4OWUtPjB4OWQgKi8KIAkJCXNwY2E1MDRBX2Fja25vd2xlZGdlZF9jb21tYW5kKGdzcGNhX2RldiwgMHgyNCwKIAkJCQkJCQk4LCAzLCAweDllLCAwKTsKIAkJCXNwY2E1MDRBX2Fja25vd2xlZGdlZF9jb21tYW5kKGdzcGNhX2RldiwgMHgyNCwKQEAgLTk1NCwxMyArOTUxLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQlrZnJlZShzZC0+anBlZ19oZHIpOwotfQotCiBzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQl1OCAqZGF0YSwJCQkvKiBpc29jIHBhY2tldCAqLwogCQkJaW50IGxlbikJCQkvKiBpc28gcGFja2V0IGxlbmd0aCAqLwpAQCAtMTE2Miw3ICsxMTUyLDYgQEAKIAkuaW5pdCA9IHNkX2luaXQsCiAJLnN0YXJ0ID0gc2Rfc3RhcnQsCiAJLnN0b3BOID0gc2Rfc3RvcE4sCi0JLnN0b3AwID0gc2Rfc3RvcDAsCiAJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCiAJLmdldF9qY29tcCA9IHNkX2dldF9qY29tcCwKIAkuc2V0X2pjb21wID0gc2Rfc2V0X2pjb21wLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYwppbmRleCA2MzAxNDM3Li4yYTBmMTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYwpAQCAtMSw1ICsxLDcgQEAKIC8qCi0gKiBWNEwyIGJ5IEplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+CisgKiBUNjEzIHN1YmRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBKZWFuLUZyYW5jb2lzIE1vaW5lIChodHRwOi8vbW9pbmVqZi5mcmVlLmZyKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjYsNiArMjgsNyBAQAogCiAjZGVmaW5lIE1PRFVMRV9OQU1FICJ0NjEzIgogCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgImdzcGNhLmgiCiAKICNkZWZpbmUgVjRMMl9DSURfRUZGRUNUUyAoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgMCkKQEAgLTQ0LDE4ICs0NywyMCBAQAogCXU4IGdhbW1hOwogCXU4IHNoYXJwbmVzczsKIAl1OCBmcmVxOwotCXU4IHJlZF9iYWxhbmNlOyAvKiBzcGxpdCBiYWxhbmNlICovCi0JdTggYmx1ZV9iYWxhbmNlOwotCXU4IGdsb2JhbF9nYWluOyAvKiBha2EgZ2FpbiAqLwotCXU4IHdoaXRlYmFsYW5jZTsgLyogc2V0IGRlZmF1bHQgci9nL2IgYW5kIGFjdGl2YXRlICovCisJdTggcmVkX2dhaW47CisJdTggYmx1ZV9nYWluOworCXU4IGdyZWVuX2dhaW47CisJdTggYXdiOyAvKiBzZXQgZGVmYXVsdCByL2cvYiBhbmQgYWN0aXZhdGUgKi8KIAl1OCBtaXJyb3I7CiAJdTggZWZmZWN0OwogCiAJdTggc2Vuc29yOwotI2RlZmluZSBTRU5TT1JfT002ODAyIDAKLSNkZWZpbmUgU0VOU09SX09USEVSIDEKLSNkZWZpbmUgU0VOU09SX1RBUzUxMzBBIDIKLSNkZWZpbmUgU0VOU09SX0xUMTY4RyAzICAgICAvKiBtdXN0IHZlcmlmeSBpZiB0aGlzIGlzIHRoZSBhY3R1YWwgbW9kZWwgKi8KK2VudW0geworCVNFTlNPUl9PTTY4MDIsCisJU0VOU09SX09USEVSLAorCVNFTlNPUl9UQVM1MTMwQSwKKwlTRU5TT1JfTFQxNjhHLAkJLyogbXVzdCB2ZXJpZnkgaWYgdGhpcyBpcyB0aGUgYWN0dWFsIG1vZGVsICovCit9IHNlbnNvcnM7CiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCkBAIC03NCwyNCArNzksMjIgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAorc3RhdGljIGludCBzZF9zZXRhd2Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRhd2Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Ymx1ZV9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0Ymx1ZV9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldHJlZF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0cmVkX2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAotc3RhdGljIGludCBzZF9zZXR3aGl0ZWJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwotc3RhdGljIGludCBzZF9nZXR3aGl0ZWJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKLXN0YXRpYyBpbnQgc2Rfc2V0Ymx1ZV9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKLXN0YXRpYyBpbnQgc2RfZ2V0Ymx1ZV9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7Ci1zdGF0aWMgaW50IHNkX3NldHJlZF9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKLXN0YXRpYyBpbnQgc2RfZ2V0cmVkX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKLXN0YXRpYyBpbnQgc2Rfc2V0Z2xvYmFsX2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwotc3RhdGljIGludCBzZF9nZXRnbG9iYWxfZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwotCi1zdGF0aWMgaW50IHNkX3NldGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwotc3RhdGljIGludCBzZF9nZXRmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldG1pcnJvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldG1pcnJvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogc3RhdGljIGludCBzZF9zZXRlZmZlY3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRlZmZlY3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgc2RfcXVlcnltZW51KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCXN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqbWVudSk7CiAKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSB7CkBAIC0xNzcsOCArMTgwLDggQEAKICNkZWZpbmUgTUlSUk9SX0RFRiAwCiAJICAuZGVmYXVsdF92YWx1ZSA9IE1JUlJPUl9ERUYsCiAJICB9LAotCSAuc2V0ID0gc2Rfc2V0ZmxpcCwKLQkgLmdldCA9IHNkX2dldGZsaXAKKwkgLnNldCA9IHNkX3NldG1pcnJvciwKKwkgLmdldCA9IHNkX2dldG1pcnJvcgogCX0sCiAJewogCSB7CkBAIC0xOTgsMTUgKzIwMSwxNSBAQAogCSB7CiAJICAuaWQgPSAgVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFLAogCSAgLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCSAgLm5hbWUgPSAiV2hpdGUgQmFsYW5jZSIsCisJICAubmFtZSA9ICJBdXRvIFdoaXRlIEJhbGFuY2UiLAogCSAgLm1pbmltdW0gPSAwLAogCSAgLm1heGltdW0gPSAxLAogCSAgLnN0ZXAgPSAxLAotI2RlZmluZSBXSElURV9CQUxBTkNFX0RFRiAwCi0JICAuZGVmYXVsdF92YWx1ZSA9IFdISVRFX0JBTEFOQ0VfREVGLAorI2RlZmluZSBBV0JfREVGIDAKKwkgIC5kZWZhdWx0X3ZhbHVlID0gQVdCX0RFRiwKIAkgIH0sCi0JIC5zZXQgPSBzZF9zZXR3aGl0ZWJhbGFuY2UsCi0JIC5nZXQgPSBzZF9nZXR3aGl0ZWJhbGFuY2UKKwkgLnNldCA9IHNkX3NldGF3YiwKKwkgLmdldCA9IHNkX2dldGF3YgogCX0sCiAJewogCSB7CkBAIC0yNDQsMTEgKzI0NywxMSBAQAogCSAgICAubWluaW11bSA9IDB4MTAsCiAJICAgIC5tYXhpbXVtID0gMHg0MCwKIAkgICAgLnN0ZXAgICAgPSAxLAotI2RlZmluZSBCTFVFX0JBTEFOQ0VfREVGIDB4MjAKLQkgICAgLmRlZmF1bHRfdmFsdWUgPSBCTFVFX0JBTEFOQ0VfREVGLAorI2RlZmluZSBCTFVFX0dBSU5fREVGIDB4MjAKKwkgICAgLmRlZmF1bHRfdmFsdWUgPSBCTFVFX0dBSU5fREVGLAogCSB9LAotCS5zZXQgPSBzZF9zZXRibHVlX2JhbGFuY2UsCi0JLmdldCA9IHNkX2dldGJsdWVfYmFsYW5jZSwKKwkuc2V0ID0gc2Rfc2V0Ymx1ZV9nYWluLAorCS5nZXQgPSBzZF9nZXRibHVlX2dhaW4sCiAJfSwKIAl7CiAJIHsKQEAgLTI1OCwxMSArMjYxLDExIEBACiAJICAgIC5taW5pbXVtID0gMHgxMCwKIAkgICAgLm1heGltdW0gPSAweDQwLAogCSAgICAuc3RlcCAgICA9IDEsCi0jZGVmaW5lIFJFRF9CQUxBTkNFX0RFRiAweDIwCi0JICAgIC5kZWZhdWx0X3ZhbHVlID0gUkVEX0JBTEFOQ0VfREVGLAorI2RlZmluZSBSRURfR0FJTl9ERUYgMHgyMAorCSAgICAuZGVmYXVsdF92YWx1ZSA9IFJFRF9HQUlOX0RFRiwKIAkgfSwKLQkuc2V0ID0gc2Rfc2V0cmVkX2JhbGFuY2UsCi0JLmdldCA9IHNkX2dldHJlZF9iYWxhbmNlLAorCS5zZXQgPSBzZF9zZXRyZWRfZ2FpbiwKKwkuZ2V0ID0gc2RfZ2V0cmVkX2dhaW4sCiAJfSwKIAl7CiAJIHsKQEAgLTI3MiwyNCArMjc1LDE0IEBACiAJICAgIC5taW5pbXVtID0gMHgxMCwKIAkgICAgLm1heGltdW0gPSAweDQwLAogCSAgICAuc3RlcCAgICA9IDEsCi0jZGVmaW5lIGdsb2JhbF9nYWluX0RFRiAgMHgyMAotCSAgICAuZGVmYXVsdF92YWx1ZSA9IGdsb2JhbF9nYWluX0RFRiwKKyNkZWZpbmUgR0FJTl9ERUYgIDB4MjAKKwkgICAgLmRlZmF1bHRfdmFsdWUgPSBHQUlOX0RFRiwKIAkgfSwKLQkuc2V0ID0gc2Rfc2V0Z2xvYmFsX2dhaW4sCi0JLmdldCA9IHNkX2dldGdsb2JhbF9nYWluLAorCS5zZXQgPSBzZF9zZXRnYWluLAorCS5nZXQgPSBzZF9nZXRnYWluLAogCX0sCiB9OwogCi1zdGF0aWMgY2hhciAqZWZmZWN0c19jb250cm9sW10gPSB7Ci0JIk5vcm1hbCIsCi0JIkVtYm9zcyIsCQkvKiBkaXNhYmxlZCAqLwotCSJNb25vY2hyb21lIiwKLQkiU2VwaWEiLAotCSJTa2V0Y2giLAotCSJTdW4gRWZmZWN0IiwJCS8qIGRpc2FibGVkICovCi0JIk5lZ2F0aXZlIiwKLX07Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlX3QxNltdID0gewogCXsxNjAsIDEyMCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDE2MCwKQEAgLTMyNyw3ICszMjAsNiBAQAogCWNvbnN0IHU4IGRhdGExWzEwXTsKIAljb25zdCB1OCBkYXRhMls5XTsKIAljb25zdCB1OCBkYXRhM1s5XTsKLQljb25zdCB1OCBkYXRhNFs0XTsKIAljb25zdCB1OCBkYXRhNVs2XTsKIAljb25zdCB1OCBzdHJlYW1bNF07CiB9OwpAQCAtMzc1LDcgKzM2Nyw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZGl0aW9uYWxfc2Vuc29yX2RhdGEgc2Vuc29yX2RhdGFbXSA9IHsKLSAgICB7CQkJCS8qIDA6IE9NNjgwMiAqLworW1NFTlNPUl9PTTY4MDJdID0gewogCS5uMyA9CiAJCXsweDYxLCAweDY4LCAweDY1LCAweDBhLCAweDYwLCAweDA0fSwKIAkubjQgPSBuNF9vbTY4MDIsCkBAIC0zOTIsMTQgKzM4NCwxMiBAQAogCS5kYXRhMyA9CiAJCXsweDgwLCAweGZmLCAweGZmLCAweDgwLCAweGZmLCAweGZmLCAweDgwLCAweGZmLAogCQkgMHhmZn0sCi0JLmRhdGE0ID0JLypGcmVxICg1MC82MEh6KS4gU3BsaXR0ZWQgZm9yIHRlc3QgcHVycG9zZSAqLwotCQl7MHg2NiwgMHhjYSwgMHhhOCwgMHhmMH0sCiAJLmRhdGE1ID0JLyogdGhpcyBjb3VsZCBiZSByZW1vdmVkIGxhdGVyICovCiAJCXsweDBjLCAweDAzLCAweGFiLCAweDEzLCAweDgxLCAweDIzfSwKIAkuc3RyZWFtID0KIAkJezB4MGIsIDB4MDQsIDB4MGEsIDB4Nzh9LAogICAgIH0sCi0gICAgewkJCQkvKiAxOiBPVEhFUiAqLworW1NFTlNPUl9PVEhFUl0gPSB7CiAJLm4zID0KIAkJezB4NjEsIDB4YzIsIDB4NjUsIDB4ODgsIDB4NjAsIDB4MDB9LAogCS5uNCA9IG40X290aGVyLApAQCAtNDE2LDE0ICs0MDYsMTIgQEAKIAkuZGF0YTMgPQogCQl7MHg0ZSwgMHg5YywgMHhlYywgMHg0MCwgMHg4MCwgMHhjMCwgMHg0OCwgMHg5NiwKIAkJIDB4ZDl9LAotCS5kYXRhNCA9Ci0JCXsweDY2LCAweDAwLCAweGE4LCAweGE4fSwKIAkuZGF0YTUgPQogCQl7MHgwYywgMHgwMywgMHhhYiwgMHgyOSwgMHg4MSwgMHg2OX0sCiAJLnN0cmVhbSA9CiAJCXsweDBiLCAweDA0LCAweDBhLCAweDAwfSwKICAgICB9LAotICAgIHsJCQkJLyogMjogVEFTNTEzMEEgKi8KK1tTRU5TT1JfVEFTNTEzMEFdID0gewogCS5uMyA9CiAJCXsweDYxLCAweGMyLCAweDY1LCAweDBkLCAweDYwLCAweDA4fSwKIAkubjQgPSBuNF90YXM1MTMwYSwKQEAgLTQ0MCwxNCArNDI4LDEyIEBACiAJLmRhdGEzID0KIAkJezB4NjAsIDB4YTgsIDB4ZTAsIDB4NjAsIDB4YTgsIDB4ZTAsIDB4NjAsIDB4YTgsCiAJCSAweGUwfSwKLQkuZGF0YTQgPQkvKiBGcmVxICg1MC82MEh6KS4gU3BsaXR0ZWQgZm9yIHRlc3QgcHVycG9zZSAqLwotCQl7MHg2NiwgMHgwMCwgMHhhOCwgMHhlOH0sCiAJLmRhdGE1ID0KIAkJezB4MGMsIDB4MDMsIDB4YWIsIDB4MTAsIDB4ODEsIDB4MjB9LAogCS5zdHJlYW0gPQogCQl7MHgwYiwgMHgwNCwgMHgwYSwgMHg0MH0sCiAgICAgfSwKLSAgICB7CQkJCS8qIDM6IExUMTY4RyAqLworW1NFTlNPUl9MVDE2OEddID0gewogCS5uMyA9IHsweDYxLCAweGMyLCAweDY1LCAweDY4LCAweDYwLCAweDAwfSwKIAkubjQgPSBuNF9sdDE2OGcsCiAJLm40c3ogPSBzaXplb2YgbjRfbHQxNjhnLApAQCAtNDYwLDcgKzQ0Niw2IEBACiAJCSAweGZmfSwKIAkuZGF0YTMgPSB7MHg0MCwgMHg4MCwgMHhjMCwgMHg1MCwgMHhhMCwgMHhmMCwgMHg1MywgMHhhNiwKIAkJIDB4ZmZ9LAotCS5kYXRhNCA9IHsweDY2LCAweDQxLCAweGE4LCAweGYwfSwKIAkuZGF0YTUgPSB7MHgwYywgMHgwMywgMHhhYiwgMHg0YiwgMHg4MSwgMHgyYn0sCiAJLnN0cmVhbSA9IHsweDBiLCAweDA0LCAweDBhLCAweDI4fSwKICAgICB9LApAQCAtNDY5LDYgKzQ1NCwxNSBAQAogI2RlZmluZSBNQVhfRUZGRUNUUyA3CiAvKiBlYXNpbHkgZG9uZSBieSBzb2Z0LCB0aGlzIHRhYmxlIGNvdWxkIGJlIHJlbW92ZWQsCiAgKiBpIGtlZXAgaXQgaGVyZSBqdXN0IGluIGNhc2UgKi8KK3N0YXRpYyBjaGFyICplZmZlY3RzX2NvbnRyb2xbTUFYX0VGRkVDVFNdID0geworCSJOb3JtYWwiLAorCSJFbWJvc3MiLAkJLyogZGlzYWJsZWQgKi8KKwkiTW9ub2Nocm9tZSIsCisJIlNlcGlhIiwKKwkiU2tldGNoIiwKKwkiU3VuIEVmZmVjdCIsCQkvKiBkaXNhYmxlZCAqLworCSJOZWdhdGl2ZSIsCit9Owogc3RhdGljIGNvbnN0IHU4IGVmZmVjdHNfdGFibGVbTUFYX0VGRkVDVFNdWzZdID0gewogCXsweGE4LCAweGU4LCAweGM2LCAweGQyLCAweGMwLCAweDAwfSwJLyogTm9ybWFsICovCiAJezB4YTgsIDB4YzgsIDB4YzYsIDB4NTIsIDB4YzAsIDB4MDR9LAkvKiBSZXB1amFyICovCkBAIC00ODAsNDAgKzQ3NCw0MSBAQAogfTsKIAogc3RhdGljIGNvbnN0IHU4IGdhbW1hX3RhYmxlW0dBTU1BX01BWF1bMTddID0gewotCXsweDAwLCAweDNlLCAweDY5LCAweDg1LCAweDk1LCAweGExLCAweGFlLCAweGI5LAkvKiAwICovCi0JIDB4YzIsIDB4Y2IsIDB4ZDQsIDB4ZGIsIDB4ZTMsIDB4ZWEsIDB4ZjEsIDB4ZjgsCisvKiBnYW1tYSB0YWJsZSBmcm9tIGNhbTE2OTAuaW5pICovCisJezB4MDAsIDB4MDAsIDB4MDEsIDB4MDQsIDB4MDgsIDB4MGUsIDB4MTYsIDB4MjEsCS8qIDAgKi8KKwkgMHgyZSwgMHgzZCwgMHg1MCwgMHg2NSwgMHg3ZCwgMHg5OSwgMHhiOCwgMHhkYiwKIAkgMHhmZn0sCi0JezB4MDAsIDB4MzMsIDB4NWEsIDB4NzUsIDB4ODUsIDB4OTMsIDB4YTEsIDB4YWQsCS8qIDEgKi8KLQkgMHhiNywgMHhjMiwgMHhjYiwgMHhkNCwgMHhkZSwgMHhlNywgMHhmMCwgMHhmNywKKwl7MHgwMCwgMHgwMSwgMHgwMywgMHgwOCwgMHgwZSwgMHgxNiwgMHgyMSwgMHgyZCwJLyogMSAqLworCSAweDNjLCAweDRkLCAweDYwLCAweDc1LCAweDhkLCAweGE2LCAweGMyLCAweGUxLAogCSAweGZmfSwKLQl7MHgwMCwgMHgyZiwgMHg1MSwgMHg2YiwgMHg3YywgMHg4YSwgMHg5OSwgMHhhNiwJLyogMiAqLwotCSAweGIxLCAweGJjLCAweGM2LCAweGQwLCAweGRiLCAweGU0LCAweGVkLCAweGY2LAorCXsweDAwLCAweDAxLCAweDA1LCAweDBiLCAweDEyLCAweDFjLCAweDI4LCAweDM1LAkvKiAyICovCisJIDB4NDUsIDB4NTYsIDB4NjksIDB4N2UsIDB4OTUsIDB4YWQsIDB4YzcsIDB4ZTMsCiAJIDB4ZmZ9LAotCXsweDAwLCAweDI5LCAweDQ4LCAweDYwLCAweDcyLCAweDgxLCAweDkwLCAweDllLAkvKiAzICovCi0JIDB4YWEsIDB4YjUsIDB4YmYsIDB4Y2IsIDB4ZDYsIDB4ZTEsIDB4ZWIsIDB4ZjUsCisJezB4MDAsIDB4MDIsIDB4MDcsIDB4MGYsIDB4MTgsIDB4MjQsIDB4MzAsIDB4M2YsCS8qIDMgKi8KKwkgMHg0ZiwgMHg2MSwgMHg3MywgMHg4OCwgMHg5ZCwgMHhiNCwgMHhjZCwgMHhlNiwKIAkgMHhmZn0sCi0JezB4MDAsIDB4MjMsIDB4M2YsIDB4NTUsIDB4NjgsIDB4NzcsIDB4ODYsIDB4OTUsCS8qIDQgKi8KLQkgMHhhMiwgMHhhZCwgMHhiOSwgMHhjNiwgMHhkMiwgMHhkZSwgMHhlOSwgMHhmNCwKKwl7MHgwMCwgMHgwNCwgMHgwQiwgMHgxNSwgMHgyMCwgMHgyZCwgMHgzYiwgMHg0YSwJLyogNCAqLworCSAweDViLCAweDZjLCAweDdmLCAweDkyLCAweGE3LCAweGJjLCAweGQyLCAweGU5LAogCSAweGZmfSwKLQl7MHgwMCwgMHgxYiwgMHgzMywgMHg0OCwgMHg1OSwgMHg2OSwgMHg3OSwgMHg4NywJLyogNSAqLwotCSAweDk2LCAweGEzLCAweGIxLCAweGJlLCAweGNjLCAweGRhLCAweGU3LCAweGYzLAorCXsweDAwLCAweDA3LCAweDExLCAweDE1LCAweDIwLCAweDJkLCAweDQ4LCAweDU4LAkvKiA1ICovCisJIDB4NjgsIDB4NzksIDB4OGIsIDB4OWQsIDB4YjAsIDB4YzQsIDB4ZDcsIDB4ZWMsCiAJIDB4ZmZ9LAotCXsweDAwLCAweDAyLCAweDEwLCAweDIwLCAweDMyLCAweDQwLCAweDU3LCAweDY3LAkvKiA2ICovCisJezB4MDAsIDB4MGMsIDB4MWEsIDB4MjksIDB4MzgsIDB4NDcsIDB4NTcsIDB4NjcsCS8qIDYgKi8KIAkgMHg3NywgMHg4OCwgMHg5OSwgMHhhYSwgMHhiYiwgMHhjYywgMHhkZCwgMHhlZSwKIAkgMHhmZn0sCi0JezB4MDAsIDB4MDIsIDB4MTQsIDB4MjYsIDB4MzgsIDB4NGEsIDB4NjAsIDB4NzAsCS8qIDcgKi8KKwl7MHgwMCwgMHgxMCwgMHgyMCwgMHgzMCwgMHg0MCwgMHg1MCwgMHg2MCwgMHg3MCwJLyogNyAqLwogCSAweDgwLCAweDkwLCAweGEwLCAweGIwLCAweGMwLCAweGQwLCAweGUwLCAweGYwLAogCSAweGZmfSwKLQl7MHgwMCwgMHgxMCwgMHgyMiwgMHgzNSwgMHg0NywgMHg1YSwgMHg2OSwgMHg3OSwJLyogOCAqLwotCSAweDg4LCAweDk3LCAweGE3LCAweGI2LCAweGM0LCAweGQzLCAweGUwLCAweGYwLAorCXsweDAwLCAweDE1LCAweDI3LCAweDM4LCAweDQ5LCAweDU5LCAweDY5LCAweDc5LAkvKiA4ICovCisJIDB4ODgsIDB4OTcsIDB4YTcsIDB4YjYsIDB4YzQsIDB4ZDMsIDB4ZTIsIDB4ZjAsCiAJIDB4ZmZ9LAotCXsweDAwLCAweDEwLCAweDI2LCAweDQwLCAweDU0LCAweDY1LCAweDc1LCAweDg0LAkvKiA5ICovCi0JIDB4OTMsIDB4YTEsIDB4YjAsIDB4YmQsIDB4Y2EsIDB4ZDYsIDB4ZTAsIDB4ZjAsCisJezB4MDAsIDB4MWMsIDB4MzAsIDB4NDMsIDB4NTQsIDB4NjUsIDB4NzUsIDB4ODQsCS8qIDkgKi8KKwkgMHg5MywgMHhhMSwgMHhiMCwgMHhiZCwgMHhjYSwgMHhkOCwgMHhlNSwgMHhmMiwKIAkgMHhmZn0sCi0JezB4MDAsIDB4MTgsIDB4MmIsIDB4NDQsIDB4NjAsIDB4NzAsIDB4ODAsIDB4OGUsCS8qIDEwICovCi0JIDB4OWMsIDB4YWEsIDB4YjcsIDB4YzQsIDB4ZDAsIDB4ZDgsIDB4ZTIsIDB4ZjAsCisJezB4MDAsIDB4MjQsIDB4M2IsIDB4NGYsIDB4NjAsIDB4NzAsIDB4ODAsIDB4OGUsCS8qIDEwICovCisJIDB4OWMsIDB4YWEsIDB4YjcsIDB4YzQsIDB4ZDAsIDB4ZGMsIDB4ZTgsIDB4ZjMsCiAJIDB4ZmZ9LAotCXsweDAwLCAweDFhLCAweDM0LCAweDUyLCAweDY2LCAweDdlLCAweDhkLCAweDliLAkvKiAxMSAqLworCXsweDAwLCAweDJhLCAweDNjLCAweDVkLCAweDZlLCAweDdlLCAweDhkLCAweDliLAkvKiAxMSAqLwogCSAweGE4LCAweGI0LCAweGMwLCAweGNiLCAweGQ2LCAweGUxLCAweGViLCAweGY1LAogCSAweGZmfSwKIAl7MHgwMCwgMHgzZiwgMHg1YSwgMHg2ZSwgMHg3ZiwgMHg4ZSwgMHg5YywgMHhhOCwJLyogMTIgKi8KQEAgLTU3NywxMiArNTcyLDExIEBACiAJfSBlbHNlIHsKIAkJdTggKnRtcGJ1ZjsKIAotCQl0bXBidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJCXRtcGJ1ZiA9IGttZW1kdXAoYnVmZmVyLCBsZW4sIEdGUF9LRVJORUwpOwogCQlpZiAoIXRtcGJ1ZikgewogCQkJZXJyKCJPdXQgb2YgbWVtb3J5Iik7CiAJCQlyZXR1cm47CiAJCX0KLQkJbWVtY3B5KHRtcGJ1ZiwgYnVmZmVyLCBsZW4pOwogCQl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKIAkJCQkwLApAQCAtNjI1LDcgKzYxOSw2IEBACiAJCWtmcmVlKHRtcGJ1Zik7CiB9CiAKLS8qIFJlcG9ydGVkIGFzIE9NNjgwMiovCiBzdGF0aWMgdm9pZCBvbTY4MDJfc2Vuc29yX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCWludCBpOwpAQCAtNzAzLDEyICs2OTYsMTIgQEAKIAlzZC0+YXV0b2dhaW4gPSBBVVRPR0FJTl9ERUY7CiAJc2QtPm1pcnJvciA9IE1JUlJPUl9ERUY7CiAJc2QtPmZyZXEgPSBGUkVRX0RFRjsKLQlzZC0+d2hpdGViYWxhbmNlID0gV0hJVEVfQkFMQU5DRV9ERUY7CisJc2QtPmF3YiA9IEFXQl9ERUY7CiAJc2QtPnNoYXJwbmVzcyA9IFNIQVJQTkVTU19ERUY7CiAJc2QtPmVmZmVjdCA9IEVGRkVDVFNfREVGOwotCXNkLT5yZWRfYmFsYW5jZSA9IFJFRF9CQUxBTkNFX0RFRjsKLQlzZC0+Ymx1ZV9iYWxhbmNlID0gQkxVRV9CQUxBTkNFX0RFRjsKLQlzZC0+Z2xvYmFsX2dhaW4gPSBnbG9iYWxfZ2Fpbl9ERUY7CisJc2QtPnJlZF9nYWluID0gUkVEX0dBSU5fREVGOworCXNkLT5ibHVlX2dhaW4gPSBCTFVFX0dBSU5fREVGOworCXNkLT5ncmVlbl9nYWluID0gR0FJTl9ERUYgKiAzIC0gUkVEX0dBSU5fREVGIC0gQkxVRV9HQUlOX0RFRjsKIAogCXJldHVybiAwOwogfQpAQCAtNzYxLDQwICs3NTQsNTkgQEAKIAlyZWdfd19peGJ1Zihnc3BjYV9kZXYsIDB4OTAsCiAJCWdhbW1hX3RhYmxlW3NkLT5nYW1tYV0sIHNpemVvZiBnYW1tYV90YWJsZVswXSk7CiB9Ci1zdGF0aWMgdm9pZCBzZXRnbG9iYWxnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKIAorc3RhdGljIHZvaWQgc2V0UkdCKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JcmVnX3coZ3NwY2FfZGV2LCAoc2QtPnJlZF9iYWxhbmNlICA8PCA4KSArIDB4ODcpOwotCXJlZ193KGdzcGNhX2RldiwgKHNkLT5ibHVlX2JhbGFuY2UgPDwgOCkgKyAweDg4KTsKLQlyZWdfdyhnc3BjYV9kZXYsIChzZC0+Z2xvYmFsX2dhaW4gIDw8IDgpICsgMHg4OSk7CisJdTggYWxsX2dhaW5fcmVnWzZdID0KKwkJezB4ODcsIDB4MDAsIDB4ODgsIDB4MDAsIDB4ODksIDB4MDB9OworCisJYWxsX2dhaW5fcmVnWzFdID0gc2QtPnJlZF9nYWluOworCWFsbF9nYWluX3JlZ1szXSA9IHNkLT5ibHVlX2dhaW47CisJYWxsX2dhaW5fcmVnWzVdID0gc2QtPmdyZWVuX2dhaW47CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgYWxsX2dhaW5fcmVnLCBzaXplb2YgYWxsX2dhaW5fcmVnKTsKIH0KIAotLyogR2VuZXJpYyBmbmMgZm9yIHIvYiBiYWxhbmNlLCBleHBvc3VyZSBhbmQgd2hpdGViYWxhbmNlICovCi1zdGF0aWMgdm9pZCBzZXRiYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKKy8qIEdlbmVyaWMgZm5jIGZvciByL2IgYmFsYW5jZSwgZXhwb3N1cmUgYW5kIGF3YiAqLworc3RhdGljIHZvaWQgc2V0YXdiKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTE2IHJlZzgwOwogCi0JLyogb24gd2hpdGViYWxhbmNlIGxlYXZlIGRlZmF1bHRzIHZhbHVlcyAqLwotCWlmIChzZC0+d2hpdGViYWxhbmNlKSB7Ci0JCXJlZ193KGdzcGNhX2RldiwgMHgzYzgwKTsKLQl9IGVsc2UgewotCQlyZWdfdyhnc3BjYV9kZXYsIDB4Mzg4MCk7CisJcmVnODAgPSAoc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0ucmVnODAgPDwgOCkgfCAweDgwOworCisJLyogb24gYXdiIGxlYXZlIGRlZmF1bHRzIHZhbHVlcyAqLworCWlmICghc2QtPmF3YikgewogCQkvKiBzaG91ZCB3ZSB3YWl0IGhlcmUuLiAqLwotCQkvKiB1cGRhdGUgYW5kIHJlc2V0ICdnbG9iYWwgZ2Fpbicgd2l0aCB3ZWJjYW0gcGFyYW1ldGVycyAqLwotCQlzZC0+cmVkX2JhbGFuY2UgPSByZWdfcihnc3BjYV9kZXYsIDB4MDA4Nyk7Ci0JCXNkLT5ibHVlX2JhbGFuY2UgPSByZWdfcihnc3BjYV9kZXYsIDB4MDA4OCk7Ci0JCXNkLT5nbG9iYWxfZ2FpbiA9IHJlZ19yKGdzcGNhX2RldiwgMHgwMDg5KTsKLQkJc2V0Z2xvYmFsZ2Fpbihnc3BjYV9kZXYpOworCQkvKiB1cGRhdGUgYW5kIHJlc2V0IFJHQiBnYWlucyB3aXRoIHdlYmNhbSB2YWx1ZXMgKi8KKwkJc2QtPnJlZF9nYWluID0gcmVnX3IoZ3NwY2FfZGV2LCAweDAwODcpOworCQlzZC0+Ymx1ZV9nYWluID0gcmVnX3IoZ3NwY2FfZGV2LCAweDAwODgpOworCQlzZC0+Z3JlZW5fZ2FpbiA9IHJlZ19yKGdzcGNhX2RldiwgMHgwMDg5KTsKKwkJcmVnODAgJj0gfjB4MDQwMDsJCS8qIEFXQiBvZmYgKi8KIAl9Ci0KKwlyZWdfdyhnc3BjYV9kZXYsIHJlZzgwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIHJlZzgwKTsKIH0KIAotCi0KLXN0YXRpYyB2b2lkIHNldHdoaXRlYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBpbml0X2dhaW5zKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlzZXRiYWxhbmNlKGdzcGNhX2Rldik7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXUxNiByZWc4MDsKKwl1OCBhbGxfZ2Fpbl9yZWdbOF0gPQorCQl7MHg4NywgMHgwMCwgMHg4OCwgMHgwMCwgMHg4OSwgMHgwMCwgMHg4MCwgMHgwMH07CisKKwlhbGxfZ2Fpbl9yZWdbMV0gPSBzZC0+cmVkX2dhaW47CisJYWxsX2dhaW5fcmVnWzNdID0gc2QtPmJsdWVfZ2FpbjsKKwlhbGxfZ2Fpbl9yZWdbNV0gPSBzZC0+Z3JlZW5fZ2FpbjsKKwlyZWc4MCA9IHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLnJlZzgwOworCWlmICghc2QtPmF3YikKKwkJcmVnODAgJj0gfjB4MDQ7CisJYWxsX2dhaW5fcmVnWzddID0gcmVnODA7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgYWxsX2dhaW5fcmVnLCBzaXplb2YgYWxsX2dhaW5fcmVnKTsKKworCXJlZ193KGdzcGNhX2RldiwgKHNkLT5yZWRfZ2FpbiAgPDwgOCkgKyAweDg3KTsKKwlyZWdfdyhnc3BjYV9kZXYsIChzZC0+Ymx1ZV9nYWluIDw8IDgpICsgMHg4OCk7CisJcmVnX3coZ3NwY2FfZGV2LCAoc2QtPmdyZWVuX2dhaW4gIDw8IDgpICsgMHg4OSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCkBAIC04MDcsNiArODE5LDM4IEBACiAJcmVnX3coZ3NwY2FfZGV2LCByZWdfdG9fd3JpdGUpOwogfQogCitzdGF0aWMgdm9pZCBzZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggcmVnNjY7CisJdTggZnJlcVs0XSA9IHsgMHg2NiwgMHgwMCwgMHhhOCwgMHhlOCB9OworCisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfTFQxNjhHOgorCQlpZiAoc2QtPmZyZXEgIT0gMCkKKwkJCWZyZXFbM10gPSAweGE4OworCQlyZWc2NiA9IDB4NDE7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX09NNjgwMjoKKwkJcmVnNjYgPSAweGNhOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZWc2NiA9IDB4NDA7CisJCWJyZWFrOworCX0KKwlzd2l0Y2ggKHNkLT5mcmVxKSB7CisJY2FzZSAwOgkJCQkvKiBubyBmbGlja2VyICovCisJCWZyZXFbM10gPSAweGYwOworCQlicmVhazsKKwljYXNlIDI6CQkJCS8qIDYwSHogKi8KKwkJcmVnNjYgJj0gfjB4NDA7CisJCWJyZWFrOworCX0KKwlmcmVxWzFdID0gcmVnNjY7CisKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBmcmVxLCBzaXplb2YgZnJlcSk7Cit9CisKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLwogc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKQEAgLTkwMSwxMyArOTQ1LDkgQEAKIAlzZXRnYW1tYShnc3BjYV9kZXYpOwogCXNldGNvbG9ycyhnc3BjYV9kZXYpOwogCXNldHNoYXJwbmVzcyhnc3BjYV9kZXYpOwotCXNldHdoaXRlYmFsYW5jZShnc3BjYV9kZXYpOworCWluaXRfZ2FpbnMoZ3NwY2FfZGV2KTsKKwlzZXRmcmVxKGdzcGNhX2Rldik7CiAKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MjA4Nyk7CS8qIHRpZWQgdG8gd2hpdGUgYmFsYW5jZT8gKi8KLQlyZWdfdyhnc3BjYV9kZXYsIDB4MjA4OCk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDIwODkpOwotCi0JcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yLT5kYXRhNCwgc2l6ZW9mIHNlbnNvci0+ZGF0YTQpOwogCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvci0+ZGF0YTUsIHNpemVvZiBzZW5zb3ItPmRhdGE1KTsKIAlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3ItPm5zZXQ4LCBzaXplb2Ygc2Vuc29yLT5uc2V0OCk7CiAJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yLT5zdHJlYW0sIHNpemVvZiBzZW5zb3ItPnN0cmVhbSk7CkBAIC05MjYsMTYgKzk2NiwxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzZXRmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldG1pcnJvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXU4IGZsaXBjbWRbOF0gPQorCXU4IGhmbGlwY21kWzhdID0KIAkJezB4NjIsIDB4MDcsIDB4NjMsIDB4MDMsIDB4NjQsIDB4MDAsIDB4NjAsIDB4MDl9OwogCiAJaWYgKHNkLT5taXJyb3IpCi0JCWZsaXBjbWRbM10gPSAweDAxOworCQloZmxpcGNtZFszXSA9IDB4MDE7CiAKLQlyZWdfd19idWYoZ3NwY2FfZGV2LCBmbGlwY21kLCBzaXplb2YgZmxpcGNtZCk7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgaGZsaXBjbWQsIHNpemVvZiBoZmxpcGNtZCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldGVmZmVjdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCkBAIC05NTYsMTcgKzk5Niw2IEBACiAJCXJlZ193KGdzcGNhX2RldiwgMHhmYWE2KTsKIH0KIAotc3RhdGljIHZvaWQgc2V0bGlnaHRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JdTggZnJlcVs0XSA9IHsgMHg2NiwgMHg0MCwgMHhhOCwgMHhlOCB9OwotCi0JaWYgKHNkLT5mcmVxID09IDIpCS8qIDYwaHogKi8KLQkJZnJlcVsxXSA9IDB4MDA7Ci0KLQlyZWdfd19idWYoZ3NwY2FfZGV2LCBmcmVxLCBzaXplb2YgZnJlcSk7Ci19Ci0KIC8qIElzIHRoaXMgcmVhbGx5IG5lZWRlZD8KICAqIGkgYWRkZWQgc29tZSBtb2R1bGUgcGFyYW1ldGVycyBmb3IgdGVzdCB3aXRoIHNvbWUgdXNlcnMgKi8KIHN0YXRpYyB2b2lkIHBvbGxfc2Vuc29yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKQEAgLTk3OSw5ICsxMDA4LDcgQEAKIAlzdGF0aWMgY29uc3QgdTggcG9sbDJbXSA9CiAJCXsweDY3LCAweDAyLCAweDY4LCAweDcxLCAweDY5LCAweDcyLCAweDcyLCAweGE5LAogCQkgMHg3MywgMHgwMiwgMHg3MywgMHgwMiwgMHg2MCwgMHgxNH07Ci0Jc3RhdGljIGNvbnN0IHU4IHBvbGwzW10gPQotCQl7MHg4NywgMHgzZiwgMHg4OCwgMHgyMCwgMHg4OSwgMHgyZH07Ci0Jc3RhdGljIGNvbnN0IHU4IHBvbGw0W10gPQorCXN0YXRpYyBjb25zdCB1OCBub2lzZTAzW10gPQkvKiAoc29tZSBkaWZmZXJlbmNlcyAvIG1zLWRydikgKi8KIAkJezB4YTYsIDB4MGEsIDB4ZWEsIDB4Y2YsIDB4YmUsIDB4MjYsIDB4YjEsIDB4NWYsCiAJCSAweGExLCAweGIxLCAweGRhLCAweDZiLCAweGRiLCAweDk4LCAweGRmLCAweDBjLAogCQkgMHhjMiwgMHg4MCwgMHhjMywgMHgxMH07CkBAIC05ODksOCArMTAxNiw3IEBACiAJUERFQlVHKERfU1RSRUFNLCAiW1NlbnNvciByZXF1aXJlcyBwb2xsaW5nXSIpOwogCXJlZ193X2J1Zihnc3BjYV9kZXYsIHBvbGwxLCBzaXplb2YgcG9sbDEpOwogCXJlZ193X2J1Zihnc3BjYV9kZXYsIHBvbGwyLCBzaXplb2YgcG9sbDIpOwotCXJlZ193X2J1Zihnc3BjYV9kZXYsIHBvbGwzLCBzaXplb2YgcG9sbDMpOwotCXJlZ193X2J1Zihnc3BjYV9kZXYsIHBvbGw0LCBzaXplb2YgcG9sbDQpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIG5vaXNlMDMsIHNpemVvZiBub2lzZTAzKTsKIH0KIAogc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCkBAIC0xMDI1LDEyICsxMDUxLDcgQEAKIAljYXNlIFNFTlNPUl9PTTY4MDI6CiAJCW9tNjgwMl9zZW5zb3JfaW5pdChnc3BjYV9kZXYpOwogCQlicmVhazsKLQljYXNlIFNFTlNPUl9MVDE2OEc6Ci0JCWJyZWFrOwotCWNhc2UgU0VOU09SX09USEVSOgotCQlicmVhazsKLQlkZWZhdWx0OgotLyoJY2FzZSBTRU5TT1JfVEFTNTEzMEE6ICovCisJY2FzZSBTRU5TT1JfVEFTNTEzMEE6CiAJCWkgPSAwOwogCQlmb3IgKDs7KSB7CiAJCQlyZWdfd19idWYoZ3NwY2FfZGV2LCB0YXM1MTMwYV9zZW5zb3JfaW5pdFtpXSwKQEAgLTEwNDcsNyArMTA2OCw3IEBACiAJCWJyZWFrOwogCX0KIAlzZW5zb3IgPSAmc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl07Ci0JcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yLT5kYXRhNCwgc2l6ZW9mIHNlbnNvci0+ZGF0YTQpOworCXNldGZyZXEoZ3NwY2FfZGV2KTsKIAlyZWdfcihnc3BjYV9kZXYsIDB4MDAxMik7CiAJcmVnX3dfYnVmKGdzcGNhX2RldiwgdDIsIHNpemVvZiB0Mik7CiAJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGIzLCB0Mywgc2l6ZW9mIHQzKTsKQEAgLTEwODAsNyArMTEwMSw3IEBACiAJCQl1OCAqZGF0YSwJCQkvKiBpc29jIHBhY2tldCAqLwogCQkJaW50IGxlbikJCQkvKiBpc28gcGFja2V0IGxlbmd0aCAqLwogewotCXN0YXRpYyB1OCBmZmQ5W10gPSB7IDB4ZmYsIDB4ZDkgfTsKKwlpbnQgcGt0X3R5cGU7CiAKIAlpZiAoZGF0YVswXSA9PSAweDVhKSB7CiAJCS8qIENvbnRyb2wgUGFja2V0LCBhZnRlciB0aGlzIGNhbWUgdGhlIGhlYWRlciBhZ2FpbiwKQEAgLTEwOTAsODQgKzExMTEsODggQEAKIAl9CiAJZGF0YSArPSAyOwogCWxlbiAtPSAyOwotCWlmIChkYXRhWzBdID09IDB4ZmYgJiYgZGF0YVsxXSA9PSAweGQ4KSB7Ci0JCS8qIGV4dHJhIGJ5dGVzLi4uLi4sIGNvdWxkIGJlIHByb2Nlc3NlZCB0b28gYnV0IHdvdWxkIGJlCi0JCSAqIGEgd2FzdGUgb2YgdGltZSwgcmlnaHQgbm93IGxlYXZlIHRoZSBhcHBsaWNhdGlvbiBhbmQKLQkJICogbGlianBlZyBkbyBpdCBmb3Igb3Vyc2VybHZlcy4uICovCi0JCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULAotCQkJCQlmZmQ5LCAyKTsKLQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBkYXRhLCBsZW4pOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGRhdGFbbGVuIC0gMl0gPT0gMHhmZiAmJiBkYXRhW2xlbiAtIDFdID09IDB4ZDkpIHsKLQkJLyogSnVzdCBpbiBjYXNlLCBpIGhhdmUgc2VlbiBwYWNrZXRzIHdpdGggdGhlIG1hcmtlciwKLQkJICogb3RoZXIncyBkbyBub3QgaW5jbHVkZSBpdC4uLiAqLwotCQlsZW4gLT0gMjsKLQl9Ci0JZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBkYXRhLCBsZW4pOworCWlmIChkYXRhWzBdID09IDB4ZmYgJiYgZGF0YVsxXSA9PSAweGQ4KQorCQlwa3RfdHlwZSA9IEZJUlNUX1BBQ0tFVDsKKwllbHNlIGlmIChkYXRhW2xlbiAtIDJdID09IDB4ZmYgJiYgZGF0YVtsZW4gLSAxXSA9PSAweGQ5KQorCQlwa3RfdHlwZSA9IExBU1RfUEFDS0VUOworCWVsc2UKKwkJcGt0X3R5cGUgPSBJTlRFUl9QQUNLRVQ7CisJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgcGt0X3R5cGUsIGRhdGEsIGxlbik7CiB9CiAKLQotc3RhdGljIGludCBzZF9zZXRibHVlX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCitzdGF0aWMgaW50IHNkX3NldGJsdWVfZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlzZC0+Ymx1ZV9iYWxhbmNlID0gdmFsOworCXNkLT5ibHVlX2dhaW4gPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlyZWdfdyhnc3BjYV9kZXYsICh2YWwgPDwgOCkgKyAweDg4KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZF9nZXRibHVlX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQorc3RhdGljIGludCBzZF9nZXRibHVlX2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCSp2YWwgPSBzZC0+Ymx1ZV9iYWxhbmNlOworCSp2YWwgPSBzZC0+Ymx1ZV9nYWluOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNkX3NldHJlZF9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQorc3RhdGljIGludCBzZF9zZXRyZWRfZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlzZC0+cmVkX2JhbGFuY2UgPSB2YWw7CisJc2QtPnJlZF9nYWluID0gdmFsOwogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKIAkJcmVnX3coZ3NwY2FfZGV2LCAodmFsIDw8IDgpICsgMHg4Nyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZF9nZXRyZWRfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCitzdGF0aWMgaW50IHNkX2dldHJlZF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQkqdmFsID0gc2QtPnJlZF9iYWxhbmNlOworCSp2YWwgPSBzZC0+cmVkX2dhaW47CiAJcmV0dXJuIDA7CiB9CiAKLQotCi1zdGF0aWMgaW50IHNkX3NldGdsb2JhbF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQorc3RhdGljIGludCBzZF9zZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1MTYgcHNnLCBuc2c7CiAKLQlzZC0+Z2xvYmFsX2dhaW4gPSB2YWw7CisJcHNnID0gc2QtPnJlZF9nYWluICsgc2QtPmJsdWVfZ2FpbiArIHNkLT5ncmVlbl9nYWluOworCW5zZyA9IHZhbCAqIDM7CisJc2QtPnJlZF9nYWluID0gc2QtPnJlZF9nYWluICogbnNnIC8gcHNnOworCWlmIChzZC0+cmVkX2dhaW4gPiAweDQwKQorCQlzZC0+cmVkX2dhaW4gPSAweDQwOworCWVsc2UgaWYgKHNkLT5yZWRfZ2FpbiA8IDB4MTApCisJCXNkLT5yZWRfZ2FpbiA9IDB4MTA7CisJc2QtPmJsdWVfZ2FpbiA9IHNkLT5ibHVlX2dhaW4gKiBuc2cgLyBwc2c7CisJaWYgKHNkLT5ibHVlX2dhaW4gPiAweDQwKQorCQlzZC0+Ymx1ZV9nYWluID0gMHg0MDsKKwllbHNlIGlmIChzZC0+Ymx1ZV9nYWluIDwgMHgxMCkKKwkJc2QtPmJsdWVfZ2FpbiA9IDB4MTA7CisJc2QtPmdyZWVuX2dhaW4gPSBzZC0+Z3JlZW5fZ2FpbiAqIG5zZyAvIHBzZzsKKwlpZiAoc2QtPmdyZWVuX2dhaW4gPiAweDQwKQorCQlzZC0+Z3JlZW5fZ2FpbiA9IDB4NDA7CisJZWxzZSBpZiAoc2QtPmdyZWVuX2dhaW4gPCAweDEwKQorCQlzZC0+Z3JlZW5fZ2FpbiA9IDB4MTA7CisKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCi0JCXNldGdsb2JhbGdhaW4oZ3NwY2FfZGV2KTsKLQorCQlzZXRSR0IoZ3NwY2FfZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZF9nZXRnbG9iYWxfZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCitzdGF0aWMgaW50IHNkX2dldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCSp2YWwgPSBzZC0+Z2xvYmFsX2dhaW47CisJKnZhbCA9IChzZC0+cmVkX2dhaW4gKyBzZC0+Ymx1ZV9nYWluICsgc2QtPmdyZWVuX2dhaW4pIC8gMzsKIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtMTE4NiwzNSArMTIxMSwzNSBAQAogCXJldHVybiAqdmFsOwogfQogCi1zdGF0aWMgaW50IHNkX3NldHdoaXRlYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3N0YXRpYyBpbnQgc2Rfc2V0YXdiKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCXNkLT53aGl0ZWJhbGFuY2UgPSB2YWw7CisJc2QtPmF3YiA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCi0JCXNldHdoaXRlYmFsYW5jZShnc3BjYV9kZXYpOworCQlzZXRhd2IoZ3NwY2FfZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZF9nZXR3aGl0ZWJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQorc3RhdGljIGludCBzZF9nZXRhd2Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCSp2YWwgPSBzZC0+d2hpdGViYWxhbmNlOworCSp2YWwgPSBzZC0+YXdiOwogCXJldHVybiAqdmFsOwogfQogCi1zdGF0aWMgaW50IHNkX3NldGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCitzdGF0aWMgaW50IHNkX3NldG1pcnJvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlzZC0+bWlycm9yID0gdmFsOwogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKLQkJc2V0ZmxpcChnc3BjYV9kZXYpOworCQlzZXRtaXJyb3IoZ3NwY2FfZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZF9nZXRmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3N0YXRpYyBpbnQgc2RfZ2V0bWlycm9yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKQEAgLTEzMDAsNyArMTMyNSw3IEBACiAKIAlzZC0+ZnJlcSA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCi0JCXNldGxpZ2h0ZnJlcShnc3BjYV9kZXYpOworCQlzZXRmcmVxKGdzcGNhX2Rldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzNjgsNyArMTM5Myw4IEBACiAJY2FzZSBWNEwyX0NJRF9FRkZFQ1RTOgogCQlpZiAoKHVuc2lnbmVkKSBtZW51LT5pbmRleCA8IEFSUkFZX1NJWkUoZWZmZWN0c19jb250cm9sKSkgewogCQkJc3RybmNweSgoY2hhciAqKSBtZW51LT5uYW1lLAotCQkJCWVmZmVjdHNfY29udHJvbFttZW51LT5pbmRleF0sIDMyKTsKKwkJCQllZmZlY3RzX2NvbnRyb2xbbWVudS0+aW5kZXhdLAorCQkJCXNpemVvZiBtZW51LT5uYW1lKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90djg1MzIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdHY4NTMyLmMKaW5kZXggYzdiNmViMS4uZDljNWJmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90djg1MzIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3R2ODUzMi5jCkBAIC0zMCwyOSArMzAsNDYgQEAKIHN0cnVjdCBzZCB7CiAJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KIAotCV9fdTE2IGJyaWdodG5lc3M7CisJX191MTYgZXhwb3N1cmU7CisJX191MTYgZ2FpbjsKIAogCV9fdTggcGFja2V0OwogfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwotc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKLXN0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogCXsKIAkgewotCSAgLmlkID0gVjRMMl9DSURfQlJJR0hUTkVTUywKKwkgIC5pZCA9IFY0TDJfQ0lEX0VYUE9TVVJFLAogCSAgLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCSAgLm5hbWUgPSAiQnJpZ2h0bmVzcyIsCisJICAubmFtZSA9ICJFeHBvc3VyZSIsCiAJICAubWluaW11bSA9IDEsCi0JICAubWF4aW11bSA9IDB4MTVmLAkvKiA9IDM1MiAtIDEgKi8KKwkgIC5tYXhpbXVtID0gMHgxOGYsCiAJICAuc3RlcCA9IDEsCi0jZGVmaW5lIEJSSUdIVE5FU1NfREVGIDB4MTRjCi0JICAuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfREVGLAorI2RlZmluZSBFWFBPU1VSRV9ERUYgMHgxOGYKKwkgIC5kZWZhdWx0X3ZhbHVlID0gRVhQT1NVUkVfREVGLAogCSAgfSwKLQkgLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCi0JIC5nZXQgPSBzZF9nZXRicmlnaHRuZXNzLAorCSAuc2V0ID0gc2Rfc2V0ZXhwb3N1cmUsCisJIC5nZXQgPSBzZF9nZXRleHBvc3VyZSwKKwkgfSwKKwl7CisJIHsKKwkgIC5pZCA9IFY0TDJfQ0lEX0dBSU4sCisJICAudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJICAubmFtZSA9ICJHYWluIiwKKwkgIC5taW5pbXVtID0gMCwKKwkgIC5tYXhpbXVtID0gMHg3ZmYsCisJICAuc3RlcCA9IDEsCisjZGVmaW5lIEdBSU5fREVGIDB4MTAwCisJICAuZGVmYXVsdF92YWx1ZSA9IEdBSU5fREVGLAorCSAgfSwKKwkgLnNldCA9IHNkX3NldGdhaW4sCisJIC5nZXQgPSBzZF9nZXRnYWluLAogCSB9LAogfTsKIApAQCAtOTIsNiArMTA5LDE0IEBACiAjZGVmaW5lIFIxNF9BRF9ST1dfQkVHSU5MIDB4MTQKICNkZWZpbmUgUjE1X0FEX1JPV0JFR0lOSCAgMHgxNQogI2RlZmluZSBSMUNfQURfRVhQT1NFX1RJTUVMIDB4MWMKKyNkZWZpbmUgUjIwX0dBSU5fRzFMCTB4MjAKKyNkZWZpbmUgUjIxX0dBSU5fRzFICTB4MjEKKyNkZWZpbmUgUjIyX0dBSU5fUkwJMHgyMgorI2RlZmluZSBSMjNfR0FJTl9SSAkweDIzCisjZGVmaW5lIFIyNF9HQUlOX0JMCTB4MjQKKyNkZWZpbmUgUjI1X0dBSU5fQkgJMHgyNQorI2RlZmluZSBSMjZfR0FJTl9HMkwJMHgyNgorI2RlZmluZSBSMjdfR0FJTl9HMkgJMHgyNwogI2RlZmluZSBSMjhfUVVBTlQJMHgyOAogI2RlZmluZSBSMjlfTElORQkweDI5CiAjZGVmaW5lIFIyQ19QT0xBUklUWQkweDJjCkBAIC0xMjksMTggKzE1NCw2IEBACiAJezB4MDUsIDB4MDksIDB4ZjF9LAogfTsKIAotc3RhdGljIGludCByZWdfcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCSBfX3UxNiBpbmRleCkKLXsKLQl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCi0JCQl1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAotCQkJMHgwMywKLQkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAotCQkJMCwJLyogdmFsdWUgKi8KLQkJCWluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsCi0JCQk1MDApOwotCXJldHVybiBnc3BjYV9kZXYtPnVzYl9idWZbMF07Ci19CiAKIC8qIHdyaXRlIDEgYnl0ZSAqLwogc3RhdGljIHZvaWQgcmVnX3cxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKQEAgLTE4Myw3ICsxOTYsNiBAQAogCX0KIAlyZWdfdzEoZ3NwY2FfZGV2LCBSMDdfVEFCTEVfTEVOLCBpKTsKIAlyZWdfdzEoZ3NwY2FfZGV2LCBSMDFfVElNSU5HX0NPTlRST0xfTE9XLCBDTURfRUVwcm9tX0Nsb3NlKTsKLQltc2xlZXAoMTApOwogfQogCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCkBAIC0xOTcsNTMgKzIwOSwxMyBAQAogCWNhbS0+Y2FtX21vZGUgPSBzaWZfbW9kZTsKIAljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoc2lmX21vZGUpOwogCi0Jc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKKwlzZC0+ZXhwb3N1cmUgPSBFWFBPU1VSRV9ERUY7CisJc2QtPmdhaW4gPSBHQUlOX0RFRjsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdHZfODUzMlJlYWRSZWdpc3RlcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCWludCBpOwotCXN0YXRpYyB1OCByZWdfdGJbXSA9IHsKLQkJUjBDX0FEX1dJRFRITCwKLQkJUjBEX0FEX1dJRFRISCwKLQkJUjI4X1FVQU5ULAotCQlSMjlfTElORSwKLQkJUjJDX1BPTEFSSVRZLAotCQlSMkRfUE9JTlQsCi0JCVIyRV9QT0lOVEgsCi0JCVIyRl9QT0lOVEIsCi0JCVIzMF9QT0lOVEJILAotCQlSMkFfSElHSF9CVURHRVQsCi0JCVIyQl9MT1dfQlVER0VULAotCQlSMzRfVklELAotCQlSMzVfVklESCwKLQkJUjM2X1BJRCwKLQkJUjM3X1BJREgsCi0JCVI4M19BRF9JREgsCi0JCVIxMF9BRF9DT0xfQkVHSU5MLAotCQlSMTFfQURfQ09MX0JFR0lOSCwKLQkJUjE0X0FEX1JPV19CRUdJTkwsCi0JCVIxNV9BRF9ST1dCRUdJTkgsCi0JCTAKLQl9OwotCi0JaSA9IDA7Ci0JZG8gewotCQlyZWdfcihnc3BjYV9kZXYsIHJlZ190YltpXSk7Ci0JCWkrKzsKLQl9IHdoaWxlIChyZWdfdGJbaV0gIT0gMCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHR2Xzg1MzJfc2V0UmVnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlyZWdfdzEoZ3NwY2FfZGV2LCBSMTBfQURfQ09MX0JFR0lOTCwgMHg0NCk7Ci0JCQkJCQkvKiBiZWdpbiBhY3RpdmUgbGluZSAqLwotCXJlZ193MShnc3BjYV9kZXYsIFIxMV9BRF9DT0xfQkVHSU5ILCAweDAwKTsKLQkJCQkJCS8qIG1pcnJvciBhbmQgZGlnaXRhbCBnYWluICovCi0JcmVnX3cxKGdzcGNhX2RldiwgUjAwX1BBUlRfQ09OVFJPTCwgTEFURU5UX0NIQU5HRSB8IEVYUE9fQ0hBTkdFKTsKLQkJCQkJCS8qID0gMHg4NCAqLwotCiAJcmVnX3cxKGdzcGNhX2RldiwgUjNCX1Rlc3QzLCAweDBhKTsJLyogVGVzdDBTZWwgPSAxMCAqLwogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAJcmVnX3cxKGdzcGNhX2RldiwgUjBFX0FEX0hFSUdIVEwsIDB4OTApOwpAQCAtMjU1LDEwMSArMjI3LDQ0IEBACiAJCQkJCQkvKiBtaXJyb3IgYW5kIGRpZ2l0YWwgZ2FpbiAqLwogCXJlZ193MShnc3BjYV9kZXYsIFIxNF9BRF9ST1dfQkVHSU5MLCAweDBhKTsKIAotCXJlZ193MShnc3BjYV9kZXYsIFI5MV9BRF9TTE9QRVJFRywgMHgwMCk7CiAJcmVnX3cxKGdzcGNhX2RldiwgUjk0X0FEX0JJVENPTlRST0wsIDB4MDIpOwotCi0JcmVnX3cxKGdzcGNhX2RldiwgUjAxX1RJTUlOR19DT05UUk9MX0xPVywgQ01EX0VFcHJvbV9DbG9zZSk7Ci0KIAlyZWdfdzEoZ3NwY2FfZGV2LCBSOTFfQURfU0xPUEVSRUcsIDB4MDApOwogCXJlZ193MShnc3BjYV9kZXYsIFIwMF9QQVJUX0NPTlRST0wsIExBVEVOVF9DSEFOR0UgfCBFWFBPX0NIQU5HRSk7CiAJCQkJCQkvKiA9IDB4ODQgKi8KIH0KIAotc3RhdGljIHZvaWQgdHZfODUzMl9Qb2xsUmVnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlpbnQgaTsKLQotCS8qIHN0cmFuZ2UgcG9sbGluZyBmcm9tIHRnYyAqLwotCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCXJlZ193MShnc3BjYV9kZXYsIFIyQ19QT0xBUklUWSwgMHgxMCk7Ci0JCXJlZ193MShnc3BjYV9kZXYsIFIwMF9QQVJUX0NPTlRST0wsCi0JCQkJTEFURU5UX0NIQU5HRSB8IEVYUE9fQ0hBTkdFKTsKLQkJcmVnX3cxKGdzcGNhX2RldiwgUjMxX1VQRCwgMHgwMSk7Ci0JfQotfQotCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KIHN0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJdHZfODUzMldyaXRlRUVwcm9tKGdzcGNhX2Rldik7CiAKLQlyZWdfdzEoZ3NwY2FfZGV2LCBSOTFfQURfU0xPUEVSRUcsIDB4MzIpOwkvKiBzbG9wZSBiZWdpbiAxLDdWLAotCQkJCQkJCSAqIHNsb3BlIHJhdGUgMiAqLwotCXJlZ193MShnc3BjYV9kZXYsIFI5NF9BRF9CSVRDT05UUk9MLCAweDAwKTsKLQl0dl84NTMyUmVhZFJlZ2lzdGVycyhnc3BjYV9kZXYpOwotCXJlZ193MShnc3BjYV9kZXYsIFIzQl9UZXN0MywgMHgwYik7Ci0JcmVnX3cyKGdzcGNhX2RldiwgUjBFX0FEX0hFSUdIVEwsIDB4MDE5MCk7Ci0JcmVnX3cyKGdzcGNhX2RldiwgUjFDX0FEX0VYUE9TRV9USU1FTCwgMHgwMThmKTsKLQlyZWdfdzEoZ3NwY2FfZGV2LCBSMENfQURfV0lEVEhMLCAweGU4KTsKLQlyZWdfdzEoZ3NwY2FfZGV2LCBSMERfQURfV0lEVEhILCAweDAzKTsKLQotCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCXJlZ193MShnc3BjYV9kZXYsIFIyOF9RVUFOVCwgMHg5MCk7Ci0JCQkJCS8qIG5vIGNvbXByZXNzIC0gZml4ZWQgUSAtIHF1YW50IDAgKi8KLQlyZWdfdzEoZ3NwY2FfZGV2LCBSMjlfTElORSwgMHg4MSk7Ci0JCQkJCS8qIDB4ODQ7IC8vIENJRiB8IDQgcGFja2V0IDB4MjkgKi8KLQotCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JcmVnX3cxKGdzcGNhX2RldiwgUjJDX1BPTEFSSVRZLCAweDEwKTsKLQkJCQkJCS8qIDB4NDg7IC8vMHgwODsgMHgyYyAqLwotCXJlZ193MShnc3BjYV9kZXYsIFIyRF9QT0lOVCwgMHgxNCk7Ci0JCQkJCQkvKiAweDM4OyAweDJkICovCi0JcmVnX3cxKGdzcGNhX2RldiwgUjJFX1BPSU5USCwgMHgwMSk7Ci0JCQkJCQkvKiAweDA0OyAweDJlICovCi0JcmVnX3cxKGdzcGNhX2RldiwgUjJGX1BPSU5UQiwgMHgxMik7Ci0JCQkJCQkvKiAweDA0OyAweDJmICovCi0JcmVnX3cxKGdzcGNhX2RldiwgUjMwX1BPSU5UQkgsIDB4MDEpOwotCQkJCQkJLyogMHgwNDsgMHgzMCAqLwotCXJlZ193MShnc3BjYV9kZXYsIFIwMF9QQVJUX0NPTlRST0wsIExBVEVOVF9DSEFOR0UgfCBFWFBPX0NIQU5HRSk7Ci0JCQkJCQkvKiAweDAwPC0weDg0ICovCi0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JcmVnX3cxKGdzcGNhX2RldiwgUjMxX1VQRCwgMHgwMSk7CS8qIHVwZGF0ZSByZWdpc3RlcnMgKi8KLQltc2xlZXAoMjAwKTsKLQlyZWdfdzEoZ3NwY2FfZGV2LCBSMzFfVVBELCAweDAwKTsJCS8qIGVuZCB1cGRhdGUgKi8KLQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQl0dl84NTMyX3NldFJlZyhnc3BjYV9kZXYpOwotCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCXJlZ193MShnc3BjYV9kZXYsIFIzQl9UZXN0MywgMHgwYik7CS8qIFRlc3QwU2VsID0gMTEgPSBHUElPICovCi0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JdHZfODUzMl9zZXRSZWcoZ3NwY2FfZGV2KTsKLQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQl0dl84NTMyX1BvbGxSZWcoZ3NwY2FfZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JcmVnX3cyKGdzcGNhX2RldiwgUjFDX0FEX0VYUE9TRV9USU1FTCwgc2QtPmJyaWdodG5lc3MpOworCXJlZ193Mihnc3BjYV9kZXYsIFIxQ19BRF9FWFBPU0VfVElNRUwsIHNkLT5leHBvc3VyZSk7CiAJcmVnX3cxKGdzcGNhX2RldiwgUjAwX1BBUlRfQ09OVFJPTCwgTEFURU5UX0NIQU5HRSB8IEVYUE9fQ0hBTkdFKTsKIAkJCQkJCS8qIDB4ODQgKi8KIH0KIAorc3RhdGljIHZvaWQgc2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJcmVnX3cyKGdzcGNhX2RldiwgUjIwX0dBSU5fRzFMLCBzZC0+Z2Fpbik7CisJcmVnX3cyKGdzcGNhX2RldiwgUjIyX0dBSU5fUkwsIHNkLT5nYWluKTsKKwlyZWdfdzIoZ3NwY2FfZGV2LCBSMjRfR0FJTl9CTCwgc2QtPmdhaW4pOworCXJlZ193Mihnc3BjYV9kZXYsIFIyNl9HQUlOX0cyTCwgc2QtPmdhaW4pOworfQorCiAvKiAtLSBzdGFydCB0aGUgY2FtZXJhIC0tICovCiBzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlyZWdfdzEoZ3NwY2FfZGV2LCBSOTFfQURfU0xPUEVSRUcsIDB4MzIpOwkvKiBzbG9wZSBiZWdpbiAxLDdWLAotCQkJCQkJCSAqIHNsb3BlIHJhdGUgMiAqLwotCXJlZ193MShnc3BjYV9kZXYsIFI5NF9BRF9CSVRDT05UUk9MLCAweDAwKTsKLQl0dl84NTMyUmVhZFJlZ2lzdGVycyhnc3BjYV9kZXYpOwotCXJlZ193MShnc3BjYV9kZXYsIFIzQl9UZXN0MywgMHgwYik7Ci0KLQlyZWdfdzIoZ3NwY2FfZGV2LCBSMEVfQURfSEVJR0hUTCwgMHgwMTkwKTsKLQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7Ci0KIAlyZWdfdzEoZ3NwY2FfZGV2LCBSMENfQURfV0lEVEhMLCAweGU4KTsJCS8qIDB4MjA7IDB4MGMgKi8KIAlyZWdfdzEoZ3NwY2FfZGV2LCBSMERfQURfV0lEVEhILCAweDAzKTsKIApAQCAtMzcxLDE5ICsyODYsMTUgQEAKIAlyZWdfdzEoZ3NwY2FfZGV2LCBSMkVfUE9JTlRILCAweDAxKTsKIAlyZWdfdzEoZ3NwY2FfZGV2LCBSMkZfUE9JTlRCLCAweDEyKTsKIAlyZWdfdzEoZ3NwY2FfZGV2LCBSMzBfUE9JTlRCSCwgMHgwMSk7Ci0JcmVnX3cxKGdzcGNhX2RldiwgUjAwX1BBUlRfQ09OVFJPTCwgTEFURU5UX0NIQU5HRSB8IEVYUE9fQ0hBTkdFKTsKKworCXR2Xzg1MzJfc2V0UmVnKGdzcGNhX2Rldik7CisKKwlzZXRleHBvc3VyZShnc3BjYV9kZXYpOworCXNldGdhaW4oZ3NwY2FfZGV2KTsKKwogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAJcmVnX3cxKGdzcGNhX2RldiwgUjMxX1VQRCwgMHgwMSk7CS8qIHVwZGF0ZSByZWdpc3RlcnMgKi8KIAltc2xlZXAoMjAwKTsKLQlyZWdfdzEoZ3NwY2FfZGV2LCBSMzFfVVBELCAweDAwKTsJCS8qIGVuZCB1cGRhdGUgKi8KLQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCXR2Xzg1MzJfc2V0UmVnKGdzcGNhX2Rldik7Ci0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQlyZWdfdzEoZ3NwY2FfZGV2LCBSM0JfVGVzdDMsIDB4MGIpOwkvKiBUZXN0MFNlbCA9IDExID0gR1BJTyAqLwotCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JdHZfODUzMl9zZXRSZWcoZ3NwY2FfZGV2KTsKLQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCXR2Xzg1MzJfUG9sbFJlZyhnc3BjYV9kZXYpOwogCXJlZ193MShnc3BjYV9kZXYsIFIzMV9VUEQsIDB4MDApOwkvKiBlbmQgdXBkYXRlICovCiAKIAlnc3BjYV9kZXYtPmVtcHR5X3BhY2tldCA9IDA7CQkvKiBjaGVjayB0aGUgZW1wdHkgcGFja2V0cyAqLwpAQCAtNDI4LDIxICszMzksMzkgQEAKIAkJCWRhdGEgKyBnc3BjYV9kZXYtPndpZHRoICsgNSwgZ3NwY2FfZGV2LT53aWR0aCk7CiB9CiAKLXN0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3N0YXRpYyBpbnQgc2Rfc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0Jc2QtPmJyaWdodG5lc3MgPSB2YWw7CisJc2QtPmV4cG9zdXJlID0gdmFsOwogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKLQkJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOworCQlzZXRleHBvc3VyZShnc3BjYV9kZXYpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQorc3RhdGljIGludCBzZF9nZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JKnZhbCA9IHNkLT5icmlnaHRuZXNzOworCSp2YWwgPSBzZC0+ZXhwb3N1cmU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+Z2FpbiA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGdhaW4oZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmdhaW47CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdmMwMzJ4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3ZjMDMyeC5jCmluZGV4IDczMmMzZGYuLjAzMTI2NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdmMwMzJ4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYwpAQCAtMjc0OCwxMSArMjc0OCwxMSBAQAogCXsweGIzLCAweDA0LCAweDE1LCAweGNjfSwKIAl7MHhiMywgMHgyMCwgMHgwMCwgMHhjY30sCiAJezB4YjMsIDB4MjEsIDB4MDAsIDB4Y2N9LAotCXsweGIzLCAweDIyLCAweDA0LCAweGNjfSwKKwl7MHhiMywgMHgyMiwgMHgwNCwgMHhjY30sCS8qIHNlbnNvciBoZWlnaHQgPSAxMDI0ICovCiAJezB4YjMsIDB4MjMsIDB4MDAsIDB4Y2N9LAogCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCi0JezB4YjMsIDB4MTYsIDB4MDQsIDB4Y2N9LAorCXsweGIzLCAweDE2LCAweDA0LCAweGNjfSwJLyogc2Vuc29yIHdpZHRoID0gMTI4MCAqLwogCXsweGIzLCAweDE3LCAweGZmLCAweGNjfSwKIAl7MHhiMywgMHgyYywgMHgwMywgMHhjY30sCiAJezB4YjMsIDB4MmQsIDB4NTYsIDB4Y2N9LApAQCAtMjkxOSw3ICsyOTE5LDcgQEAKIAl7MHgwMCwgMHgyMCwgMHgxMSwgMHhhYX0sCiAJezB4MDAsIDB4MzMsIDB4MzgsIDB4YWF9LAogCXsweDAwLCAweGJiLCAweDBkLCAweGFhfSwKLQl7MHhiMywgMHgyMiwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MjIsIDB4MDEsIDB4Y2N9LAkvKiBjaGFuZ2UgdG8gNjQweDQ4MCAqLwogCXsweGIzLCAweDIzLCAweGUwLCAweGNjfSwKIAl7MHhiMywgMHgxNiwgMHgwMiwgMHhjY30sCiAJezB4YjMsIDB4MTcsIDB4N2YsIDB4Y2N9LApAQCAtMjkzNSw3ICsyOTM1LDcgQEAKIAl7MHgwMCwgMHgyMCwgMHgzMywgMHhhYX0sCiAJezB4MDAsIDB4MzMsIDB4MzgsIDB4YWF9LAogCXsweDAwLCAweGJiLCAweDBkLCAweGFhfSwKLQl7MHhiMywgMHgyMiwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjIsIDB4MDAsIDB4Y2N9LAkvKiBjaGFuZ2UgdG8gMzIweDI0MCAqLwogCXsweGIzLCAweDIzLCAweGYwLCAweGNjfSwKIAl7MHhiMywgMHgxNiwgMHgwMSwgMHhjY30sCiAJezB4YjMsIDB4MTcsIDB4M2YsIDB4Y2N9LApAQCAtMzA2OCwzNyArMzA2OCw4NCBAQAogfTsKIAogLyogcmVhZCAnbGVuJyBieXRlcyBpbiBnc3BjYV9kZXYtPnVzYl9idWYgKi8KLXN0YXRpYyB2b2lkIHJlZ19yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB2b2lkIHJlZ19yX2koc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkgIHUxNiByZXEsCiAJCSAgdTE2IGluZGV4LAogCQkgIHUxNiBsZW4pCiB7Ci0JdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCWludCByZXQ7CisKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuOworCXJldCA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKIAkJCXVzYl9yY3ZjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCiAJCQlyZXEsCiAJCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKIAkJCTEsCQkJLyogdmFsdWUgKi8KIAkJCWluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIGxlbiwKIAkJCTUwMCk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAicmVnX3IgZXJyICVkIiwgcmV0KTsKKwkJZ3NwY2FfZGV2LT51c2JfZXJyID0gcmV0OworCX0KK30KK3N0YXRpYyB2b2lkIHJlZ19yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJICB1MTYgcmVxLAorCQkgIHUxNiBpbmRleCwKKwkJICB1MTYgbGVuKQoreworCXJlZ19yX2koZ3NwY2FfZGV2LCByZXEsIGluZGV4LCBsZW4pOworI2lmZGVmIEdTUENBX0RFQlVHCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKKwlpZiAobGVuID09IDEpCisJCVBERUJVRyhEX1VTQkksICJHRVQgJTAyeCAwMDAxICUwNHggJTAyeCIsIHJlcSwgaW5kZXgsCisJCQkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdKTsKKwllbHNlCisJCVBERUJVRyhEX1VTQkksICJHRVQgJTAyeCAwMDAxICUwNHggJTAyeCAlMDJ4ICUwMngiLAorCQkJCXJlcSwgaW5kZXgsCisJCQkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdLAorCQkJCWdzcGNhX2Rldi0+dXNiX2J1ZlsxXSwKKwkJCQlnc3BjYV9kZXYtPnVzYl9idWZbMl0pOworI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIHJlZ193KHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCitzdGF0aWMgdm9pZCByZWdfd19pKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCSAgICB1MTYgcmVxLAogCQkJICAgIHUxNiB2YWx1ZSwKIAkJCSAgICB1MTYgaW5kZXgpCiB7Ci0JdXNiX2NvbnRyb2xfbXNnKGRldiwKLQkJCXVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCWludCByZXQ7CisKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuOworCXJldCA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCiAJCQlyZXEsCiAJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCiAJCQl2YWx1ZSwgaW5kZXgsIE5VTEwsIDAsCiAJCQk1MDApOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgInJlZ193IGVyciAlZCIsIHJldCk7CisJCWdzcGNhX2Rldi0+dXNiX2VyciA9IHJldDsKKwl9Cit9CitzdGF0aWMgdm9pZCByZWdfdyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQkgICAgdTE2IHJlcSwKKwkJCSAgICB1MTYgdmFsdWUsCisJCQkgICAgdTE2IGluZGV4KQoreworI2lmZGVmIEdTUENBX0RFQlVHCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKKwlQREVCVUcoRF9VU0JPLCAiU0VUICUwMnggJTA0eCAlMDR4IiwgcmVxLCB2YWx1ZSwgaW5kZXgpOworI2VuZGlmCisJcmVnX3dfaShnc3BjYV9kZXYsIHJlcSwgdmFsdWUsIGluZGV4KTsKIH0KIAogc3RhdGljIHUxNiByZWFkX3NlbnNvcl9yZWdpc3RlcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQkJdTE2IGFkZHJlc3MpCiB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCXU4IGxkYXRhLCBtZGF0YSwgaGRhdGE7CiAJaW50IHJldHJ5ID0gNTA7CiAKQEAgLTMxMDgsOCArMzE1NSw4IEBACiAJCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0pOwogCQlyZXR1cm4gMDsKIAl9Ci0JcmVnX3coZGV2LCAweGEwLCBhZGRyZXNzLCAweGIzM2EpOwotCXJlZ193KGRldiwgMHhhMCwgMHgwMiwgMHhiMzM5KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4YTAsIGFkZHJlc3MsIDB4YjMzYSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGEwLCAweDAyLCAweGIzMzkpOwogCiAJZG8gewogCQlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YjMzYiwgMSk7CkBAIC0zMTM2LDE1ICszMTgzLDE1IEBACiBzdGF0aWMgaW50IHZjMDMyeF9wcm9iZV9zZW5zb3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CiAJaW50IGksIG47CiAJdTE2IHZhbHVlOwogCWNvbnN0IHN0cnVjdCBzZW5zb3JfaW5mbyAqcHRzZW5zb3JfaW5mbzsKIAogLypmaXhtZTogc2hvdWxkIGFsc28gY2hlY2sgdGhlIG90aGVyIHNlbnNvciAoYmFjayBtaTEzMjBfc29jLCBmcm9udCBtYzUwMWNiKSovCiAJaWYgKHNkLT5mbGFncyAmIEZMX1NBTVNVTkcpIHsKLQkJcmVnX3coZGV2LCAweGEwLCAweDAxLCAweGIzMDEpOwotCQlyZWdfdyhkZXYsIDB4ODksIDB4ZjBmZiwgMHhmZmZmKTsgLyogc2VsZWN0IHRoZSBiYWNrIHNlbnNvciAqLworCQlyZWdfdyhnc3BjYV9kZXYsIDB4YTAsIDB4MDEsIDB4YjMwMSk7CisJCXJlZ193KGdzcGNhX2RldiwgMHg4OSwgMHhmMGZmLCAweGZmZmYpOworCQkJCQkJLyogc2VsZWN0IHRoZSBiYWNrIHNlbnNvciAqLwogCX0KIAogCXJlZ19yKGdzcGNhX2RldiwgMHhhMSwgMHhiZmNmLCAxKTsKQEAgLTMxNTgsMTMgKzMyMDUsMTMgQEAKIAkJbiA9IEFSUkFZX1NJWkUodmMwMzIzX3Byb2JlX2RhdGEpOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JCXJlZ193KGRldiwgMHhhMCwgMHgwMiwgMHhiMzM0KTsKLQkJcmVnX3coZGV2LCAweGEwLCBwdHNlbnNvcl9pbmZvLT5tMSwgMHhiMzAwKTsKLQkJcmVnX3coZGV2LCAweGEwLCBwdHNlbnNvcl9pbmZvLT5tMiwgMHhiMzAwKTsKLQkJcmVnX3coZGV2LCAweGEwLCAweDAxLCAweGIzMDgpOwotCQlyZWdfdyhkZXYsIDB4YTAsIDB4MGMsIDB4YjMwOSk7Ci0JCXJlZ193KGRldiwgMHhhMCwgcHRzZW5zb3JfaW5mby0+STJjQWRkLCAweGIzMzUpOwotCQlyZWdfdyhkZXYsIDB4YTAsIHB0c2Vuc29yX2luZm8tPm9wLCAweGIzMDEpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4YTAsIDB4MDIsIDB4YjMzNCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHhhMCwgcHRzZW5zb3JfaW5mby0+bTEsIDB4YjMwMCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHhhMCwgcHRzZW5zb3JfaW5mby0+bTIsIDB4YjMwMCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHhhMCwgMHgwMSwgMHhiMzA4KTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGEwLCAweDBjLCAweGIzMDkpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4YTAsIHB0c2Vuc29yX2luZm8tPkkyY0FkZCwgMHhiMzM1KTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGEwLCBwdHNlbnNvcl9pbmZvLT5vcCwgMHhiMzAxKTsKIAkJdmFsdWUgPSByZWFkX3NlbnNvcl9yZWdpc3Rlcihnc3BjYV9kZXYsIHB0c2Vuc29yX2luZm8tPklkQWRkKTsKIAkJaWYgKHZhbHVlID09IDAgJiYgcHRzZW5zb3JfaW5mby0+SWRBZGQgPT0gMHg4MikKIAkJCXZhbHVlID0gcmVhZF9zZW5zb3JfcmVnaXN0ZXIoZ3NwY2FfZGV2LCAweDgzKTsKQEAgLTMxOTIsMjYgKzMyMzksMzMgQEAKIAkJCXU4IHJlZywgY29uc3QgdTggKnZhbCwKIAkJCXU4IHNpemUpCQkvKiAxIG9yIDIgKi8KIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CiAJaW50IHJldHJ5OwogCi0JcmVnX3IoZ3NwY2FfZGV2LCAweGExLCAweGIzM2YsIDEpOworI2lmZGVmIEdTUENBX0RFQlVHCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKKwlpZiAoc2l6ZSA9PSAxKQorCQlQREVCVUcoRF9VU0JPLCAiaTJjX3cgJTAyeCAlMDJ4IiwgcmVnLCAqdmFsKTsKKwllbHNlCisJCVBERUJVRyhEX1VTQk8sICJpMmNfdyAlMDJ4ICUwMnglMDJ4IiwgcmVnLCAqdmFsLCB2YWxbMV0pOworI2VuZGlmCisJcmVnX3JfaShnc3BjYV9kZXYsIDB4YTEsIDB4YjMzZiwgMSk7CiAvKmZpeG1lOnNob3VsZCBjaGVjayBpZiAoIShnc3BjYV9kZXYtPnVzYl9idWZbMF0gJiAweDAyKSkgZXJyb3IqLwotCXJlZ193KGRldiwgMHhhMCwgc2l6ZSwgMHhiMzM0KTsKLQlyZWdfdyhkZXYsIDB4YTAsIHJlZywgMHhiMzNhKTsKLQlyZWdfdyhkZXYsIDB4YTAsIHZhbFswXSwgMHhiMzM2KTsKKwlyZWdfd19pKGdzcGNhX2RldiwgMHhhMCwgc2l6ZSwgMHhiMzM0KTsKKwlyZWdfd19pKGdzcGNhX2RldiwgMHhhMCwgcmVnLCAweGIzM2EpOworCXJlZ193X2koZ3NwY2FfZGV2LCAweGEwLCB2YWxbMF0sIDB4YjMzNik7CiAJaWYgKHNpemUgPiAxKQotCQlyZWdfdyhkZXYsIDB4YTAsIHZhbFsxXSwgMHhiMzM3KTsKLQlyZWdfdyhkZXYsIDB4YTAsIDB4MDEsIDB4YjMzOSk7CisJCXJlZ193X2koZ3NwY2FfZGV2LCAweGEwLCB2YWxbMV0sIDB4YjMzNyk7CisJcmVnX3dfaShnc3BjYV9kZXYsIDB4YTAsIDB4MDEsIDB4YjMzOSk7CiAJcmV0cnkgPSA0OwogCWRvIHsKLQkJcmVnX3IoZ3NwY2FfZGV2LCAweGExLCAweGIzM2IsIDEpOworCQlyZWdfcl9pKGdzcGNhX2RldiwgMHhhMSwgMHhiMzNiLCAxKTsKIAkJaWYgKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9PSAwKQogCQkJYnJlYWs7CiAJCW1zbGVlcCgyMCk7CiAJfSB3aGlsZSAoLS1yZXRyeSA+IDApOwogCWlmIChyZXRyeSA8PSAwKQotCQlQREVCVUcoRF9FUlIsICJpMmNfd3JpdGUgZmFpbGVkIik7CisJCVBERUJVRyhEX0VSUiwgImkyY193cml0ZSB0aW1lb3V0Iik7CiB9CiAKIHN0YXRpYyB2b2lkIHB1dF90YWJfdG9fcmVnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKQEAgLTMyMjEsMTMgKzMyNzUsMTIgQEAKIAl1MTYgYWQgPSBhZGRyOwogCiAJZm9yIChqID0gMDsgaiA8IHRhYnNpemU7IGorKykKLQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIHRhYltqXSwgYWQrKyk7CisJCXJlZ193KGdzcGNhX2RldiwgMHhhMCwgdGFiW2pdLCBhZCsrKTsKIH0KIAogc3RhdGljIHZvaWQgdXNiX2V4Y2hhbmdlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCWNvbnN0IHU4IGRhdGFbXVs0XSkKIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CiAJaW50IGkgPSAwOwogCiAJZm9yICg7OykgewpAQCAtMzIzNSw3ICszMjg4LDcgQEAKIAkJZGVmYXVsdDoKIAkJCXJldHVybjsKIAkJY2FzZSAweGNjOgkJCS8qIG5vcm1hbCB3cml0ZSAqLwotCQkJcmVnX3coZGV2LCAweGEwLCBkYXRhW2ldWzJdLAorCQkJcmVnX3coZ3NwY2FfZGV2LCAweGEwLCBkYXRhW2ldWzJdLAogCQkJCQkoZGF0YVtpXVswXSkgPDwgOCB8IGRhdGFbaV1bMV0pOwogCQkJYnJlYWs7CiAJCWNhc2UgMHhhYToJCQkvKiBpMmMgb3AgKi8KQEAgLTMyNTksNyArMzMxMiw2IEBACiAJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKIAlzdHJ1Y3QgY2FtICpjYW07CiAJaW50IHNlbnNvcjsKIAlzdGF0aWMgdTggbnBrdFtdID0gewkvKiBudW1iZXIgb2YgcGFja2V0cyBwZXIgSVNPQyBtZXNzYWdlICovCkBAIC0zMzYzLDEzICszNDE1LDYgQEAKIAlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfT1Y3NjcwKQogCQlzZC0+ZmxhZ3MgfD0gRkxfSEZMSVAgfCBGTF9WRkxJUDsKIAotCWlmIChzZC0+YnJpZGdlID09IEJSSURHRV9WQzAzMjEpIHsKLQkJcmVnX3IoZ3NwY2FfZGV2LCAweDhhLCAwLCAzKTsKLQkJcmVnX3coZGV2LCAweDg3LCAweDAwLCAweDBmMGYpOwotCi0JCXJlZ19yKGdzcGNhX2RldiwgMHg4YiwgMCwgMyk7Ci0JCXJlZ193KGRldiwgMHg4OCwgMHgwMCwgMHgwMjAyKTsKLQl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMzNzgsMTUgKzM0MjMsMjEgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfUE94eHh4KSB7Ci0JCXJlZ19yKGdzcGNhX2RldiwgMHhhMSwgMHhiMzAwLCAxKTsKLQkJaWYgKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSAhPSAwKSB7Ci0JCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHgyNiwgMHhiMzAwKTsKLQkJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweDA0LCAweGIzMDApOwotCQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4MDAsIDB4YjMwMCk7CisJaWYgKHNkLT5icmlkZ2UgPT0gQlJJREdFX1ZDMDMyMSkgeworCQlyZWdfcihnc3BjYV9kZXYsIDB4OGEsIDAsIDMpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4ODcsIDB4MDAsIDB4MGYwZik7CisJCXJlZ19yKGdzcGNhX2RldiwgMHg4YiwgMCwgMyk7CisJCXJlZ193KGdzcGNhX2RldiwgMHg4OCwgMHgwMCwgMHgwMjAyKTsKKwkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX1BPeHh4eCkgeworCQkJcmVnX3IoZ3NwY2FfZGV2LCAweGExLCAweGIzMDAsIDEpOworCQkJaWYgKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSAhPSAwKSB7CisJCQkJcmVnX3coZ3NwY2FfZGV2LCAweGEwLCAweDI2LCAweGIzMDApOworCQkJCXJlZ193KGdzcGNhX2RldiwgMHhhMCwgMHgwNCwgMHhiMzAwKTsKKwkJCQlyZWdfdyhnc3BjYV9kZXYsIDB4YTAsIDB4MDAsIDB4YjMwMCk7CisJCQl9CiAJCX0KIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIHZvaWQgc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCkBAIC0zNTE2LDE3ICszNTY3LDE3IEBACiAKIC8qZml4bWU6IGJhY2sgc2Vuc29yIG9ubHkqLwogCWlmIChzZC0+ZmxhZ3MgJiBGTF9TQU1TVU5HKSB7Ci0JCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDg5LCAweGYwZmYsIDB4ZmZmZik7Ci0JCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGE5LCAweDgzNDgsIDB4MDAwZSk7Ci0JCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGE5LCAweDAwMDAsIDB4MDAxYSk7CisJCXJlZ193KGdzcGNhX2RldiwgMHg4OSwgMHhmMGZmLCAweGZmZmYpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4YTksIDB4ODM0OCwgMHgwMDBlKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGE5LCAweDAwMDAsIDB4MDAxYSk7CiAJfQogCiAJLyogQXNzdW1lIHN0YXJ0IHVzZSB0aGUgZ29vZCByZXNvbHV0aW9uIGZyb20gZ3NwY2FfZGV2LT5tb2RlICovCiAJaWYgKHNkLT5icmlkZ2UgPT0gQlJJREdFX1ZDMDMyMSkgewotCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHhmZiwgMHhiZmVjKTsKLQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4ZmYsIDB4YmZlZCk7Ci0JCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweGZmLCAweGJmZWUpOwotCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHhmZiwgMHhiZmVmKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGEwLCAweGZmLCAweGJmZWMpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4YTAsIDB4ZmYsIDB4YmZlZCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHhhMCwgMHhmZiwgMHhiZmVlKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGEwLCAweGZmLCAweGJmZWYpOwogCQlzZC0+aW1hZ2Vfb2Zmc2V0ID0gNDY7CiAJfSBlbHNlIHsKIAkJaWYgKGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlW2dzcGNhX2Rldi0+Y3Vycl9tb2RlXS5waXhlbGZvcm1hdApAQCAtMzYxNyw3ICszNjY4LDcgQEAKIAkJCWluaXQgPSBwb3h4eHhfaW5pdFZHQTsKIAkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgaW5pdCk7CiAJCXJlZ19yKGdzcGNhX2RldiwgMHg4YywgMHgwMDAwLCAzKTsKLQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsCisJCXJlZ193KGdzcGNhX2RldiwgMHhhMCwKIAkJCQlnc3BjYV9kZXYtPnVzYl9idWZbMl0gJiAxID8gMCA6IDEsCiAJCQkJMHhiMzVjKTsKIAkJbXNsZWVwKDMwMCk7CkBAIC0zNjM1LDEwICszNjg2LDEwIEBACiAJCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCQljYXNlIFNFTlNPUl9QTzEyMDA6CiAJCWNhc2UgU0VOU09SX0hWNzEzMVI6Ci0JCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHg4OSwgMHgwNDAwLCAweDE0MTUpOworCQkJcmVnX3coZ3NwY2FfZGV2LCAweDg5LCAweDA0MDAsIDB4MTQxNSk7CiAJCQlicmVhazsKIAkJY2FzZSBTRU5TT1JfTUkxMzEwX1NPQzoKLQkJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDg5LCAweDA1OGMsIDB4MDAwMCk7CisJCQlyZWdfdyhnc3BjYV9kZXYsIDB4ODksIDB4MDU4YywgMHgwMDAwKTsKIAkJCWJyZWFrOwogCQl9CiAJCW1zbGVlcCgxMDApOwpAQCAtMzY0OCw5ICszNjk5LDkgQEAKIAl9CiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CiAJY2FzZSBTRU5TT1JfT1Y3NjcwOgotCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHg4NywgMHhmZmZmLCAweGZmZmYpOwotCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHg4OCwgMHhmZjAwLCAweGYwZjEpOwotCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHgwMDAwLCAweGJmZmYpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4ODcsIDB4ZmZmZiwgMHhmZmZmKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDg4LCAweGZmMDAsIDB4ZjBmMSk7CisJCXJlZ193KGdzcGNhX2RldiwgMHhhMCwgMHgwMDAwLCAweGJmZmYpOwogCQlicmVhazsKIAljYXNlIFNFTlNPUl9QT3h4eHg6CiAJCXNldGNvbG9ycyhnc3BjYV9kZXYpOwpAQCAtMzY1OSw1MSArMzcxMCw0OSBAQAogCiAJCS8qIGxlZCBvbiAqLwogCQltc2xlZXAoODApOwotCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHg4OSwgMHhmZmZmLCAweGZkZmYpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4ODksIDB4ZmZmZiwgMHhmZGZmKTsKIAkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgcG94eHh4X2luaXRfZW5kXzIpOwogCQlicmVhazsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTlNPUl9NSTEzMTBfU09DOgotCQlyZWdfdyhkZXYsIDB4ODksIDB4MDU4YywgMHgwMGZmKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDg5LCAweDA1OGMsIDB4MDBmZik7CiAJCWJyZWFrOwogCWNhc2UgU0VOU09SX1BPeHh4eDoKIAkJcmV0dXJuOwogCWRlZmF1bHQ6CiAJCWlmICghKHNkLT5mbGFncyAmIEZMX1NBTVNVTkcpKQotCQkJcmVnX3coZGV2LCAweDg5LCAweGZmZmYsIDB4ZmZmZik7CisJCQlyZWdfdyhnc3BjYV9kZXYsIDB4ODksIDB4ZmZmZiwgMHhmZmZmKTsKIAkJYnJlYWs7CiAJfQotCXJlZ193KGRldiwgMHhhMCwgMHgwMSwgMHhiMzAxKTsKLQlyZWdfdyhkZXYsIDB4YTAsIDB4MDksIDB4YjAwMyk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGEwLCAweDAxLCAweGIzMDEpOworCXJlZ193KGdzcGNhX2RldiwgMHhhMCwgMHgwOSwgMHhiMDAzKTsKIH0KIAogLyogY2FsbGVkIG9uIHN0cmVhbW9mZiB3aXRoIGFsdCAwIGFuZCBvbiBkaXNjb25uZWN0ICovCiBzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCWlmICghZ3NwY2FfZGV2LT5wcmVzZW50KQogCQlyZXR1cm47CiAvKmZpeG1lOiBpcyB0aGlzIHVzZWZ1bD8qLwogCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9NSTEzMTBfU09DKQotCQlyZWdfdyhkZXYsIDB4ODksIDB4MDU4YywgMHgwMGZmKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDg5LCAweDA1OGMsIDB4MDBmZik7CiAJZWxzZSBpZiAoIShzZC0+ZmxhZ3MgJiBGTF9TQU1TVU5HKSkKLQkJcmVnX3coZGV2LCAweDg5LCAweGZmZmYsIDB4ZmZmZik7CisJCXJlZ193KGdzcGNhX2RldiwgMHg4OSwgMHhmZmZmLCAweGZmZmYpOwogCiAJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX1BPeHh4eCkgewotCQlyZWdfdyhkZXYsIDB4YTAsIDB4MjYsIDB4YjMwMCk7Ci0JCXJlZ193KGRldiwgMHhhMCwgMHgwNCwgMHhiMzAwKTsKLQkJcmVnX3coZGV2LCAweGEwLCAweDAwLCAweGIzMDApOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4YTAsIDB4MjYsIDB4YjMwMCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHhhMCwgMHgwNCwgMHhiMzAwKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGEwLCAweDAwLCAweGIzMDApOwogCX0KIH0KIApAQCAtMzcyNiwxNyArMzc3NSwxMiBAQAogCS8qIFRoZSB2YzAzMjEgc2VuZHMgc29tZSBhZGRpdGlvbmFsIGRhdGEgYWZ0ZXIgc2VuZGluZyB0aGUgY29tcGxldGUKIAkgKiBmcmFtZSwgd2UgaWdub3JlIHRoaXMuICovCiAJaWYgKHNkLT5icmlkZ2UgPT0gQlJJREdFX1ZDMDMyMSkgewotCQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lOwotCQlpbnQgbDsKKwkJaW50IHNpemUsIGw7CiAKLQkJZnJhbWUgPSBnc3BjYV9nZXRfaV9mcmFtZShnc3BjYV9kZXYpOwotCQlpZiAoZnJhbWUgPT0gTlVMTCkgewotCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJbCA9IGZyYW1lLT5kYXRhX2VuZCAtIGZyYW1lLT5kYXRhOwotCQlpZiAobGVuID4gZnJhbWUtPnY0bDJfYnVmLmxlbmd0aCAtIGwpCi0JCQlsZW4gPSBmcmFtZS0+djRsMl9idWYubGVuZ3RoIC0gbDsKKwkJbCA9IGdzcGNhX2Rldi0+aW1hZ2VfbGVuOworCQlzaXplID0gZ3NwY2FfZGV2LT5mcnN6OworCQlpZiAobGVuID4gc2l6ZSAtIGwpCisJCQlsZW4gPSBzaXplIC0gbDsKIAl9CiAJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBkYXRhLCBsZW4pOwogfQpAQCAtMzc0OCw3ICszNzkyLDcgQEAKIAlzZC0+YnJpZ2h0bmVzcyA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCiAJCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMzc2Niw3ICszODEwLDcgQEAKIAlzZC0+Y29udHJhc3QgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRjb250cmFzdChnc3BjYV9kZXYpOwotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMzc4NCw3ICszODI4LDcgQEAKIAlzZC0+Y29sb3JzID0gdmFsOwogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKIAkJc2V0Y29sb3JzKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMzgwMiw3ICszODQ2LDcgQEAKIAlzZC0+aGZsaXAgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRodmZsaXAoZ3NwY2FfZGV2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldGhmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTM4MjAsNyArMzg2NCw3IEBACiAJc2QtPnZmbGlwID0gdmFsOwogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKIAkJc2V0aHZmbGlwKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXR2ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0zODM4LDcgKzM4ODIsNyBAQAogCXNkLT5saWdodGZyZXEgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRsaWdodGZyZXEoZ3NwY2FfZGV2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMzg1Niw3ICszOTAwLDcgQEAKIAlzZC0+c2hhcnBuZXNzID0gdmFsOwogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKIAkJc2V0c2hhcnBuZXNzKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS93OTk2WGNmLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3c5OTZYY2YuYwppbmRleCAyZmZmZTIwLi4zOGE2ODU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3c5OTZYY2YuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3c5OTZYY2YuYwpAQCAtMzEsMTQgKzMxLDEwIEBACiAgICB0aGUgc2Vuc29yIGRyaXZlcnMgdG8gdjRsMiBzdWIgZHJpdmVycywgYW5kIHByb3Blcmx5IHNwbGl0IG9mIHRoaXMKICAgIGRyaXZlciBmcm9tIG92NTE5LmMgKi8KIAotLyogVGhlIENPTkVYX0NBTSBkZWZpbmUgZm9yIGpwZWcuaCBuZWVkcyByZW5hbWluZywgbm93IGl0cyB1c2VkIGhlcmUgdG9vICovCi0jZGVmaW5lIENPTkVYX0NBTQotI2luY2x1ZGUgImpwZWcuaCIKLQogI2RlZmluZSBXOTk2OENGX0kyQ19CVVNfREVMQVkgICAgNCAvKiBkZWxheSBpbiB1cyBmb3IgSTJDIGJpdCByL3cgb3BlcmF0aW9ucyAqLwogCi0jZGVmaW5lIFlfUVVBTlRBQkxFIChzZC0+anBlZ19oZHIgKyBKUEVHX1FUMF9PRkZTRVQpCi0jZGVmaW5lIFVWX1FVQU5UQUJMRSAoc2QtPmpwZWdfaGRyICsgSlBFR19RVDFfT0ZGU0VUKQorI2RlZmluZSBZX1FVQU5UQUJMRSAoJnNkLT5qcGVnX2hkcltKUEVHX1FUMF9PRkZTRVRdKQorI2RlZmluZSBVVl9RVUFOVEFCTEUgKCZzZC0+anBlZ19oZHJbSlBFR19RVDFfT0ZGU0VUXSkKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdzk5NjhjZl92Z2FfbW9kZVtdID0gewogCXsxNjAsIDEyMCwgVjRMMl9QSVhfRk1UX1VZVlksIFY0TDJfRklFTERfTk9ORSwKQEAgLTUwOSwxMSArNTA1LDYgQEAKIAlpZiAodzk5NjhjZl92Z2FfbW9kZVtzZC0+Z3NwY2FfZGV2LmN1cnJfbW9kZV0ucGl4ZWxmb3JtYXQgPT0KIAkgICAgVjRMMl9QSVhfRk1UX0pQRUcpIHsKIAkJLyogV2UgbWF5IGdldCBjYWxsZWQgbXVsdGlwbGUgdGltZXMgKHVzYiBpc29jIGJ3IG5lZ290aWF0LikgKi8KLQkJaWYgKCFzZC0+anBlZ19oZHIpCi0JCQlzZC0+anBlZ19oZHIgPSBrbWFsbG9jKEpQRUdfSERSX1NaLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFzZC0+anBlZ19oZHIpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQogCQlqcGVnX2RlZmluZShzZC0+anBlZ19oZHIsIHNkLT5nc3BjYV9kZXYuaGVpZ2h0LAogCQkJICAgIHNkLT5nc3BjYV9kZXYud2lkdGgsIDB4MjIpOyAvKiBKUEVHIDQyMCAqLwogCQlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOwpAQCAtNTYyLDkgKzU1Myw2IEBACiAJCXJlZ193KHNkLCAweDM5LCAweDAwMDApOyAvKiBkaXNhYmxlIEpQRUcgZW5jb2RlciAqLwogCQlyZWdfdyhzZCwgMHgxNiwgMHgwMDAwKTsgLyogc3RvcCB2aWRlbyBjYXB0dXJlICovCiAJfQotCi0Ja2ZyZWUoc2QtPmpwZWdfaGRyKTsKLQlzZC0+anBlZ19oZHIgPSBOVUxMOwogfQogCiAvKiBUaGUgdzk5NjhjZiBkb2NzIHNheSB0aGF0IGEgMCBzaXplZCBwYWNrZXQgbWVhbnMgRU9GIChhbmQgYWxzbyBTT0YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYwppbmRleCBkMDJhYTVjLi40NDczZjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jCkBAIC0yMiw3ICsyMiw2IEBACiAjZGVmaW5lIE1PRFVMRV9OQU1FICJ6YzN4eCIKIAogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgImdzcGNhLmgiCiAjaW5jbHVkZSAianBlZy5oIgogCkBAIC00MCwxNSArMzksMTYgQEAKIHN0cnVjdCBzZCB7CiAJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KIAorCXU4IGJyaWdodG5lc3M7CiAJdTggY29udHJhc3Q7CiAJdTggZ2FtbWE7CiAJdTggYXV0b2dhaW47CiAJdTggbGlnaHRmcmVxOwogCXU4IHNoYXJwbmVzczsKIAl1OCBxdWFsaXR5OwkJCS8qIGltYWdlIHF1YWxpdHkgKi8KLSNkZWZpbmUgUVVBTElUWV9NSU4gNDAKLSNkZWZpbmUgUVVBTElUWV9NQVggNjAKLSNkZWZpbmUgUVVBTElUWV9ERUYgNTAKKyNkZWZpbmUgUVVBTElUWV9NSU4gNTAKKyNkZWZpbmUgUVVBTElUWV9NQVggODAKKyNkZWZpbmUgUVVBTElUWV9ERUYgNzAKIAogCXU4IHNlbnNvcjsJCS8qIFR5cGUgb2YgaW1hZ2Ugc2Vuc29yIGNoaXAgKi8KIC8qICEhIHZhbHVlcyB1c2VkIGluIGRpZmZlcmVudCB0YWJsZXMgKi8KQEAgLTc1LDEwICs3NSwxMiBAQAogI2RlZmluZSBTRU5TT1JfTUFYIDE5CiAJdW5zaWduZWQgc2hvcnQgY2hpcF9yZXZpc2lvbjsKIAotCXU4ICpqcGVnX2hkcjsKKwl1OCBqcGVnX2hkcltKUEVHX0hEUl9TWl07CiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCitzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiBzdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwpAQCAtOTMsNiArOTUsMjAgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogCXsKIAkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiQnJpZ2h0bmVzcyIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAyNTUsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgQlJJR0hUTkVTU19ERUYgMTI4CisJCS5kZWZhdWx0X3ZhbHVlID0gQlJJR0hUTkVTU19ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRicmlnaHRuZXNzLAorCSAgICAuZ2V0ID0gc2RfZ2V0YnJpZ2h0bmVzcywKKwl9LAorCXsKKwkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0NPTlRSQVNULAogCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lICAgID0gIkNvbnRyYXN0IiwKQEAgLTEzMiw3ICsxNDgsNyBAQAogCSAgICAuc2V0ID0gc2Rfc2V0YXV0b2dhaW4sCiAJICAgIC5nZXQgPSBzZF9nZXRhdXRvZ2FpbiwKIAl9LAotI2RlZmluZSBMSUdIVEZSRVFfSURYIDMKKyNkZWZpbmUgTElHSFRGUkVRX0lEWCA0CiAJewogCSAgICB7CiAJCS5pZAkgPSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWSwKQEAgLTYwMTEsOSArNjAyNywxMiBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CiAJY29uc3QgdTggKlRnYW1tYTsKLQlpbnQgZywgaSwgaywgYWRqLCBncDsKKwlpbnQgZywgaSwgYnJpZ2h0bmVzcywgY29udHJhc3QsIGFkaiwgZ3AxLCBncDI7CiAJdTggZ3JbMTZdOwotCXN0YXRpYyBjb25zdCB1OCBkZWx0YV90YlsxNl0gPQkJLyogZGVsdGEgZm9yIGNvbnRyYXN0ICovCisJc3RhdGljIGNvbnN0IHU4IGRlbHRhX2JbMTZdID0JCS8qIGRlbHRhIGZvciBicmlnaHRuZXNzICovCisJCXsweDUwLCAweDM4LCAweDJkLCAweDI4LCAweDI0LCAweDIxLCAweDFlLCAweDFkLAorCQkgMHgxZCwgMHgxYiwgMHgxYiwgMHgxYiwgMHgxOSwgMHgxOCwgMHgxOCwgMHgxOH07CisJc3RhdGljIGNvbnN0IHU4IGRlbHRhX2NbMTZdID0JCS8qIGRlbHRhIGZvciBjb250cmFzdCAqLwogCQl7MHgyYywgMHgxYSwgMHgxMiwgMHgwYywgMHgwYSwgMHgwNiwgMHgwNiwgMHgwNiwKIAkJIDB4MDQsIDB4MDYsIDB4MDQsIDB4MDQsIDB4MDMsIDB4MDMsIDB4MDIsIDB4MDJ9OwogCXN0YXRpYyBjb25zdCB1OCBnYW1tYV90Yls2XVsxNl0gPSB7CkBAIC02MDMzLDMwICs2MDUyLDMwIEBACiAKIAlUZ2FtbWEgPSBnYW1tYV90YltzZC0+Z2FtbWEgLSAxXTsKIAotCWsgPSAoKGludCkgc2QtPmNvbnRyYXN0IC0gMTI4KTsJCS8qIC0xMjggLyAxMjggKi8KKwljb250cmFzdCA9ICgoaW50KSBzZC0+Y29udHJhc3QgLSAxMjgpOwkJLyogLTEyOCAvIDEyNyAqLworCWJyaWdodG5lc3MgPSAoKGludCkgc2QtPmJyaWdodG5lc3MgLSAxMjgpOwkvKiAtMTI4IC8gOTIgKi8KIAlhZGogPSAwOwotCWdwID0gMDsKKwlncDEgPSBncDIgPSAwOwogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCWcgPSBUZ2FtbWFbaV0gLSBkZWx0YV90YltpXSAqIGsgLyAyNTYgLSBhZGogLyAyOworCQlnID0gVGdhbW1hW2ldICsgZGVsdGFfYltpXSAqIGJyaWdodG5lc3MgLyAyNTYKKwkJCQktIGRlbHRhX2NbaV0gKiBjb250cmFzdCAvIDI1NiAtIGFkaiAvIDI7CiAJCWlmIChnID4gMHhmZikKIAkJCWcgPSAweGZmOwogCQllbHNlIGlmIChnIDwgMCkKIAkJCWcgPSAwOwogCQlyZWdfdyhkZXYsIGcsIDB4MDEyMCArIGkpOwkvKiBnYW1tYSAqLwotCQlpZiAoayA+IDApCisJCWlmIChjb250cmFzdCA+IDApCiAJCQlhZGotLTsKLQkJZWxzZQorCQllbHNlIGlmIChjb250cmFzdCA8IDApCiAJCQlhZGorKzsKLQotCQlpZiAoaSAhPSAwKSB7Ci0JCQlpZiAoZ3AgPT0gMCkKLQkJCQlncltpIC0gMV0gPSAwOwotCQkJZWxzZQotCQkJCWdyW2kgLSAxXSA9IGcgLSBncDsKLQkJfQotCQlncCA9IGc7CisJCWlmIChpID4gMSkKKwkJCWdyW2kgLSAxXSA9IChnIC0gZ3AyKSAvIDI7CisJCWVsc2UgaWYgKGkgIT0gMCkKKwkJCWdyWzBdID0gZ3AxID09IDAgPyAwIDogKGcgLSBncDEpOworCQlncDIgPSBncDE7CisJCWdwMSA9IGc7CiAJfQotCWdyWzE1XSA9IGdyWzE0XSAvIDI7CisJZ3JbMTVdID0gKDB4ZmYgLSBncDIpIC8gMjsKIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKIAkJcmVnX3coZGV2LCBncltpXSwgMHgwMTMwICsgaSk7CS8qIGdyYWRpZW50ICovCiB9CkBAIC02NzQ0LDYgKzY3NjMsNyBAQAogCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoYnJva2VuX3ZnYV9tb2RlKTsKIAkJYnJlYWs7CiAJfQorCXNkLT5icmlnaHRuZXNzID0gQlJJR0hUTkVTU19ERUY7CiAJc2QtPmNvbnRyYXN0ID0gQ09OVFJBU1RfREVGOwogCXNkLT5nYW1tYSA9IGdhbW1hW3NkLT5zZW5zb3JdOwogCXNkLT5hdXRvZ2FpbiA9IEFVVE9HQUlOX0RFRjsKQEAgLTY3OTgsOSArNjgxOCw2IEBACiAJfTsKIAogCS8qIGNyZWF0ZSB0aGUgSlBFRyBoZWFkZXIgKi8KLQlzZC0+anBlZ19oZHIgPSBrbWFsbG9jKEpQRUdfSERSX1NaLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNkLT5qcGVnX2hkcikKLQkJcmV0dXJuIC1FTk9NRU07CiAJanBlZ19kZWZpbmUoc2QtPmpwZWdfaGRyLCBnc3BjYV9kZXYtPmhlaWdodCwgZ3NwY2FfZGV2LT53aWR0aCwKIAkJCTB4MjEpOwkJLyogSlBFRyA0MjIgKi8KIAlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOwpAQCAtNjkxOCwxMCArNjkzNSw2IEBACiAJCXJlZ193KGRldiwgMHgwMCwgMHgwMDA3KTsJLyogKGZyb20gd2luIHRyYWNlcykgKi8KIAkJcmVnX3coZGV2LCAweDAyLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElORyk7CiAJCWJyZWFrOwotCWNhc2UgU0VOU09SX1BBUzIwMkI6Ci0JCXJlZ193KGRldiwgMHgzMiwgMHgwMDA3KTsJLyogKGZyb20gd2luIHRyYWNlcykgKi8KLQkJcmVnX3coZGV2LCAweDAyLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElORyk7Ci0JCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTY5MzEsNyArNjk0NCw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0Ja2ZyZWUoc2QtPmpwZWdfaGRyKTsKIAlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkKIAkJcmV0dXJuOwogCXNlbmRfdW5rbm93bihnc3BjYV9kZXYtPmRldiwgc2QtPnNlbnNvcik7CkBAIC02OTYyLDYgKzY5NzQsMjQgQEAKIAlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGRhdGEsIGxlbik7CiB9CiAKK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+YnJpZ2h0bmVzcyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5icmlnaHRuZXNzOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTcxNjMsOSArNzE5Myw3IEBACiAJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4YWEpfSwKIAl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDhhYyl9LAogCXtVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwOGFkKX0sCi0jaWYgIWRlZmluZWQgQ09ORklHX1VTQl9aQzAzMDEgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9aQzAzMDFfTU9EVUxFCiAJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4YWUpfSwKLSNlbmRpZgogCXtVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwOGFmKX0sCiAJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4YjkpfSwKIAl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDhkNyl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYwppbmRleCA4MzBkNDdiLi4wY2FlNWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYwpAQCAtMjg2LDYgKzI4Niw4IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCisJZGV2LT53b3JrcXVldWUgPSAwOworCiAJLyogcmVnaXN0ZXIgdjRsMl9kZXZpY2UgZWFybHkgc28gaXQgY2FuIGJlIHVzZWQgZm9yIHByaW50a3MgKi8KIAlpZiAodjRsMl9kZXZpY2VfcmVnaXN0ZXIoJmludGVyZmFjZS0+ZGV2LCAmZGV2LT52NGwyX2RldikpIHsKIAkJZXJyKCJ2NGwyX2RldmljZV9yZWdpc3RlciBmYWlsZWQiKTsKQEAgLTM4MCw2ICszODIsOSBAQAogCiBlcnJvcjoKIAlpZiAoZGV2KSB7CisJCS8qIERlc3Ryb3kgc2luZ2xlIHRocmVhZCAqLworCQlpZiAoZGV2LT53b3JrcXVldWUpCisJCQlkZXN0cm95X3dvcmtxdWV1ZShkZXYtPndvcmtxdWV1ZSk7CiAJCS8qIHRoaXMgZnJlZXMgYWxsb2NhdGVkIG1lbW9yeSAqLwogCQloZHB2cl9kZWxldGUoZGV2KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLXZpZGVvLmMKaW5kZXggYzMzOGYzZi4uNDg2M2EyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItdmlkZW8uYwpAQCAtMzk0LDcgKzM5NCw3IEBACiAKIHN0YXRpYyBpbnQgaGRwdnJfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgaGRwdnJfZmgJCSpmaCAgPSAoc3RydWN0IGhkcHZyX2ZoICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZHB2cl9maAkJKmZoICA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgaGRwdnJfZGV2aWNlCSpkZXYgPSBmaC0+ZGV2OwogCiAJaWYgKCFkZXYpCkBAIC01MTgsNyArNTE4LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaGRwdnJfcG9sbChzdHJ1Y3QgZmlsZSAqZmlscCwgcG9sbF90YWJsZSAqd2FpdCkKIHsKIAlzdHJ1Y3QgaGRwdnJfYnVmZmVyICpidWYgPSBOVUxMOwotCXN0cnVjdCBoZHB2cl9maCAqZmggPSAoc3RydWN0IGhkcHZyX2ZoICopZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZHB2cl9maCAqZmggPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gZmgtPmRldjsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKaW5kZXggMjlkNDM5Ny4uMjdhZThiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAotI2luY2x1ZGUgPG1lZGlhL2lyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL2lyLWNvcmUuaD4KICNpbmNsdWRlIDxtZWRpYS9pci1rYmQtaTJjLmg+CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0yNzIsMTEgKzI3Miw4IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoMCA9PSByYykgewotCQlpcl9pbnB1dF9ub2tleShpci0+aW5wdXQsICZpci0+aXIpOwotCX0gZWxzZSB7Ci0JCWlyX2lucHV0X2tleWRvd24oaXItPmlucHV0LCAmaXItPmlyLCBpcl9rZXkpOwotCX0KKwlpZiAocmMpCisJCWlyX2tleWRvd24oaXItPmlucHV0LCBpcl9rZXksIDApOwogfQogCiBzdGF0aWMgdm9pZCBpcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTQzOSwxMCArNDM2LDcgQEAKIAkJIGRldl9uYW1lKCZjbGllbnQtPmRldikpOwogCiAJLyogaW5pdCArIHJlZ2lzdGVyIGlucHV0IGRldmljZSAqLwotCWVyciA9IGlyX2lucHV0X2luaXQoaW5wdXRfZGV2LCAmaXItPmlyLCBpcl90eXBlKTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0KKwlpci0+aXJfdHlwZSA9IGlyX3R5cGU7CiAJaW5wdXRfZGV2LT5pZC5idXN0eXBlID0gQlVTX0kyQzsKIAlpbnB1dF9kZXYtPm5hbWUgICAgICAgPSBpci0+bmFtZTsKIAlpbnB1dF9kZXYtPnBoeXMgICAgICAgPSBpci0+cGh5czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKaW5kZXggMWI3OTQ3NS4uOTBkYWE2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKQEAgLTEzMCw2ICsxMzAsOSBAQAogc3RhdGljIGludCBpdnR2X3BjaV9sYXRlbmN5ID0gMTsKIAogaW50IGl2dHZfZGVidWc7CisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworaW50IGl2dHZfZndfZGVidWc7CisjZW5kaWYKIAogc3RhdGljIGludCB0dW5lcnR5cGUgPSAtMTsKIHN0YXRpYyBpbnQgbmV3aTJjID0gLTE7CkBAIC0xNDEsNiArMTQ0LDkgQEAKIG1vZHVsZV9wYXJhbV9zdHJpbmcoc2VjYW0sIHNlY2FtLCBzaXplb2Yoc2VjYW0pLCAwNjQ0KTsKIG1vZHVsZV9wYXJhbV9zdHJpbmcobnRzYywgbnRzYywgc2l6ZW9mKG50c2MpLCAwNjQ0KTsKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZyxpdnR2X2RlYnVnLCBpbnQsIDA2NDQpOworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKK21vZHVsZV9wYXJhbV9uYW1lZChmd19kZWJ1ZywgaXZ0dl9md19kZWJ1ZywgaW50LCAwNjQ0KTsKKyNlbmRpZgogbW9kdWxlX3BhcmFtKGl2dHZfcGNpX2xhdGVuY3ksIGludCwgMDY0NCk7CiBtb2R1bGVfcGFyYW0oaXZ0dl95dXZfbW9kZSwgaW50LCAwNjQ0KTsKIG1vZHVsZV9wYXJhbShpdnR2X3l1dl90aHJlc2hvbGQsIGludCwgMDY0NCk7CkBAIC0yMTcsNiArMjIzLDEwIEBACiAJCSAiXHRcdFx0IDI1Ni8weDAxMDA6IHl1dlxuIgogCQkgIlx0XHRcdCA1MTIvMHgwMjAwOiBpMmNcbiIKIAkJICJcdFx0XHQxMDI0LzB4MDQwMDogaGlnaCB2b2x1bWVcbiIpOworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKK01PRFVMRV9QQVJNX0RFU0MoZndfZGVidWcsCisJCSAiRW5hYmxlIGNvZGUgZm9yIGRlYnVnZ2luZyBmaXJtd2FyZSBwcm9ibGVtcy4gIERlZmF1bHQ6IDBcbiIpOworI2VuZGlmCiBNT0RVTEVfUEFSTV9ERVNDKGl2dHZfcGNpX2xhdGVuY3ksCiAJCSAiQ2hhbmdlIHRoZSBQQ0kgbGF0ZW5jeSB0byA2NCBpZiBsb3dlcjogMCA9IE5vLCAxID0gWWVzLFxuIgogCQkgIlx0XHRcdERlZmF1bHQ6IFllcyIpOwpAQCAtMTQyNSwxMiArMTQzNSwxNiBAQAogRVhQT1JUX1NZTUJPTChpdnR2X3ZhcGlfcmVzdWx0KTsKIEVYUE9SVF9TWU1CT0woaXZ0dl9jbGVhcl9pcnFfbWFzayk7CiBFWFBPUlRfU1lNQk9MKGl2dHZfZGVidWcpOworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKK0VYUE9SVF9TWU1CT0woaXZ0dl9md19kZWJ1Zyk7CisjZW5kaWYKIEVYUE9SVF9TWU1CT0woaXZ0dl9yZXNldF9pcl9ncGlvKTsKIEVYUE9SVF9TWU1CT0woaXZ0dl91ZG1hX3NldHVwKTsKIEVYUE9SVF9TWU1CT0woaXZ0dl91ZG1hX3VubWFwKTsKIEVYUE9SVF9TWU1CT0woaXZ0dl91ZG1hX2FsbG9jKTsKIEVYUE9SVF9TWU1CT0woaXZ0dl91ZG1hX3ByZXBhcmUpOwogRVhQT1JUX1NZTUJPTChpdnR2X2luaXRfb25fZmlyc3Rfb3Blbik7CitFWFBPUlRfU1lNQk9MKGl2dHZfZmlybXdhcmVfY2hlY2spOwogCiBtb2R1bGVfaW5pdChtb2R1bGVfc3RhcnQpOwogbW9kdWxlX2V4aXQobW9kdWxlX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuaAppbmRleCA1YjQ1ZmQyLi5iZDA4NGRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuaApAQCAtMTIyLDYgKzEyMiw5IEBACiAKIC8qIGRlYnVnZ2luZyAqLwogZXh0ZXJuIGludCBpdnR2X2RlYnVnOworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKK2V4dGVybiBpbnQgaXZ0dl9md19kZWJ1ZzsKKyNlbmRpZgogCiAjZGVmaW5lIElWVFZfREJHRkxHX1dBUk4gICAgKDEgPDwgMCkKICNkZWZpbmUgSVZUVl9EQkdGTEdfSU5GTyAgICAoMSA8PCAxKQpAQCAtNzM0LDYgKzczNyw3IEBACiAJc3RydWN0IHY0bDJfcmVjdCBvc2RfcmVjdDsgICAgICAvKiBjdXJyZW50IE9TRCBwb3NpdGlvbiBhbmQgc2l6ZSAqLwogCXN0cnVjdCB2NGwyX3JlY3QgbWFpbl9yZWN0OyAgICAgLyogY3VycmVudCBNYWluIHdpbmRvdyBwb3NpdGlvbiBhbmQgc2l6ZSAqLwogCXN0cnVjdCBvc2RfaW5mbyAqb3NkX2luZm87ICAgICAgLyogaXZ0dmZiIHByaXZhdGUgT1NEIGluZm8gKi8KKwl2b2lkICgqaXZ0dmZiX3Jlc3RvcmUpKHN0cnVjdCBpdnR2ICppdHYpOyAvKiBVc2VkIGZvciBhIHdhcm0gc3RhcnQgKi8KIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGl2dHYgKnRvX2l2dHYoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpbGVvcHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpbGVvcHMuYwppbmRleCAzYzJjYzI3Li5hNmEyY2RiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlsZW9wcy5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiaXZ0di15dXYuaCIKICNpbmNsdWRlICJpdnR2LWlvY3RsLmgiCiAjaW5jbHVkZSAiaXZ0di1jYXJkcy5oIgorI2luY2x1ZGUgIml2dHYtZmlybXdhcmUuaCIKICNpbmNsdWRlIDxtZWRpYS92NGwyLWV2ZW50Lmg+CiAjaW5jbHVkZSA8bWVkaWEvc2FhNzExNS5oPgogCkBAIC01MjYsNiArNTI3LDcgQEAKIHsKIAlzdHJ1Y3QgaXZ0diAqaXR2ID0gaWQtPml0djsKIAlzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnMgPSAmaXR2LT5zdHJlYW1zW2lkLT50eXBlXTsKKwlpbnQgcmM7CiAKIAlpZiAoYXRvbWljX3JlYWQoJml0di0+ZGVjb2RpbmcpID09IDApIHsKIAkJaWYgKGl2dHZfY2xhaW1fc3RyZWFtKGlkLCBzLT50eXBlKSkgewpAQCAtNTMzLDcgKzUzNSwxMyBAQAogCQkJSVZUVl9ERUJVR19XQVJOKCJzdGFydCBkZWNvZGUsIHN0cmVhbSBhbHJlYWR5IGNsYWltZWRcbiIpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQotCQlpdnR2X3N0YXJ0X3Y0bDJfZGVjb2RlX3N0cmVhbShzLCAwKTsKKwkJcmMgPSBpdnR2X3N0YXJ0X3Y0bDJfZGVjb2RlX3N0cmVhbShzLCAwKTsKKwkJaWYgKHJjIDwgMCkgeworCQkJaWYgKHJjID09IC1FQUdBSU4pCisJCQkJcmMgPSBpdnR2X3N0YXJ0X3Y0bDJfZGVjb2RlX3N0cmVhbShzLCAwKTsKKwkJCWlmIChyYyA8IDApCisJCQkJcmV0dXJuIHJjOworCQl9CiAJfQogCWlmIChzLT50eXBlID09IElWVFZfREVDX1NUUkVBTV9UWVBFX01QRykKIAkJcmV0dXJuIGl2dHZfc2V0X3NwZWVkKGl0diwgc3BlZWQpOwpAQCAtOTEyLDEyICs5MjAsMzIgQEAKIAogc3RhdGljIGludCBpdnR2X3NlcmlhbGl6ZWRfb3BlbihzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnMsIHN0cnVjdCBmaWxlICpmaWxwKQogeworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxwKTsKKyNlbmRpZgogCXN0cnVjdCBpdnR2ICppdHYgPSBzLT5pdHY7CiAJc3RydWN0IGl2dHZfb3Blbl9pZCAqaXRlbTsKIAlpbnQgcmVzID0gMDsKIAogCUlWVFZfREVCVUdfRklMRSgib3BlbiAlc1xuIiwgcy0+bmFtZSk7CiAKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLyogVW5sZXNzIGl2dHZfZndfZGVidWcgaXMgc2V0LCBlcnJvciBvdXQgaWYgZmlybXdhcmUgZGVhZC4gKi8KKwlpZiAoaXZ0dl9md19kZWJ1ZykgeworCQlJVlRWX1dBUk4oIk9wZW5pbmcgJXMgd2l0aCBkZWFkIGZpcm13YXJlIGxvY2tvdXQgZGlzYWJsZWRcbiIsCisJCQkgIHZpZGVvX2RldmljZV9ub2RlX25hbWUodmRldikpOworCQlJVlRWX1dBUk4oIlNlbGVjdGVkIGZpcm13YXJlIGVycm9ycyB3aWxsIGJlIGlnbm9yZWRcbiIpOworCX0gZWxzZSB7CisjZWxzZQorCWlmICgxKSB7CisjZW5kaWYKKwkJcmVzID0gaXZ0dl9maXJtd2FyZV9jaGVjayhpdHYsICJpdnR2X3NlcmlhbGl6ZWRfb3BlbiIpOworCQlpZiAocmVzID09IC1FQUdBSU4pCisJCQlyZXMgPSBpdnR2X2Zpcm13YXJlX2NoZWNrKGl0diwgIml2dHZfc2VyaWFsaXplZF9vcGVuIik7CisJCWlmIChyZXMgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJfQorCiAJaWYgKHMtPnR5cGUgPT0gSVZUVl9ERUNfU1RSRUFNX1RZUEVfTVBHICYmCiAJCXRlc3RfYml0KElWVFZfRl9TX0NMQUlNRUQsICZpdHYtPnN0cmVhbXNbSVZUVl9ERUNfU1RSRUFNX1RZUEVfWVVWXS5zX2ZsYWdzKSkKIAkJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jCmluZGV4IGE3MWU4YmEuLmQ4YmYyYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlybXdhcmUuYwpAQCAtMjMsNyArMjMsMTAgQEAKICNpbmNsdWRlICJpdnR2LW1haWxib3guaCIKICNpbmNsdWRlICJpdnR2LWZpcm13YXJlLmgiCiAjaW5jbHVkZSAiaXZ0di15dXYuaCIKKyNpbmNsdWRlICJpdnR2LWlvY3RsLmgiCisjaW5jbHVkZSAiaXZ0di1jYXJkcy5oIgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bWVkaWEvc2FhNzEyNy5oPgogCiAjZGVmaW5lIElWVFZfTUFTS19TUFVfRU5BQkxFIAkJMHhGRkZGRkZGRQogI2RlZmluZSBJVlRWX01BU0tfVlBVX0VOQUJMRTE1IAkJMHhGRkZGRkZGNgpAQCAtMjcxLDMgKzI3NCwxMjIgQEAKIAl9CiAJaXZ0dl92YXBpKGl0diwgQ1gyMzQxWF9ERUNfU1RPUF9QTEFZQkFDSywgNCwgMCwgMCwgMCwgMSk7CiB9CisKKy8qIFRyeSB0byByZXN0YXJ0IHRoZSBjYXJkICYgcmVzdG9yZSBwcmV2aW91cyBzZXR0aW5ncyAqLworaW50IGl2dHZfZmlybXdhcmVfcmVzdGFydChzdHJ1Y3QgaXZ0diAqaXR2KQoreworCWludCByYyA9IDA7CisJdjRsMl9zdGRfaWQgc3RkOworCXN0cnVjdCBpdnR2X29wZW5faWQgZmg7CisJZmguaXR2ID0gaXR2OworCisJaWYgKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQpCisJCS8qIERpc3BsYXkgdGVzdCBpbWFnZSBkdXJpbmcgcmVzdGFydCAqLworCQlpdnR2X2NhbGxfaHcoaXR2LCBJVlRWX0hXX1NBQTcxMjcsIHZpZGVvLCBzX3JvdXRpbmcsCisJCSAgICBTQUE3MTI3X0lOUFVUX1RZUEVfVEVTVF9JTUFHRSwKKwkJICAgIGl0di0+Y2FyZC0+dmlkZW9fb3V0cHV0c1tpdHYtPmFjdGl2ZV9vdXRwdXRdLnZpZGVvX291dHB1dCwKKwkJICAgIDApOworCisJbXV0ZXhfbG9jaygmaXR2LT51ZG1hLmxvY2spOworCisJcmMgPSBpdnR2X2Zpcm13YXJlX2luaXQoaXR2KTsKKwlpZiAocmMpIHsKKwkJbXV0ZXhfdW5sb2NrKCZpdHYtPnVkbWEubG9jayk7CisJCXJldHVybiByYzsKKwl9CisKKwkvKiBBbGxvdyBzZXR0aW5ncyB0byByZWxvYWQgKi8KKwlpdnR2X21haWxib3hfY2FjaGVfaW52YWxpZGF0ZShpdHYpOworCisJLyogUmVzdG9yZSB2aWRlbyBzdGFuZGFyZCAqLworCXN0ZCA9IGl0di0+c3RkOworCWl0di0+c3RkID0gMDsKKwlpdnR2X3Nfc3RkKE5VTEwsICZmaCwgJnN0ZCk7CisKKwlpZiAoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCkgeworCQlpdnR2X2luaXRfbXBlZ19kZWNvZGVyKGl0dik7CisKKwkJLyogUmVzdG9yZSBmcmFtZWJ1ZmZlciBpZiBhY3RpdmUgKi8KKwkJaWYgKGl0di0+aXZ0dmZiX3Jlc3RvcmUpCisJCQlpdHYtPml2dHZmYl9yZXN0b3JlKGl0dik7CisKKwkJLyogUmVzdG9yZSBhbHBoYSBzZXR0aW5ncyAqLworCQlpdnR2X3NldF9vc2RfYWxwaGEoaXR2KTsKKworCQkvKiBSZXN0b3JlIG5vcm1hbCBvdXRwdXQgKi8KKwkJaXZ0dl9jYWxsX2h3KGl0diwgSVZUVl9IV19TQUE3MTI3LCB2aWRlbywgc19yb3V0aW5nLAorCQkgICAgU0FBNzEyN19JTlBVVF9UWVBFX05PUk1BTCwKKwkJICAgIGl0di0+Y2FyZC0+dmlkZW9fb3V0cHV0c1tpdHYtPmFjdGl2ZV9vdXRwdXRdLnZpZGVvX291dHB1dCwKKwkJICAgIDApOworCX0KKworCW11dGV4X3VubG9jaygmaXR2LT51ZG1hLmxvY2spOworCXJldHVybiByYzsKK30KKworLyogQ2hlY2sgZmlybXdhcmUgcnVubmluZyBzdGF0ZS4gVGhlIGNoZWNrcyBmYWxsIHRocm91Z2gKKyAgIGFsbG93aW5nIG11bHRpcGxlIGZhaWx1cmVzIHRvIGJlIGxvZ2dlZC4gKi8KK2ludCBpdnR2X2Zpcm13YXJlX2NoZWNrKHN0cnVjdCBpdnR2ICppdHYsIGNoYXIgKndoZXJlKQoreworCWludCByZXMgPSAwOworCisJLyogQ2hlY2sgZW5jb2RlciBpcyBzdGlsbCBydW5uaW5nICovCisJaWYgKGl2dHZfdmFwaShpdHYsIENYMjM0MVhfRU5DX1BJTkdfRlcsIDApIDwgMCkgeworCQlJVlRWX1dBUk4oIkVuY29kZXIgaGFzIGRpZWQgOiAlc1xuIiwgd2hlcmUpOworCQlyZXMgPSAtMTsKKwl9CisKKwkvKiBBbHNvIGNoZWNrIGF1ZGlvLiBPbmx5IGNoZWNrIGlmIG5vdCBpbiB1c2UgJiBlbmNvZGVyIGlzIG9rYXkgKi8KKwlpZiAoIXJlcyAmJiAhYXRvbWljX3JlYWQoJml0di0+Y2FwdHVyaW5nKSAmJgorCSAgICAoIWF0b21pY19yZWFkKCZpdHYtPmRlY29kaW5nKSB8fAorCSAgICAgKGF0b21pY19yZWFkKCZpdHYtPmRlY29kaW5nKSA8IDIgJiYgdGVzdF9iaXQoSVZUVl9GX0lfREVDX1lVViwKKwkJCQkJCQkgICAgICZpdHYtPmlfZmxhZ3MpKSkpIHsKKworCQlpZiAoaXZ0dl92YXBpKGl0diwgQ1gyMzQxWF9FTkNfTUlTQywgMSwgMTIpIDwgMCkgeworCQkJSVZUVl9XQVJOKCJBdWRpbyBoYXMgZGllZCAoRW5jb2RlciBPSykgOiAlc1xuIiwgd2hlcmUpOworCQkJcmVzID0gLTI7CisJCX0KKwl9CisKKwlpZiAoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCkgeworCQkvKiBTZWNvbmQgYXVkaW8gY2hlY2suIFNraXAgaWYgYXVkaW8gYWxyZWFkeSBmYWlsZWQgKi8KKwkJaWYgKHJlcyAhPSAtMiAmJiByZWFkX2RlYygweDEwMCkgIT0gcmVhZF9kZWMoMHgxMDQpKSB7CisJCQkvKiBXYWl0ICYgdHJ5IGFnYWluIHRvIGJlIGNlcnRhaW4uICovCisJCQlpdnR2X21zbGVlcF90aW1lb3V0KDE0LCAwKTsKKwkJCWlmIChyZWFkX2RlYygweDEwMCkgIT0gcmVhZF9kZWMoMHgxMDQpKSB7CisJCQkJSVZUVl9XQVJOKCJBdWRpbyBoYXMgZGllZCAoRGVjb2RlcikgOiAlc1xuIiwKKwkJCQkJICB3aGVyZSk7CisJCQkJcmVzID0gLTE7CisJCQl9CisJCX0KKworCQkvKiBDaGVjayBkZWNvZGVyIGlzIHN0aWxsIHJ1bm5pbmcgKi8KKwkJaWYgKGl2dHZfdmFwaShpdHYsIENYMjM0MVhfREVDX1BJTkdfRlcsIDApIDwgMCkgeworCQkJSVZUVl9XQVJOKCJEZWNvZGVyIGhhcyBkaWVkIDogJXNcbiIsIHdoZXJlKTsKKwkJCXJlcyA9IC0xOworCQl9CisJfQorCisJLyogSWYgc29tZXRoaW5nIGZhaWxlZCAmIGN1cnJlbnRseSBpZGxlLCB0cnkgdG8gcmVsb2FkICovCisJaWYgKHJlcyAmJiAhYXRvbWljX3JlYWQoJml0di0+Y2FwdHVyaW5nKSAmJgorCQkJCQkJIWF0b21pY19yZWFkKCZpdHYtPmRlY29kaW5nKSkgeworCQlJVlRWX0lORk8oIkRldGVjdGVkIGluICVzIHRoYXQgZmlybXdhcmUgaGFkIGZhaWxlZCAtICIKKwkJCSAgIlJlbG9hZGluZ1xuIiwgd2hlcmUpOworCQlyZXMgPSBpdnR2X2Zpcm13YXJlX3Jlc3RhcnQoaXR2KTsKKwkJLyoKKwkJICogRXZlbiBpZiByZXN0YXJ0ZWQgb2ssIHN0aWxsIHNpZ25hbCBhIHByb2JsZW0gaGFkIG9jY3VyZWQuCisJCSAqIFRoZSBjYWxsZXIgY2FuIGNvbWUgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uIGFnYWluIHRvIGNoZWNrCisJCSAqIGlmIHRoaW5ncyBhcmUgcmVhbGx5IG9rIGFmdGVyIHRoZSByZXN0YXJ0LgorCQkgKi8KKwkJaWYgKCFyZXMpIHsKKwkJCUlWVFZfSU5GTygiRmlybXdhcmUgcmVzdGFydCBva2F5XG4iKTsKKwkJCXJlcyA9IC1FQUdBSU47CisJCX0gZWxzZSB7CisJCQlJVlRWX0lORk8oIkZpcm13YXJlIHJlc3RhcnQgZmFpbGVkXG4iKTsKKwkJfQorCX0gZWxzZSBpZiAocmVzKSB7CisJCXJlcyA9IC1FSU87CisJfQorCisJcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5oCmluZGV4IDA0MWJhOTQuLjUyYmI0ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlybXdhcmUuaApAQCAtMjYsNSArMjYsNiBAQAogdm9pZCBpdnR2X2Zpcm13YXJlX3ZlcnNpb25zKHN0cnVjdCBpdnR2ICppdHYpOwogdm9pZCBpdnR2X2hhbHRfZmlybXdhcmUoc3RydWN0IGl2dHYgKml0dik7CiB2b2lkIGl2dHZfaW5pdF9tcGVnX2RlY29kZXIoc3RydWN0IGl2dHYgKml0dik7CitpbnQgaXZ0dl9maXJtd2FyZV9jaGVjayhzdHJ1Y3QgaXZ0diAqaXR2LCBjaGFyICp3aGVyZSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtbWFpbGJveC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtbWFpbGJveC5jCmluZGV4IDg0NTc3ZjYuLmUzY2U5NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LW1haWxib3guYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1tYWlsYm94LmMKQEAgLTM3NywzICszNzcsMTEgQEAKIAlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrLCBwKyspCiAJCWRhdGFbaV0gPSByZWFkbChwKTsKIH0KKworLyogV2lwZSBhcGkgY2FjaGUgKi8KK3ZvaWQgaXZ0dl9tYWlsYm94X2NhY2hlX2ludmFsaWRhdGUoc3RydWN0IGl2dHYgKml0dikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisJCWl0di0+YXBpX2NhY2hlW2ldLmxhc3RfamlmZmllcyA9IDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1tYWlsYm94LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1tYWlsYm94LmgKaW5kZXggODI0NzY2Mi4uMmM4MzRkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtbWFpbGJveC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LW1haWxib3guaApAQCAtMzAsNSArMzAsNiBAQAogaW50IGl2dHZfdmFwaV9yZXN1bHQoc3RydWN0IGl2dHYgKml0diwgdTMyIGRhdGFbQ1gyMzQxWF9NQk9YX01BWF9EQVRBXSwgaW50IGNtZCwgaW50IGFyZ3MsIC4uLik7CiBpbnQgaXZ0dl92YXBpKHN0cnVjdCBpdnR2ICppdHYsIGludCBjbWQsIGludCBhcmdzLCAuLi4pOwogaW50IGl2dHZfYXBpX2Z1bmModm9pZCAqcHJpdiwgdTMyIGNtZCwgaW50IGluLCBpbnQgb3V0LCB1MzIgZGF0YVtDWDIzNDFYX01CT1hfTUFYX0RBVEFdKTsKK3ZvaWQgaXZ0dl9tYWlsYm94X2NhY2hlX2ludmFsaWRhdGUoc3RydWN0IGl2dHYgKml0dik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jCmluZGV4IDllY2FjYWIuLjU1ZGY0MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJpdnR2LXl1di5oIgogI2luY2x1ZGUgIml2dHYtY2FyZHMuaCIKICNpbmNsdWRlICJpdnR2LXN0cmVhbXMuaCIKKyNpbmNsdWRlICJpdnR2LWZpcm13YXJlLmgiCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1ldmVudC5oPgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIGl2dHZfdjRsMl9lbmNfZm9wcyA9IHsKQEAgLTY3NCwxMiArNjc1LDE0IEBACiAJLyogRGVjb2RlciBzb21ldGltZXMgZGllcyBoZXJlLCBzbyB3YWl0IGEgbW9tZW50ICovCiAJaXZ0dl9tc2xlZXBfdGltZW91dCgxMCwgMCk7CiAKLQlyZXR1cm4gMDsKKwkvKiBLbm93biBmYWlsdXJlIHBvaW50IGZvciBmaXJtd2FyZSwgc28gY2hlY2sgKi8KKwlyZXR1cm4gaXZ0dl9maXJtd2FyZV9jaGVjayhpdHYsICJpdnR2X3NldHVwX3Y0bDJfZGVjb2RlX3N0cmVhbSIpOwogfQogCiBpbnQgaXZ0dl9zdGFydF92NGwyX2RlY29kZV9zdHJlYW0oc3RydWN0IGl2dHZfc3RyZWFtICpzLCBpbnQgZ29wX29mZnNldCkKIHsKIAlzdHJ1Y3QgaXZ0diAqaXR2ID0gcy0+aXR2OworCWludCByYzsKIAogCWlmIChzLT52ZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNjg5LDcgKzY5MiwxMSBAQAogCiAJSVZUVl9ERUJVR19JTkZPKCJTdGFydGluZyBkZWNvZGUgc3RyZWFtICVzIChnb3Bfb2Zmc2V0ICVkKVxuIiwgcy0+bmFtZSwgZ29wX29mZnNldCk7CiAKLQlpdnR2X3NldHVwX3Y0bDJfZGVjb2RlX3N0cmVhbShzKTsKKwlyYyA9IGl2dHZfc2V0dXBfdjRsMl9kZWNvZGVfc3RyZWFtKHMpOworCWlmIChyYyA8IDApIHsKKwkJY2xlYXJfYml0KElWVFZfRl9TX1NUUkVBTUlORywgJnMtPnNfZmxhZ3MpOworCQlyZXR1cm4gcmM7CisJfQogCiAJLyogc2V0IGRtYSBzaXplIHRvIDY1NTM2IGJ5dGVzICovCiAJaXZ0dl92YXBpKGl0diwgQ1gyMzQxWF9ERUNfU0VUX0RNQV9CTE9DS19TSVpFLCAxLCA2NTUzNik7CkBAIC05MTIsNiArOTE5LDkgQEAKIAljbGVhcl9iaXQoSVZUVl9GX1NfU1RSRUFNSU5HLCAmcy0+c19mbGFncyk7CiAJaXZ0dl9mbHVzaF9xdWV1ZXMocyk7CiAKKwkvKiBkZWNvZGVyIG5lZWRzIHRpbWUgdG8gc2V0dGxlICovCisJaXZ0dl9tc2xlZXBfdGltZW91dCg0MCwgMCk7CisKIAkvKiBkZWNyZW1lbnQgZGVjb2RpbmcgKi8KIAlhdG9taWNfZGVjKCZpdHYtPmRlY29kaW5nKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdmVyc2lvbi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdmVyc2lvbi5oCmluZGV4IGI1MzBkZWMuLmI2N2E0MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZlcnNpb24uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di12ZXJzaW9uLmgKQEAgLTIzLDcgKzIzLDcgQEAKICNkZWZpbmUgSVZUVl9EUklWRVJfTkFNRSAiaXZ0diIKICNkZWZpbmUgSVZUVl9EUklWRVJfVkVSU0lPTl9NQUpPUiAxCiAjZGVmaW5lIElWVFZfRFJJVkVSX1ZFUlNJT05fTUlOT1IgNAotI2RlZmluZSBJVlRWX0RSSVZFUl9WRVJTSU9OX1BBVENITEVWRUwgMQorI2RlZmluZSBJVlRWX0RSSVZFUl9WRVJTSU9OX1BBVENITEVWRUwgMgogCiAjZGVmaW5lIElWVFZfVkVSU0lPTiBfX3N0cmluZ2lmeShJVlRWX0RSSVZFUl9WRVJTSU9OX01BSk9SKSAiLiIgX19zdHJpbmdpZnkoSVZUVl9EUklWRVJfVkVSU0lPTl9NSU5PUikgIi4iIF9fc3RyaW5naWZ5KElWVFZfRFJJVkVSX1ZFUlNJT05fUEFUQ0hMRVZFTCkKICNkZWZpbmUgSVZUVl9EUklWRVJfVkVSU0lPTiBLRVJORUxfVkVSU0lPTihJVlRWX0RSSVZFUl9WRVJTSU9OX01BSk9SLElWVFZfRFJJVkVSX1ZFUlNJT05fTUlOT1IsSVZUVl9EUklWRVJfVkVSU0lPTl9QQVRDSExFVkVMKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHZmYi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHZmYi5jCmluZGV4IDlmZjM0MjUuLmJlMDNhNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2ZmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0dmZiLmMKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlICJpdnR2LWkyYy5oIgogI2luY2x1ZGUgIml2dHYtdWRtYS5oIgogI2luY2x1ZGUgIml2dHYtbWFpbGJveC5oIgorI2luY2x1ZGUgIml2dHYtZmlybXdhcmUuaCIKIAogLyogY2FyZCBwYXJhbWV0ZXJzICovCiBzdGF0aWMgaW50IGl2dHZmYl9jYXJkX2lkID0gLTE7CkBAIC0xNzgsNiArMTc5LDEyIEBACiAJc3RydWN0IGZiX2luZm8gaXZ0dmZiX2luZm87CiAJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIGl2dHZmYl9kZWZpbmVkOwogCXN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyBpdnR2ZmJfZml4OworCisJLyogVXNlZCBmb3IgYSB3YXJtIHN0YXJ0ICovCisJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIGZidmFyX2N1cjsKKwlpbnQgYmxhbmtfY3VyOworCXUzMiBwYWxldHRlX2N1clsyNTZdOworCXUzMiBwYW5fY3VyOwogfTsKIAogc3RydWN0IGl2dHZfb3NkX2Nvb3JkcyB7CkBAIC0xOTksNiArMjA2LDcgQEAKIAl1MzIgZGF0YVtDWDIzNDFYX01CT1hfTUFYX0RBVEFdOwogCWludCByYzsKIAorCWl2dHZfZmlybXdhcmVfY2hlY2soaXR2LCAiaXZ0dmZiX2dldF9mcmFtZWJ1ZmZlciIpOwogCXJjID0gaXZ0dl92YXBpX3Jlc3VsdChpdHYsIGRhdGEsIENYMjM0MVhfT1NEX0dFVF9GUkFNRUJVRkZFUiwgMCk7CiAJKmZiYmFzZSA9IGRhdGFbMF07CiAJKmZibGVuZ3RoID0gZGF0YVsxXTsKQEAgLTU4MSw4ICs1ODksMTAgQEAKIAlpdnR2X3dpbmRvdy5oZWlnaHQgPSB2YXItPnlyZXM7CiAKIAkvKiBNaW5pbXVtIG1hcmdpbiBjYW5ub3QgYmUgMCwgYXMgWCB3b24ndCBhbGxvdyBzdWNoIGEgbW9kZSAqLwotCWlmICghdmFyLT51cHBlcl9tYXJnaW4pIHZhci0+dXBwZXJfbWFyZ2luKys7Ci0JaWYgKCF2YXItPmxlZnRfbWFyZ2luKSB2YXItPmxlZnRfbWFyZ2luKys7CisJaWYgKCF2YXItPnVwcGVyX21hcmdpbikKKwkJdmFyLT51cHBlcl9tYXJnaW4rKzsKKwlpZiAoIXZhci0+bGVmdF9tYXJnaW4pCisJCXZhci0+bGVmdF9tYXJnaW4rKzsKIAlpdnR2X3dpbmRvdy50b3AgPSB2YXItPnVwcGVyX21hcmdpbiAtIDE7CiAJaXZ0dl93aW5kb3cubGVmdCA9IHZhci0+bGVmdF9tYXJnaW4gLSAxOwogCkBAIC01OTUsNiArNjA1LDkgQEAKIAkvKiBGb3JjZSB1cGRhdGUgb2YgeXV2IHJlZ2lzdGVycyAqLwogCWl0di0+eXV2X2luZm8ueXV2X2ZvcmNlZF91cGRhdGUgPSAxOwogCisJLyogS2VlcCBhIGNvcHkgb2YgdGhlc2Ugc2V0dGluZ3MgKi8KKwltZW1jcHkoJm9pLT5mYnZhcl9jdXIsIHZhciwgc2l6ZW9mKG9pLT5mYnZhcl9jdXIpKTsKKwogCUlWVFZGQl9ERUJVR19JTkZPKCJEaXNwbGF5IHNpemU6ICVkeCVkICh2aXJ0dWFsICVkeCVkKSBAICVkYnBwXG4iLAogCQkgICAgICB2YXItPnhyZXMsIHZhci0+eXJlcywKIAkJICAgICAgdmFyLT54cmVzX3ZpcnR1YWwsIHZhci0+eXJlc192aXJ0dWFsLApAQCAtODI5LDYgKzg0Miw4IEBACiAJaXR2LT55dXZfaW5mby5vc2RfeV9wYW4gPSB2YXItPnlvZmZzZXQ7CiAJLyogRm9yY2UgdXBkYXRlIG9mIHl1diByZWdpc3RlcnMgKi8KIAlpdHYtPnl1dl9pbmZvLnl1dl9mb3JjZWRfdXBkYXRlID0gMTsKKwkvKiBSZW1lbWJlciB0aGlzIHZhbHVlICovCisJaXR2LT5vc2RfaW5mby0+cGFuX2N1ciA9IG9zZF9wYW5faW5kZXg7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg0Miw2ICs4NTcsNyBAQAogCXJjID0gaXZ0dmZiX3NldF92YXIoaXR2LCAmaW5mby0+dmFyKTsKIAlpdnR2ZmJfcGFuX2Rpc3BsYXkoJmluZm8tPnZhciwgaW5mbyk7CiAJaXZ0dmZiX2dldF9maXgoaXR2LCAmaW5mby0+Zml4KTsKKwlpdnR2X2Zpcm13YXJlX2NoZWNrKGl0diwgIml2dHZmYl9zZXRfcGFyIik7CiAJcmV0dXJuIHJjOwogfQogCkBAIC04NTksNiArODc1LDcgQEAKIAlpZiAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsIDw9IDgpIHsKIAkJd3JpdGVfcmVnKHJlZ25vLCAweDAyYTMwKTsKIAkJd3JpdGVfcmVnKGNvbG9yLCAweDAyYTM0KTsKKwkJaXR2LT5vc2RfaW5mby0+cGFsZXR0ZV9jdXJbcmVnbm9dID0gY29sb3I7CiAJCXJldHVybiAwOwogCX0KIAlpZiAocmVnbm8gPj0gMTYpCkBAIC05MTEsNiArOTI4LDcgQEAKIAkJaXZ0dl92YXBpKGl0diwgQ1gyMzQxWF9PU0RfU0VUX1NUQVRFLCAxLCAwKTsKIAkJYnJlYWs7CiAJfQorCWl0di0+b3NkX2luZm8tPmJsYW5rX2N1ciA9IGJsYW5rX21vZGU7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkyOSw2ICs5NDcsMjEgQEAKIAkuZmJfYmxhbmsgICAgICAgPSBpdnR2ZmJfYmxhbmssCiB9OwogCisvKiBSZXN0b3JlIGhhcmR3YXJlIGFmdGVyIGZpcm13YXJlIHJlc3RhcnQgKi8KK3N0YXRpYyB2b2lkIGl2dHZmYl9yZXN0b3JlKHN0cnVjdCBpdnR2ICppdHYpCit7CisJc3RydWN0IG9zZF9pbmZvICpvaSA9IGl0di0+b3NkX2luZm87CisJaW50IGk7CisKKwlpdnR2ZmJfc2V0X3ZhcihpdHYsICZvaS0+ZmJ2YXJfY3VyKTsKKwlpdnR2ZmJfYmxhbmsob2ktPmJsYW5rX2N1ciwgJm9pLT5pdnR2ZmJfaW5mbyk7CisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCXdyaXRlX3JlZyhpLCAweDAyYTMwKTsKKwkJd3JpdGVfcmVnKG9pLT5wYWxldHRlX2N1cltpXSwgMHgwMmEzNCk7CisJfQorCXdyaXRlX3JlZyhvaS0+cGFuX2N1ciwgMHgwMmEwYyk7Cit9CisKIC8qIEluaXRpYWxpemF0aW9uICovCiAKIApAQCAtMTE5Miw2ICsxMjI1LDkgQEAKIAkvKiBFbmFibGUgdGhlIG9zZCAqLwogCWl2dHZmYl9ibGFuayhGQl9CTEFOS19VTkJMQU5LLCAmaXR2LT5vc2RfaW5mby0+aXZ0dmZiX2luZm8pOwogCisJLyogRW5hYmxlIHJlc3RhcnQgKi8KKwlpdHYtPml2dHZmYl9yZXN0b3JlID0gaXZ0dmZiX3Jlc3RvcmU7CisKIAkvKiBBbGxvY2F0ZSBETUEgKi8KIAlpdnR2X3VkbWFfYWxsb2MoaXR2KTsKIAlyZXR1cm4gMDsKQEAgLTEyMDMsNyArMTIzOSw3IEBACiAJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBpdnR2ICppdHYgPSBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBpdnR2LCB2NGwyX2Rldik7CiAKLQlpZiAoaXR2ICYmIChpdHYtPnY0bDJfY2FwICYgVjRMMl9DQVBfVklERU9fT1VUUFVUKSkgeworCWlmIChpdHYtPnY0bDJfY2FwICYgVjRMMl9DQVBfVklERU9fT1VUUFVUKSB7CiAJCWlmIChpdnR2ZmJfaW5pdF9jYXJkKGl0dikgPT0gMCkgewogCQkJSVZUVkZCX0lORk8oIkZyYW1lYnVmZmVyIHJlZ2lzdGVyZWQgb24gJXNcbiIsCiAJCQkJCWl0di0+djRsMl9kZXYubmFtZSk7CkBAIC0xMjE5LDEzICsxMjU1LDE0IEBACiAJc3RydWN0IGl2dHYgKml0diA9IGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IGl2dHYsIHY0bDJfZGV2KTsKIAlzdHJ1Y3Qgb3NkX2luZm8gKm9pID0gaXR2LT5vc2RfaW5mbzsKIAotCWlmIChpdHYgJiYgKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQpKSB7CisJaWYgKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQpIHsKIAkJaWYgKHVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJml0di0+b3NkX2luZm8tPml2dHZmYl9pbmZvKSkgewogCQkJSVZUVkZCX1dBUk4oIkZyYW1lYnVmZmVyICVkIGlzIGluIHVzZSwgY2Fubm90IHVubG9hZFxuIiwKIAkJCQkgICAgICAgaXR2LT5pbnN0YW5jZSk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlJVlRWRkJfSU5GTygiVW5yZWdpc3RlciBmcmFtZWJ1ZmZlciAlZFxuIiwgaXR2LT5pbnN0YW5jZSk7CisJCWl0di0+aXZ0dmZiX3Jlc3RvcmUgPSBOVUxMOwogCQlpdnR2ZmJfYmxhbmsoRkJfQkxBTktfVlNZTkNfU1VTUEVORCwgJm9pLT5pdnR2ZmJfaW5mbyk7CiAJCWl2dHZmYl9yZWxlYXNlX2J1ZmZlcnMoaXR2KTsKIAkJaXR2LT5vc2RfdmlkZW9fcGJhc2UgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tZW0ybWVtX3Rlc3RkZXYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWVtMm1lbV90ZXN0ZGV2LmMKaW5kZXggNTU0ZWFmMS4uNDUyNTMzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tZW0ybWVtX3Rlc3RkZXYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21lbTJtZW1fdGVzdGRldi5jCkBAIC05MDMsMTQgKzkwMywxNCBAQAogc3RhdGljIHVuc2lnbmVkIGludCBtMm10ZXN0X3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKIHsKLQlzdHJ1Y3QgbTJtdGVzdF9jdHggKmN0eCA9IChzdHJ1Y3QgbTJtdGVzdF9jdHggKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG0ybXRlc3RfY3R4ICpjdHggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKIAlyZXR1cm4gdjRsMl9tMm1fcG9sbChmaWxlLCBjdHgtPm0ybV9jdHgsIHdhaXQpOwogfQogCiBzdGF0aWMgaW50IG0ybXRlc3RfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7Ci0Jc3RydWN0IG0ybXRlc3RfY3R4ICpjdHggPSAoc3RydWN0IG0ybXRlc3RfY3R4ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtMm10ZXN0X2N0eCAqY3R4ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCiAJcmV0dXJuIHY0bDJfbTJtX21tYXAoZmlsZSwgY3R4LT5tMm1fY3R4LCB2bWEpOwogfQpAQCAtOTg4LDYgKzk4OCw5IEBACiAJCWdvdG8gZXJyX20ybTsKIAl9CiAKKwlxX2RhdGFbVjRMMl9NMk1fU1JDXS5mbXQgPSAmZm9ybWF0c1swXTsKKwlxX2RhdGFbVjRMMl9NMk1fRFNUXS5mbXQgPSAmZm9ybWF0c1swXTsKKwogCXJldHVybiAwOwogCiBlcnJfbTJtOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMTExLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0xMTEuYwppbmRleCBmYmQwZmM3Li4zMWNjM2QwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0xMTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0xMTEuYwpAQCAtMTQzLDEwICsxNDMsMTAgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtdDltMTExX2RhdGFmbXQgbXQ5bTExMV9jb2xvdXJfZm10c1tdID0gewotCXtWNEwyX01CVVNfRk1UX1lVWVY4XzJYOF9MRSwgVjRMMl9DT0xPUlNQQUNFX0pQRUd9LAotCXtWNEwyX01CVVNfRk1UX1lWWVU4XzJYOF9MRSwgVjRMMl9DT0xPUlNQQUNFX0pQRUd9LAotCXtWNEwyX01CVVNfRk1UX1lVWVY4XzJYOF9CRSwgVjRMMl9DT0xPUlNQQUNFX0pQRUd9LAotCXtWNEwyX01CVVNfRk1UX1lWWVU4XzJYOF9CRSwgVjRMMl9DT0xPUlNQQUNFX0pQRUd9LAorCXtWNEwyX01CVVNfRk1UX1lVWVY4XzJYOCwgVjRMMl9DT0xPUlNQQUNFX0pQRUd9LAorCXtWNEwyX01CVVNfRk1UX1lWWVU4XzJYOCwgVjRMMl9DT0xPUlNQQUNFX0pQRUd9LAorCXtWNEwyX01CVVNfRk1UX1VZVlk4XzJYOCwgVjRMMl9DT0xPUlNQQUNFX0pQRUd9LAorCXtWNEwyX01CVVNfRk1UX1ZZVVk4XzJYOCwgVjRMMl9DT0xPUlNQQUNFX0pQRUd9LAogCXtWNEwyX01CVVNfRk1UX1JHQjU1NV8yWDhfUEFESElfTEUsIFY0TDJfQ09MT1JTUEFDRV9TUkdCfSwKIAl7VjRMMl9NQlVTX0ZNVF9SR0I1NjVfMlg4X0xFLCBWNEwyX0NPTE9SU1BBQ0VfU1JHQn0sCiAJe1Y0TDJfTUJVU19GTVRfU0JHR1I4XzFYOCwgVjRMMl9DT0xPUlNQQUNFX1NSR0J9LApAQCAtNTA1LDIyICs1MDUsMjIgQEAKIAljYXNlIFY0TDJfTUJVU19GTVRfUkdCNTY1XzJYOF9MRToKIAkJcmV0ID0gbXQ5bTExMV9zZXRmbXRfcmdiNTY1KGNsaWVudCk7CiAJCWJyZWFrOwotCWNhc2UgVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDhfQkU6CisJY2FzZSBWNEwyX01CVVNfRk1UX1VZVlk4XzJYODoKIAkJbXQ5bTExMS0+c3dhcF95dXZfeV9jaHJvbWFzID0gMDsKIAkJbXQ5bTExMS0+c3dhcF95dXZfY2JfY3IgPSAwOwogCQlyZXQgPSBtdDltMTExX3NldGZtdF95dXYoY2xpZW50KTsKIAkJYnJlYWs7Ci0JY2FzZSBWNEwyX01CVVNfRk1UX1lWWVU4XzJYOF9CRToKKwljYXNlIFY0TDJfTUJVU19GTVRfVllVWThfMlg4OgogCQltdDltMTExLT5zd2FwX3l1dl95X2Nocm9tYXMgPSAwOwogCQltdDltMTExLT5zd2FwX3l1dl9jYl9jciA9IDE7CiAJCXJldCA9IG10OW0xMTFfc2V0Zm10X3l1dihjbGllbnQpOwogCQlicmVhazsKLQljYXNlIFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0xFOgorCWNhc2UgVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDg6CiAJCW10OW0xMTEtPnN3YXBfeXV2X3lfY2hyb21hcyA9IDE7CiAJCW10OW0xMTEtPnN3YXBfeXV2X2NiX2NyID0gMDsKIAkJcmV0ID0gbXQ5bTExMV9zZXRmbXRfeXV2KGNsaWVudCk7CiAJCWJyZWFrOwotCWNhc2UgVjRMMl9NQlVTX0ZNVF9ZVllVOF8yWDhfTEU6CisJY2FzZSBWNEwyX01CVVNfRk1UX1lWWVU4XzJYODoKIAkJbXQ5bTExMS0+c3dhcF95dXZfeV9jaHJvbWFzID0gMTsKIAkJbXQ5bTExMS0+c3dhcF95dXZfY2JfY3IgPSAxOwogCQlyZXQgPSBtdDltMTExX3NldGZtdF95dXYoY2xpZW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5dDExMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDl0MTEyLmMKaW5kZXggZTRiZjFkYi4uOGVjNDdlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDl0MTEyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDl0MTEyLmMKQEAgLTEyMSwyMiArMTIxLDIyIEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXQ5dDExMl9mb3JtYXQgbXQ5dDExMl9jZm10c1tdID0gewogCXsKLQkJLmNvZGUJCT0gVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDhfQkUsCisJCS5jb2RlCQk9IFY0TDJfTUJVU19GTVRfVVlWWThfMlg4LAogCQkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAogCQkuZm10CQk9IDEsCiAJCS5vcmRlcgkJPSAwLAogCX0sIHsKLQkJLmNvZGUJCT0gVjRMMl9NQlVTX0ZNVF9ZVllVOF8yWDhfQkUsCisJCS5jb2RlCQk9IFY0TDJfTUJVU19GTVRfVllVWThfMlg4LAogCQkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAogCQkuZm10CQk9IDEsCiAJCS5vcmRlcgkJPSAxLAogCX0sIHsKLQkJLmNvZGUJCT0gVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDhfTEUsCisJCS5jb2RlCQk9IFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4LAogCQkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAogCQkuZm10CQk9IDEsCiAJCS5vcmRlcgkJPSAyLAogCX0sIHsKLQkJLmNvZGUJCT0gVjRMMl9NQlVTX0ZNVF9ZVllVOF8yWDhfTEUsCisJCS5jb2RlCQk9IFY0TDJfTUJVU19GTVRfWVZZVThfMlg4LAogCQkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAogCQkuZm10CQk9IDEsCiAJCS5vcmRlcgkJPSAzLApAQCAtOTcyLDcgKzk3Miw3IEBACiAJc3RydWN0IHY0bDJfcmVjdCAqcmVjdCA9ICZhLT5jOwogCiAJcmV0dXJuIG10OXQxMTJfc2V0X3BhcmFtcyhjbGllbnQsIHJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQsCi0JCQkJIFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0JFKTsKKwkJCQkgVjRMMl9NQlVTX0ZNVF9VWVZZOF8yWDgpOwogfQogCiBzdGF0aWMgaW50IG10OXQxMTJfZ19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKQEAgLTk4Myw3ICs5ODMsNyBAQAogCiAJaWYgKCFwcml2LT5mb3JtYXQpIHsKIAkJaW50IHJldCA9IG10OXQxMTJfc2V0X3BhcmFtcyhjbGllbnQsIFZHQV9XSURUSCwgVkdBX0hFSUdIVCwKLQkJCQkJICAgICBWNEwyX01CVVNfRk1UX1lVWVY4XzJYOF9CRSk7CisJCQkJCSAgICAgVjRMMl9NQlVTX0ZNVF9VWVZZOF8yWDgpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9teDJfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL214Ml9jYW1lcmEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjZiZWYwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9teDJfY2FtZXJhLmMKQEAgLTAsMCArMSwxNTEzIEBACisvKgorICogVjRMMiBEcml2ZXIgZm9yIGkuTVgyNy9pLk1YMjUgY2FtZXJhIGhvc3QKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIFNhc2NoYSBIYXVlciwgUGVuZ3V0cm9uaXgKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgQmFydWNoIFNpYWNoLCBPcmV4IENvbXB1dGVkIFJhZGlvZ3JhcGh5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXYuaD4KKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi1kbWEtY29udGlnLmg+CisjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgorI2luY2x1ZGUgPG1lZGlhL3NvY19tZWRpYWJ1cy5oPgorCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisKKyNpbmNsdWRlIDxtYWNoL214Ml9jYW0uaD4KKyNpZmRlZiBDT05GSUdfTUFDSF9NWDI3CisjaW5jbHVkZSA8bWFjaC9kbWEtbXgxLW14Mi5oPgorI2VuZGlmCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisjaW5jbHVkZSA8YXNtL2RtYS5oPgorCisjZGVmaW5lIE1YMl9DQU1fRFJWX05BTUUgIm14Mi1jYW1lcmEiCisjZGVmaW5lIE1YMl9DQU1fVkVSU0lPTl9DT0RFIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDUpCisjZGVmaW5lIE1YMl9DQU1fRFJJVkVSX0RFU0NSSVBUSU9OICJpLk1YMnhfQ2FtZXJhIgorCisvKiByZXNldCB2YWx1ZXMgKi8KKyNkZWZpbmUgQ1NJQ1IxX1JFU0VUX1ZBTAkweDQwMDAwODAwCisjZGVmaW5lIENTSUNSMl9SRVNFVF9WQUwJMHgwCisjZGVmaW5lIENTSUNSM19SRVNFVF9WQUwJMHgwCisKKy8qIGNzaSBjb250cm9sIHJlZyAxICovCisjZGVmaW5lIENTSUNSMV9TV0FQMTZfRU4JKDEgPDwgMzEpCisjZGVmaW5lIENTSUNSMV9FWFRfVlNZTkMJKDEgPDwgMzApCisjZGVmaW5lIENTSUNSMV9FT0ZfSU5URU4JKDEgPDwgMjkpCisjZGVmaW5lIENTSUNSMV9QUlBfSUZfRU4JKDEgPDwgMjgpCisjZGVmaW5lIENTSUNSMV9DQ0lSX01PREUJKDEgPDwgMjcpCisjZGVmaW5lIENTSUNSMV9DT0ZfSU5URU4JKDEgPDwgMjYpCisjZGVmaW5lIENTSUNSMV9TRl9PUl9JTlRFTgkoMSA8PCAyNSkKKyNkZWZpbmUgQ1NJQ1IxX1JGX09SX0lOVEVOCSgxIDw8IDI0KQorI2RlZmluZSBDU0lDUjFfU1RBVEZGX0xFVkVMCSgzIDw8IDIyKQorI2RlZmluZSBDU0lDUjFfU1RBVEZGX0lOVEVOCSgxIDw8IDIxKQorI2RlZmluZSBDU0lDUjFfUlhGRl9MRVZFTChsKQkoKChsKSAmIDMpIDw8IDE5KQkvKiBNWDI3ICovCisjZGVmaW5lIENTSUNSMV9GQjJfRE1BX0lOVEVOCSgxIDw8IDIwKQkJLyogTVgyNSAqLworI2RlZmluZSBDU0lDUjFfRkIxX0RNQV9JTlRFTgkoMSA8PCAxOSkJCS8qIE1YMjUgKi8KKyNkZWZpbmUgQ1NJQ1IxX1JYRkZfSU5URU4JKDEgPDwgMTgpCisjZGVmaW5lIENTSUNSMV9TT0ZfUE9MCQkoMSA8PCAxNykKKyNkZWZpbmUgQ1NJQ1IxX1NPRl9JTlRFTgkoMSA8PCAxNikKKyNkZWZpbmUgQ1NJQ1IxX01DTEtESVYoZCkJKCgoZCkgJiAweEYpIDw8IDEyKQorI2RlZmluZSBDU0lDUjFfSFNZTkNfUE9MCSgxIDw8IDExKQorI2RlZmluZSBDU0lDUjFfQ0NJUl9FTgkJKDEgPDwgMTApCisjZGVmaW5lIENTSUNSMV9NQ0xLRU4JCSgxIDw8IDkpCisjZGVmaW5lIENTSUNSMV9GQ0MJCSgxIDw8IDgpCisjZGVmaW5lIENTSUNSMV9QQUNLX0RJUgkJKDEgPDwgNykKKyNkZWZpbmUgQ1NJQ1IxX0NMUl9TVEFURklGTwkoMSA8PCA2KQorI2RlZmluZSBDU0lDUjFfQ0xSX1JYRklGTwkoMSA8PCA1KQorI2RlZmluZSBDU0lDUjFfR0NMS19NT0RFCSgxIDw8IDQpCisjZGVmaW5lIENTSUNSMV9JTlZfREFUQQkJKDEgPDwgMykKKyNkZWZpbmUgQ1NJQ1IxX0lOVl9QQ0xLCQkoMSA8PCAyKQorI2RlZmluZSBDU0lDUjFfUkVER0UJCSgxIDw8IDEpCisKKyNkZWZpbmUgU0hJRlRfU1RBVEZGX0xFVkVMCTIyCisjZGVmaW5lIFNISUZUX1JYRkZfTEVWRUwJMTkKKyNkZWZpbmUgU0hJRlRfTUNMS0RJVgkJMTIKKworLyogY29udHJvbCByZWcgMyAqLworI2RlZmluZSBDU0lDUjNfRlJNQ05UCQkoMHhGRkZGIDw8IDE2KQorI2RlZmluZSBDU0lDUjNfRlJNQ05UX1JTVAkoMSA8PCAxNSkKKyNkZWZpbmUgQ1NJQ1IzX0RNQV9SRUZMQVNIX1JGRgkoMSA8PCAxNCkKKyNkZWZpbmUgQ1NJQ1IzX0RNQV9SRUZMQVNIX1NGRgkoMSA8PCAxMykKKyNkZWZpbmUgQ1NJQ1IzX0RNQV9SRVFfRU5fUkZGCSgxIDw8IDEyKQorI2RlZmluZSBDU0lDUjNfRE1BX1JFUV9FTl9TRkYJKDEgPDwgMTEpCisjZGVmaW5lIENTSUNSM19SWEZGX0xFVkVMKGwpCSgoKGwpICYgNykgPDwgNCkJLyogTVgyNSAqLworI2RlZmluZSBDU0lDUjNfQ1NJX1NVUAkJKDEgPDwgMykKKyNkZWZpbmUgQ1NJQ1IzX1pFUk9fUEFDS19FTgkoMSA8PCAyKQorI2RlZmluZSBDU0lDUjNfRUNDX0lOVF9FTgkoMSA8PCAxKQorI2RlZmluZSBDU0lDUjNfRUNDX0FVVE9fRU4JKDEgPDwgMCkKKworI2RlZmluZSBTSElGVF9GUk1DTlQJCTE2CisKKy8qIGNzaSBzdGF0dXMgcmVnICovCisjZGVmaW5lIENTSVNSX1NGRl9PUl9JTlQJKDEgPDwgMjUpCisjZGVmaW5lIENTSVNSX1JGRl9PUl9JTlQJKDEgPDwgMjQpCisjZGVmaW5lIENTSVNSX1NUQVRGRl9JTlQJKDEgPDwgMjEpCisjZGVmaW5lIENTSVNSX0RNQV9UU0ZfRkIyX0lOVAkoMSA8PCAyMCkJLyogTVgyNSAqLworI2RlZmluZSBDU0lTUl9ETUFfVFNGX0ZCMV9JTlQJKDEgPDwgMTkpCS8qIE1YMjUgKi8KKyNkZWZpbmUgQ1NJU1JfUlhGRl9JTlQJCSgxIDw8IDE4KQorI2RlZmluZSBDU0lTUl9FT0ZfSU5UCQkoMSA8PCAxNykKKyNkZWZpbmUgQ1NJU1JfU09GX0lOVAkJKDEgPDwgMTYpCisjZGVmaW5lIENTSVNSX0YyX0lOVAkJKDEgPDwgMTUpCisjZGVmaW5lIENTSVNSX0YxX0lOVAkJKDEgPDwgMTQpCisjZGVmaW5lIENTSVNSX0NPRl9JTlQJCSgxIDw8IDEzKQorI2RlZmluZSBDU0lTUl9FQ0NfSU5UCQkoMSA8PCAxKQorI2RlZmluZSBDU0lTUl9EUkRZCQkoMSA8PCAwKQorCisjZGVmaW5lIENTSUNSMQkJCTB4MDAKKyNkZWZpbmUgQ1NJQ1IyCQkJMHgwNAorI2RlZmluZSBDU0lTUgkJCShjcHVfaXNfbXgyNygpID8gMHgwOCA6IDB4MTgpCisjZGVmaW5lIENTSVNUQVRGSUZPCQkweDBjCisjZGVmaW5lIENTSVJGSUZPCQkweDEwCisjZGVmaW5lIENTSVJYQ05UCQkweDE0CisjZGVmaW5lIENTSUNSMwkJCShjcHVfaXNfbXgyNygpID8gMHgxQyA6IDB4MDgpCisjZGVmaW5lIENTSURNQVNBX1NUQVRGSUZPCTB4MjAKKyNkZWZpbmUgQ1NJRE1BVEFfU1RBVEZJRk8JMHgyNAorI2RlZmluZSBDU0lETUFTQV9GQjEJCTB4MjgKKyNkZWZpbmUgQ1NJRE1BU0FfRkIyCQkweDJjCisjZGVmaW5lIENTSUZCVUZfUEFSQQkJMHgzMAorI2RlZmluZSBDU0lJTUFHX1BBUkEJCTB4MzQKKworLyogRU1NQSBQclAgKi8KKyNkZWZpbmUgUFJQX0NOVEwJCQkweDAwCisjZGVmaW5lIFBSUF9JTlRSX0NOVEwJCQkweDA0CisjZGVmaW5lIFBSUF9JTlRSU1RBVFVTCQkJMHgwOAorI2RlZmluZSBQUlBfU09VUkNFX1lfUFRSCQkweDBjCisjZGVmaW5lIFBSUF9TT1VSQ0VfQ0JfUFRSCQkweDEwCisjZGVmaW5lIFBSUF9TT1VSQ0VfQ1JfUFRSCQkweDE0CisjZGVmaW5lIFBSUF9ERVNUX1JHQjFfUFRSCQkweDE4CisjZGVmaW5lIFBSUF9ERVNUX1JHQjJfUFRSCQkweDFjCisjZGVmaW5lIFBSUF9ERVNUX1lfUFRSCQkJMHgyMAorI2RlZmluZSBQUlBfREVTVF9DQl9QVFIJCQkweDI0CisjZGVmaW5lIFBSUF9ERVNUX0NSX1BUUgkJCTB4MjgKKyNkZWZpbmUgUFJQX1NSQ19GUkFNRV9TSVpFCQkweDJjCisjZGVmaW5lIFBSUF9ERVNUX0NIMV9MSU5FX1NUUklERQkweDMwCisjZGVmaW5lIFBSUF9TUkNfUElYRUxfRk9STUFUX0NOVEwJMHgzNAorI2RlZmluZSBQUlBfQ0gxX1BJWEVMX0ZPUk1BVF9DTlRMCTB4MzgKKyNkZWZpbmUgUFJQX0NIMV9PVVRfSU1BR0VfU0laRQkJMHgzYworI2RlZmluZSBQUlBfQ0gyX09VVF9JTUFHRV9TSVpFCQkweDQwCisjZGVmaW5lIFBSUF9TUkNfTElORV9TVFJJREUJCTB4NDQKKyNkZWZpbmUgUFJQX0NTQ19DT0VGXzAxMgkJMHg0OAorI2RlZmluZSBQUlBfQ1NDX0NPRUZfMzQ1CQkweDRjCisjZGVmaW5lIFBSUF9DU0NfQ09FRl82NzgJCTB4NTAKKyNkZWZpbmUgUFJQX0NIMV9SWl9IT1JJX0NPRUYxCQkweDU0CisjZGVmaW5lIFBSUF9DSDFfUlpfSE9SSV9DT0VGMgkJMHg1OAorI2RlZmluZSBQUlBfQ0gxX1JaX0hPUklfVkFMSUQJCTB4NWMKKyNkZWZpbmUgUFJQX0NIMV9SWl9WRVJUX0NPRUYxCQkweDYwCisjZGVmaW5lIFBSUF9DSDFfUlpfVkVSVF9DT0VGMgkJMHg2NAorI2RlZmluZSBQUlBfQ0gxX1JaX1ZFUlRfVkFMSUQJCTB4NjgKKyNkZWZpbmUgUFJQX0NIMl9SWl9IT1JJX0NPRUYxCQkweDZjCisjZGVmaW5lIFBSUF9DSDJfUlpfSE9SSV9DT0VGMgkJMHg3MAorI2RlZmluZSBQUlBfQ0gyX1JaX0hPUklfVkFMSUQJCTB4NzQKKyNkZWZpbmUgUFJQX0NIMl9SWl9WRVJUX0NPRUYxCQkweDc4CisjZGVmaW5lIFBSUF9DSDJfUlpfVkVSVF9DT0VGMgkJMHg3YworI2RlZmluZSBQUlBfQ0gyX1JaX1ZFUlRfVkFMSUQJCTB4ODAKKworI2RlZmluZSBQUlBfQ05UTF9DSDFFTgkJKDEgPDwgMCkKKyNkZWZpbmUgUFJQX0NOVExfQ0gyRU4JCSgxIDw8IDEpCisjZGVmaW5lIFBSUF9DTlRMX0NTSUVOCQkoMSA8PCAyKQorI2RlZmluZSBQUlBfQ05UTF9EQVRBX0lOX1lVVjQyMAkoMCA8PCAzKQorI2RlZmluZSBQUlBfQ05UTF9EQVRBX0lOX1lVVjQyMgkoMSA8PCAzKQorI2RlZmluZSBQUlBfQ05UTF9EQVRBX0lOX1JHQjE2CSgyIDw8IDMpCisjZGVmaW5lIFBSUF9DTlRMX0RBVEFfSU5fUkdCMzIJKDMgPDwgMykKKyNkZWZpbmUgUFJQX0NOVExfQ0gxX09VVF9SR0I4CSgwIDw8IDUpCisjZGVmaW5lIFBSUF9DTlRMX0NIMV9PVVRfUkdCMTYJKDEgPDwgNSkKKyNkZWZpbmUgUFJQX0NOVExfQ0gxX09VVF9SR0IzMgkoMiA8PCA1KQorI2RlZmluZSBQUlBfQ05UTF9DSDFfT1VUX1lVVjQyMgkoMyA8PCA1KQorI2RlZmluZSBQUlBfQ05UTF9DSDJfT1VUX1lVVjQyMAkoMCA8PCA3KQorI2RlZmluZSBQUlBfQ05UTF9DSDJfT1VUX1lVVjQyMiAoMSA8PCA3KQorI2RlZmluZSBQUlBfQ05UTF9DSDJfT1VUX1lVVjQ0NAkoMiA8PCA3KQorI2RlZmluZSBQUlBfQ05UTF9DSDFfTEVOCSgxIDw8IDkpCisjZGVmaW5lIFBSUF9DTlRMX0NIMl9MRU4JKDEgPDwgMTApCisjZGVmaW5lIFBSUF9DTlRMX1NLSVBfRlJBTUUJKDEgPDwgMTEpCisjZGVmaW5lIFBSUF9DTlRMX1NXUlNUCQkoMSA8PCAxMikKKyNkZWZpbmUgUFJQX0NOVExfQ0xLRU4JCSgxIDw8IDEzKQorI2RlZmluZSBQUlBfQ05UTF9XRU4JCSgxIDw8IDE0KQorI2RlZmluZSBQUlBfQ05UTF9DSDFCWVAJCSgxIDw8IDE1KQorI2RlZmluZSBQUlBfQ05UTF9JTl9UU0tJUCh4KQkoKHgpIDw8IDE2KQorI2RlZmluZSBQUlBfQ05UTF9DSDFfVFNLSVAoeCkJKCh4KSA8PCAxOSkKKyNkZWZpbmUgUFJQX0NOVExfQ0gyX1RTS0lQKHgpCSgoeCkgPDwgMjIpCisjZGVmaW5lIFBSUF9DTlRMX0lOUFVUX0ZJRk9fTEVWRUwoeCkJKCh4KSA8PCAyNSkKKyNkZWZpbmUgUFJQX0NOVExfUlpfRklGT19MRVZFTCh4KQkoKHgpIDw8IDI3KQorI2RlZmluZSBQUlBfQ05UTF9DSDJCMUVOCSgxIDw8IDI5KQorI2RlZmluZSBQUlBfQ05UTF9DSDJCMkVOCSgxIDw8IDMwKQorI2RlZmluZSBQUlBfQ05UTF9DSDJGRU4JCSgxIDw8IDMxKQorCisvKiBJUlEgRW5hYmxlIGFuZCBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUFJQX0lOVFJfUkRFUlIJCSgxIDw8IDApCisjZGVmaW5lIFBSUF9JTlRSX0NIMVdFUlIJKDEgPDwgMSkKKyNkZWZpbmUgUFJQX0lOVFJfQ0gyV0VSUgkoMSA8PCAyKQorI2RlZmluZSBQUlBfSU5UUl9DSDFGQwkJKDEgPDwgMykKKyNkZWZpbmUgUFJQX0lOVFJfQ0gyRkMJCSgxIDw8IDUpCisjZGVmaW5lIFBSUF9JTlRSX0xCT1ZGCQkoMSA8PCA3KQorI2RlZmluZSBQUlBfSU5UUl9DSDJPVkYJCSgxIDw8IDgpCisKKyNkZWZpbmUgbXgyN19jYW1lcmFfZW1tYShwY2RldikJKGNwdV9pc19teDI3KCkgJiYgcGNkZXYtPnVzZV9lbW1hKQorCisjZGVmaW5lIE1BWF9WSURFT19NRU0JMTYKKworc3RydWN0IG14Ml9jYW1lcmFfZGV2IHsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QJc29jX2hvc3Q7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2Q7CisJc3RydWN0IGNsawkJKmNsa19jc2ksICpjbGtfZW1tYTsKKworCXVuc2lnbmVkIGludAkJaXJxX2NzaSwgaXJxX2VtbWE7CisJdm9pZCBfX2lvbWVtCQkqYmFzZV9jc2ksICpiYXNlX2VtbWE7CisJdW5zaWduZWQgbG9uZwkJYmFzZV9kbWE7CisKKwlzdHJ1Y3QgbXgyX2NhbWVyYV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSpyZXNfY3NpLCAqcmVzX2VtbWE7CisJdW5zaWduZWQgbG9uZwkJcGxhdGZvcm1fZmxhZ3M7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNhcHR1cmU7CisJc3RydWN0IGxpc3RfaGVhZAlhY3RpdmVfYnVmczsKKworCXNwaW5sb2NrX3QJCWxvY2s7CisKKwlpbnQJCQlkbWE7CisJc3RydWN0IG14Ml9idWZmZXIJKmFjdGl2ZTsKKwlzdHJ1Y3QgbXgyX2J1ZmZlcgkqZmIxX2FjdGl2ZTsKKwlzdHJ1Y3QgbXgyX2J1ZmZlcgkqZmIyX2FjdGl2ZTsKKworCWludAkJCXVzZV9lbW1hOworCisJdTMyCQkJY3NpY3IxOworCisJdm9pZAkJCSpkaXNjYXJkX2J1ZmZlcjsKKwlkbWFfYWRkcl90CQlkaXNjYXJkX2J1ZmZlcl9kbWE7CisJc2l6ZV90CQkJZGlzY2FyZF9zaXplOworfTsKKworLyogYnVmZmVyIGZvciBvbmUgdmlkZW8gZnJhbWUgKi8KK3N0cnVjdCBteDJfYnVmZmVyIHsKKwkvKiBjb21tb24gdjRsIGJ1ZmZlciBzdHVmZiAtLSBtdXN0IGJlIGZpcnN0ICovCisJc3RydWN0IHZpZGVvYnVmX2J1ZmZlcgkJdmI7CisKKwllbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUJY29kZTsKKworCWludCBidWZudW07Cit9OworCitzdGF0aWMgdm9pZCBteDJfY2FtZXJhX2RlYWN0aXZhdGUoc3RydWN0IG14Ml9jYW1lcmFfZGV2ICpwY2RldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY2xrX2Rpc2FibGUocGNkZXYtPmNsa19jc2kpOworCXdyaXRlbCgwLCBwY2Rldi0+YmFzZV9jc2kgKyBDU0lDUjEpOworCWlmIChteDI3X2NhbWVyYV9lbW1hKHBjZGV2KSkgeworCQl3cml0ZWwoMCwgcGNkZXYtPmJhc2VfZW1tYSArIFBSUF9DTlRMKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19teDI1KCkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBjZGV2LT5sb2NrLCBmbGFncyk7CisJCXBjZGV2LT5mYjFfYWN0aXZlID0gTlVMTDsKKwkJcGNkZXYtPmZiMl9hY3RpdmUgPSBOVUxMOworCQl3cml0ZWwoMCwgcGNkZXYtPmJhc2VfY3NpICsgQ1NJRE1BU0FfRkIxKTsKKwkJd3JpdGVsKDAsIHBjZGV2LT5iYXNlX2NzaSArIENTSURNQVNBX0ZCMik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjZGV2LT5sb2NrLCBmbGFncyk7CisJfQorfQorCisvKgorICogVGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGFic29sdXRlbHkgZGVwZW5kIG9uIHRoZSBmYWN0LCB0aGF0CisgKiB0aGVyZSBjYW4gYmUgb25seSBvbmUgY2FtZXJhIG9uIG14MiBjYW1lcmEgc2Vuc29yIGludGVyZmFjZQorICovCitzdGF0aWMgaW50IG14Ml9jYW1lcmFfYWRkX2RldmljZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgbXgyX2NhbWVyYV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OworCWludCByZXQ7CisJdTMyIGNzaWNyMTsKKworCWlmIChwY2Rldi0+aWNkKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmV0ID0gY2xrX2VuYWJsZShwY2Rldi0+Y2xrX2NzaSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwljc2ljcjEgPSBDU0lDUjFfTUNMS0VOOworCisJaWYgKG14MjdfY2FtZXJhX2VtbWEocGNkZXYpKSB7CisJCWNzaWNyMSB8PSBDU0lDUjFfUFJQX0lGX0VOIHwgQ1NJQ1IxX0ZDQyB8CisJCQlDU0lDUjFfUlhGRl9MRVZFTCgwKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19teDI3KCkpCisJCWNzaWNyMSB8PSBDU0lDUjFfU09GX0lOVEVOIHwgQ1NJQ1IxX1JYRkZfTEVWRUwoMik7CisKKwlwY2Rldi0+Y3NpY3IxID0gY3NpY3IxOworCXdyaXRlbChwY2Rldi0+Y3NpY3IxLCBwY2Rldi0+YmFzZV9jc2kgKyBDU0lDUjEpOworCisJcGNkZXYtPmljZCA9IGljZDsKKworCWRldl9pbmZvKGljZC0+ZGV2LnBhcmVudCwgIkNhbWVyYSBkcml2ZXIgYXR0YWNoZWQgdG8gY2FtZXJhICVkXG4iLAorCQkgaWNkLT5kZXZudW0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG14Ml9jYW1lcmFfcmVtb3ZlX2RldmljZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgbXgyX2NhbWVyYV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OworCisJQlVHX09OKGljZCAhPSBwY2Rldi0+aWNkKTsKKworCWRldl9pbmZvKGljZC0+ZGV2LnBhcmVudCwgIkNhbWVyYSBkcml2ZXIgZGV0YWNoZWQgZnJvbSBjYW1lcmEgJWRcbiIsCisJCSBpY2QtPmRldm51bSk7CisKKwlteDJfY2FtZXJhX2RlYWN0aXZhdGUocGNkZXYpOworCisJaWYgKHBjZGV2LT5kaXNjYXJkX2J1ZmZlcikgeworCQlkbWFfZnJlZV9jb2hlcmVudChpY2ktPnY0bDJfZGV2LmRldiwgcGNkZXYtPmRpc2NhcmRfc2l6ZSwKKwkJCQlwY2Rldi0+ZGlzY2FyZF9idWZmZXIsCisJCQkJcGNkZXYtPmRpc2NhcmRfYnVmZmVyX2RtYSk7CisJCXBjZGV2LT5kaXNjYXJkX2J1ZmZlciA9IE5VTEw7CisJfQorCisJcGNkZXYtPmljZCA9IE5VTEw7Cit9CisKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDI3CitzdGF0aWMgdm9pZCBteDI3X2NhbWVyYV9kbWFfZW5hYmxlKHN0cnVjdCBteDJfY2FtZXJhX2RldiAqcGNkZXYpCit7CisJdTMyIHRtcDsKKworCWlteF9kbWFfZW5hYmxlKHBjZGV2LT5kbWEpOworCisJdG1wID0gcmVhZGwocGNkZXYtPmJhc2VfY3NpICsgQ1NJQ1IxKTsKKwl0bXAgfD0gQ1NJQ1IxX1JGX09SX0lOVEVOOworCXdyaXRlbCh0bXAsIHBjZGV2LT5iYXNlX2NzaSArIENTSUNSMSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBteDI3X2NhbWVyYV9pcnEoaW50IGlycV9jc2ksIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG14Ml9jYW1lcmFfZGV2ICpwY2RldiA9IGRhdGE7CisJdTMyIHN0YXR1cyA9IHJlYWRsKHBjZGV2LT5iYXNlX2NzaSArIENTSVNSKTsKKworCWlmIChzdGF0dXMgJiBDU0lTUl9TT0ZfSU5UICYmIHBjZGV2LT5hY3RpdmUpIHsKKwkJdTMyIHRtcDsKKworCQl0bXAgPSByZWFkbChwY2Rldi0+YmFzZV9jc2kgKyBDU0lDUjEpOworCQl3cml0ZWwodG1wIHwgQ1NJQ1IxX0NMUl9SWEZJRk8sIHBjZGV2LT5iYXNlX2NzaSArIENTSUNSMSk7CisJCW14MjdfY2FtZXJhX2RtYV9lbmFibGUocGNkZXYpOworCX0KKworCXdyaXRlbChDU0lTUl9TT0ZfSU5UIHwgQ1NJU1JfUkZGX09SX0lOVCwgcGNkZXYtPmJhc2VfY3NpICsgQ1NJU1IpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorI2Vsc2UKK3N0YXRpYyBpcnFyZXR1cm5fdCBteDI3X2NhbWVyYV9pcnEoaW50IGlycV9jc2ksIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIElSUV9OT05FOworfQorI2VuZGlmIC8qIENPTkZJR19NQUNIX01YMjcgKi8KKworc3RhdGljIHZvaWQgbXgyNV9jYW1lcmFfZnJhbWVfZG9uZShzdHJ1Y3QgbXgyX2NhbWVyYV9kZXYgKnBjZGV2LCBpbnQgZmIsCisJCWludCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YjsKKwlzdHJ1Y3QgbXgyX2J1ZmZlciAqYnVmOworCXN0cnVjdCBteDJfYnVmZmVyICoqZmJfYWN0aXZlID0gZmIgPT0gMSA/ICZwY2Rldi0+ZmIxX2FjdGl2ZSA6CisJCSZwY2Rldi0+ZmIyX2FjdGl2ZTsKKwl1MzIgZmJfcmVnID0gZmIgPT0gMSA/IENTSURNQVNBX0ZCMSA6IENTSURNQVNBX0ZCMjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBjZGV2LT5sb2NrLCBmbGFncyk7CisKKwl2YiA9ICYoKmZiX2FjdGl2ZSktPnZiOworCWRldl9kYmcocGNkZXYtPmRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKKwkJdmIsIHZiLT5iYWRkciwgdmItPmJzaXplKTsKKworCXZiLT5zdGF0ZSA9IHN0YXRlOworCWRvX2dldHRpbWVvZmRheSgmdmItPnRzKTsKKwl2Yi0+ZmllbGRfY291bnQrKzsKKworCXdha2VfdXAoJnZiLT5kb25lKTsKKworCWlmIChsaXN0X2VtcHR5KCZwY2Rldi0+Y2FwdHVyZSkpIHsKKwkJYnVmID0gTlVMTDsKKwkJd3JpdGVsKDAsIHBjZGV2LT5iYXNlX2NzaSArIGZiX3JlZyk7CisJfSBlbHNlIHsKKwkJYnVmID0gbGlzdF9lbnRyeShwY2Rldi0+Y2FwdHVyZS5uZXh0LCBzdHJ1Y3QgbXgyX2J1ZmZlciwKKwkJCQl2Yi5xdWV1ZSk7CisJCXZiID0gJmJ1Zi0+dmI7CisJCWxpc3RfZGVsKCZ2Yi0+cXVldWUpOworCQl2Yi0+c3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJCXdyaXRlbCh2aWRlb2J1Zl90b19kbWFfY29udGlnKHZiKSwgcGNkZXYtPmJhc2VfY3NpICsgZmJfcmVnKTsKKwl9CisKKwkqZmJfYWN0aXZlID0gYnVmOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNkZXYtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlycXJldHVybl90IG14MjVfY2FtZXJhX2lycShpbnQgaXJxX2NzaSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbXgyX2NhbWVyYV9kZXYgKnBjZGV2ID0gZGF0YTsKKwl1MzIgc3RhdHVzID0gcmVhZGwocGNkZXYtPmJhc2VfY3NpICsgQ1NJU1IpOworCisJaWYgKHN0YXR1cyAmIENTSVNSX0RNQV9UU0ZfRkIxX0lOVCkKKwkJbXgyNV9jYW1lcmFfZnJhbWVfZG9uZShwY2RldiwgMSwgVklERU9CVUZfRE9ORSk7CisJZWxzZSBpZiAoc3RhdHVzICYgQ1NJU1JfRE1BX1RTRl9GQjJfSU5UKQorCQlteDI1X2NhbWVyYV9mcmFtZV9kb25lKHBjZGV2LCAyLCBWSURFT0JVRl9ET05FKTsKKworCS8qIEZJWE1FOiBoYW5kbGUgQ1NJU1JfUkZGX09SX0lOVCAqLworCisJd3JpdGVsKHN0YXR1cywgcGNkZXYtPmJhc2VfY3NpICsgQ1NJU1IpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKgorICogIFZpZGVvYnVmIG9wZXJhdGlvbnMKKyAqLworc3RhdGljIGludCBteDJfdmlkZW9idWZfc2V0dXAoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgdW5zaWduZWQgaW50ICpjb3VudCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCAqc2l6ZSkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHZxLT5wcml2X2RhdGE7CisJaW50IGJ5dGVzX3Blcl9saW5lID0gc29jX21idXNfYnl0ZXNfcGVyX2xpbmUoaWNkLT51c2VyX3dpZHRoLAorCQkJaWNkLT5jdXJyZW50X2ZtdC0+aG9zdF9mbXQpOworCisJZGV2X2RiZygmaWNkLT5kZXYsICJjb3VudD0lZCwgc2l6ZT0lZFxuIiwgKmNvdW50LCAqc2l6ZSk7CisKKwlpZiAoYnl0ZXNfcGVyX2xpbmUgPCAwKQorCQlyZXR1cm4gYnl0ZXNfcGVyX2xpbmU7CisKKwkqc2l6ZSA9IGJ5dGVzX3Blcl9saW5lICogaWNkLT51c2VyX2hlaWdodDsKKworCWlmICgwID09ICpjb3VudCkKKwkJKmNvdW50ID0gMzI7CisJaWYgKCpzaXplICogKmNvdW50ID4gTUFYX1ZJREVPX01FTSAqIDEwMjQgKiAxMDI0KQorCQkqY291bnQgPSAoTUFYX1ZJREVPX01FTSAqIDEwMjQgKiAxMDI0KSAvICpzaXplOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfYnVmZmVyKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCBteDJfYnVmZmVyICpidWYpCit7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiID0gJmJ1Zi0+dmI7CisKKwlkZXZfZGJnKCZpY2QtPmRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKKwkJdmIsIHZiLT5iYWRkciwgdmItPmJzaXplKTsKKworCS8qCisJICogVGhpcyB3YWl0cyB1bnRpbCB0aGlzIGJ1ZmZlciBpcyBvdXQgb2YgZGFuZ2VyLCBpLmUuLCB1bnRpbCBpdCBpcyBubworCSAqIGxvbmdlciBpbiBTVEFURV9RVUVVRUQgb3IgU1RBVEVfQUNUSVZFCisJICovCisJdmlkZW9idWZfd2FpdG9uKHZiLCAwLCAwKTsKKworCXZpZGVvYnVmX2RtYV9jb250aWdfZnJlZSh2cSwgdmIpOworCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgZnJlZWRcbiIsIF9fZnVuY19fKTsKKworCXZiLT5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7Cit9CisKK3N0YXRpYyBpbnQgbXgyX3ZpZGVvYnVmX3ByZXBhcmUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwKKwkJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsIGVudW0gdjRsMl9maWVsZCBmaWVsZCkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IG14Ml9idWZmZXIgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IG14Ml9idWZmZXIsIHZiKTsKKwlpbnQgYnl0ZXNfcGVyX2xpbmUgPSBzb2NfbWJ1c19ieXRlc19wZXJfbGluZShpY2QtPnVzZXJfd2lkdGgsCisJCQlpY2QtPmN1cnJlbnRfZm10LT5ob3N0X2ZtdCk7CisJaW50IHJldCA9IDA7CisKKwlkZXZfZGJnKCZpY2QtPmRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKKwkJdmIsIHZiLT5iYWRkciwgdmItPmJzaXplKTsKKworCWlmIChieXRlc19wZXJfbGluZSA8IDApCisJCXJldHVybiBieXRlc19wZXJfbGluZTsKKworI2lmZGVmIERFQlVHCisJLyoKKwkgKiBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91IHdhbnQgdG8gc2VlIGlmIHdlIGFjdHVhbGx5IGZpbGwKKwkgKiB0aGUgYnVmZmVyIHdpdGggc29tZXRoaW5nCisJICovCisJbWVtc2V0KCh2b2lkICopdmItPmJhZGRyLCAweGFhLCB2Yi0+YnNpemUpOworI2VuZGlmCisKKwlpZiAoYnVmLT5jb2RlCSE9IGljZC0+Y3VycmVudF9mbXQtPmNvZGUgfHwKKwkgICAgdmItPndpZHRoCSE9IGljZC0+dXNlcl93aWR0aCB8fAorCSAgICB2Yi0+aGVpZ2h0CSE9IGljZC0+dXNlcl9oZWlnaHQgfHwKKwkgICAgdmItPmZpZWxkCSE9IGZpZWxkKSB7CisJCWJ1Zi0+Y29kZQk9IGljZC0+Y3VycmVudF9mbXQtPmNvZGU7CisJCXZiLT53aWR0aAk9IGljZC0+dXNlcl93aWR0aDsKKwkJdmItPmhlaWdodAk9IGljZC0+dXNlcl9oZWlnaHQ7CisJCXZiLT5maWVsZAk9IGZpZWxkOworCQl2Yi0+c3RhdGUJPSBWSURFT0JVRl9ORUVEU19JTklUOworCX0KKworCXZiLT5zaXplID0gYnl0ZXNfcGVyX2xpbmUgKiB2Yi0+aGVpZ2h0OworCWlmICh2Yi0+YmFkZHIgJiYgdmItPmJzaXplIDwgdmItPnNpemUpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHZiLT5zdGF0ZSA9PSBWSURFT0JVRl9ORUVEU19JTklUKSB7CisJCXJldCA9IHZpZGVvYnVmX2lvbG9jayh2cSwgdmIsIE5VTEwpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsOworCisJCXZiLT5zdGF0ZSA9IFZJREVPQlVGX1BSRVBBUkVEOworCX0KKworCXJldHVybiAwOworCitmYWlsOgorCWZyZWVfYnVmZmVyKHZxLCBidWYpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG14Ml92aWRlb2J1Zl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLAorCQkJICAgICAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPQorCQl0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgbXgyX2NhbWVyYV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OworCXN0cnVjdCBteDJfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCBteDJfYnVmZmVyLCB2Yik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJWRcbiIsIF9fZnVuY19fLAorCQl2YiwgdmItPmJhZGRyLCB2Yi0+YnNpemUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBjZGV2LT5sb2NrLCBmbGFncyk7CisKKwl2Yi0+c3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJbGlzdF9hZGRfdGFpbCgmdmItPnF1ZXVlLCAmcGNkZXYtPmNhcHR1cmUpOworCisJaWYgKG14MjdfY2FtZXJhX2VtbWEocGNkZXYpKSB7CisJCWdvdG8gb3V0OworI2lmZGVmIENPTkZJR19NQUNIX01YMjcKKwl9IGVsc2UgaWYgKGNwdV9pc19teDI3KCkpIHsKKwkJaW50IHJldDsKKworCQlpZiAocGNkZXYtPmFjdGl2ZSA9PSBOVUxMKSB7CisJCQlyZXQgPSBpbXhfZG1hX3NldHVwX3NpbmdsZShwY2Rldi0+ZG1hLAorCQkJCQl2aWRlb2J1Zl90b19kbWFfY29udGlnKHZiKSwgdmItPnNpemUsCisJCQkJCSh1MzIpcGNkZXYtPmJhc2VfZG1hICsgMHgxMCwKKwkJCQkJRE1BX01PREVfUkVBRCk7CisJCQlpZiAocmV0KSB7CisJCQkJdmItPnN0YXRlID0gVklERU9CVUZfRVJST1I7CisJCQkJd2FrZV91cCgmdmItPmRvbmUpOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQl2Yi0+c3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJCQlwY2Rldi0+YWN0aXZlID0gYnVmOworCQl9CisjZW5kaWYKKwl9IGVsc2UgeyAvKiBjcHVfaXNfbXgyNSgpICovCisJCXUzMiBjc2ljcjMsIGRtYV9pbnRlbiA9IDA7CisKKwkJaWYgKHBjZGV2LT5mYjFfYWN0aXZlID09IE5VTEwpIHsKKwkJCXdyaXRlbCh2aWRlb2J1Zl90b19kbWFfY29udGlnKHZiKSwKKwkJCQkJcGNkZXYtPmJhc2VfY3NpICsgQ1NJRE1BU0FfRkIxKTsKKwkJCXBjZGV2LT5mYjFfYWN0aXZlID0gYnVmOworCQkJZG1hX2ludGVuID0gQ1NJQ1IxX0ZCMV9ETUFfSU5URU47CisJCX0gZWxzZSBpZiAocGNkZXYtPmZiMl9hY3RpdmUgPT0gTlVMTCkgeworCQkJd3JpdGVsKHZpZGVvYnVmX3RvX2RtYV9jb250aWcodmIpLAorCQkJCQlwY2Rldi0+YmFzZV9jc2kgKyBDU0lETUFTQV9GQjIpOworCQkJcGNkZXYtPmZiMl9hY3RpdmUgPSBidWY7CisJCQlkbWFfaW50ZW4gPSBDU0lDUjFfRkIyX0RNQV9JTlRFTjsKKwkJfQorCisJCWlmIChkbWFfaW50ZW4pIHsKKwkJCWxpc3RfZGVsKCZ2Yi0+cXVldWUpOworCQkJdmItPnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCisJCQljc2ljcjMgPSByZWFkbChwY2Rldi0+YmFzZV9jc2kgKyBDU0lDUjMpOworCisJCQkvKiBSZWZsYXNoIERNQSAqLworCQkJd3JpdGVsKGNzaWNyMyB8IENTSUNSM19ETUFfUkVGTEFTSF9SRkYsCisJCQkJCXBjZGV2LT5iYXNlX2NzaSArIENTSUNSMyk7CisKKwkJCS8qIGNsZWFyICYgZW5hYmxlIGludGVycnVwdHMgKi8KKwkJCXdyaXRlbChkbWFfaW50ZW4sIHBjZGV2LT5iYXNlX2NzaSArIENTSVNSKTsKKwkJCXBjZGV2LT5jc2ljcjEgfD0gZG1hX2ludGVuOworCQkJd3JpdGVsKHBjZGV2LT5jc2ljcjEsIHBjZGV2LT5iYXNlX2NzaSArIENTSUNSMSk7CisKKwkJCS8qIGVuYWJsZSBETUEgKi8KKwkJCWNzaWNyMyB8PSBDU0lDUjNfRE1BX1JFUV9FTl9SRkYgfCBDU0lDUjNfUlhGRl9MRVZFTCgxKTsKKwkJCXdyaXRlbChjc2ljcjMsIHBjZGV2LT5iYXNlX2NzaSArIENTSUNSMyk7CisJCX0KKwl9CisKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY2Rldi0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBteDJfdmlkZW9idWZfcmVsZWFzZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLAorCQkJCSBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IG14Ml9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKKwlzdHJ1Y3QgbXgyX2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgbXgyX2J1ZmZlciwgdmIpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyNpZmRlZiBERUJVRworCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJWRcbiIsIF9fZnVuY19fLAorCQl2YiwgdmItPmJhZGRyLCB2Yi0+YnNpemUpOworCisJc3dpdGNoICh2Yi0+c3RhdGUpIHsKKwljYXNlIFZJREVPQlVGX0FDVElWRToKKwkJZGV2X2luZm8oJmljZC0+ZGV2LCAiJXMgKGFjdGl2ZSlcbiIsIF9fZnVuY19fKTsKKwkJYnJlYWs7CisJY2FzZSBWSURFT0JVRl9RVUVVRUQ6CisJCWRldl9pbmZvKCZpY2QtPmRldiwgIiVzIChxdWV1ZWQpXG4iLCBfX2Z1bmNfXyk7CisJCWJyZWFrOworCWNhc2UgVklERU9CVUZfUFJFUEFSRUQ6CisJCWRldl9pbmZvKCZpY2QtPmRldiwgIiVzIChwcmVwYXJlZClcbiIsIF9fZnVuY19fKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2luZm8oJmljZC0+ZGV2LCAiJXMgKHVua25vd24pICVkXG4iLCBfX2Z1bmNfXywKKwkJCQl2Yi0+c3RhdGUpOworCQlicmVhazsKKwl9CisjZW5kaWYKKworCS8qCisJICogVGVybWluYXRlIG9ubHkgcXVldWVkIGJ1dCBpbmFjdGl2ZSBidWZmZXJzLiBBY3RpdmUgYnVmZmVycyBhcmUKKwkgKiByZWxlYXNlZCB3aGVuIHRoZXkgYmVjb21lIGluYWN0aXZlIGFmdGVyIHZpZGVvYnVmX3dhaXRvbigpLgorCSAqCisJICogRklYTUU6IGltcGxlbWVudCBmb3JjZWQgdGVybWluYXRpb24gb2YgYWN0aXZlIGJ1ZmZlcnMsIHNvIHRoYXQgdGhlCisJICogdXNlciB3b24ndCBnZXQgc3R1Y2sgaW4gYW4gdW5pbnRlcnJ1cHRpYmxlIHN0YXRlLiBUaGlzIHJlcXVpcmVzIGEKKwkgKiBzcGVjaWZpYyBoYW5kbGluZyBmb3IgZWFjaCBvZiB0aGUgdGhyZWUgRE1BIHR5cGVzIHRoYXQgdGhpcyBkcml2ZXIKKwkgKiBzdXBwb3J0cy4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGNkZXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAodmItPnN0YXRlID09IFZJREVPQlVGX1FVRVVFRCkgeworCQlsaXN0X2RlbCgmdmItPnF1ZXVlKTsKKwkJdmItPnN0YXRlID0gVklERU9CVUZfRVJST1I7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjZGV2LT5sb2NrLCBmbGFncyk7CisKKwlmcmVlX2J1ZmZlcih2cSwgYnVmKTsKK30KKworc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgbXgyX3ZpZGVvYnVmX29wcyA9IHsKKwkuYnVmX3NldHVwICAgICAgPSBteDJfdmlkZW9idWZfc2V0dXAsCisJLmJ1Zl9wcmVwYXJlICAgID0gbXgyX3ZpZGVvYnVmX3ByZXBhcmUsCisJLmJ1Zl9xdWV1ZSAgICAgID0gbXgyX3ZpZGVvYnVmX3F1ZXVlLAorCS5idWZfcmVsZWFzZSAgICA9IG14Ml92aWRlb2J1Zl9yZWxlYXNlLAorfTsKKworc3RhdGljIHZvaWQgbXgyX2NhbWVyYV9pbml0X3ZpZGVvYnVmKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCSAgICAgIHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBteDJfY2FtZXJhX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CisKKwl2aWRlb2J1Zl9xdWV1ZV9kbWFfY29udGlnX2luaXQocSwgJm14Ml92aWRlb2J1Zl9vcHMsIHBjZGV2LT5kZXYsCisJCQkmcGNkZXYtPmxvY2ssIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKKwkJCVY0TDJfRklFTERfTk9ORSwgc2l6ZW9mKHN0cnVjdCBteDJfYnVmZmVyKSwgaWNkKTsKK30KKworI2RlZmluZSBNWDJfQlVTX0ZMQUdTCShTT0NBTV9EQVRBV0lEVEhfOCB8IFwKKwkJCVNPQ0FNX01BU1RFUiB8IFwKKwkJCVNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwgXAorCQkJU09DQU1fVlNZTkNfQUNUSVZFX0xPVyB8IFwKKwkJCVNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwgXAorCQkJU09DQU1fSFNZTkNfQUNUSVZFX0xPVyB8IFwKKwkJCVNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8IFwKKwkJCVNPQ0FNX1BDTEtfU0FNUExFX0ZBTExJTkcgfCBcCisJCQlTT0NBTV9EQVRBX0FDVElWRV9ISUdIIHwgXAorCQkJU09DQU1fREFUQV9BQ1RJVkVfTE9XKQorCitzdGF0aWMgaW50IG14MjdfY2FtZXJhX2VtbWFfcHJwX3Jlc2V0KHN0cnVjdCBteDJfY2FtZXJhX2RldiAqcGNkZXYpCit7CisJdTMyIGNudGw7CisJaW50IGNvdW50ID0gMDsKKworCWNudGwgPSByZWFkbChwY2Rldi0+YmFzZV9lbW1hICsgUFJQX0NOVEwpOworCXdyaXRlbChQUlBfQ05UTF9TV1JTVCwgcGNkZXYtPmJhc2VfZW1tYSArIFBSUF9DTlRMKTsKKwl3aGlsZSAoY291bnQrKyA8IDEwMCkgeworCQlpZiAoIShyZWFkbChwY2Rldi0+YmFzZV9lbW1hICsgUFJQX0NOVEwpICYgUFJQX0NOVExfU1dSU1QpKQorCQkJcmV0dXJuIDA7CisJCWJhcnJpZXIoKTsKKwkJdWRlbGF5KDEpOworCX0KKworCXJldHVybiAtRVRJTUVET1VUOworfQorCitzdGF0aWMgdm9pZCBteDI3X2NhbWVyYV9lbW1hX2J1Zl9pbml0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQlpbnQgYnl0ZXNwZXJsaW5lKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9CisJCXRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBteDJfY2FtZXJhX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CisKKwl3cml0ZWwocGNkZXYtPmRpc2NhcmRfYnVmZmVyX2RtYSwKKwkJCXBjZGV2LT5iYXNlX2VtbWEgKyBQUlBfREVTVF9SR0IxX1BUUik7CisJd3JpdGVsKHBjZGV2LT5kaXNjYXJkX2J1ZmZlcl9kbWEsCisJCQlwY2Rldi0+YmFzZV9lbW1hICsgUFJQX0RFU1RfUkdCMl9QVFIpOworCisJLyoKKwkgKiBXZSBvbmx5IHVzZSB0aGUgRU1NQSBlbmdpbmUgdG8gZ2V0IHJpZCBvZiB0aGUgYnJva2VuCisJICogRE1BIEVuZ2luZS4gTm8gY29sb3Igc3BhY2UgY29uc3ZlcnNpb24gYXQgdGhlIG1vbWVudC4KKwkgKiBXZSBhZGp1c3QgaW5jb21pbmcgYW5kIG91dGdvaW5nIHBpeGVsZm9ybWF0IHRvIHJnYjE2CisJICogYW5kIGFkanVzdCB0aGUgYnl0ZXNwZXJsaW5lIGFjY29yZGluZ2x5LgorCSAqLworCXdyaXRlbChQUlBfQ05UTF9DSDFFTiB8CisJCQlQUlBfQ05UTF9DU0lFTiB8CisJCQlQUlBfQ05UTF9EQVRBX0lOX1JHQjE2IHwKKwkJCVBSUF9DTlRMX0NIMV9PVVRfUkdCMTYgfAorCQkJUFJQX0NOVExfQ0gxX0xFTiB8CisJCQlQUlBfQ05UTF9DSDFCWVAgfAorCQkJUFJQX0NOVExfQ0gxX1RTS0lQKDApIHwKKwkJCVBSUF9DTlRMX0lOX1RTS0lQKDApLAorCQkJcGNkZXYtPmJhc2VfZW1tYSArIFBSUF9DTlRMKTsKKworCXdyaXRlbCgoKGJ5dGVzcGVybGluZSA+PiAxKSA8PCAxNikgfCBpY2QtPnVzZXJfaGVpZ2h0LAorCQkJcGNkZXYtPmJhc2VfZW1tYSArIFBSUF9TUkNfRlJBTUVfU0laRSk7CisJd3JpdGVsKCgoYnl0ZXNwZXJsaW5lID4+IDEpIDw8IDE2KSB8IGljZC0+dXNlcl9oZWlnaHQsCisJCQlwY2Rldi0+YmFzZV9lbW1hICsgUFJQX0NIMV9PVVRfSU1BR0VfU0laRSk7CisJd3JpdGVsKGJ5dGVzcGVybGluZSwKKwkJCXBjZGV2LT5iYXNlX2VtbWEgKyBQUlBfREVTVF9DSDFfTElORV9TVFJJREUpOworCXdyaXRlbCgweDJjYTAwNTY1LCAvKiBSR0I1NjUgKi8KKwkJCXBjZGV2LT5iYXNlX2VtbWEgKyBQUlBfU1JDX1BJWEVMX0ZPUk1BVF9DTlRMKTsKKwl3cml0ZWwoMHgyY2EwMDU2NSwgLyogUkdCNTY1ICovCisJCQlwY2Rldi0+YmFzZV9lbW1hICsgUFJQX0NIMV9QSVhFTF9GT1JNQVRfQ05UTCk7CisKKwkvKiBFbmFibGUgaW50ZXJydXB0cyAqLworCXdyaXRlbChQUlBfSU5UUl9SREVSUiB8CisJCQlQUlBfSU5UUl9DSDFXRVJSIHwKKwkJCVBSUF9JTlRSX0NIMldFUlIgfAorCQkJUFJQX0lOVFJfQ0gxRkMgfAorCQkJUFJQX0lOVFJfQ0gyRkMgfAorCQkJUFJQX0lOVFJfTEJPVkYgfAorCQkJUFJQX0lOVFJfQ0gyT1ZGLAorCQkJcGNkZXYtPmJhc2VfZW1tYSArIFBSUF9JTlRSX0NOVEwpOworfQorCitzdGF0aWMgaW50IG14Ml9jYW1lcmFfc2V0X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJX191MzIgcGl4Zm10KQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9CisJCXRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBteDJfY2FtZXJhX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CisJdW5zaWduZWQgbG9uZyBjYW1lcmFfZmxhZ3MsIGNvbW1vbl9mbGFnczsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgYnl0ZXNwZXJsaW5lOworCXUzMiBjc2ljcjEgPSBwY2Rldi0+Y3NpY3IxOworCisJY2FtZXJhX2ZsYWdzID0gaWNkLT5vcHMtPnF1ZXJ5X2J1c19wYXJhbShpY2QpOworCisJY29tbW9uX2ZsYWdzID0gc29jX2NhbWVyYV9idXNfcGFyYW1fY29tcGF0aWJsZShjYW1lcmFfZmxhZ3MsCisJCQkJTVgyX0JVU19GTEFHUyk7CisJaWYgKCFjb21tb25fZmxhZ3MpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKChjb21tb25fZmxhZ3MgJiBTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCkgJiYKKwkgICAgKGNvbW1vbl9mbGFncyAmIFNPQ0FNX0hTWU5DX0FDVElWRV9MT1cpKSB7CisJCWlmIChwY2Rldi0+cGxhdGZvcm1fZmxhZ3MgJiBNWDJfQ0FNRVJBX0hTWU5DX0hJR0gpCisJCQljb21tb25fZmxhZ3MgJj0gflNPQ0FNX0hTWU5DX0FDVElWRV9MT1c7CisJCWVsc2UKKwkJCWNvbW1vbl9mbGFncyAmPSB+U09DQU1fSFNZTkNfQUNUSVZFX0hJR0g7CisJfQorCisJaWYgKChjb21tb25fZmxhZ3MgJiBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcpICYmCisJICAgIChjb21tb25fZmxhZ3MgJiBTT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HKSkgeworCQlpZiAocGNkZXYtPnBsYXRmb3JtX2ZsYWdzICYgTVgyX0NBTUVSQV9QQ0xLX1NBTVBMRV9SSVNJTkcpCisJCQljb21tb25fZmxhZ3MgJj0gflNPQ0FNX1BDTEtfU0FNUExFX0ZBTExJTkc7CisJCWVsc2UKKwkJCWNvbW1vbl9mbGFncyAmPSB+U09DQU1fUENMS19TQU1QTEVfUklTSU5HOworCX0KKworCXJldCA9IGljZC0+b3BzLT5zZXRfYnVzX3BhcmFtKGljZCwgY29tbW9uX2ZsYWdzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChjb21tb25fZmxhZ3MgJiBTT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HKQorCQljc2ljcjEgfD0gQ1NJQ1IxX0lOVl9QQ0xLOworCWlmIChjb21tb25fZmxhZ3MgJiBTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCkKKwkJY3NpY3IxIHw9IENTSUNSMV9TT0ZfUE9MOworCWlmIChjb21tb25fZmxhZ3MgJiBTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCkKKwkJY3NpY3IxIHw9IENTSUNSMV9IU1lOQ19QT0w7CisJaWYgKHBjZGV2LT5wbGF0Zm9ybV9mbGFncyAmIE1YMl9DQU1FUkFfU1dBUDE2KQorCQljc2ljcjEgfD0gQ1NJQ1IxX1NXQVAxNl9FTjsKKwlpZiAocGNkZXYtPnBsYXRmb3JtX2ZsYWdzICYgTVgyX0NBTUVSQV9FWFRfVlNZTkMpCisJCWNzaWNyMSB8PSBDU0lDUjFfRVhUX1ZTWU5DOworCWlmIChwY2Rldi0+cGxhdGZvcm1fZmxhZ3MgJiBNWDJfQ0FNRVJBX0NDSVIpCisJCWNzaWNyMSB8PSBDU0lDUjFfQ0NJUl9FTjsKKwlpZiAocGNkZXYtPnBsYXRmb3JtX2ZsYWdzICYgTVgyX0NBTUVSQV9DQ0lSX0lOVEVSTEFDRSkKKwkJY3NpY3IxIHw9IENTSUNSMV9DQ0lSX01PREU7CisJaWYgKHBjZGV2LT5wbGF0Zm9ybV9mbGFncyAmIE1YMl9DQU1FUkFfR0FURURfQ0xPQ0spCisJCWNzaWNyMSB8PSBDU0lDUjFfR0NMS19NT0RFOworCWlmIChwY2Rldi0+cGxhdGZvcm1fZmxhZ3MgJiBNWDJfQ0FNRVJBX0lOVl9EQVRBKQorCQljc2ljcjEgfD0gQ1NJQ1IxX0lOVl9EQVRBOworCWlmIChwY2Rldi0+cGxhdGZvcm1fZmxhZ3MgJiBNWDJfQ0FNRVJBX1BBQ0tfRElSX01TQikKKwkJY3NpY3IxIHw9IENTSUNSMV9QQUNLX0RJUjsKKworCXBjZGV2LT5jc2ljcjEgPSBjc2ljcjE7CisKKwlieXRlc3BlcmxpbmUgPSBzb2NfbWJ1c19ieXRlc19wZXJfbGluZShpY2QtPnVzZXJfd2lkdGgsCisJCQlpY2QtPmN1cnJlbnRfZm10LT5ob3N0X2ZtdCk7CisJaWYgKGJ5dGVzcGVybGluZSA8IDApCisJCXJldHVybiBieXRlc3BlcmxpbmU7CisKKwlpZiAobXgyN19jYW1lcmFfZW1tYShwY2RldikpIHsKKwkJcmV0ID0gbXgyN19jYW1lcmFfZW1tYV9wcnBfcmVzZXQocGNkZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlpZiAocGNkZXYtPmRpc2NhcmRfYnVmZmVyKQorCQkJZG1hX2ZyZWVfY29oZXJlbnQoaWNpLT52NGwyX2Rldi5kZXYsCisJCQkJcGNkZXYtPmRpc2NhcmRfc2l6ZSwgcGNkZXYtPmRpc2NhcmRfYnVmZmVyLAorCQkJCXBjZGV2LT5kaXNjYXJkX2J1ZmZlcl9kbWEpOworCisJCS8qCisJCSAqIEkgZGlkbid0IG1hbmFnZSB0byBwcm9wZXJseSBlbmFibGUvZGlzYWJsZSB0aGUgcHJwCisJCSAqIG9uIGEgcGVyIGZyYW1lIGJhc2lzIGR1cmluZyBydW5uaW5nIHRyYW5zZmVycywKKwkJICogdGh1cyB3ZSBhbGxvY2F0ZSBhIGJ1ZmZlciBoZXJlIGFuZCB1c2UgaXQgdG8KKwkJICogZGlzY2FyZCBmcmFtZXMgd2hlbiBubyBidWZmZXIgaXMgYXZhaWxhYmxlLgorCQkgKiBGZWVsIGZyZWUgdG8gd29yayBvbiB0aGlzIDspCisJCSAqLworCQlwY2Rldi0+ZGlzY2FyZF9zaXplID0gaWNkLT51c2VyX2hlaWdodCAqIGJ5dGVzcGVybGluZTsKKwkJcGNkZXYtPmRpc2NhcmRfYnVmZmVyID0gZG1hX2FsbG9jX2NvaGVyZW50KGljaS0+djRsMl9kZXYuZGV2LAorCQkJCXBjZGV2LT5kaXNjYXJkX3NpemUsICZwY2Rldi0+ZGlzY2FyZF9idWZmZXJfZG1hLAorCQkJCUdGUF9LRVJORUwpOworCQlpZiAoIXBjZGV2LT5kaXNjYXJkX2J1ZmZlcikKKwkJCXJldHVybiAtRU5PTUVNOworCisJCW14MjdfY2FtZXJhX2VtbWFfYnVmX2luaXQoaWNkLCBieXRlc3BlcmxpbmUpOworCX0gZWxzZSBpZiAoY3B1X2lzX214MjUoKSkgeworCQl3cml0ZWwoKGJ5dGVzcGVybGluZSAqIGljZC0+dXNlcl9oZWlnaHQpID4+IDIsCisJCQkJcGNkZXYtPmJhc2VfY3NpICsgQ1NJUlhDTlQpOworCQl3cml0ZWwoKGJ5dGVzcGVybGluZSA8PCAxNikgfCBpY2QtPnVzZXJfaGVpZ2h0LAorCQkJCXBjZGV2LT5iYXNlX2NzaSArIENTSUlNQUdfUEFSQSk7CisJfQorCisJd3JpdGVsKHBjZGV2LT5jc2ljcjEsIHBjZGV2LT5iYXNlX2NzaSArIENTSUNSMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteDJfY2FtZXJhX3NldF9jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJCXN0cnVjdCB2NGwyX2Nyb3AgKmEpCit7CisJc3RydWN0IHY0bDJfcmVjdCAqcmVjdCA9ICZhLT5jOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOworCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgbWY7CisJaW50IHJldDsKKworCXNvY19jYW1lcmFfbGltaXRfc2lkZSgmcmVjdC0+bGVmdCwgJnJlY3QtPndpZHRoLCAwLCAyLCA0MDk2KTsKKwlzb2NfY2FtZXJhX2xpbWl0X3NpZGUoJnJlY3QtPnRvcCwgJnJlY3QtPmhlaWdodCwgMCwgMiwgNDA5Nik7CisKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19jcm9wLCBhKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFRoZSBjYXB0dXJlIGRldmljZSBtaWdodCBoYXZlIGNoYW5nZWQgaXRzIG91dHB1dCAgKi8KKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgZ19tYnVzX2ZtdCwgJm1mKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWRldl9kYmcoaWNkLT5kZXYucGFyZW50LCAiU2Vuc29yIGNyb3BwZWQgJWR4JWRcbiIsCisJCW1mLndpZHRoLCBtZi5oZWlnaHQpOworCisJaWNkLT51c2VyX3dpZHRoCQk9IG1mLndpZHRoOworCWljZC0+dXNlcl9oZWlnaHQJPSBtZi5oZWlnaHQ7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG14Ml9jYW1lcmFfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IG14Ml9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKKwljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgbWY7CisJaW50IHJldDsKKworCXhsYXRlID0gc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoaWNkLCBwaXgtPnBpeGVsZm9ybWF0KTsKKwlpZiAoIXhsYXRlKSB7CisJCWRldl93YXJuKGljZC0+ZGV2LnBhcmVudCwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsCisJCQkJcGl4LT5waXhlbGZvcm1hdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGVNTUEgY2FuIG9ubHkgZG8gUkdCNTY1ICovCisJaWYgKG14MjdfY2FtZXJhX2VtbWEocGNkZXYpICYmIHBpeC0+cGl4ZWxmb3JtYXQgIT0gVjRMMl9QSVhfRk1UX1JHQjU2NSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZi53aWR0aAk9IHBpeC0+d2lkdGg7CisJbWYuaGVpZ2h0CT0gcGl4LT5oZWlnaHQ7CisJbWYuZmllbGQJPSBwaXgtPmZpZWxkOworCW1mLmNvbG9yc3BhY2UJPSBwaXgtPmNvbG9yc3BhY2U7CisJbWYuY29kZQkJPSB4bGF0ZS0+Y29kZTsKKworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX21idXNfZm10LCAmbWYpOworCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRU5PSU9DVExDTUQpCisJCXJldHVybiByZXQ7CisKKwlpZiAobWYuY29kZSAhPSB4bGF0ZS0+Y29kZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwaXgtPndpZHRoCQk9IG1mLndpZHRoOworCXBpeC0+aGVpZ2h0CQk9IG1mLmhlaWdodDsKKwlwaXgtPmZpZWxkCQk9IG1mLmZpZWxkOworCXBpeC0+Y29sb3JzcGFjZQkJPSBtZi5jb2xvcnNwYWNlOworCWljZC0+Y3VycmVudF9mbXQJPSB4bGF0ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG14Ml9jYW1lcmFfdHJ5X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCQkgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgbXgyX2NhbWVyYV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOworCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGU7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCBtZjsKKwlfX3UzMiBwaXhmbXQgPSBwaXgtPnBpeGVsZm9ybWF0OworCXVuc2lnbmVkIGludCB3aWR0aF9saW1pdDsKKwlpbnQgcmV0OworCisJeGxhdGUgPSBzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYyhpY2QsIHBpeGZtdCk7CisJaWYgKHBpeGZtdCAmJiAheGxhdGUpIHsKKwkJZGV2X3dhcm4oaWNkLT5kZXYucGFyZW50LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4Zm10KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogRklYTUU6IGltcGxlbWVudCBNWDI3IGxpbWl0cyAqLworCisJLyogZU1NQSBjYW4gb25seSBkbyBSR0I1NjUgKi8KKwlpZiAobXgyN19jYW1lcmFfZW1tYShwY2RldikgJiYgcGl4Zm10ICE9IFY0TDJfUElYX0ZNVF9SR0I1NjUpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogbGltaXQgdG8gTVgyNSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgKi8KKwlpZiAoY3B1X2lzX214MjUoKSkgeworCQlpZiAoeGxhdGUtPmhvc3RfZm10LT5iaXRzX3Blcl9zYW1wbGUgPD0gOCkKKwkJCXdpZHRoX2xpbWl0ID0gMHhmZmZmICogNDsKKwkJZWxzZQorCQkJd2lkdGhfbGltaXQgPSAweGZmZmYgKiAyOworCQkvKiBDU0lJTUFHX1BBUkEgbGltaXQgKi8KKwkJaWYgKHBpeC0+d2lkdGggPiB3aWR0aF9saW1pdCkKKwkJCXBpeC0+d2lkdGggPSB3aWR0aF9saW1pdDsKKwkJaWYgKHBpeC0+aGVpZ2h0ID4gMHhmZmZmKQorCQkJcGl4LT5oZWlnaHQgPSAweGZmZmY7CisKKwkJcGl4LT5ieXRlc3BlcmxpbmUgPSBzb2NfbWJ1c19ieXRlc19wZXJfbGluZShwaXgtPndpZHRoLAorCQkJCXhsYXRlLT5ob3N0X2ZtdCk7CisJCWlmIChwaXgtPmJ5dGVzcGVybGluZSA8IDApCisJCQlyZXR1cm4gcGl4LT5ieXRlc3BlcmxpbmU7CisJCXBpeC0+c2l6ZWltYWdlID0gcGl4LT5oZWlnaHQgKiBwaXgtPmJ5dGVzcGVybGluZTsKKwkJaWYgKHBpeC0+c2l6ZWltYWdlID4gKDQgKiAweDNmZmZmKSkgeyAvKiBDU0lSWENOVCBsaW1pdCAqLworCQkJZGV2X3dhcm4oaWNkLT5kZXYucGFyZW50LAorCQkJCQkiSW1hZ2Ugc2l6ZSAoJXUpIGFib3ZlIGxpbWl0XG4iLAorCQkJCQlwaXgtPnNpemVpbWFnZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCS8qIGxpbWl0IHRvIHNlbnNvciBjYXBhYmlsaXRpZXMgKi8KKwltZi53aWR0aAk9IHBpeC0+d2lkdGg7CisJbWYuaGVpZ2h0CT0gcGl4LT5oZWlnaHQ7CisJbWYuZmllbGQJPSBwaXgtPmZpZWxkOworCW1mLmNvbG9yc3BhY2UJPSBwaXgtPmNvbG9yc3BhY2U7CisJbWYuY29kZQkJPSB4bGF0ZS0+Y29kZTsKKworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCB0cnlfbWJ1c19mbXQsICZtZik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAobWYuZmllbGQgPT0gVjRMMl9GSUVMRF9BTlkpCisJCW1mLmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCWlmIChtZi5maWVsZCAhPSBWNEwyX0ZJRUxEX05PTkUpIHsKKwkJZGV2X2VycihpY2QtPmRldi5wYXJlbnQsICJGaWVsZCB0eXBlICVkIHVuc3VwcG9ydGVkLlxuIiwKKwkJCQltZi5maWVsZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXBpeC0+d2lkdGgJPSBtZi53aWR0aDsKKwlwaXgtPmhlaWdodAk9IG1mLmhlaWdodDsKKwlwaXgtPmZpZWxkCT0gbWYuZmllbGQ7CisJcGl4LT5jb2xvcnNwYWNlCT0gbWYuY29sb3JzcGFjZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG14Ml9jYW1lcmFfcXVlcnljYXAoc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpLAorCQkJICAgICAgIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKK3sKKwkvKiBjYXAtPm5hbWUgaXMgc2V0IGJ5IHRoZSBmcmllbmRseSBjYWxsZXI6LT4gKi8KKwlzdHJsY3B5KGNhcC0+Y2FyZCwgTVgyX0NBTV9EUklWRVJfREVTQ1JJUFRJT04sIHNpemVvZihjYXAtPmNhcmQpKTsKKwljYXAtPnZlcnNpb24gPSBNWDJfQ0FNX1ZFUlNJT05fQ09ERTsKKwljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteDJfY2FtZXJhX3JlcWJ1ZnMoc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmLAorCQkJICAgICAgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcC0+Y291bnQ7IGkrKykgeworCQlzdHJ1Y3QgbXgyX2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKGljZi0+dmJfdmlkcS5idWZzW2ldLAorCQkJCQkJICAgICAgc3RydWN0IG14Ml9idWZmZXIsIHZiKTsKKwkJSU5JVF9MSVNUX0hFQUQoJmJ1Zi0+dmIucXVldWUpOworCX0KKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX01BQ0hfTVgyNworc3RhdGljIHZvaWQgbXgyN19jYW1lcmFfZnJhbWVfZG9uZShzdHJ1Y3QgbXgyX2NhbWVyYV9kZXYgKnBjZGV2LCBpbnQgc3RhdGUpCit7CisJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmI7CisJc3RydWN0IG14Ml9idWZmZXIgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGNkZXYtPmxvY2ssIGZsYWdzKTsKKworCWlmICghcGNkZXYtPmFjdGl2ZSkgeworCQlkZXZfZXJyKHBjZGV2LT5kZXYsICIlcyBjYWxsZWQgd2l0aCBubyBhY3RpdmUgYnVmZmVyIVxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCWdvdG8gb3V0OworCX0KKworCXZiID0gJnBjZGV2LT5hY3RpdmUtPnZiOworCWJ1ZiA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IG14Ml9idWZmZXIsIHZiKTsKKwlXQVJOX09OKGxpc3RfZW1wdHkoJnZiLT5xdWV1ZSkpOworCWRldl9kYmcocGNkZXYtPmRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKKwkJdmIsIHZiLT5iYWRkciwgdmItPmJzaXplKTsKKworCS8qIF9pbml0IGlzIHVzZWQgdG8gZGVidWcgcmFjZXMsIHNlZSBjb21tZW50IGluIHB4YV9jYW1lcmFfcmVxYnVmcygpICovCisJbGlzdF9kZWxfaW5pdCgmdmItPnF1ZXVlKTsKKwl2Yi0+c3RhdGUgPSBzdGF0ZTsKKwlkb19nZXR0aW1lb2ZkYXkoJnZiLT50cyk7CisJdmItPmZpZWxkX2NvdW50Kys7CisKKwl3YWtlX3VwKCZ2Yi0+ZG9uZSk7CisKKwlpZiAobGlzdF9lbXB0eSgmcGNkZXYtPmNhcHR1cmUpKSB7CisJCXBjZGV2LT5hY3RpdmUgPSBOVUxMOworCQlnb3RvIG91dDsKKwl9CisKKwlwY2Rldi0+YWN0aXZlID0gbGlzdF9lbnRyeShwY2Rldi0+Y2FwdHVyZS5uZXh0LAorCQkJc3RydWN0IG14Ml9idWZmZXIsIHZiLnF1ZXVlKTsKKworCXZiID0gJnBjZGV2LT5hY3RpdmUtPnZiOworCXZiLT5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKworCXJldCA9IGlteF9kbWFfc2V0dXBfc2luZ2xlKHBjZGV2LT5kbWEsIHZpZGVvYnVmX3RvX2RtYV9jb250aWcodmIpLAorCQkJdmItPnNpemUsICh1MzIpcGNkZXYtPmJhc2VfZG1hICsgMHgxMCwgRE1BX01PREVfUkVBRCk7CisKKwlpZiAocmV0KSB7CisJCXZiLT5zdGF0ZSA9IFZJREVPQlVGX0VSUk9SOworCQlwY2Rldi0+YWN0aXZlID0gTlVMTDsKKwkJd2FrZV91cCgmdmItPmRvbmUpOworCX0KKworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjZGV2LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG14MjdfY2FtZXJhX2RtYV9lcnJfY2FsbGJhY2soaW50IGNoYW5uZWwsIHZvaWQgKmRhdGEsIGludCBlcnIpCit7CisJc3RydWN0IG14Ml9jYW1lcmFfZGV2ICpwY2RldiA9IGRhdGE7CisKKwlteDI3X2NhbWVyYV9mcmFtZV9kb25lKHBjZGV2LCBWSURFT0JVRl9FUlJPUik7Cit9CisKK3N0YXRpYyB2b2lkIG14MjdfY2FtZXJhX2RtYV9jYWxsYmFjayhpbnQgY2hhbm5lbCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbXgyX2NhbWVyYV9kZXYgKnBjZGV2ID0gZGF0YTsKKworCW14MjdfY2FtZXJhX2ZyYW1lX2RvbmUocGNkZXYsIFZJREVPQlVGX0RPTkUpOworfQorCisjZGVmaW5lIERNQV9SRVFfQ1NJX1JYICAgICAgICAgIDMxIC8qIEZJWE1FOiBBZGQgdGhpcyB0byBhIHJlc291cmNlICovCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG14MjdfY2FtZXJhX2RtYV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCXN0cnVjdCBteDJfY2FtZXJhX2RldiAqcGNkZXYpCit7CisJaW50IGVycjsKKworCXBjZGV2LT5kbWEgPSBpbXhfZG1hX3JlcXVlc3RfYnlfcHJpbygiQ1NJIFJYIERNQSIsIERNQV9QUklPX0hJR0gpOworCWlmIChwY2Rldi0+ZG1hIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlcyBmYWlsZWQgdG8gcmVxdWVzdCBETUEgY2hhbm5lbFxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCXJldHVybiBwY2Rldi0+ZG1hOworCX0KKworCWVyciA9IGlteF9kbWFfc2V0dXBfaGFuZGxlcnMocGNkZXYtPmRtYSwgbXgyN19jYW1lcmFfZG1hX2NhbGxiYWNrLAorCQkJCQlteDI3X2NhbWVyYV9kbWFfZXJyX2NhbGxiYWNrLCBwY2Rldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlcyBmYWlsZWQgdG8gc2V0IERNQSBjYWxsYmFja1xuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwllcnIgPSBpbXhfZG1hX2NvbmZpZ19jaGFubmVsKHBjZGV2LT5kbWEsCisJCQlJTVhfRE1BX01FTVNJWkVfMzIgfCBJTVhfRE1BX1RZUEVfRklGTywKKwkJCUlNWF9ETUFfTUVNU0laRV8zMiB8IElNWF9ETUFfVFlQRV9MSU5FQVIsCisJCQlETUFfUkVRX0NTSV9SWCwgMSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlcyBmYWlsZWQgdG8gY29uZmlnIERNQSBjaGFubmVsXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJZ290byBlcnJfb3V0OworCX0KKworCWlteF9kbWFfY29uZmlnX2J1cnN0bGVuKHBjZGV2LT5kbWEsIDY0KTsKKworCXJldHVybiAwOworCitlcnJfb3V0OgorCWlteF9kbWFfZnJlZShwY2Rldi0+ZG1hKTsKKworCXJldHVybiBlcnI7Cit9CisjZW5kaWYgLyogQ09ORklHX01BQ0hfTVgyNyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IG14Ml9jYW1lcmFfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqcHQpCit7CisJc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIHZpZGVvYnVmX3BvbGxfc3RyZWFtKGZpbGUsICZpY2YtPnZiX3ZpZHEsIHB0KTsKK30KKworc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2hvc3Rfb3BzIG14Ml9zb2NfY2FtZXJhX2hvc3Rfb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkuYWRkCQk9IG14Ml9jYW1lcmFfYWRkX2RldmljZSwKKwkucmVtb3ZlCQk9IG14Ml9jYW1lcmFfcmVtb3ZlX2RldmljZSwKKwkuc2V0X2ZtdAk9IG14Ml9jYW1lcmFfc2V0X2ZtdCwKKwkuc2V0X2Nyb3AJPSBteDJfY2FtZXJhX3NldF9jcm9wLAorCS50cnlfZm10CT0gbXgyX2NhbWVyYV90cnlfZm10LAorCS5pbml0X3ZpZGVvYnVmCT0gbXgyX2NhbWVyYV9pbml0X3ZpZGVvYnVmLAorCS5yZXFidWZzCT0gbXgyX2NhbWVyYV9yZXFidWZzLAorCS5wb2xsCQk9IG14Ml9jYW1lcmFfcG9sbCwKKwkucXVlcnljYXAJPSBteDJfY2FtZXJhX3F1ZXJ5Y2FwLAorCS5zZXRfYnVzX3BhcmFtCT0gbXgyX2NhbWVyYV9zZXRfYnVzX3BhcmFtLAorfTsKKworc3RhdGljIHZvaWQgbXgyN19jYW1lcmFfZnJhbWVfZG9uZV9lbW1hKHN0cnVjdCBteDJfY2FtZXJhX2RldiAqcGNkZXYsCisJCWludCBidWZudW0sIGludCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgbXgyX2J1ZmZlciAqYnVmOworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiOworCXVuc2lnbmVkIGxvbmcgcGh5czsKKworCWlmICghbGlzdF9lbXB0eSgmcGNkZXYtPmFjdGl2ZV9idWZzKSkgeworCQlidWYgPSBsaXN0X2VudHJ5KHBjZGV2LT5hY3RpdmVfYnVmcy5uZXh0LAorCQkJc3RydWN0IG14Ml9idWZmZXIsIHZiLnF1ZXVlKTsKKworCQlCVUdfT04oYnVmLT5idWZudW0gIT0gYnVmbnVtKTsKKworCQl2YiA9ICZidWYtPnZiOworI2lmZGVmIERFQlVHCisJCXBoeXMgPSB2aWRlb2J1Zl90b19kbWFfY29udGlnKHZiKTsKKwkJaWYgKHJlYWRsKHBjZGV2LT5iYXNlX2VtbWEgKyBQUlBfREVTVF9SR0IxX1BUUiArIDQgKiBidWZudW0pCisJCQkJIT0gcGh5cykgeworCQkJZGV2X2VycihwY2Rldi0+ZGV2LCAiJXAgIT0gJXBcbiIsIHBoeXMsCisJCQkJCXJlYWRsKHBjZGV2LT5iYXNlX2VtbWEgKworCQkJCQkJUFJQX0RFU1RfUkdCMV9QVFIgKworCQkJCQkJNCAqIGJ1Zm51bSkpOworCQl9CisjZW5kaWYKKwkJZGV2X2RiZyhwY2Rldi0+ZGV2LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJWRcbiIsIF9fZnVuY19fLCB2YiwKKwkJCQl2Yi0+YmFkZHIsIHZiLT5ic2l6ZSk7CisKKwkJbGlzdF9kZWwoJnZiLT5xdWV1ZSk7CisJCXZiLT5zdGF0ZSA9IHN0YXRlOworCQlkb19nZXR0aW1lb2ZkYXkoJnZiLT50cyk7CisJCXZiLT5maWVsZF9jb3VudCsrOworCisJCXdha2VfdXAoJnZiLT5kb25lKTsKKwl9CisKKwlpZiAobGlzdF9lbXB0eSgmcGNkZXYtPmNhcHR1cmUpKSB7CisJCXdyaXRlbChwY2Rldi0+ZGlzY2FyZF9idWZmZXJfZG1hLCBwY2Rldi0+YmFzZV9lbW1hICsKKwkJCQlQUlBfREVTVF9SR0IxX1BUUiArIDQgKiBidWZudW0pOworCQlyZXR1cm47CisJfQorCisJYnVmID0gbGlzdF9lbnRyeShwY2Rldi0+Y2FwdHVyZS5uZXh0LAorCQkJc3RydWN0IG14Ml9idWZmZXIsIHZiLnF1ZXVlKTsKKworCWJ1Zi0+YnVmbnVtID0gYnVmbnVtOworCisJbGlzdF9tb3ZlX3RhaWwocGNkZXYtPmNhcHR1cmUubmV4dCwgJnBjZGV2LT5hY3RpdmVfYnVmcyk7CisKKwl2YiA9ICZidWYtPnZiOworCXZiLT5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKworCXBoeXMgPSB2aWRlb2J1Zl90b19kbWFfY29udGlnKHZiKTsKKwl3cml0ZWwocGh5cywgcGNkZXYtPmJhc2VfZW1tYSArIFBSUF9ERVNUX1JHQjFfUFRSICsgNCAqIGJ1Zm51bSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBteDI3X2NhbWVyYV9lbW1hX2lycShpbnQgaXJxX2VtbWEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG14Ml9jYW1lcmFfZGV2ICpwY2RldiA9IGRhdGE7CisJdW5zaWduZWQgaW50IHN0YXR1cyA9IHJlYWRsKHBjZGV2LT5iYXNlX2VtbWEgKyBQUlBfSU5UUlNUQVRVUyk7CisJc3RydWN0IG14Ml9idWZmZXIgKmJ1ZjsKKworCWlmIChzdGF0dXMgJiAoMSA8PCA3KSkgeyAvKiBvdmVyZmxvdyAqLworCQl1MzIgY250bDsKKwkJLyoKKwkJICogV2Ugb25seSBkaXNhYmxlIGNoYW5uZWwgMSBoZXJlIHNpbmNlIHRoaXMgaXMgdGhlIG9ubHkKKwkJICogZW5hYmxlZCBjaGFubmVsCisJCSAqCisJCSAqIEZJWE1FOiB0aGUgY29ycmVjdCBETUEgb3ZlcmZsb3cgaGFuZGxpbmcgc2hvdWxkIGJlIHJlc2V0dGluZworCQkgKiB0aGUgYnVmZmVyLCByZXR1cm5pbmcgYW4gZXJyb3IgZnJhbWUsIGFuZCBjb250aW51aW5nIHdpdGgKKwkJICogdGhlIG5leHQgb25lLgorCQkgKi8KKwkJY250bCA9IHJlYWRsKHBjZGV2LT5iYXNlX2VtbWEgKyBQUlBfQ05UTCk7CisJCXdyaXRlbChjbnRsICYgflBSUF9DTlRMX0NIMUVOLCBwY2Rldi0+YmFzZV9lbW1hICsgUFJQX0NOVEwpOworCQl3cml0ZWwoY250bCwgcGNkZXYtPmJhc2VfZW1tYSArIFBSUF9DTlRMKTsKKwl9CisJaWYgKChzdGF0dXMgJiAoMyA8PCA1KSkgPT0gKDMgPDwgNSkKKwkJCSYmICFsaXN0X2VtcHR5KCZwY2Rldi0+YWN0aXZlX2J1ZnMpKSB7CisJCS8qCisJCSAqIEJvdGggYnVmZmVycyBoYXZlIHRyaWdnZXJlZCwgcHJvY2VzcyB0aGUgb25lIHdlJ3JlIGV4cGVjdGluZworCQkgKiB0byBmaXJzdAorCQkgKi8KKwkJYnVmID0gbGlzdF9lbnRyeShwY2Rldi0+YWN0aXZlX2J1ZnMubmV4dCwKKwkJCXN0cnVjdCBteDJfYnVmZmVyLCB2Yi5xdWV1ZSk7CisJCW14MjdfY2FtZXJhX2ZyYW1lX2RvbmVfZW1tYShwY2RldiwgYnVmLT5idWZudW0sIFZJREVPQlVGX0RPTkUpOworCQlzdGF0dXMgJj0gfigxIDw8ICg2IC0gYnVmLT5idWZudW0pKTsgLyogbWFyayBwcm9jZXNzZWQgKi8KKwl9CisJaWYgKHN0YXR1cyAmICgxIDw8IDYpKQorCQlteDI3X2NhbWVyYV9mcmFtZV9kb25lX2VtbWEocGNkZXYsIDAsIFZJREVPQlVGX0RPTkUpOworCWlmIChzdGF0dXMgJiAoMSA8PCA1KSkKKwkJbXgyN19jYW1lcmFfZnJhbWVfZG9uZV9lbW1hKHBjZGV2LCAxLCBWSURFT0JVRl9ET05FKTsKKworCXdyaXRlbChzdGF0dXMsIHBjZGV2LT5iYXNlX2VtbWEgKyBQUlBfSU5UUlNUQVRVUyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG14MjdfY2FtZXJhX2VtbWFfaW5pdChzdHJ1Y3QgbXgyX2NhbWVyYV9kZXYgKnBjZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzX2VtbWEgPSBwY2Rldi0+cmVzX2VtbWE7CisJaW50IGVyciA9IDA7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXNfZW1tYS0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzX2VtbWEpLAorCQkJCU1YMl9DQU1fRFJWX05BTUUpKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJcGNkZXYtPmJhc2VfZW1tYSA9IGlvcmVtYXAocmVzX2VtbWEtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlc19lbW1hKSk7CisJaWYgKCFwY2Rldi0+YmFzZV9lbW1hKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXhpdF9yZWxlYXNlOworCX0KKworCWVyciA9IHJlcXVlc3RfaXJxKHBjZGV2LT5pcnFfZW1tYSwgbXgyN19jYW1lcmFfZW1tYV9pcnEsIDAsCisJCQlNWDJfQ0FNX0RSVl9OQU1FLCBwY2Rldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKHBjZGV2LT5kZXYsICJDYW1lcmEgRU1NQSBpbnRlcnJ1cHQgcmVnaXN0ZXIgZmFpbGVkIFxuIik7CisJCWdvdG8gZXhpdF9pb3VubWFwOworCX0KKworCXBjZGV2LT5jbGtfZW1tYSA9IGNsa19nZXQoTlVMTCwgImVtbWEiKTsKKwlpZiAoSVNfRVJSKHBjZGV2LT5jbGtfZW1tYSkpIHsKKwkJZXJyID0gUFRSX0VSUihwY2Rldi0+Y2xrX2VtbWEpOworCQlnb3RvIGV4aXRfZnJlZV9pcnE7CisJfQorCisJY2xrX2VuYWJsZShwY2Rldi0+Y2xrX2VtbWEpOworCisJZXJyID0gbXgyN19jYW1lcmFfZW1tYV9wcnBfcmVzZXQocGNkZXYpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdF9jbGtfZW1tYV9wdXQ7CisKKwlyZXR1cm4gZXJyOworCitleGl0X2Nsa19lbW1hX3B1dDoKKwljbGtfZGlzYWJsZShwY2Rldi0+Y2xrX2VtbWEpOworCWNsa19wdXQocGNkZXYtPmNsa19lbW1hKTsKK2V4aXRfZnJlZV9pcnE6CisJZnJlZV9pcnEocGNkZXYtPmlycV9lbW1hLCBwY2Rldik7CitleGl0X2lvdW5tYXA6CisJaW91bm1hcChwY2Rldi0+YmFzZV9lbW1hKTsKK2V4aXRfcmVsZWFzZToKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzX2VtbWEtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlc19lbW1hKSk7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbXgyX2NhbWVyYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBteDJfY2FtZXJhX2RldiAqcGNkZXY7CisJc3RydWN0IHJlc291cmNlICpyZXNfY3NpLCAqcmVzX2VtbWE7CisJdm9pZCBfX2lvbWVtICpiYXNlX2NzaTsKKwlpbnQgaXJxX2NzaSwgaXJxX2VtbWE7CisJaXJxX2hhbmRsZXJfdCBteDJfY2FtX2lycV9oYW5kbGVyID0gY3B1X2lzX214MjUoKSA/IG14MjVfY2FtZXJhX2lycQorCQk6IG14MjdfY2FtZXJhX2lycTsKKwlpbnQgZXJyID0gMDsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgImluaXRpYWxpc2luZ1xuIik7CisKKwlyZXNfY3NpID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpcnFfY3NpID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAocmVzX2NzaSA9PSBOVUxMIHx8IGlycV9jc2kgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk1pc3NpbmcgcGxhdGZvcm0gcmVzb3VyY2VzIGRhdGFcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGV4aXQ7CisJfQorCisJcGNkZXYgPSBremFsbG9jKHNpemVvZigqcGNkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBjZGV2KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBwY2RldlxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXhpdDsKKwl9CisKKwlwY2Rldi0+Y2xrX2NzaSA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihwY2Rldi0+Y2xrX2NzaSkpIHsKKwkJZXJyID0gUFRSX0VSUihwY2Rldi0+Y2xrX2NzaSk7CisJCWdvdG8gZXhpdF9rZnJlZTsKKwl9CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJDYW1lcmEgY2xvY2sgZnJlcXVlbmN5OiAlbGRcbiIsCisJCQljbGtfZ2V0X3JhdGUocGNkZXYtPmNsa19jc2kpKTsKKworCS8qIEluaXRpYWxpemUgRE1BICovCisjaWZkZWYgQ09ORklHX01BQ0hfTVgyNworCWlmIChjcHVfaXNfbXgyNygpKSB7CisJCWVyciA9IG14MjdfY2FtZXJhX2RtYV9pbml0KHBkZXYsIHBjZGV2KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXhpdF9jbGtfcHV0OworCX0KKyNlbmRpZiAvKiBDT05GSUdfTUFDSF9NWDI3ICovCisKKwlwY2Rldi0+cmVzX2NzaSA9IHJlc19jc2k7CisJcGNkZXYtPnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKHBjZGV2LT5wZGF0YSkgeworCQlsb25nIHJhdGU7CisKKwkJcGNkZXYtPnBsYXRmb3JtX2ZsYWdzID0gcGNkZXYtPnBkYXRhLT5mbGFnczsKKworCQlyYXRlID0gY2xrX3JvdW5kX3JhdGUocGNkZXYtPmNsa19jc2ksIHBjZGV2LT5wZGF0YS0+Y2xrICogMik7CisJCWlmIChyYXRlIDw9IDApIHsKKwkJCWVyciA9IC1FTk9ERVY7CisJCQlnb3RvIGV4aXRfZG1hX2ZyZWU7CisJCX0KKwkJZXJyID0gY2xrX3NldF9yYXRlKHBjZGV2LT5jbGtfY3NpLCByYXRlKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGV4aXRfZG1hX2ZyZWU7CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJnBjZGV2LT5jYXB0dXJlKTsKKwlJTklUX0xJU1RfSEVBRCgmcGNkZXYtPmFjdGl2ZV9idWZzKTsKKwlzcGluX2xvY2tfaW5pdCgmcGNkZXYtPmxvY2spOworCisJLyoKKwkgKiBSZXF1ZXN0IHRoZSByZWdpb25zLgorCSAqLworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlc19jc2ktPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlc19jc2kpLAorCQkJCU1YMl9DQU1fRFJWX05BTUUpKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBleGl0X2RtYV9mcmVlOworCX0KKworCWJhc2VfY3NpID0gaW9yZW1hcChyZXNfY3NpLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXNfY3NpKSk7CisJaWYgKCFiYXNlX2NzaSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGV4aXRfcmVsZWFzZTsKKwl9CisJcGNkZXYtPmlycV9jc2kgPSBpcnFfY3NpOworCXBjZGV2LT5iYXNlX2NzaSA9IGJhc2VfY3NpOworCXBjZGV2LT5iYXNlX2RtYSA9IHJlc19jc2ktPnN0YXJ0OworCXBjZGV2LT5kZXYgPSAmcGRldi0+ZGV2OworCisJZXJyID0gcmVxdWVzdF9pcnEocGNkZXYtPmlycV9jc2ksIG14Ml9jYW1faXJxX2hhbmRsZXIsIDAsCisJCQlNWDJfQ0FNX0RSVl9OQU1FLCBwY2Rldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKHBjZGV2LT5kZXYsICJDYW1lcmEgaW50ZXJydXB0IHJlZ2lzdGVyIGZhaWxlZCBcbiIpOworCQlnb3RvIGV4aXRfaW91bm1hcDsKKwl9CisKKwlpZiAoY3B1X2lzX214MjcoKSkgeworCQkvKiBFTU1BIHN1cHBvcnQgKi8KKwkJcmVzX2VtbWEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCQlpcnFfZW1tYSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMSk7CisKKwkJaWYgKHJlc19lbW1hICYmIGlycV9lbW1hID49IDApIHsKKwkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJVc2luZyBFTU1BXG4iKTsKKwkJCXBjZGV2LT51c2VfZW1tYSA9IDE7CisJCQlwY2Rldi0+cmVzX2VtbWEgPSByZXNfZW1tYTsKKwkJCXBjZGV2LT5pcnFfZW1tYSA9IGlycV9lbW1hOworCQkJaWYgKG14MjdfY2FtZXJhX2VtbWFfaW5pdChwY2RldikpCisJCQkJZ290byBleGl0X2ZyZWVfaXJxOworCQl9CisJfQorCisJcGNkZXYtPnNvY19ob3N0LmRydl9uYW1lCT0gTVgyX0NBTV9EUlZfTkFNRSwKKwlwY2Rldi0+c29jX2hvc3Qub3BzCQk9ICZteDJfc29jX2NhbWVyYV9ob3N0X29wcywKKwlwY2Rldi0+c29jX2hvc3QucHJpdgkJPSBwY2RldjsKKwlwY2Rldi0+c29jX2hvc3QudjRsMl9kZXYuZGV2CT0gJnBkZXYtPmRldjsKKwlwY2Rldi0+c29jX2hvc3QubnIJCT0gcGRldi0+aWQ7CisJZXJyID0gc29jX2NhbWVyYV9ob3N0X3JlZ2lzdGVyKCZwY2Rldi0+c29jX2hvc3QpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdF9mcmVlX2VtbWE7CisKKwlyZXR1cm4gMDsKKworZXhpdF9mcmVlX2VtbWE6CisJaWYgKG14MjdfY2FtZXJhX2VtbWEocGNkZXYpKSB7CisJCWZyZWVfaXJxKHBjZGV2LT5pcnFfZW1tYSwgcGNkZXYpOworCQljbGtfZGlzYWJsZShwY2Rldi0+Y2xrX2VtbWEpOworCQljbGtfcHV0KHBjZGV2LT5jbGtfZW1tYSk7CisJCWlvdW5tYXAocGNkZXYtPmJhc2VfZW1tYSk7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXNfZW1tYS0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzX2VtbWEpKTsKKwl9CitleGl0X2ZyZWVfaXJxOgorCWZyZWVfaXJxKHBjZGV2LT5pcnFfY3NpLCBwY2Rldik7CitleGl0X2lvdW5tYXA6CisJaW91bm1hcChiYXNlX2NzaSk7CitleGl0X3JlbGVhc2U6CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlc19jc2ktPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlc19jc2kpKTsKK2V4aXRfZG1hX2ZyZWU6CisjaWZkZWYgQ09ORklHX01BQ0hfTVgyNworCWlmIChjcHVfaXNfbXgyNygpKQorCQlpbXhfZG1hX2ZyZWUocGNkZXYtPmRtYSk7CitleGl0X2Nsa19wdXQ6CisJY2xrX3B1dChwY2Rldi0+Y2xrX2NzaSk7CisjZW5kaWYgLyogQ09ORklHX01BQ0hfTVgyNyAqLworZXhpdF9rZnJlZToKKwlrZnJlZShwY2Rldik7CitleGl0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG14Ml9jYW1lcmFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqc29jX2hvc3QgPSB0b19zb2NfY2FtZXJhX2hvc3QoJnBkZXYtPmRldik7CisJc3RydWN0IG14Ml9jYW1lcmFfZGV2ICpwY2RldiA9IGNvbnRhaW5lcl9vZihzb2NfaG9zdCwKKwkJCXN0cnVjdCBteDJfY2FtZXJhX2Rldiwgc29jX2hvc3QpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJY2xrX3B1dChwY2Rldi0+Y2xrX2NzaSk7CisjaWZkZWYgQ09ORklHX01BQ0hfTVgyNworCWlmIChjcHVfaXNfbXgyNygpKQorCQlpbXhfZG1hX2ZyZWUocGNkZXYtPmRtYSk7CisjZW5kaWYgLyogQ09ORklHX01BQ0hfTVgyNyAqLworCWZyZWVfaXJxKHBjZGV2LT5pcnFfY3NpLCBwY2Rldik7CisJaWYgKG14MjdfY2FtZXJhX2VtbWEocGNkZXYpKQorCQlmcmVlX2lycShwY2Rldi0+aXJxX2VtbWEsIHBjZGV2KTsKKworCXNvY19jYW1lcmFfaG9zdF91bnJlZ2lzdGVyKCZwY2Rldi0+c29jX2hvc3QpOworCisJaW91bm1hcChwY2Rldi0+YmFzZV9jc2kpOworCisJaWYgKG14MjdfY2FtZXJhX2VtbWEocGNkZXYpKSB7CisJCWNsa19kaXNhYmxlKHBjZGV2LT5jbGtfZW1tYSk7CisJCWNsa19wdXQocGNkZXYtPmNsa19lbW1hKTsKKwkJaW91bm1hcChwY2Rldi0+YmFzZV9lbW1hKTsKKwkJcmVzID0gcGNkZXYtPnJlc19lbW1hOworCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwl9CisKKwlyZXMgPSBwY2Rldi0+cmVzX2NzaTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKworCWtmcmVlKHBjZGV2KTsKKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJNWDIgQ2FtZXJhIGRyaXZlciB1bmxvYWRlZFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXgyX2NhbWVyYV9kcml2ZXIgPSB7CisJLmRyaXZlciAJPSB7CisJCS5uYW1lCT0gTVgyX0NBTV9EUlZfTkFNRSwKKwl9LAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobXgyX2NhbWVyYV9yZW1vdmUpLAorfTsKKworCitzdGF0aWMgaW50IF9faW5pdCBteDJfY2FtZXJhX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZteDJfY2FtZXJhX2RyaXZlciwgJm14Ml9jYW1lcmFfcHJvYmUpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbXgyX2NhbWVyYV9leGl0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZteDJfY2FtZXJhX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG14Ml9jYW1lcmFfaW5pdCk7Cittb2R1bGVfZXhpdChteDJfY2FtZXJhX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oImkuTVgyNy9pLk1YMjUgU29DIENhbWVyYSBIb3N0IGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiU2FzY2hhIEhhdWVyIDxzaGFAcGVuZ3V0cm9uaXguZGU+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcC9LY29uZmlnCmluZGV4IDk3YzUzOTQ5Li5lNjMyMzNmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwL0tjb25maWcKQEAgLTEsOCArMSw4IEBACiBjb25maWcgVklERU9fT01BUDJfVk9VVAogCXRyaXN0YXRlICJPTUFQMi9PTUFQMyBWNEwyLURpc3BsYXkgZHJpdmVyIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMjRYWCB8fCBBUkNIX09NQVAzNFhYCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyIHx8IEFSQ0hfT01BUDMKIAlzZWxlY3QgVklERU9CVUZfR0VOCi0Jc2VsZWN0IFZJREVPQlVGX0RNQV9TRworCXNlbGVjdCBWSURFT0JVRl9ETUFfQ09OVElHCiAJc2VsZWN0IE9NQVAyX0RTUwogCXNlbGVjdCBPTUFQMl9WUkFNCiAJc2VsZWN0IE9NQVAyX1ZSRkIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcC9NYWtlZmlsZQppbmRleCBiOGJhYjAwLi5iMjg3ODgwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcC9NYWtlZmlsZQpAQCAtMyw1ICszLDUgQEAKICMKIAogIyBPTUFQMi8zIERpc3BsYXkgZHJpdmVyCi1vbWFwLXZvdXQtbW9kLW9ianMgOj0gb21hcF92b3V0Lm8gb21hcF92b3V0bGliLm8KLW9iai0kKENPTkZJR19WSURFT19PTUFQMl9WT1VUKSArPSBvbWFwLXZvdXQtbW9kLm8KK29tYXAtdm91dC15IDo9IG9tYXBfdm91dC5vIG9tYXBfdm91dGxpYi5vCitvYmotJChDT05GSUdfVklERU9fT01BUDJfVk9VVCkgKz0gb21hcC12b3V0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcC9vbWFwX3ZvdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcC9vbWFwX3ZvdXQuYwppbmRleCBlN2RiMDU1NC4uNGVkNTFiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwL29tYXBfdm91dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcC9vbWFwX3ZvdXQuYwpAQCAtMzgsOCArMzgsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCi0jaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtZG1hLXNnLmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtZG1hLWNvbnRpZy5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogCkBAIC0xMDUzLDkgKzEwNTQsOSBAQAogCQkJICAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLAogCQkJICAgIGVudW0gdjRsMl9maWVsZCBmaWVsZCkKIHsKKwlkbWFfYWRkcl90IGRtYWJ1ZjsKIAlzdHJ1Y3QgdmlkX3ZyZmJfZG1hICp0eDsKIAllbnVtIGRzc19yb3RhdGlvbiByb3RhdGlvbjsKLQlzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWFidWYgPSBOVUxMOwogCXN0cnVjdCBvbWFwX3ZvdXRfZGV2aWNlICp2b3V0ID0gcS0+cHJpdl9kYXRhOwogCXUzMiBkZXN0X2ZyYW1lX2luZGV4ID0gMCwgc3JjX2VsZW1lbnRfaW5kZXggPSAwOwogCXUzMiBkZXN0X2VsZW1lbnRfaW5kZXggPSAwLCBzcmNfZnJhbWVfaW5kZXggPSAwOwpAQCAtMTA3NCwyNCArMTA3NSwxNyBAQAogCWlmIChWNEwyX01FTU9SWV9VU0VSUFRSID09IHZiLT5tZW1vcnkpIHsKIAkJaWYgKDAgPT0gdmItPmJhZGRyKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCS8qIFZpcnR1YWwgYWRkcmVzcyAqLwotCQkvKiBwcml2IHBvaW50cyB0byBzdHJ1Y3QgdmlkZW9idWZfcGNpX3NnX21lbW9yeS4gQnV0IHdlIHdlbnQKLQkJICogcG9pbnRlciB0byB2aWRlb2J1Zl9kbWFidWYsIHdoaWNoIGlzIG1lbWJlciBvZgotCQkgKiB2aWRlb2J1Zl9wY2lfc2dfbWVtb3J5ICovCi0JCWRtYWJ1ZiA9IHZpZGVvYnVmX3RvX2RtYShxLT5idWZzW3ZiLT5pXSk7Ci0JCWRtYWJ1Zi0+dm1hbGxvYyA9ICh2b2lkICopIHZiLT5iYWRkcjsKLQogCQkvKiBQaHlzaWNhbCBhZGRyZXNzICovCi0JCWRtYWJ1Zi0+YnVzX2FkZHIgPQotCQkJKGRtYV9hZGRyX3QpIG9tYXBfdm91dF91c2VydmlydF90b19waHlzKHZiLT5iYWRkcik7CisJCXZvdXQtPnF1ZXVlZF9idWZfYWRkclt2Yi0+aV0gPSAodTggKikKKwkJCW9tYXBfdm91dF91c2VydmlydF90b19waHlzKHZiLT5iYWRkcik7CisJfSBlbHNlIHsKKwkJdm91dC0+cXVldWVkX2J1Zl9hZGRyW3ZiLT5pXSA9ICh1OCAqKXZvdXQtPmJ1Zl9waHlfYWRkclt2Yi0+aV07CiAJfQogCi0JaWYgKCFyb3RhdGlvbl9lbmFibGVkKHZvdXQpKSB7Ci0JCWRtYWJ1ZiA9IHZpZGVvYnVmX3RvX2RtYShxLT5idWZzW3ZiLT5pXSk7Ci0JCXZvdXQtPnF1ZXVlZF9idWZfYWRkclt2Yi0+aV0gPSAodTggKikgZG1hYnVmLT5idXNfYWRkcjsKKwlpZiAoIXJvdGF0aW9uX2VuYWJsZWQodm91dCkpCiAJCXJldHVybiAwOwotCX0KLQlkbWFidWYgPSB2aWRlb2J1Zl90b19kbWEocS0+YnVmc1t2Yi0+aV0pOworCisJZG1hYnVmID0gdm91dC0+YnVmX3BoeV9hZGRyW3ZiLT5pXTsKIAkvKiBJZiByb3RhdGlvbiBpcyBlbmFibGVkLCBjb3B5IGlucHV0IGJ1ZmZlciBpbnRvIFZSRkIKIAkgKiBtZW1vcnkgc3BhY2UgdXNpbmcgRE1BLiBXZSBhcmUgY29weWluZyBpbnB1dCBidWZmZXIKIAkgKiBpbnRvIFZSRkIgbWVtb3J5IHNwYWNlIG9mIGRlc2lyZWQgYW5nbGUgYW5kIERTUyB3aWxsCkBAIC0xMTIwLDcgKzExMTQsNyBAQAogCQkJdHgtPmRldl9pZCwgMHgwKTsKIAkvKiBzcmNfcG9ydCByZXF1aXJlZCBvbmx5IGZvciBPTUFQMSAqLwogCW9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKHR4LT5kbWFfY2gsIDAsIE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLAotCQkJZG1hYnVmLT5idXNfYWRkciwgc3JjX2VsZW1lbnRfaW5kZXgsIHNyY19mcmFtZV9pbmRleCk7CisJCQlkbWFidWYsIHNyY19lbGVtZW50X2luZGV4LCBzcmNfZnJhbWVfaW5kZXgpOwogCS8qc2V0IGRtYSBzb3VyY2UgYnVyc3QgbW9kZSBmb3IgVlJGQiAqLwogCW9tYXBfc2V0X2RtYV9zcmNfYnVyc3RfbW9kZSh0eC0+ZG1hX2NoLCBPTUFQX0RNQV9EQVRBX0JVUlNUXzE2KTsKIAlyb3RhdGlvbiA9IGNhbGNfcm90YXRpb24odm91dCk7CkBAIC0xMjExLDcgKzEyMDUsNiBAQAogCXZvaWQgKnBvczsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gdm1hLT52bV9zdGFydDsKIAl1bnNpZ25lZCBsb25nIHNpemUgPSAodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KTsKLQlzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWFidWYgPSBOVUxMOwogCXN0cnVjdCBvbWFwX3ZvdXRfZGV2aWNlICp2b3V0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSA9ICZ2b3V0LT52YnE7CiAKQEAgLTEyNDEsOCArMTIzNCw3IEBACiAJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYS0+dm1fcGFnZV9wcm90KTsKIAl2bWEtPnZtX29wcyA9ICZvbWFwX3ZvdXRfdm1fb3BzOwogCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gKHZvaWQgKikgdm91dDsKLQlkbWFidWYgPSB2aWRlb2J1Zl90b19kbWEocS0+YnVmc1tpXSk7Ci0JcG9zID0gZG1hYnVmLT52bWFsbG9jOworCXBvcyA9ICh2b2lkICopdm91dC0+YnVmX3ZpcnRfYWRkcltpXTsKIAl2bWEtPnZtX3Bnb2ZmID0gdmlydF90b19waHlzKCh2b2lkICopcG9zKSA+PiBQQUdFX1NISUZUOwogCXdoaWxlIChzaXplID4gMCkgewogCQl1bnNpZ25lZCBsb25nIHBmbjsKQEAgLTEzNDcsOCArMTMzOSw4IEBACiAJdmlkZW9fdmJxX29wcy5idWZfcXVldWUgPSBvbWFwX3ZvdXRfYnVmZmVyX3F1ZXVlOwogCXNwaW5fbG9ja19pbml0KCZ2b3V0LT52YnFfbG9jayk7CiAKLQl2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KHEsICZ2aWRlb192YnFfb3BzLCBOVUxMLCAmdm91dC0+dmJxX2xvY2ssCi0JCQl2b3V0LT50eXBlLCBWNEwyX0ZJRUxEX05PTkUsCisJdmlkZW9idWZfcXVldWVfZG1hX2NvbnRpZ19pbml0KHEsICZ2aWRlb192YnFfb3BzLCBxLT5kZXYsCisJCQkmdm91dC0+dmJxX2xvY2ssIHZvdXQtPnR5cGUsIFY0TDJfRklFTERfTk9ORSwKIAkJCXNpemVvZihzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyKSwgdm91dCk7CiAKIAl2NGwyX2RiZygxLCBkZWJ1ZywgJnZvdXQtPnZpZF9kZXYtPnY0bDJfZGV2LCAiRXhpdGluZyAlc1xuIiwgX19mdW5jX18pOwpAQCAtMTc5OSw3ICsxNzkxLDYgQEAKIAl1bnNpZ25lZCBpbnQgaSwgbnVtX2J1ZmZlcnMgPSAwOwogCXN0cnVjdCBvbWFwX3ZvdXRfZGV2aWNlICp2b3V0ID0gZmg7CiAJc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxID0gJnZvdXQtPnZicTsKLQlzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWFidWYgPSBOVUxMOwogCiAJaWYgKChyZXEtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQpIHx8IChyZXEtPmNvdW50IDwgMCkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTgyNSw4ICsxODE2LDcgQEAKIAkJbnVtX2J1ZmZlcnMgPSAodm91dC0+dmlkID09IE9NQVBfVklERU8xKSA/CiAJCQl2aWRlbzFfbnVtYnVmZmVycyA6IHZpZGVvMl9udW1idWZmZXJzOwogCQlmb3IgKGkgPSBudW1fYnVmZmVyczsgaSA8IHZvdXQtPmJ1ZmZlcl9hbGxvY2F0ZWQ7IGkrKykgewotCQkJZG1hYnVmID0gdmlkZW9idWZfdG9fZG1hKHEtPmJ1ZnNbaV0pOwotCQkJb21hcF92b3V0X2ZyZWVfYnVmZmVyKCh1MzIpZG1hYnVmLT52bWFsbG9jLAorCQkJb21hcF92b3V0X2ZyZWVfYnVmZmVyKHZvdXQtPmJ1Zl92aXJ0X2FkZHJbaV0sCiAJCQkJCXZvdXQtPmJ1ZmZlcl9zaXplKTsKIAkJCXZvdXQtPmJ1Zl92aXJ0X2FkZHJbaV0gPSAwOwogCQkJdm91dC0+YnVmX3BoeV9hZGRyW2ldID0gMDsKQEAgLTE4NTUsMTIgKzE4NDUsNyBAQAogCQlnb3RvIHJlcWJ1Zl9lcnI7CiAKIAl2b3V0LT5idWZmZXJfYWxsb2NhdGVkID0gcmVxLT5jb3VudDsKLQlmb3IgKGkgPSAwOyBpIDwgcmVxLT5jb3VudDsgaSsrKSB7Ci0JCWRtYWJ1ZiA9IHZpZGVvYnVmX3RvX2RtYShxLT5idWZzW2ldKTsKLQkJZG1hYnVmLT52bWFsbG9jID0gKHZvaWQgKikgdm91dC0+YnVmX3ZpcnRfYWRkcltpXTsKLQkJZG1hYnVmLT5idXNfYWRkciA9IChkbWFfYWRkcl90KSB2b3V0LT5idWZfcGh5X2FkZHJbaV07Ci0JCWRtYWJ1Zi0+c2dsZW4gPSAxOwotCX0KKwogcmVxYnVmX2VycjoKIAltdXRleF91bmxvY2soJnZvdXQtPmxvY2spOwogCXJldHVybiByZXQ7CkBAIC0yNDg4LDcgKzI0NzMsNyBAQAogCiAJZm9yIChrID0gMDsgayA8IHZpZF9kZXYtPm51bV9kaXNwbGF5czsgaysrKSB7CiAJCWlmICh2aWRfZGV2LT5kaXNwbGF5c1trXS0+c3RhdGUgIT0gT01BUF9EU1NfRElTUExBWV9ESVNBQkxFRCkKLQkJCXZpZF9kZXYtPmRpc3BsYXlzW2tdLT5kaXNhYmxlKHZpZF9kZXYtPmRpc3BsYXlzW2tdKTsKKwkJCXZpZF9kZXYtPmRpc3BsYXlzW2tdLT5kcml2ZXItPmRpc2FibGUodmlkX2Rldi0+ZGlzcGxheXNba10pOwogCiAJCW9tYXBfZHNzX3B1dF9kZXZpY2UodmlkX2Rldi0+ZGlzcGxheXNba10pOwogCX0KQEAgLTI1NDUsNyArMjUzMCw5IEBACiAJCQlkZWZfZGlzcGxheSA9IE5VTEw7CiAJCX0KIAkJaWYgKGRlZl9kaXNwbGF5KSB7Ci0JCQlyZXQgPSBkZWZfZGlzcGxheS0+ZW5hYmxlKGRlZl9kaXNwbGF5KTsKKwkJCXN0cnVjdCBvbWFwX2Rzc19kcml2ZXIgKmRzc2RydiA9IGRlZl9kaXNwbGF5LT5kcml2ZXI7CisKKwkJCXJldCA9IGRzc2Rydi0+ZW5hYmxlKGRlZl9kaXNwbGF5KTsKIAkJCWlmIChyZXQpIHsKIAkJCQkvKiBIZXJlIHdlIGFyZSBub3QgY29uc2lkZXJpbmcgYSBlcnJvcgogCQkJCSAqICBhcyBkaXNwbGF5IG1heSBiZSBlbmFibGVkIGJ5IGZyYW1lCkBAIC0yNTU4LDIyICsyNTQ1LDE0IEBACiAJCQkvKiBzZXQgdGhlIHVwZGF0ZSBtb2RlICovCiAJCQlpZiAoZGVmX2Rpc3BsYXktPmNhcHMgJgogCQkJCQlPTUFQX0RTU19ESVNQTEFZX0NBUF9NQU5VQUxfVVBEQVRFKSB7Ci0jaWZkZWYgQ09ORklHX0ZCX09NQVAyX0ZPUkNFX0FVVE9fVVBEQVRFCi0JCQkJaWYgKGRlZl9kaXNwbGF5LT5lbmFibGVfdGUpCi0JCQkJCWRlZl9kaXNwbGF5LT5lbmFibGVfdGUoZGVmX2Rpc3BsYXksIDEpOwotCQkJCWlmIChkZWZfZGlzcGxheS0+c2V0X3VwZGF0ZV9tb2RlKQotCQkJCQlkZWZfZGlzcGxheS0+c2V0X3VwZGF0ZV9tb2RlKGRlZl9kaXNwbGF5LAotCQkJCQkJCU9NQVBfRFNTX1VQREFURV9BVVRPKTsKLSNlbHNlCS8qIE1BTlVBTF9VUERBVEUgKi8KLQkJCQlpZiAoZGVmX2Rpc3BsYXktPmVuYWJsZV90ZSkKLQkJCQkJZGVmX2Rpc3BsYXktPmVuYWJsZV90ZShkZWZfZGlzcGxheSwgMCk7Ci0JCQkJaWYgKGRlZl9kaXNwbGF5LT5zZXRfdXBkYXRlX21vZGUpCi0JCQkJCWRlZl9kaXNwbGF5LT5zZXRfdXBkYXRlX21vZGUoZGVmX2Rpc3BsYXksCisJCQkJaWYgKGRzc2Rydi0+ZW5hYmxlX3RlKQorCQkJCQlkc3NkcnYtPmVuYWJsZV90ZShkZWZfZGlzcGxheSwgMCk7CisJCQkJaWYgKGRzc2Rydi0+c2V0X3VwZGF0ZV9tb2RlKQorCQkJCQlkc3NkcnYtPnNldF91cGRhdGVfbW9kZShkZWZfZGlzcGxheSwKIAkJCQkJCQlPTUFQX0RTU19VUERBVEVfTUFOVUFMKTsKLSNlbmRpZgogCQkJfSBlbHNlIHsKLQkJCQlpZiAoZGVmX2Rpc3BsYXktPnNldF91cGRhdGVfbW9kZSkKLQkJCQkJZGVmX2Rpc3BsYXktPnNldF91cGRhdGVfbW9kZShkZWZfZGlzcGxheSwKKwkJCQlpZiAoZHNzZHJ2LT5zZXRfdXBkYXRlX21vZGUpCisJCQkJCWRzc2Rydi0+c2V0X3VwZGF0ZV9tb2RlKGRlZl9kaXNwbGF5LAogCQkJCQkJCU9NQVBfRFNTX1VQREFURV9BVVRPKTsKIAkJCX0KIAkJfQpAQCAtMjU5Miw4ICsyNTcxLDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgdmlkX2Rldi0+bnVtX2Rpc3BsYXlzOyBpKyspIHsKIAkJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZGlzcGxheSA9IHZpZF9kZXYtPmRpc3BsYXlzW2ldOwogCi0JCWlmIChkaXNwbGF5LT51cGRhdGUpCi0JCQlkaXNwbGF5LT51cGRhdGUoZGlzcGxheSwgMCwgMCwKKwkJaWYgKGRpc3BsYXktPmRyaXZlci0+dXBkYXRlKQorCQkJZGlzcGxheS0+ZHJpdmVyLT51cGRhdGUoZGlzcGxheSwgMCwgMCwKIAkJCQkJZGlzcGxheS0+cGFuZWwudGltaW5ncy54X3JlcywKIAkJCQkJZGlzcGxheS0+cGFuZWwudGltaW5ncy55X3Jlcyk7CiAJfQpAQCAtMjYwOCw4ICsyNTg3LDggQEAKIAkJaWYgKG92bC0+bWFuYWdlciAmJiBvdmwtPm1hbmFnZXItPmRldmljZSkKIAkJCWRlZl9kaXNwbGF5ID0gb3ZsLT5tYW5hZ2VyLT5kZXZpY2U7CiAKLQkJaWYgKGRlZl9kaXNwbGF5KQotCQkJZGVmX2Rpc3BsYXktPmRpc2FibGUoZGVmX2Rpc3BsYXkpOworCQlpZiAoZGVmX2Rpc3BsYXkgJiYgZGVmX2Rpc3BsYXktPmRyaXZlcikKKwkJCWRlZl9kaXNwbGF5LT5kcml2ZXItPmRpc2FibGUoZGVmX2Rpc3BsYXkpOwogCX0KIHByb2JlX2VycjA6CiAJa2ZyZWUodmlkX2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAyNHh4Y2FtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAyNHh4Y2FtLmMKaW5kZXggZjg1YjJlZDguLjkyNmE1YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDI0eHhjYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAyNHh4Y2FtLmMKQEAgLTQyNiw3ICs0MjYsNyBAQAogCQkJICAgICBkbWEtPmRpcmVjdGlvbik7CiAJCWRtYS0+ZGlyZWN0aW9uID0gRE1BX05PTkU7CiAJfSBlbHNlIHsKLQkJdmlkZW9idWZfZG1hX3VubWFwKHZicSwgdmlkZW9idWZfdG9fZG1hKHZiKSk7CisJCXZpZGVvYnVmX2RtYV91bm1hcCh2YnEtPmRldiwgdmlkZW9idWZfdG9fZG1hKHZiKSk7CiAJCXZpZGVvYnVmX2RtYV9mcmVlKHZpZGVvYnVmX3RvX2RtYSh2YikpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTA5MTIwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y1MTEuYworKysgL2Rldi9udWxsCkBAIC0xLDU5OTUgKzAsMCBAQAotLyoKLSAqIE9tbmlWaXNpb24gT1Y1MTEgQ2FtZXJhLXRvLVVTQiBCcmlkZ2UgRHJpdmVyCi0gKgotICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDMgTWFyayBXLiBNY0NsZWxsYW5kCi0gKiBPcmlnaW5hbCBkZWNvbXByZXNzaW9uIGNvZGUgQ29weXJpZ2h0IDE5OTgtMjAwMCBPbW5pVmlzaW9uIFRlY2hub2xvZ2llcwotICogTWFueSBpbXByb3ZlbWVudHMgYnkgQnJldCBXYWxsYWNoIDxid2FsbGFjMUBzYW4ucnIuY29tPgotICogQ29sb3IgZml4ZXMgYnkgYnkgT3Jpb24gU2t5IExhd2xvciA8b2xhd2xvckBhY20ub3JnPiAoMi8yNi8yMDAwKQotICogU25hcHNob3QgY29kZSBieSBLZXZpbiBNb29yZQotICogT1Y3NjIwIGZpeGVzIGJ5IENoYXJsIFAuIEJvdGhhIDxjcGJvdGhhQGllZWUub3JnPgotICogQ2hhbmdlcyBieSBDbGF1ZGlvIE1hdHN1b2thIDxjbGF1ZGlvQGNvbmVjdGl2YS5jb20+Ci0gKiBPcmlnaW5hbCBTQUE3MTExQSBjb2RlIGJ5IERhdmUgUGVya3MgPGRwZXJrc0BpYm0ubmV0PgotICogVVJCIGVycm9yIG1lc3NhZ2VzIGZyb20gcHdjIGRyaXZlciBieSBOZW1vc29mdAotICogZ2VuZXJpY19pb2N0bCgpIGNvZGUgZnJvbSB2aWRlb2Rldi5jIGJ5IEdlcmQgS25vcnIgYW5kIEFsYW4gQ294Ci0gKiBNZW1vcnkgbWFuYWdlbWVudCAocnZtYWxsb2MpIGNvZGUgZnJvbSBidHR2IGRyaXZlciwgYnkgR2VyZCBLbm9yciBhbmQgb3RoZXJzCi0gKgotICogQmFzZWQgb24gdGhlIExpbnV4IENQaUEgZHJpdmVyIHdyaXR0ZW4gYnkgUGV0ZXIgUHJlZ2xlciwKLSAqIFNjb3R0IEouIEJlcnRpbiBhbmQgSm9oYW5uZXMgRXJkZmVsdC4KLSAqCi0gKiBQbGVhc2Ugc2VlIHRoZSBmaWxlOiBEb2N1bWVudGF0aW9uL3VzYi9vdjUxMS50eHQKLSAqIGFuZCB0aGUgd2Vic2l0ZSBhdDogIGh0dHA6Ly9hbHBoYS5keW5kbnMub3JnL292NTExCi0gKiBmb3IgbW9yZSBpbmZvLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKLSAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLQotI2lmIGRlZmluZWQgKF9faTM4Nl9fKQotCSNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgotI2VuZGlmCi0KLSNpbmNsdWRlICJvdjUxMS5oIgotCi0vKgotICogVmVyc2lvbiBJbmZvcm1hdGlvbgotICovCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS42NCBmb3IgTGludXggMi41IgotI2RlZmluZSBFTUFJTCAibWFya0BhbHBoYS5keW5kbnMub3JnIgotI2RlZmluZSBEUklWRVJfQVVUSE9SICJNYXJrIE1jQ2xlbGxhbmQgPG1hcmtAYWxwaGEuZHluZG5zLm9yZz4gJiBCcmV0IFdhbGxhY2ggXAotJiBPcmlvbiBTa3kgTGF3bG9yIDxvbGF3bG9yQGFjbS5vcmc+ICYgS2V2aW4gTW9vcmUgJiBDaGFybCBQLiBCb3RoYSBcCi08Y3Bib3RoYUBpZWVlLm9yZz4gJiBDbGF1ZGlvIE1hdHN1b2thIDxjbGF1ZGlvQGNvbmVjdGl2YS5jb20+IgotI2RlZmluZSBEUklWRVJfREVTQyAib3Y1MTEgVVNCIENhbWVyYSBEcml2ZXIiCi0KLSNkZWZpbmUgT1Y1MTFfSTJDX1JFVFJJRVMgMwotI2RlZmluZSBFTkFCTEVfWV9RVUFOVEFCTEUgMQotI2RlZmluZSBFTkFCTEVfVVZfUVVBTlRBQkxFIDEKLQotI2RlZmluZSBPVjUxMV9NQVhfVU5JVF9WSURFTyAxNgotCi0vKiBQaXhlbCBjb3VudCAqIGJ5dGVzIHBlciBZVVY0MjAgcGl4ZWwgKDEuNSkgKi8KLSNkZWZpbmUgTUFYX0ZSQU1FX1NJWkUodywgaCkgKCh3KSAqIChoKSAqIDMgLyAyKQotCi0jZGVmaW5lIE1BWF9EQVRBX1NJWkUodywgaCkgKE1BWF9GUkFNRV9TSVpFKHcsIGgpICsgc2l6ZW9mKHN0cnVjdCB0aW1ldmFsKSkKLQotLyogTWF4IHNpemUgKiBieXRlcyBwZXIgWVVWNDIwIHBpeGVsICgxLjUpICsgb25lIGV4dHJhIGlzb2MgZnJhbWUgZm9yIHNhZmV0eSAqLwotI2RlZmluZSBNQVhfUkFXX0RBVEFfU0laRSh3LCBoKSAoKHcpICogKGgpICogMyAvIDIgKyAxMDI0KQotCi0jZGVmaW5lIEZBVEFMX0VSUk9SKHJjKSAoKHJjKSA8IDAgJiYgKHJjKSAhPSAtRVBFUk0pCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBNb2R1bGUgUGFyYW1ldGVycwotICogKFNlZSBvdjUxMS50eHQgZm9yIGRldGFpbGVkIGRlc2NyaXB0aW9ucyBvZiB0aGVzZSkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUaGVzZSB2YXJpYWJsZXMgKGFuZCBhbGwgc3RhdGljIGdsb2JhbHMpIGRlZmF1bHQgdG8gemVybyAqLwotc3RhdGljIGludCBhdXRvYnJpZ2h0CQk9IDE7Ci1zdGF0aWMgaW50IGF1dG9nYWluCQk9IDE7Ci1zdGF0aWMgaW50IGF1dG9leHAJCT0gMTsKLXN0YXRpYyBpbnQgZGVidWc7Ci1zdGF0aWMgaW50IHNuYXBzaG90Owotc3RhdGljIGludCBjYW1zCQkJPSAxOwotc3RhdGljIGludCBjb21wcmVzczsKLXN0YXRpYyBpbnQgdGVzdHBhdDsKLXN0YXRpYyBpbnQgZHVtcHBpeDsKLXN0YXRpYyBpbnQgbGVkIAkJCT0gMTsKLXN0YXRpYyBpbnQgZHVtcF9icmlkZ2U7Ci1zdGF0aWMgaW50IGR1bXBfc2Vuc29yOwotc3RhdGljIGludCBwcmludHBoOwotc3RhdGljIGludCBwaHkJCQk9IDB4MWY7Ci1zdGF0aWMgaW50IHBodXYJCQk9IDB4MDU7Ci1zdGF0aWMgaW50IHB2eQkJCT0gMHgwNjsKLXN0YXRpYyBpbnQgcHZ1dgkJCT0gMHgwNjsKLXN0YXRpYyBpbnQgcWh5CQkJPSAweDE0Owotc3RhdGljIGludCBxaHV2CQkJPSAweDAzOwotc3RhdGljIGludCBxdnkJCQk9IDB4MDQ7Ci1zdGF0aWMgaW50IHF2dXYJCQk9IDB4MDQ7Ci1zdGF0aWMgaW50IGxpZ2h0ZnJlcTsKLXN0YXRpYyBpbnQgYmFuZGluZ2ZpbHRlcjsKLXN0YXRpYyBpbnQgY2xvY2tkaXYJCT0gLTE7Ci1zdGF0aWMgaW50IHBhY2tldHNpemUJCT0gLTE7Ci1zdGF0aWMgaW50IGZyYW1lZHJvcAkJPSAtMTsKLXN0YXRpYyBpbnQgZmFzdHNldDsKLXN0YXRpYyBpbnQgZm9yY2VfcGFsZXR0ZTsKLXN0YXRpYyBpbnQgYmFja2xpZ2h0OwotLyogQml0bWFzayBtYXJraW5nIGFsbG9jYXRlZCBkZXZpY2VzIGZyb20gMCB0byBPVjUxMV9NQVhfVU5JVF9WSURFTyAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgb3Y1MTFfZGV2dXNlZDsKLXN0YXRpYyBpbnQgdW5pdF92aWRlb1tPVjUxMV9NQVhfVU5JVF9WSURFT107Ci1zdGF0aWMgaW50IHJlbW92ZV96ZXJvczsKLXN0YXRpYyBpbnQgbWlycm9yOwotc3RhdGljIGludCBvdjUxOF9jb2xvcjsKLQotbW9kdWxlX3BhcmFtKGF1dG9icmlnaHQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGF1dG9icmlnaHQsICJTZW5zb3IgYXV0b21hdGljYWxseSBjaGFuZ2VzIGJyaWdodG5lc3MiKTsKLW1vZHVsZV9wYXJhbShhdXRvZ2FpbiwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoYXV0b2dhaW4sICJTZW5zb3IgYXV0b21hdGljYWxseSBjaGFuZ2VzIGdhaW4iKTsKLW1vZHVsZV9wYXJhbShhdXRvZXhwLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhhdXRvZXhwLCAiU2Vuc29yIGF1dG9tYXRpY2FsbHkgY2hhbmdlcyBleHBvc3VyZSIpOwotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywKLSAgIkRlYnVnIGxldmVsOiAwPW5vbmUsIDE9aW5pdHMsIDI9d2FybmluZywgMz1jb25maWcsIDQ9ZnVuY3Rpb25zLCA1PW1heCIpOwotbW9kdWxlX3BhcmFtKHNuYXBzaG90LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhzbmFwc2hvdCwgIkVuYWJsZSBzbmFwc2hvdCBtb2RlIik7Ci1tb2R1bGVfcGFyYW0oY2FtcywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoY2FtcywgIk51bWJlciBvZiBzaW11bHRhbmVvdXMgY2FtZXJhcyIpOwotbW9kdWxlX3BhcmFtKGNvbXByZXNzLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhjb21wcmVzcywgIlR1cm4gb24gY29tcHJlc3Npb24iKTsKLW1vZHVsZV9wYXJhbSh0ZXN0cGF0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyh0ZXN0cGF0LAotICAiUmVwbGFjZSBpbWFnZSB3aXRoIHZlcnRpY2FsIGJhciB0ZXN0cGF0dGVybiAob25seSBwYXJ0aWFsbHkgd29ya2luZykiKTsKLW1vZHVsZV9wYXJhbShkdW1wcGl4LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhkdW1wcGl4LCAiRHVtcCByYXcgcGl4ZWwgZGF0YSIpOwotbW9kdWxlX3BhcmFtKGxlZCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MobGVkLAotICAiTEVEIHBvbGljeSAoT1Y1MTErIG9yIGxhdGVyKS4gMD1vZmYsIDE9b24gKGRlZmF1bHQpLCAyPWF1dG8gKG9uIHdoZW4gb3BlbikiKTsKLW1vZHVsZV9wYXJhbShkdW1wX2JyaWRnZSwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoZHVtcF9icmlkZ2UsICJEdW1wIHRoZSBicmlkZ2UgcmVnaXN0ZXJzIik7Ci1tb2R1bGVfcGFyYW0oZHVtcF9zZW5zb3IsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGR1bXBfc2Vuc29yLCAiRHVtcCB0aGUgc2Vuc29yIHJlZ2lzdGVycyIpOwotbW9kdWxlX3BhcmFtKHByaW50cGgsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHByaW50cGgsICJQcmludCBmcmFtZSBzdGFydC9lbmQgaGVhZGVycyIpOwotbW9kdWxlX3BhcmFtKHBoeSwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MocGh5LCAiUHJlZGljdGlvbiByYW5nZSAoaG9yaXouIFkpIik7Ci1tb2R1bGVfcGFyYW0ocGh1diwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MocGh1diwgIlByZWRpY3Rpb24gcmFuZ2UgKGhvcml6LiBVVikiKTsKLW1vZHVsZV9wYXJhbShwdnksIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHB2eSwgIlByZWRpY3Rpb24gcmFuZ2UgKHZlcnQuIFkpIik7Ci1tb2R1bGVfcGFyYW0ocHZ1diwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MocHZ1diwgIlByZWRpY3Rpb24gcmFuZ2UgKHZlcnQuIFVWKSIpOwotbW9kdWxlX3BhcmFtKHFoeSwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MocWh5LCAiUXVhbnRpemF0aW9uIHRocmVzaG9sZCAoaG9yaXouIFkpIik7Ci1tb2R1bGVfcGFyYW0ocWh1diwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MocWh1diwgIlF1YW50aXphdGlvbiB0aHJlc2hvbGQgKGhvcml6LiBVVikiKTsKLW1vZHVsZV9wYXJhbShxdnksIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHF2eSwgIlF1YW50aXphdGlvbiB0aHJlc2hvbGQgKHZlcnQuIFkpIik7Ci1tb2R1bGVfcGFyYW0ocXZ1diwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MocXZ1diwgIlF1YW50aXphdGlvbiB0aHJlc2hvbGQgKHZlcnQuIFVWKSIpOwotbW9kdWxlX3BhcmFtKGxpZ2h0ZnJlcSwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MobGlnaHRmcmVxLAotICAiTGlnaHQgZnJlcXVlbmN5LiBTZXQgdG8gNTAgb3IgNjAgSHosIG9yIHplcm8gZm9yIGRlZmF1bHQgc2V0dGluZ3MiKTsKLW1vZHVsZV9wYXJhbShiYW5kaW5nZmlsdGVyLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhiYW5kaW5nZmlsdGVyLAotICAiRW5hYmxlIGJhbmRpbmcgZmlsdGVyICh0byByZWR1Y2UgZWZmZWN0cyBvZiBmbHVvcmVzY2VudCBsaWdodGluZykiKTsKLW1vZHVsZV9wYXJhbShjbG9ja2RpdiwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoY2xvY2tkaXYsICJGb3JjZSBwaXhlbCBjbG9jayBkaXZpc29yIHRvIGEgc3BlY2lmaWMgdmFsdWUiKTsKLW1vZHVsZV9wYXJhbShwYWNrZXRzaXplLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhwYWNrZXRzaXplLCAiRm9yY2UgYSBzcGVjaWZpYyBpc29jIHBhY2tldCBzaXplIik7Ci1tb2R1bGVfcGFyYW0oZnJhbWVkcm9wLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhmcmFtZWRyb3AsICJGb3JjZSBhIHNwZWNpZmljIGZyYW1lIGRyb3AgcmVnaXN0ZXIgc2V0dGluZyIpOwotbW9kdWxlX3BhcmFtKGZhc3RzZXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGZhc3RzZXQsICJBbGxvd3MgcGljdHVyZSBzZXR0aW5ncyB0byB0YWtlIGVmZmVjdCBpbW1lZGlhdGVseSIpOwotbW9kdWxlX3BhcmFtKGZvcmNlX3BhbGV0dGUsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGZvcmNlX3BhbGV0dGUsICJGb3JjZSB0aGUgcGFsZXR0ZSB0byBhIHNwZWNpZmljIHZhbHVlIik7Ci1tb2R1bGVfcGFyYW0oYmFja2xpZ2h0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhiYWNrbGlnaHQsICJGb3Igb2JqZWN0cyB0aGF0IGFyZSBsaXQgZnJvbSBiZWhpbmQiKTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbnVtX3V2OwotbW9kdWxlX3BhcmFtX2FycmF5KHVuaXRfdmlkZW8sIGludCwgJm51bV91diwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHVuaXRfdmlkZW8sCi0gICJGb3JjZSB1c2Ugb2Ygc3BlY2lmaWMgbWlub3IgbnVtYmVyKHMpLiAwIGlzIG5vdCBhbGxvd2VkLiIpOwotbW9kdWxlX3BhcmFtKHJlbW92ZV96ZXJvcywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MocmVtb3ZlX3plcm9zLAotICAiUmVtb3ZlIHplcm8tcGFkZGluZyBmcm9tIHVuY29tcHJlc3NlZCBpbmNvbWluZyBkYXRhIik7Ci1tb2R1bGVfcGFyYW0obWlycm9yLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhtaXJyb3IsICJSZXZlcnNlIGltYWdlIGhvcml6b250YWxseSIpOwotbW9kdWxlX3BhcmFtKG92NTE4X2NvbG9yLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhvdjUxOF9jb2xvciwgIkVuYWJsZSBPVjUxOCBjb2xvciAoZXhwZXJpbWVudGFsKSIpOwotCi1NT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOwotTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIE1pc2NlbGxhbmVvdXMgR2xvYmFscwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBvdjUxMV9kcml2ZXI7Ci0KLS8qIE51bWJlciBvZiB0aW1lcyB0byByZXRyeSBhIGZhaWxlZCBJMkMgdHJhbnNhY3Rpb24uIEluY3JlYXNlIHRoaXMgaWYgeW91Ci0gKiBhcmUgZ2V0dGluZyAiRmFpbGVkIHRvIHJlYWQgc2Vuc29yIElELi4uIiAqLwotc3RhdGljIGNvbnN0IGludCBpMmNfZGV0ZWN0X3RyaWVzID0gNTsKLQotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZSBbXSA9IHsKLQl7IFVTQl9ERVZJQ0UoVkVORF9PTU5JVklTSU9OLCBQUk9EX09WNTExKSB9LAotCXsgVVNCX0RFVklDRShWRU5EX09NTklWSVNJT04sIFBST0RfT1Y1MTFQTFVTKSB9LAotCXsgVVNCX0RFVklDRShWRU5EX01BVFRFTCwgUFJPRF9NRTJDQU0pIH0sCi0JeyB9ICAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwotfTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBkZXZpY2VfdGFibGUpOwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciB5UXVhblRhYmxlNTExW10gPSBPVjUxMV9ZUVVBTlRBQkxFOwotc3RhdGljIHVuc2lnbmVkIGNoYXIgdXZRdWFuVGFibGU1MTFbXSA9IE9WNTExX1VWUVVBTlRBQkxFOwotc3RhdGljIHVuc2lnbmVkIGNoYXIgeVF1YW5UYWJsZTUxOFtdID0gT1Y1MThfWVFVQU5UQUJMRTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHV2UXVhblRhYmxlNTE4W10gPSBPVjUxOF9VVlFVQU5UQUJMRTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFN5bWJvbGljIE5hbWVzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogS25vd24gT1Y1MTEtYmFzZWQgY2FtZXJhcyAqLwotc3RhdGljIHN0cnVjdCBzeW1ib2xpY19saXN0IGNhbWxpc3RbXSA9IHsKLQl7ICAgMCwgIkdlbmVyaWMgQ2FtZXJhIChubyBJRCkiIH0sCi0JeyAgIDEsICJNdXN0ZWsgV0NhbSAzWCIgfSwKLQl7ICAgMywgIkQtTGluayBEU0ItQzMwMCIgfSwKLQl7ICAgNCwgIkdlbmVyaWMgT1Y1MTEvT1Y3NjEwIiB9LAotCXsgICA1LCAiUHVyZXRlayBQVC02MDA3IiB9LAotCXsgICA2LCAiTGlmZXZpZXcgVVNCIExpZmUgVFYgKE5UU0MpIiB9LAotCXsgIDIxLCAiQ3JlYXRpdmUgTGFicyBXZWJDYW0gMyIgfSwKLQl7ICAyMiwgIkxpZmV2aWV3IFVTQiBMaWZlIFRWIChQQUwgRC9LK0IvRykiIH0sCi0JeyAgMzYsICJLb2FsYS1DYW0iIH0sCi0JeyAgMzgsICJMaWZldmlldyBVU0IgTGlmZSBUViAoUEFMKSIgfSwKLQl7ICA0MSwgIlNhbXN1bmcgQW55Y2FtIE1QQy1NMTAiIH0sCi0JeyAgNDMsICJNdGVrdmlzaW9uIFplY2EgTVY0MDIiIH0sCi0JeyAgNDYsICJTdW1hIGVPTiIgfSwKLQl7ICA3MCwgIkxpZmV2aWV3IFVTQiBMaWZlIFRWIChQQUwvU0VDQU0pIiB9LAotCXsgMTAwLCAiTGlmZXZpZXcgUm9ib0NhbSIgfSwKLQl7IDEwMiwgIkF2ZXJNZWRpYSBJbnRlckNhbSBFbGl0ZSIgfSwKLQl7IDExMiwgIk1lZGlhRm9ydGUgTVYzMDAiIH0sCS8qIG9yIE9WNzExMCBldmFsdWF0aW9uIGtpdCAqLwotCXsgMTM0LCAiRXpvbmljcyBFWkNhbSBJSSIgfSwKLQl7IDE5MiwgIldlYmV5ZSAyMDAwQiIgfSwKLQl7IDI1MywgIkFscGhhIFZpc2lvbiBUZWNoLiBBbHBoYUNhbSBTRSIgfSwKLQl7ICAtMSwgTlVMTCB9Ci19OwotCi0vKiBWaWRlbzRMaW51eDEgUGFsZXR0ZXMgKi8KLXN0YXRpYyBzdHJ1Y3Qgc3ltYm9saWNfbGlzdCB2NGwxX3BsaXN0W10gPSB7Ci0JeyBWSURFT19QQUxFVFRFX0dSRVksCSJHUkVZIiB9LAotCXsgVklERU9fUEFMRVRURV9ISTI0MCwJIkhJMjQwIiB9LAotCXsgVklERU9fUEFMRVRURV9SR0I1NjUsCSJSR0I1NjUiIH0sCi0JeyBWSURFT19QQUxFVFRFX1JHQjI0LAkiUkdCMjQiIH0sCi0JeyBWSURFT19QQUxFVFRFX1JHQjMyLAkiUkdCMzIiIH0sCi0JeyBWSURFT19QQUxFVFRFX1JHQjU1NSwJIlJHQjU1NSIgfSwKLQl7IFZJREVPX1BBTEVUVEVfWVVWNDIyLAkiWVVWNDIyIiB9LAotCXsgVklERU9fUEFMRVRURV9ZVVlWLAkiWVVZViIgfSwKLQl7IFZJREVPX1BBTEVUVEVfVVlWWSwJIlVZVlkiIH0sCi0JeyBWSURFT19QQUxFVFRFX1lVVjQyMCwJIllVVjQyMCIgfSwKLQl7IFZJREVPX1BBTEVUVEVfWVVWNDExLAkiWVVWNDExIiB9LAotCXsgVklERU9fUEFMRVRURV9SQVcsCSJSQVciIH0sCi0JeyBWSURFT19QQUxFVFRFX1lVVjQyMlAsIllVVjQyMlAiIH0sCi0JeyBWSURFT19QQUxFVFRFX1lVVjQxMVAsIllVVjQxMVAiIH0sCi0JeyBWSURFT19QQUxFVFRFX1lVVjQyMFAsIllVVjQyMFAiIH0sCi0JeyBWSURFT19QQUxFVFRFX1lVVjQxMFAsIllVVjQxMFAiIH0sCi0JeyAtMSwgTlVMTCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IHN5bWJvbGljX2xpc3QgYnJnbGlzdFtdID0gewotCXsgQlJHX09WNTExLAkJIk9WNTExIiB9LAotCXsgQlJHX09WNTExUExVUywJIk9WNTExKyIgfSwKLQl7IEJSR19PVjUxOCwJCSJPVjUxOCIgfSwKLQl7IEJSR19PVjUxOFBMVVMsCSJPVjUxOCsiIH0sCi0JeyAtMSwgTlVMTCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IHN5bWJvbGljX2xpc3Qgc2VubGlzdFtdID0gewotCXsgU0VOX09WNzZCRSwJIk9WNzZCRSIgfSwKLQl7IFNFTl9PVjc2MTAsCSJPVjc2MTAiIH0sCi0JeyBTRU5fT1Y3NjIwLAkiT1Y3NjIwIiB9LAotCXsgU0VOX09WNzYyMEFFLAkiT1Y3NjIwQUUiIH0sCi0JeyBTRU5fT1Y2NjIwLAkiT1Y2NjIwIiB9LAotCXsgU0VOX09WNjYzMCwJIk9WNjYzMCIgfSwKLQl7IFNFTl9PVjY2MzBBRSwJIk9WNjYzMEFFIiB9LAotCXsgU0VOX09WNjYzMEFGLAkiT1Y2NjMwQUYiIH0sCi0JeyBTRU5fT1Y4NjAwLAkiT1Y4NjAwIiB9LAotCXsgU0VOX0tTMDEyNywJIktTMDEyNyIgfSwKLQl7IFNFTl9LUzAxMjdCLAkiS1MwMTI3QiIgfSwKLQl7IFNFTl9TQUE3MTExQSwJIlNBQTcxMTFBIiB9LAotCXsgLTEsIE5VTEwgfQotfTsKLQotLyogVVJCIGVycm9yIGNvZGVzOiAqLwotc3RhdGljIHN0cnVjdCBzeW1ib2xpY19saXN0IHVyYl9lcnJsaXN0W10gPSB7Ci0JeyAtRU5PU1IsCSJCdWZmZXIgZXJyb3IgKG92ZXJydW4pIiB9LAotCXsgLUVQSVBFLAkiU3RhbGxlZCAoZGV2aWNlIG5vdCByZXNwb25kaW5nKSIgfSwKLQl7IC1FT1ZFUkZMT1csCSJCYWJibGUgKGRldmljZSBzZW5kcyB0b28gbXVjaCBkYXRhKSIgfSwKLQl7IC1FUFJPVE8sCSJCaXQtc3R1ZmYgZXJyb3IgKGJhZCBjYWJsZT8pIiB9LAotCXsgLUVJTFNFUSwJIkNSQy9UaW1lb3V0IChiYWQgY2FibGU/KSIgfSwKLQl7IC1FVElNRSwJIkRldmljZSBkb2VzIG5vdCByZXNwb25kIHRvIHRva2VuIiB9LAotCXsgLUVUSU1FRE9VVCwJIkRldmljZSBkb2VzIG5vdCByZXNwb25kIHRvIGNvbW1hbmQiIH0sCi0JeyAtMSwgTlVMTCB9Ci19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogTWVtb3J5IG1hbmFnZW1lbnQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgKgotcnZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQotewotCXZvaWQgKm1lbTsKLQl1bnNpZ25lZCBsb25nIGFkcjsKLQotCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOwotCW1lbSA9IHZtYWxsb2NfMzIoc2l6ZSk7Ci0JaWYgKCFtZW0pCi0JCXJldHVybiBOVUxMOwotCi0JbWVtc2V0KG1lbSwgMCwgc2l6ZSk7IC8qIENsZWFyIHRoZSByYW0gb3V0LCBubyBqdW5rIHRvIHRoZSB1c2VyICovCi0JYWRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKLQl3aGlsZSAoc2l6ZSA+IDApIHsKLQkJU2V0UGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOwotCQlhZHIgKz0gUEFHRV9TSVpFOwotCQlzaXplIC09IFBBR0VfU0laRTsKLQl9Ci0KLQlyZXR1cm4gbWVtOwotfQotCi1zdGF0aWMgdm9pZAotcnZmcmVlKHZvaWQgKm1lbSwgdW5zaWduZWQgbG9uZyBzaXplKQotewotCXVuc2lnbmVkIGxvbmcgYWRyOwotCi0JaWYgKCFtZW0pCi0JCXJldHVybjsKLQotCWFkciA9ICh1bnNpZ25lZCBsb25nKSBtZW07Ci0Jd2hpbGUgKChsb25nKSBzaXplID4gMCkgewotCQlDbGVhclBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKLQkJYWRyICs9IFBBR0VfU0laRTsKLQkJc2l6ZSAtPSBQQUdFX1NJWkU7Ci0JfQotCXZmcmVlKG1lbSk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogUmVnaXN0ZXIgSS9PCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFdyaXRlIGFuIE9WNTF4IHJlZ2lzdGVyICovCi1zdGF0aWMgaW50Ci1yZWdfdyhzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgdmFsdWUpCi17Ci0JaW50IHJjOwotCi0JUERFQlVHKDUsICIweCUwMlg6MHglMDJYIiwgcmVnLCB2YWx1ZSk7Ci0KLQltdXRleF9sb2NrKCZvdi0+Y2J1Zl9sb2NrKTsKLQlvdi0+Y2J1ZlswXSA9IHZhbHVlOwotCXJjID0gdXNiX2NvbnRyb2xfbXNnKG92LT5kZXYsCi0JCQkgICAgIHVzYl9zbmRjdHJscGlwZShvdi0+ZGV2LCAwKSwKLQkJCSAgICAgKG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KT8xOjIgLyogUkVHX0lPICovLAotCQkJICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAotCQkJICAgICAwLCAoX191MTYpcmVnLCAmb3YtPmNidWZbMF0sIDEsIDEwMDApOwotCW11dGV4X3VubG9jaygmb3YtPmNidWZfbG9jayk7Ci0KLQlpZiAocmMgPCAwKQotCQllcnIoInJlZyB3cml0ZTogZXJyb3IgJWQ6ICVzIiwgcmMsIHN5bWJvbGljKHVyYl9lcnJsaXN0LCByYykpOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKiBSZWFkIGZyb20gYW4gT1Y1MXggcmVnaXN0ZXIgKi8KLS8qIHJldHVybnM6IG5lZ2F0aXZlIGlzIGVycm9yLCBwb3Mgb3IgemVybyBpcyBkYXRhICovCi1zdGF0aWMgaW50Ci1yZWdfcihzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgY2hhciByZWcpCi17Ci0JaW50IHJjOwotCi0JbXV0ZXhfbG9jaygmb3YtPmNidWZfbG9jayk7Ci0JcmMgPSB1c2JfY29udHJvbF9tc2cob3YtPmRldiwKLQkJCSAgICAgdXNiX3JjdmN0cmxwaXBlKG92LT5kZXYsIDApLAotCQkJICAgICAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpPzE6MyAvKiBSRUdfSU8gKi8sCi0JCQkgICAgIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAotCQkJICAgICAwLCAoX191MTYpcmVnLCAmb3YtPmNidWZbMF0sIDEsIDEwMDApOwotCi0JaWYgKHJjIDwgMCkgewotCQllcnIoInJlZyByZWFkOiBlcnJvciAlZDogJXMiLCByYywgc3ltYm9saWModXJiX2Vycmxpc3QsIHJjKSk7Ci0JfSBlbHNlIHsKLQkJcmMgPSBvdi0+Y2J1ZlswXTsKLQkJUERFQlVHKDUsICIweCUwMlg6MHglMDJYIiwgcmVnLCBvdi0+Y2J1ZlswXSk7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZvdi0+Y2J1Zl9sb2NrKTsKLQotCXJldHVybiByYzsKLX0KLQotLyoKLSAqIFdyaXRlcyBiaXRzIGF0IHBvc2l0aW9ucyBzcGVjaWZpZWQgYnkgbWFzayB0byBhbiBPVjUxeCByZWcuIEJpdHMgdGhhdCBhcmUgaW4KLSAqIHRoZSBzYW1lIHBvc2l0aW9uIGFzIDEncyBpbiAibWFzayIgYXJlIGNsZWFyZWQgYW5kIHNldCB0byAidmFsdWUiLiBCaXRzCi0gKiB0aGF0IGFyZSBpbiB0aGUgc2FtZSBwb3NpdGlvbiBhcyAwJ3MgaW4gIm1hc2siIGFyZSBwcmVzZXJ2ZWQsIHJlZ2FyZGxlc3MKLSAqIG9mIHRoZWlyIHJlc3BlY3RpdmUgc3RhdGUgaW4gInZhbHVlIi4KLSAqLwotc3RhdGljIGludAotcmVnX3dfbWFzayhzdHJ1Y3QgdXNiX292NTExICpvdiwKLQkgICB1bnNpZ25lZCBjaGFyIHJlZywKLQkgICB1bnNpZ25lZCBjaGFyIHZhbHVlLAotCSAgIHVuc2lnbmVkIGNoYXIgbWFzaykKLXsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGNoYXIgb2xkdmFsLCBuZXd2YWw7Ci0KLQlyZXQgPSByZWdfcihvdiwgcmVnKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCW9sZHZhbCA9ICh1bnNpZ25lZCBjaGFyKSByZXQ7Ci0Jb2xkdmFsICY9ICh+bWFzayk7CQkvKiBDbGVhciB0aGUgbWFza2VkIGJpdHMgKi8KLQl2YWx1ZSAmPSBtYXNrOwkJCS8qIEVuZm9yY2UgbWFzayBvbiB2YWx1ZSAqLwotCW5ld3ZhbCA9IG9sZHZhbCB8IHZhbHVlOwkvKiBTZXQgdGhlIGRlc2lyZWQgYml0cyAqLwotCi0JcmV0dXJuIChyZWdfdyhvdiwgcmVnLCBuZXd2YWwpKTsKLX0KLQotLyoKLSAqIFdyaXRlcyBtdWx0aXBsZSAobikgYnl0ZSB2YWx1ZSB0byBhIHNpbmdsZSByZWdpc3Rlci4gT25seSB2YWxpZCB3aXRoIGNlcnRhaW4KLSAqIHJlZ2lzdGVycyAoMHgzMCBhbmQgMHhjNCAtIDB4Y2UpLgotICovCi1zdGF0aWMgaW50Ci1vdjUxOF9yZWdfdzMyKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBjaGFyIHJlZywgdTMyIHZhbCwgaW50IG4pCi17Ci0JaW50IHJjOwotCi0JUERFQlVHKDUsICIweCUwMlg6JTdkLCBuPSVkIiwgcmVnLCB2YWwsIG4pOwotCi0JbXV0ZXhfbG9jaygmb3YtPmNidWZfbG9jayk7Ci0KLQkqKChfX2xlMzIgKilvdi0+Y2J1ZikgPSBfX2NwdV90b19sZTMyKHZhbCk7Ci0KLQlyYyA9IHVzYl9jb250cm9sX21zZyhvdi0+ZGV2LAotCQkJICAgICB1c2Jfc25kY3RybHBpcGUob3YtPmRldiwgMCksCi0JCQkgICAgIDEgLyogUkVHX0lPICovLAotCQkJICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAotCQkJICAgICAwLCAoX191MTYpcmVnLCBvdi0+Y2J1ZiwgbiwgMTAwMCk7Ci0JbXV0ZXhfdW5sb2NrKCZvdi0+Y2J1Zl9sb2NrKTsKLQotCWlmIChyYyA8IDApCi0JCWVycigicmVnIHdyaXRlIG11bHRpcGxlOiBlcnJvciAlZDogJXMiLCByYywKLQkJICAgIHN5bWJvbGljKHVyYl9lcnJsaXN0LCByYykpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50Ci1vdjUxMV91cGxvYWRfcXVhbl90YWJsZXMoc3RydWN0IHVzYl9vdjUxMSAqb3YpCi17Ci0JdW5zaWduZWQgY2hhciAqcFlUYWJsZSA9IHlRdWFuVGFibGU1MTE7Ci0JdW5zaWduZWQgY2hhciAqcFVWVGFibGUgPSB1dlF1YW5UYWJsZTUxMTsKLQl1bnNpZ25lZCBjaGFyIHZhbDAsIHZhbDE7Ci0JaW50IGksIHJjLCByZWcgPSBSNTExX0NPTVBfTFVUX0JFR0lOOwotCi0JUERFQlVHKDQsICJVcGxvYWRpbmcgcXVhbnRpemF0aW9uIHRhYmxlcyIpOwotCi0JZm9yIChpID0gMDsgaSA8IE9WNTExX1FVQU5UQUJMRVNJWkUgLyAyOyBpKyspIHsKLQkJaWYgKEVOQUJMRV9ZX1FVQU5UQUJMRSkJewotCQkJdmFsMCA9ICpwWVRhYmxlKys7Ci0JCQl2YWwxID0gKnBZVGFibGUrKzsKLQkJCXZhbDAgJj0gMHgwZjsKLQkJCXZhbDEgJj0gMHgwZjsKLQkJCXZhbDAgfD0gdmFsMSA8PCA0OwotCQkJcmMgPSByZWdfdyhvdiwgcmVnLCB2YWwwKTsKLQkJCWlmIChyYyA8IDApCi0JCQkJcmV0dXJuIHJjOwotCQl9Ci0KLQkJaWYgKEVOQUJMRV9VVl9RVUFOVEFCTEUpIHsKLQkJCXZhbDAgPSAqcFVWVGFibGUrKzsKLQkJCXZhbDEgPSAqcFVWVGFibGUrKzsKLQkJCXZhbDAgJj0gMHgwZjsKLQkJCXZhbDEgJj0gMHgwZjsKLQkJCXZhbDAgfD0gdmFsMSA8PCA0OwotCQkJcmMgPSByZWdfdyhvdiwgcmVnICsgT1Y1MTFfUVVBTlRBQkxFU0laRS8yLCB2YWwwKTsKLQkJCWlmIChyYyA8IDApCi0JCQkJcmV0dXJuIHJjOwotCQl9Ci0KLQkJcmVnKys7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIE9WNTE4IHF1YW50aXphdGlvbiB0YWJsZXMgYXJlIDh4NCAoaW5zdGVhZCBvZiA4eDgpICovCi1zdGF0aWMgaW50Ci1vdjUxOF91cGxvYWRfcXVhbl90YWJsZXMoc3RydWN0IHVzYl9vdjUxMSAqb3YpCi17Ci0JdW5zaWduZWQgY2hhciAqcFlUYWJsZSA9IHlRdWFuVGFibGU1MTg7Ci0JdW5zaWduZWQgY2hhciAqcFVWVGFibGUgPSB1dlF1YW5UYWJsZTUxODsKLQl1bnNpZ25lZCBjaGFyIHZhbDAsIHZhbDE7Ci0JaW50IGksIHJjLCByZWcgPSBSNTExX0NPTVBfTFVUX0JFR0lOOwotCi0JUERFQlVHKDQsICJVcGxvYWRpbmcgcXVhbnRpemF0aW9uIHRhYmxlcyIpOwotCi0JZm9yIChpID0gMDsgaSA8IE9WNTE4X1FVQU5UQUJMRVNJWkUgLyAyOyBpKyspIHsKLQkJaWYgKEVOQUJMRV9ZX1FVQU5UQUJMRSkgewotCQkJdmFsMCA9ICpwWVRhYmxlKys7Ci0JCQl2YWwxID0gKnBZVGFibGUrKzsKLQkJCXZhbDAgJj0gMHgwZjsKLQkJCXZhbDEgJj0gMHgwZjsKLQkJCXZhbDAgfD0gdmFsMSA8PCA0OwotCQkJcmMgPSByZWdfdyhvdiwgcmVnLCB2YWwwKTsKLQkJCWlmIChyYyA8IDApCi0JCQkJcmV0dXJuIHJjOwotCQl9Ci0KLQkJaWYgKEVOQUJMRV9VVl9RVUFOVEFCTEUpIHsKLQkJCXZhbDAgPSAqcFVWVGFibGUrKzsKLQkJCXZhbDEgPSAqcFVWVGFibGUrKzsKLQkJCXZhbDAgJj0gMHgwZjsKLQkJCXZhbDEgJj0gMHgwZjsKLQkJCXZhbDAgfD0gdmFsMSA8PCA0OwotCQkJcmMgPSByZWdfdyhvdiwgcmVnICsgT1Y1MThfUVVBTlRBQkxFU0laRS8yLCB2YWwwKTsKLQkJCWlmIChyYyA8IDApCi0JCQkJcmV0dXJuIHJjOwotCQl9Ci0KLQkJcmVnKys7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLW92NTF4X3Jlc2V0KHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBjaGFyIHJlc2V0X3R5cGUpCi17Ci0JaW50IHJjOwotCi0JLyogU2V0dGluZyBiaXQgMCBub3QgYWxsb3dlZCBvbiA1MTgvNTE4UGx1cyAqLwotCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkKLQkJcmVzZXRfdHlwZSAmPSAweGZlOwotCi0JUERFQlVHKDQsICJSZXNldDogdHlwZT0weCUwMlgiLCByZXNldF90eXBlKTsKLQotCXJjID0gcmVnX3cob3YsIFI1MXhfU1lTX1JFU0VULCByZXNldF90eXBlKTsKLQlyYyA9IHJlZ193KG92LCBSNTF4X1NZU19SRVNFVCwgMCk7Ci0KLQlpZiAocmMgPCAwKQotCQllcnIoInJlc2V0OiBjb21tYW5kIGZhaWxlZCIpOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIExvdy1sZXZlbCBJMkMgSS9PIGZ1bmN0aW9ucwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBOT1RFOiBEbyBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5IQotICogVGhlIE9WNTE4IEkyQyBJL08gcHJvY2VkdXJlIGlzIGRpZmZlcmVudCwgaGVuY2UsIHRoaXMgZnVuY3Rpb24uCi0gKiBUaGlzIGlzIG5vcm1hbGx5IG9ubHkgY2FsbGVkIGZyb20gaTJjX3coKS4gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24KLSAqIGFsd2F5cyBzdWNjZWVkcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHNlbnNvciBpcyBwcmVzZW50IGFuZCB3b3JraW5nLgotICovCi1zdGF0aWMgaW50Ci1vdjUxOF9pMmNfd3JpdGVfaW50ZXJuYWwoc3RydWN0IHVzYl9vdjUxMSAqb3YsCi0JCQkgdW5zaWduZWQgY2hhciByZWcsCi0JCQkgdW5zaWduZWQgY2hhciB2YWx1ZSkKLXsKLQlpbnQgcmM7Ci0KLQlQREVCVUcoNSwgIjB4JTAyWDoweCUwMlgiLCByZWcsIHZhbHVlKTsKLQotCS8qIFNlbGVjdCBjYW1lcmEgcmVnaXN0ZXIgKi8KLQlyYyA9IHJlZ193KG92LCBSNTF4X0kyQ19TQUREUl8zLCByZWcpOwotCWlmIChyYyA8IDApCi0JCXJldHVybiByYzsKLQotCS8qIFdyaXRlICJ2YWx1ZSIgdG8gSTJDIGRhdGEgcG9ydCBvZiBPVjUxMSAqLwotCXJjID0gcmVnX3cob3YsIFI1MXhfSTJDX0RBVEEsIHZhbHVlKTsKLQlpZiAocmMgPCAwKQotCQlyZXR1cm4gcmM7Ci0KLQkvKiBJbml0aWF0ZSAzLWJ5dGUgd3JpdGUgY3ljbGUgKi8KLQlyYyA9IHJlZ193KG92LCBSNTE4X0kyQ19DVEwsIDB4MDEpOwotCWlmIChyYyA8IDApCi0JCXJldHVybiByYzsKLQotCXJldHVybiAwOwotfQotCi0vKiBOT1RFOiBEbyBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5ISAqLwotc3RhdGljIGludAotb3Y1MTFfaTJjX3dyaXRlX2ludGVybmFsKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LAotCQkJIHVuc2lnbmVkIGNoYXIgcmVnLAotCQkJIHVuc2lnbmVkIGNoYXIgdmFsdWUpCi17Ci0JaW50IHJjLCByZXRyaWVzOwotCi0JUERFQlVHKDUsICIweCUwMlg6MHglMDJYIiwgcmVnLCB2YWx1ZSk7Ci0KLQkvKiBUaHJlZSBieXRlIHdyaXRlIGN5Y2xlICovCi0JZm9yIChyZXRyaWVzID0gT1Y1MTFfSTJDX1JFVFJJRVM7IDsgKSB7Ci0JCS8qIFNlbGVjdCBjYW1lcmEgcmVnaXN0ZXIgKi8KLQkJcmMgPSByZWdfdyhvdiwgUjUxeF9JMkNfU0FERFJfMywgcmVnKTsKLQkJaWYgKHJjIDwgMCkKLQkJCWJyZWFrOwotCi0JCS8qIFdyaXRlICJ2YWx1ZSIgdG8gSTJDIGRhdGEgcG9ydCBvZiBPVjUxMSAqLwotCQlyYyA9IHJlZ193KG92LCBSNTF4X0kyQ19EQVRBLCB2YWx1ZSk7Ci0JCWlmIChyYyA8IDApCi0JCQlicmVhazsKLQotCQkvKiBJbml0aWF0ZSAzLWJ5dGUgd3JpdGUgY3ljbGUgKi8KLQkJcmMgPSByZWdfdyhvdiwgUjUxMV9JMkNfQ1RMLCAweDAxKTsKLQkJaWYgKHJjIDwgMCkKLQkJCWJyZWFrOwotCi0JCS8qIFJldHJ5IHVudGlsIGlkbGUgKi8KLQkJZG8gewotCQkJcmMgPSByZWdfcihvdiwgUjUxMV9JMkNfQ1RMKTsKLQkJfSB3aGlsZSAocmMgPiAwICYmICgocmMmMSkgPT0gMCkpOwotCQlpZiAocmMgPCAwKQotCQkJYnJlYWs7Ci0KLQkJLyogQWNrPyAqLwotCQlpZiAoKHJjJjIpID09IDApIHsKLQkJCXJjID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0jaWYgMAotCQkvKiBJMkMgYWJvcnQgKi8KLQkJcmVnX3cob3YsIFI1MTFfSTJDX0NUTCwgMHgxMCk7Ci0jZW5kaWYKLQkJaWYgKC0tcmV0cmllcyA8IDApIHsKLQkJCWVycigiaTJjIHdyaXRlIHJldHJpZXMgZXhoYXVzdGVkIik7Ci0JCQlyYyA9IC0xOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qIE5PVEU6IERvIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkhCi0gKiBUaGUgT1Y1MTggSTJDIEkvTyBwcm9jZWR1cmUgaXMgZGlmZmVyZW50LCBoZW5jZSwgdGhpcyBmdW5jdGlvbi4KLSAqIFRoaXMgaXMgbm9ybWFsbHkgb25seSBjYWxsZWQgZnJvbSBpMmNfcigpLiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbgotICogYWx3YXlzIHN1Y2NlZWRzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgc2Vuc29yIGlzIHByZXNlbnQgYW5kIHdvcmtpbmcuCi0gKi8KLXN0YXRpYyBpbnQKLW92NTE4X2kyY19yZWFkX2ludGVybmFsKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBjaGFyIHJlZykKLXsKLQlpbnQgcmMsIHZhbHVlOwotCi0JLyogU2VsZWN0IGNhbWVyYSByZWdpc3RlciAqLwotCXJjID0gcmVnX3cob3YsIFI1MXhfSTJDX1NBRERSXzIsIHJlZyk7Ci0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOwotCi0JLyogSW5pdGlhdGUgMi1ieXRlIHdyaXRlIGN5Y2xlICovCi0JcmMgPSByZWdfdyhvdiwgUjUxOF9JMkNfQ1RMLCAweDAzKTsKLQlpZiAocmMgPCAwKQotCQlyZXR1cm4gcmM7Ci0KLQkvKiBJbml0aWF0ZSAyLWJ5dGUgcmVhZCBjeWNsZSAqLwotCXJjID0gcmVnX3cob3YsIFI1MThfSTJDX0NUTCwgMHgwNSk7Ci0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOwotCi0JdmFsdWUgPSByZWdfcihvdiwgUjUxeF9JMkNfREFUQSk7Ci0KLQlQREVCVUcoNSwgIjB4JTAyWDoweCUwMlgiLCByZWcsIHZhbHVlKTsKLQotCXJldHVybiB2YWx1ZTsKLX0KLQotLyogTk9URTogRG8gbm90IGNhbGwgdGhpcyBmdW5jdGlvbiBkaXJlY3RseSEKLSAqIHJldHVybnM6IG5lZ2F0aXZlIGlzIGVycm9yLCBwb3Mgb3IgemVybyBpcyBkYXRhICovCi1zdGF0aWMgaW50Ci1vdjUxMV9pMmNfcmVhZF9pbnRlcm5hbChzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgY2hhciByZWcpCi17Ci0JaW50IHJjLCB2YWx1ZSwgcmV0cmllczsKLQotCS8qIFR3byBieXRlIHdyaXRlIGN5Y2xlICovCi0JZm9yIChyZXRyaWVzID0gT1Y1MTFfSTJDX1JFVFJJRVM7IDsgKSB7Ci0JCS8qIFNlbGVjdCBjYW1lcmEgcmVnaXN0ZXIgKi8KLQkJcmMgPSByZWdfdyhvdiwgUjUxeF9JMkNfU0FERFJfMiwgcmVnKTsKLQkJaWYgKHJjIDwgMCkKLQkJCXJldHVybiByYzsKLQotCQkvKiBJbml0aWF0ZSAyLWJ5dGUgd3JpdGUgY3ljbGUgKi8KLQkJcmMgPSByZWdfdyhvdiwgUjUxMV9JMkNfQ1RMLCAweDAzKTsKLQkJaWYgKHJjIDwgMCkKLQkJCXJldHVybiByYzsKLQotCQkvKiBSZXRyeSB1bnRpbCBpZGxlICovCi0JCWRvIHsKLQkJCXJjID0gcmVnX3Iob3YsIFI1MTFfSTJDX0NUTCk7Ci0JCX0gd2hpbGUgKHJjID4gMCAmJiAoKHJjICYgMSkgPT0gMCkpOwotCQlpZiAocmMgPCAwKQotCQkJcmV0dXJuIHJjOwotCi0JCWlmICgocmMmMikgPT0gMCkgLyogQWNrPyAqLwotCQkJYnJlYWs7Ci0KLQkJLyogSTJDIGFib3J0ICovCi0JCXJlZ193KG92LCBSNTExX0kyQ19DVEwsIDB4MTApOwotCi0JCWlmICgtLXJldHJpZXMgPCAwKSB7Ci0JCQllcnIoImkyYyB3cml0ZSByZXRyaWVzIGV4aGF1c3RlZCIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotCi0JLyogVHdvIGJ5dGUgcmVhZCBjeWNsZSAqLwotCWZvciAocmV0cmllcyA9IE9WNTExX0kyQ19SRVRSSUVTOyA7ICkgewotCQkvKiBJbml0aWF0ZSAyLWJ5dGUgcmVhZCBjeWNsZSAqLwotCQlyYyA9IHJlZ193KG92LCBSNTExX0kyQ19DVEwsIDB4MDUpOwotCQlpZiAocmMgPCAwKQotCQkJcmV0dXJuIHJjOwotCi0JCS8qIFJldHJ5IHVudGlsIGlkbGUgKi8KLQkJZG8gewotCQkJcmMgPSByZWdfcihvdiwgUjUxMV9JMkNfQ1RMKTsKLQkJfSB3aGlsZSAocmMgPiAwICYmICgocmMmMSkgPT0gMCkpOwotCQlpZiAocmMgPCAwKQotCQkJcmV0dXJuIHJjOwotCi0JCWlmICgocmMmMikgPT0gMCkgLyogQWNrPyAqLwotCQkJYnJlYWs7Ci0KLQkJLyogSTJDIGFib3J0ICovCi0JCXJjID0gcmVnX3cob3YsIFI1MTFfSTJDX0NUTCwgMHgxMCk7Ci0JCWlmIChyYyA8IDApCi0JCQlyZXR1cm4gcmM7Ci0KLQkJaWYgKC0tcmV0cmllcyA8IDApIHsKLQkJCWVycigiaTJjIHJlYWQgcmV0cmllcyBleGhhdXN0ZWQiKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCX0KLQotCXZhbHVlID0gcmVnX3Iob3YsIFI1MXhfSTJDX0RBVEEpOwotCi0JUERFQlVHKDUsICIweCUwMlg6MHglMDJYIiwgcmVnLCB2YWx1ZSk7Ci0KLQkvKiBUaGlzIGlzIG5lZWRlZCB0byBtYWtlIGkyY193KCkgd29yayAqLwotCXJjID0gcmVnX3cob3YsIFI1MTFfSTJDX0NUTCwgMHgwNSk7Ci0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOwotCi0JcmV0dXJuIHZhbHVlOwotfQotCi0vKiByZXR1cm5zOiBuZWdhdGl2ZSBpcyBlcnJvciwgcG9zIG9yIHplcm8gaXMgZGF0YSAqLwotc3RhdGljIGludAotaTJjX3Ioc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIGNoYXIgcmVnKQotewotCWludCByYzsKLQotCW11dGV4X2xvY2soJm92LT5pMmNfbG9jayk7Ci0KLQlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpCi0JCXJjID0gb3Y1MThfaTJjX3JlYWRfaW50ZXJuYWwob3YsIHJlZyk7Ci0JZWxzZQotCQlyYyA9IG92NTExX2kyY19yZWFkX2ludGVybmFsKG92LCByZWcpOwotCi0JbXV0ZXhfdW5sb2NrKCZvdi0+aTJjX2xvY2spOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50Ci1pMmNfdyhzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgdmFsdWUpCi17Ci0JaW50IHJjOwotCi0JbXV0ZXhfbG9jaygmb3YtPmkyY19sb2NrKTsKLQotCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkKLQkJcmMgPSBvdjUxOF9pMmNfd3JpdGVfaW50ZXJuYWwob3YsIHJlZywgdmFsdWUpOwotCWVsc2UKLQkJcmMgPSBvdjUxMV9pMmNfd3JpdGVfaW50ZXJuYWwob3YsIHJlZywgdmFsdWUpOwotCi0JbXV0ZXhfdW5sb2NrKCZvdi0+aTJjX2xvY2spOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKiBEbyBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5ISAqLwotc3RhdGljIGludAotb3Y1MXhfaTJjX3dyaXRlX21hc2tfaW50ZXJuYWwoc3RydWN0IHVzYl9vdjUxMSAqb3YsCi0JCQkgICAgICB1bnNpZ25lZCBjaGFyIHJlZywKLQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgdmFsdWUsCi0JCQkgICAgICB1bnNpZ25lZCBjaGFyIG1hc2spCi17Ci0JaW50IHJjOwotCXVuc2lnbmVkIGNoYXIgb2xkdmFsLCBuZXd2YWw7Ci0KLQlpZiAobWFzayA9PSAweGZmKSB7Ci0JCW5ld3ZhbCA9IHZhbHVlOwotCX0gZWxzZSB7Ci0JCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkKLQkJCXJjID0gb3Y1MThfaTJjX3JlYWRfaW50ZXJuYWwob3YsIHJlZyk7Ci0JCWVsc2UKLQkJCXJjID0gb3Y1MTFfaTJjX3JlYWRfaW50ZXJuYWwob3YsIHJlZyk7Ci0JCWlmIChyYyA8IDApCi0JCQlyZXR1cm4gcmM7Ci0KLQkJb2xkdmFsID0gKHVuc2lnbmVkIGNoYXIpIHJjOwotCQlvbGR2YWwgJj0gKH5tYXNrKTsJCS8qIENsZWFyIHRoZSBtYXNrZWQgYml0cyAqLwotCQl2YWx1ZSAmPSBtYXNrOwkJCS8qIEVuZm9yY2UgbWFzayBvbiB2YWx1ZSAqLwotCQluZXd2YWwgPSBvbGR2YWwgfCB2YWx1ZTsJLyogU2V0IHRoZSBkZXNpcmVkIGJpdHMgKi8KLQl9Ci0KLQlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpCi0JCXJldHVybiAob3Y1MThfaTJjX3dyaXRlX2ludGVybmFsKG92LCByZWcsIG5ld3ZhbCkpOwotCWVsc2UKLQkJcmV0dXJuIChvdjUxMV9pMmNfd3JpdGVfaW50ZXJuYWwob3YsIHJlZywgbmV3dmFsKSk7Ci19Ci0KLS8qIFdyaXRlcyBiaXRzIGF0IHBvc2l0aW9ucyBzcGVjaWZpZWQgYnkgbWFzayB0byBhbiBJMkMgcmVnLiBCaXRzIHRoYXQgYXJlIGluCi0gKiB0aGUgc2FtZSBwb3NpdGlvbiBhcyAxJ3MgaW4gIm1hc2siIGFyZSBjbGVhcmVkIGFuZCBzZXQgdG8gInZhbHVlIi4gQml0cwotICogdGhhdCBhcmUgaW4gdGhlIHNhbWUgcG9zaXRpb24gYXMgMCdzIGluICJtYXNrIiBhcmUgcHJlc2VydmVkLCByZWdhcmRsZXNzCi0gKiBvZiB0aGVpciByZXNwZWN0aXZlIHN0YXRlIGluICJ2YWx1ZSIuCi0gKi8KLXN0YXRpYyBpbnQKLWkyY193X21hc2soc3RydWN0IHVzYl9vdjUxMSAqb3YsCi0JICAgdW5zaWduZWQgY2hhciByZWcsCi0JICAgdW5zaWduZWQgY2hhciB2YWx1ZSwKLQkgICB1bnNpZ25lZCBjaGFyIG1hc2spCi17Ci0JaW50IHJjOwotCi0JbXV0ZXhfbG9jaygmb3YtPmkyY19sb2NrKTsKLQlyYyA9IG92NTF4X2kyY193cml0ZV9tYXNrX2ludGVybmFsKG92LCByZWcsIHZhbHVlLCBtYXNrKTsKLQltdXRleF91bmxvY2soJm92LT5pMmNfbG9jayk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qIFNldCB0aGUgcmVhZCBhbmQgd3JpdGUgc2xhdmUgSURzLiBUaGUgInNsYXZlIiBhcmd1bWVudCBpcyB0aGUgd3JpdGUgc2xhdmUsCi0gKiBhbmQgdGhlIHJlYWQgc2xhdmUgd2lsbCBiZSBzZXQgdG8gKHNsYXZlICsgMSkuIG92LT5pMmNfbG9jayBzaG91bGQgYmUgaGVsZAotICogd2hlbiBjYWxsaW5nIHRoaXMuIFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBpMmMgSS9PCi0gKiBmdW5jdGlvbnMuCi0gKi8KLXN0YXRpYyBpbnQKLWkyY19zZXRfc2xhdmVfaW50ZXJuYWwoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIGNoYXIgc2xhdmUpCi17Ci0JaW50IHJjOwotCi0JcmMgPSByZWdfdyhvdiwgUjUxeF9JMkNfV19TSUQsIHNsYXZlKTsKLQlpZiAocmMgPCAwKQotCQlyZXR1cm4gcmM7Ci0KLQlyYyA9IHJlZ193KG92LCBSNTF4X0kyQ19SX1NJRCwgc2xhdmUgKyAxKTsKLQlpZiAocmMgPCAwKQotCQlyZXR1cm4gcmM7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogV3JpdGUgdG8gYSBzcGVjaWZpYyBJMkMgc2xhdmUgSUQgYW5kIHJlZ2lzdGVyLCB1c2luZyB0aGUgc3BlY2lmaWVkIG1hc2sgKi8KLXN0YXRpYyBpbnQKLWkyY193X3NsYXZlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LAotCSAgICB1bnNpZ25lZCBjaGFyIHNsYXZlLAotCSAgICB1bnNpZ25lZCBjaGFyIHJlZywKLQkgICAgdW5zaWduZWQgY2hhciB2YWx1ZSwKLQkgICAgdW5zaWduZWQgY2hhciBtYXNrKQotewotCWludCByYyA9IDA7Ci0KLQltdXRleF9sb2NrKCZvdi0+aTJjX2xvY2spOwotCi0JLyogU2V0IG5ldyBzbGF2ZSBJRHMgKi8KLQlyYyA9IGkyY19zZXRfc2xhdmVfaW50ZXJuYWwob3YsIHNsYXZlKTsKLQlpZiAocmMgPCAwKQotCQlnb3RvIG91dDsKLQotCXJjID0gb3Y1MXhfaTJjX3dyaXRlX21hc2tfaW50ZXJuYWwob3YsIHJlZywgdmFsdWUsIG1hc2spOwotCi1vdXQ6Ci0JLyogUmVzdG9yZSBwcmltYXJ5IElEcyAqLwotCWlmIChpMmNfc2V0X3NsYXZlX2ludGVybmFsKG92LCBvdi0+cHJpbWFyeV9pMmNfc2xhdmUpIDwgMCkKLQkJZXJyKCJDb3VsZG4ndCByZXN0b3JlIHByaW1hcnkgSTJDIHNsYXZlIik7Ci0KLQltdXRleF91bmxvY2soJm92LT5pMmNfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi0vKiBSZWFkIGZyb20gYSBzcGVjaWZpYyBJMkMgc2xhdmUgSUQgYW5kIHJlZ2lzdGVyICovCi1zdGF0aWMgaW50Ci1pMmNfcl9zbGF2ZShzdHJ1Y3QgdXNiX292NTExICpvdiwKLQkgICAgdW5zaWduZWQgY2hhciBzbGF2ZSwKLQkgICAgdW5zaWduZWQgY2hhciByZWcpCi17Ci0JaW50IHJjOwotCi0JbXV0ZXhfbG9jaygmb3YtPmkyY19sb2NrKTsKLQotCS8qIFNldCBuZXcgc2xhdmUgSURzICovCi0JcmMgPSBpMmNfc2V0X3NsYXZlX2ludGVybmFsKG92LCBzbGF2ZSk7Ci0JaWYgKHJjIDwgMCkKLQkJZ290byBvdXQ7Ci0KLQlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpCi0JCXJjID0gb3Y1MThfaTJjX3JlYWRfaW50ZXJuYWwob3YsIHJlZyk7Ci0JZWxzZQotCQlyYyA9IG92NTExX2kyY19yZWFkX2ludGVybmFsKG92LCByZWcpOwotCi1vdXQ6Ci0JLyogUmVzdG9yZSBwcmltYXJ5IElEcyAqLwotCWlmIChpMmNfc2V0X3NsYXZlX2ludGVybmFsKG92LCBvdi0+cHJpbWFyeV9pMmNfc2xhdmUpIDwgMCkKLQkJZXJyKCJDb3VsZG4ndCByZXN0b3JlIHByaW1hcnkgSTJDIHNsYXZlIik7Ci0KLQltdXRleF91bmxvY2soJm92LT5pMmNfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi0vKiBTZXRzIEkyQyByZWFkIGFuZCB3cml0ZSBzbGF2ZSBJRHMuIFJldHVybnMgPDAgZm9yIGVycm9yICovCi1zdGF0aWMgaW50Ci1vdjUxeF9zZXRfc2xhdmVfaWRzKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBjaGFyIHNpZCkKLXsKLQlpbnQgcmM7Ci0KLQltdXRleF9sb2NrKCZvdi0+aTJjX2xvY2spOwotCi0JcmMgPSBpMmNfc2V0X3NsYXZlX2ludGVybmFsKG92LCBzaWQpOwotCWlmIChyYyA8IDApCi0JCWdvdG8gb3V0OwotCi0JLy8gRklYTUU6IElzIHRoaXMgYWN0dWFsbHkgbmVjZXNzYXJ5PwotCXJjID0gb3Y1MXhfcmVzZXQob3YsIE9WNTExX1JFU0VUX05PUkVHUyk7Ci1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZvdi0+aTJjX2xvY2spOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludAotd3JpdGVfcmVndmFscyhzdHJ1Y3QgdXNiX292NTExICpvdiwgc3RydWN0IG92NTExX3JlZ3ZhbHMgKiBwUmVndmFscykKLXsKLQlpbnQgcmM7Ci0KLQl3aGlsZSAocFJlZ3ZhbHMtPmJ1cyAhPSBPVjUxMV9ET05FX0JVUykgewotCQlpZiAocFJlZ3ZhbHMtPmJ1cyA9PSBPVjUxMV9SRUdfQlVTKSB7Ci0JCQlpZiAoKHJjID0gcmVnX3cob3YsIHBSZWd2YWxzLT5yZWcsIHBSZWd2YWxzLT52YWwpKSA8IDApCi0JCQkJcmV0dXJuIHJjOwotCQl9IGVsc2UgaWYgKHBSZWd2YWxzLT5idXMgPT0gT1Y1MTFfSTJDX0JVUykgewotCQkJaWYgKChyYyA9IGkyY193KG92LCBwUmVndmFscy0+cmVnLCBwUmVndmFscy0+dmFsKSkgPCAwKQotCQkJCXJldHVybiByYzsKLQkJfSBlbHNlIHsKLQkJCWVycigiQmFkIHJlZ3ZhbCBhcnJheSIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCXBSZWd2YWxzKys7Ci0JfQotCXJldHVybiAwOwotfQotCi0jaWZkZWYgT1Y1MTFfREVCVUcKLXN0YXRpYyB2b2lkCi1kdW1wX2kyY19yYW5nZShzdHJ1Y3QgdXNiX292NTExICpvdiwgaW50IHJlZzEsIGludCByZWduKQotewotCWludCBpLCByYzsKLQotCWZvciAoaSA9IHJlZzE7IGkgPD0gcmVnbjsgaSsrKSB7Ci0JCXJjID0gaTJjX3Iob3YsIGkpOwotCQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiU2Vuc29yWzB4JTAyWF0gPSAweCUwMlhcbiIsIGksIHJjKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1kdW1wX2kyY19yZWdzKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQotewotCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsICJJMkMgUkVHU1xuIik7Ci0JZHVtcF9pMmNfcmFuZ2Uob3YsIDB4MDAsIDB4N0MpOwotfQotCi1zdGF0aWMgdm9pZAotZHVtcF9yZWdfcmFuZ2Uoc3RydWN0IHVzYl9vdjUxMSAqb3YsIGludCByZWcxLCBpbnQgcmVnbikKLXsKLQlpbnQgaSwgcmM7Ci0KLQlmb3IgKGkgPSByZWcxOyBpIDw9IHJlZ247IGkrKykgewotCQlyYyA9IHJlZ19yKG92LCBpKTsKLQkJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIk9WNTExWzB4JTAyWF0gPSAweCUwMlhcbiIsIGksIHJjKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1vdjUxMV9kdW1wX3JlZ3Moc3RydWN0IHVzYl9vdjUxMSAqb3YpCi17Ci0JZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIkNBTUVSQSBJTlRFUkZBQ0UgUkVHU1xuIik7Ci0JZHVtcF9yZWdfcmFuZ2Uob3YsIDB4MTAsIDB4MWYpOwotCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsICJEUkFNIElOVEVSRkFDRSBSRUdTXG4iKTsKLQlkdW1wX3JlZ19yYW5nZShvdiwgMHgyMCwgMHgyMyk7Ci0JZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIklTTyBGSUZPIFJFR1NcbiIpOwotCWR1bXBfcmVnX3JhbmdlKG92LCAweDMwLCAweDMxKTsKLQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiUElPIFJFR1NcbiIpOwotCWR1bXBfcmVnX3JhbmdlKG92LCAweDM4LCAweDM5KTsKLQlkdW1wX3JlZ19yYW5nZShvdiwgMHgzZSwgMHgzZSk7Ci0JZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIkkyQyBSRUdTXG4iKTsKLQlkdW1wX3JlZ19yYW5nZShvdiwgMHg0MCwgMHg0OSk7Ci0JZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIlNZU1RFTSBDT05UUk9MIFJFR1NcbiIpOwotCWR1bXBfcmVnX3JhbmdlKG92LCAweDUwLCAweDU1KTsKLQlkdW1wX3JlZ19yYW5nZShvdiwgMHg1ZSwgMHg1Zik7Ci0JZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIk9tbmlDRSBSRUdTXG4iKTsKLQlkdW1wX3JlZ19yYW5nZShvdiwgMHg3MCwgMHg3OSk7Ci0JLyogTk9URTogUXVhbnRpemF0aW9uIHRhYmxlcyBhcmUgbm90IHJlYWRhYmxlLiBZb3Ugd2lsbCBnZXQgdGhlIHZhbHVlCi0JICogaW4gcmVnLiAweDc5IGZvciBldmVyeSB0YWJsZSByZWdpc3RlciAqLwotCWR1bXBfcmVnX3JhbmdlKG92LCAweDgwLCAweDlmKTsKLQlkdW1wX3JlZ19yYW5nZShvdiwgMHhhMCwgMHhiZik7Ci0KLX0KLQotc3RhdGljIHZvaWQKLW92NTE4X2R1bXBfcmVncyhzdHJ1Y3QgdXNiX292NTExICpvdikKLXsKLQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiVklERU8gTU9ERSBSRUdTXG4iKTsKLQlkdW1wX3JlZ19yYW5nZShvdiwgMHgyMCwgMHgyZik7Ci0JZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIkRBVEEgUFVNUCBBTkQgU05BUFNIT1QgUkVHU1xuIik7Ci0JZHVtcF9yZWdfcmFuZ2Uob3YsIDB4MzAsIDB4M2YpOwotCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsICJJMkMgUkVHU1xuIik7Ci0JZHVtcF9yZWdfcmFuZ2Uob3YsIDB4NDAsIDB4NGYpOwotCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsICJTWVNURU0gQ09OVFJPTCBBTkQgVkVORE9SIFJFR1NcbiIpOwotCWR1bXBfcmVnX3JhbmdlKG92LCAweDUwLCAweDVmKTsKLQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiNjAgLSA2RlxuIik7Ci0JZHVtcF9yZWdfcmFuZ2Uob3YsIDB4NjAsIDB4NmYpOwotCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsICI3MCAtIDdGXG4iKTsKLQlkdW1wX3JlZ19yYW5nZShvdiwgMHg3MCwgMHg3Zik7Ci0JZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIlkgUVVBTlRJWkFUSU9OIFRBQkxFXG4iKTsKLQlkdW1wX3JlZ19yYW5nZShvdiwgMHg4MCwgMHg4Zik7Ci0JZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIlVWIFFVQU5USVpBVElPTiBUQUJMRVxuIik7Ci0JZHVtcF9yZWdfcmFuZ2Uob3YsIDB4OTAsIDB4OWYpOwotCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsICJBMCAtIEJGXG4iKTsKLQlkdW1wX3JlZ19yYW5nZShvdiwgMHhhMCwgMHhiZik7Ci0JZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIkNCUlxuIik7Ci0JZHVtcF9yZWdfcmFuZ2Uob3YsIDB4YzAsIDB4Y2YpOwotfQotI2VuZGlmCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVGVtcG9yYXJpbHkgc3RvcHMgT1Y1MTEgZnJvbSBmdW5jdGlvbmluZy4gTXVzdCBkbyB0aGlzIGJlZm9yZSBjaGFuZ2luZwotICogcmVnaXN0ZXJzIHdoaWxlIHRoZSBjYW1lcmEgaXMgc3RyZWFtaW5nICovCi1zdGF0aWMgaW5saW5lIGludAotb3Y1MXhfc3RvcChzdHJ1Y3QgdXNiX292NTExICpvdikKLXsKLQlQREVCVUcoNCwgInN0b3BwaW5nIik7Ci0Jb3YtPnN0b3BwZWQgPSAxOwotCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkKLQkJcmV0dXJuIChyZWdfd19tYXNrKG92LCBSNTF4X1NZU19SRVNFVCwgMHgzYSwgMHgzYSkpOwotCWVsc2UKLQkJcmV0dXJuIChyZWdfdyhvdiwgUjUxeF9TWVNfUkVTRVQsIDB4M2QpKTsKLX0KLQotLyogUmVzdGFydHMgT1Y1MTEgYWZ0ZXIgb3Y1MTFfc3RvcCgpIGlzIGNhbGxlZC4gSGFzIG5vIGVmZmVjdCBpZiBpdCBpcyBub3QKLSAqIGFjdHVhbGx5IHN0b3BwZWQgKGZvciBwZXJmb3JtYW5jZSkuICovCi1zdGF0aWMgaW5saW5lIGludAotb3Y1MXhfcmVzdGFydChzdHJ1Y3QgdXNiX292NTExICpvdikKLXsKLQlpZiAob3YtPnN0b3BwZWQpIHsKLQkJUERFQlVHKDQsICJyZXN0YXJ0aW5nIik7Ci0JCW92LT5zdG9wcGVkID0gMDsKLQotCQkvKiBSZWluaXRpYWxpemUgdGhlIHN0cmVhbSAqLwotCQlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpCi0JCQlyZWdfdyhvdiwgMHgyZiwgMHg4MCk7Ci0KLQkJcmV0dXJuIChyZWdfdyhvdiwgUjUxeF9TWVNfUkVTRVQsIDB4MDApKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogU2xlZXBzIHVudGlsIG5vIGZyYW1lcyBhcmUgYWN0aXZlLiBSZXR1cm5zICEwIGlmIGdvdCBzaWduYWwgKi8KLXN0YXRpYyBpbnQKLW92NTF4X3dhaXRfZnJhbWVzX2luYWN0aXZlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQotewotCXJldHVybiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUob3YtPndxLCBvdi0+Y3VyZnJhbWUgPCAwKTsKLX0KLQotLyogUmVzZXRzIHRoZSBoYXJkd2FyZSBzbmFwc2hvdCBidXR0b24gKi8KLXN0YXRpYyB2b2lkCi1vdjUxeF9jbGVhcl9zbmFwc2hvdChzdHJ1Y3QgdXNiX292NTExICpvdikKLXsKLQlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTEpIHsKLQkJcmVnX3cob3YsIFI1MXhfU1lTX1NOQVAsIDB4MDApOwotCQlyZWdfdyhvdiwgUjUxeF9TWVNfU05BUCwgMHgwMik7Ci0JCXJlZ193KG92LCBSNTF4X1NZU19TTkFQLCAweDAwKTsKLQl9IGVsc2UgaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KSB7Ci0JCWRldl93YXJuKCZvdi0+ZGV2LT5kZXYsCi0JCQkgInNuYXBzaG90IHJlc2V0IG5vdCBzdXBwb3J0ZWQgeWV0IG9uIE9WNTE4KCspXG4iKTsKLQl9IGVsc2UgewotCQlkZXZfZXJyKCZvdi0+ZGV2LT5kZXYsICJjbGVhciBzbmFwOiBpbnZhbGlkIGJyaWRnZSB0eXBlXG4iKTsKLQl9Ci19Ci0KLSNpZiAwCi0vKiBDaGVja3MgdGhlIHN0YXR1cyBvZiB0aGUgc25hcHNob3QgYnV0dG9uLiBSZXR1cm5zIDEgaWYgaXQgd2FzIHByZXNzZWQgc2luY2UKLSAqIGl0IHdhcyBsYXN0IGNsZWFyZWQsIGFuZCB6ZXJvIGluIGFsbCBvdGhlciBjYXNlcyAoaW5jbHVkaW5nIGVycm9ycykgKi8KLXN0YXRpYyBpbnQKLW92NTF4X2NoZWNrX3NuYXBzaG90KHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQotewotCWludCByZXQsIHN0YXR1cyA9IDA7Ci0KLQlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTEpIHsKLQkJcmV0ID0gcmVnX3Iob3YsIFI1MXhfU1lTX1NOQVApOwotCQlpZiAocmV0IDwgMCkgewotCQkJZGV2X2Vycigmb3YtPmRldi0+ZGV2LAotCQkJCSJFcnJvciBjaGVja2luZyBzbnNwc2hvdCBzdGF0dXMgKCVkKVxuIiwgcmV0KTsKLQkJfSBlbHNlIGlmIChyZXQgJiAweDA4KSB7Ci0JCQlzdGF0dXMgPSAxOwotCQl9Ci0JfSBlbHNlIGlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkgewotCQlkZXZfd2Fybigmb3YtPmRldi0+ZGV2LAotCQkJICJzbmFwc2hvdCBjaGVjayBub3Qgc3VwcG9ydGVkIHlldCBvbiBPVjUxOCgrKVxuIik7Ci0JfSBlbHNlIHsKLQkJZGV2X2Vycigmb3YtPmRldi0+ZGV2LCAiY2xlYXIgc25hcDogaW52YWxpZCBicmlkZ2UgdHlwZVxuIik7Ci0JfQotCi0JcmV0dXJuIHN0YXR1czsKLX0KLSNlbmRpZgotCi0vKiBUaGlzIGRvZXMgYW4gaW5pdGlhbCByZXNldCBvZiBhbiBPbW5pVmlzaW9uIHNlbnNvciBhbmQgZW5zdXJlcyB0aGF0IEkyQwotICogaXMgc3luY2hyb25pemVkLiBSZXR1cm5zIDwwIGZvciBmYWlsdXJlLgotICovCi1zdGF0aWMgaW50Ci1pbml0X292X3NlbnNvcihzdHJ1Y3QgdXNiX292NTExICpvdikKLXsKLQlpbnQgaSwgc3VjY2VzczsKLQotCS8qIFJlc2V0IHRoZSBzZW5zb3IgKi8KLQlpZiAoaTJjX3cob3YsIDB4MTIsIDB4ODApIDwgMCkKLQkJcmV0dXJuIC1FSU87Ci0KLQkvKiBXYWl0IGZvciBpdCB0byBpbml0aWFsaXplICovCi0JbXNsZWVwKDE1MCk7Ci0KLQlmb3IgKGkgPSAwLCBzdWNjZXNzID0gMDsgaSA8IGkyY19kZXRlY3RfdHJpZXMgJiYgIXN1Y2Nlc3M7IGkrKykgewotCQlpZiAoKGkyY19yKG92LCBPVjc2MTBfUkVHX0lEX0hJR0gpID09IDB4N0YpICYmCi0JCSAgICAoaTJjX3Iob3YsIE9WNzYxMF9SRUdfSURfTE9XKSA9PSAweEEyKSkgewotCQkJc3VjY2VzcyA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qIFJlc2V0IHRoZSBzZW5zb3IgKi8KLQkJaWYgKGkyY193KG92LCAweDEyLCAweDgwKSA8IDApCi0JCQlyZXR1cm4gLUVJTzsKLQkJLyogV2FpdCBmb3IgaXQgdG8gaW5pdGlhbGl6ZSAqLwotCQltc2xlZXAoMTUwKTsKLQkJLyogRHVtbXkgcmVhZCB0byBzeW5jIEkyQyAqLwotCQlpZiAoaTJjX3Iob3YsIDB4MDApIDwgMCkKLQkJCXJldHVybiAtRUlPOwotCX0KLQotCWlmICghc3VjY2VzcykKLQkJcmV0dXJuIC1FSU87Ci0KLQlQREVCVUcoMSwgIkkyQyBzeW5jZWQgaW4gJWQgYXR0ZW1wdChzKSIsIGkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLW92NTExX3NldF9wYWNrZXRfc2l6ZShzdHJ1Y3QgdXNiX292NTExICpvdiwgaW50IHNpemUpCi17Ci0JaW50IGFsdCwgbXVsdDsKLQotCWlmIChvdjUxeF9zdG9wKG92KSA8IDApCi0JCXJldHVybiAtRUlPOwotCi0JbXVsdCA9IHNpemUgPj4gNTsKLQotCWlmIChvdi0+YnJpZGdlID09IEJSR19PVjUxMSkgewotCQlpZiAoc2l6ZSA9PSAwKQotCQkJYWx0ID0gT1Y1MTFfQUxUX1NJWkVfMDsKLQkJZWxzZSBpZiAoc2l6ZSA9PSAyNTcpCi0JCQlhbHQgPSBPVjUxMV9BTFRfU0laRV8yNTc7Ci0JCWVsc2UgaWYgKHNpemUgPT0gNTEzKQotCQkJYWx0ID0gT1Y1MTFfQUxUX1NJWkVfNTEzOwotCQllbHNlIGlmIChzaXplID09IDc2OSkKLQkJCWFsdCA9IE9WNTExX0FMVF9TSVpFXzc2OTsKLQkJZWxzZSBpZiAoc2l6ZSA9PSA5OTMpCi0JCQlhbHQgPSBPVjUxMV9BTFRfU0laRV85OTM7Ci0JCWVsc2UgewotCQkJZXJyKCJTZXQgcGFja2V0IHNpemU6IGludmFsaWQgc2l6ZSAoJWQpIiwgc2l6ZSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0gZWxzZSBpZiAob3YtPmJyaWRnZSA9PSBCUkdfT1Y1MTFQTFVTKSB7Ci0JCWlmIChzaXplID09IDApCi0JCQlhbHQgPSBPVjUxMVBMVVNfQUxUX1NJWkVfMDsKLQkJZWxzZSBpZiAoc2l6ZSA9PSAzMykKLQkJCWFsdCA9IE9WNTExUExVU19BTFRfU0laRV8zMzsKLQkJZWxzZSBpZiAoc2l6ZSA9PSAxMjkpCi0JCQlhbHQgPSBPVjUxMVBMVVNfQUxUX1NJWkVfMTI5OwotCQllbHNlIGlmIChzaXplID09IDI1NykKLQkJCWFsdCA9IE9WNTExUExVU19BTFRfU0laRV8yNTc7Ci0JCWVsc2UgaWYgKHNpemUgPT0gMzg1KQotCQkJYWx0ID0gT1Y1MTFQTFVTX0FMVF9TSVpFXzM4NTsKLQkJZWxzZSBpZiAoc2l6ZSA9PSA1MTMpCi0JCQlhbHQgPSBPVjUxMVBMVVNfQUxUX1NJWkVfNTEzOwotCQllbHNlIGlmIChzaXplID09IDc2OSkKLQkJCWFsdCA9IE9WNTExUExVU19BTFRfU0laRV83Njk7Ci0JCWVsc2UgaWYgKHNpemUgPT0gOTYxKQotCQkJYWx0ID0gT1Y1MTFQTFVTX0FMVF9TSVpFXzk2MTsKLQkJZWxzZSB7Ci0JCQllcnIoIlNldCBwYWNrZXQgc2l6ZTogaW52YWxpZCBzaXplICglZCkiLCBzaXplKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfSBlbHNlIHsKLQkJZXJyKCJTZXQgcGFja2V0IHNpemU6IEludmFsaWQgYnJpZGdlIHR5cGUiKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JUERFQlVHKDMsICIlZCwgbXVsdD0lZCwgYWx0PSVkIiwgc2l6ZSwgbXVsdCwgYWx0KTsKLQotCWlmIChyZWdfdyhvdiwgUjUxeF9GSUZPX1BTSVpFLCBtdWx0KSA8IDApCi0JCXJldHVybiAtRUlPOwotCi0JaWYgKHVzYl9zZXRfaW50ZXJmYWNlKG92LT5kZXYsIG92LT5pZmFjZSwgYWx0KSA8IDApIHsKLQkJZXJyKCJTZXQgcGFja2V0IHNpemU6IHNldCBpbnRlcmZhY2UgZXJyb3IiKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQlpZiAob3Y1MXhfcmVzZXQob3YsIE9WNTExX1JFU0VUX05PUkVHUykgPCAwKQotCQlyZXR1cm4gLUVJTzsKLQotCW92LT5wYWNrZXRfc2l6ZSA9IHNpemU7Ci0KLQlpZiAob3Y1MXhfcmVzdGFydChvdikgPCAwKQotCQlyZXR1cm4gLUVJTzsKLQotCXJldHVybiAwOwotfQotCi0vKiBOb3RlOiBVbmxpa2UgdGhlIE9WNTExL09WNTExKywgdGhlIHNpemUgYXJndW1lbnQgZG9lcyBOT1QgaW5jbHVkZSB0aGUKLSAqIG9wdGlvbmFsIHBhY2tldCBudW1iZXIgYnl0ZS4gVGhlIGFjdHVhbCBzaXplICppcyogc3RvcmVkIGluIG92LT5wYWNrZXRfc2l6ZSwKLSAqIHRob3VnaC4gKi8KLXN0YXRpYyBpbnQKLW92NTE4X3NldF9wYWNrZXRfc2l6ZShzdHJ1Y3QgdXNiX292NTExICpvdiwgaW50IHNpemUpCi17Ci0JaW50IGFsdDsKLQotCWlmIChvdjUxeF9zdG9wKG92KSA8IDApCi0JCXJldHVybiAtRUlPOwotCi0JaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KSB7Ci0JCWlmIChzaXplID09IDApCi0JCQlhbHQgPSBPVjUxOF9BTFRfU0laRV8wOwotCQllbHNlIGlmIChzaXplID09IDEyOCkKLQkJCWFsdCA9IE9WNTE4X0FMVF9TSVpFXzEyODsKLQkJZWxzZSBpZiAoc2l6ZSA9PSAyNTYpCi0JCQlhbHQgPSBPVjUxOF9BTFRfU0laRV8yNTY7Ci0JCWVsc2UgaWYgKHNpemUgPT0gMzg0KQotCQkJYWx0ID0gT1Y1MThfQUxUX1NJWkVfMzg0OwotCQllbHNlIGlmIChzaXplID09IDUxMikKLQkJCWFsdCA9IE9WNTE4X0FMVF9TSVpFXzUxMjsKLQkJZWxzZSBpZiAoc2l6ZSA9PSA2NDApCi0JCQlhbHQgPSBPVjUxOF9BTFRfU0laRV82NDA7Ci0JCWVsc2UgaWYgKHNpemUgPT0gNzY4KQotCQkJYWx0ID0gT1Y1MThfQUxUX1NJWkVfNzY4OwotCQllbHNlIGlmIChzaXplID09IDg5NikKLQkJCWFsdCA9IE9WNTE4X0FMVF9TSVpFXzg5NjsKLQkJZWxzZSB7Ci0JCQllcnIoIlNldCBwYWNrZXQgc2l6ZTogaW52YWxpZCBzaXplICglZCkiLCBzaXplKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfSBlbHNlIHsKLQkJZXJyKCJTZXQgcGFja2V0IHNpemU6IEludmFsaWQgYnJpZGdlIHR5cGUiKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JUERFQlVHKDMsICIlZCwgYWx0PSVkIiwgc2l6ZSwgYWx0KTsKLQotCW92LT5wYWNrZXRfc2l6ZSA9IHNpemU7Ci0JaWYgKHNpemUgPiAwKSB7Ci0JCS8qIFByb2dyYW0gSVNPIEZJRk8gc2l6ZSByZWcgKHBhY2tldCBudW1iZXIgaXNuJ3QgaW5jbHVkZWQpICovCi0JCW92NTE4X3JlZ193MzIob3YsIDB4MzAsIHNpemUsIDIpOwotCi0JCWlmIChvdi0+cGFja2V0X251bWJlcmluZykKLQkJCSsrb3YtPnBhY2tldF9zaXplOwotCX0KLQotCWlmICh1c2Jfc2V0X2ludGVyZmFjZShvdi0+ZGV2LCBvdi0+aWZhY2UsIGFsdCkgPCAwKSB7Ci0JCWVycigiU2V0IHBhY2tldCBzaXplOiBzZXQgaW50ZXJmYWNlIGVycm9yIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JLyogSW5pdGlhbGl6ZSB0aGUgc3RyZWFtICovCi0JaWYgKHJlZ193KG92LCAweDJmLCAweDgwKSA8IDApCi0JCXJldHVybiAtRUlPOwotCi0JaWYgKG92NTF4X3Jlc3RhcnQob3YpIDwgMCkKLQkJcmV0dXJuIC1FSU87Ci0KLQlpZiAob3Y1MXhfcmVzZXQob3YsIE9WNTExX1JFU0VUX05PUkVHUykgPCAwKQotCQlyZXR1cm4gLUVJTzsKLQotCXJldHVybiAwOwotfQotCi0vKiBVcGxvYWQgY29tcHJlc3Npb24gcGFyYW1zIGFuZCBxdWFudGl6YXRpb24gdGFibGVzLiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MuICovCi1zdGF0aWMgaW50Ci1vdjUxMV9pbml0X2NvbXByZXNzaW9uKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIW92LT5jb21wcmVzc19pbml0ZWQpIHsKLQkJcmVnX3cob3YsIDB4NzAsIHBoeSk7Ci0JCXJlZ193KG92LCAweDcxLCBwaHV2KTsKLQkJcmVnX3cob3YsIDB4NzIsIHB2eSk7Ci0JCXJlZ193KG92LCAweDczLCBwdnV2KTsKLQkJcmVnX3cob3YsIDB4NzQsIHFoeSk7Ci0JCXJlZ193KG92LCAweDc1LCBxaHV2KTsKLQkJcmVnX3cob3YsIDB4NzYsIHF2eSk7Ci0JCXJlZ193KG92LCAweDc3LCBxdnV2KTsKLQotCQlpZiAob3Y1MTFfdXBsb2FkX3F1YW5fdGFibGVzKG92KSA8IDApIHsKLQkJCWVycigiRXJyb3IgdXBsb2FkaW5nIHF1YW50aXphdGlvbiB0YWJsZXMiKTsKLQkJCXJjID0gLUVJTzsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCi0Jb3YtPmNvbXByZXNzX2luaXRlZCA9IDE7Ci1vdXQ6Ci0JcmV0dXJuIHJjOwotfQotCi0vKiBVcGxvYWQgY29tcHJlc3Npb24gcGFyYW1zIGFuZCBxdWFudGl6YXRpb24gdGFibGVzLiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MuICovCi1zdGF0aWMgaW50Ci1vdjUxOF9pbml0X2NvbXByZXNzaW9uKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIW92LT5jb21wcmVzc19pbml0ZWQpIHsKLQkJaWYgKG92NTE4X3VwbG9hZF9xdWFuX3RhYmxlcyhvdikgPCAwKSB7Ci0JCQllcnIoIkVycm9yIHVwbG9hZGluZyBxdWFudGl6YXRpb24gdGFibGVzIik7Ci0JCQlyYyA9IC1FSU87Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCW92LT5jb21wcmVzc19pbml0ZWQgPSAxOwotb3V0OgotCXJldHVybiByYzsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyogU2V0cyBzZW5zb3IncyBjb250cmFzdCBzZXR0aW5nIHRvICJ2YWwiICovCi1zdGF0aWMgaW50Ci1zZW5zb3Jfc2V0X2NvbnRyYXN0KHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBzaG9ydCB2YWwpCi17Ci0JaW50IHJjOwotCi0JUERFQlVHKDMsICIlZCIsIHZhbCk7Ci0KLQlpZiAob3YtPnN0b3BfZHVyaW5nX3NldCkKLQkJaWYgKG92NTF4X3N0b3Aob3YpIDwgMCkKLQkJCXJldHVybiAtRUlPOwotCi0Jc3dpdGNoIChvdi0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5fT1Y3NjEwOgotCWNhc2UgU0VOX09WNjYyMDoKLQl7Ci0JCXJjID0gaTJjX3cob3YsIE9WNzYxMF9SRUdfQ05ULCB2YWwgPj4gOCk7Ci0JCWlmIChyYyA8IDApCi0JCQlnb3RvIG91dDsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0VOX09WNjYzMDoKLQl7Ci0JCXJjID0gaTJjX3dfbWFzayhvdiwgT1Y3NjEwX1JFR19DTlQsIHZhbCA+PiAxMiwgMHgwZik7Ci0JCWlmIChyYyA8IDApCi0JCQlnb3RvIG91dDsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0VOX09WNzYyMDoKLQl7Ci0JCXVuc2lnbmVkIGNoYXIgY3RhYltdID0gewotCQkJMHgwMSwgMHgwNSwgMHgwOSwgMHgxMSwgMHgxNSwgMHgzNSwgMHgzNywgMHg1NywKLQkJCTB4NWIsIDB4YTUsIDB4YTcsIDB4YzcsIDB4YzksIDB4Y2YsIDB4ZWYsIDB4ZmYKLQkJfTsKLQotCQkvKiBVc2UgWSBnYW1tYSBjb250cm9sIGluc3RlYWQuIEJpdCAwIGVuYWJsZXMgaXQuICovCi0JCXJjID0gaTJjX3cob3YsIDB4NjQsIGN0YWJbdmFsPj4xMl0pOwotCQlpZiAocmMgPCAwKQotCQkJZ290byBvdXQ7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNFTl9TQUE3MTExQToKLQl7Ci0JCXJjID0gaTJjX3cob3YsIDB4MGIsIHZhbCA+PiA5KTsKLQkJaWYgKHJjIDwgMCkKLQkJCWdvdG8gb3V0OwotCQlicmVhazsKLQl9Ci0JZGVmYXVsdDoKLQl7Ci0JCVBERUJVRygzLCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOwotCQlyYyA9IC1FUEVSTTsKLQkJZ290byBvdXQ7Ci0JfQotCX0KLQotCXJjID0gMDsJCS8qIFN1Y2Nlc3MgKi8KLQlvdi0+Y29udHJhc3QgPSB2YWw7Ci1vdXQ6Ci0JaWYgKG92NTF4X3Jlc3RhcnQob3YpIDwgMCkKLQkJcmV0dXJuIC1FSU87Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qIEdldHMgc2Vuc29yJ3MgY29udHJhc3Qgc2V0dGluZyAqLwotc3RhdGljIGludAotc2Vuc29yX2dldF9jb250cmFzdChzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgc2hvcnQgKnZhbCkKLXsKLQlpbnQgcmM7Ci0KLQlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKLQljYXNlIFNFTl9PVjc2MTA6Ci0JY2FzZSBTRU5fT1Y2NjIwOgotCQlyYyA9IGkyY19yKG92LCBPVjc2MTBfUkVHX0NOVCk7Ci0JCWlmIChyYyA8IDApCi0JCQlyZXR1cm4gcmM7Ci0JCWVsc2UKLQkJCSp2YWwgPSByYyA8PCA4OwotCQlicmVhazsKLQljYXNlIFNFTl9PVjY2MzA6Ci0JCXJjID0gaTJjX3Iob3YsIE9WNzYxMF9SRUdfQ05UKTsKLQkJaWYgKHJjIDwgMCkKLQkJCXJldHVybiByYzsKLQkJZWxzZQotCQkJKnZhbCA9IHJjIDw8IDEyOwotCQlicmVhazsKLQljYXNlIFNFTl9PVjc2MjA6Ci0JCS8qIFVzZSBZIGdhbW1hIHJlZyBpbnN0ZWFkLiBCaXQgMCBpcyB0aGUgZW5hYmxlIGJpdC4gKi8KLQkJcmMgPSBpMmNfcihvdiwgMHg2NCk7Ci0JCWlmIChyYyA8IDApCi0JCQlyZXR1cm4gcmM7Ci0JCWVsc2UKLQkJCSp2YWwgPSAocmMgJiAweGZlKSA8PCA4OwotCQlicmVhazsKLQljYXNlIFNFTl9TQUE3MTExQToKLQkJKnZhbCA9IG92LT5jb250cmFzdDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJUERFQlVHKDMsICJVbnN1cHBvcnRlZCB3aXRoIHRoaXMgc2Vuc29yIik7Ci0JCXJldHVybiAtRVBFUk07Ci0JfQotCi0JUERFQlVHKDMsICIlZCIsICp2YWwpOwotCW92LT5jb250cmFzdCA9ICp2YWw7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyogU2V0cyBzZW5zb3IncyBicmlnaHRuZXNzIHNldHRpbmcgdG8gInZhbCIgKi8KLXN0YXRpYyBpbnQKLXNlbnNvcl9zZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgc2hvcnQgdmFsKQotewotCWludCByYzsKLQotCVBERUJVRyg0LCAiJWQiLCB2YWwpOwotCi0JaWYgKG92LT5zdG9wX2R1cmluZ19zZXQpCi0JCWlmIChvdjUxeF9zdG9wKG92KSA8IDApCi0JCQlyZXR1cm4gLUVJTzsKLQotCXN3aXRjaCAob3YtPnNlbnNvcikgewotCWNhc2UgU0VOX09WNzYxMDoKLQljYXNlIFNFTl9PVjc2QkU6Ci0JY2FzZSBTRU5fT1Y2NjIwOgotCWNhc2UgU0VOX09WNjYzMDoKLQkJcmMgPSBpMmNfdyhvdiwgT1Y3NjEwX1JFR19CUlQsIHZhbCA+PiA4KTsKLQkJaWYgKHJjIDwgMCkKLQkJCWdvdG8gb3V0OwotCQlicmVhazsKLQljYXNlIFNFTl9PVjc2MjA6Ci0JCS8qIDc2MjAgZG9lc24ndCBsaWtlIG1hbnVhbCBjaGFuZ2VzIHdoZW4gaW4gYXV0byBtb2RlICovCi0JCWlmICghb3YtPmF1dG9fYnJ0KSB7Ci0JCQlyYyA9IGkyY193KG92LCBPVjc2MTBfUkVHX0JSVCwgdmFsID4+IDgpOwotCQkJaWYgKHJjIDwgMCkKLQkJCQlnb3RvIG91dDsKLQkJfQotCQlicmVhazsKLQljYXNlIFNFTl9TQUE3MTExQToKLQkJcmMgPSBpMmNfdyhvdiwgMHgwYSwgdmFsID4+IDgpOwotCQlpZiAocmMgPCAwKQotCQkJZ290byBvdXQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVBERUJVRygzLCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOwotCQlyYyA9IC1FUEVSTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmMgPSAwOwkJLyogU3VjY2VzcyAqLwotCW92LT5icmlnaHRuZXNzID0gdmFsOwotb3V0OgotCWlmIChvdjUxeF9yZXN0YXJ0KG92KSA8IDApCi0JCXJldHVybiAtRUlPOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKiBHZXRzIHNlbnNvcidzIGJyaWdodG5lc3Mgc2V0dGluZyAqLwotc3RhdGljIGludAotc2Vuc29yX2dldF9icmlnaHRuZXNzKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBzaG9ydCAqdmFsKQotewotCWludCByYzsKLQotCXN3aXRjaCAob3YtPnNlbnNvcikgewotCWNhc2UgU0VOX09WNzYxMDoKLQljYXNlIFNFTl9PVjc2QkU6Ci0JY2FzZSBTRU5fT1Y3NjIwOgotCWNhc2UgU0VOX09WNjYyMDoKLQljYXNlIFNFTl9PVjY2MzA6Ci0JCXJjID0gaTJjX3Iob3YsIE9WNzYxMF9SRUdfQlJUKTsKLQkJaWYgKHJjIDwgMCkKLQkJCXJldHVybiByYzsKLQkJZWxzZQotCQkJKnZhbCA9IHJjIDw8IDg7Ci0JCWJyZWFrOwotCWNhc2UgU0VOX1NBQTcxMTFBOgotCQkqdmFsID0gb3YtPmJyaWdodG5lc3M7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVBERUJVRygzLCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOwotCQlyZXR1cm4gLUVQRVJNOwotCX0KLQotCVBERUJVRygzLCAiJWQiLCAqdmFsKTsKLQlvdi0+YnJpZ2h0bmVzcyA9ICp2YWw7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyogU2V0cyBzZW5zb3IncyBzYXR1cmF0aW9uIChjb2xvciBpbnRlbnNpdHkpIHNldHRpbmcgdG8gInZhbCIgKi8KLXN0YXRpYyBpbnQKLXNlbnNvcl9zZXRfc2F0dXJhdGlvbihzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgc2hvcnQgdmFsKQotewotCWludCByYzsKLQotCVBERUJVRygzLCAiJWQiLCB2YWwpOwotCi0JaWYgKG92LT5zdG9wX2R1cmluZ19zZXQpCi0JCWlmIChvdjUxeF9zdG9wKG92KSA8IDApCi0JCQlyZXR1cm4gLUVJTzsKLQotCXN3aXRjaCAob3YtPnNlbnNvcikgewotCWNhc2UgU0VOX09WNzYxMDoKLQljYXNlIFNFTl9PVjc2QkU6Ci0JY2FzZSBTRU5fT1Y2NjIwOgotCWNhc2UgU0VOX09WNjYzMDoKLQkJcmMgPSBpMmNfdyhvdiwgT1Y3NjEwX1JFR19TQVQsIHZhbCA+PiA4KTsKLQkJaWYgKHJjIDwgMCkKLQkJCWdvdG8gb3V0OwotCQlicmVhazsKLQljYXNlIFNFTl9PVjc2MjA6Ci0vLwkJLyogVXNlIFVWIGdhbW1hIGNvbnRyb2wgaW5zdGVhZC4gQml0cyAwICYgNyBhcmUgcmVzZXJ2ZWQuICovCi0vLwkJcmMgPSBvdl9pMmNfd3JpdGUob3YtPmRldiwgMHg2MiwgKHZhbCA+PiA5KSAmIDB4N2UpOwotLy8JCWlmIChyYyA8IDApCi0vLwkJCWdvdG8gb3V0OwotCQlyYyA9IGkyY193KG92LCBPVjc2MTBfUkVHX1NBVCwgdmFsID4+IDgpOwotCQlpZiAocmMgPCAwKQotCQkJZ290byBvdXQ7Ci0JCWJyZWFrOwotCWNhc2UgU0VOX1NBQTcxMTFBOgotCQlyYyA9IGkyY193KG92LCAweDBjLCB2YWwgPj4gOSk7Ci0JCWlmIChyYyA8IDApCi0JCQlnb3RvIG91dDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJUERFQlVHKDMsICJVbnN1cHBvcnRlZCB3aXRoIHRoaXMgc2Vuc29yIik7Ci0JCXJjID0gLUVQRVJNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyYyA9IDA7CQkvKiBTdWNjZXNzICovCi0Jb3YtPmNvbG91ciA9IHZhbDsKLW91dDoKLQlpZiAob3Y1MXhfcmVzdGFydChvdikgPCAwKQotCQlyZXR1cm4gLUVJTzsKLQotCXJldHVybiByYzsKLX0KLQotLyogR2V0cyBzZW5zb3IncyBzYXR1cmF0aW9uIChjb2xvciBpbnRlbnNpdHkpIHNldHRpbmcgKi8KLXN0YXRpYyBpbnQKLXNlbnNvcl9nZXRfc2F0dXJhdGlvbihzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgc2hvcnQgKnZhbCkKLXsKLQlpbnQgcmM7Ci0KLQlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKLQljYXNlIFNFTl9PVjc2MTA6Ci0JY2FzZSBTRU5fT1Y3NkJFOgotCWNhc2UgU0VOX09WNjYyMDoKLQljYXNlIFNFTl9PVjY2MzA6Ci0JCXJjID0gaTJjX3Iob3YsIE9WNzYxMF9SRUdfU0FUKTsKLQkJaWYgKHJjIDwgMCkKLQkJCXJldHVybiByYzsKLQkJZWxzZQotCQkJKnZhbCA9IHJjIDw8IDg7Ci0JCWJyZWFrOwotCWNhc2UgU0VOX09WNzYyMDoKLS8vCQkvKiBVc2UgVVYgZ2FtbWEgcmVnIGluc3RlYWQuIEJpdHMgMCAmIDcgYXJlIHJlc2VydmVkLiAqLwotLy8JCXJjID0gaTJjX3Iob3YsIDB4NjIpOwotLy8JCWlmIChyYyA8IDApCi0vLwkJCXJldHVybiByYzsKLS8vCQllbHNlCi0vLwkJCSp2YWwgPSAocmMgJiAweDdlKSA8PCA5OwotCQlyYyA9IGkyY19yKG92LCBPVjc2MTBfUkVHX1NBVCk7Ci0JCWlmIChyYyA8IDApCi0JCQlyZXR1cm4gcmM7Ci0JCWVsc2UKLQkJCSp2YWwgPSByYyA8PCA4OwotCQlicmVhazsKLQljYXNlIFNFTl9TQUE3MTExQToKLQkJKnZhbCA9IG92LT5jb2xvdXI7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVBERUJVRygzLCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOwotCQlyZXR1cm4gLUVQRVJNOwotCX0KLQotCVBERUJVRygzLCAiJWQiLCAqdmFsKTsKLQlvdi0+Y29sb3VyID0gKnZhbDsKLQotCXJldHVybiAwOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKiBTZXRzIHNlbnNvcidzIGh1ZSAocmVkL2JsdWUgYmFsYW5jZSkgc2V0dGluZyB0byAidmFsIiAqLwotc3RhdGljIGludAotc2Vuc29yX3NldF9odWUoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIHNob3J0IHZhbCkKLXsKLQlpbnQgcmM7Ci0KLQlQREVCVUcoMywgIiVkIiwgdmFsKTsKLQotCWlmIChvdi0+c3RvcF9kdXJpbmdfc2V0KQotCQlpZiAob3Y1MXhfc3RvcChvdikgPCAwKQotCQkJcmV0dXJuIC1FSU87Ci0KLQlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKLQljYXNlIFNFTl9PVjc2MTA6Ci0JY2FzZSBTRU5fT1Y2NjIwOgotCWNhc2UgU0VOX09WNjYzMDoKLQkJcmMgPSBpMmNfdyhvdiwgT1Y3NjEwX1JFR19SRUQsIDB4RkYgLSAodmFsID4+IDgpKTsKLQkJaWYgKHJjIDwgMCkKLQkJCWdvdG8gb3V0OwotCi0JCXJjID0gaTJjX3cob3YsIE9WNzYxMF9SRUdfQkxVRSwgdmFsID4+IDgpOwotCQlpZiAocmMgPCAwKQotCQkJZ290byBvdXQ7Ci0JCWJyZWFrOwotCWNhc2UgU0VOX09WNzYyMDoKLS8vIEh1ZSBjb250cm9sIGlzIGNhdXNpbmcgcHJvYmxlbXMuIEkgd2lsbCBlbmFibGUgaXQgb25jZSBpdCdzIGZpeGVkLgotI2lmIDAKLQkJcmMgPSBpMmNfdyhvdiwgMHg3YSwgKHVuc2lnbmVkIGNoYXIpKHZhbCA+PiA4KSArIDB4Yik7Ci0JCWlmIChyYyA8IDApCi0JCQlnb3RvIG91dDsKLQotCQlyYyA9IGkyY193KG92LCAweDc5LCAodW5zaWduZWQgY2hhcikodmFsID4+IDgpICsgMHhiKTsKLQkJaWYgKHJjIDwgMCkKLQkJCWdvdG8gb3V0OwotI2VuZGlmCi0JCWJyZWFrOwotCWNhc2UgU0VOX1NBQTcxMTFBOgotCQlyYyA9IGkyY193KG92LCAweDBkLCAodmFsICsgMzI3NjgpID4+IDgpOwotCQlpZiAocmMgPCAwKQotCQkJZ290byBvdXQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVBERUJVRygzLCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOwotCQlyYyA9IC1FUEVSTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmMgPSAwOwkJLyogU3VjY2VzcyAqLwotCW92LT5odWUgPSB2YWw7Ci1vdXQ6Ci0JaWYgKG92NTF4X3Jlc3RhcnQob3YpIDwgMCkKLQkJcmV0dXJuIC1FSU87Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qIEdldHMgc2Vuc29yJ3MgaHVlIChyZWQvYmx1ZSBiYWxhbmNlKSBzZXR0aW5nICovCi1zdGF0aWMgaW50Ci1zZW5zb3JfZ2V0X2h1ZShzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgc2hvcnQgKnZhbCkKLXsKLQlpbnQgcmM7Ci0KLQlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKLQljYXNlIFNFTl9PVjc2MTA6Ci0JY2FzZSBTRU5fT1Y2NjIwOgotCWNhc2UgU0VOX09WNjYzMDoKLQkJcmMgPSBpMmNfcihvdiwgT1Y3NjEwX1JFR19CTFVFKTsKLQkJaWYgKHJjIDwgMCkKLQkJCXJldHVybiByYzsKLQkJZWxzZQotCQkJKnZhbCA9IHJjIDw8IDg7Ci0JCWJyZWFrOwotCWNhc2UgU0VOX09WNzYyMDoKLQkJcmMgPSBpMmNfcihvdiwgMHg3YSk7Ci0JCWlmIChyYyA8IDApCi0JCQlyZXR1cm4gcmM7Ci0JCWVsc2UKLQkJCSp2YWwgPSByYyA8PCA4OwotCQlicmVhazsKLQljYXNlIFNFTl9TQUE3MTExQToKLQkJKnZhbCA9IG92LT5odWU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVBERUJVRygzLCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOwotCQlyZXR1cm4gLUVQRVJNOwotCX0KLQotCVBERUJVRygzLCAiJWQiLCAqdmFsKTsKLQlvdi0+aHVlID0gKnZhbDsKLQotCXJldHVybiAwOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgaW50Ci1zZW5zb3Jfc2V0X3BpY3R1cmUoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHN0cnVjdCB2aWRlb19waWN0dXJlICpwKQotewotCWludCByYzsKLQotCVBERUJVRyg0LCAic2Vuc29yX3NldF9waWN0dXJlIik7Ci0KLQlvdi0+d2hpdGVuZXNzID0gcC0+d2hpdGVuZXNzOwotCi0JLyogRG9uJ3QgcmV0dXJuIGVycm9yIGlmIGEgc2V0dGluZyBpcyB1bnN1cHBvcnRlZCwgb3IgcmVzdCBvZiBzZXR0aW5ncwotCSAqIHdpbGwgbm90IGJlIHBlcmZvcm1lZCAqLwotCi0JcmMgPSBzZW5zb3Jfc2V0X2NvbnRyYXN0KG92LCBwLT5jb250cmFzdCk7Ci0JaWYgKEZBVEFMX0VSUk9SKHJjKSkKLQkJcmV0dXJuIHJjOwotCi0JcmMgPSBzZW5zb3Jfc2V0X2JyaWdodG5lc3Mob3YsIHAtPmJyaWdodG5lc3MpOwotCWlmIChGQVRBTF9FUlJPUihyYykpCi0JCXJldHVybiByYzsKLQotCXJjID0gc2Vuc29yX3NldF9zYXR1cmF0aW9uKG92LCBwLT5jb2xvdXIpOwotCWlmIChGQVRBTF9FUlJPUihyYykpCi0JCXJldHVybiByYzsKLQotCXJjID0gc2Vuc29yX3NldF9odWUob3YsIHAtPmh1ZSk7Ci0JaWYgKEZBVEFMX0VSUk9SKHJjKSkKLQkJcmV0dXJuIHJjOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXNlbnNvcl9nZXRfcGljdHVyZShzdHJ1Y3QgdXNiX292NTExICpvdiwgc3RydWN0IHZpZGVvX3BpY3R1cmUgKnApCi17Ci0JaW50IHJjOwotCi0JUERFQlVHKDQsICJzZW5zb3JfZ2V0X3BpY3R1cmUiKTsKLQotCS8qIERvbid0IHJldHVybiBlcnJvciBpZiBhIHNldHRpbmcgaXMgdW5zdXBwb3J0ZWQsIG9yIHJlc3Qgb2Ygc2V0dGluZ3MKLQkgKiB3aWxsIG5vdCBiZSBwZXJmb3JtZWQgKi8KLQotCXJjID0gc2Vuc29yX2dldF9jb250cmFzdChvdiwgJihwLT5jb250cmFzdCkpOwotCWlmIChGQVRBTF9FUlJPUihyYykpCi0JCXJldHVybiByYzsKLQotCXJjID0gc2Vuc29yX2dldF9icmlnaHRuZXNzKG92LCAmKHAtPmJyaWdodG5lc3MpKTsKLQlpZiAoRkFUQUxfRVJST1IocmMpKQotCQlyZXR1cm4gcmM7Ci0KLQlyYyA9IHNlbnNvcl9nZXRfc2F0dXJhdGlvbihvdiwgJihwLT5jb2xvdXIpKTsKLQlpZiAoRkFUQUxfRVJST1IocmMpKQotCQlyZXR1cm4gcmM7Ci0KLQlyYyA9IHNlbnNvcl9nZXRfaHVlKG92LCAmKHAtPmh1ZSkpOwotCWlmIChGQVRBTF9FUlJPUihyYykpCi0JCXJldHVybiByYzsKLQotCXAtPndoaXRlbmVzcyA9IDEwNSA8PCA4OwotCi0JcmV0dXJuIDA7Ci19Ci0KLSNpZiAwCi0vLyBGSVhNRTogRXhwb3N1cmUgcmFuZ2UgaXMgb25seSAweDAwLTB4N2YgaW4gaW50ZXJsYWNlIG1vZGUKLS8qIFNldHMgY3VycmVudCBleHBvc3VyZSBmb3Igc2Vuc29yLiBUaGlzIG9ubHkgaGFzIGFuIGVmZmVjdCBpZiBhdXRvLWV4cG9zdXJlCi0gKiBpcyBvZmYgKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1zZW5zb3Jfc2V0X2V4cG9zdXJlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBjaGFyIHZhbCkKLXsKLQlpbnQgcmM7Ci0KLQlQREVCVUcoMywgIiVkIiwgdmFsKTsKLQotCWlmIChvdi0+c3RvcF9kdXJpbmdfc2V0KQotCQlpZiAob3Y1MXhfc3RvcChvdikgPCAwKQotCQkJcmV0dXJuIC1FSU87Ci0KLQlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKLQljYXNlIFNFTl9PVjY2MjA6Ci0JY2FzZSBTRU5fT1Y2NjMwOgotCWNhc2UgU0VOX09WNzYxMDoKLQljYXNlIFNFTl9PVjc2MjA6Ci0JY2FzZSBTRU5fT1Y3NkJFOgotCWNhc2UgU0VOX09WODYwMDoKLQkJcmMgPSBpMmNfdyhvdiwgMHgxMCwgdmFsKTsKLQkJaWYgKHJjIDwgMCkKLQkJCWdvdG8gb3V0OwotCi0JCWJyZWFrOwotCWNhc2UgU0VOX0tTMDEyNzoKLQljYXNlIFNFTl9LUzAxMjdCOgotCWNhc2UgU0VOX1NBQTcxMTFBOgotCQlQREVCVUcoMywgIlVuc3VwcG9ydGVkIHdpdGggdGhpcyBzZW5zb3IiKTsKLQkJcmV0dXJuIC1FUEVSTTsKLQlkZWZhdWx0OgotCQllcnIoIlNlbnNvciBub3Qgc3VwcG9ydGVkIGZvciBzZXRfZXhwb3N1cmUiKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmMgPSAwOwkJLyogU3VjY2VzcyAqLwotCW92LT5leHBvc3VyZSA9IHZhbDsKLW91dDoKLQlpZiAob3Y1MXhfcmVzdGFydChvdikgPCAwKQotCQlyZXR1cm4gLUVJTzsKLQotCXJldHVybiByYzsKLX0KLSNlbmRpZgotCi0vKiBHZXRzIGN1cnJlbnQgZXhwb3N1cmUgbGV2ZWwgZnJvbSBzZW5zb3IsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyB1bmRlcgotICogbWFudWFsIGNvbnRyb2wuICovCi1zdGF0aWMgaW50Ci1zZW5zb3JfZ2V0X2V4cG9zdXJlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBjaGFyICp2YWwpCi17Ci0JaW50IHJjOwotCi0Jc3dpdGNoIChvdi0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5fT1Y3NjEwOgotCWNhc2UgU0VOX09WNjYyMDoKLQljYXNlIFNFTl9PVjY2MzA6Ci0JY2FzZSBTRU5fT1Y3NjIwOgotCWNhc2UgU0VOX09WNzZCRToKLQljYXNlIFNFTl9PVjg2MDA6Ci0JCXJjID0gaTJjX3Iob3YsIDB4MTApOwotCQlpZiAocmMgPCAwKQotCQkJcmV0dXJuIHJjOwotCQllbHNlCi0JCQkqdmFsID0gcmM7Ci0JCWJyZWFrOwotCWNhc2UgU0VOX0tTMDEyNzoKLQljYXNlIFNFTl9LUzAxMjdCOgotCWNhc2UgU0VOX1NBQTcxMTFBOgotCQl2YWwgPSBOVUxMOwotCQlQREVCVUcoMywgIlVuc3VwcG9ydGVkIHdpdGggdGhpcyBzZW5zb3IiKTsKLQkJcmV0dXJuIC1FUEVSTTsKLQlkZWZhdWx0OgotCQllcnIoIlNlbnNvciBub3Qgc3VwcG9ydGVkIGZvciBnZXRfZXhwb3N1cmUiKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JUERFQlVHKDMsICIlZCIsICp2YWwpOwotCW92LT5leHBvc3VyZSA9ICp2YWw7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogVHVybnMgb24gb3Igb2ZmIHRoZSBMRUQuIE9ubHkgaGFzIGFuIGVmZmVjdCB3aXRoIE9WNTExKy9PVjUxOCgrKSAqLwotc3RhdGljIHZvaWQKLW92NTF4X2xlZF9jb250cm9sKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBpbnQgZW5hYmxlKQotewotCVBERUJVRyg0LCAiICglcykiLCBlbmFibGUgPyAidHVybiBvbiIgOiAidHVybiBvZmYiKTsKLQotCWlmIChvdi0+YnJpZGdlID09IEJSR19PVjUxMVBMVVMpCi0JCXJlZ193KG92LCBSNTExX1NZU19MRURfQ1RMLCBlbmFibGUgPyAxIDogMCk7Ci0JZWxzZSBpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpCi0JCXJlZ193X21hc2sob3YsIFI1MThfR1BJT19PVVQsIGVuYWJsZSA/IDB4MDIgOiAweDAwLCAweDAyKTsKLQotCXJldHVybjsKLX0KLQotLyogTWF0Y2hlcyB0aGUgc2Vuc29yJ3MgaW50ZXJuYWwgZnJhbWUgcmF0ZSB0byB0aGUgbGlnaHRpbmcgZnJlcXVlbmN5LgotICogVmFsaWQgZnJlcXVlbmNpZXMgYXJlOgotICoJNTAgLSA1MEh6LCBmb3IgRXVyb3BlYW4gYW5kIEFzaWFuIGxpZ2h0aW5nCi0gKgk2MCAtIDYwSHosIGZvciBBbWVyaWNhbiBsaWdodGluZwotICoKLSAqIFRlc3RlZCB3aXRoOiBPVjc2MTAsIE9WNzYyMCwgT1Y3NkJFLCBPVjY2MjAKLSAqIFVuc3VwcG9ydGVkOiBLUzAxMjcsIEtTMDEyN0IsIFNBQTcxMTFBCi0gKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCi0gKi8KLXN0YXRpYyBpbnQKLXNlbnNvcl9zZXRfbGlnaHRfZnJlcShzdHJ1Y3QgdXNiX292NTExICpvdiwgaW50IGZyZXEpCi17Ci0JaW50IHNpeHR5OwotCi0JUERFQlVHKDQsICIlZCBIeiIsIGZyZXEpOwotCi0JaWYgKGZyZXEgPT0gNjApCi0JCXNpeHR5ID0gMTsKLQllbHNlIGlmIChmcmVxID09IDUwKQotCQlzaXh0eSA9IDA7Ci0JZWxzZSB7Ci0JCWVycigiSW52YWxpZCBsaWdodCBmcmVxICglZCBIeikiLCBmcmVxKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc3dpdGNoIChvdi0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5fT1Y3NjEwOgotCQlpMmNfd19tYXNrKG92LCAweDJhLCBzaXh0eT8weDAwOjB4ODAsIDB4ODApOwotCQlpMmNfdyhvdiwgMHgyYiwgc2l4dHk/MHgwMDoweGFjKTsKLQkJaTJjX3dfbWFzayhvdiwgMHgxMywgMHgxMCwgMHgxMCk7Ci0JCWkyY193X21hc2sob3YsIDB4MTMsIDB4MDAsIDB4MTApOwotCQlicmVhazsKLQljYXNlIFNFTl9PVjc2MjA6Ci0JY2FzZSBTRU5fT1Y3NkJFOgotCWNhc2UgU0VOX09WODYwMDoKLQkJaTJjX3dfbWFzayhvdiwgMHgyYSwgc2l4dHk/MHgwMDoweDgwLCAweDgwKTsKLQkJaTJjX3cob3YsIDB4MmIsIHNpeHR5PzB4MDA6MHhhYyk7Ci0JCWkyY193X21hc2sob3YsIDB4NzYsIDB4MDEsIDB4MDEpOwotCQlicmVhazsKLQljYXNlIFNFTl9PVjY2MjA6Ci0JY2FzZSBTRU5fT1Y2NjMwOgotCQlpMmNfdyhvdiwgMHgyYiwgc2l4dHk/MHhhODoweDI4KTsKLQkJaTJjX3cob3YsIDB4MmEsIHNpeHR5PzB4ODQ6MHhhNCk7Ci0JCWJyZWFrOwotCWNhc2UgU0VOX0tTMDEyNzoKLQljYXNlIFNFTl9LUzAxMjdCOgotCWNhc2UgU0VOX1NBQTcxMTFBOgotCQlQREVCVUcoNSwgIlVuc3VwcG9ydGVkIHdpdGggdGhpcyBzZW5zb3IiKTsKLQkJcmV0dXJuIC1FUEVSTTsKLQlkZWZhdWx0OgotCQllcnIoIlNlbnNvciBub3Qgc3VwcG9ydGVkIGZvciBzZXRfbGlnaHRfZnJlcSIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlvdi0+bGlnaHRmcmVxID0gZnJlcTsKLQotCXJldHVybiAwOwotfQotCi0vKiBJZiBlbmFibGUgaXMgdHJ1ZSwgdHVybiBvbiB0aGUgc2Vuc29yJ3MgYmFuZGluZyBmaWx0ZXIsIG90aGVyd2lzZSB0dXJuIGl0Ci0gKiBvZmYuIFRoaXMgZmlsdGVyIHRyaWVzIHRvIHJlZHVjZSB0aGUgcGF0dGVybiBvZiBob3Jpem9udGFsIGxpZ2h0L2RhcmsgYmFuZHMKLSAqIGNhdXNlZCBieSBzb21lICh1c3VhbGx5IGZsdW9yZXNjZW50KSBsaWdodGluZy4gVGhlIGxpZ2h0IGZyZXF1ZW5jeSBtdXN0IGJlCi0gKiBzZXQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciBlbmFibGluZyBpdCB3aXRoIG92NTF4X3NldF9saWdodF9mcmVxKCkuCi0gKgotICogVGVzdGVkIHdpdGg6IE9WNzYxMCwgT1Y3NjIwLCBPVjc2QkUsIE9WNjYyMC4KLSAqIFVuc3VwcG9ydGVkOiBLUzAxMjcsIEtTMDEyN0IsIFNBQTcxMTFBCi0gKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCi0gKi8KLXN0YXRpYyBpbnQKLXNlbnNvcl9zZXRfYmFuZGluZ19maWx0ZXIoc3RydWN0IHVzYl9vdjUxMSAqb3YsIGludCBlbmFibGUpCi17Ci0JaW50IHJjOwotCi0JUERFQlVHKDQsICIgKCVzKSIsIGVuYWJsZSA/ICJ0dXJuIG9uIiA6ICJ0dXJuIG9mZiIpOwotCi0JaWYgKG92LT5zZW5zb3IgPT0gU0VOX0tTMDEyNyB8fCBvdi0+c2Vuc29yID09IFNFTl9LUzAxMjdCCi0JCXx8IG92LT5zZW5zb3IgPT0gU0VOX1NBQTcxMTFBKSB7Ci0JCVBERUJVRyg1LCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOwotCQlyZXR1cm4gLUVQRVJNOwotCX0KLQotCXJjID0gaTJjX3dfbWFzayhvdiwgMHgyZCwgZW5hYmxlPzB4MDQ6MHgwMCwgMHgwNCk7Ci0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOwotCi0Jb3YtPmJhbmRmaWx0ID0gZW5hYmxlOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIElmIGVuYWJsZSBpcyB0cnVlLCB0dXJuIG9uIHRoZSBzZW5zb3IncyBhdXRvIGJyaWdodG5lc3MgY29udHJvbCwgb3RoZXJ3aXNlCi0gKiB0dXJuIGl0IG9mZi4KLSAqCi0gKiBVbnN1cHBvcnRlZDogS1MwMTI3LCBLUzAxMjdCLCBTQUE3MTExQQotICogUmV0dXJuczogMCBmb3Igc3VjY2VzcwotICovCi1zdGF0aWMgaW50Ci1zZW5zb3Jfc2V0X2F1dG9fYnJpZ2h0bmVzcyhzdHJ1Y3QgdXNiX292NTExICpvdiwgaW50IGVuYWJsZSkKLXsKLQlpbnQgcmM7Ci0KLQlQREVCVUcoNCwgIiAoJXMpIiwgZW5hYmxlID8gInR1cm4gb24iIDogInR1cm4gb2ZmIik7Ci0KLQlpZiAob3YtPnNlbnNvciA9PSBTRU5fS1MwMTI3IHx8IG92LT5zZW5zb3IgPT0gU0VOX0tTMDEyN0IKLQkJfHwgb3YtPnNlbnNvciA9PSBTRU5fU0FBNzExMUEpIHsKLQkJUERFQlVHKDUsICJVbnN1cHBvcnRlZCB3aXRoIHRoaXMgc2Vuc29yIik7Ci0JCXJldHVybiAtRVBFUk07Ci0JfQotCi0JcmMgPSBpMmNfd19tYXNrKG92LCAweDJkLCBlbmFibGU/MHgxMDoweDAwLCAweDEwKTsKLQlpZiAocmMgPCAwKQotCQlyZXR1cm4gcmM7Ci0KLQlvdi0+YXV0b19icnQgPSBlbmFibGU7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogSWYgZW5hYmxlIGlzIHRydWUsIHR1cm4gb24gdGhlIHNlbnNvcidzIGF1dG8gZXhwb3N1cmUgY29udHJvbCwgb3RoZXJ3aXNlCi0gKiB0dXJuIGl0IG9mZi4KLSAqCi0gKiBVbnN1cHBvcnRlZDogS1MwMTI3LCBLUzAxMjdCLCBTQUE3MTExQQotICogUmV0dXJuczogMCBmb3Igc3VjY2VzcwotICovCi1zdGF0aWMgaW50Ci1zZW5zb3Jfc2V0X2F1dG9fZXhwb3N1cmUoc3RydWN0IHVzYl9vdjUxMSAqb3YsIGludCBlbmFibGUpCi17Ci0JUERFQlVHKDQsICIgKCVzKSIsIGVuYWJsZSA/ICJ0dXJuIG9uIiA6ICJ0dXJuIG9mZiIpOwotCi0Jc3dpdGNoIChvdi0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5fT1Y3NjEwOgotCQlpMmNfd19tYXNrKG92LCAweDI5LCBlbmFibGU/MHgwMDoweDgwLCAweDgwKTsKLQkJYnJlYWs7Ci0JY2FzZSBTRU5fT1Y2NjIwOgotCWNhc2UgU0VOX09WNzYyMDoKLQljYXNlIFNFTl9PVjc2QkU6Ci0JY2FzZSBTRU5fT1Y4NjAwOgotCQlpMmNfd19tYXNrKG92LCAweDEzLCBlbmFibGU/MHgwMToweDAwLCAweDAxKTsKLQkJYnJlYWs7Ci0JY2FzZSBTRU5fT1Y2NjMwOgotCQlpMmNfd19tYXNrKG92LCAweDI4LCBlbmFibGU/MHgwMDoweDEwLCAweDEwKTsKLQkJYnJlYWs7Ci0JY2FzZSBTRU5fS1MwMTI3OgotCWNhc2UgU0VOX0tTMDEyN0I6Ci0JY2FzZSBTRU5fU0FBNzExMUE6Ci0JCVBERUJVRyg1LCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOwotCQlyZXR1cm4gLUVQRVJNOwotCWRlZmF1bHQ6Ci0JCWVycigiU2Vuc29yIG5vdCBzdXBwb3J0ZWQgZm9yIHNldF9hdXRvX2V4cG9zdXJlIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW92LT5hdXRvX2V4cCA9IGVuYWJsZTsKLQotCXJldHVybiAwOwotfQotCi0vKiBNb2RpZmllcyB0aGUgc2Vuc29yJ3MgZXhwb3N1cmUgYWxnb3JpdGhtIHRvIGFsbG93IHByb3BlciBleHBvc3VyZSBvZiBvYmplY3RzCi0gKiB0aGF0IGFyZSBpbGx1bWluYXRlZCBmcm9tIGJlaGluZC4KLSAqCi0gKiBUZXN0ZWQgd2l0aDogT1Y2NjIwLCBPVjc2MjAKLSAqIFVuc3VwcG9ydGVkOiBPVjc2MTAsIE9WNzZCRSwgS1MwMTI3LCBLUzAxMjdCLCBTQUE3MTExQQotICogUmV0dXJuczogMCBmb3Igc3VjY2VzcwotICovCi1zdGF0aWMgaW50Ci1zZW5zb3Jfc2V0X2JhY2tsaWdodChzdHJ1Y3QgdXNiX292NTExICpvdiwgaW50IGVuYWJsZSkKLXsKLQlQREVCVUcoNCwgIiAoJXMpIiwgZW5hYmxlID8gInR1cm4gb24iIDogInR1cm4gb2ZmIik7Ci0KLQlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKLQljYXNlIFNFTl9PVjc2MjA6Ci0JY2FzZSBTRU5fT1Y4NjAwOgotCQlpMmNfd19tYXNrKG92LCAweDY4LCBlbmFibGU/MHhlMDoweGMwLCAweGUwKTsKLQkJaTJjX3dfbWFzayhvdiwgMHgyOSwgZW5hYmxlPzB4MDg6MHgwMCwgMHgwOCk7Ci0JCWkyY193X21hc2sob3YsIDB4MjgsIGVuYWJsZT8weDAyOjB4MDAsIDB4MDIpOwotCQlicmVhazsKLQljYXNlIFNFTl9PVjY2MjA6Ci0JCWkyY193X21hc2sob3YsIDB4NGUsIGVuYWJsZT8weGUwOjB4YzAsIDB4ZTApOwotCQlpMmNfd19tYXNrKG92LCAweDI5LCBlbmFibGU/MHgwODoweDAwLCAweDA4KTsKLQkJaTJjX3dfbWFzayhvdiwgMHgwZSwgZW5hYmxlPzB4ODA6MHgwMCwgMHg4MCk7Ci0JCWJyZWFrOwotCWNhc2UgU0VOX09WNjYzMDoKLQkJaTJjX3dfbWFzayhvdiwgMHg0ZSwgZW5hYmxlPzB4ODA6MHg2MCwgMHhlMCk7Ci0JCWkyY193X21hc2sob3YsIDB4MjksIGVuYWJsZT8weDA4OjB4MDAsIDB4MDgpOwotCQlpMmNfd19tYXNrKG92LCAweDI4LCBlbmFibGU/MHgwMjoweDAwLCAweDAyKTsKLQkJYnJlYWs7Ci0JY2FzZSBTRU5fT1Y3NjEwOgotCWNhc2UgU0VOX09WNzZCRToKLQljYXNlIFNFTl9LUzAxMjc6Ci0JY2FzZSBTRU5fS1MwMTI3QjoKLQljYXNlIFNFTl9TQUE3MTExQToKLQkJUERFQlVHKDUsICJVbnN1cHBvcnRlZCB3aXRoIHRoaXMgc2Vuc29yIik7Ci0JCXJldHVybiAtRVBFUk07Ci0JZGVmYXVsdDoKLQkJZXJyKCJTZW5zb3Igbm90IHN1cHBvcnRlZCBmb3Igc2V0X2JhY2tsaWdodCIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlvdi0+YmFja2xpZ2h0ID0gZW5hYmxlOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXNlbnNvcl9zZXRfbWlycm9yKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBpbnQgZW5hYmxlKQotewotCVBERUJVRyg0LCAiICglcykiLCBlbmFibGUgPyAidHVybiBvbiIgOiAidHVybiBvZmYiKTsKLQotCXN3aXRjaCAob3YtPnNlbnNvcikgewotCWNhc2UgU0VOX09WNjYyMDoKLQljYXNlIFNFTl9PVjY2MzA6Ci0JY2FzZSBTRU5fT1Y3NjEwOgotCWNhc2UgU0VOX09WNzYyMDoKLQljYXNlIFNFTl9PVjc2QkU6Ci0JY2FzZSBTRU5fT1Y4NjAwOgotCQlpMmNfd19tYXNrKG92LCAweDEyLCBlbmFibGU/MHg0MDoweDAwLCAweDQwKTsKLQkJYnJlYWs7Ci0JY2FzZSBTRU5fS1MwMTI3OgotCWNhc2UgU0VOX0tTMDEyN0I6Ci0JY2FzZSBTRU5fU0FBNzExMUE6Ci0JCVBERUJVRyg1LCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOwotCQlyZXR1cm4gLUVQRVJNOwotCWRlZmF1bHQ6Ci0JCWVycigiU2Vuc29yIG5vdCBzdXBwb3J0ZWQgZm9yIHNldF9taXJyb3IiKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jb3YtPm1pcnJvciA9IGVuYWJsZTsKLQotCXJldHVybiAwOwotfQotCi0vKiBSZXR1cm5zIG51bWJlciBvZiBiaXRzIHBlciBwaXhlbCAocmVnYXJkbGVzcyBvZiB3aGVyZSB0aGV5IGFyZSBsb2NhdGVkOwotICogcGxhbmFyIG9yIG5vdCksIG9yIHplcm8gZm9yIHVuc3VwcG9ydGVkIGZvcm1hdC4KLSAqLwotc3RhdGljIGlubGluZSBpbnQKLWdldF9kZXB0aChpbnQgcGFsZXR0ZSkKLXsKLQlzd2l0Y2ggKHBhbGV0dGUpIHsKLQljYXNlIFZJREVPX1BBTEVUVEVfR1JFWTogICAgcmV0dXJuIDg7Ci0JY2FzZSBWSURFT19QQUxFVFRFX1lVVjQyMDogIHJldHVybiAxMjsKLQljYXNlIFZJREVPX1BBTEVUVEVfWVVWNDIwUDogcmV0dXJuIDEyOyAvKiBQbGFuYXIgKi8KLQlkZWZhdWx0OgkJICAgIHJldHVybiAwOyAgLyogSW52YWxpZCBmb3JtYXQgKi8KLQl9Ci19Ci0KLS8qIEJ5dGVzIHBlciBmcmFtZS4gVXNlZCBieSByZWFkKCkuIFJldHVybiBvZiAwIGluZGljYXRlcyBlcnJvciAqLwotc3RhdGljIGlubGluZSBsb25nIGludAotZ2V0X2ZyYW1lX2xlbmd0aChzdHJ1Y3Qgb3Y1MTFfZnJhbWUgKmZyYW1lKQotewotCWlmICghZnJhbWUpCi0JCXJldHVybiAwOwotCWVsc2UKLQkJcmV0dXJuICgoZnJhbWUtPndpZHRoICogZnJhbWUtPmhlaWdodAotCQkJICogZ2V0X2RlcHRoKGZyYW1lLT5mb3JtYXQpKSA+PiAzKTsKLX0KLQotc3RhdGljIGludAotbW9kZV9pbml0X292X3NlbnNvcl9yZWdzKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0JCQkgaW50IG1vZGUsIGludCBzdWJfZmxhZywgaW50IHF2Z2EpCi17Ci0JaW50IGNsb2NrOwotCi0JLyoqKioqKioqIE1vZGUgKFZHQS9RVkdBKSBhbmQgc2Vuc29yIHNwZWNpZmljIHJlZ3MgKioqKioqKiovCi0KLQlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKLQljYXNlIFNFTl9PVjc2MTA6Ci0JCWkyY193KG92LCAweDE0LCBxdmdhPzB4MjQ6MHgwNCk7Ci0vLyBGSVhNRTogRG9lcyB0aGlzIGltcHJvdmUgdGhlIGltYWdlIHF1YWxpdHkgb3IgZnJhbWUgcmF0ZT8KLSNpZiAwCi0JCWkyY193X21hc2sob3YsIDB4MjgsIHF2Z2E/MHgwMDoweDIwLCAweDIwKTsKLQkJaTJjX3cob3YsIDB4MjQsIDB4MTApOwotCQlpMmNfdyhvdiwgMHgyNSwgcXZnYT8weDQwOjB4OGEpOwotCQlpMmNfdyhvdiwgMHgyZiwgcXZnYT8weDMwOjB4YjApOwotCQlpMmNfdyhvdiwgMHgzNSwgcXZnYT8weDFjOjB4OWMpOwotI2VuZGlmCi0JCWJyZWFrOwotCWNhc2UgU0VOX09WNzYyMDoKLS8vCQlpMmNfdyhvdiwgMHgyYiwgMHgwMCk7Ci0JCWkyY193KG92LCAweDE0LCBxdmdhPzB4YTQ6MHg4NCk7Ci0JCWkyY193X21hc2sob3YsIDB4MjgsIHF2Z2E/MHgwMDoweDIwLCAweDIwKTsKLQkJaTJjX3cob3YsIDB4MjQsIHF2Z2E/MHgyMDoweDNhKTsKLQkJaTJjX3cob3YsIDB4MjUsIHF2Z2E/MHgzMDoweDYwKTsKLQkJaTJjX3dfbWFzayhvdiwgMHgyZCwgcXZnYT8weDQwOjB4MDAsIDB4NDApOwotCQlpMmNfd19tYXNrKG92LCAweDY3LCBxdmdhPzB4ZjA6MHg5MCwgMHhmMCk7Ci0JCWkyY193X21hc2sob3YsIDB4NzQsIHF2Z2E/MHgyMDoweDAwLCAweDIwKTsKLQkJYnJlYWs7Ci0JY2FzZSBTRU5fT1Y3NkJFOgotLy8JCWkyY193KG92LCAweDJiLCAweDAwKTsKLQkJaTJjX3cob3YsIDB4MTQsIHF2Z2E/MHhhNDoweDg0KTsKLS8vIEZJWE1FOiBFbmFibGUgdGhpcyBvbmNlIDc2MjBBRSB1c2VzIDc2MjAgaW5pdGlhbCBzZXR0aW5ncwotI2lmIDAKLQkJaTJjX3dfbWFzayhvdiwgMHgyOCwgcXZnYT8weDAwOjB4MjAsIDB4MjApOwotCQlpMmNfdyhvdiwgMHgyNCwgcXZnYT8weDIwOjB4M2EpOwotCQlpMmNfdyhvdiwgMHgyNSwgcXZnYT8weDMwOjB4NjApOwotCQlpMmNfd19tYXNrKG92LCAweDJkLCBxdmdhPzB4NDA6MHgwMCwgMHg0MCk7Ci0JCWkyY193X21hc2sob3YsIDB4NjcsIHF2Z2E/MHhiMDoweDkwLCAweGYwKTsKLQkJaTJjX3dfbWFzayhvdiwgMHg3NCwgcXZnYT8weDIwOjB4MDAsIDB4MjApOwotI2VuZGlmCi0JCWJyZWFrOwotCWNhc2UgU0VOX09WNjYyMDoKLQkJaTJjX3cob3YsIDB4MTQsIHF2Z2E/MHgyNDoweDA0KTsKLQkJYnJlYWs7Ci0JY2FzZSBTRU5fT1Y2NjMwOgotCQlpMmNfdyhvdiwgMHgxNCwgcXZnYT8weGEwOjB4ODApOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQllcnIoIkludmFsaWQgc2Vuc29yIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qKioqKioqKiBQYWxldHRlLXNwZWNpZmljIHJlZ3MgKioqKioqKiovCi0KLQlpZiAobW9kZSA9PSBWSURFT19QQUxFVFRFX0dSRVkpIHsKLQkJaWYgKG92LT5zZW5zb3IgPT0gU0VOX09WNzYxMCB8fCBvdi0+c2Vuc29yID09IFNFTl9PVjc2QkUpIHsKLQkJCS8qIHRoZXNlIGFyZW4ndCB2YWxpZCBvbiB0aGUgT1Y2NjIwL09WNzYyMC82NjMwPyAqLwotCQkJaTJjX3dfbWFzayhvdiwgMHgwZSwgMHg0MCwgMHg0MCk7Ci0JCX0KLQotCQlpZiAob3YtPnNlbnNvciA9PSBTRU5fT1Y2NjMwICYmIG92LT5icmlkZ2UgPT0gQlJHX09WNTE4Ci0JCSAgICAmJiBvdjUxOF9jb2xvcikgewotCQkJaTJjX3dfbWFzayhvdiwgMHgxMiwgMHgwMCwgMHgxMCk7Ci0JCQlpMmNfd19tYXNrKG92LCAweDEzLCAweDAwLCAweDIwKTsKLQkJfSBlbHNlIHsKLQkJCWkyY193X21hc2sob3YsIDB4MTMsIDB4MjAsIDB4MjApOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKG92LT5zZW5zb3IgPT0gU0VOX09WNzYxMCB8fCBvdi0+c2Vuc29yID09IFNFTl9PVjc2QkUpIHsKLQkJCS8qIG5vdCB2YWxpZCBvbiB0aGUgT1Y2NjIwL09WNzYyMC82NjMwPyAqLwotCQkJaTJjX3dfbWFzayhvdiwgMHgwZSwgMHgwMCwgMHg0MCk7Ci0JCX0KLQotCQkvKiBUaGUgT1Y1MTggbmVlZHMgc3BlY2lhbCB0cmVhdG1lbnQuIEFsdGhvdWdoIGJvdGggdGhlIE9WNTE4Ci0JCSAqIGFuZCB0aGUgT1Y2NjMwIHN1cHBvcnQgYSAxNi1iaXQgdmlkZW8gYnVzLCBvbmx5IHRoZSA4IGJpdCBZCi0JCSAqIGJ1cyBpcyBhY3R1YWxseSB1c2VkLiBUaGUgVVYgYnVzIGlzIHRpZWQgdG8gZ3JvdW5kLgotCQkgKiBUaGVyZWZvcmUsIHRoZSBPVjY2MzAgbmVlZHMgdG8gYmUgaW4gOC1iaXQgbXVsdGlwbGV4ZWQKLQkJICogb3V0cHV0IG1vZGUgKi8KLQotCQlpZiAob3YtPnNlbnNvciA9PSBTRU5fT1Y2NjMwICYmIG92LT5icmlkZ2UgPT0gQlJHX09WNTE4Ci0JCSAgICAmJiBvdjUxOF9jb2xvcikgewotCQkJaTJjX3dfbWFzayhvdiwgMHgxMiwgMHgxMCwgMHgxMCk7Ci0JCQlpMmNfd19tYXNrKG92LCAweDEzLCAweDIwLCAweDIwKTsKLQkJfSBlbHNlIHsKLQkJCWkyY193X21hc2sob3YsIDB4MTMsIDB4MDAsIDB4MjApOwotCQl9Ci0JfQotCi0JLyoqKioqKioqIENsb2NrIHByb2dyYW1taW5nICoqKioqKioqLwotCi0JLyogVGhlIE9WNjYyMCBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nLiBUaGlzIHByZXZlbnRzIHRoZQotCSAqIHNldmVyZSBiYW5kaW5nIHRoYXQgbm9ybWFsbHkgb2NjdXJzICovCi0JaWYgKG92LT5zZW5zb3IgPT0gU0VOX09WNjYyMCB8fCBvdi0+c2Vuc29yID09IFNFTl9PVjY2MzApCi0JewotCQkvKiBDbG9jayBkb3duICovCi0KLQkJaTJjX3cob3YsIDB4MmEsIDB4MDQpOwotCi0JCWlmIChvdi0+Y29tcHJlc3MpIHsKLS8vCQkJY2xvY2sgPSAwOyAgICAvKiBUaGlzIGVuc3VyZXMgdGhlIGhpZ2hlc3QgZnJhbWUgcmF0ZSAqLwotCQkJY2xvY2sgPSAzOwotCQl9IGVsc2UgaWYgKGNsb2NrZGl2ID09IC0xKSB7ICAgLyogSWYgdXNlciBkaWRuJ3Qgb3ZlcnJpZGUgaXQgKi8KLQkJCWNsb2NrID0gMzsgICAgLyogR2l2ZXMgYmV0dGVyIGV4cG9zdXJlIHRpbWUgKi8KLQkJfSBlbHNlIHsKLQkJCWNsb2NrID0gY2xvY2tkaXY7Ci0JCX0KLQotCQlQREVCVUcoNCwgIlNldHRpbmcgY2xvY2sgZGl2aXNvciB0byAlZCIsIGNsb2NrKTsKLQotCQlpMmNfdyhvdiwgMHgxMSwgY2xvY2spOwotCi0JCWkyY193KG92LCAweDJhLCAweDg0KTsKLQkJLyogVGhpcyBuZXh0IHNldHRpbmcgaXMgY3JpdGljYWwuIEl0IHNlZW1zIHRvIGltcHJvdmUKLQkJICogdGhlIGdhaW4gb3IgdGhlIGNvbnRyYXN0LiBUaGUgInJlc2VydmVkIiBiaXRzIHNlZW0KLQkJICogdG8gaGF2ZSBzb21lIGVmZmVjdCBpbiB0aGlzIGNhc2UuICovCi0JCWkyY193KG92LCAweDJkLCAweDg1KTsKLQl9Ci0JZWxzZQotCXsKLQkJaWYgKG92LT5jb21wcmVzcykgewotCQkJY2xvY2sgPSAxOyAgICAvKiBUaGlzIGVuc3VyZXMgdGhlIGhpZ2hlc3QgZnJhbWUgcmF0ZSAqLwotCQl9IGVsc2UgaWYgKGNsb2NrZGl2ID09IC0xKSB7ICAgLyogSWYgdXNlciBkaWRuJ3Qgb3ZlcnJpZGUgaXQgKi8KLQkJCS8qIENhbGN1bGF0ZSBhbmQgc2V0IHRoZSBjbG9jayBkaXZpc29yICovCi0JCQljbG9jayA9ICgoc3ViX2ZsYWcgPyBvdi0+c3VidyAqIG92LT5zdWJoCi0JCQkJICA6IHdpZHRoICogaGVpZ2h0KQotCQkJCSAqIChtb2RlID09IFZJREVPX1BBTEVUVEVfR1JFWSA/IDIgOiAzKSAvIDIpCi0JCQkJIC8gNjYwMDA7Ci0JCX0gZWxzZSB7Ci0JCQljbG9jayA9IGNsb2NrZGl2OwotCQl9Ci0KLQkJUERFQlVHKDQsICJTZXR0aW5nIGNsb2NrIGRpdmlzb3IgdG8gJWQiLCBjbG9jayk7Ci0KLQkJaTJjX3cob3YsIDB4MTEsIGNsb2NrKTsKLQl9Ci0KLQkvKioqKioqKiogU3BlY2lhbCBGZWF0dXJlcyAqKioqKioqKi8KLQotCWlmIChmcmFtZWRyb3AgPj0gMCkKLQkJaTJjX3cob3YsIDB4MTYsIGZyYW1lZHJvcCk7Ci0KLQkvKiBUZXN0IFBhdHRlcm4gKi8KLQlpMmNfd19tYXNrKG92LCAweDEyLCAodGVzdHBhdD8weDAyOjB4MDApLCAweDAyKTsKLQotCS8qIEVuYWJsZSBhdXRvIHdoaXRlIGJhbGFuY2UgKi8KLQlpMmNfd19tYXNrKG92LCAweDEyLCAweDA0LCAweDA0KTsKLQotCS8vIFRoaXMgd2lsbCBnbyBhd2F5IGFzIHNvb24gYXMgb3Y1MXhfbW9kZV9pbml0X3NlbnNvcl9yZWdzKCkKLQkvLyBpcyBmdWxseSB0ZXN0ZWQuCi0JLyogNzYyMC82NjIwLzY2MzA/IGRvbid0IGhhdmUgcmVnaXN0ZXIgMHgzNSwgc28gcGxheSBpdCBzYWZlICovCi0JaWYgKG92LT5zZW5zb3IgPT0gU0VOX09WNzYxMCB8fCBvdi0+c2Vuc29yID09IFNFTl9PVjc2QkUpIHsKLQkJaWYgKHdpZHRoID09IDY0MCAmJiBoZWlnaHQgPT0gNDgwKQotCQkJaTJjX3cob3YsIDB4MzUsIDB4OWUpOwotCQllbHNlCi0JCQlpMmNfdyhvdiwgMHgzNSwgMHgxZSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXNldF9vdl9zZW5zb3Jfd2luZG93KHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtb2RlLAotCQkgICAgIGludCBzdWJfZmxhZykKLXsKLQlpbnQgcmV0OwotCWludCBod3NiYXNlLCBod2ViYXNlLCB2d3NiYXNlLCB2d2ViYXNlLCBod3NpemUsIHZ3c2l6ZTsKLQlpbnQgaG9mZnNldCwgdm9mZnNldCwgaHdzY2FsZSA9IDAsIHZ3c2NhbGUgPSAwOwotCi0JLyogVGhlIGRpZmZlcmVudCBzZW5zb3IgSUNzIGhhbmRsZSBzZXR0aW5nIHVwIG9mIHdpbmRvdyBkaWZmZXJlbnRseS4KLQkgKiBJRiBZT1UgU0VUIElUIFdST05HLCBZT1UgV0lMTCBHRVQgQUxMIFpFUk8gSVNPQyBEQVRBIEZST00gT1Y1MXghISEgKi8KLQlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKLQljYXNlIFNFTl9PVjc2MTA6Ci0JY2FzZSBTRU5fT1Y3NkJFOgotCQlod3NiYXNlID0gMHgzODsKLQkJaHdlYmFzZSA9IDB4M2E7Ci0JCXZ3c2Jhc2UgPSB2d2ViYXNlID0gMHgwNTsKLQkJYnJlYWs7Ci0JY2FzZSBTRU5fT1Y2NjIwOgotCWNhc2UgU0VOX09WNjYzMDoKLQkJaHdzYmFzZSA9IDB4Mzg7Ci0JCWh3ZWJhc2UgPSAweDNhOwotCQl2d3NiYXNlID0gMHgwNTsKLQkJdndlYmFzZSA9IDB4MDY7Ci0JCWJyZWFrOwotCWNhc2UgU0VOX09WNzYyMDoKLQkJaHdzYmFzZSA9IDB4MmY7CQkvKiBGcm9tIDc2MjAuU0VUIChzcGVjIGlzIHdyb25nKSAqLwotCQlod2ViYXNlID0gMHgyZjsKLQkJdndzYmFzZSA9IHZ3ZWJhc2UgPSAweDA1OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQllcnIoIkludmFsaWQgc2Vuc29yIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChvdi0+c2Vuc29yID09IFNFTl9PVjY2MjAgfHwgb3YtPnNlbnNvciA9PSBTRU5fT1Y2NjMwKSB7Ci0JCS8qIE5vdGU6IE9WNTE4KCspIGRvZXMgZG93bnNhbXBsZSBvbiBpdHMgb3duKSAqLwotCQlpZiAoKHdpZHRoID4gMTc2ICYmIGhlaWdodCA+IDE0NCkKLQkJICAgIHx8IG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KSB7ICAvKiBDSUYgKi8KLQkJCXJldCA9IG1vZGVfaW5pdF9vdl9zZW5zb3JfcmVncyhvdiwgd2lkdGgsIGhlaWdodCwKLQkJCQltb2RlLCBzdWJfZmxhZywgMCk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlyZXR1cm4gcmV0OwotCQkJaHdzY2FsZSA9IDE7Ci0JCQl2d3NjYWxlID0gMTsgIC8qIFRoZSBkYXRhc2hlZXQgc2F5cyAwOyBpdCdzIHdyb25nICovCi0JCQlod3NpemUgPSAzNTI7Ci0JCQl2d3NpemUgPSAyODg7Ci0JCX0gZWxzZSBpZiAod2lkdGggPiAxNzYgfHwgaGVpZ2h0ID4gMTQ0KSB7Ci0JCQllcnIoIklsbGVnYWwgZGltZW5zaW9ucyIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0gZWxzZSB7CQkJICAgIC8qIFFDSUYgKi8KLQkJCXJldCA9IG1vZGVfaW5pdF9vdl9zZW5zb3JfcmVncyhvdiwgd2lkdGgsIGhlaWdodCwKLQkJCQltb2RlLCBzdWJfZmxhZywgMSk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlyZXR1cm4gcmV0OwotCQkJaHdzaXplID0gMTc2OwotCQkJdndzaXplID0gMTQ0OwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKHdpZHRoID4gMzIwICYmIGhlaWdodCA+IDI0MCkgeyAgLyogVkdBICovCi0JCQlyZXQgPSBtb2RlX2luaXRfb3Zfc2Vuc29yX3JlZ3Mob3YsIHdpZHRoLCBoZWlnaHQsCi0JCQkJbW9kZSwgc3ViX2ZsYWcsIDApOwotCQkJaWYgKHJldCA8IDApCi0JCQkJcmV0dXJuIHJldDsKLQkJCWh3c2NhbGUgPSAyOwotCQkJdndzY2FsZSA9IDE7Ci0JCQlod3NpemUgPSA2NDA7Ci0JCQl2d3NpemUgPSA0ODA7Ci0JCX0gZWxzZSBpZiAod2lkdGggPiAzMjAgfHwgaGVpZ2h0ID4gMjQwKSB7Ci0JCQllcnIoIklsbGVnYWwgZGltZW5zaW9ucyIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0gZWxzZSB7CQkJICAgIC8qIFFWR0EgKi8KLQkJCXJldCA9IG1vZGVfaW5pdF9vdl9zZW5zb3JfcmVncyhvdiwgd2lkdGgsIGhlaWdodCwKLQkJCQltb2RlLCBzdWJfZmxhZywgMSk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlyZXR1cm4gcmV0OwotCQkJaHdzY2FsZSA9IDE7Ci0JCQlod3NpemUgPSAzMjA7Ci0JCQl2d3NpemUgPSAyNDA7Ci0JCX0KLQl9Ci0KLQkvKiBDZW50ZXIgdGhlIHdpbmRvdyAqLwotCWhvZmZzZXQgPSAoKGh3c2l6ZSAtIHdpZHRoKSAvIDIpID4+IGh3c2NhbGU7Ci0Jdm9mZnNldCA9ICgodndzaXplIC0gaGVpZ2h0KSAvIDIpID4+IHZ3c2NhbGU7Ci0KLQkvKiBGSVhNRSEgLSBUaGlzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gc3VwcG9ydCAxNjB4MTIwIGFuZCA2NjIwISEhICovCi0JaWYgKHN1Yl9mbGFnKSB7Ci0JCWkyY193KG92LCAweDE3LCBod3NiYXNlKyhvdi0+c3VieD4+aHdzY2FsZSkpOwotCQlpMmNfdyhvdiwgMHgxOCwJaHdlYmFzZSsoKG92LT5zdWJ4K292LT5zdWJ3KT4+aHdzY2FsZSkpOwotCQlpMmNfdyhvdiwgMHgxOSwgdndzYmFzZSsob3YtPnN1Ynk+PnZ3c2NhbGUpKTsKLQkJaTJjX3cob3YsIDB4MWEsIHZ3ZWJhc2UrKChvdi0+c3VieStvdi0+c3ViaCk+PnZ3c2NhbGUpKTsKLQl9IGVsc2UgewotCQlpMmNfdyhvdiwgMHgxNywgaHdzYmFzZSArIGhvZmZzZXQpOwotCQlpMmNfdyhvdiwgMHgxOCwgaHdlYmFzZSArIGhvZmZzZXQgKyAoaHdzaXplPj5od3NjYWxlKSk7Ci0JCWkyY193KG92LCAweDE5LCB2d3NiYXNlICsgdm9mZnNldCk7Ci0JCWkyY193KG92LCAweDFhLCB2d2ViYXNlICsgdm9mZnNldCArICh2d3NpemU+PnZ3c2NhbGUpKTsKLQl9Ci0KLSNpZmRlZiBPVjUxMV9ERUJVRwotCWlmIChkdW1wX3NlbnNvcikKLQkJZHVtcF9pMmNfcmVncyhvdik7Ci0jZW5kaWYKLQotCXJldHVybiAwOwotfQotCi0vKiBTZXQgdXAgdGhlIE9WNTExL09WNTExKyB3aXRoIHRoZSBnaXZlbiBpbWFnZSBwYXJhbWV0ZXJzLgotICoKLSAqIERvIG5vdCBwdXQgYW55IHNlbnNvci1zcGVjaWZpYyBjb2RlIGluIGhlcmUgKGluY2x1ZGluZyBJMkMgSS9PIGZ1bmN0aW9ucykKLSAqLwotc3RhdGljIGludAotb3Y1MTFfbW9kZV9pbml0X3JlZ3Moc3RydWN0IHVzYl9vdjUxMSAqb3YsCi0JCSAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbW9kZSwgaW50IHN1Yl9mbGFnKQotewotCWludCBoc2VncywgdnNlZ3M7Ci0KLQlpZiAoc3ViX2ZsYWcpIHsKLQkJd2lkdGggPSBvdi0+c3VidzsKLQkJaGVpZ2h0ID0gb3YtPnN1Ymg7Ci0JfQotCi0JUERFQlVHKDMsICJ3aWR0aDolZCwgaGVpZ2h0OiVkLCBtb2RlOiVkLCBzdWI6JWQiLAotCSAgICAgICB3aWR0aCwgaGVpZ2h0LCBtb2RlLCBzdWJfZmxhZyk7Ci0KLQkvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgbW92ZWQgdG8gYSA3MTExYS1zcGVjaWZpYyBmdW5jdGlvbiBvbmNlCi0JLy8gc3ViY2FwdHVyZSBpcyBkZWFsdCB3aXRoIHByb3Blcmx5Ci0JaWYgKG92LT5zZW5zb3IgPT0gU0VOX1NBQTcxMTFBKSB7Ci0JCWlmICh3aWR0aCA9PSAzMjAgJiYgaGVpZ2h0ID09IDI0MCkgewotCQkJLyogTm8gbmVlZCB0byBkbyBhbnl0aGluZyBzcGVjaWFsICovCi0JCX0gZWxzZSBpZiAod2lkdGggPT0gNjQwICYmIGhlaWdodCA9PSA0ODApIHsKLQkJCS8qIFNldCB0aGUgT1Y1MTEgdXAgYXMgMzIweDQ4MCwgYnV0IGtlZXAgdGhlCi0JCQkgKiBWNEwgcmVzb2x1dGlvbiBhcyA2NDB4NDgwICovCi0JCQl3aWR0aCA9IDMyMDsKLQkJfSBlbHNlIHsKLQkJCWVycigiU0FBNzExMUEgb25seSBhbGxvd3MgMzIweDI0MCBvciA2NDB4NDgwIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQotCS8qIE1ha2Ugc3VyZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBhIG11bHRpcGxlIG9mIDggKi8KLQlpZiAod2lkdGggJSA4IHx8IGhlaWdodCAlIDgpIHsKLQkJZXJyKCJJbnZhbGlkIHNpemUgKCVkLCAlZCkgKG1vZGUgPSAlZCkiLCB3aWR0aCwgaGVpZ2h0LCBtb2RlKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHdpZHRoIDwgb3YtPm1pbndpZHRoIHx8IGhlaWdodCA8IG92LT5taW5oZWlnaHQpIHsKLQkJZXJyKCJSZXF1ZXN0ZWQgZGltZW5zaW9ucyBhcmUgdG9vIHNtYWxsIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChvdjUxeF9zdG9wKG92KSA8IDApCi0JCXJldHVybiAtRUlPOwotCi0JaWYgKG1vZGUgPT0gVklERU9fUEFMRVRURV9HUkVZKSB7Ci0JCXJlZ193KG92LCBSNTExX0NBTV9VVl9FTiwgMHgwMCk7Ci0JCXJlZ193KG92LCBSNTExX1NOQVBfVVZfRU4sIDB4MDApOwotCQlyZWdfdyhvdiwgUjUxMV9TTkFQX09QVFMsIDB4MDEpOwotCX0gZWxzZSB7Ci0JCXJlZ193KG92LCBSNTExX0NBTV9VVl9FTiwgMHgwMSk7Ci0JCXJlZ193KG92LCBSNTExX1NOQVBfVVZfRU4sIDB4MDEpOwotCQlyZWdfdyhvdiwgUjUxMV9TTkFQX09QVFMsIDB4MDMpOwotCX0KLQotCS8qIEhlcmUgSSdtIGFzc3VtaW5nIHRoYXQgc25hcHNob3Qgc2l6ZSA9PSBpbWFnZSBzaXplLgotCSAqIEkgaG9wZSB0aGF0J3MgYWx3YXlzIHRydWUuIC0tY2xhdWRpbwotCSAqLwotCWhzZWdzID0gKHdpZHRoID4+IDMpIC0gMTsKLQl2c2VncyA9IChoZWlnaHQgPj4gMykgLSAxOwotCi0JcmVnX3cob3YsIFI1MTFfQ0FNX1BYQ05ULCBoc2Vncyk7Ci0JcmVnX3cob3YsIFI1MTFfQ0FNX0xOQ05ULCB2c2Vncyk7Ci0JcmVnX3cob3YsIFI1MTFfQ0FNX1BYRElWLCAweDAwKTsKLQlyZWdfdyhvdiwgUjUxMV9DQU1fTE5ESVYsIDB4MDApOwotCi0JLyogWVVWNDIwLCBsb3cgcGFzcyBmaWx0ZXIgb24gKi8KLQlyZWdfdyhvdiwgUjUxMV9DQU1fT1BUUywgMHgwMyk7Ci0KLQkvKiBTbmFwc2hvdCBhZGRpdGlvbnMgKi8KLQlyZWdfdyhvdiwgUjUxMV9TTkFQX1BYQ05ULCBoc2Vncyk7Ci0JcmVnX3cob3YsIFI1MTFfU05BUF9MTkNOVCwgdnNlZ3MpOwotCXJlZ193KG92LCBSNTExX1NOQVBfUFhESVYsIDB4MDApOwotCXJlZ193KG92LCBSNTExX1NOQVBfTE5ESVYsIDB4MDApOwotCi0JaWYgKG92LT5jb21wcmVzcykgewotCQkvKiBFbmFibGUgWSBhbmQgVVYgcXVhbnRpemF0aW9uIGFuZCBjb21wcmVzc2lvbiAqLwotCQlyZWdfdyhvdiwgUjUxMV9DT01QX0VOLCAweDA3KTsKLQkJcmVnX3cob3YsIFI1MTFfQ09NUF9MVVRfRU4sIDB4MDMpOwotCQlvdjUxeF9yZXNldChvdiwgT1Y1MTFfUkVTRVRfT01OSUNFKTsKLQl9Ci0KLQlpZiAob3Y1MXhfcmVzdGFydChvdikgPCAwKQotCQlyZXR1cm4gLUVJTzsKLQotCXJldHVybiAwOwotfQotCi0vKiBTZXRzIHVwIHRoZSBPVjUxOC9PVjUxOCsgd2l0aCB0aGUgZ2l2ZW4gaW1hZ2UgcGFyYW1ldGVycwotICoKLSAqIE9WNTE4IG5lZWRzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgYXBwcm9hY2gsIHVudGlsIHdlIGNhbiBmaWd1cmUgb3V0IHdoYXQKLSAqIHRoZSBpbmRpdmlkdWFsIHJlZ2lzdGVycyBkby4gQWxzbywgb25seSAxNSBGUFMgaXMgc3VwcG9ydGVkIG5vdy4KLSAqCi0gKiBEbyBub3QgcHV0IGFueSBzZW5zb3Itc3BlY2lmaWMgY29kZSBpbiBoZXJlIChpbmNsdWRpbmcgSTJDIEkvTyBmdW5jdGlvbnMpCi0gKi8KLXN0YXRpYyBpbnQKLW92NTE4X21vZGVfaW5pdF9yZWdzKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LAotCQkgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1vZGUsIGludCBzdWJfZmxhZykKLXsKLQlpbnQgaHNlZ3MsIHZzZWdzLCBoaV9yZXM7Ci0KLQlpZiAoc3ViX2ZsYWcpIHsKLQkJd2lkdGggPSBvdi0+c3VidzsKLQkJaGVpZ2h0ID0gb3YtPnN1Ymg7Ci0JfQotCi0JUERFQlVHKDMsICJ3aWR0aDolZCwgaGVpZ2h0OiVkLCBtb2RlOiVkLCBzdWI6JWQiLAotCSAgICAgICB3aWR0aCwgaGVpZ2h0LCBtb2RlLCBzdWJfZmxhZyk7Ci0KLQlpZiAod2lkdGggJSAxNiB8fCBoZWlnaHQgJSA4KSB7Ci0JCWVycigiSW52YWxpZCBzaXplICglZCwgJWQpIiwgd2lkdGgsIGhlaWdodCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICh3aWR0aCA8IG92LT5taW53aWR0aCB8fCBoZWlnaHQgPCBvdi0+bWluaGVpZ2h0KSB7Ci0JCWVycigiUmVxdWVzdGVkIGRpbWVuc2lvbnMgYXJlIHRvbyBzbWFsbCIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAod2lkdGggPj0gMzIwICYmIGhlaWdodCA+PSAyNDApIHsKLQkJaGlfcmVzID0gMTsKLQl9IGVsc2UgaWYgKHdpZHRoID49IDMyMCB8fCBoZWlnaHQgPj0gMjQwKSB7Ci0JCWVycigiSW52YWxpZCB3aWR0aC9oZWlnaHQgY29tYmluYXRpb24gKCVkLCAlZCkiLCB3aWR0aCwgaGVpZ2h0KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlIHsKLQkJaGlfcmVzID0gMDsKLQl9Ci0KLQlpZiAob3Y1MXhfc3RvcChvdikgPCAwKQotCQlyZXR1cm4gLUVJTzsKLQotCS8qKioqKioqKiBTZXQgdGhlIG1vZGUgKioqKioqKiovCi0KLQlyZWdfdyhvdiwgMHgyYiwgMCk7Ci0JcmVnX3cob3YsIDB4MmMsIDApOwotCXJlZ193KG92LCAweDJkLCAwKTsKLQlyZWdfdyhvdiwgMHgyZSwgMCk7Ci0JcmVnX3cob3YsIDB4M2IsIDApOwotCXJlZ193KG92LCAweDNjLCAwKTsKLQlyZWdfdyhvdiwgMHgzZCwgMCk7Ci0JcmVnX3cob3YsIDB4M2UsIDApOwotCi0JaWYgKG92LT5icmlkZ2UgPT0gQlJHX09WNTE4ICYmIG92NTE4X2NvbG9yKSB7Ci0JCS8qIE9WNTE4IG5lZWRzIFUgYW5kIFYgc3dhcHBlZCAqLwotCQlpMmNfd19tYXNrKG92LCAweDE1LCAweDAwLCAweDAxKTsKLQotCQlpZiAobW9kZSA9PSBWSURFT19QQUxFVFRFX0dSRVkpIHsKLQkJCS8qIFNldCAxNi1iaXQgaW5wdXQgZm9ybWF0IChVViBkYXRhIGFyZSBpZ25vcmVkKSAqLwotCQkJcmVnX3dfbWFzayhvdiwgMHgyMCwgMHgwMCwgMHgwOCk7Ci0KLQkJCS8qIFNldCA4LWJpdCAoNDowOjApIG91dHB1dCBmb3JtYXQgKi8KLQkJCXJlZ193X21hc2sob3YsIDB4MjgsIDB4MDAsIDB4ZjApOwotCQkJcmVnX3dfbWFzayhvdiwgMHgzOCwgMHgwMCwgMHhmMCk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBTZXQgOC1iaXQgKFlWWVUpIGlucHV0IGZvcm1hdCAqLwotCQkJcmVnX3dfbWFzayhvdiwgMHgyMCwgMHgwOCwgMHgwOCk7Ci0KLQkJCS8qIFNldCAxMi1iaXQgKDQ6MjowKSBvdXRwdXQgZm9ybWF0ICovCi0JCQlyZWdfd19tYXNrKG92LCAweDI4LCAweDgwLCAweGYwKTsKLQkJCXJlZ193X21hc2sob3YsIDB4MzgsIDB4ODAsIDB4ZjApOwotCQl9Ci0JfSBlbHNlIHsKLQkJcmVnX3cob3YsIDB4MjgsIChtb2RlID09IFZJREVPX1BBTEVUVEVfR1JFWSkgPyAweDAwOjB4ODApOwotCQlyZWdfdyhvdiwgMHgzOCwgKG1vZGUgPT0gVklERU9fUEFMRVRURV9HUkVZKSA/IDB4MDA6MHg4MCk7Ci0JfQotCi0JaHNlZ3MgPSB3aWR0aCAvIDE2OwotCXZzZWdzID0gaGVpZ2h0IC8gNDsKLQotCXJlZ193KG92LCAweDI5LCBoc2Vncyk7Ci0JcmVnX3cob3YsIDB4MmEsIHZzZWdzKTsKLQotCXJlZ193KG92LCAweDM5LCBoc2Vncyk7Ci0JcmVnX3cob3YsIDB4M2EsIHZzZWdzKTsKLQotCS8qIFdpbmRvd3MgZHJpdmVyIGRvZXMgdGhpcyBoZXJlOyB3aG8ga25vd3Mgd2h5ICovCi0JcmVnX3cob3YsIDB4MmYsIDB4ODApOwotCi0JLyoqKioqKioqIFNldCB0aGUgZnJhbWVyYXRlICh0byAxNSBGUFMpICoqKioqKioqLwotCi0JLyogTW9kZSBpbmRlcGVuZGVudCwgYnV0IGZyYW1lcmF0ZSBkZXBlbmRlbnQsIHJlZ3MgKi8KLQlyZWdfdyhvdiwgMHg1MSwgMHgwMik7CS8qIENsb2NrIGRpdmlkZXI7IGxvd2VyPT1mYXN0ZXIgKi8KLQlyZWdfdyhvdiwgMHgyMiwgMHgxOCk7Ci0JcmVnX3cob3YsIDB4MjMsIDB4ZmYpOwotCi0JaWYgKG92LT5icmlkZ2UgPT0gQlJHX09WNTE4UExVUykKLQkJcmVnX3cob3YsIDB4MjEsIDB4MTkpOwotCWVsc2UKLQkJcmVnX3cob3YsIDB4NzEsIDB4MTkpOwkvKiBDb21wcmVzc2lvbi1yZWxhdGVkPyAqLwotCi0JLy8gRklYTUU6IFNlbnNvci1zcGVjaWZpYwotCS8qIEJpdCA1IGlzIHdoYXQgbWF0dGVycyBoZXJlLiBPZiBjb3Vyc2UsIGl0IGlzICJyZXNlcnZlZCIgKi8KLQlpMmNfdyhvdiwgMHg1NCwgMHgyMyk7Ci0KLQlyZWdfdyhvdiwgMHgyZiwgMHg4MCk7Ci0KLQlpZiAob3YtPmJyaWRnZSA9PSBCUkdfT1Y1MThQTFVTKSB7Ci0JCXJlZ193KG92LCAweDI0LCAweDk0KTsKLQkJcmVnX3cob3YsIDB4MjUsIDB4OTApOwotCQlvdjUxOF9yZWdfdzMyKG92LCAweGM0LCAgICA0MDAsIDIpOwkvKiAxOTBoICAgKi8KLQkJb3Y1MThfcmVnX3czMihvdiwgMHhjNiwgICAgNTQwLCAyKTsJLyogMjFjaCAgICovCi0JCW92NTE4X3JlZ193MzIob3YsIDB4YzcsICAgIDU0MCwgMik7CS8qIDIxY2ggICAqLwotCQlvdjUxOF9yZWdfdzMyKG92LCAweGM4LCAgICAxMDgsIDIpOwkvKiA2Y2ggICAgKi8KLQkJb3Y1MThfcmVnX3czMihvdiwgMHhjYSwgMTMxMDk4LCAzKTsJLyogMjAwMWFoICovCi0JCW92NTE4X3JlZ193MzIob3YsIDB4Y2IsICAgIDUzMiwgMik7CS8qIDIxNGggICAqLwotCQlvdjUxOF9yZWdfdzMyKG92LCAweGNjLCAgIDI0MDAsIDIpOwkvKiA5NjBoICAgKi8KLQkJb3Y1MThfcmVnX3czMihvdiwgMHhjZCwgICAgIDMyLCAyKTsJLyogMjBoICAgICovCi0JCW92NTE4X3JlZ193MzIob3YsIDB4Y2UsICAgIDYwOCwgMik7CS8qIDI2MGggICAqLwotCX0gZWxzZSB7Ci0JCXJlZ193KG92LCAweDI0LCAweDlmKTsKLQkJcmVnX3cob3YsIDB4MjUsIDB4OTApOwotCQlvdjUxOF9yZWdfdzMyKG92LCAweGM0LCAgICA0MDAsIDIpOwkvKiAxOTBoICAgKi8KLQkJb3Y1MThfcmVnX3czMihvdiwgMHhjNiwgICAgNTAwLCAyKTsJLyogMWY0aCAgICovCi0JCW92NTE4X3JlZ193MzIob3YsIDB4YzcsICAgIDUwMCwgMik7CS8qIDFmNGggICAqLwotCQlvdjUxOF9yZWdfdzMyKG92LCAweGM4LCAgICAxNDIsIDIpOwkvKiA4ZWggICAgKi8KLQkJb3Y1MThfcmVnX3czMihvdiwgMHhjYSwgMTMxMDk4LCAzKTsJLyogMjAwMWFoICovCi0JCW92NTE4X3JlZ193MzIob3YsIDB4Y2IsICAgIDUzMiwgMik7CS8qIDIxNGggICAqLwotCQlvdjUxOF9yZWdfdzMyKG92LCAweGNjLCAgIDIwMDAsIDIpOwkvKiA3ZDBoICAgKi8KLQkJb3Y1MThfcmVnX3czMihvdiwgMHhjZCwgICAgIDMyLCAyKTsJLyogMjBoICAgICovCi0JCW92NTE4X3JlZ193MzIob3YsIDB4Y2UsICAgIDYwOCwgMik7CS8qIDI2MGggICAqLwotCX0KLQotCXJlZ193KG92LCAweDJmLCAweDgwKTsKLQotCWlmIChvdjUxeF9yZXN0YXJ0KG92KSA8IDApCi0JCXJldHVybiAtRUlPOwotCi0JLyogUmVzZXQgaXQganVzdCBmb3IgZ29vZCBtZWFzdXJlICovCi0JaWYgKG92NTF4X3Jlc2V0KG92LCBPVjUxMV9SRVNFVF9OT1JFR1MpIDwgMCkKLQkJcmV0dXJuIC1FSU87Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBPVjUxMSwgT1Y1MTgsIGFuZCBzZW5zb3Igc3BlY2lmaWMgZnVuY3Rpb25zICovCi1zdGF0aWMgaW50Ci1tb2RlX2luaXRfcmVncyhzdHJ1Y3QgdXNiX292NTExICpvdiwKLQkgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbW9kZSwgaW50IHN1Yl9mbGFnKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIW92IHx8ICFvdi0+ZGV2KQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkgewotCQlyYyA9IG92NTE4X21vZGVfaW5pdF9yZWdzKG92LCB3aWR0aCwgaGVpZ2h0LCBtb2RlLCBzdWJfZmxhZyk7Ci0JfSBlbHNlIHsKLQkJcmMgPSBvdjUxMV9tb2RlX2luaXRfcmVncyhvdiwgd2lkdGgsIGhlaWdodCwgbW9kZSwgc3ViX2ZsYWcpOwotCX0KLQotCWlmIChGQVRBTF9FUlJPUihyYykpCi0JCXJldHVybiByYzsKLQotCXN3aXRjaCAob3YtPnNlbnNvcikgewotCWNhc2UgU0VOX09WNzYxMDoKLQljYXNlIFNFTl9PVjc2MjA6Ci0JY2FzZSBTRU5fT1Y3NkJFOgotCWNhc2UgU0VOX09WODYwMDoKLQljYXNlIFNFTl9PVjY2MjA6Ci0JY2FzZSBTRU5fT1Y2NjMwOgotCQlyYyA9IHNldF9vdl9zZW5zb3Jfd2luZG93KG92LCB3aWR0aCwgaGVpZ2h0LCBtb2RlLCBzdWJfZmxhZyk7Ci0JCWJyZWFrOwotCWNhc2UgU0VOX0tTMDEyNzoKLQljYXNlIFNFTl9LUzAxMjdCOgotCQllcnIoIktTMDEyNy1zZXJpZXMgZGVjb2RlcnMgbm90IHN1cHBvcnRlZCB5ZXQiKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlicmVhazsKLQljYXNlIFNFTl9TQUE3MTExQToKLS8vCQlyYyA9IG1vZGVfaW5pdF9zYWFfc2Vuc29yX3JlZ3Mob3YsIHdpZHRoLCBoZWlnaHQsIG1vZGUsCi0vLwkJCQkJICAgICAgIHN1Yl9mbGFnKTsKLQotCQlQREVCVUcoMSwgIlNBQSBzdGF0dXMgPSAweCUwMlgiLCBpMmNfcihvdiwgMHgxZikpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQllcnIoIlVua25vd24gc2Vuc29yIik7Ci0JCXJjID0gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoRkFUQUxfRVJST1IocmMpKQotCQlyZXR1cm4gcmM7Ci0KLQkvKiBTZW5zb3ItaW5kZXBlbmRlbnQgc2V0dGluZ3MgKi8KLQlyYyA9IHNlbnNvcl9zZXRfYXV0b19icmlnaHRuZXNzKG92LCBvdi0+YXV0b19icnQpOwotCWlmIChGQVRBTF9FUlJPUihyYykpCi0JCXJldHVybiByYzsKLQotCXJjID0gc2Vuc29yX3NldF9hdXRvX2V4cG9zdXJlKG92LCBvdi0+YXV0b19leHApOwotCWlmIChGQVRBTF9FUlJPUihyYykpCi0JCXJldHVybiByYzsKLQotCXJjID0gc2Vuc29yX3NldF9iYW5kaW5nX2ZpbHRlcihvdiwgYmFuZGluZ2ZpbHRlcik7Ci0JaWYgKEZBVEFMX0VSUk9SKHJjKSkKLQkJcmV0dXJuIHJjOwotCi0JaWYgKG92LT5saWdodGZyZXEpIHsKLQkJcmMgPSBzZW5zb3Jfc2V0X2xpZ2h0X2ZyZXEob3YsIGxpZ2h0ZnJlcSk7Ci0JCWlmIChGQVRBTF9FUlJPUihyYykpCi0JCQlyZXR1cm4gcmM7Ci0JfQotCi0JcmMgPSBzZW5zb3Jfc2V0X2JhY2tsaWdodChvdiwgb3YtPmJhY2tsaWdodCk7Ci0JaWYgKEZBVEFMX0VSUk9SKHJjKSkKLQkJcmV0dXJuIHJjOwotCi0JcmMgPSBzZW5zb3Jfc2V0X21pcnJvcihvdiwgb3YtPm1pcnJvcik7Ci0JaWYgKEZBVEFMX0VSUk9SKHJjKSkKLQkJcmV0dXJuIHJjOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIFRoaXMgc2V0cyB0aGUgZGVmYXVsdCBpbWFnZSBwYXJhbWV0ZXJzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgYXBwcyB0aGF0IHVzZQotICogcmVhZCgpIGFuZCBkbyBub3Qgc2V0IHRoZXNlLgotICovCi1zdGF0aWMgaW50Ci1vdjUxeF9zZXRfZGVmYXVsdF9wYXJhbXMoc3RydWN0IHVzYl9vdjUxMSAqb3YpCi17Ci0JaW50IGk7Ci0KLQkvKiBTZXQgZGVmYXVsdCBzaXplcyBpbiBjYXNlIElPQ1RMIChWSURJT0NNQ0FQVFVSRSkgaXMgbm90IHVzZWQKLQkgKiAodXNpbmcgcmVhZCgpIGluc3RlYWQpLiAqLwotCWZvciAoaSA9IDA7IGkgPCBPVjUxMV9OVU1GUkFNRVM7IGkrKykgewotCQlvdi0+ZnJhbWVbaV0ud2lkdGggPSBvdi0+bWF4d2lkdGg7Ci0JCW92LT5mcmFtZVtpXS5oZWlnaHQgPSBvdi0+bWF4aGVpZ2h0OwotCQlvdi0+ZnJhbWVbaV0uYnl0ZXNfcmVhZCA9IDA7Ci0JCWlmIChmb3JjZV9wYWxldHRlKQotCQkJb3YtPmZyYW1lW2ldLmZvcm1hdCA9IGZvcmNlX3BhbGV0dGU7Ci0JCWVsc2UKLQkJCW92LT5mcmFtZVtpXS5mb3JtYXQgPSBWSURFT19QQUxFVFRFX1lVVjQyMDsKLQotCQlvdi0+ZnJhbWVbaV0uZGVwdGggPSBnZXRfZGVwdGgob3YtPmZyYW1lW2ldLmZvcm1hdCk7Ci0JfQotCi0JUERFQlVHKDMsICIlZHglZCwgJXMiLCBvdi0+bWF4d2lkdGgsIG92LT5tYXhoZWlnaHQsCi0JICAgICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIG92LT5mcmFtZVswXS5mb3JtYXQpKTsKLQotCS8qIEluaXRpYWxpemUgdG8gbWF4IHdpZHRoL2hlaWdodCwgWVVWNDIwIG9yIFJHQjI0IChpZiBzdXBwb3J0ZWQpICovCi0JaWYgKG1vZGVfaW5pdF9yZWdzKG92LCBvdi0+bWF4d2lkdGgsIG92LT5tYXhoZWlnaHQsCi0JCQkgICBvdi0+ZnJhbWVbMF0uZm9ybWF0LCAwKSA8IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogVmlkZW8gZGVjb2RlciBzdHVmZgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBTZXQgYW5hbG9nIGlucHV0IHBvcnQgb2YgZGVjb2RlciAqLwotc3RhdGljIGludAotZGVjb2Rlcl9zZXRfaW5wdXQoc3RydWN0IHVzYl9vdjUxMSAqb3YsIGludCBpbnB1dCkKLXsKLQlQREVCVUcoNCwgInBvcnQgJWQiLCBpbnB1dCk7Ci0KLQlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKLQljYXNlIFNFTl9TQUE3MTExQToKLQl7Ci0JCS8qIFNlbGVjdCBtb2RlICovCi0JCWkyY193X21hc2sob3YsIDB4MDIsIGlucHV0LCAweDA3KTsKLQkJLyogQnlwYXNzIGNocm9taW5hbmNlIHRyYXAgZm9yIG1vZGVzIDQuLjcgKi8KLQkJaTJjX3dfbWFzayhvdiwgMHgwOSwgKGlucHV0ID4gMykgPyAweDgwOjB4MDAsIDB4ODApOwotCQlicmVhazsKLQl9Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIEdldCBBU0NJSSBuYW1lIG9mIHZpZGVvIGlucHV0ICovCi1zdGF0aWMgaW50Ci1kZWNvZGVyX2dldF9pbnB1dF9uYW1lKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBpbnQgaW5wdXQsIGNoYXIgKm5hbWUpCi17Ci0Jc3dpdGNoIChvdi0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5fU0FBNzExMUE6Ci0JewotCQlpZiAoaW5wdXQgPCAwIHx8IGlucHV0ID4gNykKLQkJCXJldHVybiAtRUlOVkFMOwotCQllbHNlIGlmIChpbnB1dCA8IDQpCi0JCQlzcHJpbnRmKG5hbWUsICJDVkJTLSVkIiwgaW5wdXQpOwotCQllbHNlIC8vIGlmIChpbnB1dCA8IDgpCi0JCQlzcHJpbnRmKG5hbWUsICJTLVZpZGVvLSVkIiwgaW5wdXQgLSA0KTsKLQkJYnJlYWs7Ci0JfQotCWRlZmF1bHQ6Ci0JCXNwcmludGYobmFtZSwgIiVzIiwgIkNhbWVyYSIpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKiBTZXQgbm9ybSAoTlRTQywgUEFMLCBTRUNBTSwgQVVUTykgKi8KLXN0YXRpYyBpbnQKLWRlY29kZXJfc2V0X25vcm0oc3RydWN0IHVzYl9vdjUxMSAqb3YsIGludCBub3JtKQotewotCVBERUJVRyg0LCAiJWQiLCBub3JtKTsKLQotCXN3aXRjaCAob3YtPnNlbnNvcikgewotCWNhc2UgU0VOX1NBQTcxMTFBOgotCXsKLQkJaW50IHJlZ184LCByZWdfZTsKLQotCQlpZiAobm9ybSA9PSBWSURFT19NT0RFX05UU0MpIHsKLQkJCXJlZ184ID0gMHg0MDsJLyogNjAgSHogKi8KLQkJCXJlZ19lID0gMHgwMDsJLyogTlRTQyBNIC8gUEFMIEJHSEkgKi8KLQkJfSBlbHNlIGlmIChub3JtID09IFZJREVPX01PREVfUEFMKSB7Ci0JCQlyZWdfOCA9IDB4MDA7CS8qIDUwIEh6ICovCi0JCQlyZWdfZSA9IDB4MDA7CS8qIE5UU0MgTSAvIFBBTCBCR0hJICovCi0JCX0gZWxzZSBpZiAobm9ybSA9PSBWSURFT19NT0RFX0FVVE8pIHsKLQkJCXJlZ184ID0gMHg4MDsJLyogQXV0byBmaWVsZCBkZXRlY3QgKi8KLQkJCXJlZ19lID0gMHgwMDsJLyogTlRTQyBNIC8gUEFMIEJHSEkgKi8KLQkJfSBlbHNlIGlmIChub3JtID09IFZJREVPX01PREVfU0VDQU0pIHsKLQkJCXJlZ184ID0gMHgwMDsJLyogNTAgSHogKi8KLQkJCXJlZ19lID0gMHg1MDsJLyogU0VDQU0gLyBQQUwgNC40MyAqLwotCQl9IGVsc2UgewotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlpMmNfd19tYXNrKG92LCAweDA4LCByZWdfOCwgMHhjMCk7Ci0JCWkyY193X21hc2sob3YsIDB4MGUsIHJlZ19lLCAweDcwKTsKLQkJYnJlYWs7Ci0JfQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFJhdyBkYXRhIHBhcnNpbmcKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogQ29waWVzIGEgNjQtYnl0ZSBzZWdtZW50IGF0IHBJbiB0byBhbiA4eDggYmxvY2sgYXQgcE91dC4gVGhlIHdpZHRoIG9mIHRoZQotICogaW1hZ2UgYXQgcE91dCBpcyBzcGVjaWZpZWQgYnkgdy4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1tYWtlXzh4OCh1bnNpZ25lZCBjaGFyICpwSW4sIHVuc2lnbmVkIGNoYXIgKnBPdXQsIGludCB3KQotewotCXVuc2lnbmVkIGNoYXIgKnBPdXQxID0gcE91dDsKLQlpbnQgeCwgeTsKLQotCWZvciAoeSA9IDA7IHkgPCA4OyB5KyspIHsKLQkJcE91dDEgPSBwT3V0OwotCQlmb3IgKHggPSAwOyB4IDwgODsgeCsrKSB7Ci0JCQkqcE91dDErKyA9ICpwSW4rKzsKLQkJfQotCQlwT3V0ICs9IHc7Ci0JfQotfQotCi0vKgotICogRm9yIFJBVyBCVyAoWVVWIDQ6MDowKSBpbWFnZXMsIGRhdGEgc2hvdyB1cCBpbiAyNTYgYnl0ZSBzZWdtZW50cy4KLSAqIFRoZSBzZWdtZW50cyByZXByZXNlbnQgNCBzcXVhcmVzIG9mIDh4OCBwaXhlbHMgYXMgZm9sbG93czoKLSAqCi0gKiAgICAgIDAgIDEgLi4uICA3ICAgIDY0ICA2NSAuLi4gIDcxICAgLi4uICAxOTIgMTkzIC4uLiAxOTkKLSAqICAgICAgOCAgOSAuLi4gMTUgICAgNzIgIDczIC4uLiAgNzkgICAgICAgIDIwMCAyMDEgLi4uIDIwNwotICogICAgICAgICAgIC4uLiAgICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAuLi4KLSAqICAgICA1NiA1NyAuLi4gNjMgICAxMjAgMTIxIC4uLiAxMjcgICAgICAgIDI0OCAyNDkgLi4uIDI1NQotICoKLSAqLwotc3RhdGljIHZvaWQKLXl1djQwMHJhd190b195dXY0MDBwKHN0cnVjdCBvdjUxMV9mcmFtZSAqZnJhbWUsCi0JCSAgICAgdW5zaWduZWQgY2hhciAqcEluMCwgdW5zaWduZWQgY2hhciAqcE91dDApCi17Ci0JaW50IHgsIHk7Ci0JdW5zaWduZWQgY2hhciAqcEluLCAqcE91dCwgKnBPdXRMaW5lOwotCi0JLyogQ29weSBZICovCi0JcEluID0gcEluMDsKLQlwT3V0TGluZSA9IHBPdXQwOwotCWZvciAoeSA9IDA7IHkgPCBmcmFtZS0+cmF3aGVpZ2h0IC0gMTsgeSArPSA4KSB7Ci0JCXBPdXQgPSBwT3V0TGluZTsKLQkJZm9yICh4ID0gMDsgeCA8IGZyYW1lLT5yYXd3aWR0aCAtIDE7IHggKz0gOCkgewotCQkJbWFrZV84eDgocEluLCBwT3V0LCBmcmFtZS0+cmF3d2lkdGgpOwotCQkJcEluICs9IDY0OwotCQkJcE91dCArPSA4OwotCQl9Ci0JCXBPdXRMaW5lICs9IDggKiBmcmFtZS0+cmF3d2lkdGg7Ci0JfQotfQotCi0vKgotICogRm9yIFlVViA0OjI6MCBpbWFnZXMsIHRoZSBkYXRhIHNob3cgdXAgaW4gMzg0IGJ5dGUgc2VnbWVudHMuCi0gKiBUaGUgZmlyc3QgNjQgYnl0ZXMgb2YgZWFjaCBzZWdtZW50IGFyZSBVLCB0aGUgbmV4dCA2NCBhcmUgVi4gIFRoZSBVIGFuZAotICogViBhcmUgYXJyYW5nZWQgYXMgZm9sbG93czoKLSAqCi0gKiAgICAgIDAgIDEgLi4uICA3Ci0gKiAgICAgIDggIDkgLi4uIDE1Ci0gKiAgICAgICAgICAgLi4uCi0gKiAgICAgNTYgNTcgLi4uIDYzCi0gKgotICogVSBhbmQgViBhcmUgc2hpcHBlZCBhdCBoYWxmIHJlc29sdXRpb24gKDEgVSxWIHNhbXBsZSAtPiBvbmUgMngyIGJsb2NrKS4KLSAqCi0gKiBUaGUgbmV4dCAyNTYgYnl0ZXMgYXJlIGZ1bGwgcmVzb2x1dGlvbiBZIGRhdGEgYW5kIHJlcHJlc2VudCA0IHNxdWFyZXMKLSAqIG9mIDh4OCBwaXhlbHMgYXMgZm9sbG93czoKLSAqCi0gKiAgICAgIDAgIDEgLi4uICA3ICAgIDY0ICA2NSAuLi4gIDcxICAgLi4uICAxOTIgMTkzIC4uLiAxOTkKLSAqICAgICAgOCAgOSAuLi4gMTUgICAgNzIgIDczIC4uLiAgNzkgICAgICAgIDIwMCAyMDEgLi4uIDIwNwotICogICAgICAgICAgIC4uLiAgICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAuLi4KLSAqICAgICA1NiA1NyAuLi4gNjMgICAxMjAgMTIxIC4uLiAxMjcgICAuLi4gIDI0OCAyNDkgLi4uIDI1NQotICoKLSAqIE5vdGUgdGhhdCB0aGUgVSBhbmQgViBkYXRhIGluIG9uZSBzZWdtZW50IHJlcHJlc2VudCBhIDE2IHggMTYgcGl4ZWwKLSAqIGFyZWEsIGJ1dCB0aGUgWSBkYXRhIHJlcHJlc2VudCBhIDMyIHggOCBwaXhlbCBhcmVhLiBJZiB0aGUgd2lkdGggaXMgbm90IGFuCi0gKiBldmVuIG11bHRpcGxlIG9mIDMyLCB0aGUgZXh0cmEgOHg4IGJsb2NrcyB3aXRoaW4gYSAzMng4IGJsb2NrIGJlbG9uZyB0byB0aGUKLSAqIG5leHQgaG9yaXpvbnRhbCBzdHJpcGUuCi0gKgotICogSWYgZHVtcHBpeCBtb2R1bGUgcGFyYW0gaXMgc2V0LCBfcGFyc2VfZGF0YSBqdXN0IGR1bXBzIHRoZSBpbmNvbWluZyBzZWdtZW50cywKLSAqIHZlcmJhdGltLCBpbiBvcmRlciwgaW50byB0aGUgZnJhbWUuIFdoZW4gdXNlZCB3aXRoIHZpZGNhdCAtZiBwcG0gLXMgNjQweDQ4MAotICogdGhpcyBwdXRzIHRoZSBkYXRhIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQgYW5kIGNhbiBiZSBhbmFseXplZCB3aXRoIHRoZQotICogcGFyc2VwcG0uYyB1dGlsaXR5IEkgd3JvdGUuICBUaGF0J3MgYSBtdWNoIGZhc3RlciB3YXkgZm9yIGZpZ3VyaW5nIG91dCBob3cKLSAqIHRoZXNlIGRhdGEgYXJlIHNjcmFtYmxlZC4KLSAqLwotCi0vKiBDb252ZXJ0cyBmcm9tIHJhdywgdW5jb21wcmVzc2VkIHNlZ21lbnRzIGF0IHBJbjAgdG8gYSBZVVY0MjBQIGZyYW1lIGF0IHBPdXQwLgotICoKLSAqIEZJWE1FOiBDdXJyZW50bHkgb25seSBoYW5kbGVzIHdpZHRoIGFuZCBoZWlnaHQgdGhhdCBhcmUgbXVsdGlwbGVzIG9mIDE2Ci0gKi8KLXN0YXRpYyB2b2lkCi15dXY0MjByYXdfdG9feXV2NDIwcChzdHJ1Y3Qgb3Y1MTFfZnJhbWUgKmZyYW1lLAotCQkgICAgIHVuc2lnbmVkIGNoYXIgKnBJbjAsIHVuc2lnbmVkIGNoYXIgKnBPdXQwKQotewotCWludCBrLCB4LCB5OwotCXVuc2lnbmVkIGNoYXIgKnBJbiwgKnBPdXQsICpwT3V0TGluZTsKLQljb25zdCB1bnNpZ25lZCBpbnQgYSA9IGZyYW1lLT5yYXd3aWR0aCAqIGZyYW1lLT5yYXdoZWlnaHQ7Ci0JY29uc3QgdW5zaWduZWQgaW50IHcgPSBmcmFtZS0+cmF3d2lkdGggLyAyOwotCi0JLyogQ29weSBVIGFuZCBWICovCi0JcEluID0gcEluMDsKLQlwT3V0TGluZSA9IHBPdXQwICsgYTsKLQlmb3IgKHkgPSAwOyB5IDwgZnJhbWUtPnJhd2hlaWdodCAtIDE7IHkgKz0gMTYpIHsKLQkJcE91dCA9IHBPdXRMaW5lOwotCQlmb3IgKHggPSAwOyB4IDwgZnJhbWUtPnJhd3dpZHRoIC0gMTsgeCArPSAxNikgewotCQkJbWFrZV84eDgocEluLCBwT3V0LCB3KTsKLQkJCW1ha2VfOHg4KHBJbiArIDY0LCBwT3V0ICsgYS80LCB3KTsKLQkJCXBJbiArPSAzODQ7Ci0JCQlwT3V0ICs9IDg7Ci0JCX0KLQkJcE91dExpbmUgKz0gOCAqIHc7Ci0JfQotCi0JLyogQ29weSBZICovCi0JcEluID0gcEluMCArIDEyODsKLQlwT3V0TGluZSA9IHBPdXQwOwotCWsgPSAwOwotCWZvciAoeSA9IDA7IHkgPCBmcmFtZS0+cmF3aGVpZ2h0IC0gMTsgeSArPSA4KSB7Ci0JCXBPdXQgPSBwT3V0TGluZTsKLQkJZm9yICh4ID0gMDsgeCA8IGZyYW1lLT5yYXd3aWR0aCAtIDE7IHggKz0gOCkgewotCQkJbWFrZV84eDgocEluLCBwT3V0LCBmcmFtZS0+cmF3d2lkdGgpOwotCQkJcEluICs9IDY0OwotCQkJcE91dCArPSA4OwotCQkJaWYgKCgrK2spID4gMykgewotCQkJCWsgPSAwOwotCQkJCXBJbiArPSAxMjg7Ci0JCQl9Ci0JCX0KLQkJcE91dExpbmUgKz0gOCAqIGZyYW1lLT5yYXd3aWR0aDsKLQl9Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRGVjb21wcmVzc2lvbgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgaW50Ci1yZXF1ZXN0X2RlY29tcHJlc3NvcihzdHJ1Y3QgdXNiX292NTExICpvdikKLXsKLQlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTEgfHwgb3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpIHsKLQkJZXJyKCJObyBkZWNvbXByZXNzb3IgYXZhaWxhYmxlIik7Ci0JfSBlbHNlIHsKLQkJZXJyKCJVbmtub3duIGJyaWRnZSIpOwotCX0KLQotCXJldHVybiAtRU5PU1lTOwotfQotCi1zdGF0aWMgdm9pZAotZGVjb21wcmVzcyhzdHJ1Y3QgdXNiX292NTExICpvdiwgc3RydWN0IG92NTExX2ZyYW1lICpmcmFtZSwKLQkgICB1bnNpZ25lZCBjaGFyICpwSW4wLCB1bnNpZ25lZCBjaGFyICpwT3V0MCkKLXsKLQlpZiAoIW92LT5kZWNvbXBfb3BzKQotCQlpZiAocmVxdWVzdF9kZWNvbXByZXNzb3Iob3YpKQotCQkJcmV0dXJuOwotCi19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRm9ybWF0IGNvbnZlcnNpb24KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogRnVzZXMgZXZlbiBhbmQgb2RkIGZpZWxkcyB0b2dldGhlciwgYW5kIGRvdWJsZXMgd2lkdGguCi0gKiBJTlBVVDogYW4gb2RkIGZpZWxkIGZvbGxvd2VkIGJ5IGFuIGV2ZW4gZmllbGQgYXQgcEluMCwgaW4gWVVWIHBsYW5hciBmb3JtYXQKLSAqIE9VVFBVVDogYSBub3JtYWwgWVVWIHBsYW5hciBpbWFnZSwgd2l0aCBjb3JyZWN0IGFzcGVjdCByYXRpbwotICovCi1zdGF0aWMgdm9pZAotZGVpbnRlcmxhY2Uoc3RydWN0IG92NTExX2ZyYW1lICpmcmFtZSwgaW50IHJhd2Zvcm1hdCwKLQkgICAgdW5zaWduZWQgY2hhciAqcEluMCwgdW5zaWduZWQgY2hhciAqcE91dDApCi17Ci0JY29uc3QgaW50IGZpZWxkaGVpZ2h0ID0gZnJhbWUtPnJhd2hlaWdodCAvIDI7Ci0JY29uc3QgaW50IGZpZWxkcGl4ID0gZmllbGRoZWlnaHQgKiBmcmFtZS0+cmF3d2lkdGg7Ci0JY29uc3QgaW50IHcgPSBmcmFtZS0+d2lkdGg7Ci0JaW50IHgsIHk7Ci0JdW5zaWduZWQgY2hhciAqcEluRXZlbiwgKnBJbk9kZCwgKnBPdXQ7Ci0KLQlQREVCVUcoNSwgImZpZWxkaGVpZ2h0PSVkIiwgZmllbGRoZWlnaHQpOwotCi0JaWYgKGZyYW1lLT5yYXdoZWlnaHQgIT0gZnJhbWUtPmhlaWdodCkgewotCQllcnIoImludmFsaWQgaGVpZ2h0Iik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoKGZyYW1lLT5yYXd3aWR0aCAqIDIpICE9IGZyYW1lLT53aWR0aCkgewotCQllcnIoImludmFsaWQgd2lkdGgiKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIFkgKi8KLQlwSW5PZGQgPSBwSW4wOwotCXBJbkV2ZW4gPSBwSW5PZGQgKyBmaWVsZHBpeDsKLQlwT3V0ID0gcE91dDA7Ci0JZm9yICh5ID0gMDsgeSA8IGZpZWxkaGVpZ2h0OyB5KyspIHsKLQkJZm9yICh4ID0gMDsgeCA8IGZyYW1lLT5yYXd3aWR0aDsgeCsrKSB7Ci0JCQkqcE91dCA9ICpwSW5FdmVuOwotCQkJKihwT3V0KzEpID0gKnBJbkV2ZW4rKzsKLQkJCSoocE91dCt3KSA9ICpwSW5PZGQ7Ci0JCQkqKHBPdXQrdysxKSA9ICpwSW5PZGQrKzsKLQkJCXBPdXQgKz0gMjsKLQkJfQotCQlwT3V0ICs9IHc7Ci0JfQotCi0JaWYgKHJhd2Zvcm1hdCA9PSBSQVdGTVRfWVVWNDIwKSB7Ci0JLyogVSAqLwotCQlwSW5PZGQgPSBwSW4wICsgZmllbGRwaXggKiAyOwotCQlwSW5FdmVuID0gcEluT2RkICsgZmllbGRwaXggLyA0OwotCQlmb3IgKHkgPSAwOyB5IDwgZmllbGRoZWlnaHQgLyAyOyB5KyspIHsKLQkJCWZvciAoeCA9IDA7IHggPCBmcmFtZS0+cmF3d2lkdGggLyAyOyB4KyspIHsKLQkJCQkqcE91dCA9ICpwSW5FdmVuOwotCQkJCSoocE91dCsxKSA9ICpwSW5FdmVuKys7Ci0JCQkJKihwT3V0K3cvMikgPSAqcEluT2RkOwotCQkJCSoocE91dCt3LzIrMSkgPSAqcEluT2RkKys7Ci0JCQkJcE91dCArPSAyOwotCQkJfQotCQkJcE91dCArPSB3LzI7Ci0JCX0KLQkvKiBWICovCi0JCXBJbk9kZCA9IHBJbjAgKyBmaWVsZHBpeCAqIDIgKyBmaWVsZHBpeCAvIDI7Ci0JCXBJbkV2ZW4gPSBwSW5PZGQgKyBmaWVsZHBpeCAvIDQ7Ci0JCWZvciAoeSA9IDA7IHkgPCBmaWVsZGhlaWdodCAvIDI7IHkrKykgewotCQkJZm9yICh4ID0gMDsgeCA8IGZyYW1lLT5yYXd3aWR0aCAvIDI7IHgrKykgewotCQkJCSpwT3V0ID0gKnBJbkV2ZW47Ci0JCQkJKihwT3V0KzEpID0gKnBJbkV2ZW4rKzsKLQkJCQkqKHBPdXQrdy8yKSA9ICpwSW5PZGQ7Ci0JCQkJKihwT3V0K3cvMisxKSA9ICpwSW5PZGQrKzsKLQkJCQlwT3V0ICs9IDI7Ci0JCQl9Ci0JCQlwT3V0ICs9IHcvMjsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQKLW92NTF4X3Bvc3Rwcm9jZXNzX2dyZXkoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHN0cnVjdCBvdjUxMV9mcmFtZSAqZnJhbWUpCi17Ci0JCS8qIERlaW50ZXJsYWNlIGZyYW1lLCBpZiBuZWNlc3NhcnkgKi8KLQkJaWYgKG92LT5zZW5zb3IgPT0gU0VOX1NBQTcxMTFBICYmIGZyYW1lLT5yYXdoZWlnaHQgPj0gNDgwKSB7Ci0JCQlpZiAoZnJhbWUtPmNvbXByZXNzZWQpCi0JCQkJZGVjb21wcmVzcyhvdiwgZnJhbWUsIGZyYW1lLT5yYXdkYXRhLAotCQkJCQkJIGZyYW1lLT50ZW1wZGF0YSk7Ci0JCQllbHNlCi0JCQkJeXV2NDAwcmF3X3RvX3l1djQwMHAoZnJhbWUsIGZyYW1lLT5yYXdkYXRhLAotCQkJCQkJICAgICBmcmFtZS0+dGVtcGRhdGEpOwotCi0JCQlkZWludGVybGFjZShmcmFtZSwgUkFXRk1UX1lVVjQwMCwgZnJhbWUtPnRlbXBkYXRhLAotCQkJCSAgICBmcmFtZS0+ZGF0YSk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoZnJhbWUtPmNvbXByZXNzZWQpCi0JCQkJZGVjb21wcmVzcyhvdiwgZnJhbWUsIGZyYW1lLT5yYXdkYXRhLAotCQkJCQkJIGZyYW1lLT5kYXRhKTsKLQkJCWVsc2UKLQkJCQl5dXY0MDByYXdfdG9feXV2NDAwcChmcmFtZSwgZnJhbWUtPnJhd2RhdGEsCi0JCQkJCQkgICAgIGZyYW1lLT5kYXRhKTsKLQkJfQotfQotCi0vKiBQcm9jZXNzIHJhdyBZVVY0MjAgZGF0YSBpbnRvIHN0YW5kYXJkIFlVVjQyMFAgKi8KLXN0YXRpYyB2b2lkCi1vdjUxeF9wb3N0cHJvY2Vzc195dXY0MjAoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHN0cnVjdCBvdjUxMV9mcmFtZSAqZnJhbWUpCi17Ci0JLyogRGVpbnRlcmxhY2UgZnJhbWUsIGlmIG5lY2Vzc2FyeSAqLwotCWlmIChvdi0+c2Vuc29yID09IFNFTl9TQUE3MTExQSAmJiBmcmFtZS0+cmF3aGVpZ2h0ID49IDQ4MCkgewotCQlpZiAoZnJhbWUtPmNvbXByZXNzZWQpCi0JCQlkZWNvbXByZXNzKG92LCBmcmFtZSwgZnJhbWUtPnJhd2RhdGEsIGZyYW1lLT50ZW1wZGF0YSk7Ci0JCWVsc2UKLQkJCXl1djQyMHJhd190b195dXY0MjBwKGZyYW1lLCBmcmFtZS0+cmF3ZGF0YSwKLQkJCQkJICAgICBmcmFtZS0+dGVtcGRhdGEpOwotCi0JCWRlaW50ZXJsYWNlKGZyYW1lLCBSQVdGTVRfWVVWNDIwLCBmcmFtZS0+dGVtcGRhdGEsCi0JCQkgICAgZnJhbWUtPmRhdGEpOwotCX0gZWxzZSB7Ci0JCWlmIChmcmFtZS0+Y29tcHJlc3NlZCkKLQkJCWRlY29tcHJlc3Mob3YsIGZyYW1lLCBmcmFtZS0+cmF3ZGF0YSwgZnJhbWUtPmRhdGEpOwotCQllbHNlCi0JCQl5dXY0MjByYXdfdG9feXV2NDIwcChmcmFtZSwgZnJhbWUtPnJhd2RhdGEsCi0JCQkJCSAgICAgZnJhbWUtPmRhdGEpOwotCX0KLX0KLQotLyogUG9zdC1wcm9jZXNzZXMgdGhlIHNwZWNpZmllZCBmcmFtZS4gVGhpcyBjb25zaXN0cyBvZjoKLSAqIAkxLiBEZWNvbXByZXNzIGZyYW1lLCBpZiBuZWNlc3NhcnkKLSAqCTIuIERlaW50ZXJsYWNlIGZyYW1lIGFuZCBzY2FsZSB0byBwcm9wZXIgc2l6ZSwgaWYgbmVjZXNzYXJ5Ci0gKiAJMy4gQ29udmVydCBmcm9tIFlVViBwbGFuYXIgdG8gZGVzdGluYXRpb24gZm9ybWF0LCBpZiBuZWNlc3NhcnkKLSAqIAk0LiBGaXggdGhlIFJHQiBvZmZzZXQsIGlmIG5lY2Vzc2FyeQotICovCi1zdGF0aWMgdm9pZAotb3Y1MXhfcG9zdHByb2Nlc3Moc3RydWN0IHVzYl9vdjUxMSAqb3YsIHN0cnVjdCBvdjUxMV9mcmFtZSAqZnJhbWUpCi17Ci0JaWYgKGR1bXBwaXgpIHsKLQkJbWVtc2V0KGZyYW1lLT5kYXRhLCAwLAotCQkJTUFYX0RBVEFfU0laRShvdi0+bWF4d2lkdGgsIG92LT5tYXhoZWlnaHQpKTsKLQkJUERFQlVHKDQsICJEdW1waW5nICVkIGJ5dGVzIiwgZnJhbWUtPmJ5dGVzX3JlY3ZkKTsKLQkJbWVtY3B5KGZyYW1lLT5kYXRhLCBmcmFtZS0+cmF3ZGF0YSwgZnJhbWUtPmJ5dGVzX3JlY3ZkKTsKLQl9IGVsc2UgewotCQlzd2l0Y2ggKGZyYW1lLT5mb3JtYXQpIHsKLQkJY2FzZSBWSURFT19QQUxFVFRFX0dSRVk6Ci0JCQlvdjUxeF9wb3N0cHJvY2Vzc19ncmV5KG92LCBmcmFtZSk7Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT19QQUxFVFRFX1lVVjQyMDoKLQkJY2FzZSBWSURFT19QQUxFVFRFX1lVVjQyMFA6Ci0JCQlvdjUxeF9wb3N0cHJvY2Vzc195dXY0MjAob3YsIGZyYW1lKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZXJyKCJDYW5ub3QgY29udmVydCBkYXRhIHRvICVzIiwKLQkJCSAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCBmcmFtZS0+Zm9ybWF0KSk7Ci0JCX0KLQl9Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogT1Y1MXggZGF0YSB0cmFuc2ZlciwgSVJRIGhhbmRsZXIKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGlubGluZSB2b2lkCi1vdjUxMV9tb3ZlX2RhdGEoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIGNoYXIgKmluLCBpbnQgbikKLXsKLQlpbnQgbnVtLCBvZmZzZXQ7Ci0JaW50IHBudW0gPSBpbltvdi0+cGFja2V0X3NpemUgLSAxXTsJCS8qIEdldCBwYWNrZXQgbnVtYmVyICovCi0JaW50IG1heF9yYXcgPSBNQVhfUkFXX0RBVEFfU0laRShvdi0+bWF4d2lkdGgsIG92LT5tYXhoZWlnaHQpOwotCXN0cnVjdCBvdjUxMV9mcmFtZSAqZnJhbWUgPSAmb3YtPmZyYW1lW292LT5jdXJmcmFtZV07Ci0Jc3RydWN0IHRpbWV2YWwgKnRzOwotCi0JLyogU09GL0VPRiBwYWNrZXRzIGhhdmUgMXN0IHRvIDh0aCBieXRlcyB6ZXJvZWQgYW5kIHRoZSA5dGgKLQkgKiBieXRlIG5vbi16ZXJvLiBUaGUgRU9GIHBhY2tldCBoYXMgaW1hZ2Ugd2lkdGgvaGVpZ2h0IGluIHRoZQotCSAqIDEwdGggYW5kIDExdGggYnl0ZXMuIFRoZSA5dGggYnl0ZSBpcyBnaXZlbiBhcyBmb2xsb3dzOgotCSAqCi0JICogYml0IDc6IEVPRgotCSAqICAgICA2OiBjb21wcmVzc2lvbiBlbmFibGVkCi0JICogICAgIDU6IDQyMi80MjAvNDAwIG1vZGVzCi0JICogICAgIDQ6IDQyMi80MjAvNDAwIG1vZGVzCi0JICogICAgIDM6IDEKLQkgKiAgICAgMjogc25hcHNob3QgYnV0dG9uIG9uCi0JICogICAgIDE6IHNuYXBzaG90IGZyYW1lCi0JICogICAgIDA6IGV2ZW4vb2RkIGZpZWxkCi0JICovCi0KLQlpZiAocHJpbnRwaCkgewotCQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LAotCQkJICJwaCglM2QpOiAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeFxuIiwKLQkJCSBwbnVtLCBpblswXSwgaW5bMV0sIGluWzJdLCBpblszXSwgaW5bNF0sIGluWzVdLCBpbls2XSwKLQkJCSBpbls3XSwgaW5bOF0sIGluWzldLCBpblsxMF0sIGluWzExXSk7Ci0JfQotCi0JLyogQ2hlY2sgZm9yIFNPRi9FT0YgcGFja2V0ICovCi0JaWYgKChpblswXSB8IGluWzFdIHwgaW5bMl0gfCBpblszXSB8IGluWzRdIHwgaW5bNV0gfCBpbls2XSB8IGluWzddKSB8fAotCSAgICAofmluWzhdICYgMHgwOCkpCi0JCWdvdG8gY2hlY2tfbWlkZGxlOwotCi0JLyogRnJhbWUgZW5kICovCi0JaWYgKGluWzhdICYgMHg4MCkgewotCQl0cyA9IChzdHJ1Y3QgdGltZXZhbCAqKShmcmFtZS0+ZGF0YQotCQkgICAgICArIE1BWF9GUkFNRV9TSVpFKG92LT5tYXh3aWR0aCwgb3YtPm1heGhlaWdodCkpOwotCQlkb19nZXR0aW1lb2ZkYXkodHMpOwotCi0JCS8qIEdldCB0aGUgYWN0dWFsIGZyYW1lIHNpemUgZnJvbSB0aGUgRU9GIGhlYWRlciAqLwotCQlmcmFtZS0+cmF3d2lkdGggPSAoKGludCkoaW5bOV0pICsgMSkgKiA4OwotCQlmcmFtZS0+cmF3aGVpZ2h0ID0gKChpbnQpKGluWzEwXSkgKyAxKSAqIDg7Ci0KLQkJUERFQlVHKDQsICJGcmFtZSBlbmQsIGZyYW1lPSVkLCBwbnVtPSVkLCB3PSVkLCBoPSVkLCByZWN2ZD0lZCIsCi0JCQlvdi0+Y3VyZnJhbWUsIHBudW0sIGZyYW1lLT5yYXd3aWR0aCwgZnJhbWUtPnJhd2hlaWdodCwKLQkJCWZyYW1lLT5ieXRlc19yZWN2ZCk7Ci0KLQkJLyogVmFsaWRhdGUgdGhlIGhlYWRlciBkYXRhICovCi0JCVJFU1RSSUNUX1RPX1JBTkdFKGZyYW1lLT5yYXd3aWR0aCwgb3YtPm1pbndpZHRoLCBvdi0+bWF4d2lkdGgpOwotCQlSRVNUUklDVF9UT19SQU5HRShmcmFtZS0+cmF3aGVpZ2h0LCBvdi0+bWluaGVpZ2h0LAotCQkJCSAgb3YtPm1heGhlaWdodCk7Ci0KLQkJLyogRG9uJ3QgYWxsb3cgYnl0ZSBjb3VudCB0byBleGNlZWQgYnVmZmVyIHNpemUgKi8KLQkJUkVTVFJJQ1RfVE9fUkFOR0UoZnJhbWUtPmJ5dGVzX3JlY3ZkLCA4LCBtYXhfcmF3KTsKLQotCQlpZiAoZnJhbWUtPnNjYW5zdGF0ZSA9PSBTVEFURV9MSU5FUykgewotCQkJaW50IG5leHRmOwotCi0JCQlmcmFtZS0+Z3JhYnN0YXRlID0gRlJBTUVfRE9ORTsKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZnJhbWUtPndxKTsKLQotCQkJLyogSWYgbmV4dCBmcmFtZSBpcyByZWFkeSBvciBncmFiYmluZywKLQkJCSAqIHBvaW50IHRvIGl0ICovCi0JCQluZXh0ZiA9IChvdi0+Y3VyZnJhbWUgKyAxKSAlIE9WNTExX05VTUZSQU1FUzsKLQkJCWlmIChvdi0+ZnJhbWVbbmV4dGZdLmdyYWJzdGF0ZSA9PSBGUkFNRV9SRUFEWQotCQkJICAgIHx8IG92LT5mcmFtZVtuZXh0Zl0uZ3JhYnN0YXRlID09IEZSQU1FX0dSQUJCSU5HKSB7Ci0JCQkJb3YtPmN1cmZyYW1lID0gbmV4dGY7Ci0JCQkJb3YtPmZyYW1lW25leHRmXS5zY2Fuc3RhdGUgPSBTVEFURV9TQ0FOTklORzsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKGZyYW1lLT5ncmFic3RhdGUgPT0gRlJBTUVfRE9ORSkgewotCQkJCQlQREVCVUcoNCwgIioqIEZyYW1lIGRvbmUgKioiKTsKLQkJCQl9IGVsc2UgewotCQkJCQlQREVCVUcoNCwgIkZyYW1lIG5vdCByZWFkeT8gc3RhdGUgPSAlZCIsCi0JCQkJCQlvdi0+ZnJhbWVbbmV4dGZdLmdyYWJzdGF0ZSk7Ci0JCQkJfQotCi0JCQkJb3YtPmN1cmZyYW1lID0gLTE7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlQREVCVUcoNSwgIkZyYW1lIGRvbmUsIGJ1dCBub3Qgc2Nhbm5pbmciKTsKLQkJfQotCQkvKiBJbWFnZSBjb3JydXB0aW9uIGNhdXNlZCBieSBtaXNwbGFjZWQgZnJhbWUtPnNlZ21lbnQgPSAwCi0JCSAqIGZpeGVkIGJ5IGNhcmxvc2ZAY29uZWN0aXZhLmNvbS5icgotCQkgKi8KLQl9IGVsc2UgewotCQkvKiBGcmFtZSBzdGFydCAqLwotCQlQREVCVUcoNCwgIkZyYW1lIHN0YXJ0LCBmcmFtZW51bSA9ICVkIiwgb3YtPmN1cmZyYW1lKTsKLQotCQkvKiBDaGVjayB0byBzZWUgaWYgaXQncyBhIHNuYXBzaG90IGZyYW1lICovCi0JCS8qIEZJWE1FPz8gU2hvdWxkIHRoZSBzbmFwc2hvdCByZXNldCBnbyBoZXJlPyBQZXJmb3JtYW5jZT8gKi8KLQkJaWYgKGluWzhdICYgMHgwMikgewotCQkJZnJhbWUtPnNuYXBzaG90ID0gMTsKLQkJCVBERUJVRygzLCAic25hcHNob3QgZGV0ZWN0ZWQiKTsKLQkJfQotCi0JCWZyYW1lLT5zY2Fuc3RhdGUgPSBTVEFURV9MSU5FUzsKLQkJZnJhbWUtPmJ5dGVzX3JlY3ZkID0gMDsKLQkJZnJhbWUtPmNvbXByZXNzZWQgPSBpbls4XSAmIDB4NDA7Ci0JfQotCi1jaGVja19taWRkbGU6Ci0JLyogQXJlIHdlIGluIGEgZnJhbWU/ICovCi0JaWYgKGZyYW1lLT5zY2Fuc3RhdGUgIT0gU1RBVEVfTElORVMpIHsKLQkJUERFQlVHKDUsICJOb3QgaW4gYSBmcmFtZTsgcGFja2V0IHNraXBwZWQiKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIElmIGZyYW1lIHN0YXJ0LCBza2lwIGhlYWRlciAqLwotCWlmIChmcmFtZS0+Ynl0ZXNfcmVjdmQgPT0gMCkKLQkJb2Zmc2V0ID0gOTsKLQllbHNlCi0JCW9mZnNldCA9IDA7Ci0KLQludW0gPSBuIC0gb2Zmc2V0IC0gMTsKLQotCS8qIER1bXAgYWxsIGRhdGEgZXhhY3RseSBhcyByZWNlaXZlZCAqLwotCWlmIChkdW1wcGl4ID09IDIpIHsKLQkJZnJhbWUtPmJ5dGVzX3JlY3ZkICs9IG4gLSAxOwotCQlpZiAoZnJhbWUtPmJ5dGVzX3JlY3ZkIDw9IG1heF9yYXcpCi0JCQltZW1jcHkoZnJhbWUtPnJhd2RhdGEgKyBmcmFtZS0+Ynl0ZXNfcmVjdmQgLSAobiAtIDEpLAotCQkJCWluLCBuIC0gMSk7Ci0JCWVsc2UKLQkJCVBERUJVRygzLCAiUmF3IGRhdGEgYnVmZmVyIG92ZXJydW4hISAoJWQpIiwKLQkJCQlmcmFtZS0+Ynl0ZXNfcmVjdmQgLSBtYXhfcmF3KTsKLQl9IGVsc2UgaWYgKCFmcmFtZS0+Y29tcHJlc3NlZCAmJiAhcmVtb3ZlX3plcm9zKSB7Ci0JCWZyYW1lLT5ieXRlc19yZWN2ZCArPSBudW07Ci0JCWlmIChmcmFtZS0+Ynl0ZXNfcmVjdmQgPD0gbWF4X3JhdykKLQkJCW1lbWNweShmcmFtZS0+cmF3ZGF0YSArIGZyYW1lLT5ieXRlc19yZWN2ZCAtIG51bSwKLQkJCQlpbiArIG9mZnNldCwgbnVtKTsKLQkJZWxzZQotCQkJUERFQlVHKDMsICJSYXcgZGF0YSBidWZmZXIgb3ZlcnJ1biEhICglZCkiLAotCQkJCWZyYW1lLT5ieXRlc19yZWN2ZCAtIG1heF9yYXcpOwotCX0gZWxzZSB7IC8qIFJlbW92ZSBhbGwtemVybyBGSUZPIGxpbmVzIChhbGlnbmVkIDMyLWJ5dGUgYmxvY2tzKSAqLwotCQlpbnQgYiwgcmVhZCA9IDAsIGFsbHplcm8sIGNvcGllZCA9IDA7Ci0JCWlmIChvZmZzZXQpIHsKLQkJCWZyYW1lLT5ieXRlc19yZWN2ZCArPSAzMiAtIG9mZnNldDsJLy8gQnl0ZXMgb3V0Ci0JCQltZW1jcHkoZnJhbWUtPnJhd2RhdGEsCWluICsgb2Zmc2V0LCAzMiAtIG9mZnNldCk7Ci0JCQlyZWFkICs9IDMyOwotCQl9Ci0KLQkJd2hpbGUgKHJlYWQgPCBuIC0gMSkgewotCQkJYWxsemVybyA9IDE7Ci0JCQlmb3IgKGIgPSAwOyBiIDwgMzI7IGIrKykgewotCQkJCWlmIChpbltyZWFkICsgYl0pIHsKLQkJCQkJYWxsemVybyA9IDA7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKGFsbHplcm8pIHsKLQkJCQkvKiBEb24ndCBjb3B5IGl0ICovCi0JCQl9IGVsc2UgewotCQkJCWlmIChmcmFtZS0+Ynl0ZXNfcmVjdmQgKyBjb3BpZWQgKyAzMiA8PSBtYXhfcmF3KQotCQkJCXsKLQkJCQkJbWVtY3B5KGZyYW1lLT5yYXdkYXRhCi0JCQkJCQkrIGZyYW1lLT5ieXRlc19yZWN2ZCArIGNvcGllZCwKLQkJCQkJCWluICsgcmVhZCwgMzIpOwotCQkJCQljb3BpZWQgKz0gMzI7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJUERFQlVHKDMsICJSYXcgZGF0YSBidWZmZXIgb3ZlcnJ1biEhIik7Ci0JCQkJfQotCQkJfQotCQkJcmVhZCArPSAzMjsKLQkJfQotCi0JCWZyYW1lLT5ieXRlc19yZWN2ZCArPSBjb3BpZWQ7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLW92NTE4X21vdmVfZGF0YShzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgY2hhciAqaW4sIGludCBuKQotewotCWludCBtYXhfcmF3ID0gTUFYX1JBV19EQVRBX1NJWkUob3YtPm1heHdpZHRoLCBvdi0+bWF4aGVpZ2h0KTsKLQlzdHJ1Y3Qgb3Y1MTFfZnJhbWUgKmZyYW1lID0gJm92LT5mcmFtZVtvdi0+Y3VyZnJhbWVdOwotCXN0cnVjdCB0aW1ldmFsICp0czsKLQotCS8qIERvbid0IGNvcHkgdGhlIHBhY2tldCBudW1iZXIgYnl0ZSAqLwotCWlmIChvdi0+cGFja2V0X251bWJlcmluZykKLQkJLS1uOwotCi0JLyogQSBmYWxzZSBwb3NpdGl2ZSBoZXJlIGlzIGxpa2VseSwgdW50aWwgT1ZUIGdpdmVzIG1lCi0JICogdGhlIGRlZmluaXRpdmUgU09GL0VPRiBmb3JtYXQgKi8KLQlpZiAoKCEoaW5bMF0gfCBpblsxXSB8IGluWzJdIHwgaW5bM10gfCBpbls1XSkpICYmIGluWzZdKSB7Ci0JCWlmIChwcmludHBoKSB7Ci0JCQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LAotCQkJCSAicGg6ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnhcbiIsCi0JCQkJIGluWzBdLCBpblsxXSwgaW5bMl0sIGluWzNdLCBpbls0XSwgaW5bNV0sCi0JCQkJIGluWzZdLCBpbls3XSk7Ci0JCX0KLQotCQlpZiAoZnJhbWUtPnNjYW5zdGF0ZSA9PSBTVEFURV9MSU5FUykgewotCQkJUERFQlVHKDQsICJEZXRlY3RlZCBmcmFtZSBlbmQvc3RhcnQiKTsKLQkJCWdvdG8gZW9mOwotCQl9IGVsc2UgeyAvL3NjYW5zdGF0ZSA9PSBTVEFURV9TQ0FOTklORwotCQkJLyogRnJhbWUgc3RhcnQgKi8KLQkJCVBERUJVRyg0LCAiRnJhbWUgc3RhcnQsIGZyYW1lbnVtID0gJWQiLCBvdi0+Y3VyZnJhbWUpOwotCQkJZ290byBzb2Y7Ci0JCX0KLQl9IGVsc2UgewotCQlnb3RvIGNoZWNrX21pZGRsZTsKLQl9Ci0KLWVvZjoKLQl0cyA9IChzdHJ1Y3QgdGltZXZhbCAqKShmcmFtZS0+ZGF0YQotCSAgICAgICsgTUFYX0ZSQU1FX1NJWkUob3YtPm1heHdpZHRoLCBvdi0+bWF4aGVpZ2h0KSk7Ci0JZG9fZ2V0dGltZW9mZGF5KHRzKTsKLQotCVBERUJVRyg0LCAiRnJhbWUgZW5kLCBjdXJmcmFtZSA9ICVkLCBodz0lZCwgdnc9JWQsIHJlY3ZkPSVkIiwKLQkJb3YtPmN1cmZyYW1lLAotCQkoaW50KShpbls5XSksIChpbnQpKGluWzEwXSksIGZyYW1lLT5ieXRlc19yZWN2ZCk7Ci0KLQkvLyBGSVhNRTogU2luY2Ugd2UgZG9uJ3Qga25vdyB0aGUgaGVhZGVyIGZvcm1hdHMgeWV0LAotCS8vIHRoZXJlIGlzIG5vIHdheSB0byBrbm93IHdoYXQgdGhlIGFjdHVhbCBpbWFnZSBzaXplIGlzCi0JZnJhbWUtPnJhd3dpZHRoID0gZnJhbWUtPndpZHRoOwotCWZyYW1lLT5yYXdoZWlnaHQgPSBmcmFtZS0+aGVpZ2h0OwotCi0JLyogVmFsaWRhdGUgdGhlIGhlYWRlciBkYXRhICovCi0JUkVTVFJJQ1RfVE9fUkFOR0UoZnJhbWUtPnJhd3dpZHRoLCBvdi0+bWlud2lkdGgsIG92LT5tYXh3aWR0aCk7Ci0JUkVTVFJJQ1RfVE9fUkFOR0UoZnJhbWUtPnJhd2hlaWdodCwgb3YtPm1pbmhlaWdodCwgb3YtPm1heGhlaWdodCk7Ci0KLQkvKiBEb24ndCBhbGxvdyBieXRlIGNvdW50IHRvIGV4Y2VlZCBidWZmZXIgc2l6ZSAqLwotCVJFU1RSSUNUX1RPX1JBTkdFKGZyYW1lLT5ieXRlc19yZWN2ZCwgOCwgbWF4X3Jhdyk7Ci0KLQlpZiAoZnJhbWUtPnNjYW5zdGF0ZSA9PSBTVEFURV9MSU5FUykgewotCQlpbnQgbmV4dGY7Ci0KLQkJZnJhbWUtPmdyYWJzdGF0ZSA9IEZSQU1FX0RPTkU7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZnJhbWUtPndxKTsKLQotCQkvKiBJZiBuZXh0IGZyYW1lIGlzIHJlYWR5IG9yIGdyYWJiaW5nLAotCQkgKiBwb2ludCB0byBpdCAqLwotCQluZXh0ZiA9IChvdi0+Y3VyZnJhbWUgKyAxKSAlIE9WNTExX05VTUZSQU1FUzsKLQkJaWYgKG92LT5mcmFtZVtuZXh0Zl0uZ3JhYnN0YXRlID09IEZSQU1FX1JFQURZCi0JCSAgICB8fCBvdi0+ZnJhbWVbbmV4dGZdLmdyYWJzdGF0ZSA9PSBGUkFNRV9HUkFCQklORykgewotCQkJb3YtPmN1cmZyYW1lID0gbmV4dGY7Ci0JCQlvdi0+ZnJhbWVbbmV4dGZdLnNjYW5zdGF0ZSA9IFNUQVRFX1NDQU5OSU5HOwotCQkJZnJhbWUgPSAmb3YtPmZyYW1lW25leHRmXTsKLQkJfSBlbHNlIHsKLQkJCWlmIChmcmFtZS0+Z3JhYnN0YXRlID09IEZSQU1FX0RPTkUpIHsKLQkJCQlQREVCVUcoNCwgIioqIEZyYW1lIGRvbmUgKioiKTsKLQkJCX0gZWxzZSB7Ci0JCQkJUERFQlVHKDQsICJGcmFtZSBub3QgcmVhZHk/IHN0YXRlID0gJWQiLAotCQkJCSAgICAgICBvdi0+ZnJhbWVbbmV4dGZdLmdyYWJzdGF0ZSk7Ci0JCQl9Ci0KLQkJCW92LT5jdXJmcmFtZSA9IC0xOwotCQkJUERFQlVHKDQsICJTT0YgZHJvcHBlZCAobm8gYWN0aXZlIGZyYW1lKSIpOwotCQkJcmV0dXJuOyAgLyogTm93aGVyZSB0byBzdG9yZSB0aGlzIGZyYW1lICovCi0JCX0KLQl9Ci1zb2Y6Ci0JUERFQlVHKDQsICJTdGFydGluZyBjYXB0dXJlIG9uIGZyYW1lICVkIiwgZnJhbWUtPmZyYW1lbnVtKTsKLQotLy8gU25hcHNob3Qgbm90IHJldmVyc2UtZW5naW5lZXJlZCB5ZXQuCi0jaWYgMAotCS8qIENoZWNrIHRvIHNlZSBpZiBpdCdzIGEgc25hcHNob3QgZnJhbWUgKi8KLQkvKiBGSVhNRT8/IFNob3VsZCB0aGUgc25hcHNob3QgcmVzZXQgZ28gaGVyZT8gUGVyZm9ybWFuY2U/ICovCi0JaWYgKGluWzhdICYgMHgwMikgewotCQlmcmFtZS0+c25hcHNob3QgPSAxOwotCQlQREVCVUcoMywgInNuYXBzaG90IGRldGVjdGVkIik7Ci0JfQotI2VuZGlmCi0JZnJhbWUtPnNjYW5zdGF0ZSA9IFNUQVRFX0xJTkVTOwotCWZyYW1lLT5ieXRlc19yZWN2ZCA9IDA7Ci0JZnJhbWUtPmNvbXByZXNzZWQgPSAxOwotCi1jaGVja19taWRkbGU6Ci0JLyogQXJlIHdlIGluIGEgZnJhbWU/ICovCi0JaWYgKGZyYW1lLT5zY2Fuc3RhdGUgIT0gU1RBVEVfTElORVMpIHsKLQkJUERFQlVHKDQsICJzY2Fuc3RhdGU6IG5vIFNPRiB5ZXQiKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIER1bXAgYWxsIGRhdGEgZXhhY3RseSBhcyByZWNlaXZlZCAqLwotCWlmIChkdW1wcGl4ID09IDIpIHsKLQkJZnJhbWUtPmJ5dGVzX3JlY3ZkICs9IG47Ci0JCWlmIChmcmFtZS0+Ynl0ZXNfcmVjdmQgPD0gbWF4X3JhdykKLQkJCW1lbWNweShmcmFtZS0+cmF3ZGF0YSArIGZyYW1lLT5ieXRlc19yZWN2ZCAtIG4sIGluLCBuKTsKLQkJZWxzZQotCQkJUERFQlVHKDMsICJSYXcgZGF0YSBidWZmZXIgb3ZlcnJ1biEhICglZCkiLAotCQkJCWZyYW1lLT5ieXRlc19yZWN2ZCAtIG1heF9yYXcpOwotCX0gZWxzZSB7Ci0JCS8qIEFsbCBpbmNvbWluZyBkYXRhIGFyZSBkaXZpZGVkIGludG8gOC1ieXRlIHNlZ21lbnRzLiBJZiB0aGUKLQkJICogc2VnbWVudCBjb250YWlucyBhbGwgemVybyBieXRlcywgaXQgbXVzdCBiZSBza2lwcGVkLiBUaGVzZQotCQkgKiB6ZXJvLXNlZ21lbnRzIGFsbG93IHRoZSBPVjUxOCB0byBtYWluYWluIGEgY29uc3RhbnQgZGF0YSByYXRlCi0JCSAqIHJlZ2FyZGxlc3Mgb2YgdGhlIGVmZmVjdGl2ZW5lc3Mgb2YgdGhlIGNvbXByZXNzaW9uLiBTZWdtZW50cwotCQkgKiBhcmUgYWxpZ25lZCByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggaXNvY2hyb25vdXMKLQkJICogcGFja2V0LiBUaGUgZmlyc3Qgc2VnbWVudCBpbiBlYWNoIGltYWdlIGlzIGEgaGVhZGVyICh0aGUKLQkJICogZGVjb21wcmVzc29yIHNraXBzIGl0IGxhdGVyKS4KLQkJICovCi0KLQkJaW50IGIsIHJlYWQgPSAwLCBhbGx6ZXJvLCBjb3BpZWQgPSAwOwotCi0JCXdoaWxlIChyZWFkIDwgbikgewotCQkJYWxsemVybyA9IDE7Ci0JCQlmb3IgKGIgPSAwOyBiIDwgODsgYisrKSB7Ci0JCQkJaWYgKGluW3JlYWQgKyBiXSkgewotCQkJCQlhbGx6ZXJvID0gMDsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoYWxsemVybykgewotCQkJLyogRG9uJ3QgY29weSBpdCAqLwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoZnJhbWUtPmJ5dGVzX3JlY3ZkICsgY29waWVkICsgOCA8PSBtYXhfcmF3KQotCQkJCXsKLQkJCQkJbWVtY3B5KGZyYW1lLT5yYXdkYXRhCi0JCQkJCQkrIGZyYW1lLT5ieXRlc19yZWN2ZCArIGNvcGllZCwKLQkJCQkJCWluICsgcmVhZCwgOCk7Ci0JCQkJCWNvcGllZCArPSA4OwotCQkJCX0gZWxzZSB7Ci0JCQkJCVBERUJVRygzLCAiUmF3IGRhdGEgYnVmZmVyIG92ZXJydW4hISIpOwotCQkJCX0KLQkJCX0KLQkJCXJlYWQgKz0gODsKLQkJfQotCQlmcmFtZS0+Ynl0ZXNfcmVjdmQgKz0gY29waWVkOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLW92NTF4X2lzb2NfaXJxKHN0cnVjdCB1cmIgKnVyYikKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgdXNiX292NTExICpvdjsKLQlzdHJ1Y3Qgb3Y1MTFfc2J1ZiAqc2J1ZjsKLQotCWlmICghdXJiLT5jb250ZXh0KSB7Ci0JCVBERUJVRyg0LCAibm8gY29udGV4dCIpOwotCQlyZXR1cm47Ci0JfQotCi0Jc2J1ZiA9IHVyYi0+Y29udGV4dDsKLQlvdiA9IHNidWYtPm92OwotCi0JaWYgKCFvdiB8fCAhb3YtPmRldiB8fCAhb3YtPnVzZXIpIHsKLQkJUERFQlVHKDQsICJubyBkZXZpY2UsIG9yIG5vdCBvcGVuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoIW92LT5zdHJlYW1pbmcpIHsKLQkJUERFQlVHKDQsICJobW1tLi4uIG5vdCBzdHJlYW1pbmcsIGJ1dCBnb3QgaW50ZXJydXB0Iik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCB8fCB1cmItPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCkgewotCQlQREVCVUcoNCwgIlVSQiB1bmxpbmtlZCIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHVyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUyAmJiB1cmItPnN0YXR1cyAhPSAwKSB7Ci0JCWVycigiRVJST1I6IHVyYi0+c3RhdHVzPSVkOiAlcyIsIHVyYi0+c3RhdHVzLAotCQkgICAgc3ltYm9saWModXJiX2Vycmxpc3QsIHVyYi0+c3RhdHVzKSk7Ci0JfQotCi0JLyogQ29weSB0aGUgZGF0YSByZWNlaXZlZCBpbnRvIG91ciBmcmFtZSBidWZmZXIgKi8KLQlQREVCVUcoNSwgInNidWZbJWRdOiBNb3ZpbmcgJWQgcGFja2V0cyIsIHNidWYtPm4sCi0JICAgICAgIHVyYi0+bnVtYmVyX29mX3BhY2tldHMpOwotCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKLQkJLyogV2FybmluZzogRG9uJ3QgY2FsbCAqX21vdmVfZGF0YSgpIGlmIG5vIGZyYW1lIGFjdGl2ZSEgKi8KLQkJaWYgKG92LT5jdXJmcmFtZSA+PSAwKSB7Ci0JCQlpbnQgbiA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aDsKLQkJCWludCBzdCA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzOwotCQkJdW5zaWduZWQgY2hhciAqY2RhdGE7Ci0KLQkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA9IDA7Ci0JCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyA9IDA7Ci0KLQkJCWNkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXIKLQkJCQkrIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0OwotCi0JCQlpZiAoIW4pIHsKLQkJCQlQREVCVUcoNCwgIlplcm8tbGVuZ3RoIHBhY2tldCIpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlpZiAoc3QpCi0JCQkJUERFQlVHKDIsICJkYXRhIGVycm9yOiBbJWRdIGxlbj0lZCwgc3RhdHVzPSVkIiwKLQkJCQkgICAgICAgaSwgbiwgc3QpOwotCi0JCQlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTEpCi0JCQkJb3Y1MTFfbW92ZV9kYXRhKG92LCBjZGF0YSwgbik7Ci0JCQllbHNlIGlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkKLQkJCQlvdjUxOF9tb3ZlX2RhdGEob3YsIGNkYXRhLCBuKTsKLQkJCWVsc2UKLQkJCQllcnIoIlVua25vd24gYnJpZGdlIGRldmljZSAoJWQpIiwgb3YtPmJyaWRnZSk7Ci0KLQkJfSBlbHNlIGlmICh3YWl0cXVldWVfYWN0aXZlKCZvdi0+d3EpKSB7Ci0JCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJm92LT53cSk7Ci0JCX0KLQl9Ci0KLQkvKiBSZXN1Ym1pdCB0aGlzIFVSQiAqLwotCXVyYi0+ZGV2ID0gb3YtPmRldjsKLQlpZiAoKGkgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSAhPSAwKQotCQllcnIoInVzYl9zdWJtaXRfdXJiKCkgcmV0ICVkIiwgaSk7Ci0KLQlyZXR1cm47Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogU3RyZWFtIGluaXRpYWxpemF0aW9uIGFuZCB0ZXJtaW5hdGlvbgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbnQKLW92NTF4X2luaXRfaXNvYyhzdHJ1Y3QgdXNiX292NTExICpvdikKLXsKLQlzdHJ1Y3QgdXJiICp1cmI7Ci0JaW50IGZ4LCBlcnIsIG4sIGksIHNpemU7Ci0KLQlQREVCVUcoMywgIioqKiBJbml0aWFsaXppbmcgY2FwdHVyZSAqKioiKTsKLQotCW92LT5jdXJmcmFtZSA9IC0xOwotCi0JaWYgKG92LT5icmlkZ2UgPT0gQlJHX09WNTExKSB7Ci0JCWlmIChjYW1zID09IDEpCi0JCQlzaXplID0gOTkzOwotCQllbHNlIGlmIChjYW1zID09IDIpCi0JCQlzaXplID0gNTEzOwotCQllbHNlIGlmIChjYW1zID09IDMgfHwgY2FtcyA9PSA0KQotCQkJc2l6ZSA9IDI1NzsKLQkJZWxzZSB7Ci0JCQllcnIoIlwiY2Ftc1wiIHBhcmFtZXRlciB0b28gaGlnaCEiKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCX0gZWxzZSBpZiAob3YtPmJyaWRnZSA9PSBCUkdfT1Y1MTFQTFVTKSB7Ci0JCWlmIChjYW1zID09IDEpCi0JCQlzaXplID0gOTYxOwotCQllbHNlIGlmIChjYW1zID09IDIpCi0JCQlzaXplID0gNTEzOwotCQllbHNlIGlmIChjYW1zID09IDMgfHwgY2FtcyA9PSA0KQotCQkJc2l6ZSA9IDI1NzsKLQkJZWxzZSBpZiAoY2FtcyA+PSA1ICYmIGNhbXMgPD0gOCkKLQkJCXNpemUgPSAxMjk7Ci0JCWVsc2UgaWYgKGNhbXMgPj0gOSAmJiBjYW1zIDw9IDMxKQotCQkJc2l6ZSA9IDMzOwotCQllbHNlIHsKLQkJCWVycigiXCJjYW1zXCIgcGFyYW1ldGVyIHRvbyBoaWdoISIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfSBlbHNlIGlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkgewotCQlpZiAoY2FtcyA9PSAxKQotCQkJc2l6ZSA9IDg5NjsKLQkJZWxzZSBpZiAoY2FtcyA9PSAyKQotCQkJc2l6ZSA9IDUxMjsKLQkJZWxzZSBpZiAoY2FtcyA9PSAzIHx8IGNhbXMgPT0gNCkKLQkJCXNpemUgPSAyNTY7Ci0JCWVsc2UgaWYgKGNhbXMgPj0gNSAmJiBjYW1zIDw9IDgpCi0JCQlzaXplID0gMTI4OwotCQllbHNlIHsKLQkJCWVycigiXCJjYW1zXCIgcGFyYW1ldGVyIHRvbyBoaWdoISIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfSBlbHNlIHsKLQkJZXJyKCJpbnZhbGlkIGJyaWRnZSB0eXBlIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQkvLyBGSVhNRTogT1Y1MTggaXMgaGFyZGNvZGVkIHRvIDE1IEZQUyAoYWx0ZXJuYXRlIDUpIGZvciBub3cKLQlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpIHsKLQkJaWYgKHBhY2tldHNpemUgPT0gLTEpIHsKLQkJCW92NTE4X3NldF9wYWNrZXRfc2l6ZShvdiwgNjQwKTsKLQkJfSBlbHNlIHsKLQkJCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsICJGb3JjaW5nIHBhY2tldCBzaXplIHRvICVkXG4iLAotCQkJCSBwYWNrZXRzaXplKTsKLQkJCW92NTE4X3NldF9wYWNrZXRfc2l6ZShvdiwgcGFja2V0c2l6ZSk7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAocGFja2V0c2l6ZSA9PSAtMSkgewotCQkJb3Y1MTFfc2V0X3BhY2tldF9zaXplKG92LCBzaXplKTsKLQkJfSBlbHNlIHsKLQkJCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsICJGb3JjaW5nIHBhY2tldCBzaXplIHRvICVkXG4iLAotCQkJCSBwYWNrZXRzaXplKTsKLQkJCW92NTExX3NldF9wYWNrZXRfc2l6ZShvdiwgcGFja2V0c2l6ZSk7Ci0JCX0KLQl9Ci0KLQlmb3IgKG4gPSAwOyBuIDwgT1Y1MTFfTlVNU0JVRjsgbisrKSB7Ci0JCXVyYiA9IHVzYl9hbGxvY191cmIoRlJBTUVTX1BFUl9ERVNDLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF1cmIpIHsKLQkJCWVycigiaW5pdCBpc29jOiB1c2JfYWxsb2NfdXJiIHJldC4gTlVMTCIpOwotCQkJZm9yIChpID0gMDsgaSA8IG47IGkrKykKLQkJCQl1c2JfZnJlZV91cmIob3YtPnNidWZbaV0udXJiKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCW92LT5zYnVmW25dLnVyYiA9IHVyYjsKLQkJdXJiLT5kZXYgPSBvdi0+ZGV2OwotCQl1cmItPmNvbnRleHQgPSAmb3YtPnNidWZbbl07Ci0JCXVyYi0+cGlwZSA9IHVzYl9yY3Zpc29jcGlwZShvdi0+ZGV2LCBPVjUxMV9FTkRQT0lOVF9BRERSRVNTKTsKLQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKLQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBvdi0+c2J1ZltuXS5kYXRhOwotCQl1cmItPmNvbXBsZXRlID0gb3Y1MXhfaXNvY19pcnE7Ci0JCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBGUkFNRVNfUEVSX0RFU0M7Ci0JCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IG92LT5wYWNrZXRfc2l6ZSAqIEZSQU1FU19QRVJfREVTQzsKLQkJdXJiLT5pbnRlcnZhbCA9IDE7Ci0JCWZvciAoZnggPSAwOyBmeCA8IEZSQU1FU19QRVJfREVTQzsgZngrKykgewotCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tmeF0ub2Zmc2V0ID0gb3YtPnBhY2tldF9zaXplICogZng7Ci0JCQl1cmItPmlzb19mcmFtZV9kZXNjW2Z4XS5sZW5ndGggPSBvdi0+cGFja2V0X3NpemU7Ci0JCX0KLQl9Ci0KLQlvdi0+c3RyZWFtaW5nID0gMTsKLQotCWZvciAobiA9IDA7IG4gPCBPVjUxMV9OVU1TQlVGOyBuKyspIHsKLQkJb3YtPnNidWZbbl0udXJiLT5kZXYgPSBvdi0+ZGV2OwotCQllcnIgPSB1c2Jfc3VibWl0X3VyYihvdi0+c2J1ZltuXS51cmIsIEdGUF9LRVJORUwpOwotCQlpZiAoZXJyKSB7Ci0JCQllcnIoImluaXQgaXNvYzogdXNiX3N1Ym1pdF91cmIoJWQpIHJldCAlZCIsIG4sIGVycik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1vdjUxeF91bmxpbmtfaXNvYyhzdHJ1Y3QgdXNiX292NTExICpvdikKLXsKLQlpbnQgbjsKLQotCS8qIFVuc2NoZWR1bGUgYWxsIG9mIHRoZSBpc28gdGQncyAqLwotCWZvciAobiA9IE9WNTExX05VTVNCVUYgLSAxOyBuID49IDA7IG4tLSkgewotCQlpZiAob3YtPnNidWZbbl0udXJiKSB7Ci0JCQl1c2Jfa2lsbF91cmIob3YtPnNidWZbbl0udXJiKTsKLQkJCXVzYl9mcmVlX3VyYihvdi0+c2J1ZltuXS51cmIpOwotCQkJb3YtPnNidWZbbl0udXJiID0gTlVMTDsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQKLW92NTF4X3N0b3BfaXNvYyhzdHJ1Y3QgdXNiX292NTExICpvdikKLXsKLQlpZiAoIW92LT5zdHJlYW1pbmcgfHwgIW92LT5kZXYpCi0JCXJldHVybjsKLQotCVBERUJVRygzLCAiKioqIFN0b3BwaW5nIGNhcHR1cmUgKioqIik7Ci0KLQlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpCi0JCW92NTE4X3NldF9wYWNrZXRfc2l6ZShvdiwgMCk7Ci0JZWxzZQotCQlvdjUxMV9zZXRfcGFja2V0X3NpemUob3YsIDApOwotCi0Jb3YtPnN0cmVhbWluZyA9IDA7Ci0KLQlvdjUxeF91bmxpbmtfaXNvYyhvdik7Ci19Ci0KLXN0YXRpYyBpbnQKLW92NTF4X25ld19mcmFtZShzdHJ1Y3QgdXNiX292NTExICpvdiwgaW50IGZyYW1lbnVtKQotewotCXN0cnVjdCBvdjUxMV9mcmFtZSAqZnJhbWU7Ci0JaW50IG5ld251bTsKLQotCVBERUJVRyg0LCAib3YtPmN1cmZyYW1lID0gJWQsIGZyYW1lbnVtID0gJWQiLCBvdi0+Y3VyZnJhbWUsIGZyYW1lbnVtKTsKLQotCWlmICghb3YtPmRldikKLQkJcmV0dXJuIC0xOwotCi0JLyogSWYgd2UncmUgbm90IGdyYWJiaW5nIGEgZnJhbWUgcmlnaHQgbm93IGFuZCB0aGUgb3RoZXIgZnJhbWUgaXMgKi8KLQkvKiByZWFkeSB0byBiZSBncmFiYmVkIGludG8sIHRoZW4gdXNlIGl0IGluc3RlYWQgKi8KLQlpZiAob3YtPmN1cmZyYW1lID09IC0xKSB7Ci0JCW5ld251bSA9IChmcmFtZW51bSAtIDEgKyBPVjUxMV9OVU1GUkFNRVMpICUgT1Y1MTFfTlVNRlJBTUVTOwotCQlpZiAob3YtPmZyYW1lW25ld251bV0uZ3JhYnN0YXRlID09IEZSQU1FX1JFQURZKQotCQkJZnJhbWVudW0gPSBuZXdudW07Ci0JfSBlbHNlCi0JCXJldHVybiAwOwotCi0JZnJhbWUgPSAmb3YtPmZyYW1lW2ZyYW1lbnVtXTsKLQotCVBERUJVRyg0LCAiZnJhbWVudW0gPSAlZCwgd2lkdGggPSAlZCwgaGVpZ2h0ID0gJWQiLCBmcmFtZW51bSwKLQkgICAgICAgZnJhbWUtPndpZHRoLCBmcmFtZS0+aGVpZ2h0KTsKLQotCWZyYW1lLT5ncmFic3RhdGUgPSBGUkFNRV9HUkFCQklORzsKLQlmcmFtZS0+c2NhbnN0YXRlID0gU1RBVEVfU0NBTk5JTkc7Ci0JZnJhbWUtPnNuYXBzaG90ID0gMDsKLQotCW92LT5jdXJmcmFtZSA9IGZyYW1lbnVtOwotCi0JLyogTWFrZSBzdXJlIGl0J3Mgbm90IHRvbyBiaWcgKi8KLQlpZiAoZnJhbWUtPndpZHRoID4gb3YtPm1heHdpZHRoKQotCQlmcmFtZS0+d2lkdGggPSBvdi0+bWF4d2lkdGg7Ci0KLQlmcmFtZS0+d2lkdGggJj0gfjdMOwkJLyogTXVsdGlwbGUgb2YgOCAqLwotCi0JaWYgKGZyYW1lLT5oZWlnaHQgPiBvdi0+bWF4aGVpZ2h0KQotCQlmcmFtZS0+aGVpZ2h0ID0gb3YtPm1heGhlaWdodDsKLQotCWZyYW1lLT5oZWlnaHQgJj0gfjNMOwkJLyogTXVsdGlwbGUgb2YgNCAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogQnVmZmVyIG1hbmFnZW1lbnQKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogLSBZb3UgbXVzdCBhY3F1aXJlIGJ1Zl9sb2NrIGJlZm9yZSBlbnRlcmluZyB0aGlzIGZ1bmN0aW9uLgotICogLSBCZWNhdXNlIHRoaXMgY29kZSB3aWxsIGZyZWUgYW55IG5vbi1udWxsIHBvaW50ZXIsIHlvdSBtdXN0IGJlIHN1cmUgdG8gbnVsbAotICogICB0aGVtIGlmIHlvdSBleHBsaWNpdGx5IGZyZWUgdGhlbSBzb21ld2hlcmUgZWxzZSEKLSAqLwotc3RhdGljIHZvaWQKLW92NTF4X2RvX2RlYWxsb2Moc3RydWN0IHVzYl9vdjUxMSAqb3YpCi17Ci0JaW50IGk7Ci0JUERFQlVHKDQsICJlbnRlcmVkIik7Ci0KLQlpZiAob3YtPmZidWYpIHsKLQkJcnZmcmVlKG92LT5mYnVmLCBPVjUxMV9OVU1GUkFNRVMKLQkJICAgICAgICogTUFYX0RBVEFfU0laRShvdi0+bWF4d2lkdGgsIG92LT5tYXhoZWlnaHQpKTsKLQkJb3YtPmZidWYgPSBOVUxMOwotCX0KLQotCXZmcmVlKG92LT5yYXdmYnVmKTsKLQlvdi0+cmF3ZmJ1ZiA9IE5VTEw7Ci0KLQl2ZnJlZShvdi0+dGVtcGZidWYpOwotCW92LT50ZW1wZmJ1ZiA9IE5VTEw7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgT1Y1MTFfTlVNU0JVRjsgaSsrKSB7Ci0JCWtmcmVlKG92LT5zYnVmW2ldLmRhdGEpOwotCQlvdi0+c2J1ZltpXS5kYXRhID0gTlVMTDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgT1Y1MTFfTlVNRlJBTUVTOyBpKyspIHsKLQkJb3YtPmZyYW1lW2ldLmRhdGEgPSBOVUxMOwotCQlvdi0+ZnJhbWVbaV0ucmF3ZGF0YSA9IE5VTEw7Ci0JCW92LT5mcmFtZVtpXS50ZW1wZGF0YSA9IE5VTEw7Ci0JCWlmIChvdi0+ZnJhbWVbaV0uY29tcGJ1ZikgewotCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBvdi0+ZnJhbWVbaV0uY29tcGJ1Zik7Ci0JCQlvdi0+ZnJhbWVbaV0uY29tcGJ1ZiA9IE5VTEw7Ci0JCX0KLQl9Ci0KLQlQREVCVUcoNCwgImJ1ZmZlciBtZW1vcnkgZGVhbGxvY2F0ZWQiKTsKLQlvdi0+YnVmX3N0YXRlID0gQlVGX05PVF9BTExPQ0FURUQ7Ci0JUERFQlVHKDQsICJsZWF2aW5nIik7Ci19Ci0KLXN0YXRpYyBpbnQKLW92NTF4X2FsbG9jKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQotewotCWludCBpOwotCWNvbnN0IGludCB3ID0gb3YtPm1heHdpZHRoOwotCWNvbnN0IGludCBoID0gb3YtPm1heGhlaWdodDsKLQljb25zdCBpbnQgZGF0YV9idWZzaXplID0gT1Y1MTFfTlVNRlJBTUVTICogTUFYX0RBVEFfU0laRSh3LCBoKTsKLQljb25zdCBpbnQgcmF3X2J1ZnNpemUgPSBPVjUxMV9OVU1GUkFNRVMgKiBNQVhfUkFXX0RBVEFfU0laRSh3LCBoKTsKLQotCVBERUJVRyg0LCAiZW50ZXJlZCIpOwotCW11dGV4X2xvY2soJm92LT5idWZfbG9jayk7Ci0KLQlpZiAob3YtPmJ1Zl9zdGF0ZSA9PSBCVUZfQUxMT0NBVEVEKQotCQlnb3RvIG91dDsKLQotCW92LT5mYnVmID0gcnZtYWxsb2MoZGF0YV9idWZzaXplKTsKLQlpZiAoIW92LT5mYnVmKQotCQlnb3RvIGVycm9yOwotCi0Jb3YtPnJhd2ZidWYgPSB2bWFsbG9jKHJhd19idWZzaXplKTsKLQlpZiAoIW92LT5yYXdmYnVmKQotCQlnb3RvIGVycm9yOwotCi0JbWVtc2V0KG92LT5yYXdmYnVmLCAwLCByYXdfYnVmc2l6ZSk7Ci0KLQlvdi0+dGVtcGZidWYgPSB2bWFsbG9jKHJhd19idWZzaXplKTsKLQlpZiAoIW92LT50ZW1wZmJ1ZikKLQkJZ290byBlcnJvcjsKLQotCW1lbXNldChvdi0+dGVtcGZidWYsIDAsIHJhd19idWZzaXplKTsKLQotCWZvciAoaSA9IDA7IGkgPCBPVjUxMV9OVU1TQlVGOyBpKyspIHsKLQkJb3YtPnNidWZbaV0uZGF0YSA9IGttYWxsb2MoRlJBTUVTX1BFUl9ERVNDICoKLQkJCU1BWF9GUkFNRV9TSVpFX1BFUl9ERVNDLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFvdi0+c2J1ZltpXS5kYXRhKQotCQkJZ290byBlcnJvcjsKLQotCQlQREVCVUcoNCwgInNidWZbJWRdIEAgJXAiLCBpLCBvdi0+c2J1ZltpXS5kYXRhKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgT1Y1MTFfTlVNRlJBTUVTOyBpKyspIHsKLQkJb3YtPmZyYW1lW2ldLmRhdGEgPSBvdi0+ZmJ1ZiArIGkgKiBNQVhfREFUQV9TSVpFKHcsIGgpOwotCQlvdi0+ZnJhbWVbaV0ucmF3ZGF0YSA9IG92LT5yYXdmYnVmCi0JCSArIGkgKiBNQVhfUkFXX0RBVEFfU0laRSh3LCBoKTsKLQkJb3YtPmZyYW1lW2ldLnRlbXBkYXRhID0gb3YtPnRlbXBmYnVmCi0JCSArIGkgKiBNQVhfUkFXX0RBVEFfU0laRSh3LCBoKTsKLQotCQlvdi0+ZnJhbWVbaV0uY29tcGJ1ZiA9Ci0JCSAodW5zaWduZWQgY2hhciAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JCWlmICghb3YtPmZyYW1lW2ldLmNvbXBidWYpCi0JCQlnb3RvIGVycm9yOwotCi0JCVBERUJVRyg0LCAiZnJhbWVbJWRdIEAgJXAiLCBpLCBvdi0+ZnJhbWVbaV0uZGF0YSk7Ci0JfQotCi0Jb3YtPmJ1Zl9zdGF0ZSA9IEJVRl9BTExPQ0FURUQ7Ci1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZvdi0+YnVmX2xvY2spOwotCVBERUJVRyg0LCAibGVhdmluZyIpOwotCXJldHVybiAwOwotZXJyb3I6Ci0Jb3Y1MXhfZG9fZGVhbGxvYyhvdik7Ci0JbXV0ZXhfdW5sb2NrKCZvdi0+YnVmX2xvY2spOwotCVBERUJVRyg0LCAiZXJyb3JlZCIpOwotCXJldHVybiAtRU5PTUVNOwotfQotCi1zdGF0aWMgdm9pZAotb3Y1MXhfZGVhbGxvYyhzdHJ1Y3QgdXNiX292NTExICpvdikKLXsKLQlQREVCVUcoNCwgImVudGVyZWQiKTsKLQltdXRleF9sb2NrKCZvdi0+YnVmX2xvY2spOwotCW92NTF4X2RvX2RlYWxsb2Mob3YpOwotCW11dGV4X3VubG9jaygmb3YtPmJ1Zl9sb2NrKTsKLQlQREVCVUcoNCwgImxlYXZpbmciKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBWNEwgMSBBUEkKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgaW50Ci1vdjUxeF92NGwxX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHVzYl9vdjUxMSAqb3YgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKLQlpbnQgZXJyLCBpOwotCi0JUERFQlVHKDQsICJvcGVuaW5nIik7Ci0KLQltdXRleF9sb2NrKCZvdi0+bG9jayk7Ci0KLQllcnIgPSAtRUJVU1k7Ci0JaWYgKG92LT51c2VyKQotCQlnb3RvIG91dDsKLQotCW92LT5zdWJfZmxhZyA9IDA7Ci0KLQkvKiBJbiBjYXNlIGFwcCBkb2Vzbid0IHNldCB0aGVtLi4uICovCi0JZXJyID0gb3Y1MXhfc2V0X2RlZmF1bHRfcGFyYW1zKG92KTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBvdXQ7Ci0KLQkvKiBNYWtlIHN1cmUgZnJhbWVzIGFyZSByZXNldCAqLwotCWZvciAoaSA9IDA7IGkgPCBPVjUxMV9OVU1GUkFNRVM7IGkrKykgewotCQlvdi0+ZnJhbWVbaV0uZ3JhYnN0YXRlID0gRlJBTUVfVU5VU0VEOwotCQlvdi0+ZnJhbWVbaV0uYnl0ZXNfcmVhZCA9IDA7Ci0JfQotCi0JLyogSWYgY29tcHJlc3Npb24gaXMgb24sIG1ha2Ugc3VyZSBub3cgdGhhdCBhCi0JICogZGVjb21wcmVzc29yIGNhbiBiZSBsb2FkZWQgKi8KLQlpZiAob3YtPmNvbXByZXNzICYmICFvdi0+ZGVjb21wX29wcykgewotCQllcnIgPSByZXF1ZXN0X2RlY29tcHJlc3Nvcihvdik7Ci0JCWlmIChlcnIgJiYgIWR1bXBwaXgpCi0JCQlnb3RvIG91dDsKLQl9Ci0KLQllcnIgPSBvdjUxeF9hbGxvYyhvdik7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gb3Y1MXhfaW5pdF9pc29jKG92KTsKLQlpZiAoZXJyKSB7Ci0JCW92NTF4X2RlYWxsb2Mob3YpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlvdi0+dXNlcisrOwotCWZpbGUtPnByaXZhdGVfZGF0YSA9IHZkZXY7Ci0KLQlpZiAob3YtPmxlZF9wb2xpY3kgPT0gTEVEX0FVVE8pCi0JCW92NTF4X2xlZF9jb250cm9sKG92LCAxKTsKLQotb3V0OgotCW11dGV4X3VubG9jaygmb3YtPmxvY2spOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQKLW92NTF4X3Y0bDFfY2xvc2Uoc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgdXNiX292NTExICpvdiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOwotCi0JUERFQlVHKDQsICJvdjUxMV9jbG9zZSIpOwotCi0JbXV0ZXhfbG9jaygmb3YtPmxvY2spOwotCi0Jb3YtPnVzZXItLTsKLQlvdjUxeF9zdG9wX2lzb2Mob3YpOwotCi0JaWYgKG92LT5sZWRfcG9saWN5ID09IExFRF9BVVRPKQotCQlvdjUxeF9sZWRfY29udHJvbChvdiwgMCk7Ci0KLQlpZiAob3YtPmRldikKLQkJb3Y1MXhfZGVhbGxvYyhvdik7Ci0KLQltdXRleF91bmxvY2soJm92LT5sb2NrKTsKLQotCS8qIERldmljZSB1bnBsdWdnZWQgd2hpbGUgb3Blbi4gT25seSBhIG1pbmltdW0gb2YgdW5yZWdpc3RyYXRpb24gaXMgZG9uZQotCSAqIGhlcmU7IHRoZSBkaXNjb25uZWN0IGNhbGxiYWNrIGFscmVhZHkgZGlkIHRoZSByZXN0LiAqLwotCWlmICghb3YtPmRldikgewotCQltdXRleF9sb2NrKCZvdi0+Y2J1Zl9sb2NrKTsKLQkJa2ZyZWUob3YtPmNidWYpOwotCQlvdi0+Y2J1ZiA9IE5VTEw7Ci0JCW11dGV4X3VubG9jaygmb3YtPmNidWZfbG9jayk7Ci0KLQkJb3Y1MXhfZGVhbGxvYyhvdik7Ci0JCWtmcmVlKG92KTsKLQkJb3YgPSBOVUxMOwotCX0KLQotCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIERvIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkhICovCi1zdGF0aWMgbG9uZwotb3Y1MXhfdjRsMV9pb2N0bF9pbnRlcm5hbChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHVzYl9vdjUxMSAqb3YgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKLQlQREVCVUcoNSwgIklPQ3RsOiAweCVYIiwgY21kKTsKLQotCWlmICghb3YtPmRldikKLQkJcmV0dXJuIC1FSU87Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DR0NBUDoKLQl7Ci0JCXN0cnVjdCB2aWRlb19jYXBhYmlsaXR5ICpiID0gYXJnOwotCi0JCVBERUJVRyg0LCAiVklESU9DR0NBUCIpOwotCi0JCW1lbXNldChiLCAwLCBzaXplb2Yoc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkpKTsKLQkJc3ByaW50ZihiLT5uYW1lLCAiJXMgVVNCIENhbWVyYSIsCi0JCQlzeW1ib2xpYyhicmdsaXN0LCBvdi0+YnJpZGdlKSk7Ci0JCWItPnR5cGUgPSBWSURfVFlQRV9DQVBUVVJFIHwgVklEX1RZUEVfU1VCQ0FQVFVSRTsKLQkJYi0+Y2hhbm5lbHMgPSBvdi0+bnVtX2lucHV0czsKLQkJYi0+YXVkaW9zID0gMDsKLQkJYi0+bWF4d2lkdGggPSBvdi0+bWF4d2lkdGg7Ci0JCWItPm1heGhlaWdodCA9IG92LT5tYXhoZWlnaHQ7Ci0JCWItPm1pbndpZHRoID0gb3YtPm1pbndpZHRoOwotCQliLT5taW5oZWlnaHQgPSBvdi0+bWluaGVpZ2h0OwotCi0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ0dDSEFOOgotCXsKLQkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKnYgPSBhcmc7Ci0KLQkJUERFQlVHKDQsICJWSURJT0NHQ0hBTiIpOwotCi0JCWlmICgodW5zaWduZWQpKHYtPmNoYW5uZWwpID49IG92LT5udW1faW5wdXRzKSB7Ci0JCQllcnIoIkludmFsaWQgY2hhbm5lbCAoJWQpIiwgdi0+Y2hhbm5lbCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCXYtPm5vcm0gPSBvdi0+bm9ybTsKLQkJdi0+dHlwZSA9IFZJREVPX1RZUEVfQ0FNRVJBOwotCQl2LT5mbGFncyA9IDA7Ci0vLwkJdi0+ZmxhZ3MgfD0gKG92LT5oYXNfZGVjb2RlcikgPyBWSURFT19WQ19OT1JNIDogMDsKLQkJdi0+dHVuZXJzID0gMDsKLQkJZGVjb2Rlcl9nZXRfaW5wdXRfbmFtZShvdiwgdi0+Y2hhbm5lbCwgdi0+bmFtZSk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DU0NIQU46Ci0JewotCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCAqdiA9IGFyZzsKLQkJaW50IGVycjsKLQotCQlQREVCVUcoNCwgIlZJRElPQ1NDSEFOIik7Ci0KLQkJLyogTWFrZSBzdXJlIGl0J3Mgbm90IGEgY2FtZXJhICovCi0JCWlmICghb3YtPmhhc19kZWNvZGVyKSB7Ci0JCQlpZiAodi0+Y2hhbm5lbCA9PSAwKQotCQkJCXJldHVybiAwOwotCQkJZWxzZQotCQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJaWYgKHYtPm5vcm0gIT0gVklERU9fTU9ERV9QQUwgJiYKLQkJICAgIHYtPm5vcm0gIT0gVklERU9fTU9ERV9OVFNDICYmCi0JCSAgICB2LT5ub3JtICE9IFZJREVPX01PREVfU0VDQU0gJiYKLQkJICAgIHYtPm5vcm0gIT0gVklERU9fTU9ERV9BVVRPKSB7Ci0JCQllcnIoIkludmFsaWQgbm9ybSAoJWQpIiwgdi0+bm9ybSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWlmICgodW5zaWduZWQpKHYtPmNoYW5uZWwpID49IG92LT5udW1faW5wdXRzKSB7Ci0JCQllcnIoIkludmFsaWQgY2hhbm5lbCAoJWQpIiwgdi0+Y2hhbm5lbCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWVyciA9IGRlY29kZXJfc2V0X2lucHV0KG92LCB2LT5jaGFubmVsKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0KLQkJZXJyID0gZGVjb2Rlcl9zZXRfbm9ybShvdiwgdi0+bm9ybSk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCi0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ0dQSUNUOgotCXsKLQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnAgPSBhcmc7Ci0KLQkJUERFQlVHKDQsICJWSURJT0NHUElDVCIpOwotCi0JCW1lbXNldChwLCAwLCBzaXplb2Yoc3RydWN0IHZpZGVvX3BpY3R1cmUpKTsKLQkJaWYgKHNlbnNvcl9nZXRfcGljdHVyZShvdiwgcCkpCi0JCQlyZXR1cm4gLUVJTzsKLQotCQkvKiBDYW4gd2UgZ2V0IHRoZXNlIGZyb20gZnJhbWVbMF0/IC1jbGF1ZGlvPyAqLwotCQlwLT5kZXB0aCA9IG92LT5mcmFtZVswXS5kZXB0aDsKLQkJcC0+cGFsZXR0ZSA9IG92LT5mcmFtZVswXS5mb3JtYXQ7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DU1BJQ1Q6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcCA9IGFyZzsKLQkJaW50IGksIHJjOwotCi0JCVBERUJVRyg0LCAiVklESU9DU1BJQ1QiKTsKLQotCQlpZiAoIWdldF9kZXB0aChwLT5wYWxldHRlKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmIChzZW5zb3Jfc2V0X3BpY3R1cmUob3YsIHApKQotCQkJcmV0dXJuIC1FSU87Ci0KLQkJaWYgKGZvcmNlX3BhbGV0dGUgJiYgcC0+cGFsZXR0ZSAhPSBmb3JjZV9wYWxldHRlKSB7Ci0JCQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiUGFsZXR0ZSByZWplY3RlZCAoJXMpXG4iLAotCQkJICAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCBwLT5wYWxldHRlKSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCS8vIEZJWE1FOiBGb3JtYXQgc2hvdWxkIGJlIGluZGVwZW5kZW50IG9mIGZyYW1lcwotCQlpZiAocC0+cGFsZXR0ZSAhPSBvdi0+ZnJhbWVbMF0uZm9ybWF0KSB7Ci0JCQlQREVCVUcoNCwgIkRldGVjdGVkIGZvcm1hdCBjaGFuZ2UiKTsKLQotCQkJcmMgPSBvdjUxeF93YWl0X2ZyYW1lc19pbmFjdGl2ZShvdik7Ci0JCQlpZiAocmMpCi0JCQkJcmV0dXJuIHJjOwotCi0JCQltb2RlX2luaXRfcmVncyhvdiwgb3YtPmZyYW1lWzBdLndpZHRoLAotCQkJCW92LT5mcmFtZVswXS5oZWlnaHQsIHAtPnBhbGV0dGUsIG92LT5zdWJfZmxhZyk7Ci0JCX0KLQotCQlQREVCVUcoNCwgIlNldHRpbmcgZGVwdGg9JWQsIHBhbGV0dGU9JXMiLAotCQkgICAgICAgcC0+ZGVwdGgsIHN5bWJvbGljKHY0bDFfcGxpc3QsIHAtPnBhbGV0dGUpKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgT1Y1MTFfTlVNRlJBTUVTOyBpKyspIHsKLQkJCW92LT5mcmFtZVtpXS5kZXB0aCA9IHAtPmRlcHRoOwotCQkJb3YtPmZyYW1lW2ldLmZvcm1hdCA9IHAtPnBhbGV0dGU7Ci0JCX0KLQotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NHQ0FQVFVSRToKLQl7Ci0JCWludCAqdmYgPSBhcmc7Ci0KLQkJUERFQlVHKDQsICJWSURJT0NHQ0FQVFVSRSIpOwotCi0JCW92LT5zdWJfZmxhZyA9ICp2ZjsKLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DU0NBUFRVUkU6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fY2FwdHVyZSAqdmMgPSBhcmc7Ci0KLQkJUERFQlVHKDQsICJWSURJT0NTQ0FQVFVSRSIpOwotCi0JCWlmICh2Yy0+ZmxhZ3MpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKHZjLT5kZWNpbWF0aW9uKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJdmMtPnggJj0gfjNMOwotCQl2Yy0+eSAmPSB+MUw7Ci0JCXZjLT55ICY9IH4zMUw7Ci0KLQkJaWYgKHZjLT53aWR0aCA9PSAwKQotCQkJdmMtPndpZHRoID0gMzI7Ci0KLQkJdmMtPmhlaWdodCAvPSAxNjsKLQkJdmMtPmhlaWdodCAqPSAxNjsKLQkJaWYgKHZjLT5oZWlnaHQgPT0gMCkKLQkJCXZjLT5oZWlnaHQgPSAxNjsKLQotCQlvdi0+c3VieCA9IHZjLT54OwotCQlvdi0+c3VieSA9IHZjLT55OwotCQlvdi0+c3VidyA9IHZjLT53aWR0aDsKLQkJb3YtPnN1YmggPSB2Yy0+aGVpZ2h0OwotCi0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ1NXSU46Ci0JewotCQlzdHJ1Y3QgdmlkZW9fd2luZG93ICp2dyA9IGFyZzsKLQkJaW50IGksIHJjOwotCi0JCVBERUJVRyg0LCAiVklESU9DU1dJTjogJWR4JWQiLCB2dy0+d2lkdGgsIHZ3LT5oZWlnaHQpOwotCi0jaWYgMAotCQlpZiAodnctPmZsYWdzKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmICh2dy0+Y2xpcGNvdW50KQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmICh2dy0+aGVpZ2h0ICE9IG92LT5tYXhoZWlnaHQpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKHZ3LT53aWR0aCAhPSBvdi0+bWF4d2lkdGgpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLSNlbmRpZgotCi0JCXJjID0gb3Y1MXhfd2FpdF9mcmFtZXNfaW5hY3RpdmUob3YpOwotCQlpZiAocmMpCi0JCQlyZXR1cm4gcmM7Ci0KLQkJcmMgPSBtb2RlX2luaXRfcmVncyhvdiwgdnctPndpZHRoLCB2dy0+aGVpZ2h0LAotCQkJb3YtPmZyYW1lWzBdLmZvcm1hdCwgb3YtPnN1Yl9mbGFnKTsKLQkJaWYgKHJjIDwgMCkKLQkJCXJldHVybiByYzsKLQotCQlmb3IgKGkgPSAwOyBpIDwgT1Y1MTFfTlVNRlJBTUVTOyBpKyspIHsKLQkJCW92LT5mcmFtZVtpXS53aWR0aCA9IHZ3LT53aWR0aDsKLQkJCW92LT5mcmFtZVtpXS5oZWlnaHQgPSB2dy0+aGVpZ2h0OwotCQl9Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DR1dJTjoKLQl7Ci0JCXN0cnVjdCB2aWRlb193aW5kb3cgKnZ3ID0gYXJnOwotCi0JCW1lbXNldCh2dywgMCwgc2l6ZW9mKHN0cnVjdCB2aWRlb193aW5kb3cpKTsKLQkJdnctPnggPSAwOwkJLyogRklYTUUgKi8KLQkJdnctPnkgPSAwOwotCQl2dy0+d2lkdGggPSBvdi0+ZnJhbWVbMF0ud2lkdGg7Ci0JCXZ3LT5oZWlnaHQgPSBvdi0+ZnJhbWVbMF0uaGVpZ2h0OwotCQl2dy0+ZmxhZ3MgPSAzMDsKLQotCQlQREVCVUcoNCwgIlZJRElPQ0dXSU46ICVkeCVkIiwgdnctPndpZHRoLCB2dy0+aGVpZ2h0KTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NHTUJVRjoKLQl7Ci0JCXN0cnVjdCB2aWRlb19tYnVmICp2bSA9IGFyZzsKLQkJaW50IGk7Ci0KLQkJUERFQlVHKDQsICJWSURJT0NHTUJVRiIpOwotCi0JCW1lbXNldCh2bSwgMCwgc2l6ZW9mKHN0cnVjdCB2aWRlb19tYnVmKSk7Ci0JCXZtLT5zaXplID0gT1Y1MTFfTlVNRlJBTUVTCi0JCQkgICAqIE1BWF9EQVRBX1NJWkUob3YtPm1heHdpZHRoLCBvdi0+bWF4aGVpZ2h0KTsKLQkJdm0tPmZyYW1lcyA9IE9WNTExX05VTUZSQU1FUzsKLQotCQl2bS0+b2Zmc2V0c1swXSA9IDA7Ci0JCWZvciAoaSA9IDE7IGkgPCBPVjUxMV9OVU1GUkFNRVM7IGkrKykgewotCQkJdm0tPm9mZnNldHNbaV0gPSB2bS0+b2Zmc2V0c1tpLTFdCi0JCQkgICArIE1BWF9EQVRBX1NJWkUob3YtPm1heHdpZHRoLCBvdi0+bWF4aGVpZ2h0KTsKLQkJfQotCi0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ01DQVBUVVJFOgotCXsKLQkJc3RydWN0IHZpZGVvX21tYXAgKnZtID0gYXJnOwotCQlpbnQgcmMsIGRlcHRoOwotCQl1bnNpZ25lZCBpbnQgZiA9IHZtLT5mcmFtZTsKLQotCQlQREVCVUcoNCwgIlZJRElPQ01DQVBUVVJFOiBmcmFtZTogJWQsICVkeCVkLCAlcyIsIGYsIHZtLT53aWR0aCwKLQkJCXZtLT5oZWlnaHQsIHN5bWJvbGljKHY0bDFfcGxpc3QsIHZtLT5mb3JtYXQpKTsKLQotCQlkZXB0aCA9IGdldF9kZXB0aCh2bS0+Zm9ybWF0KTsKLQkJaWYgKCFkZXB0aCkgewotCQkJUERFQlVHKDIsICJWSURJT0NNQ0FQVFVSRTogaW52YWxpZCBmb3JtYXQgKCVzKSIsCi0JCQkgICAgICAgc3ltYm9saWModjRsMV9wbGlzdCwgdm0tPmZvcm1hdCkpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlpZiAoZiA+PSBPVjUxMV9OVU1GUkFNRVMpIHsKLQkJCWVycigiVklESU9DTUNBUFRVUkU6IGludmFsaWQgZnJhbWUgKCVkKSIsIGYpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlpZiAodm0tPndpZHRoID4gb3YtPm1heHdpZHRoCi0JCSAgICB8fCB2bS0+aGVpZ2h0ID4gb3YtPm1heGhlaWdodCkgewotCQkJZXJyKCJWSURJT0NNQ0FQVFVSRTogcmVxdWVzdGVkIGRpbWVuc2lvbnMgdG9vIGJpZyIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlpZiAob3YtPmZyYW1lW2ZdLmdyYWJzdGF0ZSA9PSBGUkFNRV9HUkFCQklORykgewotCQkJUERFQlVHKDQsICJWSURJT0NNQ0FQVFVSRTogYWxyZWFkeSBncmFiYmluZyIpOwotCQkJcmV0dXJuIC1FQlVTWTsKLQkJfQotCi0JCWlmIChmb3JjZV9wYWxldHRlICYmICh2bS0+Zm9ybWF0ICE9IGZvcmNlX3BhbGV0dGUpKSB7Ci0JCQlQREVCVUcoMiwgInBhbGV0dGUgcmVqZWN0ZWQgKCVzKSIsCi0JCQkgICAgICAgc3ltYm9saWModjRsMV9wbGlzdCwgdm0tPmZvcm1hdCkpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlpZiAoKG92LT5mcmFtZVtmXS53aWR0aCAhPSB2bS0+d2lkdGgpIHx8Ci0JCSAgICAob3YtPmZyYW1lW2ZdLmhlaWdodCAhPSB2bS0+aGVpZ2h0KSB8fAotCQkgICAgKG92LT5mcmFtZVtmXS5mb3JtYXQgIT0gdm0tPmZvcm1hdCkgfHwKLQkJICAgIChvdi0+ZnJhbWVbZl0uc3ViX2ZsYWcgIT0gb3YtPnN1Yl9mbGFnKSB8fAotCQkgICAgKG92LT5mcmFtZVtmXS5kZXB0aCAhPSBkZXB0aCkpIHsKLQkJCVBERUJVRyg0LCAiVklESU9DTUNBUFRVUkU6IGNoYW5nZSBpbiBpbWFnZSBwYXJhbWV0ZXJzIik7Ci0KLQkJCXJjID0gb3Y1MXhfd2FpdF9mcmFtZXNfaW5hY3RpdmUob3YpOwotCQkJaWYgKHJjKQotCQkJCXJldHVybiByYzsKLQotCQkJcmMgPSBtb2RlX2luaXRfcmVncyhvdiwgdm0tPndpZHRoLCB2bS0+aGVpZ2h0LAotCQkJCXZtLT5mb3JtYXQsIG92LT5zdWJfZmxhZyk7Ci0jaWYgMAotCQkJaWYgKHJjIDwgMCkgewotCQkJCVBERUJVRygxLCAiR290IGVycm9yIHdoaWxlIGluaXRpYWxpemluZyByZWdzICIpOwotCQkJCXJldHVybiByZXQ7Ci0JCQl9Ci0jZW5kaWYKLQkJCW92LT5mcmFtZVtmXS53aWR0aCA9IHZtLT53aWR0aDsKLQkJCW92LT5mcmFtZVtmXS5oZWlnaHQgPSB2bS0+aGVpZ2h0OwotCQkJb3YtPmZyYW1lW2ZdLmZvcm1hdCA9IHZtLT5mb3JtYXQ7Ci0JCQlvdi0+ZnJhbWVbZl0uc3ViX2ZsYWcgPSBvdi0+c3ViX2ZsYWc7Ci0JCQlvdi0+ZnJhbWVbZl0uZGVwdGggPSBkZXB0aDsKLQkJfQotCi0JCS8qIE1hcmsgaXQgYXMgcmVhZHkgKi8KLQkJb3YtPmZyYW1lW2ZdLmdyYWJzdGF0ZSA9IEZSQU1FX1JFQURZOwotCi0JCVBERUJVRyg0LCAiVklESU9DTUNBUFRVUkU6IHJlbmV3aW5nIGZyYW1lICVkIiwgZik7Ci0KLQkJcmV0dXJuIG92NTF4X25ld19mcmFtZShvdiwgZik7Ci0JfQotCWNhc2UgVklESU9DU1lOQzoKLQl7Ci0JCXVuc2lnbmVkIGludCBmbnVtID0gKigodW5zaWduZWQgaW50ICopIGFyZyk7Ci0JCXN0cnVjdCBvdjUxMV9mcmFtZSAqZnJhbWU7Ci0JCWludCByYzsKLQotCQlpZiAoZm51bSA+PSBPVjUxMV9OVU1GUkFNRVMpIHsKLQkJCWVycigiVklESU9DU1lOQzogaW52YWxpZCBmcmFtZSAoJWQpIiwgZm51bSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWZyYW1lID0gJm92LT5mcmFtZVtmbnVtXTsKLQotCQlQREVCVUcoNCwgInN5bmNpbmcgdG8gZnJhbWUgJWQsIGdyYWJzdGF0ZSA9ICVkIiwgZm51bSwKLQkJICAgICAgIGZyYW1lLT5ncmFic3RhdGUpOwotCi0JCXN3aXRjaCAoZnJhbWUtPmdyYWJzdGF0ZSkgewotCQljYXNlIEZSQU1FX1VOVVNFRDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQljYXNlIEZSQU1FX1JFQURZOgotCQljYXNlIEZSQU1FX0dSQUJCSU5HOgotCQljYXNlIEZSQU1FX0VSUk9SOgotcmVkbzoKLQkJCWlmICghb3YtPmRldikKLQkJCQlyZXR1cm4gLUVJTzsKLQotCQkJcmMgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZnJhbWUtPndxLAotCQkJICAgIChmcmFtZS0+Z3JhYnN0YXRlID09IEZSQU1FX0RPTkUpCi0JCQkgICAgfHwgKGZyYW1lLT5ncmFic3RhdGUgPT0gRlJBTUVfRVJST1IpKTsKLQotCQkJaWYgKHJjKQotCQkJCXJldHVybiByYzsKLQotCQkJaWYgKGZyYW1lLT5ncmFic3RhdGUgPT0gRlJBTUVfRVJST1IpIHsKLQkJCQlpZiAoKHJjID0gb3Y1MXhfbmV3X2ZyYW1lKG92LCBmbnVtKSkgPCAwKQotCQkJCQlyZXR1cm4gcmM7Ci0JCQkJZ290byByZWRvOwotCQkJfQotCQkJLyogRmFsbCB0aHJvdWdoICovCi0JCWNhc2UgRlJBTUVfRE9ORToKLQkJCWlmIChvdi0+c25hcF9lbmFibGVkICYmICFmcmFtZS0+c25hcHNob3QpIHsKLQkJCQlpZiAoKHJjID0gb3Y1MXhfbmV3X2ZyYW1lKG92LCBmbnVtKSkgPCAwKQotCQkJCQlyZXR1cm4gcmM7Ci0JCQkJZ290byByZWRvOwotCQkJfQotCi0JCQlmcmFtZS0+Z3JhYnN0YXRlID0gRlJBTUVfVU5VU0VEOwotCi0JCQkvKiBSZXNldCB0aGUgaGFyZHdhcmUgc25hcHNob3QgYnV0dG9uICovCi0JCQkvKiBGSVhNRSAtIElzIHRoaXMgdGhlIGJlc3QgcGxhY2UgZm9yIHRoaXM/ICovCi0JCQlpZiAoKG92LT5zbmFwX2VuYWJsZWQpICYmIChmcmFtZS0+c25hcHNob3QpKSB7Ci0JCQkJZnJhbWUtPnNuYXBzaG90ID0gMDsKLQkJCQlvdjUxeF9jbGVhcl9zbmFwc2hvdChvdik7Ci0JCQl9Ci0KLQkJCS8qIERlY29tcHJlc3Npb24sIGZvcm1hdCBjb252ZXJzaW9uLCBldGMuLi4gKi8KLQkJCW92NTF4X3Bvc3Rwcm9jZXNzKG92LCBmcmFtZSk7Ci0KLQkJCWJyZWFrOwotCQl9IC8qIGVuZCBzd2l0Y2ggKi8KLQotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NHRkJVRjoKLQl7Ci0JCXN0cnVjdCB2aWRlb19idWZmZXIgKnZiID0gYXJnOwotCi0JCVBERUJVRyg0LCAiVklESU9DR0ZCVUYiKTsKLQotCQltZW1zZXQodmIsIDAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fYnVmZmVyKSk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DR1VOSVQ6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fdW5pdCAqdnUgPSBhcmc7Ci0KLQkJUERFQlVHKDQsICJWSURJT0NHVU5JVCIpOwotCi0JCW1lbXNldCh2dSwgMCwgc2l6ZW9mKHN0cnVjdCB2aWRlb191bml0KSk7Ci0KLQkJdnUtPnZpZGVvID0gb3YtPnZkZXYtPm1pbm9yOwotCQl2dS0+dmJpID0gVklERU9fTk9fVU5JVDsKLQkJdnUtPnJhZGlvID0gVklERU9fTk9fVU5JVDsKLQkJdnUtPmF1ZGlvID0gVklERU9fTk9fVU5JVDsKLQkJdnUtPnRlbGV0ZXh0ID0gVklERU9fTk9fVU5JVDsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBPVjUxMUlPQ19XSTJDOgotCXsKLQkJc3RydWN0IG92NTExX2kyY19zdHJ1Y3QgKncgPSBhcmc7Ci0KLQkJcmV0dXJuIGkyY193X3NsYXZlKG92LCB3LT5zbGF2ZSwgdy0+cmVnLCB3LT52YWx1ZSwgdy0+bWFzayk7Ci0JfQotCWNhc2UgT1Y1MTFJT0NfUkkyQzoKLQl7Ci0JCXN0cnVjdCBvdjUxMV9pMmNfc3RydWN0ICpyID0gYXJnOwotCQlpbnQgcmM7Ci0KLQkJcmMgPSBpMmNfcl9zbGF2ZShvdiwgci0+c2xhdmUsIHItPnJlZyk7Ci0JCWlmIChyYyA8IDApCi0JCQlyZXR1cm4gcmM7Ci0KLQkJci0+dmFsdWUgPSByYzsKLQkJcmV0dXJuIDA7Ci0JfQotCWRlZmF1bHQ6Ci0JCVBERUJVRygzLCAiVW5zdXBwb3J0ZWQgSU9DdGw6IDB4JVgiLCBjbWQpOwotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0gLyogZW5kIHN3aXRjaCAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBsb25nCi1vdjUxeF92NGwxX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLAotCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgdXNiX292NTExICpvdiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOwotCWludCByYzsKLQotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJm92LT5sb2NrKSkKLQkJcmV0dXJuIC1FSU5UUjsKLQotCXJjID0gdmlkZW9fdXNlcmNvcHkoZmlsZSwgY21kLCBhcmcsIG92NTF4X3Y0bDFfaW9jdGxfaW50ZXJuYWwpOwotCi0JbXV0ZXhfdW5sb2NrKCZvdi0+bG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgc3NpemVfdAotb3Y1MXhfdjRsMV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlpbnQgbm9ibG9jayA9IGZpbGUtPmZfZmxhZ3MmT19OT05CTE9DSzsKLQl1bnNpZ25lZCBsb25nIGNvdW50ID0gY250OwotCXN0cnVjdCB1c2Jfb3Y1MTEgKm92ID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7Ci0JaW50IGksIHJjID0gMCwgZnJteCA9IC0xOwotCXN0cnVjdCBvdjUxMV9mcmFtZSAqZnJhbWU7Ci0KLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZvdi0+bG9jaykpCi0JCXJldHVybiAtRUlOVFI7Ci0KLQlQREVCVUcoNCwgIiVsZCBieXRlcywgbm9ibG9jaz0lZCIsIGNvdW50LCBub2Jsb2NrKTsKLQotCWlmICghdmRldiB8fCAhYnVmKSB7Ci0JCXJjID0gLUVGQVVMVDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlpZiAoIW92LT5kZXYpIHsKLQkJcmMgPSAtRUlPOwotCQlnb3RvIGVycm9yOwotCX0KLQotLy8gRklYTUU6IE9ubHkgc3VwcG9ydHMgdHdvIGZyYW1lcwotCS8qIFNlZSBpZiBhIGZyYW1lIGlzIGNvbXBsZXRlZCwgdGhlbiB1c2UgaXQuICovCi0JaWYgKG92LT5mcmFtZVswXS5ncmFic3RhdGUgPj0gRlJBTUVfRE9ORSkJLyogX0RPTkUgb3IgX0VSUk9SICovCi0JCWZybXggPSAwOwotCWVsc2UgaWYgKG92LT5mcmFtZVsxXS5ncmFic3RhdGUgPj0gRlJBTUVfRE9ORSkvKiBfRE9ORSBvciBfRVJST1IgKi8KLQkJZnJteCA9IDE7Ci0KLQkvKiBJZiBub25ibG9ja2luZyB3ZSByZXR1cm4gaW1tZWRpYXRlbHkgKi8KLQlpZiAobm9ibG9jayAmJiAoZnJteCA9PSAtMSkpIHsKLQkJcmMgPSAtRUFHQUlOOwotCQlnb3RvIGVycm9yOwotCX0KLQotCS8qIElmIG5vIEZSQU1FX0RPTkUsIGxvb2sgZm9yIGEgRlJBTUVfR1JBQkJJTkcgc3RhdGUuICovCi0JLyogU2VlIGlmIGEgZnJhbWUgaXMgaW4gcHJvY2VzcyAoZ3JhYmJpbmcpLCB0aGVuIHVzZSBpdC4gKi8KLQlpZiAoZnJteCA9PSAtMSkgewotCQlpZiAob3YtPmZyYW1lWzBdLmdyYWJzdGF0ZSA9PSBGUkFNRV9HUkFCQklORykKLQkJCWZybXggPSAwOwotCQllbHNlIGlmIChvdi0+ZnJhbWVbMV0uZ3JhYnN0YXRlID09IEZSQU1FX0dSQUJCSU5HKQotCQkJZnJteCA9IDE7Ci0JfQotCi0JLyogSWYgbm8gZnJhbWUgaXMgYWN0aXZlLCBzdGFydCBvbmUuICovCi0JaWYgKGZybXggPT0gLTEpIHsKLQkJaWYgKChyYyA9IG92NTF4X25ld19mcmFtZShvdiwgZnJteCA9IDApKSkgewotCQkJZXJyKCJyZWFkOiBvdjUxeF9uZXdfZnJhbWUgZXJyb3IiKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci0KLQlmcmFtZSA9ICZvdi0+ZnJhbWVbZnJteF07Ci0KLXJlc3RhcnQ6Ci0JaWYgKCFvdi0+ZGV2KSB7Ci0JCXJjID0gLUVJTzsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQkvKiBXYWl0IHdoaWxlIHdlJ3JlIGdyYWJiaW5nIHRoZSBpbWFnZSAqLwotCVBERUJVRyg0LCAiV2FpdGluZyBpbWFnZSBncmFiYmluZyIpOwotCXJjID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGZyYW1lLT53cSwKLQkJKGZyYW1lLT5ncmFic3RhdGUgPT0gRlJBTUVfRE9ORSkKLQkJfHwgKGZyYW1lLT5ncmFic3RhdGUgPT0gRlJBTUVfRVJST1IpKTsKLQotCWlmIChyYykKLQkJZ290byBlcnJvcjsKLQotCVBERUJVRyg0LCAiR290IGltYWdlLCBmcmFtZS0+Z3JhYnN0YXRlID0gJWQiLCBmcmFtZS0+Z3JhYnN0YXRlKTsKLQlQREVCVUcoNCwgImJ5dGVzX3JlY3ZkID0gJWQiLCBmcmFtZS0+Ynl0ZXNfcmVjdmQpOwotCi0JaWYgKGZyYW1lLT5ncmFic3RhdGUgPT0gRlJBTUVfRVJST1IpIHsKLQkJZnJhbWUtPmJ5dGVzX3JlYWQgPSAwOwotCQllcnIoIioqIGljayEgKiogRXJyb3JlZCBmcmFtZSAlZCIsIG92LT5jdXJmcmFtZSk7Ci0JCWlmIChvdjUxeF9uZXdfZnJhbWUob3YsIGZybXgpKSB7Ci0JCQllcnIoInJlYWQ6IG92NTF4X25ld19mcmFtZSBlcnJvciIpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCQlnb3RvIHJlc3RhcnQ7Ci0JfQotCi0KLQkvKiBSZXBlYXQgdW50aWwgd2UgZ2V0IGEgc25hcHNob3QgZnJhbWUgKi8KLQlpZiAob3YtPnNuYXBfZW5hYmxlZCkKLQkJUERFQlVHKDQsICJXYWl0aW5nIHNuYXBzaG90IGZyYW1lIik7Ci0JaWYgKG92LT5zbmFwX2VuYWJsZWQgJiYgIWZyYW1lLT5zbmFwc2hvdCkgewotCQlmcmFtZS0+Ynl0ZXNfcmVhZCA9IDA7Ci0JCWlmICgocmMgPSBvdjUxeF9uZXdfZnJhbWUob3YsIGZybXgpKSkgewotCQkJZXJyKCJyZWFkOiBvdjUxeF9uZXdfZnJhbWUgZXJyb3IiKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQkJZ290byByZXN0YXJ0OwotCX0KLQotCS8qIENsZWFyIHRoZSBzbmFwc2hvdCAqLwotCWlmIChvdi0+c25hcF9lbmFibGVkICYmIGZyYW1lLT5zbmFwc2hvdCkgewotCQlmcmFtZS0+c25hcHNob3QgPSAwOwotCQlvdjUxeF9jbGVhcl9zbmFwc2hvdChvdik7Ci0JfQotCi0JLyogRGVjb21wcmVzc2lvbiwgZm9ybWF0IGNvbnZlcnNpb24sIGV0Yy4uLiAqLwotCW92NTF4X3Bvc3Rwcm9jZXNzKG92LCBmcmFtZSk7Ci0KLQlQREVCVUcoNCwgImZybXg9JWQsIGJ5dGVzX3JlYWQ9JWxkLCBsZW5ndGg9JWxkIiwgZnJteCwKLQkJZnJhbWUtPmJ5dGVzX3JlYWQsCi0JCWdldF9mcmFtZV9sZW5ndGgoZnJhbWUpKTsKLQotCS8qIGNvcHkgYnl0ZXMgdG8gdXNlciBzcGFjZTsgd2UgYWxsb3cgZm9yIHBhcnRpYWxzIHJlYWRzICovCi0vLwlpZiAoKGNvdW50ICsgZnJhbWUtPmJ5dGVzX3JlYWQpCi0vLwkgICAgPiBnZXRfZnJhbWVfbGVuZ3RoKChzdHJ1Y3Qgb3Y1MTFfZnJhbWUgKilmcmFtZSkpCi0vLwkJY291bnQgPSBmcmFtZS0+c2Nhbmxlbmd0aCAtIGZyYW1lLT5ieXRlc19yZWFkOwotCi0JLyogRklYTUUgLSBjb3VudCBoYXJkd2lyZWQgdG8gYmUgb25lIGZyYW1lLi4uICovCi0JY291bnQgPSBnZXRfZnJhbWVfbGVuZ3RoKGZyYW1lKTsKLQotCVBERUJVRyg0LCAiQ29weSB0byB1c2VyIHNwYWNlOiAlbGQgYnl0ZXMiLCBjb3VudCk7Ci0JaWYgKChpID0gY29weV90b191c2VyKGJ1ZiwgZnJhbWUtPmRhdGEgKyBmcmFtZS0+Ynl0ZXNfcmVhZCwgY291bnQpKSkgewotCQlQREVCVUcoNCwgIkNvcHkgZmFpbGVkISAlZCBieXRlcyBub3QgY29waWVkIiwgaSk7Ci0JCXJjID0gLUVGQVVMVDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlmcmFtZS0+Ynl0ZXNfcmVhZCArPSBjb3VudDsKLQlQREVCVUcoNCwgIntjb3B5fSBjb3VudCB1c2VkPSVsZCwgbmV3IGJ5dGVzX3JlYWQ9JWxkIiwKLQkJY291bnQsIGZyYW1lLT5ieXRlc19yZWFkKTsKLQotCS8qIElmIGFsbCBkYXRhIGhhdmUgYmVlbiByZWFkLi4uICovCi0JaWYgKGZyYW1lLT5ieXRlc19yZWFkCi0JICAgID49IGdldF9mcmFtZV9sZW5ndGgoZnJhbWUpKSB7Ci0JCWZyYW1lLT5ieXRlc19yZWFkID0gMDsKLQotLy8gRklYTUU6IE9ubHkgc3VwcG9ydHMgdHdvIGZyYW1lcwotCQkvKiBNYXJrIGl0IGFzIGF2YWlsYWJsZSB0byBiZSB1c2VkIGFnYWluLiAqLwotCQlvdi0+ZnJhbWVbZnJteF0uZ3JhYnN0YXRlID0gRlJBTUVfVU5VU0VEOwotCQlpZiAoKHJjID0gb3Y1MXhfbmV3X2ZyYW1lKG92LCAhZnJteCkpKSB7Ci0JCQllcnIoIm92NTF4X25ld19mcmFtZSByZXR1cm5lZCBlcnJvciIpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCX0KLQotCVBERUJVRyg0LCAicmVhZCBmaW5pc2hlZCwgcmV0dXJuaW5nICVsZCAoc3dlZXQpIiwgY291bnQpOwotCi0JbXV0ZXhfdW5sb2NrKCZvdi0+bG9jayk7Ci0JcmV0dXJuIGNvdW50OwotCi1lcnJvcjoKLQltdXRleF91bmxvY2soJm92LT5sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQKLW92NTF4X3Y0bDFfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gdm1hLT52bV9zdGFydDsKLQl1bnNpZ25lZCBsb25nIHNpemUgID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0OwotCXN0cnVjdCB1c2Jfb3Y1MTEgKm92ID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7Ci0JdW5zaWduZWQgbG9uZyBwYWdlLCBwb3M7Ci0KLQlpZiAob3YtPmRldiA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTzsKLQotCVBERUJVRyg0LCAibW1hcDogJWxkICglbFgpIGJ5dGVzIiwgc2l6ZSwgc2l6ZSk7Ci0KLQlpZiAoc2l6ZSA+ICgoKE9WNTExX05VTUZSQU1FUwotCQkgICAgICAqIE1BWF9EQVRBX1NJWkUob3YtPm1heHdpZHRoLCBvdi0+bWF4aGVpZ2h0KQotCQkgICAgICArIFBBR0VfU0laRSAtIDEpICYgfihQQUdFX1NJWkUgLSAxKSkpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJm92LT5sb2NrKSkKLQkJcmV0dXJuIC1FSU5UUjsKLQotCXBvcyA9ICh1bnNpZ25lZCBsb25nKW92LT5mYnVmOwotCXdoaWxlIChzaXplID4gMCkgewotCQlwYWdlID0gdm1hbGxvY190b19wZm4oKHZvaWQgKilwb3MpOwotCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBhZ2UsIFBBR0VfU0laRSwgUEFHRV9TSEFSRUQpKSB7Ci0JCQltdXRleF91bmxvY2soJm92LT5sb2NrKTsKLQkJCXJldHVybiAtRUFHQUlOOwotCQl9Ci0JCXN0YXJ0ICs9IFBBR0VfU0laRTsKLQkJcG9zICs9IFBBR0VfU0laRTsKLQkJaWYgKHNpemUgPiBQQUdFX1NJWkUpCi0JCQlzaXplIC09IFBBR0VfU0laRTsKLQkJZWxzZQotCQkJc2l6ZSA9IDA7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZvdi0+bG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgb3Y1MTFfZm9wcyA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKLQkub3BlbiA9CQlvdjUxeF92NGwxX29wZW4sCi0JLnJlbGVhc2UgPQlvdjUxeF92NGwxX2Nsb3NlLAotCS5yZWFkID0JCW92NTF4X3Y0bDFfcmVhZCwKLQkubW1hcCA9CQlvdjUxeF92NGwxX21tYXAsCi0JLmlvY3RsID0Jb3Y1MXhfdjRsMV9pb2N0bCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXZfdGVtcGxhdGUgPSB7Ci0JLm5hbWUgPQkJIk9WNTExIFVTQiBDYW1lcmEiLAotCS5mb3BzID0JCSZvdjUxMV9mb3BzLAotCS5yZWxlYXNlID0JdmlkZW9fZGV2aWNlX3JlbGVhc2UsCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIE9WNTExIGFuZCBzZW5zb3IgY29uZmlndXJhdGlvbgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIE9WNzYxMCwgT1Y3NjIwLCBvciBPVjc2QkUgc2Vuc29yLiBUaGUgT1Y3NkJFIHVzZXMKLSAqIHRoZSBzYW1lIHJlZ2lzdGVyIHNldHRpbmdzIGFzIHRoZSBPVjc2MTAsIHNpbmNlIHRoZXkgYXJlIHZlcnkgc2ltaWxhci4KLSAqLwotc3RhdGljIGludAotb3Y3eHgwX2NvbmZpZ3VyZShzdHJ1Y3QgdXNiX292NTExICpvdikKLXsKLQlpbnQgaSwgc3VjY2VzczsKLQlpbnQgcmM7Ci0KLQkvKiBMYXdyZW5jZSBHbGFpc3RlciA8bGdAamZtLmJjLmNhPiByZXBvcnRzOgotCSAqCi0JICogUmVnaXN0ZXIgMHgwZiBpbiB0aGUgNzYxMCBoYXMgdGhlIGZvbGxvd2luZyBlZmZlY3RzOgotCSAqCi0JICogMHg4NSAoQUVDIG1ldGhvZCAxKTogQmVzdCBvdmVyYWxsLCBnb29kIGNvbnRyYXN0IHJhbmdlCi0JICogMHg0NSAoQUVDIG1ldGhvZCAyKTogVmVyeSBvdmVyZXhwb3NlZAotCSAqIDB4YTUgKHNwZWMgc2hlZXQgZGVmYXVsdCk6IE9rLCBidXQgdGhlIGJsYWNrIGxldmVsIGlzCi0JICoJc2hpZnRlZCByZXN1bHRpbmcgaW4gbG9zcyBvZiBjb250cmFzdAotCSAqIDB4MDUgKG9sZCBkcml2ZXIgc2V0dGluZyk6IHZlcnkgb3ZlcmV4cG9zZWQsIHRvbyBtdWNoCi0JICoJY29udHJhc3QKLQkgKi8KLQlzdGF0aWMgc3RydWN0IG92NTExX3JlZ3ZhbHMgYVJlZ3ZhbHNOb3JtNzYxMFtdID0gewotCQl7IE9WNTExX0kyQ19CVVMsIDB4MTAsIDB4ZmYgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDE2LCAweDA2IH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgyOCwgMHgyNCB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MmIsIDB4YWMgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDEyLCAweDAwIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgzOCwgMHg4MSB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MjgsIDB4MjQgfSwJLyogMGMgKi8KLQkJeyBPVjUxMV9JMkNfQlVTLCAweDBmLCAweDg1IH0sCS8qIGxnJ3Mgc2V0dGluZyAqLwotCQl7IE9WNTExX0kyQ19CVVMsIDB4MTUsIDB4MDEgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDIwLCAweDFjIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgyMywgMHgyYSB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MjQsIDB4MTAgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDI1LCAweDhhIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgyNiwgMHhhMiB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MjcsIDB4YzIgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDJhLCAweDA0IH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgyYywgMHhmZSB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MmQsIDB4OTMgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDMwLCAweDcxIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgzMSwgMHg2MCB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MzIsIDB4MjYgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDMzLCAweDIwIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgzNCwgMHg0OCB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MTIsIDB4MjQgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDExLCAweDAxIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgwYywgMHgyNCB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MGQsIDB4MjQgfSwKLQkJeyBPVjUxMV9ET05FX0JVUywgMHgwLCAweDAwIH0sCi0JfTsKLQotCXN0YXRpYyBzdHJ1Y3Qgb3Y1MTFfcmVndmFscyBhUmVndmFsc05vcm03NjIwW10gPSB7Ci0JCXsgT1Y1MTFfSTJDX0JVUywgMHgwMCwgMHgwMCB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MDEsIDB4ODAgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDAyLCAweDgwIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgwMywgMHhjMCB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MDYsIDB4NjAgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDA3LCAweDAwIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgwYywgMHgyNCB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MGMsIDB4MjQgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDBkLCAweDI0IH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgxMSwgMHgwMSB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MTIsIDB4MjQgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDEzLCAweDAxIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgxNCwgMHg4NCB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MTUsIDB4MDEgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDE2LCAweDAzIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgxNywgMHgyZiB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MTgsIDB4Y2YgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDE5LCAweDA2IH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgxYSwgMHhmNSB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MWIsIDB4MDAgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDIwLCAweDE4IH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgyMSwgMHg4MCB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MjIsIDB4ODAgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDIzLCAweDAwIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgyNiwgMHhhMiB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MjcsIDB4ZWEgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDI4LCAweDIwIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgyOSwgMHgwMCB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MmEsIDB4MTAgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDJiLCAweDAwIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgyYywgMHg4OCB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MmQsIDB4OTEgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDJlLCAweDgwIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgyZiwgMHg0NCB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4NjAsIDB4MjcgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDYxLCAweDAyIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHg2MiwgMHg1ZiB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4NjMsIDB4ZDUgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDY0LCAweDU3IH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHg2NSwgMHg4MyB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4NjYsIDB4NTUgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDY3LCAweDkyIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHg2OCwgMHhjZiB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4NjksIDB4NzYgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDZhLCAweDIyIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHg2YiwgMHgwMCB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4NmMsIDB4MDIgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDZkLCAweDQ0IH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHg2ZSwgMHg4MCB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4NmYsIDB4MWQgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDcwLCAweDhiIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHg3MSwgMHgwMCB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4NzIsIDB4MTQgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDczLCAweDU0IH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHg3NCwgMHgwMCB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4NzUsIDB4OGUgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDc2LCAweDAwIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHg3NywgMHhmZiB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4NzgsIDB4ODAgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDc5LCAweDgwIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHg3YSwgMHg4MCB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4N2IsIDB4ZTIgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDdjLCAweDAwIH0sCi0JCXsgT1Y1MTFfRE9ORV9CVVMsIDB4MCwgMHgwMCB9LAotCX07Ci0KLQlQREVCVUcoNCwgInN0YXJ0aW5nIGNvbmZpZ3VyYXRpb24iKTsKLQotCS8qIFRoaXMgbG9va3MgcmVkdW5kYW50LCBidXQgaXMgbmVjZXNzYXJ5IGZvciBXZWJDYW0gMyAqLwotCW92LT5wcmltYXJ5X2kyY19zbGF2ZSA9IE9WN3h4MF9TSUQ7Ci0JaWYgKG92NTF4X3NldF9zbGF2ZV9pZHMob3YsIE9WN3h4MF9TSUQpIDwgMCkKLQkJcmV0dXJuIC0xOwotCi0JaWYgKGluaXRfb3Zfc2Vuc29yKG92KSA+PSAwKSB7Ci0JCVBERUJVRygxLCAiT1Y3eHgwIHNlbnNvciBpbml0YWxpemVkIChtZXRob2QgMSkiKTsKLQl9IGVsc2UgewotCQkvKiBSZXNldCB0aGUgNzZ4eCAqLwotCQlpZiAoaTJjX3cob3YsIDB4MTIsIDB4ODApIDwgMCkKLQkJCXJldHVybiAtMTsKLQotCQkvKiBXYWl0IGZvciBpdCB0byBpbml0aWFsaXplICovCi0JCW1zbGVlcCgxNTApOwotCi0JCWkgPSAwOwotCQlzdWNjZXNzID0gMDsKLQkJd2hpbGUgKGkgPD0gaTJjX2RldGVjdF90cmllcykgewotCQkJaWYgKChpMmNfcihvdiwgT1Y3NjEwX1JFR19JRF9ISUdIKSA9PSAweDdGKSAmJgotCQkJICAgIChpMmNfcihvdiwgT1Y3NjEwX1JFR19JRF9MT1cpID09IDB4QTIpKSB7Ci0JCQkJc3VjY2VzcyA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UgewotCQkJCWkrKzsKLQkJCX0KLQkJfQotCi0vLyBXYXMgKGkgPT0gaTJjX2RldGVjdF90cmllcykgcHJldmlvdXNseS4gVGhpcyBvYnZpb3VzbHkgdXNlZCB0byBhbHdheXMgcmVwb3J0Ci0vLyBzdWNjZXNzLiBXaGV0aGVyIGFueW9uZSBhY3R1YWxseSBkZXBlbmRlZCBvbiB0aGF0IGJ1ZyBpcyB1bmtub3duCi0JCWlmICgoaSA+PSBpMmNfZGV0ZWN0X3RyaWVzKSAmJiAoc3VjY2VzcyA9PSAwKSkgewotCQkJZXJyKCJGYWlsZWQgdG8gcmVhZCBzZW5zb3IgSUQuIFlvdSBtaWdodCBub3QgaGF2ZSBhbiIpOwotCQkJZXJyKCJPVjc2MTAvMjAsIG9yIGl0IG1heSBiZSBub3QgcmVzcG9uZGluZy4gUmVwb3J0Iik7Ci0JCQllcnIoInRoaXMgdG8gIiBFTUFJTCk7Ci0JCQllcnIoIlRoaXMgaXMgb25seSBhIHdhcm5pbmcuIFlvdSBjYW4gYXR0ZW1wdCB0byB1c2UiKTsKLQkJCWVycigieW91ciBjYW1lcmEgYW55d2F5Iik7Ci0vLyBPbmx5IGlzc3VlIGEgd2FybmluZyBmb3Igbm93Ci0vLwkJCXJldHVybiAtMTsKLQkJfSBlbHNlIHsKLQkJCVBERUJVRygxLCAiT1Y3eHgwIGluaXRpYWxpemVkIChtZXRob2QgMiwgJWR4KSIsIGkrMSk7Ci0JCX0KLQl9Ci0KLQkvKiBEZXRlY3Qgc2Vuc29yIChzdWIpdHlwZSAqLwotCXJjID0gaTJjX3Iob3YsIE9WNzYxMF9SRUdfQ09NX0kpOwotCi0JaWYgKHJjIDwgMCkgewotCQllcnIoIkVycm9yIGRldGVjdGluZyBzZW5zb3IgdHlwZSIpOwotCQlyZXR1cm4gLTE7Ci0JfSBlbHNlIGlmICgocmMgJiAzKSA9PSAzKSB7Ci0JCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsICJTZW5zb3IgaXMgYW4gT1Y3NjEwXG4iKTsKLQkJb3YtPnNlbnNvciA9IFNFTl9PVjc2MTA7Ci0JfSBlbHNlIGlmICgocmMgJiAzKSA9PSAxKSB7Ci0JCS8qIEkgZG9uJ3Qga25vdyB3aGF0J3MgZGlmZmVyZW50IGFib3V0IHRoZSA3NkJFIHlldC4gKi8KLQkJaWYgKGkyY19yKG92LCAweDE1KSAmIDEpCi0JCQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiU2Vuc29yIGlzIGFuIE9WNzYyMEFFXG4iKTsKLQkJZWxzZQotCQkJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIlNlbnNvciBpcyBhbiBPVjc2QkVcbiIpOwotCi0JCS8qIE9WNTExKyB3aWxsIHJldHVybiBhbGwgemVybyBpc29jIGRhdGEgdW5sZXNzIHdlCi0JCSAqIGNvbmZpZ3VyZSB0aGUgc2Vuc29yIGFzIGEgNzYyMC4gU29tZW9uZSBuZWVkcyB0bwotCQkgKiBmaW5kIHRoZSBleGFjdCByZWcuIHNldHRpbmcgdGhhdCBjYXVzZXMgdGhpcy4gKi8KLQkJaWYgKG92LT5icmlkZ2UgPT0gQlJHX09WNTExUExVUykgewotCQkJZGV2X2luZm8oJm92LT5kZXYtPmRldiwKLQkJCQkgIkVuYWJsaW5nIDUxMSsvNzYyMEFFIHdvcmthcm91bmRcbiIpOwotCQkJb3YtPnNlbnNvciA9IFNFTl9PVjc2MjA7Ci0JCX0gZWxzZSB7Ci0JCQlvdi0+c2Vuc29yID0gU0VOX09WNzZCRTsKLQkJfQotCX0gZWxzZSBpZiAoKHJjICYgMykgPT0gMCkgewotCQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiU2Vuc29yIGlzIGFuIE9WNzYyMFxuIik7Ci0JCW92LT5zZW5zb3IgPSBTRU5fT1Y3NjIwOwotCX0gZWxzZSB7Ci0JCWVycigiVW5rbm93biBpbWFnZSBzZW5zb3IgdmVyc2lvbjogJWQiLCByYyAmIDMpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JaWYgKG92LT5zZW5zb3IgPT0gU0VOX09WNzYyMCkgewotCQlQREVCVUcoNCwgIldyaXRpbmcgNzYyMCByZWdpc3RlcnMiKTsKLQkJaWYgKHdyaXRlX3JlZ3ZhbHMob3YsIGFSZWd2YWxzTm9ybTc2MjApKQotCQkJcmV0dXJuIC0xOwotCX0gZWxzZSB7Ci0JCVBERUJVRyg0LCAiV3JpdGluZyA3NjEwIHJlZ2lzdGVycyIpOwotCQlpZiAod3JpdGVfcmVndmFscyhvdiwgYVJlZ3ZhbHNOb3JtNzYxMCkpCi0JCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogU2V0IHNlbnNvci1zcGVjaWZpYyB2YXJzICovCi0Jb3YtPm1heHdpZHRoID0gNjQwOwotCW92LT5tYXhoZWlnaHQgPSA0ODA7Ci0Jb3YtPm1pbndpZHRoID0gNjQ7Ci0Jb3YtPm1pbmhlaWdodCA9IDQ4OwotCi0JLy8gRklYTUU6IFRoZXNlIGRvIG5vdCBtYXRjaCB0aGUgYWN0dWFsIHNldHRpbmdzIHlldAotCW92LT5icmlnaHRuZXNzID0gMHg4MCA8PCA4OwotCW92LT5jb250cmFzdCA9IDB4ODAgPDwgODsKLQlvdi0+Y29sb3VyID0gMHg4MCA8PCA4OwotCW92LT5odWUgPSAweDgwIDw8IDg7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogVGhpcyBpbml0aWFsaXplcyB0aGUgT1Y2NjIwLCBPVjY2MzAsIE9WNjYzMEFFLCBvciBPVjY2MzBBRiBzZW5zb3IuICovCi1zdGF0aWMgaW50Ci1vdjZ4eDBfY29uZmlndXJlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQotewotCWludCByYzsKLQotCXN0YXRpYyBzdHJ1Y3Qgb3Y1MTFfcmVndmFscyBhUmVndmFsc05vcm02eDIwW10gPSB7Ci0JCXsgT1Y1MTFfSTJDX0JVUywgMHgxMiwgMHg4MCB9LCAvKiByZXNldCAqLwotCQl7IE9WNTExX0kyQ19CVVMsIDB4MTEsIDB4MDEgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDAzLCAweDYwIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgwNSwgMHg3ZiB9LCAvKiBGb3Igd2hlbiBhdXRvYWRqdXN0IGlzIG9mZiAqLwotCQl7IE9WNTExX0kyQ19CVVMsIDB4MDcsIDB4YTggfSwKLQkJLyogVGhlIHJhdGlvIG9mIDB4MGMgYW5kIDB4MGQgIGNvbnRyb2xzIHRoZSB3aGl0ZSBwb2ludCAqLwotCQl7IE9WNTExX0kyQ19CVVMsIDB4MGMsIDB4MjQgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDBkLCAweDI0IH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgwZiwgMHgxNSB9LCAvKiBDT01TICovCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgxMCwgMHg3NSB9LCAvKiBBRUMgRXhwb3N1cmUgdGltZSAqLwotCQl7IE9WNTExX0kyQ19CVVMsIDB4MTIsIDB4MjQgfSwgLyogRW5hYmxlIEFHQyAqLwotCQl7IE9WNTExX0kyQ19CVVMsIDB4MTQsIDB4MDQgfSwKLQkJLyogMHgxNjogMHgwNiBoZWxwcyBmcmFtZSBzdGFiaWxpdHkgd2l0aCBtb3Zpbmcgb2JqZWN0cyAqLwotCQl7IE9WNTExX0kyQ19CVVMsIDB4MTYsIDB4MDYgfSwKLS8vCQl7IE9WNTExX0kyQ19CVVMsIDB4MjAsIDB4MzAgfSwgLyogQXBlcnR1cmUgY29ycmVjdGlvbiBlbmFibGUgKi8KLQkJeyBPVjUxMV9JMkNfQlVTLCAweDI2LCAweGIyIH0sIC8qIEJMQyBlbmFibGUgKi8KLQkJLyogMHgyODogMHgwNSBTZWxlY3RzIFJHQiBmb3JtYXQgaWYgUkdCIG9uICovCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgyOCwgMHgwNSB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MmEsIDB4MDQgfSwgLyogRGlzYWJsZSBmcmFtZXJhdGUgYWRqdXN0ICovCi0vLwkJeyBPVjUxMV9JMkNfQlVTLCAweDJiLCAweGFjIH0sIC8qIEZyYW1lcmF0ZTsgU2V0IDJhWzddIGZpcnN0ICovCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgyZCwgMHg5OSB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MzMsIDB4YTAgfSwgLyogQ29sb3IgUHJvY2Vzc2luZyBQYXJhbWV0ZXIgKi8KLQkJeyBPVjUxMV9JMkNfQlVTLCAweDM0LCAweGQyIH0sIC8qIE1heCBBL0QgcmFuZ2UgKi8KLQkJeyBPVjUxMV9JMkNfQlVTLCAweDM4LCAweDhiIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgzOSwgMHg0MCB9LAotCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgzYywgMHgzOSB9LCAvKiBFbmFibGUgQUVDIG1vZGUgY2hhbmdpbmcgKi8KLQkJeyBPVjUxMV9JMkNfQlVTLCAweDNjLCAweDNjIH0sIC8qIENoYW5nZSBBRUMgbW9kZSAqLwotCQl7IE9WNTExX0kyQ19CVVMsIDB4M2MsIDB4MjQgfSwgLyogRGlzYWJsZSBBRUMgbW9kZSBjaGFuZ2luZyAqLwotCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgzZCwgMHg4MCB9LAotCQkvKiBUaGVzZSBuZXh0IHR3byByZWdpc3RlcnMgKDB4NGEsIDB4NGIpIGFyZSB1bmRvY3VtZW50ZWQuIFRoZXkKLQkJICogY29udHJvbCB0aGUgY29sb3IgYmFsYW5jZSAqLwotCQl7IE9WNTExX0kyQ19CVVMsIDB4NGEsIDB4ODAgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDRiLCAweDgwIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHg0ZCwgMHhkMiB9LCAvKiBUaGlzIHJlZHVjZXMgbm9pc2UgYSBiaXQgKi8KLQkJeyBPVjUxMV9JMkNfQlVTLCAweDRlLCAweGMxIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHg0ZiwgMHgwNCB9LAotLy8gRG8gNTAtNTMgaGF2ZSBhbnkgZWZmZWN0PwotLy8gVG9nZ2xlIDB4MTJbMl0gb2ZmIGFuZCBvbiBoZXJlPwotCQl7IE9WNTExX0RPTkVfQlVTLCAweDAsIDB4MDAgfSwJLyogRU5EIE1BUktFUiAqLwotCX07Ci0KLQlzdGF0aWMgc3RydWN0IG92NTExX3JlZ3ZhbHMgYVJlZ3ZhbHNOb3JtNngzMFtdID0gewotCS8qT0sqLwl7IE9WNTExX0kyQ19CVVMsIDB4MTIsIDB4ODAgfSwgLyogcmVzZXQgKi8KLQkJeyBPVjUxMV9JMkNfQlVTLCAweDExLCAweDAwIH0sCi0JLypPSyovCXsgT1Y1MTFfSTJDX0JVUywgMHgwMywgMHg2MCB9LAotCS8qMEE/Ki8JeyBPVjUxMV9JMkNfQlVTLCAweDA1LCAweDdmIH0sIC8qIEZvciB3aGVuIGF1dG9hZGp1c3QgaXMgb2ZmICovCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgwNywgMHhhOCB9LAotCQkvKiBUaGUgcmF0aW8gb2YgMHgwYyBhbmQgMHgwZCAgY29udHJvbHMgdGhlIHdoaXRlIHBvaW50ICovCi0JLypPSyovCXsgT1Y1MTFfSTJDX0JVUywgMHgwYywgMHgyNCB9LAotCS8qT0sqLwl7IE9WNTExX0kyQ19CVVMsIDB4MGQsIDB4MjQgfSwKLQkvKkEqLwl7IE9WNTExX0kyQ19CVVMsIDB4MGUsIDB4MjAgfSwKLS8vCS8qMDQ/Ki8JeyBPVjUxMV9JMkNfQlVTLCAweDE0LCAweDgwIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgxNiwgMHgwMyB9LAotLy8JLypPSyovCXsgT1Y1MTFfSTJDX0JVUywgMHgyMCwgMHgzMCB9LCAvKiBBcGVydHVyZSBjb3JyZWN0aW9uIGVuYWJsZSAqLwotCQkvLyAyMSAmIDIyPyBUaGUgc3VnZ2VzdGVkIHZhbHVlcyBsb29rIHdyb25nLiBHbyB3aXRoIGRlZmF1bHQKLQkvKkEqLwl7IE9WNTExX0kyQ19CVVMsIDB4MjMsIDB4YzAgfSwKLQkvKkEqLwl7IE9WNTExX0kyQ19CVVMsIDB4MjUsIDB4OWEgfSwgLy8gQ2hlY2sgdGhpcyBhZ2FpbnN0IGRlZmF1bHQKLS8vCS8qT0sqLwl7IE9WNTExX0kyQ19CVVMsIDB4MjYsIDB4YjIgfSwgLyogQkxDIGVuYWJsZSAqLwotCi0JCS8qIDB4Mjg6IDB4MDUgU2VsZWN0cyBSR0IgZm9ybWF0IGlmIFJHQiBvbiAqLwotLy8JLyowND8qLwl7IE9WNTExX0kyQ19CVVMsIDB4MjgsIDB4MDUgfSwKLS8vCS8qMDQ/Ki8JeyBPVjUxMV9JMkNfQlVTLCAweDI4LCAweDQ1IH0sIC8vIERFQlVHOiBUcmlzdGF0ZSBVViBidXMKLQotCS8qT0sqLwl7IE9WNTExX0kyQ19CVVMsIDB4MmEsIDB4MDQgfSwgLyogRGlzYWJsZSBmcmFtZXJhdGUgYWRqdXN0ICovCi0vLwkvKk9LKi8JeyBPVjUxMV9JMkNfQlVTLCAweDJiLCAweGFjIH0sIC8qIEZyYW1lcmF0ZTsgU2V0IDJhWzddIGZpcnN0ICovCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgyZCwgMHg5OSB9LAotLy8JLypBKi8JeyBPVjUxMV9JMkNfQlVTLCAweDMzLCAweDI2IH0sIC8vIFJlc2VydmVkIGJpdHMgb24gNjYyMAotLy8JLypkMj8qLwl7IE9WNTExX0kyQ19CVVMsIDB4MzQsIDB4MDMgfSwgLyogTWF4IEEvRCByYW5nZSAqLwotLy8JLyo4Yj8qLwl7IE9WNTExX0kyQ19CVVMsIDB4MzgsIDB4ODMgfSwKLS8vCS8qNDA/Ki8JeyBPVjUxMV9JMkNfQlVTLCAweDM5LCAweGMwIH0sIC8vIDY2MzAgYWRkcyBiaXQgNwotLy8JCXsgT1Y1MTFfSTJDX0JVUywgMHgzYywgMHgzOSB9LCAvKiBFbmFibGUgQUVDIG1vZGUgY2hhbmdpbmcgKi8KLS8vCQl7IE9WNTExX0kyQ19CVVMsIDB4M2MsIDB4M2MgfSwgLyogQ2hhbmdlIEFFQyBtb2RlICovCi0vLwkJeyBPVjUxMV9JMkNfQlVTLCAweDNjLCAweDI0IH0sIC8qIERpc2FibGUgQUVDIG1vZGUgY2hhbmdpbmcgKi8KLQkJeyBPVjUxMV9JMkNfQlVTLCAweDNkLCAweDgwIH0sCi0vLwkvKkEqLwl7IE9WNTExX0kyQ19CVVMsIDB4M2YsIDB4MGUgfSwKLQotCQkvKiBUaGVzZSBuZXh0IHR3byByZWdpc3RlcnMgKDB4NGEsIDB4NGIpIGFyZSB1bmRvY3VtZW50ZWQuIFRoZXkKLQkJICogY29udHJvbCB0aGUgY29sb3IgYmFsYW5jZSAqLwotLy8JLypPSz8qLwl7IE9WNTExX0kyQ19CVVMsIDB4NGEsIDB4ODAgfSwgLy8gQ2hlY2sgdGhlc2UKLS8vCS8qT0s/Ki8JeyBPVjUxMV9JMkNfQlVTLCAweDRiLCAweDgwIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHg0ZCwgMHgxMCB9LCAvKiBVID0gMC41NjN1LCBWID0gMC43MTR2ICovCi0JLypjMT8qLwl7IE9WNTExX0kyQ19CVVMsIDB4NGUsIDB4NDAgfSwKLQotCQkvKiBVViBhdmVyYWdlIG1vZGUsIGNvbG9yIGtpbGxlcjogc3Ryb25nZXN0ICovCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHg0ZiwgMHgwNyB9LAotCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHg1NCwgMHgyMyB9LCAvKiBNYXggQUdDIGdhaW46IDE4ZEIgKi8KLQkJeyBPVjUxMV9JMkNfQlVTLCAweDU3LCAweDgxIH0sIC8qIChkZWZhdWx0KSAqLwotCQl7IE9WNTExX0kyQ19CVVMsIDB4NTksIDB4MDEgfSwgLyogQUdDIGRhcmsgY3VycmVudCBjb21wOiArMSAqLwotCQl7IE9WNTExX0kyQ19CVVMsIDB4NWEsIDB4MmMgfSwgLyogKHVuZG9jdW1lbnRlZCkgKi8KLQkJeyBPVjUxMV9JMkNfQlVTLCAweDViLCAweDBmIH0sIC8qIEFXQiBjaHJvbWluYW5jZSBsZXZlbHMgKi8KLS8vCQl7IE9WNTExX0kyQ19CVVMsIDB4NWMsIDB4MTAgfSwKLQkJeyBPVjUxMV9ET05FX0JVUywgMHgwLCAweDAwIH0sCS8qIEVORCBNQVJLRVIgKi8KLQl9OwotCi0JUERFQlVHKDQsICJzdGFydGluZyBzZW5zb3IgY29uZmlndXJhdGlvbiIpOwotCi0JaWYgKGluaXRfb3Zfc2Vuc29yKG92KSA8IDApIHsKLQkJZXJyKCJGYWlsZWQgdG8gcmVhZCBzZW5zb3IgSUQuIFlvdSBtaWdodCBub3QgaGF2ZSBhbiBPVjZ4eDAsIik7Ci0JCWVycigib3IgaXQgbWF5IGJlIG5vdCByZXNwb25kaW5nLiBSZXBvcnQgdGhpcyB0byAiIEVNQUlMKTsKLQkJcmV0dXJuIC0xOwotCX0gZWxzZSB7Ci0JCVBERUJVRygxLCAiT1Y2eHgwIHNlbnNvciBkZXRlY3RlZCIpOwotCX0KLQotCS8qIERldGVjdCBzZW5zb3IgKHN1Yil0eXBlICovCi0JcmMgPSBpMmNfcihvdiwgT1Y3NjEwX1JFR19DT01fSSk7Ci0KLQlpZiAocmMgPCAwKSB7Ci0JCWVycigiRXJyb3IgZGV0ZWN0aW5nIHNlbnNvciB0eXBlIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlpZiAoKHJjICYgMykgPT0gMCkgewotCQlvdi0+c2Vuc29yID0gU0VOX09WNjYzMDsKLQkJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIlNlbnNvciBpcyBhbiBPVjY2MzBcbiIpOwotCX0gZWxzZSBpZiAoKHJjICYgMykgPT0gMSkgewotCQlvdi0+c2Vuc29yID0gU0VOX09WNjYyMDsKLQkJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIlNlbnNvciBpcyBhbiBPVjY2MjBcbiIpOwotCX0gZWxzZSBpZiAoKHJjICYgMykgPT0gMikgewotCQlvdi0+c2Vuc29yID0gU0VOX09WNjYzMDsKLQkJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIlNlbnNvciBpcyBhbiBPVjY2MzBBRVxuIik7Ci0JfSBlbHNlIGlmICgocmMgJiAzKSA9PSAzKSB7Ci0JCW92LT5zZW5zb3IgPSBTRU5fT1Y2NjMwOwotCQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiU2Vuc29yIGlzIGFuIE9WNjYzMEFGXG4iKTsKLQl9Ci0KLQkvKiBTZXQgc2Vuc29yLXNwZWNpZmljIHZhcnMgKi8KLQlvdi0+bWF4d2lkdGggPSAzNTI7Ci0Jb3YtPm1heGhlaWdodCA9IDI4ODsKLQlvdi0+bWlud2lkdGggPSA2NDsKLQlvdi0+bWluaGVpZ2h0ID0gNDg7Ci0KLQkvLyBGSVhNRTogVGhlc2UgZG8gbm90IG1hdGNoIHRoZSBhY3R1YWwgc2V0dGluZ3MgeWV0Ci0Jb3YtPmJyaWdodG5lc3MgPSAweDgwIDw8IDg7Ci0Jb3YtPmNvbnRyYXN0ID0gMHg4MCA8PCA4OwotCW92LT5jb2xvdXIgPSAweDgwIDw8IDg7Ci0Jb3YtPmh1ZSA9IDB4ODAgPDwgODsKLQotCWlmIChvdi0+c2Vuc29yID09IFNFTl9PVjY2MjApIHsKLQkJUERFQlVHKDQsICJXcml0aW5nIDZ4MjAgcmVnaXN0ZXJzIik7Ci0JCWlmICh3cml0ZV9yZWd2YWxzKG92LCBhUmVndmFsc05vcm02eDIwKSkKLQkJCXJldHVybiAtMTsKLQl9IGVsc2UgewotCQlQREVCVUcoNCwgIldyaXRpbmcgNngzMCByZWdpc3RlcnMiKTsKLQkJaWYgKHdyaXRlX3JlZ3ZhbHMob3YsIGFSZWd2YWxzTm9ybTZ4MzApKQotCQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKiBUaGlzIGluaXRpYWxpemVzIHRoZSBLUzAxMjcgYW5kIEtTMDEyN0IgdmlkZW8gZGVjb2RlcnMuICovCi1zdGF0aWMgaW50Ci1rczAxMjdfY29uZmlndXJlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQotewotCWludCByYzsKLQotLy8gRklYTUU6IEkgZG9uJ3Qga25vdyBob3cgdG8gc3luYyBvciByZXNldCBpdCB5ZXQKLSNpZiAwCi0JaWYgKG92NTF4X2luaXRfa3Nfc2Vuc29yKG92KSA8IDApIHsKLQkJZXJyKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgS1MwMTI3Iik7Ci0JCXJldHVybiAtMTsKLQl9IGVsc2UgewotCQlQREVCVUcoMSwgIktTMDEyeChCKSBzZW5zb3IgZGV0ZWN0ZWQiKTsKLQl9Ci0jZW5kaWYKLQotCS8qIERldGVjdCBkZWNvZGVyIHN1YnR5cGUgKi8KLQlyYyA9IGkyY19yKG92LCAweDAwKTsKLQlpZiAocmMgPCAwKSB7Ci0JCWVycigiRXJyb3IgZGV0ZWN0aW5nIHNlbnNvciB0eXBlIik7Ci0JCXJldHVybiAtMTsKLQl9IGVsc2UgaWYgKHJjICYgMHgwOCkgewotCQlyYyA9IGkyY19yKG92LCAweDNkKTsKLQkJaWYgKHJjIDwgMCkgewotCQkJZXJyKCJFcnJvciBkZXRlY3Rpbmcgc2Vuc29yIHR5cGUiKTsKLQkJCXJldHVybiAtMTsKLQkJfSBlbHNlIGlmICgocmMgJiAweDBmKSA9PSAwKSB7Ci0JCQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiU2Vuc29yIGlzIGEgS1MwMTI3XG4iKTsKLQkJCW92LT5zZW5zb3IgPSBTRU5fS1MwMTI3OwotCQl9IGVsc2UgaWYgKChyYyAmIDB4MGYpID09IDkpIHsKLQkJCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsICJTZW5zb3IgaXMgYSBLUzAxMjdCIFJldi4gQVxuIik7Ci0JCQlvdi0+c2Vuc29yID0gU0VOX0tTMDEyN0I7Ci0JCX0KLQl9IGVsc2UgewotCQllcnIoIkVycm9yOiBTZW5zb3IgaXMgYW4gdW5zdXBwb3J0ZWQgS1MwMTIyIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQkvKiBTZXQgc2Vuc29yLXNwZWNpZmljIHZhcnMgKi8KLQlvdi0+bWF4d2lkdGggPSA2NDA7Ci0Jb3YtPm1heGhlaWdodCA9IDQ4MDsKLQlvdi0+bWlud2lkdGggPSA2NDsKLQlvdi0+bWluaGVpZ2h0ID0gNDg7Ci0KLQkvLyBGSVhNRTogVGhlc2UgZG8gbm90IG1hdGNoIHRoZSBhY3R1YWwgc2V0dGluZ3MgeWV0Ci0Jb3YtPmJyaWdodG5lc3MgPSAweDgwIDw8IDg7Ci0Jb3YtPmNvbnRyYXN0ID0gMHg4MCA8PCA4OwotCW92LT5jb2xvdXIgPSAweDgwIDw8IDg7Ci0Jb3YtPmh1ZSA9IDB4ODAgPDwgODsKLQotCS8qIFRoaXMgZGV2aWNlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiBCYWlsIG91dCBub3cuLi4gKi8KLQllcnIoIlRoaXMgc2Vuc29yIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiIpOwotCXJldHVybiAtMTsKLQotCXJldHVybiAwOwotfQotCi0vKiBUaGlzIGluaXRpYWxpemVzIHRoZSBTQUE3MTExQSB2aWRlbyBkZWNvZGVyLiAqLwotc3RhdGljIGludAotc2FhNzExMWFfY29uZmlndXJlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQotewotCWludCByYzsKLQotCS8qIFNpbmNlIHRoZXJlIGlzIG5vIHJlZ2lzdGVyIHJlc2V0IGNvbW1hbmQsIGFsbCByZWdpc3RlcnMgbXVzdCBiZQotCSAqIHdyaXR0ZW4sIG90aGVyd2lzZSBnaXZlcyBlcnJhdGljIHJlc3VsdHMgKi8KLQlzdGF0aWMgc3RydWN0IG92NTExX3JlZ3ZhbHMgYVJlZ3ZhbHNOb3JtU0FBNzExMUFbXSA9IHsKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDA2LCAweGNlIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgwNywgMHgwMCB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MTAsIDB4NDQgfSwgLyogWVVWNDIyLCAyNDAvMjg2IGxpbmVzICovCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgwZSwgMHgwMSB9LCAvKiBOVFNDIE0gb3IgUEFMIEJHSEkgKi8KLQkJeyBPVjUxMV9JMkNfQlVTLCAweDAwLCAweDAwIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgwMSwgMHgwMCB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MDMsIDB4MjMgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDA0LCAweDAwIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgwNSwgMHgwMCB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MDgsIDB4YzggfSwgLyogQXV0byBmaWVsZCBmcmVxICovCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgwOSwgMHgwMSB9LCAvKiBDaHJvbS4gdHJhcCBvZmYsIEFQRVI9MC4yNSAqLwotCQl7IE9WNTExX0kyQ19CVVMsIDB4MGEsIDB4ODAgfSwgLyogQlJJRz0xMjggKi8KLQkJeyBPVjUxMV9JMkNfQlVTLCAweDBiLCAweDQwIH0sIC8qIENPTlQ9MS4wICovCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgwYywgMHg0MCB9LCAvKiBTQVROPTEuMCAqLwotCQl7IE9WNTExX0kyQ19CVVMsIDB4MGQsIDB4MDAgfSwgLyogSFVFPTAgKi8KLQkJeyBPVjUxMV9JMkNfQlVTLCAweDBmLCAweDAwIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgxMSwgMHgwYyB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MTIsIDB4MDAgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDEzLCAweDAwIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgxNCwgMHgwMCB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MTUsIDB4MDAgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDE2LCAweDAwIH0sCi0JCXsgT1Y1MTFfSTJDX0JVUywgMHgxNywgMHgwMCB9LAotCQl7IE9WNTExX0kyQ19CVVMsIDB4MDIsIDB4YzAgfSwJLyogQ29tcG9zaXRlIGlucHV0IDAgKi8KLQkJeyBPVjUxMV9ET05FX0JVUywgMHgwLCAweDAwIH0sCi0JfTsKLQotLy8gRklYTUU6IEkgZG9uJ3Qga25vdyBob3cgdG8gc3luYyBvciByZXNldCBpdCB5ZXQKLSNpZiAwCi0JaWYgKG92NTF4X2luaXRfc2FhX3NlbnNvcihvdikgPCAwKSB7Ci0JCWVycigiRmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIFNBQTcxMTFBIik7Ci0JCXJldHVybiAtMTsKLQl9IGVsc2UgewotCQlQREVCVUcoMSwgIlNBQTcxMTFBIHNlbnNvciBkZXRlY3RlZCIpOwotCX0KLSNlbmRpZgotCi0JLyogNjQweDQ4MCBub3Qgc3VwcG9ydGVkIHdpdGggUEFMICovCi0JaWYgKG92LT5wYWwpIHsKLQkJb3YtPm1heHdpZHRoID0gMzIwOwotCQlvdi0+bWF4aGVpZ2h0ID0gMjQwOwkJLyogRXZlbiBmaWVsZCBvbmx5ICovCi0JfSBlbHNlIHsKLQkJb3YtPm1heHdpZHRoID0gNjQwOwotCQlvdi0+bWF4aGVpZ2h0ID0gNDgwOwkJLyogRXZlbi9PZGQgZmllbGRzICovCi0JfQotCi0Jb3YtPm1pbndpZHRoID0gMzIwOwotCW92LT5taW5oZWlnaHQgPSAyNDA7CQkvKiBFdmVuIGZpZWxkIG9ubHkgKi8KLQotCW92LT5oYXNfZGVjb2RlciA9IDE7Ci0Jb3YtPm51bV9pbnB1dHMgPSA4OwotCW92LT5ub3JtID0gVklERU9fTU9ERV9BVVRPOwotCW92LT5zdG9wX2R1cmluZ19zZXQgPSAwOwkvKiBEZWNvZGVyIGd1YXJhbnRlZXMgc3RhYmxlIGltYWdlICovCi0KLQkvKiBEZWNvZGVyIGRvZXNuJ3QgY2hhbmdlIHRoZXNlIHZhbHVlcywgc28gd2UgdXNlIHRoZXNlIGluc3RlYWQgb2YKLQkgKiBhY3V0YWxseSByZWFkaW5nIHRoZSByZWdpc3RlcnMgKHdoaWNoIGRvZXNuJ3Qgd29yaykgKi8KLQlvdi0+YnJpZ2h0bmVzcyA9IDB4ODAgPDwgODsKLQlvdi0+Y29udHJhc3QgPSAweDQwIDw8IDk7Ci0Jb3YtPmNvbG91ciA9IDB4NDAgPDwgOTsKLQlvdi0+aHVlID0gMzI3Njg7Ci0KLQlQREVCVUcoNCwgIldyaXRpbmcgU0FBNzExMUEgcmVnaXN0ZXJzIik7Ci0JaWYgKHdyaXRlX3JlZ3ZhbHMob3YsIGFSZWd2YWxzTm9ybVNBQTcxMTFBKSkKLQkJcmV0dXJuIC0xOwotCi0JLyogRGV0ZWN0IHZlcnNpb24gb2YgZGVjb2Rlci4gVGhpcyBtdXN0IGJlIGRvbmUgYWZ0ZXIgd3JpdGluZyB0aGUKLQkgKiBpbml0aWFsIHJlZ3Mgb3IgdGhlIGRlY29kZXIgd2lsbCBsb2NrIHVwLiAqLwotCXJjID0gaTJjX3Iob3YsIDB4MDApOwotCi0JaWYgKHJjIDwgMCkgewotCQllcnIoIkVycm9yIGRldGVjdGluZyBzZW5zb3IgdmVyc2lvbiIpOwotCQlyZXR1cm4gLTE7Ci0JfSBlbHNlIHsKLQkJZGV2X2luZm8oJm92LT5kZXYtPmRldiwKLQkJCSAiU2Vuc29yIGlzIGFuIFNBQTcxMTFBICh2ZXJzaW9uIDB4JXgpXG4iLCByYyk7Ci0JCW92LT5zZW5zb3IgPSBTRU5fU0FBNzExMUE7Ci0JfQotCi0JLy8gRklYTUU6IEZpeCB0aGlzIGZvciBPVjUxOCgrKQotCS8qIExhdGNoIHRvIG5lZ2F0aXZlIGVkZ2Ugb2YgY2xvY2suIE90aGVyd2lzZSwgd2UgZ2V0IGluY29ycmVjdAotCSAqIGNvbG9ycyBhbmQgaml0dGVyIGluIHRoZSBkaWdpdGFsIHNpZ25hbC4gKi8KLQlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTEpCi0JCXJlZ193KG92LCAweDExLCAweDAwKTsKLQllbHNlCi0JCWRldl93YXJuKCZvdi0+ZGV2LT5kZXYsCi0JCQkgIlNBQTcxMTFBIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggT1Y1MTgvT1Y1MTgrXG4iKTsKLQotCXJldHVybiAwOwotfQotCi0vKiBUaGlzIGluaXRpYWxpemVzIHRoZSBPVjUxMS9PVjUxMSsgYW5kIHRoZSBzZW5zb3IgKi8KLXN0YXRpYyBpbnQKLW92NTExX2NvbmZpZ3VyZShzdHJ1Y3QgdXNiX292NTExICpvdikKLXsKLQlzdGF0aWMgc3RydWN0IG92NTExX3JlZ3ZhbHMgYVJlZ3ZhbHNJbml0NTExW10gPSB7Ci0JCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfUkVTRVQsCTB4N2YgfSwKLQkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19JTklULAkJMHgwMSB9LAotCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX1JFU0VULAkweDdmIH0sCi0JCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfSU5JVCwJCTB4MDEgfSwKLQkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19SRVNFVCwJMHgzZiB9LAotCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX0lOSVQsCQkweDAxIH0sCi0JCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfUkVTRVQsCTB4M2QgfSwKLQkJeyBPVjUxMV9ET05FX0JVUywgMHgwLCAweDAwfSwKLQl9OwotCi0Jc3RhdGljIHN0cnVjdCBvdjUxMV9yZWd2YWxzIGFSZWd2YWxzTm9ybTUxMVtdID0gewotCQl7IE9WNTExX1JFR19CVVMsIFI1MTFfRFJBTV9GTE9XX0NUTCwgCTB4MDEgfSwKLQkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19TTkFQLAkJMHgwMCB9LAotCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX1NOQVAsCQkweDAyIH0sCi0JCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfU05BUCwJCTB4MDAgfSwKLQkJeyBPVjUxMV9SRUdfQlVTLCBSNTExX0ZJRk9fT1BUUywJMHgxZiB9LAotCQl7IE9WNTExX1JFR19CVVMsIFI1MTFfQ09NUF9FTiwJCTB4MDAgfSwKLQkJeyBPVjUxMV9SRUdfQlVTLCBSNTExX0NPTVBfTFVUX0VOLAkweDAzIH0sCi0JCXsgT1Y1MTFfRE9ORV9CVVMsIDB4MCwgMHgwMCB9LAotCX07Ci0KLQlzdGF0aWMgc3RydWN0IG92NTExX3JlZ3ZhbHMgYVJlZ3ZhbHNOb3JtNTExUGx1c1tdID0gewotCQl7IE9WNTExX1JFR19CVVMsIFI1MTFfRFJBTV9GTE9XX0NUTCwJMHhmZiB9LAotCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX1NOQVAsCQkweDAwIH0sCi0JCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfU05BUCwJCTB4MDIgfSwKLQkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19TTkFQLAkJMHgwMCB9LAotCQl7IE9WNTExX1JFR19CVVMsIFI1MTFfRklGT19PUFRTLAkweGZmIH0sCi0JCXsgT1Y1MTFfUkVHX0JVUywgUjUxMV9DT01QX0VOLAkJMHgwMCB9LAotCQl7IE9WNTExX1JFR19CVVMsIFI1MTFfQ09NUF9MVVRfRU4sCTB4MDMgfSwKLQkJeyBPVjUxMV9ET05FX0JVUywgMHgwLCAweDAwIH0sCi0JfTsKLQotCVBERUJVRyg0LCAiIik7Ci0KLQlvdi0+Y3VzdG9taWQgPSByZWdfcihvdiwgUjUxMV9TWVNfQ1VTVF9JRCk7Ci0JaWYgKG92LT5jdXN0b21pZCA8IDApIHsKLQkJZXJyKCJVbmFibGUgdG8gcmVhZCBjYW1lcmEgYnJpZGdlIHJlZ2lzdGVycyIpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCVBERUJVRyAoMSwgIkN1c3RvbUlEID0gJWQiLCBvdi0+Y3VzdG9taWQpOwotCW92LT5kZXNjID0gc3ltYm9saWMoY2FtbGlzdCwgb3YtPmN1c3RvbWlkKTsKLQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAibW9kZWw6ICVzXG4iLCBvdi0+ZGVzYyk7Ci0KLQlpZiAoMCA9PSBzdHJjbXAob3YtPmRlc2MsIE5PVF9ERUZJTkVEX1NUUikpIHsKLQkJZXJyKCJDYW1lcmEgdHlwZSAoJWQpIG5vdCByZWNvZ25pemVkIiwgb3YtPmN1c3RvbWlkKTsKLQkJZXJyKCJQbGVhc2Ugbm90aWZ5ICIgRU1BSUwgIiBvZiB0aGUgbmFtZSwiKTsKLQkJZXJyKCJtYW51ZmFjdHVyZXIsIG1vZGVsLCBhbmQgdGhpcyBudW1iZXIgb2YgeW91ciBjYW1lcmEuIik7Ci0JCWVycigiQWxzbyBpbmNsdWRlIHRoZSBvdXRwdXQgb2YgdGhlIGRldGVjdGlvbiBwcm9jZXNzLiIpOwotCX0KLQotCWlmIChvdi0+Y3VzdG9taWQgPT0gNzApCQkvKiBVU0IgTGlmZSBUViAoUEFML1NFQ0FNKSAqLwotCQlvdi0+cGFsID0gMTsKLQotCWlmICh3cml0ZV9yZWd2YWxzKG92LCBhUmVndmFsc0luaXQ1MTEpKQotCQlnb3RvIGVycm9yOwotCi0JaWYgKG92LT5sZWRfcG9saWN5ID09IExFRF9PRkYgfHwgb3YtPmxlZF9wb2xpY3kgPT0gTEVEX0FVVE8pCi0JCW92NTF4X2xlZF9jb250cm9sKG92LCAwKTsKLQotCS8qIFRoZSBPVjUxMSsgaGFzIHVuZG9jdW1lbnRlZCBiaXRzIGluIHRoZSBmbG93IGNvbnRyb2wgcmVnaXN0ZXIuCi0JICogU2V0dGluZyBpdCB0byAweGZmIGZpeGVzIHRoZSBjb3JydXB0aW9uIHdpdGggbW92aW5nIG9iamVjdHMuICovCi0JaWYgKG92LT5icmlkZ2UgPT0gQlJHX09WNTExKSB7Ci0JCWlmICh3cml0ZV9yZWd2YWxzKG92LCBhUmVndmFsc05vcm01MTEpKQotCQkJZ290byBlcnJvcjsKLQl9IGVsc2UgaWYgKG92LT5icmlkZ2UgPT0gQlJHX09WNTExUExVUykgewotCQlpZiAod3JpdGVfcmVndmFscyhvdiwgYVJlZ3ZhbHNOb3JtNTExUGx1cykpCi0JCQlnb3RvIGVycm9yOwotCX0gZWxzZSB7Ci0JCWVycigiSW52YWxpZCBicmlkZ2UiKTsKLQl9Ci0KLQlpZiAob3Y1MTFfaW5pdF9jb21wcmVzc2lvbihvdikpCi0JCWdvdG8gZXJyb3I7Ci0KLQlvdi0+cGFja2V0X251bWJlcmluZyA9IDE7Ci0Jb3Y1MTFfc2V0X3BhY2tldF9zaXplKG92LCAwKTsKLQotCW92LT5zbmFwX2VuYWJsZWQgPSBzbmFwc2hvdDsKLQotCS8qIFRlc3QgZm9yIDd4eDAgKi8KLQlQREVCVUcoMywgIlRlc3RpbmcgZm9yIDBWN3h4MCIpOwotCW92LT5wcmltYXJ5X2kyY19zbGF2ZSA9IE9WN3h4MF9TSUQ7Ci0JaWYgKG92NTF4X3NldF9zbGF2ZV9pZHMob3YsIE9WN3h4MF9TSUQpIDwgMCkKLQkJZ290byBlcnJvcjsKLQotCWlmIChpMmNfdyhvdiwgMHgxMiwgMHg4MCkgPCAwKSB7Ci0JCS8qIFRlc3QgZm9yIDZ4eDAgKi8KLQkJUERFQlVHKDMsICJUZXN0aW5nIGZvciAwVjZ4eDAiKTsKLQkJb3YtPnByaW1hcnlfaTJjX3NsYXZlID0gT1Y2eHgwX1NJRDsKLQkJaWYgKG92NTF4X3NldF9zbGF2ZV9pZHMob3YsIE9WNnh4MF9TSUQpIDwgMCkKLQkJCWdvdG8gZXJyb3I7Ci0KLQkJaWYgKGkyY193KG92LCAweDEyLCAweDgwKSA8IDApIHsKLQkJCS8qIFRlc3QgZm9yIDh4eDAgKi8KLQkJCVBERUJVRygzLCAiVGVzdGluZyBmb3IgMFY4eHgwIik7Ci0JCQlvdi0+cHJpbWFyeV9pMmNfc2xhdmUgPSBPVjh4eDBfU0lEOwotCQkJaWYgKG92NTF4X3NldF9zbGF2ZV9pZHMob3YsIE9WOHh4MF9TSUQpIDwgMCkKLQkJCQlnb3RvIGVycm9yOwotCi0JCQlpZiAoaTJjX3cob3YsIDB4MTIsIDB4ODApIDwgMCkgewotCQkJCS8qIFRlc3QgZm9yIFNBQTcxMTFBICovCi0JCQkJUERFQlVHKDMsICJUZXN0aW5nIGZvciBTQUE3MTExQSIpOwotCQkJCW92LT5wcmltYXJ5X2kyY19zbGF2ZSA9IFNBQTcxMTFBX1NJRDsKLQkJCQlpZiAob3Y1MXhfc2V0X3NsYXZlX2lkcyhvdiwgU0FBNzExMUFfU0lEKSA8IDApCi0JCQkJCWdvdG8gZXJyb3I7Ci0KLQkJCQlpZiAoaTJjX3cob3YsIDB4MGQsIDB4MDApIDwgMCkgewotCQkJCQkvKiBUZXN0IGZvciBLUzAxMjcgKi8KLQkJCQkJUERFQlVHKDMsICJUZXN0aW5nIGZvciBLUzAxMjciKTsKLQkJCQkJb3YtPnByaW1hcnlfaTJjX3NsYXZlID0gS1MwMTI3X1NJRDsKLQkJCQkJaWYgKG92NTF4X3NldF9zbGF2ZV9pZHMob3YsIEtTMDEyN19TSUQpIDwgMCkKLQkJCQkJCWdvdG8gZXJyb3I7Ci0KLQkJCQkJaWYgKGkyY193KG92LCAweDEwLCAweDAwKSA8IDApIHsKLQkJCQkJCWVycigiQ2FuJ3QgZGV0ZXJtaW5lIHNlbnNvciBzbGF2ZSBJRHMiKTsKLQkJCQkJCWdvdG8gZXJyb3I7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlpZiAoa3MwMTI3X2NvbmZpZ3VyZShvdikgPCAwKSB7Ci0JCQkJCQkJZXJyKCJGYWlsZWQgdG8gY29uZmlndXJlIEtTMDEyNyIpOwotCQkJCQkJCWdvdG8gZXJyb3I7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQlpZiAoc2FhNzExMWFfY29uZmlndXJlKG92KSA8IDApIHsKLQkJCQkJCWVycigiRmFpbGVkIHRvIGNvbmZpZ3VyZSBTQUE3MTExQSIpOwotCQkJCQkJZ290byBlcnJvcjsKLQkJCQkJfQotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJZXJyKCJEZXRlY3RlZCB1bnN1cHBvcnRlZCBPVjh4eDAgc2Vuc29yIik7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChvdjZ4eDBfY29uZmlndXJlKG92KSA8IDApIHsKLQkJCQllcnIoIkZhaWxlZCB0byBjb25maWd1cmUgT1Y2eHgwIik7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChvdjd4eDBfY29uZmlndXJlKG92KSA8IDApIHsKLQkJCWVycigiRmFpbGVkIHRvIGNvbmZpZ3VyZSBPVjd4eDAiKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyb3I6Ci0JZXJyKCJPVjUxMSBDb25maWcgZmFpbGVkIik7Ci0KLQlyZXR1cm4gLUVCVVNZOwotfQotCi0vKiBUaGlzIGluaXRpYWxpemVzIHRoZSBPVjUxOC9PVjUxOCsgYW5kIHRoZSBzZW5zb3IgKi8KLXN0YXRpYyBpbnQKLW92NTE4X2NvbmZpZ3VyZShzdHJ1Y3QgdXNiX292NTExICpvdikKLXsKLQkvKiBGb3IgNTE4IGFuZCA1MTgrICovCi0Jc3RhdGljIHN0cnVjdCBvdjUxMV9yZWd2YWxzIGFSZWd2YWxzSW5pdDUxOFtdID0gewotCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX1JFU0VULAkweDQwIH0sCi0JCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfSU5JVCwJCTB4ZTEgfSwKLQkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19SRVNFVCwJMHgzZSB9LAotCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX0lOSVQsCQkweGUxIH0sCi0JCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfUkVTRVQsCTB4MDAgfSwKLQkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19JTklULAkJMHhlMSB9LAotCQl7IE9WNTExX1JFR19CVVMsIDB4NDYsCQkJMHgwMCB9LAotCQl7IE9WNTExX1JFR19CVVMsIDB4NWQsCQkJMHgwMyB9LAotCQl7IE9WNTExX0RPTkVfQlVTLCAweDAsIDB4MDB9LAotCX07Ci0KLQlzdGF0aWMgc3RydWN0IG92NTExX3JlZ3ZhbHMgYVJlZ3ZhbHNOb3JtNTE4W10gPSB7Ci0JCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfU05BUCwJCTB4MDIgfSwgLyogUmVzZXQgKi8KLQkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19TTkFQLAkJMHgwMSB9LCAvKiBFbmFibGUgKi8KLQkJeyBPVjUxMV9SRUdfQlVTLCAweDMxLCAJCQkweDBmIH0sCi0JCXsgT1Y1MTFfUkVHX0JVUywgMHg1ZCwJCQkweDAzIH0sCi0JCXsgT1Y1MTFfUkVHX0JVUywgMHgyNCwJCQkweDlmIH0sCi0JCXsgT1Y1MTFfUkVHX0JVUywgMHgyNSwJCQkweDkwIH0sCi0JCXsgT1Y1MTFfUkVHX0JVUywgMHgyMCwJCQkweDAwIH0sCi0JCXsgT1Y1MTFfUkVHX0JVUywgMHg1MSwJCQkweDA0IH0sCi0JCXsgT1Y1MTFfUkVHX0JVUywgMHg3MSwJCQkweDE5IH0sCi0JCXsgT1Y1MTFfRE9ORV9CVVMsIDB4MCwgMHgwMCB9LAotCX07Ci0KLQlzdGF0aWMgc3RydWN0IG92NTExX3JlZ3ZhbHMgYVJlZ3ZhbHNOb3JtNTE4UGx1c1tdID0gewotCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX1NOQVAsCQkweDAyIH0sIC8qIFJlc2V0ICovCi0JCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfU05BUCwJCTB4MDEgfSwgLyogRW5hYmxlICovCi0JCXsgT1Y1MTFfUkVHX0JVUywgMHgzMSwgCQkJMHgwZiB9LAotCQl7IE9WNTExX1JFR19CVVMsIDB4NWQsCQkJMHgwMyB9LAotCQl7IE9WNTExX1JFR19CVVMsIDB4MjQsCQkJMHg5ZiB9LAotCQl7IE9WNTExX1JFR19CVVMsIDB4MjUsCQkJMHg5MCB9LAotCQl7IE9WNTExX1JFR19CVVMsIDB4MjAsCQkJMHg2MCB9LAotCQl7IE9WNTExX1JFR19CVVMsIDB4NTEsCQkJMHgwMiB9LAotCQl7IE9WNTExX1JFR19CVVMsIDB4NzEsCQkJMHgxOSB9LAotCQl7IE9WNTExX1JFR19CVVMsIDB4NDAsCQkJMHhmZiB9LAotCQl7IE9WNTExX1JFR19CVVMsIDB4NDEsCQkJMHg0MiB9LAotCQl7IE9WNTExX1JFR19CVVMsIDB4NDYsCQkJMHgwMCB9LAotCQl7IE9WNTExX1JFR19CVVMsIDB4MzMsCQkJMHgwNCB9LAotCQl7IE9WNTExX1JFR19CVVMsIDB4MjEsCQkJMHgxOSB9LAotCQl7IE9WNTExX1JFR19CVVMsIDB4M2YsCQkJMHgxMCB9LAotCQl7IE9WNTExX0RPTkVfQlVTLCAweDAsIDB4MDAgfSwKLQl9OwotCi0JUERFQlVHKDQsICIiKTsKLQotCS8qIEZpcnN0IDUgYml0cyBvZiBjdXN0b20gSUQgcmVnIGFyZSBhIHJldmlzaW9uIElEIG9uIE9WNTE4ICovCi0JZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIkRldmljZSByZXZpc2lvbiAlZFxuIiwKLQkJIDB4MUYgJiByZWdfcihvdiwgUjUxMV9TWVNfQ1VTVF9JRCkpOwotCi0JLyogR2l2ZSBpdCB0aGUgZGVmYXVsdCBkZXNjcmlwdGlvbiAqLwotCW92LT5kZXNjID0gc3ltYm9saWMoY2FtbGlzdCwgMCk7Ci0KLQlpZiAod3JpdGVfcmVndmFscyhvdiwgYVJlZ3ZhbHNJbml0NTE4KSkKLQkJZ290byBlcnJvcjsKLQotCS8qIFNldCBMRUQgR1BJTyBwaW4gdG8gb3V0cHV0IG1vZGUgKi8KLQlpZiAocmVnX3dfbWFzayhvdiwgMHg1NywgMHgwMCwgMHgwMikgPCAwKQotCQlnb3RvIGVycm9yOwotCi0JLyogTEVEIGlzIG9mZiBieSBkZWZhdWx0IHdpdGggT1Y1MTg7IGhhdmUgdG8gZXhwbGljaXRseSB0dXJuIGl0IG9uICovCi0JaWYgKG92LT5sZWRfcG9saWN5ID09IExFRF9PRkYgfHwgb3YtPmxlZF9wb2xpY3kgPT0gTEVEX0FVVE8pCi0JCW92NTF4X2xlZF9jb250cm9sKG92LCAwKTsKLQllbHNlCi0JCW92NTF4X2xlZF9jb250cm9sKG92LCAxKTsKLQotCS8qIERvbid0IHJlcXVpcmUgY29tcHJlc3Npb24gaWYgZHVtcHBpeCBpcyBlbmFibGVkOyBvdGhlcndpc2UgaXQncwotCSAqIHJlcXVpcmVkLiBPVjUxOCBoYXMgbm8gdW5jb21wcmVzc2VkIG1vZGUsIHRvIHNhdmUgUkFNLiAqLwotCWlmICghZHVtcHBpeCAmJiAhb3YtPmNvbXByZXNzKSB7Ci0JCW92LT5jb21wcmVzcyA9IDE7Ci0JCWRldl93YXJuKCZvdi0+ZGV2LT5kZXYsCi0JCQkgIkNvbXByZXNzaW9uIHJlcXVpcmVkIHdpdGggT1Y1MTguLi5lbmFibGluZ1xuIik7Ci0JfQotCi0JaWYgKG92LT5icmlkZ2UgPT0gQlJHX09WNTE4KSB7Ci0JCWlmICh3cml0ZV9yZWd2YWxzKG92LCBhUmVndmFsc05vcm01MTgpKQotCQkJZ290byBlcnJvcjsKLQl9IGVsc2UgaWYgKG92LT5icmlkZ2UgPT0gQlJHX09WNTE4UExVUykgewotCQlpZiAod3JpdGVfcmVndmFscyhvdiwgYVJlZ3ZhbHNOb3JtNTE4UGx1cykpCi0JCQlnb3RvIGVycm9yOwotCX0gZWxzZSB7Ci0JCWVycigiSW52YWxpZCBicmlkZ2UiKTsKLQl9Ci0KLQlpZiAocmVnX3cob3YsIDB4MmYsIDB4ODApIDwgMCkKLQkJZ290byBlcnJvcjsKLQotCWlmIChvdjUxOF9pbml0X2NvbXByZXNzaW9uKG92KSkKLQkJZ290byBlcnJvcjsKLQotCWlmIChvdi0+YnJpZGdlID09IEJSR19PVjUxOCkKLQl7Ci0JCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZnA7Ci0JCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdDsKLQkJX191MTYgbXhwcyA9IDA7Ci0KLQkJaWZwID0gdXNiX2lmbnVtX3RvX2lmKG92LT5kZXYsIDApOwotCQlpZiAoaWZwKSB7Ci0JCQlhbHQgPSB1c2JfYWx0bnVtX3RvX2FsdHNldHRpbmcoaWZwLCA3KTsKLQkJCWlmIChhbHQpCi0JCQkJbXhwcyA9IGxlMTZfdG9fY3B1KGFsdC0+ZW5kcG9pbnRbMF0uZGVzYy53TWF4UGFja2V0U2l6ZSk7Ci0JCX0KLQotCQkvKiBTb21lIE9WNTE4cyBoYXZlIHBhY2tldCBudW1iZXJpbmcgYnkgZGVmYXVsdCwgc29tZSBkb24ndCAqLwotCQlpZiAobXhwcyA9PSA4OTcpCi0JCQlvdi0+cGFja2V0X251bWJlcmluZyA9IDE7Ci0JCWVsc2UKLQkJCW92LT5wYWNrZXRfbnVtYmVyaW5nID0gMDsKLQl9IGVsc2UgewotCQkvKiBPVjUxOCsgaGFzIHBhY2tldCBudW1iZXJpbmcgdHVybmVkIG9uIGJ5IGRlZmF1bHQgKi8KLQkJb3YtPnBhY2tldF9udW1iZXJpbmcgPSAxOwotCX0KLQotCW92NTE4X3NldF9wYWNrZXRfc2l6ZShvdiwgMCk7Ci0KLQlvdi0+c25hcF9lbmFibGVkID0gc25hcHNob3Q7Ci0KLQkvKiBUZXN0IGZvciA3Nnh4ICovCi0Jb3YtPnByaW1hcnlfaTJjX3NsYXZlID0gT1Y3eHgwX1NJRDsKLQlpZiAob3Y1MXhfc2V0X3NsYXZlX2lkcyhvdiwgT1Y3eHgwX1NJRCkgPCAwKQotCQlnb3RvIGVycm9yOwotCi0JLyogVGhlIE9WNTE4IG11c3QgYmUgbW9yZSBhZ2dyZXNzaXZlIGFib3V0IHNlbnNvciBkZXRlY3Rpb24gc2luY2UKLQkgKiBJMkMgd3JpdGUgd2lsbCBuZXZlciBmYWlsIGlmIHRoZSBzZW5zb3IgaXMgbm90IHByZXNlbnQuIFdlIGhhdmUKLQkgKiB0byB0cnkgdG8gaW5pdGlhbGl6ZSB0aGUgc2Vuc29yIHRvIGRldGVjdCBpdHMgcHJlc2VuY2UgKi8KLQotCWlmIChpbml0X292X3NlbnNvcihvdikgPCAwKSB7Ci0JCS8qIFRlc3QgZm9yIDZ4eDAgKi8KLQkJb3YtPnByaW1hcnlfaTJjX3NsYXZlID0gT1Y2eHgwX1NJRDsKLQkJaWYgKG92NTF4X3NldF9zbGF2ZV9pZHMob3YsIE9WNnh4MF9TSUQpIDwgMCkKLQkJCWdvdG8gZXJyb3I7Ci0KLQkJaWYgKGluaXRfb3Zfc2Vuc29yKG92KSA8IDApIHsKLQkJCS8qIFRlc3QgZm9yIDh4eDAgKi8KLQkJCW92LT5wcmltYXJ5X2kyY19zbGF2ZSA9IE9WOHh4MF9TSUQ7Ci0JCQlpZiAob3Y1MXhfc2V0X3NsYXZlX2lkcyhvdiwgT1Y4eHgwX1NJRCkgPCAwKQotCQkJCWdvdG8gZXJyb3I7Ci0KLQkJCWlmIChpbml0X292X3NlbnNvcihvdikgPCAwKSB7Ci0JCQkJZXJyKCJDYW4ndCBkZXRlcm1pbmUgc2Vuc29yIHNsYXZlIElEcyIpOwotCQkJCWdvdG8gZXJyb3I7Ci0JCQl9IGVsc2UgewotCQkJCWVycigiRGV0ZWN0ZWQgdW5zdXBwb3J0ZWQgT1Y4eHgwIHNlbnNvciIpOwotCQkJCWdvdG8gZXJyb3I7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZiAob3Y2eHgwX2NvbmZpZ3VyZShvdikgPCAwKSB7Ci0JCQkJZXJyKCJGYWlsZWQgdG8gY29uZmlndXJlIE9WNnh4MCIpOwotCQkJCWdvdG8gZXJyb3I7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAob3Y3eHgwX2NvbmZpZ3VyZShvdikgPCAwKSB7Ci0JCQllcnIoIkZhaWxlZCB0byBjb25maWd1cmUgT1Y3eHgwIik7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQotCi0Jb3YtPm1heHdpZHRoID0gMzUyOwotCW92LT5tYXhoZWlnaHQgPSAyODg7Ci0KLQkvLyBUaGUgT1Y1MTggY2Fubm90IGdvIGFzIGxvdyBhcyB0aGUgc2Vuc29yIGNhbgotCW92LT5taW53aWR0aCA9IDE2MDsKLQlvdi0+bWluaGVpZ2h0ID0gMTIwOwotCi0JcmV0dXJuIDA7Ci0KLWVycm9yOgotCWVycigiT1Y1MTggQ29uZmlnIGZhaWxlZCIpOwotCi0JcmV0dXJuIC1FQlVTWTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBzeXNmcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgdXNiX292NTExICpjZF90b19vdihzdHJ1Y3QgZGV2aWNlICpjZCkKLXsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdG9fdmlkZW9fZGV2aWNlKGNkKTsKLQlyZXR1cm4gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfY3VzdG9tX2lkKHN0cnVjdCBkZXZpY2UgKmNkLAotCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgdXNiX292NTExICpvdiA9IGNkX3RvX292KGNkKTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgb3YtPmN1c3RvbWlkKTsKLX0KLXN0YXRpYyBERVZJQ0VfQVRUUihjdXN0b21faWQsIFNfSVJVR08sIHNob3dfY3VzdG9tX2lkLCBOVUxMKTsKLQotc3RhdGljIHNzaXplX3Qgc2hvd19tb2RlbChzdHJ1Y3QgZGV2aWNlICpjZCwKLQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgdXNiX292NTExICpvdiA9IGNkX3RvX292KGNkKTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgb3YtPmRlc2MpOwotfQotc3RhdGljIERFVklDRV9BVFRSKG1vZGVsLCBTX0lSVUdPLCBzaG93X21vZGVsLCBOVUxMKTsKLQotc3RhdGljIHNzaXplX3Qgc2hvd19icmlkZ2Uoc3RydWN0IGRldmljZSAqY2QsCi0JCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCB1c2Jfb3Y1MTEgKm92ID0gY2RfdG9fb3YoY2QpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBzeW1ib2xpYyhicmdsaXN0LCBvdi0+YnJpZGdlKSk7Ci19Ci1zdGF0aWMgREVWSUNFX0FUVFIoYnJpZGdlLCBTX0lSVUdPLCBzaG93X2JyaWRnZSwgTlVMTCk7Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfc2Vuc29yKHN0cnVjdCBkZXZpY2UgKmNkLAotCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgdXNiX292NTExICpvdiA9IGNkX3RvX292KGNkKTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgc3ltYm9saWMoc2VubGlzdCwgb3YtPnNlbnNvcikpOwotfQotc3RhdGljIERFVklDRV9BVFRSKHNlbnNvciwgU19JUlVHTywgc2hvd19zZW5zb3IsIE5VTEwpOwotCi1zdGF0aWMgc3NpemVfdCBzaG93X2JyaWdodG5lc3Moc3RydWN0IGRldmljZSAqY2QsCi0JCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgdXNiX292NTExICpvdiA9IGNkX3RvX292KGNkKTsKLQl1bnNpZ25lZCBzaG9ydCB4OwotCi0JaWYgKCFvdi0+ZGV2KQotCQlyZXR1cm4gLUVOT0RFVjsKLQlzZW5zb3JfZ2V0X2JyaWdodG5lc3Mob3YsICZ4KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgeCA+PiA4KTsKLX0KLXN0YXRpYyBERVZJQ0VfQVRUUihicmlnaHRuZXNzLCBTX0lSVUdPLCBzaG93X2JyaWdodG5lc3MsIE5VTEwpOwotCi1zdGF0aWMgc3NpemVfdCBzaG93X3NhdHVyYXRpb24oc3RydWN0IGRldmljZSAqY2QsCi0JCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgdXNiX292NTExICpvdiA9IGNkX3RvX292KGNkKTsKLQl1bnNpZ25lZCBzaG9ydCB4OwotCi0JaWYgKCFvdi0+ZGV2KQotCQlyZXR1cm4gLUVOT0RFVjsKLQlzZW5zb3JfZ2V0X3NhdHVyYXRpb24ob3YsICZ4KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgeCA+PiA4KTsKLX0KLXN0YXRpYyBERVZJQ0VfQVRUUihzYXR1cmF0aW9uLCBTX0lSVUdPLCBzaG93X3NhdHVyYXRpb24sIE5VTEwpOwotCi1zdGF0aWMgc3NpemVfdCBzaG93X2NvbnRyYXN0KHN0cnVjdCBkZXZpY2UgKmNkLAotCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCB1c2Jfb3Y1MTEgKm92ID0gY2RfdG9fb3YoY2QpOwotCXVuc2lnbmVkIHNob3J0IHg7Ci0KLQlpZiAoIW92LT5kZXYpCi0JCXJldHVybiAtRU5PREVWOwotCXNlbnNvcl9nZXRfY29udHJhc3Qob3YsICZ4KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgeCA+PiA4KTsKLX0KLXN0YXRpYyBERVZJQ0VfQVRUUihjb250cmFzdCwgU19JUlVHTywgc2hvd19jb250cmFzdCwgTlVMTCk7Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfaHVlKHN0cnVjdCBkZXZpY2UgKmNkLAotCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgdXNiX292NTExICpvdiA9IGNkX3RvX292KGNkKTsKLQl1bnNpZ25lZCBzaG9ydCB4OwotCi0JaWYgKCFvdi0+ZGV2KQotCQlyZXR1cm4gLUVOT0RFVjsKLQlzZW5zb3JfZ2V0X2h1ZShvdiwgJngpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB4ID4+IDgpOwotfQotc3RhdGljIERFVklDRV9BVFRSKGh1ZSwgU19JUlVHTywgc2hvd19odWUsIE5VTEwpOwotCi1zdGF0aWMgc3NpemVfdCBzaG93X2V4cG9zdXJlKHN0cnVjdCBkZXZpY2UgKmNkLAotCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCB1c2Jfb3Y1MTEgKm92ID0gY2RfdG9fb3YoY2QpOwotCXVuc2lnbmVkIGNoYXIgZXhwID0gMDsKLQotCWlmICghb3YtPmRldikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0Jc2Vuc29yX2dldF9leHBvc3VyZShvdiwgJmV4cCk7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGV4cCk7Ci19Ci1zdGF0aWMgREVWSUNFX0FUVFIoZXhwb3N1cmUsIFNfSVJVR08sIHNob3dfZXhwb3N1cmUsIE5VTEwpOwotCi1zdGF0aWMgaW50IG92X2NyZWF0ZV9zeXNmcyhzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KQotewotCWludCByYzsKLQotCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZ2ZGV2LT5kZXYsICZkZXZfYXR0cl9jdXN0b21faWQpOwotCWlmIChyYykgZ290byBlcnI7Ci0JcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnZkZXYtPmRldiwgJmRldl9hdHRyX21vZGVsKTsKLQlpZiAocmMpIGdvdG8gZXJyX2lkOwotCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZ2ZGV2LT5kZXYsICZkZXZfYXR0cl9icmlkZ2UpOwotCWlmIChyYykgZ290byBlcnJfbW9kZWw7Ci0JcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnZkZXYtPmRldiwgJmRldl9hdHRyX3NlbnNvcik7Ci0JaWYgKHJjKSBnb3RvIGVycl9icmlkZ2U7Ci0JcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnZkZXYtPmRldiwgJmRldl9hdHRyX2JyaWdodG5lc3MpOwotCWlmIChyYykgZ290byBlcnJfc2Vuc29yOwotCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZ2ZGV2LT5kZXYsICZkZXZfYXR0cl9zYXR1cmF0aW9uKTsKLQlpZiAocmMpIGdvdG8gZXJyX2JyaWdodDsKLQlyYyA9IGRldmljZV9jcmVhdGVfZmlsZSgmdmRldi0+ZGV2LCAmZGV2X2F0dHJfY29udHJhc3QpOwotCWlmIChyYykgZ290byBlcnJfc2F0OwotCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZ2ZGV2LT5kZXYsICZkZXZfYXR0cl9odWUpOwotCWlmIChyYykgZ290byBlcnJfY29udHJhc3Q7Ci0JcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnZkZXYtPmRldiwgJmRldl9hdHRyX2V4cG9zdXJlKTsKLQlpZiAocmMpIGdvdG8gZXJyX2h1ZTsKLQotCXJldHVybiAwOwotCi1lcnJfaHVlOgotCWRldmljZV9yZW1vdmVfZmlsZSgmdmRldi0+ZGV2LCAmZGV2X2F0dHJfaHVlKTsKLWVycl9jb250cmFzdDoKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnZkZXYtPmRldiwgJmRldl9hdHRyX2NvbnRyYXN0KTsKLWVycl9zYXQ6Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZ2ZGV2LT5kZXYsICZkZXZfYXR0cl9zYXR1cmF0aW9uKTsKLWVycl9icmlnaHQ6Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZ2ZGV2LT5kZXYsICZkZXZfYXR0cl9icmlnaHRuZXNzKTsKLWVycl9zZW5zb3I6Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZ2ZGV2LT5kZXYsICZkZXZfYXR0cl9zZW5zb3IpOwotZXJyX2JyaWRnZToKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnZkZXYtPmRldiwgJmRldl9hdHRyX2JyaWRnZSk7Ci1lcnJfbW9kZWw6Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZ2ZGV2LT5kZXYsICZkZXZfYXR0cl9tb2RlbCk7Ci1lcnJfaWQ6Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZ2ZGV2LT5kZXYsICZkZXZfYXR0cl9jdXN0b21faWQpOwotZXJyOgotCXJldHVybiByYzsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBVU0Igcm91dGluZXMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbnQKLW92NTF4X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqaWRlc2M7Ci0Jc3RydWN0IHVzYl9vdjUxMSAqb3Y7Ci0JaW50IGksIHJjLCBucjsKLQotCVBERUJVRygxLCAicHJvYmluZyBmb3IgZGV2aWNlLi4uIik7Ci0KLQkvKiBXZSBkb24ndCBoYW5kbGUgbXVsdGktY29uZmlnIGNhbWVyYXMgKi8KLQlpZiAoZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlkZXNjID0gJmludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjOwotCi0JaWYgKGlkZXNjLT5iSW50ZXJmYWNlQ2xhc3MgIT0gMHhGRikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKGlkZXNjLT5iSW50ZXJmYWNlU3ViQ2xhc3MgIT0gMHgwMCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoKG92ID0ga3phbGxvYyhzaXplb2YoKm92KSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKLQkJZXJyKCJjb3VsZG4ndCBrbWFsbG9jIG92IHN0cnVjdCIpOwotCQlnb3RvIGVycm9yX291dDsKLQl9Ci0KLQlvdi0+ZGV2ID0gZGV2OwotCW92LT5pZmFjZSA9IGlkZXNjLT5iSW50ZXJmYWNlTnVtYmVyOwotCW92LT5sZWRfcG9saWN5ID0gbGVkOwotCW92LT5jb21wcmVzcyA9IGNvbXByZXNzOwotCW92LT5saWdodGZyZXEgPSBsaWdodGZyZXE7Ci0Jb3YtPm51bV9pbnB1dHMgPSAxOwkgICAvKiBWaWRlbyBkZWNvZGVyIGluaXQgZnVuY3RzLiBjaGFuZ2UgdGhpcyAqLwotCW92LT5zdG9wX2R1cmluZ19zZXQgPSAhZmFzdHNldDsKLQlvdi0+YmFja2xpZ2h0ID0gYmFja2xpZ2h0OwotCW92LT5taXJyb3IgPSBtaXJyb3I7Ci0Jb3YtPmF1dG9fYnJ0ID0gYXV0b2JyaWdodDsKLQlvdi0+YXV0b19nYWluID0gYXV0b2dhaW47Ci0Jb3YtPmF1dG9fZXhwID0gYXV0b2V4cDsKLQotCXN3aXRjaCAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpIHsKLQljYXNlIFBST0RfT1Y1MTE6Ci0JCW92LT5icmlkZ2UgPSBCUkdfT1Y1MTE7Ci0JCW92LT5iY2xhc3MgPSBCQ0xfT1Y1MTE7Ci0JCWJyZWFrOwotCWNhc2UgUFJPRF9PVjUxMVBMVVM6Ci0JCW92LT5icmlkZ2UgPSBCUkdfT1Y1MTFQTFVTOwotCQlvdi0+YmNsYXNzID0gQkNMX09WNTExOwotCQlicmVhazsKLQljYXNlIFBST0RfT1Y1MTg6Ci0JCW92LT5icmlkZ2UgPSBCUkdfT1Y1MTg7Ci0JCW92LT5iY2xhc3MgPSBCQ0xfT1Y1MTg7Ci0JCWJyZWFrOwotCWNhc2UgUFJPRF9PVjUxOFBMVVM6Ci0JCW92LT5icmlkZ2UgPSBCUkdfT1Y1MThQTFVTOwotCQlvdi0+YmNsYXNzID0gQkNMX09WNTE4OwotCQlicmVhazsKLQljYXNlIFBST0RfTUUyQ0FNOgotCQlpZiAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSAhPSBWRU5EX01BVFRFTCkKLQkJCWdvdG8gZXJyb3I7Ci0JCW92LT5icmlkZ2UgPSBCUkdfT1Y1MTFQTFVTOwotCQlvdi0+YmNsYXNzID0gQkNMX09WNTExOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQllcnIoIlVua25vd24gcHJvZHVjdCBJRCAweCUwNHgiLCBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JZGV2X2luZm8oJmludGYtPmRldiwgIlVTQiAlcyB2aWRlbyBkZXZpY2UgZm91bmRcbiIsCi0JCSBzeW1ib2xpYyhicmdsaXN0LCBvdi0+YnJpZGdlKSk7Ci0KLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZvdi0+d3EpOwotCi0JbXV0ZXhfaW5pdCgmb3YtPmxvY2spOwkvKiB0byAxID09IGF2YWlsYWJsZSAqLwotCW11dGV4X2luaXQoJm92LT5idWZfbG9jayk7Ci0JbXV0ZXhfaW5pdCgmb3YtPmkyY19sb2NrKTsKLQltdXRleF9pbml0KCZvdi0+Y2J1Zl9sb2NrKTsKLQotCW92LT5idWZfc3RhdGUgPSBCVUZfTk9UX0FMTE9DQVRFRDsKLQotCWlmICh1c2JfbWFrZV9wYXRoKGRldiwgb3YtPnVzYl9wYXRoLCBPVjUxMV9VU0JfUEFUSF9MRU4pIDwgMCkgewotCQllcnIoInVzYl9tYWtlX3BhdGggZXJyb3IiKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQkvKiBBbGxvY2F0ZSBjb250cm9sIHRyYW5zZmVyIGJ1ZmZlci4gKi8KLQkvKiBNdXN0IGJlIGttYWxsb2MoKSdlZCwgZm9yIERNQSBjb21wYXRpYmlsaXR5ICovCi0Jb3YtPmNidWYgPSBrbWFsbG9jKE9WNTExX0NCVUZfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFvdi0+Y2J1ZikKLQkJZ290byBlcnJvcjsKLQotCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkgewotCQlpZiAob3Y1MThfY29uZmlndXJlKG92KSA8IDApCi0JCQlnb3RvIGVycm9yOwotCX0gZWxzZSB7Ci0JCWlmIChvdjUxMV9jb25maWd1cmUob3YpIDwgMCkKLQkJCWdvdG8gZXJyb3I7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IE9WNTExX05VTUZSQU1FUzsgaSsrKSB7Ci0JCW92LT5mcmFtZVtpXS5mcmFtZW51bSA9IGk7Ci0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm92LT5mcmFtZVtpXS53cSk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IE9WNTExX05VTVNCVUY7IGkrKykgewotCQlvdi0+c2J1ZltpXS5vdiA9IG92OwotCQlzcGluX2xvY2tfaW5pdCgmb3YtPnNidWZbaV0ubG9jayk7Ci0JCW92LT5zYnVmW2ldLm4gPSBpOwotCX0KLQotCS8qIFVubmVjZXNzYXJ5PyAoVGhpcyBpcyBkb25lIG9uIG9wZW4oKS4gTmVlZCB0byBtYWtlIHN1cmUgdmFyaWFibGVzCi0JICogYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHdpdGhvdXQgdGhpcyBiZWZvcmUgcmVtb3ZpbmcgaXQsIHRob3VnaCkuICovCi0JaWYgKG92NTF4X3NldF9kZWZhdWx0X3BhcmFtcyhvdikgPCAwKQotCQlnb3RvIGVycm9yOwotCi0jaWZkZWYgT1Y1MTFfREVCVUcKLQlpZiAoZHVtcF9icmlkZ2UpIHsKLQkJaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTExKQotCQkJb3Y1MTFfZHVtcF9yZWdzKG92KTsKLQkJZWxzZQotCQkJb3Y1MThfZHVtcF9yZWdzKG92KTsKLQl9Ci0jZW5kaWYKLQotCW92LT52ZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7Ci0JaWYgKCFvdi0+dmRldikKLQkJZ290byBlcnJvcjsKLQotCW1lbWNweShvdi0+dmRldiwgJnZkZXZfdGVtcGxhdGUsIHNpemVvZigqb3YtPnZkZXYpKTsKLQlvdi0+dmRldi0+cGFyZW50ID0gJmludGYtPmRldjsKLQl2aWRlb19zZXRfZHJ2ZGF0YShvdi0+dmRldiwgb3YpOwotCi0JbXV0ZXhfbG9jaygmb3YtPmxvY2spOwotCi0JLyogQ2hlY2sgdG8gc2VlIG5leHQgZnJlZSBkZXZpY2UgYW5kIG1hcmsgYXMgdXNlZCAqLwotCW5yID0gZmluZF9maXJzdF96ZXJvX2JpdCgmb3Y1MTFfZGV2dXNlZCwgT1Y1MTFfTUFYX1VOSVRfVklERU8pOwotCi0JLyogUmVnaXN0ZXJzIGRldmljZSAqLwotCWlmICh1bml0X3ZpZGVvW25yXSAhPSAwKQotCQlyYyA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShvdi0+dmRldiwgVkZMX1RZUEVfR1JBQkJFUiwKLQkJCQkJICAgdW5pdF92aWRlb1tucl0pOwotCWVsc2UKLQkJcmMgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2Uob3YtPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIC0xKTsKLQotCWlmIChyYyA8IDApIHsKLQkJZXJyKCJ2aWRlb19yZWdpc3Rlcl9kZXZpY2UgZmFpbGVkIik7Ci0JCW11dGV4X3VubG9jaygmb3YtPmxvY2spOwotCQlnb3RvIGVycm9yOwotCX0KLQotCS8qIE1hcmsgZGV2aWNlIGFzIHVzZWQgKi8KLQlvdjUxMV9kZXZ1c2VkIHw9IDEgPDwgbnI7Ci0Jb3YtPm5yID0gbnI7Ci0KLQlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiRGV2aWNlIGF0ICVzIHJlZ2lzdGVyZWQgdG8gJXNcbiIsCi0JCSBvdi0+dXNiX3BhdGgsIHZpZGVvX2RldmljZV9ub2RlX25hbWUob3YtPnZkZXYpKTsKLQotCXVzYl9zZXRfaW50ZmRhdGEoaW50Ziwgb3YpOwotCWlmIChvdl9jcmVhdGVfc3lzZnMob3YtPnZkZXYpKSB7Ci0JCWVycigib3ZfY3JlYXRlX3N5c2ZzIGZhaWxlZCIpOwotCQlvdjUxMV9kZXZ1c2VkICY9IH4oMSA8PCBucik7Ci0JCW11dGV4X3VubG9jaygmb3YtPmxvY2spOwotCQlnb3RvIGVycm9yOwotCX0KLQotCW11dGV4X3VubG9jaygmb3YtPmxvY2spOwotCi0JcmV0dXJuIDA7Ci0KLWVycm9yOgotCWlmIChvdi0+dmRldikgewotCQlpZiAoIXZpZGVvX2lzX3JlZ2lzdGVyZWQob3YtPnZkZXYpKQotCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2Uob3YtPnZkZXYpOwotCQllbHNlCi0JCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShvdi0+dmRldik7Ci0JCW92LT52ZGV2ID0gTlVMTDsKLQl9Ci0KLQlpZiAob3YtPmNidWYpIHsKLQkJbXV0ZXhfbG9jaygmb3YtPmNidWZfbG9jayk7Ci0JCWtmcmVlKG92LT5jYnVmKTsKLQkJb3YtPmNidWYgPSBOVUxMOwotCQltdXRleF91bmxvY2soJm92LT5jYnVmX2xvY2spOwotCX0KLQotCWtmcmVlKG92KTsKLQlvdiA9IE5VTEw7Ci0KLWVycm9yX291dDoKLQllcnIoIkNhbWVyYSBpbml0aWFsaXphdGlvbiBmYWlsZWQiKTsKLQlyZXR1cm4gLUVJTzsKLX0KLQotc3RhdGljIHZvaWQKLW92NTF4X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCi17Ci0Jc3RydWN0IHVzYl9vdjUxMSAqb3YgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwotCWludCBuOwotCi0JUERFQlVHKDMsICIiKTsKLQotCW11dGV4X2xvY2soJm92LT5sb2NrKTsKLQl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKLQotCS8qIEZyZWUgZGV2aWNlIG51bWJlciAqLwotCW92NTExX2RldnVzZWQgJj0gfigxIDw8IG92LT5ucik7Ci0KLQlpZiAob3YtPnZkZXYpCi0JCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKG92LT52ZGV2KTsKLQotCWZvciAobiA9IDA7IG4gPCBPVjUxMV9OVU1GUkFNRVM7IG4rKykKLQkJb3YtPmZyYW1lW25dLmdyYWJzdGF0ZSA9IEZSQU1FX0VSUk9SOwotCi0Jb3YtPmN1cmZyYW1lID0gLTE7Ci0KLQkvKiBUaGlzIHdpbGwgY2F1c2UgdGhlIHByb2Nlc3MgdG8gcmVxdWVzdCBhbm90aGVyIGZyYW1lICovCi0JZm9yIChuID0gMDsgbiA8IE9WNTExX05VTUZSQU1FUzsgbisrKQotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJm92LT5mcmFtZVtuXS53cSk7Ci0KLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJm92LT53cSk7Ci0KLQlvdi0+c3RyZWFtaW5nID0gMDsKLQlvdjUxeF91bmxpbmtfaXNvYyhvdik7Ci0JbXV0ZXhfdW5sb2NrKCZvdi0+bG9jayk7Ci0KLQlvdi0+ZGV2ID0gTlVMTDsKLQotCS8qIEZyZWUgdGhlIG1lbW9yeSAqLwotCWlmICghb3YtPnVzZXIpIHsKLQkJbXV0ZXhfbG9jaygmb3YtPmNidWZfbG9jayk7Ci0JCWtmcmVlKG92LT5jYnVmKTsKLQkJb3YtPmNidWYgPSBOVUxMOwotCQltdXRleF91bmxvY2soJm92LT5jYnVmX2xvY2spOwotCi0JCW92NTF4X2RlYWxsb2Mob3YpOwotCQlrZnJlZShvdik7Ci0JCW92ID0gTlVMTDsKLQl9Ci0KLQlQREVCVUcoMywgIkRpc2Nvbm5lY3QgY29tcGxldGUiKTsKLX0KLQotc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG92NTExX2RyaXZlciA9IHsKLQkubmFtZSA9CQkib3Y1MTEiLAotCS5pZF90YWJsZSA9CWRldmljZV90YWJsZSwKLQkucHJvYmUgPQlvdjUxeF9wcm9iZSwKLQkuZGlzY29ubmVjdCA9CW92NTF4X2Rpc2Nvbm5lY3QKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogIE1vZHVsZSByb3V0aW5lcwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbnQgX19pbml0Ci11c2Jfb3Y1MTFfaW5pdCh2b2lkKQotewotCWludCByZXR2YWw7Ci0KLQlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJm92NTExX2RyaXZlcik7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBvdXQ7Ci0KLQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCi0JICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwotCi1vdXQ6Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0Ci11c2Jfb3Y1MTFfZXhpdCh2b2lkKQotewotCXVzYl9kZXJlZ2lzdGVyKCZvdjUxMV9kcml2ZXIpOwotCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogZHJpdmVyIGRlcmVnaXN0ZXJlZFxuIik7Ci19Ci0KLW1vZHVsZV9pbml0KHVzYl9vdjUxMV9pbml0KTsKLW1vZHVsZV9leGl0KHVzYl9vdjUxMV9leGl0KTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDUwYzkyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y1MTEuaAorKysgL2Rldi9udWxsCkBAIC0xLDU3MyArMCwwIEBACi0jaWZuZGVmIF9fTElOVVhfT1Y1MTFfSAotI2RlZmluZSBfX0xJTlVYX09WNTExX0gKLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotCi0jZGVmaW5lIE9WNTExX0RFQlVHCS8qIFR1cm4gb24gZGVidWcgbWVzc2FnZXMgKi8KLQotI2lmZGVmIE9WNTExX0RFQlVHCi0JI2RlZmluZSBQREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgXAotCQlpZiAoZGVidWcgPj0gKGxldmVsKSkJXAotCQkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiWyVzOiVkXSBcbiIgZm10LCBcCi0JCV9fZnVuY19fLCBfX0xJTkVfXyAsICMjIGFyZ3MpCi0jZWxzZQotCSNkZWZpbmUgUERFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIGRvIHt9IHdoaWxlKDApCi0jZW5kaWYKLQotLyogVGhpcyBtYWNybyByZXN0cmljdHMgYW4gaW50IHZhcmlhYmxlIHRvIGFuIGluY2x1c2l2ZSByYW5nZSAqLwotI2RlZmluZSBSRVNUUklDVF9UT19SQU5HRSh2LG1pLG1hKSB7IFwKLQlpZiAoKHYpIDwgKG1pKSkgKHYpID0gKG1pKTsgXAotCWVsc2UgaWYgKCh2KSA+IChtYSkpICh2KSA9IChtYSk7IFwKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBERUZJTkVTIEZPUiBPVjUxMSBBTkQgT1RIRVIgQ0hJUFMgKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKiBVU0IgSURzICovCi0jZGVmaW5lIFZFTkRfT01OSVZJU0lPTgkweDA1QTkKLSNkZWZpbmUgUFJPRF9PVjUxMQkweDA1MTEKLSNkZWZpbmUgUFJPRF9PVjUxMVBMVVMJMHhBNTExCi0jZGVmaW5lIFBST0RfT1Y1MTgJMHgwNTE4Ci0jZGVmaW5lIFBST0RfT1Y1MThQTFVTCTB4QTUxOAotCi0jZGVmaW5lIFZFTkRfTUFUVEVMCTB4MDgxMwotI2RlZmluZSBQUk9EX01FMkNBTQkweDAwMDIKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiAgICAgT1Y1MXggUkVHSVNURVIgTU5FTU9OSUNTICAgICAgKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKiBDYW1lcmEgaW50ZXJmYWNlIHJlZ2lzdGVyIG51bWJlcnMgKi8KLSNkZWZpbmUgUjUxMV9DQU1fREVMQVkJCTB4MTAKLSNkZWZpbmUgUjUxMV9DQU1fRURHRQkJMHgxMQotI2RlZmluZSBSNTExX0NBTV9QWENOVAkJMHgxMgotI2RlZmluZSBSNTExX0NBTV9MTkNOVAkJMHgxMwotI2RlZmluZSBSNTExX0NBTV9QWERJVgkJMHgxNAotI2RlZmluZSBSNTExX0NBTV9MTkRJVgkJMHgxNQotI2RlZmluZSBSNTExX0NBTV9VVl9FTgkJMHgxNgotI2RlZmluZSBSNTExX0NBTV9MSU5FX01PREUJMHgxNwotI2RlZmluZSBSNTExX0NBTV9PUFRTCQkweDE4Ci0KLS8qIFNuYXBzaG90IG1vZGUgY2FtZXJhIGludGVyZmFjZSByZWdpc3RlciBudW1iZXJzICovCi0jZGVmaW5lIFI1MTFfU05BUF9GUkFNRQkJMHgxOQotI2RlZmluZSBSNTExX1NOQVBfUFhDTlQJCTB4MUEKLSNkZWZpbmUgUjUxMV9TTkFQX0xOQ05UCQkweDFCCi0jZGVmaW5lIFI1MTFfU05BUF9QWERJVgkJMHgxQwotI2RlZmluZSBSNTExX1NOQVBfTE5ESVYJCTB4MUQKLSNkZWZpbmUgUjUxMV9TTkFQX1VWX0VOCQkweDFFCi0jZGVmaW5lIFI1MTFfU05BUF9PUFRTCQkweDFGCi0KLS8qIERSQU0gcmVnaXN0ZXIgbnVtYmVycyAqLwotI2RlZmluZSBSNTExX0RSQU1fRkxPV19DVEwJMHgyMAotI2RlZmluZSBSNTExX0RSQU1fQVJDUAkJMHgyMQotI2RlZmluZSBSNTExX0RSQU1fTVJDCQkweDIyCi0jZGVmaW5lIFI1MTFfRFJBTV9SRkMJCTB4MjMKLQotLyogSVNPIEZJRk8gcmVnaXN0ZXIgbnVtYmVycyAqLwotI2RlZmluZSBSNTF4X0ZJRk9fUFNJWkUJCTB4MzAJLyogMiBieXRlcyB3aWRlIHcvIE9WNTE4KCspICovCi0jZGVmaW5lIFI1MTFfRklGT19PUFRTCQkweDMxCi0KLS8qIFBhcmFsbGVsIElPIHJlZ2lzdGVyIG51bWJlcnMgKi8KLSNkZWZpbmUgUjUxMV9QSU9fT1BUUwkJMHgzOAotI2RlZmluZSBSNTExX1BJT19EQVRBCQkweDM5Ci0jZGVmaW5lIFI1MTFfUElPX0JJU1QJCTB4M0UKLSNkZWZpbmUgUjUxOF9HUElPX0lOCQkweDU1CS8qIE9WNTE4KCspIG9ubHkgKi8KLSNkZWZpbmUgUjUxOF9HUElPX09VVAkJMHg1NgkvKiBPVjUxOCgrKSBvbmx5ICovCi0jZGVmaW5lIFI1MThfR1BJT19DVEwJCTB4NTcJLyogT1Y1MTgoKykgb25seSAqLwotI2RlZmluZSBSNTE4X0dQSU9fUFVMU0VfSU4JMHg1OAkvKiBPVjUxOCgrKSBvbmx5ICovCi0jZGVmaW5lIFI1MThfR1BJT19QVUxTRV9DTEVBUgkweDU5CS8qIE9WNTE4KCspIG9ubHkgKi8KLSNkZWZpbmUgUjUxOF9HUElPX1BVTFNFX1BPTAkweDVhCS8qIE9WNTE4KCspIG9ubHkgKi8KLSNkZWZpbmUgUjUxOF9HUElPX1BVTFNFX0VOCTB4NWIJLyogT1Y1MTgoKykgb25seSAqLwotI2RlZmluZSBSNTE4X0dQSU9fUkVTRVQJCTB4NWMJLyogT1Y1MTgoKykgb25seSAqLwotCi0vKiBJMkMgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFI1MTFfSTJDX0NUTAkJMHg0MAotI2RlZmluZSBSNTE4X0kyQ19DVEwJCTB4NDcJLyogT1Y1MTgoKykgb25seSAqLwotI2RlZmluZSBSNTF4X0kyQ19XX1NJRAkJMHg0MQotI2RlZmluZSBSNTF4X0kyQ19TQUREUl8zCTB4NDIKLSNkZWZpbmUgUjUxeF9JMkNfU0FERFJfMgkweDQzCi0jZGVmaW5lIFI1MXhfSTJDX1JfU0lECQkweDQ0Ci0jZGVmaW5lIFI1MXhfSTJDX0RBVEEJCTB4NDUKLSNkZWZpbmUgUjUxeF9JMkNfQ0xPQ0sJCTB4NDYKLSNkZWZpbmUgUjUxeF9JMkNfVElNRU9VVAkweDQ3Ci0KLS8qIEkyQyBzbmFwc2hvdCByZWdpc3RlcnMgKi8KLSNkZWZpbmUgUjUxMV9TSTJDX1NBRERSXzMJMHg0OAotI2RlZmluZSBSNTExX1NJMkNfREFUQQkJMHg0OQotCi0vKiBTeXN0ZW0gY29udHJvbCByZWdpc3RlcnMgKi8KLSNkZWZpbmUgUjUxeF9TWVNfUkVTRVQJCTB4NTAKLQkJLyogUmVzZXQgdHlwZSBkZWZpbml0aW9ucyAqLwotI2RlZmluZSAJT1Y1MTFfUkVTRVRfVURDCQkweDAxCi0jZGVmaW5lIAlPVjUxMV9SRVNFVF9JMkMJCTB4MDIKLSNkZWZpbmUgCU9WNTExX1JFU0VUX0ZJRk8JMHgwNAotI2RlZmluZSAJT1Y1MTFfUkVTRVRfT01OSUNFCTB4MDgKLSNkZWZpbmUgCU9WNTExX1JFU0VUX0RSQU0JMHgxMAotI2RlZmluZSAJT1Y1MTFfUkVTRVRfQ0FNX0lOVAkweDIwCi0jZGVmaW5lIAlPVjUxMV9SRVNFVF9PVjUxMQkweDQwCi0jZGVmaW5lIAlPVjUxMV9SRVNFVF9OT1JFR1MJMHgzRiAvKiBBbGwgYnV0IE9WNTExICYgcmVncyAqLwotI2RlZmluZSAJT1Y1MTFfUkVTRVRfQUxMCQkweDdGCi0KLSNkZWZpbmUgUjUxMV9TWVNfQ0xPQ0tfRElWCTB4NTEKLSNkZWZpbmUgUjUxeF9TWVNfU05BUAkJMHg1MgotI2RlZmluZSBSNTF4X1NZU19JTklUICAgICAgICAgCTB4NTMKLSNkZWZpbmUgUjUxMV9TWVNfUFdSX0NMSwkweDU0IC8qIE9WNTExKy9PVjUxOCgrKSBvbmx5ICovCi0jZGVmaW5lIFI1MTFfU1lTX0xFRF9DVEwJMHg1NSAvKiBPVjUxMSsgb25seSAqLwotI2RlZmluZSBSNTExX1NZU19VU0VSCQkweDVFCi0jZGVmaW5lIFI1MTFfU1lTX0NVU1RfSUQJMHg1RgotCi0vKiBPbW5pQ0UgKGNvbXByZXNzaW9uKSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgUjUxMV9DT01QX1BIWQkJMHg3MAotI2RlZmluZSBSNTExX0NPTVBfUEhVVgkJMHg3MQotI2RlZmluZSBSNTExX0NPTVBfUFZZCQkweDcyCi0jZGVmaW5lIFI1MTFfQ09NUF9QVlVWCQkweDczCi0jZGVmaW5lIFI1MTFfQ09NUF9RSFkJCTB4NzQKLSNkZWZpbmUgUjUxMV9DT01QX1FIVVYJCTB4NzUKLSNkZWZpbmUgUjUxMV9DT01QX1FWWQkJMHg3NgotI2RlZmluZSBSNTExX0NPTVBfUVZVVgkJMHg3NwotI2RlZmluZSBSNTExX0NPTVBfRU4JCTB4NzgKLSNkZWZpbmUgUjUxMV9DT01QX0xVVF9FTgkweDc5Ci0jZGVmaW5lIFI1MTFfQ09NUF9MVVRfQkVHSU4JMHg4MAotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qICAgICAgICAgQUxURVJOQVRFIE5VTUJFUlMgICAgICAgICAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIEFsdGVybmF0ZSBudW1iZXJzIGZvciB2YXJpb3VzIG1heCBwYWNrZXQgc2l6ZXMgKE9WNTExIG9ubHkpICovCi0jZGVmaW5lIE9WNTExX0FMVF9TSVpFXzk5MgkwCi0jZGVmaW5lIE9WNTExX0FMVF9TSVpFXzk5MwkxCi0jZGVmaW5lIE9WNTExX0FMVF9TSVpFXzc2OAkyCi0jZGVmaW5lIE9WNTExX0FMVF9TSVpFXzc2OQkzCi0jZGVmaW5lIE9WNTExX0FMVF9TSVpFXzUxMgk0Ci0jZGVmaW5lIE9WNTExX0FMVF9TSVpFXzUxMwk1Ci0jZGVmaW5lIE9WNTExX0FMVF9TSVpFXzI1Nwk2Ci0jZGVmaW5lIE9WNTExX0FMVF9TSVpFXzAJNwotCi0vKiBBbHRlcm5hdGUgbnVtYmVycyBmb3IgdmFyaW91cyBtYXggcGFja2V0IHNpemVzIChPVjUxMSsgb25seSkgKi8KLSNkZWZpbmUgT1Y1MTFQTFVTX0FMVF9TSVpFXzAJMAotI2RlZmluZSBPVjUxMVBMVVNfQUxUX1NJWkVfMzMJMQotI2RlZmluZSBPVjUxMVBMVVNfQUxUX1NJWkVfMTI5CTIKLSNkZWZpbmUgT1Y1MTFQTFVTX0FMVF9TSVpFXzI1NwkzCi0jZGVmaW5lIE9WNTExUExVU19BTFRfU0laRV8zODUJNAotI2RlZmluZSBPVjUxMVBMVVNfQUxUX1NJWkVfNTEzCTUKLSNkZWZpbmUgT1Y1MTFQTFVTX0FMVF9TSVpFXzc2OQk2Ci0jZGVmaW5lIE9WNTExUExVU19BTFRfU0laRV85NjEJNwotCi0vKiBBbHRlcm5hdGUgbnVtYmVycyBmb3IgdmFyaW91cyBtYXggcGFja2V0IHNpemVzIChPVjUxOCgrKSBvbmx5KSAqLwotI2RlZmluZSBPVjUxOF9BTFRfU0laRV8wCTAKLSNkZWZpbmUgT1Y1MThfQUxUX1NJWkVfMTI4CTEKLSNkZWZpbmUgT1Y1MThfQUxUX1NJWkVfMjU2CTIKLSNkZWZpbmUgT1Y1MThfQUxUX1NJWkVfMzg0CTMKLSNkZWZpbmUgT1Y1MThfQUxUX1NJWkVfNTEyCTQKLSNkZWZpbmUgT1Y1MThfQUxUX1NJWkVfNjQwCTUKLSNkZWZpbmUgT1Y1MThfQUxUX1NJWkVfNzY4CTYKLSNkZWZpbmUgT1Y1MThfQUxUX1NJWkVfODk2CTcKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiAgICAgT1Y3NjEwIFJFR0lTVEVSIE1ORU1PTklDUyAgICAgKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKiBPVjc2MTAgcmVnaXN0ZXJzICovCi0jZGVmaW5lIE9WNzYxMF9SRUdfR0FJTiAgICAgICAgICAweDAwCS8qIGdhaW4gc2V0dGluZyAoNTowKSAqLwotI2RlZmluZSBPVjc2MTBfUkVHX0JMVUUgICAgICAgICAgMHgwMQkvKiBibHVlIGNoYW5uZWwgYmFsYW5jZSAqLwotI2RlZmluZSBPVjc2MTBfUkVHX1JFRCAgICAgICAgICAgMHgwMgkvKiByZWQgY2hhbm5lbCBiYWxhbmNlICovCi0jZGVmaW5lIE9WNzYxMF9SRUdfU0FUICAgICAgICAgICAweDAzCS8qIHNhdHVyYXRpb24gKi8KLQkJCQkJLyogMDQgcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgT1Y3NjEwX1JFR19DTlQgICAgICAgICAgIDB4MDUJLyogWSBjb250cmFzdCAqLwotI2RlZmluZSBPVjc2MTBfUkVHX0JSVCAgICAgICAgICAgMHgwNgkvKiBZIGJyaWdodG5lc3MgKi8KLQkJCQkJLyogMDgtMGIgcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgT1Y3NjEwX1JFR19CTFVFX0JJQVMgICAgIDB4MEMJLyogYmx1ZSBjaGFubmVsIGJpYXMgKDU6MCkgKi8KLSNkZWZpbmUgT1Y3NjEwX1JFR19SRURfQklBUyAgICAgIDB4MEQJLyogcmVhZCBjaGFubmVsIGJpYXMgKDU6MCkgKi8KLSNkZWZpbmUgT1Y3NjEwX1JFR19HQU1NQV9DT0VGRiAgIDB4MEUJLyogZ2FtbWEgc2V0dGluZ3MgKi8KLSNkZWZpbmUgT1Y3NjEwX1JFR19XQl9SQU5HRSAgICAgIDB4MEYJLyogQUVDL0FMQy9TLUFXQiBzZXR0aW5ncyAqLwotI2RlZmluZSBPVjc2MTBfUkVHX0VYUCAgICAgICAgICAgMHgxMAkvKiBtYW51YWwgZXhwb3N1cmUgc2V0dGluZyAqLwotI2RlZmluZSBPVjc2MTBfUkVHX0NMT0NLICAgICAgICAgMHgxMQkvKiBwb2xhcml0eS9jbG9jayBwcmVzY2FsZXIgKi8KLSNkZWZpbmUgT1Y3NjEwX1JFR19DT01fQSAgICAgICAgIDB4MTIJLyogbWlzYyBjb21tb24gcmVncyAqLwotI2RlZmluZSBPVjc2MTBfUkVHX0NPTV9CICAgICAgICAgMHgxMwkvKiBtaXNjIGNvbW1vbiByZWdzICovCi0jZGVmaW5lIE9WNzYxMF9SRUdfQ09NX0MgICAgICAgICAweDE0CS8qIG1pc2MgY29tbW9uIHJlZ3MgKi8KLSNkZWZpbmUgT1Y3NjEwX1JFR19DT01fRCAgICAgICAgIDB4MTUJLyogbWlzYyBjb21tb24gcmVncyAqLwotI2RlZmluZSBPVjc2MTBfUkVHX0ZJRUxEX0RJVklERSAgMHgxNgkvKiBmaWVsZCBpbnRlcnZhbC9tb2RlIHNldHRpbmdzICovCi0jZGVmaW5lIE9WNzYxMF9SRUdfSFdJTl9TVEFSVCAgICAweDE3CS8qIGhvcml6b250YWwgd2luZG93IHN0YXJ0ICovCi0jZGVmaW5lIE9WNzYxMF9SRUdfSFdJTl9FTkQgICAgICAweDE4CS8qIGhvcml6b250YWwgd2luZG93IGVuZCAqLwotI2RlZmluZSBPVjc2MTBfUkVHX1ZXSU5fU1RBUlQgICAgMHgxOQkvKiB2ZXJ0aWNhbCB3aW5kb3cgc3RhcnQgKi8KLSNkZWZpbmUgT1Y3NjEwX1JFR19WV0lOX0VORCAgICAgIDB4MUEJLyogdmVydGljYWwgd2luZG93IGVuZCAqLwotI2RlZmluZSBPVjc2MTBfUkVHX1BJWEVMX1NISUZUICAgMHgxQgkvKiBwaXhlbCBzaGlmdCAqLwotI2RlZmluZSBPVjc2MTBfUkVHX0lEX0hJR0ggICAgICAgMHgxQwkvKiBtYW51ZmFjdHVyZXIgSUQgTVNCICovCi0jZGVmaW5lIE9WNzYxMF9SRUdfSURfTE9XICAgICAgICAweDFECS8qIG1hbnVmYWN0dXJlciBJRCBMU0IgKi8KLQkJCQkJLyogMGUtMGYgcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgT1Y3NjEwX1JFR19DT01fRSAgICAgICAgIDB4MjAJLyogbWlzYyBjb21tb24gcmVncyAqLwotI2RlZmluZSBPVjc2MTBfUkVHX1lPRkZTRVQgICAgICAgMHgyMQkvKiBZIGNoYW5uZWwgb2Zmc2V0ICovCi0jZGVmaW5lIE9WNzYxMF9SRUdfVU9GRlNFVCAgICAgICAweDIyCS8qIFUgY2hhbm5lbCBvZmZzZXQgKi8KLQkJCQkJLyogMjMgcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgT1Y3NjEwX1JFR19FQ1cgICAgICAgICAgIDB4MjQJLyogRXhwb3N1cmUgd2hpdGUgbGV2ZWwgZm9yIEFFQyAqLwotI2RlZmluZSBPVjc2MTBfUkVHX0VDQiAgICAgICAgICAgMHgyNQkvKiBFeHBvc3VyZSBibGFjayBsZXZlbCBmb3IgQUVDICovCi0jZGVmaW5lIE9WNzYxMF9SRUdfQ09NX0YgICAgICAgICAweDI2CS8qIG1pc2Mgc2V0dGluZ3MgKi8KLSNkZWZpbmUgT1Y3NjEwX1JFR19DT01fRyAgICAgICAgIDB4MjcJLyogbWlzYyBzZXR0aW5ncyAqLwotI2RlZmluZSBPVjc2MTBfUkVHX0NPTV9IICAgICAgICAgMHgyOAkvKiBtaXNjIHNldHRpbmdzICovCi0jZGVmaW5lIE9WNzYxMF9SRUdfQ09NX0kgICAgICAgICAweDI5CS8qIG1pc2Mgc2V0dGluZ3MgKi8KLSNkZWZpbmUgT1Y3NjEwX1JFR19GUkFNRVJBVEVfSCAgIDB4MkEJLyogZnJhbWUgcmF0ZSBNU0IgKyBtaXNjICovCi0jZGVmaW5lIE9WNzYxMF9SRUdfRlJBTUVSQVRFX0wgICAweDJCCS8qIGZyYW1lIHJhdGUgTFNCICovCi0jZGVmaW5lIE9WNzYxMF9SRUdfQUxDICAgICAgICAgICAweDJDCS8qIEF1dG8gTGV2ZWwgQ29udHJvbCBzZXR0aW5ncyAqLwotI2RlZmluZSBPVjc2MTBfUkVHX0NPTV9KICAgICAgICAgMHgyRAkvKiBtaXNjIHNldHRpbmdzICovCi0jZGVmaW5lIE9WNzYxMF9SRUdfVk9GRlNFVCAgICAgICAweDJFCS8qIFYgY2hhbm5lbCBvZmZzZXQgYWRqdXN0bWVudCAqLwotI2RlZmluZSBPVjc2MTBfUkVHX0FSUkFZX0JJQVMJIDB4MkYJLyogQXJyYXkgYmlhcyAtLSBkb24ndCBjaGFuZ2UgKi8KLQkJCQkJLyogMzAtMzIgcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgT1Y3NjEwX1JFR19ZR0FNTUEgICAgICAgIDB4MzMJLyogbWlzYyBnYW1tYSBzZXR0aW5ncyAoNzo2KSAqLwotI2RlZmluZSBPVjc2MTBfUkVHX0JJQVNfQURKVVNUICAgMHgzNAkvKiBtaXNjIGJpYXMgc2V0dGluZ3MgKi8KLSNkZWZpbmUgT1Y3NjEwX1JFR19DT01fTCAgICAgICAgIDB4MzUJLyogbWlzYyBzZXR0aW5ncyAqLwotCQkJCQkvKiAzNi0zNyByZXNlcnZlZCAqLwotI2RlZmluZSBPVjc2MTBfUkVHX0NPTV9LICAgICAgICAgMHgzOAkvKiBtaXNjIHJlZ2lzdGVycyAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qICAgICAgICAgICBJMkMgQUREUkVTU0VTICAgICAgICAgICAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNkZWZpbmUgT1Y3eHgwX1NJRCAgIDB4NDIKLSNkZWZpbmUgT1Y2eHgwX1NJRCAgIDB4QzAKLSNkZWZpbmUgT1Y4eHgwX1NJRCAgIDB4QTAKLSNkZWZpbmUgS1MwMTI3X1NJRCAgIDB4RDgKLSNkZWZpbmUgU0FBNzExMUFfU0lEIDB4NDgKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiAgICAgICBNSVNDRUxMQU5FT1VTIERFRklORVMgICAgICAgKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jZGVmaW5lIEkyQ19DTE9DS19QUkVTQ0FMRVIgCTB4MDMKLQotI2RlZmluZSBGUkFNRVNfUEVSX0RFU0MJCTEwCS8qIEZJWE1FIC0gV2hhdCBzaG91bGQgdGhpcyBiZT8gKi8KLSNkZWZpbmUgTUFYX0ZSQU1FX1NJWkVfUEVSX0RFU0MJOTkzCS8qIEZvciBzdGF0aWNhbGx5IGFsbG9jYXRlZCBzdHVmZiAqLwotI2RlZmluZSBQSVhFTFNfUEVSX1NFRwkJMjU2CS8qIFBpeGVscyBwZXIgc2VnbWVudCAqLwotCi0jZGVmaW5lIE9WNTExX0VORFBPSU5UX0FERFJFU1MJMQkvKiBJc29jIGVuZHBvaW50IG51bWJlciAqLwotCi0jZGVmaW5lIE9WNTExX05VTUZSQU1FUwkyCi0jaWYgT1Y1MTFfTlVNRlJBTUVTID4gVklERU9fTUFYX0ZSQU1FCi0JI2Vycm9yICJPVjUxMV9OVU1GUkFNRVMgaXMgdG9vIGhpZ2giCi0jZW5kaWYKLQotI2RlZmluZSBPVjUxMV9OVU1TQlVGCQkyCi0KLS8qIENvbnRyb2wgdHJhbnNmZXJzIHVzZSB1cCB0byA0IGJ5dGVzICovCi0jZGVmaW5lIE9WNTExX0NCVUZfU0laRQkJNAotCi0vKiBTaXplIG9mIHVzYl9tYWtlX3BhdGgoKSBidWZmZXIgKi8KLSNkZWZpbmUgT1Y1MTFfVVNCX1BBVEhfTEVOCTY0Ci0KLS8qIEJyaWRnZSB0eXBlcyAqLwotZW51bSB7Ci0JQlJHX1VOS05PV04sCi0JQlJHX09WNTExLAotCUJSR19PVjUxMVBMVVMsCi0JQlJHX09WNTE4LAotCUJSR19PVjUxOFBMVVMsCi19OwotCi0vKiBCcmlkZ2UgY2xhc3NlcyAqLwotZW51bSB7Ci0JQkNMX1VOS05PV04sCi0JQkNMX09WNTExLAotCUJDTF9PVjUxOCwKLX07Ci0KLS8qIFNlbnNvciB0eXBlcyAqLwotZW51bSB7Ci0JU0VOX1VOS05PV04sCi0JU0VOX09WNzZCRSwKLQlTRU5fT1Y3NjEwLAotCVNFTl9PVjc2MjAsCi0JU0VOX09WNzYyMEFFLAotCVNFTl9PVjY2MjAsCi0JU0VOX09WNjYzMCwKLQlTRU5fT1Y2NjMwQUUsCi0JU0VOX09WNjYzMEFGLAotCVNFTl9PVjg2MDAsCi0JU0VOX0tTMDEyNywKLQlTRU5fS1MwMTI3QiwKLQlTRU5fU0FBNzExMUEsCi19OwotCi1lbnVtIHsKLQlTVEFURV9TQ0FOTklORywJCS8qIFNjYW5uaW5nIGZvciBzdGFydCAqLwotCVNUQVRFX0hFQURFUiwJCS8qIFBhcnNpbmcgaGVhZGVyICovCi0JU1RBVEVfTElORVMsCQkvKiBQYXJzaW5nIGxpbmVzICovCi19OwotCi0vKiBCdWZmZXIgc3RhdGVzICovCi1lbnVtIHsKLQlCVUZfTk9UX0FMTE9DQVRFRCwKLQlCVUZfQUxMT0NBVEVELAotfTsKLQotLyogLS0tLS0tLS0tIERlZmluaXRpb24gb2YgaW9jdGwgaW50ZXJmYWNlIC0tLS0tLS0tLSAqLwotCi0jZGVmaW5lIE9WNTExX0lOVEVSRkFDRV9WRVIgMTAxCi0KLS8qIExFRCBvcHRpb25zICovCi1lbnVtIHsKLQlMRURfT0ZGLAotCUxFRF9PTiwKLQlMRURfQVVUTywKLX07Ci0KLS8qIFJhdyBmcmFtZSBmb3JtYXRzICovCi1lbnVtIHsKLQlSQVdGTVRfSU5WQUxJRCwKLQlSQVdGTVRfWVVWNDAwLAotCVJBV0ZNVF9ZVVY0MjAsCi0JUkFXRk1UX1lVVjQyMiwKLQlSQVdGTVRfR0JSNDIyLAotfTsKLQotc3RydWN0IG92NTExX2kyY19zdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIgc2xhdmU7IC8qIFdyaXRlIHNsYXZlIElEIChyZWFkIElEIC0gMSkgKi8KLQl1bnNpZ25lZCBjaGFyIHJlZzsgICAvKiBJbmRleCBvZiByZWdpc3RlciAqLwotCXVuc2lnbmVkIGNoYXIgdmFsdWU7IC8qIFVzZXIgc2V0cyB0aGlzIHcvIHdyaXRlLCBkcml2ZXIgZG9lcyB3LyByZWFkICovCi0JdW5zaWduZWQgY2hhciBtYXNrOyAgLyogQml0cyB0byBiZSBjaGFuZ2VkLiBOb3QgdXNlZCB3aXRoIHJlYWQgb3BzICovCi19OwotCi0vKiBpb2N0bHMgKi8KLSNkZWZpbmUgT1Y1MTFJT0NfV0kyQyAgICAgX0lPVygndicsIEJBU0VfVklESU9DUFJJVkFURSArIDUsIFwKLQkJCSAgICAgICBzdHJ1Y3Qgb3Y1MTFfaTJjX3N0cnVjdCkKLSNkZWZpbmUgT1Y1MTFJT0NfUkkyQyAgICBfSU9XUigndicsIEJBU0VfVklESU9DUFJJVkFURSArIDYsIFwKLQkJCSAgICAgICBzdHJ1Y3Qgb3Y1MTFfaTJjX3N0cnVjdCkKLS8qIC0tLS0tLS0tLS0tLS0gRW5kIElPQ1RMIGludGVyZmFjZSAtLS0tLS0tLS0tLS0tLSAqLwotCi1zdHJ1Y3QgdXNiX292NTExOwkJLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqLwotCi1zdHJ1Y3Qgb3Y1MTFfc2J1ZiB7Ci0Jc3RydWN0IHVzYl9vdjUxMSAqb3Y7Ci0JdW5zaWduZWQgY2hhciAqZGF0YTsKLQlzdHJ1Y3QgdXJiICp1cmI7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCWludCBuOwotfTsKLQotZW51bSB7Ci0JRlJBTUVfVU5VU0VELAkJLyogVW51c2VkIChubyBNQ0FQVFVSRSkgKi8KLQlGUkFNRV9SRUFEWSwJCS8qIFJlYWR5IHRvIHN0YXJ0IGdyYWJiaW5nICovCi0JRlJBTUVfR1JBQkJJTkcsCQkvKiBJbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBncmFiYmVkIGludG8gKi8KLQlGUkFNRV9ET05FLAkJLyogRmluaXNoZWQgZ3JhYmJpbmcsIGJ1dCBub3QgYmVlbiBzeW5jZWQgeWV0ICovCi0JRlJBTUVfRVJST1IsCQkvKiBTb21ldGhpbmcgYmFkIGhhcHBlbmVkIHdoaWxlIHByb2Nlc3NpbmcgKi8KLX07Ci0KLXN0cnVjdCBvdjUxMV9yZWd2YWxzIHsKLQllbnVtIHsKLQkJT1Y1MTFfRE9ORV9CVVMsCi0JCU9WNTExX1JFR19CVVMsCi0JCU9WNTExX0kyQ19CVVMsCi0JfSBidXM7Ci0JdW5zaWduZWQgY2hhciByZWc7Ci0JdW5zaWduZWQgY2hhciB2YWw7Ci19OwotCi1zdHJ1Y3Qgb3Y1MTFfZnJhbWUgewotCWludCBmcmFtZW51bTsJCS8qIEluZGV4IG9mIHRoaXMgZnJhbWUgKi8KLQl1bnNpZ25lZCBjaGFyICpkYXRhOwkvKiBGcmFtZSBidWZmZXIgKi8KLQl1bnNpZ25lZCBjaGFyICp0ZW1wZGF0YTsgLyogVGVtcCBidWZmZXIgZm9yIG11bHRpLXN0YWdlIGNvbnZlcnNpb25zICovCi0JdW5zaWduZWQgY2hhciAqcmF3ZGF0YTsJLyogUmF3IGNhbWVyYSBkYXRhIGJ1ZmZlciAqLwotCXVuc2lnbmVkIGNoYXIgKmNvbXBidWY7CS8qIFRlbXAgYnVmZmVyIGZvciBkZWNvbXByZXNzb3IgKi8KLQotCWludCBkZXB0aDsJCS8qIEJ5dGVzIHBlciBwaXhlbCAqLwotCWludCB3aWR0aDsJCS8qIFdpZHRoIGFwcGxpY2F0aW9uIGlzIGV4cGVjdGluZyAqLwotCWludCBoZWlnaHQ7CQkvKiBIZWlnaHQgYXBwbGljYXRpb24gaXMgZXhwZWN0aW5nICovCi0KLQlpbnQgcmF3d2lkdGg7CQkvKiBBY3R1YWwgd2lkdGggb2YgZnJhbWUgc2VudCBmcm9tIGNhbWVyYSAqLwotCWludCByYXdoZWlnaHQ7CQkvKiBBY3R1YWwgaGVpZ2h0IG9mIGZyYW1lIHNlbnQgZnJvbSBjYW1lcmEgKi8KLQotCWludCBzdWJfZmxhZzsJCS8qIFN1Yi1jYXB0dXJlIG1vZGUgZm9yIHRoaXMgZnJhbWU/ICovCi0JdW5zaWduZWQgaW50IGZvcm1hdDsJLyogRm9ybWF0IGZvciB0aGlzIGZyYW1lICovCi0JaW50IGNvbXByZXNzZWQ7CQkvKiBJcyBmcmFtZSBjb21wcmVzc2VkPyAqLwotCi0Jdm9sYXRpbGUgaW50IGdyYWJzdGF0ZTsJLyogU3RhdGUgb2YgZ3JhYmJpbmcgKi8KLQlpbnQgc2NhbnN0YXRlOwkJLyogU3RhdGUgb2Ygc2Nhbm5pbmcgKi8KLQotCWludCBieXRlc19yZWN2ZDsJLyogTnVtYmVyIG9mIGltYWdlIGJ5dGVzIHJlY2VpdmVkIGZyb20gY2FtZXJhICovCi0KLQlsb25nIGJ5dGVzX3JlYWQ7CS8qIEFtb3VudCB0aGF0IGhhcyBiZWVuIHJlYWQoKSAqLwotCi0Jd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CS8qIFByb2Nlc3NlcyB3YWl0aW5nICovCi0KLQlpbnQgc25hcHNob3Q7CQkvKiBUcnVlIGlmIGZyYW1lIHdhcyBhIHNuYXBzaG90ICovCi19OwotCi0jZGVmaW5lIERFQ09NUF9JTlRFUkZBQ0VfVkVSIDQKLQotLyogQ29tcHJlc3Npb24gbW9kdWxlIG9wZXJhdGlvbnMgKi8KLXN0cnVjdCBvdjUxeF9kZWNvbXBfb3BzIHsKLQlpbnQgKCpkZWNvbXBfNDAwKSh1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLAotCQkJICBpbnQsIGludCwgaW50KTsKLQlpbnQgKCpkZWNvbXBfNDIwKSh1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLAotCQkJICBpbnQsIGludCwgaW50KTsKLQlpbnQgKCpkZWNvbXBfNDIyKSh1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLAotCQkJICBpbnQsIGludCwgaW50KTsKLQlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKLX07Ci0KLXN0cnVjdCB1c2Jfb3Y1MTEgewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXY7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKLQotCWludCBjdXN0b21pZDsKLQljaGFyICpkZXNjOwotCXVuc2lnbmVkIGNoYXIgaWZhY2U7Ci0JY2hhciB1c2JfcGF0aFtPVjUxMV9VU0JfUEFUSF9MRU5dOwotCi0JLyogRGV0ZXJtaW5lZCBieSBzZW5zb3IgdHlwZSAqLwotCWludCBtYXh3aWR0aDsKLQlpbnQgbWF4aGVpZ2h0OwotCWludCBtaW53aWR0aDsKLQlpbnQgbWluaGVpZ2h0OwotCi0JaW50IGJyaWdodG5lc3M7Ci0JaW50IGNvbG91cjsKLQlpbnQgY29udHJhc3Q7Ci0JaW50IGh1ZTsKLQlpbnQgd2hpdGVuZXNzOwotCWludCBleHBvc3VyZTsKLQlpbnQgYXV0b19icnQ7CQkvKiBBdXRvIGJyaWdodG5lc3MgZW5hYmxlZCBmbGFnICovCi0JaW50IGF1dG9fZ2FpbjsJCS8qIEF1dG8gZ2FpbiBjb250cm9sIGVuYWJsZWQgZmxhZyAqLwotCWludCBhdXRvX2V4cDsJCS8qIEF1dG8gZXhwb3N1cmUgZW5hYmxlZCBmbGFnICovCi0JaW50IGJhY2tsaWdodDsJCS8qIEJhY2tsaWdodCBleHBvc3VyZSBhbGdvcml0aG0gZmxhZyAqLwotCWludCBtaXJyb3I7CQkvKiBJbWFnZSBpcyByZXZlcnNlZCBob3Jpem9udGFsbHkgKi8KLQotCWludCBsZWRfcG9saWN5OwkJLyogTEVEOiBvZmZ8b258YXV0bzsgT1Y1MTErIG9ubHkgKi8KLQotCXN0cnVjdCBtdXRleCBsb2NrOwkvKiBTZXJpYWxpemVzIHVzZXItYWNjZXNzaWJsZSBvcGVyYXRpb25zICovCi0JaW50IHVzZXI7CQkvKiB1c2VyIGNvdW50IGZvciBleGNsdXNpdmUgdXNlICovCi0KLQlpbnQgc3RyZWFtaW5nOwkJLyogQXJlIHdlIHN0cmVhbWluZyBJc29jaHJvbm91cz8gKi8KLQlpbnQgZ3JhYmJpbmc7CQkvKiBBcmUgd2UgZ3JhYmJpbmc/ICovCi0KLQlpbnQgY29tcHJlc3M7CQkvKiBTaG91bGQgdGhlIG5leHQgZnJhbWUgYmUgY29tcHJlc3NlZD8gKi8KLQlpbnQgY29tcHJlc3NfaW5pdGVkOwkvKiBBcmUgY29tcHJlc3Npb24gcGFyYW1zIHVwbG9hZGVkPyAqLwotCi0JaW50IGxpZ2h0ZnJlcTsJCS8qIFBvd2VyIChsaWdodGluZykgZnJlcXVlbmN5ICovCi0JaW50IGJhbmRmaWx0OwkJLyogQmFuZGluZyBmaWx0ZXIgZW5hYmxlZCBmbGFnICovCi0KLQl1bnNpZ25lZCBjaGFyICpmYnVmOwkvKiBWaWRlb2RldiBidWZmZXIgYXJlYSAqLwotCXVuc2lnbmVkIGNoYXIgKnRlbXBmYnVmOyAvKiBUZW1wb3JhcnkgKGludGVybWVkaWF0ZSkgYnVmZmVyIGFyZWEgKi8KLQl1bnNpZ25lZCBjaGFyICpyYXdmYnVmOwkvKiBSYXcgY2FtZXJhIGRhdGEgYnVmZmVyIGFyZWEgKi8KLQotCWludCBzdWJfZmxhZzsJCS8qIFBpeCBBcnJheSBzdWJjYXB0dXJlIG9uIGZsYWcgKi8KLQlpbnQgc3VieDsJCS8qIFBpeCBBcnJheSBzdWJjYXB0dXJlIHggb2Zmc2V0ICovCi0JaW50IHN1Ynk7CQkvKiBQaXggQXJyYXkgc3ViY2FwdHVyZSB5IG9mZnNldCAqLwotCWludCBzdWJ3OwkJLyogUGl4IEFycmF5IHN1YmNhcHR1cmUgd2lkdGggKi8KLQlpbnQgc3ViaDsJCS8qIFBpeCBBcnJheSBzdWJjYXB0dXJlIGhlaWdodCAqLwotCi0JaW50IGN1cmZyYW1lOwkJLyogQ3VycmVudCByZWNlaXZpbmcgc2J1ZiAqLwotCXN0cnVjdCBvdjUxMV9mcmFtZSBmcmFtZVtPVjUxMV9OVU1GUkFNRVNdOwotCi0Jc3RydWN0IG92NTExX3NidWYgc2J1ZltPVjUxMV9OVU1TQlVGXTsKLQotCXdhaXRfcXVldWVfaGVhZF90IHdxOwkvKiBQcm9jZXNzZXMgd2FpdGluZyAqLwotCi0JaW50IHNuYXBfZW5hYmxlZDsJLyogU25hcHNob3QgbW9kZSBlbmFibGVkICovCi0KLQlpbnQgYnJpZGdlOwkJLyogVHlwZSBvZiBicmlkZ2UgKEJSR18qKSAqLwotCWludCBiY2xhc3M7CQkvKiBDbGFzcyBvZiBicmlkZ2UgKEJDTF8qKSAqLwotCWludCBzZW5zb3I7CQkvKiBUeXBlIG9mIGltYWdlIHNlbnNvciBjaGlwIChTRU5fKikgKi8KLQotCWludCBwYWNrZXRfc2l6ZTsJLyogRnJhbWUgc2l6ZSBwZXIgaXNvYyBkZXNjICovCi0JaW50IHBhY2tldF9udW1iZXJpbmc7CS8qIElzIElTTyBmcmFtZSBudW1iZXJpbmcgZW5hYmxlZD8gKi8KLQotCS8qIEZyYW1lYnVmZmVyL3NidWYgbWFuYWdlbWVudCAqLwotCWludCBidWZfc3RhdGU7Ci0Jc3RydWN0IG11dGV4IGJ1Zl9sb2NrOwotCi0Jc3RydWN0IG92NTF4X2RlY29tcF9vcHMgKmRlY29tcF9vcHM7Ci0KLQkvKiBTdG9wIHN0cmVhbWluZyB3aGlsZSBjaGFuZ2luZyBwaWN0dXJlIHNldHRpbmdzICovCi0JaW50IHN0b3BfZHVyaW5nX3NldDsKLQotCWludCBzdG9wcGVkOwkJLyogU3RyZWFtaW5nIGlzIHRlbXBvcmFyaWx5IHBhdXNlZCAqLwotCi0JLyogVmlkZW8gZGVjb2RlciBzdHVmZiAqLwotCWludCBpbnB1dDsJCS8qIENvbXBvc2l0ZSwgUy1WSURFTywgZXRjLi4uICovCi0JaW50IG51bV9pbnB1dHM7CQkvKiBOdW1iZXIgb2YgaW5wdXRzICovCi0JaW50IG5vcm07IAkJLyogTlRTQyAvIFBBTCAvIFNFQ0FNICovCi0JaW50IGhhc19kZWNvZGVyOwkvKiBEZXZpY2UgaGFzIGEgdmlkZW8gZGVjb2RlciAqLwotCWludCBwYWw7CQkvKiBEZXZpY2UgaXMgZGVzaWduZWQgZm9yIFBBTCByZXNvbHV0aW9uICovCi0KLQkvKiBvdjUxMSBkZXZpY2UgbnVtYmVyIElEICovCi0JaW50IG5yOwkJCS8qIFN0b3JlcyBhIGRldmljZSBudW1iZXIgKi8KLQotCS8qIEkyQyBpbnRlcmZhY2UgKi8KLQlzdHJ1Y3QgbXV0ZXggaTJjX2xvY2s7CSAgLyogUHJvdGVjdCBJMkMgY29udHJvbGxlciByZWdzICovCi0JdW5zaWduZWQgY2hhciBwcmltYXJ5X2kyY19zbGF2ZTsgIC8qIEkyQyB3cml0ZSBpZCBvZiBzZW5zb3IgKi8KLQotCS8qIENvbnRyb2wgdHJhbnNhY3Rpb24gc3R1ZmYgKi8KLQl1bnNpZ25lZCBjaGFyICpjYnVmOwkJLyogQnVmZmVyIGZvciBwYXlsb2FkICovCi0Jc3RydWN0IG11dGV4IGNidWZfbG9jazsKLX07Ci0KLS8qIFVzZWQgdG8gcmVwcmVzZW50IGEgbGlzdCBvZiB2YWx1ZXMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgc3ltYm9saWMgbmFtZXMgKi8KLXN0cnVjdCBzeW1ib2xpY19saXN0IHsKLQlpbnQgbnVtOwotCWNoYXIgKm5hbWU7Ci19OwotCi0jZGVmaW5lIE5PVF9ERUZJTkVEX1NUUiAiVW5rbm93biIKLQotLyogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgbWF0Y2hpbmcgZWxlbWVudCBpbiB0aGUgc3ltYm9saWNfbGlzdCBhcnJheS4gVGhlCi0gKiBlbmQgb2YgdGhlIGxpc3QgbXVzdCBiZSBtYXJrZWQgd2l0aCBhbiBlbGVtZW50IHRoYXQgaGFzIGEgTlVMTCBuYW1lLgotICovCi1zdGF0aWMgaW5saW5lIGNoYXIgKgotc3ltYm9saWMoc3RydWN0IHN5bWJvbGljX2xpc3QgbGlzdFtdLCBpbnQgbnVtKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgbGlzdFtpXS5uYW1lICE9IE5VTEw7IGkrKykKLQkJCWlmIChsaXN0W2ldLm51bSA9PSBudW0pCi0JCQkJcmV0dXJuIChsaXN0W2ldLm5hbWUpOwotCi0JcmV0dXJuIChOT1RfREVGSU5FRF9TVFIpOwotfQotCi0vKiBDb21wcmVzc2lvbiBzdHVmZiAqLwotCi0jZGVmaW5lIE9WNTExX1FVQU5UQUJMRVNJWkUJNjQKLSNkZWZpbmUgT1Y1MThfUVVBTlRBQkxFU0laRQkzMgotCi0jZGVmaW5lIE9WNTExX1lRVUFOVEFCTEUgeyBcCi0JMCwgMSwgMSwgMiwgMiwgMywgMywgNCwgXAotCTEsIDEsIDEsIDIsIDIsIDMsIDQsIDQsIFwKLQkxLCAxLCAyLCAyLCAzLCA0LCA0LCA0LCBcCi0JMiwgMiwgMiwgMywgNCwgNCwgNCwgNCwgXAotCTIsIDIsIDMsIDQsIDQsIDUsIDUsIDUsIFwKLQkzLCAzLCA0LCA0LCA1LCA1LCA1LCA1LCBcCi0JMywgNCwgNCwgNCwgNSwgNSwgNSwgNSwgXAotCTQsIDQsIDQsIDQsIDUsIDUsIDUsIDUgIFwKLX0KLQotI2RlZmluZSBPVjUxMV9VVlFVQU5UQUJMRSB7IFwKLQkwLCAyLCAyLCAzLCA0LCA0LCA0LCA0LCBcCi0JMiwgMiwgMiwgNCwgNCwgNCwgNCwgNCwgXAotCTIsIDIsIDMsIDQsIDQsIDQsIDQsIDQsIFwKLQkzLCA0LCA0LCA0LCA0LCA0LCA0LCA0LCBcCi0JNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgXAotCTQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIFwKLQk0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCBcCi0JNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCAgXAotfQotCi0jZGVmaW5lIE9WNTE4X1lRVUFOVEFCTEUgeyBcCi0JNSwgNCwgNSwgNiwgNiwgNywgNywgNywgXAotCTUsIDUsIDUsIDUsIDYsIDcsIDcsIDcsIFwKLQk2LCA2LCA2LCA2LCA3LCA3LCA3LCA4LCBcCi0JNywgNywgNiwgNywgNywgNywgOCwgOCAgXAotfQotCi0jZGVmaW5lIE9WNTE4X1VWUVVBTlRBQkxFIHsgXAotCTYsIDYsIDYsIDcsIDcsIDcsIDcsIDcsIFwKLQk2LCA2LCA2LCA3LCA3LCA3LCA3LCA3LCBcCi0JNiwgNiwgNiwgNywgNywgNywgNywgOCwgXAotCTcsIDcsIDcsIDcsIDcsIDcsIDgsIDggIFwKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzcyeC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjc3MnguYwppbmRleCAzNDAzNGE3Li4yNWViNWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzcyeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NzJ4LmMKQEAgLTQ0MCwyMSArNDQwLDIxIEBACiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Y3NzJ4X2NvbG9yX2Zvcm1hdCBvdjc3MnhfY2ZtdHNbXSA9IHsKIAl7Ci0JCS5jb2RlCQk9IFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0xFLAorCQkuY29kZQkJPSBWNEwyX01CVVNfRk1UX1lVWVY4XzJYOCwKIAkJLmNvbG9yc3BhY2UJPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKIAkJLmRzcDMJCT0gMHgwLAogCQkuY29tMwkJPSBTV0FQX1lVViwKIAkJLmNvbTcJCT0gT0ZNVF9ZVVYsCiAJfSwKIAl7Ci0JCS5jb2RlCQk9IFY0TDJfTUJVU19GTVRfWVZZVThfMlg4X0xFLAorCQkuY29kZQkJPSBWNEwyX01CVVNfRk1UX1lWWVU4XzJYOCwKIAkJLmNvbG9yc3BhY2UJPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKIAkJLmRzcDMJCT0gVVZfT04sCiAJCS5jb20zCQk9IFNXQVBfWVVWLAogCQkuY29tNwkJPSBPRk1UX1lVViwKIAl9LAogCXsKLQkJLmNvZGUJCT0gVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDhfQkUsCisJCS5jb2RlCQk9IFY0TDJfTUJVU19GTVRfVVlWWThfMlg4LAogCQkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAogCQkuZHNwMwkJPSAweDAsCiAJCS5jb20zCQk9IDB4MCwKQEAgLTk2MCw3ICs5NjAsNyBAQAogCWlmICghcHJpdi0+d2luIHx8ICFwcml2LT5jZm10KSB7CiAJCXUzMiB3aWR0aCA9IFZHQV9XSURUSCwgaGVpZ2h0ID0gVkdBX0hFSUdIVDsKIAkJaW50IHJldCA9IG92NzcyeF9zZXRfcGFyYW1zKGNsaWVudCwgJndpZHRoLCAmaGVpZ2h0LAotCQkJCQkgICAgVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDhfTEUpOworCQkJCQkgICAgVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDgpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjk2NDAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y5NjQwLmMKaW5kZXggN2NlOWUwNS4uNDBjZGZhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjk2NDAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292OTY0MC5jCkBAIC0xNTUsNyArMTU1LDcgQEAKIH07CiAKIHN0YXRpYyBlbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUgb3Y5NjQwX2NvZGVzW10gPSB7Ci0JVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDhfQkUsCisJVjRMMl9NQlVTX0ZNVF9VWVZZOF8yWDgsCiAJVjRMMl9NQlVTX0ZNVF9SR0I1NTVfMlg4X1BBREhJX0xFLAogCVY0TDJfTUJVU19GTVRfUkdCNTY1XzJYOF9MRSwKIH07CkBAIC00MzAsNyArNDMwLDcgQEAKIHsKIAlzd2l0Y2ggKGNvZGUpIHsKIAlkZWZhdWx0OgotCWNhc2UgVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDhfQkU6CisJY2FzZSBWNEwyX01CVVNfRk1UX1VZVlk4XzJYODoKIAkJYWx0LT5jb20xMgk9IE9WOTY0MF9DT00xMl9ZVVZfQVZHOwogCQlhbHQtPmNvbTEzCT0gT1Y5NjQwX0NPTTEzX1lfREVMQVlfRU4gfAogCQkJCQlPVjk2NDBfQ09NMTNfWVVWX0RMWSgweDAxKTsKQEAgLTQ5Myw3ICs0OTMsNyBAQAogCX0KIAogCS8qIHNlbGVjdCBjb2xvciBtYXRyaXggY29uZmlndXJhdGlvbiBmb3IgZ2l2ZW4gY29sb3IgZW5jb2RpbmcgKi8KLQlpZiAoY29kZSA9PSBWNEwyX01CVVNfRk1UX1lVWVY4XzJYOF9CRSkgeworCWlmIChjb2RlID09IFY0TDJfTUJVU19GTVRfVVlWWThfMlg4KSB7CiAJCW1hdHJpeF9yZWdzCT0gb3Y5NjQwX3JlZ3NfeXV2OwogCQltYXRyaXhfcmVnc19sZW4JPSBBUlJBWV9TSVpFKG92OTY0MF9yZWdzX3l1dik7CiAJfSBlbHNlIHsKQEAgLTU3OSw4ICs1NzksOCBAQAogCQljc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJY29kZSA9IFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0JFOwotCWNhc2UgVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDhfQkU6CisJCWNvZGUgPSBWNEwyX01CVVNfRk1UX1VZVlk4XzJYODsKKwljYXNlIFY0TDJfTUJVU19GTVRfVVlWWThfMlg4OgogCQljc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRzsKIAl9CiAKQEAgLTYwNiw4ICs2MDYsOCBAQAogCQltZi0+Y29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQltZi0+Y29kZSA9IFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0JFOwotCWNhc2UgVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDhfQkU6CisJCW1mLT5jb2RlID0gVjRMMl9NQlVTX0ZNVF9VWVZZOF8yWDg7CisJY2FzZSBWNEwyX01CVVNfRk1UX1VZVlk4XzJYODoKIAkJbWYtPmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRzsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYTRjZGYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLW92Y2FtY2hpcC1vYmpzICAgICA6PSBvdmNhbWNoaXBfY29yZS5vIG92NngyMC5vIG92NngzMC5vIG92N3gxMC5vIG92N3gyMC5vIFwKLQkJICAgICAgb3Y3NmJlLm8KLQotb2JqLSQoQ09ORklHX1ZJREVPX09WQ0FNQ0hJUCkgKz0gb3ZjYW1jaGlwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwL292NngyMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3Y2eDIwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwNDEzMGQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3Y2eDIwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MTQgKzAsMCBAQAotLyogT21uaVZpc2lvbiBPVjY2MjAvT1Y2MTIwIENhbWVyYSBDaGlwIFN1cHBvcnQgQ29kZQotICoKLSAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA0IE1hcmsgTWNDbGVsbGFuZCA8bWFya0BhbHBoYS5keW5kbnMub3JnPgotICogaHR0cDovL2FscGhhLmR5bmRucy5vcmcvb3Y1MTEvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gTk8gV0FSUkFOVFkgT0YgQU5ZIEtJTkQgaXMgZXhwcmVzc2VkIG9yIGltcGxpZWQuCi0gKi8KLQotI2RlZmluZSBERUJVRwotCi0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgIm92Y2FtY2hpcF9wcml2LmgiCi0KLS8qIFJlZ2lzdGVycyAqLwotI2RlZmluZSBSRUdfR0FJTgkJMHgwMAkvKiBnYWluIFs1OjBdICovCi0jZGVmaW5lIFJFR19CTFVFCQkweDAxCS8qIGJsdWUgZ2FpbiAqLwotI2RlZmluZSBSRUdfUkVECQkJMHgwMgkvKiByZWQgZ2FpbiAqLwotI2RlZmluZSBSRUdfU0FUCQkJMHgwMwkvKiBzYXR1cmF0aW9uICovCi0jZGVmaW5lIFJFR19DTlQJCQkweDA1CS8qIFkgY29udHJhc3QgKi8KLSNkZWZpbmUgUkVHX0JSVAkJCTB4MDYJLyogWSBicmlnaHRuZXNzICovCi0jZGVmaW5lIFJFR19XQl9CTFVFCQkweDBDCS8qIFdCIGJsdWUgcmF0aW8gWzU6MF0gKi8KLSNkZWZpbmUgUkVHX1dCX1JFRAkJMHgwRAkvKiBXQiByZWQgcmF0aW8gWzU6MF0gKi8KLSNkZWZpbmUgUkVHX0VYUAkJCTB4MTAJLyogZXhwb3N1cmUgKi8KLQotLyogV2luZG93IHBhcmFtZXRlcnMgKi8KLSNkZWZpbmUgSFdTQkFTRSAweDM4Ci0jZGVmaW5lIEhXRUJBU0UgMHgzQQotI2RlZmluZSBWV1NCQVNFIDB4MDUKLSNkZWZpbmUgVldFQkFTRSAweDA2Ci0KLXN0cnVjdCBvdjZ4MjAgewotCWludCBhdXRvX2JydDsKLQlpbnQgYXV0b19leHA7Ci0JaW50IGJhY2tsaWdodDsKLQlpbnQgYmFuZGZpbHQ7Ci0JaW50IG1pcnJvcjsKLX07Ci0KLS8qIEluaXRpYWwgdmFsdWVzIGZvciB1c2Ugd2l0aCBPVjUxMS9PVjUxMSsgY2FtZXJhcyAqLwotc3RhdGljIHN0cnVjdCBvdmNhbWNoaXBfcmVndmFscyByZWd2YWxzX2luaXRfNngyMF81MTFbXSA9IHsKLQl7IDB4MTIsIDB4ODAgfSwgLyogcmVzZXQgKi8KLQl7IDB4MTEsIDB4MDEgfSwKLQl7IDB4MDMsIDB4NjAgfSwKLQl7IDB4MDUsIDB4N2YgfSwgLyogRm9yIHdoZW4gYXV0b2FkanVzdCBpcyBvZmYgKi8KLQl7IDB4MDcsIDB4YTggfSwKLQl7IDB4MGMsIDB4MjQgfSwKLQl7IDB4MGQsIDB4MjQgfSwKLQl7IDB4MGYsIDB4MTUgfSwgLyogQ09NUyAqLwotCXsgMHgxMCwgMHg3NSB9LCAvKiBBRUMgRXhwb3N1cmUgdGltZSAqLwotCXsgMHgxMiwgMHgyNCB9LCAvKiBFbmFibGUgQUdDIGFuZCBBV0IgKi8KLQl7IDB4MTQsIDB4MDQgfSwKLQl7IDB4MTYsIDB4MDMgfSwKLQl7IDB4MjYsIDB4YjIgfSwgLyogQkxDIGVuYWJsZSAqLwotCS8qIDB4Mjg6IDB4MDUgU2VsZWN0cyBSR0IgZm9ybWF0IGlmIFJHQiBvbiAqLwotCXsgMHgyOCwgMHgwNSB9LAotCXsgMHgyYSwgMHgwNCB9LCAvKiBEaXNhYmxlIGZyYW1lcmF0ZSBhZGp1c3QgKi8KLQl7IDB4MmQsIDB4OTkgfSwKLQl7IDB4MzMsIDB4YTAgfSwgLyogQ29sb3IgUHJvY2Vzc2luZyBQYXJhbWV0ZXIgKi8KLQl7IDB4MzQsIDB4ZDIgfSwgLyogTWF4IEEvRCByYW5nZSAqLwotCXsgMHgzOCwgMHg4YiB9LAotCXsgMHgzOSwgMHg0MCB9LAotCi0JeyAweDNjLCAweDM5IH0sIC8qIEVuYWJsZSBBRUMgbW9kZSBjaGFuZ2luZyAqLwotCXsgMHgzYywgMHgzYyB9LCAvKiBDaGFuZ2UgQUVDIG1vZGUgKi8KLQl7IDB4M2MsIDB4MjQgfSwgLyogRGlzYWJsZSBBRUMgbW9kZSBjaGFuZ2luZyAqLwotCi0JeyAweDNkLCAweDgwIH0sCi0JLyogVGhlc2UgbmV4dCB0d28gcmVnaXN0ZXJzICgweDRhLCAweDRiKSBhcmUgdW5kb2N1bWVudGVkLiBUaGV5Ci0JICogY29udHJvbCB0aGUgY29sb3IgYmFsYW5jZSAqLwotCXsgMHg0YSwgMHg4MCB9LAotCXsgMHg0YiwgMHg4MCB9LAotCXsgMHg0ZCwgMHhkMiB9LCAvKiBUaGlzIHJlZHVjZXMgbm9pc2UgYSBiaXQgKi8KLQl7IDB4NGUsIDB4YzEgfSwKLQl7IDB4NGYsIDB4MDQgfSwKLQl7IDB4ZmYsIDB4ZmYgfSwJLyogRU5EIE1BUktFUiAqLwotfTsKLQotLyogSW5pdGlhbCB2YWx1ZXMgZm9yIHVzZSB3aXRoIE9WNTE4IGNhbWVyYXMgKi8KLXN0YXRpYyBzdHJ1Y3Qgb3ZjYW1jaGlwX3JlZ3ZhbHMgcmVndmFsc19pbml0XzZ4MjBfNTE4W10gPSB7Ci0JeyAweDEyLCAweDgwIH0sIC8qIERvIGEgcmVzZXQgKi8KLQl7IDB4MDMsIDB4YzAgfSwgLyogU2F0dXJhdGlvbiAqLwotCXsgMHgwNSwgMHg4YSB9LCAvKiBDb250cmFzdCAqLwotCXsgMHgwYywgMHgyNCB9LCAvKiBBV0IgYmx1ZSAqLwotCXsgMHgwZCwgMHgyNCB9LCAvKiBBV0IgcmVkICovCi0JeyAweDBlLCAweDhkIH0sIC8qIEFkZGl0aW9uYWwgMnggZ2FpbiAqLwotCXsgMHgwZiwgMHgyNSB9LCAvKiBCbGFjayBleHBhbmRpbmcgbGV2ZWwgPSAxLjNWICovCi0JeyAweDExLCAweDAxIH0sIC8qIENsb2NrIGRpdi4gKi8KLQl7IDB4MTIsIDB4MjQgfSwgLyogRW5hYmxlIEFHQyBhbmQgQVdCICovCi0JeyAweDEzLCAweDAxIH0sIC8qIChkZWZhdWx0KSAqLwotCXsgMHgxNCwgMHg4MCB9LCAvKiBTZXQgcmVzZXJ2ZWQgYml0IDcgKi8KLQl7IDB4MTUsIDB4MDEgfSwgLyogKGRlZmF1bHQpICovCi0JeyAweDE2LCAweDAzIH0sIC8qIChkZWZhdWx0KSAqLwotCXsgMHgxNywgMHgzOCB9LCAvKiAoZGVmYXVsdCkgKi8KLQl7IDB4MTgsIDB4ZWEgfSwgLyogKGRlZmF1bHQpICovCi0JeyAweDE5LCAweDA0IH0sCi0JeyAweDFhLCAweDkzIH0sCi0JeyAweDFiLCAweDAwIH0sIC8qIChkZWZhdWx0KSAqLwotCXsgMHgxZSwgMHhjNCB9LCAvKiAoZGVmYXVsdCkgKi8KLQl7IDB4MWYsIDB4MDQgfSwgLyogKGRlZmF1bHQpICovCi0JeyAweDIwLCAweDIwIH0sIC8qIEVuYWJsZSAxc3Qgc3RhZ2UgYXBlcnR1cmUgY29ycmVjdGlvbiAqLwotCXsgMHgyMSwgMHgxMCB9LCAvKiBZIG9mZnNldCAqLwotCXsgMHgyMiwgMHg4OCB9LCAvKiBVIG9mZnNldCAqLwotCXsgMHgyMywgMHhjMCB9LCAvKiBTZXQgWFRBTCBwb3dlciBsZXZlbCAqLwotCXsgMHgyNCwgMHg1MyB9LCAvKiBBRUMgYnJpZ2h0IHJhdGlvICovCi0JeyAweDI1LCAweDdhIH0sIC8qIEFFQyBibGFjayByYXRpbyAqLwotCXsgMHgyNiwgMHhiMiB9LCAvKiBCTEMgZW5hYmxlICovCi0JeyAweDI3LCAweGEyIH0sIC8qIEZ1bGwgb3V0cHV0IHJhbmdlICovCi0JeyAweDI4LCAweDAxIH0sIC8qIChkZWZhdWx0KSAqLwotCXsgMHgyOSwgMHgwMCB9LCAvKiAoZGVmYXVsdCkgKi8KLQl7IDB4MmEsIDB4ODQgfSwgLyogKGRlZmF1bHQpICovCi0JeyAweDJiLCAweGE4IH0sIC8qIFNldCBjdXN0b20gZnJhbWUgcmF0ZSAqLwotCXsgMHgyYywgMHhhMCB9LCAvKiAocmVzZXJ2ZWQpICovCi0JeyAweDJkLCAweDk1IH0sIC8qIEVuYWJsZSBiYW5kaW5nIGZpbHRlciAqLwotCXsgMHgyZSwgMHg4OCB9LCAvKiBWIG9mZnNldCAqLwotCXsgMHgzMywgMHgyMiB9LCAvKiBMdW1pbmFuY2UgZ2FtbWEgb24gKi8KLQl7IDB4MzQsIDB4YzcgfSwgLyogQS9EIGJpYXMgKi8KLQl7IDB4MzYsIDB4MTIgfSwgLyogKHJlc2VydmVkKSAqLwotCXsgMHgzNywgMHg2MyB9LCAvKiAocmVzZXJ2ZWQpICovCi0JeyAweDM4LCAweDhiIH0sIC8qIFF1aWNrIEFFQy9BRUIgKi8KLQl7IDB4MzksIDB4MDAgfSwgLyogKGRlZmF1bHQpICovCi0JeyAweDNhLCAweDBmIH0sIC8qIChkZWZhdWx0KSAqLwotCXsgMHgzYiwgMHgzYyB9LCAvKiAoZGVmYXVsdCkgKi8KLQl7IDB4M2MsIDB4NWMgfSwgLyogQUVDIGNvbnRyb2xzICovCi0JeyAweDNkLCAweDgwIH0sIC8qIERyb3AgMSAoYmFkKSBmcmFtZSB3aGVuIEFFQyBjaGFuZ2UgKi8KLQl7IDB4M2UsIDB4ODAgfSwgLyogKGRlZmF1bHQpICovCi0JeyAweDNmLCAweDAyIH0sIC8qIChkZWZhdWx0KSAqLwotCXsgMHg0MCwgMHgxMCB9LCAvKiAocmVzZXJ2ZWQpICovCi0JeyAweDQxLCAweDEwIH0sIC8qIChyZXNlcnZlZCkgKi8KLQl7IDB4NDIsIDB4MDAgfSwgLyogKHJlc2VydmVkKSAqLwotCXsgMHg0MywgMHg3ZiB9LCAvKiAocmVzZXJ2ZWQpICovCi0JeyAweDQ0LCAweDgwIH0sIC8qIChyZXNlcnZlZCkgKi8KLQl7IDB4NDUsIDB4MWMgfSwgLyogKHJlc2VydmVkKSAqLwotCXsgMHg0NiwgMHgxYyB9LCAvKiAocmVzZXJ2ZWQpICovCi0JeyAweDQ3LCAweDgwIH0sIC8qIChyZXNlcnZlZCkgKi8KLQl7IDB4NDgsIDB4NWYgfSwgLyogKHJlc2VydmVkKSAqLwotCXsgMHg0OSwgMHgwMCB9LCAvKiAocmVzZXJ2ZWQpICovCi0JeyAweDRhLCAweDAwIH0sIC8qIENvbG9yIGJhbGFuY2UgKHVuZG9jdW1lbnRlZCkgKi8KLQl7IDB4NGIsIDB4ODAgfSwgLyogQ29sb3IgYmFsYW5jZSAodW5kb2N1bWVudGVkKSAqLwotCXsgMHg0YywgMHg1OCB9LCAvKiAocmVzZXJ2ZWQpICovCi0JeyAweDRkLCAweGQyIH0sIC8qIFUgKj0gLjkzOCwgViAqPSAuODM4ICovCi0JeyAweDRlLCAweGEwIH0sIC8qIChkZWZhdWx0KSAqLwotCXsgMHg0ZiwgMHgwNCB9LCAvKiBVViAzLXBvaW50IGF2ZXJhZ2UgKi8KLQl7IDB4NTAsIDB4ZmYgfSwgLyogKHJlc2VydmVkKSAqLwotCXsgMHg1MSwgMHg1OCB9LCAvKiAocmVzZXJ2ZWQpICovCi0JeyAweDUyLCAweGMwIH0sIC8qIChyZXNlcnZlZCkgKi8KLQl7IDB4NTMsIDB4NDIgfSwgLyogKHJlc2VydmVkKSAqLwotCXsgMHgyNywgMHhhNiB9LCAvKiBFbmFibGUgbWFudWFsIG9mZnNldCBhZGouIChyZWcgMjEgJiAyMikgKi8KLQl7IDB4MTIsIDB4MjAgfSwKLQl7IDB4MTIsIDB4MjQgfSwKLQotCXsgMHhmZiwgMHhmZiB9LAkvKiBFTkQgTUFSS0VSICovCi19OwotCi0vKiBUaGlzIGluaXRpYWxpemVzIHRoZSBPVjZ4MjAgY2FtZXJhIGNoaXAgYW5kIHJlbGV2YW50IHZhcmlhYmxlcy4gKi8KLXN0YXRpYyBpbnQgb3Y2eDIwX2luaXQoc3RydWN0IGkyY19jbGllbnQgKmMpCi17Ci0Jc3RydWN0IG92Y2FtY2hpcCAqb3YgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7Ci0Jc3RydWN0IG92NngyMCAqczsKLQlpbnQgcmM7Ci0KLQlEREVCVUcoNCwgJmMtPmRldiwgImVudGVyZWQiKTsKLQotCXN3aXRjaCAoYy0+YWRhcHRlci0+aWQpIHsKLQljYXNlIEkyQ19IV19TTUJVU19PVjUxMToKLQkJcmMgPSBvdl93cml0ZV9yZWd2YWxzKGMsIHJlZ3ZhbHNfaW5pdF82eDIwXzUxMSk7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0hXX1NNQlVTX09WNTE4OgotCQlyYyA9IG92X3dyaXRlX3JlZ3ZhbHMoYywgcmVndmFsc19pbml0XzZ4MjBfNTE4KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGV2X2VycigmYy0+ZGV2LCAib3Y2eDIwOiBVbnN1cHBvcnRlZCBhZGFwdGVyXG4iKTsKLQkJcmMgPSAtRU5PREVWOwotCX0KLQotCWlmIChyYyA8IDApCi0JCXJldHVybiByYzsKLQotCW92LT5zcHJpdiA9IHMgPSBremFsbG9jKHNpemVvZiAqcywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXMtPmF1dG9fYnJ0ID0gMTsKLQlzLT5hdXRvX2V4cCA9IDE7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgb3Y2eDIwX2ZyZWUoc3RydWN0IGkyY19jbGllbnQgKmMpCi17Ci0Jc3RydWN0IG92Y2FtY2hpcCAqb3YgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7Ci0KLQlrZnJlZShvdi0+c3ByaXYpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG92NngyMF9zZXRfY29udHJvbChzdHJ1Y3QgaTJjX2NsaWVudCAqYywKLQkJCSAgICAgIHN0cnVjdCBvdmNhbWNoaXBfY29udHJvbCAqY3RsKQotewotCXN0cnVjdCBvdmNhbWNoaXAgKm92ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOwotCXN0cnVjdCBvdjZ4MjAgKnMgPSBvdi0+c3ByaXY7Ci0JaW50IHJjOwotCWludCB2ID0gY3RsLT52YWx1ZTsKLQotCXN3aXRjaCAoY3RsLT5pZCkgewotCWNhc2UgT1ZDQU1DSElQX0NJRF9DT05UOgotCQlyYyA9IG92X3dyaXRlKGMsIFJFR19DTlQsIHYgPj4gOCk7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9CUklHSFQ6Ci0JCXJjID0gb3Zfd3JpdGUoYywgUkVHX0JSVCwgdiA+PiA4KTsKLQkJYnJlYWs7Ci0JY2FzZSBPVkNBTUNISVBfQ0lEX1NBVDoKLQkJcmMgPSBvdl93cml0ZShjLCBSRUdfU0FULCB2ID4+IDgpOwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfSFVFOgotCQlyYyA9IG92X3dyaXRlKGMsIFJFR19SRUQsIDB4RkYgLSAodiA+PiA4KSk7Ci0JCWlmIChyYyA8IDApCi0JCQlnb3RvIG91dDsKLQotCQlyYyA9IG92X3dyaXRlKGMsIFJFR19CTFVFLCB2ID4+IDgpOwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfRVhQOgotCQlyYyA9IG92X3dyaXRlKGMsIFJFR19FWFAsIHYpOwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfRlJFUToKLQl7Ci0JCWludCBzaXh0eSA9ICh2ID09IDYwKTsKLQotCQlyYyA9IG92X3dyaXRlKGMsIDB4MmIsIHNpeHR5PzB4YTg6MHgyOCk7Ci0JCWlmIChyYyA8IDApCi0JCQlnb3RvIG91dDsKLQotCQlyYyA9IG92X3dyaXRlKGMsIDB4MmEsIHNpeHR5PzB4ODQ6MHhhNCk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIE9WQ0FNQ0hJUF9DSURfQkFOREZJTFQ6Ci0JCXJjID0gb3Zfd3JpdGVfbWFzayhjLCAweDJkLCB2PzB4MDQ6MHgwMCwgMHgwNCk7Ci0JCXMtPmJhbmRmaWx0ID0gdjsKLQkJYnJlYWs7Ci0JY2FzZSBPVkNBTUNISVBfQ0lEX0FVVE9CUklHSFQ6Ci0JCXJjID0gb3Zfd3JpdGVfbWFzayhjLCAweDJkLCB2PzB4MTA6MHgwMCwgMHgxMCk7Ci0JCXMtPmF1dG9fYnJ0ID0gdjsKLQkJYnJlYWs7Ci0JY2FzZSBPVkNBTUNISVBfQ0lEX0FVVE9FWFA6Ci0JCXJjID0gb3Zfd3JpdGVfbWFzayhjLCAweDEzLCB2PzB4MDE6MHgwMCwgMHgwMSk7Ci0JCXMtPmF1dG9fZXhwID0gdjsKLQkJYnJlYWs7Ci0JY2FzZSBPVkNBTUNISVBfQ0lEX0JBQ0tMSUdIVDoKLQl7Ci0JCXJjID0gb3Zfd3JpdGVfbWFzayhjLCAweDRlLCB2PzB4ZTA6MHhjMCwgMHhlMCk7Ci0JCWlmIChyYyA8IDApCi0JCQlnb3RvIG91dDsKLQotCQlyYyA9IG92X3dyaXRlX21hc2soYywgMHgyOSwgdj8weDA4OjB4MDAsIDB4MDgpOwotCQlpZiAocmMgPCAwKQotCQkJZ290byBvdXQ7Ci0KLQkJcmMgPSBvdl93cml0ZV9tYXNrKGMsIDB4MGUsIHY/MHg4MDoweDAwLCAweDgwKTsKLQkJcy0+YmFja2xpZ2h0ID0gdjsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgT1ZDQU1DSElQX0NJRF9NSVJST1I6Ci0JCXJjID0gb3Zfd3JpdGVfbWFzayhjLCAweDEyLCB2PzB4NDA6MHgwMCwgMHg0MCk7Ci0JCXMtPm1pcnJvciA9IHY7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURERUJVRygyLCAmYy0+ZGV2LCAiY29udHJvbCBub3Qgc3VwcG9ydGVkOiAlZCIsIGN0bC0+aWQpOwotCQlyZXR1cm4gLUVQRVJNOwotCX0KLQotb3V0OgotCURERUJVRygzLCAmYy0+ZGV2LCAiaWQ9JWQsIGFyZz0lZCwgcmM9JWQiLCBjdGwtPmlkLCB2LCByYyk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IG92NngyMF9nZXRfY29udHJvbChzdHJ1Y3QgaTJjX2NsaWVudCAqYywKLQkJCSAgICAgIHN0cnVjdCBvdmNhbWNoaXBfY29udHJvbCAqY3RsKQotewotCXN0cnVjdCBvdmNhbWNoaXAgKm92ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOwotCXN0cnVjdCBvdjZ4MjAgKnMgPSBvdi0+c3ByaXY7Ci0JaW50IHJjID0gMDsKLQl1bnNpZ25lZCBjaGFyIHZhbCA9IDA7Ci0KLQlzd2l0Y2ggKGN0bC0+aWQpIHsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfQ09OVDoKLQkJcmMgPSBvdl9yZWFkKGMsIFJFR19DTlQsICZ2YWwpOwotCQljdGwtPnZhbHVlID0gdmFsIDw8IDg7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9CUklHSFQ6Ci0JCXJjID0gb3ZfcmVhZChjLCBSRUdfQlJULCAmdmFsKTsKLQkJY3RsLT52YWx1ZSA9IHZhbCA8PCA4OwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfU0FUOgotCQlyYyA9IG92X3JlYWQoYywgUkVHX1NBVCwgJnZhbCk7Ci0JCWN0bC0+dmFsdWUgPSB2YWwgPDwgODsKLQkJYnJlYWs7Ci0JY2FzZSBPVkNBTUNISVBfQ0lEX0hVRToKLQkJcmMgPSBvdl9yZWFkKGMsIFJFR19CTFVFLCAmdmFsKTsKLQkJY3RsLT52YWx1ZSA9IHZhbCA8PCA4OwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfRVhQOgotCQlyYyA9IG92X3JlYWQoYywgUkVHX0VYUCwgJnZhbCk7Ci0JCWN0bC0+dmFsdWUgPSB2YWw7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9CQU5ERklMVDoKLQkJY3RsLT52YWx1ZSA9IHMtPmJhbmRmaWx0OwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfQVVUT0JSSUdIVDoKLQkJY3RsLT52YWx1ZSA9IHMtPmF1dG9fYnJ0OwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfQVVUT0VYUDoKLQkJY3RsLT52YWx1ZSA9IHMtPmF1dG9fZXhwOwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfQkFDS0xJR0hUOgotCQljdGwtPnZhbHVlID0gcy0+YmFja2xpZ2h0OwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfTUlSUk9SOgotCQljdGwtPnZhbHVlID0gcy0+bWlycm9yOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEREVCVUcoMiwgJmMtPmRldiwgImNvbnRyb2wgbm90IHN1cHBvcnRlZDogJWQiLCBjdGwtPmlkKTsKLQkJcmV0dXJuIC1FUEVSTTsKLQl9Ci0KLQlEREVCVUcoMywgJmMtPmRldiwgImlkPSVkLCBhcmc9JWQsIHJjPSVkIiwgY3RsLT5pZCwgY3RsLT52YWx1ZSwgcmMpOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBvdjZ4MjBfbW9kZV9pbml0KHN0cnVjdCBpMmNfY2xpZW50ICpjLCBzdHJ1Y3Qgb3ZjYW1jaGlwX3dpbmRvdyAqd2luKQotewotCS8qKioqKioqKiBRQ0lGLXNwZWNpZmljIHJlZ3MgKioqKioqKiovCi0KLQlvdl93cml0ZShjLCAweDE0LCB3aW4tPnF1YXJ0ZXI/MHgyNDoweDA0KTsKLQotCS8qKioqKioqKiBQYWxldHRlLXNwZWNpZmljIHJlZ3MgKioqKioqKiovCi0KLQkvKiBPVjUxOCBuZWVkcyA4IGJpdCBtdWx0aXBsZXhlZCBpbiBjb2xvciBtb2RlLCBhbmQgMTYgYml0IGluIEImVyAqLwotCWlmIChjLT5hZGFwdGVyLT5pZCA9PSBJMkNfSFdfU01CVVNfT1Y1MTgpIHsKLQkJaWYgKHdpbi0+Zm9ybWF0ID09IFZJREVPX1BBTEVUVEVfR1JFWSkKLQkJCW92X3dyaXRlX21hc2soYywgMHgxMywgMHgwMCwgMHgyMCk7Ci0JCWVsc2UKLQkJCW92X3dyaXRlX21hc2soYywgMHgxMywgMHgyMCwgMHgyMCk7Ci0JfSBlbHNlIHsKLQkJaWYgKHdpbi0+Zm9ybWF0ID09IFZJREVPX1BBTEVUVEVfR1JFWSkKLQkJCW92X3dyaXRlX21hc2soYywgMHgxMywgMHgyMCwgMHgyMCk7Ci0JCWVsc2UKLQkJCW92X3dyaXRlX21hc2soYywgMHgxMywgMHgwMCwgMHgyMCk7Ci0JfQotCi0JLyoqKioqKioqIENsb2NrIHByb2dyYW1taW5nICoqKioqKioqLwotCi0JLyogVGhlIE9WNjYyMCBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nLiBUaGlzIHByZXZlbnRzIHRoZQotCSAqIHNldmVyZSBiYW5kaW5nIHRoYXQgbm9ybWFsbHkgb2NjdXJzICovCi0KLQkvKiBDbG9jayBkb3duICovCi0Jb3Zfd3JpdGUoYywgMHgyYSwgMHgwNCk7Ci0KLQlvdl93cml0ZShjLCAweDExLCB3aW4tPmNsb2NrZGl2KTsKLQotCW92X3dyaXRlKGMsIDB4MmEsIDB4ODQpOwotCS8qIFRoaXMgbmV4dCBzZXR0aW5nIGlzIGNyaXRpY2FsLiBJdCBzZWVtcyB0byBpbXByb3ZlCi0JICogdGhlIGdhaW4gb3IgdGhlIGNvbnRyYXN0LiBUaGUgInJlc2VydmVkIiBiaXRzIHNlZW0KLQkgKiB0byBoYXZlIHNvbWUgZWZmZWN0IGluIHRoaXMgY2FzZS4gKi8KLQlvdl93cml0ZShjLCAweDJkLCAweDg1KTsgLyogRklYTUU6IFRoaXMgbWVzc2VzIHVwIGJhbmRpbmcgZmlsdGVyICovCi0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvdjZ4MjBfc2V0X3dpbmRvdyhzdHJ1Y3QgaTJjX2NsaWVudCAqYywgc3RydWN0IG92Y2FtY2hpcF93aW5kb3cgKndpbikKLXsKLQlpbnQgcmV0LCBod3NjYWxlLCB2d3NjYWxlOwotCi0JcmV0ID0gb3Y2eDIwX21vZGVfaW5pdChjLCB3aW4pOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKHdpbi0+cXVhcnRlcikgewotCQlod3NjYWxlID0gMDsKLQkJdndzY2FsZSA9IDA7Ci0JfSBlbHNlIHsKLQkJaHdzY2FsZSA9IDE7Ci0JCXZ3c2NhbGUgPSAxOwkvKiBUaGUgZGF0YXNoZWV0IHNheXMgMDsgaXQncyB3cm9uZyAqLwotCX0KLQotCW92X3dyaXRlKGMsIDB4MTcsIEhXU0JBU0UgKyAod2luLT54ID4+IGh3c2NhbGUpKTsKLQlvdl93cml0ZShjLCAweDE4LCBIV0VCQVNFICsgKCh3aW4tPnggKyB3aW4tPndpZHRoKSA+PiBod3NjYWxlKSk7Ci0Jb3Zfd3JpdGUoYywgMHgxOSwgVldTQkFTRSArICh3aW4tPnkgPj4gdndzY2FsZSkpOwotCW92X3dyaXRlKGMsIDB4MWEsIFZXRUJBU0UgKyAoKHdpbi0+eSArIHdpbi0+aGVpZ2h0KSA+PiB2d3NjYWxlKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvdjZ4MjBfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBPVkNBTUNISVBfQ01EX1NfQ1RSTDoKLQkJcmV0dXJuIG92NngyMF9zZXRfY29udHJvbChjLCBhcmcpOwotCWNhc2UgT1ZDQU1DSElQX0NNRF9HX0NUUkw6Ci0JCXJldHVybiBvdjZ4MjBfZ2V0X2NvbnRyb2woYywgYXJnKTsKLQljYXNlIE9WQ0FNQ0hJUF9DTURfU19NT0RFOgotCQlyZXR1cm4gb3Y2eDIwX3NldF93aW5kb3coYywgYXJnKTsKLQlkZWZhdWx0OgotCQlEREVCVUcoMiwgJmMtPmRldiwgImNvbW1hbmQgbm90IHN1cHBvcnRlZDogJWQiLCBjbWQpOwotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0KLX0KLQotc3RydWN0IG92Y2FtY2hpcF9vcHMgb3Y2eDIwX29wcyA9IHsKLQkuaW5pdCAgICA9CW92NngyMF9pbml0LAotCS5mcmVlICAgID0Jb3Y2eDIwX2ZyZWUsCi0JLmNvbW1hbmQgPQlvdjZ4MjBfY29tbWFuZCwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9vdjZ4MzAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwL292NngzMC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2I5NGY1MS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9vdjZ4MzAuYworKysgL2Rldi9udWxsCkBAIC0xLDM3MyArMCwwIEBACi0vKiBPbW5pVmlzaW9uIE9WNjYzMC9PVjYxMzAgQ2FtZXJhIENoaXAgU3VwcG9ydCBDb2RlCi0gKgotICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDQgTWFyayBNY0NsZWxsYW5kIDxtYXJrQGFscGhhLmR5bmRucy5vcmc+Ci0gKiBodHRwOi8vYWxwaGEuZHluZG5zLm9yZy9vdjUxMS8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiBOTyBXQVJSQU5UWSBPRiBBTlkgS0lORCBpcyBleHByZXNzZWQgb3IgaW1wbGllZC4KLSAqLwotCi0jZGVmaW5lIERFQlVHCi0KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSAib3ZjYW1jaGlwX3ByaXYuaCIKLQotLyogUmVnaXN0ZXJzICovCi0jZGVmaW5lIFJFR19HQUlOCQkweDAwCS8qIGdhaW4gWzU6MF0gKi8KLSNkZWZpbmUgUkVHX0JMVUUJCTB4MDEJLyogYmx1ZSBnYWluICovCi0jZGVmaW5lIFJFR19SRUQJCQkweDAyCS8qIHJlZCBnYWluICovCi0jZGVmaW5lIFJFR19TQVQJCQkweDAzCS8qIHNhdHVyYXRpb24gWzc6M10gKi8KLSNkZWZpbmUgUkVHX0NOVAkJCTB4MDUJLyogWSBjb250cmFzdCBbMzowXSAqLwotI2RlZmluZSBSRUdfQlJUCQkJMHgwNgkvKiBZIGJyaWdodG5lc3MgKi8KLSNkZWZpbmUgUkVHX1NIQVJQCQkweDA3CS8qIHNoYXJwbmVzcyAqLwotI2RlZmluZSBSRUdfV0JfQkxVRQkJMHgwQwkvKiBXQiBibHVlIHJhdGlvIFs1OjBdICovCi0jZGVmaW5lIFJFR19XQl9SRUQJCTB4MEQJLyogV0IgcmVkIHJhdGlvIFs1OjBdICovCi0jZGVmaW5lIFJFR19FWFAJCQkweDEwCS8qIGV4cG9zdXJlICovCi0KLS8qIFdpbmRvdyBwYXJhbWV0ZXJzICovCi0jZGVmaW5lIEhXU0JBU0UgMHgzOAotI2RlZmluZSBIV0VCQVNFIDB4M0EKLSNkZWZpbmUgVldTQkFTRSAweDA1Ci0jZGVmaW5lIFZXRUJBU0UgMHgwNgotCi1zdHJ1Y3Qgb3Y2eDMwIHsKLQlpbnQgYXV0b19icnQ7Ci0JaW50IGF1dG9fZXhwOwotCWludCBiYWNrbGlnaHQ7Ci0JaW50IGJhbmRmaWx0OwotCWludCBtaXJyb3I7Ci19OwotCi1zdGF0aWMgc3RydWN0IG92Y2FtY2hpcF9yZWd2YWxzIHJlZ3ZhbHNfaW5pdF82eDMwW10gPSB7Ci0JeyAweDEyLCAweDgwIH0sIC8qIHJlc2V0ICovCi0JeyAweDAwLCAweDFmIH0sIC8qIEdhaW4gKi8KLQl7IDB4MDEsIDB4OTkgfSwgLyogQmx1ZSBnYWluICovCi0JeyAweDAyLCAweDdjIH0sIC8qIFJlZCBnYWluICovCi0JeyAweDAzLCAweGMwIH0sIC8qIFNhdHVyYXRpb24gKi8KLQl7IDB4MDUsIDB4MGEgfSwgLyogQ29udHJhc3QgKi8KLQl7IDB4MDYsIDB4OTUgfSwgLyogQnJpZ2h0bmVzcyAqLwotCXsgMHgwNywgMHgyZCB9LCAvKiBTaGFycG5lc3MgKi8KLQl7IDB4MGMsIDB4MjAgfSwKLQl7IDB4MGQsIDB4MjAgfSwKLQl7IDB4MGUsIDB4MjAgfSwKLQl7IDB4MGYsIDB4MDUgfSwKLQl7IDB4MTAsIDB4OWEgfSwgLyogImV4cG9zdXJlIGNoZWNrIiAqLwotCXsgMHgxMSwgMHgwMCB9LCAvKiBQaXhlbCBjbG9jayA9IGZhc3Rlc3QgKi8KLQl7IDB4MTIsIDB4MjQgfSwgLyogRW5hYmxlIEFHQyBhbmQgQVdCICovCi0JeyAweDEzLCAweDIxIH0sCi0JeyAweDE0LCAweDgwIH0sCi0JeyAweDE1LCAweDAxIH0sCi0JeyAweDE2LCAweDAzIH0sCi0JeyAweDE3LCAweDM4IH0sCi0JeyAweDE4LCAweGVhIH0sCi0JeyAweDE5LCAweDA0IH0sCi0JeyAweDFhLCAweDkzIH0sCi0JeyAweDFiLCAweDAwIH0sCi0JeyAweDFlLCAweGM0IH0sCi0JeyAweDFmLCAweDA0IH0sCi0JeyAweDIwLCAweDIwIH0sCi0JeyAweDIxLCAweDEwIH0sCi0JeyAweDIyLCAweDg4IH0sCi0JeyAweDIzLCAweGMwIH0sIC8qIENyeXN0YWwgY2lyY3VpdCBwb3dlciBsZXZlbCAqLwotCXsgMHgyNSwgMHg5YSB9LCAvKiBJbmNyZWFzZSBBRUMgYmxhY2sgcGl4ZWwgcmF0aW8gKi8KLQl7IDB4MjYsIDB4YjIgfSwgLyogQkxDIGVuYWJsZSAqLwotCXsgMHgyNywgMHhhMiB9LAotCXsgMHgyOCwgMHgwMCB9LAotCXsgMHgyOSwgMHgwMCB9LAotCXsgMHgyYSwgMHg4NCB9LCAvKiAoa2VlcCkgKi8KLQl7IDB4MmIsIDB4YTggfSwgLyogKGtlZXApICovCi0JeyAweDJjLCAweGEwIH0sCi0JeyAweDJkLCAweDk1IH0sCS8qIEVuYWJsZSBhdXRvLWJyaWdodG5lc3MgKi8KLQl7IDB4MmUsIDB4ODggfSwKLQl7IDB4MzMsIDB4MjYgfSwKLQl7IDB4MzQsIDB4MDMgfSwKLQl7IDB4MzYsIDB4OGYgfSwKLQl7IDB4MzcsIDB4ODAgfSwKLQl7IDB4MzgsIDB4ODMgfSwKLQl7IDB4MzksIDB4ODAgfSwKLQl7IDB4M2EsIDB4MGYgfSwKLQl7IDB4M2IsIDB4M2MgfSwKLQl7IDB4M2MsIDB4MWEgfSwKLQl7IDB4M2QsIDB4ODAgfSwKLQl7IDB4M2UsIDB4ODAgfSwKLQl7IDB4M2YsIDB4MGUgfSwKLQl7IDB4NDAsIDB4MDAgfSwgLyogV2hpdGUgYmFsICovCi0JeyAweDQxLCAweDAwIH0sIC8qIFdoaXRlIGJhbCAqLwotCXsgMHg0MiwgMHg4MCB9LAotCXsgMHg0MywgMHgzZiB9LCAvKiBXaGl0ZSBiYWwgKi8KLQl7IDB4NDQsIDB4ODAgfSwKLQl7IDB4NDUsIDB4MjAgfSwKLQl7IDB4NDYsIDB4MjAgfSwKLQl7IDB4NDcsIDB4ODAgfSwKLQl7IDB4NDgsIDB4N2YgfSwKLQl7IDB4NDksIDB4MDAgfSwKLQl7IDB4NGEsIDB4MDAgfSwKLQl7IDB4NGIsIDB4ODAgfSwKLQl7IDB4NGMsIDB4ZDAgfSwKLQl7IDB4NGQsIDB4MTAgfSwgLyogVSA9IDAuNTYzdSwgViA9IDAuNzE0diAqLwotCXsgMHg0ZSwgMHg0MCB9LAotCXsgMHg0ZiwgMHgwNyB9LCAvKiBVViBhdmVyYWdlIG1vZGUsIGNvbG9yIGtpbGxlcjogc3Ryb25nZXN0ICovCi0JeyAweDUwLCAweGZmIH0sCi0JeyAweDU0LCAweDIzIH0sIC8qIE1heCBBR0MgZ2FpbjogMThkQiAqLwotCXsgMHg1NSwgMHhmZiB9LAotCXsgMHg1NiwgMHgxMiB9LAotCXsgMHg1NywgMHg4MSB9LCAvKiAoZGVmYXVsdCkgKi8KLQl7IDB4NTgsIDB4NzUgfSwKLQl7IDB4NTksIDB4MDEgfSwgLyogQUdDIGRhcmsgY3VycmVudCBjb21wZW5zYXRpb246ICsxICovCi0JeyAweDVhLCAweDJjIH0sCi0JeyAweDViLCAweDBmIH0sIC8qIEFXQiBjaHJvbWluYW5jZSBsZXZlbHMgKi8KLQl7IDB4NWMsIDB4MTAgfSwKLQl7IDB4M2QsIDB4ODAgfSwKLQl7IDB4MjcsIDB4YTYgfSwKLQkvKiBUb2dnbGUgQVdCIG9mZiBhbmQgb24gKi8KLQl7IDB4MTIsIDB4MjAgfSwKLQl7IDB4MTIsIDB4MjQgfSwKLQotCXsgMHhmZiwgMHhmZiB9LAkvKiBFTkQgTUFSS0VSICovCi19OwotCi0vKiBUaGlzIGluaXRpYWxpemVzIHRoZSBPVjZ4MzAgY2FtZXJhIGNoaXAgYW5kIHJlbGV2YW50IHZhcmlhYmxlcy4gKi8KLXN0YXRpYyBpbnQgb3Y2eDMwX2luaXQoc3RydWN0IGkyY19jbGllbnQgKmMpCi17Ci0Jc3RydWN0IG92Y2FtY2hpcCAqb3YgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7Ci0Jc3RydWN0IG92NngzMCAqczsKLQlpbnQgcmM7Ci0KLQlEREVCVUcoNCwgJmMtPmRldiwgImVudGVyZWQiKTsKLQotCXJjID0gb3Zfd3JpdGVfcmVndmFscyhjLCByZWd2YWxzX2luaXRfNngzMCk7Ci0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOwotCi0Jb3YtPnNwcml2ID0gcyA9IGt6YWxsb2Moc2l6ZW9mICpzLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jcy0+YXV0b19icnQgPSAxOwotCXMtPmF1dG9fZXhwID0gMTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBvdjZ4MzBfZnJlZShzdHJ1Y3QgaTJjX2NsaWVudCAqYykKLXsKLQlzdHJ1Y3Qgb3ZjYW1jaGlwICpvdiA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKLQotCWtmcmVlKG92LT5zcHJpdik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Y2eDMwX3NldF9jb250cm9sKHN0cnVjdCBpMmNfY2xpZW50ICpjLAotCQkJICAgICAgc3RydWN0IG92Y2FtY2hpcF9jb250cm9sICpjdGwpCi17Ci0Jc3RydWN0IG92Y2FtY2hpcCAqb3YgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7Ci0Jc3RydWN0IG92NngzMCAqcyA9IG92LT5zcHJpdjsKLQlpbnQgcmM7Ci0JaW50IHYgPSBjdGwtPnZhbHVlOwotCi0Jc3dpdGNoIChjdGwtPmlkKSB7Ci0JY2FzZSBPVkNBTUNISVBfQ0lEX0NPTlQ6Ci0JCXJjID0gb3Zfd3JpdGVfbWFzayhjLCBSRUdfQ05ULCB2ID4+IDEyLCAweDBmKTsKLQkJYnJlYWs7Ci0JY2FzZSBPVkNBTUNISVBfQ0lEX0JSSUdIVDoKLQkJcmMgPSBvdl93cml0ZShjLCBSRUdfQlJULCB2ID4+IDgpOwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfU0FUOgotCQlyYyA9IG92X3dyaXRlKGMsIFJFR19TQVQsIHYgPj4gOCk7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9IVUU6Ci0JCXJjID0gb3Zfd3JpdGUoYywgUkVHX1JFRCwgMHhGRiAtICh2ID4+IDgpKTsKLQkJaWYgKHJjIDwgMCkKLQkJCWdvdG8gb3V0OwotCi0JCXJjID0gb3Zfd3JpdGUoYywgUkVHX0JMVUUsIHYgPj4gOCk7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9FWFA6Ci0JCXJjID0gb3Zfd3JpdGUoYywgUkVHX0VYUCwgdik7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9GUkVROgotCXsKLQkJaW50IHNpeHR5ID0gKHYgPT0gNjApOwotCi0JCXJjID0gb3Zfd3JpdGUoYywgMHgyYiwgc2l4dHk/MHhhODoweDI4KTsKLQkJaWYgKHJjIDwgMCkKLQkJCWdvdG8gb3V0OwotCi0JCXJjID0gb3Zfd3JpdGUoYywgMHgyYSwgc2l4dHk/MHg4NDoweGE0KTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgT1ZDQU1DSElQX0NJRF9CQU5ERklMVDoKLQkJcmMgPSBvdl93cml0ZV9tYXNrKGMsIDB4MmQsIHY/MHgwNDoweDAwLCAweDA0KTsKLQkJcy0+YmFuZGZpbHQgPSB2OwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfQVVUT0JSSUdIVDoKLQkJcmMgPSBvdl93cml0ZV9tYXNrKGMsIDB4MmQsIHY/MHgxMDoweDAwLCAweDEwKTsKLQkJcy0+YXV0b19icnQgPSB2OwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfQVVUT0VYUDoKLQkJcmMgPSBvdl93cml0ZV9tYXNrKGMsIDB4MjgsIHY/MHgwMDoweDEwLCAweDEwKTsKLQkJcy0+YXV0b19leHAgPSB2OwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfQkFDS0xJR0hUOgotCXsKLQkJcmMgPSBvdl93cml0ZV9tYXNrKGMsIDB4NGUsIHY/MHg4MDoweDYwLCAweGUwKTsKLQkJaWYgKHJjIDwgMCkKLQkJCWdvdG8gb3V0OwotCi0JCXJjID0gb3Zfd3JpdGVfbWFzayhjLCAweDI5LCB2PzB4MDg6MHgwMCwgMHgwOCk7Ci0JCWlmIChyYyA8IDApCi0JCQlnb3RvIG91dDsKLQotCQlyYyA9IG92X3dyaXRlX21hc2soYywgMHgyOCwgdj8weDAyOjB4MDAsIDB4MDIpOwotCQlzLT5iYWNrbGlnaHQgPSB2OwotCQlicmVhazsKLQl9Ci0JY2FzZSBPVkNBTUNISVBfQ0lEX01JUlJPUjoKLQkJcmMgPSBvdl93cml0ZV9tYXNrKGMsIDB4MTIsIHY/MHg0MDoweDAwLCAweDQwKTsKLQkJcy0+bWlycm9yID0gdjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJRERFQlVHKDIsICZjLT5kZXYsICJjb250cm9sIG5vdCBzdXBwb3J0ZWQ6ICVkIiwgY3RsLT5pZCk7Ci0JCXJldHVybiAtRVBFUk07Ci0JfQotCi1vdXQ6Ci0JRERFQlVHKDMsICZjLT5kZXYsICJpZD0lZCwgYXJnPSVkLCByYz0lZCIsIGN0bC0+aWQsIHYsIHJjKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgb3Y2eDMwX2dldF9jb250cm9sKHN0cnVjdCBpMmNfY2xpZW50ICpjLAotCQkJICAgICAgc3RydWN0IG92Y2FtY2hpcF9jb250cm9sICpjdGwpCi17Ci0Jc3RydWN0IG92Y2FtY2hpcCAqb3YgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7Ci0Jc3RydWN0IG92NngzMCAqcyA9IG92LT5zcHJpdjsKLQlpbnQgcmMgPSAwOwotCXVuc2lnbmVkIGNoYXIgdmFsID0gMDsKLQotCXN3aXRjaCAoY3RsLT5pZCkgewotCWNhc2UgT1ZDQU1DSElQX0NJRF9DT05UOgotCQlyYyA9IG92X3JlYWQoYywgUkVHX0NOVCwgJnZhbCk7Ci0JCWN0bC0+dmFsdWUgPSAodmFsICYgMHgwZikgPDwgMTI7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9CUklHSFQ6Ci0JCXJjID0gb3ZfcmVhZChjLCBSRUdfQlJULCAmdmFsKTsKLQkJY3RsLT52YWx1ZSA9IHZhbCA8PCA4OwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfU0FUOgotCQlyYyA9IG92X3JlYWQoYywgUkVHX1NBVCwgJnZhbCk7Ci0JCWN0bC0+dmFsdWUgPSB2YWwgPDwgODsKLQkJYnJlYWs7Ci0JY2FzZSBPVkNBTUNISVBfQ0lEX0hVRToKLQkJcmMgPSBvdl9yZWFkKGMsIFJFR19CTFVFLCAmdmFsKTsKLQkJY3RsLT52YWx1ZSA9IHZhbCA8PCA4OwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfRVhQOgotCQlyYyA9IG92X3JlYWQoYywgUkVHX0VYUCwgJnZhbCk7Ci0JCWN0bC0+dmFsdWUgPSB2YWw7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9CQU5ERklMVDoKLQkJY3RsLT52YWx1ZSA9IHMtPmJhbmRmaWx0OwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfQVVUT0JSSUdIVDoKLQkJY3RsLT52YWx1ZSA9IHMtPmF1dG9fYnJ0OwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfQVVUT0VYUDoKLQkJY3RsLT52YWx1ZSA9IHMtPmF1dG9fZXhwOwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfQkFDS0xJR0hUOgotCQljdGwtPnZhbHVlID0gcy0+YmFja2xpZ2h0OwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfTUlSUk9SOgotCQljdGwtPnZhbHVlID0gcy0+bWlycm9yOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEREVCVUcoMiwgJmMtPmRldiwgImNvbnRyb2wgbm90IHN1cHBvcnRlZDogJWQiLCBjdGwtPmlkKTsKLQkJcmV0dXJuIC1FUEVSTTsKLQl9Ci0KLQlEREVCVUcoMywgJmMtPmRldiwgImlkPSVkLCBhcmc9JWQsIHJjPSVkIiwgY3RsLT5pZCwgY3RsLT52YWx1ZSwgcmMpOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBvdjZ4MzBfbW9kZV9pbml0KHN0cnVjdCBpMmNfY2xpZW50ICpjLCBzdHJ1Y3Qgb3ZjYW1jaGlwX3dpbmRvdyAqd2luKQotewotCS8qKioqKioqKiBRQ0lGLXNwZWNpZmljIHJlZ3MgKioqKioqKiovCi0KLQlvdl93cml0ZV9tYXNrKGMsIDB4MTQsIHdpbi0+cXVhcnRlcj8weDIwOjB4MDAsIDB4MjApOwotCi0JLyoqKioqKioqIFBhbGV0dGUtc3BlY2lmaWMgcmVncyAqKioqKioqKi8KLQotCWlmICh3aW4tPmZvcm1hdCA9PSBWSURFT19QQUxFVFRFX0dSRVkpIHsKLQkJaWYgKGMtPmFkYXB0ZXItPmlkID09IEkyQ19IV19TTUJVU19PVjUxOCkgewotCQkJLyogRG8gbm90aGluZyAtIHdlJ3JlIGFscmVhZHkgaW4gOC1iaXQgbW9kZSAqLwotCQl9IGVsc2UgewotCQkJb3Zfd3JpdGVfbWFzayhjLCAweDEzLCAweDIwLCAweDIwKTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIFRoZSBPVjUxOCBuZWVkcyBzcGVjaWFsIHRyZWF0bWVudC4gQWx0aG91Z2ggYm90aCB0aGUgT1Y1MTgKLQkJICogYW5kIHRoZSBPVjY2MzAgc3VwcG9ydCBhIDE2LWJpdCB2aWRlbyBidXMsIG9ubHkgdGhlIDggYml0IFkKLQkJICogYnVzIGlzIGFjdHVhbGx5IHVzZWQuIFRoZSBVViBidXMgaXMgdGllZCB0byBncm91bmQuCi0JCSAqIFRoZXJlZm9yZSwgdGhlIE9WNjYzMCBuZWVkcyB0byBiZSBpbiA4LWJpdCBtdWx0aXBsZXhlZAotCQkgKiBvdXRwdXQgbW9kZSAqLwotCi0JCWlmIChjLT5hZGFwdGVyLT5pZCA9PSBJMkNfSFdfU01CVVNfT1Y1MTgpIHsKLQkJCS8qIERvIG5vdGhpbmcgLSB3ZSB3YW50IHRvIHN0YXkgaW4gOC1iaXQgbW9kZSAqLwotCQkJLyogV2FybmluZzogTWVzc2luZyB3aXRoIHJlZyAweDEzIGJyZWFrcyBPVjUxOCBjb2xvciAqLwotCQl9IGVsc2UgewotCQkJb3Zfd3JpdGVfbWFzayhjLCAweDEzLCAweDAwLCAweDIwKTsKLQkJfQotCX0KLQotCS8qKioqKioqKiBDbG9jayBwcm9ncmFtbWluZyAqKioqKioqKi8KLQotCW92X3dyaXRlKGMsIDB4MTEsIHdpbi0+Y2xvY2tkaXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Y2eDMwX3NldF93aW5kb3coc3RydWN0IGkyY19jbGllbnQgKmMsIHN0cnVjdCBvdmNhbWNoaXBfd2luZG93ICp3aW4pCi17Ci0JaW50IHJldCwgaHdzY2FsZSwgdndzY2FsZTsKLQotCXJldCA9IG92NngzMF9tb2RlX2luaXQoYywgd2luKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCWlmICh3aW4tPnF1YXJ0ZXIpIHsKLQkJaHdzY2FsZSA9IDA7Ci0JCXZ3c2NhbGUgPSAwOwotCX0gZWxzZSB7Ci0JCWh3c2NhbGUgPSAxOwotCQl2d3NjYWxlID0gMTsJLyogVGhlIGRhdGFzaGVldCBzYXlzIDA7IGl0J3Mgd3JvbmcgKi8KLQl9Ci0KLQlvdl93cml0ZShjLCAweDE3LCBIV1NCQVNFICsgKHdpbi0+eCA+PiBod3NjYWxlKSk7Ci0Jb3Zfd3JpdGUoYywgMHgxOCwgSFdFQkFTRSArICgod2luLT54ICsgd2luLT53aWR0aCkgPj4gaHdzY2FsZSkpOwotCW92X3dyaXRlKGMsIDB4MTksIFZXU0JBU0UgKyAod2luLT55ID4+IHZ3c2NhbGUpKTsKLQlvdl93cml0ZShjLCAweDFhLCBWV0VCQVNFICsgKCh3aW4tPnkgKyB3aW4tPmhlaWdodCkgPj4gdndzY2FsZSkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Y2eDMwX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgT1ZDQU1DSElQX0NNRF9TX0NUUkw6Ci0JCXJldHVybiBvdjZ4MzBfc2V0X2NvbnRyb2woYywgYXJnKTsKLQljYXNlIE9WQ0FNQ0hJUF9DTURfR19DVFJMOgotCQlyZXR1cm4gb3Y2eDMwX2dldF9jb250cm9sKGMsIGFyZyk7Ci0JY2FzZSBPVkNBTUNISVBfQ01EX1NfTU9ERToKLQkJcmV0dXJuIG92NngzMF9zZXRfd2luZG93KGMsIGFyZyk7Ci0JZGVmYXVsdDoKLQkJRERFQlVHKDIsICZjLT5kZXYsICJjb21tYW5kIG5vdCBzdXBwb3J0ZWQ6ICVkIiwgY21kKTsKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9Ci19Ci0KLXN0cnVjdCBvdmNhbWNoaXBfb3BzIG92NngzMF9vcHMgPSB7Ci0JLmluaXQgICAgPQlvdjZ4MzBfaW5pdCwKLQkuZnJlZSAgICA9CW92NngzMF9mcmVlLAotCS5jb21tYW5kID0Jb3Y2eDMwX2NvbW1hbmQsCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3Y3NmJlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9vdjc2YmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFmNmJlOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9vdjc2YmUuYworKysgL2Rldi9udWxsCkBAIC0xLDMwMiArMCwwIEBACi0vKiBPbW5pVmlzaW9uIE9WNzZCRSBDYW1lcmEgQ2hpcCBTdXBwb3J0IENvZGUKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNCBNYXJrIE1jQ2xlbGxhbmQgPG1hcmtAYWxwaGEuZHluZG5zLm9yZz4KLSAqIGh0dHA6Ly9hbHBoYS5keW5kbnMub3JnL292NTExLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uIE5PIFdBUlJBTlRZIE9GIEFOWSBLSU5EIGlzIGV4cHJlc3NlZCBvciBpbXBsaWVkLgotICovCi0KLSNkZWZpbmUgREVCVUcKLQotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlICJvdmNhbWNoaXBfcHJpdi5oIgotCi0vKiBPVjc2MTAgcmVnaXN0ZXJzOiBTaW5jZSB0aGUgT1Y3NkJFIGlzIHVuZG9jdW1lbnRlZCwgd2UnbGwgc2V0dGxlIGZvciB0aGVzZQotICogZm9yIG5vdy4gKi8KLSNkZWZpbmUgUkVHX0dBSU4JCTB4MDAJLyogZ2FpbiBbNTowXSAqLwotI2RlZmluZSBSRUdfQkxVRQkJMHgwMQkvKiBibHVlIGNoYW5uZWwgYmFsYW5jZSAqLwotI2RlZmluZSBSRUdfUkVECQkJMHgwMgkvKiByZWQgY2hhbm5lbCBiYWxhbmNlICovCi0jZGVmaW5lIFJFR19TQVQJCQkweDAzCS8qIHNhdHVyYXRpb24gKi8KLSNkZWZpbmUgUkVHX0NOVAkJCTB4MDUJLyogWSBjb250cmFzdCAqLwotI2RlZmluZSBSRUdfQlJUCQkJMHgwNgkvKiBZIGJyaWdodG5lc3MgKi8KLSNkZWZpbmUgUkVHX0JMVUVfQklBUwkJMHgwQwkvKiBibHVlIGNoYW5uZWwgYmlhcyBbNTowXSAqLwotI2RlZmluZSBSRUdfUkVEX0JJQVMJCTB4MEQJLyogcmVkIGNoYW5uZWwgYmlhcyBbNTowXSAqLwotI2RlZmluZSBSRUdfR0FNTUFfQ09FRkYJCTB4MEUJLyogZ2FtbWEgc2V0dGluZ3MgKi8KLSNkZWZpbmUgUkVHX1dCX1JBTkdFCQkweDBGCS8qIEFFQy9BTEMvUy1BV0Igc2V0dGluZ3MgKi8KLSNkZWZpbmUgUkVHX0VYUAkJCTB4MTAJLyogbWFudWFsIGV4cG9zdXJlIHNldHRpbmcgKi8KLSNkZWZpbmUgUkVHX0NMT0NLCQkweDExCS8qIHBvbGFyaXR5L2Nsb2NrIHByZXNjYWxlciAqLwotI2RlZmluZSBSRUdfRklFTERfRElWSURFCTB4MTYJLyogZmllbGQgaW50ZXJ2YWwvbW9kZSBzZXR0aW5ncyAqLwotI2RlZmluZSBSRUdfSFdJTl9TVEFSVAkJMHgxNwkvKiBob3Jpem9udGFsIHdpbmRvdyBzdGFydCAqLwotI2RlZmluZSBSRUdfSFdJTl9FTkQJCTB4MTgJLyogaG9yaXpvbnRhbCB3aW5kb3cgZW5kICovCi0jZGVmaW5lIFJFR19WV0lOX1NUQVJUCQkweDE5CS8qIHZlcnRpY2FsIHdpbmRvdyBzdGFydCAqLwotI2RlZmluZSBSRUdfVldJTl9FTkQJCTB4MUEJLyogdmVydGljYWwgd2luZG93IGVuZCAqLwotI2RlZmluZSBSRUdfUElYRUxfU0hJRlQgICAJMHgxQgkvKiBwaXhlbCBzaGlmdCAqLwotI2RlZmluZSBSRUdfWU9GRlNFVAkJMHgyMQkvKiBZIGNoYW5uZWwgb2Zmc2V0ICovCi0jZGVmaW5lIFJFR19VT0ZGU0VUCQkweDIyCS8qIFUgY2hhbm5lbCBvZmZzZXQgKi8KLSNkZWZpbmUgUkVHX0VDVwkJCTB4MjQJLyogZXhwb3N1cmUgd2hpdGUgbGV2ZWwgZm9yIEFFQyAqLwotI2RlZmluZSBSRUdfRUNCCQkJMHgyNQkvKiBleHBvc3VyZSBibGFjayBsZXZlbCBmb3IgQUVDICovCi0jZGVmaW5lIFJFR19GUkFNRVJBVEVfSAkJMHgyQQkvKiBmcmFtZSByYXRlIE1TQiArIG1pc2MgKi8KLSNkZWZpbmUgUkVHX0ZSQU1FUkFURV9MCQkweDJCCS8qIGZyYW1lIHJhdGUgTFNCICovCi0jZGVmaW5lIFJFR19BTEMJCQkweDJDCS8qIEF1dG8gTGV2ZWwgQ29udHJvbCBzZXR0aW5ncyAqLwotI2RlZmluZSBSRUdfVk9GRlNFVAkJMHgyRQkvKiBWIGNoYW5uZWwgb2Zmc2V0IGFkanVzdG1lbnQgKi8KLSNkZWZpbmUgUkVHX0FSUkFZX0JJQVMJCTB4MkYJLyogYXJyYXkgYmlhcyAtLSBkb24ndCBjaGFuZ2UgKi8KLSNkZWZpbmUgUkVHX1lHQU1NQQkJMHgzMwkvKiBtaXNjIGdhbW1hIHNldHRpbmdzIFs3OjZdICovCi0jZGVmaW5lIFJFR19CSUFTX0FESlVTVAkJMHgzNAkvKiBtaXNjIGJpYXMgc2V0dGluZ3MgKi8KLQotLyogV2luZG93IHBhcmFtZXRlcnMgKi8KLSNkZWZpbmUgSFdTQkFTRSAweDM4Ci0jZGVmaW5lIEhXRUJBU0UgMHgzYQotI2RlZmluZSBWV1NCQVNFIDB4MDUKLSNkZWZpbmUgVldFQkFTRSAweDA1Ci0KLXN0cnVjdCBvdjc2YmUgewotCWludCBhdXRvX2JydDsKLQlpbnQgYXV0b19leHA7Ci0JaW50IGJhbmRmaWx0OwotCWludCBtaXJyb3I7Ci19OwotCi0vKiBOT1RFOiBUaGVzZSBhcmUgdGhlIHNhbWUgYXMgdGhlIDd4MTAgc2V0dGluZ3MsIGJ1dCBzaG91bGQgZXZlbnR1YWxseSBiZQotICogb3B0aW1pemVkIGZvciB0aGUgT1Y3NkJFICovCi1zdGF0aWMgc3RydWN0IG92Y2FtY2hpcF9yZWd2YWxzIHJlZ3ZhbHNfaW5pdF83NmJlW10gPSB7Ci0JeyAweDEwLCAweGZmIH0sCi0JeyAweDE2LCAweDAzIH0sCi0JeyAweDI4LCAweDI0IH0sCi0JeyAweDJiLCAweGFjIH0sCi0JeyAweDEyLCAweDAwIH0sCi0JeyAweDM4LCAweDgxIH0sCi0JeyAweDI4LCAweDI0IH0sCS8qIDBjICovCi0JeyAweDBmLCAweDg1IH0sCS8qIGxnJ3Mgc2V0dGluZyAqLwotCXsgMHgxNSwgMHgwMSB9LAotCXsgMHgyMCwgMHgxYyB9LAotCXsgMHgyMywgMHgyYSB9LAotCXsgMHgyNCwgMHgxMCB9LAotCXsgMHgyNSwgMHg4YSB9LAotCXsgMHgyNiwgMHhhMiB9LAotCXsgMHgyNywgMHhjMiB9LAotCXsgMHgyYSwgMHgwNCB9LAotCXsgMHgyYywgMHhmZSB9LAotCXsgMHgyZCwgMHg5MyB9LAotCXsgMHgzMCwgMHg3MSB9LAotCXsgMHgzMSwgMHg2MCB9LAotCXsgMHgzMiwgMHgyNiB9LAotCXsgMHgzMywgMHgyMCB9LAotCXsgMHgzNCwgMHg0OCB9LAotCXsgMHgxMiwgMHgyNCB9LAotCXsgMHgxMSwgMHgwMSB9LAotCXsgMHgwYywgMHgyNCB9LAotCXsgMHgwZCwgMHgyNCB9LAotCXsgMHhmZiwgMHhmZiB9LAkvKiBFTkQgTUFSS0VSICovCi19OwotCi0vKiBUaGlzIGluaXRpYWxpemVzIHRoZSBPVjc2YmUgY2FtZXJhIGNoaXAgYW5kIHJlbGV2YW50IHZhcmlhYmxlcy4gKi8KLXN0YXRpYyBpbnQgb3Y3NmJlX2luaXQoc3RydWN0IGkyY19jbGllbnQgKmMpCi17Ci0Jc3RydWN0IG92Y2FtY2hpcCAqb3YgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7Ci0Jc3RydWN0IG92NzZiZSAqczsKLQlpbnQgcmM7Ci0KLQlEREVCVUcoNCwgJmMtPmRldiwgImVudGVyZWQiKTsKLQotCXJjID0gb3Zfd3JpdGVfcmVndmFscyhjLCByZWd2YWxzX2luaXRfNzZiZSk7Ci0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOwotCi0Jb3YtPnNwcml2ID0gcyA9IGt6YWxsb2Moc2l6ZW9mICpzLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jcy0+YXV0b19icnQgPSAxOwotCXMtPmF1dG9fZXhwID0gMTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBvdjc2YmVfZnJlZShzdHJ1Y3QgaTJjX2NsaWVudCAqYykKLXsKLQlzdHJ1Y3Qgb3ZjYW1jaGlwICpvdiA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKLQotCWtmcmVlKG92LT5zcHJpdik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Y3NmJlX3NldF9jb250cm9sKHN0cnVjdCBpMmNfY2xpZW50ICpjLAotCQkJICAgICAgc3RydWN0IG92Y2FtY2hpcF9jb250cm9sICpjdGwpCi17Ci0Jc3RydWN0IG92Y2FtY2hpcCAqb3YgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7Ci0Jc3RydWN0IG92NzZiZSAqcyA9IG92LT5zcHJpdjsKLQlpbnQgcmM7Ci0JaW50IHYgPSBjdGwtPnZhbHVlOwotCi0Jc3dpdGNoIChjdGwtPmlkKSB7Ci0JY2FzZSBPVkNBTUNISVBfQ0lEX0JSSUdIVDoKLQkJcmMgPSBvdl93cml0ZShjLCBSRUdfQlJULCB2ID4+IDgpOwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfU0FUOgotCQlyYyA9IG92X3dyaXRlKGMsIFJFR19TQVQsIHYgPj4gOCk7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9FWFA6Ci0JCXJjID0gb3Zfd3JpdGUoYywgUkVHX0VYUCwgdik7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9GUkVROgotCXsKLQkJaW50IHNpeHR5ID0gKHYgPT0gNjApOwotCi0JCXJjID0gb3Zfd3JpdGVfbWFzayhjLCAweDJhLCBzaXh0eT8weDAwOjB4ODAsIDB4ODApOwotCQlpZiAocmMgPCAwKQotCQkJZ290byBvdXQ7Ci0KLQkJcmMgPSBvdl93cml0ZShjLCAweDJiLCBzaXh0eT8weDAwOjB4YWMpOwotCQlpZiAocmMgPCAwKQotCQkJZ290byBvdXQ7Ci0KLQkJcmMgPSBvdl93cml0ZV9tYXNrKGMsIDB4NzYsIDB4MDEsIDB4MDEpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBPVkNBTUNISVBfQ0lEX0JBTkRGSUxUOgotCQlyYyA9IG92X3dyaXRlX21hc2soYywgMHgyZCwgdj8weDA0OjB4MDAsIDB4MDQpOwotCQlzLT5iYW5kZmlsdCA9IHY7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9BVVRPQlJJR0hUOgotCQlyYyA9IG92X3dyaXRlX21hc2soYywgMHgyZCwgdj8weDEwOjB4MDAsIDB4MTApOwotCQlzLT5hdXRvX2JydCA9IHY7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9BVVRPRVhQOgotCQlyYyA9IG92X3dyaXRlX21hc2soYywgMHgxMywgdj8weDAxOjB4MDAsIDB4MDEpOwotCQlzLT5hdXRvX2V4cCA9IHY7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9NSVJST1I6Ci0JCXJjID0gb3Zfd3JpdGVfbWFzayhjLCAweDEyLCB2PzB4NDA6MHgwMCwgMHg0MCk7Ci0JCXMtPm1pcnJvciA9IHY7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURERUJVRygyLCAmYy0+ZGV2LCAiY29udHJvbCBub3Qgc3VwcG9ydGVkOiAlZCIsIGN0bC0+aWQpOwotCQlyZXR1cm4gLUVQRVJNOwotCX0KLQotb3V0OgotCURERUJVRygzLCAmYy0+ZGV2LCAiaWQ9JWQsIGFyZz0lZCwgcmM9JWQiLCBjdGwtPmlkLCB2LCByYyk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IG92NzZiZV9nZXRfY29udHJvbChzdHJ1Y3QgaTJjX2NsaWVudCAqYywKLQkJCSAgICAgIHN0cnVjdCBvdmNhbWNoaXBfY29udHJvbCAqY3RsKQotewotCXN0cnVjdCBvdmNhbWNoaXAgKm92ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOwotCXN0cnVjdCBvdjc2YmUgKnMgPSBvdi0+c3ByaXY7Ci0JaW50IHJjID0gMDsKLQl1bnNpZ25lZCBjaGFyIHZhbCA9IDA7Ci0KLQlzd2l0Y2ggKGN0bC0+aWQpIHsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfQlJJR0hUOgotCQlyYyA9IG92X3JlYWQoYywgUkVHX0JSVCwgJnZhbCk7Ci0JCWN0bC0+dmFsdWUgPSB2YWwgPDwgODsKLQkJYnJlYWs7Ci0JY2FzZSBPVkNBTUNISVBfQ0lEX1NBVDoKLQkJcmMgPSBvdl9yZWFkKGMsIFJFR19TQVQsICZ2YWwpOwotCQljdGwtPnZhbHVlID0gdmFsIDw8IDg7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9FWFA6Ci0JCXJjID0gb3ZfcmVhZChjLCBSRUdfRVhQLCAmdmFsKTsKLQkJY3RsLT52YWx1ZSA9IHZhbDsKLQkJYnJlYWs7Ci0JY2FzZSBPVkNBTUNISVBfQ0lEX0JBTkRGSUxUOgotCQljdGwtPnZhbHVlID0gcy0+YmFuZGZpbHQ7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9BVVRPQlJJR0hUOgotCQljdGwtPnZhbHVlID0gcy0+YXV0b19icnQ7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9BVVRPRVhQOgotCQljdGwtPnZhbHVlID0gcy0+YXV0b19leHA7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9NSVJST1I6Ci0JCWN0bC0+dmFsdWUgPSBzLT5taXJyb3I7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURERUJVRygyLCAmYy0+ZGV2LCAiY29udHJvbCBub3Qgc3VwcG9ydGVkOiAlZCIsIGN0bC0+aWQpOwotCQlyZXR1cm4gLUVQRVJNOwotCX0KLQotCURERUJVRygzLCAmYy0+ZGV2LCAiaWQ9JWQsIGFyZz0lZCwgcmM9JWQiLCBjdGwtPmlkLCBjdGwtPnZhbHVlLCByYyk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IG92NzZiZV9tb2RlX2luaXQoc3RydWN0IGkyY19jbGllbnQgKmMsIHN0cnVjdCBvdmNhbWNoaXBfd2luZG93ICp3aW4pCi17Ci0JaW50IHF2Z2EgPSB3aW4tPnF1YXJ0ZXI7Ci0KLQkvKioqKioqKiogUVZHQS1zcGVjaWZpYyByZWdzICoqKioqKioqLwotCi0Jb3Zfd3JpdGUoYywgMHgxNCwgcXZnYT8weGE0OjB4ODQpOwotCi0JLyoqKioqKioqIFBhbGV0dGUtc3BlY2lmaWMgcmVncyAqKioqKioqKi8KLQotCWlmICh3aW4tPmZvcm1hdCA9PSBWSURFT19QQUxFVFRFX0dSRVkpIHsKLQkJb3Zfd3JpdGVfbWFzayhjLCAweDBlLCAweDQwLCAweDQwKTsKLQkJb3Zfd3JpdGVfbWFzayhjLCAweDEzLCAweDIwLCAweDIwKTsKLQl9IGVsc2UgewotCQlvdl93cml0ZV9tYXNrKGMsIDB4MGUsIDB4MDAsIDB4NDApOwotCQlvdl93cml0ZV9tYXNrKGMsIDB4MTMsIDB4MDAsIDB4MjApOwotCX0KLQotCS8qKioqKioqKiBDbG9jayBwcm9ncmFtbWluZyAqKioqKioqKi8KLQotCW92X3dyaXRlKGMsIDB4MTEsIHdpbi0+Y2xvY2tkaXYpOwotCi0JLyoqKioqKioqIFJlc29sdXRpb24tc3BlY2lmaWMgKioqKioqKiovCi0KLQlpZiAod2luLT53aWR0aCA9PSA2NDAgJiYgd2luLT5oZWlnaHQgPT0gNDgwKQotCQlvdl93cml0ZShjLCAweDM1LCAweDllKTsKLQllbHNlCi0JCW92X3dyaXRlKGMsIDB4MzUsIDB4MWUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Y3NmJlX3NldF93aW5kb3coc3RydWN0IGkyY19jbGllbnQgKmMsIHN0cnVjdCBvdmNhbWNoaXBfd2luZG93ICp3aW4pCi17Ci0JaW50IHJldCwgaHdzY2FsZSwgdndzY2FsZTsKLQotCXJldCA9IG92NzZiZV9tb2RlX2luaXQoYywgd2luKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCWlmICh3aW4tPnF1YXJ0ZXIpIHsKLQkJaHdzY2FsZSA9IDE7Ci0JCXZ3c2NhbGUgPSAwOwotCX0gZWxzZSB7Ci0JCWh3c2NhbGUgPSAyOwotCQl2d3NjYWxlID0gMTsKLQl9Ci0KLQlvdl93cml0ZShjLCAweDE3LCBIV1NCQVNFICsgKHdpbi0+eCA+PiBod3NjYWxlKSk7Ci0Jb3Zfd3JpdGUoYywgMHgxOCwgSFdFQkFTRSArICgod2luLT54ICsgd2luLT53aWR0aCkgPj4gaHdzY2FsZSkpOwotCW92X3dyaXRlKGMsIDB4MTksIFZXU0JBU0UgKyAod2luLT55ID4+IHZ3c2NhbGUpKTsKLQlvdl93cml0ZShjLCAweDFhLCBWV0VCQVNFICsgKCh3aW4tPnkgKyB3aW4tPmhlaWdodCkgPj4gdndzY2FsZSkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Y3NmJlX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgT1ZDQU1DSElQX0NNRF9TX0NUUkw6Ci0JCXJldHVybiBvdjc2YmVfc2V0X2NvbnRyb2woYywgYXJnKTsKLQljYXNlIE9WQ0FNQ0hJUF9DTURfR19DVFJMOgotCQlyZXR1cm4gb3Y3NmJlX2dldF9jb250cm9sKGMsIGFyZyk7Ci0JY2FzZSBPVkNBTUNISVBfQ01EX1NfTU9ERToKLQkJcmV0dXJuIG92NzZiZV9zZXRfd2luZG93KGMsIGFyZyk7Ci0JZGVmYXVsdDoKLQkJRERFQlVHKDIsICZjLT5kZXYsICJjb21tYW5kIG5vdCBzdXBwb3J0ZWQ6ICVkIiwgY21kKTsKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9Ci19Ci0KLXN0cnVjdCBvdmNhbWNoaXBfb3BzIG92NzZiZV9vcHMgPSB7Ci0JLmluaXQgICAgPQlvdjc2YmVfaW5pdCwKLQkuZnJlZSAgICA9CW92NzZiZV9mcmVlLAotCS5jb21tYW5kID0Jb3Y3NmJlX2NvbW1hbmQsCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3Y3eDEwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9vdjd4MTAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIwNmU3OS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9vdjd4MTAuYworKysgL2Rldi9udWxsCkBAIC0xLDMzNCArMCwwIEBACi0vKiBPbW5pVmlzaW9uIE9WNzYxMC9PVjcxMTAgQ2FtZXJhIENoaXAgU3VwcG9ydCBDb2RlCi0gKgotICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDQgTWFyayBNY0NsZWxsYW5kIDxtYXJrQGFscGhhLmR5bmRucy5vcmc+Ci0gKiBodHRwOi8vYWxwaGEuZHluZG5zLm9yZy9vdjUxMS8KLSAqCi0gKiBDb2xvciBmaXhlcyBieSBieSBPcmlvbiBTa3kgTGF3bG9yIDxvbGF3bG9yQGFjbS5vcmc+ICgyLzI2LzIwMDApCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gTk8gV0FSUkFOVFkgT0YgQU5ZIEtJTkQgaXMgZXhwcmVzc2VkIG9yIGltcGxpZWQuCi0gKi8KLQotI2RlZmluZSBERUJVRwotCi0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgIm92Y2FtY2hpcF9wcml2LmgiCi0KLS8qIFJlZ2lzdGVycyAqLwotI2RlZmluZSBSRUdfR0FJTgkJMHgwMAkvKiBnYWluIFs1OjBdICovCi0jZGVmaW5lIFJFR19CTFVFCQkweDAxCS8qIGJsdWUgY2hhbm5lbCBiYWxhbmNlICovCi0jZGVmaW5lIFJFR19SRUQJCQkweDAyCS8qIHJlZCBjaGFubmVsIGJhbGFuY2UgKi8KLSNkZWZpbmUgUkVHX1NBVAkJCTB4MDMJLyogc2F0dXJhdGlvbiAqLwotI2RlZmluZSBSRUdfQ05UCQkJMHgwNQkvKiBZIGNvbnRyYXN0ICovCi0jZGVmaW5lIFJFR19CUlQJCQkweDA2CS8qIFkgYnJpZ2h0bmVzcyAqLwotI2RlZmluZSBSRUdfQkxVRV9CSUFTCQkweDBDCS8qIGJsdWUgY2hhbm5lbCBiaWFzIFs1OjBdICovCi0jZGVmaW5lIFJFR19SRURfQklBUwkJMHgwRAkvKiByZWQgY2hhbm5lbCBiaWFzIFs1OjBdICovCi0jZGVmaW5lIFJFR19HQU1NQV9DT0VGRgkJMHgwRQkvKiBnYW1tYSBzZXR0aW5ncyAqLwotI2RlZmluZSBSRUdfV0JfUkFOR0UJCTB4MEYJLyogQUVDL0FMQy9TLUFXQiBzZXR0aW5ncyAqLwotI2RlZmluZSBSRUdfRVhQCQkJMHgxMAkvKiBtYW51YWwgZXhwb3N1cmUgc2V0dGluZyAqLwotI2RlZmluZSBSRUdfQ0xPQ0sJCTB4MTEJLyogcG9sYXJpdHkvY2xvY2sgcHJlc2NhbGVyICovCi0jZGVmaW5lIFJFR19GSUVMRF9ESVZJREUJMHgxNgkvKiBmaWVsZCBpbnRlcnZhbC9tb2RlIHNldHRpbmdzICovCi0jZGVmaW5lIFJFR19IV0lOX1NUQVJUCQkweDE3CS8qIGhvcml6b250YWwgd2luZG93IHN0YXJ0ICovCi0jZGVmaW5lIFJFR19IV0lOX0VORAkJMHgxOAkvKiBob3Jpem9udGFsIHdpbmRvdyBlbmQgKi8KLSNkZWZpbmUgUkVHX1ZXSU5fU1RBUlQJCTB4MTkJLyogdmVydGljYWwgd2luZG93IHN0YXJ0ICovCi0jZGVmaW5lIFJFR19WV0lOX0VORAkJMHgxQQkvKiB2ZXJ0aWNhbCB3aW5kb3cgZW5kICovCi0jZGVmaW5lIFJFR19QSVhFTF9TSElGVCAgIAkweDFCCS8qIHBpeGVsIHNoaWZ0ICovCi0jZGVmaW5lIFJFR19ZT0ZGU0VUCQkweDIxCS8qIFkgY2hhbm5lbCBvZmZzZXQgKi8KLSNkZWZpbmUgUkVHX1VPRkZTRVQJCTB4MjIJLyogVSBjaGFubmVsIG9mZnNldCAqLwotI2RlZmluZSBSRUdfRUNXCQkJMHgyNAkvKiBleHBvc3VyZSB3aGl0ZSBsZXZlbCBmb3IgQUVDICovCi0jZGVmaW5lIFJFR19FQ0IJCQkweDI1CS8qIGV4cG9zdXJlIGJsYWNrIGxldmVsIGZvciBBRUMgKi8KLSNkZWZpbmUgUkVHX0ZSQU1FUkFURV9ICQkweDJBCS8qIGZyYW1lIHJhdGUgTVNCICsgbWlzYyAqLwotI2RlZmluZSBSRUdfRlJBTUVSQVRFX0wJCTB4MkIJLyogZnJhbWUgcmF0ZSBMU0IgKi8KLSNkZWZpbmUgUkVHX0FMQwkJCTB4MkMJLyogQXV0byBMZXZlbCBDb250cm9sIHNldHRpbmdzICovCi0jZGVmaW5lIFJFR19WT0ZGU0VUCQkweDJFCS8qIFYgY2hhbm5lbCBvZmZzZXQgYWRqdXN0bWVudCAqLwotI2RlZmluZSBSRUdfQVJSQVlfQklBUwkJMHgyRgkvKiBhcnJheSBiaWFzIC0tIGRvbid0IGNoYW5nZSAqLwotI2RlZmluZSBSRUdfWUdBTU1BCQkweDMzCS8qIG1pc2MgZ2FtbWEgc2V0dGluZ3MgWzc6Nl0gKi8KLSNkZWZpbmUgUkVHX0JJQVNfQURKVVNUCQkweDM0CS8qIG1pc2MgYmlhcyBzZXR0aW5ncyAqLwotCi0vKiBXaW5kb3cgcGFyYW1ldGVycyAqLwotI2RlZmluZSBIV1NCQVNFIDB4MzgKLSNkZWZpbmUgSFdFQkFTRSAweDNhCi0jZGVmaW5lIFZXU0JBU0UgMHgwNQotI2RlZmluZSBWV0VCQVNFIDB4MDUKLQotc3RydWN0IG92N3gxMCB7Ci0JaW50IGF1dG9fYnJ0OwotCWludCBhdXRvX2V4cDsKLQlpbnQgYmFuZGZpbHQ7Ci0JaW50IG1pcnJvcjsKLX07Ci0KLS8qIExhd3JlbmNlIEdsYWlzdGVyIDxsZ0BqZm0uYmMuY2E+IHJlcG9ydHM6Ci0gKgotICogUmVnaXN0ZXIgMHgwZiBpbiB0aGUgNzYxMCBoYXMgdGhlIGZvbGxvd2luZyBlZmZlY3RzOgotICoKLSAqIDB4ODUgKEFFQyBtZXRob2QgMSk6IEJlc3Qgb3ZlcmFsbCwgZ29vZCBjb250cmFzdCByYW5nZQotICogMHg0NSAoQUVDIG1ldGhvZCAyKTogVmVyeSBvdmVyZXhwb3NlZAotICogMHhhNSAoc3BlYyBzaGVldCBkZWZhdWx0KTogT2ssIGJ1dCB0aGUgYmxhY2sgbGV2ZWwgaXMKLSAqCXNoaWZ0ZWQgcmVzdWx0aW5nIGluIGxvc3Mgb2YgY29udHJhc3QKLSAqIDB4MDUgKG9sZCBkcml2ZXIgc2V0dGluZyk6IHZlcnkgb3ZlcmV4cG9zZWQsIHRvbyBtdWNoCi0gKgljb250cmFzdAotICovCi1zdGF0aWMgc3RydWN0IG92Y2FtY2hpcF9yZWd2YWxzIHJlZ3ZhbHNfaW5pdF83eDEwW10gPSB7Ci0JeyAweDEwLCAweGZmIH0sCi0JeyAweDE2LCAweDAzIH0sCi0JeyAweDI4LCAweDI0IH0sCi0JeyAweDJiLCAweGFjIH0sCi0JeyAweDEyLCAweDAwIH0sCi0JeyAweDM4LCAweDgxIH0sCi0JeyAweDI4LCAweDI0IH0sCS8qIDBjICovCi0JeyAweDBmLCAweDg1IH0sCS8qIGxnJ3Mgc2V0dGluZyAqLwotCXsgMHgxNSwgMHgwMSB9LAotCXsgMHgyMCwgMHgxYyB9LAotCXsgMHgyMywgMHgyYSB9LAotCXsgMHgyNCwgMHgxMCB9LAotCXsgMHgyNSwgMHg4YSB9LAotCXsgMHgyNiwgMHhhMiB9LAotCXsgMHgyNywgMHhjMiB9LAotCXsgMHgyYSwgMHgwNCB9LAotCXsgMHgyYywgMHhmZSB9LAotCXsgMHgyZCwgMHg5MyB9LAotCXsgMHgzMCwgMHg3MSB9LAotCXsgMHgzMSwgMHg2MCB9LAotCXsgMHgzMiwgMHgyNiB9LAotCXsgMHgzMywgMHgyMCB9LAotCXsgMHgzNCwgMHg0OCB9LAotCXsgMHgxMiwgMHgyNCB9LAotCXsgMHgxMSwgMHgwMSB9LAotCXsgMHgwYywgMHgyNCB9LAotCXsgMHgwZCwgMHgyNCB9LAotCXsgMHhmZiwgMHhmZiB9LAkvKiBFTkQgTUFSS0VSICovCi19OwotCi0vKiBUaGlzIGluaXRpYWxpemVzIHRoZSBPVjd4MTAgY2FtZXJhIGNoaXAgYW5kIHJlbGV2YW50IHZhcmlhYmxlcy4gKi8KLXN0YXRpYyBpbnQgb3Y3eDEwX2luaXQoc3RydWN0IGkyY19jbGllbnQgKmMpCi17Ci0Jc3RydWN0IG92Y2FtY2hpcCAqb3YgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7Ci0Jc3RydWN0IG92N3gxMCAqczsKLQlpbnQgcmM7Ci0KLQlEREVCVUcoNCwgJmMtPmRldiwgImVudGVyZWQiKTsKLQotCXJjID0gb3Zfd3JpdGVfcmVndmFscyhjLCByZWd2YWxzX2luaXRfN3gxMCk7Ci0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOwotCi0Jb3YtPnNwcml2ID0gcyA9IGt6YWxsb2Moc2l6ZW9mICpzLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jcy0+YXV0b19icnQgPSAxOwotCXMtPmF1dG9fZXhwID0gMTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBvdjd4MTBfZnJlZShzdHJ1Y3QgaTJjX2NsaWVudCAqYykKLXsKLQlzdHJ1Y3Qgb3ZjYW1jaGlwICpvdiA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKLQotCWtmcmVlKG92LT5zcHJpdik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Y3eDEwX3NldF9jb250cm9sKHN0cnVjdCBpMmNfY2xpZW50ICpjLAotCQkJICAgICAgc3RydWN0IG92Y2FtY2hpcF9jb250cm9sICpjdGwpCi17Ci0Jc3RydWN0IG92Y2FtY2hpcCAqb3YgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7Ci0Jc3RydWN0IG92N3gxMCAqcyA9IG92LT5zcHJpdjsKLQlpbnQgcmM7Ci0JaW50IHYgPSBjdGwtPnZhbHVlOwotCi0Jc3dpdGNoIChjdGwtPmlkKSB7Ci0JY2FzZSBPVkNBTUNISVBfQ0lEX0NPTlQ6Ci0JCXJjID0gb3Zfd3JpdGUoYywgUkVHX0NOVCwgdiA+PiA4KTsKLQkJYnJlYWs7Ci0JY2FzZSBPVkNBTUNISVBfQ0lEX0JSSUdIVDoKLQkJcmMgPSBvdl93cml0ZShjLCBSRUdfQlJULCB2ID4+IDgpOwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfU0FUOgotCQlyYyA9IG92X3dyaXRlKGMsIFJFR19TQVQsIHYgPj4gOCk7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9IVUU6Ci0JCXJjID0gb3Zfd3JpdGUoYywgUkVHX1JFRCwgMHhGRiAtICh2ID4+IDgpKTsKLQkJaWYgKHJjIDwgMCkKLQkJCWdvdG8gb3V0OwotCi0JCXJjID0gb3Zfd3JpdGUoYywgUkVHX0JMVUUsIHYgPj4gOCk7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9FWFA6Ci0JCXJjID0gb3Zfd3JpdGUoYywgUkVHX0VYUCwgdik7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9GUkVROgotCXsKLQkJaW50IHNpeHR5ID0gKHYgPT0gNjApOwotCi0JCXJjID0gb3Zfd3JpdGVfbWFzayhjLCAweDJhLCBzaXh0eT8weDAwOjB4ODAsIDB4ODApOwotCQlpZiAocmMgPCAwKQotCQkJZ290byBvdXQ7Ci0KLQkJcmMgPSBvdl93cml0ZShjLCAweDJiLCBzaXh0eT8weDAwOjB4YWMpOwotCQlpZiAocmMgPCAwKQotCQkJZ290byBvdXQ7Ci0KLQkJcmMgPSBvdl93cml0ZV9tYXNrKGMsIDB4MTMsIDB4MTAsIDB4MTApOwotCQlpZiAocmMgPCAwKQotCQkJZ290byBvdXQ7Ci0KLQkJcmMgPSBvdl93cml0ZV9tYXNrKGMsIDB4MTMsIDB4MDAsIDB4MTApOwotCQlicmVhazsKLQl9Ci0JY2FzZSBPVkNBTUNISVBfQ0lEX0JBTkRGSUxUOgotCQlyYyA9IG92X3dyaXRlX21hc2soYywgMHgyZCwgdj8weDA0OjB4MDAsIDB4MDQpOwotCQlzLT5iYW5kZmlsdCA9IHY7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9BVVRPQlJJR0hUOgotCQlyYyA9IG92X3dyaXRlX21hc2soYywgMHgyZCwgdj8weDEwOjB4MDAsIDB4MTApOwotCQlzLT5hdXRvX2JydCA9IHY7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9BVVRPRVhQOgotCQlyYyA9IG92X3dyaXRlX21hc2soYywgMHgyOSwgdj8weDAwOjB4ODAsIDB4ODApOwotCQlzLT5hdXRvX2V4cCA9IHY7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9NSVJST1I6Ci0JCXJjID0gb3Zfd3JpdGVfbWFzayhjLCAweDEyLCB2PzB4NDA6MHgwMCwgMHg0MCk7Ci0JCXMtPm1pcnJvciA9IHY7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURERUJVRygyLCAmYy0+ZGV2LCAiY29udHJvbCBub3Qgc3VwcG9ydGVkOiAlZCIsIGN0bC0+aWQpOwotCQlyZXR1cm4gLUVQRVJNOwotCX0KLQotb3V0OgotCURERUJVRygzLCAmYy0+ZGV2LCAiaWQ9JWQsIGFyZz0lZCwgcmM9JWQiLCBjdGwtPmlkLCB2LCByYyk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IG92N3gxMF9nZXRfY29udHJvbChzdHJ1Y3QgaTJjX2NsaWVudCAqYywKLQkJCSAgICAgIHN0cnVjdCBvdmNhbWNoaXBfY29udHJvbCAqY3RsKQotewotCXN0cnVjdCBvdmNhbWNoaXAgKm92ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOwotCXN0cnVjdCBvdjd4MTAgKnMgPSBvdi0+c3ByaXY7Ci0JaW50IHJjID0gMDsKLQl1bnNpZ25lZCBjaGFyIHZhbCA9IDA7Ci0KLQlzd2l0Y2ggKGN0bC0+aWQpIHsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfQ09OVDoKLQkJcmMgPSBvdl9yZWFkKGMsIFJFR19DTlQsICZ2YWwpOwotCQljdGwtPnZhbHVlID0gdmFsIDw8IDg7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9CUklHSFQ6Ci0JCXJjID0gb3ZfcmVhZChjLCBSRUdfQlJULCAmdmFsKTsKLQkJY3RsLT52YWx1ZSA9IHZhbCA8PCA4OwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfU0FUOgotCQlyYyA9IG92X3JlYWQoYywgUkVHX1NBVCwgJnZhbCk7Ci0JCWN0bC0+dmFsdWUgPSB2YWwgPDwgODsKLQkJYnJlYWs7Ci0JY2FzZSBPVkNBTUNISVBfQ0lEX0hVRToKLQkJcmMgPSBvdl9yZWFkKGMsIFJFR19CTFVFLCAmdmFsKTsKLQkJY3RsLT52YWx1ZSA9IHZhbCA8PCA4OwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfRVhQOgotCQlyYyA9IG92X3JlYWQoYywgUkVHX0VYUCwgJnZhbCk7Ci0JCWN0bC0+dmFsdWUgPSB2YWw7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9CQU5ERklMVDoKLQkJY3RsLT52YWx1ZSA9IHMtPmJhbmRmaWx0OwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfQVVUT0JSSUdIVDoKLQkJY3RsLT52YWx1ZSA9IHMtPmF1dG9fYnJ0OwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfQVVUT0VYUDoKLQkJY3RsLT52YWx1ZSA9IHMtPmF1dG9fZXhwOwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfTUlSUk9SOgotCQljdGwtPnZhbHVlID0gcy0+bWlycm9yOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEREVCVUcoMiwgJmMtPmRldiwgImNvbnRyb2wgbm90IHN1cHBvcnRlZDogJWQiLCBjdGwtPmlkKTsKLQkJcmV0dXJuIC1FUEVSTTsKLQl9Ci0KLQlEREVCVUcoMywgJmMtPmRldiwgImlkPSVkLCBhcmc9JWQsIHJjPSVkIiwgY3RsLT5pZCwgY3RsLT52YWx1ZSwgcmMpOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBvdjd4MTBfbW9kZV9pbml0KHN0cnVjdCBpMmNfY2xpZW50ICpjLCBzdHJ1Y3Qgb3ZjYW1jaGlwX3dpbmRvdyAqd2luKQotewotCWludCBxdmdhID0gd2luLT5xdWFydGVyOwotCi0JLyoqKioqKioqIFFWR0Etc3BlY2lmaWMgcmVncyAqKioqKioqKi8KLQotCW92X3dyaXRlKGMsIDB4MTQsIHF2Z2E/MHgyNDoweDA0KTsKLQotCS8qKioqKioqKiBQYWxldHRlLXNwZWNpZmljIHJlZ3MgKioqKioqKiovCi0KLQlpZiAod2luLT5mb3JtYXQgPT0gVklERU9fUEFMRVRURV9HUkVZKSB7Ci0JCW92X3dyaXRlX21hc2soYywgMHgwZSwgMHg0MCwgMHg0MCk7Ci0JCW92X3dyaXRlX21hc2soYywgMHgxMywgMHgyMCwgMHgyMCk7Ci0JfSBlbHNlIHsKLQkJb3Zfd3JpdGVfbWFzayhjLCAweDBlLCAweDAwLCAweDQwKTsKLQkJb3Zfd3JpdGVfbWFzayhjLCAweDEzLCAweDAwLCAweDIwKTsKLQl9Ci0KLQkvKioqKioqKiogQ2xvY2sgcHJvZ3JhbW1pbmcgKioqKioqKiovCi0KLQlvdl93cml0ZShjLCAweDExLCB3aW4tPmNsb2NrZGl2KTsKLQotCS8qKioqKioqKiBSZXNvbHV0aW9uLXNwZWNpZmljICoqKioqKioqLwotCi0JaWYgKHdpbi0+d2lkdGggPT0gNjQwICYmIHdpbi0+aGVpZ2h0ID09IDQ4MCkKLQkJb3Zfd3JpdGUoYywgMHgzNSwgMHg5ZSk7Ci0JZWxzZQotCQlvdl93cml0ZShjLCAweDM1LCAweDFlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG92N3gxMF9zZXRfd2luZG93KHN0cnVjdCBpMmNfY2xpZW50ICpjLCBzdHJ1Y3Qgb3ZjYW1jaGlwX3dpbmRvdyAqd2luKQotewotCWludCByZXQsIGh3c2NhbGUsIHZ3c2NhbGU7Ci0KLQlyZXQgPSBvdjd4MTBfbW9kZV9pbml0KGMsIHdpbik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAod2luLT5xdWFydGVyKSB7Ci0JCWh3c2NhbGUgPSAxOwotCQl2d3NjYWxlID0gMDsKLQl9IGVsc2UgewotCQlod3NjYWxlID0gMjsKLQkJdndzY2FsZSA9IDE7Ci0JfQotCi0Jb3Zfd3JpdGUoYywgMHgxNywgSFdTQkFTRSArICh3aW4tPnggPj4gaHdzY2FsZSkpOwotCW92X3dyaXRlKGMsIDB4MTgsIEhXRUJBU0UgKyAoKHdpbi0+eCArIHdpbi0+d2lkdGgpID4+IGh3c2NhbGUpKTsKLQlvdl93cml0ZShjLCAweDE5LCBWV1NCQVNFICsgKHdpbi0+eSA+PiB2d3NjYWxlKSk7Ci0Jb3Zfd3JpdGUoYywgMHgxYSwgVldFQkFTRSArICgod2luLT55ICsgd2luLT5oZWlnaHQpID4+IHZ3c2NhbGUpKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG92N3gxMF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIE9WQ0FNQ0hJUF9DTURfU19DVFJMOgotCQlyZXR1cm4gb3Y3eDEwX3NldF9jb250cm9sKGMsIGFyZyk7Ci0JY2FzZSBPVkNBTUNISVBfQ01EX0dfQ1RSTDoKLQkJcmV0dXJuIG92N3gxMF9nZXRfY29udHJvbChjLCBhcmcpOwotCWNhc2UgT1ZDQU1DSElQX0NNRF9TX01PREU6Ci0JCXJldHVybiBvdjd4MTBfc2V0X3dpbmRvdyhjLCBhcmcpOwotCWRlZmF1bHQ6Ci0JCURERUJVRygyLCAmYy0+ZGV2LCAiY29tbWFuZCBub3Qgc3VwcG9ydGVkOiAlZCIsIGNtZCk7Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQotfQotCi1zdHJ1Y3Qgb3ZjYW1jaGlwX29wcyBvdjd4MTBfb3BzID0gewotCS5pbml0ICAgID0Jb3Y3eDEwX2luaXQsCi0JLmZyZWUgICAgPQlvdjd4MTBfZnJlZSwKLQkuY29tbWFuZCA9CW92N3gxMF9jb21tYW5kLAotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwL292N3gyMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3Y3eDIwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMjZhZTMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3Y3eDIwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NTQgKzAsMCBAQAotLyogT21uaVZpc2lvbiBPVjc2MjAvT1Y3MTIwIENhbWVyYSBDaGlwIFN1cHBvcnQgQ29kZQotICoKLSAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA0IE1hcmsgTWNDbGVsbGFuZCA8bWFya0BhbHBoYS5keW5kbnMub3JnPgotICogaHR0cDovL2FscGhhLmR5bmRucy5vcmcvb3Y1MTEvCi0gKgotICogT1Y3NjIwIGZpeGVzIGJ5IENoYXJsIFAuIEJvdGhhIDxjcGJvdGhhQGllZWUub3JnPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uIE5PIFdBUlJBTlRZIE9GIEFOWSBLSU5EIGlzIGV4cHJlc3NlZCBvciBpbXBsaWVkLgotICovCi0KLSNkZWZpbmUgREVCVUcKLQotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlICJvdmNhbWNoaXBfcHJpdi5oIgotCi0vKiBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgUkVHX0dBSU4JCTB4MDAJLyogZ2FpbiBbNTowXSAqLwotI2RlZmluZSBSRUdfQkxVRQkJMHgwMQkvKiBibHVlIGdhaW4gKi8KLSNkZWZpbmUgUkVHX1JFRAkJCTB4MDIJLyogcmVkIGdhaW4gKi8KLSNkZWZpbmUgUkVHX1NBVAkJCTB4MDMJLyogc2F0dXJhdGlvbiAqLwotI2RlZmluZSBSRUdfQlJUCQkJMHgwNgkvKiBZIGJyaWdodG5lc3MgKi8KLSNkZWZpbmUgUkVHX1NIQVJQCQkweDA3CS8qIGFuYWxvZyBzaGFycG5lc3MgKi8KLSNkZWZpbmUgUkVHX0JMVUVfQklBUwkJMHgwQwkvKiBXQiBibHVlIHJhdGlvIFs1OjBdICovCi0jZGVmaW5lIFJFR19SRURfQklBUwkJMHgwRAkvKiBXQiByZWQgcmF0aW8gWzU6MF0gKi8KLSNkZWZpbmUgUkVHX0VYUAkJCTB4MTAJLyogZXhwb3N1cmUgKi8KLQotLyogRGVmYXVsdCBjb250cm9sIHNldHRpbmdzLiBWYWx1ZXMgYXJlIGluIHRlcm1zIG9mIFY0TDIgY29udHJvbHMuICovCi0jZGVmaW5lIE9WNzEyMF9ERkxfQlJJR0hUICAgICAweDYwCi0jZGVmaW5lIE9WNzYyMF9ERkxfQlJJR0hUICAgICAweDYwCi0jZGVmaW5lIE9WNzEyMF9ERkxfU0FUICAgICAgICAweGIwCi0jZGVmaW5lIE9WNzYyMF9ERkxfU0FUICAgICAgICAweGMwCi0jZGVmaW5lIERGTF9BVVRPX0VYUCAgICAgICAgICAgICAxCi0jZGVmaW5lIERGTF9BVVRPX0dBSU4gICAgICAgICAgICAxCi0jZGVmaW5lIE9WNzEyMF9ERkxfR0FJTiAgICAgICAweDAwCi0jZGVmaW5lIE9WNzYyMF9ERkxfR0FJTiAgICAgICAweDAwCi0vKiBOT1RFOiBTaW5jZSBhdXRvZXhwb3N1cmUgaXMgdGhlIGRlZmF1bHQsIHRoZXNlIGFyZW4ndCBwcm9ncmFtbWVkIGludG8gdGhlCi0gKiBPVjd4MjAgY2hpcC4gVGhleSBhcmUganVzdCBoZXJlIGJlY2F1c2UgVjRMMiBleHBlY3RzIGEgZGVmYXVsdCAqLwotI2RlZmluZSBPVjcxMjBfREZMX0VYUCAgICAgICAgMHg3ZgotI2RlZmluZSBPVjc2MjBfREZMX0VYUCAgICAgICAgMHg3ZgotCi0vKiBXaW5kb3cgcGFyYW1ldGVycyAqLwotI2RlZmluZSBIV1NCQVNFIDB4MkYJLyogRnJvbSA3NjIwLlNFVCAoc3BlYyBpcyB3cm9uZykgKi8KLSNkZWZpbmUgSFdFQkFTRSAweDJGCi0jZGVmaW5lIFZXU0JBU0UgMHgwNQotI2RlZmluZSBWV0VCQVNFIDB4MDUKLQotc3RydWN0IG92N3gyMCB7Ci0JaW50IGF1dG9fYnJ0OwotCWludCBhdXRvX2V4cDsKLQlpbnQgYXV0b19nYWluOwotCWludCBiYWNrbGlnaHQ7Ci0JaW50IGJhbmRmaWx0OwotCWludCBtaXJyb3I7Ci19OwotCi0vKiBDb250cmFzdCBsb29rLXVwIHRhYmxlICovCi1zdGF0aWMgdW5zaWduZWQgY2hhciBjdGFiW10gPSB7Ci0JMHgwMSwgMHgwNSwgMHgwOSwgMHgxMSwgMHgxNSwgMHgzNSwgMHgzNywgMHg1NywKLQkweDViLCAweGE1LCAweGE3LCAweGM3LCAweGM5LCAweGNmLCAweGVmLCAweGZmCi19OwotCi0vKiBTZXR0aW5ncyBmb3IgKEJsYWNrICYgV2hpdGUpIE9WNzEyMCBjYW1lcmEgY2hpcCAqLwotc3RhdGljIHN0cnVjdCBvdmNhbWNoaXBfcmVndmFscyByZWd2YWxzX2luaXRfNzEyMFtdID0gewotCXsgMHgxMiwgMHg4MCB9LCAvKiByZXNldCAqLwotCXsgMHgxMywgMHgwMCB9LCAvKiBBdXRvYWRqdXN0IG9mZiAqLwotCXsgMHgxMiwgMHgyMCB9LCAvKiBEaXNhYmxlIEFXQiAqLwotCXsgMHgxMywgREZMX0FVVE9fR0FJTj8weDAxOjB4MDAgfSwgLyogQXV0b2FkanVzdCBvbiAoaWYgZGVzaXJlZCkgKi8KLQl7IDB4MDAsIE9WNzEyMF9ERkxfR0FJTiB9LAotCXsgMHgwMSwgMHg4MCB9LAotCXsgMHgwMiwgMHg4MCB9LAotCXsgMHgwMywgT1Y3MTIwX0RGTF9TQVQgfSwKLQl7IDB4MDYsIE9WNzEyMF9ERkxfQlJJR0hUIH0sCi0JeyAweDA3LCAweDAwIH0sCi0JeyAweDBjLCAweDIwIH0sCi0JeyAweDBkLCAweDIwIH0sCi0JeyAweDExLCAweDAxIH0sCi0JeyAweDE0LCAweDg0IH0sCi0JeyAweDE1LCAweDAxIH0sCi0JeyAweDE2LCAweDAzIH0sCi0JeyAweDE3LCAweDJmIH0sCi0JeyAweDE4LCAweGNmIH0sCi0JeyAweDE5LCAweDA2IH0sCi0JeyAweDFhLCAweGY1IH0sCi0JeyAweDFiLCAweDAwIH0sCi0JeyAweDIwLCAweDA4IH0sCi0JeyAweDIxLCAweDgwIH0sCi0JeyAweDIyLCAweDgwIH0sCi0JeyAweDIzLCAweDAwIH0sCi0JeyAweDI2LCAweGEwIH0sCi0JeyAweDI3LCAweGZhIH0sCi0JeyAweDI4LCAweDIwIH0sIC8qIERPTidUIHNldCBiaXQgNi4gSXQgaXMgZm9yIHRoZSBPVjc2MjAgb25seSAqLwotCXsgMHgyOSwgREZMX0FVVE9fRVhQPzB4MDA6MHg4MCB9LAotCXsgMHgyYSwgMHgxMCB9LAotCXsgMHgyYiwgMHgwMCB9LAotCXsgMHgyYywgMHg4OCB9LAotCXsgMHgyZCwgMHg5NSB9LAotCXsgMHgyZSwgMHg4MCB9LAotCXsgMHgyZiwgMHg0NCB9LAotCXsgMHg2MCwgMHgyMCB9LAotCXsgMHg2MSwgMHgwMiB9LAotCXsgMHg2MiwgMHg1ZiB9LAotCXsgMHg2MywgMHhkNSB9LAotCXsgMHg2NCwgMHg1NyB9LAotCXsgMHg2NSwgMHg4MyB9LCAvKiBPViBzYXlzICJkb24ndCBjaGFuZ2UgdGhpcyB2YWx1ZSIgKi8KLQl7IDB4NjYsIDB4NTUgfSwKLQl7IDB4NjcsIDB4OTIgfSwKLQl7IDB4NjgsIDB4Y2YgfSwKLQl7IDB4NjksIDB4NzYgfSwKLQl7IDB4NmEsIDB4MjIgfSwKLQl7IDB4NmIsIDB4ZTIgfSwKLQl7IDB4NmMsIDB4NDAgfSwKLQl7IDB4NmQsIDB4NDggfSwKLQl7IDB4NmUsIDB4ODAgfSwKLQl7IDB4NmYsIDB4MGQgfSwKLQl7IDB4NzAsIDB4ODkgfSwKLQl7IDB4NzEsIDB4MDAgfSwKLQl7IDB4NzIsIDB4MTQgfSwKLQl7IDB4NzMsIDB4NTQgfSwKLQl7IDB4NzQsIDB4YTAgfSwKLQl7IDB4NzUsIDB4OGUgfSwKLQl7IDB4NzYsIDB4MDAgfSwKLQl7IDB4NzcsIDB4ZmYgfSwKLQl7IDB4NzgsIDB4ODAgfSwKLQl7IDB4NzksIDB4ODAgfSwKLQl7IDB4N2EsIDB4ODAgfSwKLQl7IDB4N2IsIDB4ZTYgfSwKLQl7IDB4N2MsIDB4MDAgfSwKLQl7IDB4MjQsIDB4M2EgfSwKLQl7IDB4MjUsIDB4NjAgfSwKLQl7IDB4ZmYsIDB4ZmYgfSwJLyogRU5EIE1BUktFUiAqLwotfTsKLQotLyogU2V0dGluZ3MgZm9yIChjb2xvcikgT1Y3NjIwIGNhbWVyYSBjaGlwICovCi1zdGF0aWMgc3RydWN0IG92Y2FtY2hpcF9yZWd2YWxzIHJlZ3ZhbHNfaW5pdF83NjIwW10gPSB7Ci0JeyAweDEyLCAweDgwIH0sIC8qIHJlc2V0ICovCi0JeyAweDAwLCBPVjc2MjBfREZMX0dBSU4gfSwKLQl7IDB4MDEsIDB4ODAgfSwKLQl7IDB4MDIsIDB4ODAgfSwKLQl7IDB4MDMsIE9WNzYyMF9ERkxfU0FUIH0sCi0JeyAweDA2LCBPVjc2MjBfREZMX0JSSUdIVCB9LAotCXsgMHgwNywgMHgwMCB9LAotCXsgMHgwYywgMHgyNCB9LAotCXsgMHgwYywgMHgyNCB9LAotCXsgMHgwZCwgMHgyNCB9LAotCXsgMHgxMSwgMHgwMSB9LAotCXsgMHgxMiwgMHgyNCB9LAotCXsgMHgxMywgREZMX0FVVE9fR0FJTj8weDAxOjB4MDAgfSwKLQl7IDB4MTQsIDB4ODQgfSwKLQl7IDB4MTUsIDB4MDEgfSwKLQl7IDB4MTYsIDB4MDMgfSwKLQl7IDB4MTcsIDB4MmYgfSwKLQl7IDB4MTgsIDB4Y2YgfSwKLQl7IDB4MTksIDB4MDYgfSwKLQl7IDB4MWEsIDB4ZjUgfSwKLQl7IDB4MWIsIDB4MDAgfSwKLQl7IDB4MjAsIDB4MTggfSwKLQl7IDB4MjEsIDB4ODAgfSwKLQl7IDB4MjIsIDB4ODAgfSwKLQl7IDB4MjMsIDB4MDAgfSwKLQl7IDB4MjYsIDB4YTIgfSwKLQl7IDB4MjcsIDB4ZWEgfSwKLQl7IDB4MjgsIDB4MjAgfSwKLQl7IDB4MjksIERGTF9BVVRPX0VYUD8weDAwOjB4ODAgfSwKLQl7IDB4MmEsIDB4MTAgfSwKLQl7IDB4MmIsIDB4MDAgfSwKLQl7IDB4MmMsIDB4ODggfSwKLQl7IDB4MmQsIDB4OTEgfSwKLQl7IDB4MmUsIDB4ODAgfSwKLQl7IDB4MmYsIDB4NDQgfSwKLQl7IDB4NjAsIDB4MjcgfSwKLQl7IDB4NjEsIDB4MDIgfSwKLQl7IDB4NjIsIDB4NWYgfSwKLQl7IDB4NjMsIDB4ZDUgfSwKLQl7IDB4NjQsIDB4NTcgfSwKLQl7IDB4NjUsIDB4ODMgfSwKLQl7IDB4NjYsIDB4NTUgfSwKLQl7IDB4NjcsIDB4OTIgfSwKLQl7IDB4NjgsIDB4Y2YgfSwKLQl7IDB4NjksIDB4NzYgfSwKLQl7IDB4NmEsIDB4MjIgfSwKLQl7IDB4NmIsIDB4MDAgfSwKLQl7IDB4NmMsIDB4MDIgfSwKLQl7IDB4NmQsIDB4NDQgfSwKLQl7IDB4NmUsIDB4ODAgfSwKLQl7IDB4NmYsIDB4MWQgfSwKLQl7IDB4NzAsIDB4OGIgfSwKLQl7IDB4NzEsIDB4MDAgfSwKLQl7IDB4NzIsIDB4MTQgfSwKLQl7IDB4NzMsIDB4NTQgfSwKLQl7IDB4NzQsIDB4MDAgfSwKLQl7IDB4NzUsIDB4OGUgfSwKLQl7IDB4NzYsIDB4MDAgfSwKLQl7IDB4NzcsIDB4ZmYgfSwKLQl7IDB4NzgsIDB4ODAgfSwKLQl7IDB4NzksIDB4ODAgfSwKLQl7IDB4N2EsIDB4ODAgfSwKLQl7IDB4N2IsIDB4ZTIgfSwKLQl7IDB4N2MsIDB4MDAgfSwKLQl7IDB4ZmYsIDB4ZmYgfSwJLyogRU5EIE1BUktFUiAqLwotfTsKLQotLyogUmV0dXJucyBpbmRleCBpbnRvIHRoZSBzcGVjaWZpZWQgbG9vay11cCB0YWJsZSwgd2l0aCAnbicgZWxlbWVudHMsIGZvciB3aGljaAotICogdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAidmFsIi4gSWYgYSBtYXRjaCBpc24ndCBmb3VuZCwgKG4tMSkKLSAqIGlzIHJldHVybmVkLiBUaGUgZW50cmllcyBpbiB0aGUgdGFibGUgbXVzdCBiZSBpbiBhc2NlbmRpbmcgb3JkZXIuICovCi1zdGF0aWMgaW5saW5lIGludCBvdjd4MjBfbHV0X2ZpbmQodW5zaWduZWQgY2hhciBsdXRbXSwgaW50IG4sIHVuc2lnbmVkIGNoYXIgdmFsKQotewotCWludCBpID0gMDsKLQotCXdoaWxlIChsdXRbaV0gPCB2YWwgJiYgaSA8IG4pCi0JCWkrKzsKLQotCXJldHVybiBpOwotfQotCi0vKiBUaGlzIGluaXRpYWxpemVzIHRoZSBPVjd4MjAgY2FtZXJhIGNoaXAgYW5kIHJlbGV2YW50IHZhcmlhYmxlcy4gKi8KLXN0YXRpYyBpbnQgb3Y3eDIwX2luaXQoc3RydWN0IGkyY19jbGllbnQgKmMpCi17Ci0Jc3RydWN0IG92Y2FtY2hpcCAqb3YgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7Ci0Jc3RydWN0IG92N3gyMCAqczsKLQlpbnQgcmM7Ci0KLQlEREVCVUcoNCwgJmMtPmRldiwgImVudGVyZWQiKTsKLQotCWlmIChvdi0+bW9ubykKLQkJcmMgPSBvdl93cml0ZV9yZWd2YWxzKGMsIHJlZ3ZhbHNfaW5pdF83MTIwKTsKLQllbHNlCi0JCXJjID0gb3Zfd3JpdGVfcmVndmFscyhjLCByZWd2YWxzX2luaXRfNzYyMCk7Ci0KLQlpZiAocmMgPCAwKQotCQlyZXR1cm4gcmM7Ci0KLQlvdi0+c3ByaXYgPSBzID0ga3phbGxvYyhzaXplb2YgKnMsIEdGUF9LRVJORUwpOwotCWlmICghcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlzLT5hdXRvX2JydCA9IDE7Ci0Jcy0+YXV0b19leHAgPSBERkxfQVVUT19FWFA7Ci0Jcy0+YXV0b19nYWluID0gREZMX0FVVE9fR0FJTjsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG92N3gyMF9mcmVlKHN0cnVjdCBpMmNfY2xpZW50ICpjKQotewotCXN0cnVjdCBvdmNhbWNoaXAgKm92ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOwotCi0Ja2ZyZWUob3YtPnNwcml2KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvdjd4MjBfc2V0X3Y0bDFfY29udHJvbChzdHJ1Y3QgaTJjX2NsaWVudCAqYywKLQkJCQkgICBzdHJ1Y3Qgb3ZjYW1jaGlwX2NvbnRyb2wgKmN0bCkKLXsKLQlzdHJ1Y3Qgb3ZjYW1jaGlwICpvdiA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKLQlzdHJ1Y3Qgb3Y3eDIwICpzID0gb3YtPnNwcml2OwotCWludCByYzsKLQlpbnQgdiA9IGN0bC0+dmFsdWU7Ci0KLQlzd2l0Y2ggKGN0bC0+aWQpIHsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfQ09OVDoKLQl7Ci0JCS8qIFVzZSBZIGdhbW1hIGNvbnRyb2wgaW5zdGVhZC4gQml0IDAgZW5hYmxlcyBpdC4gKi8KLQkJcmMgPSBvdl93cml0ZShjLCAweDY0LCBjdGFiW3YgPj4gMTJdKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgT1ZDQU1DSElQX0NJRF9CUklHSFQ6Ci0JCS8qIDc2MjAgZG9lc24ndCBsaWtlIG1hbnVhbCBjaGFuZ2VzIHdoZW4gaW4gYXV0byBtb2RlICovCi0JCWlmICghcy0+YXV0b19icnQpCi0JCQlyYyA9IG92X3dyaXRlKGMsIFJFR19CUlQsIHYgPj4gOCk7Ci0JCWVsc2UKLQkJCXJjID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBPVkNBTUNISVBfQ0lEX1NBVDoKLQkJcmMgPSBvdl93cml0ZShjLCBSRUdfU0FULCB2ID4+IDgpOwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfRVhQOgotCQlpZiAoIXMtPmF1dG9fZXhwKQotCQkJcmMgPSBvdl93cml0ZShjLCBSRUdfRVhQLCB2KTsKLQkJZWxzZQotCQkJcmMgPSAtRUJVU1k7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9GUkVROgotCXsKLQkJaW50IHNpeHR5ID0gKHYgPT0gNjApOwotCi0JCXJjID0gb3Zfd3JpdGVfbWFzayhjLCAweDJhLCBzaXh0eT8weDAwOjB4ODAsIDB4ODApOwotCQlpZiAocmMgPCAwKQotCQkJZ290byBvdXQ7Ci0KLQkJcmMgPSBvdl93cml0ZShjLCAweDJiLCBzaXh0eT8weDAwOjB4YWMpOwotCQlpZiAocmMgPCAwKQotCQkJZ290byBvdXQ7Ci0KLQkJcmMgPSBvdl93cml0ZV9tYXNrKGMsIDB4NzYsIDB4MDEsIDB4MDEpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBPVkNBTUNISVBfQ0lEX0JBTkRGSUxUOgotCQlyYyA9IG92X3dyaXRlX21hc2soYywgMHgyZCwgdj8weDA0OjB4MDAsIDB4MDQpOwotCQlzLT5iYW5kZmlsdCA9IHY7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9BVVRPQlJJR0hUOgotCQlyYyA9IG92X3dyaXRlX21hc2soYywgMHgyZCwgdj8weDEwOjB4MDAsIDB4MTApOwotCQlzLT5hdXRvX2JydCA9IHY7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9BVVRPRVhQOgotCQlyYyA9IG92X3dyaXRlX21hc2soYywgMHgxMywgdj8weDAxOjB4MDAsIDB4MDEpOwotCQlzLT5hdXRvX2V4cCA9IHY7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9CQUNLTElHSFQ6Ci0JewotCQlyYyA9IG92X3dyaXRlX21hc2soYywgMHg2OCwgdj8weGUwOjB4YzAsIDB4ZTApOwotCQlpZiAocmMgPCAwKQotCQkJZ290byBvdXQ7Ci0KLQkJcmMgPSBvdl93cml0ZV9tYXNrKGMsIDB4MjksIHY/MHgwODoweDAwLCAweDA4KTsKLQkJaWYgKHJjIDwgMCkKLQkJCWdvdG8gb3V0OwotCi0JCXJjID0gb3Zfd3JpdGVfbWFzayhjLCAweDI4LCB2PzB4MDI6MHgwMCwgMHgwMik7Ci0JCXMtPmJhY2tsaWdodCA9IHY7Ci0JCWJyZWFrOwotCX0KLQljYXNlIE9WQ0FNQ0hJUF9DSURfTUlSUk9SOgotCQlyYyA9IG92X3dyaXRlX21hc2soYywgMHgxMiwgdj8weDQwOjB4MDAsIDB4NDApOwotCQlzLT5taXJyb3IgPSB2OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEREVCVUcoMiwgJmMtPmRldiwgImNvbnRyb2wgbm90IHN1cHBvcnRlZDogJWQiLCBjdGwtPmlkKTsKLQkJcmV0dXJuIC1FUEVSTTsKLQl9Ci0KLW91dDoKLQlEREVCVUcoMywgJmMtPmRldiwgImlkPSVkLCBhcmc9JWQsIHJjPSVkIiwgY3RsLT5pZCwgdiwgcmMpOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBvdjd4MjBfZ2V0X3Y0bDFfY29udHJvbChzdHJ1Y3QgaTJjX2NsaWVudCAqYywKLQkJCQkgICBzdHJ1Y3Qgb3ZjYW1jaGlwX2NvbnRyb2wgKmN0bCkKLXsKLQlzdHJ1Y3Qgb3ZjYW1jaGlwICpvdiA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKLQlzdHJ1Y3Qgb3Y3eDIwICpzID0gb3YtPnNwcml2OwotCWludCByYyA9IDA7Ci0JdW5zaWduZWQgY2hhciB2YWwgPSAwOwotCi0Jc3dpdGNoIChjdGwtPmlkKSB7Ci0JY2FzZSBPVkNBTUNISVBfQ0lEX0NPTlQ6Ci0JCXJjID0gb3ZfcmVhZChjLCAweDY0LCAmdmFsKTsKLQkJY3RsLT52YWx1ZSA9IG92N3gyMF9sdXRfZmluZChjdGFiLCAxNiwgdmFsKSA8PCAxMjsKLQkJYnJlYWs7Ci0JY2FzZSBPVkNBTUNISVBfQ0lEX0JSSUdIVDoKLQkJcmMgPSBvdl9yZWFkKGMsIFJFR19CUlQsICZ2YWwpOwotCQljdGwtPnZhbHVlID0gdmFsIDw8IDg7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9TQVQ6Ci0JCXJjID0gb3ZfcmVhZChjLCBSRUdfU0FULCAmdmFsKTsKLQkJY3RsLT52YWx1ZSA9IHZhbCA8PCA4OwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfRVhQOgotCQlyYyA9IG92X3JlYWQoYywgUkVHX0VYUCwgJnZhbCk7Ci0JCWN0bC0+dmFsdWUgPSB2YWw7Ci0JCWJyZWFrOwotCWNhc2UgT1ZDQU1DSElQX0NJRF9CQU5ERklMVDoKLQkJY3RsLT52YWx1ZSA9IHMtPmJhbmRmaWx0OwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfQVVUT0JSSUdIVDoKLQkJY3RsLT52YWx1ZSA9IHMtPmF1dG9fYnJ0OwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfQVVUT0VYUDoKLQkJY3RsLT52YWx1ZSA9IHMtPmF1dG9fZXhwOwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfQkFDS0xJR0hUOgotCQljdGwtPnZhbHVlID0gcy0+YmFja2xpZ2h0OwotCQlicmVhazsKLQljYXNlIE9WQ0FNQ0hJUF9DSURfTUlSUk9SOgotCQljdGwtPnZhbHVlID0gcy0+bWlycm9yOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEREVCVUcoMiwgJmMtPmRldiwgImNvbnRyb2wgbm90IHN1cHBvcnRlZDogJWQiLCBjdGwtPmlkKTsKLQkJcmV0dXJuIC1FUEVSTTsKLQl9Ci0KLQlEREVCVUcoMywgJmMtPmRldiwgImlkPSVkLCBhcmc9JWQsIHJjPSVkIiwgY3RsLT5pZCwgY3RsLT52YWx1ZSwgcmMpOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBvdjd4MjBfbW9kZV9pbml0KHN0cnVjdCBpMmNfY2xpZW50ICpjLCBzdHJ1Y3Qgb3ZjYW1jaGlwX3dpbmRvdyAqd2luKQotewotCXN0cnVjdCBvdmNhbWNoaXAgKm92ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOwotCWludCBxdmdhID0gd2luLT5xdWFydGVyOwotCi0JLyoqKioqKioqIFFWR0Etc3BlY2lmaWMgcmVncyAqKioqKioqKi8KLQlvdl93cml0ZV9tYXNrKGMsIDB4MTQsIHF2Z2E/MHgyMDoweDAwLCAweDIwKTsKLQlvdl93cml0ZV9tYXNrKGMsIDB4MjgsIHF2Z2E/MHgwMDoweDIwLCAweDIwKTsKLQlvdl93cml0ZShjLCAweDI0LCBxdmdhPzB4MjA6MHgzYSk7Ci0Jb3Zfd3JpdGUoYywgMHgyNSwgcXZnYT8weDMwOjB4NjApOwotCW92X3dyaXRlX21hc2soYywgMHgyZCwgcXZnYT8weDQwOjB4MDAsIDB4NDApOwotCWlmICghb3YtPm1vbm8pCi0JCW92X3dyaXRlX21hc2soYywgMHg2NywgcXZnYT8weGYwOjB4OTAsIDB4ZjApOwotCW92X3dyaXRlX21hc2soYywgMHg3NCwgcXZnYT8weDIwOjB4MDAsIDB4MjApOwotCi0JLyoqKioqKioqIENsb2NrIHByb2dyYW1taW5nICoqKioqKioqLwotCi0Jb3Zfd3JpdGUoYywgMHgxMSwgd2luLT5jbG9ja2Rpdik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvdjd4MjBfc2V0X3dpbmRvdyhzdHJ1Y3QgaTJjX2NsaWVudCAqYywgc3RydWN0IG92Y2FtY2hpcF93aW5kb3cgKndpbikKLXsKLQlpbnQgcmV0LCBod3NjYWxlLCB2d3NjYWxlOwotCi0JcmV0ID0gb3Y3eDIwX21vZGVfaW5pdChjLCB3aW4pOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKHdpbi0+cXVhcnRlcikgewotCQlod3NjYWxlID0gMTsKLQkJdndzY2FsZSA9IDA7Ci0JfSBlbHNlIHsKLQkJaHdzY2FsZSA9IDI7Ci0JCXZ3c2NhbGUgPSAxOwotCX0KLQotCW92X3dyaXRlKGMsIDB4MTcsIEhXU0JBU0UgKyAod2luLT54ID4+IGh3c2NhbGUpKTsKLQlvdl93cml0ZShjLCAweDE4LCBIV0VCQVNFICsgKCh3aW4tPnggKyB3aW4tPndpZHRoKSA+PiBod3NjYWxlKSk7Ci0Jb3Zfd3JpdGUoYywgMHgxOSwgVldTQkFTRSArICh3aW4tPnkgPj4gdndzY2FsZSkpOwotCW92X3dyaXRlKGMsIDB4MWEsIFZXRUJBU0UgKyAoKHdpbi0+eSArIHdpbi0+aGVpZ2h0KSA+PiB2d3NjYWxlKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvdjd4MjBfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBPVkNBTUNISVBfQ01EX1NfQ1RSTDoKLQkJcmV0dXJuIG92N3gyMF9zZXRfdjRsMV9jb250cm9sKGMsIGFyZyk7Ci0JY2FzZSBPVkNBTUNISVBfQ01EX0dfQ1RSTDoKLQkJcmV0dXJuIG92N3gyMF9nZXRfdjRsMV9jb250cm9sKGMsIGFyZyk7Ci0JY2FzZSBPVkNBTUNISVBfQ01EX1NfTU9ERToKLQkJcmV0dXJuIG92N3gyMF9zZXRfd2luZG93KGMsIGFyZyk7Ci0JZGVmYXVsdDoKLQkJRERFQlVHKDIsICZjLT5kZXYsICJjb21tYW5kIG5vdCBzdXBwb3J0ZWQ6ICVkIiwgY21kKTsKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9Ci19Ci0KLXN0cnVjdCBvdmNhbWNoaXBfb3BzIG92N3gyMF9vcHMgPSB7Ci0JLmluaXQgICAgPQlvdjd4MjBfaW5pdCwKLQkuZnJlZSAgICA9CW92N3gyMF9mcmVlLAotCS5jb21tYW5kID0Jb3Y3eDIwX2NvbW1hbmQsCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3ZjYW1jaGlwX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwL292Y2FtY2hpcF9jb3JlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NzNkODQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3ZjYW1jaGlwX2NvcmUuYworKysgL2Rldi9udWxsCkBAIC0xLDM5NSArMCwwIEBACi0vKiBTaGFyZWQgQ29kZSBmb3IgT21uaVZpc2lvbiBDYW1lcmEgQ2hpcCBEcml2ZXJzCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA0IE1hcmsgTWNDbGVsbGFuZCA8bWFya0BhbHBoYS5keW5kbnMub3JnPgotICogaHR0cDovL2FscGhhLmR5bmRucy5vcmcvb3Y1MTEvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gTk8gV0FSUkFOVFkgT0YgQU5ZIEtJTkQgaXMgZXhwcmVzc2VkIG9yIGltcGxpZWQuCi0gKi8KLQotI2RlZmluZSBERUJVRwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+Ci0jaW5jbHVkZSAib3ZjYW1jaGlwX3ByaXYuaCIKLQotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjIuMjcgZm9yIExpbnV4IDIuNiIKLSNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiTWFyayBNY0NsZWxsYW5kIDxtYXJrQGFscGhhLmR5bmRucy5vcmc+IgotI2RlZmluZSBEUklWRVJfREVTQyAiT1YgY2FtZXJhIGNoaXAgSTJDIGRyaXZlciIKLQotI2RlZmluZSBQSU5GTyhmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0lORk8gIm92Y2FtY2hpcDogIiBmbXQgIlxuIiAsICMjIGFyZ3MpOwotI2RlZmluZSBQRVJST1IoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9FUlIgIm92Y2FtY2hpcDogIiBmbXQgIlxuIiAsICMjIGFyZ3MpOwotCi0jaWZkZWYgREVCVUcKLWludCBvdmNhbWNoaXBfZGVidWcgPSAwOwotc3RhdGljIGludCBkZWJ1ZzsKLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsCi0gICJEZWJ1ZyBsZXZlbDogMD1ub25lLCAxPWluaXRzLCAyPXdhcm5pbmcsIDM9Y29uZmlnLCA0PWZ1bmN0aW9ucywgNT1hbGwiKTsKLSNlbmRpZgotCi0vKiBCeSBkZWZhdWx0LCBsZXQgYnJpZGdlIGRyaXZlciB0ZWxsIHVzIGlmIGNoaXAgaXMgbW9ub2Nocm9tZS4gbW9ubz0wCi0gKiB3aWxsIGlnbm9yZSB0aGF0IGFuZCBhbHdheXMgdHJlYXQgY2hpcHMgYXMgY29sb3IuIG1vbm89MSB3aWxsIGZvcmNlCi0gKiBtb25vY2hyb21lIG1vZGUgZm9yIGFsbCBjaGlwcy4gKi8KLXN0YXRpYyBpbnQgbW9ubyA9IC0xOwotbW9kdWxlX3BhcmFtKG1vbm8sIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1vbm8sCi0gICIxPWNoaXBzIGFyZSBtb25vY2hyb21lIChPVngxeHgpLCAwPWZvcmNlIGNvbG9yLCAtMT1hdXRvZGV0ZWN0IChkZWZhdWx0KSIpOwotCi1NT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOwotTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotCi0vKiBSZWdpc3RlcnMgY29tbW9uIHRvIGFsbCBjaGlwcywgdGhhdCBhcmUgbmVlZGVkIGZvciBkZXRlY3Rpb24gKi8KLSNkZWZpbmUgR0VORVJJQ19SRUdfSURfSElHSCAgICAgICAweDFDCS8qIG1hbnVmYWN0dXJlciBJRCBNU0IgKi8KLSNkZWZpbmUgR0VORVJJQ19SRUdfSURfTE9XICAgICAgICAweDFECS8qIG1hbnVmYWN0dXJlciBJRCBMU0IgKi8KLSNkZWZpbmUgR0VORVJJQ19SRUdfQ09NX0kgICAgICAgICAweDI5CS8qIG1pc2MgSUQgYml0cyAqLwotCi1zdGF0aWMgY2hhciAqY2hpcF9uYW1lc1tOVU1fQ0NfVFlQRVNdID0gewotCVtDQ19VTktOT1dOXQk9ICJVbmtub3duIGNoaXAiLAotCVtDQ19PVjc2QkVdCT0gIk9WNzZCRSIsCi0JW0NDX09WNzYxMF0JPSAiT1Y3NjEwIiwKLQlbQ0NfT1Y3NjIwXQk9ICJPVjc2MjAiLAotCVtDQ19PVjc2MjBBRV0JPSAiT1Y3NjIwQUUiLAotCVtDQ19PVjY2MjBdCT0gIk9WNjYyMCIsCi0JW0NDX09WNjYzMF0JPSAiT1Y2NjMwIiwKLQlbQ0NfT1Y2NjMwQUVdCT0gIk9WNjYzMEFFIiwKLQlbQ0NfT1Y2NjMwQUZdCT0gIk9WNjYzMEFGIiwKLX07Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLWludCBvdl93cml0ZV9yZWd2YWxzKHN0cnVjdCBpMmNfY2xpZW50ICpjLCBzdHJ1Y3Qgb3ZjYW1jaGlwX3JlZ3ZhbHMgKnJ2YWxzKQotewotCWludCByYzsKLQotCXdoaWxlIChydmFscy0+cmVnICE9IDB4ZmYpIHsKLQkJcmMgPSBvdl93cml0ZShjLCBydmFscy0+cmVnLCBydmFscy0+dmFsKTsKLQkJaWYgKHJjIDwgMCkKLQkJCXJldHVybiByYzsKLQkJcnZhbHMrKzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogV3JpdGVzIGJpdHMgYXQgcG9zaXRpb25zIHNwZWNpZmllZCBieSBtYXNrIHRvIGFuIEkyQyByZWcuIEJpdHMgdGhhdCBhcmUgaW4KLSAqIHRoZSBzYW1lIHBvc2l0aW9uIGFzIDEncyBpbiAibWFzayIgYXJlIGNsZWFyZWQgYW5kIHNldCB0byAidmFsdWUiLiBCaXRzCi0gKiB0aGF0IGFyZSBpbiB0aGUgc2FtZSBwb3NpdGlvbiBhcyAwJ3MgaW4gIm1hc2siIGFyZSBwcmVzZXJ2ZWQsIHJlZ2FyZGxlc3MKLSAqIG9mIHRoZWlyIHJlc3BlY3RpdmUgc3RhdGUgaW4gInZhbHVlIi4KLSAqLwotaW50IG92X3dyaXRlX21hc2soc3RydWN0IGkyY19jbGllbnQgKmMsCi0JCSAgdW5zaWduZWQgY2hhciByZWcsCi0JCSAgdW5zaWduZWQgY2hhciB2YWx1ZSwKLQkJICB1bnNpZ25lZCBjaGFyIG1hc2spCi17Ci0JaW50IHJjOwotCXVuc2lnbmVkIGNoYXIgb2xkdmFsLCBuZXd2YWw7Ci0KLQlpZiAobWFzayA9PSAweGZmKSB7Ci0JCW5ld3ZhbCA9IHZhbHVlOwotCX0gZWxzZSB7Ci0JCXJjID0gb3ZfcmVhZChjLCByZWcsICZvbGR2YWwpOwotCQlpZiAocmMgPCAwKQotCQkJcmV0dXJuIHJjOwotCi0JCW9sZHZhbCAmPSAofm1hc2spOwkJLyogQ2xlYXIgdGhlIG1hc2tlZCBiaXRzICovCi0JCXZhbHVlICY9IG1hc2s7CQkJLyogRW5mb3JjZSBtYXNrIG9uIHZhbHVlICovCi0JCW5ld3ZhbCA9IG9sZHZhbCB8IHZhbHVlOwkvKiBTZXQgdGhlIGRlc2lyZWQgYml0cyAqLwotCX0KLQotCXJldHVybiBvdl93cml0ZShjLCByZWcsIG5ld3ZhbCk7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIFJlc2V0IHRoZSBjaGlwIGFuZCBlbnN1cmUgdGhhdCBJMkMgaXMgc3luY2hyb25pemVkLiBSZXR1cm5zIDwwIGlmIGZhaWx1cmUuCi0gKi8KLXN0YXRpYyBpbnQgaW5pdF9jYW1jaGlwKHN0cnVjdCBpMmNfY2xpZW50ICpjKQotewotCWludCBpLCBzdWNjZXNzOwotCXVuc2lnbmVkIGNoYXIgaGlnaCwgbG93OwotCi0JLyogUmVzZXQgdGhlIGNoaXAgKi8KLQlvdl93cml0ZShjLCAweDEyLCAweDgwKTsKLQotCS8qIFdhaXQgZm9yIGl0IHRvIGluaXRpYWxpemUgKi8KLQltc2xlZXAoMTUwKTsKLQotCWZvciAoaSA9IDAsIHN1Y2Nlc3MgPSAwOyBpIDwgSTJDX0RFVEVDVF9SRVRSSUVTICYmICFzdWNjZXNzOyBpKyspIHsKLQkJaWYgKG92X3JlYWQoYywgR0VORVJJQ19SRUdfSURfSElHSCwgJmhpZ2gpID49IDApIHsKLQkJCWlmIChvdl9yZWFkKGMsIEdFTkVSSUNfUkVHX0lEX0xPVywgJmxvdykgPj0gMCkgewotCQkJCWlmIChoaWdoID09IDB4N0YgJiYgbG93ID09IDB4QTIpIHsKLQkJCQkJc3VjY2VzcyA9IDE7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCS8qIFJlc2V0IHRoZSBjaGlwICovCi0JCW92X3dyaXRlKGMsIDB4MTIsIDB4ODApOwotCi0JCS8qIFdhaXQgZm9yIGl0IHRvIGluaXRpYWxpemUgKi8KLQkJbXNsZWVwKDE1MCk7Ci0KLQkJLyogRHVtbXkgcmVhZCB0byBzeW5jIEkyQyAqLwotCQlvdl9yZWFkKGMsIDB4MDAsICZsb3cpOwotCX0KLQotCWlmICghc3VjY2VzcykKLQkJcmV0dXJuIC1FSU87Ci0KLQlQREVCVUcoMSwgIkkyQyBzeW5jZWQgaW4gJWQgYXR0ZW1wdChzKSIsIGkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIFRoaXMgZGV0ZWN0cyB0aGUgT1Y3NjEwLCBPVjc2MjAsIG9yIE9WNzZCRSBjaGlwLiAqLwotc3RhdGljIGludCBvdjd4eDBfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjKQotewotCXN0cnVjdCBvdmNhbWNoaXAgKm92ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOwotCWludCByYzsKLQl1bnNpZ25lZCBjaGFyIHZhbDsKLQotCVBERUJVRyg0LCAiIik7Ci0KLQkvKiBEZXRlY3QgY2hpcCAoc3ViKXR5cGUgKi8KLQlyYyA9IG92X3JlYWQoYywgR0VORVJJQ19SRUdfQ09NX0ksICZ2YWwpOwotCWlmIChyYyA8IDApIHsKLQkJUEVSUk9SKCJFcnJvciBkZXRlY3Rpbmcgb3Y3eHgwIHR5cGUiKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCWlmICgodmFsICYgMykgPT0gMykgewotCQlQSU5GTygiQ2FtZXJhIGNoaXAgaXMgYW4gT1Y3NjEwIik7Ci0JCW92LT5zdWJ0eXBlID0gQ0NfT1Y3NjEwOwotCX0gZWxzZSBpZiAoKHZhbCAmIDMpID09IDEpIHsKLQkJcmMgPSBvdl9yZWFkKGMsIDB4MTUsICZ2YWwpOwotCQlpZiAocmMgPCAwKSB7Ci0JCQlQRVJST1IoIkVycm9yIGRldGVjdGluZyBvdjd4eDAgdHlwZSIpOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0KLQkJaWYgKHZhbCAmIDEpIHsKLQkJCVBJTkZPKCJDYW1lcmEgY2hpcCBpcyBhbiBPVjc2MjBBRSIpOwotCQkJLyogT1Y3NjIwIGlzIGEgY2xvc2UgZW5vdWdoIG1hdGNoIGZvciBub3cuIFRoZXJlIGFyZQotCQkJICogc29tZSBkZWZpbml0ZSBkaWZmZXJlbmNlcyB0aG91Z2gsIHNvIHRoaXMgc2hvdWxkIGJlCi0JCQkgKiBmaXhlZCAqLwotCQkJb3YtPnN1YnR5cGUgPSBDQ19PVjc2MjA7Ci0JCX0gZWxzZSB7Ci0JCQlQSU5GTygiQ2FtZXJhIGNoaXAgaXMgYW4gT1Y3NkJFIik7Ci0JCQlvdi0+c3VidHlwZSA9IENDX09WNzZCRTsKLQkJfQotCX0gZWxzZSBpZiAoKHZhbCAmIDMpID09IDApIHsKLQkJUElORk8oIkNhbWVyYSBjaGlwIGlzIGFuIE9WNzYyMCIpOwotCQlvdi0+c3VidHlwZSA9IENDX09WNzYyMDsKLQl9IGVsc2UgewotCQlQRVJST1IoIlVua25vd24gY2FtZXJhIGNoaXAgdmVyc2lvbjogJWQiLCB2YWwgJiAzKTsKLQkJcmV0dXJuIC1FTk9TWVM7Ci0JfQotCi0JaWYgKG92LT5zdWJ0eXBlID09IENDX09WNzZCRSkKLQkJb3YtPnNvcHMgPSAmb3Y3NmJlX29wczsKLQllbHNlIGlmIChvdi0+c3VidHlwZSA9PSBDQ19PVjc2MjApCi0JCW92LT5zb3BzID0gJm92N3gyMF9vcHM7Ci0JZWxzZQotCQlvdi0+c29wcyA9ICZvdjd4MTBfb3BzOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIFRoaXMgZGV0ZWN0cyB0aGUgT1Y2NjIwLCBPVjY2MzAsIE9WNjYzMEFFLCBvciBPVjY2MzBBRiBjaGlwLiAqLwotc3RhdGljIGludCBvdjZ4eDBfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjKQotewotCXN0cnVjdCBvdmNhbWNoaXAgKm92ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOwotCWludCByYzsKLQl1bnNpZ25lZCBjaGFyIHZhbDsKLQotCVBERUJVRyg0LCAiIik7Ci0KLQkvKiBEZXRlY3QgY2hpcCAoc3ViKXR5cGUgKi8KLQlyYyA9IG92X3JlYWQoYywgR0VORVJJQ19SRUdfQ09NX0ksICZ2YWwpOwotCWlmIChyYyA8IDApIHsKLQkJUEVSUk9SKCJFcnJvciBkZXRlY3Rpbmcgb3Y2eHgwIHR5cGUiKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWlmICgodmFsICYgMykgPT0gMCkgewotCQlvdi0+c3VidHlwZSA9IENDX09WNjYzMDsKLQkJUElORk8oIkNhbWVyYSBjaGlwIGlzIGFuIE9WNjYzMCIpOwotCX0gZWxzZSBpZiAoKHZhbCAmIDMpID09IDEpIHsKLQkJb3YtPnN1YnR5cGUgPSBDQ19PVjY2MjA7Ci0JCVBJTkZPKCJDYW1lcmEgY2hpcCBpcyBhbiBPVjY2MjAiKTsKLQl9IGVsc2UgaWYgKCh2YWwgJiAzKSA9PSAyKSB7Ci0JCW92LT5zdWJ0eXBlID0gQ0NfT1Y2NjMwOwotCQlQSU5GTygiQ2FtZXJhIGNoaXAgaXMgYW4gT1Y2NjMwQUUiKTsKLQl9IGVsc2UgaWYgKCh2YWwgJiAzKSA9PSAzKSB7Ci0JCW92LT5zdWJ0eXBlID0gQ0NfT1Y2NjMwOwotCQlQSU5GTygiQ2FtZXJhIGNoaXAgaXMgYW4gT1Y2NjMwQUYiKTsKLQl9Ci0KLQlpZiAob3YtPnN1YnR5cGUgPT0gQ0NfT1Y2NjIwKQotCQlvdi0+c29wcyA9ICZvdjZ4MjBfb3BzOwotCWVsc2UKLQkJb3YtPnNvcHMgPSAmb3Y2eDMwX29wczsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG92Y2FtY2hpcF9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmMpCi17Ci0JLyogSWRlYWxseSB3ZSB3b3VsZCBqdXN0IHRyeSBhIHNpbmdsZSByZWdpc3RlciB3cml0ZSBhbmQgc2VlIGlmIGl0IE5BS3MuCi0JICogVGhhdCBpc24ndCBwb3NzaWJsZSBzaW5jZSB0aGUgT1Y1MTggY2FuJ3QgcmVwb3J0IEkyQyB0cmFuc2FjdGlvbgotCSAqIGZhaWx1cmVzLiBTbywgd2UgaGF2ZSB0byB0cnkgdG8gaW5pdGlhbGl6ZSB0aGUgY2hpcCAoaS5lLiByZXNldCBpdAotCSAqIGFuZCBjaGVjayB0aGUgSUQgcmVnaXN0ZXJzKSB0byBkZXRlY3QgaXRzIHByZXNlbmNlLiAqLwotCi0JLyogVGVzdCBmb3IgN3h4MCAqLwotCVBERUJVRygzLCAiVGVzdGluZyBmb3IgMFY3eHgwIik7Ci0JaWYgKGluaXRfY2FtY2hpcChjKSA8IDApCi0JCXJldHVybiAtRU5PREVWOwotCS8qIDctYml0IGFkZHJlc3NlcyB3aXRoIGJpdCAwIHNldCBhcmUgZm9yIHRoZSBPVjd4eDAgKi8KLQlpZiAoYy0+YWRkciAmIDEpIHsKLQkJaWYgKG92N3h4MF9kZXRlY3QoYykgPCAwKSB7Ci0JCQlQRVJST1IoIkZhaWxlZCB0byBpbml0IE9WN3h4MCIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JfQotCS8qIFRlc3QgZm9yIDZ4eDAgKi8KLQlQREVCVUcoMywgIlRlc3RpbmcgZm9yIDBWNnh4MCIpOwotCWlmIChvdjZ4eDBfZGV0ZWN0KGMpIDwgMCkgewotCQlQRVJST1IoIkZhaWxlZCB0byBpbml0IE9WNnh4MCIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBsb25nIG92Y2FtY2hpcF9pb2N0bChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IG92Y2FtY2hpcCAqb3YgPSB0b19vdmNhbWNoaXAoc2QpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7Ci0KLQlpZiAoIW92LT5pbml0aWFsaXplZCAmJgotCSAgICBjbWQgIT0gT1ZDQU1DSElQX0NNRF9RX1NVQlRZUEUgJiYKLQkgICAgY21kICE9IE9WQ0FNQ0hJUF9DTURfSU5JVElBTElaRSkgewotCQl2NGwyX2VycihzZCwgIkNhbWVyYSBjaGlwIG5vdCBpbml0aWFsaXplZCB5ZXQhXG4iKTsKLQkJcmV0dXJuIC1FUEVSTTsKLQl9Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgT1ZDQU1DSElQX0NNRF9RX1NVQlRZUEU6Ci0JewotCQkqKGludCAqKWFyZyA9IG92LT5zdWJ0eXBlOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBPVkNBTUNISVBfQ01EX0lOSVRJQUxJWkU6Ci0JewotCQlpbnQgcmM7Ci0KLQkJaWYgKG1vbm8gPT0gLTEpCi0JCQlvdi0+bW9ubyA9ICooaW50ICopYXJnOwotCQllbHNlCi0JCQlvdi0+bW9ubyA9IG1vbm87Ci0KLQkJaWYgKG92LT5tb25vKSB7Ci0JCQlpZiAob3YtPnN1YnR5cGUgIT0gQ0NfT1Y3NjIwKQotCQkJCXY0bDJfd2FybihzZCwgIk1vbm9jaHJvbWUgbm90ICIKLQkJCQkJImltcGxlbWVudGVkIGZvciB0aGlzIGNoaXBcbiIpOwotCQkJZWxzZQotCQkJCXY0bDJfaW5mbyhzZCwgIkluaXRpYWxpemluZyBjaGlwIGFzICIKLQkJCQkJIm1vbm9jaHJvbWVcbiIpOwotCQl9Ci0KLQkJcmMgPSBvdi0+c29wcy0+aW5pdChjKTsKLQkJaWYgKHJjIDwgMCkKLQkJCXJldHVybiByYzsKLQotCQlvdi0+aW5pdGlhbGl6ZWQgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIG92LT5zb3BzLT5jb21tYW5kKGMsIGNtZCwgYXJnKTsKLQl9Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgb3ZjYW1jaGlwX2NvcmVfb3BzID0gewotCS5pb2N0bCA9IG92Y2FtY2hpcF9pb2N0bCwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIG92Y2FtY2hpcF9vcHMgPSB7Ci0JLmNvcmUgPSAmb3ZjYW1jaGlwX2NvcmVfb3BzLAotfTsKLQotc3RhdGljIGludCBvdmNhbWNoaXBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3Qgb3ZjYW1jaGlwICpvdjsKLQlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwotCWludCByYyA9IDA7Ci0KLQlvdiA9IGt6YWxsb2Moc2l6ZW9mICpvdiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFvdikgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gbm9fb3Y7Ci0JfQotCXNkID0gJm92LT5zZDsKLQl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmb3ZjYW1jaGlwX29wcyk7Ci0KLQlyYyA9IG92Y2FtY2hpcF9kZXRlY3QoY2xpZW50KTsKLQlpZiAocmMgPCAwKQotCQlnb3RvIGVycm9yOwotCi0JdjRsX2luZm8oY2xpZW50LCAiJXMgZm91bmQgQCAweCUwMnggKCVzKVxuIiwKLQkJCWNoaXBfbmFtZXNbb3YtPnN1YnR5cGVdLCBjbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKLQotCVBERUJVRygxLCAiQ2FtZXJhIGNoaXAgZGV0ZWN0aW9uIGNvbXBsZXRlIik7Ci0KLQlyZXR1cm4gcmM7Ci1lcnJvcjoKLQlrZnJlZShvdik7Ci1ub19vdjoKLQlQREVCVUcoMSwgInJldHVybmluZyAlZCIsIHJjKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgb3ZjYW1jaGlwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlzdHJ1Y3Qgb3ZjYW1jaGlwICpvdiA9IHRvX292Y2FtY2hpcChzZCk7Ci0JaW50IHJjOwotCi0JdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOwotCXJjID0gb3YtPnNvcHMtPmZyZWUoY2xpZW50KTsKLQlpZiAocmMgPCAwKQotCQlyZXR1cm4gcmM7Ci0KLQlrZnJlZShvdik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBvdmNhbWNoaXBfaWRbXSA9IHsKLQl7ICJvdmNhbWNoaXAiLCAwIH0sCi0JeyB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIG92Y2FtY2hpcF9pZCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKLQkubmFtZSA9ICJvdmNhbWNoaXAiLAotCS5wcm9iZSA9IG92Y2FtY2hpcF9wcm9iZSwKLQkucmVtb3ZlID0gb3ZjYW1jaGlwX3JlbW92ZSwKLQkuaWRfdGFibGUgPSBvdmNhbWNoaXBfaWQsCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3ZjYW1jaGlwX3ByaXYuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwL292Y2FtY2hpcF9wcml2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmMDdiNzguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3ZjYW1jaGlwX3ByaXYuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKiBPbW5pVmlzaW9uKiBjYW1lcmEgY2hpcCBkcml2ZXIgcHJpdmF0ZSBkZWZpbml0aW9ucyBmb3IgY29yZSBjb2RlIGFuZAotICogY2hpcC1zcGVjaWZpYyBjb2RlCi0gKgotICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDQgTWFyayBNY0NsZWxsYW5kCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gTk8gV0FSUkFOVFkgT0YgQU5ZIEtJTkQgaXMgZXhwcmVzc2VkIG9yIGltcGxpZWQuCi0gKgotICogKiBPbW5pVmlzaW9uIGlzIGEgdHJhZGVtYXJrIG9mIE9tbmlWaXNpb24gVGVjaG5vbG9naWVzLCBJbmMuIFRoaXMgZHJpdmVyCi0gKiBpcyBub3Qgc3BvbnNvcmVkIG9yIGRldmVsb3BlZCBieSB0aGVtLgotICovCi0KLSNpZm5kZWYgX19MSU5VWF9PVkNBTUNISVBfUFJJVl9ICi0jZGVmaW5lIF9fTElOVVhfT1ZDQU1DSElQX1BSSVZfSAotCi0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1zdWJkZXYuaD4KLSNpbmNsdWRlIDxtZWRpYS9vdmNhbWNoaXAuaD4KLQotI2lmZGVmIERFQlVHCi1leHRlcm4gaW50IG92Y2FtY2hpcF9kZWJ1ZzsKLSNlbmRpZgotCi0jZGVmaW5lIFBERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBcCi0JaWYgKG92Y2FtY2hpcF9kZWJ1ZyA+PSAobGV2ZWwpKQlwcl9kZWJ1ZygiWyVzOiVkXSAiIGZtdCAiXG4iLCBcCi0JCV9fZnVuY19fLCBfX0xJTkVfXyAsICMjIGFyZ3MpCi0KLSNkZWZpbmUgRERFQlVHKGxldmVsLCBkZXYsIGZtdCwgYXJncy4uLikgXAotCWlmIChvdmNhbWNoaXBfZGVidWcgPj0gKGxldmVsKSkJZGV2X2RiZyhkZXYsICJbJXM6JWRdICIgZm10ICJcbiIsIFwKLQkJX19mdW5jX18sIF9fTElORV9fICwgIyMgYXJncykKLQotLyogTnVtYmVyIG9mIHRpbWVzIHRvIHJldHJ5IGNoaXAgZGV0ZWN0aW9uLiBJbmNyZWFzZSB0aGlzIGlmIHlvdSBhcmUgZ2V0dGluZwotICogIkZhaWxlZCB0byBpbml0IGNhbWVyYSBjaGlwIiAqLwotI2RlZmluZSBJMkNfREVURUNUX1JFVFJJRVMJMTAKLQotc3RydWN0IG92Y2FtY2hpcF9yZWd2YWxzIHsKLQl1bnNpZ25lZCBjaGFyIHJlZzsKLQl1bnNpZ25lZCBjaGFyIHZhbDsKLX07Ci0KLXN0cnVjdCBvdmNhbWNoaXBfb3BzIHsKLQlpbnQgKCppbml0KShzdHJ1Y3QgaTJjX2NsaWVudCAqKTsKLQlpbnQgKCpmcmVlKShzdHJ1Y3QgaTJjX2NsaWVudCAqKTsKLQlpbnQgKCpjb21tYW5kKShzdHJ1Y3QgaTJjX2NsaWVudCAqLCB1bnNpZ25lZCBpbnQsIHZvaWQgKik7Ci19OwotCi1zdHJ1Y3Qgb3ZjYW1jaGlwIHsKLQlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7Ci0Jc3RydWN0IG92Y2FtY2hpcF9vcHMgKnNvcHM7Ci0Jdm9pZCAqc3ByaXY7ICAgICAgICAgICAgICAgLyogUHJpdmF0ZSBkYXRhIGZvciBPVjd4MTAuYyBldGMuLi4gKi8KLQlpbnQgc3VidHlwZTsgICAgICAgICAgICAgICAvKiA9IFNFTl9PVjc2MTAgZXRjLi4uICovCi0JaW50IG1vbm87ICAgICAgICAgICAgICAgICAgLyogTW9ub2Nocm9tZSBjaGlwPyAoaW52YWxpZCB1bnRpbCBpbml0KSAqLwotCWludCBpbml0aWFsaXplZDsgICAgICAgICAgIC8qIE9WQ0FNQ0hJUF9DTURfSU5JVElBTElaRSB3YXMgc3VjY2Vzc2Z1bCAqLwotfTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3Qgb3ZjYW1jaGlwICp0b19vdmNhbWNoaXAoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qgb3ZjYW1jaGlwLCBzZCk7Ci19Ci0KLWV4dGVybiBzdHJ1Y3Qgb3ZjYW1jaGlwX29wcyBvdjZ4MjBfb3BzOwotZXh0ZXJuIHN0cnVjdCBvdmNhbWNoaXBfb3BzIG92NngzMF9vcHM7Ci1leHRlcm4gc3RydWN0IG92Y2FtY2hpcF9vcHMgb3Y3eDEwX29wczsKLWV4dGVybiBzdHJ1Y3Qgb3ZjYW1jaGlwX29wcyBvdjd4MjBfb3BzOwotZXh0ZXJuIHN0cnVjdCBvdmNhbWNoaXBfb3BzIG92NzZiZV9vcHM7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogICAgICAgICAgICAgIEkyQyBJL08gICAgICAgICAgICAgICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIGlubGluZSBpbnQgb3ZfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdW5zaWduZWQgY2hhciByZWcsCi0JCQkgIHVuc2lnbmVkIGNoYXIgKnZhbHVlKQotewotCWludCByYzsKLQotCXJjID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGMsIHJlZyk7Ci0JKnZhbHVlID0gKHVuc2lnbmVkIGNoYXIpIHJjOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgb3Zfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGNoYXIgcmVnLAotCQkJICAgdW5zaWduZWQgY2hhciB2YWx1ZSApCi17Ci0JcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoYywgcmVnLCB2YWx1ZSk7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogICAgICAgIEZVTkNUSU9OIFBST1RPVFlQRVMgICAgICAgICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyogRnVuY3Rpb25zIGluIG92Y2FtY2hpcF9jb3JlLmMgKi8KLQotZXh0ZXJuIGludCBvdl93cml0ZV9yZWd2YWxzKHN0cnVjdCBpMmNfY2xpZW50ICpjLAotCQkJICAgIHN0cnVjdCBvdmNhbWNoaXBfcmVndmFscyAqcnZhbHMpOwotCi1leHRlcm4gaW50IG92X3dyaXRlX21hc2soc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGNoYXIgcmVnLAotCQkJIHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGNoYXIgbWFzayk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaW9yZWFkLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pb3JlYWQuYwppbmRleCBiNDgyNDc4Li5iYmE2MTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pb3JlYWQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pb3JlYWQuYwpAQCAtMjIzLDcgKzIyMywxMCBAQAogCQkJCSAgICIgcHZyMl9pb3JlYWRfc2V0dXAgKHNldHVwKSBpZD0lcCIsY3ApOwogCQkJcHZyMl9zdHJlYW1fa2lsbChzcCk7CiAJCQlyZXQgPSBwdnIyX3N0cmVhbV9zZXRfYnVmZmVyX2NvdW50KHNwLEJVRkZFUl9DT1VOVCk7Ci0JCQlpZiAocmV0IDwgMCkgcmV0dXJuIHJldDsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJbXV0ZXhfdW5sb2NrKCZjcC0+bXV0ZXgpOworCQkJCXJldHVybiByZXQ7CisJCQl9CiAJCQlmb3IgKGlkeCA9IDA7IGlkeCA8IEJVRkZFUl9DT1VOVDsgaWR4KyspIHsKIAkJCQlicCA9IHB2cjJfc3RyZWFtX2dldF9idWZmZXIoc3AsaWR4KTsKIAkJCQlwdnIyX2J1ZmZlcl9zZXRfYnVmZmVyKGJwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYwppbmRleCBmYjI0MmY2Li45ZGU3ZDU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYwpAQCAtMjc2LDcgKzI3Niw3IEBACiAJICogbG9uZ2VyIGluIFNUQVRFX1FVRVVFRCBvciBTVEFURV9BQ1RJVkUKIAkgKi8KIAl2aWRlb2J1Zl93YWl0b24oJmJ1Zi0+dmIsIDAsIDApOwotCXZpZGVvYnVmX2RtYV91bm1hcCh2cSwgZG1hKTsKKwl2aWRlb2J1Zl9kbWFfdW5tYXAodnEtPmRldiwgZG1hKTsKIAl2aWRlb2J1Zl9kbWFfZnJlZShkbWEpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYnVmLT5kbWFzKTsgaSsrKSB7CkBAIC0xMjg0LDcgKzEyODQsNyBAQAogCX0KIAogCXN3aXRjaCAoY29kZSkgewotCWNhc2UgVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDhfQkU6CisJY2FzZSBWNEwyX01CVVNfRk1UX1VZVlk4XzJYODoKIAkJZm9ybWF0cysrOwogCQlpZiAoeGxhdGUpIHsKIAkJCXhsYXRlLT5ob3N0X2ZtdAk9ICZweGFfY2FtZXJhX2Zvcm1hdHNbMF07CkBAIC0xMjkzLDkgKzEyOTMsOSBAQAogCQkJZGV2X2RiZyhkZXYsICJQcm92aWRpbmcgZm9ybWF0ICVzIHVzaW5nIGNvZGUgJWRcbiIsCiAJCQkJcHhhX2NhbWVyYV9mb3JtYXRzWzBdLm5hbWUsIGNvZGUpOwogCQl9Ci0JY2FzZSBWNEwyX01CVVNfRk1UX1lWWVU4XzJYOF9CRToKLQljYXNlIFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0xFOgotCWNhc2UgVjRMMl9NQlVTX0ZNVF9ZVllVOF8yWDhfTEU6CisJY2FzZSBWNEwyX01CVVNfRk1UX1ZZVVk4XzJYODoKKwljYXNlIFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4OgorCWNhc2UgVjRMMl9NQlVTX0ZNVF9ZVllVOF8yWDg6CiAJY2FzZSBWNEwyX01CVVNfRk1UX1JHQjU2NV8yWDhfTEU6CiAJY2FzZSBWNEwyX01CVVNfRk1UX1JHQjU1NV8yWDhfUEFESElfTEU6CiAJCWlmICh4bGF0ZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcmo1NG4xY2IwYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9yajU0bjFjYjBjLmMKaW5kZXggNDdmZDIwNy4uY2U3OGZmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9yajU0bjFjYjBjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9yajU0bjFjYjBjLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogRHJpdmVyIGZvciBSSjU0TjFDQjBDIENNT1MgSW1hZ2UgU2Vuc29yIGZyb20gTWljcm9uCisgKiBEcml2ZXIgZm9yIFJKNTROMUNCMEMgQ01PUyBJbWFnZSBTZW5zb3IgZnJvbSBTaGFycAogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSwgR3Vlbm5hZGkgTGlha2hvdmV0c2tpIDxnLmxpYWtob3ZldHNraUBnbXguZGU+CiAgKgpAQCAtMTI3LDggKzEyNyw4IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmo1NG4xX2RhdGFmbXQgcmo1NG4xX2NvbG91cl9mbXRzW10gPSB7Ci0Je1Y0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0xFLCBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCi0Je1Y0TDJfTUJVU19GTVRfWVZZVThfMlg4X0xFLCBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCisJe1Y0TDJfTUJVU19GTVRfWVVZVjhfMlg4LCBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCisJe1Y0TDJfTUJVU19GTVRfWVZZVThfMlg4LCBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCiAJe1Y0TDJfTUJVU19GTVRfUkdCNTY1XzJYOF9MRSwgVjRMMl9DT0xPUlNQQUNFX1NSR0J9LAogCXtWNEwyX01CVVNfRk1UX1JHQjU2NV8yWDhfQkUsIFY0TDJfQ09MT1JTUEFDRV9TUkdCfSwKIAl7VjRMMl9NQlVTX0ZNVF9TQkdHUjEwXzJYOF9QQURISV9MRSwgVjRMMl9DT0xPUlNQQUNFX1NSR0J9LApAQCAtMTA0NiwxMiArMTA0NiwxMiBAQAogCiAJLyogUkFfU0VMX1VMIGlzIG9ubHkgcmVsZXZhbnQgZm9yIHJhdyBtb2RlcywgaWdub3JlZCBvdGhlcndpc2UuICovCiAJc3dpdGNoIChtZi0+Y29kZSkgewotCWNhc2UgVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDhfTEU6CisJY2FzZSBWNEwyX01CVVNfRk1UX1lVWVY4XzJYODoKIAkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgUko1NE4xX09VVF9TRUwsIDApOwogCQlpZiAoIXJldCkKIAkJCXJldCA9IHJlZ19zZXQoY2xpZW50LCBSSjU0TjFfQllURV9TV0FQLCA4LCA4KTsKIAkJYnJlYWs7Ci0JY2FzZSBWNEwyX01CVVNfRk1UX1lWWVU4XzJYOF9MRToKKwljYXNlIFY0TDJfTUJVU19GTVRfWVZZVThfMlg4OgogCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBSSjU0TjFfT1VUX1NFTCwgMCk7CiAJCWlmICghcmV0KQogCQkJcmV0ID0gcmVnX3NldChjbGllbnQsIFJKNTROMV9CWVRFX1NXQVAsIDAsIDgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zMjI1NWRydi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zMjI1NWRydi5jCmluZGV4IDNjN2E3OWYuLjhlYzdjOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczIyNTVkcnYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3MyMjU1ZHJ2LmMKQEAgLTE5MSw3ICsxOTEsNiBAQAogc3RydWN0IHMyMjU1X2RtYXF1ZXVlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWFjdGl2ZTsKIAlzdHJ1Y3QgczIyNTVfZGV2CSpkZXY7Ci0JaW50CQkJY2hhbm5lbDsKIH07CiAKIC8qIGZvciBmaXJtd2FyZSBsb2FkaW5nLCBmd19zdGF0ZSAqLwpAQCAtMjI2LDUxICsyMjUsNjAgQEAKIH07CiAKIHN0cnVjdCBzMjI1NV9mbXQ7IC8qZm9yd2FyZCBkZWNsYXJhdGlvbiAqLworc3RydWN0IHMyMjU1X2RldjsKKworc3RydWN0IHMyMjU1X2NoYW5uZWwgeworCXN0cnVjdCB2aWRlb19kZXZpY2UJdmRldjsKKwlpbnQJCQlyZXNvdXJjZXM7CisJc3RydWN0IHMyMjU1X2RtYXF1ZXVlCXZpZHE7CisJc3RydWN0IHMyMjU1X2J1ZmZlcmkJYnVmZmVyOworCXN0cnVjdCBzMjI1NV9tb2RlCW1vZGU7CisJLyoganBlZyBjb21wcmVzc2lvbiAqLworCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiBqYzsKKwkvKiBjYXB0dXJlIHBhcmFtZXRlcnMgKGZvciBoaWdoIHF1YWxpdHkgbW9kZSBmdWxsIHNpemUpICovCisJc3RydWN0IHY0bDJfY2FwdHVyZXBhcm0gY2FwX3Bhcm07CisJaW50CQkJY3VyX2ZyYW1lOworCWludAkJCWxhc3RfZnJhbWU7CisKKwlpbnQJCQliX2FjcXVpcmU7CisJLyogYWxsb2NhdGVkIGltYWdlIHNpemUgKi8KKwl1bnNpZ25lZCBsb25nCQlyZXFfaW1hZ2Vfc2l6ZTsKKwkvKiByZWNlaXZlZCBwYWNrZXQgc2l6ZSAqLworCXVuc2lnbmVkIGxvbmcJCXBrdF9zaXplOworCWludAkJCWJhZF9wYXlsb2FkOworCXVuc2lnbmVkIGxvbmcJCWZyYW1lX2NvdW50OworCS8qIGlmIEpQRUcgaW1hZ2UgKi8KKwlpbnQgICAgICAgICAgICAgICAgICAgICBqcGdfc2l6ZTsKKwkvKiBpZiBjaGFubmVsIGNvbmZpZ3VyZWQgdG8gZGVmYXVsdCBzdGF0ZSAqLworCWludCAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgICAgICAgd2FpdF9zZXRtb2RlOworCWludCAgICAgICAgICAgICAgICAgICAgIHNldG1vZGVfcmVhZHk7CisJLyogdmlkZW8gc3RhdHVzIGl0ZW1zICovCisJaW50ICAgICAgICAgICAgICAgICAgICAgdmlkc3RhdHVzOworCXdhaXRfcXVldWVfaGVhZF90ICAgICAgIHdhaXRfdmlkc3RhdHVzOworCWludCAgICAgICAgICAgICAgICAgICAgIHZpZHN0YXR1c19yZWFkeTsKKwl1bnNpZ25lZCBpbnQJCXdpZHRoOworCXVuc2lnbmVkIGludAkJaGVpZ2h0OworCWNvbnN0IHN0cnVjdCBzMjI1NV9mbXQJKmZtdDsKKwlpbnQgaWR4OyAvKiBjaGFubmVsIG51bWJlciBvbiBkZXZpY2UsIDAtMyAqLworfTsKKwogCiBzdHJ1Y3QgczIyNTVfZGV2IHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlCXZkZXZbTUFYX0NIQU5ORUxTXTsKKwlzdHJ1Y3QgczIyNTVfY2hhbm5lbCAgICBjaGFubmVsW01BWF9DSEFOTkVMU107CiAJc3RydWN0IHY0bDJfZGV2aWNlIAl2NGwyX2RldjsKLQlhdG9taWNfdCAgICAgICAgICAgICAgICBjaGFubmVsczsgLyogbnVtYmVyIG9mIGNoYW5uZWxzIHJlZ2lzdGVyZWQgKi8KKwlhdG9taWNfdCAgICAgICAgICAgICAgICBudW1fY2hhbm5lbHM7CiAJaW50CQkJZnJhbWVzOwogCXN0cnVjdCBtdXRleAkJbG9jazsKIAlzdHJ1Y3QgbXV0ZXgJCW9wZW5fbG9jazsKLQlpbnQJCQlyZXNvdXJjZXNbTUFYX0NIQU5ORUxTXTsKIAlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaW50ZXJmYWNlOwogCXU4CQkJcmVhZF9lbmRwb2ludDsKLQotCXN0cnVjdCBzMjI1NV9kbWFxdWV1ZQl2aWRxW01BWF9DSEFOTkVMU107CiAJc3RydWN0IHRpbWVyX2xpc3QJdGltZXI7CiAJc3RydWN0IHMyMjU1X2Z3CSpmd19kYXRhOwogCXN0cnVjdCBzMjI1NV9waXBlaW5mbwlwaXBlOwotCXN0cnVjdCBzMjI1NV9idWZmZXJpCWJ1ZmZlcltNQVhfQ0hBTk5FTFNdOwotCXN0cnVjdCBzMjI1NV9tb2RlCW1vZGVbTUFYX0NIQU5ORUxTXTsKLQkvKiBqcGVnIGNvbXByZXNzaW9uICovCi0Jc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uIGpjW01BWF9DSEFOTkVMU107Ci0JLyogY2FwdHVyZSBwYXJhbWV0ZXJzIChmb3IgaGlnaCBxdWFsaXR5IG1vZGUgZnVsbCBzaXplKSAqLwotCXN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtIGNhcF9wYXJtW01BWF9DSEFOTkVMU107Ci0JY29uc3Qgc3RydWN0IHMyMjU1X2ZtdAkqY3VyX2ZtdFtNQVhfQ0hBTk5FTFNdOwotCWludAkJCWN1cl9mcmFtZVtNQVhfQ0hBTk5FTFNdOwotCWludAkJCWxhc3RfZnJhbWVbTUFYX0NIQU5ORUxTXTsKIAl1MzIJCQljYzsJLyogY3VycmVudCBjaGFubmVsICovCi0JaW50CQkJYl9hY3F1aXJlW01BWF9DSEFOTkVMU107Ci0JLyogYWxsb2NhdGVkIGltYWdlIHNpemUgKi8KLQl1bnNpZ25lZCBsb25nCQlyZXFfaW1hZ2Vfc2l6ZVtNQVhfQ0hBTk5FTFNdOwotCS8qIHJlY2VpdmVkIHBhY2tldCBzaXplICovCi0JdW5zaWduZWQgbG9uZwkJcGt0X3NpemVbTUFYX0NIQU5ORUxTXTsKLQlpbnQJCQliYWRfcGF5bG9hZFtNQVhfQ0hBTk5FTFNdOwotCXVuc2lnbmVkIGxvbmcJCWZyYW1lX2NvdW50W01BWF9DSEFOTkVMU107CiAJaW50CQkJZnJhbWVfcmVhZHk7Ci0JLyogaWYgSlBFRyBpbWFnZSAqLwotCWludCAgICAgICAgICAgICAgICAgICAgIGpwZ19zaXplW01BWF9DSEFOTkVMU107Ci0JLyogaWYgY2hhbm5lbCBjb25maWd1cmVkIHRvIGRlZmF1bHQgc3RhdGUgKi8KLQlpbnQgICAgICAgICAgICAgICAgICAgICBjaG5fY29uZmlndXJlZFtNQVhfQ0hBTk5FTFNdOwotCXdhaXRfcXVldWVfaGVhZF90ICAgICAgIHdhaXRfc2V0bW9kZVtNQVhfQ0hBTk5FTFNdOwotCWludCAgICAgICAgICAgICAgICAgICAgIHNldG1vZGVfcmVhZHlbTUFYX0NIQU5ORUxTXTsKLQkvKiB2aWRlbyBzdGF0dXMgaXRlbXMgKi8KLQlpbnQgICAgICAgICAgICAgICAgICAgICB2aWRzdGF0dXNbTUFYX0NIQU5ORUxTXTsKLQl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICB3YWl0X3ZpZHN0YXR1c1tNQVhfQ0hBTk5FTFNdOwotCWludCAgICAgICAgICAgICAgICAgICAgIHZpZHN0YXR1c19yZWFkeVtNQVhfQ0hBTk5FTFNdOwogCWludCAgICAgICAgICAgICAgICAgICAgIGNobl9yZWFkeTsKIAlzcGlubG9ja190ICAgICAgICAgICAgICBzbG9jazsKIAkvKiBkc3AgZmlybXdhcmUgdmVyc2lvbiAoZjIyNTV1c2IuYmluKSAqLwpAQCAtMjk4LDE2ICszMDYsMTAgQEAKIAogc3RydWN0IHMyMjU1X2ZoIHsKIAlzdHJ1Y3QgczIyNTVfZGV2CSpkZXY7Ci0JY29uc3Qgc3RydWN0IHMyMjU1X2ZtdAkqZm10OwotCXVuc2lnbmVkIGludAkJd2lkdGg7Ci0JdW5zaWduZWQgaW50CQloZWlnaHQ7CiAJc3RydWN0IHZpZGVvYnVmX3F1ZXVlCXZiX3ZpZHE7CiAJZW51bSB2NGwyX2J1Zl90eXBlCXR5cGU7Ci0JaW50CQkJY2hhbm5lbDsKLQkvKiBtb2RlIGJlbG93IGlzIHRoZSBkZXNpcmVkIG1vZGUuCi0JICAgbW9kZSBpbiBzMjI1NV9kZXYgaXMgdGhlIGN1cnJlbnQgbW9kZSB0aGF0IHdhcyBsYXN0IHNldCAqLwotCXN0cnVjdCBzMjI1NV9tb2RlCW1vZGU7Ci0JaW50CQkJcmVzb3VyY2VzW01BWF9DSEFOTkVMU107CisJc3RydWN0IHMyMjU1X2NoYW5uZWwJKmNoYW5uZWw7CisJaW50CQkJcmVzb3VyY2VzOwogfTsKIAogLyogY3VycmVudCBjeXByZXNzIEVFUFJPTSBmaXJtd2FyZSB2ZXJzaW9uICovCkBAIC0zNjAsMTIgKzM2MiwxMSBAQAogCiBzdGF0aWMgaW50IHMyMjU1X3N0YXJ0X3JlYWRwaXBlKHN0cnVjdCBzMjI1NV9kZXYgKmRldik7CiBzdGF0aWMgdm9pZCBzMjI1NV9zdG9wX3JlYWRwaXBlKHN0cnVjdCBzMjI1NV9kZXYgKmRldik7Ci1zdGF0aWMgaW50IHMyMjU1X3N0YXJ0X2FjcXVpcmUoc3RydWN0IHMyMjU1X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIGNobik7Ci1zdGF0aWMgaW50IHMyMjU1X3N0b3BfYWNxdWlyZShzdHJ1Y3QgczIyNTVfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgY2huKTsKLXN0YXRpYyB2b2lkIHMyMjU1X2ZpbGxidWZmKHN0cnVjdCBzMjI1NV9kZXYgKmRldiwgc3RydWN0IHMyMjU1X2J1ZmZlciAqYnVmLAotCQkJICAgaW50IGNobiwgaW50IGpwZ3NpemUpOwotc3RhdGljIGludCBzMjI1NV9zZXRfbW9kZShzdHJ1Y3QgczIyNTVfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgY2huLAotCQkJICBzdHJ1Y3QgczIyNTVfbW9kZSAqbW9kZSk7CitzdGF0aWMgaW50IHMyMjU1X3N0YXJ0X2FjcXVpcmUoc3RydWN0IHMyMjU1X2NoYW5uZWwgKmNoYW5uZWwpOworc3RhdGljIGludCBzMjI1NV9zdG9wX2FjcXVpcmUoc3RydWN0IHMyMjU1X2NoYW5uZWwgKmNoYW5uZWwpOworc3RhdGljIHZvaWQgczIyNTVfZmlsbGJ1ZmYoc3RydWN0IHMyMjU1X2NoYW5uZWwgKmNobiwgc3RydWN0IHMyMjU1X2J1ZmZlciAqYnVmLAorCQkJICAgaW50IGpwZ3NpemUpOworc3RhdGljIGludCBzMjI1NV9zZXRfbW9kZShzdHJ1Y3QgczIyNTVfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHMyMjU1X21vZGUgKm1vZGUpOwogc3RhdGljIGludCBzMjI1NV9ib2FyZF9zaHV0ZG93bihzdHJ1Y3QgczIyNTVfZGV2ICpkZXYpOwogc3RhdGljIHZvaWQgczIyNTVfZndsb2FkX3N0YXJ0KHN0cnVjdCBzMjI1NV9kZXYgKmRldiwgaW50IHJlc2V0KTsKIHN0YXRpYyB2b2lkIHMyMjU1X2Rlc3Ryb3koc3RydWN0IHMyMjU1X2RldiAqZGV2KTsKQEAgLTU3NywxMCArNTc4LDExIEBACiAKIH0KIAotc3RhdGljIGludCBzMjI1NV9nb3RfZnJhbWUoc3RydWN0IHMyMjU1X2RldiAqZGV2LCBpbnQgY2huLCBpbnQganBnc2l6ZSkKK3N0YXRpYyBpbnQgczIyNTVfZ290X2ZyYW1lKHN0cnVjdCBzMjI1NV9jaGFubmVsICpjaGFubmVsLCBpbnQganBnc2l6ZSkKIHsKLQlzdHJ1Y3QgczIyNTVfZG1hcXVldWUgKmRtYV9xID0gJmRldi0+dmlkcVtjaG5dOworCXN0cnVjdCBzMjI1NV9kbWFxdWV1ZSAqZG1hX3EgPSAmY2hhbm5lbC0+dmlkcTsKIAlzdHJ1Y3QgczIyNTVfYnVmZmVyICpidWY7CisJc3RydWN0IHMyMjU1X2RldiAqZGV2ID0gdG9fczIyNTVfZGV2KGNoYW5uZWwtPnZkZXYudjRsMl9kZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCWludCByYyA9IDA7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c2xvY2ssIGZsYWdzKTsKQEAgLTU5Myw3ICs1OTUsNyBAQAogCQkJIHN0cnVjdCBzMjI1NV9idWZmZXIsIHZiLnF1ZXVlKTsKIAlsaXN0X2RlbCgmYnVmLT52Yi5xdWV1ZSk7CiAJZG9fZ2V0dGltZW9mZGF5KCZidWYtPnZiLnRzKTsKLQlzMjI1NV9maWxsYnVmZihkZXYsIGJ1ZiwgZG1hX3EtPmNoYW5uZWwsIGpwZ3NpemUpOworCXMyMjU1X2ZpbGxidWZmKGNoYW5uZWwsIGJ1ZiwganBnc2l6ZSk7CiAJd2FrZV91cCgmYnVmLT52Yi5kb25lKTsKIAlkcHJpbnRrKDIsICIlczogW2J1Zi9pXSBbJXAvJWRdXG4iLCBfX2Z1bmNfXywgYnVmLCBidWYtPnZiLmkpOwogdW5sb2NrOgpAQCAtNjIxLDggKzYyMyw4IEBACiAgKiAgICAgICAgICAgICAgICAgIGh0dHA6Ly92NGwudmlkZW90ZWNobm9sb2d5LmNvbS8KICAqCiAgKi8KLXN0YXRpYyB2b2lkIHMyMjU1X2ZpbGxidWZmKHN0cnVjdCBzMjI1NV9kZXYgKmRldiwgc3RydWN0IHMyMjU1X2J1ZmZlciAqYnVmLAotCQkJICAgaW50IGNobiwgaW50IGpwZ3NpemUpCitzdGF0aWMgdm9pZCBzMjI1NV9maWxsYnVmZihzdHJ1Y3QgczIyNTVfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCSAgIHN0cnVjdCBzMjI1NV9idWZmZXIgKmJ1ZiwgaW50IGpwZ3NpemUpCiB7CiAJaW50IHBvcyA9IDA7CiAJc3RydWN0IHRpbWV2YWwgdHM7CkBAIC02MzMsMTIgKzYzNSwxMSBAQAogCiAJaWYgKCF2YnVmKQogCQlyZXR1cm47Ci0KLQlsYXN0X2ZyYW1lID0gZGV2LT5sYXN0X2ZyYW1lW2Nobl07CisJbGFzdF9mcmFtZSA9IGNoYW5uZWwtPmxhc3RfZnJhbWU7CiAJaWYgKGxhc3RfZnJhbWUgIT0gLTEpIHsKLQkJZnJtID0gJmRldi0+YnVmZmVyW2Nobl0uZnJhbWVbbGFzdF9mcmFtZV07CisJCWZybSA9ICZjaGFubmVsLT5idWZmZXIuZnJhbWVbbGFzdF9mcmFtZV07CiAJCXRtcGJ1ZiA9Ci0JCSAgICAoY29uc3QgY2hhciAqKWRldi0+YnVmZmVyW2Nobl0uZnJhbWVbbGFzdF9mcmFtZV0ubHB2Yml0czsKKwkJICAgIChjb25zdCBjaGFyICopY2hhbm5lbC0+YnVmZmVyLmZyYW1lW2xhc3RfZnJhbWVdLmxwdmJpdHM7CiAJCXN3aXRjaCAoYnVmLT5mbXQtPmZvdXJjYykgewogCQljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOgogCQljYXNlIFY0TDJfUElYX0ZNVF9VWVZZOgpAQCAtNjYxLDcgKzY2Miw3IEBACiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiczIyNTU6IHVua25vd24gZm9ybWF0P1xuIik7CiAJCX0KLQkJZGV2LT5sYXN0X2ZyYW1lW2Nobl0gPSAtMTsKKwkJY2hhbm5lbC0+bGFzdF9mcmFtZSA9IC0xOwogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiAiczIyNTU6ID09PT09PT1ubyBmcmFtZVxuIik7CiAJCXJldHVybjsKQEAgLTY3MSw3ICs2NzIsNyBAQAogCQkodW5zaWduZWQgbG9uZyl2YnVmLCBwb3MpOwogCS8qIHRlbGwgdjRsIGJ1ZmZlciB3YXMgZmlsbGVkICovCiAKLQlidWYtPnZiLmZpZWxkX2NvdW50ID0gZGV2LT5mcmFtZV9jb3VudFtjaG5dICogMjsKKwlidWYtPnZiLmZpZWxkX2NvdW50ID0gY2hhbm5lbC0+ZnJhbWVfY291bnQgKiAyOwogCWRvX2dldHRpbWVvZmRheSgmdHMpOwogCWJ1Zi0+dmIudHMgPSB0czsKIAlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfRE9ORTsKQEAgLTY4Niw4ICs2ODcsOCBAQAogCQkJdW5zaWduZWQgaW50ICpzaXplKQogewogCXN0cnVjdCBzMjI1NV9maCAqZmggPSB2cS0+cHJpdl9kYXRhOwotCi0JKnNpemUgPSBmaC0+d2lkdGggKiBmaC0+aGVpZ2h0ICogKGZoLT5mbXQtPmRlcHRoID4+IDMpOworCXN0cnVjdCBzMjI1NV9jaGFubmVsICpjaGFubmVsID0gZmgtPmNoYW5uZWw7CisJKnNpemUgPSBjaGFubmVsLT53aWR0aCAqIGNoYW5uZWwtPmhlaWdodCAqIChjaGFubmVsLT5mbXQtPmRlcHRoID4+IDMpOwogCiAJaWYgKDAgPT0gKmNvdW50KQogCQkqY291bnQgPSBTMjI1NV9ERUZfQlVGUzsKQEAgLTcxMCwzMCArNzExLDMxIEBACiAJCQkgIGVudW0gdjRsMl9maWVsZCBmaWVsZCkKIHsKIAlzdHJ1Y3QgczIyNTVfZmggKmZoID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgczIyNTVfY2hhbm5lbCAqY2hhbm5lbCA9IGZoLT5jaGFubmVsOwogCXN0cnVjdCBzMjI1NV9idWZmZXIgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IHMyMjU1X2J1ZmZlciwgdmIpOwogCWludCByYzsKKwlpbnQgdyA9IGNoYW5uZWwtPndpZHRoOworCWludCBoID0gY2hhbm5lbC0+aGVpZ2h0OwogCWRwcmludGsoNCwgIiVzLCBmaWVsZD0lZFxuIiwgX19mdW5jX18sIGZpZWxkKTsKLQlpZiAoZmgtPmZtdCA9PSBOVUxMKQorCWlmIChjaGFubmVsLT5mbXQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoKGZoLT53aWR0aCA8IG5vcm1fbWludygmZmgtPmRldi0+dmRldltmaC0+Y2hhbm5lbF0pKSB8fAotCSAgICAoZmgtPndpZHRoID4gbm9ybV9tYXh3KCZmaC0+ZGV2LT52ZGV2W2ZoLT5jaGFubmVsXSkpIHx8Ci0JICAgIChmaC0+aGVpZ2h0IDwgbm9ybV9taW5oKCZmaC0+ZGV2LT52ZGV2W2ZoLT5jaGFubmVsXSkpIHx8Ci0JICAgIChmaC0+aGVpZ2h0ID4gbm9ybV9tYXhoKCZmaC0+ZGV2LT52ZGV2W2ZoLT5jaGFubmVsXSkpKSB7CisJaWYgKCh3IDwgbm9ybV9taW53KCZjaGFubmVsLT52ZGV2KSkgfHwKKwkgICAgKHcgPiBub3JtX21heHcoJmNoYW5uZWwtPnZkZXYpKSB8fAorCSAgICAoaCA8IG5vcm1fbWluaCgmY2hhbm5lbC0+dmRldikpIHx8CisJICAgIChoID4gbm9ybV9tYXhoKCZjaGFubmVsLT52ZGV2KSkpIHsKIAkJZHByaW50ayg0LCAiaW52YWxpZCBidWZmZXIgcHJlcGFyZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQotCWJ1Zi0+dmIuc2l6ZSA9IGZoLT53aWR0aCAqIGZoLT5oZWlnaHQgKiAoZmgtPmZtdC0+ZGVwdGggPj4gMyk7Ci0KKwlidWYtPnZiLnNpemUgPSB3ICogaCAqIChjaGFubmVsLT5mbXQtPmRlcHRoID4+IDMpOwogCWlmICgwICE9IGJ1Zi0+dmIuYmFkZHIgJiYgYnVmLT52Yi5ic2l6ZSA8IGJ1Zi0+dmIuc2l6ZSkgewogCQlkcHJpbnRrKDQsICJpbnZhbGlkIGJ1ZmZlciBwcmVwYXJlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JYnVmLT5mbXQgPSBmaC0+Zm10OwotCWJ1Zi0+dmIud2lkdGggPSBmaC0+d2lkdGg7Ci0JYnVmLT52Yi5oZWlnaHQgPSBmaC0+aGVpZ2h0OworCWJ1Zi0+Zm10ID0gY2hhbm5lbC0+Zm10OworCWJ1Zi0+dmIud2lkdGggPSB3OworCWJ1Zi0+dmIuaGVpZ2h0ID0gaDsKIAlidWYtPnZiLmZpZWxkID0gZmllbGQ7CiAKIAlpZiAoVklERU9CVUZfTkVFRFNfSU5JVCA9PSBidWYtPnZiLnN0YXRlKSB7CkBAIC03NTMsOCArNzU1LDggQEAKIHsKIAlzdHJ1Y3QgczIyNTVfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCBzMjI1NV9idWZmZXIsIHZiKTsKIAlzdHJ1Y3QgczIyNTVfZmggKmZoID0gdnEtPnByaXZfZGF0YTsKLQlzdHJ1Y3QgczIyNTVfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCXN0cnVjdCBzMjI1NV9kbWFxdWV1ZSAqdmlkcSA9ICZkZXYtPnZpZHFbZmgtPmNoYW5uZWxdOworCXN0cnVjdCBzMjI1NV9jaGFubmVsICpjaGFubmVsID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IHMyMjU1X2RtYXF1ZXVlICp2aWRxID0gJmNoYW5uZWwtPnZpZHE7CiAJZHByaW50aygxLCAiJXNcbiIsIF9fZnVuY19fKTsKIAlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOwogCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZ2aWRxLT5hY3RpdmUpOwpAQCAtNzY1LDcgKzc2Nyw3IEBACiB7CiAJc3RydWN0IHMyMjU1X2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgczIyNTVfYnVmZmVyLCB2Yik7CiAJc3RydWN0IHMyMjU1X2ZoICpmaCA9IHZxLT5wcml2X2RhdGE7Ci0JZHByaW50ayg0LCAiJXMgJWRcbiIsIF9fZnVuY19fLCBmaC0+Y2hhbm5lbCk7CisJZHByaW50ayg0LCAiJXMgJWRcbiIsIF9fZnVuY19fLCBmaC0+Y2hhbm5lbC0+aWR4KTsKIAlmcmVlX2J1ZmZlcih2cSwgYnVmKTsKIH0KIApAQCAtNzc3LDM5ICs3NzksNDMgQEAKIH07CiAKIAotc3RhdGljIGludCByZXNfZ2V0KHN0cnVjdCBzMjI1NV9kZXYgKmRldiwgc3RydWN0IHMyMjU1X2ZoICpmaCkKK3N0YXRpYyBpbnQgcmVzX2dldChzdHJ1Y3QgczIyNTVfZmggKmZoKQogeworCXN0cnVjdCBzMjI1NV9kZXYgKmRldiA9IGZoLT5kZXY7CiAJLyogaXMgaXQgZnJlZT8gKi8KKwlzdHJ1Y3QgczIyNTVfY2hhbm5lbCAqY2hhbm5lbCA9IGZoLT5jaGFubmVsOwogCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0JaWYgKGRldi0+cmVzb3VyY2VzW2ZoLT5jaGFubmVsXSkgeworCWlmIChjaGFubmVsLT5yZXNvdXJjZXMpIHsKIAkJLyogbm8sIHNvbWVvbmUgZWxzZSB1c2VzIGl0ICovCiAJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCS8qIGl0J3MgZnJlZSwgZ3JhYiBpdCAqLwotCWRldi0+cmVzb3VyY2VzW2ZoLT5jaGFubmVsXSA9IDE7Ci0JZmgtPnJlc291cmNlc1tmaC0+Y2hhbm5lbF0gPSAxOworCWNoYW5uZWwtPnJlc291cmNlcyA9IDE7CisJZmgtPnJlc291cmNlcyA9IDE7CiAJZHByaW50aygxLCAiczIyNTU6IHJlczogZ2V0XG4iKTsKIAltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgcmVzX2xvY2tlZChzdHJ1Y3QgczIyNTVfZGV2ICpkZXYsIHN0cnVjdCBzMjI1NV9maCAqZmgpCitzdGF0aWMgaW50IHJlc19sb2NrZWQoc3RydWN0IHMyMjU1X2ZoICpmaCkKIHsKLQlyZXR1cm4gZGV2LT5yZXNvdXJjZXNbZmgtPmNoYW5uZWxdOworCXJldHVybiBmaC0+Y2hhbm5lbC0+cmVzb3VyY2VzOwogfQogCiBzdGF0aWMgaW50IHJlc19jaGVjayhzdHJ1Y3QgczIyNTVfZmggKmZoKQogewotCXJldHVybiBmaC0+cmVzb3VyY2VzW2ZoLT5jaGFubmVsXTsKKwlyZXR1cm4gZmgtPnJlc291cmNlczsKIH0KIAogCi1zdGF0aWMgdm9pZCByZXNfZnJlZShzdHJ1Y3QgczIyNTVfZGV2ICpkZXYsIHN0cnVjdCBzMjI1NV9maCAqZmgpCitzdGF0aWMgdm9pZCByZXNfZnJlZShzdHJ1Y3QgczIyNTVfZmggKmZoKQogeworCXN0cnVjdCBzMjI1NV9jaGFubmVsICpjaGFubmVsID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IHMyMjU1X2RldiAqZGV2ID0gZmgtPmRldjsKIAltdXRleF9sb2NrKCZkZXYtPmxvY2spOwotCWRldi0+cmVzb3VyY2VzW2ZoLT5jaGFubmVsXSA9IDA7Ci0JZmgtPnJlc291cmNlc1tmaC0+Y2hhbm5lbF0gPSAwOworCWNoYW5uZWwtPnJlc291cmNlcyA9IDA7CisJZmgtPnJlc291cmNlcyA9IDA7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCWRwcmludGsoMSwgInJlczogcHV0XG4iKTsKIH0KQEAgLTg2OSwxMiArODc1LDEzIEBACiAJCQkgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCXN0cnVjdCBzMjI1NV9maCAqZmggPSBwcml2OworCXN0cnVjdCBzMjI1NV9jaGFubmVsICpjaGFubmVsID0gZmgtPmNoYW5uZWw7CiAKLQlmLT5mbXQucGl4LndpZHRoID0gZmgtPndpZHRoOwotCWYtPmZtdC5waXguaGVpZ2h0ID0gZmgtPmhlaWdodDsKKwlmLT5mbXQucGl4LndpZHRoID0gY2hhbm5lbC0+d2lkdGg7CisJZi0+Zm10LnBpeC5oZWlnaHQgPSBjaGFubmVsLT5oZWlnaHQ7CiAJZi0+Zm10LnBpeC5maWVsZCA9IGZoLT52Yl92aWRxLmZpZWxkOwotCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSBmaC0+Zm10LT5mb3VyY2M7Ci0JZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSBmLT5mbXQucGl4LndpZHRoICogKGZoLT5mbXQtPmRlcHRoID4+IDMpOworCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSBjaGFubmVsLT5mbXQtPmZvdXJjYzsKKwlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IGYtPmZtdC5waXgud2lkdGggKiAoY2hhbm5lbC0+Zm10LT5kZXB0aCA+PiAzKTsKIAlmLT5mbXQucGl4LnNpemVpbWFnZSA9IGYtPmZtdC5waXguaGVpZ2h0ICogZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmU7CiAJcmV0dXJuIDA7CiB9CkBAIC04ODYsMTEgKzg5MywxMCBAQAogCWVudW0gdjRsMl9maWVsZCBmaWVsZDsKIAlpbnQgIGJfYW55X2ZpZWxkID0gMDsKIAlzdHJ1Y3QgczIyNTVfZmggKmZoID0gcHJpdjsKLQlzdHJ1Y3QgczIyNTVfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBzMjI1NV9jaGFubmVsICpjaGFubmVsID0gZmgtPmNoYW5uZWw7CiAJaW50IGlzX250c2M7Ci0KIAlpc19udHNjID0KLQkgICAgKGRldi0+dmRldltmaC0+Y2hhbm5lbF0uY3VycmVudF9ub3JtICYgVjRMMl9TVERfTlRTQykgPyAxIDogMDsKKwkJKGNoYW5uZWwtPnZkZXYuY3VycmVudF9ub3JtICYgVjRMMl9TVERfTlRTQykgPyAxIDogMDsKIAogCWZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7CiAKQEAgLTk4Miw4ICs5ODgsMTAgQEAKIAkJCSAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJc3RydWN0IHMyMjU1X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHMyMjU1X2NoYW5uZWwgKmNoYW5uZWwgPSBmaC0+Y2hhbm5lbDsKIAljb25zdCBzdHJ1Y3QgczIyNTVfZm10ICpmbXQ7CiAJc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxID0gJmZoLT52Yl92aWRxOworCXN0cnVjdCBzMjI1NV9tb2RlIG1vZGU7CiAJaW50IHJldDsKIAlpbnQgbm9ybTsKIApAQCAtMTAwNSw1NCArMTAxMyw2MSBAQAogCQlnb3RvIG91dF9zX2ZtdDsKIAl9CiAKLQlpZiAocmVzX2xvY2tlZChmaC0+ZGV2LCBmaCkpIHsKKwlpZiAocmVzX2xvY2tlZChmaCkpIHsKIAkJZHByaW50aygxLCAiJXM6IGNoYW5uZWwgYnVzeVxuIiwgX19mdW5jX18pOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X3NfZm10OwogCX0KLQotCWZoLT5mbXQgPSBmbXQ7Ci0JZmgtPndpZHRoID0gZi0+Zm10LnBpeC53aWR0aDsKLQlmaC0+aGVpZ2h0ID0gZi0+Zm10LnBpeC5oZWlnaHQ7CisJbW9kZSA9IGNoYW5uZWwtPm1vZGU7CisJY2hhbm5lbC0+Zm10ID0gZm10OworCWNoYW5uZWwtPndpZHRoID0gZi0+Zm10LnBpeC53aWR0aDsKKwljaGFubmVsLT5oZWlnaHQgPSBmLT5mbXQucGl4LmhlaWdodDsKIAlmaC0+dmJfdmlkcS5maWVsZCA9IGYtPmZtdC5waXguZmllbGQ7CiAJZmgtPnR5cGUgPSBmLT50eXBlOwotCW5vcm0gPSBub3JtX21pbncoJmZoLT5kZXYtPnZkZXZbZmgtPmNoYW5uZWxdKTsKLQlpZiAoZmgtPndpZHRoID4gbm9ybV9taW53KCZmaC0+ZGV2LT52ZGV2W2ZoLT5jaGFubmVsXSkpIHsKLQkJaWYgKGZoLT5oZWlnaHQgPiBub3JtX21pbmgoJmZoLT5kZXYtPnZkZXZbZmgtPmNoYW5uZWxdKSkgewotCQkJaWYgKGZoLT5kZXYtPmNhcF9wYXJtW2ZoLT5jaGFubmVsXS5jYXB0dXJlbW9kZSAmCisJbm9ybSA9IG5vcm1fbWludygmY2hhbm5lbC0+dmRldik7CisJaWYgKGNoYW5uZWwtPndpZHRoID4gbm9ybV9taW53KCZjaGFubmVsLT52ZGV2KSkgeworCQlpZiAoY2hhbm5lbC0+aGVpZ2h0ID4gbm9ybV9taW5oKCZjaGFubmVsLT52ZGV2KSkgeworCQkJaWYgKGNoYW5uZWwtPmNhcF9wYXJtLmNhcHR1cmVtb2RlICYKIAkJCSAgICBWNEwyX01PREVfSElHSFFVQUxJVFkpCi0JCQkJZmgtPm1vZGUuc2NhbGUgPSBTQ0FMRV80Q0lGU0k7CisJCQkJbW9kZS5zY2FsZSA9IFNDQUxFXzRDSUZTSTsKIAkJCWVsc2UKLQkJCQlmaC0+bW9kZS5zY2FsZSA9IFNDQUxFXzRDSUZTOworCQkJCW1vZGUuc2NhbGUgPSBTQ0FMRV80Q0lGUzsKIAkJfSBlbHNlCi0JCQlmaC0+bW9kZS5zY2FsZSA9IFNDQUxFXzJDSUZTOworCQkJbW9kZS5zY2FsZSA9IFNDQUxFXzJDSUZTOwogCiAJfSBlbHNlIHsKLQkJZmgtPm1vZGUuc2NhbGUgPSBTQ0FMRV8xQ0lGUzsKKwkJbW9kZS5zY2FsZSA9IFNDQUxFXzFDSUZTOwogCX0KLQogCS8qIGNvbG9yIG1vZGUgKi8KLQlzd2l0Y2ggKGZoLT5mbXQtPmZvdXJjYykgeworCXN3aXRjaCAoY2hhbm5lbC0+Zm10LT5mb3VyY2MpIHsKIAljYXNlIFY0TDJfUElYX0ZNVF9HUkVZOgotCQlmaC0+bW9kZS5jb2xvciAmPSB+TUFTS19DT0xPUjsKLQkJZmgtPm1vZGUuY29sb3IgfD0gQ09MT1JfWTg7CisJCW1vZGUuY29sb3IgJj0gfk1BU0tfQ09MT1I7CisJCW1vZGUuY29sb3IgfD0gQ09MT1JfWTg7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9QSVhfRk1UX0pQRUc6Ci0JCWZoLT5tb2RlLmNvbG9yICY9IH5NQVNLX0NPTE9SOwotCQlmaC0+bW9kZS5jb2xvciB8PSBDT0xPUl9KUEc7Ci0JCWZoLT5tb2RlLmNvbG9yIHw9IChmaC0+ZGV2LT5qY1tmaC0+Y2hhbm5lbF0ucXVhbGl0eSA8PCA4KTsKKwkJbW9kZS5jb2xvciAmPSB+TUFTS19DT0xPUjsKKwkJbW9kZS5jb2xvciB8PSBDT0xPUl9KUEc7CisJCW1vZGUuY29sb3IgfD0gKGNoYW5uZWwtPmpjLnF1YWxpdHkgPDwgOCk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMlA6Ci0JCWZoLT5tb2RlLmNvbG9yICY9IH5NQVNLX0NPTE9SOwotCQlmaC0+bW9kZS5jb2xvciB8PSBDT0xPUl9ZVVZQTDsKKwkJbW9kZS5jb2xvciAmPSB+TUFTS19DT0xPUjsKKwkJbW9kZS5jb2xvciB8PSBDT0xPUl9ZVVZQTDsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoKIAljYXNlIFY0TDJfUElYX0ZNVF9VWVZZOgogCWRlZmF1bHQ6Ci0JCWZoLT5tb2RlLmNvbG9yICY9IH5NQVNLX0NPTE9SOwotCQlmaC0+bW9kZS5jb2xvciB8PSBDT0xPUl9ZVVZQSzsKKwkJbW9kZS5jb2xvciAmPSB+TUFTS19DT0xPUjsKKwkJbW9kZS5jb2xvciB8PSBDT0xPUl9ZVVZQSzsKIAkJYnJlYWs7CiAJfQorCWlmICgobW9kZS5jb2xvciAmIE1BU0tfQ09MT1IpICE9IChjaGFubmVsLT5tb2RlLmNvbG9yICYgTUFTS19DT0xPUikpCisJCW1vZGUucmVzdGFydCA9IDE7CisJZWxzZSBpZiAobW9kZS5zY2FsZSAhPSBjaGFubmVsLT5tb2RlLnNjYWxlKQorCQltb2RlLnJlc3RhcnQgPSAxOworCWVsc2UgaWYgKG1vZGUuZm9ybWF0ICE9IGNoYW5uZWwtPm1vZGUuZm9ybWF0KQorCQltb2RlLnJlc3RhcnQgPSAxOworCWNoYW5uZWwtPm1vZGUgPSBtb2RlOworCSh2b2lkKSBzMjI1NV9zZXRfbW9kZShjaGFubmVsLCAmbW9kZSk7CiAJcmV0ID0gMDsKIG91dF9zX2ZtdDoKIAltdXRleF91bmxvY2soJnEtPnZiX2xvY2spOwpAQCAtMTE5NywyNiArMTIxMiwyNyBAQAogICogV2hlbiB0aGUgcmVzdGFydCBwYXJhbWV0ZXIgaXMgc2V0LCB3ZSBzbGVlcCBmb3IgT05FIGZyYW1lIHRvIGFsbG93IHRoZQogICogRFNQIHRpbWUgdG8gZ2V0IHRoZSBuZXcgZnJhbWUKICAqLwotc3RhdGljIGludCBzMjI1NV9zZXRfbW9kZShzdHJ1Y3QgczIyNTVfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgY2huLAorc3RhdGljIGludCBzMjI1NV9zZXRfbW9kZShzdHJ1Y3QgczIyNTVfY2hhbm5lbCAqY2hhbm5lbCwKIAkJCSAgc3RydWN0IHMyMjU1X21vZGUgKm1vZGUpCiB7CiAJaW50IHJlczsKIAlfX2xlMzIgKmJ1ZmZlcjsKIAl1bnNpZ25lZCBsb25nIGNobl9yZXY7CisJc3RydWN0IHMyMjU1X2RldiAqZGV2ID0gdG9fczIyNTVfZGV2KGNoYW5uZWwtPnZkZXYudjRsMl9kZXYpOwogCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0JY2huX3JldiA9IEdfY2hubWFwW2Nobl07Ci0JZHByaW50aygzLCAiJXMgY2hhbm5lbCAlbHVcbiIsIF9fZnVuY19fLCBjaG4pOworCWNobl9yZXYgPSBHX2Nobm1hcFtjaGFubmVsLT5pZHhdOworCWRwcmludGsoMywgIiVzIGNoYW5uZWw6ICVkXG4iLCBfX2Z1bmNfXywgY2hhbm5lbC0+aWR4KTsKIAkvKiBpZiBKUEVHLCBzZXQgdGhlIHF1YWxpdHkgKi8KIAlpZiAoKG1vZGUtPmNvbG9yICYgTUFTS19DT0xPUikgPT0gQ09MT1JfSlBHKSB7CiAJCW1vZGUtPmNvbG9yICY9IH5NQVNLX0NPTE9SOwogCQltb2RlLT5jb2xvciB8PSBDT0xPUl9KUEc7CiAJCW1vZGUtPmNvbG9yICY9IH5NQVNLX0pQR19RVUFMSVRZOwotCQltb2RlLT5jb2xvciB8PSAoZGV2LT5qY1tjaG5dLnF1YWxpdHkgPDwgOCk7CisJCW1vZGUtPmNvbG9yIHw9IChjaGFubmVsLT5qYy5xdWFsaXR5IDw8IDgpOwogCX0KIAkvKiBzYXZlIHRoZSBtb2RlICovCi0JZGV2LT5tb2RlW2Nobl0gPSAqbW9kZTsKLQlkZXYtPnJlcV9pbWFnZV9zaXplW2Nobl0gPSBnZXRfdHJhbnNmZXJfc2l6ZShtb2RlKTsKLQlkcHJpbnRrKDEsICIlczogcmVxc2l6ZSAlbGRcbiIsIF9fZnVuY19fLCBkZXYtPnJlcV9pbWFnZV9zaXplW2Nobl0pOworCWNoYW5uZWwtPm1vZGUgPSAqbW9kZTsKKwljaGFubmVsLT5yZXFfaW1hZ2Vfc2l6ZSA9IGdldF90cmFuc2Zlcl9zaXplKG1vZGUpOworCWRwcmludGsoMSwgIiVzOiByZXFzaXplICVsZFxuIiwgX19mdW5jX18sIGNoYW5uZWwtPnJlcV9pbWFnZV9zaXplKTsKIAlidWZmZXIgPSBremFsbG9jKDUxMiwgR0ZQX0tFUk5FTCk7CiAJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJmRldi0+dWRldi0+ZGV2LCAib3V0IG9mIG1lbVxuIik7CkBAIC0xMjI3LDM4ICsxMjQzLDM4IEBACiAJYnVmZmVyWzBdID0gSU5fREFUQV9UT0tFTjsKIAlidWZmZXJbMV0gPSAoX19sZTMyKSBjcHVfdG9fbGUzMihjaG5fcmV2KTsKIAlidWZmZXJbMl0gPSBDTURfU0VUX01PREU7Ci0JbWVtY3B5KCZidWZmZXJbM10sICZkZXYtPm1vZGVbY2huXSwgc2l6ZW9mKHN0cnVjdCBzMjI1NV9tb2RlKSk7Ci0JZGV2LT5zZXRtb2RlX3JlYWR5W2Nobl0gPSAwOworCW1lbWNweSgmYnVmZmVyWzNdLCAmY2hhbm5lbC0+bW9kZSwgc2l6ZW9mKHN0cnVjdCBzMjI1NV9tb2RlKSk7CisJY2hhbm5lbC0+c2V0bW9kZV9yZWFkeSA9IDA7CiAJcmVzID0gczIyNTVfd3JpdGVfY29uZmlnKGRldi0+dWRldiwgKHVuc2lnbmVkIGNoYXIgKilidWZmZXIsIDUxMik7CiAJaWYgKGRlYnVnKQogCQlzMjI1NV9wcmludF9jZmcoZGV2LCBtb2RlKTsKIAlrZnJlZShidWZmZXIpOwogCS8qIHdhaXQgYXQgbGVhc3QgMyBmcmFtZXMgYmVmb3JlIGNvbnRpbnVpbmcgKi8KIAlpZiAobW9kZS0+cmVzdGFydCkgewotCQl3YWl0X2V2ZW50X3RpbWVvdXQoZGV2LT53YWl0X3NldG1vZGVbY2huXSwKLQkJCQkgICAoZGV2LT5zZXRtb2RlX3JlYWR5W2Nobl0gIT0gMCksCisJCXdhaXRfZXZlbnRfdGltZW91dChjaGFubmVsLT53YWl0X3NldG1vZGUsCisJCQkJICAgKGNoYW5uZWwtPnNldG1vZGVfcmVhZHkgIT0gMCksCiAJCQkJICAgbXNlY3NfdG9famlmZmllcyhTMjI1NV9TRVRNT0RFX1RJTUVPVVQpKTsKLQkJaWYgKGRldi0+c2V0bW9kZV9yZWFkeVtjaG5dICE9IDEpIHsKKwkJaWYgKGNoYW5uZWwtPnNldG1vZGVfcmVhZHkgIT0gMSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgInMyMjU1OiBubyBzZXQgbW9kZSByZXNwb25zZVxuIik7CiAJCQlyZXMgPSAtRUZBVUxUOwogCQl9CiAJfQogCS8qIGNsZWFyIHRoZSByZXN0YXJ0IGZsYWcgKi8KLQlkZXYtPm1vZGVbY2huXS5yZXN0YXJ0ID0gMDsKKwljaGFubmVsLT5tb2RlLnJlc3RhcnQgPSAwOwogCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQlkcHJpbnRrKDEsICIlcyBjaG4gJWx1LCByZXN1bHQ6ICVkXG4iLCBfX2Z1bmNfXywgY2huLCByZXMpOworCWRwcmludGsoMSwgIiVzIGNobiAlZCwgcmVzdWx0OiAlZFxuIiwgX19mdW5jX18sIGNoYW5uZWwtPmlkeCwgcmVzKTsKIAlyZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgaW50IHMyMjU1X2NtZF9zdGF0dXMoc3RydWN0IHMyMjU1X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIGNobiwKLQkJCSAgICB1MzIgKnBzdGF0dXMpCitzdGF0aWMgaW50IHMyMjU1X2NtZF9zdGF0dXMoc3RydWN0IHMyMjU1X2NoYW5uZWwgKmNoYW5uZWwsIHUzMiAqcHN0YXR1cykKIHsKIAlpbnQgcmVzOwogCV9fbGUzMiAqYnVmZmVyOwogCXUzMiBjaG5fcmV2OworCXN0cnVjdCBzMjI1NV9kZXYgKmRldiA9IHRvX3MyMjU1X2RldihjaGFubmVsLT52ZGV2LnY0bDJfZGV2KTsKIAltdXRleF9sb2NrKCZkZXYtPmxvY2spOwotCWNobl9yZXYgPSBHX2Nobm1hcFtjaG5dOwotCWRwcmludGsoNCwgIiVzIGNoYW4gJWx1XG4iLCBfX2Z1bmNfXywgY2huKTsKKwljaG5fcmV2ID0gR19jaG5tYXBbY2hhbm5lbC0+aWR4XTsKKwlkcHJpbnRrKDQsICIlcyBjaGFuICVkXG4iLCBfX2Z1bmNfXywgY2hhbm5lbC0+aWR4KTsKIAlidWZmZXIgPSBremFsbG9jKDUxMiwgR0ZQX0tFUk5FTCk7CiAJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJmRldi0+dWRldi0+ZGV2LCAib3V0IG9mIG1lbVxuIik7CkBAIC0xMjcwLDE3ICsxMjg2LDE3IEBACiAJYnVmZmVyWzFdID0gKF9fbGUzMikgY3B1X3RvX2xlMzIoY2huX3Jldik7CiAJYnVmZmVyWzJdID0gQ01EX1NUQVRVUzsKIAkqcHN0YXR1cyA9IDA7Ci0JZGV2LT52aWRzdGF0dXNfcmVhZHlbY2huXSA9IDA7CisJY2hhbm5lbC0+dmlkc3RhdHVzX3JlYWR5ID0gMDsKIAlyZXMgPSBzMjI1NV93cml0ZV9jb25maWcoZGV2LT51ZGV2LCAodW5zaWduZWQgY2hhciAqKWJ1ZmZlciwgNTEyKTsKIAlrZnJlZShidWZmZXIpOwotCXdhaXRfZXZlbnRfdGltZW91dChkZXYtPndhaXRfdmlkc3RhdHVzW2Nobl0sCi0JCQkgICAoZGV2LT52aWRzdGF0dXNfcmVhZHlbY2huXSAhPSAwKSwKKwl3YWl0X2V2ZW50X3RpbWVvdXQoY2hhbm5lbC0+d2FpdF92aWRzdGF0dXMsCisJCQkgICAoY2hhbm5lbC0+dmlkc3RhdHVzX3JlYWR5ICE9IDApLAogCQkJICAgbXNlY3NfdG9famlmZmllcyhTMjI1NV9WSURTVEFUVVNfVElNRU9VVCkpOwotCWlmIChkZXYtPnZpZHN0YXR1c19yZWFkeVtjaG5dICE9IDEpIHsKKwlpZiAoY2hhbm5lbC0+dmlkc3RhdHVzX3JlYWR5ICE9IDEpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInMyMjU1OiBubyB2aWRzdGF0dXMgcmVzcG9uc2VcbiIpOwogCQlyZXMgPSAtRUZBVUxUOwogCX0KLQkqcHN0YXR1cyA9IGRldi0+dmlkc3RhdHVzW2Nobl07CisJKnBzdGF0dXMgPSBjaGFubmVsLT52aWRzdGF0dXM7CiAJZHByaW50ayg0LCAiJXMsIHZpZCBzdGF0dXMgJWRcbiIsIF9fZnVuY19fLCAqcHN0YXR1cyk7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCXJldHVybiByZXM7CkBAIC0xMjkxLDkgKzEzMDcsNyBAQAogCWludCByZXM7CiAJc3RydWN0IHMyMjU1X2ZoICpmaCA9IHByaXY7CiAJc3RydWN0IHMyMjU1X2RldiAqZGV2ID0gZmgtPmRldjsKLQlzdHJ1Y3QgczIyNTVfbW9kZSAqbmV3X21vZGU7Ci0Jc3RydWN0IHMyMjU1X21vZGUgKm9sZF9tb2RlOwotCWludCBjaG47CisJc3RydWN0IHMyMjU1X2NoYW5uZWwgKmNoYW5uZWwgPSBmaC0+Y2hhbm5lbDsKIAlpbnQgajsKIAlkcHJpbnRrKDQsICIlc1xuIiwgX19mdW5jX18pOwogCWlmIChmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKQEAgLTEzMDUsNTEgKzEzMTksMzIgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKCFyZXNfZ2V0KGRldiwgZmgpKSB7CisJaWYgKCFyZXNfZ2V0KGZoKSkgewogCQlzMjI1NV9kZXZfZXJyKCZkZXYtPnVkZXYtPmRldiwgInN0cmVhbSBidXN5XG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0KLQkvKiBzZW5kIGEgc2V0IG1vZGUgY29tbWFuZCBldmVyeXRpbWUgd2l0aCByZXN0YXJ0LgotCSAgIGluIGNhc2Ugd2Ugc3dpdGNoIHJlc29sdXRpb25zIG9yIG90aGVyIHBhcmFtZXRlcnMgKi8KLQljaG4gPSBmaC0+Y2hhbm5lbDsKLQluZXdfbW9kZSA9ICZmaC0+bW9kZTsKLQlvbGRfbW9kZSA9ICZmaC0+ZGV2LT5tb2RlW2Nobl07Ci0KLQlpZiAoKG5ld19tb2RlLT5jb2xvciAmIE1BU0tfQ09MT1IpICE9IChvbGRfbW9kZS0+Y29sb3IgJiBNQVNLX0NPTE9SKSkKLQkJbmV3X21vZGUtPnJlc3RhcnQgPSAxOwotCWVsc2UgaWYgKG5ld19tb2RlLT5zY2FsZSAhPSBvbGRfbW9kZS0+c2NhbGUpCi0JCW5ld19tb2RlLT5yZXN0YXJ0ID0gMTsKLQllbHNlIGlmIChuZXdfbW9kZS0+Zm9ybWF0ICE9IG9sZF9tb2RlLT5mb3JtYXQpCi0JCW5ld19tb2RlLT5yZXN0YXJ0ID0gMTsKLQotCXMyMjU1X3NldF9tb2RlKGRldiwgY2huLCBuZXdfbW9kZSk7Ci0JbmV3X21vZGUtPnJlc3RhcnQgPSAwOwotCSpvbGRfbW9kZSA9ICpuZXdfbW9kZTsKLQlkZXYtPmN1cl9mbXRbY2huXSA9IGZoLT5mbXQ7Ci0JZGV2LT5sYXN0X2ZyYW1lW2Nobl0gPSAtMTsKLQlkZXYtPmJhZF9wYXlsb2FkW2Nobl0gPSAwOwotCWRldi0+Y3VyX2ZyYW1lW2Nobl0gPSAwOwotCWRldi0+ZnJhbWVfY291bnRbY2huXSA9IDA7CisJY2hhbm5lbC0+bGFzdF9mcmFtZSA9IC0xOworCWNoYW5uZWwtPmJhZF9wYXlsb2FkID0gMDsKKwljaGFubmVsLT5jdXJfZnJhbWUgPSAwOworCWNoYW5uZWwtPmZyYW1lX2NvdW50ID0gMDsKIAlmb3IgKGogPSAwOyBqIDwgU1lTX0ZSQU1FUzsgaisrKSB7Ci0JCWRldi0+YnVmZmVyW2Nobl0uZnJhbWVbal0udWxTdGF0ZSA9IFMyMjU1X1JFQURfSURMRTsKLQkJZGV2LT5idWZmZXJbY2huXS5mcmFtZVtqXS5jdXJfc2l6ZSA9IDA7CisJCWNoYW5uZWwtPmJ1ZmZlci5mcmFtZVtqXS51bFN0YXRlID0gUzIyNTVfUkVBRF9JRExFOworCQljaGFubmVsLT5idWZmZXIuZnJhbWVbal0uY3VyX3NpemUgPSAwOwogCX0KIAlyZXMgPSB2aWRlb2J1Zl9zdHJlYW1vbigmZmgtPnZiX3ZpZHEpOwogCWlmIChyZXMgPT0gMCkgewotCQlzMjI1NV9zdGFydF9hY3F1aXJlKGRldiwgY2huKTsKLQkJZGV2LT5iX2FjcXVpcmVbY2huXSA9IDE7Ci0JfSBlbHNlIHsKLQkJcmVzX2ZyZWUoZGV2LCBmaCk7Ci0JfQorCQlzMjI1NV9zdGFydF9hY3F1aXJlKGNoYW5uZWwpOworCQljaGFubmVsLT5iX2FjcXVpcmUgPSAxOworCX0gZWxzZQorCQlyZXNfZnJlZShmaCk7CisKIAlyZXR1cm4gcmVzOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQogewogCXN0cnVjdCBzMjI1NV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBzMjI1NV9kZXYgKmRldiA9IGZoLT5kZXY7Ci0JZHByaW50ayg0LCAiJXNcbiwgY2hhbm5lbDogJWQiLCBfX2Z1bmNfXywgZmgtPmNoYW5uZWwpOworCWRwcmludGsoNCwgIiVzXG4sIGNoYW5uZWw6ICVkIiwgX19mdW5jX18sIGZoLT5jaGFubmVsLT5pZHgpOwogCWlmIChmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJpbnZhbGlkIGZoIHR5cGUwXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzU4LDE2ICsxMzUzLDE2IEBACiAJCXByaW50ayhLRVJOX0VSUiAiaW52YWxpZCB0eXBlIGlcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JczIyNTVfc3RvcF9hY3F1aXJlKGRldiwgZmgtPmNoYW5uZWwpOworCXMyMjU1X3N0b3BfYWNxdWlyZShmaC0+Y2hhbm5lbCk7CiAJdmlkZW9idWZfc3RyZWFtb2ZmKCZmaC0+dmJfdmlkcSk7Ci0JcmVzX2ZyZWUoZGV2LCBmaCk7CisJcmVzX2ZyZWUoZmgpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKmkpCiB7CiAJc3RydWN0IHMyMjU1X2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IHMyMjU1X21vZGUgKm1vZGU7CisJc3RydWN0IHMyMjU1X21vZGUgbW9kZTsKIAlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEgPSAmZmgtPnZiX3ZpZHE7CiAJaW50IHJldCA9IDA7CiAJbXV0ZXhfbG9jaygmcS0+dmJfbG9jayk7CkBAIC0xMzc2LDI5ICsxMzcxLDMyIEBACiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBvdXRfc19zdGQ7CiAJfQotCWlmIChyZXNfbG9ja2VkKGZoLT5kZXYsIGZoKSkgeworCWlmIChyZXNfbG9ja2VkKGZoKSkgewogCQlkcHJpbnRrKDEsICJjYW4ndCBjaGFuZ2Ugc3RhbmRhcmQgYWZ0ZXIgc3RhcnRlZFxuIik7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBvdXRfc19zdGQ7CiAJfQotCW1vZGUgPSAmZmgtPm1vZGU7CisJbW9kZSA9IGZoLT5jaGFubmVsLT5tb2RlOwogCWlmICgqaSAmIFY0TDJfU1REX05UU0MpIHsKIAkJZHByaW50ayg0LCAiJXMgTlRTQ1xuIiwgX19mdW5jX18pOwogCQkvKiBpZiBjaGFuZ2luZyBmb3JtYXQsIHJlc2V0IGZyYW1lIGRlY2ltYXRpb24vaW50ZXJ2YWxzICovCi0JCWlmIChtb2RlLT5mb3JtYXQgIT0gRk9STUFUX05UU0MpIHsKLQkJCW1vZGUtPmZvcm1hdCA9IEZPUk1BVF9OVFNDOwotCQkJbW9kZS0+ZmRlYyA9IEZERUNfMTsKKwkJaWYgKG1vZGUuZm9ybWF0ICE9IEZPUk1BVF9OVFNDKSB7CisJCQltb2RlLnJlc3RhcnQgPSAxOworCQkJbW9kZS5mb3JtYXQgPSBGT1JNQVRfTlRTQzsKKwkJCW1vZGUuZmRlYyA9IEZERUNfMTsKIAkJfQogCX0gZWxzZSBpZiAoKmkgJiBWNEwyX1NURF9QQUwpIHsKIAkJZHByaW50ayg0LCAiJXMgUEFMXG4iLCBfX2Z1bmNfXyk7Ci0JCW1vZGUtPmZvcm1hdCA9IEZPUk1BVF9QQUw7Ci0JCWlmIChtb2RlLT5mb3JtYXQgIT0gRk9STUFUX1BBTCkgewotCQkJbW9kZS0+Zm9ybWF0ID0gRk9STUFUX1BBTDsKLQkJCW1vZGUtPmZkZWMgPSBGREVDXzE7CisJCWlmIChtb2RlLmZvcm1hdCAhPSBGT1JNQVRfUEFMKSB7CisJCQltb2RlLnJlc3RhcnQgPSAxOworCQkJbW9kZS5mb3JtYXQgPSBGT1JNQVRfUEFMOworCQkJbW9kZS5mZGVjID0gRkRFQ18xOwogCQl9CiAJfSBlbHNlIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAl9CisJaWYgKG1vZGUucmVzdGFydCkKKwkJczIyNTVfc2V0X21vZGUoZmgtPmNoYW5uZWwsICZtb2RlKTsKIG91dF9zX3N0ZDoKIAltdXRleF91bmxvY2soJnEtPnZiX2xvY2spOwogCXJldHVybiByZXQ7CkBAIC0xNDE2LDYgKzE0MTQsNyBAQAogewogCXN0cnVjdCBzMjI1NV9maCAqZmggPSBwcml2OwogCXN0cnVjdCBzMjI1NV9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IHMyMjU1X2NoYW5uZWwgKmNoYW5uZWwgPSBmaC0+Y2hhbm5lbDsKIAl1MzIgc3RhdHVzID0gMDsKIAlpZiAoaW5wLT5pbmRleCAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE0MjQsNyArMTQyMyw3IEBACiAJaW5wLT5zdGF0dXMgPSAwOwogCWlmIChkZXYtPmRzcF9md192ZXIgPj0gUzIyNTVfTUlOX0RTUF9TVEFUVVMpIHsKIAkJaW50IHJjOwotCQlyYyA9IHMyMjU1X2NtZF9zdGF0dXMoZGV2LCBmaC0+Y2hhbm5lbCwgJnN0YXR1cyk7CisJCXJjID0gczIyNTVfY21kX3N0YXR1cyhmaC0+Y2hhbm5lbCwgJnN0YXR1cyk7CiAJCWRwcmludGsoNCwgInMyMjU1X2NtZF9zdGF0dXMgcmM6ICVkIHN0YXR1cyAleFxuIiwgcmMsIHN0YXR1cyk7CiAJCWlmIChyYyA9PSAwKQogCQkJaW5wLT5zdGF0dXMgPSAgKHN0YXR1cyAmIDB4MDEpID8gMApAQCAtMTQzNiw3ICsxNDM1LDcgQEAKIAkJc3RybGNweShpbnAtPm5hbWUsICJDb21wb3NpdGUiLCBzaXplb2YoaW5wLT5uYW1lKSk7CiAJCWJyZWFrOwogCWNhc2UgMHgyMjU3OgotCQlzdHJsY3B5KGlucC0+bmFtZSwgKGZoLT5jaGFubmVsIDwgMikgPyAiQ29tcG9zaXRlIiA6ICJTLVZpZGVvIiwKKwkJc3RybGNweShpbnAtPm5hbWUsIChjaGFubmVsLT5pZHggPCAyKSA/ICJDb21wb3NpdGUiIDogIlMtVmlkZW8iLAogCQkJc2l6ZW9mKGlucC0+bmFtZSkpOwogCQlicmVhazsKIAl9CkBAIC0xNDYwLDYgKzE0NTksNyBAQAogCQkJICAgIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7CiAJc3RydWN0IHMyMjU1X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHMyMjU1X2NoYW5uZWwgKmNoYW5uZWwgPSBmaC0+Y2hhbm5lbDsKIAlzdHJ1Y3QgczIyNTVfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCXN3aXRjaCAocWMtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgpAQCAtMTQ3Nyw3ICsxNDc3LDcgQEAKIAljYXNlIFY0TDJfQ0lEX1BSSVZBVEVfQ09MT1JGSUxURVI6CiAJCWlmIChkZXYtPmRzcF9md192ZXIgPCBTMjI1NV9NSU5fRFNQX0NPTE9SRklMVEVSKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmICgoZGV2LT5waWQgPT0gMHgyMjU3KSAmJiAoZmgtPmNoYW5uZWwgPiAxKSkKKwkJaWYgKChkZXYtPnBpZCA9PSAweDIyNTcpICYmIChjaGFubmVsLT5pZHggPiAxKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlzdHJsY3B5KHFjLT5uYW1lLCAiQ29sb3IgRmlsdGVyIiwgc2l6ZW9mKHFjLT5uYW1lKSk7CiAJCXFjLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfTUVOVTsKQEAgLTE0OTksMjUgKzE0OTksMjYgQEAKIHsKIAlzdHJ1Y3QgczIyNTVfZmggKmZoID0gcHJpdjsKIAlzdHJ1Y3QgczIyNTVfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBzMjI1NV9jaGFubmVsICpjaGFubmVsID0gZmgtPmNoYW5uZWw7CiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQkJY3RybC0+dmFsdWUgPSBmaC0+bW9kZS5icmlnaHQ7CisJCWN0cmwtPnZhbHVlID0gY2hhbm5lbC0+bW9kZS5icmlnaHQ7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6Ci0JCWN0cmwtPnZhbHVlID0gZmgtPm1vZGUuY29udHJhc3Q7CisJCWN0cmwtPnZhbHVlID0gY2hhbm5lbC0+bW9kZS5jb250cmFzdDsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgotCQljdHJsLT52YWx1ZSA9IGZoLT5tb2RlLnNhdHVyYXRpb247CisJCWN0cmwtPnZhbHVlID0gY2hhbm5lbC0+bW9kZS5zYXR1cmF0aW9uOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0hVRToKLQkJY3RybC0+dmFsdWUgPSBmaC0+bW9kZS5odWU7CisJCWN0cmwtPnZhbHVlID0gY2hhbm5lbC0+bW9kZS5odWU7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfUFJJVkFURV9DT0xPUkZJTFRFUjoKIAkJaWYgKGRldi0+ZHNwX2Z3X3ZlciA8IFMyMjU1X01JTl9EU1BfQ09MT1JGSUxURVIpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKChkZXYtPnBpZCA9PSAweDIyNTcpICYmIChmaC0+Y2hhbm5lbCA+IDEpKQorCQlpZiAoKGRldi0+cGlkID09IDB4MjI1NykgJiYgKGNoYW5uZWwtPmlkeCA+IDEpKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWN0cmwtPnZhbHVlID0gISgoZmgtPm1vZGUuY29sb3IgJiBNQVNLX0lOUFVUX1RZUEUpID4+IDE2KTsKKwkJY3RybC0+dmFsdWUgPSAhKChjaGFubmVsLT5tb2RlLmNvbG9yICYgTUFTS19JTlBVVF9UWVBFKSA+PiAxNik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTUzMCw0MSArMTUzMSw0MiBAQAogCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7CiAJc3RydWN0IHMyMjU1X2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IHMyMjU1X2RldiAqZGV2ID0gZmgtPmRldjsKLQlzdHJ1Y3QgczIyNTVfbW9kZSAqbW9kZTsKLQltb2RlID0gJmZoLT5tb2RlOworCXN0cnVjdCBzMjI1NV9jaGFubmVsICpjaGFubmVsID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IHMyMjU1X2RldiAqZGV2ID0gdG9fczIyNTVfZGV2KGNoYW5uZWwtPnZkZXYudjRsMl9kZXYpOworCXN0cnVjdCBzMjI1NV9tb2RlIG1vZGU7CisJbW9kZSA9IGNoYW5uZWwtPm1vZGU7CiAJZHByaW50ayg0LCAiJXNcbiIsIF9fZnVuY19fKTsKIAkvKiB1cGRhdGUgdGhlIG1vZGUgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgKi8KIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCQltb2RlLT5icmlnaHQgPSBjdHJsLT52YWx1ZTsKKwkJbW9kZS5icmlnaHQgPSBjdHJsLT52YWx1ZTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJbW9kZS0+Y29udHJhc3QgPSBjdHJsLT52YWx1ZTsKKwkJbW9kZS5jb250cmFzdCA9IGN0cmwtPnZhbHVlOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0hVRToKLQkJbW9kZS0+aHVlID0gY3RybC0+dmFsdWU7CisJCW1vZGUuaHVlID0gY3RybC0+dmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKLQkJbW9kZS0+c2F0dXJhdGlvbiA9IGN0cmwtPnZhbHVlOworCQltb2RlLnNhdHVyYXRpb24gPSBjdHJsLT52YWx1ZTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9QUklWQVRFX0NPTE9SRklMVEVSOgogCQlpZiAoZGV2LT5kc3BfZndfdmVyIDwgUzIyNTVfTUlOX0RTUF9DT0xPUkZJTFRFUikKIAkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAoKGRldi0+cGlkID09IDB4MjI1NykgJiYgKGZoLT5jaGFubmVsID4gMSkpCisJCWlmICgoZGV2LT5waWQgPT0gMHgyMjU3KSAmJiAoY2hhbm5lbC0+aWR4ID4gMSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJbW9kZS0+Y29sb3IgJj0gfk1BU0tfSU5QVVRfVFlQRTsKLQkJbW9kZS0+Y29sb3IgfD0gKChjdHJsLT52YWx1ZSA/IDAgOiAxKSA8PCAxNik7CisJCW1vZGUuY29sb3IgJj0gfk1BU0tfSU5QVVRfVFlQRTsKKwkJbW9kZS5jb2xvciB8PSAoKGN0cmwtPnZhbHVlID8gMCA6IDEpIDw8IDE2KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCW1vZGUtPnJlc3RhcnQgPSAwOworCW1vZGUucmVzdGFydCA9IDA7CiAJLyogc2V0IG1vZGUgaGVyZS4gIE5vdGU6IHN0cmVhbSBkb2VzIG5vdCBuZWVkIHJlc3RhcnRlZC4KIAkgICBzb21lIFY0TCBwcm9ncmFtcyByZXN0YXJ0IHN0cmVhbSB1bm5lY2Vzc2FyaWx5CiAJICAgYWZ0ZXIgYSBzX2NydGwuCiAJKi8KLQlzMjI1NV9zZXRfbW9kZShkZXYsIGZoLT5jaGFubmVsLCBtb2RlKTsKKwlzMjI1NV9zZXRfbW9kZShmaC0+Y2hhbm5lbCwgJm1vZGUpOwogCXJldHVybiAwOwogfQogCkBAIC0xNTcyLDggKzE1NzQsOCBAQAogCQkJIHN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqamMpCiB7CiAJc3RydWN0IHMyMjU1X2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IHMyMjU1X2RldiAqZGV2ID0gZmgtPmRldjsKLQkqamMgPSBkZXYtPmpjW2ZoLT5jaGFubmVsXTsKKwlzdHJ1Y3QgczIyNTVfY2hhbm5lbCAqY2hhbm5lbCA9IGZoLT5jaGFubmVsOworCSpqYyA9IGNoYW5uZWwtPmpjOwogCWRwcmludGsoMiwgIiVzOiBxdWFsaXR5ICVkXG4iLCBfX2Z1bmNfXywgamMtPnF1YWxpdHkpOwogCXJldHVybiAwOwogfQpAQCAtMTU4MiwxMCArMTU4NCwxMCBAQAogCQkJIHN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqamMpCiB7CiAJc3RydWN0IHMyMjU1X2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IHMyMjU1X2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3QgczIyNTVfY2hhbm5lbCAqY2hhbm5lbCA9IGZoLT5jaGFubmVsOwogCWlmIChqYy0+cXVhbGl0eSA8IDAgfHwgamMtPnF1YWxpdHkgPiAxMDApCiAJCXJldHVybiAtRUlOVkFMOwotCWRldi0+amNbZmgtPmNoYW5uZWxdLnF1YWxpdHkgPSBqYy0+cXVhbGl0eTsKKwljaGFubmVsLT5qYy5xdWFsaXR5ID0gamMtPnF1YWxpdHk7CiAJZHByaW50aygyLCAiJXM6IHF1YWxpdHkgJWRcbiIsIF9fZnVuY19fLCBqYy0+cXVhbGl0eSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNTk0LDE3ICsxNTk2LDE3IEBACiAJCQkgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqc3ApCiB7CiAJc3RydWN0IHMyMjU1X2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IHMyMjU1X2RldiAqZGV2ID0gZmgtPmRldjsKIAlfX3UzMiBkZWZfbnVtLCBkZWZfZGVtOworCXN0cnVjdCBzMjI1NV9jaGFubmVsICpjaGFubmVsID0gZmgtPmNoYW5uZWw7CiAJaWYgKHNwLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJbWVtc2V0KHNwLCAwLCBzaXplb2Yoc3RydWN0IHY0bDJfc3RyZWFtcGFybSkpOwogCXNwLT5wYXJtLmNhcHR1cmUuY2FwYWJpbGl0eSA9IFY0TDJfQ0FQX1RJTUVQRVJGUkFNRTsKLQlzcC0+cGFybS5jYXB0dXJlLmNhcHR1cmVtb2RlID0gZGV2LT5jYXBfcGFybVtmaC0+Y2hhbm5lbF0uY2FwdHVyZW1vZGU7Ci0JZGVmX251bSA9IChmaC0+bW9kZS5mb3JtYXQgPT0gRk9STUFUX05UU0MpID8gMTAwMSA6IDEwMDA7Ci0JZGVmX2RlbSA9IChmaC0+bW9kZS5mb3JtYXQgPT0gRk9STUFUX05UU0MpID8gMzAwMDAgOiAyNTAwMDsKKwlzcC0+cGFybS5jYXB0dXJlLmNhcHR1cmVtb2RlID0gY2hhbm5lbC0+Y2FwX3Bhcm0uY2FwdHVyZW1vZGU7CisJZGVmX251bSA9IChjaGFubmVsLT5tb2RlLmZvcm1hdCA9PSBGT1JNQVRfTlRTQykgPyAxMDAxIDogMTAwMDsKKwlkZWZfZGVtID0gKGNoYW5uZWwtPm1vZGUuZm9ybWF0ID09IEZPUk1BVF9OVFNDKSA/IDMwMDAwIDogMjUwMDA7CiAJc3AtPnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUuZGVub21pbmF0b3IgPSBkZWZfZGVtOwotCXN3aXRjaCAoZmgtPm1vZGUuZmRlYykgeworCXN3aXRjaCAoY2hhbm5lbC0+bW9kZS5mZGVjKSB7CiAJZGVmYXVsdDoKIAljYXNlIEZERUNfMToKIAkJc3AtPnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUubnVtZXJhdG9yID0gZGVmX251bTsKQEAgLTE2MzAsMTcgKzE2MzIsMTkgQEAKIAkJCSBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpzcCkKIHsKIAlzdHJ1Y3QgczIyNTVfZmggKmZoID0gcHJpdjsKLQlzdHJ1Y3QgczIyNTVfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBzMjI1NV9jaGFubmVsICpjaGFubmVsID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IHMyMjU1X21vZGUgbW9kZTsKIAlpbnQgZmRlYyA9IEZERUNfMTsKIAlfX3UzMiBkZWZfbnVtLCBkZWZfZGVtOwogCWlmIChzcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCiAJCXJldHVybiAtRUlOVkFMOworCW1vZGUgPSBjaGFubmVsLT5tb2RlOwogCS8qIGhpZ2ggcXVhbGl0eSBjYXB0dXJlIG1vZGUgcmVxdWlyZXMgYSBzdHJlYW0gcmVzdGFydCAqLwotCWlmIChkZXYtPmNhcF9wYXJtW2ZoLT5jaGFubmVsXS5jYXB0dXJlbW9kZQotCSAgICAhPSBzcC0+cGFybS5jYXB0dXJlLmNhcHR1cmVtb2RlICYmIHJlc19sb2NrZWQoZmgtPmRldiwgZmgpKQorCWlmIChjaGFubmVsLT5jYXBfcGFybS5jYXB0dXJlbW9kZQorCSAgICAhPSBzcC0+cGFybS5jYXB0dXJlLmNhcHR1cmVtb2RlICYmIHJlc19sb2NrZWQoZmgpKQogCQlyZXR1cm4gLUVCVVNZOwotCWRlZl9udW0gPSAoZmgtPm1vZGUuZm9ybWF0ID09IEZPUk1BVF9OVFNDKSA/IDEwMDEgOiAxMDAwOwotCWRlZl9kZW0gPSAoZmgtPm1vZGUuZm9ybWF0ID09IEZPUk1BVF9OVFNDKSA/IDMwMDAwIDogMjUwMDA7CisJZGVmX251bSA9IChtb2RlLmZvcm1hdCA9PSBGT1JNQVRfTlRTQykgPyAxMDAxIDogMTAwMDsKKwlkZWZfZGVtID0gKG1vZGUuZm9ybWF0ID09IEZPUk1BVF9OVFNDKSA/IDMwMDAwIDogMjUwMDA7CiAJaWYgKGRlZl9kZW0gIT0gc3AtPnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUuZGVub21pbmF0b3IpCiAJCXNwLT5wYXJtLmNhcHR1cmUudGltZXBlcmZyYW1lLm51bWVyYXRvciA9IGRlZl9udW07CiAJZWxzZSBpZiAoc3AtPnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUubnVtZXJhdG9yIDw9IGRlZl9udW0pCkBAIC0xNjU1LDkgKzE2NTksOSBAQAogCQlzcC0+cGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZS5udW1lcmF0b3IgPSBkZWZfbnVtICogNTsKIAkJZmRlYyA9IEZERUNfNTsKIAl9Ci0JZmgtPm1vZGUuZmRlYyA9IGZkZWM7CisJbW9kZS5mZGVjID0gZmRlYzsKIAlzcC0+cGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZS5kZW5vbWluYXRvciA9IGRlZl9kZW07Ci0JczIyNTVfc2V0X21vZGUoZGV2LCBmaC0+Y2hhbm5lbCwgJmZoLT5tb2RlKTsKKwlzMjI1NV9zZXRfbW9kZShjaGFubmVsLCAmbW9kZSk7CiAJZHByaW50ayg0LCAiJXMgY2FwdHVyZSBtb2RlLCAlZCB0aW1lcGVyZnJhbWUgJWQvJWQsIGZkZWMgJWRcbiIsCiAJCV9fZnVuY19fLAogCQlzcC0+cGFybS5jYXB0dXJlLmNhcHR1cmVtb2RlLApAQCAtMTcwNywyNCArMTcxMSwxMyBAQAogc3RhdGljIGludCBzMjI1NV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBzMjI1NV9kZXYgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHMyMjU1X2NoYW5uZWwgKmNoYW5uZWwgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBzMjI1NV9kZXYgKmRldiA9IHRvX3MyMjU1X2Rldih2ZGV2LT52NGwyX2Rldik7CiAJc3RydWN0IHMyMjU1X2ZoICpmaDsKIAllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQlpbnQgaSA9IDA7Ci0JaW50IGN1cl9jaGFubmVsID0gLTE7CiAJaW50IHN0YXRlOwogCWRwcmludGsoMSwgInMyMjU1OiBvcGVuIGNhbGxlZCAoZGV2PSVzKVxuIiwKIAkJdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZGV2KSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0NIQU5ORUxTOyBpKyspIHsKLQkJaWYgKCZkZXYtPnZkZXZbaV0gPT0gdmRldikgewotCQkJY3VyX2NoYW5uZWwgPSBpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKGkgPT0gTUFYX0NIQU5ORUxTKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCS8qCiAJICogb3BlbiBsb2NrIG5lY2Vzc2FyeSB0byBwcmV2ZW50IG11bHRpcGxlIGluc3RhbmNlcwogCSAqIG9mIHY0bC1jb25mIChvciBvdGhlciBwcm9ncmFtcykgZnJvbSBzaW11bHRhbmVvdXNseQpAQCAtMTgwNiwyNCArMTc5OSwyMCBAQAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOwogCWZoLT5kZXYgPSBkZXY7CiAJZmgtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JZmgtPm1vZGUgPSBkZXYtPm1vZGVbY3VyX2NoYW5uZWxdOwotCWZoLT5mbXQgPSBkZXYtPmN1cl9mbXRbY3VyX2NoYW5uZWxdOwotCS8qIGRlZmF1bHQgNENJRiBOVFNDICovCi0JZmgtPndpZHRoID0gTElORV9TWl80Q0lGU19OVFNDOwotCWZoLT5oZWlnaHQgPSBOVU1fTElORVNfNENJRlNfTlRTQyAqIDI7Ci0JZmgtPmNoYW5uZWwgPSBjdXJfY2hhbm5lbDsKLQkvKiBjb25maWd1cmUgY2hhbm5lbCB0byBkZWZhdWx0IHN0YXRlICovCi0JaWYgKCFkZXYtPmNobl9jb25maWd1cmVkW2N1cl9jaGFubmVsXSkgewotCQlzMjI1NV9zZXRfbW9kZShkZXYsIGN1cl9jaGFubmVsLCAmZmgtPm1vZGUpOwotCQlkZXYtPmNobl9jb25maWd1cmVkW2N1cl9jaGFubmVsXSA9IDE7CisJZmgtPmNoYW5uZWwgPSBjaGFubmVsOworCWlmICghY2hhbm5lbC0+Y29uZmlndXJlZCkgeworCQkvKiBjb25maWd1cmUgY2hhbm5lbCB0byBkZWZhdWx0IHN0YXRlICovCisJCWNoYW5uZWwtPmZtdCA9ICZmb3JtYXRzWzBdOworCQlzMjI1NV9zZXRfbW9kZShjaGFubmVsLCAmY2hhbm5lbC0+bW9kZSk7CisJCWNoYW5uZWwtPmNvbmZpZ3VyZWQgPSAxOwogCX0KIAlkcHJpbnRrKDEsICIlczogZGV2PSVzIHR5cGU9JXNcbiIsIF9fZnVuY19fLAogCQl2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKHZkZXYpLCB2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOwogCWRwcmludGsoMiwgIiVzOiBmaD0weCUwOGx4LCBkZXY9MHglMDhseCwgdmlkcT0weCUwOGx4XG4iLCBfX2Z1bmNfXywKIAkJKHVuc2lnbmVkIGxvbmcpZmgsICh1bnNpZ25lZCBsb25nKWRldiwKLQkJKHVuc2lnbmVkIGxvbmcpJmRldi0+dmlkcVtjdXJfY2hhbm5lbF0pOworCQkodW5zaWduZWQgbG9uZykmY2hhbm5lbC0+dmlkcSk7CiAJZHByaW50ayg0LCAiJXM6IGxpc3RfZW1wdHkgYWN0aXZlPSVkXG4iLCBfX2Z1bmNfXywKLQkJbGlzdF9lbXB0eSgmZGV2LT52aWRxW2N1cl9jaGFubmVsXS5hY3RpdmUpKTsKKwkJbGlzdF9lbXB0eSgmY2hhbm5lbC0+dmlkcS5hY3RpdmUpKTsKIAl2aWRlb2J1Zl9xdWV1ZV92bWFsbG9jX2luaXQoJmZoLT52Yl92aWRxLCAmczIyNTVfdmlkZW9fcW9wcywKIAkJCQkgICAgTlVMTCwgJmRldi0+c2xvY2ssCiAJCQkJICAgIGZoLT50eXBlLApAQCAtMTg2NSw2ICsxODU0LDcgQEAKIAltdXRleF9kZXN0cm95KCZkZXYtPm9wZW5fbG9jayk7CiAJbXV0ZXhfZGVzdHJveSgmZGV2LT5sb2NrKTsKIAl1c2JfcHV0X2RldihkZXYtPnVkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+djRsMl9kZXYpOwogCWRwcmludGsoMSwgIiVzIiwgX19mdW5jX18pOwogCWtmcmVlKGRldik7CiB9CkBAIC0xODc0LDE0ICsxODY0LDE1IEBACiAJc3RydWN0IHMyMjU1X2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgczIyNTVfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCBzMjI1NV9jaGFubmVsICpjaGFubmVsID0gZmgtPmNoYW5uZWw7CiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PREVWOwogCS8qIHR1cm4gb2ZmIHN0cmVhbSAqLwogCWlmIChyZXNfY2hlY2soZmgpKSB7Ci0JCWlmIChkZXYtPmJfYWNxdWlyZVtmaC0+Y2hhbm5lbF0pCi0JCQlzMjI1NV9zdG9wX2FjcXVpcmUoZGV2LCBmaC0+Y2hhbm5lbCk7CisJCWlmIChjaGFubmVsLT5iX2FjcXVpcmUpCisJCQlzMjI1NV9zdG9wX2FjcXVpcmUoZmgtPmNoYW5uZWwpOwogCQl2aWRlb2J1Zl9zdHJlYW1vZmYoJmZoLT52Yl92aWRxKTsKLQkJcmVzX2ZyZWUoZGV2LCBmaCk7CisJCXJlc19mcmVlKGZoKTsKIAl9CiAJdmlkZW9idWZfbW1hcF9mcmVlKCZmaC0+dmJfdmlkcSk7CiAJZHByaW50aygxLCAiJXMgKGRldj0lcylcbiIsIF9fZnVuY19fLCB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKHZkZXYpKTsKQEAgLTE5NDUsOSArMTkzNiwxMCBAQAogCiBzdGF0aWMgdm9pZCBzMjI1NV92aWRlb19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KQogewotCXN0cnVjdCBzMjI1NV9kZXYgKmRldiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOwotCWRwcmludGsoNCwgIiVzLCBjaG5sczogJWQgXG4iLCBfX2Z1bmNfXywgYXRvbWljX3JlYWQoJmRldi0+Y2hhbm5lbHMpKTsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZGV2LT5jaGFubmVscykpCisJc3RydWN0IHMyMjU1X2RldiAqZGV2ID0gdG9fczIyNTVfZGV2KHZkZXYtPnY0bDJfZGV2KTsKKwlkcHJpbnRrKDQsICIlcywgY2hubHM6ICVkIFxuIiwgX19mdW5jX18sCisJCWF0b21pY19yZWFkKCZkZXYtPm51bV9jaGFubmVscykpOworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZkZXYtPm51bV9jaGFubmVscykpCiAJCXMyMjU1X2Rlc3Ryb3koZGV2KTsKIAlyZXR1cm47CiB9CkBAIC0xOTY2LDQ3ICsxOTU4LDQ4IEBACiAJaW50IHJldDsKIAlpbnQgaTsKIAlpbnQgY3VyX25yID0gdmlkZW9fbnI7CisJc3RydWN0IHMyMjU1X2NoYW5uZWwgKmNoYW5uZWw7CiAJcmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJmRldi0+aW50ZXJmYWNlLT5kZXYsICZkZXYtPnY0bDJfZGV2KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCS8qIGluaXRpYWxpemUgYWxsIHZpZGVvIDQgbGludXggKi8KIAkvKiByZWdpc3RlciA0IHZpZGVvIGRldmljZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0NIQU5ORUxTOyBpKyspIHsKLQkJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmlkcVtpXS5hY3RpdmUpOwotCQlkZXYtPnZpZHFbaV0uZGV2ID0gZGV2OwotCQlkZXYtPnZpZHFbaV0uY2hhbm5lbCA9IGk7CisJCWNoYW5uZWwgPSAmZGV2LT5jaGFubmVsW2ldOworCQlJTklUX0xJU1RfSEVBRCgmY2hhbm5lbC0+dmlkcS5hY3RpdmUpOworCQljaGFubmVsLT52aWRxLmRldiA9IGRldjsKIAkJLyogcmVnaXN0ZXIgNCB2aWRlbyBkZXZpY2VzICovCi0JCW1lbWNweSgmZGV2LT52ZGV2W2ldLCAmdGVtcGxhdGUsIHNpemVvZihzdHJ1Y3QgdmlkZW9fZGV2aWNlKSk7Ci0JCWRldi0+dmRldltpXS52NGwyX2RldiA9ICZkZXYtPnY0bDJfZGV2OwotCQl2aWRlb19zZXRfZHJ2ZGF0YSgmZGV2LT52ZGV2W2ldLCBkZXYpOworCQljaGFubmVsLT52ZGV2ID0gdGVtcGxhdGU7CisJCWNoYW5uZWwtPnZkZXYudjRsMl9kZXYgPSAmZGV2LT52NGwyX2RldjsKKwkJdmlkZW9fc2V0X2RydmRhdGEoJmNoYW5uZWwtPnZkZXYsIGNoYW5uZWwpOwogCQlpZiAodmlkZW9fbnIgPT0gLTEpCi0JCQlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmRldi0+dmRldltpXSwKKwkJCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmY2hhbm5lbC0+dmRldiwKIAkJCQkJCSAgICBWRkxfVFlQRV9HUkFCQkVSLAogCQkJCQkJICAgIHZpZGVvX25yKTsKIAkJZWxzZQotCQkJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZkZXYtPnZkZXZbaV0sCisJCQlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmNoYW5uZWwtPnZkZXYsCiAJCQkJCQkgICAgVkZMX1RZUEVfR1JBQkJFUiwKIAkJCQkJCSAgICBjdXJfbnIgKyBpKTsKKwogCQlpZiAocmV0KSB7CiAJCQlkZXZfZXJyKCZkZXYtPnVkZXYtPmRldiwKIAkJCQkiZmFpbGVkIHRvIHJlZ2lzdGVyIHZpZGVvIGRldmljZSFcbiIpOwogCQkJYnJlYWs7CiAJCX0KLQkJYXRvbWljX2luYygmZGV2LT5jaGFubmVscyk7CisJCWF0b21pY19pbmMoJmRldi0+bnVtX2NoYW5uZWxzKTsKIAkJdjRsMl9pbmZvKCZkZXYtPnY0bDJfZGV2LCAiVjRMMiBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAlc1xuIiwKLQkJCSAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZSgmZGV2LT52ZGV2W2ldKSk7CisJCQkgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoJmNoYW5uZWwtPnZkZXYpKTsKIAogCX0KLQogCXByaW50ayhLRVJOX0lORk8gIlNlbnNvcmF5IDIyNTUgVjRMIGRyaXZlciBSZXZpc2lvbjogJWQuJWRcbiIsCiAJICAgICAgIFMyMjU1X01BSk9SX1ZFUlNJT04sCiAJICAgICAgIFMyMjU1X01JTk9SX1ZFUlNJT04pOwogCS8qIGlmIG5vIGNoYW5uZWxzIHJlZ2lzdGVyZWQsIHJldHVybiBlcnJvciBhbmQgcHJvYmUgd2lsbCBmYWlsKi8KLQlpZiAoYXRvbWljX3JlYWQoJmRldi0+Y2hhbm5lbHMpID09IDApIHsKKwlpZiAoYXRvbWljX3JlYWQoJmRldi0+bnVtX2NoYW5uZWxzKSA9PSAwKSB7CiAJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+djRsMl9kZXYpOwogCQlyZXR1cm4gcmV0OwogCX0KLQlpZiAoYXRvbWljX3JlYWQoJmRldi0+Y2hhbm5lbHMpICE9IE1BWF9DSEFOTkVMUykKKwlpZiAoYXRvbWljX3JlYWQoJmRldi0+bnVtX2NoYW5uZWxzKSAhPSBNQVhfQ0hBTk5FTFMpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInMyMjU1OiBOb3QgYWxsIGNoYW5uZWxzIGF2YWlsYWJsZS5cbiIpOwogCXJldHVybiAwOwogfQpAQCAtMjAzMywxMiArMjAyNiwxMSBAQAogCXMzMiBpZHggPSAtMTsKIAlzdHJ1Y3QgczIyNTVfZnJhbWVpICpmcm07CiAJdW5zaWduZWQgY2hhciAqcGRhdGE7Ci0KKwlzdHJ1Y3QgczIyNTVfY2hhbm5lbCAqY2hhbm5lbDsKIAlkcHJpbnRrKDEwMCwgImJ1ZmZlciB0byB1c2VyXG4iKTsKLQotCWlkeCA9IGRldi0+Y3VyX2ZyYW1lW2Rldi0+Y2NdOwotCWZybSA9ICZkZXYtPmJ1ZmZlcltkZXYtPmNjXS5mcmFtZVtpZHhdOwotCisJY2hhbm5lbCA9ICZkZXYtPmNoYW5uZWxbZGV2LT5jY107CisJaWR4ID0gY2hhbm5lbC0+Y3VyX2ZyYW1lOworCWZybSA9ICZjaGFubmVsLT5idWZmZXIuZnJhbWVbaWR4XTsKIAlpZiAoZnJtLT51bFN0YXRlID09IFMyMjU1X1JFQURfSURMRSkgewogCQlpbnQgamo7CiAJCXVuc2lnbmVkIGludCBjYzsKQEAgLTIwNjMsMTYgKzIwNTUsMTggQEAKIAkJCQl9CiAJCQkJLyogcmV2ZXJzZSBpdCAqLwogCQkJCWRldi0+Y2MgPSBHX2Nobm1hcFtjY107CisJCQkJY2hhbm5lbCA9ICZkZXYtPmNoYW5uZWxbZGV2LT5jY107CiAJCQkJcGF5bG9hZCA9ICBwZHdvcmRbM107Ci0JCQkJaWYgKHBheWxvYWQgPiBkZXYtPnJlcV9pbWFnZV9zaXplW2Rldi0+Y2NdKSB7Ci0JCQkJCWRldi0+YmFkX3BheWxvYWRbZGV2LT5jY10rKzsKKwkJCQlpZiAocGF5bG9hZCA+IGNoYW5uZWwtPnJlcV9pbWFnZV9zaXplKSB7CisJCQkJCWNoYW5uZWwtPmJhZF9wYXlsb2FkKys7CiAJCQkJCS8qIGRpc2NhcmQgdGhlIGJhZCBmcmFtZSAqLwogCQkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCQl9Ci0JCQkJZGV2LT5wa3Rfc2l6ZVtkZXYtPmNjXSA9IHBheWxvYWQ7Ci0JCQkJZGV2LT5qcGdfc2l6ZVtkZXYtPmNjXSA9IHBkd29yZFs0XTsKKwkJCQljaGFubmVsLT5wa3Rfc2l6ZSA9IHBheWxvYWQ7CisJCQkJY2hhbm5lbC0+anBnX3NpemUgPSBwZHdvcmRbNF07CiAJCQkJYnJlYWs7CiAJCQljYXNlIFMyMjU1X01BUktFUl9SRVNQT05TRToKKwogCQkJCXBkYXRhICs9IERFRl9VU0JfQkxPQ0s7CiAJCQkJamogKz0gREVGX1VTQl9CTE9DSzsKIAkJCQlpZiAocGR3b3JkWzFdID49IE1BWF9DSEFOTkVMUykKQEAgLTIwODAsMTIgKzIwNzQsMTMgQEAKIAkJCQljYyA9IEdfY2hubWFwW3Bkd29yZFsxXV07CiAJCQkJaWYgKGNjID49IE1BWF9DSEFOTkVMUykKIAkJCQkJYnJlYWs7CisJCQkJY2hhbm5lbCA9ICZkZXYtPmNoYW5uZWxbY2NdOwogCQkJCXN3aXRjaCAocGR3b3JkWzJdKSB7CiAJCQkJY2FzZSBTMjI1NV9SRVNQT05TRV9TRVRNT0RFOgogCQkJCQkvKiBjaGVjayBpZiBjaGFubmVsIHZhbGlkICovCiAJCQkJCS8qIHNldCBtb2RlIHJlYWR5ICovCi0JCQkJCWRldi0+c2V0bW9kZV9yZWFkeVtjY10gPSAxOwotCQkJCQl3YWtlX3VwKCZkZXYtPndhaXRfc2V0bW9kZVtjY10pOworCQkJCQljaGFubmVsLT5zZXRtb2RlX3JlYWR5ID0gMTsKKwkJCQkJd2FrZV91cCgmY2hhbm5lbC0+d2FpdF9zZXRtb2RlKTsKIAkJCQkJZHByaW50ayg1LCAic2V0bW9kZSByZWFkeSAlZFxuIiwgY2MpOwogCQkJCQlicmVhazsKIAkJCQljYXNlIFMyMjU1X1JFU1BPTlNFX0ZXOgpAQCAtMjA5OSw5ICsyMDk0LDkgQEAKIAkJCQkJd2FrZV91cCgmZGV2LT5md19kYXRhLT53YWl0X2Z3KTsKIAkJCQkJYnJlYWs7CiAJCQkJY2FzZSBTMjI1NV9SRVNQT05TRV9TVEFUVVM6Ci0JCQkJCWRldi0+dmlkc3RhdHVzW2NjXSA9IHBkd29yZFszXTsKLQkJCQkJZGV2LT52aWRzdGF0dXNfcmVhZHlbY2NdID0gMTsKLQkJCQkJd2FrZV91cCgmZGV2LT53YWl0X3ZpZHN0YXR1c1tjY10pOworCQkJCQljaGFubmVsLT52aWRzdGF0dXMgPSBwZHdvcmRbM107CisJCQkJCWNoYW5uZWwtPnZpZHN0YXR1c19yZWFkeSA9IDE7CisJCQkJCXdha2VfdXAoJmNoYW5uZWwtPndhaXRfdmlkc3RhdHVzKTsKIAkJCQkJZHByaW50ayg1LCAiZ290IHZpZHN0YXR1cyAleCBjaGFuICVkXG4iLAogCQkJCQkJcGR3b3JkWzNdLCBjYyk7CiAJCQkJCWJyZWFrOwpAQCAtMjExOCwxMyArMjExMywxMSBAQAogCQlpZiAoIWJmcmFtZSkKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KLQotCi0JaWR4ID0gZGV2LT5jdXJfZnJhbWVbZGV2LT5jY107Ci0JZnJtID0gJmRldi0+YnVmZmVyW2Rldi0+Y2NdLmZyYW1lW2lkeF07Ci0KKwljaGFubmVsID0gJmRldi0+Y2hhbm5lbFtkZXYtPmNjXTsKKwlpZHggPSBjaGFubmVsLT5jdXJfZnJhbWU7CisJZnJtID0gJmNoYW5uZWwtPmJ1ZmZlci5mcmFtZVtpZHhdOwogCS8qIHNlYXJjaCBkb25lLiAgbm93IGZpbmQgb3V0IGlmIHNob3VsZCBiZSBhY3F1aXJpbmcgb24gdGhpcyBjaGFubmVsICovCi0JaWYgKCFkZXYtPmJfYWNxdWlyZVtkZXYtPmNjXSkgeworCWlmICghY2hhbm5lbC0+Yl9hY3F1aXJlKSB7CiAJCS8qIHdlIGZvdW5kIGEgZnJhbWUsIGJ1dCB0aGlzIGNoYW5uZWwgaXMgdHVybmVkIG9mZiAqLwogCQlmcm0tPnVsU3RhdGUgPSBTMjI1NV9SRUFEX0lETEU7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjE0OSwzMCArMjE0MiwyOCBAQAogCiAJY29weV9zaXplID0gKHBpcGVfaW5mby0+Y3VyX3RyYW5zZmVyX3NpemUgLSBvZmZzZXQpOwogCi0Jc2l6ZSA9IGRldi0+cGt0X3NpemVbZGV2LT5jY10gLSBQUkVGSVhfU0laRTsKKwlzaXplID0gY2hhbm5lbC0+cGt0X3NpemUgLSBQUkVGSVhfU0laRTsKIAogCS8qIHNhbml0eSBjaGVjayBvbiBwZGVzdCAqLwotCWlmICgoY29weV9zaXplICsgZnJtLT5jdXJfc2l6ZSkgPCBkZXYtPnJlcV9pbWFnZV9zaXplW2Rldi0+Y2NdKQorCWlmICgoY29weV9zaXplICsgZnJtLT5jdXJfc2l6ZSkgPCBjaGFubmVsLT5yZXFfaW1hZ2Vfc2l6ZSkKIAkJbWVtY3B5KHBkZXN0LCBwc3JjLCBjb3B5X3NpemUpOwogCiAJZnJtLT5jdXJfc2l6ZSArPSBjb3B5X3NpemU7CiAJZHByaW50ayg0LCAiY3VyX3NpemUgc2l6ZSAlbHUgc2l6ZSAlbHUgXG4iLCBmcm0tPmN1cl9zaXplLCBzaXplKTsKIAogCWlmIChmcm0tPmN1cl9zaXplID49IHNpemUpIHsKLQotCQl1MzIgY2MgPSBkZXYtPmNjOwogCQlkcHJpbnRrKDIsICIqKioqKioqKioqKioqKioqWyVkXUJ1ZmZlclslZF1mdWxsKioqKioqKioqKioqKlxuIiwKLQkJCWNjLCBpZHgpOwotCQlkZXYtPmxhc3RfZnJhbWVbY2NdID0gZGV2LT5jdXJfZnJhbWVbY2NdOwotCQlkZXYtPmN1cl9mcmFtZVtjY10rKzsKKwkJCWRldi0+Y2MsIGlkeCk7CisJCWNoYW5uZWwtPmxhc3RfZnJhbWUgPSBjaGFubmVsLT5jdXJfZnJhbWU7CisJCWNoYW5uZWwtPmN1cl9mcmFtZSsrOwogCQkvKiBlbmQgb2Ygc3lzdGVtIGZyYW1lIHJpbmcgYnVmZmVyLCBzdGFydCBhdCB6ZXJvICovCi0JCWlmICgoZGV2LT5jdXJfZnJhbWVbY2NdID09IFNZU19GUkFNRVMpIHx8Ci0JCSAgICAoZGV2LT5jdXJfZnJhbWVbY2NdID09IGRldi0+YnVmZmVyW2NjXS5kd0ZyYW1lcykpCi0JCQlkZXYtPmN1cl9mcmFtZVtjY10gPSAwOworCQlpZiAoKGNoYW5uZWwtPmN1cl9mcmFtZSA9PSBTWVNfRlJBTUVTKSB8fAorCQkgICAgKGNoYW5uZWwtPmN1cl9mcmFtZSA9PSBjaGFubmVsLT5idWZmZXIuZHdGcmFtZXMpKQorCQkJY2hhbm5lbC0+Y3VyX2ZyYW1lID0gMDsKIAkJLyogZnJhbWUgcmVhZHkgKi8KLQkJaWYgKGRldi0+Yl9hY3F1aXJlW2NjXSkKLQkJCXMyMjU1X2dvdF9mcmFtZShkZXYsIGNjLCBkZXYtPmpwZ19zaXplW2NjXSk7Ci0JCWRldi0+ZnJhbWVfY291bnRbY2NdKys7CisJCWlmIChjaGFubmVsLT5iX2FjcXVpcmUpCisJCQlzMjI1NV9nb3RfZnJhbWUoY2hhbm5lbCwgY2hhbm5lbC0+anBnX3NpemUpOworCQljaGFubmVsLT5mcmFtZV9jb3VudCsrOwogCQlmcm0tPnVsU3RhdGUgPSBTMjI1NV9SRUFEX0lETEU7CiAJCWZybS0+Y3VyX3NpemUgPSAwOwogCkBAIC0yMjQ1LDE2ICsyMjM2LDEyIEBACiAgKiBDcmVhdGUgdGhlIHN5c3RlbSByaW5nIGJ1ZmZlciB0byBjb3B5IGZyYW1lcyBpbnRvIGZyb20gdGhlCiAgKiB1c2IgcmVhZCBwaXBlLgogICovCi1zdGF0aWMgaW50IHMyMjU1X2NyZWF0ZV9zeXNfYnVmZmVycyhzdHJ1Y3QgczIyNTVfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgY2huKQorc3RhdGljIGludCBzMjI1NV9jcmVhdGVfc3lzX2J1ZmZlcnMoc3RydWN0IHMyMjU1X2NoYW5uZWwgKmNoYW5uZWwpCiB7CiAJdW5zaWduZWQgbG9uZyBpOwogCXVuc2lnbmVkIGxvbmcgcmVxc2l6ZTsKIAlkcHJpbnRrKDEsICJjcmVhdGUgc3lzIGJ1ZmZlcnNcbiIpOwotCWlmIChjaG4gPj0gTUFYX0NIQU5ORUxTKQotCQlyZXR1cm4gLTE7Ci0KLQlkZXYtPmJ1ZmZlcltjaG5dLmR3RnJhbWVzID0gU1lTX0ZSQU1FUzsKLQorCWNoYW5uZWwtPmJ1ZmZlci5kd0ZyYW1lcyA9IFNZU19GUkFNRVM7CiAJLyogYWx3YXlzIGFsbG9jYXRlIG1heGltdW0gc2l6ZShQQUwpIGZvciBzeXN0ZW0gYnVmZmVycyAqLwogCXJlcXNpemUgPSBTWVNfRlJBTUVTX01BWFNJWkU7CiAKQEAgLTIyNjMsNDIgKzIyNTAsNDAgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBTWVNfRlJBTUVTOyBpKyspIHsKIAkJLyogYWxsb2NhdGUgdGhlIGZyYW1lcyAqLwotCQlkZXYtPmJ1ZmZlcltjaG5dLmZyYW1lW2ldLmxwdmJpdHMgPSB2bWFsbG9jKHJlcXNpemUpOwotCi0JCWRwcmludGsoMSwgInZhbGxvYyAlcCBjaGFuICVsdSwgaWR4ICVsdSwgcGRhdGEgJXBcbiIsCi0JCQkmZGV2LT5idWZmZXJbY2huXS5mcmFtZVtpXSwgY2huLCBpLAotCQkJZGV2LT5idWZmZXJbY2huXS5mcmFtZVtpXS5scHZiaXRzKTsKLQkJZGV2LT5idWZmZXJbY2huXS5mcmFtZVtpXS5zaXplID0gcmVxc2l6ZTsKLQkJaWYgKGRldi0+YnVmZmVyW2Nobl0uZnJhbWVbaV0ubHB2Yml0cyA9PSBOVUxMKSB7CisJCWNoYW5uZWwtPmJ1ZmZlci5mcmFtZVtpXS5scHZiaXRzID0gdm1hbGxvYyhyZXFzaXplKTsKKwkJZHByaW50aygxLCAidmFsbG9jICVwIGNoYW4gJWQsIGlkeCAlbHUsIHBkYXRhICVwXG4iLAorCQkJJmNoYW5uZWwtPmJ1ZmZlci5mcmFtZVtpXSwgY2hhbm5lbC0+aWR4LCBpLAorCQkJY2hhbm5lbC0+YnVmZmVyLmZyYW1lW2ldLmxwdmJpdHMpOworCQljaGFubmVsLT5idWZmZXIuZnJhbWVbaV0uc2l6ZSA9IHJlcXNpemU7CisJCWlmIChjaGFubmVsLT5idWZmZXIuZnJhbWVbaV0ubHB2Yml0cyA9PSBOVUxMKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJvdXQgb2YgbWVtb3J5LiAgdXNpbmcgbGVzcyBmcmFtZXNcbiIpOwotCQkJZGV2LT5idWZmZXJbY2huXS5kd0ZyYW1lcyA9IGk7CisJCQljaGFubmVsLT5idWZmZXIuZHdGcmFtZXMgPSBpOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKIAkvKiBtYWtlIHN1cmUgaW50ZXJuYWwgc3RhdGVzIGFyZSBzZXQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgU1lTX0ZSQU1FUzsgaSsrKSB7Ci0JCWRldi0+YnVmZmVyW2Nobl0uZnJhbWVbaV0udWxTdGF0ZSA9IDA7Ci0JCWRldi0+YnVmZmVyW2Nobl0uZnJhbWVbaV0uY3VyX3NpemUgPSAwOworCQljaGFubmVsLT5idWZmZXIuZnJhbWVbaV0udWxTdGF0ZSA9IDA7CisJCWNoYW5uZWwtPmJ1ZmZlci5mcmFtZVtpXS5jdXJfc2l6ZSA9IDA7CiAJfQogCi0JZGV2LT5jdXJfZnJhbWVbY2huXSA9IDA7Ci0JZGV2LT5sYXN0X2ZyYW1lW2Nobl0gPSAtMTsKKwljaGFubmVsLT5jdXJfZnJhbWUgPSAwOworCWNoYW5uZWwtPmxhc3RfZnJhbWUgPSAtMTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzMjI1NV9yZWxlYXNlX3N5c19idWZmZXJzKHN0cnVjdCBzMjI1NV9kZXYgKmRldiwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgY2hhbm5lbCkKK3N0YXRpYyBpbnQgczIyNTVfcmVsZWFzZV9zeXNfYnVmZmVycyhzdHJ1Y3QgczIyNTVfY2hhbm5lbCAqY2hhbm5lbCkKIHsKIAl1bnNpZ25lZCBsb25nIGk7CiAJZHByaW50aygxLCAicmVsZWFzZSBzeXMgYnVmZmVyc1xuIik7CiAJZm9yIChpID0gMDsgaSA8IFNZU19GUkFNRVM7IGkrKykgewotCQlpZiAoZGV2LT5idWZmZXJbY2hhbm5lbF0uZnJhbWVbaV0ubHB2Yml0cykgeworCQlpZiAoY2hhbm5lbC0+YnVmZmVyLmZyYW1lW2ldLmxwdmJpdHMpIHsKIAkJCWRwcmludGsoMSwgInZmcmVlICVwXG4iLAotCQkJCWRldi0+YnVmZmVyW2NoYW5uZWxdLmZyYW1lW2ldLmxwdmJpdHMpOwotCQkJdmZyZWUoZGV2LT5idWZmZXJbY2hhbm5lbF0uZnJhbWVbaV0ubHB2Yml0cyk7CisJCQkJY2hhbm5lbC0+YnVmZmVyLmZyYW1lW2ldLmxwdmJpdHMpOworCQkJdmZyZWUoY2hhbm5lbC0+YnVmZmVyLmZyYW1lW2ldLmxwdmJpdHMpOwogCQl9Ci0JCWRldi0+YnVmZmVyW2NoYW5uZWxdLmZyYW1lW2ldLmxwdmJpdHMgPSBOVUxMOworCQljaGFubmVsLT5idWZmZXIuZnJhbWVbaV0ubHB2Yml0cyA9IE5VTEw7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjMzNSwxNyArMjMyMCwyMCBAQAogCQkJZndfdmVyICYgMHhmZik7CiAKIAlmb3IgKGogPSAwOyBqIDwgTUFYX0NIQU5ORUxTOyBqKyspIHsKLQkJZGV2LT5iX2FjcXVpcmVbal0gPSAwOwotCQlkZXYtPm1vZGVbal0gPSBtb2RlX2RlZjsKKwkJc3RydWN0IHMyMjU1X2NoYW5uZWwgKmNoYW5uZWwgPSAmZGV2LT5jaGFubmVsW2pdOworCQljaGFubmVsLT5iX2FjcXVpcmUgPSAwOworCQljaGFubmVsLT5tb2RlID0gbW9kZV9kZWY7CiAJCWlmIChkZXYtPnBpZCA9PSAweDIyNTcgJiYgaiA+IDEpCi0JCQlkZXYtPm1vZGVbal0uY29sb3IgfD0gKDEgPDwgMTYpOwotCQlkZXYtPmpjW2pdLnF1YWxpdHkgPSBTMjI1NV9ERUZfSlBFR19RVUFMOwotCQlkZXYtPmN1cl9mbXRbal0gPSAmZm9ybWF0c1swXTsKLQkJZGV2LT5tb2RlW2pdLnJlc3RhcnQgPSAxOwotCQlkZXYtPnJlcV9pbWFnZV9zaXplW2pdID0gZ2V0X3RyYW5zZmVyX3NpemUoJm1vZGVfZGVmKTsKLQkJZGV2LT5mcmFtZV9jb3VudFtqXSA9IDA7CisJCQljaGFubmVsLT5tb2RlLmNvbG9yIHw9ICgxIDw8IDE2KTsKKwkJY2hhbm5lbC0+amMucXVhbGl0eSA9IFMyMjU1X0RFRl9KUEVHX1FVQUw7CisJCWNoYW5uZWwtPndpZHRoID0gTElORV9TWl80Q0lGU19OVFNDOworCQljaGFubmVsLT5oZWlnaHQgPSBOVU1fTElORVNfNENJRlNfTlRTQyAqIDI7CisJCWNoYW5uZWwtPmZtdCA9ICZmb3JtYXRzWzBdOworCQljaGFubmVsLT5tb2RlLnJlc3RhcnQgPSAxOworCQljaGFubmVsLT5yZXFfaW1hZ2Vfc2l6ZSA9IGdldF90cmFuc2Zlcl9zaXplKCZtb2RlX2RlZik7CisJCWNoYW5uZWwtPmZyYW1lX2NvdW50ID0gMDsKIAkJLyogY3JlYXRlIHRoZSBzeXN0ZW0gYnVmZmVycyAqLwotCQlzMjI1NV9jcmVhdGVfc3lzX2J1ZmZlcnMoZGV2LCBqKTsKKwkJczIyNTVfY3JlYXRlX3N5c19idWZmZXJzKGNoYW5uZWwpOwogCX0KIAkvKiBzdGFydCByZWFkIHBpcGUgKi8KIAlzMjI1NV9zdGFydF9yZWFkcGlwZShkZXYpOwpAQCAtMjM1OSwxNCArMjM0NywxMiBAQAogCWRwcmludGsoMSwgIiVzOiBkZXY6ICVwIiwgX19mdW5jX18sICBkZXYpOwogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9DSEFOTkVMUzsgaSsrKSB7Ci0JCWlmIChkZXYtPmJfYWNxdWlyZVtpXSkKLQkJCXMyMjU1X3N0b3BfYWNxdWlyZShkZXYsIGkpOworCQlpZiAoZGV2LT5jaGFubmVsW2ldLmJfYWNxdWlyZSkKKwkJCXMyMjU1X3N0b3BfYWNxdWlyZSgmZGV2LT5jaGFubmVsW2ldKTsKIAl9Ci0KIAlzMjI1NV9zdG9wX3JlYWRwaXBlKGRldik7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0NIQU5ORUxTOyBpKyspCi0JCXMyMjU1X3JlbGVhc2Vfc3lzX2J1ZmZlcnMoZGV2LCBpKTsKKwkJczIyNTVfcmVsZWFzZV9zeXNfYnVmZmVycygmZGV2LT5jaGFubmVsW2ldKTsKIAkvKiByZWxlYXNlIHRyYW5zZmVyIGJ1ZmZlciAqLwogCWtmcmVlKGRldi0+cGlwZS50cmFuc2Zlcl9idWZmZXIpOwogCXJldHVybiAwOwpAQCAtMjQ1OSwyOSArMjQ0NSwyNiBAQAogfQogCiAvKiBzdGFydHMgYWNxdWlzaXRpb24gcHJvY2VzcyAqLwotc3RhdGljIGludCBzMjI1NV9zdGFydF9hY3F1aXJlKHN0cnVjdCBzMjI1NV9kZXYgKmRldiwgdW5zaWduZWQgbG9uZyBjaG4pCitzdGF0aWMgaW50IHMyMjU1X3N0YXJ0X2FjcXVpcmUoc3RydWN0IHMyMjU1X2NoYW5uZWwgKmNoYW5uZWwpCiB7CiAJdW5zaWduZWQgY2hhciAqYnVmZmVyOwogCWludCByZXM7CiAJdW5zaWduZWQgbG9uZyBjaG5fcmV2OwogCWludCBqOwotCWlmIChjaG4gPj0gTUFYX0NIQU5ORUxTKSB7Ci0JCWRwcmludGsoMiwgInN0YXJ0IGFjcXVpcmUgZmFpbGVkLCBiYWQgY2hhbm5lbCAlbHVcbiIsIGNobik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JY2huX3JldiA9IEdfY2hubWFwW2Nobl07CisJc3RydWN0IHMyMjU1X2RldiAqZGV2ID0gdG9fczIyNTVfZGV2KGNoYW5uZWwtPnZkZXYudjRsMl9kZXYpOworCWNobl9yZXYgPSBHX2Nobm1hcFtjaGFubmVsLT5pZHhdOwogCWJ1ZmZlciA9IGt6YWxsb2MoNTEyLCBHRlBfS0VSTkVMKTsKIAlpZiAoYnVmZmVyID09IE5VTEwpIHsKIAkJZGV2X2VycigmZGV2LT51ZGV2LT5kZXYsICJvdXQgb2YgbWVtXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JZGV2LT5sYXN0X2ZyYW1lW2Nobl0gPSAtMTsKLQlkZXYtPmJhZF9wYXlsb2FkW2Nobl0gPSAwOwotCWRldi0+Y3VyX2ZyYW1lW2Nobl0gPSAwOworCWNoYW5uZWwtPmxhc3RfZnJhbWUgPSAtMTsKKwljaGFubmVsLT5iYWRfcGF5bG9hZCA9IDA7CisJY2hhbm5lbC0+Y3VyX2ZyYW1lID0gMDsKIAlmb3IgKGogPSAwOyBqIDwgU1lTX0ZSQU1FUzsgaisrKSB7Ci0JCWRldi0+YnVmZmVyW2Nobl0uZnJhbWVbal0udWxTdGF0ZSA9IDA7Ci0JCWRldi0+YnVmZmVyW2Nobl0uZnJhbWVbal0uY3VyX3NpemUgPSAwOworCQljaGFubmVsLT5idWZmZXIuZnJhbWVbal0udWxTdGF0ZSA9IDA7CisJCWNoYW5uZWwtPmJ1ZmZlci5mcmFtZVtqXS5jdXJfc2l6ZSA9IDA7CiAJfQogCiAJLyogc2VuZCB0aGUgc3RhcnQgY29tbWFuZCAqLwpAQCAtMjQ5MiwyMSArMjQ3NSwxOCBAQAogCWlmIChyZXMgIT0gMCkKIAkJZGV2X2VycigmZGV2LT51ZGV2LT5kZXYsICJDTURfU1RBUlQgZXJyb3JcbiIpOwogCi0JZHByaW50aygyLCAic3RhcnQgYWNxdWlyZSBleGl0WyVsdV0gJWQgXG4iLCBjaG4sIHJlcyk7CisJZHByaW50aygyLCAic3RhcnQgYWNxdWlyZSBleGl0WyVkXSAlZCBcbiIsIGNoYW5uZWwtPmlkeCwgcmVzKTsKIAlrZnJlZShidWZmZXIpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHMyMjU1X3N0b3BfYWNxdWlyZShzdHJ1Y3QgczIyNTVfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgY2huKQorc3RhdGljIGludCBzMjI1NV9zdG9wX2FjcXVpcmUoc3RydWN0IHMyMjU1X2NoYW5uZWwgKmNoYW5uZWwpCiB7CiAJdW5zaWduZWQgY2hhciAqYnVmZmVyOwogCWludCByZXM7CiAJdW5zaWduZWQgbG9uZyBjaG5fcmV2OwotCWlmIChjaG4gPj0gTUFYX0NIQU5ORUxTKSB7Ci0JCWRwcmludGsoMiwgInN0b3AgYWNxdWlyZSBmYWlsZWQsIGJhZCBjaGFubmVsICVsdVxuIiwgY2huKTsKLQkJcmV0dXJuIC0xOwotCX0KLQljaG5fcmV2ID0gR19jaG5tYXBbY2huXTsKKwlzdHJ1Y3QgczIyNTVfZGV2ICpkZXYgPSB0b19zMjI1NV9kZXYoY2hhbm5lbC0+dmRldi52NGwyX2Rldik7CisJY2huX3JldiA9IEdfY2hubWFwW2NoYW5uZWwtPmlkeF07CiAJYnVmZmVyID0ga3phbGxvYyg1MTIsIEdGUF9LRVJORUwpOwogCWlmIChidWZmZXIgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZkZXYtPnVkZXYtPmRldiwgIm91dCBvZiBtZW1cbiIpOwpAQCAtMjUyMCw4ICsyNTAwLDggQEAKIAlpZiAocmVzICE9IDApCiAJCWRldl9lcnIoJmRldi0+dWRldi0+ZGV2LCAiQ01EX1NUT1AgZXJyb3JcbiIpOwogCWtmcmVlKGJ1ZmZlcik7Ci0JZGV2LT5iX2FjcXVpcmVbY2huXSA9IDA7Ci0JZHByaW50ayg0LCAiJXM6IGNobiAlbHUsIHJlcyAlZFxuIiwgX19mdW5jX18sIGNobiwgcmVzKTsKKwljaGFubmVsLT5iX2FjcXVpcmUgPSAwOworCWRwcmludGsoNCwgIiVzOiBjaG4gJWQsIHJlcyAlZFxuIiwgX19mdW5jX18sIGNoYW5uZWwtPmlkeCwgcmVzKTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC0yNTc1LDcgKzI1NTUsNyBAQAogCQlzMjI1NV9kZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JYXRvbWljX3NldCgmZGV2LT5jaGFubmVscywgMCk7CisJYXRvbWljX3NldCgmZGV2LT5udW1fY2hhbm5lbHMsIDApOwogCWRldi0+cGlkID0gaWQtPmlkUHJvZHVjdDsKIAlkZXYtPmZ3X2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgczIyNTVfZncpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldi0+ZndfZGF0YSkKQEAgLTI2MTIsOCArMjU5MiwxMCBAQAogCWRldi0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRldi0+ZndfZGF0YTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPmZ3X2RhdGEtPndhaXRfZncpOwogCWZvciAoaSA9IDA7IGkgPCBNQVhfQ0hBTk5FTFM7IGkrKykgewotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPndhaXRfc2V0bW9kZVtpXSk7Ci0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+d2FpdF92aWRzdGF0dXNbaV0pOworCQlzdHJ1Y3QgczIyNTVfY2hhbm5lbCAqY2hhbm5lbCA9ICZkZXYtPmNoYW5uZWxbaV07CisJCWRldi0+Y2hhbm5lbFtpXS5pZHggPSBpOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjaGFubmVsLT53YWl0X3NldG1vZGUpOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjaGFubmVsLT53YWl0X3ZpZHN0YXR1cyk7CiAJfQogCiAJZGV2LT5md19kYXRhLT5md191cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwpAQCAtMjY1MSw3ICsyNjMzLDcgQEAKIAkJCXByaW50ayhLRVJOX0lORk8gInMyMjU1OiBmMjI1NXVzYi5iaW4gb3V0IG9mIGRhdGUuXG4iKTsKIAkJaWYgKGRldi0+cGlkID09IDB4MjI1NyAmJiAqcFJlbCA8IFMyMjU1X01JTl9EU1BfQ09MT1JGSUxURVIpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJzMjI1NTogMjI1NyByZXF1aXJlcyBmaXJtd2FyZSAlZCIKLQkJCSAgICAgICAib3IgYWJvdmUuXG4iLCBTMjI1NV9NSU5fRFNQX0NPTE9SRklMVEVSKTsKKwkJCSAgICAgICAiIG9yIGFib3ZlLlxuIiwgUzIyNTVfTUlOX0RTUF9DT0xPUkZJTFRFUik7CiAJfQogCXVzYl9yZXNldF9kZXZpY2UoZGV2LT51ZGV2KTsKIAkvKiBsb2FkIDIyNTUgYm9hcmQgc3BlY2lmaWMgKi8KQEAgLTI2OTMsMjUgKzI2NzUsMjMgQEAKIHsKIAlzdHJ1Y3QgczIyNTVfZGV2ICpkZXYgPSB0b19zMjI1NV9kZXYodXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpKTsKIAlpbnQgaTsKLQlpbnQgY2hhbm5lbHMgPSBhdG9taWNfcmVhZCgmZGV2LT5jaGFubmVscyk7Ci0JdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7CisJaW50IGNoYW5uZWxzID0gYXRvbWljX3JlYWQoJmRldi0+bnVtX2NoYW5uZWxzKTsKKwl2NGwyX2RldmljZV9kaXNjb25uZWN0KCZkZXYtPnY0bDJfZGV2KTsKIAkvKnNlZSBjb21tZW50cyBpbiB0aGUgdXZjX2RyaXZlci5jIHVzYiBkaXNjb25uZWN0IGZ1bmN0aW9uICovCi0JYXRvbWljX2luYygmZGV2LT5jaGFubmVscyk7CisJYXRvbWljX2luYygmZGV2LT5udW1fY2hhbm5lbHMpOwogCS8qIHVucmVnaXN0ZXIgZWFjaCB2aWRlbyBkZXZpY2UuICovCi0JZm9yIChpID0gMDsgaSA8IGNoYW5uZWxzOyBpKyspIHsKLQkJaWYgKHZpZGVvX2lzX3JlZ2lzdGVyZWQoJmRldi0+dmRldltpXSkpCi0JCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmZGV2LT52ZGV2W2ldKTsKLQl9CisJZm9yIChpID0gMDsgaSA8IGNoYW5uZWxzOyBpKyspCisJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZkZXYtPmNoYW5uZWxbaV0udmRldik7CiAJLyogd2FrZSB1cCBhbnkgb2Ygb3VyIHRpbWVycyAqLwogCWF0b21pY19zZXQoJmRldi0+ZndfZGF0YS0+Zndfc3RhdGUsIFMyMjU1X0ZXX0RJU0NPTk5FQ1RJTkcpOwogCXdha2VfdXAoJmRldi0+ZndfZGF0YS0+d2FpdF9mdyk7CiAJZm9yIChpID0gMDsgaSA8IE1BWF9DSEFOTkVMUzsgaSsrKSB7Ci0JCWRldi0+c2V0bW9kZV9yZWFkeVtpXSA9IDE7Ci0JCXdha2VfdXAoJmRldi0+d2FpdF9zZXRtb2RlW2ldKTsKLQkJZGV2LT52aWRzdGF0dXNfcmVhZHlbaV0gPSAxOwotCQl3YWtlX3VwKCZkZXYtPndhaXRfdmlkc3RhdHVzW2ldKTsKKwkJZGV2LT5jaGFubmVsW2ldLnNldG1vZGVfcmVhZHkgPSAxOworCQl3YWtlX3VwKCZkZXYtPmNoYW5uZWxbaV0ud2FpdF9zZXRtb2RlKTsKKwkJZGV2LT5jaGFubmVsW2ldLnZpZHN0YXR1c19yZWFkeSA9IDE7CisJCXdha2VfdXAoJmRldi0+Y2hhbm5lbFtpXS53YWl0X3ZpZHN0YXR1cyk7CiAJfQotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZkZXYtPmNoYW5uZWxzKSkKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZGV2LT5udW1fY2hhbm5lbHMpKQogCQlzMjI1NV9kZXN0cm95KGRldik7CiAJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWFsc2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWFsc2EuYwppbmRleCBkM2JkODJhLi4xMDQ2MGZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1hbHNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtYWxzYS5jCkBAIC02MzAsNyArNjMwLDcgQEAKIAkvKiByZWxlYXNlIHRoZSBvbGQgYnVmZmVyICovCiAJaWYgKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEpIHsKIAkJc2FhNzEzNF9wZ3RhYmxlX2ZyZWUoZGV2LT5wY2ksICZkZXYtPmRtYXNvdW5kLnB0KTsKLQkJdmlkZW9idWZfc2dfZG1hX3VubWFwKCZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5kbWFzb3VuZC5kbWEpOworCQl2aWRlb2J1Zl9kbWFfdW5tYXAoJmRldi0+cGNpLT5kZXYsICZkZXYtPmRtYXNvdW5kLmRtYSk7CiAJCWRzcF9idWZmZXJfZnJlZShkZXYpOwogCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhID0gTlVMTDsKIAl9CkBAIC02NDYsMTIgKzY0NiwxMiBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCWlmICgwICE9IChlcnIgPSB2aWRlb2J1Zl9zZ19kbWFfbWFwKCZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5kbWFzb3VuZC5kbWEpKSkgeworCWlmICgwICE9IChlcnIgPSB2aWRlb2J1Zl9kbWFfbWFwKCZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5kbWFzb3VuZC5kbWEpKSkgewogCQlkc3BfYnVmZmVyX2ZyZWUoZGV2KTsKIAkJcmV0dXJuIGVycjsKIAl9CiAJaWYgKDAgIT0gKGVyciA9IHNhYTcxMzRfcGd0YWJsZV9hbGxvYyhkZXYtPnBjaSwmZGV2LT5kbWFzb3VuZC5wdCkpKSB7Ci0JCXZpZGVvYnVmX3NnX2RtYV91bm1hcCgmZGV2LT5wY2ktPmRldiwgJmRldi0+ZG1hc291bmQuZG1hKTsKKwkJdmlkZW9idWZfZG1hX3VubWFwKCZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5kbWFzb3VuZC5kbWEpOwogCQlkc3BfYnVmZmVyX2ZyZWUoZGV2KTsKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC02NjAsNyArNjYwLDcgQEAKIAkJCQkJCWRldi0+ZG1hc291bmQuZG1hLnNnbGVuLAogCQkJCQkJMCkpKSB7CiAJCXNhYTcxMzRfcGd0YWJsZV9mcmVlKGRldi0+cGNpLCAmZGV2LT5kbWFzb3VuZC5wdCk7Ci0JCXZpZGVvYnVmX3NnX2RtYV91bm1hcCgmZGV2LT5wY2ktPmRldiwgJmRldi0+ZG1hc291bmQuZG1hKTsKKwkJdmlkZW9idWZfZG1hX3VubWFwKCZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5kbWFzb3VuZC5kbWEpOwogCQlkc3BfYnVmZmVyX2ZyZWUoZGV2KTsKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC02NjksNyArNjY5LDcgQEAKIAkgICBieXRlLCBidXQgaXQgZG9lc24ndCB3b3JrLiBTbyBJIGFsbG9jYXRlIHRoZSBETUEgdXNpbmcgdGhlCiAJICAgVjRMIGZ1bmN0aW9ucywgYW5kIGZvcmNlIEFMU0EgdG8gdXNlIHRoYXQgYXMgdGhlIERNQSBhcmVhICovCiAKLQlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhID0gZGV2LT5kbWFzb3VuZC5kbWEudm1hbGxvYzsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhID0gZGV2LT5kbWFzb3VuZC5kbWEudmFkZHI7CiAJc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYnl0ZXMgPSBkZXYtPmRtYXNvdW5kLmJ1ZnNpemU7CiAJc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYWRkciA9IDA7CiAKQEAgLTY5Niw3ICs2OTYsNyBAQAogCiAJaWYgKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEpIHsKIAkJc2FhNzEzNF9wZ3RhYmxlX2ZyZWUoZGV2LT5wY2ksICZkZXYtPmRtYXNvdW5kLnB0KTsKLQkJdmlkZW9idWZfc2dfZG1hX3VubWFwKCZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5kbWFzb3VuZC5kbWEpOworCQl2aWRlb2J1Zl9kbWFfdW5tYXAoJmRldi0+cGNpLT5kZXYsICZkZXYtPmRtYXNvdW5kLmRtYSk7CiAJCWRzcF9idWZmZXJfZnJlZShkZXYpOwogCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhID0gTlVMTDsKIAl9CkBAIC0xMDgwLDcgKzEwODAsNyBAQAogCS8qIENhcmQgImNyZWF0aW9uIiAqLwogCiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX3NhYTcxMzRfZnJlZTsKLQljaGlwID0gKHNuZF9jYXJkX3NhYTcxMzRfdCAqKSBjYXJkLT5wcml2YXRlX2RhdGE7CisJY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAogCXNwaW5fbG9ja19pbml0KCZjaGlwLT5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmY2hpcC0+bWl4ZXJfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwppbmRleCAwN2Y2YmI4Li5lYzY5N2ZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKQEAgLTU0NjIsNiArNTQ2MiwzMCBAQAogCQkJLmFtdXggPSBUViwKIAkJfSwKIAl9LAorCVtTQUE3MTM0X0JPQVJEX1RFQ0hOT1RSRU5EX0JVREdFVF9UMzAwMF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJUZWNob1RyZW5kIFRULWJ1ZGdldCBULTMwMDAiLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1REMTMxNiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyICAgICA9IDB4NjMsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCB8IFREQTk4ODdfUE9SVDFfQUNUSVZFLAorCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAorCQkuaW5wdXRzID0ge3sKKwkJCS5uYW1lICAgPSBuYW1lX3R2LAorCQkJLnZtdXggICA9IDMsCisJCQkuYW11eCAgID0gVFYsCisJCQkudHYgICAgID0gMSwKKwkJfSwgeworCQkJLm5hbWUgICA9IG5hbWVfY29tcDEsCisJCQkudm11eCAgID0gMCwKKwkJCS5hbXV4ICAgPSBMSU5FMiwKKwkJfSwgeworCQkJLm5hbWUgICA9IG5hbWVfc3ZpZGVvLAorCQkJLnZtdXggICA9IDgsCisJCQkuYW11eCAgID0gTElORTIsCisJCX0gfSwKKwl9LAogCiB9OwogCkBAIC02NjMxLDYgKzY2NTUsMTIgQEAKIAkJLnN1YmRldmljZSAgICA9IDB4NjY1NSwKIAkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfTEVBRFRFS19XSU5GQVNUX0RUVjEwMDBTLAogCX0sIHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAorCQkuc3VidmVuZG9yICAgID0gMHgxM2MyLAorCQkuc3ViZGV2aWNlICAgID0gMHgyODA0LAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9URUNITk9UUkVORF9CVURHRVRfVDMwMDAsCisJfSwgewogCQkvKiAtLS0gYm9hcmRzIHdpdGhvdXQgZWVwcm9tICsgc3Vic3lzdGVtIElEIC0tLSAqLwogCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAogCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzQsCkBAIC03MzIwLDYgKzczNTAsNyBAQAogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8zMDA6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FTVVNfRVVST1BBMl9IWUJSSUQ6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FTVVNfRVVST1BBX0hZQlJJRDoKKwljYXNlIFNBQTcxMzRfQk9BUkRfVEVDSE5PVFJFTkRfQlVER0VUX1QzMDAwOgogCXsKIAogCQkvKiBUaGUgUGhpbGlwcyBFVVJPUEEgYmFzZWQgaHlicmlkIGJvYXJkcyBoYXZlIHRoZSB0dW5lcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCmluZGV4IDkwZjIzMTguLjQwYmM2MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKQEAgLTI1Niw3ICsyNTYsNyBAQAogCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7CiAKIAl2aWRlb2J1Zl93YWl0b24oJmJ1Zi0+dmIsMCwwKTsKLQl2aWRlb2J1Zl9kbWFfdW5tYXAocSwgZG1hKTsKKwl2aWRlb2J1Zl9kbWFfdW5tYXAocS0+ZGV2LCBkbWEpOwogCXZpZGVvYnVmX2RtYV9mcmVlKGRtYSk7CiAJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCmluZGV4IDMxZTgyYmUuLmYyNmZlNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCkBAIC00ODEsNiArNDgxLDE3IEBACiAJLnJlcXVlc3RfZmlybXdhcmUgPSBwaGlsaXBzX3RkYTEwMDR4X3JlcXVlc3RfZmlybXdhcmUKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdGRhMTAwNHhfY29uZmlnIHRlY2hub3RyZW5kX2J1ZGdldF90MzAwMF9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDgsCisJLmludmVydCAgICAgICAgPSAxLAorCS5pbnZlcnRfb2NsayAgID0gMCwKKwkueHRhbF9mcmVxICAgICA9IFREQTEwMDQ2X1hUQUxfNE0sCisJLmFnY19jb25maWcgICAgPSBUREExMDA0Nl9BR0NfREVGQVVMVCwKKwkuaWZfZnJlcSAgICAgICA9IFREQTEwMDQ2X0ZSRVFfMzYxNywKKwkudHVuZXJfYWRkcmVzcyA9IDB4NjMsCisJLnJlcXVlc3RfZmlybXdhcmUgPSBwaGlsaXBzX3RkYTEwMDR4X3JlcXVlc3RfZmlybXdhcmUKK307CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogdGRhIDEwMDR4IGJhc2VkIGNhcmRzIHdpdGggcGhpbGlwcyBzaWxpY29uIHR1bmVyCiAgKi8KQEAgLTExNjgsNiArMTE3OSwxOCBAQAogCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IHBoaWxpcHNfdGQxMzE2X3R1bmVyX3NldF9wYXJhbXM7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX1RFQ0hOT1RSRU5EX0JVREdFVF9UMzAwMDoKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwKKwkJCQkJICAgICAgICZ0ZWNobm90cmVuZF9idWRnZXRfdDMwMDBfY29uZmlnLAorCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWRldi0+b3JpZ2luYWxfZGVtb2Rfc2xlZXAgPSBmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwOworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zbGVlcCA9IHBoaWxpcHNfZXVyb3BhX2RlbW9kX3NsZWVwOworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuaW5pdCA9IHBoaWxpcHNfZXVyb3BhX3R1bmVyX2luaXQ7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zbGVlcCA9IHBoaWxpcHNfZXVyb3BhX3R1bmVyX3NsZWVwOworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IHBoaWxpcHNfdGQxMzE2X3R1bmVyX3NldF9wYXJhbXM7CisJCX0KKwkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9EVkJUXzIwMDoKIAkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwKIAkJCQkJICAgICAgICZwaGlsaXBzX3R1MTIxNl82MV9jb25maWcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAppbmRleCA3NTZhMWNhLi5jMDQwYTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKQEAgLTMwNCw2ICszMDQsNyBAQAogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF9INyAgICAgICAgICAgICAxNzgKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9CRUhPTERfQTcgICAgICAgICAgICAgMTc5CiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX003MzNBICAgICAgIDE4MAorI2RlZmluZSBTQUE3MTM0X0JPQVJEX1RFQ0hOT1RSRU5EX0JVREdFVF9UMzAwMCAxODEKIAogI2RlZmluZSBTQUE3MTM0X01BWEJPQVJEUyAzMgogI2RlZmluZSBTQUE3MTM0X0lOUFVUX01BWCA4CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKaW5kZXggOTYxYmZhMi4uMmIyNGJkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYwpAQCAtNjMzLDYgKzYzMywxMiBAQAogCQljZHdkcl93aWR0aCAqPSAyOwogCX0KIAorCS8qIENTSTIgc3BlY2lhbCBjb25maWd1cmF0aW9uICovCisJaWYgKHBjZGV2LT5wZGF0YS0+Y3NpMl9kZXYpIHsKKwkJaW5fd2lkdGggPSAoKGluX3dpZHRoIC0gMikgKiAyKTsKKwkJbGVmdF9vZmZzZXQgKj0gMjsKKwl9CisKIAkvKiBTZXQgQ0FNT1IsIENBUFdSLCBDRlNaUiwgdGFrZSBjYXJlIG9mIENEV0RSICovCiAJY2Ftb3IgPSBsZWZ0X29mZnNldCB8ICh0b3Bfb2Zmc2V0IDw8IDE2KTsKIApAQCAtNzQzLDE2ICs3NDksMTYgQEAKIAljYXNlIFY0TDJfUElYX0ZNVF9OVjE2OgogCWNhc2UgVjRMMl9QSVhfRk1UX05WNjE6CiAJCXN3aXRjaCAoY2FtLT5jb2RlKSB7Ci0JCWNhc2UgVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDhfQkU6CisJCWNhc2UgVjRMMl9NQlVTX0ZNVF9VWVZZOF8yWDg6CiAJCQl2YWx1ZSA9IDB4MDAwMDAwMDA7IC8qIENiMCwgWTAsIENyMCwgWTEgKi8KIAkJCWJyZWFrOwotCQljYXNlIFY0TDJfTUJVU19GTVRfWVZZVThfMlg4X0JFOgorCQljYXNlIFY0TDJfTUJVU19GTVRfVllVWThfMlg4OgogCQkJdmFsdWUgPSAweDAwMDAwMTAwOyAvKiBDcjAsIFkwLCBDYjAsIFkxICovCiAJCQlicmVhazsKLQkJY2FzZSBWNEwyX01CVVNfRk1UX1lVWVY4XzJYOF9MRToKKwkJY2FzZSBWNEwyX01CVVNfRk1UX1lVWVY4XzJYODoKIAkJCXZhbHVlID0gMHgwMDAwMDIwMDsgLyogWTAsIENiMCwgWTEsIENyMCAqLwogCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9NQlVTX0ZNVF9ZVllVOF8yWDhfTEU6CisJCWNhc2UgVjRMMl9NQlVTX0ZNVF9ZVllVOF8yWDg6CiAJCQl2YWx1ZSA9IDB4MDAwMDAzMDA7IC8qIFkwLCBDcjAsIFkxLCBDYjAgKi8KIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtNzY3LDYgKzc3MywxMSBAQAogCXZhbHVlIHw9IGNvbW1vbl9mbGFncyAmIFNPQ0FNX1ZTWU5DX0FDVElWRV9MT1cgPyAxIDw8IDEgOiAwOwogCXZhbHVlIHw9IGNvbW1vbl9mbGFncyAmIFNPQ0FNX0hTWU5DX0FDVElWRV9MT1cgPyAxIDw8IDAgOiAwOwogCXZhbHVlIHw9IHBjZGV2LT5pc18xNmJpdCA/IDEgPDwgMTIgOiAwOworCisJLyogQ1NJMiBtb2RlICovCisJaWYgKHBjZGV2LT5wZGF0YS0+Y3NpMl9kZXYpCisJCXZhbHVlIHw9IDMgPDwgMTI7CisKIAljZXVfd3JpdGUocGNkZXYsIENBTUNSLCB2YWx1ZSk7CiAKIAljZXVfd3JpdGUocGNkZXYsIENBUENSLCAweDAwMzAwMDAwKTsKQEAgLTg4Myw2ICs4OTQsOCBAQAogewogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+ZGV2LnBhcmVudDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoZGV2KTsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OwogCWludCByZXQsIGssIG47CiAJaW50IGZvcm1hdHMgPSAwOwogCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2NhbSAqY2FtOwpAQCAtODk2LDE5ICs5MDksMTkgQEAKIAogCWZtdCA9IHNvY19tYnVzX2dldF9mbXRkZXNjKGNvZGUpOwogCWlmICghZm10KSB7Ci0JCWRldl9lcnIoaWNkLT5kZXYucGFyZW50LAotCQkJIkludmFsaWQgZm9ybWF0IGNvZGUgIyV1OiAlZFxuIiwgaWR4LCBjb2RlKTsKKwkJZGV2X2VycihkZXYsICJJbnZhbGlkIGZvcm1hdCBjb2RlICMldTogJWRcbiIsIGlkeCwgY29kZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJldCA9IHNoX21vYmlsZV9jZXVfdHJ5X2J1c19wYXJhbShpY2QsIGZtdC0+Yml0c19wZXJfc2FtcGxlKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIDA7CisJaWYgKCFwY2Rldi0+cGRhdGEtPmNzaTJfZGV2KSB7CisJCXJldCA9IHNoX21vYmlsZV9jZXVfdHJ5X2J1c19wYXJhbShpY2QsIGZtdC0+Yml0c19wZXJfc2FtcGxlKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gMDsKKwl9CiAKIAlpZiAoIWljZC0+aG9zdF9wcml2KSB7CiAJCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgbWY7CiAJCXN0cnVjdCB2NGwyX3JlY3QgcmVjdDsKLQkJc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5kZXYucGFyZW50OwogCQlpbnQgc2hpZnQgPSAwOwogCiAJCS8qIEZJWE1FOiBzdWJ3aW5kb3cgaXMgbG9zdCBiZXR3ZWVuIGNsb3NlIC8gb3BlbiAqLwpAQCAtOTI3LDcgKzk0MCw4IEBACiAJCQkvKiBUcnkgMjU2MHgxOTIwLCAxMjgweDk2MCwgNjQweDQ4MCwgMzIweDI0MCAqLwogCQkJbWYud2lkdGgJPSAyNTYwID4+IHNoaWZ0OwogCQkJbWYuaGVpZ2h0CT0gMTkyMCA+PiBzaGlmdDsKLQkJCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX21idXNfZm10LCAmbWYpOworCQkJcmV0ID0gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIoc2QtPnY0bDJfZGV2LCAwLCB2aWRlbywKKwkJCQkJCQkgc19tYnVzX2ZtdCwgJm1mKTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCXJldHVybiByZXQ7CiAJCQlzaGlmdCsrOwpAQCAtOTY1LDEwICs5NzksMTAgQEAKIAkJY2FtLT5leHRyYV9mbXQgPSBOVUxMOwogCiAJc3dpdGNoIChjb2RlKSB7Ci0JY2FzZSBWNEwyX01CVVNfRk1UX1lVWVY4XzJYOF9CRToKLQljYXNlIFY0TDJfTUJVU19GTVRfWVZZVThfMlg4X0JFOgotCWNhc2UgVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDhfTEU6Ci0JY2FzZSBWNEwyX01CVVNfRk1UX1lWWVU4XzJYOF9MRToKKwljYXNlIFY0TDJfTUJVU19GTVRfVVlWWThfMlg4OgorCWNhc2UgVjRMMl9NQlVTX0ZNVF9WWVVZOF8yWDg6CisJY2FzZSBWNEwyX01CVVNfRk1UX1lVWVY4XzJYODoKKwljYXNlIFY0TDJfTUJVU19GTVRfWVZZVThfMlg4OgogCQlpZiAoY2FtLT5leHRyYV9mbXQpCiAJCQlicmVhazsKIApAQCAtMTAwNSw3ICsxMDE5LDcgQEAKIAkJeGxhdGUtPmNvZGUJPSBjb2RlOwogCQl4bGF0ZSsrOwogCQlkZXZfZGJnKGRldiwgIlByb3ZpZGluZyBmb3JtYXQgJXMgaW4gcGFzcy10aHJvdWdoIG1vZGVcbiIsCi0JCQl4bGF0ZS0+aG9zdF9mbXQtPm5hbWUpOworCQkJZm10LT5uYW1lKTsKIAl9CiAKIAlyZXR1cm4gZm9ybWF0czsKQEAgLTEyMjgsNyArMTI0Miw4IEBACiAJc3RydWN0IHY0bDJfY3JvcGNhcCBjYXA7CiAJaW50IHJldDsKIAotCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX21idXNfZm10LCBtZik7CisJcmV0ID0gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIoc2QtPnY0bDJfZGV2LCAwLCB2aWRlbywKKwkJCQkJIHNfbWJ1c19mbXQsIG1mKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMTI1Nyw3ICsxMjcyLDggQEAKIAkJdG1wX2ggPSBtaW4oMiAqIHRtcF9oLCBtYXhfaGVpZ2h0KTsKIAkJbWYtPndpZHRoID0gdG1wX3c7CiAJCW1mLT5oZWlnaHQgPSB0bXBfaDsKLQkJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfbWJ1c19mbXQsIG1mKTsKKwkJcmV0ID0gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIoc2QtPnY0bDJfZGV2LCAwLCB2aWRlbywKKwkJCQkJCSBzX21idXNfZm10LCBtZik7CiAJCWRldl9nZW8oZGV2LCAiQ2FtZXJhIHNjYWxlZCB0byAldXgldVxuIiwKIAkJCW1mLT53aWR0aCwgbWYtPmhlaWdodCk7CiAJCWlmIChyZXQgPCAwKSB7CkBAIC0xNTE0LDcgKzE1MzAsOCBAQAogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+ZGV2LnBhcmVudDsKIAlfX3UzMiBwaXhmbXQgPSBwaXgtPnBpeGVsZm9ybWF0OwogCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGU7Ci0JdW5zaWduZWQgaW50IGNldV9zdWJfd2lkdGgsIGNldV9zdWJfaGVpZ2h0OworCS8qIEtlZXAgQ29tcGlsZXIgSGFwcHkgKi8KKwl1bnNpZ25lZCBpbnQgY2V1X3N1Yl93aWR0aCA9IDAsIGNldV9zdWJfaGVpZ2h0ID0gMDsKIAl1MTYgc2NhbGVfdiwgc2NhbGVfaDsKIAlpbnQgcmV0OwogCWJvb2wgaW1hZ2VfbW9kZTsKQEAgLTE1NjksOCArMTU4Niw4IEBACiAKIAkvKiBEb25lIHdpdGggdGhlIGNhbWVyYS4gTm93IHNlZSBpZiB3ZSBjYW4gaW1wcm92ZSB0aGUgcmVzdWx0ICovCiAKLQlkZXZfZ2VvKGRldiwgIkNhbWVyYSAlZCBmbXQgJXV4JXUsIHJlcXVlc3RlZCAldXgldVxuIiwKLQkJcmV0LCBtZi53aWR0aCwgbWYuaGVpZ2h0LCBwaXgtPndpZHRoLCBwaXgtPmhlaWdodCk7CisJZGV2X2dlbyhkZXYsICJmbXQgJXV4JXUsIHJlcXVlc3RlZCAldXgldVxuIiwKKwkJbWYud2lkdGgsIG1mLmhlaWdodCwgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0xNjM0LDYgKzE2NTEsOSBAQAogCWludCB3aWR0aCwgaGVpZ2h0OwogCWludCByZXQ7CiAKKwlkZXZfZ2VvKGljZC0+ZGV2LnBhcmVudCwgIlRSWV9GTVQocGl4PTB4JXgsICV1eCV1KVxuIiwKKwkJIHBpeGZtdCwgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOworCiAJeGxhdGUgPSBzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYyhpY2QsIHBpeGZtdCk7CiAJaWYgKCF4bGF0ZSkgewogCQlkZXZfd2FybihpY2QtPmRldi5wYXJlbnQsICJGb3JtYXQgJXggbm90IGZvdW5kXG4iLCBwaXhmbXQpOwpAQCAtMTY2MCw3ICsxNjgwLDcgQEAKIAltZi5jb2RlCQk9IHhsYXRlLT5jb2RlOwogCW1mLmNvbG9yc3BhY2UJPSBwaXgtPmNvbG9yc3BhY2U7CiAKLQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgdHJ5X21idXNfZm10LCAmbWYpOworCXJldCA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKHNkLT52NGwyX2RldiwgMCwgdmlkZW8sIHRyeV9tYnVzX2ZtdCwgJm1mKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMTY4NCw3ICsxNzA0LDggQEAKIAkJCSAqLwogCQkJbWYud2lkdGggPSAyNTYwOwogCQkJbWYuaGVpZ2h0ID0gMTkyMDsKLQkJCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCB0cnlfbWJ1c19mbXQsICZtZik7CisJCQlyZXQgPSB2NGwyX2RldmljZV9jYWxsX3VudGlsX2VycihzZC0+djRsMl9kZXYsIDAsIHZpZGVvLAorCQkJCQkJCSB0cnlfbWJ1c19mbXQsICZtZik7CiAJCQlpZiAocmV0IDwgMCkgewogCQkJCS8qIFNob3VsZG4ndCBhY3R1YWxseSBoYXBwZW4uLi4gKi8KIAkJCQlkZXZfZXJyKGljZC0+ZGV2LnBhcmVudCwKQEAgLTE2OTksNiArMTcyMCw5IEBACiAJCQlwaXgtPmhlaWdodCA9IGhlaWdodDsKIAl9CiAKKwlkZXZfZ2VvKGljZC0+ZGV2LnBhcmVudCwgIiVzKCk6IHJldHVybiAlZCwgZm10IDB4JXgsICV1eCV1XG4iLAorCQlfX2Z1bmNfXywgcmV0LCBwaXgtPnBpeGVsZm9ybWF0LCBwaXgtPndpZHRoLCBwaXgtPmhlaWdodCk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xODUzLDYgKzE4NzcsMzAgQEAKIAkubnVtX2NvbnRyb2xzCT0gQVJSQVlfU0laRShzaF9tb2JpbGVfY2V1X2NvbnRyb2xzKSwKIH07CiAKK3N0cnVjdCBidXNfd2FpdCB7CisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrCW5vdGlmaWVyOworCXN0cnVjdCBjb21wbGV0aW9uCWNvbXBsZXRpb247CisJc3RydWN0IGRldmljZQkJKmRldjsKK307CisKK3N0YXRpYyBpbnQgYnVzX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkgICAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhOworCXN0cnVjdCBidXNfd2FpdCAqd2FpdCA9IGNvbnRhaW5lcl9vZihuYiwgc3RydWN0IGJ1c193YWl0LCBub3RpZmllcik7CisKKwlpZiAod2FpdC0+ZGV2ICE9IGRldikKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIEJVU19OT1RJRllfVU5CT1VORF9EUklWRVI6CisJCS8qIFByb3RlY3QgZnJvbSBtb2R1bGUgdW5sb2FkaW5nICovCisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJndhaXQtPmNvbXBsZXRpb24pOworCQlyZXR1cm4gTk9USUZZX09LOworCX0KKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNoX21vYmlsZV9jZXVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2OwpAQCAtMTg2MCw2ICsxOTA4LDExIEBACiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCXVuc2lnbmVkIGludCBpcnE7CiAJaW50IGVyciA9IDA7CisJc3RydWN0IGJ1c193YWl0IHdhaXQgPSB7CisJCS5jb21wbGV0aW9uID0gQ09NUExFVElPTl9JTklUSUFMSVpFUl9PTlNUQUNLKHdhaXQuY29tcGxldGlvbiksCisJCS5ub3RpZmllci5ub3RpZmllcl9jYWxsID0gYnVzX25vdGlmeSwKKwl9OworCXN0cnVjdCBkZXZpY2UgKmNzaTI7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CkBAIC0xOTMxLDEyICsxOTg0LDU0IEBACiAJcGNkZXYtPmljaS5kcnZfbmFtZSA9IGRldl9uYW1lKCZwZGV2LT5kZXYpOwogCXBjZGV2LT5pY2kub3BzID0gJnNoX21vYmlsZV9jZXVfaG9zdF9vcHM7CiAKKwkvKiBDU0kyIGludGVyZmFjaW5nICovCisJY3NpMiA9IHBjZGV2LT5wZGF0YS0+Y3NpMl9kZXY7CisJaWYgKGNzaTIpIHsKKwkJd2FpdC5kZXYgPSBjc2kyOworCisJCWVyciA9IGJ1c19yZWdpc3Rlcl9ub3RpZmllcigmcGxhdGZvcm1fYnVzX3R5cGUsICZ3YWl0Lm5vdGlmaWVyKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGV4aXRfZnJlZV9jbGs7CisKKwkJLyoKKwkJICogRnJvbSB0aGlzIHBvaW50IHRoZSBkcml2ZXIgbW9kdWxlIHdpbGwgbm90IHVubG9hZCwgdW50aWwKKwkJICogd2UgY29tcGxldGUgdGhlIGNvbXBsZXRpb24uCisJCSAqLworCisJCWlmICghY3NpMi0+ZHJpdmVyIHx8ICFjc2kyLT5kcml2ZXItPm93bmVyKSB7CisJCQljb21wbGV0ZSgmd2FpdC5jb21wbGV0aW9uKTsKKwkJCS8qIEVpdGhlciB0b28gbGF0ZSwgb3IgcHJvYmluZyBmYWlsZWQgKi8KKwkJCWJ1c191bnJlZ2lzdGVyX25vdGlmaWVyKCZwbGF0Zm9ybV9idXNfdHlwZSwgJndhaXQubm90aWZpZXIpOworCQkJZXJyID0gLUVOWElPOworCQkJZ290byBleGl0X2ZyZWVfY2xrOworCQl9CisKKwkJLyoKKwkJICogVGhlIG1vZHVsZSBpcyBzdGlsbCBsb2FkZWQsIGluIHRoZSB3b3JzdCBjYXNlIGl0IGlzIGhhbmdpbmcKKwkJICogaW4gZGV2aWNlIHJlbGVhc2Ugb24gb3VyIGNvbXBsZXRpb24uIFNvLCBfbm93XyBkZXJlZmVyZW5jaW5nCisJCSAqIHRoZSAib3duZXIiIGlzIHNhZmUhCisJCSAqLworCisJCWVyciA9IHRyeV9tb2R1bGVfZ2V0KGNzaTItPmRyaXZlci0+b3duZXIpOworCisJCS8qIExldCBub3RpZmllciBjb21wbGV0ZSwgaWYgaXQgaGFzIGJlZW4gbG9ja2VkICovCisJCWNvbXBsZXRlKCZ3YWl0LmNvbXBsZXRpb24pOworCQlidXNfdW5yZWdpc3Rlcl9ub3RpZmllcigmcGxhdGZvcm1fYnVzX3R5cGUsICZ3YWl0Lm5vdGlmaWVyKTsKKwkJaWYgKCFlcnIpIHsKKwkJCWVyciA9IC1FTk9ERVY7CisJCQlnb3RvIGV4aXRfZnJlZV9jbGs7CisJCX0KKwl9CisKIAllcnIgPSBzb2NfY2FtZXJhX2hvc3RfcmVnaXN0ZXIoJnBjZGV2LT5pY2kpOwogCWlmIChlcnIpCi0JCWdvdG8gZXhpdF9mcmVlX2NsazsKKwkJZ290byBleGl0X21vZHVsZV9wdXQ7CiAKIAlyZXR1cm4gMDsKIAorZXhpdF9tb2R1bGVfcHV0OgorCWlmIChjc2kyICYmIGNzaTItPmRyaXZlcikKKwkJbW9kdWxlX3B1dChjc2kyLT5kcml2ZXItPm93bmVyKTsKIGV4aXRfZnJlZV9jbGs6CiAJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwogCWZyZWVfaXJxKHBjZGV2LT5pcnEsIHBjZGV2KTsKQEAgLTE5NTYsNiArMjA1MSw3IEBACiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqc29jX2hvc3QgPSB0b19zb2NfY2FtZXJhX2hvc3QoJnBkZXYtPmRldik7CiAJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGNvbnRhaW5lcl9vZihzb2NfaG9zdCwKIAkJCQkJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2LCBpY2kpOworCXN0cnVjdCBkZXZpY2UgKmNzaTIgPSBwY2Rldi0+cGRhdGEtPmNzaTJfZGV2OwogCiAJc29jX2NhbWVyYV9ob3N0X3VucmVnaXN0ZXIoc29jX2hvc3QpOwogCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKQEAgLTE5NjMsNyArMjA1OSwxMCBAQAogCWlmIChwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpKQogCQlkbWFfcmVsZWFzZV9kZWNsYXJlZF9tZW1vcnkoJnBkZXYtPmRldik7CiAJaW91bm1hcChwY2Rldi0+YmFzZSk7CisJaWYgKGNzaTIgJiYgY3NpMi0+ZHJpdmVyKQorCQltb2R1bGVfcHV0KGNzaTItPmRyaXZlci0+b3duZXIpOwogCWtmcmVlKHBjZGV2KTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xOTk1LDYgKzIwOTQsOCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzaF9tb2JpbGVfY2V1X2luaXQodm9pZCkKIHsKKwkvKiBXaGF0ZXZlciByZXR1cm4gY29kZSAqLworCXJlcXVlc3RfbW9kdWxlKCJzaF9tb2JpbGVfY3NpMiIpOwogCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNoX21vYmlsZV9jZXVfZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY3NpMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY3NpMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YTY0NjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jc2kyLmMKQEAgLTAsMCArMSwzNTQgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBTSC1Nb2JpbGUgTUlQSSBDU0ktMiB1bml0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHdWVubmFkaSBMaWFraG92ZXRza2kgPGcubGlha2hvdmV0c2tpQGdteC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKworI2luY2x1ZGUgPG1lZGlhL3NoX21vYmlsZV9jc2kyLmg+CisjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXYuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItbWVkaWFidXMuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLXN1YmRldi5oPgorCisjZGVmaW5lIFNIX0NTSTJfVFJFRgkweDAwCisjZGVmaW5lIFNIX0NTSTJfU1JTVAkweDA0CisjZGVmaW5lIFNIX0NTSTJfUEhZQ05UCTB4MDgKKyNkZWZpbmUgU0hfQ1NJMl9DSEtTVU0JMHgwQworI2RlZmluZSBTSF9DU0kyX1ZDRFQJMHgxMAorCitzdHJ1Y3Qgc2hfY3NpMiB7CisJc3RydWN0IHY0bDJfc3ViZGV2CQlzdWJkZXY7CisJc3RydWN0IGxpc3RfaGVhZAkJbGlzdDsKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sJCW5vdGlmaWVyOworCXVuc2lnbmVkIGludAkJCWlycTsKKwl2b2lkIF9faW9tZW0JCQkqYmFzZTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqcGRldjsKKwlzdHJ1Y3Qgc2hfY3NpMl9jbGllbnRfY29uZmlnCSpjbGllbnQ7Cit9OworCitzdGF0aWMgaW50IHNoX2NzaTJfdHJ5X2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWYpCit7CisJc3RydWN0IHNoX2NzaTIgKnByaXYgPSBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBzaF9jc2kyLCBzdWJkZXYpOworCXN0cnVjdCBzaF9jc2kyX3BkYXRhICpwZGF0YSA9IHByaXYtPnBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJaWYgKG1mLT53aWR0aCA+IDgxODgpCisJCW1mLT53aWR0aCA9IDgxODg7CisJZWxzZSBpZiAobWYtPndpZHRoICYgMSkKKwkJbWYtPndpZHRoICY9IH4xOworCisJc3dpdGNoIChwZGF0YS0+dHlwZSkgeworCWNhc2UgU0hfQ1NJMkM6CisJCXN3aXRjaCAobWYtPmNvZGUpIHsKKwkJY2FzZSBWNEwyX01CVVNfRk1UX1VZVlk4XzJYODoJCS8qIFlVVjQyMiAqLworCQljYXNlIFY0TDJfTUJVU19GTVRfWVVZVjhfMV81WDg6CQkvKiBZVVY0MjAgKi8KKwkJY2FzZSBWNEwyX01CVVNfRk1UX0dSRVk4XzFYODoJCS8qIFJBVzggKi8KKwkJY2FzZSBWNEwyX01CVVNfRk1UX1NCR0dSOF8xWDg6CisJCWNhc2UgVjRMMl9NQlVTX0ZNVF9TR1JCRzhfMVg4OgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBBbGwgTUlQSSBDU0ktMiBkZXZpY2VzIG11c3Qgc3VwcG9ydCBvbmUgb2YgcHJpbWFyeSBmb3JtYXRzICovCisJCQltZi0+Y29kZSA9IFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4OworCQl9CisJCWJyZWFrOworCWNhc2UgU0hfQ1NJMkk6CisJCXN3aXRjaCAobWYtPmNvZGUpIHsKKwkJY2FzZSBWNEwyX01CVVNfRk1UX0dSRVk4XzFYODoJCS8qIFJBVzggKi8KKwkJY2FzZSBWNEwyX01CVVNfRk1UX1NCR0dSOF8xWDg6CisJCWNhc2UgVjRMMl9NQlVTX0ZNVF9TR1JCRzhfMVg4OgorCQljYXNlIFY0TDJfTUJVU19GTVRfU0JHR1IxMF8xWDEwOgkvKiBSQVcxMCAqLworCQljYXNlIFY0TDJfTUJVU19GTVRfU0JHR1IxMl8xWDEyOgkvKiBSQVcxMiAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBBbGwgTUlQSSBDU0ktMiBkZXZpY2VzIG11c3Qgc3VwcG9ydCBvbmUgb2YgcHJpbWFyeSBmb3JtYXRzICovCisJCQltZi0+Y29kZSA9IFY0TDJfTUJVU19GTVRfU0JHR1I4XzFYODsKKwkJfQorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdlIGhhdmUgZG9uZSBvdXIgYmVzdCBpbiB0cnlfZm10IHRvIHRyeSBhbmQgdGVsbCB0aGUgc2Vuc29yLCB3aGljaCBmb3JtYXRzCisgKiB3ZSBzdXBwb3J0LiBJZiBub3cgdGhlIGNvbmZpZ3VyYXRpb24gaXMgdW5zdWl0YWJsZSBmb3IgdXMgd2UgY2FuIG9ubHkKKyAqIGVycm9yIG91dC4KKyAqLworc3RhdGljIGludCBzaF9jc2kyX3NfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWYpCit7CisJc3RydWN0IHNoX2NzaTIgKnByaXYgPSBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBzaF9jc2kyLCBzdWJkZXYpOworCXUzMiB0bXAgPSAocHJpdi0+Y2xpZW50LT5jaGFubmVsICYgMykgPDwgODsKKworCWRldl9kYmcoc2QtPnY0bDJfZGV2LT5kZXYsICIlcygldSlcbiIsIF9fZnVuY19fLCBtZi0+Y29kZSk7CisJaWYgKG1mLT53aWR0aCA+IDgxODggfHwgbWYtPndpZHRoICYgMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKG1mLT5jb2RlKSB7CisJY2FzZSBWNEwyX01CVVNfRk1UX1VZVlk4XzJYODoKKwkJdG1wIHw9IDB4MWU7CS8qIFlVVjQyMiA4IGJpdCAqLworCQlicmVhazsKKwljYXNlIFY0TDJfTUJVU19GTVRfWVVZVjhfMV81WDg6CisJCXRtcCB8PSAweDE4OwkvKiBZVVY0MjAgOCBiaXQgKi8KKwkJYnJlYWs7CisJY2FzZSBWNEwyX01CVVNfRk1UX1JHQjU1NV8yWDhfUEFESElfQkU6CisJCXRtcCB8PSAweDIxOwkvKiBSR0I1NTUgKi8KKwkJYnJlYWs7CisJY2FzZSBWNEwyX01CVVNfRk1UX1JHQjU2NV8yWDhfQkU6CisJCXRtcCB8PSAweDIyOwkvKiBSR0I1NjUgKi8KKwkJYnJlYWs7CisJY2FzZSBWNEwyX01CVVNfRk1UX0dSRVk4XzFYODoKKwljYXNlIFY0TDJfTUJVU19GTVRfU0JHR1I4XzFYODoKKwljYXNlIFY0TDJfTUJVU19GTVRfU0dSQkc4XzFYODoKKwkJdG1wIHw9IDB4MmE7CS8qIFJBVzggKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaW93cml0ZTMyKHRtcCwgcHJpdi0+YmFzZSArIFNIX0NTSTJfVkNEVCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgc2hfY3NpMl9zdWJkZXZfdmlkZW9fb3BzID0geworCS5zX21idXNfZm10CT0gc2hfY3NpMl9zX2ZtdCwKKwkudHJ5X21idXNfZm10CT0gc2hfY3NpMl90cnlfZm10LAorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBzaF9jc2kyX3N1YmRldl9jb3JlX29wczsKKworc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgc2hfY3NpMl9zdWJkZXZfb3BzID0geworCS5jb3JlCT0gJnNoX2NzaTJfc3ViZGV2X2NvcmVfb3BzLAorCS52aWRlbwk9ICZzaF9jc2kyX3N1YmRldl92aWRlb19vcHMsCit9OworCitzdGF0aWMgdm9pZCBzaF9jc2kyX2h3aW5pdChzdHJ1Y3Qgc2hfY3NpMiAqcHJpdikKK3sKKwlzdHJ1Y3Qgc2hfY3NpMl9wZGF0YSAqcGRhdGEgPSBwcml2LT5wZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlfX3UzMiB0bXAgPSAweDEwOyAvKiBFbmFibGUgTUlQSSBDU0kgY2xvY2sgbGFuZSAqLworCisJLyogUmVmbGVjdCByZWdpc3RlcnMgaW1tZWRpYXRlbHkgKi8KKwlpb3dyaXRlMzIoMHgwMDAwMDAwMSwgcHJpdi0+YmFzZSArIFNIX0NTSTJfVFJFRik7CisJLyogcmVzZXQgQ1NJMiBoYXJ3YXJlICovCisJaW93cml0ZTMyKDB4MDAwMDAwMDEsIHByaXYtPmJhc2UgKyBTSF9DU0kyX1NSU1QpOworCXVkZWxheSg1KTsKKwlpb3dyaXRlMzIoMHgwMDAwMDAwMCwgcHJpdi0+YmFzZSArIFNIX0NTSTJfU1JTVCk7CisKKwlpZiAocHJpdi0+Y2xpZW50LT5sYW5lcyAmIDMpCisJCXRtcCB8PSBwcml2LT5jbGllbnQtPmxhbmVzICYgMzsKKwllbHNlCisJCS8qIERlZmF1bHQgLSBib3RoIGxhbmVzICovCisJCXRtcCB8PSAzOworCisJaWYgKHByaXYtPmNsaWVudC0+cGh5ID09IFNIX0NTSTJfUEhZX01BSU4pCisJCXRtcCB8PSAweDgwMDA7CisKKwlpb3dyaXRlMzIodG1wLCBwcml2LT5iYXNlICsgU0hfQ1NJMl9QSFlDTlQpOworCisJdG1wID0gMDsKKwlpZiAocGRhdGEtPmZsYWdzICYgU0hfQ1NJMl9FQ0MpCisJCXRtcCB8PSAyOworCWlmIChwZGF0YS0+ZmxhZ3MgJiBTSF9DU0kyX0NSQykKKwkJdG1wIHw9IDE7CisJaW93cml0ZTMyKHRtcCwgcHJpdi0+YmFzZSArIFNIX0NTSTJfQ0hLU1VNKTsKK30KKworc3RhdGljIGludCBzaF9jc2kyX3NldF9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNoX2NzaTJfcXVlcnlfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfAorCQlTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwKKwkJU09DQU1fTUFTVEVSIHwgU09DQU1fREFUQVdJRFRIXzggfCBTT0NBTV9EQVRBX0FDVElWRV9ISUdIOworCisJcmV0dXJuIHNvY19jYW1lcmFfYXBwbHlfc2Vuc29yX2ZsYWdzKGljbCwgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHNoX2NzaTJfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGE7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSB0b19zb2NfY2FtZXJhX2RldihkZXYpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2LT5wYXJlbnQpOworCXN0cnVjdCBzaF9jc2kyICpwcml2ID0KKwkJY29udGFpbmVyX29mKG5iLCBzdHJ1Y3Qgc2hfY3NpMiwgbm90aWZpZXIpOworCXN0cnVjdCBzaF9jc2kyX3BkYXRhICpwZGF0YSA9IHByaXYtPnBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWludCByZXQsIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9jbGllbnRzOyBpKyspCisJCWlmICgmcGRhdGEtPmNsaWVudHNbaV0ucGRldi0+ZGV2ID09IGljZC0+cGRldikKKwkJCWJyZWFrOworCisJZGV2X2RiZyhkZXYsICIlcyglcCk6IGFjdGlvbiA9ICVsdSwgZm91bmQgIyVkXG4iLCBfX2Z1bmNfXywgZGV2LCBhY3Rpb24sIGkpOworCisJaWYgKGkgPT0gcGRhdGEtPm51bV9jbGllbnRzKQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgQlVTX05PVElGWV9CT1VORF9EUklWRVI6CisJCXNucHJpbnRmKHByaXYtPnN1YmRldi5uYW1lLCBWNEwyX1NVQkRFVl9OQU1FX1NJWkUsICIlcyVzIiwKKwkJCSBkZXZfbmFtZSh2NGwyX2Rldi0+ZGV2KSwgIi5taXBpLWNzaSIpOworCQlyZXQgPSB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYodjRsMl9kZXYsICZwcml2LT5zdWJkZXYpOworCQlkZXZfZGJnKGRldiwgIiVzKCVwKTogcmV0KHJlZ2lzdGVyX3N1YmRldikgPSAlZFxuIiwgX19mdW5jX18sIHByaXYsIHJldCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIE5PVElGWV9ET05FOworCisJCXByaXYtPmNsaWVudCA9IHBkYXRhLT5jbGllbnRzICsgaTsKKworCQlpY2QtPm9wcy0+c2V0X2J1c19wYXJhbQkJPSBzaF9jc2kyX3NldF9idXNfcGFyYW07CisJCWljZC0+b3BzLT5xdWVyeV9idXNfcGFyYW0JPSBzaF9jc2kyX3F1ZXJ5X2J1c19wYXJhbTsKKworCQlwbV9ydW50aW1lX2dldF9zeW5jKHY0bDJfZ2V0X3N1YmRldmRhdGEoJnByaXYtPnN1YmRldikpOworCisJCXNoX2NzaTJfaHdpbml0KHByaXYpOworCQlicmVhazsKKwljYXNlIEJVU19OT1RJRllfVU5CSU5EX0RSSVZFUjoKKwkJcHJpdi0+Y2xpZW50ID0gTlVMTDsKKworCQkvKiBEcml2ZXIgaXMgYWJvdXQgdG8gYmUgdW5ib3VuZCAqLworCQlpY2QtPm9wcy0+c2V0X2J1c19wYXJhbQkJPSBOVUxMOworCQlpY2QtPm9wcy0+cXVlcnlfYnVzX3BhcmFtCT0gTlVMTDsKKworCQl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldigmcHJpdi0+c3ViZGV2KTsKKworCQlwbV9ydW50aW1lX3B1dCh2NGwyX2dldF9zdWJkZXZkYXRhKCZwcml2LT5zdWJkZXYpKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworc3RhdGljIF9fZGV2aW5pdCBpbnQgc2hfY3NpMl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXVuc2lnbmVkIGludCBpcnE7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc2hfY3NpMiAqcHJpdjsKKwkvKiBQbGF0Zm9ybSBkYXRhIHNwZWNpZnkgdGhlIFBIWSwgbGFuZXMsIEVDQywgQ1JDICovCisJc3RydWN0IHNoX2NzaTJfcGRhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCS8qIEludGVycnVwdCB1bnVzZWQgc28gZmFyICovCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKworCWlmICghcmVzIHx8IChpbnQpaXJxIDw9IDAgfHwgIXBkYXRhKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vdCBlbm91Z2ggQ1NJMiBwbGF0Zm9ybSByZXNvdXJjZXMuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogVE9ETzogQWRkIHN1cHBvcnQgZm9yIENTSTJJLiBDYXJlZnVsOiBkaWZmZXJlbnQgcmVnaXN0ZXIgbGF5b3V0ISAqLworCWlmIChwZGF0YS0+dHlwZSAhPSBTSF9DU0kyQykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJPbmx5IENTSTJDIHN1cHBvcnRlZCBBVE0uXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzaF9jc2kyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaXYtPmlycSA9IGlycTsKKwlwcml2LT5ub3RpZmllci5ub3RpZmllcl9jYWxsID0gc2hfY3NpMl9ub3RpZnk7CisKKwkvKiBXZSBNVVNUIGF0dGFjaCBhZnRlciB0aGUgTUlQSSBzZW5zb3IgKi8KKwlyZXQgPSBidXNfcmVnaXN0ZXJfbm90aWZpZXIoJnNvY19jYW1lcmFfYnVzX3R5cGUsICZwcml2LT5ub3RpZmllcik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ1NJMiBjYW5ub3QgcmVnaXN0ZXIgbm90aWZpZXJcbiIpOworCQlnb3RvIGVybm90aWZ5OworCX0KKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwgcGRldi0+bmFtZSkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ1NJMiByZWdpc3RlciByZWdpb24gYWxyZWFkeSBjbGFpbWVkXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVyZXFyZWc7CisJfQorCisJcHJpdi0+YmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIXByaXYtPmJhc2UpIHsKKwkJcmV0ID0gLUVOWElPOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gaW9yZW1hcCBDU0kyIHJlZ2lzdGVycy5cbiIpOworCQlnb3RvIGVyZW1hcDsKKwl9CisKKwlwcml2LT5wZGV2ID0gcGRldjsKKworCXY0bDJfc3ViZGV2X2luaXQoJnByaXYtPnN1YmRldiwgJnNoX2NzaTJfc3ViZGV2X29wcyk7CisJdjRsMl9zZXRfc3ViZGV2ZGF0YSgmcHJpdi0+c3ViZGV2LCAmcGRldi0+ZGV2KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpOworCisJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJDU0kyIHByb2JlZC5cbiIpOworCisJcmV0dXJuIDA7CisKK2VyZW1hcDoKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKK2VyZXFyZWc6CisJYnVzX3VucmVnaXN0ZXJfbm90aWZpZXIoJnNvY19jYW1lcmFfYnVzX3R5cGUsICZwcml2LT5ub3RpZmllcik7Citlcm5vdGlmeToKKwlrZnJlZShwcml2KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBfX2RldmV4aXQgaW50IHNoX2NzaTJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNoX2NzaTIgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisKKwlidXNfdW5yZWdpc3Rlcl9ub3RpZmllcigmc29jX2NhbWVyYV9idXNfdHlwZSwgJnByaXYtPm5vdGlmaWVyKTsKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CisJaW91bm1hcChwcml2LT5iYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlrZnJlZShwcml2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBfX3JlZmRhdGEgc2hfY3NpMl9wZHJ2ID0geworCS5yZW1vdmUgID0gX19kZXZleGl0X3Aoc2hfY3NpMl9yZW1vdmUpLAorCS5kcml2ZXIgID0geworCQkubmFtZQk9ICJzaC1tb2JpbGUtY3NpMiIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzaF9jc2kyX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZzaF9jc2kyX3BkcnYsIHNoX2NzaTJfcHJvYmUpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2hfY3NpMl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNoX2NzaTJfcGRydik7Cit9CisKK21vZHVsZV9pbml0KHNoX2NzaTJfaW5pdCk7Cittb2R1bGVfZXhpdChzaF9jc2kyX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlNILU1vYmlsZSBNSVBJIENTSS0yIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiR3Vlbm5hZGkgTGlha2hvdmV0c2tpIDxnLmxpYWtob3ZldHNraUBnbXguZGU+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnNoLW1vYmlsZS1jc2kyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX3ZvdS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF92b3UuYwppbmRleCBmNWI4OTJhLi5kMzk0MTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX3ZvdS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfdm91LmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KIApAQCAtNTcsNyArNTgsNyBAQAogfTsKIAogI2RlZmluZSBWT1VfTUFYX0lNQUdFX1dJRFRICTcyMAotI2RlZmluZSBWT1VfTUFYX0lNQUdFX0hFSUdIVAk0ODAKKyNkZWZpbmUgVk9VX01BWF9JTUFHRV9IRUlHSFQJNTc2CiAKIHN0cnVjdCBzaF92b3VfZGV2aWNlIHsKIAlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CkBAIC01MjcsMjAgKzUyOCwxNyBAQAogc3RhdGljIHZvaWQgdm91X2FkanVzdF9pbnB1dChzdHJ1Y3Qgc2hfdm91X2dlb21ldHJ5ICpnZW8sIHY0bDJfc3RkX2lkIHN0ZCkKIHsKIAkvKiBUaGUgY29tcGlsZXIgY2Fubm90IGtub3csIHRoYXQgYmVzdCBhbmQgaWR4IHdpbGwgaW5kZWVkIGJlIHNldCAqLwotCXVuc2lnbmVkIGludCBiZXN0X2VyciA9IFVJTlRfTUFYLCBiZXN0ID0gMCwgd2lkdGhfbWF4LCBoZWlnaHRfbWF4OworCXVuc2lnbmVkIGludCBiZXN0X2VyciA9IFVJTlRfTUFYLCBiZXN0ID0gMCwgaW1nX2hlaWdodF9tYXg7CiAJaW50IGksIGlkeCA9IDA7CiAKLQlpZiAoc3RkICYgVjRMMl9TVERfNTI1XzYwKSB7Ci0JCXdpZHRoX21heCA9IDg1ODsKLQkJaGVpZ2h0X21heCA9IDI2MjsKLQl9IGVsc2UgewotCQl3aWR0aF9tYXggPSA4NjQ7Ci0JCWhlaWdodF9tYXggPSAzMTI7Ci0JfQorCWlmIChzdGQgJiBWNEwyX1NURF81MjVfNjApCisJCWltZ19oZWlnaHRfbWF4ID0gNDgwOworCWVsc2UKKwkJaW1nX2hlaWdodF9tYXggPSA1NzY7CiAKIAkvKiBJbWFnZSB3aWR0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCAqLwogCXY0bF9ib3VuZF9hbGlnbl9pbWFnZSgmZ2VvLT5pbl93aWR0aCwgMCwgVk9VX01BWF9JTUFHRV9XSURUSCwgMiwKLQkJCSAgICAgICZnZW8tPmluX2hlaWdodCwgMCwgVk9VX01BWF9JTUFHRV9IRUlHSFQsIDEsIDApOworCQkJICAgICAgJmdlby0+aW5faGVpZ2h0LCAwLCBpbWdfaGVpZ2h0X21heCwgMSwgMCk7CiAKIAkvKiBTZWxlY3Qgc2NhbGVzIHRvIGNvbWUgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhlIG91dHB1dCBpbWFnZSAqLwogCWZvciAoaSA9IEFSUkFZX1NJWkUodm91X3NjYWxlX2hfbnVtKSAtIDE7IGkgPj0gMDsgaS0tKSB7CkBAIC01NzMsNyArNTcxLDcgQEAKIAkJdW5zaWduZWQgaW50IGZvdW5kID0gZ2VvLT5vdXRwdXQuaGVpZ2h0ICogdm91X3NjYWxlX3ZfZGVuW2ldIC8KIAkJCXZvdV9zY2FsZV92X251bVtpXTsKIAotCQlpZiAoZm91bmQgPiBWT1VfTUFYX0lNQUdFX0hFSUdIVCkKKwkJaWYgKGZvdW5kID4gaW1nX2hlaWdodF9tYXgpCiAJCQkvKiBzY2FsZXMgaW5jcmVhc2UgKi8KIAkJCWJyZWFrOwogCkBAIC01OTcsMTUgKzU5NSwxOCBAQAogICovCiBzdGF0aWMgdm9pZCB2b3VfYWRqdXN0X291dHB1dChzdHJ1Y3Qgc2hfdm91X2dlb21ldHJ5ICpnZW8sIHY0bDJfc3RkX2lkIHN0ZCkKIHsKLQl1bnNpZ25lZCBpbnQgYmVzdF9lcnIgPSBVSU5UX01BWCwgYmVzdCwgd2lkdGhfbWF4LCBoZWlnaHRfbWF4OworCXVuc2lnbmVkIGludCBiZXN0X2VyciA9IFVJTlRfTUFYLCBiZXN0LCB3aWR0aF9tYXgsIGhlaWdodF9tYXgsCisJCWltZ19oZWlnaHRfbWF4OwogCWludCBpLCBpZHg7CiAKIAlpZiAoc3RkICYgVjRMMl9TVERfNTI1XzYwKSB7CiAJCXdpZHRoX21heCA9IDg1ODsKIAkJaGVpZ2h0X21heCA9IDI2MiAqIDI7CisJCWltZ19oZWlnaHRfbWF4ID0gNDgwOwogCX0gZWxzZSB7CiAJCXdpZHRoX21heCA9IDg2NDsKIAkJaGVpZ2h0X21heCA9IDMxMiAqIDI7CisJCWltZ19oZWlnaHRfbWF4ID0gNTc2OwogCX0KIAogCS8qIFNlbGVjdCBzY2FsZXMgdG8gY29tZSBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aGUgb3V0cHV0IGltYWdlICovCkBAIC02NDQsNyArNjQ1LDcgQEAKIAkJdW5zaWduZWQgaW50IGZvdW5kID0gZ2VvLT5pbl9oZWlnaHQgKiB2b3Vfc2NhbGVfdl9udW1baV0gLwogCQkJdm91X3NjYWxlX3ZfZGVuW2ldOwogCi0JCWlmIChmb3VuZCA+IFZPVV9NQVhfSU1BR0VfSEVJR0hUKQorCQlpZiAoZm91bmQgPiBpbWdfaGVpZ2h0X21heCkKIAkJCS8qIHNjYWxlcyBpbmNyZWFzZSAqLwogCQkJYnJlYWs7CiAKQEAgLTY3MywxMSArNjc0LDEyIEBACiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CiAJc3RydWN0IHNoX3ZvdV9kZXZpY2UgKnZvdV9kZXYgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZm10LT5mbXQucGl4OworCXVuc2lnbmVkIGludCBpbWdfaGVpZ2h0X21heDsKIAlpbnQgcGl4X2lkeDsKIAlzdHJ1Y3Qgc2hfdm91X2dlb21ldHJ5IGdlbzsKIAlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IG1iZm10ID0gewogCQkvKiBSZXZpc2l0OiBpcyB0aGlzIHRoZSBjb3JyZWN0IGNvZGU/ICovCi0JCS5jb2RlID0gVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDhfTEUsCisJCS5jb2RlID0gVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDgsCiAJCS5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRCwKIAkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNLAogCX07CkBAIC03MDEsOSArNzAzLDE0IEBACiAJaWYgKHBpeF9pZHggPT0gQVJSQVlfU0laRSh2b3VfZm10KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAodm91X2Rldi0+c3RkICYgVjRMMl9TVERfNTI1XzYwKQorCQlpbWdfaGVpZ2h0X21heCA9IDQ4MDsKKwllbHNlCisJCWltZ19oZWlnaHRfbWF4ID0gNTc2OworCiAJLyogSW1hZ2Ugd2lkdGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQgKi8KIAl2NGxfYm91bmRfYWxpZ25faW1hZ2UoJnBpeC0+d2lkdGgsIDAsIFZPVV9NQVhfSU1BR0VfV0lEVEgsIDIsCi0JCQkgICAgICAmcGl4LT5oZWlnaHQsIDAsIFZPVV9NQVhfSU1BR0VfSEVJR0hULCAxLCAwKTsKKwkJCSAgICAgICZwaXgtPmhlaWdodCwgMCwgaW1nX2hlaWdodF9tYXgsIDEsIDApOwogCiAJZ2VvLmluX3dpZHRoID0gcGl4LT53aWR0aDsKIAlnZW8uaW5faGVpZ2h0ID0gcGl4LT5oZWlnaHQ7CkBAIC03MjQsOCArNzMxLDggQEAKIAogCS8qIFNhbml0eSBjaGVja3MgKi8KIAlpZiAoKHVuc2lnbmVkKW1iZm10LndpZHRoID4gVk9VX01BWF9JTUFHRV9XSURUSCB8fAotCSAgICAodW5zaWduZWQpbWJmbXQuaGVpZ2h0ID4gVk9VX01BWF9JTUFHRV9IRUlHSFQgfHwKLQkgICAgbWJmbXQuY29kZSAhPSBWNEwyX01CVVNfRk1UX1lVWVY4XzJYOF9MRSkKKwkgICAgKHVuc2lnbmVkKW1iZm10LmhlaWdodCA+IGltZ19oZWlnaHRfbWF4IHx8CisJICAgIG1iZm10LmNvZGUgIT0gVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDgpCiAJCXJldHVybiAtRUlPOwogCiAJaWYgKG1iZm10LndpZHRoICE9IGdlby5vdXRwdXQud2lkdGggfHwKQEAgLTkzNiwxMCArOTQzLDExIEBACiAJc3RydWN0IHNoX3ZvdV9nZW9tZXRyeSBnZW87CiAJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCBtYmZtdCA9IHsKIAkJLyogUmV2aXNpdDogaXMgdGhpcyB0aGUgY29ycmVjdCBjb2RlPyAqLwotCQkuY29kZSA9IFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0xFLAorCQkuY29kZSA9IFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4LAogCQkuZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQsCiAJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSwKIAl9OworCXVuc2lnbmVkIGludCBpbWdfaGVpZ2h0X21heDsKIAlpbnQgcmV0OwogCiAJZGV2X2RiZyh2b3VfZGV2LT52NGwyX2Rldi5kZXYsICIlcygpOiAldXgldUAldToldVxuIiwgX19mdW5jX18sCkBAIC05NDgsMTQgKzk1NiwxOSBAQAogCWlmIChhLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmICh2b3VfZGV2LT5zdGQgJiBWNEwyX1NURF81MjVfNjApCisJCWltZ19oZWlnaHRfbWF4ID0gNDgwOworCWVsc2UKKwkJaW1nX2hlaWdodF9tYXggPSA1NzY7CisKIAl2NGxfYm91bmRfYWxpZ25faW1hZ2UoJnJlY3QtPndpZHRoLCAwLCBWT1VfTUFYX0lNQUdFX1dJRFRILCAxLAotCQkJICAgICAgJnJlY3QtPmhlaWdodCwgMCwgVk9VX01BWF9JTUFHRV9IRUlHSFQsIDEsIDApOworCQkJICAgICAgJnJlY3QtPmhlaWdodCwgMCwgaW1nX2hlaWdodF9tYXgsIDEsIDApOwogCiAJaWYgKHJlY3QtPndpZHRoICsgcmVjdC0+bGVmdCA+IFZPVV9NQVhfSU1BR0VfV0lEVEgpCiAJCXJlY3QtPmxlZnQgPSBWT1VfTUFYX0lNQUdFX1dJRFRIIC0gcmVjdC0+d2lkdGg7CiAKLQlpZiAocmVjdC0+aGVpZ2h0ICsgcmVjdC0+dG9wID4gVk9VX01BWF9JTUFHRV9IRUlHSFQpCi0JCXJlY3QtPnRvcCA9IFZPVV9NQVhfSU1BR0VfSEVJR0hUIC0gcmVjdC0+aGVpZ2h0OworCWlmIChyZWN0LT5oZWlnaHQgKyByZWN0LT50b3AgPiBpbWdfaGVpZ2h0X21heCkKKwkJcmVjdC0+dG9wID0gaW1nX2hlaWdodF9tYXggLSByZWN0LT5oZWlnaHQ7CiAKIAlnZW8ub3V0cHV0ID0gKnJlY3Q7CiAJZ2VvLmluX3dpZHRoID0gcGl4LT53aWR0aDsKQEAgLTk4MCw4ICs5OTMsOCBAQAogCiAJLyogU2FuaXR5IGNoZWNrcyAqLwogCWlmICgodW5zaWduZWQpbWJmbXQud2lkdGggPiBWT1VfTUFYX0lNQUdFX1dJRFRIIHx8Ci0JICAgICh1bnNpZ25lZCltYmZtdC5oZWlnaHQgPiBWT1VfTUFYX0lNQUdFX0hFSUdIVCB8fAotCSAgICBtYmZtdC5jb2RlICE9IFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0xFKQorCSAgICAodW5zaWduZWQpbWJmbXQuaGVpZ2h0ID4gaW1nX2hlaWdodF9tYXggfHwKKwkgICAgbWJmbXQuY29kZSAhPSBWNEwyX01CVVNfRk1UX1lVWVY4XzJYOCkKIAkJcmV0dXJuIC1FSU87CiAKIAlnZW8ub3V0cHV0LndpZHRoID0gbWJmbXQud2lkdGg7CkBAIC0xMzI5LDEzICsxMzQyLDEzIEBACiAJcmVjdC0+bGVmdAkJPSAwOwogCXJlY3QtPnRvcAkJPSAwOwogCXJlY3QtPndpZHRoCQk9IFZPVV9NQVhfSU1BR0VfV0lEVEg7Ci0JcmVjdC0+aGVpZ2h0CQk9IFZPVV9NQVhfSU1BR0VfSEVJR0hUOworCXJlY3QtPmhlaWdodAkJPSA0ODA7CiAJcGl4LT53aWR0aAkJPSBWT1VfTUFYX0lNQUdFX1dJRFRIOwotCXBpeC0+aGVpZ2h0CQk9IFZPVV9NQVhfSU1BR0VfSEVJR0hUOworCXBpeC0+aGVpZ2h0CQk9IDQ4MDsKIAlwaXgtPnBpeGVsZm9ybWF0CT0gVjRMMl9QSVhfRk1UX1lWWVU7CiAJcGl4LT5maWVsZAkJPSBWNEwyX0ZJRUxEX05PTkU7CiAJcGl4LT5ieXRlc3BlcmxpbmUJPSBWT1VfTUFYX0lNQUdFX1dJRFRIICogMjsKLQlwaXgtPnNpemVpbWFnZQkJPSBWT1VfTUFYX0lNQUdFX1dJRFRIICogMiAqIFZPVV9NQVhfSU1BR0VfSEVJR0hUOworCXBpeC0+c2l6ZWltYWdlCQk9IFZPVV9NQVhfSU1BR0VfV0lEVEggKiAyICogNDgwOwogCXBpeC0+Y29sb3JzcGFjZQkJPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOwogCiAJcmVnaW9uID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlZ19yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlZ19yZXMpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYwppbmRleCA0NzU3NTdiLi5mMjAzMjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYwpAQCAtMTEwNywxMyArMTEwNywxNCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYnVzX3R5cGUgc29jX2NhbWVyYV9idXNfdHlwZSA9IHsKK3N0cnVjdCBidXNfdHlwZSBzb2NfY2FtZXJhX2J1c190eXBlID0gewogCS5uYW1lCQk9ICJzb2MtY2FtZXJhIiwKIAkucHJvYmUJCT0gc29jX2NhbWVyYV9wcm9iZSwKIAkucmVtb3ZlCQk9IHNvY19jYW1lcmFfcmVtb3ZlLAogCS5zdXNwZW5kCT0gc29jX2NhbWVyYV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc29jX2NhbWVyYV9yZXN1bWUsCiB9OworRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NhbWVyYV9idXNfdHlwZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBpY19kcnYgPSB7CiAJLm5hbWUJPSAiY2FtZXJhIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhX3BsYXRmb3JtLmMKaW5kZXggMjQ4Yzk4Ni4uYmY0MDZlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhX3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhX3BsYXRmb3JtLmMKQEAgLTU2LDggKzU2LDggQEAKIAlyZXR1cm4gcC0+YnVzX3BhcmFtOwogfQogCi1zdGF0aWMgaW50IHNvY19jYW1lcmFfcGxhdGZvcm1fdHJ5X2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAotCQkJCSAgICAgICBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptZikKK3N0YXRpYyBpbnQgc29jX2NhbWVyYV9wbGF0Zm9ybV9maWxsX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCQlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptZikKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvICpwID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAKQEAgLTY1LDYgKzY1LDcgQEAKIAltZi0+aGVpZ2h0CT0gcC0+Zm9ybWF0LmhlaWdodDsKIAltZi0+Y29kZQk9IHAtPmZvcm1hdC5jb2RlOwogCW1mLT5jb2xvcnNwYWNlCT0gcC0+Zm9ybWF0LmNvbG9yc3BhY2U7CisJbWYtPmZpZWxkCT0gcC0+Zm9ybWF0LmZpZWxkOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04MywxMCArODQsNDUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX2dfY3JvcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCSAgICAgIHN0cnVjdCB2NGwyX2Nyb3AgKmEpCit7CisJc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqcCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJYS0+Yy5sZWZ0CT0gMDsKKwlhLT5jLnRvcAk9IDA7CisJYS0+Yy53aWR0aAk9IHAtPmZvcm1hdC53aWR0aDsKKwlhLT5jLmhlaWdodAk9IHAtPmZvcm1hdC5oZWlnaHQ7CisJYS0+dHlwZQkJPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX2Nyb3BjYXAoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkgICAgICAgc3RydWN0IHY0bDJfY3JvcGNhcCAqYSkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvICpwID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlhLT5ib3VuZHMubGVmdAkJCT0gMDsKKwlhLT5ib3VuZHMudG9wCQkJPSAwOworCWEtPmJvdW5kcy53aWR0aAkJCT0gcC0+Zm9ybWF0LndpZHRoOworCWEtPmJvdW5kcy5oZWlnaHQJCT0gcC0+Zm9ybWF0LmhlaWdodDsKKwlhLT5kZWZyZWN0CQkJPSBhLT5ib3VuZHM7CisJYS0+dHlwZQkJCQk9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwlhLT5waXhlbGFzcGVjdC5udW1lcmF0b3IJPSAxOworCWEtPnBpeGVsYXNwZWN0LmRlbm9taW5hdG9yCT0gMTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBwbGF0Zm9ybV9zdWJkZXZfdmlkZW9fb3BzID0gewogCS5zX3N0cmVhbQk9IHNvY19jYW1lcmFfcGxhdGZvcm1fc19zdHJlYW0sCi0JLnRyeV9tYnVzX2ZtdAk9IHNvY19jYW1lcmFfcGxhdGZvcm1fdHJ5X2ZtdCwKIAkuZW51bV9tYnVzX2ZtdAk9IHNvY19jYW1lcmFfcGxhdGZvcm1fZW51bV9mbXQsCisJLmNyb3BjYXAJPSBzb2NfY2FtZXJhX3BsYXRmb3JtX2Nyb3BjYXAsCisJLmdfY3JvcAkJPSBzb2NfY2FtZXJhX3BsYXRmb3JtX2dfY3JvcCwKKwkudHJ5X21idXNfZm10CT0gc29jX2NhbWVyYV9wbGF0Zm9ybV9maWxsX2ZtdCwKKwkuZ19tYnVzX2ZtdAk9IHNvY19jYW1lcmFfcGxhdGZvcm1fZmlsbF9mbXQsCisJLnNfbWJ1c19mbXQJPSBzb2NfY2FtZXJhX3BsYXRmb3JtX2ZpbGxfZm10LAogfTsKIAogc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgcGxhdGZvcm1fc3ViZGV2X29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX21lZGlhYnVzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19tZWRpYWJ1cy5jCmluZGV4IDhiNjNiNjUuLjkxMzkxMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX21lZGlhYnVzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfbWVkaWFidXMuYwpAQCAtMTgsMjggKzE4LDI4IEBACiAjZGVmaW5lIE1CVVNfSURYKGYpIChWNEwyX01CVVNfRk1UXyAjIyBmIC0gVjRMMl9NQlVTX0ZNVF9GSVhFRCAtIDEpCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX21idXNfcGl4ZWxmbXQgbWJ1c19mbXRbXSA9IHsKLQlbTUJVU19JRFgoWVVZVjhfMlg4X0xFKV0gPSB7CisJW01CVVNfSURYKFlVWVY4XzJYOCldID0gewogCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfWVVZViwKIAkJLm5hbWUJCQk9ICJZVVlWIiwKIAkJLmJpdHNfcGVyX3NhbXBsZQk9IDgsCiAJCS5wYWNraW5nCQk9IFNPQ19NQlVTX1BBQ0tJTkdfMlg4X1BBREhJLAogCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAogCX0sCi0JW01CVVNfSURYKFlWWVU4XzJYOF9MRSldID0geworCVtNQlVTX0lEWChZVllVOF8yWDgpXSA9IHsKIAkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX1lWWVUsCiAJCS5uYW1lCQkJPSAiWVZZVSIsCiAJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAogCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HXzJYOF9QQURISSwKIAkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9MRSwKIAl9LAotCVtNQlVTX0lEWChZVVlWOF8yWDhfQkUpXSA9IHsKKwlbTUJVU19JRFgoVVlWWThfMlg4KV0gPSB7CiAJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9VWVZZLAogCQkubmFtZQkJCT0gIlVZVlkiLAogCQkuYml0c19wZXJfc2FtcGxlCT0gOCwKIAkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR18yWDhfUEFESEksCiAJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfTEUsCiAJfSwKLQlbTUJVU19JRFgoWVZZVThfMlg4X0JFKV0gPSB7CisJW01CVVNfSURYKFZZVVk4XzJYOCldID0gewogCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfVllVWSwKIAkJLm5hbWUJCQk9ICJWWVVZIiwKIAkJLmJpdHNfcGVyX3NhbXBsZQk9IDgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0djY4MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdHY2ODAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkzOGFkOC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0djY4MC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU2NSArMCwwIEBACi0vKgotICogIFNUVjA2ODAgVVNCIENhbWVyYSBEcml2ZXIsIGJ5IEtldmluIFNpc3NvbiAoa2pzaXNzb25AYmVsbHNvdXRoLm5ldCkKLSAqCi0gKiBUaGFua3MgdG8gU1RNaWNyb2VsZWN0cm9uaWNzIGZvciBpbmZvcm1hdGlvbiBvbiB0aGUgdXNiIGNvbW1hbmRzLCBhbmQKLSAqIHRvIFN0ZXZlIE1pbGxlciBhdCBTVE0gZm9yIGhpcyBoZWxwIGFuZCBlbmNvdXJhZ2VtZW50IHdoaWxlIEkgd2FzCi0gKiB3cml0aW5nIHRoaXMgZHJpdmVyLgotICoKLSAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIGhlYXZpbHkgb24gdGhlCi0gKiBFbmRwb2ludHMgKGZvcm1lcmx5IGtub3duIGFzIEFPWCkgc2U0MDEgVVNCIENhbWVyYSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgMjAwMCBKZXJvZW4gQi4gVnJlZWtlbiAocGUxcnhxQGFtc2F0Lm9yZykKLSAqCi0gKiBTdGlsbCBzb21ld2hhdCBiYXNlZCBvbiB0aGUgTGludXggb3Y1MTEgZHJpdmVyLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKLSAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKLSAqIEhpc3Rvcnk6Ci0gKiB2ZXIgMC4xIE9jdG9iZXIsIDIwMDEuIEluaXRpYWwgYXR0ZW1wdC4KLSAqCi0gKiB2ZXIgMC4yIE5vdmVtYmVyLCAyMDAxLiBGaXhlZCBhc2JpbGl0eSB0byByZXNpemUsIGFkZGVkIGJyaWdodG5lc3MKLSAqICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLCBtYWRlIG1vcmUgc3RhYmxlICg/KQotICoKLSAqIHZlciAwLjIxIE5vdiwgMjAwMS4gICAgIEFkZGVkIGdhbW1hIGNvcnJlY3Rpb24gYW5kIHdoaXRlIGJhbGFuY2UsCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICBkdWUgdG8gQWxleGFuZGVyIFNjaHdhcnR6LiBTdGlsbCB0cnlpbmcgdG8KLSAqICAgICAgICAgICAgICAgICAgICAgICAgIGltcHJvdmUgc3RhYmxpbGl0eS4gTW92ZWQgc3R1ZmYgaW50byBzdHY2ODAuaAotICoKLSAqIHZlciAwLjIyIE5vdiwgMjAwMS4JICAgQWRkZWQgc2hhcnBlbiBmdW5jdGlvbiAoYnkgTWljaGFlbCBTd2VldCwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgIG1pa2VAZWFzeXN3LmNvbSkgZnJvbSBHSU1QLCBhbHNvIHVzZWQgaW4gcGVuY2FtLgotICogICAgICAgICAgICAgICAgICAgICAgICAgU2ltcGxlLCBmYXN0LCBnb29kIGludGVnZXIgbWF0aCByb3V0aW5lLgotICoKLSAqIHZlciAwLjIzIERlYywgMjAwMSAoZ2toKQotICogCQkJICAgVG9vayBvdXQgc2hhcnBlbiBmdW5jdGlvbiwgcmFuIGNvZGUgdGhyb3VnaAotICogCQkJICAgTGluZGVudCwgYW5kIGRpZCBvdGhlciBtaW5vciB0d2Vha3MgdG8gZ2V0Ci0gKiAJCQkgICB0aGluZ3MgdG8gd29yayBwcm9wZXJseSB3aXRoIDIuNS4xCi0gKgotICogdmVyIDAuMjQgSmFuLCAyMDAyIChranMpCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZCB0aGUgcHJvYmxlbSB3aXRoIHdlYmNhbSBjcmFzaGluZyBhZnRlcgotICogICAgICAgICAgICAgICAgICAgICAgICAgdHdvIHBpY3R1cmVzLiBDaGFuZ2VkIHRoZSB3YXkgcGljIGlzIGhhbHZlZCB0bwotICogICAgICAgICAgICAgICAgICAgICAgICAgaW1wcm92ZSBxdWFsaXR5LiBHb3QgcmlkIG9mIGdyZWVuIGxpbmUgYXJvdW5kCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS4gRml4IGJyaWdodG5lc3MgcmVzZXQgd2hlbiBjaGFuZ2luZyBzaXplCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICBidWcuIEFkanVzdGVkIGdhbW1hIGZpbHRlcnMgc2xpZ2h0bHkuCi0gKgotICogdmVyIDAuMjUgSmFuLCAyMDAyIChranMpCi0gKgkJCSAgIEZpeGVkIGEgYnVnIGluIHdoaWNoIHRoZSBkcml2ZXIgc29tZXRpbWVzIGF0dGVtcHRlZAotICoJCQkgICB0byBzZXQgdG8gYSBub24tc3VwcG9ydGVkIHNpemUuIFRoaXMgYWxsb3dlZAotICoJCQkgICBnbm9tZW1lZXRpbmcgdG8gd29yay4KLSAqCQkJICAgRml4ZWQgcHJvYyBlbnRyeSByZW1vdmFsIGJ1Zy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0KLSNpbmNsdWRlICJzdHY2ODAuaCIKLQotc3RhdGljIGludCB2aWRlb19uciA9IC0xOwotCi1zdGF0aWMgaW50IHN3YXBSR0I7CS8qIDAgPSBkZWZhdWx0IGZvciBhdXRvIHNlbGVjdCAqLwotCi0vKiAwID0gZGVmYXVsdCB0byBhbGxvdyBhdXRvIHNlbGVjdDsgLTEgPSBzd2FwIG5ldmVyLCArMSA9IHN3YXAgYWx3YXlzICovCi1zdGF0aWMgaW50IHN3YXBSR0Jfb247Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWc7Ci0KLSNkZWZpbmUgUERFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIFwKLQlkbyB7IFwKLQlpZiAoZGVidWcgPj0gbGV2ZWwpCVwKLQkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiIFslczolZF0gXG4iIGZtdCwJXAotCQkJX19mdW5jX18sIF9fTElORV9fICwgIyMgYXJncyk7CVwKLQl9IHdoaWxlICgwKQotCi0KLS8qCi0gKiBWZXJzaW9uIEluZm9ybWF0aW9uCi0gKi8KLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjI1IgotI2RlZmluZSBEUklWRVJfQVVUSE9SICJLZXZpbiBTaXNzb24gPGtqc2lzc29uQGJlbGxzb3V0aC5uZXQ+IgotI2RlZmluZSBEUklWRVJfREVTQyAiU1RWMDY4MCBVU0IgQ2FtZXJhIERyaXZlciIKLQotTU9EVUxFX0FVVEhPUiAoRFJJVkVSX0FVVEhPUik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKERSSVZFUl9ERVNDKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7Ci1tb2R1bGVfcGFyYW0oZGVidWcsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyAoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOwotbW9kdWxlX3BhcmFtKHN3YXBSR0Jfb24sIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDIChzd2FwUkdCX29uLCAiUmVkL2JsdWUgc3dhcDogMT1hbHdheXMsIDA9YXV0bywgLTE9bmV2ZXIiKTsKLW1vZHVsZV9wYXJhbSh2aWRlb19uciwgaW50LCAwKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogTWVtb3J5IG1hbmFnZW1lbnQKLSAqCi0gKiBUaGlzIGlzIGEgc2hhbWVsZXNzIGNvcHkgZnJvbSB0aGUgVVNCLWNwaWEgZHJpdmVyIChsaW51eCBrZXJuZWwKLSAqIHZlcnNpb24gMi4zLjI5IG9yIHNvLCBJIGhhdmUgbm8gaWRlYSB3aGF0IHRoaXMgY29kZSBhY3R1YWxseSBkb2VzIDspLgotICogQWN0dWFsbHkgaXQgc2VlbXMgdG8gYmUgYSBjb3B5IG9mIGEgc2hhbWVsZXNzIGNvcHkgb2YgdGhlIGJ0dHYtZHJpdmVyLgotICogT3IgdGhhdCBpcyBhIGNvcHkgb2YgYSBzaGFtZWxlc3MgY29weSBvZiAuLi4gKFRvIHRoZSBwb3dlcnM6IGlzIHRoZXJlCi0gKiBubyBnZW5lcmljIGtlcm5lbC1mdW5jdGlvbiB0byBkbyB0aGlzIHNvcnQgb2Ygc3R1ZmY/KQotICoKLSAqIFllcywgaXQgd2FzIGEgc2hhbWVsZXNzIGNvcHkgZnJvbSB0aGUgYnR0di1kcml2ZXIuIElJUkMsIEFsYW4gc2F5cwotICogdGhlcmUgd2lsbCBiZSBvbmUsIGJ1dCBhcHBhcmVudGVseSBub3QgeWV0IC1qZXJkZmVsdAotICoKLSAqIFNvIEkgY29waWVkIGl0IGFnYWluIGZvciB0aGUgb3Y1MTEgZHJpdmVyIC1jbGF1ZGlvCi0gKgotICogU2FtZSBmb3IgdGhlIHNlNDAxIGRyaXZlciAtSmVyb2VuCi0gKgotICogQW5kIHRoZSBTVFYwNjgwIGRyaXZlciAtIEtldmluCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCAqcnZtYWxsb2MgKHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQl2b2lkICptZW07Ci0JdW5zaWduZWQgbG9uZyBhZHI7Ci0KLQlzaXplID0gUEFHRV9BTElHTihzaXplKTsKLQltZW0gPSB2bWFsbG9jXzMyIChzaXplKTsKLQlpZiAoIW1lbSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQltZW1zZXQgKG1lbSwgMCwgc2l6ZSk7CS8qIENsZWFyIHRoZSByYW0gb3V0LCBubyBqdW5rIHRvIHRoZSB1c2VyICovCi0JYWRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKLQl3aGlsZSAoc2l6ZSA+IDApIHsKLQkJU2V0UGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOwotCQlhZHIgKz0gUEFHRV9TSVpFOwotCQlzaXplIC09IFBBR0VfU0laRTsKLQl9Ci0JcmV0dXJuIG1lbTsKLX0KLQotc3RhdGljIHZvaWQgcnZmcmVlICh2b2lkICptZW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGFkcjsKLQotCWlmICghbWVtKQotCQlyZXR1cm47Ci0KLQlhZHIgPSAodW5zaWduZWQgbG9uZykgbWVtOwotCXdoaWxlICgobG9uZykgc2l6ZSA+IDApIHsKLQkJQ2xlYXJQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKCh2b2lkICopYWRyKSk7Ci0JCWFkciArPSBQQUdFX1NJWkU7Ci0JCXNpemUgLT0gUEFHRV9TSVpFOwotCX0KLQl2ZnJlZSAobWVtKTsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBwZW5jYW0gcmVhZC93cml0ZSBmdW5jdGlvbnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGludCBzdHZfc25kY3RybCAoaW50IHNldCwgc3RydWN0IHVzYl9zdHYgKnN0djY4MCwgdW5zaWduZWQgc2hvcnQgcmVxLCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgc2l6ZSkKLXsKLQlpbnQgcmV0ID0gLTE7Ci0KLQlzd2l0Y2ggKHNldCkgewotCWNhc2UgMDoJCS8qICAweGMxICAqLwotCQlyZXQgPSB1c2JfY29udHJvbF9tc2cgKHN0djY4MC0+dWRldiwKLQkJCQkgICAgICAgdXNiX3JjdmN0cmxwaXBlIChzdHY2ODAtPnVkZXYsIDApLAotCQkJCSAgICAgICByZXEsCi0JCQkJICAgICAgIChVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UKSwKLQkJCQkgICAgICAgdmFsdWUsIDAsIGJ1ZmZlciwgc2l6ZSwgUEVOQ0FNX1RJTUVPVVQpOwotCQlicmVhazsKLQotCWNhc2UgMToJCS8qICAweDQxICAqLwotCQlyZXQgPSB1c2JfY29udHJvbF9tc2cgKHN0djY4MC0+dWRldiwKLQkJCQkgICAgICAgdXNiX3NuZGN0cmxwaXBlIChzdHY2ODAtPnVkZXYsIDApLAotCQkJCSAgICAgICByZXEsCi0JCQkJICAgICAgIChVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCksCi0JCQkJICAgICAgIHZhbHVlLCAwLCBidWZmZXIsIHNpemUsIFBFTkNBTV9USU1FT1VUKTsKLQkJYnJlYWs7Ci0KLQljYXNlIDI6CQkvKiAgMHg4MCAgKi8KLQkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnIChzdHY2ODAtPnVkZXYsCi0JCQkJICAgICAgIHVzYl9yY3ZjdHJscGlwZSAoc3R2NjgwLT51ZGV2LCAwKSwKLQkJCQkgICAgICAgcmVxLAotCQkJCSAgICAgICAoVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9ERVZJQ0UpLAotCQkJCSAgICAgICB2YWx1ZSwgMCwgYnVmZmVyLCBzaXplLCBQRU5DQU1fVElNRU9VVCk7Ci0JCWJyZWFrOwotCi0JY2FzZSAzOgkJLyogIDB4NDAgICovCi0JCXJldCA9IHVzYl9jb250cm9sX21zZyAoc3R2NjgwLT51ZGV2LAotCQkJCSAgICAgICB1c2Jfc25kY3RybHBpcGUgKHN0djY4MC0+dWRldiwgMCksCi0JCQkJICAgICAgIHJlcSwKLQkJCQkgICAgICAgKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSksCi0JCQkJICAgICAgIHZhbHVlLCAwLCBidWZmZXIsIHNpemUsIFBFTkNBTV9USU1FT1VUKTsKLQkJYnJlYWs7Ci0KLQl9Ci0JaWYgKChyZXQgPCAwKSAmJiAocmVxICE9IDB4MGEpKSB7Ci0JCVBERUJVRyAoMSwgIlNUVihlKTogdXNiX2NvbnRyb2xfbXNnIGVycm9yICVpLCByZXF1ZXN0ID0gMHgleCwgZXJyb3IgPSAlaSIsIHNldCwgcmVxLCByZXQpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHN0dl9zZXRfY29uZmlnIChzdHJ1Y3QgdXNiX3N0diAqZGV2LCBpbnQgY29uZmlndXJhdGlvbiwgaW50IGludGVyZmFjZSwgaW50IGFsdGVybmF0ZSkKLXsKLQotCWlmIChjb25maWd1cmF0aW9uICE9IGRldi0+dWRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUKLQkJCXx8IHVzYl9yZXNldF9jb25maWd1cmF0aW9uIChkZXYtPnVkZXYpIDwgMCkgewotCQlQREVCVUcgKDEsICJTVFYoZSk6IEZBSUxFRCB0byByZXNldCBjb25maWd1cmF0aW9uICVpIiwgY29uZmlndXJhdGlvbik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JaWYgKHVzYl9zZXRfaW50ZXJmYWNlIChkZXYtPnVkZXYsIGludGVyZmFjZSwgYWx0ZXJuYXRlKSA8IDApIHsKLQkJUERFQlVHICgxLCAiU1RWKGUpOiBGQUlMRUQgdG8gc2V0IGFsdGVybmF0ZSBpbnRlcmZhY2UgJWkiLCBhbHRlcm5hdGUpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHN0dl9zdG9wX3ZpZGVvIChzdHJ1Y3QgdXNiX3N0diAqZGV2KQotewotCWludCBpOwotCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKLQotCWJ1ZiA9IGttYWxsb2MgKDQwLCBHRlBfS0VSTkVMKTsKLQlpZiAoYnVmID09IE5VTEwpIHsKLQkJUERFQlVHICgwLCAiU1RWKGUpOiBPdXQgb2YgKHNtYWxsIGJ1ZikgbWVtb3J5Iik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQkvKiB0aGlzIGlzIGEgaGlnaCBwcmlvcml0eSBjb21tYW5kOyBpdCBzdG9wcyBhbGwgbG93ZXIgb3JkZXIgY29tbWFuZHMgKi8KLQlpZiAoKGkgPSBzdHZfc25kY3RybCAoMSwgZGV2LCAweDA0LCAweDAwMDAsIGJ1ZiwgMHgwKSkgPCAwKSB7Ci0JCWkgPSBzdHZfc25kY3RybCAoMCwgZGV2LCAweDgwLCAwLCBidWYsIDB4MDIpOwkvKiBHZXQgTGFzdCBFcnJvcjsgMiA9IGJ1c3kgKi8KLQkJUERFQlVHICgxLCAiU1RWKGkpOiBsYXN0IGVycm9yOiAlaSwgIGNvbW1hbmQgPSAweCV4IiwgYnVmWzBdLCBidWZbMV0pOwotCX0gZWxzZSB7Ci0JCVBERUJVRyAoMSwgIlNUVihpKTogQ2FtZXJhIHJlc2V0IHRvIGlkbGUgbW9kZS4iKTsKLQl9Ci0KLQlpZiAoKGkgPSBzdHZfc2V0X2NvbmZpZyAoZGV2LCAxLCAwLCAwKSkgPCAwKQotCQlQREVCVUcgKDEsICJTVFYoZSk6IFJlc2V0IGNvbmZpZyBkdXJpbmcgZXhpdCBmYWlsZWQiKTsKLQotCS8qICBnZXQgY3VycmVudCBtb2RlICAqLwotCWJ1ZlswXSA9IDB4ZjA7Ci0JaWYgKChpID0gc3R2X3NuZGN0cmwgKDAsIGRldiwgMHg4NywgMCwgYnVmLCAweDA4KSkgIT0gMHgwOCkJLyogZ2V0IG1vZGUgKi8KLQkJUERFQlVHICgwLCAiU1RWKGUpOiBTdG9wX3ZpZGVvOiBwcm9ibGVtIHNldHRpbmcgb3JpZ2luYWwgbW9kZSIpOwotCWlmIChkZXYtPm9yaWdNb2RlICE9IGJ1ZlswXSkgewotCQltZW1zZXQgKGJ1ZiwgMCwgOCk7Ci0JCWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSBkZXYtPm9yaWdNb2RlOwotCQlpZiAoKGkgPSBzdHZfc25kY3RybCAoMywgZGV2LCAweDA3LCAweDAxMDAsIGJ1ZiwgMHgwOCkpICE9IDB4MDgpIHsKLQkJCVBERUJVRyAoMCwgIlNUVihlKTogU3RvcF92aWRlbzogU2V0X0NhbWVyYV9Nb2RlIGZhaWxlZCIpOwotCQkJaSA9IC0xOwotCQl9Ci0JCWJ1ZlswXSA9IDB4ZjA7Ci0JCWkgPSBzdHZfc25kY3RybCAoMCwgZGV2LCAweDg3LCAwLCBidWYsIDB4MDgpOwotCQlpZiAoKGkgIT0gMHgwOCkgfHwgKGJ1ZlswXSAhPSBkZXYtPm9yaWdNb2RlKSkgewotCQkJUERFQlVHICgwLCAiU1RWKGUpOiBjYW1lcmEgTk9UIHNldCB0byBvcmlnaW5hbCByZXNvbHV0aW9uLiIpOwotCQkJaSA9IC0xOwotCQl9IGVsc2UKLQkJCVBERUJVRyAoMCwgIlNUVihpKTogQ2FtZXJhIHNldCB0byBvcmlnaW5hbCByZXNvbHV0aW9uIik7Ci0JfQotCS8qIG9yaWdNb2RlICovCi0Ja2ZyZWUoYnVmKTsKLQlyZXR1cm4gaTsKLX0KLQotc3RhdGljIGludCBzdHZfc2V0X3ZpZGVvX21vZGUgKHN0cnVjdCB1c2Jfc3R2ICpkZXYpCi17Ci0JaW50IGksIHN0b3BfdmlkZW8gPSAxOwotCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKLQotCWJ1ZiA9IGttYWxsb2MgKDQwLCBHRlBfS0VSTkVMKTsKLQlpZiAoYnVmID09IE5VTEwpIHsKLQkJUERFQlVHICgwLCAiU1RWKGUpOiBPdXQgb2YgKHNtYWxsIGJ1ZikgbWVtb3J5Iik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlpZiAoKGkgPSBzdHZfc2V0X2NvbmZpZyAoZGV2LCAxLCAwLCAwKSkgPCAwKSB7Ci0JCWtmcmVlKGJ1Zik7Ci0JCXJldHVybiBpOwotCX0KLQotCWkgPSBzdHZfc25kY3RybCAoMiwgZGV2LCAweDA2LCAweDAxMDAsIGJ1ZiwgMHgxMik7Ci0JaWYgKCEoaSA+IDApICYmIChidWZbOF0gPT0gMHg1MykgJiYgKGJ1Zls5XSA9PSAweDA1KSkgewotCQlQREVCVUcgKDEsICJTVFYoZSk6IENvdWxkIG5vdCBnZXQgZGVzY3JpcHRvciAwMTAwLiIpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCS8qICBzZXQgYWx0ZXJuYXRlIGludGVyZmFjZSAxICovCi0JaWYgKChpID0gc3R2X3NldF9jb25maWcgKGRldiwgMSwgMCwgMSkpIDwgMCkKLQkJZ290byBlcnJvcjsKLQotCWlmICgoaSA9IHN0dl9zbmRjdHJsICgwLCBkZXYsIDB4ODUsIDAsIGJ1ZiwgMHgxMCkpICE9IDB4MTApCi0JCWdvdG8gZXJyb3I7Ci0JUERFQlVHICgxLCAiU1RWKGkpOiBTZXR0aW5nIHZpZGVvIG1vZGUuIik7Ci0JLyogIFN3aXRjaCB0byBWaWRlbyBtb2RlOiAweDAxMDAgPSBWR0EgKDY0MHg0ODApLCAweDAwMDAgPSBDSUYgKDM1MngyODgpIDB4MDMwMCA9IFFWR0EgKDMyMHgyNDApICAqLwotCWlmICgoaSA9IHN0dl9zbmRjdHJsICgxLCBkZXYsIDB4MDksIGRldi0+VmlkZW9Nb2RlLCBidWYsIDB4MCkpIDwgMCkgewotCQlzdG9wX3ZpZGVvID0gMDsKLQkJZ290byBlcnJvcjsKLQl9Ci0JZ290byBleGl0OwotCi1lcnJvcjoKLQlrZnJlZShidWYpOwotCWlmIChzdG9wX3ZpZGVvID09IDEpCi0JCXN0dl9zdG9wX3ZpZGVvIChkZXYpOwotCXJldHVybiAtMTsKLQotZXhpdDoKLQlrZnJlZShidWYpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHN0dl9pbml0IChzdHJ1Y3QgdXNiX3N0diAqc3R2NjgwKQotewotCWludCBpID0gMDsKLQl1bnNpZ25lZCBjaGFyICpidWZmZXI7Ci0JdW5zaWduZWQgbG9uZyBpbnQgYnVmc2l6ZTsKLQotCWJ1ZmZlciA9IGt6YWxsb2MgKDQwLCBHRlBfS0VSTkVMKTsKLQlpZiAoYnVmZmVyID09IE5VTEwpIHsKLQkJUERFQlVHICgwLCAiU1RWKGUpOiBPdXQgb2YgKHNtYWxsIGJ1ZikgbWVtb3J5Iik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JdWRlbGF5ICgxMDApOwotCi0JLyogc2V0IGNvbmZpZyAxLCBpbnRlcmZhY2UgMCwgYWx0ZXJuYXRlIDAgKi8KLQlpZiAoKGkgPSBzdHZfc2V0X2NvbmZpZyAoc3R2NjgwLCAxLCAwLCAwKSkgPCAwKSB7Ci0JCWtmcmVlKGJ1ZmZlcik7Ci0JCVBERUJVRyAoMCwgIlNUVihlKTogc2V0IGNvbmZpZyAxLDAsMCBmYWlsZWQiKTsKLQkJcmV0dXJuIC0xOwotCX0KLQkvKiBwaW5nIGNhbWVyYSB0byBiZSBzdXJlIFNUVjA2ODAgaXMgcHJlc2VudCAqLwotCWlmICgoaSA9IHN0dl9zbmRjdHJsICgwLCBzdHY2ODAsIDB4ODgsIDB4NTY3OCwgYnVmZmVyLCAweDAyKSkgIT0gMHgwMikKLQkJZ290byBlcnJvcjsKLQlpZiAoKGJ1ZmZlclswXSAhPSAweDU2KSB8fCAoYnVmZmVyWzFdICE9IDB4NzgpKSB7Ci0JCVBERUJVRyAoMSwgIlNUVihlKTogY2FtZXJhIHBpbmcgZmFpbGVkISEiKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQkvKiBnZXQgY2FtZXJhIGRlc2NyaXB0b3IgKi8KLQlpZiAoKGkgPSBzdHZfc25kY3RybCAoMiwgc3R2NjgwLCAweDA2LCAweDAyMDAsIGJ1ZmZlciwgMHgwOSkpICE9IDB4MDkpCi0JCWdvdG8gZXJyb3I7Ci0JaSA9IHN0dl9zbmRjdHJsICgyLCBzdHY2ODAsIDB4MDYsIDB4MDIwMCwgYnVmZmVyLCAweDIyKTsKLQlpZiAoIShpID49IDApICYmIChidWZmZXJbN10gPT0gMHhhMCkgJiYgKGJ1ZmZlcls4XSA9PSAweDIzKSkgewotCQlQREVCVUcgKDEsICJTVFYoZSk6IENvdWxkIG5vdCBnZXQgZGVzY3JpcHRvciAwMjAwLiIpOwotCQlnb3RvIGVycm9yOwotCX0KLQlpZiAoKGkgPSBzdHZfc25kY3RybCAoMCwgc3R2NjgwLCAweDhhLCAwLCBidWZmZXIsIDB4MDIpKSAhPSAweDAyKQotCQlnb3RvIGVycm9yOwotCWlmICgoaSA9IHN0dl9zbmRjdHJsICgwLCBzdHY2ODAsIDB4OGIsIDAsIGJ1ZmZlciwgMHgyNCkpICE9IDB4MjQpCi0JCWdvdG8gZXJyb3I7Ci0JaWYgKChpID0gc3R2X3NuZGN0cmwgKDAsIHN0djY4MCwgMHg4NSwgMCwgYnVmZmVyLCAweDEwKSkgIT0gMHgxMCkKLQkJZ290byBlcnJvcjsKLQotCXN0djY4MC0+U3VwcG9ydGVkTW9kZXMgPSBidWZmZXJbN107Ci0JaSA9IHN0djY4MC0+U3VwcG9ydGVkTW9kZXM7Ci0Jc3R2NjgwLT5DSUYgPSAwOwotCXN0djY4MC0+VkdBID0gMDsKLQlzdHY2ODAtPlFWR0EgPSAwOwotCWlmIChpICYgMSkKLQkJc3R2NjgwLT5DSUYgPSAxOwotCWlmIChpICYgMikKLQkJc3R2NjgwLT5WR0EgPSAxOwotCWlmIChpICYgOCkKLQkJc3R2NjgwLT5RVkdBID0gMTsKLQlpZiAoc3R2NjgwLT5TdXBwb3J0ZWRNb2RlcyA9PSAwKSB7Ci0JCVBERUJVRyAoMCwgIlNUVihlKTogVGhlcmUgYXJlIE5PIHN1cHBvcnRlZCBTVFY2ODAgbW9kZXMhISIpOwotCQlpID0gLTE7Ci0JCWdvdG8gZXJyb3I7Ci0JfSBlbHNlIHsKLQkJaWYgKHN0djY4MC0+Q0lGKQotCQkJUERFQlVHICgwLCAiU1RWKGkpOiBDSUYgaXMgc3VwcG9ydGVkIik7Ci0JCWlmIChzdHY2ODAtPlFWR0EpCi0JCQlQREVCVUcgKDAsICJTVFYoaSk6IFFWR0EgaXMgc3VwcG9ydGVkIik7Ci0JfQotCS8qIEZXIHJldiwgQVNJQyByZXYsIHNlbnNvciBJRCAgKi8KLQlQREVCVUcgKDEsICJTVFYoaSk6IEZpcm13YXJlIHJldiBpcyAlaS4laSIsIGJ1ZmZlclswXSwgYnVmZmVyWzFdKTsKLQlQREVCVUcgKDEsICJTVFYoaSk6IEFTSUMgcmV2IGlzICVpLiVpIiwgYnVmZmVyWzJdLCBidWZmZXJbM10pOwotCVBERUJVRyAoMSwgIlNUVihpKTogU2Vuc29yIElEIGlzICVpIiwgKGJ1ZmZlcls0XSoxNikgKyAoYnVmZmVyWzVdPj40KSk7Ci0KLQkvKiAgc2V0IGFsdGVybmF0ZSBpbnRlcmZhY2UgMSAqLwotCWlmICgoaSA9IHN0dl9zZXRfY29uZmlnIChzdHY2ODAsIDEsIDAsIDEpKSA8IDApCi0JCWdvdG8gZXJyb3I7Ci0KLQlpZiAoKGkgPSBzdHZfc25kY3RybCAoMCwgc3R2NjgwLCAweDg1LCAwLCBidWZmZXIsIDB4MTApKSAhPSAweDEwKQotCQlnb3RvIGVycm9yOwotCWlmICgoaSA9IHN0dl9zbmRjdHJsICgwLCBzdHY2ODAsIDB4OGQsIDAsIGJ1ZmZlciwgMHgwOCkpICE9IDB4MDgpCi0JCWdvdG8gZXJyb3I7Ci0JaSA9IGJ1ZmZlclszXTsKLQlQREVCVUcgKDAsICJTVFYoaSk6IENhbWVyYSBoYXMgJWkgcGljdHVyZXMuIiwgaSk7Ci0KLQkvKiAgZ2V0IGN1cnJlbnQgbW9kZSAqLwotCWlmICgoaSA9IHN0dl9zbmRjdHJsICgwLCBzdHY2ODAsIDB4ODcsIDAsIGJ1ZmZlciwgMHgwOCkpICE9IDB4MDgpCi0JCWdvdG8gZXJyb3I7Ci0Jc3R2NjgwLT5vcmlnTW9kZSA9IGJ1ZmZlclswXTsJLyogMDEgPSBWR0EsIDAzID0gUVZHQSwgMDAgPSBDSUYgKi8KLQotCS8qIFRoaXMgd2lsbCBhdHRlbXAgQ0lGIG1vZGUsIGlmIHN1cHBvcnRlZC4gSWYgbm90LCBzZXQgdG8gUVZHQSAgKi8KLQltZW1zZXQgKGJ1ZmZlciwgMCwgOCk7Ci0JaWYgKHN0djY4MC0+Q0lGKQotCQlidWZmZXJbMF0gPSAweDAwOwotCWVsc2UgaWYgKHN0djY4MC0+UVZHQSkKLQkJYnVmZmVyWzBdID0gMHgwMzsKLQlpZiAoKGkgPSBzdHZfc25kY3RybCAoMywgc3R2NjgwLCAweDA3LCAweDAxMDAsIGJ1ZmZlciwgMHgwOCkpICE9IDB4MDgpIHsKLQkJUERFQlVHICgwLCAiU1RWKGkpOiBTZXRfQ2FtZXJhX01vZGUgZmFpbGVkIik7Ci0JCWkgPSAtMTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JYnVmZmVyWzBdID0gMHhmMDsKLQlzdHZfc25kY3RybCAoMCwgc3R2NjgwLCAweDg3LCAwLCBidWZmZXIsIDB4MDgpOwotCWlmICgoKHN0djY4MC0+Q0lGID09IDEpICYmIChidWZmZXJbMF0gIT0gMHgwMCkpIHx8ICgoc3R2NjgwLT5RVkdBID09IDEpICYmIChidWZmZXJbMF0gIT0gMHgwMykpKSB7Ci0JCVBERUJVRyAoMCwgIlNUVihlKTogRXJyb3Igc2V0dGluZyBjYW1lcmEgdmlkZW8gbW9kZSEiKTsKLQkJaSA9IC0xOwotCQlnb3RvIGVycm9yOwotCX0gZWxzZSB7Ci0JCWlmIChidWZmZXJbMF0gPT0gMCkgewotCQkJc3R2NjgwLT5WaWRlb01vZGUgPSAweDAwMDA7Ci0JCQlQREVCVUcgKDAsICJTVFYoaSk6IFZpZGVvIE1vZGUgc2V0IHRvIENJRiIpOwotCQl9Ci0JCWlmIChidWZmZXJbMF0gPT0gMHgwMykgewotCQkJc3R2NjgwLT5WaWRlb01vZGUgPSAweDAzMDA7Ci0JCQlQREVCVUcgKDAsICJTVFYoaSk6IFZpZGVvIE1vZGUgc2V0IHRvIFFWR0EiKTsKLQkJfQotCX0KLQlpZiAoKGkgPSBzdHZfc25kY3RybCAoMCwgc3R2NjgwLCAweDhmLCAwLCBidWZmZXIsIDB4MTApKSAhPSAweDEwKQotCQlnb3RvIGVycm9yOwotCWJ1ZnNpemUgPSAoYnVmZmVyWzBdIDw8IDI0KSB8IChidWZmZXJbMV0gPDwgMTYpIHwgKGJ1ZmZlclsyXSA8PCA4KSB8IChidWZmZXJbM10pOwotCXN0djY4MC0+Y3dpZHRoID0gKGJ1ZmZlcls0XSA8PCA4KSB8IChidWZmZXJbNV0pOwkvKiAtPmNhbWVyYSA9IDMyMiwgMzU2LCA2NDQgICovCi0Jc3R2NjgwLT5jaGVpZ2h0ID0gKGJ1ZmZlcls2XSA8PCA4KSB8IChidWZmZXJbN10pOwkvKiAtPmNhbWVyYSA9IDI0MiwgMjkyLCA0ODQgICovCi0Jc3R2NjgwLT5vcmlnR2FpbiA9IGJ1ZmZlclsxMl07Ci0KLQlnb3RvIGV4aXQ7Ci0KLWVycm9yOgotCWkgPSBzdHZfc25kY3RybCAoMCwgc3R2NjgwLCAweDgwLCAwLCBidWZmZXIsIDB4MDIpOwkvKiBHZXQgTGFzdCBFcnJvciAqLwotCVBERUJVRyAoMSwgIlNUVihpKTogbGFzdCBlcnJvcjogJWksICBjb21tYW5kID0gMHgleCIsIGJ1ZmZlclswXSwgYnVmZmVyWzFdKTsKLQlrZnJlZShidWZmZXIpOwotCXJldHVybiAtMTsKLQotZXhpdDoKLQlrZnJlZShidWZmZXIpOwotCi0JLyogdmlkZW8gPSAzMjB4MjQwLCAzNTJ4Mjg4ICovCi0JaWYgKHN0djY4MC0+Q0lGID09IDEpIHsKLQkJc3R2NjgwLT5tYXh3aWR0aCA9IDM1MjsKLQkJc3R2NjgwLT5tYXhoZWlnaHQgPSAyODg7Ci0JCXN0djY4MC0+dndpZHRoID0gMzUyOwotCQlzdHY2ODAtPnZoZWlnaHQgPSAyODg7Ci0JfQotCWlmIChzdHY2ODAtPlFWR0EgPT0gMSkgewotCQlzdHY2ODAtPm1heHdpZHRoID0gMzIwOwotCQlzdHY2ODAtPm1heGhlaWdodCA9IDI0MDsKLQkJc3R2NjgwLT52d2lkdGggPSAzMjA7Ci0JCXN0djY4MC0+dmhlaWdodCA9IDI0MDsKLQl9Ci0KLQlzdHY2ODAtPnJhd2J1ZnNpemUgPSBidWZzaXplOwkvKiBtdXN0IGJlIC4vLiBieSA4ICovCi0Jc3R2NjgwLT5tYXhmcmFtZXNpemUgPSBidWZzaXplICogMzsJLyogUkdCIHNpemUgKi8KLQlQREVCVUcgKDIsICJTVFYoaSk6IGN3aWR0aCA9ICVpLCBjaGVpZ2h0ID0gJWkiLCBzdHY2ODAtPmN3aWR0aCwgc3R2NjgwLT5jaGVpZ2h0KTsKLQlQREVCVUcgKDEsICJTVFYoaSk6IHdpZHRoID0gJWksIGhlaWdodCA9ICVpLCByYXdidWZzaXplID0gJWxpIiwgc3R2NjgwLT52d2lkdGgsIHN0djY4MC0+dmhlaWdodCwgc3R2NjgwLT5yYXdidWZzaXplKTsKLQotCS8qIHNvbWUgZGVmYXVsdCB2YWx1ZXMgKi8KLQlzdHY2ODAtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyID0gMHg4MjsKLQlzdHY2ODAtPmRyb3BwZWQgPSAwOwotCXN0djY4MC0+ZXJyb3IgPSAwOwotCXN0djY4MC0+ZnJhbWVjb3VudCA9IDA7Ci0Jc3R2NjgwLT5yZWFkY291bnQgPSAwOwotCXN0djY4MC0+c3RyZWFtaW5nID0gMDsKLQkvKiBicmlnaHQsIHdoaXRlLCBjb2xvdXIsIGh1ZSwgY29udHJhc3QgYXJlIHNldCBieSBzb2Z0d2FyZSwgbm90IGluIHN0djA2ODAgKi8KLQlzdHY2ODAtPmJyaWdodG5lc3MgPSAzMjc2NzsKLQlzdHY2ODAtPmNoZ2JyaWdodCA9IDA7Ci0Jc3R2NjgwLT53aGl0ZW5lc3MgPSAwOwkvKiBvbmx5IGZvciBncmV5c2NhbGUgKi8KLQlzdHY2ODAtPmNvbG91ciA9IDMyNzY3OwotCXN0djY4MC0+Y29udHJhc3QgPSAzMjc2NzsKLQlzdHY2ODAtPmh1ZSA9IDMyNzY3OwotCXN0djY4MC0+cGFsZXR0ZSA9IFNUVl9WSURFT19QQUxFVFRFOwotCXN0djY4MC0+ZGVwdGggPSAyNDsJLyogcmdiMjQgYml0cyAqLwotCWlmICgoc3dhcFJHQl9vbiA9PSAwKSAmJiAoc3dhcFJHQiA9PSAwKSkKLQkJUERFQlVHICgxLCAiU1RWKGkpOiBzd2FwUkdCIGlzIChhdXRvKSBPRkYiKTsKLQllbHNlIGlmICgoc3dhcFJHQl9vbiA9PSAwKSAmJiAoc3dhcFJHQiA9PSAxKSkKLQkJUERFQlVHICgxLCAiU1RWKGkpOiBzd2FwUkdCIGlzIChhdXRvKSBPTiIpOwotCWVsc2UgaWYgKHN3YXBSR0Jfb24gPT0gMSkKLQkJUERFQlVHICgxLCAiU1RWKGkpOiBzd2FwUkdCIGlzIChmb3JjZWQpIE9OIik7Ci0JZWxzZSBpZiAoc3dhcFJHQl9vbiA9PSAtMSkKLQkJUERFQlVHICgxLCAiU1RWKGkpOiBzd2FwUkdCIGlzIChmb3JjZWQpIE9GRiIpOwotCi0JaWYgKHN0dl9zZXRfdmlkZW9fbW9kZSAoc3R2NjgwKSA8IDApIHsKLQkJUERFQlVHICgwLCAiU1RWKGUpOiBDb3VsZCBub3Qgc2V0IHZpZGVvIG1vZGUgaW4gc3R2X2luaXQiKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKioqKioqKioqKioqKioqKiogbGFzdCBvZiBwZW5jYW0gIHJvdXRpbmVzICAqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIHN5c2ZzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBzdHY2ODBfZmlsZShuYW1lLCB2YXJpYWJsZSwgZmllbGQpCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfIyNuYW1lKHN0cnVjdCBkZXZpY2UgKmNsYXNzX2RldiwJCQlcCi0JCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB0b192aWRlb19kZXZpY2UoY2xhc3NfZGV2KTsJCVwKLQlzdHJ1Y3QgdXNiX3N0diAqc3R2ID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CQkJXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgZmllbGQsIHN0di0+dmFyaWFibGUpOwkJCVwKLX0JCQkJCQkJCQlcCi1zdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd18jI25hbWUsIE5VTEwpOwotCi1zdHY2ODBfZmlsZShtb2RlbCwgY2FtZXJhX25hbWUsICIlc1xuIik7Ci1zdHY2ODBfZmlsZShpbl91c2UsIHVzZXIsICIlZFxuIik7Ci1zdHY2ODBfZmlsZShzdHJlYW1pbmcsIHN0cmVhbWluZywgIiVkXG4iKTsKLXN0djY4MF9maWxlKHBhbGV0dGUsIHBhbGV0dGUsICIlaVxuIik7Ci1zdHY2ODBfZmlsZShmcmFtZXNfdG90YWwsIHJlYWRjb3VudCwgIiVkXG4iKTsKLXN0djY4MF9maWxlKGZyYW1lc19yZWFkLCBmcmFtZWNvdW50LCAiJWRcbiIpOwotc3R2NjgwX2ZpbGUocGFja2V0c19kcm9wcGVkLCBkcm9wcGVkLCAiJWRcbiIpOwotc3R2NjgwX2ZpbGUoZGVjb2RpbmdfZXJyb3JzLCBlcnJvciwgIiVkXG4iKTsKLQotc3RhdGljIGludCBzdHY2ODBfY3JlYXRlX3N5c2ZzX2ZpbGVzKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpCi17Ci0JaW50IHJjOwotCi0JcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnZkZXYtPmRldiwgJmRldl9hdHRyX21vZGVsKTsKLQlpZiAocmMpIGdvdG8gZXJyOwotCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZ2ZGV2LT5kZXYsICZkZXZfYXR0cl9pbl91c2UpOwotCWlmIChyYykgZ290byBlcnJfbW9kZWw7Ci0JcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnZkZXYtPmRldiwgJmRldl9hdHRyX3N0cmVhbWluZyk7Ci0JaWYgKHJjKSBnb3RvIGVycl9pbnVzZTsKLQlyYyA9IGRldmljZV9jcmVhdGVfZmlsZSgmdmRldi0+ZGV2LCAmZGV2X2F0dHJfcGFsZXR0ZSk7Ci0JaWYgKHJjKSBnb3RvIGVycl9zdHJlYW07Ci0JcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnZkZXYtPmRldiwgJmRldl9hdHRyX2ZyYW1lc190b3RhbCk7Ci0JaWYgKHJjKSBnb3RvIGVycl9wYWw7Ci0JcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnZkZXYtPmRldiwgJmRldl9hdHRyX2ZyYW1lc19yZWFkKTsKLQlpZiAocmMpIGdvdG8gZXJyX2ZyYW10b3Q7Ci0JcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnZkZXYtPmRldiwgJmRldl9hdHRyX3BhY2tldHNfZHJvcHBlZCk7Ci0JaWYgKHJjKSBnb3RvIGVycl9mcmFtcmVhZDsKLQlyYyA9IGRldmljZV9jcmVhdGVfZmlsZSgmdmRldi0+ZGV2LCAmZGV2X2F0dHJfZGVjb2RpbmdfZXJyb3JzKTsKLQlpZiAocmMpIGdvdG8gZXJyX2Ryb3BwZWQ7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX2Ryb3BwZWQ6Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZ2ZGV2LT5kZXYsICZkZXZfYXR0cl9wYWNrZXRzX2Ryb3BwZWQpOwotZXJyX2ZyYW1yZWFkOgotCWRldmljZV9yZW1vdmVfZmlsZSgmdmRldi0+ZGV2LCAmZGV2X2F0dHJfZnJhbWVzX3JlYWQpOwotZXJyX2ZyYW10b3Q6Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZ2ZGV2LT5kZXYsICZkZXZfYXR0cl9mcmFtZXNfdG90YWwpOwotZXJyX3BhbDoKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnZkZXYtPmRldiwgJmRldl9hdHRyX3BhbGV0dGUpOwotZXJyX3N0cmVhbToKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnZkZXYtPmRldiwgJmRldl9hdHRyX3N0cmVhbWluZyk7Ci1lcnJfaW51c2U6Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZ2ZGV2LT5kZXYsICZkZXZfYXR0cl9pbl91c2UpOwotZXJyX21vZGVsOgotCWRldmljZV9yZW1vdmVfZmlsZSgmdmRldi0+ZGV2LCAmZGV2X2F0dHJfbW9kZWwpOwotZXJyOgotCVBERUJVRygwLCAiU1RWKGUpOiBDb3VsZCBub3QgY3JlYXRlIHN5c2ZzIGZpbGVzIik7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBzdHY2ODBfcmVtb3ZlX3N5c2ZzX2ZpbGVzKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpCi17Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZ2ZGV2LT5kZXYsICZkZXZfYXR0cl9tb2RlbCk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZ2ZGV2LT5kZXYsICZkZXZfYXR0cl9pbl91c2UpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmdmRldi0+ZGV2LCAmZGV2X2F0dHJfc3RyZWFtaW5nKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnZkZXYtPmRldiwgJmRldl9hdHRyX3BhbGV0dGUpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmdmRldi0+ZGV2LCAmZGV2X2F0dHJfZnJhbWVzX3RvdGFsKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnZkZXYtPmRldiwgJmRldl9hdHRyX2ZyYW1lc19yZWFkKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnZkZXYtPmRldiwgJmRldl9hdHRyX3BhY2tldHNfZHJvcHBlZCk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZ2ZGV2LT5kZXYsICZkZXZfYXR0cl9kZWNvZGluZ19lcnJvcnMpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENhbWVyYSBjb250cm9sCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGludCBzdHY2ODBfZ2V0X3BpY3QgKHN0cnVjdCB1c2Jfc3R2ICpzdHY2ODAsIHN0cnVjdCB2aWRlb19waWN0dXJlICpwKQotewotCS8qIFRoaXMgc2V0cyB2YWx1ZXMgZm9yIHY0bCBpbnRlcmZhY2UuIG1heC9taW4gPSA2NTUzNS8wICAqLwotCi0JcC0+YnJpZ2h0bmVzcyA9IHN0djY4MC0+YnJpZ2h0bmVzczsKLQlwLT53aGl0ZW5lc3MgPSBzdHY2ODAtPndoaXRlbmVzczsJLyogZ3JleXNjYWxlICovCi0JcC0+Y29sb3VyID0gc3R2NjgwLT5jb2xvdXI7Ci0JcC0+Y29udHJhc3QgPSBzdHY2ODAtPmNvbnRyYXN0OwotCXAtPmh1ZSA9IHN0djY4MC0+aHVlOwotCXAtPnBhbGV0dGUgPSBzdHY2ODAtPnBhbGV0dGU7Ci0JcC0+ZGVwdGggPSBzdHY2ODAtPmRlcHRoOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHN0djY4MF9zZXRfcGljdCAoc3RydWN0IHVzYl9zdHYgKnN0djY4MCwgc3RydWN0IHZpZGVvX3BpY3R1cmUgKnApCi17Ci0JLyogU2VlIGFib3ZlIHN0djY4MF9nZXRfcGljdCAgKi8KLQotCWlmIChwLT5wYWxldHRlICE9IFNUVl9WSURFT19QQUxFVFRFKSB7Ci0JCVBERUJVRyAoMiwgIlNUVihlKTogUGFsZXR0ZSBzZXQgZXJyb3IgaW4gX3NldF9waWMiKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKHN0djY4MC0+YnJpZ2h0bmVzcyAhPSBwLT5icmlnaHRuZXNzKSB7Ci0JCXN0djY4MC0+Y2hnYnJpZ2h0ID0gMTsKLQkJc3R2NjgwLT5icmlnaHRuZXNzID0gcC0+YnJpZ2h0bmVzczsKLQl9Ci0KLQlzdHY2ODAtPndoaXRlbmVzcyA9IHAtPndoaXRlbmVzczsJLyogZ3JleXNjYWxlICovCi0Jc3R2NjgwLT5jb2xvdXIgPSBwLT5jb2xvdXI7Ci0Jc3R2NjgwLT5jb250cmFzdCA9IHAtPmNvbnRyYXN0OwotCXN0djY4MC0+aHVlID0gcC0+aHVlOwotCXN0djY4MC0+cGFsZXR0ZSA9IHAtPnBhbGV0dGU7Ci0Jc3R2NjgwLT5kZXB0aCA9IHAtPmRlcHRoOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0djY4MF92aWRlb19pcnEgKHN0cnVjdCB1cmIgKnVyYikKLXsKLQlzdHJ1Y3QgdXNiX3N0diAqc3R2NjgwID0gdXJiLT5jb250ZXh0OwotCWludCBsZW5ndGggPSB1cmItPmFjdHVhbF9sZW5ndGg7Ci0KLQlpZiAobGVuZ3RoIDwgc3R2NjgwLT5yYXdidWZzaXplKQotCQlQREVCVUcgKDIsICJTVFYoaSk6IExvc3QgZGF0YSBpbiB0cmFuc2ZlcjogZXhwICVsaSwgZ290ICVpIiwgc3R2NjgwLT5yYXdidWZzaXplLCBsZW5ndGgpOwotCi0JLyogb2hvaC4uLiAqLwotCWlmICghc3R2NjgwLT5zdHJlYW1pbmcpCi0JCXJldHVybjsKLQotCWlmICghc3R2NjgwLT51ZGV2KSB7Ci0JCVBERUJVRyAoMCwgIlNUVihlKTogZGV2aWNlIHZhcG91cmlzaGVkIGluIHZpZGVvX2lycSIpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogMCBzaXplZCBwYWNrZXRzIGhhcHBlbiBpZiB3ZSBhcmUgdG8gZmFzdCwgYnV0IHNvbWV0aW1lcyB0aGUgY2FtZXJhCi0JICAga2VlcHMgc2VuZGluZyB0aGVtIGZvcmV2ZXIuLi4KLQkgKi8KLQlpZiAobGVuZ3RoICYmICF1cmItPnN0YXR1cykgewotCQlzdHY2ODAtPm51bGxwYWNrZXRzID0gMDsKLQkJc3dpdGNoIChzdHY2ODAtPnNjcmF0Y2hbc3R2NjgwLT5zY3JhdGNoX25leHRdLnN0YXRlKSB7Ci0JCWNhc2UgQlVGRkVSX1JFQURZOgotCQljYXNlIEJVRkZFUl9CVVNZOgotCQkJc3R2NjgwLT5kcm9wcGVkKys7Ci0JCQlicmVhazsKLQotCQljYXNlIEJVRkZFUl9VTlVTRUQ6Ci0JCQltZW1jcHkgKHN0djY4MC0+c2NyYXRjaFtzdHY2ODAtPnNjcmF0Y2hfbmV4dF0uZGF0YSwKLQkJCQkodW5zaWduZWQgY2hhciAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlciwgbGVuZ3RoKTsKLQkJCXN0djY4MC0+c2NyYXRjaFtzdHY2ODAtPnNjcmF0Y2hfbmV4dF0uc3RhdGUgPSBCVUZGRVJfUkVBRFk7Ci0JCQlzdHY2ODAtPnNjcmF0Y2hbc3R2NjgwLT5zY3JhdGNoX25leHRdLmxlbmd0aCA9IGxlbmd0aDsKLQkJCWlmICh3YWl0cXVldWVfYWN0aXZlICgmc3R2NjgwLT53cSkpIHsKLQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUgKCZzdHY2ODAtPndxKTsKLQkJCX0KLQkJCXN0djY4MC0+c2NyYXRjaF9vdmVyZmxvdyA9IDA7Ci0JCQlzdHY2ODAtPnNjcmF0Y2hfbmV4dCsrOwotCQkJaWYgKHN0djY4MC0+c2NyYXRjaF9uZXh0ID49IFNUVjY4MF9OVU1TQ1JBVENIKQotCQkJCXN0djY4MC0+c2NyYXRjaF9uZXh0ID0gMDsKLQkJCWJyZWFrOwotCQl9CQkvKiBzd2l0Y2ggICovCi0JfSBlbHNlIHsKLQkJc3R2NjgwLT5udWxscGFja2V0cysrOwotCQlpZiAoc3R2NjgwLT5udWxscGFja2V0cyA+IFNUVjY4MF9NQVhfTlVMTFBBQ0tFVFMpIHsKLQkJCWlmICh3YWl0cXVldWVfYWN0aXZlICgmc3R2NjgwLT53cSkpIHsKLQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUgKCZzdHY2ODAtPndxKTsKLQkJCX0KLQkJfQotCX0JCQkvKiAgaWYgLSBlbHNlICovCi0KLQkvKiBSZXN1Ym1pdCB1cmIgZm9yIG5ldyBkYXRhICovCi0JdXJiLT5zdGF0dXMgPSAwOwotCXVyYi0+ZGV2ID0gc3R2NjgwLT51ZGV2OwotCWlmICh1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKSkKLQkJUERFQlVHICgwLCAiU1RWKGUpOiB1cmIgYnVybmVkIGRvd24gaW4gdmlkZW8gaXJxIik7Ci0JcmV0dXJuOwotfQkJCQkvKiAgX3ZpZGVvX2lycSAgKi8KLQotc3RhdGljIGludCBzdHY2ODBfc3RhcnRfc3RyZWFtIChzdHJ1Y3QgdXNiX3N0diAqc3R2NjgwKQotewotCXN0cnVjdCB1cmIgKnVyYjsKLQlpbnQgZXJyID0gMCwgaTsKLQotCXN0djY4MC0+c3RyZWFtaW5nID0gMTsKLQotCS8qIERvIHNvbWUgbWVtb3J5IGFsbG9jYXRpb24gKi8KLQlmb3IgKGkgPSAwOyBpIDwgU1RWNjgwX05VTUZSQU1FUzsgaSsrKSB7Ci0JCXN0djY4MC0+ZnJhbWVbaV0uZGF0YSA9IHN0djY4MC0+ZmJ1ZiArIGkgKiBzdHY2ODAtPm1heGZyYW1lc2l6ZTsKLQkJc3R2NjgwLT5mcmFtZVtpXS5jdXJwaXggPSAwOwotCX0KLQkvKiBwYWNrZXQgc2l6ZSA9IDQwOTYgICovCi0JZm9yIChpID0gMDsgaSA8IFNUVjY4MF9OVU1TQlVGOyBpKyspIHsKLQkJc3R2NjgwLT5zYnVmW2ldLmRhdGEgPSBrbWFsbG9jIChzdHY2ODAtPnJhd2J1ZnNpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoc3R2NjgwLT5zYnVmW2ldLmRhdGEgPT0gTlVMTCkgewotCQkJUERFQlVHICgwLCAiU1RWKGUpOiBDb3VsZCBub3Qga21hbGxvYyByYXcgZGF0YSBidWZmZXIgJWkiLCBpKTsKLQkJCWdvdG8gbm9tZW1fZXJyOwotCQl9Ci0JfQotCi0Jc3R2NjgwLT5zY3JhdGNoX25leHQgPSAwOwotCXN0djY4MC0+c2NyYXRjaF91c2UgPSAwOwotCXN0djY4MC0+c2NyYXRjaF9vdmVyZmxvdyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IFNUVjY4MF9OVU1TQ1JBVENIOyBpKyspIHsKLQkJc3R2NjgwLT5zY3JhdGNoW2ldLmRhdGEgPSBrbWFsbG9jIChzdHY2ODAtPnJhd2J1ZnNpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoc3R2NjgwLT5zY3JhdGNoW2ldLmRhdGEgPT0gTlVMTCkgewotCQkJUERFQlVHICgwLCAiU1RWKGUpOiBDb3VsZCBub3Qga21hbGxvYyByYXcgc2NyYXRjaCBidWZmZXIgJWkiLCBpKTsKLQkJCWdvdG8gbm9tZW1fZXJyOwotCQl9Ci0JCXN0djY4MC0+c2NyYXRjaFtpXS5zdGF0ZSA9IEJVRkZFUl9VTlVTRUQ7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IFNUVjY4MF9OVU1TQlVGOyBpKyspIHsKLQkJdXJiID0gdXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghdXJiKQotCQkJZ290byBub21lbV9lcnI7Ci0KLQkJLyogc2J1ZiBpcyB1cmItPnRyYW5zZmVyX2J1ZmZlciwgbGF0ZXIgZ2V0cyBtZW1jcHllZCB0byBzY3JhdGNoICovCi0JCXVzYl9maWxsX2J1bGtfdXJiICh1cmIsIHN0djY4MC0+dWRldiwKLQkJCQkgICB1c2JfcmN2YnVsa3BpcGUgKHN0djY4MC0+dWRldiwgc3R2NjgwLT5idWxrX2luX2VuZHBvaW50QWRkciksCi0JCQkJICAgc3R2NjgwLT5zYnVmW2ldLmRhdGEsIHN0djY4MC0+cmF3YnVmc2l6ZSwKLQkJCQkgICBzdHY2ODBfdmlkZW9faXJxLCBzdHY2ODApOwotCQlzdHY2ODAtPnVyYltpXSA9IHVyYjsKLQkJZXJyID0gdXNiX3N1Ym1pdF91cmIgKHN0djY4MC0+dXJiW2ldLCBHRlBfS0VSTkVMKTsKLQkJaWYgKGVycikgewotCQkJUERFQlVHICgwLCAiU1RWKGUpOiB1cmIgYnVybmVkIGRvd24gd2l0aCBlcnIgIgotCQkJCSAgICIlZCBpbiBzdGFydCBzdHJlYW0gJWQiLCBlcnIsIGkpOwotCQkJZ290byBub21lbV9lcnI7Ci0JCX0KLQl9CQkJLyogaSBTVFY2ODBfTlVNU0JVRiAqLwotCi0Jc3R2NjgwLT5mcmFtZWNvdW50ID0gMDsKLQlyZXR1cm4gMDsKLQotIG5vbWVtX2VycjoKLQlmb3IgKGkgPSAwOyBpIDwgU1RWNjgwX05VTVNCVUY7IGkrKykgewotCQl1c2Jfa2lsbF91cmIoc3R2NjgwLT51cmJbaV0pOwotCQl1c2JfZnJlZV91cmIoc3R2NjgwLT51cmJbaV0pOwotCQlzdHY2ODAtPnVyYltpXSA9IE5VTEw7Ci0JCWtmcmVlKHN0djY4MC0+c2J1ZltpXS5kYXRhKTsKLQkJc3R2NjgwLT5zYnVmW2ldLmRhdGEgPSBOVUxMOwotCX0KLQkvKiB1c2VkIGluIGlycSwgZnJlZSBvbmx5IGFzIGFsbCBVUkJzIGFyZSBkZWFkICovCi0JZm9yIChpID0gMDsgaSA8IFNUVjY4MF9OVU1TQ1JBVENIOyBpKyspIHsKLQkJa2ZyZWUoc3R2NjgwLT5zY3JhdGNoW2ldLmRhdGEpOwotCQlzdHY2ODAtPnNjcmF0Y2hbaV0uZGF0YSA9IE5VTEw7Ci0JfQotCXJldHVybiAtRU5PTUVNOwotCi19Ci0KLXN0YXRpYyBpbnQgc3R2NjgwX3N0b3Bfc3RyZWFtIChzdHJ1Y3QgdXNiX3N0diAqc3R2NjgwKQotewotCWludCBpOwotCi0JaWYgKCFzdHY2ODAtPnN0cmVhbWluZyB8fCAhc3R2NjgwLT51ZGV2KQotCQlyZXR1cm4gMTsKLQotCXN0djY4MC0+c3RyZWFtaW5nID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBTVFY2ODBfTlVNU0JVRjsgaSsrKQotCQlpZiAoc3R2NjgwLT51cmJbaV0pIHsKLQkJCXVzYl9raWxsX3VyYiAoc3R2NjgwLT51cmJbaV0pOwotCQkJdXNiX2ZyZWVfdXJiIChzdHY2ODAtPnVyYltpXSk7Ci0JCQlzdHY2ODAtPnVyYltpXSA9IE5VTEw7Ci0JCQlrZnJlZShzdHY2ODAtPnNidWZbaV0uZGF0YSk7Ci0JCX0KLQlmb3IgKGkgPSAwOyBpIDwgU1RWNjgwX05VTVNDUkFUQ0g7IGkrKykgewotCQlrZnJlZShzdHY2ODAtPnNjcmF0Y2hbaV0uZGF0YSk7Ci0JCXN0djY4MC0+c2NyYXRjaFtpXS5kYXRhID0gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzdHY2ODBfc2V0X3NpemUgKHN0cnVjdCB1c2Jfc3R2ICpzdHY2ODAsIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLQlpbnQgd2Fzc3RyZWFtaW5nID0gc3R2NjgwLT5zdHJlYW1pbmc7Ci0KLQkvKiBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byBjaGFuZ2UgKi8KLQlpZiAoKHN0djY4MC0+dndpZHRoID09IHdpZHRoKSAmJiAoc3R2NjgwLT52aGVpZ2h0ID09IGhlaWdodCkpCi0JCXJldHVybiAwOwotCi0JUERFQlVHICgxLCAiU1RWKGkpOiBzaXplIHJlcXVlc3QgZm9yICVpIHggJWkiLCB3aWR0aCwgaGVpZ2h0KTsKLQkvKiBDaGVjayBmb3IgYSB2YWxpZCBtb2RlICovCi0JaWYgKCghd2lkdGggfHwgIWhlaWdodCkgfHwgKCh3aWR0aCAmIDEpIHx8IChoZWlnaHQgJiAxKSkpIHsKLQkJUERFQlVHICgxLCAiU1RWKGUpOiBzZXRfc2l6ZSBlcnJvcjogcmVxdWVzdDogdi53aWR0aCA9ICVpLCB2LmhlaWdodCA9ICVpICBhY3R1YWw6IHN0di53aWR0aCA9ICVpLCBzdHYuaGVpZ2h0ID0gJWkiLCB3aWR0aCwgaGVpZ2h0LCBzdHY2ODAtPnZ3aWR0aCwgc3R2NjgwLT52aGVpZ2h0KTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKCh3aWR0aCA8IChzdHY2ODAtPm1heHdpZHRoIC8gMikpIHx8IChoZWlnaHQgPCAoc3R2NjgwLT5tYXhoZWlnaHQgLyAyKSkpIHsKLQkJd2lkdGggPSBzdHY2ODAtPm1heHdpZHRoIC8gMjsKLQkJaGVpZ2h0ID0gc3R2NjgwLT5tYXhoZWlnaHQgLyAyOwotCX0gZWxzZSBpZiAoKHdpZHRoID49IDE1OCkgJiYgKHdpZHRoIDw9IDE2NikgJiYgKHN0djY4MC0+UVZHQSA9PSAxKSkgewotCQl3aWR0aCA9IDE2MDsKLQkJaGVpZ2h0ID0gMTIwOwotCX0gZWxzZSBpZiAoKHdpZHRoID49IDE3MikgJiYgKHdpZHRoIDw9IDE4MCkgJiYgKHN0djY4MC0+Q0lGID09IDEpKSB7Ci0JCXdpZHRoID0gMTc2OwotCQloZWlnaHQgPSAxNDQ7Ci0JfSBlbHNlIGlmICgod2lkdGggPj0gMzE4KSAmJiAod2lkdGggPD0gMzUwKSAmJiAoc3R2NjgwLT5RVkdBID09IDEpKSB7Ci0JCXdpZHRoID0gMzIwOwotCQloZWlnaHQgPSAyNDA7Ci0JfSBlbHNlIGlmICgod2lkdGggPj0gMzUwKSAmJiAod2lkdGggPD0gMzU4KSAmJiAoc3R2NjgwLT5DSUYgPT0gMSkpIHsKLQkJd2lkdGggPSAzNTI7Ci0JCWhlaWdodCA9IDI4ODsKLQl9IGVsc2UgewotCQlQREVCVUcgKDEsICJTVFYoZSk6IHJlcXVlc3QgZm9yIG5vbi1zdXBwb3J0ZWQgc2l6ZTogcmVxdWVzdDogdi53aWR0aCA9ICVpLCB2LmhlaWdodCA9ICVpICBhY3R1YWw6IHN0di53aWR0aCA9ICVpLCBzdHYuaGVpZ2h0ID0gJWkiLCB3aWR0aCwgaGVpZ2h0LCBzdHY2ODAtPnZ3aWR0aCwgc3R2NjgwLT52aGVpZ2h0KTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JLyogU3RvcCBhIGN1cnJlbnQgc3RyZWFtIGFuZCBzdGFydCBpdCBhZ2FpbiBhdCB0aGUgbmV3IHNpemUgKi8KLQlpZiAod2Fzc3RyZWFtaW5nKQotCQlzdHY2ODBfc3RvcF9zdHJlYW0gKHN0djY4MCk7Ci0Jc3R2NjgwLT52d2lkdGggPSB3aWR0aDsKLQlzdHY2ODAtPnZoZWlnaHQgPSBoZWlnaHQ7Ci0JUERFQlVHICgxLCAiU1RWKGkpOiBzaXplIHNldCB0byAlaSB4ICVpIiwgc3R2NjgwLT52d2lkdGgsIHN0djY4MC0+dmhlaWdodCk7Ci0JaWYgKHdhc3N0cmVhbWluZykKLQkJc3R2NjgwX3N0YXJ0X3N0cmVhbSAoc3R2NjgwKTsKLQotCXJldHVybiAwOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogVmlkZW8gRGVjb2RpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKiAgcm91dGluZXMgZnJvbSB0aGUgcGVuY2FtIHByb2dyYW07IGhleSwgdGhleSB3b3JrISAgKioqKioqKiovCi0KLS8qCi0gKiBTVFYwNjgwIFZpc2lvbiBDYW1lcmEgQ2hpcHNldCBEcml2ZXIKLSAqIENvcHlyaWdodCAoQykgMjAwMCBBZGFtIEhhcnJpc29uIDxhZGFtQGFudGlzcGluLm9yZz4KLSovCi0KLSNkZWZpbmUgUkVEIDAKLSNkZWZpbmUgR1JFRU4gMQotI2RlZmluZSBCTFVFIDIKLSNkZWZpbmUgQUQoeCwgeSwgdykgKCgoeSkqKHcpKyh4KSkqMykKLQotc3RhdGljIHZvaWQgYmF5ZXJfdW5zaHVmZmxlIChzdHJ1Y3QgdXNiX3N0diAqc3R2NjgwLCBzdHJ1Y3Qgc3R2NjgwX3NjcmF0Y2ggKmJ1ZmZlcikKLXsKLQlpbnQgeCwgeSwgaTsKLQlpbnQgdyA9IHN0djY4MC0+Y3dpZHRoOwotCWludCB2dyA9IHN0djY4MC0+Y3dpZHRoLCB2aCA9IHN0djY4MC0+Y2hlaWdodDsKLQl1bnNpZ25lZCBpbnQgcCA9IDA7Ci0JaW50IGNvbG91ciA9IDAsIGJheWVyID0gMDsKLQl1bnNpZ25lZCBjaGFyICpyYXcgPSBidWZmZXItPmRhdGE7Ci0Jc3RydWN0IHN0djY4MF9mcmFtZSAqZnJhbWUgPSAmc3R2NjgwLT5mcmFtZVtzdHY2ODAtPmN1cmZyYW1lXTsKLQl1bnNpZ25lZCBjaGFyICpvdXRwdXQgPSBmcmFtZS0+ZGF0YTsKLQl1bnNpZ25lZCBjaGFyICp0ZW1wID0gZnJhbWUtPmRhdGE7Ci0JaW50IG9mZnNldCA9IGJ1ZmZlci0+b2Zmc2V0OwotCi0JaWYgKGZyYW1lLT5jdXJwaXggPT0gMCkgewotCQlpZiAoZnJhbWUtPmdyYWJzdGF0ZSA9PSBGUkFNRV9SRUFEWSkgewotCQkJZnJhbWUtPmdyYWJzdGF0ZSA9IEZSQU1FX0dSQUJCSU5HOwotCQl9Ci0JfQotCWlmIChvZmZzZXQgIT0gZnJhbWUtPmN1cnBpeCkgewkvKiBSZWdhcmQgZnJhbWUgYXMgbG9zdCA6KCAqLwotCQlmcmFtZS0+Y3VycGl4ID0gMDsKLQkJc3R2NjgwLT5lcnJvcisrOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKChzdHY2ODAtPnZ3aWR0aCA9PSAzMjApIHx8IChzdHY2ODAtPnZ3aWR0aCA9PSAxNjApKSB7Ci0JCXZ3ID0gMzIwOwotCQl2aCA9IDI0MDsKLQl9Ci0JaWYgKChzdHY2ODAtPnZ3aWR0aCA9PSAzNTIpIHx8IChzdHY2ODAtPnZ3aWR0aCA9PSAxNzYpKSB7Ci0JCXZ3ID0gMzUyOwotCQl2aCA9IDI4ODsKLQl9Ci0KLQltZW1zZXQgKG91dHB1dCwgMCwgMyAqIHZ3ICogdmgpOwkvKiBjbGVhciBvdXRwdXQgbWF0cml4LiAqLwotCi0JZm9yICh5ID0gMDsgeSA8IHZoOyB5KyspIHsKLQkJZm9yICh4ID0gMDsgeCA8IHZ3OyB4KyspIHsKLQkJCWlmICh4ICYgMSkKLQkJCQlwID0gKihyYXcgKyB5ICogdyArICh4ID4+IDEpKTsKLQkJCWVsc2UKLQkJCQlwID0gKihyYXcgKyB5ICogdyArICh4ID4+IDEpICsgKHcgPj4gMSkpOwotCi0JCQlpZiAoeSAmIDEpCi0JCQkJYmF5ZXIgPSAyOwotCQkJZWxzZQotCQkJCWJheWVyID0gMDsKLQkJCWlmICh4ICYgMSkKLQkJCQliYXllcisrOwotCi0JCQlzd2l0Y2ggKGJheWVyKSB7Ci0JCQljYXNlIDA6Ci0JCQljYXNlIDM6Ci0JCQkJY29sb3VyID0gMTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMToKLQkJCQljb2xvdXIgPSAwOwotCQkJCWJyZWFrOwotCQkJY2FzZSAyOgotCQkJCWNvbG91ciA9IDI7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpID0gKHkgKiB2dyArIHgpICogMzsKLQkJCSoob3V0cHV0ICsgaSArIGNvbG91cikgPSAodW5zaWduZWQgY2hhcikgcDsKLQkJfQkJLyogZm9yIHggKi8KLQotCX0JCQkvKiBmb3IgeSAqLwotCi0JLyoqKioqKiBnYW1tYSBjb3JyZWN0aW9uIHBsdXMgaGFyZGNvZGVkIHdoaXRlIGJhbGFuY2UgKi8KLQkvKiBUaGFua3MgdG8gQWxleGFuZGVyIFNjaHdhcnR4IDxhbGV4YW5kZXIuc2Nod2FydHhAZ214Lm5ldD4gZm9yIHRoaXMgY29kZS4KLQkgICBDb3JyZWN0aW9uIHZhbHVlcyByZWRbXSwgZ3JlZW5bXSwgYmx1ZVtdLCBhcmUgZ2VuZXJhdGVkIGJ5Ci0JICAgKHBvdyhpLzI1Ni4wLCBHQU1NQSkqMjU1LjApKndoaXRlIGJhbGFuY2VSR0Igd2hlcmUgR0FNTUE9MC41NSwgMTxpPDI1NS4KLQkgICBXaGl0ZSBiYWxhbmNlIChSR0IpPSAxLjAsIDEuMTcsIDEuNDguIFZhbHVlcyBhcmUgY2FsY3VsYXRlZCBhcyBkb3VibGUgZmxvYXQgYW5kCi0JICAgY29udmVydGVkIHRvIHVuc2lnbmVkIGNoYXIuIFZhbHVlcyBhcmUgaW4gc3R2NjgwLmggICovCi0KLQlmb3IgKHkgPSAwOyB5IDwgdmg7IHkrKykgewotCQlmb3IgKHggPSAwOyB4IDwgdnc7IHgrKykgewotCQkJaSA9ICh5ICogdncgKyB4KSAqIDM7Ci0JCQkqKG91dHB1dCArIGkpID0gcmVkWyoob3V0cHV0ICsgaSldOwotCQkJKihvdXRwdXQgKyBpICsgMSkgPSBncmVlblsqKG91dHB1dCArIGkgKyAxKV07Ci0JCQkqKG91dHB1dCArIGkgKyAyKSA9IGJsdWVbKihvdXRwdXQgKyBpICsgMildOwotCQl9Ci0JfQotCi0JLyoqKioqKiAgYmF5ZXIgZGVtb3NhaWMgICoqKioqKi8KLQlmb3IgKHkgPSAxOyB5IDwgKHZoIC0gMSk7IHkrKykgewotCQlmb3IgKHggPSAxOyB4IDwgKHZ3IC0gMSk7IHgrKykgewkvKiB3b3JrIG91dCBwaXhlbCB0eXBlICovCi0JCQlpZiAoeSAmIDEpCi0JCQkJYmF5ZXIgPSAwOwotCQkJZWxzZQotCQkJCWJheWVyID0gMjsKLQkJCWlmICghKHggJiAxKSkKLQkJCQliYXllcisrOwotCi0JCQlzd2l0Y2ggKGJheWVyKSB7Ci0JCQljYXNlIDA6CS8qIGdyZWVuLiBibHVlIGxyLCByZWQgdGIgKi8KLQkJCQkqKG91dHB1dCArIEFEICh4LCB5LCB2dykgKyBCTFVFKSA9ICgoaW50KSAqKG91dHB1dCArIEFEICh4IC0gMSwgeSwgdncpICsgQkxVRSkgKyAoaW50KSAqKG91dHB1dCArIEFEICh4ICsgMSwgeSwgdncpICsgQkxVRSkpID4+IDE7Ci0JCQkJKihvdXRwdXQgKyBBRCAoeCwgeSwgdncpICsgUkVEKSA9ICgoaW50KSAqKG91dHB1dCArIEFEICh4LCB5IC0gMSwgdncpICsgUkVEKSArIChpbnQpICoob3V0cHV0ICsgQUQgKHgsIHkgKyAxLCB2dykgKyBSRUQpKSA+PiAxOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDE6CS8qIGJsdWUuIGdyZWVuIGxydGIsIHJlZCBkaWFnb25hbHMgKi8KLQkJCQkqKG91dHB1dCArIEFEICh4LCB5LCB2dykgKyBHUkVFTikgPSAoKGludCkgKihvdXRwdXQgKyBBRCAoeCAtIDEsIHksIHZ3KSArIEdSRUVOKSArIChpbnQpICoob3V0cHV0ICsgQUQgKHggKyAxLCB5LCB2dykgKyBHUkVFTikgKyAoaW50KSAqKG91dHB1dCArIEFEICh4LCB5IC0gMSwgdncpICsgR1JFRU4pICsgKGludCkgKihvdXRwdXQgKyBBRCAoeCwgeSArIDEsIHZ3KSArIEdSRUVOKSkgPj4gMjsKLQkJCQkqKG91dHB1dCArIEFEICh4LCB5LCB2dykgKyBSRUQpID0gKChpbnQpICoob3V0cHV0ICsgQUQgKHggLSAxLCB5IC0gMSwgdncpICsgUkVEKSArIChpbnQpICoob3V0cHV0ICsgQUQgKHggLSAxLCB5ICsgMSwgdncpICsgUkVEKSArIChpbnQpICoob3V0cHV0ICsgQUQgKHggKyAxLCB5IC0gMSwgdncpICsgUkVEKSArIChpbnQpICoob3V0cHV0ICsgQUQgKHggKyAxLCB5ICsgMSwgdncpICsgUkVEKSkgPj4gMjsKLQkJCQlicmVhazsKLQotCQkJY2FzZSAyOgkvKiByZWQuIGdyZWVuIGxydGIsIGJsdWUgZGlhZ29uYWxzICovCi0JCQkJKihvdXRwdXQgKyBBRCAoeCwgeSwgdncpICsgR1JFRU4pID0gKChpbnQpICoob3V0cHV0ICsgQUQgKHggLSAxLCB5LCB2dykgKyBHUkVFTikgKyAoaW50KSAqKG91dHB1dCArIEFEICh4ICsgMSwgeSwgdncpICsgR1JFRU4pICsgKGludCkgKihvdXRwdXQgKyBBRCAoeCwgeSAtIDEsIHZ3KSArIEdSRUVOKSArIChpbnQpICoob3V0cHV0ICsgQUQgKHgsIHkgKyAxLCB2dykgKyBHUkVFTikpID4+IDI7Ci0JCQkJKihvdXRwdXQgKyBBRCAoeCwgeSwgdncpICsgQkxVRSkgPSAoKGludCkgKihvdXRwdXQgKyBBRCAoeCAtIDEsIHkgLSAxLCB2dykgKyBCTFVFKSArIChpbnQpICoob3V0cHV0ICsgQUQgKHggKyAxLCB5IC0gMSwgdncpICsgQkxVRSkgKyAoaW50KSAqKG91dHB1dCArIEFEICh4IC0gMSwgeSArIDEsIHZ3KSArIEJMVUUpICsgKGludCkgKihvdXRwdXQgKyBBRCAoeCArIDEsIHkgKyAxLCB2dykgKyBCTFVFKSkgPj4gMjsKLQkJCQlicmVhazsKLQotCQkJY2FzZSAzOgkvKiBncmVlbi4gcmVkIGxyLCBibHVlIHRiICovCi0JCQkJKihvdXRwdXQgKyBBRCAoeCwgeSwgdncpICsgUkVEKSA9ICgoaW50KSAqKG91dHB1dCArIEFEICh4IC0gMSwgeSwgdncpICsgUkVEKSArIChpbnQpICoob3V0cHV0ICsgQUQgKHggKyAxLCB5LCB2dykgKyBSRUQpKSA+PiAxOwotCQkJCSoob3V0cHV0ICsgQUQgKHgsIHksIHZ3KSArIEJMVUUpID0gKChpbnQpICoob3V0cHV0ICsgQUQgKHgsIHkgLSAxLCB2dykgKyBCTFVFKSArIChpbnQpICoob3V0cHV0ICsgQUQgKHgsIHkgKyAxLCB2dykgKyBCTFVFKSkgPj4gMTsKLQkJCQlicmVhazsKLQkJCX0JLyogc3dpdGNoICovCi0JCX0JCS8qIGZvciB4ICovCi0JfQkJCS8qIGZvciB5ICAtIGVuZCBkZW1vc2FpYyAgKi8KLQotCS8qIGZpeCB0b3AgYW5kIGJvdHRvbSByb3csIGxlZnQgYW5kIHJpZ2h0IHNpZGUgKi8KLQlpID0gdncgKiAzOwotCW1lbWNweSAob3V0cHV0LCAob3V0cHV0ICsgaSksIGkpOwotCW1lbWNweSAoKG91dHB1dCArICh2aCAqIGkpKSwgKG91dHB1dCArICgodmggLSAxKSAqIGkpKSwgaSk7Ci0JZm9yICh5ID0gMDsgeSA8IHZoOyB5KyspIHsKLQkJaSA9IHkgKiB2dyAqIDM7Ci0JCW1lbWNweSAoKG91dHB1dCArIGkpLCAob3V0cHV0ICsgaSArIDMpLCAzKTsKLQkJbWVtY3B5ICgob3V0cHV0ICsgaSArICh2dyAqIDMpKSwgKG91dHB1dCArIGkgKyAodncgLSAxKSAqIDMpLCAzKTsKLQl9Ci0KLQkvKiAgcHJvY2VzcyBhbGwgcmF3IGRhdGEsIHRoZW4gdHJpbSB0byBzaXplIGlmIG5lY2Vzc2FyeSAqLwotCWlmICgoc3R2NjgwLT52d2lkdGggPT0gMTYwKSB8fCAoc3R2NjgwLT52d2lkdGggPT0gMTc2KSkgIHsKLQkJaSA9IDA7Ci0JCWZvciAoeSA9IDA7IHkgPCB2aDsgeSsrKSB7Ci0JCQlpZiAoISh5ICYgMSkpIHsKLQkJCQlmb3IgKHggPSAwOyB4IDwgdnc7IHgrKykgewotCQkJCQlwID0gKHkgKiB2dyArIHgpICogMzsKLQkJCQkJaWYgKCEoeCAmIDEpKSB7Ci0JCQkJCQkqKG91dHB1dCArIGkpID0gKihvdXRwdXQgKyBwKTsKLQkJCQkJCSoob3V0cHV0ICsgaSArIDEpID0gKihvdXRwdXQgKyBwICsgMSk7Ci0JCQkJCQkqKG91dHB1dCArIGkgKyAyKSA9ICoob3V0cHV0ICsgcCArIDIpOwotCQkJCQkJaSArPSAzOwotCQkJCQl9Ci0JCQkJfSAgLyogZm9yIHggKi8KLQkJCX0KLQkJfSAgLyogZm9yIHkgKi8KLQl9Ci0JLyogcmVzZXQgdG8gcHJvcGVyIHdpZHRoICovCi0JaWYgKChzdHY2ODAtPnZ3aWR0aCA9PSAxNjApKSB7Ci0JCXZ3ID0gMTYwOwotCQl2aCA9IDEyMDsKLQl9Ci0JaWYgKChzdHY2ODAtPnZ3aWR0aCA9PSAxNzYpKSB7Ci0JCXZ3ID0gMTc2OwotCQl2aCA9IDE0NDsKLQl9Ci0KLQkvKiBvdXRwdXQgaXMgUkdCOyBzb21lIHByb2dyYW1zIHdhbnQgQkdSICAqLwotCS8qIHN3YXBSR0Jfb249MCAtPiBwcm9ncmFtIGRlY2lkZXM7ICBzd2FwUkdCX29uPTEsIGFsd2F5cyBzd2FwICovCi0JLyogc3dhcFJHQl9vbj0tMSwgbmV2ZXIgc3dhcCAqLwotCWlmICgoKHN3YXBSR0IgPT0gMSkgJiYgKHN3YXBSR0Jfb24gIT0gLTEpKSB8fCAoc3dhcFJHQl9vbiA9PSAxKSkgewotCQlmb3IgKHkgPSAwOyB5IDwgdmg7IHkrKykgewotCQkJZm9yICh4ID0gMDsgeCA8IHZ3OyB4KyspIHsKLQkJCQlpID0gKHkgKiB2dyArIHgpICogMzsKLQkJCQkqKHRlbXApID0gKihvdXRwdXQgKyBpKTsKLQkJCQkqKG91dHB1dCArIGkpID0gKihvdXRwdXQgKyBpICsgMik7Ci0JCQkJKihvdXRwdXQgKyBpICsgMikgPSAqKHRlbXApOwotCQkJfQotCQl9Ci0JfQotCS8qIGJyaWdodG5lc3MgKi8KLQlpZiAoc3R2NjgwLT5jaGdicmlnaHQgPT0gMSkgewotCQlpZiAoc3R2NjgwLT5icmlnaHRuZXNzID49IDMyNzY3KSB7Ci0JCQlwID0gKHN0djY4MC0+YnJpZ2h0bmVzcyAtIDMyNzY3KSAvIDI1NjsKLQkJCWZvciAoeCA9IDA7IHggPCAodncgKiB2aCAqIDMpOyB4KyspIHsKLQkJCQlpZiAoKCoob3V0cHV0ICsgeCkgKyAodW5zaWduZWQgY2hhcikgcCkgPiAyNTUpCi0JCQkJCSoob3V0cHV0ICsgeCkgPSAyNTU7Ci0JCQkJZWxzZQotCQkJCQkqKG91dHB1dCArIHgpICs9ICh1bnNpZ25lZCBjaGFyKSBwOwotCQkJfQkvKiBmb3IgKi8KLQkJfSBlbHNlIHsKLQkJCXAgPSAoMzI3NjcgLSBzdHY2ODAtPmJyaWdodG5lc3MpIC8gMjU2OwotCQkJZm9yICh4ID0gMDsgeCA8ICh2dyAqIHZoICogMyk7IHgrKykgewotCQkJCWlmICgodW5zaWduZWQgY2hhcikgcCA+ICoob3V0cHV0ICsgeCkpCi0JCQkJCSoob3V0cHV0ICsgeCkgPSAwOwotCQkJCWVsc2UKLQkJCQkJKihvdXRwdXQgKyB4KSAtPSAodW5zaWduZWQgY2hhcikgcDsKLQkJCX0JLyogZm9yICovCi0JCX0JCS8qIGVsc2UgKi8KLQl9Ci0JLyogaWYgKi8KLQlmcmFtZS0+Y3VycGl4ID0gMDsKLQlmcmFtZS0+Y3VybGluZXBpeCA9IDA7Ci0JZnJhbWUtPmdyYWJzdGF0ZSA9IEZSQU1FX0RPTkU7Ci0Jc3R2NjgwLT5mcmFtZWNvdW50Kys7Ci0Jc3R2NjgwLT5yZWFkY291bnQrKzsKLQlpZiAoc3R2NjgwLT5mcmFtZVsoc3R2NjgwLT5jdXJmcmFtZSArIDEpICYgKFNUVjY4MF9OVU1GUkFNRVMgLSAxKV0uZ3JhYnN0YXRlID09IEZSQU1FX1JFQURZKSB7Ci0JCXN0djY4MC0+Y3VyZnJhbWUgPSAoc3R2NjgwLT5jdXJmcmFtZSArIDEpICYgKFNUVjY4MF9OVU1GUkFNRVMgLSAxKTsKLQl9Ci0KLX0JCQkJLyogYmF5ZXJfdW5zaHVmZmxlICovCi0KLS8qKioqKioqICBlbmQgcm91dGluZXMgZnJvbSB0aGUgcGVuY2FtIHByb2dyYW0gICoqKioqKioqKi8KLQotc3RhdGljIGludCBzdHY2ODBfbmV3ZnJhbWUgKHN0cnVjdCB1c2Jfc3R2ICpzdHY2ODAsIGludCBmcmFtZW5yKQotewotCWludCBlcnJvcnMgPSAwOwotCi0Jd2hpbGUgKHN0djY4MC0+c3RyZWFtaW5nICYmIChzdHY2ODAtPmZyYW1lW2ZyYW1lbnJdLmdyYWJzdGF0ZSA9PSBGUkFNRV9SRUFEWSB8fCBzdHY2ODAtPmZyYW1lW2ZyYW1lbnJdLmdyYWJzdGF0ZSA9PSBGUkFNRV9HUkFCQklORykpIHsKLQkJaWYgKCFzdHY2ODAtPmZyYW1lW2ZyYW1lbnJdLmN1cnBpeCkgewotCQkJZXJyb3JzKys7Ci0JCX0KLQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlIChzdHY2ODAtPndxLCAoc3R2NjgwLT5zY3JhdGNoW3N0djY4MC0+c2NyYXRjaF91c2VdLnN0YXRlID09IEJVRkZFUl9SRUFEWSkpOwotCi0JCWlmIChzdHY2ODAtPm51bGxwYWNrZXRzID4gU1RWNjgwX01BWF9OVUxMUEFDS0VUUykgewotCQkJc3R2NjgwLT5udWxscGFja2V0cyA9IDA7Ci0JCQlQREVCVUcgKDIsICJTVFYoaSk6IHRvbyBtYW55IG51bGwgbGVuZ3RoIHBhY2tldHMsIHJlc3RhcnRpbmcgY2FwdHVyZSIpOwotCQkJc3R2NjgwX3N0b3Bfc3RyZWFtIChzdHY2ODApOwotCQkJc3R2NjgwX3N0YXJ0X3N0cmVhbSAoc3R2NjgwKTsKLQkJfSBlbHNlIHsKLQkJCWlmIChzdHY2ODAtPnNjcmF0Y2hbc3R2NjgwLT5zY3JhdGNoX3VzZV0uc3RhdGUgIT0gQlVGRkVSX1JFQURZKSB7Ci0JCQkJc3R2NjgwLT5mcmFtZVtmcmFtZW5yXS5ncmFic3RhdGUgPSBGUkFNRV9FUlJPUjsKLQkJCQlQREVCVUcgKDIsICJTVFYoZSk6IEZSQU1FX0VSUk9SIGluIF9uZXdmcmFtZSIpOwotCQkJCXJldHVybiAtRUlPOwotCQkJfQotCQkJc3R2NjgwLT5zY3JhdGNoW3N0djY4MC0+c2NyYXRjaF91c2VdLnN0YXRlID0gQlVGRkVSX0JVU1k7Ci0KLQkJCWJheWVyX3Vuc2h1ZmZsZSAoc3R2NjgwLCAmc3R2NjgwLT5zY3JhdGNoW3N0djY4MC0+c2NyYXRjaF91c2VdKTsKLQotCQkJc3R2NjgwLT5zY3JhdGNoW3N0djY4MC0+c2NyYXRjaF91c2VdLnN0YXRlID0gQlVGRkVSX1VOVVNFRDsKLQkJCXN0djY4MC0+c2NyYXRjaF91c2UrKzsKLQkJCWlmIChzdHY2ODAtPnNjcmF0Y2hfdXNlID49IFNUVjY4MF9OVU1TQ1JBVENIKQotCQkJCXN0djY4MC0+c2NyYXRjaF91c2UgPSAwOwotCQkJaWYgKGVycm9ycyA+IFNUVjY4MF9NQVhfRVJST1JTKSB7Ci0JCQkJZXJyb3JzID0gMDsKLQkJCQlQREVCVUcgKDIsICJTVFYoaSk6IHRvbyBtYW55IGVycm9ycywgcmVzdGFydGluZyBjYXB0dXJlIik7Ci0JCQkJc3R2NjgwX3N0b3Bfc3RyZWFtIChzdHY2ODApOwotCQkJCXN0djY4MF9zdGFydF9zdHJlYW0gKHN0djY4MCk7Ci0JCQl9Ci0JCX0JCS8qIGVsc2UgKi8KLQl9CQkJLyogd2hpbGUgKi8KLQlyZXR1cm4gMDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogVmlkZW80TGludXgKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbnQgc3R2X29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXNiX3N0diAqc3R2NjgwID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKLQlpbnQgZXJyID0gMDsKLQotCS8qIHdlIGFyZSBjYWxsZWQgd2l0aCB0aGUgQktMIGhlbGQgKi8KLQlsb2NrX2tlcm5lbCgpOwotCXN0djY4MC0+dXNlciA9IDE7Ci0JZXJyID0gc3R2X2luaXQgKHN0djY4MCk7CS8qIG1haW4gaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgY2FtZXJhICovCi0KLQlpZiAoZXJyID49IDApIHsKLQkJc3R2NjgwLT5mYnVmID0gcnZtYWxsb2MgKHN0djY4MC0+bWF4ZnJhbWVzaXplICogU1RWNjgwX05VTUZSQU1FUyk7Ci0JCWlmICghc3R2NjgwLT5mYnVmKSB7Ci0JCQlQREVCVUcgKDAsICJTVFYoZSk6IENvdWxkIG5vdCBydm1hbGxvYyBmcmFtZSBidWZlciIpOwotCQkJZXJyID0gLUVOT01FTTsKLQkJfQotCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBkZXY7Ci0JfQotCWlmIChlcnIpCi0JCXN0djY4MC0+dXNlciA9IDA7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBzdHZfY2xvc2Uoc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCB1c2Jfc3R2ICpzdHY2ODAgPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IFNUVjY4MF9OVU1GUkFNRVM7IGkrKykKLQkJc3R2NjgwLT5mcmFtZVtpXS5ncmFic3RhdGUgPSBGUkFNRV9VTlVTRUQ7Ci0JaWYgKHN0djY4MC0+c3RyZWFtaW5nKQotCQlzdHY2ODBfc3RvcF9zdHJlYW0gKHN0djY4MCk7Ci0KLQlpZiAoKGkgPSBzdHZfc3RvcF92aWRlbyAoc3R2NjgwKSkgPCAwKQotCQlQREVCVUcgKDEsICJTVFYoZSk6IHN0b3BfdmlkZW8gZmFpbGVkIGluIHN0dl9jbG9zZSIpOwotCi0JcnZmcmVlIChzdHY2ODAtPmZidWYsIHN0djY4MC0+bWF4ZnJhbWVzaXplICogU1RWNjgwX05VTUZSQU1FUyk7Ci0Jc3R2NjgwLT51c2VyID0gMDsKLQotCWlmIChzdHY2ODAtPnJlbW92ZWQpIHsKLQkJa2ZyZWUoc3R2NjgwKTsKLQkJc3R2NjgwID0gTlVMTDsKLQkJUERFQlVHICgwLCAiU1RWKGkpOiBkZXZpY2UgdW5yZWdpc3RlcmVkIik7Ci0JfQotCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBsb25nIHN0djY4MF9kb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHVzYl9zdHYgKnN0djY4MCA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOwotCi0JaWYgKCFzdHY2ODAtPnVkZXYpCi0JCXJldHVybiAtRUlPOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFZJRElPQ0dDQVA6ewotCQkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgKmIgPSBhcmc7Ci0KLQkJCXN0cmNweSAoYi0+bmFtZSwgc3R2NjgwLT5jYW1lcmFfbmFtZSk7Ci0JCQliLT50eXBlID0gVklEX1RZUEVfQ0FQVFVSRTsKLQkJCWItPmNoYW5uZWxzID0gMTsKLQkJCWItPmF1ZGlvcyA9IDA7Ci0JCQliLT5tYXh3aWR0aCA9IHN0djY4MC0+bWF4d2lkdGg7Ci0JCQliLT5tYXhoZWlnaHQgPSBzdHY2ODAtPm1heGhlaWdodDsKLQkJCWItPm1pbndpZHRoID0gc3R2NjgwLT5tYXh3aWR0aCAvIDI7Ci0JCQliLT5taW5oZWlnaHQgPSBzdHY2ODAtPm1heGhlaWdodCAvIDI7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCWNhc2UgVklESU9DR0NIQU46ewotCQkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKnYgPSBhcmc7Ci0KLQkJCWlmICh2LT5jaGFubmVsICE9IDApCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl2LT5mbGFncyA9IDA7Ci0JCQl2LT50dW5lcnMgPSAwOwotCQkJdi0+dHlwZSA9IFZJREVPX1RZUEVfQ0FNRVJBOwotCQkJc3RyY3B5ICh2LT5uYW1lLCAiU1RWIENhbWVyYSIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQljYXNlIFZJRElPQ1NDSEFOOnsKLQkJCXN0cnVjdCB2aWRlb19jaGFubmVsICp2ID0gYXJnOwotCQkJaWYgKHYtPmNoYW5uZWwgIT0gMCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCXJldHVybiAwOwotCQl9Ci0JY2FzZSBWSURJT0NHUElDVDp7Ci0JCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcCA9IGFyZzsKLQotCQkJc3R2NjgwX2dldF9waWN0IChzdHY2ODAsIHApOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQljYXNlIFZJRElPQ1NQSUNUOnsKLQkJCXN0cnVjdCB2aWRlb19waWN0dXJlICpwID0gYXJnOwotCi0JCQlpZiAoc3R2NjgwX3NldF9waWN0IChzdHY2ODAsIHApKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQljYXNlIFZJRElPQ1NXSU46ewotCQkJc3RydWN0IHZpZGVvX3dpbmRvdyAqdncgPSBhcmc7Ci0KLQkJCWlmICh2dy0+ZmxhZ3MpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlpZiAodnctPmNsaXBjb3VudCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWlmICh2dy0+d2lkdGggIT0gc3R2NjgwLT52d2lkdGgpIHsKLQkJCQlpZiAoc3R2NjgwX3NldF9zaXplIChzdHY2ODAsIHZ3LT53aWR0aCwgdnctPmhlaWdodCkpIHsKLQkJCQkJUERFQlVHICgyLCAiU1RWKGUpOiBmYWlsZWQgKGZyb20gdXNlcikgc2V0IHNpemUgaW4gVklESU9DU1dJTiIpOwotCQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCQl9Ci0JCQl9Ci0JCQlyZXR1cm4gMDsKLQkJfQotCWNhc2UgVklESU9DR1dJTjp7Ci0JCQlzdHJ1Y3QgdmlkZW9fd2luZG93ICp2dyA9IGFyZzsKLQotCQkJdnctPnggPSAwOwkvKiBGSVhNRSAqLwotCQkJdnctPnkgPSAwOwotCQkJdnctPmNocm9tYWtleSA9IDA7Ci0JCQl2dy0+ZmxhZ3MgPSAwOwotCQkJdnctPmNsaXBjb3VudCA9IDA7Ci0JCQl2dy0+d2lkdGggPSBzdHY2ODAtPnZ3aWR0aDsKLQkJCXZ3LT5oZWlnaHQgPSBzdHY2ODAtPnZoZWlnaHQ7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCWNhc2UgVklESU9DR01CVUY6ewotCQkJc3RydWN0IHZpZGVvX21idWYgKnZtID0gYXJnOwotCQkJaW50IGk7Ci0KLQkJCW1lbXNldCAodm0sIDAsIHNpemVvZiAoKnZtKSk7Ci0JCQl2bS0+c2l6ZSA9IFNUVjY4MF9OVU1GUkFNRVMgKiBzdHY2ODAtPm1heGZyYW1lc2l6ZTsKLQkJCXZtLT5mcmFtZXMgPSBTVFY2ODBfTlVNRlJBTUVTOwotCQkJZm9yIChpID0gMDsgaSA8IFNUVjY4MF9OVU1GUkFNRVM7IGkrKykKLQkJCQl2bS0+b2Zmc2V0c1tpXSA9IHN0djY4MC0+bWF4ZnJhbWVzaXplICogaTsKLQkJCXJldHVybiAwOwotCQl9Ci0JY2FzZSBWSURJT0NNQ0FQVFVSRTp7Ci0JCQlzdHJ1Y3QgdmlkZW9fbW1hcCAqdm0gPSBhcmc7Ci0KLQkJCWlmICh2bS0+Zm9ybWF0ICE9IFNUVl9WSURFT19QQUxFVFRFKSB7Ci0JCQkJUERFQlVHICgyLCAiU1RWKGkpOiBWSURJT0NNQ0FQVFVSRSB2bS5mb3JtYXQgKCVpKSAhPSBWSURFT19QQUxFVFRFICglaSkiLAotCQkJCQl2bS0+Zm9ybWF0LCBTVFZfVklERU9fUEFMRVRURSk7Ci0JCQkJaWYgKCh2bS0+Zm9ybWF0ID09IDMpICYmIChzd2FwUkdCX29uID09IDApKSAgewotCQkJCQlQREVCVUcgKDIsICJTVFYoaSk6IFZJRElPQ01DQVBUVVJFIHN3YXBSR0IgaXMgKGF1dG8pIE9OIik7Ci0JCQkJCS8qIHRoaXMgbWF5IGZpeCB0aG9zZSBhcHBzIChlLmcuLCB4YXd0dikgdGhhdCB3YW50IEJHUiAqLwotCQkJCQlzd2FwUkdCID0gMTsKLQkJCQl9Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCQlpZiAodm0tPmZyYW1lID49IFNUVjY4MF9OVU1GUkFNRVMpIHsKLQkJCQlQREVCVUcgKDIsICJTVFYoZSk6IFZJRElPQ01DQVBUVVJFIHZtLmZyYW1lID4gTlVNRlJBTUVTIik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCQlpZiAoKHN0djY4MC0+ZnJhbWVbdm0tPmZyYW1lXS5ncmFic3RhdGUgPT0gRlJBTUVfRVJST1IpCi0JCQkgICAgfHwgKHN0djY4MC0+ZnJhbWVbdm0tPmZyYW1lXS5ncmFic3RhdGUgPT0gRlJBTUVfR1JBQkJJTkcpKSB7Ci0JCQkJUERFQlVHICgyLCAiU1RWKGUpOiBWSURJT0NNQ0FQVFVSRSBncmFic3RhdGUgKCVpKSBlcnJvciIsCi0JCQkJCXN0djY4MC0+ZnJhbWVbdm0tPmZyYW1lXS5ncmFic3RhdGUpOwotCQkJCXJldHVybiAtRUJVU1k7Ci0JCQl9Ci0JCQkvKiBJcyB0aGlzIGFjY29yZGluZyB0byB0aGUgdjRsIHNwZWM/Pz8gKi8KLQkJCWlmIChzdHY2ODAtPnZ3aWR0aCAhPSB2bS0+d2lkdGgpIHsKLQkJCQlpZiAoc3R2NjgwX3NldF9zaXplIChzdHY2ODAsIHZtLT53aWR0aCwgdm0tPmhlaWdodCkpIHsKLQkJCQkJUERFQlVHICgyLCAiU1RWKGUpOiBWSURJT0NNQ0FQVFVSRSBzZXRfc2l6ZSBmYWlsZWQiKTsKLQkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkJfQotCQkJfQotCQkJc3R2NjgwLT5mcmFtZVt2bS0+ZnJhbWVdLmdyYWJzdGF0ZSA9IEZSQU1FX1JFQURZOwotCi0JCQlpZiAoIXN0djY4MC0+c3RyZWFtaW5nKQotCQkJCXN0djY4MF9zdGFydF9zdHJlYW0gKHN0djY4MCk7Ci0KLQkJCXJldHVybiAwOwotCQl9Ci0JY2FzZSBWSURJT0NTWU5DOnsKLQkJCWludCAqZnJhbWUgPSBhcmc7Ci0JCQlpbnQgcmV0ID0gMDsKLQotCQkJaWYgKCpmcmFtZSA8IDAgfHwgKmZyYW1lID49IFNUVjY4MF9OVU1GUkFNRVMpIHsKLQkJCQlQREVCVUcgKDIsICJTVFYoZSk6IEJhZCBmcmFtZSAjIGluIFZJRElPQ1NZTkMiKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJCXJldCA9IHN0djY4MF9uZXdmcmFtZSAoc3R2NjgwLCAqZnJhbWUpOwotCQkJc3R2NjgwLT5mcmFtZVsqZnJhbWVdLmdyYWJzdGF0ZSA9IEZSQU1FX1VOVVNFRDsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQljYXNlIFZJRElPQ0dGQlVGOnsKLQkJCXN0cnVjdCB2aWRlb19idWZmZXIgKnZiID0gYXJnOwotCi0JCQltZW1zZXQgKHZiLCAwLCBzaXplb2YgKCp2YikpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQljYXNlIFZJRElPQ0tFWToKLQkJcmV0dXJuIDA7Ci0JY2FzZSBWSURJT0NDQVBUVVJFOgotCQl7Ci0JCQlQREVCVUcgKDIsICJTVFYoZSk6IFZJRElPQ0NBUFRVUkUgZmFpbGVkIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCWNhc2UgVklESU9DU0ZCVUY6Ci0JY2FzZSBWSURJT0NHVFVORVI6Ci0JY2FzZSBWSURJT0NTVFVORVI6Ci0JY2FzZSBWSURJT0NHRlJFUToKLQljYXNlIFZJRElPQ1NGUkVROgotCWNhc2UgVklESU9DR0FVRElPOgotCWNhc2UgVklESU9DU0FVRElPOgotCQlyZXR1cm4gLUVJTlZBTDsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0JCQkvKiBlbmQgc3dpdGNoICovCi0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGxvbmcgc3R2NjgwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLAotCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGZpbGUsIGNtZCwgYXJnLCBzdHY2ODBfZG9faW9jdGwpOwotfQotCi1zdGF0aWMgaW50IHN0djY4MF9tbWFwIChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCB1c2Jfc3R2ICpzdHY2ODAgPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOwotCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OwotCXVuc2lnbmVkIGxvbmcgc2l6ZSAgPSB2bWEtPnZtX2VuZC12bWEtPnZtX3N0YXJ0OwotCXVuc2lnbmVkIGxvbmcgcGFnZSwgcG9zOwotCi0JbXV0ZXhfbG9jaygmc3R2NjgwLT5sb2NrKTsKLQotCWlmIChzdHY2ODAtPnVkZXYgPT0gTlVMTCkgewotCQltdXRleF91bmxvY2soJnN0djY4MC0+bG9jayk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlpZiAoc2l6ZSA+ICgoKFNUVjY4MF9OVU1GUkFNRVMgKiBzdHY2ODAtPm1heGZyYW1lc2l6ZSkgKyBQQUdFX1NJWkUgLSAxKQotCQkgICAgJiB+KFBBR0VfU0laRSAtIDEpKSkgewotCQltdXRleF91bmxvY2soJnN0djY4MC0+bG9jayk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlwb3MgPSAodW5zaWduZWQgbG9uZykgc3R2NjgwLT5mYnVmOwotCXdoaWxlIChzaXplID4gMCkgewotCQlwYWdlID0gdm1hbGxvY190b19wZm4oKHZvaWQgKilwb3MpOwotCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBhZ2UsIFBBR0VfU0laRSwgUEFHRV9TSEFSRUQpKSB7Ci0JCQltdXRleF91bmxvY2soJnN0djY4MC0+bG9jayk7Ci0JCQlyZXR1cm4gLUVBR0FJTjsKLQkJfQotCQlzdGFydCArPSBQQUdFX1NJWkU7Ci0JCXBvcyArPSBQQUdFX1NJWkU7Ci0JCWlmIChzaXplID4gUEFHRV9TSVpFKQotCQkJc2l6ZSAtPSBQQUdFX1NJWkU7Ci0JCWVsc2UKLQkJCXNpemUgPSAwOwotCX0KLQltdXRleF91bmxvY2soJnN0djY4MC0+bG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHNzaXplX3Qgc3R2NjgwX3JlYWQgKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAotCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGxvbmcgaW50IHJlYWxjb3VudCA9IGNvdW50OwotCWludCByZXQgPSAwOwotCXN0cnVjdCB1c2Jfc3R2ICpzdHY2ODAgPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOwotCXVuc2lnbmVkIGxvbmcgaW50IGk7Ci0KLQlpZiAoU1RWNjgwX05VTUZSQU1FUyAhPSAyKSB7Ci0JCVBERUJVRyAoMCwgIlNUVihlKTogU1RWNjgwX05VTUZSQU1FUyBuZWVkcyB0byBiZSAyISIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCWlmIChzdHY2ODAtPnVkZXYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU87Ci0JaWYgKHJlYWxjb3VudCA+IChzdHY2ODAtPnZ3aWR0aCAqIHN0djY4MC0+dmhlaWdodCAqIDMpKQotCQlyZWFsY291bnQgPSBzdHY2ODAtPnZ3aWR0aCAqIHN0djY4MC0+dmhlaWdodCAqIDM7Ci0KLQkvKiBTaG91bGRuJ3QgaGFwcGVuOiAqLwotCWlmIChzdHY2ODAtPmZyYW1lWzBdLmdyYWJzdGF0ZSA9PSBGUkFNRV9HUkFCQklORykgewotCQlQREVCVUcgKDIsICJTVFYoZSk6IEZSQU1FX0dSQUJCSU5HIGluIHN0djY4MF9yZWFkIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCXN0djY4MC0+ZnJhbWVbMF0uZ3JhYnN0YXRlID0gRlJBTUVfUkVBRFk7Ci0Jc3R2NjgwLT5mcmFtZVsxXS5ncmFic3RhdGUgPSBGUkFNRV9VTlVTRUQ7Ci0Jc3R2NjgwLT5jdXJmcmFtZSA9IDA7Ci0KLQlpZiAoIXN0djY4MC0+c3RyZWFtaW5nKQotCQlzdHY2ODBfc3RhcnRfc3RyZWFtIChzdHY2ODApOwotCi0JaWYgKCFzdHY2ODAtPnN0cmVhbWluZykgewotCQlyZXQgPSBzdHY2ODBfbmV3ZnJhbWUgKHN0djY4MCwgMCk7CS8qIHJldCBzaG91bGQgPSAwICovCi0JfQotCi0JcmV0ID0gc3R2NjgwX25ld2ZyYW1lIChzdHY2ODAsIDApOwotCi0JaWYgKCFyZXQpIHsKLQkJaWYgKChpID0gY29weV90b191c2VyIChidWYsIHN0djY4MC0+ZnJhbWVbMF0uZGF0YSwgcmVhbGNvdW50KSkgIT0gMCkgewotCQkJUERFQlVHICgyLCAiU1RWKGUpOiBjb3B5X3RvX3VzZXIgZnJhbWUgMCBmYWlsZWQsIHJldCBjb3VudCA9ICVsaSIsIGkpOwotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQl9IGVsc2UgewotCQlyZWFsY291bnQgPSByZXQ7Ci0JfQotCXN0djY4MC0+ZnJhbWVbMF0uZ3JhYnN0YXRlID0gRlJBTUVfVU5VU0VEOwotCXJldHVybiByZWFsY291bnQ7Ci19CQkJCS8qIHN0djY4MF9yZWFkICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgc3R2NjgwX2ZvcHMgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCi0JLm9wZW4gPQkJc3R2X29wZW4sCi0JLnJlbGVhc2UgPSAgICAgCXN0dl9jbG9zZSwKLQkucmVhZCA9CQlzdHY2ODBfcmVhZCwKLQkubW1hcCA9CQlzdHY2ODBfbW1hcCwKLQkuaW9jdGwgPSAgICAgICAgc3R2NjgwX2lvY3RsLAotfTsKLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHN0djY4MF90ZW1wbGF0ZSA9IHsKLQkubmFtZSA9CQkiU1RWMDY4MCBVU0IgY2FtZXJhIiwKLQkuZm9wcyA9ICAgICAgICAgJnN0djY4MF9mb3BzLAotCS5yZWxlYXNlID0JdmlkZW9fZGV2aWNlX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgaW50IHN0djY4MF9wcm9iZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKLQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7Ci0Jc3RydWN0IHVzYl9zdHYgKnN0djY4MCA9IE5VTEw7Ci0JY2hhciAqY2FtZXJhX25hbWUgPSBOVUxMOwotCWludCByZXR2YWwgPSAwOwotCi0JLyogV2UgZG9uJ3QgaGFuZGxlIG11bHRpLWNvbmZpZyBjYW1lcmFzICovCi0JaWYgKGRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgIT0gMSkgewotCQlQREVCVUcgKDAsICJTVFYoZSk6IE51bWJlciBvZiBDb25maWd1cmF0aW9ucyAhPSAxIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWludGVyZmFjZSA9ICZpbnRmLT5hbHRzZXR0aW5nWzBdOwotCS8qIElzIGl0IGEgU1RWNjgwPyAqLwotCWlmICgobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBVU0JfUEVOQ0FNX1ZFTkRPUl9JRCkgJiYKLQkgICAgKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IFVTQl9QRU5DQU1fUFJPRFVDVF9JRCkpIHsKLQkJY2FtZXJhX25hbWUgPSAiU1RWMDY4MCI7Ci0JCVBERUJVRyAoMCwgIlNUVihpKTogU1RWMDY4MCBjYW1lcmEgZm91bmQuIik7Ci0JfSBlbHNlIGlmICgobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBVU0JfQ1JFQVRJVkVHT01JTklfVkVORE9SX0lEKSAmJgotCQkgICAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gVVNCX0NSRUFUSVZFR09NSU5JX1BST0RVQ1RfSUQpKSB7Ci0JCWNhbWVyYV9uYW1lID0gIkNyZWF0aXZlIFdlYkNhbSBHbyBNaW5pIjsKLQkJUERFQlVHICgwLCAiU1RWKGkpOiBDcmVhdGl2ZSBXZWJDYW0gR28gTWluaSBmb3VuZC4iKTsKLQl9IGVsc2UgewotCQlQREVCVUcgKDAsICJTVFYoZSk6IFZlbmRvci9Qcm9kdWN0IElEIGRvIG5vdCBtYXRjaCBTVFYwNjgwIG9yIENyZWF0aXZlIFdlYkNhbSBHbyBNaW5pIHZhbHVlcy4iKTsKLQkJUERFQlVHICgwLCAiU1RWKGUpOiBDaGVjayB0aGF0IHRoZSBTVFYwNjgwIG9yIENyZWF0aXZlIFdlYkNhbSBHbyBNaW5pIGNhbWVyYSBpcyBjb25uZWN0ZWQgdG8gdGhlIGNvbXB1dGVyLiIpOwotCQlyZXR2YWwgPSAtRU5PREVWOwotCQlnb3RvIGVycm9yOwotCX0KLQkvKiBXZSBmb3VuZCBvbmUgKi8KLQlpZiAoKHN0djY4MCA9IGt6YWxsb2MgKHNpemVvZiAoKnN0djY4MCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7Ci0JCVBERUJVRyAoMCwgIlNUVihlKTogY291bGRuJ3Qga21hbGxvYyBzdHY2ODAgc3RydWN0LiIpOwotCQlyZXR2YWwgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXN0djY4MC0+dWRldiA9IGRldjsKLQlzdHY2ODAtPmNhbWVyYV9uYW1lID0gY2FtZXJhX25hbWU7Ci0KLQlzdHY2ODAtPnZkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKLQlpZiAoIXN0djY4MC0+dmRldikgewotCQlyZXR2YWwgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yOwotCX0KLQltZW1jcHkoc3R2NjgwLT52ZGV2LCAmc3R2NjgwX3RlbXBsYXRlLCBzaXplb2Yoc3R2NjgwX3RlbXBsYXRlKSk7Ci0Jc3R2NjgwLT52ZGV2LT5wYXJlbnQgPSAmaW50Zi0+ZGV2OwotCXZpZGVvX3NldF9kcnZkYXRhKHN0djY4MC0+dmRldiwgc3R2NjgwKTsKLQotCW1lbWNweSAoc3R2NjgwLT52ZGV2LT5uYW1lLCBzdHY2ODAtPmNhbWVyYV9uYW1lLCBzdHJsZW4gKHN0djY4MC0+Y2FtZXJhX25hbWUpKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkICgmc3R2NjgwLT53cSk7Ci0JbXV0ZXhfaW5pdCAoJnN0djY4MC0+bG9jayk7Ci0Jd21iICgpOwotCi0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShzdHY2ODAtPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIHZpZGVvX25yKSA8IDApIHsKLQkJUERFQlVHICgwLCAiU1RWKGUpOiB2aWRlb19yZWdpc3Rlcl9kZXZpY2UgZmFpbGVkIik7Ci0JCXJldHZhbCA9IC1FSU87Ci0JCWdvdG8gZXJyb3JfdmRldjsKLQl9Ci0JUERFQlVHKDAsICJTVFYoaSk6IHJlZ2lzdGVyZWQgbmV3IHZpZGVvIGRldmljZTogJXMiLAotCQl2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKHN0djY4MC0+dmRldikpOwotCi0JdXNiX3NldF9pbnRmZGF0YSAoaW50Ziwgc3R2NjgwKTsKLQlyZXR2YWwgPSBzdHY2ODBfY3JlYXRlX3N5c2ZzX2ZpbGVzKHN0djY4MC0+dmRldik7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBlcnJvcl91bnJlZzsKLQlyZXR1cm4gMDsKLQotZXJyb3JfdW5yZWc6Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2Uoc3R2NjgwLT52ZGV2KTsKLWVycm9yX3ZkZXY6Ci0JdmlkZW9fZGV2aWNlX3JlbGVhc2Uoc3R2NjgwLT52ZGV2KTsKLWVycm9yOgotCWtmcmVlKHN0djY4MCk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVzYl9zdHY2ODBfcmVtb3ZlX2Rpc2Nvbm5lY3RlZCAoc3RydWN0IHVzYl9zdHYgKnN0djY4MCkKLXsKLQlpbnQgaTsKLQotCXN0djY4MC0+dWRldiA9IE5VTEw7Ci0Jc3R2NjgwLT5mcmFtZVswXS5ncmFic3RhdGUgPSBGUkFNRV9FUlJPUjsKLQlzdHY2ODAtPmZyYW1lWzFdLmdyYWJzdGF0ZSA9IEZSQU1FX0VSUk9SOwotCXN0djY4MC0+c3RyZWFtaW5nID0gMDsKLQotCXdha2VfdXBfaW50ZXJydXB0aWJsZSAoJnN0djY4MC0+d3EpOwotCi0JZm9yIChpID0gMDsgaSA8IFNUVjY4MF9OVU1TQlVGOyBpKyspCi0JCWlmIChzdHY2ODAtPnVyYltpXSkgewotCQkJdXNiX2tpbGxfdXJiIChzdHY2ODAtPnVyYltpXSk7Ci0JCQl1c2JfZnJlZV91cmIgKHN0djY4MC0+dXJiW2ldKTsKLQkJCXN0djY4MC0+dXJiW2ldID0gTlVMTDsKLQkJCWtmcmVlKHN0djY4MC0+c2J1ZltpXS5kYXRhKTsKLQkJfQotCWZvciAoaSA9IDA7IGkgPCBTVFY2ODBfTlVNU0NSQVRDSDsgaSsrKQotCQlrZnJlZShzdHY2ODAtPnNjcmF0Y2hbaV0uZGF0YSk7Ci0JUERFQlVHICgwLCAiU1RWKGkpOiAlcyBkaXNjb25uZWN0ZWQiLCBzdHY2ODAtPmNhbWVyYV9uYW1lKTsKLQotCS8qIEZyZWUgdGhlIG1lbW9yeSAqLwotCWtmcmVlKHN0djY4MCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0djY4MF9kaXNjb25uZWN0IChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKLXsKLQlzdHJ1Y3QgdXNiX3N0diAqc3R2NjgwID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7Ci0KLQl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKLQotCWlmIChzdHY2ODApIHsKLQkJLyogV2UgZG9uJ3Qgd2FudCBwZW9wbGUgdHJ5aW5nIHRvIG9wZW4gdXAgdGhlIGRldmljZSAqLwotCQlpZiAoc3R2NjgwLT52ZGV2KSB7Ci0JCQlzdHY2ODBfcmVtb3ZlX3N5c2ZzX2ZpbGVzKHN0djY4MC0+dmRldik7Ci0JCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShzdHY2ODAtPnZkZXYpOwotCQkJc3R2NjgwLT52ZGV2ID0gTlVMTDsKLQkJfQotCQlpZiAoIXN0djY4MC0+dXNlcikgewotCQkJdXNiX3N0djY4MF9yZW1vdmVfZGlzY29ubmVjdGVkIChzdHY2ODApOwotCQl9IGVsc2UgewotCQkJc3R2NjgwLT5yZW1vdmVkID0gMTsKLQkJfQotCX0KLX0KLQotc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHN0djY4MF9kcml2ZXIgPSB7Ci0JLm5hbWUgPQkJInN0djY4MCIsCi0JLnByb2JlID0Jc3R2NjgwX3Byb2JlLAotCS5kaXNjb25uZWN0ID0Jc3R2NjgwX2Rpc2Nvbm5lY3QsCi0JLmlkX3RhYmxlID0JZGV2aWNlX3RhYmxlCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBNb2R1bGUgcm91dGluZXMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGludCBfX2luaXQgdXNiX3N0djY4MF9pbml0ICh2b2lkKQotewotCWlmICh1c2JfcmVnaXN0ZXIgKCZzdHY2ODBfZHJpdmVyKSA8IDApIHsKLQkJUERFQlVHICgwLCAiU1RWKGUpOiBDb3VsZCBub3Qgc2V0dXAgU1RWMDY4MCBkcml2ZXIiKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlQREVCVUcgKDAsICJTVFYoaSk6IHVzYiBjYW1lcmEgZHJpdmVyIHZlcnNpb24gJXMgcmVnaXN0ZXJpbmciLCBEUklWRVJfVkVSU0lPTik7Ci0KLQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCi0JICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3N0djY4MF9leGl0ICh2b2lkKQotewotCXVzYl9kZXJlZ2lzdGVyICgmc3R2NjgwX2RyaXZlcik7Ci0JUERFQlVHICgwLCAiU1RWKGkpOiBkcml2ZXIgZGVyZWdpc3RlcmVkIik7Ci19Ci0KLW1vZHVsZV9pbml0ICh1c2Jfc3R2NjgwX2luaXQpOwotbW9kdWxlX2V4aXQgKHVzYl9zdHY2ODBfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0djY4MC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdHY2ODAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA4ZjFiMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0djY4MC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogIEZpbGVuYW1lOiBzdHY2ODAuaAotICoKLSAqICBEZXNjcmlwdGlvbjoKLSAqICAgICBUaGlzIGlzIGEgVVNCIGRyaXZlciBmb3IgU1RWMDY4MCBiYXNlZCB1c2IgdmlkZW8gY2FtZXJhcy4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBzaXplIG9mIHVzYiB0cmFuc2ZlcnMgKi8KLSNkZWZpbmUgU1RWNjgwX1BBQ0tFVFNJWkUJNDA5NgotCi0vKiBudW1iZXIgb2YgcXVldWVkIGJ1bGsgdHJhbnNmZXJzIHRvIHVzZSwgbWF5IGhhdmUgcHJvYmxlbXMgaWYgPiAxICovCi0jZGVmaW5lIFNUVjY4MF9OVU1TQlVGCQkxCi0KLS8qIG51bWJlciBvZiBmcmFtZXMgc3VwcG9ydGVkIGJ5IHRoZSB2NGwgcGFydCAqLwotI2RlZmluZSBTVFY2ODBfTlVNRlJBTUVTCTIKLQotLyogc2NyYXRjaCBidWZmZXJzIGZvciBwYXNzaW5nIGRhdGEgdG8gdGhlIGRlY29kZXJzOiAyIG9yIDQgYXJlIGdvb2QgKi8KLSNkZWZpbmUgU1RWNjgwX05VTVNDUkFUQ0gJMgotCi0vKiBudW1iZXIgb2YgbnVsIHNpemVkIHBhY2tldHMgdG8gcmVjZWl2ZSBiZWZvcmUga2lja2luZyB0aGUgY2FtZXJhICovCi0jZGVmaW5lIFNUVjY4MF9NQVhfTlVMTFBBQ0tFVFMJMjAwCi0KLS8qIG51bWJlciBvZiBkZWNvZGluZyBlcnJvcnMgYmVmb3JlIGtpY2tpbmcgdGhlIGNhbWVyYSAqLwotI2RlZmluZSBTVFY2ODBfTUFYX0VSUk9SUwkxMDAKLQotI2RlZmluZSBVU0JfUEVOQ0FNX1ZFTkRPUl9JRAkweDA1NTMKLSNkZWZpbmUgVVNCX1BFTkNBTV9QUk9EVUNUX0lECTB4MDIwMgotCi0jZGVmaW5lIFVTQl9DUkVBVElWRUdPTUlOSV9WRU5ET1JfSUQJMHgwNDFlCi0jZGVmaW5lIFVTQl9DUkVBVElWRUdPTUlOSV9QUk9EVUNUX0lECTB4NDAwNwotCi0jZGVmaW5lIFBFTkNBTV9USU1FT1VUICAgICAgICAgIDEwMDAKLS8qIGZtdCA0ICovCi0jZGVmaW5lIFNUVl9WSURFT19QQUxFVFRFICAgICAgIFZJREVPX1BBTEVUVEVfUkdCMjQKLQotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewotCXtVU0JfREVWSUNFIChVU0JfUEVOQ0FNX1ZFTkRPUl9JRCwgVVNCX1BFTkNBTV9QUk9EVUNUX0lEKX0sCi0Je1VTQl9ERVZJQ0UgKFVTQl9DUkVBVElWRUdPTUlOSV9WRU5ET1JfSUQsIFVTQl9DUkVBVElWRUdPTUlOSV9QUk9EVUNUX0lEKX0sCi0Je30KLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGRldmljZV90YWJsZSk7Ci0KLXN0cnVjdCBzdHY2ODBfc2J1ZiB7Ci0JdW5zaWduZWQgY2hhciAqZGF0YTsKLX07Ci0KLWVudW0gewotCUZSQU1FX1VOVVNFRCwJCS8qIFVudXNlZCAobm8gTUNBUFRVUkUpICovCi0JRlJBTUVfUkVBRFksCQkvKiBSZWFkeSB0byBzdGFydCBncmFiYmluZyAqLwotCUZSQU1FX0dSQUJCSU5HLAkJLyogSW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZ3JhYmJlZCBpbnRvICovCi0JRlJBTUVfRE9ORSwJCS8qIEZpbmlzaGVkIGdyYWJiaW5nLCBidXQgbm90IGJlZW4gc3luY2VkIHlldCAqLwotCUZSQU1FX0VSUk9SLAkJLyogU29tZXRoaW5nIGJhZCBoYXBwZW5lZCB3aGlsZSBwcm9jZXNzaW5nICovCi19OwotCi1lbnVtIHsKLQlCVUZGRVJfVU5VU0VELAotCUJVRkZFUl9SRUFEWSwKLQlCVUZGRVJfQlVTWSwKLQlCVUZGRVJfRE9ORSwKLX07Ci0KLS8qIHJhdyBjYW1lcmEgZGF0YSA8LSBzYnVmICh1cmIgdHJhbnNmZXIgYnVmKSAqLwotc3RydWN0IHN0djY4MF9zY3JhdGNoIHsKLQl1bnNpZ25lZCBjaGFyICpkYXRhOwotCXZvbGF0aWxlIGludCBzdGF0ZTsKLQlpbnQgb2Zmc2V0OwotCWludCBsZW5ndGg7Ci19OwotCi0vKiBwcm9jZXNzZWQgZGF0YSBmb3IgZGlzcGxheSBlbmRzIHVwIGhlcmUsIGFmdGVyIGJheWVyICovCi1zdHJ1Y3Qgc3R2NjgwX2ZyYW1lIHsKLQl1bnNpZ25lZCBjaGFyICpkYXRhOwkvKiBGcmFtZSBidWZmZXIgKi8KLQl2b2xhdGlsZSBpbnQgZ3JhYnN0YXRlOwkvKiBTdGF0ZSBvZiBncmFiYmluZyAqLwotCXVuc2lnbmVkIGNoYXIgKmN1cmxpbmU7Ci0JaW50IGN1cmxpbmVwaXg7Ci0JaW50IGN1cnBpeDsKLX07Ci0KLS8qIHRoaXMgaXMgYWxtb3N0IHRoZSB2aWRlbyBzdHJ1Y3R1cmUgdXZkX3QsIHdpdGggZXh0cmEgcGFyYW1ldGVycyBmb3Igc3R2ICovCi1zdHJ1Y3QgdXNiX3N0diB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsKLQotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwotCi0JdW5zaWduZWQgY2hhciBidWxrX2luX2VuZHBvaW50QWRkcjsJLyogX191OCAgdGhlIGFkZHJlc3Mgb2YgdGhlIGJ1bGsgaW4gZW5kcG9pbnQgKi8KLQljaGFyICpjYW1lcmFfbmFtZTsKLQotCXVuc2lnbmVkIGludCBWaWRlb01vZGU7CS8qIDB4MDEwMCA9IFZHQSwgMHgwMDAwID0gQ0lGLCAweDAzMDAgPSBRVkdBICovCi0JaW50IFN1cHBvcnRlZE1vZGVzOwotCWludCBDSUY7Ci0JaW50IFZHQTsKLQlpbnQgUVZHQTsKLQlpbnQgY3dpZHRoOwkJLyogY2FtZXJhIHdpZHRoICovCi0JaW50IGNoZWlnaHQ7CQkvKiBjYW1lcmEgaGVpZ2h0ICovCi0JaW50IG1heHdpZHRoOwkJLyogbWF4IHZpZGVvIHdpZHRoICovCi0JaW50IG1heGhlaWdodDsJCS8qIG1heCB2aWRlbyBoZWlnaHQgKi8KLQlpbnQgdndpZHRoOwkJLyogY3VycmVudCB3aWR0aCBmb3IgdmlkZW8gd2luZG93ICovCi0JaW50IHZoZWlnaHQ7CQkvKiBjdXJyZW50IGhlaWdodCBmb3IgdmlkZW8gd2luZG93ICovCi0JdW5zaWduZWQgbG9uZyBpbnQgcmF3YnVmc2l6ZTsKLQl1bnNpZ25lZCBsb25nIGludCBtYXhmcmFtZXNpemU7CS8qIHJhd2J1ZnNpemUgKiAzIGZvciBSR0IgKi8KLQotCWludCBvcmlnR2FpbjsKLQlpbnQgb3JpZ01vZGU7CQkvKiBvcmlnaW5hbCBjYW1lcmEgbW9kZSAqLwotCi0Jc3RydWN0IG11dGV4IGxvY2s7CS8qIHRvIGxvY2sgdGhlIHN0cnVjdHVyZSAqLwotCWludCB1c2VyOwkJLyogdXNlciBjb3VudCBmb3IgZXhjbHVzaXZlIHVzZSAqLwotCWludCByZW1vdmVkOwkJLyogZGV2aWNlIGRpc2Nvbm5lY3RlZCAqLwotCWludCBzdHJlYW1pbmc7CQkvKiBBcmUgd2Ugc3RyZWFtaW5nIHZpZGVvPyAqLwotCWNoYXIgKmZidWY7CQkvKiBWaWRlb2RldiBidWZmZXIgYXJlYSAqLwotCXN0cnVjdCB1cmIgKnVyYltTVFY2ODBfTlVNU0JVRl07CS8qICMgb2YgcXVldWVkIGJ1bGsgdHJhbnNmZXJzICovCi0JaW50IGN1cmZyYW1lOwkJLyogQ3VycmVudCByZWNlaXZpbmcgZnJhbWUgKi8KLQlzdHJ1Y3Qgc3R2NjgwX2ZyYW1lIGZyYW1lW1NUVjY4MF9OVU1GUkFNRVNdOwkvKiAjIGZyYW1lcyBzdXBwb3J0ZWQgYnkgdjRsIHBhcnQgKi8KLQlpbnQgcmVhZGNvdW50OwotCWludCBmcmFtZWNvdW50OwotCWludCBlcnJvcjsKLQlpbnQgZHJvcHBlZDsKLQlpbnQgc2NyYXRjaF9uZXh0OwotCWludCBzY3JhdGNoX3VzZTsKLQlpbnQgc2NyYXRjaF9vdmVyZmxvdzsKLQlzdHJ1Y3Qgc3R2NjgwX3NjcmF0Y2ggc2NyYXRjaFtTVFY2ODBfTlVNU0NSQVRDSF07CS8qIGZvciBkZWNvZGVycyAqLwotCXN0cnVjdCBzdHY2ODBfc2J1ZiBzYnVmW1NUVjY4MF9OVU1TQlVGXTsKLQotCXVuc2lnbmVkIGludCBicmlnaHRuZXNzOwotCXVuc2lnbmVkIGludCBjaGdicmlnaHQ7Ci0JdW5zaWduZWQgaW50IHdoaXRlbmVzczsKLQl1bnNpZ25lZCBpbnQgY29sb3VyOwotCXVuc2lnbmVkIGludCBjb250cmFzdDsKLQl1bnNpZ25lZCBpbnQgaHVlOwotCXVuc2lnbmVkIGludCBwYWxldHRlOwotCXVuc2lnbmVkIGludCBkZXB0aDsJLyogcmdiMjQgaW4gYml0cyAqLwotCi0Jd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CS8qIFByb2Nlc3NlcyB3YWl0aW5nICovCi0KLQlpbnQgbnVsbHBhY2tldHM7Ci19OwotCi0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJlZFsyNTZdID0gewotCTAsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwKLQkxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMjUsIDMwLCAzNSwgMzgsIDQyLAotCTQ0LCA0NywgNTAsIDUzLCA1NCwgNTcsIDU5LCA2MSwgNjMsIDY1LCA2NywgNjksCi0JNzEsIDcxLCA3MywgNzUsIDc3LCA3OCwgODAsIDgxLCA4MiwgODQsIDg1LCA4NywKLQk4OCwgODksIDkwLCA5MSwgOTMsIDk0LCA5NSwgOTcsIDk4LCA5OCwgOTksIDEwMSwKLQkxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsIDExMiwgMTEzLAotCTExNCwgMTE1LCAxMTYsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsCi0JMTI1LCAxMjUsIDEyNiwgMTI3LCAxMjgsIDEyOSwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwKLQkxMzQsIDEzNSwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQwLCAxNDEsIDE0MiwgMTQzLAotCTE0MywgMTQzLCAxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUwLCAxNTEsCi0JMTUyLCAxNTIsIDE1MiwgMTUzLCAxNTQsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU3LCAxNTgsIDE1OSwKLQkxNTksIDE2MCwgMTYxLCAxNjEsIDE2MSwgMTYyLCAxNjMsIDE2MywgMTY0LCAxNjUsIDE2NSwgMTY2LAotCTE2NywgMTY3LCAxNjgsIDE2OCwgMTY5LCAxNzAsIDE3MCwgMTcwLCAxNzEsIDE3MSwgMTcyLCAxNzMsCi0JMTczLCAxNzQsIDE3NCwgMTc1LCAxNzYsIDE3NiwgMTc3LCAxNzgsIDE3OCwgMTc5LCAxNzksIDE3OSwKLQkxODAsIDE4MCwgMTgxLCAxODEsIDE4MiwgMTgzLCAxODMsIDE4NCwgMTg0LCAxODUsIDE4NSwgMTg2LAotCTE4NywgMTg3LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OSwgMTkwLCAxOTAsIDE5MSwgMTkxLCAxOTIsCi0JMTkyLCAxOTMsIDE5MywgMTk0LCAxOTUsIDE5NSwgMTk2LCAxOTYsIDE5NywgMTk3LCAxOTcsIDE5NywKLQkxOTgsIDE5OCwgMTk5LCAxOTksIDIwMCwgMjAxLCAyMDEsIDIwMiwgMjAyLCAyMDMsIDIwMywgMjA0LAotCTIwNCwgMjA1LCAyMDUsIDIwNiwgMjA2LCAyMDYsIDIwNiwgMjA3LCAyMDcsIDIwOCwgMjA4LCAyMDksCi0JMjA5LCAyMTAsIDIxMCwgMjExLCAyMTEsIDIxMiwgMjEyLCAyMTMsIDIxMywgMjE0LCAyMTQsIDIxNSwKLQkyMTUsIDIxNSwgMjE1LCAyMTYsIDIxNiwgMjE3LCAyMTcsIDIxOCwgMjE4LCAyMTgsIDIxOSwgMjE5LAotCTIyMCwgMjIwLCAyMjEsIDIyMQotfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ3JlZW5bMjU2XSA9IHsKLQkwLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsCi0JMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDI4LCAzNCwgMzksIDQzLCA0NywKLQk1MCwgNTMsIDU2LCA1OSwgNjEsIDY0LCA2NiwgNjgsIDcxLCA3MywgNzUsIDc3LAotCTc5LCA4MCwgODIsIDg0LCA4NiwgODcsIDg5LCA5MSwgOTIsIDk0LCA5NSwgOTcsCi0JOTgsIDEwMCwgMTAxLCAxMDIsIDEwNCwgMTA1LCAxMDYsIDEwOCwgMTA5LCAxMTAsIDExMSwgMTEzLAotCTExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsCi0JMTI3LCAxMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwKLQkxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywgMTQ0LCAxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LAotCTE1MCwgMTUxLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAxNTYsIDE1NywgMTU4LCAxNTksCi0JMTYwLCAxNjAsIDE2MSwgMTYyLCAxNjMsIDE2NCwgMTY0LCAxNjUsIDE2NiwgMTY3LCAxNjcsIDE2OCwKLQkxNjksIDE3MCwgMTcwLCAxNzEsIDE3MiwgMTcyLCAxNzMsIDE3NCwgMTc1LCAxNzUsIDE3NiwgMTc3LAotCTE3NywgMTc4LCAxNzksIDE3OSwgMTgwLCAxODEsIDE4MiwgMTgyLCAxODMsIDE4NCwgMTg0LCAxODUsCi0JMTg2LCAxODYsIDE4NywgMTg3LCAxODgsIDE4OSwgMTg5LCAxOTAsIDE5MSwgMTkxLCAxOTIsIDE5MywKLQkxOTMsIDE5NCwgMTk0LCAxOTUsIDE5NiwgMTk2LCAxOTcsIDE5OCwgMTk4LCAxOTksIDE5OSwgMjAwLAotCTIwMSwgMjAxLCAyMDIsIDIwMiwgMjAzLCAyMDQsIDIwNCwgMjA1LCAyMDUsIDIwNiwgMjA2LCAyMDcsCi0JMjA4LCAyMDgsIDIwOSwgMjA5LCAyMTAsIDIxMCwgMjExLCAyMTIsIDIxMiwgMjEzLCAyMTMsIDIxNCwKLQkyMTQsIDIxNSwgMjE1LCAyMTYsIDIxNywgMjE3LCAyMTgsIDIxOCwgMjE5LCAyMTksIDIyMCwgMjIwLAotCTIyMSwgMjIxLCAyMjIsIDIyMiwgMjIzLCAyMjQsIDIyNCwgMjI1LCAyMjUsIDIyNiwgMjI2LCAyMjcsCi0JMjI3LCAyMjgsIDIyOCwgMjI5LCAyMjksIDIzMCwgMjMwLCAyMzEsIDIzMSwgMjMyLCAyMzIsIDIzMywKLQkyMzMsIDIzNCwgMjM0LCAyMzUsIDIzNSwgMjM2LCAyMzYsIDIzNywgMjM3LCAyMzgsIDIzOCwgMjM5LAotCTIzOSwgMjQwLCAyNDAsIDI0MSwgMjQxLCAyNDIsIDI0MiwgMjQzLCAyNDMsIDI0MywgMjQ0LCAyNDQsCi0JMjQ1LCAyNDUsIDI0NiwgMjQ2Ci19OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBibHVlWzI1Nl0gPSB7Ci0JMCwgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLAotCTIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAzMCwgMzcsIDQyLCA0NywgNTEsCi0JNTUsIDU4LCA2MSwgNjQsIDY3LCA3MCwgNzIsIDc0LCA3OCwgODAsIDgyLCA4NCwKLQk4NiwgODgsIDkwLCA5MiwgOTQsIDk1LCA5NywgMTAwLCAxMDEsIDEwMywgMTA0LCAxMDYsCi0JMTA3LCAxMTAsIDExMSwgMTEyLCAxMTQsIDExNSwgMTE2LCAxMTgsIDExOSwgMTIxLCAxMjIsIDEyNCwKLQkxMjUsIDEyNiwgMTI3LCAxMjgsIDEyOSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LAotCTEzOSwgMTQwLCAxNDEsIDE0MywgMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsCi0JMTUyLCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU4LCAxNTksIDE2MCwgMTYxLCAxNjIsIDE2MywKLQkxNjUsIDE2NiwgMTY2LCAxNjcsIDE2OCwgMTY5LCAxNzAsIDE3MSwgMTcxLCAxNzIsIDE3MywgMTc0LAotCTE3NiwgMTc2LCAxNzcsIDE3OCwgMTc5LCAxODAsIDE4MCwgMTgxLCAxODIsIDE4MywgMTgzLCAxODQsCi0JMTg1LCAxODcsIDE4NywgMTg4LCAxODksIDE4OSwgMTkwLCAxOTEsIDE5MiwgMTkyLCAxOTMsIDE5NCwKLQkxOTQsIDE5NSwgMTk2LCAxOTYsIDE5OCwgMTk5LCAyMDAsIDIwMCwgMjAxLCAyMDIsIDIwMiwgMjAzLAotCTIwNCwgMjA0LCAyMDUsIDIwNSwgMjA2LCAyMDcsIDIwNywgMjA5LCAyMTAsIDIxMCwgMjExLCAyMTIsCi0JMjEyLCAyMTMsIDIxMywgMjE0LCAyMTUsIDIxNSwgMjE2LCAyMTcsIDIxNywgMjE4LCAyMTgsIDIyMCwKLQkyMjEsIDIyMSwgMjIyLCAyMjIsIDIyMywgMjI0LCAyMjQsIDIyNSwgMjI1LCAyMjYsIDIyNiwgMjI3LAotCTIyOCwgMjI4LCAyMjksIDIyOSwgMjMxLCAyMzEsIDIzMiwgMjMzLCAyMzMsIDIzNCwgMjM0LCAyMzUsCi0JMjM1LCAyMzYsIDIzNiwgMjM3LCAyMzgsIDIzOCwgMjM5LCAyMzksIDI0MCwgMjQwLCAyNDIsIDI0MiwKLQkyNDMsIDI0MywgMjQ0LCAyNDQsIDI0NSwgMjQ2LCAyNDYsIDI0NywgMjQ3LCAyNDgsIDI0OCwgMjQ5LAotCTI0OSwgMjUwLCAyNTAsIDI1MSwgMjUxLCAyNTMsIDI1MywgMjU0LCAyNTQsIDI1NSwgMjU1LCAyNTUsCi0JMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKLQkyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAotCTI1NSwgMjU1LCAyNTUsIDI1NQotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC1tYWluLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtbWFpbi5jCmluZGV4IDI1NmNjNTUuLjQ1NTVmNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC1tYWluLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLW1haW4uYwpAQCAtMjI3LDEyICsyMjcsMTEgQEAKIAogCWZ3bGVuZ3RoID0gZnctPnNpemU7CiAKLQlmd2J1ZiA9IGt6YWxsb2MoZndsZW5ndGgsIEdGUF9LRVJORUwpOworCWZ3YnVmID0ga21lbWR1cChmdy0+ZGF0YSwgZndsZW5ndGgsIEdGUF9LRVJORUwpOwogCWlmICghZndidWYpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQotCW1lbWNweShmd2J1ZiwgZnctPmRhdGEsIGZ3bGVuZ3RoKTsKIAogCW1heF9wYWNrZXRfc2l6ZSA9IHVkZXYtPmVwX291dFsweDFdLT5kZXNjLndNYXhQYWNrZXRTaXplOwogCWxvZygiXHRcdCBkb3dubG9hZCBzaXplIDogJWQiLCAoaW50KW1heF9wYWNrZXRfc2l6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKaW5kZXggMGE4Nzc0OS4uMDdmYWJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYwpAQCAtMjY3LDYgKzI2NywyMSBAQAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgICAgICAgICAgIlhjZWl2ZSBYQzQwMDAifSwKIAl7IFRVTkVSX0FCU0VOVCwgICAgICAgICAgICAgICAgICJEaWJjb20gNzA3MCJ9LAogCXsgVFVORVJfUEhJTElQU19UREE4MjkwLCAgICAgICAgIk5YUCAxODI3MUMyIn0sCisJeyBUVU5FUl9BQlNFTlQsCQkJInVua25vd24ifSwKKwl7IFRVTkVSX0FCU0VOVCwJCQkidW5rbm93biJ9LAorCXsgVFVORVJfQUJTRU5ULAkJCSJ1bmtub3duIn0sCisJeyBUVU5FUl9BQlNFTlQsCQkJInVua25vd24ifSwKKwkvKiAxNjAtMTY5ICovCisJeyBUVU5FUl9BQlNFTlQsCQkJInVua25vd24ifSwKKwl7IFRVTkVSX0FCU0VOVCwJCQkidW5rbm93biJ9LAorCXsgVFVORVJfQUJTRU5ULAkJCSJ1bmtub3duIn0sCisJeyBUVU5FUl9BQlNFTlQsCQkJInVua25vd24ifSwKKwl7IFRVTkVSX0FCU0VOVCwJCQkidW5rbm93biJ9LAorCXsgVFVORVJfQUJTRU5ULAkJCSJ1bmtub3duIn0sCisJeyBUVU5FUl9BQlNFTlQsCQkJInVua25vd24ifSwKKwl7IFRVTkVSX0FCU0VOVCwJCQkidW5rbm93biJ9LAorCXsgVFVORVJfUEhJTElQU19GUTEyMzZfTUs1LAkiVENMIE0zMFdUUC00Ti1FIn0sCisJeyBUVU5FUl9BQlNFTlQsCQkJInVua25vd24ifSwKIH07CiAKIC8qIFVzZSBWNEwyX0lERU5UX0FNQklHVU9VUyBmb3IgdGhvc2UgYXVkaW8gJ2NoaXBzJyB0aGF0IGFyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dzk5MTAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHc5OTEwLmMKaW5kZXggNDQ1ZGM5My4uYTcyNzk2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dzk5MTAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R3OTkxMC5jCkBAIC03NjgsNyArNzY4LDcgQEAKIAogCW1mLT53aWR0aAk9IHByaXYtPnNjYWxlLT53aWR0aDsKIAltZi0+aGVpZ2h0CT0gcHJpdi0+c2NhbGUtPmhlaWdodDsKLQltZi0+Y29kZQk9IFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0JFOworCW1mLT5jb2RlCT0gVjRMMl9NQlVTX0ZNVF9VWVZZOF8yWDg7CiAJbWYtPmNvbG9yc3BhY2UJPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRzsKIAltZi0+ZmllbGQJPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRURfQlQ7CiAKQEAgLTc5Nyw3ICs3OTcsNyBAQAogCS8qCiAJICogY2hlY2sgY29sb3IgZm9ybWF0CiAJICovCi0JaWYgKG1mLT5jb2RlICE9IFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0JFKQorCWlmIChtZi0+Y29kZSAhPSBWNEwyX01CVVNfRk1UX1VZVlk4XzJYOCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltZi0+Y29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHOwpAQCAtODI0LDcgKzgyNCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW1mLT5jb2RlID0gVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDhfQkU7CisJbWYtPmNvZGUgPSBWNEwyX01CVVNfRk1UX1VZVlk4XzJYODsKIAltZi0+Y29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHOwogCiAJLyoKQEAgLTkwOSw3ICs5MDksNyBAQAogCWlmIChpbmRleCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkqY29kZSA9IFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0JFOworCSpjb2RlID0gVjRMMl9NQlVTX0ZNVF9VWVZZOF8yWDg7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vS2NvbmZpZwppbmRleCBhZGIxYzA0Li5kNmUxNjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9LY29uZmlnCkBAIC0zNywxNyArMzcsMyBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQga29uaWNhd2MuCiAKLWNvbmZpZyBVU0JfUVVJQ0tDQU1fTUVTU0VOR0VSCi0JdHJpc3RhdGUgIlVTQiBMb2dpdGVjaCBRdWlja2NhbSBNZXNzZW5nZXIgKERFUFJFQ0FURUQpIgotCWRlcGVuZHMgb24gVklERU9fVjRMMQotCXNlbGVjdCBWSURFT19VU0JWSURFTwotCS0tLWhlbHAtLS0KLQkgIFRoaXMgZHJpdmVyIGlzIERFUFJFQ0FURUQgcGxlYXNlIHVzZSB0aGUgZ3NwY2Egc3R2MDZ4eCBtb2R1bGUKLQkgIGluc3RlYWQuCi0KLQkgIFNheSBZIG9yIE0gaGVyZSB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIFVTQiBMb2dpdGVjaCBRdWlja2NhbQotCSAgTWVzc2VuZ2VyIHdlYmNhbS4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcXVpY2tjYW1fbWVzc2VuZ2VyLgotCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9NYWtlZmlsZQppbmRleCA0YTFiMTQ0Li5iYjUyZWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vTWFrZWZpbGUKQEAgLTIsNCArMiwzIEBACiBvYmotJChDT05GSUdfVVNCX0lCTUNBTSkgICAgICAgICs9IGlibWNhbS5vIHVsdHJhY2FtLm8KIG9iai0kKENPTkZJR19VU0JfS09OSUNBV0MpICAgICAgKz0ga29uaWNhd2Mubwogb2JqLSQoQ09ORklHX1VTQl9WSUNBTSkgICAgICAgICArPSB2aWNhbS5vCi1vYmotJChDT05GSUdfVVNCX1FVSUNLQ0FNX01FU1NFTkdFUikJKz0gcXVpY2tjYW1fbWVzc2VuZ2VyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vcXVpY2tjYW1fbWVzc2VuZ2VyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3F1aWNrY2FtX21lc3Nlbmdlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmQ2NjVmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vcXVpY2tjYW1fbWVzc2VuZ2VyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTI2ICswLDAgQEAKLS8qCi0gKiBEcml2ZXIgZm9yIExvZ2l0ZWNoIFF1aWNrY2FtIE1lc3NlbmdlciB1c2IgdmlkZW8gY2FtZXJhCi0gKiBDb3B5cmlnaHQgKEMpIEpheWEgS3VtYXIKLSAqCi0gKiBUaGlzIHdvcmsgd2FzIHNwb25zb3JlZCBieSBDSVMoTSkgU2RuIEJoZC4KLSAqIEhpc3Rvcnk6Ci0gKiAwNS8wOC8yMDA2IC0gSmF5YSBLdW1hcgotICogSSB3cm90ZSB0aGlzIGJhc2VkIG9uIHRoZSBrb25pY2F3YyBieSBTaW1vbiBFdmFucy4KLSAqIC0KLSAqIEZ1bGwgY3JlZGl0IGZvciByZXZlcnNlIGVuZ2luZWVyaW5nIGFuZCBjcmVhdGluZyBhbiBpbml0aWFsCi0gKiB3b3JraW5nIGxpbnV4IGRyaXZlciBmb3IgdGhlIFZWNjQyMiBnb2VzIHRvIHRoZSBxY2UtZ2EgcHJvamVjdCBieQotICogVHV1a2thIFRvaXZvbmVuLCBKb2NoZW4gSG9lbmlja2UsIFBldGVyIE1jQ29ubmVsbCwKLSAqIENyaXN0aWFubyBEZSBNaWNoZWxlLCBHZW9yZyBBY2hlciwgSmVhbi1GcmVkZXJpYyBDbGVyZSBhcyB3ZWxsIGFzCi0gKiBvdGhlcnMuCi0gKiAtLS0KLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiL2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSAidXNidmlkZW8uaCIKLSNpbmNsdWRlICJxdWlja2NhbV9tZXNzZW5nZXIuaCIKLQotLyoKLSAqIFZlcnNpb24gSW5mb3JtYXRpb24KLSAqLwotCi0jaWZkZWYgQ09ORklHX1VTQl9ERUJVRwotc3RhdGljIGludCBkZWJ1ZzsKLSNkZWZpbmUgREVCVUcobiwgZm9ybWF0LCBhcmcuLi4pIFwKLQlpZiAobiA8PSBkZWJ1ZykgewkgXAotCQlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXyAiOiVzKCk6ICIgZm9ybWF0ICJcbiIsIF9fZnVuY19fICwgIyMgYXJnKTsgXAotCX0KLSNlbHNlCi0jZGVmaW5lIERFQlVHKG4sIGFyZy4uLikKLXN0YXRpYyBjb25zdCBpbnQgZGVidWc7Ci0jZW5kaWYKLQotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuMDEiCi0jZGVmaW5lIERSSVZFUl9ERVNDICJMb2dpdGVjaCBRdWlja2NhbSBNZXNzZW5nZXIgVVNCIgotCi0jZGVmaW5lIFVTQl9MT0dJVEVDSF9WRU5ET1JfSUQJMHgwNDZECi0jZGVmaW5lIFVTQl9RQ01fUFJPRFVDVF9JRAkweDA4RjAKLQotI2RlZmluZSBNQVhfQ0FNRVJBUwkxCi0KLSNkZWZpbmUgTUFYX0NPTE9VUgkzMjc2OAotI2RlZmluZSBNQVhfSFVFCQkzMjc2OAotI2RlZmluZSBNQVhfQlJJR0hUTkVTUwkzMjc2OAotI2RlZmluZSBNQVhfQ09OVFJBU1QJMzI3NjgKLSNkZWZpbmUgTUFYX1dISVRFTkVTUwkzMjc2OAotCi1zdGF0aWMgaW50IHNpemUgPSBTSVpFXzMyMFgyNDA7Ci1zdGF0aWMgaW50IGNvbG91ciA9IE1BWF9DT0xPVVI7Ci1zdGF0aWMgaW50IGh1ZSA9IE1BWF9IVUU7Ci1zdGF0aWMgaW50IGJyaWdodG5lc3MgPQlNQVhfQlJJR0hUTkVTUzsKLXN0YXRpYyBpbnQgY29udHJhc3QgPQlNQVhfQ09OVFJBU1Q7Ci1zdGF0aWMgaW50IHdoaXRlbmVzcyA9CU1BWF9XSElURU5FU1M7Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNidmlkZW8gKmNhbXM7Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBxY21fdGFibGUgW10gPSB7Ci0JeyBVU0JfREVWSUNFKFVTQl9MT0dJVEVDSF9WRU5ET1JfSUQsIFVTQl9RQ01fUFJPRFVDVF9JRCkgfSwKLQl7IH0KLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgcWNtX3RhYmxlKTsKLQotI2lmZGVmIENPTkZJR19JTlBVVAotc3RhdGljIHZvaWQgcWNtX3JlZ2lzdGVyX2lucHV0KHN0cnVjdCBxY20gKmNhbSwgc3RydWN0IHVzYl9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7Ci0JaW50IGVycm9yOwotCi0JdXNiX21ha2VfcGF0aChkZXYsIGNhbS0+aW5wdXRfcGh5c25hbWUsIHNpemVvZihjYW0tPmlucHV0X3BoeXNuYW1lKSk7Ci0Jc3RybGNhdChjYW0tPmlucHV0X3BoeXNuYW1lLCAiL2lucHV0MCIsIHNpemVvZihjYW0tPmlucHV0X3BoeXNuYW1lKSk7Ci0KLQljYW0tPmlucHV0ID0gaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCFpbnB1dF9kZXYpIHsKLQkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiaW5zdWZmaWNpZW50IG1lbSBmb3IgY2FtIGlucHV0IGRldmljZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpbnB1dF9kZXYtPm5hbWUgPSAiUUNNIGJ1dHRvbiI7Ci0JaW5wdXRfZGV2LT5waHlzID0gY2FtLT5pbnB1dF9waHlzbmFtZTsKLQl1c2JfdG9faW5wdXRfaWQoZGV2LCAmaW5wdXRfZGV2LT5pZCk7Ci0JaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmRldi0+ZGV2OwotCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSk7Ci0JaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoS0VZX0NBTUVSQSldID0gQklUX01BU0soS0VZX0NBTUVSQSk7Ci0KLQllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShjYW0tPmlucHV0KTsKLQlpZiAoZXJyb3IpIHsKLQkJZGV2X3dhcm4oJmRldi0+ZGV2LAotCQkJICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2FtZXJhJ3MgaW5wdXQgZGV2aWNlLCBlcnI6ICVkXG4iLAotCQkJIGVycm9yKTsKLQkJaW5wdXRfZnJlZV9kZXZpY2UoY2FtLT5pbnB1dCk7Ci0JCWNhbS0+aW5wdXQgPSBOVUxMOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcWNtX3VucmVnaXN0ZXJfaW5wdXQoc3RydWN0IHFjbSAqY2FtKQotewotCWlmIChjYW0tPmlucHV0KSB7Ci0JCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGNhbS0+aW5wdXQpOwotCQljYW0tPmlucHV0ID0gTlVMTDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHFjbV9yZXBvcnRfYnV0dG9uc3RhdChzdHJ1Y3QgcWNtICpjYW0pCi17Ci0JaWYgKGNhbS0+aW5wdXQpIHsKLQkJaW5wdXRfcmVwb3J0X2tleShjYW0tPmlucHV0LCBLRVlfQ0FNRVJBLCBjYW0tPmJ1dHRvbl9zdHMpOwotCQlpbnB1dF9zeW5jKGNhbS0+aW5wdXQpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcWNtX2ludF9pcnEoc3RydWN0IHVyYiAqdXJiKQotewotCWludCByZXQ7Ci0Jc3RydWN0IHV2ZCAqdXZkID0gdXJiLT5jb250ZXh0OwotCXN0cnVjdCBxY20gKmNhbTsKLQotCWlmICghQ0FNRVJBX0lTX09QRVJBVElPTkFMKHV2ZCkpCi0JCXJldHVybjsKLQotCWlmICghdXZkLT5zdHJlYW1pbmcpCi0JCXJldHVybjsKLQotCXV2ZC0+c3RhdHMudXJiX2NvdW50Kys7Ci0KLQlpZiAodXJiLT5zdGF0dXMgPCAwKQotCQl1dmQtPnN0YXRzLmlzb19lcnJfY291bnQrKzsKLQllbHNlIHsKLQkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+IDAgKSB7Ci0JCQljYW0gPSAoc3RydWN0IHFjbSAqKSB1dmQtPnVzZXJfZGF0YTsKLQkJCWlmIChjYW0tPmJ1dHRvbl9zdHNfYnVmID09IDB4ODgpCi0JCQkJY2FtLT5idXR0b25fc3RzID0gMHgwOwotCQkJZWxzZSBpZiAoY2FtLT5idXR0b25fc3RzX2J1ZiA9PSAweDgwKQotCQkJCWNhbS0+YnV0dG9uX3N0cyA9IDB4MTsKLQkJCXFjbV9yZXBvcnRfYnV0dG9uc3RhdChjYW0pOwotCQl9Ci0JfQotCi0JcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLQlpZiAocmV0IDwgMCkKLQkJZXJyKCJ1c2Jfc3VibWl0X3VyYiBlcnJvciAoJWQpIiwgcmV0KTsKLX0KLQotc3RhdGljIGludCBxY21fc2V0dXBfaW5wdXRfaW50KHN0cnVjdCBxY20gKmNhbSwgc3RydWN0IHV2ZCAqdXZkKQotewotCWludCBlcnJmbGFnOwotCXVzYl9maWxsX2ludF91cmIoY2FtLT5idXR0b25fdXJiLCB1dmQtPmRldiwKLQkJCXVzYl9yY3ZpbnRwaXBlKHV2ZC0+ZGV2LCB1dmQtPnZpZGVvX2VuZHAgKyAxKSwKLQkJCSZjYW0tPmJ1dHRvbl9zdHNfYnVmLAotCQkJMSwKLQkJCXFjbV9pbnRfaXJxLAotCQkJdXZkLCAxNik7Ci0KLQllcnJmbGFnID0gdXNiX3N1Ym1pdF91cmIoY2FtLT5idXR0b25fdXJiLCBHRlBfS0VSTkVMKTsKLQlpZiAoZXJyZmxhZykKLQkJZXJyICgidXNiX3N1Ym1pdF9pbnQgcmV0ICVkIiwgZXJyZmxhZyk7Ci0JcmV0dXJuIGVycmZsYWc7Ci19Ci0KLXN0YXRpYyB2b2lkIHFjbV9zdG9wX2ludF9kYXRhKHN0cnVjdCBxY20gKmNhbSkKLXsKLQl1c2Jfa2lsbF91cmIoY2FtLT5idXR0b25fdXJiKTsKLX0KLQotc3RhdGljIGludCBxY21fYWxsb2NfaW50X3VyYihzdHJ1Y3QgcWNtICpjYW0pCi17Ci0JY2FtLT5idXR0b25fdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLQotCWlmICghY2FtLT5idXR0b25fdXJiKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBxY21fZnJlZV9pbnQoc3RydWN0IHFjbSAqY2FtKQotewotCXVzYl9mcmVlX3VyYihjYW0tPmJ1dHRvbl91cmIpOwotfQotI2VuZGlmIC8qIENPTkZJR19JTlBVVCAqLwotCi1zdGF0aWMgaW50IHFjbV9zdHZfc2V0YihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1MTYgcmVnLCB1OCB2YWwpCi17Ci0JaW50IHJldDsKLQotCS8qIHdlJ2xsIHdhaXQgdXAgdG8gMyBzbGljZXMgYnV0IG5vIG1vcmUgKi8KLQlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKLQkJMHgwNCwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQgfCBVU0JfUkVDSVBfREVWSUNFLAotCQlyZWcsIDAsICZ2YWwsIDEsIDMqSFopOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgcWNtX3N0dl9zZXR3KHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHUxNiByZWcsIF9fbGUxNiB2YWwpCi17Ci0JaW50IHJldDsKLQotCS8qIHdlJ2xsIHdhaXQgdXAgdG8gMyBzbGljZXMgYnV0IG5vIG1vcmUgKi8KLQlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKLQkJMHgwNCwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQgfCBVU0JfUkVDSVBfREVWSUNFLAotCQlyZWcsIDAsICZ2YWwsIDIsIDMqSFopOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgcWNtX3N0dl9nZXR3KHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IHJlZywKLQkJCQkJCQlfX2xlMTYgKnZhbCkKLXsKLQlpbnQgcmV0OwotCi0JLyogd2UnbGwgd2FpdCB1cCB0byAzIHNsaWNlcyBidXQgbm8gbW9yZSAqLwotCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLAotCQkweDA0LCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOIHwgVVNCX1JFQ0lQX0RFVklDRSwKLQkJcmVnLCAwLCB2YWwsIDIsIDMqSFopOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgcWNtX2NhbWVyYV9vbihzdHJ1Y3QgdXZkICp1dmQpCi17Ci0JaW50IHJldDsKLQlDSEVDS19SRVQocmV0LCBxY21fc3R2X3NldGIodXZkLT5kZXYsIFNUVl9JU09fRU5BQkxFLCAweDAxKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcWNtX2NhbWVyYV9vZmYoc3RydWN0IHV2ZCAqdXZkKQotewotCWludCByZXQ7Ci0JQ0hFQ0tfUkVUKHJldCwgcWNtX3N0dl9zZXRiKHV2ZC0+ZGV2LCBTVFZfSVNPX0VOQUJMRSwgMHgwMCkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBxY21faHN2MnJnYih1MTYgaHVlLCB1MTYgc2F0LCB1MTYgdmFsLCB1MTYgKnIsIHUxNiAqZywgdTE2ICpiKQotewotCXVuc2lnbmVkIGludCBzZWdtZW50LCB2YWxzYXQ7Ci0Jc2lnbmVkIGludCAgIGggPSAoc2lnbmVkIGludCkgaHVlOwotCXVuc2lnbmVkIGludCBzID0gKHNhdCAtIDMyNzY4KSAqIDI7CS8qIHJlc2NhbGUgKi8KLQl1bnNpZ25lZCBpbnQgdiA9IHZhbDsKLQl1bnNpZ25lZCBpbnQgcDsKLQotCS8qCi0JdGhlIHJlZ2lzdGVycyBjb250cm9sbGluZyBnYWluIGFyZSA4IGJpdCBvZiB3aGljaAotCXdlIGFmZmVjdCBvbmx5IHRoZSBsYXN0IDQgYml0cyB3aXRoIG91ciBnYWluLgotCXdlIGtub3cgdGhhdCBpZiBzYXR1cmF0aW9uIGlzIDAsICh1bnNhdHVyYXRlZCkgdGhlbgotCXdlJ3JlIGdyYXlzY2FsZSAoY2VudGVyIGF4aXMgb2YgdGhlIGNvbG91ciBjb25lKSBzbwotCXdlIHNldCByZ2I9dmFsdWUuIHdlIHVzZSBhIGZvcm11bGEgb2J0YWluZWQgZnJvbQotCXdpa2lwZWRpYSB0byBtYXAgdGhlIGNvbmUgdG8gdGhlIFJHQiBwbGFuZS4gaXQncwotCWFzIGZvbGxvd3MgZm9yIHRoZSBodW1hbiB2YWx1ZSBjYXNlIG9mIGg9MC4uMzYwLAotCXM9MC4uMSwgdj0wLi4xCi0JaF9pID0gaC82MCAlIDYgLCBmID0gaC82MCAtIGhfaSAsIHAgPSB2KDEtcykKLQlxID0gdigxIC0gZipzKSAsIHQgPSB2KDEgLSAoMS1mKXMpCi0JaF9pPT0wID0+IHI9diAsIGc9dCwgYj1wCi0JaF9pPT0xID0+IHI9cSAsIGc9diwgYj1wCi0JaF9pPT0yID0+IHI9cCAsIGc9diwgYj10Ci0JaF9pPT0zID0+IHI9cCAsIGc9cSwgYj12Ci0JaF9pPT00ID0+IHI9dCAsIGc9cCwgYj12Ci0JaF9pPT01ID0+IHI9diAsIGc9cCwgYj1xCi0JdGhlIGJvdHRvbSBzaWRlICh0aGUgcG9pbnQpIGFuZCB0aGUgc3R1ZmYganVzdCB1cAotCW9mIHRoYXQgaXMgYmxhY2sgc28gd2Ugc2ltcGxpZnkgdGhvc2UgdHdvIGNhc2VzLgotCSovCi0JaWYgKHNhdCA8IDMyNzY4KSB7Ci0JCS8qIGFueXRoaW5nIGxlc3MgdGhhbiB0aGlzIGlzIHVuc2F0dXJhdGVkICovCi0JCSpyID0gdmFsOwotCQkqZyA9IHZhbDsKLQkJKmIgPSB2YWw7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKHZhbCA8PSAoMHhGRkZGLzgpKSB7Ci0JCS8qIGFueXRoaW5nIGxlc3MgdGhhbiB0aGlzIGlzIGJsYWNrICovCi0JCSpyID0gMDsKLQkJKmcgPSAwOwotCQkqYiA9IDA7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiB0aGUgcmVzdCBvZiB0aGlzIGNvZGUgaXMgY29weWluZyB0dWtrYXQncwotCWltcGxlbWVudGF0aW9uIG9mIHRoZSBoc3YycmdiIGNvbnZlcnNpb24gYXMgdGFrZW4KLQlmcm9tIHFjLXVzYi1tZXNzZW5nZXIgY29kZS4gdGhlIDEwOTIzIGlzIDB4RkZGRi82Ci0JdG8gZGl2aWRlIHRoZSBjb25lIGludG8gNiBzZWN0b3JzLiAgKi8KLQotCXNlZ21lbnQgPSAoaCArIDEwOTIzKSAmIDB4RkZGRjsKLQlzZWdtZW50ID0gc2VnbWVudCozID4+IDE2OwkJLyogMC4uMjogMD1SLCAxPUcsIDI9QiAqLwotCWh1ZSAtPSBzZWdtZW50ICogMjE4NDU7CQkJLyogLTEwOTIzLi4xMDkyMyAqLwotCWggPSBodWU7Ci0JaCAqPSAzOwotCXZhbHNhdCA9IHYqcyA+PiAxNjsJCQkvKiAwLi42NTUzNCAqLwotCXAgPSB2IC0gdmFsc2F0OwotCWlmIChoID49IDApIHsKLQkJdW5zaWduZWQgaW50IHQgPSB2IC0gKHZhbHNhdCAqICgzMjc2OSAtIGgpID4+IDE1KTsKLQkJc3dpdGNoIChzZWdtZW50KSB7Ci0JCWNhc2UgMDoJLyogUi0+ICovCi0JCQkqciA9IHY7Ci0JCQkqZyA9IHQ7Ci0JCQkqYiA9IHA7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgkvKiBHLT4gKi8KLQkJCSpyID0gcDsKLQkJCSpnID0gdjsKLQkJCSpiID0gdDsKLQkJCWJyZWFrOwotCQljYXNlIDI6CS8qIEItPiAqLwotCQkJKnIgPSB0OwotCQkJKmcgPSBwOwotCQkJKmIgPSB2OwotCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2UgewotCQl1bnNpZ25lZCBpbnQgcSA9IHYgLSAodmFsc2F0ICogKDMyNzY5ICsgaCkgPj4gMTUpOwotCQlzd2l0Y2ggKHNlZ21lbnQpIHsKLQkJY2FzZSAwOgkvKiAtPlIgKi8KLQkJCSpyID0gdjsKLQkJCSpnID0gcDsKLQkJCSpiID0gcTsKLQkJCWJyZWFrOwotCQljYXNlIDE6CS8qIC0+RyAqLwotCQkJKnIgPSBxOwotCQkJKmcgPSB2OwotCQkJKmIgPSBwOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoJLyogLT5CICovCi0JCQkqciA9IHA7Ci0JCQkqZyA9IHE7Ci0JCQkqYiA9IHY7Ci0JCQlicmVhazsKLQkJfQotCX0KLX0KLQotc3RhdGljIGludCBxY21fc2Vuc29yX3NldF9nYWlucyhzdHJ1Y3QgdXZkICp1dmQsIHUxNiBodWUsCi0JdTE2IHNhdHVyYXRpb24sIHUxNiB2YWx1ZSkKLXsKLQlpbnQgcmV0OwotCXUxNiByPTAsZz0wLGI9MDsKLQotCS8qIHRoaXMgY29kZSBpcyBiYXNlZCBvbiBxYy11c2ItbWVzc2VuZ2VyICovCi0JcWNtX2hzdjJyZ2IoaHVlLCBzYXR1cmF0aW9uLCB2YWx1ZSwgJnIsICZnLCAmYik7Ci0KLQlyID4+PSAxMjsKLQlnID4+PSAxMjsKLQliID4+PSAxMjsKLQotCS8qIG1pbiB2YWwgaXMgOCAqLwotCXIgPSBtYXgoKHUxNikgOCwgcik7Ci0JZyA9IG1heCgodTE2KSA4LCBnKTsKLQliID0gbWF4KCh1MTYpIDgsIGIpOwotCi0JciB8PSAweDMwOwotCWcgfD0gMHgzMDsKLQliIHw9IDB4MzA7Ci0KLQkvKiBzZXQgdGhlIHIsZyxiIGdhaW4gcmVnaXN0ZXJzICovCi0JQ0hFQ0tfUkVUKHJldCwgcWNtX3N0dl9zZXRiKHV2ZC0+ZGV2LCAweDA1MDksIHIpKTsKLQlDSEVDS19SRVQocmV0LCBxY21fc3R2X3NldGIodXZkLT5kZXYsIDB4MDUwQSwgZykpOwotCUNIRUNLX1JFVChyZXQsIHFjbV9zdHZfc2V0Yih1dmQtPmRldiwgMHgwNTBCLCBiKSk7Ci0KLQkvKiBkb2luZyBhcyBxYy11c2IgZGlkICovCi0JQ0hFQ0tfUkVUKHJldCwgcWNtX3N0dl9zZXRiKHV2ZC0+ZGV2LCAweDA1MEMsIDB4MkEpKTsKLQlDSEVDS19SRVQocmV0LCBxY21fc3R2X3NldGIodXZkLT5kZXYsIDB4MDUwRCwgMHgwMSkpOwotCUNIRUNLX1JFVChyZXQsIHFjbV9zdHZfc2V0Yih1dmQtPmRldiwgMHgxNDNGLCAweDAxKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBxY21fc2Vuc29yX3NldF9leHBvc3VyZShzdHJ1Y3QgdXZkICp1dmQsIGludCBleHBvc3VyZSkKLXsKLQlpbnQgcmV0OwotCWludCBmb3JtZWR2YWw7Ci0KLQkvKiBjYWxjdWxhdGlvbiB3YXMgZnJvbSBxYy11c2ItbWVzc2VuZ2VyIGRyaXZlciAqLwotCWZvcm1lZHZhbCA9ICggZXhwb3N1cmUgPj4gMTIgKTsKLQotCS8qIG1heCB2YWx1ZSBmb3IgZm9ybWVkdmFsIGlzIDE0ICovCi0JZm9ybWVkdmFsID0gbWluKGZvcm1lZHZhbCwgMTQpOwotCi0JQ0hFQ0tfUkVUKHJldCwgcWNtX3N0dl9zZXRiKHV2ZC0+ZGV2LAotCQkJMHgxNDNBLCAweEYwIHwgZm9ybWVkdmFsKSk7Ci0JQ0hFQ0tfUkVUKHJldCwgcWNtX3N0dl9zZXRiKHV2ZC0+ZGV2LCAweDE0M0YsIDB4MDEpKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBxY21fc2Vuc29yX3NldGxldmVscyhzdHJ1Y3QgdXZkICp1dmQsIGludCBicmlnaHRuZXNzLCBpbnQgY29udHJhc3QsCi0JCQkJCWludCBodWUsIGludCBjb2xvdXIpCi17Ci0JaW50IHJldDsKLQkvKiBicmlnaHRuZXNzIGlzIGV4cG9zdXJlLCBjb250cmFzdCBpcyBnYWluLCBjb2xvdXIgaXMgc2F0dXJhdGlvbiAqLwotCUNIRUNLX1JFVChyZXQsCi0JCXFjbV9zZW5zb3Jfc2V0X2V4cG9zdXJlKHV2ZCwgYnJpZ2h0bmVzcykpOwotCUNIRUNLX1JFVChyZXQsIHFjbV9zZW5zb3Jfc2V0X2dhaW5zKHV2ZCwgaHVlLCBjb2xvdXIsIGNvbnRyYXN0KSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBxY21fc2Vuc29yX3NldHNpemUoc3RydWN0IHV2ZCAqdXZkLCB1OCBzaXplKQotewotCWludCByZXQ7Ci0KLQlDSEVDS19SRVQocmV0LCBxY21fc3R2X3NldGIodXZkLT5kZXYsIDB4MTUwNSwgc2l6ZSkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHFjbV9zZW5zb3Jfc2V0X3NodXR0ZXIoc3RydWN0IHV2ZCAqdXZkLCBpbnQgd2hpdGVuZXNzKQotewotCWludCByZXQ7Ci0JLyogc29tZSByZXNjYWxpbmcgYXMgZG9uZSBieSB0aGUgcWMtdXNiLW1lc3NlbmdlciBjb2RlICovCi0JaWYgKHdoaXRlbmVzcyA+IDB4QzAwMCkKLQkJd2hpdGVuZXNzID0gMHhDMDAwICsgKHdoaXRlbmVzcyAmIDB4M0ZGRikqODsKLQotCUNIRUNLX1JFVChyZXQsIHFjbV9zdHZfc2V0Yih1dmQtPmRldiwgMHgxNDNELAotCQkJCSh3aGl0ZW5lc3MgPj4gOCkgJiAweEZGKSk7Ci0JQ0hFQ0tfUkVUKHJldCwgcWNtX3N0dl9zZXRiKHV2ZC0+ZGV2LCAweDE0M0UsCi0JCQkJKHdoaXRlbmVzcyA+PiAxNikgJiAweDAzKSk7Ci0JQ0hFQ0tfUkVUKHJldCwgcWNtX3N0dl9zZXRiKHV2ZC0+ZGV2LCAweDE0M0YsIDB4MDEpKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHFjbV9zZW5zb3JfaW5pdChzdHJ1Y3QgdXZkICp1dmQpCi17Ci0Jc3RydWN0IHFjbSAqY2FtID0gKHN0cnVjdCBxY20gKikgdXZkLT51c2VyX2RhdGE7Ci0JaW50IHJldDsKLQlpbnQgaTsKLQotCWZvciAoaT0wOyBpIDwgQVJSQVlfU0laRShyZWd2YWxfdGFibGUpIDsgaSsrKSB7Ci0JCUNIRUNLX1JFVChyZXQsIHFjbV9zdHZfc2V0Yih1dmQtPmRldiwKLQkJCQkJcmVndmFsX3RhYmxlW2ldLnJlZywKLQkJCQkJcmVndmFsX3RhYmxlW2ldLnZhbCkpOwotCX0KLQotCUNIRUNLX1JFVChyZXQsIHFjbV9zdHZfc2V0dyh1dmQtPmRldiwgMHgxNWMxLAotCQkJCWNwdV90b19sZTE2KElTT0NfUEFDS0VUX1NJWkUpKSk7Ci0JQ0hFQ0tfUkVUKHJldCwgcWNtX3N0dl9zZXRiKHV2ZC0+ZGV2LCAweDE1YzMsIDB4MDgpKTsKLQlDSEVDS19SRVQocmV0LCBxY21fc3R2X3NldGIodXZkLT5kZXYsIDB4MTQzZiwgMHgwMSkpOwotCi0JQ0hFQ0tfUkVUKHJldCwgcWNtX3N0dl9zZXRiKHV2ZC0+ZGV2LCBTVFZfSVNPX0VOQUJMRSwgMHgwMCkpOwotCi0JQ0hFQ0tfUkVUKHJldCwgcWNtX3NlbnNvcl9zZXRzaXplKHV2ZCwgY2FtZXJhX3NpemVzW2NhbS0+c2l6ZV0uY21kKSk7Ci0KLQlDSEVDS19SRVQocmV0LCBxY21fc2Vuc29yX3NldGxldmVscyh1dmQsIHV2ZC0+dnBpYy5icmlnaHRuZXNzLAotCQkJdXZkLT52cGljLmNvbnRyYXN0LCB1dmQtPnZwaWMuaHVlLCB1dmQtPnZwaWMuY29sb3VyKSk7Ci0KLQlDSEVDS19SRVQocmV0LCBxY21fc2Vuc29yX3NldF9zaHV0dGVyKHV2ZCwgdXZkLT52cGljLndoaXRlbmVzcykpOwotCUNIRUNLX1JFVChyZXQsIHFjbV9zZW5zb3Jfc2V0c2l6ZSh1dmQsIGNhbWVyYV9zaXplc1tjYW0tPnNpemVdLmNtZCkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcWNtX3NldF9jYW1lcmFfc2l6ZShzdHJ1Y3QgdXZkICp1dmQpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgcWNtICpjYW0gPSAoc3RydWN0IHFjbSAqKSB1dmQtPnVzZXJfZGF0YTsKLQotCUNIRUNLX1JFVChyZXQsIHFjbV9zZW5zb3Jfc2V0c2l6ZSh1dmQsIGNhbWVyYV9zaXplc1tjYW0tPnNpemVdLmNtZCkpOwotCWNhbS0+d2lkdGggPSBjYW1lcmFfc2l6ZXNbY2FtLT5zaXplXS53aWR0aDsKLQljYW0tPmhlaWdodCA9IGNhbWVyYV9zaXplc1tjYW0tPnNpemVdLmhlaWdodDsKLQl1dmQtPnZpZGVvc2l6ZSA9IFZJREVPU0laRShjYW0tPndpZHRoLCBjYW0tPmhlaWdodCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBxY21fc2V0dXBfb25fb3BlbihzdHJ1Y3QgdXZkICp1dmQpCi17Ci0JaW50IHJldDsKLQotCUNIRUNLX1JFVChyZXQsIHFjbV9zZW5zb3Jfc2V0X2dhaW5zKHV2ZCwgdXZkLT52cGljLmh1ZSwKLQkJCQl1dmQtPnZwaWMuY29sb3VyLCB1dmQtPnZwaWMuY29udHJhc3QpKTsKLQlDSEVDS19SRVQocmV0LCBxY21fc2Vuc29yX3NldF9leHBvc3VyZSh1dmQsIHV2ZC0+dnBpYy5icmlnaHRuZXNzKSk7Ci0JQ0hFQ0tfUkVUKHJldCwgcWNtX3NlbnNvcl9zZXRfc2h1dHRlcih1dmQsIHV2ZC0+dnBpYy53aGl0ZW5lc3MpKTsKLQlDSEVDS19SRVQocmV0LCBxY21fc2V0X2NhbWVyYV9zaXplKHV2ZCkpOwotCUNIRUNLX1JFVChyZXQsIHFjbV9jYW1lcmFfb24odXZkKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHFjbV9hZGp1c3RfcGljdHVyZShzdHJ1Y3QgdXZkICp1dmQpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgcWNtICpjYW0gPSAoc3RydWN0IHFjbSAqKSB1dmQtPnVzZXJfZGF0YTsKLQotCXJldCA9IHFjbV9jYW1lcmFfb2ZmKHV2ZCk7Ci0JaWYgKHJldCkgewotCQllcnIoImNhbid0IHR1cm4gY2FtZXJhIG9mZi4gYWJhbmRvbmluZyBwaWMgYWRqdXN0bWVudCIpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogaWYgdGhlcmUncyBiZWVuIGEgY2hhbmdlIGluIGNvbnRyYXN0LCBodWUsIG9yCi0JY29sb3VyIHRoZW4gd2UgbmVlZCB0byByZWNhbGN1bGF0ZSBoc3YgaW4gb3JkZXIKLQl0byB1cGRhdGUgZ2FpbnMgKi8KLQlpZiAoKGNhbS0+Y29udHJhc3QgIT0gdXZkLT52cGljLmNvbnRyYXN0KSB8fAotCQkoY2FtLT5odWUgIT0gdXZkLT52cGljLmh1ZSkgfHwKLQkJKGNhbS0+Y29sb3VyICE9IHV2ZC0+dnBpYy5jb2xvdXIpKSB7Ci0JCWNhbS0+Y29udHJhc3QgPSB1dmQtPnZwaWMuY29udHJhc3Q7Ci0JCWNhbS0+aHVlID0gdXZkLT52cGljLmh1ZTsKLQkJY2FtLT5jb2xvdXIgPSB1dmQtPnZwaWMuY29sb3VyOwotCQlyZXQgPSBxY21fc2Vuc29yX3NldF9nYWlucyh1dmQsIGNhbS0+aHVlLCBjYW0tPmNvbG91ciwKLQkJCQkJCWNhbS0+Y29udHJhc3QpOwotCQlpZiAocmV0KSB7Ci0JCQllcnIoImNhbid0IHNldCBnYWlucy4gYWJhbmRvbmluZyBwaWMgYWRqdXN0bWVudCIpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0JaWYgKGNhbS0+YnJpZ2h0bmVzcyAhPSB1dmQtPnZwaWMuYnJpZ2h0bmVzcykgewotCQljYW0tPmJyaWdodG5lc3MgPSB1dmQtPnZwaWMuYnJpZ2h0bmVzczsKLQkJcmV0ID0gcWNtX3NlbnNvcl9zZXRfZXhwb3N1cmUodXZkLCBjYW0tPmJyaWdodG5lc3MpOwotCQlpZiAocmV0KSB7Ci0JCQllcnIoImNhbid0IHNldCBleHBvc3VyZS4gYWJhbmRvbmluZyBwaWMgYWRqdXN0bWVudCIpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0JaWYgKGNhbS0+d2hpdGVuZXNzICE9IHV2ZC0+dnBpYy53aGl0ZW5lc3MpIHsKLQkJY2FtLT53aGl0ZW5lc3MgPSB1dmQtPnZwaWMud2hpdGVuZXNzOwotCQlxY21fc2Vuc29yX3NldF9zaHV0dGVyKHV2ZCwgY2FtLT53aGl0ZW5lc3MpOwotCQlpZiAocmV0KSB7Ci0JCQllcnIoImNhbid0IHNldCBzaHV0dGVyLiBhYmFuZG9uaW5nIHBpYyBhZGp1c3RtZW50Iik7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQlyZXQgPSBxY21fY2FtZXJhX29uKHV2ZCk7Ci0JaWYgKHJldCkgewotCQllcnIoImNhbid0IHJlZW5hYmxlIGNhbWVyYS4gcGljIGFkanVzdG1lbnQgZmFpbGVkIik7Ci0JCXJldHVybjsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgcWNtX3Byb2Nlc3NfZnJhbWUoc3RydWN0IHV2ZCAqdXZkLCB1OCAqY2RhdGEsIGludCBmcmFtZWxlbikKLXsKLQlpbnQgZGF0YWxlbjsKLQlpbnQgdG90YWxkYXRhOwotCXN0cnVjdCBmcmFtZWhkciB7Ci0JCV9fYmUxNiBpZDsKLQkJX19iZTE2IGxlbjsKLQl9OwotCXN0cnVjdCBmcmFtZWhkciAqZmhkcjsKLQotCXRvdGFsZGF0YSA9IDA7Ci0Jd2hpbGUgKGZyYW1lbGVuKSB7Ci0JCWZoZHIgPSAoc3RydWN0IGZyYW1laGRyICopIGNkYXRhOwotCQlkYXRhbGVuID0gYmUxNl90b19jcHUoZmhkci0+bGVuKTsKLQkJZnJhbWVsZW4gLT0gNDsKLQkJY2RhdGEgKz0gNDsKLQotCQlpZiAoKGZoZHItPmlkKSA9PSBjcHVfdG9fYmUxNigweDgwMDEpKSB7Ci0JCQlSaW5nUXVldWVfRW5xdWV1ZSgmdXZkLT5kcCwgbWFya2VyLCA0KTsKLQkJCXRvdGFsZGF0YSArPSA0OwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKChmaGRyLT5pZCAmIGNwdV90b19iZTE2KDB4RkYwMCkpID09IGNwdV90b19iZTE2KDB4MDIwMCkpIHsKLQkJCVJpbmdRdWV1ZV9FbnF1ZXVlKCZ1dmQtPmRwLCBjZGF0YSwgZGF0YWxlbik7Ci0JCQl0b3RhbGRhdGEgKz0gZGF0YWxlbjsKLQkJfQotCQlmcmFtZWxlbiAtPSBkYXRhbGVuOwotCQljZGF0YSArPSBkYXRhbGVuOwotCX0KLQlyZXR1cm4gdG90YWxkYXRhOwotfQotCi1zdGF0aWMgaW50IHFjbV9jb21wcmVzc19pc28oc3RydWN0IHV2ZCAqdXZkLCBzdHJ1Y3QgdXJiICpkYXRhdXJiKQotewotCWludCB0b3RsZW47Ci0JaW50IGk7Ci0JdW5zaWduZWQgY2hhciAqY2RhdGE7Ci0KLQl0b3RsZW49MDsKLQlmb3IgKGkgPSAwOyBpIDwgZGF0YXVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgewotCQlpbnQgbiA9IGRhdGF1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGg7Ci0JCWludCBzdCA9IGRhdGF1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1czsKLQotCQljZGF0YSA9IGRhdGF1cmItPnRyYW5zZmVyX2J1ZmZlciArCi0JCQlkYXRhdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQ7Ci0KLQkJaWYgKHN0IDwgMCkgewotCQkJZGV2X3dhcm4oJnV2ZC0+ZGV2LT5kZXYsCi0JCQkJICJEYXRhIGVycm9yOiBwYWNrZXQ9JWQuIGxlbj0lZC4gc3RhdHVzPSVkLlxuIiwKLQkJCQkgaSwgbiwgc3QpOwotCQkJdXZkLT5zdGF0cy5pc29fZXJyX2NvdW50Kys7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIW4pCi0JCQljb250aW51ZTsKLQotCQl0b3RsZW4gKz0gcWNtX3Byb2Nlc3NfZnJhbWUodXZkLCBjZGF0YSwgbik7Ci0JfQotCXJldHVybiB0b3RsZW47Ci19Ci0KLXN0YXRpYyB2b2lkIHJlc3VibWl0X3VyYihzdHJ1Y3QgdXZkICp1dmQsIHN0cnVjdCB1cmIgKnVyYikKLXsKLQlpbnQgcmV0OwotCi0JdXJiLT5kZXYgPSB1dmQtPmRldjsKLQlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwotCWlmIChyZXQpCi0JCWVycigidXNiX3N1Ym1pdF91cmIgZXJyb3IgKCVkKSIsIHJldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHFjbV9pc29jX2lycShzdHJ1Y3QgdXJiICp1cmIpCi17Ci0JaW50IGxlbjsKLQlzdHJ1Y3QgdXZkICp1dmQgPSB1cmItPmNvbnRleHQ7Ci0KLQlpZiAoIUNBTUVSQV9JU19PUEVSQVRJT05BTCh1dmQpKQotCQlyZXR1cm47Ci0KLQlpZiAoIXV2ZC0+c3RyZWFtaW5nKQotCQlyZXR1cm47Ci0KLQl1dmQtPnN0YXRzLnVyYl9jb3VudCsrOwotCi0JaWYgKCF1cmItPmFjdHVhbF9sZW5ndGgpIHsKLQkJcmVzdWJtaXRfdXJiKHV2ZCwgdXJiKTsKLQkJcmV0dXJuOwotCX0KLQotCWxlbiA9IHFjbV9jb21wcmVzc19pc28odXZkLCB1cmIpOwotCXJlc3VibWl0X3VyYih1dmQsIHVyYik7Ci0JdXZkLT5zdGF0cy51cmJfbGVuZ3RoID0gbGVuOwotCXV2ZC0+c3RhdHMuZGF0YV9jb3VudCArPSBsZW47Ci0JaWYgKGxlbikKLQkJUmluZ1F1ZXVlX1dha2VVcEludGVycnVwdGlibGUoJnV2ZC0+ZHApOwotfQotCi1zdGF0aWMgaW50IHFjbV9zdGFydF9kYXRhKHN0cnVjdCB1dmQgKnV2ZCkKLXsKLQlzdHJ1Y3QgcWNtICpjYW0gPSAoc3RydWN0IHFjbSAqKSB1dmQtPnVzZXJfZGF0YTsKLQlpbnQgaTsKLQlpbnQgZXJyZmxhZzsKLQlpbnQgcGt0c3o7Ci0JaW50IGVycjsKLQotCXBrdHN6ID0gdXZkLT5pc29fcGFja2V0X2xlbjsKLQlpZiAoIUNBTUVSQV9JU19PUEVSQVRJT05BTCh1dmQpKSB7Ci0JCWVycigiQ2FtZXJhIGlzIG5vdCBvcGVyYXRpb25hbCIpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQllcnIgPSB1c2Jfc2V0X2ludGVyZmFjZSh1dmQtPmRldiwgdXZkLT5pZmFjZSwgdXZkLT5pZmFjZUFsdEFjdGl2ZSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJZXJyKCJ1c2Jfc2V0X2ludGVyZmFjZSBlcnJvciIpOwotCQl1dmQtPmxhc3RfZXJyb3IgPSBlcnI7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JZm9yIChpPTA7IGkgPCBVU0JWSURFT19OVU1TQlVGOyBpKyspIHsKLQkJaW50IGosIGs7Ci0JCXN0cnVjdCB1cmIgKnVyYiA9IHV2ZC0+c2J1ZltpXS51cmI7Ci0JCXVyYi0+ZGV2ID0gdXZkLT5kZXY7Ci0JCXVyYi0+Y29udGV4dCA9IHV2ZDsKLQkJdXJiLT5waXBlID0gdXNiX3Jjdmlzb2NwaXBlKHV2ZC0+ZGV2LCB1dmQtPnZpZGVvX2VuZHApOwotCQl1cmItPmludGVydmFsID0gMTsKLQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKLQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSB1dmQtPnNidWZbaV0uZGF0YTsKLQkJdXJiLT5jb21wbGV0ZSA9IHFjbV9pc29jX2lycTsKLQkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IEZSQU1FU19QRVJfREVTQzsKLQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gcGt0c3ogKiBGUkFNRVNfUEVSX0RFU0M7Ci0JCWZvciAoaj1rPTA7IGogPCBGUkFNRVNfUEVSX0RFU0M7IGorKywgayArPSBwa3RzeikgewotCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5vZmZzZXQgPSBrOwotCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5sZW5ndGggPSBwa3RzejsKLQkJfQotCX0KLQotCXV2ZC0+c3RyZWFtaW5nID0gMTsKLQl1dmQtPmN1cmZyYW1lID0gLTE7Ci0JZm9yIChpPTA7IGkgPCBVU0JWSURFT19OVU1TQlVGOyBpKyspIHsKLQkJZXJyZmxhZyA9IHVzYl9zdWJtaXRfdXJiKHV2ZC0+c2J1ZltpXS51cmIsIEdGUF9LRVJORUwpOwotCQlpZiAoZXJyZmxhZykKLQkJCWVyciAoInVzYl9zdWJtaXRfaXNvYyglZCkgcmV0ICVkIiwgaSwgZXJyZmxhZyk7Ci0JfQotCi0JQ0hFQ0tfUkVUKGVyciwgcWNtX3NldHVwX2lucHV0X2ludChjYW0sIHV2ZCkpOwotCUNIRUNLX1JFVChlcnIsIHFjbV9jYW1lcmFfb24odXZkKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHFjbV9zdG9wX2RhdGEoc3RydWN0IHV2ZCAqdXZkKQotewotCXN0cnVjdCBxY20gKmNhbTsKLQlpbnQgaSwgajsKLQlpbnQgcmV0OwotCi0JaWYgKCh1dmQgPT0gTlVMTCkgfHwgKCF1dmQtPnN0cmVhbWluZykgfHwgKHV2ZC0+ZGV2ID09IE5VTEwpKQotCQlyZXR1cm47Ci0JY2FtID0gKHN0cnVjdCBxY20gKikgdXZkLT51c2VyX2RhdGE7Ci0KLQlyZXQgPSBxY21fY2FtZXJhX29mZih1dmQpOwotCWlmIChyZXQpCi0JCWRldl93YXJuKCZ1dmQtPmRldi0+ZGV2LCAiY291bGRuJ3QgdHVybiB0aGUgY2FtIG9mZi5cbiIpOwotCi0JdXZkLT5zdHJlYW1pbmcgPSAwOwotCi0JLyogVW5zY2hlZHVsZSBhbGwgb2YgdGhlIGlzbyB0ZCdzICovCi0JZm9yIChpPTA7IGkgPCBVU0JWSURFT19OVU1TQlVGOyBpKyspCi0JCXVzYl9raWxsX3VyYih1dmQtPnNidWZbaV0udXJiKTsKLQotCXFjbV9zdG9wX2ludF9kYXRhKGNhbSk7Ci0KLQlpZiAoIXV2ZC0+cmVtb3ZlX3BlbmRpbmcpIHsKLQkJLyogU2V0IHBhY2tldCBzaXplIHRvIDAgKi8KLQkJaiA9IHVzYl9zZXRfaW50ZXJmYWNlKHV2ZC0+ZGV2LCB1dmQtPmlmYWNlLAotCQkJCQl1dmQtPmlmYWNlQWx0SW5hY3RpdmUpOwotCQlpZiAoaiA8IDApIHsKLQkJCWVycigidXNiX3NldF9pbnRlcmZhY2UoKSBlcnJvciAlZC4iLCBqKTsKLQkJCXV2ZC0+bGFzdF9lcnJvciA9IGo7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHFjbV9wcm9jZXNzX2lzb2Moc3RydWN0IHV2ZCAqdXZkLCBzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lKQotewotCXN0cnVjdCBxY20gKmNhbSA9IChzdHJ1Y3QgcWNtICopIHV2ZC0+dXNlcl9kYXRhOwotCWludCB4OwotCXN0cnVjdCByZ2IgKnJnYkwwOwotCXN0cnVjdCByZ2IgKnJnYkwxOwotCXN0cnVjdCBiYXlMMCAqYmF5TDA7Ci0Jc3RydWN0IGJheUwxICpiYXlMMTsKLQlpbnQgaG9yLHZlcixob3JkZWwsdmVyZGVsOwotCWFzc2VydChmcmFtZSAhPSBOVUxMKTsKLQotCXN3aXRjaCAoY2FtLT5zaXplKSB7Ci0JY2FzZSBTSVpFXzE2MFgxMjA6Ci0JCWhvciA9IDE2MjsgdmVyID0gMTI0OyBob3JkZWwgPSAxOyB2ZXJkZWwgPSAyOwotCQlicmVhazsKLQljYXNlIFNJWkVfMzIwWDI0MDoKLQlkZWZhdWx0OgotCQlob3IgPSAzMjQ7IHZlciA9IDI0ODsgaG9yZGVsID0gMjsgdmVyZGVsID0gNDsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKGZyYW1lLT5zY2Fuc3RhdGUgPT0gU2NhblN0YXRlX1NjYW5uaW5nKSB7Ci0JCXdoaWxlIChSaW5nUXVldWVfR2V0TGVuZ3RoKCZ1dmQtPmRwKSA+PQotCQkJIDQgKyAoaG9yKnZlcmRlbCArIGhvcmRlbCkpIHsKLQkJCWlmICgoUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAwKSA9PSAweDAwKSAmJgotCQkJICAgIChSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDEpID09IDB4ZmYpICYmCi0JCQkgICAgKFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMikgPT0gMHgwMCkgJiYKLQkJCSAgICAoUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAzKSA9PSAweGZmKSkgewotCQkJCWZyYW1lLT5jdXJsaW5lID0gMDsKLQkJCQlmcmFtZS0+c2NhbnN0YXRlID0gU2NhblN0YXRlX0xpbmVzOwotCQkJCWZyYW1lLT5mcmFtZVN0YXRlID0gRnJhbWVTdGF0ZV9HcmFiYmluZzsKLQkJCQlSSU5HX1FVRVVFX0RFUVVFVUVfQllURVMoJnV2ZC0+ZHAsIDQpOwotCQkJLyoKLQkJCSogaWYgd2UncmUgc3RhcnRpbmcsIHdlIG5lZWQgdG8gZGlzY2FyZCB0aGUgZmlyc3QKLQkJCSogNCBsaW5lcyBvZiB5IGJheWVyIGRhdGEKLQkJCSogYW5kIHRoZSBmaXJzdCAyIGdyIGVsZW1lbnRzIG9mIHggYmF5ZXIgZGF0YQotCQkJKi8KLQkJCQlSSU5HX1FVRVVFX0RFUVVFVUVfQllURVMoJnV2ZC0+ZHAsCi0JCQkJCQkJKGhvcip2ZXJkZWwgKyBob3JkZWwpKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCVJJTkdfUVVFVUVfREVRVUVVRV9CWVRFUygmdXZkLT5kcCwgMSk7Ci0JCX0KLQl9Ci0KLQlpZiAoZnJhbWUtPnNjYW5zdGF0ZSA9PSBTY2FuU3RhdGVfU2Nhbm5pbmcpCi0JCXJldHVybjsKLQotCS8qIG5vdyB3ZSBjYW4gc3RhcnQgcHJvY2Vzc2luZyBiYXllciBkYXRhIHNvIGxvbmcgYXMgd2UgaGF2ZSBhdCBsZWFzdAotCSogMiBsaW5lcyB3b3J0aCBvZiBkYXRhLiB0aGlzIGlzIHRoZSBzaW1wbGVzdCBkZW1vc2FpY2luZyBtZXRob2QgdGhhdAotCSogSSBjb3VsZCB0aGluayBvZi4gSSB1c2UgZWFjaCAyeDIgYmF5ZXIgZWxlbWVudCB3aXRob3V0IGludGVycG9sYXRpb24KLQkqIHRvIGdlbmVyYXRlIDQgcmdiIHBpeGVscy4KLQkqLwotCXdoaWxlICggZnJhbWUtPmN1cmxpbmUgPCBjYW0tPmhlaWdodCAmJgotCQkoUmluZ1F1ZXVlX0dldExlbmd0aCgmdXZkLT5kcCkgPj0gaG9yKjIpKSB7Ci0JCS8qIGdldCAyIGxpbmVzIG9mIGJheWVyIGZvciBkZW1vc2FpY2luZwotCQkgKiBpbnRvIDIgbGluZXMgb2YgUkdCICovCi0JCVJpbmdRdWV1ZV9EZXF1ZXVlKCZ1dmQtPmRwLCBjYW0tPnNjcmF0Y2gsIGhvcioyKTsKLQkJYmF5TDAgPSAoc3RydWN0IGJheUwwICopIGNhbS0+c2NyYXRjaDsKLQkJYmF5TDEgPSAoc3RydWN0IGJheUwxICopIChjYW0tPnNjcmF0Y2ggKyBob3IpOwotCQkvKiBmcmFtZS0+Y3VybGluZSBpcyB0aGUgcmdiIHkgbGluZSAqLwotCQlyZ2JMMCA9IChzdHJ1Y3QgcmdiICopCi0JCQkJKCBmcmFtZS0+ZGF0YSArIChjYW0tPndpZHRoKjMqZnJhbWUtPmN1cmxpbmUpKTsKLQkJLyogdy8yIGJlY2F1c2Ugd2UncmUgYWxyZWFkeSBkb2luZyAyIHBpeGVscyAqLwotCQlyZ2JMMSA9IHJnYkwwICsgKGNhbS0+d2lkdGgvMik7Ci0KLQkJZm9yICh4PTA7IHggPCBjYW0tPndpZHRoOyB4Kz0yKSB7Ci0JCQlyZ2JMMC0+ciA9IGJheUwwLT5yOwotCQkJcmdiTDAtPmcgPSBiYXlMMC0+ZzsKLQkJCXJnYkwwLT5iID0gYmF5TDEtPmI7Ci0KLQkJCXJnYkwwLT5yMiA9IGJheUwwLT5yOwotCQkJcmdiTDAtPmcyID0gYmF5TDEtPmc7Ci0JCQlyZ2JMMC0+YjIgPSBiYXlMMS0+YjsKLQotCQkJcmdiTDEtPnIgPSBiYXlMMC0+cjsKLQkJCXJnYkwxLT5nID0gYmF5TDEtPmc7Ci0JCQlyZ2JMMS0+YiA9IGJheUwxLT5iOwotCi0JCQlyZ2JMMS0+cjIgPSBiYXlMMC0+cjsKLQkJCXJnYkwxLT5nMiA9IGJheUwxLT5nOwotCQkJcmdiTDEtPmIyID0gYmF5TDEtPmI7Ci0KLQkJCXJnYkwwKys7Ci0JCQlyZ2JMMSsrOwotCi0JCQliYXlMMCsrOwotCQkJYmF5TDErKzsKLQkJfQotCi0JCWZyYW1lLT5zZXFSZWFkX0xlbmd0aCArPSBjYW0tPndpZHRoKjMqMjsKLQkJZnJhbWUtPmN1cmxpbmUgKz0gMjsKLQl9Ci0JLyogU2VlIGlmIHdlIGZpbGxlZCB0aGUgZnJhbWUgKi8KLQlpZiAoZnJhbWUtPmN1cmxpbmUgPT0gY2FtLT5oZWlnaHQpIHsKLQkJZnJhbWUtPmZyYW1lU3RhdGUgPSBGcmFtZVN0YXRlX0RvbmVfSG9sZDsKLQkJZnJhbWUtPmN1cmxpbmUgPSAwOwotCQl1dmQtPmN1cmZyYW1lID0gLTE7Ci0JCXV2ZC0+c3RhdHMuZnJhbWVfbnVtKys7Ci0JfQotfQotCi0vKiB0YWtlbiBmcm9tIGtvbmljYXdjICovCi1zdGF0aWMgaW50IHFjbV9zZXRfdmlkZW9fbW9kZShzdHJ1Y3QgdXZkICp1dmQsIHN0cnVjdCB2aWRlb193aW5kb3cgKnZ3KQotewotCWludCByZXQ7Ci0JaW50IG5ld3NpemU7Ci0JaW50IG9sZHNpemU7Ci0JaW50IHggPSB2dy0+d2lkdGg7Ci0JaW50IHkgPSB2dy0+aGVpZ2h0OwotCXN0cnVjdCBxY20gKmNhbSA9IChzdHJ1Y3QgcWNtICopIHV2ZC0+dXNlcl9kYXRhOwotCi0JaWYgKHggPiAwICYmIHkgPiAwKSB7Ci0JCURFQlVHKDIsICJ0cnlpbmcgdG8gZmluZCBzaXplICVkLCVkIiwgeCwgeSk7Ci0JCWZvciAobmV3c2l6ZSA9IDA7IG5ld3NpemUgPD0gTUFYX0ZSQU1FX1NJWkU7IG5ld3NpemUrKykgewotCQkJaWYgKChjYW1lcmFfc2l6ZXNbbmV3c2l6ZV0ud2lkdGggPT0geCkgJiYKLQkJCQkoY2FtZXJhX3NpemVzW25ld3NpemVdLmhlaWdodCA9PSB5KSkKLQkJCQlicmVhazsKLQkJfQotCX0gZWxzZQotCQluZXdzaXplID0gY2FtLT5zaXplOwotCi0JaWYgKG5ld3NpemUgPiBNQVhfRlJBTUVfU0laRSkgewotCQlERUJVRygxLCAiY291bGRuJ3QgZmluZCBzaXplICVkLCVkIiwgeCwgeSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChuZXdzaXplID09IGNhbS0+c2l6ZSkgewotCQlERUJVRygxLCAiTm90aGluZyB0byBkbyIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlxY21fc3RvcF9kYXRhKHV2ZCk7Ci0KLQlpZiAoY2FtLT5zaXplICE9IG5ld3NpemUpIHsKLQkJb2xkc2l6ZSA9IGNhbS0+c2l6ZTsKLQkJY2FtLT5zaXplID0gbmV3c2l6ZTsKLQkJcmV0ID0gcWNtX3NldF9jYW1lcmFfc2l6ZSh1dmQpOwotCQlpZiAocmV0KSB7Ci0JCQllcnIoIkNvdWxkbid0IHNldCBjYW1lcmEgc2l6ZSwgZXJyPSVkIixyZXQpOwotCQkJLyogcmVzdG9yZSB0aGUgb3JpZ2luYWwgc2l6ZSAqLwotCQkJY2FtLT5zaXplID0gb2xkc2l6ZTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQl9Ci0KLQkvKiBGbHVzaCB0aGUgaW5wdXQgcXVldWUgYW5kIGNsZWFyIGFueSBjdXJyZW50IGZyYW1lIGluIHByb2dyZXNzICovCi0KLQlSaW5nUXVldWVfRmx1c2goJnV2ZC0+ZHApOwotCWlmICh1dmQtPmN1cmZyYW1lICE9IC0xKSB7Ci0JCXV2ZC0+ZnJhbWVbdXZkLT5jdXJmcmFtZV0uY3VybGluZSA9IDA7Ci0JCXV2ZC0+ZnJhbWVbdXZkLT5jdXJmcmFtZV0uc2VxUmVhZF9MZW5ndGggPSAwOwotCQl1dmQtPmZyYW1lW3V2ZC0+Y3VyZnJhbWVdLnNlcVJlYWRfSW5kZXggPSAwOwotCX0KLQotCUNIRUNLX1JFVChyZXQsIHFjbV9zdGFydF9kYXRhKHV2ZCkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHFjbV9jb25maWd1cmVfdmlkZW8oc3RydWN0IHV2ZCAqdXZkKQotewotCWludCByZXQ7Ci0JbWVtc2V0KCZ1dmQtPnZwaWMsIDAsIHNpemVvZih1dmQtPnZwaWMpKTsKLQltZW1zZXQoJnV2ZC0+dnBpY19vbGQsIDB4NTUsIHNpemVvZih1dmQtPnZwaWNfb2xkKSk7Ci0KLQl1dmQtPnZwaWMuY29sb3VyID0gY29sb3VyOwotCXV2ZC0+dnBpYy5odWUgPSBodWU7Ci0JdXZkLT52cGljLmJyaWdodG5lc3MgPSBicmlnaHRuZXNzOwotCXV2ZC0+dnBpYy5jb250cmFzdCA9IGNvbnRyYXN0OwotCXV2ZC0+dnBpYy53aGl0ZW5lc3MgPSB3aGl0ZW5lc3M7Ci0JdXZkLT52cGljLmRlcHRoID0gMjQ7Ci0JdXZkLT52cGljLnBhbGV0dGUgPSBWSURFT19QQUxFVFRFX1JHQjI0OwotCi0JbWVtc2V0KCZ1dmQtPnZjYXAsIDAsIHNpemVvZih1dmQtPnZjYXApKTsKLQlzdHJjcHkodXZkLT52Y2FwLm5hbWUsICJRQ00gVVNCIENhbWVyYSIpOwotCXV2ZC0+dmNhcC50eXBlID0gVklEX1RZUEVfQ0FQVFVSRTsKLQl1dmQtPnZjYXAuY2hhbm5lbHMgPSAxOwotCXV2ZC0+dmNhcC5hdWRpb3MgPSAwOwotCi0JdXZkLT52Y2FwLm1pbndpZHRoID0gY2FtZXJhX3NpemVzW1NJWkVfMTYwWDEyMF0ud2lkdGg7Ci0JdXZkLT52Y2FwLm1pbmhlaWdodCA9IGNhbWVyYV9zaXplc1tTSVpFXzE2MFgxMjBdLmhlaWdodDsKLQl1dmQtPnZjYXAubWF4d2lkdGggPSBjYW1lcmFfc2l6ZXNbU0laRV8zMjBYMjQwXS53aWR0aDsKLQl1dmQtPnZjYXAubWF4aGVpZ2h0ID0gY2FtZXJhX3NpemVzW1NJWkVfMzIwWDI0MF0uaGVpZ2h0OwotCi0JbWVtc2V0KCZ1dmQtPnZjaGFuLCAwLCBzaXplb2YodXZkLT52Y2hhbikpOwotCXV2ZC0+dmNoYW4uZmxhZ3MgPSAwIDsKLQl1dmQtPnZjaGFuLnR1bmVycyA9IDA7Ci0JdXZkLT52Y2hhbi5jaGFubmVsID0gMDsKLQl1dmQtPnZjaGFuLnR5cGUgPSBWSURFT19UWVBFX0NBTUVSQTsKLQlzdHJjcHkodXZkLT52Y2hhbi5uYW1lLCAiQ2FtZXJhIik7Ci0KLQlDSEVDS19SRVQocmV0LCBxY21fc2Vuc29yX2luaXQodXZkKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcWNtX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAotCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmRldmlkKQotewotCWludCBlcnI7Ci0Jc3RydWN0IHV2ZCAqdXZkOwotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwotCXN0cnVjdCBxY20gKmNhbTsKLQlzaXplX3QgYnVmZmVyX3NpemU7Ci0JdW5zaWduZWQgY2hhciB2aWRlb19lcDsKLQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7Ci0Jc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKLQlpbnQgaSxqOwotCXVuc2lnbmVkIGludCBpZmFjZW51bSwgaWZhY2VudW1faW5hY3Q9MDsKLQlfX2xlMTYgc2Vuc29yX2lkOwotCi0JLyogd2UgZG9uJ3Qgc3VwcG9ydCBtdWx0aWNvbmZpZyBjYW1zICovCi0JaWYgKGRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgIT0gMSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKiBmaXJzdCBjaGVjayBmb3IgdGhlIHZpZGVvIGludGVyZmFjZSBhbmQgbm90Ci0JKiB0aGUgYXVkaW8gaW50ZXJmYWNlICovCi0JaW50ZXJmYWNlID0gJmludGYtPmN1cl9hbHRzZXR0aW5nWzBdOwotCWlmICgoaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyAhPSBVU0JfQ0xBU1NfVkVORE9SX1NQRUMpCi0JCXx8IChpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZVN1YkNsYXNzICE9Ci0JCQlVU0JfQ0xBU1NfVkVORE9SX1NQRUMpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qCi0Jd2FsayB0aHJvdWdoIGVhY2ggZW5kcG9pbnQgaW4gZWFjaCBzZXR0aW5nIGluIHRoZSBpbnRlcmZhY2UKLQlzdG9wIHdoZW4gd2UgZmluZCB0aGUgb25lIHRoYXQncyBhbiBpc29jaHJvbm91cyBJTiBlbmRwb2ludC4KLQkqLwotCWZvciAoaT0wOyBpIDwgaW50Zi0+bnVtX2FsdHNldHRpbmc7IGkrKykgewotCQlpbnRlcmZhY2UgPSAmaW50Zi0+Y3VyX2FsdHNldHRpbmdbaV07Ci0JCWlmYWNlbnVtID0gaW50ZXJmYWNlLT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nOwotCQkvKiB3YWxrIHRoZSBlbmQgcG9pbnRzICovCi0JCWZvciAoaj0wOyBqIDwgaW50ZXJmYWNlLT5kZXNjLmJOdW1FbmRwb2ludHM7IGorKykgewotCQkJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFtqXS5kZXNjOwotCi0JCQlpZiAodXNiX2VuZHBvaW50X2Rpcl9vdXQoZW5kcG9pbnQpKQotCQkJCWNvbnRpbnVlOyAvKiBub3QgaW5wdXQgdGhlbiBub3QgZ29vZCAqLwotCi0JCQlidWZmZXJfc2l6ZSA9IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSk7Ci0JCQlpZiAoIWJ1ZmZlcl9zaXplKSB7Ci0JCQkJaWZhY2VudW1faW5hY3QgPSBpZmFjZW51bTsKLQkJCQljb250aW51ZTsgLyogMCBwa3Qgc2l6ZSBpcyBub3Qgd2hhdCB3ZSB3YW50ICovCi0JCQl9Ci0KLQkJCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9pc29jKGVuZHBvaW50KSkgewotCQkJCXZpZGVvX2VwID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7Ci0JCQkJLyogYnJlYWsgb3V0IG9mIHRoZSBzZWFyY2ggKi8KLQkJCQlnb3RvIGdvb2RfdmlkZW9lcDsKLQkJCX0KLQkJfQotCX0KLQkvKiBmYWlsZWQgb3V0IHNpbmNlIG5vdGhpbmcgdXNlZnVsIHdhcyBmb3VuZCAqLwotCWVycigiTm8gc3VpdGFibGUgZW5kcG9pbnQgd2FzIGZvdW5kXG4iKTsKLQlyZXR1cm4gLUVOT0RFVjsKLQotZ29vZF92aWRlb2VwOgotCS8qIGRpc2FibGUgaXNvY2hyb25vdXMgc3RyZWFtIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlICovCi0JZXJyID0gcWNtX3N0dl9zZXRiKGRldiwgU1RWX0lTT19FTkFCTEUsIDApOwotCWlmIChlcnIgPCAwKSB7Ci0JCWVycigiRmFpbGVkIHRvIGRpc2FibGUgc2Vuc29yIHN0cmVhbSIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQkvKgotCUNoZWNrIHRoYXQgdGhpcyBpcyB0aGUgc2FtZSB1bmtub3duIHNlbnNvciB0aGF0IGlzIGtub3duIHRvIHdvcmsuIFRoaXMKLQlzZW5zb3IgaXMgc3VzcGVjdGVkIHRvIGJlIHRoZSBTVCBWVjY0MjJDMDAxLiBJJ2xsIGNoZWNrIHRoZSBzYW1lIHZhbHVlCi0JdGhhdCB0aGUgcWMtdXNiIGRyaXZlciBjaGVja3MuIFRoaXMgdmFsdWUgaXMgcHJvYmFibHkgbm90IGV2ZW4gdGhlCi0Jc2Vuc29yIElEIHNpbmNlIGl0IG1hdGNoZXMgdGhlIFVTQiBkZXYgSUQuIE9oIHdlbGwuIElmIGl0IGRvZXNuJ3QKLQltYXRjaCwgaXQncyBwcm9iYWJseSBhIGRpZmYgc2Vuc29yIHNvIGV4aXQgYW5kIGFwb2xvZ2l6ZS4KLQkqLwotCWVyciA9IHFjbV9zdHZfZ2V0dyhkZXYsIENNT1NfU0VOU09SX0lEUkVWLCAmc2Vuc29yX2lkKTsKLQlpZiAoZXJyIDwgMCkgewotCQllcnIoIkNvdWxkbid0IHJlYWQgc2Vuc29yIHZhbHVlcy4gRXJyICVkXG4iLGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCWlmIChzZW5zb3JfaWQgIT0gY3B1X3RvX2xlMTYoMHgwOEYwKSkgewotCQllcnIoIlNlbnNvciBJRCAleCAhPSAleC4gVW5zdXBwb3J0ZWQuIFNvcnJ5XG4iLAotCQkJbGUxNl90b19jcHUoc2Vuc29yX2lkKSwgKDB4MDhGMCkpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQl1dmQgPSB1c2J2aWRlb19BbGxvY2F0ZURldmljZShjYW1zKTsKLQlpZiAoIXV2ZCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQljYW0gPSAoc3RydWN0IHFjbSAqKSB1dmQtPnVzZXJfZGF0YTsKLQotCS8qIGJ1ZiBmb3IgZG9pbmcgZGVtb3NhaWNpbmcgKi8KLQljYW0tPnNjcmF0Y2ggPSBrbWFsbG9jKDMyNCoyLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNhbS0+c2NyYXRjaCkgLyogdXZkIGZyZWVkIGluIGRlcmVnICovCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogeWVzLCBpZiB3ZSBmYWlsIGFmdGVyIGhlcmUsIGNhbS0+c2NyYXRjaCBnZXRzIGZyZWVkCi0JYnkgcWNtX2ZyZWVfdXZkICovCi0KLQllcnIgPSBxY21fYWxsb2NfaW50X3VyYihjYW0pOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JLyogeWVzLCBpZiB3ZSBmYWlsIGFmdGVyIGhlcmUsIGludCB1cmIgZ2V0cyBmcmVlZAotCWJ5IHFjbV9mcmVlX3V2ZCAqLwotCi0JUkVTVFJJQ1RfVE9fUkFOR0Uoc2l6ZSwgU0laRV8xNjBYMTIwLCBTSVpFXzMyMFgyNDApOwotCWNhbS0+d2lkdGggPSBjYW1lcmFfc2l6ZXNbc2l6ZV0ud2lkdGg7Ci0JY2FtLT5oZWlnaHQgPSBjYW1lcmFfc2l6ZXNbc2l6ZV0uaGVpZ2h0OwotCWNhbS0+c2l6ZSA9IHNpemU7Ci0KLQl1dmQtPmRlYnVnID0gZGVidWc7Ci0JdXZkLT5mbGFncyA9IDA7Ci0JdXZkLT5kZXYgPSBkZXY7Ci0JdXZkLT5pZmFjZSA9IGludGYtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKLQl1dmQtPmlmYWNlQWx0QWN0aXZlID0gaWZhY2VudW07Ci0JdXZkLT5pZmFjZUFsdEluYWN0aXZlID0gaWZhY2VudW1faW5hY3Q7Ci0JdXZkLT52aWRlb19lbmRwID0gdmlkZW9fZXA7Ci0JdXZkLT5pc29fcGFja2V0X2xlbiA9IGJ1ZmZlcl9zaXplOwotCXV2ZC0+cGFsZXR0ZUJpdHMgPSAxTCA8PCBWSURFT19QQUxFVFRFX1JHQjI0OwotCXV2ZC0+ZGVmYXVsdFBhbGV0dGUgPSBWSURFT19QQUxFVFRFX1JHQjI0OwotCXV2ZC0+Y2FudmFzID0gVklERU9TSVpFKDMyMCwgMjQwKTsKLQl1dmQtPnZpZGVvc2l6ZSA9IFZJREVPU0laRShjYW0tPndpZHRoLCBjYW0tPmhlaWdodCk7Ci0JZXJyID0gcWNtX2NvbmZpZ3VyZV92aWRlbyh1dmQpOwotCWlmIChlcnIpIHsKLQkJZXJyKCJmYWlsZWQgdG8gY29uZmlndXJlIHZpZGVvIHNldHRpbmdzIik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JZXJyID0gdXNidmlkZW9fUmVnaXN0ZXJWaWRlb0RldmljZSh1dmQpOwotCWlmIChlcnIpIHsgLyogdGhlIHV2ZCBnZXRzIGZyZWVkIGluIERlcmVnaXN0ZXIgKi8KLQkJZXJyKCJ1c2J2aWRlb19SZWdpc3RlclZpZGVvRGV2aWNlKCkgZmFpbGVkLiIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCXV2ZC0+bWF4X2ZyYW1lX3NpemUgPSAoMzIwICogMjQwICogMyk7Ci0JcWNtX3JlZ2lzdGVyX2lucHV0KGNhbSwgZGV2KTsKLQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHV2ZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHFjbV9mcmVlX3V2ZChzdHJ1Y3QgdXZkICp1dmQpCi17Ci0Jc3RydWN0IHFjbSAqY2FtID0gKHN0cnVjdCBxY20gKikgdXZkLT51c2VyX2RhdGE7Ci0KLQlrZnJlZShjYW0tPnNjcmF0Y2gpOwotCXFjbV91bnJlZ2lzdGVyX2lucHV0KGNhbSk7Ci0JcWNtX2ZyZWVfaW50KGNhbSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNidmlkZW9fY2IgcWNtX2RyaXZlciA9IHsKLQkucHJvYmUgPSAJCXFjbV9wcm9iZSwKLQkuc2V0dXBPbk9wZW4gPSAJCXFjbV9zZXR1cF9vbl9vcGVuLAotCS5wcm9jZXNzRGF0YSA9IAkJcWNtX3Byb2Nlc3NfaXNvYywKLQkuc2V0VmlkZW9Nb2RlID0gCXFjbV9zZXRfdmlkZW9fbW9kZSwKLQkuc3RhcnREYXRhUHVtcCA9IAlxY21fc3RhcnRfZGF0YSwKLQkuc3RvcERhdGFQdW1wID0gCXFjbV9zdG9wX2RhdGEsCi0JLmFkanVzdFBpY3R1cmUgPSAJcWNtX2FkanVzdF9waWN0dXJlLAotCS51c2VyRnJlZSA9IAkJcWNtX2ZyZWVfdXZkCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBxY21faW5pdCh2b2lkKQotewotCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKLQkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7Ci0KLQlyZXR1cm4gdXNidmlkZW9fcmVnaXN0ZXIoCi0JCSZjYW1zLAotCQlNQVhfQ0FNRVJBUywKLQkJc2l6ZW9mKHN0cnVjdCBxY20pLAotCQkiUUNNIiwKLQkJJnFjbV9kcml2ZXIsCi0JCVRISVNfTU9EVUxFLAotCQlxY21fdGFibGUpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgcWNtX2V4aXQodm9pZCkKLXsKLQl1c2J2aWRlb19EZXJlZ2lzdGVyKCZjYW1zKTsKLX0KLQotbW9kdWxlX3BhcmFtKHNpemUsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHNpemUsICJJbml0aWFsIFNpemUgMDogMTYweDEyMCAxOiAzMjB4MjQwIik7Ci1tb2R1bGVfcGFyYW0oY29sb3VyLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhjb2xvdXIsICJJbml0aWFsIGNvbG91ciIpOwotbW9kdWxlX3BhcmFtKGh1ZSwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaHVlLCAiSW5pdGlhbCBodWUiKTsKLW1vZHVsZV9wYXJhbShicmlnaHRuZXNzLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhicmlnaHRuZXNzLCAiSW5pdGlhbCBicmlnaHRuZXNzIik7Ci1tb2R1bGVfcGFyYW0oY29udHJhc3QsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGNvbnRyYXN0LCAiSW5pdGlhbCBjb250cmFzdCIpOwotbW9kdWxlX3BhcmFtKHdoaXRlbmVzcywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0Mod2hpdGVuZXNzLCAiSW5pdGlhbCB3aGl0ZW5lc3MiKTsKLQotI2lmZGVmIENPTkZJR19VU0JfREVCVUcKLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWw6IDAtOSAoZGVmYXVsdD0wKSIpOwotI2VuZGlmCi0KLW1vZHVsZV9pbml0KHFjbV9pbml0KTsKLW1vZHVsZV9leGl0KHFjbV9leGl0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiSmF5YSBLdW1hciIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJRQ00gVVNCIENhbWVyYSIpOwotTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIlFDTSBVU0IgQ2FtZXJhIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3F1aWNrY2FtX21lc3Nlbmdlci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9xdWlja2NhbV9tZXNzZW5nZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdhY2UzOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3F1aWNrY2FtX21lc3Nlbmdlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLSNpZm5kZWYgcXVpY2tjYW1fbWVzc2VuZ2VyX2gKLSNkZWZpbmUgcXVpY2tjYW1fbWVzc2VuZ2VyX2gKLQotI2lmbmRlZiBDT05GSUdfSU5QVVQKLS8qIGlmIHdlJ3JlIG5vdCB1c2luZyBpbnB1dCB3ZSBkdW1teSBvdXQgdGhlc2UgZnVuY3Rpb25zICovCi0jZGVmaW5lIHFjbV9yZWdpc3Rlcl9pbnB1dCguLi4pCi0jZGVmaW5lIHFjbV91bnJlZ2lzdGVyX2lucHV0KC4uLikKLSNkZWZpbmUgcWNtX3JlcG9ydF9idXR0b25zdGF0KC4uLikKLSNkZWZpbmUgcWNtX3NldHVwX2lucHV0X2ludCguLi4pIDAKLSNkZWZpbmUgcWNtX3N0b3BfaW50X2RhdGEoLi4uKQotI2RlZmluZSBxY21fYWxsb2NfaW50X3VyYiguLi4pIDAKLSNkZWZpbmUgcWNtX2ZyZWVfaW50KC4uLikKLSNlbmRpZgotCi0KLSNkZWZpbmUgQ0hFQ0tfUkVUKHJldCwgZXhwcikgXAotCWlmICgocmV0ID0gZXhwcikgPCAwKSByZXR1cm4gcmV0Ci0KLS8qIENvbnRyb2wgUmVnaXN0ZXJzIGZvciB0aGUgU1RWVjY0MjIgQVNJQwotICogLSB0aGlzIGRlZmluZSBpcyB0YWtlbiBmcm9tIHRoZSBxYy11c2ItbWVzc2VuZ2VyIGNvZGUKLSAqLwotI2RlZmluZSBTVFZfSVNPX0VOQUJMRQkJMHgxNDQwCi0jZGVmaW5lIElTT0NfUEFDS0VUX1NJWkUJMTAyMwotCi0vKiBDaGlwIGlkZW50aWZpY2F0aW9uIG51bWJlciBpbmNsdWRpbmcgcmV2aXNpb24gaW5kaWNhdG9yICovCi0jZGVmaW5lIENNT1NfU0VOU09SX0lEUkVWCTB4RTAwQQotCi1zdHJ1Y3QgcmdiIHsKLQl1OCBiOwotCXU4IGc7Ci0JdTggcjsKLQl1OCBiMjsKLQl1OCBnMjsKLQl1OCByMjsKLX07Ci0KLXN0cnVjdCBiYXlMMCB7Ci0JdTggZzsKLQl1OCByOwotfTsKLQotc3RydWN0IGJheUwxIHsKLQl1OCBiOwotCXU4IGc7Ci19OwotCi1zdHJ1Y3QgY2FtX3NpemUgewotCXUxNgl3aWR0aDsKLQl1MTYJaGVpZ2h0OwotCXU4CWNtZDsKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2FtX3NpemUgY2FtZXJhX3NpemVzW10gPSB7Ci0JeyAxNjAsIDEyMCwgMHhmIH0sCi0JeyAzMjAsIDI0MCwgMHgyIH0sCi19OwotCi1lbnVtIGZyYW1lX3NpemVzIHsKLQlTSVpFXzE2MFgxMjAJPSAwLAotCVNJWkVfMzIwWDI0MAk9IDEsCi19OwotCi0jZGVmaW5lIE1BWF9GUkFNRV9TSVpFIFNJWkVfMzIwWDI0MAotCi1zdHJ1Y3QgcWNtIHsKLQl1MTYgY29sb3VyOwotCXUxNiBodWU7Ci0JdTE2IGJyaWdodG5lc3M7Ci0JdTE2IGNvbnRyYXN0OwotCXUxNiB3aGl0ZW5lc3M7Ci0KLQl1OCBzaXplOwotCWludCBoZWlnaHQ7Ci0JaW50IHdpZHRoOwotCXU4ICpzY3JhdGNoOwotCXN0cnVjdCB1cmIgKmJ1dHRvbl91cmI7Ci0JdTggYnV0dG9uX3N0czsKLQl1OCBidXR0b25fc3RzX2J1ZjsKLQotI2lmZGVmIENPTkZJR19JTlBVVAotCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OwotCWNoYXIgaW5wdXRfcGh5c25hbWVbNjRdOwotI2VuZGlmCi19OwotCi1zdHJ1Y3QgcmVndmFsIHsKLQl1MTYgcmVnOwotCXU4IHZhbDsKLX07Ci0vKiB0aGlzIHRhYmxlIGlzIGRlcml2ZWQgZnJvbSB0aGUKLXFjLXVzYi1tZXNzZW5nZXIgY29kZSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCByZWd2YWwgcmVndmFsX3RhYmxlW10gPSB7Ci0JeyBTVFZfSVNPX0VOQUJMRSwgMHgwMCB9LAotCXsgMHgxNDM2LCAweDAwIH0sIHsgMHgxNDMyLCAweDAzIH0sCi0JeyAweDE0M2EsIDB4RjkgfSwgeyAweDA1MDksIDB4MzggfSwKLQl7IDB4MDUwYSwgMHgzOCB9LCB7IDB4MDUwYiwgMHgzOCB9LAotCXsgMHgwNTBjLCAweDJBIH0sIHsgMHgwNTBkLCAweDAxIH0sCi0JeyAweDE0MzEsIDB4MDAgfSwgeyAweDE0MzMsIDB4MzQgfSwKLQl7IDB4MTQzOCwgMHgxOCB9LCB7IDB4MTQzOSwgMHgwMCB9LAotCXsgMHgxNDNiLCAweDA1IH0sIHsgMHgxNDNjLCAweDAwIH0sCi0JeyAweDE0M2UsIDB4MDEgfSwgeyAweDE0M2QsIDB4MDAgfSwKLQl7IDB4MTQ0MiwgMHhlMiB9LCB7IDB4MTUwMCwgMHhkMCB9LAotCXsgMHgxNTAwLCAweGQwIH0sIHsgMHgxNTAwLCAweDUwIH0sCi0JeyAweDE1MDEsIDB4YWYgfSwgeyAweDE1MDIsIDB4YzIgfSwKLQl7IDB4MTUwMywgMHg0NSB9LCB7IDB4MTUwNSwgMHgwMiB9LAotCXsgMHgxNTBlLCAweDhlIH0sIHsgMHgxNTBmLCAweDM3IH0sCi0JeyAweDE1YzAsIDB4MDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1hcmtlcltdID0geyAweDAwLCAweGZmLCAweDAwLCAweEZGIH07Ci0KLSNlbmRpZiAvKiBxdWlja2NhbV9tZXNzZW5nZXJfaCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby92aWNhbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby92aWNhbS5jCmluZGV4IDYwMzA0MTAuLjVkNmZkMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdmljYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3ZpY2FtLmMKQEAgLTIsNyArMiw3IEBACiAgKiBVU0IgVmlDYW0gV2ViQ2FtIGRyaXZlcgogICogQ29weXJpZ2h0IChjKSAyMDAyIEpvZSBCdXJrcyAoamJ1cmtzQHdhdmljbGUub3JnKSwKICAqICAgICAgICAgICAgICAgICAgICBDaHJpc3RvcGhlciBMIENoZW5leSAoY2NoZW5leUBjaGVuZXkuY3gpLAotICogICAgICAgICAgICAgICAgICAgIFBhdmVsIE1hY2hlayAocGF2ZWxAc3VzZS5jeiksCisgKiAgICAgICAgICAgICAgICAgICAgUGF2ZWwgTWFjaGVrIChwYXZlbEB1Y3cuY3opLAogICogICAgICAgICAgICAgICAgICAgIEpvaG4gVHluZXIgKGp0eW5lckBjcy51Y3IuZWR1KSwKICAqICAgICAgICAgICAgICAgICAgICBNb25yb2UgV2lsbGlhbXMgKG1vbnJvZUBwb2JveC5jb20pCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMKaW5kZXggYWEwNzIwYS4uYTM1MGZhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jCkBAIC0xMjIsOCArMTIyLDggQEAKIAkJLnNlbGVjdG9yCT0gVVZDX1BVX1BPV0VSX0xJTkVfRlJFUVVFTkNZX0NPTlRST0wsCiAJCS5pbmRleAkJPSAxMCwKIAkJLnNpemUJCT0gMSwKLQkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfUkFOR0UKLQkJCQl8IFVWQ19DT05UUk9MX1JFU1RPUkUsCisJCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9TRVRfQ1VSIHwgVVZDX0NPTlRST0xfR0VUX0NVUgorCQkJCXwgVVZDX0NPTlRST0xfR0VUX0RFRiB8IFVWQ19DT05UUk9MX1JFU1RPUkUsCiAJfSwKIAl7CiAJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX1BST0NFU1NJTkcsCkBAIC02MDYsNiArNjA2LDI2IEBACiAJCS5zZXQJCT0gdXZjX2N0cmxfc2V0X3pvb20sCiAJfSwKIAl7CisJCS5pZAkJPSBWNEwyX0NJRF9QQU5fQUJTT0xVVEUsCisJCS5uYW1lCQk9ICJQYW4gKEFic29sdXRlKSIsCisJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX0NBTUVSQSwKKwkJLnNlbGVjdG9yCT0gVVZDX0NUX1BBTlRJTFRfQUJTT0xVVEVfQ09OVFJPTCwKKwkJLnNpemUJCT0gMzIsCisJCS5vZmZzZXQJCT0gMCwKKwkJLnY0bDJfdHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5kYXRhX3R5cGUJPSBVVkNfQ1RSTF9EQVRBX1RZUEVfVU5TSUdORUQsCisJfSwKKwl7CisJCS5pZAkJPSBWNEwyX0NJRF9USUxUX0FCU09MVVRFLAorCQkubmFtZQkJPSAiVGlsdCAoQWJzb2x1dGUpIiwKKwkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfQ0FNRVJBLAorCQkuc2VsZWN0b3IJPSBVVkNfQ1RfUEFOVElMVF9BQlNPTFVURV9DT05UUk9MLAorCQkuc2l6ZQkJPSAzMiwKKwkJLm9mZnNldAkJPSAzMiwKKwkJLnY0bDJfdHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5kYXRhX3R5cGUJPSBVVkNfQ1RSTF9EQVRBX1RZUEVfVU5TSUdORUQsCisJfSwKKwl7CiAJCS5pZAkJPSBWNEwyX0NJRF9QUklWQUNZLAogCQkubmFtZQkJPSAiUHJpdmFjeSIsCiAJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX0NBTUVSQSwKQEAgLTYyMyw3ICs2NDMsNyBAQAogCiBzdGF0aWMgaW5saW5lIF9fdTggKnV2Y19jdHJsX2RhdGEoc3RydWN0IHV2Y19jb250cm9sICpjdHJsLCBpbnQgaWQpCiB7Ci0JcmV0dXJuIGN0cmwtPmRhdGEgKyBpZCAqIGN0cmwtPmluZm8tPnNpemU7CisJcmV0dXJuIGN0cmwtPnV2Y19kYXRhICsgaWQgKiBjdHJsLT5pbmZvLT5zaXplOwogfQogCiBzdGF0aWMgaW5saW5lIGludCB1dmNfdGVzdF9iaXQoY29uc3QgX191OCAqZGF0YSwgaW50IGJpdCkKQEAgLTY3OCw2ICs2OTgsMTQgQEAKIAlpbnQgb2Zmc2V0ID0gbWFwcGluZy0+b2Zmc2V0OwogCV9fdTggbWFzazsKIAorCS8qIEFjY29yZGluZyB0byB0aGUgdjRsMiBzcGVjLCB3cml0aW5nIGFueSB2YWx1ZSB0byBhIGJ1dHRvbiBjb250cm9sCisJICogc2hvdWxkIHJlc3VsdCBpbiB0aGUgYWN0aW9uIGJlbG9uZ2luZyB0byB0aGUgYnV0dG9uIGNvbnRyb2wgYmVpbmcKKwkgKiB0cmlnZ2VyZWQuIFVWQyBkZXZpY2VzIGhvd2V2ZXIgd2FudCB0byBzZWUgYSAxIHdyaXR0ZW4gLT4gb3ZlcnJpZGUKKwkgKiB2YWx1ZS4KKwkgKi8KKwlpZiAobWFwcGluZy0+djRsMl90eXBlID09IFY0TDJfQ1RSTF9UWVBFX0JVVFRPTikKKwkJdmFsdWUgPSAtMTsKKwogCWRhdGEgKz0gb2Zmc2V0IC8gODsKIAlvZmZzZXQgJj0gNzsKIApAQCAtMTI2NSwxMyArMTI5MywxNSBAQAogICogQ29udHJvbCBhbmQgbWFwcGluZyBoYW5kbGluZwogICovCiAKLXN0YXRpYyB2b2lkIHV2Y19jdHJsX2FkZF9jdHJsKHN0cnVjdCB1dmNfZGV2aWNlICpkZXYsCitzdGF0aWMgaW50IHV2Y19jdHJsX2FkZF9jdHJsKHN0cnVjdCB1dmNfZGV2aWNlICpkZXYsCiAJc3RydWN0IHV2Y19jb250cm9sX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IHV2Y19lbnRpdHkgKmVudGl0eTsKIAlzdHJ1Y3QgdXZjX2NvbnRyb2wgKmN0cmwgPSBOVUxMOwotCWludCByZXQsIGZvdW5kID0gMDsKKwlpbnQgcmV0ID0gMCwgZm91bmQgPSAwOwogCXVuc2lnbmVkIGludCBpOworCXU4ICp1dmNfaW5mbzsKKwl1OCAqdXZjX2RhdGE7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudGl0eSwgJmRldi0+ZW50aXRpZXMsIGxpc3QpIHsKIAkJaWYgKCF1dmNfZW50aXR5X21hdGNoX2d1aWQoZW50aXR5LCBpbmZvLT5lbnRpdHkpKQpAQCAtMTI5MCw1NiArMTMyMCw2OSBAQAogCX0KIAogCWlmICghZm91bmQpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CisKKwl1dmNfZGF0YSA9IGttYWxsb2MoaW5mby0+c2l6ZSAqIFVWQ19DVFJMX0RBVEFfTEFTVCArIDEsIEdGUF9LRVJORUwpOworCWlmICh1dmNfZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXV2Y19pbmZvID0gdXZjX2RhdGEgKyBpbmZvLT5zaXplICogVVZDX0NUUkxfREFUQV9MQVNUOwogCiAJaWYgKFVWQ19FTlRJVFlfVFlQRShlbnRpdHkpID09IFVWQ19WQ19FWFRFTlNJT05fVU5JVCkgewogCQkvKiBDaGVjayBpZiB0aGUgZGV2aWNlIGNvbnRyb2wgaW5mb3JtYXRpb24gYW5kIGxlbmd0aCBtYXRjaAogCQkgKiB0aGUgdXNlciBzdXBwbGllZCBpbmZvcm1hdGlvbi4KIAkJICovCi0JCV9fdTMyIGZsYWdzOwotCQlfX2xlMTYgc2l6ZTsKLQkJX191OCBpbmY7Ci0KIAkJcmV0ID0gdXZjX3F1ZXJ5X2N0cmwoZGV2LCBVVkNfR0VUX0xFTiwgY3RybC0+ZW50aXR5LT5pZCwKLQkJCWRldi0+aW50Zm51bSwgaW5mby0+c2VsZWN0b3IsIChfX3U4ICopJnNpemUsIDIpOworCQkJCSAgICAgZGV2LT5pbnRmbnVtLCBpbmZvLT5zZWxlY3RvciwgdXZjX2RhdGEsIDIpOwogCQlpZiAocmV0IDwgMCkgewogCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLAogCQkJCSJHRVRfTEVOIGZhaWxlZCBvbiBjb250cm9sICVwVWwvJXUgKCVkKS5cbiIsCiAJCQkJaW5mby0+ZW50aXR5LCBpbmZvLT5zZWxlY3RvciwgcmV0KTsKLQkJCXJldHVybjsKKwkJCWdvdG8gZG9uZTsKIAkJfQogCi0JCWlmIChpbmZvLT5zaXplICE9IGxlMTZfdG9fY3B1KHNpemUpKSB7CisJCWlmIChpbmZvLT5zaXplICE9IGxlMTZfdG9fY3B1KCooX19sZTE2ICopdXZjX2RhdGEpKSB7CiAJCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsICJDb250cm9sICVwVWwvJXUgc2l6ZSAiCiAJCQkJImRvZXNuJ3QgbWF0Y2ggdXNlciBzdXBwbGllZCB2YWx1ZS5cbiIsCiAJCQkJaW5mby0+ZW50aXR5LCBpbmZvLT5zZWxlY3Rvcik7Ci0JCQlyZXR1cm47CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBkb25lOwogCQl9CiAKIAkJcmV0ID0gdXZjX3F1ZXJ5X2N0cmwoZGV2LCBVVkNfR0VUX0lORk8sIGN0cmwtPmVudGl0eS0+aWQsCi0JCQlkZXYtPmludGZudW0sIGluZm8tPnNlbGVjdG9yLCAmaW5mLCAxKTsKKwkJCQkgICAgIGRldi0+aW50Zm51bSwgaW5mby0+c2VsZWN0b3IsIHV2Y19pbmZvLCAxKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwKIAkJCQkiR0VUX0lORk8gZmFpbGVkIG9uIGNvbnRyb2wgJXBVbC8ldSAoJWQpLlxuIiwKIAkJCQlpbmZvLT5lbnRpdHksIGluZm8tPnNlbGVjdG9yLCByZXQpOwotCQkJcmV0dXJuOworCQkJZ290byBkb25lOwogCQl9CiAKLQkJZmxhZ3MgPSBpbmZvLT5mbGFnczsKLQkJaWYgKCgoZmxhZ3MgJiBVVkNfQ09OVFJPTF9HRVRfQ1VSKSAmJiAhKGluZiAmICgxIDw8IDApKSkgfHwKLQkJICAgICgoZmxhZ3MgJiBVVkNfQ09OVFJPTF9TRVRfQ1VSKSAmJiAhKGluZiAmICgxIDw8IDEpKSkpIHsKKwkJaWYgKCgoaW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9HRVRfQ1VSKSAmJgorCQkgICAgISgqdXZjX2luZm8gJiBVVkNfQ09OVFJPTF9DQVBfR0VUKSkgfHwKKwkJICAgICgoaW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9TRVRfQ1VSKSAmJgorCQkgICAgISgqdXZjX2luZm8gJiBVVkNfQ09OVFJPTF9DQVBfU0VUKSkpIHsKIAkJCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwgIkNvbnRyb2wgJXBVbC8ldSBmbGFncyAiCiAJCQkJImRvbid0IG1hdGNoIHN1cHBvcnRlZCBvcGVyYXRpb25zLlxuIiwKIAkJCQlpbmZvLT5lbnRpdHksIGluZm8tPnNlbGVjdG9yKTsKLQkJCXJldHVybjsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGRvbmU7CiAJCX0KIAl9CiAKIAljdHJsLT5pbmZvID0gaW5mbzsKLQljdHJsLT5kYXRhID0ga21hbGxvYyhjdHJsLT5pbmZvLT5zaXplICogVVZDX0NUUkxfREFUQV9MQVNULCBHRlBfS0VSTkVMKTsKKwljdHJsLT51dmNfZGF0YSA9IHV2Y19kYXRhOworCWN0cmwtPnV2Y19pbmZvID0gdXZjX2luZm87CisKIAl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsICJBZGRlZCBjb250cm9sICVwVWwvJXUgdG8gZGV2aWNlICVzICIKIAkJImVudGl0eSAldVxuIiwgY3RybC0+aW5mby0+ZW50aXR5LCBjdHJsLT5pbmZvLT5zZWxlY3RvciwKIAkJZGV2LT51ZGV2LT5kZXZwYXRoLCBlbnRpdHktPmlkKTsKKworZG9uZToKKwlpZiAocmV0IDwgMCkKKwkJa2ZyZWUodXZjX2RhdGEpOworCisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTE1NzIsMTIgKzE2MTUsMzQgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50aXR5LCAmZGV2LT5lbnRpdGllcywgbGlzdCkgewogCQlmb3IgKGkgPSAwOyBpIDwgZW50aXR5LT5uY29udHJvbHM7ICsraSkKLQkJCWtmcmVlKGVudGl0eS0+Y29udHJvbHNbaV0uZGF0YSk7CisJCQlrZnJlZShlbnRpdHktPmNvbnRyb2xzW2ldLnV2Y19kYXRhKTsKIAogCQlrZnJlZShlbnRpdHktPmNvbnRyb2xzKTsKIAl9CiB9CiAKK3ZvaWQgdXZjX2N0cmxfY2xlYW51cCh2b2lkKQoreworCXN0cnVjdCB1dmNfY29udHJvbF9pbmZvICppbmZvOworCXN0cnVjdCB1dmNfY29udHJvbF9pbmZvICpuaTsKKwlzdHJ1Y3QgdXZjX2NvbnRyb2xfbWFwcGluZyAqbWFwcGluZzsKKwlzdHJ1Y3QgdXZjX2NvbnRyb2xfbWFwcGluZyAqbm07CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaW5mbywgbmksICZ1dmNfZHJpdmVyLmNvbnRyb2xzLCBsaXN0KSB7CisJCWlmICghKGluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfRVhURU5TSU9OKSkKKwkJCWNvbnRpbnVlOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtYXBwaW5nLCBubSwgJmluZm8tPm1hcHBpbmdzLCBsaXN0KSB7CisJCQlsaXN0X2RlbCgmbWFwcGluZy0+bGlzdCk7CisJCQlrZnJlZShtYXBwaW5nLT5tZW51X2luZm8pOworCQkJa2ZyZWUobWFwcGluZyk7CisJCX0KKworCQlsaXN0X2RlbCgmaW5mby0+bGlzdCk7CisJCWtmcmVlKGluZm8pOworCX0KK30KKwogdm9pZCB1dmNfY3RybF9pbml0KHZvaWQpCiB7CiAJc3RydWN0IHV2Y19jb250cm9sX2luZm8gKmN0cmwgPSB1dmNfY3RybHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfZHJpdmVyLmMKaW5kZXggODM4YjU2Zi4uN2VhZjk5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19kcml2ZXIuYwpAQCAtNjM3LDE0ICs2MzcsMTMgQEAKIAl9CiAJc3RyZWFtaW5nLT5oZWFkZXIuYkNvbnRyb2xTaXplID0gbjsKIAotCXN0cmVhbWluZy0+aGVhZGVyLmJtYUNvbnRyb2xzID0ga21hbGxvYyhwKm4sIEdGUF9LRVJORUwpOworCXN0cmVhbWluZy0+aGVhZGVyLmJtYUNvbnRyb2xzID0ga21lbWR1cCgmYnVmZmVyW3NpemVdLCBwICogbiwKKwkJCQkJCUdGUF9LRVJORUwpOwogCWlmIChzdHJlYW1pbmctPmhlYWRlci5ibWFDb250cm9scyA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JbWVtY3B5KHN0cmVhbWluZy0+aGVhZGVyLmJtYUNvbnRyb2xzLCAmYnVmZmVyW3NpemVdLCBwKm4pOwotCiAJYnVmbGVuIC09IGJ1ZmZlclswXTsKIAlidWZmZXIgKz0gYnVmZmVyWzBdOwogCkBAIC0yMTc0LDYgKzIxNzMsMTUgQEAKIAkgIC5iSW50ZXJmYWNlU3ViQ2xhc3MJPSAxLAogCSAgLmJJbnRlcmZhY2VQcm90b2NvbAk9IDAsCiAJICAuZHJpdmVyX2luZm8JCT0gVVZDX1FVSVJLX1BST0JFX0VYVFJBRklFTERTIH0sCisJLyogTWFudGEgTU0tMzUzIFBsYWtvICovCisJeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKKwkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCisJICAuaWRWZW5kb3IJCT0gMHgxOGVjLAorCSAgLmlkUHJvZHVjdAkJPSAweDMxODgsCisJICAuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX1ZJREVPLAorCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCisJICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKKwkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfUFJPQkVfTUlOTUFYIH0sCiAJLyogRlNDIFdlYkNhbSBWMzBTICovCiAJeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKIAkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCkBAIC0yMjYxLDYgKzIyNjksNyBAQAogc3RhdGljIHZvaWQgX19leGl0IHV2Y19jbGVhbnVwKHZvaWQpCiB7CiAJdXNiX2RlcmVnaXN0ZXIoJnV2Y19kcml2ZXIuZHJpdmVyKTsKKwl1dmNfY3RybF9jbGVhbnVwKCk7CiB9CiAKIG1vZHVsZV9pbml0KHV2Y19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jCmluZGV4IDdjOWFiMjkuLjg2ZGIzMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYwpAQCAtMjksNiArMjksNzEgQEAKICNpbmNsdWRlICJ1dmN2aWRlby5oIgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVWQyBpb2N0bHMKKyAqLworc3RhdGljIGludCB1dmNfaW9jdGxfY3RybF9tYXAoc3RydWN0IHV2Y194dV9jb250cm9sX21hcHBpbmcgKnhtYXAsIGludCBvbGQpCit7CisJc3RydWN0IHV2Y19jb250cm9sX21hcHBpbmcgKm1hcDsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwlpbnQgcmV0OworCisJbWFwID0ga3phbGxvYyhzaXplb2YgKm1hcCwgR0ZQX0tFUk5FTCk7CisJaWYgKG1hcCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1hcC0+aWQgPSB4bWFwLT5pZDsKKwltZW1jcHkobWFwLT5uYW1lLCB4bWFwLT5uYW1lLCBzaXplb2YgbWFwLT5uYW1lKTsKKwltZW1jcHkobWFwLT5lbnRpdHksIHhtYXAtPmVudGl0eSwgc2l6ZW9mIG1hcC0+ZW50aXR5KTsKKwltYXAtPnNlbGVjdG9yID0geG1hcC0+c2VsZWN0b3I7CisJbWFwLT5zaXplID0geG1hcC0+c2l6ZTsKKwltYXAtPm9mZnNldCA9IHhtYXAtPm9mZnNldDsKKwltYXAtPnY0bDJfdHlwZSA9IHhtYXAtPnY0bDJfdHlwZTsKKwltYXAtPmRhdGFfdHlwZSA9IHhtYXAtPmRhdGFfdHlwZTsKKworCXN3aXRjaCAoeG1hcC0+djRsMl90eXBlKSB7CisJY2FzZSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOgorCWNhc2UgVjRMMl9DVFJMX1RZUEVfQk9PTEVBTjoKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX0JVVFRPTjoKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX01FTlU6CisJCWlmIChvbGQpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlzaXplID0geG1hcC0+bWVudV9jb3VudCAqIHNpemVvZigqbWFwLT5tZW51X2luZm8pOworCQltYXAtPm1lbnVfaW5mbyA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmIChtYXAtPm1lbnVfaW5mbyA9PSBOVUxMKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBkb25lOworCQl9CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKG1hcC0+bWVudV9pbmZvLCB4bWFwLT5tZW51X2luZm8sIHNpemUpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBkb25lOworCQl9CisKKwkJbWFwLT5tZW51X2NvdW50ID0geG1hcC0+bWVudV9jb3VudDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGRvbmU7CisJfQorCisJcmV0ID0gdXZjX2N0cmxfYWRkX21hcHBpbmcobWFwKTsKKworZG9uZToKKwlpZiAocmV0IDwgMCkgeworCQlrZnJlZShtYXAtPm1lbnVfaW5mbyk7CisJCWtmcmVlKG1hcCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBWNEwyIGludGVyZmFjZQogICovCiAKQEAgLTQ1MSw3ICs1MTYsNyBAQAogCiBzdGF0aWMgaW50IHV2Y192NGwyX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IHV2Y19maCAqaGFuZGxlID0gKHN0cnVjdCB1dmNfZmggKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHV2Y19maCAqaGFuZGxlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB1dmNfc3RyZWFtaW5nICpzdHJlYW0gPSBoYW5kbGUtPnN0cmVhbTsKIAogCXV2Y190cmFjZShVVkNfVFJBQ0VfQ0FMTFMsICJ1dmNfdjRsMl9yZWxlYXNlXG4iKTsKQEAgLTQ4Miw3ICs1NDcsNyBAQAogc3RhdGljIGxvbmcgdXZjX3Y0bDJfZG9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXZjX2ZoICpoYW5kbGUgPSAoc3RydWN0IHV2Y19maCAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdXZjX2ZoICpoYW5kbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHV2Y192aWRlb19jaGFpbiAqY2hhaW4gPSBoYW5kbGUtPmNoYWluOwogCXN0cnVjdCB1dmNfc3RyZWFtaW5nICpzdHJlYW0gPSBoYW5kbGUtPnN0cmVhbTsKIAlsb25nIHJldCA9IDA7CkBAIC05NjMsNiArMTAyOCw5IEBACiAJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJCXJldHVybiAtRVBFUk07CiAKKwkJaWYgKHhpbmZvLT5zaXplID09IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwogCQlpbmZvID0ga3phbGxvYyhzaXplb2YgKmluZm8sIEdGUF9LRVJORUwpOwogCQlpZiAoaW5mbyA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07CkBAIC05NzQsNyArMTA0Miw4IEBACiAJCWluZm8tPmZsYWdzID0geGluZm8tPmZsYWdzOwogCiAJCWluZm8tPmZsYWdzIHw9IFVWQ19DT05UUk9MX0dFVF9NSU4gfCBVVkNfQ09OVFJPTF9HRVRfTUFYIHwKLQkJCQlVVkNfQ09OVFJPTF9HRVRfUkVTIHwgVVZDX0NPTlRST0xfR0VUX0RFRjsKKwkJCSAgICAgICBVVkNfQ09OVFJPTF9HRVRfUkVTIHwgVVZDX0NPTlRST0xfR0VUX0RFRiB8CisJCQkgICAgICAgVVZDX0NPTlRST0xfRVhURU5TSU9OOwogCiAJCXJldCA9IHV2Y19jdHJsX2FkZF9pbmZvKGluZm8pOwogCQlpZiAocmV0IDwgMCkKQEAgLTk4MiwzMiArMTA1MSwxMiBAQAogCQlicmVhazsKIAl9CiAKKwljYXNlIFVWQ0lPQ19DVFJMX01BUF9PTEQ6CiAJY2FzZSBVVkNJT0NfQ1RSTF9NQVA6Ci0JewotCQlzdHJ1Y3QgdXZjX3h1X2NvbnRyb2xfbWFwcGluZyAqeG1hcCA9IGFyZzsKLQkJc3RydWN0IHV2Y19jb250cm9sX21hcHBpbmcgKm1hcDsKLQogCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCQlyZXR1cm4gLUVQRVJNOwogCi0JCW1hcCA9IGt6YWxsb2Moc2l6ZW9mICptYXAsIEdGUF9LRVJORUwpOwotCQlpZiAobWFwID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQltYXAtPmlkID0geG1hcC0+aWQ7Ci0JCW1lbWNweShtYXAtPm5hbWUsIHhtYXAtPm5hbWUsIHNpemVvZiBtYXAtPm5hbWUpOwotCQltZW1jcHkobWFwLT5lbnRpdHksIHhtYXAtPmVudGl0eSwgc2l6ZW9mIG1hcC0+ZW50aXR5KTsKLQkJbWFwLT5zZWxlY3RvciA9IHhtYXAtPnNlbGVjdG9yOwotCQltYXAtPnNpemUgPSB4bWFwLT5zaXplOwotCQltYXAtPm9mZnNldCA9IHhtYXAtPm9mZnNldDsKLQkJbWFwLT52NGwyX3R5cGUgPSB4bWFwLT52NGwyX3R5cGU7Ci0JCW1hcC0+ZGF0YV90eXBlID0geG1hcC0+ZGF0YV90eXBlOwotCi0JCXJldCA9IHV2Y19jdHJsX2FkZF9tYXBwaW5nKG1hcCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJa2ZyZWUobWFwKTsKLQkJYnJlYWs7Ci0JfQorCQlyZXR1cm4gdXZjX2lvY3RsX2N0cmxfbWFwKGFyZywgY21kID09IFVWQ0lPQ19DVFJMX01BUF9PTEQpOwogCiAJY2FzZSBVVkNJT0NfQ1RSTF9HRVQ6CiAJCXJldHVybiB1dmNfeHVfY3RybF9xdWVyeShjaGFpbiwgYXJnLCAwKTsKQEAgLTEwNjcsNyArMTExNiw3IEBACiAKIHN0YXRpYyBpbnQgdXZjX3Y0bDJfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7Ci0Jc3RydWN0IHV2Y19maCAqaGFuZGxlID0gKHN0cnVjdCB1dmNfZmggKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHV2Y19maCAqaGFuZGxlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB1dmNfc3RyZWFtaW5nICpzdHJlYW0gPSBoYW5kbGUtPnN0cmVhbTsKIAlzdHJ1Y3QgdXZjX3ZpZGVvX3F1ZXVlICpxdWV1ZSA9ICZzdHJlYW0tPnF1ZXVlOwogCXN0cnVjdCB1dmNfYnVmZmVyICp1bmluaXRpYWxpemVkX3ZhcihidWZmZXIpOwpAQCAtMTEyMiw3ICsxMTcxLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCB1dmNfdjRsMl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQogewotCXN0cnVjdCB1dmNfZmggKmhhbmRsZSA9IChzdHJ1Y3QgdXZjX2ZoICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1dmNfZmggKmhhbmRsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgdXZjX3N0cmVhbWluZyAqc3RyZWFtID0gaGFuZGxlLT5zdHJlYW07CiAKIAl1dmNfdHJhY2UoVVZDX1RSQUNFX0NBTExTLCAidXZjX3Y0bDJfcG9sbFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmN2aWRlby5oIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjdmlkZW8uaAppbmRleCBkMWY4ODQwLi5hYzI3MjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmN2aWRlby5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y3ZpZGVvLmgKQEAgLTI3LDYgKzI3LDggQEAKICNkZWZpbmUgVVZDX0NPTlRST0xfUkVTVE9SRQkoMSA8PCA2KQogLyogQ29udHJvbCBjYW4gYmUgdXBkYXRlZCBieSB0aGUgY2FtZXJhLiAqLwogI2RlZmluZSBVVkNfQ09OVFJPTF9BVVRPX1VQREFURQkoMSA8PCA3KQorLyogQ29udHJvbCBpcyBhbiBleHRlbnNpb24gdW5pdCBjb250cm9sLiAqLworI2RlZmluZSBVVkNfQ09OVFJPTF9FWFRFTlNJT04JKDEgPDwgOCkKIAogI2RlZmluZSBVVkNfQ09OVFJPTF9HRVRfUkFOR0UJKFVWQ19DT05UUk9MX0dFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfTUlOIHwgXAogCQkJCSBVVkNfQ09OVFJPTF9HRVRfTUFYIHwgVVZDX0NPTlRST0xfR0VUX1JFUyB8IFwKQEAgLTQwLDYgKzQyLDE1IEBACiAJX191MzIgZmxhZ3M7CiB9OwogCitzdHJ1Y3QgdXZjX21lbnVfaW5mbyB7CisJX191MzIgdmFsdWU7CisJX191OCBuYW1lWzMyXTsKK307CisKK3N0cnVjdCB1dmNfeHVfY29udHJvbF9tYXBwaW5nX29sZCB7CisJX191OCByZXNlcnZlZFs2NF07Cit9OworCiBzdHJ1Y3QgdXZjX3h1X2NvbnRyb2xfbWFwcGluZyB7CiAJX191MzIgaWQ7CiAJX191OCBuYW1lWzMyXTsKQEAgLTUwLDYgKzYxLDExIEBACiAJX191OCBvZmZzZXQ7CiAJZW51bSB2NGwyX2N0cmxfdHlwZSB2NGwyX3R5cGU7CiAJX191MzIgZGF0YV90eXBlOworCisJc3RydWN0IHV2Y19tZW51X2luZm8gX191c2VyICptZW51X2luZm87CisJX191MzIgbWVudV9jb3VudDsKKworCV9fdTMyIHJlc2VydmVkWzRdOwogfTsKIAogc3RydWN0IHV2Y194dV9jb250cm9sIHsKQEAgLTYwLDYgKzc2LDcgQEAKIH07CiAKICNkZWZpbmUgVVZDSU9DX0NUUkxfQURECQlfSU9XKCdVJywgMSwgc3RydWN0IHV2Y194dV9jb250cm9sX2luZm8pCisjZGVmaW5lIFVWQ0lPQ19DVFJMX01BUF9PTEQJX0lPV1IoJ1UnLCAyLCBzdHJ1Y3QgdXZjX3h1X2NvbnRyb2xfbWFwcGluZ19vbGQpCiAjZGVmaW5lIFVWQ0lPQ19DVFJMX01BUAkJX0lPV1IoJ1UnLCAyLCBzdHJ1Y3QgdXZjX3h1X2NvbnRyb2xfbWFwcGluZykKICNkZWZpbmUgVVZDSU9DX0NUUkxfR0VUCQlfSU9XUignVScsIDMsIHN0cnVjdCB1dmNfeHVfY29udHJvbCkKICNkZWZpbmUgVVZDSU9DX0NUUkxfU0VUCQlfSU9XKCdVJywgNCwgc3RydWN0IHV2Y194dV9jb250cm9sKQpAQCAtMTc5LDMwICsxOTYsNiBAQAogLyogVE9ETzogUHV0IHRoZSBtb3N0IGZyZXF1ZW50bHkgYWNjZXNzZWQgZmllbGRzIGF0IHRoZSBiZWdpbm5pbmcgb2YKICAqIHN0cnVjdHVyZXMgdG8gbWF4aW1pemUgY2FjaGUgZWZmaWNpZW5jeS4KICAqLwotc3RydWN0IHV2Y19zdHJlYW1pbmdfY29udHJvbCB7Ci0JX191MTYgYm1IaW50OwotCV9fdTggIGJGb3JtYXRJbmRleDsKLQlfX3U4ICBiRnJhbWVJbmRleDsKLQlfX3UzMiBkd0ZyYW1lSW50ZXJ2YWw7Ci0JX191MTYgd0tleUZyYW1lUmF0ZTsKLQlfX3UxNiB3UEZyYW1lUmF0ZTsKLQlfX3UxNiB3Q29tcFF1YWxpdHk7Ci0JX191MTYgd0NvbXBXaW5kb3dTaXplOwotCV9fdTE2IHdEZWxheTsKLQlfX3UzMiBkd01heFZpZGVvRnJhbWVTaXplOwotCV9fdTMyIGR3TWF4UGF5bG9hZFRyYW5zZmVyU2l6ZTsKLQlfX3UzMiBkd0Nsb2NrRnJlcXVlbmN5OwotCV9fdTggIGJtRnJhbWluZ0luZm87Ci0JX191OCAgYlByZWZlcmVkVmVyc2lvbjsKLQlfX3U4ICBiTWluVmVyc2lvbjsKLQlfX3U4ICBiTWF4VmVyc2lvbjsKLX07Ci0KLXN0cnVjdCB1dmNfbWVudV9pbmZvIHsKLQlfX3UzMiB2YWx1ZTsKLQlfX3U4IG5hbWVbMzJdOwotfTsKLQogc3RydWN0IHV2Y19jb250cm9sX2luZm8gewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG1hcHBpbmdzOwpAQCAtMjUwLDcgKzI0Myw4IEBACiAJICAgICBtb2RpZmllZCA6IDEsCiAJICAgICBjYWNoZWQgOiAxOwogCi0JX191OCAqZGF0YTsKKwlfX3U4ICp1dmNfZGF0YTsKKwlfX3U4ICp1dmNfaW5mbzsKIH07CiAKIHN0cnVjdCB1dmNfZm9ybWF0X2Rlc2MgewpAQCAtNjI1LDYgKzYxOSw3IEBACiBleHRlcm4gdm9pZCB1dmNfY3RybF9jbGVhbnVwX2RldmljZShzdHJ1Y3QgdXZjX2RldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgdXZjX2N0cmxfcmVzdW1lX2RldmljZShzdHJ1Y3QgdXZjX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIHV2Y19jdHJsX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCB1dmNfY3RybF9jbGVhbnVwKHZvaWQpOwogCiBleHRlcm4gaW50IHV2Y19jdHJsX2JlZ2luKHN0cnVjdCB1dmNfdmlkZW9fY2hhaW4gKmNoYWluKTsKIGV4dGVybiBpbnQgX191dmNfY3RybF9jb21taXQoc3RydWN0IHV2Y192aWRlb19jaGFpbiAqY2hhaW4sIGludCByb2xsYmFjayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tcGF0LWlvY3RsMzIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21wYXQtaW9jdGwzMi5jCmluZGV4IDkwMDRhNWYuLmQyZjIwYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21wYXQtaW9jdGwzMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21wYXQtaW9jdGwzMi5jCkBAIC01LDcgKzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk3LTIwMDAgIEpha3ViIEplbGluZWsgIChqYWt1YkByZWRoYXQuY29tKQogICogQ29weXJpZ2h0IChDKSAxOTk4ICBFZGRpZSBDLiBEb3N0ICAoZWNkQHNreW5ldC5iZSkKICAqIENvcHlyaWdodCAoQykgMjAwMSwyMDAyICBBbmRpIEtsZWVuLCBTdVNFIExhYnMKLSAqIENvcHlyaWdodCAoQykgMjAwMyAgICAgICBQYXZlbCBNYWNoZWsgKHBhdmVsQHN1c2UuY3opCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgICAgICAgUGF2ZWwgTWFjaGVrIChwYXZlbEB1Y3cuY3opCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgICAgICAgUGhpbGlwcGUgRGUgTXV5dGVyIChwaGRtQG1hY3FlbC5iZSkKICAqIENvcHlyaWdodCAoQykgMjAwOCAgICAgICBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2LmMKaW5kZXggMGNhN2VjOS4uOWU4OWJmNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2LmMKQEAgLTQxMCw3ICs0MTAsNyBAQAogCWludCBtaW5vcl9vZmZzZXQgPSAwOwogCWludCBtaW5vcl9jbnQgPSBWSURFT19OVU1fREVWSUNFUzsKIAljb25zdCBjaGFyICpuYW1lX2Jhc2U7Ci0Jdm9pZCAqcHJpdiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworCXZvaWQgKnByaXYgPSB2ZGV2LT5kZXYucDsKIAogCS8qIEEgbWlub3IgdmFsdWUgb2YgLTEgbWFya3MgdGhpcyB2aWRlbyBkZXZpY2UgYXMgbmV2ZXIKIAkgICBoYXZpbmcgYmVlbiByZWdpc3RlcmVkICovCkBAIC01MzYsOSArNTM2LDkgQEAKIAogCS8qIFBhcnQgNDogcmVnaXN0ZXIgdGhlIGRldmljZSB3aXRoIHN5c2ZzICovCiAJbWVtc2V0KCZ2ZGV2LT5kZXYsIDAsIHNpemVvZih2ZGV2LT5kZXYpKTsKLQkvKiBUaGUgbWVtc2V0IGFib3ZlIGNsZWFyZWQgdGhlIGRldmljZSdzIGRydmRhdGEsIHNvCisJLyogVGhlIG1lbXNldCBhYm92ZSBjbGVhcmVkIHRoZSBkZXZpY2UncyBkZXZpY2VfcHJpdmF0ZSwgc28KIAkgICBwdXQgYmFjayB0aGUgY29weSB3ZSBtYWRlIGVhcmxpZXIuICovCi0JdmlkZW9fc2V0X2RydmRhdGEodmRldiwgcHJpdik7CisJdmRldi0+ZGV2LnAgPSBwcml2OwogCXZkZXYtPmRldi5jbGFzcyA9ICZ2aWRlb19jbGFzczsKIAl2ZGV2LT5kZXYuZGV2dCA9IE1LREVWKFZJREVPX01BSk9SLCB2ZGV2LT5taW5vcik7CiAJaWYgKHZkZXYtPnBhcmVudCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1jb3JlLmMKaW5kZXggN2QzMzc4NC4uY2UxNTk1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1jb3JlLmMKQEAgLTUyLDE4ICs1MiwxOCBAQAogI2RlZmluZSBDQUxMKHEsIGYsIGFyZy4uLikJCQkJCQlcCiAJKChxLT5pbnRfb3BzLT5mKSA/IHEtPmludF9vcHMtPmYoYXJnKSA6IDApCiAKLXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZpZGVvYnVmX2FsbG9jKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSkKK3N0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZpZGVvYnVmX2FsbG9jX3ZiKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSkKIHsKIAlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YjsKIAogCUJVR19PTihxLT5tc2l6ZSA8IHNpemVvZigqdmIpKTsKIAotCWlmICghcS0+aW50X29wcyB8fCAhcS0+aW50X29wcy0+YWxsb2MpIHsKKwlpZiAoIXEtPmludF9vcHMgfHwgIXEtPmludF9vcHMtPmFsbG9jX3ZiKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiTm8gc3BlY2lmaWMgb3BzIGRlZmluZWQhXG4iKTsKIAkJQlVHKCk7CiAJfQogCi0JdmIgPSBxLT5pbnRfb3BzLT5hbGxvYyhxLT5tc2l6ZSk7CisJdmIgPSBxLT5pbnRfb3BzLT5hbGxvY192YihxLT5tc2l6ZSk7CiAJaWYgKE5VTEwgIT0gdmIpIHsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmdmItPmRvbmUpOwogCQl2Yi0+bWFnaWMgPSBNQUdJQ19CVUZGRVI7CkBAIC03MSw3ICs3MSw3IEBACiAKIAlyZXR1cm4gdmI7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTCh2aWRlb2J1Zl9hbGxvYyk7CitFWFBPUlRfU1lNQk9MX0dQTCh2aWRlb2J1Zl9hbGxvY192Yik7CiAKICNkZWZpbmUgV0FJVE9OX0NPTkRJVElPTiAodmItPnN0YXRlICE9IFZJREVPQlVGX0FDVElWRSAmJlwKIAkJCQl2Yi0+c3RhdGUgIT0gVklERU9CVUZfUVVFVUVEKQpAQCAtMTk1LDYgKzE5NSw0NSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodmlkZW9idWZfcXVldWVfaXNfYnVzeSk7CiAKKy8qKgorICogX192aWRlb2J1Zl9mcmVlKCkgLSBmcmVlIGFsbCB0aGUgYnVmZmVycyBhbmQgdGhlaXIgY29udHJvbCBzdHJ1Y3R1cmVzCisgKgorICogVGhpcyBmdW5jdGlvbiBjYW4gb25seSBiZSBjYWxsZWQgaWYgc3RyZWFtaW5nL3JlYWRpbmcgaXMgb2ZmLCBpLmUuIG5vIGJ1ZmZlcnMKKyAqIGFyZSB1bmRlciBjb250cm9sIG9mIHRoZSBkcml2ZXIuCisgKi8KKy8qIExvY2tpbmc6IENhbGxlciBob2xkcyBxLT52Yl9sb2NrICovCitzdGF0aWMgaW50IF9fdmlkZW9idWZfZnJlZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEpCit7CisJaW50IGk7CisKKwlkcHJpbnRrKDEsICIlc1xuIiwgX19mdW5jX18pOworCWlmICghcSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocS0+c3RyZWFtaW5nIHx8IHEtPnJlYWRpbmcpIHsKKwkJZHByaW50aygxLCAiQ2Fubm90IGZyZWUgYnVmZmVycyB3aGVuIHN0cmVhbWluZyBvciByZWFkaW5nXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlNQUdJQ19DSEVDSyhxLT5pbnRfb3BzLT5tYWdpYywgTUFHSUNfUVRZUEVfT1BTKTsKKworCWZvciAoaSA9IDA7IGkgPCBWSURFT19NQVhfRlJBTUU7IGkrKykKKwkJaWYgKHEtPmJ1ZnNbaV0gJiYgcS0+YnVmc1tpXS0+bWFwKSB7CisJCQlkcHJpbnRrKDEsICJDYW5ub3QgZnJlZSBtbWFwcGVkIGJ1ZmZlcnNcbiIpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCisJZm9yIChpID0gMDsgaSA8IFZJREVPX01BWF9GUkFNRTsgaSsrKSB7CisJCWlmIChOVUxMID09IHEtPmJ1ZnNbaV0pCisJCQljb250aW51ZTsKKwkJcS0+b3BzLT5idWZfcmVsZWFzZShxLCBxLT5idWZzW2ldKTsKKwkJa2ZyZWUocS0+YnVmc1tpXSk7CisJCXEtPmJ1ZnNbaV0gPSBOVUxMOworCX0KKworCXJldHVybiAwOworfQorCiAvKiBMb2NraW5nOiBDYWxsZXIgaG9sZHMgcS0+dmJfbG9jayAqLwogdm9pZCB2aWRlb2J1Zl9xdWV1ZV9jYW5jZWwoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxKQogewpAQCAtMzA4LDM2ICszNDcsMTEgQEAKIAliLT5zZXF1ZW5jZSAgPSB2Yi0+ZmllbGRfY291bnQgPj4gMTsKIH0KIAotLyogTG9ja2luZzogQ2FsbGVyIGhvbGRzIHEtPnZiX2xvY2sgKi8KLXN0YXRpYyBpbnQgX192aWRlb2J1Zl9tbWFwX2ZyZWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxKQotewotCWludCBpOwotCi0JaWYgKCFxKQotCQlyZXR1cm4gMDsKLQotCU1BR0lDX0NIRUNLKHEtPmludF9vcHMtPm1hZ2ljLCBNQUdJQ19RVFlQRV9PUFMpOwotCi0JZm9yIChpID0gMDsgaSA8IFZJREVPX01BWF9GUkFNRTsgaSsrKQotCQlpZiAocS0+YnVmc1tpXSAmJiBxLT5idWZzW2ldLT5tYXApCi0JCQlyZXR1cm4gLUVCVVNZOwotCi0JZm9yIChpID0gMDsgaSA8IFZJREVPX01BWF9GUkFNRTsgaSsrKSB7Ci0JCWlmIChOVUxMID09IHEtPmJ1ZnNbaV0pCi0JCQljb250aW51ZTsKLQkJcS0+b3BzLT5idWZfcmVsZWFzZShxLCBxLT5idWZzW2ldKTsKLQkJa2ZyZWUocS0+YnVmc1tpXSk7Ci0JCXEtPmJ1ZnNbaV0gPSBOVUxMOwotCX0KLQotCXJldHVybiAwOwotfQotCiBpbnQgdmlkZW9idWZfbW1hcF9mcmVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSkKIHsKIAlpbnQgcmV0OwogCW11dGV4X2xvY2soJnEtPnZiX2xvY2spOwotCXJldCA9IF9fdmlkZW9idWZfbW1hcF9mcmVlKHEpOworCXJldCA9IF9fdmlkZW9idWZfZnJlZShxKTsKIAltdXRleF91bmxvY2soJnEtPnZiX2xvY2spOwogCXJldHVybiByZXQ7CiB9CkBAIC0zNTMsMTMgKzM2NywxMyBAQAogCiAJTUFHSUNfQ0hFQ0socS0+aW50X29wcy0+bWFnaWMsIE1BR0lDX1FUWVBFX09QUyk7CiAKLQllcnIgPSBfX3ZpZGVvYnVmX21tYXBfZnJlZShxKTsKKwllcnIgPSBfX3ZpZGVvYnVmX2ZyZWUocSk7CiAJaWYgKDAgIT0gZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYnVmZmVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBiY291bnQ7IGkrKykgewotCQlxLT5idWZzW2ldID0gdmlkZW9idWZfYWxsb2MocSk7CisJCXEtPmJ1ZnNbaV0gPSB2aWRlb2J1Zl9hbGxvY192YihxKTsKIAogCQlpZiAoTlVMTCA9PSBxLT5idWZzW2ldKQogCQkJYnJlYWs7CkBAIC03NjYsNyArNzgwLDcgQEAKIAlNQUdJQ19DSEVDSyhxLT5pbnRfb3BzLT5tYWdpYywgTUFHSUNfUVRZUEVfT1BTKTsKIAogCS8qIHNldHVwIHN0dWZmICovCi0JcS0+cmVhZF9idWYgPSB2aWRlb2J1Zl9hbGxvYyhxKTsKKwlxLT5yZWFkX2J1ZiA9IHZpZGVvYnVmX2FsbG9jX3ZiKHEpOwogCWlmIChOVUxMID09IHEtPnJlYWRfYnVmKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtODcxLDcgKzg4NSw3IEBACiAJaWYgKE5VTEwgPT0gcS0+cmVhZF9idWYpIHsKIAkJLyogbmVlZCB0byBjYXB0dXJlIGEgbmV3IGZyYW1lICovCiAJCXJldHZhbCA9IC1FTk9NRU07Ci0JCXEtPnJlYWRfYnVmID0gdmlkZW9idWZfYWxsb2MocSk7CisJCXEtPnJlYWRfYnVmID0gdmlkZW9idWZfYWxsb2NfdmIocSk7CiAKIAkJZHByaW50aygxLCAidmlkZW8gYWxsb2M9MHglcFxuIiwgcS0+cmVhZF9idWYpOwogCQlpZiAoTlVMTCA9PSBxLT5yZWFkX2J1ZikKQEAgLTk3MCw3ICs5ODQsNyBAQAogCWludCBpOwogCiAJdmlkZW9idWZfcXVldWVfY2FuY2VsKHEpOwotCV9fdmlkZW9idWZfbW1hcF9mcmVlKHEpOworCV9fdmlkZW9idWZfZnJlZShxKTsKIAlJTklUX0xJU1RfSEVBRCgmcS0+c3RyZWFtKTsKIAlmb3IgKGkgPSAwOyBpIDwgVklERU9fTUFYX0ZSQU1FOyBpKyspIHsKIAkJaWYgKE5VTEwgPT0gcS0+YnVmc1tpXSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLWNvbnRpZy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtY29udGlnLmMKaW5kZXggNzQ3MzBjNi4uMzcyYjg3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtY29udGlnLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtY29udGlnLmMKQEAgLTE5MCw3ICsxOTAsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICpfX3ZpZGVvYnVmX2FsbG9jKHNpemVfdCBzaXplKQorc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKl9fdmlkZW9idWZfYWxsb2NfdmIoc2l6ZV90IHNpemUpCiB7CiAJc3RydWN0IHZpZGVvYnVmX2RtYV9jb250aWdfbWVtb3J5ICptZW07CiAJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmI7CkBAIC0yODAsOCArMjgwLDYgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlidWYtPm1hcCA9IG1hcDsKLQltYXAtPnN0YXJ0ID0gdm1hLT52bV9zdGFydDsKLQltYXAtPmVuZCA9IHZtYS0+dm1fZW5kOwogCW1hcC0+cSA9IHE7CiAKIAlidWYtPmJhZGRyID0gdm1hLT52bV9zdGFydDsKQEAgLTMzOCw3ICszMzYsNyBAQAogc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdHlwZV9vcHMgcW9wcyA9IHsKIAkubWFnaWMgICAgICAgID0gTUFHSUNfUVRZUEVfT1BTLAogCi0JLmFsbG9jICAgICAgICA9IF9fdmlkZW9idWZfYWxsb2MsCisJLmFsbG9jX3ZiICAgICA9IF9fdmlkZW9idWZfYWxsb2NfdmIsCiAJLmlvbG9jayAgICAgICA9IF9fdmlkZW9idWZfaW9sb2NrLAogCS5tbWFwX21hcHBlciAgPSBfX3ZpZGVvYnVmX21tYXBfbWFwcGVyLAogCS52YWRkciAgICAgICAgPSBfX3ZpZGVvYnVmX3RvX3ZhZGRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtc2cuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLXNnLmMKaW5kZXggODM1OWU2Yi4uMDZmOWE5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtc2cuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1zZy5jCkBAIC01Nyw3ICs1NywxMyBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RydWN0IHNjYXR0ZXJsaXN0ICp2aWRlb2J1Zl92bWFsbG9jX3RvX3NnKHVuc2lnbmVkIGNoYXIgKnZpcnQsIGludCBucl9wYWdlcykKKy8qCisgKiBSZXR1cm4gYSBzY2F0dGVybGlzdCBmb3Igc29tZSBwYWdlLWFsaWduZWQgdm1hbGxvYygpJ2VkIG1lbW9yeQorICogYmxvY2sgKE5VTEwgb24gZXJyb3JzKS4gIE1lbW9yeSBmb3IgdGhlIHNjYXR0ZXJsaXN0IGlzIGFsbG9jYXRlZAorICogdXNpbmcga21hbGxvYy4gIFRoZSBjYWxsZXIgbXVzdCBmcmVlIHRoZSBtZW1vcnkuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnZpZGVvYnVmX3ZtYWxsb2NfdG9fc2codW5zaWduZWQgY2hhciAqdmlydCwKKwkJCQkJCSAgaW50IG5yX3BhZ2VzKQogewogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0OwogCXN0cnVjdCBwYWdlICpwZzsKQEAgLTgxLDEwICs4NywxNCBAQAogCXZmcmVlKHNnbGlzdCk7CiAJcmV0dXJuIE5VTEw7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTCh2aWRlb2J1Zl92bWFsbG9jX3RvX3NnKTsKIAotc3RydWN0IHNjYXR0ZXJsaXN0ICp2aWRlb2J1Zl9wYWdlc190b19zZyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnJfcGFnZXMsCi0JCQkJCSBpbnQgb2Zmc2V0KQorLyoKKyAqIFJldHVybiBhIHNjYXR0ZXJsaXN0IGZvciBhIGFuIGFycmF5IG9mIHVzZXJwYWdlcyAoTlVMTCBvbiBlcnJvcnMpLgorICogTWVtb3J5IGZvciB0aGUgc2NhdHRlcmxpc3QgaXMgYWxsb2NhdGVkIHVzaW5nIGttYWxsb2MuICBUaGUgY2FsbGVyCisgKiBtdXN0IGZyZWUgdGhlIG1lbW9yeS4KKyAqLworc3RhdGljIHN0cnVjdCBzY2F0dGVybGlzdCAqdmlkZW9idWZfcGFnZXNfdG9fc2coc3RydWN0IHBhZ2UgKipwYWdlcywKKwkJCQkJCWludCBucl9wYWdlcywgaW50IG9mZnNldCkKIHsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdDsKIAlpbnQgaTsKQEAgLTIwMSwxNyArMjExLDE3IEBACiAJZHByaW50aygxLCAiaW5pdCBrZXJuZWwgWyVkIHBhZ2VzXVxuIiwgbnJfcGFnZXMpOwogCiAJZG1hLT5kaXJlY3Rpb24gPSBkaXJlY3Rpb247Ci0JZG1hLT52bWFsbG9jID0gdm1hbGxvY18zMihucl9wYWdlcyA8PCBQQUdFX1NISUZUKTsKLQlpZiAoTlVMTCA9PSBkbWEtPnZtYWxsb2MpIHsKKwlkbWEtPnZhZGRyID0gdm1hbGxvY18zMihucl9wYWdlcyA8PCBQQUdFX1NISUZUKTsKKwlpZiAoTlVMTCA9PSBkbWEtPnZhZGRyKSB7CiAJCWRwcmludGsoMSwgInZtYWxsb2NfMzIoJWQgcGFnZXMpIGZhaWxlZFxuIiwgbnJfcGFnZXMpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlkcHJpbnRrKDEsICJ2bWFsbG9jIGlzIGF0IGFkZHIgMHglMDhseCwgc2l6ZT0lZFxuIiwKLQkJCQkodW5zaWduZWQgbG9uZylkbWEtPnZtYWxsb2MsCisJCQkJKHVuc2lnbmVkIGxvbmcpZG1hLT52YWRkciwKIAkJCQlucl9wYWdlcyA8PCBQQUdFX1NISUZUKTsKIAotCW1lbXNldChkbWEtPnZtYWxsb2MsIDAsIG5yX3BhZ2VzIDw8IFBBR0VfU0hJRlQpOworCW1lbXNldChkbWEtPnZhZGRyLCAwLCBucl9wYWdlcyA8PCBQQUdFX1NISUZUKTsKIAlkbWEtPm5yX3BhZ2VzID0gbnJfcGFnZXM7CiAKIAlyZXR1cm4gMDsKQEAgLTIzNSw3ICsyNDUsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodmlkZW9idWZfZG1hX2luaXRfb3ZlcmxheSk7CiAKLWludCB2aWRlb2J1Zl9kbWFfbWFwKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hKQoraW50IHZpZGVvYnVmX2RtYV9tYXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWEpCiB7CiAJTUFHSUNfQ0hFQ0soZG1hLT5tYWdpYywgTUFHSUNfRE1BQlVGKTsKIAlCVUdfT04oMCA9PSBkbWEtPm5yX3BhZ2VzKTsKQEAgLTI0NCw4ICsyNTQsOCBAQAogCQlkbWEtPnNnbGlzdCA9IHZpZGVvYnVmX3BhZ2VzX3RvX3NnKGRtYS0+cGFnZXMsIGRtYS0+bnJfcGFnZXMsCiAJCQkJCQkgICBkbWEtPm9mZnNldCk7CiAJfQotCWlmIChkbWEtPnZtYWxsb2MpIHsKLQkJZG1hLT5zZ2xpc3QgPSB2aWRlb2J1Zl92bWFsbG9jX3RvX3NnKGRtYS0+dm1hbGxvYywKKwlpZiAoZG1hLT52YWRkcikgeworCQlkbWEtPnNnbGlzdCA9IHZpZGVvYnVmX3ZtYWxsb2NfdG9fc2coZG1hLT52YWRkciwKIAkJCQkJCSAgICAgZG1hLT5ucl9wYWdlcyk7CiAJfQogCWlmIChkbWEtPmJ1c19hZGRyKSB7CkBAIC0yNjMsNyArMjczLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWlmICghZG1hLT5idXNfYWRkcikgewotCQlkbWEtPnNnbGVuID0gZG1hX21hcF9zZyhxLT5kZXYsIGRtYS0+c2dsaXN0LAorCQlkbWEtPnNnbGVuID0gZG1hX21hcF9zZyhkZXYsIGRtYS0+c2dsaXN0LAogCQkJCQlkbWEtPm5yX3BhZ2VzLCBkbWEtPmRpcmVjdGlvbik7CiAJCWlmICgwID09IGRtYS0+c2dsZW4pIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcKQEAgLTI3OSwxNCArMjg5LDE0IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh2aWRlb2J1Zl9kbWFfbWFwKTsKIAotaW50IHZpZGVvYnVmX2RtYV91bm1hcChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSkKK2ludCB2aWRlb2J1Zl9kbWFfdW5tYXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWEpCiB7CiAJTUFHSUNfQ0hFQ0soZG1hLT5tYWdpYywgTUFHSUNfRE1BQlVGKTsKIAogCWlmICghZG1hLT5zZ2xlbikKIAkJcmV0dXJuIDA7CiAKLQlkbWFfdW5tYXBfc2cocS0+ZGV2LCBkbWEtPnNnbGlzdCwgZG1hLT5zZ2xlbiwgZG1hLT5kaXJlY3Rpb24pOworCWRtYV91bm1hcF9zZyhkZXYsIGRtYS0+c2dsaXN0LCBkbWEtPnNnbGVuLCBkbWEtPmRpcmVjdGlvbik7CiAKIAl2ZnJlZShkbWEtPnNnbGlzdCk7CiAJZG1hLT5zZ2xpc3QgPSBOVUxMOwpAQCAtMzA5LDggKzMxOSw4IEBACiAJCWRtYS0+cGFnZXMgPSBOVUxMOwogCX0KIAotCXZmcmVlKGRtYS0+dm1hbGxvYyk7Ci0JZG1hLT52bWFsbG9jID0gTlVMTDsKKwl2ZnJlZShkbWEtPnZhZGRyKTsKKwlkbWEtPnZhZGRyID0gTlVMTDsKIAogCWlmIChkbWEtPmJ1c19hZGRyKQogCQlkbWEtPmJ1c19hZGRyID0gMDsKQEAgLTMyMiwyOCArMzMyLDYgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLWludCB2aWRlb2J1Zl9zZ19kbWFfbWFwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hKQotewotCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSBxOwotCi0JcS5kZXYgPSBkZXY7Ci0KLQlyZXR1cm4gdmlkZW9idWZfZG1hX21hcCgmcSwgZG1hKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHZpZGVvYnVmX3NnX2RtYV9tYXApOwotCi1pbnQgdmlkZW9idWZfc2dfZG1hX3VubWFwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hKQotewotCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSBxOwotCi0JcS5kZXYgPSBkZXY7Ci0KLQlyZXR1cm4gdmlkZW9idWZfZG1hX3VubWFwKCZxLCBkbWEpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwodmlkZW9idWZfc2dfZG1hX3VubWFwKTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KIHN0YXRpYyB2b2lkIHZpZGVvYnVmX3ZtX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IHZpZGVvYnVmX21hcHBpbmcgKm1hcCA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwpAQCAtNDI4LDcgKzQxNiw3IEBACiAJc3RydWN0IHZpZGVvYnVmX2RtYV9zZ19tZW1vcnkKICAqLwogCi1zdGF0aWMgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqX192aWRlb2J1Zl9hbGxvYyhzaXplX3Qgc2l6ZSkKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICpfX3ZpZGVvYnVmX2FsbG9jX3ZiKHNpemVfdCBzaXplKQogewogCXN0cnVjdCB2aWRlb2J1Zl9kbWFfc2dfbWVtb3J5ICptZW07CiAJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmI7CkBAIC00NTYsNyArNDQ0LDcgQEAKIAogCU1BR0lDX0NIRUNLKG1lbS0+bWFnaWMsIE1BR0lDX1NHX01FTSk7CiAKLQlyZXR1cm4gbWVtLT5kbWEudm1hbGxvYzsKKwlyZXR1cm4gbWVtLT5kbWEudmFkZHI7CiB9CiAKIHN0YXRpYyBpbnQgX192aWRlb2J1Zl9pb2xvY2soc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLApAQCAtNTIwLDcgKzUwOCw3IEBACiAJZGVmYXVsdDoKIAkJQlVHKCk7CiAJfQotCWVyciA9IHZpZGVvYnVmX2RtYV9tYXAocSwgJm1lbS0+ZG1hKTsKKwllcnIgPSB2aWRlb2J1Zl9kbWFfbWFwKHEtPmRldiwgJm1lbS0+ZG1hKTsKIAlpZiAoMCAhPSBlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTYyMCw4ICs2MDgsNiBAQAogCX0KIAogCW1hcC0+Y291bnQgICAgPSAxOwotCW1hcC0+c3RhcnQgICAgPSB2bWEtPnZtX3N0YXJ0OwotCW1hcC0+ZW5kICAgICAgPSB2bWEtPnZtX2VuZDsKIAltYXAtPnEgICAgICAgID0gcTsKIAl2bWEtPnZtX29wcyAgID0gJnZpZGVvYnVmX3ZtX29wczsKIAl2bWEtPnZtX2ZsYWdzIHw9IFZNX0RPTlRFWFBBTkQgfCBWTV9SRVNFUlZFRDsKQEAgLTYzOCw3ICs2MjQsNyBAQAogc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdHlwZV9vcHMgc2dfb3BzID0gewogCS5tYWdpYyAgICAgICAgPSBNQUdJQ19RVFlQRV9PUFMsCiAKLQkuYWxsb2MgICAgICAgID0gX192aWRlb2J1Zl9hbGxvYywKKwkuYWxsb2NfdmIgICAgID0gX192aWRlb2J1Zl9hbGxvY192YiwKIAkuaW9sb2NrICAgICAgID0gX192aWRlb2J1Zl9pb2xvY2ssCiAJLnN5bmMgICAgICAgICA9IF9fdmlkZW9idWZfc3luYywKIAkubW1hcF9tYXBwZXIgID0gX192aWRlb2J1Zl9tbWFwX21hcHBlciwKQEAgLTY1NCw3ICs2NDAsNyBAQAogCiAJcS5tc2l6ZSA9IHNpemU7CiAKLQlyZXR1cm4gdmlkZW9idWZfYWxsb2MoJnEpOworCXJldHVybiB2aWRlb2J1Zl9hbGxvY192YigmcSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh2aWRlb2J1Zl9zZ19hbGxvYyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtdm1hbGxvYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi12bWFsbG9jLmMKaW5kZXggNTgzNzI4Zi4uZTdmZTMxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi12bWFsbG9jLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi12bWFsbG9jLmMKQEAgLTEwMiwxMCArMTAyLDEwIEBACiAJCQkJICAgY2FsbGVkIHdpdGggSVJRJ3MgZGlzYWJsZWQKIAkJCQkgKi8KIAkJCQlkcHJpbnRrKDEsICIlczogYnVmWyVkXSBmcmVlaW5nICglcClcbiIsCi0JCQkJCV9fZnVuY19fLCBpLCBtZW0tPnZtYWxsb2MpOworCQkJCQlfX2Z1bmNfXywgaSwgbWVtLT52YWRkcik7CiAKLQkJCQl2ZnJlZShtZW0tPnZtYWxsb2MpOwotCQkJCW1lbS0+dm1hbGxvYyA9IE5VTEw7CisJCQkJdmZyZWUobWVtLT52YWRkcik7CisJCQkJbWVtLT52YWRkciA9IE5VTEw7CiAJCQl9CiAKIAkJCXEtPmJ1ZnNbaV0tPm1hcCAgID0gTlVMTDsKQEAgLTEzNSw3ICsxMzUsNyBAQAogCXN0cnVjdCB2aWRlb2J1Zl9kbWFfc2dfbWVtb3J5CiAgKi8KIAotc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKl9fdmlkZW9idWZfYWxsb2Moc2l6ZV90IHNpemUpCitzdGF0aWMgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqX192aWRlb2J1Zl9hbGxvY192YihzaXplX3Qgc2l6ZSkKIHsKIAlzdHJ1Y3QgdmlkZW9idWZfdm1hbGxvY19tZW1vcnkgKm1lbTsKIAlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YjsKQEAgLTE3MCw3ICsxNzAsNyBAQAogCQlkcHJpbnRrKDEsICIlcyBtZW1vcnkgbWV0aG9kIE1NQVBcbiIsIF9fZnVuY19fKTsKIAogCQkvKiBBbGwgaGFuZGxpbmcgc2hvdWxkIGJlIGRvbmUgYnkgX192aWRlb2J1Zl9tbWFwX21hcHBlcigpICovCi0JCWlmICghbWVtLT52bWFsbG9jKSB7CisJCWlmICghbWVtLT52YWRkcikgewogCQkJcHJpbnRrKEtFUk5fRVJSICJtZW1vcnkgaXMgbm90IGFsbG9jZWQvbW1hcHBlZC5cbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KQEAgLTE4OSwxMyArMTg5LDEzIEBACiAJCSAqIHJlYWQoKSBtZXRob2QuCiAJCSAqLwogCi0JCW1lbS0+dm1hbGxvYyA9IHZtYWxsb2NfdXNlcihwYWdlcyk7Ci0JCWlmICghbWVtLT52bWFsbG9jKSB7CisJCW1lbS0+dmFkZHIgPSB2bWFsbG9jX3VzZXIocGFnZXMpOworCQlpZiAoIW1lbS0+dmFkZHIpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAidm1hbGxvYyAoJWQgcGFnZXMpIGZhaWxlZFxuIiwgcGFnZXMpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJZHByaW50aygxLCAidm1hbGxvYyBpcyBhdCBhZGRyICVwICglZCBwYWdlcylcbiIsCi0JCQltZW0tPnZtYWxsb2MsIHBhZ2VzKTsKKwkJCW1lbS0+dmFkZHIsIHBhZ2VzKTsKIAogI2lmIDAKIAkJaW50IHJjOwpAQCAtMjQ1LDggKzI0NSw2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJYnVmLT5tYXAgPSBtYXA7Ci0JbWFwLT5zdGFydCA9IHZtYS0+dm1fc3RhcnQ7Ci0JbWFwLT5lbmQgICA9IHZtYS0+dm1fZW5kOwogCW1hcC0+cSAgICAgPSBxOwogCiAJYnVmLT5iYWRkciA9IHZtYS0+dm1fc3RhcnQ7CkBAIC0yNTYsMTggKzI1NCwxOCBAQAogCU1BR0lDX0NIRUNLKG1lbS0+bWFnaWMsIE1BR0lDX1ZNQUxfTUVNKTsKIAogCXBhZ2VzID0gUEFHRV9BTElHTih2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpOwotCW1lbS0+dm1hbGxvYyA9IHZtYWxsb2NfdXNlcihwYWdlcyk7Ci0JaWYgKCFtZW0tPnZtYWxsb2MpIHsKKwltZW0tPnZhZGRyID0gdm1hbGxvY191c2VyKHBhZ2VzKTsKKwlpZiAoIW1lbS0+dmFkZHIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ2bWFsbG9jICglZCBwYWdlcykgZmFpbGVkXG4iLCBwYWdlcyk7CiAJCWdvdG8gZXJyb3I7CiAJfQotCWRwcmludGsoMSwgInZtYWxsb2MgaXMgYXQgYWRkciAlcCAoJWQgcGFnZXMpXG4iLCBtZW0tPnZtYWxsb2MsIHBhZ2VzKTsKKwlkcHJpbnRrKDEsICJ2bWFsbG9jIGlzIGF0IGFkZHIgJXAgKCVkIHBhZ2VzKVxuIiwgbWVtLT52YWRkciwgcGFnZXMpOwogCiAJLyogVHJ5IHRvIHJlbWFwIG1lbW9yeSAqLwotCXJldHZhbCA9IHJlbWFwX3ZtYWxsb2NfcmFuZ2Uodm1hLCBtZW0tPnZtYWxsb2MsIDApOworCXJldHZhbCA9IHJlbWFwX3ZtYWxsb2NfcmFuZ2Uodm1hLCBtZW0tPnZhZGRyLCAwKTsKIAlpZiAocmV0dmFsIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIm1tYXA6IHJlbWFwIGZhaWxlZCB3aXRoIGVycm9yICVkLiAiLCByZXR2YWwpOwotCQl2ZnJlZShtZW0tPnZtYWxsb2MpOworCQl2ZnJlZShtZW0tPnZhZGRyKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTI5Myw3ICsyOTEsNyBAQAogc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdHlwZV9vcHMgcW9wcyA9IHsKIAkubWFnaWMgICAgICAgID0gTUFHSUNfUVRZUEVfT1BTLAogCi0JLmFsbG9jICAgICAgICA9IF9fdmlkZW9idWZfYWxsb2MsCisJLmFsbG9jX3ZiICAgICA9IF9fdmlkZW9idWZfYWxsb2NfdmIsCiAJLmlvbG9jayAgICAgICA9IF9fdmlkZW9idWZfaW9sb2NrLAogCS5tbWFwX21hcHBlciAgPSBfX3ZpZGVvYnVmX21tYXBfbWFwcGVyLAogCS52YWRkciAgICAgICAgPSB2aWRlb2J1Zl90b192bWFsbG9jLApAQCAtMzE5LDcgKzMxNyw3IEBACiAJQlVHX09OKCFtZW0pOwogCU1BR0lDX0NIRUNLKG1lbS0+bWFnaWMsIE1BR0lDX1ZNQUxfTUVNKTsKIAotCXJldHVybiBtZW0tPnZtYWxsb2M7CisJcmV0dXJuIG1lbS0+dmFkZHI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh2aWRlb2J1Zl90b192bWFsbG9jKTsKIApAQCAtMzQxLDggKzMzOSw4IEBACiAKIAlNQUdJQ19DSEVDSyhtZW0tPm1hZ2ljLCBNQUdJQ19WTUFMX01FTSk7CiAKLQl2ZnJlZShtZW0tPnZtYWxsb2MpOwotCW1lbS0+dm1hbGxvYyA9IE5VTEw7CisJdmZyZWUobWVtLT52YWRkcik7CisJbWVtLT52YWRkciA9IE5VTEw7CiAKIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODA3ZWVhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZi5jCisrKyAvZGV2L251bGwKQEAgLTEsMzYyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBWaWRlbzRMaW51eCBkcml2ZXIgZm9yIFc5OTZbODddQ0YgSlBFRyBVU0IgRHVhbCBNb2RlIENhbWVyYSBDaGlwLiAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+ICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAtIE1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgZnJvbSBidHR2IGRyaXZlciBieSBSYWxwaCBNZXR6bGVyLCAgICAgICAgICAgICAqCi0gKiAgIE1hcmN1cyBNZXR6bGVyIGFuZCBHZXJkIEtub3JyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAtIEkyQyBpbnRlcmZhY2UgdG8ga2VybmVsLCBoaWdoLWxldmVsIGltYWdlIHNlbnNvciBjb250cm9sIHJvdXRpbmVzIGFuZCAqCi0gKiAgIHNvbWUgc3ltYm9saWMgbmFtZXMgZnJvbSBPVjUxMSBkcml2ZXIgYnkgTWFyayBXLiBNY0NsZWxsYW5kLiAgICAgICAgICAqCi0gKiAtIExvdy1sZXZlbCBJMkMgZmFzdCB3cml0ZSBmdW5jdGlvbiBieSBQaW90ciBDemVyY3phay4gICAgICAgICAgICAgICAgICAqCi0gKiAtIExvdy1sZXZlbCBJMkMgcmVhZCBmdW5jdGlvbiBieSBGcmVkZXJpYyBKb3VhdWx0LiAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICAgICAgICAgICAqCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgva21vZC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9wYWdlLWZsYWdzLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+Ci0KLSNpbmNsdWRlICJ3OTk2OGNmLmgiCi0jaW5jbHVkZSAidzk5NjhjZl9kZWNvZGVyLmgiCi0KLXN0YXRpYyBzdHJ1Y3Qgdzk5NjhjZl92cHBfdCogdzk5NjhjZl92cHA7Ci1zdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQodzk5NjhjZl92cHBtb2Rfd2FpdCk7Ci0KLXN0YXRpYyBMSVNUX0hFQUQodzk5NjhjZl9kZXZfbGlzdCk7IC8qIGhlYWQgb2YgVjRMIHJlZ2lzdGVyZWQgY2FtZXJhcyBsaXN0ICovCi1zdGF0aWMgREVGSU5FX01VVEVYKHc5OTY4Y2ZfZGV2bGlzdF9tdXRleCk7IC8qIHNlbWFwaG9yZSBmb3IgbGlzdCB0cmF2ZXJzYWwgKi8KLQotc3RhdGljIERFQ0xBUkVfUldTRU0odzk5NjhjZl9kaXNjb25uZWN0KTsgLyogcHJldmVudCByYWNlcyB3aXRoIG9wZW4oKSAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBNb2R1bGUgbWFjcm9zIGFuZCBwYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB3aW5ib25kX2lkX3RhYmxlKTsKLQotTU9EVUxFX0FVVEhPUihXOTk2OENGX01PRFVMRV9BVVRIT1IiICJXOTk2OENGX0FVVEhPUl9FTUFJTCk7Ci1NT0RVTEVfREVTQ1JJUFRJT04oVzk5NjhDRl9NT0RVTEVfTkFNRSk7Ci1NT0RVTEVfVkVSU0lPTihXOTk2OENGX01PRFVMRV9WRVJTSU9OKTsKLU1PRFVMRV9MSUNFTlNFKFc5OTY4Q0ZfTU9EVUxFX0xJQ0VOU0UpOwotTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIlZpZGVvIik7Ci0KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzaW1jYW1zID0gVzk5NjhDRl9TSU1DQU1TOwotc3RhdGljIHNob3J0IHZpZGVvX25yW109e1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0gLTF9OyAvKi0xPWZpcnN0IGZyZWUqLwotc3RhdGljIHVuc2lnbmVkIGludCBwYWNrZXRfc2l6ZVtdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0KLQkJCQkgICAgIFc5OTY4Q0ZfUEFDS0VUX1NJWkV9Owotc3RhdGljIHVuc2lnbmVkIHNob3J0IG1heF9idWZmZXJzW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPQotCQkJCSAgICAgICBXOTk2OENGX0JVRkZFUlN9Owotc3RhdGljIGludCBkb3VibGVfYnVmZmVyW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPQotCQkJICAgICAgVzk5NjhDRl9ET1VCTEVfQlVGRkVSfTsKLXN0YXRpYyBpbnQgY2xhbXBpbmdbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IFc5OTY4Q0ZfQ0xBTVBJTkd9Owotc3RhdGljIHVuc2lnbmVkIHNob3J0IGZpbHRlcl90eXBlW109IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9Ci0JCQkJICAgICAgVzk5NjhDRl9GSUxURVJfVFlQRX07Ci1zdGF0aWMgaW50IGxhcmdldmlld1tdPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSBXOTk2OENGX0xBUkdFVklFV307Ci1zdGF0aWMgdW5zaWduZWQgc2hvcnQgZGVjb21wcmVzc2lvbltdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0KLQkJCQkJIFc5OTY4Q0ZfREVDT01QUkVTU0lPTn07Ci1zdGF0aWMgaW50IHVwc2NhbGluZ1tdPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSBXOTk2OENGX1VQU0NBTElOR307Ci1zdGF0aWMgdW5zaWduZWQgc2hvcnQgZm9yY2VfcGFsZXR0ZVtdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0gMH07Ci1zdGF0aWMgaW50IGZvcmNlX3JnYltdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0gVzk5NjhDRl9GT1JDRV9SR0J9Owotc3RhdGljIGludCBhdXRvYnJpZ2h0W10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSBXOTk2OENGX0FVVE9CUklHSFR9Owotc3RhdGljIGludCBhdXRvZXhwW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSBXOTk2OENGX0FVVE9FWFB9Owotc3RhdGljIHVuc2lnbmVkIHNob3J0IGxpZ2h0ZnJlcVtdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0KLQkJCQkgICAgIFc5OTY4Q0ZfTElHSFRGUkVRfTsKLXN0YXRpYyBpbnQgYmFuZGluZ2ZpbHRlcltdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdPQotCQkJICAgICAgVzk5NjhDRl9CQU5ESU5HRklMVEVSfTsKLXN0YXRpYyBzaG9ydCBjbG9ja2RpdltdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0gVzk5NjhDRl9DTE9DS0RJVn07Ci1zdGF0aWMgaW50IGJhY2tsaWdodFtdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0gVzk5NjhDRl9CQUNLTElHSFR9Owotc3RhdGljIGludCBtaXJyb3JbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IFc5OTY4Q0ZfTUlSUk9SfTsKLXN0YXRpYyBpbnQgbW9ub2Nocm9tZVtdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdPVc5OTY4Q0ZfTU9OT0NIUk9NRX07Ci1zdGF0aWMgdW5zaWduZWQgaW50IGJyaWdodG5lc3NbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9Ci0JCQkJICAgIFc5OTY4Q0ZfQlJJR0hUTkVTU307Ci1zdGF0aWMgdW5zaWduZWQgaW50IGh1ZVtdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0gVzk5NjhDRl9IVUV9Owotc3RhdGljIHVuc2lnbmVkIGludCBjb2xvdXJbXT17WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSBXOTk2OENGX0NPTE9VUn07Ci1zdGF0aWMgdW5zaWduZWQgaW50IGNvbnRyYXN0W10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPQotCQkJCSAgVzk5NjhDRl9DT05UUkFTVH07Ci1zdGF0aWMgdW5zaWduZWQgaW50IHdoaXRlbmVzc1tdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0KLQkJCQkgICBXOTk2OENGX1dISVRFTkVTU307Ci0jaWZkZWYgVzk5NjhDRl9ERUJVRwotc3RhdGljIHVuc2lnbmVkIHNob3J0IGRlYnVnID0gVzk5NjhDRl9ERUJVR19MRVZFTDsKLXN0YXRpYyBpbnQgc3BlY2lmaWNfZGVidWcgPSBXOTk2OENGX1NQRUNJRklDX0RFQlVHOwotI2VuZGlmCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcGFyYW1fbnZbMjRdOyAvKiBudW1iZXIgb2YgdmFsdWVzIHBlciBwYXJhbWV0ZXIgKi8KLQotbW9kdWxlX3BhcmFtKHNpbWNhbXMsIHVzaG9ydCwgMDY0NCk7Ci1tb2R1bGVfcGFyYW1fYXJyYXkodmlkZW9fbnIsIHNob3J0LCAmcGFyYW1fbnZbMF0sIDA0NDQpOwotbW9kdWxlX3BhcmFtX2FycmF5KHBhY2tldF9zaXplLCB1aW50LCAmcGFyYW1fbnZbMV0sIDA0NDQpOwotbW9kdWxlX3BhcmFtX2FycmF5KG1heF9idWZmZXJzLCB1c2hvcnQsICZwYXJhbV9udlsyXSwgMDQ0NCk7Ci1tb2R1bGVfcGFyYW1fYXJyYXkoZG91YmxlX2J1ZmZlciwgYm9vbCwgJnBhcmFtX252WzNdLCAwNDQ0KTsKLW1vZHVsZV9wYXJhbV9hcnJheShjbGFtcGluZywgYm9vbCwgJnBhcmFtX252WzRdLCAwNDQ0KTsKLW1vZHVsZV9wYXJhbV9hcnJheShmaWx0ZXJfdHlwZSwgdXNob3J0LCAmcGFyYW1fbnZbNV0sIDA0NDQpOwotbW9kdWxlX3BhcmFtX2FycmF5KGxhcmdldmlldywgYm9vbCwgJnBhcmFtX252WzZdLCAwNDQ0KTsKLW1vZHVsZV9wYXJhbV9hcnJheShkZWNvbXByZXNzaW9uLCB1c2hvcnQsICZwYXJhbV9udls3XSwgMDQ0NCk7Ci1tb2R1bGVfcGFyYW1fYXJyYXkodXBzY2FsaW5nLCBib29sLCAmcGFyYW1fbnZbOF0sIDA0NDQpOwotbW9kdWxlX3BhcmFtX2FycmF5KGZvcmNlX3BhbGV0dGUsIHVzaG9ydCwgJnBhcmFtX252WzldLCAwNDQ0KTsKLW1vZHVsZV9wYXJhbV9hcnJheShmb3JjZV9yZ2IsIHVzaG9ydCwgJnBhcmFtX252WzEwXSwgMDQ0NCk7Ci1tb2R1bGVfcGFyYW1fYXJyYXkoYXV0b2JyaWdodCwgYm9vbCwgJnBhcmFtX252WzExXSwgMDQ0NCk7Ci1tb2R1bGVfcGFyYW1fYXJyYXkoYXV0b2V4cCwgYm9vbCwgJnBhcmFtX252WzEyXSwgMDQ0NCk7Ci1tb2R1bGVfcGFyYW1fYXJyYXkobGlnaHRmcmVxLCB1c2hvcnQsICZwYXJhbV9udlsxM10sIDA0NDQpOwotbW9kdWxlX3BhcmFtX2FycmF5KGJhbmRpbmdmaWx0ZXIsIGJvb2wsICZwYXJhbV9udlsxNF0sIDA0NDQpOwotbW9kdWxlX3BhcmFtX2FycmF5KGNsb2NrZGl2LCBzaG9ydCwgJnBhcmFtX252WzE1XSwgMDQ0NCk7Ci1tb2R1bGVfcGFyYW1fYXJyYXkoYmFja2xpZ2h0LCBib29sLCAmcGFyYW1fbnZbMTZdLCAwNDQ0KTsKLW1vZHVsZV9wYXJhbV9hcnJheShtaXJyb3IsIGJvb2wsICZwYXJhbV9udlsxN10sIDA0NDQpOwotbW9kdWxlX3BhcmFtX2FycmF5KG1vbm9jaHJvbWUsIGJvb2wsICZwYXJhbV9udlsxOF0sIDA0NDQpOwotbW9kdWxlX3BhcmFtX2FycmF5KGJyaWdodG5lc3MsIHVpbnQsICZwYXJhbV9udlsxOV0sIDA0NDQpOwotbW9kdWxlX3BhcmFtX2FycmF5KGh1ZSwgdWludCwgJnBhcmFtX252WzIwXSwgMDQ0NCk7Ci1tb2R1bGVfcGFyYW1fYXJyYXkoY29sb3VyLCB1aW50LCAmcGFyYW1fbnZbMjFdLCAwNDQ0KTsKLW1vZHVsZV9wYXJhbV9hcnJheShjb250cmFzdCwgdWludCwgJnBhcmFtX252WzIyXSwgMDQ0NCk7Ci1tb2R1bGVfcGFyYW1fYXJyYXkod2hpdGVuZXNzLCB1aW50LCAmcGFyYW1fbnZbMjNdLCAwNDQ0KTsKLSNpZmRlZiBXOTk2OENGX0RFQlVHCi1tb2R1bGVfcGFyYW0oZGVidWcsIHVzaG9ydCwgMDY0NCk7Ci1tb2R1bGVfcGFyYW0oc3BlY2lmaWNfZGVidWcsIGJvb2wsIDA2NDQpOwotI2VuZGlmCi0KLU1PRFVMRV9QQVJNX0RFU0Moc2ltY2FtcywKLQkJICJcbjxuPiBOdW1iZXIgb2YgY2FtZXJhcyBhbGxvd2VkIHRvIHN0cmVhbSBzaW11bHRhbmVvdXNseS4iCi0JCSAiXG5uIG1heSB2YXJ5IGZyb20gMCB0byAiCi0JCSBfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9NQVhfREVWSUNFUykiLiIKLQkJICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX1NJTUNBTVMpIi4iCi0JCSAiXG4iKTsKLU1PRFVMRV9QQVJNX0RFU0ModmlkZW9fbnIsCi0JCSAiXG48LTF8blssLi4uXT4gU3BlY2lmeSBWNEwgbWlub3IgbW9kZSBudW1iZXIuIgotCQkgIlxuIC0xID0gdXNlIG5leHQgYXZhaWxhYmxlIChkZWZhdWx0KSIKLQkJICJcbiAgbiA9IHVzZSBtaW5vciBudW1iZXIgbiAoaW50ZWdlciA+PSAwKSIKLQkJICJcbllvdSBjYW4gc3BlY2lmeSB1cCB0byAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfTUFYX0RFVklDRVMpCi0JCSAiIGNhbWVyYXMgdGhpcyB3YXkuIgotCQkgIlxuRm9yIGV4YW1wbGU6IgotCQkgIlxudmlkZW9fbnI9LTEsMiwtMSB3b3VsZCBhc3NpZ24gbWlub3IgbnVtYmVyIDIgdG8iCi0JCSAiXG50aGUgc2Vjb25kIGNhbWVyYSBhbmQgdXNlIGF1dG8gZm9yIHRoZSBmaXJzdCIKLQkJICJcbm9uZSBhbmQgZm9yIGV2ZXJ5IG90aGVyIGNhbWVyYS4iCi0JCSAiXG4iKTsKLU1PRFVMRV9QQVJNX0RFU0MocGFja2V0X3NpemUsCi0JCSAiXG48blssLi4uXT4gU3BlY2lmeSB0aGUgbWF4aW11bSBkYXRhIHBheWxvYWQiCi0JCSAiXG5zaXplIGluIGJ5dGVzIGZvciBhbHRlcm5hdGUgc2V0dGluZ3MsIGZvciBlYWNoIGRldmljZS4iCi0JCSAiXG5uIGlzIHNjYWxlZCBiZXR3ZWVuIDYzIGFuZCAxMDIzICIKLQkJICIoZGVmYXVsdCBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfUEFDS0VUX1NJWkUpIikuIgotCQkgIlxuIik7Ci1NT0RVTEVfUEFSTV9ERVNDKG1heF9idWZmZXJzLAotCQkgIlxuPG5bLC4uLl0+IEZvciBhZHZhbmNlZCB1c2Vycy4iCi0JCSAiXG5TcGVjaWZ5IHRoZSBtYXhpbXVtIG51bWJlciBvZiB2aWRlbyBmcmFtZSBidWZmZXJzIgotCQkgIlxudG8gYWxsb2NhdGUgZm9yIGVhY2ggZGV2aWNlLCBmcm9tIDIgdG8gIgotCQkgX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfTUFYX0JVRkZFUlMpCi0JCSAiLiAoZGVmYXVsdCBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfQlVGRkVSUykiKS4iCi0JCSAiXG4iKTsKLU1PRFVMRV9QQVJNX0RFU0MoZG91YmxlX2J1ZmZlciwKLQkJICJcbjwwfDFbLC4uLl0+ICIKLQkJICJIYXJkd2FyZSBkb3VibGUgYnVmZmVyaW5nOiAwIGRpc2FibGVkLCAxIGVuYWJsZWQuIgotCQkgIlxuSXQgc2hvdWxkIGJlIGVuYWJsZWQgaWYgeW91IHdhbnQgc21vb3RoIHZpZGVvIG91dHB1dDogaWYiCi0JCSAiXG55b3Ugb2J0YWluIG91dCBvZiBzeW5jLiB2aWRlbywgZGlzYWJsZSBpdCwgb3IgdHJ5IHRvIgotCQkgIlxuZGVjcmVhc2UgdGhlICdjbG9ja2RpdicgbW9kdWxlIHBhcmFtZXRlciB2YWx1ZS4iCi0JCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9ET1VCTEVfQlVGRkVSKQotCQkgIiBmb3IgZXZlcnkgZGV2aWNlLiIKLQkJICJcbiIpOwotTU9EVUxFX1BBUk1fREVTQyhjbGFtcGluZywKLQkJICJcbjwwfDFbLC4uLl0+IFZpZGVvIGRhdGEgY2xhbXBpbmc6IDAgZGlzYWJsZWQsIDEgZW5hYmxlZC4iCi0JCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9DTEFNUElORykKLQkJICIgZm9yIGV2ZXJ5IGRldmljZS4iCi0JCSAiXG4iKTsKLU1PRFVMRV9QQVJNX0RFU0MoZmlsdGVyX3R5cGUsCi0JCSAiXG48MHwxfDJbLC4uLl0+IFZpZGVvIGZpbHRlciB0eXBlLiIKLQkJICJcbjAgbm9uZSwgMSAoMS0yLTEpIDMtdGFwIGZpbHRlciwgIgotCQkgIjIgKDItMy02LTMtMikgNS10YXAgZmlsdGVyLiIKLQkJICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0ZJTFRFUl9UWVBFKQotCQkgIiBmb3IgZXZlcnkgZGV2aWNlLiIKLQkJICJcblRoZSBmaWx0ZXIgaXMgdXNlZCB0byByZWR1Y2Ugbm9pc2UgYW5kIGFsaWFzaW5nIGFydGlmYWN0cyIKLQkJICJcbnByb2R1Y2VkIGJ5IHRoZSBDQ0Qgb3IgQ01PUyBpbWFnZSBzZW5zb3IsIGFuZCB0aGUgc2NhbGluZyIKLQkJICIgcHJvY2Vzcy4iCi0JCSAiXG4iKTsKLU1PRFVMRV9QQVJNX0RFU0MobGFyZ2V2aWV3LAotCQkgIlxuPDB8MVssLi4uXT4gTGFyZ2UgdmlldzogMCBkaXNhYmxlZCwgMSBlbmFibGVkLiIKLQkJICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0xBUkdFVklFVykKLQkJICIgZm9yIGV2ZXJ5IGRldmljZS4iCi0JCSAiXG4iKTsKLU1PRFVMRV9QQVJNX0RFU0ModXBzY2FsaW5nLAotCQkgIlxuPDB8MVssLi4uXT4gU29mdHdhcmUgc2NhbGluZyAoZm9yIG5vbi1jb21wcmVzc2VkIHZpZGVvKToiCi0JCSAiXG4wIGRpc2FibGVkLCAxIGVuYWJsZWQuIgotCQkgIlxuRGlzYWJsZSBpdCBpZiB5b3UgaGF2ZSBhIHNsb3cgQ1BVIG9yIHlvdSBkb24ndCBoYXZlIgotCQkgIiBlbm91Z2ggbWVtb3J5LiIKLQkJICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX1VQU0NBTElORykKLQkJICIgZm9yIGV2ZXJ5IGRldmljZS4iCi0JCSAiXG5JZiAndzk5NjhjZi12cHAnIGlzIG5vdCBwcmVzZW50LCB0aGlzIHBhcmFtZXRlciBpcyIKLQkJICIgc2V0IHRvIDAuIgotCQkgIlxuIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlY29tcHJlc3Npb24sCi0JCSAiXG48MHwxfDJbLC4uLl0+IFNvZnR3YXJlIHZpZGVvIGRlY29tcHJlc3Npb246IgotCQkgIlxuLSAwIGRpc2FibGVzIGRlY29tcHJlc3Npb24gKGRvZXNuJ3QgYWxsb3cgZm9ybWF0cyBuZWVkaW5nIgotCQkgIiBkZWNvbXByZXNzaW9uKSIKLQkJICJcbi0gMSBmb3JjZXMgZGVjb21wcmVzc2lvbiAoYWxsb3dzIGZvcm1hdHMgbmVlZGluZyIKLQkJICIgZGVjb21wcmVzc2lvbiBvbmx5KTsiCi0JCSAiXG4tIDIgYWxsb3dzIGFueSBwZXJtaXR0ZWQgZm9ybWF0cy4iCi0JCSAiXG5Gb3JtYXRzIHN1cHBvcnRpbmcgY29tcHJlc3NlZCB2aWRlbyBhcmUgWVVWNDIyUCBhbmQiCi0JCSAiIFlVVjQyMFAvWVVWNDIwICIKLQkJICJcbmluIGFueSByZXNvbHV0aW9ucyB3aGVyZSBib3RoIHdpZHRoIGFuZCBoZWlnaHQgYXJlICIKLQkJICJhIG11bHRpcGxlIG9mIDE2LiIKLQkJICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0RFQ09NUFJFU1NJT04pCi0JCSAiIGZvciBldmVyeSBkZXZpY2UuIgotCQkgIlxuSWYgJ3c5OTY4Y2YtdnBwJyBpcyBub3QgcHJlc2VudCwgZm9yY2luZyBkZWNvbXByZXNzaW9uIGlzICIKLQkJICJcbm5vdCBhbGxvd2VkOyBpbiB0aGlzIGNhc2UgdGhpcyBwYXJhbWV0ZXIgaXMgc2V0IHRvIDIuIgotCQkgIlxuIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGZvcmNlX3BhbGV0dGUsCi0JCSAiXG48MCIKLQkJICJ8IiBfX01PRFVMRV9TVFJJTkcoVklERU9fUEFMRVRURV9VWVZZKQotCQkgInwiIF9fTU9EVUxFX1NUUklORyhWSURFT19QQUxFVFRFX1lVVjQyMCkKLQkJICJ8IiBfX01PRFVMRV9TVFJJTkcoVklERU9fUEFMRVRURV9ZVVY0MjJQKQotCQkgInwiIF9fTU9EVUxFX1NUUklORyhWSURFT19QQUxFVFRFX1lVVjQyMFApCi0JCSAifCIgX19NT0RVTEVfU1RSSU5HKFZJREVPX1BBTEVUVEVfWVVZVikKLQkJICJ8IiBfX01PRFVMRV9TVFJJTkcoVklERU9fUEFMRVRURV9ZVVY0MjIpCi0JCSAifCIgX19NT0RVTEVfU1RSSU5HKFZJREVPX1BBTEVUVEVfR1JFWSkKLQkJICJ8IiBfX01PRFVMRV9TVFJJTkcoVklERU9fUEFMRVRURV9SR0I1NTUpCi0JCSAifCIgX19NT0RVTEVfU1RSSU5HKFZJREVPX1BBTEVUVEVfUkdCNTY1KQotCQkgInwiIF9fTU9EVUxFX1NUUklORyhWSURFT19QQUxFVFRFX1JHQjI0KQotCQkgInwiIF9fTU9EVUxFX1NUUklORyhWSURFT19QQUxFVFRFX1JHQjMyKQotCQkgIlssLi4uXT4iCi0JCSAiIEZvcmNlIHBpY3R1cmUgcGFsZXR0ZS4iCi0JCSAiXG5JbiBvcmRlcjoiCi0JCSAiXG4tIDAgYWxsb3dzIGFueSBvZiB0aGUgZm9sbG93aW5nIGZvcm1hdHM6IgotCQkgIlxuLSBVWVZZICAgIDE2IGJwcCAtIE9yaWdpbmFsIHZpZGVvLCBjb21wcmVzc2lvbiBkaXNhYmxlZCIKLQkJICJcbi0gWVVWNDIwICAxMiBicHAgLSBPcmlnaW5hbCB2aWRlbywgY29tcHJlc3Npb24gZW5hYmxlZCIKLQkJICJcbi0gWVVWNDIyUCAxNiBicHAgLSBPcmlnaW5hbCB2aWRlbywgY29tcHJlc3Npb24gZW5hYmxlZCIKLQkJICJcbi0gWVVWNDIwUCAxMiBicHAgLSBPcmlnaW5hbCB2aWRlbywgY29tcHJlc3Npb24gZW5hYmxlZCIKLQkJICJcbi0gWVVWWSAgICAxNiBicHAgLSBTb2Z0d2FyZSBjb252ZXJzaW9uIGZyb20gVVlWWSIKLQkJICJcbi0gWVVWNDIyICAxNiBicHAgLSBTb2Z0d2FyZSBjb252ZXJzaW9uIGZyb20gVVlWWSIKLQkJICJcbi0gR1JFWSAgICAgOCBicHAgLSBTb2Z0d2FyZSBjb252ZXJzaW9uIGZyb20gVVlWWSIKLQkJICJcbi0gUkdCNTU1ICAxNiBicHAgLSBTb2Z0d2FyZSBjb252ZXJzaW9uIGZyb20gVVlWWSIKLQkJICJcbi0gUkdCNTY1ICAxNiBicHAgLSBTb2Z0d2FyZSBjb252ZXJzaW9uIGZyb20gVVlWWSIKLQkJICJcbi0gUkdCMjQgICAyNCBicHAgLSBTb2Z0d2FyZSBjb252ZXJzaW9uIGZyb20gVVlWWSIKLQkJICJcbi0gUkdCMzIgICAzMiBicHAgLSBTb2Z0d2FyZSBjb252ZXJzaW9uIGZyb20gVVlWWSIKLQkJICJcbldoZW4gbm90IDAsIHRoaXMgcGFyYW1ldGVyIHdpbGwgb3ZlcnJpZGUgJ2RlY29tcHJlc3Npb24nLiIKLQkJICJcbkRlZmF1bHQgdmFsdWUgaXMgMCBmb3IgZXZlcnkgZGV2aWNlLiIKLQkJICJcbkluaXRpYWwgcGFsZXR0ZSBpcyAiCi0JCSBfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9QQUxFVFRFX0RFQ09NUF9PTikiLiIKLQkJICJcbklmICd3OTk2OGNmLXZwcCcgaXMgbm90IHByZXNlbnQsIHRoaXMgcGFyYW1ldGVyIGlzIgotCQkgIiBzZXQgdG8gOSAoVVlWWSkuIgotCQkgIlxuIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGZvcmNlX3JnYiwKLQkJICJcbjwwfDFbLC4uLl0+IFJlYWQgUkdCIHZpZGVvIGRhdGEgaW5zdGVhZCBvZiBCR1I6IgotCQkgIlxuIDEgPSB1c2UgUkdCIGNvbXBvbmVudCBvcmRlcmluZy4iCi0JCSAiXG4gMCA9IHVzZSBCR1IgY29tcG9uZW50IG9yZGVyaW5nLiIKLQkJICJcblRoaXMgcGFyYW1ldGVyIGhhcyBlZmZlY3Qgd2hlbiB1c2luZyBSR0JYIHBhbGV0dGVzIG9ubHkuIgotCQkgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfRk9SQ0VfUkdCKQotCQkgIiBmb3IgZXZlcnkgZGV2aWNlLiIKLQkJICJcbiIpOwotTU9EVUxFX1BBUk1fREVTQyhhdXRvYnJpZ2h0LAotCQkgIlxuPDB8MVssLi4uXT4gSW1hZ2Ugc2Vuc29yIGF1dG9tYXRpY2FsbHkgY2hhbmdlcyBicmlnaHRuZXNzOiIKLQkJICJcbiAwID0gbm8sIDEgPSB5ZXMiCi0JCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9BVVRPQlJJR0hUKQotCQkgIiBmb3IgZXZlcnkgZGV2aWNlLiIKLQkJICJcbiIpOwotTU9EVUxFX1BBUk1fREVTQyhhdXRvZXhwLAotCQkgIlxuPDB8MVssLi4uXT4gSW1hZ2Ugc2Vuc29yIGF1dG9tYXRpY2FsbHkgY2hhbmdlcyBleHBvc3VyZToiCi0JCSAiXG4gMCA9IG5vLCAxID0geWVzIgotCQkgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfQVVUT0VYUCkKLQkJICIgZm9yIGV2ZXJ5IGRldmljZS4iCi0JCSAiXG4iKTsKLU1PRFVMRV9QQVJNX0RFU0MobGlnaHRmcmVxLAotCQkgIlxuPDUwfDYwWywuLi5dPiBMaWdodCBmcmVxdWVuY3kgaW4gSHo6IgotCQkgIlxuIDUwIGZvciBFdXJvcGVhbiBhbmQgQXNpYW4gbGlnaHRpbmcsIgotCQkgIiA2MCBmb3IgQW1lcmljYW4gbGlnaHRpbmcuIgotCQkgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfTElHSFRGUkVRKQotCQkgIiBmb3IgZXZlcnkgZGV2aWNlLiIKLQkJICJcbiIpOwotTU9EVUxFX1BBUk1fREVTQyhiYW5kaW5nZmlsdGVyLAotCQkgIlxuPDB8MVssLi4uXT4gQmFuZGluZyBmaWx0ZXIgdG8gcmVkdWNlIGVmZmVjdHMgb2YiCi0JCSAiIGZsdW9yZXNjZW50IGxpZ2h0aW5nOiIKLQkJICJcbiAwIGRpc2FibGVkLCAxIGVuYWJsZWQuIgotCQkgIlxuVGhpcyBmaWx0ZXIgdHJpZXMgdG8gcmVkdWNlIHRoZSBwYXR0ZXJuIG9mIGhvcml6b250YWwiCi0JCSAiXG5saWdodC9kYXJrIGJhbmRzIGNhdXNlZCBieSBzb21lICh1c3VhbGx5IGZsdW9yZXNjZW50KSIKLQkJICIgbGlnaHRpbmcuIgotCQkgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfQkFORElOR0ZJTFRFUikKLQkJICIgZm9yIGV2ZXJ5IGRldmljZS4iCi0JCSAiXG4iKTsKLU1PRFVMRV9QQVJNX0RFU0MoY2xvY2tkaXYsCi0JCSAiXG48LTF8blssLi4uXT4gIgotCQkgIkZvcmNlIHBpeGVsIGNsb2NrIGRpdmlzb3IgdG8gYSBzcGVjaWZpYyB2YWx1ZSAoZm9yIGV4cGVydHMpOiIKLQkJICJcbiAgbiBtYXkgdmFyeSBmcm9tIDAgdG8gMTI3LiIKLQkJICJcbiAtMSBmb3IgYXV0b21hdGljIHZhbHVlLiIKLQkJICJcblNlZSBhbHNvIHRoZSAnZG91YmxlX2J1ZmZlcicgbW9kdWxlIHBhcmFtZXRlci4iCi0JCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9DTE9DS0RJVikKLQkJICIgZm9yIGV2ZXJ5IGRldmljZS4iCi0JCSAiXG4iKTsKLU1PRFVMRV9QQVJNX0RFU0MoYmFja2xpZ2h0LAotCQkgIlxuPDB8MVssLi4uXT4gT2JqZWN0cyBhcmUgbGl0IGZyb20gYmVoaW5kOiIKLQkJICJcbiAwID0gbm8sIDEgPSB5ZXMiCi0JCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9CQUNLTElHSFQpCi0JCSAiIGZvciBldmVyeSBkZXZpY2UuIgotCQkgIlxuIik7Ci1NT0RVTEVfUEFSTV9ERVNDKG1pcnJvciwKLQkJICJcbjwwfDFbLC4uLl0+IFJldmVyc2UgaW1hZ2UgaG9yaXpvbnRhbGx5OiIKLQkJICJcbiAwID0gbm8sIDEgPSB5ZXMiCi0JCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9NSVJST1IpCi0JCSAiIGZvciBldmVyeSBkZXZpY2UuIgotCQkgIlxuIik7Ci1NT0RVTEVfUEFSTV9ERVNDKG1vbm9jaHJvbWUsCi0JCSAiXG48MHwxWywuLi5dPiBVc2UgaW1hZ2Ugc2Vuc29yIGFzIG1vbm9jaHJvbWUgc2Vuc29yOiIKLQkJICJcbiAwID0gbm8sIDEgPSB5ZXMiCi0JCSAiXG5Ob3QgYWxsIHRoZSBzZW5zb3JzIHN1cHBvcnQgbW9ub2Nocm9tZSBjb2xvci4iCi0JCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9NT05PQ0hST01FKQotCQkgIiBmb3IgZXZlcnkgZGV2aWNlLiIKLQkJICJcbiIpOwotTU9EVUxFX1BBUk1fREVTQyhicmlnaHRuZXNzLAotCQkgIlxuPG5bLC4uLl0+IFNldCBwaWN0dXJlIGJyaWdodG5lc3MgKDAtNjU1MzUpLiIKLQkJICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0JSSUdIVE5FU1MpCi0JCSAiIGZvciBldmVyeSBkZXZpY2UuIgotCQkgIlxuVGhpcyBwYXJhbWV0ZXIgaGFzIG5vIGVmZmVjdCBpZiAnYXV0b2JyaWdodCcgaXMgZW5hYmxlZC4iCi0JCSAiXG4iKTsKLU1PRFVMRV9QQVJNX0RFU0MoaHVlLAotCQkgIlxuPG5bLC4uLl0+IFNldCBwaWN0dXJlIGh1ZSAoMC02NTUzNSkuIgotCQkgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfSFVFKQotCQkgIiBmb3IgZXZlcnkgZGV2aWNlLiIKLQkJICJcbiIpOwotTU9EVUxFX1BBUk1fREVTQyhjb2xvdXIsCi0JCSAiXG48blssLi4uXT4gU2V0IHBpY3R1cmUgc2F0dXJhdGlvbiAoMC02NTUzNSkuIgotCQkgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfQ09MT1VSKQotCQkgIiBmb3IgZXZlcnkgZGV2aWNlLiIKLQkJICJcbiIpOwotTU9EVUxFX1BBUk1fREVTQyhjb250cmFzdCwKLQkJICJcbjxuWywuLi5dPiBTZXQgcGljdHVyZSBjb250cmFzdCAoMC02NTUzNSkuIgotCQkgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfQ09OVFJBU1QpCi0JCSAiIGZvciBldmVyeSBkZXZpY2UuIgotCQkgIlxuIik7Ci1NT0RVTEVfUEFSTV9ERVNDKHdoaXRlbmVzcywKLQkJICJcbjxuWywuLi5dPiBTZXQgcGljdHVyZSB3aGl0ZW5lc3MgKDAtNjU1MzUpLiIKLQkJICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX1dISVRFTkVTUykKLQkJICIgZm9yIGV2ZXJ5IGRldmljZS4iCi0JCSAiXG4iKTsKLSNpZmRlZiBXOTk2OENGX0RFQlVHCi1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLAotCQkgIlxuPG4+IERlYnVnZ2luZyBpbmZvcm1hdGlvbiBsZXZlbCwgZnJvbSAwIHRvIDY6IgotCQkgIlxuMCA9IG5vbmUgKHVzZSBjYXJlZnVsbHkpIgotCQkgIlxuMSA9IGNyaXRpY2FsIGVycm9ycyIKLQkJICJcbjIgPSBzaWduaWZpY2FudCBpbmZvcm1hdGlvbnMiCi0JCSAiXG4zID0gY29uZmlndXJhdGlvbiBvciBnZW5lcmFsIG1lc3NhZ2VzIgotCQkgIlxuNCA9IHdhcm5pbmdzIgotCQkgIlxuNSA9IGNhbGxlZCBmdW5jdGlvbnMiCi0JCSAiXG42ID0gZnVuY3Rpb24gaW50ZXJuYWxzIgotCQkgIlxuTGV2ZWwgNSBhbmQgNiBhcmUgdXNlZnVsIGZvciB0ZXN0aW5nIG9ubHksIHdoZW4gb25seSAiCi0JCSAib25lIGRldmljZSBpcyB1c2VkLiIKLQkJICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0RFQlVHX0xFVkVMKSIuIgotCQkgIlxuIik7Ci1NT0RVTEVfUEFSTV9ERVNDKHNwZWNpZmljX2RlYnVnLAotCQkgIlxuPDB8MT4gRW5hYmxlIG9yIGRpc2FibGUgc3BlY2lmaWMgZGVidWdnaW5nIG1lc3NhZ2VzOiIKLQkJICJcbjAgPSBwcmludCBtZXNzYWdlcyBjb25jZXJuaW5nIGV2ZXJ5IGxldmVsIgotCQkgIiA8PSAnZGVidWcnIGxldmVsLiIKLQkJICJcbjEgPSBwcmludCBtZXNzYWdlcyBjb25jZXJuaW5nIHRoZSBsZXZlbCIKLQkJICIgaW5kaWNhdGVkIGJ5ICdkZWJ1ZycuIgotCQkgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiCi0JCSBfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9TUEVDSUZJQ19ERUJVRykiLiIKLQkJICJcbiIpOwotI2VuZGlmIC8qIFc5OTY4Q0ZfREVCVUcgKi8KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBTb21lIHByb3RvdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFZpZGVvNGxpbnV4IGludGVyZmFjZSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB3OTk2OGNmX2ZvcHM7Ci1zdGF0aWMgaW50IHc5OTY4Y2Zfb3BlbihzdHJ1Y3QgZmlsZSAqKTsKLXN0YXRpYyBpbnQgdzk5NjhjZl9yZWxlYXNlKHN0cnVjdCBmaWxlICopOwotc3RhdGljIGludCB3OTk2OGNmX21tYXAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwotc3RhdGljIGxvbmcgdzk5NjhjZl9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQgbG9uZyk7Ci1zdGF0aWMgc3NpemVfdCB3OTk2OGNmX3JlYWQoc3RydWN0IGZpbGUgKiwgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7Ci1zdGF0aWMgbG9uZyB3OTk2OGNmX3Y0bF9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsCi0JCQkgICAgIHZvaWQgX191c2VyICopOwotCi0vKiBVU0Itc3BlY2lmaWMgKi8KLXN0YXRpYyBpbnQgdzk5NjhjZl9zdGFydF90cmFuc2ZlcihzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKLXN0YXRpYyBpbnQgdzk5NjhjZl9zdG9wX3RyYW5zZmVyKHN0cnVjdCB3OTk2OGNmX2RldmljZSopOwotc3RhdGljIGludCB3OTk2OGNmX3dyaXRlX3JlZyhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLCB1MTYgdmFsdWUsIHUxNiBpbmRleCk7Ci1zdGF0aWMgaW50IHc5OTY4Y2ZfcmVhZF9yZWcoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwgdTE2IGluZGV4KTsKLXN0YXRpYyBpbnQgdzk5NjhjZl93cml0ZV9mc2Ioc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwgdTE2KiBkYXRhKTsKLXN0YXRpYyBpbnQgdzk5NjhjZl93cml0ZV9zYihzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLCB1MTYgdmFsdWUpOwotc3RhdGljIGludCB3OTk2OGNmX3JlYWRfc2Ioc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7Ci1zdGF0aWMgaW50IHc5OTY4Y2ZfdXBsb2FkX3F1YW50aXphdGlvbnRhYmxlcyhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKLXN0YXRpYyB2b2lkIHc5OTY4Y2ZfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYik7Ci0KLS8qIExvdy1sZXZlbCBJMkMgKFNNQnVzKSBJL08gKi8KLXN0YXRpYyBpbnQgdzk5NjhjZl9zbWJ1c19zdGFydChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKLXN0YXRpYyBpbnQgdzk5NjhjZl9zbWJ1c19zdG9wKHN0cnVjdCB3OTk2OGNmX2RldmljZSopOwotc3RhdGljIGludCB3OTk2OGNmX3NtYnVzX3dyaXRlX2J5dGUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwgdTggdik7Ci1zdGF0aWMgaW50IHc5OTY4Y2Zfc21idXNfcmVhZF9ieXRlKHN0cnVjdCB3OTk2OGNmX2RldmljZSosIHU4KiB2KTsKLXN0YXRpYyBpbnQgdzk5NjhjZl9zbWJ1c193cml0ZV9hY2soc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7Ci1zdGF0aWMgaW50IHc5OTY4Y2Zfc21idXNfcmVhZF9hY2soc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7Ci1zdGF0aWMgaW50IHc5OTY4Y2Zfc21idXNfcmVmcmVzaF9idXMoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7Ci1zdGF0aWMgaW50IHc5OTY4Y2ZfaTJjX2FkYXBfcmVhZF9ieXRlKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLAotCQkJCSAgICAgIHUxNiBhZGRyZXNzLCB1OCogdmFsdWUpOwotc3RhdGljIGludCB3OTk2OGNmX2kyY19hZGFwX3JlYWRfYnl0ZV9kYXRhKHN0cnVjdCB3OTk2OGNmX2RldmljZSosIHUxNiBhZGRyZXNzLAotCQkJCQkgICB1OCBzdWJhZGRyZXNzLCB1OCogdmFsdWUpOwotc3RhdGljIGludCB3OTk2OGNmX2kyY19hZGFwX3dyaXRlX2J5dGUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwKLQkJCQkgICAgICAgdTE2IGFkZHJlc3MsIHU4IHN1YmFkZHJlc3MpOwotc3RhdGljIGludCB3OTk2OGNmX2kyY19hZGFwX2Zhc3R3cml0ZV9ieXRlX2RhdGEoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwKLQkJCQkJCXUxNiBhZGRyZXNzLCB1OCBzdWJhZGRyZXNzLAotCQkJCQkJdTggdmFsdWUpOwotCi0vKiBJMkMgaW50ZXJmYWNlIHRvIGtlcm5lbCAqLwotc3RhdGljIGludCB3OTk2OGNmX2kyY19pbml0KHN0cnVjdCB3OTk2OGNmX2RldmljZSopOwotc3RhdGljIGludCB3OTk2OGNmX2kyY19zbWJ1c194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciosIHUxNiBhZGRyLAotCQkJCSAgdW5zaWduZWQgc2hvcnQgZmxhZ3MsIGNoYXIgcmVhZF93cml0ZSwKLQkJCQkgIHU4IGNvbW1hbmQsIGludCBzaXplLCB1bmlvbiBpMmNfc21idXNfZGF0YSopOwotc3RhdGljIHUzMiB3OTk2OGNmX2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciopOwotCi0vKiBNZW1vcnkgbWFuYWdlbWVudCAqLwotc3RhdGljIHZvaWQqIHJ2bWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1zdGF0aWMgdm9pZCBydmZyZWUodm9pZCAqbWVtLCB1bnNpZ25lZCBsb25nIHNpemUpOwotc3RhdGljIHZvaWQgdzk5NjhjZl9kZWFsbG9jYXRlX21lbW9yeShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKLXN0YXRpYyBpbnQgIHc5OTY4Y2ZfYWxsb2NhdGVfbWVtb3J5KHN0cnVjdCB3OTk2OGNmX2RldmljZSopOwotCi0vKiBIaWdoLWxldmVsIGltYWdlIHNlbnNvciBjb250cm9sIGZ1bmN0aW9ucyAqLwotc3RhdGljIGludCB3OTk2OGNmX3NlbnNvcl9zZXRfY29udHJvbChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLGludCBjaWQsaW50IHZhbCk7Ci1zdGF0aWMgaW50IHc5OTY4Y2Zfc2Vuc29yX2dldF9jb250cm9sKHN0cnVjdCB3OTk2OGNmX2RldmljZSosaW50IGNpZCxpbnQgKnZhbCk7Ci1zdGF0aWMgaW50IHc5OTY4Y2Zfc2Vuc29yX2NtZChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLAotCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKLXN0YXRpYyBpbnQgdzk5NjhjZl9zZW5zb3JfaW5pdChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKLXN0YXRpYyBpbnQgdzk5NjhjZl9zZW5zb3JfdXBkYXRlX3NldHRpbmdzKHN0cnVjdCB3OTk2OGNmX2RldmljZSopOwotc3RhdGljIGludCB3OTk2OGNmX3NlbnNvcl9nZXRfcGljdHVyZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKLXN0YXRpYyBpbnQgdzk5NjhjZl9zZW5zb3JfdXBkYXRlX3BpY3R1cmUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwKLQkJCQkJIHN0cnVjdCB2aWRlb19waWN0dXJlIHBpY3QpOwotCi0vKiBPdGhlciBoZWxwZXIgZnVuY3Rpb25zICovCi1zdGF0aWMgdm9pZCB3OTk2OGNmX2NvbmZpZ3VyZV9jYW1lcmEoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKixzdHJ1Y3QgdXNiX2RldmljZSosCi0JCQkJICAgICBlbnVtIHc5OTY4Y2ZfbW9kZWxfaWQsCi0JCQkJICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBkZXZfbnIpOwotc3RhdGljIHZvaWQgdzk5NjhjZl9hZGp1c3RfY29uZmlndXJhdGlvbihzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKLXN0YXRpYyBpbnQgdzk5NjhjZl90dXJuX29uX2xlZChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKLXN0YXRpYyBpbnQgdzk5NjhjZl9pbml0X2NoaXAoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7Ci1zdGF0aWMgaW5saW5lIHUxNiB3OTk2OGNmX3ZhbGlkX3BhbGV0dGUodTE2IHBhbGV0dGUpOwotc3RhdGljIGlubGluZSB1MTYgdzk5NjhjZl92YWxpZF9kZXB0aCh1MTYgcGFsZXR0ZSk7Ci1zdGF0aWMgaW5saW5lIHU4IHc5OTY4Y2ZfbmVlZF9kZWNvbXByZXNzaW9uKHUxNiBwYWxldHRlKTsKLXN0YXRpYyBpbnQgdzk5NjhjZl9zZXRfcGljdHVyZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLCBzdHJ1Y3QgdmlkZW9fcGljdHVyZSk7Ci1zdGF0aWMgaW50IHc5OTY4Y2Zfc2V0X3dpbmRvdyhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLCBzdHJ1Y3QgdmlkZW9fd2luZG93KTsKLXN0YXRpYyBpbnQgdzk5NjhjZl9wb3N0cHJvY2Vzc19mcmFtZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLAotCQkJCSAgICAgc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCopOwotc3RhdGljIGludCB3OTk2OGNmX2FkanVzdF93aW5kb3dfc2l6ZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLCB1MzIgKncsIHUzMiAqaCk7Ci1zdGF0aWMgdm9pZCB3OTk2OGNmX2luaXRfZnJhbWVsaXN0KHN0cnVjdCB3OTk2OGNmX2RldmljZSopOwotc3RhdGljIHZvaWQgdzk5NjhjZl9wdXNoX2ZyYW1lKHN0cnVjdCB3OTk2OGNmX2RldmljZSosIHU4IGZfbnVtKTsKLXN0YXRpYyB2b2lkIHc5OTY4Y2ZfcG9wX2ZyYW1lKHN0cnVjdCB3OTk2OGNmX2RldmljZSosc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCoqKTsKLXN0YXRpYyB2b2lkIHc5OTY4Y2ZfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7Ci0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogU3ltYm9saWMgbmFtZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBVc2VkIHRvIHJlcHJlc2VudCBhIGxpc3Qgb2YgdmFsdWVzIGFuZCB0aGVpciByZXNwZWN0aXZlIHN5bWJvbGljIG5hbWVzICovCi1zdHJ1Y3Qgdzk5NjhjZl9zeW1ib2xpY19saXN0IHsKLQljb25zdCBpbnQgbnVtOwotCWNvbnN0IGNoYXIgKm5hbWU7Ci19OwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIG1hdGNoaW5nIGVsZW1lbnQgaW4gdGhlIHN5bWJvbGljX2xpc3QgYXJyYXkuIFRoZQotICBlbmQgb2YgdGhlIGxpc3QgbXVzdCBiZSBtYXJrZWQgd2l0aCBhbiBlbGVtZW50IHRoYXQgaGFzIGEgTlVMTCBuYW1lLgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgotc3ltYm9saWMoc3RydWN0IHc5OTY4Y2Zfc3ltYm9saWNfbGlzdCBsaXN0W10sIGNvbnN0IGludCBudW0pCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBsaXN0W2ldLm5hbWUgIT0gTlVMTDsgaSsrKQotCQlpZiAobGlzdFtpXS5udW0gPT0gbnVtKQotCQkJcmV0dXJuIChsaXN0W2ldLm5hbWUpOwotCi0JcmV0dXJuICJVbmtub3duIjsKLX0KLQotc3RhdGljIHN0cnVjdCB3OTk2OGNmX3N5bWJvbGljX2xpc3QgY2FtbGlzdFtdID0gewotCXsgVzk5NjhDRl9NT0RfR0VORVJJQywgIlc5OTZbODddQ0YgSlBFRyBVU0IgRHVhbCBNb2RlIENhbWVyYSIgfSwKLQl7IFc5OTY4Q0ZfTU9EX0NMVkJXR1AsICJDcmVhdGl2ZSBMYWJzIFZpZGVvIEJsYXN0ZXIgV2ViQ2FtIEdvIFBsdXMiIH0sCi0KLQkvKiBPdGhlciBjYW1lcmFzIChoYXZpbmcgdGhlIHNhbWUgZGVzY3JpcHRvcnMgYXMgR2VuZXJpYyBXOTk2Wzg3XUNGKSAqLwotCXsgVzk5NjhDRl9NT0RfQURQVkRNQSwgIkFyb21hIERpZ2kgUGVuIFZHQSBEdWFsIE1vZGUgQURHLTUwMDAiIH0sCi0JeyBXOTk4NkNGX01PRF9BQVUsICJBVmVyTWVkaWEgQVZlclRWIFVTQiIgfSwKLQl7IFc5OTY4Q0ZfTU9EX0NMVkJXRywgIkNyZWF0aXZlIExhYnMgVmlkZW8gQmxhc3RlciBXZWJDYW0gR28iIH0sCi0JeyBXOTk2OENGX01PRF9MTCwgIkxlYm9uIExEQy0wMzVBIiB9LAotCXsgVzk5NjhDRl9NT0RfRUVFTUMsICJFem9uaWNzIEVaLTgwMiBFWk1lZ2EgQ2FtIiB9LAotCXsgVzk5NjhDRl9NT0RfT09FLCAiT21uaVZpc2lvbiBPVjg2MTAtRURFIiB9LAotCXsgVzk5NjhDRl9NT0RfT0RQVkRNUEMsICJPUENPTSBEaWdpIFBlbiBWR0EgRHVhbCBNb2RlIFBlbiBDYW1lcmEiIH0sCi0JeyBXOTk2OENGX01PRF9QRFBJSSwgIlByZXRlYyBEaWdpIFBlbi1JSSIgfSwKLQl7IFc5OTY4Q0ZfTU9EX1BEUDQ4MCwgIlByZXRlYyBEaWdpUGVuLTQ4MCIgfSwKLQotCXsgIC0xLCBOVUxMIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgdzk5NjhjZl9zeW1ib2xpY19saXN0IHNlbmxpc3RbXSA9IHsKLQl7IENDX09WNzZCRSwgICAiT1Y3NkJFIiB9LAotCXsgQ0NfT1Y3NjEwLCAgICJPVjc2MTAiIH0sCi0JeyBDQ19PVjc2MjAsICAgIk9WNzYyMCIgfSwKLQl7IENDX09WNzYyMEFFLCAiT1Y3NjIwQUUiIH0sCi0JeyBDQ19PVjY2MjAsICAgIk9WNjYyMCIgfSwKLQl7IENDX09WNjYzMCwgICAiT1Y2NjMwIiB9LAotCXsgQ0NfT1Y2NjMwQUUsICJPVjY2MzBBRSIgfSwKLQl7IENDX09WNjYzMEFGLCAiT1Y2NjMwQUYiIH0sCi0JeyAtMSwgTlVMTCB9Ci19OwotCi0vKiBWaWRlbzRMaW51eDEgcGFsZXR0ZXMgKi8KLXN0YXRpYyBzdHJ1Y3Qgdzk5NjhjZl9zeW1ib2xpY19saXN0IHY0bDFfcGxpc3RbXSA9IHsKLQl7IFZJREVPX1BBTEVUVEVfR1JFWSwgICAgIkdSRVkiIH0sCi0JeyBWSURFT19QQUxFVFRFX0hJMjQwLCAgICJISTI0MCIgfSwKLQl7IFZJREVPX1BBTEVUVEVfUkdCNTY1LCAgIlJHQjU2NSIgfSwKLQl7IFZJREVPX1BBTEVUVEVfUkdCMjQsICAgIlJHQjI0IiB9LAotCXsgVklERU9fUEFMRVRURV9SR0IzMiwgICAiUkdCMzIiIH0sCi0JeyBWSURFT19QQUxFVFRFX1JHQjU1NSwgICJSR0I1NTUiIH0sCi0JeyBWSURFT19QQUxFVFRFX1lVVjQyMiwgICJZVVY0MjIiIH0sCi0JeyBWSURFT19QQUxFVFRFX1lVWVYsICAgICJZVVlWIiB9LAotCXsgVklERU9fUEFMRVRURV9VWVZZLCAgICAiVVlWWSIgfSwKLQl7IFZJREVPX1BBTEVUVEVfWVVWNDIwLCAgIllVVjQyMCIgfSwKLQl7IFZJREVPX1BBTEVUVEVfWVVWNDExLCAgIllVVjQxMSIgfSwKLQl7IFZJREVPX1BBTEVUVEVfUkFXLCAgICAgIlJBVyIgfSwKLQl7IFZJREVPX1BBTEVUVEVfWVVWNDIyUCwgIllVVjQyMlAiIH0sCi0JeyBWSURFT19QQUxFVFRFX1lVVjQxMVAsICJZVVY0MTFQIiB9LAotCXsgVklERU9fUEFMRVRURV9ZVVY0MjBQLCAiWVVWNDIwUCIgfSwKLQl7IFZJREVPX1BBTEVUVEVfWVVWNDEwUCwgIllVVjQxMFAiIH0sCi0JeyAtMSwgTlVMTCB9Ci19OwotCi0vKiBEZWNvZGVyIGVycm9yIGNvZGVzOiAqLwotc3RhdGljIHN0cnVjdCB3OTk2OGNmX3N5bWJvbGljX2xpc3QgZGVjb2Rlcl9lcnJsaXN0W10gPSB7Ci0JeyBXOTk2OENGX0RFQ19FUlJfQ09SUlVQVEVEX0RBVEEsICJDb3JydXB0ZWQgZGF0YSIgfSwKLQl7IFc5OTY4Q0ZfREVDX0VSUl9CVUZfT1ZFUkZMT1csICAgIkJ1ZmZlciBvdmVyZmxvdyIgfSwKLQl7IFc5OTY4Q0ZfREVDX0VSUl9OT19TT0ksICAgICAgICAgIlNPSSBtYXJrZXIgbm90IGZvdW5kIiB9LAotCXsgVzk5NjhDRl9ERUNfRVJSX05PX1NPRjAsICAgICAgICAiU09GMCBtYXJrZXIgbm90IGZvdW5kIiB9LAotCXsgVzk5NjhDRl9ERUNfRVJSX05PX1NPUywgICAgICAgICAiU09TIG1hcmtlciBub3QgZm91bmQiIH0sCi0JeyBXOTk2OENGX0RFQ19FUlJfTk9fRU9JLCAgICAgICAgICJFT0kgbWFya2VyIG5vdCBmb3VuZCIgfSwKLQl7IC0xLCBOVUxMIH0KLX07Ci0KLS8qIFVSQiBlcnJvciBjb2RlczogKi8KLXN0YXRpYyBzdHJ1Y3Qgdzk5NjhjZl9zeW1ib2xpY19saXN0IHVyYl9lcnJsaXN0W10gPSB7Ci0JeyAtRU5PTUVNLCAgICAiTm8gbWVtb3J5IGZvciBhbGxvY2F0aW9uIG9mIGludGVybmFsIHN0cnVjdHVyZXMiIH0sCi0JeyAtRU5PU1BDLCAgICAiVGhlIGhvc3QgY29udHJvbGxlcidzIGJhbmR3aWR0aCBpcyBhbHJlYWR5IGNvbnN1bWVkIiB9LAotCXsgLUVOT0VOVCwgICAgIlVSQiB3YXMgY2FuY2VsZWQgYnkgdW5saW5rX3VyYiIgfSwKLQl7IC1FWERFViwgICAgICJJU08gdHJhbnNmZXIgb25seSBwYXJ0aWFsbHkgY29tcGxldGVkIiB9LAotCXsgLUVBR0FJTiwgICAgIlRvbyBtYXRjaCBzY2hlZHVsZWQgZm9yIHRoZSBmdXR1cmUiIH0sCi0JeyAtRU5YSU8sICAgICAiVVJCIGFscmVhZHkgcXVldWVkIiB9LAotCXsgLUVGQklHLCAgICAgIlRvbyBtdWNoIElTTyBmcmFtZXMgcmVxdWVzdGVkIiB9LAotCXsgLUVOT1NSLCAgICAgIkJ1ZmZlciBlcnJvciAob3ZlcnJ1bikiIH0sCi0JeyAtRVBJUEUsICAgICAiU3BlY2lmaWVkIGVuZHBvaW50IGlzIHN0YWxsZWQgKGRldmljZSBub3QgcmVzcG9uZGluZykifSwKLQl7IC1FT1ZFUkZMT1csICJCYWJibGUgKHRvbyBtdWNoIGRhdGEpIiB9LAotCXsgLUVQUk9UTywgICAgIkJpdC1zdHVmZiBlcnJvciAoYmFkIGNhYmxlPykiIH0sCi0JeyAtRUlMU0VRLCAgICAiQ1JDL1RpbWVvdXQiIH0sCi0JeyAtRVRJTUUsICAgICAiRGV2aWNlIGRvZXMgbm90IHJlc3BvbmQgdG8gdG9rZW4iIH0sCi0JeyAtRVRJTUVET1VULCAiRGV2aWNlIGRvZXMgbm90IHJlc3BvbmQgdG8gY29tbWFuZCIgfSwKLQl7IC0xLCBOVUxMIH0KLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBNZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCogcnZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQotewotCXZvaWQqIG1lbTsKLQl1bnNpZ25lZCBsb25nIGFkcjsKLQotCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOwotCW1lbSA9IHZtYWxsb2NfMzIoc2l6ZSk7Ci0JaWYgKCFtZW0pCi0JCXJldHVybiBOVUxMOwotCi0JbWVtc2V0KG1lbSwgMCwgc2l6ZSk7IC8qIENsZWFyIHRoZSByYW0gb3V0LCBubyBqdW5rIHRvIHRoZSB1c2VyICovCi0JYWRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKLQl3aGlsZSAoc2l6ZSA+IDApIHsKLQkJU2V0UGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOwotCQlhZHIgKz0gUEFHRV9TSVpFOwotCQlzaXplIC09IFBBR0VfU0laRTsKLQl9Ci0KLQlyZXR1cm4gbWVtOwotfQotCi0KLXN0YXRpYyB2b2lkIHJ2ZnJlZSh2b2lkKiBtZW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGFkcjsKLQotCWlmICghbWVtKQotCQlyZXR1cm47Ci0KLQlhZHIgPSAodW5zaWduZWQgbG9uZykgbWVtOwotCXdoaWxlICgobG9uZykgc2l6ZSA+IDApIHsKLQkJQ2xlYXJQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKCh2b2lkICopYWRyKSk7Ci0JCWFkciArPSBQQUdFX1NJWkU7Ci0JCXNpemUgLT0gUEFHRV9TSVpFOwotCX0KLQl2ZnJlZShtZW0pOwotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgRGVhbGxvY2F0ZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkuCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkIHc5OTY4Y2ZfZGVhbGxvY2F0ZV9tZW1vcnkoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCi17Ci0JdTggaTsKLQotCS8qIEZyZWUgdGhlIGlzb2Nocm9ub3VzIHRyYW5zZmVyIGJ1ZmZlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgVzk5NjhDRl9VUkJTOyBpKyspIHsKLQkJa2ZyZWUoY2FtLT50cmFuc2Zlcl9idWZmZXJbaV0pOwotCQljYW0tPnRyYW5zZmVyX2J1ZmZlcltpXSA9IE5VTEw7Ci0JfQotCi0JLyogRnJlZSB0ZW1wb3JhcnkgZnJhbWUgYnVmZmVyICovCi0JaWYgKGNhbS0+ZnJhbWVfdG1wLmJ1ZmZlcikgewotCQlydmZyZWUoY2FtLT5mcmFtZV90bXAuYnVmZmVyLCBjYW0tPmZyYW1lX3RtcC5zaXplKTsKLQkJY2FtLT5mcmFtZV90bXAuYnVmZmVyID0gTlVMTDsKLQl9Ci0KLQkvKiBGcmVlIGhlbHBlciBidWZmZXIgKi8KLQlpZiAoY2FtLT5mcmFtZV92cHAuYnVmZmVyKSB7Ci0JCXJ2ZnJlZShjYW0tPmZyYW1lX3ZwcC5idWZmZXIsIGNhbS0+ZnJhbWVfdnBwLnNpemUpOwotCQljYW0tPmZyYW1lX3ZwcC5idWZmZXIgPSBOVUxMOwotCX0KLQotCS8qIEZyZWUgdmlkZW8gZnJhbWUgYnVmZmVycyAqLwotCWlmIChjYW0tPmZyYW1lWzBdLmJ1ZmZlcikgewotCQlydmZyZWUoY2FtLT5mcmFtZVswXS5idWZmZXIsIGNhbS0+bmJ1ZmZlcnMqY2FtLT5mcmFtZVswXS5zaXplKTsKLQkJY2FtLT5mcmFtZVswXS5idWZmZXIgPSBOVUxMOwotCX0KLQotCWNhbS0+bmJ1ZmZlcnMgPSAwOwotCi0JREJHKDUsICJNZW1vcnkgc3VjY2Vzc2Z1bGx5IGRlYWxsb2NhdGVkIikKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIEFsbG9jYXRlIG1lbW9yeSBidWZmZXJzIGZvciBVU0IgdHJhbnNmZXJzIGFuZCB2aWRlbyBmcmFtZXMuCi0gIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IG9wZW4oKSBvbmx5LgotICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIG51bWJlciBvdGhlcndpc2UuCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQgdzk5NjhjZl9hbGxvY2F0ZV9tZW1vcnkoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCi17Ci0JY29uc3QgdTE2IHBfc2l6ZSA9IHdNYXhQYWNrZXRTaXplW2NhbS0+YWx0c2V0dGluZy0xXTsKLQl2b2lkKiBidWZmID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGh3X2J1ZnNpemUsIHZwcF9idWZzaXplOwotCXU4IGksIGJwcDsKLQotCS8qIE5PVEU6IERlYWxsb2NhdGlvbiBpcyBkb25lIGVsc2V3aGVyZSBpbiBjYXNlIG9mIGVycm9yICovCi0KLQkvKiBDYWxjdWxhdGUgdGhlIG1heCBhbW91bnQgb2YgcmF3IGRhdGEgcGVyIGZyYW1lIGZyb20gdGhlIGRldmljZSAqLwotCWh3X2J1ZnNpemUgPSBjYW0tPm1heHdpZHRoKmNhbS0+bWF4aGVpZ2h0KjI7Ci0KLQkvKiBDYWxjdWxhdGUgdGhlIG1heCBidWYuIHNpemUgbmVlZGVkIGZvciBwb3N0LXByb2Nlc3Npbmcgcm91dGluZXMgKi8KLQlicHAgPSAodzk5NjhjZl92cHApID8gNCA6IDI7Ci0JaWYgKGNhbS0+dXBzY2FsaW5nKQotCQl2cHBfYnVmc2l6ZSA9IG1heChXOTk2OENGX01BWF9XSURUSCpXOTk2OENGX01BWF9IRUlHSFQqYnBwLAotCQkJCSAgY2FtLT5tYXh3aWR0aCpjYW0tPm1heGhlaWdodCpicHApOwotCWVsc2UKLQkJdnBwX2J1ZnNpemUgPSBjYW0tPm1heHdpZHRoKmNhbS0+bWF4aGVpZ2h0KmJwcDsKLQotCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGlzb2Nocm9ub3VzIHRyYW5zZmVyIGJ1ZmZlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgVzk5NjhDRl9VUkJTOyBpKyspIHsKLQkJaWYgKCEoY2FtLT50cmFuc2Zlcl9idWZmZXJbaV0gPQotCQkgICAgICBremFsbG9jKFc5OTY4Q0ZfSVNPX1BBQ0tFVFMqcF9zaXplLCBHRlBfS0VSTkVMKSkpIHsKLQkJCURCRygxLCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaXNvY2hyb25vdXMgIgotCQkJICAgICAgICJ0cmFuc2ZlciBidWZmZXJzICgldSBieXRlcykiLAotCQkJICAgIHBfc2l6ZSAqIFc5OTY4Q0ZfSVNPX1BBQ0tFVFMpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCX0KLQotCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHRlbXBvcmFyeSBmcmFtZSBidWZmZXIgKi8KLQlpZiAoIShjYW0tPmZyYW1lX3RtcC5idWZmZXIgPSBydm1hbGxvYyhod19idWZzaXplKSkpIHsKLQkJREJHKDEsICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSB0ZW1wb3JhcnkgIgotCQkgICAgICAgInZpZGVvIGZyYW1lIGJ1ZmZlciAoJWx1IGJ5dGVzKSIsIGh3X2J1ZnNpemUpCi0JCXJldHVybiAtRU5PTUVNOwotCX0KLQljYW0tPmZyYW1lX3RtcC5zaXplID0gaHdfYnVmc2l6ZTsKLQljYW0tPmZyYW1lX3RtcC5udW1iZXIgPSAtMTsKLQotCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGhlbHBlciBidWZmZXIgKi8KLQlpZiAodzk5NjhjZl92cHApIHsKLQkJaWYgKCEoY2FtLT5mcmFtZV92cHAuYnVmZmVyID0gcnZtYWxsb2ModnBwX2J1ZnNpemUpKSkgewotCQkJREJHKDEsICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBoZWxwZXIgYnVmZmVyIgotCQkJICAgICAgICIgKCVsdSBieXRlcykiLCB2cHBfYnVmc2l6ZSkKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCWNhbS0+ZnJhbWVfdnBwLnNpemUgPSB2cHBfYnVmc2l6ZTsKLQl9IGVsc2UKLQkJY2FtLT5mcmFtZV92cHAuYnVmZmVyID0gTlVMTDsKLQotCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdmlkZW8gZnJhbWUgYnVmZmVycyAqLwotCWNhbS0+bmJ1ZmZlcnMgPSBjYW0tPm1heF9idWZmZXJzOwotCXdoaWxlIChjYW0tPm5idWZmZXJzID49IDIpIHsKLQkJaWYgKChidWZmID0gcnZtYWxsb2MoY2FtLT5uYnVmZmVycyAqIHZwcF9idWZzaXplKSkpCi0JCQlicmVhazsKLQkJZWxzZQotCQkJY2FtLT5uYnVmZmVycy0tOwotCX0KLQotCWlmICghYnVmZikgewotCQlEQkcoMSwgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHZpZGVvIGZyYW1lIGJ1ZmZlcnMiKQotCQljYW0tPm5idWZmZXJzID0gMDsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JaWYgKGNhbS0+bmJ1ZmZlcnMgIT0gY2FtLT5tYXhfYnVmZmVycykKLQkJREJHKDIsICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICV1IHZpZGVvIGZyYW1lIGJ1ZmZlcnMuICIKLQkJICAgICAgICJPbmx5IG1lbW9yeSBmb3IgJXUgYnVmZmVycyBoYXMgYmVlbiBhbGxvY2F0ZWQiLAotCQkgICAgY2FtLT5tYXhfYnVmZmVycywgY2FtLT5uYnVmZmVycykKLQotCWZvciAoaSA9IDA7IGkgPCBjYW0tPm5idWZmZXJzOyBpKyspIHsKLQkJY2FtLT5mcmFtZVtpXS5idWZmZXIgPSBidWZmICsgaSp2cHBfYnVmc2l6ZTsKLQkJY2FtLT5mcmFtZVtpXS5zaXplID0gdnBwX2J1ZnNpemU7Ci0JCWNhbS0+ZnJhbWVbaV0ubnVtYmVyID0gaTsKLQkJLyogQ2lyY3VsYXIgbGlzdCAqLwotCQlpZiAoaSAhPSBjYW0tPm5idWZmZXJzLTEpCi0JCQljYW0tPmZyYW1lW2ldLm5leHQgPSAmY2FtLT5mcmFtZVtpKzFdOwotCQllbHNlCi0JCQljYW0tPmZyYW1lW2ldLm5leHQgPSAmY2FtLT5mcmFtZVswXTsKLQkJY2FtLT5mcmFtZVtpXS5zdGF0dXMgPSBGX1VOVVNFRDsKLQl9Ci0KLQlEQkcoNSwgIk1lbW9yeSBzdWNjZXNzZnVsbHkgYWxsb2NhdGVkIikKLQlyZXR1cm4gMDsKLX0KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBVU0Itc3BlY2lmaWMgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgVGhpcyBpcyBhbiBoYW5kbGVyIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBhZnRlciB0aGUgVVJCcyBhcmUgY29tcGxldGVkLgotICBJdCBjb2xsZWN0cyBtdWx0aXBsZSBkYXRhIHBhY2tldHMgY29taW5nIGZyb20gdGhlIGNhbWVyYSBieSBwdXR0aW5nIHRoZW0KLSAgaW50byBmcmFtZSBidWZmZXJzOiBvbmUgb3IgbW9yZSB6ZXJvIGRhdGEgbGVuZ3RoIGRhdGEgcGFja2V0cyBhcmUgdXNlZCB0bwotICBtYXJrIHRoZSBlbmQgb2YgYSB2aWRlbyBmcmFtZTsgdGhlIGZpcnN0IG5vbi16ZXJvIGRhdGEgcGFja2V0IGlzIHRoZSBzdGFydAotICBvZiB0aGUgbmV4dCB2aWRlbyBmcmFtZTsgaWYgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQgaW4gYSBwYWNrZXQsIHRoZSBlbnRpcmUKLSAgdmlkZW8gZnJhbWUgaXMgZGlzY2FyZGVkIGFuZCBncmFiYmVkIGFnYWluLgotICBJZiB0aGVyZSBhcmUgbm8gcmVxdWVzdGVkIGZyYW1lcyBpbiB0aGUgRklGTyBsaXN0LCBwYWNrZXRzIGFyZSBjb2xsZWN0ZWQgaW50bwotICBhIHRlbXBvcmFyeSBidWZmZXIuCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkIHc5OTY4Y2ZfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKLXsKLQlzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSA9IChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKXVyYi0+Y29udGV4dDsKLQlzdHJ1Y3Qgdzk5NjhjZl9mcmFtZV90KiogZjsKLQl1bnNpZ25lZCBpbnQgbGVuLCBzdGF0dXM7Ci0Jdm9pZCogcG9zOwotCXU4IGk7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAoKCFjYW0tPnN0cmVhbWluZykgfHwgY2FtLT5kaXNjb25uZWN0ZWQpIHsKLQkJREJHKDQsICJHb3QgaW50ZXJydXB0LCBidXQgbm90IHN0cmVhbWluZyIpCi0JCXJldHVybjsKLQl9Ci0KLQkvKiAiKCpmKSIgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgImNhbS0+ZnJhbWVfY3VycmVudCIgKi8KLQlmID0gJmNhbS0+ZnJhbWVfY3VycmVudDsKLQotCS8qIElmIGEgZnJhbWUgaGFzIGJlZW4gcmVxdWVzdGVkIGFuZCB3ZSBhcmUgZ3JhYmJpbmcgaW50bwotCSAgIHRoZSB0ZW1wb3JhcnkgZnJhbWUsIHdlJ2xsIHN3aXRjaCB0byB0aGF0IHJlcXVlc3RlZCBmcmFtZSAqLwotCWlmICgoKmYpID09ICZjYW0tPmZyYW1lX3RtcCAmJiAqY2FtLT5yZXF1ZXN0ZWRfZnJhbWUpIHsKLQkJaWYgKGNhbS0+ZnJhbWVfdG1wLnN0YXR1cyA9PSBGX0dSQUJCSU5HKSB7Ci0JCQl3OTk2OGNmX3BvcF9mcmFtZShjYW0sICZjYW0tPmZyYW1lX2N1cnJlbnQpOwotCQkJKCpmKS0+c3RhdHVzID0gRl9HUkFCQklORzsKLQkJCSgqZiktPmxlbmd0aCA9IGNhbS0+ZnJhbWVfdG1wLmxlbmd0aDsKLQkJCW1lbWNweSgoKmYpLT5idWZmZXIsIGNhbS0+ZnJhbWVfdG1wLmJ1ZmZlciwKLQkJCSAgICAgICAoKmYpLT5sZW5ndGgpOwotCQkJREJHKDYsICJTd2l0Y2hlZCBmcm9tIHRlbXAuIGZyYW1lIHRvIGZyYW1lICMlZCIsCi0JCQkgICAgKCpmKS0+bnVtYmVyKQotCQl9Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgewotCQlsZW4gPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGg7Ci0JCXN0YXR1cyA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzOwotCQlwb3MgPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCArIHVyYi0+dHJhbnNmZXJfYnVmZmVyOwotCi0JCWlmIChzdGF0dXMgJiYgbGVuICE9IDApIHsKLQkJCURCRyg0LCAiVVJCIGZhaWxlZCwgZXJyb3IgaW4gZGF0YSBwYWNrZXQgIgotCQkJICAgICAgICIoZXJyb3IgIyV1LCAlcykiLAotCQkJICAgIHN0YXR1cywgc3ltYm9saWModXJiX2Vycmxpc3QsIHN0YXR1cykpCi0JCQkoKmYpLT5zdGF0dXMgPSBGX0VSUk9SOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAobGVuKSB7IC8qIHN0YXJ0IG9mIGZyYW1lICovCi0KLQkJCWlmICgoKmYpLT5zdGF0dXMgPT0gRl9VTlVTRUQpIHsKLQkJCQkoKmYpLT5zdGF0dXMgPSBGX0dSQUJCSU5HOwotCQkJCSgqZiktPmxlbmd0aCA9IDA7Ci0JCQl9Ci0KLQkJCS8qIEJ1ZmZlciBvdmVyZmxvd3Mgc2hvdWxkbid0IGhhcHBlbiwgaG93ZXZlci4uLiovCi0JCQlpZiAoKCpmKS0+bGVuZ3RoICsgbGVuID4gKCpmKS0+c2l6ZSkgewotCQkJCURCRyg0LCAiQnVmZmVyIG92ZXJmbG93OiBiYWQgZGF0YSBwYWNrZXRzIikKLQkJCQkoKmYpLT5zdGF0dXMgPSBGX0VSUk9SOwotCQkJfQotCi0JCQlpZiAoKCpmKS0+c3RhdHVzID09IEZfR1JBQkJJTkcpIHsKLQkJCQltZW1jcHkoKCpmKS0+YnVmZmVyICsgKCpmKS0+bGVuZ3RoLCBwb3MsIGxlbik7Ci0JCQkJKCpmKS0+bGVuZ3RoICs9IGxlbjsKLQkJCX0KLQotCQl9IGVsc2UgaWYgKCgqZiktPnN0YXR1cyA9PSBGX0dSQUJCSU5HKSB7IC8qIGVuZCBvZiBmcmFtZSAqLwotCi0JCQlEQkcoNiwgIkZyYW1lICMlZCBzdWNjZXNzZnVsbHkgZ3JhYmJlZCIsICgqZiktPm51bWJlcikKLQotCQkJaWYgKGNhbS0+dnBwX2ZsYWcgJiBWUFBfREVDT01QUkVTU0lPTikgewotCQkJCWVyciA9IHc5OTY4Y2ZfdnBwLT5jaGVja19oZWFkZXJzKCgqZiktPmJ1ZmZlciwKLQkJCQkJCQkJICgqZiktPmxlbmd0aCk7Ci0JCQkJaWYgKGVycikgewotCQkJCQlEQkcoNCwgIlNraXAgY29ycnVwdGVkIGZyYW1lOiAlcyIsCi0JCQkJCSAgICBzeW1ib2xpYyhkZWNvZGVyX2Vycmxpc3QsIGVycikpCi0JCQkJCSgqZiktPnN0YXR1cyA9IEZfVU5VU0VEOwotCQkJCQljb250aW51ZTsgLyogZ3JhYiB0aGlzIGZyYW1lIGFnYWluICovCi0JCQkJfQotCQkJfQotCi0JCQkoKmYpLT5zdGF0dXMgPSBGX1JFQURZOwotCQkJKCpmKS0+cXVldWVkID0gMDsKLQotCQkJLyogVGFrZSBhIHBvaW50ZXIgdG8gdGhlIG5ldyBmcmFtZSBmcm9tIHRoZSBGSUZPIGxpc3QuCi0JCQkgICBJZiB0aGUgbGlzdCBpcyBlbXB0eSx3ZSdsbCB1c2UgdGhlIHRlbXBvcmFyeSBmcmFtZSovCi0JCQlpZiAoKmNhbS0+cmVxdWVzdGVkX2ZyYW1lKQotCQkJCXc5OTY4Y2ZfcG9wX2ZyYW1lKGNhbSwgJmNhbS0+ZnJhbWVfY3VycmVudCk7Ci0JCQllbHNlIHsKLQkJCQljYW0tPmZyYW1lX2N1cnJlbnQgPSAmY2FtLT5mcmFtZV90bXA7Ci0JCQkJKCpmKS0+c3RhdHVzID0gRl9VTlVTRUQ7Ci0JCQl9Ci0KLQkJfSBlbHNlIGlmICgoKmYpLT5zdGF0dXMgPT0gRl9FUlJPUikKLQkJCSgqZiktPnN0YXR1cyA9IEZfVU5VU0VEOyAvKiBncmFiIGl0IGFnYWluICovCi0KLQkJUERCR0coIkZyYW1lIGxlbmd0aCAlbHUgfCBwYWNrLiMldSB8IHBhY2subGVuLiAldSB8IHN0YXRlICVkIiwKLQkJICAgICAgKHVuc2lnbmVkIGxvbmcpKCpmKS0+bGVuZ3RoLCBpLCBsZW4sICgqZiktPnN0YXR1cykKLQotCX0gLyogZW5kIGZvciAqLwotCi0JLyogUmVzdWJtaXQgdGhpcyBVUkIgKi8KLQl1cmItPmRldiA9IGNhbS0+dXNiZGV2OwotCXVyYi0+c3RhdHVzID0gMDsKLQlzcGluX2xvY2soJmNhbS0+dXJiX2xvY2spOwotCWlmIChjYW0tPnN0cmVhbWluZykKLQkJaWYgKChlcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSkgewotCQkJY2FtLT5taXNjb25maWd1cmVkID0gMTsKLQkJCURCRygxLCAiQ291bGRuJ3QgcmVzdWJtaXQgdGhlIFVSQjogZXJyb3IgJWQsICVzIiwKLQkJCSAgICBlcnIsIHN5bWJvbGljKHVyYl9lcnJsaXN0LCBlcnIpKQotCQl9Ci0Jc3Bpbl91bmxvY2soJmNhbS0+dXJiX2xvY2spOwotCi0JLyogV2FrZSB1cCB0aGUgdXNlciBwcm9jZXNzICovCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjYW0tPndhaXRfcXVldWUpOwotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIFNldHVwIHRoZSBVUkIgc3RydWN0dXJlcyBmb3IgdGhlIGlzb2Nocm9ub3VzIHRyYW5zZmVyLgotICBTdWJtaXQgdGhlIFVSQnMgc28gdGhhdCB0aGUgZGF0YSB0cmFuc2ZlciBiZWdpbnMuCi0gIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgbnVtYmVyIG90aGVyd2lzZS4KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQgdzk5NjhjZl9zdGFydF90cmFuc2ZlcihzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGNhbS0+dXNiZGV2OwotCXN0cnVjdCB1cmIqIHVyYjsKLQljb25zdCB1MTYgcF9zaXplID0gd01heFBhY2tldFNpemVbY2FtLT5hbHRzZXR0aW5nLTFdOwotCXUxNiB3LCBoLCBkOwotCWludCB2aWRjYXB0OwotCXUzMiB0X3NpemU7Ci0JaW50IGVyciA9IDA7Ci0JczggaSwgajsKLQotCWZvciAoaSA9IDA7IGkgPCBXOTk2OENGX1VSQlM7IGkrKykgewotCQl1cmIgPSB1c2JfYWxsb2NfdXJiKFc5OTY4Q0ZfSVNPX1BBQ0tFVFMsIEdGUF9LRVJORUwpOwotCQlpZiAoIXVyYikgewotCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykKLQkJCQl1c2JfZnJlZV91cmIoY2FtLT51cmJbal0pOwotCQkJREJHKDEsICJDb3VsZG4ndCBhbGxvY2F0ZSB0aGUgVVJCIHN0cnVjdHVyZXMiKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQotCQljYW0tPnVyYltpXSA9IHVyYjsKLQkJdXJiLT5kZXYgPSB1ZGV2OwotCQl1cmItPmNvbnRleHQgPSAodm9pZCopY2FtOwotCQl1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUodWRldiwgMSk7Ci0JCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7Ci0JCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBXOTk2OENGX0lTT19QQUNLRVRTOwotCQl1cmItPmNvbXBsZXRlID0gdzk5NjhjZl91cmJfY29tcGxldGU7Ci0JCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gY2FtLT50cmFuc2Zlcl9idWZmZXJbaV07Ci0JCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHBfc2l6ZSpXOTk2OENGX0lTT19QQUNLRVRTOwotCQl1cmItPmludGVydmFsID0gMTsKLQkJZm9yIChqID0gMDsgaiA8IFc5OTY4Q0ZfSVNPX1BBQ0tFVFM7IGorKykgewotCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5vZmZzZXQgPSBwX3NpemUqajsKLQkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ubGVuZ3RoID0gcF9zaXplOwotCQl9Ci0JfQotCi0JLyogVHJhbnNmZXIgc2l6ZSBwZXIgZnJhbWUsIGluIFdPUkQgISAqLwotCWQgPSBjYW0tPmh3X2RlcHRoOwotCXcgPSBjYW0tPmh3X3dpZHRoOwotCWggPSBjYW0tPmh3X2hlaWdodDsKLQotCXRfc2l6ZSA9ICh3KmgqZCkvMTY7Ci0KLQllcnIgPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4YmYxNywgMHgwMCk7IC8qIHJlc2V0IGV2ZXJ5dGhpbmcgKi8KLQllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweGJmMTAsIDB4MDApOyAvKiBub3JtYWwgb3BlcmF0aW9uICovCi0KLQkvKiBUcmFuc2ZlciBzaXplICovCi0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgdF9zaXplICYgMHhmZmZmLCAweDNkKTsgLyogbG93IGJpdHMgKi8KLQllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB0X3NpemUgPj4gMTYsIDB4M2UpOyAgICAvKiBoaWdoIGJpdHMgKi8KLQotCWlmIChjYW0tPnZwcF9mbGFnICYgVlBQX0RFQ09NUFJFU1NJT04pCi0JCWVyciArPSB3OTk2OGNmX3VwbG9hZF9xdWFudGl6YXRpb250YWJsZXMoY2FtKTsKLQotCXZpZGNhcHQgPSB3OTk2OGNmX3JlYWRfcmVnKGNhbSwgMHgxNik7IC8qIHJlYWQgcGljdHVyZSBzZXR0aW5ncyAqLwotCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHZpZGNhcHR8MHg4MDAwLCAweDE2KTsgLyogY2FwdC4gZW5hYmxlICovCi0KLQllcnIgKz0gdXNiX3NldF9pbnRlcmZhY2UodWRldiwgMCwgY2FtLT5hbHRzZXR0aW5nKTsKLQllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweDhhMDUsIDB4M2MpOyAvKiBVU0IgRklGTyBlbmFibGUgKi8KLQotCWlmIChlcnIgfHwgKHZpZGNhcHQgPCAwKSkgewotCQlmb3IgKGkgPSAwOyBpIDwgVzk5NjhDRl9VUkJTOyBpKyspCi0JCQl1c2JfZnJlZV91cmIoY2FtLT51cmJbaV0pOwotCQlEQkcoMSwgIkNvdWxkbid0IHRlbGwgdGhlIGNhbWVyYSB0byBzdGFydCB0aGUgZGF0YSB0cmFuc2ZlciIpCi0JCXJldHVybiBlcnI7Ci0JfQotCi0Jdzk5NjhjZl9pbml0X2ZyYW1lbGlzdChjYW0pOwotCi0JLyogQmVnaW4gdG8gZ3JhYiBpbnRvIHRoZSB0ZW1wb3JhcnkgYnVmZmVyICovCi0JY2FtLT5mcmFtZV90bXAuc3RhdHVzID0gRl9VTlVTRUQ7Ci0JY2FtLT5mcmFtZV90bXAucXVldWVkID0gMDsKLQljYW0tPmZyYW1lX2N1cnJlbnQgPSAmY2FtLT5mcmFtZV90bXA7Ci0KLQlpZiAoIShjYW0tPnZwcF9mbGFnICYgVlBQX0RFQ09NUFJFU1NJT04pKQotCQlEQkcoNSwgIklzb2Nocm9ub3VzIHRyYW5zZmVyIHNpemU6ICVsdSBieXRlcy9mcmFtZSIsCi0JCSAgICAodW5zaWduZWQgbG9uZyl0X3NpemUqMikKLQotCURCRyg1LCAiU3RhcnRpbmcgdGhlIGlzb2Nocm9ub3VzIHRyYW5zZmVyLi4uIikKLQotCWNhbS0+c3RyZWFtaW5nID0gMTsKLQotCS8qIFN1Ym1pdCB0aGUgVVJCcyAqLwotCWZvciAoaSA9IDA7IGkgPCBXOTk2OENGX1VSQlM7IGkrKykgewotCQllcnIgPSB1c2Jfc3VibWl0X3VyYihjYW0tPnVyYltpXSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChlcnIpIHsKLQkJCWNhbS0+c3RyZWFtaW5nID0gMDsKLQkJCWZvciAoaiA9IGktMTsgaiA+PSAwOyBqLS0pIHsKLQkJCQl1c2Jfa2lsbF91cmIoY2FtLT51cmJbal0pOwotCQkJCXVzYl9mcmVlX3VyYihjYW0tPnVyYltqXSk7Ci0JCQl9Ci0JCQlEQkcoMSwgIkNvdWxkbid0IHNlbmQgYSB0cmFuc2ZlciByZXF1ZXN0IHRvIHRoZSAiCi0JCQkgICAgICAgIlVTQiBjb3JlIChlcnJvciAjJWQsICVzKSIsIGVyciwKLQkJCSAgICBzeW1ib2xpYyh1cmJfZXJybGlzdCwgZXJyKSkKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIFN0b3AgdGhlIGlzb2Nocm9ub3VzIHRyYW5zZmVyIGFuZCBzZXQgYWx0ZXJuYXRlIHNldHRpbmcgdG8gMCAoME1iL3MpLgotICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIG51bWJlciBvdGhlcndpc2UuCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQgdzk5NjhjZl9zdG9wX3RyYW5zZmVyKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQotewotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gY2FtLT51c2JkZXY7Ci0JdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOwotCWludCBlcnIgPSAwOwotCXM4IGk7Ci0KLQlpZiAoIWNhbS0+c3RyZWFtaW5nKQotCQlyZXR1cm4gMDsKLQotCS8qIFRoaXMgYXZvaWRzIHJhY2UgY29uZGl0aW9ucyB3aXRoIHVzYl9zdWJtaXRfdXJiKCkKLQkgICBpbiB0aGUgVVJCIGNvbXBsZXRpdGlvbiBoYW5kbGVyICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+dXJiX2xvY2ssIGxvY2tfZmxhZ3MpOwotCWNhbS0+c3RyZWFtaW5nID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPnVyYl9sb2NrLCBsb2NrX2ZsYWdzKTsKLQotCWZvciAoaSA9IFc5OTY4Q0ZfVVJCUy0xOyBpID49IDA7IGktLSkKLQkJaWYgKGNhbS0+dXJiW2ldKSB7Ci0JCQl1c2Jfa2lsbF91cmIoY2FtLT51cmJbaV0pOwotCQkJdXNiX2ZyZWVfdXJiKGNhbS0+dXJiW2ldKTsKLQkJCWNhbS0+dXJiW2ldID0gTlVMTDsKLQkJfQotCi0JaWYgKGNhbS0+ZGlzY29ubmVjdGVkKQotCQlnb3RvIGV4aXQ7Ci0KLQllcnIgPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4MGEwNSwgMHgzYyk7IC8qIHN0b3AgVVNCIHRyYW5zZmVyICovCi0JZXJyICs9IHVzYl9zZXRfaW50ZXJmYWNlKHVkZXYsIDAsIDApOyAvKiAwIE1iL3MgKi8KLQllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweDAwMDAsIDB4MzkpOyAvKiBkaXNhYmxlIEpQRUcgZW5jb2RlciAqLwotCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4MDAwMCwgMHgxNik7IC8qIHN0b3AgdmlkZW8gY2FwdHVyZSAqLwotCi0JaWYgKGVycikgewotCQlEQkcoMiwgIkZhaWxlZCB0byB0ZWxsIHRoZSBjYW1lcmEgdG8gc3RvcCB0aGUgaXNvY2hyb25vdXMgIgotCQkgICAgICAgInRyYW5zZmVyLiBIb3dldmVyIHRoaXMgaXMgbm90IGEgY3JpdGljYWwgZXJyb3IuIikKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi1leGl0OgotCURCRyg1LCAiSXNvY2hyb25vdXMgdHJhbnNmZXIgc3RvcHBlZCIpCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBXcml0ZSBhIFc5OTY4Q0YgcmVnaXN0ZXIuCi0gIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG90aGVyd2lzZS4KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludCB3OTk2OGNmX3dyaXRlX3JlZyhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgdTE2IHZhbHVlLCB1MTYgaW5kZXgpCi17Ci0Jc3RydWN0IHVzYl9kZXZpY2UqIHVkZXYgPSBjYW0tPnVzYmRldjsKLQlpbnQgcmVzOwotCi0JcmVzID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMCwKLQkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0RFVklDRSwKLQkJCSAgICAgIHZhbHVlLCBpbmRleCwgTlVMTCwgMCwgVzk5NjhDRl9VU0JfQ1RSTF9USU1FT1VUKTsKLQotCWlmIChyZXMgPCAwKQotCQlEQkcoNCwgIkZhaWxlZCB0byB3cml0ZSBhIHJlZ2lzdGVyICIKLQkJICAgICAgICIodmFsdWUgMHglMDRYLCBpbmRleCAweCUwMlgsIGVycm9yICMlZCwgJXMpIiwKLQkJICAgIHZhbHVlLCBpbmRleCwgcmVzLCBzeW1ib2xpYyh1cmJfZXJybGlzdCwgcmVzKSkKLQotCXJldHVybiAocmVzID49IDApID8gMCA6IC0xOwotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgUmVhZCBhIFc5OTY4Q0YgcmVnaXN0ZXIuCi0gIFJldHVybiB0aGUgcmVnaXN0ZXIgdmFsdWUgb24gc3VjY2VzcywgLTEgb3RoZXJ3aXNlLgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50IHc5OTY4Y2ZfcmVhZF9yZWcoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sIHUxNiBpbmRleCkKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSogdWRldiA9IGNhbS0+dXNiZGV2OwotCXUxNiogYnVmZiA9IGNhbS0+Y29udHJvbF9idWZmZXI7Ci0JaW50IHJlczsKLQotCXJlcyA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIDEsCi0JCQkgICAgICBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKLQkJCSAgICAgIDAsIGluZGV4LCBidWZmLCAyLCBXOTk2OENGX1VTQl9DVFJMX1RJTUVPVVQpOwotCi0JaWYgKHJlcyA8IDApCi0JCURCRyg0LCAiRmFpbGVkIHRvIHJlYWQgYSByZWdpc3RlciAiCi0JCSAgICAgICAiKGluZGV4IDB4JTAyWCwgZXJyb3IgIyVkLCAlcykiLAotCQkgICAgaW5kZXgsIHJlcywgc3ltYm9saWModXJiX2Vycmxpc3QsIHJlcykpCi0KLQlyZXR1cm4gKHJlcyA+PSAwKSA/IChpbnQpKCpidWZmKSA6IC0xOwotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgV3JpdGUgNjQtYml0IGRhdGEgdG8gdGhlIGZhc3Qgc2VyaWFsIGJ1cyByZWdpc3RlcnMuCi0gIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG90aGVyd2lzZS4KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludCB3OTk2OGNmX3dyaXRlX2ZzYihzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgdTE2KiBkYXRhKQotewotCXN0cnVjdCB1c2JfZGV2aWNlKiB1ZGV2ID0gY2FtLT51c2JkZXY7Ci0JdTE2IHZhbHVlOwotCWludCByZXM7Ci0KLQl2YWx1ZSA9ICpkYXRhKys7Ci0KLQlyZXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAwLAotCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQgfCBVU0JfUkVDSVBfREVWSUNFLAotCQkJICAgICAgdmFsdWUsIDB4MDYsIGRhdGEsIDYsIFc5OTY4Q0ZfVVNCX0NUUkxfVElNRU9VVCk7Ci0KLQlpZiAocmVzIDwgMCkKLQkJREJHKDQsICJGYWlsZWQgdG8gd3JpdGUgdGhlIEZTQiByZWdpc3RlcnMgIgotCQkgICAgICAgIihlcnJvciAjJWQsICVzKSIsIHJlcywgc3ltYm9saWModXJiX2Vycmxpc3QsIHJlcykpCi0KLQlyZXR1cm4gKHJlcyA+PSAwKSA/IDAgOiAtMTsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIFdyaXRlIGRhdGEgdG8gdGhlIHNlcmlhbCBidXMgY29udHJvbCByZWdpc3Rlci4KLSAgUmV0dXJuIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50IHc5OTY4Y2Zfd3JpdGVfc2Ioc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sIHUxNiB2YWx1ZSkKLXsKLQlpbnQgZXJyID0gMDsKLQotCWVyciA9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgdmFsdWUsIDB4MDEpOwotCXVkZWxheShXOTk2OENGX0kyQ19CVVNfREVMQVkpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIFJlYWQgZGF0YSBmcm9tIHRoZSBzZXJpYWwgYnVzIGNvbnRyb2wgcmVnaXN0ZXIuCi0gIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgbnVtYmVyIG90aGVyd2lzZS4KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludCB3OTk2OGNmX3JlYWRfc2Ioc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCi17Ci0JaW50IHYgPSAwOwotCi0JdiA9IHc5OTY4Y2ZfcmVhZF9yZWcoY2FtLCAweDAxKTsKLQl1ZGVsYXkoVzk5NjhDRl9JMkNfQlVTX0RFTEFZKTsKLQotCXJldHVybiB2OwotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgVXBsb2FkIHF1YW50aXphdGlvbiB0YWJsZXMgZm9yIHRoZSBKUEVHIGNvbXByZXNzaW9uLgotICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB3OTk2OGNmX3N0YXJ0X3RyYW5zZmVyKCkuCi0gIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgbnVtYmVyIG90aGVyd2lzZS4KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludCB3OTk2OGNmX3VwbG9hZF9xdWFudGl6YXRpb250YWJsZXMoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCi17Ci0JdTE2IGEsIGI7Ci0JaW50IGVyciA9IDAsIGksIGo7Ci0KLQllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweDAwMTAsIDB4MzkpOyAvKiBKUEVHIGNsb2NrIGVuYWJsZSAqLwotCi0JZm9yIChpID0gMCwgaiA9IDA7IGkgPCAzMjsgaSsrLCBqICs9IDIpIHsKLQkJYSA9IFlfUVVBTlRBQkxFW2pdIHwgKCh1bnNpZ25lZCkoWV9RVUFOVEFCTEVbaisxXSkgPDwgOCk7Ci0JCWIgPSBVVl9RVUFOVEFCTEVbal0gfCAoKHVuc2lnbmVkKShVVl9RVUFOVEFCTEVbaisxXSkgPDwgOCk7Ci0JCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIGEsIDB4NDAraSk7Ci0JCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIGIsIDB4NjAraSk7Ci0JfQotCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4MDAxMiwgMHgzOSk7IC8qIEpQRUcgZW5jb2RlciBlbmFibGUgKi8KLQotCXJldHVybiBlcnI7Ci19Ci0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogTG93LWxldmVsIEkyQyBJL08gZnVuY3Rpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgSTJDIHRyYW5zZmVyIGZ1bmN0aW9uczogICAgICAgICAgICAgICAqCi0gKiBpMmNfYWRhcF9mYXN0d3JpdGVfYnl0ZV9kYXRhKCkgKGF0IDQwMCBrSHogYml0IGZyZXF1ZW5jeSBvbmx5KSAgICAgICAgICAgKgotICogaTJjX2FkYXBfcmVhZF9ieXRlX2RhdGEoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIGkyY19hZGFwX3JlYWRfYnl0ZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGludCB3OTk2OGNmX3NtYnVzX3N0YXJ0KHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQotewotCWludCBlcnIgPSAwOwotCi0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfc2IoY2FtLCAweDAwMTEpOyAvKiBTREU9MSwgU0RBPTAsIFNDTD0xICovCi0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfc2IoY2FtLCAweDAwMTApOyAvKiBTREU9MSwgU0RBPTAsIFNDTD0wICovCi0KLQlyZXR1cm4gZXJyOwotfQotCi0KLXN0YXRpYyBpbnQgdzk5NjhjZl9zbWJ1c19zdG9wKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQotewotCWludCBlcnIgPSAwOwotCi0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfc2IoY2FtLCAweDAwMTEpOyAvKiBTREU9MSwgU0RBPTAsIFNDTD0xICovCi0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfc2IoY2FtLCAweDAwMTMpOyAvKiBTREU9MSwgU0RBPTEsIFNDTD0xICovCi0KLQlyZXR1cm4gZXJyOwotfQotCi0KLXN0YXRpYyBpbnQgdzk5NjhjZl9zbWJ1c193cml0ZV9ieXRlKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCB1OCB2KQotewotCXU4IGJpdDsKLQlpbnQgZXJyID0gMCwgc2RhOwotCi0JZm9yIChiaXQgPSAwIDsgYml0IDwgOCA7IGJpdCsrKSB7Ci0JCXNkYSA9ICh2ICYgMHg4MCkgPyAyIDogMDsKLQkJdiA8PD0gMTsKLQkJLyogU0RFPTEsIFNEQT1zZGEsIFNDTD0wICovCi0JCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgxMCB8IHNkYSk7Ci0JCS8qIFNERT0xLCBTREE9c2RhLCBTQ0w9MSAqLwotCQllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MTEgfCBzZGEpOwotCQkvKiBTREU9MSwgU0RBPXNkYSwgU0NMPTAgKi8KLQkJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfc2IoY2FtLCAweDEwIHwgc2RhKTsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0KLXN0YXRpYyBpbnQgdzk5NjhjZl9zbWJ1c19yZWFkX2J5dGUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sIHU4KiB2KQotewotCXU4IGJpdDsKLQlpbnQgZXJyID0gMDsKLQotCSp2ID0gMDsKLQlmb3IgKGJpdCA9IDAgOyBiaXQgPCA4IDsgYml0KyspIHsKLQkJKnYgPDw9IDE7Ci0JCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgwMDEzKTsKLQkJKnYgfD0gKHc5OTY4Y2ZfcmVhZF9zYihjYW0pICYgMHgwMDA4KSA/IDEgOiAwOwotCQllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MDAxMik7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotCi1zdGF0aWMgaW50IHc5OTY4Y2Zfc21idXNfd3JpdGVfYWNrKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQotewotCWludCBlcnIgPSAwOwotCi0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfc2IoY2FtLCAweDAwMTApOyAvKiBTREU9MSwgU0RBPTAsIFNDTD0wICovCi0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfc2IoY2FtLCAweDAwMTEpOyAvKiBTREU9MSwgU0RBPTAsIFNDTD0xICovCi0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfc2IoY2FtLCAweDAwMTApOyAvKiBTREU9MSwgU0RBPTAsIFNDTD0wICovCi0KLQlyZXR1cm4gZXJyOwotfQotCi0KLXN0YXRpYyBpbnQgdzk5NjhjZl9zbWJ1c19yZWFkX2FjayhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKLXsKLQlpbnQgZXJyID0gMCwgc2RhOwotCi0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfc2IoY2FtLCAweDAwMTMpOyAvKiBTREU9MSwgU0RBPTEsIFNDTD0xICovCi0Jc2RhID0gKHc5OTY4Y2ZfcmVhZF9zYihjYW0pICYgMHgwOCkgPyAxIDogMDsgLyogc2RhID0gU0RBICovCi0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfc2IoY2FtLCAweDAwMTIpOyAvKiBTREU9MSwgU0RBPTEsIFNDTD0wICovCi0JaWYgKHNkYSA8IDApCi0JCWVyciArPSBzZGE7Ci0JaWYgKHNkYSA9PSAxKSB7Ci0JCURCRyg2LCAiQ291bGRuJ3QgcmVjZWl2ZSB0aGUgQUNLIikKLQkJZXJyICs9IC0xOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLQotLyogVGhpcyBzZWVtcyB0byByZWZyZXNoIHRoZSBjb21tdW5pY2F0aW9uIHRocm91Z2ggdGhlIHNlcmlhbCBidXMgKi8KLXN0YXRpYyBpbnQgdzk5NjhjZl9zbWJ1c19yZWZyZXNoX2J1cyhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKLXsKLQlpbnQgZXJyID0gMCwgajsKLQotCWZvciAoaiA9IDE7IGogPD0gMTA7IGorKykgewotCQllcnIgPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4MDAyMCwgMHgwMSk7Ci0JCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4MDAwMCwgMHgwMSk7Ci0JCWlmIChlcnIpCi0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0KLS8qIFNNQnVzIHByb3RvY29sOiBTIEFkZHIgV3IgW0FdIFN1YmFkZHIgW0FdIFZhbHVlIFtBXSBQICovCi1zdGF0aWMgaW50Ci13OTk2OGNmX2kyY19hZGFwX2Zhc3R3cml0ZV9ieXRlX2RhdGEoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sCi0JCQkJICAgICB1MTYgYWRkcmVzcywgdTggc3ViYWRkcmVzcyx1OCB2YWx1ZSkKLXsKLQl1MTYqIGRhdGEgPSBjYW0tPmRhdGFfYnVmZmVyOwotCWludCBlcnIgPSAwOwotCi0JZXJyICs9IHc5OTY4Y2Zfc21idXNfcmVmcmVzaF9idXMoY2FtKTsKLQotCS8qIEVuYWJsZSBTQlVTIG91dHB1dHMgKi8KLQllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MDAyMCk7Ci0KLQlkYXRhWzBdID0gMHgwODJmIHwgKChhZGRyZXNzICYgMHg4MCkgPyAweDE1MDAgOiAweDApOwotCWRhdGFbMF0gfD0gKGFkZHJlc3MgJiAweDQwKSA/IDB4NDAwMCA6IDB4MDsKLQlkYXRhWzFdID0gMHgyMDgyIHwgKChhZGRyZXNzICYgMHg0MCkgPyAweDAwMDUgOiAweDApOwotCWRhdGFbMV0gfD0gKGFkZHJlc3MgJiAweDIwKSA/IDB4MDE1MCA6IDB4MDsKLQlkYXRhWzFdIHw9IChhZGRyZXNzICYgMHgxMCkgPyAweDU0MDAgOiAweDA7Ci0JZGF0YVsyXSA9IDB4ODIwOCB8ICgoYWRkcmVzcyAmIDB4MDgpID8gMHgwMDE1IDogMHgwKTsKLQlkYXRhWzJdIHw9IChhZGRyZXNzICYgMHgwNCkgPyAweDA1NDAgOiAweDA7Ci0JZGF0YVsyXSB8PSAoYWRkcmVzcyAmIDB4MDIpID8gMHg1MDAwIDogMHgwOwotCWRhdGFbM10gPSAweDFkMjAgfCAoKGFkZHJlc3MgJiAweDAyKSA/IDB4MDAwMSA6IDB4MCk7Ci0JZGF0YVszXSB8PSAoYWRkcmVzcyAmIDB4MDEpID8gMHgwMDU0IDogMHgwOwotCi0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfZnNiKGNhbSwgZGF0YSk7Ci0KLQlkYXRhWzBdID0gMHg4MjA4IHwgKChzdWJhZGRyZXNzICYgMHg4MCkgPyAweDAwMTUgOiAweDApOwotCWRhdGFbMF0gfD0gKHN1YmFkZHJlc3MgJiAweDQwKSA/IDB4MDU0MCA6IDB4MDsKLQlkYXRhWzBdIHw9IChzdWJhZGRyZXNzICYgMHgyMCkgPyAweDUwMDAgOiAweDA7Ci0JZGF0YVsxXSA9IDB4MDgyMCB8ICgoc3ViYWRkcmVzcyAmIDB4MjApID8gMHgwMDAxIDogMHgwKTsKLQlkYXRhWzFdIHw9IChzdWJhZGRyZXNzICYgMHgxMCkgPyAweDAwNTQgOiAweDA7Ci0JZGF0YVsxXSB8PSAoc3ViYWRkcmVzcyAmIDB4MDgpID8gMHgxNTAwIDogMHgwOwotCWRhdGFbMV0gfD0gKHN1YmFkZHJlc3MgJiAweDA0KSA/IDB4NDAwMCA6IDB4MDsKLQlkYXRhWzJdID0gMHgyMDgyIHwgKChzdWJhZGRyZXNzICYgMHgwNCkgPyAweDAwMDUgOiAweDApOwotCWRhdGFbMl0gfD0gKHN1YmFkZHJlc3MgJiAweDAyKSA/IDB4MDE1MCA6IDB4MDsKLQlkYXRhWzJdIHw9IChzdWJhZGRyZXNzICYgMHgwMSkgPyAweDU0MDAgOiAweDA7Ci0JZGF0YVszXSA9IDB4MDAxZDsKLQotCWVyciArPSB3OTk2OGNmX3dyaXRlX2ZzYihjYW0sIGRhdGEpOwotCi0JZGF0YVswXSA9IDB4ODIwOCB8ICgodmFsdWUgJiAweDgwKSA/IDB4MDAxNSA6IDB4MCk7Ci0JZGF0YVswXSB8PSAodmFsdWUgJiAweDQwKSA/IDB4MDU0MCA6IDB4MDsKLQlkYXRhWzBdIHw9ICh2YWx1ZSAmIDB4MjApID8gMHg1MDAwIDogMHgwOwotCWRhdGFbMV0gPSAweDA4MjAgfCAoKHZhbHVlICYgMHgyMCkgPyAweDAwMDEgOiAweDApOwotCWRhdGFbMV0gfD0gKHZhbHVlICYgMHgxMCkgPyAweDAwNTQgOiAweDA7Ci0JZGF0YVsxXSB8PSAodmFsdWUgJiAweDA4KSA/IDB4MTUwMCA6IDB4MDsKLQlkYXRhWzFdIHw9ICh2YWx1ZSAmIDB4MDQpID8gMHg0MDAwIDogMHgwOwotCWRhdGFbMl0gPSAweDIwODIgfCAoKHZhbHVlICYgMHgwNCkgPyAweDAwMDUgOiAweDApOwotCWRhdGFbMl0gfD0gKHZhbHVlICYgMHgwMikgPyAweDAxNTAgOiAweDA7Ci0JZGF0YVsyXSB8PSAodmFsdWUgJiAweDAxKSA/IDB4NTQwMCA6IDB4MDsKLQlkYXRhWzNdID0gMHhmZTFkOwotCi0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfZnNiKGNhbSwgZGF0YSk7Ci0KLQkvKiBEaXNhYmxlIFNCVVMgb3V0cHV0cyAqLwotCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgwMDAwKTsKLQotCWlmICghZXJyKQotCQlEQkcoNSwgIkkyQyB3cml0ZSBieXRlIGRhdGEgZG9uZSwgYWRkci4weCUwNFgsIHN1YmFkZHIuMHglMDJYICIKLQkJICAgICAgICJ2YWx1ZSAweCUwMlgiLCBhZGRyZXNzLCBzdWJhZGRyZXNzLCB2YWx1ZSkKLQllbHNlCi0JCURCRyg1LCAiSTJDIHdyaXRlIGJ5dGUgZGF0YSBmYWlsZWQsIGFkZHIuMHglMDRYLCAiCi0JCSAgICAgICAic3ViYWRkci4weCUwMlgsIHZhbHVlIDB4JTAyWCIsCi0JCSAgICBhZGRyZXNzLCBzdWJhZGRyZXNzLCB2YWx1ZSkKLQotCXJldHVybiBlcnI7Ci19Ci0KLQotLyogU01CdXMgcHJvdG9jb2w6IFMgQWRkciBXciBbQV0gU3ViYWRkciBbQV0gUCBTIEFkZHIrMSBSZCBbQV0gW1ZhbHVlXSBOQSBQICovCi1zdGF0aWMgaW50Ci13OTk2OGNmX2kyY19hZGFwX3JlYWRfYnl0ZV9kYXRhKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLAotCQkJCXUxNiBhZGRyZXNzLCB1OCBzdWJhZGRyZXNzLAotCQkJCXU4KiB2YWx1ZSkKLXsKLQlpbnQgZXJyID0gMDsKLQotCS8qIFNlcmlhbCBkYXRhIGVuYWJsZSAqLwotCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgwMDEzKTsgLyogZG9uJ3QgY2hhbmdlICEgKi8KLQotCWVyciArPSB3OTk2OGNmX3NtYnVzX3N0YXJ0KGNhbSk7Ci0JZXJyICs9IHc5OTY4Y2Zfc21idXNfd3JpdGVfYnl0ZShjYW0sIGFkZHJlc3MpOwotCWVyciArPSB3OTk2OGNmX3NtYnVzX3JlYWRfYWNrKGNhbSk7Ci0JZXJyICs9IHc5OTY4Y2Zfc21idXNfd3JpdGVfYnl0ZShjYW0sIHN1YmFkZHJlc3MpOwotCWVyciArPSB3OTk2OGNmX3NtYnVzX3JlYWRfYWNrKGNhbSk7Ci0JZXJyICs9IHc5OTY4Y2Zfc21idXNfc3RvcChjYW0pOwotCWVyciArPSB3OTk2OGNmX3NtYnVzX3N0YXJ0KGNhbSk7Ci0JZXJyICs9IHc5OTY4Y2Zfc21idXNfd3JpdGVfYnl0ZShjYW0sIGFkZHJlc3MgKyAxKTsKLQllcnIgKz0gdzk5NjhjZl9zbWJ1c19yZWFkX2FjayhjYW0pOwotCWVyciArPSB3OTk2OGNmX3NtYnVzX3JlYWRfYnl0ZShjYW0sIHZhbHVlKTsKLQllcnIgKz0gdzk5NjhjZl9zbWJ1c193cml0ZV9hY2soY2FtKTsKLQllcnIgKz0gdzk5NjhjZl9zbWJ1c19zdG9wKGNhbSk7Ci0KLQkvKiBTZXJpYWwgZGF0YSBkaXNhYmxlICovCi0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfc2IoY2FtLCAweDAwMDApOwotCi0JaWYgKCFlcnIpCi0JCURCRyg1LCAiSTJDIHJlYWQgYnl0ZSBkYXRhIGRvbmUsIGFkZHIuMHglMDRYLCAiCi0JCSAgICAgICAic3ViYWRkci4weCUwMlgsIHZhbHVlIDB4JTAyWCIsCi0JCSAgICBhZGRyZXNzLCBzdWJhZGRyZXNzLCAqdmFsdWUpCi0JZWxzZQotCQlEQkcoNSwgIkkyQyByZWFkIGJ5dGUgZGF0YSBmYWlsZWQsIGFkZHIuMHglMDRYLCAiCi0JCSAgICAgICAic3ViYWRkci4weCUwMlgsIHdyb25nIHZhbHVlIDB4JTAyWCIsCi0JCSAgICBhZGRyZXNzLCBzdWJhZGRyZXNzLCAqdmFsdWUpCi0KLQlyZXR1cm4gZXJyOwotfQotCi0KLS8qIFNNQnVzIHByb3RvY29sOiBTIEFkZHIrMSBSZCBbQV0gW1ZhbHVlXSBOQSBQICovCi1zdGF0aWMgaW50Ci13OTk2OGNmX2kyY19hZGFwX3JlYWRfYnl0ZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwKLQkJCSAgIHUxNiBhZGRyZXNzLCB1OCogdmFsdWUpCi17Ci0JaW50IGVyciA9IDA7Ci0KLQkvKiBTZXJpYWwgZGF0YSBlbmFibGUgKi8KLQllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MDAxMyk7Ci0KLQllcnIgKz0gdzk5NjhjZl9zbWJ1c19zdGFydChjYW0pOwotCWVyciArPSB3OTk2OGNmX3NtYnVzX3dyaXRlX2J5dGUoY2FtLCBhZGRyZXNzICsgMSk7Ci0JZXJyICs9IHc5OTY4Y2Zfc21idXNfcmVhZF9hY2soY2FtKTsKLQllcnIgKz0gdzk5NjhjZl9zbWJ1c19yZWFkX2J5dGUoY2FtLCB2YWx1ZSk7Ci0JZXJyICs9IHc5OTY4Y2Zfc21idXNfd3JpdGVfYWNrKGNhbSk7Ci0JZXJyICs9IHc5OTY4Y2Zfc21idXNfc3RvcChjYW0pOwotCi0JLyogU2VyaWFsIGRhdGEgZGlzYWJsZSAqLwotCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgwMDAwKTsKLQotCWlmICghZXJyKQotCQlEQkcoNSwgIkkyQyByZWFkIGJ5dGUgZG9uZSwgYWRkci4weCUwNFgsICIKLQkJICAgICAgICJ2YWx1ZSAweCUwMlgiLCBhZGRyZXNzLCAqdmFsdWUpCi0JZWxzZQotCQlEQkcoNSwgIkkyQyByZWFkIGJ5dGUgZmFpbGVkLCBhZGRyLjB4JTA0WCwgIgotCQkgICAgICAgIndyb25nIHZhbHVlIDB4JTAyWCIsIGFkZHJlc3MsICp2YWx1ZSkKLQotCXJldHVybiBlcnI7Ci19Ci0KLQotLyogU01CdXMgcHJvdG9jb2w6IFMgQWRkciBXciBbQV0gVmFsdWUgW0FdIFAgKi8KLXN0YXRpYyBpbnQKLXc5OTY4Y2ZfaTJjX2FkYXBfd3JpdGVfYnl0ZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwKLQkJCSAgICB1MTYgYWRkcmVzcywgdTggdmFsdWUpCi17Ci0JREJHKDQsICJpMmNfd3JpdGVfYnl0ZSgpIGlzIGFuIHVuc3VwcG9ydGVkIHRyYW5zZmVyIG1vZGUiKQotCXJldHVybiAtRUlOVkFMOwotfQotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEkyQyBpbnRlcmZhY2UgdG8ga2VybmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGludAotdzk5NjhjZl9pMmNfc21idXNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBhZGRyLAotCQkgICAgICAgdW5zaWduZWQgc2hvcnQgZmxhZ3MsIGNoYXIgcmVhZF93cml0ZSwgdTggY29tbWFuZCwKLQkJICAgICAgIGludCBzaXplLCB1bmlvbiBpMmNfc21idXNfZGF0YSAqZGF0YSkKLXsKLQlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKTsKLQlzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UgKmNhbSA9IHRvX2NhbSh2NGwyX2Rldik7Ci0JdTggaTsKLQlpbnQgZXJyID0gMDsKLQotCWlmIChzaXplID09IEkyQ19TTUJVU19CWVRFKSB7Ci0JCS8qIFdoeSBhZGRyIDw8PSAxPyBTZWUgT1ZYWFgwX1NJRCBkZWZpbmVzIGluIG92Y2FtY2hpcC5oICovCi0JCWFkZHIgPDw9IDE7Ci0KLQkJaWYgKHJlYWRfd3JpdGUgPT0gSTJDX1NNQlVTX1dSSVRFKQotCQkJZXJyID0gdzk5NjhjZl9pMmNfYWRhcF93cml0ZV9ieXRlKGNhbSwgYWRkciwgY29tbWFuZCk7Ci0JCWVsc2UgaWYgKHJlYWRfd3JpdGUgPT0gSTJDX1NNQlVTX1JFQUQpCi0JCQlmb3IgKGkgPSAxOyBpIDw9IFc5OTY4Q0ZfSTJDX1JXX1JFVFJJRVM7IGkrKykgewotCQkJCWVyciA9IHc5OTY4Y2ZfaTJjX2FkYXBfcmVhZF9ieXRlKGNhbSwgYWRkciwKLQkJCQkJCQkgJmRhdGEtPmJ5dGUpOwotCQkJCWlmIChlcnIpIHsKLQkJCQkJaWYgKHc5OTY4Y2Zfc21idXNfcmVmcmVzaF9idXMoY2FtKSkgewotCQkJCQkJZXJyID0gLUVJTzsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfSBlbHNlCi0JCQkJCWJyZWFrOwotCQkJfQotCX0gZWxzZSBpZiAoc2l6ZSA9PSBJMkNfU01CVVNfQllURV9EQVRBKSB7Ci0JCWFkZHIgPDw9IDE7Ci0KLQkJaWYgKHJlYWRfd3JpdGUgPT0gSTJDX1NNQlVTX1dSSVRFKQotCQkJZXJyID0gdzk5NjhjZl9pMmNfYWRhcF9mYXN0d3JpdGVfYnl0ZV9kYXRhKGNhbSwgYWRkciwKLQkJCQkJCQkgIGNvbW1hbmQsIGRhdGEtPmJ5dGUpOwotCQllbHNlIGlmIChyZWFkX3dyaXRlID09IEkyQ19TTUJVU19SRUFEKSB7Ci0JCQlmb3IgKGkgPSAxOyBpIDw9IFc5OTY4Q0ZfSTJDX1JXX1JFVFJJRVM7IGkrKykgewotCQkJCWVyciA9IHc5OTY4Y2ZfaTJjX2FkYXBfcmVhZF9ieXRlX2RhdGEoY2FtLGFkZHIsCi0JCQkJCQkJIGNvbW1hbmQsICZkYXRhLT5ieXRlKTsKLQkJCQlpZiAoZXJyKSB7Ci0JCQkJCWlmICh3OTk2OGNmX3NtYnVzX3JlZnJlc2hfYnVzKGNhbSkpIHsKLQkJCQkJCWVyciA9IC1FSU87Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0gZWxzZQotCQkJCQlicmVhazsKLQkJCX0KLQotCQl9IGVsc2UKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JfSBlbHNlIHsKLQkJREJHKDQsICJVbnN1cHBvcnRlZCBJMkMgdHJhbnNmZXIgbW9kZSAoJWQpIiwgc2l6ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLQotc3RhdGljIHUzMiB3OTk2OGNmX2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciogYWRhcCkKLXsKLQlyZXR1cm4gSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFIHwKLQkgICAgICAgSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFX0RBVEEgIHwKLQkgICAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBOwotfQotCi0KLXN0YXRpYyBpbnQgdzk5NjhjZl9pMmNfaW5pdChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKLXsKLQlpbnQgZXJyID0gMDsKLQotCXN0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBhbGdvID0gewotCQkuc21idXNfeGZlciA9ICAgIHc5OTY4Y2ZfaTJjX3NtYnVzX3hmZXIsCi0JCS5mdW5jdGlvbmFsaXR5ID0gdzk5NjhjZl9pMmNfZnVuYywKLQl9OwotCi0Jc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBhZGFwID0gewotCQkub3duZXIgPSAgICAgICAgICAgICBUSElTX01PRFVMRSwKLQkJLmFsZ28gPSAgICAgICAgICAgICAgJmFsZ28sCi0JfTsKLQotCW1lbWNweSgmY2FtLT5pMmNfYWRhcHRlciwgJmFkYXAsIHNpemVvZihzdHJ1Y3QgaTJjX2FkYXB0ZXIpKTsKLQlzdHJjcHkoY2FtLT5pMmNfYWRhcHRlci5uYW1lLCAidzk5NjhjZiIpOwotCWNhbS0+aTJjX2FkYXB0ZXIuZGV2LnBhcmVudCA9ICZjYW0tPnVzYmRldi0+ZGV2OwotCWkyY19zZXRfYWRhcGRhdGEoJmNhbS0+aTJjX2FkYXB0ZXIsICZjYW0tPnY0bDJfZGV2KTsKLQotCURCRyg2LCAiUmVnaXN0ZXJpbmcgSTJDIGFkYXB0ZXIgd2l0aCBrZXJuZWwuLi4iKQotCi0JZXJyID0gaTJjX2FkZF9hZGFwdGVyKCZjYW0tPmkyY19hZGFwdGVyKTsKLQlpZiAoZXJyKQotCQlEQkcoMSwgIkZhaWxlZCB0byByZWdpc3RlciB0aGUgSTJDIGFkYXB0ZXIiKQotCWVsc2UKLQkJREJHKDUsICJJMkMgYWRhcHRlciByZWdpc3RlcmVkIikKLQotCXJldHVybiBlcnI7Ci19Ci0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogSGVscGVyIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIFR1cm4gb24gdGhlIExFRCBvbiBzb21lIHdlYmNhbXMuIEEgYmVlcCBzaG91bGQgYmUgaGVhcmQgdG9vLgotICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIG51bWJlciBvdGhlcndpc2UuCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQgdzk5NjhjZl90dXJuX29uX2xlZChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKLXsKLQlpbnQgZXJyID0gMDsKLQotCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4ZmYwMCwgMHgwMCk7IC8qIHBvd2VyLWRvd24gKi8KLQllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweGJmMTcsIDB4MDApOyAvKiByZXNldCBldmVyeXRoaW5nICovCi0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHhiZjEwLCAweDAwKTsgLyogbm9ybWFsIG9wZXJhdGlvbiAqLwotCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4MDAxMCwgMHgwMSk7IC8qIHNlcmlhbCBidXMsIFNEUyBoaWdoICovCi0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHgwMDAwLCAweDAxKTsgLyogc2VyaWFsIGJ1cywgU0RTIGxvdyAqLwotCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4MDAxMCwgMHgwMSk7IC8qIC4uaGlnaCAnYmVlcC1iZWVwJyAqLwotCi0JaWYgKGVycikKLQkJREJHKDIsICJDb3VsZG4ndCB0dXJuIG9uIHRoZSBMRUQiKQotCi0JREJHKDUsICJMRUQgdHVybmVkIG9uIikKLQotCXJldHVybiBlcnI7Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBXcml0ZSBzb21lIHJlZ2lzdGVycyBmb3IgdGhlIGRldmljZSBpbml0aWFsaXphdGlvbi4KLSAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBvbiBvcGVuKCkuCi0gIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgbnVtYmVyIG90aGVyd2lzZS4KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludCB3OTk2OGNmX2luaXRfY2hpcChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKLXsKLQl1bnNpZ25lZCBsb25nIGh3X2J1ZnNpemUgPSBjYW0tPm1heHdpZHRoKmNhbS0+bWF4aGVpZ2h0KjIsCi0JCSAgICAgIHkwID0gMHgwMDAwLAotCQkgICAgICB1MCA9IHkwICsgaHdfYnVmc2l6ZS8yLAotCQkgICAgICB2MCA9IHUwICsgaHdfYnVmc2l6ZS80LAotCQkgICAgICB5MSA9IHYwICsgaHdfYnVmc2l6ZS80LAotCQkgICAgICB1MSA9IHkxICsgaHdfYnVmc2l6ZS8yLAotCQkgICAgICB2MSA9IHUxICsgaHdfYnVmc2l6ZS80OwotCWludCBlcnIgPSAwOwotCi0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHhmZjAwLCAweDAwKTsgLyogcG93ZXIgb2ZmICovCi0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHhiZjEwLCAweDAwKTsgLyogcG93ZXIgb24gKi8KLQotCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4NDA1ZCwgMHgwMyk7IC8qIERSQU0gdGltaW5ncyAqLwotCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4MDAzMCwgMHgwNCk7IC8qIFNEUkFNIHRpbWluZ3MgKi8KLQotCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHkwICYgMHhmZmZmLCAweDIwKTsgLyogWSBidWYuMCwgbG93ICovCi0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgeTAgPj4gMTYsIDB4MjEpOyAgICAvKiBZIGJ1Zi4wLCBoaWdoICovCi0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgdTAgJiAweGZmZmYsIDB4MjQpOyAvKiBVIGJ1Zi4wLCBsb3cgKi8KLQllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB1MCA+PiAxNiwgMHgyNSk7ICAgIC8qIFUgYnVmLjAsIGhpZ2ggKi8KLQllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB2MCAmIDB4ZmZmZiwgMHgyOCk7IC8qIFYgYnVmLjAsIGxvdyAqLwotCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHYwID4+IDE2LCAweDI5KTsgICAgLyogViBidWYuMCwgaGlnaCAqLwotCi0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgeTEgJiAweGZmZmYsIDB4MjIpOyAvKiBZIGJ1Zi4xLCBsb3cgKi8KLQllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB5MSA+PiAxNiwgMHgyMyk7ICAgIC8qIFkgYnVmLjEsIGhpZ2ggKi8KLQllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB1MSAmIDB4ZmZmZiwgMHgyNik7IC8qIFUgYnVmLjEsIGxvdyAqLwotCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHUxID4+IDE2LCAweDI3KTsgICAgLyogVSBidWYuMSwgaGlnaCAqLwotCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHYxICYgMHhmZmZmLCAweDJhKTsgLyogViBidWYuMSwgbG93ICovCi0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgdjEgPj4gMTYsIDB4MmIpOyAgICAvKiBWIGJ1Zi4xLCBoaWdoICovCi0KLQllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB5MSAmIDB4ZmZmZiwgMHgzMik7IC8qIEpQRUcgYnVmIDAgbG93ICovCi0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgeTEgPj4gMTYsIDB4MzMpOyAgICAvKiBKUEVHIGJ1ZiAwIGhpZ2ggKi8KLQotCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHkxICYgMHhmZmZmLCAweDM0KTsgLyogSlBFRyBidWYgMSBsb3cgKi8KLQllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB5MSA+PiAxNiwgMHgzNSk7ICAgIC8qIEpQRUcgYnVnIDEgaGlnaCAqLwotCi0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHgwMDAwLCAweDM2KTsvKiBKUEVHIHJlc3RhcnQgaW50ZXJ2YWwgKi8KLQllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweDA4MDQsIDB4MzcpOy8qSlBFRyBWTEUgRklGTyB0aHJlc2hvbGQqLwotCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4MDAwMCwgMHgzOCk7LyogZGlzYWJsZSBodyB1cC1zY2FsaW5nICovCi0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHgwMDAwLCAweDNmKTsgLyogSlBFRy9NQ1RMIHRlc3QgZGF0YSAqLwotCi0JZXJyICs9IHc5OTY4Y2Zfc2V0X3BpY3R1cmUoY2FtLCBjYW0tPnBpY3R1cmUpOyAvKiB0aGlzIGJlZm9yZSAqLwotCWVyciArPSB3OTk2OGNmX3NldF93aW5kb3coY2FtLCBjYW0tPndpbmRvdyk7Ci0KLQlpZiAoZXJyKQotCQlEQkcoMSwgIkNoaXAgaW5pdGlhbGl6YXRpb24gZmFpbGVkIikKLQllbHNlCi0JCURCRyg1LCAiQ2hpcCBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQiKQotCi0JcmV0dXJuIGVycjsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIFJldHVybiBub24temVybyBpZiB0aGUgcGFsZXR0ZSBpcyBzdXBwb3J0ZWQsIDAgb3RoZXJ3aXNlLgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW5saW5lIHUxNiB3OTk2OGNmX3ZhbGlkX3BhbGV0dGUodTE2IHBhbGV0dGUpCi17Ci0JdTggaSA9IDA7Ci0Jd2hpbGUgKHc5OTY4Y2ZfZm9ybWF0bGlzdFtpXS5wYWxldHRlICE9IDApIHsKLQkJaWYgKHBhbGV0dGUgPT0gdzk5NjhjZl9mb3JtYXRsaXN0W2ldLnBhbGV0dGUpCi0JCQlyZXR1cm4gcGFsZXR0ZTsKLQkJaSsrOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIFJldHVybiB0aGUgZGVwdGggY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gcGFsZXR0ZS4KLSAgUGFsZXR0ZSBfbXVzdF8gYmUgc3VwcG9ydGVkICEKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGlubGluZSB1MTYgdzk5NjhjZl92YWxpZF9kZXB0aCh1MTYgcGFsZXR0ZSkKLXsKLQl1OCBpPTA7Ci0Jd2hpbGUgKHc5OTY4Y2ZfZm9ybWF0bGlzdFtpXS5wYWxldHRlICE9IHBhbGV0dGUpCi0JCWkrKzsKLQotCXJldHVybiB3OTk2OGNmX2Zvcm1hdGxpc3RbaV0uZGVwdGg7Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGZvcm1hdCByZXF1aXJlcyBkZWNvbXByZXNzaW9uLCAwIG90aGVyd2lzZS4KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGlubGluZSB1OCB3OTk2OGNmX25lZWRfZGVjb21wcmVzc2lvbih1MTYgcGFsZXR0ZSkKLXsKLQl1OCBpID0gMDsKLQl3aGlsZSAodzk5NjhjZl9mb3JtYXRsaXN0W2ldLnBhbGV0dGUgIT0gMCkgewotCQlpZiAocGFsZXR0ZSA9PSB3OTk2OGNmX2Zvcm1hdGxpc3RbaV0ucGFsZXR0ZSkKLQkJCXJldHVybiB3OTk2OGNmX2Zvcm1hdGxpc3RbaV0uY29tcHJlc3Npb247Ci0JCWkrKzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBDaGFuZ2UgdGhlIHBpY3R1cmUgc2V0dGluZ3Mgb2YgdGhlIGNhbWVyYS4KLSAgUmV0dXJuIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50Ci13OTk2OGNmX3NldF9waWN0dXJlKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCBzdHJ1Y3QgdmlkZW9fcGljdHVyZSBwaWN0KQotewotCXUxNiBmbXQsIGh3X2RlcHRoLCBod19wYWxldHRlLCByZWdfdiA9IDB4MDAwMDsKLQlpbnQgZXJyID0gMDsKLQotCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgdXNpbmcgYSB2YWxpZCBkZXB0aCAqLwotCXBpY3QuZGVwdGggPSB3OTk2OGNmX3ZhbGlkX2RlcHRoKHBpY3QucGFsZXR0ZSk7Ci0KLQlmbXQgPSBwaWN0LnBhbGV0dGU7Ci0KLQlod19kZXB0aCA9IHBpY3QuZGVwdGg7IC8qIGRlcHRoIHVzZWQgYnkgdGhlIHdpbmJvbmQgY2hpcCAqLwotCWh3X3BhbGV0dGUgPSBwaWN0LnBhbGV0dGU7IC8qIHBhbGV0dGUgdXNlZCBieSB0aGUgd2luYm9uZCBjaGlwICovCi0KLQkvKiBWUyAmIEhTIHBvbGFyaXRpZXMgKi8KLQlyZWdfdiA9IChjYW0tPnZzX3BvbGFyaXR5IDw8IDEyKSB8IChjYW0tPmhzX3BvbGFyaXR5IDw8IDExKTsKLQotCXN3aXRjaCAoZm10KQotCXsKLQkJY2FzZSBWSURFT19QQUxFVFRFX1VZVlk6Ci0JCQlyZWdfdiB8PSAweDAwMDA7Ci0JCQljYW0tPnZwcF9mbGFnID0gVlBQX05PTkU7Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT19QQUxFVFRFX1lVVjQyMlA6Ci0JCQlyZWdfdiB8PSAweDAwMDI7Ci0JCQljYW0tPnZwcF9mbGFnID0gVlBQX0RFQ09NUFJFU1NJT047Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT19QQUxFVFRFX1lVVjQyMDoKLQkJY2FzZSBWSURFT19QQUxFVFRFX1lVVjQyMFA6Ci0JCQlyZWdfdiB8PSAweDAwMDM7Ci0JCQljYW0tPnZwcF9mbGFnID0gVlBQX0RFQ09NUFJFU1NJT047Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT19QQUxFVFRFX1lVWVY6Ci0JCWNhc2UgVklERU9fUEFMRVRURV9ZVVY0MjI6Ci0JCQlyZWdfdiB8PSAweDAwMDA7Ci0JCQljYW0tPnZwcF9mbGFnID0gVlBQX1NXQVBfWVVWX0JZVEVTOwotCQkJaHdfcGFsZXR0ZSA9IFZJREVPX1BBTEVUVEVfVVlWWTsKLQkJCWJyZWFrOwotCQkvKiBPcmlnaW5hbCB2aWRlbyBpcyB1c2VkIGluc3RlYWQgb2YgUkdCWCBwYWxldHRlcy4KLQkJICAgU29mdHdhcmUgY29udmVyc2lvbiBsYXRlci4gKi8KLQkJY2FzZSBWSURFT19QQUxFVFRFX0dSRVk6Ci0JCWNhc2UgVklERU9fUEFMRVRURV9SR0I1NTU6Ci0JCWNhc2UgVklERU9fUEFMRVRURV9SR0I1NjU6Ci0JCWNhc2UgVklERU9fUEFMRVRURV9SR0IyNDoKLQkJY2FzZSBWSURFT19QQUxFVFRFX1JHQjMyOgotCQkJcmVnX3YgfD0gMHgwMDAwOyAvKiBVWVZZIDE2IGJpdCBpcyB1c2VkICovCi0JCQlod19kZXB0aCA9IDE2OwotCQkJaHdfcGFsZXR0ZSA9IFZJREVPX1BBTEVUVEVfVVlWWTsKLQkJCWNhbS0+dnBwX2ZsYWcgPSBWUFBfVVlWWV9UT19SR0JYOwotCQkJYnJlYWs7Ci0JfQotCi0JLyogTk9URTogZHVlIHRvIG1lbW9yeSBpc3N1ZXMsIGl0IGlzIGJldHRlciB0byBkaXNhYmxlIHRoZSBoYXJkd2FyZQotCQkgZG91YmxlIGJ1ZmZlcmluZyBkdXJpbmcgY29tcHJlc3Npb24gKi8KLQlpZiAoY2FtLT5kb3VibGVfYnVmZmVyICYmICEoY2FtLT52cHBfZmxhZyAmIFZQUF9ERUNPTVBSRVNTSU9OKSkKLQkJcmVnX3YgfD0gMHgwMDgwOwotCi0JaWYgKGNhbS0+Y2xhbXBpbmcpCi0JCXJlZ192IHw9IDB4MDAyMDsKLQotCWlmIChjYW0tPmZpbHRlcl90eXBlID09IDEpCi0JCXJlZ192IHw9IDB4MDAwODsKLQllbHNlIGlmIChjYW0tPmZpbHRlcl90eXBlID09IDIpCi0JCXJlZ192IHw9IDB4MDAwYzsKLQotCWlmICgoZXJyID0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCByZWdfdiwgMHgxNikpKQotCQlnb3RvIGVycm9yOwotCi0JaWYgKChlcnIgPSB3OTk2OGNmX3NlbnNvcl91cGRhdGVfcGljdHVyZShjYW0sIHBpY3QpKSkKLQkJZ290byBlcnJvcjsKLQotCS8qIElmIGFsbCB3ZW50IHdlbGwsIHVwZGF0ZSB0aGUgZGV2aWNlIGRhdGEgc3RydWN0dXJlICovCi0JbWVtY3B5KCZjYW0tPnBpY3R1cmUsICZwaWN0LCBzaXplb2YocGljdCkpOwotCWNhbS0+aHdfZGVwdGggPSBod19kZXB0aDsKLQljYW0tPmh3X3BhbGV0dGUgPSBod19wYWxldHRlOwotCi0JLyogU2V0dGluZ3MgY2hhbmdlZCwgc28gd2UgY2xlYXIgdGhlIGZyYW1lIGJ1ZmZlcnMgKi8KLQltZW1zZXQoY2FtLT5mcmFtZVswXS5idWZmZXIsIDAsIGNhbS0+bmJ1ZmZlcnMqY2FtLT5mcmFtZVswXS5zaXplKTsKLQotCURCRyg0LCAiUGFsZXR0ZSBpcyAlcywgZGVwdGggaXMgJXUgYnBwIiwKLQkgICAgc3ltYm9saWModjRsMV9wbGlzdCwgcGljdC5wYWxldHRlKSwgcGljdC5kZXB0aCkKLQotCXJldHVybiAwOwotCi1lcnJvcjoKLQlEQkcoMSwgIkZhaWxlZCB0byBjaGFuZ2UgcGljdHVyZSBzZXR0aW5ncyIpCi0JcmV0dXJuIGVycjsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIENoYW5nZSB0aGUgY2FwdHVyZSBhcmVhIHNpemUgb2YgdGhlIGNhbWVyYS4KLSAgVGhpcyBmdW5jdGlvbiBfbXVzdF8gYmUgY2FsbGVkIF9hZnRlcl8gdzk5NjhjZl9zZXRfcGljdHVyZSgpLgotICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIG51bWJlciBvdGhlcndpc2UuCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQKLXc5OTY4Y2Zfc2V0X3dpbmRvdyhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgc3RydWN0IHZpZGVvX3dpbmRvdyB3aW4pCi17Ci0JdTE2IHgsIHksIHcsIGgsIHNjeCwgc2N5LCBjdywgY2gsIGF4LCBheTsKLQl1bnNpZ25lZCBsb25nIGZ3LCBmaDsKLQlzdHJ1Y3Qgb3ZjYW1jaGlwX3dpbmRvdyBzX3dpbjsKLQlpbnQgZXJyID0gMDsKLQotCS8qIFdvcmsgYXJvdW5kIHRvIGF2b2lkIEZQIGFyaXRobWV0aWNzICovCi0JI2RlZmluZSBTQyh4KSAoKHgpIDw8IDEwKQotCSNkZWZpbmUgVU5TQyh4KSAoKHgpID4+IDEwKQotCi0JLyogTWFrZSBzdXJlIHdlIGFyZSB1c2luZyBhIHN1cHBvcnRlZCByZXNvbHV0aW9uICovCi0JaWYgKChlcnIgPSB3OTk2OGNmX2FkanVzdF93aW5kb3dfc2l6ZShjYW0sICZ3aW4ud2lkdGgsICZ3aW4uaGVpZ2h0KSkpCi0JCWdvdG8gZXJyb3I7Ci0KLQkvKiBTY2FsaW5nIGZhY3RvcnMgKi8KLQlmdyA9IFNDKHdpbi53aWR0aCkgLyBjYW0tPm1heHdpZHRoOwotCWZoID0gU0Mod2luLmhlaWdodCkgLyBjYW0tPm1heGhlaWdodDsKLQotCS8qIFNldCB1cCB0aGUgd2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgdXNlZCBieSB0aGUgY2hpcCAqLwotCWlmICgod2luLndpZHRoID4gY2FtLT5tYXh3aWR0aCkgfHwgKHdpbi5oZWlnaHQgPiBjYW0tPm1heGhlaWdodCkpIHsKLQkJY2FtLT52cHBfZmxhZyB8PSBWUFBfVVBTQ0FMRTsKLQkJLyogQ2FsY3VsYXRlIGxhcmdlc3QgdyxoIG1hbnRhaW5pbmcgdGhlIHNhbWUgdy9oIHJhdGlvICovCi0JCXcgPSAoZncgPj0gZmgpID8gY2FtLT5tYXh3aWR0aCA6IFNDKHdpbi53aWR0aCkvZmg7Ci0JCWggPSAoZncgPj0gZmgpID8gU0Mod2luLmhlaWdodCkvZncgOiBjYW0tPm1heGhlaWdodDsKLQkJaWYgKHcgPCBjYW0tPm1pbndpZHRoKSAvKiBqdXN0IGluIGNhc2UgKi8KLQkJCXcgPSBjYW0tPm1pbndpZHRoOwotCQlpZiAoaCA8IGNhbS0+bWluaGVpZ2h0KSAvKiBqdXN0IGluIGNhc2UgKi8KLQkJCWggPSBjYW0tPm1pbmhlaWdodDsKLQl9IGVsc2UgewotCQljYW0tPnZwcF9mbGFnICY9IH5WUFBfVVBTQ0FMRTsKLQkJdyA9IHdpbi53aWR0aDsKLQkJaCA9IHdpbi5oZWlnaHQ7Ci0JfQotCi0JLyogeCx5IG9mZnNldHMgb2YgdGhlIGNyb3BwZWQgYXJlYSAqLwotCXNjeCA9IGNhbS0+c3RhcnRfY3JvcHg7Ci0Jc2N5ID0gY2FtLT5zdGFydF9jcm9weTsKLQotCS8qIENhbGN1bGF0ZSBjcm9wcGVkIGFyZWEgbWFudGVpbmluZyB0aGUgcmlnaHQgdy9oIHJhdGlvICovCi0JaWYgKGNhbS0+bGFyZ2V2aWV3ICYmICEoY2FtLT52cHBfZmxhZyAmIFZQUF9VUFNDQUxFKSkgewotCQljdyA9IChmdyA+PSBmaCkgPyBjYW0tPm1heHdpZHRoIDogU0Mod2luLndpZHRoKS9maDsKLQkJY2ggPSAoZncgPj0gZmgpID8gU0Mod2luLmhlaWdodCkvZncgOiBjYW0tPm1heGhlaWdodDsKLQl9IGVsc2UgewotCQljdyA9IHc7Ci0JCWNoID0gaDsKLQl9Ci0KLQkvKiBTZXR1cCB0aGUgd2luZG93IG9mIHRoZSBzZW5zb3IgKi8KLQlzX3dpbi5mb3JtYXQgPSBWSURFT19QQUxFVFRFX1VZVlk7Ci0Jc193aW4ud2lkdGggPSBjYW0tPm1heHdpZHRoOwotCXNfd2luLmhlaWdodCA9IGNhbS0+bWF4aGVpZ2h0OwotCXNfd2luLnF1YXJ0ZXIgPSAwOyAvKiBmdWxsIHByb2dyZXNzaXZlIHZpZGVvICovCi0KLQkvKiBDZW50ZXIgaXQgKi8KLQlzX3dpbi54ID0gKHNfd2luLndpZHRoIC0gY3cpIC8gMjsKLQlzX3dpbi55ID0gKHNfd2luLmhlaWdodCAtIGNoKSAvIDI7Ci0KLQkvKiBDbG9jayBkaXZpc29yICovCi0JaWYgKGNhbS0+Y2xvY2tkaXYgPj0gMCkKLQkJc193aW4uY2xvY2tkaXYgPSBjYW0tPmNsb2NrZGl2OyAvKiBtYW51YWwgb3ZlcnJpZGUgKi8KLQllbHNlCi0JCXN3aXRjaCAoY2FtLT5zZW5zb3IpIHsKLQkJCWNhc2UgQ0NfT1Y2NjIwOgotCQkJCXNfd2luLmNsb2NrZGl2ID0gMDsKLQkJCQlicmVhazsKLQkJCWNhc2UgQ0NfT1Y2NjMwOgotCQkJCXNfd2luLmNsb2NrZGl2ID0gMDsKLQkJCQlicmVhazsKLQkJCWNhc2UgQ0NfT1Y3NkJFOgotCQkJY2FzZSBDQ19PVjc2MTA6Ci0JCQljYXNlIENDX09WNzYyMDoKLQkJCQlzX3dpbi5jbG9ja2RpdiA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXNfd2luLmNsb2NrZGl2ID0gVzk5NjhDRl9ERUZfQ0xPQ0tESVZJU09SOwotCQl9Ci0KLQkvKiBXZSBoYXZlIHRvIHNjYWxlIHdpbi54IGFuZCB3aW4ueSBvZmZzZXRzICovCi0JaWYgKCAoY2FtLT5sYXJnZXZpZXcgJiYgIShjYW0tPnZwcF9mbGFnICYgVlBQX1VQU0NBTEUpKQotCSAgICAgfHwgKGNhbS0+dnBwX2ZsYWcgJiBWUFBfVVBTQ0FMRSkgKSB7Ci0JCWF4ID0gU0Mod2luLngpL2Z3OwotCQlheSA9IFNDKHdpbi55KS9maDsKLQl9IGVsc2UgewotCQlheCA9IHdpbi54OwotCQlheSA9IHdpbi55OwotCX0KLQotCWlmICgoYXggKyBjdykgPiBjYW0tPm1heHdpZHRoKQotCQlheCA9IGNhbS0+bWF4d2lkdGggLSBjdzsKLQotCWlmICgoYXkgKyBjaCkgPiBjYW0tPm1heGhlaWdodCkKLQkJYXkgPSBjYW0tPm1heGhlaWdodCAtIGNoOwotCi0JLyogQWRqdXN0IHdpbi54LCB3aW4ueSAqLwotCWlmICggKGNhbS0+bGFyZ2V2aWV3ICYmICEoY2FtLT52cHBfZmxhZyAmIFZQUF9VUFNDQUxFKSkKLQkgICAgIHx8IChjYW0tPnZwcF9mbGFnICYgVlBQX1VQU0NBTEUpICkgewotCQl3aW4ueCA9IFVOU0MoYXgqZncpOwotCQl3aW4ueSA9IFVOU0MoYXkqZmgpOwotCX0gZWxzZSB7Ci0JCXdpbi54ID0gYXg7Ci0JCXdpbi55ID0gYXk7Ci0JfQotCi0JLyogT2Zmc2V0cyB1c2VkIGJ5IHRoZSBjaGlwICovCi0JeCA9IGF4ICsgc193aW4ueDsKLQl5ID0gYXkgKyBzX3dpbi55OwotCi0JLyogR28gISAqLwotCWlmICgoZXJyID0gdzk5NjhjZl9zZW5zb3JfY21kKGNhbSwgT1ZDQU1DSElQX0NNRF9TX01PREUsICZzX3dpbikpKQotCQlnb3RvIGVycm9yOwotCi0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgc2N4ICsgeCwgMHgxMCk7Ci0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgc2N5ICsgeSwgMHgxMSk7Ci0JZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgc2N4ICsgeCArIGN3LCAweDEyKTsKLQllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCBzY3kgKyB5ICsgY2gsIDB4MTMpOwotCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHcsIDB4MTQpOwotCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIGgsIDB4MTUpOwotCi0JLyogSlBFRyB3aWR0aCAmIGhlaWdodCAqLwotCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHcsIDB4MzApOwotCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIGgsIDB4MzEpOwotCi0JLyogWSAmIFVWIGZyYW1lIGJ1ZmZlciBzdHJpZGVzIChpbiBXT1JEKSAqLwotCWlmIChjYW0tPnZwcF9mbGFnICYgVlBQX0RFQ09NUFJFU1NJT04pIHsKLQkJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgdy8yLCAweDJjKTsKLQkJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgdy80LCAweDJkKTsKLQl9IGVsc2UKLQkJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgdywgMHgyYyk7Ci0KLQlpZiAoZXJyKQotCQlnb3RvIGVycm9yOwotCi0JLyogSWYgYWxsIHdlbnQgd2VsbCwgdXBkYXRlIHRoZSBkZXZpY2UgZGF0YSBzdHJ1Y3R1cmUgKi8KLQltZW1jcHkoJmNhbS0+d2luZG93LCAmd2luLCBzaXplb2Yod2luKSk7Ci0JY2FtLT5od193aWR0aCA9IHc7Ci0JY2FtLT5od19oZWlnaHQgPSBoOwotCi0JLyogU2V0dGluZ3MgY2hhbmdlZCwgc28gd2UgY2xlYXIgdGhlIGZyYW1lIGJ1ZmZlcnMgKi8KLQltZW1zZXQoY2FtLT5mcmFtZVswXS5idWZmZXIsIDAsIGNhbS0+bmJ1ZmZlcnMqY2FtLT5mcmFtZVswXS5zaXplKTsKLQotCURCRyg0LCAiVGhlIGNhcHR1cmUgYXJlYSBpcyAlZHglZCwgT2Zmc2V0ICh4LHkpPSgldSwldSkiLAotCSAgICB3aW4ud2lkdGgsIHdpbi5oZWlnaHQsIHdpbi54LCB3aW4ueSkKLQotCVBEQkdHKCJ4PSV1ICx5PSV1LCB3PSV1LCBoPSV1LCBheD0ldSwgYXk9JXUsIHNfd2luLng9JXUsIHNfd2luLnk9JXUsICIKLQkgICAgICAiY3c9JXUsIGNoPSV1LCB3aW4ueD0ldSwgd2luLnk9JXUsIHdpbi53aWR0aD0ldSwgd2luLmhlaWdodD0ldSIsCi0JICAgICAgeCwgeSwgdywgaCwgYXgsIGF5LCBzX3dpbi54LCBzX3dpbi55LCBjdywgY2gsIHdpbi54LCB3aW4ueSwKLQkgICAgICB3aW4ud2lkdGgsIHdpbi5oZWlnaHQpCi0KLQlyZXR1cm4gMDsKLQotZXJyb3I6Ci0JREJHKDEsICJGYWlsZWQgdG8gY2hhbmdlIHRoZSBjYXB0dXJlIGFyZWEgc2l6ZSIpCi0JcmV0dXJuIGVycjsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIEFkanVzdCB0aGUgYXNrZWQgdmFsdWVzIGZvciB3aW5kb3cgd2lkdGggYW5kIGhlaWdodC4KLSAgUmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb3RoZXJ3aXNlLgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50Ci13OTk2OGNmX2FkanVzdF93aW5kb3dfc2l6ZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UgKmNhbSwgdTMyICp3aWR0aCwgdTMyICpoZWlnaHQpCi17Ci0JdW5zaWduZWQgaW50IG1heHcsIG1heGgsIGFsaWduOwotCi0JbWF4dyA9IGNhbS0+dXBzY2FsaW5nICYmICEoY2FtLT52cHBfZmxhZyAmIFZQUF9ERUNPTVBSRVNTSU9OKSAmJgotCSAgICAgICB3OTk2OGNmX3ZwcCA/IG1heCgodTE2KVc5OTY4Q0ZfTUFYX1dJRFRILCBjYW0tPm1heHdpZHRoKQotCQkJICAgOiBjYW0tPm1heHdpZHRoOwotCW1heGggPSBjYW0tPnVwc2NhbGluZyAmJiAhKGNhbS0+dnBwX2ZsYWcgJiBWUFBfREVDT01QUkVTU0lPTikgJiYKLQkgICAgICAgdzk5NjhjZl92cHAgPyBtYXgoKHUxNilXOTk2OENGX01BWF9IRUlHSFQsIGNhbS0+bWF4aGVpZ2h0KQotCQkJICAgOiBjYW0tPm1heGhlaWdodDsKLQlhbGlnbiA9IChjYW0tPnZwcF9mbGFnICYgVlBQX0RFQ09NUFJFU1NJT04pID8gNCA6IDA7Ci0KLQl2NGxfYm91bmRfYWxpZ25faW1hZ2Uod2lkdGgsIGNhbS0+bWlud2lkdGgsIG1heHcsIGFsaWduLAotCQkJICAgICAgaGVpZ2h0LCBjYW0tPm1pbmhlaWdodCwgbWF4aCwgYWxpZ24sIDApOwotCi0JUERCR0coIldpbmRvdyBzaXplIGFkanVzdGVkIHc9JXUsIGg9JXUgIiwgKndpZHRoLCAqaGVpZ2h0KQotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBJbml0aWFsaXplIHRoZSBGSUZPIGxpc3Qgb2YgcmVxdWVzdGVkIGZyYW1lcy4KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQgdzk5NjhjZl9pbml0X2ZyYW1lbGlzdChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKLXsKLQl1OCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGNhbS0+bmJ1ZmZlcnM7IGkrKykgewotCQljYW0tPnJlcXVlc3RlZF9mcmFtZVtpXSA9IE5VTEw7Ci0JCWNhbS0+ZnJhbWVbaV0ucXVldWVkID0gMDsKLQkJY2FtLT5mcmFtZVtpXS5zdGF0dXMgPSBGX1VOVVNFRDsKLQl9Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBBZGQgYSBmcmFtZSBpbiB0aGUgRklGTyBsaXN0IG9mIHJlcXVlc3RlZCBmcmFtZXMuCi0gIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIHByb2Nlc3MgY29udGV4dC4KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQgdzk5NjhjZl9wdXNoX2ZyYW1lKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCB1OCBmX251bSkKLXsKLQl1OCBmOwotCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPmZsaXN0X2xvY2ssIGxvY2tfZmxhZ3MpOwotCi0JZm9yIChmPTA7IGNhbS0+cmVxdWVzdGVkX2ZyYW1lW2ZdICE9IE5VTEw7IGYrKyk7Ci0JY2FtLT5yZXF1ZXN0ZWRfZnJhbWVbZl0gPSAmY2FtLT5mcmFtZVtmX251bV07Ci0JY2FtLT5mcmFtZVtmX251bV0ucXVldWVkID0gMTsKLQljYW0tPmZyYW1lW2ZfbnVtXS5zdGF0dXMgPSBGX1VOVVNFRDsgLyogY2xlYXIgdGhlIHN0YXR1cyAqLwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FtLT5mbGlzdF9sb2NrLCBsb2NrX2ZsYWdzKTsKLQotCURCRyg2LCAiRnJhbWUgIyV1IHB1c2hlZCBpbnRvIHRoZSBGSUZPIGxpc3QuIFBvc2l0aW9uICV1IiwgZl9udW0sIGYpCi19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBSZWFkLCBzdG9yZSBhbmQgcmVtb3ZlIHRoZSBmaXJzdCBwb2ludGVyIGluIHRoZSBGSUZPIGxpc3Qgb2YgcmVxdWVzdGVkCi0gIGZyYW1lcy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQuCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkCi13OTk2OGNmX3BvcF9mcmFtZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCoqIGZyYW1lcCkKLXsKLQl1OCBpOwotCi0Jc3Bpbl9sb2NrKCZjYW0tPmZsaXN0X2xvY2spOwotCi0JKmZyYW1lcCA9IGNhbS0+cmVxdWVzdGVkX2ZyYW1lWzBdOwotCi0JLyogU2hpZnQgdGhlIGxpc3Qgb2YgcG9pbnRlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgY2FtLT5uYnVmZmVycy0xOyBpKyspCi0JCWNhbS0+cmVxdWVzdGVkX2ZyYW1lW2ldID0gY2FtLT5yZXF1ZXN0ZWRfZnJhbWVbaSsxXTsKLQljYW0tPnJlcXVlc3RlZF9mcmFtZVtpXSA9IE5VTEw7Ci0KLQlzcGluX3VubG9jaygmY2FtLT5mbGlzdF9sb2NrKTsKLQotCURCRyg2LCJQb3BwZWQgZnJhbWUgIyVkIGZyb20gdGhlIGxpc3QiLCAoKmZyYW1lcCktPm51bWJlcikKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIEhpZ2gtbGV2ZWwgdmlkZW8gcG9zdC1wcm9jZXNzaW5nIHJvdXRpbmUgb24gZ3JhYmJlZCBmcmFtZXMuCi0gIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgbnVtYmVyIG90aGVyd2lzZS4KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludAotdzk5NjhjZl9wb3N0cHJvY2Vzc19mcmFtZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwKLQkJCSAgc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCogZnIpCi17Ci0Jdm9pZCAqcEluID0gZnItPmJ1ZmZlciwgKnBPdXQgPSBjYW0tPmZyYW1lX3ZwcC5idWZmZXIsICp0bXA7Ci0JdTE2IHcgPSBjYW0tPndpbmRvdy53aWR0aCwKLQkgICAgaCA9IGNhbS0+d2luZG93LmhlaWdodCwKLQkgICAgZCA9IGNhbS0+cGljdHVyZS5kZXB0aCwKLQkgICAgZm10ID0gY2FtLT5waWN0dXJlLnBhbGV0dGUsCi0JICAgIHJnYiA9IGNhbS0+Zm9yY2VfcmdiLAotCSAgICBod193ID0gY2FtLT5od193aWR0aCwKLQkgICAgaHdfaCA9IGNhbS0+aHdfaGVpZ2h0LAotCSAgICBod19kID0gY2FtLT5od19kZXB0aDsKLQlpbnQgZXJyID0gMDsKLQotCSNkZWZpbmUgX1BTV0FQKHBJbiwgcE91dCkge3RtcCA9IChwSW4pOyAocEluKSA9IChwT3V0KTsgKHBPdXQpID0gdG1wO30KLQotCWlmIChjYW0tPnZwcF9mbGFnICYgVlBQX0RFQ09NUFJFU1NJT04pIHsKLQkJbWVtY3B5KHBPdXQsIHBJbiwgZnItPmxlbmd0aCk7Ci0JCV9QU1dBUChwSW4sIHBPdXQpCi0JCWVyciA9IHc5OTY4Y2ZfdnBwLT5kZWNvZGUocEluLCBmci0+bGVuZ3RoLCBod193LCBod19oLCBwT3V0KTsKLQkJUERCR0coIkNvbXByZXNzZWQgZnJhbWUgbGVuZ3RoOiAlbHUiLCh1bnNpZ25lZCBsb25nKWZyLT5sZW5ndGgpCi0JCWZyLT5sZW5ndGggPSAoaHdfdypod19oKmh3X2QpLzg7Ci0JCV9QU1dBUChwSW4sIHBPdXQpCi0JCWlmIChlcnIpIHsKLQkJCURCRyg0LCAiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZGVjb2RpbmcgdGhlIGZyYW1lOiAiCi0JCQkgICAgICAgIiVzIiwgc3ltYm9saWMoZGVjb2Rlcl9lcnJsaXN0LCBlcnIpKQotCQkJcmV0dXJuIGVycjsKLQkJfSBlbHNlCi0JCQlEQkcoNiwgIkZyYW1lIGRlY29kZWQiKQotCX0KLQotCWlmIChjYW0tPnZwcF9mbGFnICYgVlBQX1NXQVBfWVVWX0JZVEVTKSB7Ci0JCXc5OTY4Y2ZfdnBwLT5zd2FwX3l1dmJ5dGVzKHBJbiwgZnItPmxlbmd0aCk7Ci0JCURCRyg2LCAiT3JpZ2luYWwgVVlWWSBjb21wb25lbnQgb3JkZXJpbmcgY2hhbmdlZCIpCi0JfQotCi0JaWYgKGNhbS0+dnBwX2ZsYWcgJiBWUFBfVVBTQ0FMRSkgewotCQl3OTk2OGNmX3ZwcC0+c2NhbGVfdXAocEluLCBwT3V0LCBod193LCBod19oLCBod19kLCB3LCBoKTsKLQkJZnItPmxlbmd0aCA9ICh3KmgqaHdfZCkvODsKLQkJX1BTV0FQKHBJbiwgcE91dCkKLQkJREJHKDYsICJWZXJ0aWNhbCB1cC1zY2FsaW5nIGRvbmU6ICV1LCV1LCV1YnBwLT4ldSwldSIsCi0JCSAgICBod193LCBod19oLCBod19kLCB3LCBoKQotCX0KLQotCWlmIChjYW0tPnZwcF9mbGFnICYgVlBQX1VZVllfVE9fUkdCWCkgewotCQl3OTk2OGNmX3ZwcC0+dXl2eV90b19yZ2J4KHBJbiwgZnItPmxlbmd0aCwgcE91dCwgZm10LCByZ2IpOwotCQlmci0+bGVuZ3RoID0gKHcqaCpkKS84OwotCQlfUFNXQVAocEluLCBwT3V0KQotCQlEQkcoNiwgIlVZVlktMTZiaXQgdG8gJXMgY29udmVyc2lvbiBkb25lIiwKLQkJICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIGZtdCkpCi0JfQotCi0JaWYgKHBPdXQgPT0gZnItPmJ1ZmZlcikKLQkJbWVtY3B5KGZyLT5idWZmZXIsIGNhbS0+ZnJhbWVfdnBwLmJ1ZmZlciwgZnItPmxlbmd0aCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBJbWFnZSBzZW5zb3IgY29udHJvbCByb3V0aW5lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbnQKLXc5OTY4Y2Zfc2Vuc29yX3NldF9jb250cm9sKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCBpbnQgY2lkLCBpbnQgdmFsKQotewotCXN0cnVjdCBvdmNhbWNoaXBfY29udHJvbCBjdGw7Ci0JaW50IGVycjsKLQotCWN0bC5pZCA9IGNpZDsKLQljdGwudmFsdWUgPSB2YWw7Ci0KLQllcnIgPSB3OTk2OGNmX3NlbnNvcl9jbWQoY2FtLCBPVkNBTUNISVBfQ01EX1NfQ1RSTCwgJmN0bCk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0KLXN0YXRpYyBpbnQKLXc5OTY4Y2Zfc2Vuc29yX2dldF9jb250cm9sKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCBpbnQgY2lkLCBpbnQqIHZhbCkKLXsKLQlzdHJ1Y3Qgb3ZjYW1jaGlwX2NvbnRyb2wgY3RsOwotCWludCBlcnI7Ci0KLQljdGwuaWQgPSBjaWQ7Ci0KLQllcnIgPSB3OTk2OGNmX3NlbnNvcl9jbWQoY2FtLCBPVkNBTUNISVBfQ01EX0dfQ1RSTCwgJmN0bCk7Ci0JaWYgKCFlcnIpCi0JCSp2YWwgPSBjdGwudmFsdWU7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0KLXN0YXRpYyBpbnQKLXc5OTY4Y2Zfc2Vuc29yX2NtZChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCogYXJnKQotewotCWludCByYzsKLQotCXJjID0gdjRsMl9zdWJkZXZfY2FsbChjYW0tPnNlbnNvcl9zZCwgY29yZSwgaW9jdGwsIGNtZCwgYXJnKTsKLQkvKiBUaGUgSTJDIGRyaXZlciByZXR1cm5zIC1FUEVSTSBvbiBub24tc3VwcG9ydGVkIGNvbnRyb2xzICovCi0JcmV0dXJuIChyYyA8IDAgJiYgcmMgIT0gLUVQRVJNKSA/IHJjIDogMDsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIFVwZGF0ZSBzb21lIHNldHRpbmdzIG9mIHRoZSBpbWFnZSBzZW5zb3IuCi0gIFJldHVybnM6IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50IHc5OTY4Y2Zfc2Vuc29yX3VwZGF0ZV9zZXR0aW5ncyhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKLXsKLQlpbnQgZXJyID0gMDsKLQotCS8qIEF1dG8gYnJpZ2h0bmVzcyAqLwotCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX3NldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9BVVRPQlJJR0hULAotCQkJCQkgY2FtLT5hdXRvX2JydCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCS8qIEF1dG8gZXhwb3N1cmUgKi8KLQllcnIgPSB3OTk2OGNmX3NlbnNvcl9zZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfQVVUT0VYUCwKLQkJCQkJIGNhbS0+YXV0b19leHApOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQkvKiBCYW5kaW5nIGZpbHRlciAqLwotCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX3NldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9CQU5ERklMVCwKLQkJCQkJIGNhbS0+YmFuZGZpbHQpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQkvKiBMaWdodCBmcmVxdWVuY3kgKi8KLQllcnIgPSB3OTk2OGNmX3NlbnNvcl9zZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfRlJFUSwKLQkJCQkJIGNhbS0+bGlnaHRmcmVxKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JLyogQmFjayBsaWdodCAqLwotCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX3NldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9CQUNLTElHSFQsCi0JCQkJCSBjYW0tPmJhY2tsaWdodCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCS8qIE1pcnJvciAqLwotCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX3NldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9NSVJST1IsCi0JCQkJCSBjYW0tPm1pcnJvcik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCXJldHVybiAwOwotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgR2V0IHNvbWUgY3VycmVudCBwaWN0dXJlIHNldHRpbmdzIGZyb20gdGhlIGltYWdlIHNlbnNvciBhbmQgdXBkYXRlIHRoZQotICBpbnRlcm5hbCAncGljdHVyZScgc3RydWN0dXJlIG9mIHRoZSBjYW1lcmEuCi0gIFJldHVybnM6IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50IHc5OTY4Y2Zfc2Vuc29yX2dldF9waWN0dXJlKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQotewotCWludCBlcnIsIHY7Ci0KLQllcnIgPSB3OTk2OGNmX3NlbnNvcl9nZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfQ09OVCwgJnYpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JY2FtLT5waWN0dXJlLmNvbnRyYXN0ID0gdjsKLQotCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX2dldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9CUklHSFQsICZ2KTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCWNhbS0+cGljdHVyZS5icmlnaHRuZXNzID0gdjsKLQotCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX2dldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9TQVQsICZ2KTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCWNhbS0+cGljdHVyZS5jb2xvdXIgPSB2OwotCi0JZXJyID0gdzk5NjhjZl9zZW5zb3JfZ2V0X2NvbnRyb2woY2FtLCBPVkNBTUNISVBfQ0lEX0hVRSwgJnYpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JY2FtLT5waWN0dXJlLmh1ZSA9IHY7Ci0KLQlEQkcoNSwgIkdvdCBwaWN0dXJlIHNldHRpbmdzIGZyb20gdGhlIGltYWdlIHNlbnNvciIpCi0KLQlQREJHRygiQnJpZ2h0bmVzcywgY29udHJhc3QsIGh1ZSwgY29sb3VyLCB3aGl0ZW5lc3MgYXJlICIKLQkgICAgICAiJXUsJXUsJXUsJXUsJXUiLCBjYW0tPnBpY3R1cmUuYnJpZ2h0bmVzcyxjYW0tPnBpY3R1cmUuY29udHJhc3QsCi0JICAgICAgY2FtLT5waWN0dXJlLmh1ZSwgY2FtLT5waWN0dXJlLmNvbG91ciwgY2FtLT5waWN0dXJlLndoaXRlbmVzcykKLQotCXJldHVybiAwOwotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgVXBkYXRlIHBpY3R1cmUgc2V0dGluZ3Mgb2YgdGhlIGltYWdlIHNlbnNvci4KLSAgUmV0dXJuczogMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIG51bWJlciBvdGhlcndpc2UuCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQKLXc5OTY4Y2Zfc2Vuc29yX3VwZGF0ZV9waWN0dXJlKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLAotCQkJICAgICAgc3RydWN0IHZpZGVvX3BpY3R1cmUgcGljdCkKLXsKLQlpbnQgZXJyID0gMDsKLQotCWlmICgoIWNhbS0+c2Vuc29yX2luaXRpYWxpemVkKQotCSAgICB8fCBwaWN0LmNvbnRyYXN0ICE9IGNhbS0+cGljdHVyZS5jb250cmFzdCkgewotCQllcnIgPSB3OTk2OGNmX3NlbnNvcl9zZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfQ09OVCwKLQkJCQkJCSBwaWN0LmNvbnRyYXN0KTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZmFpbDsKLQkJREJHKDQsICJDb250cmFzdCBjaGFuZ2VkIGZyb20gJXUgdG8gJXUiLAotCQkgICAgY2FtLT5waWN0dXJlLmNvbnRyYXN0LCBwaWN0LmNvbnRyYXN0KQotCQljYW0tPnBpY3R1cmUuY29udHJhc3QgPSBwaWN0LmNvbnRyYXN0OwotCX0KLQotCWlmICgoKCFjYW0tPnNlbnNvcl9pbml0aWFsaXplZCkgfHwKLQkgICAgcGljdC5icmlnaHRuZXNzICE9IGNhbS0+cGljdHVyZS5icmlnaHRuZXNzKSAmJiAoIWNhbS0+YXV0b19icnQpKSB7Ci0JCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX3NldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9CUklHSFQsCi0JCQkJCQkgcGljdC5icmlnaHRuZXNzKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZmFpbDsKLQkJREJHKDQsICJCcmlnaHRuZXNzIGNoYW5nZWQgZnJvbSAldSB0byAldSIsCi0JCSAgICBjYW0tPnBpY3R1cmUuYnJpZ2h0bmVzcywgcGljdC5icmlnaHRuZXNzKQotCQljYW0tPnBpY3R1cmUuYnJpZ2h0bmVzcyA9IHBpY3QuYnJpZ2h0bmVzczsKLQl9Ci0KLQlpZiAoKCFjYW0tPnNlbnNvcl9pbml0aWFsaXplZCkgfHwgcGljdC5jb2xvdXIgIT0gY2FtLT5waWN0dXJlLmNvbG91cikgewotCQllcnIgPSB3OTk2OGNmX3NlbnNvcl9zZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfU0FULAotCQkJCQkJIHBpY3QuY29sb3VyKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZmFpbDsKLQkJREJHKDQsICJDb2xvdXIgY2hhbmdlZCBmcm9tICV1IHRvICV1IiwKLQkJICAgIGNhbS0+cGljdHVyZS5jb2xvdXIsIHBpY3QuY29sb3VyKQotCQljYW0tPnBpY3R1cmUuY29sb3VyID0gcGljdC5jb2xvdXI7Ci0JfQotCi0JaWYgKCghY2FtLT5zZW5zb3JfaW5pdGlhbGl6ZWQpIHx8IHBpY3QuaHVlICE9IGNhbS0+cGljdHVyZS5odWUpIHsKLQkJZXJyID0gdzk5NjhjZl9zZW5zb3Jfc2V0X2NvbnRyb2woY2FtLCBPVkNBTUNISVBfQ0lEX0hVRSwKLQkJCQkJCSBwaWN0Lmh1ZSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGZhaWw7Ci0JCURCRyg0LCAiSHVlIGNoYW5nZWQgZnJvbSAldSB0byAldSIsCi0JCSAgICBjYW0tPnBpY3R1cmUuaHVlLCBwaWN0Lmh1ZSkKLQkJY2FtLT5waWN0dXJlLmh1ZSA9IHBpY3QuaHVlOwotCX0KLQotCXJldHVybiAwOwotCi1mYWlsOgotCURCRyg0LCAiRmFpbGVkIHRvIGNoYW5nZSBzZW5zb3IgcGljdHVyZSBzZXR0aW5nIikKLQlyZXR1cm4gZXJyOwotfQotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENhbWVyYSBjb25maWd1cmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgc3VwcG9ydGVkIGltYWdlIHNlbnNvciBpcyBkZXRlY3RlZC4KLSAgUmV0dXJuIDAgaWYgdGhlIGluaXRpYWxpemF0aW9uIHN1Y2NlZWRzLCBhIG5lZ2F0aXZlIG51bWJlciBvdGhlcndpc2UuCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQgdzk5NjhjZl9zZW5zb3JfaW5pdChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKLXsKLQlpbnQgZXJyID0gMDsKLQotCWlmICgoZXJyID0gdzk5NjhjZl9zZW5zb3JfY21kKGNhbSwgT1ZDQU1DSElQX0NNRF9JTklUSUFMSVpFLAotCQkJCSAgICAgICZjYW0tPm1vbm9jaHJvbWUpKSkKLQkJZ290byBlcnJvcjsKLQotCWlmICgoZXJyID0gdzk5NjhjZl9zZW5zb3JfY21kKGNhbSwgT1ZDQU1DSElQX0NNRF9RX1NVQlRZUEUsCi0JCQkJICAgICAgJmNhbS0+c2Vuc29yKSkpCi0JCWdvdG8gZXJyb3I7Ci0KLQkvKiBOT1RFOiBNYWtlIHN1cmUgd2lkdGggYW5kIGhlaWdodCBhcmUgYSBtdWx0aXBsZSBvZiAxNiAqLwotCXN3aXRjaCAodjRsMl9pMmNfc3ViZGV2X2FkZHIoY2FtLT5zZW5zb3Jfc2QpKSB7Ci0JCWNhc2UgT1Y2eHgwX1NJRDoKLQkJCWNhbS0+bWF4d2lkdGggPSAzNTI7Ci0JCQljYW0tPm1heGhlaWdodCA9IDI4ODsKLQkJCWNhbS0+bWlud2lkdGggPSA2NDsKLQkJCWNhbS0+bWluaGVpZ2h0ID0gNDg7Ci0JCQlicmVhazsKLQkJY2FzZSBPVjd4eDBfU0lEOgotCQkJY2FtLT5tYXh3aWR0aCA9IDY0MDsKLQkJCWNhbS0+bWF4aGVpZ2h0ID0gNDgwOwotCQkJY2FtLT5taW53aWR0aCA9IDY0OwotCQkJY2FtLT5taW5oZWlnaHQgPSA0ODsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJREJHKDEsICJOb3Qgc3VwcG9ydGVkIGltYWdlIHNlbnNvciBkZXRlY3RlZCBmb3IgJXMiLAotCQkJICAgIHN5bWJvbGljKGNhbWxpc3QsIGNhbS0+aWQpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogVGhlc2UgdmFsdWVzIGRlcGVuZCBvbiB0aGUgb25lcyBpbiB0aGUgb3Z4eHgwLmMgc291cmNlcyAqLwotCXN3aXRjaCAoY2FtLT5zZW5zb3IpIHsKLQkJY2FzZSBDQ19PVjc2MjA6Ci0JCQljYW0tPnN0YXJ0X2Nyb3B4ID0gMjg3OwotCQkJY2FtLT5zdGFydF9jcm9weSA9IDM1OwotCQkJLyogU2VlbXMgdG8gd29yayBhcm91bmQgYSBidWcgaW4gdGhlIGltYWdlIHNlbnNvciAqLwotCQkJY2FtLT52c19wb2xhcml0eSA9IDE7Ci0JCQljYW0tPmhzX3BvbGFyaXR5ID0gMTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJY2FtLT5zdGFydF9jcm9weCA9IDMyMDsKLQkJCWNhbS0+c3RhcnRfY3JvcHkgPSAzNTsKLQkJCWNhbS0+dnNfcG9sYXJpdHkgPSAxOwotCQkJY2FtLT5oc19wb2xhcml0eSA9IDA7Ci0JfQotCi0JaWYgKChlcnIgPSB3OTk2OGNmX3NlbnNvcl91cGRhdGVfc2V0dGluZ3MoY2FtKSkpCi0JCWdvdG8gZXJyb3I7Ci0KLQlpZiAoKGVyciA9IHc5OTY4Y2Zfc2Vuc29yX3VwZGF0ZV9waWN0dXJlKGNhbSwgY2FtLT5waWN0dXJlKSkpCi0JCWdvdG8gZXJyb3I7Ci0KLQljYW0tPnNlbnNvcl9pbml0aWFsaXplZCA9IDE7Ci0KLQlEQkcoMiwgIiVzIGltYWdlIHNlbnNvciBpbml0aWFsaXplZCIsIHN5bWJvbGljKHNlbmxpc3QsIGNhbS0+c2Vuc29yKSkKLQlyZXR1cm4gMDsKLQotZXJyb3I6Ci0JY2FtLT5zZW5zb3JfaW5pdGlhbGl6ZWQgPSAwOwotCWNhbS0+c2Vuc29yID0gQ0NfVU5LTk9XTjsKLQlEQkcoMSwgIkltYWdlIHNlbnNvciBpbml0aWFsaXphdGlvbiBmYWlsZWQgZm9yICVzICglcykuICIKLQkgICAgICAgIlRyeSB0byBkZXRhY2ggYW5kIGF0dGFjaCB0aGlzIGRldmljZSBhZ2FpbiIsCi0JICAgIHN5bWJvbGljKGNhbWxpc3QsIGNhbS0+aWQpLCB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGNhbS0+djRsZGV2KSkKLQlyZXR1cm4gZXJyOwotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgRmlsbCBzb21lIGJhc2ljIGZpZWxkcyBpbiB0aGUgbWFpbiBkZXZpY2UgZGF0YSBzdHJ1Y3R1cmUuCi0gIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2Ugb24gdzk5NjhjZl91c2JfcHJvYmUoKSBmb3IgZWFjaCByZWNvZ25pemVkCi0gIGNhbWVyYS4KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQKLXc5OTY4Y2ZfY29uZmlndXJlX2NhbWVyYShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwKLQkJCSBzdHJ1Y3QgdXNiX2RldmljZSogdWRldiwKLQkJCSBlbnVtIHc5OTY4Y2ZfbW9kZWxfaWQgbW9kX2lkLAotCQkJIGNvbnN0IHVuc2lnbmVkIHNob3J0IGRldl9ucikKLXsKLQltdXRleF9pbml0KCZjYW0tPmZpbGVvcF9tdXRleCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmY2FtLT5vcGVuKTsKLQlzcGluX2xvY2tfaW5pdCgmY2FtLT51cmJfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmNhbS0+Zmxpc3RfbG9jayk7Ci0KLQljYW0tPnVzZXJzID0gMDsKLQljYW0tPmRpc2Nvbm5lY3RlZCA9IDA7Ci0JY2FtLT5pZCA9IG1vZF9pZDsKLQljYW0tPnNlbnNvciA9IENDX1VOS05PV047Ci0JY2FtLT5zZW5zb3JfaW5pdGlhbGl6ZWQgPSAwOwotCi0JLyogQ2FsY3VsYXRlIHRoZSBhbHRlcm5hdGUgc2V0dGluZyBudW1iZXIgKGZyb20gMSB0byAxNikKLQkgICBhY2NvcmRpbmcgdG8gdGhlICdwYWNrZXRfc2l6ZScgbW9kdWxlIHBhcmFtZXRlciAqLwotCWlmIChwYWNrZXRfc2l6ZVtkZXZfbnJdIDwgVzk5NjhDRl9NSU5fUEFDS0VUX1NJWkUpCi0JCXBhY2tldF9zaXplW2Rldl9ucl0gPSBXOTk2OENGX01JTl9QQUNLRVRfU0laRTsKLQlmb3IgKGNhbS0+YWx0c2V0dGluZyA9IDE7Ci0JICAgICBwYWNrZXRfc2l6ZVtkZXZfbnJdIDwgd01heFBhY2tldFNpemVbY2FtLT5hbHRzZXR0aW5nLTFdOwotCSAgICAgY2FtLT5hbHRzZXR0aW5nKyspOwotCi0JY2FtLT5tYXhfYnVmZmVycyA9IChtYXhfYnVmZmVyc1tkZXZfbnJdIDwgMiB8fAotCQkJICAgIG1heF9idWZmZXJzW2Rldl9ucl0gPiBXOTk2OENGX01BWF9CVUZGRVJTKQotCQkJICAgPyBXOTk2OENGX0JVRkZFUlMgOiAodTgpbWF4X2J1ZmZlcnNbZGV2X25yXTsKLQotCWNhbS0+ZG91YmxlX2J1ZmZlciA9IChkb3VibGVfYnVmZmVyW2Rldl9ucl0gPT0gMCB8fAotCQkJICAgICAgZG91YmxlX2J1ZmZlcltkZXZfbnJdID09IDEpCi0JCQkgICAgID8gKHU4KWRvdWJsZV9idWZmZXJbZGV2X25yXTpXOTk2OENGX0RPVUJMRV9CVUZGRVI7Ci0KLQljYW0tPmNsYW1waW5nID0gKGNsYW1waW5nW2Rldl9ucl0gPT0gMCB8fCBjbGFtcGluZ1tkZXZfbnJdID09IDEpCi0JCQk/ICh1OCljbGFtcGluZ1tkZXZfbnJdIDogVzk5NjhDRl9DTEFNUElORzsKLQotCWNhbS0+ZmlsdGVyX3R5cGUgPSAoZmlsdGVyX3R5cGVbZGV2X25yXSA9PSAwIHx8Ci0JCQkgICAgZmlsdGVyX3R5cGVbZGV2X25yXSA9PSAxIHx8Ci0JCQkgICAgZmlsdGVyX3R5cGVbZGV2X25yXSA9PSAyKQotCQkJICAgPyAodTgpZmlsdGVyX3R5cGVbZGV2X25yXSA6IFc5OTY4Q0ZfRklMVEVSX1RZUEU7Ci0KLQljYW0tPmNhcHR1cmUgPSAxOwotCi0JY2FtLT5sYXJnZXZpZXcgPSAobGFyZ2V2aWV3W2Rldl9ucl0gPT0gMCB8fCBsYXJnZXZpZXdbZGV2X25yXSA9PSAxKQotCQkJID8gKHU4KWxhcmdldmlld1tkZXZfbnJdIDogVzk5NjhDRl9MQVJHRVZJRVc7Ci0KLQljYW0tPmRlY29tcHJlc3Npb24gPSAoZGVjb21wcmVzc2lvbltkZXZfbnJdID09IDAgfHwKLQkJCSAgICAgIGRlY29tcHJlc3Npb25bZGV2X25yXSA9PSAxIHx8Ci0JCQkgICAgICBkZWNvbXByZXNzaW9uW2Rldl9ucl0gPT0gMikKLQkJCSAgICAgPyAodTgpZGVjb21wcmVzc2lvbltkZXZfbnJdOlc5OTY4Q0ZfREVDT01QUkVTU0lPTjsKLQotCWNhbS0+dXBzY2FsaW5nID0gKHVwc2NhbGluZ1tkZXZfbnJdID09IDAgfHwKLQkJCSAgdXBzY2FsaW5nW2Rldl9ucl0gPT0gMSkKLQkJCSA/ICh1OCl1cHNjYWxpbmdbZGV2X25yXSA6IFc5OTY4Q0ZfVVBTQ0FMSU5HOwotCi0JY2FtLT5hdXRvX2JydCA9IChhdXRvYnJpZ2h0W2Rldl9ucl0gPT0gMCB8fCBhdXRvYnJpZ2h0W2Rldl9ucl0gPT0gMSkKLQkJCT8gKHU4KWF1dG9icmlnaHRbZGV2X25yXSA6IFc5OTY4Q0ZfQVVUT0JSSUdIVDsKLQotCWNhbS0+YXV0b19leHAgPSAoYXV0b2V4cFtkZXZfbnJdID09IDAgfHwgYXV0b2V4cFtkZXZfbnJdID09IDEpCi0JCQk/ICh1OClhdXRvZXhwW2Rldl9ucl0gOiBXOTk2OENGX0FVVE9FWFA7Ci0KLQljYW0tPmxpZ2h0ZnJlcSA9IChsaWdodGZyZXFbZGV2X25yXSA9PSA1MCB8fCBsaWdodGZyZXFbZGV2X25yXSA9PSA2MCkKLQkJCSA/ICh1OClsaWdodGZyZXFbZGV2X25yXSA6IFc5OTY4Q0ZfTElHSFRGUkVROwotCi0JY2FtLT5iYW5kZmlsdCA9IChiYW5kaW5nZmlsdGVyW2Rldl9ucl0gPT0gMCB8fAotCQkJIGJhbmRpbmdmaWx0ZXJbZGV2X25yXSA9PSAxKQotCQkJPyAodTgpYmFuZGluZ2ZpbHRlcltkZXZfbnJdIDogVzk5NjhDRl9CQU5ESU5HRklMVEVSOwotCi0JY2FtLT5iYWNrbGlnaHQgPSAoYmFja2xpZ2h0W2Rldl9ucl0gPT0gMCB8fCBiYWNrbGlnaHRbZGV2X25yXSA9PSAxKQotCQkJID8gKHU4KWJhY2tsaWdodFtkZXZfbnJdIDogVzk5NjhDRl9CQUNLTElHSFQ7Ci0KLQljYW0tPmNsb2NrZGl2ID0gKGNsb2NrZGl2W2Rldl9ucl0gPT0gLTEgfHwgY2xvY2tkaXZbZGV2X25yXSA+PSAwKQotCQkJPyAoczgpY2xvY2tkaXZbZGV2X25yXSA6IFc5OTY4Q0ZfQ0xPQ0tESVY7Ci0KLQljYW0tPm1pcnJvciA9IChtaXJyb3JbZGV2X25yXSA9PSAwIHx8IG1pcnJvcltkZXZfbnJdID09IDEpCi0JCSAgICAgID8gKHU4KW1pcnJvcltkZXZfbnJdIDogVzk5NjhDRl9NSVJST1I7Ci0KLQljYW0tPm1vbm9jaHJvbWUgPSAobW9ub2Nocm9tZVtkZXZfbnJdID09IDAgfHwgbW9ub2Nocm9tZVtkZXZfbnJdID09IDEpCi0JCQkgID8gbW9ub2Nocm9tZVtkZXZfbnJdIDogVzk5NjhDRl9NT05PQ0hST01FOwotCi0JY2FtLT5waWN0dXJlLmJyaWdodG5lc3MgPSAodTE2KWJyaWdodG5lc3NbZGV2X25yXTsKLQljYW0tPnBpY3R1cmUuaHVlID0gKHUxNilodWVbZGV2X25yXTsKLQljYW0tPnBpY3R1cmUuY29sb3VyID0gKHUxNiljb2xvdXJbZGV2X25yXTsKLQljYW0tPnBpY3R1cmUuY29udHJhc3QgPSAodTE2KWNvbnRyYXN0W2Rldl9ucl07Ci0JY2FtLT5waWN0dXJlLndoaXRlbmVzcyA9ICh1MTYpd2hpdGVuZXNzW2Rldl9ucl07Ci0JaWYgKHc5OTY4Y2ZfdmFsaWRfcGFsZXR0ZSgodTE2KWZvcmNlX3BhbGV0dGVbZGV2X25yXSkpIHsKLQkJY2FtLT5waWN0dXJlLnBhbGV0dGUgPSAodTE2KWZvcmNlX3BhbGV0dGVbZGV2X25yXTsKLQkJY2FtLT5mb3JjZV9wYWxldHRlID0gMTsKLQl9IGVsc2UgewotCQljYW0tPmZvcmNlX3BhbGV0dGUgPSAwOwotCQlpZiAoY2FtLT5kZWNvbXByZXNzaW9uID09IDApCi0JCQljYW0tPnBpY3R1cmUucGFsZXR0ZSA9IFc5OTY4Q0ZfUEFMRVRURV9ERUNPTVBfT0ZGOwotCQllbHNlIGlmIChjYW0tPmRlY29tcHJlc3Npb24gPT0gMSkKLQkJCWNhbS0+cGljdHVyZS5wYWxldHRlID0gVzk5NjhDRl9QQUxFVFRFX0RFQ09NUF9GT1JDRTsKLQkJZWxzZQotCQkJY2FtLT5waWN0dXJlLnBhbGV0dGUgPSBXOTk2OENGX1BBTEVUVEVfREVDT01QX09OOwotCX0KLQljYW0tPnBpY3R1cmUuZGVwdGggPSB3OTk2OGNmX3ZhbGlkX2RlcHRoKGNhbS0+cGljdHVyZS5wYWxldHRlKTsKLQotCWNhbS0+Zm9yY2VfcmdiID0gKGZvcmNlX3JnYltkZXZfbnJdID09IDAgfHwgZm9yY2VfcmdiW2Rldl9ucl0gPT0gMSkKLQkJCSA/ICh1OClmb3JjZV9yZ2JbZGV2X25yXSA6IFc5OTY4Q0ZfRk9SQ0VfUkdCOwotCi0JY2FtLT53aW5kb3cueCA9IDA7Ci0JY2FtLT53aW5kb3cueSA9IDA7Ci0JY2FtLT53aW5kb3cud2lkdGggPSBXOTk2OENGX1dJRFRIOwotCWNhbS0+d2luZG93LmhlaWdodCA9IFc5OTY4Q0ZfSEVJR0hUOwotCWNhbS0+d2luZG93LmNocm9tYWtleSA9IDA7Ci0JY2FtLT53aW5kb3cuY2xpcGNvdW50ID0gMDsKLQljYW0tPndpbmRvdy5mbGFncyA9IDA7Ci0KLQlEQkcoMywgIiVzIGNvbmZpZ3VyZWQgd2l0aCBzZXR0aW5ncyAjJXU6IiwKLQkgICAgc3ltYm9saWMoY2FtbGlzdCwgY2FtLT5pZCksIGRldl9ucikKLQotCURCRygzLCAiLSBEYXRhIHBhY2tldCBzaXplIGZvciBVU0IgaXNvY2hybm91cyB0cmFuc2ZlcjogJXUgYnl0ZXMiLAotCSAgICB3TWF4UGFja2V0U2l6ZVtjYW0tPmFsdHNldHRpbmctMV0pCi0KLQlEQkcoMywgIi0gTnVtYmVyIG9mIHJlcXVlc3RlZCB2aWRlbyBmcmFtZSBidWZmZXJzOiAldSIsCi0JICAgIGNhbS0+bWF4X2J1ZmZlcnMpCi0KLQlpZiAoY2FtLT5kb3VibGVfYnVmZmVyKQotCQlEQkcoMywgIi0gSGFyZHdhcmUgZG91YmxlIGJ1ZmZlcmluZyBlbmFibGVkIikKLQllbHNlCi0JCURCRygzLCAiLSBIYXJkd2FyZSBkb3VibGUgYnVmZmVyaW5nIGRpc2FibGVkIikKLQotCWlmIChjYW0tPmZpbHRlcl90eXBlID09IDApCi0JCURCRygzLCAiLSBWaWRlbyBmaWx0ZXJpbmcgZGlzYWJsZWQiKQotCWVsc2UgaWYgKGNhbS0+ZmlsdGVyX3R5cGUgPT0gMSkKLQkJREJHKDMsICItIFZpZGVvIGZpbHRlcmluZyBlbmFibGVkOiB0eXBlIDEtMi0xIikKLQllbHNlIGlmIChjYW0tPmZpbHRlcl90eXBlID09IDIpCi0JCURCRygzLCAiLSBWaWRlbyBmaWx0ZXJpbmcgZW5hYmxlZDogdHlwZSAyLTMtNi0zLTIiKQotCi0JaWYgKGNhbS0+Y2xhbXBpbmcpCi0JCURCRygzLCAiLSBWaWRlbyBkYXRhIGNsYW1waW5nIChDQ0lSLTYwMSBmb3JtYXQpIGVuYWJsZWQiKQotCWVsc2UKLQkJREJHKDMsICItIFZpZGVvIGRhdGEgY2xhbXBpbmcgKENDSVItNjAxIGZvcm1hdCkgZGlzYWJsZWQiKQotCi0JaWYgKGNhbS0+bGFyZ2V2aWV3KQotCQlEQkcoMywgIi0gTGFyZ2UgdmlldyBlbmFibGVkIikKLQllbHNlCi0JCURCRygzLCAiLSBMYXJnZSB2aWV3IGRpc2FibGVkIikKLQotCWlmICgoY2FtLT5kZWNvbXByZXNzaW9uKSA9PSAwICYmICghY2FtLT5mb3JjZV9wYWxldHRlKSkKLQkJREJHKDMsICItIERlY29tcHJlc3Npb24gZGlzYWJsZWQiKQotCWVsc2UgaWYgKChjYW0tPmRlY29tcHJlc3Npb24pID09IDEgJiYgKCFjYW0tPmZvcmNlX3BhbGV0dGUpKQotCQlEQkcoMywgIi0gRGVjb21wcmVzc2lvbiBmb3JjZWQiKQotCWVsc2UgaWYgKChjYW0tPmRlY29tcHJlc3Npb24pID09IDIgJiYgKCFjYW0tPmZvcmNlX3BhbGV0dGUpKQotCQlEQkcoMywgIi0gRGVjb21wcmVzc2lvbiBhbGxvd2VkIikKLQotCWlmIChjYW0tPnVwc2NhbGluZykKLQkJREJHKDMsICItIFNvZnR3YXJlIGltYWdlIHNjYWxpbmcgZW5hYmxlZCIpCi0JZWxzZQotCQlEQkcoMywgIi0gU29mdHdhcmUgaW1hZ2Ugc2NhbGluZyBkaXNhYmxlZCIpCi0KLQlpZiAoY2FtLT5mb3JjZV9wYWxldHRlKQotCQlEQkcoMywgIi0gSW1hZ2UgcGFsZXR0ZSBmb3JjZWQgdG8gJXMiLAotCQkgICAgc3ltYm9saWModjRsMV9wbGlzdCwgY2FtLT5waWN0dXJlLnBhbGV0dGUpKQotCi0JaWYgKGNhbS0+Zm9yY2VfcmdiKQotCQlEQkcoMywgIi0gUkdCIGNvbXBvbmVudCBvcmRlcmluZyB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiBCR1IiKQotCi0JaWYgKGNhbS0+YXV0b19icnQpCi0JCURCRygzLCAiLSBBdXRvIGJyaWdodG5lc3MgZW5hYmxlZCIpCi0JZWxzZQotCQlEQkcoMywgIi0gQXV0byBicmlnaHRuZXNzIGRpc2FibGVkIikKLQotCWlmIChjYW0tPmF1dG9fZXhwKQotCQlEQkcoMywgIi0gQXV0byBleHBvc3VyZSBlbmFibGVkIikKLQllbHNlCi0JCURCRygzLCAiLSBBdXRvIGV4cG9zdXJlIGRpc2FibGVkIikKLQotCWlmIChjYW0tPmJhY2tsaWdodCkKLQkJREJHKDMsICItIEJhY2tsaWdodCBleHBvc3VyZSBhbGdvcml0aG0gZW5hYmxlZCIpCi0JZWxzZQotCQlEQkcoMywgIi0gQmFja2xpZ2h0IGV4cG9zdXJlIGFsZ29yaXRobSBkaXNhYmxlZCIpCi0KLQlpZiAoY2FtLT5taXJyb3IpCi0JCURCRygzLCAiLSBNaXJyb3IgZW5hYmxlZCIpCi0JZWxzZQotCQlEQkcoMywgIi0gTWlycm9yIGRpc2FibGVkIikKLQotCWlmIChjYW0tPmJhbmRmaWx0KQotCQlEQkcoMywgIi0gQmFuZGluZyBmaWx0ZXIgZW5hYmxlZCIpCi0JZWxzZQotCQlEQkcoMywgIi0gQmFuZGluZyBmaWx0ZXIgZGlzYWJsZWQiKQotCi0JREJHKDMsICItIFBvd2VyIGxpZ2h0aW5nIGZyZXF1ZW5jeTogJXUiLCBjYW0tPmxpZ2h0ZnJlcSkKLQotCWlmIChjYW0tPmNsb2NrZGl2ID09IC0xKQotCQlEQkcoMywgIi0gQXV0b21hdGljIGNsb2NrIGRpdmlzb3IgZW5hYmxlZCIpCi0JZWxzZQotCQlEQkcoMywgIi0gQ2xvY2sgZGl2aXNvcjogJWQiLCBjYW0tPmNsb2NrZGl2KQotCi0JaWYgKGNhbS0+bW9ub2Nocm9tZSkKLQkJREJHKDMsICItIEltYWdlIHNlbnNvciB1c2VkIGFzIG1vbm9jaHJvbWUiKQotCWVsc2UKLQkJREJHKDMsICItIEltYWdlIHNlbnNvciBub3QgdXNlZCBhcyBtb25vY2hyb21lIikKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIElmIHRoZSB2aWRlbyBwb3N0LXByb2Nlc3NpbmcgbW9kdWxlIGlzIG5vdCBsb2FkZWQsIHNvbWUgcGFyYW1ldGVycwotICBtdXN0IGJlIG92ZXJyaWRkZW4uCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkIHc5OTY4Y2ZfYWRqdXN0X2NvbmZpZ3VyYXRpb24oc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCi17Ci0JaWYgKCF3OTk2OGNmX3ZwcCkgewotCQlpZiAoY2FtLT5kZWNvbXByZXNzaW9uID09IDEpIHsKLQkJCWNhbS0+ZGVjb21wcmVzc2lvbiA9IDI7Ci0JCQlEQkcoMiwgIlZpZGVvIHBvc3QtcHJvY2Vzc2luZyBtb2R1bGUgbm90IGZvdW5kOiAiCi0JCQkgICAgICAgIidkZWNvbXByZXNzaW9uJyBwYXJhbWV0ZXIgZm9yY2VkIHRvIDIiKQotCQl9Ci0JCWlmIChjYW0tPnVwc2NhbGluZykgewotCQkJY2FtLT51cHNjYWxpbmcgPSAwOwotCQkJREJHKDIsICJWaWRlbyBwb3N0LXByb2Nlc3NpbmcgbW9kdWxlIG5vdCBmb3VuZDogIgotCQkJICAgICAgICIndXBzY2FsaW5nJyBwYXJhbWV0ZXIgZm9yY2VkIHRvIDAiKQotCQl9Ci0JCWlmIChjYW0tPnBpY3R1cmUucGFsZXR0ZSAhPSBWSURFT19QQUxFVFRFX1VZVlkpIHsKLQkJCWNhbS0+Zm9yY2VfcGFsZXR0ZSA9IDA7Ci0JCQlEQkcoMiwgIlZpZGVvIHBvc3QtcHJvY2Vzc2luZyBtb2R1bGUgbm90IGZvdW5kOiAiCi0JCQkgICAgICAgIidmb3JjZV9wYWxldHRlJyBwYXJhbWV0ZXIgZm9yY2VkIHRvIDAiKQotCQl9Ci0JCWNhbS0+cGljdHVyZS5wYWxldHRlID0gVklERU9fUEFMRVRURV9VWVZZOwotCQljYW0tPnBpY3R1cmUuZGVwdGggPSB3OTk2OGNmX3ZhbGlkX2RlcHRoKGNhbS0+cGljdHVyZS5wYWxldHRlKTsKLQl9Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBSZWxlYXNlIHRoZSByZXNvdXJjZXMgdXNlZCBieSB0aGUgZHJpdmVyLgotICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBkaXNjb25uZWN0Ci0gIChvciBvbiBjbG9zZSBpZiBkZWFsbG9jYXRpb24gaGFzIGJlZW4gZGVmZXJyZWQpCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkIHc5OTY4Y2ZfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCi17Ci0JbXV0ZXhfbG9jaygmdzk5NjhjZl9kZXZsaXN0X211dGV4KTsKLQotCURCRygyLCAiVjRMIGRldmljZSBkZXJlZ2lzdGVyZWQ6ICVzIiwKLQkgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShjYW0tPnY0bGRldikpCi0KLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShjYW0tPnY0bGRldik7Ci0JbGlzdF9kZWwoJmNhbS0+djRsbGlzdCk7Ci0JaTJjX2RlbF9hZGFwdGVyKCZjYW0tPmkyY19hZGFwdGVyKTsKLQl3OTk2OGNmX2RlYWxsb2NhdGVfbWVtb3J5KGNhbSk7Ci0Ja2ZyZWUoY2FtLT5jb250cm9sX2J1ZmZlcik7Ci0Ja2ZyZWUoY2FtLT5kYXRhX2J1ZmZlcik7Ci0JdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmY2FtLT52NGwyX2Rldik7Ci0KLQltdXRleF91bmxvY2soJnc5OTY4Y2ZfZGV2bGlzdF9tdXRleCk7Ci19Ci0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogVmlkZW80TGludXggaW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgaW50IHc5OTY4Y2Zfb3BlbihzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbTsKLQlpbnQgZXJyOwotCi0JLyogVGhpcyB0aGUgb25seSBzYWZlIHdheSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyB3aXRoIGRpc2Nvbm5lY3QgKi8KLQlpZiAoIWRvd25fcmVhZF90cnlsb2NrKCZ3OTk2OGNmX2Rpc2Nvbm5lY3QpKQotCQlyZXR1cm4gLUVBR0FJTjsKLQotCWNhbSA9IChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKXZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOwotCi0JbXV0ZXhfbG9jaygmY2FtLT5kZXZfbXV0ZXgpOwotCi0JaWYgKGNhbS0+c2Vuc29yID09IENDX1VOS05PV04pIHsKLQkJREJHKDIsICJObyBzdXBwb3J0ZWQgaW1hZ2Ugc2Vuc29yIGhhcyBiZWVuIGRldGVjdGVkIGJ5IHRoZSAiCi0JCSAgICAgICAiJ292Y2FtY2hpcCcgbW9kdWxlIGZvciB0aGUgJXMgKCVzKS4gTWFrZSBzdXJlICIKLQkJICAgICAgICJpdCBpcyBsb2FkZWQgKmJlZm9yZSogKHJlKWNvbm5lY3RpbmcgdGhlIGNhbWVyYS4iLAotCQkgICAgc3ltYm9saWMoY2FtbGlzdCwgY2FtLT5pZCksCi0JCSAgICB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGNhbS0+djRsZGV2KSkKLQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmRldl9tdXRleCk7Ci0JCXVwX3JlYWQoJnc5OTY4Y2ZfZGlzY29ubmVjdCk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWlmIChjYW0tPnVzZXJzKSB7Ci0JCURCRygyLCAiJXMgKCVzKSBoYXMgYmVlbiBhbHJlYWR5IG9jY3VwaWVkIGJ5ICclcyciLAotCQkgICAgc3ltYm9saWMoY2FtbGlzdCwgY2FtLT5pZCksCi0JCSAgICB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGNhbS0+djRsZGV2KSwgY2FtLT5jb21tYW5kKQotCQlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKXx8KGZpbHAtPmZfZmxhZ3MgJiBPX05ERUxBWSkpIHsKLQkJCW11dGV4X3VubG9jaygmY2FtLT5kZXZfbXV0ZXgpOwotCQkJdXBfcmVhZCgmdzk5NjhjZl9kaXNjb25uZWN0KTsKLQkJCXJldHVybiAtRVdPVUxEQkxPQ0s7Ci0JCX0KLQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmRldl9tdXRleCk7Ci0JCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV9leGNsdXNpdmUoY2FtLT5vcGVuLAotCQkJCQkJCSBjYW0tPmRpc2Nvbm5lY3RlZCB8fAotCQkJCQkJCSAhY2FtLT51c2Vycyk7Ci0JCWlmIChlcnIpIHsKLQkJCXVwX3JlYWQoJnc5OTY4Y2ZfZGlzY29ubmVjdCk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JCWlmIChjYW0tPmRpc2Nvbm5lY3RlZCkgewotCQkJdXBfcmVhZCgmdzk5NjhjZl9kaXNjb25uZWN0KTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JCW11dGV4X2xvY2soJmNhbS0+ZGV2X211dGV4KTsKLQl9Ci0KLQlEQkcoNSwgIk9wZW5pbmcgJyVzJywgJXMgLi4uIiwKLQkgICAgc3ltYm9saWMoY2FtbGlzdCwgY2FtLT5pZCksIHZpZGVvX2RldmljZV9ub2RlX25hbWUoY2FtLT52NGxkZXYpKQotCi0JY2FtLT5zdHJlYW1pbmcgPSAwOwotCWNhbS0+bWlzY29uZmlndXJlZCA9IDA7Ci0KLQl3OTk2OGNmX2FkanVzdF9jb25maWd1cmF0aW9uKGNhbSk7Ci0KLQlpZiAoKGVyciA9IHc5OTY4Y2ZfYWxsb2NhdGVfbWVtb3J5KGNhbSkpKQotCQlnb3RvIGRlYWxsb2NhdGVfbWVtb3J5OwotCi0JaWYgKChlcnIgPSB3OTk2OGNmX2luaXRfY2hpcChjYW0pKSkKLQkJZ290byBkZWFsbG9jYXRlX21lbW9yeTsKLQotCWlmICgoZXJyID0gdzk5NjhjZl9zdGFydF90cmFuc2ZlcihjYW0pKSkKLQkJZ290byBkZWFsbG9jYXRlX21lbW9yeTsKLQotCWZpbHAtPnByaXZhdGVfZGF0YSA9IGNhbTsKLQotCWNhbS0+dXNlcnMrKzsKLQlzdHJjcHkoY2FtLT5jb21tYW5kLCBjdXJyZW50LT5jb21tKTsKLQotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhbS0+d2FpdF9xdWV1ZSk7Ci0KLQlEQkcoNSwgIlZpZGVvIGRldmljZSBpcyBvcGVuIikKLQotCW11dGV4X3VubG9jaygmY2FtLT5kZXZfbXV0ZXgpOwotCXVwX3JlYWQoJnc5OTY4Y2ZfZGlzY29ubmVjdCk7Ci0KLQlyZXR1cm4gMDsKLQotZGVhbGxvY2F0ZV9tZW1vcnk6Ci0Jdzk5NjhjZl9kZWFsbG9jYXRlX21lbW9yeShjYW0pOwotCURCRygyLCAiRmFpbGVkIHRvIG9wZW4gdGhlIHZpZGVvIGRldmljZSIpCi0JbXV0ZXhfdW5sb2NrKCZjYW0tPmRldl9tdXRleCk7Ci0JdXBfcmVhZCgmdzk5NjhjZl9kaXNjb25uZWN0KTsKLQlyZXR1cm4gZXJyOwotfQotCi0KLXN0YXRpYyBpbnQgdzk5NjhjZl9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxwKQotewotCXN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtOwotCi0JY2FtID0gKHN0cnVjdCB3OTk2OGNmX2RldmljZSopdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7Ci0KLQltdXRleF9sb2NrKCZjYW0tPmRldl9tdXRleCk7IC8qIHByZXZlbnQgZGlzY29ubmVjdCgpIHRvIGJlIGNhbGxlZCAqLwotCi0Jdzk5NjhjZl9zdG9wX3RyYW5zZmVyKGNhbSk7Ci0KLQlpZiAoY2FtLT5kaXNjb25uZWN0ZWQpIHsKLQkJdzk5NjhjZl9yZWxlYXNlX3Jlc291cmNlcyhjYW0pOwotCQltdXRleF91bmxvY2soJmNhbS0+ZGV2X211dGV4KTsKLQkJa2ZyZWUoY2FtKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JY2FtLT51c2Vycy0tOwotCXc5OTY4Y2ZfZGVhbGxvY2F0ZV9tZW1vcnkoY2FtKTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGVfbnIoJmNhbS0+b3BlbiwgMSk7Ci0KLQlEQkcoNSwgIlZpZGVvIGRldmljZSBjbG9zZWQiKQotCW11dGV4X3VubG9jaygmY2FtLT5kZXZfbXV0ZXgpOwotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBzc2l6ZV90Ci13OTk2OGNmX3JlYWQoc3RydWN0IGZpbGUqIGZpbHAsIGNoYXIgX191c2VyICogYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCogZl9wb3MpCi17Ci0Jc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW07Ci0Jc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCogZnI7Ci0JaW50IGVyciA9IDA7Ci0KLQljYW0gPSAoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKil2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKLQotCWlmIChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykKLQkJcmV0dXJuIC1FV09VTERCTE9DSzsKLQotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhbS0+ZmlsZW9wX211dGV4KSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQotCWlmIChjYW0tPmRpc2Nvbm5lY3RlZCkgewotCQlEQkcoMiwgIkRldmljZSBub3QgcHJlc2VudCIpCi0JCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlpZiAoY2FtLT5taXNjb25maWd1cmVkKSB7Ci0JCURCRygyLCAiVGhlIGNhbWVyYSBpcyBtaXNjb25maWd1cmVkLiBDbG9zZSBhbmQgb3BlbiBpdCBhZ2Fpbi4iKQotCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JaWYgKCFjYW0tPmZyYW1lWzBdLnF1ZXVlZCkKLQkJdzk5NjhjZl9wdXNoX2ZyYW1lKGNhbSwgMCk7Ci0KLQlpZiAoIWNhbS0+ZnJhbWVbMV0ucXVldWVkKQotCQl3OTk2OGNmX3B1c2hfZnJhbWUoY2FtLCAxKTsKLQotCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjYW0tPndhaXRfcXVldWUsCi0JCQkJICAgICAgIGNhbS0+ZnJhbWVbMF0uc3RhdHVzID09IEZfUkVBRFkgfHwKLQkJCQkgICAgICAgY2FtLT5mcmFtZVsxXS5zdGF0dXMgPT0gRl9SRUFEWSB8fAotCQkJCSAgICAgICBjYW0tPmRpc2Nvbm5lY3RlZCk7Ci0JaWYgKGVycikgewotCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JaWYgKGNhbS0+ZGlzY29ubmVjdGVkKSB7Ci0JCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlmciA9IChjYW0tPmZyYW1lWzBdLnN0YXR1cyA9PSBGX1JFQURZKSA/ICZjYW0tPmZyYW1lWzBdOiZjYW0tPmZyYW1lWzFdOwotCi0JaWYgKHc5OTY4Y2ZfdnBwKQotCQl3OTk2OGNmX3Bvc3Rwcm9jZXNzX2ZyYW1lKGNhbSwgZnIpOwotCi0JaWYgKGNvdW50ID4gZnItPmxlbmd0aCkKLQkJY291bnQgPSBmci0+bGVuZ3RoOwotCi0JaWYgKGNvcHlfdG9fdXNlcihidWYsIGZyLT5idWZmZXIsIGNvdW50KSkgewotCQlmci0+c3RhdHVzID0gRl9VTlVTRUQ7Ci0JCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JKmZfcG9zICs9IGNvdW50OwotCi0JZnItPnN0YXR1cyA9IEZfVU5VU0VEOwotCi0JREJHKDUsICIlenUgYnl0ZXMgcmVhZCIsIGNvdW50KQotCi0JbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7Ci0JcmV0dXJuIGNvdW50OwotfQotCi0KLXN0YXRpYyBpbnQgdzk5NjhjZl9tbWFwKHN0cnVjdCBmaWxlKiBmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSA9IChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKQotCQkJCSAgICAgdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7Ci0JdW5zaWduZWQgbG9uZyB2c2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKLQkJICAgICAgcHNpemUgPSBjYW0tPm5idWZmZXJzICogY2FtLT5mcmFtZVswXS5zaXplLAotCQkgICAgICBzdGFydCA9IHZtYS0+dm1fc3RhcnQsCi0JCSAgICAgIHBvcyA9ICh1bnNpZ25lZCBsb25nKWNhbS0+ZnJhbWVbMF0uYnVmZmVyLAotCQkgICAgICBwYWdlOwotCi0JaWYgKGNhbS0+ZGlzY29ubmVjdGVkKSB7Ci0JCURCRygyLCAiRGV2aWNlIG5vdCBwcmVzZW50IikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWYgKGNhbS0+bWlzY29uZmlndXJlZCkgewotCQlEQkcoMiwgIlRoZSBjYW1lcmEgaXMgbWlzY29uZmlndXJlZC4gQ2xvc2UgYW5kIG9wZW4gaXQgYWdhaW4iKQotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlQREJHRygibW1hcHBpbmcgJWx1IGJ5dGVzLi4uIiwgdnNpemUpCi0KLQlpZiAodnNpemUgPiBwc2l6ZSAtICh2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXdoaWxlICh2c2l6ZSA+IDApIHsKLQkJcGFnZSA9IHZtYWxsb2NfdG9fcGZuKCh2b2lkICopcG9zKTsKLQkJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwYWdlICsgdm1hLT52bV9wZ29mZiwKLQkJCQkJCVBBR0VfU0laRSwgdm1hLT52bV9wYWdlX3Byb3QpKQotCQkJcmV0dXJuIC1FQUdBSU47Ci0JCXN0YXJ0ICs9IFBBR0VfU0laRTsKLQkJcG9zICs9IFBBR0VfU0laRTsKLQkJdnNpemUgLT0gUEFHRV9TSVpFOwotCX0KLQotCURCRyg1LCAibW1hcCBtZXRob2Qgc3VjY2Vzc2Z1bGx5IGNhbGxlZCIpCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGxvbmcKLXc5OTY4Y2ZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCi0JICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0Jc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW07Ci0JbG9uZyBlcnI7Ci0KLQljYW0gPSAoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKil2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKLQotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhbS0+ZmlsZW9wX211dGV4KSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQotCWlmIChjYW0tPmRpc2Nvbm5lY3RlZCkgewotCQlEQkcoMiwgIkRldmljZSBub3QgcHJlc2VudCIpCi0JCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlpZiAoY2FtLT5taXNjb25maWd1cmVkKSB7Ci0JCURCRygyLCAiVGhlIGNhbWVyYSBpcyBtaXNjb25maWd1cmVkLiBDbG9zZSBhbmQgb3BlbiBpdCBhZ2Fpbi4iKQotCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JZXJyID0gdzk5NjhjZl92NGxfaW9jdGwoZmlscCwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOwotCi0JbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotCi1zdGF0aWMgbG9uZyB3OTk2OGNmX3Y0bF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZykKLXsKLQlzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbTsKLQljb25zdCBjaGFyKiB2NGwxX2lvY3Rsc1tdID0gewotCQkiPyIsICJDR0FQIiwgIkdDSEFOIiwgIlNDSEFOIiwgIkdUVU5FUiIsICJTVFVORVIiLAotCQkiR1BJQ1QiLCAiU1BJQ1QiLCAiQ0NBUFRVUkUiLCAiR1dJTiIsICJTV0lOIiwgIkdGQlVGIiwKLQkJIlNGQlVGIiwgIktFWSIsICJHRlJFUSIsICJTRlJFUSIsICJHQVVESU8iLCAiU0FVRElPIiwKLQkJIlNZTkMiLCAiTUNBUFRVUkUiLCAiR01CVUYiLCAiR1VOSVQiLCAiR0NBUFRVUkUiLCAiU0NBUFRVUkUiLAotCQkiU1BMQVlNT0RFIiwgIlNXUklURU1PREUiLCAiR1BMQVlJTkZPIiwgIlNNSUNST0NPREUiLAotCQkiR1ZCSUZNVCIsICJTVkJJRk1UIgotCX07Ci0KLQkjZGVmaW5lIFY0TDFfSU9DVEwoY21kKSBcCi0JCSgoX0lPQ19OUigoY21kKSkgPCBBUlJBWV9TSVpFKHY0bDFfaW9jdGxzKSkgPyBcCi0JCXY0bDFfaW9jdGxzW19JT0NfTlIoKGNtZCkpXSA6ICI/IikKLQotCWNhbSA9IChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKXZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOwotCi0Jc3dpdGNoIChjbWQpIHsKLQotCWNhc2UgVklESU9DR0NBUDogLyogZ2V0IHZpZGVvIGNhcGFiaWxpdHkgKi8KLQl7Ci0JCXN0cnVjdCB2aWRlb19jYXBhYmlsaXR5IGNhcCA9IHsKLQkJCS50eXBlID0gVklEX1RZUEVfQ0FQVFVSRSB8IFZJRF9UWVBFX1NDQUxFUywKLQkJCS5jaGFubmVscyA9IDEsCi0JCQkuYXVkaW9zID0gMCwKLQkJCS5taW53aWR0aCA9IGNhbS0+bWlud2lkdGgsCi0JCQkubWluaGVpZ2h0ID0gY2FtLT5taW5oZWlnaHQsCi0JCX07Ci0JCXNwcmludGYoY2FwLm5hbWUsICJXOTk2Wzg3XUNGIFVTQiBDYW1lcmEiKTsKLQkJY2FwLm1heHdpZHRoID0gKGNhbS0+dXBzY2FsaW5nICYmIHc5OTY4Y2ZfdnBwKQotCQkJICAgICAgID8gbWF4KCh1MTYpVzk5NjhDRl9NQVhfV0lEVEgsIGNhbS0+bWF4d2lkdGgpCi0JCQkJIDogY2FtLT5tYXh3aWR0aDsKLQkJY2FwLm1heGhlaWdodCA9IChjYW0tPnVwc2NhbGluZyAmJiB3OTk2OGNmX3ZwcCkKLQkJCQk/IG1heCgodTE2KVc5OTY4Q0ZfTUFYX0hFSUdIVCwgY2FtLT5tYXhoZWlnaHQpCi0JCQkJICA6IGNhbS0+bWF4aGVpZ2h0OwotCi0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmY2FwLCBzaXplb2YoY2FwKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCQlEQkcoNSwgIlZJRElPQ0dDQVAgc3VjY2Vzc2Z1bGx5IGNhbGxlZCIpCi0JCXJldHVybiAwOwotCX0KLQotCWNhc2UgVklESU9DR0NIQU46IC8qIGdldCB2aWRlbyBjaGFubmVsIGluZm9ybWF0aW9ucyAqLwotCXsKLQkJc3RydWN0IHZpZGVvX2NoYW5uZWwgY2hhbjsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZjaGFuLCBhcmcsIHNpemVvZihjaGFuKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCQlpZiAoY2hhbi5jaGFubmVsICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlzdHJjcHkoY2hhbi5uYW1lLCAiQ2FtZXJhIik7Ci0JCWNoYW4udHVuZXJzID0gMDsKLQkJY2hhbi5mbGFncyA9IDA7Ci0JCWNoYW4udHlwZSA9IFZJREVPX1RZUEVfQ0FNRVJBOwotCQljaGFuLm5vcm0gPSBWSURFT19NT0RFX0FVVE87Ci0KLQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZjaGFuLCBzaXplb2YoY2hhbikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJREJHKDUsICJWSURJT0NHQ0hBTiBzdWNjZXNzZnVsbHkgY2FsbGVkIikKLQkJcmV0dXJuIDA7Ci0JfQotCi0JY2FzZSBWSURJT0NTQ0hBTjogLyogc2V0IGFjdGl2ZSBjaGFubmVsICovCi0JewotCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCBjaGFuOwotCi0JCWlmIChjb3B5X2Zyb21fdXNlcigmY2hhbiwgYXJnLCBzaXplb2YoY2hhbikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJaWYgKGNoYW4uY2hhbm5lbCAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJREJHKDUsICJWSURJT0NTQ0hBTiBzdWNjZXNzZnVsbHkgY2FsbGVkIikKLQkJcmV0dXJuIDA7Ci0JfQotCi0JY2FzZSBWSURJT0NHUElDVDogLyogZ2V0IGltYWdlIHByb3BlcnRpZXMgb2YgdGhlIHBpY3R1cmUgKi8KLQl7Ci0JCWlmICh3OTk2OGNmX3NlbnNvcl9nZXRfcGljdHVyZShjYW0pKQotCQkJcmV0dXJuIC1FSU87Ci0KLQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZjYW0tPnBpY3R1cmUsIHNpemVvZihjYW0tPnBpY3R1cmUpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCURCRyg1LCAiVklESU9DR1BJQ1Qgc3VjY2Vzc2Z1bGx5IGNhbGxlZCIpCi0JCXJldHVybiAwOwotCX0KLQotCWNhc2UgVklESU9DU1BJQ1Q6IC8qIGNoYW5nZSBwaWN0dXJlIHNldHRpbmdzICovCi0JewotCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSBwaWN0OwotCQlpbnQgZXJyID0gMDsKLQotCQlpZiAoY29weV9mcm9tX3VzZXIoJnBpY3QsIGFyZywgc2l6ZW9mKHBpY3QpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCWlmICggKGNhbS0+Zm9yY2VfcGFsZXR0ZSB8fCAhdzk5NjhjZl92cHApCi0JCSAgICAgJiYgcGljdC5wYWxldHRlICE9IGNhbS0+cGljdHVyZS5wYWxldHRlICkgewotCQkJREJHKDQsICJQYWxldHRlICVzIHJlamVjdGVkOiBvbmx5ICVzIGlzIGFsbG93ZWQiLAotCQkJICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIHBpY3QucGFsZXR0ZSksCi0JCQkgICAgc3ltYm9saWModjRsMV9wbGlzdCwgY2FtLT5waWN0dXJlLnBhbGV0dGUpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlpZiAoIXc5OTY4Y2ZfdmFsaWRfcGFsZXR0ZShwaWN0LnBhbGV0dGUpKSB7Ci0JCQlEQkcoNCwgIlBhbGV0dGUgJXMgbm90IHN1cHBvcnRlZC4gVklESU9DU1BJQ1QgZmFpbGVkIiwKLQkJCSAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCBwaWN0LnBhbGV0dGUpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlpZiAoIWNhbS0+Zm9yY2VfcGFsZXR0ZSkgewotCQkgICBpZiAoY2FtLT5kZWNvbXByZXNzaW9uID09IDApIHsKLQkJICAgICAgaWYgKHc5OTY4Y2ZfbmVlZF9kZWNvbXByZXNzaW9uKHBpY3QucGFsZXR0ZSkpIHsKLQkJCSBEQkcoNCwgIkRlY29tcHJlc3Npb24gZGlzYWJsZWQ6IHBhbGV0dGUgJXMgaXMgbm90ICIKLQkJCQkiYWxsb3dlZC4gVklESU9DU1BJQ1QgZmFpbGVkIiwKLQkJCSAgICAgc3ltYm9saWModjRsMV9wbGlzdCwgcGljdC5wYWxldHRlKSkKLQkJCSByZXR1cm4gLUVJTlZBTDsKLQkJICAgICAgfQotCQkgICB9IGVsc2UgaWYgKGNhbS0+ZGVjb21wcmVzc2lvbiA9PSAxKSB7Ci0JCSAgICAgIGlmICghdzk5NjhjZl9uZWVkX2RlY29tcHJlc3Npb24ocGljdC5wYWxldHRlKSkgewotCQkJIERCRyg0LCAiRGVjb21wcmVzc2lvbiBmb3JjZWQ6IHBhbGV0dGUgJXMgaXMgbm90ICIKLQkJCQkiYWxsb3dlZC4gVklESU9DU1BJQ1QgZmFpbGVkIiwKLQkJCSAgICAgc3ltYm9saWModjRsMV9wbGlzdCwgcGljdC5wYWxldHRlKSkKLQkJCSByZXR1cm4gLUVJTlZBTDsKLQkJICAgICAgfQotCQkgICB9Ci0JCX0KLQotCQlpZiAocGljdC5kZXB0aCAhPSB3OTk2OGNmX3ZhbGlkX2RlcHRoKHBpY3QucGFsZXR0ZSkpIHsKLQkJCURCRyg0LCAiUmVxdWVzdGVkIGRlcHRoICV1IGJwcCBpcyBub3QgdmFsaWQgZm9yICVzICIKLQkJCSAgICAgICAicGFsZXR0ZTogaWdub3JlZCBhbmQgY2hhbmdlZCB0byAldSBicHAiLAotCQkJICAgIHBpY3QuZGVwdGgsIHN5bWJvbGljKHY0bDFfcGxpc3QsIHBpY3QucGFsZXR0ZSksCi0JCQkgICAgdzk5NjhjZl92YWxpZF9kZXB0aChwaWN0LnBhbGV0dGUpKQotCQkJcGljdC5kZXB0aCA9IHc5OTY4Y2ZfdmFsaWRfZGVwdGgocGljdC5wYWxldHRlKTsKLQkJfQotCi0JCWlmIChwaWN0LnBhbGV0dGUgIT0gY2FtLT5waWN0dXJlLnBhbGV0dGUpIHsKLQkJCWlmKCpjYW0tPnJlcXVlc3RlZF9mcmFtZQotCQkJICAgfHwgY2FtLT5mcmFtZV9jdXJyZW50LT5xdWV1ZWQpIHsKLQkJCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUKLQkJCQkgICAgICAoIGNhbS0+d2FpdF9xdWV1ZSwKLQkJCQkJY2FtLT5kaXNjb25uZWN0ZWQgfHwKLQkJCQkJKCEqY2FtLT5yZXF1ZXN0ZWRfZnJhbWUgJiYKLQkJCQkJICFjYW0tPmZyYW1lX2N1cnJlbnQtPnF1ZXVlZCkgKTsKLQkJCQlpZiAoZXJyKQotCQkJCQlyZXR1cm4gZXJyOwotCQkJCWlmIChjYW0tPmRpc2Nvbm5lY3RlZCkKLQkJCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQl9Ci0KLQkJCWlmICh3OTk2OGNmX3N0b3BfdHJhbnNmZXIoY2FtKSkKLQkJCQlnb3RvIGlvY3RsX2ZhaWw7Ci0KLQkJCWlmICh3OTk2OGNmX3NldF9waWN0dXJlKGNhbSwgcGljdCkpCi0JCQkJZ290byBpb2N0bF9mYWlsOwotCi0JCQlpZiAodzk5NjhjZl9zdGFydF90cmFuc2ZlcihjYW0pKQotCQkJCWdvdG8gaW9jdGxfZmFpbDsKLQotCQl9IGVsc2UgaWYgKHc5OTY4Y2Zfc2Vuc29yX3VwZGF0ZV9waWN0dXJlKGNhbSwgcGljdCkpCi0JCQlyZXR1cm4gLUVJTzsKLQotCi0JCURCRyg1LCAiVklESU9DU1BJQ1Qgc3VjY2Vzc2Z1bGx5IGNhbGxlZCIpCi0JCXJldHVybiAwOwotCX0KLQotCWNhc2UgVklESU9DU1dJTjogLyogc2V0IGNhcHR1cmUgYXJlYSAqLwotCXsKLQkJc3RydWN0IHZpZGVvX3dpbmRvdyB3aW47Ci0JCWludCBlcnIgPSAwOwotCi0JCWlmIChjb3B5X2Zyb21fdXNlcigmd2luLCBhcmcsIHNpemVvZih3aW4pKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCURCRyg2LCAiVklESU9DU1dJTiBjYWxsZWQ6IGNsaXBjb3VudD0lZCwgZmxhZ3M9JXUsICIKLQkJICAgICAgICJ4PSV1LCB5PSV1LCAldXgldSIsIHdpbi5jbGlwY291bnQsIHdpbi5mbGFncywKLQkJICAgIHdpbi54LCB3aW4ueSwgd2luLndpZHRoLCB3aW4uaGVpZ2h0KQotCi0JCWlmICh3aW4uY2xpcGNvdW50ICE9IDAgfHwgd2luLmZsYWdzICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoKGVyciA9IHc5OTY4Y2ZfYWRqdXN0X3dpbmRvd19zaXplKGNhbSwgJndpbi53aWR0aCwKLQkJCQkJCSAgICAgICZ3aW4uaGVpZ2h0KSkpIHsKLQkJCURCRyg0LCAiUmVzb2x1dGlvbiBub3Qgc3VwcG9ydGVkICgldXgldSkuICIKLQkJCSAgICAgICAiVklESU9DU1dJTiBmYWlsZWQiLCB3aW4ud2lkdGgsIHdpbi5oZWlnaHQpCi0JCQlyZXR1cm4gZXJyOwotCQl9Ci0KLQkJaWYgKHdpbi54ICE9IGNhbS0+d2luZG93LnggfHwKLQkJICAgIHdpbi55ICE9IGNhbS0+d2luZG93LnkgfHwKLQkJICAgIHdpbi53aWR0aCAhPSBjYW0tPndpbmRvdy53aWR0aCB8fAotCQkgICAgd2luLmhlaWdodCAhPSBjYW0tPndpbmRvdy5oZWlnaHQpIHsKLQkJCWlmKCpjYW0tPnJlcXVlc3RlZF9mcmFtZQotCQkJICAgfHwgY2FtLT5mcmFtZV9jdXJyZW50LT5xdWV1ZWQpIHsKLQkJCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUKLQkJCQkgICAgICAoIGNhbS0+d2FpdF9xdWV1ZSwKLQkJCQkJY2FtLT5kaXNjb25uZWN0ZWQgfHwKLQkJCQkJKCEqY2FtLT5yZXF1ZXN0ZWRfZnJhbWUgJiYKLQkJCQkJICFjYW0tPmZyYW1lX2N1cnJlbnQtPnF1ZXVlZCkgKTsKLQkJCQlpZiAoZXJyKQotCQkJCQlyZXR1cm4gZXJyOwotCQkJCWlmIChjYW0tPmRpc2Nvbm5lY3RlZCkKLQkJCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQl9Ci0KLQkJCWlmICh3OTk2OGNmX3N0b3BfdHJhbnNmZXIoY2FtKSkKLQkJCQlnb3RvIGlvY3RsX2ZhaWw7Ci0KLQkJCS8qIFRoaXMgX211c3RfIGJlIGNhbGxlZCBiZWZvcmUgc2V0X3dpbmRvdygpICovCi0JCQlpZiAodzk5NjhjZl9zZXRfcGljdHVyZShjYW0sIGNhbS0+cGljdHVyZSkpCi0JCQkJZ290byBpb2N0bF9mYWlsOwotCi0JCQlpZiAodzk5NjhjZl9zZXRfd2luZG93KGNhbSwgd2luKSkKLQkJCQlnb3RvIGlvY3RsX2ZhaWw7Ci0KLQkJCWlmICh3OTk2OGNmX3N0YXJ0X3RyYW5zZmVyKGNhbSkpCi0JCQkJZ290byBpb2N0bF9mYWlsOwotCQl9Ci0KLQkJREJHKDUsICJWSURJT0NTV0lOIHN1Y2Nlc3NmdWxseSBjYWxsZWQuICIpCi0JCXJldHVybiAwOwotCX0KLQotCWNhc2UgVklESU9DR1dJTjogLyogZ2V0IGN1cnJlbnQgd2luZG93IHByb3BlcnRpZXMgKi8KLQl7Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCZjYW0tPndpbmRvdyxzaXplb2Yoc3RydWN0IHZpZGVvX3dpbmRvdykpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJREJHKDUsICJWSURJT0NHV0lOIHN1Y2Nlc3NmdWxseSBjYWxsZWQiKQotCQlyZXR1cm4gMDsKLQl9Ci0KLQljYXNlIFZJRElPQ0dNQlVGOiAvKiByZXF1ZXN0IGZvciBtZW1vcnkgKG1hcHBlZCkgYnVmZmVyICovCi0JewotCQlzdHJ1Y3QgdmlkZW9fbWJ1ZiBtYnVmOwotCQl1OCBpOwotCi0JCW1idWYuc2l6ZSA9IGNhbS0+bmJ1ZmZlcnMgKiBjYW0tPmZyYW1lWzBdLnNpemU7Ci0JCW1idWYuZnJhbWVzID0gY2FtLT5uYnVmZmVyczsKLQkJZm9yIChpID0gMDsgaSA8IGNhbS0+bmJ1ZmZlcnM7IGkrKykKLQkJCW1idWYub2Zmc2V0c1tpXSA9ICh1bnNpZ25lZCBsb25nKWNhbS0+ZnJhbWVbaV0uYnVmZmVyIC0KLQkJCQkJICAodW5zaWduZWQgbG9uZyljYW0tPmZyYW1lWzBdLmJ1ZmZlcjsKLQotCQlpZiAoY29weV90b191c2VyKGFyZywgJm1idWYsIHNpemVvZihtYnVmKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCQlEQkcoNSwgIlZJRElPQ0dNQlVGIHN1Y2Nlc3NmdWxseSBjYWxsZWQiKQotCQlyZXR1cm4gMDsKLQl9Ci0KLQljYXNlIFZJRElPQ01DQVBUVVJFOiAvKiBzdGFydCB0aGUgY2FwdHVyZSB0byBhIGZyYW1lICovCi0JewotCQlzdHJ1Y3QgdmlkZW9fbW1hcCBtbWFwOwotCQlzdHJ1Y3Qgdzk5NjhjZl9mcmFtZV90KiBmcjsKLQkJdTMyIHcsIGg7Ci0JCWludCBlcnIgPSAwOwotCi0JCWlmIChjb3B5X2Zyb21fdXNlcigmbW1hcCwgYXJnLCBzaXplb2YobW1hcCkpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJREJHKDYsICJWSURJT0NNQ0FQVFVSRSBjYWxsZWQ6IGZyYW1lICMldSwgZm9ybWF0PSVzLCAlZHglZCIsCi0JCSAgICBtbWFwLmZyYW1lLCBzeW1ib2xpYyh2NGwxX3BsaXN0LCBtbWFwLmZvcm1hdCksCi0JCSAgICBtbWFwLndpZHRoLCBtbWFwLmhlaWdodCkKLQotCQlpZiAobW1hcC5mcmFtZSA+PSBjYW0tPm5idWZmZXJzKSB7Ci0JCQlEQkcoNCwgIkludmFsaWQgZnJhbWUgbnVtYmVyICgldSkuICIKLQkJCSAgICAgICAiVklESU9DTUNBUFRVUkUgZmFpbGVkIiwgbW1hcC5mcmFtZSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJaWYgKG1tYXAuZm9ybWF0IT1jYW0tPnBpY3R1cmUucGFsZXR0ZSAmJgotCQkgICAgKGNhbS0+Zm9yY2VfcGFsZXR0ZSB8fCAhdzk5NjhjZl92cHApKSB7Ci0JCQlEQkcoNCwgIlBhbGV0dGUgJXMgcmVqZWN0ZWQ6IG9ubHkgJXMgaXMgYWxsb3dlZCIsCi0JCQkgICAgc3ltYm9saWModjRsMV9wbGlzdCwgbW1hcC5mb3JtYXQpLAotCQkJICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIGNhbS0+cGljdHVyZS5wYWxldHRlKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJaWYgKCF3OTk2OGNmX3ZhbGlkX3BhbGV0dGUobW1hcC5mb3JtYXQpKSB7Ci0JCQlEQkcoNCwgIlBhbGV0dGUgJXMgbm90IHN1cHBvcnRlZC4gIgotCQkJICAgICAgICJWSURJT0NNQ0FQVFVSRSBmYWlsZWQiLAotCQkJICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIG1tYXAuZm9ybWF0KSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJaWYgKCFjYW0tPmZvcmNlX3BhbGV0dGUpIHsKLQkJICAgaWYgKGNhbS0+ZGVjb21wcmVzc2lvbiA9PSAwKSB7Ci0JCSAgICAgIGlmICh3OTk2OGNmX25lZWRfZGVjb21wcmVzc2lvbihtbWFwLmZvcm1hdCkpIHsKLQkJCSBEQkcoNCwgIkRlY29tcHJlc3Npb24gZGlzYWJsZWQ6IHBhbGV0dGUgJXMgaXMgbm90ICIKLQkJCQkiYWxsb3dlZC4gVklESU9DU1BJQ1QgZmFpbGVkIiwKLQkJCSAgICAgc3ltYm9saWModjRsMV9wbGlzdCwgbW1hcC5mb3JtYXQpKQotCQkJIHJldHVybiAtRUlOVkFMOwotCQkgICAgICB9Ci0JCSAgIH0gZWxzZSBpZiAoY2FtLT5kZWNvbXByZXNzaW9uID09IDEpIHsKLQkJICAgICAgaWYgKCF3OTk2OGNmX25lZWRfZGVjb21wcmVzc2lvbihtbWFwLmZvcm1hdCkpIHsKLQkJCSBEQkcoNCwgIkRlY29tcHJlc3Npb24gZm9yY2VkOiBwYWxldHRlICVzIGlzIG5vdCAiCi0JCQkJImFsbG93ZWQuIFZJRElPQ1NQSUNUIGZhaWxlZCIsCi0JCQkgICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIG1tYXAuZm9ybWF0KSkKLQkJCSByZXR1cm4gLUVJTlZBTDsKLQkJICAgICAgfQotCQkgICB9Ci0JCX0KLQotCQl3ID0gbW1hcC53aWR0aDsgaCA9IG1tYXAuaGVpZ2h0OwotCQllcnIgPSB3OTk2OGNmX2FkanVzdF93aW5kb3dfc2l6ZShjYW0sICZ3LCAmaCk7Ci0JCW1tYXAud2lkdGggPSB3OyBtbWFwLmhlaWdodCA9IGg7Ci0JCWlmIChlcnIpIHsKLQkJCURCRyg0LCAiUmVzb2x1dGlvbiBub3Qgc3VwcG9ydGVkICglZHglZCkuICIKLQkJCSAgICAgICAiVklESU9DTUNBUFRVUkUgZmFpbGVkIiwKLQkJCSAgICBtbWFwLndpZHRoLCBtbWFwLmhlaWdodCkKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQotCQlmciA9ICZjYW0tPmZyYW1lW21tYXAuZnJhbWVdOwotCi0JCWlmIChtbWFwLndpZHRoICAhPSBjYW0tPndpbmRvdy53aWR0aCB8fAotCQkgICAgbW1hcC5oZWlnaHQgIT0gY2FtLT53aW5kb3cuaGVpZ2h0IHx8Ci0JCSAgICBtbWFwLmZvcm1hdCAhPSBjYW0tPnBpY3R1cmUucGFsZXR0ZSkgewotCi0JCQlzdHJ1Y3QgdmlkZW9fd2luZG93IHdpbjsKLQkJCXN0cnVjdCB2aWRlb19waWN0dXJlIHBpY3Q7Ci0KLQkJCWlmKCpjYW0tPnJlcXVlc3RlZF9mcmFtZQotCQkJICAgfHwgY2FtLT5mcmFtZV9jdXJyZW50LT5xdWV1ZWQpIHsKLQkJCQlEQkcoNiwgIlZJRElPQ01DQVBUVVJFLiBDaGFuZ2Ugc2V0dGluZ3MgZm9yICIKLQkJCQkgICAgICAgImZyYW1lICMldTogJWR4JWQsIGZvcm1hdCAlcy4gV2FpdC4uLiIsCi0JCQkJICAgIG1tYXAuZnJhbWUsIG1tYXAud2lkdGgsIG1tYXAuaGVpZ2h0LAotCQkJCSAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCBtbWFwLmZvcm1hdCkpCi0JCQkJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlCi0JCQkJICAgICAgKCBjYW0tPndhaXRfcXVldWUsCi0JCQkJCWNhbS0+ZGlzY29ubmVjdGVkIHx8Ci0JCQkJCSghKmNhbS0+cmVxdWVzdGVkX2ZyYW1lICYmCi0JCQkJCSAhY2FtLT5mcmFtZV9jdXJyZW50LT5xdWV1ZWQpICk7Ci0JCQkJaWYgKGVycikKLQkJCQkJcmV0dXJuIGVycjsKLQkJCQlpZiAoY2FtLT5kaXNjb25uZWN0ZWQpCi0JCQkJCXJldHVybiAtRU5PREVWOwotCQkJfQotCi0JCQltZW1jcHkoJndpbiwgJmNhbS0+d2luZG93LCBzaXplb2Yod2luKSk7Ci0JCQltZW1jcHkoJnBpY3QsICZjYW0tPnBpY3R1cmUsIHNpemVvZihwaWN0KSk7Ci0JCQl3aW4ud2lkdGggPSBtbWFwLndpZHRoOwotCQkJd2luLmhlaWdodCA9IG1tYXAuaGVpZ2h0OwotCQkJcGljdC5wYWxldHRlID0gbW1hcC5mb3JtYXQ7Ci0KLQkJCWlmICh3OTk2OGNmX3N0b3BfdHJhbnNmZXIoY2FtKSkKLQkJCQlnb3RvIGlvY3RsX2ZhaWw7Ci0KLQkJCS8qIFRoaXMgYmVmb3JlIHNldF93aW5kb3cgKi8KLQkJCWlmICh3OTk2OGNmX3NldF9waWN0dXJlKGNhbSwgcGljdCkpCi0JCQkJZ290byBpb2N0bF9mYWlsOwotCi0JCQlpZiAodzk5NjhjZl9zZXRfd2luZG93KGNhbSwgd2luKSkKLQkJCQlnb3RvIGlvY3RsX2ZhaWw7Ci0KLQkJCWlmICh3OTk2OGNmX3N0YXJ0X3RyYW5zZmVyKGNhbSkpCi0JCQkJZ290byBpb2N0bF9mYWlsOwotCi0JCX0gZWxzZSAJaWYgKGZyLT5xdWV1ZWQpIHsKLQotCQkJREJHKDYsICJXYWl0IHVudGlsIGZyYW1lICMldSBpcyBmcmVlIiwgbW1hcC5mcmFtZSkKLQotCQkJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNhbS0+d2FpdF9xdWV1ZSwKLQkJCQkJCSAgICAgICBjYW0tPmRpc2Nvbm5lY3RlZCB8fAotCQkJCQkJICAgICAgICghZnItPnF1ZXVlZCkpOwotCQkJaWYgKGVycikKLQkJCQlyZXR1cm4gZXJyOwotCQkJaWYgKGNhbS0+ZGlzY29ubmVjdGVkKQotCQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0KLQkJdzk5NjhjZl9wdXNoX2ZyYW1lKGNhbSwgbW1hcC5mcmFtZSk7Ci0JCURCRyg1LCAiVklESU9DTUNBUFRVUkUoJXUpOiBzdWNjZXNzZnVsbHkgY2FsbGVkIiwgbW1hcC5mcmFtZSkKLQkJcmV0dXJuIDA7Ci0JfQotCi0JY2FzZSBWSURJT0NTWU5DOiAvKiB3YWl0IHVudGlsIHRoZSBjYXB0dXJlIG9mIGEgZnJhbWUgaXMgZmluaXNoZWQgKi8KLQl7Ci0JCXVuc2lnbmVkIGludCBmX251bTsKLQkJc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCogZnI7Ci0JCWludCBlcnIgPSAwOwotCi0JCWlmIChjb3B5X2Zyb21fdXNlcigmZl9udW0sIGFyZywgc2l6ZW9mKGZfbnVtKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCQlpZiAoZl9udW0gPj0gY2FtLT5uYnVmZmVycykgewotCQkJREJHKDQsICJJbnZhbGlkIGZyYW1lIG51bWJlciAoJXUpLiAiCi0JCQkgICAgICAgIlZJRElPQ01DQVBUVVJFIGZhaWxlZCIsIGZfbnVtKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlEQkcoNiwgIlZJRElPQ1NZTkMgY2FsbGVkIGZvciBmcmFtZSAjJXUiLCBmX251bSkKLQotCQlmciA9ICZjYW0tPmZyYW1lW2ZfbnVtXTsKLQotCQlzd2l0Y2ggKGZyLT5zdGF0dXMpIHsKLQkJY2FzZSBGX1VOVVNFRDoKLQkJCWlmICghZnItPnF1ZXVlZCkgewotCQkJCURCRyg0LCAiVklESU9TWU5DOiBGcmFtZSAjJXUgbm90IHJlcXVlc3RlZCEiLAotCQkJCSAgICBmX251bSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCX0KLQkJY2FzZSBGX0VSUk9SOgotCQljYXNlIEZfR1JBQkJJTkc6Ci0JCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY2FtLT53YWl0X3F1ZXVlLAotCQkJCQkJICAgICAgIChmci0+c3RhdHVzID09IEZfUkVBRFkpCi0JCQkJCQkgICAgICAgfHwgY2FtLT5kaXNjb25uZWN0ZWQpOwotCQkJaWYgKGVycikKLQkJCQlyZXR1cm4gZXJyOwotCQkJaWYgKGNhbS0+ZGlzY29ubmVjdGVkKQotCQkJCXJldHVybiAtRU5PREVWOwotCQkJYnJlYWs7Ci0JCWNhc2UgRl9SRUFEWToKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKHc5OTY4Y2ZfdnBwKQotCQkJdzk5NjhjZl9wb3N0cHJvY2Vzc19mcmFtZShjYW0sIGZyKTsKLQotCQlmci0+c3RhdHVzID0gRl9VTlVTRUQ7Ci0KLQkJREJHKDUsICJWSURJT0NTWU5DKCV1KSBzdWNjZXNzZnVsbHkgY2FsbGVkIiwgZl9udW0pCi0JCXJldHVybiAwOwotCX0KLQotCWNhc2UgVklESU9DR1VOSVQ6LyogcmVwb3J0IHRoZSB1bml0IG51bWJlcnMgb2YgdGhlIGFzc29jaWF0ZWQgZGV2aWNlcyovCi0JewotCQlzdHJ1Y3QgdmlkZW9fdW5pdCB1bml0ID0gewotCQkJLnZpZGVvID0gY2FtLT52NGxkZXYtPm1pbm9yLAotCQkJLnZiaSA9IFZJREVPX05PX1VOSVQsCi0JCQkucmFkaW8gPSBWSURFT19OT19VTklULAotCQkJLmF1ZGlvID0gVklERU9fTk9fVU5JVCwKLQkJCS50ZWxldGV4dCA9IFZJREVPX05PX1VOSVQsCi0JCX07Ci0KLQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZ1bml0LCBzaXplb2YodW5pdCkpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJREJHKDUsICJWSURJT0NHVU5JVCBzdWNjZXNzZnVsbHkgY2FsbGVkIikKLQkJcmV0dXJuIDA7Ci0JfQotCi0JY2FzZSBWSURJT0NLRVk6Ci0JCXJldHVybiAwOwotCi0JY2FzZSBWSURJT0NHRkJVRjoKLQl7Ci0JCWlmIChjbGVhcl91c2VyKGFyZywgc2l6ZW9mKHN0cnVjdCB2aWRlb19idWZmZXIpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCURCRyg1LCAiVklESU9DR0ZCVUYgc3VjY2Vzc2Z1bGx5IGNhbGxlZCIpCi0JCXJldHVybiAwOwotCX0KLQotCWNhc2UgVklESU9DR1RVTkVSOgotCXsKLQkJc3RydWN0IHZpZGVvX3R1bmVyIHR1bmVyOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJnR1bmVyLCBhcmcsIHNpemVvZih0dW5lcikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJaWYgKHR1bmVyLnR1bmVyICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlzdHJjcHkodHVuZXIubmFtZSwgIm5vX3R1bmVyIik7Ci0JCXR1bmVyLnJhbmdlbG93ID0gMDsKLQkJdHVuZXIucmFuZ2VoaWdoID0gMDsKLQkJdHVuZXIuZmxhZ3MgPSBWSURFT19UVU5FUl9OT1JNOwotCQl0dW5lci5tb2RlID0gVklERU9fTU9ERV9BVVRPOwotCQl0dW5lci5zaWduYWwgPSAweGZmZmY7Ci0KLQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZ0dW5lciwgc2l6ZW9mKHR1bmVyKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCQlEQkcoNSwgIlZJRElPQ0dUVU5FUiBzdWNjZXNzZnVsbHkgY2FsbGVkIikKLQkJcmV0dXJuIDA7Ci0JfQotCi0JY2FzZSBWSURJT0NTVFVORVI6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgdHVuZXI7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmdHVuZXIsIGFyZywgc2l6ZW9mKHR1bmVyKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCQlpZiAodHVuZXIudHVuZXIgIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmICh0dW5lci5tb2RlICE9IFZJREVPX01PREVfQVVUTykKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCURCRyg1LCAiVklESU9DU1RVTkVSIHN1Y2Nlc3NmdWxseSBjYWxsZWQiKQotCQlyZXR1cm4gMDsKLQl9Ci0KLQljYXNlIFZJRElPQ1NGQlVGOgotCWNhc2UgVklESU9DQ0FQVFVSRToKLQljYXNlIFZJRElPQ0dGUkVROgotCWNhc2UgVklESU9DU0ZSRVE6Ci0JY2FzZSBWSURJT0NHQVVESU86Ci0JY2FzZSBWSURJT0NTQVVESU86Ci0JY2FzZSBWSURJT0NTUExBWU1PREU6Ci0JY2FzZSBWSURJT0NTV1JJVEVNT0RFOgotCWNhc2UgVklESU9DR1BMQVlJTkZPOgotCWNhc2UgVklESU9DU01JQ1JPQ09ERToKLQljYXNlIFZJRElPQ0dWQklGTVQ6Ci0JY2FzZSBWSURJT0NTVkJJRk1UOgotCQlEQkcoNCwgIlVuc3VwcG9ydGVkIFY0TDEgSU9DdGw6IFZJRElPQyVzICIKLQkJICAgICAgICIodHlwZSAweCUwMVgsICIKLQkJICAgICAgICJuLiAweCUwMVgsICIKLQkJICAgICAgICJkaXIuIDB4JTAxWCwgIgotCQkgICAgICAgInNpemUgMHglMDJYKSIsCi0JCSAgICBWNEwxX0lPQ1RMKGNtZCksCi0JCSAgICBfSU9DX1RZUEUoY21kKSxfSU9DX05SKGNtZCksX0lPQ19ESVIoY21kKSxfSU9DX1NJWkUoY21kKSkKLQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRlZmF1bHQ6Ci0JCURCRyg0LCAiSW52YWxpZCBWNEwxIElPQ3RsOiBWSURJT0MlcyAiCi0JCSAgICAgICAidHlwZSAweCUwMVgsICIKLQkJICAgICAgICJuLiAweCUwMVgsICIKLQkJICAgICAgICJkaXIuIDB4JTAxWCwgIgotCQkgICAgICAgInNpemUgMHglMDJYIiwKLQkJICAgIFY0TDFfSU9DVEwoY21kKSwKLQkJICAgIF9JT0NfVFlQRShjbWQpLF9JT0NfTlIoY21kKSxfSU9DX0RJUihjbWQpLF9JT0NfU0laRShjbWQpKQotCi0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0KLQl9IC8qIGVuZCBvZiBzd2l0Y2ggKi8KLQotaW9jdGxfZmFpbDoKLQljYW0tPm1pc2NvbmZpZ3VyZWQgPSAxOwotCURCRygxLCAiVklESU9DJXMgZmFpbGVkIGJlY2F1c2Ugb2YgaGFyZHdhcmUgcHJvYmxlbXMuICIKLQkgICAgICAgIlRvIHVzZSB0aGUgY2FtZXJhLCBjbG9zZSBhbmQgb3BlbiBpdCBhZ2Fpbi4iLCBWNEwxX0lPQ1RMKGNtZCkpCi0JcmV0dXJuIC1FRkFVTFQ7Ci19Ci0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB3OTk2OGNmX2ZvcHMgPSB7Ci0JLm93bmVyID0gICBUSElTX01PRFVMRSwKLQkub3BlbiA9ICAgIHc5OTY4Y2Zfb3BlbiwKLQkucmVsZWFzZSA9IHc5OTY4Y2ZfcmVsZWFzZSwKLQkucmVhZCA9ICAgIHc5OTY4Y2ZfcmVhZCwKLQkuaW9jdGwgPSAgIHc5OTY4Y2ZfaW9jdGwsCi0JLm1tYXAgPSAgICB3OTk2OGNmX21tYXAsCi19OwotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFVTQiBwcm9iZSBhbmQgVjRMIHJlZ2lzdHJhdGlvbiwgZGlzY29ubmVjdCBhbmQgaWRfdGFibGVbXSBkZWZpbml0aW9uICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGludAotdzk5NjhjZl91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UqIGludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkKiBpZCkKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7Ci0Jc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW07Ci0JaW50IGVyciA9IDA7Ci0JZW51bSB3OTk2OGNmX21vZGVsX2lkIG1vZF9pZDsKLQlzdHJ1Y3QgbGlzdF9oZWFkKiBwdHI7Ci0JdTggc2MgPSAwOyAvKiBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIGNhbWVyYXMgKi8KLQlzdGF0aWMgdW5zaWduZWQgc2hvcnQgZGV2X25yOyAvKiAwIC0gd2UgYXJlIGhhbmRsaW5nIGRldmljZSBudW1iZXIgbiAqLwotCXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBhZGRyc1tdID0gewotCQlPVjd4eDBfU0lELAotCQlPVjZ4eDBfU0lELAotCQlJMkNfQ0xJRU5UX0VORAotCX07Ci0KLQlpZiAobGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgID09IHdpbmJvbmRfaWRfdGFibGVbMF0uaWRWZW5kb3IgJiYKLQkgICAgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IHdpbmJvbmRfaWRfdGFibGVbMF0uaWRQcm9kdWN0KQotCQltb2RfaWQgPSBXOTk2OENGX01PRF9DTFZCV0dQOyAvKiBzZWUgY2FtbGlzdFtdIHRhYmxlICovCi0JZWxzZSBpZiAobGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgID09IHdpbmJvbmRfaWRfdGFibGVbMV0uaWRWZW5kb3IgJiYKLQkJIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSB3aW5ib25kX2lkX3RhYmxlWzFdLmlkUHJvZHVjdCkKLQkJbW9kX2lkID0gVzk5NjhDRl9NT0RfR0VORVJJQzsgLyogc2VlIGNhbWxpc3RbXSB0YWJsZSAqLwotCWVsc2UKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQljYW0gPSAoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKikKLQkJICBremFsbG9jKHNpemVvZihzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNhbSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQllcnIgPSB2NGwyX2RldmljZV9yZWdpc3RlcigmaW50Zi0+ZGV2LCAmY2FtLT52NGwyX2Rldik7Ci0JaWYgKGVycikKLQkJZ290byBmYWlsMDsKLQotCW11dGV4X2luaXQoJmNhbS0+ZGV2X211dGV4KTsKLQltdXRleF9sb2NrKCZjYW0tPmRldl9tdXRleCk7Ci0KLQljYW0tPnVzYmRldiA9IHVkZXY7Ci0KLQlEQkcoMiwgIiVzIGRldGVjdGVkIiwgc3ltYm9saWMoY2FtbGlzdCwgbW9kX2lkKSkKLQotCWlmIChzaW1jYW1zID4gVzk5NjhDRl9NQVhfREVWSUNFUykKLQkJc2ltY2FtcyA9IFc5OTY4Q0ZfU0lNQ0FNUzsKLQotCS8qIEhvdyBtYW55IGNhbWVyYXMgYXJlIGNvbm5lY3RlZCA/ICovCi0JbXV0ZXhfbG9jaygmdzk5NjhjZl9kZXZsaXN0X211dGV4KTsKLQlsaXN0X2Zvcl9lYWNoKHB0ciwgJnc5OTY4Y2ZfZGV2X2xpc3QpCi0JCXNjKys7Ci0JbXV0ZXhfdW5sb2NrKCZ3OTk2OGNmX2Rldmxpc3RfbXV0ZXgpOwotCi0JaWYgKHNjID49IHNpbWNhbXMpIHsKLQkJREJHKDIsICJEZXZpY2UgcmVqZWN0ZWQ6IHRvbyBtYW55IGNvbm5lY3RlZCBjYW1lcmFzICIKLQkJICAgICAgICIobWF4LiAldSkiLCBzaW1jYW1zKQotCQllcnIgPSAtRVBFUk07Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQotCS8qIEFsbG9jYXRlIDIgYnl0ZXMgb2YgbWVtb3J5IGZvciBjYW1lcmEgY29udHJvbCBVU0IgdHJhbnNmZXJzICovCi0JaWYgKCEoY2FtLT5jb250cm9sX2J1ZmZlciA9IGt6YWxsb2MoMiwgR0ZQX0tFUk5FTCkpKSB7Ci0JCURCRygxLCJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNhbWVyYSBjb250cm9sIHRyYW5zZmVycyIpCi0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQkvKiBBbGxvY2F0ZSA4IGJ5dGVzIG9mIG1lbW9yeSBmb3IgVVNCIGRhdGEgdHJhbnNmZXJzIHRvIHRoZSBGU0IgKi8KLQlpZiAoIShjYW0tPmRhdGFfYnVmZmVyID0ga3phbGxvYyg4LCBHRlBfS0VSTkVMKSkpIHsKLQkJREJHKDEsICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRhdGEgIgotCQkgICAgICAgInRyYW5zZmVycyB0byB0aGUgRlNCIikKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBmYWlsOwotCX0KLQotCS8qIFJlZ2lzdGVyIHRoZSBWNEwgZGV2aWNlICovCi0JY2FtLT52NGxkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKLQlpZiAoIWNhbS0+djRsZGV2KSB7Ci0JCURCRygxLCAiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgYSBWNEwgc3RydWN0dXJlIikKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBmYWlsOwotCX0KLQotCXN0cmNweShjYW0tPnY0bGRldi0+bmFtZSwgc3ltYm9saWMoY2FtbGlzdCwgbW9kX2lkKSk7Ci0JY2FtLT52NGxkZXYtPmZvcHMgPSAmdzk5NjhjZl9mb3BzOwotCWNhbS0+djRsZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7Ci0JdmlkZW9fc2V0X2RydmRhdGEoY2FtLT52NGxkZXYsIGNhbSk7Ci0JY2FtLT52NGxkZXYtPnY0bDJfZGV2ID0gJmNhbS0+djRsMl9kZXY7Ci0KLQllcnIgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoY2FtLT52NGxkZXYsIFZGTF9UWVBFX0dSQUJCRVIsCi0JCQkJICAgIHZpZGVvX25yW2Rldl9ucl0pOwotCWlmIChlcnIpIHsKLQkJREJHKDEsICJWNEwgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsZWQiKQotCQlpZiAoZXJyID09IC1FTkZJTEUgJiYgdmlkZW9fbnJbZGV2X25yXSA9PSAtMSkKLQkJCURCRygyLCAiQ291bGRuJ3QgZmluZCBhIGZyZWUgL2Rldi92aWRlb1ggbm9kZSIpCi0JCXZpZGVvX25yW2Rldl9ucl0gPSAtMTsKLQkJZGV2X25yID0gKGRldl9uciA8IFc5OTY4Q0ZfTUFYX0RFVklDRVMtMSkgPyBkZXZfbnIrMSA6IDA7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQlEQkcoMiwgIlY0TCBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAlcyIsCi0JICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoY2FtLT52NGxkZXYpKQotCi0JLyogU2V0IHNvbWUgYmFzaWMgY29uc3RhbnRzICovCi0Jdzk5NjhjZl9jb25maWd1cmVfY2FtZXJhKGNhbSwgdWRldiwgbW9kX2lkLCBkZXZfbnIpOwotCi0JLyogQWRkIGEgbmV3IGVudHJ5IGludG8gdGhlIGxpc3Qgb2YgVjRMIHJlZ2lzdGVyZWQgZGV2aWNlcyAqLwotCW11dGV4X2xvY2soJnc5OTY4Y2ZfZGV2bGlzdF9tdXRleCk7Ci0JbGlzdF9hZGQoJmNhbS0+djRsbGlzdCwgJnc5OTY4Y2ZfZGV2X2xpc3QpOwotCW11dGV4X3VubG9jaygmdzk5NjhjZl9kZXZsaXN0X211dGV4KTsKLQlkZXZfbnIgPSAoZGV2X25yIDwgVzk5NjhDRl9NQVhfREVWSUNFUy0xKSA/IGRldl9ucisxIDogMDsKLQotCXc5OTY4Y2ZfdHVybl9vbl9sZWQoY2FtKTsKLQotCXc5OTY4Y2ZfaTJjX2luaXQoY2FtKTsKLQljYW0tPnNlbnNvcl9zZCA9IHY0bDJfaTJjX25ld19zdWJkZXYoJmNhbS0+djRsMl9kZXYsCi0JCQkmY2FtLT5pMmNfYWRhcHRlciwKLQkJCSJvdmNhbWNoaXAiLCAib3ZjYW1jaGlwIiwgMCwgYWRkcnMpOwotCi0JdXNiX3NldF9pbnRmZGF0YShpbnRmLCBjYW0pOwotCW11dGV4X3VubG9jaygmY2FtLT5kZXZfbXV0ZXgpOwotCi0JZXJyID0gdzk5NjhjZl9zZW5zb3JfaW5pdChjYW0pOwotCXJldHVybiAwOwotCi1mYWlsOiAvKiBGcmVlIHVudXNlZCBtZW1vcnkgKi8KLQlrZnJlZShjYW0tPmNvbnRyb2xfYnVmZmVyKTsKLQlrZnJlZShjYW0tPmRhdGFfYnVmZmVyKTsKLQlpZiAoY2FtLT52NGxkZXYpCi0JCXZpZGVvX2RldmljZV9yZWxlYXNlKGNhbS0+djRsZGV2KTsKLQltdXRleF91bmxvY2soJmNhbS0+ZGV2X211dGV4KTsKLQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZjYW0tPnY0bDJfZGV2KTsKLWZhaWwwOgotCWtmcmVlKGNhbSk7Ci0JcmV0dXJuIGVycjsKLX0KLQotCi1zdGF0aWMgdm9pZCB3OTk2OGNmX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlKiBpbnRmKQotewotCXN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtID0KLQkgICAoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKil1c2JfZ2V0X2ludGZkYXRhKGludGYpOwotCi0JaWYgKGNhbSkgewotCQlkb3duX3dyaXRlKCZ3OTk2OGNmX2Rpc2Nvbm5lY3QpOwotCQkvKiBQcmV2ZW50IGNvbmN1cnJlbnQgYWNjZXNzZXMgdG8gZGF0YSAqLwotCQltdXRleF9sb2NrKCZjYW0tPmRldl9tdXRleCk7Ci0KLQkJY2FtLT5kaXNjb25uZWN0ZWQgPSAxOwotCi0JCURCRygyLCAiRGlzY29ubmVjdGluZyAlcy4uLiIsIHN5bWJvbGljKGNhbWxpc3QsIGNhbS0+aWQpKTsKLQotCQl2NGwyX2RldmljZV9kaXNjb25uZWN0KCZjYW0tPnY0bDJfZGV2KTsKLQotCQl3YWtlX3VwX2ludGVycnVwdGlibGVfYWxsKCZjYW0tPm9wZW4pOwotCi0JCWlmIChjYW0tPnVzZXJzKSB7Ci0JCQlEQkcoMiwgIlRoZSBkZXZpY2UgaXMgb3BlbiAoJXMpISAiCi0JCQkgICAgICAgIlByb2Nlc3MgbmFtZTogJXMuIERlcmVnaXN0cmF0aW9uIGFuZCBtZW1vcnkgIgotCQkJICAgICAgICJkZWFsbG9jYXRpb24gYXJlIGRlZmVycmVkIG9uIGNsb3NlLiIsCi0JCQkgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShjYW0tPnY0bGRldiksIGNhbS0+Y29tbWFuZCkKLQkJCWNhbS0+bWlzY29uZmlndXJlZCA9IDE7Ci0JCQl3OTk2OGNmX3N0b3BfdHJhbnNmZXIoY2FtKTsKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2FtLT53YWl0X3F1ZXVlKTsKLQkJfSBlbHNlCi0JCQl3OTk2OGNmX3JlbGVhc2VfcmVzb3VyY2VzKGNhbSk7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmRldl9tdXRleCk7Ci0JCXVwX3dyaXRlKCZ3OTk2OGNmX2Rpc2Nvbm5lY3QpOwotCi0JCWlmICghY2FtLT51c2VycykgewotCQkJa2ZyZWUoY2FtKTsKLQkJfQotCX0KLX0KLQotCi1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdzk5NjhjZl91c2JfZHJpdmVyID0gewotCS5uYW1lID0gICAgICAgInc5OTY4Y2YiLAotCS5pZF90YWJsZSA9ICAgd2luYm9uZF9pZF90YWJsZSwKLQkucHJvYmUgPSAgICAgIHc5OTY4Y2ZfdXNiX3Byb2JlLAotCS5kaXNjb25uZWN0ID0gdzk5NjhjZl91c2JfZGlzY29ubmVjdCwKLX07Ci0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogTW9kdWxlIGluaXQsIGV4aXQgYW5kIGludGVybW9kdWxlIGNvbW11bmljYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgaW50IF9faW5pdCB3OTk2OGNmX21vZHVsZV9pbml0KHZvaWQpCi17Ci0JaW50IGVycjsKLQotCUtEQkcoMiwgVzk5NjhDRl9NT0RVTEVfTkFNRSIgIlc5OTY4Q0ZfTU9EVUxFX1ZFUlNJT04pCi0JS0RCRygzLCBXOTk2OENGX01PRFVMRV9BVVRIT1IpCi0KLQlpZiAoKGVyciA9IHVzYl9yZWdpc3Rlcigmdzk5NjhjZl91c2JfZHJpdmVyKSkpCi0JCXJldHVybiBlcnI7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgdzk5NjhjZl9tb2R1bGVfZXhpdCh2b2lkKQotewotCS8qIHc5OTY4Y2ZfdXNiX2Rpc2Nvbm5lY3QoKSB3aWxsIGJlIGNhbGxlZCAqLwotCXVzYl9kZXJlZ2lzdGVyKCZ3OTk2OGNmX3VzYl9kcml2ZXIpOwotCi0JS0RCRygyLCBXOTk2OENGX01PRFVMRV9OQU1FIiBkZXJlZ2lzdGVyZWQiKQotfQotCi0KLW1vZHVsZV9pbml0KHc5OTY4Y2ZfbW9kdWxlX2luaXQpOwotbW9kdWxlX2V4aXQodzk5NjhjZl9tb2R1bGVfZXhpdCk7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczYWQ4NjQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogVmlkZW80TGludXggZHJpdmVyIGZvciBXOTk2Wzg3XUNGIEpQRUcgVVNCIER1YWwgTW9kZSBDYW1lcmEgQ2hpcC4gICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgKgotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfVzk5NjhDRl9IXwotI2RlZmluZSBfVzk5NjhDRl9IXwotCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgotI2luY2x1ZGUgPG1lZGlhL292Y2FtY2hpcC5oPgotCi0jaW5jbHVkZSAidzk5NjhjZl92cHAuaCIKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRGVmYXVsdCB2YWx1ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIFc5OTY4Q0ZfVlBQTU9EX0xPQUQgICAgIDEgIC8qIGF1dG9tYXRpYyAndzk5NjhjZi12cHAnIG1vZHVsZSBsb2FkaW5nICovCi0KLS8qIENvbW1lbnQvdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSB0byBlbmFibGUvZGlzYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgKi8KLSNkZWZpbmUgVzk5NjhDRl9ERUJVRwotCi0vKiBUaGVzZSBoYXZlIGVmZmVjdCBvbmx5IGlmIFc5OTY4Q0ZfREVCVUcgaXMgZGVmaW5lZCAqLwotI2RlZmluZSBXOTk2OENGX0RFQlVHX0xFVkVMICAgIDIgLyogZnJvbSAwIHRvIDYuIDAgZm9yIG5vIGRlYnVnIGluZm9ybWF0aW9ucyAqLwotI2RlZmluZSBXOTk2OENGX1NQRUNJRklDX0RFQlVHIDAgLyogMCBvciAxICovCi0KLSNkZWZpbmUgVzk5NjhDRl9NQVhfREVWSUNFUyAgICAzMgotI2RlZmluZSBXOTk2OENGX1NJTUNBTVMgICAgICAgIFc5OTY4Q0ZfTUFYX0RFVklDRVMgLyogc2ltdWx0YW5lb3VzIGNhbWVyYXMgKi8KLQotI2RlZmluZSBXOTk2OENGX01BWF9CVUZGRVJTICAgMzIKLSNkZWZpbmUgVzk5NjhDRl9CVUZGRVJTICAgICAgIDIgLyogbi4gb2YgZnJhbWUgYnVmZmVycyBmcm9tIDIgdG8gTUFYX0JVRkZFUlMgKi8KLQotLyogTWF4aW11bSBkYXRhIHBheWxvYWQgc2l6ZXMgaW4gYnl0ZXMgZm9yIGFsdGVybmF0ZSBzZXR0aW5ncyAqLwotc3RhdGljIGNvbnN0IHUxNiB3TWF4UGFja2V0U2l6ZVtdID0gezEwMjMsIDk1OSwgODk1LCA4MzEsIDc2NywgNzAzLCA2MzksIDU3NSwKLQkJCQkgICAgICA1MTEsIDQ0NywgMzgzLCAzMTksIDI1NSwgMTkxLCAxMjcsICA2M307Ci0jZGVmaW5lIFc5OTY4Q0ZfUEFDS0VUX1NJWkUgICAgICAxMDIzIC8qIGFjY29yZGluZyB0byB3TWF4UGFja2V0U2l6ZXNbXSAqLwotI2RlZmluZSBXOTk2OENGX01JTl9QQUNLRVRfU0laRSAgNjMgLyogbWluaW11bSB2YWx1ZSAqLwotI2RlZmluZSBXOTk2OENGX0lTT19QQUNLRVRTICAgICAgNSAvKiBuLm9mIHBhY2tldHMgZm9yIGlzb2Nocm9ub3VzIHRyYW5zZmVycyAqLwotI2RlZmluZSBXOTk2OENGX1VTQl9DVFJMX1RJTUVPVVQgMTAwMCAvKiB0aW1lb3V0IChtcykgZm9yIHVzYiBjb250cm9sIGNvbW1hbmRzICovCi0jZGVmaW5lIFc5OTY4Q0ZfVVJCUyAgICAgICAgICAgICAyIC8qIG4uIG9mIHNjaGVkdWxlZCBVUkJzIGZvciBJU08gdHJhbnNmZXIgKi8KLQotI2RlZmluZSBXOTk2OENGX0kyQ19CVVNfREVMQVkgICAgNCAvKiBkZWxheSBpbiB1cyBmb3IgSTJDIGJpdCByL3cgb3BlcmF0aW9ucyAqLwotI2RlZmluZSBXOTk2OENGX0kyQ19SV19SRVRSSUVTICAgMTUgLyogbnVtYmVyIG9mIG1heCBJMkMgci93IHJldHJpZXMgKi8KLQotLyogQXZhaWxhYmxlIHZpZGVvIGZvcm1hdHMgKi8KLXN0cnVjdCB3OTk2OGNmX2Zvcm1hdCB7Ci0JY29uc3QgdTE2IHBhbGV0dGU7Ci0JY29uc3QgdTE2IGRlcHRoOwotCWNvbnN0IHU4IGNvbXByZXNzaW9uOwotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB3OTk2OGNmX2Zvcm1hdCB3OTk2OGNmX2Zvcm1hdGxpc3RbXSA9IHsKLQl7IFZJREVPX1BBTEVUVEVfVVlWWSwgICAgMTYsIDAgfSwgLyogb3JpZ2luYWwgdmlkZW8gKi8KLQl7IFZJREVPX1BBTEVUVEVfWVVWNDIyUCwgMTYsIDEgfSwgLyogd2l0aCBKUEVHIGNvbXByZXNzaW9uICovCi0JeyBWSURFT19QQUxFVFRFX1lVVjQyMFAsIDEyLCAxIH0sIC8qIHdpdGggSlBFRyBjb21wcmVzc2lvbiAqLwotCXsgVklERU9fUEFMRVRURV9ZVVY0MjAsICAxMiwgMSB9LCAvKiBzYW1lIGFzIFlVVjQyMFAgKi8KLQl7IFZJREVPX1BBTEVUVEVfWVVZViwgICAgMTYsIDAgfSwgLyogc29mdHdhcmUgY29udmVyc2lvbiAqLwotCXsgVklERU9fUEFMRVRURV9ZVVY0MjIsICAxNiwgMCB9LCAvKiBzb2Z0d2FyZSBjb252ZXJzaW9uICovCi0JeyBWSURFT19QQUxFVFRFX0dSRVksICAgICA4LCAwIH0sIC8qIHNvZnR3YXJlIGNvbnZlcnNpb24gKi8KLQl7IFZJREVPX1BBTEVUVEVfUkdCNTU1LCAgMTYsIDAgfSwgLyogc29mdHdhcmUgY29udmVyc2lvbiAqLwotCXsgVklERU9fUEFMRVRURV9SR0I1NjUsICAxNiwgMCB9LCAvKiBzb2Z0d2FyZSBjb252ZXJzaW9uICovCi0JeyBWSURFT19QQUxFVFRFX1JHQjI0LCAgIDI0LCAwIH0sIC8qIHNvZnR3YXJlIGNvbnZlcnNpb24gKi8KLQl7IFZJREVPX1BBTEVUVEVfUkdCMzIsICAgMzIsIDAgfSwgLyogc29mdHdhcmUgY29udmVyc2lvbiAqLwotCXsgMCwgICAgICAgICAgICAgICAgICAgICAgMCwgMCB9ICAvKiAwIGlzIGEgdGVybWluYXRpbmcgZW50cnkgKi8KLX07Ci0KLSNkZWZpbmUgVzk5NjhDRl9ERUNPTVBSRVNTSU9OICAgIDIgLyogZGVjb21wOjA9ZGlzYWJsZSwxPWZvcmNlLDI9YW55IGZvcm1hdHMgKi8KLSNkZWZpbmUgVzk5NjhDRl9QQUxFVFRFX0RFQ09NUF9PRkYgICBWSURFT19QQUxFVFRFX1VZVlkgICAgLyogd2hlbiBkZWNvbXA9MCAqLwotI2RlZmluZSBXOTk2OENGX1BBTEVUVEVfREVDT01QX0ZPUkNFIFZJREVPX1BBTEVUVEVfWVVWNDIwUCAvKiB3aGVuIGRlY29tcD0xICovCi0jZGVmaW5lIFc5OTY4Q0ZfUEFMRVRURV9ERUNPTVBfT04gICAgVklERU9fUEFMRVRURV9VWVZZICAgIC8qIHdoZW4gZGVjb21wPTIgKi8KLQotI2RlZmluZSBXOTk2OENGX0ZPUkNFX1JHQiAgICAgICAgMCAgLyogcmVhZCBSR0IgaW5zdGVhZCBvZiBCR1IsIHllcz0xL25vPTAgKi8KLQotI2RlZmluZSBXOTk2OENGX01BWF9XSURUSCAgICAgIDgwMCAvKiBIYXMgZWZmZWN0IGlmIHVwLXNjYWxpbmcgaXMgb24gKi8KLSNkZWZpbmUgVzk5NjhDRl9NQVhfSEVJR0hUICAgICA2MDAgLyogSGFzIGVmZmVjdCBpZiB1cC1zY2FsaW5nIGlzIG9uICovCi0jZGVmaW5lIFc5OTY4Q0ZfV0lEVEggICAgICAgICAgMzIwIC8qIGZyb20gMTI4IHRvIDM1MiwgbXVsdGlwbGUgb2YgMTYgKi8KLSNkZWZpbmUgVzk5NjhDRl9IRUlHSFQgICAgICAgICAyNDAgLyogZnJvbSAgOTYgdG8gMjg4LCBtdWx0aXBsZSBvZiAxNiAqLwotCi0jZGVmaW5lIFc5OTY4Q0ZfQ0xBTVBJTkcgICAgICAgMCAvKiAwIGRpc2FibGUsIDEgZW5hYmxlIHZpZGVvIGRhdGEgY2xhbXBpbmcgKi8KLSNkZWZpbmUgVzk5NjhDRl9GSUxURVJfVFlQRSAgICAwIC8qIDAgZGlzYWJsZSAgMSAoMS0yLTEpLCAyICgyLTMtNi0zLTIpICovCi0jZGVmaW5lIFc5OTY4Q0ZfRE9VQkxFX0JVRkZFUiAgMSAvKiAwIGRpc2FibGUsIDEgZW5hYmxlIGRvdWJsZSBidWZmZXIgKi8KLSNkZWZpbmUgVzk5NjhDRl9MQVJHRVZJRVcgICAgICAxIC8qIDAgZGlzYWJsZSwgMSBlbmFibGUgKi8KLSNkZWZpbmUgVzk5NjhDRl9VUFNDQUxJTkcgICAgICAwIC8qIDAgZGlzYWJsZSwgMSBlbmFibGUgKi8KLQotI2RlZmluZSBXOTk2OENGX01PTk9DSFJPTUUgICAgIDAgLyogMCBub3QgbW9ub2Nocm9tZSwgMSBtb25vY2hyb21lIHNlbnNvciAqLwotI2RlZmluZSBXOTk2OENGX0JSSUdIVE5FU1MgICAgIDMxMDAwIC8qIGZyb20gMCB0byA2NTUzNSAqLwotI2RlZmluZSBXOTk2OENGX0hVRSAgICAgICAgICAgIDMyNzY4IC8qIGZyb20gMCB0byA2NTUzNSAqLwotI2RlZmluZSBXOTk2OENGX0NPTE9VUiAgICAgICAgIDMyNzY4IC8qIGZyb20gMCB0byA2NTUzNSAqLwotI2RlZmluZSBXOTk2OENGX0NPTlRSQVNUICAgICAgIDUwMDAwIC8qIGZyb20gMCB0byA2NTUzNSAqLwotI2RlZmluZSBXOTk2OENGX1dISVRFTkVTUyAgICAgIDMyNzY4IC8qIGZyb20gMCB0byA2NTUzNSAqLwotCi0jZGVmaW5lIFc5OTY4Q0ZfQVVUT0JSSUdIVCAgICAgMCAvKiAwIGRpc2FibGUsIDEgZW5hYmxlIGF1dG9tYXRpYyBicmlnaHRuZXNzICovCi0jZGVmaW5lIFc5OTY4Q0ZfQVVUT0VYUCAgICAgICAgMSAvKiAwIGRpc2FibGUsIDEgZW5hYmxlIGF1dG9tYXRpYyBleHBvc3VyZSAqLwotI2RlZmluZSBXOTk2OENGX0xJR0hURlJFUSAgICAgIDUwIC8qIGxpZ2h0IGZyZXF1ZW5jeS4gNTBIeiAoRXVyb3BlKSBvciA2MEh6ICovCi0jZGVmaW5lIFc5OTY4Q0ZfQkFORElOR0ZJTFRFUiAgMCAvKiAwIGRpc2FibGUsIDEgZW5hYmxlIGJhbmRpbmcgZmlsdGVyICovCi0jZGVmaW5lIFc5OTY4Q0ZfQkFDS0xJR0hUICAgICAgMCAvKiAwIG9yIDEsIDE9b2JqZWN0IGlzIGxpdCBmcm9tIGJlaGluZCAqLwotI2RlZmluZSBXOTk2OENGX01JUlJPUiAgICAgICAgIDAgLyogMCBvciAxIFtkb24ndF0gcmV2ZXJzZSBpbWFnZSBob3Jpem9udGFsbHkqLwotCi0jZGVmaW5lIFc5OTY4Q0ZfQ0xPQ0tESVYgICAgICAgICAtMSAvKiAtMSA9IGF1dG9tYXRpYyBjbG9jayBkaXZpc29yICovCi0jZGVmaW5lIFc5OTY4Q0ZfREVGX0NMT0NLRElWSVNPUiAgMCAvKiBkZWZhdWx0IHNlbnNvciBjbG9jayBkaXZpc29yIHZhbHVlICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEdsb2JhbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBXOTk2OENGX01PRFVMRV9OQU1FICAgICAiVjRMIGRyaXZlciBmb3IgVzk5Nls4N11DRiBKUEVHIFVTQiAiIFwKLQkJCQkiRHVhbCBNb2RlIENhbWVyYSBDaGlwIgotI2RlZmluZSBXOTk2OENGX01PRFVMRV9WRVJTSU9OICAiMToxLjM0LWJhc2ljIgotI2RlZmluZSBXOTk2OENGX01PRFVMRV9BVVRIT1IgICAiKEMpIDIwMDItMjAwNCBMdWNhIFJpc29saWEiCi0jZGVmaW5lIFc5OTY4Q0ZfQVVUSE9SX0VNQUlMICAgICI8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4iCi0jZGVmaW5lIFc5OTY4Q0ZfTU9EVUxFX0xJQ0VOU0UgICJHUEwiCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCB3aW5ib25kX2lkX3RhYmxlW10gPSB7Ci0JewotCQkvKiBDcmVhdGl2ZSBMYWJzIFZpZGVvIEJsYXN0ZXIgV2ViQ2FtIEdvIFBsdXMgKi8KLQkJVVNCX0RFVklDRSgweDA0MWUsIDB4NDAwMyksCi0JCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSJ3OTk2OGNmIiwKLQl9LAotCXsKLQkJLyogR2VuZXJpYyBXOTk2Wzg3XUNGIEpQRUcgVVNCIER1YWwgTW9kZSBDYW1lcmEgKi8KLQkJVVNCX0RFVklDRSgweDEwNDYsIDB4OTk2NyksCi0JCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSJ3OTk2OGNmIiwKLQl9LAotCXsgfSAvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLwotfTsKLQotLyogVzk5Nls4N11DRiBjYW1lcmEgbW9kZWxzLCBpbnRlcm5hbCBpZHM6ICovCi1lbnVtIHc5OTY4Y2ZfbW9kZWxfaWQgewotCVc5OTY4Q0ZfTU9EX0dFTkVSSUMgPSAxLCAvKiBHZW5lcmljIFc5OTZbODddQ0YgYmFzZWQgZGV2aWNlICovCi0JVzk5NjhDRl9NT0RfQ0xWQldHUCA9IDExLC8qQ3JlYXRpdmUgTGFicyBWaWRlbyBCbGFzdGVyIFdlYkNhbSBHbyBQbHVzKi8KLQlXOTk2OENGX01PRF9BRFBWRE1BID0gMjEsIC8qIEFyb21hIERpZ2kgUGVuIFZHQSBEdWFsIE1vZGUgQURHLTUwMDAgKi8KLQlXOTk4NkNGX01PRF9BQVUgPSAzMSwgICAgIC8qIEFWZXJNZWRpYSBBVmVyVFYgVVNCICovCi0JVzk5NjhDRl9NT0RfQ0xWQldHID0gMzQsICAvKiBDcmVhdGl2ZSBMYWJzIFZpZGVvIEJsYXN0ZXIgV2ViQ2FtIEdvICovCi0JVzk5NjhDRl9NT0RfTEwgPSAzNywgICAgICAvKiBMZWJvbiBMREMtMDM1QSAqLwotCVc5OTY4Q0ZfTU9EX0VFRU1DID0gNDAsICAgLyogRXpvbmljcyBFWi04MDIgRVpNZWdhIENhbSAqLwotCVc5OTY4Q0ZfTU9EX09PRSA9IDQyLCAgICAgLyogT21uaVZpc2lvbiBPVjg2MTAtRURFICovCi0JVzk5NjhDRl9NT0RfT0RQVkRNUEMgPSA0MywvKiBPUENPTSBEaWdpIFBlbiBWR0EgRHVhbCBNb2RlIFBlbiBDYW1lcmEgKi8KLQlXOTk2OENGX01PRF9QRFBJSSA9IDQ2LCAgIC8qIFByZXRlYyBEaWdpIFBlbi1JSSAqLwotCVc5OTY4Q0ZfTU9EX1BEUDQ4MCA9IDQ5LCAgLyogUHJldGVjIERpZ2lQZW4tNDgwICovCi19OwotCi1lbnVtIHc5OTY4Y2ZfZnJhbWVfc3RhdHVzIHsKLQlGX1JFQURZLCAgICAgICAgICAgIC8qIGZpbmlzaGVkIGdyYWJiaW5nICYgcmVhZHkgdG8gYmUgcmVhZC9zeW5jZWQgKi8KLQlGX0dSQUJCSU5HLCAgICAgICAgIC8qIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGdyYWJiZWQgaW50byAqLwotCUZfRVJST1IsICAgICAgICAgICAgLyogc29tZXRoaW5nIGJhZCBoYXBwZW5lZCB3aGlsZSBwcm9jZXNzaW5nICovCi0JRl9VTlVTRUQgICAgICAgICAgICAvKiB1bnVzZWQgKG5vIFZJRElPQ01DQVBUVVJFKSAqLwotfTsKLQotc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCB7Ci0Jdm9pZCogYnVmZmVyOwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQl1MzIgbGVuZ3RoOwotCWludCBudW1iZXI7Ci0JZW51bSB3OTk2OGNmX2ZyYW1lX3N0YXR1cyBzdGF0dXM7Ci0Jc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCogbmV4dDsKLQl1OCBxdWV1ZWQ7Ci19OwotCi1lbnVtIHc5OTY4Y2ZfdnBwX2ZsYWcgewotCVZQUF9OT05FID0gMHgwMCwKLQlWUFBfVVBTQ0FMRSA9IDB4MDEsCi0JVlBQX1NXQVBfWVVWX0JZVEVTID0gMHgwMiwKLQlWUFBfREVDT01QUkVTU0lPTiA9IDB4MDQsCi0JVlBQX1VZVllfVE9fUkdCWCA9IDB4MDgsCi19OwotCi0vKiBNYWluIGRldmljZSBkcml2ZXIgc3RydWN0dXJlICovCi1zdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UgewotCWVudW0gdzk5NjhjZl9tb2RlbF9pZCBpZDsgICAvKiBwcml2YXRlIGRldmljZSBpZGVudGlmaWVyICovCi0KLQlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSogdjRsZGV2OyAvKiAtPiBWNEwgc3RydWN0dXJlICovCi0Jc3RydWN0IGxpc3RfaGVhZCB2NGxsaXN0OyAgICAvKiBlbnRyeSBvZiB0aGUgbGlzdCBvZiBWNEwgY2FtZXJhcyAqLwotCi0Jc3RydWN0IHVzYl9kZXZpY2UqIHVzYmRldjsgICAgICAgICAgIC8qIC0+IG1haW4gVVNCIHN0cnVjdHVyZSAqLwotCXN0cnVjdCB1cmIqIHVyYltXOTk2OENGX1VSQlNdOyAgICAgICAvKiAtPiBVU0IgcmVxdWVzdCBibG9jayBzdHJ1Y3RzICovCi0Jdm9pZCogdHJhbnNmZXJfYnVmZmVyW1c5OTY4Q0ZfVVJCU107IC8qIC0+IElTTyB0cmFuc2ZlciBidWZmZXJzICovCi0JdTE2KiBjb250cm9sX2J1ZmZlcjsgICAgICAgICAgICAgICAgIC8qIC0+IGJ1ZmZlciBmb3IgY29udHJvbCByZXEuKi8KLQl1MTYqIGRhdGFfYnVmZmVyOyAgICAgICAgICAgICAgICAgICAgLyogLT4gZGF0YSB0byBzZW5kIHRvIHRoZSBGU0IgKi8KLQotCXN0cnVjdCB3OTk2OGNmX2ZyYW1lX3QgZnJhbWVbVzk5NjhDRl9NQVhfQlVGRkVSU107Ci0Jc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCBmcmFtZV90bXA7IC8qIHRlbXBvcmFyeSBmcmFtZSAqLwotCXN0cnVjdCB3OTk2OGNmX2ZyYW1lX3QgZnJhbWVfdnBwOyAvKiBoZWxwZXIgZnJhbWUuKi8KLQlzdHJ1Y3Qgdzk5NjhjZl9mcmFtZV90KiBmcmFtZV9jdXJyZW50OyAvKiAtPiBmcmFtZSBiZWluZyBncmFiYmVkICovCi0Jc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCogcmVxdWVzdGVkX2ZyYW1lW1c5OTY4Q0ZfTUFYX0JVRkZFUlNdOwotCi0JdTggbWF4X2J1ZmZlcnMsICAgLyogbnVtYmVyIG9mIHJlcXVlc3RlZCBidWZmZXJzICovCi0JICAgZm9yY2VfcGFsZXR0ZSwgLyogeWVzPTEvbm89MCAqLwotCSAgIGZvcmNlX3JnYiwgICAgIC8qIHJlYWQgUkdCIGluc3RlYWQgb2YgQkdSLCB5ZXM9MSwgbm89MCAqLwotCSAgIGRvdWJsZV9idWZmZXIsIC8qIGhhcmR3YXJlIGRvdWJsZSBidWZmZXJpbmcgeWVzPTEvbm89MCAqLwotCSAgIGNsYW1waW5nLCAgICAgIC8qIHZpZGVvIGRhdGEgY2xhbXBpbmcgeWVzPTEvbm89MCAqLwotCSAgIGZpbHRlcl90eXBlLCAgIC8qIDA9ZGlzYWJsZWQsIDE9MyB0YXAsIDI9NSB0YXAgZmlsdGVyICovCi0JICAgY2FwdHVyZSwgICAgICAgLyogMD1kaXNhYmxlZCwgMT1lbmFibGVkICovCi0JICAgbGFyZ2V2aWV3LCAgICAgLyogMD1kaXNhYmxlZCwgMT1lbmFibGVkICovCi0JICAgZGVjb21wcmVzc2lvbiwgLyogMD1kaXNhYmxlZCwgMT1mb3JjZWQsIDI9YWxsb3dlZCAqLwotCSAgIHVwc2NhbGluZzsgICAgIC8qIHNvZnR3YXJlIGltYWdlIHNjYWxpbmcsIDA9ZW5hYmxlZCwgMT1kaXNhYmxlZCAqLwotCi0Jc3RydWN0IHZpZGVvX3BpY3R1cmUgcGljdHVyZTsgLyogY3VycmVudCBwaWN0dXJlIHNldHRpbmdzICovCi0Jc3RydWN0IHZpZGVvX3dpbmRvdyB3aW5kb3c7ICAgLyogY3VycmVudCB3aW5kb3cgc2V0dGluZ3MgKi8KLQotCXUxNiBod19kZXB0aCwgICAgLyogZGVwdGggKHVzZWQgYnkgdGhlIGNoaXApICovCi0JICAgIGh3X3BhbGV0dGUsICAvKiBwYWxldHRlICh1c2VkIGJ5IHRoZSBjaGlwKSAqLwotCSAgICBod193aWR0aCwgICAgLyogd2lkdGggKHVzZWQgYnkgdGhlIGNoaXApICovCi0JICAgIGh3X2hlaWdodCwgICAvKiBoZWlnaHQgKHVzZWQgYnkgdGhlIGNoaXApICovCi0JICAgIGhzX3BvbGFyaXR5LCAvKiAwPW5lZ2F0aXZlIHN5bmMgcHVsc2UsIDE9cG9zaXRpdmUgc3luYyBwdWxzZSAqLwotCSAgICB2c19wb2xhcml0eSwgLyogMD1uZWdhdGl2ZSBzeW5jIHB1bHNlLCAxPXBvc2l0aXZlIHN5bmMgcHVsc2UgKi8KLQkgICAgc3RhcnRfY3JvcHgsIC8qIHBpeGVscyBmcm9tIEhTIGluYWN0aXZlIGVkZ2UgdG8gMXN0IGNyb3BwZWQgcGl4ZWwqLwotCSAgICBzdGFydF9jcm9weTsgLyogcGl4ZWxzIGZyb20gVlMgaW5hY3RpdmUgZWRnZSB0byAxc3QgY3JvcHBlZCBwaXhlbCovCi0KLQllbnVtIHc5OTY4Y2ZfdnBwX2ZsYWcgdnBwX2ZsYWc7IC8qIHBvc3QtcHJvY2Vzc2luZyByb3V0aW5lcyBpbiB1c2UgKi8KLQotCXU4IG5idWZmZXJzLCAgICAgIC8qIG51bWJlciBvZiBhbGxvY2F0ZWQgZnJhbWUgYnVmZmVycyAqLwotCSAgIGFsdHNldHRpbmcsICAgIC8qIGNhbWVyYSBhbHRlcm5hdGUgc2V0dGluZyAqLwotCSAgIGRpc2Nvbm5lY3RlZCwgIC8qIGZsYWc6IHllcz0xLCBubz0wICovCi0JICAgbWlzY29uZmlndXJlZCwgLyogZmxhZzogeWVzPTEsIG5vPTAgKi8KLQkgICB1c2VycywgICAgICAgICAvKiBmbGFnOiBudW1iZXIgb2YgdXNlcnMgaG9sZGluZyB0aGUgZGV2aWNlICovCi0JICAgc3RyZWFtaW5nOyAgICAgLyogZmxhZzogeWVzPTEsIG5vPTAgKi8KLQotCXU4IHNlbnNvcl9pbml0aWFsaXplZDsgLyogZmxhZzogeWVzPTEsIG5vPTAgKi8KLQotCS8qIERldGVybWluZWQgYnkgdGhlIGltYWdlIHNlbnNvciB0eXBlOiAqLwotCWludCBzZW5zb3IsICAgICAgIC8qIHR5cGUgb2YgaW1hZ2Ugc2Vuc29yIGNoaXAgKENDXyopICovCi0JICAgIG1vbm9jaHJvbWU7ICAgLyogaW1hZ2Ugc2Vuc29yIGlzIChwcm9iYWJseSkgbW9ub2Nocm9tZSAqLwotCXUxNiBtYXh3aWR0aCwgICAgIC8qIG1heGltdW0gd2lkdGggc3VwcG9ydGVkIGJ5IHRoZSBpbWFnZSBzZW5zb3IgKi8KLQkgICAgbWF4aGVpZ2h0LCAgICAvKiBtYXhpbXVtIGhlaWdodCBzdXBwb3J0ZWQgYnkgdGhlIGltYWdlIHNlbnNvciAqLwotCSAgICBtaW53aWR0aCwgICAgIC8qIG1pbmltdW0gd2lkdGggc3VwcG9ydGVkIGJ5IHRoZSBpbWFnZSBzZW5zb3IgKi8KLQkgICAgbWluaGVpZ2h0OyAgICAvKiBtaW5pbXVtIGhlaWdodCBzdXBwb3J0ZWQgYnkgdGhlIGltYWdlIHNlbnNvciAqLwotCXU4ICBhdXRvX2JydCwgICAgIC8qIGF1dG8gYnJpZ2h0bmVzcyBlbmFibGVkIGZsYWcgKi8KLQkgICAgYXV0b19leHAsICAgICAvKiBhdXRvIGV4cG9zdXJlIGVuYWJsZWQgZmxhZyAqLwotCSAgICBiYWNrbGlnaHQsICAgIC8qIGJhY2tsaWdodCBleHBvc3VyZSBhbGdvcml0aG0gZmxhZyAqLwotCSAgICBtaXJyb3IsICAgICAgIC8qIGltYWdlIGlzIHJldmVyc2VkIGhvcml6b250YWxseSAqLwotCSAgICBsaWdodGZyZXEsICAgIC8qIHBvd2VyIChsaWdodGluZykgZnJlcXVlbmN5ICovCi0JICAgIGJhbmRmaWx0OyAgICAgLyogYmFuZGluZyBmaWx0ZXIgZW5hYmxlZCBmbGFnICovCi0JczggIGNsb2NrZGl2OyAgICAgLyogY2xvY2sgZGl2aXNvciAqLwotCi0JLyogSTJDIGludGVyZmFjZSB0byBrZXJuZWwgKi8KLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXB0ZXI7Ci0Jc3RydWN0IHY0bDJfc3ViZGV2ICpzZW5zb3Jfc2Q7Ci0KLQkvKiBMb2NrcyAqLwotCXN0cnVjdCBtdXRleCBkZXZfbXV0ZXgsICAgIC8qIGZvciBwcm9iZSwgZGlzY29ubmVjdCxvcGVuIGFuZCBjbG9zZSAqLwotCQkJIGZpbGVvcF9tdXRleDsgLyogZm9yIHJlYWQgYW5kIGlvY3RsICovCi0Jc3BpbmxvY2tfdCB1cmJfbG9jaywgICAvKiBmb3Igc3VibWl0X3VyYigpIGFuZCB1bmxpbmtfdXJiKCkgKi8KLQkJICAgZmxpc3RfbG9jazsgLyogZm9yIHJlcXVlc3RlZCBmcmFtZSBsaXN0IGFjY2Vzc2VzICovCi0Jd2FpdF9xdWV1ZV9oZWFkX3Qgb3Blbiwgd2FpdF9xdWV1ZTsKLQotCWNoYXIgY29tbWFuZFsxNl07IC8qIG5hbWUgb2YgdGhlIHByb2dyYW0gaG9sZGluZyB0aGUgZGV2aWNlICovCi19OwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB3OTk2OGNmX2RldmljZSAqdG9fY2FtKHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpCi17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IHc5OTY4Y2ZfZGV2aWNlLCB2NGwyX2Rldik7Ci19Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIE1hY3JvcyBmb3IgZGVidWdnaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI3VuZGVmIERCRwotI3VuZGVmIEtEQkcKLSNpZmRlZiBXOTk2OENGX0RFQlVHCi0vKiBGb3IgZGV2aWNlIHNwZWNpZmljIGRlYnVnZ2luZyBtZXNzYWdlcyAqLwotIwlkZWZpbmUgREJHKGxldmVsLCBmbXQsIGFyZ3MuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWlmICggKChzcGVjaWZpY19kZWJ1ZykgJiYgKGRlYnVnID09IChsZXZlbCkpKSB8fCAgICAgICAgICAgICAgICAgICAgICBcCi0JICAgICAoKCFzcGVjaWZpY19kZWJ1ZykgJiYgKGRlYnVnID49IChsZXZlbCkpKSApIHsgICAgICAgICAgICAgICAgICAgIFwKLQkJaWYgKChsZXZlbCkgPT0gMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQl2NGwyX2VycigmY2FtLT52NGwyX2RldiwgZm10ICJcbiIsICMjIGFyZ3MpOyAgICAgICAgICBcCi0JCWVsc2UgaWYgKChsZXZlbCkgPT0gMiB8fCAobGV2ZWwpID09IDMpICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJdjRsMl9pbmZvKCZjYW0tPnY0bDJfZGV2LCBmbXQgIlxuIiwgIyMgYXJncyk7ICAgICAgICAgXAotCQllbHNlIGlmICgobGV2ZWwpID09IDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCXY0bDJfd2FybigmY2FtLT52NGwyX2RldiwgZm10ICJcbiIsICMjIGFyZ3MpOyAgICAgICAgIFwKLQkJZWxzZSBpZiAoKGxldmVsKSA+PSA1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQl2NGwyX2luZm8oJmNhbS0+djRsMl9kZXYsICJbJXM6JWRdICIgZm10ICJcbiIsICAgICAgICBcCi0JCQkJIF9fZnVuY19fLCBfX0xJTkVfXyAsICMjIGFyZ3MpOyAgICAgICAgICAgICAgIFwKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotLyogRm9yIGdlbmVyaWMga2VybmVsIChub3QgZGV2aWNlIHNwZWNpZmljKSBtZXNzYWdlcyAqLwotIwlkZWZpbmUgS0RCRyhsZXZlbCwgZm10LCBhcmdzLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWlmICggKChzcGVjaWZpY19kZWJ1ZykgJiYgKGRlYnVnID09IChsZXZlbCkpKSB8fCAgICAgICAgICAgICAgICAgICAgICBcCi0JICAgICAoKCFzcGVjaWZpY19kZWJ1ZykgJiYgKGRlYnVnID49IChsZXZlbCkpKSApIHsgICAgICAgICAgICAgICAgICAgIFwKLQkJaWYgKChsZXZlbCkgPj0gMSAmJiAobGV2ZWwpIDw9IDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQlwcl9pbmZvKCJ3OTk2OGNmOiAiIGZtdCAiXG4iLCAjIyBhcmdzKTsgICAgICAgICAgICAgICBcCi0JCWVsc2UgaWYgKChsZXZlbCkgPj0gNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJcHJfZGVidWcoInc5OTY4Y2Y6IFslczolZF0gIiBmbXQgIlxuIiwgX19mdW5jX18sICBcCi0JCQkJIF9fTElORV9fICwgIyMgYXJncyk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotI2Vsc2UKLQkvKiBOb3QgZGVidWdnaW5nOiBub3RoaW5nICovCi0jCWRlZmluZSBEQkcobGV2ZWwsIGZtdCwgYXJncy4uLikgZG8gezt9IHdoaWxlKDApOwotIwlkZWZpbmUgS0RCRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBkbyB7O30gd2hpbGUoMCk7Ci0jZW5kaWYKLQotI3VuZGVmIFBEQkcKLSNkZWZpbmUgUERCRyhmbXQsIGFyZ3MuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXY0bDJfaW5mbygmY2FtLT52NGwyX2RldiwgIlslczolZF0gIiBmbXQgIlxuIiwgX19mdW5jX18sIF9fTElORV9fICwgIyMgYXJncyk7Ci0KLSN1bmRlZiBQREJHRwotI2RlZmluZSBQREJHRyhmbXQsIGFyZ3MuLi4pIGRvIHs7fSB3aGlsZSgwKTsgLyogbm90aGluZzogaXQncyBhIHBsYWNlaG9sZGVyICovCi0KLSNlbmRpZiAvKiBfVzk5NjhDRl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmX2RlY29kZXIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZl9kZWNvZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ZGVjYmYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmX2RlY29kZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFZpZGVvIGRlY29kZXIgZm9yIHRoZSBXOTk2Wzg3XUNGIGRyaXZlciBmb3IgTGludXguICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwMyAyMDA0IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICoKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgX1c5OTY4Q0ZfREVDT0RFUl9IXwotI2RlZmluZSBfVzk5NjhDRl9ERUNPREVSX0hfCi0KLS8qIENvbW1lbnQvdW5jb21tZW50IHRoaXMgZm9yIGhpZ2gvbG93IHF1YWxpdHkgb2YgY29tcHJlc3NlZCB2aWRlbyAqLwotI2RlZmluZSBXOTk2OENGX0RFQ19GQVNUX0xPV1FVQUxJVFlfVklERU8KLQotI2lmZGVmIFc5OTY4Q0ZfREVDX0ZBU1RfTE9XUVVBTElUWV9WSURFTwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWV9RVUFOVEFCTEVbNjRdID0gewotCTE2LCAgMTEsICAxMCwgIDE2LCAgMjQsICA0MCwgIDUxLCAgNjEsCi0JMTIsICAxMiwgIDE0LCAgMTksICAyNiwgIDU4LCAgNjAsICA1NSwKLQkxNCwgIDEzLCAgMTYsICAyNCwgIDQwLCAgNTcsICA2OSwgIDU2LAotCTE0LCAgMTcsICAyMiwgIDI5LCAgNTEsICA4NywgIDgwLCAgNjIsCi0JMTgsICAyMiwgIDM3LCAgNTYsICA2OCwgMTA5LCAxMDMsICA3NywKLQkyNCwgIDM1LCAgNTUsICA2NCwgIDgxLCAxMDQsIDExMywgIDkyLAotCTQ5LCAgNjQsICA3OCwgIDg3LCAxMDMsIDEyMSwgMTIwLCAxMDEsCi0JNzIsICA5MiwgIDk1LCAgOTgsIDExMiwgMTAwLCAxMDMsICA5OQotfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgVVZfUVVBTlRBQkxFWzY0XSA9IHsKLQkxNywgIDE4LCAgMjQsICA0NywgIDk5LCAgOTksICA5OSwgIDk5LAotCTE4LCAgMjEsICAyNiwgIDY2LCAgOTksICA5OSwgIDk5LCAgOTksCi0JMjQsICAyNiwgIDU2LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwKLQk0NywgIDY2LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LAotCTk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksCi0JOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwKLQk5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LAotCTk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTkKLX07Ci0jZWxzZQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWV9RVUFOVEFCTEVbNjRdID0gewotCSA4LCAgIDUsICAgNSwgICA4LCAgMTIsICAyMCwgIDI1LCAgMzAsCi0JIDYsICAgNiwgICA3LCAgIDksICAxMywgIDI5LCAgMzAsICAyNywKLQkgNywgICA2LCAgIDgsICAxMiwgIDIwLCAgMjgsICAzNCwgIDI4LAotCSA3LCAgIDgsICAxMSwgIDE0LCAgMjUsICA0MywgIDQwLCAgMzEsCi0JIDksICAxMSwgIDE4LCAgMjgsICAzNCwgIDU0LCAgNTEsICAzOCwKLQkxMiwgIDE3LCAgMjcsICAzMiwgIDQwLCAgNTIsICA1NiwgIDQ2LAotCTI0LCAgMzIsICAzOSwgIDQzLCAgNTEsICA2MCwgIDYwLCAgNTAsCi0JMzYsICA0NiwgIDQ3LCAgNDksICA1NiwgIDUwLCAgNTEsICA0OQotfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgVVZfUVVBTlRBQkxFWzY0XSA9IHsKLQkgOCwgICA5LCAgMTIsICAyMywgIDQ5LCAgNDksICA0OSwgIDQ5LAotCSA5LCAgMTAsICAxMywgIDMzLCAgNDksICA0OSwgIDQ5LCAgNDksCi0JMTIsICAxMywgIDI4LCAgNDksICA0OSwgIDQ5LCAgNDksICA0OSwKLQkyMywgIDMzLCAgNDksICA0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LAotCTQ5LCAgNDksICA0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDksCi0JNDksICA0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDksICA0OSwKLQk0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LAotCTQ5LCAgNDksICA0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDkKLX07Ci0jZW5kaWYKLQotI2RlZmluZSBXOTk2OENGX0RFQ19FUlJfQ09SUlVQVEVEX0RBVEEgIC0xCi0jZGVmaW5lIFc5OTY4Q0ZfREVDX0VSUl9CVUZfT1ZFUkZMT1cgICAgLTIKLSNkZWZpbmUgVzk5NjhDRl9ERUNfRVJSX05PX1NPSSAgICAgICAgICAtMwotI2RlZmluZSBXOTk2OENGX0RFQ19FUlJfTk9fU09GMCAgICAgICAgIC00Ci0jZGVmaW5lIFc5OTY4Q0ZfREVDX0VSUl9OT19TT1MgICAgICAgICAgLTUKLSNkZWZpbmUgVzk5NjhDRl9ERUNfRVJSX05PX0VPSSAgICAgICAgICAtNgotCi1leHRlcm4gdm9pZCB3OTk2OGNmX2luaXRfZGVjb2Rlcih2b2lkKTsKLWV4dGVybiBpbnQgdzk5NjhjZl9jaGVja19oZWFkZXJzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIFBpbiwKLQkJCQkgY29uc3QgdW5zaWduZWQgbG9uZyBCVUZfU0laRSk7Ci1leHRlcm4gaW50IHc5OTY4Y2ZfZGVjb2RlKGNvbnN0IGNoYXIqIFBpbiwgY29uc3QgdW5zaWduZWQgbG9uZyBCVUZfU0laRSwKLQkJCSAgY29uc3QgdW5zaWduZWQgVywgY29uc3QgdW5zaWduZWQgSCwgY2hhciogUG91dCk7Ci0KLSNlbmRpZiAvKiBfVzk5NjhDRl9ERUNPREVSX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2ZfdnBwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2ZfdnBwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4YzliNmMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmX3ZwcC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogSW50ZXJmYWNlIGZvciB2aWRlbyBwb3N0LXByb2Nlc3NpbmcgZnVuY3Rpb25zIGZvciB0aGUgVzk5Nls4N11DRiBkcml2ZXIgKgotICogZm9yIExpbnV4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgKgotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfVzk5NjhDRl9WUFBfSF8KLSNkZWZpbmUgX1c5OTY4Q0ZfVlBQX0hfCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLQotc3RydWN0IHc5OTY4Y2ZfdnBwX3QgewotCXN0cnVjdCBtb2R1bGUqIG93bmVyOwotCWludCAoKmNoZWNrX2hlYWRlcnMpKGNvbnN0IHVuc2lnbmVkIGNoYXIqLCBjb25zdCB1bnNpZ25lZCBsb25nKTsKLQlpbnQgKCpkZWNvZGUpKGNvbnN0IGNoYXIqLCBjb25zdCB1bnNpZ25lZCBsb25nLCBjb25zdCB1bnNpZ25lZCwKLQkJICAgICAgY29uc3QgdW5zaWduZWQsIGNoYXIqKTsKLQl2b2lkICgqc3dhcF95dXZieXRlcykodm9pZCosIHVuc2lnbmVkIGxvbmcpOwotCXZvaWQgKCp1eXZ5X3RvX3JnYngpKHU4KiwgdW5zaWduZWQgbG9uZywgdTgqLCB1MTYsIHU4KTsKLQl2b2lkICgqc2NhbGVfdXApKHU4KiwgdTgqLCB1MTYsIHUxNiwgdTE2LCB1MTYsIHUxNik7Ci0KLQl1OCBidXN5OyAvKiByZWFkLW9ubHkgZmxhZzogbW9kdWxlIGlzL2lzIG5vdCBpbiB1c2UgKi8KLX07Ci0KLSNlbmRpZiAvKiBfVzk5NjhDRl9WUFBfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhN2U2MTBlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1jb25maWcgVVNCX1pDMDMwMQotCXRyaXN0YXRlICJVU0IgWkMwMzAxW1BdIHdlYmNhbSBzdXBwb3J0IChERVBSRUNBVEVEKSIKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDIKLQlkZWZhdWx0IG4KLQktLS1oZWxwLS0tCi0JICBUaGlzIGRyaXZlciBpcyBERVBSRUNBVEVEIHBsZWFzZSB1c2UgdGhlIGdzcGNhIHpjM3h4IG1vZHVsZQotCSAgaW5zdGVhZC4KLQotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBaQzAzMDEgb3IKLQkgIFpDMDMwMVAgSW1hZ2UgUHJvY2Vzc29ycyBhbmQgQ29udHJvbCBDaGlwcy4KLQotCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvemMwMzAxLnR4dD4gZm9yIG1vcmUgaW5mby4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgemMwMzAxLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDllNmQ5Ny4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotemMwMzAxLW9ianMgICAgIDo9IHpjMDMwMV9jb3JlLm8gemMwMzAxX3BiMDMzMC5vIHpjMDMwMV9wYXMyMDJiY2IubwotCi1vYmotJChDT05GSUdfVVNCX1pDMDMwMSkgICAgICAgICs9IHpjMDMwMS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDEuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWI1Y2NlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFY0TDIgZHJpdmVyIGZvciBaQzAzMDFbUF0gSW1hZ2UgUHJvY2Vzc29yIGFuZCBDb250cm9sIENoaXAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA3IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICoKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgX1pDMDMwMV9IXwotI2RlZmluZSBfWkMwMzAxX0hfCi0KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KLQotI2luY2x1ZGUgInpjMDMwMV9zZW5zb3IuaCIKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIFpDMDMwMV9ERUJVRwotI2RlZmluZSBaQzAzMDFfREVCVUdfTEVWRUwgICAgICAgICAyCi0jZGVmaW5lIFpDMDMwMV9NQVhfREVWSUNFUyAgICAgICAgIDY0Ci0jZGVmaW5lIFpDMDMwMV9GT1JDRV9NVU5NQVAgICAgICAgIDAKLSNkZWZpbmUgWkMwMzAxX01BWF9GUkFNRVMgICAgICAgICAgMzIKLSNkZWZpbmUgWkMwMzAxX0NPTVBSRVNTSU9OX1FVQUxJVFkgMAotI2RlZmluZSBaQzAzMDFfVVJCUyAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFpDMDMwMV9JU09fUEFDS0VUUyAgICAgICAgIDcKLSNkZWZpbmUgWkMwMzAxX0FMVEVSTkFURV9TRVRUSU5HICAgNwotI2RlZmluZSBaQzAzMDFfVVJCX1RJTUVPVVQgICAgICAgICBtc2Vjc190b19qaWZmaWVzKDIgKiBaQzAzMDFfSVNPX1BBQ0tFVFMpCi0jZGVmaW5lIFpDMDMwMV9DVFJMX1RJTUVPVVQgICAgICAgIDEwMAotI2RlZmluZSBaQzAzMDFfRlJBTUVfVElNRU9VVCAgICAgICAyCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotWkMwMzAxX0lEX1RBQkxFCi1aQzAzMDFfU0VOU09SX1RBQkxFCi0KLWVudW0gemMwMzAxX2ZyYW1lX3N0YXRlIHsKLQlGX1VOVVNFRCwKLQlGX1FVRVVFRCwKLQlGX0dSQUJCSU5HLAotCUZfRE9ORSwKLQlGX0VSUk9SLAotfTsKLQotc3RydWN0IHpjMDMwMV9mcmFtZV90IHsKLQl2b2lkKiBidWZtZW07Ci0Jc3RydWN0IHY0bDJfYnVmZmVyIGJ1ZjsKLQllbnVtIHpjMDMwMV9mcmFtZV9zdGF0ZSBzdGF0ZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGZyYW1lOwotCXVuc2lnbmVkIGxvbmcgdm1hX3VzZV9jb3VudDsKLX07Ci0KLWVudW0gemMwMzAxX2Rldl9zdGF0ZSB7Ci0JREVWX0lOSVRJQUxJWkVEID0gMHgwMSwKLQlERVZfRElTQ09OTkVDVEVEID0gMHgwMiwKLQlERVZfTUlTQ09ORklHVVJFRCA9IDB4MDQsCi19OwotCi1lbnVtIHpjMDMwMV9pb19tZXRob2QgewotCUlPX05PTkUsCi0JSU9fUkVBRCwKLQlJT19NTUFQLAotfTsKLQotZW51bSB6YzAzMDFfc3RyZWFtX3N0YXRlIHsKLQlTVFJFQU1fT0ZGLAotCVNUUkVBTV9JTlRFUlJVUFQsCi0JU1RSRUFNX09OLAotfTsKLQotc3RydWN0IHpjMDMwMV9tb2R1bGVfcGFyYW0gewotCXU4IGZvcmNlX211bm1hcDsKLQl1MTYgZnJhbWVfdGltZW91dDsKLX07Ci0KLXN0YXRpYyBERUNMQVJFX1JXU0VNKHpjMDMwMV9kZXZfbG9jayk7Ci0KLXN0cnVjdCB6YzAzMDFfZGV2aWNlIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlKiB2NGxkZXY7Ci0KLQlzdHJ1Y3QgemMwMzAxX3NlbnNvciBzZW5zb3I7Ci0KLQlzdHJ1Y3QgdXNiX2RldmljZSogdXNiZGV2OwotCXN0cnVjdCB1cmIqIHVyYltaQzAzMDFfVVJCU107Ci0Jdm9pZCogdHJhbnNmZXJfYnVmZmVyW1pDMDMwMV9VUkJTXTsKLQl1OCogY29udHJvbF9idWZmZXI7Ci0KLQlzdHJ1Y3QgemMwMzAxX2ZyYW1lX3QgKmZyYW1lX2N1cnJlbnQsIGZyYW1lW1pDMDMwMV9NQVhfRlJBTUVTXTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGlucXVldWUsIG91dHF1ZXVlOwotCXUzMiBmcmFtZV9jb3VudCwgbmJ1ZmZlcnMsIG5yZWFkYnVmZmVyczsKLQotCWVudW0gemMwMzAxX2lvX21ldGhvZCBpbzsKLQllbnVtIHpjMDMwMV9zdHJlYW1fc3RhdGUgc3RyZWFtOwotCi0Jc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uIGNvbXByZXNzaW9uOwotCi0Jc3RydWN0IHpjMDMwMV9tb2R1bGVfcGFyYW0gbW9kdWxlX3BhcmFtOwotCi0Jc3RydWN0IGtyZWYga3JlZjsKLQllbnVtIHpjMDMwMV9kZXZfc3RhdGUgc3RhdGU7Ci0JdTggdXNlcnM7Ci0KLQlzdHJ1Y3QgY29tcGxldGlvbiBwcm9iZTsKLQlzdHJ1Y3QgbXV0ZXggb3Blbl9tdXRleCwgZmlsZW9wX211dGV4OwotCXNwaW5sb2NrX3QgcXVldWVfbG9jazsKLQl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X29wZW4sIHdhaXRfZnJhbWUsIHdhaXRfc3RyZWFtOwotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdHJ1Y3QgemMwMzAxX2RldmljZSoKLXpjMDMwMV9tYXRjaF9pZChzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCi17Ci0JcmV0dXJuIHVzYl9tYXRjaF9pZCh1c2JfaWZudW1fdG9faWYoY2FtLT51c2JkZXYsIDApLCBpZCkgPyBjYW0gOiBOVUxMOwotfQotCi12b2lkCi16YzAzMDFfYXR0YWNoX3NlbnNvcihzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLCBzdHJ1Y3QgemMwMzAxX3NlbnNvciogc2Vuc29yKQotewotCW1lbWNweSgmY2FtLT5zZW5zb3IsIHNlbnNvciwgc2l6ZW9mKHN0cnVjdCB6YzAzMDFfc2Vuc29yKSk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI3VuZGVmIERCRwotI3VuZGVmIEtEQkcKLSNpZmRlZiBaQzAzMDFfREVCVUcKLSMJZGVmaW5lIERCRyhsZXZlbCwgZm10LCBhcmdzLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlpZiAoZGVidWcgPj0gKGxldmVsKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlpZiAoKGxldmVsKSA9PSAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCWRldl9lcnIoJmNhbS0+dXNiZGV2LT5kZXYsIGZtdCAiXG4iLCAjIyBhcmdzKTsgICAgICAgIFwKLQkJZWxzZSBpZiAoKGxldmVsKSA9PSAyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQlkZXZfaW5mbygmY2FtLT51c2JkZXYtPmRldiwgZm10ICJcbiIsICMjIGFyZ3MpOyAgICAgICBcCi0JCWVsc2UgaWYgKChsZXZlbCkgPj0gMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJZGV2X2luZm8oJmNhbS0+dXNiZGV2LT5kZXYsICJbJXM6JXM6JWRdICIgZm10ICJcbiIsICAgXAotCQkJCSBfX0ZJTEVfXywgX19mdW5jX18sIF9fTElORV9fICwgIyMgYXJncyk7IFwKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSB3aGlsZSAoMCkKLSMJZGVmaW5lIEtEQkcobGV2ZWwsIGZtdCwgYXJncy4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlpZiAoZGVidWcgPj0gKGxldmVsKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlpZiAoKGxldmVsKSA9PSAxIHx8IChsZXZlbCkgPT0gMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCXByX2luZm8oInpjMDMwMTogIiBmbXQgIlxuIiwgIyMgYXJncyk7ICAgICAgICAgICAgICAgIFwKLQkJZWxzZSBpZiAoKGxldmVsKSA9PSAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQlwcl9kZWJ1Zygic245YzEwMjogWyVzOiVzOiVkXSAiIGZtdCAiXG4iLCBfX0ZJTEVfXywgICBcCi0JCQkJIF9fZnVuY19fLCBfX0xJTkVfXyAsICMjIGFyZ3MpOyAgICAgICAgICAgXAotCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IHdoaWxlICgwKQotIwlkZWZpbmUgVjRMREJHKGxldmVsLCBuYW1lLCBjbWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWlmIChkZWJ1ZyA+PSAobGV2ZWwpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCXY0bF9wcmludF9pb2N0bChuYW1lLCBjbWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSB3aGlsZSAoMCkKLSNlbHNlCi0jCWRlZmluZSBEQkcobGV2ZWwsIGZtdCwgYXJncy4uLikgZG8gezt9IHdoaWxlKDApCi0jCWRlZmluZSBLREJHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIGRvIHs7fSB3aGlsZSgwKQotIwlkZWZpbmUgVjRMREJHKGxldmVsLCBuYW1lLCBjbWQpIGRvIHs7fSB3aGlsZSgwKQotI2VuZGlmCi0KLSN1bmRlZiBQREJHCi0jZGVmaW5lIFBEQkcoZm10LCBhcmdzLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1kZXZfaW5mbygmY2FtLT51c2JkZXYtPmRldiwgIlslczolczolZF0gIiBmbXQgIlxuIiwgX19GSUxFX18sIF9fZnVuY19fLCAgIFwKLQkgX19MSU5FX18gLCAjIyBhcmdzKQotCi0jdW5kZWYgUERCR0cKLSNkZWZpbmUgUERCR0coZm10LCBhcmdzLi4uKSBkbyB7O30gd2hpbGUoMCkgLyogcGxhY2Vob2xkZXIgKi8KLQotI2VuZGlmIC8qIF9aQzAzMDFfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfY29yZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjUxY2ZiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9jb3JlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDk4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFZpZGVvNExpbnV4MiBkcml2ZXIgZm9yIFpDMDMwMVtQXSBJbWFnZSBQcm9jZXNzb3IgYW5kIENvbnRyb2wgQ2hpcCAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA3IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEluZm9ybWF0aW9ucyBhYm91dCB0aGUgY2hpcCBpbnRlcm5hbHMgbmVlZGVkIHRvIGVuYWJsZSB0aGUgSTJDIHByb3RvY29sICoKLSAqIGhhdmUgYmVlbiB0YWtlbiBmcm9tIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBaQzAzMHggVmlkZW80TGludXgxICAgICAgICoKLSAqIGRyaXZlciB3cml0dGVuIGJ5IEFuZHJldyBCaXJrZXR0IDxhbmR5QG5vYnVncy5vcmc+ICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICoKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0jaW5jbHVkZSA8bGludXgvcGFnZS1mbGFncy5oPgotI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLSNpbmNsdWRlICJ6YzAzMDEuaCIKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIFpDMDMwMV9NT0RVTEVfTkFNRSAgICAiVjRMMiBkcml2ZXIgZm9yIFpDMDMwMVtQXSAiICAgICAgICAgICAgICAgICAgICBcCi0JCQkgICAgICAiSW1hZ2UgUHJvY2Vzc29yIGFuZCBDb250cm9sIENoaXAiCi0jZGVmaW5lIFpDMDMwMV9NT0RVTEVfQVVUSE9SICAiKEMpIDIwMDYtMjAwNyBMdWNhIFJpc29saWEiCi0jZGVmaW5lIFpDMDMwMV9BVVRIT1JfRU1BSUwgICAiPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+IgotI2RlZmluZSBaQzAzMDFfTU9EVUxFX0xJQ0VOU0UgIkdQTCIKLSNkZWZpbmUgWkMwMzAxX01PRFVMRV9WRVJTSU9OICIxOjEuMTAiCi0jZGVmaW5lIFpDMDMwMV9NT0RVTEVfVkVSU0lPTl9DT0RFICBLRVJORUxfVkVSU0lPTigxLCAxLCAxMCkKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1NT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgemMwMzAxX2lkX3RhYmxlKTsKLQotTU9EVUxFX0FVVEhPUihaQzAzMDFfTU9EVUxFX0FVVEhPUiAiICIgWkMwMzAxX0FVVEhPUl9FTUFJTCk7Ci1NT0RVTEVfREVTQ1JJUFRJT04oWkMwMzAxX01PRFVMRV9OQU1FKTsKLU1PRFVMRV9WRVJTSU9OKFpDMDMwMV9NT0RVTEVfVkVSU0lPTik7Ci1NT0RVTEVfTElDRU5TRShaQzAzMDFfTU9EVUxFX0xJQ0VOU0UpOwotCi1zdGF0aWMgc2hvcnQgdmlkZW9fbnJbXSA9IHtbMCAuLi4gWkMwMzAxX01BWF9ERVZJQ0VTLTFdID0gLTF9OwotbW9kdWxlX3BhcmFtX2FycmF5KHZpZGVvX25yLCBzaG9ydCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHZpZGVvX25yLAotCQkgIlxuPC0xfG5bLC4uLl0+IFNwZWNpZnkgVjRMMiBtaW5vciBtb2RlIG51bWJlci4iCi0JCSAiXG4gLTEgPSB1c2UgbmV4dCBhdmFpbGFibGUgKGRlZmF1bHQpIgotCQkgIlxuICBuID0gdXNlIG1pbm9yIG51bWJlciBuIChpbnRlZ2VyID49IDApIgotCQkgIlxuWW91IGNhbiBzcGVjaWZ5IHVwIHRvICIKLQkJIF9fTU9EVUxFX1NUUklORyhaQzAzMDFfTUFYX0RFVklDRVMpICIgY2FtZXJhcyB0aGlzIHdheS4iCi0JCSAiXG5Gb3IgZXhhbXBsZToiCi0JCSAiXG52aWRlb19ucj0tMSwyLC0xIHdvdWxkIGFzc2lnbiBtaW5vciBudW1iZXIgMiB0byIKLQkJICJcbnRoZSBzZWNvbmQgcmVnaXN0ZXJlZCBjYW1lcmEgYW5kIHVzZSBhdXRvIGZvciB0aGUgZmlyc3QiCi0JCSAiXG5vbmUgYW5kIGZvciBldmVyeSBvdGhlciBjYW1lcmEuIgotCQkgIlxuIik7Ci0KLXN0YXRpYyBzaG9ydCBmb3JjZV9tdW5tYXBbXSA9IHtbMCAuLi4gWkMwMzAxX01BWF9ERVZJQ0VTLTFdID0KLQkJCSAgICAgICBaQzAzMDFfRk9SQ0VfTVVOTUFQfTsKLW1vZHVsZV9wYXJhbV9hcnJheShmb3JjZV9tdW5tYXAsIGJvb2wsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9tdW5tYXAsCi0JCSAiXG48MHwxWywuLi5dPiBGb3JjZSB0aGUgYXBwbGljYXRpb24gdG8gdW5tYXAgcHJldmlvdXNseSIKLQkJICJcbm1hcHBlZCBidWZmZXIgbWVtb3J5IGJlZm9yZSBjYWxsaW5nIGFueSBWSURJT0NfU19DUk9QIG9yIgotCQkgIlxuVklESU9DX1NfRk1UIGlvY3RsJ3MuIE5vdCBhbGwgdGhlIGFwcGxpY2F0aW9ucyBzdXBwb3J0IgotCQkgIlxudGhpcyBmZWF0dXJlLiBUaGlzIHBhcmFtZXRlciBpcyBzcGVjaWZpYyBmb3IgZWFjaCIKLQkJICJcbmRldGVjdGVkIGNhbWVyYS4iCi0JCSAiXG4gMCA9IGRvIG5vdCBmb3JjZSBtZW1vcnkgdW5tYXBwaW5nIgotCQkgIlxuIDEgPSBmb3JjZSBtZW1vcnkgdW5tYXBwaW5nIChzYXZlIG1lbW9yeSkiCi0JCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoWkMwMzAxX0ZPUkNFX01VTk1BUCkiLiIKLQkJICJcbiIpOwotCi1zdGF0aWMgdW5zaWduZWQgaW50IGZyYW1lX3RpbWVvdXRbXSA9IHtbMCAuLi4gWkMwMzAxX01BWF9ERVZJQ0VTLTFdID0KLQkJCQkgICAgICAgWkMwMzAxX0ZSQU1FX1RJTUVPVVR9OwotbW9kdWxlX3BhcmFtX2FycmF5KGZyYW1lX3RpbWVvdXQsIHVpbnQsIE5VTEwsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhmcmFtZV90aW1lb3V0LAotCQkgIlxuPG5bLC4uLl0+IFRpbWVvdXQgZm9yIGEgdmlkZW8gZnJhbWUgaW4gc2Vjb25kcy4iCi0JCSAiXG5UaGlzIHBhcmFtZXRlciBpcyBzcGVjaWZpYyBmb3IgZWFjaCBkZXRlY3RlZCBjYW1lcmEuIgotCQkgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFpDMDMwMV9GUkFNRV9USU1FT1VUKSIuIgotCQkgIlxuIik7Ci0KLSNpZmRlZiBaQzAzMDFfREVCVUcKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBkZWJ1ZyA9IFpDMDMwMV9ERUJVR19MRVZFTDsKLW1vZHVsZV9wYXJhbShkZWJ1ZywgdXNob3J0LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsCi0JCSAiXG48bj4gRGVidWdnaW5nIGluZm9ybWF0aW9uIGxldmVsLCBmcm9tIDAgdG8gMzoiCi0JCSAiXG4wID0gbm9uZSAodXNlIGNhcmVmdWxseSkiCi0JCSAiXG4xID0gY3JpdGljYWwgZXJyb3JzIgotCQkgIlxuMiA9IHNpZ25pZmljYW50IGluZm9ybWF0aW9ucyIKLQkJICJcbjMgPSBtb3JlIHZlcmJvc2UgbWVzc2FnZXMiCi0JCSAiXG5MZXZlbCAzIGlzIHVzZWZ1bCBmb3IgdGVzdGluZyBvbmx5LCB3aGVuIG9ubHkgIgotCQkgIm9uZSBkZXZpY2UgaXMgdXNlZC4iCi0JCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoWkMwMzAxX0RFQlVHX0xFVkVMKSIuIgotCQkgIlxuIik7Ci0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgdTMyCi16YzAzMDFfcmVxdWVzdF9idWZmZXJzKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0sIHUzMiBjb3VudCwKLQkJICAgICAgIGVudW0gemMwMzAxX2lvX21ldGhvZCBpbykKLXsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KiBwID0gJihjYW0tPnNlbnNvci5waXhfZm9ybWF0KTsKLQlzdHJ1Y3QgdjRsMl9yZWN0KiByID0gJihjYW0tPnNlbnNvci5jcm9wY2FwLmJvdW5kcyk7Ci0JY29uc3Qgc2l6ZV90IGltYWdlc2l6ZSA9IGNhbS0+bW9kdWxlX3BhcmFtLmZvcmNlX211bm1hcCB8fAotCQkJCSBpbyA9PSBJT19SRUFEID8KLQkJCQkgKHAtPndpZHRoICogcC0+aGVpZ2h0ICogcC0+cHJpdikgLyA4IDoKLQkJCQkgKHItPndpZHRoICogci0+aGVpZ2h0ICogcC0+cHJpdikgLyA4OwotCXZvaWQqIGJ1ZmYgPSBOVUxMOwotCXUzMiBpOwotCi0JaWYgKGNvdW50ID4gWkMwMzAxX01BWF9GUkFNRVMpCi0JCWNvdW50ID0gWkMwMzAxX01BWF9GUkFNRVM7Ci0KLQljYW0tPm5idWZmZXJzID0gY291bnQ7Ci0Jd2hpbGUgKGNhbS0+bmJ1ZmZlcnMgPiAwKSB7Ci0JCWlmICgoYnVmZiA9IHZtYWxsb2NfMzJfdXNlcihjYW0tPm5idWZmZXJzICoKLQkJCQkJICAgIFBBR0VfQUxJR04oaW1hZ2VzaXplKSkpKQotCQkJYnJlYWs7Ci0JCWNhbS0+bmJ1ZmZlcnMtLTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY2FtLT5uYnVmZmVyczsgaSsrKSB7Ci0JCWNhbS0+ZnJhbWVbaV0uYnVmbWVtID0gYnVmZiArIGkqUEFHRV9BTElHTihpbWFnZXNpemUpOwotCQljYW0tPmZyYW1lW2ldLmJ1Zi5pbmRleCA9IGk7Ci0JCWNhbS0+ZnJhbWVbaV0uYnVmLm0ub2Zmc2V0ID0gaSpQQUdFX0FMSUdOKGltYWdlc2l6ZSk7Ci0JCWNhbS0+ZnJhbWVbaV0uYnVmLmxlbmd0aCA9IGltYWdlc2l6ZTsKLQkJY2FtLT5mcmFtZVtpXS5idWYudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQkJY2FtLT5mcmFtZVtpXS5idWYuc2VxdWVuY2UgPSAwOwotCQljYW0tPmZyYW1lW2ldLmJ1Zi5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKLQkJY2FtLT5mcmFtZVtpXS5idWYubWVtb3J5ID0gVjRMMl9NRU1PUllfTU1BUDsKLQkJY2FtLT5mcmFtZVtpXS5idWYuZmxhZ3MgPSAwOwotCX0KLQotCXJldHVybiBjYW0tPm5idWZmZXJzOwotfQotCi0KLXN0YXRpYyB2b2lkIHpjMDMwMV9yZWxlYXNlX2J1ZmZlcnMoc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSkKLXsKLQlpZiAoY2FtLT5uYnVmZmVycykgewotCQl2ZnJlZShjYW0tPmZyYW1lWzBdLmJ1Zm1lbSk7Ci0JCWNhbS0+bmJ1ZmZlcnMgPSAwOwotCX0KLQljYW0tPmZyYW1lX2N1cnJlbnQgPSBOVUxMOwotfQotCi0KLXN0YXRpYyB2b2lkIHpjMDMwMV9lbXB0eV9mcmFtZXF1ZXVlcyhzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtKQotewotCXUzMiBpOwotCi0JSU5JVF9MSVNUX0hFQUQoJmNhbS0+aW5xdWV1ZSk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNhbS0+b3V0cXVldWUpOwotCi0JZm9yIChpID0gMDsgaSA8IFpDMDMwMV9NQVhfRlJBTUVTOyBpKyspIHsKLQkJY2FtLT5mcmFtZVtpXS5zdGF0ZSA9IEZfVU5VU0VEOwotCQljYW0tPmZyYW1lW2ldLmJ1Zi5ieXRlc3VzZWQgPSAwOwotCX0KLX0KLQotCi1zdGF0aWMgdm9pZCB6YzAzMDFfcmVxdWV1ZV9vdXRxdWV1ZShzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtKQotewotCXN0cnVjdCB6YzAzMDFfZnJhbWVfdCAqaTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoaSwgJmNhbS0+b3V0cXVldWUsIGZyYW1lKSB7Ci0JCWktPnN0YXRlID0gRl9RVUVVRUQ7Ci0JCWxpc3RfYWRkKCZpLT5mcmFtZSwgJmNhbS0+aW5xdWV1ZSk7Ci0JfQotCi0JSU5JVF9MSVNUX0hFQUQoJmNhbS0+b3V0cXVldWUpOwotfQotCi0KLXN0YXRpYyB2b2lkIHpjMDMwMV9xdWV1ZV91bnVzZWRmcmFtZXMoc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSkKLXsKLQl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7Ci0JdTMyIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY2FtLT5uYnVmZmVyczsgaSsrKQotCQlpZiAoY2FtLT5mcmFtZVtpXS5zdGF0ZSA9PSBGX1VOVVNFRCkgewotCQkJY2FtLT5mcmFtZVtpXS5zdGF0ZSA9IEZfUVVFVUVEOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7Ci0JCQlsaXN0X2FkZF90YWlsKCZjYW0tPmZyYW1lW2ldLmZyYW1lLCAmY2FtLT5pbnF1ZXVlKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7Ci0JCX0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1pbnQgemMwMzAxX3dyaXRlX3JlZyhzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLCB1MTYgaW5kZXgsIHUxNiB2YWx1ZSkKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSogdWRldiA9IGNhbS0+dXNiZGV2OwotCWludCByZXM7Ci0KLQlyZXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweGEwLCAweDQwLAotCQkJICAgICAgdmFsdWUsIGluZGV4LCBOVUxMLCAwLCBaQzAzMDFfQ1RSTF9USU1FT1VUKTsKLQlpZiAocmVzIDwgMCkgewotCQlEQkcoMywgIkZhaWxlZCB0byB3cml0ZSBhIHJlZ2lzdGVyIChpbmRleCAweCUwNFgsICIKLQkJICAgICAgICJ2YWx1ZSAweCUwMlgsIGVycm9yICVkKSIsaW5kZXgsIHZhbHVlLCByZXMpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQotaW50IHpjMDMwMV9yZWFkX3JlZyhzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLCB1MTYgaW5kZXgpCi17Ci0Jc3RydWN0IHVzYl9kZXZpY2UqIHVkZXYgPSBjYW0tPnVzYmRldjsKLQl1OCogYnVmZiA9IGNhbS0+Y29udHJvbF9idWZmZXI7Ci0JaW50IHJlczsKLQotCXJlcyA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIDB4YTEsIDB4YzAsCi0JCQkgICAgICAweDAwMDEsIGluZGV4LCBidWZmLCAxLCBaQzAzMDFfQ1RSTF9USU1FT1VUKTsKLQlpZiAocmVzIDwgMCkKLQkJREJHKDMsICJGYWlsZWQgdG8gcmVhZCBhIHJlZ2lzdGVyIChpbmRleCAweCUwNFgsIGVycm9yICVkKSIsCi0JCSAgICBpbmRleCwgcmVzKTsKLQotCVBEQkdHKCJSZWFkOiBpbmRleCAweCUwNFgsIHZhbHVlOiAweCUwNFgiLCBpbmRleCwgKGludCkoKmJ1ZmYpKTsKLQotCXJldHVybiAocmVzID49IDApID8gKGludCkoKmJ1ZmYpIDogLTE7Ci19Ci0KLQotaW50IHpjMDMwMV9pMmNfcmVhZChzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLCB1MTYgYWRkcmVzcywgdTggbGVuZ3RoKQotewotCWludCBlcnIgPSAwLCByZXMsIHIwLCByMTsKLQotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDkyLCBhZGRyZXNzKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDA5MCwgMHgwMik7Ci0KLQltc2xlZXAoMSk7Ci0KLQlyZXMgPSB6YzAzMDFfcmVhZF9yZWcoY2FtLCAweDAwOTEpOwotCWlmIChyZXMgPCAwKQotCQllcnIgKz0gcmVzOwotCXIwID0gemMwMzAxX3JlYWRfcmVnKGNhbSwgMHgwMDk1KTsKLQlpZiAocjAgPCAwKQotCQllcnIgKz0gcjA7Ci0JcjEgPSB6YzAzMDFfcmVhZF9yZWcoY2FtLCAweDAwOTYpOwotCWlmIChyMSA8IDApCi0JCWVyciArPSByMTsKLQotCXJlcyA9IChsZW5ndGggPD0gMSkgPyByMCA6IHIwIHwgKHIxIDw8IDgpOwotCi0JaWYgKGVycikKLQkJREJHKDMsICJJMkMgcmVhZCBmYWlsZWQgYXQgYWRkcmVzcyAweCUwNFgsIHZhbHVlOiAweCUwNFgiLAotCQkgICAgYWRkcmVzcywgcmVzKTsKLQotCi0JUERCR0coIkkyQyByZWFkOiBhZGRyZXNzIDB4JTA0WCwgdmFsdWU6IDB4JTA0WCIsIGFkZHJlc3MsIHJlcyk7Ci0KLQlyZXR1cm4gZXJyID8gLTEgOiByZXM7Ci19Ci0KLQotaW50IHpjMDMwMV9pMmNfd3JpdGUoc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSwgdTE2IGFkZHJlc3MsIHUxNiB2YWx1ZSkKLXsKLQlpbnQgZXJyID0gMCwgcmVzOwotCi0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwOTIsIGFkZHJlc3MpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDkzLCB2YWx1ZSAmIDB4ZmYpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDk0LCB2YWx1ZSA+PiA4KTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDA5MCwgMHgwMSk7Ci0KLQltc2xlZXAoMSk7Ci0KLQlyZXMgPSB6YzAzMDFfcmVhZF9yZWcoY2FtLCAweDAwOTEpOwotCWlmIChyZXMgPCAwKQotCQllcnIgKz0gcmVzOwotCi0JaWYgKGVycikKLQkJREJHKDMsICJJMkMgd3JpdGUgZmFpbGVkIGF0IGFkZHJlc3MgMHglMDRYLCB2YWx1ZTogMHglMDRYIiwKLQkJICAgIGFkZHJlc3MsIHZhbHVlKTsKLQotCVBEQkdHKCJJMkMgd3JpdGU6IGFkZHJlc3MgMHglMDRYLCB2YWx1ZTogMHglMDRYIiwgYWRkcmVzcywgdmFsdWUpOwotCi0JcmV0dXJuIGVyciA/IC0xIDogMDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgdm9pZCB6YzAzMDFfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKLXsKLQlzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtID0gdXJiLT5jb250ZXh0OwotCXN0cnVjdCB6YzAzMDFfZnJhbWVfdCoqIGY7Ci0Jc2l6ZV90IGltYWdlc2l6ZTsKLQl1OCBpOwotCWludCBlcnIgPSAwOwotCi0JaWYgKHVyYi0+c3RhdHVzID09IC1FTk9FTlQpCi0JCXJldHVybjsKLQotCWYgPSAmY2FtLT5mcmFtZV9jdXJyZW50OwotCi0JaWYgKGNhbS0+c3RyZWFtID09IFNUUkVBTV9JTlRFUlJVUFQpIHsKLQkJY2FtLT5zdHJlYW0gPSBTVFJFQU1fT0ZGOwotCQlpZiAoKCpmKSkKLQkJCSgqZiktPnN0YXRlID0gRl9RVUVVRUQ7Ci0JCURCRygzLCAiU3RyZWFtIGludGVycnVwdGVkIik7Ci0JCXdha2VfdXAoJmNhbS0+d2FpdF9zdHJlYW0pOwotCX0KLQotCWlmIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkKLQkJcmV0dXJuOwotCi0JaWYgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkgewotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNhbS0+d2FpdF9mcmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoY2FtLT5zdHJlYW0gPT0gU1RSRUFNX09GRiB8fCBsaXN0X2VtcHR5KCZjYW0tPmlucXVldWUpKQotCQlnb3RvIHJlc3VibWl0X3VyYjsKLQotCWlmICghKCpmKSkKLQkJKCpmKSA9IGxpc3RfZW50cnkoY2FtLT5pbnF1ZXVlLm5leHQsIHN0cnVjdCB6YzAzMDFfZnJhbWVfdCwKLQkJCQkgIGZyYW1lKTsKLQotCWltYWdlc2l6ZSA9IChjYW0tPnNlbnNvci5waXhfZm9ybWF0LndpZHRoICoKLQkJICAgICBjYW0tPnNlbnNvci5waXhfZm9ybWF0LmhlaWdodCAqCi0JCSAgICAgY2FtLT5zZW5zb3IucGl4X2Zvcm1hdC5wcml2KSAvIDg7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7Ci0JCXVuc2lnbmVkIGludCBsZW4sIHN0YXR1czsKLQkJdm9pZCAqcG9zOwotCQl1MTYqIHNvaTsKLQkJdTggc29mOwotCi0JCWxlbiA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aDsKLQkJc3RhdHVzID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXM7Ci0JCXBvcyA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0ICsgdXJiLT50cmFuc2Zlcl9idWZmZXI7Ci0KLQkJaWYgKHN0YXR1cykgewotCQkJREJHKDMsICJFcnJvciBpbiBpc29jaHJvbm91cyBmcmFtZSIpOwotCQkJKCpmKS0+c3RhdGUgPSBGX0VSUk9SOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlzb2YgPSAoKihzb2kgPSBwb3MpID09IDB4ZDhmZik7Ci0KLQkJUERCR0coIklzb2Nocm5vdXMgZnJhbWU6IGxlbmd0aCAldSwgIyV1IGksIiwgbGVuLCBpKTsKLQotCQlpZiAoKCpmKS0+c3RhdGUgPT0gRl9RVUVVRUQgfHwgKCpmKS0+c3RhdGUgPT0gRl9FUlJPUikKLXN0YXJ0X29mX2ZyYW1lOgotCQkJaWYgKHNvZikgewotCQkJCSgqZiktPnN0YXRlID0gRl9HUkFCQklORzsKLQkJCQkoKmYpLT5idWYuYnl0ZXN1c2VkID0gMDsKLQkJCQlkb19nZXR0aW1lb2ZkYXkoJigqZiktPmJ1Zi50aW1lc3RhbXApOwotCQkJCURCRygzLCAiU09GIGRldGVjdGVkOiBuZXcgdmlkZW8gZnJhbWUiKTsKLQkJCX0KLQotCQlpZiAoKCpmKS0+c3RhdGUgPT0gRl9HUkFCQklORykgewotCQkJaWYgKHNvZiAmJiAoKmYpLT5idWYuYnl0ZXN1c2VkKQotCQkJCQlnb3RvIGVuZF9vZl9mcmFtZTsKLQotCQkJaWYgKCgqZiktPmJ1Zi5ieXRlc3VzZWQgKyBsZW4gPiBpbWFnZXNpemUpIHsKLQkJCQlEQkcoMywgIlZpZGVvIGZyYW1lIHNpemUgZXhjZWVkZWQiKTsKLQkJCQkoKmYpLT5zdGF0ZSA9IEZfRVJST1I7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCW1lbWNweSgoKmYpLT5idWZtZW0rKCpmKS0+YnVmLmJ5dGVzdXNlZCwgcG9zLCBsZW4pOwotCQkJKCpmKS0+YnVmLmJ5dGVzdXNlZCArPSBsZW47Ci0KLQkJCWlmICgoKmYpLT5idWYuYnl0ZXN1c2VkID09IGltYWdlc2l6ZSkgewotCQkJCXUzMiBiOwotZW5kX29mX2ZyYW1lOgotCQkJCWIgPSAoKmYpLT5idWYuYnl0ZXN1c2VkOwotCQkJCSgqZiktPnN0YXRlID0gRl9ET05FOwotCQkJCSgqZiktPmJ1Zi5zZXF1ZW5jZT0gKytjYW0tPmZyYW1lX2NvdW50OwotCQkJCXNwaW5fbG9jaygmY2FtLT5xdWV1ZV9sb2NrKTsKLQkJCQlsaXN0X21vdmVfdGFpbCgmKCpmKS0+ZnJhbWUsICZjYW0tPm91dHF1ZXVlKTsKLQkJCQlpZiAoIWxpc3RfZW1wdHkoJmNhbS0+aW5xdWV1ZSkpCi0JCQkJCSgqZikgPSBsaXN0X2VudHJ5KGNhbS0+aW5xdWV1ZS5uZXh0LAotCQkJCQkJICAgICAgIHN0cnVjdCB6YzAzMDFfZnJhbWVfdCwKLQkJCQkJCQkgIGZyYW1lKTsKLQkJCQllbHNlCi0JCQkJCSgqZikgPSBOVUxMOwotCQkJCXNwaW5fdW5sb2NrKCZjYW0tPnF1ZXVlX2xvY2spOwotCQkJCURCRygzLCAiVmlkZW8gZnJhbWUgY2FwdHVyZWQ6IDogJWx1IGJ5dGVzIiwKLQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpKGIpKTsKLQotCQkJCWlmICghKCpmKSkKLQkJCQkJZ290byByZXN1Ym1pdF91cmI7Ci0KLQkJCQlpZiAoc29mKQotCQkJCQlnb3RvIHN0YXJ0X29mX2ZyYW1lOwotCQkJfQotCQl9Ci0JfQotCi1yZXN1Ym1pdF91cmI6Ci0JdXJiLT5kZXYgPSBjYW0tPnVzYmRldjsKLQllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwotCWlmIChlcnIgPCAwICYmIGVyciAhPSAtRVBFUk0pIHsKLQkJY2FtLT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKLQkJREJHKDEsICJ1c2Jfc3VibWl0X3VyYigpIGZhaWxlZCIpOwotCX0KLQotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2FtLT53YWl0X2ZyYW1lKTsKLX0KLQotCi1zdGF0aWMgaW50IHpjMDMwMV9zdGFydF90cmFuc2ZlcihzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtKQotewotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gY2FtLT51c2JkZXY7Ci0Jc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSogYWx0c2V0dGluZyA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZygKLQkJCQkJCSAgICAgdXNiX2lmbnVtX3RvX2lmKHVkZXYsIDApLAotCQkJCQkJICAgICBaQzAzMDFfQUxURVJOQVRFX1NFVFRJTkcpOwotCWNvbnN0IHVuc2lnbmVkIGludCBwc3ogPSBsZTE2X3RvX2NwdShhbHRzZXR0aW5nLT4KLQkJCQkJICAgICBlbmRwb2ludFswXS5kZXNjLndNYXhQYWNrZXRTaXplKTsKLQlzdHJ1Y3QgdXJiKiB1cmI7Ci0JczggaSwgajsKLQlpbnQgZXJyID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBaQzAzMDFfVVJCUzsgaSsrKSB7Ci0JCWNhbS0+dHJhbnNmZXJfYnVmZmVyW2ldID0ga3phbGxvYyhaQzAzMDFfSVNPX1BBQ0tFVFMgKiBwc3osCi0JCQkJCQkgIEdGUF9LRVJORUwpOwotCQlpZiAoIWNhbS0+dHJhbnNmZXJfYnVmZmVyW2ldKSB7Ci0JCQllcnIgPSAtRU5PTUVNOwotCQkJREJHKDEsICJOb3QgZW5vdWdoIG1lbW9yeSIpOwotCQkJZ290byBmcmVlX2J1ZmZlcnM7Ci0JCX0KLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgWkMwMzAxX1VSQlM7IGkrKykgewotCQl1cmIgPSB1c2JfYWxsb2NfdXJiKFpDMDMwMV9JU09fUEFDS0VUUywgR0ZQX0tFUk5FTCk7Ci0JCWNhbS0+dXJiW2ldID0gdXJiOwotCQlpZiAoIXVyYikgewotCQkJZXJyID0gLUVOT01FTTsKLQkJCURCRygxLCAidXNiX2FsbG9jX3VyYigpIGZhaWxlZCIpOwotCQkJZ290byBmcmVlX3VyYnM7Ci0JCX0KLQkJdXJiLT5kZXYgPSB1ZGV2OwotCQl1cmItPmNvbnRleHQgPSBjYW07Ci0JCXVyYi0+cGlwZSA9IHVzYl9yY3Zpc29jcGlwZSh1ZGV2LCAxKTsKLQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKLQkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IFpDMDMwMV9JU09fUEFDS0VUUzsKLQkJdXJiLT5jb21wbGV0ZSA9IHpjMDMwMV91cmJfY29tcGxldGU7Ci0JCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gY2FtLT50cmFuc2Zlcl9idWZmZXJbaV07Ci0JCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHBzeiAqIFpDMDMwMV9JU09fUEFDS0VUUzsKLQkJdXJiLT5pbnRlcnZhbCA9IDE7Ci0JCWZvciAoaiA9IDA7IGogPCBaQzAzMDFfSVNPX1BBQ0tFVFM7IGorKykgewotCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5vZmZzZXQgPSBwc3ogKiBqOwotCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5sZW5ndGggPSBwc3o7Ci0JCX0KLQl9Ci0KLQllcnIgPSB1c2Jfc2V0X2ludGVyZmFjZSh1ZGV2LCAwLCBaQzAzMDFfQUxURVJOQVRFX1NFVFRJTkcpOwotCWlmIChlcnIpIHsKLQkJREJHKDEsICJ1c2Jfc2V0X2ludGVyZmFjZSgpIGZhaWxlZCIpOwotCQlnb3RvIGZyZWVfdXJiczsKLQl9Ci0KLQljYW0tPmZyYW1lX2N1cnJlbnQgPSBOVUxMOwotCi0JZm9yIChpID0gMDsgaSA8IFpDMDMwMV9VUkJTOyBpKyspIHsKLQkJZXJyID0gdXNiX3N1Ym1pdF91cmIoY2FtLT51cmJbaV0sIEdGUF9LRVJORUwpOwotCQlpZiAoZXJyKSB7Ci0JCQlmb3IgKGogPSBpLTE7IGogPj0gMDsgai0tKQotCQkJCXVzYl9raWxsX3VyYihjYW0tPnVyYltqXSk7Ci0JCQlEQkcoMSwgInVzYl9zdWJtaXRfdXJiKCkgZmFpbGVkLCBlcnJvciAlZCIsIGVycik7Ci0JCQlnb3RvIGZyZWVfdXJiczsKLQkJfQotCX0KLQotCXJldHVybiAwOwotCi1mcmVlX3VyYnM6Ci0JZm9yIChpID0gMDsgKGkgPCBaQzAzMDFfVVJCUykgJiYgY2FtLT51cmJbaV07IGkrKykKLQkJdXNiX2ZyZWVfdXJiKGNhbS0+dXJiW2ldKTsKLQotZnJlZV9idWZmZXJzOgotCWZvciAoaSA9IDA7IChpIDwgWkMwMzAxX1VSQlMpICYmIGNhbS0+dHJhbnNmZXJfYnVmZmVyW2ldOyBpKyspCi0JCWtmcmVlKGNhbS0+dHJhbnNmZXJfYnVmZmVyW2ldKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLQotc3RhdGljIGludCB6YzAzMDFfc3RvcF90cmFuc2ZlcihzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtKQotewotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gY2FtLT51c2JkZXY7Ci0JczggaTsKLQlpbnQgZXJyID0gMDsKLQotCWlmIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkKLQkJcmV0dXJuIDA7Ci0KLQlmb3IgKGkgPSBaQzAzMDFfVVJCUy0xOyBpID49IDA7IGktLSkgewotCQl1c2Jfa2lsbF91cmIoY2FtLT51cmJbaV0pOwotCQl1c2JfZnJlZV91cmIoY2FtLT51cmJbaV0pOwotCQlrZnJlZShjYW0tPnRyYW5zZmVyX2J1ZmZlcltpXSk7Ci0JfQotCi0JZXJyID0gdXNiX3NldF9pbnRlcmZhY2UodWRldiwgMCwgMCk7IC8qIDAgTWIvcyAqLwotCWlmIChlcnIpCi0JCURCRygzLCAidXNiX3NldF9pbnRlcmZhY2UoKSBmYWlsZWQiKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLQotc3RhdGljIGludCB6YzAzMDFfc3RyZWFtX2ludGVycnVwdChzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtKQotewotCWxvbmcgdGltZW91dDsKLQotCWNhbS0+c3RyZWFtID0gU1RSRUFNX0lOVEVSUlVQVDsKLQl0aW1lb3V0ID0gd2FpdF9ldmVudF90aW1lb3V0KGNhbS0+d2FpdF9zdHJlYW0sCi0JCQkJICAgICAoY2FtLT5zdHJlYW0gPT0gU1RSRUFNX09GRikgfHwKLQkJCQkgICAgIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCksCi0JCQkJICAgICBaQzAzMDFfVVJCX1RJTUVPVVQpOwotCWlmIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JZWxzZSBpZiAoY2FtLT5zdHJlYW0gIT0gU1RSRUFNX09GRikgewotCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOwotCQlEQkcoMSwgIlVSQiB0aW1lb3V0IHJlYWNoZWQuIFRoZSBjYW1lcmEgaXMgbWlzY29uZmlndXJlZC4gVG8gIgotCQkgICAgICAgInVzZSBpdCwgY2xvc2UgYW5kIG9wZW4gJXMgYWdhaW4uIiwKLQkJICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoY2FtLT52NGxkZXYpKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGludAotemMwMzAxX3NldF9jb21wcmVzc2lvbihzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLAotCQkgICAgICAgc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uKiBjb21wcmVzc2lvbikKLXsKLQlpbnQgciwgZXJyID0gMDsKLQotCWlmICgociA9IHpjMDMwMV9yZWFkX3JlZyhjYW0sIDB4MDAwOCkpIDwgMCkKLQkJZXJyICs9IHI7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwMDgsIHIgfCAweDExIHwgY29tcHJlc3Npb24tPnF1YWxpdHkpOwotCi0JcmV0dXJuIGVyciA/IC1FSU8gOiAwOwotfQotCi0KLXN0YXRpYyBpbnQgemMwMzAxX2luaXQoc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSkKLXsKLQlzdHJ1Y3QgemMwMzAxX3NlbnNvciogcyA9ICZjYW0tPnNlbnNvcjsKLQlzdHJ1Y3QgdjRsMl9jb250cm9sIGN0cmw7Ci0Jc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybDsKLQlzdHJ1Y3QgdjRsMl9yZWN0KiByZWN0OwotCXU4IGkgPSAwOwotCWludCBlcnIgPSAwOwotCi0JaWYgKCEoY2FtLT5zdGF0ZSAmIERFVl9JTklUSUFMSVpFRCkpIHsKLQkJbXV0ZXhfaW5pdCgmY2FtLT5vcGVuX211dGV4KTsKLQkJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FtLT53YWl0X29wZW4pOwotCQlxY3RybCA9IHMtPnFjdHJsOwotCQlyZWN0ID0gJihzLT5jcm9wY2FwLmRlZnJlY3QpOwotCQljYW0tPmNvbXByZXNzaW9uLnF1YWxpdHkgPSBaQzAzMDFfQ09NUFJFU1NJT05fUVVBTElUWTsKLQl9IGVsc2UgeyAvKiB1c2UgY3VycmVudCB2YWx1ZXMgKi8KLQkJcWN0cmwgPSBzLT5fcWN0cmw7Ci0JCXJlY3QgPSAmKHMtPl9yZWN0KTsKLQl9Ci0KLQlpZiAocy0+aW5pdCkgewotCQllcnIgPSBzLT5pbml0KGNhbSk7Ci0JCWlmIChlcnIpIHsKLQkJCURCRygzLCAiU2Vuc29yIGluaXRpYWxpemF0aW9uIGZhaWxlZCIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCX0KLQotCWlmICgoZXJyID0gemMwMzAxX3NldF9jb21wcmVzc2lvbihjYW0sICZjYW0tPmNvbXByZXNzaW9uKSkpIHsKLQkJREJHKDMsICJzZXRfY29tcHJlc3Npb24oKSBmYWlsZWQiKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlpZiAocy0+c2V0X2Nyb3ApCi0JCWlmICgoZXJyID0gcy0+c2V0X2Nyb3AoY2FtLCByZWN0KSkpIHsKLQkJCURCRygzLCAic2V0X2Nyb3AoKSBmYWlsZWQiKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQotCWlmIChzLT5zZXRfY3RybCkgewotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzLT5xY3RybCk7IGkrKykKLQkJCWlmIChzLT5xY3RybFtpXS5pZCAhPSAwICYmCi0JCQkgICAgIShzLT5xY3RybFtpXS5mbGFncyAmIFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEKSkgewotCQkJCWN0cmwuaWQgPSBzLT5xY3RybFtpXS5pZDsKLQkJCQljdHJsLnZhbHVlID0gcWN0cmxbaV0uZGVmYXVsdF92YWx1ZTsKLQkJCQllcnIgPSBzLT5zZXRfY3RybChjYW0sICZjdHJsKTsKLQkJCQlpZiAoZXJyKSB7Ci0JCQkJCURCRygzLCAiU2V0ICVzIGNvbnRyb2wgZmFpbGVkIiwKLQkJCQkJICAgIHMtPnFjdHJsW2ldLm5hbWUpOwotCQkJCQlyZXR1cm4gZXJyOwotCQkJCX0KLQkJCQlEQkcoMywgIkltYWdlIHNlbnNvciBzdXBwb3J0cyAnJXMnIGNvbnRyb2wiLAotCQkJCSAgICBzLT5xY3RybFtpXS5uYW1lKTsKLQkJCX0KLQl9Ci0KLQlpZiAoIShjYW0tPnN0YXRlICYgREVWX0lOSVRJQUxJWkVEKSkgewotCQltdXRleF9pbml0KCZjYW0tPmZpbGVvcF9tdXRleCk7Ci0JCXNwaW5fbG9ja19pbml0KCZjYW0tPnF1ZXVlX2xvY2spOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjYW0tPndhaXRfZnJhbWUpOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjYW0tPndhaXRfc3RyZWFtKTsKLQkJY2FtLT5ucmVhZGJ1ZmZlcnMgPSAyOwotCQltZW1jcHkocy0+X3FjdHJsLCBzLT5xY3RybCwgc2l6ZW9mKHMtPnFjdHJsKSk7Ci0JCW1lbWNweSgmKHMtPl9yZWN0KSwgJihzLT5jcm9wY2FwLmRlZnJlY3QpLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB2NGwyX3JlY3QpKTsKLQkJY2FtLT5zdGF0ZSB8PSBERVZfSU5JVElBTElaRUQ7Ci0JfQotCi0JREJHKDIsICJJbml0aWFsaXphdGlvbiBzdWNjZWVkZWQiKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgdm9pZCB6YzAzMDFfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IGtyZWYgKmtyZWYpCi17Ci0Jc3RydWN0IHpjMDMwMV9kZXZpY2UgKmNhbSA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgemMwMzAxX2RldmljZSwKLQkJCQkJCSBrcmVmKTsKLQlEQkcoMiwgIlY0TDIgZGV2aWNlICVzIGRlcmVnaXN0ZXJlZCIsCi0JICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoY2FtLT52NGxkZXYpKTsKLQl2aWRlb19zZXRfZHJ2ZGF0YShjYW0tPnY0bGRldiwgTlVMTCk7Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoY2FtLT52NGxkZXYpOwotCXVzYl9wdXRfZGV2KGNhbS0+dXNiZGV2KTsKLQlrZnJlZShjYW0tPmNvbnRyb2xfYnVmZmVyKTsKLQlrZnJlZShjYW0pOwotfQotCi0KLXN0YXRpYyBpbnQgemMwMzAxX29wZW4oc3RydWN0IGZpbGUgKmZpbHApCi17Ci0Jc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbTsKLQlpbnQgZXJyID0gMDsKLQotCWlmICghZG93bl9yZWFkX3RyeWxvY2soJnpjMDMwMV9kZXZfbG9jaykpCi0JCXJldHVybiAtRUFHQUlOOwotCi0JY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxwKTsKLQotCWlmICh3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmNhbS0+cHJvYmUpKSB7Ci0JCXVwX3JlYWQoJnpjMDMwMV9kZXZfbG9jayk7Ci0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JfQotCi0Ja3JlZl9nZXQoJmNhbS0+a3JlZik7Ci0KLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYW0tPm9wZW5fbXV0ZXgpKSB7Ci0JCWtyZWZfcHV0KCZjYW0tPmtyZWYsIHpjMDMwMV9yZWxlYXNlX3Jlc291cmNlcyk7Ci0JCXVwX3JlYWQoJnpjMDMwMV9kZXZfbG9jayk7Ci0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JfQotCi0JaWYgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB7Ci0JCURCRygxLCAiRGV2aWNlIG5vdCBwcmVzZW50Iik7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChjYW0tPnVzZXJzKSB7Ci0JCURCRygyLCAiRGV2aWNlICVzIGlzIGJ1c3kuLi4iLAotCQkgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShjYW0tPnY0bGRldikpOwotCQlEQkcoMywgIlNpbXVsdGFuZW91cyBvcGVucyBhcmUgbm90IHN1cHBvcnRlZCIpOwotCQlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB8fAotCQkgICAgKGZpbHAtPmZfZmxhZ3MgJiBPX05ERUxBWSkpIHsKLQkJCWVyciA9IC1FV09VTERCTE9DSzsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCURCRygyLCAiQSBibG9ja2luZyBvcGVuKCkgaGFzIGJlZW4gcmVxdWVzdGVkLiBXYWl0IGZvciB0aGUgIgotCQkgICAgICAgImRldmljZSB0byBiZSByZWxlYXNlZC4uLiIpOwotCQl1cF9yZWFkKCZ6YzAzMDFfZGV2X2xvY2spOwotCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfZXhjbHVzaXZlKGNhbS0+d2FpdF9vcGVuLAotCQkJCQkJKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKQotCQkJCQkJCSB8fCAhY2FtLT51c2Vycyk7Ci0JCWRvd25fcmVhZCgmemMwMzAxX2Rldl9sb2NrKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OwotCQlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKLQkJCWVyciA9IC1FTk9ERVY7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCWlmIChjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpIHsKLQkJZXJyID0gemMwMzAxX2luaXQoY2FtKTsKLQkJaWYgKGVycikgewotCQkJREJHKDEsICJJbml0aWFsaXphdGlvbiBmYWlsZWQgYWdhaW4uICIKLQkJCSAgICAgICAiSSB3aWxsIHJldHJ5IG9uIG5leHQgb3BlbigpLiIpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJY2FtLT5zdGF0ZSAmPSB+REVWX01JU0NPTkZJR1VSRUQ7Ci0JfQotCi0JaWYgKChlcnIgPSB6YzAzMDFfc3RhcnRfdHJhbnNmZXIoY2FtKSkpCi0JCWdvdG8gb3V0OwotCi0JZmlscC0+cHJpdmF0ZV9kYXRhID0gY2FtOwotCWNhbS0+dXNlcnMrKzsKLQljYW0tPmlvID0gSU9fTk9ORTsKLQljYW0tPnN0cmVhbSA9IFNUUkVBTV9PRkY7Ci0JY2FtLT5uYnVmZmVycyA9IDA7Ci0JY2FtLT5mcmFtZV9jb3VudCA9IDA7Ci0JemMwMzAxX2VtcHR5X2ZyYW1lcXVldWVzKGNhbSk7Ci0KLQlEQkcoMywgIlZpZGVvIGRldmljZSAlcyBpcyBvcGVuIiwKLQkgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShjYW0tPnY0bGRldikpOwotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZjYW0tPm9wZW5fbXV0ZXgpOwotCWlmIChlcnIpCi0JCWtyZWZfcHV0KCZjYW0tPmtyZWYsIHpjMDMwMV9yZWxlYXNlX3Jlc291cmNlcyk7Ci0JdXBfcmVhZCgmemMwMzAxX2Rldl9sb2NrKTsKLQlyZXR1cm4gZXJyOwotfQotCi0KLXN0YXRpYyBpbnQgemMwMzAxX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbHApCi17Ci0Jc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbTsKLQotCWRvd25fd3JpdGUoJnpjMDMwMV9kZXZfbG9jayk7Ci0KLQljYW0gPSB2aWRlb19kcnZkYXRhKGZpbHApOwotCi0JemMwMzAxX3N0b3BfdHJhbnNmZXIoY2FtKTsKLQl6YzAzMDFfcmVsZWFzZV9idWZmZXJzKGNhbSk7Ci0JY2FtLT51c2Vycy0tOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZV9ucigmY2FtLT53YWl0X29wZW4sIDEpOwotCi0JREJHKDMsICJWaWRlbyBkZXZpY2UgJXMgY2xvc2VkIiwKLQkgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShjYW0tPnY0bGRldikpOwotCi0Ja3JlZl9wdXQoJmNhbS0+a3JlZiwgemMwMzAxX3JlbGVhc2VfcmVzb3VyY2VzKTsKLQotCXVwX3dyaXRlKCZ6YzAzMDFfZGV2X2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIHNzaXplX3QKLXpjMDMwMV9yZWFkKHN0cnVjdCBmaWxlKiBmaWxwLCBjaGFyIF9fdXNlciAqIGJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QqIGZfcG9zKQotewotCXN0cnVjdCB6YzAzMDFfZGV2aWNlICpjYW0gPSB2aWRlb19kcnZkYXRhKGZpbHApOwotCXN0cnVjdCB6YzAzMDFfZnJhbWVfdCogZiwgKiBpOwotCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKLQlsb25nIHRpbWVvdXQ7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYW0tPmZpbGVvcF9tdXRleCkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0KLQlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKLQkJREJHKDEsICJEZXZpY2Ugbm90IHByZXNlbnQiKTsKLQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWlmIChjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpIHsKLQkJREJHKDEsICJUaGUgY2FtZXJhIGlzIG1pc2NvbmZpZ3VyZWQuIENsb3NlIGFuZCBvcGVuIGl0ICIKLQkJICAgICAgICJhZ2Fpbi4iKTsKLQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWlmIChjYW0tPmlvID09IElPX01NQVApIHsKLQkJREJHKDMsICJDbG9zZSBhbmQgb3BlbiB0aGUgZGV2aWNlIGFnYWluIHRvIGNob29zZSB0aGUgcmVhZCAiCi0JCSAgICAgICAibWV0aG9kIik7Ci0JCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCWlmIChjYW0tPmlvID09IElPX05PTkUpIHsKLQkJaWYgKCF6YzAzMDFfcmVxdWVzdF9idWZmZXJzKGNhbSwgY2FtLT5ucmVhZGJ1ZmZlcnMsIElPX1JFQUQpKSB7Ci0JCQlEQkcoMSwgInJlYWQoKSBmYWlsZWQsIG5vdCBlbm91Z2ggbWVtb3J5Iik7Ci0JCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCWNhbS0+aW8gPSBJT19SRUFEOwotCQljYW0tPnN0cmVhbSA9IFNUUkVBTV9PTjsKLQl9Ci0KLQlpZiAobGlzdF9lbXB0eSgmY2FtLT5pbnF1ZXVlKSkgewotCQlpZiAoIWxpc3RfZW1wdHkoJmNhbS0+b3V0cXVldWUpKQotCQkJemMwMzAxX2VtcHR5X2ZyYW1lcXVldWVzKGNhbSk7Ci0JCXpjMDMwMV9xdWV1ZV91bnVzZWRmcmFtZXMoY2FtKTsKLQl9Ci0KLQlpZiAoIWNvdW50KSB7Ci0JCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAobGlzdF9lbXB0eSgmY2FtLT5vdXRxdWV1ZSkpIHsKLQkJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0JCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKLQkJCXJldHVybiAtRUFHQUlOOwotCQl9Ci0JCXRpbWVvdXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dAotCQkJICAoIGNhbS0+d2FpdF9mcmFtZSwKLQkJCSAgICAoIWxpc3RfZW1wdHkoJmNhbS0+b3V0cXVldWUpKSB8fAotCQkJICAgIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgfHwKLQkJCSAgICAoY2FtLT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSwKLQkJCSAgICBtc2Vjc190b19qaWZmaWVzKAotCQkJCWNhbS0+bW9kdWxlX3BhcmFtLmZyYW1lX3RpbWVvdXQgKiAxMDAwCi0JCQkgICAgKQotCQkJICApOwotCQlpZiAodGltZW91dCA8IDApIHsKLQkJCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwotCQkJcmV0dXJuIHRpbWVvdXQ7Ci0JCX0KLQkJaWYgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB7Ci0JCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JCWlmICghdGltZW91dCB8fCAoY2FtLT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSkgewotCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCX0KLQotCWYgPSBsaXN0X2VudHJ5KGNhbS0+b3V0cXVldWUucHJldiwgc3RydWN0IHpjMDMwMV9mcmFtZV90LCBmcmFtZSk7Ci0KLQlpZiAoY291bnQgPiBmLT5idWYuYnl0ZXN1c2VkKQotCQljb3VudCA9IGYtPmJ1Zi5ieXRlc3VzZWQ7Ci0KLQlpZiAoY29weV90b191c2VyKGJ1ZiwgZi0+YnVmbWVtLCBjb3VudCkpIHsKLQkJZXJyID0gLUVGQVVMVDsKLQkJZ290byBleGl0OwotCX0KLQkqZl9wb3MgKz0gY291bnQ7Ci0KLWV4aXQ6Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShpLCAmY2FtLT5vdXRxdWV1ZSwgZnJhbWUpCi0JCWktPnN0YXRlID0gRl9VTlVTRUQ7Ci0JSU5JVF9MSVNUX0hFQUQoJmNhbS0+b3V0cXVldWUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7Ci0KLQl6YzAzMDFfcXVldWVfdW51c2VkZnJhbWVzKGNhbSk7Ci0KLQlQREJHRygiRnJhbWUgIyVsdSwgYnl0ZXMgcmVhZDogJXp1IiwKLQkgICAgICAodW5zaWduZWQgbG9uZylmLT5idWYuaW5kZXgsIGNvdW50KTsKLQotCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwotCi0JcmV0dXJuIGVyciA/IGVyciA6IGNvdW50OwotfQotCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgemMwMzAxX3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsIHBvbGxfdGFibGUgKndhaXQpCi17Ci0Jc3RydWN0IHpjMDMwMV9kZXZpY2UgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlscCk7Ci0Jc3RydWN0IHpjMDMwMV9mcmFtZV90KiBmOwotCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKLQl1bnNpZ25lZCBpbnQgbWFzayA9IDA7Ci0KLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYW0tPmZpbGVvcF9tdXRleCkpCi0JCXJldHVybiBQT0xMRVJSOwotCi0JaWYgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB7Ci0JCURCRygxLCAiRGV2aWNlIG5vdCBwcmVzZW50Iik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JaWYgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkgewotCQlEQkcoMSwgIlRoZSBjYW1lcmEgaXMgbWlzY29uZmlndXJlZC4gQ2xvc2UgYW5kIG9wZW4gaXQgIgotCQkgICAgICAgImFnYWluLiIpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWlmIChjYW0tPmlvID09IElPX05PTkUpIHsKLQkJaWYgKCF6YzAzMDFfcmVxdWVzdF9idWZmZXJzKGNhbSwgY2FtLT5ucmVhZGJ1ZmZlcnMsIElPX1JFQUQpKSB7Ci0JCQlEQkcoMSwgInBvbGwoKSBmYWlsZWQsIG5vdCBlbm91Z2ggbWVtb3J5Iik7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JCWNhbS0+aW8gPSBJT19SRUFEOwotCQljYW0tPnN0cmVhbSA9IFNUUkVBTV9PTjsKLQl9Ci0KLQlpZiAoY2FtLT5pbyA9PSBJT19SRUFEKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGYsICZjYW0tPm91dHF1ZXVlLCBmcmFtZSkKLQkJCWYtPnN0YXRlID0gRl9VTlVTRUQ7Ci0JCUlOSVRfTElTVF9IRUFEKCZjYW0tPm91dHF1ZXVlKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FtLT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKLQkJemMwMzAxX3F1ZXVlX3VudXNlZGZyYW1lcyhjYW0pOwotCX0KLQotCXBvbGxfd2FpdChmaWxwLCAmY2FtLT53YWl0X2ZyYW1lLCB3YWl0KTsKLQotCWlmICghbGlzdF9lbXB0eSgmY2FtLT5vdXRxdWV1ZSkpCi0JCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKLQotCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwotCi0JcmV0dXJuIG1hc2s7Ci0KLWVycm9yOgotCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwotCXJldHVybiBQT0xMRVJSOwotfQotCi0KLXN0YXRpYyB2b2lkIHpjMDMwMV92bV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCogdm1hKQotewotCXN0cnVjdCB6YzAzMDFfZnJhbWVfdCogZiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwotCWYtPnZtYV91c2VfY291bnQrKzsKLX0KLQotCi1zdGF0aWMgdm9pZCB6YzAzMDFfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0KiB2bWEpCi17Ci0JLyogTk9URTogYnVmZmVycyBhcmUgbm90IGZyZWVkIGhlcmUgKi8KLQlzdHJ1Y3QgemMwMzAxX2ZyYW1lX3QqIGYgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKLQlmLT52bWFfdXNlX2NvdW50LS07Ci19Ci0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB6YzAzMDFfdm1fb3BzID0gewotCS5vcGVuID0gemMwMzAxX3ZtX29wZW4sCi0JLmNsb3NlID0gemMwMzAxX3ZtX2Nsb3NlLAotfTsKLQotCi1zdGF0aWMgaW50IHpjMDMwMV9tbWFwKHN0cnVjdCBmaWxlKiBmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlzdHJ1Y3QgemMwMzAxX2RldmljZSAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxwKTsKLQl1bnNpZ25lZCBsb25nIHNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCi0JCSAgICAgIHN0YXJ0ID0gdm1hLT52bV9zdGFydDsKLQl2b2lkICpwb3M7Ci0JdTMyIGk7Ci0KLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYW0tPmZpbGVvcF9tdXRleCkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0KLQlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKLQkJREJHKDEsICJEZXZpY2Ugbm90IHByZXNlbnQiKTsKLQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWlmIChjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpIHsKLQkJREJHKDEsICJUaGUgY2FtZXJhIGlzIG1pc2NvbmZpZ3VyZWQuIENsb3NlIGFuZCBvcGVuIGl0ICIKLQkJICAgICAgICJhZ2Fpbi4iKTsKLQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWlmICghKHZtYS0+dm1fZmxhZ3MgJiAoVk1fV1JJVEUgfCBWTV9SRUFEKSkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7Ci0JCXJldHVybiAtRUFDQ0VTOwotCX0KLQotCWlmIChjYW0tPmlvICE9IElPX01NQVAgfHwKLQkgICAgc2l6ZSAhPSBQQUdFX0FMSUdOKGNhbS0+ZnJhbWVbMF0uYnVmLmxlbmd0aCkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBjYW0tPm5idWZmZXJzOyBpKyspIHsKLQkJaWYgKChjYW0tPmZyYW1lW2ldLmJ1Zi5tLm9mZnNldD4+UEFHRV9TSElGVCkgPT0gdm1hLT52bV9wZ29mZikKLQkJCWJyZWFrOwotCX0KLQlpZiAoaSA9PSBjYW0tPm5idWZmZXJzKSB7Ci0JCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQl2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPOwotCXZtYS0+dm1fZmxhZ3MgfD0gVk1fUkVTRVJWRUQ7Ci0KLQlwb3MgPSBjYW0tPmZyYW1lW2ldLmJ1Zm1lbTsKLQl3aGlsZSAoc2l6ZSA+IDApIHsgLyogc2l6ZSBpcyBwYWdlLWFsaWduZWQgKi8KLQkJaWYgKHZtX2luc2VydF9wYWdlKHZtYSwgc3RhcnQsIHZtYWxsb2NfdG9fcGFnZShwb3MpKSkgewotCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7Ci0JCQlyZXR1cm4gLUVBR0FJTjsKLQkJfQotCQlzdGFydCArPSBQQUdFX1NJWkU7Ci0JCXBvcyArPSBQQUdFX1NJWkU7Ci0JCXNpemUgLT0gUEFHRV9TSVpFOwotCX0KLQotCXZtYS0+dm1fb3BzID0gJnpjMDMwMV92bV9vcHM7Ci0Jdm1hLT52bV9wcml2YXRlX2RhdGEgPSAmY2FtLT5mcmFtZVtpXTsKLQl6YzAzMDFfdm1fb3Blbih2bWEpOwotCi0JbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgaW50Ci16YzAzMDFfdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0sIHZvaWQgX191c2VyICogYXJnKQotewotCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgY2FwID0gewotCQkuZHJpdmVyID0gInpjMDMwMSIsCi0JCS52ZXJzaW9uID0gWkMwMzAxX01PRFVMRV9WRVJTSU9OX0NPREUsCi0JCS5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfUkVBRFdSSVRFIHwKLQkJCQlWNEwyX0NBUF9TVFJFQU1JTkcsCi0JfTsKLQotCXN0cmxjcHkoY2FwLmNhcmQsIGNhbS0+djRsZGV2LT5uYW1lLCBzaXplb2YoY2FwLmNhcmQpKTsKLQlpZiAodXNiX21ha2VfcGF0aChjYW0tPnVzYmRldiwgY2FwLmJ1c19pbmZvLCBzaXplb2YoY2FwLmJ1c19pbmZvKSkgPCAwKQotCQlzdHJsY3B5KGNhcC5idXNfaW5mbywgZGV2X25hbWUoJmNhbS0+dXNiZGV2LT5kZXYpLAotCQkJc2l6ZW9mKGNhcC5idXNfaW5mbykpOwotCi0JaWYgKGNvcHlfdG9fdXNlcihhcmcsICZjYXAsIHNpemVvZihjYXApKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50Ci16YzAzMDFfdmlkaW9jX2VudW1pbnB1dChzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKLXsKLQlzdHJ1Y3QgdjRsMl9pbnB1dCBpOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZpLCBhcmcsIHNpemVvZihpKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKGkuaW5kZXgpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbWVtc2V0KCZpLCAwLCBzaXplb2YoaSkpOwotCXN0cmNweShpLm5hbWUsICJDYW1lcmEiKTsKLQlpLnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOwotCi0JaWYgKGNvcHlfdG9fdXNlcihhcmcsICZpLCBzaXplb2YoaSkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQKLXpjMDMwMV92aWRpb2NfZ19pbnB1dChzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKLXsKLQlpbnQgaW5kZXggPSAwOwotCi0JaWYgKGNvcHlfdG9fdXNlcihhcmcsICZpbmRleCwgc2l6ZW9mKGluZGV4KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludAotemMwMzAxX3ZpZGlvY19zX2lucHV0KHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0sIHZvaWQgX191c2VyICogYXJnKQotewotCWludCBpbmRleDsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigmaW5kZXgsIGFyZywgc2l6ZW9mKGluZGV4KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKGluZGV4ICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludAotemMwMzAxX3ZpZGlvY19xdWVyeV9jdHJsKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0sIHZvaWQgX191c2VyICogYXJnKQotewotCXN0cnVjdCB6YzAzMDFfc2Vuc29yKiBzID0gJmNhbS0+c2Vuc29yOwotCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBxYzsKLQl1OCBpOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZxYywgYXJnLCBzaXplb2YocWMpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzLT5xY3RybCk7IGkrKykKLQkJaWYgKHFjLmlkICYmIHFjLmlkID09IHMtPnFjdHJsW2ldLmlkKSB7Ci0JCQltZW1jcHkoJnFjLCAmKHMtPnFjdHJsW2ldKSwgc2l6ZW9mKHFjKSk7Ci0JCQlpZiAoY29weV90b191c2VyKGFyZywgJnFjLCBzaXplb2YocWMpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotCi1zdGF0aWMgaW50Ci16YzAzMDFfdmlkaW9jX2dfY3RybChzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKLXsKLQlzdHJ1Y3QgemMwMzAxX3NlbnNvciogcyA9ICZjYW0tPnNlbnNvcjsKLQlzdHJ1Y3QgdjRsMl9jb250cm9sIGN0cmw7Ci0JaW50IGVyciA9IDA7Ci0JdTggaTsKLQotCWlmICghcy0+Z2V0X2N0cmwgJiYgIXMtPnNldF9jdHJsKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigmY3RybCwgYXJnLCBzaXplb2YoY3RybCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmICghcy0+Z2V0X2N0cmwpIHsKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocy0+cWN0cmwpOyBpKyspCi0JCQlpZiAoY3RybC5pZCA9PSBzLT5xY3RybFtpXS5pZCkgewotCQkJCWN0cmwudmFsdWUgPSBzLT5fcWN0cmxbaV0uZGVmYXVsdF92YWx1ZTsKLQkJCQlnb3RvIGV4aXQ7Ci0JCQl9Ci0JCXJldHVybiAtRUlOVkFMOwotCX0gZWxzZQotCQllcnIgPSBzLT5nZXRfY3RybChjYW0sICZjdHJsKTsKLQotZXhpdDoKLQlpZiAoY29weV90b191c2VyKGFyZywgJmN0cmwsIHNpemVvZihjdHJsKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JcmV0dXJuIGVycjsKLX0KLQotCi1zdGF0aWMgaW50Ci16YzAzMDFfdmlkaW9jX3NfY3RybChzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKLXsKLQlzdHJ1Y3QgemMwMzAxX3NlbnNvciogcyA9ICZjYW0tPnNlbnNvcjsKLQlzdHJ1Y3QgdjRsMl9jb250cm9sIGN0cmw7Ci0JdTggaTsKLQlpbnQgZXJyID0gMDsKLQotCWlmICghcy0+c2V0X2N0cmwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZjdHJsLCBhcmcsIHNpemVvZihjdHJsKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocy0+cWN0cmwpOyBpKyspIHsKLQkJaWYgKGN0cmwuaWQgPT0gcy0+cWN0cmxbaV0uaWQpIHsKLQkJCWlmIChzLT5xY3RybFtpXS5mbGFncyAmIFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJaWYgKGN0cmwudmFsdWUgPCBzLT5xY3RybFtpXS5taW5pbXVtIHx8Ci0JCQkgICAgY3RybC52YWx1ZSA+IHMtPnFjdHJsW2ldLm1heGltdW0pCi0JCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCQljdHJsLnZhbHVlIC09IGN0cmwudmFsdWUgJSBzLT5xY3RybFtpXS5zdGVwOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKGkgPT0gQVJSQVlfU0laRShzLT5xY3RybCkpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmICgoZXJyID0gcy0+c2V0X2N0cmwoY2FtLCAmY3RybCkpKQotCQlyZXR1cm4gZXJyOwotCi0Jcy0+X3FjdHJsW2ldLmRlZmF1bHRfdmFsdWUgPSBjdHJsLnZhbHVlOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludAotemMwMzAxX3ZpZGlvY19jcm9wY2FwKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0sIHZvaWQgX191c2VyICogYXJnKQotewotCXN0cnVjdCB2NGwyX2Nyb3BjYXAqIGNjID0gJihjYW0tPnNlbnNvci5jcm9wY2FwKTsKLQotCWNjLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCWNjLT5waXhlbGFzcGVjdC5udW1lcmF0b3IgPSAxOwotCWNjLT5waXhlbGFzcGVjdC5kZW5vbWluYXRvciA9IDE7Ci0KLQlpZiAoY29weV90b191c2VyKGFyZywgY2MsIHNpemVvZigqY2MpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50Ci16YzAzMDFfdmlkaW9jX2dfY3JvcChzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKLXsKLQlzdHJ1Y3QgemMwMzAxX3NlbnNvciogcyA9ICZjYW0tPnNlbnNvcjsKLQlzdHJ1Y3QgdjRsMl9jcm9wIGNyb3AgPSB7Ci0JCS50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAotCX07Ci0KLQltZW1jcHkoJihjcm9wLmMpLCAmKHMtPl9yZWN0KSwgc2l6ZW9mKHN0cnVjdCB2NGwyX3JlY3QpKTsKLQotCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmY3JvcCwgc2l6ZW9mKGNyb3ApKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50Ci16YzAzMDFfdmlkaW9jX3NfY3JvcChzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKLXsKLQlzdHJ1Y3QgemMwMzAxX3NlbnNvciogcyA9ICZjYW0tPnNlbnNvcjsKLQlzdHJ1Y3QgdjRsMl9jcm9wIGNyb3A7Ci0Jc3RydWN0IHY0bDJfcmVjdCogcmVjdDsKLQlzdHJ1Y3QgdjRsMl9yZWN0KiBib3VuZHMgPSAmKHMtPmNyb3BjYXAuYm91bmRzKTsKLQljb25zdCBlbnVtIHpjMDMwMV9zdHJlYW1fc3RhdGUgc3RyZWFtID0gY2FtLT5zdHJlYW07Ci0JY29uc3QgdTMyIG5idWZmZXJzID0gY2FtLT5uYnVmZmVyczsKLQl1MzIgaTsKLQlpbnQgZXJyID0gMDsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigmY3JvcCwgYXJnLCBzaXplb2YoY3JvcCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCXJlY3QgPSAmKGNyb3AuYyk7Ci0KLQlpZiAoY3JvcC50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoY2FtLT5tb2R1bGVfcGFyYW0uZm9yY2VfbXVubWFwKQotCQlmb3IgKGkgPSAwOyBpIDwgY2FtLT5uYnVmZmVyczsgaSsrKQotCQkJaWYgKGNhbS0+ZnJhbWVbaV0udm1hX3VzZV9jb3VudCkgewotCQkJCURCRygzLCAiVklESU9DX1NfQ1JPUCBmYWlsZWQuICIKLQkJCQkgICAgICAgIlVubWFwIHRoZSBidWZmZXJzIGZpcnN0LiIpOwotCQkJCXJldHVybiAtRUJVU1k7Ci0JCQl9Ci0KLQlpZiAoIXMtPnNldF9jcm9wKSB7Ci0JCW1lbWNweShyZWN0LCAmKHMtPl9yZWN0KSwgc2l6ZW9mKCpyZWN0KSk7Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmY3JvcCwgc2l6ZW9mKGNyb3ApKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZWN0LT5sZWZ0ICY9IH43TDsKLQlyZWN0LT50b3AgJj0gfjdMOwotCWlmIChyZWN0LT53aWR0aCA8IDgpCi0JCXJlY3QtPndpZHRoID0gODsKLQlpZiAocmVjdC0+aGVpZ2h0IDwgOCkKLQkJcmVjdC0+aGVpZ2h0ID0gODsKLQlpZiAocmVjdC0+d2lkdGggPiBib3VuZHMtPndpZHRoKQotCQlyZWN0LT53aWR0aCA9IGJvdW5kcy0+d2lkdGg7Ci0JaWYgKHJlY3QtPmhlaWdodCA+IGJvdW5kcy0+aGVpZ2h0KQotCQlyZWN0LT5oZWlnaHQgPSBib3VuZHMtPmhlaWdodDsKLQlpZiAocmVjdC0+bGVmdCA8IGJvdW5kcy0+bGVmdCkKLQkJcmVjdC0+bGVmdCA9IGJvdW5kcy0+bGVmdDsKLQlpZiAocmVjdC0+dG9wIDwgYm91bmRzLT50b3ApCi0JCXJlY3QtPnRvcCA9IGJvdW5kcy0+dG9wOwotCWlmIChyZWN0LT5sZWZ0ICsgcmVjdC0+d2lkdGggPiBib3VuZHMtPmxlZnQgKyBib3VuZHMtPndpZHRoKQotCQlyZWN0LT5sZWZ0ID0gYm91bmRzLT5sZWZ0K2JvdW5kcy0+d2lkdGggLSByZWN0LT53aWR0aDsKLQlpZiAocmVjdC0+dG9wICsgcmVjdC0+aGVpZ2h0ID4gYm91bmRzLT50b3AgKyBib3VuZHMtPmhlaWdodCkKLQkJcmVjdC0+dG9wID0gYm91bmRzLT50b3ArYm91bmRzLT5oZWlnaHQgLSByZWN0LT5oZWlnaHQ7Ci0JcmVjdC0+d2lkdGggJj0gfjdMOwotCXJlY3QtPmhlaWdodCAmPSB+N0w7Ci0KLQlpZiAoY2FtLT5zdHJlYW0gPT0gU1RSRUFNX09OKQotCQlpZiAoKGVyciA9IHpjMDMwMV9zdHJlYW1faW50ZXJydXB0KGNhbSkpKQotCQkJcmV0dXJuIGVycjsKLQotCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmY3JvcCwgc2l6ZW9mKGNyb3ApKSkgewotCQljYW0tPnN0cmVhbSA9IHN0cmVhbTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JaWYgKGNhbS0+bW9kdWxlX3BhcmFtLmZvcmNlX211bm1hcCB8fCBjYW0tPmlvID09IElPX1JFQUQpCi0JCXpjMDMwMV9yZWxlYXNlX2J1ZmZlcnMoY2FtKTsKLQotCWlmIChzLT5zZXRfY3JvcCkKLQkJZXJyICs9IHMtPnNldF9jcm9wKGNhbSwgcmVjdCk7Ci0KLQlpZiAoZXJyKSB7IC8qIGF0b21pYywgbm8gcm9sbGJhY2sgaW4gaW9jdGwoKSAqLwotCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOwotCQlEQkcoMSwgIlZJRElPQ19TX0NST1AgZmFpbGVkIGJlY2F1c2Ugb2YgaGFyZHdhcmUgcHJvYmxlbXMuIFRvICIKLQkJICAgICAgICJ1c2UgdGhlIGNhbWVyYSwgY2xvc2UgYW5kIG9wZW4gJXMgYWdhaW4uIiwKLQkJICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoY2FtLT52NGxkZXYpKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0Jcy0+cGl4X2Zvcm1hdC53aWR0aCA9IHJlY3QtPndpZHRoOwotCXMtPnBpeF9mb3JtYXQuaGVpZ2h0ID0gcmVjdC0+aGVpZ2h0OwotCW1lbWNweSgmKHMtPl9yZWN0KSwgcmVjdCwgc2l6ZW9mKCpyZWN0KSk7Ci0KLQlpZiAoKGNhbS0+bW9kdWxlX3BhcmFtLmZvcmNlX211bm1hcCAgfHwgY2FtLT5pbyA9PSBJT19SRUFEKSAmJgotCSAgICBuYnVmZmVycyAhPSB6YzAzMDFfcmVxdWVzdF9idWZmZXJzKGNhbSwgbmJ1ZmZlcnMsIGNhbS0+aW8pKSB7Ci0JCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7Ci0JCURCRygxLCAiVklESU9DX1NfQ1JPUCBmYWlsZWQgYmVjYXVzZSBvZiBub3QgZW5vdWdoIG1lbW9yeS4gVG8gIgotCQkgICAgICAgInVzZSB0aGUgY2FtZXJhLCBjbG9zZSBhbmQgb3BlbiAlcyBhZ2Fpbi4iLAotCQkgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShjYW0tPnY0bGRldikpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlpZiAoY2FtLT5pbyA9PSBJT19SRUFEKQotCQl6YzAzMDFfZW1wdHlfZnJhbWVxdWV1ZXMoY2FtKTsKLQllbHNlIGlmIChjYW0tPm1vZHVsZV9wYXJhbS5mb3JjZV9tdW5tYXApCi0JCXpjMDMwMV9yZXF1ZXVlX291dHF1ZXVlKGNhbSk7Ci0KLQljYW0tPnN0cmVhbSA9IHN0cmVhbTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQKLXpjMDMwMV92aWRpb2NfZW51bV9mcmFtZXNpemVzKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0sIHZvaWQgX191c2VyICogYXJnKQotewotCXN0cnVjdCB2NGwyX2ZybXNpemVlbnVtIGZybXNpemU7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmZybXNpemUsIGFyZywgc2l6ZW9mKGZybXNpemUpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoZnJtc2l6ZS5pbmRleCAhPSAwICYmIGZybXNpemUuaW5kZXggIT0gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoZnJtc2l6ZS5waXhlbF9mb3JtYXQgIT0gVjRMMl9QSVhfRk1UX0pQRUcpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZnJtc2l6ZS50eXBlID0gVjRMMl9GUk1TSVpFX1RZUEVfRElTQ1JFVEU7Ci0KLQlpZiAoZnJtc2l6ZS5pbmRleCA9PSAxKSB7Ci0JCWZybXNpemUuZGlzY3JldGUud2lkdGggPSBjYW0tPnNlbnNvci5jcm9wY2FwLmRlZnJlY3Qud2lkdGg7Ci0JCWZybXNpemUuZGlzY3JldGUuaGVpZ2h0ID0gY2FtLT5zZW5zb3IuY3JvcGNhcC5kZWZyZWN0LmhlaWdodDsKLQl9Ci0JbWVtc2V0KCZmcm1zaXplLnJlc2VydmVkLCAwLCBzaXplb2YoZnJtc2l6ZS5yZXNlcnZlZCkpOwotCi0JaWYgKGNvcHlfdG9fdXNlcihhcmcsICZmcm1zaXplLCBzaXplb2YoZnJtc2l6ZSkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQKLXpjMDMwMV92aWRpb2NfZW51bV9mbXQoc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSwgdm9pZCBfX3VzZXIgKiBhcmcpCi17Ci0Jc3RydWN0IHY0bDJfZm10ZGVzYyBmbXRkOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZmbXRkLCBhcmcsIHNpemVvZihmbXRkKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKGZtdGQudHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGZtdGQuaW5kZXggPT0gMCkgewotCQlzdHJjcHkoZm10ZC5kZXNjcmlwdGlvbiwgIkpQRUciKTsKLQkJZm10ZC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9KUEVHOwotCQlmbXRkLmZsYWdzID0gVjRMMl9GTVRfRkxBR19DT01QUkVTU0VEOwotCX0gZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWZtdGQudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQltZW1zZXQoJmZtdGQucmVzZXJ2ZWQsIDAsIHNpemVvZihmbXRkLnJlc2VydmVkKSk7Ci0KLQlpZiAoY29weV90b191c2VyKGFyZywgJmZtdGQsIHNpemVvZihmbXRkKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludAotemMwMzAxX3ZpZGlvY19nX2ZtdChzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKLXsKLQlzdHJ1Y3QgdjRsMl9mb3JtYXQgZm9ybWF0OwotCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHBmbXQgPSAmKGNhbS0+c2Vuc29yLnBpeF9mb3JtYXQpOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZmb3JtYXQsIGFyZywgc2l6ZW9mKGZvcm1hdCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmIChmb3JtYXQudHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcGZtdC0+Ynl0ZXNwZXJsaW5lID0gMDsKLQlwZm10LT5zaXplaW1hZ2UgPSBwZm10LT5oZWlnaHQgKiAoKHBmbXQtPndpZHRoKnBmbXQtPnByaXYpLzgpOwotCXBmbXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOwotCW1lbWNweSgmKGZvcm1hdC5mbXQucGl4KSwgcGZtdCwgc2l6ZW9mKCpwZm10KSk7Ci0KLQlpZiAoY29weV90b191c2VyKGFyZywgJmZvcm1hdCwgc2l6ZW9mKGZvcm1hdCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQKLXpjMDMwMV92aWRpb2NfdHJ5X3NfZm10KHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0sIHVuc2lnbmVkIGludCBjbWQsCi0JCQl2b2lkIF9fdXNlciAqIGFyZykKLXsKLQlzdHJ1Y3QgemMwMzAxX3NlbnNvciogcyA9ICZjYW0tPnNlbnNvcjsKLQlzdHJ1Y3QgdjRsMl9mb3JtYXQgZm9ybWF0OwotCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHBpeDsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KiBwZm10ID0gJihzLT5waXhfZm9ybWF0KTsKLQlzdHJ1Y3QgdjRsMl9yZWN0KiBib3VuZHMgPSAmKHMtPmNyb3BjYXAuYm91bmRzKTsKLQlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3Q7Ci0JY29uc3QgZW51bSB6YzAzMDFfc3RyZWFtX3N0YXRlIHN0cmVhbSA9IGNhbS0+c3RyZWFtOwotCWNvbnN0IHUzMiBuYnVmZmVycyA9IGNhbS0+bmJ1ZmZlcnM7Ci0JdTMyIGk7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmZvcm1hdCwgYXJnLCBzaXplb2YoZm9ybWF0KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JcGl4ID0gJihmb3JtYXQuZm10LnBpeCk7Ci0KLQlpZiAoZm9ybWF0LnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW1lbWNweSgmcmVjdCwgJihzLT5fcmVjdCksIHNpemVvZihyZWN0KSk7Ci0KLQlpZiAoIXMtPnNldF9jcm9wKSB7Ci0JCXBpeC0+d2lkdGggPSByZWN0LndpZHRoOwotCQlwaXgtPmhlaWdodCA9IHJlY3QuaGVpZ2h0OwotCX0gZWxzZSB7Ci0JCXJlY3Qud2lkdGggPSBwaXgtPndpZHRoOwotCQlyZWN0LmhlaWdodCA9IHBpeC0+aGVpZ2h0OwotCX0KLQotCWlmIChyZWN0LndpZHRoIDwgOCkKLQkJcmVjdC53aWR0aCA9IDg7Ci0JaWYgKHJlY3QuaGVpZ2h0IDwgOCkKLQkJcmVjdC5oZWlnaHQgPSA4OwotCWlmIChyZWN0LndpZHRoID4gYm91bmRzLT5sZWZ0ICsgYm91bmRzLT53aWR0aCAtIHJlY3QubGVmdCkKLQkJcmVjdC53aWR0aCA9IGJvdW5kcy0+bGVmdCArIGJvdW5kcy0+d2lkdGggLSByZWN0LmxlZnQ7Ci0JaWYgKHJlY3QuaGVpZ2h0ID4gYm91bmRzLT50b3AgKyBib3VuZHMtPmhlaWdodCAtIHJlY3QudG9wKQotCQlyZWN0LmhlaWdodCA9IGJvdW5kcy0+dG9wICsgYm91bmRzLT5oZWlnaHQgLSByZWN0LnRvcDsKLQlyZWN0LndpZHRoICY9IH43TDsKLQlyZWN0LmhlaWdodCAmPSB+N0w7Ci0KLQlwaXgtPndpZHRoID0gcmVjdC53aWR0aDsKLQlwaXgtPmhlaWdodCA9IHJlY3QuaGVpZ2h0OwotCXBpeC0+cGl4ZWxmb3JtYXQgPSBwZm10LT5waXhlbGZvcm1hdDsKLQlwaXgtPnByaXYgPSBwZm10LT5wcml2OwotCXBpeC0+Y29sb3JzcGFjZSA9IHBmbXQtPmNvbG9yc3BhY2U7Ci0JcGl4LT5ieXRlc3BlcmxpbmUgPSAwOwotCXBpeC0+c2l6ZWltYWdlID0gcGl4LT5oZWlnaHQgKiAoKHBpeC0+d2lkdGggKiBwaXgtPnByaXYpIC8gOCk7Ci0JcGl4LT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKLQotCWlmIChjbWQgPT0gVklESU9DX1RSWV9GTVQpIHsKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZmb3JtYXQsIHNpemVvZihmb3JtYXQpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoY2FtLT5tb2R1bGVfcGFyYW0uZm9yY2VfbXVubWFwKQotCQlmb3IgKGkgPSAwOyBpIDwgY2FtLT5uYnVmZmVyczsgaSsrKQotCQkJaWYgKGNhbS0+ZnJhbWVbaV0udm1hX3VzZV9jb3VudCkgewotCQkJCURCRygzLCAiVklESU9DX1NfRk1UIGZhaWxlZC4gIgotCQkJCSAgICAgICAiVW5tYXAgdGhlIGJ1ZmZlcnMgZmlyc3QuIik7Ci0JCQkJcmV0dXJuIC1FQlVTWTsKLQkJCX0KLQotCWlmIChjYW0tPnN0cmVhbSA9PSBTVFJFQU1fT04pCi0JCWlmICgoZXJyID0gemMwMzAxX3N0cmVhbV9pbnRlcnJ1cHQoY2FtKSkpCi0JCQlyZXR1cm4gZXJyOwotCi0JaWYgKGNvcHlfdG9fdXNlcihhcmcsICZmb3JtYXQsIHNpemVvZihmb3JtYXQpKSkgewotCQljYW0tPnN0cmVhbSA9IHN0cmVhbTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JaWYgKGNhbS0+bW9kdWxlX3BhcmFtLmZvcmNlX211bm1hcCB8fCBjYW0tPmlvID09IElPX1JFQUQpCi0JCXpjMDMwMV9yZWxlYXNlX2J1ZmZlcnMoY2FtKTsKLQotCWlmIChzLT5zZXRfY3JvcCkKLQkJZXJyICs9IHMtPnNldF9jcm9wKGNhbSwgJnJlY3QpOwotCi0JaWYgKGVycikgeyAvKiBhdG9taWMsIG5vIHJvbGxiYWNrIGluIGlvY3RsKCkgKi8KLQkJY2FtLT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKLQkJREJHKDEsICJWSURJT0NfU19GTVQgZmFpbGVkIGJlY2F1c2Ugb2YgaGFyZHdhcmUgcHJvYmxlbXMuIFRvICIKLQkJICAgICAgICJ1c2UgdGhlIGNhbWVyYSwgY2xvc2UgYW5kIG9wZW4gJXMgYWdhaW4uIiwKLQkJICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoY2FtLT52NGxkZXYpKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JbWVtY3B5KHBmbXQsIHBpeCwgc2l6ZW9mKCpwaXgpKTsKLQltZW1jcHkoJihzLT5fcmVjdCksICZyZWN0LCBzaXplb2YocmVjdCkpOwotCi0JaWYgKChjYW0tPm1vZHVsZV9wYXJhbS5mb3JjZV9tdW5tYXAgIHx8IGNhbS0+aW8gPT0gSU9fUkVBRCkgJiYKLQkgICAgbmJ1ZmZlcnMgIT0gemMwMzAxX3JlcXVlc3RfYnVmZmVycyhjYW0sIG5idWZmZXJzLCBjYW0tPmlvKSkgewotCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOwotCQlEQkcoMSwgIlZJRElPQ19TX0ZNVCBmYWlsZWQgYmVjYXVzZSBvZiBub3QgZW5vdWdoIG1lbW9yeS4gVG8gIgotCQkgICAgICAgInVzZSB0aGUgY2FtZXJhLCBjbG9zZSBhbmQgb3BlbiAlcyBhZ2Fpbi4iLAotCQkgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShjYW0tPnY0bGRldikpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlpZiAoY2FtLT5pbyA9PSBJT19SRUFEKQotCQl6YzAzMDFfZW1wdHlfZnJhbWVxdWV1ZXMoY2FtKTsKLQllbHNlIGlmIChjYW0tPm1vZHVsZV9wYXJhbS5mb3JjZV9tdW5tYXApCi0JCXpjMDMwMV9yZXF1ZXVlX291dHF1ZXVlKGNhbSk7Ci0KLQljYW0tPnN0cmVhbSA9IHN0cmVhbTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQKLXpjMDMwMV92aWRpb2NfZ19qcGVnY29tcChzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKLXsKLQlpZiAoY29weV90b191c2VyKGFyZywgJmNhbS0+Y29tcHJlc3Npb24sIHNpemVvZihjYW0tPmNvbXByZXNzaW9uKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludAotemMwMzAxX3ZpZGlvY19zX2pwZWdjb21wKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0sIHZvaWQgX191c2VyICogYXJnKQotewotCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiBqYzsKLQljb25zdCBlbnVtIHpjMDMwMV9zdHJlYW1fc3RhdGUgc3RyZWFtID0gY2FtLT5zdHJlYW07Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmpjLCBhcmcsIHNpemVvZihqYykpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmIChqYy5xdWFsaXR5ICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGNhbS0+c3RyZWFtID09IFNUUkVBTV9PTikKLQkJaWYgKChlcnIgPSB6YzAzMDFfc3RyZWFtX2ludGVycnVwdChjYW0pKSkKLQkJCXJldHVybiBlcnI7Ci0KLQllcnIgKz0gemMwMzAxX3NldF9jb21wcmVzc2lvbihjYW0sICZqYyk7Ci0JaWYgKGVycikgeyAvKiBhdG9taWMsIG5vIHJvbGxiYWNrIGluIGlvY3RsKCkgKi8KLQkJY2FtLT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKLQkJREJHKDEsICJWSURJT0NfU19KUEVHQ09NUCBmYWlsZWQgYmVjYXVzZSBvZiBoYXJkd2FyZSAiCi0JCSAgICAgICAicHJvYmxlbXMuIFRvIHVzZSB0aGUgY2FtZXJhLCBjbG9zZSBhbmQgb3BlbiAlcyBhZ2Fpbi4iLAotCQkgICAgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShjYW0tPnY0bGRldikpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQljYW0tPmNvbXByZXNzaW9uLnF1YWxpdHkgPSBqYy5xdWFsaXR5OwotCi0JY2FtLT5zdHJlYW0gPSBzdHJlYW07Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50Ci16YzAzMDFfdmlkaW9jX3JlcWJ1ZnMoc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSwgdm9pZCBfX3VzZXIgKiBhcmcpCi17Ci0Jc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgcmI7Ci0JdTMyIGk7Ci0JaW50IGVycjsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigmcmIsIGFyZywgc2l6ZW9mKHJiKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKHJiLnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8Ci0JICAgIHJiLm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChjYW0tPmlvID09IElPX1JFQUQpIHsKLQkJREJHKDMsICJDbG9zZSBhbmQgb3BlbiB0aGUgZGV2aWNlIGFnYWluIHRvIGNob29zZSB0aGUgbW1hcCAiCi0JCSAgICAgICAiSS9PIG1ldGhvZCIpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBjYW0tPm5idWZmZXJzOyBpKyspCi0JCWlmIChjYW0tPmZyYW1lW2ldLnZtYV91c2VfY291bnQpIHsKLQkJCURCRygzLCAiVklESU9DX1JFUUJVRlMgZmFpbGVkLiAiCi0JCQkgICAgICAgIlByZXZpb3VzIGJ1ZmZlcnMgYXJlIHN0aWxsIG1hcHBlZC4iKTsKLQkJCXJldHVybiAtRUJVU1k7Ci0JCX0KLQotCWlmIChjYW0tPnN0cmVhbSA9PSBTVFJFQU1fT04pCi0JCWlmICgoZXJyID0gemMwMzAxX3N0cmVhbV9pbnRlcnJ1cHQoY2FtKSkpCi0JCQlyZXR1cm4gZXJyOwotCi0JemMwMzAxX2VtcHR5X2ZyYW1lcXVldWVzKGNhbSk7Ci0KLQl6YzAzMDFfcmVsZWFzZV9idWZmZXJzKGNhbSk7Ci0JaWYgKHJiLmNvdW50KQotCQlyYi5jb3VudCA9IHpjMDMwMV9yZXF1ZXN0X2J1ZmZlcnMoY2FtLCByYi5jb3VudCwgSU9fTU1BUCk7Ci0KLQlpZiAoY29weV90b191c2VyKGFyZywgJnJiLCBzaXplb2YocmIpKSkgewotCQl6YzAzMDFfcmVsZWFzZV9idWZmZXJzKGNhbSk7Ci0JCWNhbS0+aW8gPSBJT19OT05FOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQljYW0tPmlvID0gcmIuY291bnQgPyBJT19NTUFQIDogSU9fTk9ORTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQKLXpjMDMwMV92aWRpb2NfcXVlcnlidWYoc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSwgdm9pZCBfX3VzZXIgKiBhcmcpCi17Ci0Jc3RydWN0IHY0bDJfYnVmZmVyIGI7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmIsIGFyZywgc2l6ZW9mKGIpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoYi50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAotCSAgICBiLmluZGV4ID49IGNhbS0+bmJ1ZmZlcnMgfHwgY2FtLT5pbyAhPSBJT19NTUFQKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW1lbWNweSgmYiwgJmNhbS0+ZnJhbWVbYi5pbmRleF0uYnVmLCBzaXplb2YoYikpOwotCi0JaWYgKGNhbS0+ZnJhbWVbYi5pbmRleF0udm1hX3VzZV9jb3VudCkKLQkJYi5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX01BUFBFRDsKLQotCWlmIChjYW0tPmZyYW1lW2IuaW5kZXhdLnN0YXRlID09IEZfRE9ORSkKLQkJYi5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX0RPTkU7Ci0JZWxzZSBpZiAoY2FtLT5mcmFtZVtiLmluZGV4XS5zdGF0ZSAhPSBGX1VOVVNFRCkKLQkJYi5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX1FVRVVFRDsKLQotCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYiwgc2l6ZW9mKGIpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50Ci16YzAzMDFfdmlkaW9jX3FidWYoc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSwgdm9pZCBfX3VzZXIgKiBhcmcpCi17Ci0Jc3RydWN0IHY0bDJfYnVmZmVyIGI7Ci0JdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZiLCBhcmcsIHNpemVvZihiKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKGIudHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKLQkgICAgYi5pbmRleCA+PSBjYW0tPm5idWZmZXJzIHx8IGNhbS0+aW8gIT0gSU9fTU1BUCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoY2FtLT5mcmFtZVtiLmluZGV4XS5zdGF0ZSAhPSBGX1VOVVNFRCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQljYW0tPmZyYW1lW2IuaW5kZXhdLnN0YXRlID0gRl9RVUVVRUQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKLQlsaXN0X2FkZF90YWlsKCZjYW0tPmZyYW1lW2IuaW5kZXhdLmZyYW1lLCAmY2FtLT5pbnF1ZXVlKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOwotCi0JUERCR0coIkZyYW1lICMlbHUgcXVldWVkIiwgKHVuc2lnbmVkIGxvbmcpYi5pbmRleCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50Ci16YzAzMDFfdmlkaW9jX2RxYnVmKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0sIHN0cnVjdCBmaWxlKiBmaWxwLAotCQkgICAgdm9pZCBfX3VzZXIgKiBhcmcpCi17Ci0Jc3RydWN0IHY0bDJfYnVmZmVyIGI7Ci0Jc3RydWN0IHpjMDMwMV9mcmFtZV90ICpmOwotCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKLQlsb25nIHRpbWVvdXQ7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmIsIGFyZywgc2l6ZW9mKGIpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoYi50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fCBjYW0tPmlvIT0gSU9fTU1BUCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAobGlzdF9lbXB0eSgmY2FtLT5vdXRxdWV1ZSkpIHsKLQkJaWYgKGNhbS0+c3RyZWFtID09IFNUUkVBTV9PRkYpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQotCQkJcmV0dXJuIC1FQUdBSU47Ci0JCXRpbWVvdXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dAotCQkJICAoIGNhbS0+d2FpdF9mcmFtZSwKLQkJCSAgICAoIWxpc3RfZW1wdHkoJmNhbS0+b3V0cXVldWUpKSB8fAotCQkJICAgIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgfHwKLQkJCSAgICAoY2FtLT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSwKLQkJCSAgICBjYW0tPm1vZHVsZV9wYXJhbS5mcmFtZV90aW1lb3V0ICoKLQkJCSAgICAxMDAwICogbXNlY3NfdG9famlmZmllcygxKSApOwotCQlpZiAodGltZW91dCA8IDApCi0JCQlyZXR1cm4gdGltZW91dDsKLQkJaWYgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCWlmICghdGltZW91dCB8fCAoY2FtLT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSkKLQkJCXJldHVybiAtRUlPOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOwotCWYgPSBsaXN0X2VudHJ5KGNhbS0+b3V0cXVldWUubmV4dCwgc3RydWN0IHpjMDMwMV9mcmFtZV90LCBmcmFtZSk7Ci0JbGlzdF9kZWwoY2FtLT5vdXRxdWV1ZS5uZXh0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOwotCi0JZi0+c3RhdGUgPSBGX1VOVVNFRDsKLQotCW1lbWNweSgmYiwgJmYtPmJ1Ziwgc2l6ZW9mKGIpKTsKLQlpZiAoZi0+dm1hX3VzZV9jb3VudCkKLQkJYi5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX01BUFBFRDsKLQotCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYiwgc2l6ZW9mKGIpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlQREJHRygiRnJhbWUgIyVsdSBkZXF1ZXVlZCIsICh1bnNpZ25lZCBsb25nKWYtPmJ1Zi5pbmRleCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50Ci16YzAzMDFfdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0sIHZvaWQgX191c2VyICogYXJnKQotewotCWludCB0eXBlOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZ0eXBlLCBhcmcsIHNpemVvZih0eXBlKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKHR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8IGNhbS0+aW8gIT0gSU9fTU1BUCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQljYW0tPnN0cmVhbSA9IFNUUkVBTV9PTjsKLQotCURCRygzLCAiU3RyZWFtIG9uIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50Ci16YzAzMDFfdmlkaW9jX3N0cmVhbW9mZihzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKLXsKLQlpbnQgdHlwZSwgZXJyOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZ0eXBlLCBhcmcsIHNpemVvZih0eXBlKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKHR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8IGNhbS0+aW8gIT0gSU9fTU1BUCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoY2FtLT5zdHJlYW0gPT0gU1RSRUFNX09OKQotCQlpZiAoKGVyciA9IHpjMDMwMV9zdHJlYW1faW50ZXJydXB0KGNhbSkpKQotCQkJcmV0dXJuIGVycjsKLQotCXpjMDMwMV9lbXB0eV9mcmFtZXF1ZXVlcyhjYW0pOwotCi0JREJHKDMsICJTdHJlYW0gb2ZmIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50Ci16YzAzMDFfdmlkaW9jX2dfcGFybShzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKLXsKLQlzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtIHNwOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZzcCwgYXJnLCBzaXplb2Yoc3ApKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoc3AudHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3AucGFybS5jYXB0dXJlLmV4dGVuZGVkbW9kZSA9IDA7Ci0Jc3AucGFybS5jYXB0dXJlLnJlYWRidWZmZXJzID0gY2FtLT5ucmVhZGJ1ZmZlcnM7Ci0KLQlpZiAoY29weV90b191c2VyKGFyZywgJnNwLCBzaXplb2Yoc3ApKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50Ci16YzAzMDFfdmlkaW9jX3NfcGFybShzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKLXsKLQlzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtIHNwOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZzcCwgYXJnLCBzaXplb2Yoc3ApKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoc3AudHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3AucGFybS5jYXB0dXJlLmV4dGVuZGVkbW9kZSA9IDA7Ci0KLQlpZiAoc3AucGFybS5jYXB0dXJlLnJlYWRidWZmZXJzID09IDApCi0JCXNwLnBhcm0uY2FwdHVyZS5yZWFkYnVmZmVycyA9IGNhbS0+bnJlYWRidWZmZXJzOwotCi0JaWYgKHNwLnBhcm0uY2FwdHVyZS5yZWFkYnVmZmVycyA+IFpDMDMwMV9NQVhfRlJBTUVTKQotCQlzcC5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnMgPSBaQzAzMDFfTUFYX0ZSQU1FUzsKLQotCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmc3AsIHNpemVvZihzcCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWNhbS0+bnJlYWRidWZmZXJzID0gc3AucGFybS5jYXB0dXJlLnJlYWRidWZmZXJzOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGxvbmcgemMwMzAxX2lvY3RsX3Y0bDIoc3RydWN0IGZpbGUgKmZpbHAsCi0JCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpCi17Ci0Jc3RydWN0IHpjMDMwMV9kZXZpY2UgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlscCk7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCi0JY2FzZSBWSURJT0NfUVVFUllDQVA6Ci0JCXJldHVybiB6YzAzMDFfdmlkaW9jX3F1ZXJ5Y2FwKGNhbSwgYXJnKTsKLQotCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKLQkJcmV0dXJuIHpjMDMwMV92aWRpb2NfZW51bWlucHV0KGNhbSwgYXJnKTsKLQotCWNhc2UgVklESU9DX0dfSU5QVVQ6Ci0JCXJldHVybiB6YzAzMDFfdmlkaW9jX2dfaW5wdXQoY2FtLCBhcmcpOwotCi0JY2FzZSBWSURJT0NfU19JTlBVVDoKLQkJcmV0dXJuIHpjMDMwMV92aWRpb2Nfc19pbnB1dChjYW0sIGFyZyk7Ci0KLQljYXNlIFZJRElPQ19RVUVSWUNUUkw6Ci0JCXJldHVybiB6YzAzMDFfdmlkaW9jX3F1ZXJ5X2N0cmwoY2FtLCBhcmcpOwotCi0JY2FzZSBWSURJT0NfR19DVFJMOgotCQlyZXR1cm4gemMwMzAxX3ZpZGlvY19nX2N0cmwoY2FtLCBhcmcpOwotCi0JY2FzZSBWSURJT0NfU19DVFJMOgotCQlyZXR1cm4gemMwMzAxX3ZpZGlvY19zX2N0cmwoY2FtLCBhcmcpOwotCi0JY2FzZSBWSURJT0NfQ1JPUENBUDoKLQkJcmV0dXJuIHpjMDMwMV92aWRpb2NfY3JvcGNhcChjYW0sIGFyZyk7Ci0KLQljYXNlIFZJRElPQ19HX0NST1A6Ci0JCXJldHVybiB6YzAzMDFfdmlkaW9jX2dfY3JvcChjYW0sIGFyZyk7Ci0KLQljYXNlIFZJRElPQ19TX0NST1A6Ci0JCXJldHVybiB6YzAzMDFfdmlkaW9jX3NfY3JvcChjYW0sIGFyZyk7Ci0KLQljYXNlIFZJRElPQ19FTlVNX0ZNVDoKLQkJcmV0dXJuIHpjMDMwMV92aWRpb2NfZW51bV9mbXQoY2FtLCBhcmcpOwotCi0JY2FzZSBWSURJT0NfR19GTVQ6Ci0JCXJldHVybiB6YzAzMDFfdmlkaW9jX2dfZm10KGNhbSwgYXJnKTsKLQotCWNhc2UgVklESU9DX1RSWV9GTVQ6Ci0JY2FzZSBWSURJT0NfU19GTVQ6Ci0JCXJldHVybiB6YzAzMDFfdmlkaW9jX3RyeV9zX2ZtdChjYW0sIGNtZCwgYXJnKTsKLQotCWNhc2UgVklESU9DX0VOVU1fRlJBTUVTSVpFUzoKLQkJcmV0dXJuIHpjMDMwMV92aWRpb2NfZW51bV9mcmFtZXNpemVzKGNhbSwgYXJnKTsKLQotCWNhc2UgVklESU9DX0dfSlBFR0NPTVA6Ci0JCXJldHVybiB6YzAzMDFfdmlkaW9jX2dfanBlZ2NvbXAoY2FtLCBhcmcpOwotCi0JY2FzZSBWSURJT0NfU19KUEVHQ09NUDoKLQkJcmV0dXJuIHpjMDMwMV92aWRpb2Nfc19qcGVnY29tcChjYW0sIGFyZyk7Ci0KLQljYXNlIFZJRElPQ19SRVFCVUZTOgotCQlyZXR1cm4gemMwMzAxX3ZpZGlvY19yZXFidWZzKGNhbSwgYXJnKTsKLQotCWNhc2UgVklESU9DX1FVRVJZQlVGOgotCQlyZXR1cm4gemMwMzAxX3ZpZGlvY19xdWVyeWJ1ZihjYW0sIGFyZyk7Ci0KLQljYXNlIFZJRElPQ19RQlVGOgotCQlyZXR1cm4gemMwMzAxX3ZpZGlvY19xYnVmKGNhbSwgYXJnKTsKLQotCWNhc2UgVklESU9DX0RRQlVGOgotCQlyZXR1cm4gemMwMzAxX3ZpZGlvY19kcWJ1ZihjYW0sIGZpbHAsIGFyZyk7Ci0KLQljYXNlIFZJRElPQ19TVFJFQU1PTjoKLQkJcmV0dXJuIHpjMDMwMV92aWRpb2Nfc3RyZWFtb24oY2FtLCBhcmcpOwotCi0JY2FzZSBWSURJT0NfU1RSRUFNT0ZGOgotCQlyZXR1cm4gemMwMzAxX3ZpZGlvY19zdHJlYW1vZmYoY2FtLCBhcmcpOwotCi0JY2FzZSBWSURJT0NfR19QQVJNOgotCQlyZXR1cm4gemMwMzAxX3ZpZGlvY19nX3Bhcm0oY2FtLCBhcmcpOwotCi0JY2FzZSBWSURJT0NfU19QQVJNOgotCQlyZXR1cm4gemMwMzAxX3ZpZGlvY19zX3Bhcm0oY2FtLCBhcmcpOwotCi0JY2FzZSBWSURJT0NfR19TVEQ6Ci0JY2FzZSBWSURJT0NfU19TVEQ6Ci0JY2FzZSBWSURJT0NfUVVFUllTVEQ6Ci0JY2FzZSBWSURJT0NfRU5VTVNURDoKLQljYXNlIFZJRElPQ19RVUVSWU1FTlU6Ci0JY2FzZSBWSURJT0NfRU5VTV9GUkFNRUlOVEVSVkFMUzoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQotCX0KLX0KLQotCi1zdGF0aWMgbG9uZyB6YzAzMDFfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCi0JCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgemMwMzAxX2RldmljZSAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxwKTsKLQlpbnQgZXJyID0gMDsKLQotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhbS0+ZmlsZW9wX211dGV4KSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQotCWlmIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgewotCQlEQkcoMSwgIkRldmljZSBub3QgcHJlc2VudCIpOwotCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWYgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkgewotCQlEQkcoMSwgIlRoZSBjYW1lcmEgaXMgbWlzY29uZmlndXJlZC4gQ2xvc2UgYW5kIG9wZW4gaXQgIgotCQkgICAgICAgImFnYWluLiIpOwotCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JVjRMREJHKDMsICJ6YzAzMDEiLCBjbWQpOwotCi0JZXJyID0gemMwMzAxX2lvY3RsX3Y0bDIoZmlscCwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOwotCi0JbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgemMwMzAxX2ZvcHMgPSB7Ci0JLm93bmVyID0gICBUSElTX01PRFVMRSwKLQkub3BlbiA9ICAgIHpjMDMwMV9vcGVuLAotCS5yZWxlYXNlID0gemMwMzAxX3JlbGVhc2UsCi0JLmlvY3RsID0gICB6YzAzMDFfaW9jdGwsCi0JLnJlYWQgPSAgICB6YzAzMDFfcmVhZCwKLQkucG9sbCA9ICAgIHpjMDMwMV9wb2xsLAotCS5tbWFwID0gICAgemMwMzAxX21tYXAsCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbnQKLXpjMDMwMV91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UqIGludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkKiBpZCkKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7Ci0Jc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbTsKLQlzdGF0aWMgdW5zaWduZWQgaW50IGRldl9ucjsKLQl1bnNpZ25lZCBpbnQgaTsKLQlpbnQgZXJyID0gMDsKLQotCWlmICghKGNhbSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB6YzAzMDFfZGV2aWNlKSwgR0ZQX0tFUk5FTCkpKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWNhbS0+dXNiZGV2ID0gdWRldjsKLQotCWlmICghKGNhbS0+Y29udHJvbF9idWZmZXIgPSBremFsbG9jKDQsIEdGUF9LRVJORUwpKSkgewotCQlEQkcoMSwgImttYWxsb2MoKSBmYWlsZWQiKTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBmYWlsOwotCX0KLQotCWlmICghKGNhbS0+djRsZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCkpKSB7Ci0JCURCRygxLCAidmlkZW9fZGV2aWNlX2FsbG9jKCkgZmFpbGVkIik7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQlEQkcoMiwgIlpDMDMwMVtQXSBJbWFnZSBQcm9jZXNzb3IgYW5kIENvbnRyb2wgQ2hpcCBkZXRlY3RlZCAiCi0JICAgICAgICIodmlkL3BpZCAweCUwNFg6MHglMDRYKSIsaWQtPmlkVmVuZG9yLCBpZC0+aWRQcm9kdWN0KTsKLQotCWZvciAgKGkgPSAwOyB6YzAzMDFfc2Vuc29yX3RhYmxlW2ldOyBpKyspIHsKLQkJZXJyID0gemMwMzAxX3NlbnNvcl90YWJsZVtpXShjYW0pOwotCQlpZiAoIWVycikKLQkJCWJyZWFrOwotCX0KLQotCWlmICghZXJyKQotCQlEQkcoMiwgIiVzIGltYWdlIHNlbnNvciBkZXRlY3RlZCIsIGNhbS0+c2Vuc29yLm5hbWUpOwotCWVsc2UgewotCQlEQkcoMSwgIk5vIHN1cHBvcnRlZCBpbWFnZSBzZW5zb3IgZGV0ZWN0ZWQiKTsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBmYWlsOwotCX0KLQotCWlmICh6YzAzMDFfaW5pdChjYW0pKSB7Ci0JCURCRygxLCAiSW5pdGlhbGl6YXRpb24gZmFpbGVkLiBJIHdpbGwgcmV0cnkgb24gb3BlbigpLiIpOwotCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOwotCX0KLQotCXN0cmNweShjYW0tPnY0bGRldi0+bmFtZSwgIlpDMDMwMVtQXSBQQyBDYW1lcmEiKTsKLQljYW0tPnY0bGRldi0+Zm9wcyA9ICZ6YzAzMDFfZm9wczsKLQljYW0tPnY0bGRldi0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOwotCWNhbS0+djRsZGV2LT5wYXJlbnQgPSAmdWRldi0+ZGV2OwotCXZpZGVvX3NldF9kcnZkYXRhKGNhbS0+djRsZGV2LCBjYW0pOwotCi0JaW5pdF9jb21wbGV0aW9uKCZjYW0tPnByb2JlKTsKLQotCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShjYW0tPnY0bGRldiwgVkZMX1RZUEVfR1JBQkJFUiwKLQkJCQkgICAgdmlkZW9fbnJbZGV2X25yXSk7Ci0JaWYgKGVycikgewotCQlEQkcoMSwgIlY0TDIgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsZWQiKTsKLQkJaWYgKGVyciA9PSAtRU5GSUxFICYmIHZpZGVvX25yW2Rldl9ucl0gPT0gLTEpCi0JCQlEQkcoMSwgIkZyZWUgL2Rldi92aWRlb1ggbm9kZSBub3QgZm91bmQiKTsKLQkJdmlkZW9fbnJbZGV2X25yXSA9IC0xOwotCQlkZXZfbnIgPSAoZGV2X25yIDwgWkMwMzAxX01BWF9ERVZJQ0VTLTEpID8gZGV2X25yKzEgOiAwOwotCQljb21wbGV0ZV9hbGwoJmNhbS0+cHJvYmUpOwotCQlnb3RvIGZhaWw7Ci0JfQotCi0JREJHKDIsICJWNEwyIGRldmljZSByZWdpc3RlcmVkIGFzICVzIiwKLQkgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShjYW0tPnY0bGRldikpOwotCi0JY2FtLT5tb2R1bGVfcGFyYW0uZm9yY2VfbXVubWFwID0gZm9yY2VfbXVubWFwW2Rldl9ucl07Ci0JY2FtLT5tb2R1bGVfcGFyYW0uZnJhbWVfdGltZW91dCA9IGZyYW1lX3RpbWVvdXRbZGV2X25yXTsKLQotCWRldl9uciA9IChkZXZfbnIgPCBaQzAzMDFfTUFYX0RFVklDRVMtMSkgPyBkZXZfbnIrMSA6IDA7Ci0KLQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGNhbSk7Ci0Ja3JlZl9pbml0KCZjYW0tPmtyZWYpOwotCXVzYl9nZXRfZGV2KGNhbS0+dXNiZGV2KTsKLQotCWNvbXBsZXRlX2FsbCgmY2FtLT5wcm9iZSk7Ci0KLQlyZXR1cm4gMDsKLQotZmFpbDoKLQlpZiAoY2FtKSB7Ci0JCWtmcmVlKGNhbS0+Y29udHJvbF9idWZmZXIpOwotCQlpZiAoY2FtLT52NGxkZXYpCi0JCQl2aWRlb19kZXZpY2VfcmVsZWFzZShjYW0tPnY0bGRldik7Ci0JCWtmcmVlKGNhbSk7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLQotc3RhdGljIHZvaWQgemMwMzAxX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlKiBpbnRmKQotewotCXN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW07Ci0KLQlkb3duX3dyaXRlKCZ6YzAzMDFfZGV2X2xvY2spOwotCi0JY2FtID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLQotCURCRygyLCAiRGlzY29ubmVjdGluZyAlcy4uLiIsIGNhbS0+djRsZGV2LT5uYW1lKTsKLQotCWlmIChjYW0tPnVzZXJzKSB7Ci0JCURCRygyLCAiRGV2aWNlICVzIGlzIG9wZW4hIERlcmVnaXN0cmF0aW9uIGFuZCAiCi0JCSAgICAgICAibWVtb3J5IGRlYWxsb2NhdGlvbiBhcmUgZGVmZXJyZWQuIiwKLQkJICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoY2FtLT52NGxkZXYpKTsKLQkJY2FtLT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKLQkJemMwMzAxX3N0b3BfdHJhbnNmZXIoY2FtKTsKLQkJY2FtLT5zdGF0ZSB8PSBERVZfRElTQ09OTkVDVEVEOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNhbS0+d2FpdF9mcmFtZSk7Ci0JCXdha2VfdXAoJmNhbS0+d2FpdF9zdHJlYW0pOwotCX0gZWxzZQotCQljYW0tPnN0YXRlIHw9IERFVl9ESVNDT05ORUNURUQ7Ci0KLQl3YWtlX3VwX2ludGVycnVwdGlibGVfYWxsKCZjYW0tPndhaXRfb3Blbik7Ci0KLQlrcmVmX3B1dCgmY2FtLT5rcmVmLCB6YzAzMDFfcmVsZWFzZV9yZXNvdXJjZXMpOwotCi0JdXBfd3JpdGUoJnpjMDMwMV9kZXZfbG9jayk7Ci19Ci0KLQotc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHpjMDMwMV91c2JfZHJpdmVyID0gewotCS5uYW1lID0gICAgICAgInpjMDMwMSIsCi0JLmlkX3RhYmxlID0gICB6YzAzMDFfaWRfdGFibGUsCi0JLnByb2JlID0gICAgICB6YzAzMDFfdXNiX3Byb2JlLAotCS5kaXNjb25uZWN0ID0gemMwMzAxX3VzYl9kaXNjb25uZWN0LAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgaW50IF9faW5pdCB6YzAzMDFfbW9kdWxlX2luaXQodm9pZCkKLXsKLQlpbnQgZXJyID0gMDsKLQotCUtEQkcoMiwgWkMwMzAxX01PRFVMRV9OQU1FICIgdiIgWkMwMzAxX01PRFVMRV9WRVJTSU9OKTsKLQlLREJHKDMsIFpDMDMwMV9NT0RVTEVfQVVUSE9SKTsKLQotCWlmICgoZXJyID0gdXNiX3JlZ2lzdGVyKCZ6YzAzMDFfdXNiX2RyaXZlcikpKQotCQlLREJHKDEsICJ1c2JfcmVnaXN0ZXIoKSBmYWlsZWQiKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLQotc3RhdGljIHZvaWQgX19leGl0IHpjMDMwMV9tb2R1bGVfZXhpdCh2b2lkKQotewotCXVzYl9kZXJlZ2lzdGVyKCZ6YzAzMDFfdXNiX2RyaXZlcik7Ci19Ci0KLQotbW9kdWxlX2luaXQoemMwMzAxX21vZHVsZV9pbml0KTsKLW1vZHVsZV9leGl0KHpjMDMwMV9tb2R1bGVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfcGFzMjAyYmNiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfcGFzMjAyYmNiLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0YjBkZmIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX3BhczIwMmJjYi5jCisrKyAvZGV2L251bGwKQEAgLTEsMzYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFBsdWctaW4gZm9yIFBBUzIwMkJDQiBpbWFnZSBzZW5zb3IgY29ubmVjdGVkIHRvIHRoZSBaQzAzMDEgSW1hZ2UgICAgICAgICoKLSAqIFByb2Nlc3NvciBhbmQgQ29udHJvbCBDaGlwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA3IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEluaXRpYWxpemF0aW9uIHZhbHVlcyBvZiB0aGUgWkMwMzAxW1BdIGhhdmUgYmVlbiB0YWtlbiBmcm9tIHRoZSBTUENBNVhYICoKLSAqIGRyaXZlciBtYWludGFpbmVkIGJ5IE1pY2hlbCBYaGFhcmQgPG14aGFhcmRAbWFnaWMuZnI+ICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICoKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gICBOT1RFOiBTZW5zb3IgY29udHJvbHMgYXJlIGRpc2FibGVkIGZvciBub3csIGJlY291c2UgY2hhbmdpbmcgdGhlbSB3aGlsZQotCSBzdHJlYW1pbmcgc29tZXRpbWVzIHJlc3VsdHMgaW4gb3V0LW9mLXN5bmMgdmlkZW8gZnJhbWVzLiBXZSdsbCB1c2UKLQkgdGhlIGRlZmF1bHQgaW5pdGlhbGl6YXRpb24sIHVudGlsIHdlIGtub3cgaG93IHRvIHN0b3AgYW5kIHN0YXJ0IHZpZGVvCi0JIGluIHRoZSBjaGlwLiBIb3dldmVyLCB0aGUgaW1hZ2UgcXVhbGl0eSBzdGlsbCBsb29rcyBnb29kIHVuZGVyIHZhcmlvdXMKLQkgbGlnaHQgY29uZGl0aW9ucy4KLSovCi0KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgInpjMDMwMV9zZW5zb3IuaCIKLQotCi1zdGF0aWMgc3RydWN0IHpjMDMwMV9zZW5zb3IgcGFzMjAyYmNiOwotCi0KLXN0YXRpYyBpbnQgcGFzMjAyYmNiX2luaXQoc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSkKLXsKLQlpbnQgZXJyID0gMDsKLQotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDAyLCAweDAwKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDAwMywgMHgwMik7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwMDQsIDB4ODApOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDA1LCAweDAxKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDAwNiwgMHhFMCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwOTgsIDB4MDApOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDlBLCAweDAzKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDExQSwgMHgwMCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMUMsIDB4MDMpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDlCLCAweDAxKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDA5QywgMHhFNik7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwOUQsIDB4MDIpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDlFLCAweDg2KTsKLQotCWVyciArPSB6YzAzMDFfaTJjX3dyaXRlKGNhbSwgMHgwMiwgMHgwMik7Ci0JZXJyICs9IHpjMDMwMV9pMmNfd3JpdGUoY2FtLCAweDBBLCAweDAxKTsKLQllcnIgKz0gemMwMzAxX2kyY193cml0ZShjYW0sIDB4MEIsIDB4MDEpOwotCWVyciArPSB6YzAzMDFfaTJjX3dyaXRlKGNhbSwgMHgwRCwgMHgwMCk7Ci0JZXJyICs9IHpjMDMwMV9pMmNfd3JpdGUoY2FtLCAweDEyLCAweDA1KTsKLQllcnIgKz0gemMwMzAxX2kyY193cml0ZShjYW0sIDB4MTMsIDB4NjMpOwotCWVyciArPSB6YzAzMDFfaTJjX3dyaXRlKGNhbSwgMHgxNSwgMHg3MCk7Ci0KLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEwMSwgMHhCNyk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMDAsIDB4MEQpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTg5LCAweDA2KTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDFBRCwgMHgwMCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxQzUsIDB4MDMpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMUNCLCAweDEzKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDI1MCwgMHgwOCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAzMDEsIDB4MDgpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMThELCAweDcwKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDAwOCwgMHgwMyk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxQzYsIDB4MDQpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMUNCLCAweDA3KTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEyMCwgMHgxMSk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMjEsIDB4MzcpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTIyLCAweDU4KTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEyMywgMHg3OSk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMjQsIDB4OTEpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTI1LCAweEE2KTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEyNiwgMHhCOCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMjcsIDB4QzcpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTI4LCAweEQzKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEyOSwgMHhERSk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMkEsIDB4RTYpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTJCLCAweEVEKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEyQywgMHhGMyk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMkQsIDB4RjgpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTJFLCAweEZCKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEyRiwgMHhGRik7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMzAsIDB4MjYpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTMxLCAweDIzKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEzMiwgMHgyMCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMzMsIDB4MUMpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTM0LCAweDE2KTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEzNSwgMHgxMyk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMzYsIDB4MTApOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTM3LCAweDBEKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEzOCwgMHgwQik7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMzksIDB4MDkpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTNBLCAweDA3KTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEzQiwgMHgwNik7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxM0MsIDB4MDUpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTNELCAweDA0KTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEzRSwgMHgwMyk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxM0YsIDB4MDIpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTBBLCAweDRDKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEwQiwgMHhGNSk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMEMsIDB4RkYpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTBELCAweEY5KTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEwRSwgMHg1MSk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMEYsIDB4RjUpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTEwLCAweEZCKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDExMSwgMHhFRCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMTIsIDB4NUYpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTgwLCAweDAwKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDAxOSwgMHgwMCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwODcsIDB4MjApOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDg4LCAweDIxKTsKLQotCWVyciArPSB6YzAzMDFfaTJjX3dyaXRlKGNhbSwgMHgyMCwgMHgwMik7Ci0JZXJyICs9IHpjMDMwMV9pMmNfd3JpdGUoY2FtLCAweDIxLCAweDFCKTsKLQllcnIgKz0gemMwMzAxX2kyY193cml0ZShjYW0sIDB4MDMsIDB4NDQpOwotCWVyciArPSB6YzAzMDFfaTJjX3dyaXRlKGNhbSwgMHgwRSwgMHgwMSk7Ci0JZXJyICs9IHpjMDMwMV9pMmNfd3JpdGUoY2FtLCAweDBGLCAweDAwKTsKLQotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMUE5LCAweDE0KTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDFBQSwgMHgyNCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxOTAsIDB4MDApOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTkxLCAweDAyKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDE5MiwgMHgxQik7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxOTUsIDB4MDApOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTk2LCAweDAwKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDE5NywgMHg0RCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxOEMsIDB4MTApOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMThGLCAweDIwKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDAxRCwgMHg0NCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwMUUsIDB4NkYpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDFGLCAweEFEKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDAyMCwgMHhFQik7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwODcsIDB4MEYpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDg4LCAweDBFKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDE4MCwgMHg0MCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxOTIsIDB4MUIpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTkxLCAweDAyKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDE5MCwgMHgwMCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMTYsIDB4MUQpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTE3LCAweDQwKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDExOCwgMHg5OSk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxODAsIDB4NDIpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTE2LCAweDFEKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDExNywgMHg0MCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMTgsIDB4OTkpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDA3LCAweDAwKTsKLQotCWVyciArPSB6YzAzMDFfaTJjX3dyaXRlKGNhbSwgMHgxMSwgMHgwMSk7Ci0KLQltc2xlZXAoMTAwKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLQotc3RhdGljIGludCBwYXMyMDJiY2JfZ2V0X2N0cmwoc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSwKLQkJCSAgICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpCi17Ci0Jc3dpdGNoIChjdHJsLT5pZCkgewotCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6Ci0JCXsKLQkJCWludCByMSA9IHpjMDMwMV9pMmNfcmVhZChjYW0sIDB4MDQsIDEpLAotCQkJICAgIHIyID0gemMwMzAxX2kyY19yZWFkKGNhbSwgMHgwNSwgMSk7Ci0JCQlpZiAocjEgPCAwIHx8IHIyIDwgMCkKLQkJCQlyZXR1cm4gLUVJTzsKLQkJCWN0cmwtPnZhbHVlID0gKHIxIDw8IDYpIHwgKHIyICYgMHgzZik7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JY2FzZSBWNEwyX0NJRF9SRURfQkFMQU5DRToKLQkJaWYgKChjdHJsLT52YWx1ZSA9IHpjMDMwMV9pMmNfcmVhZChjYW0sIDB4MDksIDEpKSA8IDApCi0JCQlyZXR1cm4gLUVJTzsKLQkJY3RybC0+dmFsdWUgJj0gMHgwZjsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0U6Ci0JCWlmICgoY3RybC0+dmFsdWUgPSB6YzAzMDFfaTJjX3JlYWQoY2FtLCAweDA3LCAxKSkgPCAwKQotCQkJcmV0dXJuIC1FSU87Ci0JCWN0cmwtPnZhbHVlICY9IDB4MGY7Ci0JCXJldHVybiAwOwotCWNhc2UgVjRMMl9DSURfR0FJTjoKLQkJaWYgKChjdHJsLT52YWx1ZSA9IHpjMDMwMV9pMmNfcmVhZChjYW0sIDB4MTAsIDEpKSA8IDApCi0JCQlyZXR1cm4gLUVJTzsKLQkJY3RybC0+dmFsdWUgJj0gMHgxZjsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBaQzAzMDFfVjRMMl9DSURfR1JFRU5fQkFMQU5DRToKLQkJaWYgKChjdHJsLT52YWx1ZSA9IHpjMDMwMV9pMmNfcmVhZChjYW0sIDB4MDgsIDEpKSA8IDApCi0JCQlyZXR1cm4gLUVJTzsKLQkJY3RybC0+dmFsdWUgJj0gMHgwZjsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBaQzAzMDFfVjRMMl9DSURfREFDX01BR05JVFVERToKLQkJaWYgKChjdHJsLT52YWx1ZSA9IHpjMDMwMV9pMmNfcmVhZChjYW0sIDB4MGMsIDEpKSA8IDApCi0JCQlyZXR1cm4gLUVJTzsKLQkJcmV0dXJuIDA7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotfQotCi0KLXN0YXRpYyBpbnQgcGFzMjAyYmNiX3NldF9jdHJsKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0sCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKQotewotCWludCBlcnIgPSAwOwotCi0Jc3dpdGNoIChjdHJsLT5pZCkgewotCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6Ci0JCWVyciArPSB6YzAzMDFfaTJjX3dyaXRlKGNhbSwgMHgwNCwgY3RybC0+dmFsdWUgPj4gNik7Ci0JCWVyciArPSB6YzAzMDFfaTJjX3dyaXRlKGNhbSwgMHgwNSwgY3RybC0+dmFsdWUgJiAweDNmKTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9SRURfQkFMQU5DRToKLQkJZXJyICs9IHpjMDMwMV9pMmNfd3JpdGUoY2FtLCAweDA5LCBjdHJsLT52YWx1ZSk7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9DSURfQkxVRV9CQUxBTkNFOgotCQllcnIgKz0gemMwMzAxX2kyY193cml0ZShjYW0sIDB4MDcsIGN0cmwtPnZhbHVlKTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9HQUlOOgotCQllcnIgKz0gemMwMzAxX2kyY193cml0ZShjYW0sIDB4MTAsIGN0cmwtPnZhbHVlKTsKLQkJYnJlYWs7Ci0JY2FzZSBaQzAzMDFfVjRMMl9DSURfR1JFRU5fQkFMQU5DRToKLQkJZXJyICs9IHpjMDMwMV9pMmNfd3JpdGUoY2FtLCAweDA4LCBjdHJsLT52YWx1ZSk7Ci0JCWJyZWFrOwotCWNhc2UgWkMwMzAxX1Y0TDJfQ0lEX0RBQ19NQUdOSVRVREU6Ci0JCWVyciArPSB6YzAzMDFfaTJjX3dyaXRlKGNhbSwgMHgwYywgY3RybC0+dmFsdWUpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JZXJyICs9IHpjMDMwMV9pMmNfd3JpdGUoY2FtLCAweDExLCAweDAxKTsKLQotCXJldHVybiBlcnIgPyAtRUlPIDogMDsKLX0KLQotCi1zdGF0aWMgc3RydWN0IHpjMDMwMV9zZW5zb3IgcGFzMjAyYmNiID0gewotCS5uYW1lID0gIlBBUzIwMkJDQiIsCi0JLmluaXQgPSAmcGFzMjAyYmNiX2luaXQsCi0JLnFjdHJsID0gewotCQl7Ci0JCQkuaWQgPSBWNEwyX0NJRF9FWFBPU1VSRSwKLQkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJCS5uYW1lID0gImV4cG9zdXJlIiwKLQkJCS5taW5pbXVtID0gMHgwMWU1LAotCQkJLm1heGltdW0gPSAweDNmZmYsCi0JCQkuc3RlcCA9IDB4MDAwMSwKLQkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwMWU1LAotCQkJLmZsYWdzID0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQsCi0JCX0sCi0JCXsKLQkJCS5pZCA9IFY0TDJfQ0lEX0dBSU4sCi0JCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCQkubmFtZSA9ICJnbG9iYWwgZ2FpbiIsCi0JCQkubWluaW11bSA9IDB4MDAsCi0JCQkubWF4aW11bSA9IDB4MWYsCi0JCQkuc3RlcCA9IDB4MDEsCi0JCQkuZGVmYXVsdF92YWx1ZSA9IDB4MGMsCi0JCQkuZmxhZ3MgPSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRCwKLQkJfSwKLQkJewotCQkJLmlkID0gWkMwMzAxX1Y0TDJfQ0lEX0RBQ19NQUdOSVRVREUsCi0JCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCQkubmFtZSA9ICJEQUMgbWFnbml0dWRlIiwKLQkJCS5taW5pbXVtID0gMHgwMCwKLQkJCS5tYXhpbXVtID0gMHhmZiwKLQkJCS5zdGVwID0gMHgwMSwKLQkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwMCwKLQkJCS5mbGFncyA9IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVELAotCQl9LAotCQl7Ci0JCQkuaWQgPSBWNEwyX0NJRF9SRURfQkFMQU5DRSwKLQkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJCS5uYW1lID0gInJlZCBiYWxhbmNlIiwKLQkJCS5taW5pbXVtID0gMHgwMCwKLQkJCS5tYXhpbXVtID0gMHgwZiwKLQkJCS5zdGVwID0gMHgwMSwKLQkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwMSwKLQkJCS5mbGFncyA9IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVELAotCQl9LAotCQl7Ci0JCQkuaWQgPSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0UsCi0JCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCQkubmFtZSA9ICJibHVlIGJhbGFuY2UiLAotCQkJLm1pbmltdW0gPSAweDAwLAotCQkJLm1heGltdW0gPSAweDBmLAotCQkJLnN0ZXAgPSAweDAxLAotCQkJLmRlZmF1bHRfdmFsdWUgPSAweDA1LAotCQkJLmZsYWdzID0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQsCi0JCX0sCi0JCXsKLQkJCS5pZCA9IFpDMDMwMV9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFLAotCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUgPSAiZ3JlZW4gYmFsYW5jZSIsCi0JCQkubWluaW11bSA9IDB4MDAsCi0JCQkubWF4aW11bSA9IDB4MGYsCi0JCQkuc3RlcCA9IDB4MDEsCi0JCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDAsCi0JCQkuZmxhZ3MgPSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRCwKLQkJfSwKLQl9LAotCS5nZXRfY3RybCA9ICZwYXMyMDJiY2JfZ2V0X2N0cmwsCi0JLnNldF9jdHJsID0gJnBhczIwMmJjYl9zZXRfY3RybCwKLQkuY3JvcGNhcCA9IHsKLQkJLmJvdW5kcyA9IHsKLQkJCS5sZWZ0ID0gMCwKLQkJCS50b3AgPSAwLAotCQkJLndpZHRoID0gNjQwLAotCQkJLmhlaWdodCA9IDQ4MCwKLQkJfSwKLQkJLmRlZnJlY3QgPSB7Ci0JCQkubGVmdCA9IDAsCi0JCQkudG9wID0gMCwKLQkJCS53aWR0aCA9IDY0MCwKLQkJCS5oZWlnaHQgPSA0ODAsCi0JCX0sCi0JfSwKLQkucGl4X2Zvcm1hdCA9IHsKLQkJLndpZHRoID0gNjQwLAotCQkuaGVpZ2h0ID0gNDgwLAotCQkucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfSlBFRywKLQkJLnByaXYgPSA4LAotCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAotCX0sCi19OwotCi0KLWludCB6YzAzMDFfcHJvYmVfcGFzMjAyYmNiKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0pCi17Ci0JaW50IHIwID0gMCwgcjEgPSAwLCBlcnIgPSAwOwotCXVuc2lnbmVkIGludCBwaWQgPSAwOwotCi0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwMDAsIDB4MDEpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDEwLCAweDBlKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDAwMSwgMHgwMSk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwMTIsIDB4MDMpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDEyLCAweDAxKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDA4ZCwgMHgwOCk7Ci0KLQltc2xlZXAoMTApOwotCi0JcjAgPSB6YzAzMDFfaTJjX3JlYWQoY2FtLCAweDAwLCAxKTsKLQlyMSA9IHpjMDMwMV9pMmNfcmVhZChjYW0sIDB4MDEsIDEpOwotCi0JaWYgKHIwIDwgMCB8fCByMSA8IDAgfHwgZXJyKQotCQlyZXR1cm4gLUVJTzsKLQotCXBpZCA9IChyMCA8PCA0KSB8ICgocjEgJiAweGYwKSA+PiA0KTsKLQlpZiAocGlkICE9IDB4MDE3KQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXpjMDMwMV9hdHRhY2hfc2Vuc29yKGNhbSwgJnBhczIwMmJjYik7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9wYjAzMzAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9wYjAzMzAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTUxOWFiYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfcGIwMzMwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUGx1Zy1pbiBmb3IgUEItMDMzMCBpbWFnZSBzZW5zb3IgY29ubmVjdGVkIHRvIHRoZSBaQzAzMDFQIEltYWdlICAgICAgICAgKgotICogUHJvY2Vzc29yIGFuZCBDb250cm9sIENoaXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogSW5pdGlhbGl6YXRpb24gdmFsdWVzIG9mIHRoZSBaQzAzMDFbUF0gaGF2ZSBiZWVuIHRha2VuIGZyb20gdGhlIFNQQ0E1WFggKgotICogZHJpdmVyIG1haW50YWluZWQgYnkgTWljaGVsIFhoYWFyZCA8bXhoYWFyZEBtYWdpYy5mcj4gICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgKgotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSAiemMwMzAxX3NlbnNvci5oIgotCi0KLXN0YXRpYyBzdHJ1Y3QgemMwMzAxX3NlbnNvciBwYjAzMzA7Ci0KLQotc3RhdGljIGludCBwYjAzMzBfaW5pdChzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtKQotewotCWludCBlcnIgPSAwOwotCi0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwMDAsIDB4MDEpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDA4LCAweDAzKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDAxMCwgMHgwQSk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwMDIsIDB4MDApOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDAzLCAweDAyKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDAwNCwgMHg4MCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwMDUsIDB4MDEpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDA2LCAweEUwKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDAwMSwgMHgwMSk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwMTIsIDB4MDUpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDEyLCAweDA3KTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDA5OCwgMHgwMCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwOUEsIDB4MDApOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTFBLCAweDAwKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDExQywgMHgwMCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwMTIsIDB4MDUpOwotCi0JZXJyICs9IHpjMDMwMV9pMmNfd3JpdGUoY2FtLCAweDAxLCAweDAwMDYpOwotCWVyciArPSB6YzAzMDFfaTJjX3dyaXRlKGNhbSwgMHgwMiwgMHgwMDExKTsKLQllcnIgKz0gemMwMzAxX2kyY193cml0ZShjYW0sIDB4MDMsIDB4MDFFNyk7Ci0JZXJyICs9IHpjMDMwMV9pMmNfd3JpdGUoY2FtLCAweDA0LCAweDAyODcpOwotCWVyciArPSB6YzAzMDFfaTJjX3dyaXRlKGNhbSwgMHgwNiwgMHgwMDAzKTsKLQllcnIgKz0gemMwMzAxX2kyY193cml0ZShjYW0sIDB4MDcsIDB4MzAwMik7Ci0JZXJyICs9IHpjMDMwMV9pMmNfd3JpdGUoY2FtLCAweDIwLCAweDExMDApOwotCWVyciArPSB6YzAzMDFfaTJjX3dyaXRlKGNhbSwgMHgyRiwgMHhGN0IwKTsKLQllcnIgKz0gemMwMzAxX2kyY193cml0ZShjYW0sIDB4MzAsIDB4MDAwNSk7Ci0JZXJyICs9IHpjMDMwMV9pMmNfd3JpdGUoY2FtLCAweDMxLCAweDAwMDApOwotCWVyciArPSB6YzAzMDFfaTJjX3dyaXRlKGNhbSwgMHgzNCwgMHgwMTAwKTsKLQllcnIgKz0gemMwMzAxX2kyY193cml0ZShjYW0sIDB4MzUsIDB4MDA2MCk7Ci0JZXJyICs9IHpjMDMwMV9pMmNfd3JpdGUoY2FtLCAweDNELCAweDA2OEYpOwotCWVyciArPSB6YzAzMDFfaTJjX3dyaXRlKGNhbSwgMHg0MCwgMHgwMUUwKTsKLQllcnIgKz0gemMwMzAxX2kyY193cml0ZShjYW0sIDB4NTgsIDB4MDA3OCk7Ci0JZXJyICs9IHpjMDMwMV9pMmNfd3JpdGUoY2FtLCAweDYyLCAweDA0MTEpOwotCi0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwODcsIDB4MTApOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTAxLCAweDM3KTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDAxMiwgMHgwNSk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMDAsIDB4MEQpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTg5LCAweDA2KTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDFBRCwgMHgwMCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxQzUsIDB4MDMpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMUNCLCAweDEzKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDI1MCwgMHgwOCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAzMDEsIDB4MDgpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMUE4LCAweDYwKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDE4RCwgMHg2Qyk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxQUQsIDB4MDkpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMUFFLCAweDE1KTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEwQSwgMHg1MCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMEIsIDB4RjgpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTBDLCAweEY4KTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEwRCwgMHhGOCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMEUsIDB4NTApOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTBGLCAweEY4KTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDExMCwgMHhGOCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMTEsIDB4RjgpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTEyLCAweDUwKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDAwOCwgMHgwMyk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxQzYsIDB4MDgpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMUNCLCAweDBGKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEwQSwgMHg1MCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMEIsIDB4RjgpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTBDLCAweEY4KTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEwRCwgMHhGOCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMEUsIDB4NTApOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTBGLCAweEY4KTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDExMCwgMHhGOCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMTEsIDB4RjgpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTEyLCAweDUwKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDE4MCwgMHgwMCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwMTksIDB4MDApOwotCi0JZXJyICs9IHpjMDMwMV9pMmNfd3JpdGUoY2FtLCAweDA1LCAweDAwNjYpOwotCWVyciArPSB6YzAzMDFfaTJjX3dyaXRlKGNhbSwgMHgwOSwgMHgwMkIyKTsKLQllcnIgKz0gemMwMzAxX2kyY193cml0ZShjYW0sIDB4MTAsIDB4MDAwMik7Ci0KLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDExRCwgMHg2MCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxOTAsIDB4MDApOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTkxLCAweDA3KTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDE5MiwgMHg4Qyk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxOTUsIDB4MDApOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTk2LCAweDAwKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDE5NywgMHg4QSk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxOEMsIDB4MTApOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMThGLCAweDIwKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDFBOSwgMHgxNCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxQUEsIDB4MjQpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDFELCAweEQ3KTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDAxRSwgMHhGMCk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwMUYsIDB4RjgpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDIwLCAweEZGKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDFBRCwgMHgwOSk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxQUUsIDB4MTUpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTgwLCAweDQwKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDE4MCwgMHg0Mik7Ci0KLQltc2xlZXAoMTAwKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLQotc3RhdGljIHN0cnVjdCB6YzAzMDFfc2Vuc29yIHBiMDMzMCA9IHsKLQkubmFtZSA9ICJQQi0wMzMwIiwKLQkuaW5pdCA9ICZwYjAzMzBfaW5pdCwKLQkuY3JvcGNhcCA9IHsKLQkJLmJvdW5kcyA9IHsKLQkJCS5sZWZ0ID0gMCwKLQkJCS50b3AgPSAwLAotCQkJLndpZHRoID0gNjQwLAotCQkJLmhlaWdodCA9IDQ4MCwKLQkJfSwKLQkJLmRlZnJlY3QgPSB7Ci0JCQkubGVmdCA9IDAsCi0JCQkudG9wID0gMCwKLQkJCS53aWR0aCA9IDY0MCwKLQkJCS5oZWlnaHQgPSA0ODAsCi0JCX0sCi0JfSwKLQkucGl4X2Zvcm1hdCA9IHsKLQkJLndpZHRoID0gNjQwLAotCQkuaGVpZ2h0ID0gNDgwLAotCQkucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfSlBFRywKLQkJLnByaXYgPSA4LAotCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAotCX0sCi19OwotCi0KLWludCB6YzAzMDFfcHJvYmVfcGIwMzMwKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0pCi17Ci0JaW50IHIwLCBlcnIgPSAwOwotCi0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwMDAsIDB4MDEpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDEwLCAweDBhKTsKLQllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDAwMSwgMHgwMSk7Ci0JZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwMTIsIDB4MDMpOwotCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDEyLCAweDAxKTsKLQotCW1zbGVlcCgxMCk7Ci0KLQlyMCA9IHpjMDMwMV9pMmNfcmVhZChjYW0sIDB4MDAsIDIpOwotCi0JaWYgKHIwIDwgMCB8fCBlcnIpCi0JCXJldHVybiAtRUlPOwotCi0JaWYgKHIwICE9IDB4ODI0MykKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQl6YzAzMDFfYXR0YWNoX3NlbnNvcihjYW0sICZwYjAzMzApOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfc2Vuc29yLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfc2Vuc29yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiZTc4M2MuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX3NlbnNvci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEFQSSBmb3IgaW1hZ2Ugc2Vuc29ycyBjb25uZWN0ZWQgdG8gdGhlIFpDMDMwMVtQXSBJbWFnZSBQcm9jZXNzb3IgYW5kICAgICoKLSAqIENvbnRyb2wgQ2hpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA3IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICoKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgX1pDMDMwMV9TRU5TT1JfSF8KLSNkZWZpbmUgX1pDMDMwMV9TRU5TT1JfSF8KLQotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KLXN0cnVjdCB6YzAzMDFfZGV2aWNlOwotc3RydWN0IHpjMDMwMV9zZW5zb3I7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotZXh0ZXJuIGludCB6YzAzMDFfcHJvYmVfcGFzMjAyYmNiKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0pOwotZXh0ZXJuIGludCB6YzAzMDFfcHJvYmVfcGIwMzMwKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0pOwotCi0jZGVmaW5lIFpDMDMwMV9TRU5TT1JfVEFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0vKiBXZWFrIGRldGVjdGlvbnMgbXVzdCBnbyBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0ICovICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1zdGF0aWMgaW50ICgqemMwMzAxX3NlbnNvcl90YWJsZVtdKShzdHJ1Y3QgemMwMzAxX2RldmljZSopID0geyAgICAgICAgICAgICAgICBcCi0JJnpjMDMwMV9wcm9iZV9wYXMyMDJiY2IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkmemMwMzAxX3Byb2JlX3BiMDMzMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCU5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19OwotCi1leHRlcm4gc3RydWN0IHpjMDMwMV9kZXZpY2UqCi16YzAzMDFfbWF0Y2hfaWQoc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKLQotZXh0ZXJuIHZvaWQKLXpjMDMwMV9hdHRhY2hfc2Vuc29yKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0sIHN0cnVjdCB6YzAzMDFfc2Vuc29yKiBzZW5zb3IpOwotCi0jZGVmaW5lIFpDMDMwMV9VU0JfREVWSUNFKHZlbmQsIHByb2QsIGludGNsYXNzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTLCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JLmlkVmVuZG9yID0gKHZlbmQpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkuaWRQcm9kdWN0ID0gKHByb2QpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCS5iSW50ZXJmYWNlQ2xhc3MgPSAoaW50Y2xhc3MpCi0KLSNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBX1pDM1hYICYmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0FfWkMzWFhfTU9EVUxFCi0jZGVmaW5lIFpDMDMwMV9JRF9UQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgemMwMzAxX2lkX3RhYmxlW10gPSAgeyAgICAgICAgICAgICAgICAgICAgICBcCi0JeyBaQzAzMDFfVVNCX0RFVklDRSgweDA0NmQsIDB4MDhhZSwgMHhmZiksIH0sIC8qIFBBUzIwMiAqLyAgICAgICAgICAgIFwKLQl7IFpDMDMwMV9VU0JfREVWSUNFKDB4MGFjOCwgMHgzMDNiLCAweGZmKSwgfSwgLyogUEItMDMzMCAqLyAgICAgICAgICAgXAotCXsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19OwotI2Vsc2UKLSNkZWZpbmUgWkMwMzAxX0lEX1RBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCB6YzAzMDFfaWRfdGFibGVbXSA9ICB7ICAgICAgICAgICAgICAgICAgICAgIFwKLQl7IFpDMDMwMV9VU0JfREVWSUNFKDB4MDQ2ZCwgMHgwOGFlLCAweGZmKSwgfSwgLyogUEFTMjAyICovICAgICAgICAgICAgXAotCXsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19OwotI2VuZGlmCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotZXh0ZXJuIGludCB6YzAzMDFfd3JpdGVfcmVnKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiwgdTE2IGluZGV4LCB1MTYgdmFsdWUpOwotZXh0ZXJuIGludCB6YzAzMDFfcmVhZF9yZWcoc3RydWN0IHpjMDMwMV9kZXZpY2UqLCB1MTYgaW5kZXgpOwotZXh0ZXJuIGludCB6YzAzMDFfaTJjX3dyaXRlKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiwgdTE2IGFkZHJlc3MsIHUxNiB2YWx1ZSk7Ci1leHRlcm4gaW50IHpjMDMwMV9pMmNfcmVhZChzdHJ1Y3QgemMwMzAxX2RldmljZSosIHUxNiBhZGRyZXNzLCB1OCBsZW5ndGgpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgWkMwMzAxX01BWF9DVFJMUyAoVjRMMl9DSURfTEFTVFAxIC0gVjRMMl9DSURfQkFTRSArIDEwKQotI2RlZmluZSBaQzAzMDFfVjRMMl9DSURfREFDX01BR05JVFVERSAoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgMCkKLSNkZWZpbmUgWkMwMzAxX1Y0TDJfQ0lEX0dSRUVOX0JBTEFOQ0UgKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDEpCi0KLXN0cnVjdCB6YzAzMDFfc2Vuc29yIHsKLQljaGFyIG5hbWVbMzJdOwotCi0Jc3RydWN0IHY0bDJfcXVlcnljdHJsIHFjdHJsW1pDMDMwMV9NQVhfQ1RSTFNdOwotCXN0cnVjdCB2NGwyX2Nyb3BjYXAgY3JvcGNhcDsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHBpeF9mb3JtYXQ7Ci0KLQlpbnQgKCppbml0KShzdHJ1Y3QgemMwMzAxX2RldmljZSopOwotCWludCAoKmdldF9jdHJsKShzdHJ1Y3QgemMwMzAxX2RldmljZSosIHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpOwotCWludCAoKnNldF9jdHJsKShzdHJ1Y3QgemMwMzAxX2RldmljZSosCi0JCQljb25zdCBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKTsKLQlpbnQgKCpzZXRfY3JvcCkoc3RydWN0IHpjMDMwMV9kZXZpY2UqLCBjb25zdCBzdHJ1Y3QgdjRsMl9yZWN0KiByZWN0KTsKLQotCS8qIFByaXZhdGUgKi8KLQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgX3FjdHJsW1pDMDMwMV9NQVhfQ1RSTFNdOwotCXN0cnVjdCB2NGwyX3JlY3QgX3JlY3Q7Ci19OwotCi0jZW5kaWYgLyogX1pDMDMwMV9TRU5TT1JfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vdmlkZW9jb2RlYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi92aWRlb2NvZGVjLmMKaW5kZXggY2YyNDk1Ni4uYzAxMDcxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi92aWRlb2NvZGVjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi92aWRlb2NvZGVjLmMKQEAgLTEwNywxNSArMTA3LDE0IEBACiAJCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGgtPmNvZGVjLT5vd25lcikpCiAJCQkJcmV0dXJuIE5VTEw7CiAKLQkJCWNvZGVjID0KLQkJCSAgICBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdmlkZW9jb2RlYyksIEdGUF9LRVJORUwpOworCQkJY29kZWMgPSBrbWVtZHVwKGgtPmNvZGVjLCBzaXplb2Yoc3RydWN0IHZpZGVvY29kZWMpLAorCQkJCQlHRlBfS0VSTkVMKTsKIAkJCWlmICghY29kZWMpIHsKIAkJCQlkcHJpbnRrKDEsCiAJCQkJCUtFUk5fRVJSCiAJCQkJCSJ2aWRlb2NvZGVjX2F0dGFjaDogbm8gbWVtXG4iKTsKIAkJCQlnb3RvIG91dF9tb2R1bGVfcHV0OwogCQkJfQotCQkJbWVtY3B5KGNvZGVjLCBoLT5jb2RlYywgc2l6ZW9mKHN0cnVjdCB2aWRlb2NvZGVjKSk7CiAKIAkJCXNucHJpbnRmKGNvZGVjLT5uYW1lLCBzaXplb2YoY29kZWMtPm5hbWUpLAogCQkJCSAiJXNbJWRdIiwgY29kZWMtPm5hbWUsIGgtPmF0dGFjaGVkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW4uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW4uaAppbmRleCA4OTk3YWRkLi4zMDdlODQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbi5oCkBAIC0zOTEsNyArMzkxLDcgQEAKIAogCXN0cnVjdCBtdXRleCByZXNvdXJjZV9sb2NrOwkvKiBwcmV2ZW50IGV2aWwgc3R1ZmYgKi8KIAotCXU4IGluaXRpYWxpemVkOwkJLyogZmxhZyBpZiB6b3JhbiBoYXMgYmVlbiBjb3JyZWN0bHkgaW5pdGFsaXplZCAqLworCXU4IGluaXRpYWxpemVkOwkJLyogZmxhZyBpZiB6b3JhbiBoYXMgYmVlbiBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgKi8KIAlpbnQgdXNlcjsJCS8qIG51bWJlciBvZiBjdXJyZW50IHVzZXJzICovCiAJc3RydWN0IGNhcmRfaW5mbyBjYXJkOwogCXN0cnVjdCB0dm5vcm0gKnRpbWluZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZGV2aWNlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RldmljZS5jCmluZGV4IGU2YWQ0YjIuLjZmODQ2YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZGV2aWNlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kZXZpY2UuYwpAQCAtNDg0LDcgKzQ4NCw3IEBACiAJCQkJenItPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0KTsKIAogCQkvKiBTdGFydCBhbmQgbGVuZ3RoIG9mIGVhY2ggbGluZSBNVVNUIGJlIDQtYnl0ZSBhbGlnbmVkLgotCQkgKiBUaGlzIHNob3VsZCBiZSBhbGxyZWFkeSBjaGVja2VkIGJlZm9yZSB0aGUgY2FsbCB0byB0aGlzIHJvdXRpbmUuCisJCSAqIFRoaXMgc2hvdWxkIGJlIGFscmVhZHkgY2hlY2tlZCBiZWZvcmUgdGhlIGNhbGwgdG8gdGhpcyByb3V0aW5lLgogCQkgKiBBbGwgZXJyb3IgbWVzc2FnZXMgYXJlIGludGVybmFsIGRyaXZlciBjaGVja2luZyBvbmx5ISAqLwogCiAJCS8qIHZpZGVvIGRpc3BsYXkgdG9wIGFuZCBib3R0b20gcmVnaXN0ZXJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pyMzYwNTAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA1MC5jCmluZGV4IDYzOWRkODcuLmUxOTg1NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA1MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA1MC5jCkBAIC0yMzYsNyArMjM2LDcgQEAKIAogICAgQ291bGQgYmUgdmFyaWFibGUsIGJ1dCB1bnRpbCBpdCdzIG5vdCBuZWVkZWQgaXQgdGhleSBhcmUganVzdCBmaXhlZCB0byBzYXZlCiAgICBtZW1vcnkuIE90aGVyd2lzZSBleHBhbmQgenIzNjA1MCBzdHJ1Y3R1cmUgd2l0aCBhcnJheXMsIHB1c2ggdGhlIHZhbHVlcyB0bwotICAgaXQgYW5kIGluaXRhbGl6ZSBmcm9tIHRoZXJlLCBhcyBlLmcuIHRoZSBsaW51eCB6cjM2MDU3LzYwIGRyaXZlciBkb2VzIGl0LgorICAgaXQgYW5kIGluaXRpYWxpemUgZnJvbSB0aGVyZSwgYXMgZS5nLiB0aGUgbGludXggenIzNjA1Ny82MCBkcml2ZXIgZG9lcyBpdC4KICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIAogc3RhdGljIGNvbnN0IGNoYXIgenIzNjA1MF9kcXRbMHg4Nl0gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pyMzYwNjAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA2MC5jCmluZGV4IDAwODc0NmYuLjVlNGY1N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA2MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA2MC5jCkBAIC0yMjcsNyArMjI3LDcgQEAKIAogICAgQ291bGQgYmUgdmFyaWFibGUsIGJ1dCB1bnRpbCBpdCdzIG5vdCBuZWVkZWQgaXQgdGhleSBhcmUganVzdCBmaXhlZCB0byBzYXZlCiAgICBtZW1vcnkuIE90aGVyd2lzZSBleHBhbmQgenIzNjA2MCBzdHJ1Y3R1cmUgd2l0aCBhcnJheXMsIHB1c2ggdGhlIHZhbHVlcyB0bwotICAgaXQgYW5kIGluaXRhbGl6ZSBmcm9tIHRoZXJlLCBhcyBlLmcuIHRoZSBsaW51eCB6cjM2MDU3LzYwIGRyaXZlciBkb2VzIGl0LgorICAgaXQgYW5kIGluaXRpYWxpemUgZnJvbSB0aGVyZSwgYXMgZS5nLiB0aGUgbGludXggenIzNjA1Ny82MCBkcml2ZXIgZG9lcyBpdC4KICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIAogc3RhdGljIGNvbnN0IGNoYXIgenIzNjA2MF9kcXRbMHg4Nl0gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCmluZGV4IGE2YTU3MDEuLmI4OGEyNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCkBAIC0xMTUsNiArMTE1LDcgQEAKIAkiIGFuZCBoYWx0IEZpcm13YXJlIG9uIGZhdWx0IC0gKGRlZmF1bHQ9MCkiKTsKIAogCitzdGF0aWMgY2hhcglNcHRDYWxsYmFja3NOYW1lW01QVF9NQVhfUFJPVE9DT0xfRFJJVkVSU11bNTBdOwogCiAjaWZkZWYgTUZDTlQKIHN0YXRpYyBpbnQgbWZjb3VudGVyID0gMDsKQEAgLTIxMyw3ICsyMTQsNyBAQAogc3RhdGljIHZvaWQJbXB0X2lvY3N0YXR1c19pbmZvKE1QVF9BREFQVEVSICppb2MsIHUzMiBpb2Nfc3RhdHVzLCBNUFRfRlJBTUVfSERSICptZik7CiBzdGF0aWMgdm9pZAltcHRfZmNfbG9nX2luZm8oTVBUX0FEQVBURVIgKmlvYywgdTMyIGxvZ19pbmZvKTsKIHN0YXRpYyB2b2lkCW1wdF9zcGlfbG9nX2luZm8oTVBUX0FEQVBURVIgKmlvYywgdTMyIGxvZ19pbmZvKTsKLXN0YXRpYyB2b2lkCW1wdF9zYXNfbG9nX2luZm8oTVBUX0FEQVBURVIgKmlvYywgdTMyIGxvZ19pbmZvKTsKK3N0YXRpYyB2b2lkCW1wdF9zYXNfbG9nX2luZm8oTVBUX0FEQVBURVIgKmlvYywgdTMyIGxvZ19pbmZvICwgdTggY2JfaWR4KTsKIHN0YXRpYyBpbnQJbXB0X3JlYWRfaW9jX3BnXzMoTVBUX0FEQVBURVIgKmlvYyk7CiBzdGF0aWMgdm9pZAltcHRfaW5hY3RpdmVfcmFpZF9saXN0X2ZyZWUoTVBUX0FEQVBURVIgKmlvYyk7CiAKQEAgLTQ5MCw3ICs0OTEsNyBAQAogCQllbHNlIGlmIChpb2MtPmJ1c190eXBlID09IFNQSSkKIAkJCW1wdF9zcGlfbG9nX2luZm8oaW9jLCBsb2dfaW5mbyk7CiAJCWVsc2UgaWYgKGlvYy0+YnVzX3R5cGUgPT0gU0FTKQotCQkJbXB0X3Nhc19sb2dfaW5mbyhpb2MsIGxvZ19pbmZvKTsKKwkJCW1wdF9zYXNfbG9nX2luZm8oaW9jLCBsb2dfaW5mbywgY2JfaWR4KTsKIAl9CiAKIAlpZiAoaW9jX3N0YXQgJiBNUElfSU9DU1RBVFVTX01BU0spCkBAIC02NDQsNyArNjQ1LDcgQEAKICAqCWNvbnNpZGVyZWQgYW4gZXJyb3IgYnkgdGhlIGNhbGxlci4KICAqLwogdTgKLW1wdF9yZWdpc3RlcihNUFRfQ0FMTEJBQ0sgY2JmdW5jLCBNUFRfRFJJVkVSX0NMQVNTIGRjbGFzcykKK21wdF9yZWdpc3RlcihNUFRfQ0FMTEJBQ0sgY2JmdW5jLCBNUFRfRFJJVkVSX0NMQVNTIGRjbGFzcywgY2hhciAqZnVuY19uYW1lKQogewogCXU4IGNiX2lkeDsKIAlsYXN0X2Rydl9pZHggPSBNUFRfTUFYX1BST1RPQ09MX0RSSVZFUlM7CkBAIC02NTksNiArNjYwLDggQEAKIAkJCU1wdERyaXZlckNsYXNzW2NiX2lkeF0gPSBkY2xhc3M7CiAJCQlNcHRFdkhhbmRsZXJzW2NiX2lkeF0gPSBOVUxMOwogCQkJbGFzdF9kcnZfaWR4ID0gY2JfaWR4OworCQkJbWVtY3B5KE1wdENhbGxiYWNrc05hbWVbY2JfaWR4XSwgZnVuY19uYW1lLAorCQkJICAgIHN0cmxlbihmdW5jX25hbWUpID4gNTAgPyA1MCA6IHN0cmxlbihmdW5jX25hbWUpKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTYzMiw2ICsxNjM1LDcgQEAKIAkJfSBlbHNlIHsKIAkJCXByaW50ayhNWUlPQ19zX1dBUk5fRk1UICJubyBzdWl0YWJsZSBETUEgbWFzayBmb3IgJXNcbiIsCiAJCQkgICAgaW9jLT5uYW1lLCBwY2lfbmFtZShwZGV2KSk7CisJCQlwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsIGlvYy0+YmFycyk7CiAJCQlyZXR1cm4gcjsKIAkJfQogCX0gZWxzZSB7CkBAIC0xNjQ1LDYgKzE2NDksNyBAQAogCQl9IGVsc2UgewogCQkJcHJpbnRrKE1ZSU9DX3NfV0FSTl9GTVQgIm5vIHN1aXRhYmxlIERNQSBtYXNrIGZvciAlc1xuIiwKIAkJCSAgICBpb2MtPm5hbWUsIHBjaV9uYW1lKHBkZXYpKTsKKwkJCXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMocGRldiwgaW9jLT5iYXJzKTsKIAkJCXJldHVybiByOwogCQl9CiAJfQpAQCAtMTY3NSw2ICsxNjgwLDcgQEAKIAlpZiAobWVtID09IE5VTEwpIHsKIAkJcHJpbnRrKE1ZSU9DX3NfRVJSX0ZNVCAiOiBFUlJPUiAtIFVuYWJsZSB0byBtYXAgYWRhcHRlciIKIAkJCSIgbWVtb3J5IVxuIiwgaW9jLT5uYW1lKTsKKwkJcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LCBpb2MtPmJhcnMpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaW9jLT5tZW1tYXAgPSBtZW07CkBAIC0xNzcwLDcgKzE3NzYsNiBAQAogCWlvYy0+cmVxX3N6ID0gTVBUX0RFRkFVTFRfRlJBTUVfU0laRTsJCS8qIGF2b2lkIGRpdiBieSB6ZXJvISAqLwogCWlvYy0+cmVwbHlfc3ogPSBNUFRfUkVQTFlfRlJBTUVfU0laRTsKIAotCWlvYy0+cGNpZGV2ID0gcGRldjsKIAogCXNwaW5fbG9ja19pbml0KCZpb2MtPnRhc2ttZ210X2xvY2spOwogCW11dGV4X2luaXQoJmlvYy0+aW50ZXJuYWxfY21kcy5tdXRleCk7CkBAIC0xNzk0LDcgKzE3OTksNyBAQAogCWlvYy0+c2ggPSBOVUxMOwogCWlvYy0+Y2FjaGVkX2Z3ID0gTlVMTDsKIAotCS8qIEluaXRpbGl6ZSBTQ1NJIENvbmZpZyBEYXRhIHN0cnVjdHVyZQorCS8qIEluaXRpYWxpemUgU0NTSSBDb25maWcgRGF0YSBzdHJ1Y3R1cmUKIAkgKi8KIAltZW1zZXQoJmlvYy0+c3BpX2RhdGEsIDAsIHNpemVvZihTcGlDZmdEYXRhKSk7CiAKQEAgLTE5MTMsNiArMTkxOCw5IEBACiAJCWlvYy0+bXNpX2VuYWJsZSA9IDA7CiAJCWJyZWFrOwogCX0KKworCWlvYy0+ZndfZXZlbnRzX29mZiA9IDE7CisKIAlpZiAoaW9jLT5lcnJhdGFfZmxhZ18xMDY0KQogCQlwY2lfZGlzYWJsZV9pb19hY2Nlc3MocGRldik7CiAKQEAgLTIwNTEsNyArMjA1OSw2IEBACiAKIAltcHRfYWRhcHRlcl9kaXNwb3NlKGlvYyk7CiAKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjQ3MSw3ICsyNDc4LDcgQEAKIAlpZiAoKHJldCA9PSAwKSAmJiAocmVhc29uID09IE1QVF9IT1NURVZFTlRfSU9DX0JSSU5HVVApKSB7CiAKIAkJLyoKLQkJICogSW5pdGFsaXplIGxpbmsgbGlzdCBmb3IgaW5hY3RpdmUgcmFpZCB2b2x1bWVzLgorCQkgKiBJbml0aWFsaXplIGxpbmsgbGlzdCBmb3IgaW5hY3RpdmUgcmFpZCB2b2x1bWVzLgogCQkgKi8KIAkJbXV0ZXhfaW5pdCgmaW9jLT5yYWlkX2RhdGEuaW5hY3RpdmVfbGlzdF9tdXRleCk7CiAJCUlOSVRfTElTVF9IRUFEKCZpb2MtPnJhaWRfZGF0YS5pbmFjdGl2ZV9saXN0KTsKQEAgLTUwNjIsOCArNTA2OSw5IEBACiAJCWlmIChpb2MtPm1wdGJhc2VfY21kcy5zdGF0dXMgJiBNUFRfTUdNVF9TVEFUVVNfRElEX0lPQ1JFU0VUKQogCQkJZ290byBvdXQ7CiAJCWlmICghdGltZWxlZnQpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogSXNzdWluZyBSZXNldCBmcm9tICVzISFcbiIsCi0JCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCQlwcmludGsoTVlJT0Nfc19XQVJOX0ZNVAorCQkJICAgICAgICJJc3N1aW5nIFJlc2V0IGZyb20gJXMhISwgZG9vcmJlbGw9MHglMDh4XG4iLAorCQkJICAgICAgIGlvYy0+bmFtZSwgX19mdW5jX18sIG1wdF9HZXRJb2NTdGF0ZShpb2MsIDApKTsKIAkJCW1wdF9Tb2Z0X0hhcmRfUmVzZXRIYW5kbGVyKGlvYywgQ0FOX1NMRUVQKTsKIAkJCW1wdF9mcmVlX21zZ19mcmFtZShpb2MsIG1mKTsKIAkJfQpAQCAtNjQ1NCw4ICs2NDYyLDkgQEAKIAltdXRleF91bmxvY2soJmlvYy0+bXB0YmFzZV9jbWRzLm11dGV4KTsKIAlpZiAoaXNzdWVfaGFyZF9yZXNldCkgewogCQlpc3N1ZV9oYXJkX3Jlc2V0ID0gMDsKLQkJcHJpbnRrKE1ZSU9DX3NfV0FSTl9GTVQgIklzc3VpbmcgUmVzZXQgZnJvbSAlcyEhXG4iLAotCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXByaW50ayhNWUlPQ19zX1dBUk5fRk1UCisJCSAgICAgICAiSXNzdWluZyBSZXNldCBmcm9tICVzISEsIGRvb3JiZWxsPTB4JTA4eFxuIiwKKwkJICAgICAgIGlvYy0+bmFtZSwgX19mdW5jX18sIG1wdF9HZXRJb2NTdGF0ZShpb2MsIDApKTsKIAkJaWYgKHJldHJ5X2NvdW50ID09IDApIHsKIAkJCWlmIChtcHRfU29mdF9IYXJkX1Jlc2V0SGFuZGxlcihpb2MsIENBTl9TTEVFUCkgIT0gMCkKIAkJCQlyZXRyeV9jb3VudCsrOwpAQCAtNjk3MSw2ICs2OTgwLDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnRhc2ttZ210X2xvY2ssIGZsYWdzKTsKIAlpZiAoaW9jLT50YXNrbWdtdF9pbl9wcm9ncmVzcykgeworCQlpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzcyA9IDA7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+dGFza21nbXRfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtNzE0NCw3ICs3MTU0LDggQEAKIAlyYyA9IG1wdF9kb19pb2NfcmVjb3ZlcnkoaW9jLCBNUFRfSE9TVEVWRU5UX0lPQ19SRUNPVkVSLCBzbGVlcEZsYWcpOwogCWlmIChyYyAhPSAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgTVlOQU0KLQkJICAgICI6IFdBUk5JTkcgLSAoJWQpIENhbm5vdCByZWNvdmVyICVzXG4iLCByYywgaW9jLT5uYW1lKTsKKwkJICAgICAgICI6IFdBUk5JTkcgLSAoJWQpIENhbm5vdCByZWNvdmVyICVzLCBkb29yYmVsbD0weCUwOHhcbiIsCisJCSAgICAgICByYywgaW9jLT5uYW1lLCBtcHRfR2V0SW9jU3RhdGUoaW9jLCAwKSk7CiAJfSBlbHNlIHsKIAkJaWYgKGlvYy0+aGFyZF9yZXNldHMgPCAtMSkKIAkJCWlvYy0+aGFyZF9yZXNldHMrKzsKQEAgLTc5OTcsNyArODAwOCw3IEBACiAgKglSZWZlciB0byBsc2kvbXBpX2xvZ19zYXMuaC4KICAqKi8KIHN0YXRpYyB2b2lkCi1tcHRfc2FzX2xvZ19pbmZvKE1QVF9BREFQVEVSICppb2MsIHUzMiBsb2dfaW5mbykKK21wdF9zYXNfbG9nX2luZm8oTVBUX0FEQVBURVIgKmlvYywgdTMyIGxvZ19pbmZvLCB1OCBjYl9pZHgpCiB7CiB1bmlvbiBsb2dpbmZvX3R5cGUgewogCXUzMglsb2dpbmZvOwpAQCAtODA1MSwyMSArODA2MiwyMiBAQAogCWlmIChzdWJfY29kZV9kZXNjICE9IE5VTEwpCiAJCXByaW50ayhNWUlPQ19zX0lORk9fRk1UCiAJCQkiTG9nSW5mbygweCUwOHgpOiBPcmlnaW5hdG9yPXslc30sIENvZGU9eyVzfSwiCi0JCQkiIFN1YkNvZGU9eyVzfVxuIiwKKwkJCSIgU3ViQ29kZT17JXN9IGNiX2lkeCAlc1xuIiwKIAkJCWlvYy0+bmFtZSwgbG9nX2luZm8sIG9yaWdpbmF0b3JfZGVzYywgY29kZV9kZXNjLAotCQkJc3ViX2NvZGVfZGVzYyk7CisJCQlzdWJfY29kZV9kZXNjLCBNcHRDYWxsYmFja3NOYW1lW2NiX2lkeF0pOwogCWVsc2UgaWYgKGNvZGVfZGVzYyAhPSBOVUxMKQogCQlwcmludGsoTVlJT0Nfc19JTkZPX0ZNVAogCQkJIkxvZ0luZm8oMHglMDh4KTogT3JpZ2luYXRvcj17JXN9LCBDb2RlPXslc30sIgotCQkJIiBTdWJDb2RlKDB4JTA0eClcbiIsCisJCQkiIFN1YkNvZGUoMHglMDR4KSBjYl9pZHggJXNcbiIsCiAJCQlpb2MtPm5hbWUsIGxvZ19pbmZvLCBvcmlnaW5hdG9yX2Rlc2MsIGNvZGVfZGVzYywKLQkJCXNhc19sb2dpbmZvLmR3LnN1YmNvZGUpOworCQkJc2FzX2xvZ2luZm8uZHcuc3ViY29kZSwgTXB0Q2FsbGJhY2tzTmFtZVtjYl9pZHhdKTsKIAllbHNlCiAJCXByaW50ayhNWUlPQ19zX0lORk9fRk1UCiAJCQkiTG9nSW5mbygweCUwOHgpOiBPcmlnaW5hdG9yPXslc30sIENvZGU9KDB4JTAyeCksIgotCQkJIiBTdWJDb2RlKDB4JTA0eClcbiIsCisJCQkiIFN1YkNvZGUoMHglMDR4KSBjYl9pZHggJXNcbiIsCiAJCQlpb2MtPm5hbWUsIGxvZ19pbmZvLCBvcmlnaW5hdG9yX2Rlc2MsCi0JCQlzYXNfbG9naW5mby5kdy5jb2RlLCBzYXNfbG9naW5mby5kdy5zdWJjb2RlKTsKKwkJCXNhc19sb2dpbmZvLmR3LmNvZGUsIHNhc19sb2dpbmZvLmR3LnN1YmNvZGUsCisJCQlNcHRDYWxsYmFja3NOYW1lW2NiX2lkeF0pOwogfQogCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCkBAIC04NDMwLDcgKzg0NDIsOCBAQAogCS8qICBSZWdpc3RlciBvdXJzZWx2ZXMgKG1wdGJhc2UpIGluIG9yZGVyIHRvIGZhY2lsaXRhdGUKIAkgKiAgRXZlbnROb3RpZmljYXRpb24gaGFuZGxpbmcuCiAJICovCi0JbXB0X2Jhc2VfaW5kZXggPSBtcHRfcmVnaXN0ZXIobXB0YmFzZV9yZXBseSwgTVBUQkFTRV9EUklWRVIpOworCW1wdF9iYXNlX2luZGV4ID0gbXB0X3JlZ2lzdGVyKG1wdGJhc2VfcmVwbHksIE1QVEJBU0VfRFJJVkVSLAorCSAgICAibXB0YmFzZV9yZXBseSIpOwogCiAJLyogUmVnaXN0ZXIgZm9yIGhhcmQgcmVzZXQgaGFuZGxpbmcgY2FsbGJhY2tzLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmggYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaAppbmRleCBiNjEzZWIzLi4yM2VkM2RlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaAorKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaApAQCAtNzYsOCArNzYsOCBAQAogI2RlZmluZSBDT1BZUklHSFQJIkNvcHlyaWdodCAoYykgMTk5OS0yMDA4ICIgTU9EVUxFQVVUSE9SCiAjZW5kaWYKIAotI2RlZmluZSBNUFRfTElOVVhfVkVSU0lPTl9DT01NT04JIjMuMDQuMTUiCi0jZGVmaW5lIE1QVF9MSU5VWF9QQUNLQUdFX05BTUUJCSJAKCMpbXB0bGludXgtMy4wNC4xNSIKKyNkZWZpbmUgTVBUX0xJTlVYX1ZFUlNJT05fQ09NTU9OCSIzLjA0LjE3IgorI2RlZmluZSBNUFRfTElOVVhfUEFDS0FHRV9OQU1FCQkiQCgjKW1wdGxpbnV4LTMuMDQuMTciCiAjZGVmaW5lIFdIQVRfTUFHSUNfU1RSSU5HCQkiQCIgIigiICIjIiAiKSIKIAogI2RlZmluZSBzaG93X21wdG1vZF92ZXIocyx2ZXIpICBcCkBAIC0zOTYsNiArMzk2LDggQEAKIAl1OAkJCSByYWlkVm9sdW1lOwkvKiBzZXQsIGlmIFJBSUQgVm9sdW1lICovCiAJdTgJCQkgdHlwZTsJCS8qIGJ5dGUgMCBvZiBJbnF1aXJ5IGRhdGEgKi8KIAl1OAkJCSBkZWxldGVkOwkvKiB0YXJnZXQgaW4gcHJvY2VzcyBvZiBiZWluZyByZW1vdmVkICovCisJdTgJCQkgaW5ETUQ7CQkvKiBjdXJyZW50bHkgaW4gdGhlIGRldmljZQorCQkJCQkJICAgcmVtb3ZhbCBkZWxheSB0aW1lciAqLwogCXUzMgkJCSBudW1fbHVuczsKIH0gVmlydFRhcmdldDsKIApAQCAtNTgwLDYgKzU4Miw3IEBACiB0eXBlZGVmIHZvaWQgKCpNUFRfQUREX1NHRSkodm9pZCAqcEFkZHIsIHUzMiBmbGFnc2xlbmd0aCwgZG1hX2FkZHJfdCBkbWFfYWRkcik7CiB0eXBlZGVmIHZvaWQgKCpNUFRfQUREX0NIQUlOKSh2b2lkICpwQWRkciwgdTggbmV4dCwgdTE2IGxlbmd0aCwKIAkJZG1hX2FkZHJfdCBkbWFfYWRkcik7Cit0eXBlZGVmIHZvaWQgKCpNUFRfU0NIRURVTEVfVEFSR0VUX1JFU0VUKSh2b2lkICppb2MpOwogCiAvKgogICogIEFkYXB0ZXIgU3RydWN0dXJlIC0gcGNpX2RldiBzcGVjaWZpYy4gTWF4aW11bTogTVBUX01BWF9BREFQVEVSUwpAQCAtNjAxLDcgKzYwNCw3IEBACiAJdTE2CQkJIG52ZGF0YV92ZXJzaW9uX2RlZmF1bHQ7CiAJaW50CQkJIGRlYnVnX2xldmVsOwogCXU4CQkJIGlvX21pc3NpbmdfZGVsYXk7Ci0JdTgJCQkgZGV2aWNlX21pc3NpbmdfZGVsYXk7CisJdTE2CQkJIGRldmljZV9taXNzaW5nX2RlbGF5OwogCVNZU0lGX1JFR1MgX19pb21lbQkqY2hpcDsJCS8qID09IGM4ODE3MDAwIChtbWFwKSAqLwogCVNZU0lGX1JFR1MgX19pb21lbQkqcGlvX2NoaXA7CS8qIFByb2dyYW1tZWQgSU8gKGRvd25sb2FkYm9vdCkgKi8KIAl1OAkJCSBidXNfdHlwZTsKQEAgLTczOCw2ICs3NDEsNyBAQAogCWludAkJCSB0YXNrbWdtdF9pbl9wcm9ncmVzczsKIAl1OAkJCSB0YXNrbWdtdF9xdWllc2NlX2lvOwogCXU4CQkJIGlvY19yZXNldF9pbl9wcm9ncmVzczsKKwlNUFRfU0NIRURVTEVfVEFSR0VUX1JFU0VUIHNjaGVkdWxlX3RhcmdldF9yZXNldDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJIHNhc19wZXJzaXN0X3Rhc2s7CiAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJIGZjX3NldHVwX3Jlc2V0X3dvcms7CkBAIC05MjIsNyArOTI2LDggQEAKIGV4dGVybiBpbnQJIG1wdF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwogZXh0ZXJuIGludAkgbXB0X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiAjZW5kaWYKLWV4dGVybiB1OAkgbXB0X3JlZ2lzdGVyKE1QVF9DQUxMQkFDSyBjYmZ1bmMsIE1QVF9EUklWRVJfQ0xBU1MgZGNsYXNzKTsKK2V4dGVybiB1OAkgbXB0X3JlZ2lzdGVyKE1QVF9DQUxMQkFDSyBjYmZ1bmMsIE1QVF9EUklWRVJfQ0xBU1MgZGNsYXNzLAorCQljaGFyICpmdW5jX25hbWUpOwogZXh0ZXJuIHZvaWQJIG1wdF9kZXJlZ2lzdGVyKHU4IGNiX2lkeCk7CiBleHRlcm4gaW50CSBtcHRfZXZlbnRfcmVnaXN0ZXIodTggY2JfaWR4LCBNUFRfRVZIQU5ETEVSIGV2X2NiZnVuYyk7CiBleHRlcm4gdm9pZAkgbXB0X2V2ZW50X2RlcmVnaXN0ZXIodTggY2JfaWR4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5jCmluZGV4IGYwNmIyOTEuLmQ4ZGRmZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuYwpAQCAtMjYxLDEwICsyNjEsMTYgQEAKIAkvKiBXZSBhcmUgZG9uZSwgaXNzdWUgd2FrZSB1cAogCSAqLwogCWlmIChpb2MtPmlvY3RsX2NtZHMuc3RhdHVzICYgTVBUX01HTVRfU1RBVFVTX1BFTkRJTkcpIHsKLQkJaWYgKHJlcS0+dS5oZHIuRnVuY3Rpb24gPT0gTVBJX0ZVTkNUSU9OX1NDU0lfVEFTS19NR01UKQorCQlpZiAocmVxLT51Lmhkci5GdW5jdGlvbiA9PSBNUElfRlVOQ1RJT05fU0NTSV9UQVNLX01HTVQpIHsKIAkJCW1wdF9jbGVhcl90YXNrbWdtdF9pbl9wcm9ncmVzc19mbGFnKGlvYyk7Ci0JCWlvYy0+aW9jdGxfY21kcy5zdGF0dXMgJj0gfk1QVF9NR01UX1NUQVRVU19QRU5ESU5HOwotCQljb21wbGV0ZSgmaW9jLT5pb2N0bF9jbWRzLmRvbmUpOworCQkJaW9jLT5pb2N0bF9jbWRzLnN0YXR1cyAmPSB+TVBUX01HTVRfU1RBVFVTX1BFTkRJTkc7CisJCQljb21wbGV0ZSgmaW9jLT5pb2N0bF9jbWRzLmRvbmUpOworCQkJaWYgKGlvYy0+YnVzX3R5cGUgPT0gU0FTKQorCQkJCWlvYy0+c2NoZWR1bGVfdGFyZ2V0X3Jlc2V0KGlvYyk7CisJCX0gZWxzZSB7CisJCQlpb2MtPmlvY3RsX2NtZHMuc3RhdHVzICY9IH5NUFRfTUdNVF9TVEFUVVNfUEVORElORzsKKwkJCWNvbXBsZXRlKCZpb2MtPmlvY3RsX2NtZHMuZG9uZSk7CisJCX0KIAl9CiAKICBvdXRfY29udGludWF0aW9uOgpAQCAtMjk4LDYgKzMwNCw4IEBACiAJCW1wdF9jbGVhcl90YXNrbWdtdF9pbl9wcm9ncmVzc19mbGFnKGlvYyk7CiAJCWlvYy0+dGFza21nbXRfY21kcy5zdGF0dXMgJj0gfk1QVF9NR01UX1NUQVRVU19QRU5ESU5HOwogCQljb21wbGV0ZSgmaW9jLT50YXNrbWdtdF9jbWRzLmRvbmUpOworCQlpZiAoaW9jLT5idXNfdHlwZSA9PSBTQVMpCisJCQlpb2MtPnNjaGVkdWxlX3RhcmdldF9yZXNldChpb2MpOwogCQlyZXR1cm4gMTsKIAl9CiAJcmV0dXJuIDA7CkBAIC05NDYsOSArOTU0LDEyIEBACiAJCQltcHRfZnJlZV9tc2dfZnJhbWUoaW9jcCwgbWYpOwogCQkJZ290byBmd2RsX291dDsKIAkJfQotCQlpZiAoIXRpbWVsZWZ0KQorCQlpZiAoIXRpbWVsZWZ0KSB7CisJCQlwcmludGsoTVlJT0Nfc19XQVJOX0ZNVAorCQkJICAgICAgICJGVyBkb3dubG9hZCB0aW1lb3V0LCBkb29yYmVsbD0weCUwOHhcbiIsCisJCQkgICAgICAgaW9jcC0+bmFtZSwgbXB0X0dldElvY1N0YXRlKGlvY3AsIDApKTsKIAkJCW1wdGN0bF90aW1lb3V0X2V4cGlyZWQoaW9jcCwgbWYpOwotCQllbHNlCisJCX0gZWxzZQogCQkJZ290byByZXRyeV93YWl0OwogCQlnb3RvIGZ3ZGxfb3V0OwogCX0KQEAgLTIyOTMsNiArMjMwNCwxMCBAQAogCQkJZ290byBkb25lX2ZyZWVfbWVtOwogCQl9CiAJCWlmICghdGltZWxlZnQpIHsKKwkJCXByaW50ayhNWUlPQ19zX1dBUk5fRk1UCisJCQkgICAgICAgIm1wdCBjbWQgdGltZW91dCwgZG9vcmJlbGw9MHglMDh4IgorCQkJICAgICAgICIgZnVuY3Rpb249MHgleFxuIiwKKwkJCSAgICAgICBpb2MtPm5hbWUsIG1wdF9HZXRJb2NTdGF0ZShpb2MsIDApLCBmdW5jdGlvbik7CiAJCQlpZiAoZnVuY3Rpb24gPT0gTVBJX0ZVTkNUSU9OX1NDU0lfVEFTS19NR01UKQogCQkJCW11dGV4X3VubG9jaygmaW9jLT50YXNrbWdtdF9jbWRzLm11dGV4KTsKIAkJCW1wdGN0bF90aW1lb3V0X2V4cGlyZWQoaW9jLCBtZik7CkBAIC0yNjAwLDkgKzI2MTUsMTIgQEAKIAkJCW1wdF9mcmVlX21zZ19mcmFtZShpb2MsIG1mKTsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCWlmICghdGltZWxlZnQpCisJCWlmICghdGltZWxlZnQpIHsKKwkJCXByaW50ayhNWUlPQ19zX1dBUk5fRk1UCisJCQkgICAgICAgIkhPU1QgSU5GTyBjb21tYW5kIHRpbWVvdXQsIGRvb3JiZWxsPTB4JTA4eFxuIiwKKwkJCSAgICAgICBpb2MtPm5hbWUsIG1wdF9HZXRJb2NTdGF0ZShpb2MsIDApKTsKIAkJCW1wdGN0bF90aW1lb3V0X2V4cGlyZWQoaW9jLCBtZik7Ci0JCWVsc2UKKwkJfSBlbHNlCiAJCQlnb3RvIHJldHJ5X3dhaXQ7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTMwMDAsNyArMzAxOCw4IEBACiAJICogIEluc3RhbGwgb3VyIGhhbmRsZXIKIAkgKi8KIAkrK3doZXJlOwotCW1wdGN0bF9pZCA9IG1wdF9yZWdpc3RlcihtcHRjdGxfcmVwbHksIE1QVENUTF9EUklWRVIpOworCW1wdGN0bF9pZCA9IG1wdF9yZWdpc3RlcihtcHRjdGxfcmVwbHksIE1QVENUTF9EUklWRVIsCisJICAgICJtcHRjdGxfcmVwbHkiKTsKIAlpZiAoIW1wdGN0bF9pZCB8fCBtcHRjdGxfaWQgPj0gTVBUX01BWF9QUk9UT0NPTF9EUklWRVJTKSB7CiAJCXByaW50ayhLRVJOX0VSUiBNWU5BTSAiOiBFUlJPUjogRmFpbGVkIHRvIHJlZ2lzdGVyIHdpdGggRnVzaW9uIE1QVCBiYXNlIGRyaXZlclxuIik7CiAJCW1pc2NfZGVyZWdpc3RlcigmbXB0Y3RsX21pc2NkZXYpOwpAQCAtMzAwOCw3ICszMDI3LDggQEAKIAkJZ290byBvdXRfZmFpbDsKIAl9CiAKLQltcHRjdGxfdGFza21nbXRfaWQgPSBtcHRfcmVnaXN0ZXIobXB0Y3RsX3Rhc2ttZ210X3JlcGx5LCBNUFRDVExfRFJJVkVSKTsKKwltcHRjdGxfdGFza21nbXRfaWQgPSBtcHRfcmVnaXN0ZXIobXB0Y3RsX3Rhc2ttZ210X3JlcGx5LCBNUFRDVExfRFJJVkVSLAorCSAgICAibXB0Y3RsX3Rhc2ttZ210X3JlcGx5Iik7CiAJaWYgKCFtcHRjdGxfdGFza21nbXRfaWQgfHwgbXB0Y3RsX3Rhc2ttZ210X2lkID49IE1QVF9NQVhfUFJPVE9DT0xfRFJJVkVSUykgewogCQlwcmludGsoS0VSTl9FUlIgTVlOQU0gIjogRVJST1I6IEZhaWxlZCB0byByZWdpc3RlciB3aXRoIEZ1c2lvbiBNUFQgYmFzZSBkcml2ZXJcbiIpOwogCQltcHRfZGVyZWdpc3RlcihtcHRjdGxfaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRmYy5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRmYy5jCmluZGV4IGI1ZjAzYWQuLmUxNTIyMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0ZmMuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMKQEAgLTE0NzIsOSArMTQ3MiwxMiBAQAogCWlmICghbXB0ZmNfdHJhbnNwb3J0X3RlbXBsYXRlKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCW1wdGZjRG9uZUN0eCA9IG1wdF9yZWdpc3RlcihtcHRzY3NpaF9pb19kb25lLCBNUFRGQ19EUklWRVIpOwotCW1wdGZjVGFza0N0eCA9IG1wdF9yZWdpc3RlcihtcHRzY3NpaF90YXNrbWdtdF9jb21wbGV0ZSwgTVBURkNfRFJJVkVSKTsKLQltcHRmY0ludGVybmFsQ3R4ID0gbXB0X3JlZ2lzdGVyKG1wdHNjc2loX3NjYW5kdl9jb21wbGV0ZSwgTVBURkNfRFJJVkVSKTsKKwltcHRmY0RvbmVDdHggPSBtcHRfcmVnaXN0ZXIobXB0c2NzaWhfaW9fZG9uZSwgTVBURkNfRFJJVkVSLAorCSAgICAibXB0c2NzaWhfc2NhbmR2X2NvbXBsZXRlIik7CisJbXB0ZmNUYXNrQ3R4ID0gbXB0X3JlZ2lzdGVyKG1wdHNjc2loX3Rhc2ttZ210X2NvbXBsZXRlLCBNUFRGQ19EUklWRVIsCisJICAgICJtcHRzY3NpaF9zY2FuZHZfY29tcGxldGUiKTsKKwltcHRmY0ludGVybmFsQ3R4ID0gbXB0X3JlZ2lzdGVyKG1wdHNjc2loX3NjYW5kdl9jb21wbGV0ZSwgTVBURkNfRFJJVkVSLAorCSAgICAibXB0c2NzaWhfc2NhbmR2X2NvbXBsZXRlIik7CiAKIAltcHRfZXZlbnRfcmVnaXN0ZXIobXB0ZmNEb25lQ3R4LCBtcHRmY19ldmVudF9wcm9jZXNzKTsKIAltcHRfcmVzZXRfcmVnaXN0ZXIobXB0ZmNEb25lQ3R4LCBtcHRmY19pb2NfcmVzZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRsYW4uYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0bGFuLmMKaW5kZXggNGZhOTY2NS4uY2JlOTYwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRsYW4uYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGxhbi5jCkBAIC0xNDUyLDcgKzE0NTIsOSBAQAogewogCXNob3dfbXB0bW9kX3ZlcihMQU5BTUUsIExBTlZFUik7CiAKLQlpZiAoKExhbkN0eCA9IG1wdF9yZWdpc3RlcihsYW5fcmVwbHksIE1QVExBTl9EUklWRVIpKSA8PSAwKSB7CisJTGFuQ3R4ID0gbXB0X3JlZ2lzdGVyKGxhbl9yZXBseSwgTVBUTEFOX0RSSVZFUiwKKwkJCQkibGFuX3JlcGx5Iik7CisJaWYgKExhbkN0eCA8PSAwKSB7CiAJCXByaW50ayAoS0VSTl9FUlIgTVlOQU0gIjogRmFpbGVkIHRvIHJlZ2lzdGVyIHdpdGggTVBUIGJhc2UgZHJpdmVyXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYwppbmRleCBhYzAwMGU4Li44M2E1MTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnQuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfZGJnLmg+CiAKICNpbmNsdWRlICJtcHRiYXNlLmgiCkBAIC0xMjYsNiArMTI3LDcgQEAKIHN0YXRpYyB2b2lkIG1wdHNhc19icm9hZGNhc3RfcHJpbWF0aXZlX3dvcmsoc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50KTsKIHN0YXRpYyB2b2lkIG1wdHNhc19oYW5kbGVfcXVldWVfZnVsbF9ldmVudChzdHJ1Y3QgZndfZXZlbnRfd29yayAqZndfZXZlbnQpOwogc3RhdGljIHZvaWQgbXB0c2FzX3ZvbHVtZV9kZWxldGUoTVBUX0FEQVBURVIgKmlvYywgdTggaWQpOwordm9pZAltcHRzYXNfc2NoZWR1bGVfdGFyZ2V0X3Jlc2V0KHZvaWQgKmlvYyk7CiAKIHN0YXRpYyB2b2lkIG1wdHNhc19wcmludF9waHlfZGF0YShNUFRfQURBUFRFUiAqaW9jLAogCQkJCQlNUElfU0FTX0lPX1VOSVQwX1BIWV9EQVRBICpwaHlfZGF0YSkKQEAgLTExMzksNiArMTE0MSw0NCBAQAogfQogCiAvKioKKyAqIG1wdHNhc19zY2hlZHVsZV90YXJnZXRfcmVzZXQtIHNlbmQgcGVuZGluZyB0YXJnZXQgcmVzZXQKKyAqIEBpb2NwOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZGVsZXRlIHNjaGVkdWxlZCB0YXJnZXQgcmVzZXQgZnJvbSB0aGUgbGlzdCBhbmQKKyAqIHRyeSB0byBzZW5kIG5leHQgdGFyZ2V0IHJlc2V0LiBUaGlzIHdpbGwgYmUgY2FsbGVkIGZyb20gY29tcGxldGlvbgorICogY29udGV4dCBvZiBhbnkgVGFzayBtYW5hZ21lbnQgY29tbWFuZC4KKyAqLworCit2b2lkCittcHRzYXNfc2NoZWR1bGVfdGFyZ2V0X3Jlc2V0KHZvaWQgKmlvY3ApCit7CisJTVBUX0FEQVBURVIgKmlvYyA9IChNUFRfQURBUFRFUiAqKShpb2NwKTsKKwlNUFRfU0NTSV9IT1NUCSpoZCA9IHNob3N0X3ByaXYoaW9jLT5zaCk7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZoZC0+dGFyZ2V0X3Jlc2V0X2xpc3Q7CisJc3RydWN0IG1wdHNhc190YXJnZXRfcmVzZXRfZXZlbnQJKnRhcmdldF9yZXNldF9saXN0OworCXU4CQlpZCwgY2hhbm5lbDsKKwkvKgorCSAqIGlzc3VlIHRhcmdldCByZXNldCB0byBuZXh0IGRldmljZSBpbiB0aGUgcXVldWUKKwkgKi8KKworCWhlYWQgPSAmaGQtPnRhcmdldF9yZXNldF9saXN0OworCWlmIChsaXN0X2VtcHR5KGhlYWQpKQorCQlyZXR1cm47CisKKwl0YXJnZXRfcmVzZXRfbGlzdCA9IGxpc3RfZW50cnkoaGVhZC0+bmV4dCwKKwkJc3RydWN0IG1wdHNhc190YXJnZXRfcmVzZXRfZXZlbnQsIGxpc3QpOworCisJaWQgPSB0YXJnZXRfcmVzZXRfbGlzdC0+c2FzX2V2ZW50X2RhdGEuVGFyZ2V0SUQ7CisJY2hhbm5lbCA9IHRhcmdldF9yZXNldF9saXN0LT5zYXNfZXZlbnRfZGF0YS5CdXM7CisJdGFyZ2V0X3Jlc2V0X2xpc3QtPnRpbWVfY291bnQgPSBqaWZmaWVzOworCisJaWYgKG1wdHNhc190YXJnZXRfcmVzZXQoaW9jLCBjaGFubmVsLCBpZCkpCisJCXRhcmdldF9yZXNldF9saXN0LT50YXJnZXRfcmVzZXRfaXNzdWVkID0gMTsKKwlyZXR1cm47Cit9CisKKworLyoqCiAgKgltcHRzYXNfdGFza21nbXRfY29tcGxldGUgLSBjb21wbGV0ZSBTQVMgdGFzayBtYW5hZ2VtZW50IGZ1bmN0aW9uCiAgKglAaW9jOiBQb2ludGVyIHRvIE1QVF9BREFQVEVSIHN0cnVjdHVyZQogICoKQEAgLTEyMjIsMjggKzEyNjIsMTIgQEAKIAkgKiBlbmFibGUgd29yayBxdWV1ZSB0byByZW1vdmUgZGV2aWNlIGZyb20gdXBwZXIgbGF5ZXJzCiAJICovCiAJbGlzdF9kZWwoJnRhcmdldF9yZXNldF9saXN0LT5saXN0KTsKLQlpZiAoKG1wdHNhc19maW5kX3Z0YXJnZXQoaW9jLCBjaGFubmVsLCBpZCkpICYmICFpb2MtPmZ3X2V2ZW50c19vZmYpCisJaWYgKCFpb2MtPmZ3X2V2ZW50c19vZmYpCiAJCW1wdHNhc19xdWV1ZV9kZXZpY2VfZGVsZXRlKGlvYywKIAkJCSZ0YXJnZXRfcmVzZXRfbGlzdC0+c2FzX2V2ZW50X2RhdGEpOwogCiAKLQkvKgotCSAqIGlzc3VlIHRhcmdldCByZXNldCB0byBuZXh0IGRldmljZSBpbiB0aGUgcXVldWUKLQkgKi8KLQotCWhlYWQgPSAmaGQtPnRhcmdldF9yZXNldF9saXN0OwotCWlmIChsaXN0X2VtcHR5KGhlYWQpKQotCQlyZXR1cm4gMTsKLQotCXRhcmdldF9yZXNldF9saXN0ID0gbGlzdF9lbnRyeShoZWFkLT5uZXh0LCBzdHJ1Y3QgbXB0c2FzX3RhcmdldF9yZXNldF9ldmVudCwKLQkgICAgbGlzdCk7Ci0KLQlpZCA9IHRhcmdldF9yZXNldF9saXN0LT5zYXNfZXZlbnRfZGF0YS5UYXJnZXRJRDsKLQljaGFubmVsID0gdGFyZ2V0X3Jlc2V0X2xpc3QtPnNhc19ldmVudF9kYXRhLkJ1czsKLQl0YXJnZXRfcmVzZXRfbGlzdC0+dGltZV9jb3VudCA9IGppZmZpZXM7Ci0KLQlpZiAobXB0c2FzX3RhcmdldF9yZXNldChpb2MsIGNoYW5uZWwsIGlkKSkKLQkJdGFyZ2V0X3Jlc2V0X2xpc3QtPnRhcmdldF9yZXNldF9pc3N1ZWQgPSAxOworCWlvYy0+c2NoZWR1bGVfdGFyZ2V0X3Jlc2V0KGlvYyk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTE4ODksNiArMTkxMyw0OCBAQAogCXJldHVybiBtcHRzY3NpaF9xY21kKFNDcG50LGRvbmUpOwogfQogCisvKioKKyAqCW1wdHNhc19tcHRzYXNfZWhfdGltZWRfb3V0IC0gcmVzZXRzIHRoZSBzY3NpX2NtbmQgdGltZW91dAorICoJCWlmIHRoZSBkZXZpY2UgdW5kZXIgcXVlc3Rpb24gaXMgY3VycmVudGx5IGluIHRoZQorICoJCWRldmljZSByZW1vdmFsIGRlbGF5LgorICoJQHNjOiBzY3NpIGNvbW1hbmQgdGhhdCB0aGUgbWlkbGF5ZXIgaXMgYWJvdXQgdG8gdGltZSBvdXQKKyAqCisgKiovCitzdGF0aWMgZW51bSBibGtfZWhfdGltZXJfcmV0dXJuIG1wdHNhc19laF90aW1lZF9vdXQoc3RydWN0IHNjc2lfY21uZCAqc2MpCit7CisJTVBUX1NDU0lfSE9TVCAqaGQ7CisJTVBUX0FEQVBURVIgICAqaW9jOworCVZpcnREZXZpY2UgICAgKnZkZXZpY2U7CisJZW51bSBibGtfZWhfdGltZXJfcmV0dXJuIHJjID0gQkxLX0VIX05PVF9IQU5ETEVEOworCisJaGQgPSBzaG9zdF9wcml2KHNjLT5kZXZpY2UtPmhvc3QpOworCWlmIChoZCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiBNWU5BTSAiOiAlczogQ2FuJ3QgbG9jYXRlIGhvc3QhIChzYz0lcClcbiIsCisJCSAgICBfX2Z1bmNfXywgc2MpOworCQlnb3RvIGRvbmU7CisJfQorCisJaW9jID0gaGQtPmlvYzsKKwlpZiAoaW9jLT5idXNfdHlwZSAhPSBTQVMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIE1ZTkFNICI6ICVzOiBXcm9uZyBidXMgdHlwZSAoc2M9JXApXG4iLAorCQkgICAgX19mdW5jX18sIHNjKTsKKwkJZ290byBkb25lOworCX0KKworCXZkZXZpY2UgPSBzYy0+ZGV2aWNlLT5ob3N0ZGF0YTsKKwlpZiAodmRldmljZSAmJiB2ZGV2aWNlLT52dGFyZ2V0ICYmICh2ZGV2aWNlLT52dGFyZ2V0LT5pbkRNRAorCQl8fCB2ZGV2aWNlLT52dGFyZ2V0LT5kZWxldGVkKSkgeworCQlkdG1wcmludGsoaW9jLCBwcmludGsoTVlJT0Nfc19XQVJOX0ZNVCAiOiAlczogdGFyZ2V0IHJlbW92ZWQgIgorCQkgICAgIm9yIGluIGRldmljZSByZW1vdmFsIGRlbGF5IChzYz0lcClcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fLCBzYykpOworCQlyYyA9IEJMS19FSF9SRVNFVF9USU1FUjsKKwkJZ290byBkb25lOworCX0KKworZG9uZToKKwlyZXR1cm4gcmM7Cit9CisKIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgbXB0c2FzX2RyaXZlcl90ZW1wbGF0ZSA9IHsKIAkubW9kdWxlCQkJCT0gVEhJU19NT0RVTEUsCkBAIC0yMzY0LDcgKzI0MzAsNyBAQAogCVNhc0lPVW5pdFBhZ2UxX3QgKmJ1ZmZlcjsKIAlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CiAJaW50IGVycm9yOwotCXUxNiBkZXZpY2VfbWlzc2luZ19kZWxheTsKKwl1OCBkZXZpY2VfbWlzc2luZ19kZWxheTsKIAogCW1lbXNldCgmaGRyLCAwLCBzaXplb2YoQ29uZmlnRXh0ZW5kZWRQYWdlSGVhZGVyX3QpKTsKIAltZW1zZXQoJmNmZywgMCwgc2l6ZW9mKENPTkZJR1BBUk1TKSk7CkBAIC0yNDAxLDcgKzI0NjcsNyBAQAogCiAJaW9jLT5pb19taXNzaW5nX2RlbGF5ICA9CiAJICAgIGxlMTZfdG9fY3B1KGJ1ZmZlci0+SU9EZXZpY2VNaXNzaW5nRGVsYXkpOwotCWRldmljZV9taXNzaW5nX2RlbGF5ID0gbGUxNl90b19jcHUoYnVmZmVyLT5SZXBvcnREZXZpY2VNaXNzaW5nRGVsYXkpOworCWRldmljZV9taXNzaW5nX2RlbGF5ID0gYnVmZmVyLT5SZXBvcnREZXZpY2VNaXNzaW5nRGVsYXk7CiAJaW9jLT5kZXZpY2VfbWlzc2luZ19kZWxheSA9IChkZXZpY2VfbWlzc2luZ19kZWxheSAmIE1QSV9TQVNfSU9VTklUMV9SRVBPUlRfTUlTU0lOR19VTklUXzE2KSA/CiAJICAgIChkZXZpY2VfbWlzc2luZ19kZWxheSAmIE1QSV9TQVNfSU9VTklUMV9SRVBPUlRfTUlTU0lOR19USU1FT1VUX01BU0spICogMTYgOgogCSAgICBkZXZpY2VfbWlzc2luZ19kZWxheSAmIE1QSV9TQVNfSU9VTklUMV9SRVBPUlRfTUlTU0lOR19USU1FT1VUX01BU0s7CkBAIC0yNTQ5LDYgKzI2MTUsNyBAQAogCWRldmljZV9pbmZvLT5zYXNfYWRkcmVzcyA9IGxlNjRfdG9fY3B1KHNhc19hZGRyZXNzKTsKIAlkZXZpY2VfaW5mby0+ZGV2aWNlX2luZm8gPQogCSAgICBsZTMyX3RvX2NwdShidWZmZXItPkRldmljZUluZm8pOworCWRldmljZV9pbmZvLT5mbGFncyA9IGxlMTZfdG9fY3B1KGJ1ZmZlci0+RmxhZ3MpOwogCiAgb3V0X2ZyZWVfY29uc2lzdGVudDoKIAlwY2lfZnJlZV9jb25zaXN0ZW50KGlvYy0+cGNpZGV2LCBoZHIuRXh0UGFnZUxlbmd0aCAqIDQsCkBAIC0yOTYwLDYgKzMwMjcsNyBAQAogCXN0cnVjdCBzYXNfcGh5ICpwaHk7CiAJc3RydWN0IHNhc19wb3J0ICpwb3J0OwogCWludCBlcnJvciA9IDA7CisJVmlydFRhcmdldCAqdnRhcmdldDsKIAogCWlmICghZGV2KSB7CiAJCWVycm9yID0gLUVOT0RFVjsKQEAgLTMxODIsNiArMzI1MCwxNiBAQAogCQkJCQlycGh5X3RvX2V4cGFuZGVyX2RldmljZShycGh5KSk7CiAJfQogCisJLyogSWYgdGhlIGRldmljZSBleGlzdHMsdmVyaWZ5IGl0IHdhc24ndCBwcmV2aW91c2x5IGZsYWdnZWQKKwlhcyBhIG1pc3NpbmcgZGV2aWNlLiAgSWYgc28sIGNsZWFyIGl0ICovCisJdnRhcmdldCA9IG1wdHNhc19maW5kX3Z0YXJnZXQoaW9jLAorCSAgICBwaHlfaW5mby0+YXR0YWNoZWQuY2hhbm5lbCwKKwkgICAgcGh5X2luZm8tPmF0dGFjaGVkLmlkKTsKKwlpZiAodnRhcmdldCAmJiB2dGFyZ2V0LT5pbkRNRCkgeworCQlwcmludGsoS0VSTl9JTkZPICJEZXZpY2UgcmV0dXJuZWQsIHVuc2V0dGluZyBpbkRNRFxuIik7CisJCXZ0YXJnZXQtPmluRE1EID0gMDsKKwl9CisKICBvdXQ6CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMzYzNSw5ICszNzEzLDQyIEBACiAJCSAgICBNUElfU0FTX0lPVU5JVDBfUkFURV9GQUlMRURfU1BFRURfTkVHT1RJQVRJT04pCiAJCQlwaHlfaW5mby0+cGh5LT5uZWdvdGlhdGVkX2xpbmtyYXRlID0KIAkJCSAgICBTQVNfTElOS19SQVRFX0ZBSUxFRDsKLQkJZWxzZQorCQllbHNlIHsKIAkJCXBoeV9pbmZvLT5waHktPm5lZ290aWF0ZWRfbGlua3JhdGUgPQogCQkJICAgIFNBU19MSU5LX1JBVEVfVU5LTk9XTjsKKwkJCWlmIChpb2MtPmRldmljZV9taXNzaW5nX2RlbGF5ICYmCisJCQkgICAgbXB0c2FzX2lzX2VuZF9kZXZpY2UoJnBoeV9pbmZvLT5hdHRhY2hlZCkpIHsKKwkJCQlzdHJ1Y3Qgc2NzaV9kZXZpY2UJCSpzZGV2OworCQkJCVZpcnREZXZpY2UJCQkqdmRldmljZTsKKwkJCQl1OAljaGFubmVsLCBpZDsKKwkJCQlpZCA9IHBoeV9pbmZvLT5hdHRhY2hlZC5pZDsKKwkJCQljaGFubmVsID0gcGh5X2luZm8tPmF0dGFjaGVkLmNoYW5uZWw7CisJCQkJZGV2dHByaW50ayhpb2MsIHByaW50ayhNWUlPQ19zX0RFQlVHX0ZNVAorCQkJCSJMaW5rIGRvd24gZm9yIGZ3X2lkICVkOmZ3X2NoYW5uZWwgJWRcbiIsCisJCQkJICAgIGlvYy0+bmFtZSwgcGh5X2luZm8tPmF0dGFjaGVkLmlkLAorCQkJCSAgICBwaHlfaW5mby0+YXR0YWNoZWQuY2hhbm5lbCkpOworCisJCQkJc2hvc3RfZm9yX2VhY2hfZGV2aWNlKHNkZXYsIGlvYy0+c2gpIHsKKwkJCQkJdmRldmljZSA9IHNkZXYtPmhvc3RkYXRhOworCQkJCQlpZiAoKHZkZXZpY2UgPT0gTlVMTCkgfHwKKwkJCQkJCSh2ZGV2aWNlLT52dGFyZ2V0ID09IE5VTEwpKQorCQkJCQkJY29udGludWU7CisJCQkJCWlmICgodmRldmljZS0+dnRhcmdldC0+dGZsYWdzICYKKwkJCQkJICAgIE1QVF9UQVJHRVRfRkxBR1NfUkFJRF9DT01QT05FTlQgfHwKKwkJCQkJICAgIHZkZXZpY2UtPnZ0YXJnZXQtPnJhaWRWb2x1bWUpKQorCQkJCQkJY29udGludWU7CisJCQkJCWlmICh2ZGV2aWNlLT52dGFyZ2V0LT5pZCA9PSBpZCAmJgorCQkJCQkJdmRldmljZS0+dnRhcmdldC0+Y2hhbm5lbCA9PQorCQkJCQkJY2hhbm5lbCkKKwkJCQkJCWRldnRwcmludGsoaW9jLAorCQkJCQkJcHJpbnRrKE1ZSU9DX3NfREVCVUdfRk1UCisJCQkJCQkiU0RFViBPVVRTVEFORElORyBDTURTIgorCQkJCQkJIiVkXG4iLCBpb2MtPm5hbWUsCisJCQkJCQlzZGV2LT5kZXZpY2VfYnVzeSkpOworCQkJCX0KKworCQkJfQorCQl9CiAJfQogIG91dDoKIAltcHRzYXNfZnJlZV9md19ldmVudChpb2MsIGZ3X2V2ZW50KTsKQEAgLTM4NDAsNiArMzk1MSwxMyBAQAogCQkgICAgICBNUElfU0FTX0RFVklDRV9JTkZPX1NBVEFfREVWSUNFKSkgPT0gMCkKIAkJCWNvbnRpbnVlOwogCisJCS8qIElmIHRoZXJlIGlzIG5vIEZXIEJfVCBtYXBwaW5nIGZvciB0aGlzIGRldmljZSB0aGVuIGNvbnRpbnVlCisJCSAqICovCisJCWlmICghKHNhc19kZXZpY2UuZmxhZ3MgJiBNUElfU0FTX0RFVklDRTBfRkxBR1NfREVWSUNFX1BSRVNFTlQpCisJCQl8fCAhKHNhc19kZXZpY2UuZmxhZ3MgJgorCQkJTVBJX1NBU19ERVZJQ0UwX0ZMQUdTX0RFVklDRV9NQVBQRUQpKQorCQkJY29udGludWU7CisKIAkJcGh5X2luZm8gPSBtcHRzYXNfcmVmcmVzaGluZ19kZXZpY2VfaGFuZGxlcyhpb2MsICZzYXNfZGV2aWNlKTsKIAkJaWYgKCFwaHlfaW5mbykKIAkJCWNvbnRpbnVlOwpAQCAtNDE0OSw2ICs0MjY3LDE0IEBACiAJCQlwaHlzX2Rpc2suUGh5c0Rpc2tJRCkpCiAJCQljb250aW51ZTsKIAorCQkvKiBJZiB0aGVyZSBpcyBubyBGVyBCX1QgbWFwcGluZyBmb3IgdGhpcyBkZXZpY2UgdGhlbiBjb250aW51ZQorCQkgKiAqLworCQlpZiAoIShzYXNfZGV2aWNlLmZsYWdzICYgTVBJX1NBU19ERVZJQ0UwX0ZMQUdTX0RFVklDRV9QUkVTRU5UKQorCQkJfHwgIShzYXNfZGV2aWNlLmZsYWdzICYKKwkJCU1QSV9TQVNfREVWSUNFMF9GTEFHU19ERVZJQ0VfTUFQUEVEKSkKKwkJCWNvbnRpbnVlOworCisKIAkJcGh5X2luZm8gPSBtcHRzYXNfZmluZF9waHlpbmZvX2J5X3Nhc19hZGRyZXNzKGlvYywKIAkJICAgIHNhc19kZXZpY2Uuc2FzX2FkZHJlc3MpOwogCQltcHRzYXNfYWRkX2VuZF9kZXZpY2UoaW9jLCBwaHlfaW5mbyk7CkBAIC00MTcxLDYgKzQyOTcsNyBAQAogCXN0cnVjdCBtcHRzYXNfZGV2aW5mbyBzYXNfZGV2aWNlOwogCVZpcnRUYXJnZXQgKnZ0YXJnZXQ7CiAJaW50IGk7CisJc3RydWN0IG1wdHNhc19wb3J0aW5mbyAqcG9ydF9pbmZvOwogCiAJc3dpdGNoIChob3RfcGx1Z19pbmZvLT5ldmVudF90eXBlKSB7CiAKQEAgLTQxOTksMTIgKzQzMjYsNDcgQEAKIAkJICAgIChob3RfcGx1Z19pbmZvLT5jaGFubmVsIDw8IDgpICsKIAkJICAgIGhvdF9wbHVnX2luZm8tPmlkKTsKIAorCQkvKiBJZiB0aGVyZSBpcyBubyBGVyBCX1QgbWFwcGluZyBmb3IgdGhpcyBkZXZpY2UgdGhlbiBicmVhaworCQkgKiAqLworCQlpZiAoIShzYXNfZGV2aWNlLmZsYWdzICYgTVBJX1NBU19ERVZJQ0UwX0ZMQUdTX0RFVklDRV9QUkVTRU5UKQorCQkJfHwgIShzYXNfZGV2aWNlLmZsYWdzICYKKwkJCU1QSV9TQVNfREVWSUNFMF9GTEFHU19ERVZJQ0VfTUFQUEVEKSkKKwkJCWJyZWFrOworCiAJCWlmICghc2FzX2RldmljZS5oYW5kbGUpCiAJCQlyZXR1cm47CiAKIAkJcGh5X2luZm8gPSBtcHRzYXNfcmVmcmVzaGluZ19kZXZpY2VfaGFuZGxlcyhpb2MsICZzYXNfZGV2aWNlKTsKLQkJaWYgKCFwaHlfaW5mbykKKwkJLyogT25seSBGb3IgU0FUQSBEZXZpY2UgQUREICovCisJCWlmICghcGh5X2luZm8gJiYgKHNhc19kZXZpY2UuZGV2aWNlX2luZm8gJgorCQkJCU1QSV9TQVNfREVWSUNFX0lORk9fU0FUQV9ERVZJQ0UpKSB7CisJCQlkZXZ0cHJpbnRrKGlvYywgcHJpbnRrKE1ZSU9DX3NfREVCVUdfRk1UCisJCQkJIiVzICVkIFNBVEEgSE9UIFBMVUc6ICIKKwkJCQkicGFyZW50IGhhbmRsZSBvZiBkZXZpY2UgJXhcbiIsIGlvYy0+bmFtZSwKKwkJCQlfX2Z1bmNfXywgX19MSU5FX18sIHNhc19kZXZpY2UuaGFuZGxlX3BhcmVudCkpOworCQkJcG9ydF9pbmZvID0gbXB0c2FzX2ZpbmRfcG9ydGluZm9fYnlfaGFuZGxlKGlvYywKKwkJCQlzYXNfZGV2aWNlLmhhbmRsZV9wYXJlbnQpOworCisJCQlpZiAocG9ydF9pbmZvID09IGlvYy0+aGJhX3BvcnRfaW5mbykKKwkJCQltcHRzYXNfcHJvYmVfaGJhX3BoeXMoaW9jKTsKKwkJCWVsc2UgaWYgKHBvcnRfaW5mbykKKwkJCQltcHRzYXNfZXhwYW5kZXJfcmVmcmVzaChpb2MsIHBvcnRfaW5mbyk7CisJCQllbHNlIHsKKwkJCQlkZmFpbHByaW50ayhpb2MsIHByaW50ayhNWUlPQ19zX0VSUl9GTVQKKwkJCQkJIiVzICVkIHBvcnQgaW5mbyBpcyBOVUxMXG4iLAorCQkJCQlpb2MtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXykpOworCQkJCWJyZWFrOworCQkJfQorCQkJcGh5X2luZm8gPSBtcHRzYXNfcmVmcmVzaGluZ19kZXZpY2VfaGFuZGxlcworCQkJCShpb2MsICZzYXNfZGV2aWNlKTsKKwkJfQorCisJCWlmICghcGh5X2luZm8pIHsKKwkJCWRmYWlscHJpbnRrKGlvYywgcHJpbnRrKE1ZSU9DX3NfRVJSX0ZNVAorCQkJCSIlcyAlZCBwaHkgaW5mbyBpcyBOVUxMXG4iLAorCQkJCWlvYy0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKSk7CiAJCQlicmVhazsKKwkJfQogCiAJCWlmIChtcHRzYXNfZ2V0X3JwaHkocGh5X2luZm8pKQogCQkJYnJlYWs7CkBAIC00MjQxLDYgKzQ0MDMsMTMgQEAKIAkJCWJyZWFrOwogCQl9CiAKKwkJLyogSWYgdGhlcmUgaXMgbm8gRlcgQl9UIG1hcHBpbmcgZm9yIHRoaXMgZGV2aWNlIHRoZW4gYnJlYWsKKwkJICogKi8KKwkJaWYgKCEoc2FzX2RldmljZS5mbGFncyAmIE1QSV9TQVNfREVWSUNFMF9GTEFHU19ERVZJQ0VfUFJFU0VOVCkKKwkJCXx8ICEoc2FzX2RldmljZS5mbGFncyAmCisJCQlNUElfU0FTX0RFVklDRTBfRkxBR1NfREVWSUNFX01BUFBFRCkpCisJCQlicmVhazsKKwogCQlwaHlfaW5mbyA9IG1wdHNhc19maW5kX3BoeWluZm9fYnlfc2FzX2FkZHJlc3MoCiAJCSAgICBpb2MsIHNhc19kZXZpY2Uuc2FzX2FkZHJlc3MpOwogCkBAIC00Mjk0LDYgKzQ0NjMsMTMgQEAKIAkJCWJyZWFrOwogCQl9CiAKKwkJLyogSWYgdGhlcmUgaXMgbm8gRlcgQl9UIG1hcHBpbmcgZm9yIHRoaXMgZGV2aWNlIHRoZW4gYnJlYWsKKwkJICogKi8KKwkJaWYgKCEoc2FzX2RldmljZS5mbGFncyAmIE1QSV9TQVNfREVWSUNFMF9GTEFHU19ERVZJQ0VfUFJFU0VOVCkKKwkJCXx8ICEoc2FzX2RldmljZS5mbGFncyAmCisJCQlNUElfU0FTX0RFVklDRTBfRkxBR1NfREVWSUNFX01BUFBFRCkpCisJCQlicmVhazsKKwogCQlwaHlfaW5mbyA9IG1wdHNhc19maW5kX3BoeWluZm9fYnlfc2FzX2FkZHJlc3MoaW9jLAogCQkJCXNhc19kZXZpY2Uuc2FzX2FkZHJlc3MpOwogCQlpZiAoIXBoeV9pbmZvKSB7CkBAIC00NzI3LDggKzQ5MDMsOSBAQAogCW11dGV4X3VubG9jaygmaW9jLT50YXNrbWdtdF9jbWRzLm11dGV4KTsKIAogCWlmIChpc3N1ZV9yZXNldCkgewotCQlwcmludGsoTVlJT0Nfc19XQVJOX0ZNVCAiSXNzdWluZyBSZXNldCBmcm9tICVzISFcbiIsCi0JCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcHJpbnRrKE1ZSU9DX3NfV0FSTl9GTVQKKwkJICAgICAgICJJc3N1aW5nIFJlc2V0IGZyb20gJXMhISBkb29yYmVsbD0weCUwOHhcbiIsCisJCSAgICAgICBpb2MtPm5hbWUsIF9fZnVuY19fLCBtcHRfR2V0SW9jU3RhdGUoaW9jLCAwKSk7CiAJCW1wdF9Tb2Z0X0hhcmRfUmVzZXRIYW5kbGVyKGlvYywgQ0FOX1NMRUVQKTsKIAl9CiAJbXB0c2FzX2ZyZWVfZndfZXZlbnQoaW9jLCBmd19ldmVudCk7CkBAIC00ODE2LDEyICs0OTkzLDQ3IEBACiAJewogCQlFVkVOVF9EQVRBX1NBU19ERVZJQ0VfU1RBVFVTX0NIQU5HRSAqc2FzX2V2ZW50X2RhdGEgPQogCQkgICAgKEVWRU5UX0RBVEFfU0FTX0RFVklDRV9TVEFUVVNfQ0hBTkdFICopcmVwbHktPkRhdGE7CisJCXUxNglpb2Nfc3RhdDsKKwkJaW9jX3N0YXQgPSBsZTE2X3RvX2NwdShyZXBseS0+SU9DU3RhdHVzKTsKIAogCQlpZiAoc2FzX2V2ZW50X2RhdGEtPlJlYXNvbkNvZGUgPT0KIAkJICAgIE1QSV9FVkVOVF9TQVNfREVWX1NUQVRfUkNfTk9UX1JFU1BPTkRJTkcpIHsKIAkJCW1wdHNhc190YXJnZXRfcmVzZXRfcXVldWUoaW9jLCBzYXNfZXZlbnRfZGF0YSk7CiAJCQlyZXR1cm4gMDsKIAkJfQorCQlpZiAoc2FzX2V2ZW50X2RhdGEtPlJlYXNvbkNvZGUgPT0KKwkJCU1QSV9FVkVOVF9TQVNfREVWX1NUQVRfUkNfSU5URVJOQUxfREVWSUNFX1JFU0VUICYmCisJCQlpb2MtPmRldmljZV9taXNzaW5nX2RlbGF5ICYmCisJCQkoaW9jX3N0YXQgJiBNUElfSU9DU1RBVFVTX0ZMQUdfTE9HX0lORk9fQVZBSUxBQkxFKSkgeworCQkJVmlydFRhcmdldCAqdnRhcmdldCA9IE5VTEw7CisJCQl1OAkJaWQsIGNoYW5uZWw7CisJCQl1MzIJIGxvZ19pbmZvID0gbGUzMl90b19jcHUocmVwbHktPklPQ0xvZ0luZm8pOworCisJCQlpZCA9IHNhc19ldmVudF9kYXRhLT5UYXJnZXRJRDsKKwkJCWNoYW5uZWwgPSBzYXNfZXZlbnRfZGF0YS0+QnVzOworCisJCQl2dGFyZ2V0ID0gbXB0c2FzX2ZpbmRfdnRhcmdldChpb2MsIGNoYW5uZWwsIGlkKTsKKwkJCWlmICh2dGFyZ2V0KSB7CisJCQkJZGV2dHByaW50ayhpb2MsIHByaW50ayhNWUlPQ19zX0RFQlVHX0ZNVAorCQkJCSAgICAiTG9nSW5mbyAoMHgleCkgYXZhaWxhYmxlIGZvciAiCisJCQkJICAgIklOVEVSTkFMX0RFVklDRV9SRVNFVCIKKwkJCQkgICAiZndfaWQgJWQgZndfY2hhbm5lbCAlZFxuIiwgaW9jLT5uYW1lLAorCQkJCSAgIGxvZ19pbmZvLCBpZCwgY2hhbm5lbCkpOworCQkJCWlmICh2dGFyZ2V0LT5yYWlkVm9sdW1lKSB7CisJCQkJCWRldnRwcmludGsoaW9jLCBwcmludGsoTVlJT0Nfc19ERUJVR19GTVQKKwkJCQkJIlNraXBwaW5nIFJhaWQgVm9sdW1lIGZvciBpbkRNRFxuIiwKKwkJCQkJaW9jLT5uYW1lKSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJZGV2dHByaW50ayhpb2MsIHByaW50ayhNWUlPQ19zX0RFQlVHX0ZNVAorCQkJCQkiU2V0dGluZyBkZXZpY2UgZmxhZyBpbkRNRFxuIiwKKwkJCQkJaW9jLT5uYW1lKSk7CisJCQkJCXZ0YXJnZXQtPmluRE1EID0gMTsKKwkJCQl9CisKKwkJCX0KKworCQl9CisKIAkJYnJlYWs7CiAJfQogCWNhc2UgTVBJX0VWRU5UX1NBU19FWFBBTkRFUl9TVEFUVVNfQ0hBTkdFOgpAQCAtNDkyNCw3ICs1MTM2LDcgQEAKIAlpb2MtPkRvbmVDdHggPSBtcHRzYXNEb25lQ3R4OwogCWlvYy0+VGFza0N0eCA9IG1wdHNhc1Rhc2tDdHg7CiAJaW9jLT5JbnRlcm5hbEN0eCA9IG1wdHNhc0ludGVybmFsQ3R4OwotCisJaW9jLT5zY2hlZHVsZV90YXJnZXRfcmVzZXQgPSAmbXB0c2FzX3NjaGVkdWxlX3RhcmdldF9yZXNldDsKIAkvKiAgQWRkZWQgc2FuaXR5IGNoZWNrIG9uIHJlYWRpbmVzcyBvZiB0aGUgTVBUIGFkYXB0ZXIuCiAJICovCiAJaWYgKGlvYy0+bGFzdF9zdGF0ZSAhPSBNUElfSU9DX1NUQVRFX09QRVJBVElPTkFMKSB7CkBAIC01MTU0LDE0ICs1MzY2LDIwIEBACiAJICAgIHNhc19hdHRhY2hfdHJhbnNwb3J0KCZtcHRzYXNfdHJhbnNwb3J0X2Z1bmN0aW9ucyk7CiAJaWYgKCFtcHRzYXNfdHJhbnNwb3J0X3RlbXBsYXRlKQogCQlyZXR1cm4gLUVOT0RFVjsKKwltcHRzYXNfdHJhbnNwb3J0X3RlbXBsYXRlLT5laF90aW1lZF9vdXQgPSBtcHRzYXNfZWhfdGltZWRfb3V0OwogCi0JbXB0c2FzRG9uZUN0eCA9IG1wdF9yZWdpc3RlcihtcHRzY3NpaF9pb19kb25lLCBNUFRTQVNfRFJJVkVSKTsKLQltcHRzYXNUYXNrQ3R4ID0gbXB0X3JlZ2lzdGVyKG1wdHNjc2loX3Rhc2ttZ210X2NvbXBsZXRlLCBNUFRTQVNfRFJJVkVSKTsKKwltcHRzYXNEb25lQ3R4ID0gbXB0X3JlZ2lzdGVyKG1wdHNjc2loX2lvX2RvbmUsIE1QVFNBU19EUklWRVIsCisJICAgICJtcHRzY3NpaF9pb19kb25lIik7CisJbXB0c2FzVGFza0N0eCA9IG1wdF9yZWdpc3RlcihtcHRzY3NpaF90YXNrbWdtdF9jb21wbGV0ZSwgTVBUU0FTX0RSSVZFUiwKKwkgICAgIm1wdHNjc2loX3Rhc2ttZ210X2NvbXBsZXRlIik7CiAJbXB0c2FzSW50ZXJuYWxDdHggPQotCQltcHRfcmVnaXN0ZXIobXB0c2NzaWhfc2NhbmR2X2NvbXBsZXRlLCBNUFRTQVNfRFJJVkVSKTsKLQltcHRzYXNNZ210Q3R4ID0gbXB0X3JlZ2lzdGVyKG1wdHNhc19tZ210X2RvbmUsIE1QVFNBU19EUklWRVIpOworCQltcHRfcmVnaXN0ZXIobXB0c2NzaWhfc2NhbmR2X2NvbXBsZXRlLCBNUFRTQVNfRFJJVkVSLAorCQkgICAgIm1wdHNjc2loX3NjYW5kdl9jb21wbGV0ZSIpOworCW1wdHNhc01nbXRDdHggPSBtcHRfcmVnaXN0ZXIobXB0c2FzX21nbXRfZG9uZSwgTVBUU0FTX0RSSVZFUiwKKwkgICAgIm1wdHNhc19tZ210X2RvbmUiKTsKIAltcHRzYXNEZXZpY2VSZXNldEN0eCA9Ci0JCW1wdF9yZWdpc3RlcihtcHRzYXNfdGFza21nbXRfY29tcGxldGUsIE1QVFNBU19EUklWRVIpOworCQltcHRfcmVnaXN0ZXIobXB0c2FzX3Rhc2ttZ210X2NvbXBsZXRlLCBNUFRTQVNfRFJJVkVSLAorCQkgICAgIm1wdHNhc190YXNrbWdtdF9jb21wbGV0ZSIpOwogCiAJbXB0X2V2ZW50X3JlZ2lzdGVyKG1wdHNhc0RvbmVDdHgsIG1wdHNhc19ldmVudF9wcm9jZXNzKTsKIAltcHRfcmVzZXRfcmVnaXN0ZXIobXB0c2FzRG9uZUN0eCwgbXB0c2FzX2lvY19yZXNldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5oIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuaAppbmRleCA3YjI0OWVkLi41N2U4NmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5oCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmgKQEAgLTE0MCw2ICsxNDAsNyBAQAogCXU2NAlzYXNfYWRkcmVzczsgICAgLyogV1dOIG9mIHRoaXMgZGV2aWNlLAogCQkJCSAgIFNBVEEgaXMgYXNzaWduZWQgYnkgSEJBLGV4cGFuZGVyICovCiAJdTMyCWRldmljZV9pbmZvOwkvKiBiaXRmaWVsZCBkZXRhaWxlZCBpbmZvIGFib3V0IHRoaXMgZGV2aWNlICovCisJdTE2CWZsYWdzOwkJLyogc2FzIGRldmljZSBwZzAgZmxhZ3MgKi8KIH07CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKaW5kZXggNWM1MzYyNC4uNTliOGY1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYwpAQCAtNjY0LDYgKzY2NCw3IEBACiAJCXUzMgkgbG9nX2luZm87CiAKIAkJc3RhdHVzID0gbGUxNl90b19jcHUocFNjc2lSZXBseS0+SU9DU3RhdHVzKSAmIE1QSV9JT0NTVEFUVVNfTUFTSzsKKwogCQlzY3NpX3N0YXRlID0gcFNjc2lSZXBseS0+U0NTSVN0YXRlOwogCQlzY3NpX3N0YXR1cyA9IHBTY3NpUmVwbHktPlNDU0lTdGF0dXM7CiAJCXhmZXJfY250ID0gbGUzMl90b19jcHUocFNjc2lSZXBseS0+VHJhbnNmZXJDb3VudCk7CkBAIC03MzgsMTMgKzczOSwzNiBAQAogCiAJCWNhc2UgTVBJX0lPQ1NUQVRVU19TQ1NJX0lPQ19URVJNSU5BVEVEOgkJLyogMHgwMDRCICovCiAJCQlpZiAoIGlvYy0+YnVzX3R5cGUgPT0gU0FTICkgewotCQkJCXUxNiBpb2Nfc3RhdHVzID0gbGUxNl90b19jcHUocFNjc2lSZXBseS0+SU9DU3RhdHVzKTsKLQkJCQlpZiAoaW9jX3N0YXR1cyAmIE1QSV9JT0NTVEFUVVNfRkxBR19MT0dfSU5GT19BVkFJTEFCTEUpIHsKLQkJCQkJaWYgKChsb2dfaW5mbyAmIFNBU19MT0dJTkZPX01BU0spCi0JCQkJCSAgICA9PSBTQVNfTE9HSU5GT19ORVhVU19MT1NTKSB7Ci0JCQkJCQlzYy0+cmVzdWx0ID0gKERJRF9CVVNfQlVTWSA8PCAxNik7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQorCQkJCXUxNiBpb2Nfc3RhdHVzID0KKwkJCQkgICAgbGUxNl90b19jcHUocFNjc2lSZXBseS0+SU9DU3RhdHVzKTsKKwkJCQlpZiAoKGlvY19zdGF0dXMgJgorCQkJCQlNUElfSU9DU1RBVFVTX0ZMQUdfTE9HX0lORk9fQVZBSUxBQkxFKQorCQkJCQkmJgorCQkJCQkoKGxvZ19pbmZvICYgU0FTX0xPR0lORk9fTUFTSykgPT0KKwkJCQkJU0FTX0xPR0lORk9fTkVYVVNfTE9TUykpIHsKKwkJCQkJCVZpcnREZXZpY2UgKnZkZXZpY2UgPQorCQkJCQkJc2MtPmRldmljZS0+aG9zdGRhdGE7CisKKwkJCQkJICAgIC8qIGZsYWcgdGhlIGRldmljZSBhcyBiZWluZyBpbgorCQkJCQkgICAgICogZGV2aWNlIHJlbW92YWwgZGVsYXkgc28gd2UgY2FuCisJCQkJCSAgICAgKiBub3RpZnkgdGhlIG1pZGxheWVyIHRvIGhvbGQgb2ZmCisJCQkJCSAgICAgKiBvbiB0aW1lb3V0IGVoICovCisJCQkJCQlpZiAodmRldmljZSAmJiB2ZGV2aWNlLT4KKwkJCQkJCQl2dGFyZ2V0ICYmCisJCQkJCQkJdmRldmljZS0+dnRhcmdldC0+CisJCQkJCQkJcmFpZFZvbHVtZSkKKwkJCQkJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJCQkJIlNraXBwaW5nIFJhaWQgVm9sdW1lIgorCQkJCQkJCSJmb3IgaW5ETURcbiIpOworCQkJCQkJZWxzZSBpZiAodmRldmljZSAmJgorCQkJCQkJCXZkZXZpY2UtPnZ0YXJnZXQpCisJCQkJCQkJdmRldmljZS0+dnRhcmdldC0+CisJCQkJCQkJCWluRE1EID0gMTsKKworCQkJCQkgICAgc2MtPnJlc3VsdCA9CisJCQkJCQkgICAgKERJRF9UUkFOU1BPUlRfRElTUlVQVEVECisJCQkJCQkgICAgPDwgMTYpOworCQkJCQkgICAgYnJlYWs7CiAJCQkJfQogCQkJfSBlbHNlIGlmIChpb2MtPmJ1c190eXBlID09IEZDKSB7CiAJCQkJLyoKQEAgLTE3MDQsOCArMTcyOCw5IEBACiAKIAlDTEVBUl9NR01UX1NUQVRVUyhpb2MtPnRhc2ttZ210X2NtZHMuc3RhdHVzKQogCWlmIChpc3N1ZV9oYXJkX3Jlc2V0KSB7Ci0JCXByaW50ayhNWUlPQ19zX1dBUk5fRk1UICJJc3N1aW5nIFJlc2V0IGZyb20gJXMhIVxuIiwKLQkJCWlvYy0+bmFtZSwgX19mdW5jX18pOworCQlwcmludGsoTVlJT0Nfc19XQVJOX0ZNVAorCQkgICAgICAgIklzc3VpbmcgUmVzZXQgZnJvbSAlcyEhIGRvb3JiZWxsPTB4JTA4eFxuIiwKKwkJICAgICAgIGlvYy0+bmFtZSwgX19mdW5jX18sIG1wdF9HZXRJb2NTdGF0ZShpb2MsIDApKTsKIAkJcmV0dmFsID0gbXB0X1NvZnRfSGFyZF9SZXNldEhhbmRsZXIoaW9jLCBDQU5fU0xFRVApOwogCQltcHRfZnJlZV9tc2dfZnJhbWUoaW9jLCBtZik7CiAJfQpAQCAtMjEzMiw2ICsyMTU3LDggQEAKIAkJbXB0X2NsZWFyX3Rhc2ttZ210X2luX3Byb2dyZXNzX2ZsYWcoaW9jKTsKIAkJaW9jLT50YXNrbWdtdF9jbWRzLnN0YXR1cyAmPSB+TVBUX01HTVRfU1RBVFVTX1BFTkRJTkc7CiAJCWNvbXBsZXRlKCZpb2MtPnRhc2ttZ210X2NtZHMuZG9uZSk7CisJCWlmIChpb2MtPmJ1c190eXBlID09IFNBUykKKwkJCWlvYy0+c2NoZWR1bGVfdGFyZ2V0X3Jlc2V0KGlvYyk7CiAJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKQEAgLTI0NTksNiArMjQ4Niw4IEBACiAJCWlvYy0+bmFtZSxzZGV2LT50YWdnZWRfc3VwcG9ydGVkLCBzZGV2LT5zaW1wbGVfdGFncywKIAkJc2Rldi0+b3JkZXJlZF90YWdzKSk7CiAKKwlibGtfcXVldWVfZG1hX2FsaWdubWVudCAoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgNTEyIC0gMSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzA0NSw4ICszMDc0LDExIEBACiAJCQlnb3RvIG91dDsKIAkJfQogCQlpZiAoIXRpbWVsZWZ0KSB7Ci0JCQlwcmludGsoTVlJT0Nfc19XQVJOX0ZNVCAiSXNzdWluZyBSZXNldCBmcm9tICVzISFcbiIsCi0JCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCQlwcmludGsoTVlJT0Nfc19XQVJOX0ZNVAorCQkJICAgICAgICJJc3N1aW5nIFJlc2V0IGZyb20gJXMhISBkb29yYmVsbD0weCUwOHhoIgorCQkJICAgICAgICIgY21kPTB4JTAyeFxuIiwKKwkJCSAgICAgICBpb2MtPm5hbWUsIF9fZnVuY19fLCBtcHRfR2V0SW9jU3RhdGUoaW9jLCAwKSwKKwkJCSAgICAgICBjbWQpOwogCQkJbXB0X1NvZnRfSGFyZF9SZXNldEhhbmRsZXIoaW9jLCBDQU5fU0xFRVApOwogCQkJbXB0X2ZyZWVfbXNnX2ZyYW1lKGlvYywgbWYpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNwaS5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzcGkuYwppbmRleCAxYWJhYTVkLi4wZTI4MDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNwaS5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c3BpLmMKQEAgLTE1NTEsOSArMTU1MSwxMiBAQAogCWlmICghbXB0c3BpX3RyYW5zcG9ydF90ZW1wbGF0ZSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQltcHRzcGlEb25lQ3R4ID0gbXB0X3JlZ2lzdGVyKG1wdHNjc2loX2lvX2RvbmUsIE1QVFNQSV9EUklWRVIpOwotCW1wdHNwaVRhc2tDdHggPSBtcHRfcmVnaXN0ZXIobXB0c2NzaWhfdGFza21nbXRfY29tcGxldGUsIE1QVFNQSV9EUklWRVIpOwotCW1wdHNwaUludGVybmFsQ3R4ID0gbXB0X3JlZ2lzdGVyKG1wdHNjc2loX3NjYW5kdl9jb21wbGV0ZSwgTVBUU1BJX0RSSVZFUik7CisJbXB0c3BpRG9uZUN0eCA9IG1wdF9yZWdpc3RlcihtcHRzY3NpaF9pb19kb25lLCBNUFRTUElfRFJJVkVSLAorCSAgICAibXB0c2NzaWhfaW9fZG9uZSIpOworCW1wdHNwaVRhc2tDdHggPSBtcHRfcmVnaXN0ZXIobXB0c2NzaWhfdGFza21nbXRfY29tcGxldGUsIE1QVFNQSV9EUklWRVIsCisJICAgICJtcHRzY3NpaF90YXNrbWdtdF9jb21wbGV0ZSIpOworCW1wdHNwaUludGVybmFsQ3R4ID0gbXB0X3JlZ2lzdGVyKG1wdHNjc2loX3NjYW5kdl9jb21wbGV0ZSwKKwkgICAgTVBUU1BJX0RSSVZFUiwgIm1wdHNjc2loX3NjYW5kdl9jb21wbGV0ZSIpOwogCiAJbXB0X2V2ZW50X3JlZ2lzdGVyKG1wdHNwaURvbmVDdHgsIG1wdHNwaV9ldmVudF9wcm9jZXNzKTsKIAltcHRfcmVzZXRfcmVnaXN0ZXIobXB0c3BpRG9uZUN0eCwgbXB0c3BpX2lvY19yZXNldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCmluZGV4IDI2Mzg2YTkuLjQ4OGYyNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCkBAIC03Miw3ICs3Miw3IEBACiAKIGNvbmZpZyBBVE1FTF9UQ0JfQ0xLU1JDCiAJYm9vbCAiVEMgQmxvY2sgQ2xvY2tzb3VyY2UiCi0JZGVwZW5kcyBvbiBBVE1FTF9UQ0xJQiAmJiBHRU5FUklDX1RJTUUKKwlkZXBlbmRzIG9uIEFUTUVMX1RDTElCCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgU2VsZWN0IHRoaXMgdG8gZ2V0IGEgaGlnaCBwcmVjaXNpb24gY2xvY2tzb3VyY2UgYmFzZWQgb24gYQpAQCAtMjQwLDcgKzI0MCw3IEBACiAKIGNvbmZpZyBDUzU1MzVfQ0xPQ0tfRVZFTlRfU1JDCiAJdHJpc3RhdGUgIkNTNTUzNS9DUzU1MzYgaGlnaC1yZXMgdGltZXIgKE1GR1BUKSBldmVudHMiCi0JZGVwZW5kcyBvbiBHRU5FUklDX1RJTUUgJiYgR0VORVJJQ19DTE9DS0VWRU5UUyAmJiBDUzU1MzVfTUZHUFQKKwlkZXBlbmRzIG9uIEdFTkVSSUNfQ0xPQ0tFVkVOVFMgJiYgQ1M1NTM1X01GR1BUCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgYSBjbG9jayBldmVudCBzb3VyY2UgYmFzZWQgb24gdGhlIE1GR1BUCiAJICB0aW1lcihzKSBpbiB0aGUgQ1M1NTM1IGFuZCBDUzU1MzYgY29tcGFuaW9uIGNoaXBzLgpAQCAtMzUzLDYgKzM1MywxNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdm13YXJlX2JhbGxvb24uCiAKK2NvbmZpZyBBUk1fQ0hBUkxDRAorCWJvb2wgIkFSTSBMdGQuIENoYXJhY3RlciBMQ0QgRHJpdmVyIgorCWRlcGVuZHMgb24gUExBVF9WRVJTQVRJTEUKKwloZWxwCisJICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgY2hhcmFjdGVyIExDRCBmb3VuZCBvbiB0aGUgQVJNIEx0ZC4KKwkgIFZlcnNhdGlsZSBhbmQgUmVhbFZpZXcgUGxhdGZvcm0gQmFzZWJvYXJkcy4gSXQgZG9lc24ndCBkbworCSAgdmVyeSBtdWNoIG1vcmUgdGhhbiBkaXNwbGF5IHRoZSB0ZXh0ICJBUk0gTGludXgiIG9uIHRoZSBmaXJzdAorCSAgbGluZSBhbmQgdGhlIExpbnV4IHZlcnNpb24gb24gdGhlIHNlY29uZCBsaW5lLCBidXQgdGhhdCdzCisJICBzdGlsbCB1c2VmdWwuCisKIHNvdXJjZSAiZHJpdmVycy9taXNjL2MycG9ydC9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL21pc2MvZWVwcm9tL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbWlzYy9jYjcxMC9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL01ha2VmaWxlIGIvZHJpdmVycy9taXNjL01ha2VmaWxlCmluZGV4IDZlZDA2YTEuLjY3NTUyZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21pc2MvTWFrZWZpbGUKQEAgLTMxLDMgKzMxLDQgQEAKIG9iai15CQkJCSs9IGVlcHJvbS8KIG9iai15CQkJCSs9IGNiNzEwLwogb2JqLSQoQ09ORklHX1ZNV0FSRV9CQUxMT09OKQkrPSB2bXdhcmVfYmFsbG9vbi5vCitvYmotJChDT05GSUdfQVJNX0NIQVJMQ0QpCSs9IGFybS1jaGFybGNkLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9hcm0tY2hhcmxjZC5jIGIvZHJpdmVycy9taXNjL2FybS1jaGFybGNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUzODc5ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWlzYy9hcm0tY2hhcmxjZC5jCkBAIC0wLDAgKzEsMzk2IEBACisvKgorICogRHJpdmVyIGZvciB0aGUgb24tYm9hcmQgY2hhcmFjdGVyIExDRCBmb3VuZCBvbiBzb21lIEFSTSByZWZlcmVuY2UgYm9hcmRzCisgKiBUaGlzIGlzIGJhc2ljYWxseSBhbiBIaXRhY2hpIEhENDQ3ODAgTENEIHdpdGggYSBjdXN0b20gSVAgYmxvY2sgdG8gZHJpdmUgaXQKKyAqIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSEQ0NDc4MF9DaGFyYWN0ZXJfTENECisgKiBDdXJyZW50bHkgaXQgd2lsbCBqdXN0IGRpc3BsYXkgdGhlIHRleHQgIkFSTSBMaW51eCIgYW5kIHRoZSBsaW51eCB2ZXJzaW9uCisgKgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKiBBdXRob3I6IExpbnVzIFdhbGxlaWogPHRyaWFkQGRmLmx0aC5zZT4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxnZW5lcmF0ZWQvdXRzcmVsZWFzZS5oPgorCisjZGVmaW5lIERSSVZFUk5BTUUgImFybS1jaGFybGNkIgorI2RlZmluZSBDSEFSTENEX1RJTUVPVVQgKG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpCisKKy8qIE9mZnNldHMgdG8gcmVnaXN0ZXJzICovCisjZGVmaW5lIENIQVJfQ09NCTB4MDBVCisjZGVmaW5lIENIQVJfREFUCTB4MDRVCisjZGVmaW5lIENIQVJfUkQJCTB4MDhVCisjZGVmaW5lIENIQVJfUkFXCTB4MENVCisjZGVmaW5lIENIQVJfTUFTSwkweDEwVQorI2RlZmluZSBDSEFSX1NUQVQJMHgxNFUKKworI2RlZmluZSBDSEFSX1JBV19DTEVBUgkweDAwMDAwMDAwVQorI2RlZmluZSBDSEFSX1JBV19WQUxJRAkweDAwMDAwMTAwVQorCisvKiBIaXRhY2hpIEhENDQ3ODAgZGlzcGxheSBjb21tYW5kcyAqLworI2RlZmluZSBIRF9DTEVBUgkJCTB4MDFVCisjZGVmaW5lIEhEX0hPTUUJCQkJMHgwMlUKKyNkZWZpbmUgSERfRU5UUllNT0RFCQkJMHgwNFUKKyNkZWZpbmUgSERfRU5UUllNT0RFX0lOQ1JFTUVOVAkJMHgwMlUKKyNkZWZpbmUgSERfRU5UUllNT0RFX1NISUZUCQkweDAxVQorI2RlZmluZSBIRF9ESVNQQ1RSTAkJCTB4MDhVCisjZGVmaW5lIEhEX0RJU1BDVFJMX09OCQkJMHgwNFUKKyNkZWZpbmUgSERfRElTUENUUkxfQ1VSU09SX09OCQkweDAyVQorI2RlZmluZSBIRF9ESVNQQ1RSTF9DVVJTT1JfQkxJTksJMHgwMVUKKyNkZWZpbmUgSERfQ1JTUl9TSElGVAkJCTB4MTBVCisjZGVmaW5lIEhEX0NSU1JfU0hJRlRfRElTUExBWQkJMHgwOFUKKyNkZWZpbmUgSERfQ1JTUl9TSElGVF9ESVNQTEFZX1JJR0hUCTB4MDRVCisjZGVmaW5lIEhEX0ZVTkNTRVQJCQkweDIwVQorI2RlZmluZSBIRF9GVU5DU0VUXzhCSVQJCQkweDEwVQorI2RlZmluZSBIRF9GVU5DU0VUXzJfTElORVMJCTB4MDhVCisjZGVmaW5lIEhEX0ZVTkNTRVRfRk9OVF81WDEwCQkweDA0VQorI2RlZmluZSBIRF9TRVRfQ0dSQU0JCQkweDQwVQorI2RlZmluZSBIRF9TRVRfRERSQU0JCQkweDgwVQorI2RlZmluZSBIRF9CVVNZX0ZMQUcJCQkweDgwVQorCisvKioKKyAqIEBkZXY6IGEgcG9pbnRlciBiYWNrIHRvIGNvbnRhaW5pbmcgZGV2aWNlCisgKiBAcGh5YmFzZTogdGhlIG9mZnNldCB0byB0aGUgY29udHJvbGxlciBpbiBwaHlzaWNhbCBtZW1vcnkKKyAqIEBwaHlzaXplOiB0aGUgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgcGFnZQorICogQHZpcnRiYXNlOiB0aGUgb2Zmc2V0IHRvIHRoZSBjb250cm9sbGVyIGluIHZpcnR1YWwgbWVtb3J5CisgKiBAaXJxOiByZXNlcnZlZCBpbnRlcnJ1cHQgbnVtYmVyCisgKiBAY29tcGxldGU6IGNvbXBsZXRpb24gc3RydWN0dXJlIGZvciB0aGUgbGFzdCBMQ0QgY29tbWFuZAorICovCitzdHJ1Y3QgY2hhcmxjZCB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXUzMiBwaHliYXNlOworCXUzMiBwaHlzaXplOworCXZvaWQgX19pb21lbSAqdmlydGJhc2U7CisJaW50IGlycTsKKwlzdHJ1Y3QgY29tcGxldGlvbiBjb21wbGV0ZTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGluaXRfd29yazsKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBjaGFybGNkX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjaGFybGNkICpsY2QgPSBkYXRhOworCXU4IHN0YXR1czsKKworCXN0YXR1cyA9IHJlYWRsKGxjZC0+dmlydGJhc2UgKyBDSEFSX1NUQVQpICYgMHgwMTsKKwkvKiBDbGVhciBJUlEgKi8KKwl3cml0ZWwoQ0hBUl9SQVdfQ0xFQVIsIGxjZC0+dmlydGJhc2UgKyBDSEFSX1JBVyk7CisJaWYgKHN0YXR1cykKKwkJY29tcGxldGUoJmxjZC0+Y29tcGxldGUpOworCWVsc2UKKwkJZGV2X2luZm8obGNkLT5kZXYsICJTcHVyaW91cyBJUlEgKCUwMngpXG4iLCBzdGF0dXMpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworCitzdGF0aWMgdm9pZCBjaGFybGNkX3dhaXRfY29tcGxldGVfaXJxKHN0cnVjdCBjaGFybGNkICpsY2QpCit7CisJaW50IHJldDsKKworCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZsY2QtPmNvbXBsZXRlLAorCQkJCQkJCUNIQVJMQ0RfVElNRU9VVCk7CisJLyogRGlzYWJsZSBJUlEgYWZ0ZXIgY29tcGxldGlvbiAqLworCXdyaXRlbCgweDAwLCBsY2QtPnZpcnRiYXNlICsgQ0hBUl9NQVNLKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIobGNkLT5kZXYsCisJCQkid2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoKSAiCisJCQkicmV0dXJuZWQgJWQgd2FpdGluZyBmb3IgcmVhZHlcbiIsIHJldCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAocmV0ID09IDApIHsKKwkJZGV2X2VycihsY2QtPmRldiwgImNoYXJsY2QgY29udHJvbGxlciB0aW1lZCBvdXQgIgorCQkJIndhaXRpbmcgZm9yIHJlYWR5XG4iKTsKKwkJcmV0dXJuOworCX0KK30KKworc3RhdGljIHU4IGNoYXJsY2RfNGJpdF9yZWFkX2NoYXIoc3RydWN0IGNoYXJsY2QgKmxjZCkKK3sKKwl1OCBkYXRhOworCXUzMiB2YWw7CisJaW50IGk7CisKKwkvKiBJZiB3ZSBjYW4sIHVzZSBhbiBJUlEgdG8gd2FpdCBmb3IgdGhlIGRhdGEsIGVsc2UgcG9sbCAqLworCWlmIChsY2QtPmlycSA+PSAwKQorCQljaGFybGNkX3dhaXRfY29tcGxldGVfaXJxKGxjZCk7CisJZWxzZSB7CisJCWkgPSAwOworCQl2YWwgPSAwOworCQl3aGlsZSAoISh2YWwgJiBDSEFSX1JBV19WQUxJRCkgJiYgaSA8IDEwKSB7CisJCQl1ZGVsYXkoMTAwKTsKKwkJCXZhbCA9IHJlYWRsKGxjZC0+dmlydGJhc2UgKyBDSEFSX1JBVyk7CisJCQlpKys7CisJCX0KKworCQl3cml0ZWwoQ0hBUl9SQVdfQ0xFQVIsIGxjZC0+dmlydGJhc2UgKyBDSEFSX1JBVyk7CisJfQorCW1zbGVlcCgxKTsKKworCS8qIFJlYWQgdGhlIDQgaGlnaCBiaXRzIG9mIHRoZSBkYXRhICovCisJZGF0YSA9IHJlYWRsKGxjZC0+dmlydGJhc2UgKyBDSEFSX1JEKSAmIDB4ZjA7CisKKwkvKgorCSAqIFRoZSBzZWNvbmQgcmVhZCBmb3IgdGhlIGxvdyBiaXRzIGRvZXMgbm90IHRyaWdnZXIgYW4gSVJRCisJICogc28gaW4gdGhpcyBjYXNlIHdlIGhhdmUgdG8gcG9sbCBmb3IgdGhlIDQgbG93ZXIgYml0cworCSAqLworCWkgPSAwOworCXZhbCA9IDA7CisJd2hpbGUgKCEodmFsICYgQ0hBUl9SQVdfVkFMSUQpICYmIGkgPCAxMCkgeworCQl1ZGVsYXkoMTAwKTsKKwkJdmFsID0gcmVhZGwobGNkLT52aXJ0YmFzZSArIENIQVJfUkFXKTsKKwkJaSsrOworCX0KKwl3cml0ZWwoQ0hBUl9SQVdfQ0xFQVIsIGxjZC0+dmlydGJhc2UgKyBDSEFSX1JBVyk7CisJbXNsZWVwKDEpOworCisJLyogUmVhZCB0aGUgNCBsb3cgYml0cyBvZiB0aGUgZGF0YSAqLworCWRhdGEgfD0gKHJlYWRsKGxjZC0+dmlydGJhc2UgKyBDSEFSX1JEKSA+PiA0KSAmIDB4MGY7CisKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIGJvb2wgY2hhcmxjZF80Yml0X3JlYWRfYmYoc3RydWN0IGNoYXJsY2QgKmxjZCkKK3sKKwlpZiAobGNkLT5pcnEgPj0gMCkgeworCQkvKgorCQkgKiBJZiB3ZSdsbCB1c2UgSVJRcyB0byB3YWl0IGZvciB0aGUgYnVzeWZsYWcsIGNsZWFyIGFueQorCQkgKiBwZW5kaW5nIGZsYWcgYW5kIGVuYWJsZSBJUlEKKwkJICovCisJCXdyaXRlbChDSEFSX1JBV19DTEVBUiwgbGNkLT52aXJ0YmFzZSArIENIQVJfUkFXKTsKKwkJaW5pdF9jb21wbGV0aW9uKCZsY2QtPmNvbXBsZXRlKTsKKwkJd3JpdGVsKDB4MDEsIGxjZC0+dmlydGJhc2UgKyBDSEFSX01BU0spOworCX0KKwlyZWFkbChsY2QtPnZpcnRiYXNlICsgQ0hBUl9DT00pOworCXJldHVybiBjaGFybGNkXzRiaXRfcmVhZF9jaGFyKGxjZCkgJiBIRF9CVVNZX0ZMQUcgPyB0cnVlIDogZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGNoYXJsY2RfNGJpdF93YWl0X2J1c3koc3RydWN0IGNoYXJsY2QgKmxjZCkKK3sKKwlpbnQgcmV0cmllcyA9IDUwOworCisJdWRlbGF5KDEwMCk7CisJd2hpbGUgKGNoYXJsY2RfNGJpdF9yZWFkX2JmKGxjZCkgJiYgcmV0cmllcykKKwkJcmV0cmllcy0tOworCWlmICghcmV0cmllcykKKwkJZGV2X2VycihsY2QtPmRldiwgInRpbWVvdXQgd2FpdGluZyBmb3IgYnVzeWZsYWdcbiIpOworfQorCitzdGF0aWMgdm9pZCBjaGFybGNkXzRiaXRfY29tbWFuZChzdHJ1Y3QgY2hhcmxjZCAqbGNkLCB1OCBjbWQpCit7CisJdTMyIGNtZGxvID0gKGNtZCA8PCA0KSAmIDB4ZjA7CisJdTMyIGNtZGhpID0gKGNtZCAmIDB4ZjApOworCisJd3JpdGVsKGNtZGhpLCBsY2QtPnZpcnRiYXNlICsgQ0hBUl9DT00pOworCXVkZWxheSgxMCk7CisJd3JpdGVsKGNtZGxvLCBsY2QtPnZpcnRiYXNlICsgQ0hBUl9DT00pOworCWNoYXJsY2RfNGJpdF93YWl0X2J1c3kobGNkKTsKK30KKworc3RhdGljIHZvaWQgY2hhcmxjZF80Yml0X2NoYXIoc3RydWN0IGNoYXJsY2QgKmxjZCwgdTggY2gpCit7CisJdTMyIGNobG8gPSAoY2ggPDwgNCkgJiAweGYwOworCXUzMiBjaGhpID0gKGNoICYgMHhmMCk7CisKKwl3cml0ZWwoY2hoaSwgbGNkLT52aXJ0YmFzZSArIENIQVJfREFUKTsKKwl1ZGVsYXkoMTApOworCXdyaXRlbChjaGxvLCBsY2QtPnZpcnRiYXNlICsgQ0hBUl9EQVQpOworCWNoYXJsY2RfNGJpdF93YWl0X2J1c3kobGNkKTsKK30KKworc3RhdGljIHZvaWQgY2hhcmxjZF80Yml0X3ByaW50KHN0cnVjdCBjaGFybGNkICpsY2QsIGludCBsaW5lLCBjb25zdCBjaGFyICpzdHIpCit7CisJdTggb2Zmc2V0OworCWludCBpOworCisJLyoKKwkgKiBXZSBzdXBwb3J0IGxpbmUgMCwgMQorCSAqIExpbmUgMSBydW5zIGZyb20gMHgwMC4uMHgyNworCSAqIExpbmUgMiBydW5zIGZyb20gMHgyOC4uMHg0ZgorCSAqLworCWlmIChsaW5lID09IDApCisJCW9mZnNldCA9IDA7CisJZWxzZSBpZiAobGluZSA9PSAxKQorCQlvZmZzZXQgPSAweDI4OworCWVsc2UKKwkJcmV0dXJuOworCisJLyogU2V0IG9mZnNldCAqLworCWNoYXJsY2RfNGJpdF9jb21tYW5kKGxjZCwgSERfU0VUX0REUkFNIHwgb2Zmc2V0KTsKKworCS8qIFNlbmQgc3RyaW5nICovCisJZm9yIChpID0gMDsgaSA8IHN0cmxlbihzdHIpICYmIGkgPCAweDI4OyBpKyspCisJCWNoYXJsY2RfNGJpdF9jaGFyKGxjZCwgc3RyW2ldKTsKK30KKworc3RhdGljIHZvaWQgY2hhcmxjZF80Yml0X2luaXQoc3RydWN0IGNoYXJsY2QgKmxjZCkKK3sKKwkvKiBUaGVzZSBjb21tYW5kcyBjYW5ub3QgYmUgY2hlY2tlZCB3aXRoIHRoZSBidXN5IGZsYWcgKi8KKwl3cml0ZWwoSERfRlVOQ1NFVCB8IEhEX0ZVTkNTRVRfOEJJVCwgbGNkLT52aXJ0YmFzZSArIENIQVJfQ09NKTsKKwltc2xlZXAoNSk7CisJd3JpdGVsKEhEX0ZVTkNTRVQgfCBIRF9GVU5DU0VUXzhCSVQsIGxjZC0+dmlydGJhc2UgKyBDSEFSX0NPTSk7CisJdWRlbGF5KDEwMCk7CisJd3JpdGVsKEhEX0ZVTkNTRVQgfCBIRF9GVU5DU0VUXzhCSVQsIGxjZC0+dmlydGJhc2UgKyBDSEFSX0NPTSk7CisJdWRlbGF5KDEwMCk7CisJLyogR28gdG8gNGJpdCBtb2RlICovCisJd3JpdGVsKEhEX0ZVTkNTRVQsIGxjZC0+dmlydGJhc2UgKyBDSEFSX0NPTSk7CisJdWRlbGF5KDEwMCk7CisJLyoKKwkgKiA0Yml0IG1vZGUsIDIgbGluZXMsIDV4OCBmb250LCBhZnRlciB0aGlzIHRoZSBudW1iZXIgb2YgbGluZXMKKwkgKiBhbmQgdGhlIGZvbnQgY2Fubm90IGJlIGNoYW5nZWQgdW50aWwgdGhlIG5leHQgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UKKwkgKi8KKwljaGFybGNkXzRiaXRfY29tbWFuZChsY2QsIEhEX0ZVTkNTRVQgfCBIRF9GVU5DU0VUXzJfTElORVMpOworCWNoYXJsY2RfNGJpdF9jb21tYW5kKGxjZCwgSERfRElTUENUUkwgfCBIRF9ESVNQQ1RSTF9PTik7CisJY2hhcmxjZF80Yml0X2NvbW1hbmQobGNkLCBIRF9FTlRSWU1PREUgfCBIRF9FTlRSWU1PREVfSU5DUkVNRU5UKTsKKwljaGFybGNkXzRiaXRfY29tbWFuZChsY2QsIEhEX0NMRUFSKTsKKwljaGFybGNkXzRiaXRfY29tbWFuZChsY2QsIEhEX0hPTUUpOworCS8qIFB1dCBzb21ldGhpbmcgdXNlZnVsIGluIHRoZSBkaXNwbGF5ICovCisJY2hhcmxjZF80Yml0X3ByaW50KGxjZCwgMCwgIkFSTSBMaW51eCIpOworCWNoYXJsY2RfNGJpdF9wcmludChsY2QsIDEsIFVUU19SRUxFQVNFKTsKK30KKworc3RhdGljIHZvaWQgY2hhcmxjZF9pbml0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBjaGFybGNkICpsY2QgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGNoYXJsY2QsIGluaXRfd29yay53b3JrKTsKKworCWNoYXJsY2RfNGJpdF9pbml0KGxjZCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGNoYXJsY2RfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBjaGFybGNkICpsY2Q7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwlsY2QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2hhcmxjZCksIEdGUF9LRVJORUwpOworCWlmICghbGNkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWxjZC0+ZGV2ID0gJnBkZXYtPmRldjsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBvdXRfbm9fcmVzb3VyY2U7CisJfQorCWxjZC0+cGh5YmFzZSA9IHJlcy0+c3RhcnQ7CisJbGNkLT5waHlzaXplID0gcmVzb3VyY2Vfc2l6ZShyZXMpOworCisJaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihsY2QtPnBoeWJhc2UsIGxjZC0+cGh5c2l6ZSwKKwkJCSAgICAgICBEUklWRVJOQU1FKSA9PSBOVUxMKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXRfbm9fbWVtcmVnaW9uOworCX0KKworCWxjZC0+dmlydGJhc2UgPSBpb3JlbWFwKGxjZC0+cGh5YmFzZSwgbGNkLT5waHlzaXplKTsKKwlpZiAoIWxjZC0+dmlydGJhc2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfbm9fcmVtYXA7CisJfQorCisJbGNkLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCS8qIElmIG5vIElSUSBpcyBzdXBwbGllZCwgd2UnbGwgc3Vydml2ZSB3aXRob3V0IGl0ICovCisJaWYgKGxjZC0+aXJxID49IDApIHsKKwkJaWYgKHJlcXVlc3RfaXJxKGxjZC0+aXJxLCBjaGFybGNkX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKKwkJCQlEUklWRVJOQU1FLCBsY2QpKSB7CisJCQlyZXQgPSAtRUlPOworCQkJZ290byBvdXRfbm9faXJxOworCQl9CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbGNkKTsKKworCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgZGlzcGxheSBpbiBhIGRlbGF5ZWQgd29yaywgYmVjYXVzZQorCSAqIGl0IGlzIFZFUlkgc2xvdyBhbmQgd291bGQgc2xvdyBkb3duIHRoZSBib290IG9mIHRoZSBzeXN0ZW0uCisJICovCisJSU5JVF9ERUxBWUVEX1dPUksoJmxjZC0+aW5pdF93b3JrLCBjaGFybGNkX2luaXRfd29yayk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZsY2QtPmluaXRfd29yaywgMCk7CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiaW5pdGFsaXplZCBBUk0gY2hhcmFjdGVyIExDRCBhdCAlMDh4XG4iLAorCQlsY2QtPnBoeWJhc2UpOworCisJcmV0dXJuIDA7CisKK291dF9ub19pcnE6CisJaW91bm1hcChsY2QtPnZpcnRiYXNlKTsKK291dF9ub19yZW1hcDoKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKK291dF9ub19tZW1yZWdpb246CisJcmVsZWFzZV9tZW1fcmVnaW9uKGxjZC0+cGh5YmFzZSwgU1pfNEspOworb3V0X25vX3Jlc291cmNlOgorCWtmcmVlKGxjZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2V4aXQgY2hhcmxjZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgY2hhcmxjZCAqbGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAobGNkKSB7CisJCWZyZWVfaXJxKGxjZC0+aXJxLCBsY2QpOworCQlpb3VubWFwKGxjZC0+dmlydGJhc2UpOworCQlyZWxlYXNlX21lbV9yZWdpb24obGNkLT5waHliYXNlLCBsY2QtPnBoeXNpemUpOworCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwkJa2ZyZWUobGNkKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGFybGNkX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgY2hhcmxjZCAqbGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwkvKiBQb3dlciB0aGUgZGlzcGxheSBvZmYgKi8KKwljaGFybGNkXzRiaXRfY29tbWFuZChsY2QsIEhEX0RJU1BDVFJMKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGFybGNkX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBjaGFybGNkICpsY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCS8qIFR1cm4gdGhlIGRpc3BsYXkgYmFjayBvbiAqLworCWNoYXJsY2RfNGJpdF9jb21tYW5kKGxjZCwgSERfRElTUENUUkwgfCBIRF9ESVNQQ1RSTF9PTik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBjaGFybGNkX3BtX29wcyA9IHsKKwkuc3VzcGVuZCA9IGNoYXJsY2Rfc3VzcGVuZCwKKwkucmVzdW1lID0gY2hhcmxjZF9yZXN1bWUsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBjaGFybGNkX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9IERSSVZFUk5BTUUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkucG0gPSAmY2hhcmxjZF9wbV9vcHMsCisJfSwKKwkucmVtb3ZlID0gX19leGl0X3AoY2hhcmxjZF9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY2hhcmxjZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmY2hhcmxjZF9kcml2ZXIsIGNoYXJsY2RfcHJvYmUpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY2hhcmxjZF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmNoYXJsY2RfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoY2hhcmxjZF9pbml0KTsKK21vZHVsZV9leGl0KGNoYXJsY2RfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkxpbnVzIFdhbGxlaWogPHRyaWFkQGRmLmx0aC5zZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQVJNIENoYXJhY3RlciBMQ0QgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvY3M1NTM1LW1mZ3B0LmMgYi9kcml2ZXJzL21pc2MvY3M1NTM1LW1mZ3B0LmMKaW5kZXggOWJlYzI0ZC4uMmQ0NGIzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2NzNTUzNS1tZmdwdC5jCisrKyBiL2RyaXZlcnMvbWlzYy9jczU1MzUtbWZncHQuYwpAQCAtMzY2LDYgKzM2Niw2IEBACiAKIG1vZHVsZV9pbml0KGNzNTUzNV9tZmdwdF9pbml0KTsKIAotTU9EVUxFX0FVVEhPUigiQW5kcmVzIFNhbG9tb24gPGRpbGluZ2VyQGNvbGxhYm9yYS5jby51az4iKTsKK01PRFVMRV9BVVRIT1IoIkFuZHJlcyBTYWxvbW9uIDxkaWxpbmdlckBxdWV1ZWQubmV0PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJDUzU1MzUvQ1M1NTM2IE1GR1BUIHRpbWVyIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2VuY2xvc3VyZS5jIGIvZHJpdmVycy9taXNjL2VuY2xvc3VyZS5jCmluZGV4IDQ4Yzg0YTUuLjAwZTVmY2FjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2VuY2xvc3VyZS5jCisrKyBiL2RyaXZlcnMvbWlzYy9lbmNsb3N1cmUuYwpAQCAtMjg1LDggKzI4NSwxMSBAQAogCWNkZXYtPmdyb3VwcyA9IGVuY2xvc3VyZV9ncm91cHM7CiAKIAllcnIgPSBkZXZpY2VfcmVnaXN0ZXIoY2Rldik7Ci0JaWYgKGVycikKLQkJRVJSX1BUUihlcnIpOworCWlmIChlcnIpIHsKKwkJZWNvbXAtPm51bWJlciA9IC0xOworCQlwdXRfZGV2aWNlKGNkZXYpOworCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCX0KIAogCXJldHVybiBlY29tcDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZwppbmRleCBmMDZkMDZlLi5kMjVlMjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnCkBAIC00MzIsMyArNDMyLDEyIEBACiAJICBUaGlzIHNlbGVjdHMgdGhlIE1NQyBIb3N0IEludGVyZmFjZSBjb250cm9sZXIgKE1NQ0lGKS4KIAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTU1DSUYgaW4gc2g3NzI0L3NoNzc1Ny9zaDczNzIuCisKK2NvbmZpZyBNTUNfSlo0NzQwCisJdHJpc3RhdGUgIkpaNDc0MCBTRC9NdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBNQUNIX0paNDc0MAorCWhlbHAKKwkgIFRoaXMgc2VsZWN0cyBzdXBwb3J0IGZvciB0aGUgU0QvTU1DIGNvbnRyb2xsZXIgb24gSW5nZW5pYyBKWjQ3NDAKKwkgIFNvQ3MuCisJICBJZiB5b3UgaGF2ZSBhIGJvYXJkIGJhc2VkIG9uIHN1Y2ggYSBTb0MgYW5kIHdpdGggYSBTRC9NTUMgc2xvdCwKKwkgIHNheSBZIG9yIE0gaGVyZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUgYi9kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlCmluZGV4IGUzMGMyZWUuLmY0ZTUzYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZQpAQCAtMzYsNiArMzYsNyBAQAogb2JqLSQoQ09ORklHX01NQ19WSUFfU0RNTUMpCSs9IHZpYS1zZG1tYy5vCiBvYmotJChDT05GSUdfU0RIX0JGSU4pCQkrPSBiZmluX3NkaC5vCiBvYmotJChDT05GSUdfTU1DX1NIX01NQ0lGKQkrPSBzaF9tbWNpZi5vCitvYmotJChDT05GSUdfTU1DX0paNDc0MCkJKz0gano0NzQwX21tYy5vCiAKIG9iai0kKENPTkZJR19NTUNfU0RIQ0lfT0YpCSs9IHNkaGNpLW9mLm8KIHNkaGNpLW9mLXkJCQkJOj0gc2RoY2ktb2YtY29yZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNGY5ODcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYwpAQCAtMCwwICsxLDEwMjkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAsIExhcnMtUGV0ZXIgQ2xhdXNlbiA8bGFyc0BtZXRhZm9vLmRlPgorICogIEpaNDc0MCBTRC9NTUMgY29udHJvbGxlciBkcml2ZXIKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWp6NDc0MC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtano0NzQwL2p6NDc0MF9tbWMuaD4KKworI2RlZmluZSBKWl9SRUdfTU1DX1NUUlBDTAkweDAwCisjZGVmaW5lIEpaX1JFR19NTUNfU1RBVFVTCTB4MDQKKyNkZWZpbmUgSlpfUkVHX01NQ19DTEtSVAkweDA4CisjZGVmaW5lIEpaX1JFR19NTUNfQ01EQVQJMHgwQworI2RlZmluZSBKWl9SRUdfTU1DX1JFU1RPCTB4MTAKKyNkZWZpbmUgSlpfUkVHX01NQ19SRFRPCQkweDE0CisjZGVmaW5lIEpaX1JFR19NTUNfQkxLTEVOCTB4MTgKKyNkZWZpbmUgSlpfUkVHX01NQ19OT0IJCTB4MUMKKyNkZWZpbmUgSlpfUkVHX01NQ19TTk9CCQkweDIwCisjZGVmaW5lIEpaX1JFR19NTUNfSU1BU0sJMHgyNAorI2RlZmluZSBKWl9SRUdfTU1DX0lSRUcJCTB4MjgKKyNkZWZpbmUgSlpfUkVHX01NQ19DTUQJCTB4MkMKKyNkZWZpbmUgSlpfUkVHX01NQ19BUkcJCTB4MzAKKyNkZWZpbmUgSlpfUkVHX01NQ19SRVNQX0ZJRk8JMHgzNAorI2RlZmluZSBKWl9SRUdfTU1DX1JYRklGTwkweDM4CisjZGVmaW5lIEpaX1JFR19NTUNfVFhGSUZPCTB4M0MKKworI2RlZmluZSBKWl9NTUNfU1RSUENMX0VYSVRfTVVMVElQTEUgQklUKDcpCisjZGVmaW5lIEpaX01NQ19TVFJQQ0xfRVhJVF9UUkFOU0ZFUiBCSVQoNikKKyNkZWZpbmUgSlpfTU1DX1NUUlBDTF9TVEFSVF9SRUFEV0FJVCBCSVQoNSkKKyNkZWZpbmUgSlpfTU1DX1NUUlBDTF9TVE9QX1JFQURXQUlUIEJJVCg0KQorI2RlZmluZSBKWl9NTUNfU1RSUENMX1JFU0VUIEJJVCgzKQorI2RlZmluZSBKWl9NTUNfU1RSUENMX1NUQVJUX09QIEJJVCgyKQorI2RlZmluZSBKWl9NTUNfU1RSUENMX0NMT0NLX0NPTlRST0wgKEJJVCgxKSB8IEJJVCgwKSkKKyNkZWZpbmUgSlpfTU1DX1NUUlBDTF9DTE9DS19TVE9QIEJJVCgwKQorI2RlZmluZSBKWl9NTUNfU1RSUENMX0NMT0NLX1NUQVJUIEJJVCgxKQorCisKKyNkZWZpbmUgSlpfTU1DX1NUQVRVU19JU19SRVNFVFRJTkcgQklUKDE1KQorI2RlZmluZSBKWl9NTUNfU1RBVFVTX1NESU9fSU5UX0FDVElWRSBCSVQoMTQpCisjZGVmaW5lIEpaX01NQ19TVEFUVVNfUFJHX0RPTkUgQklUKDEzKQorI2RlZmluZSBKWl9NTUNfU1RBVFVTX0RBVEFfVFJBTl9ET05FIEJJVCgxMikKKyNkZWZpbmUgSlpfTU1DX1NUQVRVU19FTkRfQ01EX1JFUyBCSVQoMTEpCisjZGVmaW5lIEpaX01NQ19TVEFUVVNfREFUQV9GSUZPX0FGVUxMIEJJVCgxMCkKKyNkZWZpbmUgSlpfTU1DX1NUQVRVU19JU19SRUFEV0FJVCBCSVQoOSkKKyNkZWZpbmUgSlpfTU1DX1NUQVRVU19DTEtfRU4gQklUKDgpCisjZGVmaW5lIEpaX01NQ19TVEFUVVNfREFUQV9GSUZPX0ZVTEwgQklUKDcpCisjZGVmaW5lIEpaX01NQ19TVEFUVVNfREFUQV9GSUZPX0VNUFRZIEJJVCg2KQorI2RlZmluZSBKWl9NTUNfU1RBVFVTX0NSQ19SRVNfRVJSIEJJVCg1KQorI2RlZmluZSBKWl9NTUNfU1RBVFVTX0NSQ19SRUFEX0VSUk9SIEJJVCg0KQorI2RlZmluZSBKWl9NTUNfU1RBVFVTX1RJTUVPVVRfV1JJVEUgQklUKDMpCisjZGVmaW5lIEpaX01NQ19TVEFUVVNfQ1JDX1dSSVRFX0VSUk9SIEJJVCgyKQorI2RlZmluZSBKWl9NTUNfU1RBVFVTX1RJTUVPVVRfUkVTIEJJVCgxKQorI2RlZmluZSBKWl9NTUNfU1RBVFVTX1RJTUVPVVRfUkVBRCBCSVQoMCkKKworI2RlZmluZSBKWl9NTUNfU1RBVFVTX1JFQURfRVJST1JfTUFTSyAoQklUKDQpIHwgQklUKDApKQorI2RlZmluZSBKWl9NTUNfU1RBVFVTX1dSSVRFX0VSUk9SX01BU0sgKEJJVCgzKSB8IEJJVCgyKSkKKworCisjZGVmaW5lIEpaX01NQ19DTURBVF9JT19BQk9SVCBCSVQoMTEpCisjZGVmaW5lIEpaX01NQ19DTURBVF9CVVNfV0lEVEhfNEJJVCBCSVQoMTApCisjZGVmaW5lIEpaX01NQ19DTURBVF9ETUFfRU4gQklUKDgpCisjZGVmaW5lIEpaX01NQ19DTURBVF9JTklUIEJJVCg3KQorI2RlZmluZSBKWl9NTUNfQ01EQVRfQlVTWSBCSVQoNikKKyNkZWZpbmUgSlpfTU1DX0NNREFUX1NUUkVBTSBCSVQoNSkKKyNkZWZpbmUgSlpfTU1DX0NNREFUX1dSSVRFIEJJVCg0KQorI2RlZmluZSBKWl9NTUNfQ01EQVRfREFUQV9FTiBCSVQoMykKKyNkZWZpbmUgSlpfTU1DX0NNREFUX1JFU1BPTlNFX0ZPUk1BVCAoQklUKDIpIHwgQklUKDEpIHwgQklUKDApKQorI2RlZmluZSBKWl9NTUNfQ01EQVRfUlNQX1IxIDEKKyNkZWZpbmUgSlpfTU1DX0NNREFUX1JTUF9SMiAyCisjZGVmaW5lIEpaX01NQ19DTURBVF9SU1BfUjMgMworCisjZGVmaW5lIEpaX01NQ19JUlFfU0RJTyBCSVQoNykKKyNkZWZpbmUgSlpfTU1DX0lSUV9UWEZJRk9fV1JfUkVRIEJJVCg2KQorI2RlZmluZSBKWl9NTUNfSVJRX1JYRklGT19SRF9SRVEgQklUKDUpCisjZGVmaW5lIEpaX01NQ19JUlFfRU5EX0NNRF9SRVMgQklUKDIpCisjZGVmaW5lIEpaX01NQ19JUlFfUFJHX0RPTkUgQklUKDEpCisjZGVmaW5lIEpaX01NQ19JUlFfREFUQV9UUkFOX0RPTkUgQklUKDApCisKKworI2RlZmluZSBKWl9NTUNfQ0xLX1JBVEUgMjQwMDAwMDAKKworZW51bSBqejQ3NDBfbW1jX3N0YXRlIHsKKwlKWjQ3NDBfTU1DX1NUQVRFX1JFQURfUkVTUE9OU0UsCisJSlo0NzQwX01NQ19TVEFURV9UUkFOU0ZFUl9EQVRBLAorCUpaNDc0MF9NTUNfU1RBVEVfU0VORF9TVE9QLAorCUpaNDc0MF9NTUNfU1RBVEVfRE9ORSwKK307CisKK3N0cnVjdCBqejQ3NDBfbW1jX2hvc3QgeworCXN0cnVjdCBtbWNfaG9zdCAqbW1jOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IGp6NDc0MF9tbWNfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IGNsayAqY2xrOworCisJaW50IGlycTsKKwlpbnQgY2FyZF9kZXRlY3RfaXJxOworCisJc3RydWN0IHJlc291cmNlICptZW07CisJdm9pZCBfX2lvbWVtICpiYXNlOworCXN0cnVjdCBtbWNfcmVxdWVzdCAqcmVxOworCXN0cnVjdCBtbWNfY29tbWFuZCAqY21kOworCisJdW5zaWduZWQgbG9uZyB3YWl0aW5nOworCisJdWludDMyX3QgY21kYXQ7CisKKwl1aW50MTZfdCBpcnFfbWFzazsKKworCXNwaW5sb2NrX3QgbG9jazsKKworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVvdXRfdGltZXI7CisJc3RydWN0IHNnX21hcHBpbmdfaXRlciBtaXRlcjsKKwllbnVtIGp6NDc0MF9tbWNfc3RhdGUgc3RhdGU7Cit9OworCitzdGF0aWMgdm9pZCBqejQ3NDBfbW1jX3NldF9pcnFfZW5hYmxlZChzdHJ1Y3Qgano0NzQwX21tY19ob3N0ICpob3N0LAorCXVuc2lnbmVkIGludCBpcnEsIGJvb2wgZW5hYmxlZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwlpZiAoZW5hYmxlZCkKKwkJaG9zdC0+aXJxX21hc2sgJj0gfmlycTsKKwllbHNlCisJCWhvc3QtPmlycV9tYXNrIHw9IGlycTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CisKKwl3cml0ZXcoaG9zdC0+aXJxX21hc2ssIGhvc3QtPmJhc2UgKyBKWl9SRUdfTU1DX0lNQVNLKTsKK30KKworc3RhdGljIHZvaWQgano0NzQwX21tY19jbG9ja19lbmFibGUoc3RydWN0IGp6NDc0MF9tbWNfaG9zdCAqaG9zdCwKKwlib29sIHN0YXJ0X3RyYW5zZmVyKQoreworCXVpbnQxNl90IHZhbCA9IEpaX01NQ19TVFJQQ0xfQ0xPQ0tfU1RBUlQ7CisKKwlpZiAoc3RhcnRfdHJhbnNmZXIpCisJCXZhbCB8PSBKWl9NTUNfU1RSUENMX1NUQVJUX09QOworCisJd3JpdGV3KHZhbCwgaG9zdC0+YmFzZSArIEpaX1JFR19NTUNfU1RSUENMKTsKK30KKworc3RhdGljIHZvaWQgano0NzQwX21tY19jbG9ja19kaXNhYmxlKHN0cnVjdCBqejQ3NDBfbW1jX2hvc3QgKmhvc3QpCit7CisJdWludDMyX3Qgc3RhdHVzOworCXVuc2lnbmVkIGludCB0aW1lb3V0ID0gMTAwMDsKKworCXdyaXRldyhKWl9NTUNfU1RSUENMX0NMT0NLX1NUT1AsIGhvc3QtPmJhc2UgKyBKWl9SRUdfTU1DX1NUUlBDTCk7CisJZG8geworCQlzdGF0dXMgPSByZWFkbChob3N0LT5iYXNlICsgSlpfUkVHX01NQ19TVEFUVVMpOworCX0gd2hpbGUgKHN0YXR1cyAmIEpaX01NQ19TVEFUVVNfQ0xLX0VOICYmIC0tdGltZW91dCk7Cit9CisKK3N0YXRpYyB2b2lkIGp6NDc0MF9tbWNfcmVzZXQoc3RydWN0IGp6NDc0MF9tbWNfaG9zdCAqaG9zdCkKK3sKKwl1aW50MzJfdCBzdGF0dXM7CisJdW5zaWduZWQgaW50IHRpbWVvdXQgPSAxMDAwOworCisJd3JpdGV3KEpaX01NQ19TVFJQQ0xfUkVTRVQsIGhvc3QtPmJhc2UgKyBKWl9SRUdfTU1DX1NUUlBDTCk7CisJdWRlbGF5KDEwKTsKKwlkbyB7CisJCXN0YXR1cyA9IHJlYWRsKGhvc3QtPmJhc2UgKyBKWl9SRUdfTU1DX1NUQVRVUyk7CisJfSB3aGlsZSAoc3RhdHVzICYgSlpfTU1DX1NUQVRVU19JU19SRVNFVFRJTkcgJiYgLS10aW1lb3V0KTsKK30KKworc3RhdGljIHZvaWQgano0NzQwX21tY19yZXF1ZXN0X2RvbmUoc3RydWN0IGp6NDc0MF9tbWNfaG9zdCAqaG9zdCkKK3sKKwlzdHJ1Y3QgbW1jX3JlcXVlc3QgKnJlcTsKKworCXJlcSA9IGhvc3QtPnJlcTsKKwlob3N0LT5yZXEgPSBOVUxMOworCisJbW1jX3JlcXVlc3RfZG9uZShob3N0LT5tbWMsIHJlcSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgano0NzQwX21tY19wb2xsX2lycShzdHJ1Y3Qgano0NzQwX21tY19ob3N0ICpob3N0LAorCXVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IHRpbWVvdXQgPSAweDgwMDsKKwl1aW50MTZfdCBzdGF0dXM7CisKKwlkbyB7CisJCXN0YXR1cyA9IHJlYWR3KGhvc3QtPmJhc2UgKyBKWl9SRUdfTU1DX0lSRUcpOworCX0gd2hpbGUgKCEoc3RhdHVzICYgaXJxKSAmJiAtLXRpbWVvdXQpOworCisJaWYgKHRpbWVvdXQgPT0gMCkgeworCQlzZXRfYml0KDAsICZob3N0LT53YWl0aW5nKTsKKwkJbW9kX3RpbWVyKCZob3N0LT50aW1lb3V0X3RpbWVyLCBqaWZmaWVzICsgNSpIWik7CisJCWp6NDc0MF9tbWNfc2V0X2lycV9lbmFibGVkKGhvc3QsIGlycSwgdHJ1ZSk7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgano0NzQwX21tY190cmFuc2Zlcl9jaGVja19zdGF0ZShzdHJ1Y3Qgano0NzQwX21tY19ob3N0ICpob3N0LAorCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKK3sKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gcmVhZGwoaG9zdC0+YmFzZSArIEpaX1JFR19NTUNfU1RBVFVTKTsKKwlpZiAoc3RhdHVzICYgSlpfTU1DX1NUQVRVU19XUklURV9FUlJPUl9NQVNLKSB7CisJCWlmIChzdGF0dXMgJiAoSlpfTU1DX1NUQVRVU19USU1FT1VUX1dSSVRFKSkgeworCQkJaG9zdC0+cmVxLT5jbWQtPmVycm9yID0gLUVUSU1FRE9VVDsKKwkJCWRhdGEtPmVycm9yID0gLUVUSU1FRE9VVDsKKwkJfSBlbHNlIHsKKwkJCWhvc3QtPnJlcS0+Y21kLT5lcnJvciA9IC1FSU87CisJCQlkYXRhLT5lcnJvciA9IC1FSU87CisJCX0KKwl9Cit9CisKK3N0YXRpYyBib29sIGp6NDc0MF9tbWNfd3JpdGVfZGF0YShzdHJ1Y3Qgano0NzQwX21tY19ob3N0ICpob3N0LAorCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc2dfbWFwcGluZ19pdGVyICptaXRlciA9ICZob3N0LT5taXRlcjsKKwl2b2lkIF9faW9tZW0gKmZpZm9fYWRkciA9IGhvc3QtPmJhc2UgKyBKWl9SRUdfTU1DX1RYRklGTzsKKwl1aW50MzJfdCAqYnVmOworCWJvb2wgdGltZW91dDsKKwlzaXplX3QgaSwgajsKKworCXdoaWxlIChzZ19taXRlcl9uZXh0KG1pdGVyKSkgeworCQlidWYgPSBtaXRlci0+YWRkcjsKKwkJaSA9IG1pdGVyLT5sZW5ndGggLyA0OworCQlqID0gaSAvIDg7CisJCWkgPSBpICYgMHg3OworCQl3aGlsZSAoaikgeworCQkJdGltZW91dCA9IGp6NDc0MF9tbWNfcG9sbF9pcnEoaG9zdCwgSlpfTU1DX0lSUV9UWEZJRk9fV1JfUkVRKTsKKwkJCWlmICh1bmxpa2VseSh0aW1lb3V0KSkKKwkJCQlnb3RvIHBvbGxfdGltZW91dDsKKworCQkJd3JpdGVsKGJ1ZlswXSwgZmlmb19hZGRyKTsKKwkJCXdyaXRlbChidWZbMV0sIGZpZm9fYWRkcik7CisJCQl3cml0ZWwoYnVmWzJdLCBmaWZvX2FkZHIpOworCQkJd3JpdGVsKGJ1ZlszXSwgZmlmb19hZGRyKTsKKwkJCXdyaXRlbChidWZbNF0sIGZpZm9fYWRkcik7CisJCQl3cml0ZWwoYnVmWzVdLCBmaWZvX2FkZHIpOworCQkJd3JpdGVsKGJ1Zls2XSwgZmlmb19hZGRyKTsKKwkJCXdyaXRlbChidWZbN10sIGZpZm9fYWRkcik7CisJCQlidWYgKz0gODsKKwkJCS0tajsKKwkJfQorCQlpZiAodW5saWtlbHkoaSkpIHsKKwkJCXRpbWVvdXQgPSBqejQ3NDBfbW1jX3BvbGxfaXJxKGhvc3QsIEpaX01NQ19JUlFfVFhGSUZPX1dSX1JFUSk7CisJCQlpZiAodW5saWtlbHkodGltZW91dCkpCisJCQkJZ290byBwb2xsX3RpbWVvdXQ7CisKKwkJCXdoaWxlIChpKSB7CisJCQkJd3JpdGVsKCpidWYsIGZpZm9fYWRkcik7CisJCQkJKytidWY7CisJCQkJLS1pOworCQkJfQorCQl9CisJCWRhdGEtPmJ5dGVzX3hmZXJlZCArPSBtaXRlci0+bGVuZ3RoOworCX0KKwlzZ19taXRlcl9zdG9wKG1pdGVyKTsKKworCXJldHVybiBmYWxzZTsKKworcG9sbF90aW1lb3V0OgorCW1pdGVyLT5jb25zdW1lZCA9ICh2b2lkICopYnVmIC0gbWl0ZXItPmFkZHI7CisJZGF0YS0+Ynl0ZXNfeGZlcmVkICs9IG1pdGVyLT5jb25zdW1lZDsKKwlzZ19taXRlcl9zdG9wKG1pdGVyKTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBqejQ3NDBfbW1jX3JlYWRfZGF0YShzdHJ1Y3Qgano0NzQwX21tY19ob3N0ICpob3N0LAorCQkJCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc2dfbWFwcGluZ19pdGVyICptaXRlciA9ICZob3N0LT5taXRlcjsKKwl2b2lkIF9faW9tZW0gKmZpZm9fYWRkciA9IGhvc3QtPmJhc2UgKyBKWl9SRUdfTU1DX1JYRklGTzsKKwl1aW50MzJfdCAqYnVmOworCXVpbnQzMl90IGQ7CisJdWludDE2X3Qgc3RhdHVzOworCXNpemVfdCBpLCBqOworCXVuc2lnbmVkIGludCB0aW1lb3V0OworCisJd2hpbGUgKHNnX21pdGVyX25leHQobWl0ZXIpKSB7CisJCWJ1ZiA9IG1pdGVyLT5hZGRyOworCQlpID0gbWl0ZXItPmxlbmd0aDsKKwkJaiA9IGkgLyAzMjsKKwkJaSA9IGkgJiAweDFmOworCQl3aGlsZSAoaikgeworCQkJdGltZW91dCA9IGp6NDc0MF9tbWNfcG9sbF9pcnEoaG9zdCwgSlpfTU1DX0lSUV9SWEZJRk9fUkRfUkVRKTsKKwkJCWlmICh1bmxpa2VseSh0aW1lb3V0KSkKKwkJCQlnb3RvIHBvbGxfdGltZW91dDsKKworCQkJYnVmWzBdID0gcmVhZGwoZmlmb19hZGRyKTsKKwkJCWJ1ZlsxXSA9IHJlYWRsKGZpZm9fYWRkcik7CisJCQlidWZbMl0gPSByZWFkbChmaWZvX2FkZHIpOworCQkJYnVmWzNdID0gcmVhZGwoZmlmb19hZGRyKTsKKwkJCWJ1Zls0XSA9IHJlYWRsKGZpZm9fYWRkcik7CisJCQlidWZbNV0gPSByZWFkbChmaWZvX2FkZHIpOworCQkJYnVmWzZdID0gcmVhZGwoZmlmb19hZGRyKTsKKwkJCWJ1Zls3XSA9IHJlYWRsKGZpZm9fYWRkcik7CisKKwkJCWJ1ZiArPSA4OworCQkJLS1qOworCQl9CisKKwkJaWYgKHVubGlrZWx5KGkpKSB7CisJCQl0aW1lb3V0ID0gano0NzQwX21tY19wb2xsX2lycShob3N0LCBKWl9NTUNfSVJRX1JYRklGT19SRF9SRVEpOworCQkJaWYgKHVubGlrZWx5KHRpbWVvdXQpKQorCQkJCWdvdG8gcG9sbF90aW1lb3V0OworCisJCQl3aGlsZSAoaSA+PSA0KSB7CisJCQkJKmJ1ZisrID0gcmVhZGwoZmlmb19hZGRyKTsKKwkJCQlpIC09IDQ7CisJCQl9CisJCQlpZiAodW5saWtlbHkoaSA+IDApKSB7CisJCQkJZCA9IHJlYWRsKGZpZm9fYWRkcik7CisJCQkJbWVtY3B5KGJ1ZiwgJmQsIGkpOworCQkJfQorCQl9CisJCWRhdGEtPmJ5dGVzX3hmZXJlZCArPSBtaXRlci0+bGVuZ3RoOworCisJCS8qIFRoaXMgY2FuIGdvIGF3YXkgb25jZSBNSVBTIGltcGxlbWVudHMKKwkJICogZmx1c2hfa2VybmVsX2RjYWNoZV9wYWdlICovCisJCWZsdXNoX2RjYWNoZV9wYWdlKG1pdGVyLT5wYWdlKTsKKwl9CisJc2dfbWl0ZXJfc3RvcChtaXRlcik7CisKKwkvKiBGb3Igd2hhdGV2ZXIgcmVhc29uIHRoZXJlIGlzIHNvbWV0aW1lIG9uZSB3b3JkIG1vcmUgaW4gdGhlIGZpZm8gdGhlbgorCSAqIHJlcXVlc3RlZCAqLworCXRpbWVvdXQgPSAxMDAwOworCXN0YXR1cyA9IHJlYWRsKGhvc3QtPmJhc2UgKyBKWl9SRUdfTU1DX1NUQVRVUyk7CisJd2hpbGUgKCEoc3RhdHVzICYgSlpfTU1DX1NUQVRVU19EQVRBX0ZJRk9fRU1QVFkpICYmIC0tdGltZW91dCkgeworCQlkID0gcmVhZGwoZmlmb19hZGRyKTsKKwkJc3RhdHVzID0gcmVhZGwoaG9zdC0+YmFzZSArIEpaX1JFR19NTUNfU1RBVFVTKTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7CisKK3BvbGxfdGltZW91dDoKKwltaXRlci0+Y29uc3VtZWQgPSAodm9pZCAqKWJ1ZiAtIG1pdGVyLT5hZGRyOworCWRhdGEtPmJ5dGVzX3hmZXJlZCArPSBtaXRlci0+Y29uc3VtZWQ7CisJc2dfbWl0ZXJfc3RvcChtaXRlcik7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgano0NzQwX21tY190aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3Qgano0NzQwX21tY19ob3N0ICpob3N0ID0gKHN0cnVjdCBqejQ3NDBfbW1jX2hvc3QgKilkYXRhOworCisJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoMCwgJmhvc3QtPndhaXRpbmcpKQorCQlyZXR1cm47CisKKwlqejQ3NDBfbW1jX3NldF9pcnFfZW5hYmxlZChob3N0LCBKWl9NTUNfSVJRX0VORF9DTURfUkVTLCBmYWxzZSk7CisKKwlob3N0LT5yZXEtPmNtZC0+ZXJyb3IgPSAtRVRJTUVET1VUOworCWp6NDc0MF9tbWNfcmVxdWVzdF9kb25lKGhvc3QpOworfQorCitzdGF0aWMgdm9pZCBqejQ3NDBfbW1jX3JlYWRfcmVzcG9uc2Uoc3RydWN0IGp6NDc0MF9tbWNfaG9zdCAqaG9zdCwKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCkKK3sKKwlpbnQgaTsKKwl1aW50MTZfdCB0bXA7CisJdm9pZCBfX2lvbWVtICpmaWZvX2FkZHIgPSBob3N0LT5iYXNlICsgSlpfUkVHX01NQ19SRVNQX0ZJRk87CisKKwlpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfMTM2KSB7CisJCXRtcCA9IHJlYWR3KGZpZm9fYWRkcik7CisJCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKKwkJCWNtZC0+cmVzcFtpXSA9IHRtcCA8PCAyNDsKKwkJCXRtcCA9IHJlYWR3KGZpZm9fYWRkcik7CisJCQljbWQtPnJlc3BbaV0gfD0gdG1wIDw8IDg7CisJCQl0bXAgPSByZWFkdyhmaWZvX2FkZHIpOworCQkJY21kLT5yZXNwW2ldIHw9IHRtcCA+PiA4OworCQl9CisJfSBlbHNlIHsKKwkJY21kLT5yZXNwWzBdID0gcmVhZHcoZmlmb19hZGRyKSA8PCAyNDsKKwkJY21kLT5yZXNwWzBdIHw9IHJlYWR3KGZpZm9fYWRkcikgPDwgODsKKwkJY21kLT5yZXNwWzBdIHw9IHJlYWR3KGZpZm9fYWRkcikgJiAweGZmOworCX0KK30KKworc3RhdGljIHZvaWQgano0NzQwX21tY19zZW5kX2NvbW1hbmQoc3RydWN0IGp6NDc0MF9tbWNfaG9zdCAqaG9zdCwKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCkKK3sKKwl1aW50MzJfdCBjbWRhdCA9IGhvc3QtPmNtZGF0OworCisJaG9zdC0+Y21kYXQgJj0gfkpaX01NQ19DTURBVF9JTklUOworCWp6NDc0MF9tbWNfY2xvY2tfZGlzYWJsZShob3N0KTsKKworCWhvc3QtPmNtZCA9IGNtZDsKKworCWlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF9CVVNZKQorCQljbWRhdCB8PSBKWl9NTUNfQ01EQVRfQlVTWTsKKworCXN3aXRjaCAobW1jX3Jlc3BfdHlwZShjbWQpKSB7CisJY2FzZSBNTUNfUlNQX1IxQjoKKwljYXNlIE1NQ19SU1BfUjE6CisJCWNtZGF0IHw9IEpaX01NQ19DTURBVF9SU1BfUjE7CisJCWJyZWFrOworCWNhc2UgTU1DX1JTUF9SMjoKKwkJY21kYXQgfD0gSlpfTU1DX0NNREFUX1JTUF9SMjsKKwkJYnJlYWs7CisJY2FzZSBNTUNfUlNQX1IzOgorCQljbWRhdCB8PSBKWl9NTUNfQ01EQVRfUlNQX1IzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAoY21kLT5kYXRhKSB7CisJCWNtZGF0IHw9IEpaX01NQ19DTURBVF9EQVRBX0VOOworCQlpZiAoY21kLT5kYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKQorCQkJY21kYXQgfD0gSlpfTU1DX0NNREFUX1dSSVRFOworCQlpZiAoY21kLT5kYXRhLT5mbGFncyAmIE1NQ19EQVRBX1NUUkVBTSkKKwkJCWNtZGF0IHw9IEpaX01NQ19DTURBVF9TVFJFQU07CisKKwkJd3JpdGV3KGNtZC0+ZGF0YS0+Ymxrc3osIGhvc3QtPmJhc2UgKyBKWl9SRUdfTU1DX0JMS0xFTik7CisJCXdyaXRldyhjbWQtPmRhdGEtPmJsb2NrcywgaG9zdC0+YmFzZSArIEpaX1JFR19NTUNfTk9CKTsKKwl9CisKKwl3cml0ZWIoY21kLT5vcGNvZGUsIGhvc3QtPmJhc2UgKyBKWl9SRUdfTU1DX0NNRCk7CisJd3JpdGVsKGNtZC0+YXJnLCBob3N0LT5iYXNlICsgSlpfUkVHX01NQ19BUkcpOworCXdyaXRlbChjbWRhdCwgaG9zdC0+YmFzZSArIEpaX1JFR19NTUNfQ01EQVQpOworCisJano0NzQwX21tY19jbG9ja19lbmFibGUoaG9zdCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGp6X21tY19wcmVwYXJlX2RhdGFfdHJhbnNmZXIoc3RydWN0IGp6NDc0MF9tbWNfaG9zdCAqaG9zdCkKK3sKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCA9IGhvc3QtPnJlcS0+Y21kOworCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSA9IGNtZC0+ZGF0YTsKKwlpbnQgZGlyZWN0aW9uOworCisJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkKKwkJZGlyZWN0aW9uID0gU0dfTUlURVJfVE9fU0c7CisJZWxzZQorCQlkaXJlY3Rpb24gPSBTR19NSVRFUl9GUk9NX1NHOworCisJc2dfbWl0ZXJfc3RhcnQoJmhvc3QtPm1pdGVyLCBkYXRhLT5zZywgZGF0YS0+c2dfbGVuLCBkaXJlY3Rpb24pOworfQorCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBqel9tbWNfaXJxX3dvcmtlcihpbnQgaXJxLCB2b2lkICpkZXZpZCkKK3sKKwlzdHJ1Y3Qgano0NzQwX21tY19ob3N0ICpob3N0ID0gKHN0cnVjdCBqejQ3NDBfbW1jX2hvc3QgKilkZXZpZDsKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCA9IGhvc3QtPnJlcS0+Y21kOworCXN0cnVjdCBtbWNfcmVxdWVzdCAqcmVxID0gaG9zdC0+cmVxOworCWJvb2wgdGltZW91dCA9IGZhbHNlOworCisJaWYgKGNtZC0+ZXJyb3IpCisJCWhvc3QtPnN0YXRlID0gSlo0NzQwX01NQ19TVEFURV9ET05FOworCisJc3dpdGNoIChob3N0LT5zdGF0ZSkgeworCWNhc2UgSlo0NzQwX01NQ19TVEFURV9SRUFEX1JFU1BPTlNFOgorCQlpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfUFJFU0VOVCkKKwkJCWp6NDc0MF9tbWNfcmVhZF9yZXNwb25zZShob3N0LCBjbWQpOworCisJCWlmICghY21kLT5kYXRhKQorCQkJYnJlYWs7CisKKwkJanpfbW1jX3ByZXBhcmVfZGF0YV90cmFuc2Zlcihob3N0KTsKKworCWNhc2UgSlo0NzQwX01NQ19TVEFURV9UUkFOU0ZFUl9EQVRBOgorCQlpZiAoY21kLT5kYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpCisJCQl0aW1lb3V0ID0gano0NzQwX21tY19yZWFkX2RhdGEoaG9zdCwgY21kLT5kYXRhKTsKKwkJZWxzZQorCQkJdGltZW91dCA9IGp6NDc0MF9tbWNfd3JpdGVfZGF0YShob3N0LCBjbWQtPmRhdGEpOworCisJCWlmICh1bmxpa2VseSh0aW1lb3V0KSkgeworCQkJaG9zdC0+c3RhdGUgPSBKWjQ3NDBfTU1DX1NUQVRFX1RSQU5TRkVSX0RBVEE7CisJCQlicmVhazsKKwkJfQorCisJCWp6NDc0MF9tbWNfdHJhbnNmZXJfY2hlY2tfc3RhdGUoaG9zdCwgY21kLT5kYXRhKTsKKworCQl0aW1lb3V0ID0gano0NzQwX21tY19wb2xsX2lycShob3N0LCBKWl9NTUNfSVJRX0RBVEFfVFJBTl9ET05FKTsKKwkJaWYgKHVubGlrZWx5KHRpbWVvdXQpKSB7CisJCQlob3N0LT5zdGF0ZSA9IEpaNDc0MF9NTUNfU1RBVEVfU0VORF9TVE9QOworCQkJYnJlYWs7CisJCX0KKwkJd3JpdGV3KEpaX01NQ19JUlFfREFUQV9UUkFOX0RPTkUsIGhvc3QtPmJhc2UgKyBKWl9SRUdfTU1DX0lSRUcpOworCisJY2FzZSBKWjQ3NDBfTU1DX1NUQVRFX1NFTkRfU1RPUDoKKwkJaWYgKCFyZXEtPnN0b3ApCisJCQlicmVhazsKKworCQlqejQ3NDBfbW1jX3NlbmRfY29tbWFuZChob3N0LCByZXEtPnN0b3ApOworCisJCXRpbWVvdXQgPSBqejQ3NDBfbW1jX3BvbGxfaXJxKGhvc3QsIEpaX01NQ19JUlFfUFJHX0RPTkUpOworCQlpZiAodGltZW91dCkgeworCQkJaG9zdC0+c3RhdGUgPSBKWjQ3NDBfTU1DX1NUQVRFX0RPTkU7CisJCQlicmVhazsKKwkJfQorCWNhc2UgSlo0NzQwX01NQ19TVEFURV9ET05FOgorCQlicmVhazsKKwl9CisKKwlpZiAoIXRpbWVvdXQpCisJCWp6NDc0MF9tbWNfcmVxdWVzdF9kb25lKGhvc3QpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QganpfbW1jX2lycShpbnQgaXJxLCB2b2lkICpkZXZpZCkKK3sKKwlzdHJ1Y3Qgano0NzQwX21tY19ob3N0ICpob3N0ID0gZGV2aWQ7CisJc3RydWN0IG1tY19jb21tYW5kICpjbWQgPSBob3N0LT5jbWQ7CisJdWludDE2X3QgaXJxX3JlZywgc3RhdHVzLCB0bXA7CisKKwlpcnFfcmVnID0gcmVhZHcoaG9zdC0+YmFzZSArIEpaX1JFR19NTUNfSVJFRyk7CisKKwl0bXAgPSBpcnFfcmVnOworCWlycV9yZWcgJj0gfmhvc3QtPmlycV9tYXNrOworCisJdG1wICY9IH4oSlpfTU1DX0lSUV9UWEZJRk9fV1JfUkVRIHwgSlpfTU1DX0lSUV9SWEZJRk9fUkRfUkVRIHwKKwkJSlpfTU1DX0lSUV9QUkdfRE9ORSB8IEpaX01NQ19JUlFfREFUQV9UUkFOX0RPTkUpOworCisJaWYgKHRtcCAhPSBpcnFfcmVnKQorCQl3cml0ZXcodG1wICYgfmlycV9yZWcsIGhvc3QtPmJhc2UgKyBKWl9SRUdfTU1DX0lSRUcpOworCisJaWYgKGlycV9yZWcgJiBKWl9NTUNfSVJRX1NESU8pIHsKKwkJd3JpdGV3KEpaX01NQ19JUlFfU0RJTywgaG9zdC0+YmFzZSArIEpaX1JFR19NTUNfSVJFRyk7CisJCW1tY19zaWduYWxfc2Rpb19pcnEoaG9zdC0+bW1jKTsKKwkJaXJxX3JlZyAmPSB+SlpfTU1DX0lSUV9TRElPOworCX0KKworCWlmIChob3N0LT5yZXEgJiYgY21kICYmIGlycV9yZWcpIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdCgwLCAmaG9zdC0+d2FpdGluZykpIHsKKwkJCWRlbF90aW1lcigmaG9zdC0+dGltZW91dF90aW1lcik7CisKKwkJCXN0YXR1cyA9IHJlYWRsKGhvc3QtPmJhc2UgKyBKWl9SRUdfTU1DX1NUQVRVUyk7CisKKwkJCWlmIChzdGF0dXMgJiBKWl9NTUNfU1RBVFVTX1RJTUVPVVRfUkVTKSB7CisJCQkJCWNtZC0+ZXJyb3IgPSAtRVRJTUVET1VUOworCQkJfSBlbHNlIGlmIChzdGF0dXMgJiBKWl9NTUNfU1RBVFVTX0NSQ19SRVNfRVJSKSB7CisJCQkJCWNtZC0+ZXJyb3IgPSAtRUlPOworCQkJfSBlbHNlIGlmIChzdGF0dXMgJiAoSlpfTU1DX1NUQVRVU19DUkNfUkVBRF9FUlJPUiB8CisJCQkJICAgIEpaX01NQ19TVEFUVVNfQ1JDX1dSSVRFX0VSUk9SKSkgeworCQkJCQlpZiAoY21kLT5kYXRhKQorCQkJCQkJCWNtZC0+ZGF0YS0+ZXJyb3IgPSAtRUlPOworCQkJCQljbWQtPmVycm9yID0gLUVJTzsKKwkJCX0gZWxzZSBpZiAoc3RhdHVzICYgKEpaX01NQ19TVEFUVVNfQ1JDX1JFQURfRVJST1IgfAorCQkJCQlKWl9NTUNfU1RBVFVTX0NSQ19XUklURV9FUlJPUikpIHsKKwkJCQkJaWYgKGNtZC0+ZGF0YSkKKwkJCQkJCQljbWQtPmRhdGEtPmVycm9yID0gLUVJTzsKKwkJCQkJY21kLT5lcnJvciA9IC1FSU87CisJCQl9CisKKwkJCWp6NDc0MF9tbWNfc2V0X2lycV9lbmFibGVkKGhvc3QsIGlycV9yZWcsIGZhbHNlKTsKKwkJCXdyaXRldyhpcnFfcmVnLCBob3N0LT5iYXNlICsgSlpfUkVHX01NQ19JUkVHKTsKKworCQkJcmV0dXJuIElSUV9XQUtFX1RIUkVBRDsKKwkJfQorCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBqejQ3NDBfbW1jX3NldF9jbG9ja19yYXRlKHN0cnVjdCBqejQ3NDBfbW1jX2hvc3QgKmhvc3QsIGludCByYXRlKQoreworCWludCBkaXYgPSAwOworCWludCByZWFsX3JhdGU7CisKKwlqejQ3NDBfbW1jX2Nsb2NrX2Rpc2FibGUoaG9zdCk7CisJY2xrX3NldF9yYXRlKGhvc3QtPmNsaywgSlpfTU1DX0NMS19SQVRFKTsKKworCXJlYWxfcmF0ZSA9IGNsa19nZXRfcmF0ZShob3N0LT5jbGspOworCisJd2hpbGUgKHJlYWxfcmF0ZSA+IHJhdGUgJiYgZGl2IDwgNykgeworCQkrK2RpdjsKKwkJcmVhbF9yYXRlID4+PSAxOworCX0KKworCXdyaXRldyhkaXYsIGhvc3QtPmJhc2UgKyBKWl9SRUdfTU1DX0NMS1JUKTsKKwlyZXR1cm4gcmVhbF9yYXRlOworfQorCitzdGF0aWMgdm9pZCBqejQ3NDBfbW1jX3JlcXVlc3Qoc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBqejQ3NDBfbW1jX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCisJaG9zdC0+cmVxID0gcmVxOworCisJd3JpdGV3KDB4ZmZmZiwgaG9zdC0+YmFzZSArIEpaX1JFR19NTUNfSVJFRyk7CisKKwl3cml0ZXcoSlpfTU1DX0lSUV9FTkRfQ01EX1JFUywgaG9zdC0+YmFzZSArIEpaX1JFR19NTUNfSVJFRyk7CisJano0NzQwX21tY19zZXRfaXJxX2VuYWJsZWQoaG9zdCwgSlpfTU1DX0lSUV9FTkRfQ01EX1JFUywgdHJ1ZSk7CisKKwlob3N0LT5zdGF0ZSA9IEpaNDc0MF9NTUNfU1RBVEVfUkVBRF9SRVNQT05TRTsKKwlzZXRfYml0KDAsICZob3N0LT53YWl0aW5nKTsKKwltb2RfdGltZXIoJmhvc3QtPnRpbWVvdXRfdGltZXIsIGppZmZpZXMgKyA1KkhaKTsKKwlqejQ3NDBfbW1jX3NlbmRfY29tbWFuZChob3N0LCByZXEtPmNtZCk7Cit9CisKK3N0YXRpYyB2b2lkIGp6NDc0MF9tbWNfc2V0X2lvcyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcykKK3sKKwlzdHJ1Y3Qgano0NzQwX21tY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwlpZiAoaW9zLT5jbG9jaykKKwkJano0NzQwX21tY19zZXRfY2xvY2tfcmF0ZShob3N0LCBpb3MtPmNsb2NrKTsKKworCXN3aXRjaCAoaW9zLT5wb3dlcl9tb2RlKSB7CisJY2FzZSBNTUNfUE9XRVJfVVA6CisJCWp6NDc0MF9tbWNfcmVzZXQoaG9zdCk7CisJCWlmIChncGlvX2lzX3ZhbGlkKGhvc3QtPnBkYXRhLT5ncGlvX3Bvd2VyKSkKKwkJCWdwaW9fc2V0X3ZhbHVlKGhvc3QtPnBkYXRhLT5ncGlvX3Bvd2VyLAorCQkJCQkhaG9zdC0+cGRhdGEtPnBvd2VyX2FjdGl2ZV9sb3cpOworCQlob3N0LT5jbWRhdCB8PSBKWl9NTUNfQ01EQVRfSU5JVDsKKwkJY2xrX2VuYWJsZShob3N0LT5jbGspOworCQlicmVhazsKKwljYXNlIE1NQ19QT1dFUl9PTjoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKGdwaW9faXNfdmFsaWQoaG9zdC0+cGRhdGEtPmdwaW9fcG93ZXIpKQorCQkJZ3Bpb19zZXRfdmFsdWUoaG9zdC0+cGRhdGEtPmdwaW9fcG93ZXIsCisJCQkJCWhvc3QtPnBkYXRhLT5wb3dlcl9hY3RpdmVfbG93KTsKKwkJY2xrX2Rpc2FibGUoaG9zdC0+Y2xrKTsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChpb3MtPmJ1c193aWR0aCkgeworCWNhc2UgTU1DX0JVU19XSURUSF8xOgorCQlob3N0LT5jbWRhdCAmPSB+SlpfTU1DX0NNREFUX0JVU19XSURUSF80QklUOworCQlicmVhazsKKwljYXNlIE1NQ19CVVNfV0lEVEhfNDoKKwkJaG9zdC0+Y21kYXQgfD0gSlpfTU1DX0NNREFUX0JVU19XSURUSF80QklUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgano0NzQwX21tY19nZXRfcm8oc3RydWN0IG1tY19ob3N0ICptbWMpCit7CisJc3RydWN0IGp6NDc0MF9tbWNfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJaWYgKCFncGlvX2lzX3ZhbGlkKGhvc3QtPnBkYXRhLT5ncGlvX3JlYWRfb25seSkpCisJCXJldHVybiAtRU5PU1lTOworCisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKGhvc3QtPnBkYXRhLT5ncGlvX3JlYWRfb25seSkgXgorCQlob3N0LT5wZGF0YS0+cmVhZF9vbmx5X2FjdGl2ZV9sb3c7Cit9CisKK3N0YXRpYyBpbnQgano0NzQwX21tY19nZXRfY2Qoc3RydWN0IG1tY19ob3N0ICptbWMpCit7CisJc3RydWN0IGp6NDc0MF9tbWNfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJaWYgKCFncGlvX2lzX3ZhbGlkKGhvc3QtPnBkYXRhLT5ncGlvX2NhcmRfZGV0ZWN0KSkKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoaG9zdC0+cGRhdGEtPmdwaW9fY2FyZF9kZXRlY3QpIF4KKwkJCWhvc3QtPnBkYXRhLT5jYXJkX2RldGVjdF9hY3RpdmVfbG93OworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgano0NzQwX21tY19jYXJkX2RldGVjdF9pcnEoaW50IGlycSwgdm9pZCAqZGV2aWQpCit7CisJc3RydWN0IGp6NDc0MF9tbWNfaG9zdCAqaG9zdCA9IGRldmlkOworCisJbW1jX2RldGVjdF9jaGFuZ2UoaG9zdC0+bW1jLCBIWiAvIDIpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBqejQ3NDBfbW1jX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3Qgano0NzQwX21tY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwlqejQ3NDBfbW1jX3NldF9pcnFfZW5hYmxlZChob3N0LCBKWl9NTUNfSVJRX1NESU8sIGVuYWJsZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIGp6NDc0MF9tbWNfb3BzID0geworCS5yZXF1ZXN0CT0gano0NzQwX21tY19yZXF1ZXN0LAorCS5zZXRfaW9zCT0gano0NzQwX21tY19zZXRfaW9zLAorCS5nZXRfcm8JCT0gano0NzQwX21tY19nZXRfcm8sCisJLmdldF9jZAkJPSBqejQ3NDBfbW1jX2dldF9jZCwKKwkuZW5hYmxlX3NkaW9faXJxID0gano0NzQwX21tY19lbmFibGVfc2Rpb19pcnEsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGp6X2dwaW9fYnVsa19yZXF1ZXN0IGp6NDc0MF9tbWNfcGluc1tdID0geworCUpaX0dQSU9fQlVMS19QSU4oTVNDX0NNRCksCisJSlpfR1BJT19CVUxLX1BJTihNU0NfQ0xLKSwKKwlKWl9HUElPX0JVTEtfUElOKE1TQ19EQVRBMCksCisJSlpfR1BJT19CVUxLX1BJTihNU0NfREFUQTEpLAorCUpaX0dQSU9fQlVMS19QSU4oTVNDX0RBVEEyKSwKKwlKWl9HUElPX0JVTEtfUElOKE1TQ19EQVRBMyksCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBqejQ3NDBfbW1jX3JlcXVlc3RfZ3BpbyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBncGlvLAorCWNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgb3V0cHV0LCBpbnQgdmFsdWUpCit7CisJaW50IHJldDsKKworCWlmICghZ3Bpb19pc192YWxpZChncGlvKSkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoZ3BpbywgbmFtZSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZXF1ZXN0ICVzIGdwaW86ICVkXG4iLCBuYW1lLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChvdXRwdXQpCisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChncGlvLCB2YWx1ZSk7CisJZWxzZQorCQlncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBqejQ3NDBfbW1jX3JlcXVlc3RfZ3Bpb3Moc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBqejQ3NDBfbW1jX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoIXBkYXRhKQorCQlyZXR1cm4gMDsKKworCXJldCA9IGp6NDc0MF9tbWNfcmVxdWVzdF9ncGlvKCZwZGV2LT5kZXYsIHBkYXRhLT5ncGlvX2NhcmRfZGV0ZWN0LAorCQkJIk1NQyBkZXRlY3QgY2hhbmdlIiwgZmFsc2UsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0ID0gano0NzQwX21tY19yZXF1ZXN0X2dwaW8oJnBkZXYtPmRldiwgcGRhdGEtPmdwaW9fcmVhZF9vbmx5LAorCQkJIk1NQyByZWFkIG9ubHkiLCBmYWxzZSwgMCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZV9ncGlvX2NhcmRfZGV0ZWN0OworCisJcmV0ID0gano0NzQwX21tY19yZXF1ZXN0X2dwaW8oJnBkZXYtPmRldiwgcGRhdGEtPmdwaW9fcG93ZXIsCisJCQkiTU1DIHJlYWQgb25seSIsIHRydWUsIHBkYXRhLT5wb3dlcl9hY3RpdmVfbG93KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9mcmVlX2dwaW9fcmVhZF9vbmx5OworCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2dwaW9fcmVhZF9vbmx5OgorCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5ncGlvX3JlYWRfb25seSkpCisJCWdwaW9fZnJlZShwZGF0YS0+Z3Bpb19yZWFkX29ubHkpOworZXJyX2ZyZWVfZ3Bpb19jYXJkX2RldGVjdDoKKwlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bpb19jYXJkX2RldGVjdCkpCisJCWdwaW9fZnJlZShwZGF0YS0+Z3Bpb19jYXJkX2RldGVjdCk7CitlcnI6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgano0NzQwX21tY19yZXF1ZXN0X2NkX2lycShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCXN0cnVjdCBqejQ3NDBfbW1jX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IGp6NDc0MF9tbWNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWlmICghZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bpb19jYXJkX2RldGVjdCkpCisJCXJldHVybiAwOworCisJaG9zdC0+Y2FyZF9kZXRlY3RfaXJxID0gZ3Bpb190b19pcnEocGRhdGEtPmdwaW9fY2FyZF9kZXRlY3QpOworCWlmIChob3N0LT5jYXJkX2RldGVjdF9pcnEgPCAwKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IGNhcmQgZGV0ZWN0IGlycVxuIik7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiByZXF1ZXN0X2lycShob3N0LT5jYXJkX2RldGVjdF9pcnEsIGp6NDc0MF9tbWNfY2FyZF9kZXRlY3RfaXJxLAorCQkJSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJIk1NQyBjYXJkIGRldGVjdCIsIGhvc3QpOworfQorCitzdGF0aWMgdm9pZCBqejQ3NDBfbW1jX2ZyZWVfZ3Bpb3Moc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgano0NzQwX21tY19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJaWYgKCFwZGF0YSkKKwkJcmV0dXJuOworCisJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPmdwaW9fcG93ZXIpKQorCQlncGlvX2ZyZWUocGRhdGEtPmdwaW9fcG93ZXIpOworCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5ncGlvX3JlYWRfb25seSkpCisJCWdwaW9fZnJlZShwZGF0YS0+Z3Bpb19yZWFkX29ubHkpOworCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5ncGlvX2NhcmRfZGV0ZWN0KSkKKwkJZ3Bpb19mcmVlKHBkYXRhLT5ncGlvX2NhcmRfZGV0ZWN0KTsKK30KKworc3RhdGljIGlubGluZSBzaXplX3Qgano0NzQwX21tY19udW1fcGlucyhzdHJ1Y3Qgano0NzQwX21tY19ob3N0ICpob3N0KQoreworCXNpemVfdCBudW1fcGlucyA9IEFSUkFZX1NJWkUoano0NzQwX21tY19waW5zKTsKKwlpZiAoaG9zdC0+cGRhdGEgJiYgaG9zdC0+cGRhdGEtPmRhdGFfMWJpdCkKKwkJbnVtX3BpbnMgLT0gMzsKKworCXJldHVybiBudW1fcGluczsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgano0NzQwX21tY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlKiBwZGV2KQoreworCWludCByZXQ7CisJc3RydWN0IG1tY19ob3N0ICptbWM7CisJc3RydWN0IGp6NDc0MF9tbWNfaG9zdCAqaG9zdDsKKwlzdHJ1Y3Qgano0NzQwX21tY19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKworCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwltbWMgPSBtbWNfYWxsb2NfaG9zdChzaXplb2Yoc3RydWN0IGp6NDc0MF9tbWNfaG9zdCksICZwZGV2LT5kZXYpOworCWlmICghbW1jKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvYyBtbWMgaG9zdCBzdHJ1Y3R1cmVcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlob3N0ID0gbW1jX3ByaXYobW1jKTsKKwlob3N0LT5wZGF0YSA9IHBkYXRhOworCisJaG9zdC0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaG9zdC0+aXJxIDwgMCkgeworCQlyZXQgPSBob3N0LT5pcnE7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgcGxhdGZvcm0gaXJxOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZnJlZV9ob3N0OworCX0KKworCWhvc3QtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm1tYyIpOworCWlmICghaG9zdC0+Y2xrKSB7CisJCXJldCA9IC1FTk9FTlQ7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgbW1jIGNsb2NrXG4iKTsKKwkJZ290byBlcnJfZnJlZV9ob3N0OworCX0KKworCWhvc3QtPm1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFob3N0LT5tZW0pIHsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBiYXNlIHBsYXRmb3JtIG1lbW9yeVxuIik7CisJCWdvdG8gZXJyX2Nsa19wdXQ7CisJfQorCisJaG9zdC0+bWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKGhvc3QtPm1lbS0+c3RhcnQsCisJCQkJCXJlc291cmNlX3NpemUoaG9zdC0+bWVtKSwgcGRldi0+bmFtZSk7CisJaWYgKCFob3N0LT5tZW0pIHsKKwkJcmV0ID0gLUVCVVNZOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBiYXNlIG1lbW9yeSByZWdpb25cbiIpOworCQlnb3RvIGVycl9jbGtfcHV0OworCX0KKworCWhvc3QtPmJhc2UgPSBpb3JlbWFwX25vY2FjaGUoaG9zdC0+bWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShob3N0LT5tZW0pKTsKKwlpZiAoIWhvc3QtPmJhc2UpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gaW9yZW1hcCBiYXNlIG1lbW9yeVxuIik7CisJCWdvdG8gZXJyX3JlbGVhc2VfbWVtX3JlZ2lvbjsKKwl9CisKKwlyZXQgPSBqel9ncGlvX2J1bGtfcmVxdWVzdChqejQ3NDBfbW1jX3BpbnMsIGp6NDc0MF9tbWNfbnVtX3BpbnMoaG9zdCkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgbW1jIHBpbnM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9pb3VubWFwOworCX0KKworCXJldCA9IGp6NDc0MF9tbWNfcmVxdWVzdF9ncGlvcyhwZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9ncGlvX2J1bGtfZnJlZTsKKworCW1tYy0+b3BzID0gJmp6NDc0MF9tbWNfb3BzOworCW1tYy0+Zl9taW4gPSBKWl9NTUNfQ0xLX1JBVEUgLyAxMjg7CisJbW1jLT5mX21heCA9IEpaX01NQ19DTEtfUkFURTsKKwltbWMtPm9jcl9hdmFpbCA9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0OworCW1tYy0+Y2FwcyA9IChwZGF0YSAmJiBwZGF0YS0+ZGF0YV8xYml0KSA/IDAgOiBNTUNfQ0FQXzRfQklUX0RBVEE7CisJbW1jLT5jYXBzIHw9IE1NQ19DQVBfU0RJT19JUlE7CisKKwltbWMtPm1heF9ibGtfc2l6ZSA9ICgxIDw8IDEwKSAtIDE7CisJbW1jLT5tYXhfYmxrX2NvdW50ID0gKDEgPDwgMTUpIC0gMTsKKwltbWMtPm1heF9yZXFfc2l6ZSA9IG1tYy0+bWF4X2Jsa19zaXplICogbW1jLT5tYXhfYmxrX2NvdW50OworCisJbW1jLT5tYXhfcGh5c19zZWdzID0gMTI4OworCW1tYy0+bWF4X2h3X3NlZ3MgPSAxMjg7CisJbW1jLT5tYXhfc2VnX3NpemUgPSBtbWMtPm1heF9yZXFfc2l6ZTsKKworCWhvc3QtPm1tYyA9IG1tYzsKKwlob3N0LT5wZGV2ID0gcGRldjsKKwlzcGluX2xvY2tfaW5pdCgmaG9zdC0+bG9jayk7CisJaG9zdC0+aXJxX21hc2sgPSAweGZmZmY7CisKKwlyZXQgPSBqejQ3NDBfbW1jX3JlcXVlc3RfY2RfaXJxKHBkZXYsIGhvc3QpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgY2FyZCBkZXRlY3QgaXJxXG4iKTsKKwkJZ290byBlcnJfZnJlZV9ncGlvczsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShob3N0LT5pcnEsIGp6X21tY19pcnEsIGp6X21tY19pcnFfd29ya2VyLCAwLAorCQkJZGV2X25hbWUoJnBkZXYtPmRldiksIGhvc3QpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgaXJxOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZnJlZV9jYXJkX2RldGVjdF9pcnE7CisJfQorCisJano0NzQwX21tY19yZXNldChob3N0KTsKKwlqejQ3NDBfbW1jX2Nsb2NrX2Rpc2FibGUoaG9zdCk7CisJc2V0dXBfdGltZXIoJmhvc3QtPnRpbWVvdXRfdGltZXIsIGp6NDc0MF9tbWNfdGltZW91dCwKKwkJCSh1bnNpZ25lZCBsb25nKWhvc3QpOworCS8qIEl0IGlzIG5vdCBpbXBvcnRhbnQgd2hlbiBpdCB0aW1lcyBvdXQsIGl0IGp1c3QgbmVlZHMgdG8gdGltZW91dC4gKi8KKwlzZXRfdGltZXJfc2xhY2soJmhvc3QtPnRpbWVvdXRfdGltZXIsIEhaKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhvc3QpOworCXJldCA9IG1tY19hZGRfaG9zdChtbWMpOworCisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gYWRkIG1tYyBob3N0OiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZnJlZV9pcnE7CisJfQorCWRldl9pbmZvKCZwZGV2LT5kZXYsICJKWiBTRC9NTUMgY2FyZCBkcml2ZXIgcmVnaXN0ZXJlZFxuIik7CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfaXJxOgorCWZyZWVfaXJxKGhvc3QtPmlycSwgaG9zdCk7CitlcnJfZnJlZV9jYXJkX2RldGVjdF9pcnE6CisJaWYgKGhvc3QtPmNhcmRfZGV0ZWN0X2lycSA+PSAwKQorCQlmcmVlX2lycShob3N0LT5jYXJkX2RldGVjdF9pcnEsIGhvc3QpOworZXJyX2ZyZWVfZ3Bpb3M6CisJano0NzQwX21tY19mcmVlX2dwaW9zKHBkZXYpOworZXJyX2dwaW9fYnVsa19mcmVlOgorCWp6X2dwaW9fYnVsa19mcmVlKGp6NDc0MF9tbWNfcGlucywgano0NzQwX21tY19udW1fcGlucyhob3N0KSk7CitlcnJfaW91bm1hcDoKKwlpb3VubWFwKGhvc3QtPmJhc2UpOworZXJyX3JlbGVhc2VfbWVtX3JlZ2lvbjoKKwlyZWxlYXNlX21lbV9yZWdpb24oaG9zdC0+bWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShob3N0LT5tZW0pKTsKK2Vycl9jbGtfcHV0OgorCWNsa19wdXQoaG9zdC0+Y2xrKTsKK2Vycl9mcmVlX2hvc3Q6CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJbW1jX2ZyZWVfaG9zdChtbWMpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgano0NzQwX21tY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgano0NzQwX21tY19ob3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlkZWxfdGltZXJfc3luYygmaG9zdC0+dGltZW91dF90aW1lcik7CisJano0NzQwX21tY19zZXRfaXJxX2VuYWJsZWQoaG9zdCwgMHhmZiwgZmFsc2UpOworCWp6NDc0MF9tbWNfcmVzZXQoaG9zdCk7CisKKwltbWNfcmVtb3ZlX2hvc3QoaG9zdC0+bW1jKTsKKworCWZyZWVfaXJxKGhvc3QtPmlycSwgaG9zdCk7CisJaWYgKGhvc3QtPmNhcmRfZGV0ZWN0X2lycSA+PSAwKQorCQlmcmVlX2lycShob3N0LT5jYXJkX2RldGVjdF9pcnEsIGhvc3QpOworCisJano0NzQwX21tY19mcmVlX2dwaW9zKHBkZXYpOworCWp6X2dwaW9fYnVsa19mcmVlKGp6NDc0MF9tbWNfcGlucywgano0NzQwX21tY19udW1fcGlucyhob3N0KSk7CisKKwlpb3VubWFwKGhvc3QtPmJhc2UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihob3N0LT5tZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKGhvc3QtPm1lbSkpOworCisJY2xrX3B1dChob3N0LT5jbGspOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJbW1jX2ZyZWVfaG9zdChob3N0LT5tbWMpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIGludCBqejQ3NDBfbW1jX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBqejQ3NDBfbW1jX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCW1tY19zdXNwZW5kX2hvc3QoaG9zdC0+bW1jKTsKKworCWp6X2dwaW9fYnVsa19zdXNwZW5kKGp6NDc0MF9tbWNfcGlucywgano0NzQwX21tY19udW1fcGlucyhob3N0KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBqejQ3NDBfbW1jX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGp6NDc0MF9tbWNfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJanpfZ3Bpb19idWxrX3Jlc3VtZShqejQ3NDBfbW1jX3BpbnMsIGp6NDc0MF9tbWNfbnVtX3BpbnMoaG9zdCkpOworCisJbW1jX3Jlc3VtZV9ob3N0KGhvc3QtPm1tYyk7CisKKwlyZXR1cm4gMDsKK30KKworY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgano0NzQwX21tY19wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBqejQ3NDBfbW1jX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBqejQ3NDBfbW1jX3Jlc3VtZSwKKwkucG93ZXJvZmYJPSBqejQ3NDBfbW1jX3N1c3BlbmQsCisJLnJlc3RvcmUJPSBqejQ3NDBfbW1jX3Jlc3VtZSwKK307CisKKyNkZWZpbmUgSlo0NzQwX01NQ19QTV9PUFMgKCZqejQ3NDBfbW1jX3BtX29wcykKKyNlbHNlCisjZGVmaW5lIEpaNDc0MF9NTUNfUE1fT1BTIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBqejQ3NDBfbW1jX2RyaXZlciA9IHsKKwkucHJvYmUgPSBqejQ3NDBfbW1jX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChqejQ3NDBfbW1jX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiano0NzQwLW1tYyIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkucG0gPSBKWjQ3NDBfTU1DX1BNX09QUywKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgano0NzQwX21tY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmano0NzQwX21tY19kcml2ZXIpOworfQorbW9kdWxlX2luaXQoano0NzQwX21tY19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGp6NDc0MF9tbWNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZqejQ3NDBfbW1jX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChqejQ3NDBfbW1jX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkpaNDc0MCBTRC9NTUMgY29udHJvbGxlciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkxhcnMtUGV0ZXIgQ2xhdXNlbiA8bGFyc0BtZXRhZm9vLmRlPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tbWNfc3BpLmMgYi9kcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYwppbmRleCBhZDg0N2EyLi43YjBmM2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYwpAQCAtMTUzMywxMiArMTUzMywyMCBAQAogCXJldHVybiAwOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfT0YpCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtbWNfc3BpX29mX21hdGNoX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1tYy1zcGktc2xvdCIsIH0sCit9OworI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBtbWNfc3BpX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZSA9CQkibW1jX3NwaSIsCiAJCS5idXMgPQkJJnNwaV9idXNfdHlwZSwKIAkJLm93bmVyID0JVEhJU19NT0RVTEUsCisjaWYgZGVmaW5lZChDT05GSUdfT0YpCisJCS5vZl9tYXRjaF90YWJsZSA9IG1tY19zcGlfb2ZfbWF0Y2hfdGFibGUsCisjZW5kaWYKIAl9LAogCS5wcm9iZSA9CW1tY19zcGlfcHJvYmUsCiAJLnJlbW92ZSA9CV9fZGV2ZXhpdF9wKG1tY19zcGlfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMKaW5kZXggNDkxN2FmOS4uODQwYjMwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9hbWJhL21tY2kuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KIAotI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CkBAIC0zNywxMiArMzYsMzkgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBmbWF4ID0gNTE1NjMzOwogCisvKioKKyAqIHN0cnVjdCB2YXJpYW50X2RhdGEgLSBNTUNJIHZhcmlhbnQtc3BlY2lmaWMgcXVpcmtzCisgKiBAY2xrcmVnOiBkZWZhdWx0IHZhbHVlIGZvciBNQ0lDTE9DSyByZWdpc3RlcgorICogQGNsa3JlZ19lbmFibGU6IGVuYWJsZSB2YWx1ZSBmb3IgTU1DSUNMT0NLIHJlZ2lzdGVyCisgKiBAZGF0YWxlbmd0aF9iaXRzOiBudW1iZXIgb2YgYml0cyBpbiB0aGUgTU1DSURBVEFMRU5HVEggcmVnaXN0ZXIKKyAqLworc3RydWN0IHZhcmlhbnRfZGF0YSB7CisJdW5zaWduZWQgaW50CQljbGtyZWc7CisJdW5zaWduZWQgaW50CQljbGtyZWdfZW5hYmxlOworCXVuc2lnbmVkIGludAkJZGF0YWxlbmd0aF9iaXRzOworfTsKKworc3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF9hcm0gPSB7CisJLmRhdGFsZW5ndGhfYml0cwk9IDE2LAorfTsKKworc3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF91MzAwID0geworCS5jbGtyZWdfZW5hYmxlCQk9IDEgPDwgMTMsIC8qIEhXRkNFTiAqLworCS5kYXRhbGVuZ3RoX2JpdHMJPSAxNiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmFyaWFudF9kYXRhIHZhcmlhbnRfdXg1MDAgPSB7CisJLmNsa3JlZwkJCT0gTUNJX0NMS19FTkFCTEUsCisJLmNsa3JlZ19lbmFibGUJCT0gMSA8PCAxNCwgLyogSFdGQ0VOICovCisJLmRhdGFsZW5ndGhfYml0cwk9IDI0LAorfTsKIC8qCiAgKiBUaGlzIG11c3QgYmUgY2FsbGVkIHdpdGggaG9zdC0+bG9jayBoZWxkCiAgKi8KIHN0YXRpYyB2b2lkIG1tY2lfc2V0X2Nsa3JlZyhzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgZGVzaXJlZCkKIHsKLQl1MzIgY2xrID0gMDsKKwlzdHJ1Y3QgdmFyaWFudF9kYXRhICp2YXJpYW50ID0gaG9zdC0+dmFyaWFudDsKKwl1MzIgY2xrID0gdmFyaWFudC0+Y2xrcmVnOwogCiAJaWYgKGRlc2lyZWQpIHsKIAkJaWYgKGRlc2lyZWQgPj0gaG9zdC0+bWNsaykgewpAQCAtNTQsOCArODAsOCBAQAogCQkJCWNsayA9IDI1NTsKIAkJCWhvc3QtPmNjbGsgPSBob3N0LT5tY2xrIC8gKDIgKiAoY2xrICsgMSkpOwogCQl9Ci0JCWlmIChob3N0LT5od19kZXNpZ25lciA9PSBBTUJBX1ZFTkRPUl9TVCkKLQkJCWNsayB8PSBNQ0lfU1RfRkNFTjsgLyogQnVnIGZpeCBpbiBTVCBJUCBibG9jayAqLworCisJCWNsayB8PSB2YXJpYW50LT5jbGtyZWdfZW5hYmxlOwogCQljbGsgfD0gTUNJX0NMS19FTkFCTEU7CiAJCS8qIFRoaXMgaGFzbid0IHByb3ZlbiB0byBiZSB3b3J0aHdoaWxlICovCiAJCS8qIGNsayB8PSBNQ0lfQ0xLX1BXUlNBVkU7ICovCkBAIC05OCw2ICsxMjQsMTggQEAKIAlob3N0LT5kYXRhID0gTlVMTDsKIH0KIAorc3RhdGljIHZvaWQgbW1jaV9pbml0X3NnKHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBTR19NSVRFUl9BVE9NSUM7CisKKwlpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKQorCQlmbGFncyB8PSBTR19NSVRFUl9UT19TRzsKKwllbHNlCisJCWZsYWdzIHw9IFNHX01JVEVSX0ZST01fU0c7CisKKwlzZ19taXRlcl9zdGFydCgmaG9zdC0+c2dfbWl0ZXIsIGRhdGEtPnNnLCBkYXRhLT5zZ19sZW4sIGZsYWdzKTsKK30KKwogc3RhdGljIHZvaWQgbW1jaV9zdGFydF9kYXRhKHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKIHsKIAl1bnNpZ25lZCBpbnQgZGF0YWN0cmwsIHRpbWVvdXQsIGlycW1hc2s7CkBAIC0xMDksNyArMTQ3LDcgQEAKIAkJZGF0YS0+Ymxrc3osIGRhdGEtPmJsb2NrcywgZGF0YS0+ZmxhZ3MpOwogCiAJaG9zdC0+ZGF0YSA9IGRhdGE7Ci0JaG9zdC0+c2l6ZSA9IGRhdGEtPmJsa3N6OworCWhvc3QtPnNpemUgPSBkYXRhLT5ibGtzeiAqIGRhdGEtPmJsb2NrczsKIAlob3N0LT5kYXRhX3hmZXJlZCA9IDA7CiAKIAltbWNpX2luaXRfc2coaG9zdCwgZGF0YSk7CkBAIC0yMTAsOCArMjQ4LDE3IEBACiAJCSAqIFdlIGhpdCBhbiBlcnJvciBjb25kaXRpb24uICBFbnN1cmUgdGhhdCBhbnkgZGF0YQogCQkgKiBwYXJ0aWFsbHkgd3JpdHRlbiB0byBhIHBhZ2UgaXMgcHJvcGVybHkgY29oZXJlbnQuCiAJCSAqLwotCQlpZiAoaG9zdC0+c2dfbGVuICYmIGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkKLQkJCWZsdXNoX2RjYWNoZV9wYWdlKHNnX3BhZ2UoaG9zdC0+c2dfcHRyKSk7CisJCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpIHsKKwkJCXN0cnVjdCBzZ19tYXBwaW5nX2l0ZXIgKnNnX21pdGVyID0gJmhvc3QtPnNnX21pdGVyOworCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQkJaWYgKHNnX21pdGVyX25leHQoc2dfbWl0ZXIpKSB7CisJCQkJZmx1c2hfZGNhY2hlX3BhZ2Uoc2dfbWl0ZXItPnBhZ2UpOworCQkJCXNnX21pdGVyX3N0b3Aoc2dfbWl0ZXIpOworCQkJfQorCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQl9CiAJfQogCWlmIChzdGF0dXMgJiBNQ0lfREFUQUVORCkgewogCQltbWNpX3N0b3BfZGF0YShob3N0KTsKQEAgLTMxNCwxNSArMzYxLDE4IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgbW1jaV9waW9faXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0ID0gZGV2X2lkOworCXN0cnVjdCBzZ19tYXBwaW5nX2l0ZXIgKnNnX21pdGVyID0gJmhvc3QtPnNnX21pdGVyOwogCXZvaWQgX19pb21lbSAqYmFzZSA9IGhvc3QtPmJhc2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgc3RhdHVzOwogCiAJc3RhdHVzID0gcmVhZGwoYmFzZSArIE1NQ0lTVEFUVVMpOwogCiAJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJpcnExIChwaW8pICUwOHhcbiIsIHN0YXR1cyk7CiAKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKIAlkbyB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCXVuc2lnbmVkIGludCByZW1haW4sIGxlbjsKIAkJY2hhciAqYnVmZmVyOwogCkBAIC0zMzYsMTEgKzM4NiwxMSBAQAogCQlpZiAoIShzdGF0dXMgJiAoTUNJX1RYRklGT0hBTEZFTVBUWXxNQ0lfUlhEQVRBQVZMQkwpKSkKIAkJCWJyZWFrOwogCi0JCS8qCi0JCSAqIE1hcCB0aGUgY3VycmVudCBzY2F0dGVyIGJ1ZmZlci4KLQkJICovCi0JCWJ1ZmZlciA9IG1tY2lfa21hcF9hdG9taWMoaG9zdCwgJmZsYWdzKSArIGhvc3QtPnNnX29mZjsKLQkJcmVtYWluID0gaG9zdC0+c2dfcHRyLT5sZW5ndGggLSBob3N0LT5zZ19vZmY7CisJCWlmICghc2dfbWl0ZXJfbmV4dChzZ19taXRlcikpCisJCQlicmVhazsKKworCQlidWZmZXIgPSBzZ19taXRlci0+YWRkcjsKKwkJcmVtYWluID0gc2dfbWl0ZXItPmxlbmd0aDsKIAogCQlsZW4gPSAwOwogCQlpZiAoc3RhdHVzICYgTUNJX1JYQUNUSVZFKQpAQCAtMzQ4LDMxICszOTgsMjQgQEAKIAkJaWYgKHN0YXR1cyAmIE1DSV9UWEFDVElWRSkKIAkJCWxlbiA9IG1tY2lfcGlvX3dyaXRlKGhvc3QsIGJ1ZmZlciwgcmVtYWluLCBzdGF0dXMpOwogCi0JCS8qCi0JCSAqIFVubWFwIHRoZSBidWZmZXIuCi0JCSAqLwotCQltbWNpX2t1bm1hcF9hdG9taWMoaG9zdCwgYnVmZmVyLCAmZmxhZ3MpOworCQlzZ19taXRlci0+Y29uc3VtZWQgPSBsZW47CiAKLQkJaG9zdC0+c2dfb2ZmICs9IGxlbjsKIAkJaG9zdC0+c2l6ZSAtPSBsZW47CiAJCXJlbWFpbiAtPSBsZW47CiAKIAkJaWYgKHJlbWFpbikKIAkJCWJyZWFrOwogCi0JCS8qCi0JCSAqIElmIHdlIHdlcmUgcmVhZGluZywgYW5kIHdlIGhhdmUgY29tcGxldGVkIHRoaXMKLQkJICogcGFnZSwgZW5zdXJlIHRoYXQgdGhlIGRhdGEgY2FjaGUgaXMgY29oZXJlbnQuCi0JCSAqLwogCQlpZiAoc3RhdHVzICYgTUNJX1JYQUNUSVZFKQotCQkJZmx1c2hfZGNhY2hlX3BhZ2Uoc2dfcGFnZShob3N0LT5zZ19wdHIpKTsKLQotCQlpZiAoIW1tY2lfbmV4dF9zZyhob3N0KSkKLQkJCWJyZWFrOworCQkJZmx1c2hfZGNhY2hlX3BhZ2Uoc2dfbWl0ZXItPnBhZ2UpOwogCiAJCXN0YXR1cyA9IHJlYWRsKGJhc2UgKyBNTUNJU1RBVFVTKTsKIAl9IHdoaWxlICgxKTsKIAorCXNnX21pdGVyX3N0b3Aoc2dfbWl0ZXIpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCiAJLyoKIAkgKiBJZiB3ZSdyZSBuZWFyaW5nIHRoZSBlbmQgb2YgdGhlIHJlYWQsIHN3aXRjaCB0bwogCSAqICJhbnkgZGF0YSBhdmFpbGFibGUiIG1vZGUuCkBAIC00NzcsMTYgKzUyMCw5IEBACiAJCQkvKiBUaGlzIGltcGxpY2l0bHkgZW5hYmxlcyB0aGUgcmVndWxhdG9yICovCiAJCQltbWNfcmVndWxhdG9yX3NldF9vY3IoaG9zdC0+dmNjLCBpb3MtPnZkZCk7CiAjZW5kaWYKLQkJLyoKLQkJICogVGhlIHRyYW5zbGF0ZV92ZGQgZnVuY3Rpb24gaXMgbm90IHVzZWQgaWYgeW91IGhhdmUKLQkJICogYW4gZXh0ZXJuYWwgcmVndWxhdG9yLCBvciB5b3VyIGRlc2lnbiBpcyByZWFsbHkgd2VpcmQuCi0JCSAqIFVzaW5nIGl0IHdvdWxkIG1lYW4gc2VuZGluZyBpbiBwb3dlciBjb250cm9sIEJPVEggdXNpbmcKLQkJICogYSByZWd1bGF0b3IgQU5EIHRoZSA0IE1NQ0lQV1IgYml0cy4gSWYgd2UgZG9uJ3QgaGF2ZQotCQkgKiBhIHJlZ3VsYXRvciwgd2UgbWlnaHQgaGF2ZSBzb21lIG90aGVyIHBsYXRmb3JtIHNwZWNpZmljCi0JCSAqIHBvd2VyIGNvbnRyb2wgYmVoaW5kIHRoaXMgdHJhbnNsYXRlIGZ1bmN0aW9uLgotCQkgKi8KLQkJaWYgKCFob3N0LT52Y2MgJiYgaG9zdC0+cGxhdC0+dHJhbnNsYXRlX3ZkZCkKLQkJCXB3ciB8PSBob3N0LT5wbGF0LT50cmFuc2xhdGVfdmRkKG1tY19kZXYobW1jKSwgaW9zLT52ZGQpOworCQlpZiAoaG9zdC0+cGxhdC0+dmRkX2hhbmRsZXIpCisJCQlwd3IgfD0gaG9zdC0+cGxhdC0+dmRkX2hhbmRsZXIobW1jX2RldihtbWMpLCBpb3MtPnZkZCwKKwkJCQkJCSAgICAgICBpb3MtPnBvd2VyX21vZGUpOwogCQkvKiBUaGUgU1QgdmVyc2lvbiBkb2VzIG5vdCBoYXZlIHRoaXMsIGZhbGwgdGhyb3VnaCB0byBQT1dFUl9PTiAqLwogCQlpZiAoaG9zdC0+aHdfZGVzaWduZXIgIT0gQU1CQV9WRU5ET1JfU1QpIHsKIAkJCXB3ciB8PSBNQ0lfUFdSX1VQOwpAQCAtNTM5LDkgKzU3NSwxMyBAQAogCWlmIChob3N0LT5ncGlvX2NkID09IC1FTk9TWVMpCiAJCXN0YXR1cyA9IGhvc3QtPnBsYXQtPnN0YXR1cyhtbWNfZGV2KGhvc3QtPm1tYykpOwogCWVsc2UKLQkJc3RhdHVzID0gZ3Bpb19nZXRfdmFsdWUoaG9zdC0+Z3Bpb19jZCk7CisJCXN0YXR1cyA9ICFncGlvX2dldF92YWx1ZShob3N0LT5ncGlvX2NkKTsKIAotCXJldHVybiAhc3RhdHVzOworCS8qCisJICogVXNlIHBvc2l0aXZlIGxvZ2ljIHRocm91Z2hvdXQgLSBzdGF0dXMgaXMgemVybyBmb3Igbm8gY2FyZCwKKwkgKiBub24temVybyBmb3IgY2FyZCBpbnNlcnRlZC4KKwkgKi8KKwlyZXR1cm4gc3RhdHVzOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBtbWNpX29wcyA9IHsKQEAgLTU1MSwyMSArNTkxLDEwIEBACiAJLmdldF9jZAkJPSBtbWNpX2dldF9jZCwKIH07CiAKLXN0YXRpYyB2b2lkIG1tY2lfY2hlY2tfc3RhdHVzKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0ID0gKHN0cnVjdCBtbWNpX2hvc3QgKilkYXRhOwotCXVuc2lnbmVkIGludCBzdGF0dXMgPSBtbWNpX2dldF9jZChob3N0LT5tbWMpOwotCi0JaWYgKHN0YXR1cyBeIGhvc3QtPm9sZHN0YXQpCi0JCW1tY19kZXRlY3RfY2hhbmdlKGhvc3QtPm1tYywgMCk7Ci0KLQlob3N0LT5vbGRzdGF0ID0gc3RhdHVzOwotCW1vZF90aW1lcigmaG9zdC0+dGltZXIsIGppZmZpZXMgKyBIWik7Ci19Ci0KIHN0YXRpYyBpbnQgX19kZXZpbml0IG1tY2lfcHJvYmUoc3RydWN0IGFtYmFfZGV2aWNlICpkZXYsIHN0cnVjdCBhbWJhX2lkICppZCkKIHsKIAlzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhICpwbGF0ID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgdmFyaWFudF9kYXRhICp2YXJpYW50ID0gaWQtPmRhdGE7CiAJc3RydWN0IG1tY2lfaG9zdCAqaG9zdDsKIAlzdHJ1Y3QgbW1jX2hvc3QgKm1tYzsKIAlpbnQgcmV0OwpAQCAtNjA5LDYgKzYzOCw3IEBACiAJCWdvdG8gY2xrX2ZyZWU7CiAKIAlob3N0LT5wbGF0ID0gcGxhdDsKKwlob3N0LT52YXJpYW50ID0gdmFyaWFudDsKIAlob3N0LT5tY2xrID0gY2xrX2dldF9yYXRlKGhvc3QtPmNsayk7CiAJLyoKIAkgKiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIG1jbGsgaXMgbWF4IDEwMCBNSHosCkBAIC02NjksNiArNjk5LDcgQEAKIAlpZiAoaG9zdC0+dmNjID09IE5VTEwpCiAJCW1tYy0+b2NyX2F2YWlsID0gcGxhdC0+b2NyX21hc2s7CiAJbW1jLT5jYXBzID0gcGxhdC0+Y2FwYWJpbGl0aWVzOworCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQX05FRURTX1BPTEw7CiAKIAkvKgogCSAqIFdlIGNhbiBkbyBTR0lPCkBAIC02NzcsMTAgKzcwOCwxMSBAQAogCW1tYy0+bWF4X3BoeXNfc2VncyA9IE5SX1NHOwogCiAJLyoKLQkgKiBTaW5jZSB3ZSBvbmx5IGhhdmUgYSAxNi1iaXQgZGF0YSBsZW5ndGggcmVnaXN0ZXIsIHdlIG11c3QKLQkgKiBlbnN1cmUgdGhhdCB3ZSBkb24ndCBleGNlZWQgMl4xNi0xIGJ5dGVzIGluIGEgc2luZ2xlIHJlcXVlc3QuCisJICogU2luY2Ugb25seSBhIGNlcnRhaW4gbnVtYmVyIG9mIGJpdHMgYXJlIHZhbGlkIGluIHRoZSBkYXRhIGxlbmd0aAorCSAqIHJlZ2lzdGVyLCB3ZSBtdXN0IGVuc3VyZSB0aGF0IHdlIGRvbid0IGV4Y2VlZCAyXm51bS0xIGJ5dGVzIGluIGEKKwkgKiBzaW5nbGUgcmVxdWVzdC4KIAkgKi8KLQltbWMtPm1heF9yZXFfc2l6ZSA9IDY1NTM1OworCW1tYy0+bWF4X3JlcV9zaXplID0gKDEgPDwgdmFyaWFudC0+ZGF0YWxlbmd0aF9iaXRzKSAtIDE7CiAKIAkvKgogCSAqIFNldCB0aGUgbWF4aW11bSBzZWdtZW50IHNpemUuICBTaW5jZSB3ZSBhcmVuJ3QgZG9pbmcgRE1BCkBAIC03MzQsNyArNzY2LDYgQEAKIAl3cml0ZWwoTUNJX0lSUUVOQUJMRSwgaG9zdC0+YmFzZSArIE1NQ0lNQVNLMCk7CiAKIAlhbWJhX3NldF9kcnZkYXRhKGRldiwgbW1jKTsKLQlob3N0LT5vbGRzdGF0ID0gbW1jaV9nZXRfY2QoaG9zdC0+bW1jKTsKIAogCW1tY19hZGRfaG9zdChtbWMpOwogCkBAIC03NDIsMTIgKzc3Myw2IEBACiAJCW1tY19ob3N0bmFtZShtbWMpLCBhbWJhX3JldihkZXYpLCBhbWJhX2NvbmZpZyhkZXYpLAogCQkodW5zaWduZWQgbG9uZyBsb25nKWRldi0+cmVzLnN0YXJ0LCBkZXYtPmlycVswXSwgZGV2LT5pcnFbMV0pOwogCi0JaW5pdF90aW1lcigmaG9zdC0+dGltZXIpOwotCWhvc3QtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylob3N0OwotCWhvc3QtPnRpbWVyLmZ1bmN0aW9uID0gbW1jaV9jaGVja19zdGF0dXM7Ci0JaG9zdC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWjsKLQlhZGRfdGltZXIoJmhvc3QtPnRpbWVyKTsKLQogCXJldHVybiAwOwogCiAgaXJxMF9mcmVlOgpAQCAtNzgxLDggKzgwNiw2IEBACiAJaWYgKG1tYykgewogCQlzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKIAotCQlkZWxfdGltZXJfc3luYygmaG9zdC0+dGltZXIpOwotCiAJCW1tY19yZW1vdmVfaG9zdChtbWMpOwogCiAJCXdyaXRlbCgwLCBob3N0LT5iYXNlICsgTU1DSU1BU0swKTsKQEAgLTg1NiwxOSArODc5LDI4IEBACiAJewogCQkuaWQJPSAweDAwMDQxMTgwLAogCQkubWFzawk9IDB4MDAwZmZmZmYsCisJCS5kYXRhCT0gJnZhcmlhbnRfYXJtLAogCX0sCiAJewogCQkuaWQJPSAweDAwMDQxMTgxLAogCQkubWFzawk9IDB4MDAwZmZmZmYsCisJCS5kYXRhCT0gJnZhcmlhbnRfYXJtLAogCX0sCiAJLyogU1QgTWljcm8gdmFyaWFudHMgKi8KIAl7CiAJCS5pZCAgICAgPSAweDAwMTgwMTgwLAogCQkubWFzayAgID0gMHgwMGZmZmZmZiwKKwkJLmRhdGEJPSAmdmFyaWFudF91MzAwLAogCX0sCiAJewogCQkuaWQgICAgID0gMHgwMDI4MDE4MCwKIAkJLm1hc2sgICA9IDB4MDBmZmZmZmYsCisJCS5kYXRhCT0gJnZhcmlhbnRfdTMwMCwKKwl9LAorCXsKKwkJLmlkICAgICA9IDB4MDA0ODAxODAsCisJCS5tYXNrICAgPSAweDAwZmZmZmZmLAorCQkuZGF0YQk9ICZ2YXJpYW50X3V4NTAwLAogCX0sCiAJeyAwLCAwIH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmggYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuaAppbmRleCBkNzcwNjJlLi42ODk3MGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuaAorKysgYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuaApAQCAtMjgsOCArMjgsNiBAQAogI2RlZmluZSBNQ0lfNEJJVF9CVVMJCSgxIDw8IDExKQogLyogOGJpdCB3aWRlIGJ1c2VzIHN1cHBvcnRlZCBpbiBTVCBNaWNybyB2ZXJzaW9ucyAqLwogI2RlZmluZSBNQ0lfU1RfOEJJVF9CVVMJCSgxIDw8IDEyKQotLyogSFcgZmxvdyBjb250cm9sIG9uIHRoZSBTVCBNaWNybyB2ZXJzaW9uICovCi0jZGVmaW5lIE1DSV9TVF9GQ0VOCQkoMSA8PCAxMykKIAogI2RlZmluZSBNTUNJQVJHVU1FTlQJCTB4MDA4CiAjZGVmaW5lIE1NQ0lDT01NQU5ECQkweDAwYwpAQCAtMTQ1LDYgKzE0Myw3IEBACiAjZGVmaW5lIE5SX1NHCQkxNgogCiBzdHJ1Y3QgY2xrOworc3RydWN0IHZhcmlhbnRfZGF0YTsKIAogc3RydWN0IG1tY2lfaG9zdCB7CiAJdm9pZCBfX2lvbWVtCQkqYmFzZTsKQEAgLTE2NCw2ICsxNjMsNyBAQAogCXVuc2lnbmVkIGludAkJY2NsazsKIAl1MzIJCQlwd3I7CiAJc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSAqcGxhdDsKKwlzdHJ1Y3QgdmFyaWFudF9kYXRhCSp2YXJpYW50OwogCiAJdTgJCQlod19kZXNpZ25lcjsKIAl1OAkJCWh3X3JldmlzaW9uOjQ7CkBAIC0xNzEsNDIgKzE3MSw5IEBACiAJc3RydWN0IHRpbWVyX2xpc3QJdGltZXI7CiAJdW5zaWduZWQgaW50CQlvbGRzdGF0OwogCi0JdW5zaWduZWQgaW50CQlzZ19sZW47Ci0KIAkvKiBwaW8gc3R1ZmYgKi8KLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QJKnNnX3B0cjsKLQl1bnNpZ25lZCBpbnQJCXNnX29mZjsKKwlzdHJ1Y3Qgc2dfbWFwcGluZ19pdGVyCXNnX21pdGVyOwogCXVuc2lnbmVkIGludAkJc2l6ZTsKIAlzdHJ1Y3QgcmVndWxhdG9yCSp2Y2M7CiB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgbW1jaV9pbml0X3NnKHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKLXsKLQkvKgotCSAqIElkZWFsbHksIHdlIHdhbnQgdGhlIGhpZ2hlciBsZXZlbHMgdG8gcGFzcyB1cyBhIHNjYXR0ZXIgbGlzdC4KLQkgKi8KLQlob3N0LT5zZ19sZW4gPSBkYXRhLT5zZ19sZW47Ci0JaG9zdC0+c2dfcHRyID0gZGF0YS0+c2c7Ci0JaG9zdC0+c2dfb2ZmID0gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgbW1jaV9uZXh0X3NnKHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QpCi17Ci0JaG9zdC0+c2dfcHRyKys7Ci0JaG9zdC0+c2dfb2ZmID0gMDsKLQlyZXR1cm4gLS1ob3N0LT5zZ19sZW47Ci19Ci0KLXN0YXRpYyBpbmxpbmUgY2hhciAqbW1jaV9rbWFwX2F0b21pYyhzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0LCB1bnNpZ25lZCBsb25nICpmbGFncykKLXsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gaG9zdC0+c2dfcHRyOwotCi0JbG9jYWxfaXJxX3NhdmUoKmZsYWdzKTsKLQlyZXR1cm4ga21hcF9hdG9taWMoc2dfcGFnZShzZyksIEtNX0JJT19TUkNfSVJRKSArIHNnLT5vZmZzZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtbWNpX2t1bm1hcF9hdG9taWMoc3RydWN0IG1tY2lfaG9zdCAqaG9zdCwgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBsb25nICpmbGFncykKLXsKLQlrdW5tYXBfYXRvbWljKGJ1ZmZlciwgS01fQklPX1NSQ19JUlEpOwotCWxvY2FsX2lycV9yZXN0b3JlKCpmbGFncyk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L214Y21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9teGNtbWMuYwppbmRleCBkOWQ0YTcyLi4zNTBmNzhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L214Y21tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbXhjbW1jLmMKQEAgLTExOSw2ICsxMTksNyBAQAogCWludAkJCWRldGVjdF9pcnE7CiAJaW50CQkJZG1hOwogCWludAkJCWRvX2RtYTsKKwlpbnQJCQlkZWZhdWx0X2lycV9tYXNrOwogCWludAkJCXVzZV9zZGlvOwogCXVuc2lnbmVkIGludAkJcG93ZXJfbW9kZTsKIAlzdHJ1Y3QgaW14bW1jX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwpAQCAtMjI4LDcgKzIyOSw3IEBACiBzdGF0aWMgaW50IG14Y21jaV9zdGFydF9jbWQoc3RydWN0IG14Y21jaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCwKIAkJdW5zaWduZWQgaW50IGNtZGF0KQogewotCXUzMiBpbnRfY250cjsKKwl1MzIgaW50X2NudHIgPSBob3N0LT5kZWZhdWx0X2lycV9tYXNrOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlXQVJOX09OKGhvc3QtPmNtZCAhPSBOVUxMKTsKQEAgLTI3NSw3ICsyNzYsNyBAQAogc3RhdGljIHZvaWQgbXhjbWNpX2ZpbmlzaF9yZXF1ZXN0KHN0cnVjdCBteGNtY2lfaG9zdCAqaG9zdCwKIAkJc3RydWN0IG1tY19yZXF1ZXN0ICpyZXEpCiB7Ci0JdTMyIGludF9jbnRyID0gMDsKKwl1MzIgaW50X2NudHIgPSBob3N0LT5kZWZhdWx0X2lycV9tYXNrOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwpAQCAtNTg1LDYgKzU4Niw5IEBACiAJCSAgKHN0YXQgJiAoU1RBVFVTX0RBVEFfVFJBTlNfRE9ORSB8IFNUQVRVU19XUklURV9PUF9ET05FKSkpCiAJCW14Y21jaV9kYXRhX2RvbmUoaG9zdCwgc3RhdCk7CiAjZW5kaWYKKwlpZiAoaG9zdC0+ZGVmYXVsdF9pcnFfbWFzayAmJgorCQkgIChzdGF0ICYgKFNUQVRVU19DQVJEX0lOU0VSVElPTiB8IFNUQVRVU19DQVJEX1JFTU9WQUwpKSkKKwkJbW1jX2RldGVjdF9jaGFuZ2UoaG9zdC0+bW1jLCBtc2Vjc190b19qaWZmaWVzKDIwMCkpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtODA5LDYgKzgxMywxMiBAQAogCWVsc2UKIAkJbW1jLT5vY3JfYXZhaWwgPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNDsKIAorCWlmIChob3N0LT5wZGF0YSAmJiBob3N0LT5wZGF0YS0+ZGF0M19jYXJkX2RldGVjdCkKKwkJaG9zdC0+ZGVmYXVsdF9pcnFfbWFzayA9CisJCQlJTlRfQ0FSRF9JTlNFUlRJT05fRU4gfCBJTlRfQ0FSRF9SRU1PVkFMX0VOOworCWVsc2UKKwkJaG9zdC0+ZGVmYXVsdF9pcnFfbWFzayA9IDA7CisKIAlob3N0LT5yZXMgPSByOwogCWhvc3QtPmlycSA9IGlycTsKIApAQCAtODM1LDcgKzg0NSw3IEBACiAJLyogcmVjb21tZW5kZWQgaW4gZGF0YSBzaGVldCAqLwogCXdyaXRldygweDJkYjQsIGhvc3QtPmJhc2UgKyBNTUNfUkVHX1JFQURfVE8pOwogCi0Jd3JpdGVsKDAsIGhvc3QtPmJhc2UgKyBNTUNfUkVHX0lOVF9DTlRSKTsKKwl3cml0ZWwoaG9zdC0+ZGVmYXVsdF9pcnFfbWFzaywgaG9zdC0+YmFzZSArIE1NQ19SRUdfSU5UX0NOVFIpOwogCiAjaWZkZWYgSEFTX0RNQQogCWhvc3QtPmRtYSA9IGlteF9kbWFfcmVxdWVzdF9ieV9wcmlvKERSSVZFUl9OQU1FLCBETUFfUFJJT19MT1cpOwpAQCAtOTI2LDQzICs5MzYsNDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBteGNtY2lfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgbXhjbWNpX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBteGNtY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAobW1jKQogCQlyZXQgPSBtbWNfc3VzcGVuZF9ob3N0KG1tYyk7CisJY2xrX2Rpc2FibGUoaG9zdC0+Y2xrKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbXhjbWNpX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG14Y21jaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgbXhjbWNpX2hvc3QgKmhvc3Q7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbXhjbWNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCWludCByZXQgPSAwOwogCi0JaWYgKG1tYykgewotCQlob3N0ID0gbW1jX3ByaXYobW1jKTsKKwljbGtfZW5hYmxlKGhvc3QtPmNsayk7CisJaWYgKG1tYykKIAkJcmV0ID0gbW1jX3Jlc3VtZV9ob3N0KG1tYyk7Ci0JfQogCiAJcmV0dXJuIHJldDsKIH0KLSNlbHNlCi0jZGVmaW5lIG14Y21jaV9zdXNwZW5kICBOVUxMCi0jZGVmaW5lIG14Y21jaV9yZXN1bWUgICBOVUxMCi0jZW5kaWYgLyogQ09ORklHX1BNICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBteGNtY2lfcG1fb3BzID0geworCS5zdXNwZW5kCT0gbXhjbWNpX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBteGNtY2lfcmVzdW1lLAorfTsKKyNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBteGNtY2lfZHJpdmVyID0gewogCS5wcm9iZQkJPSBteGNtY2lfcHJvYmUsCiAJLnJlbW92ZQkJPSBteGNtY2lfcmVtb3ZlLAotCS5zdXNwZW5kCT0gbXhjbWNpX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBteGNtY2lfcmVzdW1lLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQkJPSBEUklWRVJfTkFNRSwKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0JPSAmbXhjbWNpX3BtX29wcywKKyNlbmRpZgogCX0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktczNjLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXMzYy5jCmluZGV4IGFmMjE3OTIuLmFkMzBmMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktczNjLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zM2MuYwpAQCAtMzY1LDYgKzM2NSwyNiBAQAogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBzZGhjaV9zM2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QgPSAgcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNkaGNpX3MzYyAqc2MgPSBzZGhjaV9wcml2KGhvc3QpOworCWludCBwdHI7CisKKwlzZGhjaV9yZW1vdmVfaG9zdChob3N0LCAxKTsKKworCWZvciAocHRyID0gMDsgcHRyIDwgMzsgcHRyKyspIHsKKwkJY2xrX2Rpc2FibGUoc2MtPmNsa19idXNbcHRyXSk7CisJCWNsa19wdXQoc2MtPmNsa19idXNbcHRyXSk7CisJfQorCWNsa19kaXNhYmxlKHNjLT5jbGtfaW8pOworCWNsa19wdXQoc2MtPmNsa19pbyk7CisKKwlpb3VubWFwKGhvc3QtPmlvYWRkcik7CisJcmVsZWFzZV9yZXNvdXJjZShzYy0+aW9hcmVhKTsKKwlrZnJlZShzYy0+aW9hcmVhKTsKKworCXNkaGNpX2ZyZWVfaG9zdChob3N0KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3Nkcmljb2hfY3MuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RyaWNvaF9jcy5jCmluZGV4IGU3NTA3YWYuLjdhYTY1YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RyaWNvaF9jcy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RyaWNvaF9jcy5jCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwppbmRleCBmMjJiYzlmLi42NjI5ZDA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCkBAIC0zMjEsNyArMzIxLDcgQEAKIAogY29uZmlnIE1URF9SRURXT09ECiAJdHJpc3RhdGUgIkNGSSBGbGFzaCBkZXZpY2VzIG1hcHBlZCBvbiBJQk0gUmVkd29vZCIKLQlkZXBlbmRzIG9uIE1URF9DRkkgJiYgKCBSRURXT09EXzQgfHwgUkVEV09PRF81IHx8IFJFRFdPT0RfNiApCisJZGVwZW5kcyBvbiBNVERfQ0ZJCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIGFjY2VzcyByb3V0aW5lcyBmb3IgdGhlIGZsYXNoIGNoaXBzIG9uIHRoZSBJQk0KIAkgIFJlZHdvb2QgYm9hcmQuIElmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBib2FyZHMgYW5kIHdvdWxkIGxpa2UgdG8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvcGNtY2lhbXRkLmMgYi9kcml2ZXJzL210ZC9tYXBzL3BjbWNpYW10ZC5jCmluZGV4IGU2OTllNmEuLmU5Y2E1YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcGNtY2lhbXRkLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9wY21jaWFtdGQuYwpAQCAtMTYsNyArMTYsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KQEAgLTEwMyw3ICsxMDIsNyBAQAogewogCXN0cnVjdCBwY21jaWFtdGRfZGV2ICpkZXYgPSAoc3RydWN0IHBjbWNpYW10ZF9kZXYgKiltYXAtPm1hcF9wcml2XzE7CiAJd2luZG93X2hhbmRsZV90IHdpbiA9ICh3aW5kb3dfaGFuZGxlX3QpbWFwLT5tYXBfcHJpdl8yOwotCW1lbXJlcV90IG1ycTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OwogCWludCByZXQ7CiAKIAlpZiAoIXBjbWNpYV9kZXZfcHJlc2VudChkZXYtPnBfZGV2KSkgewpAQCAtMTExLDE1ICsxMTAsMTQgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JbXJxLkNhcmRPZmZzZXQgPSB0byAmIH4oZGV2LT53aW5fc2l6ZS0xKTsKLQlpZihtcnEuQ2FyZE9mZnNldCAhPSBkZXYtPm9mZnNldCkgeworCW9mZnNldCA9IHRvICYgfihkZXYtPndpbl9zaXplLTEpOworCWlmIChvZmZzZXQgIT0gZGV2LT5vZmZzZXQpIHsKIAkJREVCVUcoMiwgIlJlbWFwcGluZyB3aW5kb3cgZnJvbSAweCU4Ljh4IHRvIDB4JTguOHgiLAotCQkgICAgICBkZXYtPm9mZnNldCwgbXJxLkNhcmRPZmZzZXQpOwotCQltcnEuUGFnZSA9IDA7Ci0JCXJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UoZGV2LT5wX2Rldiwgd2luLCAmbXJxKTsKKwkJICAgICAgZGV2LT5vZmZzZXQsIG9mZnNldCk7CisJCXJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UoZGV2LT5wX2Rldiwgd2luLCBvZmZzZXQpOwogCQlpZiAocmV0ICE9IDApCiAJCQlyZXR1cm4gTlVMTDsKLQkJZGV2LT5vZmZzZXQgPSBtcnEuQ2FyZE9mZnNldDsKKwkJZGV2LT5vZmZzZXQgPSBvZmZzZXQ7CiAJfQogCXJldHVybiBkZXYtPndpbl9iYXNlICsgKHRvICYgKGRldi0+d2luX3NpemUtMSkpOwogfQpAQCAtMzQ2LDcgKzM0NCw2IEBACiAJCQlpb3VubWFwKGRldi0+d2luX2Jhc2UpOwogCQkJZGV2LT53aW5fYmFzZSA9IE5VTEw7CiAJCX0KLQkJcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmssIGxpbmstPndpbik7CiAJfQogCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvcmVkd29vZC5jIGIvZHJpdmVycy9tdGQvbWFwcy9yZWR3b29kLmMKaW5kZXggOTMzYzBiNi4uZDJjOWRiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9yZWR3b29kLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9yZWR3b29kLmMKQEAgLTIyLDggKzIyLDYgQEAKIAogI2luY2x1ZGUgPGFzbS9pby5oPgogCi0jaWYgIWRlZmluZWQgKENPTkZJR19SRURXT09EXzYpCi0KICNkZWZpbmUgV0lORE9XX0FERFIgMHhmZmMwMDAwMAogI2RlZmluZSBXSU5ET1dfU0laRSAweDAwNDAwMDAwCiAKQEAgLTY5LDQ3ICs2Nyw2IEBACiAJfQogfTsKIAotI2Vsc2UgLyogQ09ORklHX1JFRFdPT0RfNiAqLwotLyogRklYTUU6IHRoZSB3aW5kb3cgaXMgYmlnZ2VyIC0gYXJtaW4gKi8KLSNkZWZpbmUgV0lORE9XX0FERFIgMHhmZjgwMDAwMAotI2RlZmluZSBXSU5ET1dfU0laRSAweDAwODAwMDAwCi0KLSNkZWZpbmUgUldfUEFSVDBfT0YJMAotI2RlZmluZSBSV19QQVJUMF9TWgkweDQwMDAwMAkvKiA0IE1pQiBkYXRhICovCi0jZGVmaW5lIFJXX1BBUlQxX09GCVJXX1BBUlQwX09GICsgUldfUEFSVDBfU1oKLSNkZWZpbmUgUldfUEFSVDFfU1oJMHgxMDAwMAkJLyogNjRLIFZQRCAqLwotI2RlZmluZSBSV19QQVJUMl9PRglSV19QQVJUMV9PRiArIFJXX1BBUlQxX1NaCi0jZGVmaW5lIFJXX1BBUlQyX1NaCTB4NDAwMDAwIC0gKDB4MTAwMDAgKyAweDIwMDAwKQotI2RlZmluZSBSV19QQVJUM19PRglSV19QQVJUMl9PRiArIFJXX1BBUlQyX1NaCi0jZGVmaW5lIFJXX1BBUlQzX1NaCTB4MjAwMDAKLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHJlZHdvb2RfZmxhc2hfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUgPSAiUmVkd29vZCBmaWxlc3lzdGVtIiwKLQkJLm9mZnNldCA9IFJXX1BBUlQwX09GLAotCQkuc2l6ZSA9IFJXX1BBUlQwX1NaCi0JfSwKLQl7Ci0JCS5uYW1lID0gIlJlZHdvb2QgT3BlbkJJT1MgVml0YWwgUHJvZHVjdCBEYXRhIiwKLQkJLm9mZnNldCA9IFJXX1BBUlQxX09GLAotCQkuc2l6ZSA9IFJXX1BBUlQxX1NaLAotCQkubWFza19mbGFncyA9IE1URF9XUklURUFCTEUJLyogZm9yY2UgcmVhZC1vbmx5ICovCi0JfSwKLQl7Ci0JCS5uYW1lID0gIlJlZHdvb2Qga2VybmVsIiwKLQkJLm9mZnNldCA9IFJXX1BBUlQyX09GLAotCQkuc2l6ZSA9IFJXX1BBUlQyX1NaCi0JfSwKLQl7Ci0JCS5uYW1lID0gIlJlZHdvb2QgT3BlbkJJT1MiLAotCQkub2Zmc2V0ID0gUldfUEFSVDNfT0YsCi0JCS5zaXplID0gUldfUEFSVDNfU1osCi0JCS5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRQkvKiBmb3JjZSByZWFkLW9ubHkgKi8KLQl9Ci19OwotCi0jZW5kaWYgLyogQ09ORklHX1JFRFdPT0RfNiAqLwotCiBzdHJ1Y3QgbWFwX2luZm8gcmVkd29vZF9mbGFzaF9tYXAgPSB7CiAJLm5hbWUgPSAiSUJNIFJlZHdvb2QiLAogCS5zaXplID0gV0lORE9XX1NJWkUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3N1bl91Zmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvc3VuX3VmbGFzaC5jCmluZGV4IDAzOTFjMjUuLjg5ODQyMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvc3VuX3VmbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvc3VuX3VmbGFzaC5jCkBAIC0xNjAsMTIgKzE2MCwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB1Zmxhc2hfaW5pdCh2b2lkKQogewotCXJldHVybiBvZl9yZWdpc3Rlcl9kcml2ZXIoJnVmbGFzaF9kcml2ZXIsICZvZl9idXNfdHlwZSk7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmdWZsYXNoX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB1Zmxhc2hfZXhpdCh2b2lkKQogewotCW9mX3VucmVnaXN0ZXJfZHJpdmVyKCZ1Zmxhc2hfZHJpdmVyKTsKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmdWZsYXNoX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHVmbGFzaF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZwppbmRleCBmZmMzNzIwLi4zNjJkMTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCkBAIC01MjYsNCArNTI2LDEwIEBACiAJICBUaGlzIGVuYWJsZXMgdGhlIGRyaXZlciBmb3IgdGhlIE5BTkQgRmxhc2ggb24gZXZhbHVhdGlvbiBib2FyZCBiYXNlZAogCSAgb24gdzkwcDkxMCAvIE5VQzl4eC4KIAorY29uZmlnIE1URF9OQU5EX0paNDc0MAorCXRyaXN0YXRlICJTdXBwb3J0IGZvciBKWjQ3NDAgU29DIE5BTkQgY29udHJvbGxlciIKKwlkZXBlbmRzIG9uIE1BQ0hfSlo0NzQwCisJaGVscAorCQlFbmFibGVzIHN1cHBvcnQgZm9yIE5BTkQgRmxhc2ggb24gSlo0NzQwIFNvQyBiYXNlZCBib2FyZHMuCisKIGVuZGlmICMgTVREX05BTkQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9uYW5kL01ha2VmaWxlCmluZGV4IGU4YWI4ODQuLmFjODNkY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZQpAQCAtNDYsNSArNDYsNiBAQAogb2JqLSQoQ09ORklHX01URF9OQU5EX0JDTV9VTUkpCQkrPSBiY21fdW1pX25hbmQubyBuYW5kX2JjbV91bWkubwogb2JqLSQoQ09ORklHX01URF9OQU5EX01QQzUxMjFfTkZDKQkrPSBtcGM1MTIxX25mYy5vCiBvYmotJChDT05GSUdfTVREX05BTkRfUklDT0gpCQkrPSByODUyLm8KK29iai0kKENPTkZJR19NVERfTkFORF9KWjQ3NDApCQkrPSBqejQ3NDBfbmFuZC5vCiAKIG5hbmQtb2JqcyA6PSBuYW5kX2Jhc2UubyBuYW5kX2JidC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2RlbmFsaS5jIGIvZHJpdmVycy9tdGQvbmFuZC9kZW5hbGkuYwppbmRleCBjYTAzNDI4Li4zZGZkYTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2RlbmFsaS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvZGVuYWxpLmMKQEAgLTE4MzYsNyArMTgzNiw3IEBACiAJLnBhdHRlcm4gPSBtaXJyb3JfcGF0dGVybiwKIH07CiAKLS8qIGluaXRhbGl6ZSBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmVzICovCisvKiBpbml0aWFsaXplIGRyaXZlciBkYXRhIHN0cnVjdHVyZXMgKi8KIHZvaWQgZGVuYWxpX2Rydl9pbml0KHN0cnVjdCBkZW5hbGlfbmFuZF9pbmZvICpkZW5hbGkpCiB7CiAJZGVuYWxpLT5pZHggPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9qejQ3NDBfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9qejQ3NDBfbmFuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MzQzZmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL210ZC9uYW5kL2p6NDc0MF9uYW5kLmMKQEAgLTAsMCArMSw1MTYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAsIExhcnMtUGV0ZXIgQ2xhdXNlbiA8bGFyc0BtZXRhZm9vLmRlPgorICogIEpaNDc0MCBTb0MgTkFORCBjb250cm9sbGVyIGRyaXZlcgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorCisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtano0NzQwL2p6NDc0MF9uYW5kLmg+CisKKyNkZWZpbmUgSlpfUkVHX05BTkRfQ1RSTAkweDUwCisjZGVmaW5lIEpaX1JFR19OQU5EX0VDQ19DVFJMCTB4MTAwCisjZGVmaW5lIEpaX1JFR19OQU5EX0RBVEEJMHgxMDQKKyNkZWZpbmUgSlpfUkVHX05BTkRfUEFSMAkweDEwOAorI2RlZmluZSBKWl9SRUdfTkFORF9QQVIxCTB4MTBDCisjZGVmaW5lIEpaX1JFR19OQU5EX1BBUjIJMHgxMTAKKyNkZWZpbmUgSlpfUkVHX05BTkRfSVJRX1NUQVQJMHgxMTQKKyNkZWZpbmUgSlpfUkVHX05BTkRfSVJRX0NUUkwJMHgxMTgKKyNkZWZpbmUgSlpfUkVHX05BTkRfRVJSKHgpCSgweDExQyArICgoeCkgPDwgMikpCisKKyNkZWZpbmUgSlpfTkFORF9FQ0NfQ1RSTF9QQVJfUkVBRFkJQklUKDQpCisjZGVmaW5lIEpaX05BTkRfRUNDX0NUUkxfRU5DT0RJTkcJQklUKDMpCisjZGVmaW5lIEpaX05BTkRfRUNDX0NUUkxfUlMJCUJJVCgyKQorI2RlZmluZSBKWl9OQU5EX0VDQ19DVFJMX1JFU0VUCQlCSVQoMSkKKyNkZWZpbmUgSlpfTkFORF9FQ0NfQ1RSTF9FTkFCTEUJCUJJVCgwKQorCisjZGVmaW5lIEpaX05BTkRfU1RBVFVTX0VSUl9DT1VOVAkoQklUKDMxKSB8IEJJVCgzMCkgfCBCSVQoMjkpKQorI2RlZmluZSBKWl9OQU5EX1NUQVRVU19QQURfRklOSVNICUJJVCg0KQorI2RlZmluZSBKWl9OQU5EX1NUQVRVU19ERUNfRklOSVNICUJJVCgzKQorI2RlZmluZSBKWl9OQU5EX1NUQVRVU19FTkNfRklOSVNICUJJVCgyKQorI2RlZmluZSBKWl9OQU5EX1NUQVRVU19VTkNPUl9FUlJPUglCSVQoMSkKKyNkZWZpbmUgSlpfTkFORF9TVEFUVVNfRVJST1IJCUJJVCgwKQorCisjZGVmaW5lIEpaX05BTkRfQ1RSTF9FTkFCTEVfQ0hJUCh4KSBCSVQoKHgpIDw8IDEpCisjZGVmaW5lIEpaX05BTkRfQ1RSTF9BU1NFUlRfQ0hJUCh4KSBCSVQoKCh4KSA8PCAxKSArIDEpCisKKyNkZWZpbmUgSlpfTkFORF9NRU1fQUREUl9PRkZTRVQgMHgxMDAwMAorI2RlZmluZSBKWl9OQU5EX01FTV9DTURfT0ZGU0VUIDB4MDgwMDAKKworc3RydWN0IGp6X25hbmQgeworCXN0cnVjdCBtdGRfaW5mbyBtdGQ7CisJc3RydWN0IG5hbmRfY2hpcCBjaGlwOworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKworCXZvaWQgX19pb21lbSAqYmFua19iYXNlOworCXN0cnVjdCByZXNvdXJjZSAqYmFua19tZW07CisKKwlzdHJ1Y3QganpfbmFuZF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlib29sIGlzX3JlYWRpbmc7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBqel9uYW5kICptdGRfdG9fanpfbmFuZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKG10ZCwgc3RydWN0IGp6X25hbmQsIG10ZCk7Cit9CisKK3N0YXRpYyB2b2lkIGp6X25hbmRfY21kX2N0cmwoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBkYXQsIHVuc2lnbmVkIGludCBjdHJsKQoreworCXN0cnVjdCBqel9uYW5kICpuYW5kID0gbXRkX3RvX2p6X25hbmQobXRkKTsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCXVpbnQzMl90IHJlZzsKKworCWlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgeworCQlCVUdfT04oKGN0cmwgJiBOQU5EX0FMRSkgJiYgKGN0cmwgJiBOQU5EX0NMRSkpOworCQlpZiAoY3RybCAmIE5BTkRfQUxFKQorCQkJY2hpcC0+SU9fQUREUl9XID0gbmFuZC0+YmFua19iYXNlICsgSlpfTkFORF9NRU1fQUREUl9PRkZTRVQ7CisJCWVsc2UgaWYgKGN0cmwgJiBOQU5EX0NMRSkKKwkJCWNoaXAtPklPX0FERFJfVyA9IG5hbmQtPmJhbmtfYmFzZSArIEpaX05BTkRfTUVNX0NNRF9PRkZTRVQ7CisJCWVsc2UKKwkJCWNoaXAtPklPX0FERFJfVyA9IG5hbmQtPmJhbmtfYmFzZTsKKworCQlyZWcgPSByZWFkbChuYW5kLT5iYXNlICsgSlpfUkVHX05BTkRfQ1RSTCk7CisJCWlmIChjdHJsICYgTkFORF9OQ0UpCisJCQlyZWcgfD0gSlpfTkFORF9DVFJMX0FTU0VSVF9DSElQKDApOworCQllbHNlCisJCQlyZWcgJj0gfkpaX05BTkRfQ1RSTF9BU1NFUlRfQ0hJUCgwKTsKKwkJd3JpdGVsKHJlZywgbmFuZC0+YmFzZSArIEpaX1JFR19OQU5EX0NUUkwpOworCX0KKwlpZiAoZGF0ICE9IE5BTkRfQ01EX05PTkUpCisJCXdyaXRlYihkYXQsIGNoaXAtPklPX0FERFJfVyk7Cit9CisKK3N0YXRpYyBpbnQganpfbmFuZF9kZXZfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IGp6X25hbmQgKm5hbmQgPSBtdGRfdG9fanpfbmFuZChtdGQpOworCXJldHVybiBncGlvX2dldF92YWx1ZV9jYW5zbGVlcChuYW5kLT5wZGF0YS0+YnVzeV9ncGlvKTsKK30KKworc3RhdGljIHZvaWQganpfbmFuZF9od2N0bChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IG1vZGUpCit7CisJc3RydWN0IGp6X25hbmQgKm5hbmQgPSBtdGRfdG9fanpfbmFuZChtdGQpOworCXVpbnQzMl90IHJlZzsKKworCXdyaXRlbCgwLCBuYW5kLT5iYXNlICsgSlpfUkVHX05BTkRfSVJRX1NUQVQpOworCXJlZyA9IHJlYWRsKG5hbmQtPmJhc2UgKyBKWl9SRUdfTkFORF9FQ0NfQ1RSTCk7CisKKwlyZWcgfD0gSlpfTkFORF9FQ0NfQ1RSTF9SRVNFVDsKKwlyZWcgfD0gSlpfTkFORF9FQ0NfQ1RSTF9FTkFCTEU7CisJcmVnIHw9IEpaX05BTkRfRUNDX0NUUkxfUlM7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIE5BTkRfRUNDX1JFQUQ6CisJCXJlZyAmPSB+SlpfTkFORF9FQ0NfQ1RSTF9FTkNPRElORzsKKwkJbmFuZC0+aXNfcmVhZGluZyA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgTkFORF9FQ0NfV1JJVEU6CisJCXJlZyB8PSBKWl9OQU5EX0VDQ19DVFJMX0VOQ09ESU5HOworCQluYW5kLT5pc19yZWFkaW5nID0gZmFsc2U7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXdyaXRlbChyZWcsIG5hbmQtPmJhc2UgKyBKWl9SRUdfTkFORF9FQ0NfQ1RSTCk7Cit9CisKK3N0YXRpYyBpbnQganpfbmFuZF9jYWxjdWxhdGVfZWNjX3JzKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1aW50OF90ICpkYXQsCisJdWludDhfdCAqZWNjX2NvZGUpCit7CisJc3RydWN0IGp6X25hbmQgKm5hbmQgPSBtdGRfdG9fanpfbmFuZChtdGQpOworCXVpbnQzMl90IHJlZywgc3RhdHVzOworCWludCBpOworCXVuc2lnbmVkIGludCB0aW1lb3V0ID0gMTAwMDsKKwlzdGF0aWMgdWludDhfdCBlbXB0eV9ibG9ja19lY2NbXSA9IHsweGNkLCAweDlkLCAweDkwLCAweDU4LCAweGY0LAorCQkJCQkJMHg4YiwgMHhmZiwgMHhiNywgMHg2Zn07CisKKwlpZiAobmFuZC0+aXNfcmVhZGluZykKKwkJcmV0dXJuIDA7CisKKwlkbyB7CisJCXN0YXR1cyA9IHJlYWRsKG5hbmQtPmJhc2UgKyBKWl9SRUdfTkFORF9JUlFfU1RBVCk7CisJfSB3aGlsZSAoIShzdGF0dXMgJiBKWl9OQU5EX1NUQVRVU19FTkNfRklOSVNIKSAmJiAtLXRpbWVvdXQpOworCisJaWYgKHRpbWVvdXQgPT0gMCkKKwkgICAgcmV0dXJuIC0xOworCisJcmVnID0gcmVhZGwobmFuZC0+YmFzZSArIEpaX1JFR19OQU5EX0VDQ19DVFJMKTsKKwlyZWcgJj0gfkpaX05BTkRfRUNDX0NUUkxfRU5BQkxFOworCXdyaXRlbChyZWcsIG5hbmQtPmJhc2UgKyBKWl9SRUdfTkFORF9FQ0NfQ1RSTCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgOTsgKytpKQorCQllY2NfY29kZVtpXSA9IHJlYWRiKG5hbmQtPmJhc2UgKyBKWl9SRUdfTkFORF9QQVIwICsgaSk7CisKKwkvKiBJZiB0aGUgd3JpdHRlbiBkYXRhIGlzIGNvbXBsZXRseSAweGZmLCB3ZSBhbHNvIHdhbnQgdG8gd3JpdGUgMHhmZiBhcworCSAqIGVjYywgb3RoZXJ3aXNlIHdlIHdpbGwgZ2V0IGluIHRyb3VibGUgd2hlbiBkb2luZyBzdWJwYWdlIHdyaXRlcy4gKi8KKwlpZiAobWVtY21wKGVjY19jb2RlLCBlbXB0eV9ibG9ja19lY2MsIDkpID09IDApCisJCW1lbXNldChlY2NfY29kZSwgMHhmZiwgOSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQganpfbmFuZF9jb3JyZWN0X2RhdGEodWludDhfdCAqZGF0LCBpbnQgaW5kZXgsIGludCBtYXNrKQoreworCWludCBvZmZzZXQgPSBpbmRleCAmIDB4NzsKKwl1aW50MTZfdCBkYXRhOworCisJaW5kZXggKz0gKGluZGV4ID4+IDMpOworCisJZGF0YSA9IGRhdFtpbmRleF07CisJZGF0YSB8PSBkYXRbaW5kZXgrMV0gPDwgODsKKworCW1hc2sgXj0gKGRhdGEgPj4gb2Zmc2V0KSAmIDB4MWZmOworCWRhdGEgJj0gfigweDFmZiA8PCBvZmZzZXQpOworCWRhdGEgfD0gKG1hc2sgPDwgb2Zmc2V0KTsKKworCWRhdFtpbmRleF0gPSBkYXRhICYgMHhmZjsKKwlkYXRbaW5kZXgrMV0gPSAoZGF0YSA+PiA4KSAmIDB4ZmY7Cit9CisKK3N0YXRpYyBpbnQganpfbmFuZF9jb3JyZWN0X2VjY19ycyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqZGF0LAorCXVpbnQ4X3QgKnJlYWRfZWNjLCB1aW50OF90ICpjYWxjX2VjYykKK3sKKwlzdHJ1Y3QganpfbmFuZCAqbmFuZCA9IG10ZF90b19qel9uYW5kKG10ZCk7CisJaW50IGksIGVycm9yX2NvdW50LCBpbmRleDsKKwl1aW50MzJfdCByZWcsIHN0YXR1cywgZXJyb3I7CisJdWludDMyX3QgdDsKKwl1bnNpZ25lZCBpbnQgdGltZW91dCA9IDEwMDA7CisKKwl0ID0gcmVhZF9lY2NbMF07CisKKwlpZiAodCA9PSAweGZmKSB7CisJCWZvciAoaSA9IDE7IGkgPCA5OyArK2kpCisJCQl0ICY9IHJlYWRfZWNjW2ldOworCisJCXQgJj0gZGF0WzBdOworCQl0ICY9IGRhdFtuYW5kLT5jaGlwLmVjYy5zaXplIC8gMl07CisJCXQgJj0gZGF0W25hbmQtPmNoaXAuZWNjLnNpemUgLSAxXTsKKworCQlpZiAodCA9PSAweGZmKSB7CisJCQlmb3IgKGkgPSAxOyBpIDwgbmFuZC0+Y2hpcC5lY2Muc2l6ZSAtIDE7ICsraSkKKwkJCQl0ICY9IGRhdFtpXTsKKwkJCWlmICh0ID09IDB4ZmYpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgOTsgKytpKQorCQl3cml0ZWIocmVhZF9lY2NbaV0sIG5hbmQtPmJhc2UgKyBKWl9SRUdfTkFORF9QQVIwICsgaSk7CisKKwlyZWcgPSByZWFkbChuYW5kLT5iYXNlICsgSlpfUkVHX05BTkRfRUNDX0NUUkwpOworCXJlZyB8PSBKWl9OQU5EX0VDQ19DVFJMX1BBUl9SRUFEWTsKKwl3cml0ZWwocmVnLCBuYW5kLT5iYXNlICsgSlpfUkVHX05BTkRfRUNDX0NUUkwpOworCisJZG8geworCQlzdGF0dXMgPSByZWFkbChuYW5kLT5iYXNlICsgSlpfUkVHX05BTkRfSVJRX1NUQVQpOworCX0gd2hpbGUgKCEoc3RhdHVzICYgSlpfTkFORF9TVEFUVVNfREVDX0ZJTklTSCkgJiYgLS10aW1lb3V0KTsKKworCWlmICh0aW1lb3V0ID09IDApCisJICAgIHJldHVybiAtMTsKKworCXJlZyA9IHJlYWRsKG5hbmQtPmJhc2UgKyBKWl9SRUdfTkFORF9FQ0NfQ1RSTCk7CisJcmVnICY9IH5KWl9OQU5EX0VDQ19DVFJMX0VOQUJMRTsKKwl3cml0ZWwocmVnLCBuYW5kLT5iYXNlICsgSlpfUkVHX05BTkRfRUNDX0NUUkwpOworCisJaWYgKHN0YXR1cyAmIEpaX05BTkRfU1RBVFVTX0VSUk9SKSB7CisJCWlmIChzdGF0dXMgJiBKWl9OQU5EX1NUQVRVU19VTkNPUl9FUlJPUikKKwkJCXJldHVybiAtMTsKKworCQllcnJvcl9jb3VudCA9IChzdGF0dXMgJiBKWl9OQU5EX1NUQVRVU19FUlJfQ09VTlQpID4+IDI5OworCisJCWZvciAoaSA9IDA7IGkgPCBlcnJvcl9jb3VudDsgKytpKSB7CisJCQllcnJvciA9IHJlYWRsKG5hbmQtPmJhc2UgKyBKWl9SRUdfTkFORF9FUlIoaSkpOworCQkJaW5kZXggPSAoKGVycm9yID4+IDE2KSAmIDB4MWZmKSAtIDE7CisJCQlpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IDUxMikKKwkJCQlqel9uYW5kX2NvcnJlY3RfZGF0YShkYXQsIGluZGV4LCBlcnJvciAmIDB4MWZmKTsKKwkJfQorCisJCXJldHVybiBlcnJvcl9jb3VudDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCisvKiBDb3B5IHBhc3RlIG9mIG5hbmRfcmVhZF9wYWdlX2h3ZWNjX29vYl9maXJzdCBleGNlcHQgZm9yIGRpZmZlcmVudCBlY2Nwb3MKKyAqIGhhbmRsaW5nLiBUaGUgZWNjIGFyZWEgaXMgZm9yIDRrIGNoaXBzIDcyIGJ5dGVzIGxvbmcgYW5kIHRodXMgZG9lcyBub3QgZml0CisgKiBpbnRvIHRoZSBlY2Nwb3MgYXJyYXkuICovCitzdGF0aWMgaW50IGp6X25hbmRfcmVhZF9wYWdlX2h3ZWNjX29vYl9maXJzdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCB1aW50OF90ICpidWYsIGludCBwYWdlKQoreworCWludCBpLCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7CisJaW50IGVjY2J5dGVzID0gY2hpcC0+ZWNjLmJ5dGVzOworCWludCBlY2NzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsKKwl1aW50OF90ICpwID0gYnVmOworCXVuc2lnbmVkIGludCBlY2Nfb2Zmc2V0ID0gY2hpcC0+cGFnZV9zaGlmdDsKKworCS8qIFJlYWQgdGhlIE9PQiBhcmVhIGZpcnN0ICovCisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFQURPT0IsIDAsIHBhZ2UpOworCWNoaXAtPnJlYWRfYnVmKG10ZCwgY2hpcC0+b29iX3BvaSwgbXRkLT5vb2JzaXplKTsKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRDAsIDAsIHBhZ2UpOworCisJZm9yIChpID0gZWNjX29mZnNldDsgZWNjc3RlcHM7IGVjY3N0ZXBzLS0sIGkgKz0gZWNjYnl0ZXMsIHAgKz0gZWNjc2l6ZSkgeworCQlpbnQgc3RhdDsKKworCQljaGlwLT5lY2MuaHdjdGwobXRkLCBOQU5EX0VDQ19SRUFEKTsKKwkJY2hpcC0+cmVhZF9idWYobXRkLCBwLCBlY2NzaXplKTsKKworCQlzdGF0ID0gY2hpcC0+ZWNjLmNvcnJlY3QobXRkLCBwLCAmY2hpcC0+b29iX3BvaVtpXSwgTlVMTCk7CisJCWlmIChzdGF0IDwgMCkKKwkJCW10ZC0+ZWNjX3N0YXRzLmZhaWxlZCsrOworCQllbHNlCisJCQltdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQgKz0gc3RhdDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIENvcHktYW5kLXBhc3RlIG9mIG5hbmRfd3JpdGVfcGFnZV9od2VjYyB3aXRoIGRpZmZlcmVudCBlY2Nwb3MgaGFuZGxpbmcuICovCitzdGF0aWMgdm9pZCBqel9uYW5kX3dyaXRlX3BhZ2VfaHdlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsCisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgY29uc3QgdWludDhfdCAqYnVmKQoreworCWludCBpLCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7CisJaW50IGVjY2J5dGVzID0gY2hpcC0+ZWNjLmJ5dGVzOworCWludCBlY2NzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsKKwljb25zdCB1aW50OF90ICpwID0gYnVmOworCXVuc2lnbmVkIGludCBlY2Nfb2Zmc2V0ID0gY2hpcC0+cGFnZV9zaGlmdDsKKworCWZvciAoaSA9IGVjY19vZmZzZXQ7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpICs9IGVjY2J5dGVzLCBwICs9IGVjY3NpemUpIHsKKwkJY2hpcC0+ZWNjLmh3Y3RsKG10ZCwgTkFORF9FQ0NfV1JJVEUpOworCQljaGlwLT53cml0ZV9idWYobXRkLCBwLCBlY2NzaXplKTsKKwkJY2hpcC0+ZWNjLmNhbGN1bGF0ZShtdGQsIHAsICZjaGlwLT5vb2JfcG9pW2ldKTsKKwl9CisKKwljaGlwLT53cml0ZV9idWYobXRkLCBjaGlwLT5vb2JfcG9pLCBtdGQtPm9vYnNpemUpOworfQorCisjaWZkZWYgQ09ORklHX01URF9DTURMSU5FX1BBUlRTCitzdGF0aWMgY29uc3QgY2hhciAqcGFydF9wcm9iZXNbXSA9IHsiY21kbGluZSIsIE5VTEx9OworI2VuZGlmCisKK3N0YXRpYyBpbnQganpfbmFuZF9pb3JlbWFwX3Jlc291cmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHJlc291cmNlICoqcmVzLCB2b2lkIF9faW9tZW0gKipiYXNlKQoreworCWludCByZXQ7CisKKwkqcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgbmFtZSk7CisJaWYgKCEqcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgcGxhdGZvcm0gJXMgbWVtb3J5XG4iLCBuYW1lKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGVycjsKKwl9CisKKwkqcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKCgqcmVzKS0+c3RhcnQsIHJlc291cmNlX3NpemUoKnJlcyksCisJCQkJcGRldi0+bmFtZSk7CisJaWYgKCEqcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0ICVzIG1lbW9yeSByZWdpb25cbiIsIG5hbWUpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyOworCX0KKworCSpiYXNlID0gaW9yZW1hcCgoKnJlcyktPnN0YXJ0LCByZXNvdXJjZV9zaXplKCpyZXMpKTsKKwlpZiAoISpiYXNlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBpb3JlbWFwICVzIG1lbW9yeSByZWdpb25cbiIsIG5hbWUpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3JlbGVhc2VfbWVtOworCX0KKworCXJldHVybiAwOworCitlcnJfcmVsZWFzZV9tZW06CisJcmVsZWFzZV9tZW1fcmVnaW9uKCgqcmVzKS0+c3RhcnQsIHJlc291cmNlX3NpemUoKnJlcykpOworZXJyOgorCSpyZXMgPSBOVUxMOworCSpiYXNlID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBqel9uYW5kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QganpfbmFuZCAqbmFuZDsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkOworCXN0cnVjdCBqel9uYW5kX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCisJc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRpdGlvbl9pbmZvOworCWludCBudW1fcGFydGl0aW9ucyA9IDA7CisjZW5kaWYKKworCW5hbmQgPSBremFsbG9jKHNpemVvZigqbmFuZCksIEdGUF9LRVJORUwpOworCWlmICghbmFuZCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgZGV2aWNlIHN0cnVjdHVyZS5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXQgPSBqel9uYW5kX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgIm1taW8iLCAmbmFuZC0+bWVtLCAmbmFuZC0+YmFzZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZTsKKwlyZXQgPSBqel9uYW5kX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgImJhbmsiLCAmbmFuZC0+YmFua19tZW0sCisJCQkmbmFuZC0+YmFua19iYXNlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9pb3VubWFwX21taW87CisKKwlpZiAocGRhdGEgJiYgZ3Bpb19pc192YWxpZChwZGF0YS0+YnVzeV9ncGlvKSkgeworCQlyZXQgPSBncGlvX3JlcXVlc3QocGRhdGEtPmJ1c3lfZ3BpbywgIk5BTkQgYnVzeSBwaW4iKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gcmVxdWVzdCBidXN5IGdwaW8gJWQ6ICVkXG4iLAorCQkJCXBkYXRhLT5idXN5X2dwaW8sIHJldCk7CisJCQlnb3RvIGVycl9pb3VubWFwX21lbTsKKwkJfQorCX0KKworCW10ZAkJPSAmbmFuZC0+bXRkOworCWNoaXAJCT0gJm5hbmQtPmNoaXA7CisJbXRkLT5wcml2CT0gY2hpcDsKKwltdGQtPm93bmVyCT0gVEhJU19NT0RVTEU7CisJbXRkLT5uYW1lCT0gImp6NDc0MC1uYW5kIjsKKworCWNoaXAtPmVjYy5od2N0bAkJPSBqel9uYW5kX2h3Y3RsOworCWNoaXAtPmVjYy5jYWxjdWxhdGUJPSBqel9uYW5kX2NhbGN1bGF0ZV9lY2NfcnM7CisJY2hpcC0+ZWNjLmNvcnJlY3QJPSBqel9uYW5kX2NvcnJlY3RfZWNjX3JzOworCWNoaXAtPmVjYy5tb2RlCQk9IE5BTkRfRUNDX0hXX09PQl9GSVJTVDsKKwljaGlwLT5lY2Muc2l6ZQkJPSA1MTI7CisJY2hpcC0+ZWNjLmJ5dGVzCQk9IDk7CisKKwljaGlwLT5lY2MucmVhZF9wYWdlCT0ganpfbmFuZF9yZWFkX3BhZ2VfaHdlY2Nfb29iX2ZpcnN0OworCWNoaXAtPmVjYy53cml0ZV9wYWdlCT0ganpfbmFuZF93cml0ZV9wYWdlX2h3ZWNjOworCisJaWYgKHBkYXRhKQorCQljaGlwLT5lY2MubGF5b3V0ID0gcGRhdGEtPmVjY19sYXlvdXQ7CisKKwljaGlwLT5jaGlwX2RlbGF5ID0gNTA7CisJY2hpcC0+Y21kX2N0cmwgPSBqel9uYW5kX2NtZF9jdHJsOworCisJaWYgKHBkYXRhICYmIGdwaW9faXNfdmFsaWQocGRhdGEtPmJ1c3lfZ3BpbykpCisJCWNoaXAtPmRldl9yZWFkeSA9IGp6X25hbmRfZGV2X3JlYWR5OworCisJY2hpcC0+SU9fQUREUl9SID0gbmFuZC0+YmFua19iYXNlOworCWNoaXAtPklPX0FERFJfVyA9IG5hbmQtPmJhbmtfYmFzZTsKKworCW5hbmQtPnBkYXRhID0gcGRhdGE7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbmFuZCk7CisKKwl3cml0ZWwoSlpfTkFORF9DVFJMX0VOQUJMRV9DSElQKDApLCBuYW5kLT5iYXNlICsgSlpfUkVHX05BTkRfQ1RSTCk7CisKKwlyZXQgPSBuYW5kX3NjYW5faWRlbnQobXRkLCAxLCBOVUxMKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgICJGYWlsZWQgdG8gc2NhbiBuYW5kXG4iKTsKKwkJZ290byBlcnJfZ3Bpb19mcmVlOworCX0KKworCWlmIChwZGF0YSAmJiBwZGF0YS0+aWRlbnRfY2FsbGJhY2spIHsKKwkJcGRhdGEtPmlkZW50X2NhbGxiYWNrKHBkZXYsIGNoaXAsICZwZGF0YS0+cGFydGl0aW9ucywKKwkJCQkJJnBkYXRhLT5udW1fcGFydGl0aW9ucyk7CisJfQorCisJcmV0ID0gbmFuZF9zY2FuX3RhaWwobXRkKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgICJGYWlsZWQgdG8gc2NhbiBuYW5kXG4iKTsKKwkJZ290byBlcnJfZ3Bpb19mcmVlOworCX0KKworI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUworI2lmZGVmIENPTkZJR19NVERfQ01ETElORV9QQVJUUworCW51bV9wYXJ0aXRpb25zID0gcGFyc2VfbXRkX3BhcnRpdGlvbnMobXRkLCBwYXJ0X3Byb2JlcywKKwkJCQkJCSZwYXJ0aXRpb25faW5mbywgMCk7CisjZW5kaWYKKwlpZiAobnVtX3BhcnRpdGlvbnMgPD0gMCAmJiBwZGF0YSkgeworCQludW1fcGFydGl0aW9ucyA9IHBkYXRhLT5udW1fcGFydGl0aW9uczsKKwkJcGFydGl0aW9uX2luZm8gPSBwZGF0YS0+cGFydGl0aW9uczsKKwl9CisKKwlpZiAobnVtX3BhcnRpdGlvbnMgPiAwKQorCQlyZXQgPSBhZGRfbXRkX3BhcnRpdGlvbnMobXRkLCBwYXJ0aXRpb25faW5mbywgbnVtX3BhcnRpdGlvbnMpOworCWVsc2UKKyNlbmRpZgorCXJldCA9IGFkZF9tdGRfZGV2aWNlKG10ZCk7CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhZGQgbXRkIGRldmljZVxuIik7CisJCWdvdG8gZXJyX25hbmRfcmVsZWFzZTsKKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiU3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQgSlo0NzQwIE5BTkQgZHJpdmVyXG4iKTsKKworCXJldHVybiAwOworCitlcnJfbmFuZF9yZWxlYXNlOgorCW5hbmRfcmVsZWFzZSgmbmFuZC0+bXRkKTsKK2Vycl9ncGlvX2ZyZWU6CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJZ3Bpb19mcmVlKHBkYXRhLT5idXN5X2dwaW8pOworZXJyX2lvdW5tYXBfbWVtOgorCWlvdW5tYXAobmFuZC0+YmFua19iYXNlKTsKK2Vycl9pb3VubWFwX21taW86CisJaW91bm1hcChuYW5kLT5iYXNlKTsKK2Vycl9mcmVlOgorCWtmcmVlKG5hbmQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGp6X25hbmRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGp6X25hbmQgKm5hbmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCW5hbmRfcmVsZWFzZSgmbmFuZC0+bXRkKTsKKworCS8qIERlYXNzZXJ0IGFuZCBkaXNhYmxlIGFsbCBjaGlwcyAqLworCXdyaXRlbCgwLCBuYW5kLT5iYXNlICsgSlpfUkVHX05BTkRfQ1RSTCk7CisKKwlpb3VubWFwKG5hbmQtPmJhbmtfYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKG5hbmQtPmJhbmtfbWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShuYW5kLT5iYW5rX21lbSkpOworCWlvdW5tYXAobmFuZC0+YmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKG5hbmQtPm1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobmFuZC0+bWVtKSk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlrZnJlZShuYW5kKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGp6X25hbmRfZHJpdmVyID0geworCS5wcm9iZSA9IGp6X25hbmRfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGp6X25hbmRfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJqejQ3NDAtbmFuZCIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBqel9uYW5kX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZqel9uYW5kX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChqel9uYW5kX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQganpfbmFuZF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmp6X25hbmRfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGp6X25hbmRfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkxhcnMtUGV0ZXIgQ2xhdXNlbiA8bGFyc0BtZXRhZm9vLmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJOQU5EIGNvbnRyb2xsZXIgZHJpdmVyIGZvciBKWjQ3NDAgU29DIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmp6NDc0MC1uYW5kIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL214Y19uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL214Y19uYW5kLmMKaW5kZXggODJlOTQzOC4uMGQ3NmIxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9teGNfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbXhjX25hbmQuYwpAQCAtNjIzLDggKzYyMyw3IEBACiAJCWVsc2UKIAkJCWhvc3QtPmJ1Zl9zdGFydCA9IGNvbHVtbiArIG10ZC0+d3JpdGVzaXplOwogCi0JCWlmIChtdGQtPndyaXRlc2l6ZSA+IDUxMikKLQkJCWNvbW1hbmQgPSBOQU5EX0NNRF9SRUFEMDsgLyogb25seSBSRUFEMCBpcyB2YWxpZCAqLworCQljb21tYW5kID0gTkFORF9DTURfUkVBRDA7IC8qIG9ubHkgUkVBRDAgaXMgdmFsaWQgKi8KIAogCQlzZW5kX2NtZChob3N0LCBjb21tYW5kLCBmYWxzZSk7CiAJCW14Y19kb19hZGRyX2N5Y2xlKG10ZCwgY29sdW1uLCBwYWdlX2FkZHIpOwpAQCAtNjM5LDMxICs2MzgsMTEgQEAKIAkJYnJlYWs7CiAKIAljYXNlIE5BTkRfQ01EX1NFUUlOOgotCQlpZiAoY29sdW1uID49IG10ZC0+d3JpdGVzaXplKSB7Ci0JCQkvKgotCQkJICogRklYTUU6IGJlZm9yZSBzZW5kIFNFUUlOIGNvbW1hbmQgZm9yIHdyaXRlIE9PQiwKLQkJCSAqIFdlIG11c3QgcmVhZCBvbmUgcGFnZSBvdXQuCi0JCQkgKiBGb3IgSzlGMUdYWCBoYXMgbm8gUkVBRDEgY29tbWFuZCB0byBzZXQgY3VycmVudCBIVwotCQkJICogcG9pbnRlciB0byBzcGFyZSBhcmVhLCB3ZSBtdXN0IHdyaXRlIHRoZSB3aG9sZSBwYWdlCi0JCQkgKiBpbmNsdWRpbmcgT09CIHRvZ2V0aGVyLgotCQkJICovCi0JCQlpZiAobXRkLT53cml0ZXNpemUgPiA1MTIpCi0JCQkJLyogY2FsbCBvdXJzZWxmIHRvIHJlYWQgYSBwYWdlICovCi0JCQkJbXhjX25hbmRfY29tbWFuZChtdGQsIE5BTkRfQ01EX1JFQUQwLCAwLAotCQkJCQkJcGFnZV9hZGRyKTsKKwkJaWYgKGNvbHVtbiA+PSBtdGQtPndyaXRlc2l6ZSkKKwkJCS8qIGNhbGwgb3Vyc2VsZiB0byByZWFkIGEgcGFnZSAqLworCQkJbXhjX25hbmRfY29tbWFuZChtdGQsIE5BTkRfQ01EX1JFQUQwLCAwLCBwYWdlX2FkZHIpOwogCi0JCQlob3N0LT5idWZfc3RhcnQgPSBjb2x1bW47Ci0KLQkJCS8qIFNldCBwcm9ncmFtIHBvaW50ZXIgdG8gc3BhcmUgcmVnaW9uICovCi0JCQlpZiAobXRkLT53cml0ZXNpemUgPT0gNTEyKQotCQkJCXNlbmRfY21kKGhvc3QsIE5BTkRfQ01EX1JFQURPT0IsIGZhbHNlKTsKLQkJfSBlbHNlIHsKLQkJCWhvc3QtPmJ1Zl9zdGFydCA9IGNvbHVtbjsKLQotCQkJLyogU2V0IHByb2dyYW0gcG9pbnRlciB0byBwYWdlIHN0YXJ0ICovCi0JCQlpZiAobXRkLT53cml0ZXNpemUgPT0gNTEyKQotCQkJCXNlbmRfY21kKGhvc3QsIE5BTkRfQ01EX1JFQUQwLCBmYWxzZSk7Ci0JCX0KKwkJaG9zdC0+YnVmX3N0YXJ0ID0gY29sdW1uOwogCiAJCXNlbmRfY21kKGhvc3QsIGNvbW1hbmQsIGZhbHNlKTsKIAkJbXhjX2RvX2FkZHJfY3ljbGUobXRkLCBjb2x1bW4sIHBhZ2VfYWRkcik7CkBAIC04NTMsNiArODMyLDggQEAKIAkgICAgcGFyc2VfbXRkX3BhcnRpdGlvbnMobXRkLCBwYXJ0X3Byb2JlcywgJmhvc3QtPnBhcnRzLCAwKTsKIAlpZiAobnJfcGFydHMgPiAwKQogCQlhZGRfbXRkX3BhcnRpdGlvbnMobXRkLCBob3N0LT5wYXJ0cywgbnJfcGFydHMpOworCWVsc2UgaWYgKHBkYXRhLT5wYXJ0cykKKwkJYWRkX210ZF9wYXJ0aXRpb25zKG10ZCwgcGRhdGEtPnBhcnRzLCBwZGF0YS0+bnJfcGFydHMpOwogCWVsc2UKICNlbmRpZgogCXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jIGIvZHJpdmVycy9tdGQvdWJpL2J1aWxkLmMKaW5kZXggMTNiMDVjYi4uNzhhZTg5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL2J1aWxkLmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL2J1aWxkLmMKQEAgLTU5Myw2ICs1OTMsNyBAQAogCXViaS0+Z29vZF9wZWJfY291bnQgPSB1YmktPnBlYl9jb3VudCAtIHViaS0+YmFkX3BlYl9jb3VudDsKIAl1YmktPm1heF9lYyA9IHNpLT5tYXhfZWM7CiAJdWJpLT5tZWFuX2VjID0gc2ktPm1lYW5fZWM7CisJdWJpX21zZygibWF4LiBzZXF1ZW5jZSBudW1iZXI6ICAgICAgICVsbHUiLCBzaS0+bWF4X3NxbnVtKTsKIAogCWVyciA9IHViaV9yZWFkX3ZvbHVtZV90YWJsZSh1YmksIHNpKTsKIAlpZiAoZXJyKQpAQCAtOTgxLDcgKzk4Miw3IEBACiAJdWJpX21zZygibnVtYmVyIG9mIFBFQnMgcmVzZXJ2ZWQgZm9yIGJhZCBQRUIgaGFuZGxpbmc6ICVkIiwKIAkJdWJpLT5iZWJfcnN2ZF9wZWJzKTsKIAl1YmlfbXNnKCJtYXgvbWVhbiBlcmFzZSBjb3VudGVyOiAlZC8lZCIsIHViaS0+bWF4X2VjLCB1YmktPm1lYW5fZWMpOwotCXViaV9tc2coImltYWdlIHNlcXVlbmNlIG51bWJlcjogJWQiLCB1YmktPmltYWdlX3NlcSk7CisJdWJpX21zZygiaW1hZ2Ugc2VxdWVuY2UgbnVtYmVyOiAgJWQiLCB1YmktPmltYWdlX3NlcSk7CiAKIAkvKgogCSAqIFRoZSBiZWxvdyBsb2NrIG1ha2VzIHN1cmUgd2UgZG8gbm90IHJhY2Ugd2l0aCAndWJpX3RocmVhZCgpJyB3aGljaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL2ViYS5jIGIvZHJpdmVycy9tdGQvdWJpL2ViYS5jCmluZGV4IDlmODdjOTkuLmZlNzQ3NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9lYmEuYworKysgYi9kcml2ZXJzL210ZC91YmkvZWJhLmMKQEAgLTQxOCw3ICs0MTgsOCBAQAogCQkJCSAqIG1heSB0cnkgdG8gcmVjb3ZlciBkYXRhLiBGSVhNRTogYnV0IHRoaXMgaXMKIAkJCQkgKiBub3QgaW1wbGVtZW50ZWQuCiAJCQkJICovCi0JCQkJaWYgKGVyciA9PSBVQklfSU9fQkFEX1ZJRF9IRFIpIHsKKwkJCQlpZiAoZXJyID09IFVCSV9JT19CQURfSERSX1JFQUQgfHwKKwkJCQkgICAgZXJyID09IFVCSV9JT19CQURfSERSKSB7CiAJCQkJCXViaV93YXJuKCJjb3JydXB0ZWQgVklEIGhlYWRlciBhdCBQRUIgIgogCQkJCQkJICIlZCwgTEVCICVkOiVkIiwgcG51bSwgdm9sX2lkLAogCQkJCQkJIGxudW0pOwpAQCAtOTYxLDggKzk2Miw4IEBACiAgKi8KIHN0YXRpYyBpbnQgaXNfZXJyb3Jfc2FuZShpbnQgZXJyKQogewotCWlmIChlcnIgPT0gLUVJTyB8fCBlcnIgPT0gLUVOT01FTSB8fCBlcnIgPT0gVUJJX0lPX0JBRF9WSURfSERSIHx8Ci0JICAgIGVyciA9PSAtRVRJTUVET1VUKQorCWlmIChlcnIgPT0gLUVJTyB8fCBlcnIgPT0gLUVOT01FTSB8fCBlcnIgPT0gVUJJX0lPX0JBRF9IRFIgfHwKKwkgICAgZXJyID09IFVCSV9JT19CQURfSERSX1JFQUQgfHwgZXJyID09IC1FVElNRURPVVQpCiAJCXJldHVybiAwOwogCXJldHVybiAxOwogfQpAQCAtMTE2NSw2ICsxMTY2LDQ0IEBACiB9CiAKIC8qKgorICogcHJpbnRfcnN2ZF93YXJuaW5nIC0gd2FybiBhYm91dCBub3QgaGF2aW5nIGVub3VnaCByZXNlcnZlZCBQRUJzLgorICogQHViaTogVUJJIGRldmljZSBkZXNjcmlwdGlvbiBvYmplY3QKKyAqCisgKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciAndWJpX2ViYV9pbml0X3NjYW4oKScgd2hpY2ggaXMgY2FsbGVkIHdoZW4gVUJJCisgKiBjYW5ub3QgcmVzZXJ2ZSBlbm91Z2ggUEVCcyBmb3IgYmFkIGJsb2NrIGhhbmRsaW5nLiBUaGlzIGZ1bmN0aW9uIG1ha2VzIGEKKyAqIGRlY2lzaW9uIHdoZXRoZXIgd2UgaGF2ZSB0byBwcmludCBhIHdhcm5pbmcgb3Igbm90LiBUaGUgYWxnb3JpdGhtIGlzIGFzCisgKiBmb2xsb3dzOgorICogICBvIGlmIHRoaXMgaXMgYSBuZXcgVUJJIGltYWdlLCB0aGVuIGp1c3QgcHJpbnQgdGhlIHdhcm5pbmcKKyAqICAgbyBpZiB0aGlzIGlzIGFuIFVCSSBpbWFnZSB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIHVzZWQgZm9yIHNvbWUgdGltZSwgcHJpbnQKKyAqICAgICBhIHdhcm5pbmcgb25seSBpZiB3ZSBjYW4gcmVzZXJ2ZSBsZXNzIHRoYW4gMTAlIG9mIHRoZSBleHBlY3RlZCBhbW91bnQgb2YKKyAqICAgICB0aGUgcmVzZXJ2ZWQgUEVCLgorICoKKyAqIFRoZSBpZGVhIGlzIHRoYXQgd2hlbiBVQkkgaXMgdXNlZCwgUEVCcyBiZWNvbWUgYmFkLCBhbmQgdGhlIHJlc2VydmVkIHBvb2wKKyAqIG9mIFBFQnMgYmVjb21lcyBzbWFsbGVyLCB3aGljaCBpcyBub3JtYWwgYW5kIHdlIGRvIG5vdCB3YW50IHRvIHNjYXJlIHVzZXJzCisgKiB3aXRoIGEgd2FybmluZyBldmVyeSB0aW1lIHRoZXkgYXR0YWNoIHRoZSBNVEQgZGV2aWNlLiBUaGlzIHdhcyBhbiBpc3N1ZQorICogcmVwb3J0ZWQgYnkgcmVhbCB1c2Vycy4KKyAqLworc3RhdGljIHZvaWQgcHJpbnRfcnN2ZF93YXJuaW5nKHN0cnVjdCB1YmlfZGV2aWNlICp1YmksCisJCQkgICAgICAgc3RydWN0IHViaV9zY2FuX2luZm8gKnNpKQoreworCS8qCisJICogVGhlIDEgPDwgMTggKDI1NktpQikgbnVtYmVyIGlzIHBpY2tlZCByYW5kb21seSwganVzdCBhIHJlYXNvbmFibHkKKwkgKiBsYXJnZSBudW1iZXIgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBuZXdseSBmbGFzaGVkIGFuZCB1c2VkIGltYWdlcy4KKwkgKi8KKwlpZiAoc2ktPm1heF9zcW51bSA+ICgxIDw8IDE4KSkgeworCQlpbnQgbWluID0gdWJpLT5iZWJfcnN2ZF9sZXZlbCAvIDEwOworCisJCWlmICghbWluKQorCQkJbWluID0gMTsKKwkJaWYgKHViaS0+YmViX3JzdmRfcGVicyA+IG1pbikKKwkJCXJldHVybjsKKwl9CisKKwl1Ymlfd2FybigiY2Fubm90IHJlc2VydmUgZW5vdWdoIFBFQnMgZm9yIGJhZCBQRUIgaGFuZGxpbmcsIHJlc2VydmVkICVkLCIKKwkJICIgbmVlZCAlZCIsIHViaS0+YmViX3JzdmRfcGVicywgdWJpLT5iZWJfcnN2ZF9sZXZlbCk7Cit9CisKKy8qKgogICogdWJpX2ViYV9pbml0X3NjYW4gLSBpbml0aWFsaXplIHRoZSBFQkEgc3ViLXN5c3RlbSB1c2luZyBzY2FubmluZyBpbmZvcm1hdGlvbi4KICAqIEB1Ymk6IFVCSSBkZXZpY2UgZGVzY3JpcHRpb24gb2JqZWN0CiAgKiBAc2k6IHNjYW5uaW5nIGluZm9ybWF0aW9uCkBAIC0xMjM2LDkgKzEyNzUsNyBAQAogCQlpZiAodWJpLT5hdmFpbF9wZWJzIDwgdWJpLT5iZWJfcnN2ZF9sZXZlbCkgewogCQkJLyogTm8gZW5vdWdoIGZyZWUgcGh5c2ljYWwgZXJhc2VibG9ja3MgKi8KIAkJCXViaS0+YmViX3JzdmRfcGVicyA9IHViaS0+YXZhaWxfcGViczsKLQkJCXViaV93YXJuKCJjYW5ub3QgcmVzZXJ2ZSBlbm91Z2ggUEVCcyBmb3IgYmFkIFBFQiAiCi0JCQkJICJoYW5kbGluZywgcmVzZXJ2ZWQgJWQsIG5lZWQgJWQiLAotCQkJCSB1YmktPmJlYl9yc3ZkX3BlYnMsIHViaS0+YmViX3JzdmRfbGV2ZWwpOworCQkJcHJpbnRfcnN2ZF93YXJuaW5nKHViaSwgc2kpOwogCQl9IGVsc2UKIAkJCXViaS0+YmViX3JzdmRfcGVicyA9IHViaS0+YmViX3JzdmRfbGV2ZWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9pby5jIGIvZHJpdmVycy9tdGQvdWJpL2lvLmMKaW5kZXggNGI5NzllMy4uMzMyZjk5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL2lvLmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL2lvLmMKQEAgLTE1MCw2ICsxNTAsOCBAQAogcmV0cnk6CiAJZXJyID0gdWJpLT5tdGQtPnJlYWQodWJpLT5tdGQsIGFkZHIsIGxlbiwgJnJlYWQsIGJ1Zik7CiAJaWYgKGVycikgeworCQljb25zdCBjaGFyICplcnJzdHIgPSAoZXJyID09IC1FQkFETVNHKSA/ICIgKEVDQyBlcnJvcikiIDogIiI7CisKIAkJaWYgKGVyciA9PSAtRVVDTEVBTikgewogCQkJLyoKIAkJCSAqIC1FVUNMRUFOIGlzIHJlcG9ydGVkIGlmIHRoZXJlIHdhcyBhIGJpdC1mbGlwIHdoaWNoCkBAIC0xNjUsMTUgKzE2NywxNSBAQAogCQl9CiAKIAkJaWYgKHJlYWQgIT0gbGVuICYmIHJldHJpZXMrKyA8IFVCSV9JT19SRVRSSUVTKSB7Ci0JCQlkYmdfaW8oImVycm9yICVkIHdoaWxlIHJlYWRpbmcgJWQgYnl0ZXMgZnJvbSBQRUIgJWQ6JWQsIgorCQkJZGJnX2lvKCJlcnJvciAlZCVzIHdoaWxlIHJlYWRpbmcgJWQgYnl0ZXMgZnJvbSBQRUIgJWQ6JWQsIgogCQkJICAgICAgICIgcmVhZCBvbmx5ICV6ZCBieXRlcywgcmV0cnkiLAotCQkJICAgICAgIGVyciwgbGVuLCBwbnVtLCBvZmZzZXQsIHJlYWQpOworCQkJICAgICAgIGVyciwgZXJyc3RyLCBsZW4sIHBudW0sIG9mZnNldCwgcmVhZCk7CiAJCQl5aWVsZCgpOwogCQkJZ290byByZXRyeTsKIAkJfQogCi0JCXViaV9lcnIoImVycm9yICVkIHdoaWxlIHJlYWRpbmcgJWQgYnl0ZXMgZnJvbSBQRUIgJWQ6JWQsICIKLQkJCSJyZWFkICV6ZCBieXRlcyIsIGVyciwgbGVuLCBwbnVtLCBvZmZzZXQsIHJlYWQpOworCQl1YmlfZXJyKCJlcnJvciAlZCVzIHdoaWxlIHJlYWRpbmcgJWQgYnl0ZXMgZnJvbSBQRUIgJWQ6JWQsICIKKwkJCSJyZWFkICV6ZCBieXRlcyIsIGVyciwgZXJyc3RyLCBsZW4sIHBudW0sIG9mZnNldCwgcmVhZCk7CiAJCXViaV9kYmdfZHVtcF9zdGFjaygpOwogCiAJCS8qCkBAIC01MTUsNyArNTE3LDcgQEAKIAkgKiBJbiB0aGlzIGNhc2Ugd2UgcHJvYmFibHkgYW55d2F5IGhhdmUgZ2FyYmFnZSBpbiB0aGlzIFBFQi4KIAkgKi8KIAllcnIxID0gdWJpX2lvX3JlYWRfdmlkX2hkcih1YmksIHBudW0sICZ2aWRfaGRyLCAwKTsKLQlpZiAoZXJyMSA9PSBVQklfSU9fQkFEX1ZJRF9IRFIpCisJaWYgKGVycjEgPT0gVUJJX0lPX0JBRF9IRFJfUkVBRCB8fCBlcnIxID09IFVCSV9JT19CQURfSERSKQogCQkvKgogCQkgKiBUaGUgVklEIGhlYWRlciBpcyBjb3JydXB0ZWQsIHNvIHdlIGNhbiBzYWZlbHkgZXJhc2UgdGhpcwogCQkgKiBQRUIgYW5kIG5vdCBhZnJhaWQgdGhhdCBpdCB3aWxsIGJlIHRyZWF0ZWQgYXMgYSB2YWxpZCBQRUIgaW4KQEAgLTcwOSw3ICs3MTEsNyBAQAogICogbyAlVUJJX0lPX0JJVEZMSVBTIGlmIHRoZSBDUkMgaXMgY29ycmVjdCwgYnV0IGJpdC1mbGlwcyB3ZXJlIGRldGVjdGVkCiAgKiAgIGFuZCBjb3JyZWN0ZWQgYnkgdGhlIGZsYXNoIGRyaXZlcjsgdGhpcyBpcyBoYXJtbGVzcyBidXQgbWF5IGluZGljYXRlIHRoYXQKICAqICAgdGhpcyBlcmFzZWJsb2NrIG1heSBiZWNvbWUgYmFkIHNvb24gKGJ1dCBtYXkgYmUgbm90KTsKLSAqIG8gJVVCSV9JT19CQURfRUNfSERSIGlmIHRoZSBlcmFzZSBjb3VudGVyIGhlYWRlciBpcyBjb3JydXB0ZWQgKGEgQ1JDIGVycm9yKTsKKyAqIG8gJVVCSV9JT19CQURfSERSIGlmIHRoZSBlcmFzZSBjb3VudGVyIGhlYWRlciBpcyBjb3JydXB0ZWQgKGEgQ1JDIGVycm9yKTsKICAqIG8gJVVCSV9JT19QRUJfRU1QVFkgaWYgdGhlIHBoeXNpY2FsIGVyYXNlYmxvY2sgaXMgZW1wdHk7CiAgKiBvIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUuCiAgKi8KQEAgLTczNiwyMyArNzM4LDIxIEBACiAJCSAqIGhlYWRlciBpcyBzdGlsbCBPSywgd2UganVzdCByZXBvcnQgdGhpcyBhcyB0aGVyZSB3YXMgYQogCQkgKiBiaXQtZmxpcC4KIAkJICovCi0JCXJlYWRfZXJyID0gZXJyOworCQlpZiAoZXJyID09IC1FQkFETVNHKQorCQkJcmVhZF9lcnIgPSBVQklfSU9fQkFEX0hEUl9SRUFEOwogCX0KIAogCW1hZ2ljID0gYmUzMl90b19jcHUoZWNfaGRyLT5tYWdpYyk7CiAJaWYgKG1hZ2ljICE9IFVCSV9FQ19IRFJfTUFHSUMpIHsKKwkJaWYgKHJlYWRfZXJyKQorCQkJcmV0dXJuIHJlYWRfZXJyOworCiAJCS8qCiAJCSAqIFRoZSBtYWdpYyBmaWVsZCBpcyB3cm9uZy4gTGV0J3MgY2hlY2sgaWYgd2UgaGF2ZSByZWFkIGFsbAogCQkgKiAweEZGLiBJZiB5ZXMsIHRoaXMgcGh5c2ljYWwgZXJhc2VibG9jayBpcyBhc3N1bWVkIHRvIGJlCiAJCSAqIGVtcHR5LgotCQkgKgotCQkgKiBCdXQgaWYgdGhlcmUgd2FzIGEgcmVhZCBlcnJvciwgd2UgZG8gbm90IHRlc3QgaXQgZm9yIGFsbAotCQkgKiAweEZGcy4gRXZlbiBpZiBpdCBkb2VzIGNvbnRhaW4gYWxsIDB4RkZzLCB0aGlzIGVycm9yCi0JCSAqIGluZGljYXRlcyB0aGF0IHNvbWV0aGluZyBpcyBzdGlsbCB3cm9uZyB3aXRoIHRoaXMgcGh5c2ljYWwKLQkJICogZXJhc2VibG9jayBhbmQgd2UgYW55d2F5IGNhbm5vdCB0cmVhdCBpdCBhcyBlbXB0eS4KIAkJICovCi0JCWlmIChyZWFkX2VyciAhPSAtRUJBRE1TRyAmJgotCQkgICAgY2hlY2tfcGF0dGVybihlY19oZHIsIDB4RkYsIFVCSV9FQ19IRFJfU0laRSkpIHsKKwkJaWYgKGNoZWNrX3BhdHRlcm4oZWNfaGRyLCAweEZGLCBVQklfRUNfSERSX1NJWkUpKSB7CiAJCQkvKiBUaGUgcGh5c2ljYWwgZXJhc2VibG9jayBpcyBzdXBwb3NlZGx5IGVtcHR5ICovCiAJCQlpZiAodmVyYm9zZSkKIAkJCQl1Ymlfd2Fybigibm8gRUMgaGVhZGVyIGZvdW5kIGF0IFBFQiAlZCwgIgpAQCAtNzc0LDcgKzc3NCw3IEBACiAJCX0gZWxzZSBpZiAoVUJJX0lPX0RFQlVHKQogCQkJZGJnX21zZygiYmFkIG1hZ2ljIG51bWJlciBhdCBQRUIgJWQ6ICUwOHggaW5zdGVhZCBvZiAiCiAJCQkJIiUwOHgiLCBwbnVtLCBtYWdpYywgVUJJX0VDX0hEUl9NQUdJQyk7Ci0JCXJldHVybiBVQklfSU9fQkFEX0VDX0hEUjsKKwkJcmV0dXJuIFVCSV9JT19CQURfSERSOwogCX0KIAogCWNyYyA9IGNyYzMyKFVCSV9DUkMzMl9JTklULCBlY19oZHIsIFVCSV9FQ19IRFJfU0laRV9DUkMpOwpAQCAtNzg4LDcgKzc4OCw3IEBACiAJCX0gZWxzZSBpZiAoVUJJX0lPX0RFQlVHKQogCQkJZGJnX21zZygiYmFkIEVDIGhlYWRlciBDUkMgYXQgUEVCICVkLCBjYWxjdWxhdGVkICIKIAkJCQkiJSMwOHgsIHJlYWQgJSMwOHgiLCBwbnVtLCBjcmMsIGhkcl9jcmMpOwotCQlyZXR1cm4gVUJJX0lPX0JBRF9FQ19IRFI7CisJCXJldHVybiByZWFkX2VyciA/OiBVQklfSU9fQkFEX0hEUjsKIAl9CiAKIAkvKiBBbmQgb2YgY291cnNlIHZhbGlkYXRlIHdoYXQgaGFzIGp1c3QgYmVlbiByZWFkIGZyb20gdGhlIG1lZGlhICovCkBAIC03OTgsNiArNzk4LDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCS8qCisJICogSWYgdGhlcmUgd2FzICUtRUJBRE1TRywgYnV0IHRoZSBoZWFkZXIgQ1JDIGlzIHN0aWxsIE9LLCByZXBvcnQgYWJvdXQKKwkgKiBhIGJpdC1mbGlwIHRvIGZvcmNlIHNjcnViYmluZyBvbiB0aGlzIFBFQi4KKwkgKi8KIAlyZXR1cm4gcmVhZF9lcnIgPyBVQklfSU9fQklURkxJUFMgOiAwOwogfQogCkBAIC05NzcsNyArOTgxLDcgQEAKICAqIG8gJVVCSV9JT19CSVRGTElQUyBpZiB0aGUgQ1JDIGlzIGNvcnJlY3QsIGJ1dCBiaXQtZmxpcHMgd2VyZSBkZXRlY3RlZAogICogICBhbmQgY29ycmVjdGVkIGJ5IHRoZSBmbGFzaCBkcml2ZXI7IHRoaXMgaXMgaGFybWxlc3MgYnV0IG1heSBpbmRpY2F0ZSB0aGF0CiAgKiAgIHRoaXMgZXJhc2VibG9jayBtYXkgYmVjb21lIGJhZCBzb29uOwotICogbyAlVUJJX0lPX0JBRF9WSURfSERSIGlmIHRoZSB2b2x1bWUgaWRlbnRpZmllciBoZWFkZXIgaXMgY29ycnVwdGVkIChhIENSQworICogbyAlVUJJX0lPX0JBRF9IRFIgaWYgdGhlIHZvbHVtZSBpZGVudGlmaWVyIGhlYWRlciBpcyBjb3JydXB0ZWQgKGEgQ1JDCiAgKiAgIGVycm9yIGRldGVjdGVkKTsKICAqIG8gJVVCSV9JT19QRUJfRlJFRSBpZiB0aGUgcGh5c2ljYWwgZXJhc2VibG9jayBpcyBmcmVlIChpLmUuLCB0aGVyZSBpcyBubyBWSUQKICAqICAgaGVhZGVyIHRoZXJlKTsKQEAgLTEwMDgsMjIgKzEwMTIsMjAgQEAKIAkJICogQ1JDIGNoZWNrLXN1bSBhbmQgd2Ugd2lsbCBpZGVudGlmeSB0aGlzLiBJZiB0aGUgVklEIGhlYWRlciBpcwogCQkgKiBzdGlsbCBPSywgd2UganVzdCByZXBvcnQgdGhpcyBhcyB0aGVyZSB3YXMgYSBiaXQtZmxpcC4KIAkJICovCi0JCXJlYWRfZXJyID0gZXJyOworCQlpZiAoZXJyID09IC1FQkFETVNHKQorCQkJcmVhZF9lcnIgPSBVQklfSU9fQkFEX0hEUl9SRUFEOwogCX0KIAogCW1hZ2ljID0gYmUzMl90b19jcHUodmlkX2hkci0+bWFnaWMpOwogCWlmIChtYWdpYyAhPSBVQklfVklEX0hEUl9NQUdJQykgeworCQlpZiAocmVhZF9lcnIpCisJCQlyZXR1cm4gcmVhZF9lcnI7CisKIAkJLyoKIAkJICogSWYgd2UgaGF2ZSByZWFkIGFsbCAweEZGIGJ5dGVzLCB0aGUgVklEIGhlYWRlciBwcm9iYWJseSBkb2VzCiAJCSAqIG5vdCBleGlzdCBhbmQgdGhlIHBoeXNpY2FsIGVyYXNlYmxvY2sgaXMgYXNzdW1lZCB0byBiZSBmcmVlLgotCQkgKgotCQkgKiBCdXQgaWYgdGhlcmUgd2FzIGEgcmVhZCBlcnJvciwgd2UgZG8gbm90IHRlc3QgdGhlIGRhdGEgZm9yCi0JCSAqIDB4RkZzLiBFdmVuIGlmIGl0IGRvZXMgY29udGFpbiBhbGwgMHhGRnMsIHRoaXMgZXJyb3IKLQkJICogaW5kaWNhdGVzIHRoYXQgc29tZXRoaW5nIGlzIHN0aWxsIHdyb25nIHdpdGggdGhpcyBwaHlzaWNhbAotCQkgKiBlcmFzZWJsb2NrIGFuZCBpdCBjYW5ub3QgYmUgcmVnYXJkZWQgYXMgZnJlZS4KIAkJICovCi0JCWlmIChyZWFkX2VyciAhPSAtRUJBRE1TRyAmJgotCQkgICAgY2hlY2tfcGF0dGVybih2aWRfaGRyLCAweEZGLCBVQklfVklEX0hEUl9TSVpFKSkgeworCQlpZiAoY2hlY2tfcGF0dGVybih2aWRfaGRyLCAweEZGLCBVQklfVklEX0hEUl9TSVpFKSkgewogCQkJLyogVGhlIHBoeXNpY2FsIGVyYXNlYmxvY2sgaXMgc3VwcG9zZWRseSBmcmVlICovCiAJCQlpZiAodmVyYm9zZSkKIAkJCQl1Ymlfd2Fybigibm8gVklEIGhlYWRlciBmb3VuZCBhdCBQRUIgJWQsICIKQEAgLTEwNDUsNyArMTA0Nyw3IEBACiAJCX0gZWxzZSBpZiAoVUJJX0lPX0RFQlVHKQogCQkJZGJnX21zZygiYmFkIG1hZ2ljIG51bWJlciBhdCBQRUIgJWQ6ICUwOHggaW5zdGVhZCBvZiAiCiAJCQkJIiUwOHgiLCBwbnVtLCBtYWdpYywgVUJJX1ZJRF9IRFJfTUFHSUMpOwotCQlyZXR1cm4gVUJJX0lPX0JBRF9WSURfSERSOworCQlyZXR1cm4gVUJJX0lPX0JBRF9IRFI7CiAJfQogCiAJY3JjID0gY3JjMzIoVUJJX0NSQzMyX0lOSVQsIHZpZF9oZHIsIFVCSV9WSURfSERSX1NJWkVfQ1JDKTsKQEAgLTEwNTksNyArMTA2MSw3IEBACiAJCX0gZWxzZSBpZiAoVUJJX0lPX0RFQlVHKQogCQkJZGJnX21zZygiYmFkIENSQyBhdCBQRUIgJWQsIGNhbGN1bGF0ZWQgJSMwOHgsICIKIAkJCQkicmVhZCAlIzA4eCIsIHBudW0sIGNyYywgaGRyX2NyYyk7Ci0JCXJldHVybiBVQklfSU9fQkFEX1ZJRF9IRFI7CisJCXJldHVybiByZWFkX2VyciA/OiBVQklfSU9fQkFEX0hEUjsKIAl9CiAKIAkvKiBWYWxpZGF0ZSB0aGUgVklEIGhlYWRlciB0aGF0IHdlIGhhdmUganVzdCByZWFkICovCkBAIC0xMDY5LDYgKzEwNzEsMTAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJLyoKKwkgKiBJZiB0aGVyZSB3YXMgYSByZWFkIGVycm9yICglLUVCQURNU0cpLCBidXQgdGhlIGhlYWRlciBDUkMgaXMgc3RpbGwKKwkgKiBPSywgcmVwb3J0IGFib3V0IGEgYml0LWZsaXAgdG8gZm9yY2Ugc2NydWJiaW5nIG9uIHRoaXMgUEVCLgorCSAqLwogCXJldHVybiByZWFkX2VyciA/IFVCSV9JT19CSVRGTElQUyA6IDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMgYi9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jCmluZGV4IGFlZDE5ZjMuLjM3MmExNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL3NjYW4uYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgInViaS5oIgogCiAjaWZkZWYgQ09ORklHX01URF9VQklfREVCVUdfUEFSQU5PSUQKQEAgLTcyLDE2ICs3MywxOSBAQAogewogCXN0cnVjdCB1Ymlfc2Nhbl9sZWIgKnNlYjsKIAotCWlmIChsaXN0ID09ICZzaS0+ZnJlZSkKKwlpZiAobGlzdCA9PSAmc2ktPmZyZWUpIHsKIAkJZGJnX2JsZCgiYWRkIHRvIGZyZWU6IFBFQiAlZCwgRUMgJWQiLCBwbnVtLCBlYyk7Ci0JZWxzZSBpZiAobGlzdCA9PSAmc2ktPmVyYXNlKQorCQlzaS0+ZnJlZV9wZWJfY291bnQgKz0gMTsKKwl9IGVsc2UgaWYgKGxpc3QgPT0gJnNpLT5lcmFzZSkgewogCQlkYmdfYmxkKCJhZGQgdG8gZXJhc2U6IFBFQiAlZCwgRUMgJWQiLCBwbnVtLCBlYyk7Ci0JZWxzZSBpZiAobGlzdCA9PSAmc2ktPmNvcnIpIHsKKwkJc2ktPmVyYXNlX3BlYl9jb3VudCArPSAxOworCX0gZWxzZSBpZiAobGlzdCA9PSAmc2ktPmNvcnIpIHsKIAkJZGJnX2JsZCgiYWRkIHRvIGNvcnJ1cHRlZDogUEVCICVkLCBFQyAlZCIsIHBudW0sIGVjKTsKLQkJc2ktPmNvcnJfY291bnQgKz0gMTsKLQl9IGVsc2UgaWYgKGxpc3QgPT0gJnNpLT5hbGllbikKKwkJc2ktPmNvcnJfcGViX2NvdW50ICs9IDE7CisJfSBlbHNlIGlmIChsaXN0ID09ICZzaS0+YWxpZW4pIHsKIAkJZGJnX2JsZCgiYWRkIHRvIGFsaWVuOiBQRUIgJWQsIEVDICVkIiwgcG51bSwgZWMpOwotCWVsc2UKKwkJc2ktPmFsaWVuX3BlYl9jb3VudCArPSAxOworCX0gZWxzZQogCQlCVUcoKTsKIAogCXNlYiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1Ymlfc2Nhbl9sZWIpLCBHRlBfS0VSTkVMKTsKQEAgLTUxNyw2ICs1MjEsNyBAQAogCXN2LT5sZWJfY291bnQgKz0gMTsKIAlyYl9saW5rX25vZGUoJnNlYi0+dS5yYiwgcGFyZW50LCBwKTsKIAlyYl9pbnNlcnRfY29sb3IoJnNlYi0+dS5yYiwgJnN2LT5yb290KTsKKwlzaS0+dXNlZF9wZWJfY291bnQgKz0gMTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzQ1LDE5ICs3NTAsMTcgQEAKIAkJYml0ZmxpcHMgPSAxOwogCWVsc2UgaWYgKGVyciA9PSBVQklfSU9fUEVCX0VNUFRZKQogCQlyZXR1cm4gYWRkX3RvX2xpc3Qoc2ksIHBudW0sIFVCSV9TQ0FOX1VOS05PV05fRUMsICZzaS0+ZXJhc2UpOwotCWVsc2UgaWYgKGVyciA9PSBVQklfSU9fQkFEX0VDX0hEUikgeworCWVsc2UgaWYgKGVyciA9PSBVQklfSU9fQkFEX0hEUl9SRUFEIHx8IGVyciA9PSBVQklfSU9fQkFEX0hEUikgewogCQkvKgogCQkgKiBXZSBoYXZlIHRvIGFsc28gbG9vayBhdCB0aGUgVklEIGhlYWRlciwgcG9zc2libHkgaXQgaXMgbm90CiAJCSAqIGNvcnJ1cHRlZC4gU2V0ICViaXRmbGlwcyBmbGFnIGluIG9yZGVyIHRvIG1ha2UgdGhpcyBQRUIgYmUKIAkJICogbW92ZWQgYW5kIEVDIGJlIHJlLWNyZWF0ZWQuCiAJCSAqLwotCQllY19jb3JyID0gMTsKKwkJZWNfY29yciA9IGVycjsKIAkJZWMgPSBVQklfU0NBTl9VTktOT1dOX0VDOwogCQliaXRmbGlwcyA9IDE7CiAJfQogCi0Jc2ktPmlzX2VtcHR5ID0gMDsKLQogCWlmICghZWNfY29ycikgewogCQlpbnQgaW1hZ2Vfc2VxOwogCkBAIC04MTMsOSArODE2LDEyIEBACiAJCXJldHVybiBlcnI7CiAJZWxzZSBpZiAoZXJyID09IFVCSV9JT19CSVRGTElQUykKIAkJYml0ZmxpcHMgPSAxOwotCWVsc2UgaWYgKGVyciA9PSBVQklfSU9fQkFEX1ZJRF9IRFIgfHwKKwllbHNlIGlmIChlcnIgPT0gVUJJX0lPX0JBRF9IRFJfUkVBRCB8fCBlcnIgPT0gVUJJX0lPX0JBRF9IRFIgfHwKIAkJIChlcnIgPT0gVUJJX0lPX1BFQl9GUkVFICYmIGVjX2NvcnIpKSB7CiAJCS8qIFZJRCBoZWFkZXIgaXMgY29ycnVwdGVkICovCisJCWlmIChlcnIgPT0gVUJJX0lPX0JBRF9IRFJfUkVBRCB8fAorCQkgICAgZWNfY29yciA9PSBVQklfSU9fQkFEX0hEUl9SRUFEKQorCQkJc2ktPnJlYWRfZXJyX2NvdW50ICs9IDE7CiAJCWVyciA9IGFkZF90b19saXN0KHNpLCBwbnVtLCBlYywgJnNpLT5jb3JyKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CkBAIC04MzYsMTEgKzg0MiwxMSBAQAogCQlzd2l0Y2ggKHZpZGgtPmNvbXBhdCkgewogCQljYXNlIFVCSV9DT01QQVRfREVMRVRFOgogCQkJdWJpX21zZygiXCJkZWxldGVcIiBjb21wYXRpYmxlIGludGVybmFsIHZvbHVtZSAlZDolZCIKLQkJCQkiIGZvdW5kLCByZW1vdmUgaXQiLCB2b2xfaWQsIGxudW0pOworCQkJCSIgZm91bmQsIHdpbGwgcmVtb3ZlIGl0Iiwgdm9sX2lkLCBsbnVtKTsKIAkJCWVyciA9IGFkZF90b19saXN0KHNpLCBwbnVtLCBlYywgJnNpLT5jb3JyKTsKIAkJCWlmIChlcnIpCiAJCQkJcmV0dXJuIGVycjsKLQkJCWJyZWFrOworCQkJcmV0dXJuIDA7CiAKIAkJY2FzZSBVQklfQ09NUEFUX1JPOgogCQkJdWJpX21zZygicmVhZC1vbmx5IGNvbXBhdGlibGUgaW50ZXJuYWwgdm9sdW1lICVkOiVkIgpAQCAtODU1LDcgKzg2MSw2IEBACiAJCQllcnIgPSBhZGRfdG9fbGlzdChzaSwgcG51bSwgZWMsICZzaS0+YWxpZW4pOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwotCQkJc2ktPmFsaWVuX3BlYl9jb3VudCArPSAxOwogCQkJcmV0dXJuIDA7CiAKIAkJY2FzZSBVQklfQ09NUEFUX1JFSkVDVDoKQEAgLTg4Niw2ICs4OTEsODUgQEAKIH0KIAogLyoqCisgKiBjaGVja193aGF0X3dlX2hhdmUgLSBjaGVjayB3aGF0IFBFQiB3ZXJlIGZvdW5kIGJ5IHNjYW5uaW5nLgorICogQHViaTogVUJJIGRldmljZSBkZXNjcmlwdGlvbiBvYmplY3QKKyAqIEBzaTogc2Nhbm5pbmcgaW5mb3JtYXRpb24KKyAqCisgKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIHdoaWNoIHRha2VzIGEgbG9vayB3aGF0IFBFQnMgd2VyZSBmb3VuZCBieQorICogc2Nhbm5pbmcsIGFuZCBkZWNpZGVzIHdoZXRoZXIgdGhlIGZsYXNoIGlzIGVtcHR5IGFuZCBzaG91bGQgYmUgZm9ybWF0dGVkIGFuZAorICogd2hldGhlciB0aGVyZSBhcmUgdG9vIG1hbnkgY29ycnVwdGVkIFBFQnMgYW5kIHdlIHNob3VsZCBub3QgYXR0YWNoIHRoaXMKKyAqIE1URCBkZXZpY2UuIFJldHVybnMgemVybyBpZiB3ZSBzaG91bGQgcHJvY2VlZCB3aXRoIGF0dGFjaGluZyB0aGUgTVREIGRldmljZSwKKyAqIGFuZCAlLUVJTlZBTCBpZiB3ZSBzaG91bGQgbm90LgorICovCitzdGF0aWMgaW50IGNoZWNrX3doYXRfd2VfaGF2ZShzdHJ1Y3QgdWJpX2RldmljZSAqdWJpLCBzdHJ1Y3QgdWJpX3NjYW5faW5mbyAqc2kpCit7CisJc3RydWN0IHViaV9zY2FuX2xlYiAqc2ViOworCWludCBtYXhfY29ycjsKKworCW1heF9jb3JyID0gdWJpLT5wZWJfY291bnQgLSBzaS0+YmFkX3BlYl9jb3VudCAtIHNpLT5hbGllbl9wZWJfY291bnQ7CisJbWF4X2NvcnIgPSBtYXhfY29yciAvIDIwID86IDg7CisKKwkvKgorCSAqIEZldyBjb3JydXB0ZWQgUEVCcyBhcmUgbm90IGEgcHJvYmxlbSBhbmQgbWF5IGJlIGp1c3QgYSByZXN1bHQgb2YKKwkgKiB1bmNsZWFuIHJlYm9vdHMuIEhvd2V2ZXIsIG1hbnkgb2YgdGhlbSBtYXkgaW5kaWNhdGUgc29tZSBwcm9ibGVtcworCSAqIHdpdGggdGhlIGZsYXNoIEhXIG9yIGRyaXZlci4KKwkgKi8KKwlpZiAoc2ktPmNvcnJfcGViX2NvdW50ID49IDgpIHsKKwkJdWJpX3dhcm4oIiVkIFBFQnMgYXJlIGNvcnJ1cHRlZCIsIHNpLT5jb3JyX3BlYl9jb3VudCk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImNvcnJ1cHRlZCBQRUJzIGFyZToiKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShzZWIsICZzaS0+Y29yciwgdS5saXN0KQorCQkJcHJpbnRrKEtFUk5fQ09OVCAiICVkIiwgc2ViLT5wbnVtKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKKworCQkvKgorCQkgKiBJZiB0b28gbWFueSBQRUJzIGFyZSBjb3JydXB0ZWQsIHdlIHJlZnVzZSBhdHRhY2hpbmcsCisJCSAqIG90aGVyd2lzZSwgb25seSBwcmludCBhIHdhcm5pbmcuCisJCSAqLworCQlpZiAoc2ktPmNvcnJfcGViX2NvdW50ID49IG1heF9jb3JyKSB7CisJCQl1YmlfZXJyKCJ0b28gbWFueSBjb3JydXB0ZWQgUEVCcywgcmVmdXNpbmcgdGhpcyBkZXZpY2UiKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJaWYgKHNpLT5mcmVlX3BlYl9jb3VudCArIHNpLT51c2VkX3BlYl9jb3VudCArCisJICAgIHNpLT5hbGllbl9wZWJfY291bnQgPT0gMCkgeworCQkvKiBObyBVQkktZm9ybWF0dGVkIGVyYXNlYmxvY2tzIHdlcmUgZm91bmQgKi8KKwkJaWYgKHNpLT5jb3JyX3BlYl9jb3VudCA9PSBzaS0+cmVhZF9lcnJfY291bnQgJiYKKwkJICAgIHNpLT5jb3JyX3BlYl9jb3VudCA8IDgpIHsKKwkJCS8qIE5vIG9yIGp1c3QgZmV3IGNvcnJ1cHRlZCBQRUJzLCBhbmQgYWxsIG9mIHRoZW0gaGFkIGEKKwkJCSAqIHJlYWQgZXJyb3IuIFdlIGFzc3VtZSB0aGF0IHRob3NlIGFyZSBiYWQgUEVCcywgd2hpY2gKKwkJCSAqIHdlcmUganVzdCBub3QgbWFya2VkIGFzIGJhZCBzbyBmYXIuCisJCQkgKgorCQkJICogVGhpcyBwaWVjZSBvZiBjb2RlIGJhc2ljYWxseSB0cmllcyB0byBkaXN0aW5ndWlzaAorCQkJICogYmV0d2VlbiB0aGUgZm9sbG93aW5nIDIgc2l0dWF0aW9uczoKKwkJCSAqCisJCQkgKiAxLiBGbGFzaCBpcyBlbXB0eSwgYnV0IHRoZXJlIGFyZSBmZXcgYmFkIFBFQnMsIHdoaWNoCisJCQkgKiAgICBhcmUgbm90IG1hcmtlZCBhcyBiYWQgc28gZmFyLCBhbmQgd2hpY2ggd2VyZSByZWFkCisJCQkgKiAgICB3aXRoIGVycm9yLiBXZSB3YW50IHRvIGdvIGFoZWFkIGFuZCBmb3JtYXQgdGhpcworCQkJICogICAgZmxhc2guIFdoaWxlIGZvcm1hdGluZywgdGhlIGZhdWx0eSBQRUJzIHdpbGwKKwkJCSAqICAgIHByb2JhYmx5IGJlIG1hcmtlZCBhcyBiYWQuCisJCQkgKgorCQkJICogMi4gRmxhc2ggcHJvYmFibHkgY29udGFpbnMgbm9uLVVCSSBkYXRhIGFuZCB3ZSBkbworCQkJICogbm90IHdhbnQgdG8gZm9ybWF0IGl0IGFuZCBkZXN0cm95IHBvc3NpYmx5IG5lZWRlZAorCQkJICogZGF0YSAoZS5nLiwgY29uc2lkZXIgdGhlIGNhc2Ugd2hlbiB0aGUgYm9vdGxvYWRlcgorCQkJICogTVREIHBhcnRpdGlvbiB3YXMgYWNjaWRlbnRhbGx5IGZlZCB0byBVQkkpLgorCQkJICovCisJCQlzaS0+aXNfZW1wdHkgPSAxOworCQkJdWJpX21zZygiZW1wdHkgTVREIGRldmljZSBkZXRlY3RlZCIpOworCQkJZ2V0X3JhbmRvbV9ieXRlcygmdWJpLT5pbWFnZV9zZXEsIHNpemVvZih1YmktPmltYWdlX3NlcSkpOworCQl9IGVsc2UgeworCQkJdWJpX2VycigiTVREIGRldmljZSBwb3NzaWJseSBjb250YWlucyBub24tVUJJIGRhdGEsICIKKwkJCQkicmVmdXNpbmcgaXQiKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJaWYgKHNpLT5jb3JyX3BlYl9jb3VudCA+IDApCisJCXViaV9tc2coImNvcnJ1cHRlZCBQRUJzIHdpbGwgYmUgZm9ybWF0dGVkIik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogdWJpX3NjYW4gLSBzY2FuIGFuIE1URCBkZXZpY2UuCiAgKiBAdWJpOiBVQkkgZGV2aWNlIGRlc2NyaXB0aW9uIG9iamVjdAogICoKQEAgLTkwOSw3ICs5OTMsNiBAQAogCUlOSVRfTElTVF9IRUFEKCZzaS0+ZXJhc2UpOwogCUlOSVRfTElTVF9IRUFEKCZzaS0+YWxpZW4pOwogCXNpLT52b2x1bWVzID0gUkJfUk9PVDsKLQlzaS0+aXNfZW1wdHkgPSAxOwogCiAJZXJyID0gLUVOT01FTTsKIAllY2ggPSBremFsbG9jKHViaS0+ZWNfaGRyX2Fsc2l6ZSwgR0ZQX0tFUk5FTCk7CkBAIC05MzUsMjEgKzEwMTgsOSBAQAogCWlmIChzaS0+ZWNfY291bnQpCiAJCXNpLT5tZWFuX2VjID0gZGl2X3U2NChzaS0+ZWNfc3VtLCBzaS0+ZWNfY291bnQpOwogCi0JaWYgKHNpLT5pc19lbXB0eSkKLQkJdWJpX21zZygiZW1wdHkgTVREIGRldmljZSBkZXRlY3RlZCIpOwotCi0JLyoKLQkgKiBGZXcgY29ycnVwdGVkIFBFQnMgYXJlIG5vdCBhIHByb2JsZW0gYW5kIG1heSBiZSBqdXN0IGEgcmVzdWx0IG9mCi0JICogdW5jbGVhbiByZWJvb3RzLiBIb3dldmVyLCBtYW55IG9mIHRoZW0gbWF5IGluZGljYXRlIHNvbWUgcHJvYmxlbXMKLQkgKiB3aXRoIHRoZSBmbGFzaCBIVyBvciBkcml2ZXIuIFByaW50IGEgd2FybmluZyBpbiB0aGlzIGNhc2UuCi0JICovCi0JaWYgKHNpLT5jb3JyX2NvdW50ID49IDggfHwgc2ktPmNvcnJfY291bnQgPj0gdWJpLT5wZWJfY291bnQgLyA0KSB7Ci0JCXViaV93YXJuKCIlZCBQRUJzIGFyZSBjb3JydXB0ZWQiLCBzaS0+Y29ycl9jb3VudCk7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNvcnJ1cHRlZCBQRUJzIGFyZToiKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShzZWIsICZzaS0+Y29yciwgdS5saXN0KQotCQkJcHJpbnRrKEtFUk5fQ09OVCAiICVkIiwgc2ViLT5wbnVtKTsKLQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKLQl9CisJZXJyID0gY2hlY2tfd2hhdF93ZV9oYXZlKHViaSwgc2kpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3ZpZGg7CiAKIAkvKgogCSAqIEluIGNhc2Ugb2YgdW5rbm93biBlcmFzZSBjb3VudGVyIHdlIHVzZSB0aGUgbWVhbiBlcmFzZSBjb3VudGVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5oIGIvZHJpdmVycy9tdGQvdWJpL3NjYW4uaAppbmRleCBmZjE3OWFkLi4yNTc2YThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5oCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmgKQEAgLTkxLDEwICs5MSwxNiBAQAogICogQGVyYXNlOiBsaXN0IG9mIHBoeXNpY2FsIGVyYXNlYmxvY2tzIHdoaWNoIGhhdmUgdG8gYmUgZXJhc2VkCiAgKiBAYWxpZW46IGxpc3Qgb2YgcGh5c2ljYWwgZXJhc2VibG9ja3Mgd2hpY2ggc2hvdWxkIG5vdCBiZSB1c2VkIGJ5IFVCSSAoZS5nLiwKICAqICAgICAgICAgdGhvc2UgYmVsb25naW5nIHRvICJwcmVzZXJ2ZSItY29tcGF0aWJsZSBpbnRlcm5hbCB2b2x1bWVzKQorICogQHVzZWRfcGViX2NvdW50OiBjb3VudCBvZiB1c2VkIFBFQnMKKyAqIEBjb3JyX3BlYl9jb3VudDogY291bnQgb2YgUEVCcyBpbiB0aGUgQGNvcnIgbGlzdAorICogQHJlYWRfZXJyX2NvdW50OiBjb3VudCBvZiBQRUJzIHJlYWQgd2l0aCBlcnJvciAoJVVCSV9JT19CQURfSERSX1JFQUQgd2FzCisgKiAgICAgICAgICAgICAgICAgIHJldHVybmVkKQorICogQGZyZWVfcGViX2NvdW50OiBjb3VudCBvZiBQRUJzIGluIHRoZSBAZnJlZSBsaXN0CisgKiBAZXJhc2VfcGViX2NvdW50OiBjb3VudCBvZiBQRUJzIGluIHRoZSBAZXJhc2UgbGlzdAorICogQGFsaWVuX3BlYl9jb3VudDogY291bnQgb2YgUEVCcyBpbiB0aGUgQGFsaWVuIGxpc3QKICAqIEBiYWRfcGViX2NvdW50OiBjb3VudCBvZiBiYWQgcGh5c2ljYWwgZXJhc2VibG9ja3MKICAqIEB2b2xzX2ZvdW5kOiBudW1iZXIgb2Ygdm9sdW1lcyBmb3VuZCBkdXJpbmcgc2Nhbm5pbmcKICAqIEBoaWdoZXN0X3ZvbF9pZDogaGlnaGVzdCB2b2x1bWUgSUQKLSAqIEBhbGllbl9wZWJfY291bnQ6IGNvdW50IG9mIHBoeXNpY2FsIGVyYXNlYmxvY2tzIGluIHRoZSBAYWxpZW4gbGlzdAogICogQGlzX2VtcHR5OiBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgTVREIGRldmljZSBpcyBlbXB0eSBvciBub3QKICAqIEBtaW5fZWM6IGxvd2VzdCBlcmFzZSBjb3VudGVyIHZhbHVlCiAgKiBAbWF4X2VjOiBoaWdoZXN0IGVyYXNlIGNvdW50ZXIgdmFsdWUKQEAgLTEwMiw3ICsxMDgsNiBAQAogICogQG1lYW5fZWM6IG1lYW4gZXJhc2UgY291bnRlciB2YWx1ZQogICogQGVjX3N1bTogYSB0ZW1wb3JhcnkgdmFyaWFibGUgdXNlZCB3aGVuIGNhbGN1bGF0aW5nIEBtZWFuX2VjCiAgKiBAZWNfY291bnQ6IGEgdGVtcG9yYXJ5IHZhcmlhYmxlIHVzZWQgd2hlbiBjYWxjdWxhdGluZyBAbWVhbl9lYwotICogQGNvcnJfY291bnQ6IGNvdW50IG9mIGNvcnJ1cHRlZCBQRUJzCiAgKgogICogVGhpcyBkYXRhIHN0cnVjdHVyZSBjb250YWlucyB0aGUgcmVzdWx0IG9mIHNjYW5uaW5nIGFuZCBtYXkgYmUgdXNlZCBieSBvdGhlcgogICogVUJJIHN1Yi1zeXN0ZW1zIHRvIGJ1aWxkIGZpbmFsIFVCSSBkYXRhIHN0cnVjdHVyZXMsIGZ1cnRoZXIgZXJyb3ItcmVjb3ZlcnkKQEAgLTExNCwxMCArMTE5LDE1IEBACiAJc3RydWN0IGxpc3RfaGVhZCBmcmVlOwogCXN0cnVjdCBsaXN0X2hlYWQgZXJhc2U7CiAJc3RydWN0IGxpc3RfaGVhZCBhbGllbjsKKwlpbnQgdXNlZF9wZWJfY291bnQ7CisJaW50IGNvcnJfcGViX2NvdW50OworCWludCByZWFkX2Vycl9jb3VudDsKKwlpbnQgZnJlZV9wZWJfY291bnQ7CisJaW50IGVyYXNlX3BlYl9jb3VudDsKKwlpbnQgYWxpZW5fcGViX2NvdW50OwogCWludCBiYWRfcGViX2NvdW50OwogCWludCB2b2xzX2ZvdW5kOwogCWludCBoaWdoZXN0X3ZvbF9pZDsKLQlpbnQgYWxpZW5fcGViX2NvdW50OwogCWludCBpc19lbXB0eTsKIAlpbnQgbWluX2VjOwogCWludCBtYXhfZWM7CkBAIC0xMjUsNyArMTM1LDYgQEAKIAlpbnQgbWVhbl9lYzsKIAl1aW50NjRfdCBlY19zdW07CiAJaW50IGVjX2NvdW50OwotCWludCBjb3JyX2NvdW50OwogfTsKIAogc3RydWN0IHViaV9kZXZpY2U7CkBAIC0xMzUsNyArMTQ0LDcgQEAKICAqIHViaV9zY2FuX21vdmVfdG9fbGlzdCAtIG1vdmUgYSBQRUIgZnJvbSB0aGUgdm9sdW1lIHRyZWUgdG8gYSBsaXN0LgogICoKICAqIEBzdjogdm9sdW1lIHNjYW5uaW5nIGluZm9ybWF0aW9uCi0gKiBAc2ViOiBzY2FubmluZyBlcmFzZWJsb2NrIGluZnBybWF0aW9uCisgKiBAc2ViOiBzY2FubmluZyBlcmFzZWJsb2NrIGluZm9ybWF0aW9uCiAgKiBAbGlzdDogdGhlIGxpc3QgdG8gbW92ZSB0bwogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgdWJpX3NjYW5fbW92ZV90b19saXN0KHN0cnVjdCB1Ymlfc2Nhbl92b2x1bWUgKnN2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL3ViaS5oIGIvZHJpdmVycy9tdGQvdWJpL3ViaS5oCmluZGV4IGE2MzdmMDIuLjAzNTllMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS91YmkuaAorKysgYi9kcml2ZXJzL210ZC91YmkvdWJpLmgKQEAgLTg5LDE2ICs4OSwxNiBAQAogICogICAgICAgICAgICAgICAgICAgJTB4RkYgYnl0ZXMKICAqIFVCSV9JT19QRUJfRlJFRTogdGhlIHBoeXNpY2FsIGVyYXNlYmxvY2sgaXMgZnJlZSwgaS5lLiBpdCBjb250YWlucyBvbmx5IGEKICAqICAgICAgICAgICAgICAgICAgdmFsaWQgZXJhc2UgY291bnRlciBoZWFkZXIsIGFuZCB0aGUgcmVzdCBhcmUgJTB4RkYgYnl0ZXMKLSAqIFVCSV9JT19CQURfRUNfSERSOiB0aGUgZXJhc2UgY291bnRlciBoZWFkZXIgaXMgY29ycnVwdGVkIChiYWQgbWFnaWMgb3IgQ1JDKQotICogVUJJX0lPX0JBRF9WSURfSERSOiB0aGUgdm9sdW1lIGlkZW50aWZpZXIgaGVhZGVyIGlzIGNvcnJ1cHRlZCAoYmFkIG1hZ2ljIG9yCi0gKiAgICAgICAgICAgICAgICAgICAgIENSQykKKyAqIFVCSV9JT19CQURfSERSOiB0aGUgRUMgb3IgVklEIGhlYWRlciBpcyBjb3JydXB0ZWQgKGJhZCBtYWdpYyBvciBDUkMpCisgKiBVQklfSU9fQkFEX0hEUl9SRUFEOiB0aGUgc2FtZSBhcyAlVUJJX0lPX0JBRF9IRFIsIGJ1dCBhbHNvIHRoZXJlIHdhcyBhIHJlYWQKKyAqIAkJCWVycm9yIHJlcG9ydGVkIGJ5IHRoZSBmbGFzaCBkcml2ZXIKICAqIFVCSV9JT19CSVRGTElQUzogYml0LWZsaXBzIHdlcmUgZGV0ZWN0ZWQgYW5kIGNvcnJlY3RlZAogICovCiBlbnVtIHsKIAlVQklfSU9fUEVCX0VNUFRZID0gMSwKIAlVQklfSU9fUEVCX0ZSRUUsCi0JVUJJX0lPX0JBRF9FQ19IRFIsCi0JVUJJX0lPX0JBRF9WSURfSERSLAorCVVCSV9JT19CQURfSERSLAorCVVCSV9JT19CQURfSERSX1JFQUQsCiAJVUJJX0lPX0JJVEZMSVBTCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUyNy5jIGIvZHJpdmVycy9uZXQvM2M1MjcuYwppbmRleCAzODM5NWRmLi43MDcwNWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUyNy5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTI3LmMKQEAgLTcyOSwxNCArNzI5LDE0IEBACiAgKgltYzMyX2xvYWRfcnhfcmluZwktCWxvYWQgdGhlIHJpbmcgb2YgcmVjZWl2ZSBidWZmZXJzCiAgKglAZGV2OiAzYzUyNyB0byBidWlsZCB0aGUgcmluZyBmb3IKICAqCi0gKglUaGlzIGluaXRhbGlzZXMgdGhlIG9uLWNhcmQgYW5kIGRyaXZlciBkYXRhc3RydWN0dXJlcyB0bworICoJVGhpcyBpbml0aWFsaXNlcyB0aGUgb24tY2FyZCBhbmQgZHJpdmVyIGRhdGFzdHJ1Y3R1cmVzIHRvCiAgKgl0aGUgcG9pbnQgd2hlcmUgbWMzMl9zdGFydF90cmFuc2NlaXZlcigpIGNhbiBiZSBjYWxsZWQuCiAgKgogICoJVGhlIGNhcmQgc2V0cyB1cCB0aGUgcmVjZWl2ZSByaW5nIGZvciB1cy4gV2UgYXJlIHJlcXVpcmVkIHRvIHVzZSB0aGUKICAqCXJpbmcgaXQgcHJvdmlkZXMsIGFsdGhvdWdoIHRoZSBzaXplIG9mIHRoZSByaW5nIGlzIGNvbmZpZ3VyYWJsZS4KICAqCiAgKiAJV2UgYWxsb2NhdGUgYW4gc2tfYnVmZiBmb3IgZWFjaCByaW5nIGVudHJ5IGluIHR1cm4gYW5kCi0gKiAJaW5pdGFsaXNlIGl0cyBob3VzZS1rZWVwaW5nIGluZm8uIEF0IHRoZSBzYW1lIHRpbWUsIHdlIHJlYWQKKyAqIAlpbml0aWFsaXNlIGl0cyBob3VzZS1rZWVwaW5nIGluZm8uIEF0IHRoZSBzYW1lIHRpbWUsIHdlIHJlYWQKICAqIAllYWNoICduZXh0JyBwb2ludGVyIGluIG91ciByeF9yaW5nIGFycmF5LiBUaGlzIHJlZHVjZXMgc2xvdwogICogCXNoYXJlZC1tZW1vcnkgcmVhZHMgYW5kIG1ha2VzIGl0IGVhc3kgdG8gYWNjZXNzIHByZWRlY2Vzc29yCiAgKiAJZGVzY3JpcHRvcnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUyNy5oIGIvZHJpdmVycy9uZXQvM2M1MjcuaAppbmRleCA3NWUyOGZlLi5kNjkzYjhkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MjcuaAorKysgYi9kcml2ZXJzL25ldC8zYzUyNy5oCkBAIC0zNCw3ICszNCw3IEBACiB7CiAgCXUxNiBtYm94OwogIAl1MTYgZGF0YVsxXTsKLX0gX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHNrYl9oZWFkZXIKIHsKQEAgLTQzLDcgKzQzLDcgQEAKIAl1MTYgbmV4dDsJLyogRG8gbm90IGNoYW5nZSEgKi8KIAl1MTYgbGVuZ3RoOwogCXUzMiBkYXRhOwotfSBfX2F0dHJpYnV0ZSgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbWMzMl9zdGF0cwogewpAQCAtNjgsNyArNjgsNyBAQAogCXUzMiBkYXRhQVs2XTsKIAl1MTYgZGF0YUJbNV07CiAJdTMyIGRhdGFDWzE0XTsKLX0gX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBTVEFUVVNfTUFTSwkweDBGCiAjZGVmaW5lIENPTVBMRVRFRAkoMTw8NykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTl4LmMgYi9kcml2ZXJzL25ldC8zYzU5eC5jCmluZGV4IGQ3NTgwM2UuLmM3NTRkODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTl4LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1OXguYwpAQCAtNDM1LDcgKzQzNSw2IEBACiAgICBGaXJzdCB0aGUgd2luZG93cy4gIFRoZXJlIGFyZSBlaWdodCByZWdpc3RlciB3aW5kb3dzLCB3aXRoIHRoZSBjb21tYW5kCiAgICBhbmQgc3RhdHVzIHJlZ2lzdGVycyBhdmFpbGFibGUgaW4gZWFjaC4KICAgICovCi0jZGVmaW5lIEVMM1dJTkRPVyh3aW5fbnVtKSBpb3dyaXRlMTYoU2VsZWN0V2luZG93ICsgKHdpbl9udW0pLCBpb2FkZHIgKyBFTDNfQ01EKQogI2RlZmluZSBFTDNfQ01EIDB4MGUKICNkZWZpbmUgRUwzX1NUQVRVUyAweDBlCiAKQEAgLTY0NSwxMCArNjQ0LDUxIEBACiAJdTE2IGRlZmVycmVkOwkJCQkJCS8qIFJlc2VuZCB0aGVzZSBpbnRlcnJ1cHRzIHdoZW4gd2UKIAkJCQkJCQkJCQkgKiBiYWxlIGZyb20gdGhlIElTUiAqLwogCXUxNiBpb19zaXplOwkJCQkJCS8qIFNpemUgb2YgUENJIHJlZ2lvbiAoZm9yIHJlbGVhc2VfcmVnaW9uKSAqLwotCXNwaW5sb2NrX3QgbG9jazsJCQkJCS8qIFNlcmlhbGlzZSBhY2Nlc3MgdG8gZGV2aWNlICYgaXRzIHZvcnRleF9wcml2YXRlICovCi0Jc3RydWN0IG1paV9pZl9pbmZvIG1paTsJCQkJLyogTUlJIGxpYiBob29rcy9pbmZvICovCisKKwkvKiBTZXJpYWxpc2VzIGFjY2VzcyB0byBoYXJkd2FyZSBvdGhlciB0aGFuIE1JSSBhbmQgdmFyaWFibGVzIGJlbG93LgorCSAqIFRoZSBsb2NrIGhpZXJhcmNoeSBpcyBydG5sX2xvY2sgPiBsb2NrID4gbWlpX2xvY2sgPiB3aW5kb3dfbG9jay4gKi8KKwlzcGlubG9ja190IGxvY2s7CisKKwlzcGlubG9ja190IG1paV9sb2NrOwkJLyogU2VyaWFsaXNlcyBhY2Nlc3MgdG8gTUlJICovCisJc3RydWN0IG1paV9pZl9pbmZvIG1paTsJCS8qIE1JSSBsaWIgaG9va3MvaW5mbyAqLworCXNwaW5sb2NrX3Qgd2luZG93X2xvY2s7CQkvKiBTZXJpYWxpc2VzIGFjY2VzcyB0byB3aW5kb3dlZCByZWdzICovCisJaW50IHdpbmRvdzsJCQkvKiBSZWdpc3RlciB3aW5kb3cgKi8KIH07CiAKK3N0YXRpYyB2b2lkIHdpbmRvd19zZXQoc3RydWN0IHZvcnRleF9wcml2YXRlICp2cCwgaW50IHdpbmRvdykKK3sKKwlpZiAod2luZG93ICE9IHZwLT53aW5kb3cpIHsKKwkJaW93cml0ZTE2KFNlbGVjdFdpbmRvdyArIHdpbmRvdywgdnAtPmlvYWRkciArIEVMM19DTUQpOworCQl2cC0+d2luZG93ID0gd2luZG93OworCX0KK30KKworI2RlZmluZSBERUZJTkVfV0lORE9XX0lPKHNpemUpCQkJCQkJXAorc3RhdGljIHUgIyMgc2l6ZQkJCQkJCQlcCit3aW5kb3dfcmVhZCAjIyBzaXplKHN0cnVjdCB2b3J0ZXhfcHJpdmF0ZSAqdnAsIGludCB3aW5kb3csIGludCBhZGRyKQlcCit7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQkJCQkJXAorCXUgIyMgc2l6ZSByZXQ7CQkJCQkJCVwKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdnAtPndpbmRvd19sb2NrLCBmbGFncyk7CQkJXAorCXdpbmRvd19zZXQodnAsIHdpbmRvdyk7CQkJCQkJXAorCXJldCA9IGlvcmVhZCAjIyBzaXplKHZwLT5pb2FkZHIgKyBhZGRyKTsJCQlcCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdnAtPndpbmRvd19sb2NrLCBmbGFncyk7CQlcCisJcmV0dXJuIHJldDsJCQkJCQkJXAorfQkJCQkJCQkJCVwKK3N0YXRpYyB2b2lkCQkJCQkJCQlcCit3aW5kb3dfd3JpdGUgIyMgc2l6ZShzdHJ1Y3Qgdm9ydGV4X3ByaXZhdGUgKnZwLCB1ICMjIHNpemUgdmFsdWUsCVwKKwkJICAgICBpbnQgd2luZG93LCBpbnQgYWRkcikJCQkJXAorewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwkJCQkJCVwKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdnAtPndpbmRvd19sb2NrLCBmbGFncyk7CQkJXAorCXdpbmRvd19zZXQodnAsIHdpbmRvdyk7CQkJCQkJXAorCWlvd3JpdGUgIyMgc2l6ZSh2YWx1ZSwgdnAtPmlvYWRkciArIGFkZHIpOwkJCVwKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2cC0+d2luZG93X2xvY2ssIGZsYWdzKTsJCVwKK30KK0RFRklORV9XSU5ET1dfSU8oOCkKK0RFRklORV9XSU5ET1dfSU8oMTYpCitERUZJTkVfV0lORE9XX0lPKDMyKQorCiAjaWZkZWYgQ09ORklHX1BDSQogI2RlZmluZSBERVZJQ0VfUENJKGRldikgKCgoZGV2KS0+YnVzID09ICZwY2lfYnVzX3R5cGUpID8gdG9fcGNpX2RldigoZGV2KSkgOiBOVUxMKQogI2Vsc2UKQEAgLTcxMSw3ICs3NTEsNyBAQAogc3RhdGljIGludCB2b3J0ZXhfdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCB2b3J0ZXhfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZmluYWwpOwogc3RhdGljIGludCB2b3J0ZXhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIG1kaW9fc3luYyh2b2lkIF9faW9tZW0gKmlvYWRkciwgaW50IGJpdHMpOworc3RhdGljIHZvaWQgbWRpb19zeW5jKHN0cnVjdCB2b3J0ZXhfcHJpdmF0ZSAqdnAsIGludCBiaXRzKTsKIHN0YXRpYyBpbnQgbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbik7CiBzdGF0aWMgdm9pZCBtZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICp2cCwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uLCBpbnQgdmFsdWUpOwogc3RhdGljIHZvaWQgdm9ydGV4X3RpbWVyKHVuc2lnbmVkIGxvbmcgYXJnKTsKQEAgLTk4MCwxMCArMTAyMCwxNiBAQAogCWlvYWRkciA9IHBjaV9pb21hcChwZGV2LCBwY2lfYmFyLCAwKTsKIAlpZiAoIWlvYWRkcikgLyogSWYgbWFwcGluZyBmYWlscywgZmFsbC1iYWNrIHRvIEJBUiAwLi4uICovCiAJCWlvYWRkciA9IHBjaV9pb21hcChwZGV2LCAwLCAwKTsKKwlpZiAoIWlvYWRkcikgeworCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQogCiAJcmMgPSB2b3J0ZXhfcHJvYmUxKCZwZGV2LT5kZXYsIGlvYWRkciwgcGRldi0+aXJxLAogCQkJICAgZW50LT5kcml2ZXJfZGF0YSwgdW5pdCk7CiAJaWYgKHJjIDwgMCkgeworCQlwY2lfaW91bm1hcChwZGV2LCBpb2FkZHIpOwogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTExMTksNiArMTE2NSw3IEBACiAJdnAtPmhhc19ud2F5ID0gKHZjaS0+ZHJ2X2ZsYWdzICYgSEFTX05XQVkpID8gMSA6IDA7CiAJdnAtPmlvX3NpemUgPSB2Y2ktPmlvX3NpemU7CiAJdnAtPmNhcmRfaWR4ID0gY2FyZF9pZHg7CisJdnAtPndpbmRvdyA9IC0xOwogCiAJLyogbW9kdWxlIGxpc3Qgb25seSBmb3IgQ29tcGFxIGRldmljZSAqLwogCWlmIChnZW5kZXYgPT0gTlVMTCkgewpAQCAtMTE1NCw2ICsxMjAxLDggQEAKIAl9CiAKIAlzcGluX2xvY2tfaW5pdCgmdnAtPmxvY2spOworCXNwaW5fbG9ja19pbml0KCZ2cC0+bWlpX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZ2cC0+d2luZG93X2xvY2spOwogCXZwLT5nZW5kZXYgPSBnZW5kZXY7CiAJdnAtPm1paS5kZXYgPSBkZXY7CiAJdnAtPm1paS5tZGlvX3JlYWQgPSBtZGlvX3JlYWQ7CkBAIC0xMjA1LDcgKzEyNTQsNiBAQAogCXZwLT5taWkuZm9yY2VfbWVkaWEgPSB2cC0+ZnVsbF9kdXBsZXg7CiAJdnAtPm9wdGlvbnMgPSBvcHRpb247CiAJLyogUmVhZCB0aGUgc3RhdGlvbiBhZGRyZXNzIGZyb20gdGhlIEVFUFJPTS4gKi8KLQlFTDNXSU5ET1coMCk7CiAJewogCQlpbnQgYmFzZTsKIApAQCAtMTIxOCwxNCArMTI2NiwxNSBAQAogCiAJCWZvciAoaSA9IDA7IGkgPCAweDQwOyBpKyspIHsKIAkJCWludCB0aW1lcjsKLQkJCWlvd3JpdGUxNihiYXNlICsgaSwgaW9hZGRyICsgV24wRWVwcm9tQ21kKTsKKwkJCXdpbmRvd193cml0ZTE2KHZwLCBiYXNlICsgaSwgMCwgV24wRWVwcm9tQ21kKTsKIAkJCS8qIFBhdXNlIGZvciBhdCBsZWFzdCAxNjIgdXMuIGZvciB0aGUgcmVhZCB0byB0YWtlIHBsYWNlLiAqLwogCQkJZm9yICh0aW1lciA9IDEwOyB0aW1lciA+PSAwOyB0aW1lci0tKSB7CiAJCQkJdWRlbGF5KDE2Mik7Ci0JCQkJaWYgKChpb3JlYWQxNihpb2FkZHIgKyBXbjBFZXByb21DbWQpICYgMHg4MDAwKSA9PSAwKQorCQkJCWlmICgod2luZG93X3JlYWQxNih2cCwgMCwgV24wRWVwcm9tQ21kKSAmCisJCQkJICAgICAweDgwMDApID09IDApCiAJCQkJCWJyZWFrOwogCQkJfQotCQkJZWVwcm9tW2ldID0gaW9yZWFkMTYoaW9hZGRyICsgV24wRWVwcm9tRGF0YSk7CisJCQllZXByb21baV0gPSB3aW5kb3dfcmVhZDE2KHZwLCAwLCBXbjBFZXByb21EYXRhKTsKIAkJfQogCX0KIAlmb3IgKGkgPSAwOyBpIDwgMHgxODsgaSsrKQpAQCAtMTI1MCw5ICsxMjk5LDggQEAKIAkJcHJfZXJyKCIqKiogRUVQUk9NIE1BQyBhZGRyZXNzIGlzIGludmFsaWQuXG4iKTsKIAkJZ290byBmcmVlX3Jpbmc7CS8qIFdpdGggZXZlcnkgcGFjayAqLwogCX0KLQlFTDNXSU5ET1coMik7CiAJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLQkJaW93cml0ZTgoZGV2LT5kZXZfYWRkcltpXSwgaW9hZGRyICsgaSk7CisJCXdpbmRvd193cml0ZTgodnAsIGRldi0+ZGV2X2FkZHJbaV0sIDIsIGkpOwogCiAJaWYgKHByaW50X2luZm8pCiAJCXByX2NvbnQoIiwgSVJRICVkXG4iLCBkZXYtPmlycSk7CkBAIC0xMjYxLDggKzEzMDksNyBAQAogCQlwcl93YXJuaW5nKCIgKioqIFdhcm5pbmc6IElSUSAlZCBpcyB1bmxpa2VseSB0byB3b3JrISAqKipcbiIsCiAJCQkgICBkZXYtPmlycSk7CiAKLQlFTDNXSU5ET1coNCk7Ci0Jc3RlcCA9IChpb3JlYWQ4KGlvYWRkciArIFduNF9OZXREaWFnKSAmIDB4MWUpID4+IDE7CisJc3RlcCA9ICh3aW5kb3dfcmVhZDgodnAsIDQsIFduNF9OZXREaWFnKSAmIDB4MWUpID4+IDE7CiAJaWYgKHByaW50X2luZm8pIHsKIAkJcHJfaW5mbygiICBwcm9kdWN0IGNvZGUgJTAyeCUwMnggcmV2ICUwMnguJWQgZGF0ZSAlMDJkLSUwMmQtJTAyZFxuIiwKIAkJCWVlcHJvbVs2XSYweGZmLCBlZXByb21bNl0+PjgsIGVlcHJvbVsweDE0XSwKQEAgLTEyODUsMTcgKzEzMzIsMTUgQEAKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKSwKIAkJCQl2cC0+Y2JfZm5fYmFzZSk7CiAJCX0KLQkJRUwzV0lORE9XKDIpOwogCi0JCW4gPSBpb3JlYWQxNihpb2FkZHIgKyBXbjJfUmVzZXRPcHRpb25zKSAmIH4weDQwMTA7CisJCW4gPSB3aW5kb3dfcmVhZDE2KHZwLCAyLCBXbjJfUmVzZXRPcHRpb25zKSAmIH4weDQwMTA7CiAJCWlmICh2cC0+ZHJ2X2ZsYWdzICYgSU5WRVJUX0xFRF9QV1IpCiAJCQluIHw9IDB4MTA7CiAJCWlmICh2cC0+ZHJ2X2ZsYWdzICYgSU5WRVJUX01JSV9QV1IpCiAJCQluIHw9IDB4NDAwMDsKLQkJaW93cml0ZTE2KG4sIGlvYWRkciArIFduMl9SZXNldE9wdGlvbnMpOworCQl3aW5kb3dfd3JpdGUxNih2cCwgbiwgMiwgV24yX1Jlc2V0T3B0aW9ucyk7CiAJCWlmICh2cC0+ZHJ2X2ZsYWdzICYgV05PX1hDVlJfUFdSKSB7Ci0JCQlFTDNXSU5ET1coMCk7Ci0JCQlpb3dyaXRlMTYoMHgwODAwLCBpb2FkZHIpOworCQkJd2luZG93X3dyaXRlMTYodnAsIDB4MDgwMCwgMCwgMCk7CiAJCX0KIAl9CiAKQEAgLTEzMTMsMTQgKzEzNTgsMTMgQEAKIAl7CiAJCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmFtX3NwbGl0W10gPSB7IjU6MyIsICIzOjEiLCAiMToxIiwgIjM6NSJ9OwogCQl1bnNpZ25lZCBpbnQgY29uZmlnOwotCQlFTDNXSU5ET1coMyk7Ci0JCXZwLT5hdmFpbGFibGVfbWVkaWEgPSBpb3JlYWQxNihpb2FkZHIgKyBXbjNfT3B0aW9ucyk7CisJCXZwLT5hdmFpbGFibGVfbWVkaWEgPSB3aW5kb3dfcmVhZDE2KHZwLCAzLCBXbjNfT3B0aW9ucyk7CiAJCWlmICgodnAtPmF2YWlsYWJsZV9tZWRpYSAmIDB4ZmYpID09IDApCQkvKiBCcm9rZW4gM2M5MTYgKi8KIAkJCXZwLT5hdmFpbGFibGVfbWVkaWEgPSAweDQwOwotCQljb25maWcgPSBpb3JlYWQzMihpb2FkZHIgKyBXbjNfQ29uZmlnKTsKKwkJY29uZmlnID0gd2luZG93X3JlYWQzMih2cCwgMywgV24zX0NvbmZpZyk7CiAJCWlmIChwcmludF9pbmZvKSB7CiAJCQlwcl9kZWJ1ZygiICBJbnRlcm5hbCBjb25maWcgcmVnaXN0ZXIgaXMgJTQuNHgsIHRyYW5zY2VpdmVycyAlI3guXG4iLAotCQkJCWNvbmZpZywgaW9yZWFkMTYoaW9hZGRyICsgV24zX09wdGlvbnMpKTsKKwkJCQljb25maWcsIHdpbmRvd19yZWFkMTYodnAsIDMsIFduM19PcHRpb25zKSk7CiAJCQlwcl9pbmZvKCIgICVkSyAlcy13aWRlIFJBTSAlcyBSeDpUeCBzcGxpdCwgJXMlcyBpbnRlcmZhY2UuXG4iLAogCQkJCSAgIDggPDwgUkFNX1NJWkUoY29uZmlnKSwKIAkJCQkgICBSQU1fV0lEVEgoY29uZmlnKSA/ICJ3b3JkIiA6ICJieXRlIiwKQEAgLTEzNDYsMTEgKzEzOTAsMTAgQEAKIAlpZiAoKHZwLT5hdmFpbGFibGVfbWVkaWEgJiAweDQwKSB8fCAodmNpLT5kcnZfZmxhZ3MgJiBIQVNfTldBWSkgfHwKIAkJZGV2LT5pZl9wb3J0ID09IFhDVlJfTUlJIHx8IGRldi0+aWZfcG9ydCA9PSBYQ1ZSX05XQVkpIHsKIAkJaW50IHBoeSwgcGh5X2lkeCA9IDA7Ci0JCUVMM1dJTkRPVyg0KTsKIAkJbWlpX3ByZWFtYmxlX3JlcXVpcmVkKys7CiAJCWlmICh2cC0+ZHJ2X2ZsYWdzICYgRVhUUkFfUFJFQU1CTEUpCiAJCQltaWlfcHJlYW1ibGVfcmVxdWlyZWQrKzsKLQkJbWRpb19zeW5jKGlvYWRkciwgMzIpOworCQltZGlvX3N5bmModnAsIDMyKTsKIAkJbWRpb19yZWFkKGRldiwgMjQsIE1JSV9CTVNSKTsKIAkJZm9yIChwaHkgPSAwOyBwaHkgPCAzMiAmJiBwaHlfaWR4IDwgMTsgcGh5KyspIHsKIAkJCWludCBtaWlfc3RhdHVzLCBwaHl4OwpAQCAtMTQ3OCwxOCArMTUyMSwxNyBAQAogdm9ydGV4X3NldF9kdXBsZXgoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgdm9ydGV4X3ByaXZhdGUgKnZwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHZwLT5pb2FkZHI7CiAKIAlwcl9pbmZvKCIlczogIHNldHRpbmcgJXMtZHVwbGV4LlxuIiwKIAkJZGV2LT5uYW1lLCAodnAtPmZ1bGxfZHVwbGV4KSA/ICJmdWxsIiA6ICJoYWxmIik7CiAKLQlFTDNXSU5ET1coMyk7CiAJLyogU2V0IHRoZSBmdWxsLWR1cGxleCBiaXQuICovCi0JaW93cml0ZTE2KCgodnAtPmluZm8xICYgMHg4MDAwKSB8fCB2cC0+ZnVsbF9kdXBsZXggPyAweDIwIDogMCkgfAotCQkgCSh2cC0+bGFyZ2VfZnJhbWVzID8gMHg0MCA6IDApIHwKLQkJCSgodnAtPmZ1bGxfZHVwbGV4ICYmIHZwLT5mbG93X2N0cmwgJiYgdnAtPnBhcnRuZXJfZmxvd19jdHJsKSA/Ci0JCQkJCTB4MTAwIDogMCksCi0JCQlpb2FkZHIgKyBXbjNfTUFDX0N0cmwpOworCXdpbmRvd193cml0ZTE2KHZwLAorCQkgICAgICAgKCh2cC0+aW5mbzEgJiAweDgwMDApIHx8IHZwLT5mdWxsX2R1cGxleCA/IDB4MjAgOiAwKSB8CisJCSAgICAgICAodnAtPmxhcmdlX2ZyYW1lcyA/IDB4NDAgOiAwKSB8CisJCSAgICAgICAoKHZwLT5mdWxsX2R1cGxleCAmJiB2cC0+Zmxvd19jdHJsICYmIHZwLT5wYXJ0bmVyX2Zsb3dfY3RybCkgPworCQkJMHgxMDAgOiAwKSwKKwkJICAgICAgIDMsIFduM19NQUNfQ3RybCk7CiB9CiAKIHN0YXRpYyB2b2lkIHZvcnRleF9jaGVja19tZWRpYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaW5pdCkKQEAgLTE1MjksOCArMTU3MSw3IEBACiAJfQogCiAJLyogQmVmb3JlIGluaXRpYWxpemluZyBzZWxlY3QgdGhlIGFjdGl2ZSBtZWRpYSBwb3J0LiAqLwotCUVMM1dJTkRPVygzKTsKLQljb25maWcgPSBpb3JlYWQzMihpb2FkZHIgKyBXbjNfQ29uZmlnKTsKKwljb25maWcgPSB3aW5kb3dfcmVhZDMyKHZwLCAzLCBXbjNfQ29uZmlnKTsKIAogCWlmICh2cC0+bWVkaWFfb3ZlcnJpZGUgIT0gNykgewogCQlwcl9pbmZvKCIlczogTWVkaWEgb3ZlcnJpZGUgdG8gdHJhbnNjZWl2ZXIgJWQgKCVzKS5cbiIsCkBAIC0xNTc3LDEwICsxNjE4LDkgQEAKIAljb25maWcgPSBCRklOUyhjb25maWcsIGRldi0+aWZfcG9ydCwgMjAsIDQpOwogCWlmICh2b3J0ZXhfZGVidWcgPiA2KQogCQlwcl9kZWJ1Zygidm9ydGV4X3VwKCk6IHdyaXRpbmcgMHgleCB0byBJbnRlcm5hbENvbmZpZ1xuIiwgY29uZmlnKTsKLQlpb3dyaXRlMzIoY29uZmlnLCBpb2FkZHIgKyBXbjNfQ29uZmlnKTsKKwl3aW5kb3dfd3JpdGUzMih2cCwgY29uZmlnLCAzLCBXbjNfQ29uZmlnKTsKIAogCWlmIChkZXYtPmlmX3BvcnQgPT0gWENWUl9NSUkgfHwgZGV2LT5pZl9wb3J0ID09IFhDVlJfTldBWSkgewotCQlFTDNXSU5ET1coNCk7CiAJCW1paV9yZWcxID0gbWRpb19yZWFkKGRldiwgdnAtPnBoeXNbMF0sIE1JSV9CTVNSKTsKIAkJbWlpX3JlZzUgPSBtZGlvX3JlYWQoZGV2LCB2cC0+cGh5c1swXSwgTUlJX0xQQSk7CiAJCXZwLT5wYXJ0bmVyX2Zsb3dfY3RybCA9ICgobWlpX3JlZzUgJiAweDA0MDApICE9IDApOwpAQCAtMTYwMSw1MSArMTY0MSw0NiBAQAogCWlvd3JpdGUxNihTZXRTdGF0dXNFbmIgfCAweDAwLCBpb2FkZHIgKyBFTDNfQ01EKTsKIAogCWlmICh2b3J0ZXhfZGVidWcgPiAxKSB7Ci0JCUVMM1dJTkRPVyg0KTsKIAkJcHJfZGVidWcoIiVzOiB2b3J0ZXhfdXAoKSBpcnEgJWQgbWVkaWEgc3RhdHVzICU0LjR4LlxuIiwKLQkJCSAgIGRldi0+bmFtZSwgZGV2LT5pcnEsIGlvcmVhZDE2KGlvYWRkciArIFduNF9NZWRpYSkpOworCQkJICAgZGV2LT5uYW1lLCBkZXYtPmlycSwgd2luZG93X3JlYWQxNih2cCwgNCwgV240X01lZGlhKSk7CiAJfQogCiAJLyogU2V0IHRoZSBzdGF0aW9uIGFkZHJlc3MgYW5kIG1hc2sgaW4gd2luZG93IDIgZWFjaCB0aW1lIG9wZW5lZC4gKi8KLQlFTDNXSU5ET1coMik7CiAJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLQkJaW93cml0ZTgoZGV2LT5kZXZfYWRkcltpXSwgaW9hZGRyICsgaSk7CisJCXdpbmRvd193cml0ZTgodnAsIGRldi0+ZGV2X2FkZHJbaV0sIDIsIGkpOwogCWZvciAoOyBpIDwgMTI7IGkrPTIpCi0JCWlvd3JpdGUxNigwLCBpb2FkZHIgKyBpKTsKKwkJd2luZG93X3dyaXRlMTYodnAsIDAsIDIsIGkpOwogCiAJaWYgKHZwLT5jYl9mbl9iYXNlKSB7Ci0JCXVuc2lnbmVkIHNob3J0IG4gPSBpb3JlYWQxNihpb2FkZHIgKyBXbjJfUmVzZXRPcHRpb25zKSAmIH4weDQwMTA7CisJCXVuc2lnbmVkIHNob3J0IG4gPSB3aW5kb3dfcmVhZDE2KHZwLCAyLCBXbjJfUmVzZXRPcHRpb25zKSAmIH4weDQwMTA7CiAJCWlmICh2cC0+ZHJ2X2ZsYWdzICYgSU5WRVJUX0xFRF9QV1IpCiAJCQluIHw9IDB4MTA7CiAJCWlmICh2cC0+ZHJ2X2ZsYWdzICYgSU5WRVJUX01JSV9QV1IpCiAJCQluIHw9IDB4NDAwMDsKLQkJaW93cml0ZTE2KG4sIGlvYWRkciArIFduMl9SZXNldE9wdGlvbnMpOworCQl3aW5kb3dfd3JpdGUxNih2cCwgbiwgMiwgV24yX1Jlc2V0T3B0aW9ucyk7CiAJfQogCiAJaWYgKGRldi0+aWZfcG9ydCA9PSBYQ1ZSXzEwYmFzZTIpCiAJCS8qIFN0YXJ0IHRoZSB0aGlubmV0IHRyYW5zY2VpdmVyLiBXZSBzaG91bGQgcmVhbGx5IHdhaXQgNTBtcy4uLiovCiAJCWlvd3JpdGUxNihTdGFydENvYXgsIGlvYWRkciArIEVMM19DTUQpOwogCWlmIChkZXYtPmlmX3BvcnQgIT0gWENWUl9OV0FZKSB7Ci0JCUVMM1dJTkRPVyg0KTsKLQkJaW93cml0ZTE2KChpb3JlYWQxNihpb2FkZHIgKyBXbjRfTWVkaWEpICYgfihNZWRpYV8xMFRQfE1lZGlhX1NRRSkpIHwKLQkJCSBtZWRpYV90YmxbZGV2LT5pZl9wb3J0XS5tZWRpYV9iaXRzLCBpb2FkZHIgKyBXbjRfTWVkaWEpOworCQl3aW5kb3dfd3JpdGUxNih2cCwKKwkJCSAgICAgICAod2luZG93X3JlYWQxNih2cCwgNCwgV240X01lZGlhKSAmCisJCQkJfihNZWRpYV8xMFRQfE1lZGlhX1NRRSkpIHwKKwkJCSAgICAgICBtZWRpYV90YmxbZGV2LT5pZl9wb3J0XS5tZWRpYV9iaXRzLAorCQkJICAgICAgIDQsIFduNF9NZWRpYSk7CiAJfQogCiAJLyogU3dpdGNoIHRvIHRoZSBzdGF0cyB3aW5kb3csIGFuZCBjbGVhciBhbGwgc3RhdHMgYnkgcmVhZGluZy4gKi8KIAlpb3dyaXRlMTYoU3RhdHNEaXNhYmxlLCBpb2FkZHIgKyBFTDNfQ01EKTsKLQlFTDNXSU5ET1coNik7CiAJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCi0JCWlvcmVhZDgoaW9hZGRyICsgaSk7Ci0JaW9yZWFkMTYoaW9hZGRyICsgMTApOwotCWlvcmVhZDE2KGlvYWRkciArIDEyKTsKKwkJd2luZG93X3JlYWQ4KHZwLCA2LCBpKTsKKwl3aW5kb3dfcmVhZDE2KHZwLCA2LCAxMCk7CisJd2luZG93X3JlYWQxNih2cCwgNiwgMTIpOwogCS8qIE5ldzogT24gdGhlIFZvcnRleCB3ZSBtdXN0IGFsc28gY2xlYXIgdGhlIEJhZFNTRCBjb3VudGVyLiAqLwotCUVMM1dJTkRPVyg0KTsKLQlpb3JlYWQ4KGlvYWRkciArIDEyKTsKKwl3aW5kb3dfcmVhZDgodnAsIDQsIDEyKTsKIAkvKiAuLmFuZCBvbiB0aGUgQm9vbWVyYW5nIHdlIGVuYWJsZSB0aGUgZXh0cmEgc3RhdGlzdGljcyBiaXRzLiAqLwotCWlvd3JpdGUxNigweDAwNDAsIGlvYWRkciArIFduNF9OZXREaWFnKTsKLQotCS8qIFN3aXRjaCB0byByZWdpc3RlciBzZXQgNyBmb3Igbm9ybWFsIHVzZS4gKi8KLQlFTDNXSU5ET1coNyk7CisJd2luZG93X3dyaXRlMTYodnAsIDB4MDA0MCwgNCwgV240X05ldERpYWcpOwogCiAJaWYgKHZwLT5mdWxsX2J1c19tYXN0ZXJfcngpIHsgLyogQm9vbWVyYW5nIGJ1cyBtYXN0ZXIuICovCiAJCXZwLT5jdXJfcnggPSB2cC0+ZGlydHlfcnggPSAwOwpAQCAtMTc2Myw3ICsxNzk4LDcgQEAKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHZwLT5pb2FkZHI7CiAJaW50IG5leHRfdGljayA9IDYwKkhaOwogCWludCBvayA9IDA7Ci0JaW50IG1lZGlhX3N0YXR1cywgb2xkX3dpbmRvdzsKKwlpbnQgbWVkaWFfc3RhdHVzOwogCiAJaWYgKHZvcnRleF9kZWJ1ZyA+IDIpIHsKIAkJcHJfZGVidWcoIiVzOiBNZWRpYSBzZWxlY3Rpb24gdGltZXIgdGljayBoYXBwZW5lZCwgJXMuXG4iLApAQCAtMTc3MSwxMCArMTgwNiw3IEBACiAJCXByX2RlYnVnKCJkZXYtPndhdGNoZG9nX3RpbWVvPSVkXG4iLCBkZXYtPndhdGNoZG9nX3RpbWVvKTsKIAl9CiAKLQlkaXNhYmxlX2lycV9sb2NrZGVwKGRldi0+aXJxKTsKLQlvbGRfd2luZG93ID0gaW9yZWFkMTYoaW9hZGRyICsgRUwzX0NNRCkgPj4gMTM7Ci0JRUwzV0lORE9XKDQpOwotCW1lZGlhX3N0YXR1cyA9IGlvcmVhZDE2KGlvYWRkciArIFduNF9NZWRpYSk7CisJbWVkaWFfc3RhdHVzID0gd2luZG93X3JlYWQxNih2cCwgNCwgV240X01lZGlhKTsKIAlzd2l0Y2ggKGRldi0+aWZfcG9ydCkgewogCWNhc2UgWENWUl8xMGJhc2VUOiAgY2FzZSBYQ1ZSXzEwMGJhc2VUeDogIGNhc2UgWENWUl8xMDBiYXNlRng6CiAJCWlmIChtZWRpYV9zdGF0dXMgJiBNZWRpYV9MbmtCZWF0KSB7CkBAIC0xNzk0LDEwICsxODI2LDcgQEAKIAljYXNlIFhDVlJfTUlJOiBjYXNlIFhDVlJfTldBWToKIAkJewogCQkJb2sgPSAxOwotCQkJLyogSW50ZXJydXB0cyBhcmUgYWxyZWFkeSBkaXNhYmxlZCAqLwotCQkJc3Bpbl9sb2NrKCZ2cC0+bG9jayk7CiAJCQl2b3J0ZXhfY2hlY2tfbWVkaWEoZGV2LCAwKTsKLQkJCXNwaW5fdW5sb2NrKCZ2cC0+bG9jayk7CiAJCX0KIAkJYnJlYWs7CiAJICBkZWZhdWx0OgkJCQkJLyogT3RoZXIgbWVkaWEgdHlwZXMgaGFuZGxlZCBieSBUeCB0aW1lb3V0cy4gKi8KQEAgLTE4MTYsNiArMTg0NSw4IEBACiAJaWYgKCFvaykgewogCQl1bnNpZ25lZCBpbnQgY29uZmlnOwogCisJCXNwaW5fbG9ja19pcnEoJnZwLT5sb2NrKTsKKwogCQlkbyB7CiAJCQlkZXYtPmlmX3BvcnQgPSBtZWRpYV90YmxbZGV2LT5pZl9wb3J0XS5uZXh0OwogCQl9IHdoaWxlICggISAodnAtPmF2YWlsYWJsZV9tZWRpYSAmIG1lZGlhX3RibFtkZXYtPmlmX3BvcnRdLm1hc2spKTsKQEAgLTE4MzAsMTkgKzE4NjEsMjIgQEAKIAkJCQkJICAgZGV2LT5uYW1lLCBtZWRpYV90YmxbZGV2LT5pZl9wb3J0XS5uYW1lKTsKIAkJCW5leHRfdGljayA9IG1lZGlhX3RibFtkZXYtPmlmX3BvcnRdLndhaXQ7CiAJCX0KLQkJaW93cml0ZTE2KChtZWRpYV9zdGF0dXMgJiB+KE1lZGlhXzEwVFB8TWVkaWFfU1FFKSkgfAotCQkJIG1lZGlhX3RibFtkZXYtPmlmX3BvcnRdLm1lZGlhX2JpdHMsIGlvYWRkciArIFduNF9NZWRpYSk7CisJCXdpbmRvd193cml0ZTE2KHZwLAorCQkJICAgICAgIChtZWRpYV9zdGF0dXMgJiB+KE1lZGlhXzEwVFB8TWVkaWFfU1FFKSkgfAorCQkJICAgICAgIG1lZGlhX3RibFtkZXYtPmlmX3BvcnRdLm1lZGlhX2JpdHMsCisJCQkgICAgICAgNCwgV240X01lZGlhKTsKIAotCQlFTDNXSU5ET1coMyk7Ci0JCWNvbmZpZyA9IGlvcmVhZDMyKGlvYWRkciArIFduM19Db25maWcpOworCQljb25maWcgPSB3aW5kb3dfcmVhZDMyKHZwLCAzLCBXbjNfQ29uZmlnKTsKIAkJY29uZmlnID0gQkZJTlMoY29uZmlnLCBkZXYtPmlmX3BvcnQsIDIwLCA0KTsKLQkJaW93cml0ZTMyKGNvbmZpZywgaW9hZGRyICsgV24zX0NvbmZpZyk7CisJCXdpbmRvd193cml0ZTMyKHZwLCBjb25maWcsIDMsIFduM19Db25maWcpOwogCiAJCWlvd3JpdGUxNihkZXYtPmlmX3BvcnQgPT0gWENWUl8xMGJhc2UyID8gU3RhcnRDb2F4IDogU3RvcENvYXgsCiAJCQkgaW9hZGRyICsgRUwzX0NNRCk7CiAJCWlmICh2b3J0ZXhfZGVidWcgPiAxKQogCQkJcHJfZGVidWcoIndyb3RlIDB4JTA4eCB0byBXbjNfQ29uZmlnXG4iLCBjb25maWcpOwogCQkvKiBBS1BNOiBGSVhNRTogU2hvdWxkIHJlc2V0IFJ4ICYgVHggaGVyZS4gIFA2MCBvZiAzYzkweGMucGRmICovCisKKwkJc3Bpbl91bmxvY2tfaXJxKCZ2cC0+bG9jayk7CiAJfQogCiBsZWF2ZV9tZWRpYV9hbG9uZToKQEAgLTE4NTAsOCArMTg4NCw2IEBACiAJICBwcl9kZWJ1ZygiJXM6IE1lZGlhIHNlbGVjdGlvbiB0aW1lciBmaW5pc2hlZCwgJXMuXG4iLAogCQkJIGRldi0+bmFtZSwgbWVkaWFfdGJsW2Rldi0+aWZfcG9ydF0ubmFtZSk7CiAKLQlFTDNXSU5ET1cob2xkX3dpbmRvdyk7Ci0JZW5hYmxlX2lycV9sb2NrZGVwKGRldi0+aXJxKTsKIAltb2RfdGltZXIoJnZwLT50aW1lciwgUlVOX0FUKG5leHRfdGljaykpOwogCWlmICh2cC0+ZGVmZXJyZWQpCiAJCWlvd3JpdGUxNihGYWtlSW50ciwgaW9hZGRyICsgRUwzX0NNRCk7CkBAIC0xODY1LDEyICsxODk3LDExIEBACiAJcHJfZXJyKCIlczogdHJhbnNtaXQgdGltZWQgb3V0LCB0eF9zdGF0dXMgJTIuMnggc3RhdHVzICU0LjR4LlxuIiwKIAkJICAgZGV2LT5uYW1lLCBpb3JlYWQ4KGlvYWRkciArIFR4U3RhdHVzKSwKIAkJICAgaW9yZWFkMTYoaW9hZGRyICsgRUwzX1NUQVRVUykpOwotCUVMM1dJTkRPVyg0KTsKIAlwcl9lcnIoIiAgZGlhZ25vc3RpY3M6IG5ldCAlMDR4IG1lZGlhICUwNHggZG1hICUwOHggZmlmbyAlMDR4XG4iLAotCQkJaW9yZWFkMTYoaW9hZGRyICsgV240X05ldERpYWcpLAotCQkJaW9yZWFkMTYoaW9hZGRyICsgV240X01lZGlhKSwKKwkJCXdpbmRvd19yZWFkMTYodnAsIDQsIFduNF9OZXREaWFnKSwKKwkJCXdpbmRvd19yZWFkMTYodnAsIDQsIFduNF9NZWRpYSksCiAJCQlpb3JlYWQzMihpb2FkZHIgKyBQa3RTdGF0dXMpLAotCQkJaW9yZWFkMTYoaW9hZGRyICsgV240X0ZJRk9EaWFnKSk7CisJCQl3aW5kb3dfcmVhZDE2KHZwLCA0LCBXbjRfRklGT0RpYWcpKTsKIAkvKiBTbGlnaHQgY29kZSBibG9hdCB0byBiZSB1c2VyIGZyaWVuZGx5LiAqLwogCWlmICgoaW9yZWFkOChpb2FkZHIgKyBUeFN0YXR1cykgJiAweDg4KSA9PSAweDg4KQogCQlwcl9lcnIoIiVzOiBUcmFuc21pdHRlciBlbmNvdW50ZXJlZCAxNiBjb2xsaXNpb25zIC0tIgpAQCAtMTkxNyw5ICsxOTQ4LDYgQEAKIAkvKiBJc3N1ZSBUeCBFbmFibGUgKi8KIAlpb3dyaXRlMTYoVHhFbmFibGUsIGlvYWRkciArIEVMM19DTUQpOwogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOyAvKiBwcmV2ZW50IHR4IHRpbWVvdXQgKi8KLQotCS8qIFN3aXRjaCB0byByZWdpc3RlciBzZXQgNyBmb3Igbm9ybWFsIHVzZS4gKi8KLQlFTDNXSU5ET1coNyk7CiB9CiAKIC8qCkBAIC0xOTgwLDEwICsyMDA4LDEwIEBACiAJCQlpb3JlYWQxNihpb2FkZHIgKyBFTDNfU1RBVFVTKSAmIFN0YXRzRnVsbCkgewogCQkJcHJfd2FybmluZygiJXM6IFVwZGF0aW5nIHN0YXRpc3RpY3MgZmFpbGVkLCBkaXNhYmxpbmcgIgogCQkJCSAgICJzdGF0cyBhcyBhbiBpbnRlcnJ1cHQgc291cmNlLlxuIiwgZGV2LT5uYW1lKTsKLQkJCUVMM1dJTkRPVyg1KTsKLQkJCWlvd3JpdGUxNihTZXRJbnRyRW5iIHwgKGlvcmVhZDE2KGlvYWRkciArIDEwKSAmIH5TdGF0c0Z1bGwpLCBpb2FkZHIgKyBFTDNfQ01EKTsKKwkJCWlvd3JpdGUxNihTZXRJbnRyRW5iIHwKKwkJCQkgICh3aW5kb3dfcmVhZDE2KHZwLCA1LCAxMCkgJiB+U3RhdHNGdWxsKSwKKwkJCQkgIGlvYWRkciArIEVMM19DTUQpOwogCQkJdnAtPmludHJfZW5hYmxlICY9IH5TdGF0c0Z1bGw7Ci0JCQlFTDNXSU5ET1coNyk7CiAJCQlEb25lRGlkVGhhdCsrOwogCQl9CiAJfQpAQCAtMTk5Myw4ICsyMDIxLDcgQEAKIAl9CiAJaWYgKHN0YXR1cyAmIEhvc3RFcnJvcikgewogCQl1MTYgZmlmb19kaWFnOwotCQlFTDNXSU5ET1coNCk7Ci0JCWZpZm9fZGlhZyA9IGlvcmVhZDE2KGlvYWRkciArIFduNF9GSUZPRGlhZyk7CisJCWZpZm9fZGlhZyA9IHdpbmRvd19yZWFkMTYodnAsIDQsIFduNF9GSUZPRGlhZyk7CiAJCXByX2VycigiJXM6IEhvc3QgZXJyb3IsIEZJRk8gZGlhZ25vc3RpYyByZWdpc3RlciAlNC40eC5cbiIsCiAJCQkgICBkZXYtPm5hbWUsIGZpZm9fZGlhZyk7CiAJCS8qIEFkYXB0ZXIgZmFpbHVyZSByZXF1aXJlcyBUeC9SeCByZXNldCBhbmQgcmVpbml0LiAqLwpAQCAtMjA0Myw5ICsyMDcwLDEzIEBACiAJaWYgKHZwLT5idXNfbWFzdGVyKSB7CiAJCS8qIFNldCB0aGUgYnVzLW1hc3RlciBjb250cm9sbGVyIHRvIHRyYW5zZmVyIHRoZSBwYWNrZXQuICovCiAJCWludCBsZW4gPSAoc2tiLT5sZW4gKyAzKSAmIH4zOwotCQlpb3dyaXRlMzIodnAtPnR4X3NrYl9kbWEgPSBwY2lfbWFwX3NpbmdsZShWT1JURVhfUENJKHZwKSwgc2tiLT5kYXRhLCBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpLAotCQkJCWlvYWRkciArIFduN19NYXN0ZXJBZGRyKTsKKwkJdnAtPnR4X3NrYl9kbWEgPSBwY2lfbWFwX3NpbmdsZShWT1JURVhfUENJKHZwKSwgc2tiLT5kYXRhLCBsZW4sCisJCQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKwkJc3Bpbl9sb2NrX2lycSgmdnAtPndpbmRvd19sb2NrKTsKKwkJd2luZG93X3NldCh2cCwgNyk7CisJCWlvd3JpdGUzMih2cC0+dHhfc2tiX2RtYSwgaW9hZGRyICsgV243X01hc3RlckFkZHIpOwogCQlpb3dyaXRlMTYobGVuLCBpb2FkZHIgKyBXbjdfTWFzdGVyTGVuKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZ2cC0+d2luZG93X2xvY2spOwogCQl2cC0+dHhfc2tiID0gc2tiOwogCQlpb3dyaXRlMTYoU3RhcnRETUFEb3duLCBpb2FkZHIgKyBFTDNfQ01EKTsKIAkJLyogbmV0aWZfd2FrZV9xdWV1ZSgpIHdpbGwgYmUgY2FsbGVkIGF0IHRoZSBETUFEb25lIGludGVycnVwdC4gKi8KQEAgLTIyMTcsNiArMjI0OCw5IEBACiAJCXByX2RlYnVnKCIlczogaW50ZXJydXB0LCBzdGF0dXMgJTQuNHgsIGxhdGVuY3kgJWQgdGlja3MuXG4iLAogCQkJICAgZGV2LT5uYW1lLCBzdGF0dXMsIGlvcmVhZDgoaW9hZGRyICsgVGltZXIpKTsKIAorCXNwaW5fbG9jaygmdnAtPndpbmRvd19sb2NrKTsKKwl3aW5kb3dfc2V0KHZwLCA3KTsKKwogCWRvIHsKIAkJaWYgKHZvcnRleF9kZWJ1ZyA+IDUpCiAJCQkJcHJfZGVidWcoIiVzOiBJbiBpbnRlcnJ1cHQgbG9vcCwgc3RhdHVzICU0LjR4LlxuIiwKQEAgLTIyNzUsNiArMjMwOSw4IEBACiAJCWlvd3JpdGUxNihBY2tJbnRyIHwgSW50UmVxIHwgSW50TGF0Y2gsIGlvYWRkciArIEVMM19DTUQpOwogCX0gd2hpbGUgKChzdGF0dXMgPSBpb3JlYWQxNihpb2FkZHIgKyBFTDNfU1RBVFVTKSkgJiAoSW50TGF0Y2ggfCBSeENvbXBsZXRlKSk7CiAKKwlzcGluX3VubG9jaygmdnAtPndpbmRvd19sb2NrKTsKKwogCWlmICh2b3J0ZXhfZGVidWcgPiA0KQogCQlwcl9kZWJ1ZygiJXM6IGV4aXRpbmcgaW50ZXJydXB0LCBzdGF0dXMgJTQuNHguXG4iLAogCQkJICAgZGV2LT5uYW1lLCBzdGF0dXMpOwpAQCAtMjc2MCw4NSArMjc5Niw1OCBAQAogc3RhdGljIHZvaWQgdXBkYXRlX3N0YXRzKHZvaWQgX19pb21lbSAqaW9hZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB2b3J0ZXhfcHJpdmF0ZSAqdnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBvbGRfd2luZG93ID0gaW9yZWFkMTYoaW9hZGRyICsgRUwzX0NNRCk7CiAKLQlpZiAob2xkX3dpbmRvdyA9PSAweGZmZmYpCS8qIENoaXAgc3VzcGVuZGVkIG9yIGVqZWN0ZWQuICovCi0JCXJldHVybjsKIAkvKiBVbmxpa2UgdGhlIDNjNXg5IHdlIG5lZWQgbm90IHR1cm4gb2ZmIHN0YXRzIHVwZGF0ZXMgd2hpbGUgcmVhZGluZy4gKi8KIAkvKiBTd2l0Y2ggdG8gdGhlIHN0YXRzIHdpbmRvdywgYW5kIHJlYWQgZXZlcnl0aGluZy4gKi8KLQlFTDNXSU5ET1coNik7Ci0JZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycwkJKz0gaW9yZWFkOChpb2FkZHIgKyAwKTsKLQlkZXYtPnN0YXRzLnR4X2hlYXJ0YmVhdF9lcnJvcnMJCSs9IGlvcmVhZDgoaW9hZGRyICsgMSk7Ci0JZGV2LT5zdGF0cy50eF93aW5kb3dfZXJyb3JzCQkrPSBpb3JlYWQ4KGlvYWRkciArIDQpOwotCWRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMJCSs9IGlvcmVhZDgoaW9hZGRyICsgNSk7Ci0JZGV2LT5zdGF0cy50eF9wYWNrZXRzCQkJKz0gaW9yZWFkOChpb2FkZHIgKyA2KTsKLQlkZXYtPnN0YXRzLnR4X3BhY2tldHMJCQkrPSAoaW9yZWFkOChpb2FkZHIgKyA5KSYweDMwKSA8PCA0OwotCS8qIFJ4IHBhY2tldHMJKi8JCQlpb3JlYWQ4KGlvYWRkciArIDcpOyAgIC8qIE11c3QgcmVhZCB0byBjbGVhciAqLworCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMJCSs9IHdpbmRvd19yZWFkOCh2cCwgNiwgMCk7CisJZGV2LT5zdGF0cy50eF9oZWFydGJlYXRfZXJyb3JzCQkrPSB3aW5kb3dfcmVhZDgodnAsIDYsIDEpOworCWRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycwkJKz0gd2luZG93X3JlYWQ4KHZwLCA2LCA0KTsKKwlkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzCQkrPSB3aW5kb3dfcmVhZDgodnAsIDYsIDUpOworCWRldi0+c3RhdHMudHhfcGFja2V0cwkJCSs9IHdpbmRvd19yZWFkOCh2cCwgNiwgNik7CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzCQkJKz0gKHdpbmRvd19yZWFkOCh2cCwgNiwgOSkgJgorCQkJCQkJICAgIDB4MzApIDw8IDQ7CisJLyogUnggcGFja2V0cwkqLwkJCXdpbmRvd19yZWFkOCh2cCwgNiwgNyk7ICAgLyogTXVzdCByZWFkIHRvIGNsZWFyICovCiAJLyogRG9uJ3QgYm90aGVyIHdpdGggcmVnaXN0ZXIgOSwgYW4gZXh0ZW5zaW9uIG9mIHJlZ2lzdGVycyA2JjcuCiAJICAgSWYgd2UgZG8gdXNlIHRoZSA2JjcgdmFsdWVzIHRoZSBhdG9taWMgdXBkYXRlIGFzc3VtcHRpb24gYWJvdmUKIAkgICBpcyBpbnZhbGlkLiAqLwotCWRldi0+c3RhdHMucnhfYnl0ZXMgCQkJKz0gaW9yZWFkMTYoaW9hZGRyICsgMTApOwotCWRldi0+c3RhdHMudHhfYnl0ZXMgCQkJKz0gaW9yZWFkMTYoaW9hZGRyICsgMTIpOworCWRldi0+c3RhdHMucnhfYnl0ZXMgCQkJKz0gd2luZG93X3JlYWQxNih2cCwgNiwgMTApOworCWRldi0+c3RhdHMudHhfYnl0ZXMgCQkJKz0gd2luZG93X3JlYWQxNih2cCwgNiwgMTIpOwogCS8qIEV4dHJhIHN0YXRzIGZvciBnZXRfZXRodG9vbF9zdGF0cygpICovCi0JdnAtPnhzdGF0cy50eF9tdWx0aXBsZV9jb2xsaXNpb25zCSs9IGlvcmVhZDgoaW9hZGRyICsgMik7Ci0JdnAtPnhzdGF0cy50eF9zaW5nbGVfY29sbGlzaW9ucyAgICAgICAgICs9IGlvcmVhZDgoaW9hZGRyICsgMyk7Ci0JdnAtPnhzdGF0cy50eF9kZWZlcnJlZAkJCSs9IGlvcmVhZDgoaW9hZGRyICsgOCk7Ci0JRUwzV0lORE9XKDQpOwotCXZwLT54c3RhdHMucnhfYmFkX3NzZAkJCSs9IGlvcmVhZDgoaW9hZGRyICsgMTIpOworCXZwLT54c3RhdHMudHhfbXVsdGlwbGVfY29sbGlzaW9ucwkrPSB3aW5kb3dfcmVhZDgodnAsIDYsIDIpOworCXZwLT54c3RhdHMudHhfc2luZ2xlX2NvbGxpc2lvbnMgICAgICAgICArPSB3aW5kb3dfcmVhZDgodnAsIDYsIDMpOworCXZwLT54c3RhdHMudHhfZGVmZXJyZWQJCQkrPSB3aW5kb3dfcmVhZDgodnAsIDYsIDgpOworCXZwLT54c3RhdHMucnhfYmFkX3NzZAkJCSs9IHdpbmRvd19yZWFkOCh2cCwgNCwgMTIpOwogCiAJZGV2LT5zdGF0cy5jb2xsaXNpb25zID0gdnAtPnhzdGF0cy50eF9tdWx0aXBsZV9jb2xsaXNpb25zCiAJCSsgdnAtPnhzdGF0cy50eF9zaW5nbGVfY29sbGlzaW9ucwogCQkrIHZwLT54c3RhdHMudHhfbWF4X2NvbGxpc2lvbnM7CiAKIAl7Ci0JCXU4IHVwID0gaW9yZWFkOChpb2FkZHIgKyAxMyk7CisJCXU4IHVwID0gd2luZG93X3JlYWQ4KHZwLCA0LCAxMyk7CiAJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gKHVwICYgMHgwZikgPDwgMTY7CiAJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gKHVwICYgMHhmMCkgPDwgMTI7CiAJfQotCi0JRUwzV0lORE9XKG9sZF93aW5kb3cgPj4gMTMpOwogfQogCiBzdGF0aWMgaW50IHZvcnRleF9ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHZvcnRleF9wcml2YXRlICp2cCA9IG5ldGRldl9wcml2KGRldik7Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSB2cC0+aW9hZGRyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJjOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZwLT5sb2NrLCBmbGFncyk7Ci0JRUwzV0lORE9XKDQpOwotCXJjID0gbWlpX253YXlfcmVzdGFydCgmdnAtPm1paSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdnAtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmM7CisJcmV0dXJuIG1paV9ud2F5X3Jlc3RhcnQoJnZwLT5taWkpOwogfQogCiBzdGF0aWMgaW50IHZvcnRleF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7CiAJc3RydWN0IHZvcnRleF9wcml2YXRlICp2cCA9IG5ldGRldl9wcml2KGRldik7Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSB2cC0+aW9hZGRyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJjOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZwLT5sb2NrLCBmbGFncyk7Ci0JRUwzV0lORE9XKDQpOwotCXJjID0gbWlpX2V0aHRvb2xfZ3NldCgmdnAtPm1paSwgY21kKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2cC0+bG9jaywgZmxhZ3MpOwotCXJldHVybiByYzsKKwlyZXR1cm4gbWlpX2V0aHRvb2xfZ3NldCgmdnAtPm1paSwgY21kKTsKIH0KIAogc3RhdGljIGludCB2b3J0ZXhfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewogCXN0cnVjdCB2b3J0ZXhfcHJpdmF0ZSAqdnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdnAtPmlvYWRkcjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByYzsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ2cC0+bG9jaywgZmxhZ3MpOwotCUVMM1dJTkRPVyg0KTsKLQlyYyA9IG1paV9ldGh0b29sX3NzZXQoJnZwLT5taWksIGNtZCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdnAtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmM7CisJcmV0dXJuIG1paV9ldGh0b29sX3NzZXQoJnZwLT5taWksIGNtZCk7CiB9CiAKIHN0YXRpYyB1MzIgdm9ydGV4X2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMjkwOSw2ICsyOTE4LDM2IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCB2b3J0ZXhfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCit7CisJc3RydWN0IHZvcnRleF9wcml2YXRlICp2cCA9IG5ldGRldl9wcml2KGRldik7CisKKwlzcGluX2xvY2tfaXJxKCZ2cC0+bG9jayk7CisJd29sLT5zdXBwb3J0ZWQgPSBXQUtFX01BR0lDOworCisJd29sLT53b2xvcHRzID0gMDsKKwlpZiAodnAtPmVuYWJsZV93b2wpCisJCXdvbC0+d29sb3B0cyB8PSBXQUtFX01BR0lDOworCXNwaW5fdW5sb2NrX2lycSgmdnAtPmxvY2spOworfQorCitzdGF0aWMgaW50IHZvcnRleF9zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlzdHJ1Y3Qgdm9ydGV4X3ByaXZhdGUgKnZwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpZiAod29sLT53b2xvcHRzICYgfldBS0VfTUFHSUMpCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycSgmdnAtPmxvY2spOworCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX01BR0lDKQorCQl2cC0+ZW5hYmxlX3dvbCA9IDE7CisJZWxzZQorCQl2cC0+ZW5hYmxlX3dvbCA9IDA7CisJYWNwaV9zZXRfV09MKGRldik7CisJc3Bpbl91bmxvY2tfaXJxKCZ2cC0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB2b3J0ZXhfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvCQk9IHZvcnRleF9nZXRfZHJ2aW5mbywKIAkuZ2V0X3N0cmluZ3MgICAgICAgICAgICA9IHZvcnRleF9nZXRfc3RyaW5ncywKQEAgLTI5MjAsNiArMjk1OSw4IEBACiAJLnNldF9zZXR0aW5ncyAgICAgICAgICAgPSB2b3J0ZXhfc2V0X3NldHRpbmdzLAogCS5nZXRfbGluayAgICAgICAgICAgICAgID0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkubndheV9yZXNldCAgICAgICAgICAgICA9IHZvcnRleF9ud2F5X3Jlc2V0LAorCS5nZXRfd29sICAgICAgICAgICAgICAgID0gdm9ydGV4X2dldF93b2wsCisJLnNldF93b2wgICAgICAgICAgICAgICAgPSB2b3J0ZXhfc2V0X3dvbCwKIH07CiAKICNpZmRlZiBDT05GSUdfUENJCkBAIC0yOTMwLDcgKzI5NzEsNiBAQAogewogCWludCBlcnI7CiAJc3RydWN0IHZvcnRleF9wcml2YXRlICp2cCA9IG5ldGRldl9wcml2KGRldik7Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSB2cC0+aW9hZGRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJcGNpX3Bvd2VyX3Qgc3RhdGUgPSAwOwogCkBAIC0yOTQyLDcgKzI5ODIsNiBAQAogCWlmKHN0YXRlICE9IDApCiAJCXBjaV9zZXRfcG93ZXJfc3RhdGUoVk9SVEVYX1BDSSh2cCksIFBDSV9EMCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnZwLT5sb2NrLCBmbGFncyk7Ci0JRUwzV0lORE9XKDQpOwogCWVyciA9IGdlbmVyaWNfbWlpX2lvY3RsKCZ2cC0+bWlpLCBpZl9taWkocnEpLCBjbWQsIE5VTEwpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZwLT5sb2NrLCBmbGFncyk7CiAJaWYoc3RhdGUgIT0gMCkKQEAgLTI5ODUsOCArMzAyNCw2IEBACiBzdGF0aWMgdm9pZCBzZXRfODAyMXFfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZW5hYmxlKQogewogCXN0cnVjdCB2b3J0ZXhfcHJpdmF0ZSAqdnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdnAtPmlvYWRkcjsKLQlpbnQgb2xkX3dpbmRvdyA9IGlvcmVhZDE2KGlvYWRkciArIEVMM19DTUQpOwogCWludCBtYWNfY3RybDsKIAogCWlmICgodnAtPmRydl9mbGFncyZJU19DWUNMT05FKSB8fCAodnAtPmRydl9mbGFncyZJU19UT1JOQURPKSkgewpAQCAtMjk5NywyOCArMzAzNCwyMyBAQAogCQlpZiAoZW5hYmxlKQogCQkJbWF4X3BrdF9zaXplICs9IDQ7CS8qIDgwMi4xUSBWTEFOIHRhZyAqLwogCi0JCUVMM1dJTkRPVygzKTsKLQkJaW93cml0ZTE2KG1heF9wa3Rfc2l6ZSwgaW9hZGRyK1duM19NYXhQa3RTaXplKTsKKwkJd2luZG93X3dyaXRlMTYodnAsIG1heF9wa3Rfc2l6ZSwgMywgV24zX01heFBrdFNpemUpOwogCiAJCS8qIHNldCBWbGFuRXRoZXJUeXBlIHRvIGxldCB0aGUgaGFyZHdhcmUgY2hlY2tzdW1taW5nCiAJCSAgIHRyZWF0IHRhZ2dlZCBmcmFtZXMgY29ycmVjdGx5ICovCi0JCUVMM1dJTkRPVyg3KTsKLQkJaW93cml0ZTE2KFZMQU5fRVRIRVJfVFlQRSwgaW9hZGRyK1duN19WbGFuRXRoZXJUeXBlKTsKKwkJd2luZG93X3dyaXRlMTYodnAsIFZMQU5fRVRIRVJfVFlQRSwgNywgV243X1ZsYW5FdGhlclR5cGUpOwogCX0gZWxzZSB7CiAJCS8qIG9uIG9sZGVyIGNhcmRzIHdlIGhhdmUgdG8gZW5hYmxlIGxhcmdlIGZyYW1lcyAqLwogCiAJCXZwLT5sYXJnZV9mcmFtZXMgPSBkZXYtPm10dSA+IDE1MDAgfHwgZW5hYmxlOwogCi0JCUVMM1dJTkRPVygzKTsKLQkJbWFjX2N0cmwgPSBpb3JlYWQxNihpb2FkZHIrV24zX01BQ19DdHJsKTsKKwkJbWFjX2N0cmwgPSB3aW5kb3dfcmVhZDE2KHZwLCAzLCBXbjNfTUFDX0N0cmwpOwogCQlpZiAodnAtPmxhcmdlX2ZyYW1lcykKIAkJCW1hY19jdHJsIHw9IDB4NDA7CiAJCWVsc2UKIAkJCW1hY19jdHJsICY9IH4weDQwOwotCQlpb3dyaXRlMTYobWFjX2N0cmwsIGlvYWRkcitXbjNfTUFDX0N0cmwpOworCQl3aW5kb3dfd3JpdGUxNih2cCwgbWFjX2N0cmwsIDMsIFduM19NQUNfQ3RybCk7CiAJfQotCi0JRUwzV0lORE9XKG9sZF93aW5kb3cpOwogfQogI2Vsc2UKIApAQCAtMzAzNyw3ICszMDY5LDEwIEBACiAvKiBUaGUgbWF4aW11bSBkYXRhIGNsb2NrIHJhdGUgaXMgMi41IE1oei4gIFRoZSBtaW5pbXVtIHRpbWluZyBpcyB1c3VhbGx5CiAgICBtZXQgYnkgYmFjay10by1iYWNrIFBDSSBJL08gY3ljbGVzLCBidXQgd2UgaW5zZXJ0IGEgZGVsYXkgdG8gYXZvaWQKICAgICJvdmVyY2xvY2tpbmciIGlzc3Vlcy4gKi8KLSNkZWZpbmUgbWRpb19kZWxheSgpIGlvcmVhZDMyKG1kaW9fYWRkcikKK3N0YXRpYyB2b2lkIG1kaW9fZGVsYXkoc3RydWN0IHZvcnRleF9wcml2YXRlICp2cCkKK3sKKwl3aW5kb3dfcmVhZDMyKHZwLCA0LCBXbjRfUGh5c2ljYWxNZ210KTsKK30KIAogI2RlZmluZSBNRElPX1NISUZUX0NMSwkweDAxCiAjZGVmaW5lIE1ESU9fRElSX1dSSVRFCTB4MDQKQEAgLTMwNDgsMTYgKzMwODMsMTUgQEAKIAogLyogR2VuZXJhdGUgdGhlIHByZWFtYmxlIHJlcXVpcmVkIGZvciBpbml0aWFsIHN5bmNocm9uaXphdGlvbiBhbmQKICAgIGEgZmV3IG9sZGVyIHRyYW5zY2VpdmVycy4gKi8KLXN0YXRpYyB2b2lkIG1kaW9fc3luYyh2b2lkIF9faW9tZW0gKmlvYWRkciwgaW50IGJpdHMpCitzdGF0aWMgdm9pZCBtZGlvX3N5bmMoc3RydWN0IHZvcnRleF9wcml2YXRlICp2cCwgaW50IGJpdHMpCiB7Ci0Jdm9pZCBfX2lvbWVtICptZGlvX2FkZHIgPSBpb2FkZHIgKyBXbjRfUGh5c2ljYWxNZ210OwotCiAJLyogRXN0YWJsaXNoIHN5bmMgYnkgc2VuZGluZyBhdCBsZWFzdCAzMiBsb2dpYyBvbmVzLiAqLwogCXdoaWxlICgtLSBiaXRzID49IDApIHsKLQkJaW93cml0ZTE2KE1ESU9fREFUQV9XUklURTEsIG1kaW9fYWRkcik7Ci0JCW1kaW9fZGVsYXkoKTsKLQkJaW93cml0ZTE2KE1ESU9fREFUQV9XUklURTEgfCBNRElPX1NISUZUX0NMSywgbWRpb19hZGRyKTsKLQkJbWRpb19kZWxheSgpOworCQl3aW5kb3dfd3JpdGUxNih2cCwgTURJT19EQVRBX1dSSVRFMSwgNCwgV240X1BoeXNpY2FsTWdtdCk7CisJCW1kaW9fZGVsYXkodnApOworCQl3aW5kb3dfd3JpdGUxNih2cCwgTURJT19EQVRBX1dSSVRFMSB8IE1ESU9fU0hJRlRfQ0xLLAorCQkJICAgICAgIDQsIFduNF9QaHlzaWNhbE1nbXQpOworCQltZGlvX2RlbGF5KHZwKTsKIAl9CiB9CiAKQEAgLTMwNjUsNTkgKzMwOTksNzAgQEAKIHsKIAlpbnQgaTsKIAlzdHJ1Y3Qgdm9ydGV4X3ByaXZhdGUgKnZwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHZwLT5pb2FkZHI7CiAJaW50IHJlYWRfY21kID0gKDB4ZjYgPDwgMTApIHwgKHBoeV9pZCA8PCA1KSB8IGxvY2F0aW9uOwogCXVuc2lnbmVkIGludCByZXR2YWwgPSAwOwotCXZvaWQgX19pb21lbSAqbWRpb19hZGRyID0gaW9hZGRyICsgV240X1BoeXNpY2FsTWdtdDsKKworCXNwaW5fbG9ja19iaCgmdnAtPm1paV9sb2NrKTsKIAogCWlmIChtaWlfcHJlYW1ibGVfcmVxdWlyZWQpCi0JCW1kaW9fc3luYyhpb2FkZHIsIDMyKTsKKwkJbWRpb19zeW5jKHZwLCAzMik7CiAKIAkvKiBTaGlmdCB0aGUgcmVhZCBjb21tYW5kIGJpdHMgb3V0LiAqLwogCWZvciAoaSA9IDE0OyBpID49IDA7IGktLSkgewogCQlpbnQgZGF0YXZhbCA9IChyZWFkX2NtZCYoMTw8aSkpID8gTURJT19EQVRBX1dSSVRFMSA6IE1ESU9fREFUQV9XUklURTA7Ci0JCWlvd3JpdGUxNihkYXRhdmFsLCBtZGlvX2FkZHIpOwotCQltZGlvX2RlbGF5KCk7Ci0JCWlvd3JpdGUxNihkYXRhdmFsIHwgTURJT19TSElGVF9DTEssIG1kaW9fYWRkcik7Ci0JCW1kaW9fZGVsYXkoKTsKKwkJd2luZG93X3dyaXRlMTYodnAsIGRhdGF2YWwsIDQsIFduNF9QaHlzaWNhbE1nbXQpOworCQltZGlvX2RlbGF5KHZwKTsKKwkJd2luZG93X3dyaXRlMTYodnAsIGRhdGF2YWwgfCBNRElPX1NISUZUX0NMSywKKwkJCSAgICAgICA0LCBXbjRfUGh5c2ljYWxNZ210KTsKKwkJbWRpb19kZWxheSh2cCk7CiAJfQogCS8qIFJlYWQgdGhlIHR3byB0cmFuc2l0aW9uLCAxNiBkYXRhLCBhbmQgd2lyZS1pZGxlIGJpdHMuICovCiAJZm9yIChpID0gMTk7IGkgPiAwOyBpLS0pIHsKLQkJaW93cml0ZTE2KE1ESU9fRU5CX0lOLCBtZGlvX2FkZHIpOwotCQltZGlvX2RlbGF5KCk7Ci0JCXJldHZhbCA9IChyZXR2YWwgPDwgMSkgfCAoKGlvcmVhZDE2KG1kaW9fYWRkcikgJiBNRElPX0RBVEFfUkVBRCkgPyAxIDogMCk7Ci0JCWlvd3JpdGUxNihNRElPX0VOQl9JTiB8IE1ESU9fU0hJRlRfQ0xLLCBtZGlvX2FkZHIpOwotCQltZGlvX2RlbGF5KCk7CisJCXdpbmRvd193cml0ZTE2KHZwLCBNRElPX0VOQl9JTiwgNCwgV240X1BoeXNpY2FsTWdtdCk7CisJCW1kaW9fZGVsYXkodnApOworCQlyZXR2YWwgPSAocmV0dmFsIDw8IDEpIHwKKwkJCSgod2luZG93X3JlYWQxNih2cCwgNCwgV240X1BoeXNpY2FsTWdtdCkgJgorCQkJICBNRElPX0RBVEFfUkVBRCkgPyAxIDogMCk7CisJCXdpbmRvd193cml0ZTE2KHZwLCBNRElPX0VOQl9JTiB8IE1ESU9fU0hJRlRfQ0xLLAorCQkJICAgICAgIDQsIFduNF9QaHlzaWNhbE1nbXQpOworCQltZGlvX2RlbGF5KHZwKTsKIAl9CisKKwlzcGluX3VubG9ja19iaCgmdnAtPm1paV9sb2NrKTsKKwogCXJldHVybiByZXR2YWwgJiAweDIwMDAwID8gMHhmZmZmIDogcmV0dmFsPj4xICYgMHhmZmZmOwogfQogCiBzdGF0aWMgdm9pZCBtZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbiwgaW50IHZhbHVlKQogewogCXN0cnVjdCB2b3J0ZXhfcHJpdmF0ZSAqdnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdnAtPmlvYWRkcjsKIAlpbnQgd3JpdGVfY21kID0gMHg1MDAyMDAwMCB8IChwaHlfaWQgPDwgMjMpIHwgKGxvY2F0aW9uIDw8IDE4KSB8IHZhbHVlOwotCXZvaWQgX19pb21lbSAqbWRpb19hZGRyID0gaW9hZGRyICsgV240X1BoeXNpY2FsTWdtdDsKIAlpbnQgaTsKIAorCXNwaW5fbG9ja19iaCgmdnAtPm1paV9sb2NrKTsKKwogCWlmIChtaWlfcHJlYW1ibGVfcmVxdWlyZWQpCi0JCW1kaW9fc3luYyhpb2FkZHIsIDMyKTsKKwkJbWRpb19zeW5jKHZwLCAzMik7CiAKIAkvKiBTaGlmdCB0aGUgY29tbWFuZCBiaXRzIG91dC4gKi8KIAlmb3IgKGkgPSAzMTsgaSA+PSAwOyBpLS0pIHsKIAkJaW50IGRhdGF2YWwgPSAod3JpdGVfY21kJigxPDxpKSkgPyBNRElPX0RBVEFfV1JJVEUxIDogTURJT19EQVRBX1dSSVRFMDsKLQkJaW93cml0ZTE2KGRhdGF2YWwsIG1kaW9fYWRkcik7Ci0JCW1kaW9fZGVsYXkoKTsKLQkJaW93cml0ZTE2KGRhdGF2YWwgfCBNRElPX1NISUZUX0NMSywgbWRpb19hZGRyKTsKLQkJbWRpb19kZWxheSgpOworCQl3aW5kb3dfd3JpdGUxNih2cCwgZGF0YXZhbCwgNCwgV240X1BoeXNpY2FsTWdtdCk7CisJCW1kaW9fZGVsYXkodnApOworCQl3aW5kb3dfd3JpdGUxNih2cCwgZGF0YXZhbCB8IE1ESU9fU0hJRlRfQ0xLLAorCQkJICAgICAgIDQsIFduNF9QaHlzaWNhbE1nbXQpOworCQltZGlvX2RlbGF5KHZwKTsKIAl9CiAJLyogTGVhdmUgdGhlIGludGVyZmFjZSBpZGxlLiAqLwogCWZvciAoaSA9IDE7IGkgPj0gMDsgaS0tKSB7Ci0JCWlvd3JpdGUxNihNRElPX0VOQl9JTiwgbWRpb19hZGRyKTsKLQkJbWRpb19kZWxheSgpOwotCQlpb3dyaXRlMTYoTURJT19FTkJfSU4gfCBNRElPX1NISUZUX0NMSywgbWRpb19hZGRyKTsKLQkJbWRpb19kZWxheSgpOworCQl3aW5kb3dfd3JpdGUxNih2cCwgTURJT19FTkJfSU4sIDQsIFduNF9QaHlzaWNhbE1nbXQpOworCQltZGlvX2RlbGF5KHZwKTsKKwkJd2luZG93X3dyaXRlMTYodnAsIE1ESU9fRU5CX0lOIHwgTURJT19TSElGVF9DTEssCisJCQkgICAgICAgNCwgV240X1BoeXNpY2FsTWdtdCk7CisJCW1kaW9fZGVsYXkodnApOwogCX0KKworCXNwaW5fdW5sb2NrX2JoKCZ2cC0+bWlpX2xvY2spOwogfQogCiAvKiBBQ1BJOiBBZHZhbmNlZCBDb25maWd1cmF0aW9uIGFuZCBQb3dlciBJbnRlcmZhY2UuICovCkBAIC0zMTMxLDggKzMxNzYsNyBAQAogCiAJaWYgKHZwLT5lbmFibGVfd29sKSB7CiAJCS8qIFBvd2VyIHVwIG9uOiAxPT1Eb3dubG9hZGVkIEZpbHRlciwgMj09TWFnaWMgUGFja2V0cywgND09TGluayBTdGF0dXMuICovCi0JCUVMM1dJTkRPVyg3KTsKLQkJaW93cml0ZTE2KDIsIGlvYWRkciArIDB4MGMpOworCQl3aW5kb3dfd3JpdGUxNih2cCwgMiwgNywgMHgwYyk7CiAJCS8qIFRoZSBSeEZpbHRlciBtdXN0IGFjY2VwdCB0aGUgV09MIGZyYW1lcy4gKi8KIAkJaW93cml0ZTE2KFNldFJ4RmlsdGVyfFJ4U3RhdGlvbnxSeE11bHRpY2FzdHxSeEJyb2FkY2FzdCwgaW9hZGRyICsgRUwzX0NNRCk7CiAJCWlvd3JpdGUxNihSeEVuYWJsZSwgaW9hZGRyICsgRUwzX0NNRCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC84MTM5Y3AuYyBiL2RyaXZlcnMvbmV0LzgxMzljcC5jCmluZGV4IDI4NGE1ZjQuLjRhNGY2YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgxMzljcC5jCisrKyBiL2RyaXZlcnMvbmV0LzgxMzljcC5jCkBAIC0zMjIsNyArMzIyLDcgQEAKIAlfX2xlMzIJCQlyeF9va19tY2FzdDsKIAlfX2xlMTYJCQl0eF9hYm9ydDsKIAlfX2xlMTYJCQl0eF91bmRlcnJ1bjsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgY3BfZXh0cmFfc3RhdHMgewogCXVuc2lnbmVkIGxvbmcJCXJ4X2ZyYWdzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODEzOXRvby5jIGIvZHJpdmVycy9uZXQvODEzOXRvby5jCmluZGV4IDk3ZDgwNjguLmY1MTY2ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgxMzl0b28uYworKysgYi9kcml2ZXJzL25ldC84MTM5dG9vLmMKQEAgLTY2Miw3ICs2NjIsNyBAQAogLyogcmVhZCBNTUlPIHJlZ2lzdGVyICovCiAjZGVmaW5lIFJUTF9SOChyZWcpCQlpb3JlYWQ4IChpb2FkZHIgKyAocmVnKSkKICNkZWZpbmUgUlRMX1IxNihyZWcpCQlpb3JlYWQxNiAoaW9hZGRyICsgKHJlZykpCi0jZGVmaW5lIFJUTF9SMzIocmVnKQkJKCh1bnNpZ25lZCBsb25nKSBpb3JlYWQzMiAoaW9hZGRyICsgKHJlZykpKQorI2RlZmluZSBSVExfUjMyKHJlZykJCWlvcmVhZDMyIChpb2FkZHIgKyAocmVnKSkKIAogCiBzdGF0aWMgY29uc3QgdTE2IHJ0bDgxMzlfaW50cl9tYXNrID0KQEAgLTg2Miw3ICs4NjIsNyBAQAogCS8qIGlmIHVua25vd24gY2hpcCwgYXNzdW1lIGFycmF5IGVsZW1lbnQgIzAsIG9yaWdpbmFsIFJUTC04MTM5IGluIHRoaXMgY2FzZSAqLwogCWkgPSAwOwogCWRldl9kYmcoJnBkZXYtPmRldiwgInVua25vd24gY2hpcCB2ZXJzaW9uLCBhc3N1bWluZyBSVEwtODEzOVxuIik7Ci0JZGV2X2RiZygmcGRldi0+ZGV2LCAiVHhDb25maWcgPSAweCVseFxuIiwgUlRMX1IzMiAoVHhDb25maWcpKTsKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJUeENvbmZpZyA9IDB4JXhcbiIsIFJUTF9SMzIgKFR4Q29uZmlnKSk7CiAJdHAtPmNoaXBzZXQgPSAwOwogCiBtYXRjaDoKQEAgLTE2NDMsNyArMTY0Myw3IEBACiAJbmV0ZGV2X2RiZyhkZXYsICJUeCBxdWV1ZSBzdGFydCBlbnRyeSAlbGQgIGRpcnR5IGVudHJ5ICVsZFxuIiwKIAkJICAgdHAtPmN1cl90eCwgdHAtPmRpcnR5X3R4KTsKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX1RYX0RFU0M7IGkrKykKLQkJbmV0ZGV2X2RiZyhkZXYsICJUeCBkZXNjcmlwdG9yICVkIGlzICUwOGx4JXNcbiIsCisJCW5ldGRldl9kYmcoZGV2LCAiVHggZGVzY3JpcHRvciAlZCBpcyAlMDh4JXNcbiIsCiAJCQkgICBpLCBSVExfUjMyKFR4U3RhdHVzMCArIChpICogNCkpLAogCQkJICAgaSA9PSB0cC0+ZGlydHlfdHggJSBOVU1fVFhfREVTQyA/CiAJCQkgICAiIChxdWV1ZSBoZWFkKSIgOiAiIik7CkBAIC0yNDg3LDcgKzI0ODcsNyBAQAogCWludCByeF9tb2RlOwogCXUzMiB0bXA7CiAKLQluZXRkZXZfZGJnKGRldiwgInJ0bDgxMzlfc2V0X3J4X21vZGUoJTA0eCkgZG9uZSAtLSBSeCBjb25maWcgJTA4bHhcbiIsCisJbmV0ZGV2X2RiZyhkZXYsICJydGw4MTM5X3NldF9yeF9tb2RlKCUwNHgpIGRvbmUgLS0gUnggY29uZmlnICUwOHhcbiIsCiAJCSAgIGRldi0+ZmxhZ3MsIFJUTF9SMzIoUnhDb25maWcpKTsKIAogCS8qIE5vdGU6IGRvIG5vdCByZW9yZGVyLCBHQ0MgaXMgY2xldmVyIGFib3V0IGNvbW1vbiBzdGF0ZW1lbnRzLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODI1OTYuYyBiL2RyaXZlcnMvbmV0LzgyNTk2LmMKaW5kZXggZGQ4ZGMxNS4uZTJjOWM1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvODI1OTYuYworKysgYi9kcml2ZXJzL25ldC84MjU5Ni5jCkBAIC01MjUsNyArNTI1LDIxIEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIGluaXRfcnhfYnVmcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9yeF9idWZzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGk1OTZfcHJpdmF0ZSAqbHAgPSBkZXYtPm1sX3ByaXY7CisJc3RydWN0IGk1OTZfcmJkICpyYmQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwLCByYmQgPSBscC0+cmJkczsgaSA8IHJ4X3Jpbmdfc2l6ZTsgaSsrLCByYmQrKykgeworCQlpZiAocmJkLT5za2IgPT0gTlVMTCkKKwkJCWJyZWFrOworCQlkZXZfa2ZyZWVfc2tiKHJiZC0+c2tiKTsKKwkJcmJkLT5za2IgPSBOVUxMOworCX0KK30KKworc3RhdGljIGlubGluZSBpbnQgaW5pdF9yeF9idWZzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGk1OTZfcHJpdmF0ZSAqbHAgPSBkZXYtPm1sX3ByaXY7CiAJaW50IGk7CkBAIC01MzcsOCArNTUxLDExIEBACiAJZm9yIChpID0gMCwgcmJkID0gbHAtPnJiZHM7IGkgPCByeF9yaW5nX3NpemU7IGkrKywgcmJkKyspIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRldl9hbGxvY19za2IoUEtUX0JVRl9TWik7CiAKLQkJaWYgKHNrYiA9PSBOVUxMKQotCQkJcGFuaWMoIjgyNTk2OiBhbGxvY19za2IoKSBmYWlsZWQiKTsKKwkJaWYgKHNrYiA9PSBOVUxMKSB7CisJCQlyZW1vdmVfcnhfYnVmcyhkZXYpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwogCQlza2ItPmRldiA9IGRldjsKIAkJcmJkLT52X25leHQgPSByYmQrMTsKIAkJcmJkLT5iX25leHQgPSBXU1dBUHJiZCh2aXJ0X3RvX2J1cyhyYmQrMSkpOwpAQCAtNTc0LDE5ICs1OTEsOCBAQAogCXJmZC0+dl9uZXh0ID0gbHAtPnJmZHM7CiAJcmZkLT5iX25leHQgPSBXU1dBUHJmZCh2aXJ0X3RvX2J1cyhscC0+cmZkcykpOwogCXJmZC0+Y21kID0gQ01EX0VPTHxDTURfRkxFWDsKLX0KIAotc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9yeF9idWZzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGk1OTZfcHJpdmF0ZSAqbHAgPSBkZXYtPm1sX3ByaXY7Ci0Jc3RydWN0IGk1OTZfcmJkICpyYmQ7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwLCByYmQgPSBscC0+cmJkczsgaSA8IHJ4X3Jpbmdfc2l6ZTsgaSsrLCByYmQrKykgewotCQlpZiAocmJkLT5za2IgPT0gTlVMTCkKLQkJCWJyZWFrOwotCQlkZXZfa2ZyZWVfc2tiKHJiZC0+c2tiKTsKLQl9CisJcmV0dXJuIDA7CiB9CiAKIApAQCAtMTAwOSwyMCArMTAxNSwzNSBAQAogCX0KICNpZmRlZiBFTkFCTEVfTVZNRTE2eF9ORVQKIAlpZiAoTUFDSF9JU19NVk1FMTZ4KSB7Ci0JCWlmIChyZXF1ZXN0X2lycSgweDU2LCBpNTk2X2Vycm9yLCAwLCAiaTgyNTk2X2Vycm9yIiwgZGV2KSkKLQkJCXJldHVybiAtRUFHQUlOOworCQlpZiAocmVxdWVzdF9pcnEoMHg1NiwgaTU5Nl9lcnJvciwgMCwgImk4MjU5Nl9lcnJvciIsIGRldikpIHsKKwkJCXJlcyA9IC1FQUdBSU47CisJCQlnb3RvIGVycl9pcnFfZGV2OworCQl9CiAJfQogI2VuZGlmCi0JaW5pdF9yeF9idWZzKGRldik7CisJcmVzID0gaW5pdF9yeF9idWZzKGRldik7CisJaWYgKHJlcykKKwkJZ290byBlcnJfaXJxXzU2OwogCiAJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAotCS8qIEluaXRpYWxpemUgdGhlIDgyNTk2IG1lbW9yeSAqLwogCWlmIChpbml0X2k1OTZfbWVtKGRldikpIHsKIAkJcmVzID0gLUVBR0FJTjsKLQkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJCWdvdG8gZXJyX3F1ZXVlOwogCX0KIAorCXJldHVybiAwOworCitlcnJfcXVldWU6CisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCXJlbW92ZV9yeF9idWZzKGRldik7CitlcnJfaXJxXzU2OgorI2lmZGVmIEVOQUJMRV9NVk1FMTZ4X05FVAorCWZyZWVfaXJxKDB4NTYsIGRldik7CitlcnJfaXJxX2RldjoKKyNlbmRpZgorCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCiAJcmV0dXJuIHJlczsKIH0KIApAQCAtMTQ4OCw2ICsxNTA5LDkgQEAKIAl9CiAjZW5kaWYKIAorI2lmZGVmIEVOQUJMRV9NVk1FMTZ4X05FVAorCWZyZWVfaXJxKDB4NTYsIGRldik7CisjZW5kaWYKIAlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKIAlyZW1vdmVfcnhfYnVmcyhkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCBjZTJmY2RkLi41YTY4OTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKQEAgLTQ4NCw3ICs0ODQsNyBAQAogCiBjb25maWcgTUlQU19BVTFYMDBfRU5FVAogCXRyaXN0YXRlICJNSVBTIEFVMTAwMCBFdGhlcm5ldCBzdXBwb3J0IgotCWRlcGVuZHMgb24gU09DX0FVMVgwMAorCWRlcGVuZHMgb24gTUlQU19BTENIRU1ZCiAJc2VsZWN0IFBIWUxJQgogCXNlbGVjdCBDUkMzMgogCWhlbHAKQEAgLTUzMCwxNCArNTMwLDE1IEBACiAJZGVwZW5kcyBvbiBTVVBFUkggJiYgXAogCQkoQ1BVX1NVQlRZUEVfU0g3NzEwIHx8IENQVV9TVUJUWVBFX1NINzcxMiB8fCBcCiAJCSBDUFVfU1VCVFlQRV9TSDc3NjMgfHwgQ1BVX1NVQlRZUEVfU0g3NjE5IHx8IFwKLQkJIENQVV9TVUJUWVBFX1NINzcyNCkKKwkJIENQVV9TVUJUWVBFX1NINzcyNCB8fCBDUFVfU1VCVFlQRV9TSDc3NTcpCiAJc2VsZWN0IENSQzMyCiAJc2VsZWN0IE1JSQogCXNlbGVjdCBNRElPX0JJVEJBTkcKIAlzZWxlY3QgUEhZTElCCiAJaGVscAogCSAgUmVuZXNhcyBTdXBlckggRXRoZXJuZXQgZGV2aWNlIGRyaXZlci4KLQkgIFRoaXMgZHJpdmVyIHN1cHBvcnQgU0g3NzEwLCBTSDc3MTIsIFNINzc2MywgU0g3NjE5LCBhbmQgU0g3NzI0LgorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydGluZyBDUFVzIGFyZToKKwkJLSBTSDc3MTAsIFNINzcxMiwgU0g3NzYzLCBTSDc2MTksIFNINzcyNCwgYW5kIFNINzc1Ny4KIAogY29uZmlnIFNVTkxBTkNFCiAJdHJpc3RhdGUgIlN1biBMQU5DRSBzdXBwb3J0IgpAQCAtOTEzLDcgKzkxNCw3IEBACiAJdHJpc3RhdGUgIlNNQyA5MUM5eC85MUMxeHh4IHN1cHBvcnQiCiAJc2VsZWN0IENSQzMyCiAJc2VsZWN0IE1JSQotCWRlcGVuZHMgb24gQVJNIHx8IFJFRFdPT0RfNSB8fCBSRURXT09EXzYgfHwgTTMyUiB8fCBTVVBFUkggfHwgXAorCWRlcGVuZHMgb24gQVJNIHx8IE0zMlIgfHwgU1VQRVJIIHx8IFwKIAkJTUlQUyB8fCBCTEFDS0ZJTiB8fCBNTjEwMzAwIHx8IENPTERGSVJFCiAJaGVscAogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgU01DJ3MgOTF4IHNlcmllcyBvZiBFdGhlcm5ldCBjaGlwc2V0cywKQEAgLTE0NjMsNyArMTQ2NCw3IEBACiBjb25maWcgQ1M4OXgwCiAJdHJpc3RhdGUgIkNTODl4MCBzdXBwb3J0IgogCWRlcGVuZHMgb24gTkVUX0VUSEVSTkVUICYmIChJU0EgfHwgRUlTQSB8fCBNQUNIX0lYRFAyMzUxIFwKLQkJfHwgQVJDSF9JWERQMlgwMSB8fCBBUkNIX1BOWDAxMFggfHwgTUFDSF9NWDMxQURTKQorCQl8fCBBUkNIX0lYRFAyWDAxIHx8IE1BQ0hfTVgzMUFEUykKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciBDUzg5eDAgY2hpcHNldCBiYXNlZCBFdGhlcm5ldCBjYXJkcy4gSWYgeW91IGhhdmUgYQogCSAgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgb2YgdGhpcyB0eXBlLCBzYXkgWSBhbmQgcmVhZCB0aGUKQEAgLTE0NzcsNyArMTQ3OCw3IEBACiBjb25maWcgQ1M4OXgwX05PTklTQV9JUlEKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBDUzg5eDAgIT0gbgotCWRlcGVuZHMgb24gTUFDSF9JWERQMjM1MSB8fCBBUkNIX0lYRFAyWDAxIHx8IEFSQ0hfUE5YMDEwWCB8fCBNQUNIX01YMzFBRFMKKwlkZXBlbmRzIG9uIE1BQ0hfSVhEUDIzNTEgfHwgQVJDSF9JWERQMlgwMSB8fCBNQUNIX01YMzFBRFMKIAogY29uZmlnIFRDMzU4MTUKIAl0cmlzdGF0ZSAiVE9TSElCQSBUQzM1ODE1IEV0aGVybmV0IHN1cHBvcnQiCkBAIC0xNjU5LDYgKzE2NjAsNyBAQAogCWRlcGVuZHMgb24gTkVUX1BDSSAmJiBQQ0kKIAlzZWxlY3QgQ1JDMzIKIAlzZWxlY3QgTUlJCisJc2VsZWN0IFBIWUxJQgogCWhlbHAKIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBSNjA0MCBGYXN0IEV0aGVybmV0IE1BQ3MgZm91bmQgaW4gdGhlCiAJICB0aGUgUkRDIFItMzIxeCBTeXN0ZW0tb24tY2hpcHMuCkBAIC0xNzQ4LDExICsxNzUwLDEyIEBACiAJICBQbGVhc2UgZW1haWwgZmVlZGJhY2sgdG8gPHRvcmJlbi5tYXRoaWFzZW5AY29tcGFxLmNvbT4uCiAKIGNvbmZpZyBLUzg4NDIKLQl0cmlzdGF0ZSAiTWljcmVsIEtTWjg4NDIiCi0JZGVwZW5kcyBvbiBIQVNfSU9NRU0KKwl0cmlzdGF0ZSAiTWljcmVsIEtTWjg4NDEvNDIgd2l0aCBnZW5lcmljIGJ1cyBpbnRlcmZhY2UiCisJZGVwZW5kcyBvbiBIQVNfSU9NRU0gJiYgRE1BX0VOR0lORQogCWhlbHAKLQkgIFRoaXMgcGxhdGZvcm0gZHJpdmVyIGlzIGZvciBNaWNyZWwgS1NaODg0MiAvIEtTODg0MgotCSAgMi1wb3J0IGV0aGVybmV0IHN3aXRjaCBjaGlwIChtYW5hZ2VkLCBWTEFOLCBRb1MpLgorCSBUaGlzIHBsYXRmb3JtIGRyaXZlciBpcyBmb3IgS1NaODg0MSgxLXBvcnQpIC8gS1M4ODQyKDItcG9ydCkKKwkgZXRoZXJuZXQgc3dpdGNoIGNoaXAgKG1hbmFnZWQsIFZMQU4sIFFvUykgZnJvbSBNaWNyZWwgb3IKKwkgVGltYmVyZGFsZShGUEdBKS4KIAogY29uZmlnIEtTODg1MQogICAgICAgIHRyaXN0YXRlICJNaWNyZWwgS1M4ODUxIFNQSSIKQEAgLTI2MDEsNiArMjYwNCwyOSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSBjaG9vc2UgTSBoZXJlOyB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBjeGdiNC4KIAorY29uZmlnIENIRUxTSU9fVDRWRl9ERVBFTkRTCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIFBDSSAmJiBJTkVUCisJZGVmYXVsdCB5CisKK2NvbmZpZyBDSEVMU0lPX1Q0VkYKKwl0cmlzdGF0ZSAiQ2hlbHNpbyBDb21tdW5pY2F0aW9ucyBUNCBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBDSEVMU0lPX1Q0VkZfREVQRU5EUworCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIENoZWxzaW8gVDQtYmFzZWQgZ2lnYWJpdCBhbmQgMTBHYiBFdGhlcm5ldAorCSAgYWRhcHRlcnMgd2l0aCBQQ0ktRSBTUi1JT1YgVmlydHVhbCBGdW5jdGlvbnMuCisKKwkgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IENoZWxzaW8gYW5kIG91ciBwcm9kdWN0cywgdmlzaXQKKwkgIG91ciB3ZWJzaXRlIGF0IDxodHRwOi8vd3d3LmNoZWxzaW8uY29tPi4KKworCSAgRm9yIGN1c3RvbWVyIHN1cHBvcnQsIHBsZWFzZSB2aXNpdCBvdXIgY3VzdG9tZXIgc3VwcG9ydCBwYWdlIGF0CisJICA8aHR0cDovL3d3dy5jaGVsc2lvLmNvbS9zdXBwb3J0Lmh0bT4uCisKKwkgIFBsZWFzZSBzZW5kIGZlZWRiYWNrIHRvIDxsaW51eC1idWdzQGNoZWxzaW8uY29tPi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSBjaG9vc2UgTSBoZXJlOyB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBjeGdiNHZmLgorCiBjb25maWcgRUhFQQogCXRyaXN0YXRlICJlSEVBIEV0aGVybmV0IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBJQk1FQlVTICYmIElORVQgJiYgU1BBUlNFTUVNCkBAIC0yNjE0LDcgKzI2NDAsNiBAQAogY29uZmlnIEVOSUMKIAl0cmlzdGF0ZSAiQ2lzY28gVklDIEV0aGVybmV0IE5JQyBTdXBwb3J0IgogCWRlcGVuZHMgb24gUENJICYmIElORVQKLQlzZWxlY3QgSU5FVF9MUk8KIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgdGhlIHN1cHBvcnQgZm9yIHRoZSBDaXNjbyBWSUMgRXRoZXJuZXQgY2FyZC4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQppbmRleCAwYTA1MTJhLi41NmU4YzI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQpAQCAtMjAsNiArMjAsNyBAQAogb2JqLSQoQ09ORklHX0NIRUxTSU9fVDEpICs9IGNoZWxzaW8vCiBvYmotJChDT05GSUdfQ0hFTFNJT19UMykgKz0gY3hnYjMvCiBvYmotJChDT05GSUdfQ0hFTFNJT19UNCkgKz0gY3hnYjQvCitvYmotJChDT05GSUdfQ0hFTFNJT19UNFZGKSArPSBjeGdiNHZmLwogb2JqLSQoQ09ORklHX0VIRUEpICs9IGVoZWEvCiBvYmotJChDT05GSUdfQ0FOKSArPSBjYW4vCiBvYmotJChDT05GSUdfQk9ORElORykgKz0gYm9uZGluZy8KQEAgLTgzLDggKzg0LDcgQEAKIG9iai0kKENPTkZJR19USUdPTjMpICs9IHRnMy5vCiBvYmotJChDT05GSUdfQk5YMikgKz0gYm54Mi5vCiBvYmotJChDT05GSUdfQ05JQykgKz0gY25pYy5vCi1vYmotJChDT05GSUdfQk5YMlgpICs9IGJueDJ4Lm8KLWJueDJ4LW9ianMgOj0gYm54MnhfbWFpbi5vIGJueDJ4X2xpbmsubworb2JqLSQoQ09ORklHX0JOWDJYKSArPSBibngyeC8KIHNwaWRlcm5ldC15ICs9IHNwaWRlcl9uZXQubyBzcGlkZXJfbmV0X2V0aHRvb2wubwogb2JqLSQoQ09ORklHX1NQSURFUl9ORVQpICs9IHNwaWRlcm5ldC5vIHN1bmdlbV9waHkubwogb2JqLSQoQ09ORklHX0dFTElDX05FVCkgKz0gcHMzX2dlbGljLm8KQEAgLTI3NSw3ICsyNzUsNyBAQAogb2JqLSQoQ09ORklHX1VTQl9aRDEyMDEpICAgICAgICArPSB1c2IvCiBvYmotJChDT05GSUdfVVNCX0lQSEVUSCkgICAgICAgICs9IHVzYi8KIAotb2JqLXkgKz0gd2lyZWxlc3MvCitvYmotJChDT05GSUdfV0xBTikgKz0gd2lyZWxlc3MvCiBvYmotJChDT05GSUdfTkVUX1RVTElQKSArPSB0dWxpcC8KIG9iai0kKENPTkZJR19IQU1SQURJTykgKz0gaGFtcmFkaW8vCiBvYmotJChDT05GSUdfSVJEQSkgKz0gaXJkYS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L1NwYWNlLmMgYi9kcml2ZXJzL25ldC9TcGFjZS5jCmluZGV4IDNiNzljNmMuLjliYjQwNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L1NwYWNlLmMKKysrIGIvZHJpdmVycy9uZXQvU3BhY2UuYwpAQCAtMjE4LDEyICsyMTgsNiBAQAogI2lmZGVmIENPTkZJR19FTDEJCS8qIDNjNTAxICovCiAJe2VsMV9wcm9iZSwgMH0sCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfV0FWRUxBTgkJLyogV2F2ZUxBTiAqLwotCXt3YXZlbGFuX3Byb2JlLCAwfSwKLSNlbmRpZgotI2lmZGVmIENPTkZJR19BUkxBTgkJLyogQWlyb25ldCAqLwotCXthcmxhbl9wcm9iZSwgMH0sCi0jZW5kaWYKICNpZmRlZiBDT05GSUdfRUwxNgkJLyogM2M1MDcgKi8KIAl7ZWwxNl9wcm9iZSwgMH0sCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FjMzIwMC5jIGIvZHJpdmVycy9uZXQvYWMzMjAwLmMKaW5kZXggYjkxMTVhNy4uNTE4MWU5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYWMzMjAwLmMKKysrIGIvZHJpdmVycy9uZXQvYWMzMjAwLmMKQEAgLTIxMSw3ICsyMTEsNyBAQAogCXJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBlaV9pbnRlcnJ1cHQsIDAsIERSVl9OQU1FLCBkZXYpOwogCWlmIChyZXR2YWwpIHsKIAkJcHJpbnRrICgiIG5vdGhpbmchIFVuYWJsZSB0byBnZXQgSVJRICVkLlxuIiwgZGV2LT5pcnEpOwotCQlnb3RvIG91dDE7CisJCWdvdG8gb3V0OwogCX0KIAogCXByaW50aygiIElSUSAlZCwgJXMgcG9ydFxuIiwgZGV2LT5pcnEsIHBvcnRfbmFtZVtkZXYtPmlmX3BvcnRdKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FwcGxldGFsay9pcGRkcC5jIGIvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2lwZGRwLmMKaW5kZXggNzk2MzZlZS4uMDM2MmM4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2lwZGRwLmMKKysrIGIvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2lwZGRwLmMKQEAgLTgwLDcgKzgwLDcgQEAKIAlpZiAodmVyc2lvbl9wcmludGVkKysgPT0gMCkKICAgICAgICAgICAgICAgICBwcmludGsodmVyc2lvbik7CiAKLQkvKiBJbml0YWxpemUgdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCisJLyogSW5pdGlhbGl6ZSB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KIAlkZXYtPm5ldGRldl9vcHMgPSAmaXBkZHBfbmV0ZGV2X29wczsKIAogICAgICAgICBkZXYtPnR5cGUgPSBBUlBIUkRfSVBERFA7ICAgICAgIAkvKiBJUCBvdmVyIEREUCB0dW5uZWwgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9jYXBtb2RlLmMgYi9kcml2ZXJzL25ldC9hcmNuZXQvY2FwbW9kZS5jCmluZGV4IDM1NTc5N2YuLjQyZmNlOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9jYXBtb2RlLmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NhcG1vZGUuYwpAQCAtMzcsNjkgKzM3LDYgQEAKIAogI2RlZmluZSBWRVJTSU9OICJhcmNuZXQ6IGNhcCBtb2RlIChgYycpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydCBsb2FkZWQuXG4iCiAKLQotc3RhdGljIHZvaWQgcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGJ1Zm51bSwKLQkgICAgICAgc3RydWN0IGFyY2hkciAqcGt0aGRyLCBpbnQgbGVuZ3RoKTsKLXN0YXRpYyBpbnQgYnVpbGRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsCi0JCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJdW5zaWduZWQgc2hvcnQgdHlwZSwKLQkJCXVpbnQ4X3QgZGFkZHIpOwotc3RhdGljIGludCBwcmVwYXJlX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBhcmNoZHIgKnBrdCwgaW50IGxlbmd0aCwKLQkJICAgICAgaW50IGJ1Zm51bSk7Ci1zdGF0aWMgaW50IGFja190eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgYWNrZWQpOwotCi0KLXN0YXRpYyBzdHJ1Y3QgQXJjUHJvdG8gY2FwbW9kZV9wcm90byA9Ci17Ci0JJ3InLAotCVhNVFUsCi0JMCwKLSAgICAgICAJcngsCi0JYnVpbGRfaGVhZGVyLAotCXByZXBhcmVfdHgsCi0JTlVMTCwKLQlhY2tfdHgKLX07Ci0KLQotc3RhdGljIHZvaWQgYXJjbmV0X2NhcF9pbml0KHZvaWQpCi17Ci0JaW50IGNvdW50OwotCi0JZm9yIChjb3VudCA9IDE7IGNvdW50IDw9IDg7IGNvdW50KyspCi0JCWlmIChhcmNfcHJvdG9fbWFwW2NvdW50XSA9PSBhcmNfcHJvdG9fZGVmYXVsdCkKLQkJCWFyY19wcm90b19tYXBbY291bnRdID0gJmNhcG1vZGVfcHJvdG87Ci0KLQkvKiBmb3IgY2FwIG1vZGUsIHdlIG9ubHkgc2V0IHRoZSBiY2FzdCBwcm90byBpZiB0aGVyZSdzIG5vIGJldHRlciBvbmUgKi8KLQlpZiAoYXJjX2JjYXN0X3Byb3RvID09IGFyY19wcm90b19kZWZhdWx0KQotCQlhcmNfYmNhc3RfcHJvdG8gPSAmY2FwbW9kZV9wcm90bzsKLQotCWFyY19wcm90b19kZWZhdWx0ID0gJmNhcG1vZGVfcHJvdG87Ci0JYXJjX3Jhd19wcm90byA9ICZjYXBtb2RlX3Byb3RvOwotfQotCi0KLSNpZmRlZiBNT0RVTEUKLQotc3RhdGljIGludCBfX2luaXQgY2FwbW9kZV9tb2R1bGVfaW5pdCh2b2lkKQotewotCXByaW50ayhWRVJTSU9OKTsKLQlhcmNuZXRfY2FwX2luaXQoKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGNhcG1vZGVfbW9kdWxlX2V4aXQodm9pZCkKLXsKLQlhcmNuZXRfdW5yZWdpc3Rlcl9wcm90bygmY2FwbW9kZV9wcm90byk7Ci19Ci1tb2R1bGVfaW5pdChjYXBtb2RlX21vZHVsZV9pbml0KTsKLW1vZHVsZV9leGl0KGNhcG1vZGVfbW9kdWxlX2V4aXQpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0jZW5kaWYJCQkJLyogTU9EVUxFICovCi0KLQotCiAvKiBwYWNrZXQgcmVjZWl2ZXIgKi8KIHN0YXRpYyB2b2lkIHJ4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBidWZudW0sCiAJICAgICAgIHN0cnVjdCBhcmNoZHIgKnBrdGhkciwgaW50IGxlbmd0aCkKQEAgLTIzMSw2NSArMTY4LDEwNyBAQAogCUJVR01TRyhEX0RVUklORywgInByZXBhcmVfdHg6IGxlbmd0aD0lZCBvZnM9JWRcbiIsCiAJICAgICAgIGxlbmd0aCxvZnMpOwogCi0JLy8gQ29weSB0aGUgYXJjbmV0LWhlYWRlciArIHRoZSBwcm90b2NvbCBieXRlIGRvd246CisJLyogQ29weSB0aGUgYXJjbmV0LWhlYWRlciArIHRoZSBwcm90b2NvbCBieXRlIGRvd246ICovCiAJbHAtPmh3LmNvcHlfdG9fY2FyZChkZXYsIGJ1Zm51bSwgMCwgaGFyZCwgQVJDX0hEUl9TSVpFKTsKIAlscC0+aHcuY29weV90b19jYXJkKGRldiwgYnVmbnVtLCBvZnMsICZwa3QtPnNvZnQuY2FwLnByb3RvLAogCQkJICAgIHNpemVvZihwa3QtPnNvZnQuY2FwLnByb3RvKSk7CiAKLQkvLyBTa2lwIHRoZSBleHRyYSBpbnRlZ2VyIHdlIGhhdmUgd3JpdHRlbiBpbnRvIGl0IGFzIGEgY29va2llCi0JLy8gYnV0IHdyaXRlIHRoZSByZXN0IG9mIHRoZSBtZXNzYWdlOgorCS8qIFNraXAgdGhlIGV4dHJhIGludGVnZXIgd2UgaGF2ZSB3cml0dGVuIGludG8gaXQgYXMgYSBjb29raWUKKwkgICBidXQgd3JpdGUgdGhlIHJlc3Qgb2YgdGhlIG1lc3NhZ2U6ICovCiAJbHAtPmh3LmNvcHlfdG9fY2FyZChkZXYsIGJ1Zm51bSwgb2ZzKzEsCiAJCQkgICAgKCh1bnNpZ25lZCBjaGFyKikmcGt0LT5zb2Z0LmNhcC5tZXMpLGxlbmd0aC0xKTsKIAogCWxwLT5sYXN0bG9hZF9kZXN0ID0gaGFyZC0+ZGVzdDsKIAotCXJldHVybiAxOwkJLyogZG9uZSAqLworCXJldHVybiAxOwkvKiBkb25lICovCiB9CiAKLQogc3RhdGljIGludCBhY2tfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGFja2VkKQogewotICBzdHJ1Y3QgYXJjbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0gIHN0cnVjdCBza19idWZmICphY2tza2I7Ci0gIHN0cnVjdCBhcmNoZHIgKmFja3BrdDsKLSAgaW50IGxlbmd0aD1zaXplb2Yoc3RydWN0IGFyY19jYXApOworCXN0cnVjdCBhcmNuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqYWNrc2tiOworCXN0cnVjdCBhcmNoZHIgKmFja3BrdDsKKwlpbnQgbGVuZ3RoPXNpemVvZihzdHJ1Y3QgYXJjX2NhcCk7CiAKLSAgQlVHTVNHKERfRFVSSU5HLCAiY2FwbW9kZTogYWNrX3R4OiBwcm90b2NvbDogJXg6IHJlc3VsdDogJWRcbiIsCi0JIGxwLT5vdXRnb2luZy5za2ItPnByb3RvY29sLCBhY2tlZCk7CisJQlVHTVNHKERfRFVSSU5HLCAiY2FwbW9kZTogYWNrX3R4OiBwcm90b2NvbDogJXg6IHJlc3VsdDogJWRcbiIsCisJCWxwLT5vdXRnb2luZy5za2ItPnByb3RvY29sLCBhY2tlZCk7CiAKLSAgQlVHTFZMKERfU0tCKSBhcmNuZXRfZHVtcF9za2IoZGV2LCBscC0+b3V0Z29pbmcuc2tiLCAiYWNrX3R4Iik7CisJQlVHTFZMKERfU0tCKSBhcmNuZXRfZHVtcF9za2IoZGV2LCBscC0+b3V0Z29pbmcuc2tiLCAiYWNrX3R4Iik7CiAKLSAgLyogTm93IGFsbG9jIGEgc2tiIHRvIHNlbmQgYmFjayB1cCB0aHJvdWdoIHRoZSBsYXllcnM6ICovCi0gIGFja3NrYiA9IGFsbG9jX3NrYihsZW5ndGggKyBBUkNfSERSX1NJWkUgLCBHRlBfQVRPTUlDKTsKLSAgaWYgKGFja3NrYiA9PSBOVUxMKSB7Ci0JICBCVUdNU0coRF9OT1JNQUwsICJNZW1vcnkgc3F1ZWV6ZSwgY2FuJ3QgYWNrbm93bGVkZ2UuXG4iKTsKLQkgIGdvdG8gZnJlZV9vdXRza2I7Ci0gIH0KKwkvKiBOb3cgYWxsb2MgYSBza2IgdG8gc2VuZCBiYWNrIHVwIHRocm91Z2ggdGhlIGxheWVyczogKi8KKwlhY2tza2IgPSBhbGxvY19za2IobGVuZ3RoICsgQVJDX0hEUl9TSVpFICwgR0ZQX0FUT01JQyk7CisJaWYgKGFja3NrYiA9PSBOVUxMKSB7CisJCUJVR01TRyhEX05PUk1BTCwgIk1lbW9yeSBzcXVlZXplLCBjYW4ndCBhY2tub3dsZWRnZS5cbiIpOworCQlnb3RvIGZyZWVfb3V0c2tiOworCX0KIAotICBza2JfcHV0KGFja3NrYiwgbGVuZ3RoICsgQVJDX0hEUl9TSVpFICk7Ci0gIGFja3NrYi0+ZGV2ID0gZGV2OworCXNrYl9wdXQoYWNrc2tiLCBsZW5ndGggKyBBUkNfSERSX1NJWkUgKTsKKwlhY2tza2ItPmRldiA9IGRldjsKIAotICBza2JfcmVzZXRfbWFjX2hlYWRlcihhY2tza2IpOwotICBhY2twa3QgPSAoc3RydWN0IGFyY2hkciAqKXNrYl9tYWNfaGVhZGVyKGFja3NrYik7Ci0gIC8qIHNrYl9wdWxsKGFja3NrYiwgQVJDX0hEUl9TSVpFKTsgKi8KKwlza2JfcmVzZXRfbWFjX2hlYWRlcihhY2tza2IpOworCWFja3BrdCA9IChzdHJ1Y3QgYXJjaGRyICopc2tiX21hY19oZWFkZXIoYWNrc2tiKTsKKwkvKiBza2JfcHVsbChhY2tza2IsIEFSQ19IRFJfU0laRSk7ICovCiAKKwlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKGxwLT5vdXRnb2luZy5za2IsIGFja3BrdCwKKwkJCQkgIEFSQ19IRFJfU0laRSArIHNpemVvZihzdHJ1Y3QgYXJjX2NhcCkpOworCWFja3BrdC0+c29mdC5jYXAucHJvdG8gPSAwOyAvKiB1c2luZyBwcm90b2NvbCAwIGZvciBhY2tub3dsZWRnZSAqLworCWFja3BrdC0+c29mdC5jYXAubWVzLmFjaz1hY2tlZDsKIAotICBza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKGxwLT5vdXRnb2luZy5za2IsIGFja3BrdCwKLQkJQVJDX0hEUl9TSVpFICsgc2l6ZW9mKHN0cnVjdCBhcmNfY2FwKSk7Ci0gIGFja3BrdC0+c29mdC5jYXAucHJvdG89MDsgLyogdXNpbmcgcHJvdG9jb2wgMCBmb3IgYWNrbm93bGVkZ2UgKi8KLSAgYWNrcGt0LT5zb2Z0LmNhcC5tZXMuYWNrPWFja2VkOworCUJVR01TRyhEX1BST1RPLCAiQWNra25vd2xlZGdlIGZvciBjYXAgcGFja2V0ICV4LlxuIiwKKwkJCSooKGludCopJmFja3BrdC0+c29mdC5jYXAuY29va2llWzBdKSk7CiAKLSAgQlVHTVNHKERfUFJPVE8sICJBY2trbm93bGVkZ2UgZm9yIGNhcCBwYWNrZXQgJXguXG4iLAotCSAqKChpbnQqKSZhY2twa3QtPnNvZnQuY2FwLmNvb2tpZVswXSkpOworCWFja3NrYi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9BUkNORVQpOwogCi0gIGFja3NrYi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9BUkNORVQpOworCUJVR0xWTChEX1NLQikgYXJjbmV0X2R1bXBfc2tiKGRldiwgYWNrc2tiLCAiYWNrX3R4X3JlY3YiKTsKKwluZXRpZl9yeChhY2tza2IpOwogCi0gIEJVR0xWTChEX1NLQikgYXJjbmV0X2R1bXBfc2tiKGRldiwgYWNrc2tiLCAiYWNrX3R4X3JlY3YiKTsKLSAgbmV0aWZfcngoYWNrc2tiKTsKK2ZyZWVfb3V0c2tiOgorCWRldl9rZnJlZV9za2JfaXJxKGxwLT5vdXRnb2luZy5za2IpOworCWxwLT5vdXRnb2luZy5wcm90byA9IE5VTEw7IC8qIFdlIGFyZSBhbHdheXMgZmluaXNoZWQgd2hlbiBpbiB0aGlzIHByb3RvY29sICovCiAKLSBmcmVlX291dHNrYjoKLSAgZGV2X2tmcmVlX3NrYl9pcnEobHAtPm91dGdvaW5nLnNrYik7Ci0gIGxwLT5vdXRnb2luZy5wcm90byA9IE5VTEw7IC8qIFdlIGFyZSBhbHdheXMgZmluaXNoZWQgd2hlbiBpbiB0aGlzIHByb3RvY29sICovCi0KLSAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBzdHJ1Y3QgQXJjUHJvdG8gY2FwbW9kZV9wcm90byA9Cit7CisJJ3InLAorCVhNVFUsCisJMCwKKwlyeCwKKwlidWlsZF9oZWFkZXIsCisJcHJlcGFyZV90eCwKKwlOVUxMLAorCWFja190eAorfTsKKworc3RhdGljIHZvaWQgYXJjbmV0X2NhcF9pbml0KHZvaWQpCit7CisJaW50IGNvdW50OworCisJZm9yIChjb3VudCA9IDE7IGNvdW50IDw9IDg7IGNvdW50KyspCisJCWlmIChhcmNfcHJvdG9fbWFwW2NvdW50XSA9PSBhcmNfcHJvdG9fZGVmYXVsdCkKKwkJCWFyY19wcm90b19tYXBbY291bnRdID0gJmNhcG1vZGVfcHJvdG87CisKKwkvKiBmb3IgY2FwIG1vZGUsIHdlIG9ubHkgc2V0IHRoZSBiY2FzdCBwcm90byBpZiB0aGVyZSdzIG5vIGJldHRlciBvbmUgKi8KKwlpZiAoYXJjX2JjYXN0X3Byb3RvID09IGFyY19wcm90b19kZWZhdWx0KQorCQlhcmNfYmNhc3RfcHJvdG8gPSAmY2FwbW9kZV9wcm90bzsKKworCWFyY19wcm90b19kZWZhdWx0ID0gJmNhcG1vZGVfcHJvdG87CisJYXJjX3Jhd19wcm90byA9ICZjYXBtb2RlX3Byb3RvOworfQorCitzdGF0aWMgaW50IF9faW5pdCBjYXBtb2RlX21vZHVsZV9pbml0KHZvaWQpCit7CisJcHJpbnRrKFZFUlNJT04pOworCWFyY25ldF9jYXBfaW5pdCgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY2FwbW9kZV9tb2R1bGVfZXhpdCh2b2lkKQoreworCWFyY25ldF91bnJlZ2lzdGVyX3Byb3RvKCZjYXBtb2RlX3Byb3RvKTsKK30KK21vZHVsZV9pbml0KGNhcG1vZGVfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoY2FwbW9kZV9tb2R1bGVfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1pc2EuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1pc2EuYwppbmRleCAwNDAyZGEzLi4zNzI3MjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAtaXNhLmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLWlzYS5jCkBAIC05MCwxNCArOTAsMTQgQEAKIAkJb3V0YigwLCBfSU5UTUFTSyk7CiAJCWRldi0+aXJxID0gcHJvYmVfaXJxX29mZihhaXJxbWFzayk7CiAKLQkJaWYgKGRldi0+aXJxIDw9IDApIHsKKwkJaWYgKChpbnQpZGV2LT5pcnEgPD0gMCkgewogCQkJQlVHTVNHKERfSU5JVF9SRUFTT05TLCAiQXV0b3Byb2JlIElSUSBmYWlsZWQgZmlyc3QgdGltZVxuIik7CiAJCQlhaXJxbWFzayA9IHByb2JlX2lycV9vbigpOwogCQkJb3V0YihOT1JYZmxhZywgX0lOVE1BU0spOwogCQkJdWRlbGF5KDUpOwogCQkJb3V0YigwLCBfSU5UTUFTSyk7CiAJCQlkZXYtPmlycSA9IHByb2JlX2lycV9vZmYoYWlycW1hc2spOwotCQkJaWYgKGRldi0+aXJxIDw9IDApIHsKKwkJCWlmICgoaW50KWRldi0+aXJxIDw9IDApIHsKIAkJCQlCVUdNU0coRF9OT1JNQUwsICJBdXRvcHJvYmUgSVJRIGZhaWxlZC5cbiIpOwogCQkJCWVyciA9IC1FTk9ERVY7CiAJCQkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvY29tOTBpby5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTkwaW8uYwppbmRleCA0Y2I0MDE4Li5lYjI3OTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvY29tOTBpby5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jb205MGlvLmMKQEAgLTIxMyw3ICsyMTMsNyBAQAogCQlvdXRiKDAsIF9JTlRNQVNLKTsKIAkJZGV2LT5pcnEgPSBwcm9iZV9pcnFfb2ZmKGFpcnFtYXNrKTsKIAotCQlpZiAoZGV2LT5pcnEgPD0gMCkgeworCQlpZiAoKGludClkZXYtPmlycSA8PSAwKSB7CiAJCQlCVUdNU0coRF9JTklUX1JFQVNPTlMsICJBdXRvcHJvYmUgSVJRIGZhaWxlZFxuIik7CiAJCQlnb3RvIGVycl9vdXQ7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9peHA0eHhfZXRoLmMgYi9kcml2ZXJzL25ldC9hcm0vaXhwNHh4X2V0aC5jCmluZGV4IDI0ZGYwMzIuLjRmMWNjNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9peHA0eHhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2l4cDR4eF9ldGguYwpAQCAtNzM4LDYgKzczOCwxNyBAQAogCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7CiAJdTggZGlmZnNbRVRIX0FMRU5dLCAqYWRkcjsKIAlpbnQgaTsKKwlzdGF0aWMgY29uc3QgdTggYWxsbXVsdGlbXSA9IHsgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKKwkJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspIHsKKwkJCV9fcmF3X3dyaXRlbChhbGxtdWx0aVtpXSwgJnBvcnQtPnJlZ3MtPm1jYXN0X2FkZHJbaV0pOworCQkJX19yYXdfd3JpdGVsKGFsbG11bHRpW2ldLCAmcG9ydC0+cmVncy0+bWNhc3RfbWFza1tpXSk7CisJCX0KKwkJX19yYXdfd3JpdGVsKERFRkFVTFRfUlhfQ05UUkwwIHwgUlhfQ05UUkwwX0FERFJfRkxUUl9FTiwKKwkJCSZwb3J0LT5yZWdzLT5yeF9jb250cm9sWzBdKTsKKwkJcmV0dXJuOworCX0KIAogCWlmICgoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB8fCBuZXRkZXZfbWNfZW1wdHkoZGV2KSkgewogCQlfX3Jhd193cml0ZWwoREVGQVVMVF9SWF9DTlRSTDAgJiB+UlhfQ05UUkwwX0FERFJfRkxUUl9FTiwKQEAgLTc3MSw3ICs3ODIsOCBAQAogCiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBwaHlfbWlpX2lvY3RsKHBvcnQtPnBoeWRldiwgaWZfbWlpKHJlcSksIGNtZCk7CisKKwlyZXR1cm4gcGh5X21paV9pb2N0bChwb3J0LT5waHlkZXYsIHJlcSwgY21kKTsKIH0KIAogLyogZXRodG9vbCBzdXBwb3J0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vdzkwcDkxMF9ldGhlci5jIGIvZHJpdmVycy9uZXQvYXJtL3c5MHA5MTBfZXRoZXIuYwppbmRleCAyZTg1MjQ2Li40NTQ1ZDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vdzkwcDkxMF9ldGhlci5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS93OTBwOTEwX2V0aGVyLmMKQEAgLTgyMiw2ICs4MjIsOSBAQAogCXc5MHA5MTBfc2V0X2dsb2JhbF9tYWNjbWQoZGV2KTsKIAl3OTBwOTEwX2VuYWJsZV9yeChkZXYsIDEpOwogCisJY2xrX2VuYWJsZShldGhlci0+cm1paWNsayk7CisJY2xrX2VuYWJsZShldGhlci0+Y2xrKTsKKwogCWV0aGVyLT5yeF9wYWNrZXRzID0gMHgwOwogCWV0aGVyLT5yeF9ieXRlcyA9IDB4MDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXQxNzAwLmMgYi9kcml2ZXJzL25ldC9hdDE3MDAuYwppbmRleCA5MzE4NWY1Li44OTg3Njg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdDE3MDAuYworKysgYi9kcml2ZXJzL25ldC9hdDE3MDAuYwpAQCAtODExLDEwICs4MTEsOCBAQAogCS8qIE5vIHN0YXRpc3RpYyBjb3VudGVycyBvbiB0aGUgY2hpcCB0byB1cGRhdGUuICovCiAKIAkvKiBEaXNhYmxlIHRoZSBJUlEgb24gYm9hcmRzIG9mIGZtdjE4eCB3aGVyZSBpdCBpcyBmZWFzaWJsZS4gKi8KLQlpZiAobHAtPmp1bXBlcmVkKSB7CisJaWYgKGxwLT5qdW1wZXJlZCkKIAkJb3V0YigweDAwLCBpb2FkZHIgKyBJT0NPTkZJRzEpOwotCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKLQl9CiAKIAkvKiBQb3dlci1kb3duIHRoZSBjaGlwLiAgR3JlZW4sIGdyZWVuLCBncmVlbiEgKi8KIAlvdXRiKDB4MDAsIGlvYWRkciArIENPTkZJR18xKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjLmggYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxYy5oCmluZGV4IDg0YWU5MDUuLjUyYWJiYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjLmgKKysrIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWMuaApAQCAtNzMsNyArNzMsOCBAQAogI2RlZmluZSBGVUxMX0RVUExFWCAgICAgICAgMgogCiAjZGVmaW5lIEFUX1JYX0JVRl9TSVpFCQkoRVRIX0ZSQU1FX0xFTiArIFZMQU5fSExFTiArIEVUSF9GQ1NfTEVOKQotI2RlZmluZSBNQVhfSlVNQk9fRlJBTUVfU0laRSAJKDkqMTAyNCkKKyNkZWZpbmUgTUFYX0pVTUJPX0ZSQU1FX1NJWkUJKDYqMTAyNCkKKyNkZWZpbmUgTUFYX1RTT19GUkFNRV9TSVpFICAgICAgKDcqMTAyNCkKICNkZWZpbmUgTUFYX1RYX09GRkxPQURfVEhSRVNICSg5KjEwMjQpCiAKICNkZWZpbmUgQVRfTUFYX1JFQ0VJVkVfUVVFVUUgICAgNApAQCAtODcsMTAgKzg4LDExIEBACiAjZGVmaW5lIEFUX01BWF9JTlRfV09SSwkJNQogI2RlZmluZSBBVF9UV1NJX0VFUFJPTV9USU1FT1VUIAkxMDAKICNkZWZpbmUgQVRfSFdfTUFYX0lETEVfREVMQVkgCTEwCi0jZGVmaW5lIEFUX1NVU1BFTkRfTElOS19USU1FT1VUIDI4CisjZGVmaW5lIEFUX1NVU1BFTkRfTElOS19USU1FT1VUIDEwMAogCiAjZGVmaW5lIEFUX0FTUE1fTDBTX1RJTUVSCTYKICNkZWZpbmUgQVRfQVNQTV9MMV9USU1FUgkxMgorI2RlZmluZSBBVF9MQ0tERVRfVElNRVIJCTEyCiAKICNkZWZpbmUgQVRMMUNfUENJRV9MMFNfTDFfRElTQUJMRSAJMHgwMQogI2RlZmluZSBBVEwxQ19QQ0lFX1BIWV9SRVNFVAkJMHgwMgpAQCAtMzE2LDYgKzMxOCw3IEBACiAJYXRocl9sMmNfYiwKIAlhdGhyX2wyY19iMiwKIAlhdGhyX2wxZCwKKwlhdGhyX2wxZF8yLAogfTsKIAogZW51bSBhdGwxY190cmFuc19xdWV1ZSB7CkBAIC0zOTIsNiArMzk1LDggQEAKIAl1MTYgc3Vic3lzdGVtX2lkOwogCXUxNiBzdWJzeXN0ZW1fdmVuZG9yX2lkOwogCXU4IHJldmlzaW9uX2lkOworCXUxNiBwaHlfaWQxOworCXUxNiBwaHlfaWQyOwogCiAJdTMyIGludHJfbWFzazsKIAl1OCBkbWF3X2RseV9jbnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19ody5jIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfaHcuYwppbmRleCBmMTM4OWQ2Li5kODUwMWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19ody5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX2h3LmMKQEAgLTM3LDYgKzM3LDkgQEAKIAlpZiAoZGF0YSAmIFRXU0lfREVCVUdfREVWX0VYSVNUKQogCQlyZXR1cm4gMTsKIAorCUFUX1JFQURfUkVHKGh3LCBSRUdfTUFTVEVSX0NUUkwsICZkYXRhKTsKKwlpZiAoZGF0YSAmIE1BU1RFUl9DVFJMX09UUF9TRUwpCisJCXJldHVybiAxOwogCXJldHVybiAwOwogfQogCkBAIC02OSw2ICs3Miw4IEBACiAJdTMyIGk7CiAJdTMyIG90cF9jdHJsX2RhdGE7CiAJdTMyIHR3c2lfY3RybF9kYXRhOworCXUzMiBsdHNzbV9jdHJsX2RhdGE7CisJdTMyIHdvbF9kYXRhOwogCXU4ICBldGhfYWRkcltFVEhfQUxFTl07CiAJdTE2IHBoeV9kYXRhOwogCWJvb2wgcmFpc2Vfdm9sID0gZmFsc2U7CkBAIC0xMDQsNiArMTA5LDE1IEBACiAJCQl1ZGVsYXkoMjApOwogCQkJcmFpc2Vfdm9sID0gdHJ1ZTsKIAkJfQorCQkvKiBjbG9zZSBvcGVuIGJpdCBvZiBSZWFkT25seSovCisJCUFUX1JFQURfUkVHKGh3LCBSRUdfTFRTU01fSURfQ1RSTCwgJmx0c3NtX2N0cmxfZGF0YSk7CisJCWx0c3NtX2N0cmxfZGF0YSAmPSB+TFRTU01fSURfRU5fV1JPOworCQlBVF9XUklURV9SRUcoaHcsIFJFR19MVFNTTV9JRF9DVFJMLCBsdHNzbV9jdHJsX2RhdGEpOworCisJCS8qIGNsZWFyIGFueSBXT0wgc2V0dGluZ3MgKi8KKwkJQVRfV1JJVEVfUkVHKGh3LCBSRUdfV09MX0NUUkwsIDApOworCQlBVF9SRUFEX1JFRyhodywgUkVHX1dPTF9DVFJMLCAmd29sX2RhdGEpOworCiAKIAkJQVRfUkVBRF9SRUcoaHcsIFJFR19UV1NJX0NUUkwsICZ0d3NpX2N0cmxfZGF0YSk7CiAJCXR3c2lfY3RybF9kYXRhIHw9IFRXU0lfQ1RSTF9TV19MRFNUQVJUOwpAQCAtMTE5LDE3ICsxMzMsMTUgQEAKIAl9CiAJLyogRGlzYWJsZSBPVFBfQ0xLICovCiAJaWYgKChody0+bmljX3R5cGUgPT0gYXRocl9sMWMgfHwgaHctPm5pY190eXBlID09IGF0aHJfbDJjKSkgewotCQlpZiAob3RwX2N0cmxfZGF0YSAmIE9UUF9DVFJMX0NMS19FTikgewotCQkJb3RwX2N0cmxfZGF0YSAmPSB+T1RQX0NUUkxfQ0xLX0VOOwotCQkJQVRfV1JJVEVfUkVHKGh3LCBSRUdfT1RQX0NUUkwsIG90cF9jdHJsX2RhdGEpOwotCQkJQVRfV1JJVEVfRkxVU0goaHcpOwotCQkJbXNsZWVwKDEpOwotCQl9CisJCW90cF9jdHJsX2RhdGEgJj0gfk9UUF9DVFJMX0NMS19FTjsKKwkJQVRfV1JJVEVfUkVHKGh3LCBSRUdfT1RQX0NUUkwsIG90cF9jdHJsX2RhdGEpOworCQltc2xlZXAoMSk7CiAJfQogCWlmIChyYWlzZV92b2wpIHsKIAkJaWYgKGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wyY19iIHx8CiAJCSAgICBody0+bmljX3R5cGUgPT0gYXRocl9sMmNfYjIgfHwKLQkJICAgIGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wxZCkgeworCQkgICAgaHctPm5pY190eXBlID09IGF0aHJfbDFkIHx8CisJCSAgICBody0+bmljX3R5cGUgPT0gYXRocl9sMWRfMikgewogCQkJYXRsMWNfd3JpdGVfcGh5X3JlZyhodywgTUlJX0RCR19BRERSLCAweDAwKTsKIAkJCWlmIChhdGwxY19yZWFkX3BoeV9yZWcoaHcsIE1JSV9EQkdfREFUQSwgJnBoeV9kYXRhKSkKIAkJCQlnb3RvIG91dDsKQEAgLTQ1NiwxNCArNDY4LDIyIEBACiAKIAlpZiAoaHctPm5pY190eXBlID09IGF0aHJfbDJjX2IgfHwKIAkgICAgaHctPm5pY190eXBlID09IGF0aHJfbDJjX2IyIHx8Ci0JICAgIGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wxZCkgeworCSAgICBody0+bmljX3R5cGUgPT0gYXRocl9sMWQgfHwKKwkgICAgaHctPm5pY190eXBlID09IGF0aHJfbDFkXzIpIHsKIAkJYXRsMWNfd3JpdGVfcGh5X3JlZyhodywgTUlJX0RCR19BRERSLCAweDNCKTsKIAkJYXRsMWNfcmVhZF9waHlfcmVnKGh3LCBNSUlfREJHX0RBVEEsICZwaHlfZGF0YSk7CiAJCWF0bDFjX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9EQkdfREFUQSwgcGh5X2RhdGEgJiAweEZGRjcpOwogCQltc2xlZXAoMjApOwogCX0KLQotCS8qRW5hYmxlIFBIWSBMaW5rQ2hhbmdlIEludGVycnVwdCAqLworCWlmIChody0+bmljX3R5cGUgPT0gYXRocl9sMWQpIHsKKwkJYXRsMWNfd3JpdGVfcGh5X3JlZyhodywgTUlJX0RCR19BRERSLCAweDI5KTsKKwkJYXRsMWNfd3JpdGVfcGh5X3JlZyhodywgTUlJX0RCR19EQVRBLCAweDkyOUQpOworCX0KKwlpZiAoaHctPm5pY190eXBlID09IGF0aHJfbDFjIHx8IGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wyY19iMgorCQl8fCBody0+bmljX3R5cGUgPT0gYXRocl9sMmMgfHwgaHctPm5pY190eXBlID09IGF0aHJfbDJjKSB7CisJCWF0bDFjX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9EQkdfQUREUiwgMHgyOSk7CisJCWF0bDFjX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9EQkdfREFUQSwgMHhCNkREKTsKKwl9CiAJZXJyID0gYXRsMWNfd3JpdGVfcGh5X3JlZyhodywgTUlJX0lFUiwgbWlpX2llcl9kYXRhKTsKIAlpZiAoZXJyKSB7CiAJCWlmIChuZXRpZl9tc2dfaHcoYWRhcHRlcikpCkBAIC00ODIsMTIgKzUwMiwxMCBAQAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAlpbnQgcmV0X3ZhbDsKIAl1MTYgbWlpX2JtY3JfZGF0YSA9IEJNQ1JfUkVTRVQ7Ci0JdTE2IHBoeV9pZDEsIHBoeV9pZDI7CiAKLQlpZiAoKGF0bDFjX3JlYWRfcGh5X3JlZyhodywgTUlJX1BIWVNJRDEsICZwaHlfaWQxKSAhPSAwKSB8fAotCQkoYXRsMWNfcmVhZF9waHlfcmVnKGh3LCBNSUlfUEhZU0lEMiwgJnBoeV9pZDIpICE9IDApKSB7Ci0JCQlpZiAobmV0aWZfbXNnX2xpbmsoYWRhcHRlcikpCi0JCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRXJyb3IgZ2V0IHBoeSBJRFxuIik7CisJaWYgKChhdGwxY19yZWFkX3BoeV9yZWcoaHcsIE1JSV9QSFlTSUQxLCAmaHctPnBoeV9pZDEpICE9IDApIHx8CisJCShhdGwxY19yZWFkX3BoeV9yZWcoaHcsIE1JSV9QSFlTSUQyLCAmaHctPnBoeV9pZDIpICE9IDApKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkVycm9yIGdldCBwaHkgSURcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCXN3aXRjaCAoaHctPm1lZGlhX3R5cGUpIHsKQEAgLTU3Miw2ICs1OTAsNjUgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IGF0bDFjX3BoeV9wb3dlcl9zYXZpbmcoc3RydWN0IGF0bDFjX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXRsMWNfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYXRsMWNfYWRhcHRlciAqKWh3LT5hZGFwdGVyOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwlpbnQgcmV0ID0gMDsKKwl1MTYgYXV0b25lZ19hZHZlcnRpc2VkID0gQURWRVJUSVNFRF8xMGJhc2VUX0hhbGY7CisJdTE2IHNhdmVfYXV0b25lZ19hZHZlcnRpc2VkOworCXUxNiBwaHlfZGF0YTsKKwl1MTYgbWlpX2xwYV9kYXRhOworCXUxNiBzcGVlZCA9IFNQRUVEXzA7CisJdTE2IGR1cGxleCA9IEZVTExfRFVQTEVYOworCWludCBpOworCisJYXRsMWNfcmVhZF9waHlfcmVnKGh3LCBNSUlfQk1TUiwgJnBoeV9kYXRhKTsKKwlhdGwxY19yZWFkX3BoeV9yZWcoaHcsIE1JSV9CTVNSLCAmcGh5X2RhdGEpOworCWlmIChwaHlfZGF0YSAmIEJNU1JfTFNUQVRVUykgeworCQlhdGwxY19yZWFkX3BoeV9yZWcoaHcsIE1JSV9MUEEsICZtaWlfbHBhX2RhdGEpOworCQlpZiAobWlpX2xwYV9kYXRhICYgTFBBXzEwRlVMTCkKKwkJCWF1dG9uZWdfYWR2ZXJ0aXNlZCA9IEFEVkVSVElTRURfMTBiYXNlVF9GdWxsOworCQllbHNlIGlmIChtaWlfbHBhX2RhdGEgJiBMUEFfMTBIQUxGKQorCQkJYXV0b25lZ19hZHZlcnRpc2VkID0gQURWRVJUSVNFRF8xMGJhc2VUX0hhbGY7CisJCWVsc2UgaWYgKG1paV9scGFfZGF0YSAmIExQQV8xMDBIQUxGKQorCQkJYXV0b25lZ19hZHZlcnRpc2VkID0gQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmOworCQllbHNlIGlmIChtaWlfbHBhX2RhdGEgJiBMUEFfMTAwRlVMTCkKKwkJCWF1dG9uZWdfYWR2ZXJ0aXNlZCA9IEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbDsKKworCQlzYXZlX2F1dG9uZWdfYWR2ZXJ0aXNlZCA9IGh3LT5hdXRvbmVnX2FkdmVydGlzZWQ7CisJCWh3LT5waHlfY29uZmlndXJlZCA9IGZhbHNlOworCQlody0+YXV0b25lZ19hZHZlcnRpc2VkID0gYXV0b25lZ19hZHZlcnRpc2VkOworCQlpZiAoYXRsMWNfcmVzdGFydF9hdXRvbmVnKGh3KSAhPSAwKSB7CisJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJwaHkgYXV0b25lZyBmYWlsZWRcbiIpOworCQkJcmV0ID0gLTE7CisJCX0KKwkJaHctPmF1dG9uZWdfYWR2ZXJ0aXNlZCA9IHNhdmVfYXV0b25lZ19hZHZlcnRpc2VkOworCisJCWlmIChtaWlfbHBhX2RhdGEpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBBVF9TVVNQRU5EX0xJTktfVElNRU9VVDsgaSsrKSB7CisJCQkJbWRlbGF5KDEwMCk7CisJCQkJYXRsMWNfcmVhZF9waHlfcmVnKGh3LCBNSUlfQk1TUiwgJnBoeV9kYXRhKTsKKwkJCQlhdGwxY19yZWFkX3BoeV9yZWcoaHcsIE1JSV9CTVNSLCAmcGh5X2RhdGEpOworCQkJCWlmIChwaHlfZGF0YSAmIEJNU1JfTFNUQVRVUykgeworCQkJCQlpZiAoYXRsMWNfZ2V0X3NwZWVkX2FuZF9kdXBsZXgoaHcsICZzcGVlZCwKKwkJCQkJCQkJCSZkdXBsZXgpICE9IDApCisJCQkJCQlkZXZfZGJnKCZwZGV2LT5kZXYsCisJCQkJCQkJImdldCBzcGVlZCBhbmQgZHVwbGV4IGZhaWxlZFxuIik7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCXNwZWVkID0gU1BFRURfMTA7CisJCWR1cGxleCA9IEhBTEZfRFVQTEVYOworCX0KKwlhZGFwdGVyLT5saW5rX3NwZWVkID0gc3BlZWQ7CisJYWRhcHRlci0+bGlua19kdXBsZXggPSBkdXBsZXg7CisKKwlyZXR1cm4gcmV0OworfQorCiBpbnQgYXRsMWNfcmVzdGFydF9hdXRvbmVnKHN0cnVjdCBhdGwxY19odyAqaHcpCiB7CiAJaW50IGVyciA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19ody5oIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfaHcuaAppbmRleCAxZWViM2VkLi4zZGQ2NzU5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfaHcuaAorKysgYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19ody5oCkBAIC00Miw3ICs0Miw3IEBACiBpbnQgYXRsMWNfcGh5X2luaXQoc3RydWN0IGF0bDFjX2h3ICpodyk7CiBpbnQgYXRsMWNfY2hlY2tfZWVwcm9tX2V4aXN0KHN0cnVjdCBhdGwxY19odyAqaHcpOwogaW50IGF0bDFjX3Jlc3RhcnRfYXV0b25lZyhzdHJ1Y3QgYXRsMWNfaHcgKmh3KTsKLQoraW50IGF0bDFjX3BoeV9wb3dlcl9zYXZpbmcoc3RydWN0IGF0bDFjX2h3ICpodyk7CiAvKiByZWdpc3RlciBkZWZpbml0aW9uICovCiAjZGVmaW5lIFJFR19ERVZJQ0VfQ0FQICAgICAgICAgICAgICAJMHg1QwogI2RlZmluZSBERVZJQ0VfQ0FQX01BWF9QQVlMT0FEX01BU0sgICAgIDB4NwpAQCAtMTIwLDYgKzEyMCwxMiBAQAogI2RlZmluZSBSRUdfUENJRV9QSFlNSVNDCSAgICAJMHgxMDAwCiAjZGVmaW5lIFBDSUVfUEhZTUlTQ19GT1JDRV9SQ1ZfREVUCTB4NAogCisjZGVmaW5lIFJFR19QQ0lFX1BIWU1JU0MyCQkweDEwMDQKKyNkZWZpbmUgUENJRV9QSFlNSVNDMl9TRVJERVNfQ0RSX01BU0sJMHgzCisjZGVmaW5lIFBDSUVfUEhZTUlTQzJfU0VSREVTX0NEUl9TSElGVAkxNgorI2RlZmluZSBQQ0lFX1BIWU1JU0MyX1NFUkRFU19USF9NQVNLCTB4MworI2RlZmluZSBQQ0lFX1BIWU1JU0MyX1NFUkRFU19USF9TSElGVAkxOAorCiAjZGVmaW5lIFJFR19UV1NJX0RFQlVHCQkJMHgxMTA4CiAjZGVmaW5lIFRXU0lfREVCVUdfREVWX0VYSVNUCQkweDIwMDAwMDAwCiAKQEAgLTE1MCwyNCArMTU2LDI4IEBACiAjZGVmaW5lIFBNX0NUUkxfQVNQTV9MMFNfRU4JCTB4MDAwMDEwMDAKICNkZWZpbmUgUE1fQ1RSTF9DTEtfU1dIX0wxCQkweDAwMDAyMDAwCiAjZGVmaW5lIFBNX0NUUkxfQ0xLX1BXTV9WRVIxXzEJCTB4MDAwMDQwMDAKLSNkZWZpbmUgUE1fQ1RSTF9QQ0lFX1JFQ1YJCTB4MDAwMDgwMDAKKyNkZWZpbmUgUE1fQ1RSTF9SQ1ZSX1dUX1RJTUVSCQkweDAwMDA4MDAwCiAjZGVmaW5lIFBNX0NUUkxfTDFfRU5UUllfVElNRVJfTUFTSwkweEYKICNkZWZpbmUgUE1fQ1RSTF9MMV9FTlRSWV9USU1FUl9TSElGVAkxNgogI2RlZmluZSBQTV9DVFJMX1BNX1JFUV9USU1FUl9NQVNLCTB4RgogI2RlZmluZSBQTV9DVFJMX1BNX1JFUV9USU1FUl9TSElGVAkyMAotI2RlZmluZSBQTV9DVFJMX0xDS0RFVF9USU1FUl9NQVNLCTB4M0YKKyNkZWZpbmUgUE1fQ1RSTF9MQ0tERVRfVElNRVJfTUFTSwkweEYKICNkZWZpbmUgUE1fQ1RSTF9MQ0tERVRfVElNRVJfU0hJRlQJMjQKICNkZWZpbmUgUE1fQ1RSTF9FTl9CVUZTX1JYX0wwUwkJMHgxMDAwMDAwMAogI2RlZmluZSBQTV9DVFJMX1NBX0RMWV9FTgkJMHgyMDAwMDAwMAogI2RlZmluZSBQTV9DVFJMX01BQ19BU1BNX0NISwkJMHg0MDAwMDAwMAogI2RlZmluZSBQTV9DVFJMX0hPVFJTVAkJCTB4ODAwMDAwMDAKIAorI2RlZmluZSBSRUdfTFRTU01fSURfQ1RSTAkJMHgxMkZDCisjZGVmaW5lIExUU1NNX0lEX0VOX1dSTwkJCTB4MTAwMAogLyogU2VsZW5lIE1hc3RlciBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lIFJFR19NQVNURVJfQ1RSTAkJCTB4MTQwMAogI2RlZmluZSBNQVNURVJfQ1RSTF9TT0ZUX1JTVCAgICAgICAgICAgIDB4MQogI2RlZmluZSBNQVNURVJfQ1RSTF9URVNUX01PREVfTUFTSwkweDMKICNkZWZpbmUgTUFTVEVSX0NUUkxfVEVTVF9NT0RFX1NISUZUCTIKICNkZWZpbmUgTUFTVEVSX0NUUkxfQkVSVF9TVEFSVAkJMHgxMAorI2RlZmluZSBNQVNURVJfQ1RSTF9PT0JfRElTX09GRgkJMHg0MAorI2RlZmluZSBNQVNURVJfQ1RSTF9TQV9USU1FUl9FTgkJMHg4MAogI2RlZmluZSBNQVNURVJfQ1RSTF9NVElNRVJfRU4gICAgICAgICAgIDB4MTAwCiAjZGVmaW5lIE1BU1RFUl9DVFJMX01BTlVBTF9JTlQgICAgICAgICAgMHgyMDAKICNkZWZpbmUgTUFTVEVSX0NUUkxfVFhfSVRJTUVSX0VOCTB4NDAwCkBAIC0yMjAsNiArMjMwLDEyIEBACiAJCUdQSFlfQ1RSTF9QV0RPV05fSFcJfFwKIAkJR1BIWV9DVFJMX1BIWV9JRERRKQogCisjZGVmaW5lIEdQSFlfQ1RSTF9QT1dFUl9TQVZJTkcgKAlcCisJCUdQSFlfQ1RSTF9TRUxfQU5BX1JTVAl8XAorCQlHUEhZX0NUUkxfSElCX0VOCXxcCisJCUdQSFlfQ1RSTF9ISUJfUFVMU0UJfFwKKwkJR1BIWV9DVFJMX1BXRE9XTl9IVwl8XAorCQlHUEhZX0NUUkxfUEhZX0lERFEpCiAvKiBCbG9jayBJRExFIFN0YXR1cyBSZWdpc3RlciAqLwogI2RlZmluZSBSRUdfSURMRV9TVEFUVVMgIAkJMHgxNDEwCiAjZGVmaW5lIElETEVfU1RBVFVTX01BU0sJCTB4MDBGRgpAQCAtMjg3LDYgKzMwMywxNCBAQAogI2RlZmluZSBTRVJERVNfTE9DS19ERVRFQ1QgICAgICAgICAgCTB4MSAgLyogU2VyRGVzIGxvY2sgZGV0ZWN0ZWQuIFRoaXMgc2lnbmFsCiAJCQkJCSAgICAgICogY29tZXMgZnJvbSBBbmFsb2cgU2VyRGVzICovCiAjZGVmaW5lIFNFUkRFU19MT0NLX0RFVEVDVF9FTiAgICAgICAJMHgyICAvKiAxOiBFbmFibGUgU2VyRGVzIExvY2sgZGV0ZWN0IGZ1bmN0aW9uICovCisjZGVmaW5lIFNFUkRFU19MT0NLX1NUU19TRUxGQl9QTExfU0hJRlQgMHhFCisjZGVmaW5lIFNFUkRFU19MT0NLX1NUU19TRUxGQl9QTExfTUFTSyAgMHgzCisjZGVmaW5lIFNFUkRFU19PVkNMS18xOF8yNQkJMHgwCisjZGVmaW5lIFNFUkRFU19PVkNMS18xMl8xOAkJMHgxCisjZGVmaW5lIFNFUkRFU19PVkNMS18wXzQJCTB4MgorI2RlZmluZSBTRVJERVNfT1ZDTEtfNF8xMgkJMHgzCisjZGVmaW5lIFNFUkRFU19NQUNfQ0xLX1NMT1dET1dOCQkweDIwMDAwCisjZGVmaW5lIFNFUkRFU19QWUhfQ0xLX1NMT1dET1dOCQkweDQwMDAwCiAKIC8qIE1BQyBDb250cm9sIFJlZ2lzdGVyICAqLwogI2RlZmluZSBSRUdfTUFDX0NUUkwgICAgICAgICAJCTB4MTQ4MApAQCAtNjkzLDYgKzcxNywyMSBAQAogI2RlZmluZSBSRUdfTUFDX1RYX1NUQVRVU19CSU4gCQkweDE3NjAKICNkZWZpbmUgUkVHX01BQ19UWF9TVEFUVVNfRU5EIAkJMHgxN2MwCiAKKyNkZWZpbmUgUkVHX0NMS19HQVRJTkdfQ1RSTAkJMHgxODE0CisjZGVmaW5lIENMS19HQVRJTkdfRE1BV19FTgkJMHgwMDAxCisjZGVmaW5lIENMS19HQVRJTkdfRE1BUl9FTgkJMHgwMDAyCisjZGVmaW5lIENMS19HQVRJTkdfVFhRX0VOCQkweDAwMDQKKyNkZWZpbmUgQ0xLX0dBVElOR19SWFFfRU4JCTB4MDAwOAorI2RlZmluZSBDTEtfR0FUSU5HX1RYTUFDX0VOCQkweDAwMTAKKyNkZWZpbmUgQ0xLX0dBVElOR19SWE1BQ19FTgkJMHgwMDIwCisKKyNkZWZpbmUgQ0xLX0dBVElOR19FTl9BTEwJKENMS19HQVRJTkdfRE1BV19FTiB8XAorCQkJCSBDTEtfR0FUSU5HX0RNQVJfRU4gfFwKKwkJCQkgQ0xLX0dBVElOR19UWFFfRU4gIHxcCisJCQkJIENMS19HQVRJTkdfUlhRX0VOICB8XAorCQkJCSBDTEtfR0FUSU5HX1RYTUFDX0VOfFwKKwkJCQkgQ0xLX0dBVElOR19SWE1BQ19FTikKKwogLyogREVCVUcgQUREUiAqLwogI2RlZmluZSBSRUdfREVCVUdfREFUQTAgCQkweDE5MDAKICNkZWZpbmUgUkVHX0RFQlVHX0RBVEExIAkJMHgxOTA0CkBAIC03MzQsNiArNzczLDEwIEBACiAKICNkZWZpbmUgTUlJX1BIWVNJRDEJCQkweDAyCiAjZGVmaW5lIE1JSV9QSFlTSUQyCQkJMHgwMworI2RlZmluZSBMMURfTVBXX1BIWUlEMQkJCTB4RDAxQyAgLyogVjcgKi8KKyNkZWZpbmUgTDFEX01QV19QSFlJRDIJCQkweEQwMUQgIC8qIFYxLVY2ICovCisjZGVmaW5lIEwxRF9NUFdfUEhZSUQzCQkJMHhEMDFFICAvKiBWOCAqLworCiAKIC8qIEF1dG9uZWcgQWR2ZXJ0aXNlbWVudCBSZWdpc3RlciAqLwogI2RlZmluZSBNSUlfQURWRVJUSVNFCQkJMHgwNApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfbWFpbi5jCmluZGV4IDFjM2MwNDYuLmM3YjhlZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYworKysgYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19tYWluLmMKQEAgLTIxLDcgKzIxLDcgQEAKIAogI2luY2x1ZGUgImF0bDFjLmgiCiAKLSNkZWZpbmUgQVRMMUNfRFJWX1ZFUlNJT04gIjEuMC4wLjItTkFQSSIKKyNkZWZpbmUgQVRMMUNfRFJWX1ZFUlNJT04gIjEuMC4xLjAtTkFQSSIKIGNoYXIgYXRsMWNfZHJpdmVyX25hbWVbXSA9ICJhdGwxYyI7CiBjaGFyIGF0bDFjX2RyaXZlcl92ZXJzaW9uW10gPSBBVEwxQ19EUlZfVkVSU0lPTjsKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVFRBTlNJQ19MMkMgICAgICAweDEwNjIKQEAgLTI5LDcgKzI5LDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVEhFUk9TX0wyQ19CCTB4MjA2MCAvKiBBUjgxNTIgdjEuMSBGYXN0IDEwLzEwMCAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSEVST1NfTDJDX0IyCTB4MjA2MiAvKiBBUjgxNTIgdjIuMCBGYXN0IDEwLzEwMCAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSEVST1NfTDFECTB4MTA3MyAvKiBBUjgxNTEgdjEuMCBHaWdhYml0IDEwMDAgKi8KLQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSEVST1NfTDFEXzJfMAkweDEwODMgLyogQVI4MTUxIHYyLjAgR2lnYWJpdCAxMDAwICovCiAjZGVmaW5lIEwyQ0JfVjEwCQkJMHhjMAogI2RlZmluZSBMMkNCX1YxMQkJCTB4YzEKIApAQCAtOTcsNyArOTcsMjggQEAKIAogc3RhdGljIGNvbnN0IHUzMiBhdGwxY19kZWZhdWx0X21zZyA9IE5FVElGX01TR19EUlYgfCBORVRJRl9NU0dfUFJPQkUgfAogCU5FVElGX01TR19MSU5LIHwgTkVUSUZfTVNHX1RJTUVSIHwgTkVUSUZfTVNHX0lGRE9XTiB8IE5FVElGX01TR19JRlVQOworc3RhdGljIHZvaWQgYXRsMWNfcGNpZV9wYXRjaChzdHJ1Y3QgYXRsMWNfaHcgKmh3KQoreworCXUzMiBkYXRhOwogCisJQVRfUkVBRF9SRUcoaHcsIFJFR19QQ0lFX1BIWU1JU0MsICZkYXRhKTsKKwlkYXRhIHw9IFBDSUVfUEhZTUlTQ19GT1JDRV9SQ1ZfREVUOworCUFUX1dSSVRFX1JFRyhodywgUkVHX1BDSUVfUEhZTUlTQywgZGF0YSk7CisKKwlpZiAoaHctPm5pY190eXBlID09IGF0aHJfbDJjX2IgJiYgaHctPnJldmlzaW9uX2lkID09IEwyQ0JfVjEwKSB7CisJCUFUX1JFQURfUkVHKGh3LCBSRUdfUENJRV9QSFlNSVNDMiwgJmRhdGEpOworCisJCWRhdGEgJj0gfihQQ0lFX1BIWU1JU0MyX1NFUkRFU19DRFJfTUFTSyA8PAorCQkJUENJRV9QSFlNSVNDMl9TRVJERVNfQ0RSX1NISUZUKTsKKwkJZGF0YSB8PSAzIDw8IFBDSUVfUEhZTUlTQzJfU0VSREVTX0NEUl9TSElGVDsKKwkJZGF0YSAmPSB+KFBDSUVfUEhZTUlTQzJfU0VSREVTX1RIX01BU0sgPDwKKwkJCVBDSUVfUEhZTUlTQzJfU0VSREVTX1RIX1NISUZUKTsKKwkJZGF0YSB8PSAzIDw8IFBDSUVfUEhZTUlTQzJfU0VSREVTX1RIX1NISUZUOworCQlBVF9XUklURV9SRUcoaHcsIFJFR19QQ0lFX1BIWU1JU0MyLCBkYXRhKTsKKwl9Cit9CisKKy8qIEZJWE1FOiBubyBuZWVkIGFueSBtb3JlID8gKi8KIC8qCiAgKiBhdGwxY19pbml0X3BjaWUgLSBpbml0IFBDSUUgbW9kdWxlCiAgKi8KQEAgLTEyNyw2ICsxNDgsMTEgQEAKIAlkYXRhICY9IH5QQ0lFX1VDX1NFUlZSSVRZX0ZDUDsKIAlBVF9XUklURV9SRUcoaHcsIFJFR19QQ0lFX1VDX1NFVkVSSVRZLCBkYXRhKTsKIAorCUFUX1JFQURfUkVHKGh3LCBSRUdfTFRTU01fSURfQ1RSTCwgJmRhdGEpOworCWRhdGEgJj0gfkxUU1NNX0lEX0VOX1dSTzsKKwlBVF9XUklURV9SRUcoaHcsIFJFR19MVFNTTV9JRF9DVFJMLCBkYXRhKTsKKworCWF0bDFjX3BjaWVfcGF0Y2goaHcpOwogCWlmIChmbGFnICYgQVRMMUNfUENJRV9MMFNfTDFfRElTQUJMRSkKIAkJYXRsMWNfZGlzYWJsZV9sMHNfbDEoaHcpOwogCWlmIChmbGFnICYgQVRMMUNfUENJRV9QSFlfUkVTRVQpCkBAIC0xMzUsNyArMTYxLDcgQEAKIAkJQVRfV1JJVEVfUkVHKGh3LCBSRUdfR1BIWV9DVFJMLAogCQkJR1BIWV9DVFJMX0RFRkFVTFQgfCBHUEhZX0NUUkxfRVhUX1JFU0VUKTsKIAotCW1zbGVlcCgxKTsKKwltc2xlZXAoNSk7CiB9CiAKIC8qCkBAIC0xNTksNiArMTg1LDcgQEAKIHsKIAlhdG9taWNfaW5jKCZhZGFwdGVyLT5pcnFfc2VtKTsKIAlBVF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSRUdfSU1SLCAwKTsKKwlBVF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSRUdfSVNSLCBJU1JfRElTX0lOVCk7CiAJQVRfV1JJVEVfRkxVU0goJmFkYXB0ZXItPmh3KTsKIAlzeW5jaHJvbml6ZV9pcnEoYWRhcHRlci0+cGRldi0+aXJxKTsKIH0KQEAgLTIzMSwxNSArMjU4LDE1IEBACiAKIAlpZiAoKHBoeV9kYXRhICYgQk1TUl9MU1RBVFVTKSA9PSAwKSB7CiAJCS8qIGxpbmsgZG93biAqLwotCQlpZiAobmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7Ci0JCQlody0+aGliZXJuYXRlID0gdHJ1ZTsKLQkJCWlmIChhdGwxY19zdG9wX21hYyhodykgIT0gMCkKLQkJCQlpZiAobmV0aWZfbXNnX2h3KGFkYXB0ZXIpKQotCQkJCQlkZXZfd2FybigmcGRldi0+ZGV2LAotCQkJCQkJInN0b3AgbWFjIGZhaWxlZFxuIik7Ci0JCQlhdGwxY19zZXRfYXNwbShodywgZmFsc2UpOwotCQl9CisJCWh3LT5oaWJlcm5hdGUgPSB0cnVlOworCQlpZiAoYXRsMWNfc3RvcF9tYWMoaHcpICE9IDApCisJCQlpZiAobmV0aWZfbXNnX2h3KGFkYXB0ZXIpKQorCQkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJzdG9wIG1hYyBmYWlsZWRcbiIpOworCQlhdGwxY19zZXRfYXNwbShodywgZmFsc2UpOwogCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJCWF0bDFjX3BoeV9yZXNldChodyk7CisJCWF0bDFjX3BoeV9pbml0KCZhZGFwdGVyLT5odyk7CiAJfSBlbHNlIHsKIAkJLyogTGluayBVcCAqLwogCQlody0+aGliZXJuYXRlID0gZmFsc2U7CkBAIC0zMDgsNiArMzM1LDcgQEAKIAluZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAKIAlpZiAoYWRhcHRlci0+d29ya19ldmVudCAmIEFUTDFDX1dPUktfRVZFTlRfUkVTRVQpIHsKKwkJYWRhcHRlci0+d29ya19ldmVudCAmPSB+QVRMMUNfV09SS19FVkVOVF9SRVNFVDsKIAkJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOwogCQlhdGwxY19kb3duKGFkYXB0ZXIpOwogCQlhdGwxY191cChhZGFwdGVyKTsKQEAgLTMxNSw4ICszNDMsMTEgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChhZGFwdGVyLT53b3JrX2V2ZW50ICYgQVRMMUNfV09SS19FVkVOVF9MSU5LX0NIQU5HRSkKKwlpZiAoYWRhcHRlci0+d29ya19ldmVudCAmIEFUTDFDX1dPUktfRVZFTlRfTElOS19DSEFOR0UpIHsKKwkJYWRhcHRlci0+d29ya19ldmVudCAmPSB+QVRMMUNfV09SS19FVkVOVF9MSU5LX0NIQU5HRTsKIAkJYXRsMWNfY2hlY2tfbGlua19zdGF0dXMoYWRhcHRlcik7CisJfQorCXJldHVybjsKIH0KIAogCkBAIC00NzYsNiArNTA3LDEzIEBACiAJCW5ldGRldi0+bXR1ID0gbmV3X210dTsKIAkJYWRhcHRlci0+aHcubWF4X2ZyYW1lX3NpemUgPSBuZXdfbXR1OwogCQlhdGwxY19zZXRfcnhidWZzaXplKGFkYXB0ZXIsIG5ldGRldik7CisJCWlmIChuZXdfbXR1ID4gTUFYX1RTT19GUkFNRV9TSVpFKSB7CisJCQlhZGFwdGVyLT5uZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKKwkJCWFkYXB0ZXItPm5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPNjsKKwkJfSBlbHNlIHsKKwkJCWFkYXB0ZXItPm5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CisJCQlhZGFwdGVyLT5uZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKKwkJfQogCQlhdGwxY19kb3duKGFkYXB0ZXIpOwogCQlhdGwxY191cChhZGFwdGVyKTsKIAkJY2xlYXJfYml0KF9fQVRfUkVTRVRUSU5HLCAmYWRhcHRlci0+ZmxhZ3MpOwpAQCAtNjEzLDYgKzY1MSw5IEBACiAJY2FzZSBQQ0lfREVWSUNFX0lEX0FUSEVST1NfTDFEOgogCQlody0+bmljX3R5cGUgPSBhdGhyX2wxZDsKIAkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX0FUSEVST1NfTDFEXzJfMDoKKwkJaHctPm5pY190eXBlID0gYXRocl9sMWRfMjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtNjI3LDkgKzY2OCw3IEBACiAJQVRfUkVBRF9SRUcoaHcsIFJFR19QSFlfU1RBVFVTLCAmcGh5X3N0YXR1c19kYXRhKTsKIAlBVF9SRUFEX1JFRyhodywgUkVHX0xJTktfQ1RSTCwgJmxpbmtfY3RybF9kYXRhKTsKIAotCWh3LT5jdHJsX2ZsYWdzID0gQVRMMUNfSU5UUl9DTEVBUl9PTl9SRUFEIHwKLQkJCSBBVEwxQ19JTlRSX01PRFJUX0VOQUJMRSAgfAotCQkJIEFUTDFDX1JYX0lQVjZfQ0hLU1VNCSAgfAorCWh3LT5jdHJsX2ZsYWdzID0gQVRMMUNfSU5UUl9NT0RSVF9FTkFCTEUgIHwKIAkJCSBBVEwxQ19UWFFfTU9ERV9FTkhBTkNFOwogCWlmIChsaW5rX2N0cmxfZGF0YSAmIExJTktfQ1RSTF9MMFNfRU4pCiAJCWh3LT5jdHJsX2ZsYWdzIHw9IEFUTDFDX0FTUE1fTDBTX1NVUFBPUlQ7CkBAIC02MzcsMTIgKzY3NiwxMiBAQAogCQlody0+Y3RybF9mbGFncyB8PSBBVEwxQ19BU1BNX0wxX1NVUFBPUlQ7CiAJaWYgKGxpbmtfY3RybF9kYXRhICYgTElOS19DVFJMX0VYVF9TWU5DKQogCQlody0+Y3RybF9mbGFncyB8PSBBVEwxQ19MSU5LX0VYVF9TWU5DOworCWh3LT5jdHJsX2ZsYWdzIHw9IEFUTDFDX0FTUE1fQ1RSTF9NT047CiAKIAlpZiAoaHctPm5pY190eXBlID09IGF0aHJfbDFjIHx8Ci0JICAgIGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wxZCkgewotCQlody0+Y3RybF9mbGFncyB8PSBBVEwxQ19BU1BNX0NUUkxfTU9OOworCSAgICBody0+bmljX3R5cGUgPT0gYXRocl9sMWQgfHwKKwkgICAgaHctPm5pY190eXBlID09IGF0aHJfbDFkXzIpCiAJCWh3LT5saW5rX2NhcF9mbGFncyB8PSBBVEwxQ19MSU5LX0NBUF8xMDAwTTsKLQl9CiAJcmV0dXJuIDA7CiB9CiAvKgpAQCAtNjU3LDYgKzY5Niw4IEBACiB7CiAJc3RydWN0IGF0bDFjX2h3ICpodyAgID0gJmFkYXB0ZXItPmh3OwogCXN0cnVjdCBwY2lfZGV2CSpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwl1MzIgcmV2aXNpb247CisKIAogCWFkYXB0ZXItPndvbCA9IDA7CiAJYWRhcHRlci0+bGlua19zcGVlZCA9IFNQRUVEXzA7CkBAIC02NjksNyArNzEwLDggQEAKIAlody0+ZGV2aWNlX2lkID0gcGRldi0+ZGV2aWNlOwogCWh3LT5zdWJzeXN0ZW1fdmVuZG9yX2lkID0gcGRldi0+c3Vic3lzdGVtX3ZlbmRvcjsKIAlody0+c3Vic3lzdGVtX2lkID0gcGRldi0+c3Vic3lzdGVtX2RldmljZTsKLQorCUFUX1JFQURfUkVHKGh3LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZyZXZpc2lvbik7CisJaHctPnJldmlzaW9uX2lkID0gcmV2aXNpb24gJiAweEZGOwogCS8qIGJlZm9yZSBsaW5rIHVwLCB3ZSBhc3N1bWUgaGliZXJuYXRlIGlzIHRydWUgKi8KIAlody0+aGliZXJuYXRlID0gdHJ1ZTsKIAlody0+bWVkaWFfdHlwZSA9IE1FRElBX1RZUEVfQVVUT19TRU5TT1I7CkBAIC05NzQsNiArMTAxNiw3IEBACiAJc3RydWN0IGF0bDFjX2NtYiAqY21iID0gKHN0cnVjdCBhdGwxY19jbWIgKikgJmFkYXB0ZXItPmNtYjsKIAlzdHJ1Y3QgYXRsMWNfc21iICpzbWIgPSAoc3RydWN0IGF0bDFjX3NtYiAqKSAmYWRhcHRlci0+c21iOwogCWludCBpOworCXUzMiBkYXRhOwogCiAJLyogVFBEICovCiAJQVRfV1JJVEVfUkVHKGh3LCBSRUdfVFhfQkFTRV9BRERSX0hJLApAQCAtMTAxNyw2ICsxMDYwLDIzIEBACiAJCQkodTMyKSgoc21iLT5kbWEgJiBBVF9ETUFfSElfQUREUl9NQVNLKSA+PiAzMikpOwogCUFUX1dSSVRFX1JFRyhodywgUkVHX1NNQl9CQVNFX0FERFJfTE8sCiAJCQkodTMyKShzbWItPmRtYSAmIEFUX0RNQV9MT19BRERSX01BU0spKTsKKwlpZiAoaHctPm5pY190eXBlID09IGF0aHJfbDJjX2IpIHsKKwkJQVRfV1JJVEVfUkVHKGh3LCBSRUdfU1JBTV9SWEZfTEVOLCAweDAyYTBMKTsKKwkJQVRfV1JJVEVfUkVHKGh3LCBSRUdfU1JBTV9UWEZfTEVOLCAweDAxMDBMKTsKKwkJQVRfV1JJVEVfUkVHKGh3LCBSRUdfU1JBTV9SWEZfQUREUiwgMHgwMjlmMDAwMEwpOworCQlBVF9XUklURV9SRUcoaHcsIFJFR19TUkFNX1JGRDBfSU5GTywgMHgwMmJmMDJhMEwpOworCQlBVF9XUklURV9SRUcoaHcsIFJFR19TUkFNX1RYRl9BRERSLCAweDAzYmYwMmMwTCk7CisJCUFUX1dSSVRFX1JFRyhodywgUkVHX1NSQU1fVFJEX0FERFIsIDB4MDNkZjAzYzBMKTsKKwkJQVRfV1JJVEVfUkVHKGh3LCBSRUdfVFhGX1dBVEVSX01BUkssIDApOwkvKiBUWCB3YXRlcm1hcmssIHRvIGVudGVyIGwxIHN0YXRlLiovCisJCUFUX1dSSVRFX1JFRyhodywgUkVHX1JYRF9ETUFfQ1RSTCwgMCk7CQkvKiBSWEQgdGhyZXNob2xkLiovCisJfQorCWlmIChody0+bmljX3R5cGUgPT0gYXRocl9sMmNfYiB8fCBody0+bmljX3R5cGUgPT0gYXRocl9sMWRfMikgeworCQkJLyogUG93ZXIgU2F2aW5nIGZvciBMMmNfQiAqLworCQlBVF9SRUFEX1JFRyhodywgUkVHX1NFUkRFU19MT0NLLCAmZGF0YSk7CisJCWRhdGEgfD0gU0VSREVTX01BQ19DTEtfU0xPV0RPV047CisJCWRhdGEgfD0gU0VSREVTX1BZSF9DTEtfU0xPV0RPV047CisJCUFUX1dSSVRFX1JFRyhodywgUkVHX1NFUkRFU19MT0NLLCBkYXRhKTsKKwl9CiAJLyogTG9hZCBhbGwgb2YgYmFzZSBhZGRyZXNzIGFib3ZlICovCiAJQVRfV1JJVEVfUkVHKGh3LCBSRUdfTE9BRF9QVFIsIDEpOwogfQpAQCAtMTAyOSw2ICsxMDg5LDcgQEAKIAl1MTYgdHhfb2ZmbG9hZF90aHJlc2g7CiAJdTMyIHR4cV9jdHJsX2RhdGE7CiAJdTMyIGV4dHJhX3NpemUgPSAwOyAgICAgLyogSnVtYm8gZnJhbWUgdGhyZXNob2xkIGluIFFXT1JEIHVuaXQgKi8KKwl1MzIgbWF4X3BheV9sb2FkX2RhdGE7CiAKIAlleHRyYV9zaXplID0gRVRIX0hMRU4gKyBWTEFOX0hMRU4gKyBFVEhfRkNTX0xFTjsKIAl0eF9vZmZsb2FkX3RocmVzaCA9IE1BWF9UWF9PRkZMT0FEX1RIUkVTSDsKQEAgLTEwNDYsOCArMTEwNywxMSBAQAogCQkJVFhRX05VTV9UUERfQlVSU1RfU0hJRlQ7CiAJaWYgKGh3LT5jdHJsX2ZsYWdzICYgQVRMMUNfVFhRX01PREVfRU5IQU5DRSkKIAkJdHhxX2N0cmxfZGF0YSB8PSBUWFFfQ1RSTF9FTkhfTU9ERTsKLQl0eHFfY3RybF9kYXRhIHw9IChhdGwxY19wYXlfbG9hZF9zaXplW2h3LT5kbWFyX2Jsb2NrXSAmCisJbWF4X3BheV9sb2FkX2RhdGEgPSAoYXRsMWNfcGF5X2xvYWRfc2l6ZVtody0+ZG1hcl9ibG9ja10gJgogCQkJVFhRX1RYRl9CVVJTVF9OVU1fTUFTSykgPDwgVFhRX1RYRl9CVVJTVF9OVU1fU0hJRlQ7CisJaWYgKGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wyY19iIHx8IGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wyY19iMikKKwkJbWF4X3BheV9sb2FkX2RhdGEgPj49IDE7CisJdHhxX2N0cmxfZGF0YSB8PSBtYXhfcGF5X2xvYWRfZGF0YTsKIAogCUFUX1dSSVRFX1JFRyhodywgUkVHX1RYUV9DVFJMLCB0eHFfY3RybF9kYXRhKTsKIH0KQEAgLTEwNzgsNyArMTE0Miw3IEBACiAJcnhxX2N0cmxfZGF0YSB8PSAoaHctPnJzc19oYXNoX2JpdHMgJiBSU1NfSEFTSF9CSVRTX01BU0spIDw8CiAJCQlSU1NfSEFTSF9CSVRTX1NISUZUOwogCWlmIChody0+Y3RybF9mbGFncyAmIEFUTDFDX0FTUE1fQ1RSTF9NT04pCi0JCXJ4cV9jdHJsX2RhdGEgfD0gKEFTUE1fVEhSVVBVVF9MSU1JVF8xMDBNICYKKwkJcnhxX2N0cmxfZGF0YSB8PSAoQVNQTV9USFJVUFVUX0xJTUlUXzFNICYKIAkJCUFTUE1fVEhSVVBVVF9MSU1JVF9NQVNLKSA8PCBBU1BNX1RIUlVQVVRfTElNSVRfU0hJRlQ7CiAKIAlBVF9XUklURV9SRUcoaHcsIFJFR19SWFFfQ1RSTCwgcnhxX2N0cmxfZGF0YSk7CkBAIC0xMTk4LDIxICsxMjYyLDIzIEBACiB7CiAJc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGF0bDFjX2FkYXB0ZXIgKilody0+YWRhcHRlcjsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0JaW50IHJldDsKKwl1MzIgbWFzdGVyX2N0cmxfZGF0YSA9IDA7CiAKIAlBVF9XUklURV9SRUcoaHcsIFJFR19JTVIsIDApOwogCUFUX1dSSVRFX1JFRyhodywgUkVHX0lTUiwgSVNSX0RJU19JTlQpOwogCi0JcmV0ID0gYXRsMWNfc3RvcF9tYWMoaHcpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJYXRsMWNfc3RvcF9tYWMoaHcpOwogCS8qCiAJICogSXNzdWUgU29mdCBSZXNldCB0byB0aGUgTUFDLiAgVGhpcyB3aWxsIHJlc2V0IHRoZSBjaGlwJ3MKIAkgKiB0cmFuc21pdCwgcmVjZWl2ZSwgRE1BLiAgSXQgd2lsbCBub3QgZWZmZWN0CiAJICogdGhlIGN1cnJlbnQgUENJIGNvbmZpZ3VyYXRpb24uICBUaGUgZ2xvYmFsIHJlc2V0IGJpdCBpcyBzZWxmLQogCSAqIGNsZWFyaW5nLCBhbmQgc2hvdWxkIGNsZWFyIHdpdGhpbiBhIG1pY3Jvc2Vjb25kLgogCSAqLwotCUFUX1dSSVRFX1JFR1coaHcsIFJFR19NQVNURVJfQ1RSTCwgTUFTVEVSX0NUUkxfU09GVF9SU1QpOworCUFUX1JFQURfUkVHKGh3LCBSRUdfTUFTVEVSX0NUUkwsICZtYXN0ZXJfY3RybF9kYXRhKTsKKwltYXN0ZXJfY3RybF9kYXRhIHw9IE1BU1RFUl9DVFJMX09PQl9ESVNfT0ZGOworCUFUX1dSSVRFX1JFR1coaHcsIFJFR19NQVNURVJfQ1RSTCwgKChtYXN0ZXJfY3RybF9kYXRhIHwgTUFTVEVSX0NUUkxfU09GVF9SU1QpCisJCQkmIDB4RkZGRikpOworCiAJQVRfV1JJVEVfRkxVU0goaHcpOwogCW1zbGVlcCgxMCk7CiAJLyogV2FpdCBhdCBsZWFzdCAxMG1zIGZvciBBbGwgbW9kdWxlIHRvIGJlIElkbGUgKi8KQEAgLTEyNTMsNDIgKzEzMTksMzkgQEAKIHsKIAl1MzIgcG1fY3RybF9kYXRhOwogCXUzMiBsaW5rX2N0cmxfZGF0YTsKKwl1MzIgbGlua19sMV90aW1lciA9IDB4RjsKIAogCUFUX1JFQURfUkVHKGh3LCBSRUdfUE1fQ1RSTCwgJnBtX2N0cmxfZGF0YSk7CiAJQVRfUkVBRF9SRUcoaHcsIFJFR19MSU5LX0NUUkwsICZsaW5rX2N0cmxfZGF0YSk7Ci0JcG1fY3RybF9kYXRhICY9IH5QTV9DVFJMX1NFUkRFU19QRF9FWF9MMTsKIAorCXBtX2N0cmxfZGF0YSAmPSB+UE1fQ1RSTF9TRVJERVNfUERfRVhfTDE7CiAJcG1fY3RybF9kYXRhICY9ICB+KFBNX0NUUkxfTDFfRU5UUllfVElNRVJfTUFTSyA8PAogCQkJUE1fQ1RSTF9MMV9FTlRSWV9USU1FUl9TSElGVCk7CiAJcG1fY3RybF9kYXRhICY9IH4oUE1fQ1RSTF9MQ0tERVRfVElNRVJfTUFTSyA8PAotCQkJICBQTV9DVFJMX0xDS0RFVF9USU1FUl9TSElGVCk7CisJCQlQTV9DVFJMX0xDS0RFVF9USU1FUl9TSElGVCk7CisJcG1fY3RybF9kYXRhIHw9IEFUX0xDS0RFVF9USU1FUgk8PCBQTV9DVFJMX0xDS0RFVF9USU1FUl9TSElGVDsKIAotCXBtX2N0cmxfZGF0YSB8PSBQTV9DVFJMX01BQ19BU1BNX0NISzsKLQlwbV9jdHJsX2RhdGEgJj0gflBNX0NUUkxfQVNQTV9MMV9FTjsKLQlwbV9jdHJsX2RhdGEgfD0gUE1fQ1RSTF9SQkVSX0VOOwotCXBtX2N0cmxfZGF0YSB8PSBQTV9DVFJMX1NERVNfRU47Ci0KLQlpZiAoaHctPm5pY190eXBlID09IGF0aHJfbDJjX2IgfHwKLQkgICAgaHctPm5pY190eXBlID09IGF0aHJfbDFkIHx8Ci0JICAgIGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wyY19iMikgeworCWlmIChody0+bmljX3R5cGUgPT0gYXRocl9sMmNfYiB8fCBody0+bmljX3R5cGUgPT0gYXRocl9sMWQgfHwKKwkJaHctPm5pY190eXBlID09IGF0aHJfbDJjX2IyIHx8IGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wxZF8yKSB7CiAJCWxpbmtfY3RybF9kYXRhICY9IH5MSU5LX0NUUkxfRVhUX1NZTkM7CiAJCWlmICghKGh3LT5jdHJsX2ZsYWdzICYgQVRMMUNfQVBTX01PREVfRU5BQkxFKSkgewotCQkJaWYgKGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wyY19iICYmCi0JCQkgICAgaHctPnJldmlzaW9uX2lkID09IEwyQ0JfVjEwKQorCQkJaWYgKGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wyY19iICYmIGh3LT5yZXZpc2lvbl9pZCA9PSBMMkNCX1YxMCkKIAkJCQlsaW5rX2N0cmxfZGF0YSB8PSBMSU5LX0NUUkxfRVhUX1NZTkM7CiAJCX0KIAogCQlBVF9XUklURV9SRUcoaHcsIFJFR19MSU5LX0NUUkwsIGxpbmtfY3RybF9kYXRhKTsKIAotCQlwbV9jdHJsX2RhdGEgfD0gUE1fQ1RSTF9QQ0lFX1JFQ1Y7Ci0JCXBtX2N0cmxfZGF0YSB8PSBBVF9BU1BNX0wxX1RJTUVSIDw8IFBNX0NUUkxfUE1fUkVRX1RJTUVSX1NISUZUOwotCQlwbV9jdHJsX2RhdGEgJj0gflBNX0NUUkxfRU5fQlVGU19SWF9MMFM7CisJCXBtX2N0cmxfZGF0YSB8PSBQTV9DVFJMX1JDVlJfV1RfVElNRVI7CisJCXBtX2N0cmxfZGF0YSAmPSB+KFBNX0NUUkxfUE1fUkVRX1RJTUVSX01BU0sgPDwKKwkJCVBNX0NUUkxfUE1fUkVRX1RJTUVSX1NISUZUKTsKKwkJcG1fY3RybF9kYXRhIHw9IEFUX0FTUE1fTDFfVElNRVIgPDwKKwkJCVBNX0NUUkxfUE1fUkVRX1RJTUVSX1NISUZUOwogCQlwbV9jdHJsX2RhdGEgJj0gflBNX0NUUkxfU0FfRExZX0VOOwogCQlwbV9jdHJsX2RhdGEgJj0gflBNX0NUUkxfSE9UUlNUOwogCQlwbV9jdHJsX2RhdGEgfD0gMSA8PCBQTV9DVFJMX0wxX0VOVFJZX1RJTUVSX1NISUZUOwogCQlwbV9jdHJsX2RhdGEgfD0gUE1fQ1RSTF9TRVJERVNfUERfRVhfTDE7CiAJfQotCisJcG1fY3RybF9kYXRhIHw9IFBNX0NUUkxfTUFDX0FTUE1fQ0hLOwogCWlmIChsaW5rdXApIHsKIAkJcG1fY3RybF9kYXRhICY9IH5QTV9DVFJMX0FTUE1fTDFfRU47CiAJCXBtX2N0cmxfZGF0YSAmPSB+UE1fQ1RSTF9BU1BNX0wwU19FTjsKQEAgLTEyOTcsMjcgKzEzNjAsMjYgQEAKIAkJaWYgKGh3LT5jdHJsX2ZsYWdzICYgQVRMMUNfQVNQTV9MMFNfU1VQUE9SVCkKIAkJCXBtX2N0cmxfZGF0YSB8PSBQTV9DVFJMX0FTUE1fTDBTX0VOOwogCi0JCWlmIChody0+bmljX3R5cGUgPT0gYXRocl9sMmNfYiB8fAotCQkgICAgaHctPm5pY190eXBlID09IGF0aHJfbDFkIHx8Ci0JCSAgICBody0+bmljX3R5cGUgPT0gYXRocl9sMmNfYjIpIHsKKwkJaWYgKGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wyY19iIHx8IGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wxZCB8fAorCQkJaHctPm5pY190eXBlID09IGF0aHJfbDJjX2IyIHx8IGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wxZF8yKSB7CiAJCQlpZiAoaHctPm5pY190eXBlID09IGF0aHJfbDJjX2IpCiAJCQkJaWYgKCEoaHctPmN0cmxfZmxhZ3MgJiBBVEwxQ19BUFNfTU9ERV9FTkFCTEUpKQotCQkJCQlwbV9jdHJsX2RhdGEgJj0gUE1fQ1RSTF9BU1BNX0wwU19FTjsKKwkJCQkJcG1fY3RybF9kYXRhICY9IH5QTV9DVFJMX0FTUE1fTDBTX0VOOwogCQkJcG1fY3RybF9kYXRhICY9IH5QTV9DVFJMX1NFUkRFU19MMV9FTjsKIAkJCXBtX2N0cmxfZGF0YSAmPSB+UE1fQ1RSTF9TRVJERVNfUExMX0wxX0VOOwogCQkJcG1fY3RybF9kYXRhICY9IH5QTV9DVFJMX1NFUkRFU19CVURTX1JYX0wxX0VOOwogCQkJcG1fY3RybF9kYXRhIHw9IFBNX0NUUkxfQ0xLX1NXSF9MMTsKLQkJCWlmIChody0+YWRhcHRlci0+bGlua19zcGVlZCA9PSBTUEVFRF8xMDAgfHwKLQkJCSAgICBody0+YWRhcHRlci0+bGlua19zcGVlZCA9PSBTUEVFRF8xMDAwKSB7Ci0JCQkJcG1fY3RybF9kYXRhICY9Ci0JCQkJCX4oUE1fQ1RSTF9MMV9FTlRSWV9USU1FUl9NQVNLIDw8Ci0JCQkJCSAgUE1fQ1RSTF9MMV9FTlRSWV9USU1FUl9TSElGVCk7Ci0JCQkJaWYgKGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wxZCkKLQkJCQkJcG1fY3RybF9kYXRhIHw9IDB4RiA8PAotCQkJCQkJUE1fQ1RSTF9MMV9FTlRSWV9USU1FUl9TSElGVDsKLQkJCQllbHNlCi0JCQkJCXBtX2N0cmxfZGF0YSB8PSA3IDw8Ci0JCQkJCQlQTV9DVFJMX0wxX0VOVFJZX1RJTUVSX1NISUZUOworCQlpZiAoaHctPmFkYXB0ZXItPmxpbmtfc3BlZWQgPT0gU1BFRURfMTAwIHx8CisJCQkJaHctPmFkYXB0ZXItPmxpbmtfc3BlZWQgPT0gU1BFRURfMTAwMCkgeworCQkJCXBtX2N0cmxfZGF0YSAmPSAgfihQTV9DVFJMX0wxX0VOVFJZX1RJTUVSX01BU0sgPDwKKwkJCQkJUE1fQ1RSTF9MMV9FTlRSWV9USU1FUl9TSElGVCk7CisJCQkJaWYgKGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wyY19iKQorCQkJCQlsaW5rX2wxX3RpbWVyID0gNzsKKwkJCQllbHNlIGlmIChody0+bmljX3R5cGUgPT0gYXRocl9sMmNfYjIgfHwKKwkJCQkJaHctPm5pY190eXBlID09IGF0aHJfbDFkXzIpCisJCQkJCWxpbmtfbDFfdGltZXIgPSA0OworCQkJCXBtX2N0cmxfZGF0YSB8PSBsaW5rX2wxX3RpbWVyIDw8CisJCQkJCVBNX0NUUkxfTDFfRU5UUllfVElNRVJfU0hJRlQ7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlwbV9jdHJsX2RhdGEgfD0gUE1fQ1RSTF9TRVJERVNfTDFfRU47CkBAIC0xMzI2LDI0ICsxMzg4LDEyIEBACiAJCQlwbV9jdHJsX2RhdGEgJj0gflBNX0NUUkxfQ0xLX1NXSF9MMTsKIAkJCXBtX2N0cmxfZGF0YSAmPSB+UE1fQ1RSTF9BU1BNX0wwU19FTjsKIAkJCXBtX2N0cmxfZGF0YSAmPSB+UE1fQ1RSTF9BU1BNX0wxX0VOOwotCQl9Ci0JCWF0bDFjX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9EQkdfQUREUiwgMHgyOSk7Ci0JCWlmIChody0+YWRhcHRlci0+bGlua19zcGVlZCA9PSBTUEVFRF8xMCkKLQkJCWlmIChody0+bmljX3R5cGUgPT0gYXRocl9sMWQpCi0JCQkJYXRsMWNfd3JpdGVfcGh5X3JlZyhodywgTUlJX0RCR19BRERSLCAweEI2OUQpOwotCQkJZWxzZQotCQkJCWF0bDFjX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9EQkdfREFUQSwgMHhCNkREKTsKLQkJZWxzZSBpZiAoaHctPmFkYXB0ZXItPmxpbmtfc3BlZWQgPT0gU1BFRURfMTAwKQotCQkJYXRsMWNfd3JpdGVfcGh5X3JlZyhodywgTUlJX0RCR19EQVRBLCAweEIyREQpOwotCQllbHNlCi0JCQlhdGwxY193cml0ZV9waHlfcmVnKGh3LCBNSUlfREJHX0RBVEEsIDB4OTZERCk7CiAKKwkJfQogCX0gZWxzZSB7Ci0JCXBtX2N0cmxfZGF0YSAmPSB+UE1fQ1RSTF9TRVJERVNfQlVEU19SWF9MMV9FTjsKIAkJcG1fY3RybF9kYXRhICY9IH5QTV9DVFJMX1NFUkRFU19MMV9FTjsKIAkJcG1fY3RybF9kYXRhICY9IH5QTV9DVFJMX0FTUE1fTDBTX0VOOwogCQlwbV9jdHJsX2RhdGEgJj0gflBNX0NUUkxfU0VSREVTX1BMTF9MMV9FTjsKLQogCQlwbV9jdHJsX2RhdGEgfD0gUE1fQ1RSTF9DTEtfU1dIX0wxOwogCiAJCWlmIChody0+Y3RybF9mbGFncyAmIEFUTDFDX0FTUE1fTDFfU1VQUE9SVCkKQEAgLTEzNTEsOCArMTQwMSw5IEBACiAJCWVsc2UKIAkJCXBtX2N0cmxfZGF0YSAmPSB+UE1fQ1RSTF9BU1BNX0wxX0VOOwogCX0KLQogCUFUX1dSSVRFX1JFRyhodywgUkVHX1BNX0NUUkwsIHBtX2N0cmxfZGF0YSk7CisKKwlyZXR1cm47CiB9CiAKIHN0YXRpYyB2b2lkIGF0bDFjX3NldHVwX21hY19jdHJsKHN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyKQpAQCAtMTM5MSw3ICsxNDQyLDggQEAKIAkJbWFjX2N0cmxfZGF0YSB8PSBNQUNfQ1RSTF9NQ19BTExfRU47CiAKIAltYWNfY3RybF9kYXRhIHw9IE1BQ19DVFJMX1NJTkdMRV9QQVVTRV9FTjsKLQlpZiAoaHctPm5pY190eXBlID09IGF0aHJfbDFkIHx8IGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wyY19iMikgeworCWlmIChody0+bmljX3R5cGUgPT0gYXRocl9sMWQgfHwgaHctPm5pY190eXBlID09IGF0aHJfbDJjX2IyIHx8CisJICAgIGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wxZF8yKSB7CiAJCW1hY19jdHJsX2RhdGEgfD0gTUFDX0NUUkxfU1BFRURfTU9ERV9TVzsKIAkJbWFjX2N0cmxfZGF0YSB8PSBNQUNfQ1RSTF9IQVNIX0FMR19DUkMzMjsKIAl9CkBAIC0xNDA5LDYgKzE0NjEsNyBAQAogCXN0cnVjdCBhdGwxY19odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIG1hc3Rlcl9jdHJsX2RhdGEgPSAwOwogCXUzMiBpbnRyX21vZHJ0X2RhdGE7CisJdTMyIGRhdGE7CiAKIAkvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdHVzICovCiAJQVRfV1JJVEVfUkVHKGh3LCBSRUdfSVNSLCAweEZGRkZGRkZGKTsKQEAgLTE0MTgsNiArMTQ3MSwxNSBAQAogCSAqIEhXIHdpbGwgZW5hYmxlIHNlbGYgdG8gYXNzZXJ0IGludGVycnVwdCBldmVudCB0byBzeXN0ZW0gYWZ0ZXIKIAkgKiB3YWl0aW5nIHgtdGltZSBmb3Igc29mdHdhcmUgdG8gbm90aWZ5IGl0IGFjY2VwdCBpbnRlcnJ1cHQuCiAJICovCisKKwlkYXRhID0gQ0xLX0dBVElOR19FTl9BTEw7CisJaWYgKGh3LT5jdHJsX2ZsYWdzICYgQVRMMUNfQ0xLX0dBVElOR19FTikgeworCQlpZiAoaHctPm5pY190eXBlID09IGF0aHJfbDJjX2IpCisJCQlkYXRhICY9IH5DTEtfR0FUSU5HX1JYTUFDX0VOOworCX0gZWxzZQorCQlkYXRhID0gMDsKKwlBVF9XUklURV9SRUcoaHcsIFJFR19DTEtfR0FUSU5HX0NUUkwsIGRhdGEpOworCiAJQVRfV1JJVEVfUkVHKGh3LCBSRUdfSU5UX1JFVFJJR19USU1FUiwKIAkJaHctPmljdCAmIElOVF9SRVRSSUdfVElNRVJfTUFTSyk7CiAKQEAgLTE0MzYsNiArMTQ5OCw3IEBACiAJaWYgKGh3LT5jdHJsX2ZsYWdzICYgQVRMMUNfSU5UUl9DTEVBUl9PTl9SRUFEKQogCQltYXN0ZXJfY3RybF9kYXRhIHw9IE1BU1RFUl9DVFJMX0lOVF9SRENMUjsKIAorCW1hc3Rlcl9jdHJsX2RhdGEgfD0gTUFTVEVSX0NUUkxfU0FfVElNRVJfRU47CiAJQVRfV1JJVEVfUkVHKGh3LCBSRUdfTUFTVEVSX0NUUkwsIG1hc3Rlcl9jdHJsX2RhdGEpOwogCiAJaWYgKGh3LT5jdHJsX2ZsYWdzICYgQVRMMUNfQ01CX0VOQUJMRSkgewpAQCAtMTYyNCwxMSArMTY4Nyw5IEBACiAJCQkJCSJhdGwxYyBoYXJkd2FyZSBlcnJvciAoc3RhdHVzID0gMHgleClcbiIsCiAJCQkJCXN0YXR1cyAmIElTUl9FUlJPUik7CiAJCQkvKiByZXNldCBNQUMgKi8KLQkJCWh3LT5pbnRyX21hc2sgJj0gfklTUl9FUlJPUjsKLQkJCUFUX1dSSVRFX1JFRyhodywgUkVHX0lNUiwgaHctPmludHJfbWFzayk7CiAJCQlhZGFwdGVyLT53b3JrX2V2ZW50IHw9IEFUTDFDX1dPUktfRVZFTlRfUkVTRVQ7CiAJCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5jb21tb25fdGFzayk7Ci0JCQlicmVhazsKKwkJCXJldHVybiBJUlFfSEFORExFRDsKIAkJfQogCiAJCWlmIChzdGF0dXMgJiBJU1JfT1ZFUikKQEAgLTIzMDMsNyArMjM2NCw2IEBACiAJbmFwaV9kaXNhYmxlKCZhZGFwdGVyLT5uYXBpKTsKIAlhdGwxY19pcnFfZGlzYWJsZShhZGFwdGVyKTsKIAlhdGwxY19mcmVlX2lycShhZGFwdGVyKTsKLQlBVF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSRUdfSVNSLCBJU1JfRElTX0lOVCk7CiAJLyogcmVzZXQgTUFDIHRvIGRpc2FibGUgYWxsIFJYL1RYICovCiAJYXRsMWNfcmVzZXRfbWFjKCZhZGFwdGVyLT5odyk7CiAJbXNsZWVwKDEpOwpAQCAtMjM4Nyw3OSArMjQ0Nyw2OCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBhdGwxY19odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0JdTMyIGN0cmw7Ci0JdTMyIG1hY19jdHJsX2RhdGE7Ci0JdTMyIG1hc3Rlcl9jdHJsX2RhdGE7CisJdTMyIG1hY19jdHJsX2RhdGEgPSAwOworCXUzMiBtYXN0ZXJfY3RybF9kYXRhID0gMDsKIAl1MzIgd29sX2N0cmxfZGF0YSA9IDA7Ci0JdTE2IG1paV9ibXNyX2RhdGE7Ci0JdTE2IHNhdmVfYXV0b25lZ19hZHZlcnRpc2VkOwotCXUxNiBtaWlfaW50cl9zdGF0dXNfZGF0YTsKKwl1MTYgbWlpX2ludHJfc3RhdHVzX2RhdGEgPSAwOwogCXUzMiB3dWZjID0gYWRhcHRlci0+d29sOwotCXUzMiBpOwogCWludCByZXR2YWwgPSAwOwogCisJYXRsMWNfZGlzYWJsZV9sMHNfbDEoaHcpOwogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKIAkJV0FSTl9PTih0ZXN0X2JpdChfX0FUX1JFU0VUVElORywgJmFkYXB0ZXItPmZsYWdzKSk7CiAJCWF0bDFjX2Rvd24oYWRhcHRlcik7CiAJfQogCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKLQlhdGwxY19kaXNhYmxlX2wwc19sMShodyk7CiAJcmV0dmFsID0gcGNpX3NhdmVfc3RhdGUocGRldik7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKLQlpZiAod3VmYykgewotCQlBVF9SRUFEX1JFRyhodywgUkVHX01BU1RFUl9DVFJMLCAmbWFzdGVyX2N0cmxfZGF0YSk7Ci0JCW1hc3Rlcl9jdHJsX2RhdGEgJj0gfk1BU1RFUl9DVFJMX0NMS19TRUxfRElTOwogCi0JCS8qIGdldCBsaW5rIHN0YXR1cyAqLwotCQlhdGwxY19yZWFkX3BoeV9yZWcoaHcsIE1JSV9CTVNSLCAodTE2ICopJm1paV9ibXNyX2RhdGEpOwotCQlhdGwxY19yZWFkX3BoeV9yZWcoaHcsIE1JSV9CTVNSLCAodTE2ICopJm1paV9ibXNyX2RhdGEpOwotCQlzYXZlX2F1dG9uZWdfYWR2ZXJ0aXNlZCA9IGh3LT5hdXRvbmVnX2FkdmVydGlzZWQ7Ci0JCWh3LT5hdXRvbmVnX2FkdmVydGlzZWQgPSBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZjsKLQkJaWYgKGF0bDFjX3Jlc3RhcnRfYXV0b25lZyhodykgIT0gMCkKLQkJCWlmIChuZXRpZl9tc2dfbGluayhhZGFwdGVyKSkKLQkJCQlkZXZfd2FybigmcGRldi0+ZGV2LCAicGh5IGF1dG9uZWcgZmFpbGVkXG4iKTsKLQkJaHctPnBoeV9jb25maWd1cmVkID0gZmFsc2U7IC8qIHJlLWluaXQgUEhZIHdoZW4gcmVzdW1lICovCi0JCWh3LT5hdXRvbmVnX2FkdmVydGlzZWQgPSBzYXZlX2F1dG9uZWdfYWR2ZXJ0aXNlZDsKKwlpZiAod3VmYykKKwkJaWYgKGF0bDFjX3BoeV9wb3dlcl9zYXZpbmcoaHcpICE9IDApCisJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJwaHkgcG93ZXIgc2F2aW5nIGZhaWxlZCIpOworCisJQVRfUkVBRF9SRUcoaHcsIFJFR19NQVNURVJfQ1RSTCwgJm1hc3Rlcl9jdHJsX2RhdGEpOworCUFUX1JFQURfUkVHKGh3LCBSRUdfTUFDX0NUUkwsICZtYWNfY3RybF9kYXRhKTsKKworCW1hc3Rlcl9jdHJsX2RhdGEgJj0gfk1BU1RFUl9DVFJMX0NMS19TRUxfRElTOworCW1hY19jdHJsX2RhdGEgJj0gfihNQUNfQ1RSTF9QUk1MRU5fTUFTSyA8PCBNQUNfQ1RSTF9QUk1MRU5fU0hJRlQpOworCW1hY19jdHJsX2RhdGEgfD0gKCgodTMyKWFkYXB0ZXItPmh3LnByZWFtYmxlX2xlbiAmCisJCQlNQUNfQ1RSTF9QUk1MRU5fTUFTSykgPDwKKwkJCU1BQ19DVFJMX1BSTUxFTl9TSElGVCk7CisJbWFjX2N0cmxfZGF0YSAmPSB+KE1BQ19DVFJMX1NQRUVEX01BU0sgPDwgTUFDX0NUUkxfU1BFRURfU0hJRlQpOworCW1hY19jdHJsX2RhdGEgJj0gfk1BQ19DVFJMX0RVUExYOworCisJaWYgKHd1ZmMpIHsKKwkJbWFjX2N0cmxfZGF0YSB8PSBNQUNfQ1RSTF9SWF9FTjsKKwkJaWYgKGFkYXB0ZXItPmxpbmtfc3BlZWQgPT0gU1BFRURfMTAwMCB8fAorCQkJYWRhcHRlci0+bGlua19zcGVlZCA9PSBTUEVFRF8wKSB7CisJCQltYWNfY3RybF9kYXRhIHw9IGF0bDFjX21hY19zcGVlZF8xMDAwIDw8CisJCQkJCU1BQ19DVFJMX1NQRUVEX1NISUZUOworCQkJbWFjX2N0cmxfZGF0YSB8PSBNQUNfQ1RSTF9EVVBMWDsKKwkJfSBlbHNlCisJCQltYWNfY3RybF9kYXRhIHw9IGF0bDFjX21hY19zcGVlZF8xMF8xMDAgPDwKKwkJCQkJTUFDX0NUUkxfU1BFRURfU0hJRlQ7CisKKwkJaWYgKGFkYXB0ZXItPmxpbmtfZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQkJbWFjX2N0cmxfZGF0YSB8PSBNQUNfQ1RSTF9EVVBMWDsKKwogCQkvKiB0dXJuIG9uIG1hZ2ljIHBhY2tldCB3b2wgKi8KIAkJaWYgKHd1ZmMgJiBBVF9XVUZDX01BRykKLQkJCXdvbF9jdHJsX2RhdGEgPSBXT0xfTUFHSUNfRU4gfCBXT0xfTUFHSUNfUE1FX0VOOworCQkJd29sX2N0cmxfZGF0YSB8PSBXT0xfTUFHSUNfRU4gfCBXT0xfTUFHSUNfUE1FX0VOOwogCiAJCWlmICh3dWZjICYgQVRfV1VGQ19MTktDKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgQVRfU1VTUEVORF9MSU5LX1RJTUVPVVQ7IGkrKykgewotCQkJCW1zbGVlcCgxMDApOwotCQkJCWF0bDFjX3JlYWRfcGh5X3JlZyhodywgTUlJX0JNU1IsCi0JCQkJCSh1MTYgKikmbWlpX2Jtc3JfZGF0YSk7Ci0JCQkJaWYgKG1paV9ibXNyX2RhdGEgJiBCTVNSX0xTVEFUVVMpCi0JCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKChtaWlfYm1zcl9kYXRhICYgQk1TUl9MU1RBVFVTKSA9PSAwKQotCQkJCWlmIChuZXRpZl9tc2dfbGluayhhZGFwdGVyKSkKLQkJCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwKLQkJCQkJCSIlczogTGluayBtYXkgY2hhbmdlIgotCQkJCQkJIndoZW4gc3VzcGVuZFxuIiwKLQkJCQkJCWF0bDFjX2RyaXZlcl9uYW1lKTsKIAkJCXdvbF9jdHJsX2RhdGEgfD0gIFdPTF9MSU5LX0NIR19FTiB8IFdPTF9MSU5LX0NIR19QTUVfRU47CiAJCQkvKiBvbmx5IGxpbmsgdXAgY2FuIHdha2UgdXAgKi8KIAkJCWlmIChhdGwxY193cml0ZV9waHlfcmVnKGh3LCBNSUlfSUVSLCBJRVJfTElOS19VUCkgIT0gMCkgewotCQkJCWlmIChuZXRpZl9tc2dfbGluayhhZGFwdGVyKSkKLQkJCQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJCQkJIiVzOiByZWFkIHdyaXRlIHBoeSAiCi0JCQkJCQkicmVnaXN0ZXIgZmFpbGVkLlxuIiwKLQkJCQkJCWF0bDFjX2RyaXZlcl9uYW1lKTsKLQkJCQlnb3RvIHdvbF9kaXM7CisJCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiJXM6IHJlYWQgd3JpdGUgcGh5ICIKKwkJCQkJCSAgInJlZ2lzdGVyIGZhaWxlZC5cbiIsCisJCQkJCQkgIGF0bDFjX2RyaXZlcl9uYW1lKTsKIAkJCX0KIAkJfQogCQkvKiBjbGVhciBwaHkgaW50ZXJydXB0ICovCiAJCWF0bDFjX3JlYWRfcGh5X3JlZyhodywgTUlJX0lTUiwgJm1paV9pbnRyX3N0YXR1c19kYXRhKTsKIAkJLyogQ29uZmlnIE1BQyBDdHJsIHJlZ2lzdGVyICovCi0JCW1hY19jdHJsX2RhdGEgPSBNQUNfQ1RSTF9SWF9FTjsKLQkJLyogc2V0IHRvIDEwLzEwME0gaGFsdCBkdXBsZXggKi8KLQkJbWFjX2N0cmxfZGF0YSB8PSBhdGwxY19tYWNfc3BlZWRfMTBfMTAwIDw8IE1BQ19DVFJMX1NQRUVEX1NISUZUOwotCQltYWNfY3RybF9kYXRhIHw9ICgoKHUzMilhZGFwdGVyLT5ody5wcmVhbWJsZV9sZW4gJgotCQkJCSBNQUNfQ1RSTF9QUk1MRU5fTUFTSykgPDwKLQkJCQkgTUFDX0NUUkxfUFJNTEVOX1NISUZUKTsKLQogCQlpZiAoYWRhcHRlci0+dmxncnApCiAJCQltYWNfY3RybF9kYXRhIHw9IE1BQ19DVFJMX1JNVl9WTEFOOwogCkBAIC0yNDY3LDM3ICsyNTE2LDMwIEBACiAJCWlmICh3dWZjICYgQVRfV1VGQ19NQUcpCiAJCQltYWNfY3RybF9kYXRhIHw9IE1BQ19DVFJMX0JDX0VOOwogCi0JCWlmIChuZXRpZl9tc2dfaHcoYWRhcHRlcikpCi0JCQlkZXZfZGJnKCZwZGV2LT5kZXYsCi0JCQkJIiVzOiBzdXNwZW5kIE1BQz0weCV4XG4iLAotCQkJCWF0bDFjX2RyaXZlcl9uYW1lLCBtYWNfY3RybF9kYXRhKTsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LAorCQkJIiVzOiBzdXNwZW5kIE1BQz0weCV4XG4iLAorCQkJYXRsMWNfZHJpdmVyX25hbWUsIG1hY19jdHJsX2RhdGEpOwogCQlBVF9XUklURV9SRUcoaHcsIFJFR19NQVNURVJfQ1RSTCwgbWFzdGVyX2N0cmxfZGF0YSk7CiAJCUFUX1dSSVRFX1JFRyhodywgUkVHX1dPTF9DVFJMLCB3b2xfY3RybF9kYXRhKTsKIAkJQVRfV1JJVEVfUkVHKGh3LCBSRUdfTUFDX0NUUkwsIG1hY19jdHJsX2RhdGEpOwogCiAJCS8qIHBjaWUgcGF0Y2ggKi8KLQkJQVRfUkVBRF9SRUcoaHcsIFJFR19QQ0lFX1BIWU1JU0MsICZjdHJsKTsKLQkJY3RybCB8PSBQQ0lFX1BIWU1JU0NfRk9SQ0VfUkNWX0RFVDsKLQkJQVRfV1JJVEVfUkVHKGh3LCBSRUdfUENJRV9QSFlNSVNDLCBjdHJsKTsKKwkJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZwZGV2LT5kZXYsIDEpOwogCi0JCXBjaV9lbmFibGVfd2FrZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSwgMSk7Ci0JCWdvdG8gc3VzcGVuZF9leGl0OworCQlBVF9XUklURV9SRUcoaHcsIFJFR19HUEhZX0NUUkwsIEdQSFlfQ1RSTF9ERUZBVUxUIHwKKwkJCUdQSFlfQ1RSTF9FWFRfUkVTRVQpOworCQlwY2lfcHJlcGFyZV90b19zbGVlcChwZGV2KTsKKwl9IGVsc2UgeworCQlBVF9XUklURV9SRUcoaHcsIFJFR19HUEhZX0NUUkwsIEdQSFlfQ1RSTF9QT1dFUl9TQVZJTkcpOworCQltYXN0ZXJfY3RybF9kYXRhIHw9IE1BU1RFUl9DVFJMX0NMS19TRUxfRElTOworCQltYWNfY3RybF9kYXRhIHw9IGF0bDFjX21hY19zcGVlZF8xMF8xMDAgPDwgTUFDX0NUUkxfU1BFRURfU0hJRlQ7CisJCW1hY19jdHJsX2RhdGEgfD0gTUFDX0NUUkxfRFVQTFg7CisJCUFUX1dSSVRFX1JFRyhodywgUkVHX01BU1RFUl9DVFJMLCBtYXN0ZXJfY3RybF9kYXRhKTsKKwkJQVRfV1JJVEVfUkVHKGh3LCBSRUdfTUFDX0NUUkwsIG1hY19jdHJsX2RhdGEpOworCQlBVF9XUklURV9SRUcoaHcsIFJFR19XT0xfQ1RSTCwgMCk7CisJCWh3LT5waHlfY29uZmlndXJlZCA9IGZhbHNlOyAvKiByZS1pbml0IFBIWSB3aGVuIHJlc3VtZSAqLworCQlwY2lfZW5hYmxlX3dha2UocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSksIDApOwogCX0KLXdvbF9kaXM6Ci0KLQkvKiBXT0wgZGlzYWJsZWQgKi8KLQlBVF9XUklURV9SRUcoaHcsIFJFR19XT0xfQ1RSTCwgMCk7Ci0KLQkvKiBwY2llIHBhdGNoICovCi0JQVRfUkVBRF9SRUcoaHcsIFJFR19QQ0lFX1BIWU1JU0MsICZjdHJsKTsKLQljdHJsIHw9IFBDSUVfUEhZTUlTQ19GT1JDRV9SQ1ZfREVUOwotCUFUX1dSSVRFX1JFRyhodywgUkVHX1BDSUVfUEhZTUlTQywgY3RybCk7Ci0KLQlhdGwxY19waHlfZGlzYWJsZShodyk7Ci0JaHctPnBoeV9jb25maWd1cmVkID0gZmFsc2U7IC8qIHJlLWluaXQgUEhZIHdoZW4gcmVzdW1lICovCi0KLQlwY2lfZW5hYmxlX3dha2UocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSksIDApOwotc3VzcGVuZF9leGl0OgogCiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOwpAQCAtMjUxNiw5ICsyNTU4LDE5IEBACiAJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDApOwogCiAJQVRfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkVHX1dPTF9DVFJMLCAwKTsKKwlhdGwxY19yZXNldF9wY2llKCZhZGFwdGVyLT5odywgQVRMMUNfUENJRV9MMFNfTDFfRElTQUJMRSB8CisJCQlBVEwxQ19QQ0lFX1BIWV9SRVNFVCk7CiAKIAlhdGwxY19waHlfcmVzZXQoJmFkYXB0ZXItPmh3KTsKIAlhdGwxY19yZXNldF9tYWMoJmFkYXB0ZXItPmh3KTsKKwlhdGwxY19waHlfaW5pdCgmYWRhcHRlci0+aHcpOworCisjaWYgMAorCUFUX1JFQURfUkVHKCZhZGFwdGVyLT5odywgUkVHX1BNX0NUUkxTVEFULCAmcG1fZGF0YSk7CisJcG1fZGF0YSAmPSB+UE1fQ1RSTFNUQVRfUE1FX0VOOworCUFUX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFJFR19QTV9DVFJMU1RBVCwgcG1fZGF0YSk7CisjZW5kaWYKKwogCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQogCQlhdGwxY191cChhZGFwdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bHgvYXRsMS5oIGIvZHJpdmVycy9uZXQvYXRseC9hdGwxLmgKaW5kZXggMTQ2MzcyZi4uOWMwZGRiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRseC9hdGwxLmgKKysrIGIvZHJpdmVycy9uZXQvYXRseC9hdGwxLmgKQEAgLTQzNiw4ICs0MzYsOCBAQAogCV9fbGUxNiBidWZfbGVuOwkJLyogU2l6ZSBvZiB0aGUgcmVjZWl2ZSBidWZmZXIgaW4gaG9zdCBtZW1vcnkgKi8KIAl1MTYgY29hbGVzZTsJCS8qIFVwZGF0ZSBjb25zdW1lciBpbmRleCB0byBob3N0IGFmdGVyIHRoZQogCQkJCSAqIHJlY2VwdGlvbiBvZiB0aGlzIGZyYW1lICovCi0JLyogX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGlzIHJlcXVpcmVkICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwkvKiBfX3BhY2tlZCBpcyByZXF1aXJlZCAqLworfSBfX3BhY2tlZDsKIAogLyoKICAqIFRoZSBMMSB0cmFuc21pdCBwYWNrZXQgZGVzY3JpcHRvciBpcyBjb21wcmlzZWQgb2YgZm91ciAzMi1iaXQgd29yZHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKaW5kZXggZWNlNjEyOC4uMTVhZTZkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYwpAQCAtMTA0LDE0ICsxMDQsNiBAQAogICogY29tcGxldGUgaW1tZWRpYXRlbHkuCiAgKi8KIAotLyogVGhlc2UgYWRkcmVzc2VzIGFyZSBvbmx5IHVzZWQgaWYgeWFtb24gZG9lc24ndCB0ZWxsIHVzIHdoYXQKLSAqIHRoZSBtYWMgYWRkcmVzcyBpcywgYW5kIHRoZSBtYWMgYWRkcmVzcyBpcyBub3QgcGFzc2VkIG9uIHRoZQotICogY29tbWFuZCBsaW5lLgotICovCi1zdGF0aWMgdW5zaWduZWQgY2hhciBhdTEwMDBfbWFjX2FkZHJbNl0gX19kZXZpbml0ZGF0YSA9IHsKLQkweDAwLCAweDUwLCAweGMyLCAweDBjLCAweDMwLCAweDAwCi19OwotCiBzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1X21hY3NbTlVNX0VUSF9JTlRFUkZBQ0VTXTsKIAogLyoKQEAgLTk3OCw3ICs5NzAsNyBAQAogCWlmICghYXVwLT5waHlfZGV2KQogCQlyZXR1cm4gLUVJTlZBTDsgLyogUEhZIG5vdCBjb250cm9sbGFibGUgKi8KIAotCXJldHVybiBwaHlfbWlpX2lvY3RsKGF1cC0+cGh5X2RldiwgaWZfbWlpKHJxKSwgY21kKTsKKwlyZXR1cm4gcGh5X21paV9pb2N0bChhdXAtPnBoeV9kZXYsIHJxLCBjbWQpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF1MTAwMF9uZXRkZXZfb3BzID0gewpAQCAtMTAwMiw3ICs5OTQsNiBAQAogCWRiX2Rlc3RfdCAqcERCLCAqcERCZnJlZTsKIAlpbnQgaXJxLCBpLCBlcnIgPSAwOwogCXN0cnVjdCByZXNvdXJjZSAqYmFzZSwgKm1hY2VuOwotCWNoYXIgZXRoYWRkcls2XTsKIAogCWJhc2UgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghYmFzZSkgewpAQCAtMTA3OSwyNCArMTA3MCwxMyBAQAogCX0KIAlhdXAtPm1hY19pZCA9IHBkZXYtPmlkOwogCi0JaWYgKHBkZXYtPmlkID09IDApIHsKLQkJaWYgKHByb21fZ2V0X2V0aGVybmV0X2FkZHIoZXRoYWRkcikgPT0gMCkKLQkJCW1lbWNweShhdTEwMDBfbWFjX2FkZHIsIGV0aGFkZHIsIHNpemVvZihhdTEwMDBfbWFjX2FkZHIpKTsKLQkJZWxzZSB7Ci0JCQluZXRkZXZfaW5mbyhkZXYsICJObyBNQUMgYWRkcmVzcyBmb3VuZFxuIik7Ci0JCQkJLyogVXNlIHRoZSBoYXJkIGNvZGVkIE1BQyBhZGRyZXNzZXMgKi8KLQkJfQotCisJaWYgKHBkZXYtPmlkID09IDApCiAJCWF1MTAwMF9zZXR1cF9od19yaW5ncyhhdXAsIE1BQzBfUlhfRE1BX0FERFIsIE1BQzBfVFhfRE1BX0FERFIpOwotCX0gZWxzZSBpZiAocGRldi0+aWQgPT0gMSkKKwllbHNlIGlmIChwZGV2LT5pZCA9PSAxKQogCQlhdTEwMDBfc2V0dXBfaHdfcmluZ3MoYXVwLCBNQUMxX1JYX0RNQV9BRERSLCBNQUMxX1RYX0RNQV9BRERSKTsKIAotCS8qCi0JICogQXNzaWduIHRvIHRoZSBFdGhlcm5ldCBwb3J0cyB0d28gY29uc2VjdXRpdmUgTUFDIGFkZHJlc3NlcwotCSAqIHRvIG1hdGNoIHRob3NlIHRoYXQgYXJlIHByaW50ZWQgb24gdGhlaXIgc3RpY2tlcnMKLQkgKi8KLQltZW1jcHkoZGV2LT5kZXZfYWRkciwgYXUxMDAwX21hY19hZGRyLCBzaXplb2YoYXUxMDAwX21hY19hZGRyKSk7Ci0JZGV2LT5kZXZfYWRkcls1XSArPSBwZGV2LT5pZDsKKwkvKiBzZXQgYSByYW5kb20gTUFDIG5vdyBpbiBjYXNlIHBsYXRmb3JtX2RhdGEgZG9lc24ndCBwcm92aWRlIG9uZSAqLworCXJhbmRvbV9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpOwogCiAJKmF1cC0+ZW5hYmxlID0gMDsKIAlhdXAtPm1hY19lbmFibGVkID0gMDsKQEAgLTExMDYsNiArMTA4Niw5IEBACiAJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybV9kYXRhIHBhc3NlZCwgUEhZIHNlYXJjaCBvbiBNQUMwXG4iKTsKIAkJYXVwLT5waHkxX3NlYXJjaF9tYWMwID0gMTsKIAl9IGVsc2UgeworCQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihwZC0+bWFjKSkKKwkJCW1lbWNweShkZXYtPmRldl9hZGRyLCBwZC0+bWFjLCA2KTsKKwogCQlhdXAtPnBoeV9zdGF0aWNfY29uZmlnID0gcGQtPnBoeV9zdGF0aWNfY29uZmlnOwogCQlhdXAtPnBoeV9zZWFyY2hfaGlnaGVzdF9hZGRyID0gcGQtPnBoeV9zZWFyY2hfaGlnaGVzdF9hZGRyOwogCQlhdXAtPnBoeTFfc2VhcmNoX21hYzAgPSBwZC0+cGh5MV9zZWFyY2hfbWFjMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F4ODg3OTYuYyBiL2RyaXZlcnMvbmV0L2F4ODg3OTYuYwppbmRleCA1NWM5OTU4Li4yMGU5NDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9heDg4Nzk2LmMKKysrIGIvZHJpdmVycy9uZXQvYXg4ODc5Ni5jCkBAIC00ODEsOCArNDgxLDEwIEBACiAJCXJldHVybiByZXQ7CiAKIAlyZXQgPSBheF9laV9vcGVuKGRldik7Ci0JaWYgKHJldCkKKwlpZiAocmV0KSB7CisJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwogCQlyZXR1cm4gcmV0OworCX0KIAogCS8qIHR1cm4gdGhlIHBoeSBvbiAoaWYgdHVybmVkIG9mZikgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYjQ0LmMgYi9kcml2ZXJzL25ldC9iNDQuYwppbmRleCAyOTNmOWMxLi4zNzYxN2FiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iNDQuYworKysgYi9kcml2ZXJzL25ldC9iNDQuYwpAQCAtMTM1LDcgKzEzNSw2IEBACiAKIHN0YXRpYyB2b2lkIGI0NF9pbml0X2h3KHN0cnVjdCBiNDQgKiwgaW50KTsKIAotc3RhdGljIGludCBkbWFfZGVzY19hbGlnbl9tYXNrOwogc3RhdGljIGludCBkbWFfZGVzY19zeW5jX3NpemU7CiBzdGF0aWMgaW50IGluc3RhbmNlOwogCkBAIC0xNTAsOSArMTQ5LDggQEAKIAkJCQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LAogCQkJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewotCXNzYl9kbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShzZGV2LCBkbWFfYmFzZSwKLQkJCQkJICAgICBvZmZzZXQgJiBkbWFfZGVzY19hbGlnbl9tYXNrLAotCQkJCQkgICAgIGRtYV9kZXNjX3N5bmNfc2l6ZSwgZGlyKTsKKwlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzZGV2LT5kbWFfZGV2LCBkbWFfYmFzZSArIG9mZnNldCwKKwkJCQkgICBkbWFfZGVzY19zeW5jX3NpemUsIGRpcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBiNDRfc3luY19kbWFfZGVzY19mb3JfY3B1KHN0cnVjdCBzc2JfZGV2aWNlICpzZGV2LApAQCAtMTYwLDkgKzE1OCw4IEBACiAJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCiAJCQkJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewotCXNzYl9kbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzZGV2LCBkbWFfYmFzZSwKLQkJCQkJICBvZmZzZXQgJiBkbWFfZGVzY19hbGlnbl9tYXNrLAotCQkJCQkgIGRtYV9kZXNjX3N5bmNfc2l6ZSwgZGlyKTsKKwlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShzZGV2LT5kbWFfZGV2LCBkbWFfYmFzZSArIG9mZnNldCwKKwkJCQlkbWFfZGVzY19zeW5jX3NpemUsIGRpcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBicjMyKGNvbnN0IHN0cnVjdCBiNDQgKmJwLCB1bnNpZ25lZCBsb25nIHJlZykKQEAgLTYwOCwxMCArNjA1LDEwIEBACiAKIAkJQlVHX09OKHNrYiA9PSBOVUxMKTsKIAotCQlzc2JfZG1hX3VubWFwX3NpbmdsZShicC0+c2RldiwKLQkJCQkgICAgIHJwLT5tYXBwaW5nLAotCQkJCSAgICAgc2tiLT5sZW4sCi0JCQkJICAgICBETUFfVE9fREVWSUNFKTsKKwkJZG1hX3VubWFwX3NpbmdsZShicC0+c2Rldi0+ZG1hX2RldiwKKwkJCQkgcnAtPm1hcHBpbmcsCisJCQkJIHNrYi0+bGVuLAorCQkJCSBETUFfVE9fREVWSUNFKTsKIAkJcnAtPnNrYiA9IE5VTEw7CiAJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CiAJfQpAQCAtNjQ4LDI5ICs2NDUsMjkgQEAKIAlpZiAoc2tiID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWFwcGluZyA9IHNzYl9kbWFfbWFwX3NpbmdsZShicC0+c2Rldiwgc2tiLT5kYXRhLAotCQkJCSAgICAgUlhfUEtUX0JVRl9TWiwKLQkJCQkgICAgIERNQV9GUk9NX0RFVklDRSk7CisJbWFwcGluZyA9IGRtYV9tYXBfc2luZ2xlKGJwLT5zZGV2LT5kbWFfZGV2LCBza2ItPmRhdGEsCisJCQkJIFJYX1BLVF9CVUZfU1osCisJCQkJIERNQV9GUk9NX0RFVklDRSk7CiAKIAkvKiBIYXJkd2FyZSBidWcgd29yay1hcm91bmQsIHRoZSBjaGlwIGlzIHVuYWJsZSB0byBkbyBQQ0kgRE1BCiAJICAgdG8vZnJvbSBhbnl0aGluZyBhYm92ZSAxR0IgOi0oICovCi0JaWYgKHNzYl9kbWFfbWFwcGluZ19lcnJvcihicC0+c2RldiwgbWFwcGluZykgfHwKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoYnAtPnNkZXYtPmRtYV9kZXYsIG1hcHBpbmcpIHx8CiAJCW1hcHBpbmcgKyBSWF9QS1RfQlVGX1NaID4gRE1BX0JJVF9NQVNLKDMwKSkgewogCQkvKiBTaWdoLi4uICovCi0JCWlmICghc3NiX2RtYV9tYXBwaW5nX2Vycm9yKGJwLT5zZGV2LCBtYXBwaW5nKSkKLQkJCXNzYl9kbWFfdW5tYXBfc2luZ2xlKGJwLT5zZGV2LCBtYXBwaW5nLAorCQlpZiAoIWRtYV9tYXBwaW5nX2Vycm9yKGJwLT5zZGV2LT5kbWFfZGV2LCBtYXBwaW5nKSkKKwkJCWRtYV91bm1hcF9zaW5nbGUoYnAtPnNkZXYtPmRtYV9kZXYsIG1hcHBpbmcsCiAJCQkJCSAgICAgUlhfUEtUX0JVRl9TWiwgRE1BX0ZST01fREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJc2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKGJwLT5kZXYsIFJYX1BLVF9CVUZfU1osIEdGUF9BVE9NSUN8R0ZQX0RNQSk7CiAJCWlmIChza2IgPT0gTlVMTCkKIAkJCXJldHVybiAtRU5PTUVNOwotCQltYXBwaW5nID0gc3NiX2RtYV9tYXBfc2luZ2xlKGJwLT5zZGV2LCBza2ItPmRhdGEsCi0JCQkJCSAgICAgUlhfUEtUX0JVRl9TWiwKLQkJCQkJICAgICBETUFfRlJPTV9ERVZJQ0UpOwotCQlpZiAoc3NiX2RtYV9tYXBwaW5nX2Vycm9yKGJwLT5zZGV2LCBtYXBwaW5nKSB8fAotCQkJbWFwcGluZyArIFJYX1BLVF9CVUZfU1ogPiBETUFfQklUX01BU0soMzApKSB7Ci0JCQlpZiAoIXNzYl9kbWFfbWFwcGluZ19lcnJvcihicC0+c2RldiwgbWFwcGluZykpCi0JCQkJc3NiX2RtYV91bm1hcF9zaW5nbGUoYnAtPnNkZXYsIG1hcHBpbmcsIFJYX1BLVF9CVUZfU1osRE1BX0ZST01fREVWSUNFKTsKKwkJbWFwcGluZyA9IGRtYV9tYXBfc2luZ2xlKGJwLT5zZGV2LT5kbWFfZGV2LCBza2ItPmRhdGEsCisJCQkJCSBSWF9QS1RfQlVGX1NaLAorCQkJCQkgRE1BX0ZST01fREVWSUNFKTsKKwkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGJwLT5zZGV2LT5kbWFfZGV2LCBtYXBwaW5nKSB8fAorCQkgICAgbWFwcGluZyArIFJYX1BLVF9CVUZfU1ogPiBETUFfQklUX01BU0soMzApKSB7CisJCQlpZiAoIWRtYV9tYXBwaW5nX2Vycm9yKGJwLT5zZGV2LT5kbWFfZGV2LCBtYXBwaW5nKSkKKwkJCQlkbWFfdW5tYXBfc2luZ2xlKGJwLT5zZGV2LT5kbWFfZGV2LCBtYXBwaW5nLCBSWF9QS1RfQlVGX1NaLERNQV9GUk9NX0RFVklDRSk7CiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KQEAgLTc0NSw5ICs3NDIsOSBAQAogCQkJCQkgICAgIGRlc3RfaWR4ICogc2l6ZW9mKCpkZXN0X2Rlc2MpLAogCQkJCQkgICAgIERNQV9CSURJUkVDVElPTkFMKTsKIAotCXNzYl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShicC0+c2RldiwgZGVzdF9tYXAtPm1hcHBpbmcsCi0JCQkJICAgICAgIFJYX1BLVF9CVUZfU1osCi0JCQkJICAgICAgIERNQV9GUk9NX0RFVklDRSk7CisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoYnAtPnNkZXYtPmRtYV9kZXYsIGRlc3RfbWFwLT5tYXBwaW5nLAorCQkJCSAgIFJYX1BLVF9CVUZfU1osCisJCQkJICAgRE1BX0ZST01fREVWSUNFKTsKIH0KIAogc3RhdGljIGludCBiNDRfcngoc3RydWN0IGI0NCAqYnAsIGludCBidWRnZXQpCkBAIC03NjcsOSArNzY0LDkgQEAKIAkJc3RydWN0IHJ4X2hlYWRlciAqcmg7CiAJCXUxNiBsZW47CiAKLQkJc3NiX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGJwLT5zZGV2LCBtYXAsCi0JCQkJCSAgICBSWF9QS1RfQlVGX1NaLAotCQkJCQkgICAgRE1BX0ZST01fREVWSUNFKTsKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoYnAtPnNkZXYtPmRtYV9kZXYsIG1hcCwKKwkJCQkJUlhfUEtUX0JVRl9TWiwKKwkJCQkJRE1BX0ZST01fREVWSUNFKTsKIAkJcmggPSAoc3RydWN0IHJ4X2hlYWRlciAqKSBza2ItPmRhdGE7CiAJCWxlbiA9IGxlMTZfdG9fY3B1KHJoLT5sZW4pOwogCQlpZiAoKGxlbiA+IChSWF9QS1RfQlVGX1NaIC0gUlhfUEtUX09GRlNFVCkpIHx8CkBAIC04MDEsOCArNzk4LDggQEAKIAkJCXNrYl9zaXplID0gYjQ0X2FsbG9jX3J4X3NrYihicCwgY29ucywgYnAtPnJ4X3Byb2QpOwogCQkJaWYgKHNrYl9zaXplIDwgMCkKIAkJCQlnb3RvIGRyb3BfaXQ7Ci0JCQlzc2JfZG1hX3VubWFwX3NpbmdsZShicC0+c2RldiwgbWFwLAotCQkJCQkgICAgIHNrYl9zaXplLCBETUFfRlJPTV9ERVZJQ0UpOworCQkJZG1hX3VubWFwX3NpbmdsZShicC0+c2Rldi0+ZG1hX2RldiwgbWFwLAorCQkJCQkgc2tiX3NpemUsIERNQV9GUk9NX0RFVklDRSk7CiAJCQkvKiBMZWF2ZSBvdXQgcnhfaGVhZGVyICovCiAJCQlza2JfcHV0KHNrYiwgbGVuICsgUlhfUEtUX09GRlNFVCk7CiAJCQlza2JfcHVsbChza2IsIFJYX1BLVF9PRkZTRVQpOwpAQCAtOTU0LDI0ICs5NTEsMjQgQEAKIAkJZ290byBlcnJfb3V0OwogCX0KIAotCW1hcHBpbmcgPSBzc2JfZG1hX21hcF9zaW5nbGUoYnAtPnNkZXYsIHNrYi0+ZGF0YSwgbGVuLCBETUFfVE9fREVWSUNFKTsKLQlpZiAoc3NiX2RtYV9tYXBwaW5nX2Vycm9yKGJwLT5zZGV2LCBtYXBwaW5nKSB8fCBtYXBwaW5nICsgbGVuID4gRE1BX0JJVF9NQVNLKDMwKSkgeworCW1hcHBpbmcgPSBkbWFfbWFwX3NpbmdsZShicC0+c2Rldi0+ZG1hX2Rldiwgc2tiLT5kYXRhLCBsZW4sIERNQV9UT19ERVZJQ0UpOworCWlmIChkbWFfbWFwcGluZ19lcnJvcihicC0+c2Rldi0+ZG1hX2RldiwgbWFwcGluZykgfHwgbWFwcGluZyArIGxlbiA+IERNQV9CSVRfTUFTSygzMCkpIHsKIAkJc3RydWN0IHNrX2J1ZmYgKmJvdW5jZV9za2I7CiAKIAkJLyogQ2hpcCBjYW4ndCBoYW5kbGUgRE1BIHRvL2Zyb20gPjFHQiwgdXNlIGJvdW5jZSBidWZmZXIgKi8KLQkJaWYgKCFzc2JfZG1hX21hcHBpbmdfZXJyb3IoYnAtPnNkZXYsIG1hcHBpbmcpKQotCQkJc3NiX2RtYV91bm1hcF9zaW5nbGUoYnAtPnNkZXYsIG1hcHBpbmcsIGxlbiwKKwkJaWYgKCFkbWFfbWFwcGluZ19lcnJvcihicC0+c2Rldi0+ZG1hX2RldiwgbWFwcGluZykpCisJCQlkbWFfdW5tYXBfc2luZ2xlKGJwLT5zZGV2LT5kbWFfZGV2LCBtYXBwaW5nLCBsZW4sCiAJCQkJCSAgICAgRE1BX1RPX0RFVklDRSk7CiAKIAkJYm91bmNlX3NrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihkZXYsIGxlbiwgR0ZQX0FUT01JQyB8IEdGUF9ETUEpOwogCQlpZiAoIWJvdW5jZV9za2IpCiAJCQlnb3RvIGVycl9vdXQ7CiAKLQkJbWFwcGluZyA9IHNzYl9kbWFfbWFwX3NpbmdsZShicC0+c2RldiwgYm91bmNlX3NrYi0+ZGF0YSwKLQkJCQkJICAgICBsZW4sIERNQV9UT19ERVZJQ0UpOwotCQlpZiAoc3NiX2RtYV9tYXBwaW5nX2Vycm9yKGJwLT5zZGV2LCBtYXBwaW5nKSB8fCBtYXBwaW5nICsgbGVuID4gRE1BX0JJVF9NQVNLKDMwKSkgewotCQkJaWYgKCFzc2JfZG1hX21hcHBpbmdfZXJyb3IoYnAtPnNkZXYsIG1hcHBpbmcpKQotCQkJCXNzYl9kbWFfdW5tYXBfc2luZ2xlKGJwLT5zZGV2LCBtYXBwaW5nLAorCQltYXBwaW5nID0gZG1hX21hcF9zaW5nbGUoYnAtPnNkZXYtPmRtYV9kZXYsIGJvdW5jZV9za2ItPmRhdGEsCisJCQkJCSBsZW4sIERNQV9UT19ERVZJQ0UpOworCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoYnAtPnNkZXYtPmRtYV9kZXYsIG1hcHBpbmcpIHx8IG1hcHBpbmcgKyBsZW4gPiBETUFfQklUX01BU0soMzApKSB7CisJCQlpZiAoIWRtYV9tYXBwaW5nX2Vycm9yKGJwLT5zZGV2LT5kbWFfZGV2LCBtYXBwaW5nKSkKKwkJCQlkbWFfdW5tYXBfc2luZ2xlKGJwLT5zZGV2LT5kbWFfZGV2LCBtYXBwaW5nLAogCQkJCQkJICAgICBsZW4sIERNQV9UT19ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYl9hbnkoYm91bmNlX3NrYik7CiAJCQlnb3RvIGVycl9vdXQ7CkBAIC0xMDY4LDggKzEwNjUsOCBAQAogCiAJCWlmIChycC0+c2tiID09IE5VTEwpCiAJCQljb250aW51ZTsKLQkJc3NiX2RtYV91bm1hcF9zaW5nbGUoYnAtPnNkZXYsIHJwLT5tYXBwaW5nLCBSWF9QS1RfQlVGX1NaLAotCQkJCSAgICAgRE1BX0ZST01fREVWSUNFKTsKKwkJZG1hX3VubWFwX3NpbmdsZShicC0+c2Rldi0+ZG1hX2RldiwgcnAtPm1hcHBpbmcsIFJYX1BLVF9CVUZfU1osCisJCQkJIERNQV9GUk9NX0RFVklDRSk7CiAJCWRldl9rZnJlZV9za2JfYW55KHJwLT5za2IpOwogCQlycC0+c2tiID0gTlVMTDsKIAl9CkBAIC0xMDgwLDggKzEwNzcsOCBAQAogCiAJCWlmIChycC0+c2tiID09IE5VTEwpCiAJCQljb250aW51ZTsKLQkJc3NiX2RtYV91bm1hcF9zaW5nbGUoYnAtPnNkZXYsIHJwLT5tYXBwaW5nLCBycC0+c2tiLT5sZW4sCi0JCQkJICAgICBETUFfVE9fREVWSUNFKTsKKwkJZG1hX3VubWFwX3NpbmdsZShicC0+c2Rldi0+ZG1hX2RldiwgcnAtPm1hcHBpbmcsIHJwLT5za2ItPmxlbiwKKwkJCQkgRE1BX1RPX0RFVklDRSk7CiAJCWRldl9rZnJlZV9za2JfYW55KHJwLT5za2IpOwogCQlycC0+c2tiID0gTlVMTDsKIAl9CkBAIC0xMTAzLDE0ICsxMTAwLDEyIEBACiAJbWVtc2V0KGJwLT50eF9yaW5nLCAwLCBCNDRfVFhfUklOR19CWVRFUyk7CiAKIAlpZiAoYnAtPmZsYWdzICYgQjQ0X0ZMQUdfUlhfUklOR19IQUNLKQotCQlzc2JfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoYnAtPnNkZXYsIGJwLT5yeF9yaW5nX2RtYSwKLQkJCQkJICAgICAgIERNQV9UQUJMRV9CWVRFUywKLQkJCQkJICAgICAgIERNQV9CSURJUkVDVElPTkFMKTsKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoYnAtPnNkZXYtPmRtYV9kZXYsIGJwLT5yeF9yaW5nX2RtYSwKKwkJCQkJICAgRE1BX1RBQkxFX0JZVEVTLCBETUFfQklESVJFQ1RJT05BTCk7CiAKIAlpZiAoYnAtPmZsYWdzICYgQjQ0X0ZMQUdfVFhfUklOR19IQUNLKQotCQlzc2JfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoYnAtPnNkZXYsIGJwLT50eF9yaW5nX2RtYSwKLQkJCQkJICAgICAgIERNQV9UQUJMRV9CWVRFUywKLQkJCQkJICAgICAgIERNQV9UT19ERVZJQ0UpOworCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShicC0+c2Rldi0+ZG1hX2RldiwgYnAtPnR4X3JpbmdfZG1hLAorCQkJCQkgICBETUFfVEFCTEVfQllURVMsIERNQV9UT19ERVZJQ0UpOwogCiAJZm9yIChpID0gMDsgaSA8IGJwLT5yeF9wZW5kaW5nOyBpKyspIHsKIAkJaWYgKGI0NF9hbGxvY19yeF9za2IoYnAsIC0xLCBpKSA8IDApCkBAIC0xMTMwLDI3ICsxMTI1LDIzIEBACiAJYnAtPnR4X2J1ZmZlcnMgPSBOVUxMOwogCWlmIChicC0+cnhfcmluZykgewogCQlpZiAoYnAtPmZsYWdzICYgQjQ0X0ZMQUdfUlhfUklOR19IQUNLKSB7Ci0JCQlzc2JfZG1hX3VubWFwX3NpbmdsZShicC0+c2RldiwgYnAtPnJ4X3JpbmdfZG1hLAotCQkJCQkgICAgIERNQV9UQUJMRV9CWVRFUywKLQkJCQkJICAgICBETUFfQklESVJFQ1RJT05BTCk7CisJCQlkbWFfdW5tYXBfc2luZ2xlKGJwLT5zZGV2LT5kbWFfZGV2LCBicC0+cnhfcmluZ19kbWEsCisJCQkJCSBETUFfVEFCTEVfQllURVMsIERNQV9CSURJUkVDVElPTkFMKTsKIAkJCWtmcmVlKGJwLT5yeF9yaW5nKTsKIAkJfSBlbHNlCi0JCQlzc2JfZG1hX2ZyZWVfY29uc2lzdGVudChicC0+c2RldiwgRE1BX1RBQkxFX0JZVEVTLAotCQkJCQkJYnAtPnJ4X3JpbmcsIGJwLT5yeF9yaW5nX2RtYSwKLQkJCQkJCUdGUF9LRVJORUwpOworCQkJZG1hX2ZyZWVfY29oZXJlbnQoYnAtPnNkZXYtPmRtYV9kZXYsIERNQV9UQUJMRV9CWVRFUywKKwkJCQkJICBicC0+cnhfcmluZywgYnAtPnJ4X3JpbmdfZG1hKTsKIAkJYnAtPnJ4X3JpbmcgPSBOVUxMOwogCQlicC0+ZmxhZ3MgJj0gfkI0NF9GTEFHX1JYX1JJTkdfSEFDSzsKIAl9CiAJaWYgKGJwLT50eF9yaW5nKSB7CiAJCWlmIChicC0+ZmxhZ3MgJiBCNDRfRkxBR19UWF9SSU5HX0hBQ0spIHsKLQkJCXNzYl9kbWFfdW5tYXBfc2luZ2xlKGJwLT5zZGV2LCBicC0+dHhfcmluZ19kbWEsCi0JCQkJCSAgICAgRE1BX1RBQkxFX0JZVEVTLAotCQkJCQkgICAgIERNQV9UT19ERVZJQ0UpOworCQkJZG1hX3VubWFwX3NpbmdsZShicC0+c2Rldi0+ZG1hX2RldiwgYnAtPnR4X3JpbmdfZG1hLAorCQkJCQkgRE1BX1RBQkxFX0JZVEVTLCBETUFfVE9fREVWSUNFKTsKIAkJCWtmcmVlKGJwLT50eF9yaW5nKTsKIAkJfSBlbHNlCi0JCQlzc2JfZG1hX2ZyZWVfY29uc2lzdGVudChicC0+c2RldiwgRE1BX1RBQkxFX0JZVEVTLAotCQkJCQkJYnAtPnR4X3JpbmcsIGJwLT50eF9yaW5nX2RtYSwKLQkJCQkJCUdGUF9LRVJORUwpOworCQkJZG1hX2ZyZWVfY29oZXJlbnQoYnAtPnNkZXYtPmRtYV9kZXYsIERNQV9UQUJMRV9CWVRFUywKKwkJCQkJICBicC0+dHhfcmluZywgYnAtPnR4X3JpbmdfZG1hKTsKIAkJYnAtPnR4X3JpbmcgPSBOVUxMOwogCQlicC0+ZmxhZ3MgJj0gfkI0NF9GTEFHX1RYX1JJTkdfSEFDSzsKIAl9CkBAIC0xMTc1LDcgKzExNjYsOCBAQAogCQlnb3RvIG91dF9lcnI7CiAKIAlzaXplID0gRE1BX1RBQkxFX0JZVEVTOwotCWJwLT5yeF9yaW5nID0gc3NiX2RtYV9hbGxvY19jb25zaXN0ZW50KGJwLT5zZGV2LCBzaXplLCAmYnAtPnJ4X3JpbmdfZG1hLCBnZnApOworCWJwLT5yeF9yaW5nID0gZG1hX2FsbG9jX2NvaGVyZW50KGJwLT5zZGV2LT5kbWFfZGV2LCBzaXplLAorCQkJCQkgJmJwLT5yeF9yaW5nX2RtYSwgZ2ZwKTsKIAlpZiAoIWJwLT5yeF9yaW5nKSB7CiAJCS8qIEFsbG9jYXRpb24gbWF5IGhhdmUgZmFpbGVkIGR1ZSB0byBwY2lfYWxsb2NfY29uc2lzdGVudAogCQkgICBpbnNpc3Rpbmcgb24gdXNlIG9mIEdGUF9ETUEsIHdoaWNoIGlzIG1vcmUgcmVzdHJpY3RpdmUKQEAgLTExODcsMTEgKzExNzksMTEgQEAKIAkJaWYgKCFyeF9yaW5nKQogCQkJZ290byBvdXRfZXJyOwogCi0JCXJ4X3JpbmdfZG1hID0gc3NiX2RtYV9tYXBfc2luZ2xlKGJwLT5zZGV2LCByeF9yaW5nLAotCQkJCQkJIERNQV9UQUJMRV9CWVRFUywKLQkJCQkJCSBETUFfQklESVJFQ1RJT05BTCk7CisJCXJ4X3JpbmdfZG1hID0gZG1hX21hcF9zaW5nbGUoYnAtPnNkZXYtPmRtYV9kZXYsIHJ4X3JpbmcsCisJCQkJCSAgICAgRE1BX1RBQkxFX0JZVEVTLAorCQkJCQkgICAgIERNQV9CSURJUkVDVElPTkFMKTsKIAotCQlpZiAoc3NiX2RtYV9tYXBwaW5nX2Vycm9yKGJwLT5zZGV2LCByeF9yaW5nX2RtYSkgfHwKKwkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGJwLT5zZGV2LT5kbWFfZGV2LCByeF9yaW5nX2RtYSkgfHwKIAkJCXJ4X3JpbmdfZG1hICsgc2l6ZSA+IERNQV9CSVRfTUFTSygzMCkpIHsKIAkJCWtmcmVlKHJ4X3JpbmcpOwogCQkJZ290byBvdXRfZXJyOwpAQCAtMTIwMiw3ICsxMTk0LDggQEAKIAkJYnAtPmZsYWdzIHw9IEI0NF9GTEFHX1JYX1JJTkdfSEFDSzsKIAl9CiAKLQlicC0+dHhfcmluZyA9IHNzYl9kbWFfYWxsb2NfY29uc2lzdGVudChicC0+c2Rldiwgc2l6ZSwgJmJwLT50eF9yaW5nX2RtYSwgZ2ZwKTsKKwlicC0+dHhfcmluZyA9IGRtYV9hbGxvY19jb2hlcmVudChicC0+c2Rldi0+ZG1hX2Rldiwgc2l6ZSwKKwkJCQkJICZicC0+dHhfcmluZ19kbWEsIGdmcCk7CiAJaWYgKCFicC0+dHhfcmluZykgewogCQkvKiBBbGxvY2F0aW9uIG1heSBoYXZlIGZhaWxlZCBkdWUgdG8gc3NiX2RtYV9hbGxvY19jb25zaXN0ZW50CiAJCSAgIGluc2lzdGluZyBvbiB1c2Ugb2YgR0ZQX0RNQSwgd2hpY2ggaXMgbW9yZSByZXN0cmljdGl2ZQpAQCAtMTIxNCwxMSArMTIwNywxMSBAQAogCQlpZiAoIXR4X3JpbmcpCiAJCQlnb3RvIG91dF9lcnI7CiAKLQkJdHhfcmluZ19kbWEgPSBzc2JfZG1hX21hcF9zaW5nbGUoYnAtPnNkZXYsIHR4X3JpbmcsCi0JCQkgICAgICAgICAgICAgICAgICAgIERNQV9UQUJMRV9CWVRFUywKLQkJCSAgICAgICAgICAgICAgICAgICAgRE1BX1RPX0RFVklDRSk7CisJCXR4X3JpbmdfZG1hID0gZG1hX21hcF9zaW5nbGUoYnAtPnNkZXYtPmRtYV9kZXYsIHR4X3JpbmcsCisJCQkJCSAgICAgRE1BX1RBQkxFX0JZVEVTLAorCQkJCQkgICAgIERNQV9UT19ERVZJQ0UpOwogCi0JCWlmIChzc2JfZG1hX21hcHBpbmdfZXJyb3IoYnAtPnNkZXYsIHR4X3JpbmdfZG1hKSB8fAorCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoYnAtPnNkZXYtPmRtYV9kZXYsIHR4X3JpbmdfZG1hKSB8fAogCQkJdHhfcmluZ19kbWEgKyBzaXplID4gRE1BX0JJVF9NQVNLKDMwKSkgewogCQkJa2ZyZWUodHhfcmluZyk7CiAJCQlnb3RvIG91dF9lcnI7CkBAIC0yMTc2LDEyICsyMTY5LDE0IEBACiAJCQkiRmFpbGVkIHRvIHBvd2VydXAgdGhlIGJ1c1xuIik7CiAJCWdvdG8gZXJyX291dF9mcmVlX2RldjsKIAl9Ci0JZXJyID0gc3NiX2RtYV9zZXRfbWFzayhzZGV2LCBETUFfQklUX01BU0soMzApKTsKLQlpZiAoZXJyKSB7CisKKwlpZiAoZG1hX3NldF9tYXNrKHNkZXYtPmRtYV9kZXYsIERNQV9CSVRfTUFTSygzMCkpIHx8CisJICAgIGRtYV9zZXRfY29oZXJlbnRfbWFzayhzZGV2LT5kbWFfZGV2LCBETUFfQklUX01BU0soMzApKSkgewogCQlkZXZfZXJyKHNkZXYtPmRldiwKIAkJCSJSZXF1aXJlZCAzMEJJVCBETUEgbWFzayB1bnN1cHBvcnRlZCBieSB0aGUgc3lzdGVtXG4iKTsKIAkJZ290byBlcnJfb3V0X3Bvd2VyZG93bjsKIAl9CisKIAllcnIgPSBiNDRfZ2V0X2ludmFyaWFudHMoYnApOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycihzZGV2LT5kZXYsCkBAIC0yMzQ0LDcgKzIzMzksNiBAQAogCWludCBlcnI7CiAKIAkvKiBTZXR1cCBwYXJhbWF0ZXJzIGZvciBzeW5jaW5nIFJYL1RYIERNQSBkZXNjcmlwdG9ycyAqLwotCWRtYV9kZXNjX2FsaWduX21hc2sgPSB+KGRtYV9kZXNjX2FsaWduX3NpemUgLSAxKTsKIAlkbWFfZGVzY19zeW5jX3NpemUgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGRtYV9kZXNjX2FsaWduX3NpemUsIHNpemVvZihzdHJ1Y3QgZG1hX2Rlc2MpKTsKIAogCWVyciA9IGI0NF9wY2lfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmNtNjN4eF9lbmV0LmMgYi9kcml2ZXJzL25ldC9iY202M3h4X2VuZXQuYwppbmRleCBmYWY1YWRkLi4wZDJjNWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iY202M3h4X2VuZXQuYworKysgYi9kcml2ZXJzL25ldC9iY202M3h4X2VuZXQuYwpAQCAtMTQ5Niw3ICsxNDk2LDcgQEAKIAlpZiAocHJpdi0+aGFzX3BoeSkgewogCQlpZiAoIXByaXYtPnBoeWRldikKIAkJCXJldHVybiAtRU5PREVWOwotCQlyZXR1cm4gcGh5X21paV9pb2N0bChwcml2LT5waHlkZXYsIGlmX21paShycSksIGNtZCk7CisJCXJldHVybiBwaHlfbWlpX2lvY3RsKHByaXYtPnBoeWRldiwgcnEsIGNtZCk7CiAJfSBlbHNlIHsKIAkJc3RydWN0IG1paV9pZl9pbmZvIG1paTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmUuaCBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmgKaW5kZXggYjQ2YmU0OS4uOTkxOTdiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmUuaAorKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZS5oCkBAIC0zMyw3ICszMyw3IEBACiAKICNpbmNsdWRlICJiZV9ody5oIgogCi0jZGVmaW5lIERSVl9WRVIJCQkiMi4xMDIuMTQ3dSIKKyNkZWZpbmUgRFJWX1ZFUgkJCSIyLjEwMy4xNzV1IgogI2RlZmluZSBEUlZfTkFNRQkJImJlMm5ldCIKICNkZWZpbmUgQkVfTkFNRQkJCSJTZXJ2ZXJFbmdpbmVzIEJsYWRlRW5naW5lMiAxMEdicHMgTklDIgogI2RlZmluZSBCRTNfTkFNRQkJIlNlcnZlckVuZ2luZXMgQmxhZGVFbmdpbmUzIDEwR2JwcyBOSUMiCkBAIC0yMjAsNyArMjIwLDE2IEBACiAJc3RydWN0IGJlX3J4X3BhZ2VfaW5mbyBwYWdlX2luZm9fdGJsW1JYX1FfTEVOXTsKIH07CiAKK3N0cnVjdCBiZV92Zl9jZmcgeworCXVuc2lnbmVkIGNoYXIgdmZfbWFjX2FkZHJbRVRIX0FMRU5dOworCXUzMiB2Zl9pZl9oYW5kbGU7CisJdTMyIHZmX3BtYWNfaWQ7CisJdTE2IHZmX3ZsYW5fdGFnOworCXUzMiB2Zl90eF9yYXRlOworfTsKKwogI2RlZmluZSBCRV9OVU1fTVNJWF9WRUNUT1JTCQkyCS8qIDEgZWFjaCBmb3IgVHggYW5kIFJ4ICovCisjZGVmaW5lIEJFX0lOVkFMSURfUE1BQ19JRAkJMHhmZmZmZmZmZgogc3RydWN0IGJlX2FkYXB0ZXIgewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CkBAIC0yNzYsMjMgKzI4NSwyNiBAQAogCXUzMiBwb3J0X251bTsKIAlib29sIHByb21pc2N1b3VzOwogCWJvb2wgd29sOwotCXUzMiBjYXA7CisJdTMyIGZ1bmN0aW9uX21vZGU7CiAJdTMyIHJ4X2ZjOwkJLyogUnggZmxvdyBjb250cm9sICovCiAJdTMyIHR4X2ZjOwkJLyogVHggZmxvdyBjb250cm9sICovCisJYm9vbCB1ZV9kZXRlY3RlZDsKKwlib29sIHN0YXRzX2lvY3RsX3NlbnQ7CiAJaW50IGxpbmtfc3BlZWQ7CiAJdTggcG9ydF90eXBlOwogCXU4IHRyYW5zY2VpdmVyOworCXU4IGF1dG9uZWc7CiAJdTggZ2VuZXJhdGlvbjsJCS8qIEJsYWRlRW5naW5lIEFTSUMgZ2VuZXJhdGlvbiAqLwogCXUzMiBmbGFzaF9zdGF0dXM7CiAJc3RydWN0IGNvbXBsZXRpb24gZmxhc2hfY29tcGw7CiAKIAlib29sIHNyaW92X2VuYWJsZWQ7Ci0JdTMyIHZmX2lmX2hhbmRsZVtCRV9NQVhfVkZdOwotCXUzMiB2Zl9wbWFjX2lkW0JFX01BWF9WRl07CisJc3RydWN0IGJlX3ZmX2NmZyB2Zl9jZmdbQkVfTUFYX1ZGXTsKIAl1OCBiYXNlX2VxX2lkOworCXU4IGlzX3ZpcnRmbjsKIH07CiAKLSNkZWZpbmUgYmVfcGh5c2ZuKGFkYXB0ZXIpICghYWRhcHRlci0+cGRldi0+aXNfdmlydGZuKQorI2RlZmluZSBiZV9waHlzZm4oYWRhcHRlcikgKCFhZGFwdGVyLT5pc192aXJ0Zm4pCiAKIC8qIEJsYWRlRW5naW5lIEdlbmVyYXRpb24gbnVtYmVycyAqLwogI2RlZmluZSBCRV9HRU4yIDIKQEAgLTM5Miw2ICs0MDQsMTUgQEAKIAlyZXR1cm4gdmFsOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgYmVfY2hlY2tfc3Jpb3ZfZm5fdHlwZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1OCBkYXRhOworCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGFkYXB0ZXItPnBkZXYsIDB4RkUsIDB4QUEpOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGFkYXB0ZXItPnBkZXYsIDB4RkUsICZkYXRhKTsKKwlhZGFwdGVyLT5pc192aXJ0Zm4gPSAoZGF0YSAhPSAweEFBKTsKK30KKwogZXh0ZXJuIHZvaWQgYmVfY3Ffbm90aWZ5KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MTYgcWlkLCBib29sIGFybSwKIAkJdTE2IG51bV9wb3BwZWQpOwogZXh0ZXJuIHZvaWQgYmVfbGlua19zdGF0dXNfdXBkYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCBib29sIGxpbmtfdXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jCmluZGV4IGI5YWQ3OTkuLjNkMzA1NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMKQEAgLTI1LDYgKzI1LDggQEAKIAogCXZhbCB8PSBtY2NxLT5pZCAmIERCX01DQ1FfUklOR19JRF9NQVNLOwogCXZhbCB8PSAxIDw8IERCX01DQ1FfTlVNX1BPU1RFRF9TSElGVDsKKworCXdtYigpOwogCWlvd3JpdGUzMih2YWwsIGFkYXB0ZXItPmRiICsgREJfTUNDUV9PRkZTRVQpOwogfQogCkBAIC03Myw4ICs3NSwxMCBAQAogCQkJYmVfZHdzX2xlX3RvX2NwdSgmcmVzcC0+aHdfc3RhdHMsCiAJCQkJCQlzaXplb2YocmVzcC0+aHdfc3RhdHMpKTsKIAkJCW5ldGRldl9zdGF0c191cGRhdGUoYWRhcHRlcik7CisJCQlhZGFwdGVyLT5zdGF0c19pb2N0bF9zZW50ID0gZmFsc2U7CiAJCX0KLQl9IGVsc2UgaWYgKGNvbXBsX3N0YXR1cyAhPSBNQ0NfU1RBVFVTX05PVF9TVVBQT1JURUQpIHsKKwl9IGVsc2UgaWYgKChjb21wbF9zdGF0dXMgIT0gTUNDX1NUQVRVU19OT1RfU1VQUE9SVEVEKSAmJgorCQkgICAoY29tcGwtPnRhZzAgIT0gT1BDT0RFX0NPTU1PTl9OVFdLX01BQ19RVUVSWSkpIHsKIAkJZXh0ZF9zdGF0dXMgPSAoY29tcGwtPnN0YXR1cyA+PiBDUUVfU1RBVFVTX0VYVERfU0hJRlQpICYKIAkJCQlDUUVfU1RBVFVTX0VYVERfTUFTSzsKIAkJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwKQEAgLTE4Niw3ICsxOTAsNyBAQAogCiBzdGF0aWMgaW50IGJlX21ib3hfZGJfcmVhZHlfd2FpdChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdm9pZCBfX2lvbWVtICpkYikKIHsKLQlpbnQgY250ID0gMCwgd2FpdCA9IDU7CisJaW50IG1zZWNzID0gMDsKIAl1MzIgcmVhZHk7CiAKIAlkbyB7CkBAIC0yMDEsMTUgKzIwNSwxNSBAQAogCQlpZiAocmVhZHkpCiAJCQlicmVhazsKIAotCQlpZiAoY250ID4gNDAwMDAwMCkgeworCQlpZiAobXNlY3MgPiA0MDAwKSB7CiAJCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJtYm94IHBvbGwgdGltZWQgb3V0XG4iKTsKKwkJCWJlX2R1bXBfdWUoYWRhcHRlcik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAotCQlpZiAoY250ID4gNTApCi0JCQl3YWl0ID0gMjAwOwotCQljbnQgKz0gd2FpdDsKLQkJdWRlbGF5KHdhaXQpOworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlzY2hlZHVsZV90aW1lb3V0KG1zZWNzX3RvX2ppZmZpZXMoMSkpOworCQltc2VjcysrOwogCX0gd2hpbGUgKHRydWUpOwogCiAJcmV0dXJuIDA7CkBAIC05NDgsNiArOTUyLDcgQEAKIAlzZ2UtPmxlbiA9IGNwdV90b19sZTMyKG5vbmVtYl9jbWQtPnNpemUpOwogCiAJYmVfbWNjX25vdGlmeShhZGFwdGVyKTsKKwlhZGFwdGVyLT5zdGF0c19pb2N0bF9zZW50ID0gdHJ1ZTsKIAogZXJyOgogCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5tY2NfbG9jayk7CkBAIC0xMjU2LDcgKzEyNjEsNyBAQAogfQogCiAvKiBVc2VzIG1ib3ggKi8KLWludCBiZV9jbWRfcXVlcnlfZndfY2ZnKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgKnBvcnRfbnVtLCB1MzIgKmNhcCkKK2ludCBiZV9jbWRfcXVlcnlfZndfY2ZnKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgKnBvcnRfbnVtLCB1MzIgKm1vZGUpCiB7CiAJc3RydWN0IGJlX21jY193cmIgKndyYjsKIAlzdHJ1Y3QgYmVfY21kX3JlcV9xdWVyeV9md19jZmcgKnJlcTsKQEAgLTEyNzcsNyArMTI4Miw3IEBACiAJaWYgKCFzdGF0dXMpIHsKIAkJc3RydWN0IGJlX2NtZF9yZXNwX3F1ZXJ5X2Z3X2NmZyAqcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKIAkJKnBvcnRfbnVtID0gbGUzMl90b19jcHUocmVzcC0+cGh5c19wb3J0KTsKLQkJKmNhcCA9IGxlMzJfdG9fY3B1KHJlc3AtPmZ1bmN0aW9uX2NhcCk7CisJCSptb2RlID0gbGUzMl90b19jcHUocmVzcC0+ZnVuY3Rpb25fbW9kZSk7CiAJfQogCiAJc3Bpbl91bmxvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CkBAIC0xNjk0LDMgKzE2OTksNzEgQEAKIAlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+bWNjX2xvY2spOwogCXJldHVybiBzdGF0dXM7CiB9CisKK2ludCBiZV9jbWRfZ2V0X3BoeV9pbmZvKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgYmVfZG1hX21lbSAqY21kKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7CisJc3RydWN0IGJlX2NtZF9yZXFfZ2V0X3BoeV9pbmZvICpyZXE7CisJc3RydWN0IGJlX3NnZSAqc2dlOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPm1jY19sb2NrKTsKKworCXdyYiA9IHdyYl9mcm9tX21jY3EoYWRhcHRlcik7CisJaWYgKCF3cmIpIHsKKwkJc3RhdHVzID0gLUVCVVNZOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXEgPSBjbWQtPnZhOworCXNnZSA9IG5vbmVtYmVkZGVkX3NnbCh3cmIpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCBmYWxzZSwgMSwKKwkJCQlPUENPREVfQ09NTU9OX0dFVF9QSFlfREVUQUlMUyk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJCU9QQ09ERV9DT01NT05fR0VUX1BIWV9ERVRBSUxTLAorCQkJc2l6ZW9mKCpyZXEpKTsKKworCXNnZS0+cGFfaGkgPSBjcHVfdG9fbGUzMih1cHBlcl8zMl9iaXRzKGNtZC0+ZG1hKSk7CisJc2dlLT5wYV9sbyA9IGNwdV90b19sZTMyKGNtZC0+ZG1hICYgMHhGRkZGRkZGRik7CisJc2dlLT5sZW4gPSBjcHVfdG9fbGUzMihjbWQtPnNpemUpOworCisJc3RhdHVzID0gYmVfbWNjX25vdGlmeV93YWl0KGFkYXB0ZXIpOworZXJyOgorCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5tY2NfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGJlX2NtZF9zZXRfcW9zKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgYnBzLCB1MzIgZG9tYWluKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7CisJc3RydWN0IGJlX2NtZF9yZXFfc2V0X3FvcyAqcmVxOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPm1jY19sb2NrKTsKKworCXdyYiA9IHdyYl9mcm9tX21jY3EoYWRhcHRlcik7CisJaWYgKCF3cmIpIHsKKwkJc3RhdHVzID0gLUVCVVNZOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDAsCisJCQkJT1BDT0RFX0NPTU1PTl9TRVRfUU9TKTsKKworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fQ09NTU9OLAorCQkJT1BDT0RFX0NPTU1PTl9TRVRfUU9TLCBzaXplb2YoKnJlcSkpOworCisJcmVxLT5oZHIuZG9tYWluID0gZG9tYWluOworCXJlcS0+dmFsaWRfYml0cyA9IEJFX1FPU19CSVRTX05JQzsKKwlyZXEtPm1heF9icHNfbmljID0gYnBzOworCisJc3RhdHVzID0gYmVfbWNjX25vdGlmeV93YWl0KGFkYXB0ZXIpOworCitlcnI6CisJc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPm1jY19sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5oIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5oCmluZGV4IDc2M2RjMTkuLmJkYzEwYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuaAorKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmgKQEAgLTEyNCw2ICsxMjQsNyBAQAogI2RlZmluZSBPUENPREVfQ09NTU9OX0NRX0NSRUFURQkJCQkxMgogI2RlZmluZSBPUENPREVfQ09NTU9OX0VRX0NSRUFURQkJCQkxMwogI2RlZmluZSBPUENPREVfQ09NTU9OX01DQ19DUkVBVEUgICAgICAgIAkJMjEKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9TRVRfUU9TCQkJCTI4CiAjZGVmaW5lIE9QQ09ERV9DT01NT05fU0VFUFJPTV9SRUFECQkJMzAKICNkZWZpbmUgT1BDT0RFX0NPTU1PTl9OVFdLX1JYX0ZJTFRFUiAgICAJCTM0CiAjZGVmaW5lIE9QQ09ERV9DT01NT05fR0VUX0ZXX1ZFUlNJT04JCQkzNQpAQCAtMTQ0LDYgKzE0NSw3IEBACiAjZGVmaW5lIE9QQ09ERV9DT01NT05fRU5BQkxFX0RJU0FCTEVfQkVBQ09OCQk2OQogI2RlZmluZSBPUENPREVfQ09NTU9OX0dFVF9CRUFDT05fU1RBVEUJCQk3MAogI2RlZmluZSBPUENPREVfQ09NTU9OX1JFQURfVFJBTlNSRUNWX0RBVEEJCTczCisjZGVmaW5lIE9QQ09ERV9DT01NT05fR0VUX1BIWV9ERVRBSUxTCQkJMTAyCiAKICNkZWZpbmUgT1BDT0RFX0VUSF9BQ1BJX0NPTkZJRwkJCQkyCiAjZGVmaW5lIE9QQ09ERV9FVEhfUFJPTUlTQ1VPVVMJCQkJMwpAQCAtNzQ3LDcgKzc0OSw3IEBACiAJdTMyIGJlX2NvbmZpZ19udW1iZXI7CiAJdTMyIGFzaWNfcmV2aXNpb247CiAJdTMyIHBoeXNfcG9ydDsKLQl1MzIgZnVuY3Rpb25fY2FwOworCXUzMiBmdW5jdGlvbl9tb2RlOwogCXUzMiByc3ZkWzI2XTsKIH07CiAKQEAgLTg2OSw2ICs4NzEsNDYgQEAKIAl1OCBzZWVwcm9tX2RhdGFbQkVfUkVBRF9TRUVQUk9NX0xFTl07CiB9OwogCitlbnVtIHsKKwlQSFlfVFlQRV9DWDRfMTBHQiA9IDAsCisJUEhZX1RZUEVfWEZQXzEwR0IsCisJUEhZX1RZUEVfU0ZQXzFHQiwKKwlQSFlfVFlQRV9TRlBfUExVU18xMEdCLAorCVBIWV9UWVBFX0tSXzEwR0IsCisJUEhZX1RZUEVfS1g0XzEwR0IsCisJUEhZX1RZUEVfQkFTRVRfMTBHQiwKKwlQSFlfVFlQRV9CQVNFVF8xR0IsCisJUEhZX1RZUEVfRElTQUJMRUQgPSAyNTUKK307CisKK3N0cnVjdCBiZV9jbWRfcmVxX2dldF9waHlfaW5mbyB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1OCByc3ZkMFsyNF07Cit9Oworc3RydWN0IGJlX2NtZF9yZXNwX2dldF9waHlfaW5mbyB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MTYgcGh5X3R5cGU7CisJdTE2IGludGVyZmFjZV90eXBlOworCXUzMiBtaXNjX3BhcmFtczsKKwl1MzIgZnV0dXJlX3VzZVs0XTsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKiBTZXQgUU9TICoqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEJFX1FPU19CSVRTX05JQwkJCQkxCisKK3N0cnVjdCBiZV9jbWRfcmVxX3NldF9xb3MgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTMyIHZhbGlkX2JpdHM7CisJdTMyIG1heF9icHNfbmljOworCXUzMiByc3ZkWzddOworfTsKKworc3RydWN0IGJlX2NtZF9yZXNwX3NldF9xb3MgeworCXN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgaGRyOworCXUzMiByc3ZkOworfTsKKwogZXh0ZXJuIGludCBiZV9wY2lfZm51bV9nZXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIGludCBiZV9jbWRfUE9TVChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gaW50IGJlX2NtZF9tYWNfYWRkcl9xdWVyeShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTggKm1hY19hZGRyLApAQCAtOTQ3LDQgKzk4OSw4IEBACiAJCQkJc3RydWN0IGJlX2RtYV9tZW0gKm5vbmVtYl9jbWQpOwogZXh0ZXJuIGludCBiZV9jbWRfc2V0X2xvb3BiYWNrKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCBwb3J0X251bSwKIAkJCQl1OCBsb29wYmFja190eXBlLCB1OCBlbmFibGUpOworZXh0ZXJuIGludCBiZV9jbWRfZ2V0X3BoeV9pbmZvKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAorCQlzdHJ1Y3QgYmVfZG1hX21lbSAqY21kKTsKK2V4dGVybiBpbnQgYmVfY21kX3NldF9xb3Moc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBicHMsIHUzMiBkb21haW4pOworZXh0ZXJuIHZvaWQgYmVfZHVtcF91ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2V0aHRvb2wuYwppbmRleCAyMDBlOTg1Li5jZDE2MjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfZXRodG9vbC5jCkBAIC0zMTQsMTUgKzMxNCwxOSBAQAogc3RhdGljIGludCBiZV9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQogewogCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQl1OCBtYWNfc3BlZWQgPSAwLCBjb25uZWN0b3IgPSAwOworCXN0cnVjdCBiZV9kbWFfbWVtIHBoeV9jbWQ7CisJc3RydWN0IGJlX2NtZF9yZXNwX2dldF9waHlfaW5mbyAqcmVzcDsKKwl1OCBtYWNfc3BlZWQgPSAwOwogCXUxNiBsaW5rX3NwZWVkID0gMDsKIAlib29sIGxpbmtfdXAgPSBmYWxzZTsKIAlpbnQgc3RhdHVzOworCXUxNiBpbnRmX3R5cGU7CiAKLQlpZiAoYWRhcHRlci0+bGlua19zcGVlZCA8IDApIHsKKwlpZiAoKGFkYXB0ZXItPmxpbmtfc3BlZWQgPCAwKSB8fCAoIShuZXRkZXYtPmZsYWdzICYgSUZGX1VQKSkpIHsKIAkJc3RhdHVzID0gYmVfY21kX2xpbmtfc3RhdHVzX3F1ZXJ5KGFkYXB0ZXIsICZsaW5rX3VwLAogCQkJCQkJJm1hY19zcGVlZCwgJmxpbmtfc3BlZWQpOwogCisJCWJlX2xpbmtfc3RhdHVzX3VwZGF0ZShhZGFwdGVyLCBsaW5rX3VwKTsKIAkJLyogbGlua19zcGVlZCBpcyBpbiB1bml0cyBvZiAxMCBNYnBzICovCiAJCWlmIChsaW5rX3NwZWVkKSB7CiAJCQllY21kLT5zcGVlZCA9IGxpbmtfc3BlZWQqMTA7CkBAIC0zMzcsNDAgKzM0MSw1NyBAQAogCQkJfQogCQl9CiAKLQkJc3RhdHVzID0gYmVfY21kX3JlYWRfcG9ydF90eXBlKGFkYXB0ZXIsIGFkYXB0ZXItPnBvcnRfbnVtLAotCQkJCQkJJmNvbm5lY3Rvcik7CisJCXBoeV9jbWQuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYmVfY21kX3JlcV9nZXRfcGh5X2luZm8pOworCQlwaHlfY21kLnZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgcGh5X2NtZC5zaXplLAorCQkJCQkmcGh5X2NtZC5kbWEpOworCQlpZiAoIXBoeV9jbWQudmEpIHsKKwkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIk1lbW9yeSBhbGxvYyBmYWlsdXJlXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCXN0YXR1cyA9IGJlX2NtZF9nZXRfcGh5X2luZm8oYWRhcHRlciwgJnBoeV9jbWQpOwogCQlpZiAoIXN0YXR1cykgewotCQkJc3dpdGNoIChjb25uZWN0b3IpIHsKLQkJCWNhc2UgNzoKKwkJCXJlc3AgPSAoc3RydWN0IGJlX2NtZF9yZXNwX2dldF9waHlfaW5mbyAqKSBwaHlfY21kLnZhOworCQkJaW50Zl90eXBlID0gbGUxNl90b19jcHUocmVzcC0+aW50ZXJmYWNlX3R5cGUpOworCisJCQlzd2l0Y2ggKGludGZfdHlwZSkgeworCQkJY2FzZSBQSFlfVFlQRV9YRlBfMTBHQjoKKwkJCWNhc2UgUEhZX1RZUEVfU0ZQXzFHQjoKKwkJCWNhc2UgUEhZX1RZUEVfU0ZQX1BMVVNfMTBHQjoKIAkJCQllY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKLQkJCQllY21kLT50cmFuc2NlaXZlciA9IFhDVlJfRVhURVJOQUw7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDA6Ci0JCQkJZWNtZC0+cG9ydCA9IFBPUlRfVFA7Ci0JCQkJZWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0VYVEVSTkFMOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQllY21kLT5wb3J0ID0gUE9SVF9UUDsKLQkJCQllY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCX0gZWxzZSB7Ci0JCQllY21kLT5wb3J0ID0gUE9SVF9BVUk7CisKKwkJCXN3aXRjaCAoaW50Zl90eXBlKSB7CisJCQljYXNlIFBIWV9UWVBFX0tSXzEwR0I6CisJCQljYXNlIFBIWV9UWVBFX0tYNF8xMEdCOgorCQkJCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKIAkJCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKKwkJCQllY21kLT50cmFuc2NlaXZlciA9IFhDVlJfRVhURVJOQUw7CisJCQkJYnJlYWs7CisJCQl9CiAJCX0KIAogCQkvKiBTYXZlIGZvciBmdXR1cmUgdXNlICovCiAJCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSBlY21kLT5zcGVlZDsKIAkJYWRhcHRlci0+cG9ydF90eXBlID0gZWNtZC0+cG9ydDsKIAkJYWRhcHRlci0+dHJhbnNjZWl2ZXIgPSBlY21kLT50cmFuc2NlaXZlcjsKKwkJYWRhcHRlci0+YXV0b25lZyA9IGVjbWQtPmF1dG9uZWc7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgcGh5X2NtZC5zaXplLAorCQkJCQlwaHlfY21kLnZhLCBwaHlfY21kLmRtYSk7CiAJfSBlbHNlIHsKIAkJZWNtZC0+c3BlZWQgPSBhZGFwdGVyLT5saW5rX3NwZWVkOwogCQllY21kLT5wb3J0ID0gYWRhcHRlci0+cG9ydF90eXBlOwogCQllY21kLT50cmFuc2NlaXZlciA9IGFkYXB0ZXItPnRyYW5zY2VpdmVyOworCQllY21kLT5hdXRvbmVnID0gYWRhcHRlci0+YXV0b25lZzsKIAl9CiAKIAllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKLQllY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwogCWVjbWQtPnBoeV9hZGRyZXNzID0gYWRhcHRlci0+cG9ydF9udW07CiAJc3dpdGNoIChlY21kLT5wb3J0KSB7CiAJY2FzZSBQT1JUX0ZJQlJFOgpAQCAtMzg0LDYgKzQwNSwxMyBAQAogCQlicmVhazsKIAl9CiAKKwlpZiAoZWNtZC0+YXV0b25lZykgeworCQllY21kLT5zdXBwb3J0ZWQgfD0gU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsOworCQllY21kLT5zdXBwb3J0ZWQgfD0gU1VQUE9SVEVEX0F1dG9uZWc7CisJCWVjbWQtPmFkdmVydGlzaW5nIHw9IChBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCB8CisJCQkJQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCk7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2h3LmggYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9ody5oCmluZGV4IDA2MzAyNmQuLjVkMzgwNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2h3LmgKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfaHcuaApAQCAtNTIsMTAgKzUyLDIwIEBACiAgKi8KICNkZWZpbmUgTUVNQkFSX0NUUkxfSU5UX0NUUkxfSE9TVElOVFJfTUFTSwkoMSA8PCAyOSkgLyogYml0IDI5ICovCiAKLS8qKioqKioqKiogUG93ZXIgbWFuYWdtZW50IChXT0wpICoqKioqKioqKiovCisvKioqKioqKioqIFBvd2VyIG1hbmFnZW1lbnQgKFdPTCkgKioqKioqKioqKi8KICNkZWZpbmUgUENJQ0ZHX1BNX0NPTlRST0xfT0ZGU0VUCQkweDQ0CiAjZGVmaW5lIFBDSUNGR19QTV9DT05UUk9MX01BU0sJCQkweDEwOAkvKiBiaXRzIDMgJiA4ICovCiAKKy8qKioqKioqKiogT25saW5lIENvbnRyb2wgUmVnaXN0ZXJzICoqKioqKiovCisjZGVmaW5lIFBDSUNGR19PTkxJTkUwCQkJCTB4QjAKKyNkZWZpbmUgUENJQ0ZHX09OTElORTEJCQkJMHhCNAorCisvKioqKioqKioqIFVFIFN0YXR1cyBhbmQgTWFzayBSZWdpc3RlcnMgKioqLworI2RlZmluZSBQQ0lDRkdfVUVfU1RBVFVTX0xPVwkJCTB4QTAKKyNkZWZpbmUgUENJQ0ZHX1VFX1NUQVRVU19ISUdICQkJMHhBNAorI2RlZmluZSBQQ0lDRkdfVUVfU1RBVFVTX0xPV19NQVNLCQkweEE4CisjZGVmaW5lIFBDSUNGR19VRV9TVEFUVVNfSElfTUFTSwkJMHhBQworCiAvKioqKioqKioqIElTUjAgUmVnaXN0ZXIgb2Zmc2V0ICoqKioqKioqKiovCiAjZGVmaW5lIENFVl9JU1IwX09GRlNFVCAJCQkweEMxOAogI2RlZmluZSBDRVZfSVNSX1NJWkUJCQkJNApAQCAtMTkyLDcgKzIwMiw3IEBACiAJdTggZXZlbnQ7CiAJdTggY3JjOwogCXU4IGZvcndhcmQ7Ci0JdTggaXBzZWM7CisJdTggbHNvNjsKIAl1OCBtZ210OwogCXU4IGlwY3M7CiAJdTggdWRwY3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKaW5kZXggNTRiMTQyNy4uNzRlMTQ2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYwpAQCAtNDAsNiArNDAsNzYgQEAKIAl7IDAgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBiZV9kZXZfaWRzKTsKKy8qIFVFIFN0YXR1cyBMb3cgQ1NSICovCitzdGF0aWMgY2hhciAqdWVfc3RhdHVzX2xvd19kZXNjW10gPSB7CisJIkNFViIsCisJIkNUWCIsCisJIkRCVUYiLAorCSJFUlgiLAorCSJIb3N0IiwKKwkiTVBVIiwKKwkiTkRNQSIsCisJIlBUQyAiLAorCSJSRE1BICIsCisJIlJYRiAiLAorCSJSWElQUyAiLAorCSJSWFVMUDAgIiwKKwkiUlhVTFAxICIsCisJIlJYVUxQMiAiLAorCSJUSU0gIiwKKwkiVFBPU1QgIiwKKwkiVFBSRSAiLAorCSJUWElQUyAiLAorCSJUWFVMUDAgIiwKKwkiVFhVTFAxICIsCisJIlVDICIsCisJIldETUEgIiwKKwkiVFhVTFAyICIsCisJIkhPU1QxICIsCisJIlAwX09CX0xJTksgIiwKKwkiUDFfT0JfTElOSyAiLAorCSJIT1NUX0dQSU8gIiwKKwkiTUJPWCAiLAorCSJBWEdNQUMwIiwKKwkiQVhHTUFDMSIsCisJIkpUQUciLAorCSJNUFVfSU5UUEVORCIKK307CisvKiBVRSBTdGF0dXMgSGlnaCBDU1IgKi8KK3N0YXRpYyBjaGFyICp1ZV9zdGF0dXNfaGlfZGVzY1tdID0geworCSJMUENNRU1IT1NUIiwKKwkiTUdNVF9NQUMiLAorCSJQQ1MwT05MSU5FIiwKKwkiTVBVX0lSQU0iLAorCSJQQ1MxT05MSU5FIiwKKwkiUENUTDAiLAorCSJQQ1RMMSIsCisJIlBNRU0iLAorCSJSUiIsCisJIlRYUEIiLAorCSJSWFBQIiwKKwkiWEFVSSIsCisJIlRYUCIsCisJIkFSTSIsCisJIklQQyIsCisJIkhPU1QyIiwKKwkiSE9TVDMiLAorCSJIT1NUNCIsCisJIkhPU1Q1IiwKKwkiSE9TVDYiLAorCSJIT1NUNyIsCisJIkhPU1Q4IiwKKwkiSE9TVDkiLAorCSJORVRDIgorCSJVbmtub3duIiwKKwkiVW5rbm93biIsCisJIlVua25vd24iLAorCSJVbmtub3duIiwKKwkiVW5rbm93biIsCisJIlVua25vd24iLAorCSJVbmtub3duIiwKKwkiVW5rbm93biIKK307CiAKIHN0YXRpYyB2b2lkIGJlX3F1ZXVlX2ZyZWUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxKQogewpAQCAtODksNiArMTU5LDggQEAKIAl1MzIgdmFsID0gMDsKIAl2YWwgfD0gcWlkICYgREJfUlFfUklOR19JRF9NQVNLOwogCXZhbCB8PSBwb3N0ZWQgPDwgREJfUlFfTlVNX1BPU1RFRF9TSElGVDsKKworCXdtYigpOwogCWlvd3JpdGUzMih2YWwsIGFkYXB0ZXItPmRiICsgREJfUlFfT0ZGU0VUKTsKIH0KIApAQCAtOTcsNiArMTY5LDggQEAKIAl1MzIgdmFsID0gMDsKIAl2YWwgfD0gcWlkICYgREJfVFhVTFBfUklOR19JRF9NQVNLOwogCXZhbCB8PSAocG9zdGVkICYgREJfVFhVTFBfTlVNX1BPU1RFRF9NQVNLKSA8PCBEQl9UWFVMUF9OVU1fUE9TVEVEX1NISUZUOworCisJd21iKCk7CiAJaW93cml0ZTMyKHZhbCwgYWRhcHRlci0+ZGIgKyBEQl9UWFVMUDFfT0ZGU0VUKTsKIH0KIApAQCAtMzczLDEwICs0NDcsMTIgQEAKIAogCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX2hkcl93cmIsIGNyYywgaGRyLCAxKTsKIAotCWlmIChza2Jfc2hpbmZvKHNrYiktPmdzb19zZWdzID4gMSAmJiBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplKSB7CisJaWYgKHNrYl9pc19nc28oc2tiKSkgewogCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9oZHJfd3JiLCBsc28sIGhkciwgMSk7CiAJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX2hkcl93cmIsIGxzb19tc3MsCiAJCQloZHIsIHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUpOworCQlpZiAoc2tiX2lzX2dzb192Nihza2IpKQorCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfaGRyX3dyYiwgbHNvNiwgaGRyLCAxKTsKIAl9IGVsc2UgaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKIAkJaWYgKGlzX3RjcF9wa3Qoc2tiKSkKIAkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX2hkcl93cmIsIHRjcGNzLCBoZHIsIDEpOwpAQCAtNTQ2LDExICs2MjIsMTggQEAKICAqIEEgbWF4IG9mIDY0IChCRV9OVU1fVkxBTlNfU1VQUE9SVEVEKSB2bGFucyBjYW4gYmUgY29uZmlndXJlZCBpbiBCRS4KICAqIElmIHRoZSB1c2VyIGNvbmZpZ3VyZXMgbW9yZSwgcGxhY2UgQkUgaW4gdmxhbiBwcm9taXNjdW91cyBtb2RlLgogICovCi1zdGF0aWMgaW50IGJlX3ZpZF9jb25maWcoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IGJlX3ZpZF9jb25maWcoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgdmYsIHUzMiB2Zl9udW0pCiB7CiAJdTE2IHZ0YWdbQkVfTlVNX1ZMQU5TX1NVUFBPUlRFRF07CiAJdTE2IG50YWdzID0gMCwgaTsKIAlpbnQgc3RhdHVzID0gMDsKKwl1MzIgaWZfaGFuZGxlOworCisJaWYgKHZmKSB7CisJCWlmX2hhbmRsZSA9IGFkYXB0ZXItPnZmX2NmZ1t2Zl9udW1dLnZmX2lmX2hhbmRsZTsKKwkJdnRhZ1swXSA9IGNwdV90b19sZTE2KGFkYXB0ZXItPnZmX2NmZ1t2Zl9udW1dLnZmX3ZsYW5fdGFnKTsKKwkJc3RhdHVzID0gYmVfY21kX3ZsYW5fY29uZmlnKGFkYXB0ZXIsIGlmX2hhbmRsZSwgdnRhZywgMSwgMSwgMCk7CisJfQogCiAJaWYgKGFkYXB0ZXItPnZsYW5zX2FkZGVkIDw9IGFkYXB0ZXItPm1heF92bGFucykgIHsKIAkJLyogQ29uc3RydWN0IFZMQU4gVGFibGUgdG8gZ2l2ZSB0byBIVyAqLwpAQCAtNTY2LDYgKzY0OSw3IEBACiAJCXN0YXR1cyA9IGJlX2NtZF92bGFuX2NvbmZpZyhhZGFwdGVyLCBhZGFwdGVyLT5pZl9oYW5kbGUsCiAJCQkJCU5VTEwsIDAsIDEsIDEpOwogCX0KKwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTU4NiwyNyArNjcwLDI4IEBACiB7CiAJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCisJYWRhcHRlci0+dmxhbnNfYWRkZWQrKzsKIAlpZiAoIWJlX3BoeXNmbihhZGFwdGVyKSkKIAkJcmV0dXJuOwogCiAJYWRhcHRlci0+dmxhbl90YWdbdmlkXSA9IDE7Ci0JYWRhcHRlci0+dmxhbnNfYWRkZWQrKzsKIAlpZiAoYWRhcHRlci0+dmxhbnNfYWRkZWQgPD0gKGFkYXB0ZXItPm1heF92bGFucyArIDEpKQotCQliZV92aWRfY29uZmlnKGFkYXB0ZXIpOworCQliZV92aWRfY29uZmlnKGFkYXB0ZXIsIGZhbHNlLCAwKTsKIH0KIAogc3RhdGljIHZvaWQgYmVfdmxhbl9yZW1fdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiB2aWQpCiB7CiAJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCisJYWRhcHRlci0+dmxhbnNfYWRkZWQtLTsKKwl2bGFuX2dyb3VwX3NldF9kZXZpY2UoYWRhcHRlci0+dmxhbl9ncnAsIHZpZCwgTlVMTCk7CisKIAlpZiAoIWJlX3BoeXNmbihhZGFwdGVyKSkKIAkJcmV0dXJuOwogCiAJYWRhcHRlci0+dmxhbl90YWdbdmlkXSA9IDA7Ci0Jdmxhbl9ncm91cF9zZXRfZGV2aWNlKGFkYXB0ZXItPnZsYW5fZ3JwLCB2aWQsIE5VTEwpOwotCWFkYXB0ZXItPnZsYW5zX2FkZGVkLS07CiAJaWYgKGFkYXB0ZXItPnZsYW5zX2FkZGVkIDw9IGFkYXB0ZXItPm1heF92bGFucykKLQkJYmVfdmlkX2NvbmZpZyhhZGFwdGVyKTsKKwkJYmVfdmlkX2NvbmZpZyhhZGFwdGVyLCBmYWxzZSwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGJlX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpAQCAtNjUwLDE0ICs3MzUsOTMgQEAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobWFjKSB8fCAodmYgPj0gbnVtX3ZmcykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3RhdHVzID0gYmVfY21kX3BtYWNfZGVsKGFkYXB0ZXIsIGFkYXB0ZXItPnZmX2lmX2hhbmRsZVt2Zl0sCi0JCQkJYWRhcHRlci0+dmZfcG1hY19pZFt2Zl0pOworCWlmIChhZGFwdGVyLT52Zl9jZmdbdmZdLnZmX3BtYWNfaWQgIT0gQkVfSU5WQUxJRF9QTUFDX0lEKQorCQlzdGF0dXMgPSBiZV9jbWRfcG1hY19kZWwoYWRhcHRlciwKKwkJCQkJYWRhcHRlci0+dmZfY2ZnW3ZmXS52Zl9pZl9oYW5kbGUsCisJCQkJCWFkYXB0ZXItPnZmX2NmZ1t2Zl0udmZfcG1hY19pZCk7CiAKLQlzdGF0dXMgPSBiZV9jbWRfcG1hY19hZGQoYWRhcHRlciwgbWFjLCBhZGFwdGVyLT52Zl9pZl9oYW5kbGVbdmZdLAotCQkJCSZhZGFwdGVyLT52Zl9wbWFjX2lkW3ZmXSk7Ci0JaWYgKCFzdGF0dXMpCisJc3RhdHVzID0gYmVfY21kX3BtYWNfYWRkKGFkYXB0ZXIsIG1hYywKKwkJCQlhZGFwdGVyLT52Zl9jZmdbdmZdLnZmX2lmX2hhbmRsZSwKKwkJCQkmYWRhcHRlci0+dmZfY2ZnW3ZmXS52Zl9wbWFjX2lkKTsKKworCWlmIChzdGF0dXMpCiAJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIk1BQyAlcE0gc2V0IG9uIFZGICVkIEZhaWxlZFxuIiwKIAkJCQltYWMsIHZmKTsKKwllbHNlCisJCW1lbWNweShhZGFwdGVyLT52Zl9jZmdbdmZdLnZmX21hY19hZGRyLCBtYWMsIEVUSF9BTEVOKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgYmVfZ2V0X3ZmX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmYsCisJCQlzdHJ1Y3QgaWZsYV92Zl9pbmZvICp2aSkKK3sKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAoIWFkYXB0ZXItPnNyaW92X2VuYWJsZWQpCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAodmYgPj0gbnVtX3ZmcykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2aS0+dmYgPSB2ZjsKKwl2aS0+dHhfcmF0ZSA9IGFkYXB0ZXItPnZmX2NmZ1t2Zl0udmZfdHhfcmF0ZTsKKwl2aS0+dmxhbiA9IGFkYXB0ZXItPnZmX2NmZ1t2Zl0udmZfdmxhbl90YWc7CisJdmktPnFvcyA9IDA7CisJbWVtY3B5KCZ2aS0+bWFjLCBhZGFwdGVyLT52Zl9jZmdbdmZdLnZmX21hY19hZGRyLCBFVEhfQUxFTik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZV9zZXRfdmZfdmxhbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJaW50IHZmLCB1MTYgdmxhbiwgdTggcW9zKQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgc3RhdHVzID0gMDsKKworCWlmICghYWRhcHRlci0+c3Jpb3ZfZW5hYmxlZCkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmICgodmYgPj0gbnVtX3ZmcykgfHwgKHZsYW4gPiA0MDk1KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodmxhbikgeworCQlhZGFwdGVyLT52Zl9jZmdbdmZdLnZmX3ZsYW5fdGFnID0gdmxhbjsKKwkJYWRhcHRlci0+dmxhbnNfYWRkZWQrKzsKKwl9IGVsc2UgeworCQlhZGFwdGVyLT52Zl9jZmdbdmZdLnZmX3ZsYW5fdGFnID0gMDsKKwkJYWRhcHRlci0+dmxhbnNfYWRkZWQtLTsKKwl9CisKKwlzdGF0dXMgPSBiZV92aWRfY29uZmlnKGFkYXB0ZXIsIHRydWUsIHZmKTsKKworCWlmIChzdGF0dXMpCisJCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJIlZMQU4gJWQgY29uZmlnIG9uIFZGICVkIGZhaWxlZFxuIiwgdmxhbiwgdmYpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgYmVfc2V0X3ZmX3R4X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCWludCB2ZiwgaW50IHJhdGUpCit7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBzdGF0dXMgPSAwOworCisJaWYgKCFhZGFwdGVyLT5zcmlvdl9lbmFibGVkKQorCQlyZXR1cm4gLUVQRVJNOworCisJaWYgKCh2ZiA+PSBudW1fdmZzKSB8fCAocmF0ZSA8IDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChyYXRlID4gMTAwMDApCisJCXJhdGUgPSAxMDAwMDsKKworCWFkYXB0ZXItPnZmX2NmZ1t2Zl0udmZfdHhfcmF0ZSA9IHJhdGU7CisJc3RhdHVzID0gYmVfY21kX3NldF9xb3MoYWRhcHRlciwgcmF0ZSAvIDEwLCB2Zik7CisKKwlpZiAoc3RhdHVzKQorCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCSJ0eCByYXRlICVkIG9uIFZGICVkIGZhaWxlZFxuIiwgcmF0ZSwgdmYpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTg2OSw3ICsxMDMzLDcgQEAKIAogCS8qIHZsYW5mIGNvdWxkIGJlIHdyb25nbHkgc2V0IGluIHNvbWUgY2FyZHMuCiAJICogaWdub3JlIGlmIHZ0bSBpcyBub3Qgc2V0ICovCi0JaWYgKChhZGFwdGVyLT5jYXAgJiAweDQwMCkgJiYgIXZ0bSkKKwlpZiAoKGFkYXB0ZXItPmZ1bmN0aW9uX21vZGUgJiAweDQwMCkgJiYgIXZ0bSkKIAkJdmxhbmYgPSAwOwogCiAJaWYgKHVubGlrZWx5KHZsYW5mKSkgewpAQCAtOTA5LDcgKzEwNzMsNyBAQAogCiAJLyogdmxhbmYgY291bGQgYmUgd3JvbmdseSBzZXQgaW4gc29tZSBjYXJkcy4KIAkgKiBpZ25vcmUgaWYgdnRtIGlzIG5vdCBzZXQgKi8KLQlpZiAoKGFkYXB0ZXItPmNhcCAmIDB4NDAwKSAmJiAhdnRtKQorCWlmICgoYWRhcHRlci0+ZnVuY3Rpb25fbW9kZSAmIDB4NDAwKSAmJiAhdnRtKQogCQl2bGFuZiA9IDA7CiAKIAlza2IgPSBuYXBpX2dldF9mcmFncygmZXFfb2JqLT5uYXBpKTsKQEAgLTk3MSw2ICsxMTM1LDcgQEAKIAlpZiAocnhjcC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsLCB2YWxpZCkgLyAzMl0gPT0gMCkKIAkJcmV0dXJuIE5VTEw7CiAKKwlybWIoKTsKIAliZV9kd3NfbGVfdG9fY3B1KHJ4Y3AsIHNpemVvZigqcnhjcCkpOwogCiAJcXVldWVfdGFpbF9pbmMoJmFkYXB0ZXItPnJ4X29iai5jcSk7CkBAIC0xMDY0LDYgKzEyMjksNyBAQAogCWlmICh0eGNwLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9ldGhfdHhfY29tcGwsIHZhbGlkKSAvIDMyXSA9PSAwKQogCQlyZXR1cm4gTlVMTDsKIAorCXJtYigpOwogCWJlX2R3c19sZV90b19jcHUodHhjcCwgc2l6ZW9mKCp0eGNwKSk7CiAKIAl0eGNwLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9ldGhfdHhfY29tcGwsIHZhbGlkKSAvIDMyXSA9IDA7CkBAIC0xMTExLDYgKzEyNzcsNyBAQAogCWlmICghZXFlLT5ldnQpCiAJCXJldHVybiBOVUxMOwogCisJcm1iKCk7CiAJZXFlLT5ldnQgPSBsZTMyX3RvX2NwdShlcWUtPmV2dCk7CiAJcXVldWVfdGFpbF9pbmMoJmVxX29iai0+cSk7CiAJcmV0dXJuIGVxZTsKQEAgLTE1NzYsMTIgKzE3NDMsNjYgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGJlX2RldGVjdF91ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgb25saW5lMCA9IDAsIG9ubGluZTEgPSAwOworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGFkYXB0ZXItPnBkZXYsIFBDSUNGR19PTkxJTkUwLCAmb25saW5lMCk7CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoYWRhcHRlci0+cGRldiwgUENJQ0ZHX09OTElORTEsICZvbmxpbmUxKTsKKworCWlmICghb25saW5lMCB8fCAhb25saW5lMSkgeworCQlhZGFwdGVyLT51ZV9kZXRlY3RlZCA9IHRydWU7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJVRSBEZXRlY3RlZCEhIG9ubGluZTA9JWQgb25saW5lMT0lZFxuIiwKKwkJCW9ubGluZTAsIG9ubGluZTEpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgYmVfZHVtcF91ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgdWVfc3RhdHVzX2xvLCB1ZV9zdGF0dXNfaGksIHVlX3N0YXR1c19sb19tYXNrLCB1ZV9zdGF0dXNfaGlfbWFzazsKKwl1MzIgaTsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChhZGFwdGVyLT5wZGV2LAorCQkJCVBDSUNGR19VRV9TVEFUVVNfTE9XLCAmdWVfc3RhdHVzX2xvKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoYWRhcHRlci0+cGRldiwKKwkJCQlQQ0lDRkdfVUVfU1RBVFVTX0hJR0gsICZ1ZV9zdGF0dXNfaGkpOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChhZGFwdGVyLT5wZGV2LAorCQkJCVBDSUNGR19VRV9TVEFUVVNfTE9XX01BU0ssICZ1ZV9zdGF0dXNfbG9fbWFzayk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGFkYXB0ZXItPnBkZXYsCisJCQkJUENJQ0ZHX1VFX1NUQVRVU19ISV9NQVNLLCAmdWVfc3RhdHVzX2hpX21hc2spOworCisJdWVfc3RhdHVzX2xvID0gKHVlX3N0YXR1c19sbyAmICh+dWVfc3RhdHVzX2xvX21hc2spKTsKKwl1ZV9zdGF0dXNfaGkgPSAodWVfc3RhdHVzX2hpICYgKH51ZV9zdGF0dXNfaGlfbWFzaykpOworCisJaWYgKHVlX3N0YXR1c19sbykgeworCQlmb3IgKGkgPSAwOyB1ZV9zdGF0dXNfbG87IHVlX3N0YXR1c19sbyA+Pj0gMSwgaSsrKSB7CisJCQlpZiAodWVfc3RhdHVzX2xvICYgMSkKKwkJCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJIlVFOiAlcyBiaXQgc2V0XG4iLCB1ZV9zdGF0dXNfbG93X2Rlc2NbaV0pOworCQl9CisJfQorCWlmICh1ZV9zdGF0dXNfaGkpIHsKKwkJZm9yIChpID0gMDsgdWVfc3RhdHVzX2hpOyB1ZV9zdGF0dXNfaGkgPj49IDEsIGkrKykgeworCQkJaWYgKHVlX3N0YXR1c19oaSAmIDEpCisJCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCSJVRTogJXMgYml0IHNldFxuIiwgdWVfc3RhdHVzX2hpX2Rlc2NbaV0pOworCQl9CisJfQorCit9CisKIHN0YXRpYyB2b2lkIGJlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGJlX2FkYXB0ZXIsIHdvcmsud29yayk7CiAKLQliZV9jbWRfZ2V0X3N0YXRzKGFkYXB0ZXIsICZhZGFwdGVyLT5zdGF0cy5jbWQpOworCWlmICghYWRhcHRlci0+c3RhdHNfaW9jdGxfc2VudCkKKwkJYmVfY21kX2dldF9zdGF0cyhhZGFwdGVyLCAmYWRhcHRlci0+c3RhdHMuY21kKTsKIAogCS8qIFNldCBFUSBkZWxheSAqLwogCWJlX3J4X2VxZF91cGRhdGUoYWRhcHRlcik7CkBAIC0xNTkzLDYgKzE4MTQsMTAgQEAKIAkJYWRhcHRlci0+cnhfcG9zdF9zdGFydmVkID0gZmFsc2U7CiAJCWJlX3Bvc3RfcnhfZnJhZ3MoYWRhcHRlcik7CiAJfQorCWlmICghYWRhcHRlci0+dWVfZGV0ZWN0ZWQpIHsKKwkJaWYgKGJlX2RldGVjdF91ZShhZGFwdGVyKSkKKwkJCWJlX2R1bXBfdWUoYWRhcHRlcik7CisJfQogCiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhZGFwdGVyLT53b3JrLCBtc2Vjc190b19qaWZmaWVzKDEwMDApKTsKIH0KQEAgLTE2MjAsOSArMTg0NSwxMSBAQAogCiBzdGF0aWMgdm9pZCBiZV9zcmlvdl9lbmFibGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CisJYmVfY2hlY2tfc3Jpb3ZfZm5fdHlwZShhZGFwdGVyKTsKICNpZmRlZiBDT05GSUdfUENJX0lPVgotCWludCBzdGF0dXM7CiAJaWYgKGJlX3BoeXNmbihhZGFwdGVyKSAmJiBudW1fdmZzKSB7CisJCWludCBzdGF0dXM7CisKIAkJc3RhdHVzID0gcGNpX2VuYWJsZV9zcmlvdihhZGFwdGVyLT5wZGV2LCBudW1fdmZzKTsKIAkJYWRhcHRlci0+c3Jpb3ZfZW5hYmxlZCA9IHN0YXR1cyA/IGZhbHNlIDogdHJ1ZTsKIAl9CkBAIC0xNzM1LDYgKzE5NjIsNDQgQEAKIAlhZGFwdGVyLT5pc3JfcmVnaXN0ZXJlZCA9IGZhbHNlOwogfQogCitzdGF0aWMgaW50IGJlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBiZV9lcV9vYmogKnJ4X2VxID0gJmFkYXB0ZXItPnJ4X2VxOworCXN0cnVjdCBiZV9lcV9vYmogKnR4X2VxID0gJmFkYXB0ZXItPnR4X2VxOworCWludCB2ZWM7CisKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFkYXB0ZXItPndvcmspOworCisJYmVfYXN5bmNfbWNjX2Rpc2FibGUoYWRhcHRlcik7CisKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwlhZGFwdGVyLT5saW5rX3VwID0gZmFsc2U7CisKKwliZV9pbnRyX3NldChhZGFwdGVyLCBmYWxzZSk7CisKKwlpZiAoYWRhcHRlci0+bXNpeF9lbmFibGVkKSB7CisJCXZlYyA9IGJlX21zaXhfdmVjX2dldChhZGFwdGVyLCB0eF9lcS0+cS5pZCk7CisJCXN5bmNocm9uaXplX2lycSh2ZWMpOworCQl2ZWMgPSBiZV9tc2l4X3ZlY19nZXQoYWRhcHRlciwgcnhfZXEtPnEuaWQpOworCQlzeW5jaHJvbml6ZV9pcnEodmVjKTsKKwl9IGVsc2UgeworCQlzeW5jaHJvbml6ZV9pcnEobmV0ZGV2LT5pcnEpOworCX0KKwliZV9pcnFfdW5yZWdpc3RlcihhZGFwdGVyKTsKKworCW5hcGlfZGlzYWJsZSgmcnhfZXEtPm5hcGkpOworCW5hcGlfZGlzYWJsZSgmdHhfZXEtPm5hcGkpOworCisJLyogV2FpdCBmb3IgYWxsIHBlbmRpbmcgdHggY29tcGxldGlvbnMgdG8gYXJyaXZlIHNvIHRoYXQKKwkgKiBhbGwgdHggc2ticyBhcmUgZnJlZWQuCisJICovCisJYmVfdHhfY29tcGxfY2xlYW4oYWRhcHRlcik7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwpAQCAtMTc2NSwyNyArMjAzMCwyOSBAQAogCS8qIE5vdyB0aGF0IGludGVycnVwdHMgYXJlIG9uIHdlIGNhbiBwcm9jZXNzIGFzeW5jIG1jYyAqLwogCWJlX2FzeW5jX21jY19lbmFibGUoYWRhcHRlcik7CiAKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFkYXB0ZXItPndvcmssIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CisKIAlzdGF0dXMgPSBiZV9jbWRfbGlua19zdGF0dXNfcXVlcnkoYWRhcHRlciwgJmxpbmtfdXAsICZtYWNfc3BlZWQsCiAJCQkmbGlua19zcGVlZCk7CiAJaWYgKHN0YXR1cykKLQkJZ290byByZXRfc3RzOworCQlnb3RvIGVycjsKIAliZV9saW5rX3N0YXR1c191cGRhdGUoYWRhcHRlciwgbGlua191cCk7CiAKLQlpZiAoYmVfcGh5c2ZuKGFkYXB0ZXIpKQotCQlzdGF0dXMgPSBiZV92aWRfY29uZmlnKGFkYXB0ZXIpOwotCWlmIChzdGF0dXMpCi0JCWdvdG8gcmV0X3N0czsKLQogCWlmIChiZV9waHlzZm4oYWRhcHRlcikpIHsKKwkJc3RhdHVzID0gYmVfdmlkX2NvbmZpZyhhZGFwdGVyLCBmYWxzZSwgMCk7CisJCWlmIChzdGF0dXMpCisJCQlnb3RvIGVycjsKKwogCQlzdGF0dXMgPSBiZV9jbWRfc2V0X2Zsb3dfY29udHJvbChhZGFwdGVyLAogCQkJCWFkYXB0ZXItPnR4X2ZjLCBhZGFwdGVyLT5yeF9mYyk7CiAJCWlmIChzdGF0dXMpCi0JCQlnb3RvIHJldF9zdHM7CisJCQlnb3RvIGVycjsKIAl9CiAKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFkYXB0ZXItPndvcmssIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7Ci1yZXRfc3RzOgotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIDA7CitlcnI6CisJYmVfY2xvc2UoYWRhcHRlci0+bmV0ZGV2KTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIGludCBiZV9zZXR1cF93b2woc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgZW5hYmxlKQpAQCAtMTg1MywxMyArMjEyMCwxNSBAQAogCQkJY2FwX2ZsYWdzID0gZW5fZmxhZ3MgPSBCRV9JRl9GTEFHU19VTlRBR0dFRAogCQkJCQl8IEJFX0lGX0ZMQUdTX0JST0FEQ0FTVDsKIAkJCXN0YXR1cyA9IGJlX2NtZF9pZl9jcmVhdGUoYWRhcHRlciwgY2FwX2ZsYWdzLCBlbl9mbGFncywKLQkJCQkJbWFjLCB0cnVlLCAmYWRhcHRlci0+dmZfaWZfaGFuZGxlW3ZmXSwKKwkJCQkJbWFjLCB0cnVlLAorCQkJCQkmYWRhcHRlci0+dmZfY2ZnW3ZmXS52Zl9pZl9oYW5kbGUsCiAJCQkJCU5VTEwsIHZmKzEpOwogCQkJaWYgKHN0YXR1cykgewogCQkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKIAkJCQkiSW50ZXJmYWNlIENyZWF0ZSBmYWlsZWQgZm9yIFZGICVkXG4iLCB2Zik7CiAJCQkJZ290byBpZl9kZXN0cm95OwogCQkJfQorCQkJYWRhcHRlci0+dmZfY2ZnW3ZmXS52Zl9wbWFjX2lkID0gQkVfSU5WQUxJRF9QTUFDX0lEOwogCQkJdmYrKzsKIAkJfQogCX0gZWxzZSBpZiAoIWJlX3BoeXNmbihhZGFwdGVyKSkgewpAQCAtMTg5Myw4ICsyMTYyLDkgQEAKIAliZV90eF9xdWV1ZXNfZGVzdHJveShhZGFwdGVyKTsKIGlmX2Rlc3Ryb3k6CiAJZm9yICh2ZiA9IDA7IHZmIDwgbnVtX3ZmczsgdmYrKykKLQkJaWYgKGFkYXB0ZXItPnZmX2lmX2hhbmRsZVt2Zl0pCi0JCQliZV9jbWRfaWZfZGVzdHJveShhZGFwdGVyLCBhZGFwdGVyLT52Zl9pZl9oYW5kbGVbdmZdKTsKKwkJaWYgKGFkYXB0ZXItPnZmX2NmZ1t2Zl0udmZfaWZfaGFuZGxlKQorCQkJYmVfY21kX2lmX2Rlc3Ryb3koYWRhcHRlciwKKwkJCQkJYWRhcHRlci0+dmZfY2ZnW3ZmXS52Zl9pZl9oYW5kbGUpOwogCWJlX2NtZF9pZl9kZXN0cm95KGFkYXB0ZXIsIGFkYXB0ZXItPmlmX2hhbmRsZSk7CiBkb19ub25lOgogCXJldHVybiBzdGF0dXM7CkBAIC0xOTEzLDQzICsyMTgzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgYmVfZXFfb2JqICpyeF9lcSA9ICZhZGFwdGVyLT5yeF9lcTsKLQlzdHJ1Y3QgYmVfZXFfb2JqICp0eF9lcSA9ICZhZGFwdGVyLT50eF9lcTsKLQlpbnQgdmVjOwotCi0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhZGFwdGVyLT53b3JrKTsKLQotCWJlX2FzeW5jX21jY19kaXNhYmxlKGFkYXB0ZXIpOwotCi0JbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwotCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7Ci0JYWRhcHRlci0+bGlua191cCA9IGZhbHNlOwotCi0JYmVfaW50cl9zZXQoYWRhcHRlciwgZmFsc2UpOwotCi0JaWYgKGFkYXB0ZXItPm1zaXhfZW5hYmxlZCkgewotCQl2ZWMgPSBiZV9tc2l4X3ZlY19nZXQoYWRhcHRlciwgdHhfZXEtPnEuaWQpOwotCQlzeW5jaHJvbml6ZV9pcnEodmVjKTsKLQkJdmVjID0gYmVfbXNpeF92ZWNfZ2V0KGFkYXB0ZXIsIHJ4X2VxLT5xLmlkKTsKLQkJc3luY2hyb25pemVfaXJxKHZlYyk7Ci0JfSBlbHNlIHsKLQkJc3luY2hyb25pemVfaXJxKG5ldGRldi0+aXJxKTsKLQl9Ci0JYmVfaXJxX3VucmVnaXN0ZXIoYWRhcHRlcik7Ci0KLQluYXBpX2Rpc2FibGUoJnJ4X2VxLT5uYXBpKTsKLQluYXBpX2Rpc2FibGUoJnR4X2VxLT5uYXBpKTsKLQotCS8qIFdhaXQgZm9yIGFsbCBwZW5kaW5nIHR4IGNvbXBsZXRpb25zIHRvIGFycml2ZSBzbyB0aGF0Ci0JICogYWxsIHR4IHNrYnMgYXJlIGZyZWVkLgotCSAqLwotCWJlX3R4X2NvbXBsX2NsZWFuKGFkYXB0ZXIpOwotCi0JcmV0dXJuIDA7Ci19CiAKICNkZWZpbmUgRldfRklMRV9IRFJfU0lHTiAJIlNlcnZlckVuZ2luZXMgQ29ycC4gIgogY2hhciBmbGFzaF9jb29raWVbMl1bMTZdID0JeyIqKiogU0UgRkxBUyIsCkBAIC0yMTc0LDcgKzI0MDcsMTAgQEAKIAkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIJPSBiZV92bGFuX3JlZ2lzdGVyLAogCS5uZG9fdmxhbl9yeF9hZGRfdmlkCT0gYmVfdmxhbl9hZGRfdmlkLAogCS5uZG9fdmxhbl9yeF9raWxsX3ZpZAk9IGJlX3ZsYW5fcmVtX3ZpZCwKLQkubmRvX3NldF92Zl9tYWMJCT0gYmVfc2V0X3ZmX21hYworCS5uZG9fc2V0X3ZmX21hYwkJPSBiZV9zZXRfdmZfbWFjLAorCS5uZG9fc2V0X3ZmX3ZsYW4JPSBiZV9zZXRfdmZfdmxhbiwKKwkubmRvX3NldF92Zl90eF9yYXRlCT0gYmVfc2V0X3ZmX3R4X3JhdGUsCisJLm5kb19nZXRfdmZfY29uZmlnCT0gYmVfZ2V0X3ZmX2NvbmZpZwogfTsKIAogc3RhdGljIHZvaWQgYmVfbmV0ZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKQEAgLTIxODMsNyArMjQxOSw3IEBACiAKIAluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0hXX1ZMQU5fUlggfCBORVRJRl9GX1RTTyB8CiAJCU5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9GSUxURVIgfCBORVRJRl9GX0hXX0NTVU0gfAotCQlORVRJRl9GX0dSTzsKKwkJTkVUSUZfRl9HUk8gfCBORVRJRl9GX1RTTzY7CiAKIAluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9IV19DU1VNOwogCkBAIC0yMzkzLDcgKzI2MjksNyBAQAogCQlyZXR1cm4gc3RhdHVzOwogCiAJc3RhdHVzID0gYmVfY21kX3F1ZXJ5X2Z3X2NmZyhhZGFwdGVyLAotCQkJCSZhZGFwdGVyLT5wb3J0X251bSwgJmFkYXB0ZXItPmNhcCk7CisJCQkJJmFkYXB0ZXItPnBvcnRfbnVtLCAmYWRhcHRlci0+ZnVuY3Rpb25fbW9kZSk7CiAJaWYgKHN0YXR1cykKIAkJcmV0dXJuIHN0YXR1czsKIApAQCAtMjQxMyw3ICsyNjQ5LDcgQEAKIAkJbWVtY3B5KGFkYXB0ZXItPm5ldGRldi0+cGVybV9hZGRyLCBtYWMsIEVUSF9BTEVOKTsKIAl9CiAKLQlpZiAoYWRhcHRlci0+Y2FwICYgMHg0MDApCisJaWYgKGFkYXB0ZXItPmZ1bmN0aW9uX21vZGUgJiAweDQwMCkKIAkJYWRhcHRlci0+bWF4X3ZsYW5zID0gQkVfTlVNX1ZMQU5TX1NVUFBPUlRFRC80OwogCWVsc2UKIAkJYWRhcHRlci0+bWF4X3ZsYW5zID0gQkVfTlVNX1ZMQU5TX1NVUFBPUlRFRDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JmaW5fbWFjLmMgYi9kcml2ZXJzL25ldC9iZmluX21hYy5jCmluZGV4IDM2OGYzMzMuLjAxMjYxM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JmaW5fbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvYmZpbl9tYWMuYwpAQCAtOTIyLDYxICs5MjIsNzMgQEAKICMgZGVmaW5lIGJmaW5fdHhfaHd0c3RhbXAoZGV2LCBza2IpCiAjZW5kaWYKIAotc3RhdGljIHZvaWQgYWRqdXN0X3R4X2xpc3Qodm9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfdHhfcmVjbGFpbV9za2Iodm9pZCkKIHsKLQlpbnQgdGltZW91dF9jbnQgPSBNQVhfVElNRU9VVF9DTlQ7Ci0KLQlpZiAodHhfbGlzdF9oZWFkLT5zdGF0dXMuc3RhdHVzX3dvcmQgIT0gMCAmJgotCSAgICBjdXJyZW50X3R4X3B0ciAhPSB0eF9saXN0X2hlYWQpIHsKLQkJZ290byBhZGp1c3RfaGVhZDsJLyogcmVsZWFzZWQgc29tZXRoaW5nLCBqdXN0IHJldHVybjsgKi8KLQl9Ci0KLQkvKgotCSAqIGlmIG5vdGhpbmcgcmVsZWFzZWQsIGNoZWNrIHdhaXQgY29uZGl0aW9uCi0JICogY3VycmVudCdzIG5leHQgY2FuIG5vdCBiZSB0aGUgaGVhZCwKLQkgKiBvdGhlcndpc2UgdGhlIGRtYSB3aWxsIG5vdCBzdG9wIGFzIHdlIHdhbnQKLQkgKi8KLQlpZiAoY3VycmVudF90eF9wdHItPm5leHQtPm5leHQgPT0gdHhfbGlzdF9oZWFkKSB7Ci0JCXdoaWxlICh0eF9saXN0X2hlYWQtPnN0YXR1cy5zdGF0dXNfd29yZCA9PSAwKSB7Ci0JCQl1ZGVsYXkoMTApOwotCQkJaWYgKHR4X2xpc3RfaGVhZC0+c3RhdHVzLnN0YXR1c193b3JkICE9IDAgfHwKLQkJCSAgICAhKGJmaW5fcmVhZF9ETUEyX0lSUV9TVEFUVVMoKSAmIERNQV9SVU4pKSB7Ci0JCQkJZ290byBhZGp1c3RfaGVhZDsKLQkJCX0KLQkJCWlmICh0aW1lb3V0X2NudC0tIDwgMCkgewotCQkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQotCQkJCSI6IHdhaXQgZm9yIGFkanVzdCB0eCBsaXN0IGhlYWQgdGltZW91dFxuIik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKHR4X2xpc3RfaGVhZC0+c3RhdHVzLnN0YXR1c193b3JkICE9IDApIHsKLQkJCWdvdG8gYWRqdXN0X2hlYWQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm47Ci0KLWFkanVzdF9oZWFkOgogCWRvIHsKIAkJdHhfbGlzdF9oZWFkLT5kZXNjX2EuY29uZmlnICY9IH5ETUFFTjsKIAkJdHhfbGlzdF9oZWFkLT5zdGF0dXMuc3RhdHVzX3dvcmQgPSAwOwogCQlpZiAodHhfbGlzdF9oZWFkLT5za2IpIHsKIAkJCWRldl9rZnJlZV9za2IodHhfbGlzdF9oZWFkLT5za2IpOwogCQkJdHhfbGlzdF9oZWFkLT5za2IgPSBOVUxMOwotCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCi0JCQkgICAgICAgIjogbm8gc2tfYnVmZiBpbiBhIHRyYW5zbWl0dGVkIGZyYW1lIVxuIik7CiAJCX0KIAkJdHhfbGlzdF9oZWFkID0gdHhfbGlzdF9oZWFkLT5uZXh0OwotCX0gd2hpbGUgKHR4X2xpc3RfaGVhZC0+c3RhdHVzLnN0YXR1c193b3JkICE9IDAgJiYKLQkJIGN1cnJlbnRfdHhfcHRyICE9IHR4X2xpc3RfaGVhZCk7Ci0JcmV0dXJuOwogCisJfSB3aGlsZSAodHhfbGlzdF9oZWFkLT5zdGF0dXMuc3RhdHVzX3dvcmQgIT0gMCk7Cit9CisKK3N0YXRpYyB2b2lkIHR4X3JlY2xhaW1fc2tiKHN0cnVjdCBiZmluX21hY19sb2NhbCAqbHApCit7CisJaW50IHRpbWVvdXRfY250ID0gTUFYX1RJTUVPVVRfQ05UOworCisJaWYgKHR4X2xpc3RfaGVhZC0+c3RhdHVzLnN0YXR1c193b3JkICE9IDApCisJCV90eF9yZWNsYWltX3NrYigpOworCisJaWYgKGN1cnJlbnRfdHhfcHRyLT5uZXh0ID09IHR4X2xpc3RfaGVhZCkgeworCQl3aGlsZSAodHhfbGlzdF9oZWFkLT5zdGF0dXMuc3RhdHVzX3dvcmQgPT0gMCkgeworCQkJLyogc2xvdyBkb3duIHBvbGxpbmcgdG8gYXZvaWQgdG9vIG1hbnkgcXVldWUgc3RvcC4gKi8KKwkJCXVkZWxheSgxMCk7CisJCQkvKiByZWNsYWltIHNrYiBpZiBETUEgaXMgbm90IHJ1bm5pbmcuICovCisJCQlpZiAoIShiZmluX3JlYWRfRE1BMl9JUlFfU1RBVFVTKCkgJiBETUFfUlVOKSkKKwkJCQlicmVhazsKKwkJCWlmICh0aW1lb3V0X2NudC0tIDwgMCkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmICh0aW1lb3V0X2NudCA+PSAwKQorCQkJX3R4X3JlY2xhaW1fc2tiKCk7CisJCWVsc2UKKwkJCW5ldGlmX3N0b3BfcXVldWUobHAtPm5kZXYpOworCX0KKworCWlmIChjdXJyZW50X3R4X3B0ci0+bmV4dCAhPSB0eF9saXN0X2hlYWQgJiYKKwkJbmV0aWZfcXVldWVfc3RvcHBlZChscC0+bmRldikpCisJCW5ldGlmX3dha2VfcXVldWUobHAtPm5kZXYpOworCisJaWYgKHR4X2xpc3RfaGVhZCAhPSBjdXJyZW50X3R4X3B0cikgeworCQkvKiBzaG9ydGVuIHRoZSB0aW1lciBpbnRlcnZhbCBpZiB0eCBxdWV1ZSBpcyBzdG9wcGVkICovCisJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGxwLT5uZGV2KSkKKwkJCWxwLT50eF9yZWNsYWltX3RpbWVyLmV4cGlyZXMgPQorCQkJCWppZmZpZXMgKyAoVFhfUkVDTEFJTV9KSUZGSUVTID4+IDQpOworCQllbHNlCisJCQlscC0+dHhfcmVjbGFpbV90aW1lci5leHBpcmVzID0KKwkJCQlqaWZmaWVzICsgVFhfUkVDTEFJTV9KSUZGSUVTOworCisJCW1vZF90aW1lcigmbHAtPnR4X3JlY2xhaW1fdGltZXIsCisJCQlscC0+dHhfcmVjbGFpbV90aW1lci5leHBpcmVzKTsKKwl9CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHR4X3JlY2xhaW1fc2tiX3RpbWVvdXQodW5zaWduZWQgbG9uZyBscCkKK3sKKwl0eF9yZWNsYWltX3NrYigoc3RydWN0IGJmaW5fbWFjX2xvY2FsICopbHApOwogfQogCiBzdGF0aWMgaW50IGJmaW5fbWFjX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGJmaW5fbWFjX2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdTE2ICpkYXRhOwogCXUzMiBkYXRhX2FsaWduID0gKHVuc2lnbmVkIGxvbmcpKHNrYi0+ZGF0YSkgJiAweDM7CiAJdW5pb24gc2tiX3NoYXJlZF90eCAqc2h0eCA9IHNrYl90eChza2IpOwpAQCAtMTAwOSw4ICsxMDIxLDYgQEAKIAkJCXNrYi0+bGVuKTsKIAkJY3VycmVudF90eF9wdHItPmRlc2NfYS5zdGFydF9hZGRyID0KIAkJCSh1MzIpY3VycmVudF90eF9wdHItPnBhY2tldDsKLQkJaWYgKGN1cnJlbnRfdHhfcHRyLT5zdGF0dXMuc3RhdHVzX3dvcmQgIT0gMCkKLQkJCWN1cnJlbnRfdHhfcHRyLT5zdGF0dXMuc3RhdHVzX3dvcmQgPSAwOwogCQlibGFja2Zpbl9kY2FjaGVfZmx1c2hfcmFuZ2UoCiAJCQkodTMyKWN1cnJlbnRfdHhfcHRyLT5wYWNrZXQsCiAJCQkodTMyKShjdXJyZW50X3R4X3B0ci0+cGFja2V0ICsgc2tiLT5sZW4gKyAyKSk7CkBAIC0xMDIyLDYgKzEwMzIsOSBAQAogCSAqLwogCVNTWU5DKCk7CiAKKwkvKiBhbHdheXMgY2xlYXIgc3RhdHVzIGJ1ZmZlciBiZWZvcmUgc3RhcnQgdHggZG1hICovCisJY3VycmVudF90eF9wdHItPnN0YXR1cy5zdGF0dXNfd29yZCA9IDA7CisKIAkvKiBlbmFibGUgdGhpcyBwYWNrZXQncyBkbWEgKi8KIAljdXJyZW50X3R4X3B0ci0+ZGVzY19hLmNvbmZpZyB8PSBETUFFTjsKIApAQCAtMTAzNywxMyArMTA1MCwxNCBAQAogCWJmaW5fd3JpdGVfRU1BQ19PUE1PREUoYmZpbl9yZWFkX0VNQUNfT1BNT0RFKCkgfCBURSk7CiAKIG91dDoKLQlhZGp1c3RfdHhfbGlzdCgpOwotCiAJYmZpbl90eF9od3RzdGFtcChkZXYsIHNrYik7CiAKIAljdXJyZW50X3R4X3B0ciA9IGN1cnJlbnRfdHhfcHRyLT5uZXh0OwogCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gKHNrYi0+bGVuKTsKKworCXR4X3JlY2xhaW1fc2tiKGxwKTsKKwogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKQEAgLTExNjcsOCArMTE4MSwxMSBAQAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiBzdGF0aWMgdm9pZCBiZmluX21hY19wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGJmaW5fbWFjX2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisKIAlkaXNhYmxlX2lycShJUlFfTUFDX1JYKTsKIAliZmluX21hY19pbnRlcnJ1cHQoSVJRX01BQ19SWCwgZGV2KTsKKwl0eF9yZWNsYWltX3NrYihscCk7CiAJZW5hYmxlX2lycShJUlFfTUFDX1JYKTsKIH0KICNlbmRpZgkJCQkvKiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiAqLwpAQCAtMTIzMiwxMiArMTI0OSwyNyBAQAogLyogT3VyIHdhdGNoZG9nIHRpbWVkIG91dC4gQ2FsbGVkIGJ5IHRoZSBuZXR3b3JraW5nIGxheWVyICovCiBzdGF0aWMgdm9pZCBiZmluX21hY190aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGJmaW5fbWFjX2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisKIAlwcl9kZWJ1ZygiJXM6ICVzXG4iLCBkZXYtPm5hbWUsIF9fZnVuY19fKTsKIAogCWJmaW5fbWFjX2Rpc2FibGUoKTsKIAotCS8qIHJlc2V0IHR4IHF1ZXVlICovCi0JdHhfbGlzdF90YWlsID0gdHhfbGlzdF9oZWFkLT5uZXh0OworCWRlbF90aW1lcigmbHAtPnR4X3JlY2xhaW1fdGltZXIpOworCisJLyogcmVzZXQgdHggcXVldWUgYW5kIGZyZWUgc2tiICovCisJd2hpbGUgKHR4X2xpc3RfaGVhZCAhPSBjdXJyZW50X3R4X3B0cikgeworCQl0eF9saXN0X2hlYWQtPmRlc2NfYS5jb25maWcgJj0gfkRNQUVOOworCQl0eF9saXN0X2hlYWQtPnN0YXR1cy5zdGF0dXNfd29yZCA9IDA7CisJCWlmICh0eF9saXN0X2hlYWQtPnNrYikgeworCQkJZGV2X2tmcmVlX3NrYih0eF9saXN0X2hlYWQtPnNrYik7CisJCQl0eF9saXN0X2hlYWQtPnNrYiA9IE5VTEw7CisJCX0KKwkJdHhfbGlzdF9oZWFkID0gdHhfbGlzdF9oZWFkLT5uZXh0OworCX0KKworCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGxwLT5uZGV2KSkKKwkJbmV0aWZfd2FrZV9xdWV1ZShscC0+bmRldik7CiAKIAliZmluX21hY19lbmFibGUoKTsKIApAQCAtMTQzMCw2ICsxNDYyLDcgQEAKIAlTRVRfTkVUREVWX0RFVihuZGV2LCAmcGRldi0+ZGV2KTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBuZGV2KTsKIAlscCA9IG5ldGRldl9wcml2KG5kZXYpOworCWxwLT5uZGV2ID0gbmRldjsKIAogCS8qIEdyYWIgdGhlIE1BQyBhZGRyZXNzIGluIHRoZSBNQUMgKi8KIAkqKF9fbGUzMiAqKSAoJihuZGV2LT5kZXZfYWRkclswXSkpID0gY3B1X3RvX2xlMzIoYmZpbl9yZWFkX0VNQUNfQUREUkxPKCkpOwpAQCAtMTQ4NSw2ICsxNTE4LDEwIEBACiAJbmRldi0+bmV0ZGV2X29wcyA9ICZiZmluX21hY19uZXRkZXZfb3BzOwogCW5kZXYtPmV0aHRvb2xfb3BzID0gJmJmaW5fbWFjX2V0aHRvb2xfb3BzOwogCisJaW5pdF90aW1lcigmbHAtPnR4X3JlY2xhaW1fdGltZXIpOworCWxwLT50eF9yZWNsYWltX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylscDsKKwlscC0+dHhfcmVjbGFpbV90aW1lci5mdW5jdGlvbiA9IHR4X3JlY2xhaW1fc2tiX3RpbWVvdXQ7CisKIAlzcGluX2xvY2tfaW5pdCgmbHAtPmxvY2spOwogCiAJLyogbm93LCBlbmFibGUgaW50ZXJydXB0cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmZpbl9tYWMuaCBiL2RyaXZlcnMvbmV0L2JmaW5fbWFjLmgKaW5kZXggMWFlN2I4Mi4uMDRlNDA1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmZpbl9tYWMuaAorKysgYi9kcml2ZXJzL25ldC9iZmluX21hYy5oCkBAIC0xMyw5ICsxMywxMiBAQAogI2luY2x1ZGUgPGxpbnV4L25ldF90c3RhbXAuaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVjb21wYXJlLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KIAogI2RlZmluZSBCRklOX01BQ19DU1VNX09GRkxPQUQKIAorI2RlZmluZSBUWF9SRUNMQUlNX0pJRkZJRVMgKEhaIC8gNSkKKwogc3RydWN0IGRtYV9kZXNjcmlwdG9yIHsKIAlzdHJ1Y3QgZG1hX2Rlc2NyaXB0b3IgKm5leHRfZG1hX2Rlc2M7CiAJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyOwpAQCAtNjgsNiArNzEsOCBAQAogCiAJaW50IHdvbDsJCS8qIFdha2UgT24gTGFuICovCiAJaW50IGlycV93YWtlX3JlcXVlc3RlZDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0eF9yZWNsYWltX3RpbWVyOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwogCiAJLyogTUlJIGFuZCBQSFkgc3R1ZmZzICovCiAJaW50IG9sZF9saW5rOyAgICAgICAgICAvKiB1c2VkIGJ5IGJmNTM3X2FkanVzdF9saW5rICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmMgYi9kcml2ZXJzL25ldC9ibngyLmMKaW5kZXggMTE3NDMyMi4uZTZhODAzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuYwpAQCAtNTgsOCArNTgsOCBAQAogI2luY2x1ZGUgImJueDJfZncuaCIKIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJibngyIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjIuMC4xNSIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJNYXkgNCwgMjAxMCIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIyLjAuMTciCisjZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiSnVseSAxOCwgMjAxMCIKICNkZWZpbmUgRldfTUlQU19GSUxFXzA2CQkiYm54Mi9ibngyLW1pcHMtMDYtNS4wLjAuajYuZnciCiAjZGVmaW5lIEZXX1JWMlBfRklMRV8wNgkJImJueDIvYm54Mi1ydjJwLTA2LTUuMC4wLmozLmZ3IgogI2RlZmluZSBGV19NSVBTX0ZJTEVfMDkJCSJibngyL2JueDItbWlwcy0wOS01LjAuMC5qMTUuZnciCkBAIC0yNTMsNyArMjUzLDggQEAKIHsKIAl1MzIgZGlmZjsKIAotCXNtcF9tYigpOworCS8qIFRlbGwgY29tcGlsZXIgdG8gZmV0Y2ggdHhfcHJvZCBhbmQgdHhfY29ucyBmcm9tIG1lbW9yeS4gKi8KKwliYXJyaWVyKCk7CiAKIAkvKiBUaGUgcmluZyB1c2VzIDI1NiBpbmRpY2VzIGZvciAyNTUgZW50cmllcywgb25lIG9mIHRoZW0KIAkgKiBuZWVkcyB0byBiZSBza2lwcGVkLgpAQCAtNjkyLDkgKzY5Myw5IEBACiAJCXN0cnVjdCBibngyX3R4X3JpbmdfaW5mbyAqdHhyID0gJmJuYXBpLT50eF9yaW5nOwogCiAJCWlmICh0eHItPnR4X2Rlc2NfcmluZykgewotCQkJcGNpX2ZyZWVfY29uc2lzdGVudChicC0+cGRldiwgVFhCRF9SSU5HX1NJWkUsCi0JCQkJCSAgICB0eHItPnR4X2Rlc2NfcmluZywKLQkJCQkJICAgIHR4ci0+dHhfZGVzY19tYXBwaW5nKTsKKwkJCWRtYV9mcmVlX2NvaGVyZW50KCZicC0+cGRldi0+ZGV2LCBUWEJEX1JJTkdfU0laRSwKKwkJCQkJICB0eHItPnR4X2Rlc2NfcmluZywKKwkJCQkJICB0eHItPnR4X2Rlc2NfbWFwcGluZyk7CiAJCQl0eHItPnR4X2Rlc2NfcmluZyA9IE5VTEw7CiAJCX0KIAkJa2ZyZWUodHhyLT50eF9idWZfcmluZyk7CkBAIC03MTQsOSArNzE1LDkgQEAKIAogCQlmb3IgKGogPSAwOyBqIDwgYnAtPnJ4X21heF9yaW5nOyBqKyspIHsKIAkJCWlmIChyeHItPnJ4X2Rlc2NfcmluZ1tqXSkKLQkJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGJwLT5wZGV2LCBSWEJEX1JJTkdfU0laRSwKLQkJCQkJCSAgICByeHItPnJ4X2Rlc2NfcmluZ1tqXSwKLQkJCQkJCSAgICByeHItPnJ4X2Rlc2NfbWFwcGluZ1tqXSk7CisJCQkJZG1hX2ZyZWVfY29oZXJlbnQoJmJwLT5wZGV2LT5kZXYsIFJYQkRfUklOR19TSVpFLAorCQkJCQkJICByeHItPnJ4X2Rlc2NfcmluZ1tqXSwKKwkJCQkJCSAgcnhyLT5yeF9kZXNjX21hcHBpbmdbal0pOwogCQkJcnhyLT5yeF9kZXNjX3Jpbmdbal0gPSBOVUxMOwogCQl9CiAJCXZmcmVlKHJ4ci0+cnhfYnVmX3JpbmcpOwpAQCAtNzI0LDkgKzcyNSw5IEBACiAKIAkJZm9yIChqID0gMDsgaiA8IGJwLT5yeF9tYXhfcGdfcmluZzsgaisrKSB7CiAJCQlpZiAocnhyLT5yeF9wZ19kZXNjX3Jpbmdbal0pCi0JCQkJcGNpX2ZyZWVfY29uc2lzdGVudChicC0+cGRldiwgUlhCRF9SSU5HX1NJWkUsCi0JCQkJCQkgICAgcnhyLT5yeF9wZ19kZXNjX3Jpbmdbal0sCi0JCQkJCQkgICAgcnhyLT5yeF9wZ19kZXNjX21hcHBpbmdbal0pOworCQkJCWRtYV9mcmVlX2NvaGVyZW50KCZicC0+cGRldi0+ZGV2LCBSWEJEX1JJTkdfU0laRSwKKwkJCQkJCSAgcnhyLT5yeF9wZ19kZXNjX3Jpbmdbal0sCisJCQkJCQkgIHJ4ci0+cnhfcGdfZGVzY19tYXBwaW5nW2pdKTsKIAkJCXJ4ci0+cnhfcGdfZGVzY19yaW5nW2pdID0gTlVMTDsKIAkJfQogCQl2ZnJlZShyeHItPnJ4X3BnX3JpbmcpOwpAQCAtNzQ4LDggKzc0OSw4IEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAogCQl0eHItPnR4X2Rlc2NfcmluZyA9Ci0JCQlwY2lfYWxsb2NfY29uc2lzdGVudChicC0+cGRldiwgVFhCRF9SSU5HX1NJWkUsCi0JCQkJCSAgICAgJnR4ci0+dHhfZGVzY19tYXBwaW5nKTsKKwkJCWRtYV9hbGxvY19jb2hlcmVudCgmYnAtPnBkZXYtPmRldiwgVFhCRF9SSU5HX1NJWkUsCisJCQkJCSAgICZ0eHItPnR4X2Rlc2NfbWFwcGluZywgR0ZQX0tFUk5FTCk7CiAJCWlmICh0eHItPnR4X2Rlc2NfcmluZyA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtNzc2LDggKzc3NywxMCBAQAogCiAJCWZvciAoaiA9IDA7IGogPCBicC0+cnhfbWF4X3Jpbmc7IGorKykgewogCQkJcnhyLT5yeF9kZXNjX3Jpbmdbal0gPQotCQkJCXBjaV9hbGxvY19jb25zaXN0ZW50KGJwLT5wZGV2LCBSWEJEX1JJTkdfU0laRSwKLQkJCQkJCSAgICAgJnJ4ci0+cnhfZGVzY19tYXBwaW5nW2pdKTsKKwkJCQlkbWFfYWxsb2NfY29oZXJlbnQoJmJwLT5wZGV2LT5kZXYsCisJCQkJCQkgICBSWEJEX1JJTkdfU0laRSwKKwkJCQkJCSAgICZyeHItPnJ4X2Rlc2NfbWFwcGluZ1tqXSwKKwkJCQkJCSAgIEdGUF9LRVJORUwpOwogCQkJaWYgKHJ4ci0+cnhfZGVzY19yaW5nW2pdID09IE5VTEwpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTc5NSw4ICs3OTgsMTAgQEAKIAogCQlmb3IgKGogPSAwOyBqIDwgYnAtPnJ4X21heF9wZ19yaW5nOyBqKyspIHsKIAkJCXJ4ci0+cnhfcGdfZGVzY19yaW5nW2pdID0KLQkJCQlwY2lfYWxsb2NfY29uc2lzdGVudChicC0+cGRldiwgUlhCRF9SSU5HX1NJWkUsCi0JCQkJCQkmcnhyLT5yeF9wZ19kZXNjX21hcHBpbmdbal0pOworCQkJCWRtYV9hbGxvY19jb2hlcmVudCgmYnAtPnBkZXYtPmRldiwKKwkJCQkJCSAgIFJYQkRfUklOR19TSVpFLAorCQkJCQkJICAgJnJ4ci0+cnhfcGdfZGVzY19tYXBwaW5nW2pdLAorCQkJCQkJICAgR0ZQX0tFUk5FTCk7CiAJCQlpZiAocnhyLT5yeF9wZ19kZXNjX3Jpbmdbal0gPT0gTlVMTCkKIAkJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtODE2LDE2ICs4MjEsMTYgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBicC0+Y3R4X3BhZ2VzOyBpKyspIHsKIAkJaWYgKGJwLT5jdHhfYmxrW2ldKSB7Ci0JCQlwY2lfZnJlZV9jb25zaXN0ZW50KGJwLT5wZGV2LCBCQ01fUEFHRV9TSVpFLAotCQkJCQkgICAgYnAtPmN0eF9ibGtbaV0sCi0JCQkJCSAgICBicC0+Y3R4X2Jsa19tYXBwaW5nW2ldKTsKKwkJCWRtYV9mcmVlX2NvaGVyZW50KCZicC0+cGRldi0+ZGV2LCBCQ01fUEFHRV9TSVpFLAorCQkJCQkgIGJwLT5jdHhfYmxrW2ldLAorCQkJCQkgIGJwLT5jdHhfYmxrX21hcHBpbmdbaV0pOwogCQkJYnAtPmN0eF9ibGtbaV0gPSBOVUxMOwogCQl9CiAJfQogCWlmIChibmFwaS0+c3RhdHVzX2Jsay5tc2kpIHsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChicC0+cGRldiwgYnAtPnN0YXR1c19zdGF0c19zaXplLAotCQkJCSAgICBibmFwaS0+c3RhdHVzX2Jsay5tc2ksCi0JCQkJICAgIGJwLT5zdGF0dXNfYmxrX21hcHBpbmcpOworCQlkbWFfZnJlZV9jb2hlcmVudCgmYnAtPnBkZXYtPmRldiwgYnAtPnN0YXR1c19zdGF0c19zaXplLAorCQkJCSAgYm5hcGktPnN0YXR1c19ibGsubXNpLAorCQkJCSAgYnAtPnN0YXR1c19ibGtfbWFwcGluZyk7CiAJCWJuYXBpLT5zdGF0dXNfYmxrLm1zaSA9IE5VTEw7CiAJCWJwLT5zdGF0c19ibGsgPSBOVUxMOwogCX0KQEAgLTg0Niw4ICs4NTEsOCBAQAogCWJwLT5zdGF0dXNfc3RhdHNfc2l6ZSA9IHN0YXR1c19ibGtfc2l6ZSArCiAJCQkJc2l6ZW9mKHN0cnVjdCBzdGF0aXN0aWNzX2Jsb2NrKTsKIAotCXN0YXR1c19ibGsgPSBwY2lfYWxsb2NfY29uc2lzdGVudChicC0+cGRldiwgYnAtPnN0YXR1c19zdGF0c19zaXplLAotCQkJCQkgICZicC0+c3RhdHVzX2Jsa19tYXBwaW5nKTsKKwlzdGF0dXNfYmxrID0gZG1hX2FsbG9jX2NvaGVyZW50KCZicC0+cGRldi0+ZGV2LCBicC0+c3RhdHVzX3N0YXRzX3NpemUsCisJCQkJCSZicC0+c3RhdHVzX2Jsa19tYXBwaW5nLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3RhdHVzX2JsayA9PSBOVUxMKQogCQlnb3RvIGFsbG9jX21lbV9lcnI7CiAKQEAgLTg2MCw3ICs4NjUsNyBAQAogCWJuYXBpLT5od19yeF9jb25zX3B0ciA9CiAJCSZibmFwaS0+c3RhdHVzX2Jsay5tc2ktPnN0YXR1c19yeF9xdWlja19jb25zdW1lcl9pbmRleDA7CiAJaWYgKGJwLT5mbGFncyAmIEJOWDJfRkxBR19NU0lYX0NBUCkgewotCQlmb3IgKGkgPSAxOyBpIDwgQk5YMl9NQVhfTVNJWF9WRUM7IGkrKykgeworCQlmb3IgKGkgPSAxOyBpIDwgYnAtPmlycV9udmVjczsgaSsrKSB7CiAJCQlzdHJ1Y3Qgc3RhdHVzX2Jsb2NrX21zaXggKnNibGs7CiAKIAkJCWJuYXBpID0gJmJwLT5ibngyX25hcGlbaV07CkBAIC04ODUsOSArODkwLDEwIEBACiAJCWlmIChicC0+Y3R4X3BhZ2VzID09IDApCiAJCQlicC0+Y3R4X3BhZ2VzID0gMTsKIAkJZm9yIChpID0gMDsgaSA8IGJwLT5jdHhfcGFnZXM7IGkrKykgewotCQkJYnAtPmN0eF9ibGtbaV0gPSBwY2lfYWxsb2NfY29uc2lzdGVudChicC0+cGRldiwKKwkJCWJwLT5jdHhfYmxrW2ldID0gZG1hX2FsbG9jX2NvaGVyZW50KCZicC0+cGRldi0+ZGV2LAogCQkJCQkJQkNNX1BBR0VfU0laRSwKLQkJCQkJCSZicC0+Y3R4X2Jsa19tYXBwaW5nW2ldKTsKKwkJCQkJCSZicC0+Y3R4X2Jsa19tYXBwaW5nW2ldLAorCQkJCQkJR0ZQX0tFUk5FTCk7CiAJCQlpZiAoYnAtPmN0eF9ibGtbaV0gPT0gTlVMTCkKIAkJCQlnb3RvIGFsbG9jX21lbV9lcnI7CiAJCX0KQEAgLTE0NDYsNyArMTQ1Miw4IEBACiBzdGF0aWMgdm9pZAogYm54Ml9lbmFibGVfZm9yY2VkXzJnNShzdHJ1Y3QgYm54MiAqYnApCiB7Ci0JdTMyIGJtY3I7CisJdTMyIHVuaW5pdGlhbGl6ZWRfdmFyKGJtY3IpOworCWludCBlcnI7CiAKIAlpZiAoIShicC0+cGh5X2ZsYWdzICYgQk5YMl9QSFlfRkxBR18yXzVHX0NBUEFCTEUpKQogCQlyZXR1cm47CkBAIC0xNDU2LDIyICsxNDYzLDI4IEBACiAKIAkJYm54Ml93cml0ZV9waHkoYnAsIE1JSV9CTlgyX0JMS19BRERSLAogCQkJICAgICAgIE1JSV9CTlgyX0JMS19BRERSX1NFUkRFU19ESUcpOwotCQlibngyX3JlYWRfcGh5KGJwLCBNSUlfQk5YMl9TRVJERVNfRElHX01JU0MxLCAmdmFsKTsKLQkJdmFsICY9IH5NSUlfQk5YMl9TRF9NSVNDMV9GT1JDRV9NU0s7Ci0JCXZhbCB8PSBNSUlfQk5YMl9TRF9NSVNDMV9GT1JDRSB8IE1JSV9CTlgyX1NEX01JU0MxX0ZPUkNFXzJfNUc7Ci0JCWJueDJfd3JpdGVfcGh5KGJwLCBNSUlfQk5YMl9TRVJERVNfRElHX01JU0MxLCB2YWwpOworCQlpZiAoIWJueDJfcmVhZF9waHkoYnAsIE1JSV9CTlgyX1NFUkRFU19ESUdfTUlTQzEsICZ2YWwpKSB7CisJCQl2YWwgJj0gfk1JSV9CTlgyX1NEX01JU0MxX0ZPUkNFX01TSzsKKwkJCXZhbCB8PSBNSUlfQk5YMl9TRF9NSVNDMV9GT1JDRSB8CisJCQkJTUlJX0JOWDJfU0RfTUlTQzFfRk9SQ0VfMl81RzsKKwkJCWJueDJfd3JpdGVfcGh5KGJwLCBNSUlfQk5YMl9TRVJERVNfRElHX01JU0MxLCB2YWwpOworCQl9CiAKIAkJYm54Ml93cml0ZV9waHkoYnAsIE1JSV9CTlgyX0JMS19BRERSLAogCQkJICAgICAgIE1JSV9CTlgyX0JMS19BRERSX0NPTUJPX0lFRUVCMCk7Ci0JCWJueDJfcmVhZF9waHkoYnAsIGJwLT5taWlfYm1jciwgJmJtY3IpOworCQllcnIgPSBibngyX3JlYWRfcGh5KGJwLCBicC0+bWlpX2JtY3IsICZibWNyKTsKIAogCX0gZWxzZSBpZiAoQ0hJUF9OVU0oYnApID09IENISVBfTlVNXzU3MDgpIHsKLQkJYm54Ml9yZWFkX3BoeShicCwgYnAtPm1paV9ibWNyLCAmYm1jcik7Ci0JCWJtY3IgfD0gQkNNNTcwOFNfQk1DUl9GT1JDRV8yNTAwOworCQllcnIgPSBibngyX3JlYWRfcGh5KGJwLCBicC0+bWlpX2JtY3IsICZibWNyKTsKKwkJaWYgKCFlcnIpCisJCQlibWNyIHw9IEJDTTU3MDhTX0JNQ1JfRk9SQ0VfMjUwMDsKIAl9IGVsc2UgewogCQlyZXR1cm47CiAJfQogCisJaWYgKGVycikKKwkJcmV0dXJuOworCiAJaWYgKGJwLT5hdXRvbmVnICYgQVVUT05FR19TUEVFRCkgewogCQlibWNyICY9IH5CTUNSX0FORU5BQkxFOwogCQlpZiAoYnAtPnJlcV9kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCkBAIC0xNDgzLDcgKzE0OTYsOCBAQAogc3RhdGljIHZvaWQKIGJueDJfZGlzYWJsZV9mb3JjZWRfMmc1KHN0cnVjdCBibngyICpicCkKIHsKLQl1MzIgYm1jcjsKKwl1MzIgdW5pbml0aWFsaXplZF92YXIoYm1jcik7CisJaW50IGVycjsKIAogCWlmICghKGJwLT5waHlfZmxhZ3MgJiBCTlgyX1BIWV9GTEFHXzJfNUdfQ0FQQUJMRSkpCiAJCXJldHVybjsKQEAgLTE0OTMsMjEgKzE1MDcsMjYgQEAKIAogCQlibngyX3dyaXRlX3BoeShicCwgTUlJX0JOWDJfQkxLX0FERFIsCiAJCQkgICAgICAgTUlJX0JOWDJfQkxLX0FERFJfU0VSREVTX0RJRyk7Ci0JCWJueDJfcmVhZF9waHkoYnAsIE1JSV9CTlgyX1NFUkRFU19ESUdfTUlTQzEsICZ2YWwpOwotCQl2YWwgJj0gfk1JSV9CTlgyX1NEX01JU0MxX0ZPUkNFOwotCQlibngyX3dyaXRlX3BoeShicCwgTUlJX0JOWDJfU0VSREVTX0RJR19NSVNDMSwgdmFsKTsKKwkJaWYgKCFibngyX3JlYWRfcGh5KGJwLCBNSUlfQk5YMl9TRVJERVNfRElHX01JU0MxLCAmdmFsKSkgeworCQkJdmFsICY9IH5NSUlfQk5YMl9TRF9NSVNDMV9GT1JDRTsKKwkJCWJueDJfd3JpdGVfcGh5KGJwLCBNSUlfQk5YMl9TRVJERVNfRElHX01JU0MxLCB2YWwpOworCQl9CiAKIAkJYm54Ml93cml0ZV9waHkoYnAsIE1JSV9CTlgyX0JMS19BRERSLAogCQkJICAgICAgIE1JSV9CTlgyX0JMS19BRERSX0NPTUJPX0lFRUVCMCk7Ci0JCWJueDJfcmVhZF9waHkoYnAsIGJwLT5taWlfYm1jciwgJmJtY3IpOworCQllcnIgPSBibngyX3JlYWRfcGh5KGJwLCBicC0+bWlpX2JtY3IsICZibWNyKTsKIAogCX0gZWxzZSBpZiAoQ0hJUF9OVU0oYnApID09IENISVBfTlVNXzU3MDgpIHsKLQkJYm54Ml9yZWFkX3BoeShicCwgYnAtPm1paV9ibWNyLCAmYm1jcik7Ci0JCWJtY3IgJj0gfkJDTTU3MDhTX0JNQ1JfRk9SQ0VfMjUwMDsKKwkJZXJyID0gYm54Ml9yZWFkX3BoeShicCwgYnAtPm1paV9ibWNyLCAmYm1jcik7CisJCWlmICghZXJyKQorCQkJYm1jciAmPSB+QkNNNTcwOFNfQk1DUl9GT1JDRV8yNTAwOwogCX0gZWxzZSB7CiAJCXJldHVybjsKIAl9CiAKKwlpZiAoZXJyKQorCQlyZXR1cm47CisKIAlpZiAoYnAtPmF1dG9uZWcgJiBBVVRPTkVHX1NQRUVEKQogCQlibWNyIHw9IEJNQ1JfU1BFRUQxMDAwIHwgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUOwogCWJueDJfd3JpdGVfcGh5KGJwLCBicC0+bWlpX2JtY3IsIGJtY3IpOwpAQCAtMjY1MSwxOSArMjY3MCwxOSBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludAotYm54Ml9hbGxvY19yeF9wYWdlKHN0cnVjdCBibngyICpicCwgc3RydWN0IGJueDJfcnhfcmluZ19pbmZvICpyeHIsIHUxNiBpbmRleCkKK2JueDJfYWxsb2NfcnhfcGFnZShzdHJ1Y3QgYm54MiAqYnAsIHN0cnVjdCBibngyX3J4X3JpbmdfaW5mbyAqcnhyLCB1MTYgaW5kZXgsIGdmcF90IGdmcCkKIHsKIAlkbWFfYWRkcl90IG1hcHBpbmc7CiAJc3RydWN0IHN3X3BnICpyeF9wZyA9ICZyeHItPnJ4X3BnX3JpbmdbaW5kZXhdOwogCXN0cnVjdCByeF9iZCAqcnhiZCA9CiAJCSZyeHItPnJ4X3BnX2Rlc2NfcmluZ1tSWF9SSU5HKGluZGV4KV1bUlhfSURYKGluZGV4KV07Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9BVE9NSUMpOworCXN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZShnZnApOwogCiAJaWYgKCFwYWdlKQogCQlyZXR1cm4gLUVOT01FTTsKLQltYXBwaW5nID0gcGNpX21hcF9wYWdlKGJwLT5wZGV2LCBwYWdlLCAwLCBQQUdFX1NJWkUsCisJbWFwcGluZyA9IGRtYV9tYXBfcGFnZSgmYnAtPnBkZXYtPmRldiwgcGFnZSwgMCwgUEFHRV9TSVpFLAogCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihicC0+cGRldiwgbWFwcGluZykpIHsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJmJwLT5wZGV2LT5kZXYsIG1hcHBpbmcpKSB7CiAJCV9fZnJlZV9wYWdlKHBhZ2UpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC0yNjg0LDE1ICsyNzAzLDE1IEBACiAJaWYgKCFwYWdlKQogCQlyZXR1cm47CiAKLQlwY2lfdW5tYXBfcGFnZShicC0+cGRldiwgZG1hX3VubWFwX2FkZHIocnhfcGcsIG1hcHBpbmcpLCBQQUdFX1NJWkUsCi0JCSAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCWRtYV91bm1hcF9wYWdlKCZicC0+cGRldi0+ZGV2LCBkbWFfdW5tYXBfYWRkcihyeF9wZywgbWFwcGluZyksCisJCSAgICAgICBQQUdFX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKIAlfX2ZyZWVfcGFnZShwYWdlKTsKIAlyeF9wZy0+cGFnZSA9IE5VTEw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1ibngyX2FsbG9jX3J4X3NrYihzdHJ1Y3QgYm54MiAqYnAsIHN0cnVjdCBibngyX3J4X3JpbmdfaW5mbyAqcnhyLCB1MTYgaW5kZXgpCitibngyX2FsbG9jX3J4X3NrYihzdHJ1Y3QgYm54MiAqYnAsIHN0cnVjdCBibngyX3J4X3JpbmdfaW5mbyAqcnhyLCB1MTYgaW5kZXgsIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBzd19iZCAqcnhfYnVmID0gJnJ4ci0+cnhfYnVmX3JpbmdbaW5kZXhdOwpAQCAtMjcwMCw3ICsyNzE5LDcgQEAKIAlzdHJ1Y3QgcnhfYmQgKnJ4YmQgPSAmcnhyLT5yeF9kZXNjX3JpbmdbUlhfUklORyhpbmRleCldW1JYX0lEWChpbmRleCldOwogCXVuc2lnbmVkIGxvbmcgYWxpZ247CiAKLQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGJwLT5kZXYsIGJwLT5yeF9idWZfc2l6ZSk7CisJc2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKGJwLT5kZXYsIGJwLT5yeF9idWZfc2l6ZSwgZ2ZwKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtMjcwOCw5ICsyNzI3LDkgQEAKIAlpZiAodW5saWtlbHkoKGFsaWduID0gKHVuc2lnbmVkIGxvbmcpIHNrYi0+ZGF0YSAmIChCTlgyX1JYX0FMSUdOIC0gMSkpKSkKIAkJc2tiX3Jlc2VydmUoc2tiLCBCTlgyX1JYX0FMSUdOIC0gYWxpZ24pOwogCi0JbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKGJwLT5wZGV2LCBza2ItPmRhdGEsIGJwLT5yeF9idWZfdXNlX3NpemUsCi0JCVBDSV9ETUFfRlJPTURFVklDRSk7Ci0JaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihicC0+cGRldiwgbWFwcGluZykpIHsKKwltYXBwaW5nID0gZG1hX21hcF9zaW5nbGUoJmJwLT5wZGV2LT5kZXYsIHNrYi0+ZGF0YSwgYnAtPnJ4X2J1Zl91c2Vfc2l6ZSwKKwkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJmJwLT5wZGV2LT5kZXYsIG1hcHBpbmcpKSB7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtMjgxNiw3ICsyODM1LDcgQEAKIAkJCX0KIAkJfQogCi0JCXBjaV91bm1hcF9zaW5nbGUoYnAtPnBkZXYsIGRtYV91bm1hcF9hZGRyKHR4X2J1ZiwgbWFwcGluZyksCisJCWRtYV91bm1hcF9zaW5nbGUoJmJwLT5wZGV2LT5kZXYsIGRtYV91bm1hcF9hZGRyKHR4X2J1ZiwgbWFwcGluZyksCiAJCQlza2JfaGVhZGxlbihza2IpLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAogCQl0eF9idWYtPnNrYiA9IE5VTEw7CkBAIC0yODI1LDcgKzI4NDQsNyBAQAogCQlmb3IgKGkgPSAwOyBpIDwgbGFzdDsgaSsrKSB7CiAJCQlzd19jb25zID0gTkVYVF9UWF9CRChzd19jb25zKTsKIAotCQkJcGNpX3VubWFwX3BhZ2UoYnAtPnBkZXYsCisJCQlkbWFfdW5tYXBfcGFnZSgmYnAtPnBkZXYtPmRldiwKIAkJCQlkbWFfdW5tYXBfYWRkcigKIAkJCQkJJnR4ci0+dHhfYnVmX3JpbmdbVFhfUklOR19JRFgoc3dfY29ucyldLAogCQkJCQltYXBwaW5nKSwKQEAgLTI5MzIsNyArMjk1MSw3IEBACiAJY29uc19yeF9idWYgPSAmcnhyLT5yeF9idWZfcmluZ1tjb25zXTsKIAlwcm9kX3J4X2J1ZiA9ICZyeHItPnJ4X2J1Zl9yaW5nW3Byb2RdOwogCi0JcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGJwLT5wZGV2LAorCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKCZicC0+cGRldi0+ZGV2LAogCQlkbWFfdW5tYXBfYWRkcihjb25zX3J4X2J1ZiwgbWFwcGluZyksCiAJCUJOWDJfUlhfT0ZGU0VUICsgQk5YMl9SWF9DT1BZX1RIUkVTSCwgUENJX0RNQV9GUk9NREVWSUNFKTsKIApAQCAtMjk2MSw3ICsyOTgwLDcgQEAKIAlpbnQgZXJyOwogCXUxNiBwcm9kID0gcmluZ19pZHggJiAweGZmZmY7CiAKLQllcnIgPSBibngyX2FsbG9jX3J4X3NrYihicCwgcnhyLCBwcm9kKTsKKwllcnIgPSBibngyX2FsbG9jX3J4X3NrYihicCwgcnhyLCBwcm9kLCBHRlBfQVRPTUlDKTsKIAlpZiAodW5saWtlbHkoZXJyKSkgewogCQlibngyX3JldXNlX3J4X3NrYihicCwgcnhyLCBza2IsICh1MTYpIChyaW5nX2lkeCA+PiAxNiksIHByb2QpOwogCQlpZiAoaGRyX2xlbikgewpAQCAtMjk3NCw3ICsyOTkzLDcgQEAKIAl9CiAKIAlza2JfcmVzZXJ2ZShza2IsIEJOWDJfUlhfT0ZGU0VUKTsKLQlwY2lfdW5tYXBfc2luZ2xlKGJwLT5wZGV2LCBkbWFfYWRkciwgYnAtPnJ4X2J1Zl91c2Vfc2l6ZSwKKwlkbWFfdW5tYXBfc2luZ2xlKCZicC0+cGRldi0+ZGV2LCBkbWFfYWRkciwgYnAtPnJ4X2J1Zl91c2Vfc2l6ZSwKIAkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCiAJaWYgKGhkcl9sZW4gPT0gMCkgewpAQCAtMzAyNiw3ICszMDQ1LDggQEAKIAkJCXJ4X3BnLT5wYWdlID0gTlVMTDsKIAogCQkJZXJyID0gYm54Ml9hbGxvY19yeF9wYWdlKGJwLCByeHIsCi0JCQkJCQkgUlhfUEdfUklOR19JRFgocGdfcHJvZCkpOworCQkJCQkJIFJYX1BHX1JJTkdfSURYKHBnX3Byb2QpLAorCQkJCQkJIEdGUF9BVE9NSUMpOwogCQkJaWYgKHVubGlrZWx5KGVycikpIHsKIAkJCQlyeHItPnJ4X3BnX2NvbnMgPSBwZ19jb25zOwogCQkJCXJ4ci0+cnhfcGdfcHJvZCA9IHBnX3Byb2Q7CkBAIC0zMDM1LDcgKzMwNTUsNyBAQAogCQkJCXJldHVybiBlcnI7CiAJCQl9CiAKLQkJCXBjaV91bm1hcF9wYWdlKGJwLT5wZGV2LCBtYXBwaW5nX29sZCwKKwkJCWRtYV91bm1hcF9wYWdlKCZicC0+cGRldi0+ZGV2LCBtYXBwaW5nX29sZCwKIAkJCQkgICAgICAgUEFHRV9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCiAJCQlmcmFnX3NpemUgLT0gZnJhZ19sZW47CkBAIC0zMTA2LDcgKzMxMjYsNyBAQAogCiAJCWRtYV9hZGRyID0gZG1hX3VubWFwX2FkZHIocnhfYnVmLCBtYXBwaW5nKTsKIAotCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoYnAtPnBkZXYsIGRtYV9hZGRyLAorCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdSgmYnAtPnBkZXYtPmRldiwgZG1hX2FkZHIsCiAJCQlCTlgyX1JYX09GRlNFVCArIEJOWDJfUlhfQ09QWV9USFJFU0gsCiAJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCkBAIC0zMjA2LDYgKzMyMjYsMTAgQEAKIAkJCQkJICAgICAgTDJfRkhEUl9FUlJPUlNfVURQX1hTVU0pKSA9PSAwKSkKIAkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQl9CisJCWlmICgoYnAtPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYSEFTSCkgJiYKKwkJICAgICgoc3RhdHVzICYgTDJfRkhEUl9TVEFUVVNfVVNFX1JYSEFTSCkgPT0KKwkJICAgICBMMl9GSERSX1NUQVRVU19VU0VfUlhIQVNIKSkKKwkJCXNrYi0+cnhoYXNoID0gcnhfaGRyLT5sMl9maGRyX2hhc2g7CiAKIAkJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIGJuYXBpIC0gJmJwLT5ibngyX25hcGlbMF0pOwogCkBAIC01MTYyLDcgKzUxODYsNyBAQAogCiAJcmluZ19wcm9kID0gcHJvZCA9IHJ4ci0+cnhfcGdfcHJvZDsKIAlmb3IgKGkgPSAwOyBpIDwgYnAtPnJ4X3BnX3Jpbmdfc2l6ZTsgaSsrKSB7Ci0JCWlmIChibngyX2FsbG9jX3J4X3BhZ2UoYnAsIHJ4ciwgcmluZ19wcm9kKSA8IDApIHsKKwkJaWYgKGJueDJfYWxsb2NfcnhfcGFnZShicCwgcnhyLCByaW5nX3Byb2QsIEdGUF9LRVJORUwpIDwgMCkgewogCQkJbmV0ZGV2X3dhcm4oYnAtPmRldiwgImluaXQnZWQgcnggcGFnZSByaW5nICVkIHdpdGggJWQvJWQgcGFnZXMgb25seVxuIiwKIAkJCQkgICAgcmluZ19udW0sIGksIGJwLT5yeF9wZ19yaW5nX3NpemUpOwogCQkJYnJlYWs7CkBAIC01MTc0LDcgKzUxOTgsNyBAQAogCiAJcmluZ19wcm9kID0gcHJvZCA9IHJ4ci0+cnhfcHJvZDsKIAlmb3IgKGkgPSAwOyBpIDwgYnAtPnJ4X3Jpbmdfc2l6ZTsgaSsrKSB7Ci0JCWlmIChibngyX2FsbG9jX3J4X3NrYihicCwgcnhyLCByaW5nX3Byb2QpIDwgMCkgeworCQlpZiAoYm54Ml9hbGxvY19yeF9za2IoYnAsIHJ4ciwgcmluZ19wcm9kLCBHRlBfS0VSTkVMKSA8IDApIHsKIAkJCW5ldGRldl93YXJuKGJwLT5kZXYsICJpbml0J2VkIHJ4IHJpbmcgJWQgd2l0aCAlZC8lZCBza2JzIG9ubHlcbiIsCiAJCQkJICAgIHJpbmdfbnVtLCBpLCBicC0+cnhfcmluZ19zaXplKTsKIAkJCWJyZWFrOwpAQCAtNTMyMCw3ICs1MzQ0LDcgQEAKIAkJCQljb250aW51ZTsKIAkJCX0KIAotCQkJcGNpX3VubWFwX3NpbmdsZShicC0+cGRldiwKKwkJCWRtYV91bm1hcF9zaW5nbGUoJmJwLT5wZGV2LT5kZXYsCiAJCQkJCSBkbWFfdW5tYXBfYWRkcih0eF9idWYsIG1hcHBpbmcpLAogCQkJCQkgc2tiX2hlYWRsZW4oc2tiKSwKIAkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOwpAQCAtNTMzMSw3ICs1MzU1LDcgQEAKIAkJCWorKzsKIAkJCWZvciAoayA9IDA7IGsgPCBsYXN0OyBrKyssIGorKykgewogCQkJCXR4X2J1ZiA9ICZ0eHItPnR4X2J1Zl9yaW5nW1RYX1JJTkdfSURYKGopXTsKLQkJCQlwY2lfdW5tYXBfcGFnZShicC0+cGRldiwKKwkJCQlkbWFfdW5tYXBfcGFnZSgmYnAtPnBkZXYtPmRldiwKIAkJCQkJZG1hX3VubWFwX2FkZHIodHhfYnVmLCBtYXBwaW5nKSwKIAkJCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1trXS5zaXplLAogCQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKQEAgLTUzNjEsNyArNTM4NSw3IEBACiAJCQlpZiAoc2tiID09IE5VTEwpCiAJCQkJY29udGludWU7CiAKLQkJCXBjaV91bm1hcF9zaW5nbGUoYnAtPnBkZXYsCisJCQlkbWFfdW5tYXBfc2luZ2xlKCZicC0+cGRldi0+ZGV2LAogCQkJCQkgZG1hX3VubWFwX2FkZHIocnhfYnVmLCBtYXBwaW5nKSwKIAkJCQkJIGJwLT5yeF9idWZfdXNlX3NpemUsCiAJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwpAQCAtNTcxNCw5ICs1NzM4LDkgQEAKIAlmb3IgKGkgPSAxNDsgaSA8IHBrdF9zaXplOyBpKyspCiAJCXBhY2tldFtpXSA9ICh1bnNpZ25lZCBjaGFyKSAoaSAmIDB4ZmYpOwogCi0JbWFwID0gcGNpX21hcF9zaW5nbGUoYnAtPnBkZXYsIHNrYi0+ZGF0YSwgcGt0X3NpemUsCi0JCVBDSV9ETUFfVE9ERVZJQ0UpOwotCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IoYnAtPnBkZXYsIG1hcCkpIHsKKwltYXAgPSBkbWFfbWFwX3NpbmdsZSgmYnAtPnBkZXYtPmRldiwgc2tiLT5kYXRhLCBwa3Rfc2l6ZSwKKwkJCSAgICAgUENJX0RNQV9UT0RFVklDRSk7CisJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZicC0+cGRldi0+ZGV2LCBtYXApKSB7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtNTc1NCw3ICs1Nzc4LDcgQEAKIAogCXVkZWxheSg1KTsKIAotCXBjaV91bm1hcF9zaW5nbGUoYnAtPnBkZXYsIG1hcCwgcGt0X3NpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOworCWRtYV91bm1hcF9zaW5nbGUoJmJwLT5wZGV2LT5kZXYsIG1hcCwgcGt0X3NpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOwogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAogCWlmIChibngyX2dldF9od190eF9jb25zKHR4X25hcGkpICE9IHR4ci0+dHhfcHJvZCkKQEAgLTU3NzEsNyArNTc5NSw3IEBACiAJcnhfaGRyID0gcnhfYnVmLT5kZXNjOwogCXNrYl9yZXNlcnZlKHJ4X3NrYiwgQk5YMl9SWF9PRkZTRVQpOwogCi0JcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGJwLT5wZGV2LAorCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KCZicC0+cGRldi0+ZGV2LAogCQlkbWFfdW5tYXBfYWRkcihyeF9idWYsIG1hcHBpbmcpLAogCQlicC0+cnhfYnVmX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKQEAgLTYxMjksNyArNjE1Myw3IEBACiBzdGF0aWMgdm9pZAogYm54Ml9lbmFibGVfbXNpeChzdHJ1Y3QgYm54MiAqYnAsIGludCBtc2l4X3ZlY3MpCiB7Ci0JaW50IGksIHJjOworCWludCBpLCB0b3RhbF92ZWNzLCByYzsKIAlzdHJ1Y3QgbXNpeF9lbnRyeSBtc2l4X2VudFtCTlgyX01BWF9NU0lYX1ZFQ107CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGJwLT5kZXY7CiAJY29uc3QgaW50IGxlbiA9IHNpemVvZihicC0+aXJxX3RibFswXS5uYW1lKTsKQEAgLTYxNDgsMTMgKzYxNzIsMjkgQEAKIAkJbXNpeF9lbnRbaV0udmVjdG9yID0gMDsKIAl9CiAKLQlyYyA9IHBjaV9lbmFibGVfbXNpeChicC0+cGRldiwgbXNpeF9lbnQsIEJOWDJfTUFYX01TSVhfVkVDKTsKKwl0b3RhbF92ZWNzID0gbXNpeF92ZWNzOworI2lmZGVmIEJDTV9DTklDCisJdG90YWxfdmVjcysrOworI2VuZGlmCisJcmMgPSAtRU5PU1BDOworCXdoaWxlICh0b3RhbF92ZWNzID49IEJOWDJfTUlOX01TSVhfVkVDKSB7CisJCXJjID0gcGNpX2VuYWJsZV9tc2l4KGJwLT5wZGV2LCBtc2l4X2VudCwgdG90YWxfdmVjcyk7CisJCWlmIChyYyA8PSAwKQorCQkJYnJlYWs7CisJCWlmIChyYyA+IDApCisJCQl0b3RhbF92ZWNzID0gcmM7CisJfQorCiAJaWYgKHJjICE9IDApCiAJCXJldHVybjsKIAorCW1zaXhfdmVjcyA9IHRvdGFsX3ZlY3M7CisjaWZkZWYgQkNNX0NOSUMKKwltc2l4X3ZlY3MtLTsKKyNlbmRpZgogCWJwLT5pcnFfbnZlY3MgPSBtc2l4X3ZlY3M7CiAJYnAtPmZsYWdzIHw9IEJOWDJfRkxBR19VU0lOR19NU0lYIHwgQk5YMl9GTEFHX09ORV9TSE9UX01TSTsKLQlmb3IgKGkgPSAwOyBpIDwgQk5YMl9NQVhfTVNJWF9WRUM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCB0b3RhbF92ZWNzOyBpKyspIHsKIAkJYnAtPmlycV90YmxbaV0udmVjdG9yID0gbXNpeF9lbnRbaV0udmVjdG9yOwogCQlzbnByaW50ZihicC0+aXJxX3RibFtpXS5uYW1lLCBsZW4sICIlcy0lZCIsIGRldi0+bmFtZSwgaSk7CiAJCWJwLT5pcnFfdGJsW2ldLmhhbmRsZXIgPSBibngyX21zaV8xc2hvdDsKQEAgLTYxNzIsNyArNjIxMiw3IEBACiAJYnAtPmlycV9udmVjcyA9IDE7CiAJYnAtPmlycV90YmxbMF0udmVjdG9yID0gYnAtPnBkZXYtPmlycTsKIAotCWlmICgoYnAtPmZsYWdzICYgQk5YMl9GTEFHX01TSVhfQ0FQKSAmJiAhZGlzX21zaSAmJiBjcHVzID4gMSkKKwlpZiAoKGJwLT5mbGFncyAmIEJOWDJfRkxBR19NU0lYX0NBUCkgJiYgIWRpc19tc2kpCiAJCWJueDJfZW5hYmxlX21zaXgoYnAsIG1zaXhfdmVjcyk7CiAKIAlpZiAoKGJwLT5mbGFncyAmIEJOWDJfRkxBR19NU0lfQ0FQKSAmJiAhZGlzX21zaSAmJgpAQCAtNjI5Niw5ICs2MzM2LDE0IEBACiBibngyX2R1bXBfc3RhdGUoc3RydWN0IGJueDIgKmJwKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBicC0+ZGV2OwotCXUzMiBtY3BfcDAsIG1jcF9wMTsKKwl1MzIgbWNwX3AwLCBtY3BfcDEsIHZhbDEsIHZhbDI7CiAKLQluZXRkZXZfZXJyKGRldiwgIkRFQlVHOiBpbnRyX3NlbVsleF1cbiIsIGF0b21pY19yZWFkKCZicC0+aW50cl9zZW0pKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoYnAtPnBkZXYsIFBDSV9DT01NQU5ELCAmdmFsMSk7CisJbmV0ZGV2X2VycihkZXYsICJERUJVRzogaW50cl9zZW1bJXhdIFBDSV9DTURbJTA4eF1cbiIsCisJCSAgIGF0b21pY19yZWFkKCZicC0+aW50cl9zZW0pLCB2YWwxKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoYnAtPnBkZXYsIGJwLT5wbV9jYXAgKyBQQ0lfUE1fQ1RSTCwgJnZhbDEpOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChicC0+cGRldiwgQk5YMl9QQ0lDRkdfTUlTQ19DT05GSUcsICZ2YWwyKTsKKwluZXRkZXZfZXJyKGRldiwgIkRFQlVHOiBQQ0lfUE1bJTA4eF0gUENJX01JU0NfQ0ZHWyUwOHhdXG4iLCB2YWwxLCB2YWwyKTsKIAluZXRkZXZfZXJyKGRldiwgIkRFQlVHOiBFTUFDX1RYX1NUQVRVU1slMDh4XSBFTUFDX1JYX1NUQVRVU1slMDh4XVxuIiwKIAkJICAgUkVHX1JEKGJwLCBCTlgyX0VNQUNfVFhfU1RBVFVTKSwKIAkJICAgUkVHX1JEKGJwLCBCTlgyX0VNQUNfUlhfU1RBVFVTKSk7CkBAIC02NDM0LDggKzY0NzksOCBAQAogCX0gZWxzZQogCQltc3MgPSAwOwogCi0JbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKGJwLT5wZGV2LCBza2ItPmRhdGEsIGxlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0JaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihicC0+cGRldiwgbWFwcGluZykpIHsKKwltYXBwaW5nID0gZG1hX21hcF9zaW5nbGUoJmJwLT5wZGV2LT5kZXYsIHNrYi0+ZGF0YSwgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJmJwLT5wZGV2LT5kZXYsIG1hcHBpbmcpKSB7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CkBAIC02NDYzLDkgKzY1MDgsOSBAQAogCQl0eGJkID0gJnR4ci0+dHhfZGVzY19yaW5nW3JpbmdfcHJvZF07CiAKIAkJbGVuID0gZnJhZy0+c2l6ZTsKLQkJbWFwcGluZyA9IHBjaV9tYXBfcGFnZShicC0+cGRldiwgZnJhZy0+cGFnZSwgZnJhZy0+cGFnZV9vZmZzZXQsCi0JCQlsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGJwLT5wZGV2LCBtYXBwaW5nKSkKKwkJbWFwcGluZyA9IGRtYV9tYXBfcGFnZSgmYnAtPnBkZXYtPmRldiwgZnJhZy0+cGFnZSwgZnJhZy0+cGFnZV9vZmZzZXQsCisJCQkJICAgICAgIGxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisJCWlmIChkbWFfbWFwcGluZ19lcnJvcigmYnAtPnBkZXYtPmRldiwgbWFwcGluZykpCiAJCQlnb3RvIGRtYV9lcnJvcjsKIAkJZG1hX3VubWFwX2FkZHJfc2V0KCZ0eHItPnR4X2J1Zl9yaW5nW3JpbmdfcHJvZF0sIG1hcHBpbmcsCiAJCQkJICAgbWFwcGluZyk7CkBAIC02NDkwLDYgKzY1MzUsMTMgQEAKIAogCWlmICh1bmxpa2VseShibngyX3R4X2F2YWlsKGJwLCB0eHIpIDw9IE1BWF9TS0JfRlJBR1MpKSB7CiAJCW5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTsKKworCQkvKiBuZXRpZl90eF9zdG9wX3F1ZXVlKCkgbXVzdCBiZSBkb25lIGJlZm9yZSBjaGVja2luZworCQkgKiB0eCBpbmRleCBpbiBibngyX3R4X2F2YWlsKCkgYmVsb3csIGJlY2F1c2UgaW4KKwkJICogYm54Ml90eF9pbnQoKSwgd2UgdXBkYXRlIHR4IGluZGV4IGJlZm9yZSBjaGVja2luZyBmb3IKKwkJICogbmV0aWZfdHhfcXVldWVfc3RvcHBlZCgpLgorCQkgKi8KKwkJc21wX21iKCk7CiAJCWlmIChibngyX3R4X2F2YWlsKGJwLCB0eHIpID4gYnAtPnR4X3dha2VfdGhyZXNoKQogCQkJbmV0aWZfdHhfd2FrZV9xdWV1ZSh0eHEpOwogCX0KQEAgLTY1MDQsNyArNjU1Niw3IEBACiAJcmluZ19wcm9kID0gVFhfUklOR19JRFgocHJvZCk7CiAJdHhfYnVmID0gJnR4ci0+dHhfYnVmX3JpbmdbcmluZ19wcm9kXTsKIAl0eF9idWYtPnNrYiA9IE5VTEw7Ci0JcGNpX3VubWFwX3NpbmdsZShicC0+cGRldiwgZG1hX3VubWFwX2FkZHIodHhfYnVmLCBtYXBwaW5nKSwKKwlkbWFfdW5tYXBfc2luZ2xlKCZicC0+cGRldi0+ZGV2LCBkbWFfdW5tYXBfYWRkcih0eF9idWYsIG1hcHBpbmcpLAogCQkJIHNrYl9oZWFkbGVuKHNrYiksIFBDSV9ETUFfVE9ERVZJQ0UpOwogCiAJLyogdW5tYXAgcmVtYWluaW5nIG1hcHBlZCBwYWdlcyAqLwpAQCAtNjUxMiw3ICs2NTY0LDcgQEAKIAkJcHJvZCA9IE5FWFRfVFhfQkQocHJvZCk7CiAJCXJpbmdfcHJvZCA9IFRYX1JJTkdfSURYKHByb2QpOwogCQl0eF9idWYgPSAmdHhyLT50eF9idWZfcmluZ1tyaW5nX3Byb2RdOwotCQlwY2lfdW5tYXBfcGFnZShicC0+cGRldiwgZG1hX3VubWFwX2FkZHIodHhfYnVmLCBtYXBwaW5nKSwKKwkJZG1hX3VubWFwX3BhZ2UoJmJwLT5wZGV2LT5kZXYsIGRtYV91bm1hcF9hZGRyKHR4X2J1ZiwgbWFwcGluZyksCiAJCQkgICAgICAgc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5zaXplLAogCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOwogCX0KQEAgLTY1NjcsMzYgKzY2MTksMjUgQEAKIAkJdGVtcF9zdGF0c1tpXSArPSBod19zdGF0c1tpXTsKIH0KIAotI2RlZmluZSBHRVRfNjRCSVRfTkVUX1NUQVRTNjQoY3RyKQkJCQlcCi0JKHVuc2lnbmVkIGxvbmcpICgodW5zaWduZWQgbG9uZykgKGN0ciMjX2hpKSA8PCAzMikgKwlcCi0JKHVuc2lnbmVkIGxvbmcpIChjdHIjI19sbykKKyNkZWZpbmUgR0VUXzY0QklUX05FVF9TVEFUUzY0KGN0cikJCVwKKwkoKCh1NjQpIChjdHIjI19oaSkgPDwgMzIpICsgKHU2NCkgKGN0ciMjX2xvKSkKIAotI2RlZmluZSBHRVRfNjRCSVRfTkVUX1NUQVRTMzIoY3RyKQkJCQlcCi0JKGN0ciMjX2xvKQotCi0jaWYgKEJJVFNfUEVSX0xPTkcgPT0gNjQpCiAjZGVmaW5lIEdFVF82NEJJVF9ORVRfU1RBVFMoY3RyKQkJCQlcCiAJR0VUXzY0QklUX05FVF9TVEFUUzY0KGJwLT5zdGF0c19ibGstPmN0cikgKwkJXAogCUdFVF82NEJJVF9ORVRfU1RBVFM2NChicC0+dGVtcF9zdGF0c19ibGstPmN0cikKLSNlbHNlCi0jZGVmaW5lIEdFVF82NEJJVF9ORVRfU1RBVFMoY3RyKQkJCQlcCi0JR0VUXzY0QklUX05FVF9TVEFUUzMyKGJwLT5zdGF0c19ibGstPmN0cikgKwkJXAotCUdFVF82NEJJVF9ORVRfU1RBVFMzMihicC0+dGVtcF9zdGF0c19ibGstPmN0cikKLSNlbmRpZgogCiAjZGVmaW5lIEdFVF8zMkJJVF9ORVRfU1RBVFMoY3RyKQkJCQlcCiAJKHVuc2lnbmVkIGxvbmcpIChicC0+c3RhdHNfYmxrLT5jdHIgKwkJCVwKIAkJCSBicC0+dGVtcF9zdGF0c19ibGstPmN0cikKIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICoKLWJueDJfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICoKK2JueDJfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpuZXRfc3RhdHMpCiB7CiAJc3RydWN0IGJueDIgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbmV0X3N0YXRzID0gJmRldi0+c3RhdHM7CiAKLQlpZiAoYnAtPnN0YXRzX2JsayA9PSBOVUxMKSB7CisJaWYgKGJwLT5zdGF0c19ibGsgPT0gTlVMTCkKIAkJcmV0dXJuIG5ldF9zdGF0czsKLQl9CisKIAluZXRfc3RhdHMtPnJ4X3BhY2tldHMgPQogCQlHRVRfNjRCSVRfTkVUX1NUQVRTKHN0YXRfSWZIQ0luVWNhc3RQa3RzKSArCiAJCUdFVF82NEJJVF9ORVRfU1RBVFMoc3RhdF9JZkhDSW5NdWx0aWNhc3RQa3RzKSArCkBAIC02NjE0LDcgKzY2NTUsNyBAQAogCQlHRVRfNjRCSVRfTkVUX1NUQVRTKHN0YXRfSWZIQ091dE9jdGV0cyk7CiAKIAluZXRfc3RhdHMtPm11bHRpY2FzdCA9Ci0JCUdFVF82NEJJVF9ORVRfU1RBVFMoc3RhdF9JZkhDT3V0TXVsdGljYXN0UGt0cyk7CisJCUdFVF82NEJJVF9ORVRfU1RBVFMoc3RhdF9JZkhDSW5NdWx0aWNhc3RQa3RzKTsKIAogCW5ldF9zdGF0cy0+Y29sbGlzaW9ucyA9CiAJCUdFVF8zMkJJVF9ORVRfU1RBVFMoc3RhdF9FdGhlclN0YXRzQ29sbGlzaW9ucyk7CkBAIC03NTQ1LDYgKzc1ODYsMTIgQEAKIAkJcmV0dXJuIChldGh0b29sX29wX3NldF90eF9jc3VtKGRldiwgZGF0YSkpOwogfQogCitzdGF0aWMgaW50CitibngyX3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3sKKwlyZXR1cm4gZXRodG9vbF9vcF9zZXRfZmxhZ3MoZGV2LCBkYXRhLCBFVEhfRkxBR19SWEhBU0gpOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJueDJfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncwkJPSBibngyX2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCQk9IGJueDJfc2V0X3NldHRpbmdzLApAQCAtNzU3NCw2ICs3NjIxLDggQEAKIAkucGh5c19pZAkJPSBibngyX3BoeXNfaWQsCiAJLmdldF9ldGh0b29sX3N0YXRzCT0gYm54Ml9nZXRfZXRodG9vbF9zdGF0cywKIAkuZ2V0X3NzZXRfY291bnQJCT0gYm54Ml9nZXRfc3NldF9jb3VudCwKKwkuc2V0X2ZsYWdzCQk9IGJueDJfc2V0X2ZsYWdzLAorCS5nZXRfZmxhZ3MJCT0gZXRodG9vbF9vcF9nZXRfZmxhZ3MsCiB9OwogCiAvKiBDYWxsZWQgd2l0aCBydG5sX2xvY2sgKi8KQEAgLTgyNTksNyArODMwOCw3IEBACiAJLm5kb19vcGVuCQk9IGJueDJfb3BlbiwKIAkubmRvX3N0YXJ0X3htaXQJCT0gYm54Ml9zdGFydF94bWl0LAogCS5uZG9fc3RvcAkJPSBibngyX2Nsb3NlLAotCS5uZG9fZ2V0X3N0YXRzCQk9IGJueDJfZ2V0X3N0YXRzLAorCS5uZG9fZ2V0X3N0YXRzNjQJPSBibngyX2dldF9zdGF0czY0LAogCS5uZG9fc2V0X3J4X21vZGUJPSBibngyX3NldF9yeF9tb2RlLAogCS5uZG9fZG9faW9jdGwJCT0gYm54Ml9pb2N0bCwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKQEAgLTgzMjAsNyArODM2OSw4IEBACiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGJwLT5tYWNfYWRkciwgNik7CiAJbWVtY3B5KGRldi0+cGVybV9hZGRyLCBicC0+bWFjX2FkZHIsIDYpOwogCi0JZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHIHwgTkVUSUZfRl9HUk87CisJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHIHwgTkVUSUZfRl9HUk8gfAorCQkJIE5FVElGX0ZfUlhIQVNIOwogCXZsYW5fZmVhdHVyZXNfYWRkKGRldiwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRyk7CiAJaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA5KSB7CiAJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUFY2X0NTVU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmggYi9kcml2ZXJzL25ldC9ibngyLmgKaW5kZXggZGRhYTNmYy4uMjEwNGMxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuaApAQCAtMjk1LDYgKzI5NSw5IEBACiAJCSNkZWZpbmUgTDJfRkhEUl9FUlJPUlNfVENQX1hTVU0JCSgxPDwyOCkKIAkJI2RlZmluZSBMMl9GSERSX0VSUk9SU19VRFBfWFNVTQkJKDE8PDMxKQogCisJCSNkZWZpbmUgTDJfRkhEUl9TVEFUVVNfVVNFX1JYSEFTSAlcCisJCQkoTDJfRkhEUl9TVEFUVVNfVENQX1NFR01FTlQgfCBMMl9GSERSX1NUQVRVU19SU1NfSEFTSCkKKwogCXUzMiBsMl9maGRyX2hhc2g7CiAjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCiAJdTE2IGwyX2ZoZHJfcGt0X2xlbjsKQEAgLTY2MzQsOSArNjYzNywxMiBAQAogCiAjZGVmaW5lIEJOWDJfTUFYX01TSVhfSFdfVkVDCTkKICNkZWZpbmUgQk5YMl9NQVhfTVNJWF9WRUMJOQotI2RlZmluZSBCTlgyX0JBU0VfVkVDCQkwCi0jZGVmaW5lIEJOWDJfVFhfVkVDCQkxCi0jZGVmaW5lIEJOWDJfVFhfSU5UX05VTQkoQk5YMl9UWF9WRUMgPDwgQk5YMl9QQ0lDRkdfSU5UX0FDS19DTURfSU5UX05VTV9TSElGVCkKKyNpZmRlZiBCQ01fQ05JQworI2RlZmluZSBCTlgyX01JTl9NU0lYX1ZFQwkyCisjZWxzZQorI2RlZmluZSBCTlgyX01JTl9NU0lYX1ZFQwkxCisjZW5kaWYKKwogCiBzdHJ1Y3QgYm54Ml9pcnEgewogCWlycV9oYW5kbGVyX3QJaGFuZGxlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4LmggYi9kcml2ZXJzL25ldC9ibngyeC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmQyMzY4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzc2ICswLDAgQEAKLS8qIGJueDJ4Lmg6IEJyb2FkY29tIEV2ZXJlc3QgbmV0d29yayBkcml2ZXIuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogTWFpbnRhaW5lZCBieTogRWlsb24gR3JlZW5zdGVpbiA8ZWlsb25nQGJyb2FkY29tLmNvbT4KLSAqIFdyaXR0ZW4gYnk6IEVsaWV6ZXIgVGFtaXIKLSAqIEJhc2VkIG9uIGNvZGUgZnJvbSBNaWNoYWVsIENoYW4ncyBibngyIGRyaXZlcgotICovCi0KLSNpZm5kZWYgQk5YMlhfSAotI2RlZmluZSBCTlgyWF9ICi0KLS8qIGNvbXBpbGF0aW9uIHRpbWUgZmxhZ3MgKi8KLQotLyogZGVmaW5lIHRoaXMgdG8gbWFrZSB0aGUgZHJpdmVyIGZyZWV6ZSBvbiBlcnJvciB0byBhbGxvdyBnZXR0aW5nIGRlYnVnIGluZm8KLSAqICh5b3Ugd2lsbCBuZWVkIHRvIHJlYm9vdCBhZnRlcndhcmRzKSAqLwotLyogI2RlZmluZSBCTlgyWF9TVE9QX09OX0VSUk9SICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRKSB8fCBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRX01PRFVMRSkKLSNkZWZpbmUgQkNNX1ZMQU4JCQkxCi0jZW5kaWYKLQotI2RlZmluZSBCTlgyWF9NVUxUSV9RVUVVRQotCi0jZGVmaW5lIEJOWDJYX05FV19OQVBJCi0KLQotCi0jaWYgZGVmaW5lZChDT05GSUdfQ05JQykgfHwgZGVmaW5lZChDT05GSUdfQ05JQ19NT0RVTEUpCi0jZGVmaW5lIEJDTV9DTklDIDEKLSNpbmNsdWRlICJjbmljX2lmLmgiCi0jZW5kaWYKLQotCi0jaWZkZWYgQkNNX0NOSUMKLSNkZWZpbmUgQk5YMlhfTUlOX01TSVhfVkVDX0NOVCAzCi0jZGVmaW5lIEJOWDJYX01TSVhfVkVDX0ZQX1NUQVJUIDIKLSNlbHNlCi0jZGVmaW5lIEJOWDJYX01JTl9NU0lYX1ZFQ19DTlQgMgotI2RlZmluZSBCTlgyWF9NU0lYX1ZFQ19GUF9TVEFSVCAxCi0jZW5kaWYKLQotI2luY2x1ZGUgPGxpbnV4L21kaW8uaD4KLSNpbmNsdWRlICJibngyeF9yZWcuaCIKLSNpbmNsdWRlICJibngyeF9md19kZWZzLmgiCi0jaW5jbHVkZSAiYm54MnhfaHNpLmgiCi0jaW5jbHVkZSAiYm54MnhfbGluay5oIgotCi0vKiBlcnJvci9kZWJ1ZyBwcmludHMgKi8KLQotI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJibngyeCIKLQotLyogZm9yIG1lc3NhZ2VzIHRoYXQgYXJlIGN1cnJlbnRseSBvZmYgKi8KLSNkZWZpbmUgQk5YMlhfTVNHX09GRgkJCTAKLSNkZWZpbmUgQk5YMlhfTVNHX01DUAkJCTB4MDEwMDAwIC8qIHdhczogTkVUSUZfTVNHX0hXICovCi0jZGVmaW5lIEJOWDJYX01TR19TVEFUUwkJCTB4MDIwMDAwIC8qIHdhczogTkVUSUZfTVNHX1RJTUVSICovCi0jZGVmaW5lIEJOWDJYX01TR19OVk0JCQkweDA0MDAwMCAvKiB3YXM6IE5FVElGX01TR19IVyAqLwotI2RlZmluZSBCTlgyWF9NU0dfRE1BRQkJCTB4MDgwMDAwIC8qIHdhczogTkVUSUZfTVNHX0hXICovCi0jZGVmaW5lIEJOWDJYX01TR19TUAkJCTB4MTAwMDAwIC8qIHdhczogTkVUSUZfTVNHX0lOVFIgKi8KLSNkZWZpbmUgQk5YMlhfTVNHX0ZQCQkJMHgyMDAwMDAgLyogd2FzOiBORVRJRl9NU0dfSU5UUiAqLwotCi0jZGVmaW5lIERQX0xFVkVMCQkJS0VSTl9OT1RJQ0UJLyogd2FzOiBLRVJOX0RFQlVHICovCi0KLS8qIHJlZ3VsYXIgZGVidWcgcHJpbnQgKi8KLSNkZWZpbmUgRFAoX19tYXNrLCBfX2ZtdCwgX19hcmdzLi4uKQkJCQlcCi1kbyB7CQkJCQkJCQlcCi0JaWYgKGJwLT5tc2dfZW5hYmxlICYgKF9fbWFzaykpCQkJCVwKLQkJcHJpbnRrKERQX0xFVkVMICJbJXM6JWQoJXMpXSIgX19mbXQsCQlcCi0JCSAgICAgICBfX2Z1bmNfXywgX19MSU5FX18sCQkJXAotCQkgICAgICAgYnAtPmRldiA/IChicC0+ZGV2LT5uYW1lKSA6ICI/IiwJCVwKLQkJICAgICAgICMjX19hcmdzKTsJCQkJXAotfSB3aGlsZSAoMCkKLQotLyogZXJyb3JzIGRlYnVnIHByaW50ICovCi0jZGVmaW5lIEJOWDJYX0RCR19FUlIoX19mbXQsIF9fYXJncy4uLikJCQkJXAotZG8gewkJCQkJCQkJXAotCWlmIChuZXRpZl9tc2dfcHJvYmUoYnApKQkJCQlcCi0JCXByX2VycigiWyVzOiVkKCVzKV0iIF9fZm10LAkJCVwKLQkJICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXywJCQlcCi0JCSAgICAgICBicC0+ZGV2ID8gKGJwLT5kZXYtPm5hbWUpIDogIj8iLAkJXAotCQkgICAgICAgIyNfX2FyZ3MpOwkJCQlcCi19IHdoaWxlICgwKQotCi0vKiBmb3IgZXJyb3JzIChuZXZlciBtYXNrZWQpICovCi0jZGVmaW5lIEJOWDJYX0VSUihfX2ZtdCwgX19hcmdzLi4uKQkJCQlcCi1kbyB7CQkJCQkJCQlcCi0JcHJfZXJyKCJbJXM6JWQoJXMpXSIgX19mbXQsCQkJCVwKLQkgICAgICAgX19mdW5jX18sIF9fTElORV9fLAkJCQlcCi0JICAgICAgIGJwLT5kZXYgPyAoYnAtPmRldi0+bmFtZSkgOiAiPyIsCQkJXAotCSAgICAgICAjI19fYXJncyk7CQkJCQlcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBCTlgyWF9FUlJPUihfX2ZtdCwgX19hcmdzLi4uKSBkbyB7IFwKLQlwcl9lcnIoIlslczolZF0iIF9fZm10LCBfX2Z1bmNfXywgX19MSU5FX18sICMjX19hcmdzKTsgXAotCX0gd2hpbGUgKDApCi0KLQotLyogYmVmb3JlIHdlIGhhdmUgYSBkZXYtPm5hbWUgdXNlIGRldl9pbmZvKCkgKi8KLSNkZWZpbmUgQk5YMlhfREVWX0lORk8oX19mbXQsIF9fYXJncy4uLikJCQkgXAotZG8gewkJCQkJCQkJIFwKLQlpZiAobmV0aWZfbXNnX3Byb2JlKGJwKSkJCQkJIFwKLQkJZGV2X2luZm8oJmJwLT5wZGV2LT5kZXYsIF9fZm10LCAjI19fYXJncyk7CSBcCi19IHdoaWxlICgwKQotCi0KLSNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCi0jZGVmaW5lIGJueDJ4X3BhbmljKCkgZG8geyBcCi0JCWJwLT5wYW5pYyA9IDE7IFwKLQkJQk5YMlhfRVJSKCJkcml2ZXIgYXNzZXJ0XG4iKTsgXAotCQlibngyeF9pbnRfZGlzYWJsZShicCk7IFwKLQkJYm54MnhfcGFuaWNfZHVtcChicCk7IFwKLQl9IHdoaWxlICgwKQotI2Vsc2UKLSNkZWZpbmUgYm54MnhfcGFuaWMoKSBkbyB7IFwKLQkJYnAtPnBhbmljID0gMTsgXAotCQlCTlgyWF9FUlIoImRyaXZlciBhc3NlcnRcbiIpOyBcCi0JCWJueDJ4X3BhbmljX2R1bXAoYnApOyBcCi0JfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0KLSNkZWZpbmUgVTY0X0xPKHgpCQkJKHUzMikoKCh1NjQpKHgpKSAmIDB4ZmZmZmZmZmYpCi0jZGVmaW5lIFU2NF9ISSh4KQkJCSh1MzIpKCgodTY0KSh4KSkgPj4gMzIpCi0jZGVmaW5lIEhJTE9fVTY0KGhpLCBsbykJCSgoKCh1NjQpKGhpKSkgPDwgMzIpICsgKGxvKSkKLQotCi0jZGVmaW5lIFJFR19BRERSKGJwLCBvZmZzZXQpCQkoYnAtPnJlZ3ZpZXcgKyBvZmZzZXQpCi0KLSNkZWZpbmUgUkVHX1JEKGJwLCBvZmZzZXQpCQlyZWFkbChSRUdfQUREUihicCwgb2Zmc2V0KSkKLSNkZWZpbmUgUkVHX1JEOChicCwgb2Zmc2V0KQkJcmVhZGIoUkVHX0FERFIoYnAsIG9mZnNldCkpCi0KLSNkZWZpbmUgUkVHX1dSKGJwLCBvZmZzZXQsIHZhbCkJCXdyaXRlbCgodTMyKXZhbCwgUkVHX0FERFIoYnAsIG9mZnNldCkpCi0jZGVmaW5lIFJFR19XUjgoYnAsIG9mZnNldCwgdmFsKQl3cml0ZWIoKHU4KXZhbCwgUkVHX0FERFIoYnAsIG9mZnNldCkpCi0jZGVmaW5lIFJFR19XUjE2KGJwLCBvZmZzZXQsIHZhbCkJd3JpdGV3KCh1MTYpdmFsLCBSRUdfQUREUihicCwgb2Zmc2V0KSkKLQotI2RlZmluZSBSRUdfUkRfSU5EKGJwLCBvZmZzZXQpCQlibngyeF9yZWdfcmRfaW5kKGJwLCBvZmZzZXQpCi0jZGVmaW5lIFJFR19XUl9JTkQoYnAsIG9mZnNldCwgdmFsKQlibngyeF9yZWdfd3JfaW5kKGJwLCBvZmZzZXQsIHZhbCkKLQotI2RlZmluZSBSRUdfUkRfRE1BRShicCwgb2Zmc2V0LCB2YWxwLCBsZW4zMikgXAotCWRvIHsgXAotCQlibngyeF9yZWFkX2RtYWUoYnAsIG9mZnNldCwgbGVuMzIpO1wKLQkJbWVtY3B5KHZhbHAsIGJueDJ4X3NwKGJwLCB3Yl9kYXRhWzBdKSwgKGxlbjMyKSAqIDQpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBSRUdfV1JfRE1BRShicCwgb2Zmc2V0LCB2YWxwLCBsZW4zMikgXAotCWRvIHsgXAotCQltZW1jcHkoYm54Mnhfc3AoYnAsIHdiX2RhdGFbMF0pLCB2YWxwLCAobGVuMzIpICogNCk7IFwKLQkJYm54Mnhfd3JpdGVfZG1hZShicCwgYm54Mnhfc3BfbWFwcGluZyhicCwgd2JfZGF0YSksIFwKLQkJCQkgb2Zmc2V0LCBsZW4zMik7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFZJUlRfV1JfRE1BRV9MRU4oYnAsIGRhdGEsIGFkZHIsIGxlbjMyLCBsZTMyX3N3YXApIFwKLQlkbyB7IFwKLQkJbWVtY3B5KEdVTlpJUF9CVUYoYnApLCBkYXRhLCAobGVuMzIpICogNCk7IFwKLQkJYm54Mnhfd3JpdGVfYmlnX2J1Zl93YihicCwgYWRkciwgbGVuMzIpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBTSE1FTV9BRERSKGJwLCBmaWVsZCkJCShicC0+Y29tbW9uLnNobWVtX2Jhc2UgKyBcCi0JCQkJCSBvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLCBmaWVsZCkpCi0jZGVmaW5lIFNITUVNX1JEKGJwLCBmaWVsZCkJCVJFR19SRChicCwgU0hNRU1fQUREUihicCwgZmllbGQpKQotI2RlZmluZSBTSE1FTV9XUihicCwgZmllbGQsIHZhbCkJUkVHX1dSKGJwLCBTSE1FTV9BRERSKGJwLCBmaWVsZCksIHZhbCkKLQotI2RlZmluZSBTSE1FTTJfQUREUihicCwgZmllbGQpCQkoYnAtPmNvbW1vbi5zaG1lbTJfYmFzZSArIFwKLQkJCQkJIG9mZnNldG9mKHN0cnVjdCBzaG1lbTJfcmVnaW9uLCBmaWVsZCkpCi0jZGVmaW5lIFNITUVNMl9SRChicCwgZmllbGQpCQlSRUdfUkQoYnAsIFNITUVNMl9BRERSKGJwLCBmaWVsZCkpCi0jZGVmaW5lIFNITUVNMl9XUihicCwgZmllbGQsIHZhbCkJUkVHX1dSKGJwLCBTSE1FTTJfQUREUihicCwgZmllbGQpLCB2YWwpCi0KLSNkZWZpbmUgTUZfQ0ZHX1JEKGJwLCBmaWVsZCkJCVNITUVNX1JEKGJwLCBtZl9jZmcuZmllbGQpCi0jZGVmaW5lIE1GX0NGR19XUihicCwgZmllbGQsIHZhbCkJU0hNRU1fV1IoYnAsIG1mX2NmZy5maWVsZCwgdmFsKQotCi0jZGVmaW5lIEVNQUNfUkQoYnAsIHJlZykJCVJFR19SRChicCwgZW1hY19iYXNlICsgcmVnKQotI2RlZmluZSBFTUFDX1dSKGJwLCByZWcsIHZhbCkJCVJFR19XUihicCwgZW1hY19iYXNlICsgcmVnLCB2YWwpCi0KLSNkZWZpbmUgQUVVX0lOX0FUVE5fQklUU19QWFBQQ0lDTE9DS0NMSUVOVF9QQVJJVFlfRVJST1IgXAotCUFFVV9JTlBVVFNfQVRUTl9CSVRTX1BYUFBDSUNMT0NLQ0xJRU5UX1BBUklUWV9FUlJPUgotCi0KLS8qIGZhc3QgcGF0aCAqLwotCi1zdHJ1Y3Qgc3dfcnhfYmQgewotCXN0cnVjdCBza19idWZmCSpza2I7Ci0JREVGSU5FX0RNQV9VTk1BUF9BRERSKG1hcHBpbmcpOwotfTsKLQotc3RydWN0IHN3X3R4X2JkIHsKLQlzdHJ1Y3Qgc2tfYnVmZgkqc2tiOwotCXUxNgkJZmlyc3RfYmQ7Ci0JdTgJCWZsYWdzOwotLyogU2V0IG9uIHRoZSBmaXJzdCBCRCBkZXNjcmlwdG9yIHdoZW4gdGhlcmUgaXMgYSBzcGxpdCBCRCAqLwotI2RlZmluZSBCTlgyWF9UU09fU1BMSVRfQkQJCSgxPDwwKQotfTsKLQotc3RydWN0IHN3X3J4X3BhZ2UgewotCXN0cnVjdCBwYWdlCSpwYWdlOwotCURFRklORV9ETUFfVU5NQVBfQUREUihtYXBwaW5nKTsKLX07Ci0KLXVuaW9uIGRiX3Byb2QgewotCXN0cnVjdCBkb29yYmVsbF9zZXRfcHJvZCBkYXRhOwotCXUzMgkJcmF3OwotfTsKLQotCi0vKiBNQyBoc2kgKi8KLSNkZWZpbmUgQkNNX1BBR0VfU0hJRlQJCQkxMgotI2RlZmluZSBCQ01fUEFHRV9TSVpFCQkJKDEgPDwgQkNNX1BBR0VfU0hJRlQpCi0jZGVmaW5lIEJDTV9QQUdFX01BU0sJCQkofihCQ01fUEFHRV9TSVpFIC0gMSkpCi0jZGVmaW5lIEJDTV9QQUdFX0FMSUdOKGFkZHIpCSgoKGFkZHIpICsgQkNNX1BBR0VfU0laRSAtIDEpICYgQkNNX1BBR0VfTUFTSykKLQotI2RlZmluZSBQQUdFU19QRVJfU0dFX1NISUZUCQkwCi0jZGVmaW5lIFBBR0VTX1BFUl9TR0UJCQkoMSA8PCBQQUdFU19QRVJfU0dFX1NISUZUKQotI2RlZmluZSBTR0VfUEFHRV9TSVpFCQkJUEFHRV9TSVpFCi0jZGVmaW5lIFNHRV9QQUdFX1NISUZUCQkJUEFHRV9TSElGVAotI2RlZmluZSBTR0VfUEFHRV9BTElHTihhZGRyKQkJUEFHRV9BTElHTigodHlwZW9mKFBBR0VfU0laRSkpKGFkZHIpKQotCi0vKiBTR0UgcmluZyByZWxhdGVkIG1hY3JvcyAqLwotI2RlZmluZSBOVU1fUlhfU0dFX1BBR0VTCQkyCi0jZGVmaW5lIFJYX1NHRV9DTlQJCShCQ01fUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBldGhfcnhfc2dlKSkKLSNkZWZpbmUgTUFYX1JYX1NHRV9DTlQJCQkoUlhfU0dFX0NOVCAtIDIpCi0vKiBSWF9TR0VfQ05UIGlzIHByb21pc2VkIHRvIGJlIGEgcG93ZXIgb2YgMiAqLwotI2RlZmluZSBSWF9TR0VfTUFTSwkJCShSWF9TR0VfQ05UIC0gMSkKLSNkZWZpbmUgTlVNX1JYX1NHRQkJCShSWF9TR0VfQ05UICogTlVNX1JYX1NHRV9QQUdFUykKLSNkZWZpbmUgTUFYX1JYX1NHRQkJCShOVU1fUlhfU0dFIC0gMSkKLSNkZWZpbmUgTkVYVF9TR0VfSURYKHgpCQkoKCgoeCkgJiBSWF9TR0VfTUFTSykgPT0gXAotCQkJCSAgKE1BWF9SWF9TR0VfQ05UIC0gMSkpID8gKHgpICsgMyA6ICh4KSArIDEpCi0jZGVmaW5lIFJYX1NHRSh4KQkJCSgoeCkgJiBNQVhfUlhfU0dFKQotCi0vKiBTR0UgcHJvZHVjZXIgbWFzayByZWxhdGVkIG1hY3JvcyAqLwotLyogTnVtYmVyIG9mIGJpdHMgaW4gb25lIHNnZV9tYXNrIGFycmF5IGVsZW1lbnQgKi8KLSNkZWZpbmUgUlhfU0dFX01BU0tfRUxFTV9TWgkJNjQKLSNkZWZpbmUgUlhfU0dFX01BU0tfRUxFTV9TSElGVAkJNgotI2RlZmluZSBSWF9TR0VfTUFTS19FTEVNX01BU0sJCSgodTY0KVJYX1NHRV9NQVNLX0VMRU1fU1ogLSAxKQotCi0vKiBDcmVhdGVzIGEgYml0bWFzayBvZiBhbGwgb25lcyBpbiBsZXNzIHNpZ25pZmljYW50IGJpdHMuCi0gICBpZHggLSBpbmRleCBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgaW4gdGhlIGNyZWF0ZWQgbWFzayAqLwotI2RlZmluZSBSWF9TR0VfT05FU19NQVNLKGlkeCkgXAotCQkoKCh1NjQpMHgxIDw8ICgoKGlkeCkgJiBSWF9TR0VfTUFTS19FTEVNX01BU0spICsgMSkpIC0gMSkKLSNkZWZpbmUgUlhfU0dFX01BU0tfRUxFTV9PTkVfTUFTSwkoKHU2NCkofjApKQotCi0vKiBOdW1iZXIgb2YgdTY0IGVsZW1lbnRzIGluIFNHRSBtYXNrIGFycmF5ICovCi0jZGVmaW5lIFJYX1NHRV9NQVNLX0xFTgkJCSgoTlVNX1JYX1NHRV9QQUdFUyAqIFJYX1NHRV9DTlQpIC8gXAotCQkJCQkgUlhfU0dFX01BU0tfRUxFTV9TWikKLSNkZWZpbmUgUlhfU0dFX01BU0tfTEVOX01BU0sJCShSWF9TR0VfTUFTS19MRU4gLSAxKQotI2RlZmluZSBORVhUX1NHRV9NQVNLX0VMRU0oZWwpCQkoKChlbCkgKyAxKSAmIFJYX1NHRV9NQVNLX0xFTl9NQVNLKQotCi0KLXN0cnVjdCBibngyeF9ldGhfcV9zdGF0cyB7Ci0JdTMyIHRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpOwotCXUzMiB0b3RhbF9ieXRlc19yZWNlaXZlZF9sbzsKLQl1MzIgdG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfaGk7Ci0JdTMyIHRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2xvOwotCXUzMiB0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGk7Ci0JdTMyIHRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZF9sbzsKLQl1MzIgdG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGk7Ci0JdTMyIHRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2xvOwotCXUzMiB0b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZF9oaTsKLQl1MzIgdG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG87Ci0JdTMyIHRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaTsKLQl1MzIgdG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2xvOwotCXUzMiB0b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaTsKLQl1MzIgdG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG87Ci0JdTMyIHRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpOwotCXUzMiB0b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbzsKLQl1MzIgdmFsaWRfYnl0ZXNfcmVjZWl2ZWRfaGk7Ci0JdTMyIHZhbGlkX2J5dGVzX3JlY2VpdmVkX2xvOwotCi0JdTMyIGVycm9yX2J5dGVzX3JlY2VpdmVkX2hpOwotCXUzMiBlcnJvcl9ieXRlc19yZWNlaXZlZF9sbzsKLQl1MzIgZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfaGk7Ci0JdTMyIGV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2xvOwotCXUzMiBub19idWZmX2Rpc2NhcmRfaGk7Ci0JdTMyIG5vX2J1ZmZfZGlzY2FyZF9sbzsKLQotCXUzMiBkcml2ZXJfeG9mZjsKLQl1MzIgcnhfZXJyX2Rpc2NhcmRfcGt0OwotCXUzMiByeF9za2JfYWxsb2NfZmFpbGVkOwotCXUzMiBod19jc3VtX2VycjsKLX07Ci0KLSNkZWZpbmUgQk5YMlhfTlVNX1FfU1RBVFMJCTEzCi0jZGVmaW5lIFFfU1RBVFNfT0ZGU0VUMzIoc3RhdF9uYW1lKSBcCi0JCQkob2Zmc2V0b2Yoc3RydWN0IGJueDJ4X2V0aF9xX3N0YXRzLCBzdGF0X25hbWUpIC8gNCkKLQotc3RydWN0IGJueDJ4X2Zhc3RwYXRoIHsKLQotCXN0cnVjdCBuYXBpX3N0cnVjdAluYXBpOwotCXN0cnVjdCBob3N0X3N0YXR1c19ibG9jayAqc3RhdHVzX2JsazsKLQlkbWFfYWRkcl90CQlzdGF0dXNfYmxrX21hcHBpbmc7Ci0KLQlzdHJ1Y3Qgc3dfdHhfYmQJCSp0eF9idWZfcmluZzsKLQotCXVuaW9uIGV0aF90eF9iZF90eXBlcwkqdHhfZGVzY19yaW5nOwotCWRtYV9hZGRyX3QJCXR4X2Rlc2NfbWFwcGluZzsKLQotCXN0cnVjdCBzd19yeF9iZAkJKnJ4X2J1Zl9yaW5nOwkvKiBCRHMgbWFwcGluZ3MgcmluZyAqLwotCXN0cnVjdCBzd19yeF9wYWdlCSpyeF9wYWdlX3Jpbmc7CS8qIFNHRSBwYWdlcyBtYXBwaW5ncyByaW5nICovCi0KLQlzdHJ1Y3QgZXRoX3J4X2JkCSpyeF9kZXNjX3Jpbmc7Ci0JZG1hX2FkZHJfdAkJcnhfZGVzY19tYXBwaW5nOwotCi0JdW5pb24gZXRoX3J4X2NxZQkqcnhfY29tcF9yaW5nOwotCWRtYV9hZGRyX3QJCXJ4X2NvbXBfbWFwcGluZzsKLQotCS8qIFNHRSByaW5nICovCi0Jc3RydWN0IGV0aF9yeF9zZ2UJKnJ4X3NnZV9yaW5nOwotCWRtYV9hZGRyX3QJCXJ4X3NnZV9tYXBwaW5nOwotCi0JdTY0CQkJc2dlX21hc2tbUlhfU0dFX01BU0tfTEVOXTsKLQotCWludAkJCXN0YXRlOwotI2RlZmluZSBCTlgyWF9GUF9TVEFURV9DTE9TRUQJCTAKLSNkZWZpbmUgQk5YMlhfRlBfU1RBVEVfSVJRCQkweDgwMDAwCi0jZGVmaW5lIEJOWDJYX0ZQX1NUQVRFX09QRU5JTkcJCTB4OTAwMDAKLSNkZWZpbmUgQk5YMlhfRlBfU1RBVEVfT1BFTgkJMHhhMDAwMAotI2RlZmluZSBCTlgyWF9GUF9TVEFURV9IQUxUSU5HCQkweGIwMDAwCi0jZGVmaW5lIEJOWDJYX0ZQX1NUQVRFX0hBTFRFRAkJMHhjMDAwMAotCi0JdTgJCQlpbmRleDsJLyogbnVtYmVyIGluIGZwIGFycmF5ICovCi0JdTgJCQljbF9pZDsJLyogZXRoIGNsaWVudCBpZCAqLwotCXU4CQkJc2JfaWQ7CS8qIHN0YXR1cyBibG9jayBudW1iZXIgaW4gSFcgKi8KLQotCXVuaW9uIGRiX3Byb2QJCXR4X2RiOwotCi0JdTE2CQkJdHhfcGt0X3Byb2Q7Ci0JdTE2CQkJdHhfcGt0X2NvbnM7Ci0JdTE2CQkJdHhfYmRfcHJvZDsKLQl1MTYJCQl0eF9iZF9jb25zOwotCV9fbGUxNgkJCSp0eF9jb25zX3NiOwotCi0JX19sZTE2CQkJZnBfY19pZHg7Ci0JX19sZTE2CQkJZnBfdV9pZHg7Ci0KLQl1MTYJCQlyeF9iZF9wcm9kOwotCXUxNgkJCXJ4X2JkX2NvbnM7Ci0JdTE2CQkJcnhfY29tcF9wcm9kOwotCXUxNgkJCXJ4X2NvbXBfY29uczsKLQl1MTYJCQlyeF9zZ2VfcHJvZDsKLQkvKiBUaGUgbGFzdCBtYXhpbWFsIGNvbXBsZXRlZCBTR0UgKi8KLQl1MTYJCQlsYXN0X21heF9zZ2U7Ci0JX19sZTE2CQkJKnJ4X2NvbnNfc2I7Ci0JX19sZTE2CQkJKnJ4X2JkX2NvbnNfc2I7Ci0KLQotCXVuc2lnbmVkIGxvbmcJCXR4X3BrdCwKLQkJCQlyeF9wa3QsCi0JCQkJcnhfY2FsbHM7Ci0KLQkvKiBUUEEgcmVsYXRlZCAqLwotCXN0cnVjdCBzd19yeF9iZAkJdHBhX3Bvb2xbRVRIX01BWF9BR0dSRUdBVElPTl9RVUVVRVNfRTFIXTsKLQl1OAkJCXRwYV9zdGF0ZVtFVEhfTUFYX0FHR1JFR0FUSU9OX1FVRVVFU19FMUhdOwotI2RlZmluZSBCTlgyWF9UUEFfU1RBUlQJCQkxCi0jZGVmaW5lIEJOWDJYX1RQQV9TVE9QCQkJMgotCXU4CQkJZGlzYWJsZV90cGE7Ci0jaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgotCXU2NAkJCXRwYV9xdWV1ZV91c2VkOwotI2VuZGlmCi0KLQlzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgb2xkX3RjbGllbnQ7Ci0Jc3RydWN0IHVzdG9ybV9wZXJfY2xpZW50X3N0YXRzIG9sZF91Y2xpZW50OwotCXN0cnVjdCB4c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyBvbGRfeGNsaWVudDsKLQlzdHJ1Y3QgYm54MnhfZXRoX3Ffc3RhdHMgZXRoX3Ffc3RhdHM7Ci0KLQkvKiBUaGUgc2l6ZSBpcyBjYWxjdWxhdGVkIHVzaW5nIHRoZSBmb2xsb3dpbmc6Ci0JICAgICBzaXplb2YgbmFtZSBmaWVsZCBmcm9tIG5ldGRldiBzdHJ1Y3R1cmUgKwotCSAgICAgNCAoJy1YeC0nIHN0cmluZykgKwotCSAgICAgNCAoZm9yIHRoZSBkaWdpdHMgYW5kIHRvIG1ha2UgaXQgRFdPUkQgYWxpZ25lZCkgKi8KLSNkZWZpbmUgRlBfTkFNRV9TSVpFCQkoc2l6ZW9mKCgoc3RydWN0IG5ldF9kZXZpY2UgKikwKS0+bmFtZSkgKyA4KQotCWNoYXIJCQluYW1lW0ZQX05BTUVfU0laRV07Ci0Jc3RydWN0IGJueDJ4CQkqYnA7IC8qIHBhcmVudCAqLwotfTsKLQotI2RlZmluZSBibngyeF9mcChicCwgbnIsIHZhcikJCShicC0+ZnBbbnJdLnZhcikKLQotCi0vKiBNQyBoc2kgKi8KLSNkZWZpbmUgTUFYX0ZFVENIX0JECQkJMTMJLyogSFcgbWF4IEJEcyBwZXIgcGFja2V0ICovCi0jZGVmaW5lIFJYX0NPUFlfVEhSRVNICQkJOTIKLQotI2RlZmluZSBOVU1fVFhfUklOR1MJCQkxNgotI2RlZmluZSBUWF9ERVNDX0NOVAkJKEJDTV9QQUdFX1NJWkUgLyBzaXplb2YodW5pb24gZXRoX3R4X2JkX3R5cGVzKSkKLSNkZWZpbmUgTUFYX1RYX0RFU0NfQ05UCQkJKFRYX0RFU0NfQ05UIC0gMSkKLSNkZWZpbmUgTlVNX1RYX0JECQkJKFRYX0RFU0NfQ05UICogTlVNX1RYX1JJTkdTKQotI2RlZmluZSBNQVhfVFhfQkQJCQkoTlVNX1RYX0JEIC0gMSkKLSNkZWZpbmUgTUFYX1RYX0FWQUlMCQkJKE1BWF9UWF9ERVNDX0NOVCAqIE5VTV9UWF9SSU5HUyAtIDIpCi0jZGVmaW5lIE5FWFRfVFhfSURYKHgpCQkoKCgoeCkgJiBNQVhfVFhfREVTQ19DTlQpID09IFwKLQkJCQkgIChNQVhfVFhfREVTQ19DTlQgLSAxKSkgPyAoeCkgKyAyIDogKHgpICsgMSkKLSNkZWZpbmUgVFhfQkQoeCkJCQkoKHgpICYgTUFYX1RYX0JEKQotI2RlZmluZSBUWF9CRF9QT0ZGKHgpCQkJKCh4KSAmIE1BWF9UWF9ERVNDX0NOVCkKLQotLyogVGhlIFJYIEJEIHJpbmcgaXMgc3BlY2lhbCwgZWFjaCBiZCBpcyA4IGJ5dGVzIGJ1dCB0aGUgbGFzdCBvbmUgaXMgMTYgKi8KLSNkZWZpbmUgTlVNX1JYX1JJTkdTCQkJOAotI2RlZmluZSBSWF9ERVNDX0NOVAkJKEJDTV9QQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGV0aF9yeF9iZCkpCi0jZGVmaW5lIE1BWF9SWF9ERVNDX0NOVAkJCShSWF9ERVNDX0NOVCAtIDIpCi0jZGVmaW5lIFJYX0RFU0NfTUFTSwkJCShSWF9ERVNDX0NOVCAtIDEpCi0jZGVmaW5lIE5VTV9SWF9CRAkJCShSWF9ERVNDX0NOVCAqIE5VTV9SWF9SSU5HUykKLSNkZWZpbmUgTUFYX1JYX0JECQkJKE5VTV9SWF9CRCAtIDEpCi0jZGVmaW5lIE1BWF9SWF9BVkFJTAkJCShNQVhfUlhfREVTQ19DTlQgKiBOVU1fUlhfUklOR1MgLSAyKQotI2RlZmluZSBORVhUX1JYX0lEWCh4KQkJKCgoKHgpICYgUlhfREVTQ19NQVNLKSA9PSBcCi0JCQkJICAoTUFYX1JYX0RFU0NfQ05UIC0gMSkpID8gKHgpICsgMyA6ICh4KSArIDEpCi0jZGVmaW5lIFJYX0JEKHgpCQkJKCh4KSAmIE1BWF9SWF9CRCkKLQotLyogQXMgbG9uZyBhcyBDUUUgaXMgNCB0aW1lcyBiaWdnZXIgdGhhbiBCRCBlbnRyeSB3ZSBoYXZlIHRvIGFsbG9jYXRlCi0gICA0IHRpbWVzIG1vcmUgcGFnZXMgZm9yIENRIHJpbmcgaW4gb3JkZXIgdG8ga2VlcCBpdCBiYWxhbmNlZCB3aXRoCi0gICBCRCByaW5nICovCi0jZGVmaW5lIE5VTV9SQ1FfUklOR1MJCQkoTlVNX1JYX1JJTkdTICogNCkKLSNkZWZpbmUgUkNRX0RFU0NfQ05UCQkoQkNNX1BBR0VfU0laRSAvIHNpemVvZih1bmlvbiBldGhfcnhfY3FlKSkKLSNkZWZpbmUgTUFYX1JDUV9ERVNDX0NOVAkJKFJDUV9ERVNDX0NOVCAtIDEpCi0jZGVmaW5lIE5VTV9SQ1FfQkQJCQkoUkNRX0RFU0NfQ05UICogTlVNX1JDUV9SSU5HUykKLSNkZWZpbmUgTUFYX1JDUV9CRAkJCShOVU1fUkNRX0JEIC0gMSkKLSNkZWZpbmUgTUFYX1JDUV9BVkFJTAkJCShNQVhfUkNRX0RFU0NfQ05UICogTlVNX1JDUV9SSU5HUyAtIDIpCi0jZGVmaW5lIE5FWFRfUkNRX0lEWCh4KQkJKCgoKHgpICYgTUFYX1JDUV9ERVNDX0NOVCkgPT0gXAotCQkJCSAgKE1BWF9SQ1FfREVTQ19DTlQgLSAxKSkgPyAoeCkgKyAyIDogKHgpICsgMSkKLSNkZWZpbmUgUkNRX0JEKHgpCQkJKCh4KSAmIE1BWF9SQ1FfQkQpCi0KLQotLyogVGhpcyBpcyBuZWVkZWQgZm9yIGRldGVybWluaW5nIG9mIGxhc3RfbWF4ICovCi0jZGVmaW5lIFNVQl9TMTYoYSwgYikJCQkoczE2KSgoczE2KShhKSAtIChzMTYpKGIpKQotCi0jZGVmaW5lIF9fU0dFX01BU0tfU0VUX0JJVChlbCwgYml0KSBcCi0JZG8geyBcCi0JCWVsID0gKChlbCkgfCAoKHU2NCkweDEgPDwgKGJpdCkpKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgX19TR0VfTUFTS19DTEVBUl9CSVQoZWwsIGJpdCkgXAotCWRvIHsgXAotCQllbCA9ICgoZWwpICYgKH4oKHU2NCkweDEgPDwgKGJpdCkpKSk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFNHRV9NQVNLX1NFVF9CSVQoZnAsIGlkeCkgXAotCV9fU0dFX01BU0tfU0VUX0JJVChmcC0+c2dlX21hc2tbKGlkeCkgPj4gUlhfU0dFX01BU0tfRUxFTV9TSElGVF0sIFwKLQkJCSAgICgoaWR4KSAmIFJYX1NHRV9NQVNLX0VMRU1fTUFTSykpCi0KLSNkZWZpbmUgU0dFX01BU0tfQ0xFQVJfQklUKGZwLCBpZHgpIFwKLQlfX1NHRV9NQVNLX0NMRUFSX0JJVChmcC0+c2dlX21hc2tbKGlkeCkgPj4gUlhfU0dFX01BU0tfRUxFTV9TSElGVF0sIFwKLQkJCSAgICAgKChpZHgpICYgUlhfU0dFX01BU0tfRUxFTV9NQVNLKSkKLQotCi0vKiB1c2VkIG9uIGEgQ0lEIHJlY2VpdmVkIGZyb20gdGhlIEhXICovCi0jZGVmaW5lIFNXX0NJRCh4KQkJCShsZTMyX3RvX2NwdSh4KSAmIFwKLQkJCQkJIChDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfQ0lEID4+IDcpKQotI2RlZmluZSBDUUVfQ01EKHgpCQkJKGxlMzJfdG9fY3B1KHgpID4+IFwKLQkJCQkJQ09NTU9OX1JBTVJPRF9FVEhfUlhfQ1FFX0NNRF9JRF9TSElGVCkKLQotI2RlZmluZSBCRF9VTk1BUF9BRERSKGJkKQkJSElMT19VNjQobGUzMl90b19jcHUoKGJkKS0+YWRkcl9oaSksIFwKLQkJCQkJCSBsZTMyX3RvX2NwdSgoYmQpLT5hZGRyX2xvKSkKLSNkZWZpbmUgQkRfVU5NQVBfTEVOKGJkKQkJKGxlMTZfdG9fY3B1KChiZCktPm5ieXRlcykpCi0KLQotI2RlZmluZSBEUE1fVFJJR0VSX1RZUEUJCQkweDQwCi0jZGVmaW5lIERPT1JCRUxMKGJwLCBjaWQsIHZhbCkgXAotCWRvIHsgXAotCQl3cml0ZWwoKHUzMikodmFsKSwgYnAtPmRvb3JiZWxscyArIChCQ01fUEFHRV9TSVpFICogKGNpZCkpICsgXAotCQkgICAgICAgRFBNX1RSSUdFUl9UWVBFKTsgXAotCX0gd2hpbGUgKDApCi0KLQotLyogVFggQ1NVTSBoZWxwZXJzICovCi0jZGVmaW5lIFNLQl9DU19PRkYoc2tiKQkJKG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKSAtIFwKLQkJCQkgc2tiLT5jc3VtX29mZnNldCkKLSNkZWZpbmUgU0tCX0NTKHNrYikJCSgqKHUxNiAqKShza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpICsgXAotCQkJCQkgIHNrYi0+Y3N1bV9vZmZzZXQpKQotCi0jZGVmaW5lIHBiZF90Y3BfZmxhZ3Moc2tiKQkobnRvaGwodGNwX2ZsYWdfd29yZCh0Y3BfaGRyKHNrYikpKT4+MTYgJiAweGZmKQotCi0jZGVmaW5lIFhNSVRfUExBSU4JCQkwCi0jZGVmaW5lIFhNSVRfQ1NVTV9WNAkJCTB4MQotI2RlZmluZSBYTUlUX0NTVU1fVjYJCQkweDIKLSNkZWZpbmUgWE1JVF9DU1VNX1RDUAkJCTB4NAotI2RlZmluZSBYTUlUX0dTT19WNAkJCTB4OAotI2RlZmluZSBYTUlUX0dTT19WNgkJCTB4MTAKLQotI2RlZmluZSBYTUlUX0NTVU0JCQkoWE1JVF9DU1VNX1Y0IHwgWE1JVF9DU1VNX1Y2KQotI2RlZmluZSBYTUlUX0dTTwkJCShYTUlUX0dTT19WNCB8IFhNSVRfR1NPX1Y2KQotCi0KLS8qIHN0dWZmIGFkZGVkIHRvIG1ha2UgdGhlIGNvZGUgZml0IDgwQ29sICovCi0KLSNkZWZpbmUgQ1FFX1RZUEUoY3FlX2ZwX2ZsYWdzKQkoKGNxZV9mcF9mbGFncykgJiBFVEhfRkFTVF9QQVRIX1JYX0NRRV9UWVBFKQotCi0jZGVmaW5lIFRQQV9UWVBFX1NUQVJUCQkJRVRIX0ZBU1RfUEFUSF9SWF9DUUVfU1RBUlRfRkxHCi0jZGVmaW5lIFRQQV9UWVBFX0VORAkJCUVUSF9GQVNUX1BBVEhfUlhfQ1FFX0VORF9GTEcKLSNkZWZpbmUgVFBBX1RZUEUoY3FlX2ZwX2ZsYWdzKQkJKChjcWVfZnBfZmxhZ3MpICYgXAotCQkJCQkgKFRQQV9UWVBFX1NUQVJUIHwgVFBBX1RZUEVfRU5EKSkKLQotI2RlZmluZSBFVEhfUlhfRVJST1JfRkFMR1MJCUVUSF9GQVNUX1BBVEhfUlhfQ1FFX1BIWV9ERUNPREVfRVJSX0ZMRwotCi0jZGVmaW5lIEJOWDJYX0lQX0NTVU1fRVJSKGNxZSkgXAotCQkJKCEoKGNxZSktPmZhc3RfcGF0aF9jcWUuc3RhdHVzX2ZsYWdzICYgXAotCQkJICAgRVRIX0ZBU1RfUEFUSF9SWF9DUUVfSVBfWFNVTV9OT19WQUxJREFUSU9OX0ZMRykgJiYgXAotCQkJICgoY3FlKS0+ZmFzdF9wYXRoX2NxZS50eXBlX2Vycm9yX2ZsYWdzICYgXAotCQkJICBFVEhfRkFTVF9QQVRIX1JYX0NRRV9JUF9CQURfWFNVTV9GTEcpKQotCi0jZGVmaW5lIEJOWDJYX0w0X0NTVU1fRVJSKGNxZSkgXAotCQkJKCEoKGNxZSktPmZhc3RfcGF0aF9jcWUuc3RhdHVzX2ZsYWdzICYgXAotCQkJICAgRVRIX0ZBU1RfUEFUSF9SWF9DUUVfTDRfWFNVTV9OT19WQUxJREFUSU9OX0ZMRykgJiYgXAotCQkJICgoY3FlKS0+ZmFzdF9wYXRoX2NxZS50eXBlX2Vycm9yX2ZsYWdzICYgXAotCQkJICBFVEhfRkFTVF9QQVRIX1JYX0NRRV9MNF9CQURfWFNVTV9GTEcpKQotCi0jZGVmaW5lIEJOWDJYX1JYX0NTVU1fT0soY3FlKSBcCi0JCQkoIShCTlgyWF9MNF9DU1VNX0VSUihjcWUpIHx8IEJOWDJYX0lQX0NTVU1fRVJSKGNxZSkpKQotCi0jZGVmaW5lIEJOWDJYX1BSU19GTEFHX09WRVJFVEhfSVBWNChmbGFncykgXAotCQkJCSgoKGxlMTZfdG9fY3B1KGZsYWdzKSAmIFwKLQkJCQkgICBQQVJTSU5HX0ZMQUdTX09WRVJfRVRIRVJORVRfUFJPVE9DT0wpID4+IFwKLQkJCQkgIFBBUlNJTkdfRkxBR1NfT1ZFUl9FVEhFUk5FVF9QUk9UT0NPTF9TSElGVCkgXAotCQkJCSA9PSBQUlNfRkxBR19PVkVSRVRIX0lQVjQpCi0jZGVmaW5lIEJOWDJYX1JYX1NVTV9GSVgoY3FlKSBcCi0JQk5YMlhfUFJTX0ZMQUdfT1ZFUkVUSF9JUFY0KGNxZS0+ZmFzdF9wYXRoX2NxZS5wYXJzX2ZsYWdzLmZsYWdzKQotCi0KLSNkZWZpbmUgRlBfVVNCX0ZVTkNfT0ZGCQkJKDIgKyAyKkhDX1VTVE9STV9TQl9OVU1fSU5ESUNFUykKLSNkZWZpbmUgRlBfQ1NCX0ZVTkNfT0ZGCQkJKDIgKyAyKkhDX0NTVE9STV9TQl9OVU1fSU5ESUNFUykKLQotI2RlZmluZSBVX1NCX0VUSF9SWF9DUV9JTkRFWAkJSENfSU5ERVhfVV9FVEhfUlhfQ1FfQ09OUwotI2RlZmluZSBVX1NCX0VUSF9SWF9CRF9JTkRFWAkJSENfSU5ERVhfVV9FVEhfUlhfQkRfQ09OUwotI2RlZmluZSBDX1NCX0VUSF9UWF9DUV9JTkRFWAkJSENfSU5ERVhfQ19FVEhfVFhfQ1FfQ09OUwotCi0jZGVmaW5lIEJOWDJYX1JYX1NCX0lOREVYIFwKLQkoJmZwLT5zdGF0dXNfYmxrLT51X3N0YXR1c19ibG9jay5pbmRleF92YWx1ZXNbVV9TQl9FVEhfUlhfQ1FfSU5ERVhdKQotCi0jZGVmaW5lIEJOWDJYX1JYX1NCX0JEX0lOREVYIFwKLQkoJmZwLT5zdGF0dXNfYmxrLT51X3N0YXR1c19ibG9jay5pbmRleF92YWx1ZXNbVV9TQl9FVEhfUlhfQkRfSU5ERVhdKQotCi0jZGVmaW5lIEJOWDJYX1JYX1NCX0lOREVYX05VTSBcCi0JCSgoKFVfU0JfRVRIX1JYX0NRX0lOREVYIDw8IFwKLQkJICAgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19DUUVfU0JfSU5ERVhfTlVNQkVSX1NISUZUKSAmIFwKLQkJICBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0NRRV9TQl9JTkRFWF9OVU1CRVIpIHwgXAotCQkgKChVX1NCX0VUSF9SWF9CRF9JTkRFWCA8PCBcCi0JCSAgIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfQkRfU0JfSU5ERVhfTlVNQkVSX1NISUZUKSAmIFwKLQkJICBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0JEX1NCX0lOREVYX05VTUJFUikpCi0KLSNkZWZpbmUgQk5YMlhfVFhfU0JfSU5ERVggXAotCSgmZnAtPnN0YXR1c19ibGstPmNfc3RhdHVzX2Jsb2NrLmluZGV4X3ZhbHVlc1tDX1NCX0VUSF9UWF9DUV9JTkRFWF0pCi0KLQotLyogZW5kIG9mIGZhc3QgcGF0aCAqLwotCi0vKiBjb21tb24gKi8KLQotc3RydWN0IGJueDJ4X2NvbW1vbiB7Ci0KLQl1MzIJCQljaGlwX2lkOwotLyogY2hpcCBudW06MTYtMzEsIHJldjoxMi0xNSwgbWV0YWw6NC0xMSwgYm9uZF9pZDowLTMgKi8KLSNkZWZpbmUgQ0hJUF9JRChicCkJCQkoYnAtPmNvbW1vbi5jaGlwX2lkICYgMHhmZmZmZmZmMCkKLQotI2RlZmluZSBDSElQX05VTShicCkJCQkoYnAtPmNvbW1vbi5jaGlwX2lkID4+IDE2KQotI2RlZmluZSBDSElQX05VTV81NzcxMAkJCTB4MTY0ZQotI2RlZmluZSBDSElQX05VTV81NzcxMQkJCTB4MTY0ZgotI2RlZmluZSBDSElQX05VTV81NzcxMUUJCQkweDE2NTAKLSNkZWZpbmUgQ0hJUF9JU19FMShicCkJCQkoQ0hJUF9OVU0oYnApID09IENISVBfTlVNXzU3NzEwKQotI2RlZmluZSBDSElQX0lTXzU3NzExKGJwKQkJKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzcxMSkKLSNkZWZpbmUgQ0hJUF9JU181NzcxMUUoYnApCQkoQ0hJUF9OVU0oYnApID09IENISVBfTlVNXzU3NzExRSkKLSNkZWZpbmUgQ0hJUF9JU19FMUgoYnApCQkJKENISVBfSVNfNTc3MTEoYnApIHx8IFwKLQkJCQkJIENISVBfSVNfNTc3MTFFKGJwKSkKLSNkZWZpbmUgSVNfRTFIX09GRlNFVAkJCUNISVBfSVNfRTFIKGJwKQotCi0jZGVmaW5lIENISVBfUkVWKGJwKQkJCShicC0+Y29tbW9uLmNoaXBfaWQgJiAweDAwMDBmMDAwKQotI2RlZmluZSBDSElQX1JFVl9BeAkJCTB4MDAwMDAwMDAKLS8qIGFzc3VtZSBtYXhpbXVtIDUgcmV2aXNpb25zICovCi0jZGVmaW5lIENISVBfUkVWX0lTX1NMT1coYnApCQkoQ0hJUF9SRVYoYnApID4gMHgwMDAwNTAwMCkKLS8qIEVtdWwgdmVyc2lvbnMgYXJlIEE9PjB4ZSwgQj0+MHhjLCBDPT4weGEsIEQ9PjgsIEU9PjYgKi8KLSNkZWZpbmUgQ0hJUF9SRVZfSVNfRU1VTChicCkJCSgoQ0hJUF9SRVZfSVNfU0xPVyhicCkpICYmIFwKLQkJCQkJICEoQ0hJUF9SRVYoYnApICYgMHgwMDAwMTAwMCkpCi0vKiBGUEdBIHZlcnNpb25zIGFyZSBBPT4weGYsIEI9PjB4ZCwgQz0+MHhiLCBEPT45LCBFPT43ICovCi0jZGVmaW5lIENISVBfUkVWX0lTX0ZQR0EoYnApCQkoKENISVBfUkVWX0lTX1NMT1coYnApKSAmJiBcCi0JCQkJCSAoQ0hJUF9SRVYoYnApICYgMHgwMDAwMTAwMCkpCi0KLSNkZWZpbmUgQ0hJUF9USU1FKGJwKQkJCSgoQ0hJUF9SRVZfSVNfRU1VTChicCkpID8gMjAwMCA6IFwKLQkJCQkJKChDSElQX1JFVl9JU19GUEdBKGJwKSkgPyAyMDAgOiAxKSkKLQotI2RlZmluZSBDSElQX01FVEFMKGJwKQkJCShicC0+Y29tbW9uLmNoaXBfaWQgJiAweDAwMDAwZmYwKQotI2RlZmluZSBDSElQX0JPTkRfSUQoYnApCQkoYnAtPmNvbW1vbi5jaGlwX2lkICYgMHgwMDAwMDAwZikKLQotCWludAkJCWZsYXNoX3NpemU7Ci0jZGVmaW5lIE5WUkFNXzFNQl9TSVpFCQkJMHgyMDAwMAkvKiAxTSBiaXQgaW4gYnl0ZXMgKi8KLSNkZWZpbmUgTlZSQU1fVElNRU9VVF9DT1VOVAkJMzAwMDAKLSNkZWZpbmUgTlZSQU1fUEFHRV9TSVpFCQkJMjU2Ci0KLQl1MzIJCQlzaG1lbV9iYXNlOwotCXUzMgkJCXNobWVtMl9iYXNlOwotCi0JdTMyCQkJaHdfY29uZmlnOwotCi0JdTMyCQkJYmNfdmVyOwotfTsKLQotCi0vKiBlbmQgb2YgY29tbW9uICovCi0KLS8qIHBvcnQgKi8KLQotc3RydWN0IG5pZ19zdGF0cyB7Ci0JdTMyIGJyYl9kaXNjYXJkOwotCXUzMiBicmJfcGFja2V0OwotCXUzMiBicmJfdHJ1bmNhdGU7Ci0JdTMyIGZsb3dfY3RybF9kaXNjYXJkOwotCXUzMiBmbG93X2N0cmxfb2N0ZXRzOwotCXUzMiBmbG93X2N0cmxfcGFja2V0OwotCXUzMiBtbmdfZGlzY2FyZDsKLQl1MzIgbW5nX29jdGV0X2lucDsKLQl1MzIgbW5nX29jdGV0X291dDsKLQl1MzIgbW5nX3BhY2tldF9pbnA7Ci0JdTMyIG1uZ19wYWNrZXRfb3V0OwotCXUzMiBwYmZfb2N0ZXRzOwotCXUzMiBwYmZfcGFja2V0OwotCXUzMiBzYWZjX2lucDsKLQl1MzIgZWdyZXNzX21hY19wa3QwX2xvOwotCXUzMiBlZ3Jlc3NfbWFjX3BrdDBfaGk7Ci0JdTMyIGVncmVzc19tYWNfcGt0MV9sbzsKLQl1MzIgZWdyZXNzX21hY19wa3QxX2hpOwotfTsKLQotc3RydWN0IGJueDJ4X3BvcnQgewotCXUzMgkJCXBtZjsKLQotCXUzMgkJCWxpbmtfY29uZmlnOwotCi0JdTMyCQkJc3VwcG9ydGVkOwotLyogbGluayBzZXR0aW5ncyAtIG1pc3NpbmcgZGVmaW5lcyAqLwotI2RlZmluZSBTVVBQT1JURURfMjUwMGJhc2VYX0Z1bGwJKDEgPDwgMTUpCi0KLQl1MzIJCQlhZHZlcnRpc2luZzsKLS8qIGxpbmsgc2V0dGluZ3MgLSBtaXNzaW5nIGRlZmluZXMgKi8KLSNkZWZpbmUgQURWRVJUSVNFRF8yNTAwYmFzZVhfRnVsbAkoMSA8PCAxNSkKLQotCXUzMgkJCXBoeV9hZGRyOwotCi0JLyogdXNlZCB0byBzeW5jaHJvbml6ZSBwaHkgYWNjZXNzZXMgKi8KLQlzdHJ1Y3QgbXV0ZXgJCXBoeV9tdXRleDsKLQlpbnQJCQluZWVkX2h3X2xvY2s7Ci0KLQl1MzIJCQlwb3J0X3N0eDsKLQotCXN0cnVjdCBuaWdfc3RhdHMJb2xkX25pZ19zdGF0czsKLX07Ci0KLS8qIGVuZCBvZiBwb3J0ICovCi0KLQotZW51bSBibngyeF9zdGF0c19ldmVudCB7Ci0JU1RBVFNfRVZFTlRfUE1GID0gMCwKLQlTVEFUU19FVkVOVF9MSU5LX1VQLAotCVNUQVRTX0VWRU5UX1VQREFURSwKLQlTVEFUU19FVkVOVF9TVE9QLAotCVNUQVRTX0VWRU5UX01BWAotfTsKLQotZW51bSBibngyeF9zdGF0c19zdGF0ZSB7Ci0JU1RBVFNfU1RBVEVfRElTQUJMRUQgPSAwLAotCVNUQVRTX1NUQVRFX0VOQUJMRUQsCi0JU1RBVFNfU1RBVEVfTUFYCi19OwotCi1zdHJ1Y3QgYm54MnhfZXRoX3N0YXRzIHsKLQl1MzIgdG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGk7Ci0JdTMyIHRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvOwotCXUzMiB0b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaTsKLQl1MzIgdG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfbG87Ci0JdTMyIHRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaTsKLQl1MzIgdG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2xvOwotCXUzMiB0b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaTsKLQl1MzIgdG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG87Ci0JdTMyIHRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpOwotCXUzMiB0b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZF9sbzsKLQl1MzIgdG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpOwotCXUzMiB0b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG87Ci0JdTMyIHRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpOwotCXUzMiB0b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbzsKLQl1MzIgdG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGk7Ci0JdTMyIHRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2xvOwotCXUzMiB2YWxpZF9ieXRlc19yZWNlaXZlZF9oaTsKLQl1MzIgdmFsaWRfYnl0ZXNfcmVjZWl2ZWRfbG87Ci0KLQl1MzIgZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGk7Ci0JdTMyIGVycm9yX2J5dGVzX3JlY2VpdmVkX2xvOwotCXUzMiBldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19oaTsKLQl1MzIgZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfbG87Ci0JdTMyIG5vX2J1ZmZfZGlzY2FyZF9oaTsKLQl1MzIgbm9fYnVmZl9kaXNjYXJkX2xvOwotCi0JdTMyIHJ4X3N0YXRfaWZoY2luYmFkb2N0ZXRzX2hpOwotCXUzMiByeF9zdGF0X2lmaGNpbmJhZG9jdGV0c19sbzsKLQl1MzIgdHhfc3RhdF9pZmhjb3V0YmFkb2N0ZXRzX2hpOwotCXUzMiB0eF9zdGF0X2lmaGNvdXRiYWRvY3RldHNfbG87Ci0JdTMyIHJ4X3N0YXRfZG90M3N0YXRzZmNzZXJyb3JzX2hpOwotCXUzMiByeF9zdGF0X2RvdDNzdGF0c2Zjc2Vycm9yc19sbzsKLQl1MzIgcnhfc3RhdF9kb3Qzc3RhdHNhbGlnbm1lbnRlcnJvcnNfaGk7Ci0JdTMyIHJ4X3N0YXRfZG90M3N0YXRzYWxpZ25tZW50ZXJyb3JzX2xvOwotCXUzMiByeF9zdGF0X2RvdDNzdGF0c2NhcnJpZXJzZW5zZWVycm9yc19oaTsKLQl1MzIgcnhfc3RhdF9kb3Qzc3RhdHNjYXJyaWVyc2Vuc2VlcnJvcnNfbG87Ci0JdTMyIHJ4X3N0YXRfZmFsc2VjYXJyaWVyZXJyb3JzX2hpOwotCXUzMiByeF9zdGF0X2ZhbHNlY2FycmllcmVycm9yc19sbzsKLQl1MzIgcnhfc3RhdF9ldGhlcnN0YXRzdW5kZXJzaXplcGt0c19oaTsKLQl1MzIgcnhfc3RhdF9ldGhlcnN0YXRzdW5kZXJzaXplcGt0c19sbzsKLQl1MzIgcnhfc3RhdF9kb3Qzc3RhdHNmcmFtZXN0b29sb25nX2hpOwotCXUzMiByeF9zdGF0X2RvdDNzdGF0c2ZyYW1lc3Rvb2xvbmdfbG87Ci0JdTMyIHJ4X3N0YXRfZXRoZXJzdGF0c2ZyYWdtZW50c19oaTsKLQl1MzIgcnhfc3RhdF9ldGhlcnN0YXRzZnJhZ21lbnRzX2xvOwotCXUzMiByeF9zdGF0X2V0aGVyc3RhdHNqYWJiZXJzX2hpOwotCXUzMiByeF9zdGF0X2V0aGVyc3RhdHNqYWJiZXJzX2xvOwotCXUzMiByeF9zdGF0X21hY2NvbnRyb2xmcmFtZXNyZWNlaXZlZF9oaTsKLQl1MzIgcnhfc3RhdF9tYWNjb250cm9sZnJhbWVzcmVjZWl2ZWRfbG87Ci0JdTMyIHJ4X3N0YXRfYm1hY194cGZfaGk7Ci0JdTMyIHJ4X3N0YXRfYm1hY194cGZfbG87Ci0JdTMyIHJ4X3N0YXRfYm1hY194Y2ZfaGk7Ci0JdTMyIHJ4X3N0YXRfYm1hY194Y2ZfbG87Ci0JdTMyIHJ4X3N0YXRfeG9mZnN0YXRlZW50ZXJlZF9oaTsKLQl1MzIgcnhfc3RhdF94b2Zmc3RhdGVlbnRlcmVkX2xvOwotCXUzMiByeF9zdGF0X3hvbnBhdXNlZnJhbWVzcmVjZWl2ZWRfaGk7Ci0JdTMyIHJ4X3N0YXRfeG9ucGF1c2VmcmFtZXNyZWNlaXZlZF9sbzsKLQl1MzIgcnhfc3RhdF94b2ZmcGF1c2VmcmFtZXNyZWNlaXZlZF9oaTsKLQl1MzIgcnhfc3RhdF94b2ZmcGF1c2VmcmFtZXNyZWNlaXZlZF9sbzsKLQl1MzIgdHhfc3RhdF9vdXR4b25zZW50X2hpOwotCXUzMiB0eF9zdGF0X291dHhvbnNlbnRfbG87Ci0JdTMyIHR4X3N0YXRfb3V0eG9mZnNlbnRfaGk7Ci0JdTMyIHR4X3N0YXRfb3V0eG9mZnNlbnRfbG87Ci0JdTMyIHR4X3N0YXRfZmxvd2NvbnRyb2xkb25lX2hpOwotCXUzMiB0eF9zdGF0X2Zsb3djb250cm9sZG9uZV9sbzsKLQl1MzIgdHhfc3RhdF9ldGhlcnN0YXRzY29sbGlzaW9uc19oaTsKLQl1MzIgdHhfc3RhdF9ldGhlcnN0YXRzY29sbGlzaW9uc19sbzsKLQl1MzIgdHhfc3RhdF9kb3Qzc3RhdHNzaW5nbGVjb2xsaXNpb25mcmFtZXNfaGk7Ci0JdTMyIHR4X3N0YXRfZG90M3N0YXRzc2luZ2xlY29sbGlzaW9uZnJhbWVzX2xvOwotCXUzMiB0eF9zdGF0X2RvdDNzdGF0c211bHRpcGxlY29sbGlzaW9uZnJhbWVzX2hpOwotCXUzMiB0eF9zdGF0X2RvdDNzdGF0c211bHRpcGxlY29sbGlzaW9uZnJhbWVzX2xvOwotCXUzMiB0eF9zdGF0X2RvdDNzdGF0c2RlZmVycmVkdHJhbnNtaXNzaW9uc19oaTsKLQl1MzIgdHhfc3RhdF9kb3Qzc3RhdHNkZWZlcnJlZHRyYW5zbWlzc2lvbnNfbG87Ci0JdTMyIHR4X3N0YXRfZG90M3N0YXRzZXhjZXNzaXZlY29sbGlzaW9uc19oaTsKLQl1MzIgdHhfc3RhdF9kb3Qzc3RhdHNleGNlc3NpdmVjb2xsaXNpb25zX2xvOwotCXUzMiB0eF9zdGF0X2RvdDNzdGF0c2xhdGVjb2xsaXNpb25zX2hpOwotCXUzMiB0eF9zdGF0X2RvdDNzdGF0c2xhdGVjb2xsaXNpb25zX2xvOwotCXUzMiB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNjRvY3RldHNfaGk7Ci0JdTMyIHR4X3N0YXRfZXRoZXJzdGF0c3BrdHM2NG9jdGV0c19sbzsKLQl1MzIgdHhfc3RhdF9ldGhlcnN0YXRzcGt0czY1b2N0ZXRzdG8xMjdvY3RldHNfaGk7Ci0JdTMyIHR4X3N0YXRfZXRoZXJzdGF0c3BrdHM2NW9jdGV0c3RvMTI3b2N0ZXRzX2xvOwotCXUzMiB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzMTI4b2N0ZXRzdG8yNTVvY3RldHNfaGk7Ci0JdTMyIHR4X3N0YXRfZXRoZXJzdGF0c3BrdHMxMjhvY3RldHN0bzI1NW9jdGV0c19sbzsKLQl1MzIgdHhfc3RhdF9ldGhlcnN0YXRzcGt0czI1Nm9jdGV0c3RvNTExb2N0ZXRzX2hpOwotCXUzMiB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzMjU2b2N0ZXRzdG81MTFvY3RldHNfbG87Ci0JdTMyIHR4X3N0YXRfZXRoZXJzdGF0c3BrdHM1MTJvY3RldHN0bzEwMjNvY3RldHNfaGk7Ci0JdTMyIHR4X3N0YXRfZXRoZXJzdGF0c3BrdHM1MTJvY3RldHN0bzEwMjNvY3RldHNfbG87Ci0JdTMyIHR4X3N0YXRfZXRoZXJzdGF0c3BrdHMxMDI0b2N0ZXRzdG8xNTIyb2N0ZXRzX2hpOwotCXUzMiB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzMTAyNG9jdGV0c3RvMTUyMm9jdGV0c19sbzsKLQl1MzIgdHhfc3RhdF9ldGhlcnN0YXRzcGt0c292ZXIxNTIyb2N0ZXRzX2hpOwotCXUzMiB0eF9zdGF0X2V0aGVyc3RhdHNwa3Rzb3ZlcjE1MjJvY3RldHNfbG87Ci0JdTMyIHR4X3N0YXRfYm1hY18yMDQ3X2hpOwotCXUzMiB0eF9zdGF0X2JtYWNfMjA0N19sbzsKLQl1MzIgdHhfc3RhdF9ibWFjXzQwOTVfaGk7Ci0JdTMyIHR4X3N0YXRfYm1hY180MDk1X2xvOwotCXUzMiB0eF9zdGF0X2JtYWNfOTIxNl9oaTsKLQl1MzIgdHhfc3RhdF9ibWFjXzkyMTZfbG87Ci0JdTMyIHR4X3N0YXRfYm1hY18xNjM4M19oaTsKLQl1MzIgdHhfc3RhdF9ibWFjXzE2MzgzX2xvOwotCXUzMiB0eF9zdGF0X2RvdDNzdGF0c2ludGVybmFsbWFjdHJhbnNtaXRlcnJvcnNfaGk7Ci0JdTMyIHR4X3N0YXRfZG90M3N0YXRzaW50ZXJuYWxtYWN0cmFuc21pdGVycm9yc19sbzsKLQl1MzIgdHhfc3RhdF9ibWFjX3VmbF9oaTsKLQl1MzIgdHhfc3RhdF9ibWFjX3VmbF9sbzsKLQotCXUzMiBwYXVzZV9mcmFtZXNfcmVjZWl2ZWRfaGk7Ci0JdTMyIHBhdXNlX2ZyYW1lc19yZWNlaXZlZF9sbzsKLQl1MzIgcGF1c2VfZnJhbWVzX3NlbnRfaGk7Ci0JdTMyIHBhdXNlX2ZyYW1lc19zZW50X2xvOwotCi0JdTMyIGV0aGVyc3RhdHNwa3RzMTAyNG9jdGV0c3RvMTUyMm9jdGV0c19oaTsKLQl1MzIgZXRoZXJzdGF0c3BrdHMxMDI0b2N0ZXRzdG8xNTIyb2N0ZXRzX2xvOwotCXUzMiBldGhlcnN0YXRzcGt0c292ZXIxNTIyb2N0ZXRzX2hpOwotCXUzMiBldGhlcnN0YXRzcGt0c292ZXIxNTIyb2N0ZXRzX2xvOwotCi0JdTMyIGJyYl9kcm9wX2hpOwotCXUzMiBicmJfZHJvcF9sbzsKLQl1MzIgYnJiX3RydW5jYXRlX2hpOwotCXUzMiBicmJfdHJ1bmNhdGVfbG87Ci0KLQl1MzIgbWFjX2ZpbHRlcl9kaXNjYXJkOwotCXUzMiB4eG92ZXJmbG93X2Rpc2NhcmQ7Ci0JdTMyIGJyYl90cnVuY2F0ZV9kaXNjYXJkOwotCXUzMiBtYWNfZGlzY2FyZDsKLQotCXUzMiBkcml2ZXJfeG9mZjsKLQl1MzIgcnhfZXJyX2Rpc2NhcmRfcGt0OwotCXUzMiByeF9za2JfYWxsb2NfZmFpbGVkOwotCXUzMiBod19jc3VtX2VycjsKLQotCXUzMiBuaWdfdGltZXJfbWF4OwotfTsKLQotI2RlZmluZSBCTlgyWF9OVU1fU1RBVFMJCQk0MwotI2RlZmluZSBTVEFUU19PRkZTRVQzMihzdGF0X25hbWUpIFwKLQkJCShvZmZzZXRvZihzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzLCBzdGF0X25hbWUpIC8gNCkKLQotCi0jaWZkZWYgQkNNX0NOSUMKLSNkZWZpbmUgTUFYX0NPTlRFWFQJCQkxNQotI2Vsc2UKLSNkZWZpbmUgTUFYX0NPTlRFWFQJCQkxNgotI2VuZGlmCi0KLXVuaW9uIGNkdV9jb250ZXh0IHsKLQlzdHJ1Y3QgZXRoX2NvbnRleHQgZXRoOwotCWNoYXIgcGFkWzEwMjRdOwotfTsKLQotI2RlZmluZSBNQVhfRE1BRV9DCQkJOAotCi0vKiBETUEgbWVtb3J5IG5vdCB1c2VkIGluIGZhc3RwYXRoICovCi1zdHJ1Y3QgYm54Mnhfc2xvd3BhdGggewotCXVuaW9uIGNkdV9jb250ZXh0CQljb250ZXh0W01BWF9DT05URVhUXTsKLQlzdHJ1Y3QgZXRoX3N0YXRzX3F1ZXJ5CQlmd19zdGF0czsKLQlzdHJ1Y3QgbWFjX2NvbmZpZ3VyYXRpb25fY21kCW1hY19jb25maWc7Ci0Jc3RydWN0IG1hY19jb25maWd1cmF0aW9uX2NtZAltY2FzdF9jb25maWc7Ci0KLQkvKiB1c2VkIGJ5IGRtYWUgY29tbWFuZCBleGVjdXRlciAqLwotCXN0cnVjdCBkbWFlX2NvbW1hbmQJCWRtYWVbTUFYX0RNQUVfQ107Ci0KLQl1MzIJCQkJc3RhdHNfY29tcDsKLQl1bmlvbiBtYWNfc3RhdHMJCQltYWNfc3RhdHM7Ci0Jc3RydWN0IG5pZ19zdGF0cwkJbmlnX3N0YXRzOwotCXN0cnVjdCBob3N0X3BvcnRfc3RhdHMJCXBvcnRfc3RhdHM7Ci0Jc3RydWN0IGhvc3RfZnVuY19zdGF0cwkJZnVuY19zdGF0czsKLQlzdHJ1Y3QgaG9zdF9mdW5jX3N0YXRzCQlmdW5jX3N0YXRzX2Jhc2U7Ci0KLQl1MzIJCQkJd2JfY29tcDsKLQl1MzIJCQkJd2JfZGF0YVs0XTsKLX07Ci0KLSNkZWZpbmUgYm54Mnhfc3AoYnAsIHZhcikJCSgmYnAtPnNsb3dwYXRoLT52YXIpCi0jZGVmaW5lIGJueDJ4X3NwX21hcHBpbmcoYnAsIHZhcikgXAotCQkoYnAtPnNsb3dwYXRoX21hcHBpbmcgKyBvZmZzZXRvZihzdHJ1Y3QgYm54Mnhfc2xvd3BhdGgsIHZhcikpCi0KLQotLyogYXR0biBncm91cCB3aXJpbmcgKi8KLSNkZWZpbmUgTUFYX0RZTkFNSUNfQVRUTl9HUlBTCQk4Ci0KLXN0cnVjdCBhdHRuX3JvdXRlIHsKLQl1MzIJc2lnWzRdOwotfTsKLQotdHlwZWRlZiBlbnVtIHsKLQlCTlgyWF9SRUNPVkVSWV9ET05FLAotCUJOWDJYX1JFQ09WRVJZX0lOSVQsCi0JQk5YMlhfUkVDT1ZFUllfV0FJVCwKLX0gYm54MnhfcmVjb3Zlcnlfc3RhdGVfdDsKLQotc3RydWN0IGJueDJ4IHsKLQkvKiBGaWVsZHMgdXNlZCBpbiB0aGUgdHggYW5kIGludHIvbmFwaSBwZXJmb3JtYW5jZSBwYXRocwotCSAqIGFyZSBncm91cGVkIHRvZ2V0aGVyIGluIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cnVjdHVyZQotCSAqLwotCXN0cnVjdCBibngyeF9mYXN0cGF0aAlmcFtNQVhfQ09OVEVYVF07Ci0Jdm9pZCBfX2lvbWVtCQkqcmVndmlldzsKLQl2b2lkIF9faW9tZW0JCSpkb29yYmVsbHM7Ci0jaWZkZWYgQkNNX0NOSUMKLSNkZWZpbmUgQk5YMlhfREJfU0laRQkJKDE4KkJDTV9QQUdFX1NJWkUpCi0jZWxzZQotI2RlZmluZSBCTlgyWF9EQl9TSVpFCQkoMTYqQkNNX1BBR0VfU0laRSkKLSNlbmRpZgotCi0Jc3RydWN0IG5ldF9kZXZpY2UJKmRldjsKLQlzdHJ1Y3QgcGNpX2RldgkJKnBkZXY7Ci0KLQlhdG9taWNfdAkJaW50cl9zZW07Ci0KLQlibngyeF9yZWNvdmVyeV9zdGF0ZV90CXJlY292ZXJ5X3N0YXRlOwotCWludAkJCWlzX2xlYWRlcjsKLSNpZmRlZiBCQ01fQ05JQwotCXN0cnVjdCBtc2l4X2VudHJ5CW1zaXhfdGFibGVbTUFYX0NPTlRFWFQrMl07Ci0jZWxzZQotCXN0cnVjdCBtc2l4X2VudHJ5CW1zaXhfdGFibGVbTUFYX0NPTlRFWFQrMV07Ci0jZW5kaWYKLSNkZWZpbmUgSU5UX01PREVfSU5UeAkJCTEKLSNkZWZpbmUgSU5UX01PREVfTVNJCQkJMgotCi0JaW50CQkJdHhfcmluZ19zaXplOwotCi0jaWZkZWYgQkNNX1ZMQU4KLQlzdHJ1Y3Qgdmxhbl9ncm91cAkqdmxncnA7Ci0jZW5kaWYKLQotCXUzMgkJCXJ4X2NzdW07Ci0JdTMyCQkJcnhfYnVmX3NpemU7Ci0jZGVmaW5lIEVUSF9PVlJFSEVBRAkJCShFVEhfSExFTiArIDgpCS8qIDggZm9yIENSQyArIFZMQU4gKi8KLSNkZWZpbmUgRVRIX01JTl9QQUNLRVRfU0laRQkJNjAKLSNkZWZpbmUgRVRIX01BWF9QQUNLRVRfU0laRQkJMTUwMAotI2RlZmluZSBFVEhfTUFYX0pVTUJPX1BBQ0tFVF9TSVpFCTk2MDAKLQotCS8qIE1heCBzdXBwb3J0ZWQgYWxpZ25tZW50IGlzIDI1NiAoOCBzaGlmdCkgKi8KLSNkZWZpbmUgQk5YMlhfUlhfQUxJR05fU0hJRlQJCSgoTDFfQ0FDSEVfU0hJRlQgPCA4KSA/IFwKLQkJCQkJIEwxX0NBQ0hFX1NISUZUIDogOCkKLSNkZWZpbmUgQk5YMlhfUlhfQUxJR04JCQkoMSA8PCBCTlgyWF9SWF9BTElHTl9TSElGVCkKLQotCXN0cnVjdCBob3N0X2RlZl9zdGF0dXNfYmxvY2sgKmRlZl9zdGF0dXNfYmxrOwotI2RlZmluZSBERUZfU0JfSUQJCQkxNgotCV9fbGUxNgkJCWRlZl9jX2lkeDsKLQlfX2xlMTYJCQlkZWZfdV9pZHg7Ci0JX19sZTE2CQkJZGVmX3hfaWR4OwotCV9fbGUxNgkJCWRlZl90X2lkeDsKLQlfX2xlMTYJCQlkZWZfYXR0X2lkeDsKLQl1MzIJCQlhdHRuX3N0YXRlOwotCXN0cnVjdCBhdHRuX3JvdXRlCWF0dG5fZ3JvdXBbTUFYX0RZTkFNSUNfQVRUTl9HUlBTXTsKLQotCS8qIHNsb3cgcGF0aCByaW5nICovCi0Jc3RydWN0IGV0aF9zcGUJCSpzcHE7Ci0JZG1hX2FkZHJfdAkJc3BxX21hcHBpbmc7Ci0JdTE2CQkJc3BxX3Byb2RfaWR4OwotCXN0cnVjdCBldGhfc3BlCQkqc3BxX3Byb2RfYmQ7Ci0Jc3RydWN0IGV0aF9zcGUJCSpzcHFfbGFzdF9iZDsKLQlfX2xlMTYJCQkqZHNiX3NwX3Byb2Q7Ci0JdTE2CQkJc3BxX2xlZnQ7IC8qIHNlcmlhbGl6ZSBzcHEgKi8KLQkvKiB1c2VkIHRvIHN5bmNocm9uaXplIHNwcSBhY2Nlc3NlcyAqLwotCXNwaW5sb2NrX3QJCXNwcV9sb2NrOwotCi0JLyogRmxhZ3MgZm9yIG1hcmtpbmcgdGhhdCB0aGVyZSBpcyBhIFNUQVRfUVVFUlkgb3IKLQkgICBTRVRfTUFDIHJhbXJvZCBwZW5kaW5nICovCi0JaW50CQkJc3RhdHNfcGVuZGluZzsKLQlpbnQJCQlzZXRfbWFjX3BlbmRpbmc7Ci0KLQkvKiBFbmQgb2YgZmllbGRzIHVzZWQgaW4gdGhlIHBlcmZvcm1hbmNlIGNvZGUgcGF0aHMgKi8KLQotCWludAkJCXBhbmljOwotCWludAkJCW1zZ19lbmFibGU7Ci0KLQl1MzIJCQlmbGFnczsKLSNkZWZpbmUgUENJWF9GTEFHCQkJMQotI2RlZmluZSBQQ0lfMzJCSVRfRkxBRwkJCTIKLSNkZWZpbmUgT05FX1BPUlRfRkxBRwkJCTQKLSNkZWZpbmUgTk9fV09MX0ZMQUcJCQk4Ci0jZGVmaW5lIFVTSU5HX0RBQ19GTEFHCQkJMHgxMAotI2RlZmluZSBVU0lOR19NU0lYX0ZMQUcJCQkweDIwCi0jZGVmaW5lIFVTSU5HX01TSV9GTEFHCQkJMHg0MAotI2RlZmluZSBUUEFfRU5BQkxFX0ZMQUcJCQkweDgwCi0jZGVmaW5lIE5PX01DUF9GTEFHCQkJMHgxMDAKLSNkZWZpbmUgQlBfTk9NQ1AoYnApCQkJKGJwLT5mbGFncyAmIE5PX01DUF9GTEFHKQotI2RlZmluZSBIV19WTEFOX1RYX0ZMQUcJCQkweDQwMAotI2RlZmluZSBIV19WTEFOX1JYX0ZMQUcJCQkweDgwMAotI2RlZmluZSBNRl9GVU5DX0RJUwkJCTB4MTAwMAotCi0JaW50CQkJZnVuYzsKLSNkZWZpbmUgQlBfUE9SVChicCkJCQkoYnAtPmZ1bmMgJSBQT1JUX01BWCkKLSNkZWZpbmUgQlBfRlVOQyhicCkJCQkoYnAtPmZ1bmMpCi0jZGVmaW5lIEJQX0UxSFZOKGJwKQkJCShicC0+ZnVuYyA+PiAxKQotI2RlZmluZSBCUF9MX0lEKGJwKQkJCShCUF9FMUhWTihicCkgPDwgMikKLQotI2lmZGVmIEJDTV9DTklDCi0jZGVmaW5lIEJDTV9DTklDX0NJRF9TVEFSVAkJMTYKLSNkZWZpbmUgQkNNX0lTQ1NJX0VUSF9DTF9JRAkJMTcKLSNlbmRpZgotCi0JaW50CQkJcG1fY2FwOwotCWludAkJCXBjaWVfY2FwOwotCWludAkJCW1ycnM7Ci0KLQlzdHJ1Y3QgZGVsYXllZF93b3JrCXNwX3Rhc2s7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yawlyZXNldF90YXNrOwotCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOwotCWludAkJCWN1cnJlbnRfaW50ZXJ2YWw7Ci0KLQl1MTYJCQlmd19zZXE7Ci0JdTE2CQkJZndfZHJ2X3B1bHNlX3dyX3NlcTsKLQl1MzIJCQlmdW5jX3N0eDsKLQotCXN0cnVjdCBsaW5rX3BhcmFtcwlsaW5rX3BhcmFtczsKLQlzdHJ1Y3QgbGlua192YXJzCWxpbmtfdmFyczsKLQlzdHJ1Y3QgbWRpb19pZl9pbmZvCW1kaW87Ci0KLQlzdHJ1Y3QgYm54MnhfY29tbW9uCWNvbW1vbjsKLQlzdHJ1Y3QgYm54MnhfcG9ydAlwb3J0OwotCi0Jc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0IGNtbmc7Ci0JdTMyCQkJdm5fd2VpZ2h0X3N1bTsKLQotCXUzMgkJCW1mX2NvbmZpZzsKLQl1MTYJCQllMWhvdjsKLQl1OAkJCWUxaG1mOwotI2RlZmluZSBJU19FMUhNRihicCkJCQkoYnAtPmUxaG1mICE9IDApCi0KLQl1OAkJCXdvbDsKLQotCWludAkJCXJ4X3Jpbmdfc2l6ZTsKLQotCXUxNgkJCXR4X3F1aWNrX2NvbnNfdHJpcF9pbnQ7Ci0JdTE2CQkJdHhfcXVpY2tfY29uc190cmlwOwotCXUxNgkJCXR4X3RpY2tzX2ludDsKLQl1MTYJCQl0eF90aWNrczsKLQotCXUxNgkJCXJ4X3F1aWNrX2NvbnNfdHJpcF9pbnQ7Ci0JdTE2CQkJcnhfcXVpY2tfY29uc190cmlwOwotCXUxNgkJCXJ4X3RpY2tzX2ludDsKLQl1MTYJCQlyeF90aWNrczsKLS8qIE1heGltYWwgY29hbGVzY2luZyB0aW1lb3V0IGluIHVzICovCi0jZGVmaW5lIEJOWDJYX01BWF9DT0FMRVNDRV9UT1VUCQkoMHhmMCoxMikKLQotCXUzMgkJCWxpbl9jbnQ7Ci0KLQlpbnQJCQlzdGF0ZTsKLSNkZWZpbmUgQk5YMlhfU1RBVEVfQ0xPU0VECQkwCi0jZGVmaW5lIEJOWDJYX1NUQVRFX09QRU5JTkdfV0FJVDRfTE9BRAkweDEwMDAKLSNkZWZpbmUgQk5YMlhfU1RBVEVfT1BFTklOR19XQUlUNF9QT1JUCTB4MjAwMAotI2RlZmluZSBCTlgyWF9TVEFURV9PUEVOCQkweDMwMDAKLSNkZWZpbmUgQk5YMlhfU1RBVEVfQ0xPU0lOR19XQUlUNF9IQUxUCTB4NDAwMAotI2RlZmluZSBCTlgyWF9TVEFURV9DTE9TSU5HX1dBSVQ0X0RFTEVURSAweDUwMDAKLSNkZWZpbmUgQk5YMlhfU1RBVEVfQ0xPU0lOR19XQUlUNF9VTkxPQUQgMHg2MDAwCi0jZGVmaW5lIEJOWDJYX1NUQVRFX0RJQUcJCTB4ZTAwMAotI2RlZmluZSBCTlgyWF9TVEFURV9FUlJPUgkJMHhmMDAwCi0KLQlpbnQJCQltdWx0aV9tb2RlOwotCWludAkJCW51bV9xdWV1ZXM7Ci0KLQl1MzIJCQlyeF9tb2RlOwotI2RlZmluZSBCTlgyWF9SWF9NT0RFX05PTkUJCTAKLSNkZWZpbmUgQk5YMlhfUlhfTU9ERV9OT1JNQUwJCTEKLSNkZWZpbmUgQk5YMlhfUlhfTU9ERV9BTExNVUxUSQkJMgotI2RlZmluZSBCTlgyWF9SWF9NT0RFX1BST01JU0MJCTMKLSNkZWZpbmUgQk5YMlhfTUFYX01VTFRJQ0FTVAkJNjQKLSNkZWZpbmUgQk5YMlhfTUFYX0VNVUxfTVVMVEkJCTE2Ci0KLQl1MzIgCQkJcnhfbW9kZV9jbF9tYXNrOwotCi0JZG1hX2FkZHJfdAkJZGVmX3N0YXR1c19ibGtfbWFwcGluZzsKLQotCXN0cnVjdCBibngyeF9zbG93cGF0aAkqc2xvd3BhdGg7Ci0JZG1hX2FkZHJfdAkJc2xvd3BhdGhfbWFwcGluZzsKLQotCWludAkJCWRyb3BsZXNzX2ZjOwotCi0jaWZkZWYgQkNNX0NOSUMKLQl1MzIJCQljbmljX2ZsYWdzOwotI2RlZmluZSBCTlgyWF9DTklDX0ZMQUdfTUFDX1NFVAkJMQotCi0Jdm9pZAkJCSp0MTsKLQlkbWFfYWRkcl90CQl0MV9tYXBwaW5nOwotCXZvaWQJCQkqdDI7Ci0JZG1hX2FkZHJfdAkJdDJfbWFwcGluZzsKLQl2b2lkCQkJKnRpbWVyczsKLQlkbWFfYWRkcl90CQl0aW1lcnNfbWFwcGluZzsKLQl2b2lkCQkJKnFtOwotCWRtYV9hZGRyX3QJCXFtX21hcHBpbmc7Ci0Jc3RydWN0IGNuaWNfb3BzCQkqY25pY19vcHM7Ci0Jdm9pZAkJCSpjbmljX2RhdGE7Ci0JdTMyCQkJY25pY190YWc7Ci0Jc3RydWN0IGNuaWNfZXRoX2RldgljbmljX2V0aF9kZXY7Ci0Jc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrICpjbmljX3NiOwotCWRtYV9hZGRyX3QJCWNuaWNfc2JfbWFwcGluZzsKLSNkZWZpbmUgQ05JQ19TQl9JRChicCkJCQlCUF9MX0lEKGJwKQotCXN0cnVjdCBldGhfc3BlCQkqY25pY19rd3E7Ci0Jc3RydWN0IGV0aF9zcGUJCSpjbmljX2t3cV9wcm9kOwotCXN0cnVjdCBldGhfc3BlCQkqY25pY19rd3FfY29uczsKLQlzdHJ1Y3QgZXRoX3NwZQkJKmNuaWNfa3dxX2xhc3Q7Ci0JdTE2CQkJY25pY19rd3FfcGVuZGluZzsKLQl1MTYJCQljbmljX3NwcV9wZW5kaW5nOwotCXN0cnVjdCBtdXRleAkJY25pY19tdXRleDsKLQl1OAkJCWlzY3NpX21hY1s2XTsKLSNlbmRpZgotCi0JaW50CQkJZG1hZV9yZWFkeTsKLQkvKiB1c2VkIHRvIHN5bmNocm9uaXplIGRtYWUgYWNjZXNzZXMgKi8KLQlzdHJ1Y3QgbXV0ZXgJCWRtYWVfbXV0ZXg7Ci0KLQkvKiB1c2VkIHRvIHByb3RlY3QgdGhlIEZXIG1haWwgYm94ICovCi0Jc3RydWN0IG11dGV4CQlmd19tYl9tdXRleDsKLQotCS8qIHVzZWQgdG8gc3luY2hyb25pemUgc3RhdHMgY29sbGVjdGluZyAqLwotCWludAkJCXN0YXRzX3N0YXRlOwotCS8qIHVzZWQgYnkgZG1hZSBjb21tYW5kIGxvYWRlciAqLwotCXN0cnVjdCBkbWFlX2NvbW1hbmQJc3RhdHNfZG1hZTsKLQlpbnQJCQlleGVjdXRlcl9pZHg7Ci0KLQl1MTYJCQlzdGF0c19jb3VudGVyOwotCXN0cnVjdCBibngyeF9ldGhfc3RhdHMJZXRoX3N0YXRzOwotCi0Jc3RydWN0IHpfc3RyZWFtX3MJKnN0cm07Ci0Jdm9pZAkJCSpndW56aXBfYnVmOwotCWRtYV9hZGRyX3QJCWd1bnppcF9tYXBwaW5nOwotCWludAkJCWd1bnppcF9vdXRsZW47Ci0jZGVmaW5lIEZXX0JVRl9TSVpFCQkJMHg4MDAwCi0jZGVmaW5lIEdVTlpJUF9CVUYoYnApCQkJKGJwLT5ndW56aXBfYnVmKQotI2RlZmluZSBHVU5aSVBfUEhZUyhicCkJCQkoYnAtPmd1bnppcF9tYXBwaW5nKQotI2RlZmluZSBHVU5aSVBfT1VUTEVOKGJwKQkJKGJwLT5ndW56aXBfb3V0bGVuKQotCi0Jc3RydWN0IHJhd19vcAkJKmluaXRfb3BzOwotCS8qIEluaXQgYmxvY2tzIG9mZnNldHMgaW5zaWRlIGluaXRfb3BzICovCi0JdTE2CQkJKmluaXRfb3BzX29mZnNldHM7Ci0JLyogRGF0YSBibG9iIC0gaGFzIDMyIGJpdCBncmFudWxhcml0eSAqLwotCXUzMgkJCSppbml0X2RhdGE7Ci0JLyogWmlwcGVkIFBSQU0gYmxvYnMgLSByYXcgZGF0YSAqLwotCWNvbnN0IHU4CQkqdHNlbV9pbnRfdGFibGVfZGF0YTsKLQljb25zdCB1OAkJKnRzZW1fcHJhbV9kYXRhOwotCWNvbnN0IHU4CQkqdXNlbV9pbnRfdGFibGVfZGF0YTsKLQljb25zdCB1OAkJKnVzZW1fcHJhbV9kYXRhOwotCWNvbnN0IHU4CQkqeHNlbV9pbnRfdGFibGVfZGF0YTsKLQljb25zdCB1OAkJKnhzZW1fcHJhbV9kYXRhOwotCWNvbnN0IHU4CQkqY3NlbV9pbnRfdGFibGVfZGF0YTsKLQljb25zdCB1OAkJKmNzZW1fcHJhbV9kYXRhOwotI2RlZmluZSBJTklUX09QUyhicCkJCQkoYnAtPmluaXRfb3BzKQotI2RlZmluZSBJTklUX09QU19PRkZTRVRTKGJwKQkJKGJwLT5pbml0X29wc19vZmZzZXRzKQotI2RlZmluZSBJTklUX0RBVEEoYnApCQkJKGJwLT5pbml0X2RhdGEpCi0jZGVmaW5lIElOSVRfVFNFTV9JTlRfVEFCTEVfREFUQShicCkJKGJwLT50c2VtX2ludF90YWJsZV9kYXRhKQotI2RlZmluZSBJTklUX1RTRU1fUFJBTV9EQVRBKGJwKQkJKGJwLT50c2VtX3ByYW1fZGF0YSkKLSNkZWZpbmUgSU5JVF9VU0VNX0lOVF9UQUJMRV9EQVRBKGJwKQkoYnAtPnVzZW1faW50X3RhYmxlX2RhdGEpCi0jZGVmaW5lIElOSVRfVVNFTV9QUkFNX0RBVEEoYnApCQkoYnAtPnVzZW1fcHJhbV9kYXRhKQotI2RlZmluZSBJTklUX1hTRU1fSU5UX1RBQkxFX0RBVEEoYnApCShicC0+eHNlbV9pbnRfdGFibGVfZGF0YSkKLSNkZWZpbmUgSU5JVF9YU0VNX1BSQU1fREFUQShicCkJCShicC0+eHNlbV9wcmFtX2RhdGEpCi0jZGVmaW5lIElOSVRfQ1NFTV9JTlRfVEFCTEVfREFUQShicCkJKGJwLT5jc2VtX2ludF90YWJsZV9kYXRhKQotI2RlZmluZSBJTklUX0NTRU1fUFJBTV9EQVRBKGJwKQkJKGJwLT5jc2VtX3ByYW1fZGF0YSkKLQotCWNoYXIJCQlmd192ZXJbMzJdOwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZQkqZmlybXdhcmU7Ci19OwotCi0KLSNkZWZpbmUgQk5YMlhfTUFYX1FVRVVFUyhicCkJKElTX0UxSE1GKGJwKSA/IChNQVhfQ09OVEVYVC9FMUhWTl9NQVgpIFwKLQkJCQkJICAgICAgOiBNQVhfQ09OVEVYVCkKLSNkZWZpbmUgQk5YMlhfTlVNX1FVRVVFUyhicCkJKGJwLT5udW1fcXVldWVzKQotI2RlZmluZSBpc19tdWx0aShicCkJCShCTlgyWF9OVU1fUVVFVUVTKGJwKSA+IDEpCi0KLSNkZWZpbmUgZm9yX2VhY2hfcXVldWUoYnAsIHZhcikgXAotCQkJZm9yICh2YXIgPSAwOyB2YXIgPCBCTlgyWF9OVU1fUVVFVUVTKGJwKTsgdmFyKyspCi0jZGVmaW5lIGZvcl9lYWNoX25vbmRlZmF1bHRfcXVldWUoYnAsIHZhcikgXAotCQkJZm9yICh2YXIgPSAxOyB2YXIgPCBCTlgyWF9OVU1fUVVFVUVTKGJwKTsgdmFyKyspCi0KLQotdm9pZCBibngyeF9yZWFkX2RtYWUoc3RydWN0IGJueDJ4ICpicCwgdTMyIHNyY19hZGRyLCB1MzIgbGVuMzIpOwotdm9pZCBibngyeF93cml0ZV9kbWFlKHN0cnVjdCBibngyeCAqYnAsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHUzMiBkc3RfYWRkciwKLQkJICAgICAgdTMyIGxlbjMyKTsKLWludCBibngyeF9nZXRfZ3BpbyhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZ3Bpb19udW0sIHU4IHBvcnQpOwotaW50IGJueDJ4X3NldF9ncGlvKHN0cnVjdCBibngyeCAqYnAsIGludCBncGlvX251bSwgdTMyIG1vZGUsIHU4IHBvcnQpOwotaW50IGJueDJ4X3NldF9ncGlvX2ludChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZ3Bpb19udW0sIHUzMiBtb2RlLCB1OCBwb3J0KTsKLXUzMiBibngyeF9md19jb21tYW5kKHN0cnVjdCBibngyeCAqYnAsIHUzMiBjb21tYW5kKTsKLXZvaWQgYm54MnhfcmVnX3dyX2luZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYWRkciwgdTMyIHZhbCk7Ci12b2lkIGJueDJ4X3dyaXRlX2RtYWVfcGh5c19sZW4oc3RydWN0IGJueDJ4ICpicCwgZG1hX2FkZHJfdCBwaHlzX2FkZHIsCi0JCQkgICAgICAgdTMyIGFkZHIsIHUzMiBsZW4pOwotCi1zdGF0aWMgaW5saW5lIHUzMiByZWdfcG9sbChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgcmVnLCB1MzIgZXhwZWN0ZWQsIGludCBtcywKLQkJCSAgIGludCB3YWl0KQotewotCXUzMiB2YWw7Ci0KLQlkbyB7Ci0JCXZhbCA9IFJFR19SRChicCwgcmVnKTsKLQkJaWYgKHZhbCA9PSBleHBlY3RlZCkKLQkJCWJyZWFrOwotCQltcyAtPSB3YWl0OwotCQltc2xlZXAod2FpdCk7Ci0KLQl9IHdoaWxlIChtcyA+IDApOwotCi0JcmV0dXJuIHZhbDsKLX0KLQotCi0vKiBsb2FkL3VubG9hZCBtb2RlICovCi0jZGVmaW5lIExPQURfTk9STUFMCQkJMAotI2RlZmluZSBMT0FEX09QRU4JCQkxCi0jZGVmaW5lIExPQURfRElBRwkJCTIKLSNkZWZpbmUgVU5MT0FEX05PUk1BTAkJCTAKLSNkZWZpbmUgVU5MT0FEX0NMT1NFCQkJMQotI2RlZmluZSBVTkxPQURfUkVDT1ZFUlkgICAgICAgICAgICAgICAgIDIKLQotCi0vKiBETUFFIGNvbW1hbmQgZGVmaW5lcyAqLwotI2RlZmluZSBETUFFX0NNRF9TUkNfUENJCQkwCi0jZGVmaW5lIERNQUVfQ01EX1NSQ19HUkMJCURNQUVfQ09NTUFORF9TUkMKLQotI2RlZmluZSBETUFFX0NNRF9EU1RfUENJCQkoMSA8PCBETUFFX0NPTU1BTkRfRFNUX1NISUZUKQotI2RlZmluZSBETUFFX0NNRF9EU1RfR1JDCQkoMiA8PCBETUFFX0NPTU1BTkRfRFNUX1NISUZUKQotCi0jZGVmaW5lIERNQUVfQ01EX0NfRFNUX1BDSQkJMAotI2RlZmluZSBETUFFX0NNRF9DX0RTVF9HUkMJCSgxIDw8IERNQUVfQ09NTUFORF9DX0RTVF9TSElGVCkKLQotI2RlZmluZSBETUFFX0NNRF9DX0VOQUJMRQkJRE1BRV9DT01NQU5EX0NfVFlQRV9FTkFCTEUKLQotI2RlZmluZSBETUFFX0NNRF9FTkRJQU5JVFlfTk9fU1dBUAkoMCA8PCBETUFFX0NPTU1BTkRfRU5ESUFOSVRZX1NISUZUKQotI2RlZmluZSBETUFFX0NNRF9FTkRJQU5JVFlfQl9TV0FQCSgxIDw8IERNQUVfQ09NTUFORF9FTkRJQU5JVFlfU0hJRlQpCi0jZGVmaW5lIERNQUVfQ01EX0VORElBTklUWV9EV19TV0FQCSgyIDw8IERNQUVfQ09NTUFORF9FTkRJQU5JVFlfU0hJRlQpCi0jZGVmaW5lIERNQUVfQ01EX0VORElBTklUWV9CX0RXX1NXQVAJKDMgPDwgRE1BRV9DT01NQU5EX0VORElBTklUWV9TSElGVCkKLQotI2RlZmluZSBETUFFX0NNRF9QT1JUXzAJCQkwCi0jZGVmaW5lIERNQUVfQ01EX1BPUlRfMQkJCURNQUVfQ09NTUFORF9QT1JUCi0KLSNkZWZpbmUgRE1BRV9DTURfU1JDX1JFU0VUCQlETUFFX0NPTU1BTkRfU1JDX1JFU0VUCi0jZGVmaW5lIERNQUVfQ01EX0RTVF9SRVNFVAkJRE1BRV9DT01NQU5EX0RTVF9SRVNFVAotI2RlZmluZSBETUFFX0NNRF9FMUhWTl9TSElGVAkJRE1BRV9DT01NQU5EX0UxSFZOX1NISUZUCi0KLSNkZWZpbmUgRE1BRV9MRU4zMl9SRF9NQVgJCTB4ODAKLSNkZWZpbmUgRE1BRV9MRU4zMl9XUl9NQVgoYnApCQkoQ0hJUF9JU19FMShicCkgPyAweDQwMCA6IDB4MjAwMCkKLQotI2RlZmluZSBETUFFX0NPTVBfVkFMCQkJMHhlMGQwZDBhZQotCi0jZGVmaW5lIE1BWF9ETUFFX0NfUEVSX1BPUlQJCTgKLSNkZWZpbmUgSU5JVF9ETUFFX0MoYnApCQkJKEJQX1BPUlQoYnApICogTUFYX0RNQUVfQ19QRVJfUE9SVCArIFwKLQkJCQkJIEJQX0UxSFZOKGJwKSkKLSNkZWZpbmUgUE1GX0RNQUVfQyhicCkJCQkoQlBfUE9SVChicCkgKiBNQVhfRE1BRV9DX1BFUl9QT1JUICsgXAotCQkJCQkgRTFIVk5fTUFYKQotCi0KLS8qIFBDSUUgbGluayBhbmQgc3BlZWQgKi8KLSNkZWZpbmUgUENJQ0ZHX0xJTktfV0lEVEgJCTB4MWYwMDAwMAotI2RlZmluZSBQQ0lDRkdfTElOS19XSURUSF9TSElGVAkJMjAKLSNkZWZpbmUgUENJQ0ZHX0xJTktfU1BFRUQJCTB4ZjAwMDAKLSNkZWZpbmUgUENJQ0ZHX0xJTktfU1BFRURfU0hJRlQJCTE2Ci0KLQotI2RlZmluZSBCTlgyWF9OVU1fVEVTVFMJCQk3Ci0KLSNkZWZpbmUgQk5YMlhfUEhZX0xPT1BCQUNLCQkwCi0jZGVmaW5lIEJOWDJYX01BQ19MT09QQkFDSwkJMQotI2RlZmluZSBCTlgyWF9QSFlfTE9PUEJBQ0tfRkFJTEVECTEKLSNkZWZpbmUgQk5YMlhfTUFDX0xPT1BCQUNLX0ZBSUxFRAkyCi0jZGVmaW5lIEJOWDJYX0xPT1BCQUNLX0ZBSUxFRAkJKEJOWDJYX01BQ19MT09QQkFDS19GQUlMRUQgfCBcCi0JCQkJCSBCTlgyWF9QSFlfTE9PUEJBQ0tfRkFJTEVEKQotCi0KLSNkZWZpbmUgU1RST01fQVNTRVJUX0FSUkFZX1NJWkUJCTUwCi0KLQotLyogbXVzdCBiZSB1c2VkIG9uIGEgQ0lEIGJlZm9yZSBwbGFjaW5nIGl0IG9uIGEgSFcgcmluZyAqLwotI2RlZmluZSBIV19DSUQoYnAsIHgpCQkJKChCUF9QT1JUKGJwKSA8PCAyMykgfCBcCi0JCQkJCSAoQlBfRTFIVk4oYnApIDw8IDE3KSB8ICh4KSkKLQotI2RlZmluZSBTUF9ERVNDX0NOVAkJKEJDTV9QQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGV0aF9zcGUpKQotI2RlZmluZSBNQVhfU1BfREVTQ19DTlQJCQkoU1BfREVTQ19DTlQgLSAxKQotCi0KLSNkZWZpbmUgQk5YMlhfQlRSCQkJMQotI2RlZmluZSBNQVhfU1BRX1BFTkRJTkcJCQk4Ci0KLQotLyogQ01ORyBjb25zdGFudHMKLSAgIGRlcml2ZWQgZnJvbSBsYWIgZXhwZXJpbWVudHMsIGFuZCBub3QgZnJvbSBzeXN0ZW0gc3BlYyBjYWxjdWxhdGlvbnMgISEhICovCi0jZGVmaW5lIERFRl9NSU5fUkFURQkJCTEwMAotLyogcmVzb2x1dGlvbiBvZiB0aGUgcmF0ZSBzaGFwaW5nIHRpbWVyIC0gMTAwIHVzZWMgKi8KLSNkZWZpbmUgUlNfUEVSSU9ESUNfVElNRU9VVF9VU0VDCTEwMAotLyogcmVzb2x1dGlvbiBvZiBmYWlybmVzcyBhbGdvcml0aG0gaW4gdXNlY3MgLQotICAgY29lZmZpY2llbnQgZm9yIGNhbGN1bGF0aW5nIHRoZSBhY3R1YWwgdCBmYWlyICovCi0jZGVmaW5lIFRfRkFJUl9DT0VGCQkJMTAwMDAwMDAKLS8qIG51bWJlciBvZiBieXRlcyBpbiBzaW5nbGUgUU0gYXJiaXRyYXRpb24gY3ljbGUgLQotICAgY29lZmZpY2llbnQgZm9yIGNhbGN1bGF0aW5nIHRoZSBmYWlybmVzcyB0aW1lciAqLwotI2RlZmluZSBRTV9BUkJfQllURVMJCQk0MDAwMAotI2RlZmluZSBGQUlSX01FTQkJCTIKLQotCi0jZGVmaW5lIEFUVE5fTklHX0ZPUl9GVU5DCQkoMUwgPDwgOCkKLSNkZWZpbmUgQVRUTl9TV19USU1FUl80X0ZVTkMJCSgxTCA8PCA5KQotI2RlZmluZSBHUElPXzJfRlVOQwkJCSgxTCA8PCAxMCkKLSNkZWZpbmUgR1BJT18zX0ZVTkMJCQkoMUwgPDwgMTEpCi0jZGVmaW5lIEdQSU9fNF9GVU5DCQkJKDFMIDw8IDEyKQotI2RlZmluZSBBVFROX0dFTkVSQUxfQVRUTl8xCQkoMUwgPDwgMTMpCi0jZGVmaW5lIEFUVE5fR0VORVJBTF9BVFROXzIJCSgxTCA8PCAxNCkKLSNkZWZpbmUgQVRUTl9HRU5FUkFMX0FUVE5fMwkJKDFMIDw8IDE1KQotI2RlZmluZSBBVFROX0dFTkVSQUxfQVRUTl80CQkoMUwgPDwgMTMpCi0jZGVmaW5lIEFUVE5fR0VORVJBTF9BVFROXzUJCSgxTCA8PCAxNCkKLSNkZWZpbmUgQVRUTl9HRU5FUkFMX0FUVE5fNgkJKDFMIDw8IDE1KQotCi0jZGVmaW5lIEFUVE5fSEFSRF9XSVJFRF9NQVNLCQkweGZmMDAKLSNkZWZpbmUgQVRURU5USU9OX0lECQkJNAotCi0KLS8qIHN0dWZmIGFkZGVkIHRvIG1ha2UgdGhlIGNvZGUgZml0IDgwQ29sICovCi0KLSNkZWZpbmUgQk5YMlhfUE1GX0xJTktfQVNTRVJUIFwKLQlHRU5FUkFMX0FUVEVOX09GRlNFVChMSU5LX1NZTkNfQVRURU5USU9OX0JJVF9GVU5DXzAgKyBCUF9GVU5DKGJwKSkKLQotI2RlZmluZSBCTlgyWF9NQ19BU1NFUlRfQklUUyBcCi0JKEdFTkVSQUxfQVRURU5fT0ZGU0VUKFRTVE9STV9GQVRBTF9BU1NFUlRfQVRURU5USU9OX0JJVCkgfCBcCi0JIEdFTkVSQUxfQVRURU5fT0ZGU0VUKFVTVE9STV9GQVRBTF9BU1NFUlRfQVRURU5USU9OX0JJVCkgfCBcCi0JIEdFTkVSQUxfQVRURU5fT0ZGU0VUKENTVE9STV9GQVRBTF9BU1NFUlRfQVRURU5USU9OX0JJVCkgfCBcCi0JIEdFTkVSQUxfQVRURU5fT0ZGU0VUKFhTVE9STV9GQVRBTF9BU1NFUlRfQVRURU5USU9OX0JJVCkpCi0KLSNkZWZpbmUgQk5YMlhfTUNQX0FTU0VSVCBcCi0JR0VORVJBTF9BVFRFTl9PRkZTRVQoTUNQX0ZBVEFMX0FTU0VSVF9BVFRFTlRJT05fQklUKQotCi0jZGVmaW5lIEJOWDJYX0dSQ19USU1FT1VUCUdFTkVSQUxfQVRURU5fT0ZGU0VUKExBVENIRURfQVRUTl9USU1FT1VUX0dSQykKLSNkZWZpbmUgQk5YMlhfR1JDX1JTVgkJKEdFTkVSQUxfQVRURU5fT0ZGU0VUKExBVENIRURfQVRUTl9SQkNSKSB8IFwKLQkJCQkgR0VORVJBTF9BVFRFTl9PRkZTRVQoTEFUQ0hFRF9BVFROX1JCQ1QpIHwgXAotCQkJCSBHRU5FUkFMX0FUVEVOX09GRlNFVChMQVRDSEVEX0FUVE5fUkJDTikgfCBcCi0JCQkJIEdFTkVSQUxfQVRURU5fT0ZGU0VUKExBVENIRURfQVRUTl9SQkNVKSB8IFwKLQkJCQkgR0VORVJBTF9BVFRFTl9PRkZTRVQoTEFUQ0hFRF9BVFROX1JCQ1ApIHwgXAotCQkJCSBHRU5FUkFMX0FUVEVOX09GRlNFVChMQVRDSEVEX0FUVE5fUlNWRF9HUkMpKQotCi0jZGVmaW5lIEhXX0lOVEVSUlVUX0FTU0VSVF9TRVRfMCBcCi0JCQkJKEFFVV9JTlBVVFNfQVRUTl9CSVRTX1RTRE1fSFdfSU5URVJSVVBUIHwgXAotCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19UQ01fSFdfSU5URVJSVVBUIHwgXAotCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19UU0VNSV9IV19JTlRFUlJVUFQgfCBcCi0JCQkJIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1BCRl9IV19JTlRFUlJVUFQpCi0jZGVmaW5lIEhXX1BSVFlfQVNTRVJUX1NFVF8wCShBRVVfSU5QVVRTX0FUVE5fQklUU19CUkJfUEFSSVRZX0VSUk9SIHwgXAotCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19QQVJTRVJfUEFSSVRZX0VSUk9SIHwgXAotCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19UU0RNX1BBUklUWV9FUlJPUiB8IFwKLQkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfU0VBUkNIRVJfUEFSSVRZX0VSUk9SIHxcCi0JCQkJIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1RTRU1JX1BBUklUWV9FUlJPUikKLSNkZWZpbmUgSFdfSU5URVJSVVRfQVNTRVJUX1NFVF8xIFwKLQkJCQkoQUVVX0lOUFVUU19BVFROX0JJVFNfUU1fSFdfSU5URVJSVVBUIHwgXAotCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19USU1FUlNfSFdfSU5URVJSVVBUIHwgXAotCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19YU0RNX0hXX0lOVEVSUlVQVCB8IFwKLQkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfWENNX0hXX0lOVEVSUlVQVCB8IFwKLQkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfWFNFTUlfSFdfSU5URVJSVVBUIHwgXAotCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19VU0RNX0hXX0lOVEVSUlVQVCB8IFwKLQkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfVUNNX0hXX0lOVEVSUlVQVCB8IFwKLQkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfVVNFTUlfSFdfSU5URVJSVVBUIHwgXAotCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19VUEJfSFdfSU5URVJSVVBUIHwgXAotCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19DU0RNX0hXX0lOVEVSUlVQVCB8IFwKLQkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfQ0NNX0hXX0lOVEVSUlVQVCkKLSNkZWZpbmUgSFdfUFJUWV9BU1NFUlRfU0VUXzEJKEFFVV9JTlBVVFNfQVRUTl9CSVRTX1BCQ0xJRU5UX1BBUklUWV9FUlJPUiB8XAotCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19RTV9QQVJJVFlfRVJST1IgfCBcCi0JCQkJIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1hTRE1fUEFSSVRZX0VSUk9SIHwgXAotCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19YU0VNSV9QQVJJVFlfRVJST1IgfCBcCi0JCQkJIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0RPT1JCRUxMUV9QQVJJVFlfRVJST1IgfFwKLQkJCSAgICAgQUVVX0lOUFVUU19BVFROX0JJVFNfVkFVWF9QQ0lfQ09SRV9QQVJJVFlfRVJST1IgfFwKLQkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfREVCVUdfUEFSSVRZX0VSUk9SIHwgXAotCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19VU0RNX1BBUklUWV9FUlJPUiB8IFwKLQkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfVVNFTUlfUEFSSVRZX0VSUk9SIHwgXAotCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19VUEJfUEFSSVRZX0VSUk9SIHwgXAotCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19DU0RNX1BBUklUWV9FUlJPUikKLSNkZWZpbmUgSFdfSU5URVJSVVRfQVNTRVJUX1NFVF8yIFwKLQkJCQkoQUVVX0lOUFVUU19BVFROX0JJVFNfQ1NFTUlfSFdfSU5URVJSVVBUIHwgXAotCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19DRFVfSFdfSU5URVJSVVBUIHwgXAotCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19ETUFFX0hXX0lOVEVSUlVQVCB8IFwKLQkJCUFFVV9JTlBVVFNfQVRUTl9CSVRTX1BYUFBDSUNMT0NLQ0xJRU5UX0hXX0lOVEVSUlVQVCB8XAotCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19NSVNDX0hXX0lOVEVSUlVQVCkKLSNkZWZpbmUgSFdfUFJUWV9BU1NFUlRfU0VUXzIJKEFFVV9JTlBVVFNfQVRUTl9CSVRTX0NTRU1JX1BBUklUWV9FUlJPUiB8IFwKLQkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfUFhQX1BBUklUWV9FUlJPUiB8IFwKLQkJCUFFVV9JTlBVVFNfQVRUTl9CSVRTX1BYUFBDSUNMT0NLQ0xJRU5UX1BBUklUWV9FUlJPUiB8XAotCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19DRkNfUEFSSVRZX0VSUk9SIHwgXAotCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19DRFVfUEFSSVRZX0VSUk9SIHwgXAotCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19JR1VfUEFSSVRZX0VSUk9SIHwgXAotCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19NSVNDX1BBUklUWV9FUlJPUikKLQotI2RlZmluZSBIV19QUlRZX0FTU0VSVF9TRVRfMyAoQUVVX0lOUFVUU19BVFROX0JJVFNfTUNQX0xBVENIRURfUk9NX1BBUklUWSB8IFwKLQkJQUVVX0lOUFVUU19BVFROX0JJVFNfTUNQX0xBVENIRURfVU1QX1JYX1BBUklUWSB8IFwKLQkJQUVVX0lOUFVUU19BVFROX0JJVFNfTUNQX0xBVENIRURfVU1QX1RYX1BBUklUWSB8IFwKLQkJQUVVX0lOUFVUU19BVFROX0JJVFNfTUNQX0xBVENIRURfU0NQQURfUEFSSVRZKQotCi0jZGVmaW5lIFJTU19GTEFHUyhicCkgXAotCQkoVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY0X0NBUEFCSUxJVFkgfCBcCi0JCSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjRfVENQX0NBUEFCSUxJVFkgfCBcCi0JCSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjZfQ0FQQUJJTElUWSB8IFwKLQkJIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfSVBWNl9UQ1BfQ0FQQUJJTElUWSB8IFwKLQkJIChicC0+bXVsdGlfbW9kZSA8PCBcCi0JCSAgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19NT0RFX1NISUZUKSkKLSNkZWZpbmUgTVVMVElfTUFTSwkJCTB4N2YKLQotCi0jZGVmaW5lIERFRl9VU0JfRlVOQ19PRkYJCSgyICsgMipIQ19VU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTKQotI2RlZmluZSBERUZfQ1NCX0ZVTkNfT0ZGCQkoMiArIDIqSENfQ1NUT1JNX0RFRl9TQl9OVU1fSU5ESUNFUykKLSNkZWZpbmUgREVGX1hTQl9GVU5DX09GRgkJKDIgKyAyKkhDX1hTVE9STV9ERUZfU0JfTlVNX0lORElDRVMpCi0jZGVmaW5lIERFRl9UU0JfRlVOQ19PRkYJCSgyICsgMipIQ19UU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTKQotCi0jZGVmaW5lIENfREVGX1NCX1NQX0lOREVYCQlIQ19JTkRFWF9ERUZfQ19FVEhfU0xPV19QQVRICi0KLSNkZWZpbmUgQk5YMlhfU1BfRFNCX0lOREVYIFwKLSgmYnAtPmRlZl9zdGF0dXNfYmxrLT5jX2RlZl9zdGF0dXNfYmxvY2suaW5kZXhfdmFsdWVzW0NfREVGX1NCX1NQX0lOREVYXSkKLQotCi0jZGVmaW5lIENBTV9JU19JTlZBTElEKHgpIFwKLSh4LnRhcmdldF90YWJsZV9lbnRyeS5mbGFncyA9PSBUU1RPUk1fQ0FNX1RBUkdFVF9UQUJMRV9FTlRSWV9BQ1RJT05fVFlQRSkKLQotI2RlZmluZSBDQU1fSU5WQUxJREFURSh4KSBcCi0JKHgudGFyZ2V0X3RhYmxlX2VudHJ5LmZsYWdzID0gVFNUT1JNX0NBTV9UQVJHRVRfVEFCTEVfRU5UUllfQUNUSU9OX1RZUEUpCi0KLQotLyogTnVtYmVyIG9mIHUzMiBlbGVtZW50cyBpbiBNQyBoYXNoIGFycmF5ICovCi0jZGVmaW5lIE1DX0hBU0hfU0laRQkJCTgKLSNkZWZpbmUgTUNfSEFTSF9PRkZTRVQoYnAsIGkpCQkoQkFSX1RTVFJPUk1fSU5UTUVNICsgXAotCVRTVE9STV9BUFBST1hJTUFURV9NQVRDSF9NVUxUSUNBU1RfRklMVEVSSU5HX09GRlNFVChCUF9GVU5DKGJwKSkgKyBpKjQpCi0KLQotI2lmbmRlZiBQWFAyX1JFR19QWFAyX0lOVF9TVFMKLSNkZWZpbmUgUFhQMl9SRUdfUFhQMl9JTlRfU1RTCQlQWFAyX1JFR19QWFAyX0lOVF9TVFNfMAotI2VuZGlmCi0KLSNkZWZpbmUgQk5YMlhfVlBEX0xFTgkJCTEyOAotI2RlZmluZSBWRU5ET1JfSURfTEVOCQkJNAotCi0vKiBNSVNDX1JFR19SRVNFVF9SRUcgLSB0aGlzIGlzIGhlcmUgZm9yIHRoZSBoc2kgdG8gd29yayBkb24ndCB0b3VjaCAqLwotCi0jZW5kaWYgLyogYm54MnguaCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ibngyeC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODRhZmNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvYm54MngvTWFrZWZpbGUKQEAgLTAsMCArMSw3IEBACisjCisjIE1ha2VmaWxlIGZvciBCcm9hZGNvbSAxMC1HaWdhYml0IGV0aGVybmV0IGRyaXZlcgorIworCitvYmotJChDT05GSUdfQk5YMlgpICs9IGJueDJ4Lm8KKworYm54Mngtb2JqcyA6PSBibngyeF9tYWluLm8gYm54MnhfbGluay5vIGJueDJ4X2Ntbi5vIGJueDJ4X2V0aHRvb2wubyBibngyeF9zdGF0cy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeC5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2FmOWM5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnguaApAQCAtMCwwICsxLDExOTcgQEAKKy8qIGJueDJ4Lmg6IEJyb2FkY29tIEV2ZXJlc3QgbmV0d29yayBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTWFpbnRhaW5lZCBieTogRWlsb24gR3JlZW5zdGVpbiA8ZWlsb25nQGJyb2FkY29tLmNvbT4KKyAqIFdyaXR0ZW4gYnk6IEVsaWV6ZXIgVGFtaXIKKyAqIEJhc2VkIG9uIGNvZGUgZnJvbSBNaWNoYWVsIENoYW4ncyBibngyIGRyaXZlcgorICovCisKKyNpZm5kZWYgQk5YMlhfSAorI2RlZmluZSBCTlgyWF9ICisKKy8qIGNvbXBpbGF0aW9uIHRpbWUgZmxhZ3MgKi8KKworLyogZGVmaW5lIHRoaXMgdG8gbWFrZSB0aGUgZHJpdmVyIGZyZWV6ZSBvbiBlcnJvciB0byBhbGxvdyBnZXR0aW5nIGRlYnVnIGluZm8KKyAqICh5b3Ugd2lsbCBuZWVkIHRvIHJlYm9vdCBhZnRlcndhcmRzKSAqLworLyogI2RlZmluZSBCTlgyWF9TVE9QX09OX0VSUk9SICovCisKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OICAgICAgIjEuNTIuNTMtMyIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFICAgICAgIjIwMTAvMTgvMDQiCisjZGVmaW5lIEJOWDJYX0JDX1ZFUiAgICAgICAgICAgIDB4MDQwMjAwCisKKyNpZiBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRKSB8fCBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRX01PRFVMRSkKKyNkZWZpbmUgQkNNX1ZMQU4JCQkxCisjZW5kaWYKKworI2RlZmluZSBCTlgyWF9NVUxUSV9RVUVVRQorCisjZGVmaW5lIEJOWDJYX05FV19OQVBJCisKKworCisjaWYgZGVmaW5lZChDT05GSUdfQ05JQykgfHwgZGVmaW5lZChDT05GSUdfQ05JQ19NT0RVTEUpCisjZGVmaW5lIEJDTV9DTklDIDEKKyNpbmNsdWRlICIuLi9jbmljX2lmLmgiCisjZW5kaWYKKworCisjaWZkZWYgQkNNX0NOSUMKKyNkZWZpbmUgQk5YMlhfTUlOX01TSVhfVkVDX0NOVCAzCisjZGVmaW5lIEJOWDJYX01TSVhfVkVDX0ZQX1NUQVJUIDIKKyNlbHNlCisjZGVmaW5lIEJOWDJYX01JTl9NU0lYX1ZFQ19DTlQgMgorI2RlZmluZSBCTlgyWF9NU0lYX1ZFQ19GUF9TVEFSVCAxCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L21kaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlICJibngyeF9yZWcuaCIKKyNpbmNsdWRlICJibngyeF9md19kZWZzLmgiCisjaW5jbHVkZSAiYm54MnhfaHNpLmgiCisjaW5jbHVkZSAiYm54MnhfbGluay5oIgorI2luY2x1ZGUgImJueDJ4X3N0YXRzLmgiCisKKy8qIGVycm9yL2RlYnVnIHByaW50cyAqLworCisjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJImJueDJ4IgorCisvKiBmb3IgbWVzc2FnZXMgdGhhdCBhcmUgY3VycmVudGx5IG9mZiAqLworI2RlZmluZSBCTlgyWF9NU0dfT0ZGCQkJMAorI2RlZmluZSBCTlgyWF9NU0dfTUNQCQkJMHgwMTAwMDAgLyogd2FzOiBORVRJRl9NU0dfSFcgKi8KKyNkZWZpbmUgQk5YMlhfTVNHX1NUQVRTCQkJMHgwMjAwMDAgLyogd2FzOiBORVRJRl9NU0dfVElNRVIgKi8KKyNkZWZpbmUgQk5YMlhfTVNHX05WTQkJCTB4MDQwMDAwIC8qIHdhczogTkVUSUZfTVNHX0hXICovCisjZGVmaW5lIEJOWDJYX01TR19ETUFFCQkJMHgwODAwMDAgLyogd2FzOiBORVRJRl9NU0dfSFcgKi8KKyNkZWZpbmUgQk5YMlhfTVNHX1NQCQkJMHgxMDAwMDAgLyogd2FzOiBORVRJRl9NU0dfSU5UUiAqLworI2RlZmluZSBCTlgyWF9NU0dfRlAJCQkweDIwMDAwMCAvKiB3YXM6IE5FVElGX01TR19JTlRSICovCisKKyNkZWZpbmUgRFBfTEVWRUwJCQlLRVJOX05PVElDRQkvKiB3YXM6IEtFUk5fREVCVUcgKi8KKworLyogcmVndWxhciBkZWJ1ZyBwcmludCAqLworI2RlZmluZSBEUChfX21hc2ssIF9fZm10LCBfX2FyZ3MuLi4pCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlpZiAoYnAtPm1zZ19lbmFibGUgJiAoX19tYXNrKSkJCQkJXAorCQlwcmludGsoRFBfTEVWRUwgIlslczolZCglcyldIiBfX2ZtdCwJCVwKKwkJICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXywJCQlcCisJCSAgICAgICBicC0+ZGV2ID8gKGJwLT5kZXYtPm5hbWUpIDogIj8iLAkJXAorCQkgICAgICAgIyNfX2FyZ3MpOwkJCQlcCit9IHdoaWxlICgwKQorCisvKiBlcnJvcnMgZGVidWcgcHJpbnQgKi8KKyNkZWZpbmUgQk5YMlhfREJHX0VSUihfX2ZtdCwgX19hcmdzLi4uKQkJCQlcCitkbyB7CQkJCQkJCQlcCisJaWYgKG5ldGlmX21zZ19wcm9iZShicCkpCQkJCVwKKwkJcHJfZXJyKCJbJXM6JWQoJXMpXSIgX19mbXQsCQkJXAorCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fLAkJCVwKKwkJICAgICAgIGJwLT5kZXYgPyAoYnAtPmRldi0+bmFtZSkgOiAiPyIsCQlcCisJCSAgICAgICAjI19fYXJncyk7CQkJCVwKK30gd2hpbGUgKDApCisKKy8qIGZvciBlcnJvcnMgKG5ldmVyIG1hc2tlZCkgKi8KKyNkZWZpbmUgQk5YMlhfRVJSKF9fZm10LCBfX2FyZ3MuLi4pCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlwcl9lcnIoIlslczolZCglcyldIiBfX2ZtdCwJCQkJXAorCSAgICAgICBfX2Z1bmNfXywgX19MSU5FX18sCQkJCVwKKwkgICAgICAgYnAtPmRldiA/IChicC0+ZGV2LT5uYW1lKSA6ICI/IiwJCQlcCisJICAgICAgICMjX19hcmdzKTsJCQkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIEJOWDJYX0VSUk9SKF9fZm10LCBfX2FyZ3MuLi4pIGRvIHsgXAorCXByX2VycigiWyVzOiVkXSIgX19mbXQsIF9fZnVuY19fLCBfX0xJTkVfXywgIyNfX2FyZ3MpOyBcCisJfSB3aGlsZSAoMCkKKworCisvKiBiZWZvcmUgd2UgaGF2ZSBhIGRldi0+bmFtZSB1c2UgZGV2X2luZm8oKSAqLworI2RlZmluZSBCTlgyWF9ERVZfSU5GTyhfX2ZtdCwgX19hcmdzLi4uKQkJCSBcCitkbyB7CQkJCQkJCQkgXAorCWlmIChuZXRpZl9tc2dfcHJvYmUoYnApKQkJCQkgXAorCQlkZXZfaW5mbygmYnAtPnBkZXYtPmRldiwgX19mbXQsICMjX19hcmdzKTsJIFwKK30gd2hpbGUgKDApCisKK3ZvaWQgYm54MnhfcGFuaWNfZHVtcChzdHJ1Y3QgYm54MnggKmJwKTsKKworI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKKyNkZWZpbmUgYm54MnhfcGFuaWMoKSBkbyB7IFwKKwkJYnAtPnBhbmljID0gMTsgXAorCQlCTlgyWF9FUlIoImRyaXZlciBhc3NlcnRcbiIpOyBcCisJCWJueDJ4X2ludF9kaXNhYmxlKGJwKTsgXAorCQlibngyeF9wYW5pY19kdW1wKGJwKTsgXAorCX0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBibngyeF9wYW5pYygpIGRvIHsgXAorCQlicC0+cGFuaWMgPSAxOyBcCisJCUJOWDJYX0VSUigiZHJpdmVyIGFzc2VydFxuIik7IFwKKwkJYm54MnhfcGFuaWNfZHVtcChicCk7IFwKKwl9IHdoaWxlICgwKQorI2VuZGlmCisKKworI2RlZmluZSBVNjRfTE8oeCkJCQkodTMyKSgoKHU2NCkoeCkpICYgMHhmZmZmZmZmZikKKyNkZWZpbmUgVTY0X0hJKHgpCQkJKHUzMikoKCh1NjQpKHgpKSA+PiAzMikKKyNkZWZpbmUgSElMT19VNjQoaGksIGxvKQkJKCgoKHU2NCkoaGkpKSA8PCAzMikgKyAobG8pKQorCisKKyNkZWZpbmUgUkVHX0FERFIoYnAsIG9mZnNldCkJCShicC0+cmVndmlldyArIG9mZnNldCkKKworI2RlZmluZSBSRUdfUkQoYnAsIG9mZnNldCkJCXJlYWRsKFJFR19BRERSKGJwLCBvZmZzZXQpKQorI2RlZmluZSBSRUdfUkQ4KGJwLCBvZmZzZXQpCQlyZWFkYihSRUdfQUREUihicCwgb2Zmc2V0KSkKKworI2RlZmluZSBSRUdfV1IoYnAsIG9mZnNldCwgdmFsKQkJd3JpdGVsKCh1MzIpdmFsLCBSRUdfQUREUihicCwgb2Zmc2V0KSkKKyNkZWZpbmUgUkVHX1dSOChicCwgb2Zmc2V0LCB2YWwpCXdyaXRlYigodTgpdmFsLCBSRUdfQUREUihicCwgb2Zmc2V0KSkKKyNkZWZpbmUgUkVHX1dSMTYoYnAsIG9mZnNldCwgdmFsKQl3cml0ZXcoKHUxNil2YWwsIFJFR19BRERSKGJwLCBvZmZzZXQpKQorCisjZGVmaW5lIFJFR19SRF9JTkQoYnAsIG9mZnNldCkJCWJueDJ4X3JlZ19yZF9pbmQoYnAsIG9mZnNldCkKKyNkZWZpbmUgUkVHX1dSX0lORChicCwgb2Zmc2V0LCB2YWwpCWJueDJ4X3JlZ193cl9pbmQoYnAsIG9mZnNldCwgdmFsKQorCisjZGVmaW5lIFJFR19SRF9ETUFFKGJwLCBvZmZzZXQsIHZhbHAsIGxlbjMyKSBcCisJZG8geyBcCisJCWJueDJ4X3JlYWRfZG1hZShicCwgb2Zmc2V0LCBsZW4zMik7XAorCQltZW1jcHkodmFscCwgYm54Mnhfc3AoYnAsIHdiX2RhdGFbMF0pLCAobGVuMzIpICogNCk7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFJFR19XUl9ETUFFKGJwLCBvZmZzZXQsIHZhbHAsIGxlbjMyKSBcCisJZG8geyBcCisJCW1lbWNweShibngyeF9zcChicCwgd2JfZGF0YVswXSksIHZhbHAsIChsZW4zMikgKiA0KTsgXAorCQlibngyeF93cml0ZV9kbWFlKGJwLCBibngyeF9zcF9tYXBwaW5nKGJwLCB3Yl9kYXRhKSwgXAorCQkJCSBvZmZzZXQsIGxlbjMyKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgVklSVF9XUl9ETUFFX0xFTihicCwgZGF0YSwgYWRkciwgbGVuMzIsIGxlMzJfc3dhcCkgXAorCWRvIHsgXAorCQltZW1jcHkoR1VOWklQX0JVRihicCksIGRhdGEsIChsZW4zMikgKiA0KTsgXAorCQlibngyeF93cml0ZV9iaWdfYnVmX3diKGJwLCBhZGRyLCBsZW4zMik7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFNITUVNX0FERFIoYnAsIGZpZWxkKQkJKGJwLT5jb21tb24uc2htZW1fYmFzZSArIFwKKwkJCQkJIG9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sIGZpZWxkKSkKKyNkZWZpbmUgU0hNRU1fUkQoYnAsIGZpZWxkKQkJUkVHX1JEKGJwLCBTSE1FTV9BRERSKGJwLCBmaWVsZCkpCisjZGVmaW5lIFNITUVNX1dSKGJwLCBmaWVsZCwgdmFsKQlSRUdfV1IoYnAsIFNITUVNX0FERFIoYnAsIGZpZWxkKSwgdmFsKQorCisjZGVmaW5lIFNITUVNMl9BRERSKGJwLCBmaWVsZCkJCShicC0+Y29tbW9uLnNobWVtMl9iYXNlICsgXAorCQkJCQkgb2Zmc2V0b2Yoc3RydWN0IHNobWVtMl9yZWdpb24sIGZpZWxkKSkKKyNkZWZpbmUgU0hNRU0yX1JEKGJwLCBmaWVsZCkJCVJFR19SRChicCwgU0hNRU0yX0FERFIoYnAsIGZpZWxkKSkKKyNkZWZpbmUgU0hNRU0yX1dSKGJwLCBmaWVsZCwgdmFsKQlSRUdfV1IoYnAsIFNITUVNMl9BRERSKGJwLCBmaWVsZCksIHZhbCkKKworI2RlZmluZSBNRl9DRkdfUkQoYnAsIGZpZWxkKQkJU0hNRU1fUkQoYnAsIG1mX2NmZy5maWVsZCkKKyNkZWZpbmUgTUZfQ0ZHX1dSKGJwLCBmaWVsZCwgdmFsKQlTSE1FTV9XUihicCwgbWZfY2ZnLmZpZWxkLCB2YWwpCisKKyNkZWZpbmUgRU1BQ19SRChicCwgcmVnKQkJUkVHX1JEKGJwLCBlbWFjX2Jhc2UgKyByZWcpCisjZGVmaW5lIEVNQUNfV1IoYnAsIHJlZywgdmFsKQkJUkVHX1dSKGJwLCBlbWFjX2Jhc2UgKyByZWcsIHZhbCkKKworI2RlZmluZSBBRVVfSU5fQVRUTl9CSVRTX1BYUFBDSUNMT0NLQ0xJRU5UX1BBUklUWV9FUlJPUiBcCisJQUVVX0lOUFVUU19BVFROX0JJVFNfUFhQUENJQ0xPQ0tDTElFTlRfUEFSSVRZX0VSUk9SCisKKworLyogZmFzdCBwYXRoICovCisKK3N0cnVjdCBzd19yeF9iZCB7CisJc3RydWN0IHNrX2J1ZmYJKnNrYjsKKwlERUZJTkVfRE1BX1VOTUFQX0FERFIobWFwcGluZyk7Cit9OworCitzdHJ1Y3Qgc3dfdHhfYmQgeworCXN0cnVjdCBza19idWZmCSpza2I7CisJdTE2CQlmaXJzdF9iZDsKKwl1OAkJZmxhZ3M7CisvKiBTZXQgb24gdGhlIGZpcnN0IEJEIGRlc2NyaXB0b3Igd2hlbiB0aGVyZSBpcyBhIHNwbGl0IEJEICovCisjZGVmaW5lIEJOWDJYX1RTT19TUExJVF9CRAkJKDE8PDApCit9OworCitzdHJ1Y3Qgc3dfcnhfcGFnZSB7CisJc3RydWN0IHBhZ2UJKnBhZ2U7CisJREVGSU5FX0RNQV9VTk1BUF9BRERSKG1hcHBpbmcpOworfTsKKwordW5pb24gZGJfcHJvZCB7CisJc3RydWN0IGRvb3JiZWxsX3NldF9wcm9kIGRhdGE7CisJdTMyCQlyYXc7Cit9OworCisKKy8qIE1DIGhzaSAqLworI2RlZmluZSBCQ01fUEFHRV9TSElGVAkJCTEyCisjZGVmaW5lIEJDTV9QQUdFX1NJWkUJCQkoMSA8PCBCQ01fUEFHRV9TSElGVCkKKyNkZWZpbmUgQkNNX1BBR0VfTUFTSwkJCSh+KEJDTV9QQUdFX1NJWkUgLSAxKSkKKyNkZWZpbmUgQkNNX1BBR0VfQUxJR04oYWRkcikJKCgoYWRkcikgKyBCQ01fUEFHRV9TSVpFIC0gMSkgJiBCQ01fUEFHRV9NQVNLKQorCisjZGVmaW5lIFBBR0VTX1BFUl9TR0VfU0hJRlQJCTAKKyNkZWZpbmUgUEFHRVNfUEVSX1NHRQkJCSgxIDw8IFBBR0VTX1BFUl9TR0VfU0hJRlQpCisjZGVmaW5lIFNHRV9QQUdFX1NJWkUJCQlQQUdFX1NJWkUKKyNkZWZpbmUgU0dFX1BBR0VfU0hJRlQJCQlQQUdFX1NISUZUCisjZGVmaW5lIFNHRV9QQUdFX0FMSUdOKGFkZHIpCQlQQUdFX0FMSUdOKCh0eXBlb2YoUEFHRV9TSVpFKSkoYWRkcikpCisKKy8qIFNHRSByaW5nIHJlbGF0ZWQgbWFjcm9zICovCisjZGVmaW5lIE5VTV9SWF9TR0VfUEFHRVMJCTIKKyNkZWZpbmUgUlhfU0dFX0NOVAkJKEJDTV9QQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGV0aF9yeF9zZ2UpKQorI2RlZmluZSBNQVhfUlhfU0dFX0NOVAkJCShSWF9TR0VfQ05UIC0gMikKKy8qIFJYX1NHRV9DTlQgaXMgcHJvbWlzZWQgdG8gYmUgYSBwb3dlciBvZiAyICovCisjZGVmaW5lIFJYX1NHRV9NQVNLCQkJKFJYX1NHRV9DTlQgLSAxKQorI2RlZmluZSBOVU1fUlhfU0dFCQkJKFJYX1NHRV9DTlQgKiBOVU1fUlhfU0dFX1BBR0VTKQorI2RlZmluZSBNQVhfUlhfU0dFCQkJKE5VTV9SWF9TR0UgLSAxKQorI2RlZmluZSBORVhUX1NHRV9JRFgoeCkJCSgoKCh4KSAmIFJYX1NHRV9NQVNLKSA9PSBcCisJCQkJICAoTUFYX1JYX1NHRV9DTlQgLSAxKSkgPyAoeCkgKyAzIDogKHgpICsgMSkKKyNkZWZpbmUgUlhfU0dFKHgpCQkJKCh4KSAmIE1BWF9SWF9TR0UpCisKKy8qIFNHRSBwcm9kdWNlciBtYXNrIHJlbGF0ZWQgbWFjcm9zICovCisvKiBOdW1iZXIgb2YgYml0cyBpbiBvbmUgc2dlX21hc2sgYXJyYXkgZWxlbWVudCAqLworI2RlZmluZSBSWF9TR0VfTUFTS19FTEVNX1NaCQk2NAorI2RlZmluZSBSWF9TR0VfTUFTS19FTEVNX1NISUZUCQk2CisjZGVmaW5lIFJYX1NHRV9NQVNLX0VMRU1fTUFTSwkJKCh1NjQpUlhfU0dFX01BU0tfRUxFTV9TWiAtIDEpCisKKy8qIENyZWF0ZXMgYSBiaXRtYXNrIG9mIGFsbCBvbmVzIGluIGxlc3Mgc2lnbmlmaWNhbnQgYml0cy4KKyAgIGlkeCAtIGluZGV4IG9mIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBpbiB0aGUgY3JlYXRlZCBtYXNrICovCisjZGVmaW5lIFJYX1NHRV9PTkVTX01BU0soaWR4KSBcCisJCSgoKHU2NCkweDEgPDwgKCgoaWR4KSAmIFJYX1NHRV9NQVNLX0VMRU1fTUFTSykgKyAxKSkgLSAxKQorI2RlZmluZSBSWF9TR0VfTUFTS19FTEVNX09ORV9NQVNLCSgodTY0KSh+MCkpCisKKy8qIE51bWJlciBvZiB1NjQgZWxlbWVudHMgaW4gU0dFIG1hc2sgYXJyYXkgKi8KKyNkZWZpbmUgUlhfU0dFX01BU0tfTEVOCQkJKChOVU1fUlhfU0dFX1BBR0VTICogUlhfU0dFX0NOVCkgLyBcCisJCQkJCSBSWF9TR0VfTUFTS19FTEVNX1NaKQorI2RlZmluZSBSWF9TR0VfTUFTS19MRU5fTUFTSwkJKFJYX1NHRV9NQVNLX0xFTiAtIDEpCisjZGVmaW5lIE5FWFRfU0dFX01BU0tfRUxFTShlbCkJCSgoKGVsKSArIDEpICYgUlhfU0dFX01BU0tfTEVOX01BU0spCisKKworc3RydWN0IGJueDJ4X2Zhc3RwYXRoIHsKKworCXN0cnVjdCBuYXBpX3N0cnVjdAluYXBpOworCXN0cnVjdCBob3N0X3N0YXR1c19ibG9jayAqc3RhdHVzX2JsazsKKwlkbWFfYWRkcl90CQlzdGF0dXNfYmxrX21hcHBpbmc7CisKKwlzdHJ1Y3Qgc3dfdHhfYmQJCSp0eF9idWZfcmluZzsKKworCXVuaW9uIGV0aF90eF9iZF90eXBlcwkqdHhfZGVzY19yaW5nOworCWRtYV9hZGRyX3QJCXR4X2Rlc2NfbWFwcGluZzsKKworCXN0cnVjdCBzd19yeF9iZAkJKnJ4X2J1Zl9yaW5nOwkvKiBCRHMgbWFwcGluZ3MgcmluZyAqLworCXN0cnVjdCBzd19yeF9wYWdlCSpyeF9wYWdlX3Jpbmc7CS8qIFNHRSBwYWdlcyBtYXBwaW5ncyByaW5nICovCisKKwlzdHJ1Y3QgZXRoX3J4X2JkCSpyeF9kZXNjX3Jpbmc7CisJZG1hX2FkZHJfdAkJcnhfZGVzY19tYXBwaW5nOworCisJdW5pb24gZXRoX3J4X2NxZQkqcnhfY29tcF9yaW5nOworCWRtYV9hZGRyX3QJCXJ4X2NvbXBfbWFwcGluZzsKKworCS8qIFNHRSByaW5nICovCisJc3RydWN0IGV0aF9yeF9zZ2UJKnJ4X3NnZV9yaW5nOworCWRtYV9hZGRyX3QJCXJ4X3NnZV9tYXBwaW5nOworCisJdTY0CQkJc2dlX21hc2tbUlhfU0dFX01BU0tfTEVOXTsKKworCWludAkJCXN0YXRlOworI2RlZmluZSBCTlgyWF9GUF9TVEFURV9DTE9TRUQJCTAKKyNkZWZpbmUgQk5YMlhfRlBfU1RBVEVfSVJRCQkweDgwMDAwCisjZGVmaW5lIEJOWDJYX0ZQX1NUQVRFX09QRU5JTkcJCTB4OTAwMDAKKyNkZWZpbmUgQk5YMlhfRlBfU1RBVEVfT1BFTgkJMHhhMDAwMAorI2RlZmluZSBCTlgyWF9GUF9TVEFURV9IQUxUSU5HCQkweGIwMDAwCisjZGVmaW5lIEJOWDJYX0ZQX1NUQVRFX0hBTFRFRAkJMHhjMDAwMAorCisJdTgJCQlpbmRleDsJLyogbnVtYmVyIGluIGZwIGFycmF5ICovCisJdTgJCQljbF9pZDsJLyogZXRoIGNsaWVudCBpZCAqLworCXU4CQkJc2JfaWQ7CS8qIHN0YXR1cyBibG9jayBudW1iZXIgaW4gSFcgKi8KKworCXVuaW9uIGRiX3Byb2QJCXR4X2RiOworCisJdTE2CQkJdHhfcGt0X3Byb2Q7CisJdTE2CQkJdHhfcGt0X2NvbnM7CisJdTE2CQkJdHhfYmRfcHJvZDsKKwl1MTYJCQl0eF9iZF9jb25zOworCV9fbGUxNgkJCSp0eF9jb25zX3NiOworCisJX19sZTE2CQkJZnBfY19pZHg7CisJX19sZTE2CQkJZnBfdV9pZHg7CisKKwl1MTYJCQlyeF9iZF9wcm9kOworCXUxNgkJCXJ4X2JkX2NvbnM7CisJdTE2CQkJcnhfY29tcF9wcm9kOworCXUxNgkJCXJ4X2NvbXBfY29uczsKKwl1MTYJCQlyeF9zZ2VfcHJvZDsKKwkvKiBUaGUgbGFzdCBtYXhpbWFsIGNvbXBsZXRlZCBTR0UgKi8KKwl1MTYJCQlsYXN0X21heF9zZ2U7CisJX19sZTE2CQkJKnJ4X2NvbnNfc2I7CisJX19sZTE2CQkJKnJ4X2JkX2NvbnNfc2I7CisKKworCXVuc2lnbmVkIGxvbmcJCXR4X3BrdCwKKwkJCQlyeF9wa3QsCisJCQkJcnhfY2FsbHM7CisKKwkvKiBUUEEgcmVsYXRlZCAqLworCXN0cnVjdCBzd19yeF9iZAkJdHBhX3Bvb2xbRVRIX01BWF9BR0dSRUdBVElPTl9RVUVVRVNfRTFIXTsKKwl1OAkJCXRwYV9zdGF0ZVtFVEhfTUFYX0FHR1JFR0FUSU9OX1FVRVVFU19FMUhdOworI2RlZmluZSBCTlgyWF9UUEFfU1RBUlQJCQkxCisjZGVmaW5lIEJOWDJYX1RQQV9TVE9QCQkJMgorCXU4CQkJZGlzYWJsZV90cGE7CisjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgorCXU2NAkJCXRwYV9xdWV1ZV91c2VkOworI2VuZGlmCisKKwlzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgb2xkX3RjbGllbnQ7CisJc3RydWN0IHVzdG9ybV9wZXJfY2xpZW50X3N0YXRzIG9sZF91Y2xpZW50OworCXN0cnVjdCB4c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyBvbGRfeGNsaWVudDsKKwlzdHJ1Y3QgYm54MnhfZXRoX3Ffc3RhdHMgZXRoX3Ffc3RhdHM7CisKKwkvKiBUaGUgc2l6ZSBpcyBjYWxjdWxhdGVkIHVzaW5nIHRoZSBmb2xsb3dpbmc6CisJICAgICBzaXplb2YgbmFtZSBmaWVsZCBmcm9tIG5ldGRldiBzdHJ1Y3R1cmUgKworCSAgICAgNCAoJy1YeC0nIHN0cmluZykgKworCSAgICAgNCAoZm9yIHRoZSBkaWdpdHMgYW5kIHRvIG1ha2UgaXQgRFdPUkQgYWxpZ25lZCkgKi8KKyNkZWZpbmUgRlBfTkFNRV9TSVpFCQkoc2l6ZW9mKCgoc3RydWN0IG5ldF9kZXZpY2UgKikwKS0+bmFtZSkgKyA4KQorCWNoYXIJCQluYW1lW0ZQX05BTUVfU0laRV07CisJc3RydWN0IGJueDJ4CQkqYnA7IC8qIHBhcmVudCAqLworfTsKKworI2RlZmluZSBibngyeF9mcChicCwgbnIsIHZhcikJCShicC0+ZnBbbnJdLnZhcikKKworCisvKiBNQyBoc2kgKi8KKyNkZWZpbmUgTUFYX0ZFVENIX0JECQkJMTMJLyogSFcgbWF4IEJEcyBwZXIgcGFja2V0ICovCisjZGVmaW5lIFJYX0NPUFlfVEhSRVNICQkJOTIKKworI2RlZmluZSBOVU1fVFhfUklOR1MJCQkxNgorI2RlZmluZSBUWF9ERVNDX0NOVAkJKEJDTV9QQUdFX1NJWkUgLyBzaXplb2YodW5pb24gZXRoX3R4X2JkX3R5cGVzKSkKKyNkZWZpbmUgTUFYX1RYX0RFU0NfQ05UCQkJKFRYX0RFU0NfQ05UIC0gMSkKKyNkZWZpbmUgTlVNX1RYX0JECQkJKFRYX0RFU0NfQ05UICogTlVNX1RYX1JJTkdTKQorI2RlZmluZSBNQVhfVFhfQkQJCQkoTlVNX1RYX0JEIC0gMSkKKyNkZWZpbmUgTUFYX1RYX0FWQUlMCQkJKE1BWF9UWF9ERVNDX0NOVCAqIE5VTV9UWF9SSU5HUyAtIDIpCisjZGVmaW5lIE5FWFRfVFhfSURYKHgpCQkoKCgoeCkgJiBNQVhfVFhfREVTQ19DTlQpID09IFwKKwkJCQkgIChNQVhfVFhfREVTQ19DTlQgLSAxKSkgPyAoeCkgKyAyIDogKHgpICsgMSkKKyNkZWZpbmUgVFhfQkQoeCkJCQkoKHgpICYgTUFYX1RYX0JEKQorI2RlZmluZSBUWF9CRF9QT0ZGKHgpCQkJKCh4KSAmIE1BWF9UWF9ERVNDX0NOVCkKKworLyogVGhlIFJYIEJEIHJpbmcgaXMgc3BlY2lhbCwgZWFjaCBiZCBpcyA4IGJ5dGVzIGJ1dCB0aGUgbGFzdCBvbmUgaXMgMTYgKi8KKyNkZWZpbmUgTlVNX1JYX1JJTkdTCQkJOAorI2RlZmluZSBSWF9ERVNDX0NOVAkJKEJDTV9QQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGV0aF9yeF9iZCkpCisjZGVmaW5lIE1BWF9SWF9ERVNDX0NOVAkJCShSWF9ERVNDX0NOVCAtIDIpCisjZGVmaW5lIFJYX0RFU0NfTUFTSwkJCShSWF9ERVNDX0NOVCAtIDEpCisjZGVmaW5lIE5VTV9SWF9CRAkJCShSWF9ERVNDX0NOVCAqIE5VTV9SWF9SSU5HUykKKyNkZWZpbmUgTUFYX1JYX0JECQkJKE5VTV9SWF9CRCAtIDEpCisjZGVmaW5lIE1BWF9SWF9BVkFJTAkJCShNQVhfUlhfREVTQ19DTlQgKiBOVU1fUlhfUklOR1MgLSAyKQorI2RlZmluZSBORVhUX1JYX0lEWCh4KQkJKCgoKHgpICYgUlhfREVTQ19NQVNLKSA9PSBcCisJCQkJICAoTUFYX1JYX0RFU0NfQ05UIC0gMSkpID8gKHgpICsgMyA6ICh4KSArIDEpCisjZGVmaW5lIFJYX0JEKHgpCQkJKCh4KSAmIE1BWF9SWF9CRCkKKworLyogQXMgbG9uZyBhcyBDUUUgaXMgNCB0aW1lcyBiaWdnZXIgdGhhbiBCRCBlbnRyeSB3ZSBoYXZlIHRvIGFsbG9jYXRlCisgICA0IHRpbWVzIG1vcmUgcGFnZXMgZm9yIENRIHJpbmcgaW4gb3JkZXIgdG8ga2VlcCBpdCBiYWxhbmNlZCB3aXRoCisgICBCRCByaW5nICovCisjZGVmaW5lIE5VTV9SQ1FfUklOR1MJCQkoTlVNX1JYX1JJTkdTICogNCkKKyNkZWZpbmUgUkNRX0RFU0NfQ05UCQkoQkNNX1BBR0VfU0laRSAvIHNpemVvZih1bmlvbiBldGhfcnhfY3FlKSkKKyNkZWZpbmUgTUFYX1JDUV9ERVNDX0NOVAkJKFJDUV9ERVNDX0NOVCAtIDEpCisjZGVmaW5lIE5VTV9SQ1FfQkQJCQkoUkNRX0RFU0NfQ05UICogTlVNX1JDUV9SSU5HUykKKyNkZWZpbmUgTUFYX1JDUV9CRAkJCShOVU1fUkNRX0JEIC0gMSkKKyNkZWZpbmUgTUFYX1JDUV9BVkFJTAkJCShNQVhfUkNRX0RFU0NfQ05UICogTlVNX1JDUV9SSU5HUyAtIDIpCisjZGVmaW5lIE5FWFRfUkNRX0lEWCh4KQkJKCgoKHgpICYgTUFYX1JDUV9ERVNDX0NOVCkgPT0gXAorCQkJCSAgKE1BWF9SQ1FfREVTQ19DTlQgLSAxKSkgPyAoeCkgKyAyIDogKHgpICsgMSkKKyNkZWZpbmUgUkNRX0JEKHgpCQkJKCh4KSAmIE1BWF9SQ1FfQkQpCisKKworLyogVGhpcyBpcyBuZWVkZWQgZm9yIGRldGVybWluaW5nIG9mIGxhc3RfbWF4ICovCisjZGVmaW5lIFNVQl9TMTYoYSwgYikJCQkoczE2KSgoczE2KShhKSAtIChzMTYpKGIpKQorCisjZGVmaW5lIF9fU0dFX01BU0tfU0VUX0JJVChlbCwgYml0KSBcCisJZG8geyBcCisJCWVsID0gKChlbCkgfCAoKHU2NCkweDEgPDwgKGJpdCkpKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgX19TR0VfTUFTS19DTEVBUl9CSVQoZWwsIGJpdCkgXAorCWRvIHsgXAorCQllbCA9ICgoZWwpICYgKH4oKHU2NCkweDEgPDwgKGJpdCkpKSk7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFNHRV9NQVNLX1NFVF9CSVQoZnAsIGlkeCkgXAorCV9fU0dFX01BU0tfU0VUX0JJVChmcC0+c2dlX21hc2tbKGlkeCkgPj4gUlhfU0dFX01BU0tfRUxFTV9TSElGVF0sIFwKKwkJCSAgICgoaWR4KSAmIFJYX1NHRV9NQVNLX0VMRU1fTUFTSykpCisKKyNkZWZpbmUgU0dFX01BU0tfQ0xFQVJfQklUKGZwLCBpZHgpIFwKKwlfX1NHRV9NQVNLX0NMRUFSX0JJVChmcC0+c2dlX21hc2tbKGlkeCkgPj4gUlhfU0dFX01BU0tfRUxFTV9TSElGVF0sIFwKKwkJCSAgICAgKChpZHgpICYgUlhfU0dFX01BU0tfRUxFTV9NQVNLKSkKKworCisvKiB1c2VkIG9uIGEgQ0lEIHJlY2VpdmVkIGZyb20gdGhlIEhXICovCisjZGVmaW5lIFNXX0NJRCh4KQkJCShsZTMyX3RvX2NwdSh4KSAmIFwKKwkJCQkJIChDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfQ0lEID4+IDcpKQorI2RlZmluZSBDUUVfQ01EKHgpCQkJKGxlMzJfdG9fY3B1KHgpID4+IFwKKwkJCQkJQ09NTU9OX1JBTVJPRF9FVEhfUlhfQ1FFX0NNRF9JRF9TSElGVCkKKworI2RlZmluZSBCRF9VTk1BUF9BRERSKGJkKQkJSElMT19VNjQobGUzMl90b19jcHUoKGJkKS0+YWRkcl9oaSksIFwKKwkJCQkJCSBsZTMyX3RvX2NwdSgoYmQpLT5hZGRyX2xvKSkKKyNkZWZpbmUgQkRfVU5NQVBfTEVOKGJkKQkJKGxlMTZfdG9fY3B1KChiZCktPm5ieXRlcykpCisKKworI2RlZmluZSBEUE1fVFJJR0VSX1RZUEUJCQkweDQwCisjZGVmaW5lIERPT1JCRUxMKGJwLCBjaWQsIHZhbCkgXAorCWRvIHsgXAorCQl3cml0ZWwoKHUzMikodmFsKSwgYnAtPmRvb3JiZWxscyArIChCQ01fUEFHRV9TSVpFICogKGNpZCkpICsgXAorCQkgICAgICAgRFBNX1RSSUdFUl9UWVBFKTsgXAorCX0gd2hpbGUgKDApCisKKworLyogVFggQ1NVTSBoZWxwZXJzICovCisjZGVmaW5lIFNLQl9DU19PRkYoc2tiKQkJKG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKSAtIFwKKwkJCQkgc2tiLT5jc3VtX29mZnNldCkKKyNkZWZpbmUgU0tCX0NTKHNrYikJCSgqKHUxNiAqKShza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpICsgXAorCQkJCQkgIHNrYi0+Y3N1bV9vZmZzZXQpKQorCisjZGVmaW5lIHBiZF90Y3BfZmxhZ3Moc2tiKQkobnRvaGwodGNwX2ZsYWdfd29yZCh0Y3BfaGRyKHNrYikpKT4+MTYgJiAweGZmKQorCisjZGVmaW5lIFhNSVRfUExBSU4JCQkwCisjZGVmaW5lIFhNSVRfQ1NVTV9WNAkJCTB4MQorI2RlZmluZSBYTUlUX0NTVU1fVjYJCQkweDIKKyNkZWZpbmUgWE1JVF9DU1VNX1RDUAkJCTB4NAorI2RlZmluZSBYTUlUX0dTT19WNAkJCTB4OAorI2RlZmluZSBYTUlUX0dTT19WNgkJCTB4MTAKKworI2RlZmluZSBYTUlUX0NTVU0JCQkoWE1JVF9DU1VNX1Y0IHwgWE1JVF9DU1VNX1Y2KQorI2RlZmluZSBYTUlUX0dTTwkJCShYTUlUX0dTT19WNCB8IFhNSVRfR1NPX1Y2KQorCisKKy8qIHN0dWZmIGFkZGVkIHRvIG1ha2UgdGhlIGNvZGUgZml0IDgwQ29sICovCisKKyNkZWZpbmUgQ1FFX1RZUEUoY3FlX2ZwX2ZsYWdzKQkoKGNxZV9mcF9mbGFncykgJiBFVEhfRkFTVF9QQVRIX1JYX0NRRV9UWVBFKQorCisjZGVmaW5lIFRQQV9UWVBFX1NUQVJUCQkJRVRIX0ZBU1RfUEFUSF9SWF9DUUVfU1RBUlRfRkxHCisjZGVmaW5lIFRQQV9UWVBFX0VORAkJCUVUSF9GQVNUX1BBVEhfUlhfQ1FFX0VORF9GTEcKKyNkZWZpbmUgVFBBX1RZUEUoY3FlX2ZwX2ZsYWdzKQkJKChjcWVfZnBfZmxhZ3MpICYgXAorCQkJCQkgKFRQQV9UWVBFX1NUQVJUIHwgVFBBX1RZUEVfRU5EKSkKKworI2RlZmluZSBFVEhfUlhfRVJST1JfRkFMR1MJCUVUSF9GQVNUX1BBVEhfUlhfQ1FFX1BIWV9ERUNPREVfRVJSX0ZMRworCisjZGVmaW5lIEJOWDJYX0lQX0NTVU1fRVJSKGNxZSkgXAorCQkJKCEoKGNxZSktPmZhc3RfcGF0aF9jcWUuc3RhdHVzX2ZsYWdzICYgXAorCQkJICAgRVRIX0ZBU1RfUEFUSF9SWF9DUUVfSVBfWFNVTV9OT19WQUxJREFUSU9OX0ZMRykgJiYgXAorCQkJICgoY3FlKS0+ZmFzdF9wYXRoX2NxZS50eXBlX2Vycm9yX2ZsYWdzICYgXAorCQkJICBFVEhfRkFTVF9QQVRIX1JYX0NRRV9JUF9CQURfWFNVTV9GTEcpKQorCisjZGVmaW5lIEJOWDJYX0w0X0NTVU1fRVJSKGNxZSkgXAorCQkJKCEoKGNxZSktPmZhc3RfcGF0aF9jcWUuc3RhdHVzX2ZsYWdzICYgXAorCQkJICAgRVRIX0ZBU1RfUEFUSF9SWF9DUUVfTDRfWFNVTV9OT19WQUxJREFUSU9OX0ZMRykgJiYgXAorCQkJICgoY3FlKS0+ZmFzdF9wYXRoX2NxZS50eXBlX2Vycm9yX2ZsYWdzICYgXAorCQkJICBFVEhfRkFTVF9QQVRIX1JYX0NRRV9MNF9CQURfWFNVTV9GTEcpKQorCisjZGVmaW5lIEJOWDJYX1JYX0NTVU1fT0soY3FlKSBcCisJCQkoIShCTlgyWF9MNF9DU1VNX0VSUihjcWUpIHx8IEJOWDJYX0lQX0NTVU1fRVJSKGNxZSkpKQorCisjZGVmaW5lIEJOWDJYX1BSU19GTEFHX09WRVJFVEhfSVBWNChmbGFncykgXAorCQkJCSgoKGxlMTZfdG9fY3B1KGZsYWdzKSAmIFwKKwkJCQkgICBQQVJTSU5HX0ZMQUdTX09WRVJfRVRIRVJORVRfUFJPVE9DT0wpID4+IFwKKwkJCQkgIFBBUlNJTkdfRkxBR1NfT1ZFUl9FVEhFUk5FVF9QUk9UT0NPTF9TSElGVCkgXAorCQkJCSA9PSBQUlNfRkxBR19PVkVSRVRIX0lQVjQpCisjZGVmaW5lIEJOWDJYX1JYX1NVTV9GSVgoY3FlKSBcCisJQk5YMlhfUFJTX0ZMQUdfT1ZFUkVUSF9JUFY0KGNxZS0+ZmFzdF9wYXRoX2NxZS5wYXJzX2ZsYWdzLmZsYWdzKQorCisKKyNkZWZpbmUgRlBfVVNCX0ZVTkNfT0ZGCQkJKDIgKyAyKkhDX1VTVE9STV9TQl9OVU1fSU5ESUNFUykKKyNkZWZpbmUgRlBfQ1NCX0ZVTkNfT0ZGCQkJKDIgKyAyKkhDX0NTVE9STV9TQl9OVU1fSU5ESUNFUykKKworI2RlZmluZSBVX1NCX0VUSF9SWF9DUV9JTkRFWAkJSENfSU5ERVhfVV9FVEhfUlhfQ1FfQ09OUworI2RlZmluZSBVX1NCX0VUSF9SWF9CRF9JTkRFWAkJSENfSU5ERVhfVV9FVEhfUlhfQkRfQ09OUworI2RlZmluZSBDX1NCX0VUSF9UWF9DUV9JTkRFWAkJSENfSU5ERVhfQ19FVEhfVFhfQ1FfQ09OUworCisjZGVmaW5lIEJOWDJYX1JYX1NCX0lOREVYIFwKKwkoJmZwLT5zdGF0dXNfYmxrLT51X3N0YXR1c19ibG9jay5pbmRleF92YWx1ZXNbVV9TQl9FVEhfUlhfQ1FfSU5ERVhdKQorCisjZGVmaW5lIEJOWDJYX1JYX1NCX0JEX0lOREVYIFwKKwkoJmZwLT5zdGF0dXNfYmxrLT51X3N0YXR1c19ibG9jay5pbmRleF92YWx1ZXNbVV9TQl9FVEhfUlhfQkRfSU5ERVhdKQorCisjZGVmaW5lIEJOWDJYX1JYX1NCX0lOREVYX05VTSBcCisJCSgoKFVfU0JfRVRIX1JYX0NRX0lOREVYIDw8IFwKKwkJICAgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19DUUVfU0JfSU5ERVhfTlVNQkVSX1NISUZUKSAmIFwKKwkJICBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0NRRV9TQl9JTkRFWF9OVU1CRVIpIHwgXAorCQkgKChVX1NCX0VUSF9SWF9CRF9JTkRFWCA8PCBcCisJCSAgIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfQkRfU0JfSU5ERVhfTlVNQkVSX1NISUZUKSAmIFwKKwkJICBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0JEX1NCX0lOREVYX05VTUJFUikpCisKKyNkZWZpbmUgQk5YMlhfVFhfU0JfSU5ERVggXAorCSgmZnAtPnN0YXR1c19ibGstPmNfc3RhdHVzX2Jsb2NrLmluZGV4X3ZhbHVlc1tDX1NCX0VUSF9UWF9DUV9JTkRFWF0pCisKKworLyogZW5kIG9mIGZhc3QgcGF0aCAqLworCisvKiBjb21tb24gKi8KKworc3RydWN0IGJueDJ4X2NvbW1vbiB7CisKKwl1MzIJCQljaGlwX2lkOworLyogY2hpcCBudW06MTYtMzEsIHJldjoxMi0xNSwgbWV0YWw6NC0xMSwgYm9uZF9pZDowLTMgKi8KKyNkZWZpbmUgQ0hJUF9JRChicCkJCQkoYnAtPmNvbW1vbi5jaGlwX2lkICYgMHhmZmZmZmZmMCkKKworI2RlZmluZSBDSElQX05VTShicCkJCQkoYnAtPmNvbW1vbi5jaGlwX2lkID4+IDE2KQorI2RlZmluZSBDSElQX05VTV81NzcxMAkJCTB4MTY0ZQorI2RlZmluZSBDSElQX05VTV81NzcxMQkJCTB4MTY0ZgorI2RlZmluZSBDSElQX05VTV81NzcxMUUJCQkweDE2NTAKKyNkZWZpbmUgQ0hJUF9JU19FMShicCkJCQkoQ0hJUF9OVU0oYnApID09IENISVBfTlVNXzU3NzEwKQorI2RlZmluZSBDSElQX0lTXzU3NzExKGJwKQkJKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzcxMSkKKyNkZWZpbmUgQ0hJUF9JU181NzcxMUUoYnApCQkoQ0hJUF9OVU0oYnApID09IENISVBfTlVNXzU3NzExRSkKKyNkZWZpbmUgQ0hJUF9JU19FMUgoYnApCQkJKENISVBfSVNfNTc3MTEoYnApIHx8IFwKKwkJCQkJIENISVBfSVNfNTc3MTFFKGJwKSkKKyNkZWZpbmUgSVNfRTFIX09GRlNFVAkJCUNISVBfSVNfRTFIKGJwKQorCisjZGVmaW5lIENISVBfUkVWKGJwKQkJCShicC0+Y29tbW9uLmNoaXBfaWQgJiAweDAwMDBmMDAwKQorI2RlZmluZSBDSElQX1JFVl9BeAkJCTB4MDAwMDAwMDAKKy8qIGFzc3VtZSBtYXhpbXVtIDUgcmV2aXNpb25zICovCisjZGVmaW5lIENISVBfUkVWX0lTX1NMT1coYnApCQkoQ0hJUF9SRVYoYnApID4gMHgwMDAwNTAwMCkKKy8qIEVtdWwgdmVyc2lvbnMgYXJlIEE9PjB4ZSwgQj0+MHhjLCBDPT4weGEsIEQ9PjgsIEU9PjYgKi8KKyNkZWZpbmUgQ0hJUF9SRVZfSVNfRU1VTChicCkJCSgoQ0hJUF9SRVZfSVNfU0xPVyhicCkpICYmIFwKKwkJCQkJICEoQ0hJUF9SRVYoYnApICYgMHgwMDAwMTAwMCkpCisvKiBGUEdBIHZlcnNpb25zIGFyZSBBPT4weGYsIEI9PjB4ZCwgQz0+MHhiLCBEPT45LCBFPT43ICovCisjZGVmaW5lIENISVBfUkVWX0lTX0ZQR0EoYnApCQkoKENISVBfUkVWX0lTX1NMT1coYnApKSAmJiBcCisJCQkJCSAoQ0hJUF9SRVYoYnApICYgMHgwMDAwMTAwMCkpCisKKyNkZWZpbmUgQ0hJUF9USU1FKGJwKQkJCSgoQ0hJUF9SRVZfSVNfRU1VTChicCkpID8gMjAwMCA6IFwKKwkJCQkJKChDSElQX1JFVl9JU19GUEdBKGJwKSkgPyAyMDAgOiAxKSkKKworI2RlZmluZSBDSElQX01FVEFMKGJwKQkJCShicC0+Y29tbW9uLmNoaXBfaWQgJiAweDAwMDAwZmYwKQorI2RlZmluZSBDSElQX0JPTkRfSUQoYnApCQkoYnAtPmNvbW1vbi5jaGlwX2lkICYgMHgwMDAwMDAwZikKKworCWludAkJCWZsYXNoX3NpemU7CisjZGVmaW5lIE5WUkFNXzFNQl9TSVpFCQkJMHgyMDAwMAkvKiAxTSBiaXQgaW4gYnl0ZXMgKi8KKyNkZWZpbmUgTlZSQU1fVElNRU9VVF9DT1VOVAkJMzAwMDAKKyNkZWZpbmUgTlZSQU1fUEFHRV9TSVpFCQkJMjU2CisKKwl1MzIJCQlzaG1lbV9iYXNlOworCXUzMgkJCXNobWVtMl9iYXNlOworCisJdTMyCQkJaHdfY29uZmlnOworCisJdTMyCQkJYmNfdmVyOworfTsKKworCisvKiBlbmQgb2YgY29tbW9uICovCisKKy8qIHBvcnQgKi8KKworc3RydWN0IGJueDJ4X3BvcnQgeworCXUzMgkJCXBtZjsKKworCXUzMgkJCWxpbmtfY29uZmlnOworCisJdTMyCQkJc3VwcG9ydGVkOworLyogbGluayBzZXR0aW5ncyAtIG1pc3NpbmcgZGVmaW5lcyAqLworI2RlZmluZSBTVVBQT1JURURfMjUwMGJhc2VYX0Z1bGwJKDEgPDwgMTUpCisKKwl1MzIJCQlhZHZlcnRpc2luZzsKKy8qIGxpbmsgc2V0dGluZ3MgLSBtaXNzaW5nIGRlZmluZXMgKi8KKyNkZWZpbmUgQURWRVJUSVNFRF8yNTAwYmFzZVhfRnVsbAkoMSA8PCAxNSkKKworCXUzMgkJCXBoeV9hZGRyOworCisJLyogdXNlZCB0byBzeW5jaHJvbml6ZSBwaHkgYWNjZXNzZXMgKi8KKwlzdHJ1Y3QgbXV0ZXgJCXBoeV9tdXRleDsKKwlpbnQJCQluZWVkX2h3X2xvY2s7CisKKwl1MzIJCQlwb3J0X3N0eDsKKworCXN0cnVjdCBuaWdfc3RhdHMJb2xkX25pZ19zdGF0czsKK307CisKKy8qIGVuZCBvZiBwb3J0ICovCisKKworCisjaWZkZWYgQkNNX0NOSUMKKyNkZWZpbmUgTUFYX0NPTlRFWFQJCQkxNQorI2Vsc2UKKyNkZWZpbmUgTUFYX0NPTlRFWFQJCQkxNgorI2VuZGlmCisKK3VuaW9uIGNkdV9jb250ZXh0IHsKKwlzdHJ1Y3QgZXRoX2NvbnRleHQgZXRoOworCWNoYXIgcGFkWzEwMjRdOworfTsKKworI2RlZmluZSBNQVhfRE1BRV9DCQkJOAorCisvKiBETUEgbWVtb3J5IG5vdCB1c2VkIGluIGZhc3RwYXRoICovCitzdHJ1Y3QgYm54Mnhfc2xvd3BhdGggeworCXVuaW9uIGNkdV9jb250ZXh0CQljb250ZXh0W01BWF9DT05URVhUXTsKKwlzdHJ1Y3QgZXRoX3N0YXRzX3F1ZXJ5CQlmd19zdGF0czsKKwlzdHJ1Y3QgbWFjX2NvbmZpZ3VyYXRpb25fY21kCW1hY19jb25maWc7CisJc3RydWN0IG1hY19jb25maWd1cmF0aW9uX2NtZAltY2FzdF9jb25maWc7CisKKwkvKiB1c2VkIGJ5IGRtYWUgY29tbWFuZCBleGVjdXRlciAqLworCXN0cnVjdCBkbWFlX2NvbW1hbmQJCWRtYWVbTUFYX0RNQUVfQ107CisKKwl1MzIJCQkJc3RhdHNfY29tcDsKKwl1bmlvbiBtYWNfc3RhdHMJCQltYWNfc3RhdHM7CisJc3RydWN0IG5pZ19zdGF0cwkJbmlnX3N0YXRzOworCXN0cnVjdCBob3N0X3BvcnRfc3RhdHMJCXBvcnRfc3RhdHM7CisJc3RydWN0IGhvc3RfZnVuY19zdGF0cwkJZnVuY19zdGF0czsKKwlzdHJ1Y3QgaG9zdF9mdW5jX3N0YXRzCQlmdW5jX3N0YXRzX2Jhc2U7CisKKwl1MzIJCQkJd2JfY29tcDsKKwl1MzIJCQkJd2JfZGF0YVs0XTsKK307CisKKyNkZWZpbmUgYm54Mnhfc3AoYnAsIHZhcikJCSgmYnAtPnNsb3dwYXRoLT52YXIpCisjZGVmaW5lIGJueDJ4X3NwX21hcHBpbmcoYnAsIHZhcikgXAorCQkoYnAtPnNsb3dwYXRoX21hcHBpbmcgKyBvZmZzZXRvZihzdHJ1Y3QgYm54Mnhfc2xvd3BhdGgsIHZhcikpCisKKworLyogYXR0biBncm91cCB3aXJpbmcgKi8KKyNkZWZpbmUgTUFYX0RZTkFNSUNfQVRUTl9HUlBTCQk4CisKK3N0cnVjdCBhdHRuX3JvdXRlIHsKKwl1MzIJc2lnWzRdOworfTsKKwordHlwZWRlZiBlbnVtIHsKKwlCTlgyWF9SRUNPVkVSWV9ET05FLAorCUJOWDJYX1JFQ09WRVJZX0lOSVQsCisJQk5YMlhfUkVDT1ZFUllfV0FJVCwKK30gYm54MnhfcmVjb3Zlcnlfc3RhdGVfdDsKKworc3RydWN0IGJueDJ4IHsKKwkvKiBGaWVsZHMgdXNlZCBpbiB0aGUgdHggYW5kIGludHIvbmFwaSBwZXJmb3JtYW5jZSBwYXRocworCSAqIGFyZSBncm91cGVkIHRvZ2V0aGVyIGluIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cnVjdHVyZQorCSAqLworCXN0cnVjdCBibngyeF9mYXN0cGF0aAlmcFtNQVhfQ09OVEVYVF07CisJdm9pZCBfX2lvbWVtCQkqcmVndmlldzsKKwl2b2lkIF9faW9tZW0JCSpkb29yYmVsbHM7CisjaWZkZWYgQkNNX0NOSUMKKyNkZWZpbmUgQk5YMlhfREJfU0laRQkJKDE4KkJDTV9QQUdFX1NJWkUpCisjZWxzZQorI2RlZmluZSBCTlgyWF9EQl9TSVpFCQkoMTYqQkNNX1BBR0VfU0laRSkKKyNlbmRpZgorCisJc3RydWN0IG5ldF9kZXZpY2UJKmRldjsKKwlzdHJ1Y3QgcGNpX2RldgkJKnBkZXY7CisKKwlhdG9taWNfdAkJaW50cl9zZW07CisKKwlibngyeF9yZWNvdmVyeV9zdGF0ZV90CXJlY292ZXJ5X3N0YXRlOworCWludAkJCWlzX2xlYWRlcjsKKyNpZmRlZiBCQ01fQ05JQworCXN0cnVjdCBtc2l4X2VudHJ5CW1zaXhfdGFibGVbTUFYX0NPTlRFWFQrMl07CisjZWxzZQorCXN0cnVjdCBtc2l4X2VudHJ5CW1zaXhfdGFibGVbTUFYX0NPTlRFWFQrMV07CisjZW5kaWYKKyNkZWZpbmUgSU5UX01PREVfSU5UeAkJCTEKKyNkZWZpbmUgSU5UX01PREVfTVNJCQkJMgorCisJaW50CQkJdHhfcmluZ19zaXplOworCisjaWZkZWYgQkNNX1ZMQU4KKwlzdHJ1Y3Qgdmxhbl9ncm91cAkqdmxncnA7CisjZW5kaWYKKworCXUzMgkJCXJ4X2NzdW07CisJdTMyCQkJcnhfYnVmX3NpemU7CisjZGVmaW5lIEVUSF9PVlJFSEVBRAkJCShFVEhfSExFTiArIDgpCS8qIDggZm9yIENSQyArIFZMQU4gKi8KKyNkZWZpbmUgRVRIX01JTl9QQUNLRVRfU0laRQkJNjAKKyNkZWZpbmUgRVRIX01BWF9QQUNLRVRfU0laRQkJMTUwMAorI2RlZmluZSBFVEhfTUFYX0pVTUJPX1BBQ0tFVF9TSVpFCTk2MDAKKworCS8qIE1heCBzdXBwb3J0ZWQgYWxpZ25tZW50IGlzIDI1NiAoOCBzaGlmdCkgKi8KKyNkZWZpbmUgQk5YMlhfUlhfQUxJR05fU0hJRlQJCSgoTDFfQ0FDSEVfU0hJRlQgPCA4KSA/IFwKKwkJCQkJIEwxX0NBQ0hFX1NISUZUIDogOCkKKyNkZWZpbmUgQk5YMlhfUlhfQUxJR04JCQkoMSA8PCBCTlgyWF9SWF9BTElHTl9TSElGVCkKKworCXN0cnVjdCBob3N0X2RlZl9zdGF0dXNfYmxvY2sgKmRlZl9zdGF0dXNfYmxrOworI2RlZmluZSBERUZfU0JfSUQJCQkxNgorCV9fbGUxNgkJCWRlZl9jX2lkeDsKKwlfX2xlMTYJCQlkZWZfdV9pZHg7CisJX19sZTE2CQkJZGVmX3hfaWR4OworCV9fbGUxNgkJCWRlZl90X2lkeDsKKwlfX2xlMTYJCQlkZWZfYXR0X2lkeDsKKwl1MzIJCQlhdHRuX3N0YXRlOworCXN0cnVjdCBhdHRuX3JvdXRlCWF0dG5fZ3JvdXBbTUFYX0RZTkFNSUNfQVRUTl9HUlBTXTsKKworCS8qIHNsb3cgcGF0aCByaW5nICovCisJc3RydWN0IGV0aF9zcGUJCSpzcHE7CisJZG1hX2FkZHJfdAkJc3BxX21hcHBpbmc7CisJdTE2CQkJc3BxX3Byb2RfaWR4OworCXN0cnVjdCBldGhfc3BlCQkqc3BxX3Byb2RfYmQ7CisJc3RydWN0IGV0aF9zcGUJCSpzcHFfbGFzdF9iZDsKKwlfX2xlMTYJCQkqZHNiX3NwX3Byb2Q7CisJdTE2CQkJc3BxX2xlZnQ7IC8qIHNlcmlhbGl6ZSBzcHEgKi8KKwkvKiB1c2VkIHRvIHN5bmNocm9uaXplIHNwcSBhY2Nlc3NlcyAqLworCXNwaW5sb2NrX3QJCXNwcV9sb2NrOworCisJLyogRmxhZ3MgZm9yIG1hcmtpbmcgdGhhdCB0aGVyZSBpcyBhIFNUQVRfUVVFUlkgb3IKKwkgICBTRVRfTUFDIHJhbXJvZCBwZW5kaW5nICovCisJaW50CQkJc3RhdHNfcGVuZGluZzsKKwlpbnQJCQlzZXRfbWFjX3BlbmRpbmc7CisKKwkvKiBFbmQgb2YgZmllbGRzIHVzZWQgaW4gdGhlIHBlcmZvcm1hbmNlIGNvZGUgcGF0aHMgKi8KKworCWludAkJCXBhbmljOworCWludAkJCW1zZ19lbmFibGU7CisKKwl1MzIJCQlmbGFnczsKKyNkZWZpbmUgUENJWF9GTEFHCQkJMQorI2RlZmluZSBQQ0lfMzJCSVRfRkxBRwkJCTIKKyNkZWZpbmUgT05FX1BPUlRfRkxBRwkJCTQKKyNkZWZpbmUgTk9fV09MX0ZMQUcJCQk4CisjZGVmaW5lIFVTSU5HX0RBQ19GTEFHCQkJMHgxMAorI2RlZmluZSBVU0lOR19NU0lYX0ZMQUcJCQkweDIwCisjZGVmaW5lIFVTSU5HX01TSV9GTEFHCQkJMHg0MAorI2RlZmluZSBUUEFfRU5BQkxFX0ZMQUcJCQkweDgwCisjZGVmaW5lIE5PX01DUF9GTEFHCQkJMHgxMDAKKyNkZWZpbmUgQlBfTk9NQ1AoYnApCQkJKGJwLT5mbGFncyAmIE5PX01DUF9GTEFHKQorI2RlZmluZSBIV19WTEFOX1RYX0ZMQUcJCQkweDQwMAorI2RlZmluZSBIV19WTEFOX1JYX0ZMQUcJCQkweDgwMAorI2RlZmluZSBNRl9GVU5DX0RJUwkJCTB4MTAwMAorCisJaW50CQkJZnVuYzsKKyNkZWZpbmUgQlBfUE9SVChicCkJCQkoYnAtPmZ1bmMgJSBQT1JUX01BWCkKKyNkZWZpbmUgQlBfRlVOQyhicCkJCQkoYnAtPmZ1bmMpCisjZGVmaW5lIEJQX0UxSFZOKGJwKQkJCShicC0+ZnVuYyA+PiAxKQorI2RlZmluZSBCUF9MX0lEKGJwKQkJCShCUF9FMUhWTihicCkgPDwgMikKKworI2lmZGVmIEJDTV9DTklDCisjZGVmaW5lIEJDTV9DTklDX0NJRF9TVEFSVAkJMTYKKyNkZWZpbmUgQkNNX0lTQ1NJX0VUSF9DTF9JRAkJMTcKKyNlbmRpZgorCisJaW50CQkJcG1fY2FwOworCWludAkJCXBjaWVfY2FwOworCWludAkJCW1ycnM7CisKKwlzdHJ1Y3QgZGVsYXllZF93b3JrCXNwX3Rhc2s7CisJc3RydWN0IGRlbGF5ZWRfd29yawlyZXNldF90YXNrOworCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOworCWludAkJCWN1cnJlbnRfaW50ZXJ2YWw7CisKKwl1MTYJCQlmd19zZXE7CisJdTE2CQkJZndfZHJ2X3B1bHNlX3dyX3NlcTsKKwl1MzIJCQlmdW5jX3N0eDsKKworCXN0cnVjdCBsaW5rX3BhcmFtcwlsaW5rX3BhcmFtczsKKwlzdHJ1Y3QgbGlua192YXJzCWxpbmtfdmFyczsKKwlzdHJ1Y3QgbWRpb19pZl9pbmZvCW1kaW87CisKKwlzdHJ1Y3QgYm54MnhfY29tbW9uCWNvbW1vbjsKKwlzdHJ1Y3QgYm54MnhfcG9ydAlwb3J0OworCisJc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0IGNtbmc7CisJdTMyCQkJdm5fd2VpZ2h0X3N1bTsKKworCXUzMgkJCW1mX2NvbmZpZzsKKwl1MTYJCQllMWhvdjsKKwl1OAkJCWUxaG1mOworI2RlZmluZSBJU19FMUhNRihicCkJCQkoYnAtPmUxaG1mICE9IDApCisKKwl1OAkJCXdvbDsKKworCWludAkJCXJ4X3Jpbmdfc2l6ZTsKKworCXUxNgkJCXR4X3F1aWNrX2NvbnNfdHJpcF9pbnQ7CisJdTE2CQkJdHhfcXVpY2tfY29uc190cmlwOworCXUxNgkJCXR4X3RpY2tzX2ludDsKKwl1MTYJCQl0eF90aWNrczsKKworCXUxNgkJCXJ4X3F1aWNrX2NvbnNfdHJpcF9pbnQ7CisJdTE2CQkJcnhfcXVpY2tfY29uc190cmlwOworCXUxNgkJCXJ4X3RpY2tzX2ludDsKKwl1MTYJCQlyeF90aWNrczsKKy8qIE1heGltYWwgY29hbGVzY2luZyB0aW1lb3V0IGluIHVzICovCisjZGVmaW5lIEJOWDJYX01BWF9DT0FMRVNDRV9UT1VUCQkoMHhmMCoxMikKKworCXUzMgkJCWxpbl9jbnQ7CisKKwlpbnQJCQlzdGF0ZTsKKyNkZWZpbmUgQk5YMlhfU1RBVEVfQ0xPU0VECQkwCisjZGVmaW5lIEJOWDJYX1NUQVRFX09QRU5JTkdfV0FJVDRfTE9BRAkweDEwMDAKKyNkZWZpbmUgQk5YMlhfU1RBVEVfT1BFTklOR19XQUlUNF9QT1JUCTB4MjAwMAorI2RlZmluZSBCTlgyWF9TVEFURV9PUEVOCQkweDMwMDAKKyNkZWZpbmUgQk5YMlhfU1RBVEVfQ0xPU0lOR19XQUlUNF9IQUxUCTB4NDAwMAorI2RlZmluZSBCTlgyWF9TVEFURV9DTE9TSU5HX1dBSVQ0X0RFTEVURSAweDUwMDAKKyNkZWZpbmUgQk5YMlhfU1RBVEVfQ0xPU0lOR19XQUlUNF9VTkxPQUQgMHg2MDAwCisjZGVmaW5lIEJOWDJYX1NUQVRFX0RJQUcJCTB4ZTAwMAorI2RlZmluZSBCTlgyWF9TVEFURV9FUlJPUgkJMHhmMDAwCisKKwlpbnQJCQltdWx0aV9tb2RlOworCWludAkJCW51bV9xdWV1ZXM7CisJaW50CQkJZGlzYWJsZV90cGE7CisJaW50CQkJaW50X21vZGU7CisKKwl1MzIJCQlyeF9tb2RlOworI2RlZmluZSBCTlgyWF9SWF9NT0RFX05PTkUJCTAKKyNkZWZpbmUgQk5YMlhfUlhfTU9ERV9OT1JNQUwJCTEKKyNkZWZpbmUgQk5YMlhfUlhfTU9ERV9BTExNVUxUSQkJMgorI2RlZmluZSBCTlgyWF9SWF9NT0RFX1BST01JU0MJCTMKKyNkZWZpbmUgQk5YMlhfTUFYX01VTFRJQ0FTVAkJNjQKKyNkZWZpbmUgQk5YMlhfTUFYX0VNVUxfTVVMVEkJCTE2CisKKwl1MzIgCQkJcnhfbW9kZV9jbF9tYXNrOworCisJZG1hX2FkZHJfdAkJZGVmX3N0YXR1c19ibGtfbWFwcGluZzsKKworCXN0cnVjdCBibngyeF9zbG93cGF0aAkqc2xvd3BhdGg7CisJZG1hX2FkZHJfdAkJc2xvd3BhdGhfbWFwcGluZzsKKworCWludAkJCWRyb3BsZXNzX2ZjOworCisjaWZkZWYgQkNNX0NOSUMKKwl1MzIJCQljbmljX2ZsYWdzOworI2RlZmluZSBCTlgyWF9DTklDX0ZMQUdfTUFDX1NFVAkJMQorCisJdm9pZAkJCSp0MTsKKwlkbWFfYWRkcl90CQl0MV9tYXBwaW5nOworCXZvaWQJCQkqdDI7CisJZG1hX2FkZHJfdAkJdDJfbWFwcGluZzsKKwl2b2lkCQkJKnRpbWVyczsKKwlkbWFfYWRkcl90CQl0aW1lcnNfbWFwcGluZzsKKwl2b2lkCQkJKnFtOworCWRtYV9hZGRyX3QJCXFtX21hcHBpbmc7CisJc3RydWN0IGNuaWNfb3BzCQkqY25pY19vcHM7CisJdm9pZAkJCSpjbmljX2RhdGE7CisJdTMyCQkJY25pY190YWc7CisJc3RydWN0IGNuaWNfZXRoX2RldgljbmljX2V0aF9kZXY7CisJc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrICpjbmljX3NiOworCWRtYV9hZGRyX3QJCWNuaWNfc2JfbWFwcGluZzsKKyNkZWZpbmUgQ05JQ19TQl9JRChicCkJCQlCUF9MX0lEKGJwKQorCXN0cnVjdCBldGhfc3BlCQkqY25pY19rd3E7CisJc3RydWN0IGV0aF9zcGUJCSpjbmljX2t3cV9wcm9kOworCXN0cnVjdCBldGhfc3BlCQkqY25pY19rd3FfY29uczsKKwlzdHJ1Y3QgZXRoX3NwZQkJKmNuaWNfa3dxX2xhc3Q7CisJdTE2CQkJY25pY19rd3FfcGVuZGluZzsKKwl1MTYJCQljbmljX3NwcV9wZW5kaW5nOworCXN0cnVjdCBtdXRleAkJY25pY19tdXRleDsKKwl1OAkJCWlzY3NpX21hY1s2XTsKKyNlbmRpZgorCisJaW50CQkJZG1hZV9yZWFkeTsKKwkvKiB1c2VkIHRvIHN5bmNocm9uaXplIGRtYWUgYWNjZXNzZXMgKi8KKwlzdHJ1Y3QgbXV0ZXgJCWRtYWVfbXV0ZXg7CisKKwkvKiB1c2VkIHRvIHByb3RlY3QgdGhlIEZXIG1haWwgYm94ICovCisJc3RydWN0IG11dGV4CQlmd19tYl9tdXRleDsKKworCS8qIHVzZWQgdG8gc3luY2hyb25pemUgc3RhdHMgY29sbGVjdGluZyAqLworCWludAkJCXN0YXRzX3N0YXRlOworCisJLyogdXNlZCBmb3Igc3luY2hyb25pemF0aW9uIG9mIGNvbmN1cnJlbnQgdGhyZWFkcyBzdGF0aXN0aWNzIGhhbmRsaW5nICovCisJc3BpbmxvY2tfdAkJc3RhdHNfbG9jazsKKworCS8qIHVzZWQgYnkgZG1hZSBjb21tYW5kIGxvYWRlciAqLworCXN0cnVjdCBkbWFlX2NvbW1hbmQJc3RhdHNfZG1hZTsKKwlpbnQJCQlleGVjdXRlcl9pZHg7CisKKwl1MTYJCQlzdGF0c19jb3VudGVyOworCXN0cnVjdCBibngyeF9ldGhfc3RhdHMJZXRoX3N0YXRzOworCisJc3RydWN0IHpfc3RyZWFtX3MJKnN0cm07CisJdm9pZAkJCSpndW56aXBfYnVmOworCWRtYV9hZGRyX3QJCWd1bnppcF9tYXBwaW5nOworCWludAkJCWd1bnppcF9vdXRsZW47CisjZGVmaW5lIEZXX0JVRl9TSVpFCQkJMHg4MDAwCisjZGVmaW5lIEdVTlpJUF9CVUYoYnApCQkJKGJwLT5ndW56aXBfYnVmKQorI2RlZmluZSBHVU5aSVBfUEhZUyhicCkJCQkoYnAtPmd1bnppcF9tYXBwaW5nKQorI2RlZmluZSBHVU5aSVBfT1VUTEVOKGJwKQkJKGJwLT5ndW56aXBfb3V0bGVuKQorCisJc3RydWN0IHJhd19vcAkJKmluaXRfb3BzOworCS8qIEluaXQgYmxvY2tzIG9mZnNldHMgaW5zaWRlIGluaXRfb3BzICovCisJdTE2CQkJKmluaXRfb3BzX29mZnNldHM7CisJLyogRGF0YSBibG9iIC0gaGFzIDMyIGJpdCBncmFudWxhcml0eSAqLworCXUzMgkJCSppbml0X2RhdGE7CisJLyogWmlwcGVkIFBSQU0gYmxvYnMgLSByYXcgZGF0YSAqLworCWNvbnN0IHU4CQkqdHNlbV9pbnRfdGFibGVfZGF0YTsKKwljb25zdCB1OAkJKnRzZW1fcHJhbV9kYXRhOworCWNvbnN0IHU4CQkqdXNlbV9pbnRfdGFibGVfZGF0YTsKKwljb25zdCB1OAkJKnVzZW1fcHJhbV9kYXRhOworCWNvbnN0IHU4CQkqeHNlbV9pbnRfdGFibGVfZGF0YTsKKwljb25zdCB1OAkJKnhzZW1fcHJhbV9kYXRhOworCWNvbnN0IHU4CQkqY3NlbV9pbnRfdGFibGVfZGF0YTsKKwljb25zdCB1OAkJKmNzZW1fcHJhbV9kYXRhOworI2RlZmluZSBJTklUX09QUyhicCkJCQkoYnAtPmluaXRfb3BzKQorI2RlZmluZSBJTklUX09QU19PRkZTRVRTKGJwKQkJKGJwLT5pbml0X29wc19vZmZzZXRzKQorI2RlZmluZSBJTklUX0RBVEEoYnApCQkJKGJwLT5pbml0X2RhdGEpCisjZGVmaW5lIElOSVRfVFNFTV9JTlRfVEFCTEVfREFUQShicCkJKGJwLT50c2VtX2ludF90YWJsZV9kYXRhKQorI2RlZmluZSBJTklUX1RTRU1fUFJBTV9EQVRBKGJwKQkJKGJwLT50c2VtX3ByYW1fZGF0YSkKKyNkZWZpbmUgSU5JVF9VU0VNX0lOVF9UQUJMRV9EQVRBKGJwKQkoYnAtPnVzZW1faW50X3RhYmxlX2RhdGEpCisjZGVmaW5lIElOSVRfVVNFTV9QUkFNX0RBVEEoYnApCQkoYnAtPnVzZW1fcHJhbV9kYXRhKQorI2RlZmluZSBJTklUX1hTRU1fSU5UX1RBQkxFX0RBVEEoYnApCShicC0+eHNlbV9pbnRfdGFibGVfZGF0YSkKKyNkZWZpbmUgSU5JVF9YU0VNX1BSQU1fREFUQShicCkJCShicC0+eHNlbV9wcmFtX2RhdGEpCisjZGVmaW5lIElOSVRfQ1NFTV9JTlRfVEFCTEVfREFUQShicCkJKGJwLT5jc2VtX2ludF90YWJsZV9kYXRhKQorI2RlZmluZSBJTklUX0NTRU1fUFJBTV9EQVRBKGJwKQkJKGJwLT5jc2VtX3ByYW1fZGF0YSkKKworCWNoYXIJCQlmd192ZXJbMzJdOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZQkqZmlybXdhcmU7Cit9OworCisKKyNkZWZpbmUgQk5YMlhfTUFYX1FVRVVFUyhicCkJKElTX0UxSE1GKGJwKSA/IChNQVhfQ09OVEVYVC9FMUhWTl9NQVgpIFwKKwkJCQkJICAgICAgOiBNQVhfQ09OVEVYVCkKKyNkZWZpbmUgQk5YMlhfTlVNX1FVRVVFUyhicCkJKGJwLT5udW1fcXVldWVzKQorI2RlZmluZSBpc19tdWx0aShicCkJCShCTlgyWF9OVU1fUVVFVUVTKGJwKSA+IDEpCisKKyNkZWZpbmUgZm9yX2VhY2hfcXVldWUoYnAsIHZhcikgXAorCQkJZm9yICh2YXIgPSAwOyB2YXIgPCBCTlgyWF9OVU1fUVVFVUVTKGJwKTsgdmFyKyspCisjZGVmaW5lIGZvcl9lYWNoX25vbmRlZmF1bHRfcXVldWUoYnAsIHZhcikgXAorCQkJZm9yICh2YXIgPSAxOyB2YXIgPCBCTlgyWF9OVU1fUVVFVUVTKGJwKTsgdmFyKyspCisKKwordm9pZCBibngyeF9yZWFkX2RtYWUoc3RydWN0IGJueDJ4ICpicCwgdTMyIHNyY19hZGRyLCB1MzIgbGVuMzIpOwordm9pZCBibngyeF93cml0ZV9kbWFlKHN0cnVjdCBibngyeCAqYnAsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHUzMiBkc3RfYWRkciwKKwkJICAgICAgdTMyIGxlbjMyKTsKK2ludCBibngyeF9nZXRfZ3BpbyhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZ3Bpb19udW0sIHU4IHBvcnQpOworaW50IGJueDJ4X3NldF9ncGlvKHN0cnVjdCBibngyeCAqYnAsIGludCBncGlvX251bSwgdTMyIG1vZGUsIHU4IHBvcnQpOworaW50IGJueDJ4X3NldF9ncGlvX2ludChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZ3Bpb19udW0sIHUzMiBtb2RlLCB1OCBwb3J0KTsKK3UzMiBibngyeF9md19jb21tYW5kKHN0cnVjdCBibngyeCAqYnAsIHUzMiBjb21tYW5kKTsKK3ZvaWQgYm54MnhfcmVnX3dyX2luZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYWRkciwgdTMyIHZhbCk7Cit2b2lkIGJueDJ4X3dyaXRlX2RtYWVfcGh5c19sZW4oc3RydWN0IGJueDJ4ICpicCwgZG1hX2FkZHJfdCBwaHlzX2FkZHIsCisJCQkgICAgICAgdTMyIGFkZHIsIHUzMiBsZW4pOwordm9pZCBibngyeF9jYWxjX2ZjX2FkdihzdHJ1Y3QgYm54MnggKmJwKTsKK2ludCBibngyeF9zcF9wb3N0KHN0cnVjdCBibngyeCAqYnAsIGludCBjb21tYW5kLCBpbnQgY2lkLAorCQkgIHUzMiBkYXRhX2hpLCB1MzIgZGF0YV9sbywgaW50IGNvbW1vbik7Cit2b2lkIGJueDJ4X3VwZGF0ZV9jb2FsZXNjZShzdHJ1Y3QgYm54MnggKmJwKTsKKworc3RhdGljIGlubGluZSB1MzIgcmVnX3BvbGwoc3RydWN0IGJueDJ4ICpicCwgdTMyIHJlZywgdTMyIGV4cGVjdGVkLCBpbnQgbXMsCisJCQkgICBpbnQgd2FpdCkKK3sKKwl1MzIgdmFsOworCisJZG8geworCQl2YWwgPSBSRUdfUkQoYnAsIHJlZyk7CisJCWlmICh2YWwgPT0gZXhwZWN0ZWQpCisJCQlicmVhazsKKwkJbXMgLT0gd2FpdDsKKwkJbXNsZWVwKHdhaXQpOworCisJfSB3aGlsZSAobXMgPiAwKTsKKworCXJldHVybiB2YWw7Cit9CisKKworLyogbG9hZC91bmxvYWQgbW9kZSAqLworI2RlZmluZSBMT0FEX05PUk1BTAkJCTAKKyNkZWZpbmUgTE9BRF9PUEVOCQkJMQorI2RlZmluZSBMT0FEX0RJQUcJCQkyCisjZGVmaW5lIFVOTE9BRF9OT1JNQUwJCQkwCisjZGVmaW5lIFVOTE9BRF9DTE9TRQkJCTEKKyNkZWZpbmUgVU5MT0FEX1JFQ09WRVJZICAgICAgICAgICAgICAgICAyCisKKworLyogRE1BRSBjb21tYW5kIGRlZmluZXMgKi8KKyNkZWZpbmUgRE1BRV9DTURfU1JDX1BDSQkJMAorI2RlZmluZSBETUFFX0NNRF9TUkNfR1JDCQlETUFFX0NPTU1BTkRfU1JDCisKKyNkZWZpbmUgRE1BRV9DTURfRFNUX1BDSQkJKDEgPDwgRE1BRV9DT01NQU5EX0RTVF9TSElGVCkKKyNkZWZpbmUgRE1BRV9DTURfRFNUX0dSQwkJKDIgPDwgRE1BRV9DT01NQU5EX0RTVF9TSElGVCkKKworI2RlZmluZSBETUFFX0NNRF9DX0RTVF9QQ0kJCTAKKyNkZWZpbmUgRE1BRV9DTURfQ19EU1RfR1JDCQkoMSA8PCBETUFFX0NPTU1BTkRfQ19EU1RfU0hJRlQpCisKKyNkZWZpbmUgRE1BRV9DTURfQ19FTkFCTEUJCURNQUVfQ09NTUFORF9DX1RZUEVfRU5BQkxFCisKKyNkZWZpbmUgRE1BRV9DTURfRU5ESUFOSVRZX05PX1NXQVAJKDAgPDwgRE1BRV9DT01NQU5EX0VORElBTklUWV9TSElGVCkKKyNkZWZpbmUgRE1BRV9DTURfRU5ESUFOSVRZX0JfU1dBUAkoMSA8PCBETUFFX0NPTU1BTkRfRU5ESUFOSVRZX1NISUZUKQorI2RlZmluZSBETUFFX0NNRF9FTkRJQU5JVFlfRFdfU1dBUAkoMiA8PCBETUFFX0NPTU1BTkRfRU5ESUFOSVRZX1NISUZUKQorI2RlZmluZSBETUFFX0NNRF9FTkRJQU5JVFlfQl9EV19TV0FQCSgzIDw8IERNQUVfQ09NTUFORF9FTkRJQU5JVFlfU0hJRlQpCisKKyNkZWZpbmUgRE1BRV9DTURfUE9SVF8wCQkJMAorI2RlZmluZSBETUFFX0NNRF9QT1JUXzEJCQlETUFFX0NPTU1BTkRfUE9SVAorCisjZGVmaW5lIERNQUVfQ01EX1NSQ19SRVNFVAkJRE1BRV9DT01NQU5EX1NSQ19SRVNFVAorI2RlZmluZSBETUFFX0NNRF9EU1RfUkVTRVQJCURNQUVfQ09NTUFORF9EU1RfUkVTRVQKKyNkZWZpbmUgRE1BRV9DTURfRTFIVk5fU0hJRlQJCURNQUVfQ09NTUFORF9FMUhWTl9TSElGVAorCisjZGVmaW5lIERNQUVfTEVOMzJfUkRfTUFYCQkweDgwCisjZGVmaW5lIERNQUVfTEVOMzJfV1JfTUFYKGJwKQkJKENISVBfSVNfRTEoYnApID8gMHg0MDAgOiAweDIwMDApCisKKyNkZWZpbmUgRE1BRV9DT01QX1ZBTAkJCTB4ZTBkMGQwYWUKKworI2RlZmluZSBNQVhfRE1BRV9DX1BFUl9QT1JUCQk4CisjZGVmaW5lIElOSVRfRE1BRV9DKGJwKQkJCShCUF9QT1JUKGJwKSAqIE1BWF9ETUFFX0NfUEVSX1BPUlQgKyBcCisJCQkJCSBCUF9FMUhWTihicCkpCisjZGVmaW5lIFBNRl9ETUFFX0MoYnApCQkJKEJQX1BPUlQoYnApICogTUFYX0RNQUVfQ19QRVJfUE9SVCArIFwKKwkJCQkJIEUxSFZOX01BWCkKKworCisvKiBQQ0lFIGxpbmsgYW5kIHNwZWVkICovCisjZGVmaW5lIFBDSUNGR19MSU5LX1dJRFRICQkweDFmMDAwMDAKKyNkZWZpbmUgUENJQ0ZHX0xJTktfV0lEVEhfU0hJRlQJCTIwCisjZGVmaW5lIFBDSUNGR19MSU5LX1NQRUVECQkweGYwMDAwCisjZGVmaW5lIFBDSUNGR19MSU5LX1NQRUVEX1NISUZUCQkxNgorCisKKyNkZWZpbmUgQk5YMlhfTlVNX1RFU1RTCQkJNworCisjZGVmaW5lIEJOWDJYX1BIWV9MT09QQkFDSwkJMAorI2RlZmluZSBCTlgyWF9NQUNfTE9PUEJBQ0sJCTEKKyNkZWZpbmUgQk5YMlhfUEhZX0xPT1BCQUNLX0ZBSUxFRAkxCisjZGVmaW5lIEJOWDJYX01BQ19MT09QQkFDS19GQUlMRUQJMgorI2RlZmluZSBCTlgyWF9MT09QQkFDS19GQUlMRUQJCShCTlgyWF9NQUNfTE9PUEJBQ0tfRkFJTEVEIHwgXAorCQkJCQkgQk5YMlhfUEhZX0xPT1BCQUNLX0ZBSUxFRCkKKworCisjZGVmaW5lIFNUUk9NX0FTU0VSVF9BUlJBWV9TSVpFCQk1MAorCisKKy8qIG11c3QgYmUgdXNlZCBvbiBhIENJRCBiZWZvcmUgcGxhY2luZyBpdCBvbiBhIEhXIHJpbmcgKi8KKyNkZWZpbmUgSFdfQ0lEKGJwLCB4KQkJCSgoQlBfUE9SVChicCkgPDwgMjMpIHwgXAorCQkJCQkgKEJQX0UxSFZOKGJwKSA8PCAxNykgfCAoeCkpCisKKyNkZWZpbmUgU1BfREVTQ19DTlQJCShCQ01fUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBldGhfc3BlKSkKKyNkZWZpbmUgTUFYX1NQX0RFU0NfQ05UCQkJKFNQX0RFU0NfQ05UIC0gMSkKKworCisjZGVmaW5lIEJOWDJYX0JUUgkJCTEKKyNkZWZpbmUgTUFYX1NQUV9QRU5ESU5HCQkJOAorCisKKy8qIENNTkcgY29uc3RhbnRzCisgICBkZXJpdmVkIGZyb20gbGFiIGV4cGVyaW1lbnRzLCBhbmQgbm90IGZyb20gc3lzdGVtIHNwZWMgY2FsY3VsYXRpb25zICEhISAqLworI2RlZmluZSBERUZfTUlOX1JBVEUJCQkxMDAKKy8qIHJlc29sdXRpb24gb2YgdGhlIHJhdGUgc2hhcGluZyB0aW1lciAtIDEwMCB1c2VjICovCisjZGVmaW5lIFJTX1BFUklPRElDX1RJTUVPVVRfVVNFQwkxMDAKKy8qIHJlc29sdXRpb24gb2YgZmFpcm5lc3MgYWxnb3JpdGhtIGluIHVzZWNzIC0KKyAgIGNvZWZmaWNpZW50IGZvciBjYWxjdWxhdGluZyB0aGUgYWN0dWFsIHQgZmFpciAqLworI2RlZmluZSBUX0ZBSVJfQ09FRgkJCTEwMDAwMDAwCisvKiBudW1iZXIgb2YgYnl0ZXMgaW4gc2luZ2xlIFFNIGFyYml0cmF0aW9uIGN5Y2xlIC0KKyAgIGNvZWZmaWNpZW50IGZvciBjYWxjdWxhdGluZyB0aGUgZmFpcm5lc3MgdGltZXIgKi8KKyNkZWZpbmUgUU1fQVJCX0JZVEVTCQkJNDAwMDAKKyNkZWZpbmUgRkFJUl9NRU0JCQkyCisKKworI2RlZmluZSBBVFROX05JR19GT1JfRlVOQwkJKDFMIDw8IDgpCisjZGVmaW5lIEFUVE5fU1dfVElNRVJfNF9GVU5DCQkoMUwgPDwgOSkKKyNkZWZpbmUgR1BJT18yX0ZVTkMJCQkoMUwgPDwgMTApCisjZGVmaW5lIEdQSU9fM19GVU5DCQkJKDFMIDw8IDExKQorI2RlZmluZSBHUElPXzRfRlVOQwkJCSgxTCA8PCAxMikKKyNkZWZpbmUgQVRUTl9HRU5FUkFMX0FUVE5fMQkJKDFMIDw8IDEzKQorI2RlZmluZSBBVFROX0dFTkVSQUxfQVRUTl8yCQkoMUwgPDwgMTQpCisjZGVmaW5lIEFUVE5fR0VORVJBTF9BVFROXzMJCSgxTCA8PCAxNSkKKyNkZWZpbmUgQVRUTl9HRU5FUkFMX0FUVE5fNAkJKDFMIDw8IDEzKQorI2RlZmluZSBBVFROX0dFTkVSQUxfQVRUTl81CQkoMUwgPDwgMTQpCisjZGVmaW5lIEFUVE5fR0VORVJBTF9BVFROXzYJCSgxTCA8PCAxNSkKKworI2RlZmluZSBBVFROX0hBUkRfV0lSRURfTUFTSwkJMHhmZjAwCisjZGVmaW5lIEFUVEVOVElPTl9JRAkJCTQKKworCisvKiBzdHVmZiBhZGRlZCB0byBtYWtlIHRoZSBjb2RlIGZpdCA4MENvbCAqLworCisjZGVmaW5lIEJOWDJYX1BNRl9MSU5LX0FTU0VSVCBcCisJR0VORVJBTF9BVFRFTl9PRkZTRVQoTElOS19TWU5DX0FUVEVOVElPTl9CSVRfRlVOQ18wICsgQlBfRlVOQyhicCkpCisKKyNkZWZpbmUgQk5YMlhfTUNfQVNTRVJUX0JJVFMgXAorCShHRU5FUkFMX0FUVEVOX09GRlNFVChUU1RPUk1fRkFUQUxfQVNTRVJUX0FUVEVOVElPTl9CSVQpIHwgXAorCSBHRU5FUkFMX0FUVEVOX09GRlNFVChVU1RPUk1fRkFUQUxfQVNTRVJUX0FUVEVOVElPTl9CSVQpIHwgXAorCSBHRU5FUkFMX0FUVEVOX09GRlNFVChDU1RPUk1fRkFUQUxfQVNTRVJUX0FUVEVOVElPTl9CSVQpIHwgXAorCSBHRU5FUkFMX0FUVEVOX09GRlNFVChYU1RPUk1fRkFUQUxfQVNTRVJUX0FUVEVOVElPTl9CSVQpKQorCisjZGVmaW5lIEJOWDJYX01DUF9BU1NFUlQgXAorCUdFTkVSQUxfQVRURU5fT0ZGU0VUKE1DUF9GQVRBTF9BU1NFUlRfQVRURU5USU9OX0JJVCkKKworI2RlZmluZSBCTlgyWF9HUkNfVElNRU9VVAlHRU5FUkFMX0FUVEVOX09GRlNFVChMQVRDSEVEX0FUVE5fVElNRU9VVF9HUkMpCisjZGVmaW5lIEJOWDJYX0dSQ19SU1YJCShHRU5FUkFMX0FUVEVOX09GRlNFVChMQVRDSEVEX0FUVE5fUkJDUikgfCBcCisJCQkJIEdFTkVSQUxfQVRURU5fT0ZGU0VUKExBVENIRURfQVRUTl9SQkNUKSB8IFwKKwkJCQkgR0VORVJBTF9BVFRFTl9PRkZTRVQoTEFUQ0hFRF9BVFROX1JCQ04pIHwgXAorCQkJCSBHRU5FUkFMX0FUVEVOX09GRlNFVChMQVRDSEVEX0FUVE5fUkJDVSkgfCBcCisJCQkJIEdFTkVSQUxfQVRURU5fT0ZGU0VUKExBVENIRURfQVRUTl9SQkNQKSB8IFwKKwkJCQkgR0VORVJBTF9BVFRFTl9PRkZTRVQoTEFUQ0hFRF9BVFROX1JTVkRfR1JDKSkKKworI2RlZmluZSBIV19JTlRFUlJVVF9BU1NFUlRfU0VUXzAgXAorCQkJCShBRVVfSU5QVVRTX0FUVE5fQklUU19UU0RNX0hXX0lOVEVSUlVQVCB8IFwKKwkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfVENNX0hXX0lOVEVSUlVQVCB8IFwKKwkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfVFNFTUlfSFdfSU5URVJSVVBUIHwgXAorCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19QQkZfSFdfSU5URVJSVVBUKQorI2RlZmluZSBIV19QUlRZX0FTU0VSVF9TRVRfMAkoQUVVX0lOUFVUU19BVFROX0JJVFNfQlJCX1BBUklUWV9FUlJPUiB8IFwKKwkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfUEFSU0VSX1BBUklUWV9FUlJPUiB8IFwKKwkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfVFNETV9QQVJJVFlfRVJST1IgfCBcCisJCQkJIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1NFQVJDSEVSX1BBUklUWV9FUlJPUiB8XAorCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19UU0VNSV9QQVJJVFlfRVJST1IpCisjZGVmaW5lIEhXX0lOVEVSUlVUX0FTU0VSVF9TRVRfMSBcCisJCQkJKEFFVV9JTlBVVFNfQVRUTl9CSVRTX1FNX0hXX0lOVEVSUlVQVCB8IFwKKwkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfVElNRVJTX0hXX0lOVEVSUlVQVCB8IFwKKwkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfWFNETV9IV19JTlRFUlJVUFQgfCBcCisJCQkJIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1hDTV9IV19JTlRFUlJVUFQgfCBcCisJCQkJIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1hTRU1JX0hXX0lOVEVSUlVQVCB8IFwKKwkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfVVNETV9IV19JTlRFUlJVUFQgfCBcCisJCQkJIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1VDTV9IV19JTlRFUlJVUFQgfCBcCisJCQkJIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1VTRU1JX0hXX0lOVEVSUlVQVCB8IFwKKwkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfVVBCX0hXX0lOVEVSUlVQVCB8IFwKKwkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfQ1NETV9IV19JTlRFUlJVUFQgfCBcCisJCQkJIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0NDTV9IV19JTlRFUlJVUFQpCisjZGVmaW5lIEhXX1BSVFlfQVNTRVJUX1NFVF8xCShBRVVfSU5QVVRTX0FUVE5fQklUU19QQkNMSUVOVF9QQVJJVFlfRVJST1IgfFwKKwkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfUU1fUEFSSVRZX0VSUk9SIHwgXAorCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19YU0RNX1BBUklUWV9FUlJPUiB8IFwKKwkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfWFNFTUlfUEFSSVRZX0VSUk9SIHwgXAorCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19ET09SQkVMTFFfUEFSSVRZX0VSUk9SIHxcCisJCQkgICAgIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1ZBVVhfUENJX0NPUkVfUEFSSVRZX0VSUk9SIHxcCisJCQkJIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0RFQlVHX1BBUklUWV9FUlJPUiB8IFwKKwkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfVVNETV9QQVJJVFlfRVJST1IgfCBcCisJCQkJIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1VTRU1JX1BBUklUWV9FUlJPUiB8IFwKKwkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfVVBCX1BBUklUWV9FUlJPUiB8IFwKKwkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfQ1NETV9QQVJJVFlfRVJST1IpCisjZGVmaW5lIEhXX0lOVEVSUlVUX0FTU0VSVF9TRVRfMiBcCisJCQkJKEFFVV9JTlBVVFNfQVRUTl9CSVRTX0NTRU1JX0hXX0lOVEVSUlVQVCB8IFwKKwkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfQ0RVX0hXX0lOVEVSUlVQVCB8IFwKKwkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfRE1BRV9IV19JTlRFUlJVUFQgfCBcCisJCQlBRVVfSU5QVVRTX0FUVE5fQklUU19QWFBQQ0lDTE9DS0NMSUVOVF9IV19JTlRFUlJVUFQgfFwKKwkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfTUlTQ19IV19JTlRFUlJVUFQpCisjZGVmaW5lIEhXX1BSVFlfQVNTRVJUX1NFVF8yCShBRVVfSU5QVVRTX0FUVE5fQklUU19DU0VNSV9QQVJJVFlfRVJST1IgfCBcCisJCQkJIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1BYUF9QQVJJVFlfRVJST1IgfCBcCisJCQlBRVVfSU5QVVRTX0FUVE5fQklUU19QWFBQQ0lDTE9DS0NMSUVOVF9QQVJJVFlfRVJST1IgfFwKKwkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfQ0ZDX1BBUklUWV9FUlJPUiB8IFwKKwkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfQ0RVX1BBUklUWV9FUlJPUiB8IFwKKwkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfSUdVX1BBUklUWV9FUlJPUiB8IFwKKwkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfTUlTQ19QQVJJVFlfRVJST1IpCisKKyNkZWZpbmUgSFdfUFJUWV9BU1NFUlRfU0VUXzMgKEFFVV9JTlBVVFNfQVRUTl9CSVRTX01DUF9MQVRDSEVEX1JPTV9QQVJJVFkgfCBcCisJCUFFVV9JTlBVVFNfQVRUTl9CSVRTX01DUF9MQVRDSEVEX1VNUF9SWF9QQVJJVFkgfCBcCisJCUFFVV9JTlBVVFNfQVRUTl9CSVRTX01DUF9MQVRDSEVEX1VNUF9UWF9QQVJJVFkgfCBcCisJCUFFVV9JTlBVVFNfQVRUTl9CSVRTX01DUF9MQVRDSEVEX1NDUEFEX1BBUklUWSkKKworI2RlZmluZSBSU1NfRkxBR1MoYnApIFwKKwkJKFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfSVBWNF9DQVBBQklMSVRZIHwgXAorCQkgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY0X1RDUF9DQVBBQklMSVRZIHwgXAorCQkgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY2X0NBUEFCSUxJVFkgfCBcCisJCSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjZfVENQX0NBUEFCSUxJVFkgfCBcCisJCSAoYnAtPm11bHRpX21vZGUgPDwgXAorCQkgIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfTU9ERV9TSElGVCkpCisjZGVmaW5lIE1VTFRJX01BU0sJCQkweDdmCisKKworI2RlZmluZSBERUZfVVNCX0ZVTkNfT0ZGCQkoMiArIDIqSENfVVNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFUykKKyNkZWZpbmUgREVGX0NTQl9GVU5DX09GRgkJKDIgKyAyKkhDX0NTVE9STV9ERUZfU0JfTlVNX0lORElDRVMpCisjZGVmaW5lIERFRl9YU0JfRlVOQ19PRkYJCSgyICsgMipIQ19YU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTKQorI2RlZmluZSBERUZfVFNCX0ZVTkNfT0ZGCQkoMiArIDIqSENfVFNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFUykKKworI2RlZmluZSBDX0RFRl9TQl9TUF9JTkRFWAkJSENfSU5ERVhfREVGX0NfRVRIX1NMT1dfUEFUSAorCisjZGVmaW5lIEJOWDJYX1NQX0RTQl9JTkRFWCBcCisoJmJwLT5kZWZfc3RhdHVzX2Jsay0+Y19kZWZfc3RhdHVzX2Jsb2NrLmluZGV4X3ZhbHVlc1tDX0RFRl9TQl9TUF9JTkRFWF0pCisKKworI2RlZmluZSBDQU1fSVNfSU5WQUxJRCh4KSBcCisoeC50YXJnZXRfdGFibGVfZW50cnkuZmxhZ3MgPT0gVFNUT1JNX0NBTV9UQVJHRVRfVEFCTEVfRU5UUllfQUNUSU9OX1RZUEUpCisKKyNkZWZpbmUgQ0FNX0lOVkFMSURBVEUoeCkgXAorCSh4LnRhcmdldF90YWJsZV9lbnRyeS5mbGFncyA9IFRTVE9STV9DQU1fVEFSR0VUX1RBQkxFX0VOVFJZX0FDVElPTl9UWVBFKQorCisKKy8qIE51bWJlciBvZiB1MzIgZWxlbWVudHMgaW4gTUMgaGFzaCBhcnJheSAqLworI2RlZmluZSBNQ19IQVNIX1NJWkUJCQk4CisjZGVmaW5lIE1DX0hBU0hfT0ZGU0VUKGJwLCBpKQkJKEJBUl9UU1RST1JNX0lOVE1FTSArIFwKKwlUU1RPUk1fQVBQUk9YSU1BVEVfTUFUQ0hfTVVMVElDQVNUX0ZJTFRFUklOR19PRkZTRVQoQlBfRlVOQyhicCkpICsgaSo0KQorCisKKyNpZm5kZWYgUFhQMl9SRUdfUFhQMl9JTlRfU1RTCisjZGVmaW5lIFBYUDJfUkVHX1BYUDJfSU5UX1NUUwkJUFhQMl9SRUdfUFhQMl9JTlRfU1RTXzAKKyNlbmRpZgorCisjZGVmaW5lIEJOWDJYX1ZQRF9MRU4JCQkxMjgKKyNkZWZpbmUgVkVORE9SX0lEX0xFTgkJCTQKKworI2lmZGVmIEJOWDJYX01BSU4KKyNkZWZpbmUgQk5YMlhfRVhURVJOCisjZWxzZQorI2RlZmluZSBCTlgyWF9FWFRFUk4gZXh0ZXJuCisjZW5kaWYKKworQk5YMlhfRVhURVJOIGludCBsb2FkX2NvdW50WzNdOyAvKiAwLWNvbW1vbiwgMS1wb3J0MCwgMi1wb3J0MSAqLworCisvKiBNSVNDX1JFR19SRVNFVF9SRUcgLSB0aGlzIGlzIGhlcmUgZm9yIHRoZSBoc2kgdG8gd29yayBkb24ndCB0b3VjaCAqLworCitleHRlcm4gdm9pZCBibngyeF9zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CisKK3ZvaWQgYm54MnhfcG9zdF9kbWFlKHN0cnVjdCBibngyeCAqYnAsIHN0cnVjdCBkbWFlX2NvbW1hbmQgKmRtYWUsIGludCBpZHgpOworCisjZW5kaWYgLyogYm54MnguaCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmMgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9jbW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmJmNzEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmMKQEAgLTAsMCArMSwyMjUyIEBACisvKiBibngyeF9jbW4uYzogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBNYWludGFpbmVkIGJ5OiBFaWxvbiBHcmVlbnN0ZWluIDxlaWxvbmdAYnJvYWRjb20uY29tPgorICogV3JpdHRlbiBieTogRWxpZXplciBUYW1pcgorICogQmFzZWQgb24gY29kZSBmcm9tIE1pY2hhZWwgQ2hhbidzIGJueDIgZHJpdmVyCisgKiBVRFAgQ1NVTSBlcnJhdGEgd29ya2Fyb3VuZCBieSBBcmlrIEdlbmRlbG1hbgorICogU2xvd3BhdGggYW5kIGZhc3RwYXRoIHJld29yayBieSBWbGFkaXNsYXYgWm9sb3Rhcm92CisgKiBTdGF0aXN0aWNzIGFuZCBMaW5rIG1hbmFnZW1lbnQgYnkgWWl0Y2hhayBHZXJ0bmVyCisgKgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CisjaW5jbHVkZSA8bmV0L2lwNl9jaGVja3N1bS5oPgorI2luY2x1ZGUgImJueDJ4X2Ntbi5oIgorCisjaWZkZWYgQkNNX1ZMQU4KKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjZW5kaWYKKworc3RhdGljIGludCBibngyeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7CisKKy8qIGZyZWUgc2tiIGluIHRoZSBwYWNrZXQgcmluZyBhdCBwb3MgaWR4CisgKiByZXR1cm4gaWR4IG9mIGxhc3QgYmQgZnJlZWQKKyAqLworc3RhdGljIHUxNiBibngyeF9mcmVlX3R4X3BrdChzdHJ1Y3QgYm54MnggKmJwLCBzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwLAorCQkJICAgICB1MTYgaWR4KQoreworCXN0cnVjdCBzd190eF9iZCAqdHhfYnVmID0gJmZwLT50eF9idWZfcmluZ1tpZHhdOworCXN0cnVjdCBldGhfdHhfc3RhcnRfYmQgKnR4X3N0YXJ0X2JkOworCXN0cnVjdCBldGhfdHhfYmQgKnR4X2RhdGFfYmQ7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4X2J1Zi0+c2tiOworCXUxNiBiZF9pZHggPSBUWF9CRCh0eF9idWYtPmZpcnN0X2JkKSwgbmV3X2NvbnM7CisJaW50IG5iZDsKKworCS8qIHByZWZldGNoIHNrYiBlbmQgcG9pbnRlciB0byBzcGVlZHVwIGRldl9rZnJlZV9za2IoKSAqLworCXByZWZldGNoKCZza2ItPmVuZCk7CisKKwlEUChCTlgyWF9NU0dfT0ZGLCAicGt0X2lkeCAlZCAgYnVmZiBAKCVwKS0+c2tiICVwXG4iLAorCSAgIGlkeCwgdHhfYnVmLCBza2IpOworCisJLyogdW5tYXAgZmlyc3QgYmQgKi8KKwlEUChCTlgyWF9NU0dfT0ZGLCAiZnJlZSBiZF9pZHggJWRcbiIsIGJkX2lkeCk7CisJdHhfc3RhcnRfYmQgPSAmZnAtPnR4X2Rlc2NfcmluZ1tiZF9pZHhdLnN0YXJ0X2JkOworCWRtYV91bm1hcF9zaW5nbGUoJmJwLT5wZGV2LT5kZXYsIEJEX1VOTUFQX0FERFIodHhfc3RhcnRfYmQpLAorCQkJIEJEX1VOTUFQX0xFTih0eF9zdGFydF9iZCksIFBDSV9ETUFfVE9ERVZJQ0UpOworCisJbmJkID0gbGUxNl90b19jcHUodHhfc3RhcnRfYmQtPm5iZCkgLSAxOworI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKKwlpZiAoKG5iZCAtIDEpID4gKE1BWF9TS0JfRlJBR1MgKyAyKSkgeworCQlCTlgyWF9FUlIoIkJBRCBuYmQhXG4iKTsKKwkJYm54MnhfcGFuaWMoKTsKKwl9CisjZW5kaWYKKwluZXdfY29ucyA9IG5iZCArIHR4X2J1Zi0+Zmlyc3RfYmQ7CisKKwkvKiBHZXQgdGhlIG5leHQgYmQgKi8KKwliZF9pZHggPSBUWF9CRChORVhUX1RYX0lEWChiZF9pZHgpKTsKKworCS8qIFNraXAgYSBwYXJzZSBiZC4uLiAqLworCS0tbmJkOworCWJkX2lkeCA9IFRYX0JEKE5FWFRfVFhfSURYKGJkX2lkeCkpOworCisJLyogLi4uYW5kIHRoZSBUU08gc3BsaXQgaGVhZGVyIGJkIHNpbmNlIHRoZXkgaGF2ZSBubyBtYXBwaW5nICovCisJaWYgKHR4X2J1Zi0+ZmxhZ3MgJiBCTlgyWF9UU09fU1BMSVRfQkQpIHsKKwkJLS1uYmQ7CisJCWJkX2lkeCA9IFRYX0JEKE5FWFRfVFhfSURYKGJkX2lkeCkpOworCX0KKworCS8qIG5vdyBmcmVlIGZyYWdzICovCisJd2hpbGUgKG5iZCA+IDApIHsKKworCQlEUChCTlgyWF9NU0dfT0ZGLCAiZnJlZSBmcmFnIGJkX2lkeCAlZFxuIiwgYmRfaWR4KTsKKwkJdHhfZGF0YV9iZCA9ICZmcC0+dHhfZGVzY19yaW5nW2JkX2lkeF0ucmVnX2JkOworCQlkbWFfdW5tYXBfcGFnZSgmYnAtPnBkZXYtPmRldiwgQkRfVU5NQVBfQUREUih0eF9kYXRhX2JkKSwKKwkJCSAgICAgICBCRF9VTk1BUF9MRU4odHhfZGF0YV9iZCksIERNQV9UT19ERVZJQ0UpOworCQlpZiAoLS1uYmQpCisJCQliZF9pZHggPSBUWF9CRChORVhUX1RYX0lEWChiZF9pZHgpKTsKKwl9CisKKwkvKiByZWxlYXNlIHNrYiAqLworCVdBUk5fT04oIXNrYik7CisJZGV2X2tmcmVlX3NrYihza2IpOworCXR4X2J1Zi0+Zmlyc3RfYmQgPSAwOworCXR4X2J1Zi0+c2tiID0gTlVMTDsKKworCXJldHVybiBuZXdfY29uczsKK30KKworaW50IGJueDJ4X3R4X2ludChzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBmcC0+YnA7CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOworCXUxNiBod19jb25zLCBzd19jb25zLCBiZF9jb25zID0gZnAtPnR4X2JkX2NvbnM7CisKKyNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCisJaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCisJCXJldHVybiAtMTsKKyNlbmRpZgorCisJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShicC0+ZGV2LCBmcC0+aW5kZXgpOworCWh3X2NvbnMgPSBsZTE2X3RvX2NwdSgqZnAtPnR4X2NvbnNfc2IpOworCXN3X2NvbnMgPSBmcC0+dHhfcGt0X2NvbnM7CisKKwl3aGlsZSAoc3dfY29ucyAhPSBod19jb25zKSB7CisJCXUxNiBwa3RfY29uczsKKworCQlwa3RfY29ucyA9IFRYX0JEKHN3X2NvbnMpOworCisJCS8qIHByZWZldGNoKGJwLT50eF9idWZfcmluZ1twa3RfY29uc10uc2tiKTsgKi8KKworCQlEUChORVRJRl9NU0dfVFhfRE9ORSwgImh3X2NvbnMgJXUgIHN3X2NvbnMgJXUgIHBrdF9jb25zICV1XG4iLAorCQkgICBod19jb25zLCBzd19jb25zLCBwa3RfY29ucyk7CisKKy8qCQlpZiAoTkVYVF9UWF9JRFgoc3dfY29ucykgIT0gaHdfY29ucykgeworCQkJcm1iKCk7CisJCQlwcmVmZXRjaChmcC0+dHhfYnVmX3JpbmdbTkVYVF9UWF9JRFgoc3dfY29ucyldLnNrYik7CisJCX0KKyovCisJCWJkX2NvbnMgPSBibngyeF9mcmVlX3R4X3BrdChicCwgZnAsIHBrdF9jb25zKTsKKwkJc3dfY29ucysrOworCX0KKworCWZwLT50eF9wa3RfY29ucyA9IHN3X2NvbnM7CisJZnAtPnR4X2JkX2NvbnMgPSBiZF9jb25zOworCisJLyogTmVlZCB0byBtYWtlIHRoZSB0eF9iZF9jb25zIHVwZGF0ZSB2aXNpYmxlIHRvIHN0YXJ0X3htaXQoKQorCSAqIGJlZm9yZSBjaGVja2luZyBmb3IgbmV0aWZfdHhfcXVldWVfc3RvcHBlZCgpLiAgV2l0aG91dCB0aGUKKwkgKiBtZW1vcnkgYmFycmllciwgdGhlcmUgaXMgYSBzbWFsbCBwb3NzaWJpbGl0eSB0aGF0CisJICogc3RhcnRfeG1pdCgpIHdpbGwgbWlzcyBpdCBhbmQgY2F1c2UgdGhlIHF1ZXVlIHRvIGJlIHN0b3BwZWQKKwkgKiBmb3JldmVyLgorCSAqLworCXNtcF9tYigpOworCisJLyogVEJEIG5lZWQgYSB0aHJlc2g/ICovCisJaWYgKHVubGlrZWx5KG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkpIHsKKwkJLyogVGFraW5nIHR4X2xvY2soKSBpcyBuZWVkZWQgdG8gcHJldmVudCByZWVuYWJsaW5nIHRoZSBxdWV1ZQorCQkgKiB3aGlsZSBpdCdzIGVtcHR5LiBUaGlzIGNvdWxkIGhhdmUgaGFwcGVuIGlmIHJ4X2FjdGlvbigpIGdldHMKKwkJICogc3VzcGVuZGVkIGluIGJueDJ4X3R4X2ludCgpIGFmdGVyIHRoZSBjb25kaXRpb24gYmVmb3JlCisJCSAqIG5ldGlmX3R4X3dha2VfcXVldWUoKSwgd2hpbGUgdHhfYWN0aW9uIChibngyeF9zdGFydF94bWl0KCkpOgorCQkgKgorCQkgKiBzdG9wcyB0aGUgcXVldWUtPnNlZXMgZnJlc2ggdHhfYmRfY29ucy0+cmVsZWFzZXMgdGhlIHF1ZXVlLT4KKwkJICogc2VuZHMgc29tZSBwYWNrZXRzIGNvbnN1bWluZyB0aGUgd2hvbGUgcXVldWUgYWdhaW4tPgorCQkgKiBzdG9wcyB0aGUgcXVldWUKKwkJICovCisKKwkJX19uZXRpZl90eF9sb2NrKHR4cSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKworCQlpZiAoKG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkgJiYKKwkJICAgIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfT1BFTikgJiYKKwkJICAgIChibngyeF90eF9hdmFpbChmcCkgPj0gTUFYX1NLQl9GUkFHUyArIDMpKQorCQkJbmV0aWZfdHhfd2FrZV9xdWV1ZSh0eHEpOworCisJCV9fbmV0aWZfdHhfdW5sb2NrKHR4cSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfdXBkYXRlX2xhc3RfbWF4X3NnZShzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwLAorCQkJCQkgICAgIHUxNiBpZHgpCit7CisJdTE2IGxhc3RfbWF4ID0gZnAtPmxhc3RfbWF4X3NnZTsKKworCWlmIChTVUJfUzE2KGlkeCwgbGFzdF9tYXgpID4gMCkKKwkJZnAtPmxhc3RfbWF4X3NnZSA9IGlkeDsKK30KKworc3RhdGljIHZvaWQgYm54MnhfdXBkYXRlX3NnZV9wcm9kKHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsCisJCQkJICBzdHJ1Y3QgZXRoX2Zhc3RfcGF0aF9yeF9jcWUgKmZwX2NxZSkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gZnAtPmJwOworCXUxNiBzZ2VfbGVuID0gU0dFX1BBR0VfQUxJR04obGUxNl90b19jcHUoZnBfY3FlLT5wa3RfbGVuKSAtCisJCQkJICAgICBsZTE2X3RvX2NwdShmcF9jcWUtPmxlbl9vbl9iZCkpID4+CisJCSAgICAgIFNHRV9QQUdFX1NISUZUOworCXUxNiBsYXN0X21heCwgbGFzdF9lbGVtLCBmaXJzdF9lbGVtOworCXUxNiBkZWx0YSA9IDA7CisJdTE2IGk7CisKKwlpZiAoIXNnZV9sZW4pCisJCXJldHVybjsKKworCS8qIEZpcnN0IG1hcmsgYWxsIHVzZWQgcGFnZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2dlX2xlbjsgaSsrKQorCQlTR0VfTUFTS19DTEVBUl9CSVQoZnAsIFJYX1NHRShsZTE2X3RvX2NwdShmcF9jcWUtPnNnbFtpXSkpKTsKKworCURQKE5FVElGX01TR19SWF9TVEFUVVMsICJmcF9jcWUtPnNnbFslZF0gPSAlZFxuIiwKKwkgICBzZ2VfbGVuIC0gMSwgbGUxNl90b19jcHUoZnBfY3FlLT5zZ2xbc2dlX2xlbiAtIDFdKSk7CisKKwkvKiBIZXJlIHdlIGFzc3VtZSB0aGF0IHRoZSBsYXN0IFNHRSBpbmRleCBpcyB0aGUgYmlnZ2VzdCAqLworCXByZWZldGNoKCh2b2lkICopKGZwLT5zZ2VfbWFzaykpOworCWJueDJ4X3VwZGF0ZV9sYXN0X21heF9zZ2UoZnAsIGxlMTZfdG9fY3B1KGZwX2NxZS0+c2dsW3NnZV9sZW4gLSAxXSkpOworCisJbGFzdF9tYXggPSBSWF9TR0UoZnAtPmxhc3RfbWF4X3NnZSk7CisJbGFzdF9lbGVtID0gbGFzdF9tYXggPj4gUlhfU0dFX01BU0tfRUxFTV9TSElGVDsKKwlmaXJzdF9lbGVtID0gUlhfU0dFKGZwLT5yeF9zZ2VfcHJvZCkgPj4gUlhfU0dFX01BU0tfRUxFTV9TSElGVDsKKworCS8qIElmIHJpbmcgaXMgbm90IGZ1bGwgKi8KKwlpZiAobGFzdF9lbGVtICsgMSAhPSBmaXJzdF9lbGVtKQorCQlsYXN0X2VsZW0rKzsKKworCS8qIE5vdyB1cGRhdGUgdGhlIHByb2QgKi8KKwlmb3IgKGkgPSBmaXJzdF9lbGVtOyBpICE9IGxhc3RfZWxlbTsgaSA9IE5FWFRfU0dFX01BU0tfRUxFTShpKSkgeworCQlpZiAobGlrZWx5KGZwLT5zZ2VfbWFza1tpXSkpCisJCQlicmVhazsKKworCQlmcC0+c2dlX21hc2tbaV0gPSBSWF9TR0VfTUFTS19FTEVNX09ORV9NQVNLOworCQlkZWx0YSArPSBSWF9TR0VfTUFTS19FTEVNX1NaOworCX0KKworCWlmIChkZWx0YSA+IDApIHsKKwkJZnAtPnJ4X3NnZV9wcm9kICs9IGRlbHRhOworCQkvKiBjbGVhciBwYWdlLWVuZCBlbnRyaWVzICovCisJCWJueDJ4X2NsZWFyX3NnZV9tYXNrX25leHRfZWxlbXMoZnApOworCX0KKworCURQKE5FVElGX01TR19SWF9TVEFUVVMsCisJICAgImZwLT5sYXN0X21heF9zZ2UgPSAlZCAgZnAtPnJ4X3NnZV9wcm9kID0gJWRcbiIsCisJICAgZnAtPmxhc3RfbWF4X3NnZSwgZnAtPnJ4X3NnZV9wcm9kKTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfdHBhX3N0YXJ0KHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsIHUxNiBxdWV1ZSwKKwkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgY29ucywgdTE2IHByb2QpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IGZwLT5icDsKKwlzdHJ1Y3Qgc3dfcnhfYmQgKmNvbnNfcnhfYnVmID0gJmZwLT5yeF9idWZfcmluZ1tjb25zXTsKKwlzdHJ1Y3Qgc3dfcnhfYmQgKnByb2RfcnhfYnVmID0gJmZwLT5yeF9idWZfcmluZ1twcm9kXTsKKwlzdHJ1Y3QgZXRoX3J4X2JkICpwcm9kX2JkID0gJmZwLT5yeF9kZXNjX3JpbmdbcHJvZF07CisJZG1hX2FkZHJfdCBtYXBwaW5nOworCisJLyogbW92ZSBlbXB0eSBza2IgZnJvbSBwb29sIHRvIHByb2QgYW5kIG1hcCBpdCAqLworCXByb2RfcnhfYnVmLT5za2IgPSBmcC0+dHBhX3Bvb2xbcXVldWVdLnNrYjsKKwltYXBwaW5nID0gZG1hX21hcF9zaW5nbGUoJmJwLT5wZGV2LT5kZXYsIGZwLT50cGFfcG9vbFtxdWV1ZV0uc2tiLT5kYXRhLAorCQkJCSBicC0+cnhfYnVmX3NpemUsIERNQV9GUk9NX0RFVklDRSk7CisJZG1hX3VubWFwX2FkZHJfc2V0KHByb2RfcnhfYnVmLCBtYXBwaW5nLCBtYXBwaW5nKTsKKworCS8qIG1vdmUgcGFydGlhbCBza2IgZnJvbSBjb25zIHRvIHBvb2wgKGRvbid0IHVubWFwIHlldCkgKi8KKwlmcC0+dHBhX3Bvb2xbcXVldWVdID0gKmNvbnNfcnhfYnVmOworCisJLyogbWFyayBiaW4gc3RhdGUgYXMgc3RhcnQgLSBwcmludCBlcnJvciBpZiBjdXJyZW50IHN0YXRlICE9IHN0b3AgKi8KKwlpZiAoZnAtPnRwYV9zdGF0ZVtxdWV1ZV0gIT0gQk5YMlhfVFBBX1NUT1ApCisJCUJOWDJYX0VSUigic3RhcnQgb2YgYmluIG5vdCBpbiBzdG9wIFslZF1cbiIsIHF1ZXVlKTsKKworCWZwLT50cGFfc3RhdGVbcXVldWVdID0gQk5YMlhfVFBBX1NUQVJUOworCisJLyogcG9pbnQgcHJvZF9iZCB0byBuZXcgc2tiICovCisJcHJvZF9iZC0+YWRkcl9oaSA9IGNwdV90b19sZTMyKFU2NF9ISShtYXBwaW5nKSk7CisJcHJvZF9iZC0+YWRkcl9sbyA9IGNwdV90b19sZTMyKFU2NF9MTyhtYXBwaW5nKSk7CisKKyNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCisJZnAtPnRwYV9xdWV1ZV91c2VkIHw9ICgxIDw8IHF1ZXVlKTsKKyNpZmRlZiBfQVNNX0dFTkVSSUNfSU5UX0w2NF9ICisJRFAoTkVUSUZfTVNHX1JYX1NUQVRVUywgImZwLT50cGFfcXVldWVfdXNlZCA9IDB4JWx4XG4iLAorI2Vsc2UKKwlEUChORVRJRl9NU0dfUlhfU1RBVFVTLCAiZnAtPnRwYV9xdWV1ZV91c2VkID0gMHglbGx4XG4iLAorI2VuZGlmCisJICAgZnAtPnRwYV9xdWV1ZV91c2VkKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IGJueDJ4X2ZpbGxfZnJhZ19za2Ioc3RydWN0IGJueDJ4ICpicCwgc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCwKKwkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgIHN0cnVjdCBldGhfZmFzdF9wYXRoX3J4X2NxZSAqZnBfY3FlLAorCQkJICAgICAgIHUxNiBjcWVfaWR4KQoreworCXN0cnVjdCBzd19yeF9wYWdlICpyeF9wZywgb2xkX3J4X3BnOworCXUxNiBsZW5fb25fYmQgPSBsZTE2X3RvX2NwdShmcF9jcWUtPmxlbl9vbl9iZCk7CisJdTMyIGksIGZyYWdfbGVuLCBmcmFnX3NpemUsIHBhZ2VzOworCWludCBlcnI7CisJaW50IGo7CisKKwlmcmFnX3NpemUgPSBsZTE2X3RvX2NwdShmcF9jcWUtPnBrdF9sZW4pIC0gbGVuX29uX2JkOworCXBhZ2VzID0gU0dFX1BBR0VfQUxJR04oZnJhZ19zaXplKSA+PiBTR0VfUEFHRV9TSElGVDsKKworCS8qIFRoaXMgaXMgbmVlZGVkIGluIG9yZGVyIHRvIGVuYWJsZSBmb3J3YXJkaW5nIHN1cHBvcnQgKi8KKwlpZiAoZnJhZ19zaXplKQorCQlza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplID0gbWluKCh1MzIpU0dFX1BBR0VfU0laRSwKKwkJCQkJICAgICAgIG1heChmcmFnX3NpemUsICh1MzIpbGVuX29uX2JkKSk7CisKKyNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCisJaWYgKHBhZ2VzID4gbWluX3QodTMyLCA4LCBNQVhfU0tCX0ZSQUdTKSpTR0VfUEFHRV9TSVpFKlBBR0VTX1BFUl9TR0UpIHsKKwkJQk5YMlhfRVJSKCJTR0wgbGVuZ3RoIGlzIHRvbyBsb25nOiAlZC4gQ1FFIGluZGV4IGlzICVkXG4iLAorCQkJICBwYWdlcywgY3FlX2lkeCk7CisJCUJOWDJYX0VSUigiZnBfY3FlLT5wa3RfbGVuID0gJWQgIGZwX2NxZS0+bGVuX29uX2JkID0gJWRcbiIsCisJCQkgIGZwX2NxZS0+cGt0X2xlbiwgbGVuX29uX2JkKTsKKwkJYm54MnhfcGFuaWMoKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorI2VuZGlmCisKKwkvKiBSdW4gdGhyb3VnaCB0aGUgU0dMIGFuZCBjb21wb3NlIHRoZSBmcmFnbWVudGVkIHNrYiAqLworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgcGFnZXM7IGkgKz0gUEFHRVNfUEVSX1NHRSwgaisrKSB7CisJCXUxNiBzZ2VfaWR4ID0gUlhfU0dFKGxlMTZfdG9fY3B1KGZwX2NxZS0+c2dsW2pdKSk7CisKKwkJLyogRlcgZ2l2ZXMgdGhlIGluZGljZXMgb2YgdGhlIFNHRSBhcyBpZiB0aGUgcmluZyBpcyBhbiBhcnJheQorCQkgICAobWVhbmluZyB0aGF0ICJuZXh0IiBlbGVtZW50IHdpbGwgY29uc3VtZSAyIGluZGljZXMpICovCisJCWZyYWdfbGVuID0gbWluKGZyYWdfc2l6ZSwgKHUzMikoU0dFX1BBR0VfU0laRSpQQUdFU19QRVJfU0dFKSk7CisJCXJ4X3BnID0gJmZwLT5yeF9wYWdlX3Jpbmdbc2dlX2lkeF07CisJCW9sZF9yeF9wZyA9ICpyeF9wZzsKKworCQkvKiBJZiB3ZSBmYWlsIHRvIGFsbG9jYXRlIGEgc3Vic3RpdHV0ZSBwYWdlLCB3ZSBzaW1wbHkgc3RvcAorCQkgICB3aGVyZSB3ZSBhcmUgYW5kIGRyb3AgdGhlIHdob2xlIHBhY2tldCAqLworCQllcnIgPSBibngyeF9hbGxvY19yeF9zZ2UoYnAsIGZwLCBzZ2VfaWR4KTsKKwkJaWYgKHVubGlrZWx5KGVycikpIHsKKwkJCWZwLT5ldGhfcV9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CisJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJLyogVW5tYXAgdGhlIHBhZ2UgYXMgd2UgciBnb2luZyB0byBwYXNzIGl0IHRvIHRoZSBzdGFjayAqLworCQlkbWFfdW5tYXBfcGFnZSgmYnAtPnBkZXYtPmRldiwKKwkJCSAgICAgICBkbWFfdW5tYXBfYWRkcigmb2xkX3J4X3BnLCBtYXBwaW5nKSwKKwkJCSAgICAgICBTR0VfUEFHRV9TSVpFKlBBR0VTX1BFUl9TR0UsIERNQV9GUk9NX0RFVklDRSk7CisKKwkJLyogQWRkIG9uZSBmcmFnIGFuZCB1cGRhdGUgdGhlIGFwcHJvcHJpYXRlIGZpZWxkcyBpbiB0aGUgc2tiICovCisJCXNrYl9maWxsX3BhZ2VfZGVzYyhza2IsIGosIG9sZF9yeF9wZy5wYWdlLCAwLCBmcmFnX2xlbik7CisKKwkJc2tiLT5kYXRhX2xlbiArPSBmcmFnX2xlbjsKKwkJc2tiLT50cnVlc2l6ZSArPSBmcmFnX2xlbjsKKwkJc2tiLT5sZW4gKz0gZnJhZ19sZW47CisKKwkJZnJhZ19zaXplIC09IGZyYWdfbGVuOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBibngyeF90cGFfc3RvcChzdHJ1Y3QgYm54MnggKmJwLCBzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwLAorCQkJICAgdTE2IHF1ZXVlLCBpbnQgcGFkLCBpbnQgbGVuLCB1bmlvbiBldGhfcnhfY3FlICpjcWUsCisJCQkgICB1MTYgY3FlX2lkeCkKK3sKKwlzdHJ1Y3Qgc3dfcnhfYmQgKnJ4X2J1ZiA9ICZmcC0+dHBhX3Bvb2xbcXVldWVdOworCXN0cnVjdCBza19idWZmICpza2IgPSByeF9idWYtPnNrYjsKKwkvKiBhbGxvYyBuZXcgc2tiICovCisJc3RydWN0IHNrX2J1ZmYgKm5ld19za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGJwLT5kZXYsIGJwLT5yeF9idWZfc2l6ZSk7CisKKwkvKiBVbm1hcCBza2IgaW4gdGhlIHBvb2wgYW55d2F5LCBhcyB3ZSBhcmUgZ29pbmcgdG8gY2hhbmdlCisJICAgcG9vbCBlbnRyeSBzdGF0dXMgdG8gQk5YMlhfVFBBX1NUT1AgZXZlbiBpZiBuZXcgc2tiIGFsbG9jYXRpb24KKwkgICBmYWlscy4gKi8KKwlkbWFfdW5tYXBfc2luZ2xlKCZicC0+cGRldi0+ZGV2LCBkbWFfdW5tYXBfYWRkcihyeF9idWYsIG1hcHBpbmcpLAorCQkJIGJwLT5yeF9idWZfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTsKKworCWlmIChsaWtlbHkobmV3X3NrYikpIHsKKwkJLyogZml4IGlwIHhzdW0gYW5kIGdpdmUgaXQgdG8gdGhlIHN0YWNrICovCisJCS8qIChubyBuZWVkIHRvIG1hcCB0aGUgbmV3IHNrYikgKi8KKyNpZmRlZiBCQ01fVkxBTgorCQlpbnQgaXNfdmxhbl9jcWUgPQorCQkJKGxlMTZfdG9fY3B1KGNxZS0+ZmFzdF9wYXRoX2NxZS5wYXJzX2ZsYWdzLmZsYWdzKSAmCisJCQkgUEFSU0lOR19GTEFHU19WTEFOKTsKKwkJaW50IGlzX25vdF9od2FjY2VsX3ZsYW5fY3FlID0KKwkJCShpc192bGFuX2NxZSAmJiAoIShicC0+ZmxhZ3MgJiBIV19WTEFOX1JYX0ZMQUcpKSk7CisjZW5kaWYKKworCQlwcmVmZXRjaChza2IpOworCQlwcmVmZXRjaCgoKGNoYXIgKikoc2tiKSkgKyAxMjgpOworCisjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgorCQlpZiAocGFkICsgbGVuID4gYnAtPnJ4X2J1Zl9zaXplKSB7CisJCQlCTlgyWF9FUlIoInNrYl9wdXQgaXMgYWJvdXQgdG8gZmFpbC4uLiAgIgorCQkJCSAgInBhZCAlZCAgbGVuICVkICByeF9idWZfc2l6ZSAlZFxuIiwKKwkJCQkgIHBhZCwgbGVuLCBicC0+cnhfYnVmX3NpemUpOworCQkJYm54MnhfcGFuaWMoKTsKKwkJCXJldHVybjsKKwkJfQorI2VuZGlmCisKKwkJc2tiX3Jlc2VydmUoc2tiLCBwYWQpOworCQlza2JfcHV0KHNrYiwgbGVuKTsKKworCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBicC0+ZGV2KTsKKwkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKworCQl7CisJCQlzdHJ1Y3QgaXBoZHIgKmlwaDsKKworCQkJaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKKyNpZmRlZiBCQ01fVkxBTgorCQkJLyogSWYgdGhlcmUgaXMgbm8gUnggVkxBTiBvZmZsb2FkaW5nIC0KKwkJCSAgIHRha2UgVkxBTiB0YWcgaW50byBhbiBhY2NvdW50ICovCisJCQlpZiAodW5saWtlbHkoaXNfbm90X2h3YWNjZWxfdmxhbl9jcWUpKQorCQkJCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoKHU4ICopaXBoICsgVkxBTl9ITEVOKTsKKyNlbmRpZgorCQkJaXBoLT5jaGVjayA9IDA7CisJCQlpcGgtPmNoZWNrID0gaXBfZmFzdF9jc3VtKCh1OCAqKWlwaCwgaXBoLT5paGwpOworCQl9CisKKwkJaWYgKCFibngyeF9maWxsX2ZyYWdfc2tiKGJwLCBmcCwgc2tiLAorCQkJCQkgJmNxZS0+ZmFzdF9wYXRoX2NxZSwgY3FlX2lkeCkpIHsKKyNpZmRlZiBCQ01fVkxBTgorCQkJaWYgKChicC0+dmxncnAgIT0gTlVMTCkgJiYgaXNfdmxhbl9jcWUgJiYKKwkJCSAgICAoIWlzX25vdF9od2FjY2VsX3ZsYW5fY3FlKSkKKwkJCQl2bGFuX2dyb19yZWNlaXZlKCZmcC0+bmFwaSwgYnAtPnZsZ3JwLAorCQkJCQkJIGxlMTZfdG9fY3B1KGNxZS0+ZmFzdF9wYXRoX2NxZS4KKwkJCQkJCQkgICAgIHZsYW5fdGFnKSwgc2tiKTsKKwkJCWVsc2UKKyNlbmRpZgorCQkJCW5hcGlfZ3JvX3JlY2VpdmUoJmZwLT5uYXBpLCBza2IpOworCQl9IGVsc2UgeworCQkJRFAoTkVUSUZfTVNHX1JYX1NUQVRVUywgIkZhaWxlZCB0byBhbGxvY2F0ZSBuZXcgcGFnZXMiCisJCQkgICAiIC0gZHJvcHBpbmcgcGFja2V0IVxuIik7CisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCX0KKworCisJCS8qIHB1dCBuZXcgc2tiIGluIGJpbiAqLworCQlmcC0+dHBhX3Bvb2xbcXVldWVdLnNrYiA9IG5ld19za2I7CisKKwl9IGVsc2UgeworCQkvKiBlbHNlIGRyb3AgdGhlIHBhY2tldCBhbmQga2VlcCB0aGUgYnVmZmVyIGluIHRoZSBiaW4gKi8KKwkJRFAoTkVUSUZfTVNHX1JYX1NUQVRVUywKKwkJICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBuZXcgc2tiIC0gZHJvcHBpbmcgcGFja2V0IVxuIik7CisJCWZwLT5ldGhfcV9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CisJfQorCisJZnAtPnRwYV9zdGF0ZVtxdWV1ZV0gPSBCTlgyWF9UUEFfU1RPUDsKK30KKworLyogU2V0IFRvZXBsaXR6IGhhc2ggdmFsdWUgaW4gdGhlIHNrYiB1c2luZyB0aGUgdmFsdWUgZnJvbSB0aGUKKyAqIENRRSAoY2FsY3VsYXRlZCBieSBIVykuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9zZXRfc2tiX3J4aGFzaChzdHJ1Y3QgYm54MnggKmJwLCB1bmlvbiBldGhfcnhfY3FlICpjcWUsCisJCQkJCXN0cnVjdCBza19idWZmICpza2IpCit7CisJLyogU2V0IFRvZXBsaXR6IGhhc2ggZnJvbSBDUUUgKi8KKwlpZiAoKGJwLT5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWEhBU0gpICYmCisJICAgIChjcWUtPmZhc3RfcGF0aF9jcWUuc3RhdHVzX2ZsYWdzICYKKwkgICAgIEVUSF9GQVNUX1BBVEhfUlhfQ1FFX1JTU19IQVNIX0ZMRykpCisJCXNrYi0+cnhoYXNoID0KKwkJbGUzMl90b19jcHUoY3FlLT5mYXN0X3BhdGhfY3FlLnJzc19oYXNoX3Jlc3VsdCk7Cit9CisKK2ludCBibngyeF9yeF9pbnQoc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCwgaW50IGJ1ZGdldCkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gZnAtPmJwOworCXUxNiBiZF9jb25zLCBiZF9wcm9kLCBiZF9wcm9kX2Z3LCBjb21wX3JpbmdfY29uczsKKwl1MTYgaHdfY29tcF9jb25zLCBzd19jb21wX2NvbnMsIHN3X2NvbXBfcHJvZDsKKwlpbnQgcnhfcGt0ID0gMDsKKworI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKKwlpZiAodW5saWtlbHkoYnAtPnBhbmljKSkKKwkJcmV0dXJuIDA7CisjZW5kaWYKKworCS8qIENRICJuZXh0IGVsZW1lbnQiIGlzIG9mIHRoZSBzaXplIG9mIHRoZSByZWd1bGFyIGVsZW1lbnQsCisJICAgdGhhdCdzIHdoeSBpdCdzIG9rIGhlcmUgKi8KKwlod19jb21wX2NvbnMgPSBsZTE2X3RvX2NwdSgqZnAtPnJ4X2NvbnNfc2IpOworCWlmICgoaHdfY29tcF9jb25zICYgTUFYX1JDUV9ERVNDX0NOVCkgPT0gTUFYX1JDUV9ERVNDX0NOVCkKKwkJaHdfY29tcF9jb25zKys7CisKKwliZF9jb25zID0gZnAtPnJ4X2JkX2NvbnM7CisJYmRfcHJvZCA9IGZwLT5yeF9iZF9wcm9kOworCWJkX3Byb2RfZncgPSBiZF9wcm9kOworCXN3X2NvbXBfY29ucyA9IGZwLT5yeF9jb21wX2NvbnM7CisJc3dfY29tcF9wcm9kID0gZnAtPnJ4X2NvbXBfcHJvZDsKKworCS8qIE1lbW9yeSBiYXJyaWVyIG5lY2Vzc2FyeSBhcyBzcGVjdWxhdGl2ZSByZWFkcyBvZiB0aGUgcngKKwkgKiBidWZmZXIgY2FuIGJlIGFoZWFkIG9mIHRoZSBpbmRleCBpbiB0aGUgc3RhdHVzIGJsb2NrCisJICovCisJcm1iKCk7CisKKwlEUChORVRJRl9NU0dfUlhfU1RBVFVTLAorCSAgICJxdWV1ZVslZF06ICBod19jb21wX2NvbnMgJXUgIHN3X2NvbXBfY29ucyAldVxuIiwKKwkgICBmcC0+aW5kZXgsIGh3X2NvbXBfY29ucywgc3dfY29tcF9jb25zKTsKKworCXdoaWxlIChzd19jb21wX2NvbnMgIT0gaHdfY29tcF9jb25zKSB7CisJCXN0cnVjdCBzd19yeF9iZCAqcnhfYnVmID0gTlVMTDsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJdW5pb24gZXRoX3J4X2NxZSAqY3FlOworCQl1OCBjcWVfZnBfZmxhZ3M7CisJCXUxNiBsZW4sIHBhZDsKKworCQljb21wX3JpbmdfY29ucyA9IFJDUV9CRChzd19jb21wX2NvbnMpOworCQliZF9wcm9kID0gUlhfQkQoYmRfcHJvZCk7CisJCWJkX2NvbnMgPSBSWF9CRChiZF9jb25zKTsKKworCQkvKiBQcmVmZXRjaCB0aGUgcGFnZSBjb250YWluaW5nIHRoZSBCRCBkZXNjcmlwdG9yCisJCSAgIGF0IHByb2R1Y2VyJ3MgaW5kZXguIEl0IHdpbGwgYmUgbmVlZGVkIHdoZW4gbmV3IHNrYiBpcworCQkgICBhbGxvY2F0ZWQgKi8KKwkJcHJlZmV0Y2goKHZvaWQgKikoUEFHRV9BTElHTigodW5zaWduZWQgbG9uZykKKwkJCQkJICAgICAoJmZwLT5yeF9kZXNjX3JpbmdbYmRfcHJvZF0pKSAtCisJCQkJICBQQUdFX1NJWkUgKyAxKSk7CisKKwkJY3FlID0gJmZwLT5yeF9jb21wX3JpbmdbY29tcF9yaW5nX2NvbnNdOworCQljcWVfZnBfZmxhZ3MgPSBjcWUtPmZhc3RfcGF0aF9jcWUudHlwZV9lcnJvcl9mbGFnczsKKworCQlEUChORVRJRl9NU0dfUlhfU1RBVFVTLCAiQ1FFIHR5cGUgJXggIGVyciAleCAgc3RhdHVzICV4IgorCQkgICAiICBxdWV1ZSAleCAgdmxhbiAleCAgbGVuICV1XG4iLCBDUUVfVFlQRShjcWVfZnBfZmxhZ3MpLAorCQkgICBjcWVfZnBfZmxhZ3MsIGNxZS0+ZmFzdF9wYXRoX2NxZS5zdGF0dXNfZmxhZ3MsCisJCSAgIGxlMzJfdG9fY3B1KGNxZS0+ZmFzdF9wYXRoX2NxZS5yc3NfaGFzaF9yZXN1bHQpLAorCQkgICBsZTE2X3RvX2NwdShjcWUtPmZhc3RfcGF0aF9jcWUudmxhbl90YWcpLAorCQkgICBsZTE2X3RvX2NwdShjcWUtPmZhc3RfcGF0aF9jcWUucGt0X2xlbikpOworCisJCS8qIGlzIHRoaXMgYSBzbG93cGF0aCBtc2c/ICovCisJCWlmICh1bmxpa2VseShDUUVfVFlQRShjcWVfZnBfZmxhZ3MpKSkgeworCQkJYm54Mnhfc3BfZXZlbnQoZnAsIGNxZSk7CisJCQlnb3RvIG5leHRfY3FlOworCisJCS8qIHRoaXMgaXMgYW4gcnggcGFja2V0ICovCisJCX0gZWxzZSB7CisJCQlyeF9idWYgPSAmZnAtPnJ4X2J1Zl9yaW5nW2JkX2NvbnNdOworCQkJc2tiID0gcnhfYnVmLT5za2I7CisJCQlwcmVmZXRjaChza2IpOworCQkJbGVuID0gbGUxNl90b19jcHUoY3FlLT5mYXN0X3BhdGhfY3FlLnBrdF9sZW4pOworCQkJcGFkID0gY3FlLT5mYXN0X3BhdGhfY3FlLnBsYWNlbWVudF9vZmZzZXQ7CisKKwkJCS8qIElmIENRRSBpcyBtYXJrZWQgYm90aCBUUEFfU1RBUlQgYW5kIFRQQV9FTkQKKwkJCSAgIGl0IGlzIGEgbm9uLVRQQSBDUUUgKi8KKwkJCWlmICgoIWZwLT5kaXNhYmxlX3RwYSkgJiYKKwkJCSAgICAoVFBBX1RZUEUoY3FlX2ZwX2ZsYWdzKSAhPQorCQkJCQkoVFBBX1RZUEVfU1RBUlQgfCBUUEFfVFlQRV9FTkQpKSkgeworCQkJCXUxNiBxdWV1ZSA9IGNxZS0+ZmFzdF9wYXRoX2NxZS5xdWV1ZV9pbmRleDsKKworCQkJCWlmIChUUEFfVFlQRShjcWVfZnBfZmxhZ3MpID09IFRQQV9UWVBFX1NUQVJUKSB7CisJCQkJCURQKE5FVElGX01TR19SWF9TVEFUVVMsCisJCQkJCSAgICJjYWxsaW5nIHRwYV9zdGFydCBvbiBxdWV1ZSAlZFxuIiwKKwkJCQkJICAgcXVldWUpOworCisJCQkJCWJueDJ4X3RwYV9zdGFydChmcCwgcXVldWUsIHNrYiwKKwkJCQkJCQliZF9jb25zLCBiZF9wcm9kKTsKKworCQkJCQkvKiBTZXQgVG9lcGxpdHogaGFzaCBmb3IgYW4gTFJPIHNrYiAqLworCQkJCQlibngyeF9zZXRfc2tiX3J4aGFzaChicCwgY3FlLCBza2IpOworCisJCQkJCWdvdG8gbmV4dF9yeDsKKwkJCQl9CisKKwkJCQlpZiAoVFBBX1RZUEUoY3FlX2ZwX2ZsYWdzKSA9PSBUUEFfVFlQRV9FTkQpIHsKKwkJCQkJRFAoTkVUSUZfTVNHX1JYX1NUQVRVUywKKwkJCQkJICAgImNhbGxpbmcgdHBhX3N0b3Agb24gcXVldWUgJWRcbiIsCisJCQkJCSAgIHF1ZXVlKTsKKworCQkJCQlpZiAoIUJOWDJYX1JYX1NVTV9GSVgoY3FlKSkKKwkJCQkJCUJOWDJYX0VSUigiU1RPUCBvbiBub25lIFRDUCAiCisJCQkJCQkJICAiZGF0YVxuIik7CisKKwkJCQkJLyogVGhpcyBpcyBhIHNpemUgb2YgdGhlIGxpbmVhciBkYXRhCisJCQkJCSAgIG9uIHRoaXMgc2tiICovCisJCQkJCWxlbiA9IGxlMTZfdG9fY3B1KGNxZS0+ZmFzdF9wYXRoX2NxZS4KKwkJCQkJCQkJbGVuX29uX2JkKTsKKwkJCQkJYm54MnhfdHBhX3N0b3AoYnAsIGZwLCBxdWV1ZSwgcGFkLAorCQkJCQkJICAgIGxlbiwgY3FlLCBjb21wX3JpbmdfY29ucyk7CisjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgorCQkJCQlpZiAoYnAtPnBhbmljKQorCQkJCQkJcmV0dXJuIDA7CisjZW5kaWYKKworCQkJCQlibngyeF91cGRhdGVfc2dlX3Byb2QoZnAsCisJCQkJCQkJJmNxZS0+ZmFzdF9wYXRoX2NxZSk7CisJCQkJCWdvdG8gbmV4dF9jcWU7CisJCQkJfQorCQkJfQorCisJCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSgmYnAtPnBkZXYtPmRldiwKKwkJCQkJZG1hX3VubWFwX2FkZHIocnhfYnVmLCBtYXBwaW5nKSwKKwkJCQkJCSAgIHBhZCArIFJYX0NPUFlfVEhSRVNILAorCQkJCQkJICAgRE1BX0ZST01fREVWSUNFKTsKKwkJCXByZWZldGNoKCgoY2hhciAqKShza2IpKSArIDEyOCk7CisKKwkJCS8qIGlzIHRoaXMgYW4gZXJyb3IgcGFja2V0PyAqLworCQkJaWYgKHVubGlrZWx5KGNxZV9mcF9mbGFncyAmIEVUSF9SWF9FUlJPUl9GQUxHUykpIHsKKwkJCQlEUChORVRJRl9NU0dfUlhfRVJSLAorCQkJCSAgICJFUlJPUiAgZmxhZ3MgJXggIHJ4IHBhY2tldCAldVxuIiwKKwkJCQkgICBjcWVfZnBfZmxhZ3MsIHN3X2NvbXBfY29ucyk7CisJCQkJZnAtPmV0aF9xX3N0YXRzLnJ4X2Vycl9kaXNjYXJkX3BrdCsrOworCQkJCWdvdG8gcmV1c2Vfcng7CisJCQl9CisKKwkJCS8qIFNpbmNlIHdlIGRvbid0IGhhdmUgYSBqdW1ibyByaW5nCisJCQkgKiBjb3B5IHNtYWxsIHBhY2tldHMgaWYgbXR1ID4gMTUwMAorCQkJICovCisJCQlpZiAoKGJwLT5kZXYtPm10dSA+IEVUSF9NQVhfUEFDS0VUX1NJWkUpICYmCisJCQkgICAgKGxlbiA8PSBSWF9DT1BZX1RIUkVTSCkpIHsKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsKKworCQkJCW5ld19za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGJwLT5kZXYsCisJCQkJCQkJICAgbGVuICsgcGFkKTsKKwkJCQlpZiAobmV3X3NrYiA9PSBOVUxMKSB7CisJCQkJCURQKE5FVElGX01TR19SWF9FUlIsCisJCQkJCSAgICJFUlJPUiAgcGFja2V0IGRyb3BwZWQgIgorCQkJCQkgICAiYmVjYXVzZSBvZiBhbGxvYyBmYWlsdXJlXG4iKTsKKwkJCQkJZnAtPmV0aF9xX3N0YXRzLnJ4X3NrYl9hbGxvY19mYWlsZWQrKzsKKwkJCQkJZ290byByZXVzZV9yeDsKKwkJCQl9CisKKwkJCQkvKiBhbGlnbmVkIGNvcHkgKi8KKwkJCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChza2IsIHBhZCwKKwkJCQkJCSAgICBuZXdfc2tiLT5kYXRhICsgcGFkLCBsZW4pOworCQkJCXNrYl9yZXNlcnZlKG5ld19za2IsIHBhZCk7CisJCQkJc2tiX3B1dChuZXdfc2tiLCBsZW4pOworCisJCQkJYm54MnhfcmV1c2Vfcnhfc2tiKGZwLCBza2IsIGJkX2NvbnMsIGJkX3Byb2QpOworCisJCQkJc2tiID0gbmV3X3NrYjsKKworCQkJfSBlbHNlCisJCQlpZiAobGlrZWx5KGJueDJ4X2FsbG9jX3J4X3NrYihicCwgZnAsIGJkX3Byb2QpID09IDApKSB7CisJCQkJZG1hX3VubWFwX3NpbmdsZSgmYnAtPnBkZXYtPmRldiwKKwkJCQkJZG1hX3VubWFwX2FkZHIocnhfYnVmLCBtYXBwaW5nKSwKKwkJCQkJCSBicC0+cnhfYnVmX3NpemUsCisJCQkJCQkgRE1BX0ZST01fREVWSUNFKTsKKwkJCQlza2JfcmVzZXJ2ZShza2IsIHBhZCk7CisJCQkJc2tiX3B1dChza2IsIGxlbik7CisKKwkJCX0gZWxzZSB7CisJCQkJRFAoTkVUSUZfTVNHX1JYX0VSUiwKKwkJCQkgICAiRVJST1IgIHBhY2tldCBkcm9wcGVkIGJlY2F1c2UgIgorCQkJCSAgICJvZiBhbGxvYyBmYWlsdXJlXG4iKTsKKwkJCQlmcC0+ZXRoX3Ffc3RhdHMucnhfc2tiX2FsbG9jX2ZhaWxlZCsrOworcmV1c2Vfcng6CisJCQkJYm54MnhfcmV1c2Vfcnhfc2tiKGZwLCBza2IsIGJkX2NvbnMsIGJkX3Byb2QpOworCQkJCWdvdG8gbmV4dF9yeDsKKwkJCX0KKworCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgYnAtPmRldik7CisKKwkJCS8qIFNldCBUb2VwbGl0eiBoYXNoIGZvciBhIG5vbmUtTFJPIHNrYiAqLworCQkJYm54Mnhfc2V0X3NrYl9yeGhhc2goYnAsIGNxZSwgc2tiKTsKKworCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCQkJaWYgKGJwLT5yeF9jc3VtKSB7CisJCQkJaWYgKGxpa2VseShCTlgyWF9SWF9DU1VNX09LKGNxZSkpKQorCQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQkJCWVsc2UKKwkJCQkJZnAtPmV0aF9xX3N0YXRzLmh3X2NzdW1fZXJyKys7CisJCQl9CisJCX0KKworCQlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgZnAtPmluZGV4KTsKKworI2lmZGVmIEJDTV9WTEFOCisJCWlmICgoYnAtPnZsZ3JwICE9IE5VTEwpICYmIChicC0+ZmxhZ3MgJiBIV19WTEFOX1JYX0ZMQUcpICYmCisJCSAgICAobGUxNl90b19jcHUoY3FlLT5mYXN0X3BhdGhfY3FlLnBhcnNfZmxhZ3MuZmxhZ3MpICYKKwkJICAgICBQQVJTSU5HX0ZMQUdTX1ZMQU4pKQorCQkJdmxhbl9ncm9fcmVjZWl2ZSgmZnAtPm5hcGksIGJwLT52bGdycCwKKwkJCQlsZTE2X3RvX2NwdShjcWUtPmZhc3RfcGF0aF9jcWUudmxhbl90YWcpLCBza2IpOworCQllbHNlCisjZW5kaWYKKwkJCW5hcGlfZ3JvX3JlY2VpdmUoJmZwLT5uYXBpLCBza2IpOworCisKK25leHRfcng6CisJCXJ4X2J1Zi0+c2tiID0gTlVMTDsKKworCQliZF9jb25zID0gTkVYVF9SWF9JRFgoYmRfY29ucyk7CisJCWJkX3Byb2QgPSBORVhUX1JYX0lEWChiZF9wcm9kKTsKKwkJYmRfcHJvZF9mdyA9IE5FWFRfUlhfSURYKGJkX3Byb2RfZncpOworCQlyeF9wa3QrKzsKK25leHRfY3FlOgorCQlzd19jb21wX3Byb2QgPSBORVhUX1JDUV9JRFgoc3dfY29tcF9wcm9kKTsKKwkJc3dfY29tcF9jb25zID0gTkVYVF9SQ1FfSURYKHN3X2NvbXBfY29ucyk7CisKKwkJaWYgKHJ4X3BrdCA9PSBidWRnZXQpCisJCQlicmVhazsKKwl9IC8qIHdoaWxlICovCisKKwlmcC0+cnhfYmRfY29ucyA9IGJkX2NvbnM7CisJZnAtPnJ4X2JkX3Byb2QgPSBiZF9wcm9kX2Z3OworCWZwLT5yeF9jb21wX2NvbnMgPSBzd19jb21wX2NvbnM7CisJZnAtPnJ4X2NvbXBfcHJvZCA9IHN3X2NvbXBfcHJvZDsKKworCS8qIFVwZGF0ZSBwcm9kdWNlcnMgKi8KKwlibngyeF91cGRhdGVfcnhfcHJvZChicCwgZnAsIGJkX3Byb2RfZncsIHN3X2NvbXBfcHJvZCwKKwkJCSAgICAgZnAtPnJ4X3NnZV9wcm9kKTsKKworCWZwLT5yeF9wa3QgKz0gcnhfcGt0OworCWZwLT5yeF9jYWxscysrOworCisJcmV0dXJuIHJ4X3BrdDsKK30KKworc3RhdGljIGlycXJldHVybl90IGJueDJ4X21zaXhfZnBfaW50KGludCBpcnEsIHZvaWQgKmZwX2Nvb2tpZSkKK3sKKwlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gZnBfY29va2llOworCXN0cnVjdCBibngyeCAqYnAgPSBmcC0+YnA7CisKKwkvKiBSZXR1cm4gaGVyZSBpZiBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQgKi8KKwlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmJwLT5pbnRyX3NlbSkgIT0gMCkpIHsKKwkJRFAoTkVUSUZfTVNHX0lOVFIsICJjYWxsZWQgYnV0IGludHJfc2VtIG5vdCAwLCByZXR1cm5pbmdcbiIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJRFAoQk5YMlhfTVNHX0ZQLCAiZ290IGFuIE1TSS1YIGludGVycnVwdCBvbiBJRFg6U0IgWyVkOiVkXVxuIiwKKwkgICBmcC0+aW5kZXgsIGZwLT5zYl9pZCk7CisJYm54MnhfYWNrX3NiKGJwLCBmcC0+c2JfaWQsIFVTVE9STV9JRCwgMCwgSUdVX0lOVF9ESVNBQkxFLCAwKTsKKworI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKKwlpZiAodW5saWtlbHkoYnAtPnBhbmljKSkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworI2VuZGlmCisKKwkvKiBIYW5kbGUgUnggYW5kIFR4IGFjY29yZGluZyB0byBNU0ktWCB2ZWN0b3IgKi8KKwlwcmVmZXRjaChmcC0+cnhfY29uc19zYik7CisJcHJlZmV0Y2goZnAtPnR4X2NvbnNfc2IpOworCXByZWZldGNoKCZmcC0+c3RhdHVzX2Jsay0+dV9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4KTsKKwlwcmVmZXRjaCgmZnAtPnN0YXR1c19ibGstPmNfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCk7CisJbmFwaV9zY2hlZHVsZSgmYm54MnhfZnAoYnAsIGZwLT5pbmRleCwgbmFwaSkpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisKKy8qIEhXIExvY2sgZm9yIHNoYXJlZCBkdWFsIHBvcnQgUEhZcyAqLwordm9pZCBibngyeF9hY3F1aXJlX3BoeV9sb2NrKHN0cnVjdCBibngyeCAqYnApCit7CisJbXV0ZXhfbG9jaygmYnAtPnBvcnQucGh5X211dGV4KTsKKworCWlmIChicC0+cG9ydC5uZWVkX2h3X2xvY2spCisJCWJueDJ4X2FjcXVpcmVfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV9NRElPKTsKK30KKwordm9pZCBibngyeF9yZWxlYXNlX3BoeV9sb2NrKHN0cnVjdCBibngyeCAqYnApCit7CisJaWYgKGJwLT5wb3J0Lm5lZWRfaHdfbG9jaykKKwkJYm54MnhfcmVsZWFzZV9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFX01ESU8pOworCisJbXV0ZXhfdW5sb2NrKCZicC0+cG9ydC5waHlfbXV0ZXgpOworfQorCit2b2lkIGJueDJ4X2xpbmtfcmVwb3J0KHN0cnVjdCBibngyeCAqYnApCit7CisJaWYgKGJwLT5mbGFncyAmIE1GX0ZVTkNfRElTKSB7CisJCW5ldGlmX2NhcnJpZXJfb2ZmKGJwLT5kZXYpOworCQluZXRkZXZfZXJyKGJwLT5kZXYsICJOSUMgTGluayBpcyBEb3duXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChicC0+bGlua192YXJzLmxpbmtfdXApIHsKKwkJdTE2IGxpbmVfc3BlZWQ7CisKKwkJaWYgKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9PUEVOKQorCQkJbmV0aWZfY2Fycmllcl9vbihicC0+ZGV2KTsKKwkJbmV0ZGV2X2luZm8oYnAtPmRldiwgIk5JQyBMaW5rIGlzIFVwLCAiKTsKKworCQlsaW5lX3NwZWVkID0gYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkOworCQlpZiAoSVNfRTFITUYoYnApKSB7CisJCQl1MTYgdm5fbWF4X3JhdGU7CisKKwkJCXZuX21heF9yYXRlID0KKwkJCQkoKGJwLT5tZl9jb25maWcgJiBGVU5DX01GX0NGR19NQVhfQldfTUFTSykgPj4KKwkJCQkgRlVOQ19NRl9DRkdfTUFYX0JXX1NISUZUKSAqIDEwMDsKKwkJCWlmICh2bl9tYXhfcmF0ZSA8IGxpbmVfc3BlZWQpCisJCQkJbGluZV9zcGVlZCA9IHZuX21heF9yYXRlOworCQl9CisJCXByX2NvbnQoIiVkIE1icHMgIiwgbGluZV9zcGVlZCk7CisKKwkJaWYgKGJwLT5saW5rX3ZhcnMuZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQkJcHJfY29udCgiZnVsbCBkdXBsZXgiKTsKKwkJZWxzZQorCQkJcHJfY29udCgiaGFsZiBkdXBsZXgiKTsKKworCQlpZiAoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgIT0gQk5YMlhfRkxPV19DVFJMX05PTkUpIHsKKwkJCWlmIChicC0+bGlua192YXJzLmZsb3dfY3RybCAmIEJOWDJYX0ZMT1dfQ1RSTF9SWCkgeworCQkJCXByX2NvbnQoIiwgcmVjZWl2ZSAiKTsKKwkJCQlpZiAoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgJgorCQkJCSAgICBCTlgyWF9GTE9XX0NUUkxfVFgpCisJCQkJCXByX2NvbnQoIiYgdHJhbnNtaXQgIik7CisJCQl9IGVsc2UgeworCQkJCXByX2NvbnQoIiwgdHJhbnNtaXQgIik7CisJCQl9CisJCQlwcl9jb250KCJmbG93IGNvbnRyb2wgT04iKTsKKwkJfQorCQlwcl9jb250KCJcbiIpOworCisJfSBlbHNlIHsgLyogbGlua19kb3duICovCisJCW5ldGlmX2NhcnJpZXJfb2ZmKGJwLT5kZXYpOworCQluZXRkZXZfZXJyKGJwLT5kZXYsICJOSUMgTGluayBpcyBEb3duXG4iKTsKKwl9Cit9CisKK3ZvaWQgYm54MnhfaW5pdF9yeF9yaW5ncyhzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBmdW5jID0gQlBfRlVOQyhicCk7CisJaW50IG1heF9hZ2dfcXVldWVzID0gQ0hJUF9JU19FMShicCkgPyBFVEhfTUFYX0FHR1JFR0FUSU9OX1FVRVVFU19FMSA6CisJCQkJCSAgICAgIEVUSF9NQVhfQUdHUkVHQVRJT05fUVVFVUVTX0UxSDsKKwl1MTYgcmluZ19wcm9kLCBjcWVfcmluZ19wcm9kOworCWludCBpLCBqOworCisJYnAtPnJ4X2J1Zl9zaXplID0gYnAtPmRldi0+bXR1ICsgRVRIX09WUkVIRUFEICsgQk5YMlhfUlhfQUxJR047CisJRFAoTkVUSUZfTVNHX0lGVVAsCisJICAgIm10dSAlZCAgcnhfYnVmX3NpemUgJWRcbiIsIGJwLT5kZXYtPm10dSwgYnAtPnJ4X2J1Zl9zaXplKTsKKworCWlmIChicC0+ZmxhZ3MgJiBUUEFfRU5BQkxFX0ZMQUcpIHsKKworCQlmb3JfZWFjaF9xdWV1ZShicCwgaikgeworCQkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbal07CisKKwkJCWZvciAoaSA9IDA7IGkgPCBtYXhfYWdnX3F1ZXVlczsgaSsrKSB7CisJCQkJZnAtPnRwYV9wb29sW2ldLnNrYiA9CisJCQkJICAgbmV0ZGV2X2FsbG9jX3NrYihicC0+ZGV2LCBicC0+cnhfYnVmX3NpemUpOworCQkJCWlmICghZnAtPnRwYV9wb29sW2ldLnNrYikgeworCQkJCQlCTlgyWF9FUlIoIkZhaWxlZCB0byBhbGxvY2F0ZSBUUEEgIgorCQkJCQkJICAic2tiIHBvb2wgZm9yIHF1ZXVlWyVkXSAtICIKKwkJCQkJCSAgImRpc2FibGluZyBUUEEgb24gdGhpcyAiCisJCQkJCQkgICJxdWV1ZSFcbiIsIGopOworCQkJCQlibngyeF9mcmVlX3RwYV9wb29sKGJwLCBmcCwgaSk7CisJCQkJCWZwLT5kaXNhYmxlX3RwYSA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlkbWFfdW5tYXBfYWRkcl9zZXQoKHN0cnVjdCBzd19yeF9iZCAqKQorCQkJCQkJCSZicC0+ZnAtPnRwYV9wb29sW2ldLAorCQkJCQkJICAgbWFwcGluZywgMCk7CisJCQkJZnAtPnRwYV9zdGF0ZVtpXSA9IEJOWDJYX1RQQV9TVE9QOworCQkJfQorCQl9CisJfQorCisJZm9yX2VhY2hfcXVldWUoYnAsIGopIHsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbal07CisKKwkJZnAtPnJ4X2JkX2NvbnMgPSAwOworCQlmcC0+cnhfY29uc19zYiA9IEJOWDJYX1JYX1NCX0lOREVYOworCQlmcC0+cnhfYmRfY29uc19zYiA9IEJOWDJYX1JYX1NCX0JEX0lOREVYOworCisJCS8qICJuZXh0IHBhZ2UiIGVsZW1lbnRzIGluaXRpYWxpemF0aW9uICovCisJCS8qIFNHRSByaW5nICovCisJCWZvciAoaSA9IDE7IGkgPD0gTlVNX1JYX1NHRV9QQUdFUzsgaSsrKSB7CisJCQlzdHJ1Y3QgZXRoX3J4X3NnZSAqc2dlOworCisJCQlzZ2UgPSAmZnAtPnJ4X3NnZV9yaW5nW1JYX1NHRV9DTlQgKiBpIC0gMl07CisJCQlzZ2UtPmFkZHJfaGkgPQorCQkJCWNwdV90b19sZTMyKFU2NF9ISShmcC0+cnhfc2dlX21hcHBpbmcgKworCQkJCQlCQ01fUEFHRV9TSVpFKihpICUgTlVNX1JYX1NHRV9QQUdFUykpKTsKKwkJCXNnZS0+YWRkcl9sbyA9CisJCQkJY3B1X3RvX2xlMzIoVTY0X0xPKGZwLT5yeF9zZ2VfbWFwcGluZyArCisJCQkJCUJDTV9QQUdFX1NJWkUqKGkgJSBOVU1fUlhfU0dFX1BBR0VTKSkpOworCQl9CisKKwkJYm54MnhfaW5pdF9zZ2VfcmluZ19iaXRfbWFzayhmcCk7CisKKwkJLyogUlggQkQgcmluZyAqLworCQlmb3IgKGkgPSAxOyBpIDw9IE5VTV9SWF9SSU5HUzsgaSsrKSB7CisJCQlzdHJ1Y3QgZXRoX3J4X2JkICpyeF9iZDsKKworCQkJcnhfYmQgPSAmZnAtPnJ4X2Rlc2NfcmluZ1tSWF9ERVNDX0NOVCAqIGkgLSAyXTsKKwkJCXJ4X2JkLT5hZGRyX2hpID0KKwkJCQljcHVfdG9fbGUzMihVNjRfSEkoZnAtPnJ4X2Rlc2NfbWFwcGluZyArCisJCQkJCSAgICBCQ01fUEFHRV9TSVpFKihpICUgTlVNX1JYX1JJTkdTKSkpOworCQkJcnhfYmQtPmFkZHJfbG8gPQorCQkJCWNwdV90b19sZTMyKFU2NF9MTyhmcC0+cnhfZGVzY19tYXBwaW5nICsKKwkJCQkJICAgIEJDTV9QQUdFX1NJWkUqKGkgJSBOVU1fUlhfUklOR1MpKSk7CisJCX0KKworCQkvKiBDUSByaW5nICovCisJCWZvciAoaSA9IDE7IGkgPD0gTlVNX1JDUV9SSU5HUzsgaSsrKSB7CisJCQlzdHJ1Y3QgZXRoX3J4X2NxZV9uZXh0X3BhZ2UgKm5leHRwZzsKKworCQkJbmV4dHBnID0gKHN0cnVjdCBldGhfcnhfY3FlX25leHRfcGFnZSAqKQorCQkJCSZmcC0+cnhfY29tcF9yaW5nW1JDUV9ERVNDX0NOVCAqIGkgLSAxXTsKKwkJCW5leHRwZy0+YWRkcl9oaSA9CisJCQkJY3B1X3RvX2xlMzIoVTY0X0hJKGZwLT5yeF9jb21wX21hcHBpbmcgKworCQkJCQkgICBCQ01fUEFHRV9TSVpFKihpICUgTlVNX1JDUV9SSU5HUykpKTsKKwkJCW5leHRwZy0+YWRkcl9sbyA9CisJCQkJY3B1X3RvX2xlMzIoVTY0X0xPKGZwLT5yeF9jb21wX21hcHBpbmcgKworCQkJCQkgICBCQ01fUEFHRV9TSVpFKihpICUgTlVNX1JDUV9SSU5HUykpKTsKKwkJfQorCisJCS8qIEFsbG9jYXRlIFNHRXMgYW5kIGluaXRpYWxpemUgdGhlIHJpbmcgZWxlbWVudHMgKi8KKwkJZm9yIChpID0gMCwgcmluZ19wcm9kID0gMDsKKwkJICAgICBpIDwgTUFYX1JYX1NHRV9DTlQqTlVNX1JYX1NHRV9QQUdFUzsgaSsrKSB7CisKKwkJCWlmIChibngyeF9hbGxvY19yeF9zZ2UoYnAsIGZwLCByaW5nX3Byb2QpIDwgMCkgeworCQkJCUJOWDJYX0VSUigid2FzIG9ubHkgYWJsZSB0byBhbGxvY2F0ZSAiCisJCQkJCSAgIiVkIHJ4IHNnZXNcbiIsIGkpOworCQkJCUJOWDJYX0VSUigiZGlzYWJsaW5nIFRQQSBmb3IgcXVldWVbJWRdXG4iLCBqKTsKKwkJCQkvKiBDbGVhbnVwIGFscmVhZHkgYWxsb2NhdGVkIGVsZW1lbnRzICovCisJCQkJYm54MnhfZnJlZV9yeF9zZ2VfcmFuZ2UoYnAsIGZwLCByaW5nX3Byb2QpOworCQkJCWJueDJ4X2ZyZWVfdHBhX3Bvb2woYnAsIGZwLCBtYXhfYWdnX3F1ZXVlcyk7CisJCQkJZnAtPmRpc2FibGVfdHBhID0gMTsKKwkJCQlyaW5nX3Byb2QgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJcmluZ19wcm9kID0gTkVYVF9TR0VfSURYKHJpbmdfcHJvZCk7CisJCX0KKwkJZnAtPnJ4X3NnZV9wcm9kID0gcmluZ19wcm9kOworCisJCS8qIEFsbG9jYXRlIEJEcyBhbmQgaW5pdGlhbGl6ZSBCRCByaW5nICovCisJCWZwLT5yeF9jb21wX2NvbnMgPSAwOworCQljcWVfcmluZ19wcm9kID0gcmluZ19wcm9kID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IGJwLT5yeF9yaW5nX3NpemU7IGkrKykgeworCQkJaWYgKGJueDJ4X2FsbG9jX3J4X3NrYihicCwgZnAsIHJpbmdfcHJvZCkgPCAwKSB7CisJCQkJQk5YMlhfRVJSKCJ3YXMgb25seSBhYmxlIHRvIGFsbG9jYXRlICIKKwkJCQkJICAiJWQgcnggc2ticyBvbiBxdWV1ZVslZF1cbiIsIGksIGopOworCQkJCWZwLT5ldGhfcV9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CisJCQkJYnJlYWs7CisJCQl9CisJCQlyaW5nX3Byb2QgPSBORVhUX1JYX0lEWChyaW5nX3Byb2QpOworCQkJY3FlX3JpbmdfcHJvZCA9IE5FWFRfUkNRX0lEWChjcWVfcmluZ19wcm9kKTsKKwkJCVdBUk5fT04ocmluZ19wcm9kIDw9IGkpOworCQl9CisKKwkJZnAtPnJ4X2JkX3Byb2QgPSByaW5nX3Byb2Q7CisJCS8qIG11c3Qgbm90IGhhdmUgbW9yZSBhdmFpbGFibGUgQ1FFcyB0aGFuIEJEcyAqLworCQlmcC0+cnhfY29tcF9wcm9kID0gbWluX3QodTE2LCBOVU1fUkNRX1JJTkdTKlJDUV9ERVNDX0NOVCwKKwkJCQkJIGNxZV9yaW5nX3Byb2QpOworCQlmcC0+cnhfcGt0ID0gZnAtPnJ4X2NhbGxzID0gMDsKKworCQkvKiBXYXJuaW5nIQorCQkgKiB0aGlzIHdpbGwgZ2VuZXJhdGUgYW4gaW50ZXJydXB0ICh0byB0aGUgVFNUT1JNKQorCQkgKiBtdXN0IG9ubHkgYmUgZG9uZSBhZnRlciBjaGlwIGlzIGluaXRpYWxpemVkCisJCSAqLworCQlibngyeF91cGRhdGVfcnhfcHJvZChicCwgZnAsIHJpbmdfcHJvZCwgZnAtPnJ4X2NvbXBfcHJvZCwKKwkJCQkgICAgIGZwLT5yeF9zZ2VfcHJvZCk7CisJCWlmIChqICE9IDApCisJCQljb250aW51ZTsKKworCQlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCisJCSAgICAgICBVU1RPUk1fTUVNX1dPUktBUk9VTkRfQUREUkVTU19PRkZTRVQoZnVuYyksCisJCSAgICAgICBVNjRfTE8oZnAtPnJ4X2NvbXBfbWFwcGluZykpOworCQlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCisJCSAgICAgICBVU1RPUk1fTUVNX1dPUktBUk9VTkRfQUREUkVTU19PRkZTRVQoZnVuYykgKyA0LAorCQkgICAgICAgVTY0X0hJKGZwLT5yeF9jb21wX21hcHBpbmcpKTsKKwl9Cit9CitzdGF0aWMgdm9pZCBibngyeF9mcmVlX3R4X3NrYnMoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgaTsKKworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOworCisJCXUxNiBiZF9jb25zID0gZnAtPnR4X2JkX2NvbnM7CisJCXUxNiBzd19wcm9kID0gZnAtPnR4X3BrdF9wcm9kOworCQl1MTYgc3dfY29ucyA9IGZwLT50eF9wa3RfY29uczsKKworCQl3aGlsZSAoc3dfY29ucyAhPSBzd19wcm9kKSB7CisJCQliZF9jb25zID0gYm54MnhfZnJlZV90eF9wa3QoYnAsIGZwLCBUWF9CRChzd19jb25zKSk7CisJCQlzd19jb25zKys7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2ZyZWVfcnhfc2ticyhzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBpLCBqOworCisJZm9yX2VhY2hfcXVldWUoYnAsIGopIHsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbal07CisKKwkJZm9yIChpID0gMDsgaSA8IE5VTV9SWF9CRDsgaSsrKSB7CisJCQlzdHJ1Y3Qgc3dfcnhfYmQgKnJ4X2J1ZiA9ICZmcC0+cnhfYnVmX3JpbmdbaV07CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcnhfYnVmLT5za2I7CisKKwkJCWlmIChza2IgPT0gTlVMTCkKKwkJCQljb250aW51ZTsKKworCQkJZG1hX3VubWFwX3NpbmdsZSgmYnAtPnBkZXYtPmRldiwKKwkJCQkJIGRtYV91bm1hcF9hZGRyKHJ4X2J1ZiwgbWFwcGluZyksCisJCQkJCSBicC0+cnhfYnVmX3NpemUsIERNQV9GUk9NX0RFVklDRSk7CisKKwkJCXJ4X2J1Zi0+c2tiID0gTlVMTDsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJfQorCQlpZiAoIWZwLT5kaXNhYmxlX3RwYSkKKwkJCWJueDJ4X2ZyZWVfdHBhX3Bvb2woYnAsIGZwLCBDSElQX0lTX0UxKGJwKSA/CisJCQkJCSAgICBFVEhfTUFYX0FHR1JFR0FUSU9OX1FVRVVFU19FMSA6CisJCQkJCSAgICBFVEhfTUFYX0FHR1JFR0FUSU9OX1FVRVVFU19FMUgpOworCX0KK30KKwordm9pZCBibngyeF9mcmVlX3NrYnMoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlibngyeF9mcmVlX3R4X3NrYnMoYnApOworCWJueDJ4X2ZyZWVfcnhfc2ticyhicCk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2ZyZWVfbXNpeF9pcnFzKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IGksIG9mZnNldCA9IDE7CisKKwlmcmVlX2lycShicC0+bXNpeF90YWJsZVswXS52ZWN0b3IsIGJwLT5kZXYpOworCURQKE5FVElGX01TR19JRkRPV04sICJyZWxlYXNlZCBzcCBpcnEgKCVkKVxuIiwKKwkgICBicC0+bXNpeF90YWJsZVswXS52ZWN0b3IpOworCisjaWZkZWYgQkNNX0NOSUMKKwlvZmZzZXQrKzsKKyNlbmRpZgorCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCURQKE5FVElGX01TR19JRkRPV04sICJhYm91dCB0byByZWxlYXNlIGZwICMlZC0+JWQgaXJxICAiCisJCSAgICJzdGF0ZSAleFxuIiwgaSwgYnAtPm1zaXhfdGFibGVbaSArIG9mZnNldF0udmVjdG9yLAorCQkgICBibngyeF9mcChicCwgaSwgc3RhdGUpKTsKKworCQlmcmVlX2lycShicC0+bXNpeF90YWJsZVtpICsgb2Zmc2V0XS52ZWN0b3IsICZicC0+ZnBbaV0pOworCX0KK30KKwordm9pZCBibngyeF9mcmVlX2lycShzdHJ1Y3QgYm54MnggKmJwLCBib29sIGRpc2FibGVfb25seSkKK3sKKwlpZiAoYnAtPmZsYWdzICYgVVNJTkdfTVNJWF9GTEFHKSB7CisJCWlmICghZGlzYWJsZV9vbmx5KQorCQkJYm54MnhfZnJlZV9tc2l4X2lycXMoYnApOworCQlwY2lfZGlzYWJsZV9tc2l4KGJwLT5wZGV2KTsKKwkJYnAtPmZsYWdzICY9IH5VU0lOR19NU0lYX0ZMQUc7CisKKwl9IGVsc2UgaWYgKGJwLT5mbGFncyAmIFVTSU5HX01TSV9GTEFHKSB7CisJCWlmICghZGlzYWJsZV9vbmx5KQorCQkJZnJlZV9pcnEoYnAtPnBkZXYtPmlycSwgYnAtPmRldik7CisJCXBjaV9kaXNhYmxlX21zaShicC0+cGRldik7CisJCWJwLT5mbGFncyAmPSB+VVNJTkdfTVNJX0ZMQUc7CisKKwl9IGVsc2UgaWYgKCFkaXNhYmxlX29ubHkpCisJCWZyZWVfaXJxKGJwLT5wZGV2LT5pcnEsIGJwLT5kZXYpOworfQorCitzdGF0aWMgaW50IGJueDJ4X2VuYWJsZV9tc2l4KHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IGksIHJjLCBvZmZzZXQgPSAxOworCWludCBpZ3VfdmVjID0gMDsKKworCWJwLT5tc2l4X3RhYmxlWzBdLmVudHJ5ID0gaWd1X3ZlYzsKKwlEUChORVRJRl9NU0dfSUZVUCwgIm1zaXhfdGFibGVbMF0uZW50cnkgPSAlZCAoc2xvd3BhdGgpXG4iLCBpZ3VfdmVjKTsKKworI2lmZGVmIEJDTV9DTklDCisJaWd1X3ZlYyA9IEJQX0xfSUQoYnApICsgb2Zmc2V0OworCWJwLT5tc2l4X3RhYmxlWzFdLmVudHJ5ID0gaWd1X3ZlYzsKKwlEUChORVRJRl9NU0dfSUZVUCwgIm1zaXhfdGFibGVbMV0uZW50cnkgPSAlZCAoQ05JQylcbiIsIGlndV92ZWMpOworCW9mZnNldCsrOworI2VuZGlmCisJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJaWd1X3ZlYyA9IEJQX0xfSUQoYnApICsgb2Zmc2V0ICsgaTsKKwkJYnAtPm1zaXhfdGFibGVbaSArIG9mZnNldF0uZW50cnkgPSBpZ3VfdmVjOworCQlEUChORVRJRl9NU0dfSUZVUCwgIm1zaXhfdGFibGVbJWRdLmVudHJ5ID0gJWQgIgorCQkgICAiKGZhc3RwYXRoICMldSlcbiIsIGkgKyBvZmZzZXQsIGlndV92ZWMsIGkpOworCX0KKworCXJjID0gcGNpX2VuYWJsZV9tc2l4KGJwLT5wZGV2LCAmYnAtPm1zaXhfdGFibGVbMF0sCisJCQkgICAgIEJOWDJYX05VTV9RVUVVRVMoYnApICsgb2Zmc2V0KTsKKworCS8qCisJICogcmVjb25maWd1cmUgbnVtYmVyIG9mIHR4L3J4IHF1ZXVlcyBhY2NvcmRpbmcgdG8gYXZhaWxhYmxlCisJICogTVNJLVggdmVjdG9ycworCSAqLworCWlmIChyYyA+PSBCTlgyWF9NSU5fTVNJWF9WRUNfQ05UKSB7CisJCS8qIHZlY3RvcnMgYXZhaWxhYmxlIGZvciBGUCAqLworCQlpbnQgZnBfdmVjID0gcmMgLSBCTlgyWF9NU0lYX1ZFQ19GUF9TVEFSVDsKKworCQlEUChORVRJRl9NU0dfSUZVUCwKKwkJICAgIlRyeWluZyB0byB1c2UgbGVzcyBNU0ktWCB2ZWN0b3JzOiAlZFxuIiwgcmMpOworCisJCXJjID0gcGNpX2VuYWJsZV9tc2l4KGJwLT5wZGV2LCAmYnAtPm1zaXhfdGFibGVbMF0sIHJjKTsKKworCQlpZiAocmMpIHsKKwkJCURQKE5FVElGX01TR19JRlVQLAorCQkJICAgIk1TSS1YIGlzIG5vdCBhdHRhaW5hYmxlICByYyAlZFxuIiwgcmMpOworCQkJcmV0dXJuIHJjOworCQl9CisKKwkJYnAtPm51bV9xdWV1ZXMgPSBtaW4oYnAtPm51bV9xdWV1ZXMsIGZwX3ZlYyk7CisKKwkJRFAoTkVUSUZfTVNHX0lGVVAsICJOZXcgcXVldWUgY29uZmlndXJhdGlvbiBzZXQ6ICVkXG4iLAorCQkJCSAgYnAtPm51bV9xdWV1ZXMpOworCX0gZWxzZSBpZiAocmMpIHsKKwkJRFAoTkVUSUZfTVNHX0lGVVAsICJNU0ktWCBpcyBub3QgYXR0YWluYWJsZSAgcmMgJWRcbiIsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKworCWJwLT5mbGFncyB8PSBVU0lOR19NU0lYX0ZMQUc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBibngyeF9yZXFfbXNpeF9pcnFzKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IGksIHJjLCBvZmZzZXQgPSAxOworCisJcmMgPSByZXF1ZXN0X2lycShicC0+bXNpeF90YWJsZVswXS52ZWN0b3IsIGJueDJ4X21zaXhfc3BfaW50LCAwLAorCQkJIGJwLT5kZXYtPm5hbWUsIGJwLT5kZXYpOworCWlmIChyYykgeworCQlCTlgyWF9FUlIoInJlcXVlc3Qgc3AgaXJxIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisjaWZkZWYgQkNNX0NOSUMKKwlvZmZzZXQrKzsKKyNlbmRpZgorCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOworCQlzbnByaW50ZihmcC0+bmFtZSwgc2l6ZW9mKGZwLT5uYW1lKSwgIiVzLWZwLSVkIiwKKwkJCSBicC0+ZGV2LT5uYW1lLCBpKTsKKworCQlyYyA9IHJlcXVlc3RfaXJxKGJwLT5tc2l4X3RhYmxlW2kgKyBvZmZzZXRdLnZlY3RvciwKKwkJCQkgYm54MnhfbXNpeF9mcF9pbnQsIDAsIGZwLT5uYW1lLCBmcCk7CisJCWlmIChyYykgeworCQkJQk5YMlhfRVJSKCJyZXF1ZXN0IGZwICMlZCBpcnEgZmFpbGVkICByYyAlZFxuIiwgaSwgcmMpOworCQkJYm54MnhfZnJlZV9tc2l4X2lycXMoYnApOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCisJCWZwLT5zdGF0ZSA9IEJOWDJYX0ZQX1NUQVRFX0lSUTsKKwl9CisKKwlpID0gQk5YMlhfTlVNX1FVRVVFUyhicCk7CisJbmV0ZGV2X2luZm8oYnAtPmRldiwgInVzaW5nIE1TSS1YICBJUlFzOiBzcCAlZCAgZnBbJWRdICVkIgorCSAgICAgICAiIC4uLiBmcFslZF0gJWRcbiIsCisJICAgICAgIGJwLT5tc2l4X3RhYmxlWzBdLnZlY3RvciwKKwkgICAgICAgMCwgYnAtPm1zaXhfdGFibGVbb2Zmc2V0XS52ZWN0b3IsCisJICAgICAgIGkgLSAxLCBicC0+bXNpeF90YWJsZVtvZmZzZXQgKyBpIC0gMV0udmVjdG9yKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJueDJ4X2VuYWJsZV9tc2koc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IHBjaV9lbmFibGVfbXNpKGJwLT5wZGV2KTsKKwlpZiAocmMpIHsKKwkJRFAoTkVUSUZfTVNHX0lGVVAsICJNU0kgaXMgbm90IGF0dGFpbmFibGVcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCWJwLT5mbGFncyB8PSBVU0lOR19NU0lfRkxBRzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJueDJ4X3JlcV9pcnEoc3RydWN0IGJueDJ4ICpicCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByYzsKKworCWlmIChicC0+ZmxhZ3MgJiBVU0lOR19NU0lfRkxBRykKKwkJZmxhZ3MgPSAwOworCWVsc2UKKwkJZmxhZ3MgPSBJUlFGX1NIQVJFRDsKKworCXJjID0gcmVxdWVzdF9pcnEoYnAtPnBkZXYtPmlycSwgYm54MnhfaW50ZXJydXB0LCBmbGFncywKKwkJCSBicC0+ZGV2LT5uYW1lLCBicC0+ZGV2KTsKKwlpZiAoIXJjKQorCQlibngyeF9mcChicCwgMCwgc3RhdGUpID0gQk5YMlhfRlBfU1RBVEVfSVJROworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBibngyeF9uYXBpX2VuYWJsZShzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBpOworCisJZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJCW5hcGlfZW5hYmxlKCZibngyeF9mcChicCwgaSwgbmFwaSkpOworfQorCitzdGF0aWMgdm9pZCBibngyeF9uYXBpX2Rpc2FibGUoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgaTsKKworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCQluYXBpX2Rpc2FibGUoJmJueDJ4X2ZwKGJwLCBpLCBuYXBpKSk7Cit9CisKK3ZvaWQgYm54MnhfbmV0aWZfc3RhcnQoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgaW50cl9zZW07CisKKwlpbnRyX3NlbSA9IGF0b21pY19kZWNfYW5kX3Rlc3QoJmJwLT5pbnRyX3NlbSk7CisJc21wX3dtYigpOyAvKiBFbnN1cmUgdGhhdCBicC0+aW50cl9zZW0gdXBkYXRlIGlzIFNNUC1zYWZlICovCisKKwlpZiAoaW50cl9zZW0pIHsKKwkJaWYgKG5ldGlmX3J1bm5pbmcoYnAtPmRldikpIHsKKwkJCWJueDJ4X25hcGlfZW5hYmxlKGJwKTsKKwkJCWJueDJ4X2ludF9lbmFibGUoYnApOworCQkJaWYgKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9PUEVOKQorCQkJCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhicC0+ZGV2KTsKKwkJfQorCX0KK30KKwordm9pZCBibngyeF9uZXRpZl9zdG9wKHN0cnVjdCBibngyeCAqYnAsIGludCBkaXNhYmxlX2h3KQoreworCWJueDJ4X2ludF9kaXNhYmxlX3N5bmMoYnAsIGRpc2FibGVfaHcpOworCWJueDJ4X25hcGlfZGlzYWJsZShicCk7CisJbmV0aWZfdHhfZGlzYWJsZShicC0+ZGV2KTsKK30KK3N0YXRpYyBpbnQgYm54Mnhfc2V0X251bV9xdWV1ZXMoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgcmMgPSAwOworCisJc3dpdGNoIChicC0+aW50X21vZGUpIHsKKwljYXNlIElOVF9NT0RFX0lOVHg6CisJY2FzZSBJTlRfTU9ERV9NU0k6CisJCWJwLT5udW1fcXVldWVzID0gMTsKKwkJRFAoTkVUSUZfTVNHX0lGVVAsICJzZXQgbnVtYmVyIG9mIHF1ZXVlcyB0byAxXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogU2V0IG51bWJlciBvZiBxdWV1ZXMgYWNjb3JkaW5nIHRvIGJwLT5tdWx0aV9tb2RlIHZhbHVlICovCisJCWJueDJ4X3NldF9udW1fcXVldWVzX21zaXgoYnApOworCisJCURQKE5FVElGX01TR19JRlVQLCAic2V0IG51bWJlciBvZiBxdWV1ZXMgdG8gJWRcbiIsCisJCSAgIGJwLT5udW1fcXVldWVzKTsKKworCQkvKiBpZiB3ZSBjYW4ndCB1c2UgTVNJLVggd2Ugb25seSBuZWVkIG9uZSBmcCwKKwkJICogc28gdHJ5IHRvIGVuYWJsZSBNU0ktWCB3aXRoIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGZwJ3MKKwkJICogYW5kIGZhbGxiYWNrIHRvIE1TSSBvciBsZWdhY3kgSU5UeCB3aXRoIG9uZSBmcAorCQkgKi8KKwkJcmMgPSBibngyeF9lbmFibGVfbXNpeChicCk7CisJCWlmIChyYykKKwkJCS8qIGZhaWxlZCB0byBlbmFibGUgTVNJLVggKi8KKwkJCWJwLT5udW1fcXVldWVzID0gMTsKKwkJYnJlYWs7CisJfQorCWJwLT5kZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcyA9IGJwLT5udW1fcXVldWVzOworCXJldHVybiByYzsKK30KKworLyogbXVzdCBiZSBjYWxsZWQgd2l0aCBydG5sX2xvY2sgKi8KK2ludCBibngyeF9uaWNfbG9hZChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgbG9hZF9tb2RlKQoreworCXUzMiBsb2FkX2NvZGU7CisJaW50IGksIHJjOworCisjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgorCWlmICh1bmxpa2VseShicC0+cGFuaWMpKQorCQlyZXR1cm4gLUVQRVJNOworI2VuZGlmCisKKwlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9PUEVOSU5HX1dBSVQ0X0xPQUQ7CisKKwlyYyA9IGJueDJ4X3NldF9udW1fcXVldWVzKGJwKTsKKworCWlmIChibngyeF9hbGxvY19tZW0oYnApKSB7CisJCWJueDJ4X2ZyZWVfaXJxKGJwLCB0cnVlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJCWJueDJ4X2ZwKGJwLCBpLCBkaXNhYmxlX3RwYSkgPQorCQkJCQkoKGJwLT5mbGFncyAmIFRQQV9FTkFCTEVfRkxBRykgPT0gMCk7CisKKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwkJbmV0aWZfbmFwaV9hZGQoYnAtPmRldiwgJmJueDJ4X2ZwKGJwLCBpLCBuYXBpKSwKKwkJCSAgICAgICBibngyeF9wb2xsLCAxMjgpOworCisJYm54MnhfbmFwaV9lbmFibGUoYnApOworCisJaWYgKGJwLT5mbGFncyAmIFVTSU5HX01TSVhfRkxBRykgeworCQlyYyA9IGJueDJ4X3JlcV9tc2l4X2lycXMoYnApOworCQlpZiAocmMpIHsKKwkJCWJueDJ4X2ZyZWVfaXJxKGJwLCB0cnVlKTsKKwkJCWdvdG8gbG9hZF9lcnJvcjE7CisJCX0KKwl9IGVsc2UgeworCQkvKiBGYWxsIHRvIElOVHggaWYgZmFpbGVkIHRvIGVuYWJsZSBNU0ktWCBkdWUgdG8gbGFjayBvZgorCQkgICBtZW1vcnkgKGluIGJueDJ4X3NldF9udW1fcXVldWVzKCkpICovCisJCWlmICgocmMgIT0gLUVOT01FTSkgJiYgKGJwLT5pbnRfbW9kZSAhPSBJTlRfTU9ERV9JTlR4KSkKKwkJCWJueDJ4X2VuYWJsZV9tc2koYnApOworCQlibngyeF9hY2tfaW50KGJwKTsKKwkJcmMgPSBibngyeF9yZXFfaXJxKGJwKTsKKwkJaWYgKHJjKSB7CisJCQlCTlgyWF9FUlIoIklSUSByZXF1ZXN0IGZhaWxlZCAgcmMgJWQsIGFib3J0aW5nXG4iLCByYyk7CisJCQlibngyeF9mcmVlX2lycShicCwgdHJ1ZSk7CisJCQlnb3RvIGxvYWRfZXJyb3IxOworCQl9CisJCWlmIChicC0+ZmxhZ3MgJiBVU0lOR19NU0lfRkxBRykgeworCQkJYnAtPmRldi0+aXJxID0gYnAtPnBkZXYtPmlycTsKKwkJCW5ldGRldl9pbmZvKGJwLT5kZXYsICJ1c2luZyBNU0kgIElSUSAlZFxuIiwKKwkJCQkgICAgYnAtPnBkZXYtPmlycSk7CisJCX0KKwl9CisKKwkvKiBTZW5kIExPQURfUkVRVUVTVCBjb21tYW5kIHRvIE1DUAorCSAgIFJldHVybnMgdGhlIHR5cGUgb2YgTE9BRCBjb21tYW5kOgorCSAgIGlmIGl0IGlzIHRoZSBmaXJzdCBwb3J0IHRvIGJlIGluaXRpYWxpemVkCisJICAgY29tbW9uIGJsb2NrcyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQsIG90aGVyd2lzZSAtIG5vdAorCSovCisJaWYgKCFCUF9OT01DUChicCkpIHsKKwkJbG9hZF9jb2RlID0gYm54MnhfZndfY29tbWFuZChicCwgRFJWX01TR19DT0RFX0xPQURfUkVRKTsKKwkJaWYgKCFsb2FkX2NvZGUpIHsKKwkJCUJOWDJYX0VSUigiTUNQIHJlc3BvbnNlIGZhaWx1cmUsIGFib3J0aW5nXG4iKTsKKwkJCXJjID0gLUVCVVNZOworCQkJZ290byBsb2FkX2Vycm9yMjsKKwkJfQorCQlpZiAobG9hZF9jb2RlID09IEZXX01TR19DT0RFX0RSVl9MT0FEX1JFRlVTRUQpIHsKKwkJCXJjID0gLUVCVVNZOyAvKiBvdGhlciBwb3J0IGluIGRpYWdub3N0aWMgbW9kZSAqLworCQkJZ290byBsb2FkX2Vycm9yMjsKKwkJfQorCisJfSBlbHNlIHsKKwkJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKworCQlEUChORVRJRl9NU0dfSUZVUCwgIk5PIE1DUCAtIGxvYWQgY291bnRzICAgICAgJWQsICVkLCAlZFxuIiwKKwkJICAgbG9hZF9jb3VudFswXSwgbG9hZF9jb3VudFsxXSwgbG9hZF9jb3VudFsyXSk7CisJCWxvYWRfY291bnRbMF0rKzsKKwkJbG9hZF9jb3VudFsxICsgcG9ydF0rKzsKKwkJRFAoTkVUSUZfTVNHX0lGVVAsICJOTyBNQ1AgLSBuZXcgbG9hZCBjb3VudHMgICVkLCAlZCwgJWRcbiIsCisJCSAgIGxvYWRfY291bnRbMF0sIGxvYWRfY291bnRbMV0sIGxvYWRfY291bnRbMl0pOworCQlpZiAobG9hZF9jb3VudFswXSA9PSAxKQorCQkJbG9hZF9jb2RlID0gRldfTVNHX0NPREVfRFJWX0xPQURfQ09NTU9OOworCQllbHNlIGlmIChsb2FkX2NvdW50WzEgKyBwb3J0XSA9PSAxKQorCQkJbG9hZF9jb2RlID0gRldfTVNHX0NPREVfRFJWX0xPQURfUE9SVDsKKwkJZWxzZQorCQkJbG9hZF9jb2RlID0gRldfTVNHX0NPREVfRFJWX0xPQURfRlVOQ1RJT047CisJfQorCisJaWYgKChsb2FkX2NvZGUgPT0gRldfTVNHX0NPREVfRFJWX0xPQURfQ09NTU9OKSB8fAorCSAgICAobG9hZF9jb2RlID09IEZXX01TR19DT0RFX0RSVl9MT0FEX1BPUlQpKQorCQlicC0+cG9ydC5wbWYgPSAxOworCWVsc2UKKwkJYnAtPnBvcnQucG1mID0gMDsKKwlEUChORVRJRl9NU0dfTElOSywgInBtZiAlZFxuIiwgYnAtPnBvcnQucG1mKTsKKworCS8qIEluaXRpYWxpemUgSFcgKi8KKwlyYyA9IGJueDJ4X2luaXRfaHcoYnAsIGxvYWRfY29kZSk7CisJaWYgKHJjKSB7CisJCUJOWDJYX0VSUigiSFcgaW5pdCBmYWlsZWQsIGFib3J0aW5nXG4iKTsKKwkJYm54MnhfZndfY29tbWFuZChicCwgRFJWX01TR19DT0RFX0xPQURfRE9ORSk7CisJCWJueDJ4X2Z3X2NvbW1hbmQoYnAsIERSVl9NU0dfQ09ERV9VTkxPQURfUkVRX1dPTF9NQ1ApOworCQlibngyeF9md19jb21tYW5kKGJwLCBEUlZfTVNHX0NPREVfVU5MT0FEX0RPTkUpOworCQlnb3RvIGxvYWRfZXJyb3IyOworCX0KKworCS8qIFNldHVwIE5JQyBpbnRlcm5hbHMgYW5kIGVuYWJsZSBpbnRlcnJ1cHRzICovCisJYm54MnhfbmljX2luaXQoYnAsIGxvYWRfY29kZSk7CisKKwlpZiAoKGxvYWRfY29kZSA9PSBGV19NU0dfQ09ERV9EUlZfTE9BRF9DT01NT04pICYmCisJICAgIChicC0+Y29tbW9uLnNobWVtMl9iYXNlKSkKKwkJU0hNRU0yX1dSKGJwLCBkY2Nfc3VwcG9ydCwKKwkJCSAgKFNITUVNX0RDQ19TVVBQT1JUX0RJU0FCTEVfRU5BQkxFX1BGX1RMViB8CisJCQkgICBTSE1FTV9EQ0NfU1VQUE9SVF9CQU5EV0lEVEhfQUxMT0NBVElPTl9UTFYpKTsKKworCS8qIFNlbmQgTE9BRF9ET05FIGNvbW1hbmQgdG8gTUNQICovCisJaWYgKCFCUF9OT01DUChicCkpIHsKKwkJbG9hZF9jb2RlID0gYm54MnhfZndfY29tbWFuZChicCwgRFJWX01TR19DT0RFX0xPQURfRE9ORSk7CisJCWlmICghbG9hZF9jb2RlKSB7CisJCQlCTlgyWF9FUlIoIk1DUCByZXNwb25zZSBmYWlsdXJlLCBhYm9ydGluZ1xuIik7CisJCQlyYyA9IC1FQlVTWTsKKwkJCWdvdG8gbG9hZF9lcnJvcjM7CisJCX0KKwl9CisKKwlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9PUEVOSU5HX1dBSVQ0X1BPUlQ7CisKKwlyYyA9IGJueDJ4X3NldHVwX2xlYWRpbmcoYnApOworCWlmIChyYykgeworCQlCTlgyWF9FUlIoIlNldHVwIGxlYWRpbmcgZmFpbGVkIVxuIik7CisjaWZuZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKKwkJZ290byBsb2FkX2Vycm9yMzsKKyNlbHNlCisJCWJwLT5wYW5pYyA9IDE7CisJCXJldHVybiAtRUJVU1k7CisjZW5kaWYKKwl9CisKKwlpZiAoQ0hJUF9JU19FMUgoYnApKQorCQlpZiAoYnAtPm1mX2NvbmZpZyAmIEZVTkNfTUZfQ0ZHX0ZVTkNfRElTQUJMRUQpIHsKKwkJCURQKE5FVElGX01TR19JRlVQLCAibWZfY2ZnIGZ1bmN0aW9uIGRpc2FibGVkXG4iKTsKKwkJCWJwLT5mbGFncyB8PSBNRl9GVU5DX0RJUzsKKwkJfQorCisJaWYgKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9PUEVOKSB7CisjaWZkZWYgQkNNX0NOSUMKKwkJLyogRW5hYmxlIFRpbWVyIHNjYW4gKi8KKwkJUkVHX1dSKGJwLCBUTV9SRUdfRU5fTElORUFSMF9USU1FUiArIEJQX1BPUlQoYnApKjQsIDEpOworI2VuZGlmCisJCWZvcl9lYWNoX25vbmRlZmF1bHRfcXVldWUoYnAsIGkpIHsKKwkJCXJjID0gYm54Mnhfc2V0dXBfbXVsdGkoYnAsIGkpOworCQkJaWYgKHJjKQorI2lmZGVmIEJDTV9DTklDCisJCQkJZ290byBsb2FkX2Vycm9yNDsKKyNlbHNlCisJCQkJZ290byBsb2FkX2Vycm9yMzsKKyNlbmRpZgorCQl9CisKKwkJaWYgKENISVBfSVNfRTEoYnApKQorCQkJYm54Mnhfc2V0X2V0aF9tYWNfYWRkcl9lMShicCwgMSk7CisJCWVsc2UKKwkJCWJueDJ4X3NldF9ldGhfbWFjX2FkZHJfZTFoKGJwLCAxKTsKKyNpZmRlZiBCQ01fQ05JQworCQkvKiBTZXQgaVNDU0kgTDIgTUFDICovCisJCW11dGV4X2xvY2soJmJwLT5jbmljX211dGV4KTsKKwkJaWYgKGJwLT5jbmljX2V0aF9kZXYuZHJ2X3N0YXRlICYgQ05JQ19EUlZfU1RBVEVfUkVHRCkgeworCQkJYm54Mnhfc2V0X2lzY3NpX2V0aF9tYWNfYWRkcihicCwgMSk7CisJCQlicC0+Y25pY19mbGFncyB8PSBCTlgyWF9DTklDX0ZMQUdfTUFDX1NFVDsKKwkJCWJueDJ4X2luaXRfc2IoYnAsIGJwLT5jbmljX3NiLCBicC0+Y25pY19zYl9tYXBwaW5nLAorCQkJCSAgICAgIENOSUNfU0JfSUQoYnApKTsKKwkJfQorCQltdXRleF91bmxvY2soJmJwLT5jbmljX211dGV4KTsKKyNlbmRpZgorCX0KKworCWlmIChicC0+cG9ydC5wbWYpCisJCWJueDJ4X2luaXRpYWxfcGh5X2luaXQoYnAsIGxvYWRfbW9kZSk7CisKKwkvKiBTdGFydCBmYXN0IHBhdGggKi8KKwlzd2l0Y2ggKGxvYWRfbW9kZSkgeworCWNhc2UgTE9BRF9OT1JNQUw6CisJCWlmIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfT1BFTikgeworCQkJLyogVHggcXVldWUgc2hvdWxkIGJlIG9ubHkgcmVlbmFibGVkICovCisJCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMoYnAtPmRldik7CisJCX0KKwkJLyogSW5pdGlhbGl6ZSB0aGUgcmVjZWl2ZSBmaWx0ZXIuICovCisJCWJueDJ4X3NldF9yeF9tb2RlKGJwLT5kZXYpOworCQlicmVhazsKKworCWNhc2UgTE9BRF9PUEVOOgorCQluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKGJwLT5kZXYpOworCQlpZiAoYnAtPnN0YXRlICE9IEJOWDJYX1NUQVRFX09QRU4pCisJCQluZXRpZl90eF9kaXNhYmxlKGJwLT5kZXYpOworCQkvKiBJbml0aWFsaXplIHRoZSByZWNlaXZlIGZpbHRlci4gKi8KKwkJYm54Mnhfc2V0X3J4X21vZGUoYnAtPmRldik7CisJCWJyZWFrOworCisJY2FzZSBMT0FEX0RJQUc6CisJCS8qIEluaXRpYWxpemUgdGhlIHJlY2VpdmUgZmlsdGVyLiAqLworCQlibngyeF9zZXRfcnhfbW9kZShicC0+ZGV2KTsKKwkJYnAtPnN0YXRlID0gQk5YMlhfU1RBVEVfRElBRzsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAoIWJwLT5wb3J0LnBtZikKKwkJYm54MnhfX2xpbmtfc3RhdHVzX3VwZGF0ZShicCk7CisKKwkvKiBzdGFydCB0aGUgdGltZXIgKi8KKwltb2RfdGltZXIoJmJwLT50aW1lciwgamlmZmllcyArIGJwLT5jdXJyZW50X2ludGVydmFsKTsKKworI2lmZGVmIEJDTV9DTklDCisJYm54Mnhfc2V0dXBfY25pY19pcnFfaW5mbyhicCk7CisJaWYgKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9PUEVOKQorCQlibngyeF9jbmljX25vdGlmeShicCwgQ05JQ19DVExfU1RBUlRfQ01EKTsKKyNlbmRpZgorCWJueDJ4X2luY19sb2FkX2NudChicCk7CisKKwlyZXR1cm4gMDsKKworI2lmZGVmIEJDTV9DTklDCitsb2FkX2Vycm9yNDoKKwkvKiBEaXNhYmxlIFRpbWVyIHNjYW4gKi8KKwlSRUdfV1IoYnAsIFRNX1JFR19FTl9MSU5FQVIwX1RJTUVSICsgQlBfUE9SVChicCkqNCwgMCk7CisjZW5kaWYKK2xvYWRfZXJyb3IzOgorCWJueDJ4X2ludF9kaXNhYmxlX3N5bmMoYnAsIDEpOworCWlmICghQlBfTk9NQ1AoYnApKSB7CisJCWJueDJ4X2Z3X2NvbW1hbmQoYnAsIERSVl9NU0dfQ09ERV9VTkxPQURfUkVRX1dPTF9NQ1ApOworCQlibngyeF9md19jb21tYW5kKGJwLCBEUlZfTVNHX0NPREVfVU5MT0FEX0RPTkUpOworCX0KKwlicC0+cG9ydC5wbWYgPSAwOworCS8qIEZyZWUgU0tCcywgU0dFcywgVFBBIHBvb2wgYW5kIGRyaXZlciBpbnRlcm5hbHMgKi8KKwlibngyeF9mcmVlX3NrYnMoYnApOworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCQlibngyeF9mcmVlX3J4X3NnZV9yYW5nZShicCwgYnAtPmZwICsgaSwgTlVNX1JYX1NHRSk7Citsb2FkX2Vycm9yMjoKKwkvKiBSZWxlYXNlIElSUXMgKi8KKwlibngyeF9mcmVlX2lycShicCwgZmFsc2UpOworbG9hZF9lcnJvcjE6CisJYm54MnhfbmFwaV9kaXNhYmxlKGJwKTsKKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwkJbmV0aWZfbmFwaV9kZWwoJmJueDJ4X2ZwKGJwLCBpLCBuYXBpKSk7CisJYm54MnhfZnJlZV9tZW0oYnApOworCisJcmV0dXJuIHJjOworfQorCisvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLworaW50IGJueDJ4X25pY191bmxvYWQoc3RydWN0IGJueDJ4ICpicCwgaW50IHVubG9hZF9tb2RlKQoreworCWludCBpOworCisJaWYgKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9DTE9TRUQpIHsKKwkJLyogSW50ZXJmYWNlIGhhcyBiZWVuIHJlbW92ZWQgLSBub3RoaW5nIHRvIHJlY292ZXIgKi8KKwkJYnAtPnJlY292ZXJ5X3N0YXRlID0gQk5YMlhfUkVDT1ZFUllfRE9ORTsKKwkJYnAtPmlzX2xlYWRlciA9IDA7CisJCWJueDJ4X3JlbGVhc2VfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV9SRVNFUlZFRF8wOCk7CisJCXNtcF93bWIoKTsKKworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKyNpZmRlZiBCQ01fQ05JQworCWJueDJ4X2NuaWNfbm90aWZ5KGJwLCBDTklDX0NUTF9TVE9QX0NNRCk7CisjZW5kaWYKKwlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9DTE9TSU5HX1dBSVQ0X0hBTFQ7CisKKwkvKiBTZXQgImRyb3AgYWxsIiAqLworCWJwLT5yeF9tb2RlID0gQk5YMlhfUlhfTU9ERV9OT05FOworCWJueDJ4X3NldF9zdG9ybV9yeF9tb2RlKGJwKTsKKworCS8qIERpc2FibGUgSFcgaW50ZXJydXB0cywgTkFQSSBhbmQgVHggKi8KKwlibngyeF9uZXRpZl9zdG9wKGJwLCAxKTsKKwluZXRpZl9jYXJyaWVyX29mZihicC0+ZGV2KTsKKworCWRlbF90aW1lcl9zeW5jKCZicC0+dGltZXIpOworCVNITUVNX1dSKGJwLCBmdW5jX21iW0JQX0ZVTkMoYnApXS5kcnZfcHVsc2VfbWIsCisJCSAoRFJWX1BVTFNFX0FMV0FZU19BTElWRSB8IGJwLT5md19kcnZfcHVsc2Vfd3Jfc2VxKSk7CisJYm54Mnhfc3RhdHNfaGFuZGxlKGJwLCBTVEFUU19FVkVOVF9TVE9QKTsKKworCS8qIFJlbGVhc2UgSVJRcyAqLworCWJueDJ4X2ZyZWVfaXJxKGJwLCBmYWxzZSk7CisKKwkvKiBDbGVhbnVwIHRoZSBjaGlwIGlmIG5lZWRlZCAqLworCWlmICh1bmxvYWRfbW9kZSAhPSBVTkxPQURfUkVDT1ZFUlkpCisJCWJueDJ4X2NoaXBfY2xlYW51cChicCwgdW5sb2FkX21vZGUpOworCisJYnAtPnBvcnQucG1mID0gMDsKKworCS8qIEZyZWUgU0tCcywgU0dFcywgVFBBIHBvb2wgYW5kIGRyaXZlciBpbnRlcm5hbHMgKi8KKwlibngyeF9mcmVlX3NrYnMoYnApOworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCQlibngyeF9mcmVlX3J4X3NnZV9yYW5nZShicCwgYnAtPmZwICsgaSwgTlVNX1JYX1NHRSk7CisJZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJCW5ldGlmX25hcGlfZGVsKCZibngyeF9mcChicCwgaSwgbmFwaSkpOworCWJueDJ4X2ZyZWVfbWVtKGJwKTsKKworCWJwLT5zdGF0ZSA9IEJOWDJYX1NUQVRFX0NMT1NFRDsKKworCS8qIFRoZSBsYXN0IGRyaXZlciBtdXN0IGRpc2FibGUgYSAiY2xvc2UgdGhlIGdhdGUiIGlmIHRoZXJlIGlzIG5vCisJICogcGFyaXR5IGF0dGVudGlvbiBvciAicHJvY2VzcyBraWxsIiBwZW5kaW5nLgorCSAqLworCWlmICgoIWJueDJ4X2RlY19sb2FkX2NudChicCkpICYmICghYm54MnhfY2hrX3Bhcml0eV9hdHRuKGJwKSkgJiYKKwkgICAgYm54MnhfcmVzZXRfaXNfZG9uZShicCkpCisJCWJueDJ4X2Rpc2FibGVfY2xvc2VfdGhlX2dhdGUoYnApOworCisJLyogUmVzZXQgTUNQIG1haWwgYm94IHNlcXVlbmNlIGlmIHRoZXJlIGlzIG9uIGdvaW5nIHJlY292ZXJ5ICovCisJaWYgKHVubG9hZF9tb2RlID09IFVOTE9BRF9SRUNPVkVSWSkKKwkJYnAtPmZ3X3NlcSA9IDA7CisKKwlyZXR1cm4gMDsKK30KK2ludCBibngyeF9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IGJueDJ4ICpicCwgcGNpX3Bvd2VyX3Qgc3RhdGUpCit7CisJdTE2IHBtY3NyOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoYnAtPnBkZXYsIGJwLT5wbV9jYXAgKyBQQ0lfUE1fQ1RSTCwgJnBtY3NyKTsKKworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIFBDSV9EMDoKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGJwLT5wZGV2LCBicC0+cG1fY2FwICsgUENJX1BNX0NUUkwsCisJCQkJICAgICAgKChwbWNzciAmIH5QQ0lfUE1fQ1RSTF9TVEFURV9NQVNLKSB8CisJCQkJICAgICAgIFBDSV9QTV9DVFJMX1BNRV9TVEFUVVMpKTsKKworCQlpZiAocG1jc3IgJiBQQ0lfUE1fQ1RSTF9TVEFURV9NQVNLKQorCQkJLyogZGVsYXkgcmVxdWlyZWQgZHVyaW5nIHRyYW5zaXRpb24gb3V0IG9mIEQzaG90ICovCisJCQltc2xlZXAoMjApOworCQlicmVhazsKKworCWNhc2UgUENJX0QzaG90OgorCQkvKiBJZiB0aGVyZSBhcmUgb3RoZXIgY2xpZW50cyBhYm92ZSBkb24ndAorCQkgICBzaHV0IGRvd24gdGhlIHBvd2VyICovCisJCWlmIChhdG9taWNfcmVhZCgmYnAtPnBkZXYtPmVuYWJsZV9jbnQpICE9IDEpCisJCQlyZXR1cm4gMDsKKwkJLyogRG9uJ3Qgc2h1dCBkb3duIHRoZSBwb3dlciBmb3IgZW11bGF0aW9uIGFuZCBGUEdBICovCisJCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSkKKwkJCXJldHVybiAwOworCisJCXBtY3NyICY9IH5QQ0lfUE1fQ1RSTF9TVEFURV9NQVNLOworCQlwbWNzciB8PSAzOworCisJCWlmIChicC0+d29sKQorCQkJcG1jc3IgfD0gUENJX1BNX0NUUkxfUE1FX0VOQUJMRTsKKworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoYnAtPnBkZXYsIGJwLT5wbV9jYXAgKyBQQ0lfUE1fQ1RSTCwKKwkJCQkgICAgICBwbWNzcik7CisKKwkJLyogTm8gbW9yZSBtZW1vcnkgYWNjZXNzIGFmdGVyIHRoaXMgcG9pbnQgdW50aWwKKwkJKiBkZXZpY2UgaXMgYnJvdWdodCBiYWNrIHRvIEQwLgorCQkqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworCisKKy8qCisgKiBuZXRfZGV2aWNlIHNlcnZpY2UgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIGludCBibngyeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKK3sKKwlpbnQgd29ya19kb25lID0gMDsKKwlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBibngyeF9mYXN0cGF0aCwKKwkJCQkJCSBuYXBpKTsKKwlzdHJ1Y3QgYm54MnggKmJwID0gZnAtPmJwOworCisJd2hpbGUgKDEpIHsKKyNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCisJCWlmICh1bmxpa2VseShicC0+cGFuaWMpKSB7CisJCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCQkJcmV0dXJuIDA7CisJCX0KKyNlbmRpZgorCisJCWlmIChibngyeF9oYXNfdHhfd29yayhmcCkpCisJCQlibngyeF90eF9pbnQoZnApOworCisJCWlmIChibngyeF9oYXNfcnhfd29yayhmcCkpIHsKKwkJCXdvcmtfZG9uZSArPSBibngyeF9yeF9pbnQoZnAsIGJ1ZGdldCAtIHdvcmtfZG9uZSk7CisKKwkJCS8qIG11c3Qgbm90IGNvbXBsZXRlIGlmIHdlIGNvbnN1bWVkIGZ1bGwgYnVkZ2V0ICovCisJCQlpZiAod29ya19kb25lID49IGJ1ZGdldCkKKwkJCQlicmVhazsKKwkJfQorCisJCS8qIEZhbGwgb3V0IGZyb20gdGhlIE5BUEkgbG9vcCBpZiBuZWVkZWQgKi8KKwkJaWYgKCEoYm54MnhfaGFzX3J4X3dvcmsoZnApIHx8IGJueDJ4X2hhc190eF93b3JrKGZwKSkpIHsKKwkJCWJueDJ4X3VwZGF0ZV9mcHNiX2lkeChmcCk7CisJCS8qIGJueDJ4X2hhc19yeF93b3JrKCkgcmVhZHMgdGhlIHN0YXR1cyBibG9jaywgdGh1cyB3ZSBuZWVkCisJCSAqIHRvIGVuc3VyZSB0aGF0IHN0YXR1cyBibG9jayBpbmRpY2VzIGhhdmUgYmVlbiBhY3R1YWxseSByZWFkCisJCSAqIChibngyeF91cGRhdGVfZnBzYl9pZHgpIHByaW9yIHRvIHRoaXMgY2hlY2sKKwkJICogKGJueDJ4X2hhc19yeF93b3JrKSBzbyB0aGF0IHdlIHdvbid0IHdyaXRlIHRoZSAibmV3ZXIiCisJCSAqIHZhbHVlIG9mIHRoZSBzdGF0dXMgYmxvY2sgdG8gSUdVIChpZiB0aGVyZSB3YXMgYSBETUEgcmlnaHQKKwkJICogYWZ0ZXIgYm54MnhfaGFzX3J4X3dvcmsgYW5kIGlmIHRoZXJlIGlzIG5vIHJtYiwgdGhlIG1lbW9yeQorCQkgKiByZWFkaW5nIChibngyeF91cGRhdGVfZnBzYl9pZHgpIG1heSBiZSBwb3N0cG9uZWQgdG8gcmlnaHQKKwkJICogYmVmb3JlIGJueDJ4X2Fja19zYikuIEluIHRoaXMgY2FzZSB0aGVyZSB3aWxsIG5ldmVyIGJlCisJCSAqIGFub3RoZXIgaW50ZXJydXB0IHVudGlsIHRoZXJlIGlzIGFub3RoZXIgdXBkYXRlIG9mIHRoZQorCQkgKiBzdGF0dXMgYmxvY2ssIHdoaWxlIHRoZXJlIGlzIHN0aWxsIHVuaGFuZGxlZCB3b3JrLgorCQkgKi8KKwkJCXJtYigpOworCisJCQlpZiAoIShibngyeF9oYXNfcnhfd29yayhmcCkgfHwgYm54MnhfaGFzX3R4X3dvcmsoZnApKSkgeworCQkJCW5hcGlfY29tcGxldGUobmFwaSk7CisJCQkJLyogUmUtZW5hYmxlIGludGVycnVwdHMgKi8KKwkJCQlibngyeF9hY2tfc2IoYnAsIGZwLT5zYl9pZCwgQ1NUT1JNX0lELAorCQkJCQkgICAgIGxlMTZfdG9fY3B1KGZwLT5mcF9jX2lkeCksCisJCQkJCSAgICAgSUdVX0lOVF9OT1AsIDEpOworCQkJCWJueDJ4X2Fja19zYihicCwgZnAtPnNiX2lkLCBVU1RPUk1fSUQsCisJCQkJCSAgICAgbGUxNl90b19jcHUoZnAtPmZwX3VfaWR4KSwKKwkJCQkJICAgICBJR1VfSU5UX0VOQUJMRSwgMSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gd29ya19kb25lOworfQorCisKKy8qIHdlIHNwbGl0IHRoZSBmaXJzdCBCRCBpbnRvIGhlYWRlcnMgYW5kIGRhdGEgQkRzCisgKiB0byBlYXNlIHRoZSBwYWluIG9mIG91ciBmZWxsb3cgbWljcm9jb2RlIGVuZ2luZWVycworICogd2UgdXNlIG9uZSBtYXBwaW5nIGZvciBib3RoIEJEcworICogU28gZmFyIHRoaXMgaGFzIG9ubHkgYmVlbiBvYnNlcnZlZCB0byBoYXBwZW4KKyAqIGluIE90aGVyIE9wZXJhdGluZyBTeXN0ZW1zKFRNKQorICovCitzdGF0aWMgbm9pbmxpbmUgdTE2IGJueDJ4X3R4X3NwbGl0KHN0cnVjdCBibngyeCAqYnAsCisJCQkJICAgc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCwKKwkJCQkgICBzdHJ1Y3Qgc3dfdHhfYmQgKnR4X2J1ZiwKKwkJCQkgICBzdHJ1Y3QgZXRoX3R4X3N0YXJ0X2JkICoqdHhfYmQsIHUxNiBobGVuLAorCQkJCSAgIHUxNiBiZF9wcm9kLCBpbnQgbmJkKQoreworCXN0cnVjdCBldGhfdHhfc3RhcnRfYmQgKmhfdHhfYmQgPSAqdHhfYmQ7CisJc3RydWN0IGV0aF90eF9iZCAqZF90eF9iZDsKKwlkbWFfYWRkcl90IG1hcHBpbmc7CisJaW50IG9sZF9sZW4gPSBsZTE2X3RvX2NwdShoX3R4X2JkLT5uYnl0ZXMpOworCisJLyogZmlyc3QgZml4IGZpcnN0IEJEICovCisJaF90eF9iZC0+bmJkID0gY3B1X3RvX2xlMTYobmJkKTsKKwloX3R4X2JkLT5uYnl0ZXMgPSBjcHVfdG9fbGUxNihobGVuKTsKKworCURQKE5FVElGX01TR19UWF9RVUVVRUQsCSJUU08gc3BsaXQgaGVhZGVyIHNpemUgaXMgJWQgIgorCSAgICIoJXg6JXgpIG5iZCAlZFxuIiwgaF90eF9iZC0+bmJ5dGVzLCBoX3R4X2JkLT5hZGRyX2hpLAorCSAgIGhfdHhfYmQtPmFkZHJfbG8sIGhfdHhfYmQtPm5iZCk7CisKKwkvKiBub3cgZ2V0IGEgbmV3IGRhdGEgQkQKKwkgKiAoYWZ0ZXIgdGhlIHBiZCkgYW5kIGZpbGwgaXQgKi8KKwliZF9wcm9kID0gVFhfQkQoTkVYVF9UWF9JRFgoYmRfcHJvZCkpOworCWRfdHhfYmQgPSAmZnAtPnR4X2Rlc2NfcmluZ1tiZF9wcm9kXS5yZWdfYmQ7CisKKwltYXBwaW5nID0gSElMT19VNjQobGUzMl90b19jcHUoaF90eF9iZC0+YWRkcl9oaSksCisJCQkgICBsZTMyX3RvX2NwdShoX3R4X2JkLT5hZGRyX2xvKSkgKyBobGVuOworCisJZF90eF9iZC0+YWRkcl9oaSA9IGNwdV90b19sZTMyKFU2NF9ISShtYXBwaW5nKSk7CisJZF90eF9iZC0+YWRkcl9sbyA9IGNwdV90b19sZTMyKFU2NF9MTyhtYXBwaW5nKSk7CisJZF90eF9iZC0+bmJ5dGVzID0gY3B1X3RvX2xlMTYob2xkX2xlbiAtIGhsZW4pOworCisJLyogdGhpcyBtYXJrcyB0aGUgQkQgYXMgb25lIHRoYXQgaGFzIG5vIGluZGl2aWR1YWwgbWFwcGluZyAqLworCXR4X2J1Zi0+ZmxhZ3MgfD0gQk5YMlhfVFNPX1NQTElUX0JEOworCisJRFAoTkVUSUZfTVNHX1RYX1FVRVVFRCwKKwkgICAiVFNPIHNwbGl0IGRhdGEgc2l6ZSBpcyAlZCAoJXg6JXgpXG4iLAorCSAgIGRfdHhfYmQtPm5ieXRlcywgZF90eF9iZC0+YWRkcl9oaSwgZF90eF9iZC0+YWRkcl9sbyk7CisKKwkvKiB1cGRhdGUgdHhfYmQgKi8KKwkqdHhfYmQgPSAoc3RydWN0IGV0aF90eF9zdGFydF9iZCAqKWRfdHhfYmQ7CisKKwlyZXR1cm4gYmRfcHJvZDsKK30KKworc3RhdGljIGlubGluZSB1MTYgYm54MnhfY3N1bV9maXgodW5zaWduZWQgY2hhciAqdF9oZWFkZXIsIHUxNiBjc3VtLCBzOCBmaXgpCit7CisJaWYgKGZpeCA+IDApCisJCWNzdW0gPSAodTE2KSB+Y3N1bV9mb2xkKGNzdW1fc3ViKGNzdW0sCisJCQkJY3N1bV9wYXJ0aWFsKHRfaGVhZGVyIC0gZml4LCBmaXgsIDApKSk7CisKKwllbHNlIGlmIChmaXggPCAwKQorCQljc3VtID0gKHUxNikgfmNzdW1fZm9sZChjc3VtX2FkZChjc3VtLAorCQkJCWNzdW1fcGFydGlhbCh0X2hlYWRlciwgLWZpeCwgMCkpKTsKKworCXJldHVybiBzd2FiMTYoY3N1bSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGJueDJ4X3htaXRfdHlwZShzdHJ1Y3QgYm54MnggKmJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXUzMiByYzsKKworCWlmIChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9QQVJUSUFMKQorCQlyYyA9IFhNSVRfUExBSU47CisKKwllbHNlIHsKKwkJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHsKKwkJCXJjID0gWE1JVF9DU1VNX1Y2OworCQkJaWYgKGlwdjZfaGRyKHNrYiktPm5leHRoZHIgPT0gSVBQUk9UT19UQ1ApCisJCQkJcmMgfD0gWE1JVF9DU1VNX1RDUDsKKworCQl9IGVsc2UgeworCQkJcmMgPSBYTUlUX0NTVU1fVjQ7CisJCQlpZiAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQUFJPVE9fVENQKQorCQkJCXJjIHw9IFhNSVRfQ1NVTV9UQ1A7CisJCX0KKwl9CisKKwlpZiAoc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSAmIFNLQl9HU09fVENQVjQpCisJCXJjIHw9IChYTUlUX0dTT19WNCB8IFhNSVRfQ1NVTV9WNCB8IFhNSVRfQ1NVTV9UQ1ApOworCisJZWxzZSBpZiAoc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSAmIFNLQl9HU09fVENQVjYpCisJCXJjIHw9IChYTUlUX0dTT19WNiB8IFhNSVRfQ1NVTV9UQ1AgfCBYTUlUX0NTVU1fVjYpOworCisJcmV0dXJuIHJjOworfQorCisjaWYgKE1BWF9TS0JfRlJBR1MgPj0gTUFYX0ZFVENIX0JEIC0gMykKKy8qIGNoZWNrIGlmIHBhY2tldCByZXF1aXJlcyBsaW5lYXJpemF0aW9uIChwYWNrZXQgaXMgdG9vIGZyYWdtZW50ZWQpCisgICBubyBuZWVkIHRvIGNoZWNrIGZyYWdtZW50YXRpb24gaWYgcGFnZSBzaXplID4gOEsgKHRoZXJlIHdpbGwgYmUgbm8KKyAgIHZpb2xhdGlvbiB0byBGVyByZXN0cmljdGlvbnMpICovCitzdGF0aWMgaW50IGJueDJ4X3BrdF9yZXFfbGluKHN0cnVjdCBibngyeCAqYnAsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgIHUzMiB4bWl0X3R5cGUpCit7CisJaW50IHRvX2NvcHkgPSAwOworCWludCBobGVuID0gMDsKKwlpbnQgZmlyc3RfYmRfc3ogPSAwOworCisJLyogMyA9IDEgKGZvciBsaW5lYXIgZGF0YSBCRCkgKyAyIChmb3IgUEJEIGFuZCBsYXN0IEJEKSAqLworCWlmIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID49IChNQVhfRkVUQ0hfQkQgLSAzKSkgeworCisJCWlmICh4bWl0X3R5cGUgJiBYTUlUX0dTTykgeworCQkJdW5zaWduZWQgc2hvcnQgbHNvX21zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7CisJCQkvKiBDaGVjayBpZiBMU08gcGFja2V0IG5lZWRzIHRvIGJlIGNvcGllZDoKKwkJCSAgIDMgPSAxIChmb3IgaGVhZGVycyBCRCkgKyAyIChmb3IgUEJEIGFuZCBsYXN0IEJEKSAqLworCQkJaW50IHduZF9zaXplID0gTUFYX0ZFVENIX0JEIC0gMzsKKwkJCS8qIE51bWJlciBvZiB3aW5kb3dzIHRvIGNoZWNrICovCisJCQlpbnQgbnVtX3duZHMgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzIC0gd25kX3NpemU7CisJCQlpbnQgd25kX2lkeCA9IDA7CisJCQlpbnQgZnJhZ19pZHggPSAwOworCQkJdTMyIHduZF9zdW0gPSAwOworCisJCQkvKiBIZWFkZXJzIGxlbmd0aCAqLworCQkJaGxlbiA9IChpbnQpKHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYikgLSBza2ItPmRhdGEpICsKKwkJCQl0Y3BfaGRybGVuKHNrYik7CisKKwkJCS8qIEFtb3VudCBvZiBkYXRhICh3L28gaGVhZGVycykgb24gbGluZWFyIHBhcnQgb2YgU0tCKi8KKwkJCWZpcnN0X2JkX3N6ID0gc2tiX2hlYWRsZW4oc2tiKSAtIGhsZW47CisKKwkJCXduZF9zdW0gID0gZmlyc3RfYmRfc3o7CisKKwkJCS8qIENhbGN1bGF0ZSB0aGUgZmlyc3Qgc3VtIC0gaXQncyBzcGVjaWFsICovCisJCQlmb3IgKGZyYWdfaWR4ID0gMDsgZnJhZ19pZHggPCB3bmRfc2l6ZSAtIDE7IGZyYWdfaWR4KyspCisJCQkJd25kX3N1bSArPQorCQkJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ZyYWdfaWR4XS5zaXplOworCisJCQkvKiBJZiB0aGVyZSB3YXMgZGF0YSBvbiBsaW5lYXIgc2tiIGRhdGEgLSBjaGVjayBpdCAqLworCQkJaWYgKGZpcnN0X2JkX3N6ID4gMCkgeworCQkJCWlmICh1bmxpa2VseSh3bmRfc3VtIDwgbHNvX21zcykpIHsKKwkJCQkJdG9fY29weSA9IDE7CisJCQkJCWdvdG8gZXhpdF9sYmw7CisJCQkJfQorCisJCQkJd25kX3N1bSAtPSBmaXJzdF9iZF9zejsKKwkJCX0KKworCQkJLyogT3RoZXJzIGFyZSBlYXNpZXI6IHJ1biB0aHJvdWdoIHRoZSBmcmFnIGxpc3QgYW5kCisJCQkgICBjaGVjayBhbGwgd2luZG93cyAqLworCQkJZm9yICh3bmRfaWR4ID0gMDsgd25kX2lkeCA8PSBudW1fd25kczsgd25kX2lkeCsrKSB7CisJCQkJd25kX3N1bSArPQorCQkJICBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW3duZF9pZHggKyB3bmRfc2l6ZSAtIDFdLnNpemU7CisKKwkJCQlpZiAodW5saWtlbHkod25kX3N1bSA8IGxzb19tc3MpKSB7CisJCQkJCXRvX2NvcHkgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJd25kX3N1bSAtPQorCQkJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW3duZF9pZHhdLnNpemU7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBpbiBub24tTFNPIHRvbyBmcmFnbWVudGVkIHBhY2tldCBzaG91bGQgYWx3YXlzCisJCQkgICBiZSBsaW5lYXJpemVkICovCisJCQl0b19jb3B5ID0gMTsKKwkJfQorCX0KKworZXhpdF9sYmw6CisJaWYgKHVubGlrZWx5KHRvX2NvcHkpKQorCQlEUChORVRJRl9NU0dfVFhfUVVFVUVELAorCQkgICAiTGluZWFyaXphdGlvbiBJUyBSRVFVSVJFRCBmb3IgJXMgcGFja2V0LiAiCisJCSAgICJudW1fZnJhZ3MgJWQgIGhsZW4gJWQgIGZpcnN0X2JkX3N6ICVkXG4iLAorCQkgICAoeG1pdF90eXBlICYgWE1JVF9HU08pID8gIkxTTyIgOiAibm9uLUxTTyIsCisJCSAgIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MsIGhsZW4sIGZpcnN0X2JkX3N6KTsKKworCXJldHVybiB0b19jb3B5OworfQorI2VuZGlmCisKKy8qIGNhbGxlZCB3aXRoIG5ldGlmX3R4X2xvY2sKKyAqIGJueDJ4X3R4X2ludCgpIHJ1bnMgd2l0aG91dCBuZXRpZl90eF9sb2NrIHVubGVzcyBpdCBuZWVkcyB0byBjYWxsCisgKiBuZXRpZl93YWtlX3F1ZXVlKCkKKyAqLworbmV0ZGV2X3R4X3QgYm54Mnhfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnA7CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOworCXN0cnVjdCBzd190eF9iZCAqdHhfYnVmOworCXN0cnVjdCBldGhfdHhfc3RhcnRfYmQgKnR4X3N0YXJ0X2JkOworCXN0cnVjdCBldGhfdHhfYmQgKnR4X2RhdGFfYmQsICp0b3RhbF9wa3RfYmQgPSBOVUxMOworCXN0cnVjdCBldGhfdHhfcGFyc2VfYmQgKnBiZCA9IE5VTEw7CisJdTE2IHBrdF9wcm9kLCBiZF9wcm9kOworCWludCBuYmQsIGZwX2luZGV4OworCWRtYV9hZGRyX3QgbWFwcGluZzsKKwl1MzIgeG1pdF90eXBlID0gYm54MnhfeG1pdF90eXBlKGJwLCBza2IpOworCWludCBpOworCXU4IGhsZW4gPSAwOworCV9fbGUxNiBwa3Rfc2l6ZSA9IDA7CisJc3RydWN0IGV0aGhkciAqZXRoOworCXU4IG1hY190eXBlID0gVU5JQ0FTVF9BRERSRVNTOworCisjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgorCWlmICh1bmxpa2VseShicC0+cGFuaWMpKQorCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisjZW5kaWYKKworCWZwX2luZGV4ID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CisJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIGZwX2luZGV4KTsKKworCWZwID0gJmJwLT5mcFtmcF9pbmRleF07CisKKwlpZiAodW5saWtlbHkoYm54MnhfdHhfYXZhaWwoZnApIDwgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAzKSkpIHsKKwkJZnAtPmV0aF9xX3N0YXRzLmRyaXZlcl94b2ZmKys7CisJCW5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTsKKwkJQk5YMlhfRVJSKCJCVUchIFR4IHJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlIVxuIik7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CisKKwlEUChORVRJRl9NU0dfVFhfUVVFVUVELCAiU0tCOiBzdW1tZWQgJXggIHByb3RvY29sICV4ICBwcm90b2NvbCgleCwleCkiCisJICAgIiAgZ3NvIHR5cGUgJXggIHhtaXRfdHlwZSAleFxuIiwKKwkgICBza2ItPmlwX3N1bW1lZCwgc2tiLT5wcm90b2NvbCwgaXB2Nl9oZHIoc2tiKS0+bmV4dGhkciwKKwkgICBpcF9oZHIoc2tiKS0+cHJvdG9jb2wsIHNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUsIHhtaXRfdHlwZSk7CisKKwlldGggPSAoc3RydWN0IGV0aGhkciAqKXNrYi0+ZGF0YTsKKworCS8qIHNldCBmbGFnIGFjY29yZGluZyB0byBwYWNrZXQgdHlwZSAoVU5JQ0FTVF9BRERSRVNTIGlzIGRlZmF1bHQpKi8KKwlpZiAodW5saWtlbHkoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZXRoLT5oX2Rlc3QpKSkgeworCQlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoZXRoLT5oX2Rlc3QpKQorCQkJbWFjX3R5cGUgPSBCUk9BRENBU1RfQUREUkVTUzsKKwkJZWxzZQorCQkJbWFjX3R5cGUgPSBNVUxUSUNBU1RfQUREUkVTUzsKKwl9CisKKyNpZiAoTUFYX1NLQl9GUkFHUyA+PSBNQVhfRkVUQ0hfQkQgLSAzKQorCS8qIEZpcnN0LCBjaGVjayBpZiB3ZSBuZWVkIHRvIGxpbmVhcml6ZSB0aGUgc2tiIChkdWUgdG8gRlcKKwkgICByZXN0cmljdGlvbnMpLiBObyBuZWVkIHRvIGNoZWNrIGZyYWdtZW50YXRpb24gaWYgcGFnZSBzaXplID4gOEsKKwkgICAodGhlcmUgd2lsbCBiZSBubyB2aW9sYXRpb24gdG8gRlcgcmVzdHJpY3Rpb25zKSAqLworCWlmIChibngyeF9wa3RfcmVxX2xpbihicCwgc2tiLCB4bWl0X3R5cGUpKSB7CisJCS8qIFN0YXRpc3RpY3Mgb2YgbGluZWFyaXphdGlvbiAqLworCQlicC0+bGluX2NudCsrOworCQlpZiAoc2tiX2xpbmVhcml6ZShza2IpICE9IDApIHsKKwkJCURQKE5FVElGX01TR19UWF9RVUVVRUQsICJTS0IgbGluZWFyaXphdGlvbiBmYWlsZWQgLSAiCisJCQkgICAic2lsZW50bHkgZHJvcHBpbmcgdGhpcyBTS0JcbiIpOworCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CisJCX0KKwl9CisjZW5kaWYKKworCS8qCisJUGxlYXNlIHJlYWQgY2FyZWZ1bGx5LiBGaXJzdCB3ZSB1c2Ugb25lIEJEIHdoaWNoIHdlIG1hcmsgYXMgc3RhcnQsCisJdGhlbiB3ZSBoYXZlIGEgcGFyc2luZyBpbmZvIEJEICh1c2VkIGZvciBUU08gb3IgeHN1bSksCisJYW5kIG9ubHkgdGhlbiB3ZSBoYXZlIHRoZSByZXN0IG9mIHRoZSBUU08gQkRzLgorCShkb24ndCBmb3JnZXQgdG8gbWFyayB0aGUgbGFzdCBvbmUgYXMgbGFzdCwKKwlhbmQgdG8gdW5tYXAgb25seSBBRlRFUiB5b3Ugd3JpdGUgdG8gdGhlIEJEIC4uLikKKwlBbmQgYWJvdmUgYWxsLCBhbGwgcGRiIHNpemVzIGFyZSBpbiB3b3JkcyAtIE5PVCBEV09SRFMhCisJKi8KKworCXBrdF9wcm9kID0gZnAtPnR4X3BrdF9wcm9kKys7CisJYmRfcHJvZCA9IFRYX0JEKGZwLT50eF9iZF9wcm9kKTsKKworCS8qIGdldCBhIHR4X2J1ZiBhbmQgZmlyc3QgQkQgKi8KKwl0eF9idWYgPSAmZnAtPnR4X2J1Zl9yaW5nW1RYX0JEKHBrdF9wcm9kKV07CisJdHhfc3RhcnRfYmQgPSAmZnAtPnR4X2Rlc2NfcmluZ1tiZF9wcm9kXS5zdGFydF9iZDsKKworCXR4X3N0YXJ0X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCA9IEVUSF9UWF9CRF9GTEFHU19TVEFSVF9CRDsKKwl0eF9zdGFydF9iZC0+Z2VuZXJhbF9kYXRhID0gIChtYWNfdHlwZSA8PAorCQkJCQlFVEhfVFhfU1RBUlRfQkRfRVRIX0FERFJfVFlQRV9TSElGVCk7CisJLyogaGVhZGVyIG5iZCAqLworCXR4X3N0YXJ0X2JkLT5nZW5lcmFsX2RhdGEgfD0gKDEgPDwgRVRIX1RYX1NUQVJUX0JEX0hEUl9OQkRTX1NISUZUKTsKKworCS8qIHJlbWVtYmVyIHRoZSBmaXJzdCBCRCBvZiB0aGUgcGFja2V0ICovCisJdHhfYnVmLT5maXJzdF9iZCA9IGZwLT50eF9iZF9wcm9kOworCXR4X2J1Zi0+c2tiID0gc2tiOworCXR4X2J1Zi0+ZmxhZ3MgPSAwOworCisJRFAoTkVUSUZfTVNHX1RYX1FVRVVFRCwKKwkgICAic2VuZGluZyBwa3QgJXUgQCVwICBuZXh0X2lkeCAldSAgYmQgJXUgQCVwXG4iLAorCSAgIHBrdF9wcm9kLCB0eF9idWYsIGZwLT50eF9wa3RfcHJvZCwgYmRfcHJvZCwgdHhfc3RhcnRfYmQpOworCisjaWZkZWYgQkNNX1ZMQU4KKwlpZiAoKGJwLT52bGdycCAhPSBOVUxMKSAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikgJiYKKwkgICAgKGJwLT5mbGFncyAmIEhXX1ZMQU5fVFhfRkxBRykpIHsKKwkJdHhfc3RhcnRfYmQtPnZsYW4gPSBjcHVfdG9fbGUxNih2bGFuX3R4X3RhZ19nZXQoc2tiKSk7CisJCXR4X3N0YXJ0X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCB8PSBFVEhfVFhfQkRfRkxBR1NfVkxBTl9UQUc7CisJfSBlbHNlCisjZW5kaWYKKwkJdHhfc3RhcnRfYmQtPnZsYW4gPSBjcHVfdG9fbGUxNihwa3RfcHJvZCk7CisKKwkvKiB0dXJuIG9uIHBhcnNpbmcgYW5kIGdldCBhIEJEICovCisJYmRfcHJvZCA9IFRYX0JEKE5FWFRfVFhfSURYKGJkX3Byb2QpKTsKKwlwYmQgPSAmZnAtPnR4X2Rlc2NfcmluZ1tiZF9wcm9kXS5wYXJzZV9iZDsKKworCW1lbXNldChwYmQsIDAsIHNpemVvZihzdHJ1Y3QgZXRoX3R4X3BhcnNlX2JkKSk7CisKKwlpZiAoeG1pdF90eXBlICYgWE1JVF9DU1VNKSB7CisJCWhsZW4gPSAoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgLSBza2ItPmRhdGEpIC8gMjsKKworCQkvKiBmb3Igbm93IE5TIGZsYWcgaXMgbm90IHVzZWQgaW4gTGludXggKi8KKwkJcGJkLT5nbG9iYWxfZGF0YSA9CisJCQkoaGxlbiB8ICgoc2tiLT5wcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF84MDIxUSkpIDw8CisJCQkJIEVUSF9UWF9QQVJTRV9CRF9MTENfU05BUF9FTl9TSElGVCkpOworCisJCXBiZC0+aXBfaGxlbiA9IChza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpIC0KKwkJCQlza2JfbmV0d29ya19oZWFkZXIoc2tiKSkgLyAyOworCisJCWhsZW4gKz0gcGJkLT5pcF9obGVuICsgdGNwX2hkcmxlbihza2IpIC8gMjsKKworCQlwYmQtPnRvdGFsX2hsZW4gPSBjcHVfdG9fbGUxNihobGVuKTsKKwkJaGxlbiA9IGhsZW4qMjsKKworCQl0eF9zdGFydF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgfD0gRVRIX1RYX0JEX0ZMQUdTX0w0X0NTVU07CisKKwkJaWYgKHhtaXRfdHlwZSAmIFhNSVRfQ1NVTV9WNCkKKwkJCXR4X3N0YXJ0X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCB8PQorCQkJCQkJRVRIX1RYX0JEX0ZMQUdTX0lQX0NTVU07CisJCWVsc2UKKwkJCXR4X3N0YXJ0X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCB8PQorCQkJCQkJRVRIX1RYX0JEX0ZMQUdTX0lQVjY7CisKKwkJaWYgKHhtaXRfdHlwZSAmIFhNSVRfQ1NVTV9UQ1ApIHsKKwkJCXBiZC0+dGNwX3BzZXVkb19jc3VtID0gc3dhYjE2KHRjcF9oZHIoc2tiKS0+Y2hlY2spOworCisJCX0gZWxzZSB7CisJCQlzOCBmaXggPSBTS0JfQ1NfT0ZGKHNrYik7IC8qIHNpZ25lZCEgKi8KKworCQkJcGJkLT5nbG9iYWxfZGF0YSB8PSBFVEhfVFhfUEFSU0VfQkRfVURQX0NTX0ZMRzsKKworCQkJRFAoTkVUSUZfTVNHX1RYX1FVRVVFRCwKKwkJCSAgICJobGVuICVkICBmaXggJWQgIGNzdW0gYmVmb3JlIGZpeCAleFxuIiwKKwkJCSAgIGxlMTZfdG9fY3B1KHBiZC0+dG90YWxfaGxlbiksIGZpeCwgU0tCX0NTKHNrYikpOworCisJCQkvKiBIVyBidWc6IGZpeHVwIHRoZSBDU1VNICovCisJCQlwYmQtPnRjcF9wc2V1ZG9fY3N1bSA9CisJCQkJYm54MnhfY3N1bV9maXgoc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSwKKwkJCQkJICAgICAgIFNLQl9DUyhza2IpLCBmaXgpOworCisJCQlEUChORVRJRl9NU0dfVFhfUVVFVUVELCAiY3N1bSBhZnRlciBmaXggJXhcbiIsCisJCQkgICBwYmQtPnRjcF9wc2V1ZG9fY3N1bSk7CisJCX0KKwl9CisKKwltYXBwaW5nID0gZG1hX21hcF9zaW5nbGUoJmJwLT5wZGV2LT5kZXYsIHNrYi0+ZGF0YSwKKwkJCQkgc2tiX2hlYWRsZW4oc2tiKSwgRE1BX1RPX0RFVklDRSk7CisKKwl0eF9zdGFydF9iZC0+YWRkcl9oaSA9IGNwdV90b19sZTMyKFU2NF9ISShtYXBwaW5nKSk7CisJdHhfc3RhcnRfYmQtPmFkZHJfbG8gPSBjcHVfdG9fbGUzMihVNjRfTE8obWFwcGluZykpOworCW5iZCA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAyOyAvKiBzdGFydF9iZCArIHBiZCArIGZyYWdzICovCisJdHhfc3RhcnRfYmQtPm5iZCA9IGNwdV90b19sZTE2KG5iZCk7CisJdHhfc3RhcnRfYmQtPm5ieXRlcyA9IGNwdV90b19sZTE2KHNrYl9oZWFkbGVuKHNrYikpOworCXBrdF9zaXplID0gdHhfc3RhcnRfYmQtPm5ieXRlczsKKworCURQKE5FVElGX01TR19UWF9RVUVVRUQsICJmaXJzdCBiZCBAJXAgIGFkZHIgKCV4OiV4KSAgbmJkICVkIgorCSAgICIgIG5ieXRlcyAlZCAgZmxhZ3MgJXggIHZsYW4gJXhcbiIsCisJICAgdHhfc3RhcnRfYmQsIHR4X3N0YXJ0X2JkLT5hZGRyX2hpLCB0eF9zdGFydF9iZC0+YWRkcl9sbywKKwkgICBsZTE2X3RvX2NwdSh0eF9zdGFydF9iZC0+bmJkKSwgbGUxNl90b19jcHUodHhfc3RhcnRfYmQtPm5ieXRlcyksCisJICAgdHhfc3RhcnRfYmQtPmJkX2ZsYWdzLmFzX2JpdGZpZWxkLCBsZTE2X3RvX2NwdSh0eF9zdGFydF9iZC0+dmxhbikpOworCisJaWYgKHhtaXRfdHlwZSAmIFhNSVRfR1NPKSB7CisKKwkJRFAoTkVUSUZfTVNHX1RYX1FVRVVFRCwKKwkJICAgIlRTTyBwYWNrZXQgbGVuICVkICBobGVuICVkICB0b3RhbCBsZW4gJWQgIHRzbyBzaXplICVkXG4iLAorCQkgICBza2ItPmxlbiwgaGxlbiwgc2tiX2hlYWRsZW4oc2tiKSwKKwkJICAgc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSk7CisKKwkJdHhfc3RhcnRfYmQtPmJkX2ZsYWdzLmFzX2JpdGZpZWxkIHw9IEVUSF9UWF9CRF9GTEFHU19TV19MU087CisKKwkJaWYgKHVubGlrZWx5KHNrYl9oZWFkbGVuKHNrYikgPiBobGVuKSkKKwkJCWJkX3Byb2QgPSBibngyeF90eF9zcGxpdChicCwgZnAsIHR4X2J1ZiwgJnR4X3N0YXJ0X2JkLAorCQkJCQkJIGhsZW4sIGJkX3Byb2QsICsrbmJkKTsKKworCQlwYmQtPmxzb19tc3MgPSBjcHVfdG9fbGUxNihza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplKTsKKwkJcGJkLT50Y3Bfc2VuZF9zZXEgPSBzd2FiMzIodGNwX2hkcihza2IpLT5zZXEpOworCQlwYmQtPnRjcF9mbGFncyA9IHBiZF90Y3BfZmxhZ3Moc2tiKTsKKworCQlpZiAoeG1pdF90eXBlICYgWE1JVF9HU09fVjQpIHsKKwkJCXBiZC0+aXBfaWQgPSBzd2FiMTYoaXBfaGRyKHNrYiktPmlkKTsKKwkJCXBiZC0+dGNwX3BzZXVkb19jc3VtID0KKwkJCQlzd2FiMTYofmNzdW1fdGNwdWRwX21hZ2ljKGlwX2hkcihza2IpLT5zYWRkciwKKwkJCQkJCQkgIGlwX2hkcihza2IpLT5kYWRkciwKKwkJCQkJCQkgIDAsIElQUFJPVE9fVENQLCAwKSk7CisKKwkJfSBlbHNlCisJCQlwYmQtPnRjcF9wc2V1ZG9fY3N1bSA9CisJCQkJc3dhYjE2KH5jc3VtX2lwdjZfbWFnaWMoJmlwdjZfaGRyKHNrYiktPnNhZGRyLAorCQkJCQkJCSZpcHY2X2hkcihza2IpLT5kYWRkciwKKwkJCQkJCQkwLCBJUFBST1RPX1RDUCwgMCkpOworCisJCXBiZC0+Z2xvYmFsX2RhdGEgfD0gRVRIX1RYX1BBUlNFX0JEX1BTRVVET19DU19XSVRIT1VUX0xFTjsKKwl9CisJdHhfZGF0YV9iZCA9IChzdHJ1Y3QgZXRoX3R4X2JkICopdHhfc3RhcnRfYmQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgaSsrKSB7CisJCXNrYl9mcmFnX3QgKmZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKKworCQliZF9wcm9kID0gVFhfQkQoTkVYVF9UWF9JRFgoYmRfcHJvZCkpOworCQl0eF9kYXRhX2JkID0gJmZwLT50eF9kZXNjX3JpbmdbYmRfcHJvZF0ucmVnX2JkOworCQlpZiAodG90YWxfcGt0X2JkID09IE5VTEwpCisJCQl0b3RhbF9wa3RfYmQgPSAmZnAtPnR4X2Rlc2NfcmluZ1tiZF9wcm9kXS5yZWdfYmQ7CisKKwkJbWFwcGluZyA9IGRtYV9tYXBfcGFnZSgmYnAtPnBkZXYtPmRldiwgZnJhZy0+cGFnZSwKKwkJCQkgICAgICAgZnJhZy0+cGFnZV9vZmZzZXQsCisJCQkJICAgICAgIGZyYWctPnNpemUsIERNQV9UT19ERVZJQ0UpOworCisJCXR4X2RhdGFfYmQtPmFkZHJfaGkgPSBjcHVfdG9fbGUzMihVNjRfSEkobWFwcGluZykpOworCQl0eF9kYXRhX2JkLT5hZGRyX2xvID0gY3B1X3RvX2xlMzIoVTY0X0xPKG1hcHBpbmcpKTsKKwkJdHhfZGF0YV9iZC0+bmJ5dGVzID0gY3B1X3RvX2xlMTYoZnJhZy0+c2l6ZSk7CisJCWxlMTZfYWRkX2NwdSgmcGt0X3NpemUsIGZyYWctPnNpemUpOworCisJCURQKE5FVElGX01TR19UWF9RVUVVRUQsCisJCSAgICJmcmFnICVkICBiZCBAJXAgIGFkZHIgKCV4OiV4KSAgbmJ5dGVzICVkXG4iLAorCQkgICBpLCB0eF9kYXRhX2JkLCB0eF9kYXRhX2JkLT5hZGRyX2hpLCB0eF9kYXRhX2JkLT5hZGRyX2xvLAorCQkgICBsZTE2X3RvX2NwdSh0eF9kYXRhX2JkLT5uYnl0ZXMpKTsKKwl9CisKKwlEUChORVRJRl9NU0dfVFhfUVVFVUVELCAibGFzdCBiZCBAJXBcbiIsIHR4X2RhdGFfYmQpOworCisJYmRfcHJvZCA9IFRYX0JEKE5FWFRfVFhfSURYKGJkX3Byb2QpKTsKKworCS8qIG5vdyBzZW5kIGEgdHggZG9vcmJlbGwsIGNvdW50aW5nIHRoZSBuZXh0IEJECisJICogaWYgdGhlIHBhY2tldCBjb250YWlucyBvciBlbmRzIHdpdGggaXQKKwkgKi8KKwlpZiAoVFhfQkRfUE9GRihiZF9wcm9kKSA8IG5iZCkKKwkJbmJkKys7CisKKwlpZiAodG90YWxfcGt0X2JkICE9IE5VTEwpCisJCXRvdGFsX3BrdF9iZC0+dG90YWxfcGt0X2J5dGVzID0gcGt0X3NpemU7CisKKwlpZiAocGJkKQorCQlEUChORVRJRl9NU0dfVFhfUVVFVUVELAorCQkgICAiUEJEIEAlcCAgaXBfZGF0YSAleCAgaXBfaGxlbiAldSAgaXBfaWQgJXUgIGxzb19tc3MgJXUiCisJCSAgICIgIHRjcF9mbGFncyAleCAgeHN1bSAleCAgc2VxICV1ICBobGVuICV1XG4iLAorCQkgICBwYmQsIHBiZC0+Z2xvYmFsX2RhdGEsIHBiZC0+aXBfaGxlbiwgcGJkLT5pcF9pZCwKKwkJICAgcGJkLT5sc29fbXNzLCBwYmQtPnRjcF9mbGFncywgcGJkLT50Y3BfcHNldWRvX2NzdW0sCisJCSAgIHBiZC0+dGNwX3NlbmRfc2VxLCBsZTE2X3RvX2NwdShwYmQtPnRvdGFsX2hsZW4pKTsKKworCURQKE5FVElGX01TR19UWF9RVUVVRUQsICJkb29yYmVsbDogbmJkICVkICBiZCAldVxuIiwgbmJkLCBiZF9wcm9kKTsKKworCS8qCisJICogTWFrZSBzdXJlIHRoYXQgdGhlIEJEIGRhdGEgaXMgdXBkYXRlZCBiZWZvcmUgdXBkYXRpbmcgdGhlIHByb2R1Y2VyCisJICogc2luY2UgRlcgbWlnaHQgcmVhZCB0aGUgQkQgcmlnaHQgYWZ0ZXIgdGhlIHByb2R1Y2VyIGlzIHVwZGF0ZWQuCisJICogVGhpcyBpcyBvbmx5IGFwcGxpY2FibGUgZm9yIHdlYWstb3JkZXJlZCBtZW1vcnkgbW9kZWwgYXJjaHMgc3VjaAorCSAqIGFzIElBLTY0LiBUaGUgZm9sbG93aW5nIGJhcnJpZXIgaXMgYWxzbyBtYW5kYXRvcnkgc2luY2UgRlcgd2lsbAorCSAqIGFzc3VtZXMgcGFja2V0cyBtdXN0IGhhdmUgQkRzLgorCSAqLworCXdtYigpOworCisJZnAtPnR4X2RiLmRhdGEucHJvZCArPSBuYmQ7CisJYmFycmllcigpOworCURPT1JCRUxMKGJwLCBmcC0+aW5kZXgsIGZwLT50eF9kYi5yYXcpOworCisJbW1pb3diKCk7CisKKwlmcC0+dHhfYmRfcHJvZCArPSBuYmQ7CisKKwlpZiAodW5saWtlbHkoYm54MnhfdHhfYXZhaWwoZnApIDwgTUFYX1NLQl9GUkFHUyArIDMpKSB7CisJCW5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTsKKworCQkvKiBwYWlyZWQgbWVtb3J5IGJhcnJpZXIgaXMgaW4gYm54MnhfdHhfaW50KCksIHdlIGhhdmUgdG8ga2VlcAorCQkgKiBvcmRlcmluZyBvZiBzZXRfYml0KCkgaW4gbmV0aWZfdHhfc3RvcF9xdWV1ZSgpIGFuZCByZWFkIG9mCisJCSAqIGZwLT5iZF90eF9jb25zICovCisJCXNtcF9tYigpOworCisJCWZwLT5ldGhfcV9zdGF0cy5kcml2ZXJfeG9mZisrOworCQlpZiAoYm54MnhfdHhfYXZhaWwoZnApID49IE1BWF9TS0JfRlJBR1MgKyAzKQorCQkJbmV0aWZfdHhfd2FrZV9xdWV1ZSh0eHEpOworCX0KKwlmcC0+dHhfcGt0Kys7CisKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorLyogY2FsbGVkIHdpdGggcnRubF9sb2NrICovCitpbnQgYm54MnhfY2hhbmdlX21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApCit7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcigodTggKikoYWRkci0+c2FfZGF0YSkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWlmIChDSElQX0lTX0UxKGJwKSkKKwkJCWJueDJ4X3NldF9ldGhfbWFjX2FkZHJfZTEoYnAsIDEpOworCQllbHNlCisJCQlibngyeF9zZXRfZXRoX21hY19hZGRyX2UxaChicCwgMSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIGNhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLworaW50IGJueDJ4X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHJjID0gMDsKKworCWlmIChicC0+cmVjb3Zlcnlfc3RhdGUgIT0gQk5YMlhfUkVDT1ZFUllfRE9ORSkgeworCQlwcmludGsoS0VSTl9FUlIgIkhhbmRsaW5nIHBhcml0eSBlcnJvciByZWNvdmVyeS4gVHJ5IGFnYWluIGxhdGVyXG4iKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJaWYgKChuZXdfbXR1ID4gRVRIX01BWF9KVU1CT19QQUNLRVRfU0laRSkgfHwKKwkgICAgKChuZXdfbXR1ICsgRVRIX0hMRU4pIDwgRVRIX01JTl9QQUNLRVRfU0laRSkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogVGhpcyBkb2VzIG5vdCByYWNlIHdpdGggcGFja2V0IGFsbG9jYXRpb24KKwkgKiBiZWNhdXNlIHRoZSBhY3R1YWwgYWxsb2Mgc2l6ZSBpcworCSAqIG9ubHkgdXBkYXRlZCBhcyBwYXJ0IG9mIGxvYWQKKwkgKi8KKwlkZXYtPm10dSA9IG5ld19tdHU7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWJueDJ4X25pY191bmxvYWQoYnAsIFVOTE9BRF9OT1JNQUwpOworCQlyYyA9IGJueDJ4X25pY19sb2FkKGJwLCBMT0FEX05PUk1BTCk7CisJfQorCisJcmV0dXJuIHJjOworfQorCit2b2lkIGJueDJ4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKKwlpZiAoIWJwLT5wYW5pYykKKwkJYm54MnhfcGFuaWMoKTsKKyNlbmRpZgorCS8qIFRoaXMgYWxsb3dzIHRoZSBuZXRpZiB0byBiZSBzaHV0ZG93biBncmFjZWZ1bGx5IGJlZm9yZSByZXNldHRpbmcgKi8KKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmJwLT5yZXNldF90YXNrLCAwKTsKK30KKworI2lmZGVmIEJDTV9WTEFOCisvKiBjYWxsZWQgd2l0aCBydG5sX2xvY2sgKi8KK3ZvaWQgYm54Mnhfdmxhbl9yeF9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCB2bGFuX2dyb3VwICp2bGdycCkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWJwLT52bGdycCA9IHZsZ3JwOworCisJLyogU2V0IGZsYWdzIGFjY29yZGluZyB0byB0aGUgcmVxdWlyZWQgY2FwYWJpbGl0aWVzICovCisJYnAtPmZsYWdzICY9IH4oSFdfVkxBTl9SWF9GTEFHIHwgSFdfVkxBTl9UWF9GTEFHKTsKKworCWlmIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19WTEFOX1RYKQorCQlicC0+ZmxhZ3MgfD0gSFdfVkxBTl9UWF9GTEFHOworCisJaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fUlgpCisJCWJwLT5mbGFncyB8PSBIV19WTEFOX1JYX0ZMQUc7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKQorCQlibngyeF9zZXRfY2xpZW50X2NvbmZpZyhicCk7Cit9CisKKyNlbmRpZgoraW50IGJueDJ4X3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBibngyeCAqYnA7CisKKwlpZiAoIWRldikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJCQUQgbmV0IGRldmljZSBmcm9tIGJueDJ4X2luaXRfb25lXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJ0bmxfbG9jaygpOworCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQlydG5sX3VubG9jaygpOworCQlyZXR1cm4gMDsKKwl9CisKKwluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CisKKwlibngyeF9uaWNfdW5sb2FkKGJwLCBVTkxPQURfQ0xPU0UpOworCisJYm54Mnhfc2V0X3Bvd2VyX3N0YXRlKGJwLCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSk7CisKKwlydG5sX3VubG9jaygpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBibngyeF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYm54MnggKmJwOworCWludCByYzsKKworCWlmICghZGV2KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkJBRCBuZXQgZGV2aWNlIGZyb20gYm54MnhfaW5pdF9vbmVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKGJwLT5yZWNvdmVyeV9zdGF0ZSAhPSBCTlgyWF9SRUNPVkVSWV9ET05FKSB7CisJCXByaW50ayhLRVJOX0VSUiAiSGFuZGxpbmcgcGFyaXR5IGVycm9yIHJlY292ZXJ5LiBUcnkgYWdhaW4gbGF0ZXJcbiIpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKwlydG5sX2xvY2soKTsKKworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJcnRubF91bmxvY2soKTsKKwkJcmV0dXJuIDA7CisJfQorCisJYm54Mnhfc2V0X3Bvd2VyX3N0YXRlKGJwLCBQQ0lfRDApOworCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKKworCXJjID0gYm54MnhfbmljX2xvYWQoYnAsIExPQURfT1BFTik7CisKKwlydG5sX3VubG9jaygpOworCisJcmV0dXJuIHJjOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmggYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9jbW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTk3OWIxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmgKQEAgLTAsMCArMSw2NTIgQEAKKy8qIGJueDJ4X2Ntbi5oOiBCcm9hZGNvbSBFdmVyZXN0IG5ldHdvcmsgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDEwIEJyb2FkY29tIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE1haW50YWluZWQgYnk6IEVpbG9uIEdyZWVuc3RlaW4gPGVpbG9uZ0Bicm9hZGNvbS5jb20+CisgKiBXcml0dGVuIGJ5OiBFbGllemVyIFRhbWlyCisgKiBCYXNlZCBvbiBjb2RlIGZyb20gTWljaGFlbCBDaGFuJ3MgYm54MiBkcml2ZXIKKyAqIFVEUCBDU1VNIGVycmF0YSB3b3JrYXJvdW5kIGJ5IEFyaWsgR2VuZGVsbWFuCisgKiBTbG93cGF0aCBhbmQgZmFzdHBhdGggcmV3b3JrIGJ5IFZsYWRpc2xhdiBab2xvdGFyb3YKKyAqIFN0YXRpc3RpY3MgYW5kIExpbmsgbWFuYWdlbWVudCBieSBZaXRjaGFrIEdlcnRuZXIKKyAqCisgKi8KKyNpZm5kZWYgQk5YMlhfQ01OX0gKKyNkZWZpbmUgQk5YMlhfQ01OX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisKKworI2luY2x1ZGUgImJueDJ4LmgiCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqIEludGVyZmFjZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEZ1bmN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBkcml2ZXIgdmVyc2lvbgorICovCisKKy8qKgorICogSW5pdGlhbGl6ZSBsaW5rIHBhcmFtZXRlcnMgc3RydWN0dXJlIHZhcmlhYmxlcy4KKyAqCisgKiBAcGFyYW0gYnAKKyAqIEBwYXJhbSBsb2FkX21vZGUKKyAqCisgKiBAcmV0dXJuIHU4CisgKi8KK3U4IGJueDJ4X2luaXRpYWxfcGh5X2luaXQoc3RydWN0IGJueDJ4ICpicCwgaW50IGxvYWRfbW9kZSk7CisKKy8qKgorICogQ29uZmlndXJlIGh3IGFjY29yZGluZyB0byBsaW5rIHBhcmFtZXRlcnMgc3RydWN0dXJlLgorICoKKyAqIEBwYXJhbSBicAorICovCit2b2lkIGJueDJ4X2xpbmtfc2V0KHN0cnVjdCBibngyeCAqYnApOworCisvKioKKyAqIFF1ZXJ5IGxpbmsgc3RhdHVzCisgKgorICogQHBhcmFtIGJwCisgKgorICogQHJldHVybiAwIC0gbGluayBpcyBVUAorICovCit1OCBibngyeF9saW5rX3Rlc3Qoc3RydWN0IGJueDJ4ICpicCk7CisKKy8qKgorICogSGFuZGxlcyBsaW5rIHN0YXR1cyBjaGFuZ2UKKyAqCisgKiBAcGFyYW0gYnAKKyAqLwordm9pZCBibngyeF9fbGlua19zdGF0dXNfdXBkYXRlKHN0cnVjdCBibngyeCAqYnApOworCisvKioKKyAqIE1TSS1YIHNsb3dwYXRoIGludGVycnVwdCBoYW5kbGVyCisgKgorICogQHBhcmFtIGlycQorICogQHBhcmFtIGRldl9pbnN0YW5jZQorICoKKyAqIEByZXR1cm4gaXJxcmV0dXJuX3QKKyAqLworaXJxcmV0dXJuX3QgYm54MnhfbXNpeF9zcF9pbnQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKTsKKworLyoqCisgKiBub24gTVNJLVggaW50ZXJydXB0IGhhbmRsZXIKKyAqCisgKiBAcGFyYW0gaXJxCisgKiBAcGFyYW0gZGV2X2luc3RhbmNlCisgKgorICogQHJldHVybiBpcnFyZXR1cm5fdAorICovCitpcnFyZXR1cm5fdCBibngyeF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKTsKKyNpZmRlZiBCQ01fQ05JQworCisvKioKKyAqIFNlbmQgY29tbWFuZCB0byBjbmljIGRyaXZlcgorICoKKyAqIEBwYXJhbSBicAorICogQHBhcmFtIGNtZAorICovCitpbnQgYm54MnhfY25pY19ub3RpZnkoc3RydWN0IGJueDJ4ICpicCwgaW50IGNtZCk7CisKKy8qKgorICogUHJvdmlkZXMgY25pYyBpbmZvcm1hdGlvbiBmb3IgcHJvcGVyIGludGVycnVwdCBoYW5kbGluZworICoKKyAqIEBwYXJhbSBicAorICovCit2b2lkIGJueDJ4X3NldHVwX2NuaWNfaXJxX2luZm8oc3RydWN0IGJueDJ4ICpicCk7CisjZW5kaWYKKworLyoqCisgKiBFbmFibGUgSFcgaW50ZXJydXB0cy4KKyAqCisgKiBAcGFyYW0gYnAKKyAqLwordm9pZCBibngyeF9pbnRfZW5hYmxlKHN0cnVjdCBibngyeCAqYnApOworCisvKioKKyAqIERpc2FibGUgaW50ZXJydXB0cy4gVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlcmUgYXJlIG5vCisgKiBJU1JzIG9yIFNQIERQQ3MgKHNwX3Rhc2spIGFyZSBydW5uaW5nIGFmdGVyIGl0IHJldHVybnMuCisgKgorICogQHBhcmFtIGJwCisgKiBAcGFyYW0gZGlzYWJsZV9odyBpZiB0cnVlLCBkaXNhYmxlIEhXIGludGVycnVwdHMuCisgKi8KK3ZvaWQgYm54MnhfaW50X2Rpc2FibGVfc3luYyhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZGlzYWJsZV9odyk7CisKKy8qKgorICogSW5pdCBIVyBibG9ja3MgYWNjb3JkaW5nIHRvIGN1cnJlbnQgaW5pdGlhbGl6YXRpb24gc3RhZ2U6CisgKiBDT01NT04sIFBPUlQgb3IgRlVOQ1RJT04uCisgKgorICogQHBhcmFtIGJwCisgKiBAcGFyYW0gbG9hZF9jb2RlOiBDT01NT04sIFBPUlQgb3IgRlVOQ1RJT04KKyAqCisgKiBAcmV0dXJuIGludAorICovCitpbnQgYm54MnhfaW5pdF9odyhzdHJ1Y3QgYm54MnggKmJwLCB1MzIgbG9hZF9jb2RlKTsKKworLyoqCisgKiBJbml0IGRyaXZlciBpbnRlcm5hbHM6CisgKiAgLSByaW5ncworICogIC0gc3RhdHVzIGJsb2NrcworICogIC0gZXRjLgorICoKKyAqIEBwYXJhbSBicAorICogQHBhcmFtIGxvYWRfY29kZSBDT01NT04sIFBPUlQgb3IgRlVOQ1RJT04KKyAqLwordm9pZCBibngyeF9uaWNfaW5pdChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgbG9hZF9jb2RlKTsKKworLyoqCisgKiBBbGxvY2F0ZSBkcml2ZXIncyBtZW1vcnkuCisgKgorICogQHBhcmFtIGJwCisgKgorICogQHJldHVybiBpbnQKKyAqLworaW50IGJueDJ4X2FsbG9jX21lbShzdHJ1Y3QgYm54MnggKmJwKTsKKworLyoqCisgKiBSZWxlYXNlIGRyaXZlcidzIG1lbW9yeS4KKyAqCisgKiBAcGFyYW0gYnAKKyAqLwordm9pZCBibngyeF9mcmVlX21lbShzdHJ1Y3QgYm54MnggKmJwKTsKKworLyoqCisgKiBCcmluZyB1cCBhIGxlYWRpbmcgKHRoZSBmaXJzdCkgZXRoIENsaWVudC4KKyAqCisgKiBAcGFyYW0gYnAKKyAqCisgKiBAcmV0dXJuIGludAorICovCitpbnQgYm54Mnhfc2V0dXBfbGVhZGluZyhzdHJ1Y3QgYm54MnggKmJwKTsKKworLyoqCisgKiBTZXR1cCBub24tbGVhZGluZyBldGggQ2xpZW50LgorICoKKyAqIEBwYXJhbSBicAorICogQHBhcmFtIGZwCisgKgorICogQHJldHVybiBpbnQKKyAqLworaW50IGJueDJ4X3NldHVwX211bHRpKHN0cnVjdCBibngyeCAqYnAsIGludCBpbmRleCk7CisKKy8qKgorICogU2V0IG51bWJlciBvZiBxdXVldXMgYWNjb3JkaW5nIHRvIG1vZGUgYW5kIG51bWJlciBvZiBhdmFpbGFibGUKKyAqIG1zaS14IHZlY3RvcnMKKyAqCisgKiBAcGFyYW0gYnAKKyAqCisgKi8KK3ZvaWQgYm54Mnhfc2V0X251bV9xdWV1ZXNfbXNpeChzdHJ1Y3QgYm54MnggKmJwKTsKKworLyoqCisgKiBDbGVhbnVwIGNoaXAgaW50ZXJuYWxzOgorICogLSBDbGVhbnVwIE1BQyBjb25maWd1cmF0aW9uLgorICogLSBDbG9zZSBjbGllbnRzLgorICogLSBldGMuCisgKgorICogQHBhcmFtIGJwCisgKiBAcGFyYW0gdW5sb2FkX21vZGUKKyAqLwordm9pZCBibngyeF9jaGlwX2NsZWFudXAoc3RydWN0IGJueDJ4ICpicCwgaW50IHVubG9hZF9tb2RlKTsKKworLyoqCisgKiBBY3F1aXJlIEhXIGxvY2suCisgKgorICogQHBhcmFtIGJwCisgKiBAcGFyYW0gcmVzb3VyY2UgUmVzb3VyY2UgYml0IHdoaWNoIHdhcyBsb2NrZWQKKyAqCisgKiBAcmV0dXJuIGludAorICovCitpbnQgYm54MnhfYWNxdWlyZV9od19sb2NrKHN0cnVjdCBibngyeCAqYnAsIHUzMiByZXNvdXJjZSk7CisKKy8qKgorICogUmVsZWFzZSBIVyBsb2NrLgorICoKKyAqIEBwYXJhbSBicCBkcml2ZXIgaGFuZGxlCisgKiBAcGFyYW0gcmVzb3VyY2UgUmVzb3VyY2UgYml0IHdoaWNoIHdhcyBsb2NrZWQKKyAqCisgKiBAcmV0dXJuIGludAorICovCitpbnQgYm54MnhfcmVsZWFzZV9od19sb2NrKHN0cnVjdCBibngyeCAqYnAsIHUzMiByZXNvdXJjZSk7CisKKy8qKgorICogQ29uZmlndXJlIGV0aCBNQUMgYWRkcmVzcyBpbiB0aGUgSFcgYWNjb3JkaW5nIHRvIHRoZSB2YWx1ZSBpbgorICogbmV0ZGV2LT5kZXZfYWRkciBmb3IgNTc3MTEKKyAqCisgKiBAcGFyYW0gYnAgZHJpdmVyIGhhbmRsZQorICogQHBhcmFtIHNldAorICovCit2b2lkIGJueDJ4X3NldF9ldGhfbWFjX2FkZHJfZTFoKHN0cnVjdCBibngyeCAqYnAsIGludCBzZXQpOworCisvKioKKyAqIENvbmZpZ3VyZSBldGggTUFDIGFkZHJlc3MgaW4gdGhlIEhXIGFjY29yZGluZyB0byB0aGUgdmFsdWUgaW4KKyAqIG5ldGRldi0+ZGV2X2FkZHIgZm9yIDU3NzEwCisgKgorICogQHBhcmFtIGJwIGRyaXZlciBoYW5kbGUKKyAqIEBwYXJhbSBzZXQKKyAqLwordm9pZCBibngyeF9zZXRfZXRoX21hY19hZGRyX2UxKHN0cnVjdCBibngyeCAqYnAsIGludCBzZXQpOworCisjaWZkZWYgQkNNX0NOSUMKKy8qKgorICogU2V0IGlTQ1NJIE1BQyhzKSBhdCB0aGUgbmV4dCBlbnRpZXMgaW4gdGhlIENBTSBhZnRlciB0aGUgRVRICisgKiBNQUMocykuIFRoZSBmdW5jdGlvbiB3aWxsIHdhaXQgdW50aWwgdGhlIHJhbXJvZCBjb21wbGV0aW9uCisgKiByZXR1cm5zLgorICoKKyAqIEBwYXJhbSBicCBkcml2ZXIgaGFuZGxlCisgKiBAcGFyYW0gc2V0IHNldCBvciBjbGVhciB0aGUgQ0FNIGVudHJ5CisgKgorICogQHJldHVybiAwIGlmIGN1c3Nlc3MsIC1FTk9ERVYgaWYgcmFtcm9kIGRvZXNuJ3QgcmV0dXJuLgorICovCitpbnQgYm54Mnhfc2V0X2lzY3NpX2V0aF9tYWNfYWRkcihzdHJ1Y3QgYm54MnggKmJwLCBpbnQgc2V0KTsKKyNlbmRpZgorCisvKioKKyAqIEluaXRpYWxpemUgc3RhdHVzIGJsb2NrIGluIEZXIGFuZCBIVworICoKKyAqIEBwYXJhbSBicCBkcml2ZXIgaGFuZGxlCisgKiBAcGFyYW0gc2IgaG9zdF9zdGF0dXNfYmxvY2sKKyAqIEBwYXJhbSBkbWFfYWRkcl90IG1hcHBpbmcKKyAqIEBwYXJhbSBpbnQgc2JfaWQKKyAqLwordm9pZCBibngyeF9pbml0X3NiKHN0cnVjdCBibngyeCAqYnAsIHN0cnVjdCBob3N0X3N0YXR1c19ibG9jayAqc2IsCisJCQkgIGRtYV9hZGRyX3QgbWFwcGluZywgaW50IHNiX2lkKTsKKworLyoqCisgKiBSZWNvbmZpZ3VyZSBGVy9IVyBhY2NvcmRpbmcgdG8gZGV2LT5mbGFncyByeCBtb2RlCisgKgorICogQHBhcmFtIGRldiBuZXRfZGV2aWNlCisgKgorICovCit2b2lkIGJueDJ4X3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCisvKioKKyAqIENvbmZpZ3VyZSBNQUMgZmlsdGVyaW5nIHJ1bGVzIGluIGEgRlcuCisgKgorICogQHBhcmFtIGJwIGRyaXZlciBoYW5kbGUKKyAqLwordm9pZCBibngyeF9zZXRfc3Rvcm1fcnhfbW9kZShzdHJ1Y3QgYm54MnggKmJwKTsKKworLyogUGFyaXR5IGVycm9ycyByZWxhdGVkICovCit2b2lkIGJueDJ4X2luY19sb2FkX2NudChzdHJ1Y3QgYm54MnggKmJwKTsKK3UzMiBibngyeF9kZWNfbG9hZF9jbnQoc3RydWN0IGJueDJ4ICpicCk7Citib29sIGJueDJ4X2Noa19wYXJpdHlfYXR0bihzdHJ1Y3QgYm54MnggKmJwKTsKK2Jvb2wgYm54MnhfcmVzZXRfaXNfZG9uZShzdHJ1Y3QgYm54MnggKmJwKTsKK3ZvaWQgYm54MnhfZGlzYWJsZV9jbG9zZV90aGVfZ2F0ZShzdHJ1Y3QgYm54MnggKmJwKTsKKworLyoqCisgKiBQZXJmb3JtIHN0YXRpc3RpY3MgaGFuZGxpbmcgYWNjb3JkaW5nIHRvIGV2ZW50CisgKgorICogQHBhcmFtIGJwIGRyaXZlciBoYW5kbGUKKyAqIEBwYXJhbSBldmVuIHRibngyeF9zdGF0c19ldmVudAorICovCit2b2lkIGJueDJ4X3N0YXRzX2hhbmRsZShzdHJ1Y3QgYm54MnggKmJwLCBlbnVtIGJueDJ4X3N0YXRzX2V2ZW50IGV2ZW50KTsKKworLyoqCisgKiBDb25maWd1cmVzIEZXIHdpdGggY2xpZW50IHBhcmFtdGVyZXMgKGxpa2UgSFcgVkxBTiByZW1vdmFsKQorICogZm9yIGVhY2ggYWN0aXZlIGNsaWVudC4KKyAqCisgKiBAcGFyYW0gYnAKKyAqLwordm9pZCBibngyeF9zZXRfY2xpZW50X2NvbmZpZyhzdHJ1Y3QgYm54MnggKmJwKTsKKworLyoqCisgKiBIYW5kbGUgc3AgZXZlbnRzCisgKgorICogQHBhcmFtIGZwIGZhc3RwYXRoIGhhbmRsZSBmb3IgdGhlIGV2ZW50CisgKiBAcGFyYW0gcnJfY3FlIGV0aF9yeF9jcWUKKyAqLwordm9pZCBibngyeF9zcF9ldmVudChzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwLCAgdW5pb24gZXRoX3J4X2NxZSAqcnJfY3FlKTsKKworCitzdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfdXBkYXRlX2Zwc2JfaWR4KHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnApCit7CisJc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrICpmcHNiID0gZnAtPnN0YXR1c19ibGs7CisKKwliYXJyaWVyKCk7IC8qIHN0YXR1cyBibG9jayBpcyB3cml0dGVuIHRvIGJ5IHRoZSBjaGlwICovCisJZnAtPmZwX2NfaWR4ID0gZnBzYi0+Y19zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4OworCWZwLT5mcF91X2lkeCA9IGZwc2ItPnVfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X3VwZGF0ZV9yeF9wcm9kKHN0cnVjdCBibngyeCAqYnAsCisJCQkJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsCisJCQkJCXUxNiBiZF9wcm9kLCB1MTYgcnhfY29tcF9wcm9kLAorCQkJCQl1MTYgcnhfc2dlX3Byb2QpCit7CisJc3RydWN0IHVzdG9ybV9ldGhfcnhfcHJvZHVjZXJzIHJ4X3Byb2RzID0gezB9OworCWludCBpOworCisJLyogVXBkYXRlIHByb2R1Y2VycyAqLworCXJ4X3Byb2RzLmJkX3Byb2QgPSBiZF9wcm9kOworCXJ4X3Byb2RzLmNxZV9wcm9kID0gcnhfY29tcF9wcm9kOworCXJ4X3Byb2RzLnNnZV9wcm9kID0gcnhfc2dlX3Byb2Q7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBCRCBhbmQgU0dFIGRhdGEgaXMgdXBkYXRlZCBiZWZvcmUgdXBkYXRpbmcgdGhlCisJICogcHJvZHVjZXJzIHNpbmNlIEZXIG1pZ2h0IHJlYWQgdGhlIEJEL1NHRSByaWdodCBhZnRlciB0aGUgcHJvZHVjZXIKKwkgKiBpcyB1cGRhdGVkLgorCSAqIFRoaXMgaXMgb25seSBhcHBsaWNhYmxlIGZvciB3ZWFrLW9yZGVyZWQgbWVtb3J5IG1vZGVsIGFyY2hzIHN1Y2gKKwkgKiBhcyBJQS02NC4gVGhlIGZvbGxvd2luZyBiYXJyaWVyIGlzIGFsc28gbWFuZGF0b3J5IHNpbmNlIEZXIHdpbGwKKwkgKiBhc3N1bWVzIEJEcyBtdXN0IGhhdmUgYnVmZmVycy4KKwkgKi8KKwl3bWIoKTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHVzdG9ybV9ldGhfcnhfcHJvZHVjZXJzKS80OyBpKyspCisJCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKKwkJICAgICAgIFVTVE9STV9SWF9QUk9EU19PRkZTRVQoQlBfUE9SVChicCksIGZwLT5jbF9pZCkgKyBpKjQsCisJCSAgICAgICAoKHUzMiAqKSZyeF9wcm9kcylbaV0pOworCisJbW1pb3diKCk7IC8qIGtlZXAgcHJvZCB1cGRhdGVzIG9yZGVyZWQgKi8KKworCURQKE5FVElGX01TR19SWF9TVEFUVVMsCisJICAgInF1ZXVlWyVkXTogIHdyb3RlICBiZF9wcm9kICV1ICBjcWVfcHJvZCAldSAgc2dlX3Byb2QgJXVcbiIsCisJICAgZnAtPmluZGV4LCBiZF9wcm9kLCByeF9jb21wX3Byb2QsIHJ4X3NnZV9wcm9kKTsKK30KKworCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9hY2tfc2Ioc3RydWN0IGJueDJ4ICpicCwgdTggc2JfaWQsCisJCQkJdTggc3Rvcm0sIHUxNiBpbmRleCwgdTggb3AsIHU4IHVwZGF0ZSkKK3sKKwl1MzIgaGNfYWRkciA9IChIQ19SRUdfQ09NTUFORF9SRUcgKyBCUF9QT1JUKGJwKSozMiArCisJCSAgICAgICBDT01NQU5EX1JFR19JTlRfQUNLKTsKKwlzdHJ1Y3QgaWd1X2Fja19yZWdpc3RlciBpZ3VfYWNrOworCisJaWd1X2Fjay5zdGF0dXNfYmxvY2tfaW5kZXggPSBpbmRleDsKKwlpZ3VfYWNrLnNiX2lkX2FuZF9mbGFncyA9CisJCQkoKHNiX2lkIDw8IElHVV9BQ0tfUkVHSVNURVJfU1RBVFVTX0JMT0NLX0lEX1NISUZUKSB8CisJCQkgKHN0b3JtIDw8IElHVV9BQ0tfUkVHSVNURVJfU1RPUk1fSURfU0hJRlQpIHwKKwkJCSAodXBkYXRlIDw8IElHVV9BQ0tfUkVHSVNURVJfVVBEQVRFX0lOREVYX1NISUZUKSB8CisJCQkgKG9wIDw8IElHVV9BQ0tfUkVHSVNURVJfSU5URVJSVVBUX01PREVfU0hJRlQpKTsKKworCURQKEJOWDJYX01TR19PRkYsICJ3cml0ZSAweCUwOHggdG8gSEMgYWRkciAweCV4XG4iLAorCSAgICgqKHUzMiAqKSZpZ3VfYWNrKSwgaGNfYWRkcik7CisJUkVHX1dSKGJwLCBoY19hZGRyLCAoKih1MzIgKikmaWd1X2FjaykpOworCisJLyogTWFrZSBzdXJlIHRoYXQgQUNLIGlzIHdyaXR0ZW4gKi8KKwltbWlvd2IoKTsKKwliYXJyaWVyKCk7Cit9CitzdGF0aWMgaW5saW5lIHUxNiBibngyeF9hY2tfaW50KHN0cnVjdCBibngyeCAqYnApCit7CisJdTMyIGhjX2FkZHIgPSAoSENfUkVHX0NPTU1BTkRfUkVHICsgQlBfUE9SVChicCkqMzIgKworCQkgICAgICAgQ09NTUFORF9SRUdfU0lNRF9NQVNLKTsKKwl1MzIgcmVzdWx0ID0gUkVHX1JEKGJwLCBoY19hZGRyKTsKKworCURQKEJOWDJYX01TR19PRkYsICJyZWFkIDB4JTA4eCBmcm9tIEhDIGFkZHIgMHgleFxuIiwKKwkgICByZXN1bHQsIGhjX2FkZHIpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIGZhc3QgcGF0aCBzZXJ2aWNlIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGJueDJ4X2hhc190eF93b3JrX3VubG9hZChzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwKQoreworCS8qIFRlbGwgY29tcGlsZXIgdGhhdCBjb25zdW1lciBhbmQgcHJvZHVjZXIgY2FuIGNoYW5nZSAqLworCWJhcnJpZXIoKTsKKwlyZXR1cm4gKGZwLT50eF9wa3RfcHJvZCAhPSBmcC0+dHhfcGt0X2NvbnMpOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBibngyeF90eF9hdmFpbChzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwKQoreworCXMxNiB1c2VkOworCXUxNiBwcm9kOworCXUxNiBjb25zOworCisJcHJvZCA9IGZwLT50eF9iZF9wcm9kOworCWNvbnMgPSBmcC0+dHhfYmRfY29uczsKKworCS8qIE5VTV9UWF9SSU5HUyA9IG51bWJlciBvZiAibmV4dC1wYWdlIiBlbnRyaWVzCisJICAgSXQgd2lsbCBiZSB1c2VkIGFzIGEgdGhyZXNob2xkICovCisJdXNlZCA9IFNVQl9TMTYocHJvZCwgY29ucykgKyAoczE2KU5VTV9UWF9SSU5HUzsKKworI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKKwlXQVJOX09OKHVzZWQgPCAwKTsKKwlXQVJOX09OKHVzZWQgPiBmcC0+YnAtPnR4X3Jpbmdfc2l6ZSk7CisJV0FSTl9PTigoZnAtPmJwLT50eF9yaW5nX3NpemUgLSB1c2VkKSA+IE1BWF9UWF9BVkFJTCk7CisjZW5kaWYKKworCXJldHVybiAoczE2KShmcC0+YnAtPnR4X3Jpbmdfc2l6ZSkgLSB1c2VkOworfQorCitzdGF0aWMgaW5saW5lIGludCBibngyeF9oYXNfdHhfd29yayhzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwKQoreworCXUxNiBod19jb25zOworCisJLyogVGVsbCBjb21waWxlciB0aGF0IHN0YXR1cyBibG9jayBmaWVsZHMgY2FuIGNoYW5nZSAqLworCWJhcnJpZXIoKTsKKwlod19jb25zID0gbGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKTsKKwlyZXR1cm4gaHdfY29ucyAhPSBmcC0+dHhfcGt0X2NvbnM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9mcmVlX3J4X3NnZShzdHJ1Y3QgYm54MnggKmJwLAorCQkJCSAgICAgc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCwgdTE2IGluZGV4KQoreworCXN0cnVjdCBzd19yeF9wYWdlICpzd19idWYgPSAmZnAtPnJ4X3BhZ2VfcmluZ1tpbmRleF07CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBzd19idWYtPnBhZ2U7CisJc3RydWN0IGV0aF9yeF9zZ2UgKnNnZSA9ICZmcC0+cnhfc2dlX3JpbmdbaW5kZXhdOworCisJLyogU2tpcCAibmV4dCBwYWdlIiBlbGVtZW50cyAqLworCWlmICghcGFnZSkKKwkJcmV0dXJuOworCisJZG1hX3VubWFwX3BhZ2UoJmJwLT5wZGV2LT5kZXYsIGRtYV91bm1hcF9hZGRyKHN3X2J1ZiwgbWFwcGluZyksCisJCSAgICAgICBTR0VfUEFHRV9TSVpFKlBBR0VTX1BFUl9TR0UsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJX19mcmVlX3BhZ2VzKHBhZ2UsIFBBR0VTX1BFUl9TR0VfU0hJRlQpOworCisJc3dfYnVmLT5wYWdlID0gTlVMTDsKKwlzZ2UtPmFkZHJfaGkgPSAwOworCXNnZS0+YWRkcl9sbyA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9mcmVlX3J4X3NnZV9yYW5nZShzdHJ1Y3QgYm54MnggKmJwLAorCQkJCQkgICBzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwLCBpbnQgbGFzdCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBsYXN0OyBpKyspCisJCWJueDJ4X2ZyZWVfcnhfc2dlKGJwLCBmcCwgaSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGJueDJ4X2FsbG9jX3J4X3NnZShzdHJ1Y3QgYm54MnggKmJwLAorCQkJCSAgICAgc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCwgdTE2IGluZGV4KQoreworCXN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZXMoR0ZQX0FUT01JQywgUEFHRVNfUEVSX1NHRV9TSElGVCk7CisJc3RydWN0IHN3X3J4X3BhZ2UgKnN3X2J1ZiA9ICZmcC0+cnhfcGFnZV9yaW5nW2luZGV4XTsKKwlzdHJ1Y3QgZXRoX3J4X3NnZSAqc2dlID0gJmZwLT5yeF9zZ2VfcmluZ1tpbmRleF07CisJZG1hX2FkZHJfdCBtYXBwaW5nOworCisJaWYgKHVubGlrZWx5KHBhZ2UgPT0gTlVMTCkpCisJCXJldHVybiAtRU5PTUVNOworCisJbWFwcGluZyA9IGRtYV9tYXBfcGFnZSgmYnAtPnBkZXYtPmRldiwgcGFnZSwgMCwKKwkJCSAgICAgICBTR0VfUEFHRV9TSVpFKlBBR0VTX1BFUl9TR0UsIERNQV9GUk9NX0RFVklDRSk7CisJaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKCZicC0+cGRldi0+ZGV2LCBtYXBwaW5nKSkpIHsKKwkJX19mcmVlX3BhZ2VzKHBhZ2UsIFBBR0VTX1BFUl9TR0VfU0hJRlQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzd19idWYtPnBhZ2UgPSBwYWdlOworCWRtYV91bm1hcF9hZGRyX3NldChzd19idWYsIG1hcHBpbmcsIG1hcHBpbmcpOworCisJc2dlLT5hZGRyX2hpID0gY3B1X3RvX2xlMzIoVTY0X0hJKG1hcHBpbmcpKTsKKwlzZ2UtPmFkZHJfbG8gPSBjcHVfdG9fbGUzMihVNjRfTE8obWFwcGluZykpOworCisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIGludCBibngyeF9hbGxvY19yeF9za2Ioc3RydWN0IGJueDJ4ICpicCwKKwkJCQkgICAgIHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsIHUxNiBpbmRleCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBzd19yeF9iZCAqcnhfYnVmID0gJmZwLT5yeF9idWZfcmluZ1tpbmRleF07CisJc3RydWN0IGV0aF9yeF9iZCAqcnhfYmQgPSAmZnAtPnJ4X2Rlc2NfcmluZ1tpbmRleF07CisJZG1hX2FkZHJfdCBtYXBwaW5nOworCisJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihicC0+ZGV2LCBicC0+cnhfYnVmX3NpemUpOworCWlmICh1bmxpa2VseShza2IgPT0gTlVMTCkpCisJCXJldHVybiAtRU5PTUVNOworCisJbWFwcGluZyA9IGRtYV9tYXBfc2luZ2xlKCZicC0+cGRldi0+ZGV2LCBza2ItPmRhdGEsIGJwLT5yeF9idWZfc2l6ZSwKKwkJCQkgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAodW5saWtlbHkoZG1hX21hcHBpbmdfZXJyb3IoJmJwLT5wZGV2LT5kZXYsIG1hcHBpbmcpKSkgeworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJ4X2J1Zi0+c2tiID0gc2tiOworCWRtYV91bm1hcF9hZGRyX3NldChyeF9idWYsIG1hcHBpbmcsIG1hcHBpbmcpOworCisJcnhfYmQtPmFkZHJfaGkgPSBjcHVfdG9fbGUzMihVNjRfSEkobWFwcGluZykpOworCXJ4X2JkLT5hZGRyX2xvID0gY3B1X3RvX2xlMzIoVTY0X0xPKG1hcHBpbmcpKTsKKworCXJldHVybiAwOworfQorCisvKiBub3RlIHRoYXQgd2UgYXJlIG5vdCBhbGxvY2F0aW5nIGEgbmV3IHNrYiwKKyAqIHdlIGFyZSBqdXN0IG1vdmluZyBvbmUgZnJvbSBjb25zIHRvIHByb2QKKyAqIHdlIGFyZSBub3QgY3JlYXRpbmcgYSBuZXcgbWFwcGluZywKKyAqIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgZm9yIGRtYV9tYXBwaW5nX2Vycm9yKCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9yZXVzZV9yeF9za2Ioc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCwKKwkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgY29ucywgdTE2IHByb2QpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IGZwLT5icDsKKwlzdHJ1Y3Qgc3dfcnhfYmQgKmNvbnNfcnhfYnVmID0gJmZwLT5yeF9idWZfcmluZ1tjb25zXTsKKwlzdHJ1Y3Qgc3dfcnhfYmQgKnByb2RfcnhfYnVmID0gJmZwLT5yeF9idWZfcmluZ1twcm9kXTsKKwlzdHJ1Y3QgZXRoX3J4X2JkICpjb25zX2JkID0gJmZwLT5yeF9kZXNjX3JpbmdbY29uc107CisJc3RydWN0IGV0aF9yeF9iZCAqcHJvZF9iZCA9ICZmcC0+cnhfZGVzY19yaW5nW3Byb2RdOworCisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoJmJwLT5wZGV2LT5kZXYsCisJCQkJICAgZG1hX3VubWFwX2FkZHIoY29uc19yeF9idWYsIG1hcHBpbmcpLAorCQkJCSAgIFJYX0NPUFlfVEhSRVNILCBETUFfRlJPTV9ERVZJQ0UpOworCisJcHJvZF9yeF9idWYtPnNrYiA9IGNvbnNfcnhfYnVmLT5za2I7CisJZG1hX3VubWFwX2FkZHJfc2V0KHByb2RfcnhfYnVmLCBtYXBwaW5nLAorCQkJICAgZG1hX3VubWFwX2FkZHIoY29uc19yeF9idWYsIG1hcHBpbmcpKTsKKwkqcHJvZF9iZCA9ICpjb25zX2JkOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfY2xlYXJfc2dlX21hc2tfbmV4dF9lbGVtcyhzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwKQoreworCWludCBpLCBqOworCisJZm9yIChpID0gMTsgaSA8PSBOVU1fUlhfU0dFX1BBR0VTOyBpKyspIHsKKwkJaW50IGlkeCA9IFJYX1NHRV9DTlQgKiBpIC0gMTsKKworCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7CisJCQlTR0VfTUFTS19DTEVBUl9CSVQoZnAsIGlkeCk7CisJCQlpZHgtLTsKKwkJfQorCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X2luaXRfc2dlX3JpbmdfYml0X21hc2soc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCkKK3sKKwkvKiBTZXQgdGhlIG1hc2sgdG8gYWxsIDEtczogaXQncyBmYXN0ZXIgdG8gY29tcGFyZSB0byAwIHRoYW4gdG8gMHhmLXMgKi8KKwltZW1zZXQoZnAtPnNnZV9tYXNrLCAweGZmLAorCSAgICAgICAoTlVNX1JYX1NHRSA+PiBSWF9TR0VfTUFTS19FTEVNX1NISUZUKSpzaXplb2YodTY0KSk7CisKKwkvKiBDbGVhciB0aGUgdHdvIGxhc3QgaW5kaWNlcyBpbiB0aGUgcGFnZSB0byAxOgorCSAgIHRoZXNlIGFyZSB0aGUgaW5kaWNlcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlICJuZXh0IiBlbGVtZW50LAorCSAgIGhlbmNlIHdpbGwgbmV2ZXIgYmUgaW5kaWNhdGVkIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tCisJICAgdGhlIGNhbGN1bGF0aW9ucy4gKi8KKwlibngyeF9jbGVhcl9zZ2VfbWFza19uZXh0X2VsZW1zKGZwKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9mcmVlX3RwYV9wb29sKHN0cnVjdCBibngyeCAqYnAsCisJCQkJICAgICAgIHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsIGludCBsYXN0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGxhc3Q7IGkrKykgeworCQlzdHJ1Y3Qgc3dfcnhfYmQgKnJ4X2J1ZiA9ICYoZnAtPnRwYV9wb29sW2ldKTsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4X2J1Zi0+c2tiOworCisJCWlmIChza2IgPT0gTlVMTCkgeworCQkJRFAoTkVUSUZfTVNHX0lGRE9XTiwgInRwYSBiaW4gJWQgZW1wdHkgb24gZnJlZVxuIiwgaSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChmcC0+dHBhX3N0YXRlW2ldID09IEJOWDJYX1RQQV9TVEFSVCkKKwkJCWRtYV91bm1hcF9zaW5nbGUoJmJwLT5wZGV2LT5kZXYsCisJCQkJCSBkbWFfdW5tYXBfYWRkcihyeF9idWYsIG1hcHBpbmcpLAorCQkJCQkgYnAtPnJ4X2J1Zl9zaXplLCBETUFfRlJPTV9ERVZJQ0UpOworCisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJcnhfYnVmLT5za2IgPSBOVUxMOworCX0KK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfaW5pdF90eF9yaW5nKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IGksIGo7CisKKwlmb3JfZWFjaF9xdWV1ZShicCwgaikgeworCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtqXTsKKworCQlmb3IgKGkgPSAxOyBpIDw9IE5VTV9UWF9SSU5HUzsgaSsrKSB7CisJCQlzdHJ1Y3QgZXRoX3R4X25leHRfYmQgKnR4X25leHRfYmQgPQorCQkJCSZmcC0+dHhfZGVzY19yaW5nW1RYX0RFU0NfQ05UICogaSAtIDFdLm5leHRfYmQ7CisKKwkJCXR4X25leHRfYmQtPmFkZHJfaGkgPQorCQkJCWNwdV90b19sZTMyKFU2NF9ISShmcC0+dHhfZGVzY19tYXBwaW5nICsKKwkJCQkJICAgIEJDTV9QQUdFX1NJWkUqKGkgJSBOVU1fVFhfUklOR1MpKSk7CisJCQl0eF9uZXh0X2JkLT5hZGRyX2xvID0KKwkJCQljcHVfdG9fbGUzMihVNjRfTE8oZnAtPnR4X2Rlc2NfbWFwcGluZyArCisJCQkJCSAgICBCQ01fUEFHRV9TSVpFKihpICUgTlVNX1RYX1JJTkdTKSkpOworCQl9CisKKwkJZnAtPnR4X2RiLmRhdGEuaGVhZGVyLmhlYWRlciA9IERPT1JCRUxMX0hEUl9EQl9UWVBFOworCQlmcC0+dHhfZGIuZGF0YS56ZXJvX2ZpbGwxID0gMDsKKwkJZnAtPnR4X2RiLmRhdGEucHJvZCA9IDA7CisKKwkJZnAtPnR4X3BrdF9wcm9kID0gMDsKKwkJZnAtPnR4X3BrdF9jb25zID0gMDsKKwkJZnAtPnR4X2JkX3Byb2QgPSAwOworCQlmcC0+dHhfYmRfY29ucyA9IDA7CisJCWZwLT50eF9jb25zX3NiID0gQk5YMlhfVFhfU0JfSU5ERVg7CisJCWZwLT50eF9wa3QgPSAwOworCX0KK30KK3N0YXRpYyBpbmxpbmUgaW50IGJueDJ4X2hhc19yeF93b3JrKHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnApCit7CisJdTE2IHJ4X2NvbnNfc2I7CisKKwkvKiBUZWxsIGNvbXBpbGVyIHRoYXQgc3RhdHVzIGJsb2NrIGZpZWxkcyBjYW4gY2hhbmdlICovCisJYmFycmllcigpOworCXJ4X2NvbnNfc2IgPSBsZTE2X3RvX2NwdSgqZnAtPnJ4X2NvbnNfc2IpOworCWlmICgocnhfY29uc19zYiAmIE1BWF9SQ1FfREVTQ19DTlQpID09IE1BWF9SQ1FfREVTQ19DTlQpCisJCXJ4X2NvbnNfc2IrKzsKKwlyZXR1cm4gKGZwLT5yeF9jb21wX2NvbnMgIT0gcnhfY29uc19zYik7Cit9CisKKy8qIEhXIExvY2sgZm9yIHNoYXJlZCBkdWFsIHBvcnQgUEhZcyAqLwordm9pZCBibngyeF9hY3F1aXJlX3BoeV9sb2NrKHN0cnVjdCBibngyeCAqYnApOwordm9pZCBibngyeF9yZWxlYXNlX3BoeV9sb2NrKHN0cnVjdCBibngyeCAqYnApOworCit2b2lkIGJueDJ4X2xpbmtfcmVwb3J0KHN0cnVjdCBibngyeCAqYnApOworaW50IGJueDJ4X3J4X2ludChzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwLCBpbnQgYnVkZ2V0KTsKK2ludCBibngyeF90eF9pbnQoc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCk7Cit2b2lkIGJueDJ4X2luaXRfcnhfcmluZ3Moc3RydWN0IGJueDJ4ICpicCk7CituZXRkZXZfdHhfdCBibngyeF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCitpbnQgYm54MnhfY2hhbmdlX21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApOwordm9pZCBibngyeF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwordm9pZCBibngyeF92bGFuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB2bGFuX2dyb3VwICp2bGdycCk7Cit2b2lkIGJueDJ4X25ldGlmX3N0YXJ0KHN0cnVjdCBibngyeCAqYnApOwordm9pZCBibngyeF9uZXRpZl9zdG9wKHN0cnVjdCBibngyeCAqYnAsIGludCBkaXNhYmxlX2h3KTsKK3ZvaWQgYm54MnhfZnJlZV9pcnEoc3RydWN0IGJueDJ4ICpicCwgYm9vbCBkaXNhYmxlX29ubHkpOworaW50IGJueDJ4X3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CitpbnQgYm54MnhfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK3ZvaWQgYm54MnhfZnJlZV9za2JzKHN0cnVjdCBibngyeCAqYnApOworaW50IGJueDJ4X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpOworaW50IGJueDJ4X25pY191bmxvYWQoc3RydWN0IGJueDJ4ICpicCwgaW50IHVubG9hZF9tb2RlKTsKK2ludCBibngyeF9uaWNfbG9hZChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgbG9hZF9tb2RlKTsKK2ludCBibngyeF9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IGJueDJ4ICpicCwgcGNpX3Bvd2VyX3Qgc3RhdGUpOworCisjZW5kaWYgLyogQk5YMlhfQ01OX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2R1bXAuaCBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2R1bXAuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9uZXQvYm54MnhfZHVtcC5oCnJlbmFtZSB0byBkcml2ZXJzL25ldC9ibngyeC9ibngyeF9kdW1wLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2V0aHRvb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yjc1YjA1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZXRodG9vbC5jCkBAIC0wLDAgKzEsMTk3MSBAQAorLyogYm54MnhfZXRodG9vbC5jOiBCcm9hZGNvbSBFdmVyZXN0IG5ldHdvcmsgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDEwIEJyb2FkY29tIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE1haW50YWluZWQgYnk6IEVpbG9uIEdyZWVuc3RlaW4gPGVpbG9uZ0Bicm9hZGNvbS5jb20+CisgKiBXcml0dGVuIGJ5OiBFbGllemVyIFRhbWlyCisgKiBCYXNlZCBvbiBjb2RlIGZyb20gTWljaGFlbCBDaGFuJ3MgYm54MiBkcml2ZXIKKyAqIFVEUCBDU1VNIGVycmF0YSB3b3JrYXJvdW5kIGJ5IEFyaWsgR2VuZGVsbWFuCisgKiBTbG93cGF0aCBhbmQgZmFzdHBhdGggcmV3b3JrIGJ5IFZsYWRpc2xhdiBab2xvdGFyb3YKKyAqIFN0YXRpc3RpY3MgYW5kIExpbmsgbWFuYWdlbWVudCBieSBZaXRjaGFrIEdlcnRuZXIKKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisKKworI2luY2x1ZGUgImJueDJ4LmgiCisjaW5jbHVkZSAiYm54MnhfY21uLmgiCisjaW5jbHVkZSAiYm54MnhfZHVtcC5oIgorCisKK3N0YXRpYyBpbnQgYm54MnhfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJY21kLT5zdXBwb3J0ZWQgPSBicC0+cG9ydC5zdXBwb3J0ZWQ7CisJY21kLT5hZHZlcnRpc2luZyA9IGJwLT5wb3J0LmFkdmVydGlzaW5nOworCisJaWYgKChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfT1BFTikgJiYKKwkgICAgIShicC0+ZmxhZ3MgJiBNRl9GVU5DX0RJUykgJiYKKwkgICAgKGJwLT5saW5rX3ZhcnMubGlua191cCkpIHsKKwkJY21kLT5zcGVlZCA9IGJwLT5saW5rX3ZhcnMubGluZV9zcGVlZDsKKwkJY21kLT5kdXBsZXggPSBicC0+bGlua192YXJzLmR1cGxleDsKKwkJaWYgKElTX0UxSE1GKGJwKSkgeworCQkJdTE2IHZuX21heF9yYXRlOworCisJCQl2bl9tYXhfcmF0ZSA9CisJCQkJKChicC0+bWZfY29uZmlnICYgRlVOQ19NRl9DRkdfTUFYX0JXX01BU0spID4+CisJCQkJRlVOQ19NRl9DRkdfTUFYX0JXX1NISUZUKSAqIDEwMDsKKwkJCWlmICh2bl9tYXhfcmF0ZSA8IGNtZC0+c3BlZWQpCisJCQkJY21kLT5zcGVlZCA9IHZuX21heF9yYXRlOworCQl9CisJfSBlbHNlIHsKKwkJY21kLT5zcGVlZCA9IC0xOworCQljbWQtPmR1cGxleCA9IC0xOworCX0KKworCWlmIChicC0+bGlua19wYXJhbXMuc3dpdGNoX2NmZyA9PSBTV0lUQ0hfQ0ZHXzEwRykgeworCQl1MzIgZXh0X3BoeV90eXBlID0KKwkJCVhHWFNfRVhUX1BIWV9UWVBFKGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyk7CisKKwkJc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1Q6CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDU6CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3Mjc6CisJCQljbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODE6CisJCQljbWQtPnBvcnQgPSBQT1JUX1RQOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9GQUlMVVJFOgorCQkJQk5YMlhfRVJSKCJYR1hTIFBIWSBGYWlsdXJlIGRldGVjdGVkIDB4JXhcbiIsCisJCQkJICBicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCURQKE5FVElGX01TR19MSU5LLCAiQkFEIFhHWFMgZXh0X3BoeV9jb25maWcgMHgleFxuIiwKKwkJCSAgIGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyk7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZQorCQljbWQtPnBvcnQgPSBQT1JUX1RQOworCisJY21kLT5waHlfYWRkcmVzcyA9IGJwLT5tZGlvLnBydGFkOworCWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOworCisJaWYgKGJwLT5saW5rX3BhcmFtcy5yZXFfbGluZV9zcGVlZCA9PSBTUEVFRF9BVVRPX05FRykKKwkJY21kLT5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7CisJZWxzZQorCQljbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CisKKwljbWQtPm1heHR4cGt0ID0gMDsKKwljbWQtPm1heHJ4cGt0ID0gMDsKKworCURQKE5FVElGX01TR19MSU5LLCAiZXRodG9vbF9jbWQ6IGNtZCAlZFxuIgorCSAgIERQX0xFVkVMICIgIHN1cHBvcnRlZCAweCV4ICBhZHZlcnRpc2luZyAweCV4ICBzcGVlZCAlZFxuIgorCSAgIERQX0xFVkVMICIgIGR1cGxleCAlZCAgcG9ydCAlZCAgcGh5X2FkZHJlc3MgJWQgIHRyYW5zY2VpdmVyICVkXG4iCisJICAgRFBfTEVWRUwgIiAgYXV0b25lZyAlZCAgbWF4dHhwa3QgJWQgIG1heHJ4cGt0ICVkXG4iLAorCSAgIGNtZC0+Y21kLCBjbWQtPnN1cHBvcnRlZCwgY21kLT5hZHZlcnRpc2luZywgY21kLT5zcGVlZCwKKwkgICBjbWQtPmR1cGxleCwgY21kLT5wb3J0LCBjbWQtPnBoeV9hZGRyZXNzLCBjbWQtPnRyYW5zY2VpdmVyLAorCSAgIGNtZC0+YXV0b25lZywgY21kLT5tYXh0eHBrdCwgY21kLT5tYXhyeHBrdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBibngyeF9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIGFkdmVydGlzaW5nOworCisJaWYgKElTX0UxSE1GKGJwKSkKKwkJcmV0dXJuIDA7CisKKwlEUChORVRJRl9NU0dfTElOSywgImV0aHRvb2xfY21kOiBjbWQgJWRcbiIKKwkgICBEUF9MRVZFTCAiICBzdXBwb3J0ZWQgMHgleCAgYWR2ZXJ0aXNpbmcgMHgleCAgc3BlZWQgJWRcbiIKKwkgICBEUF9MRVZFTCAiICBkdXBsZXggJWQgIHBvcnQgJWQgIHBoeV9hZGRyZXNzICVkICB0cmFuc2NlaXZlciAlZFxuIgorCSAgIERQX0xFVkVMICIgIGF1dG9uZWcgJWQgIG1heHR4cGt0ICVkICBtYXhyeHBrdCAlZFxuIiwKKwkgICBjbWQtPmNtZCwgY21kLT5zdXBwb3J0ZWQsIGNtZC0+YWR2ZXJ0aXNpbmcsIGNtZC0+c3BlZWQsCisJICAgY21kLT5kdXBsZXgsIGNtZC0+cG9ydCwgY21kLT5waHlfYWRkcmVzcywgY21kLT50cmFuc2NlaXZlciwKKwkgICBjbWQtPmF1dG9uZWcsIGNtZC0+bWF4dHhwa3QsIGNtZC0+bWF4cnhwa3QpOworCisJaWYgKGNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgeworCQlpZiAoIShicC0+cG9ydC5zdXBwb3J0ZWQgJiBTVVBQT1JURURfQXV0b25lZykpIHsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiQXV0b25lZyBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJLyogYWR2ZXJ0aXNlIHRoZSByZXF1ZXN0ZWQgc3BlZWQgYW5kIGR1cGxleCBpZiBzdXBwb3J0ZWQgKi8KKwkJY21kLT5hZHZlcnRpc2luZyAmPSBicC0+cG9ydC5zdXBwb3J0ZWQ7CisKKwkJYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkID0gU1BFRURfQVVUT19ORUc7CisJCWJwLT5saW5rX3BhcmFtcy5yZXFfZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCWJwLT5wb3J0LmFkdmVydGlzaW5nIHw9IChBRFZFUlRJU0VEX0F1dG9uZWcgfAorCQkJCQkgY21kLT5hZHZlcnRpc2luZyk7CisKKwl9IGVsc2UgeyAvKiBmb3JjZWQgc3BlZWQgKi8KKwkJLyogYWR2ZXJ0aXNlIHRoZSByZXF1ZXN0ZWQgc3BlZWQgYW5kIGR1cGxleCBpZiBzdXBwb3J0ZWQgKi8KKwkJc3dpdGNoIChjbWQtPnNwZWVkKSB7CisJCWNhc2UgU1BFRURfMTA6CisJCQlpZiAoY21kLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpIHsKKwkJCQlpZiAoIShicC0+cG9ydC5zdXBwb3J0ZWQgJgorCQkJCSAgICAgIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwpKSB7CisJCQkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCQkgICAiMTBNIGZ1bGwgbm90IHN1cHBvcnRlZFxuIik7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KKworCQkJCWFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIEFEVkVSVElTRURfVFApOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoIShicC0+cG9ydC5zdXBwb3J0ZWQgJgorCQkJCSAgICAgIFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYpKSB7CisJCQkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCQkgICAiMTBNIGhhbGYgbm90IHN1cHBvcnRlZFxuIik7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KKworCQkJCWFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTBiYXNlVF9IYWxmIHwKKwkJCQkJICAgICAgIEFEVkVSVElTRURfVFApOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBTUEVFRF8xMDA6CisJCQlpZiAoY21kLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpIHsKKwkJCQlpZiAoIShicC0+cG9ydC5zdXBwb3J0ZWQgJgorCQkJCQkJU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwpKSB7CisJCQkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCQkgICAiMTAwTSBmdWxsIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CisKKwkJCQlhZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgQURWRVJUSVNFRF9UUCk7CisJCQl9IGVsc2UgeworCQkJCWlmICghKGJwLT5wb3J0LnN1cHBvcnRlZCAmCisJCQkJCQlTVVBQT1JURURfMTAwYmFzZVRfSGFsZikpIHsKKwkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJCSAgICIxMDBNIGhhbGYgbm90IHN1cHBvcnRlZFxuIik7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KKworCQkJCWFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8CisJCQkJCSAgICAgICBBRFZFUlRJU0VEX1RQKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgU1BFRURfMTAwMDoKKwkJCWlmIChjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkgeworCQkJCURQKE5FVElGX01TR19MSU5LLCAiMUcgaGFsZiBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKworCQkJaWYgKCEoYnAtPnBvcnQuc3VwcG9ydGVkICYgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsKSkgeworCQkJCURQKE5FVElGX01TR19MSU5LLCAiMUcgZnVsbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKworCQkJYWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkJICAgICAgIEFEVkVSVElTRURfVFApOworCQkJYnJlYWs7CisKKwkJY2FzZSBTUEVFRF8yNTAwOgorCQkJaWYgKGNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKSB7CisJCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJICAgIjIuNUcgaGFsZiBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKworCQkJaWYgKCEoYnAtPnBvcnQuc3VwcG9ydGVkICYgU1VQUE9SVEVEXzI1MDBiYXNlWF9GdWxsKSkgeworCQkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCSAgICIyLjVHIGZ1bGwgbm90IHN1cHBvcnRlZFxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJCWFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMjUwMGJhc2VYX0Z1bGwgfAorCQkJCSAgICAgICBBRFZFUlRJU0VEX1RQKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1BFRURfMTAwMDA6CisJCQlpZiAoY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpIHsKKwkJCQlEUChORVRJRl9NU0dfTElOSywgIjEwRyBoYWxmIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCisJCQlpZiAoIShicC0+cG9ydC5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsKSkgeworCQkJCURQKE5FVElGX01TR19MSU5LLCAiMTBHIGZ1bGwgbm90IHN1cHBvcnRlZFxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJCWFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsIHwKKwkJCQkgICAgICAgQURWRVJUSVNFRF9GSUJSRSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJVbnN1cHBvcnRlZCBzcGVlZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWJwLT5saW5rX3BhcmFtcy5yZXFfbGluZV9zcGVlZCA9IGNtZC0+c3BlZWQ7CisJCWJwLT5saW5rX3BhcmFtcy5yZXFfZHVwbGV4ID0gY21kLT5kdXBsZXg7CisJCWJwLT5wb3J0LmFkdmVydGlzaW5nID0gYWR2ZXJ0aXNpbmc7CisJfQorCisJRFAoTkVUSUZfTVNHX0xJTkssICJyZXFfbGluZV9zcGVlZCAlZFxuIgorCSAgIERQX0xFVkVMICIgIHJlcV9kdXBsZXggJWQgIGFkdmVydGlzaW5nIDB4JXhcbiIsCisJICAgYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkLCBicC0+bGlua19wYXJhbXMucmVxX2R1cGxleCwKKwkgICBicC0+cG9ydC5hZHZlcnRpc2luZyk7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWJueDJ4X3N0YXRzX2hhbmRsZShicCwgU1RBVFNfRVZFTlRfU1RPUCk7CisJCWJueDJ4X2xpbmtfc2V0KGJwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBJU19FMV9PTkxJTkUoaW5mbykJKCgoaW5mbykgJiBSSV9FMV9PTkxJTkUpID09IFJJX0UxX09OTElORSkKKyNkZWZpbmUgSVNfRTFIX09OTElORShpbmZvKQkoKChpbmZvKSAmIFJJX0UxSF9PTkxJTkUpID09IFJJX0UxSF9PTkxJTkUpCisKK3N0YXRpYyBpbnQgYm54MnhfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHJlZ2R1bXBfbGVuID0gMDsKKwlpbnQgaTsKKworCWlmIChDSElQX0lTX0UxKGJwKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgUkVHU19DT1VOVDsgaSsrKQorCQkJaWYgKElTX0UxX09OTElORShyZWdfYWRkcnNbaV0uaW5mbykpCisJCQkJcmVnZHVtcF9sZW4gKz0gcmVnX2FkZHJzW2ldLnNpemU7CisKKwkJZm9yIChpID0gMDsgaSA8IFdSRUdTX0NPVU5UX0UxOyBpKyspCisJCQlpZiAoSVNfRTFfT05MSU5FKHdyZWdfYWRkcnNfZTFbaV0uaW5mbykpCisJCQkJcmVnZHVtcF9sZW4gKz0gd3JlZ19hZGRyc19lMVtpXS5zaXplICoKKwkJCQkJKDEgKyB3cmVnX2FkZHJzX2UxW2ldLnJlYWRfcmVnc19jb3VudCk7CisKKwl9IGVsc2UgeyAvKiBFMUggKi8KKwkJZm9yIChpID0gMDsgaSA8IFJFR1NfQ09VTlQ7IGkrKykKKwkJCWlmIChJU19FMUhfT05MSU5FKHJlZ19hZGRyc1tpXS5pbmZvKSkKKwkJCQlyZWdkdW1wX2xlbiArPSByZWdfYWRkcnNbaV0uc2l6ZTsKKworCQlmb3IgKGkgPSAwOyBpIDwgV1JFR1NfQ09VTlRfRTFIOyBpKyspCisJCQlpZiAoSVNfRTFIX09OTElORSh3cmVnX2FkZHJzX2UxaFtpXS5pbmZvKSkKKwkJCQlyZWdkdW1wX2xlbiArPSB3cmVnX2FkZHJzX2UxaFtpXS5zaXplICoKKwkJCQkJKDEgKyB3cmVnX2FkZHJzX2UxaFtpXS5yZWFkX3JlZ3NfY291bnQpOworCX0KKwlyZWdkdW1wX2xlbiAqPSA0OworCXJlZ2R1bXBfbGVuICs9IHNpemVvZihzdHJ1Y3QgZHVtcF9oZHIpOworCisJcmV0dXJuIHJlZ2R1bXBfbGVuOworfQorCitzdGF0aWMgdm9pZCBibngyeF9nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywgdm9pZCAqX3ApCit7CisJdTMyICpwID0gX3AsIGksIGo7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGR1bXBfaGRyIGR1bXBfaGRyID0gezB9OworCisJcmVncy0+dmVyc2lvbiA9IDA7CisJbWVtc2V0KHAsIDAsIHJlZ3MtPmxlbik7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYnAtPmRldikpCisJCXJldHVybjsKKworCWR1bXBfaGRyLmhkcl9zaXplID0gKHNpemVvZihzdHJ1Y3QgZHVtcF9oZHIpIC8gNCkgLSAxOworCWR1bXBfaGRyLmR1bXBfc2lnbiA9IGR1bXBfc2lnbl9hbGw7CisJZHVtcF9oZHIueHN0b3JtX3dhaXRwID0gUkVHX1JEKGJwLCBYU1RPUk1fV0FJVFBfQUREUik7CisJZHVtcF9oZHIudHN0b3JtX3dhaXRwID0gUkVHX1JEKGJwLCBUU1RPUk1fV0FJVFBfQUREUik7CisJZHVtcF9oZHIudXN0b3JtX3dhaXRwID0gUkVHX1JEKGJwLCBVU1RPUk1fV0FJVFBfQUREUik7CisJZHVtcF9oZHIuY3N0b3JtX3dhaXRwID0gUkVHX1JEKGJwLCBDU1RPUk1fV0FJVFBfQUREUik7CisJZHVtcF9oZHIuaW5mbyA9IENISVBfSVNfRTEoYnApID8gUklfRTFfT05MSU5FIDogUklfRTFIX09OTElORTsKKworCW1lbWNweShwLCAmZHVtcF9oZHIsIHNpemVvZihzdHJ1Y3QgZHVtcF9oZHIpKTsKKwlwICs9IGR1bXBfaGRyLmhkcl9zaXplICsgMTsKKworCWlmIChDSElQX0lTX0UxKGJwKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgUkVHU19DT1VOVDsgaSsrKQorCQkJaWYgKElTX0UxX09OTElORShyZWdfYWRkcnNbaV0uaW5mbykpCisJCQkJZm9yIChqID0gMDsgaiA8IHJlZ19hZGRyc1tpXS5zaXplOyBqKyspCisJCQkJCSpwKysgPSBSRUdfUkQoYnAsCisJCQkJCQkgICAgICByZWdfYWRkcnNbaV0uYWRkciArIGoqNCk7CisKKwl9IGVsc2UgeyAvKiBFMUggKi8KKwkJZm9yIChpID0gMDsgaSA8IFJFR1NfQ09VTlQ7IGkrKykKKwkJCWlmIChJU19FMUhfT05MSU5FKHJlZ19hZGRyc1tpXS5pbmZvKSkKKwkJCQlmb3IgKGogPSAwOyBqIDwgcmVnX2FkZHJzW2ldLnNpemU7IGorKykKKwkJCQkJKnArKyA9IFJFR19SRChicCwKKwkJCQkJCSAgICAgIHJlZ19hZGRyc1tpXS5hZGRyICsgaio0KTsKKwl9Cit9CisKKyNkZWZpbmUgUEhZX0ZXX1ZFUl9MRU4JCQkxMAorCitzdGF0aWMgdm9pZCBibngyeF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1OCBwaHlfZndfdmVyW1BIWV9GV19WRVJfTEVOXTsKKworCXN0cmNweShpbmZvLT5kcml2ZXIsIERSVl9NT0RVTEVfTkFNRSk7CisJc3RyY3B5KGluZm8tPnZlcnNpb24sIERSVl9NT0RVTEVfVkVSU0lPTik7CisKKwlwaHlfZndfdmVyWzBdID0gJ1wwJzsKKwlpZiAoYnAtPnBvcnQucG1mKSB7CisJCWJueDJ4X2FjcXVpcmVfcGh5X2xvY2soYnApOworCQlibngyeF9nZXRfZXh0X3BoeV9md192ZXJzaW9uKCZicC0+bGlua19wYXJhbXMsCisJCQkJCSAgICAgKGJwLT5zdGF0ZSAhPSBCTlgyWF9TVEFURV9DTE9TRUQpLAorCQkJCQkgICAgIHBoeV9md192ZXIsIFBIWV9GV19WRVJfTEVOKTsKKwkJYm54MnhfcmVsZWFzZV9waHlfbG9jayhicCk7CisJfQorCisJc3RybmNweShpbmZvLT5md192ZXJzaW9uLCBicC0+ZndfdmVyLCAzMik7CisJc25wcmludGYoaW5mby0+ZndfdmVyc2lvbiArIHN0cmxlbihicC0+ZndfdmVyKSwgMzIgLSBzdHJsZW4oYnAtPmZ3X3ZlciksCisJCSAiYmMgJWQuJWQuJWQlcyVzIiwKKwkJIChicC0+Y29tbW9uLmJjX3ZlciAmIDB4ZmYwMDAwKSA+PiAxNiwKKwkJIChicC0+Y29tbW9uLmJjX3ZlciAmIDB4ZmYwMCkgPj4gOCwKKwkJIChicC0+Y29tbW9uLmJjX3ZlciAmIDB4ZmYpLAorCQkgKChwaHlfZndfdmVyWzBdICE9ICdcMCcpID8gIiBwaHkgIiA6ICIiKSwgcGh5X2Z3X3Zlcik7CisJc3RyY3B5KGluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShicC0+cGRldikpOworCWluZm8tPm5fc3RhdHMgPSBCTlgyWF9OVU1fU1RBVFM7CisJaW5mby0+dGVzdGluZm9fbGVuID0gQk5YMlhfTlVNX1RFU1RTOworCWluZm8tPmVlZHVtcF9sZW4gPSBicC0+Y29tbW9uLmZsYXNoX3NpemU7CisJaW5mby0+cmVnZHVtcF9sZW4gPSBibngyeF9nZXRfcmVnc19sZW4oZGV2KTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoYnAtPmZsYWdzICYgTk9fV09MX0ZMQUcpIHsKKwkJd29sLT5zdXBwb3J0ZWQgPSAwOworCQl3b2wtPndvbG9wdHMgPSAwOworCX0gZWxzZSB7CisJCXdvbC0+c3VwcG9ydGVkID0gV0FLRV9NQUdJQzsKKwkJaWYgKGJwLT53b2wpCisJCQl3b2wtPndvbG9wdHMgPSBXQUtFX01BR0lDOworCQllbHNlCisJCQl3b2wtPndvbG9wdHMgPSAwOworCX0KKwltZW1zZXQoJndvbC0+c29wYXNzLCAwLCBzaXplb2Yod29sLT5zb3Bhc3MpKTsKK30KKworc3RhdGljIGludCBibngyeF9zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmICh3b2wtPndvbG9wdHMgJiB+V0FLRV9NQUdJQykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAod29sLT53b2xvcHRzICYgV0FLRV9NQUdJQykgeworCQlpZiAoYnAtPmZsYWdzICYgTk9fV09MX0ZMQUcpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlicC0+d29sID0gMTsKKwl9IGVsc2UKKwkJYnAtPndvbCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBibngyeF9nZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldHVybiBicC0+bXNnX2VuYWJsZTsKK30KKworc3RhdGljIHZvaWQgYm54Mnhfc2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBsZXZlbCkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQlicC0+bXNnX2VuYWJsZSA9IGxldmVsOworfQorCitzdGF0aWMgaW50IGJueDJ4X253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmICghYnAtPnBvcnQucG1mKQorCQlyZXR1cm4gMDsKKworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJYm54Mnhfc3RhdHNfaGFuZGxlKGJwLCBTVEFUU19FVkVOVF9TVE9QKTsKKwkJYm54MnhfbGlua19zZXQoYnApOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGJueDJ4X2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoYnAtPmZsYWdzICYgTUZfRlVOQ19ESVMpCisJCXJldHVybiAwOworCisJcmV0dXJuIGJwLT5saW5rX3ZhcnMubGlua191cDsKK30KKworc3RhdGljIGludCBibngyeF9nZXRfZWVwcm9tX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcmV0dXJuIGJwLT5jb21tb24uZmxhc2hfc2l6ZTsKK30KKworc3RhdGljIGludCBibngyeF9hY3F1aXJlX252cmFtX2xvY2soc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCWludCBjb3VudCwgaTsKKwl1MzIgdmFsID0gMDsKKworCS8qIGFkanVzdCB0aW1lb3V0IGZvciBlbXVsYXRpb24vRlBHQSAqLworCWNvdW50ID0gTlZSQU1fVElNRU9VVF9DT1VOVDsKKwlpZiAoQ0hJUF9SRVZfSVNfU0xPVyhicCkpCisJCWNvdW50ICo9IDEwMDsKKworCS8qIHJlcXVlc3QgYWNjZXNzIHRvIG52cmFtIGludGVyZmFjZSAqLworCVJFR19XUihicCwgTUNQX1JFR19NQ1BSX05WTV9TV19BUkIsCisJICAgICAgIChNQ1BSX05WTV9TV19BUkJfQVJCX1JFUV9TRVQxIDw8IHBvcnQpKTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudCoxMDsgaSsrKSB7CisJCXZhbCA9IFJFR19SRChicCwgTUNQX1JFR19NQ1BSX05WTV9TV19BUkIpOworCQlpZiAodmFsICYgKE1DUFJfTlZNX1NXX0FSQl9BUkJfQVJCMSA8PCBwb3J0KSkKKwkJCWJyZWFrOworCisJCXVkZWxheSg1KTsKKwl9CisKKwlpZiAoISh2YWwgJiAoTUNQUl9OVk1fU1dfQVJCX0FSQl9BUkIxIDw8IHBvcnQpKSkgeworCQlEUChCTlgyWF9NU0dfTlZNLCAiY2Fubm90IGdldCBhY2Nlc3MgdG8gbnZyYW0gaW50ZXJmYWNlXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBibngyeF9yZWxlYXNlX252cmFtX2xvY2soc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCWludCBjb3VudCwgaTsKKwl1MzIgdmFsID0gMDsKKworCS8qIGFkanVzdCB0aW1lb3V0IGZvciBlbXVsYXRpb24vRlBHQSAqLworCWNvdW50ID0gTlZSQU1fVElNRU9VVF9DT1VOVDsKKwlpZiAoQ0hJUF9SRVZfSVNfU0xPVyhicCkpCisJCWNvdW50ICo9IDEwMDsKKworCS8qIHJlbGlucXVpc2ggbnZyYW0gaW50ZXJmYWNlICovCisJUkVHX1dSKGJwLCBNQ1BfUkVHX01DUFJfTlZNX1NXX0FSQiwKKwkgICAgICAgKE1DUFJfTlZNX1NXX0FSQl9BUkJfUkVRX0NMUjEgPDwgcG9ydCkpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50KjEwOyBpKyspIHsKKwkJdmFsID0gUkVHX1JEKGJwLCBNQ1BfUkVHX01DUFJfTlZNX1NXX0FSQik7CisJCWlmICghKHZhbCAmIChNQ1BSX05WTV9TV19BUkJfQVJCX0FSQjEgPDwgcG9ydCkpKQorCQkJYnJlYWs7CisKKwkJdWRlbGF5KDUpOworCX0KKworCWlmICh2YWwgJiAoTUNQUl9OVk1fU1dfQVJCX0FSQl9BUkIxIDw8IHBvcnQpKSB7CisJCURQKEJOWDJYX01TR19OVk0sICJjYW5ub3QgZnJlZSBhY2Nlc3MgdG8gbnZyYW0gaW50ZXJmYWNlXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYm54MnhfZW5hYmxlX252cmFtX2FjY2VzcyhzdHJ1Y3QgYm54MnggKmJwKQoreworCXUzMiB2YWw7CisKKwl2YWwgPSBSRUdfUkQoYnAsIE1DUF9SRUdfTUNQUl9OVk1fQUNDRVNTX0VOQUJMRSk7CisKKwkvKiBlbmFibGUgYm90aCBiaXRzLCBldmVuIG9uIHJlYWQgKi8KKwlSRUdfV1IoYnAsIE1DUF9SRUdfTUNQUl9OVk1fQUNDRVNTX0VOQUJMRSwKKwkgICAgICAgKHZhbCB8IE1DUFJfTlZNX0FDQ0VTU19FTkFCTEVfRU4gfAorCQkgICAgICBNQ1BSX05WTV9BQ0NFU1NfRU5BQkxFX1dSX0VOKSk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2Rpc2FibGVfbnZyYW1fYWNjZXNzKHN0cnVjdCBibngyeCAqYnApCit7CisJdTMyIHZhbDsKKworCXZhbCA9IFJFR19SRChicCwgTUNQX1JFR19NQ1BSX05WTV9BQ0NFU1NfRU5BQkxFKTsKKworCS8qIGRpc2FibGUgYm90aCBiaXRzLCBldmVuIGFmdGVyIHJlYWQgKi8KKwlSRUdfV1IoYnAsIE1DUF9SRUdfTUNQUl9OVk1fQUNDRVNTX0VOQUJMRSwKKwkgICAgICAgKHZhbCAmIH4oTUNQUl9OVk1fQUNDRVNTX0VOQUJMRV9FTiB8CisJCQlNQ1BSX05WTV9BQ0NFU1NfRU5BQkxFX1dSX0VOKSkpOworfQorCitzdGF0aWMgaW50IGJueDJ4X252cmFtX3JlYWRfZHdvcmQoc3RydWN0IGJueDJ4ICpicCwgdTMyIG9mZnNldCwgX19iZTMyICpyZXRfdmFsLAorCQkJCSAgdTMyIGNtZF9mbGFncykKK3sKKwlpbnQgY291bnQsIGksIHJjOworCXUzMiB2YWw7CisKKwkvKiBidWlsZCB0aGUgY29tbWFuZCB3b3JkICovCisJY21kX2ZsYWdzIHw9IE1DUFJfTlZNX0NPTU1BTkRfRE9JVDsKKworCS8qIG5lZWQgdG8gY2xlYXIgRE9ORSBiaXQgc2VwYXJhdGVseSAqLworCVJFR19XUihicCwgTUNQX1JFR19NQ1BSX05WTV9DT01NQU5ELCBNQ1BSX05WTV9DT01NQU5EX0RPTkUpOworCisJLyogYWRkcmVzcyBvZiB0aGUgTlZSQU0gdG8gcmVhZCBmcm9tICovCisJUkVHX1dSKGJwLCBNQ1BfUkVHX01DUFJfTlZNX0FERFIsCisJICAgICAgIChvZmZzZXQgJiBNQ1BSX05WTV9BRERSX05WTV9BRERSX1ZBTFVFKSk7CisKKwkvKiBpc3N1ZSBhIHJlYWQgY29tbWFuZCAqLworCVJFR19XUihicCwgTUNQX1JFR19NQ1BSX05WTV9DT01NQU5ELCBjbWRfZmxhZ3MpOworCisJLyogYWRqdXN0IHRpbWVvdXQgZm9yIGVtdWxhdGlvbi9GUEdBICovCisJY291bnQgPSBOVlJBTV9USU1FT1VUX0NPVU5UOworCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSkKKwkJY291bnQgKj0gMTAwOworCisJLyogd2FpdCBmb3IgY29tcGxldGlvbiAqLworCSpyZXRfdmFsID0gMDsKKwlyYyA9IC1FQlVTWTsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQl1ZGVsYXkoNSk7CisJCXZhbCA9IFJFR19SRChicCwgTUNQX1JFR19NQ1BSX05WTV9DT01NQU5EKTsKKworCQlpZiAodmFsICYgTUNQUl9OVk1fQ09NTUFORF9ET05FKSB7CisJCQl2YWwgPSBSRUdfUkQoYnAsIE1DUF9SRUdfTUNQUl9OVk1fUkVBRCk7CisJCQkvKiB3ZSByZWFkIG52cmFtIGRhdGEgaW4gY3B1IG9yZGVyCisJCQkgKiBidXQgZXRodG9vbCBzZWVzIGl0IGFzIGFuIGFycmF5IG9mIGJ5dGVzCisJCQkgKiBjb252ZXJ0aW5nIHRvIGJpZy1lbmRpYW4gd2lsbCBkbyB0aGUgd29yayAqLworCQkJKnJldF92YWwgPSBjcHVfdG9fYmUzMih2YWwpOworCQkJcmMgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgYm54MnhfbnZyYW1fcmVhZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgb2Zmc2V0LCB1OCAqcmV0X2J1ZiwKKwkJCSAgICBpbnQgYnVmX3NpemUpCit7CisJaW50IHJjOworCXUzMiBjbWRfZmxhZ3M7CisJX19iZTMyIHZhbDsKKworCWlmICgob2Zmc2V0ICYgMHgwMykgfHwgKGJ1Zl9zaXplICYgMHgwMykgfHwgKGJ1Zl9zaXplID09IDApKSB7CisJCURQKEJOWDJYX01TR19OVk0sCisJCSAgICJJbnZhbGlkIHBhcmFtZXRlcjogb2Zmc2V0IDB4JXggIGJ1Zl9zaXplIDB4JXhcbiIsCisJCSAgIG9mZnNldCwgYnVmX3NpemUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAob2Zmc2V0ICsgYnVmX3NpemUgPiBicC0+Y29tbW9uLmZsYXNoX3NpemUpIHsKKwkJRFAoQk5YMlhfTVNHX05WTSwgIkludmFsaWQgcGFyYW1ldGVyOiBvZmZzZXQgKDB4JXgpICsiCisJCQkJICAiIGJ1Zl9zaXplICgweCV4KSA+IGZsYXNoX3NpemUgKDB4JXgpXG4iLAorCQkgICBvZmZzZXQsIGJ1Zl9zaXplLCBicC0+Y29tbW9uLmZsYXNoX3NpemUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiByZXF1ZXN0IGFjY2VzcyB0byBudnJhbSBpbnRlcmZhY2UgKi8KKwlyYyA9IGJueDJ4X2FjcXVpcmVfbnZyYW1fbG9jayhicCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwkvKiBlbmFibGUgYWNjZXNzIHRvIG52cmFtIGludGVyZmFjZSAqLworCWJueDJ4X2VuYWJsZV9udnJhbV9hY2Nlc3MoYnApOworCisJLyogcmVhZCB0aGUgZmlyc3Qgd29yZChzKSAqLworCWNtZF9mbGFncyA9IE1DUFJfTlZNX0NPTU1BTkRfRklSU1Q7CisJd2hpbGUgKChidWZfc2l6ZSA+IHNpemVvZih1MzIpKSAmJiAocmMgPT0gMCkpIHsKKwkJcmMgPSBibngyeF9udnJhbV9yZWFkX2R3b3JkKGJwLCBvZmZzZXQsICZ2YWwsIGNtZF9mbGFncyk7CisJCW1lbWNweShyZXRfYnVmLCAmdmFsLCA0KTsKKworCQkvKiBhZHZhbmNlIHRvIHRoZSBuZXh0IGR3b3JkICovCisJCW9mZnNldCArPSBzaXplb2YodTMyKTsKKwkJcmV0X2J1ZiArPSBzaXplb2YodTMyKTsKKwkJYnVmX3NpemUgLT0gc2l6ZW9mKHUzMik7CisJCWNtZF9mbGFncyA9IDA7CisJfQorCisJaWYgKHJjID09IDApIHsKKwkJY21kX2ZsYWdzIHw9IE1DUFJfTlZNX0NPTU1BTkRfTEFTVDsKKwkJcmMgPSBibngyeF9udnJhbV9yZWFkX2R3b3JkKGJwLCBvZmZzZXQsICZ2YWwsIGNtZF9mbGFncyk7CisJCW1lbWNweShyZXRfYnVmLCAmdmFsLCA0KTsKKwl9CisKKwkvKiBkaXNhYmxlIGFjY2VzcyB0byBudnJhbSBpbnRlcmZhY2UgKi8KKwlibngyeF9kaXNhYmxlX252cmFtX2FjY2VzcyhicCk7CisJYm54MnhfcmVsZWFzZV9udnJhbV9sb2NrKGJwKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBibngyeF9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICplZWJ1ZikKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgcmM7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlEUChCTlgyWF9NU0dfTlZNLCAiZXRodG9vbF9lZXByb206IGNtZCAlZFxuIgorCSAgIERQX0xFVkVMICIgIG1hZ2ljIDB4JXggIG9mZnNldCAweCV4ICglZCkgIGxlbiAweCV4ICglZClcbiIsCisJICAgZWVwcm9tLT5jbWQsIGVlcHJvbS0+bWFnaWMsIGVlcHJvbS0+b2Zmc2V0LCBlZXByb20tPm9mZnNldCwKKwkgICBlZXByb20tPmxlbiwgZWVwcm9tLT5sZW4pOworCisJLyogcGFyYW1ldGVycyBhbHJlYWR5IHZhbGlkYXRlZCBpbiBldGh0b29sX2dldF9lZXByb20gKi8KKworCXJjID0gYm54MnhfbnZyYW1fcmVhZChicCwgZWVwcm9tLT5vZmZzZXQsIGVlYnVmLCBlZXByb20tPmxlbik7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgYm54MnhfbnZyYW1fd3JpdGVfZHdvcmQoc3RydWN0IGJueDJ4ICpicCwgdTMyIG9mZnNldCwgdTMyIHZhbCwKKwkJCQkgICB1MzIgY21kX2ZsYWdzKQoreworCWludCBjb3VudCwgaSwgcmM7CisKKwkvKiBidWlsZCB0aGUgY29tbWFuZCB3b3JkICovCisJY21kX2ZsYWdzIHw9IE1DUFJfTlZNX0NPTU1BTkRfRE9JVCB8IE1DUFJfTlZNX0NPTU1BTkRfV1I7CisKKwkvKiBuZWVkIHRvIGNsZWFyIERPTkUgYml0IHNlcGFyYXRlbHkgKi8KKwlSRUdfV1IoYnAsIE1DUF9SRUdfTUNQUl9OVk1fQ09NTUFORCwgTUNQUl9OVk1fQ09NTUFORF9ET05FKTsKKworCS8qIHdyaXRlIHRoZSBkYXRhICovCisJUkVHX1dSKGJwLCBNQ1BfUkVHX01DUFJfTlZNX1dSSVRFLCB2YWwpOworCisJLyogYWRkcmVzcyBvZiB0aGUgTlZSQU0gdG8gd3JpdGUgdG8gKi8KKwlSRUdfV1IoYnAsIE1DUF9SRUdfTUNQUl9OVk1fQUREUiwKKwkgICAgICAgKG9mZnNldCAmIE1DUFJfTlZNX0FERFJfTlZNX0FERFJfVkFMVUUpKTsKKworCS8qIGlzc3VlIHRoZSB3cml0ZSBjb21tYW5kICovCisJUkVHX1dSKGJwLCBNQ1BfUkVHX01DUFJfTlZNX0NPTU1BTkQsIGNtZF9mbGFncyk7CisKKwkvKiBhZGp1c3QgdGltZW91dCBmb3IgZW11bGF0aW9uL0ZQR0EgKi8KKwljb3VudCA9IE5WUkFNX1RJTUVPVVRfQ09VTlQ7CisJaWYgKENISVBfUkVWX0lTX1NMT1coYnApKQorCQljb3VudCAqPSAxMDA7CisKKwkvKiB3YWl0IGZvciBjb21wbGV0aW9uICovCisJcmMgPSAtRUJVU1k7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJdWRlbGF5KDUpOworCQl2YWwgPSBSRUdfUkQoYnAsIE1DUF9SRUdfTUNQUl9OVk1fQ09NTUFORCk7CisJCWlmICh2YWwgJiBNQ1BSX05WTV9DT01NQU5EX0RPTkUpIHsKKwkJCXJjID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHJjOworfQorCisjZGVmaW5lIEJZVEVfT0ZGU0VUKG9mZnNldCkJCSg4ICogKG9mZnNldCAmIDB4MDMpKQorCitzdGF0aWMgaW50IGJueDJ4X252cmFtX3dyaXRlMShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgb2Zmc2V0LCB1OCAqZGF0YV9idWYsCisJCQkgICAgICBpbnQgYnVmX3NpemUpCit7CisJaW50IHJjOworCXUzMiBjbWRfZmxhZ3M7CisJdTMyIGFsaWduX29mZnNldDsKKwlfX2JlMzIgdmFsOworCisJaWYgKG9mZnNldCArIGJ1Zl9zaXplID4gYnAtPmNvbW1vbi5mbGFzaF9zaXplKSB7CisJCURQKEJOWDJYX01TR19OVk0sICJJbnZhbGlkIHBhcmFtZXRlcjogb2Zmc2V0ICgweCV4KSArIgorCQkJCSAgIiBidWZfc2l6ZSAoMHgleCkgPiBmbGFzaF9zaXplICgweCV4KVxuIiwKKwkJICAgb2Zmc2V0LCBidWZfc2l6ZSwgYnAtPmNvbW1vbi5mbGFzaF9zaXplKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogcmVxdWVzdCBhY2Nlc3MgdG8gbnZyYW0gaW50ZXJmYWNlICovCisJcmMgPSBibngyeF9hY3F1aXJlX252cmFtX2xvY2soYnApOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJLyogZW5hYmxlIGFjY2VzcyB0byBudnJhbSBpbnRlcmZhY2UgKi8KKwlibngyeF9lbmFibGVfbnZyYW1fYWNjZXNzKGJwKTsKKworCWNtZF9mbGFncyA9IChNQ1BSX05WTV9DT01NQU5EX0ZJUlNUIHwgTUNQUl9OVk1fQ09NTUFORF9MQVNUKTsKKwlhbGlnbl9vZmZzZXQgPSAob2Zmc2V0ICYgfjB4MDMpOworCXJjID0gYm54MnhfbnZyYW1fcmVhZF9kd29yZChicCwgYWxpZ25fb2Zmc2V0LCAmdmFsLCBjbWRfZmxhZ3MpOworCisJaWYgKHJjID09IDApIHsKKwkJdmFsICY9IH4oMHhmZiA8PCBCWVRFX09GRlNFVChvZmZzZXQpKTsKKwkJdmFsIHw9ICgqZGF0YV9idWYgPDwgQllURV9PRkZTRVQob2Zmc2V0KSk7CisKKwkJLyogbnZyYW0gZGF0YSBpcyByZXR1cm5lZCBhcyBhbiBhcnJheSBvZiBieXRlcworCQkgKiBjb252ZXJ0IGl0IGJhY2sgdG8gY3B1IG9yZGVyICovCisJCXZhbCA9IGJlMzJfdG9fY3B1KHZhbCk7CisKKwkJcmMgPSBibngyeF9udnJhbV93cml0ZV9kd29yZChicCwgYWxpZ25fb2Zmc2V0LCB2YWwsCisJCQkJCSAgICAgY21kX2ZsYWdzKTsKKwl9CisKKwkvKiBkaXNhYmxlIGFjY2VzcyB0byBudnJhbSBpbnRlcmZhY2UgKi8KKwlibngyeF9kaXNhYmxlX252cmFtX2FjY2VzcyhicCk7CisJYm54MnhfcmVsZWFzZV9udnJhbV9sb2NrKGJwKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBibngyeF9udnJhbV93cml0ZShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgb2Zmc2V0LCB1OCAqZGF0YV9idWYsCisJCQkgICAgIGludCBidWZfc2l6ZSkKK3sKKwlpbnQgcmM7CisJdTMyIGNtZF9mbGFnczsKKwl1MzIgdmFsOworCXUzMiB3cml0dGVuX3NvX2ZhcjsKKworCWlmIChidWZfc2l6ZSA9PSAxKQkvKiBldGh0b29sICovCisJCXJldHVybiBibngyeF9udnJhbV93cml0ZTEoYnAsIG9mZnNldCwgZGF0YV9idWYsIGJ1Zl9zaXplKTsKKworCWlmICgob2Zmc2V0ICYgMHgwMykgfHwgKGJ1Zl9zaXplICYgMHgwMykgfHwgKGJ1Zl9zaXplID09IDApKSB7CisJCURQKEJOWDJYX01TR19OVk0sCisJCSAgICJJbnZhbGlkIHBhcmFtZXRlcjogb2Zmc2V0IDB4JXggIGJ1Zl9zaXplIDB4JXhcbiIsCisJCSAgIG9mZnNldCwgYnVmX3NpemUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAob2Zmc2V0ICsgYnVmX3NpemUgPiBicC0+Y29tbW9uLmZsYXNoX3NpemUpIHsKKwkJRFAoQk5YMlhfTVNHX05WTSwgIkludmFsaWQgcGFyYW1ldGVyOiBvZmZzZXQgKDB4JXgpICsiCisJCQkJICAiIGJ1Zl9zaXplICgweCV4KSA+IGZsYXNoX3NpemUgKDB4JXgpXG4iLAorCQkgICBvZmZzZXQsIGJ1Zl9zaXplLCBicC0+Y29tbW9uLmZsYXNoX3NpemUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiByZXF1ZXN0IGFjY2VzcyB0byBudnJhbSBpbnRlcmZhY2UgKi8KKwlyYyA9IGJueDJ4X2FjcXVpcmVfbnZyYW1fbG9jayhicCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwkvKiBlbmFibGUgYWNjZXNzIHRvIG52cmFtIGludGVyZmFjZSAqLworCWJueDJ4X2VuYWJsZV9udnJhbV9hY2Nlc3MoYnApOworCisJd3JpdHRlbl9zb19mYXIgPSAwOworCWNtZF9mbGFncyA9IE1DUFJfTlZNX0NPTU1BTkRfRklSU1Q7CisJd2hpbGUgKCh3cml0dGVuX3NvX2ZhciA8IGJ1Zl9zaXplKSAmJiAocmMgPT0gMCkpIHsKKwkJaWYgKHdyaXR0ZW5fc29fZmFyID09IChidWZfc2l6ZSAtIHNpemVvZih1MzIpKSkKKwkJCWNtZF9mbGFncyB8PSBNQ1BSX05WTV9DT01NQU5EX0xBU1Q7CisJCWVsc2UgaWYgKCgob2Zmc2V0ICsgNCkgJSBOVlJBTV9QQUdFX1NJWkUpID09IDApCisJCQljbWRfZmxhZ3MgfD0gTUNQUl9OVk1fQ09NTUFORF9MQVNUOworCQllbHNlIGlmICgob2Zmc2V0ICUgTlZSQU1fUEFHRV9TSVpFKSA9PSAwKQorCQkJY21kX2ZsYWdzIHw9IE1DUFJfTlZNX0NPTU1BTkRfRklSU1Q7CisKKwkJbWVtY3B5KCZ2YWwsIGRhdGFfYnVmLCA0KTsKKworCQlyYyA9IGJueDJ4X252cmFtX3dyaXRlX2R3b3JkKGJwLCBvZmZzZXQsIHZhbCwgY21kX2ZsYWdzKTsKKworCQkvKiBhZHZhbmNlIHRvIHRoZSBuZXh0IGR3b3JkICovCisJCW9mZnNldCArPSBzaXplb2YodTMyKTsKKwkJZGF0YV9idWYgKz0gc2l6ZW9mKHUzMik7CisJCXdyaXR0ZW5fc29fZmFyICs9IHNpemVvZih1MzIpOworCQljbWRfZmxhZ3MgPSAwOworCX0KKworCS8qIGRpc2FibGUgYWNjZXNzIHRvIG52cmFtIGludGVyZmFjZSAqLworCWJueDJ4X2Rpc2FibGVfbnZyYW1fYWNjZXNzKGJwKTsKKwlibngyeF9yZWxlYXNlX252cmFtX2xvY2soYnApOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGJueDJ4X3NldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmVlYnVmKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJaW50IHJjID0gMDsKKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCURQKEJOWDJYX01TR19OVk0sICJldGh0b29sX2VlcHJvbTogY21kICVkXG4iCisJICAgRFBfTEVWRUwgIiAgbWFnaWMgMHgleCAgb2Zmc2V0IDB4JXggKCVkKSAgbGVuIDB4JXggKCVkKVxuIiwKKwkgICBlZXByb20tPmNtZCwgZWVwcm9tLT5tYWdpYywgZWVwcm9tLT5vZmZzZXQsIGVlcHJvbS0+b2Zmc2V0LAorCSAgIGVlcHJvbS0+bGVuLCBlZXByb20tPmxlbik7CisKKwkvKiBwYXJhbWV0ZXJzIGFscmVhZHkgdmFsaWRhdGVkIGluIGV0aHRvb2xfc2V0X2VlcHJvbSAqLworCisJLyogUEhZIGVlcHJvbSBjYW4gYmUgYWNjZXNzZWQgb25seSBieSB0aGUgUE1GICovCisJaWYgKChlZXByb20tPm1hZ2ljID49IDB4NTA0ODU5MDApICYmIChlZXByb20tPm1hZ2ljIDw9IDB4NTA0ODU5RkYpICYmCisJICAgICFicC0+cG9ydC5wbWYpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGVlcHJvbS0+bWFnaWMgPT0gMHg1MDQ4NTk1MCkgeworCQkvKiAnUEhZUCcgKDB4NTA0ODU5NTApOiBwcmVwYXJlIHBoeSBmb3IgRlcgdXBncmFkZSAqLworCQlibngyeF9zdGF0c19oYW5kbGUoYnAsIFNUQVRTX0VWRU5UX1NUT1ApOworCisJCWJueDJ4X2FjcXVpcmVfcGh5X2xvY2soYnApOworCQlyYyB8PSBibngyeF9saW5rX3Jlc2V0KCZicC0+bGlua19wYXJhbXMsCisJCQkJICAgICAgICZicC0+bGlua192YXJzLCAwKTsKKwkJaWYgKFhHWFNfRVhUX1BIWV9UWVBFKGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZykgPT0KKwkJCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSkKKwkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzAsCisJCQkJICAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fSElHSCwgcG9ydCk7CisJCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOworCQlibngyeF9saW5rX3JlcG9ydChicCk7CisKKwl9IGVsc2UgaWYgKGVlcHJvbS0+bWFnaWMgPT0gMHg1MDQ4NTk1MikgeworCQkvKiAnUEhZUicgKDB4NTA0ODU5NTIpOiByZS1pbml0IGxpbmsgYWZ0ZXIgRlcgdXBncmFkZSAqLworCQlpZiAoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX09QRU4pIHsKKwkJCWJueDJ4X2FjcXVpcmVfcGh5X2xvY2soYnApOworCQkJcmMgfD0gYm54MnhfbGlua19yZXNldCgmYnAtPmxpbmtfcGFyYW1zLAorCQkJCQkgICAgICAgJmJwLT5saW5rX3ZhcnMsIDEpOworCisJCQlyYyB8PSBibngyeF9waHlfaW5pdCgmYnAtPmxpbmtfcGFyYW1zLAorCQkJCQkgICAgICZicC0+bGlua192YXJzKTsKKwkJCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOworCQkJYm54MnhfY2FsY19mY19hZHYoYnApOworCQl9CisJfSBlbHNlIGlmIChlZXByb20tPm1hZ2ljID09IDB4NTM5ODU5NDMpIHsKKwkJLyogJ1BIWUMnICgweDUzOTg1OTQzKTogUEhZIEZXIHVwZ3JhZGUgY29tcGxldGVkICovCisJCWlmIChYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpID09CisJCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEpIHsKKwkJCXU4IGV4dF9waHlfYWRkciA9CisJCQkgICAgIFhHWFNfRVhUX1BIWV9BRERSKGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyk7CisKKwkJCS8qIERTUCBSZW1vdmUgRG93bmxvYWQgTW9kZSAqLworCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMCwKKwkJCQkgICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19MT1csIHBvcnQpOworCisJCQlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKKworCQkJYm54Mnhfc2Z4NzEwMV9zcF9zd19yZXNldChicCwgcG9ydCwgZXh0X3BoeV9hZGRyKTsKKworCQkJLyogd2FpdCAwLjUgc2VjIHRvIGFsbG93IGl0IHRvIHJ1biAqLworCQkJbXNsZWVwKDUwMCk7CisJCQlibngyeF9leHRfcGh5X2h3X3Jlc2V0KGJwLCBwb3J0KTsKKwkJCW1zbGVlcCg1MDApOworCQkJYm54MnhfcmVsZWFzZV9waHlfbG9jayhicCk7CisJCX0KKwl9IGVsc2UKKwkJcmMgPSBibngyeF9udnJhbV93cml0ZShicCwgZWVwcm9tLT5vZmZzZXQsIGVlYnVmLCBlZXByb20tPmxlbik7CisKKwlyZXR1cm4gcmM7Cit9CitzdGF0aWMgaW50IGJueDJ4X2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmNvYWwpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwltZW1zZXQoY29hbCwgMCwgc2l6ZW9mKHN0cnVjdCBldGh0b29sX2NvYWxlc2NlKSk7CisKKwljb2FsLT5yeF9jb2FsZXNjZV91c2VjcyA9IGJwLT5yeF90aWNrczsKKwljb2FsLT50eF9jb2FsZXNjZV91c2VjcyA9IGJwLT50eF90aWNrczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJueDJ4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmNvYWwpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwlicC0+cnhfdGlja3MgPSAodTE2KWNvYWwtPnJ4X2NvYWxlc2NlX3VzZWNzOworCWlmIChicC0+cnhfdGlja3MgPiBCTlgyWF9NQVhfQ09BTEVTQ0VfVE9VVCkKKwkJYnAtPnJ4X3RpY2tzID0gQk5YMlhfTUFYX0NPQUxFU0NFX1RPVVQ7CisKKwlicC0+dHhfdGlja3MgPSAodTE2KWNvYWwtPnR4X2NvYWxlc2NlX3VzZWNzOworCWlmIChicC0+dHhfdGlja3MgPiBCTlgyWF9NQVhfQ09BTEVTQ0VfVE9VVCkKKwkJYnAtPnR4X3RpY2tzID0gQk5YMlhfTUFYX0NPQUxFU0NFX1RPVVQ7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKQorCQlibngyeF91cGRhdGVfY29hbGVzY2UoYnApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmVyaW5nKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJZXJpbmctPnJ4X21heF9wZW5kaW5nID0gTUFYX1JYX0FWQUlMOworCWVyaW5nLT5yeF9taW5pX21heF9wZW5kaW5nID0gMDsKKwllcmluZy0+cnhfanVtYm9fbWF4X3BlbmRpbmcgPSAwOworCisJZXJpbmctPnJ4X3BlbmRpbmcgPSBicC0+cnhfcmluZ19zaXplOworCWVyaW5nLT5yeF9taW5pX3BlbmRpbmcgPSAwOworCWVyaW5nLT5yeF9qdW1ib19wZW5kaW5nID0gMDsKKworCWVyaW5nLT50eF9tYXhfcGVuZGluZyA9IE1BWF9UWF9BVkFJTDsKKwllcmluZy0+dHhfcGVuZGluZyA9IGJwLT50eF9yaW5nX3NpemU7Cit9CisKK3N0YXRpYyBpbnQgYm54Mnhfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqZXJpbmcpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHJjID0gMDsKKworCWlmIChicC0+cmVjb3Zlcnlfc3RhdGUgIT0gQk5YMlhfUkVDT1ZFUllfRE9ORSkgeworCQlwcmludGsoS0VSTl9FUlIgIkhhbmRsaW5nIHBhcml0eSBlcnJvciByZWNvdmVyeS4gVHJ5IGFnYWluIGxhdGVyXG4iKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJaWYgKChlcmluZy0+cnhfcGVuZGluZyA+IE1BWF9SWF9BVkFJTCkgfHwKKwkgICAgKGVyaW5nLT50eF9wZW5kaW5nID4gTUFYX1RYX0FWQUlMKSB8fAorCSAgICAoZXJpbmctPnR4X3BlbmRpbmcgPD0gTUFYX1NLQl9GUkFHUyArIDQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJwLT5yeF9yaW5nX3NpemUgPSBlcmluZy0+cnhfcGVuZGluZzsKKwlicC0+dHhfcmluZ19zaXplID0gZXJpbmctPnR4X3BlbmRpbmc7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWJueDJ4X25pY191bmxvYWQoYnAsIFVOTE9BRF9OT1JNQUwpOworCQlyYyA9IGJueDJ4X25pY19sb2FkKGJwLCBMT0FEX05PUk1BTCk7CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBibngyeF9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICplcGF1c2UpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwllcGF1c2UtPmF1dG9uZWcgPSAoYnAtPmxpbmtfcGFyYW1zLnJlcV9mbG93X2N0cmwgPT0KKwkJCSAgIEJOWDJYX0ZMT1dfQ1RSTF9BVVRPKSAmJgorCQkJICAoYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkID09IFNQRUVEX0FVVE9fTkVHKTsKKworCWVwYXVzZS0+cnhfcGF1c2UgPSAoKGJwLT5saW5rX3ZhcnMuZmxvd19jdHJsICYgQk5YMlhfRkxPV19DVFJMX1JYKSA9PQorCQkJICAgIEJOWDJYX0ZMT1dfQ1RSTF9SWCk7CisJZXBhdXNlLT50eF9wYXVzZSA9ICgoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfVFgpID09CisJCQkgICAgQk5YMlhfRkxPV19DVFJMX1RYKTsKKworCURQKE5FVElGX01TR19MSU5LLCAiZXRodG9vbF9wYXVzZXBhcmFtOiBjbWQgJWRcbiIKKwkgICBEUF9MRVZFTCAiICBhdXRvbmVnICVkICByeF9wYXVzZSAlZCAgdHhfcGF1c2UgJWRcbiIsCisJICAgZXBhdXNlLT5jbWQsIGVwYXVzZS0+YXV0b25lZywgZXBhdXNlLT5yeF9wYXVzZSwgZXBhdXNlLT50eF9wYXVzZSk7Cit9CisKK3N0YXRpYyBpbnQgYm54Mnhfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICplcGF1c2UpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoSVNfRTFITUYoYnApKQorCQlyZXR1cm4gMDsKKworCURQKE5FVElGX01TR19MSU5LLCAiZXRodG9vbF9wYXVzZXBhcmFtOiBjbWQgJWRcbiIKKwkgICBEUF9MRVZFTCAiICBhdXRvbmVnICVkICByeF9wYXVzZSAlZCAgdHhfcGF1c2UgJWRcbiIsCisJICAgZXBhdXNlLT5jbWQsIGVwYXVzZS0+YXV0b25lZywgZXBhdXNlLT5yeF9wYXVzZSwgZXBhdXNlLT50eF9wYXVzZSk7CisKKwlicC0+bGlua19wYXJhbXMucmVxX2Zsb3dfY3RybCA9IEJOWDJYX0ZMT1dfQ1RSTF9BVVRPOworCisJaWYgKGVwYXVzZS0+cnhfcGF1c2UpCisJCWJwLT5saW5rX3BhcmFtcy5yZXFfZmxvd19jdHJsIHw9IEJOWDJYX0ZMT1dfQ1RSTF9SWDsKKworCWlmIChlcGF1c2UtPnR4X3BhdXNlKQorCQlicC0+bGlua19wYXJhbXMucmVxX2Zsb3dfY3RybCB8PSBCTlgyWF9GTE9XX0NUUkxfVFg7CisKKwlpZiAoYnAtPmxpbmtfcGFyYW1zLnJlcV9mbG93X2N0cmwgPT0gQk5YMlhfRkxPV19DVFJMX0FVVE8pCisJCWJwLT5saW5rX3BhcmFtcy5yZXFfZmxvd19jdHJsID0gQk5YMlhfRkxPV19DVFJMX05PTkU7CisKKwlpZiAoZXBhdXNlLT5hdXRvbmVnKSB7CisJCWlmICghKGJwLT5wb3J0LnN1cHBvcnRlZCAmIFNVUFBPUlRFRF9BdXRvbmVnKSkgeworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJhdXRvbmVnIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkID09IFNQRUVEX0FVVE9fTkVHKQorCQkJYnAtPmxpbmtfcGFyYW1zLnJlcV9mbG93X2N0cmwgPSBCTlgyWF9GTE9XX0NUUkxfQVVUTzsKKwl9CisKKwlEUChORVRJRl9NU0dfTElOSywKKwkgICAicmVxX2Zsb3dfY3RybCAweCV4XG4iLCBicC0+bGlua19wYXJhbXMucmVxX2Zsb3dfY3RybCk7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWJueDJ4X3N0YXRzX2hhbmRsZShicCwgU1RBVFNfRVZFTlRfU1RPUCk7CisJCWJueDJ4X2xpbmtfc2V0KGJwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBibngyeF9zZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGNoYW5nZWQgPSAwOworCWludCByYyA9IDA7CisKKwlpZiAoZGF0YSAmIH4oRVRIX0ZMQUdfTFJPIHwgRVRIX0ZMQUdfUlhIQVNIKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYnAtPnJlY292ZXJ5X3N0YXRlICE9IEJOWDJYX1JFQ09WRVJZX0RPTkUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJIYW5kbGluZyBwYXJpdHkgZXJyb3IgcmVjb3ZlcnkuIFRyeSBhZ2FpbiBsYXRlclxuIik7CisJCXJldHVybiAtRUFHQUlOOworCX0KKworCS8qIFRQQSByZXF1aXJlcyBSeCBDU1VNIG9mZmxvYWRpbmcgKi8KKwlpZiAoKGRhdGEgJiBFVEhfRkxBR19MUk8pICYmIGJwLT5yeF9jc3VtKSB7CisJCWlmICghYnAtPmRpc2FibGVfdHBhKSB7CisJCQlpZiAoIShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pKSB7CisJCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKKwkJCQlicC0+ZmxhZ3MgfD0gVFBBX0VOQUJMRV9GTEFHOworCQkJCWNoYW5nZWQgPSAxOworCQkJfQorCQl9IGVsc2UKKwkJCXJjID0gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykgeworCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0xSTzsKKwkJYnAtPmZsYWdzICY9IH5UUEFfRU5BQkxFX0ZMQUc7CisJCWNoYW5nZWQgPSAxOworCX0KKworCWlmIChkYXRhICYgRVRIX0ZMQUdfUlhIQVNIKQorCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfUlhIQVNIOworCWVsc2UKKwkJZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9SWEhBU0g7CisKKwlpZiAoY2hhbmdlZCAmJiBuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJYm54MnhfbmljX3VubG9hZChicCwgVU5MT0FEX05PUk1BTCk7CisJCXJjID0gYm54MnhfbmljX2xvYWQoYnAsIExPQURfTk9STUFMKTsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB1MzIgYm54MnhfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldHVybiBicC0+cnhfY3N1bTsKK30KKworc3RhdGljIGludCBibngyeF9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgcmMgPSAwOworCisJaWYgKGJwLT5yZWNvdmVyeV9zdGF0ZSAhPSBCTlgyWF9SRUNPVkVSWV9ET05FKSB7CisJCXByaW50ayhLRVJOX0VSUiAiSGFuZGxpbmcgcGFyaXR5IGVycm9yIHJlY292ZXJ5LiBUcnkgYWdhaW4gbGF0ZXJcbiIpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKwlicC0+cnhfY3N1bSA9IGRhdGE7CisKKwkvKiBEaXNhYmxlIFRQQSwgd2hlbiBSeCBDU1VNIGlzIGRpc2FibGVkLiBPdGhlcndpc2UgYWxsCisJICAgVFBBJ2VkIHBhY2tldHMgd2lsbCBiZSBkaXNjYXJkZWQgZHVlIHRvIHdyb25nIFRDUCBDU1VNICovCisJaWYgKCFkYXRhKSB7CisJCXUzMiBmbGFncyA9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzKGRldik7CisKKwkJcmMgPSBibngyeF9zZXRfZmxhZ3MoZGV2LCAoZmxhZ3MgJiB+RVRIX0ZMQUdfTFJPKSk7CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGJueDJ4X3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCit7CisJaWYgKGRhdGEpIHsKKwkJZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTT19FQ04pOworCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKKwl9IGVsc2UgeworCQlkZXYtPmZlYXR1cmVzICY9IH4oTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTT19FQ04pOworCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzY7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCWNoYXIgc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07Cit9IGJueDJ4X3Rlc3RzX3N0cl9hcnJbQk5YMlhfTlVNX1RFU1RTXSA9IHsKKwl7ICJyZWdpc3Rlcl90ZXN0IChvZmZsaW5lKSIgfSwKKwl7ICJtZW1vcnlfdGVzdCAob2ZmbGluZSkiIH0sCisJeyAibG9vcGJhY2tfdGVzdCAob2ZmbGluZSkiIH0sCisJeyAibnZyYW1fdGVzdCAob25saW5lKSIgfSwKKwl7ICJpbnRlcnJ1cHRfdGVzdCAob25saW5lKSIgfSwKKwl7ICJsaW5rX3Rlc3QgKG9ubGluZSkiIH0sCisJeyAiaWRsZSBjaGVjayAob25saW5lKSIgfQorfTsKKworc3RhdGljIGludCBibngyeF90ZXN0X3JlZ2lzdGVycyhzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBpZHgsIGksIHJjID0gLUVOT0RFVjsKKwl1MzIgd3JfdmFsID0gMDsKKwlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgeworCQl1MzIgb2Zmc2V0MDsKKwkJdTMyIG9mZnNldDE7CisJCXUzMiBtYXNrOworCX0gcmVnX3RibFtdID0geworLyogMCAqLwkJeyBCUkIxX1JFR19QQVVTRV9MT1dfVEhSRVNIT0xEXzAsICAgICAgNCwgMHgwMDAwMDNmZiB9LAorCQl7IERPUlFfUkVHX0RCX0FERFIwLCAgICAgICAgICAgICAgICAgICA0LCAweGZmZmZmZmZmIH0sCisJCXsgSENfUkVHX0FHR19JTlRfMCwgICAgICAgICAgICAgICAgICAgIDQsIDB4MDAwMDAzZmYgfSwKKwkJeyBQQkZfUkVHX01BQ19JRjBfRU5BQkxFLCAgICAgICAgICAgICAgNCwgMHgwMDAwMDAwMSB9LAorCQl7IFBCRl9SRUdfUDBfSU5JVF9DUkQsICAgICAgICAgICAgICAgICA0LCAweDAwMDAwN2ZmIH0sCisJCXsgUFJTX1JFR19DSURfUE9SVF8wLCAgICAgICAgICAgICAgICAgIDQsIDB4MDBmZmZmZmYgfSwKKwkJeyBQWFAyX1JFR19QU1dSUV9DRFUwX0wyUCwgICAgICAgICAgICAgNCwgMHgwMDBmZmZmZiB9LAorCQl7IFBYUDJfUkVHX1JRX0NEVTBfRUZJUlNUX01FTV9BRERSLCAgICA4LCAweDAwMDNmZmZmIH0sCisJCXsgUFhQMl9SRUdfUFNXUlFfVE0wX0wyUCwgICAgICAgICAgICAgIDQsIDB4MDAwZmZmZmYgfSwKKwkJeyBQWFAyX1JFR19SUV9VU0RNMF9FRklSU1RfTUVNX0FERFIsICAgOCwgMHgwMDAzZmZmZiB9LAorLyogMTAgKi8JeyBQWFAyX1JFR19QU1dSUV9UU0RNMF9MMlAsICAgICAgICAgICAgNCwgMHgwMDBmZmZmZiB9LAorCQl7IFFNX1JFR19DT05OTlVNXzAsICAgICAgICAgICAgICAgICAgICA0LCAweDAwMGZmZmZmIH0sCisJCXsgVE1fUkVHX0xJTjBfTUFYX0FDVElWRV9DSUQsICAgICAgICAgIDQsIDB4MDAwM2ZmZmYgfSwKKwkJeyBTUkNfUkVHX0tFWVJTUzBfMCwgICAgICAgICAgICAgICAgICA0MCwgMHhmZmZmZmZmZiB9LAorCQl7IFNSQ19SRUdfS0VZUlNTMF83LCAgICAgICAgICAgICAgICAgIDQwLCAweGZmZmZmZmZmIH0sCisJCXsgWENNX1JFR19XVV9EQV9TRVRfVE1SX0NOVF9GTEdfQ01EMDAsIDQsIDB4MDAwMDAwMDEgfSwKKwkJeyBYQ01fUkVHX1dVX0RBX0NOVF9DTUQwMCwgICAgICAgICAgICAgNCwgMHgwMDAwMDAwMyB9LAorCQl7IFhDTV9SRUdfR0xCX0RFTF9BQ0tfTUFYX0NOVF8wLCAgICAgICA0LCAweDAwMDAwMGZmIH0sCisJCXsgTklHX1JFR19MTEgwX1RfQklULCAgICAgICAgICAgICAgICAgIDQsIDB4MDAwMDAwMDEgfSwKKwkJeyBOSUdfUkVHX0VNQUMwX0lOX0VOLCAgICAgICAgICAgICAgICAgNCwgMHgwMDAwMDAwMSB9LAorLyogMjAgKi8JeyBOSUdfUkVHX0JNQUMwX0lOX0VOLCAgICAgICAgICAgICAgICAgNCwgMHgwMDAwMDAwMSB9LAorCQl7IE5JR19SRUdfWENNMF9PVVRfRU4sICAgICAgICAgICAgICAgICA0LCAweDAwMDAwMDAxIH0sCisJCXsgTklHX1JFR19CUkIwX09VVF9FTiwgICAgICAgICAgICAgICAgIDQsIDB4MDAwMDAwMDEgfSwKKwkJeyBOSUdfUkVHX0xMSDBfWENNX01BU0ssICAgICAgICAgICAgICAgNCwgMHgwMDAwMDAwNyB9LAorCQl7IE5JR19SRUdfTExIMF9BQ1BJX1BBVF82X0xFTiwgICAgICAgIDY4LCAweDAwMDAwMGZmIH0sCisJCXsgTklHX1JFR19MTEgwX0FDUElfUEFUXzBfQ1JDLCAgICAgICAgNjgsIDB4ZmZmZmZmZmYgfSwKKwkJeyBOSUdfUkVHX0xMSDBfREVTVF9NQUNfMF8wLCAgICAgICAgIDE2MCwgMHhmZmZmZmZmZiB9LAorCQl7IE5JR19SRUdfTExIMF9ERVNUX0lQXzBfMSwgICAgICAgICAgMTYwLCAweGZmZmZmZmZmIH0sCisJCXsgTklHX1JFR19MTEgwX0lQVjRfSVBWNl8wLCAgICAgICAgICAxNjAsIDB4MDAwMDAwMDEgfSwKKwkJeyBOSUdfUkVHX0xMSDBfREVTVF9VRFBfMCwgICAgICAgICAgIDE2MCwgMHgwMDAwZmZmZiB9LAorLyogMzAgKi8JeyBOSUdfUkVHX0xMSDBfREVTVF9UQ1BfMCwgICAgICAgICAgIDE2MCwgMHgwMDAwZmZmZiB9LAorCQl7IE5JR19SRUdfTExIMF9WTEFOX0lEXzAsICAgICAgICAgICAgMTYwLCAweDAwMDAwZmZmIH0sCisJCXsgTklHX1JFR19YR1hTX1NFUkRFUzBfTU9ERV9TRUwsICAgICAgIDQsIDB4MDAwMDAwMDEgfSwKKwkJeyBOSUdfUkVHX0xFRF9DT05UUk9MX09WRVJSSURFX1RSQUZGSUNfUDAsIDQsIDB4MDAwMDAwMDEgfSwKKwkJeyBOSUdfUkVHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDAsICAgICAgNCwgMHgwN2ZmZmZmZiB9LAorCQl7IE5JR19SRUdfWEdYUzBfQ1RSTF9FWFRSRU1PVEVNRElPU1QsIDI0LCAweDAwMDAwMDAxIH0sCisJCXsgTklHX1JFR19TRVJERVMwX0NUUkxfUEhZX0FERFIsICAgICAgMTYsIDB4MDAwMDAwMWYgfSwKKworCQl7IDB4ZmZmZmZmZmYsIDAsIDB4MDAwMDAwMDAgfQorCX07CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYnAtPmRldikpCisJCXJldHVybiByYzsKKworCS8qIFJlcGVhdCB0aGUgdGVzdCB0d2ljZToKKwkgICBGaXJzdCBieSB3cml0aW5nIDB4MDAwMDAwMDAsIHNlY29uZCBieSB3cml0aW5nIDB4ZmZmZmZmZmYgKi8KKwlmb3IgKGlkeCA9IDA7IGlkeCA8IDI7IGlkeCsrKSB7CisKKwkJc3dpdGNoIChpZHgpIHsKKwkJY2FzZSAwOgorCQkJd3JfdmFsID0gMDsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQl3cl92YWwgPSAweGZmZmZmZmZmOworCQkJYnJlYWs7CisJCX0KKworCQlmb3IgKGkgPSAwOyByZWdfdGJsW2ldLm9mZnNldDAgIT0gMHhmZmZmZmZmZjsgaSsrKSB7CisJCQl1MzIgb2Zmc2V0LCBtYXNrLCBzYXZlX3ZhbCwgdmFsOworCisJCQlvZmZzZXQgPSByZWdfdGJsW2ldLm9mZnNldDAgKyBwb3J0KnJlZ190YmxbaV0ub2Zmc2V0MTsKKwkJCW1hc2sgPSByZWdfdGJsW2ldLm1hc2s7CisKKwkJCXNhdmVfdmFsID0gUkVHX1JEKGJwLCBvZmZzZXQpOworCisJCQlSRUdfV1IoYnAsIG9mZnNldCwgKHdyX3ZhbCAmIG1hc2spKTsKKwkJCXZhbCA9IFJFR19SRChicCwgb2Zmc2V0KTsKKworCQkJLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwgcmVnaXN0ZXIncyB2YWx1ZSAqLworCQkJUkVHX1dSKGJwLCBvZmZzZXQsIHNhdmVfdmFsKTsKKworCQkJLyogdmVyaWZ5IHZhbHVlIGlzIGFzIGV4cGVjdGVkICovCisJCQlpZiAoKHZhbCAmIG1hc2spICE9ICh3cl92YWwgJiBtYXNrKSkgeworCQkJCURQKE5FVElGX01TR19QUk9CRSwKKwkJCQkgICAib2Zmc2V0IDB4JXg6IHZhbCAweCV4ICE9IDB4JXggbWFzayAweCV4XG4iLAorCQkJCSAgIG9mZnNldCwgdmFsLCB3cl92YWwsIG1hc2spOworCQkJCWdvdG8gdGVzdF9yZWdfZXhpdDsKKwkJCX0KKwkJfQorCX0KKworCXJjID0gMDsKKwordGVzdF9yZWdfZXhpdDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgYm54MnhfdGVzdF9tZW1vcnkoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgaSwgaiwgcmMgPSAtRU5PREVWOworCXUzMiB2YWw7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJCXUzMiBvZmZzZXQ7CisJCWludCBzaXplOworCX0gbWVtX3RibFtdID0geworCQl7IENDTV9SRUdfWFhfREVTQ1JfVEFCTEUsICAgQ0NNX1JFR19YWF9ERVNDUl9UQUJMRV9TSVpFIH0sCisJCXsgQ0ZDX1JFR19BQ1RJVklUWV9DT1VOVEVSLCBDRkNfUkVHX0FDVElWSVRZX0NPVU5URVJfU0laRSB9LAorCQl7IENGQ19SRUdfTElOS19MSVNULCAgICAgICAgQ0ZDX1JFR19MSU5LX0xJU1RfU0laRSB9LAorCQl7IERNQUVfUkVHX0NNRF9NRU0sICAgICAgICAgRE1BRV9SRUdfQ01EX01FTV9TSVpFIH0sCisJCXsgVENNX1JFR19YWF9ERVNDUl9UQUJMRSwgICBUQ01fUkVHX1hYX0RFU0NSX1RBQkxFX1NJWkUgfSwKKwkJeyBVQ01fUkVHX1hYX0RFU0NSX1RBQkxFLCAgIFVDTV9SRUdfWFhfREVTQ1JfVEFCTEVfU0laRSB9LAorCQl7IFhDTV9SRUdfWFhfREVTQ1JfVEFCTEUsICAgWENNX1JFR19YWF9ERVNDUl9UQUJMRV9TSVpFIH0sCisKKwkJeyAweGZmZmZmZmZmLCAwIH0KKwl9OworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgeworCQljaGFyICpuYW1lOworCQl1MzIgb2Zmc2V0OworCQl1MzIgZTFfbWFzazsKKwkJdTMyIGUxaF9tYXNrOworCX0gcHJ0eV90YmxbXSA9IHsKKwkJeyAiQ0NNX1BSVFlfU1RTIiwgIENDTV9SRUdfQ0NNX1BSVFlfU1RTLCAgIDB4M2ZmYzAsIDAgfSwKKwkJeyAiQ0ZDX1BSVFlfU1RTIiwgIENGQ19SRUdfQ0ZDX1BSVFlfU1RTLCAgIDB4MiwgICAgIDB4MiB9LAorCQl7ICJETUFFX1BSVFlfU1RTIiwgRE1BRV9SRUdfRE1BRV9QUlRZX1NUUywgMCwgICAgICAgMCB9LAorCQl7ICJUQ01fUFJUWV9TVFMiLCAgVENNX1JFR19UQ01fUFJUWV9TVFMsICAgMHgzZmZjMCwgMCB9LAorCQl7ICJVQ01fUFJUWV9TVFMiLCAgVUNNX1JFR19VQ01fUFJUWV9TVFMsICAgMHgzZmZjMCwgMCB9LAorCQl7ICJYQ01fUFJUWV9TVFMiLCAgWENNX1JFR19YQ01fUFJUWV9TVFMsICAgMHgzZmZjMSwgMCB9LAorCisJCXsgTlVMTCwgMHhmZmZmZmZmZiwgMCwgMCB9CisJfTsKKworCWlmICghbmV0aWZfcnVubmluZyhicC0+ZGV2KSkKKwkJcmV0dXJuIHJjOworCisJLyogR28gdGhyb3VnaCBhbGwgdGhlIG1lbW9yaWVzICovCisJZm9yIChpID0gMDsgbWVtX3RibFtpXS5vZmZzZXQgIT0gMHhmZmZmZmZmZjsgaSsrKQorCQlmb3IgKGogPSAwOyBqIDwgbWVtX3RibFtpXS5zaXplOyBqKyspCisJCQlSRUdfUkQoYnAsIG1lbV90YmxbaV0ub2Zmc2V0ICsgaio0KTsKKworCS8qIENoZWNrIHRoZSBwYXJpdHkgc3RhdHVzICovCisJZm9yIChpID0gMDsgcHJ0eV90YmxbaV0ub2Zmc2V0ICE9IDB4ZmZmZmZmZmY7IGkrKykgeworCQl2YWwgPSBSRUdfUkQoYnAsIHBydHlfdGJsW2ldLm9mZnNldCk7CisJCWlmICgoQ0hJUF9JU19FMShicCkgJiYgKHZhbCAmIH4ocHJ0eV90YmxbaV0uZTFfbWFzaykpKSB8fAorCQkgICAgKENISVBfSVNfRTFIKGJwKSAmJiAodmFsICYgfihwcnR5X3RibFtpXS5lMWhfbWFzaykpKSkgeworCQkJRFAoTkVUSUZfTVNHX0hXLAorCQkJICAgIiVzIGlzIDB4JXhcbiIsIHBydHlfdGJsW2ldLm5hbWUsIHZhbCk7CisJCQlnb3RvIHRlc3RfbWVtX2V4aXQ7CisJCX0KKwl9CisKKwlyYyA9IDA7CisKK3Rlc3RfbWVtX2V4aXQ6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBibngyeF93YWl0X2Zvcl9saW5rKHN0cnVjdCBibngyeCAqYnAsIHU4IGxpbmtfdXApCit7CisJaW50IGNudCA9IDEwMDA7CisKKwlpZiAobGlua191cCkKKwkJd2hpbGUgKGJueDJ4X2xpbmtfdGVzdChicCkgJiYgY250LS0pCisJCQltc2xlZXAoMTApOworfQorCitzdGF0aWMgaW50IGJueDJ4X3J1bl9sb29wYmFjayhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgbG9vcGJhY2tfbW9kZSwgdTggbGlua191cCkKK3sKKwl1bnNpZ25lZCBpbnQgcGt0X3NpemUsIG51bV9wa3RzLCBpOworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgY2hhciAqcGFja2V0OworCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnBfcnggPSAmYnAtPmZwWzBdOworCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnBfdHggPSAmYnAtPmZwWzBdOworCXUxNiB0eF9zdGFydF9pZHgsIHR4X2lkeDsKKwl1MTYgcnhfc3RhcnRfaWR4LCByeF9pZHg7CisJdTE2IHBrdF9wcm9kLCBiZF9wcm9kOworCXN0cnVjdCBzd190eF9iZCAqdHhfYnVmOworCXN0cnVjdCBldGhfdHhfc3RhcnRfYmQgKnR4X3N0YXJ0X2JkOworCXN0cnVjdCBldGhfdHhfcGFyc2VfYmQgKnBiZCA9IE5VTEw7CisJZG1hX2FkZHJfdCBtYXBwaW5nOworCXVuaW9uIGV0aF9yeF9jcWUgKmNxZTsKKwl1OCBjcWVfZnBfZmxhZ3M7CisJc3RydWN0IHN3X3J4X2JkICpyeF9idWY7CisJdTE2IGxlbjsKKwlpbnQgcmMgPSAtRU5PREVWOworCisJLyogY2hlY2sgdGhlIGxvb3BiYWNrIG1vZGUgKi8KKwlzd2l0Y2ggKGxvb3BiYWNrX21vZGUpIHsKKwljYXNlIEJOWDJYX1BIWV9MT09QQkFDSzoKKwkJaWYgKGJwLT5saW5rX3BhcmFtcy5sb29wYmFja19tb2RlICE9IExPT1BCQUNLX1hHWFNfMTApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSBCTlgyWF9NQUNfTE9PUEJBQ0s6CisJCWJwLT5saW5rX3BhcmFtcy5sb29wYmFja19tb2RlID0gTE9PUEJBQ0tfQk1BQzsKKwkJYm54MnhfcGh5X2luaXQoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBwcmVwYXJlIHRoZSBsb29wYmFjayBwYWNrZXQgKi8KKwlwa3Rfc2l6ZSA9ICgoKGJwLT5kZXYtPm10dSA8IEVUSF9NQVhfUEFDS0VUX1NJWkUpID8KKwkJICAgICBicC0+ZGV2LT5tdHUgOiBFVEhfTUFYX1BBQ0tFVF9TSVpFKSArIEVUSF9ITEVOKTsKKwlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGJwLT5kZXYsIGJwLT5yeF9idWZfc2l6ZSk7CisJaWYgKCFza2IpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIHRlc3RfbG9vcGJhY2tfZXhpdDsKKwl9CisJcGFja2V0ID0gc2tiX3B1dChza2IsIHBrdF9zaXplKTsKKwltZW1jcHkocGFja2V0LCBicC0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbXNldChwYWNrZXQgKyBFVEhfQUxFTiwgMCwgRVRIX0FMRU4pOworCW1lbXNldChwYWNrZXQgKyAyKkVUSF9BTEVOLCAweDc3LCAoRVRIX0hMRU4gLSAyKkVUSF9BTEVOKSk7CisJZm9yIChpID0gRVRIX0hMRU47IGkgPCBwa3Rfc2l6ZTsgaSsrKQorCQlwYWNrZXRbaV0gPSAodW5zaWduZWQgY2hhcikgKGkgJiAweGZmKTsKKworCS8qIHNlbmQgdGhlIGxvb3BiYWNrIHBhY2tldCAqLworCW51bV9wa3RzID0gMDsKKwl0eF9zdGFydF9pZHggPSBsZTE2X3RvX2NwdSgqZnBfdHgtPnR4X2NvbnNfc2IpOworCXJ4X3N0YXJ0X2lkeCA9IGxlMTZfdG9fY3B1KCpmcF9yeC0+cnhfY29uc19zYik7CisKKwlwa3RfcHJvZCA9IGZwX3R4LT50eF9wa3RfcHJvZCsrOworCXR4X2J1ZiA9ICZmcF90eC0+dHhfYnVmX3JpbmdbVFhfQkQocGt0X3Byb2QpXTsKKwl0eF9idWYtPmZpcnN0X2JkID0gZnBfdHgtPnR4X2JkX3Byb2Q7CisJdHhfYnVmLT5za2IgPSBza2I7CisJdHhfYnVmLT5mbGFncyA9IDA7CisKKwliZF9wcm9kID0gVFhfQkQoZnBfdHgtPnR4X2JkX3Byb2QpOworCXR4X3N0YXJ0X2JkID0gJmZwX3R4LT50eF9kZXNjX3JpbmdbYmRfcHJvZF0uc3RhcnRfYmQ7CisJbWFwcGluZyA9IGRtYV9tYXBfc2luZ2xlKCZicC0+cGRldi0+ZGV2LCBza2ItPmRhdGEsCisJCQkJIHNrYl9oZWFkbGVuKHNrYiksIERNQV9UT19ERVZJQ0UpOworCXR4X3N0YXJ0X2JkLT5hZGRyX2hpID0gY3B1X3RvX2xlMzIoVTY0X0hJKG1hcHBpbmcpKTsKKwl0eF9zdGFydF9iZC0+YWRkcl9sbyA9IGNwdV90b19sZTMyKFU2NF9MTyhtYXBwaW5nKSk7CisJdHhfc3RhcnRfYmQtPm5iZCA9IGNwdV90b19sZTE2KDIpOyAvKiBzdGFydCArIHBiZCAqLworCXR4X3N0YXJ0X2JkLT5uYnl0ZXMgPSBjcHVfdG9fbGUxNihza2JfaGVhZGxlbihza2IpKTsKKwl0eF9zdGFydF9iZC0+dmxhbiA9IGNwdV90b19sZTE2KHBrdF9wcm9kKTsKKwl0eF9zdGFydF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgPSBFVEhfVFhfQkRfRkxBR1NfU1RBUlRfQkQ7CisJdHhfc3RhcnRfYmQtPmdlbmVyYWxfZGF0YSA9ICgoVU5JQ0FTVF9BRERSRVNTIDw8CisJCQkJRVRIX1RYX1NUQVJUX0JEX0VUSF9BRERSX1RZUEVfU0hJRlQpIHwgMSk7CisKKwkvKiB0dXJuIG9uIHBhcnNpbmcgYW5kIGdldCBhIEJEICovCisJYmRfcHJvZCA9IFRYX0JEKE5FWFRfVFhfSURYKGJkX3Byb2QpKTsKKwlwYmQgPSAmZnBfdHgtPnR4X2Rlc2NfcmluZ1tiZF9wcm9kXS5wYXJzZV9iZDsKKworCW1lbXNldChwYmQsIDAsIHNpemVvZihzdHJ1Y3QgZXRoX3R4X3BhcnNlX2JkKSk7CisKKwl3bWIoKTsKKworCWZwX3R4LT50eF9kYi5kYXRhLnByb2QgKz0gMjsKKwliYXJyaWVyKCk7CisJRE9PUkJFTEwoYnAsIGZwX3R4LT5pbmRleCwgZnBfdHgtPnR4X2RiLnJhdyk7CisKKwltbWlvd2IoKTsKKworCW51bV9wa3RzKys7CisJZnBfdHgtPnR4X2JkX3Byb2QgKz0gMjsgLyogc3RhcnQgKyBwYmQgKi8KKworCXVkZWxheSgxMDApOworCisJdHhfaWR4ID0gbGUxNl90b19jcHUoKmZwX3R4LT50eF9jb25zX3NiKTsKKwlpZiAodHhfaWR4ICE9IHR4X3N0YXJ0X2lkeCArIG51bV9wa3RzKQorCQlnb3RvIHRlc3RfbG9vcGJhY2tfZXhpdDsKKworCXJ4X2lkeCA9IGxlMTZfdG9fY3B1KCpmcF9yeC0+cnhfY29uc19zYik7CisJaWYgKHJ4X2lkeCAhPSByeF9zdGFydF9pZHggKyBudW1fcGt0cykKKwkJZ290byB0ZXN0X2xvb3BiYWNrX2V4aXQ7CisKKwljcWUgPSAmZnBfcngtPnJ4X2NvbXBfcmluZ1tSQ1FfQkQoZnBfcngtPnJ4X2NvbXBfY29ucyldOworCWNxZV9mcF9mbGFncyA9IGNxZS0+ZmFzdF9wYXRoX2NxZS50eXBlX2Vycm9yX2ZsYWdzOworCWlmIChDUUVfVFlQRShjcWVfZnBfZmxhZ3MpIHx8IChjcWVfZnBfZmxhZ3MgJiBFVEhfUlhfRVJST1JfRkFMR1MpKQorCQlnb3RvIHRlc3RfbG9vcGJhY2tfcnhfZXhpdDsKKworCWxlbiA9IGxlMTZfdG9fY3B1KGNxZS0+ZmFzdF9wYXRoX2NxZS5wa3RfbGVuKTsKKwlpZiAobGVuICE9IHBrdF9zaXplKQorCQlnb3RvIHRlc3RfbG9vcGJhY2tfcnhfZXhpdDsKKworCXJ4X2J1ZiA9ICZmcF9yeC0+cnhfYnVmX3JpbmdbUlhfQkQoZnBfcngtPnJ4X2JkX2NvbnMpXTsKKwlza2IgPSByeF9idWYtPnNrYjsKKwlza2JfcmVzZXJ2ZShza2IsIGNxZS0+ZmFzdF9wYXRoX2NxZS5wbGFjZW1lbnRfb2Zmc2V0KTsKKwlmb3IgKGkgPSBFVEhfSExFTjsgaSA8IHBrdF9zaXplOyBpKyspCisJCWlmICgqKHNrYi0+ZGF0YSArIGkpICE9ICh1bnNpZ25lZCBjaGFyKSAoaSAmIDB4ZmYpKQorCQkJZ290byB0ZXN0X2xvb3BiYWNrX3J4X2V4aXQ7CisKKwlyYyA9IDA7CisKK3Rlc3RfbG9vcGJhY2tfcnhfZXhpdDoKKworCWZwX3J4LT5yeF9iZF9jb25zID0gTkVYVF9SWF9JRFgoZnBfcngtPnJ4X2JkX2NvbnMpOworCWZwX3J4LT5yeF9iZF9wcm9kID0gTkVYVF9SWF9JRFgoZnBfcngtPnJ4X2JkX3Byb2QpOworCWZwX3J4LT5yeF9jb21wX2NvbnMgPSBORVhUX1JDUV9JRFgoZnBfcngtPnJ4X2NvbXBfY29ucyk7CisJZnBfcngtPnJ4X2NvbXBfcHJvZCA9IE5FWFRfUkNRX0lEWChmcF9yeC0+cnhfY29tcF9wcm9kKTsKKworCS8qIFVwZGF0ZSBwcm9kdWNlcnMgKi8KKwlibngyeF91cGRhdGVfcnhfcHJvZChicCwgZnBfcngsIGZwX3J4LT5yeF9iZF9wcm9kLCBmcF9yeC0+cnhfY29tcF9wcm9kLAorCQkJICAgICBmcF9yeC0+cnhfc2dlX3Byb2QpOworCit0ZXN0X2xvb3BiYWNrX2V4aXQ6CisJYnAtPmxpbmtfcGFyYW1zLmxvb3BiYWNrX21vZGUgPSBMT09QQkFDS19OT05FOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGJueDJ4X3Rlc3RfbG9vcGJhY2soc3RydWN0IGJueDJ4ICpicCwgdTggbGlua191cCkKK3sKKwlpbnQgcmMgPSAwLCByZXM7CisKKwlpZiAoQlBfTk9NQ1AoYnApKQorCQlyZXR1cm4gcmM7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYnAtPmRldikpCisJCXJldHVybiBCTlgyWF9MT09QQkFDS19GQUlMRUQ7CisKKwlibngyeF9uZXRpZl9zdG9wKGJwLCAxKTsKKwlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKKworCXJlcyA9IGJueDJ4X3J1bl9sb29wYmFjayhicCwgQk5YMlhfUEhZX0xPT1BCQUNLLCBsaW5rX3VwKTsKKwlpZiAocmVzKSB7CisJCURQKE5FVElGX01TR19QUk9CRSwgIiAgUEhZIGxvb3BiYWNrIGZhaWxlZCAgKHJlcyAlZClcbiIsIHJlcyk7CisJCXJjIHw9IEJOWDJYX1BIWV9MT09QQkFDS19GQUlMRUQ7CisJfQorCisJcmVzID0gYm54MnhfcnVuX2xvb3BiYWNrKGJwLCBCTlgyWF9NQUNfTE9PUEJBQ0ssIGxpbmtfdXApOworCWlmIChyZXMpIHsKKwkJRFAoTkVUSUZfTVNHX1BST0JFLCAiICBNQUMgbG9vcGJhY2sgZmFpbGVkICAocmVzICVkKVxuIiwgcmVzKTsKKwkJcmMgfD0gQk5YMlhfTUFDX0xPT1BCQUNLX0ZBSUxFRDsKKwl9CisKKwlibngyeF9yZWxlYXNlX3BoeV9sb2NrKGJwKTsKKwlibngyeF9uZXRpZl9zdGFydChicCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKyNkZWZpbmUgQ1JDMzJfUkVTSURVQUwJCQkweGRlYmIyMGUzCisKK3N0YXRpYyBpbnQgYm54MnhfdGVzdF9udnJhbShzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgeworCQlpbnQgb2Zmc2V0OworCQlpbnQgc2l6ZTsKKwl9IG52cmFtX3RibFtdID0geworCQl7ICAgICAwLCAgMHgxNCB9LCAvKiBib290c3RyYXAgKi8KKwkJeyAgMHgxNCwgIDB4ZWMgfSwgLyogZGlyICovCisJCXsgMHgxMDAsIDB4MzUwIH0sIC8qIG1hbnVmX2luZm8gKi8KKwkJeyAweDQ1MCwgIDB4ZjAgfSwgLyogZmVhdHVyZV9pbmZvICovCisJCXsgMHg2NDAsICAweDY0IH0sIC8qIHVwZ3JhZGVfa2V5X2luZm8gKi8KKwkJeyAweDZhNCwgIDB4NjQgfSwKKwkJeyAweDcwOCwgIDB4NzAgfSwgLyogbWFudWZfa2V5X2luZm8gKi8KKwkJeyAweDc3OCwgIDB4NzAgfSwKKwkJeyAgICAgMCwgICAgIDAgfQorCX07CisJX19iZTMyIGJ1ZlsweDM1MCAvIDRdOworCXU4ICpkYXRhID0gKHU4ICopYnVmOworCWludCBpLCByYzsKKwl1MzIgbWFnaWMsIGNyYzsKKworCWlmIChCUF9OT01DUChicCkpCisJCXJldHVybiAwOworCisJcmMgPSBibngyeF9udnJhbV9yZWFkKGJwLCAwLCBkYXRhLCA0KTsKKwlpZiAocmMpIHsKKwkJRFAoTkVUSUZfTVNHX1BST0JFLCAibWFnaWMgdmFsdWUgcmVhZCAocmMgJWQpXG4iLCByYyk7CisJCWdvdG8gdGVzdF9udnJhbV9leGl0OworCX0KKworCW1hZ2ljID0gYmUzMl90b19jcHUoYnVmWzBdKTsKKwlpZiAobWFnaWMgIT0gMHg2Njk5NTVhYSkgeworCQlEUChORVRJRl9NU0dfUFJPQkUsICJtYWdpYyB2YWx1ZSAoMHglMDh4KVxuIiwgbWFnaWMpOworCQlyYyA9IC1FTk9ERVY7CisJCWdvdG8gdGVzdF9udnJhbV9leGl0OworCX0KKworCWZvciAoaSA9IDA7IG52cmFtX3RibFtpXS5zaXplOyBpKyspIHsKKworCQlyYyA9IGJueDJ4X252cmFtX3JlYWQoYnAsIG52cmFtX3RibFtpXS5vZmZzZXQsIGRhdGEsCisJCQkJICAgICAgbnZyYW1fdGJsW2ldLnNpemUpOworCQlpZiAocmMpIHsKKwkJCURQKE5FVElGX01TR19QUk9CRSwKKwkJCSAgICJudnJhbV90YmxbJWRdIHJlYWQgZGF0YSAocmMgJWQpXG4iLCBpLCByYyk7CisJCQlnb3RvIHRlc3RfbnZyYW1fZXhpdDsKKwkJfQorCisJCWNyYyA9IGV0aGVyX2NyY19sZShudnJhbV90YmxbaV0uc2l6ZSwgZGF0YSk7CisJCWlmIChjcmMgIT0gQ1JDMzJfUkVTSURVQUwpIHsKKwkJCURQKE5FVElGX01TR19QUk9CRSwKKwkJCSAgICJudnJhbV90YmxbJWRdIGNyYyB2YWx1ZSAoMHglMDh4KVxuIiwgaSwgY3JjKTsKKwkJCXJjID0gLUVOT0RFVjsKKwkJCWdvdG8gdGVzdF9udnJhbV9leGl0OworCQl9CisJfQorCit0ZXN0X252cmFtX2V4aXQ6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGJueDJ4X3Rlc3RfaW50cihzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCBtYWNfY29uZmlndXJhdGlvbl9jbWQgKmNvbmZpZyA9IGJueDJ4X3NwKGJwLCBtYWNfY29uZmlnKTsKKwlpbnQgaSwgcmM7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYnAtPmRldikpCisJCXJldHVybiAtRU5PREVWOworCisJY29uZmlnLT5oZHIubGVuZ3RoID0gMDsKKwlpZiAoQ0hJUF9JU19FMShicCkpCisJCS8qIHVzZSBsYXN0IHVuaWNhc3QgZW50cmllcyAqLworCQljb25maWctPmhkci5vZmZzZXQgPSAoQlBfUE9SVChicCkgPyA2MyA6IDMxKTsKKwllbHNlCisJCWNvbmZpZy0+aGRyLm9mZnNldCA9IEJQX0ZVTkMoYnApOworCWNvbmZpZy0+aGRyLmNsaWVudF9pZCA9IGJwLT5mcC0+Y2xfaWQ7CisJY29uZmlnLT5oZHIucmVzZXJ2ZWQxID0gMDsKKworCWJwLT5zZXRfbWFjX3BlbmRpbmcrKzsKKwlzbXBfd21iKCk7CisJcmMgPSBibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9TRVRfTUFDLCAwLAorCQkJICAgVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19jb25maWcpKSwKKwkJCSAgIFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBtYWNfY29uZmlnKSksIDApOworCWlmIChyYyA9PSAwKSB7CisJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCQlpZiAoIWJwLT5zZXRfbWFjX3BlbmRpbmcpCisJCQkJYnJlYWs7CisJCQlzbXBfcm1iKCk7CisJCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxMCk7CisJCX0KKwkJaWYgKGkgPT0gMTApCisJCQlyYyA9IC1FTk9ERVY7CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBibngyeF9zZWxmX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZXRodG9vbF90ZXN0ICpldGVzdCwgdTY0ICpidWYpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoYnAtPnJlY292ZXJ5X3N0YXRlICE9IEJOWDJYX1JFQ09WRVJZX0RPTkUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJIYW5kbGluZyBwYXJpdHkgZXJyb3IgcmVjb3ZlcnkuIFRyeSBhZ2FpbiBsYXRlclxuIik7CisJCWV0ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CisJCXJldHVybjsKKwl9CisKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YodTY0KSAqIEJOWDJYX05VTV9URVNUUyk7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuOworCisJLyogb2ZmbGluZSB0ZXN0cyBhcmUgbm90IHN1cHBvcnRlZCBpbiBNRiBtb2RlICovCisJaWYgKElTX0UxSE1GKGJwKSkKKwkJZXRlc3QtPmZsYWdzICY9IH5FVEhfVEVTVF9GTF9PRkZMSU5FOworCisJaWYgKGV0ZXN0LT5mbGFncyAmIEVUSF9URVNUX0ZMX09GRkxJTkUpIHsKKwkJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwkJdTMyIHZhbDsKKwkJdTggbGlua191cDsKKworCQkvKiBzYXZlIGN1cnJlbnQgdmFsdWUgb2YgaW5wdXQgZW5hYmxlIGZvciBUWCBwb3J0IElGICovCisJCXZhbCA9IFJFR19SRChicCwgTklHX1JFR19FR1JFU1NfVU1QMF9JTl9FTiArIHBvcnQqNCk7CisJCS8qIGRpc2FibGUgaW5wdXQgZm9yIFRYIHBvcnQgSUYgKi8KKwkJUkVHX1dSKGJwLCBOSUdfUkVHX0VHUkVTU19VTVAwX0lOX0VOICsgcG9ydCo0LCAwKTsKKworCQlsaW5rX3VwID0gKGJueDJ4X2xpbmtfdGVzdChicCkgPT0gMCk7CisJCWJueDJ4X25pY191bmxvYWQoYnAsIFVOTE9BRF9OT1JNQUwpOworCQlibngyeF9uaWNfbG9hZChicCwgTE9BRF9ESUFHKTsKKwkJLyogd2FpdCB1bnRpbCBsaW5rIHN0YXRlIGlzIHJlc3RvcmVkICovCisJCWJueDJ4X3dhaXRfZm9yX2xpbmsoYnAsIGxpbmtfdXApOworCisJCWlmIChibngyeF90ZXN0X3JlZ2lzdGVycyhicCkgIT0gMCkgeworCQkJYnVmWzBdID0gMTsKKwkJCWV0ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CisJCX0KKwkJaWYgKGJueDJ4X3Rlc3RfbWVtb3J5KGJwKSAhPSAwKSB7CisJCQlidWZbMV0gPSAxOworCQkJZXRlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKKwkJfQorCQlidWZbMl0gPSBibngyeF90ZXN0X2xvb3BiYWNrKGJwLCBsaW5rX3VwKTsKKwkJaWYgKGJ1ZlsyXSAhPSAwKQorCQkJZXRlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKKworCQlibngyeF9uaWNfdW5sb2FkKGJwLCBVTkxPQURfTk9STUFMKTsKKworCQkvKiByZXN0b3JlIGlucHV0IGZvciBUWCBwb3J0IElGICovCisJCVJFR19XUihicCwgTklHX1JFR19FR1JFU1NfVU1QMF9JTl9FTiArIHBvcnQqNCwgdmFsKTsKKworCQlibngyeF9uaWNfbG9hZChicCwgTE9BRF9OT1JNQUwpOworCQkvKiB3YWl0IHVudGlsIGxpbmsgc3RhdGUgaXMgcmVzdG9yZWQgKi8KKwkJYm54Mnhfd2FpdF9mb3JfbGluayhicCwgbGlua191cCk7CisJfQorCWlmIChibngyeF90ZXN0X252cmFtKGJwKSAhPSAwKSB7CisJCWJ1ZlszXSA9IDE7CisJCWV0ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CisJfQorCWlmIChibngyeF90ZXN0X2ludHIoYnApICE9IDApIHsKKwkJYnVmWzRdID0gMTsKKwkJZXRlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKKwl9CisJaWYgKGJwLT5wb3J0LnBtZikKKwkJaWYgKGJueDJ4X2xpbmtfdGVzdChicCkgIT0gMCkgeworCQkJYnVmWzVdID0gMTsKKwkJCWV0ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CisJCX0KKworI2lmZGVmIEJOWDJYX0VYVFJBX0RFQlVHCisJYm54MnhfcGFuaWNfZHVtcChicCk7CisjZW5kaWYKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJbG9uZyBvZmZzZXQ7CisJaW50IHNpemU7CisJdTggc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07Cit9IGJueDJ4X3Ffc3RhdHNfYXJyW0JOWDJYX05VTV9RX1NUQVRTXSA9IHsKKy8qIDEgKi8JeyBRX1NUQVRTX09GRlNFVDMyKHRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpKSwgOCwgIlslZF06IHJ4X2J5dGVzIiB9LAorCXsgUV9TVEFUU19PRkZTRVQzMihlcnJvcl9ieXRlc19yZWNlaXZlZF9oaSksCisJCQkJCQk4LCAiWyVkXTogcnhfZXJyb3JfYnl0ZXMiIH0sCisJeyBRX1NUQVRTX09GRlNFVDMyKHRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSksCisJCQkJCQk4LCAiWyVkXTogcnhfdWNhc3RfcGFja2V0cyIgfSwKKwl7IFFfU1RBVFNfT0ZGU0VUMzIodG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAorCQkJCQkJOCwgIlslZF06IHJ4X21jYXN0X3BhY2tldHMiIH0sCisJeyBRX1NUQVRTX09GRlNFVDMyKHRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKSwKKwkJCQkJCTgsICJbJWRdOiByeF9iY2FzdF9wYWNrZXRzIiB9LAorCXsgUV9TVEFUU19PRkZTRVQzMihub19idWZmX2Rpc2NhcmRfaGkpLAk4LCAiWyVkXTogcnhfZGlzY2FyZHMiIH0sCisJeyBRX1NUQVRTX09GRlNFVDMyKHJ4X2Vycl9kaXNjYXJkX3BrdCksCisJCQkJCSA0LCAiWyVkXTogcnhfcGh5X2lwX2Vycl9kaXNjYXJkcyJ9LAorCXsgUV9TVEFUU19PRkZTRVQzMihyeF9za2JfYWxsb2NfZmFpbGVkKSwKKwkJCQkJIDQsICJbJWRdOiByeF9za2JfYWxsb2NfZGlzY2FyZCIgfSwKKwl7IFFfU1RBVFNfT0ZGU0VUMzIoaHdfY3N1bV9lcnIpLCA0LCAiWyVkXTogcnhfY3N1bV9vZmZsb2FkX2Vycm9ycyIgfSwKKworLyogMTAgKi97IFFfU1RBVFNfT0ZGU0VUMzIodG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfaGkpLAk4LCAiWyVkXTogdHhfYnl0ZXMiIH0sCisJeyBRX1NUQVRTX09GRlNFVDMyKHRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSksCisJCQkJCQk4LCAiWyVkXTogdHhfdWNhc3RfcGFja2V0cyIgfSwKKwl7IFFfU1RBVFNfT0ZGU0VUMzIodG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGkpLAorCQkJCQkJOCwgIlslZF06IHR4X21jYXN0X3BhY2tldHMiIH0sCisJeyBRX1NUQVRTX09GRlNFVDMyKHRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKSwKKwkJCQkJCTgsICJbJWRdOiB0eF9iY2FzdF9wYWNrZXRzIiB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwlsb25nIG9mZnNldDsKKwlpbnQgc2l6ZTsKKwl1MzIgZmxhZ3M7CisjZGVmaW5lIFNUQVRTX0ZMQUdTX1BPUlQJCTEKKyNkZWZpbmUgU1RBVFNfRkxBR1NfRlVOQwkJMgorI2RlZmluZSBTVEFUU19GTEFHU19CT1RICQkoU1RBVFNfRkxBR1NfRlVOQyB8IFNUQVRTX0ZMQUdTX1BPUlQpCisJdTggc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07Cit9IGJueDJ4X3N0YXRzX2FycltCTlgyWF9OVU1fU1RBVFNdID0geworLyogMSAqLwl7IFNUQVRTX09GRlNFVDMyKHRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19CT1RILCAicnhfYnl0ZXMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihlcnJvcl9ieXRlc19yZWNlaXZlZF9oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfQk9USCwgInJ4X2Vycm9yX2J5dGVzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19CT1RILCAicnhfdWNhc3RfcGFja2V0cyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19CT1RILCAicnhfbWNhc3RfcGFja2V0cyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19CT1RILCAicnhfYmNhc3RfcGFja2V0cyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZG90M3N0YXRzZmNzZXJyb3JzX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfY3JjX2Vycm9ycyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZG90M3N0YXRzYWxpZ25tZW50ZXJyb3JzX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfYWxpZ25fZXJyb3JzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9ldGhlcnN0YXRzdW5kZXJzaXplcGt0c19oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X3VuZGVyc2l6ZV9wYWNrZXRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIoZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9vdmVyc2l6ZV9wYWNrZXRzIiB9LAorLyogMTAgKi97IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZXRoZXJzdGF0c2ZyYWdtZW50c19oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2ZyYWdtZW50cyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZXRoZXJzdGF0c2phYmJlcnNfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9qYWJiZXJzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIobm9fYnVmZl9kaXNjYXJkX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19CT1RILCAicnhfZGlzY2FyZHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihtYWNfZmlsdGVyX2Rpc2NhcmQpLAorCQkJCTQsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9maWx0ZXJlZF9wYWNrZXRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIoeHhvdmVyZmxvd19kaXNjYXJkKSwKKwkJCQk0LCBTVEFUU19GTEFHU19QT1JULCAicnhfZndfZGlzY2FyZHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihicmJfZHJvcF9oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2JyYl9kaXNjYXJkIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIoYnJiX3RydW5jYXRlX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfYnJiX3RydW5jYXRlIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIocGF1c2VfZnJhbWVzX3JlY2VpdmVkX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfcGF1c2VfZnJhbWVzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9tYWNjb250cm9sZnJhbWVzcmVjZWl2ZWRfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9tYWNfY3RybF9mcmFtZXMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihuaWdfdGltZXJfbWF4KSwKKwkJCTQsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9jb25zdGFudF9wYXVzZV9ldmVudHMiIH0sCisvKiAyMCAqL3sgU1RBVFNfT0ZGU0VUMzIocnhfZXJyX2Rpc2NhcmRfcGt0KSwKKwkJCQk0LCBTVEFUU19GTEFHU19CT1RILCAicnhfcGh5X2lwX2Vycl9kaXNjYXJkcyJ9LAorCXsgU1RBVFNfT0ZGU0VUMzIocnhfc2tiX2FsbG9jX2ZhaWxlZCksCisJCQkJNCwgU1RBVFNfRkxBR1NfQk9USCwgInJ4X3NrYl9hbGxvY19kaXNjYXJkIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIoaHdfY3N1bV9lcnIpLAorCQkJCTQsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9jc3VtX29mZmxvYWRfZXJyb3JzIiB9LAorCisJeyBTVEFUU19PRkZTRVQzMih0b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfQk9USCwgInR4X2J5dGVzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9pZmhjb3V0YmFkb2N0ZXRzX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfZXJyb3JfYnl0ZXMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih0b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJ0eF91Y2FzdF9wYWNrZXRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJ0eF9tY2FzdF9wYWNrZXRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJ0eF9iY2FzdF9wYWNrZXRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9kb3Qzc3RhdHNpbnRlcm5hbG1hY3RyYW5zbWl0ZXJyb3JzX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfbWFjX2Vycm9ycyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZG90M3N0YXRzY2FycmllcnNlbnNlZXJyb3JzX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfY2Fycmllcl9lcnJvcnMiIH0sCisvKiAzMCAqL3sgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9kb3Qzc3RhdHNzaW5nbGVjb2xsaXNpb25mcmFtZXNfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9zaW5nbGVfY29sbGlzaW9ucyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZG90M3N0YXRzbXVsdGlwbGVjb2xsaXNpb25mcmFtZXNfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9tdWx0aV9jb2xsaXNpb25zIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9kb3Qzc3RhdHNkZWZlcnJlZHRyYW5zbWlzc2lvbnNfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9kZWZlcnJlZCIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZG90M3N0YXRzZXhjZXNzaXZlY29sbGlzaW9uc19oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X2V4Y2Vzc19jb2xsaXNpb25zIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9kb3Qzc3RhdHNsYXRlY29sbGlzaW9uc19oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X2xhdGVfY29sbGlzaW9ucyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZXRoZXJzdGF0c2NvbGxpc2lvbnNfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF90b3RhbF9jb2xsaXNpb25zIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9ldGhlcnN0YXRzcGt0czY0b2N0ZXRzX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfNjRfYnl0ZV9wYWNrZXRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9ldGhlcnN0YXRzcGt0czY1b2N0ZXRzdG8xMjdvY3RldHNfaGkpLAorCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4XzY1X3RvXzEyN19ieXRlX3BhY2tldHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2V0aGVyc3RhdHNwa3RzMTI4b2N0ZXRzdG8yNTVvY3RldHNfaGkpLAorCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4XzEyOF90b18yNTVfYnl0ZV9wYWNrZXRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9ldGhlcnN0YXRzcGt0czI1Nm9jdGV0c3RvNTExb2N0ZXRzX2hpKSwKKwkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF8yNTZfdG9fNTExX2J5dGVfcGFja2V0cyIgfSwKKy8qIDQwICoveyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNTEyb2N0ZXRzdG8xMDIzb2N0ZXRzX2hpKSwKKwkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF81MTJfdG9fMTAyM19ieXRlX3BhY2tldHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihldGhlcnN0YXRzcGt0czEwMjRvY3RldHN0bzE1MjJvY3RldHNfaGkpLAorCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4XzEwMjRfdG9fMTUyMl9ieXRlX3BhY2tldHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihldGhlcnN0YXRzcGt0c292ZXIxNTIyb2N0ZXRzX2hpKSwKKwkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF8xNTIzX3RvXzkwMjJfYnl0ZV9wYWNrZXRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIocGF1c2VfZnJhbWVzX3NlbnRfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9wYXVzZV9mcmFtZXMiIH0KK307CisKKyNkZWZpbmUgSVNfUE9SVF9TVEFUKGkpIFwKKwkoKGJueDJ4X3N0YXRzX2FycltpXS5mbGFncyAmIFNUQVRTX0ZMQUdTX0JPVEgpID09IFNUQVRTX0ZMQUdTX1BPUlQpCisjZGVmaW5lIElTX0ZVTkNfU1RBVChpKQkJKGJueDJ4X3N0YXRzX2FycltpXS5mbGFncyAmIFNUQVRTX0ZMQUdTX0ZVTkMpCisjZGVmaW5lIElTX0UxSE1GX01PREVfU1RBVChicCkgXAorCQkJKElTX0UxSE1GKGJwKSAmJiAhKGJwLT5tc2dfZW5hYmxlICYgQk5YMlhfTVNHX1NUQVRTKSkKKworc3RhdGljIGludCBibngyeF9nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3RyaW5nc2V0KQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBpLCBudW1fc3RhdHM7CisKKwlzd2l0Y2ggKHN0cmluZ3NldCkgeworCWNhc2UgRVRIX1NTX1NUQVRTOgorCQlpZiAoaXNfbXVsdGkoYnApKSB7CisJCQludW1fc3RhdHMgPSBCTlgyWF9OVU1fUV9TVEFUUyAqIGJwLT5udW1fcXVldWVzOworCQkJaWYgKCFJU19FMUhNRl9NT0RFX1NUQVQoYnApKQorCQkJCW51bV9zdGF0cyArPSBCTlgyWF9OVU1fU1RBVFM7CisJCX0gZWxzZSB7CisJCQlpZiAoSVNfRTFITUZfTU9ERV9TVEFUKGJwKSkgeworCQkJCW51bV9zdGF0cyA9IDA7CisJCQkJZm9yIChpID0gMDsgaSA8IEJOWDJYX05VTV9TVEFUUzsgaSsrKQorCQkJCQlpZiAoSVNfRlVOQ19TVEFUKGkpKQorCQkJCQkJbnVtX3N0YXRzKys7CisJCQl9IGVsc2UKKwkJCQludW1fc3RhdHMgPSBCTlgyWF9OVU1fU1RBVFM7CisJCX0KKwkJcmV0dXJuIG51bV9zdGF0czsKKworCWNhc2UgRVRIX1NTX1RFU1Q6CisJCXJldHVybiBCTlgyWF9OVU1fVEVTVFM7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzdHJpbmdzZXQsIHU4ICpidWYpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGksIGosIGs7CisKKwlzd2l0Y2ggKHN0cmluZ3NldCkgeworCWNhc2UgRVRIX1NTX1NUQVRTOgorCQlpZiAoaXNfbXVsdGkoYnApKSB7CisJCQlrID0gMDsKKwkJCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCQkJZm9yIChqID0gMDsgaiA8IEJOWDJYX05VTV9RX1NUQVRTOyBqKyspCisJCQkJCXNwcmludGYoYnVmICsgKGsgKyBqKSpFVEhfR1NUUklOR19MRU4sCisJCQkJCQlibngyeF9xX3N0YXRzX2FycltqXS5zdHJpbmcsIGkpOworCQkJCWsgKz0gQk5YMlhfTlVNX1FfU1RBVFM7CisJCQl9CisJCQlpZiAoSVNfRTFITUZfTU9ERV9TVEFUKGJwKSkKKwkJCQlicmVhazsKKwkJCWZvciAoaiA9IDA7IGogPCBCTlgyWF9OVU1fU1RBVFM7IGorKykKKwkJCQlzdHJjcHkoYnVmICsgKGsgKyBqKSpFVEhfR1NUUklOR19MRU4sCisJCQkJICAgICAgIGJueDJ4X3N0YXRzX2FycltqXS5zdHJpbmcpOworCQl9IGVsc2UgeworCQkJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBCTlgyWF9OVU1fU1RBVFM7IGkrKykgeworCQkJCWlmIChJU19FMUhNRl9NT0RFX1NUQVQoYnApICYmIElTX1BPUlRfU1RBVChpKSkKKwkJCQkJY29udGludWU7CisJCQkJc3RyY3B5KGJ1ZiArIGoqRVRIX0dTVFJJTkdfTEVOLAorCQkJCSAgICAgICBibngyeF9zdGF0c19hcnJbaV0uc3RyaW5nKTsKKwkJCQlqKys7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEVUSF9TU19URVNUOgorCQltZW1jcHkoYnVmLCBibngyeF90ZXN0c19zdHJfYXJyLCBzaXplb2YoYm54MnhfdGVzdHNfc3RyX2FycikpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBldGh0b29sX3N0YXRzICpzdGF0cywgdTY0ICpidWYpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJdTMyICpod19zdGF0cywgKm9mZnNldDsKKwlpbnQgaSwgaiwgazsKKworCWlmIChpc19tdWx0aShicCkpIHsKKwkJayA9IDA7CisJCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCQlod19zdGF0cyA9ICh1MzIgKikmYnAtPmZwW2ldLmV0aF9xX3N0YXRzOworCQkJZm9yIChqID0gMDsgaiA8IEJOWDJYX05VTV9RX1NUQVRTOyBqKyspIHsKKwkJCQlpZiAoYm54MnhfcV9zdGF0c19hcnJbal0uc2l6ZSA9PSAwKSB7CisJCQkJCS8qIHNraXAgdGhpcyBjb3VudGVyICovCisJCQkJCWJ1ZltrICsgal0gPSAwOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJb2Zmc2V0ID0gKGh3X3N0YXRzICsKKwkJCQkJICBibngyeF9xX3N0YXRzX2FycltqXS5vZmZzZXQpOworCQkJCWlmIChibngyeF9xX3N0YXRzX2FycltqXS5zaXplID09IDQpIHsKKwkJCQkJLyogNC1ieXRlIGNvdW50ZXIgKi8KKwkJCQkJYnVmW2sgKyBqXSA9ICh1NjQpICpvZmZzZXQ7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQkvKiA4LWJ5dGUgY291bnRlciAqLworCQkJCWJ1ZltrICsgal0gPSBISUxPX1U2NCgqb2Zmc2V0LCAqKG9mZnNldCArIDEpKTsKKwkJCX0KKwkJCWsgKz0gQk5YMlhfTlVNX1FfU1RBVFM7CisJCX0KKwkJaWYgKElTX0UxSE1GX01PREVfU1RBVChicCkpCisJCQlyZXR1cm47CisJCWh3X3N0YXRzID0gKHUzMiAqKSZicC0+ZXRoX3N0YXRzOworCQlmb3IgKGogPSAwOyBqIDwgQk5YMlhfTlVNX1NUQVRTOyBqKyspIHsKKwkJCWlmIChibngyeF9zdGF0c19hcnJbal0uc2l6ZSA9PSAwKSB7CisJCQkJLyogc2tpcCB0aGlzIGNvdW50ZXIgKi8KKwkJCQlidWZbayArIGpdID0gMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCW9mZnNldCA9IChod19zdGF0cyArIGJueDJ4X3N0YXRzX2FycltqXS5vZmZzZXQpOworCQkJaWYgKGJueDJ4X3N0YXRzX2FycltqXS5zaXplID09IDQpIHsKKwkJCQkvKiA0LWJ5dGUgY291bnRlciAqLworCQkJCWJ1ZltrICsgal0gPSAodTY0KSAqb2Zmc2V0OworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJLyogOC1ieXRlIGNvdW50ZXIgKi8KKwkJCWJ1ZltrICsgal0gPSBISUxPX1U2NCgqb2Zmc2V0LCAqKG9mZnNldCArIDEpKTsKKwkJfQorCX0gZWxzZSB7CisJCWh3X3N0YXRzID0gKHUzMiAqKSZicC0+ZXRoX3N0YXRzOworCQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IEJOWDJYX05VTV9TVEFUUzsgaSsrKSB7CisJCQlpZiAoSVNfRTFITUZfTU9ERV9TVEFUKGJwKSAmJiBJU19QT1JUX1NUQVQoaSkpCisJCQkJY29udGludWU7CisJCQlpZiAoYm54Mnhfc3RhdHNfYXJyW2ldLnNpemUgPT0gMCkgeworCQkJCS8qIHNraXAgdGhpcyBjb3VudGVyICovCisJCQkJYnVmW2pdID0gMDsKKwkJCQlqKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlvZmZzZXQgPSAoaHdfc3RhdHMgKyBibngyeF9zdGF0c19hcnJbaV0ub2Zmc2V0KTsKKwkJCWlmIChibngyeF9zdGF0c19hcnJbaV0uc2l6ZSA9PSA0KSB7CisJCQkJLyogNC1ieXRlIGNvdW50ZXIgKi8KKwkJCQlidWZbal0gPSAodTY0KSAqb2Zmc2V0OworCQkJCWorKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIDgtYnl0ZSBjb3VudGVyICovCisJCQlidWZbal0gPSBISUxPX1U2NCgqb2Zmc2V0LCAqKG9mZnNldCArIDEpKTsKKwkJCWorKzsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBibngyeF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBpOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAwOworCisJaWYgKCFicC0+cG9ydC5wbWYpCisJCXJldHVybiAwOworCisJaWYgKGRhdGEgPT0gMCkKKwkJZGF0YSA9IDI7CisKKwlmb3IgKGkgPSAwOyBpIDwgKGRhdGEgKiAyKTsgaSsrKSB7CisJCWlmICgoaSAlIDIpID09IDApCisJCQlibngyeF9zZXRfbGVkKCZicC0+bGlua19wYXJhbXMsIExFRF9NT0RFX09QRVIsCisJCQkJICAgICAgU1BFRURfMTAwMCk7CisJCWVsc2UKKwkJCWJueDJ4X3NldF9sZWQoJmJwLT5saW5rX3BhcmFtcywgTEVEX01PREVfT0ZGLCAwKTsKKworCQltc2xlZXBfaW50ZXJydXB0aWJsZSg1MDApOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQlicmVhazsKKwl9CisKKwlpZiAoYnAtPmxpbmtfdmFycy5saW5rX3VwKQorCQlibngyeF9zZXRfbGVkKCZicC0+bGlua19wYXJhbXMsIExFRF9NT0RFX09QRVIsCisJCQkgICAgICBicC0+bGlua192YXJzLmxpbmVfc3BlZWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYm54MnhfZXRodG9vbF9vcHMgPSB7CisJLmdldF9zZXR0aW5ncwkJPSBibngyeF9nZXRfc2V0dGluZ3MsCisJLnNldF9zZXR0aW5ncwkJPSBibngyeF9zZXRfc2V0dGluZ3MsCisJLmdldF9kcnZpbmZvCQk9IGJueDJ4X2dldF9kcnZpbmZvLAorCS5nZXRfcmVnc19sZW4JCT0gYm54MnhfZ2V0X3JlZ3NfbGVuLAorCS5nZXRfcmVncwkJPSBibngyeF9nZXRfcmVncywKKwkuZ2V0X3dvbAkJPSBibngyeF9nZXRfd29sLAorCS5zZXRfd29sCQk9IGJueDJ4X3NldF93b2wsCisJLmdldF9tc2dsZXZlbAkJPSBibngyeF9nZXRfbXNnbGV2ZWwsCisJLnNldF9tc2dsZXZlbAkJPSBibngyeF9zZXRfbXNnbGV2ZWwsCisJLm53YXlfcmVzZXQJCT0gYm54MnhfbndheV9yZXNldCwKKwkuZ2V0X2xpbmsJCT0gYm54MnhfZ2V0X2xpbmssCisJLmdldF9lZXByb21fbGVuCQk9IGJueDJ4X2dldF9lZXByb21fbGVuLAorCS5nZXRfZWVwcm9tCQk9IGJueDJ4X2dldF9lZXByb20sCisJLnNldF9lZXByb20JCT0gYm54Mnhfc2V0X2VlcHJvbSwKKwkuZ2V0X2NvYWxlc2NlCQk9IGJueDJ4X2dldF9jb2FsZXNjZSwKKwkuc2V0X2NvYWxlc2NlCQk9IGJueDJ4X3NldF9jb2FsZXNjZSwKKwkuZ2V0X3JpbmdwYXJhbQkJPSBibngyeF9nZXRfcmluZ3BhcmFtLAorCS5zZXRfcmluZ3BhcmFtCQk9IGJueDJ4X3NldF9yaW5ncGFyYW0sCisJLmdldF9wYXVzZXBhcmFtCQk9IGJueDJ4X2dldF9wYXVzZXBhcmFtLAorCS5zZXRfcGF1c2VwYXJhbQkJPSBibngyeF9zZXRfcGF1c2VwYXJhbSwKKwkuZ2V0X3J4X2NzdW0JCT0gYm54MnhfZ2V0X3J4X2NzdW0sCisJLnNldF9yeF9jc3VtCQk9IGJueDJ4X3NldF9yeF9jc3VtLAorCS5nZXRfdHhfY3N1bQkJPSBldGh0b29sX29wX2dldF90eF9jc3VtLAorCS5zZXRfdHhfY3N1bQkJPSBldGh0b29sX29wX3NldF90eF9od19jc3VtLAorCS5zZXRfZmxhZ3MJCT0gYm54Mnhfc2V0X2ZsYWdzLAorCS5nZXRfZmxhZ3MJCT0gZXRodG9vbF9vcF9nZXRfZmxhZ3MsCisJLmdldF9zZwkJCT0gZXRodG9vbF9vcF9nZXRfc2csCisJLnNldF9zZwkJCT0gZXRodG9vbF9vcF9zZXRfc2csCisJLmdldF90c28JCT0gZXRodG9vbF9vcF9nZXRfdHNvLAorCS5zZXRfdHNvCQk9IGJueDJ4X3NldF90c28sCisJLnNlbGZfdGVzdAkJPSBibngyeF9zZWxmX3Rlc3QsCisJLmdldF9zc2V0X2NvdW50CQk9IGJueDJ4X2dldF9zc2V0X2NvdW50LAorCS5nZXRfc3RyaW5ncwkJPSBibngyeF9nZXRfc3RyaW5ncywKKwkucGh5c19pZAkJPSBibngyeF9waHlzX2lkLAorCS5nZXRfZXRodG9vbF9zdGF0cwk9IGJueDJ4X2dldF9ldGh0b29sX3N0YXRzLAorfTsKKwordm9pZCBibngyeF9zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlTRVRfRVRIVE9PTF9PUFMobmV0ZGV2LCAmYm54MnhfZXRodG9vbF9vcHMpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfZndfZGVmcy5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZndfZGVmcy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9ibngyeF9md19kZWZzLmgKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2Z3X2RlZnMuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfZndfZmlsZV9oZHIuaCBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2Z3X2ZpbGVfaGRyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2JueDJ4X2Z3X2ZpbGVfaGRyLmgKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2Z3X2ZpbGVfaGRyLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2hzaS5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaHNpLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2JueDJ4X2hzaS5oCnJlbmFtZSB0byBkcml2ZXJzL25ldC9ibngyeC9ibngyeF9oc2kuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfaW5pdC5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaW5pdC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9ibngyeF9pbml0LmgKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2luaXQuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfaW5pdF9vcHMuaCBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2luaXRfb3BzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2JueDJ4X2luaXRfb3BzLmgKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2luaXRfb3BzLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2xpbmsuYyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2xpbmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzgzZTMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbGluay5jCkBAIC0wLDAgKzEsNjczNSBAQAorLyogQ29weXJpZ2h0IDIwMDgtMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICoKKyAqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlCisgKiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAuaHRtbCAodGhlICJHUEwiKS4KKyAqCisgKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisgKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyAqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisgKiBjb25zZW50LgorICoKKyAqIFdyaXR0ZW4gYnkgWWFuaXYgUm9zbmVyCisgKgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKworI2luY2x1ZGUgImJueDJ4LmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgRVRIX0hMRU4JCQkxNAorI2RlZmluZSBFVEhfT1ZSRUhFQUQJCShFVEhfSExFTiArIDgpLyogOCBmb3IgQ1JDICsgVkxBTiovCisjZGVmaW5lIEVUSF9NSU5fUEFDS0VUX1NJWkUJCTYwCisjZGVmaW5lIEVUSF9NQVhfUEFDS0VUX1NJWkUJCTE1MDAKKyNkZWZpbmUgRVRIX01BWF9KVU1CT19QQUNLRVRfU0laRQk5NjAwCisjZGVmaW5lIE1ESU9fQUNDRVNTX1RJTUVPVVQJCTEwMDAKKyNkZWZpbmUgQk1BQ19DT05UUk9MX1JYX0VOQUJMRQkyCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCQkJU2hvcnRjdXQgZGVmaW5pdGlvbnMJCSAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTklHX0xBVENIX0JDX0VOQUJMRV9NSV9JTlQgMAorCisjZGVmaW5lIE5JR19TVEFUVVNfRU1BQzBfTUlfSU5UIFwKKwkJTklHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDBfUkVHX1NUQVRVU19FTUFDMF9NSVNDX01JX0lOVAorI2RlZmluZSBOSUdfU1RBVFVTX1hHWFMwX0xJTksxMEcgXAorCQlOSUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMF9SRUdfU1RBVFVTX1hHWFMwX0xJTksxMEcKKyNkZWZpbmUgTklHX1NUQVRVU19YR1hTMF9MSU5LX1NUQVRVUyBcCisJCU5JR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwX1JFR19TVEFUVVNfWEdYUzBfTElOS19TVEFUVVMKKyNkZWZpbmUgTklHX1NUQVRVU19YR1hTMF9MSU5LX1NUQVRVU19TSVpFIFwKKwkJTklHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDBfUkVHX1NUQVRVU19YR1hTMF9MSU5LX1NUQVRVU19TSVpFCisjZGVmaW5lIE5JR19TVEFUVVNfU0VSREVTMF9MSU5LX1NUQVRVUyBcCisJCU5JR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwX1JFR19TVEFUVVNfU0VSREVTMF9MSU5LX1NUQVRVUworI2RlZmluZSBOSUdfTUFTS19NSV9JTlQgXAorCQlOSUdfTUFTS19JTlRFUlJVUFRfUE9SVDBfUkVHX01BU0tfRU1BQzBfTUlTQ19NSV9JTlQKKyNkZWZpbmUgTklHX01BU0tfWEdYUzBfTElOSzEwRyBcCisJCU5JR19NQVNLX0lOVEVSUlVQVF9QT1JUMF9SRUdfTUFTS19YR1hTMF9MSU5LMTBHCisjZGVmaW5lIE5JR19NQVNLX1hHWFMwX0xJTktfU1RBVFVTIFwKKwkJTklHX01BU0tfSU5URVJSVVBUX1BPUlQwX1JFR19NQVNLX1hHWFMwX0xJTktfU1RBVFVTCisjZGVmaW5lIE5JR19NQVNLX1NFUkRFUzBfTElOS19TVEFUVVMgXAorCQlOSUdfTUFTS19JTlRFUlJVUFRfUE9SVDBfUkVHX01BU0tfU0VSREVTMF9MSU5LX1NUQVRVUworCisjZGVmaW5lIE1ESU9fQU5fQ0w3M19PUl8zN19DT01QTEVURSBcCisJCShNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9DTDczX0FVVE9ORUdfQ09NUExFVEUgfCBcCisJCSBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9DTDM3X0FVVE9ORUdfQ09NUExFVEUpCisKKyNkZWZpbmUgWEdYU19SRVNFVF9CSVRTIFwKKwkoTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzNfTUlTQ19OSUdfTVVYX1hHWFMwX1JTVEJfSFcgfCAgIFwKKwkgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzNfTUlTQ19OSUdfTVVYX1hHWFMwX0lERFEgfCAgICAgIFwKKwkgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzNfTUlTQ19OSUdfTVVYX1hHWFMwX1BXUkRXTiB8ICAgIFwKKwkgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzNfTUlTQ19OSUdfTVVYX1hHWFMwX1BXUkRXTl9TRCB8IFwKKwkgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzNfTUlTQ19OSUdfTVVYX1hHWFMwX1RYRF9GSUZPX1JTVEIpCisKKyNkZWZpbmUgU0VSREVTX1JFU0VUX0JJVFMgXAorCShNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfM19NSVNDX05JR19NVVhfU0VSREVTMF9SU1RCX0hXIHwgXAorCSBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfM19NSVNDX05JR19NVVhfU0VSREVTMF9JRERRIHwgICAgXAorCSBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfM19NSVNDX05JR19NVVhfU0VSREVTMF9QV1JEV04gfCAgXAorCSBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfM19NSVNDX05JR19NVVhfU0VSREVTMF9QV1JEV05fU0QpCisKKyNkZWZpbmUgQVVUT05FR19DTDM3CQlTSEFSRURfSFdfQ0ZHX0FOX0VOQUJMRV9DTDM3CisjZGVmaW5lIEFVVE9ORUdfQ0w3MwkJU0hBUkVEX0hXX0NGR19BTl9FTkFCTEVfQ0w3MworI2RlZmluZSBBVVRPTkVHX0JBTSAJCVNIQVJFRF9IV19DRkdfQU5fRU5BQkxFX0JBTQorI2RlZmluZSBBVVRPTkVHX1BBUkFMTEVMIFwKKwkJCQlTSEFSRURfSFdfQ0ZHX0FOX0VOQUJMRV9QQVJBTExFTF9ERVRFQ1RJT04KKyNkZWZpbmUgQVVUT05FR19TR01JSV9GSUJFUl9BVVRPREVUIFwKKwkJCQlTSEFSRURfSFdfQ0ZHX0FOX0VOX1NHTUlJX0ZJQkVSX0FVVE9fREVURUNUCisjZGVmaW5lIEFVVE9ORUdfUkVNT1RFX1BIWQlTSEFSRURfSFdfQ0ZHX0FOX0VOQUJMRV9SRU1PVEVfUEhZCisKKyNkZWZpbmUgR1BfU1RBVFVTX1BBVVNFX1JTT0xVVElPTl9UWFNJREUgXAorCQkJTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfUEFVU0VfUlNPTFVUSU9OX1RYU0lERQorI2RlZmluZSBHUF9TVEFUVVNfUEFVU0VfUlNPTFVUSU9OX1JYU0lERSBcCisJCQlNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9QQVVTRV9SU09MVVRJT05fUlhTSURFCisjZGVmaW5lIEdQX1NUQVRVU19TUEVFRF9NQVNLIFwKKwkJCU1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF9NQVNLCisjZGVmaW5lIEdQX1NUQVRVU18xME0JTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzEwTQorI2RlZmluZSBHUF9TVEFUVVNfMTAwTQlNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfMTAwTQorI2RlZmluZSBHUF9TVEFUVVNfMUcJTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzFHCisjZGVmaW5lIEdQX1NUQVRVU18yXzVHCU1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8yXzVHCisjZGVmaW5lIEdQX1NUQVRVU181RwlNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfNUcKKyNkZWZpbmUgR1BfU1RBVFVTXzZHCU1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF82RworI2RlZmluZSBHUF9TVEFUVVNfMTBHX0hJRyBcCisJCQlNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfMTBHX0hJRworI2RlZmluZSBHUF9TVEFUVVNfMTBHX0NYNCBcCisJCQlNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfMTBHX0NYNAorI2RlZmluZSBHUF9TVEFUVVNfMTJHX0hJRyBcCisJCQlNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfMTJHX0hJRworI2RlZmluZSBHUF9TVEFUVVNfMTJfNUcgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzEyXzVHCisjZGVmaW5lIEdQX1NUQVRVU18xM0cJTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzEzRworI2RlZmluZSBHUF9TVEFUVVNfMTVHCU1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xNUcKKyNkZWZpbmUgR1BfU1RBVFVTXzE2RwlNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfMTZHCisjZGVmaW5lIEdQX1NUQVRVU18xR19LWCBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfMUdfS1gKKyNkZWZpbmUgR1BfU1RBVFVTXzEwR19LWDQgXAorCQkJTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzEwR19LWDQKKworI2RlZmluZSBMSU5LXzEwVEhECQkJTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xMFRIRAorI2RlZmluZSBMSU5LXzEwVEZECQkJTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xMFRGRAorI2RlZmluZSBMSU5LXzEwMFRYSEQJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTAwVFhIRAorI2RlZmluZSBMSU5LXzEwMFQ0CQkJTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xMDBUNAorI2RlZmluZSBMSU5LXzEwMFRYRkQJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTAwVFhGRAorI2RlZmluZSBMSU5LXzEwMDBUSEQJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTAwMFRIRAorI2RlZmluZSBMSU5LXzEwMDBURkQJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTAwMFRGRAorI2RlZmluZSBMSU5LXzEwMDBYRkQJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTAwMFhGRAorI2RlZmluZSBMSU5LXzI1MDBUSEQJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMjUwMFRIRAorI2RlZmluZSBMSU5LXzI1MDBURkQJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMjUwMFRGRAorI2RlZmluZSBMSU5LXzI1MDBYRkQJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMjUwMFhGRAorI2RlZmluZSBMSU5LXzEwR1RGRAkJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTBHVEZECisjZGVmaW5lIExJTktfMTBHWEZECQkJTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xMEdYRkQKKyNkZWZpbmUgTElOS18xMkdURkQJCQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEyR1RGRAorI2RlZmluZSBMSU5LXzEyR1hGRAkJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTJHWEZECisjZGVmaW5lIExJTktfMTJfNUdURkQJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTJfNUdURkQKKyNkZWZpbmUgTElOS18xMl81R1hGRAkJTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xMl81R1hGRAorI2RlZmluZSBMSU5LXzEzR1RGRAkJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTNHVEZECisjZGVmaW5lIExJTktfMTNHWEZECQkJTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xM0dYRkQKKyNkZWZpbmUgTElOS18xNUdURkQJCQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzE1R1RGRAorI2RlZmluZSBMSU5LXzE1R1hGRAkJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTVHWEZECisjZGVmaW5lIExJTktfMTZHVEZECQkJTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xNkdURkQKKyNkZWZpbmUgTElOS18xNkdYRkQJCQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzE2R1hGRAorCisjZGVmaW5lIFBIWV9YR1hTX0ZMQUcJCQkweDEKKyNkZWZpbmUgUEhZX1NHTUlJX0ZMQUcJCQkweDIKKyNkZWZpbmUgUEhZX1NFUkRFU19GTEFHCQkJMHg0CisKKy8qICovCisjZGVmaW5lIFNGUF9FRVBST01fQ09OX1RZUEVfQUREUgkJMHgyCisJI2RlZmluZSBTRlBfRUVQUk9NX0NPTl9UWVBFX1ZBTF9MQyAJCTB4NworCSNkZWZpbmUgU0ZQX0VFUFJPTV9DT05fVFlQRV9WQUxfQ09QUEVSCTB4MjEKKworCisjZGVmaW5lIFNGUF9FRVBST01fQ09NUF9DT0RFX0FERFIJCTB4MworCSNkZWZpbmUgU0ZQX0VFUFJPTV9DT01QX0NPREVfU1JfTUFTSwkoMTw8NCkKKwkjZGVmaW5lIFNGUF9FRVBST01fQ09NUF9DT0RFX0xSX01BU0sJKDE8PDUpCisJI2RlZmluZSBTRlBfRUVQUk9NX0NPTVBfQ09ERV9MUk1fTUFTSwkoMTw8NikKKworI2RlZmluZSBTRlBfRUVQUk9NX0ZDX1RYX1RFQ0hfQUREUgkJMHg4CisJI2RlZmluZSBTRlBfRUVQUk9NX0ZDX1RYX1RFQ0hfQklUTUFTS19DT1BQRVJfUEFTU0lWRSAweDQKKwkjZGVmaW5lIFNGUF9FRVBST01fRkNfVFhfVEVDSF9CSVRNQVNLX0NPUFBFUl9BQ1RJVkUJIDB4OAorCisjZGVmaW5lIFNGUF9FRVBST01fT1BUSU9OU19BRERSIAkJMHg0MAorCSNkZWZpbmUgU0ZQX0VFUFJPTV9PUFRJT05TX0xJTkVBUl9SWF9PVVRfTUFTSyAweDEKKyNkZWZpbmUgU0ZQX0VFUFJPTV9PUFRJT05TX1NJWkUgCQkyCisKKyNkZWZpbmUgRURDX01PREVfTElORUFSCSAJCQkweDAwMjIKKyNkZWZpbmUgRURDX01PREVfTElNSVRJTkcJIAkJCTB4MDA0NAorI2RlZmluZSBFRENfTU9ERV9QQVNTSVZFX0RBQyAJCQkweDAwNTUKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICBJTlRFUkZBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQ0w0NV9XUl9PVkVSX0NMMjIoX2JwLCBfcG9ydCwgX3BoeV9hZGRyLCBfYmFuaywgX2FkZHIsIF92YWwpIFwKKwlibngyeF9jbDQ1X3dyaXRlKF9icCwgX3BvcnQsIDAsIF9waHlfYWRkciwgXAorCQlERUZBVUxUX1BIWV9ERVZfQUREUiwgXAorCQkoX2JhbmsgKyAoX2FkZHIgJiAweGYpKSwgXAorCQlfdmFsKQorCisjZGVmaW5lIENMNDVfUkRfT1ZFUl9DTDIyKF9icCwgX3BvcnQsIF9waHlfYWRkciwgX2JhbmssIF9hZGRyLCBfdmFsKSBcCisJYm54MnhfY2w0NV9yZWFkKF9icCwgX3BvcnQsIDAsIF9waHlfYWRkciwgXAorCQlERUZBVUxUX1BIWV9ERVZfQUREUiwgXAorCQkoX2JhbmsgKyAoX2FkZHIgJiAweGYpKSwgXAorCQlfdmFsKQorCitzdGF0aWMgdm9pZCBibngyeF9zZXRfc2VyZGVzX2FjY2VzcyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MzIgZW1hY19iYXNlID0gKHBhcmFtcy0+cG9ydCkgPyBHUkNCQVNFX0VNQUMxIDogR1JDQkFTRV9FTUFDMDsKKworCS8qIFNldCBDbGF1c2UgMjIgKi8KKwlSRUdfV1IoYnAsIE5JR19SRUdfU0VSREVTMF9DVFJMX01EX1NUICsgcGFyYW1zLT5wb3J0KjB4MTAsIDEpOworCVJFR19XUihicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19NRElPX0NPTU0sIDB4MjQ1ZjgwMDApOworCXVkZWxheSg1MDApOworCVJFR19XUihicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19NRElPX0NPTU0sIDB4MjQ1ZDAwMGYpOworCXVkZWxheSg1MDApOworCSAvKiBTZXQgQ2xhdXNlIDQ1ICovCisJUkVHX1dSKGJwLCBOSUdfUkVHX1NFUkRFUzBfQ1RSTF9NRF9TVCArIHBhcmFtcy0+cG9ydCoweDEwLCAwKTsKK30KK3N0YXRpYyB2b2lkIGJueDJ4X3NldF9waHlfbWRpbyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgdTggcGh5X2ZsYWdzKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCisJaWYgKHBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpIHsKKwkJUkVHX1dSKGJwLCBOSUdfUkVHX1hHWFMwX0NUUkxfTURfU1QgKworCQkJICAgcGFyYW1zLT5wb3J0KjB4MTgsIDApOworCQlSRUdfV1IoYnAsIE5JR19SRUdfWEdYUzBfQ1RSTF9NRF9ERVZBRCArIHBhcmFtcy0+cG9ydCoweDE4LAorCQkJICAgREVGQVVMVF9QSFlfREVWX0FERFIpOworCX0gZWxzZSB7CisJCWJueDJ4X3NldF9zZXJkZXNfYWNjZXNzKHBhcmFtcyk7CisKKwkJUkVHX1dSKGJwLCBOSUdfUkVHX1NFUkRFUzBfQ1RSTF9NRF9ERVZBRCArCisJCQkgICBwYXJhbXMtPnBvcnQqMHgxMCwKKwkJCSAgIERFRkFVTFRfUEhZX0RFVl9BRERSKTsKKwl9Cit9CisKK3N0YXRpYyB1MzIgYm54MnhfYml0c19lbihzdHJ1Y3QgYm54MnggKmJwLCB1MzIgcmVnLCB1MzIgYml0cykKK3sKKwl1MzIgdmFsID0gUkVHX1JEKGJwLCByZWcpOworCisJdmFsIHw9IGJpdHM7CisJUkVHX1dSKGJwLCByZWcsIHZhbCk7CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHUzMiBibngyeF9iaXRzX2RpcyhzdHJ1Y3QgYm54MnggKmJwLCB1MzIgcmVnLCB1MzIgYml0cykKK3sKKwl1MzIgdmFsID0gUkVHX1JEKGJwLCByZWcpOworCisJdmFsICY9IH5iaXRzOworCVJFR19XUihicCwgcmVnLCB2YWwpOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2VtYWNfaW5pdChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCSAgIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpCit7CisJLyogcmVzZXQgYW5kIHVucmVzZXQgdGhlIGVtYWMgY29yZSAqLworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJdTMyIGVtYWNfYmFzZSA9IHBvcnQgPyBHUkNCQVNFX0VNQUMxIDogR1JDQkFTRV9FTUFDMDsKKwl1MzIgdmFsOworCXUxNiB0aW1lb3V0OworCisJUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9DTEVBUiwKKwkJICAgKE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX1JTVF9FTUFDMF9IQVJEX0NPUkUgPDwgcG9ydCkpOworCXVkZWxheSg1KTsKKwlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX1NFVCwKKwkJICAgKE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX1JTVF9FTUFDMF9IQVJEX0NPUkUgPDwgcG9ydCkpOworCisJLyogaW5pdCBlbWFjIC0gdXNlIHJlYWQtbW9kaWZ5LXdyaXRlICovCisJLyogc2VsZiBjbGVhciByZXNldCAqLworCXZhbCA9IFJFR19SRChicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19NT0RFKTsKKwlFTUFDX1dSKGJwLCBFTUFDX1JFR19FTUFDX01PREUsICh2YWwgfCBFTUFDX01PREVfUkVTRVQpKTsKKworCXRpbWVvdXQgPSAyMDA7CisJZG8geworCQl2YWwgPSBSRUdfUkQoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTU9ERSk7CisJCURQKE5FVElGX01TR19MSU5LLCAiRU1BQyByZXNldCByZWcgaXMgJXVcbiIsIHZhbCk7CisJCWlmICghdGltZW91dCkgeworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJFTUFDIHRpbWVvdXQhXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCQl0aW1lb3V0LS07CisJfSB3aGlsZSAodmFsICYgRU1BQ19NT0RFX1JFU0VUKTsKKworCS8qIFNldCBtYWMgYWRkcmVzcyAqLworCXZhbCA9ICgocGFyYW1zLT5tYWNfYWRkclswXSA8PCA4KSB8CisJCXBhcmFtcy0+bWFjX2FkZHJbMV0pOworCUVNQUNfV1IoYnAsIEVNQUNfUkVHX0VNQUNfTUFDX01BVENILCB2YWwpOworCisJdmFsID0gKChwYXJhbXMtPm1hY19hZGRyWzJdIDw8IDI0KSB8CisJICAgICAgIChwYXJhbXMtPm1hY19hZGRyWzNdIDw8IDE2KSB8CisJICAgICAgIChwYXJhbXMtPm1hY19hZGRyWzRdIDw8IDgpIHwKKwkJcGFyYW1zLT5tYWNfYWRkcls1XSk7CisJRU1BQ19XUihicCwgRU1BQ19SRUdfRU1BQ19NQUNfTUFUQ0ggKyA0LCB2YWwpOworfQorCitzdGF0aWMgdTggYm54MnhfZW1hY19lbmFibGUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkgIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMsIHU4IGxiKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJdTMyIGVtYWNfYmFzZSA9IHBvcnQgPyBHUkNCQVNFX0VNQUMxIDogR1JDQkFTRV9FTUFDMDsKKwl1MzIgdmFsOworCisJRFAoTkVUSUZfTVNHX0xJTkssICJlbmFibGluZyBFTUFDXG4iKTsKKworCS8qIGVuYWJsZSBlbWFjIGFuZCBub3QgYm1hYyAqLworCVJFR19XUihicCwgTklHX1JFR19FR1JFU1NfRU1BQzBfUE9SVCArIHBvcnQqNCwgMSk7CisKKwkvKiBmb3IgcGFsYWRpdW0gKi8KKwlpZiAoQ0hJUF9SRVZfSVNfRU1VTChicCkpIHsKKwkJLyogVXNlIGxhbmUgMSAob2YgbGFuZXMgMC0zKSAqLworCQlSRUdfV1IoYnAsIE5JR19SRUdfWEdYU19MQU5FX1NFTF9QMCArIHBvcnQqNCwgMSk7CisJCVJFR19XUihicCwgTklHX1JFR19YR1hTX1NFUkRFUzBfTU9ERV9TRUwgKworCQkJICAgIHBvcnQqNCwgMSk7CisJfQorCS8qIGZvciBmcGdhICovCisJZWxzZQorCisJaWYgKENISVBfUkVWX0lTX0ZQR0EoYnApKSB7CisJCS8qIFVzZSBsYW5lIDEgKG9mIGxhbmVzIDAtMykgKi8KKwkJRFAoTkVUSUZfTVNHX0xJTkssICJibngyeF9lbWFjX2VuYWJsZTogU2V0dGluZyBGUEdBXG4iKTsKKworCQlSRUdfV1IoYnAsIE5JR19SRUdfWEdYU19MQU5FX1NFTF9QMCArIHBvcnQqNCwgMSk7CisJCVJFR19XUihicCwgTklHX1JFR19YR1hTX1NFUkRFUzBfTU9ERV9TRUwgKyBwb3J0KjQsCisJCQkgICAgMCk7CisJfSBlbHNlCisJLyogQVNJQyAqLworCWlmICh2YXJzLT5waHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSB7CisJCXUzMiBzZXJfbGFuZSA9ICgocGFyYW1zLT5sYW5lX2NvbmZpZyAmCisJCQkgICAgUE9SVF9IV19DRkdfTEFORV9TV0FQX0NGR19NQVNURVJfTUFTSykgPj4KKwkJCSAgICBQT1JUX0hXX0NGR19MQU5FX1NXQVBfQ0ZHX01BU1RFUl9TSElGVCk7CisKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTXG4iKTsKKwkJLyogc2VsZWN0IHRoZSBtYXN0ZXIgbGFuZXMgKG91dCBvZiAwLTMpICovCisJCVJFR19XUihicCwgTklHX1JFR19YR1hTX0xBTkVfU0VMX1AwICsKKwkJCSAgIHBvcnQqNCwgc2VyX2xhbmUpOworCQkvKiBzZWxlY3QgWEdYUyAqLworCQlSRUdfV1IoYnAsIE5JR19SRUdfWEdYU19TRVJERVMwX01PREVfU0VMICsKKwkJCSAgIHBvcnQqNCwgMSk7CisKKwl9IGVsc2UgeyAvKiBTZXJEZXMgKi8KKwkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXJEZXNcbiIpOworCQkvKiBzZWxlY3QgU2VyRGVzICovCisJCVJFR19XUihicCwgTklHX1JFR19YR1hTX1NFUkRFUzBfTU9ERV9TRUwgKworCQkJICAgcG9ydCo0LCAwKTsKKwl9CisKKwlibngyeF9iaXRzX2VuKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX1JYX01PREUsCisJCSAgICBFTUFDX1JYX01PREVfUkVTRVQpOworCWJueDJ4X2JpdHNfZW4oYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfVFhfTU9ERSwKKwkJICAgIEVNQUNfVFhfTU9ERV9SRVNFVCk7CisKKwlpZiAoQ0hJUF9SRVZfSVNfU0xPVyhicCkpIHsKKwkJLyogY29uZmlnIEdNSUkgbW9kZSAqLworCQl2YWwgPSBSRUdfUkQoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTU9ERSk7CisJCUVNQUNfV1IoYnAsIEVNQUNfUkVHX0VNQUNfTU9ERSwKKwkJCSAgICAodmFsIHwgRU1BQ19NT0RFX1BPUlRfR01JSSkpOworCX0gZWxzZSB7IC8qIEFTSUMgKi8KKwkJLyogcGF1c2UgZW5hYmxlL2Rpc2FibGUgKi8KKwkJYm54MnhfYml0c19kaXMoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfUlhfTU9ERSwKKwkJCSAgICAgICBFTUFDX1JYX01PREVfRkxPV19FTik7CisJCWlmICh2YXJzLT5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfUlgpCisJCQlibngyeF9iaXRzX2VuKGJwLCBlbWFjX2Jhc2UgKworCQkJCSAgICBFTUFDX1JFR19FTUFDX1JYX01PREUsCisJCQkJICAgIEVNQUNfUlhfTU9ERV9GTE9XX0VOKTsKKworCQlibngyeF9iaXRzX2RpcyhicCwgIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfVFhfTU9ERSwKKwkJCSAgICAgKEVNQUNfVFhfTU9ERV9FWFRfUEFVU0VfRU4gfAorCQkJICAgICAgRU1BQ19UWF9NT0RFX0ZMT1dfRU4pKTsKKwkJaWYgKHZhcnMtPmZsb3dfY3RybCAmIEJOWDJYX0ZMT1dfQ1RSTF9UWCkKKwkJCWJueDJ4X2JpdHNfZW4oYnAsIGVtYWNfYmFzZSArCisJCQkJICAgIEVNQUNfUkVHX0VNQUNfVFhfTU9ERSwKKwkJCQkgICAoRU1BQ19UWF9NT0RFX0VYVF9QQVVTRV9FTiB8CisJCQkJICAgIEVNQUNfVFhfTU9ERV9GTE9XX0VOKSk7CisJfQorCisJLyogS0VFUF9WTEFOX1RBRywgcHJvbWlzY3VvdXMgKi8KKwl2YWwgPSBSRUdfUkQoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfUlhfTU9ERSk7CisJdmFsIHw9IEVNQUNfUlhfTU9ERV9LRUVQX1ZMQU5fVEFHIHwgRU1BQ19SWF9NT0RFX1BST01JU0NVT1VTOworCUVNQUNfV1IoYnAsIEVNQUNfUkVHX0VNQUNfUlhfTU9ERSwgdmFsKTsKKworCS8qIFNldCBMb29wYmFjayAqLworCXZhbCA9IFJFR19SRChicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19NT0RFKTsKKwlpZiAobGIpCisJCXZhbCB8PSAweDgxMDsKKwllbHNlCisJCXZhbCAmPSB+MHg4MTA7CisJRU1BQ19XUihicCwgRU1BQ19SRUdfRU1BQ19NT0RFLCB2YWwpOworCisJLyogZW5hYmxlIGVtYWMgKi8KKwlSRUdfV1IoYnAsIE5JR19SRUdfTklHX0VNQUMwX0VOICsgcG9ydCo0LCAxKTsKKworCS8qIGVuYWJsZSBlbWFjIGZvciBqdW1ibyBwYWNrZXRzICovCisJRU1BQ19XUihicCwgRU1BQ19SRUdfRU1BQ19SWF9NVFVfU0laRSwKKwkJKEVNQUNfUlhfTVRVX1NJWkVfSlVNQk9fRU5BIHwKKwkJIChFVEhfTUFYX0pVTUJPX1BBQ0tFVF9TSVpFICsgRVRIX09WUkVIRUFEKSkpOworCisJLyogc3RyaXAgQ1JDICovCisJUkVHX1dSKGJwLCBOSUdfUkVHX05JR19JTkdSRVNTX0VNQUMwX05PX0NSQyArIHBvcnQqNCwgMHgxKTsKKworCS8qIGRpc2FibGUgdGhlIE5JRyBpbi9vdXQgdG8gdGhlIGJtYWMgKi8KKwlSRUdfV1IoYnAsIE5JR19SRUdfQk1BQzBfSU5fRU4gKyBwb3J0KjQsIDB4MCk7CisJUkVHX1dSKGJwLCBOSUdfUkVHX0JNQUMwX1BBVVNFX09VVF9FTiArIHBvcnQqNCwgMHgwKTsKKwlSRUdfV1IoYnAsIE5JR19SRUdfQk1BQzBfT1VUX0VOICsgcG9ydCo0LCAweDApOworCisJLyogZW5hYmxlIHRoZSBOSUcgaW4vb3V0IHRvIHRoZSBlbWFjICovCisJUkVHX1dSKGJwLCBOSUdfUkVHX0VNQUMwX0lOX0VOICsgcG9ydCo0LCAweDEpOworCXZhbCA9IDA7CisJaWYgKHZhcnMtPmZsb3dfY3RybCAmIEJOWDJYX0ZMT1dfQ1RSTF9UWCkKKwkJdmFsID0gMTsKKworCVJFR19XUihicCwgTklHX1JFR19FTUFDMF9QQVVTRV9PVVRfRU4gKyBwb3J0KjQsIHZhbCk7CisJUkVHX1dSKGJwLCBOSUdfUkVHX0VHUkVTU19FTUFDMF9PVVRfRU4gKyBwb3J0KjQsIDB4MSk7CisKKwlpZiAoQ0hJUF9SRVZfSVNfRU1VTChicCkpIHsKKwkJLyogdGFrZSB0aGUgQmlnTWFjIG91dCBvZiByZXNldCAqLworCQlSRUdfV1IoYnAsCisJCQkgICBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9TRVQsCisJCQkgICAoTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfUlNUX0JNQUMwIDw8IHBvcnQpKTsKKworCQkvKiBlbmFibGUgYWNjZXNzIGZvciBibWFjIHJlZ2lzdGVycyAqLworCQlSRUdfV1IoYnAsIE5JR19SRUdfQk1BQzBfUkVHU19PVVRfRU4gKyBwb3J0KjQsIDB4MSk7CisJfSBlbHNlCisJCVJFR19XUihicCwgTklHX1JFR19CTUFDMF9SRUdTX09VVF9FTiArIHBvcnQqNCwgMHgwKTsKKworCXZhcnMtPm1hY190eXBlID0gTUFDX1RZUEVfRU1BQzsKKwlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyB1OCBibngyeF9ibWFjX2VuYWJsZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgc3RydWN0IGxpbmtfdmFycyAqdmFycywKKwkJCSAgdTggaXNfbGIpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKKwl1MzIgYm1hY19hZGRyID0gcG9ydCA/IE5JR19SRUdfSU5HUkVTU19CTUFDMV9NRU0gOgorCQkJICAgICAgIE5JR19SRUdfSU5HUkVTU19CTUFDMF9NRU07CisJdTMyIHdiX2RhdGFbMl07CisJdTMyIHZhbDsKKworCURQKE5FVElGX01TR19MSU5LLCAiRW5hYmxpbmcgQmlnTUFDXG4iKTsKKwkvKiByZXNldCBhbmQgdW5yZXNldCB0aGUgQmlnTWFjICovCisJUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9DTEVBUiwKKwkgICAgICAgKE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX1JTVF9CTUFDMCA8PCBwb3J0KSk7CisJbXNsZWVwKDEpOworCisJUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9TRVQsCisJICAgICAgIChNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9SU1RfQk1BQzAgPDwgcG9ydCkpOworCisJLyogZW5hYmxlIGFjY2VzcyBmb3IgYm1hYyByZWdpc3RlcnMgKi8KKwlSRUdfV1IoYnAsIE5JR19SRUdfQk1BQzBfUkVHU19PVVRfRU4gKyBwb3J0KjQsIDB4MSk7CisKKwkvKiBYR1hTIGNvbnRyb2wgKi8KKwl3Yl9kYXRhWzBdID0gMHgzYzsKKwl3Yl9kYXRhWzFdID0gMDsKKwlSRUdfV1JfRE1BRShicCwgYm1hY19hZGRyICsKKwkJICAgICAgQklHTUFDX1JFR0lTVEVSX0JNQUNfWEdYU19DT05UUk9MLAorCQkgICAgICB3Yl9kYXRhLCAyKTsKKworCS8qIHR4IE1BQyBTQSAqLworCXdiX2RhdGFbMF0gPSAoKHBhcmFtcy0+bWFjX2FkZHJbMl0gPDwgMjQpIHwKKwkJICAgICAgIChwYXJhbXMtPm1hY19hZGRyWzNdIDw8IDE2KSB8CisJCSAgICAgICAocGFyYW1zLT5tYWNfYWRkcls0XSA8PCA4KSB8CisJCQlwYXJhbXMtPm1hY19hZGRyWzVdKTsKKwl3Yl9kYXRhWzFdID0gKChwYXJhbXMtPm1hY19hZGRyWzBdIDw8IDgpIHwKKwkJCXBhcmFtcy0+bWFjX2FkZHJbMV0pOworCVJFR19XUl9ETUFFKGJwLCBibWFjX2FkZHIgKyBCSUdNQUNfUkVHSVNURVJfVFhfU09VUkNFX0FERFIsCisJCSAgICB3Yl9kYXRhLCAyKTsKKworCS8qIHR4IGNvbnRyb2wgKi8KKwl2YWwgPSAweGMwOworCWlmICh2YXJzLT5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfVFgpCisJCXZhbCB8PSAweDgwMDAwMDsKKwl3Yl9kYXRhWzBdID0gdmFsOworCXdiX2RhdGFbMV0gPSAwOworCVJFR19XUl9ETUFFKGJwLCBibWFjX2FkZHIgKyBCSUdNQUNfUkVHSVNURVJfVFhfQ09OVFJPTCwKKwkJCXdiX2RhdGEsIDIpOworCisJLyogbWFjIGNvbnRyb2wgKi8KKwl2YWwgPSAweDM7CisJaWYgKGlzX2xiKSB7CisJCXZhbCB8PSAweDQ7CisJCURQKE5FVElGX01TR19MSU5LLCAiZW5hYmxlIGJtYWMgbG9vcGJhY2tcbiIpOworCX0KKwl3Yl9kYXRhWzBdID0gdmFsOworCXdiX2RhdGFbMV0gPSAwOworCVJFR19XUl9ETUFFKGJwLCBibWFjX2FkZHIgKyBCSUdNQUNfUkVHSVNURVJfQk1BQ19DT05UUk9MLAorCQkgICAgd2JfZGF0YSwgMik7CisKKwkvKiBzZXQgcnggbXR1ICovCisJd2JfZGF0YVswXSA9IEVUSF9NQVhfSlVNQk9fUEFDS0VUX1NJWkUgKyBFVEhfT1ZSRUhFQUQ7CisJd2JfZGF0YVsxXSA9IDA7CisJUkVHX1dSX0RNQUUoYnAsIGJtYWNfYWRkciArIEJJR01BQ19SRUdJU1RFUl9SWF9NQVhfU0laRSwKKwkJCXdiX2RhdGEsIDIpOworCisJLyogcnggY29udHJvbCBzZXQgdG8gZG9uJ3Qgc3RyaXAgY3JjICovCisJdmFsID0gMHgxNDsKKwlpZiAodmFycy0+Zmxvd19jdHJsICYgQk5YMlhfRkxPV19DVFJMX1JYKQorCQl2YWwgfD0gMHgyMDsKKwl3Yl9kYXRhWzBdID0gdmFsOworCXdiX2RhdGFbMV0gPSAwOworCVJFR19XUl9ETUFFKGJwLCBibWFjX2FkZHIgKyBCSUdNQUNfUkVHSVNURVJfUlhfQ09OVFJPTCwKKwkJCXdiX2RhdGEsIDIpOworCisJLyogc2V0IHR4IG10dSAqLworCXdiX2RhdGFbMF0gPSBFVEhfTUFYX0pVTUJPX1BBQ0tFVF9TSVpFICsgRVRIX09WUkVIRUFEOworCXdiX2RhdGFbMV0gPSAwOworCVJFR19XUl9ETUFFKGJwLCBibWFjX2FkZHIgKyBCSUdNQUNfUkVHSVNURVJfVFhfTUFYX1NJWkUsCisJCQl3Yl9kYXRhLCAyKTsKKworCS8qIHNldCBjbnQgbWF4IHNpemUgKi8KKwl3Yl9kYXRhWzBdID0gRVRIX01BWF9KVU1CT19QQUNLRVRfU0laRSArIEVUSF9PVlJFSEVBRDsKKwl3Yl9kYXRhWzFdID0gMDsKKwlSRUdfV1JfRE1BRShicCwgYm1hY19hZGRyICsgQklHTUFDX1JFR0lTVEVSX0NOVF9NQVhfU0laRSwKKwkJICAgIHdiX2RhdGEsIDIpOworCisJLyogY29uZmlndXJlIHNhZmMgKi8KKwl3Yl9kYXRhWzBdID0gMHgxMDAwMjAwOworCXdiX2RhdGFbMV0gPSAwOworCVJFR19XUl9ETUFFKGJwLCBibWFjX2FkZHIgKyBCSUdNQUNfUkVHSVNURVJfUlhfTExGQ19NU0dfRkxEUywKKwkJICAgIHdiX2RhdGEsIDIpOworCS8qIGZpeCBmb3IgZW11bGF0aW9uICovCisJaWYgKENISVBfUkVWX0lTX0VNVUwoYnApKSB7CisJCXdiX2RhdGFbMF0gPSAweGYwMDA7CisJCXdiX2RhdGFbMV0gPSAwOworCQlSRUdfV1JfRE1BRShicCwKKwkJCSAgICBibWFjX2FkZHIgKyBCSUdNQUNfUkVHSVNURVJfVFhfUEFVU0VfVEhSRVNIT0xELAorCQkJICAgIHdiX2RhdGEsIDIpOworCX0KKworCVJFR19XUihicCwgTklHX1JFR19YR1hTX1NFUkRFUzBfTU9ERV9TRUwgKyBwb3J0KjQsIDB4MSk7CisJUkVHX1dSKGJwLCBOSUdfUkVHX1hHWFNfTEFORV9TRUxfUDAgKyBwb3J0KjQsIDB4MCk7CisJUkVHX1dSKGJwLCBOSUdfUkVHX0VHUkVTU19FTUFDMF9QT1JUICsgcG9ydCo0LCAweDApOworCXZhbCA9IDA7CisJaWYgKHZhcnMtPmZsb3dfY3RybCAmIEJOWDJYX0ZMT1dfQ1RSTF9UWCkKKwkJdmFsID0gMTsKKwlSRUdfV1IoYnAsIE5JR19SRUdfQk1BQzBfUEFVU0VfT1VUX0VOICsgcG9ydCo0LCB2YWwpOworCVJFR19XUihicCwgTklHX1JFR19FR1JFU1NfRU1BQzBfT1VUX0VOICsgcG9ydCo0LCAweDApOworCVJFR19XUihicCwgTklHX1JFR19FTUFDMF9JTl9FTiArIHBvcnQqNCwgMHgwKTsKKwlSRUdfV1IoYnAsIE5JR19SRUdfRU1BQzBfUEFVU0VfT1VUX0VOICsgcG9ydCo0LCAweDApOworCVJFR19XUihicCwgTklHX1JFR19CTUFDMF9JTl9FTiArIHBvcnQqNCwgMHgxKTsKKwlSRUdfV1IoYnAsIE5JR19SRUdfQk1BQzBfT1VUX0VOICsgcG9ydCo0LCAweDEpOworCisJdmFycy0+bWFjX3R5cGUgPSBNQUNfVFlQRV9CTUFDOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBibngyeF9waHlfZGVhc3NlcnQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHU4IHBoeV9mbGFncykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MzIgdmFsOworCisJaWYgKHBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJibngyeF9waHlfZGVhc3NlcnQ6WEdYU1xuIik7CisJCXZhbCA9IFhHWFNfUkVTRVRfQklUUzsKKworCX0gZWxzZSB7IC8qIFNlckRlcyAqLworCQlEUChORVRJRl9NU0dfTElOSywgImJueDJ4X3BoeV9kZWFzc2VydDpTZXJEZXNcbiIpOworCQl2YWwgPSBTRVJERVNfUkVTRVRfQklUUzsKKwl9CisKKwl2YWwgPSB2YWwgPDwgKHBhcmFtcy0+cG9ydCoxNik7CisKKwkvKiByZXNldCBhbmQgdW5yZXNldCB0aGUgU2VyRGVzL1hHWFMgKi8KKwlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18zX0NMRUFSLAorCQkgICAgdmFsKTsKKwl1ZGVsYXkoNTAwKTsKKwlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18zX1NFVCwKKwkJICAgIHZhbCk7CisJYm54Mnhfc2V0X3BoeV9tZGlvKHBhcmFtcywgcGh5X2ZsYWdzKTsKK30KKwordm9pZCBibngyeF9saW5rX3N0YXR1c191cGRhdGUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgc3RydWN0IGxpbmtfdmFycyAgICp2YXJzKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXU4IGxpbmtfMTBnOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisKKwlpZiAocGFyYW1zLT5zd2l0Y2hfY2ZnID09ICBTV0lUQ0hfQ0ZHXzFHKQorCQl2YXJzLT5waHlfZmxhZ3MgPSBQSFlfU0VSREVTX0ZMQUc7CisJZWxzZQorCQl2YXJzLT5waHlfZmxhZ3MgPSBQSFlfWEdYU19GTEFHOworCXZhcnMtPmxpbmtfc3RhdHVzID0gUkVHX1JEKGJwLCBwYXJhbXMtPnNobWVtX2Jhc2UgKworCQkJCQkgIG9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sCisJCQkJCSAgIHBvcnRfbWJbcG9ydF0ubGlua19zdGF0dXMpKTsKKworCXZhcnMtPmxpbmtfdXAgPSAodmFycy0+bGlua19zdGF0dXMgJiBMSU5LX1NUQVRVU19MSU5LX1VQKTsKKworCWlmICh2YXJzLT5saW5rX3VwKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAicGh5IGxpbmsgdXBcbiIpOworCisJCXZhcnMtPnBoeV9saW5rX3VwID0gMTsKKwkJdmFycy0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCXN3aXRjaCAodmFycy0+bGlua19zdGF0dXMgJgorCQkJCQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYX01BU0spIHsKKwkJCWNhc2UgTElOS18xMFRIRDoKKwkJCQl2YXJzLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKKwkJCQkvKiBmYWxsIHRocnUgKi8KKwkJCWNhc2UgTElOS18xMFRGRDoKKwkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTA7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgTElOS18xMDBUWEhEOgorCQkJCXZhcnMtPmR1cGxleCA9IERVUExFWF9IQUxGOworCQkJCS8qIGZhbGwgdGhydSAqLworCQkJY2FzZSBMSU5LXzEwMFQ0OgorCQkJY2FzZSBMSU5LXzEwMFRYRkQ6CisJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBMSU5LXzEwMDBUSEQ6CisJCQkJdmFycy0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisJCQkJLyogZmFsbCB0aHJ1ICovCisJCQljYXNlIExJTktfMTAwMFRGRDoKKwkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBMSU5LXzI1MDBUSEQ6CisJCQkJdmFycy0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisJCQkJLyogZmFsbCB0aHJ1ICovCisJCQljYXNlIExJTktfMjUwMFRGRDoKKwkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMjUwMDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBMSU5LXzEwR1RGRDoKKwkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDA7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgTElOS18xMkdURkQ6CisJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEyMDAwOworCQkJCWJyZWFrOworCisJCQljYXNlIExJTktfMTJfNUdURkQ6CisJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEyNTAwOworCQkJCWJyZWFrOworCisJCQljYXNlIExJTktfMTNHVEZEOgorCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMzAwMDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBMSU5LXzE1R1RGRDoKKwkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTUwMDA7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgTElOS18xNkdURkQ6CisJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzE2MDAwOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKHZhcnMtPmxpbmtfc3RhdHVzICYgTElOS19TVEFUVVNfVFhfRkxPV19DT05UUk9MX0VOQUJMRUQpCisJCQl2YXJzLT5mbG93X2N0cmwgfD0gQk5YMlhfRkxPV19DVFJMX1RYOworCQllbHNlCisJCQl2YXJzLT5mbG93X2N0cmwgJj0gfkJOWDJYX0ZMT1dfQ1RSTF9UWDsKKworCQlpZiAodmFycy0+bGlua19zdGF0dXMgJiBMSU5LX1NUQVRVU19SWF9GTE9XX0NPTlRST0xfRU5BQkxFRCkKKwkJCXZhcnMtPmZsb3dfY3RybCB8PSBCTlgyWF9GTE9XX0NUUkxfUlg7CisJCWVsc2UKKwkJCXZhcnMtPmZsb3dfY3RybCAmPSB+Qk5YMlhfRkxPV19DVFJMX1JYOworCisJCWlmICh2YXJzLT5waHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSB7CisJCQlpZiAodmFycy0+bGluZV9zcGVlZCAmJgorCQkJICAgICgodmFycy0+bGluZV9zcGVlZCA9PSBTUEVFRF8xMCkgfHwKKwkJCSAgICAgKHZhcnMtPmxpbmVfc3BlZWQgPT0gU1BFRURfMTAwKSkpIHsKKwkJCQl2YXJzLT5waHlfZmxhZ3MgfD0gUEhZX1NHTUlJX0ZMQUc7CisJCQl9IGVsc2UgeworCQkJCXZhcnMtPnBoeV9mbGFncyAmPSB+UEhZX1NHTUlJX0ZMQUc7CisJCQl9CisJCX0KKworCQkvKiBhbnl0aGluZyAxMCBhbmQgb3ZlciB1c2VzIHRoZSBibWFjICovCisJCWxpbmtfMTBnID0gKCh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEXzEwMDAwKSB8fAorCQkJICAgICh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEXzEyMDAwKSB8fAorCQkJICAgICh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEXzEyNTAwKSB8fAorCQkJICAgICh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEXzEzMDAwKSB8fAorCQkJICAgICh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEXzE1MDAwKSB8fAorCQkJICAgICh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEXzE2MDAwKSk7CisJCWlmIChsaW5rXzEwZykKKwkJCXZhcnMtPm1hY190eXBlID0gTUFDX1RZUEVfQk1BQzsKKwkJZWxzZQorCQkJdmFycy0+bWFjX3R5cGUgPSBNQUNfVFlQRV9FTUFDOworCisJfSBlbHNlIHsgLyogbGluayBkb3duICovCisJCURQKE5FVElGX01TR19MSU5LLCAicGh5IGxpbmsgZG93blxuIik7CisKKwkJdmFycy0+cGh5X2xpbmtfdXAgPSAwOworCisJCXZhcnMtPmxpbmVfc3BlZWQgPSAwOworCQl2YXJzLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJdmFycy0+Zmxvd19jdHJsID0gQk5YMlhfRkxPV19DVFJMX05PTkU7CisKKwkJLyogaW5kaWNhdGUgbm8gbWFjIGFjdGl2ZSAqLworCQl2YXJzLT5tYWNfdHlwZSA9IE1BQ19UWVBFX05PTkU7CisJfQorCisJRFAoTkVUSUZfTVNHX0xJTkssICJsaW5rX3N0YXR1cyAweCV4ICBwaHlfbGlua191cCAleFxuIiwKKwkJIHZhcnMtPmxpbmtfc3RhdHVzLCB2YXJzLT5waHlfbGlua191cCk7CisJRFAoTkVUSUZfTVNHX0xJTkssICJsaW5lX3NwZWVkICV4ICBkdXBsZXggJXggIGZsb3dfY3RybCAweCV4XG4iLAorCQkgdmFycy0+bGluZV9zcGVlZCwgdmFycy0+ZHVwbGV4LCB2YXJzLT5mbG93X2N0cmwpOworfQorCitzdGF0aWMgdm9pZCBibngyeF91cGRhdGVfbW5nKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCB1MzIgbGlua19zdGF0dXMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisKKwlSRUdfV1IoYnAsIHBhcmFtcy0+c2htZW1fYmFzZSArCisJCSAgIG9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sCisJCQkgICAgcG9ydF9tYltwYXJhbXMtPnBvcnRdLmxpbmtfc3RhdHVzKSwKKwkJCWxpbmtfc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfYm1hY19yeF9kaXNhYmxlKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQpCit7CisJdTMyIGJtYWNfYWRkciA9IHBvcnQgPyBOSUdfUkVHX0lOR1JFU1NfQk1BQzFfTUVNIDoKKwkJTklHX1JFR19JTkdSRVNTX0JNQUMwX01FTTsKKwl1MzIgd2JfZGF0YVsyXTsKKwl1MzIgbmlnX2JtYWNfZW5hYmxlID0gUkVHX1JEKGJwLCBOSUdfUkVHX0JNQUMwX1JFR1NfT1VUX0VOICsgcG9ydCo0KTsKKworCS8qIE9ubHkgaWYgdGhlIGJtYWMgaXMgb3V0IG9mIHJlc2V0ICovCisJaWYgKFJFR19SRChicCwgTUlTQ19SRUdfUkVTRVRfUkVHXzIpICYKKwkJCShNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9SU1RfQk1BQzAgPDwgcG9ydCkgJiYKKwkgICAgbmlnX2JtYWNfZW5hYmxlKSB7CisKKwkJLyogQ2xlYXIgUnggRW5hYmxlIGJpdCBpbiBCTUFDX0NPTlRST0wgcmVnaXN0ZXIgKi8KKwkJUkVHX1JEX0RNQUUoYnAsIGJtYWNfYWRkciArIEJJR01BQ19SRUdJU1RFUl9CTUFDX0NPTlRST0wsCisJCQkgICAgd2JfZGF0YSwgMik7CisJCXdiX2RhdGFbMF0gJj0gfkJNQUNfQ09OVFJPTF9SWF9FTkFCTEU7CisJCVJFR19XUl9ETUFFKGJwLCBibWFjX2FkZHIgKyBCSUdNQUNfUkVHSVNURVJfQk1BQ19DT05UUk9MLAorCQkJICAgIHdiX2RhdGEsIDIpOworCisJCW1zbGVlcCgxKTsKKwl9Cit9CisKK3N0YXRpYyB1OCBibngyeF9wYmZfdXBkYXRlKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCB1MzIgZmxvd19jdHJsLAorCQkJIHUzMiBsaW5lX3NwZWVkKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJdTMyIGluaXRfY3JkLCBjcmQ7CisJdTMyIGNvdW50ID0gMTAwMDsKKworCS8qIGRpc2FibGUgcG9ydCAqLworCVJFR19XUihicCwgUEJGX1JFR19ESVNBQkxFX05FV19UQVNLX1BST0NfUDAgKyBwb3J0KjQsIDB4MSk7CisKKwkvKiB3YWl0IGZvciBpbml0IGNyZWRpdCAqLworCWluaXRfY3JkID0gUkVHX1JEKGJwLCBQQkZfUkVHX1AwX0lOSVRfQ1JEICsgcG9ydCo0KTsKKwljcmQgPSBSRUdfUkQoYnAsIFBCRl9SRUdfUDBfQ1JFRElUICsgcG9ydCo4KTsKKwlEUChORVRJRl9NU0dfTElOSywgImluaXRfY3JkIDB4JXggIGNyZCAweCV4XG4iLCBpbml0X2NyZCwgY3JkKTsKKworCXdoaWxlICgoaW5pdF9jcmQgIT0gY3JkKSAmJiBjb3VudCkgeworCQltc2xlZXAoNSk7CisKKwkJY3JkID0gUkVHX1JEKGJwLCBQQkZfUkVHX1AwX0NSRURJVCArIHBvcnQqOCk7CisJCWNvdW50LS07CisJfQorCWNyZCA9IFJFR19SRChicCwgUEJGX1JFR19QMF9DUkVESVQgKyBwb3J0KjgpOworCWlmIChpbml0X2NyZCAhPSBjcmQpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJCVUchIGluaXRfY3JkIDB4JXggIT0gY3JkIDB4JXhcbiIsCisJCQkgIGluaXRfY3JkLCBjcmQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZmxvd19jdHJsICYgQk5YMlhfRkxPV19DVFJMX1JYIHx8CisJICAgIGxpbmVfc3BlZWQgPT0gU1BFRURfMTAgfHwKKwkgICAgbGluZV9zcGVlZCA9PSBTUEVFRF8xMDAgfHwKKwkgICAgbGluZV9zcGVlZCA9PSBTUEVFRF8xMDAwIHx8CisJICAgIGxpbmVfc3BlZWQgPT0gU1BFRURfMjUwMCkgeworCQlSRUdfV1IoYnAsIFBCRl9SRUdfUDBfUEFVU0VfRU5BQkxFICsgcG9ydCo0LCAxKTsKKwkJLyogdXBkYXRlIHRocmVzaG9sZCAqLworCQlSRUdfV1IoYnAsIFBCRl9SRUdfUDBfQVJCX1RIUlNIICsgcG9ydCo0LCAwKTsKKwkJLyogdXBkYXRlIGluaXQgY3JlZGl0ICovCisJCWluaXRfY3JkID0gNzc4OyAJLyogKDgwMC0xOC00KSAqLworCisJfSBlbHNlIHsKKwkJdTMyIHRocmVzaCA9IChFVEhfTUFYX0pVTUJPX1BBQ0tFVF9TSVpFICsKKwkJCSAgICAgIEVUSF9PVlJFSEVBRCkvMTY7CisJCVJFR19XUihicCwgUEJGX1JFR19QMF9QQVVTRV9FTkFCTEUgKyBwb3J0KjQsIDApOworCQkvKiB1cGRhdGUgdGhyZXNob2xkICovCisJCVJFR19XUihicCwgUEJGX1JFR19QMF9BUkJfVEhSU0ggKyBwb3J0KjQsIHRocmVzaCk7CisJCS8qIHVwZGF0ZSBpbml0IGNyZWRpdCAqLworCQlzd2l0Y2ggKGxpbmVfc3BlZWQpIHsKKwkJY2FzZSBTUEVFRF8xMDAwMDoKKwkJCWluaXRfY3JkID0gdGhyZXNoICsgNTUzIC0gMjI7CisJCQlicmVhazsKKworCQljYXNlIFNQRUVEXzEyMDAwOgorCQkJaW5pdF9jcmQgPSB0aHJlc2ggKyA2NjQgLSAyMjsKKwkJCWJyZWFrOworCisJCWNhc2UgU1BFRURfMTMwMDA6CisJCQlpbml0X2NyZCA9IHRocmVzaCArIDc0MiAtIDIyOworCQkJYnJlYWs7CisKKwkJY2FzZSBTUEVFRF8xNjAwMDoKKwkJCWluaXRfY3JkID0gdGhyZXNoICsgNzc4IC0gMjI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURQKE5FVElGX01TR19MSU5LLCAiSW52YWxpZCBsaW5lX3NwZWVkIDB4JXhcbiIsCisJCQkJICBsaW5lX3NwZWVkKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCVJFR19XUihicCwgUEJGX1JFR19QMF9JTklUX0NSRCArIHBvcnQqNCwgaW5pdF9jcmQpOworCURQKE5FVElGX01TR19MSU5LLCAiUEJGIHVwZGF0ZWQgdG8gc3BlZWQgJWQgY3JlZGl0ICVkXG4iLAorCQkgbGluZV9zcGVlZCwgaW5pdF9jcmQpOworCisJLyogcHJvYmUgdGhlIGNyZWRpdCBjaGFuZ2VzICovCisJUkVHX1dSKGJwLCBQQkZfUkVHX0lOSVRfUDAgKyBwb3J0KjQsIDB4MSk7CisJbXNsZWVwKDUpOworCVJFR19XUihicCwgUEJGX1JFR19JTklUX1AwICsgcG9ydCo0LCAweDApOworCisJLyogZW5hYmxlIHBvcnQgKi8KKwlSRUdfV1IoYnAsIFBCRl9SRUdfRElTQUJMRV9ORVdfVEFTS19QUk9DX1AwICsgcG9ydCo0LCAweDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGJueDJ4X2dldF9lbWFjX2Jhc2Uoc3RydWN0IGJueDJ4ICpicCwgdTMyIGV4dF9waHlfdHlwZSwgdTggcG9ydCkKK3sKKwl1MzIgZW1hY19iYXNlOworCisJc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNzoKKwkJLyogQWxsIE1EQy9NRElPIGlzIGRpcmVjdGVkIHRocm91Z2ggc2luZ2xlIEVNQUMgKi8KKwkJaWYgKFJFR19SRChicCwgTklHX1JFR19QT1JUX1NXQVApKQorCQkJZW1hY19iYXNlID0gR1JDQkFTRV9FTUFDMDsKKwkJZWxzZQorCQkJZW1hY19iYXNlID0gR1JDQkFTRV9FTUFDMTsKKwkJYnJlYWs7CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgorCQllbWFjX2Jhc2UgPSAocG9ydCkgPyBHUkNCQVNFX0VNQUMwIDogR1JDQkFTRV9FTUFDMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZW1hY19iYXNlID0gKHBvcnQpID8gR1JDQkFTRV9FTUFDMSA6IEdSQ0JBU0VfRU1BQzA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gZW1hY19iYXNlOworCit9CisKK3U4IGJueDJ4X2NsNDVfd3JpdGUoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwgdTMyIGV4dF9waHlfdHlwZSwKKwkJICB1OCBwaHlfYWRkciwgdTggZGV2YWQsIHUxNiByZWcsIHUxNiB2YWwpCit7CisJdTMyIHRtcCwgc2F2ZWRfbW9kZTsKKwl1OCBpLCByYyA9IDA7CisJdTMyIG1kaW9fY3RybCA9IGJueDJ4X2dldF9lbWFjX2Jhc2UoYnAsIGV4dF9waHlfdHlwZSwgcG9ydCk7CisKKwkvKiBzZXQgY2xhdXNlIDQ1IG1vZGUsIHNsb3cgZG93biB0aGUgTURJTyBjbG9jayB0byAyLjVNSHoKKwkgKiAoYSB2YWx1ZSBvZiA0OT09MHgzMSkgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoZSBBVVRPIHBvbGwgaXMgb2ZmCisJICovCisKKwlzYXZlZF9tb2RlID0gUkVHX1JEKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSk7CisJdG1wID0gc2F2ZWRfbW9kZSAmIH4oRU1BQ19NRElPX01PREVfQVVUT19QT0xMIHwKKwkJCSAgICAgRU1BQ19NRElPX01PREVfQ0xPQ0tfQ05UKTsKKwl0bXAgfD0gKEVNQUNfTURJT19NT0RFX0NMQVVTRV80NSB8CisJCSg0OSA8PCBFTUFDX01ESU9fTU9ERV9DTE9DS19DTlRfQklUU0hJRlQpKTsKKwlSRUdfV1IoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19NT0RFLCB0bXApOworCVJFR19SRChicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX01PREUpOworCXVkZWxheSg0MCk7CisKKwkvKiBhZGRyZXNzICovCisKKwl0bXAgPSAoKHBoeV9hZGRyIDw8IDIxKSB8IChkZXZhZCA8PCAxNikgfCByZWcgfAorCSAgICAgICBFTUFDX01ESU9fQ09NTV9DT01NQU5EX0FERFJFU1MgfAorCSAgICAgICBFTUFDX01ESU9fQ09NTV9TVEFSVF9CVVNZKTsKKwlSRUdfV1IoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19DT01NLCB0bXApOworCisJZm9yIChpID0gMDsgaSA8IDUwOyBpKyspIHsKKwkJdWRlbGF5KDEwKTsKKworCQl0bXAgPSBSRUdfUkQoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19DT01NKTsKKwkJaWYgKCEodG1wICYgRU1BQ19NRElPX0NPTU1fU1RBUlRfQlVTWSkpIHsKKwkJCXVkZWxheSg1KTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICh0bXAgJiBFTUFDX01ESU9fQ09NTV9TVEFSVF9CVVNZKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAid3JpdGUgcGh5IHJlZ2lzdGVyIGZhaWxlZFxuIik7CisJCXJjID0gLUVGQVVMVDsKKwl9IGVsc2UgeworCQkvKiBkYXRhICovCisJCXRtcCA9ICgocGh5X2FkZHIgPDwgMjEpIHwgKGRldmFkIDw8IDE2KSB8IHZhbCB8CisJCSAgICAgICBFTUFDX01ESU9fQ09NTV9DT01NQU5EX1dSSVRFXzQ1IHwKKwkJICAgICAgIEVNQUNfTURJT19DT01NX1NUQVJUX0JVU1kpOworCQlSRUdfV1IoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19DT01NLCB0bXApOworCisJCWZvciAoaSA9IDA7IGkgPCA1MDsgaSsrKSB7CisJCQl1ZGVsYXkoMTApOworCisJCQl0bXAgPSBSRUdfUkQoYnAsIG1kaW9fY3RybCArCisJCQkJCSBFTUFDX1JFR19FTUFDX01ESU9fQ09NTSk7CisJCQlpZiAoISh0bXAgJiBFTUFDX01ESU9fQ09NTV9TVEFSVF9CVVNZKSkgeworCQkJCXVkZWxheSg1KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAodG1wICYgRU1BQ19NRElPX0NPTU1fU1RBUlRfQlVTWSkgeworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJ3cml0ZSBwaHkgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKKwkJCXJjID0gLUVGQVVMVDsKKwkJfQorCX0KKworCS8qIFJlc3RvcmUgdGhlIHNhdmVkIG1vZGUgKi8KKwlSRUdfV1IoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19NT0RFLCBzYXZlZF9tb2RlKTsKKworCXJldHVybiByYzsKK30KKwordTggYm54MnhfY2w0NV9yZWFkKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsIHUzMiBleHRfcGh5X3R5cGUsCisJCSB1OCBwaHlfYWRkciwgdTggZGV2YWQsIHUxNiByZWcsIHUxNiAqcmV0X3ZhbCkKK3sKKwl1MzIgdmFsLCBzYXZlZF9tb2RlOworCXUxNiBpOworCXU4IHJjID0gMDsKKworCXUzMiBtZGlvX2N0cmwgPSBibngyeF9nZXRfZW1hY19iYXNlKGJwLCBleHRfcGh5X3R5cGUsIHBvcnQpOworCS8qIHNldCBjbGF1c2UgNDUgbW9kZSwgc2xvdyBkb3duIHRoZSBNRElPIGNsb2NrIHRvIDIuNU1IegorCSAqIChhIHZhbHVlIG9mIDQ5PT0weDMxKSBhbmQgbWFrZSBzdXJlIHRoYXQgdGhlIEFVVE8gcG9sbCBpcyBvZmYKKwkgKi8KKworCXNhdmVkX21vZGUgPSBSRUdfUkQoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19NT0RFKTsKKwl2YWwgPSBzYXZlZF9tb2RlICYgKChFTUFDX01ESU9fTU9ERV9BVVRPX1BPTEwgfAorCQkJICAgICBFTUFDX01ESU9fTU9ERV9DTE9DS19DTlQpKTsKKwl2YWwgfD0gKEVNQUNfTURJT19NT0RFX0NMQVVTRV80NSB8CisJCSg0OUwgPDwgRU1BQ19NRElPX01PREVfQ0xPQ0tfQ05UX0JJVFNISUZUKSk7CisJUkVHX1dSKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSwgdmFsKTsKKwlSRUdfUkQoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19NT0RFKTsKKwl1ZGVsYXkoNDApOworCisJLyogYWRkcmVzcyAqLworCXZhbCA9ICgocGh5X2FkZHIgPDwgMjEpIHwgKGRldmFkIDw8IDE2KSB8IHJlZyB8CisJICAgICAgIEVNQUNfTURJT19DT01NX0NPTU1BTkRfQUREUkVTUyB8CisJICAgICAgIEVNQUNfTURJT19DT01NX1NUQVJUX0JVU1kpOworCVJFR19XUihicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX0NPTU0sIHZhbCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNTA7IGkrKykgeworCQl1ZGVsYXkoMTApOworCisJCXZhbCA9IFJFR19SRChicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX0NPTU0pOworCQlpZiAoISh2YWwgJiBFTUFDX01ESU9fQ09NTV9TVEFSVF9CVVNZKSkgeworCQkJdWRlbGF5KDUpOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHZhbCAmIEVNQUNfTURJT19DT01NX1NUQVJUX0JVU1kpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJyZWFkIHBoeSByZWdpc3RlciBmYWlsZWRcbiIpOworCisJCSpyZXRfdmFsID0gMDsKKwkJcmMgPSAtRUZBVUxUOworCisJfSBlbHNlIHsKKwkJLyogZGF0YSAqLworCQl2YWwgPSAoKHBoeV9hZGRyIDw8IDIxKSB8IChkZXZhZCA8PCAxNikgfAorCQkgICAgICAgRU1BQ19NRElPX0NPTU1fQ09NTUFORF9SRUFEXzQ1IHwKKwkJICAgICAgIEVNQUNfTURJT19DT01NX1NUQVJUX0JVU1kpOworCQlSRUdfV1IoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19DT01NLCB2YWwpOworCisJCWZvciAoaSA9IDA7IGkgPCA1MDsgaSsrKSB7CisJCQl1ZGVsYXkoMTApOworCisJCQl2YWwgPSBSRUdfUkQoYnAsIG1kaW9fY3RybCArCisJCQkJCSAgRU1BQ19SRUdfRU1BQ19NRElPX0NPTU0pOworCQkJaWYgKCEodmFsICYgRU1BQ19NRElPX0NPTU1fU1RBUlRfQlVTWSkpIHsKKwkJCQkqcmV0X3ZhbCA9ICh1MTYpKHZhbCAmIEVNQUNfTURJT19DT01NX0RBVEEpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICh2YWwgJiBFTUFDX01ESU9fQ09NTV9TVEFSVF9CVVNZKSB7CisJCQlEUChORVRJRl9NU0dfTElOSywgInJlYWQgcGh5IHJlZ2lzdGVyIGZhaWxlZFxuIik7CisKKwkJCSpyZXRfdmFsID0gMDsKKwkJCXJjID0gLUVGQVVMVDsKKwkJfQorCX0KKworCS8qIFJlc3RvcmUgdGhlIHNhdmVkIG1vZGUgKi8KKwlSRUdfV1IoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19NT0RFLCBzYXZlZF9tb2RlKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgYm54Mnhfc2V0X2Flcl9tbWQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgc3RydWN0IGxpbmtfdmFycyAgICp2YXJzKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXUzMiBzZXJfbGFuZTsKKwl1MTYgb2Zmc2V0OworCisJc2VyX2xhbmUgPSAoKHBhcmFtcy0+bGFuZV9jb25maWcgJgorCQkgICAgIFBPUlRfSFdfQ0ZHX0xBTkVfU1dBUF9DRkdfTUFTVEVSX01BU0spID4+CisJCSAgICAgUE9SVF9IV19DRkdfTEFORV9TV0FQX0NGR19NQVNURVJfU0hJRlQpOworCisJb2Zmc2V0ID0gKHZhcnMtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpID8KKwkJKHBhcmFtcy0+cGh5X2FkZHIgKyBzZXJfbGFuZSkgOiAwOworCisJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX0FFUl9CTE9DSywKKwkJCSAgICAgIE1ESU9fQUVSX0JMT0NLX0FFUl9SRUcsIDB4MzgwMCArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3NldF9tYXN0ZXJfbG4oc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTE2IG5ld19tYXN0ZXJfbG4sIHNlcl9sYW5lOworCXNlcl9sYW5lID0gICgocGFyYW1zLT5sYW5lX2NvbmZpZyAmCisJCSAgICAgUE9SVF9IV19DRkdfTEFORV9TV0FQX0NGR19NQVNURVJfTUFTSykgPj4KKwkJICAgICBQT1JUX0hXX0NGR19MQU5FX1NXQVBfQ0ZHX01BU1RFUl9TSElGVCk7CisKKwkvKiBzZXQgdGhlIG1hc3Rlcl9sbiBmb3IgQU4gKi8KKwlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUkVHX0JBTktfWEdYU19CTE9DSzIsCisJCQkgICAgICBNRElPX1hHWFNfQkxPQ0syX1RFU1RfTU9ERV9MQU5FLAorCQkJICAgICAgJm5ld19tYXN0ZXJfbG4pOworCisJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX1hHWFNfQkxPQ0syICwKKwkJCSAgICAgIE1ESU9fWEdYU19CTE9DSzJfVEVTVF9NT0RFX0xBTkUsCisJCQkgICAgICAobmV3X21hc3Rlcl9sbiB8IHNlcl9sYW5lKSk7Cit9CisKK3N0YXRpYyB1OCBibngyeF9yZXNldF91bmljb3JlKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXUxNiBtaWlfY29udHJvbDsKKwl1MTYgaTsKKworCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCwKKwkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsICZtaWlfY29udHJvbCk7CisKKwkvKiByZXNldCB0aGUgdW5pY29yZSAqLworCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCwKKwkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsCisJCQkgICAgICAobWlpX2NvbnRyb2wgfAorCQkJICAgICAgIE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9SRVNFVCkpOworCWlmIChwYXJhbXMtPnN3aXRjaF9jZmcgPT0gU1dJVENIX0NGR18xRykKKwkJYm54Mnhfc2V0X3NlcmRlc19hY2Nlc3MocGFyYW1zKTsKKworCS8qIHdhaXQgZm9yIHRoZSByZXNldCB0byBzZWxmIGNsZWFyICovCisJZm9yIChpID0gMDsgaSA8IE1ESU9fQUNDRVNTX1RJTUVPVVQ7IGkrKykgeworCQl1ZGVsYXkoNSk7CisKKwkJLyogdGhlIHJlc2V0IGVyYXNlZCB0aGUgcHJldmlvdXMgYmFuayB2YWx1ZSAqLworCQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAorCQkJICAgICAgTURJT19DT01CT19JRUVFMF9NSUlfQ09OVFJPTCwKKwkJCSAgICAgICZtaWlfY29udHJvbCk7CisKKwkJaWYgKCEobWlpX2NvbnRyb2wgJiBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfUkVTRVQpKSB7CisJCQl1ZGVsYXkoNSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCURQKE5FVElGX01TR19MSU5LLCAiQlVHISBYR1hTIGlzIHN0aWxsIGluIHJlc2V0IVxuIik7CisJcmV0dXJuIC1FSU5WQUw7CisKK30KKworc3RhdGljIHZvaWQgYm54Mnhfc2V0X3N3YXBfbGFuZXMoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJLyogRWFjaCB0d28gYml0cyByZXByZXNlbnRzIGEgbGFuZSBudW1iZXI6CisJICAgTm8gc3dhcCBpcyAwMTIzID0+IDB4MWIgbm8gbmVlZCB0byBlbmFibGUgdGhlIHN3YXAgKi8KKwl1MTYgc2VyX2xhbmUsIHJ4X2xhbmVfc3dhcCwgdHhfbGFuZV9zd2FwOworCisJc2VyX2xhbmUgPSAoKHBhcmFtcy0+bGFuZV9jb25maWcgJgorCQkJIFBPUlRfSFdfQ0ZHX0xBTkVfU1dBUF9DRkdfTUFTVEVSX01BU0spID4+CisJCQlQT1JUX0hXX0NGR19MQU5FX1NXQVBfQ0ZHX01BU1RFUl9TSElGVCk7CisJcnhfbGFuZV9zd2FwID0gKChwYXJhbXMtPmxhbmVfY29uZmlnICYKKwkJCSAgICAgUE9SVF9IV19DRkdfTEFORV9TV0FQX0NGR19SWF9NQVNLKSA+PgorCQkJICAgIFBPUlRfSFdfQ0ZHX0xBTkVfU1dBUF9DRkdfUlhfU0hJRlQpOworCXR4X2xhbmVfc3dhcCA9ICgocGFyYW1zLT5sYW5lX2NvbmZpZyAmCisJCQkgICAgIFBPUlRfSFdfQ0ZHX0xBTkVfU1dBUF9DRkdfVFhfTUFTSykgPj4KKwkJCSAgICBQT1JUX0hXX0NGR19MQU5FX1NXQVBfQ0ZHX1RYX1NISUZUKTsKKworCWlmIChyeF9sYW5lX3N3YXAgIT0gMHgxYikgeworCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkJICAgIE1ESU9fUkVHX0JBTktfWEdYU19CTE9DSzIsCisJCQkJICAgIE1ESU9fWEdYU19CTE9DSzJfUlhfTE5fU1dBUCwKKwkJCQkgICAgKHJ4X2xhbmVfc3dhcCB8CisJCQkJICAgIE1ESU9fWEdYU19CTE9DSzJfUlhfTE5fU1dBUF9FTkFCTEUgfAorCQkJCSAgICBNRElPX1hHWFNfQkxPQ0syX1JYX0xOX1NXQVBfRk9SQ0VfRU5BQkxFKSk7CisJfSBlbHNlIHsKKwkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfWEdYU19CTE9DSzIsCisJCQkJICAgICAgTURJT19YR1hTX0JMT0NLMl9SWF9MTl9TV0FQLCAwKTsKKwl9CisKKwlpZiAodHhfbGFuZV9zd2FwICE9IDB4MWIpIHsKKwkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfWEdYU19CTE9DSzIsCisJCQkJICAgICAgTURJT19YR1hTX0JMT0NLMl9UWF9MTl9TV0FQLAorCQkJCSAgICAgICh0eF9sYW5lX3N3YXAgfAorCQkJCSAgICAgICBNRElPX1hHWFNfQkxPQ0syX1RYX0xOX1NXQVBfRU5BQkxFKSk7CisJfSBlbHNlIHsKKwkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfWEdYU19CTE9DSzIsCisJCQkJICAgICAgTURJT19YR1hTX0JMT0NLMl9UWF9MTl9TV0FQLCAwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3NldF9wYXJhbGxlbF9kZXRlY3Rpb24oc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkJICAgICAgIHU4ICAgICAgIAkgcGh5X2ZsYWdzKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXUxNiBjb250cm9sMjsKKworCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19TRVJERVNfRElHSVRBTCwKKwkJCSAgICAgIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMiwKKwkJCSAgICAgICZjb250cm9sMik7CisJaWYgKHBhcmFtcy0+c3BlZWRfY2FwX21hc2sgJiBQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzFHKQorCQljb250cm9sMiB8PSBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDJfUFJMX0RUX0VOOworCWVsc2UKKwkJY29udHJvbDIgJj0gfk1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMl9QUkxfRFRfRU47CisJRFAoTkVUSUZfTVNHX0xJTkssICJwYXJhbXMtPnNwZWVkX2NhcF9tYXNrID0gMHgleCwgY29udHJvbDIgPSAweCV4XG4iLAorCQlwYXJhbXMtPnNwZWVkX2NhcF9tYXNrLCBjb250cm9sMik7CisJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX1NFUkRFU19ESUdJVEFMLAorCQkJICAgICAgTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wyLAorCQkJICAgICAgY29udHJvbDIpOworCisJaWYgKChwaHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSAmJgorCSAgICAgKHBhcmFtcy0+c3BlZWRfY2FwX21hc2sgJgorCQkgICAgUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xMEcpKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiWEdYU1xuIik7CisKKwkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCU1ESU9fUkVHX0JBTktfMTBHX1BBUkFMTEVMX0RFVEVDVCwKKwkJCQlNRElPXzEwR19QQVJBTExFTF9ERVRFQ1RfUEFSX0RFVF8xMEdfTElOSywKKwkJCQlNRElPXzEwR19QQVJBTExFTF9ERVRFQ1RfUEFSX0RFVF8xMEdfTElOS19DTlQpOworCisJCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQlNRElPX1JFR19CQU5LXzEwR19QQVJBTExFTF9ERVRFQ1QsCisJCQkJTURJT18xMEdfUEFSQUxMRUxfREVURUNUX1BBUl9ERVRfMTBHX0NPTlRST0wsCisJCQkJJmNvbnRyb2wyKTsKKworCisJCWNvbnRyb2wyIHw9CisJCSAgICBNRElPXzEwR19QQVJBTExFTF9ERVRFQ1RfUEFSX0RFVF8xMEdfQ09OVFJPTF9QQVJERVQxMEdfRU47CisKKwkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCU1ESU9fUkVHX0JBTktfMTBHX1BBUkFMTEVMX0RFVEVDVCwKKwkJCQlNRElPXzEwR19QQVJBTExFTF9ERVRFQ1RfUEFSX0RFVF8xMEdfQ09OVFJPTCwKKwkJCQljb250cm9sMik7CisKKwkJLyogRGlzYWJsZSBwYXJhbGxlbCBkZXRlY3Rpb24gb2YgSGlHICovCisJCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQlNRElPX1JFR19CQU5LX1hHWFNfQkxPQ0syLAorCQkJCU1ESU9fWEdYU19CTE9DSzJfVU5JQ09SRV9NT0RFXzEwRywKKwkJCQlNRElPX1hHWFNfQkxPQ0syX1VOSUNPUkVfTU9ERV8xMEdfQ1g0X1hHWFMgfAorCQkJCU1ESU9fWEdYU19CTE9DSzJfVU5JQ09SRV9NT0RFXzEwR19ISUdJR19YR1hTKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3NldF9hdXRvbmVnKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAorCQkJICAgIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMsCisJCQkgICAgdTggZW5hYmxlX2NsNzMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTE2IHJlZ192YWw7CisKKwkvKiBDTDM3IEF1dG9uZWcgKi8KKworCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCwKKwkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsICZyZWdfdmFsKTsKKworCS8qIENMMzcgQXV0b25lZyBFbmFibGVkICovCisJaWYgKHZhcnMtPmxpbmVfc3BlZWQgPT0gU1BFRURfQVVUT19ORUcpCisJCXJlZ192YWwgfD0gTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX0FOX0VOOworCWVsc2UgLyogQ0wzNyBBdXRvbmVnIERpc2FibGVkICovCisJCXJlZ192YWwgJj0gfihNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfQU5fRU4gfAorCQkJICAgICBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfUkVTVEFSVF9BTik7CisKKwlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCisJCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLCByZWdfdmFsKTsKKworCS8qIEVuYWJsZS9EaXNhYmxlIEF1dG9kZXRlY3Rpb24gKi8KKworCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19TRVJERVNfRElHSVRBTCwKKwkJCSAgICAgIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMSwgJnJlZ192YWwpOworCXJlZ192YWwgJj0gfihNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDFfU0lHTkFMX0RFVEVDVF9FTiB8CisJCSAgICBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDFfSU5WRVJUX1NJR05BTF9ERVRFQ1QpOworCXJlZ192YWwgfD0gTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wxX0ZJQkVSX01PREU7CisJaWYgKHZhcnMtPmxpbmVfc3BlZWQgPT0gU1BFRURfQVVUT19ORUcpCisJCXJlZ192YWwgfD0gTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wxX0FVVE9ERVQ7CisJZWxzZQorCQlyZWdfdmFsICY9IH5NRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDFfQVVUT0RFVDsKKworCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19TRVJERVNfRElHSVRBTCwKKwkJCSAgICAgIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMSwgcmVnX3ZhbCk7CisKKwkvKiBFbmFibGUgVGV0b25JSSBhbmQgQkFNIGF1dG9uZWcgKi8KKwlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUkVHX0JBTktfQkFNX05FWFRfUEFHRSwKKwkJCSAgICAgIE1ESU9fQkFNX05FWFRfUEFHRV9NUDVfTkVYVF9QQUdFX0NUUkwsCisJCQkgICZyZWdfdmFsKTsKKwlpZiAodmFycy0+bGluZV9zcGVlZCA9PSBTUEVFRF9BVVRPX05FRykgeworCQkvKiBFbmFibGUgQkFNIGFuZWcgTW9kZSBhbmQgVGV0b25JSSBhbmVnIE1vZGUgKi8KKwkJcmVnX3ZhbCB8PSAoTURJT19CQU1fTkVYVF9QQUdFX01QNV9ORVhUX1BBR0VfQ1RSTF9CQU1fTU9ERSB8CisJCQkgICAgTURJT19CQU1fTkVYVF9QQUdFX01QNV9ORVhUX1BBR0VfQ1RSTF9URVRPTl9BTik7CisJfSBlbHNlIHsKKwkJLyogVGV0b25JSSBhbmQgQkFNIEF1dG9uZWcgRGlzYWJsZWQgKi8KKwkJcmVnX3ZhbCAmPSB+KE1ESU9fQkFNX05FWFRfUEFHRV9NUDVfTkVYVF9QQUdFX0NUUkxfQkFNX01PREUgfAorCQkJICAgICBNRElPX0JBTV9ORVhUX1BBR0VfTVA1X05FWFRfUEFHRV9DVFJMX1RFVE9OX0FOKTsKKwl9CisJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX0JBTV9ORVhUX1BBR0UsCisJCQkgICAgICBNRElPX0JBTV9ORVhUX1BBR0VfTVA1X05FWFRfUEFHRV9DVFJMLAorCQkJICAgICAgcmVnX3ZhbCk7CisKKwlpZiAoZW5hYmxlX2NsNzMpIHsKKwkJLyogRW5hYmxlIENsNzMgRlNNIHN0YXR1cyBiaXRzICovCisJCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1JFR19CQU5LX0NMNzNfVVNFUkIwLAorCQkJCSAgICBNRElPX0NMNzNfVVNFUkIwX0NMNzNfVUNUUkwsCisJCQkJICAgICAgMHhlKTsKKworCQkvKiBFbmFibGUgQkFNIFN0YXRpb24gTWFuYWdlciovCisJCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQlwYXJhbXMtPnBoeV9hZGRyLAorCQkJTURJT19SRUdfQkFOS19DTDczX1VTRVJCMCwKKwkJCU1ESU9fQ0w3M19VU0VSQjBfQ0w3M19CQU1fQ1RSTDEsCisJCQlNRElPX0NMNzNfVVNFUkIwX0NMNzNfQkFNX0NUUkwxX0JBTV9FTiB8CisJCQlNRElPX0NMNzNfVVNFUkIwX0NMNzNfQkFNX0NUUkwxX0JBTV9TVEFUSU9OX01OR1JfRU4gfAorCQkJTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMV9CQU1fTlBfQUZURVJfQlBfRU4pOworCisJCS8qIEFkdmVydGlzZSBDTDczIGxpbmsgc3BlZWRzICovCisJCQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCQkgICAgICBNRElPX1JFR19CQU5LX0NMNzNfSUVFRUIxLAorCQkJCQkgICAgICBNRElPX0NMNzNfSUVFRUIxX0FOX0FEVjIsCisJCQkJCSAgICAgICZyZWdfdmFsKTsKKwkJaWYgKHBhcmFtcy0+c3BlZWRfY2FwX21hc2sgJgorCQkgICAgUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xMEcpCisJCQlyZWdfdmFsIHw9IE1ESU9fQ0w3M19JRUVFQjFfQU5fQURWMl9BRFZSXzEwR19LWDQ7CisJCWlmIChwYXJhbXMtPnNwZWVkX2NhcF9tYXNrICYKKwkJICAgIFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMUcpCisJCQlyZWdfdmFsIHw9IE1ESU9fQ0w3M19JRUVFQjFfQU5fQURWMl9BRFZSXzEwMDBNX0tYOworCisJCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCQkgICAgICBNRElPX1JFR19CQU5LX0NMNzNfSUVFRUIxLAorCQkJCQkgICAgICBNRElPX0NMNzNfSUVFRUIxX0FOX0FEVjIsCisJCQkJICAgICAgcmVnX3ZhbCk7CisKKwkJLyogQ0w3MyBBdXRvbmVnIEVuYWJsZWQgKi8KKwkJcmVnX3ZhbCA9IE1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MX0FOX0VOOworCisJfSBlbHNlIC8qIENMNzMgQXV0b25lZyBEaXNhYmxlZCAqLworCQlyZWdfdmFsID0gMDsKKworCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX0lFRUVCMCwKKwkJCSAgICAgIE1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MLCByZWdfdmFsKTsKK30KKworLyogcHJvZ3JhbSBTZXJEZXMsIGZvcmNlZCBzcGVlZCAqLworc3RhdGljIHZvaWQgYm54MnhfcHJvZ3JhbV9zZXJkZXMoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgICAgc3RydWN0IGxpbmtfdmFycyAqdmFycykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MTYgcmVnX3ZhbDsKKworCS8qIHByb2dyYW0gZHVwbGV4LCBkaXNhYmxlIGF1dG9uZWcgYW5kIHNnbWlpKi8KKwlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCisJCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLCAmcmVnX3ZhbCk7CisJcmVnX3ZhbCAmPSB+KE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9GVUxMX0RVUExFWCB8CisJCSAgICAgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX0FOX0VOIHwKKwkJICAgICBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfTUFOX1NHTUlJX1NQX01BU0spOworCWlmIChwYXJhbXMtPnJlcV9kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCisJCXJlZ192YWwgfD0gTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX0ZVTExfRFVQTEVYOworCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCwKKwkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsIHJlZ192YWwpOworCisJLyogcHJvZ3JhbSBzcGVlZAorCSAgIC0gbmVlZGVkIG9ubHkgaWYgdGhlIHNwZWVkIGlzIGdyZWF0ZXIgdGhhbiAxRyAoMi41RyBvciAxMEcpICovCisJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfU0VSREVTX0RJR0lUQUwsCisJCQkJICAgICAgTURJT19TRVJERVNfRElHSVRBTF9NSVNDMSwgJnJlZ192YWwpOworCS8qIGNsZWFyaW5nIHRoZSBzcGVlZCB2YWx1ZSBiZWZvcmUgc2V0dGluZyB0aGUgcmlnaHQgc3BlZWQgKi8KKwlEUChORVRJRl9NU0dfTElOSywgIk1ESU9fUkVHX0JBTktfU0VSREVTX0RJR0lUQUwgPSAweCV4XG4iLCByZWdfdmFsKTsKKworCXJlZ192YWwgJj0gfihNRElPX1NFUkRFU19ESUdJVEFMX01JU0MxX0ZPUkNFX1NQRUVEX01BU0sgfAorCQkgICAgIE1ESU9fU0VSREVTX0RJR0lUQUxfTUlTQzFfRk9SQ0VfU1BFRURfU0VMKTsKKworCWlmICghKCh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEXzEwMDApIHx8CisJICAgICAgKHZhcnMtPmxpbmVfc3BlZWQgPT0gU1BFRURfMTAwKSB8fAorCSAgICAgICh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEXzEwKSkpIHsKKworCQlyZWdfdmFsIHw9IChNRElPX1NFUkRFU19ESUdJVEFMX01JU0MxX1JFRkNMS19TRUxfMTU2XzI1TSB8CisJCQkgICAgTURJT19TRVJERVNfRElHSVRBTF9NSVNDMV9GT1JDRV9TUEVFRF9TRUwpOworCQlpZiAodmFycy0+bGluZV9zcGVlZCA9PSBTUEVFRF8xMDAwMCkKKwkJCXJlZ192YWwgfD0KKwkJCQlNRElPX1NFUkRFU19ESUdJVEFMX01JU0MxX0ZPUkNFX1NQRUVEXzEwR19DWDQ7CisJCWlmICh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEXzEzMDAwKQorCQkJcmVnX3ZhbCB8PQorCQkJCU1ESU9fU0VSREVTX0RJR0lUQUxfTUlTQzFfRk9SQ0VfU1BFRURfMTNHOworCX0KKworCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1JFR19CQU5LX1NFUkRFU19ESUdJVEFMLAorCQkJCSAgICAgIE1ESU9fU0VSREVTX0RJR0lUQUxfTUlTQzEsIHJlZ192YWwpOworCit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3NldF9icmNtX2NsMzdfYWR2ZXJ0aXNtZW50KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXUxNiB2YWwgPSAwOworCisJLyogY29uZmlndXJlIHRoZSA0OCBiaXRzIGZvciBCQU0gQU4gKi8KKworCS8qIHNldCBleHRlbmRlZCBjYXBhYmlsaXRpZXMgKi8KKwlpZiAocGFyYW1zLT5zcGVlZF9jYXBfbWFzayAmIFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMl81RykKKwkJdmFsIHw9IE1ESU9fT1ZFUl8xR19VUDFfMl81RzsKKwlpZiAocGFyYW1zLT5zcGVlZF9jYXBfbWFzayAmIFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMTBHKQorCQl2YWwgfD0gTURJT19PVkVSXzFHX1VQMV8xMEc7CisJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX09WRVJfMUcsCisJCQkgICAgICBNRElPX09WRVJfMUdfVVAxLCB2YWwpOworCisJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX09WRVJfMUcsCisJCQkgICAgICBNRElPX09WRVJfMUdfVVAzLCAweDQwMCk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2NhbGNfaWVlZV9hbmVnX2FkdihzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgdTE2ICppZWVlX2ZjKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCSppZWVlX2ZjID0gTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfRlVMTF9EVVBMRVg7CisJLyogcmVzb2x2ZSBwYXVzZSBtb2RlIGFuZCBhZHZlcnRpc2VtZW50CisJICogUGxlYXNlIHJlZmVyIHRvIFRhYmxlIDI4Qi0zIG9mIHRoZSA4MDIuM2FiLTE5OTkgc3BlYyAqLworCisJc3dpdGNoIChwYXJhbXMtPnJlcV9mbG93X2N0cmwpIHsKKwljYXNlIEJOWDJYX0ZMT1dfQ1RSTF9BVVRPOgorCQlpZiAocGFyYW1zLT5yZXFfZmNfYXV0b19hZHYgPT0gQk5YMlhfRkxPV19DVFJMX0JPVEgpIHsKKwkJCSppZWVlX2ZjIHw9CisJCQkgICAgIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0JPVEg7CisJCX0gZWxzZSB7CisJCQkqaWVlZV9mYyB8PQorCQkgICAgICAgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfQVNZTU1FVFJJQzsKKwkJfQorCQlicmVhazsKKwljYXNlIEJOWDJYX0ZMT1dfQ1RSTF9UWDoKKwkJKmllZWVfZmMgfD0KKwkJICAgICAgIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0FTWU1NRVRSSUM7CisJCWJyZWFrOworCisJY2FzZSBCTlgyWF9GTE9XX0NUUkxfUlg6CisJY2FzZSBCTlgyWF9GTE9XX0NUUkxfQk9USDoKKwkJKmllZWVfZmMgfD0gTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfQk9USDsKKwkJYnJlYWs7CisKKwljYXNlIEJOWDJYX0ZMT1dfQ1RSTF9OT05FOgorCWRlZmF1bHQ6CisJCSppZWVlX2ZjIHw9IE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX05PTkU7CisJCWJyZWFrOworCX0KKwlEUChORVRJRl9NU0dfTElOSywgImllZWVfZmMgPSAweCV4XG4iLCAqaWVlZV9mYyk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3NldF9pZWVlX2FuZWdfYWR2ZXJ0aXNtZW50KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAorCQkJCQkgICB1MTYgaWVlZV9mYykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MTYgdmFsOworCS8qIGZvciBBTiwgd2UgYXJlIGFsd2F5cyBwdWJsaXNoaW5nIGZ1bGwgZHVwbGV4ICovCisKKwlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCisJCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEViwgaWVlZV9mYyk7CisJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX0NMNzNfSUVFRUIxLAorCQkJICAgICAgTURJT19DTDczX0lFRUVCMV9BTl9BRFYxLCAmdmFsKTsKKwl2YWwgJj0gfk1ESU9fQ0w3M19JRUVFQjFfQU5fQURWMV9QQVVTRV9CT1RIOworCXZhbCB8PSAoKGllZWVfZmM8PDMpICYgTURJT19DTDczX0lFRUVCMV9BTl9BRFYxX1BBVVNFX01BU0spOworCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX0lFRUVCMSwKKwkJCSAgICAgIE1ESU9fQ0w3M19JRUVFQjFfQU5fQURWMSwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfcmVzdGFydF9hdXRvbmVnKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCB1OCBlbmFibGVfY2w3MykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MTYgbWlpX2NvbnRyb2w7CisKKwlEUChORVRJRl9NU0dfTElOSywgImJueDJ4X3Jlc3RhcnRfYXV0b25lZ1xuIik7CisJLyogRW5hYmxlIGFuZCByZXN0YXJ0IEJBTS9DTDM3IGFuZWcgKi8KKworCWlmIChlbmFibGVfY2w3MykgeworCQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX0lFRUVCMCwKKwkJCQkgICAgICBNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTCwKKwkJCQkgICAgICAmbWlpX2NvbnRyb2wpOworCisJCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJcGFyYW1zLT5waHlfYWRkciwKKwkJCQlNRElPX1JFR19CQU5LX0NMNzNfSUVFRUIwLAorCQkJCU1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MLAorCQkJCShtaWlfY29udHJvbCB8CisJCQkJTURJT19DTDczX0lFRUVCMF9DTDczX0FOX0NPTlRST0xfQU5fRU4gfAorCQkJCU1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MX1JFU1RBUlRfQU4pKTsKKwl9IGVsc2UgeworCisJCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAorCQkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsCisJCQkJICAgICAgJm1paV9jb250cm9sKTsKKwkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkgImJueDJ4X3Jlc3RhcnRfYXV0b25lZyBtaWlfY29udHJvbCBiZWZvcmUgPSAweCV4XG4iLAorCQkJIG1paV9jb250cm9sKTsKKwkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCisJCQkJICAgICAgTURJT19DT01CT19JRUVFMF9NSUlfQ09OVFJPTCwKKwkJCQkgICAgICAobWlpX2NvbnRyb2wgfAorCQkJCSAgICAgICBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfQU5fRU4gfAorCQkJCSAgICAgICBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfUkVTVEFSVF9BTikpOworCX0KK30KKworc3RhdGljIHZvaWQgYm54MnhfaW5pdGlhbGl6ZV9zZ21paV9wcm9jZXNzKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAorCQkJCQkgc3RydWN0IGxpbmtfdmFycyAqdmFycykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MTYgY29udHJvbDE7CisKKwkvKiBpbiBTR01JSSBtb2RlLCB0aGUgdW5pY29yZSBpcyBhbHdheXMgc2xhdmUgKi8KKworCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19TRVJERVNfRElHSVRBTCwKKwkJCSAgICAgIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMSwKKwkJICAgICAgJmNvbnRyb2wxKTsKKwljb250cm9sMSB8PSBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDFfSU5WRVJUX1NJR05BTF9ERVRFQ1Q7CisJLyogc2V0IHNnbWlpIG1vZGUgKGFuZCBub3QgZmliZXIpICovCisJY29udHJvbDEgJj0gfihNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDFfRklCRVJfTU9ERSB8CisJCSAgICAgIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMV9BVVRPREVUIHwKKwkJICAgICAgTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wxX01TVFJfTU9ERSk7CisJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX1NFUkRFU19ESUdJVEFMLAorCQkJICAgICAgTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wxLAorCQkJICAgICAgY29udHJvbDEpOworCisJLyogaWYgZm9yY2VkIHNwZWVkICovCisJaWYgKCEodmFycy0+bGluZV9zcGVlZCA9PSBTUEVFRF9BVVRPX05FRykpIHsKKwkJLyogc2V0IHNwZWVkLCBkaXNhYmxlIGF1dG9uZWcgKi8KKwkJdTE2IG1paV9jb250cm9sOworCisJCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAorCQkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsCisJCQkJICAgICAgJm1paV9jb250cm9sKTsKKwkJbWlpX2NvbnRyb2wgJj0gfihNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfQU5fRU4gfAorCQkJCSBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfTUFOX1NHTUlJX1NQX01BU0t8CisJCQkJIE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9GVUxMX0RVUExFWCk7CisKKwkJc3dpdGNoICh2YXJzLT5saW5lX3NwZWVkKSB7CisJCWNhc2UgU1BFRURfMTAwOgorCQkJbWlpX2NvbnRyb2wgfD0KKwkJCQlNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfTUFOX1NHTUlJX1NQXzEwMDsKKwkJCWJyZWFrOworCQljYXNlIFNQRUVEXzEwMDA6CisJCQltaWlfY29udHJvbCB8PQorCQkJCU1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9NQU5fU0dNSUlfU1BfMTAwMDsKKwkJCWJyZWFrOworCQljYXNlIFNQRUVEXzEwOgorCQkJLyogdGhlcmUgaXMgbm90aGluZyB0byBzZXQgZm9yIDEwTSAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBpbnZhbGlkIHNwZWVkIGZvciBTR01JSSAqLworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJJbnZhbGlkIGxpbmVfc3BlZWQgMHgleFxuIiwKKwkJCQkgIHZhcnMtPmxpbmVfc3BlZWQpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBzZXR0aW5nIHRoZSBmdWxsIGR1cGxleCAqLworCQlpZiAocGFyYW1zLT5yZXFfZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQkJbWlpX2NvbnRyb2wgfD0KKwkJCQlNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfRlVMTF9EVVBMRVg7CisJCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAorCQkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsCisJCQkJICAgICAgbWlpX2NvbnRyb2wpOworCisJfSBlbHNlIHsgLyogQU4gbW9kZSAqLworCQkvKiBlbmFibGUgYW5kIHJlc3RhcnQgQU4gKi8KKwkJYm54MnhfcmVzdGFydF9hdXRvbmVnKHBhcmFtcywgMCk7CisJfQorfQorCisKKy8qCisgKiBsaW5rIG1hbmFnZW1lbnQKKyAqLworCitzdGF0aWMgdm9pZCBibngyeF9wYXVzZV9yZXNvbHZlKHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMsIHUzMiBwYXVzZV9yZXN1bHQpCit7CQkJCQkJLyogIExECSAgICBMUAkgKi8KKwlzd2l0Y2ggKHBhdXNlX3Jlc3VsdCkgeyAJCS8qIEFTWU0gUCBBU1lNIFAgKi8KKwljYXNlIDB4YjogICAgICAgCQkJLyogICAxICAwICAgMSAgMSAqLworCQl2YXJzLT5mbG93X2N0cmwgPSBCTlgyWF9GTE9XX0NUUkxfVFg7CisJCWJyZWFrOworCisJY2FzZSAweGU6ICAgICAgIAkJCS8qICAgMSAgMSAgIDEgIDAgKi8KKwkJdmFycy0+Zmxvd19jdHJsID0gQk5YMlhfRkxPV19DVFJMX1JYOworCQlicmVhazsKKworCWNhc2UgMHg1OiAgICAgICAJCQkvKiAgIDAgIDEgICAwICAxICovCisJY2FzZSAweDc6ICAgICAgIAkJCS8qICAgMCAgMSAgIDEgIDEgKi8KKwljYXNlIDB4ZDogICAgICAgCQkJLyogICAxICAxICAgMCAgMSAqLworCWNhc2UgMHhmOiAgICAgICAJCQkvKiAgIDEgIDEgICAxICAxICovCisJCXZhcnMtPmZsb3dfY3RybCA9IEJOWDJYX0ZMT1dfQ1RSTF9CT1RIOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHU4IGJueDJ4X2V4dF9waHlfcmVzb2x2ZV9mYyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCQkgIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTggZXh0X3BoeV9hZGRyOworCXUxNiBsZF9wYXVzZTsJCS8qIGxvY2FsICovCisJdTE2IGxwX3BhdXNlOwkJLyogbGluayBwYXJ0bmVyICovCisJdTE2IGFuX2NvbXBsZXRlOwkvKiBBTiBjb21wbGV0ZSAqLworCXUxNiBwYXVzZV9yZXN1bHQ7CisJdTggcmV0ID0gMDsKKwl1MzIgZXh0X3BoeV90eXBlOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJZXh0X3BoeV9hZGRyID0gWEdYU19FWFRfUEhZX0FERFIocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisJZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisJLyogcmVhZCB0d2ljZSAqLworCisJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgTURJT19BTl9ERVZBRCwKKwkJICAgICAgTURJT19BTl9SRUdfU1RBVFVTLCAmYW5fY29tcGxldGUpOworCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJICAgICAgZXh0X3BoeV90eXBlLAorCQkgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgIE1ESU9fQU5fREVWQUQsCisJCSAgICAgIE1ESU9fQU5fUkVHX1NUQVRVUywgJmFuX2NvbXBsZXRlKTsKKworCWlmIChhbl9jb21wbGV0ZSAmIE1ESU9fQU5fUkVHX1NUQVRVU19BTl9DT01QTEVURSkgeworCQlyZXQgPSAxOworCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCisJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkJICAgICAgTURJT19BTl9SRUdfQURWX1BBVVNFLCAmbGRfcGF1c2UpOworCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCisJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkJICAgICAgTURJT19BTl9SRUdfTFBfQVVUT19ORUcsICZscF9wYXVzZSk7CisJCXBhdXNlX3Jlc3VsdCA9IChsZF9wYXVzZSAmCisJCQkJTURJT19BTl9SRUdfQURWX1BBVVNFX01BU0spID4+IDg7CisJCXBhdXNlX3Jlc3VsdCB8PSAobHBfcGF1c2UgJgorCQkJCSBNRElPX0FOX1JFR19BRFZfUEFVU0VfTUFTSykgPj4gMTA7CisJCURQKE5FVElGX01TR19MSU5LLCAiRXh0IFBIWSBwYXVzZSByZXN1bHQgMHgleFxuIiwKKwkJICAgcGF1c2VfcmVzdWx0KTsKKwkJYm54MnhfcGF1c2VfcmVzb2x2ZSh2YXJzLCBwYXVzZV9yZXN1bHQpOworCQlpZiAodmFycy0+Zmxvd19jdHJsID09IEJOWDJYX0ZMT1dfQ1RSTF9OT05FICYmCisJCSAgICAgZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMpIHsKKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJICAgICAgTURJT19BTl9SRUdfQ0wzN19GQ19MRCwgJmxkX3BhdXNlKTsKKworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkgICAgICBNRElPX0FOX1JFR19DTDM3X0ZDX0xQLCAmbHBfcGF1c2UpOworCQkJcGF1c2VfcmVzdWx0ID0gKGxkX3BhdXNlICYKKwkJCQlNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9CT1RIKSA+PiA1OworCQkJcGF1c2VfcmVzdWx0IHw9IChscF9wYXVzZSAmCisJCQkJTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfQk9USCkgPj4gNzsKKworCQkJYm54MnhfcGF1c2VfcmVzb2x2ZSh2YXJzLCBwYXVzZV9yZXN1bHQpOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJFeHQgUEhZIENMMzcgcGF1c2UgcmVzdWx0IDB4JXhcbiIsCisJCQkJIHBhdXNlX3Jlc3VsdCk7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHU4IGJueDJ4X2RpcmVjdF9wYXJhbGxlbF9kZXRlY3RfdXNlZChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MTYgcGRfMTBnLCBzdGF0dXMyXzEwMDB4OworCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19TRVJERVNfRElHSVRBTCwKKwkJCSAgICAgIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9TVEFUVVMyLAorCQkJICAgICAgJnN0YXR1czJfMTAwMHgpOworCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19TRVJERVNfRElHSVRBTCwKKwkJCSAgICAgIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9TVEFUVVMyLAorCQkJICAgICAgJnN0YXR1czJfMTAwMHgpOworCWlmIChzdGF0dXMyXzEwMDB4ICYgTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX1NUQVRVUzJfQU5fRElTQUJMRUQpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICIxRyBwYXJhbGxlbCBkZXRlY3QgbGluayBvbiBwb3J0ICVkXG4iLAorCQkJIHBhcmFtcy0+cG9ydCk7CisJCXJldHVybiAxOworCX0KKworCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS18xMEdfUEFSQUxMRUxfREVURUNULAorCQkJICAgICAgTURJT18xMEdfUEFSQUxMRUxfREVURUNUX1BBUl9ERVRfMTBHX1NUQVRVUywKKwkJCSAgICAgICZwZF8xMGcpOworCisJaWYgKHBkXzEwZyAmIE1ESU9fMTBHX1BBUkFMTEVMX0RFVEVDVF9QQVJfREVUXzEwR19TVEFUVVNfUERfTElOSykgeworCQlEUChORVRJRl9NU0dfTElOSywgIjEwRyBwYXJhbGxlbCBkZXRlY3QgbGluayBvbiBwb3J0ICVkXG4iLAorCQkJIHBhcmFtcy0+cG9ydCk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYm54MnhfZmxvd19jdHJsX3Jlc29sdmUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkJICBzdHJ1Y3QgbGlua192YXJzICp2YXJzLAorCQkJCSAgdTMyIGdwX3N0YXR1cykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MTYgbGRfcGF1c2U7ICAgLyogbG9jYWwgZHJpdmVyICovCisJdTE2IGxwX3BhdXNlOyAgIC8qIGxpbmsgcGFydG5lciAqLworCXUxNiBwYXVzZV9yZXN1bHQ7CisKKwl2YXJzLT5mbG93X2N0cmwgPSBCTlgyWF9GTE9XX0NUUkxfTk9ORTsKKworCS8qIHJlc29sdmUgZnJvbSBncF9zdGF0dXMgaW4gY2FzZSBvZiBBTiBjb21wbGV0ZSBhbmQgbm90IHNnbWlpICovCisJaWYgKChwYXJhbXMtPnJlcV9mbG93X2N0cmwgPT0gQk5YMlhfRkxPV19DVFJMX0FVVE8pICYmCisJICAgIChncF9zdGF0dXMgJiBNRElPX0FOX0NMNzNfT1JfMzdfQ09NUExFVEUpICYmCisJICAgICghKHZhcnMtPnBoeV9mbGFncyAmIFBIWV9TR01JSV9GTEFHKSkgJiYKKwkgICAgKFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpID09CisJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1QpKSB7CisJCWlmIChibngyeF9kaXJlY3RfcGFyYWxsZWxfZGV0ZWN0X3VzZWQocGFyYW1zKSkgeworCQkJdmFycy0+Zmxvd19jdHJsID0gcGFyYW1zLT5yZXFfZmNfYXV0b19hZHY7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKChncF9zdGF0dXMgJgorCQkgICAgKE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0NMNzNfQVVUT05FR19DT01QTEVURSB8CisJCSAgICAgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQ0w3M19NUl9MUF9OUF9BTl9BQkxFKSkgPT0KKwkJICAgIChNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9DTDczX0FVVE9ORUdfQ09NUExFVEUgfAorCQkgICAgIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0NMNzNfTVJfTFBfTlBfQU5fQUJMRSkpIHsKKworCQkJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX0lFRUVCMSwKKwkJCQkJICAgICAgTURJT19DTDczX0lFRUVCMV9BTl9BRFYxLAorCQkJCQkgICAgICAmbGRfcGF1c2UpOworCQkJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCQkgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19JRUVFQjEsCisJCQkJCSAgICAgTURJT19DTDczX0lFRUVCMV9BTl9MUF9BRFYxLAorCQkJCQkgICAgICZscF9wYXVzZSk7CisJCQlwYXVzZV9yZXN1bHQgPSAobGRfcGF1c2UgJgorCQkJCQlNRElPX0NMNzNfSUVFRUIxX0FOX0FEVjFfUEFVU0VfTUFTSykKKwkJCQkJPj4gODsKKwkJCXBhdXNlX3Jlc3VsdCB8PSAobHBfcGF1c2UgJgorCQkJCQlNRElPX0NMNzNfSUVFRUIxX0FOX0xQX0FEVjFfUEFVU0VfTUFTSykKKwkJCQkJPj4gMTA7CisJCQlEUChORVRJRl9NU0dfTElOSywgInBhdXNlX3Jlc3VsdCBDTDczIDB4JXhcbiIsCisJCQkJIHBhdXNlX3Jlc3VsdCk7CisJCX0gZWxzZSB7CisKKwkJCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCisJCQkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWLAorCQkJCQkgICAgICAmbGRfcGF1c2UpOworCQkJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCisJCQkgICAgICAgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19MSU5LX1BBUlRORVJfQUJJTElUWTEsCisJCQkgICAgICAgJmxwX3BhdXNlKTsKKwkJCXBhdXNlX3Jlc3VsdCA9IChsZF9wYXVzZSAmCisJCQkJTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfTUFTSyk+PjU7CisJCQlwYXVzZV9yZXN1bHQgfD0gKGxwX3BhdXNlICYKKwkJCQkgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfTUFTSyk+Pjc7CisJCQlEUChORVRJRl9NU0dfTElOSywgInBhdXNlX3Jlc3VsdCBDTDM3IDB4JXhcbiIsCisJCQkJIHBhdXNlX3Jlc3VsdCk7CisJCX0KKwkJYm54MnhfcGF1c2VfcmVzb2x2ZSh2YXJzLCBwYXVzZV9yZXN1bHQpOworCX0gZWxzZSBpZiAoKHBhcmFtcy0+cmVxX2Zsb3dfY3RybCA9PSBCTlgyWF9GTE9XX0NUUkxfQVVUTykgJiYKKwkJICAgKGJueDJ4X2V4dF9waHlfcmVzb2x2ZV9mYyhwYXJhbXMsIHZhcnMpKSkgeworCQlyZXR1cm47CisJfSBlbHNlIHsKKwkJaWYgKHBhcmFtcy0+cmVxX2Zsb3dfY3RybCA9PSBCTlgyWF9GTE9XX0NUUkxfQVVUTykKKwkJCXZhcnMtPmZsb3dfY3RybCA9IHBhcmFtcy0+cmVxX2ZjX2F1dG9fYWR2OworCQllbHNlCisJCQl2YXJzLT5mbG93X2N0cmwgPSBwYXJhbXMtPnJlcV9mbG93X2N0cmw7CisJfQorCURQKE5FVElGX01TR19MSU5LLCAiZmxvd19jdHJsIDB4JXhcbiIsIHZhcnMtPmZsb3dfY3RybCk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2NoZWNrX2ZhbGxiYWNrX3RvX2NsMzcoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTE2IHJ4X3N0YXR1cywgdXN0YXRfdmFsLCBjbDM3X2ZzbV9yZWNpZXZlZDsKKwlEUChORVRJRl9NU0dfTElOSywgImJueDJ4X2NoZWNrX2ZhbGxiYWNrX3RvX2NsMzdcbiIpOworCS8qIFN0ZXAgMTogTWFrZSBzdXJlIHNpZ25hbCBpcyBkZXRlY3RlZCAqLworCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19SWDAsCisJCQkgICAgICBNRElPX1JYMF9SWF9TVEFUVVMsCisJCQkgICAgICAmcnhfc3RhdHVzKTsKKwlpZiAoKHJ4X3N0YXR1cyAmIE1ESU9fUlgwX1JYX1NUQVRVU19TSUdERVQpICE9CisJICAgIChNRElPX1JYMF9SWF9TVEFUVVNfU0lHREVUKSkgeworCQlEUChORVRJRl9NU0dfTElOSywgIlNpZ25hbCBpcyBub3QgZGV0ZWN0ZWQuIFJlc3RvcmluZyBDTDczLiIKKwkJCSAgICAgInJ4X3N0YXR1cygweDgwYjApID0gMHgleFxuIiwgcnhfc3RhdHVzKTsKKwkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19JRUVFQjAsCisJCQkJICAgICAgTURJT19DTDczX0lFRUVCMF9DTDczX0FOX0NPTlRST0wsCisJCQkJICAgICAgTURJT19DTDczX0lFRUVCMF9DTDczX0FOX0NPTlRST0xfQU5fRU4pOworCQlyZXR1cm47CisJfQorCS8qIFN0ZXAgMjogQ2hlY2sgQ0w3MyBzdGF0ZSBtYWNoaW5lICovCisJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX0NMNzNfVVNFUkIwLAorCQkJICAgICAgTURJT19DTDczX1VTRVJCMF9DTDczX1VTVEFUMSwKKwkJCSAgICAgICZ1c3RhdF92YWwpOworCWlmICgodXN0YXRfdmFsICYKKwkgICAgIChNRElPX0NMNzNfVVNFUkIwX0NMNzNfVVNUQVQxX0xJTktfU1RBVFVTX0NIRUNLIHwKKwkgICAgICBNRElPX0NMNzNfVVNFUkIwX0NMNzNfVVNUQVQxX0FOX0dPT0RfQ0hFQ0tfQkFNMzcpKSAhPQorCSAgICAoTURJT19DTDczX1VTRVJCMF9DTDczX1VTVEFUMV9MSU5LX1NUQVRVU19DSEVDSyB8CisJICAgICAgTURJT19DTDczX1VTRVJCMF9DTDczX1VTVEFUMV9BTl9HT09EX0NIRUNLX0JBTTM3KSkgeworCQlEUChORVRJRl9NU0dfTElOSywgIkNMNzMgc3RhdGUtbWFjaGluZSBpcyBub3Qgc3RhYmxlLiAiCisJCQkgICAgICJ1c3RhdF92YWwoMHg4MzcxKSA9IDB4JXhcbiIsIHVzdGF0X3ZhbCk7CisJCXJldHVybjsKKwl9CisJLyogU3RlcCAzOiBDaGVjayBDTDM3IE1lc3NhZ2UgUGFnZXMgcmVjZWl2ZWQgdG8gaW5kaWNhdGUgTFAKKwlzdXBwb3J0cyBvbmx5IENMMzcgKi8KKwlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUkVHX0JBTktfUkVNT1RFX1BIWSwKKwkJCSAgICAgIE1ESU9fUkVNT1RFX1BIWV9NSVNDX1JYX1NUQVRVUywKKwkJCSAgICAgICZjbDM3X2ZzbV9yZWNpZXZlZCk7CisJaWYgKChjbDM3X2ZzbV9yZWNpZXZlZCAmCisJICAgICAoTURJT19SRU1PVEVfUEhZX01JU0NfUlhfU1RBVFVTX0NMMzdfRlNNX1JFQ0VJVkVEX09WRVIxR19NU0cgfAorCSAgICAgTURJT19SRU1PVEVfUEhZX01JU0NfUlhfU1RBVFVTX0NMMzdfRlNNX1JFQ0VJVkVEX0JSQ01fT1VJX01TRykpICE9CisJICAgIChNRElPX1JFTU9URV9QSFlfTUlTQ19SWF9TVEFUVVNfQ0wzN19GU01fUkVDRUlWRURfT1ZFUjFHX01TRyB8CisJICAgICAgTURJT19SRU1PVEVfUEhZX01JU0NfUlhfU1RBVFVTX0NMMzdfRlNNX1JFQ0VJVkVEX0JSQ01fT1VJX01TRykpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJObyBDTDM3IEZTTSB3ZXJlIHJlY2VpdmVkLiAiCisJCQkgICAgICJtaXNjX3J4X3N0YXR1cygweDgzMzApID0gMHgleFxuIiwKKwkJCSBjbDM3X2ZzbV9yZWNpZXZlZCk7CisJCXJldHVybjsKKwl9CisJLyogVGhlIGNvbWJpbmVkIGNsMzcvY2w3MyBmc20gc3RhdGUgaW5mb3JtYXRpb24gaW5kaWNhdGluZyB0aGF0IHdlIGFyZQorCWNvbm5lY3RlZCB0byBhIGRldmljZSB3aGljaCBkb2VzIG5vdCBzdXBwb3J0IGNsNzMsIGJ1dCBkb2VzIHN1cHBvcnQKKwljbDM3IEJBTS4gSW4gdGhpcyBjYXNlIHdlIGRpc2FibGUgY2w3MyBhbmQgcmVzdGFydCBjbDM3IGF1dG8tbmVnICovCisJLyogRGlzYWJsZSBDTDczICovCisJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX0NMNzNfSUVFRUIwLAorCQkJICAgICAgTURJT19DTDczX0lFRUVCMF9DTDczX0FOX0NPTlRST0wsCisJCQkgICAgICAwKTsKKwkvKiBSZXN0YXJ0IENMMzcgYXV0b25lZyAqLworCWJueDJ4X3Jlc3RhcnRfYXV0b25lZyhwYXJhbXMsIDApOworCURQKE5FVElGX01TR19MSU5LLCAiRGlzYWJsaW5nIENMNzMsIGFuZCByZXN0YXJ0aW5nIENMMzcgYXV0b25lZ1xuIik7Cit9CitzdGF0aWMgdTggYm54MnhfbGlua19zZXR0aW5nc19zdGF0dXMoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkJICAgc3RydWN0IGxpbmtfdmFycyAqdmFycywKKwkJCQkgICB1MzIgZ3Bfc3RhdHVzLAorCQkJCSAgIHU4IGV4dF9waHlfbGlua191cCkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MTYgbmV3X2xpbmVfc3BlZWQ7CisJdTggcmMgPSAwOworCXZhcnMtPmxpbmtfc3RhdHVzID0gMDsKKworCWlmIChncF9zdGF0dXMgJiBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9MSU5LX1NUQVRVUykgeworCQlEUChORVRJRl9NU0dfTElOSywgInBoeSBsaW5rIHVwIGdwX3N0YXR1cz0weCV4XG4iLAorCQkJIGdwX3N0YXR1cyk7CisKKwkJdmFycy0+cGh5X2xpbmtfdXAgPSAxOworCQl2YXJzLT5saW5rX3N0YXR1cyB8PSBMSU5LX1NUQVRVU19MSU5LX1VQOworCisJCWlmIChncF9zdGF0dXMgJiBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9EVVBMRVhfU1RBVFVTKQorCQkJdmFycy0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCWVsc2UKKwkJCXZhcnMtPmR1cGxleCA9IERVUExFWF9IQUxGOworCisJCWJueDJ4X2Zsb3dfY3RybF9yZXNvbHZlKHBhcmFtcywgdmFycywgZ3Bfc3RhdHVzKTsKKworCQlzd2l0Y2ggKGdwX3N0YXR1cyAmIEdQX1NUQVRVU19TUEVFRF9NQVNLKSB7CisJCWNhc2UgR1BfU1RBVFVTXzEwTToKKwkJCW5ld19saW5lX3NwZWVkID0gU1BFRURfMTA7CisJCQlpZiAodmFycy0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQkJCXZhcnMtPmxpbmtfc3RhdHVzIHw9IExJTktfMTBURkQ7CisJCQllbHNlCisJCQkJdmFycy0+bGlua19zdGF0dXMgfD0gTElOS18xMFRIRDsKKwkJCWJyZWFrOworCisJCWNhc2UgR1BfU1RBVFVTXzEwME06CisJCQluZXdfbGluZV9zcGVlZCA9IFNQRUVEXzEwMDsKKwkJCWlmICh2YXJzLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCisJCQkJdmFycy0+bGlua19zdGF0dXMgfD0gTElOS18xMDBUWEZEOworCQkJZWxzZQorCQkJCXZhcnMtPmxpbmtfc3RhdHVzIHw9IExJTktfMTAwVFhIRDsKKwkJCWJyZWFrOworCisJCWNhc2UgR1BfU1RBVFVTXzFHOgorCQljYXNlIEdQX1NUQVRVU18xR19LWDoKKwkJCW5ld19saW5lX3NwZWVkID0gU1BFRURfMTAwMDsKKwkJCWlmICh2YXJzLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCisJCQkJdmFycy0+bGlua19zdGF0dXMgfD0gTElOS18xMDAwVEZEOworCQkJZWxzZQorCQkJCXZhcnMtPmxpbmtfc3RhdHVzIHw9IExJTktfMTAwMFRIRDsKKwkJCWJyZWFrOworCisJCWNhc2UgR1BfU1RBVFVTXzJfNUc6CisJCQluZXdfbGluZV9zcGVlZCA9IFNQRUVEXzI1MDA7CisJCQlpZiAodmFycy0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQkJCXZhcnMtPmxpbmtfc3RhdHVzIHw9IExJTktfMjUwMFRGRDsKKwkJCWVsc2UKKwkJCQl2YXJzLT5saW5rX3N0YXR1cyB8PSBMSU5LXzI1MDBUSEQ7CisJCQlicmVhazsKKworCQljYXNlIEdQX1NUQVRVU181RzoKKwkJY2FzZSBHUF9TVEFUVVNfNkc6CisJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkgImxpbmsgc3BlZWQgdW5zdXBwb3J0ZWQgIGdwX3N0YXR1cyAweCV4XG4iLAorCQkJCSAgZ3Bfc3RhdHVzKTsKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWNhc2UgR1BfU1RBVFVTXzEwR19LWDQ6CisJCWNhc2UgR1BfU1RBVFVTXzEwR19ISUc6CisJCWNhc2UgR1BfU1RBVFVTXzEwR19DWDQ6CisJCQluZXdfbGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOworCQkJdmFycy0+bGlua19zdGF0dXMgfD0gTElOS18xMEdURkQ7CisJCQlicmVhazsKKworCQljYXNlIEdQX1NUQVRVU18xMkdfSElHOgorCQkJbmV3X2xpbmVfc3BlZWQgPSBTUEVFRF8xMjAwMDsKKwkJCXZhcnMtPmxpbmtfc3RhdHVzIHw9IExJTktfMTJHVEZEOworCQkJYnJlYWs7CisKKwkJY2FzZSBHUF9TVEFUVVNfMTJfNUc6CisJCQluZXdfbGluZV9zcGVlZCA9IFNQRUVEXzEyNTAwOworCQkJdmFycy0+bGlua19zdGF0dXMgfD0gTElOS18xMl81R1RGRDsKKwkJCWJyZWFrOworCisJCWNhc2UgR1BfU1RBVFVTXzEzRzoKKwkJCW5ld19saW5lX3NwZWVkID0gU1BFRURfMTMwMDA7CisJCQl2YXJzLT5saW5rX3N0YXR1cyB8PSBMSU5LXzEzR1RGRDsKKwkJCWJyZWFrOworCisJCWNhc2UgR1BfU1RBVFVTXzE1RzoKKwkJCW5ld19saW5lX3NwZWVkID0gU1BFRURfMTUwMDA7CisJCQl2YXJzLT5saW5rX3N0YXR1cyB8PSBMSU5LXzE1R1RGRDsKKwkJCWJyZWFrOworCisJCWNhc2UgR1BfU1RBVFVTXzE2RzoKKwkJCW5ld19saW5lX3NwZWVkID0gU1BFRURfMTYwMDA7CisJCQl2YXJzLT5saW5rX3N0YXR1cyB8PSBMSU5LXzE2R1RGRDsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkgICJsaW5rIHNwZWVkIHVuc3VwcG9ydGVkIGdwX3N0YXR1cyAweCV4XG4iLAorCQkJCSAgZ3Bfc3RhdHVzKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJLyogVXBvbiBsaW5rIHNwZWVkIGNoYW5nZSBzZXQgdGhlIE5JRyBpbnRvIGRyYWluIG1vZGUuCisJCUNvbWVzIHRvIGRlYWxzIHdpdGggcG9zc2libGUgRklGTyBnbGl0Y2ggZHVlIHRvIGNsayBjaGFuZ2UKKwkJd2hlbiBzcGVlZCBpcyBkZWNyZWFzZWQgd2l0aG91dCBsaW5rIGRvd24gaW5kaWNhdG9yICovCisJCWlmIChuZXdfbGluZV9zcGVlZCAhPSB2YXJzLT5saW5lX3NwZWVkKSB7CisJCQlpZiAoWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZykgIT0KKwkJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUICYmCisJCQkgICAgZXh0X3BoeV9saW5rX3VwKSB7CisJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJJbnRlcm5hbCBsaW5rIHNwZWVkICVkIGlzIgorCQkJCQkgICAgIiBkaWZmZXJlbnQgdGhhbiB0aGUgZXh0ZXJuYWwiCisJCQkJCSAgICAiIGxpbmsgc3BlZWQgJWRcbiIsIG5ld19saW5lX3NwZWVkLAorCQkJCQkgIHZhcnMtPmxpbmVfc3BlZWQpOworCQkJCXZhcnMtPnBoeV9saW5rX3VwID0gMDsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCVJFR19XUihicCwgTklHX1JFR19FR1JFU1NfRFJBSU4wX01PREUKKwkJCQkgICAgKyBwYXJhbXMtPnBvcnQqNCwgMCk7CisJCQltc2xlZXAoMSk7CisJCX0KKwkJdmFycy0+bGluZV9zcGVlZCA9IG5ld19saW5lX3NwZWVkOworCQl2YXJzLT5saW5rX3N0YXR1cyB8PSBMSU5LX1NUQVRVU19TRVJERVNfTElOSzsKKworCQlpZiAoKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfQVVUT19ORUcpICYmCisJCSAgICAoKFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpID09CisJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUKSB8fAorCQkgICAgKFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpID09CisJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNSkgfHwKKwkJICAgIChYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKSA9PQorCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDYpIHx8CisJCSAgICAoWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZykgPT0KKwkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2KSkpIHsKKwkJCXZhcnMtPmF1dG9uZWcgPSBBVVRPX05FR19FTkFCTEVEOworCisJCQlpZiAoZ3Bfc3RhdHVzICYgTURJT19BTl9DTDczX09SXzM3X0NPTVBMRVRFKSB7CisJCQkJdmFycy0+YXV0b25lZyB8PSBBVVRPX05FR19DT01QTEVURTsKKwkJCQl2YXJzLT5saW5rX3N0YXR1cyB8PQorCQkJCQlMSU5LX1NUQVRVU19BVVRPX05FR09USUFURV9DT01QTEVURTsKKwkJCX0KKworCQkJdmFycy0+YXV0b25lZyB8PSBBVVRPX05FR19QQVJBTExFTF9ERVRFQ1RJT05fVVNFRDsKKwkJCXZhcnMtPmxpbmtfc3RhdHVzIHw9CisJCQkJTElOS19TVEFUVVNfUEFSQUxMRUxfREVURUNUSU9OX1VTRUQ7CisKKwkJfQorCQlpZiAodmFycy0+Zmxvd19jdHJsICYgQk5YMlhfRkxPV19DVFJMX1RYKQorCQkJdmFycy0+bGlua19zdGF0dXMgfD0KKwkJCQlMSU5LX1NUQVRVU19UWF9GTE9XX0NPTlRST0xfRU5BQkxFRDsKKworCQlpZiAodmFycy0+Zmxvd19jdHJsICYgQk5YMlhfRkxPV19DVFJMX1JYKQorCQkJdmFycy0+bGlua19zdGF0dXMgfD0KKwkJCQlMSU5LX1NUQVRVU19SWF9GTE9XX0NPTlRST0xfRU5BQkxFRDsKKworCX0gZWxzZSB7IC8qIGxpbmtfZG93biAqLworCQlEUChORVRJRl9NU0dfTElOSywgInBoeSBsaW5rIGRvd25cbiIpOworCisJCXZhcnMtPnBoeV9saW5rX3VwID0gMDsKKworCQl2YXJzLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJdmFycy0+Zmxvd19jdHJsID0gQk5YMlhfRkxPV19DVFJMX05PTkU7CisJCXZhcnMtPmF1dG9uZWcgPSBBVVRPX05FR19ESVNBQkxFRDsKKwkJdmFycy0+bWFjX3R5cGUgPSBNQUNfVFlQRV9OT05FOworCisJCWlmICgocGFyYW1zLT5yZXFfbGluZV9zcGVlZCA9PSBTUEVFRF9BVVRPX05FRykgJiYKKwkJICAgICgoWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZykgPT0KKwkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1QpKSkgeworCQkJLyogQ2hlY2sgc2lnbmFsIGlzIGRldGVjdGVkICovCisJCQlibngyeF9jaGVja19mYWxsYmFja190b19jbDM3KHBhcmFtcyk7CisJCX0KKwl9CisKKwlEUChORVRJRl9NU0dfTElOSywgImdwX3N0YXR1cyAweCV4ICBwaHlfbGlua191cCAleCBsaW5lX3NwZWVkICV4XG4iLAorCQkgZ3Bfc3RhdHVzLCB2YXJzLT5waHlfbGlua191cCwgdmFycy0+bGluZV9zcGVlZCk7CisJRFAoTkVUSUZfTVNHX0xJTkssICJkdXBsZXggJXggIGZsb3dfY3RybCAweCV4IgorCQkgIiBhdXRvbmVnIDB4JXhcbiIsCisJCSB2YXJzLT5kdXBsZXgsCisJCSB2YXJzLT5mbG93X2N0cmwsIHZhcnMtPmF1dG9uZWcpOworCURQKE5FVElGX01TR19MSU5LLCAibGlua19zdGF0dXMgMHgleFxuIiwgdmFycy0+bGlua19zdGF0dXMpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBibngyeF9zZXRfZ21paV90eF9kcml2ZXIoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTE2IGxwX3VwMjsKKwl1MTYgdHhfZHJpdmVyOworCXUxNiBiYW5rOworCisJLyogcmVhZCBwcmVjb21wICovCisJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX09WRVJfMUcsCisJCQkgICAgICBNRElPX09WRVJfMUdfTFBfVVAyLCAmbHBfdXAyKTsKKworCS8qIGJpdHMgWzEwOjddIGF0IGxwX3VwMiwgcG9zaXRpb25lZCBhdCBbMTU6MTJdICovCisJbHBfdXAyID0gKCgobHBfdXAyICYgTURJT19PVkVSXzFHX0xQX1VQMl9QUkVFTVBIQVNJU19NQVNLKSA+PgorCQkgICBNRElPX09WRVJfMUdfTFBfVVAyX1BSRUVNUEhBU0lTX1NISUZUKSA8PAorCQkgIE1ESU9fVFgwX1RYX0RSSVZFUl9QUkVFTVBIQVNJU19TSElGVCk7CisKKwlpZiAobHBfdXAyID09IDApCisJCXJldHVybjsKKworCWZvciAoYmFuayA9IE1ESU9fUkVHX0JBTktfVFgwOyBiYW5rIDw9IE1ESU9fUkVHX0JBTktfVFgzOworCSAgICAgIGJhbmsgKz0gKE1ESU9fUkVHX0JBTktfVFgxIC0gTURJT19SRUdfQkFOS19UWDApKSB7CisJCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkgICAgICBiYW5rLAorCQkJCSAgICAgIE1ESU9fVFgwX1RYX0RSSVZFUiwgJnR4X2RyaXZlcik7CisKKwkJLyogcmVwbGFjZSB0eF9kcml2ZXIgYml0cyBbMTU6MTJdICovCisJCWlmIChscF91cDIgIT0KKwkJICAgICh0eF9kcml2ZXIgJiBNRElPX1RYMF9UWF9EUklWRVJfUFJFRU1QSEFTSVNfTUFTSykpIHsKKwkJCXR4X2RyaXZlciAmPSB+TURJT19UWDBfVFhfRFJJVkVSX1BSRUVNUEhBU0lTX01BU0s7CisJCQl0eF9kcml2ZXIgfD0gbHBfdXAyOworCQkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkJICAgICAgYmFuaywKKwkJCQkJICAgICAgTURJT19UWDBfVFhfRFJJVkVSLCB0eF9kcml2ZXIpOworCQl9CisJfQorfQorCitzdGF0aWMgdTggYm54MnhfZW1hY19wcm9ncmFtKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAorCQkJICAgdTMyIGxpbmVfc3BlZWQsIHUzMiBkdXBsZXgpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKKwl1MTYgbW9kZSA9IDA7CisKKwlEUChORVRJRl9NU0dfTElOSywgInNldHRpbmcgbGluayBzcGVlZCAmIGR1cGxleFxuIik7CisJYm54MnhfYml0c19kaXMoYnAsIEdSQ0JBU0VfRU1BQzAgKyBwb3J0KjB4NDAwICsKKwkJICAgICBFTUFDX1JFR19FTUFDX01PREUsCisJCSAgICAgKEVNQUNfTU9ERV8yNUdfTU9ERSB8CisJCSAgICAgRU1BQ19NT0RFX1BPUlRfTUlJXzEwTSB8CisJCSAgICAgRU1BQ19NT0RFX0hBTEZfRFVQTEVYKSk7CisJc3dpdGNoIChsaW5lX3NwZWVkKSB7CisJY2FzZSBTUEVFRF8xMDoKKwkJbW9kZSB8PSBFTUFDX01PREVfUE9SVF9NSUlfMTBNOworCQlicmVhazsKKworCWNhc2UgU1BFRURfMTAwOgorCQltb2RlIHw9IEVNQUNfTU9ERV9QT1JUX01JSTsKKwkJYnJlYWs7CisKKwljYXNlIFNQRUVEXzEwMDA6CisJCW1vZGUgfD0gRU1BQ19NT0RFX1BPUlRfR01JSTsKKwkJYnJlYWs7CisKKwljYXNlIFNQRUVEXzI1MDA6CisJCW1vZGUgfD0gKEVNQUNfTU9ERV8yNUdfTU9ERSB8IEVNQUNfTU9ERV9QT1JUX0dNSUkpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qIDEwRyBub3QgdmFsaWQgZm9yIEVNQUMgKi8KKwkJRFAoTkVUSUZfTVNHX0xJTkssICJJbnZhbGlkIGxpbmVfc3BlZWQgMHgleFxuIiwgbGluZV9zcGVlZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChkdXBsZXggPT0gRFVQTEVYX0hBTEYpCisJCW1vZGUgfD0gRU1BQ19NT0RFX0hBTEZfRFVQTEVYOworCWJueDJ4X2JpdHNfZW4oYnAsCisJCSAgICBHUkNCQVNFX0VNQUMwICsgcG9ydCoweDQwMCArIEVNQUNfUkVHX0VNQUNfTU9ERSwKKwkJICAgIG1vZGUpOworCisJYm54Mnhfc2V0X2xlZChwYXJhbXMsIExFRF9NT0RFX09QRVIsIGxpbmVfc3BlZWQpOworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgIAkJICAgICBFeHRlcm5hbCBQaHkgc2VjdGlvbiAgICAgICAJCSAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgYm54MnhfZXh0X3BoeV9od19yZXNldChzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0KQoreworCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzEsCisJCSAgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1csIHBvcnQpOworCW1zbGVlcCgxKTsKKwlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18xLAorCQkgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9ISUdILCBwb3J0KTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfZXh0X3BoeV9yZXNldChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCSAgICAgIHN0cnVjdCBsaW5rX3ZhcnMgICAqdmFycykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MzIgZXh0X3BoeV90eXBlOworCXU4IGV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCisJRFAoTkVUSUZfTVNHX0xJTkssICJQb3J0ICV4OiBibngyeF9leHRfcGh5X3Jlc2V0XG4iLCBwYXJhbXMtPnBvcnQpOworCWV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCS8qIFRoZSBQSFkgcmVzZXQgaXMgY29udHJvbGVkIGJ5IEdQSU8gMQorCSAqIEdpdmUgaXQgMW1zIG9mIHJlc2V0IHB1bHNlCisJICovCisJaWYgKHZhcnMtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpIHsKKworCQlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgeworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVDoKKwkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyBEaXJlY3RcbiIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1OgorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDY6CisJCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgODcwNS84NzA2XG4iKTsKKworCQkJLyogUmVzdG9yZSBub3JtYWwgcG93ZXIgbW9kZSovCisJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18yLAorCQkJCSAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0hJR0gsCisJCQkJCSAgcGFyYW1zLT5wb3J0KTsKKworCQkJLyogSFcgcmVzZXQgKi8KKwkJCWJueDJ4X2V4dF9waHlfaHdfcmVzZXQoYnAsIHBhcmFtcy0+cG9ydCk7CisKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwgMHhhMDQwKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNzoKKwkJCWJyZWFrOworCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKKworCQkJLyogUmVzdG9yZSBub3JtYWwgcG93ZXIgbW9kZSovCisJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18yLAorCQkJCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0hJR0gsCisJCQkJCSAgcGFyYW1zLT5wb3J0KTsKKworCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMSwKKwkJCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9ISUdILAorCQkJCQkgIHBhcmFtcy0+cG9ydCk7CisKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwKKwkJCQkgICAgICAgMTw8MTUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDgwNzJcbiIpOworCisJCQkvKiBVbnNldCBMb3cgUG93ZXIgTW9kZSBhbmQgU1cgcmVzZXQgKi8KKwkJCS8qIFJlc3RvcmUgbm9ybWFsIHBvd2VyIG1vZGUqLworCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMiwKKwkJCQkgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9ISUdILAorCQkJCQkgIHBhcmFtcy0+cG9ydCk7CisKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwKKwkJCQkgICAgICAgMTw8MTUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDgwNzNcbiIpOworCisJCQkvKiBSZXN0b3JlIG5vcm1hbCBwb3dlciBtb2RlKi8KKwkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzIsCisJCQkJICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfSElHSCwKKwkJCQkJICBwYXJhbXMtPnBvcnQpOworCisJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18xLAorCQkJCSAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0hJR0gsCisJCQkJCSAgcGFyYW1zLT5wb3J0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKKwkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyBTRlg3MTAxXG4iKTsKKworCQkJLyogUmVzdG9yZSBub3JtYWwgcG93ZXIgbW9kZSovCisJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18yLAorCQkJCSAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0hJR0gsCisJCQkJCSAgcGFyYW1zLT5wb3J0KTsKKworCQkJLyogSFcgcmVzZXQgKi8KKwkJCWJueDJ4X2V4dF9waHlfaHdfcmVzZXQoYnAsIHBhcmFtcy0+cG9ydCk7CisJCQlicmVhazsKKworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODE6CisJCQkvKiBSZXN0b3JlIG5vcm1hbCBwb3dlciBtb2RlKi8KKwkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzIsCisJCQkJICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfSElHSCwKKwkJCQkJICBwYXJhbXMtPnBvcnQpOworCisJCQkvKiBIVyByZXNldCAqLworCQkJYm54MnhfZXh0X3BoeV9od19yZXNldChicCwgcGFyYW1zLT5wb3J0KTsKKworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgIE1ESU9fUE1BX1JFR19DVFJMLAorCQkJCSAgICAgICAxPDwxNSk7CisJCQlicmVhazsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgyMzoKKwkJCWJyZWFrOworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkU6CisJCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgUEhZIEZhaWx1cmUgZGV0ZWN0ZWRcbiIpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCURQKE5FVElGX01TR19MSU5LLCAiQkFEIFhHWFMgZXh0X3BoeV9jb25maWcgMHgleFxuIiwKKwkJCSAgIHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCQkJYnJlYWs7CisJCX0KKworCX0gZWxzZSB7IC8qIFNlckRlcyAqLworCQlleHRfcGh5X3R5cGUgPSBTRVJERVNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCQlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgeworCQljYXNlIFBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX1RZUEVfRElSRUNUOgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXJEZXMgRGlyZWN0XG4iKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE9SVF9IV19DRkdfU0VSREVTX0VYVF9QSFlfVFlQRV9CQ001NDgyOgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXJEZXMgNTQ4MlxuIik7CisJCQlibngyeF9leHRfcGh5X2h3X3Jlc2V0KGJwLCBwYXJhbXMtPnBvcnQpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCURQKE5FVElGX01TR19MSU5LLCAiQkFEIFNlckRlcyBleHRfcGh5X2NvbmZpZyAweCV4XG4iLAorCQkJCSBwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBibngyeF9zYXZlX3NwaXJvbV92ZXJzaW9uKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsCisJCQkJICAgIHUzMiBzaG1lbV9iYXNlLCB1MzIgc3Bpcm9tX3ZlcikKK3sKKwlEUChORVRJRl9NU0dfTElOSywgIkZXIHZlcnNpb24gMHgleDoweCV4IGZvciBwb3J0ICVkXG4iLAorCQkgKHUxNikoc3Bpcm9tX3Zlcj4+MTYpLCAodTE2KXNwaXJvbV92ZXIsIHBvcnQpOworCVJFR19XUihicCwgc2htZW1fYmFzZSArCisJCSAgIG9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sCisJCQkgICAgcG9ydF9tYltwb3J0XS5leHRfcGh5X2Z3X3ZlcnNpb24pLAorCQkJc3Bpcm9tX3Zlcik7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3NhdmVfYmNtX3NwaXJvbV92ZXIoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwKKwkJCQkgICAgdTMyIGV4dF9waHlfdHlwZSwgdTggZXh0X3BoeV9hZGRyLAorCQkJCSAgICB1MzIgc2htZW1fYmFzZSkKK3sKKwl1MTYgZndfdmVyMSwgZndfdmVyMjsKKworCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjEsICZmd192ZXIxKTsKKwlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIyLCAmZndfdmVyMik7CisJYm54Mnhfc2F2ZV9zcGlyb21fdmVyc2lvbihicCwgcG9ydCwgc2htZW1fYmFzZSwKKwkJCQkodTMyKShmd192ZXIxPDwxNiB8IGZ3X3ZlcjIpKTsKK30KKworCitzdGF0aWMgdm9pZCBibngyeF9zYXZlXzg0ODFfc3Bpcm9tX3ZlcnNpb24oc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwKKwkJCQkJIHU4IGV4dF9waHlfYWRkciwgdTMyIHNobWVtX2Jhc2UpCit7CisJdTE2IHZhbCwgZndfdmVyMSwgZndfdmVyMiwgY250OworCS8qIEZvciB0aGUgMzIgYml0cyByZWdpc3RlcnMgaW4gODQ4MSwgYWNjZXNzIHZpYSBNRElPMkFSTSBpbnRlcmZhY2UuKi8KKwkvKiAoMSkgc2V0IHJlZ2lzdGVyIDB4YzIwMF8wMDE0KFNQSV9CUklER0VfQ1RSTF8yKSB0byAweDAzMDAwMDAwICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEsCisJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgMHhBODE5LCAweDAwMTQpOworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICAweEE4MUEsCisJCSAgICAgICAweGMyMDApOworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICAweEE4MUIsCisJCSAgICAgICAweDAwMDApOworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICAweEE4MUMsCisJCSAgICAgICAweDAzMDApOworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICAweEE4MTcsCisJCSAgICAgICAweDAwMDkpOworCisJZm9yIChjbnQgPSAwOyBjbnQgPCAxMDA7IGNudCsrKSB7CisJCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEsCisJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgIDB4QTgxOCwKKwkJCSAgICAgICZ2YWwpOworCQlpZiAodmFsICYgMSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoNSk7CisJfQorCWlmIChjbnQgPT0gMTAwKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiVW5hYmxlIHRvIHJlYWQgODQ4MSBwaHkgZncgdmVyc2lvbigxKVxuIik7CisJCWJueDJ4X3NhdmVfc3Bpcm9tX3ZlcnNpb24oYnAsIHBvcnQsCisJCQkJCXNobWVtX2Jhc2UsIDApOworCQlyZXR1cm47CisJfQorCisKKwkvKiAyKSByZWFkIHJlZ2lzdGVyIDB4YzIwMF8wMDAwIChTUElfRldfU1RBVFVTKSAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIDB4QTgxOSwgMHgwMDAwKTsKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCSAgICAgICAweEE4MUEsIDB4YzIwMCk7CisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEsCisJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgMHhBODE3LCAweDAwMEEpOworCWZvciAoY250ID0gMDsgY250IDwgMTAwOyBjbnQrKykgeworCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCisJCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxLAorCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICAweEE4MTgsCisJCQkgICAgICAmdmFsKTsKKwkJaWYgKHZhbCAmIDEpCisJCQlicmVhazsKKwkJdWRlbGF5KDUpOworCX0KKwlpZiAoY250ID09IDEwMCkgeworCQlEUChORVRJRl9NU0dfTElOSywgIlVuYWJsZSB0byByZWFkIDg0ODEgcGh5IGZ3IHZlcnNpb24oMilcbiIpOworCQlibngyeF9zYXZlX3NwaXJvbV92ZXJzaW9uKGJwLCBwb3J0LAorCQkJCQlzaG1lbV9iYXNlLCAwKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGxvd2VyIDE2IGJpdHMgb2YgdGhlIHJlZ2lzdGVyIFNQSV9GV19TVEFUVVMgKi8KKwlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCisJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEsCisJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgIDB4QTgxQiwKKwkJICAgICAgJmZ3X3ZlcjEpOworCS8qIHVwcGVyIDE2IGJpdHMgb2YgcmVnaXN0ZXIgU1BJX0ZXX1NUQVRVUyAqLworCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSwKKwkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgMHhBODFDLAorCQkgICAgICAmZndfdmVyMik7CisKKwlibngyeF9zYXZlX3NwaXJvbV92ZXJzaW9uKGJwLCBwb3J0LAorCQkJCXNobWVtX2Jhc2UsIChmd192ZXIyPDwxNikgfCBmd192ZXIxKTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfYmNtODA3Ml9leHRlcm5hbF9yb21fYm9vdChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OworCXU4IGV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKworCS8qIE5lZWQgdG8gd2FpdCAyMDBtcyBhZnRlciByZXNldCAqLworCW1zbGVlcCgyMDApOworCS8qIEJvb3QgcG9ydCBmcm9tIGV4dGVybmFsIFJPTQorCSAqIFNldCBzZXJfYm9vdF9jdGwgYml0IGluIHRoZSBNSVNDX0NUUkwxIHJlZ2lzdGVyCisJICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCQkgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgTURJT19QTUFfUkVHX01JU0NfQ1RSTDEsIDB4MDAwMSk7CisKKwkvKiBSZXNldCBpbnRlcm5hbCBtaWNyb3Byb2Nlc3NvciAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkJICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgTURJT19QTUFfUkVHX0dFTl9DVFJMLAorCQkJICBNRElPX1BNQV9SRUdfR0VOX0NUUkxfUk9NX1JFU0VUX0lOVEVSTkFMX01QKTsKKwkvKiBzZXQgbWljcm8gcmVzZXQgPSAwICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCQkgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgTURJT19QTUFfUkVHX0dFTl9DVFJMLAorCQkJICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTF9ST01fTUlDUk9fUkVTRVQpOworCS8qIFJlc2V0IGludGVybmFsIG1pY3JvcHJvY2Vzc29yICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCQkgIE1ESU9fUE1BX0RFVkFELAorCQkJICBNRElPX1BNQV9SRUdfR0VOX0NUUkwsCisJCQkgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTF9ST01fUkVTRVRfSU5URVJOQUxfTVApOworCS8qIHdhaXQgZm9yIDEwMG1zIGZvciBjb2RlIGRvd25sb2FkIHZpYSBTUEkgcG9ydCAqLworCW1zbGVlcCgxMDApOworCisJLyogQ2xlYXIgc2VyX2Jvb3RfY3RsIGJpdCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkJICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgIE1ESU9fUE1BX1JFR19NSVNDX0NUUkwxLCAweDAwMDApOworCS8qIFdhaXQgMTAwbXMgKi8KKwltc2xlZXAoMTAwKTsKKworCWJueDJ4X3NhdmVfYmNtX3NwaXJvbV92ZXIoYnAsIHBvcnQsCisJCQkJZXh0X3BoeV90eXBlLAorCQkJCWV4dF9waHlfYWRkciwKKwkJCQlwYXJhbXMtPnNobWVtX2Jhc2UpOworfQorCitzdGF0aWMgdTggYm54MnhfODA3M19pc19zbnJfbmVlZGVkKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCS8qIFRoaXMgaXMgb25seSByZXF1aXJlZCBmb3IgODA3M0ExLCB2ZXJzaW9uIDEwMiBvbmx5ICovCisKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKwl1MTYgdmFsOworCisJLyogUmVhZCA4MDczIEhXIHJldmlzaW9uKi8KKwlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKKwkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgTURJT19QTUFfUkVHXzgwNzNfQ0hJUF9SRVYsICZ2YWwpOworCisJaWYgKHZhbCAhPSAxKSB7CisJCS8qIE5vIG5lZWQgdG8gd29ya2Fyb3VuZCBpbiA4MDczIEExICovCisJCXJldHVybiAwOworCX0KKworCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAorCQkgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjIsICZ2YWwpOworCisJLyogU05SIHNob3VsZCBiZSBhcHBsaWVkIG9ubHkgZm9yIHZlcnNpb24gMHgxMDIgKi8KKwlpZiAodmFsICE9IDB4MTAyKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdTggYm54MnhfYmNtODA3M194YXVpX3dhKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXU4IGV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCXUxNiB2YWwsIGNudCwgY250MSA7CisKKwlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKKwkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgTURJT19QTUFfUkVHXzgwNzNfQ0hJUF9SRVYsICZ2YWwpOworCisJaWYgKHZhbCA+IDApIHsKKwkJLyogTm8gbmVlZCB0byB3b3JrYXJvdW5kIGluIDgwNzMgQTEgKi8KKwkJcmV0dXJuIDA7CisJfQorCS8qIFhBVUkgd29ya2Fyb3VuZCBpbiA4MDczIEEwOiAqLworCisJLyogQWZ0ZXIgbG9hZGluZyB0aGUgYm9vdCBST00gYW5kIHJlc3RhcnRpbmcgQXV0b25lZywKKwlwb2xsIERldjEsIFJlZyAkQzgyMDogKi8KKworCWZvciAoY250ID0gMDsgY250IDwgMTAwMDsgY250KyspIHsKKwkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAorCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICBNRElPX1BNQV9SRUdfODA3M19TUEVFRF9MSU5LX1NUQVRVUywKKwkJCSAgICAgICZ2YWwpOworCQkgIC8qIElmIGJpdCBbMTRdID0gMCBvciBiaXQgWzEzXSA9IDAsIGNvbnRpbnVlIG9uIHdpdGgKKwkJICAgc3lzdGVtIGluaXRpYWxpemF0aW9uIChYQVVJIHdvcmstYXJvdW5kIG5vdCByZXF1aXJlZCwKKwkJICAgIGFzIHRoZXNlIGJpdHMgaW5kaWNhdGUgMi41RyBvciAxRyBsaW5rIHVwKS4gKi8KKwkJaWYgKCEodmFsICYgKDE8PDE0KSkgfHwgISh2YWwgJiAoMTw8MTMpKSkgeworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYQVVJIHdvcmstYXJvdW5kIG5vdCByZXF1aXJlZFxuIik7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIGlmICghKHZhbCAmICgxPDwxNSkpKSB7CisJCQlEUChORVRJRl9NU0dfTElOSywgImNsYyBiaXQgMTUgd2VudCBvZmZcbiIpOworCQkJIC8qIElmIGJpdCAxNSBpcyAwLCB0aGVuIHBvbGwgRGV2MSwgUmVnICRDODQxIHVudGlsCisJCQkgIGl0J3MgTVNCIChiaXQgMTUpIGdvZXMgdG8gMSAoaW5kaWNhdGluZyB0aGF0IHRoZQorCQkJICBYQVVJIHdvcmthcm91bmQgaGFzIGNvbXBsZXRlZCksCisJCQkgIHRoZW4gY29udGludWUgb24gd2l0aCBzeXN0ZW0gaW5pdGlhbGl6YXRpb24uKi8KKwkJCWZvciAoY250MSA9IDA7IGNudDEgPCAxMDAwOyBjbnQxKyspIHsKKwkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKKwkJCQkJZXh0X3BoeV9hZGRyLAorCQkJCQlNRElPX1BNQV9ERVZBRCwKKwkJCQkJTURJT19QTUFfUkVHXzgwNzNfWEFVSV9XQSwgJnZhbCk7CisJCQkJaWYgKHZhbCAmICgxPDwxNSkpIHsKKwkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJCSAgIlhBVUkgd29ya2Fyb3VuZCBoYXMgY29tcGxldGVkXG4iKTsKKwkJCQkJcmV0dXJuIDA7CisJCQkJIH0KKwkJCQkgbXNsZWVwKDMpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJbXNsZWVwKDMpOworCX0KKwlEUChORVRJRl9NU0dfTElOSywgIldhcm5pbmc6IFhBVUkgd29yay1hcm91bmQgdGltZW91dCAhISFcbiIpOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdm9pZCBibngyeF9iY204MDczX2JjbTg3MjdfZXh0ZXJuYWxfcm9tX2Jvb3Qoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwKKwkJCQkJCSAgdTggZXh0X3BoeV9hZGRyLAorCQkJCQkJICB1MzIgZXh0X3BoeV90eXBlLAorCQkJCQkJICB1MzIgc2htZW1fYmFzZSkKK3sKKwkvKiBCb290IHBvcnQgZnJvbSBleHRlcm5hbCBST00gICovCisJLyogRURDIGdyc3QgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkwsCisJCSAgICAgICAweDAwMDEpOworCisJLyogdWNvZGUgcmVib290IGFuZCByc3QgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkwsCisJCSAgICAgICAweDAwOGMpOworCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX01JU0NfQ1RSTDEsIDB4MDAwMSk7CisKKwkvKiBSZXNldCBpbnRlcm5hbCBtaWNyb3Byb2Nlc3NvciAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTF9ST01fTUlDUk9fUkVTRVQpOworCisJLyogUmVsZWFzZSBzcnN0IGJpdCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTF9ST01fUkVTRVRfSU5URVJOQUxfTVApOworCisJLyogd2FpdCBmb3IgMTAwbXMgZm9yIGNvZGUgZG93bmxvYWQgdmlhIFNQSSBwb3J0ICovCisJbXNsZWVwKDEwMCk7CisKKwkvKiBDbGVhciBzZXJfYm9vdF9jdGwgYml0ICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX01JU0NfQ1RSTDEsIDB4MDAwMCk7CisKKwlibngyeF9zYXZlX2JjbV9zcGlyb21fdmVyKGJwLCBwb3J0LAorCQkJCWV4dF9waHlfdHlwZSwKKwkJCQlleHRfcGh5X2FkZHIsCisJCQkJc2htZW1fYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2JjbTgwNzNfZXh0ZXJuYWxfcm9tX2Jvb3Qoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwKKwkJCQkJICB1OCBleHRfcGh5X2FkZHIsCisJCQkJCSAgdTMyIHNobWVtX2Jhc2UpCit7CisJYm54MnhfYmNtODA3M19iY204NzI3X2V4dGVybmFsX3JvbV9ib290KGJwLCBwb3J0LCBleHRfcGh5X2FkZHIsCisJCQkJCSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAorCQkJCQkgc2htZW1fYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2JjbTg3MjdfZXh0ZXJuYWxfcm9tX2Jvb3Qoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwKKwkJCQkJICB1OCBleHRfcGh5X2FkZHIsCisJCQkJCSAgdTMyIHNobWVtX2Jhc2UpCit7CisJYm54MnhfYmNtODA3M19iY204NzI3X2V4dGVybmFsX3JvbV9ib290KGJwLCBwb3J0LCBleHRfcGh5X2FkZHIsCisJCQkJCSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAorCQkJCQkgc2htZW1fYmFzZSk7CisKK30KKworc3RhdGljIHZvaWQgYm54MnhfYmNtODcyNl9leHRlcm5hbF9yb21fYm9vdChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OworCXU4IGV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKworCS8qIE5lZWQgdG8gd2FpdCAxMDBtcyBhZnRlciByZXNldCAqLworCW1zbGVlcCgxMDApOworCisJLyogTWljcm8gY29udHJvbGxlciByZS1ib290ICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTCwKKwkJICAgICAgIDB4MDE4Qik7CisKKwkvKiBTZXQgc29mdCByZXNldCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkwsCisJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkxfUk9NX01JQ1JPX1JFU0VUKTsKKworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfTUlTQ19DVFJMMSwgMHgwMDAxKTsKKworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkwsCisJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkxfUk9NX1JFU0VUX0lOVEVSTkFMX01QKTsKKworCS8qIHdhaXQgZm9yIDE1MG1zIGZvciBtaWNyb2NvZGUgbG9hZCAqLworCW1zbGVlcCgxNTApOworCisJLyogRGlzYWJsZSBzZXJpYWwgYm9vdCBjb250cm9sLCB0cmlzdGF0ZXMgcGlucyBTU19OLCBTQ0ssIE1PU0ksIE1JU08gKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX01JU0NfQ1RSTDEsIDB4MDAwMCk7CisKKwltc2xlZXAoMjAwKTsKKwlibngyeF9zYXZlX2JjbV9zcGlyb21fdmVyKGJwLCBwb3J0LAorCQkJCWV4dF9waHlfdHlwZSwKKwkJCQlleHRfcGh5X2FkZHIsCisJCQkJcGFyYW1zLT5zaG1lbV9iYXNlKTsKK30KKworc3RhdGljIHZvaWQgYm54Mnhfc2ZwX3NldF90cmFuc21pdHRlcihzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LAorCQkJCSAgICB1MzIgZXh0X3BoeV90eXBlLCB1OCBleHRfcGh5X2FkZHIsCisJCQkJICAgIHU4IHR4X2VuKQoreworCXUxNiB2YWw7CisKKwlEUChORVRJRl9NU0dfTElOSywgIlNldHRpbmcgdHJhbnNtaXR0ZXIgdHhfZW49JXggZm9yIHBvcnQgJXhcbiIsCisJCSB0eF9lbiwgcG9ydCk7CisJLyogRGlzYWJsZS9FbmFibGUgdHJhbnNtaXR0ZXIgKCBUWCBsYXNlciBvZiB0aGUgU0ZQKyBtb2R1bGUuKSovCisJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgIE1ESU9fUE1BX1JFR19QSFlfSURFTlRJRklFUiwKKwkJICAgICAgJnZhbCk7CisKKwlpZiAodHhfZW4pCisJCXZhbCAmPSB+KDE8PDE1KTsKKwllbHNlCisJCXZhbCB8PSAoMTw8MTUpOworCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLAorCQkgICAgICAgdmFsKTsKK30KKworc3RhdGljIHU4IGJueDJ4Xzg3MjZfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCQkJICB1MTYgYWRkciwgdTggYnl0ZV9jbnQsIHU4ICpvX2J1ZikKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MTYgdmFsID0gMDsKKwl1MTYgaTsKKwl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OworCXU4IGV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKworCWlmIChieXRlX2NudCA+IDE2KSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiUmVhZGluZyBmcm9tIGVlcHJvbSBpcyIKKwkJCSAgICAiIGlzIGxpbWl0ZWQgdG8gMHhmXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qIFNldCB0aGUgcmVhZCBjb21tYW5kIGJ5dGUgY291bnQgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX0JZVEVfQ05ULAorCQkgICAgICAgKGJ5dGVfY250IHwgMHhhMDAwKSk7CisKKwkvKiBTZXQgdGhlIHJlYWQgY29tbWFuZCBhZGRyZXNzICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9NRU1fQUREUiwKKwkJICAgICAgIGFkZHIpOworCisJLyogQWN0aXZhdGUgcmVhZCBjb21tYW5kICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9DVFJMLAorCQkgICAgICAgMHgyYzBmKTsKKworCS8qIFdhaXQgdXAgdG8gNTAwdXMgZm9yIGNvbW1hbmQgY29tcGxldGUgc3RhdHVzICovCisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisJCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9DVFJMLCAmdmFsKTsKKwkJaWYgKCh2YWwgJiBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX0NUUkxfU1RBVFVTX01BU0spID09CisJCSAgICBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX1NUQVRVU19DT01QTEVURSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoNSk7CisJfQorCisJaWYgKCh2YWwgJiBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX0NUUkxfU1RBVFVTX01BU0spICE9CisJCSAgICBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX1NUQVRVU19DT01QTEVURSkgeworCQlEUChORVRJRl9NU0dfTElOSywKKwkJCSAiR290IGJhZCBzdGF0dXMgMHgleCB3aGVuIHJlYWRpbmcgZnJvbSBTRlArIEVFUFJPTVxuIiwKKwkJCSAodmFsICYgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFJlYWQgdGhlIGJ1ZmZlciAqLworCWZvciAoaSA9IDA7IGkgPCBieXRlX2NudDsgaSsrKSB7CisJCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfREFUQV9CVUYgKyBpLCAmdmFsKTsKKwkJb19idWZbaV0gPSAodTgpKHZhbCAmIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0RBVEFfTUFTSyk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisJCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9DVFJMLCAmdmFsKTsKKwkJaWYgKCh2YWwgJiBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX0NUUkxfU1RBVFVTX01BU0spID09CisJCSAgICBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX1NUQVRVU19JRExFKQorCQkJcmV0dXJuIDA7OworCQltc2xlZXAoMSk7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdTggYm54MnhfODcyN19yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAorCQkJCQkgIHUxNiBhZGRyLCB1OCBieXRlX2NudCwgdTggKm9fYnVmKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXUxNiB2YWwsIGk7CisJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKKwl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKwl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisKKwlpZiAoYnl0ZV9jbnQgPiAxNikgeworCQlEUChORVRJRl9NU0dfTElOSywgIlJlYWRpbmcgZnJvbSBlZXByb20gaXMiCisJCQkgICAgIiBpcyBsaW1pdGVkIHRvIDB4ZlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIE5lZWQgdG8gcmVhZCBmcm9tIDEuODAwMCB0byBjbGVhciBpdCAqLworCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNywKKwkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9DVFJMLAorCQkgICAgICAmdmFsKTsKKworCS8qIFNldCB0aGUgcmVhZCBjb21tYW5kIGJ5dGUgY291bnQgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX0JZVEVfQ05ULAorCQkgICAgICAgKChieXRlX2NudCA8IDIpID8gMiA6IGJ5dGVfY250KSk7CisKKwkvKiBTZXQgdGhlIHJlYWQgY29tbWFuZCBhZGRyZXNzICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9NRU1fQUREUiwKKwkJICAgICAgIGFkZHIpOworCS8qIFNldCB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIDB4ODAwNCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR184NzI3X1RXT19XSVJFX0RBVEFfQlVGKTsKKworCS8qIEFjdGl2YXRlIHJlYWQgY29tbWFuZCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTCwKKwkJICAgICAgIDB4ODAwMik7CisJLyogV2FpdCBhcHByb3ByaWF0ZSB0aW1lIGZvciB0d28td2lyZSBjb21tYW5kIHRvIGZpbmlzaCBiZWZvcmUKKwlwb2xsaW5nIHRoZSBzdGF0dXMgcmVnaXN0ZXIgKi8KKwltc2xlZXAoMSk7CisKKwkvKiBXYWl0IHVwIHRvIDUwMHVzIGZvciBjb21tYW5kIGNvbXBsZXRlIHN0YXR1cyAqLworCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgeworCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCisJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTCwgJnZhbCk7CisJCWlmICgodmFsICYgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLKSA9PQorCQkgICAgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9TVEFUVVNfQ09NUExFVEUpCisJCQlicmVhazsKKwkJdWRlbGF5KDUpOworCX0KKworCWlmICgodmFsICYgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLKSAhPQorCQkgICAgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9TVEFUVVNfQ09NUExFVEUpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkgIkdvdCBiYWQgc3RhdHVzIDB4JXggd2hlbiByZWFkaW5nIGZyb20gU0ZQKyBFRVBST01cbiIsCisJCQkgKHZhbCAmIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTF9TVEFUVVNfTUFTSykpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBSZWFkIHRoZSBidWZmZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYnl0ZV9jbnQ7IGkrKykgeworCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCisJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgIE1ESU9fUE1BX1JFR184NzI3X1RXT19XSVJFX0RBVEFfQlVGICsgaSwgJnZhbCk7CisJCW9fYnVmW2ldID0gKHU4KSh2YWwgJiBNRElPX1BNQV9SRUdfODcyN19UV09fV0lSRV9EQVRBX01BU0spOworCX0KKworCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgeworCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCisJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTCwgJnZhbCk7CisJCWlmICgodmFsICYgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLKSA9PQorCQkgICAgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9TVEFUVVNfSURMRSkKKwkJCXJldHVybiAwOzsKKwkJbXNsZWVwKDEpOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCit1OCBibngyeF9yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCB1MTYgYWRkciwKKwkJCQkgICAgIHU4IGJ5dGVfY250LCB1OCAqb19idWYpCit7CisJdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCisJaWYgKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2KQorCQlyZXR1cm4gYm54MnhfODcyNl9yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHBhcmFtcywgYWRkciwKKwkJCQkJCSAgICAgICBieXRlX2NudCwgb19idWYpOworCWVsc2UgaWYgKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3KQorCQlyZXR1cm4gYm54MnhfODcyN19yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHBhcmFtcywgYWRkciwKKwkJCQkJCSAgICAgICBieXRlX2NudCwgb19idWYpOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdTggYm54MnhfZ2V0X2VkY19tb2RlKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAorCQkJCSAgdTE2ICplZGNfbW9kZSkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1OCB2YWwsIGNoZWNrX2xpbWl0aW5nX21vZGUgPSAwOworCSplZGNfbW9kZSA9IEVEQ19NT0RFX0xJTUlUSU5HOworCisJLyogRmlyc3QgY2hlY2sgZm9yIGNvcHBlciBjYWJsZSAqLworCWlmIChibngyeF9yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHBhcmFtcywKKwkJCQkgICAgICAgU0ZQX0VFUFJPTV9DT05fVFlQRV9BRERSLAorCQkJCSAgICAgICAxLAorCQkJCSAgICAgICAmdmFsKSAhPSAwKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiRmFpbGVkIHRvIHJlYWQgZnJvbSBTRlArIG1vZHVsZSBFRVBST01cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKHZhbCkgeworCWNhc2UgU0ZQX0VFUFJPTV9DT05fVFlQRV9WQUxfQ09QUEVSOgorCXsKKwkJdTggY29wcGVyX21vZHVsZV90eXBlOworCisJCS8qIENoZWNrIGlmIGl0cyBhY3RpdmUgY2FibGUoIGluY2x1ZGVzIFNGUCsgbW9kdWxlKQorCQlvZiBwYXNzaXZlIGNhYmxlKi8KKwkJaWYgKGJueDJ4X3JlYWRfc2ZwX21vZHVsZV9lZXByb20ocGFyYW1zLAorCQkJCQkgICAgICAgU0ZQX0VFUFJPTV9GQ19UWF9URUNIX0FERFIsCisJCQkJCSAgICAgICAxLAorCQkJCQkgICAgICAgJmNvcHBlcl9tb2R1bGVfdHlwZSkgIT0KKwkJICAgIDApIHsKKwkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCSJGYWlsZWQgdG8gcmVhZCBjb3BwZXItY2FibGUtdHlwZSIKKwkJCQkiIGZyb20gU0ZQKyBFRVBST01cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoY29wcGVyX21vZHVsZV90eXBlICYKKwkJICAgIFNGUF9FRVBST01fRkNfVFhfVEVDSF9CSVRNQVNLX0NPUFBFUl9BQ1RJVkUpIHsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiQWN0aXZlIENvcHBlciBjYWJsZSBkZXRlY3RlZFxuIik7CisJCQljaGVja19saW1pdGluZ19tb2RlID0gMTsKKwkJfSBlbHNlIGlmIChjb3BwZXJfbW9kdWxlX3R5cGUgJgorCQkJU0ZQX0VFUFJPTV9GQ19UWF9URUNIX0JJVE1BU0tfQ09QUEVSX1BBU1NJVkUpIHsKKwkJCQlEUChORVRJRl9NU0dfTElOSywgIlBhc3NpdmUgQ29wcGVyIgorCQkJCQkgICAgIiBjYWJsZSBkZXRlY3RlZFxuIik7CisJCQkJKmVkY19tb2RlID0KKwkJCQkgICAgICBFRENfTU9ERV9QQVNTSVZFX0RBQzsKKwkJfSBlbHNlIHsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiVW5rbm93biBjb3BwZXItY2FibGUtIgorCQkJCSAgICAgInR5cGUgMHgleCAhISFcbiIsIGNvcHBlcl9tb2R1bGVfdHlwZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTRlBfRUVQUk9NX0NPTl9UWVBFX1ZBTF9MQzoKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJPcHRpYyBtb2R1bGUgZGV0ZWN0ZWRcbiIpOworCQljaGVja19saW1pdGluZ19tb2RlID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJVbmFibGUgdG8gZGV0ZXJtaW5lIG1vZHVsZSB0eXBlIDB4JXggISEhXG4iLAorCQkJIHZhbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjaGVja19saW1pdGluZ19tb2RlKSB7CisJCXU4IG9wdGlvbnNbU0ZQX0VFUFJPTV9PUFRJT05TX1NJWkVdOworCQlpZiAoYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShwYXJhbXMsCisJCQkJCSAgICAgICBTRlBfRUVQUk9NX09QVElPTlNfQUREUiwKKwkJCQkJICAgICAgIFNGUF9FRVBST01fT1BUSU9OU19TSVpFLAorCQkJCQkgICAgICAgb3B0aW9ucykgIT0gMCkgeworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJGYWlsZWQgdG8gcmVhZCBPcHRpb24iCisJCQkJIiBmaWVsZCBmcm9tIG1vZHVsZSBFRVBST01cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKChvcHRpb25zWzBdICYgU0ZQX0VFUFJPTV9PUFRJT05TX0xJTkVBUl9SWF9PVVRfTUFTSykpCisJCQkqZWRjX21vZGUgPSBFRENfTU9ERV9MSU5FQVI7CisJCWVsc2UKKwkJCSplZGNfbW9kZSA9IEVEQ19NT0RFX0xJTUlUSU5HOworCX0KKwlEUChORVRJRl9NU0dfTElOSywgIkVEQyBtb2RlIGlzIHNldCB0byAweCV4XG4iLCAqZWRjX21vZGUpOworCXJldHVybiAwOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHJlYWQgdGhlIHJlbGV2YW50IGZpZWxkIGZyb20gdGhlIG1vZHVsZSAoIFNGUCsgKSwKKwlhbmQgdmVyaWZ5IGl0IGlzIGNvbXBsaWFudCB3aXRoIHRoaXMgYm9hcmQgKi8KK3N0YXRpYyB1OCBibngyeF92ZXJpZnlfc2ZwX21vZHVsZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MzIgdmFsOworCXUzMiBmd19yZXNwOworCWNoYXIgdmVuZG9yX25hbWVbU0ZQX0VFUFJPTV9WRU5ET1JfTkFNRV9TSVpFKzFdOworCWNoYXIgdmVuZG9yX3BuW1NGUF9FRVBST01fUEFSVF9OT19TSVpFKzFdOworCisJdmFsID0gUkVHX1JEKGJwLCBwYXJhbXMtPnNobWVtX2Jhc2UgKworCQkJIG9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sIGRldl9pbmZvLgorCQkJCSAgcG9ydF9mZWF0dXJlX2NvbmZpZ1twYXJhbXMtPnBvcnRdLmNvbmZpZykpOworCWlmICgodmFsICYgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX01BU0spID09CisJICAgIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9OT19FTkZPUkNFTUVOVCkgeworCQlEUChORVRJRl9NU0dfTElOSywgIk5PVCBlbmZvcmNpbmcgbW9kdWxlIHZlcmlmaWNhdGlvblxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIEFzayB0aGUgRlcgdG8gdmFsaWRhdGUgdGhlIG1vZHVsZSAqLworCWlmICghKHBhcmFtcy0+ZmVhdHVyZV9jb25maWdfZmxhZ3MgJgorCSAgICAgIEZFQVRVUkVfQ09ORklHX0JDX1NVUFBPUlRTX09QVF9NRExfVlJGWSkpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJGVyBkb2VzIG5vdCBzdXBwb3J0IE9QVCBNREwgIgorCQkJICAgICJ2ZXJpZmljYXRpb25cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmd19yZXNwID0gYm54MnhfZndfY29tbWFuZChicCwgRFJWX01TR19DT0RFX1ZSRllfT1BUX01ETCk7CisJaWYgKGZ3X3Jlc3AgPT0gRldfTVNHX0NPREVfVlJGWV9PUFRfTURMX1NVQ0NFU1MpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJBcHByb3ZlZCBtb2R1bGVcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBmb3JtYXQgdGhlIHdhcm5pbmcgbWVzc2FnZSAqLworCWlmIChibngyeF9yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHBhcmFtcywKKwkJCQkgICAgICAgU0ZQX0VFUFJPTV9WRU5ET1JfTkFNRV9BRERSLAorCQkJCSAgICAgICBTRlBfRUVQUk9NX1ZFTkRPUl9OQU1FX1NJWkUsCisJCQkJICAgICAgICh1OCAqKXZlbmRvcl9uYW1lKSkKKwkJdmVuZG9yX25hbWVbMF0gPSAnXDAnOworCWVsc2UKKwkJdmVuZG9yX25hbWVbU0ZQX0VFUFJPTV9WRU5ET1JfTkFNRV9TSVpFXSA9ICdcMCc7CisJaWYgKGJueDJ4X3JlYWRfc2ZwX21vZHVsZV9lZXByb20ocGFyYW1zLAorCQkJCSAgICAgICBTRlBfRUVQUk9NX1BBUlRfTk9fQUREUiwKKwkJCQkgICAgICAgU0ZQX0VFUFJPTV9QQVJUX05PX1NJWkUsCisJCQkJICAgICAgICh1OCAqKXZlbmRvcl9wbikpCisJCXZlbmRvcl9wblswXSA9ICdcMCc7CisJZWxzZQorCQl2ZW5kb3JfcG5bU0ZQX0VFUFJPTV9QQVJUX05PX1NJWkVdID0gJ1wwJzsKKworCW5ldGRldl9pbmZvKGJwLT5kZXYsICJXYXJuaW5nOiBVbnF1YWxpZmllZCBTRlArIG1vZHVsZSBkZXRlY3RlZCwgUG9ydCAlZCBmcm9tICVzIHBhcnQgbnVtYmVyICVzXG4iLAorCQkgICAgcGFyYW1zLT5wb3J0LCB2ZW5kb3JfbmFtZSwgdmVuZG9yX3BuKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHU4IGJueDJ4X2JjbTg3MjZfc2V0X2xpbWl0aW5nX21vZGUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkJCXUxNiBlZGNfbW9kZSkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OworCXU4IGV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCXUxNiBjdXJfbGltaXRpbmdfbW9kZTsKKworCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwKKwkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIyLAorCQkgICAgICAmY3VyX2xpbWl0aW5nX21vZGUpOworCURQKE5FVElGX01TR19MSU5LLCAiQ3VycmVudCBMaW1pdGluZyBtb2RlIGlzIDB4JXhcbiIsCisJCSBjdXJfbGltaXRpbmdfbW9kZSk7CisKKwlpZiAoZWRjX21vZGUgPT0gRURDX01PREVfTElNSVRJTkcpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkgIlNldHRpbmcgTElNSVRJTkcgTU9ERVxuIik7CisJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwKKwkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIyLAorCQkJICAgICAgIEVEQ19NT0RFX0xJTUlUSU5HKTsKKwl9IGVsc2UgeyAvKiBMUk0gbW9kZSAoIGRlZmF1bHQgKSovCisKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXR0aW5nIExSTSBNT0RFXG4iKTsKKworCQkvKiBDaGFuZ2luZyB0byBMUk0gbW9kZSB0YWtlcyBxdWl0ZSBmZXcgc2Vjb25kcy4KKwkJU28gZG8gaXQgb25seSBpZiBjdXJyZW50IG1vZGUgaXMgbGltaXRpbmcKKwkJKCBkZWZhdWx0IGlzIExSTSApKi8KKwkJaWYgKGN1cl9saW1pdGluZ19tb2RlICE9IEVEQ19NT0RFX0xJTUlUSU5HKQorCQkJcmV0dXJuIDA7CisKKwkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2LAorCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgICBNRElPX1BNQV9SRUdfTFJNX01PREUsCisJCQkgICAgICAgMCk7CisJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwKKwkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIyLAorCQkJICAgICAgIDB4MTI4KTsKKwkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2LAorCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgICBNRElPX1BNQV9SRUdfTUlTQ19DVFJMMCwKKwkJCSAgICAgICAweDQwMDgpOworCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYsCisJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgIE1ESU9fUE1BX1JFR19MUk1fTU9ERSwKKwkJCSAgICAgICAweGFhYWEpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHU4IGJueDJ4X2JjbTg3Mjdfc2V0X2xpbWl0aW5nX21vZGUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkJCXUxNiBlZGNfbW9kZSkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OworCXUxNiBwaHlfaWRlbnRpZmllcjsKKwl1MTYgcm9tX3ZlcjJfdmFsOworCXU4IGV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCisJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNywKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLAorCQkgICAgICAgJnBoeV9pZGVudGlmaWVyKTsKKworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfUEhZX0lERU5USUZJRVIsCisJCSAgICAgICAocGh5X2lkZW50aWZpZXIgJiB+KDE8PDkpKSk7CisKKwlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCisJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcsCisJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMiwKKwkJICAgICAgJnJvbV92ZXIyX3ZhbCk7CisJLyogS2VlcCB0aGUgTVNCIDgtYml0cywgYW5kIHNldCB0aGUgTFNCIDgtYml0cyB3aXRoIHRoZSBlZGNfbW9kZSAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjIsCisJCSAgICAgICAocm9tX3ZlcjJfdmFsICYgMHhmZjAwKSB8IChlZGNfbW9kZSAmIDB4MDBmZikpOworCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19QSFlfSURFTlRJRklFUiwKKwkJICAgICAgIChwaHlfaWRlbnRpZmllciB8ICgxPDw5KSkpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHU4IGJueDJ4X3dhaXRfZm9yX3NmcF9tb2R1bGVfaW5pdGlhbGl6ZWQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCit7CisJdTggdmFsOworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXUxNiB0aW1lb3V0OworCS8qIEluaXRpYWxpemF0aW9uIHRpbWUgYWZ0ZXIgaG90LXBsdWcgbWF5IHRha2UgdXAgdG8gMzAwbXMgZm9yIHNvbWUKKwlwaHlzIHR5cGUgKCBlLmcuIEpEU1UgKSAqLworCWZvciAodGltZW91dCA9IDA7IHRpbWVvdXQgPCA2MDsgdGltZW91dCsrKSB7CisJCWlmIChibngyeF9yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHBhcmFtcywgMSwgMSwgJnZhbCkKKwkJICAgID09IDApIHsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiU0ZQKyBtb2R1bGUgaW5pdGlhbGl6YXRpb24gIgorCQkJCSAgICAgInRvb2sgJWQgbXNcbiIsIHRpbWVvdXQgKiA1KTsKKwkJCXJldHVybiAwOworCQl9CisJCW1zbGVlcCg1KTsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4Xzg3MjdfcG93ZXJfbW9kdWxlKHN0cnVjdCBibngyeCAqYnAsCisJCQkJICBzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCQkgIHU4IGV4dF9waHlfYWRkciwgdTggaXNfcG93ZXJfdXApIHsKKwkvKiBNYWtlIHN1cmUgR1BJT3MgYXJlIG5vdCB1c2luZyBmb3IgTEVEIG1vZGUgKi8KKwl1MTYgdmFsOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJLyoKKwkgKiBJbiB0aGUgR1BJTyByZWdpc3RlciwgYml0IDQgaXMgdXNlIHRvIGRldGVtaW5lIGlmIHRoZSBHUElPcyBhcmUKKwkgKiBvcGVyYXRpbmcgYXMgSU5QVVQgb3IgYXMgT1VUUFVULiBCaXQgMSBpcyBmb3IgaW5wdXQsIGFuZCAwIGZvcgorCSAqIG91dHB1dAorCSAqIEJpdHMgMC0xIGRldGVybWluZSB0aGUgZ3Bpb3MgdmFsdWUgZm9yIE9VVFBVVCBpbiBjYXNlIGJpdCA0IHZhbCBpcyAwCisJICogQml0cyA4LTkgZGV0ZXJtaW5lIHRoZSBncGlvcyB2YWx1ZSBmb3IgSU5QVVQgaW4gY2FzZSBiaXQgNCB2YWwgaXMgMQorCSAqIHdoZXJlIHRoZSAxc3QgYml0IGlzIHRoZSBvdmVyLWN1cnJlbnQob25seSBpbnB1dCksIGFuZCAybmQgYml0IGlzCisJICogZm9yIHBvd2VyKCBvbmx5IG91dHB1dCApCisJKi8KKworCS8qCisJICogSW4gY2FzZSBvZiBOT0MgZmVhdHVyZSBpcyBkaXNhYmxlZCBhbmQgcG93ZXIgaXMgdXAsIHNldCBHUElPIGNvbnRyb2wKKwkgKiAgYXMgaW5wdXQgdG8gZW5hYmxlIGxpc3RlbmluZyBvZiBvdmVyLWN1cnJlbnQgaW5kaWNhdGlvbgorCSAqLworCisJaWYgKCEocGFyYW1zLT5mZWF0dXJlX2NvbmZpZ19mbGFncyAmCisJICAgICAgRkVBVFVSRV9DT05GSUdfQkNNODcyN19OT0MpICYmIGlzX3Bvd2VyX3VwKQorCQl2YWwgPSAoMTw8NCk7CisJZWxzZQorCQkvKgorCQkgKiBTZXQgR1BJTyBjb250cm9sIHRvIE9VVFBVVCwgYW5kIHNldCB0aGUgcG93ZXIgYml0CisJCSAqIHRvIGFjY29yZGluZyB0byB0aGUgaXNfcG93ZXJfdXAKKwkJICovCisJCXZhbCA9ICgoIShpc19wb3dlcl91cCkpIDw8IDEpOworCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR184NzI3X0dQSU9fQ1RSTCwKKwkJICAgICAgIHZhbCk7Cit9CisKK3N0YXRpYyB1OCBibngyeF9zZnBfbW9kdWxlX2RldGVjdGlvbihzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MTYgZWRjX21vZGU7CisJdTggcmMgPSAwOworCXU4IGV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKwl1MzIgdmFsID0gUkVHX1JEKGJwLCBwYXJhbXMtPnNobWVtX2Jhc2UgKworCQkJICAgICBvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLCBkZXZfaW5mby4KKwkJCQkgICAgIHBvcnRfZmVhdHVyZV9jb25maWdbcGFyYW1zLT5wb3J0XS5jb25maWcpKTsKKworCURQKE5FVElGX01TR19MSU5LLCAiU0ZQKyBtb2R1bGUgcGx1Z2dlZCBpbi9vdXQgZGV0ZWN0ZWQgb24gcG9ydCAlZFxuIiwKKwkJIHBhcmFtcy0+cG9ydCk7CisKKwlpZiAoYm54MnhfZ2V0X2VkY19tb2RlKHBhcmFtcywgJmVkY19tb2RlKSAhPSAwKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiRmFpbGVkIHRvIGdldCB2YWxpZCBtb2R1bGUgdHlwZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSBpZiAoYm54MnhfdmVyaWZ5X3NmcF9tb2R1bGUocGFyYW1zKSAhPQorCQkgICAwKSB7CisJCS8qIGNoZWNrIFNGUCsgbW9kdWxlIGNvbXBhdGliaWxpdHkgKi8KKwkJRFAoTkVUSUZfTVNHX0xJTkssICJNb2R1bGUgdmVyaWZpY2F0aW9uIGZhaWxlZCEhXG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQkvKiBUdXJuIG9uIGZhdWx0IG1vZHVsZS1kZXRlY3RlZCBsZWQgKi8KKwkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMCwKKwkJCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fSElHSCwKKwkJCQkgIHBhcmFtcy0+cG9ydCk7CisJCWlmICgoZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcpICYmCisJCSAgICAoKHZhbCAmIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9NQVNLKSA9PQorCQkgICAgIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9QT1dFUl9ET1dOKSkgeworCQkJLyogU2h1dGRvd24gU0ZQKyBtb2R1bGUgKi8KKwkJCURQKE5FVElGX01TR19MSU5LLCAiU2h1dGRvd24gU0ZQKyBtb2R1bGUhIVxuIik7CisJCQlibngyeF84NzI3X3Bvd2VyX21vZHVsZShicCwgcGFyYW1zLAorCQkJCQkgICAgICBleHRfcGh5X2FkZHIsIDApOworCQkJcmV0dXJuIHJjOworCQl9CisJfSBlbHNlIHsKKwkJLyogVHVybiBvZmYgZmF1bHQgbW9kdWxlLWRldGVjdGVkIGxlZCAqLworCQlEUChORVRJRl9NU0dfTElOSywgIlR1cm4gb2ZmIGZhdWx0IG1vZHVsZS1kZXRlY3RlZCBsZWRcbiIpOworCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18wLAorCQkJCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fTE9XLAorCQkJCQkgIHBhcmFtcy0+cG9ydCk7CisJfQorCisJLyogcG93ZXIgdXAgdGhlIFNGUCBtb2R1bGUgKi8KKwlpZiAoZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcpCisJCWJueDJ4Xzg3MjdfcG93ZXJfbW9kdWxlKGJwLCBwYXJhbXMsIGV4dF9waHlfYWRkciwgMSk7CisKKwkvKiBDaGVjayBhbmQgc2V0IGxpbWl0aW5nIG1vZGUgLyBMUk0gbW9kZSBvbiA4NzI2LgorCU9uIDg3MjcgaXQgaXMgZG9uZSBhdXRvbWF0aWNhbGx5ICovCisJaWYgKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2KQorCQlibngyeF9iY204NzI2X3NldF9saW1pdGluZ19tb2RlKHBhcmFtcywgZWRjX21vZGUpOworCWVsc2UKKwkJYm54MnhfYmNtODcyN19zZXRfbGltaXRpbmdfbW9kZShwYXJhbXMsIGVkY19tb2RlKTsKKwkvKgorCSAqIEVuYWJsZSB0cmFuc21pdCBmb3IgdGhpcyBtb2R1bGUgaWYgdGhlIG1vZHVsZSBpcyBhcHByb3ZlZCwgb3IKKwkgKiBpZiB1bmFwcHJvdmVkIG1vZHVsZXMgc2hvdWxkIGFsc28gZW5hYmxlIHRoZSBUeCBsYXNlcgorCSAqLworCWlmIChyYyA9PSAwIHx8CisJICAgICh2YWwgJiBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfTUFTSykgIT0KKwkgICAgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX0RJU0FCTEVfVFhfTEFTRVIpCisJCWJueDJ4X3NmcF9zZXRfdHJhbnNtaXR0ZXIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsIDEpOworCWVsc2UKKwkJYm54Mnhfc2ZwX3NldF90cmFuc21pdHRlcihicCwgcGFyYW1zLT5wb3J0LAorCQkJCQlleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwgMCk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3ZvaWQgYm54MnhfaGFuZGxlX21vZHVsZV9kZXRlY3RfaW50KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXUzMiBncGlvX3ZhbDsKKwl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OworCisJLyogU2V0IHZhbGlkIG1vZHVsZSBsZWQgb2ZmICovCisJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMCwKKwkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19ISUdILAorCQkJICBwYXJhbXMtPnBvcnQpOworCisJLyogR2V0IGN1cnJlbnQgZ3BpbyB2YWwgcmVmZWxlY3RpbmcgbW9kdWxlIHBsdWdnZWQgaW4gLyBvdXQqLworCWdwaW9fdmFsID0gYm54MnhfZ2V0X2dwaW8oYnAsICBNSVNDX1JFR0lTVEVSU19HUElPXzMsIHBvcnQpOworCisJLyogQ2FsbCB0aGUgaGFuZGxpbmcgZnVuY3Rpb24gaW4gY2FzZSBtb2R1bGUgaXMgZGV0ZWN0ZWQgKi8KKwlpZiAoZ3Bpb192YWwgPT0gMCkgeworCisJCWJueDJ4X3NldF9ncGlvX2ludChicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18zLAorCQkJCSAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX09VVFBVVF9DTFIsCisJCQkJICAgICAgcG9ydCk7CisKKwkJaWYgKGJueDJ4X3dhaXRfZm9yX3NmcF9tb2R1bGVfaW5pdGlhbGl6ZWQocGFyYW1zKSA9PQorCQkgICAgMCkKKwkJCWJueDJ4X3NmcF9tb2R1bGVfZGV0ZWN0aW9uKHBhcmFtcyk7CisJCWVsc2UKKwkJCURQKE5FVElGX01TR19MSU5LLCAiU0ZQKyBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkXG4iKTsKKwl9IGVsc2UgeworCQl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKworCQl1MzIgZXh0X3BoeV90eXBlID0KKwkJCVhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCQl1MzIgdmFsID0gUkVHX1JEKGJwLCBwYXJhbXMtPnNobWVtX2Jhc2UgKworCQkJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHNobWVtX3JlZ2lvbiwgZGV2X2luZm8uCisJCQkJCSAgICAgIHBvcnRfZmVhdHVyZV9jb25maWdbcGFyYW1zLT5wb3J0XS4KKwkJCQkJICAgICAgY29uZmlnKSk7CisKKwkJYm54Mnhfc2V0X2dwaW9faW50KGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzMsCisJCQkJICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfT1VUUFVUX1NFVCwKKwkJCQkgICAgICBwb3J0KTsKKwkJLyogTW9kdWxlIHdhcyBwbHVnZ2VkIG91dC4gKi8KKwkJLyogRGlzYWJsZSB0cmFuc21pdCBmb3IgdGhpcyBtb2R1bGUgKi8KKwkJaWYgKCh2YWwgJiBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfTUFTSykgPT0KKwkJICAgIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9ESVNBQkxFX1RYX0xBU0VSKQorCQkJYm54Mnhfc2ZwX3NldF90cmFuc21pdHRlcihicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkJZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsIDApOworCX0KK30KKworc3RhdGljIHZvaWQgYm54MnhfYmNtODA3eF9mb3JjZV8xMEcoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKKwl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKwl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisKKwkvKiBGb3JjZSBLUiBvciBLWCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwKKwkJICAgICAgIDB4MjA0MCk7CisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR18xMEdfQ1RSTDIsCisJCSAgICAgICAweDAwMGIpOworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfQkNNX0NUUkwsCisJCSAgICAgICAweDAwMDApOworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19BTl9ERVZBRCwKKwkJICAgICAgIE1ESU9fQU5fUkVHX0NUUkwsCisJCSAgICAgICAweDAwMDApOworfQorCitzdGF0aWMgdm9pZCBibngyeF9iY204MDczX3NldF94YXVpX2xvd19wb3dlcl9tb2RlKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJdTE2IHZhbDsKKwl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKwl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisKKwlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKKwkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgTURJT19QTUFfUkVHXzgwNzNfQ0hJUF9SRVYsICZ2YWwpOworCisJaWYgKHZhbCA9PSAwKSB7CisJCS8qIE11c3RuJ3Qgc2V0IGxvdyBwb3dlciBtb2RlIGluIDgwNzMgQTAgKi8KKwkJcmV0dXJuOworCX0KKworCS8qIERpc2FibGUgUExMIHNlcXVlbmNlciAodXNlIHJlYWQtbW9kaWZ5LXdyaXRlIHRvIGNsZWFyIGJpdCAxMykgKi8KKwlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19YU19ERVZBRCwKKwkJICAgICAgIE1ESU9fWFNfUExMX1NFUVVFTkNFUiwgJnZhbCk7CisJdmFsICY9IH4oMTw8MTMpOworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19YU19ERVZBRCwgTURJT19YU19QTExfU0VRVUVOQ0VSLCB2YWwpOworCisJLyogUExMIGNvbnRyb2xzICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1hTX0RFVkFELCAweDgwNUUsIDB4MTA3Nyk7CisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1hTX0RFVkFELCAweDgwNUQsIDB4MDAwMCk7CisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1hTX0RFVkFELCAweDgwNUMsIDB4MDMwQik7CisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1hTX0RFVkFELCAweDgwNUIsIDB4MTI0MCk7CisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1hTX0RFVkFELCAweDgwNUEsIDB4MjQ5MCk7CisKKwkvKiBUeCBDb250cm9scyAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19YU19ERVZBRCwgMHg4MEE3LCAweDBDNzQpOworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19YU19ERVZBRCwgMHg4MEE2LCAweDkwNDEpOworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19YU19ERVZBRCwgMHg4MEE1LCAweDQ2NDApOworCisJLyogUnggQ29udHJvbHMgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fWFNfREVWQUQsIDB4ODBGRSwgMHgwMUM0KTsKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fWFNfREVWQUQsIDB4ODBGRCwgMHg5MjQ5KTsKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fWFNfREVWQUQsIDB4ODBGQywgMHgyMDE1KTsKKworCS8qIEVuYWJsZSBQTEwgc2VxdWVuY2VyICAodXNlIHJlYWQtbW9kaWZ5LXdyaXRlIHRvIHNldCBiaXQgMTMpICovCisJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fWFNfREVWQUQsCisJCSAgICAgICBNRElPX1hTX1BMTF9TRVFVRU5DRVIsICZ2YWwpOworCXZhbCB8PSAoMTw8MTMpOworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19YU19ERVZBRCwgTURJT19YU19QTExfU0VRVUVOQ0VSLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBibngyeF84MDczX3NldF9wYXVzZV9jbDM3KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAorCQkJCSAgc3RydWN0IGxpbmtfdmFycyAqdmFycykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MTYgY2wzN192YWw7CisJdTggZXh0X3BoeV9hZGRyID0gWEdYU19FWFRfUEhZX0FERFIocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisJdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCisJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkgICAgICBNRElPX0FOX1JFR19DTDM3X0ZDX0xELCAmY2wzN192YWwpOworCisJY2wzN192YWwgJj0gfk1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0JPVEg7CisJLyogUGxlYXNlIHJlZmVyIHRvIFRhYmxlIDI4Qi0zIG9mIDgwMi4zYWItMTk5OSBzcGVjLiAqLworCisJaWYgKCh2YXJzLT5pZWVlX2ZjICYKKwkgICAgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfU1lNTUVUUklDKSA9PQorCSAgICBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9TWU1NRVRSSUMpIHsKKwkJY2wzN192YWwgfD0gIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX1NZTU1FVFJJQzsKKwl9CisJaWYgKCh2YXJzLT5pZWVlX2ZjICYKKwkgICAgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfQVNZTU1FVFJJQykgPT0KKwkgICAgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfQVNZTU1FVFJJQykgeworCQljbDM3X3ZhbCB8PSAgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfQVNZTU1FVFJJQzsKKwl9CisJaWYgKCh2YXJzLT5pZWVlX2ZjICYKKwkgICAgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfQk9USCkgPT0KKwkgICAgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfQk9USCkgeworCQljbDM3X3ZhbCB8PSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9CT1RIOworCX0KKwlEUChORVRJRl9NU0dfTElOSywKKwkJICJFeHQgcGh5IEFOIGFkdmVydGl6ZSBjbDM3IDB4JXhcbiIsIGNsMzdfdmFsKTsKKworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fQU5fREVWQUQsCisJCSAgICAgICBNRElPX0FOX1JFR19DTDM3X0ZDX0xELCBjbDM3X3ZhbCk7CisJbXNsZWVwKDUwMCk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2V4dF9waHlfc2V0X3BhdXNlKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAorCQkJCSAgc3RydWN0IGxpbmtfdmFycyAqdmFycykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MTYgdmFsOworCXU4IGV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKworCS8qIHJlYWQgbW9kaWZ5IHdyaXRlIHBhdXNlIGFkdmVydGl6aW5nICovCisJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkgICAgICBNRElPX0FOX1JFR19BRFZfUEFVU0UsICZ2YWwpOworCisJdmFsICY9IH5NRElPX0FOX1JFR19BRFZfUEFVU0VfQk9USDsKKworCS8qIFBsZWFzZSByZWZlciB0byBUYWJsZSAyOEItMyBvZiA4MDIuM2FiLTE5OTkgc3BlYy4gKi8KKworCWlmICgodmFycy0+aWVlZV9mYyAmCisJICAgIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0FTWU1NRVRSSUMpID09CisJICAgIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0FTWU1NRVRSSUMpIHsKKwkJdmFsIHw9ICBNRElPX0FOX1JFR19BRFZfUEFVU0VfQVNZTU1FVFJJQzsKKwl9CisJaWYgKCh2YXJzLT5pZWVlX2ZjICYKKwkgICAgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfQk9USCkgPT0KKwkgICAgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfQk9USCkgeworCQl2YWwgfD0KKwkJIE1ESU9fQU5fUkVHX0FEVl9QQVVTRV9QQVVTRTsKKwl9CisJRFAoTkVUSUZfTVNHX0xJTkssCisJCSAiRXh0IHBoeSBBTiBhZHZlcnRpemUgMHgleFxuIiwgdmFsKTsKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX0FOX0RFVkFELAorCQkgICAgICAgTURJT19BTl9SRUdfQURWX1BBVVNFLCB2YWwpOworfQorc3RhdGljIHZvaWQgYm54Mnhfc2V0X3ByZWVtcGhhc2lzKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXUxNiBiYW5rLCBpID0gMDsKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKworCWZvciAoYmFuayA9IE1ESU9fUkVHX0JBTktfUlgwLCBpID0gMDsgYmFuayA8PSBNRElPX1JFR19CQU5LX1JYMzsKKwkgICAgICBiYW5rICs9IChNRElPX1JFR19CQU5LX1JYMS1NRElPX1JFR19CQU5LX1JYMCksIGkrKykgeworCQkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkJICAgICAgYmFuaywKKwkJCQkJICAgICAgTURJT19SWDBfUlhfRVFfQk9PU1QsCisJCQkJCSAgICAgIHBhcmFtcy0+eGd4c19jb25maWdfcnhbaV0pOworCX0KKworCWZvciAoYmFuayA9IE1ESU9fUkVHX0JBTktfVFgwLCBpID0gMDsgYmFuayA8PSBNRElPX1JFR19CQU5LX1RYMzsKKwkJICAgICAgYmFuayArPSAoTURJT19SRUdfQkFOS19UWDEgLSBNRElPX1JFR19CQU5LX1RYMCksIGkrKykgeworCQkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkJICAgICAgYmFuaywKKwkJCQkJICAgICAgTURJT19UWDBfVFhfRFJJVkVSLAorCQkJCQkgICAgICBwYXJhbXMtPnhneHNfY29uZmlnX3R4W2ldKTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgYm54MnhfODQ4MV9zZXRfbGVkNChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCSAgICAgIHUzMiBleHRfcGh5X3R5cGUsIHU4IGV4dF9waHlfYWRkcikKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKworCS8qIFBIWUNfQ1RMX0xFRF9DVEwgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR184NDgxX0xJTktfU0lHTkFMLCAweGE0ODIpOworCisJLyogVW5tYXNrIExFRDQgZm9yIDEwRyBsaW5rICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfODQ4MV9TSUdOQUxfTUFTSywgKDE8PDYpKTsKKwkvKiAnSW50ZXJydXB0IE1hc2snICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19BTl9ERVZBRCwKKwkJICAgICAgIDB4RkZGQiwgMHhGRkZEKTsKK30KK3N0YXRpYyB2b2lkIGJueDJ4Xzg0ODFfc2V0X2xlZ2FjeV9sZWRfbW9kZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCQkJIHUzMiBleHRfcGh5X3R5cGUsIHU4IGV4dF9waHlfYWRkcikKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKworCS8qIExFRDEgKDEwRyBMaW5rKTogRGlzYWJsZSBMRUQxIHdoZW4gMTAvMTAwLzEwMDAgbGluayAqLworCS8qIExFRDIgKDFHLzEwMC8xMCBMaW5rKTogRW5hYmxlIExFRDIgd2hlbiAxMC8xMDAvMTAwMCBsaW5rKSAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fQU5fREVWQUQsCisJCSAgICAgICBNRElPX0FOX1JFR184NDgxX0xFR0FDWV9TSEFET1csCisJCSAgICAgICAoMTw8MTUpIHwgKDB4ZCA8PCAxMCkgfCAoMHhjPDw0KSB8IDB4ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4Xzg0ODFfc2V0XzEwR19sZWRfbW9kZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCQkgICAgICB1MzIgZXh0X3BoeV90eXBlLCB1OCBleHRfcGh5X2FkZHIpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTE2IHZhbDE7CisKKwkvKiBMRUQxICgxMEcgTGluaykgKi8KKwkvKiBFbmFibGUgY29udGludXNlIGJhc2VkIG9uIHNvdXJjZSA3KDEwRy1saW5rKSAqLworCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfODQ4MV9MSU5LX1NJR05BTCwKKwkJICAgICAgICZ2YWwxKTsKKwkvKiBTZXQgYml0IDIgdG8gMCwgYW5kIGJpdHMgWzE6MF0gdG8gMTAgKi8KKwl2YWwxICY9IH4oKDE8PDApIHwgKDE8PDIpIHwgKDE8PDcpKTsgLyogQ2xlYXIgYml0cyAwLDIsNyovCisJdmFsMSB8PSAoKDE8PDEpIHwgKDE8PDYpKTsgLyogU2V0IGJpdCAxLCA2ICovCisKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR184NDgxX0xJTktfU0lHTkFMLAorCQkgICAgICAgdmFsMSk7CisKKwkvKiBVbm1hc2sgTEVEMSBmb3IgMTBHIGxpbmsgKi8KKwlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJICAgICAgZXh0X3BoeV90eXBlLAorCQkgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICBNRElPX1BNQV9SRUdfODQ4MV9MRUQxX01BU0ssCisJCSAgICAgICZ2YWwxKTsKKwkvKiBTZXQgYml0IDIgdG8gMCwgYW5kIGJpdHMgWzE6MF0gdG8gMTAgKi8KKwl2YWwxIHw9ICgxPDw3KTsKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR184NDgxX0xFRDFfTUFTSywKKwkJICAgICAgIHZhbDEpOworCisJLyogTEVEMiAoMUcvMTAwLzEwRyBMaW5rKSAqLworCS8qIE1hc2sgTEVEMiBmb3IgMTBHIGxpbmsgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR184NDgxX0xFRDJfTUFTSywKKwkJICAgICAgIDApOworCisJLyogVW5tYXNrIExFRDMgZm9yIDEwRyBsaW5rICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgIE1ESU9fUE1BX1JFR184NDgxX0xFRDNfTUFTSywKKwkJICAgICAgIDB4Nik7CisJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfODQ4MV9MRUQzX0JMSU5LLAorCQkgICAgICAgMCk7Cit9CisKKworc3RhdGljIHZvaWQgYm54MnhfaW5pdF9pbnRlcm5hbF9waHkoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkJICBzdHJ1Y3QgbGlua192YXJzICp2YXJzLAorCQkJCSAgdTggZW5hYmxlX2NsNzMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisKKwlpZiAoISh2YXJzLT5waHlfZmxhZ3MgJiBQSFlfU0dNSUlfRkxBRykpIHsKKwkJaWYgKChYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKSA9PQorCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVCkgJiYKKwkJICAgIChwYXJhbXMtPmZlYXR1cmVfY29uZmlnX2ZsYWdzICYKKwkJICAgICBGRUFUVVJFX0NPTkZJR19PVkVSUklERV9QUkVFTVBIQVNJU19FTkFCTEVEKSkKKwkJCWJueDJ4X3NldF9wcmVlbXBoYXNpcyhwYXJhbXMpOworCisJCS8qIGZvcmNlZCBzcGVlZCByZXF1ZXN0ZWQ/ICovCisJCWlmICh2YXJzLT5saW5lX3NwZWVkICE9IFNQRUVEX0FVVE9fTkVHIHx8CisJCSAgICAoKFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpID09CisJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUKSAmJgorCQkJICBwYXJhbXMtPmxvb3BiYWNrX21vZGUgPT0gTE9PUEJBQ0tfRVhUKSkgeworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJub3QgU0dNSUksIG5vIEFOXG4iKTsKKworCQkJLyogZGlzYWJsZSBhdXRvbmVnICovCisJCQlibngyeF9zZXRfYXV0b25lZyhwYXJhbXMsIHZhcnMsIDApOworCisJCQkvKiBwcm9ncmFtIHNwZWVkIGFuZCBkdXBsZXggKi8KKwkJCWJueDJ4X3Byb2dyYW1fc2VyZGVzKHBhcmFtcywgdmFycyk7CisKKwkJfSBlbHNlIHsgLyogQU5fbW9kZSAqLworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJub3QgU0dNSUksIEFOXG4iKTsKKworCQkJLyogQU4gZW5hYmxlZCAqLworCQkJYm54Mnhfc2V0X2JyY21fY2wzN19hZHZlcnRpc21lbnQocGFyYW1zKTsKKworCQkJLyogcHJvZ3JhbSBkdXBsZXggJiBwYXVzZSBhZHZlcnRpc2VtZW50IChmb3IgYW5lZykgKi8KKwkJCWJueDJ4X3NldF9pZWVlX2FuZWdfYWR2ZXJ0aXNtZW50KHBhcmFtcywKKwkJCQkJCSAgICAgICB2YXJzLT5pZWVlX2ZjKTsKKworCQkJLyogZW5hYmxlIGF1dG9uZWcgKi8KKwkJCWJueDJ4X3NldF9hdXRvbmVnKHBhcmFtcywgdmFycywgZW5hYmxlX2NsNzMpOworCisJCQkvKiBlbmFibGUgYW5kIHJlc3RhcnQgQU4gKi8KKwkJCWJueDJ4X3Jlc3RhcnRfYXV0b25lZyhwYXJhbXMsIGVuYWJsZV9jbDczKTsKKwkJfQorCisJfSBlbHNlIHsgLyogU0dNSUkgbW9kZSAqLworCQlEUChORVRJRl9NU0dfTElOSywgIlNHTUlJXG4iKTsKKworCQlibngyeF9pbml0aWFsaXplX3NnbWlpX3Byb2Nlc3MocGFyYW1zLCB2YXJzKTsKKwl9Cit9CisKK3N0YXRpYyB1OCBibngyeF9leHRfcGh5X2luaXQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTMyIGV4dF9waHlfdHlwZTsKKwl1OCBleHRfcGh5X2FkZHI7CisJdTE2IGNudDsKKwl1MTYgY3RybCA9IDA7CisJdTE2IHZhbCA9IDA7CisJdTggcmMgPSAwOworCisJaWYgKHZhcnMtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpIHsKKwkJZXh0X3BoeV9hZGRyID0gWEdYU19FWFRfUEhZX0FERFIocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisKKwkJZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisJCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBzb2Z0IHJlc2V0IGlzIG9mZiAoZXhwZWN0IGZvciB0aGUgODA3MjoKKwkJICogZHVlIHRvIHRoZSBsb2NrLCBpdCB3aWxsIGJlIGRvbmUgaW5zaWRlIHRoZSBzcGVjaWZpYworCQkgKiBoYW5kbGluZykKKwkJICovCisJCWlmICgoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVCkgJiYKKwkJICAgIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRkFJTFVSRSkgJiYKKwkJICAgKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9OT1RfQ09OTikgJiYKKwkJICAgIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MikgJiYKKwkJICAgIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MykpIHsKKwkJCS8qIFdhaXQgZm9yIHNvZnQgcmVzZXQgdG8gZ2V0IGNsZWFyZWQgdXB0byAxIHNlYyAqLworCQkJZm9yIChjbnQgPSAwOyBjbnQgPCAxMDAwOyBjbnQrKykgeworCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgIE1ESU9fUE1BX1JFR19DVFJMLCAmY3RybCk7CisJCQkJaWYgKCEoY3RybCAmICgxPDwxNSkpKQorCQkJCQlicmVhazsKKwkJCQltc2xlZXAoMSk7CisJCQl9CisJCQlEUChORVRJRl9NU0dfTElOSywgImNvbnRyb2wgcmVnIDB4JXggKGFmdGVyICVkIG1zKVxuIiwKKwkJCQkgY3RybCwgY250KTsKKwkJfQorCisJCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUOgorCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1OgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDg3MDVcbiIpOworCisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICAgTURJT19QTUFfUkVHX01JU0NfQ1RSTCwKKwkJCQkgICAgICAgMHg4Mjg4KTsKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgICBNRElPX1BNQV9SRUdfUEhZX0lERU5USUZJRVIsCisJCQkJICAgICAgIDB4N2ZiZik7CisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICAgTURJT19QTUFfUkVHX0NNVV9QTExfQllQQVNTLAorCQkJCSAgICAgICAweDAxMDApOworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19XSVNfREVWQUQsCisJCQkJICAgICAgIE1ESU9fV0lTX1JFR19MQVNJX0NOVEwsIDB4MSk7CisKKwkJCS8qIEJDTTg3MDUgZG9lc24ndCBoYXZlIG1pY3JvY29kZSwgaGVuY2UgdGhlIDAgKi8KKwkJCWJueDJ4X3NhdmVfc3Bpcm9tX3ZlcnNpb24oYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCXBhcmFtcy0+c2htZW1fYmFzZSwgMCk7CisJCQlicmVhazsKKworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDY6CisJCQkvKiBXYWl0IHVudGlsIGZ3IGlzIGxvYWRlZCAqLworCQkJZm9yIChjbnQgPSAwOyBjbnQgPCAxMDA7IGNudCsrKSB7CisJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIxLCAmdmFsKTsKKwkJCQlpZiAodmFsKQorCQkJCQlicmVhazsKKwkJCQltc2xlZXAoMTApOworCQkJfQorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDg3MDYgaXMgaW5pdGlhbGl6ZWQgIgorCQkJCSJhZnRlciAlZCBtc1xuIiwgY250KTsKKwkJCWlmICgocGFyYW1zLT5mZWF0dXJlX2NvbmZpZ19mbGFncyAmCisJCQkgICAgIEZFQVRVUkVfQ09ORklHX09WRVJSSURFX1BSRUVNUEhBU0lTX0VOQUJMRUQpKSB7CisJCQkJdTggaTsKKwkJCQl1MTYgcmVnOworCQkJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCQkJcmVnID0gTURJT19YU184NzA2X1JFR19CQU5LX1JYMCArCisJCQkJCQlpKihNRElPX1hTXzg3MDZfUkVHX0JBTktfUlgxIC0KKwkJCQkJCSAgIE1ESU9fWFNfODcwNl9SRUdfQkFOS19SWDApOworCQkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJCSAgICAgIE1ESU9fWFNfREVWQUQsCisJCQkJCQkgICAgICByZWcsICZ2YWwpOworCQkJCQkvKiBDbGVhciBmaXJzdCAzIGJpdHMgb2YgdGhlIGNvbnRyb2wgKi8KKwkJCQkJdmFsICY9IH4weDc7CisJCQkJCS8qIFNldCBjb250cm9sIGJpdHMgYWNjb3JkaW5nIHRvCisJCQkJCWNvbmZpZ3VhdGlvbiAqLworCQkJCQl2YWwgfD0gKHBhcmFtcy0+eGd4c19jb25maWdfcnhbaV0gJgorCQkJCQkJMHg3KTsKKwkJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXR0aW5nIFJYIgorCQkJCQkJICJFcXVhbGl6ZXIgdG8gQkNNODcwNiByZWcgMHgleCIKKwkJCQkJCSAiIDwtLSB2YWwgMHgleFxuIiwgcmVnLCB2YWwpOworCQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJCSAgICAgICBNRElPX1hTX0RFVkFELAorCQkJCQkJICAgICAgIHJlZywgdmFsKTsKKwkJCQl9CisJCQl9CisJCQkvKiBGb3JjZSBzcGVlZCAqLworCQkJaWYgKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfMTAwMDApIHsKKwkJCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgODcwNiBmb3JjZSAxMEdicHNcbiIpOworCisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfRElHSVRBTF9DVFJMLAorCQkJCQkgICAgICAgMHg0MDApOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fUE1BX1JFR19MQVNJX0NUUkwsIDEpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBGb3JjZSAxR2JwcyB1c2luZyBhdXRvbmVnIHdpdGggMUcKKwkJCQlhZHZlcnRpc21lbnQgKi8KKworCQkJCS8qIEFsbG93IENMMzcgdGhyb3VnaCBDTDczICovCisJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDg3MDYgQXV0b05lZ1xuIik7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NMMzdfQ0w3MywKKwkJCQkJICAgICAgIDB4MDQwYyk7CisKKwkJCQkvKiBFbmFibGUgRnVsbC1EdXBsZXggYWR2ZXJ0aXNtZW50IG9uIENMMzcgKi8KKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgICBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICAgTURJT19BTl9SRUdfQ0wzN19GQ19MUCwKKwkJCQkJICAgICAgIDB4MDAyMCk7CisJCQkJLyogRW5hYmxlIENMMzcgQU4gKi8KKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgICBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICAgTURJT19BTl9SRUdfQ0wzN19BTiwKKwkJCQkJICAgICAgIDB4MTAwMCk7CisJCQkJLyogMUcgc3VwcG9ydCAqLworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgICBNRElPX0FOX1JFR19BRFYsICgxPDw1KSk7CisKKwkJCQkvKiBFbmFibGUgY2xhdXNlIDczIEFOICovCisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NUUkwsCisJCQkJCSAgICAgICAweDEyMDApOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHX1JYX0FMQVJNX0NUUkwsCisJCQkJCSAgICAgICAweDA0MDApOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHX0xBU0lfQ1RSTCwgMHgwMDA0KTsKKworCQkJfQorCQkJYm54Mnhfc2F2ZV9iY21fc3Bpcm9tX3ZlcihicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkJZXh0X3BoeV90eXBlLAorCQkJCQkJZXh0X3BoeV9hZGRyLAorCQkJCQkJcGFyYW1zLT5zaG1lbV9iYXNlKTsKKwkJCWJyZWFrOworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CisJCQlEUChORVRJRl9NU0dfTElOSywgIkluaXRpYWxpemluZyBCQ004NzI2XG4iKTsKKwkJCWJueDJ4X2JjbTg3MjZfZXh0ZXJuYWxfcm9tX2Jvb3QocGFyYW1zKTsKKworCQkJLyogTmVlZCB0byBjYWxsIG1vZHVsZSBkZXRlY3RlZCBvbiBpbml0aWFsaXphdGlvbiBzaW5jZQorCQkJdGhlIG1vZHVsZSBkZXRlY3Rpb24gdHJpZ2dlcmVkIGJ5IGFjdHVhbCBtb2R1bGUKKwkJCWluc2VydGlvbiBtaWdodCBvY2N1ciBiZWZvcmUgZHJpdmVyIGlzIGxvYWRlZCwgYW5kIHdoZW4KKwkJCWRyaXZlciBpcyBsb2FkZWQsIGl0IHJlc2V0IGFsbCByZWdpc3RlcnMsIGluY2x1ZGluZyB0aGUKKwkJCXRyYW5zbWl0dGVyICovCisJCQlibngyeF9zZnBfbW9kdWxlX2RldGVjdGlvbihwYXJhbXMpOworCisJCQkvKiBTZXQgRmxvdyBjb250cm9sICovCisJCQlibngyeF9leHRfcGh5X3NldF9wYXVzZShwYXJhbXMsIHZhcnMpOworCQkJaWYgKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfMTAwMCkgeworCQkJCURQKE5FVElGX01TR19MSU5LLCAiU2V0dGluZyAxRyBmb3JjZVxuIik7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsIDB4NDApOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fUE1BX1JFR18xMEdfQ1RSTDIsIDB4RCk7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHX0xBU0lfQ1RSTCwgMHg1KTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfUlhfQUxBUk1fQ1RSTCwKKwkJCQkJICAgICAgIDB4NDAwKTsKKwkJCX0gZWxzZSBpZiAoKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0KKwkJCQkgICAgU1BFRURfQVVUT19ORUcpICYmCisJCQkJICAgKChwYXJhbXMtPnNwZWVkX2NhcF9tYXNrICYKKwkJCQkgICAgIFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMUcpKSkgeworCQkJCURQKE5FVElGX01TR19MSU5LLCAiU2V0dGluZyAxRyBjbGF1c2UzN1xuIik7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgICBNRElPX0FOX1JFR19BRFYsIDB4MjApOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICAgTURJT19BTl9SRUdfQ0wzN19DTDczLCAweDA0MGMpOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICAgTURJT19BTl9SRUdfQ0wzN19GQ19MRCwgMHgwMDIwKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NMMzdfQU4sIDB4MTAwMCk7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgICBNRElPX0FOX1JFR19DVFJMLCAweDEyMDApOworCisJCQkJLyogRW5hYmxlIFJYLUFMQVJNIGNvbnRyb2wgdG8gcmVjZWl2ZQorCQkJCWludGVycnVwdCBmb3IgMUcgc3BlZWQgY2hhbmdlICovCisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHX0xBU0lfQ1RSTCwgMHg0KTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfUlhfQUxBUk1fQ1RSTCwKKwkJCQkJICAgICAgIDB4NDAwKTsKKworCQkJfSBlbHNlIHsgLyogRGVmYXVsdCAxMEcuIFNldCBvbmx5IExBU0kgY29udHJvbCAqLworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fUE1BX1JFR19MQVNJX0NUUkwsIDEpOworCQkJfQorCisJCQkvKiBTZXQgVFggUHJlRW1waGFzaXMgaWYgbmVlZGVkICovCisJCQlpZiAoKHBhcmFtcy0+ZmVhdHVyZV9jb25maWdfZmxhZ3MgJgorCQkJICAgICBGRUFUVVJFX0NPTkZJR19PVkVSUklERV9QUkVFTVBIQVNJU19FTkFCTEVEKSkgeworCQkJCURQKE5FVElGX01TR19MSU5LLCAiU2V0dGluZyBUWF9DVFJMMSAweCV4LCIKKwkJCQkJICJUWF9DVFJMMiAweCV4XG4iLAorCQkJCQkgcGFyYW1zLT54Z3hzX2NvbmZpZ190eFswXSwKKwkJCQkJIHBhcmFtcy0+eGd4c19jb25maWdfdHhbMV0pOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHXzg3MjZfVFhfQ1RSTDEsCisJCQkJCSAgICAgICBwYXJhbXMtPnhneHNfY29uZmlnX3R4WzBdKTsKKworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHXzg3MjZfVFhfQ1RSTDIsCisJCQkJCSAgICAgICBwYXJhbXMtPnhneHNfY29uZmlnX3R4WzFdKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MzoKKwkJeworCQkJdTE2IHRtcDE7CisJCQl1MTYgcnhfYWxhcm1fY3RybF92YWw7CisJCQl1MTYgbGFzaV9jdHJsX3ZhbDsKKwkJCWlmIChleHRfcGh5X3R5cGUgPT0KKwkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyKSB7CisJCQkJcnhfYWxhcm1fY3RybF92YWwgPSAweDQwMDsKKwkJCQlsYXNpX2N0cmxfdmFsID0gMHgwMDA0OworCQkJfSBlbHNlIHsKKwkJCQlyeF9hbGFybV9jdHJsX3ZhbCA9ICgxPDwyKTsKKwkJCQlsYXNpX2N0cmxfdmFsID0gMHgwMDA0OworCQkJfQorCisJCQkvKiBlbmFibGUgTEFTSSAqLworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICBleHRfcGh5X2FkZHIsCisJCQkJICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgTURJT19QTUFfUkVHX1JYX0FMQVJNX0NUUkwsCisJCQkJICAgcnhfYWxhcm1fY3RybF92YWwpOworCisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICAgTURJT19QTUFfUkVHX0xBU0lfQ1RSTCwKKwkJCQkgICAgICAgbGFzaV9jdHJsX3ZhbCk7CisKKwkJCWJueDJ4XzgwNzNfc2V0X3BhdXNlX2NsMzcocGFyYW1zLCB2YXJzKTsKKworCQkJaWYgKGV4dF9waHlfdHlwZSA9PQorCQkJICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzIpCisJCQkJYm54MnhfYmNtODA3Ml9leHRlcm5hbF9yb21fYm9vdChwYXJhbXMpOworCQkJZWxzZQorCQkJCS8qIEluIGNhc2Ugb2YgODA3MyB3aXRoIGxvbmcgeGF1aSBsaW5lcywKKwkJCQlkb24ndCBzZXQgdGhlIDgwNzMgeGF1aSBsb3cgcG93ZXIqLworCQkJCWJueDJ4X2JjbTgwNzNfc2V0X3hhdWlfbG93X3Bvd2VyX21vZGUocGFyYW1zKTsKKworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfTTgwNTFfTVNHT1VUX1JFRywKKwkJCQkgICAgICAmdG1wMSk7CisKKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgTURJT19QTUFfUkVHX1JYX0FMQVJNLCAmdG1wMSk7CisKKwkJCURQKE5FVElGX01TR19MSU5LLCAiQmVmb3JlIHJvbSBSWF9BTEFSTShwb3J0MSk6IgorCQkJCQkgICAgICIweCV4XG4iLCB0bXAxKTsKKworCQkJLyogSWYgdGhpcyBpcyBmb3JjZWQgc3BlZWQsIHNldCB0byBLUiBvciBLWAorCQkJICogKGFsbCBvdGhlciBhcmUgbm90IHN1cHBvcnRlZCkKKwkJCSAqLworCQkJaWYgKHBhcmFtcy0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19FWFQpIHsKKwkJCQlibngyeF9iY204MDd4X2ZvcmNlXzEwRyhwYXJhbXMpOworCQkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCQkiRm9yY2VkIHNwZWVkIDEwRyBvbiA4MDdYXG4iKTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fUE1BX1JFR19CQ01fQ1RSTCwKKwkJCQkJICAgICAgIDB4MDAwMik7CisJCQl9CisJCQlpZiAocGFyYW1zLT5yZXFfbGluZV9zcGVlZCAhPSBTUEVFRF9BVVRPX05FRykgeworCQkJCWlmIChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09IFNQRUVEXzEwMDAwKSB7CisJCQkJCXZhbCA9ICgxPDw3KTsKKwkJCQl9IGVsc2UgaWYgKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0KKwkJCQkJICAgU1BFRURfMjUwMCkgeworCQkJCQl2YWwgPSAoMTw8NSk7CisJCQkJCS8qIE5vdGUgdGhhdCAyLjVHIHdvcmtzIG9ubHkKKwkJCQkJd2hlbiB1c2VkIHdpdGggMUcgYWR2ZXJ0aXNtZW50ICovCisJCQkJfSBlbHNlCisJCQkJCXZhbCA9ICgxPDw1KTsKKwkJCX0gZWxzZSB7CisKKwkJCQl2YWwgPSAwOworCQkJCWlmIChwYXJhbXMtPnNwZWVkX2NhcF9tYXNrICYKKwkJCQkJUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xMEcpCisJCQkJCXZhbCB8PSAoMTw8Nyk7CisKKwkJCQkvKiBOb3RlIHRoYXQgMi41RyB3b3JrcyBvbmx5IHdoZW4KKwkJCQl1c2VkIHdpdGggMUcgYWR2ZXJ0aXNtZW50ICovCisJCQkJaWYgKHBhcmFtcy0+c3BlZWRfY2FwX21hc2sgJgorCQkJCQkoUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xRyB8CisJCQkJCSBQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzJfNUcpKQorCQkJCQl2YWwgfD0gKDE8PDUpOworCQkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCQkgIjgwN3ggYXV0b25lZyB2YWwgPSAweCV4XG4iLCB2YWwpOworCQkJfQorCisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX0FOX0RFVkFELAorCQkJCSAgICAgICBNRElPX0FOX1JFR19BRFYsIHZhbCk7CisJCQlpZiAoZXh0X3BoeV90eXBlID09CisJCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MykgeworCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgTURJT19BTl9SRUdfODA3M18yXzVHLCAmdG1wMSk7CisKKwkJCQlpZiAoKChwYXJhbXMtPnNwZWVkX2NhcF9tYXNrICYKKwkJCQkgICAgICBQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzJfNUcpICYmCisJCQkJICAgICAocGFyYW1zLT5yZXFfbGluZV9zcGVlZCA9PQorCQkJCSAgICAgIFNQRUVEX0FVVE9fTkVHKSkgfHwKKwkJCQkgICAgKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0KKwkJCQkgICAgIFNQRUVEXzI1MDApKSB7CisJCQkJCXUxNiBwaHlfdmVyOworCQkJCQkvKiBBbGxvdyAyLjVHIGZvciBBMSBhbmQgYWJvdmUgKi8KKwkJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAorCQkJCQkgZXh0X3BoeV9hZGRyLAorCQkJCQkgTURJT19QTUFfREVWQUQsCisJCQkJCSBNRElPX1BNQV9SRUdfODA3M19DSElQX1JFViwgJnBoeV92ZXIpOworCQkJCQlEUChORVRJRl9NU0dfTElOSywgIkFkZCAyLjVHXG4iKTsKKwkJCQkJaWYgKHBoeV92ZXIgPiAwKQorCQkJCQkJdG1wMSB8PSAxOworCQkJCQllbHNlCisJCQkJCQl0bXAxICY9IDB4ZmZmZTsKKwkJCQl9IGVsc2UgeworCQkJCQlEUChORVRJRl9NU0dfTElOSywgIkRpc2FibGUgMi41R1xuIik7CisJCQkJCXRtcDEgJj0gMHhmZmZlOworCQkJCX0KKworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgICBNRElPX0FOX1JFR184MDczXzJfNUcsIHRtcDEpOworCQkJfQorCisJCQkvKiBBZGQgc3VwcG9ydCBmb3IgQ0wzNyAocGFzc2l2ZSBtb2RlKSBJSSAqLworCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NMMzdfRkNfTEQsCisJCQkJICAgICAgICZ0bXAxKTsKKworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkgICAgICAgTURJT19BTl9SRUdfQ0wzN19GQ19MRCwgKHRtcDEgfAorCQkJCSAgICAgICAoKHBhcmFtcy0+cmVxX2R1cGxleCA9PSBEVVBMRVhfRlVMTCkgPworCQkJCSAgICAgICAweDIwIDogMHg0MCkpKTsKKworCQkJLyogQWRkIHN1cHBvcnQgZm9yIENMMzcgKHBhc3NpdmUgbW9kZSkgSUlJICovCisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX0FOX0RFVkFELAorCQkJCSAgICAgICBNRElPX0FOX1JFR19DTDM3X0FOLCAweDEwMDApOworCisJCQlpZiAoZXh0X3BoeV90eXBlID09CisJCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MykgeworCQkJCS8qIFRoZSBTTlIgd2lsbCBpbXByb3ZlIGFib3V0IDJkYiBieSBjaGFuZ2luZworCQkJCUJXIGFuZCBGRUUgbWFpbiB0YXAuIFJlc3QgY29tbWFuZHMgYXJlIGV4ZWN1dGVkCisJCQkJYWZ0ZXIgbGluayBpcyB1cCovCisJCQkJLypDaGFuZ2UgRkZFIG1haW4gY3Vyc29yIHRvIDUgaW4gRURDIHJlZ2lzdGVyKi8KKwkJCQlpZiAoYm54MnhfODA3M19pc19zbnJfbmVlZGVkKHBhcmFtcykpCisJCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCSAgICBleHRfcGh5X3R5cGUsCisJCQkJCQkgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkJICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkJICAgIE1ESU9fUE1BX1JFR19FRENfRkZFX01BSU4sCisJCQkJCQkgICAgMHhGQjBDKTsKKworCQkJCS8qIEVuYWJsZSBGRUMgKEZvcndhcmUgRXJyb3IgQ29ycmVjdGlvbikKKwkJCQlSZXF1ZXN0IGluIHRoZSBBTiAqLworCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgTURJT19BTl9SRUdfQURWMiwgJnRtcDEpOworCisJCQkJdG1wMSB8PSAoMTw8MTUpOworCisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fQU5fUkVHX0FEVjIsIHRtcDEpOworCisJCQl9CisKKwkJCWJueDJ4X2V4dF9waHlfc2V0X3BhdXNlKHBhcmFtcywgdmFycyk7CisKKwkJCS8qIFJlc3RhcnQgYXV0b25lZyAqLworCQkJbXNsZWVwKDUwMCk7CisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX0FOX0RFVkFELAorCQkJCSAgICAgICBNRElPX0FOX1JFR19DVFJMLCAweDEyMDApOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4MDd4IEF1dG9uZWcgUmVzdGFydDogIgorCQkJICAgIkFkdmVydGlzZSAxRz0leCwgMTBHPSV4XG4iLAorCQkJICAgKCh2YWwgJiAoMTw8NSkpID4gMCksCisJCQkgICAoKHZhbCAmICgxPDw3KSkgPiAwKSk7CisJCQlicmVhazsKKwkJfQorCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNzoKKwkJeworCQkJdTE2IHRtcDE7CisJCQl1MTYgcnhfYWxhcm1fY3RybF92YWw7CisJCQl1MTYgbGFzaV9jdHJsX3ZhbDsKKworCQkJLyogRW5hYmxlIFBNRCBsaW5rLCBNT0RfQUJTX0ZMVCwgYW5kIDFHIGxpbmsgYWxhcm0gKi8KKworCQkJdTE2IG1vZF9hYnM7CisJCQlyeF9hbGFybV9jdHJsX3ZhbCA9ICgxPDwyKSB8ICgxPDw1KSA7CisJCQlsYXNpX2N0cmxfdmFsID0gMHgwMDA0OworCisJCQlEUChORVRJRl9NU0dfTElOSywgIkluaXRpYWxpemluZyBCQ004NzI3XG4iKTsKKwkJCS8qIGVuYWJsZSBMQVNJICovCisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICAgTURJT19QTUFfUkVHX1JYX0FMQVJNX0NUUkwsCisJCQkJICAgICAgIHJ4X2FsYXJtX2N0cmxfdmFsKTsKKworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgIE1ESU9fUE1BX1JFR19MQVNJX0NUUkwsCisJCQkJICAgICAgIGxhc2lfY3RybF92YWwpOworCisJCQkvKiBJbml0aWFsbHkgY29uZmlndXJlICBNT0RfQUJTIHRvIGludGVycnVwdCB3aGVuCisJCQltb2R1bGUgaXMgcHJlc2VuY2UoIGJpdCA4KSAqLworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfUEhZX0lERU5USUZJRVIsICZtb2RfYWJzKTsKKwkJCS8qIFNldCBFREMgb2ZmIGJ5IHNldHRpbmcgT1BUWExPUyBzaWduYWwgaW5wdXQgdG8gbG93CisJCQkoYml0IDkpLgorCQkJV2hlbiB0aGUgRURDIGlzIG9mZiBpdCBsb2NrcyBvbnRvIGEgcmVmZXJlbmNlIGNsb2NrIGFuZAorCQkJYXZvaWRzIGJlY29taW5nICdsb3N0Jy4qLworCQkJbW9kX2FicyAmPSB+KCgxPDw4KSB8ICgxPDw5KSk7CisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLCBtb2RfYWJzKTsKKworCQkJLyogTWFrZSBNT0RfQUJTIGdpdmUgaW50ZXJydXB0IG9uIGNoYW5nZSAqLworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfODcyN19QQ1NfT1BUX0NUUkwsCisJCQkJICAgICAgJnZhbCk7CisJCQl2YWwgfD0gKDE8PDEyKTsKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgICBNRElPX1BNQV9SRUdfODcyN19QQ1NfT1BUX0NUUkwsCisJCQkJICAgICAgIHZhbCk7CisKKwkJCS8qIFNldCA4NzI3IEdQSU9zIHRvIGlucHV0IHRvIGFsbG93IHJlYWRpbmcgZnJvbSB0aGUKKwkJCTg3MjcgR1BJTzAgc3RhdHVzIHdoaWNoIHJlZmxlY3QgU0ZQKyBtb2R1bGUKKwkJCW92ZXItY3VycmVudCAqLworCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNywKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICAgTURJT19QTUFfUkVHXzg3MjdfUENTX09QVF9DVFJMLAorCQkJCSAgICAgICAmdmFsKTsKKwkJCXZhbCAmPSAweGZmOGY7IC8qIFJlc2V0IGJpdHMgNC02ICovCisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgIE1ESU9fUE1BX1JFR184NzI3X1BDU19PUFRfQ1RSTCwKKwkJCQkgICAgICAgdmFsKTsKKworCQkJYm54MnhfODcyN19wb3dlcl9tb2R1bGUoYnAsIHBhcmFtcywgZXh0X3BoeV9hZGRyLCAxKTsKKwkJCWJueDJ4X2JjbTgwNzNfc2V0X3hhdWlfbG93X3Bvd2VyX21vZGUocGFyYW1zKTsKKworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfTTgwNTFfTVNHT1VUX1JFRywKKwkJCQkgICAgICAmdG1wMSk7CisKKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgTURJT19QTUFfUkVHX1JYX0FMQVJNLCAmdG1wMSk7CisKKwkJCS8qIFNldCBvcHRpb24gMUcgc3BlZWQgKi8KKwkJCWlmIChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09IFNQRUVEXzEwMDApIHsKKworCQkJCURQKE5FVElGX01TR19MSU5LLCAiU2V0dGluZyAxRyBmb3JjZVxuIik7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwgMHg0MCk7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfMTBHX0NUUkwyLCAweEQpOworCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgTURJT19QTUFfUkVHXzEwR19DVFJMMiwgJnRtcDEpOworCQkJCURQKE5FVElGX01TR19MSU5LLCAiMS43ID0gMHgleFxuIiwgdG1wMSk7CisKKwkJCX0gZWxzZSBpZiAoKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0KKwkJCQkgICAgU1BFRURfQVVUT19ORUcpICYmCisJCQkJICAgKChwYXJhbXMtPnNwZWVkX2NhcF9tYXNrICYKKwkJCQkgICAgIFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMUcpKSkgeworCisJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXR0aW5nIDFHIGNsYXVzZTM3XG4iKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fUE1BX1JFR184NzI3X01JU0NfQ1RSTCwgMCk7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgICBNRElPX0FOX1JFR19DTDM3X0FOLCAweDEzMDApOworCQkJfSBlbHNlIHsKKwkJCQkvKiBTaW5jZSB0aGUgODcyNyBoYXMgb25seSBzaW5nbGUgcmVzZXQgcGluLAorCQkJCW5lZWQgdG8gc2V0IHRoZSAxMEcgcmVnaXN0ZXJzIGFsdGhvdWdoIGl0IGlzCisJCQkJZGVmYXVsdCAqLworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICAgTURJT19BTl9SRUdfQ1RSTCwgMHgwMDIwKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgIDB4NywgMHgwMTAwKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwgMHgyMDQwKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfMTBHX0NUUkwyLCAweDAwMDgpOworCQkJfQorCisJCQkvKiBTZXQgMi13aXJlIHRyYW5zZmVyIHJhdGUgb2YgU0ZQKyBtb2R1bGUgRUVQUk9NCisJCQkgKiB0byAxMDBLaHogc2luY2Ugc29tZSBEQUNzKGRpcmVjdCBhdHRhY2hlZCBjYWJsZXMpIGRvCisJCQkgKiBub3Qgd29yayBhdCA0MDBLaHouCisJCQkgKi8KKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgICBNRElPX1BNQV9SRUdfODcyN19UV09fV0lSRV9TTEFWRV9BRERSLAorCQkJCSAgICAgICAweGEwMDEpOworCisJCQkvKiBTZXQgVFggUHJlRW1waGFzaXMgaWYgbmVlZGVkICovCisJCQlpZiAoKHBhcmFtcy0+ZmVhdHVyZV9jb25maWdfZmxhZ3MgJgorCQkJICAgICBGRUFUVVJFX0NPTkZJR19PVkVSUklERV9QUkVFTVBIQVNJU19FTkFCTEVEKSkgeworCQkJCURQKE5FVElGX01TR19MSU5LLCAiU2V0dGluZyBUWF9DVFJMMSAweCV4LCIKKwkJCQkJICJUWF9DVFJMMiAweCV4XG4iLAorCQkJCQkgcGFyYW1zLT54Z3hzX2NvbmZpZ190eFswXSwKKwkJCQkJIHBhcmFtcy0+eGd4c19jb25maWdfdHhbMV0pOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHXzg3MjdfVFhfQ1RSTDEsCisJCQkJCSAgICAgICBwYXJhbXMtPnhneHNfY29uZmlnX3R4WzBdKTsKKworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHXzg3MjdfVFhfQ1RSTDIsCisJCQkJCSAgICAgICBwYXJhbXMtPnhneHNfY29uZmlnX3R4WzFdKTsKKwkJCX0KKworCQkJYnJlYWs7CisJCX0KKworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6CisJCXsKKwkJCXUxNiBmd192ZXIxLCBmd192ZXIyOworCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJIlNldHRpbmcgdGhlIFNGWDcxMDEgTEFTSSBpbmRpY2F0aW9uXG4iKTsKKworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgIE1ESU9fUE1BX1JFR19MQVNJX0NUUkwsIDB4MSk7CisJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCSAgIlNldHRpbmcgdGhlIFNGWDcxMDEgTEVEIHRvIGJsaW5rIG9uIHRyYWZmaWNcbiIpOworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgIE1ESU9fUE1BX1JFR183MTA3X0xFRF9DTlRMLCAoMTw8MykpOworCisJCQlibngyeF9leHRfcGh5X3NldF9wYXVzZShwYXJhbXMsIHZhcnMpOworCQkJLyogUmVzdGFydCBhdXRvbmVnICovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJICAgICAgTURJT19BTl9SRUdfQ1RSTCwgJnZhbCk7CisJCQl2YWwgfD0gMHgyMDA7CisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX0FOX0RFVkFELAorCQkJCSAgICAgICBNRElPX0FOX1JFR19DVFJMLCB2YWwpOworCisJCQkvKiBTYXZlIHNwaXJvbSB2ZXJzaW9uICovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgTURJT19QTUFfUkVHXzcxMDFfVkVSMSwgJmZ3X3ZlcjEpOworCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgTURJT19QTUFfUkVHXzcxMDFfVkVSMiwgJmZ3X3ZlcjIpOworCisJCQlibngyeF9zYXZlX3NwaXJvbV92ZXJzaW9uKHBhcmFtcy0+YnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCXBhcmFtcy0+c2htZW1fYmFzZSwKKwkJCQkJCSh1MzIpKGZ3X3ZlcjE8PDE2IHwgZndfdmVyMikpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxOgorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODIzOgorCQkJLyogVGhpcyBwaHkgdXNlcyB0aGUgTklHIGxhdGNoIG1lY2hhbmlzbSBzaW5jZSBsaW5rCisJCQkJaW5kaWNhdGlvbiBhcnJpdmVzIHRocm91Z2ggaXRzIExFRDQgYW5kIG5vdCB2aWEKKwkJCQlpdHMgTEFTSSBzaWduYWwsIHNvIHdlIGdldCBzdGVhZHkgc2lnbmFsCisJCQkJaW5zdGVhZCBvZiBjbGVhciBvbiByZWFkICovCisJCQlibngyeF9iaXRzX2VuKGJwLCBOSUdfUkVHX0xBVENIX0JDXzAgKyBwYXJhbXMtPnBvcnQqNCwKKwkJCQkgICAgMSA8PCBOSUdfTEFUQ0hfQkNfRU5BQkxFX01JX0lOVCk7CisKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsIDB4MDAwMCk7CisKKwkJCWJueDJ4Xzg0ODFfc2V0X2xlZDQocGFyYW1zLCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkcik7CisJCQlpZiAocGFyYW1zLT5yZXFfbGluZV9zcGVlZCA9PSBTUEVFRF9BVVRPX05FRykgeworCisJCQkJdTE2IGF1dG9uZWdfdmFsLCBhbl8xMDAwX3ZhbCwgYW5fMTBfMTAwX3ZhbDsKKwkJCQkvKiBzZXQgMTAwMCBzcGVlZCBhZHZlcnRpc2VtZW50ICovCisJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICBNRElPX0FOX1JFR184NDgxXzEwMDBUX0NUUkwsCisJCQkJCSAgICAgICZhbl8xMDAwX3ZhbCk7CisKKwkJCQlpZiAocGFyYW1zLT5zcGVlZF9jYXBfbWFzayAmCisJCQkJICAgIFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMUcpIHsKKwkJCQkJYW5fMTAwMF92YWwgfD0gKDE8PDgpOworCQkJCQlpZiAocGFyYW1zLT5yZXFfZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQkJCQkJYW5fMTAwMF92YWwgfD0gKDE8PDkpOworCQkJCQlEUChORVRJRl9NU0dfTElOSywgIkFkdmVydGlzaW5nIDFHXG4iKTsKKwkJCQl9IGVsc2UKKwkJCQkJYW5fMTAwMF92YWwgJj0gfigoMTw8OCkgfCAoMTw8OSkpOworCisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fQU5fUkVHXzg0ODFfMTAwMFRfQ1RSTCwKKwkJCQkJICAgICAgIGFuXzEwMDBfdmFsKTsKKworCQkJCS8qIHNldCAxMDAgc3BlZWQgYWR2ZXJ0aXNlbWVudCAqLworCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgTURJT19BTl9SRUdfODQ4MV9MRUdBQ1lfQU5fQURWLAorCQkJCQkgICAgICAmYW5fMTBfMTAwX3ZhbCk7CisKKwkJCQlpZiAocGFyYW1zLT5zcGVlZF9jYXBfbWFzayAmCisJCQkJIChQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzEwME1fRlVMTCB8CisJCQkJICBQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzEwME1fSEFMRikpIHsKKwkJCQkJYW5fMTBfMTAwX3ZhbCB8PSAoMTw8Nyk7CisJCQkJCWlmIChwYXJhbXMtPnJlcV9kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCisJCQkJCQlhbl8xMF8xMDBfdmFsIHw9ICgxPDw4KTsKKwkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJCQkiQWR2ZXJ0aXNpbmcgMTAwTVxuIik7CisJCQkJfSBlbHNlCisJCQkJCWFuXzEwXzEwMF92YWwgJj0gfigoMTw8NykgfCAoMTw8OCkpOworCisJCQkJLyogc2V0IDEwIHNwZWVkIGFkdmVydGlzZW1lbnQgKi8KKwkJCQlpZiAocGFyYW1zLT5zcGVlZF9jYXBfbWFzayAmCisJCQkJICAoUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xME1fRlVMTCB8CisJCQkJICAgUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xME1fSEFMRikpIHsKKwkJCQkJYW5fMTBfMTAwX3ZhbCB8PSAoMTw8NSk7CisJCQkJCWlmIChwYXJhbXMtPnJlcV9kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCisJCQkJCQlhbl8xMF8xMDBfdmFsIHw9ICgxPDw2KTsKKwkJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJBZHZlcnRpc2luZyAxME1cbiIpOworCQkJCSAgICAgfQorCQkJCWVsc2UKKwkJCQkJYW5fMTBfMTAwX3ZhbCAmPSB+KCgxPDw1KSB8ICgxPDw2KSk7CisKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgICBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICAgTURJT19BTl9SRUdfODQ4MV9MRUdBQ1lfQU5fQURWLAorCQkJCQkgICAgICAgYW5fMTBfMTAwX3ZhbCk7CisKKwkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgIE1ESU9fQU5fUkVHXzg0ODFfTEVHQUNZX01JSV9DVFJMLAorCQkJCQkgICAgICAmYXV0b25lZ192YWwpOworCisJCQkJLyogRGlzYWJsZSBmb3JjZWQgc3BlZWQgKi8KKwkJCQlhdXRvbmVnX3ZhbCAmPSB+KDE8PDZ8MTw8MTMpOworCisJCQkJLyogRW5hYmxlIGF1dG9uZWcgYW5kIHJlc3RhcnQgYXV0b25lZworCQkJCWZvciBsZWdhY3kgc3BlZWRzICovCisJCQkJYXV0b25lZ192YWwgfD0gKDE8PDl8MTw8MTIpOworCisJCQkJaWYgKHBhcmFtcy0+cmVxX2R1cGxleCA9PSBEVVBMRVhfRlVMTCkKKwkJCQkJYXV0b25lZ192YWwgfD0gKDE8PDgpOworCQkJCWVsc2UKKwkJCQkJYXV0b25lZ192YWwgJj0gfigxPDw4KTsKKworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgICBNRElPX0FOX1JFR184NDgxX0xFR0FDWV9NSUlfQ1RSTCwKKwkJCQkJICAgICAgIGF1dG9uZWdfdmFsKTsKKworCQkJCWlmIChwYXJhbXMtPnNwZWVkX2NhcF9tYXNrICYKKwkJCQkgICAgUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xMEcpIHsKKwkJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJBZHZlcnRpc2luZyAxMEdcbiIpOworCQkJCQkvKiBSZXN0YXJ0IGF1dG9uZWcgZm9yIDEwRyovCisKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NUUkwsIDB4MzIwMCk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBGb3JjZSBzcGVlZCAqLworCQkJCXUxNiBhdXRvbmVnX2N0cmwsIHBtYV9jdHJsOworCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgTURJT19BTl9SRUdfODQ4MV9MRUdBQ1lfTUlJX0NUUkwsCisJCQkJCSAgICAgICZhdXRvbmVnX2N0cmwpOworCisJCQkJLyogRGlzYWJsZSBhdXRvbmVnICovCisJCQkJYXV0b25lZ19jdHJsICY9IH4oMTw8MTIpOworCisJCQkJLyogU2V0IDEwMDAgZm9yY2UgKi8KKwkJCQlzd2l0Y2ggKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQpIHsKKwkJCQljYXNlIFNQRUVEXzEwMDAwOgorCQkJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkJCSJVbmFibGUgdG8gc2V0IDEwRyBmb3JjZSAhXG4iKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBTUEVFRF8xMDAwOgorCQkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkJICAgICAgTURJT19QTUFfUkVHX0NUUkwsCisJCQkJCQkgICAgICAmcG1hX2N0cmwpOworCQkJCQlhdXRvbmVnX2N0cmwgJj0gfigxPDwxMyk7CisJCQkJCWF1dG9uZWdfY3RybCB8PSAoMTw8Nik7CisJCQkJCXBtYV9jdHJsICY9IH4oMTw8MTMpOworCQkJCQlwbWFfY3RybCB8PSAoMTw8Nik7CisJCQkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCQkJIlNldHRpbmcgMTAwME0gZm9yY2VcbiIpOworCQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwKKwkJCQkJCSAgICAgICBwbWFfY3RybCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgU1BFRURfMTAwOgorCQkJCQlhdXRvbmVnX2N0cmwgfD0gKDE8PDEzKTsKKwkJCQkJYXV0b25lZ19jdHJsICY9IH4oMTw8Nik7CisJCQkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCQkJIlNldHRpbmcgMTAwTSBmb3JjZVxuIik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgU1BFRURfMTA6CisJCQkJCWF1dG9uZWdfY3RybCAmPSB+KDE8PDEzKTsKKwkJCQkJYXV0b25lZ19jdHJsICY9IH4oMTw8Nik7CisJCQkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCQkJIlNldHRpbmcgMTBNIGZvcmNlXG4iKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJLyogRHVwbGV4IG1vZGUgKi8KKwkJCQlpZiAocGFyYW1zLT5yZXFfZHVwbGV4ID09IERVUExFWF9GVUxMKSB7CisJCQkJCWF1dG9uZWdfY3RybCB8PSAoMTw8OCk7CisJCQkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCQkJIlNldHRpbmcgZnVsbCBkdXBsZXhcbiIpOworCQkJCX0gZWxzZQorCQkJCQlhdXRvbmVnX2N0cmwgJj0gfigxPDw4KTsKKworCQkJCS8qIFVwZGF0ZSBhdXRvbmVnIGN0cmwgYW5kIHBtYSBjdHJsICovCisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fQU5fUkVHXzg0ODFfTEVHQUNZX01JSV9DVFJMLAorCQkJCQkgICAgICAgYXV0b25lZ19jdHJsKTsKKwkJCX0KKworCQkJLyogU2F2ZSBzcGlyb20gdmVyc2lvbiAqLworCQkJYm54Mnhfc2F2ZV84NDgxX3NwaXJvbV92ZXJzaW9uKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCQkgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJCSAgICAgcGFyYW1zLT5zaG1lbV9iYXNlKTsKKwkJCWJyZWFrOworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkU6CisJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkgIlhHWFMgUEhZIEZhaWx1cmUgZGV0ZWN0ZWQgMHgleFxuIiwKKwkJCQkgcGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisJCQlyYyA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURQKE5FVElGX01TR19MSU5LLCAiQkFEIFhHWFMgZXh0X3BoeV9jb25maWcgMHgleFxuIiwKKwkJCQkgIHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCQkJcmMgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCX0gZWxzZSB7IC8qIFNlckRlcyAqLworCisJCWV4dF9waHlfdHlwZSA9IFNFUkRFU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisJCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7CisJCWNhc2UgUE9SVF9IV19DRkdfU0VSREVTX0VYVF9QSFlfVFlQRV9ESVJFQ1Q6CisJCQlEUChORVRJRl9NU0dfTElOSywgIlNlckRlcyBEaXJlY3RcbiIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9UWVBFX0JDTTU0ODI6CisJCQlEUChORVRJRl9NU0dfTElOSywgIlNlckRlcyA1NDgyXG4iKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlEUChORVRJRl9NU0dfTElOSywgIkJBRCBTZXJEZXMgZXh0X3BoeV9jb25maWcgMHgleFxuIiwKKwkJCSAgIHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBibngyeF84NzI3X2hhbmRsZV9tb2RfYWJzKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXUxNiBtb2RfYWJzLCByeF9hbGFybV9zdGF0dXM7CisJdTggZXh0X3BoeV9hZGRyID0gWEdYU19FWFRfUEhZX0FERFIocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisJdTMyIHZhbCA9IFJFR19SRChicCwgcGFyYW1zLT5zaG1lbV9iYXNlICsKKwkJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHNobWVtX3JlZ2lvbiwgZGV2X2luZm8uCisJCQkJICAgICAgcG9ydF9mZWF0dXJlX2NvbmZpZ1twYXJhbXMtPnBvcnRdLgorCQkJCSAgICAgIGNvbmZpZykpOworCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAorCQkgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICBNRElPX1BNQV9SRUdfUEhZX0lERU5USUZJRVIsICZtb2RfYWJzKTsKKwlpZiAobW9kX2FicyAmICgxPDw4KSkgeworCisJCS8qIE1vZHVsZSBpcyBhYnNlbnQgKi8KKwkJRFAoTkVUSUZfTVNHX0xJTkssICJNT0RfQUJTIGluZGljYXRpb24gIgorCQkJICAgICJzaG93IG1vZHVsZSBpcyBhYnNlbnRcbiIpOworCisJCS8qIDEuIFNldCBtb2RfYWJzIHRvIGRldGVjdCBuZXh0IG1vZHVsZQorCQlwcmVzZW5jZSBldmVudAorCQkgICAyLiBTZXQgRURDIG9mZiBieSBzZXR0aW5nIE9QVFhMT1Mgc2lnbmFsIGlucHV0IHRvIGxvdworCQkJKGJpdCA5KS4KKwkJCVdoZW4gdGhlIEVEQyBpcyBvZmYgaXQgbG9ja3Mgb250byBhIHJlZmVyZW5jZSBjbG9jayBhbmQKKwkJCWF2b2lkcyBiZWNvbWluZyAnbG9zdCcuKi8KKwkJbW9kX2FicyAmPSB+KCgxPDw4KXwoMTw8OSkpOworCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNywKKwkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLCBtb2RfYWJzKTsKKworCQkvKiBDbGVhciBSWCBhbGFybSBzaW5jZSBpdCBzdGF5cyB1cCBhcyBsb25nIGFzCisJCXRoZSBtb2RfYWJzIHdhc24ndCBjaGFuZ2VkICovCisJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNywKKwkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgTURJT19QTUFfUkVHX1JYX0FMQVJNLCAmcnhfYWxhcm1fc3RhdHVzKTsKKworCX0gZWxzZSB7CisJCS8qIE1vZHVsZSBpcyBwcmVzZW50ICovCisJCURQKE5FVElGX01TR19MSU5LLCAiTU9EX0FCUyBpbmRpY2F0aW9uICIKKwkJCSAgICAic2hvdyBtb2R1bGUgaXMgcHJlc2VudFxuIik7CisJCS8qIEZpcnN0IHRoaW5nLCBkaXNhYmxlIHRyYW5zbWl0dGVyLAorCQlhbmQgaWYgdGhlIG1vZHVsZSBpcyBvaywgdGhlCisJCW1vZHVsZV9kZXRlY3Rpb24gd2lsbCBlbmFibGUgaXQqLworCisJCS8qIDEuIFNldCBtb2RfYWJzIHRvIGRldGVjdCBuZXh0IG1vZHVsZQorCQlhYnNlbnQgZXZlbnQgKCBiaXQgOCkKKwkJICAgMi4gUmVzdG9yZSB0aGUgZGVmYXVsdCBwb2xhcml0eSBvZiB0aGUgT1BSWExPUyBzaWduYWwgYW5kCisJCXRoaXMgc2lnbmFsIHdpbGwgdGhlbiBjb3JyZWN0bHkgaW5kaWNhdGUgdGhlIHByZXNlbmNlIG9yCisJCWFic2VuY2Ugb2YgdGhlIFJ4IHNpZ25hbC4gKGJpdCA5KSAqLworCQltb2RfYWJzIHw9ICgoMTw8OCl8KDE8PDkpKTsKKwkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNywKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLCBtb2RfYWJzKTsKKworCQkvKiBDbGVhciBSWCBhbGFybSBzaW5jZSBpdCBzdGF5cyB1cCBhcyBsb25nIGFzCisJCXRoZSBtb2RfYWJzIHdhc24ndCBjaGFuZ2VkLiBUaGlzIGlzIG5lZWQgdG8gYmUgZG9uZQorCQliZWZvcmUgY2FsbGluZyB0aGUgbW9kdWxlIGRldGVjdGlvbiwgb3RoZXJ3aXNlIGl0IHdpbGwgY2xlYXIKKwkJdGhlIGxpbmsgdXBkYXRlIGFsYXJtICovCisJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNywKKwkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgTURJT19QTUFfUkVHX1JYX0FMQVJNLCAmcnhfYWxhcm1fc3RhdHVzKTsKKworCisJCWlmICgodmFsICYgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX01BU0spID09CisJCSAgICBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfRElTQUJMRV9UWF9MQVNFUikKKwkJCWJueDJ4X3NmcF9zZXRfdHJhbnNtaXR0ZXIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNywKKwkJCQkJZXh0X3BoeV9hZGRyLCAwKTsKKworCQlpZiAoYm54Mnhfd2FpdF9mb3Jfc2ZwX21vZHVsZV9pbml0aWFsaXplZChwYXJhbXMpCisJCSAgICA9PSAwKQorCQkJYm54Mnhfc2ZwX21vZHVsZV9kZXRlY3Rpb24ocGFyYW1zKTsKKwkJZWxzZQorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTRlArIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWRcbiIpOworCX0KKworCURQKE5FVElGX01TR19MSU5LLCAiODcyNyBSWF9BTEFSTV9TVEFUVVMgMHgleFxuIiwKKwkJIHJ4X2FsYXJtX3N0YXR1cyk7CisJLyogTm8gbmVlZCB0byBjaGVjayBsaW5rIHN0YXR1cyBpbiBjYXNlIG9mCisJbW9kdWxlIHBsdWdnZWQgaW4vb3V0ICovCit9CisKKworc3RhdGljIHU4IGJueDJ4X2V4dF9waHlfaXNfbGlua191cChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCQkgc3RydWN0IGxpbmtfdmFycyAqdmFycywKKwkJCQkgdTggaXNfbWlfaW50KQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXUzMiBleHRfcGh5X3R5cGU7CisJdTggZXh0X3BoeV9hZGRyOworCXUxNiB2YWwxID0gMCwgdmFsMjsKKwl1MTYgcnhfc2QsIHBjc19zdGF0dXM7CisJdTggZXh0X3BoeV9saW5rX3VwID0gMDsKKwl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OworCisJaWYgKHZhcnMtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpIHsKKwkJZXh0X3BoeV9hZGRyID0gWEdYU19FWFRfUEhZX0FERFIocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisJCWV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCQlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgeworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVDoKKwkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyBEaXJlY3RcbiIpOworCQkJZXh0X3BoeV9saW5rX3VwID0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNToKKwkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyA4NzA1XG4iKTsKKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fV0lTX0RFVkFELAorCQkJCSAgICAgIE1ESU9fV0lTX1JFR19MQVNJX1NUQVRVUywgJnZhbDEpOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzA1IExBU0kgc3RhdHVzIDB4JXhcbiIsIHZhbDEpOworCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1dJU19ERVZBRCwKKwkJCQkgICAgICBNRElPX1dJU19SRUdfTEFTSV9TVEFUVVMsICZ2YWwxKTsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiODcwNSBMQVNJIHN0YXR1cyAweCV4XG4iLCB2YWwxKTsKKworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgTURJT19QTUFfUkVHX1JYX1NELCAmcnhfc2QpOworCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAxLAorCQkJCSAgICAgIDB4YzgwOSwgJnZhbDEpOworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgMSwKKwkJCQkgICAgICAweGM4MDksICZ2YWwxKTsKKworCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzA1IDEuYzgwOSB2YWw9MHgleFxuIiwgdmFsMSk7CisJCQlleHRfcGh5X2xpbmtfdXAgPSAoKHJ4X3NkICYgMHgxKSAmJiAodmFsMSAmICgxPDw5KSkgJiYKKwkJCQkJICAgKCh2YWwxICYgKDE8PDgpKSA9PSAwKSk7CisJCQlpZiAoZXh0X3BoeV9saW5rX3VwKQorCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwMDsKKwkJCWJyZWFrOworCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDg3MDYvODcyNlxuIik7CisJCQkvKiBDbGVhciBSWCBBbGFybSovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwgTURJT19QTUFfUkVHX1JYX0FMQVJNLAorCQkJCSAgICAgICZ2YWwyKTsKKwkJCS8qIGNsZWFyIExBU0kgaW5kaWNhdGlvbiovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwgTURJT19QTUFfUkVHX0xBU0lfU1RBVFVTLAorCQkJCSAgICAgICZ2YWwxKTsKKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELCBNRElPX1BNQV9SRUdfTEFTSV9TVEFUVVMsCisJCQkJICAgICAgJnZhbDIpOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzA2Lzg3MjYgTEFTSSBzdGF0dXMgMHgleC0tPiIKKwkJCQkgICAgICIweCV4XG4iLCB2YWwxLCB2YWwyKTsKKworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QTUFfREVWQUQsIE1ESU9fUE1BX1JFR19SWF9TRCwKKwkJCQkgICAgICAmcnhfc2QpOworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QQ1NfREVWQUQsIE1ESU9fUENTX1JFR19TVEFUVVMsCisJCQkJICAgICAgJnBjc19zdGF0dXMpOworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19BTl9ERVZBRCwgTURJT19BTl9SRUdfTElOS19TVEFUVVMsCisJCQkJICAgICAgJnZhbDIpOworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19BTl9ERVZBRCwgTURJT19BTl9SRUdfTElOS19TVEFUVVMsCisJCQkJICAgICAgJnZhbDIpOworCisJCQlEUChORVRJRl9NU0dfTElOSywgIjg3MDYvODcyNiByeF9zZCAweCV4IgorCQkJICAgIiAgcGNzX3N0YXR1cyAweCV4IDFHYnBzIGxpbmtfc3RhdHVzIDB4JXhcbiIsCisJCQkgICByeF9zZCwgcGNzX3N0YXR1cywgdmFsMik7CisJCQkvKiBsaW5rIGlzIHVwIGlmIGJvdGggYml0IDAgb2YgcG1kX3J4X3NkIGFuZAorCQkJICogYml0IDAgb2YgcGNzX3N0YXR1cyBhcmUgc2V0LCBvciBpZiB0aGUgYXV0b25lZyBiaXQKKwkJCSAgIDEgaXMgc2V0CisJCQkgKi8KKwkJCWV4dF9waHlfbGlua191cCA9ICgocnhfc2QgJiBwY3Nfc3RhdHVzICYgMHgxKSB8fAorCQkJCQkgICAodmFsMiAmICgxPDwxKSkpOworCQkJaWYgKGV4dF9waHlfbGlua191cCkgeworCQkJCWlmIChleHRfcGh5X3R5cGUgPT0KKwkJCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYpIHsKKwkJCQkJLyogSWYgdHJhbnNtaXR0ZXIgaXMgZGlzYWJsZWQsCisJCQkJCWlnbm9yZSBmYWxzZSBsaW5rIHVwIGluZGljYXRpb24gKi8KKwkJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCQkgICBleHRfcGh5X3R5cGUsCisJCQkJCQkgICBleHRfcGh5X2FkZHIsCisJCQkJCQkgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkJCSAgIE1ESU9fUE1BX1JFR19QSFlfSURFTlRJRklFUiwKKwkJCQkJCSAgICZ2YWwxKTsKKwkJCQkJaWYgKHZhbDEgJiAoMTw8MTUpKSB7CisJCQkJCQlEUChORVRJRl9NU0dfTElOSywgIlR4IGlzICIKKwkJCQkJCQkgICAgImRpc2FibGVkXG4iKTsKKwkJCQkJCWV4dF9waHlfbGlua191cCA9IDA7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAodmFsMiAmICgxPDwxKSkKKwkJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDA7CisJCQkJZWxzZQorCQkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDA7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3Mjc6CisJCXsKKwkJCXUxNiBsaW5rX3N0YXR1cyA9IDA7CisJCQl1MTYgcnhfYWxhcm1fc3RhdHVzOworCQkJLyogQ2hlY2sgdGhlIExBU0kgKi8KKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgTURJT19QTUFfUkVHX1JYX0FMQVJNLCAmcnhfYWxhcm1fc3RhdHVzKTsKKworCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzI3IFJYX0FMQVJNX1NUQVRVUyAweCV4XG4iLAorCQkJCSByeF9hbGFybV9zdGF0dXMpOworCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgIE1ESU9fUE1BX1JFR19MQVNJX1NUQVRVUywgJnZhbDEpOworCisJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkgIjg3MjcgTEFTSSBzdGF0dXMgMHgleFxuIiwKKwkJCQkgdmFsMSk7CisKKwkJCS8qIENsZWFyIE1TRy1PVVQgKi8KKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgTURJT19QTUFfUkVHX004MDUxX01TR09VVF9SRUcsCisJCQkJICAgICAgJnZhbDEpOworCisJCQkvKgorCQkJICogSWYgYSBtb2R1bGUgaXMgcHJlc2VudCBhbmQgdGhlcmUgaXMgbmVlZCB0byBjaGVjaworCQkJICogZm9yIG92ZXIgY3VycmVudAorCQkJICovCisJCQlpZiAoIShwYXJhbXMtPmZlYXR1cmVfY29uZmlnX2ZsYWdzICYKKwkJCSAgICAgIEZFQVRVUkVfQ09ORklHX0JDTTg3MjdfTk9DKSAmJgorCQkJICAgICEocnhfYWxhcm1fc3RhdHVzICYgKDE8PDUpKSkgeworCQkJCS8qIENoZWNrIG92ZXItY3VycmVudCB1c2luZyA4NzI3IEdQSU8wIGlucHV0Ki8KKwkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICBNRElPX1BNQV9SRUdfODcyN19HUElPX0NUUkwsCisJCQkJCSAgICAgICZ2YWwxKTsKKworCQkJCWlmICgodmFsMSAmICgxPDw4KSkgPT0gMCkgeworCQkJCQlEUChORVRJRl9NU0dfTElOSywgIjg3MjcgUG93ZXIgZmF1bHQiCisJCQkJCQkgICAgICIgaGFzIGJlZW4gZGV0ZWN0ZWQgb24gIgorCQkJCQkJICAgICAicG9ydCAlZFxuIiwKKwkJCQkJCSBwYXJhbXMtPnBvcnQpOworCQkJCQluZXRkZXZfZXJyKGJwLT5kZXYsICJFcnJvcjogIFBvd2VyIGZhdWx0IG9uIFBvcnQgJWQgaGFzIGJlZW4gZGV0ZWN0ZWQgYW5kIHRoZSBwb3dlciB0byB0aGF0IFNGUCsgbW9kdWxlIGhhcyBiZWVuIHJlbW92ZWQgdG8gcHJldmVudCBmYWlsdXJlIG9mIHRoZSBjYXJkLiBQbGVhc2UgcmVtb3ZlIHRoZSBTRlArIG1vZHVsZSBhbmQgcmVzdGFydCB0aGUgc3lzdGVtIHRvIGNsZWFyIHRoaXMgZXJyb3IuXG4iLAorCQkJCQkJICAgcGFyYW1zLT5wb3J0KTsKKwkJCQkJLyoKKwkJCQkJICogRGlzYWJsZSBhbGwgUlhfQUxBUk1zIGV4Y2VwdCBmb3IKKwkJCQkJICogbW9kX2FicworCQkJCQkgKi8KKwkJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkJICAgICBleHRfcGh5X3R5cGUsCisJCQkJCQkgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJCSAgICAgTURJT19QTUFfREVWQUQsCisJCQkJCQkgICAgIE1ESU9fUE1BX1JFR19SWF9BTEFSTV9DVFJMLAorCQkJCQkJICAgICAoMTw8NSkpOworCisJCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkJICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJCSAgICBleHRfcGh5X2FkZHIsCisJCQkJCQkgICAgTURJT19QTUFfREVWQUQsCisJCQkJCQkgICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLAorCQkJCQkJICAgICZ2YWwxKTsKKwkJCQkJLyogV2FpdCBmb3IgbW9kdWxlX2Fic2VudF9ldmVudCAqLworCQkJCQl2YWwxIHw9ICgxPDw4KTsKKwkJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkJICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJCSAgICBleHRfcGh5X2FkZHIsCisJCQkJCQkgICAgTURJT19QTUFfREVWQUQsCisJCQkJCQkgICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLAorCQkJCQkJICAgIHZhbDEpOworCQkJCQkvKiBDbGVhciBSWCBhbGFybSAqLworCQkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkJICAgICAgTURJT19QTUFfUkVHX1JYX0FMQVJNLAorCQkJCQkJICAgICAgJnJ4X2FsYXJtX3N0YXR1cyk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gLyogT3ZlciBjdXJyZW50IGNoZWNrICovCisKKwkJCS8qIFdoZW4gbW9kdWxlIGFic2VudCBiaXQgaXMgc2V0LCBjaGVjayBtb2R1bGUgKi8KKwkJCWlmIChyeF9hbGFybV9zdGF0dXMgJiAoMTw8NSkpIHsKKwkJCQlibngyeF84NzI3X2hhbmRsZV9tb2RfYWJzKHBhcmFtcyk7CisJCQkJLyogRW5hYmxlIGFsbCBtb2RfYWJzIGFuZCBsaW5rIGRldGVjdGlvbiBiaXRzICovCisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfUlhfQUxBUk1fQ1RSTCwKKwkJCQkJICAgICAgICgoMTw8NSkgfCAoMTw8MikpKTsKKwkJCX0KKworCQkJLyogSWYgdHJhbnNtaXR0ZXIgaXMgZGlzYWJsZWQsCisJCQlpZ25vcmUgZmFsc2UgbGluayB1cCBpbmRpY2F0aW9uICovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgIE1ESU9fUE1BX1JFR19QSFlfSURFTlRJRklFUiwKKwkJCQkgICAgICAmdmFsMSk7CisJCQlpZiAodmFsMSAmICgxPDwxNSkpIHsKKwkJCQlEUChORVRJRl9NU0dfTElOSywgIlR4IGlzIGRpc2FibGVkXG4iKTsKKwkJCQlleHRfcGh5X2xpbmtfdXAgPSAwOworCQkJCWJyZWFrOworCQkJfQorCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgIE1ESU9fUE1BX1JFR184MDczX1NQRUVEX0xJTktfU1RBVFVTLAorCQkJCSAgICAgICZsaW5rX3N0YXR1cyk7CisKKwkJCS8qIEJpdHMgMC4uMiAtLT4gc3BlZWQgZGV0ZWN0ZWQsCisJCQkgICBiaXRzIDEzLi4xNS0tPiBsaW5rIGlzIGRvd24gKi8KKwkJCWlmICgobGlua19zdGF0dXMgJiAoMTw8MikpICYmCisJCQkgICAgKCEobGlua19zdGF0dXMgJiAoMTw8MTUpKSkpIHsKKwkJCQlleHRfcGh5X2xpbmtfdXAgPSAxOworCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwMDsKKwkJCX0gZWxzZSBpZiAoKGxpbmtfc3RhdHVzICYgKDE8PDApKSAmJgorCQkJCSAgICghKGxpbmtfc3RhdHVzICYgKDE8PDEzKSkpKSB7CisJCQkJZXh0X3BoeV9saW5rX3VwID0gMTsKKwkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDsKKwkJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkJICJwb3J0ICV4OiBFeHRlcm5hbCBsaW5rIgorCQkJCQkgIiB1cCBpbiAxR1xuIiwgcGFyYW1zLT5wb3J0KTsKKwkJCX0gZWxzZSB7CisJCQkJZXh0X3BoeV9saW5rX3VwID0gMDsKKwkJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkJICJwb3J0ICV4OiBFeHRlcm5hbCBsaW5rIgorCQkJCQkgIiBpcyBkb3duXG4iLCBwYXJhbXMtPnBvcnQpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MzoKKwkJeworCQkJdTE2IGxpbmtfc3RhdHVzID0gMDsKKwkJCXUxNiBhbjEwMDBfc3RhdHVzID0gMDsKKworCQkJaWYgKGV4dF9waHlfdHlwZSA9PQorCQkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyKSB7CisJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BDU19ERVZBRCwKKwkJCQkgICAgICBNRElPX1BDU19SRUdfTEFTSV9TVEFUVVMsICZ2YWwxKTsKKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QQ1NfREVWQUQsCisJCQkJICAgICAgTURJT19QQ1NfUkVHX0xBU0lfU1RBVFVTLCAmdmFsMik7CisJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkgIjg3MHggTEFTSSBzdGF0dXMgMHgleC0+MHgleFxuIiwKKwkJCQkgIHZhbDEsIHZhbDIpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBJbiA4MDczLCBwb3J0MSBpcyBkaXJlY3RlZCB0aHJvdWdoIGVtYWMwIGFuZAorCQkJCSAqIHBvcnQwIGlzIGRpcmVjdGVkIHRocm91Z2ggZW1hYzEKKwkJCQkgKi8KKwkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICBNRElPX1BNQV9SRUdfTEFTSV9TVEFUVVMsICZ2YWwxKTsKKworCQkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCQkgIjg3MDMgTEFTSSBzdGF0dXMgMHgleFxuIiwKKwkJCQkJICB2YWwxKTsKKwkJCX0KKworCQkJLyogY2xlYXIgdGhlIGludGVycnVwdCBMQVNJIHN0YXR1cyByZWdpc3RlciAqLworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BDU19ERVZBRCwKKwkJCQkgICAgICBNRElPX1BDU19SRUdfU1RBVFVTLCAmdmFsMik7CisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUENTX0RFVkFELAorCQkJCSAgICAgIE1ESU9fUENTX1JFR19TVEFUVVMsICZ2YWwxKTsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiODA3eCBQQ1Mgc3RhdHVzIDB4JXgtPjB4JXhcbiIsCisJCQkgICB2YWwyLCB2YWwxKTsKKwkJCS8qIENsZWFyIE1TRy1PVVQgKi8KKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgTURJT19QTUFfUkVHX004MDUxX01TR09VVF9SRUcsCisJCQkJICAgICAgJnZhbDEpOworCisJCQkvKiBDaGVjayB0aGUgTEFTSSAqLworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfUlhfQUxBUk0sICZ2YWwyKTsKKworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJLUiAweDkwMDMgMHgleFxuIiwgdmFsMik7CisKKwkJCS8qIENoZWNrIHRoZSBsaW5rIHN0YXR1cyAqLworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BDU19ERVZBRCwKKwkJCQkgICAgICBNRElPX1BDU19SRUdfU1RBVFVTLCAmdmFsMik7CisJCQlEUChORVRJRl9NU0dfTElOSywgIktSIFBDUyBzdGF0dXMgMHgleFxuIiwgdmFsMik7CisKKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgTURJT19QTUFfUkVHX1NUQVRVUywgJnZhbDIpOworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfU1RBVFVTLCAmdmFsMSk7CisJCQlleHRfcGh5X2xpbmtfdXAgPSAoKHZhbDEgJiA0KSA9PSA0KTsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiUE1BX1JFR19TVEFUVVM9MHgleFxuIiwgdmFsMSk7CisJCQlpZiAoZXh0X3BoeV90eXBlID09CisJCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MykgeworCisJCQkJaWYgKGV4dF9waHlfbGlua191cCAmJgorCQkJCSAgICAoKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgIT0KKwkJCQkJU1BFRURfMTAwMDApKSkgeworCQkJCQlpZiAoYm54MnhfYmNtODA3M194YXVpX3dhKHBhcmFtcykKKwkJCQkJICAgICAhPSAwKSB7CisJCQkJCQlleHRfcGh5X2xpbmtfdXAgPSAwOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICBNRElPX0FOX1JFR19MSU5LX1NUQVRVUywKKwkJCQkJICAgICAgJmFuMTAwMF9zdGF0dXMpOworCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgTURJT19BTl9SRUdfTElOS19TVEFUVVMsCisJCQkJCSAgICAgICZhbjEwMDBfc3RhdHVzKTsKKworCQkJCS8qIENoZWNrIHRoZSBsaW5rIHN0YXR1cyBvbiAxLjEuMiAqLworCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgIE1ESU9fUE1BX1JFR19TVEFUVVMsICZ2YWwyKTsKKwkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICBNRElPX1BNQV9SRUdfU1RBVFVTLCAmdmFsMSk7CisJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJLUiBQTUEgc3RhdHVzIDB4JXgtPjB4JXgsIgorCQkJCQkgICAgICJhbl9saW5rX3N0YXR1cz0weCV4XG4iLAorCQkJCQkgIHZhbDIsIHZhbDEsIGFuMTAwMF9zdGF0dXMpOworCisJCQkJZXh0X3BoeV9saW5rX3VwID0gKCgodmFsMSAmIDQpID09IDQpIHx8CisJCQkJCQkoYW4xMDAwX3N0YXR1cyAmICgxPDwxKSkpOworCQkJCWlmIChleHRfcGh5X2xpbmtfdXAgJiYKKwkJCQkgICAgYm54MnhfODA3M19pc19zbnJfbmVlZGVkKHBhcmFtcykpIHsKKwkJCQkJLyogVGhlIFNOUiB3aWxsIGltcHJvdmUgYWJvdXQgMmRiYnkKKwkJCQkJY2hhbmdpbmcgdGhlIEJXIGFuZCBGRUUgbWFpbiB0YXAuKi8KKworCQkJCQkvKiBUaGUgMXN0IHdyaXRlIHRvIGNoYW5nZSBGRkUgbWFpbgorCQkJCQl0YXAgaXMgc2V0IGJlZm9yZSByZXN0YXJ0IEFOICovCisJCQkJCS8qIENoYW5nZSBQTEwgQmFuZHdpZHRoIGluIEVEQworCQkJCQlyZWdpc3RlciAqLworCQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCQkgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkJICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkJICAgIE1ESU9fUE1BX1JFR19QTExfQkFORFdJRFRILAorCQkJCQkJICAgIDB4MjZCQyk7CisKKwkJCQkJLyogQ2hhbmdlIENEUiBCYW5kd2lkdGggaW4gRURDCisJCQkJCXJlZ2lzdGVyICovCisJCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJCSAgICBleHRfcGh5X2FkZHIsCisJCQkJCQkgICAgTURJT19QTUFfREVWQUQsCisJCQkJCQkgICAgTURJT19QTUFfUkVHX0NEUl9CQU5EV0lEVEgsCisJCQkJCQkgICAgMHgwMzMzKTsKKwkJCQl9CisJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgTURJT19QTUFfUkVHXzgwNzNfU1BFRURfTElOS19TVEFUVVMsCisJCQkJCSAgICZsaW5rX3N0YXR1cyk7CisKKwkJCQkvKiBCaXRzIDAuLjIgLS0+IHNwZWVkIGRldGVjdGVkLAorCQkJCSAgIGJpdHMgMTMuLjE1LS0+IGxpbmsgaXMgZG93biAqLworCQkJCWlmICgobGlua19zdGF0dXMgJiAoMTw8MikpICYmCisJCQkJICAgICghKGxpbmtfc3RhdHVzICYgKDE8PDE1KSkpKSB7CisJCQkJCWV4dF9waHlfbGlua191cCA9IDE7CisJCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwMDsKKwkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJCQkgInBvcnQgJXg6IEV4dGVybmFsIGxpbmsiCisJCQkJCQkgIiB1cCBpbiAxMEdcbiIsIHBhcmFtcy0+cG9ydCk7CisJCQkJfSBlbHNlIGlmICgobGlua19zdGF0dXMgJiAoMTw8MSkpICYmCisJCQkJCSAgICghKGxpbmtfc3RhdHVzICYgKDE8PDE0KSkpKSB7CisJCQkJCWV4dF9waHlfbGlua191cCA9IDE7CisJCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8yNTAwOworCQkJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkJCSAicG9ydCAleDogRXh0ZXJuYWwgbGluayIKKwkJCQkJCSAiIHVwIGluIDIuNUdcbiIsIHBhcmFtcy0+cG9ydCk7CisJCQkJfSBlbHNlIGlmICgobGlua19zdGF0dXMgJiAoMTw8MCkpICYmCisJCQkJCSAgICghKGxpbmtfc3RhdHVzICYgKDE8PDEzKSkpKSB7CisJCQkJCWV4dF9waHlfbGlua191cCA9IDE7CisJCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwOworCQkJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkJCSAicG9ydCAleDogRXh0ZXJuYWwgbGluayIKKwkJCQkJCSAiIHVwIGluIDFHXG4iLCBwYXJhbXMtPnBvcnQpOworCQkJCX0gZWxzZSB7CisJCQkJCWV4dF9waHlfbGlua191cCA9IDA7CisJCQkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCQkJICJwb3J0ICV4OiBFeHRlcm5hbCBsaW5rIgorCQkJCQkJICIgaXMgZG93blxuIiwgcGFyYW1zLT5wb3J0KTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIFNlZSBpZiAxRyBsaW5rIGlzIHVwIGZvciB0aGUgODA3MiAqLworCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgTURJT19BTl9SRUdfTElOS19TVEFUVVMsCisJCQkJCSAgICAgICZhbjEwMDBfc3RhdHVzKTsKKwkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgIE1ESU9fQU5fUkVHX0xJTktfU1RBVFVTLAorCQkJCQkgICAgICAmYW4xMDAwX3N0YXR1cyk7CisJCQkJaWYgKGFuMTAwMF9zdGF0dXMgJiAoMTw8MSkpIHsKKwkJCQkJZXh0X3BoeV9saW5rX3VwID0gMTsKKwkJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDA7CisJCQkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCQkJICJwb3J0ICV4OiBFeHRlcm5hbCBsaW5rIgorCQkJCQkJICIgdXAgaW4gMUdcbiIsIHBhcmFtcy0+cG9ydCk7CisJCQkJfSBlbHNlIGlmIChleHRfcGh5X2xpbmtfdXApIHsKKwkJCQkJZXh0X3BoeV9saW5rX3VwID0gMTsKKwkJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOworCQkJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkJCSAicG9ydCAleDogRXh0ZXJuYWwgbGluayIKKwkJCQkJCSAiIHVwIGluIDEwR1xuIiwgcGFyYW1zLT5wb3J0KTsKKwkJCQl9CisJCQl9CisKKworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgorCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgTURJT19QTUFfUkVHX0xBU0lfU1RBVFVTLCAmdmFsMik7CisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfTEFTSV9TVEFUVVMsICZ2YWwxKTsKKwkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCSAiMTBHLWJhc2UtVCBMQVNJIHN0YXR1cyAweCV4LT4weCV4XG4iLAorCQkJCSAgdmFsMiwgdmFsMSk7CisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfU1RBVFVTLCAmdmFsMik7CisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfU1RBVFVTLCAmdmFsMSk7CisJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkgIjEwRy1iYXNlLVQgUE1BIHN0YXR1cyAweCV4LT4weCV4XG4iLAorCQkJCSB2YWwyLCB2YWwxKTsKKwkJCWV4dF9waHlfbGlua191cCA9ICgodmFsMSAmIDQpID09IDQpOworCQkJLyogaWYgbGluayBpcyB1cAorCQkJICogcHJpbnQgdGhlIEFOIG91dGNvbWUgb2YgdGhlIFNGWDcxMDEgUEhZCisJCQkgKi8KKwkJCWlmIChleHRfcGh5X2xpbmtfdXApIHsKKwkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgIE1ESU9fQU5fUkVHX01BU1RFUl9TVEFUVVMsCisJCQkJCSAgICAgICZ2YWwyKTsKKwkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDA7CisJCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJCSAiU0ZYNzEwMSBBTiBzdGF0dXMgMHgleC0+TWFzdGVyPSV4XG4iLAorCQkJCQkgIHZhbDIsCisJCQkJCSAodmFsMiAmICgxPDwxNCkpKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODE6CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MjM6CisJCQkvKiBDaGVjayAxMEctQmFzZVQgbGluayBzdGF0dXMgKi8KKwkJCS8qIENoZWNrIFBNRCBzaWduYWwgb2sgKi8KKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkJCQkJICAgICAgMHhGRkZBLAorCQkJCQkJICAgICAgJnZhbDEpOworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgTURJT19QTUFfUkVHXzg0ODFfUE1EX1NJR05BTCwKKwkJCQkgICAgICAmdmFsMik7CisJCQlEUChORVRJRl9NU0dfTElOSywgIlBNRF9TSUdOQUwgMS5hODExID0gMHgleFxuIiwgdmFsMik7CisKKwkJCS8qIENoZWNrIGxpbmsgMTBHICovCisJCQlpZiAodmFsMiAmICgxPDwxMSkpIHsKKwkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDA7CisJCQkJZXh0X3BoeV9saW5rX3VwID0gMTsKKwkJCQlibngyeF84NDgxX3NldF8xMEdfbGVkX21vZGUocGFyYW1zLAorCQkJCQkJCSAgZXh0X3BoeV90eXBlLAorCQkJCQkJCSAgZXh0X3BoeV9hZGRyKTsKKwkJCX0gZWxzZSB7IC8qIENoZWNrIExlZ2FjeSBzcGVlZCBsaW5rICovCisJCQkJdTE2IGxlZ2FjeV9zdGF0dXMsIGxlZ2FjeV9zcGVlZDsKKworCQkJCS8qIEVuYWJsZSBleHBhbnNpb24gcmVnaXN0ZXIgMHg0MgorCQkJCShPcGVyYXRpb24gbW9kZSBzdGF0dXMpICovCisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgZXh0X3BoeV90eXBlLAorCQkJCQkgZXh0X3BoeV9hZGRyLAorCQkJCQkgTURJT19BTl9ERVZBRCwKKwkJCQkJIE1ESU9fQU5fUkVHXzg0ODFfRVhQQU5TSU9OX1JFR19BQ0NFU1MsCisJCQkJCSAweGY0Mik7CisKKwkJCQkvKiBHZXQgbGVnYWN5IHNwZWVkIG9wZXJhdGlvbiBzdGF0dXMgKi8KKwkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICBleHRfcGh5X3R5cGUsCisJCQkJCSAgZXh0X3BoeV9hZGRyLAorCQkJCQkgIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgTURJT19BTl9SRUdfODQ4MV9FWFBBTlNJT05fUkVHX1JEX1JXLAorCQkJCQkgICZsZWdhY3lfc3RhdHVzKTsKKworCQkJCURQKE5FVElGX01TR19MSU5LLCAiTGVnYWN5IHNwZWVkIHN0YXR1cyIKKwkJCQkJICAgICAiID0gMHgleFxuIiwgbGVnYWN5X3N0YXR1cyk7CisJCQkJZXh0X3BoeV9saW5rX3VwID0gKChsZWdhY3lfc3RhdHVzICYgKDE8PDExKSkKKwkJCQkJCSAgID09ICgxPDwxMSkpOworCQkJCWlmIChleHRfcGh5X2xpbmtfdXApIHsKKwkJCQkJbGVnYWN5X3NwZWVkID0gKGxlZ2FjeV9zdGF0dXMgJiAoMzw8OSkpOworCQkJCQlpZiAobGVnYWN5X3NwZWVkID09ICgwPDw5KSkKKwkJCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDsKKwkJCQkJZWxzZSBpZiAobGVnYWN5X3NwZWVkID09ICgxPDw5KSkKKwkJCQkJCXZhcnMtPmxpbmVfc3BlZWQgPQorCQkJCQkJCVNQRUVEXzEwMDsKKwkJCQkJZWxzZSBpZiAobGVnYWN5X3NwZWVkID09ICgyPDw5KSkKKwkJCQkJCXZhcnMtPmxpbmVfc3BlZWQgPQorCQkJCQkJCVNQRUVEXzEwMDA7CisJCQkJCWVsc2UgLyogU2hvdWxkIG5vdCBoYXBwZW4gKi8KKwkJCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSAwOworCisJCQkJCWlmIChsZWdhY3lfc3RhdHVzICYgKDE8PDgpKQorCQkJCQkJdmFycy0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCQkJCWVsc2UKKwkJCQkJCXZhcnMtPmR1cGxleCA9IERVUExFWF9IQUxGOworCisJCQkJCURQKE5FVElGX01TR19MSU5LLCAiTGluayBpcyB1cCAiCisJCQkJCQkgICAgICJpbiAlZE1icHMsIGlzX2R1cGxleF9mdWxsIgorCQkJCQkJICAgICAiPSAlZFxuIiwKKwkJCQkJCXZhcnMtPmxpbmVfc3BlZWQsCisJCQkJCQkodmFycy0+ZHVwbGV4ID09IERVUExFWF9GVUxMKSk7CisJCQkJCWJueDJ4Xzg0ODFfc2V0X2xlZ2FjeV9sZWRfbW9kZShwYXJhbXMsCisJCQkJCQkJCSBleHRfcGh5X3R5cGUsCisJCQkJCQkJCSBleHRfcGh5X2FkZHIpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJCQUQgWEdYUyBleHRfcGh5X2NvbmZpZyAweCV4XG4iLAorCQkJICAgcGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisJCQlleHRfcGh5X2xpbmtfdXAgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJLyogU2V0IFNHTUlJIG1vZGUgZm9yIGV4dGVybmFsIHBoeSAqLworCQlpZiAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVCkgeworCQkJaWYgKHZhcnMtPmxpbmVfc3BlZWQgPCBTUEVFRF8xMDAwKQorCQkJCXZhcnMtPnBoeV9mbGFncyB8PSBQSFlfU0dNSUlfRkxBRzsKKwkJCWVsc2UKKwkJCQl2YXJzLT5waHlfZmxhZ3MgJj0gflBIWV9TR01JSV9GTEFHOworCQl9CisKKwl9IGVsc2UgeyAvKiBTZXJEZXMgKi8KKwkJZXh0X3BoeV90eXBlID0gU0VSREVTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKwkJc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKKwkJY2FzZSBQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9UWVBFX0RJUkVDVDoKKwkJCURQKE5FVElGX01TR19MSU5LLCAiU2VyRGVzIERpcmVjdFxuIik7CisJCQlleHRfcGh5X2xpbmtfdXAgPSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9UWVBFX0JDTTU0ODI6CisJCQlEUChORVRJRl9NU0dfTElOSywgIlNlckRlcyA1NDgyXG4iKTsKKwkJCWV4dF9waHlfbGlua191cCA9IDE7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJICJCQUQgU2VyRGVzIGV4dF9waHlfY29uZmlnIDB4JXhcbiIsCisJCQkJIHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCQkJZXh0X3BoeV9saW5rX3VwID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIGV4dF9waHlfbGlua191cDsKK30KKworc3RhdGljIHZvaWQgYm54MnhfbGlua19pbnRfZW5hYmxlKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJdTMyIGV4dF9waHlfdHlwZTsKKwl1MzIgbWFzazsKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKworCS8qIHNldHRpbmcgdGhlIHN0YXR1cyB0byByZXBvcnQgb24gbGluayB1cAorCSAgIGZvciBlaXRoZXIgWEdYUyBvciBTZXJEZXMgKi8KKworCWlmIChwYXJhbXMtPnN3aXRjaF9jZmcgPT0gU1dJVENIX0NGR18xMEcpIHsKKwkJbWFzayA9IChOSUdfTUFTS19YR1hTMF9MSU5LMTBHIHwKKwkJCU5JR19NQVNLX1hHWFMwX0xJTktfU1RBVFVTKTsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJlbmFibGVkIFhHWFMgaW50ZXJydXB0XG4iKTsKKwkJZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisJCWlmICgoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVCkgJiYKKwkJICAgIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRkFJTFVSRSkgJiYKKwkJICAgIChleHRfcGh5X3R5cGUgIT0KKwkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9OT1RfQ09OTikpIHsKKwkJCW1hc2sgfD0gTklHX01BU0tfTUlfSU5UOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJlbmFibGVkIGV4dGVybmFsIHBoeSBpbnRcbiIpOworCQl9CisKKwl9IGVsc2UgeyAvKiBTZXJEZXMgKi8KKwkJbWFzayA9IE5JR19NQVNLX1NFUkRFUzBfTElOS19TVEFUVVM7CisJCURQKE5FVElGX01TR19MSU5LLCAiZW5hYmxlZCBTZXJEZXMgaW50ZXJydXB0XG4iKTsKKwkJZXh0X3BoeV90eXBlID0gU0VSREVTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKwkJaWYgKChleHRfcGh5X3R5cGUgIT0KKwkJCQlQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9UWVBFX0RJUkVDVCkgJiYKKwkJICAgIChleHRfcGh5X3R5cGUgIT0KKwkJCQlQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9UWVBFX05PVF9DT05OKSkgeworCQkJbWFzayB8PSBOSUdfTUFTS19NSV9JTlQ7CisJCQlEUChORVRJRl9NU0dfTElOSywgImVuYWJsZWQgZXh0ZXJuYWwgcGh5IGludFxuIik7CisJCX0KKwl9CisJYm54MnhfYml0c19lbihicCwKKwkJICAgICAgTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCwKKwkJICAgICAgbWFzayk7CisKKwlEUChORVRJRl9NU0dfTElOSywgInBvcnQgJXgsIGlzX3hneHMgJXgsIGludF9zdGF0dXMgMHgleFxuIiwgcG9ydCwKKwkJIChwYXJhbXMtPnN3aXRjaF9jZmcgPT0gU1dJVENIX0NGR18xMEcpLAorCQkgUkVHX1JEKGJwLCBOSUdfUkVHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQpKTsKKwlEUChORVRJRl9NU0dfTElOSywgIiBpbnRfbWFzayAweCV4LCBNSV9JTlQgJXgsIFNFUkRFU19MSU5LICV4XG4iLAorCQkgUkVHX1JEKGJwLCBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0KSwKKwkJIFJFR19SRChicCwgTklHX1JFR19FTUFDMF9TVEFUVVNfTUlTQ19NSV9JTlQgKyBwb3J0KjB4MTgpLAorCQkgUkVHX1JEKGJwLCBOSUdfUkVHX1NFUkRFUzBfU1RBVFVTX0xJTktfU1RBVFVTK3BvcnQqMHgzYykpOworCURQKE5FVElGX01TR19MSU5LLCAiIDEwRyAleCwgWEdYU19MSU5LICV4XG4iLAorCSAgIFJFR19SRChicCwgTklHX1JFR19YR1hTMF9TVEFUVVNfTElOSzEwRyArIHBvcnQqMHg2OCksCisJICAgUkVHX1JEKGJwLCBOSUdfUkVHX1hHWFMwX1NUQVRVU19MSU5LX1NUQVRVUyArIHBvcnQqMHg2OCkpOworfQorCitzdGF0aWMgdm9pZCBibngyeF84NDgxX3JlYXJtX2xhdGNoX3NpZ25hbChzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LAorCQkJCQl1OCBpc19taV9pbnQpCit7CisJdTMyIGxhdGNoX3N0YXR1cyA9IDAsIGlzX21pX2ludF9zdGF0dXM7CisJLyogRGlzYWJsZSB0aGUgTUkgSU5UICggZXh0ZXJuYWwgcGh5IGludCApCisJICogYnkgd3JpdGluZyAxIHRvIHRoZSBzdGF0dXMgcmVnaXN0ZXIuIExpbmsgZG93biBpbmRpY2F0aW9uCisJICogaXMgaGlnaC1hY3RpdmUtc2lnbmFsLCBzbyBpbiB0aGlzIGNhc2Ugd2UgbmVlZCB0byB3cml0ZSB0aGUKKwkgKiBzdGF0dXMgdG8gY2xlYXIgdGhlIFhPUgorCSAqLworCS8qIFJlYWQgTGF0Y2hlZCBzaWduYWxzICovCisJbGF0Y2hfc3RhdHVzID0gUkVHX1JEKGJwLAorCQkJCSAgTklHX1JFR19MQVRDSF9TVEFUVVNfMCArIHBvcnQqOCk7CisJaXNfbWlfaW50X3N0YXR1cyA9IFJFR19SRChicCwKKwkJCQkgIE5JR19SRUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCk7CisJRFAoTkVUSUZfTVNHX0xJTkssICJvcmlnaW5hbF9zaWduYWwgPSAweCV4LCBuaWdfc3RhdHVzID0gMHgleCwiCisJCSAgICAgImxhdGNoX3N0YXR1cyA9IDB4JXhcbiIsCisJCSBpc19taV9pbnQsIGlzX21pX2ludF9zdGF0dXMsIGxhdGNoX3N0YXR1cyk7CisJLyogSGFuZGxlIG9ubHkgdGhvc2Ugd2l0aCBsYXRjaGVkLXNpZ25hbD11cC4qLworCWlmIChsYXRjaF9zdGF0dXMgJiAxKSB7CisJCS8qIEZvciBhbGwgbGF0Y2hlZC1zaWduYWw9dXAsV3JpdGUgb3JpZ2luYWxfc2lnbmFsIHRvIHN0YXR1cyAqLworCQlpZiAoaXNfbWlfaW50KQorCQkJYm54MnhfYml0c19lbihicCwKKwkJCQkgICAgTklHX1JFR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwCisJCQkJICAgICsgcG9ydCo0LAorCQkJCSAgICBOSUdfU1RBVFVTX0VNQUMwX01JX0lOVCk7CisJCWVsc2UKKwkJCWJueDJ4X2JpdHNfZGlzKGJwLAorCQkJCSAgICAgTklHX1JFR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwCisJCQkJICAgICArIHBvcnQqNCwKKwkJCQkgICAgIE5JR19TVEFUVVNfRU1BQzBfTUlfSU5UKTsKKwkJLyogRm9yIGFsbCBsYXRjaGVkLXNpZ25hbD11cCA6IFJlLUFybSBMYXRjaCBzaWduYWxzICovCisJCVJFR19XUihicCwgTklHX1JFR19MQVRDSF9TVEFUVVNfMCArIHBvcnQqOCwKKwkJCSAgIChsYXRjaF9zdGF0dXMgJiAweGZmZmUpIHwgKGxhdGNoX3N0YXR1cyAmIDEpKTsKKwl9Cit9CisvKgorICogbGluayBtYW5hZ2VtZW50CisgKi8KK3N0YXRpYyB2b2lkIGJueDJ4X2xpbmtfaW50X2FjayhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCSAgICAgc3RydWN0IGxpbmtfdmFycyAqdmFycywgdTggaXNfMTBnLAorCQkJICAgICB1OCBpc19taV9pbnQpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKKworCS8qIGZpcnN0IHJlc2V0IGFsbCBzdGF0dXMKKwkgKiB3ZSBhc3N1bWUgb25seSBvbmUgbGluZSB3aWxsIGJlIGNoYW5nZSBhdCBhIHRpbWUgKi8KKwlibngyeF9iaXRzX2RpcyhicCwgTklHX1JFR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0LAorCQkgICAgIChOSUdfU1RBVFVTX1hHWFMwX0xJTksxMEcgfAorCQkgICAgICBOSUdfU1RBVFVTX1hHWFMwX0xJTktfU1RBVFVTIHwKKwkJICAgICAgTklHX1NUQVRVU19TRVJERVMwX0xJTktfU1RBVFVTKSk7CisJaWYgKChYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKQorCQk9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxKSB8fAorCShYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKQorCQk9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgyMykpIHsKKwkJYm54MnhfODQ4MV9yZWFybV9sYXRjaF9zaWduYWwoYnAsIHBvcnQsIGlzX21pX2ludCk7CisJfQorCWlmICh2YXJzLT5waHlfbGlua191cCkgeworCQlpZiAoaXNfMTBnKSB7CisJCQkvKiBEaXNhYmxlIHRoZSAxMEcgbGluayBpbnRlcnJ1cHQKKwkJCSAqIGJ5IHdyaXRpbmcgMSB0byB0aGUgc3RhdHVzIHJlZ2lzdGVyCisJCQkgKi8KKwkJCURQKE5FVElGX01TR19MSU5LLCAiMTBHIFhHWFMgcGh5IGxpbmsgdXBcbiIpOworCQkJYm54MnhfYml0c19lbihicCwKKwkJCQkgICAgICBOSUdfUkVHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQsCisJCQkJICAgICAgTklHX1NUQVRVU19YR1hTMF9MSU5LMTBHKTsKKworCQl9IGVsc2UgaWYgKHBhcmFtcy0+c3dpdGNoX2NmZyA9PSBTV0lUQ0hfQ0ZHXzEwRykgeworCQkJLyogRGlzYWJsZSB0aGUgbGluayBpbnRlcnJ1cHQKKwkJCSAqIGJ5IHdyaXRpbmcgMSB0byB0aGUgcmVsZXZhbnQgbGFuZQorCQkJICogaW4gdGhlIHN0YXR1cyByZWdpc3RlcgorCQkJICovCisJCQl1MzIgc2VyX2xhbmUgPSAoKHBhcmFtcy0+bGFuZV9jb25maWcgJgorCQkJCSAgICBQT1JUX0hXX0NGR19MQU5FX1NXQVBfQ0ZHX01BU1RFUl9NQVNLKSA+PgorCQkJCSAgICBQT1JUX0hXX0NGR19MQU5FX1NXQVBfQ0ZHX01BU1RFUl9TSElGVCk7CisKKwkJCURQKE5FVElGX01TR19MSU5LLCAiJWQgc3BlZWQgWEdYUyBwaHkgbGluayB1cFxuIiwKKwkJCQkgdmFycy0+bGluZV9zcGVlZCk7CisJCQlibngyeF9iaXRzX2VuKGJwLAorCQkJCSAgICAgIE5JR19SRUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCwKKwkJCQkgICAgICAoKDEgPDwgc2VyX2xhbmUpIDw8CisJCQkJICAgICAgIE5JR19TVEFUVVNfWEdYUzBfTElOS19TVEFUVVNfU0laRSkpOworCisJCX0gZWxzZSB7IC8qIFNlckRlcyAqLworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXJEZXMgcGh5IGxpbmsgdXBcbiIpOworCQkJLyogRGlzYWJsZSB0aGUgbGluayBpbnRlcnJ1cHQKKwkJCSAqIGJ5IHdyaXRpbmcgMSB0byB0aGUgc3RhdHVzIHJlZ2lzdGVyCisJCQkgKi8KKwkJCWJueDJ4X2JpdHNfZW4oYnAsCisJCQkJICAgICAgTklHX1JFR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0LAorCQkJCSAgICAgIE5JR19TVEFUVVNfU0VSREVTMF9MSU5LX1NUQVRVUyk7CisJCX0KKworCX0gZWxzZSB7IC8qIGxpbmtfZG93biAqLworCX0KK30KKworc3RhdGljIHU4IGJueDJ4X2Zvcm1hdF92ZXIodTMyIG51bSwgdTggKnN0ciwgdTE2IGxlbikKK3sKKwl1OCAqc3RyX3B0ciA9IHN0cjsKKwl1MzIgbWFzayA9IDB4ZjAwMDAwMDA7CisJdTggc2hpZnQgPSA4KjQ7CisJdTggZGlnaXQ7CisJaWYgKGxlbiA8IDEwKSB7CisJCS8qIE5lZWQgbW9yZSB0aGFuIDEwY2hhcnMgZm9yIHRoaXMgZm9ybWF0ICovCisJCSpzdHJfcHRyID0gJ1wwJzsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXdoaWxlIChzaGlmdCA+IDApIHsKKworCQlzaGlmdCAtPSA0OworCQlkaWdpdCA9ICgobnVtICYgbWFzaykgPj4gc2hpZnQpOworCQlpZiAoZGlnaXQgPCAweGEpCisJCQkqc3RyX3B0ciA9IGRpZ2l0ICsgJzAnOworCQllbHNlCisJCQkqc3RyX3B0ciA9IGRpZ2l0IC0gMHhhICsgJ2EnOworCQlzdHJfcHRyKys7CisJCW1hc2sgPSBtYXNrID4+IDQ7CisJCWlmIChzaGlmdCA9PSA0KjQpIHsKKwkJCSpzdHJfcHRyID0gJzonOworCQkJc3RyX3B0cisrOworCQl9CisJfQorCSpzdHJfcHRyID0gJ1wwJzsKKwlyZXR1cm4gMDsKK30KKwordTggYm54MnhfZ2V0X2V4dF9waHlfZndfdmVyc2lvbihzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgdTggZHJpdmVyX2xvYWRlZCwKKwkJCSAgICAgIHU4ICp2ZXJzaW9uLCB1MTYgbGVuKQoreworCXN0cnVjdCBibngyeCAqYnA7CisJdTMyIGV4dF9waHlfdHlwZSA9IDA7CisJdTMyIHNwaXJvbV92ZXIgPSAwOworCXU4IHN0YXR1czsKKworCWlmICh2ZXJzaW9uID09IE5VTEwgfHwgcGFyYW1zID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCWJwID0gcGFyYW1zLT5icDsKKworCXNwaXJvbV92ZXIgPSBSRUdfUkQoYnAsIHBhcmFtcy0+c2htZW1fYmFzZSArCisJCSAgIG9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sCisJCQkgICAgcG9ydF9tYltwYXJhbXMtPnBvcnRdLmV4dF9waHlfZndfdmVyc2lvbikpOworCisJc3RhdHVzID0gMDsKKwkvKiByZXNldCB0aGUgcmV0dXJuZWQgdmFsdWUgdG8gemVybyAqLworCWV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgorCisJCWlmIChsZW4gPCA1KQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJdmVyc2lvblswXSA9IChzcGlyb21fdmVyICYgMHhGRik7CisJCXZlcnNpb25bMV0gPSAoc3Bpcm9tX3ZlciAmIDB4RkYwMCkgPj4gODsKKwkJdmVyc2lvblsyXSA9IChzcGlyb21fdmVyICYgMHhGRjAwMDApID4+IDE2OworCQl2ZXJzaW9uWzNdID0gKHNwaXJvbV92ZXIgJiAweEZGMDAwMDAwKSA+PiAyNDsKKwkJdmVyc2lvbls0XSA9ICdcMCc7CisKKwkJYnJlYWs7CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgorCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MzoKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3Mjc6CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgorCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKKwkJc3RhdHVzID0gYm54MnhfZm9ybWF0X3ZlcihzcGlyb21fdmVyLCB2ZXJzaW9uLCBsZW4pOworCQlicmVhazsKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODE6CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgyMzoKKwkJc3Bpcm9tX3ZlciA9ICgoc3Bpcm9tX3ZlciAmIDB4RjgwKSA+PiA3KSA8PCAxNiB8CisJCQkoc3Bpcm9tX3ZlciAmIDB4N0YpOworCQlzdGF0dXMgPSBibngyeF9mb3JtYXRfdmVyKHNwaXJvbV92ZXIsIHZlcnNpb24sIGxlbik7CisJCWJyZWFrOworCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUOgorCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNToKKwkJdmVyc2lvblswXSA9ICdcMCc7CisJCWJyZWFrOworCisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9GQUlMVVJFOgorCQlEUChORVRJRl9NU0dfTElOSywgImJueDJ4X2dldF9leHRfcGh5X2Z3X3ZlcnNpb246IgorCQkJCSAgICAiIHR5cGUgaXMgRkFJTFVSRSFcbiIpOworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBibngyeF9zZXRfeGd4c19sb29wYmFjayhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCQkgIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMsCisJCQkJICB1OCBpc18xMGcpCit7CisJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKworCWlmIChpc18xMGcpIHsKKwkJdTMyIG1kX2RldmFkOworCisJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyAxMEcgbG9vcGJhY2sgZW5hYmxlXG4iKTsKKworCQkvKiBjaGFuZ2UgdGhlIHVuaV9waHlfYWRkciBpbiB0aGUgbmlnICovCisJCW1kX2RldmFkID0gUkVHX1JEKGJwLCAoTklHX1JFR19YR1hTMF9DVFJMX01EX0RFVkFEICsKKwkJCQkJICBwb3J0KjB4MTgpKTsKKworCQlSRUdfV1IoYnAsIE5JR19SRUdfWEdYUzBfQ1RSTF9NRF9ERVZBRCArIHBvcnQqMHgxOCwgMHg1KTsKKworCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCAwLAorCQkJICAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICAgNSwKKwkJCSAgICAgICAoTURJT19SRUdfQkFOS19BRVJfQkxPQ0sgKworCQkJCShNRElPX0FFUl9CTE9DS19BRVJfUkVHICYgMHhmKSksCisJCQkgICAgICAgMHgyODAwKTsKKworCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCAwLAorCQkJICAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICAgNSwKKwkJCSAgICAgICAoTURJT19SRUdfQkFOS19DTDczX0lFRUVCMCArCisJCQkJKE1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MICYgMHhmKSksCisJCQkgICAgICAgMHg2MDQxKTsKKwkJbXNsZWVwKDIwMCk7CisJCS8qIHNldCBhZXIgbW1kIGJhY2sgKi8KKwkJYm54Mnhfc2V0X2Flcl9tbWQocGFyYW1zLCB2YXJzKTsKKworCQkvKiBhbmQgbWRfZGV2YWQgKi8KKwkJUkVHX1dSKGJwLCBOSUdfUkVHX1hHWFMwX0NUUkxfTURfREVWQUQgKyBwb3J0KjB4MTgsCisJCQkgICAgbWRfZGV2YWQpOworCisJfSBlbHNlIHsKKwkJdTE2IG1paV9jb250cm9sOworCisJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyAxRyBsb29wYmFjayBlbmFibGVcbiIpOworCisJCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwb3J0LAorCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkJICAgICAgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCwKKwkJCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLAorCQkJCSAgICAgICZtaWlfY29udHJvbCk7CisKKwkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBvcnQsCisJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAorCQkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsCisJCQkJICAgICAgKG1paV9jb250cm9sIHwKKwkJCQkgICAgICAgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX0xPT1BCQUNLKSk7CisJfQorfQorCisKK3N0YXRpYyB2b2lkIGJueDJ4X2V4dF9waHlfbG9vcGJhY2soc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTggZXh0X3BoeV9hZGRyOworCXUzMiBleHRfcGh5X3R5cGU7CisKKwlpZiAocGFyYW1zLT5zd2l0Y2hfY2ZnID09IFNXSVRDSF9DRkdfMTBHKSB7CisJCWV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCQlleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKwkJLyogQ0wzNyBBdXRvbmVnIEVuYWJsZWQgKi8KKwkJc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1Q6CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfTk9UX0NPTk46CisJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkiZXh0X3BoeV9sb29wYmFjazogV2Ugc2hvdWxkIG5vdCBnZXQgaGVyZVxuIik7CisJCQlicmVhazsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1OgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJleHRfcGh5X2xvb3BiYWNrOiA4NzA1XG4iKTsKKwkJCWJyZWFrOworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDY6CisJCQlEUChORVRJRl9NU0dfTElOSywgImV4dF9waHlfbG9vcGJhY2s6IDg3MDZcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKKwkJCURQKE5FVElGX01TR19MSU5LLCAiUE1BL1BNRCBleHRfcGh5X2xvb3BiYWNrOiA4NzI2XG4iKTsKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwKKwkJCQkgICAgICAgMHgwMDAxKTsKKwkJCWJyZWFrOworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6CisJCQkvKiBTRlg3MTAxX1hHWFNfVEVTVDEgKi8KKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fWFNfREVWQUQsCisJCQkJICAgICAgIE1ESU9fWFNfU0ZYNzEwMV9YR1hTX1RFU1QxLAorCQkJCSAgICAgICAweDEwMCk7CisJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkiZXh0X3BoeV9sb29wYmFjazogc2V0IGV4dCBwaHkgbG9vcGJhY2tcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKKworCQkJYnJlYWs7CisJCX0gLyogc3dpdGNoIGV4dGVybmFsIFBIWSB0eXBlICovCisJfSBlbHNlIHsKKwkJLyogc2VyZGVzICovCisJCWV4dF9waHlfdHlwZSA9IFNFUkRFU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisJCWV4dF9waHlfYWRkciA9IChwYXJhbXMtPmV4dF9waHlfY29uZmlnICAmCisJCVBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX0FERFJfTUFTSykKKwkJPj4gUE9SVF9IV19DRkdfU0VSREVTX0VYVF9QSFlfQUREUl9TSElGVDsKKwl9Cit9CisKKworLyoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBibngyeF9vdmVycmlkZV9sZWRfdmFsdWUgLQorICoKKyAqIE92ZXJyaWRlIHRoZSBsZWQgdmFsdWUgb2YgdGhlIHJlcXVzdGVkIGxlZAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3U4IGJueDJ4X292ZXJyaWRlX2xlZF92YWx1ZShzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LAorCQkJICB1MzIgbGVkX2lkeCwgdTMyIHZhbHVlKQoreworCXUzMiByZWdfdmFsOworCisJLyogSWYgcG9ydCAwIHRoZW4gdXNlIEVNQUMwLCBlbHNlIHVzZSBFTUFDMSovCisJdTMyIGVtYWNfYmFzZSA9IChwb3J0KSA/IEdSQ0JBU0VfRU1BQzEgOiBHUkNCQVNFX0VNQUMwOworCisJRFAoTkVUSUZfTVNHX0xJTkssCisJCSAiYm54Mnhfb3ZlcnJpZGVfbGVkX3ZhbHVlKCkgcG9ydCAleCBsZWRfaWR4ICVkIHZhbHVlICVkXG4iLAorCQkgcG9ydCwgbGVkX2lkeCwgdmFsdWUpOworCisJc3dpdGNoIChsZWRfaWR4KSB7CisJY2FzZSAwOiAvKiAxME1CIGxlZCAqLworCQkvKiBSZWFkIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBMRUQgcmVnaXN0ZXIgaW4KKwkJdGhlIEVNQUMgYmxvY2sgKi8KKwkJcmVnX3ZhbCA9IFJFR19SRChicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19MRUQpOworCQkvKiBTZXQgdGhlIE9WRVJSSURFIGJpdCB0byAxICovCisJCXJlZ192YWwgfD0gRU1BQ19MRURfT1ZFUlJJREU7CisJCS8qIElmIHZhbHVlIGlzIDEsIHNldCB0aGUgMTBNX09WRVJSSURFIGJpdCwKKwkJb3RoZXJ3aXNlIHJlc2V0IGl0LiovCisJCXJlZ192YWwgPSAodmFsdWUgPT0gMSkgPyAocmVnX3ZhbCB8IEVNQUNfTEVEXzEwTUJfT1ZFUlJJREUpIDoKKwkJCShyZWdfdmFsICYgfkVNQUNfTEVEXzEwTUJfT1ZFUlJJREUpOworCQlSRUdfV1IoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTEVELCByZWdfdmFsKTsKKwkJYnJlYWs7CisJY2FzZSAxOiAvKjEwME1CIGxlZCAgICAqLworCQkvKlJlYWQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIExFRCByZWdpc3RlciBpbgorCQl0aGUgRU1BQyBibG9jayAqLworCQlyZWdfdmFsID0gUkVHX1JEKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX0xFRCk7CisJCS8qICBTZXQgdGhlIE9WRVJSSURFIGJpdCB0byAxICovCisJCXJlZ192YWwgfD0gRU1BQ19MRURfT1ZFUlJJREU7CisJCS8qICBJZiB2YWx1ZSBpcyAxLCBzZXQgdGhlIDEwME1fT1ZFUlJJREUgYml0LAorCQlvdGhlcndpc2UgcmVzZXQgaXQuKi8KKwkJcmVnX3ZhbCA9ICh2YWx1ZSA9PSAxKSA/IChyZWdfdmFsIHwgRU1BQ19MRURfMTAwTUJfT1ZFUlJJREUpIDoKKwkJCShyZWdfdmFsICYgfkVNQUNfTEVEXzEwME1CX09WRVJSSURFKTsKKwkJUkVHX1dSKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX0xFRCwgcmVnX3ZhbCk7CisJCWJyZWFrOworCWNhc2UgMjogLyogMTAwME1CIGxlZCAqLworCQkvKiBSZWFkIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBMRUQgcmVnaXN0ZXIgaW4gdGhlCisJCUVNQUMgYmxvY2sgKi8KKwkJcmVnX3ZhbCA9IFJFR19SRChicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19MRUQpOworCQkvKiBTZXQgdGhlIE9WRVJSSURFIGJpdCB0byAxICovCisJCXJlZ192YWwgfD0gRU1BQ19MRURfT1ZFUlJJREU7CisJCS8qIElmIHZhbHVlIGlzIDEsIHNldCB0aGUgMTAwME1fT1ZFUlJJREUgYml0LCBvdGhlcndpc2UKKwkJcmVzZXQgaXQuICovCisJCXJlZ192YWwgPSAodmFsdWUgPT0gMSkgPyAocmVnX3ZhbCB8IEVNQUNfTEVEXzEwMDBNQl9PVkVSUklERSkgOgorCQkJKHJlZ192YWwgJiB+RU1BQ19MRURfMTAwME1CX09WRVJSSURFKTsKKwkJUkVHX1dSKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX0xFRCwgcmVnX3ZhbCk7CisJCWJyZWFrOworCWNhc2UgMzogLyogMjUwME1CIGxlZCAqLworCQkvKiAgUmVhZCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgTEVEIHJlZ2lzdGVyIGluIHRoZQorCQlFTUFDIGJsb2NrKi8KKwkJcmVnX3ZhbCA9IFJFR19SRChicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19MRUQpOworCQkvKiBTZXQgdGhlIE9WRVJSSURFIGJpdCB0byAxICovCisJCXJlZ192YWwgfD0gRU1BQ19MRURfT1ZFUlJJREU7CisJCS8qICBJZiB2YWx1ZSBpcyAxLCBzZXQgdGhlIDI1MDBNX09WRVJSSURFIGJpdCwgb3RoZXJ3aXNlCisJCXJlc2V0IGl0LiovCisJCXJlZ192YWwgPSAodmFsdWUgPT0gMSkgPyAocmVnX3ZhbCB8IEVNQUNfTEVEXzI1MDBNQl9PVkVSUklERSkgOgorCQkJKHJlZ192YWwgJiB+RU1BQ19MRURfMjUwME1CX09WRVJSSURFKTsKKwkJUkVHX1dSKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX0xFRCwgcmVnX3ZhbCk7CisJCWJyZWFrOworCWNhc2UgNDogLyoxMEcgbGVkICovCisJCWlmIChwb3J0ID09IDApIHsKKwkJCVJFR19XUihicCwgTklHX1JFR19MRURfMTBHX1AwLAorCQkJCSAgICB2YWx1ZSk7CisJCX0gZWxzZSB7CisJCQlSRUdfV1IoYnAsIE5JR19SRUdfTEVEXzEwR19QMSwKKwkJCQkgICAgdmFsdWUpOworCQl9CisJCWJyZWFrOworCWNhc2UgNTogLyogVFJBRkZJQyBsZWQgKi8KKwkJLyogRmluZCBpZiB0aGUgdHJhZmZpYyBjb250cm9sIGlzIHZpYSBCTUFDIG9yIEVNQUMgKi8KKwkJaWYgKHBvcnQgPT0gMCkKKwkJCXJlZ192YWwgPSBSRUdfUkQoYnAsIE5JR19SRUdfTklHX0VNQUMwX0VOKTsKKwkJZWxzZQorCQkJcmVnX3ZhbCA9IFJFR19SRChicCwgTklHX1JFR19OSUdfRU1BQzFfRU4pOworCisJCS8qICBPdmVycmlkZSB0aGUgdHJhZmZpYyBsZWQgaW4gdGhlIEVNQUM6Ki8KKwkJaWYgKHJlZ192YWwgPT0gMSkgeworCQkJLyogUmVhZCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgTEVEIHJlZ2lzdGVyIGluCisJCQl0aGUgRU1BQyBibG9jayAqLworCQkJcmVnX3ZhbCA9IFJFR19SRChicCwgZW1hY19iYXNlICsKKwkJCQkJICAgICBFTUFDX1JFR19FTUFDX0xFRCk7CisJCQkvKiBTZXQgdGhlIFRSQUZGSUNfT1ZFUlJJREUgYml0IHRvIDEgKi8KKwkJCXJlZ192YWwgfD0gRU1BQ19MRURfT1ZFUlJJREU7CisJCQkvKiBJZiB2YWx1ZSBpcyAxLCBzZXQgdGhlIFRSQUZGSUMgYml0LCBvdGhlcndpc2UKKwkJCXJlc2V0IGl0LiovCisJCQlyZWdfdmFsID0gKHZhbHVlID09IDEpID8gKHJlZ192YWwgfCBFTUFDX0xFRF9UUkFGRklDKSA6CisJCQkJKHJlZ192YWwgJiB+RU1BQ19MRURfVFJBRkZJQyk7CisJCQlSRUdfV1IoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTEVELCByZWdfdmFsKTsKKwkJfSBlbHNlIHsgLyogT3ZlcnJpZGUgdGhlIHRyYWZmaWMgbGVkIGluIHRoZSBCTUFDOiAqLworCQkJUkVHX1dSKGJwLCBOSUdfUkVHX0xFRF9DT05UUk9MX09WRVJSSURFX1RSQUZGSUNfUDAKKwkJCQkgICArIHBvcnQqNCwgMSk7CisJCQlSRUdfV1IoYnAsIE5JR19SRUdfTEVEX0NPTlRST0xfVFJBRkZJQ19QMCArIHBvcnQqNCwKKwkJCQkgICAgdmFsdWUpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURQKE5FVElGX01TR19MSU5LLAorCQkJICJibngyeF9vdmVycmlkZV9sZWRfdmFsdWUoKSB1bmtub3duIGxlZCBpbmRleCAlZCAiCisJCQkgIihzaG91bGQgYmUgMC01KVxuIiwgbGVkX2lkeCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisKK3U4IGJueDJ4X3NldF9sZWQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHU4IG1vZGUsIHUzMiBzcGVlZCkKK3sKKwl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OworCXUxNiBod19sZWRfbW9kZSA9IHBhcmFtcy0+aHdfbGVkX21vZGU7CisJdTggcmMgPSAwOworCXUzMiB0bXA7CisJdTMyIGVtYWNfYmFzZSA9IHBvcnQgPyBHUkNCQVNFX0VNQUMxIDogR1JDQkFTRV9FTUFDMDsKKwl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJRFAoTkVUSUZfTVNHX0xJTkssICJibngyeF9zZXRfbGVkOiBwb3J0ICV4LCBtb2RlICVkXG4iLCBwb3J0LCBtb2RlKTsKKwlEUChORVRJRl9NU0dfTElOSywgInNwZWVkIDB4JXgsIGh3X2xlZF9tb2RlIDB4JXhcbiIsCisJCSBzcGVlZCwgaHdfbGVkX21vZGUpOworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgTEVEX01PREVfT0ZGOgorCQlSRUdfV1IoYnAsIE5JR19SRUdfTEVEXzEwR19QMCArIHBvcnQqNCwgMCk7CisJCVJFR19XUihicCwgTklHX1JFR19MRURfTU9ERV9QMCArIHBvcnQqNCwKKwkJCSAgIFNIQVJFRF9IV19DRkdfTEVEX01BQzEpOworCisJCXRtcCA9IEVNQUNfUkQoYnAsIEVNQUNfUkVHX0VNQUNfTEVEKTsKKwkJRU1BQ19XUihicCwgRU1BQ19SRUdfRU1BQ19MRUQsICh0bXAgfCBFTUFDX0xFRF9PVkVSUklERSkpOworCQlicmVhazsKKworCWNhc2UgTEVEX01PREVfT1BFUjoKKwkJaWYgKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1QpIHsKKwkJCVJFR19XUihicCwgTklHX1JFR19MRURfTU9ERV9QMCArIHBvcnQqNCwgMCk7CisJCQlSRUdfV1IoYnAsIE5JR19SRUdfTEVEXzEwR19QMCArIHBvcnQqNCwgMSk7CisJCX0gZWxzZSB7CisJCQlSRUdfV1IoYnAsIE5JR19SRUdfTEVEX01PREVfUDAgKyBwb3J0KjQsCisJCQkJICAgaHdfbGVkX21vZGUpOworCQl9CisKKwkJUkVHX1dSKGJwLCBOSUdfUkVHX0xFRF9DT05UUk9MX09WRVJSSURFX1RSQUZGSUNfUDAgKworCQkJICAgcG9ydCo0LCAwKTsKKwkJLyogU2V0IGJsaW5raW5nIHJhdGUgdG8gfjE1LjlIeiAqLworCQlSRUdfV1IoYnAsIE5JR19SRUdfTEVEX0NPTlRST0xfQkxJTktfUkFURV9QMCArIHBvcnQqNCwKKwkJCSAgIExFRF9CTElOS19SQVRFX1ZBTCk7CisJCVJFR19XUihicCwgTklHX1JFR19MRURfQ09OVFJPTF9CTElOS19SQVRFX0VOQV9QMCArCisJCQkgICBwb3J0KjQsIDEpOworCQl0bXAgPSBFTUFDX1JEKGJwLCBFTUFDX1JFR19FTUFDX0xFRCk7CisJCUVNQUNfV1IoYnAsIEVNQUNfUkVHX0VNQUNfTEVELAorCQkJICAgICh0bXAgJiAofkVNQUNfTEVEX09WRVJSSURFKSkpOworCisJCWlmIChDSElQX0lTX0UxKGJwKSAmJgorCQkgICAgKChzcGVlZCA9PSBTUEVFRF8yNTAwKSB8fAorCQkgICAgIChzcGVlZCA9PSBTUEVFRF8xMDAwKSB8fAorCQkgICAgIChzcGVlZCA9PSBTUEVFRF8xMDApIHx8CisJCSAgICAgKHNwZWVkID09IFNQRUVEXzEwKSkpIHsKKwkJCS8qIE9uIEV2ZXJlc3QgMSBBeCBjaGlwIHZlcnNpb25zIGZvciBzcGVlZHMgbGVzcyB0aGFuCisJCQkxMEcgTEVEIHNjaGVtZSBpcyBkaWZmZXJlbnQgKi8KKwkJCVJFR19XUihicCwgTklHX1JFR19MRURfQ09OVFJPTF9PVkVSUklERV9UUkFGRklDX1AwCisJCQkJICAgKyBwb3J0KjQsIDEpOworCQkJUkVHX1dSKGJwLCBOSUdfUkVHX0xFRF9DT05UUk9MX1RSQUZGSUNfUDAgKworCQkJCSAgIHBvcnQqNCwgMCk7CisJCQlSRUdfV1IoYnAsIE5JR19SRUdfTEVEX0NPTlRST0xfQkxJTktfVFJBRkZJQ19QMCArCisJCQkJICAgcG9ydCo0LCAxKTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJjID0gLUVJTlZBTDsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJibngyeF9zZXRfbGVkOiBJbnZhbGlkIGxlZCBtb2RlICVkXG4iLAorCQkJIG1vZGUpOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJjOworCit9CisKK3U4IGJueDJ4X3Rlc3RfbGluayhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgc3RydWN0IGxpbmtfdmFycyAqdmFycykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MTYgZ3Bfc3RhdHVzID0gMDsKKworCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19HUF9TVEFUVVMsCisJCQkgICAgICBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMSwKKwkJCSAgICAgICZncF9zdGF0dXMpOworCS8qIGxpbmsgaXMgdXAgb25seSBpZiBib3RoIGxvY2FsIHBoeSBhbmQgZXh0ZXJuYWwgcGh5IGFyZSB1cCAqLworCWlmICgoZ3Bfc3RhdHVzICYgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfTElOS19TVEFUVVMpICYmCisJICAgIGJueDJ4X2V4dF9waHlfaXNfbGlua191cChwYXJhbXMsIHZhcnMsIDEpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAtRVNSQ0g7Cit9CisKK3N0YXRpYyB1OCBibngyeF9saW5rX2luaXRpYWxpemUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgICBzdHJ1Y3QgbGlua192YXJzICp2YXJzKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJdTggcmMgPSAwOworCXU4IG5vbl9leHRfcGh5OworCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKworCS8qIEFjdGl2YXRlIHRoZSBleHRlcm5hbCBQSFkgKi8KKwlibngyeF9leHRfcGh5X3Jlc2V0KHBhcmFtcywgdmFycyk7CisKKwlibngyeF9zZXRfYWVyX21tZChwYXJhbXMsIHZhcnMpOworCisJaWYgKHZhcnMtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpCisJCWJueDJ4X3NldF9tYXN0ZXJfbG4ocGFyYW1zKTsKKworCXJjID0gYm54MnhfcmVzZXRfdW5pY29yZShwYXJhbXMpOworCS8qIHJlc2V0IHRoZSBTZXJEZXMgYW5kIHdhaXQgZm9yIHJlc2V0IGJpdCByZXR1cm4gbG93ICovCisJaWYgKHJjICE9IDApCisJCXJldHVybiByYzsKKworCWJueDJ4X3NldF9hZXJfbW1kKHBhcmFtcywgdmFycyk7CisKKwkvKiBzZXR0aW5nIHRoZSBtYXN0ZXJMbl9kZWYgYWdhaW4gYWZ0ZXIgdGhlIHJlc2V0ICovCisJaWYgKHZhcnMtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpIHsKKwkJYm54Mnhfc2V0X21hc3Rlcl9sbihwYXJhbXMpOworCQlibngyeF9zZXRfc3dhcF9sYW5lcyhwYXJhbXMpOworCX0KKworCWlmICh2YXJzLT5waHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSB7CisJCWlmICgocGFyYW1zLT5yZXFfbGluZV9zcGVlZCAmJgorCQkgICAgKChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09IFNQRUVEXzEwMCkgfHwKKwkJICAgICAocGFyYW1zLT5yZXFfbGluZV9zcGVlZCA9PSBTUEVFRF8xMCkpKSB8fAorCQkgICAgKCFwYXJhbXMtPnJlcV9saW5lX3NwZWVkICYmCisJCSAgICAgKHBhcmFtcy0+c3BlZWRfY2FwX21hc2sgPj0KKwkJICAgICAgIFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMTBNX0ZVTEwpICYmCisJCSAgICAgKHBhcmFtcy0+c3BlZWRfY2FwX21hc2sgPAorCQkgICAgICAgUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xRykKKwkJICAgICApKSAgeworCQkJdmFycy0+cGh5X2ZsYWdzIHw9IFBIWV9TR01JSV9GTEFHOworCQl9IGVsc2UgeworCQkJdmFycy0+cGh5X2ZsYWdzICY9IH5QSFlfU0dNSUlfRkxBRzsKKwkJfQorCX0KKwkvKiBJbiBjYXNlIG9mIGV4dGVybmFsIHBoeSBleGlzdGFuY2UsIHRoZSBsaW5lIHNwZWVkIHdvdWxkIGJlIHRoZQorCSBsaW5lIHNwZWVkIGxpbmtlZCB1cCBieSB0aGUgZXh0ZXJuYWwgcGh5LiBJbiBjYXNlIGl0IGlzIGRpcmVjdCBvbmx5LAorCSAgdGhlbiB0aGUgbGluZV9zcGVlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gd2lsbCBiZSBlcXVhbCB0byB0aGUKKwkgICByZXFfbGluZV9zcGVlZCovCisJdmFycy0+bGluZV9zcGVlZCA9IHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQ7CisKKwlibngyeF9jYWxjX2llZWVfYW5lZ19hZHYocGFyYW1zLCAmdmFycy0+aWVlZV9mYyk7CisKKwkvKiBpbml0IGV4dCBwaHkgYW5kIGVuYWJsZSBsaW5rIHN0YXRlIGludCAqLworCW5vbl9leHRfcGh5ID0gKChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUKSB8fAorCQkgICAgICAgKHBhcmFtcy0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19YR1hTXzEwKSk7CisKKwlpZiAobm9uX2V4dF9waHkgfHwKKwkgICAgKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1KSB8fAorCSAgICAoZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDYpIHx8CisJICAgIChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNikgfHwKKwkgICAgKHBhcmFtcy0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19FWFRfUEhZKSkgeworCQlpZiAocGFyYW1zLT5yZXFfbGluZV9zcGVlZCA9PSBTUEVFRF9BVVRPX05FRykKKwkJCWJueDJ4X3NldF9wYXJhbGxlbF9kZXRlY3Rpb24ocGFyYW1zLCB2YXJzLT5waHlfZmxhZ3MpOworCQlibngyeF9pbml0X2ludGVybmFsX3BoeShwYXJhbXMsIHZhcnMsIG5vbl9leHRfcGh5KTsKKwl9CisKKwlpZiAoIW5vbl9leHRfcGh5KQorCQlyYyB8PSBibngyeF9leHRfcGh5X2luaXQocGFyYW1zLCB2YXJzKTsKKworCWJueDJ4X2JpdHNfZGlzKGJwLCBOSUdfUkVHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQsCisJCSAgICAgKE5JR19TVEFUVVNfWEdYUzBfTElOSzEwRyB8CisJCSAgICAgIE5JR19TVEFUVVNfWEdYUzBfTElOS19TVEFUVVMgfAorCQkgICAgICBOSUdfU1RBVFVTX1NFUkRFUzBfTElOS19TVEFUVVMpKTsKKworCXJldHVybiByYzsKKworfQorCisKK3U4IGJueDJ4X3BoeV9pbml0KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgbGlua192YXJzICp2YXJzKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXUzMiB2YWw7CisKKwlEUChORVRJRl9NU0dfTElOSywgIlBoeSBJbml0aWFsaXphdGlvbiBzdGFydGVkXG4iKTsKKwlEUChORVRJRl9NU0dfTElOSywgInJlcV9zcGVlZCAlZCwgcmVxX2Zsb3djdHJsICVkXG4iLAorCQkgcGFyYW1zLT5yZXFfbGluZV9zcGVlZCwgcGFyYW1zLT5yZXFfZmxvd19jdHJsKTsKKwl2YXJzLT5saW5rX3N0YXR1cyA9IDA7CisJdmFycy0+cGh5X2xpbmtfdXAgPSAwOworCXZhcnMtPmxpbmtfdXAgPSAwOworCXZhcnMtPmxpbmVfc3BlZWQgPSAwOworCXZhcnMtPmR1cGxleCA9IERVUExFWF9GVUxMOworCXZhcnMtPmZsb3dfY3RybCA9IEJOWDJYX0ZMT1dfQ1RSTF9OT05FOworCXZhcnMtPm1hY190eXBlID0gTUFDX1RZUEVfTk9ORTsKKworCWlmIChwYXJhbXMtPnN3aXRjaF9jZmcgPT0gIFNXSVRDSF9DRkdfMUcpCisJCXZhcnMtPnBoeV9mbGFncyA9IFBIWV9TRVJERVNfRkxBRzsKKwllbHNlCisJCXZhcnMtPnBoeV9mbGFncyA9IFBIWV9YR1hTX0ZMQUc7CisKKwkvKiBkaXNhYmxlIGF0dGVudGlvbnMgKi8KKwlibngyeF9iaXRzX2RpcyhicCwgTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMCArIHBhcmFtcy0+cG9ydCo0LAorCQkgICAgICAgKE5JR19NQVNLX1hHWFMwX0xJTktfU1RBVFVTIHwKKwkJCU5JR19NQVNLX1hHWFMwX0xJTksxMEcgfAorCQkJTklHX01BU0tfU0VSREVTMF9MSU5LX1NUQVRVUyB8CisJCQlOSUdfTUFTS19NSV9JTlQpKTsKKworCWJueDJ4X2VtYWNfaW5pdChwYXJhbXMsIHZhcnMpOworCisJaWYgKENISVBfUkVWX0lTX0ZQR0EoYnApKSB7CisKKwkJdmFycy0+bGlua191cCA9IDE7CisJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwMDsKKwkJdmFycy0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCXZhcnMtPmZsb3dfY3RybCA9IEJOWDJYX0ZMT1dfQ1RSTF9OT05FOworCQl2YXJzLT5saW5rX3N0YXR1cyA9IChMSU5LX1NUQVRVU19MSU5LX1VQIHwgTElOS18xMEdURkQpOworCQkvKiBlbmFibGUgb24gRTEuNSBGUEdBICovCisJCWlmIChDSElQX0lTX0UxSChicCkpIHsKKwkJCXZhcnMtPmZsb3dfY3RybCB8PQorCQkJCQkoQk5YMlhfRkxPV19DVFJMX1RYIHwKKwkJCQkJIEJOWDJYX0ZMT1dfQ1RSTF9SWCk7CisJCQl2YXJzLT5saW5rX3N0YXR1cyB8PQorCQkJCQkoTElOS19TVEFUVVNfVFhfRkxPV19DT05UUk9MX0VOQUJMRUQgfAorCQkJCQkgTElOS19TVEFUVVNfUlhfRkxPV19DT05UUk9MX0VOQUJMRUQpOworCQl9CisKKwkJYm54MnhfZW1hY19lbmFibGUocGFyYW1zLCB2YXJzLCAwKTsKKwkJYm54MnhfcGJmX3VwZGF0ZShwYXJhbXMsIHZhcnMtPmZsb3dfY3RybCwgdmFycy0+bGluZV9zcGVlZCk7CisJCS8qIGRpc2FibGUgZHJhaW4gKi8KKwkJUkVHX1dSKGJwLCBOSUdfUkVHX0VHUkVTU19EUkFJTjBfTU9ERSArIHBhcmFtcy0+cG9ydCo0LCAwKTsKKworCQkvKiB1cGRhdGUgc2hhcmVkIG1lbW9yeSAqLworCQlibngyeF91cGRhdGVfbW5nKHBhcmFtcywgdmFycy0+bGlua19zdGF0dXMpOworCisJCXJldHVybiAwOworCisJfSBlbHNlCisJaWYgKENISVBfUkVWX0lTX0VNVUwoYnApKSB7CisKKwkJdmFycy0+bGlua191cCA9IDE7CisJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwMDsKKwkJdmFycy0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCXZhcnMtPmZsb3dfY3RybCA9IEJOWDJYX0ZMT1dfQ1RSTF9OT05FOworCQl2YXJzLT5saW5rX3N0YXR1cyA9IChMSU5LX1NUQVRVU19MSU5LX1VQIHwgTElOS18xMEdURkQpOworCisJCWJueDJ4X2JtYWNfZW5hYmxlKHBhcmFtcywgdmFycywgMCk7CisKKwkJYm54MnhfcGJmX3VwZGF0ZShwYXJhbXMsIHZhcnMtPmZsb3dfY3RybCwgdmFycy0+bGluZV9zcGVlZCk7CisJCS8qIERpc2FibGUgZHJhaW4gKi8KKwkJUkVHX1dSKGJwLCBOSUdfUkVHX0VHUkVTU19EUkFJTjBfTU9ERQorCQkJCSAgICArIHBhcmFtcy0+cG9ydCo0LCAwKTsKKworCQkvKiB1cGRhdGUgc2hhcmVkIG1lbW9yeSAqLworCQlibngyeF91cGRhdGVfbW5nKHBhcmFtcywgdmFycy0+bGlua19zdGF0dXMpOworCisJCXJldHVybiAwOworCisJfSBlbHNlCisJaWYgKHBhcmFtcy0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19CTUFDKSB7CisKKwkJdmFycy0+bGlua191cCA9IDE7CisJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwMDsKKwkJdmFycy0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCXZhcnMtPmZsb3dfY3RybCA9IEJOWDJYX0ZMT1dfQ1RSTF9OT05FOworCQl2YXJzLT5tYWNfdHlwZSA9IE1BQ19UWVBFX0JNQUM7CisKKwkJdmFycy0+cGh5X2ZsYWdzID0gUEhZX1hHWFNfRkxBRzsKKworCQlibngyeF9waHlfZGVhc3NlcnQocGFyYW1zLCB2YXJzLT5waHlfZmxhZ3MpOworCQkvKiBzZXQgYm1hYyBsb29wYmFjayAqLworCQlibngyeF9ibWFjX2VuYWJsZShwYXJhbXMsIHZhcnMsIDEpOworCisJCVJFR19XUihicCwgTklHX1JFR19FR1JFU1NfRFJBSU4wX01PREUgKworCQkgICAgcGFyYW1zLT5wb3J0KjQsIDApOworCisJfSBlbHNlIGlmIChwYXJhbXMtPmxvb3BiYWNrX21vZGUgPT0gTE9PUEJBQ0tfRU1BQykgeworCisJCXZhcnMtPmxpbmtfdXAgPSAxOworCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDsKKwkJdmFycy0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCXZhcnMtPmZsb3dfY3RybCA9IEJOWDJYX0ZMT1dfQ1RSTF9OT05FOworCQl2YXJzLT5tYWNfdHlwZSA9IE1BQ19UWVBFX0VNQUM7CisKKwkJdmFycy0+cGh5X2ZsYWdzID0gUEhZX1hHWFNfRkxBRzsKKworCQlibngyeF9waHlfZGVhc3NlcnQocGFyYW1zLCB2YXJzLT5waHlfZmxhZ3MpOworCQkvKiBzZXQgYm1hYyBsb29wYmFjayAqLworCQlibngyeF9lbWFjX2VuYWJsZShwYXJhbXMsIHZhcnMsIDEpOworCQlibngyeF9lbWFjX3Byb2dyYW0ocGFyYW1zLCB2YXJzLT5saW5lX3NwZWVkLAorCQkJCQkgICAgICB2YXJzLT5kdXBsZXgpOworCQlSRUdfV1IoYnAsIE5JR19SRUdfRUdSRVNTX0RSQUlOMF9NT0RFICsKKwkJICAgIHBhcmFtcy0+cG9ydCo0LCAwKTsKKworCX0gZWxzZSBpZiAoKHBhcmFtcy0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19YR1hTXzEwKSB8fAorCQkgICAocGFyYW1zLT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX0VYVF9QSFkpKSB7CisKKwkJdmFycy0+bGlua191cCA9IDE7CisJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwMDsKKwkJdmFycy0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCXZhcnMtPmZsb3dfY3RybCA9IEJOWDJYX0ZMT1dfQ1RSTF9OT05FOworCisJCXZhcnMtPnBoeV9mbGFncyA9IFBIWV9YR1hTX0ZMQUc7CisKKwkJdmFsID0gUkVHX1JEKGJwLAorCQkJCSBOSUdfUkVHX1hHWFMwX0NUUkxfUEhZX0FERFIrCisJCQkJIHBhcmFtcy0+cG9ydCoweDE4KTsKKwkJcGFyYW1zLT5waHlfYWRkciA9ICh1OCl2YWw7CisKKwkJYm54MnhfcGh5X2RlYXNzZXJ0KHBhcmFtcywgdmFycy0+cGh5X2ZsYWdzKTsKKwkJYm54MnhfbGlua19pbml0aWFsaXplKHBhcmFtcywgdmFycyk7CisKKwkJdmFycy0+bWFjX3R5cGUgPSBNQUNfVFlQRV9CTUFDOworCisJCWJueDJ4X2JtYWNfZW5hYmxlKHBhcmFtcywgdmFycywgMCk7CisKKwkJaWYgKHBhcmFtcy0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19YR1hTXzEwKSB7CisJCQkvKiBzZXQgMTBHIFhHWFMgbG9vcGJhY2sgKi8KKwkJCWJueDJ4X3NldF94Z3hzX2xvb3BiYWNrKHBhcmFtcywgdmFycywgMSk7CisJCX0gZWxzZSB7CisJCQkvKiBzZXQgZXh0ZXJuYWwgcGh5IGxvb3BiYWNrICovCisJCQlibngyeF9leHRfcGh5X2xvb3BiYWNrKHBhcmFtcyk7CisJCX0KKwkJUkVHX1dSKGJwLCBOSUdfUkVHX0VHUkVTU19EUkFJTjBfTU9ERSArCisJCQkgICAgcGFyYW1zLT5wb3J0KjQsIDApOworCisJCWJueDJ4X3NldF9sZWQocGFyYW1zLCBMRURfTU9ERV9PUEVSLCB2YXJzLT5saW5lX3NwZWVkKTsKKwl9IGVsc2UKKwkvKiBObyBsb29wYmFjayAqLworCXsKKwkJYm54MnhfcGh5X2RlYXNzZXJ0KHBhcmFtcywgdmFycy0+cGh5X2ZsYWdzKTsKKwkJc3dpdGNoIChwYXJhbXMtPnN3aXRjaF9jZmcpIHsKKwkJY2FzZSBTV0lUQ0hfQ0ZHXzFHOgorCQkJdmFycy0+cGh5X2ZsYWdzIHw9IFBIWV9TRVJERVNfRkxBRzsKKwkJCWlmICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCisJCQkgICAgIFBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX1RZUEVfTUFTSykgPT0KKwkJCSAgICAgUE9SVF9IV19DRkdfU0VSREVTX0VYVF9QSFlfVFlQRV9CQ001NDgyKSB7CisJCQkJdmFycy0+cGh5X2ZsYWdzIHw9IFBIWV9TR01JSV9GTEFHOworCQkJfQorCisJCQl2YWwgPSBSRUdfUkQoYnAsCisJCQkJCSBOSUdfUkVHX1NFUkRFUzBfQ1RSTF9QSFlfQUREUisKKwkJCQkJIHBhcmFtcy0+cG9ydCoweDEwKTsKKworCQkJcGFyYW1zLT5waHlfYWRkciA9ICh1OCl2YWw7CisKKwkJCWJyZWFrOworCQljYXNlIFNXSVRDSF9DRkdfMTBHOgorCQkJdmFycy0+cGh5X2ZsYWdzIHw9IFBIWV9YR1hTX0ZMQUc7CisJCQl2YWwgPSBSRUdfUkQoYnAsCisJCQkJIE5JR19SRUdfWEdYUzBfQ1RSTF9QSFlfQUREUisKKwkJCQkgcGFyYW1zLT5wb3J0KjB4MTgpOworCQkJcGFyYW1zLT5waHlfYWRkciA9ICh1OCl2YWw7CisKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJJbnZhbGlkIHN3aXRjaF9jZmdcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJRFAoTkVUSUZfTVNHX0xJTkssICJQaHkgYWRkcmVzcyA9IDB4JXhcbiIsIHBhcmFtcy0+cGh5X2FkZHIpOworCisJCWJueDJ4X2xpbmtfaW5pdGlhbGl6ZShwYXJhbXMsIHZhcnMpOworCQltc2xlZXAoMzApOworCQlibngyeF9saW5rX2ludF9lbmFibGUocGFyYW1zKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4Xzg3MjZfcmVzZXRfcGh5KHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsIHU4IGV4dF9waHlfYWRkcikKK3sKKwlEUChORVRJRl9NU0dfTElOSywgImJueDJ4Xzg3MjZfcmVzZXRfcGh5IHBvcnQgJWRcbiIsIHBvcnQpOworCisJLyogU2V0IHNlcmlhbCBib290IGNvbnRyb2wgZm9yIGV4dGVybmFsIGxvYWQgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkwsIDB4MDAwMSk7Cit9CisKK3U4IGJueDJ4X2xpbmtfcmVzZXQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMsCisJCSAgdTggcmVzZXRfZXh0X3BoeSkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MzIgZXh0X3BoeV9jb25maWcgPSBwYXJhbXMtPmV4dF9waHlfY29uZmlnOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKGV4dF9waHlfY29uZmlnKTsKKwl1MzIgdmFsID0gUkVHX1JEKGJwLCBwYXJhbXMtPnNobWVtX2Jhc2UgKworCQkJICAgICBvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLCBkZXZfaW5mby4KKwkJCQkgICAgICBwb3J0X2ZlYXR1cmVfY29uZmlnW3BhcmFtcy0+cG9ydF0uCisJCQkJICAgICAgY29uZmlnKSk7CisJRFAoTkVUSUZfTVNHX0xJTkssICJSZXNldHRpbmcgdGhlIGxpbmsgb2YgcG9ydCAlZFxuIiwgcG9ydCk7CisJLyogZGlzYWJsZSBhdHRlbnRpb25zICovCisJdmFycy0+bGlua19zdGF0dXMgPSAwOworCWJueDJ4X3VwZGF0ZV9tbmcocGFyYW1zLCB2YXJzLT5saW5rX3N0YXR1cyk7CisJYm54MnhfYml0c19kaXMoYnAsIE5JR19SRUdfTUFTS19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQsCisJCSAgICAgKE5JR19NQVNLX1hHWFMwX0xJTktfU1RBVFVTIHwKKwkJICAgICAgTklHX01BU0tfWEdYUzBfTElOSzEwRyB8CisJCSAgICAgIE5JR19NQVNLX1NFUkRFUzBfTElOS19TVEFUVVMgfAorCQkgICAgICBOSUdfTUFTS19NSV9JTlQpKTsKKworCS8qIGFjdGl2YXRlIG5pZyBkcmFpbiAqLworCVJFR19XUihicCwgTklHX1JFR19FR1JFU1NfRFJBSU4wX01PREUgKyBwb3J0KjQsIDEpOworCisJLyogZGlzYWJsZSBuaWcgZWdyZXNzIGludGVyZmFjZSAqLworCVJFR19XUihicCwgTklHX1JFR19CTUFDMF9PVVRfRU4gKyBwb3J0KjQsIDApOworCVJFR19XUihicCwgTklHX1JFR19FR1JFU1NfRU1BQzBfT1VUX0VOICsgcG9ydCo0LCAwKTsKKworCS8qIFN0b3AgQmlnTWFjIHJ4ICovCisJYm54MnhfYm1hY19yeF9kaXNhYmxlKGJwLCBwb3J0KTsKKworCS8qIGRpc2FibGUgZW1hYyAqLworCVJFR19XUihicCwgTklHX1JFR19OSUdfRU1BQzBfRU4gKyBwb3J0KjQsIDApOworCisJbXNsZWVwKDEwKTsKKwkvKiBUaGUgUEhZIHJlc2V0IGlzIGNvbnRyb2xlZCBieSBHUElPIDEKKwkgKiBIb2xkIGl0IGFzIHZhcnMgbG93CisJICovCisJIC8qIGNsZWFyIGxpbmsgbGVkICovCisJYm54Mnhfc2V0X2xlZChwYXJhbXMsIExFRF9NT0RFX09GRiwgMCk7CisJaWYgKHJlc2V0X2V4dF9waHkpIHsKKwkJc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1Q6CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKKwkJCWJyZWFrOworCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNzoKKwkJeworCisJCQkvKiBEaXNhYmxlIFRyYW5zbWl0dGVyICovCisJCQl1OCBleHRfcGh5X2FkZHIgPQorCQkJCVhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCQkJaWYgKCh2YWwgJiBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfTUFTSykgPT0KKwkJCSAgICBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfRElTQUJMRV9UWF9MQVNFUikKKwkJCQlibngyeF9zZnBfc2V0X3RyYW5zbWl0dGVyKGJwLCBwb3J0LAorCQkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAorCQkJCQlleHRfcGh5X2FkZHIsIDApOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXR0aW5nIDgwNzMgcG9ydCAlZCBpbnRvICIKKwkJCQkgImxvdyBwb3dlciBtb2RlXG4iLAorCQkJCSBwb3J0KTsKKwkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzIsCisJCQkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfTE9XLAorCQkJCQkgIHBvcnQpOworCQkJYnJlYWs7CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKKwkJeworCQkJdTggZXh0X3BoeV9hZGRyID0KKwkJCQlYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKwkJCS8qIFNldCBzb2Z0IHJlc2V0ICovCisJCQlibngyeF84NzI2X3Jlc2V0X3BoeShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X2FkZHIpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgyMzoKKwkJeworCQkJdTggZXh0X3BoeV9hZGRyID0KKwkJCQlYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkgICAgICAgTURJT19BTl9SRUdfQ1RSTCwgMHgwMDAwKTsKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgIE1ESU9fUE1BX1JFR19DVFJMLCAxKTsKKwkJCWJyZWFrOworCQl9CisJCWRlZmF1bHQ6CisJCQkvKiBIVyByZXNldCAqLworCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMSwKKwkJCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1csCisJCQkJCSAgcG9ydCk7CisJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18yLAorCQkJCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0xPVywKKwkJCQkJICBwb3J0KTsKKwkJCURQKE5FVElGX01TR19MSU5LLCAicmVzZXQgZXh0ZXJuYWwgUEhZXG4iKTsKKwkJfQorCX0KKwkvKiByZXNldCB0aGUgU2VyRGVzL1hHWFMgKi8KKwlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18zX0NMRUFSLAorCSAgICAgICAoMHgxZmYgPDwgKHBvcnQqMTYpKSk7CisKKwkvKiByZXNldCBCaWdNYWMgKi8KKwlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX0NMRUFSLAorCSAgICAgICAoTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfUlNUX0JNQUMwIDw8IHBvcnQpKTsKKworCS8qIGRpc2FibGUgbmlnIGluZ3Jlc3MgaW50ZXJmYWNlICovCisJUkVHX1dSKGJwLCBOSUdfUkVHX0JNQUMwX0lOX0VOICsgcG9ydCo0LCAwKTsKKwlSRUdfV1IoYnAsIE5JR19SRUdfRU1BQzBfSU5fRU4gKyBwb3J0KjQsIDApOworCVJFR19XUihicCwgTklHX1JFR19CTUFDMF9PVVRfRU4gKyBwb3J0KjQsIDApOworCVJFR19XUihicCwgTklHX1JFR19FR1JFU1NfRU1BQzBfT1VUX0VOICsgcG9ydCo0LCAwKTsKKwl2YXJzLT5saW5rX3VwID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHU4IGJueDJ4X3VwZGF0ZV9saW5rX2Rvd24oc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgICAgc3RydWN0IGxpbmtfdmFycyAqdmFycykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OworCisJRFAoTkVUSUZfTVNHX0xJTkssICJQb3J0ICV4OiBMaW5rIGlzIGRvd25cbiIsIHBvcnQpOworCWJueDJ4X3NldF9sZWQocGFyYW1zLCBMRURfTU9ERV9PRkYsIDApOworCisJLyogaW5kaWNhdGUgbm8gbWFjIGFjdGl2ZSAqLworCXZhcnMtPm1hY190eXBlID0gTUFDX1RZUEVfTk9ORTsKKworCS8qIHVwZGF0ZSBzaGFyZWQgbWVtb3J5ICovCisJdmFycy0+bGlua19zdGF0dXMgPSAwOworCXZhcnMtPmxpbmVfc3BlZWQgPSAwOworCWJueDJ4X3VwZGF0ZV9tbmcocGFyYW1zLCB2YXJzLT5saW5rX3N0YXR1cyk7CisKKwkvKiBhY3RpdmF0ZSBuaWcgZHJhaW4gKi8KKwlSRUdfV1IoYnAsIE5JR19SRUdfRUdSRVNTX0RSQUlOMF9NT0RFICsgcG9ydCo0LCAxKTsKKworCS8qIGRpc2FibGUgZW1hYyAqLworCVJFR19XUihicCwgTklHX1JFR19OSUdfRU1BQzBfRU4gKyBwb3J0KjQsIDApOworCisJbXNsZWVwKDEwKTsKKworCS8qIHJlc2V0IEJpZ01hYyAqLworCWJueDJ4X2JtYWNfcnhfZGlzYWJsZShicCwgcGFyYW1zLT5wb3J0KTsKKwlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArCisJCSAgIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX0NMRUFSLAorCQkgICAoTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfUlNUX0JNQUMwIDw8IHBvcnQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHU4IGJueDJ4X3VwZGF0ZV9saW5rX3VwKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAorCQkJICAgICBzdHJ1Y3QgbGlua192YXJzICp2YXJzLAorCQkJICAgICB1OCBsaW5rXzEwZywgdTMyIGdwX3N0YXR1cykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OworCXU4IHJjID0gMDsKKworCXZhcnMtPmxpbmtfc3RhdHVzIHw9IExJTktfU1RBVFVTX0xJTktfVVA7CisJaWYgKGxpbmtfMTBnKSB7CisJCWJueDJ4X2JtYWNfZW5hYmxlKHBhcmFtcywgdmFycywgMCk7CisJCWJueDJ4X3NldF9sZWQocGFyYW1zLCBMRURfTU9ERV9PUEVSLCBTUEVFRF8xMDAwMCk7CisJfSBlbHNlIHsKKwkJcmMgPSBibngyeF9lbWFjX3Byb2dyYW0ocGFyYW1zLCB2YXJzLT5saW5lX3NwZWVkLAorCQkJCSAgICAgIHZhcnMtPmR1cGxleCk7CisKKwkJYm54MnhfZW1hY19lbmFibGUocGFyYW1zLCB2YXJzLCAwKTsKKworCQkvKiBBTiBjb21wbGV0ZT8gKi8KKwkJaWYgKGdwX3N0YXR1cyAmIE1ESU9fQU5fQ0w3M19PUl8zN19DT01QTEVURSkgeworCQkJaWYgKCEodmFycy0+cGh5X2ZsYWdzICYKKwkJCSAgICAgIFBIWV9TR01JSV9GTEFHKSkKKwkJCQlibngyeF9zZXRfZ21paV90eF9kcml2ZXIocGFyYW1zKTsKKwkJfQorCX0KKworCS8qIFBCRiAtIGxpbmsgdXAgKi8KKwlyYyB8PSBibngyeF9wYmZfdXBkYXRlKHBhcmFtcywgdmFycy0+Zmxvd19jdHJsLAorCQkJICAgICAgdmFycy0+bGluZV9zcGVlZCk7CisKKwkvKiBkaXNhYmxlIGRyYWluICovCisJUkVHX1dSKGJwLCBOSUdfUkVHX0VHUkVTU19EUkFJTjBfTU9ERSArIHBvcnQqNCwgMCk7CisKKwkvKiB1cGRhdGUgc2hhcmVkIG1lbW9yeSAqLworCWJueDJ4X3VwZGF0ZV9tbmcocGFyYW1zLCB2YXJzLT5saW5rX3N0YXR1cyk7CisJbXNsZWVwKDIwKTsKKwlyZXR1cm4gcmM7Cit9CisvKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBjYWxsZWQgdXBvbiBsaW5rIGludGVycnVwdCAqLworLyogSW4gY2FzZSB2YXJzLT5saW5rX3VwLCBkcml2ZXIgbmVlZHMgdG8KKwkxLiBVcGRhdGUgdGhlIHBiZgorCTIuIERpc2FibGUgZHJhaW4KKwkzLiBVcGRhdGUgdGhlIHNoYXJlZCBtZW1vcnkKKwk0LiBJbmRpY2F0ZSBsaW5rIHVwCisJNS4gU2V0IExFRHMKKyAgIE90aGVyd2lzZSwKKwkxLiBVcGRhdGUgc2hhcmVkIG1lbW9yeQorCTIuIFJlc2V0IEJpZ01hYworCTMuIFJlcG9ydCBsaW5rIGRvd24KKwk0LiBVbnNldCBMRURzCisqLwordTggYm54MnhfbGlua191cGRhdGUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKKwl1MTYgZ3Bfc3RhdHVzOworCXU4IGxpbmtfMTBnOworCXU4IGV4dF9waHlfbGlua191cCwgcmMgPSAwOworCXUzMiBleHRfcGh5X3R5cGU7CisJdTggaXNfbWlfaW50ID0gMDsKKworCURQKE5FVElGX01TR19MSU5LLCAicG9ydCAleCwgWEdYUz8leCwgaW50X3N0YXR1cyAweCV4XG4iLAorCQkgcG9ydCwgKHZhcnMtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpLAorCQkgUkVHX1JEKGJwLCBOSUdfUkVHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQpKTsKKworCWlzX21pX2ludCA9ICh1OCkoUkVHX1JEKGJwLCBOSUdfUkVHX0VNQUMwX1NUQVRVU19NSVNDX01JX0lOVCArCisJCQkJICAgIHBvcnQqMHgxOCkgPiAwKTsKKwlEUChORVRJRl9NU0dfTElOSywgImludF9tYXNrIDB4JXggTUlfSU5UICV4LCBTRVJERVNfTElOSyAleFxuIiwKKwkJIFJFR19SRChicCwgTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCksCisJCSBpc19taV9pbnQsCisJCSBSRUdfUkQoYnAsCisJCQkgICAgTklHX1JFR19TRVJERVMwX1NUQVRVU19MSU5LX1NUQVRVUyArIHBvcnQqMHgzYykpOworCisJRFAoTkVUSUZfTVNHX0xJTkssICIgMTBHICV4LCBYR1hTX0xJTksgJXhcbiIsCisJICBSRUdfUkQoYnAsIE5JR19SRUdfWEdYUzBfU1RBVFVTX0xJTksxMEcgKyBwb3J0KjB4NjgpLAorCSAgUkVHX1JEKGJwLCBOSUdfUkVHX1hHWFMwX1NUQVRVU19MSU5LX1NUQVRVUyArIHBvcnQqMHg2OCkpOworCisJLyogZGlzYWJsZSBlbWFjICovCisJUkVHX1dSKGJwLCBOSUdfUkVHX05JR19FTUFDMF9FTiArIHBvcnQqNCwgMCk7CisKKwlleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKworCS8qIENoZWNrIGV4dGVybmFsIGxpbmsgY2hhbmdlIG9ubHkgZm9yIG5vbi1kaXJlY3QgKi8KKwlleHRfcGh5X2xpbmtfdXAgPSBibngyeF9leHRfcGh5X2lzX2xpbmtfdXAocGFyYW1zLCB2YXJzLCBpc19taV9pbnQpOworCisJLyogUmVhZCBncF9zdGF0dXMgKi8KKwlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcG9ydCwgcGFyYW1zLT5waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUkVHX0JBTktfR1BfU1RBVFVTLAorCQkJICAgICAgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzEsCisJCQkgICAgICAmZ3Bfc3RhdHVzKTsKKworCXJjID0gYm54MnhfbGlua19zZXR0aW5nc19zdGF0dXMocGFyYW1zLCB2YXJzLCBncF9zdGF0dXMsCisJCQkJICAgICAgZXh0X3BoeV9saW5rX3VwKTsKKwlpZiAocmMgIT0gMCkKKwkJcmV0dXJuIHJjOworCisJLyogYW55dGhpbmcgMTAgYW5kIG92ZXIgdXNlcyB0aGUgYm1hYyAqLworCWxpbmtfMTBnID0gKCh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEXzEwMDAwKSB8fAorCQkgICAgKHZhcnMtPmxpbmVfc3BlZWQgPT0gU1BFRURfMTIwMDApIHx8CisJCSAgICAodmFycy0+bGluZV9zcGVlZCA9PSBTUEVFRF8xMjUwMCkgfHwKKwkJICAgICh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEXzEzMDAwKSB8fAorCQkgICAgKHZhcnMtPmxpbmVfc3BlZWQgPT0gU1BFRURfMTUwMDApIHx8CisJCSAgICAodmFycy0+bGluZV9zcGVlZCA9PSBTUEVFRF8xNjAwMCkpOworCisJYm54MnhfbGlua19pbnRfYWNrKHBhcmFtcywgdmFycywgbGlua18xMGcsIGlzX21pX2ludCk7CisKKwkvKiBJbiBjYXNlIGV4dGVybmFsIHBoeSBsaW5rIGlzIHVwLCBhbmQgaW50ZXJuYWwgbGluayBpcyBkb3duCisJKCBub3QgaW5pdGlhbGl6ZWQgeWV0IHByb2JhYmx5IGFmdGVyIGxpbmsgaW5pdGlhbGl6YXRpb24sIGl0IG5lZWRzCisJdG8gYmUgaW5pdGlhbGl6ZWQuCisJTm90ZSB0aGF0IGFmdGVyIGxpbmsgZG93bi11cCBhcyByZXN1bHQgb2YgY2FibGUgcGx1ZywKKwl0aGUgeGd4cyBsaW5rIHdvdWxkIHByb2JhYmx5IGJlY29tZSB1cCBhZ2FpbiB3aXRob3V0IHRoZSBuZWVkIHRvCisJaW5pdGlhbGl6ZSBpdCovCisKKwlpZiAoKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9UWVBFX0RJUkVDVCkgJiYKKwkgICAgKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1KSAmJgorCSAgICAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDYpICYmCisJICAgIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNikgJiYKKwkgICAgKGV4dF9waHlfbGlua191cCAmJiAhdmFycy0+cGh5X2xpbmtfdXApKQorCQlibngyeF9pbml0X2ludGVybmFsX3BoeShwYXJhbXMsIHZhcnMsIDApOworCisJLyogbGluayBpcyB1cCBvbmx5IGlmIGJvdGggbG9jYWwgcGh5IGFuZCBleHRlcm5hbCBwaHkgYXJlIHVwICovCisJdmFycy0+bGlua191cCA9IChleHRfcGh5X2xpbmtfdXAgJiYgdmFycy0+cGh5X2xpbmtfdXApOworCisJaWYgKHZhcnMtPmxpbmtfdXApCisJCXJjID0gYm54MnhfdXBkYXRlX2xpbmtfdXAocGFyYW1zLCB2YXJzLCBsaW5rXzEwZywgZ3Bfc3RhdHVzKTsKKwllbHNlCisJCXJjID0gYm54MnhfdXBkYXRlX2xpbmtfZG93bihwYXJhbXMsIHZhcnMpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdTggYm54MnhfODA3M19jb21tb25faW5pdF9waHkoc3RydWN0IGJueDJ4ICpicCwgdTMyIHNobWVtX2Jhc2UpCit7CisJdTggZXh0X3BoeV9hZGRyW1BPUlRfTUFYXTsKKwl1MTYgdmFsOworCXM4IHBvcnQ7CisKKwkvKiBQQVJUMSAtIFJlc2V0IGJvdGggcGh5cyAqLworCWZvciAocG9ydCA9IFBPUlRfTUFYIC0gMTsgcG9ydCA+PSBQT1JUXzA7IHBvcnQtLSkgeworCQkvKiBFeHRyYWN0IHRoZSBleHQgcGh5IGFkZHJlc3MgZm9yIHRoZSBwb3J0ICovCisJCXUzMiBleHRfcGh5X2NvbmZpZyA9IFJFR19SRChicCwgc2htZW1fYmFzZSArCisJCQkJCW9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sCisJCSAgIGRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLmV4dGVybmFsX3BoeV9jb25maWcpKTsKKworCQkvKiBkaXNhYmxlIGF0dGVudGlvbnMgKi8KKwkJYm54MnhfYml0c19kaXMoYnAsIE5JR19SRUdfTUFTS19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQsCisJCQkgICAgIChOSUdfTUFTS19YR1hTMF9MSU5LX1NUQVRVUyB8CisJCQkgICAgICBOSUdfTUFTS19YR1hTMF9MSU5LMTBHIHwKKwkJCSAgICAgIE5JR19NQVNLX1NFUkRFUzBfTElOS19TVEFUVVMgfAorCQkJICAgICAgTklHX01BU0tfTUlfSU5UKSk7CisKKwkJZXh0X3BoeV9hZGRyW3BvcnRdID0gWEdYU19FWFRfUEhZX0FERFIoZXh0X3BoeV9jb25maWcpOworCisJCS8qIE5lZWQgdG8gdGFrZSB0aGUgcGh5IG91dCBvZiBsb3cgcG93ZXIgbW9kZSBpbiBvcmRlcgorCQkJdG8gd3JpdGUgdG8gYWNjZXNzIGl0cyByZWdpc3RlcnMgKi8KKwkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMiwKKwkJCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0hJR0gsIHBvcnQpOworCisJCS8qIFJlc2V0IHRoZSBwaHkgKi8KKwkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAorCQkJICAgICAgIGV4dF9waHlfYWRkcltwb3J0XSwKKwkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwKKwkJCSAgICAgICAxPDwxNSk7CisJfQorCisJLyogQWRkIGRlbGF5IG9mIDE1MG1zIGFmdGVyIHJlc2V0ICovCisJbXNsZWVwKDE1MCk7CisKKwkvKiBQQVJUMiAtIERvd25sb2FkIGZpcm13YXJlIHRvIGJvdGggcGh5cyAqLworCWZvciAocG9ydCA9IFBPUlRfTUFYIC0gMTsgcG9ydCA+PSBQT1JUXzA7IHBvcnQtLSkgeworCQl1MTYgZndfdmVyMTsKKworCQlibngyeF9iY204MDczX2V4dGVybmFsX3JvbV9ib290KGJwLCBwb3J0LAorCQkJCQkgICAgICBleHRfcGh5X2FkZHJbcG9ydF0sIHNobWVtX2Jhc2UpOworCisJCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKKwkJCSAgICAgIGV4dF9waHlfYWRkcltwb3J0XSwKKwkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIxLCAmZndfdmVyMSk7CisJCWlmIChmd192ZXIxID09IDAgfHwgZndfdmVyMSA9PSAweDQzMjEpIHsKKwkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCSAiYm54MnhfODA3M19jb21tb25faW5pdF9waHkgcG9ydCAleDoiCisJCQkJICJEb3dubG9hZCBmYWlsZWQuIGZ3IHZlcnNpb24gPSAweCV4XG4iLAorCQkJCSBwb3J0LCBmd192ZXIxKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJLyogT25seSBzZXQgYml0IDEwID0gMSAoVHggcG93ZXIgZG93bikgKi8KKwkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKKwkJCSAgICAgIGV4dF9waHlfYWRkcltwb3J0XSwKKwkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgTURJT19QTUFfUkVHX1RYX1BPV0VSX0RPV04sICZ2YWwpOworCisJCS8qIFBoYXNlMSBvZiBUWF9QT1dFUl9ET1dOIHJlc2V0ICovCisJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKKwkJCSAgICAgICBleHRfcGh5X2FkZHJbcG9ydF0sCisJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICAgTURJT19QTUFfUkVHX1RYX1BPV0VSX0RPV04sCisJCQkgICAgICAgKHZhbCB8IDE8PDEwKSk7CisJfQorCisJLyogVG9nZ2xlIFRyYW5zbWl0dGVyOiBQb3dlciBkb3duIGFuZCB0aGVuIHVwIHdpdGggNjAwbXMKKwkgICBkZWxheSBiZXR3ZWVuICovCisJbXNsZWVwKDYwMCk7CisKKwkvKiBQQVJUMyAtIGNvbXBsZXRlIFRYX1BPV0VSX0RPV04gcHJvY2VzcywgYW5kIHNldCBHUElPMiBiYWNrIHRvIGxvdyAqLworCWZvciAocG9ydCA9IFBPUlRfTUFYIC0gMTsgcG9ydCA+PSBQT1JUXzA7IHBvcnQtLSkgeworCQkvKiBQaGFzZTIgb2YgUE9XRVJfRE9XTl9SRVNFVCAqLworCQkvKiBSZWxlYXNlIGJpdCAxMCAoUmVsZWFzZSBUeCBwb3dlciBkb3duKSAqLworCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCisJCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAorCQkJICAgICAgZXh0X3BoeV9hZGRyW3BvcnRdLAorCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICBNRElPX1BNQV9SRUdfVFhfUE9XRVJfRE9XTiwgJnZhbCk7CisKKwkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAorCQkJICAgICAgIGV4dF9waHlfYWRkcltwb3J0XSwKKwkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgICBNRElPX1BNQV9SRUdfVFhfUE9XRVJfRE9XTiwgKHZhbCAmICh+KDE8PDEwKSkpKTsKKwkJbXNsZWVwKDE1KTsKKworCQkvKiBSZWFkIG1vZGlmeSB3cml0ZSB0aGUgU1BJLVJPTSB2ZXJzaW9uIHNlbGVjdCByZWdpc3RlciAqLworCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCisJCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAorCQkJICAgICAgZXh0X3BoeV9hZGRyW3BvcnRdLAorCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICBNRElPX1BNQV9SRUdfRURDX0ZGRV9NQUlOLCAmdmFsKTsKKwkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCisJCQkgICAgICBleHRfcGh5X2FkZHJbcG9ydF0sCisJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgIE1ESU9fUE1BX1JFR19FRENfRkZFX01BSU4sICh2YWwgfCAoMTw8MTIpKSk7CisKKwkJLyogc2V0IEdQSU8yIGJhY2sgdG8gTE9XICovCisJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzIsCisJCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1csIHBvcnQpOworCX0KKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgdTggYm54MnhfODcyN19jb21tb25faW5pdF9waHkoc3RydWN0IGJueDJ4ICpicCwgdTMyIHNobWVtX2Jhc2UpCit7CisJdTggZXh0X3BoeV9hZGRyW1BPUlRfTUFYXTsKKwlzOCBwb3J0LCBmaXJzdF9wb3J0LCBpOworCXUzMiBzd2FwX3ZhbCwgc3dhcF9vdmVycmlkZTsKKwlEUChORVRJRl9NU0dfTElOSywgIkV4ZWN1dGluZyBCQ004NzI3IGNvbW1vbiBpbml0XG4iKTsKKwlzd2FwX3ZhbCA9IFJFR19SRChicCwgIE5JR19SRUdfUE9SVF9TV0FQKTsKKwlzd2FwX292ZXJyaWRlID0gUkVHX1JEKGJwLCAgTklHX1JFR19TVFJBUF9PVkVSUklERSk7CisKKwlibngyeF9leHRfcGh5X2h3X3Jlc2V0KGJwLCAxIF4gKHN3YXBfdmFsICYmIHN3YXBfb3ZlcnJpZGUpKTsKKwltc2xlZXAoNSk7CisKKwlpZiAoc3dhcF92YWwgJiYgc3dhcF9vdmVycmlkZSkKKwkJZmlyc3RfcG9ydCA9IFBPUlRfMDsKKwllbHNlCisJCWZpcnN0X3BvcnQgPSBQT1JUXzE7CisKKwkvKiBQQVJUMSAtIFJlc2V0IGJvdGggcGh5cyAqLworCWZvciAoaSA9IDAsIHBvcnQgPSBmaXJzdF9wb3J0OyBpIDwgUE9SVF9NQVg7IGkrKywgcG9ydCA9ICFwb3J0KSB7CisJCS8qIEV4dHJhY3QgdGhlIGV4dCBwaHkgYWRkcmVzcyBmb3IgdGhlIHBvcnQgKi8KKwkJdTMyIGV4dF9waHlfY29uZmlnID0gUkVHX1JEKGJwLCBzaG1lbV9iYXNlICsKKwkJCQkJb2Zmc2V0b2Yoc3RydWN0IHNobWVtX3JlZ2lvbiwKKwkJICAgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0uZXh0ZXJuYWxfcGh5X2NvbmZpZykpOworCisJCS8qIGRpc2FibGUgYXR0ZW50aW9ucyAqLworCQlibngyeF9iaXRzX2RpcyhicCwgTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCwKKwkJCSAgICAgKE5JR19NQVNLX1hHWFMwX0xJTktfU1RBVFVTIHwKKwkJCSAgICAgIE5JR19NQVNLX1hHWFMwX0xJTksxMEcgfAorCQkJICAgICAgTklHX01BU0tfU0VSREVTMF9MSU5LX1NUQVRVUyB8CisJCQkgICAgICBOSUdfTUFTS19NSV9JTlQpKTsKKworCQlleHRfcGh5X2FkZHJbcG9ydF0gPSBYR1hTX0VYVF9QSFlfQUREUihleHRfcGh5X2NvbmZpZyk7CisKKwkJLyogUmVzZXQgdGhlIHBoeSAqLworCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcsCisJCQkgICAgICAgZXh0X3BoeV9hZGRyW3BvcnRdLAorCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgIE1ESU9fUE1BX1JFR19DVFJMLAorCQkJICAgICAgIDE8PDE1KTsKKwl9CisKKwkvKiBBZGQgZGVsYXkgb2YgMTUwbXMgYWZ0ZXIgcmVzZXQgKi8KKwltc2xlZXAoMTUwKTsKKworCS8qIFBBUlQyIC0gRG93bmxvYWQgZmlybXdhcmUgdG8gYm90aCBwaHlzICovCisJZm9yIChpID0gMCwgcG9ydCA9IGZpcnN0X3BvcnQ7IGkgPCBQT1JUX01BWDsgaSsrLCBwb3J0ID0gIXBvcnQpIHsKKwkJdTE2IGZ3X3ZlcjE7CisKKwkJYm54MnhfYmNtODcyN19leHRlcm5hbF9yb21fYm9vdChicCwgcG9ydCwKKwkJCQkJICAgICAgZXh0X3BoeV9hZGRyW3BvcnRdLCBzaG1lbV9iYXNlKTsKKworCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcsCisJCQkgICAgICBleHRfcGh5X2FkZHJbcG9ydF0sCisJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMSwgJmZ3X3ZlcjEpOworCQlpZiAoZndfdmVyMSA9PSAwIHx8IGZ3X3ZlcjEgPT0gMHg0MzIxKSB7CisJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkgImJueDJ4Xzg3MjdfY29tbW9uX2luaXRfcGh5IHBvcnQgJXg6IgorCQkJCSAiRG93bmxvYWQgZmFpbGVkLiBmdyB2ZXJzaW9uID0gMHgleFxuIiwKKwkJCQkgcG9ydCwgZndfdmVyMSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB1OCBibngyeF84NzI2X2NvbW1vbl9pbml0X3BoeShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgc2htZW1fYmFzZSkKK3sKKwl1OCBleHRfcGh5X2FkZHI7CisJdTMyIHZhbDsKKwlzOCBwb3J0OworCisJLyogVXNlIHBvcnQxIGJlY2F1c2Ugb2YgdGhlIHN0YXRpYyBwb3J0LXN3YXAgKi8KKwkvKiBFbmFibGUgdGhlIG1vZHVsZSBkZXRlY3Rpb24gaW50ZXJydXB0ICovCisJdmFsID0gUkVHX1JEKGJwLCBNSVNDX1JFR19HUElPX0VWRU5UX0VOKTsKKwl2YWwgfD0gKCgxPDxNSVNDX1JFR0lTVEVSU19HUElPXzMpfAorCQkoMTw8KE1JU0NfUkVHSVNURVJTX0dQSU9fMyArIE1JU0NfUkVHSVNURVJTX0dQSU9fUE9SVF9TSElGVCkpKTsKKwlSRUdfV1IoYnAsIE1JU0NfUkVHX0dQSU9fRVZFTlRfRU4sIHZhbCk7CisKKwlibngyeF9leHRfcGh5X2h3X3Jlc2V0KGJwLCAxKTsKKwltc2xlZXAoNSk7CisJZm9yIChwb3J0ID0gMDsgcG9ydCA8IFBPUlRfTUFYOyBwb3J0KyspIHsKKwkJLyogRXh0cmFjdCB0aGUgZXh0IHBoeSBhZGRyZXNzIGZvciB0aGUgcG9ydCAqLworCQl1MzIgZXh0X3BoeV9jb25maWcgPSBSRUdfUkQoYnAsIHNobWVtX2Jhc2UgKworCQkJCQlvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLAorCQkJZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0uZXh0ZXJuYWxfcGh5X2NvbmZpZykpOworCisJCWV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKGV4dF9waHlfY29uZmlnKTsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzI2X2NvbW1vbl9pbml0IDogZXh0X3BoeV9hZGRyID0gMHgleFxuIiwKKwkJCSBleHRfcGh5X2FkZHIpOworCisJCWJueDJ4Xzg3MjZfcmVzZXRfcGh5KGJwLCBwb3J0LCBleHRfcGh5X2FkZHIpOworCisJCS8qIFNldCBmYXVsdCBtb2R1bGUgZGV0ZWN0ZWQgTEVEIG9uICovCisJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzAsCisJCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX0hJR0gsCisJCQkJICBwb3J0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdTggYm54MnhfODQ4MjNfY29tbW9uX2luaXRfcGh5KHN0cnVjdCBibngyeCAqYnAsIHUzMiBzaG1lbV9iYXNlKQoreworCS8qIEhXIHJlc2V0ICovCisJYm54MnhfZXh0X3BoeV9od19yZXNldChicCwgMSk7CisJcmV0dXJuIDA7Cit9Cit1OCBibngyeF9jb21tb25faW5pdF9waHkoc3RydWN0IGJueDJ4ICpicCwgdTMyIHNobWVtX2Jhc2UpCit7CisJdTggcmMgPSAwOworCXUzMiBleHRfcGh5X3R5cGU7CisKKwlEUChORVRJRl9NU0dfTElOSywgIkJlZ2luIGNvbW1vbiBwaHkgaW5pdFxuIik7CisKKwkvKiBSZWFkIHRoZSBleHRfcGh5X3R5cGUgZm9yIGFyYml0cmFyeSBwb3J0KDApICovCisJZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUoCisJCQlSRUdfUkQoYnAsIHNobWVtX2Jhc2UgKworCQkJICAgb2Zmc2V0b2Yoc3RydWN0IHNobWVtX3JlZ2lvbiwKKwkJCSAgICAgZGV2X2luZm8ucG9ydF9od19jb25maWdbMF0uZXh0ZXJuYWxfcGh5X2NvbmZpZykpKTsKKworCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgorCXsKKwkJcmMgPSBibngyeF84MDczX2NvbW1vbl9pbml0X3BoeShicCwgc2htZW1fYmFzZSk7CisJCWJyZWFrOworCX0KKworCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNzoKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjdfTk9DOgorCQlyYyA9IGJueDJ4Xzg3MjdfY29tbW9uX2luaXRfcGh5KGJwLCBzaG1lbV9iYXNlKTsKKwkJYnJlYWs7CisKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CisJCS8qIEdQSU8xIGFmZmVjdHMgYm90aCBwb3J0cywgc28gdGhlcmUncyBuZWVkIHRvIHB1bGwKKwkJaXQgZm9yIHNpbmdsZSBwb3J0IGFsb25lICovCisJCXJjID0gYm54MnhfODcyNl9jb21tb25faW5pdF9waHkoYnAsIHNobWVtX2Jhc2UpOworCQlicmVhazsKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODIzOgorCQlyYyA9IGJueDJ4Xzg0ODIzX2NvbW1vbl9pbml0X3BoeShicCwgc2htZW1fYmFzZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURQKE5FVElGX01TR19MSU5LLAorCQkJICJibngyeF9jb21tb25faW5pdF9waHk6IGV4dF9waHkgMHgleCBub3QgcmVxdWlyZWRcbiIsCisJCQkgZXh0X3BoeV90eXBlKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJjOworfQorCit2b2lkIGJueDJ4X3NmeDcxMDFfc3Bfc3dfcmVzZXQoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwgdTggcGh5X2FkZHIpCit7CisJdTE2IHZhbCwgY250OworCisJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxLAorCQkgICAgICBwaHlfYWRkciwKKwkJICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgIE1ESU9fUE1BX1JFR183MTAxX1JFU0VULCAmdmFsKTsKKworCWZvciAoY250ID0gMDsgY250IDwgMTA7IGNudCsrKSB7CisJCW1zbGVlcCg1MCk7CisJCS8qIFdyaXRlcyBhIHNlbGYtY2xlYXJpbmcgcmVzZXQgKi8KKwkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxLAorCQkJICAgICAgIHBoeV9hZGRyLAorCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgIE1ESU9fUE1BX1JFR183MTAxX1JFU0VULAorCQkJICAgICAgICh2YWwgfCAoMTw8MTUpKSk7CisJCS8qIFdhaXQgZm9yIGNsZWFyICovCisJCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCisJCQkgICAgICBwaHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgTURJT19QTUFfUkVHXzcxMDFfUkVTRVQsICZ2YWwpOworCisJCWlmICgodmFsICYgKDE8PDE1KSkgPT0gMCkKKwkJCWJyZWFrOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuaCBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2xpbmsuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9uZXQvYm54MnhfbGluay5oCnJlbmFtZSB0byBkcml2ZXJzL25ldC9ibngyeC9ibngyeF9saW5rLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X21haW4uYyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGVjMmIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbWFpbi5jCkBAIC0wLDAgKzEsODA0MCBAQAorLyogYm54MnhfbWFpbi5jOiBCcm9hZGNvbSBFdmVyZXN0IG5ldHdvcmsgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDEwIEJyb2FkY29tIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE1haW50YWluZWQgYnk6IEVpbG9uIEdyZWVuc3RlaW4gPGVpbG9uZ0Bicm9hZGNvbS5jb20+CisgKiBXcml0dGVuIGJ5OiBFbGllemVyIFRhbWlyCisgKiBCYXNlZCBvbiBjb2RlIGZyb20gTWljaGFlbCBDaGFuJ3MgYm54MiBkcml2ZXIKKyAqIFVEUCBDU1VNIGVycmF0YSB3b3JrYXJvdW5kIGJ5IEFyaWsgR2VuZGVsbWFuCisgKiBTbG93cGF0aCBhbmQgZmFzdHBhdGggcmV3b3JrIGJ5IFZsYWRpc2xhdiBab2xvdGFyb3YKKyAqIFN0YXRpc3RpY3MgYW5kIExpbmsgbWFuYWdlbWVudCBieSBZaXRjaGFrIEdlcnRuZXIKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+ICAvKiBmb3IgZGV2X2luZm8oKSAqLworI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjaW5jbHVkZSA8bmV0L2lwLmg+CisjaW5jbHVkZSA8bmV0L3RjcC5oPgorI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgorI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CisjaW5jbHVkZSA8bGludXgvemxpYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CisKKyNkZWZpbmUgQk5YMlhfTUFJTgorI2luY2x1ZGUgImJueDJ4LmgiCisjaW5jbHVkZSAiYm54MnhfaW5pdC5oIgorI2luY2x1ZGUgImJueDJ4X2luaXRfb3BzLmgiCisjaW5jbHVkZSAiYm54MnhfY21uLmgiCisKKworI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSAiYm54MnhfZndfZmlsZV9oZHIuaCIKKy8qIEZXIGZpbGVzICovCisjZGVmaW5lIEZXX0ZJTEVfVkVSU0lPTgkJCQkJXAorCV9fc3RyaW5naWZ5KEJDTV81NzEwX0ZXX01BSk9SX1ZFUlNJT04pICIuIglcCisJX19zdHJpbmdpZnkoQkNNXzU3MTBfRldfTUlOT1JfVkVSU0lPTikgIi4iCVwKKwlfX3N0cmluZ2lmeShCQ01fNTcxMF9GV19SRVZJU0lPTl9WRVJTSU9OKSAiLiIJXAorCV9fc3RyaW5naWZ5KEJDTV81NzEwX0ZXX0VOR0lORUVSSU5HX1ZFUlNJT04pCisjZGVmaW5lIEZXX0ZJTEVfTkFNRV9FMQkJImJueDJ4LWUxLSIgRldfRklMRV9WRVJTSU9OICIuZnciCisjZGVmaW5lIEZXX0ZJTEVfTkFNRV9FMUgJImJueDJ4LWUxaC0iIEZXX0ZJTEVfVkVSU0lPTiAiLmZ3IgorCisvKiBUaW1lIGluIGppZmZpZXMgYmVmb3JlIGNvbmNsdWRpbmcgdGhlIHRyYW5zbWl0dGVyIGlzIGh1bmcgKi8KKyNkZWZpbmUgVFhfVElNRU9VVAkJKDUqSFopCisKK3N0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KKwkiQnJvYWRjb20gTmV0WHRyZW1lIElJIDU3NzF4IDEwR2lnYWJpdCBFdGhlcm5ldCBEcml2ZXIgIgorCURSVl9NT0RVTEVfTkFNRSAiICIgRFJWX01PRFVMRV9WRVJTSU9OICIgKCIgRFJWX01PRFVMRV9SRUxEQVRFICIpXG4iOworCitNT0RVTEVfQVVUSE9SKCJFbGllemVyIFRhbWlyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkJyb2FkY29tIE5ldFh0cmVtZSBJSSBCQ001NzcxMC81NzcxMS81NzcxMUUgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihEUlZfTU9EVUxFX1ZFUlNJT04pOworTU9EVUxFX0ZJUk1XQVJFKEZXX0ZJTEVfTkFNRV9FMSk7CitNT0RVTEVfRklSTVdBUkUoRldfRklMRV9OQU1FX0UxSCk7CisKK3N0YXRpYyBpbnQgbXVsdGlfbW9kZSA9IDE7Cittb2R1bGVfcGFyYW0obXVsdGlfbW9kZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobXVsdGlfbW9kZSwgIiBNdWx0aSBxdWV1ZSBtb2RlICIKKwkJCSAgICAgIigwIERpc2FibGU7IDEgRW5hYmxlIChkZWZhdWx0KSkiKTsKKworc3RhdGljIGludCBudW1fcXVldWVzOworbW9kdWxlX3BhcmFtKG51bV9xdWV1ZXMsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG51bV9xdWV1ZXMsICIgTnVtYmVyIG9mIHF1ZXVlcyBmb3IgbXVsdGlfbW9kZT0xIgorCQkJCSIgKGRlZmF1bHQgaXMgYXMgYSBudW1iZXIgb2YgQ1BVcykiKTsKKworc3RhdGljIGludCBkaXNhYmxlX3RwYTsKK21vZHVsZV9wYXJhbShkaXNhYmxlX3RwYSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV90cGEsICIgRGlzYWJsZSB0aGUgVFBBIChMUk8pIGZlYXR1cmUiKTsKKworc3RhdGljIGludCBpbnRfbW9kZTsKK21vZHVsZV9wYXJhbShpbnRfbW9kZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW50X21vZGUsICIgRm9yY2UgaW50ZXJydXB0IG1vZGUgb3RoZXIgdGhlbiBNU0ktWCAiCisJCQkJIigxIElOVCN4OyAyIE1TSSkiKTsKKworc3RhdGljIGludCBkcm9wbGVzc19mYzsKK21vZHVsZV9wYXJhbShkcm9wbGVzc19mYywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZHJvcGxlc3NfZmMsICIgUGF1c2Ugb24gZXhoYXVzdGVkIGhvc3QgcmluZyIpOworCitzdGF0aWMgaW50IHBvbGw7Cittb2R1bGVfcGFyYW0ocG9sbCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocG9sbCwgIiBVc2UgcG9sbGluZyAoZm9yIGRlYnVnKSIpOworCitzdGF0aWMgaW50IG1ycnMgPSAtMTsKK21vZHVsZV9wYXJhbShtcnJzLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtcnJzLCAiIEZvcmNlIE1heCBSZWFkIFJlcSBTaXplICgwLi4zKSAoZm9yIGRlYnVnKSIpOworCitzdGF0aWMgaW50IGRlYnVnOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIiBEZWZhdWx0IGRlYnVnIG1zZ2xldmVsIik7CisKK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqYm54Mnhfd3E7CisKK2VudW0gYm54MnhfYm9hcmRfdHlwZSB7CisJQkNNNTc3MTAgPSAwLAorCUJDTTU3NzExID0gMSwKKwlCQ001NzcxMUUgPSAyLAorfTsKKworLyogaW5kZXhlZCBieSBib2FyZF90eXBlLCBhYm92ZSAqLworc3RhdGljIHN0cnVjdCB7CisJY2hhciAqbmFtZTsKK30gYm9hcmRfaW5mb1tdIF9fZGV2aW5pdGRhdGEgPSB7CisJeyAiQnJvYWRjb20gTmV0WHRyZW1lIElJIEJDTTU3NzEwIFhHYiIgfSwKKwl7ICJCcm9hZGNvbSBOZXRYdHJlbWUgSUkgQkNNNTc3MTEgWEdiIiB9LAorCXsgIkJyb2FkY29tIE5ldFh0cmVtZSBJSSBCQ001NzcxMUUgWEdiIiB9Cit9OworCisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShibngyeF9wY2lfdGJsKSA9IHsKKwl7IFBDSV9WREVWSUNFKEJST0FEQ09NLCBQQ0lfREVWSUNFX0lEX05YMl81NzcxMCksIEJDTTU3NzEwIH0sCisJeyBQQ0lfVkRFVklDRShCUk9BRENPTSwgUENJX0RFVklDRV9JRF9OWDJfNTc3MTEpLCBCQ001NzcxMSB9LAorCXsgUENJX1ZERVZJQ0UoQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfTlgyXzU3NzExRSksIEJDTTU3NzExRSB9LAorCXsgMCB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYm54MnhfcGNpX3RibCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEdlbmVyYWwgc2VydmljZSBmdW5jdGlvbnMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHVzZWQgb25seSBhdCBpbml0CisgKiBsb2NraW5nIGlzIGRvbmUgYnkgbWNwCisgKi8KK3ZvaWQgYm54MnhfcmVnX3dyX2luZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYWRkciwgdTMyIHZhbCkKK3sKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJwLT5wZGV2LCBQQ0lDRkdfR1JDX0FERFJFU1MsIGFkZHIpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnAtPnBkZXYsIFBDSUNGR19HUkNfREFUQSwgdmFsKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJwLT5wZGV2LCBQQ0lDRkdfR1JDX0FERFJFU1MsCisJCQkgICAgICAgUENJQ0ZHX1ZFTkRPUl9JRF9PRkZTRVQpOworfQorCitzdGF0aWMgdTMyIGJueDJ4X3JlZ19yZF9pbmQoc3RydWN0IGJueDJ4ICpicCwgdTMyIGFkZHIpCit7CisJdTMyIHZhbDsKKworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnAtPnBkZXYsIFBDSUNGR19HUkNfQUREUkVTUywgYWRkcik7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGJwLT5wZGV2LCBQQ0lDRkdfR1JDX0RBVEEsICZ2YWwpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnAtPnBkZXYsIFBDSUNGR19HUkNfQUREUkVTUywKKwkJCSAgICAgICBQQ0lDRkdfVkVORE9SX0lEX09GRlNFVCk7CisKKwlyZXR1cm4gdmFsOworfQorCitjb25zdCB1MzIgZG1hZV9yZWdfZ29fY1tdID0geworCURNQUVfUkVHX0dPX0MwLCBETUFFX1JFR19HT19DMSwgRE1BRV9SRUdfR09fQzIsIERNQUVfUkVHX0dPX0MzLAorCURNQUVfUkVHX0dPX0M0LCBETUFFX1JFR19HT19DNSwgRE1BRV9SRUdfR09fQzYsIERNQUVfUkVHX0dPX0M3LAorCURNQUVfUkVHX0dPX0M4LCBETUFFX1JFR19HT19DOSwgRE1BRV9SRUdfR09fQzEwLCBETUFFX1JFR19HT19DMTEsCisJRE1BRV9SRUdfR09fQzEyLCBETUFFX1JFR19HT19DMTMsIERNQUVfUkVHX0dPX0MxNCwgRE1BRV9SRUdfR09fQzE1Cit9OworCisvKiBjb3B5IGNvbW1hbmQgaW50byBETUFFIGNvbW1hbmQgbWVtb3J5IGFuZCBzZXQgRE1BRSBjb21tYW5kIGdvICovCit2b2lkIGJueDJ4X3Bvc3RfZG1hZShzdHJ1Y3QgYm54MnggKmJwLCBzdHJ1Y3QgZG1hZV9jb21tYW5kICpkbWFlLCBpbnQgaWR4KQoreworCXUzMiBjbWRfb2Zmc2V0OworCWludCBpOworCisJY21kX29mZnNldCA9IChETUFFX1JFR19DTURfTUVNICsgc2l6ZW9mKHN0cnVjdCBkbWFlX2NvbW1hbmQpICogaWR4KTsKKwlmb3IgKGkgPSAwOyBpIDwgKHNpemVvZihzdHJ1Y3QgZG1hZV9jb21tYW5kKS80KTsgaSsrKSB7CisJCVJFR19XUihicCwgY21kX29mZnNldCArIGkqNCwgKigoKHUzMiAqKWRtYWUpICsgaSkpOworCisJCURQKEJOWDJYX01TR19PRkYsICJETUFFIGNtZFslZF0uJWQgKDB4JTA4eCkgOiAweCUwOHhcbiIsCisJCSAgIGlkeCwgaSwgY21kX29mZnNldCArIGkqNCwgKigoKHUzMiAqKWRtYWUpICsgaSkpOworCX0KKwlSRUdfV1IoYnAsIGRtYWVfcmVnX2dvX2NbaWR4XSwgMSk7Cit9CisKK3ZvaWQgYm54Mnhfd3JpdGVfZG1hZShzdHJ1Y3QgYm54MnggKmJwLCBkbWFfYWRkcl90IGRtYV9hZGRyLCB1MzIgZHN0X2FkZHIsCisJCSAgICAgIHUzMiBsZW4zMikKK3sKKwlzdHJ1Y3QgZG1hZV9jb21tYW5kIGRtYWU7CisJdTMyICp3Yl9jb21wID0gYm54Mnhfc3AoYnAsIHdiX2NvbXApOworCWludCBjbnQgPSAyMDA7CisKKwlpZiAoIWJwLT5kbWFlX3JlYWR5KSB7CisJCXUzMiAqZGF0YSA9IGJueDJ4X3NwKGJwLCB3Yl9kYXRhWzBdKTsKKworCQlEUChCTlgyWF9NU0dfT0ZGLCAiRE1BRSBpcyBub3QgcmVhZHkgKGRzdF9hZGRyICUwOHggIGxlbjMyICVkKSIKKwkJICAgIiAgdXNpbmcgaW5kaXJlY3RcbiIsIGRzdF9hZGRyLCBsZW4zMik7CisJCWJueDJ4X2luaXRfaW5kX3dyKGJwLCBkc3RfYWRkciwgZGF0YSwgbGVuMzIpOworCQlyZXR1cm47CisJfQorCisJbWVtc2V0KCZkbWFlLCAwLCBzaXplb2Yoc3RydWN0IGRtYWVfY29tbWFuZCkpOworCisJZG1hZS5vcGNvZGUgPSAoRE1BRV9DTURfU1JDX1BDSSB8IERNQUVfQ01EX0RTVF9HUkMgfAorCQkgICAgICAgRE1BRV9DTURfQ19EU1RfUENJIHwgRE1BRV9DTURfQ19FTkFCTEUgfAorCQkgICAgICAgRE1BRV9DTURfU1JDX1JFU0VUIHwgRE1BRV9DTURfRFNUX1JFU0VUIHwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJICAgICAgIERNQUVfQ01EX0VORElBTklUWV9CX0RXX1NXQVAgfAorI2Vsc2UKKwkJICAgICAgIERNQUVfQ01EX0VORElBTklUWV9EV19TV0FQIHwKKyNlbmRpZgorCQkgICAgICAgKEJQX1BPUlQoYnApID8gRE1BRV9DTURfUE9SVF8xIDogRE1BRV9DTURfUE9SVF8wKSB8CisJCSAgICAgICAoQlBfRTFIVk4oYnApIDw8IERNQUVfQ01EX0UxSFZOX1NISUZUKSk7CisJZG1hZS5zcmNfYWRkcl9sbyA9IFU2NF9MTyhkbWFfYWRkcik7CisJZG1hZS5zcmNfYWRkcl9oaSA9IFU2NF9ISShkbWFfYWRkcik7CisJZG1hZS5kc3RfYWRkcl9sbyA9IGRzdF9hZGRyID4+IDI7CisJZG1hZS5kc3RfYWRkcl9oaSA9IDA7CisJZG1hZS5sZW4gPSBsZW4zMjsKKwlkbWFlLmNvbXBfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCB3Yl9jb21wKSk7CisJZG1hZS5jb21wX2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgd2JfY29tcCkpOworCWRtYWUuY29tcF92YWwgPSBETUFFX0NPTVBfVkFMOworCisJRFAoQk5YMlhfTVNHX09GRiwgIkRNQUU6IG9wY29kZSAweCUwOHhcbiIKKwkgICBEUF9MRVZFTCAic3JjX2FkZHIgIFsleDolMDh4XSAgbGVuIFslZCAqNF0gICIKKwkJICAgICJkc3RfYWRkciBbJXg6JTA4eCAoJTA4eCldXG4iCisJICAgRFBfTEVWRUwgImNvbXBfYWRkciBbJXg6JTA4eF0gIGNvbXBfdmFsIDB4JTA4eFxuIiwKKwkgICBkbWFlLm9wY29kZSwgZG1hZS5zcmNfYWRkcl9oaSwgZG1hZS5zcmNfYWRkcl9sbywKKwkgICBkbWFlLmxlbiwgZG1hZS5kc3RfYWRkcl9oaSwgZG1hZS5kc3RfYWRkcl9sbywgZHN0X2FkZHIsCisJICAgZG1hZS5jb21wX2FkZHJfaGksIGRtYWUuY29tcF9hZGRyX2xvLCBkbWFlLmNvbXBfdmFsKTsKKwlEUChCTlgyWF9NU0dfT0ZGLCAiZGF0YSBbMHglMDh4IDB4JTA4eCAweCUwOHggMHglMDh4XVxuIiwKKwkgICBicC0+c2xvd3BhdGgtPndiX2RhdGFbMF0sIGJwLT5zbG93cGF0aC0+d2JfZGF0YVsxXSwKKwkgICBicC0+c2xvd3BhdGgtPndiX2RhdGFbMl0sIGJwLT5zbG93cGF0aC0+d2JfZGF0YVszXSk7CisKKwltdXRleF9sb2NrKCZicC0+ZG1hZV9tdXRleCk7CisKKwkqd2JfY29tcCA9IDA7CisKKwlibngyeF9wb3N0X2RtYWUoYnAsICZkbWFlLCBJTklUX0RNQUVfQyhicCkpOworCisJdWRlbGF5KDUpOworCisJd2hpbGUgKCp3Yl9jb21wICE9IERNQUVfQ09NUF9WQUwpIHsKKwkJRFAoQk5YMlhfTVNHX09GRiwgIndiX2NvbXAgMHglMDh4XG4iLCAqd2JfY29tcCk7CisKKwkJaWYgKCFjbnQpIHsKKwkJCUJOWDJYX0VSUigiRE1BRSB0aW1lb3V0IVxuIik7CisJCQlicmVhazsKKwkJfQorCQljbnQtLTsKKwkJLyogYWRqdXN0IGRlbGF5IGZvciBlbXVsYXRpb24vRlBHQSAqLworCQlpZiAoQ0hJUF9SRVZfSVNfU0xPVyhicCkpCisJCQltc2xlZXAoMTAwKTsKKwkJZWxzZQorCQkJdWRlbGF5KDUpOworCX0KKworCW11dGV4X3VubG9jaygmYnAtPmRtYWVfbXV0ZXgpOworfQorCit2b2lkIGJueDJ4X3JlYWRfZG1hZShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgc3JjX2FkZHIsIHUzMiBsZW4zMikKK3sKKwlzdHJ1Y3QgZG1hZV9jb21tYW5kIGRtYWU7CisJdTMyICp3Yl9jb21wID0gYm54Mnhfc3AoYnAsIHdiX2NvbXApOworCWludCBjbnQgPSAyMDA7CisKKwlpZiAoIWJwLT5kbWFlX3JlYWR5KSB7CisJCXUzMiAqZGF0YSA9IGJueDJ4X3NwKGJwLCB3Yl9kYXRhWzBdKTsKKwkJaW50IGk7CisKKwkJRFAoQk5YMlhfTVNHX09GRiwgIkRNQUUgaXMgbm90IHJlYWR5IChzcmNfYWRkciAlMDh4ICBsZW4zMiAlZCkiCisJCSAgICIgIHVzaW5nIGluZGlyZWN0XG4iLCBzcmNfYWRkciwgbGVuMzIpOworCQlmb3IgKGkgPSAwOyBpIDwgbGVuMzI7IGkrKykKKwkJCWRhdGFbaV0gPSBibngyeF9yZWdfcmRfaW5kKGJwLCBzcmNfYWRkciArIGkqNCk7CisJCXJldHVybjsKKwl9CisKKwltZW1zZXQoJmRtYWUsIDAsIHNpemVvZihzdHJ1Y3QgZG1hZV9jb21tYW5kKSk7CisKKwlkbWFlLm9wY29kZSA9IChETUFFX0NNRF9TUkNfR1JDIHwgRE1BRV9DTURfRFNUX1BDSSB8CisJCSAgICAgICBETUFFX0NNRF9DX0RTVF9QQ0kgfCBETUFFX0NNRF9DX0VOQUJMRSB8CisJCSAgICAgICBETUFFX0NNRF9TUkNfUkVTRVQgfCBETUFFX0NNRF9EU1RfUkVTRVQgfAorI2lmZGVmIF9fQklHX0VORElBTgorCQkgICAgICAgRE1BRV9DTURfRU5ESUFOSVRZX0JfRFdfU1dBUCB8CisjZWxzZQorCQkgICAgICAgRE1BRV9DTURfRU5ESUFOSVRZX0RXX1NXQVAgfAorI2VuZGlmCisJCSAgICAgICAoQlBfUE9SVChicCkgPyBETUFFX0NNRF9QT1JUXzEgOiBETUFFX0NNRF9QT1JUXzApIHwKKwkJICAgICAgIChCUF9FMUhWTihicCkgPDwgRE1BRV9DTURfRTFIVk5fU0hJRlQpKTsKKwlkbWFlLnNyY19hZGRyX2xvID0gc3JjX2FkZHIgPj4gMjsKKwlkbWFlLnNyY19hZGRyX2hpID0gMDsKKwlkbWFlLmRzdF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIHdiX2RhdGEpKTsKKwlkbWFlLmRzdF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIHdiX2RhdGEpKTsKKwlkbWFlLmxlbiA9IGxlbjMyOworCWRtYWUuY29tcF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIHdiX2NvbXApKTsKKwlkbWFlLmNvbXBfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCB3Yl9jb21wKSk7CisJZG1hZS5jb21wX3ZhbCA9IERNQUVfQ09NUF9WQUw7CisKKwlEUChCTlgyWF9NU0dfT0ZGLCAiRE1BRTogb3Bjb2RlIDB4JTA4eFxuIgorCSAgIERQX0xFVkVMICJzcmNfYWRkciAgWyV4OiUwOHhdICBsZW4gWyVkICo0XSAgIgorCQkgICAgImRzdF9hZGRyIFsleDolMDh4ICglMDh4KV1cbiIKKwkgICBEUF9MRVZFTCAiY29tcF9hZGRyIFsleDolMDh4XSAgY29tcF92YWwgMHglMDh4XG4iLAorCSAgIGRtYWUub3Bjb2RlLCBkbWFlLnNyY19hZGRyX2hpLCBkbWFlLnNyY19hZGRyX2xvLAorCSAgIGRtYWUubGVuLCBkbWFlLmRzdF9hZGRyX2hpLCBkbWFlLmRzdF9hZGRyX2xvLCBzcmNfYWRkciwKKwkgICBkbWFlLmNvbXBfYWRkcl9oaSwgZG1hZS5jb21wX2FkZHJfbG8sIGRtYWUuY29tcF92YWwpOworCisJbXV0ZXhfbG9jaygmYnAtPmRtYWVfbXV0ZXgpOworCisJbWVtc2V0KGJueDJ4X3NwKGJwLCB3Yl9kYXRhWzBdKSwgMCwgc2l6ZW9mKHUzMikgKiA0KTsKKwkqd2JfY29tcCA9IDA7CisKKwlibngyeF9wb3N0X2RtYWUoYnAsICZkbWFlLCBJTklUX0RNQUVfQyhicCkpOworCisJdWRlbGF5KDUpOworCisJd2hpbGUgKCp3Yl9jb21wICE9IERNQUVfQ09NUF9WQUwpIHsKKworCQlpZiAoIWNudCkgeworCQkJQk5YMlhfRVJSKCJETUFFIHRpbWVvdXQhXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCWNudC0tOworCQkvKiBhZGp1c3QgZGVsYXkgZm9yIGVtdWxhdGlvbi9GUEdBICovCisJCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSkKKwkJCW1zbGVlcCgxMDApOworCQllbHNlCisJCQl1ZGVsYXkoNSk7CisJfQorCURQKEJOWDJYX01TR19PRkYsICJkYXRhIFsweCUwOHggMHglMDh4IDB4JTA4eCAweCUwOHhdXG4iLAorCSAgIGJwLT5zbG93cGF0aC0+d2JfZGF0YVswXSwgYnAtPnNsb3dwYXRoLT53Yl9kYXRhWzFdLAorCSAgIGJwLT5zbG93cGF0aC0+d2JfZGF0YVsyXSwgYnAtPnNsb3dwYXRoLT53Yl9kYXRhWzNdKTsKKworCW11dGV4X3VubG9jaygmYnAtPmRtYWVfbXV0ZXgpOworfQorCit2b2lkIGJueDJ4X3dyaXRlX2RtYWVfcGh5c19sZW4oc3RydWN0IGJueDJ4ICpicCwgZG1hX2FkZHJfdCBwaHlzX2FkZHIsCisJCQkgICAgICAgdTMyIGFkZHIsIHUzMiBsZW4pCit7CisJaW50IGRtYWVfd3JfbWF4ID0gRE1BRV9MRU4zMl9XUl9NQVgoYnApOworCWludCBvZmZzZXQgPSAwOworCisJd2hpbGUgKGxlbiA+IGRtYWVfd3JfbWF4KSB7CisJCWJueDJ4X3dyaXRlX2RtYWUoYnAsIHBoeXNfYWRkciArIG9mZnNldCwKKwkJCQkgYWRkciArIG9mZnNldCwgZG1hZV93cl9tYXgpOworCQlvZmZzZXQgKz0gZG1hZV93cl9tYXggKiA0OworCQlsZW4gLT0gZG1hZV93cl9tYXg7CisJfQorCisJYm54Mnhfd3JpdGVfZG1hZShicCwgcGh5c19hZGRyICsgb2Zmc2V0LCBhZGRyICsgb2Zmc2V0LCBsZW4pOworfQorCisvKiB1c2VkIG9ubHkgZm9yIHNsb3dwYXRoIHNvIG5vdCBpbmxpbmVkICovCitzdGF0aWMgdm9pZCBibngyeF93Yl93cihzdHJ1Y3QgYm54MnggKmJwLCBpbnQgcmVnLCB1MzIgdmFsX2hpLCB1MzIgdmFsX2xvKQoreworCXUzMiB3Yl93cml0ZVsyXTsKKworCXdiX3dyaXRlWzBdID0gdmFsX2hpOworCXdiX3dyaXRlWzFdID0gdmFsX2xvOworCVJFR19XUl9ETUFFKGJwLCByZWcsIHdiX3dyaXRlLCAyKTsKK30KKworI2lmZGVmIFVTRV9XQl9SRAorc3RhdGljIHU2NCBibngyeF93Yl9yZChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgcmVnKQoreworCXUzMiB3Yl9kYXRhWzJdOworCisJUkVHX1JEX0RNQUUoYnAsIHJlZywgd2JfZGF0YSwgMik7CisKKwlyZXR1cm4gSElMT19VNjQod2JfZGF0YVswXSwgd2JfZGF0YVsxXSk7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBibngyeF9tY19hc3NlcnQoc3RydWN0IGJueDJ4ICpicCkKK3sKKwljaGFyIGxhc3RfaWR4OworCWludCBpLCByYyA9IDA7CisJdTMyIHJvdzAsIHJvdzEsIHJvdzIsIHJvdzM7CisKKwkvKiBYU1RPUk0gKi8KKwlsYXN0X2lkeCA9IFJFR19SRDgoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCisJCQkgICBYU1RPUk1fQVNTRVJUX0xJU1RfSU5ERVhfT0ZGU0VUKTsKKwlpZiAobGFzdF9pZHgpCisJCUJOWDJYX0VSUigiWFNUT1JNX0FTU0VSVF9MSVNUX0lOREVYIDB4JXhcbiIsIGxhc3RfaWR4KTsKKworCS8qIHByaW50IHRoZSBhc3NlcnRzICovCisJZm9yIChpID0gMDsgaSA8IFNUUk9NX0FTU0VSVF9BUlJBWV9TSVpFOyBpKyspIHsKKworCQlyb3cwID0gUkVHX1JEKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKworCQkJICAgICAgWFNUT1JNX0FTU0VSVF9MSVNUX09GRlNFVChpKSk7CisJCXJvdzEgPSBSRUdfUkQoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCisJCQkgICAgICBYU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGkpICsgNCk7CisJCXJvdzIgPSBSRUdfUkQoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCisJCQkgICAgICBYU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGkpICsgOCk7CisJCXJvdzMgPSBSRUdfUkQoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCisJCQkgICAgICBYU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGkpICsgMTIpOworCisJCWlmIChyb3cwICE9IENPTU1PTl9BU01fSU5WQUxJRF9BU1NFUlRfT1BDT0RFKSB7CisJCQlCTlgyWF9FUlIoIlhTVE9STV9BU1NFUlRfSU5ERVggMHgleCA9IDB4JTA4eCIKKwkJCQkgICIgMHglMDh4IDB4JTA4eCAweCUwOHhcbiIsCisJCQkJICBpLCByb3czLCByb3cyLCByb3cxLCByb3cwKTsKKwkJCXJjKys7CisJCX0gZWxzZSB7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIFRTVE9STSAqLworCWxhc3RfaWR4ID0gUkVHX1JEOChicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKKwkJCSAgIFRTVE9STV9BU1NFUlRfTElTVF9JTkRFWF9PRkZTRVQpOworCWlmIChsYXN0X2lkeCkKKwkJQk5YMlhfRVJSKCJUU1RPUk1fQVNTRVJUX0xJU1RfSU5ERVggMHgleFxuIiwgbGFzdF9pZHgpOworCisJLyogcHJpbnQgdGhlIGFzc2VydHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgU1RST01fQVNTRVJUX0FSUkFZX1NJWkU7IGkrKykgeworCisJCXJvdzAgPSBSRUdfUkQoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCisJCQkgICAgICBUU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGkpKTsKKwkJcm93MSA9IFJFR19SRChicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKKwkJCSAgICAgIFRTVE9STV9BU1NFUlRfTElTVF9PRkZTRVQoaSkgKyA0KTsKKwkJcm93MiA9IFJFR19SRChicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKKwkJCSAgICAgIFRTVE9STV9BU1NFUlRfTElTVF9PRkZTRVQoaSkgKyA4KTsKKwkJcm93MyA9IFJFR19SRChicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKKwkJCSAgICAgIFRTVE9STV9BU1NFUlRfTElTVF9PRkZTRVQoaSkgKyAxMik7CisKKwkJaWYgKHJvdzAgIT0gQ09NTU9OX0FTTV9JTlZBTElEX0FTU0VSVF9PUENPREUpIHsKKwkJCUJOWDJYX0VSUigiVFNUT1JNX0FTU0VSVF9JTkRFWCAweCV4ID0gMHglMDh4IgorCQkJCSAgIiAweCUwOHggMHglMDh4IDB4JTA4eFxuIiwKKwkJCQkgIGksIHJvdzMsIHJvdzIsIHJvdzEsIHJvdzApOworCQkJcmMrKzsKKwkJfSBlbHNlIHsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogQ1NUT1JNICovCisJbGFzdF9pZHggPSBSRUdfUkQ4KGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKworCQkJICAgQ1NUT1JNX0FTU0VSVF9MSVNUX0lOREVYX09GRlNFVCk7CisJaWYgKGxhc3RfaWR4KQorCQlCTlgyWF9FUlIoIkNTVE9STV9BU1NFUlRfTElTVF9JTkRFWCAweCV4XG4iLCBsYXN0X2lkeCk7CisKKwkvKiBwcmludCB0aGUgYXNzZXJ0cyAqLworCWZvciAoaSA9IDA7IGkgPCBTVFJPTV9BU1NFUlRfQVJSQVlfU0laRTsgaSsrKSB7CisKKwkJcm93MCA9IFJFR19SRChicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKKwkJCSAgICAgIENTVE9STV9BU1NFUlRfTElTVF9PRkZTRVQoaSkpOworCQlyb3cxID0gUkVHX1JEKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKworCQkJICAgICAgQ1NUT1JNX0FTU0VSVF9MSVNUX09GRlNFVChpKSArIDQpOworCQlyb3cyID0gUkVHX1JEKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKworCQkJICAgICAgQ1NUT1JNX0FTU0VSVF9MSVNUX09GRlNFVChpKSArIDgpOworCQlyb3czID0gUkVHX1JEKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKworCQkJICAgICAgQ1NUT1JNX0FTU0VSVF9MSVNUX09GRlNFVChpKSArIDEyKTsKKworCQlpZiAocm93MCAhPSBDT01NT05fQVNNX0lOVkFMSURfQVNTRVJUX09QQ09ERSkgeworCQkJQk5YMlhfRVJSKCJDU1RPUk1fQVNTRVJUX0lOREVYIDB4JXggPSAweCUwOHgiCisJCQkJICAiIDB4JTA4eCAweCUwOHggMHglMDh4XG4iLAorCQkJCSAgaSwgcm93Mywgcm93Miwgcm93MSwgcm93MCk7CisJCQlyYysrOworCQl9IGVsc2UgeworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBVU1RPUk0gKi8KKwlsYXN0X2lkeCA9IFJFR19SRDgoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCisJCQkgICBVU1RPUk1fQVNTRVJUX0xJU1RfSU5ERVhfT0ZGU0VUKTsKKwlpZiAobGFzdF9pZHgpCisJCUJOWDJYX0VSUigiVVNUT1JNX0FTU0VSVF9MSVNUX0lOREVYIDB4JXhcbiIsIGxhc3RfaWR4KTsKKworCS8qIHByaW50IHRoZSBhc3NlcnRzICovCisJZm9yIChpID0gMDsgaSA8IFNUUk9NX0FTU0VSVF9BUlJBWV9TSVpFOyBpKyspIHsKKworCQlyb3cwID0gUkVHX1JEKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKworCQkJICAgICAgVVNUT1JNX0FTU0VSVF9MSVNUX09GRlNFVChpKSk7CisJCXJvdzEgPSBSRUdfUkQoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCisJCQkgICAgICBVU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGkpICsgNCk7CisJCXJvdzIgPSBSRUdfUkQoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCisJCQkgICAgICBVU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGkpICsgOCk7CisJCXJvdzMgPSBSRUdfUkQoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCisJCQkgICAgICBVU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGkpICsgMTIpOworCisJCWlmIChyb3cwICE9IENPTU1PTl9BU01fSU5WQUxJRF9BU1NFUlRfT1BDT0RFKSB7CisJCQlCTlgyWF9FUlIoIlVTVE9STV9BU1NFUlRfSU5ERVggMHgleCA9IDB4JTA4eCIKKwkJCQkgICIgMHglMDh4IDB4JTA4eCAweCUwOHhcbiIsCisJCQkJICBpLCByb3czLCByb3cyLCByb3cxLCByb3cwKTsKKwkJCXJjKys7CisJCX0gZWxzZSB7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgYm54MnhfZndfZHVtcChzdHJ1Y3QgYm54MnggKmJwKQoreworCXUzMiBhZGRyOworCXUzMiBtYXJrLCBvZmZzZXQ7CisJX19iZTMyIGRhdGFbOV07CisJaW50IHdvcmQ7CisKKwlpZiAoQlBfTk9NQ1AoYnApKSB7CisJCUJOWDJYX0VSUigiTk8gTUNQIC0gY2FuIG5vdCBkdW1wXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWFkZHIgPSBicC0+Y29tbW9uLnNobWVtX2Jhc2UgLSAweDA4MDAgKyA0OworCW1hcmsgPSBSRUdfUkQoYnAsIGFkZHIpOworCW1hcmsgPSBNQ1BfUkVHX01DUFJfU0NSQVRDSCArICgobWFyayArIDB4MykgJiB+MHgzKSAtIDB4MDgwMDAwMDA7CisJcHJfZXJyKCJiZWdpbiBmdyBkdW1wIChtYXJrIDB4JXgpXG4iLCBtYXJrKTsKKworCXByX2VycigiIik7CisJZm9yIChvZmZzZXQgPSBtYXJrOyBvZmZzZXQgPD0gYnAtPmNvbW1vbi5zaG1lbV9iYXNlOyBvZmZzZXQgKz0gMHg4KjQpIHsKKwkJZm9yICh3b3JkID0gMDsgd29yZCA8IDg7IHdvcmQrKykKKwkJCWRhdGFbd29yZF0gPSBodG9ubChSRUdfUkQoYnAsIG9mZnNldCArIDQqd29yZCkpOworCQlkYXRhWzhdID0gMHgwOworCQlwcl9jb250KCIlcyIsIChjaGFyICopZGF0YSk7CisJfQorCWZvciAob2Zmc2V0ID0gYWRkciArIDQ7IG9mZnNldCA8PSBtYXJrOyBvZmZzZXQgKz0gMHg4KjQpIHsKKwkJZm9yICh3b3JkID0gMDsgd29yZCA8IDg7IHdvcmQrKykKKwkJCWRhdGFbd29yZF0gPSBodG9ubChSRUdfUkQoYnAsIG9mZnNldCArIDQqd29yZCkpOworCQlkYXRhWzhdID0gMHgwOworCQlwcl9jb250KCIlcyIsIChjaGFyICopZGF0YSk7CisJfQorCXByX2VycigiZW5kIG9mIGZ3IGR1bXBcbiIpOworfQorCit2b2lkIGJueDJ4X3BhbmljX2R1bXAoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgaTsKKwl1MTYgaiwgc3RhcnQsIGVuZDsKKworCWJwLT5zdGF0c19zdGF0ZSA9IFNUQVRTX1NUQVRFX0RJU0FCTEVEOworCURQKEJOWDJYX01TR19TVEFUUywgInN0YXRzX3N0YXRlIC0gRElTQUJMRURcbiIpOworCisJQk5YMlhfRVJSKCJiZWdpbiBjcmFzaCBkdW1wIC0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKworCS8qIEluZGljZXMgKi8KKwkvKiBDb21tb24gKi8KKwlCTlgyWF9FUlIoImRlZl9jX2lkeCgweCV4KSAgZGVmX3VfaWR4KDB4JXgpICBkZWZfeF9pZHgoMHgleCkiCisJCSAgIiAgZGVmX3RfaWR4KDB4JXgpICBkZWZfYXR0X2lkeCgweCV4KSAgYXR0bl9zdGF0ZSgweCV4KSIKKwkJICAiICBzcHFfcHJvZF9pZHgoMHgleClcbiIsCisJCSAgYnAtPmRlZl9jX2lkeCwgYnAtPmRlZl91X2lkeCwgYnAtPmRlZl94X2lkeCwgYnAtPmRlZl90X2lkeCwKKwkJICBicC0+ZGVmX2F0dF9pZHgsIGJwLT5hdHRuX3N0YXRlLCBicC0+c3BxX3Byb2RfaWR4KTsKKworCS8qIFJ4ICovCisJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CisKKwkJQk5YMlhfRVJSKCJmcCVkOiByeF9iZF9wcm9kKDB4JXgpICByeF9iZF9jb25zKDB4JXgpIgorCQkJICAiICAqcnhfYmRfY29uc19zYigweCV4KSAgcnhfY29tcF9wcm9kKDB4JXgpIgorCQkJICAiICByeF9jb21wX2NvbnMoMHgleCkgICpyeF9jb25zX3NiKDB4JXgpXG4iLAorCQkJICBpLCBmcC0+cnhfYmRfcHJvZCwgZnAtPnJ4X2JkX2NvbnMsCisJCQkgIGxlMTZfdG9fY3B1KCpmcC0+cnhfYmRfY29uc19zYiksIGZwLT5yeF9jb21wX3Byb2QsCisJCQkgIGZwLT5yeF9jb21wX2NvbnMsIGxlMTZfdG9fY3B1KCpmcC0+cnhfY29uc19zYikpOworCQlCTlgyWF9FUlIoIiAgICAgcnhfc2dlX3Byb2QoMHgleCkgIGxhc3RfbWF4X3NnZSgweCV4KSIKKwkJCSAgIiAgZnBfdV9pZHgoMHgleCkgKnNiX3VfaWR4KDB4JXgpXG4iLAorCQkJICBmcC0+cnhfc2dlX3Byb2QsIGZwLT5sYXN0X21heF9zZ2UsCisJCQkgIGxlMTZfdG9fY3B1KGZwLT5mcF91X2lkeCksCisJCQkgIGZwLT5zdGF0dXNfYmxrLT51X3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgpOworCX0KKworCS8qIFR4ICovCisJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CisKKwkJQk5YMlhfRVJSKCJmcCVkOiB0eF9wa3RfcHJvZCgweCV4KSAgdHhfcGt0X2NvbnMoMHgleCkiCisJCQkgICIgIHR4X2JkX3Byb2QoMHgleCkgIHR4X2JkX2NvbnMoMHgleCkiCisJCQkgICIgICp0eF9jb25zX3NiKDB4JXgpXG4iLAorCQkJICBpLCBmcC0+dHhfcGt0X3Byb2QsIGZwLT50eF9wa3RfY29ucywgZnAtPnR4X2JkX3Byb2QsCisJCQkgIGZwLT50eF9iZF9jb25zLCBsZTE2X3RvX2NwdSgqZnAtPnR4X2NvbnNfc2IpKTsKKwkJQk5YMlhfRVJSKCIgICAgIGZwX2NfaWR4KDB4JXgpICAqc2JfY19pZHgoMHgleCkiCisJCQkgICIgIHR4X2RiX3Byb2QoMHgleClcbiIsIGxlMTZfdG9fY3B1KGZwLT5mcF9jX2lkeCksCisJCQkgIGZwLT5zdGF0dXNfYmxrLT5jX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgsCisJCQkgIGZwLT50eF9kYi5kYXRhLnByb2QpOworCX0KKworCS8qIFJpbmdzICovCisJLyogUnggKi8KKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKKworCQlzdGFydCA9IFJYX0JEKGxlMTZfdG9fY3B1KCpmcC0+cnhfY29uc19zYikgLSAxMCk7CisJCWVuZCA9IFJYX0JEKGxlMTZfdG9fY3B1KCpmcC0+cnhfY29uc19zYikgKyA1MDMpOworCQlmb3IgKGogPSBzdGFydDsgaiAhPSBlbmQ7IGogPSBSWF9CRChqICsgMSkpIHsKKwkJCXUzMiAqcnhfYmQgPSAodTMyICopJmZwLT5yeF9kZXNjX3Jpbmdbal07CisJCQlzdHJ1Y3Qgc3dfcnhfYmQgKnN3X2JkID0gJmZwLT5yeF9idWZfcmluZ1tqXTsKKworCQkJQk5YMlhfRVJSKCJmcCVkOiByeF9iZFsleF09WyV4OiV4XSAgc3dfYmQ9WyVwXVxuIiwKKwkJCQkgIGksIGosIHJ4X2JkWzFdLCByeF9iZFswXSwgc3dfYmQtPnNrYik7CisJCX0KKworCQlzdGFydCA9IFJYX1NHRShmcC0+cnhfc2dlX3Byb2QpOworCQllbmQgPSBSWF9TR0UoZnAtPmxhc3RfbWF4X3NnZSk7CisJCWZvciAoaiA9IHN0YXJ0OyBqICE9IGVuZDsgaiA9IFJYX1NHRShqICsgMSkpIHsKKwkJCXUzMiAqcnhfc2dlID0gKHUzMiAqKSZmcC0+cnhfc2dlX3Jpbmdbal07CisJCQlzdHJ1Y3Qgc3dfcnhfcGFnZSAqc3dfcGFnZSA9ICZmcC0+cnhfcGFnZV9yaW5nW2pdOworCisJCQlCTlgyWF9FUlIoImZwJWQ6IHJ4X3NnZVsleF09WyV4OiV4XSAgc3dfcGFnZT1bJXBdXG4iLAorCQkJCSAgaSwgaiwgcnhfc2dlWzFdLCByeF9zZ2VbMF0sIHN3X3BhZ2UtPnBhZ2UpOworCQl9CisKKwkJc3RhcnQgPSBSQ1FfQkQoZnAtPnJ4X2NvbXBfY29ucyAtIDEwKTsKKwkJZW5kID0gUkNRX0JEKGZwLT5yeF9jb21wX2NvbnMgKyA1MDMpOworCQlmb3IgKGogPSBzdGFydDsgaiAhPSBlbmQ7IGogPSBSQ1FfQkQoaiArIDEpKSB7CisJCQl1MzIgKmNxZSA9ICh1MzIgKikmZnAtPnJ4X2NvbXBfcmluZ1tqXTsKKworCQkJQk5YMlhfRVJSKCJmcCVkOiBjcWVbJXhdPVsleDoleDoleDoleF1cbiIsCisJCQkJICBpLCBqLCBjcWVbMF0sIGNxZVsxXSwgY3FlWzJdLCBjcWVbM10pOworCQl9CisJfQorCisJLyogVHggKi8KKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKKworCQlzdGFydCA9IFRYX0JEKGxlMTZfdG9fY3B1KCpmcC0+dHhfY29uc19zYikgLSAxMCk7CisJCWVuZCA9IFRYX0JEKGxlMTZfdG9fY3B1KCpmcC0+dHhfY29uc19zYikgKyAyNDUpOworCQlmb3IgKGogPSBzdGFydDsgaiAhPSBlbmQ7IGogPSBUWF9CRChqICsgMSkpIHsKKwkJCXN0cnVjdCBzd190eF9iZCAqc3dfYmQgPSAmZnAtPnR4X2J1Zl9yaW5nW2pdOworCisJCQlCTlgyWF9FUlIoImZwJWQ6IHBhY2tldFsleF09WyVwLCV4XVxuIiwKKwkJCQkgIGksIGosIHN3X2JkLT5za2IsIHN3X2JkLT5maXJzdF9iZCk7CisJCX0KKworCQlzdGFydCA9IFRYX0JEKGZwLT50eF9iZF9jb25zIC0gMTApOworCQllbmQgPSBUWF9CRChmcC0+dHhfYmRfY29ucyArIDI1NCk7CisJCWZvciAoaiA9IHN0YXJ0OyBqICE9IGVuZDsgaiA9IFRYX0JEKGogKyAxKSkgeworCQkJdTMyICp0eF9iZCA9ICh1MzIgKikmZnAtPnR4X2Rlc2NfcmluZ1tqXTsKKworCQkJQk5YMlhfRVJSKCJmcCVkOiB0eF9iZFsleF09WyV4OiV4OiV4OiV4XVxuIiwKKwkJCQkgIGksIGosIHR4X2JkWzBdLCB0eF9iZFsxXSwgdHhfYmRbMl0sIHR4X2JkWzNdKTsKKwkJfQorCX0KKworCWJueDJ4X2Z3X2R1bXAoYnApOworCWJueDJ4X21jX2Fzc2VydChicCk7CisJQk5YMlhfRVJSKCJlbmQgY3Jhc2ggZHVtcCAtLS0tLS0tLS0tLS0tLS0tLVxuIik7Cit9CisKK3ZvaWQgYm54MnhfaW50X2VuYWJsZShzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJdTMyIGFkZHIgPSBwb3J0ID8gSENfUkVHX0NPTkZJR18xIDogSENfUkVHX0NPTkZJR18wOworCXUzMiB2YWwgPSBSRUdfUkQoYnAsIGFkZHIpOworCWludCBtc2l4ID0gKGJwLT5mbGFncyAmIFVTSU5HX01TSVhfRkxBRykgPyAxIDogMDsKKwlpbnQgbXNpID0gKGJwLT5mbGFncyAmIFVTSU5HX01TSV9GTEFHKSA/IDEgOiAwOworCisJaWYgKG1zaXgpIHsKKwkJdmFsICY9IH4oSENfQ09ORklHXzBfUkVHX1NJTkdMRV9JU1JfRU5fMCB8CisJCQkgSENfQ09ORklHXzBfUkVHX0lOVF9MSU5FX0VOXzApOworCQl2YWwgfD0gKEhDX0NPTkZJR18wX1JFR19NU0lfTVNJWF9JTlRfRU5fMCB8CisJCQlIQ19DT05GSUdfMF9SRUdfQVRUTl9CSVRfRU5fMCk7CisJfSBlbHNlIGlmIChtc2kpIHsKKwkJdmFsICY9IH5IQ19DT05GSUdfMF9SRUdfSU5UX0xJTkVfRU5fMDsKKwkJdmFsIHw9IChIQ19DT05GSUdfMF9SRUdfU0lOR0xFX0lTUl9FTl8wIHwKKwkJCUhDX0NPTkZJR18wX1JFR19NU0lfTVNJWF9JTlRfRU5fMCB8CisJCQlIQ19DT05GSUdfMF9SRUdfQVRUTl9CSVRfRU5fMCk7CisJfSBlbHNlIHsKKwkJdmFsIHw9IChIQ19DT05GSUdfMF9SRUdfU0lOR0xFX0lTUl9FTl8wIHwKKwkJCUhDX0NPTkZJR18wX1JFR19NU0lfTVNJWF9JTlRfRU5fMCB8CisJCQlIQ19DT05GSUdfMF9SRUdfSU5UX0xJTkVfRU5fMCB8CisJCQlIQ19DT05GSUdfMF9SRUdfQVRUTl9CSVRfRU5fMCk7CisKKwkJRFAoTkVUSUZfTVNHX0lOVFIsICJ3cml0ZSAleCB0byBIQyAlZCAoYWRkciAweCV4KVxuIiwKKwkJICAgdmFsLCBwb3J0LCBhZGRyKTsKKworCQlSRUdfV1IoYnAsIGFkZHIsIHZhbCk7CisKKwkJdmFsICY9IH5IQ19DT05GSUdfMF9SRUdfTVNJX01TSVhfSU5UX0VOXzA7CisJfQorCisJRFAoTkVUSUZfTVNHX0lOVFIsICJ3cml0ZSAleCB0byBIQyAlZCAoYWRkciAweCV4KSAgbW9kZSAlc1xuIiwKKwkgICB2YWwsIHBvcnQsIGFkZHIsIChtc2l4ID8gIk1TSS1YIiA6IChtc2kgPyAiTVNJIiA6ICJJTlR4IikpKTsKKworCVJFR19XUihicCwgYWRkciwgdmFsKTsKKwkvKgorCSAqIEVuc3VyZSB0aGF0IEhDX0NPTkZJRyBpcyB3cml0dGVuIGJlZm9yZSBsZWFkaW5nL3RyYWlsaW5nIGVkZ2UgY29uZmlnCisJICovCisJbW1pb3diKCk7CisJYmFycmllcigpOworCisJaWYgKENISVBfSVNfRTFIKGJwKSkgeworCQkvKiBpbml0IGxlYWRpbmcvdHJhaWxpbmcgZWRnZSAqLworCQlpZiAoSVNfRTFITUYoYnApKSB7CisJCQl2YWwgPSAoMHhlZTBmIHwgKDEgPDwgKEJQX0UxSFZOKGJwKSArIDQpKSk7CisJCQlpZiAoYnAtPnBvcnQucG1mKQorCQkJCS8qIGVuYWJsZSBuaWcgYW5kIGdwaW8zIGF0dGVudGlvbiAqLworCQkJCXZhbCB8PSAweDExMDA7CisJCX0gZWxzZQorCQkJdmFsID0gMHhmZmZmOworCisJCVJFR19XUihicCwgSENfUkVHX1RSQUlMSU5HX0VER0VfMCArIHBvcnQqOCwgdmFsKTsKKwkJUkVHX1dSKGJwLCBIQ19SRUdfTEVBRElOR19FREdFXzAgKyBwb3J0KjgsIHZhbCk7CisJfQorCisJLyogTWFrZSBzdXJlIHRoYXQgaW50ZXJydXB0cyBhcmUgaW5kZWVkIGVuYWJsZWQgZnJvbSBoZXJlIG9uICovCisJbW1pb3diKCk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2ludF9kaXNhYmxlKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwl1MzIgYWRkciA9IHBvcnQgPyBIQ19SRUdfQ09ORklHXzEgOiBIQ19SRUdfQ09ORklHXzA7CisJdTMyIHZhbCA9IFJFR19SRChicCwgYWRkcik7CisKKwl2YWwgJj0gfihIQ19DT05GSUdfMF9SRUdfU0lOR0xFX0lTUl9FTl8wIHwKKwkJIEhDX0NPTkZJR18wX1JFR19NU0lfTVNJWF9JTlRfRU5fMCB8CisJCSBIQ19DT05GSUdfMF9SRUdfSU5UX0xJTkVfRU5fMCB8CisJCSBIQ19DT05GSUdfMF9SRUdfQVRUTl9CSVRfRU5fMCk7CisKKwlEUChORVRJRl9NU0dfSU5UUiwgIndyaXRlICV4IHRvIEhDICVkIChhZGRyIDB4JXgpXG4iLAorCSAgIHZhbCwgcG9ydCwgYWRkcik7CisKKwkvKiBmbHVzaCBhbGwgb3V0c3RhbmRpbmcgd3JpdGVzICovCisJbW1pb3diKCk7CisKKwlSRUdfV1IoYnAsIGFkZHIsIHZhbCk7CisJaWYgKFJFR19SRChicCwgYWRkcikgIT0gdmFsKQorCQlCTlgyWF9FUlIoIkJVRyEgcHJvcGVyIHZhbCBub3QgcmVhZCBmcm9tIElHVSFcbiIpOworfQorCit2b2lkIGJueDJ4X2ludF9kaXNhYmxlX3N5bmMoc3RydWN0IGJueDJ4ICpicCwgaW50IGRpc2FibGVfaHcpCit7CisJaW50IG1zaXggPSAoYnAtPmZsYWdzICYgVVNJTkdfTVNJWF9GTEFHKSA/IDEgOiAwOworCWludCBpLCBvZmZzZXQ7CisKKwkvKiBkaXNhYmxlIGludGVycnVwdCBoYW5kbGluZyAqLworCWF0b21pY19pbmMoJmJwLT5pbnRyX3NlbSk7CisJc21wX3dtYigpOyAvKiBFbnN1cmUgdGhhdCBicC0+aW50cl9zZW0gdXBkYXRlIGlzIFNNUC1zYWZlICovCisKKwlpZiAoZGlzYWJsZV9odykKKwkJLyogcHJldmVudCB0aGUgSFcgZnJvbSBzZW5kaW5nIGludGVycnVwdHMgKi8KKwkJYm54MnhfaW50X2Rpc2FibGUoYnApOworCisJLyogbWFrZSBzdXJlIGFsbCBJU1JzIGFyZSBkb25lICovCisJaWYgKG1zaXgpIHsKKwkJc3luY2hyb25pemVfaXJxKGJwLT5tc2l4X3RhYmxlWzBdLnZlY3Rvcik7CisJCW9mZnNldCA9IDE7CisjaWZkZWYgQkNNX0NOSUMKKwkJb2Zmc2V0Kys7CisjZW5kaWYKKwkJZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJCQlzeW5jaHJvbml6ZV9pcnEoYnAtPm1zaXhfdGFibGVbaSArIG9mZnNldF0udmVjdG9yKTsKKwl9IGVsc2UKKwkJc3luY2hyb25pemVfaXJxKGJwLT5wZGV2LT5pcnEpOworCisJLyogbWFrZSBzdXJlIHNwX3Rhc2sgaXMgbm90IHJ1bm5pbmcgKi8KKwljYW5jZWxfZGVsYXllZF93b3JrKCZicC0+c3BfdGFzayk7CisJZmx1c2hfd29ya3F1ZXVlKGJueDJ4X3dxKTsKK30KKworLyogZmFzdCBwYXRoICovCisKKy8qCisgKiBHZW5lcmFsIHNlcnZpY2UgZnVuY3Rpb25zCisgKi8KKworLyogUmV0dXJuIHRydWUgaWYgc3VjY2VlZGVkIHRvIGFjcXVpcmUgdGhlIGxvY2sgKi8KK3N0YXRpYyBib29sIGJueDJ4X3RyeWxvY2tfaHdfbG9jayhzdHJ1Y3QgYm54MnggKmJwLCB1MzIgcmVzb3VyY2UpCit7CisJdTMyIGxvY2tfc3RhdHVzOworCXUzMiByZXNvdXJjZV9iaXQgPSAoMSA8PCByZXNvdXJjZSk7CisJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKKwl1MzIgaHdfbG9ja19jb250cm9sX3JlZzsKKworCURQKE5FVElGX01TR19IVywgIlRyeWluZyB0byB0YWtlIGEgbG9jayBvbiByZXNvdXJjZSAlZFxuIiwgcmVzb3VyY2UpOworCisJLyogVmFsaWRhdGluZyB0aGF0IHRoZSByZXNvdXJjZSBpcyB3aXRoaW4gcmFuZ2UgKi8KKwlpZiAocmVzb3VyY2UgPiBIV19MT0NLX01BWF9SRVNPVVJDRV9WQUxVRSkgeworCQlEUChORVRJRl9NU0dfSFcsCisJCSAgICJyZXNvdXJjZSgweCV4KSA+IEhXX0xPQ0tfTUFYX1JFU09VUkNFX1ZBTFVFKDB4JXgpXG4iLAorCQkgICByZXNvdXJjZSwgSFdfTE9DS19NQVhfUkVTT1VSQ0VfVkFMVUUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZnVuYyA8PSA1KQorCQlod19sb2NrX2NvbnRyb2xfcmVnID0gKE1JU0NfUkVHX0RSSVZFUl9DT05UUk9MXzEgKyBmdW5jKjgpOworCWVsc2UKKwkJaHdfbG9ja19jb250cm9sX3JlZyA9CisJCQkJKE1JU0NfUkVHX0RSSVZFUl9DT05UUk9MXzcgKyAoZnVuYyAtIDYpKjgpOworCisJLyogVHJ5IHRvIGFjcXVpcmUgdGhlIGxvY2sgKi8KKwlSRUdfV1IoYnAsIGh3X2xvY2tfY29udHJvbF9yZWcgKyA0LCByZXNvdXJjZV9iaXQpOworCWxvY2tfc3RhdHVzID0gUkVHX1JEKGJwLCBod19sb2NrX2NvbnRyb2xfcmVnKTsKKwlpZiAobG9ja19zdGF0dXMgJiByZXNvdXJjZV9iaXQpCisJCXJldHVybiB0cnVlOworCisJRFAoTkVUSUZfTVNHX0hXLCAiRmFpbGVkIHRvIGdldCBhIGxvY2sgb24gcmVzb3VyY2UgJWRcbiIsIHJlc291cmNlKTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKKworI2lmZGVmIEJDTV9DTklDCitzdGF0aWMgdm9pZCBibngyeF9jbmljX2NmY19jb21wKHN0cnVjdCBibngyeCAqYnAsIGludCBjaWQpOworI2VuZGlmCisKK3ZvaWQgYm54Mnhfc3BfZXZlbnQoc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCwKKwkJCSAgIHVuaW9uIGV0aF9yeF9jcWUgKnJyX2NxZSkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gZnAtPmJwOworCWludCBjaWQgPSBTV19DSUQocnJfY3FlLT5yYW1yb2RfY3FlLmNvbm5fYW5kX2NtZF9kYXRhKTsKKwlpbnQgY29tbWFuZCA9IENRRV9DTUQocnJfY3FlLT5yYW1yb2RfY3FlLmNvbm5fYW5kX2NtZF9kYXRhKTsKKworCURQKEJOWDJYX01TR19TUCwKKwkgICAiZnAgJWQgIGNpZCAlZCAgZ290IHJhbXJvZCAjJWQgIHN0YXRlIGlzICV4ICB0eXBlIGlzICVkXG4iLAorCSAgIGZwLT5pbmRleCwgY2lkLCBjb21tYW5kLCBicC0+c3RhdGUsCisJICAgcnJfY3FlLT5yYW1yb2RfY3FlLnJhbXJvZF90eXBlKTsKKworCWJwLT5zcHFfbGVmdCsrOworCisJaWYgKGZwLT5pbmRleCkgeworCQlzd2l0Y2ggKGNvbW1hbmQgfCBmcC0+c3RhdGUpIHsKKwkJY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfQ0xJRU5UX1NFVFVQIHwKKwkJCQkJCUJOWDJYX0ZQX1NUQVRFX09QRU5JTkcpOgorCQkJRFAoTkVUSUZfTVNHX0lGVVAsICJnb3QgTVVMVElbJWRdIHNldHVwIHJhbXJvZFxuIiwKKwkJCSAgIGNpZCk7CisJCQlmcC0+c3RhdGUgPSBCTlgyWF9GUF9TVEFURV9PUEVOOworCQkJYnJlYWs7CisKKwkJY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfSEFMVCB8IEJOWDJYX0ZQX1NUQVRFX0hBTFRJTkcpOgorCQkJRFAoTkVUSUZfTVNHX0lGRE9XTiwgImdvdCBNVUxUSVslZF0gaGFsdCByYW1yb2RcbiIsCisJCQkgICBjaWQpOworCQkJZnAtPnN0YXRlID0gQk5YMlhfRlBfU1RBVEVfSEFMVEVEOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCUJOWDJYX0VSUigidW5leHBlY3RlZCBNQyByZXBseSAoJWQpICAiCisJCQkJICAiZnBbJWRdIHN0YXRlIGlzICV4XG4iLAorCQkJCSAgY29tbWFuZCwgZnAtPmluZGV4LCBmcC0+c3RhdGUpOworCQkJYnJlYWs7CisJCX0KKwkJbWIoKTsgLyogZm9yY2UgYm54Mnhfd2FpdF9yYW1yb2QoKSB0byBzZWUgdGhlIGNoYW5nZSAqLworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChjb21tYW5kIHwgYnAtPnN0YXRlKSB7CisJY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfUE9SVF9TRVRVUCB8IEJOWDJYX1NUQVRFX09QRU5JTkdfV0FJVDRfUE9SVCk6CisJCURQKE5FVElGX01TR19JRlVQLCAiZ290IHNldHVwIHJhbXJvZFxuIik7CisJCWJwLT5zdGF0ZSA9IEJOWDJYX1NUQVRFX09QRU47CisJCWJyZWFrOworCisJY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfSEFMVCB8IEJOWDJYX1NUQVRFX0NMT1NJTkdfV0FJVDRfSEFMVCk6CisJCURQKE5FVElGX01TR19JRkRPV04sICJnb3QgaGFsdCByYW1yb2RcbiIpOworCQlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9DTE9TSU5HX1dBSVQ0X0RFTEVURTsKKwkJZnAtPnN0YXRlID0gQk5YMlhfRlBfU1RBVEVfSEFMVEVEOworCQlicmVhazsKKworCWNhc2UgKFJBTVJPRF9DTURfSURfRVRIX0NGQ19ERUwgfCBCTlgyWF9TVEFURV9DTE9TSU5HX1dBSVQ0X0hBTFQpOgorCQlEUChORVRJRl9NU0dfSUZET1dOLCAiZ290IGRlbGV0ZSByYW1yb2QgZm9yIE1VTFRJWyVkXVxuIiwgY2lkKTsKKwkJYm54MnhfZnAoYnAsIGNpZCwgc3RhdGUpID0gQk5YMlhfRlBfU1RBVEVfQ0xPU0VEOworCQlicmVhazsKKworI2lmZGVmIEJDTV9DTklDCisJY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfQ0ZDX0RFTCB8IEJOWDJYX1NUQVRFX09QRU4pOgorCQlEUChORVRJRl9NU0dfSUZET1dOLCAiZ290IGRlbGV0ZSByYW1yb2QgZm9yIENJRCAlZFxuIiwgY2lkKTsKKwkJYm54MnhfY25pY19jZmNfY29tcChicCwgY2lkKTsKKwkJYnJlYWs7CisjZW5kaWYKKworCWNhc2UgKFJBTVJPRF9DTURfSURfRVRIX1NFVF9NQUMgfCBCTlgyWF9TVEFURV9PUEVOKToKKwljYXNlIChSQU1ST0RfQ01EX0lEX0VUSF9TRVRfTUFDIHwgQk5YMlhfU1RBVEVfRElBRyk6CisJCURQKE5FVElGX01TR19JRlVQLCAiZ290IHNldCBtYWMgcmFtcm9kXG4iKTsKKwkJYnAtPnNldF9tYWNfcGVuZGluZy0tOworCQlzbXBfd21iKCk7CisJCWJyZWFrOworCisJY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfU0VUX01BQyB8IEJOWDJYX1NUQVRFX0NMT1NJTkdfV0FJVDRfSEFMVCk6CisJCURQKE5FVElGX01TR19JRkRPV04sICJnb3QgKHVuKXNldCBtYWMgcmFtcm9kXG4iKTsKKwkJYnAtPnNldF9tYWNfcGVuZGluZy0tOworCQlzbXBfd21iKCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJQk5YMlhfRVJSKCJ1bmV4cGVjdGVkIE1DIHJlcGx5ICglZCkgIGJwLT5zdGF0ZSBpcyAleFxuIiwKKwkJCSAgY29tbWFuZCwgYnAtPnN0YXRlKTsKKwkJYnJlYWs7CisJfQorCW1iKCk7IC8qIGZvcmNlIGJueDJ4X3dhaXRfcmFtcm9kKCkgdG8gc2VlIHRoZSBjaGFuZ2UgKi8KK30KKworaXJxcmV0dXJuX3QgYm54MnhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2X2luc3RhbmNlKTsKKwl1MTYgc3RhdHVzID0gYm54MnhfYWNrX2ludChicCk7CisJdTE2IG1hc2s7CisJaW50IGk7CisKKwkvKiBSZXR1cm4gaGVyZSBpZiBpbnRlcnJ1cHQgaXMgc2hhcmVkIGFuZCBpdCdzIG5vdCBmb3IgdXMgKi8KKwlpZiAodW5saWtlbHkoc3RhdHVzID09IDApKSB7CisJCURQKE5FVElGX01TR19JTlRSLCAibm90IG91ciBpbnRlcnJ1cHQhXG4iKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKwlEUChORVRJRl9NU0dfSU5UUiwgImdvdCBhbiBpbnRlcnJ1cHQgIHN0YXR1cyAweCV4XG4iLCBzdGF0dXMpOworCisJLyogUmV0dXJuIGhlcmUgaWYgaW50ZXJydXB0IGlzIGRpc2FibGVkICovCisJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZicC0+aW50cl9zZW0pICE9IDApKSB7CisJCURQKE5FVElGX01TR19JTlRSLCAiY2FsbGVkIGJ1dCBpbnRyX3NlbSBub3QgMCwgcmV0dXJuaW5nXG4iKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKKwlpZiAodW5saWtlbHkoYnAtPnBhbmljKSkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworI2VuZGlmCisKKwlmb3IgKGkgPSAwOyBpIDwgQk5YMlhfTlVNX1FVRVVFUyhicCk7IGkrKykgeworCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKKworCQltYXNrID0gMHgyIDw8IGZwLT5zYl9pZDsKKwkJaWYgKHN0YXR1cyAmIG1hc2spIHsKKwkJCS8qIEhhbmRsZSBSeCBhbmQgVHggYWNjb3JkaW5nIHRvIFNCIGlkICovCisJCQlwcmVmZXRjaChmcC0+cnhfY29uc19zYik7CisJCQlwcmVmZXRjaCgmZnAtPnN0YXR1c19ibGstPnVfc3RhdHVzX2Jsb2NrLgorCQkJCQkJc3RhdHVzX2Jsb2NrX2luZGV4KTsKKwkJCXByZWZldGNoKGZwLT50eF9jb25zX3NiKTsKKwkJCXByZWZldGNoKCZmcC0+c3RhdHVzX2Jsay0+Y19zdGF0dXNfYmxvY2suCisJCQkJCQlzdGF0dXNfYmxvY2tfaW5kZXgpOworCQkJbmFwaV9zY2hlZHVsZSgmYm54MnhfZnAoYnAsIGZwLT5pbmRleCwgbmFwaSkpOworCQkJc3RhdHVzICY9IH5tYXNrOworCQl9CisJfQorCisjaWZkZWYgQkNNX0NOSUMKKwltYXNrID0gMHgyIDw8IENOSUNfU0JfSUQoYnApOworCWlmIChzdGF0dXMgJiAobWFzayB8IDB4MSkpIHsKKwkJc3RydWN0IGNuaWNfb3BzICpjX29wcyA9IE5VTEw7CisKKwkJcmN1X3JlYWRfbG9jaygpOworCQljX29wcyA9IHJjdV9kZXJlZmVyZW5jZShicC0+Y25pY19vcHMpOworCQlpZiAoY19vcHMpCisJCQljX29wcy0+Y25pY19oYW5kbGVyKGJwLT5jbmljX2RhdGEsIE5VTEwpOworCQlyY3VfcmVhZF91bmxvY2soKTsKKworCQlzdGF0dXMgJj0gfm1hc2s7CisJfQorI2VuZGlmCisKKwlpZiAodW5saWtlbHkoc3RhdHVzICYgMHgxKSkgeworCQlxdWV1ZV9kZWxheWVkX3dvcmsoYm54Mnhfd3EsICZicC0+c3BfdGFzaywgMCk7CisKKwkJc3RhdHVzICY9IH4weDE7CisJCWlmICghc3RhdHVzKQorCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCWlmICh1bmxpa2VseShzdGF0dXMpKQorCQlEUChORVRJRl9NU0dfSU5UUiwgImdvdCBhbiB1bmtub3duIGludGVycnVwdCEgKHN0YXR1cyAweCV4KVxuIiwKKwkJICAgc3RhdHVzKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyogZW5kIG9mIGZhc3QgcGF0aCAqLworCisKKy8qIExpbmsgKi8KKworLyoKKyAqIEdlbmVyYWwgc2VydmljZSBmdW5jdGlvbnMKKyAqLworCitpbnQgYm54MnhfYWNxdWlyZV9od19sb2NrKHN0cnVjdCBibngyeCAqYnAsIHUzMiByZXNvdXJjZSkKK3sKKwl1MzIgbG9ja19zdGF0dXM7CisJdTMyIHJlc291cmNlX2JpdCA9ICgxIDw8IHJlc291cmNlKTsKKwlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOworCXUzMiBod19sb2NrX2NvbnRyb2xfcmVnOworCWludCBjbnQ7CisKKwkvKiBWYWxpZGF0aW5nIHRoYXQgdGhlIHJlc291cmNlIGlzIHdpdGhpbiByYW5nZSAqLworCWlmIChyZXNvdXJjZSA+IEhXX0xPQ0tfTUFYX1JFU09VUkNFX1ZBTFVFKSB7CisJCURQKE5FVElGX01TR19IVywKKwkJICAgInJlc291cmNlKDB4JXgpID4gSFdfTE9DS19NQVhfUkVTT1VSQ0VfVkFMVUUoMHgleClcbiIsCisJCSAgIHJlc291cmNlLCBIV19MT0NLX01BWF9SRVNPVVJDRV9WQUxVRSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChmdW5jIDw9IDUpIHsKKwkJaHdfbG9ja19jb250cm9sX3JlZyA9IChNSVNDX1JFR19EUklWRVJfQ09OVFJPTF8xICsgZnVuYyo4KTsKKwl9IGVsc2UgeworCQlod19sb2NrX2NvbnRyb2xfcmVnID0KKwkJCQkoTUlTQ19SRUdfRFJJVkVSX0NPTlRST0xfNyArIChmdW5jIC0gNikqOCk7CisJfQorCisJLyogVmFsaWRhdGluZyB0aGF0IHRoZSByZXNvdXJjZSBpcyBub3QgYWxyZWFkeSB0YWtlbiAqLworCWxvY2tfc3RhdHVzID0gUkVHX1JEKGJwLCBod19sb2NrX2NvbnRyb2xfcmVnKTsKKwlpZiAobG9ja19zdGF0dXMgJiByZXNvdXJjZV9iaXQpIHsKKwkJRFAoTkVUSUZfTVNHX0hXLCAibG9ja19zdGF0dXMgMHgleCAgcmVzb3VyY2VfYml0IDB4JXhcbiIsCisJCSAgIGxvY2tfc3RhdHVzLCByZXNvdXJjZV9iaXQpOworCQlyZXR1cm4gLUVFWElTVDsKKwl9CisKKwkvKiBUcnkgZm9yIDUgc2Vjb25kIGV2ZXJ5IDVtcyAqLworCWZvciAoY250ID0gMDsgY250IDwgMTAwMDsgY250KyspIHsKKwkJLyogVHJ5IHRvIGFjcXVpcmUgdGhlIGxvY2sgKi8KKwkJUkVHX1dSKGJwLCBod19sb2NrX2NvbnRyb2xfcmVnICsgNCwgcmVzb3VyY2VfYml0KTsKKwkJbG9ja19zdGF0dXMgPSBSRUdfUkQoYnAsIGh3X2xvY2tfY29udHJvbF9yZWcpOworCQlpZiAobG9ja19zdGF0dXMgJiByZXNvdXJjZV9iaXQpCisJCQlyZXR1cm4gMDsKKworCQltc2xlZXAoNSk7CisJfQorCURQKE5FVElGX01TR19IVywgIlRpbWVvdXRcbiIpOworCXJldHVybiAtRUFHQUlOOworfQorCitpbnQgYm54MnhfcmVsZWFzZV9od19sb2NrKHN0cnVjdCBibngyeCAqYnAsIHUzMiByZXNvdXJjZSkKK3sKKwl1MzIgbG9ja19zdGF0dXM7CisJdTMyIHJlc291cmNlX2JpdCA9ICgxIDw8IHJlc291cmNlKTsKKwlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOworCXUzMiBod19sb2NrX2NvbnRyb2xfcmVnOworCisJRFAoTkVUSUZfTVNHX0hXLCAiUmVsZWFzaW5nIGEgbG9jayBvbiByZXNvdXJjZSAlZFxuIiwgcmVzb3VyY2UpOworCisJLyogVmFsaWRhdGluZyB0aGF0IHRoZSByZXNvdXJjZSBpcyB3aXRoaW4gcmFuZ2UgKi8KKwlpZiAocmVzb3VyY2UgPiBIV19MT0NLX01BWF9SRVNPVVJDRV9WQUxVRSkgeworCQlEUChORVRJRl9NU0dfSFcsCisJCSAgICJyZXNvdXJjZSgweCV4KSA+IEhXX0xPQ0tfTUFYX1JFU09VUkNFX1ZBTFVFKDB4JXgpXG4iLAorCQkgICByZXNvdXJjZSwgSFdfTE9DS19NQVhfUkVTT1VSQ0VfVkFMVUUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZnVuYyA8PSA1KSB7CisJCWh3X2xvY2tfY29udHJvbF9yZWcgPSAoTUlTQ19SRUdfRFJJVkVSX0NPTlRST0xfMSArIGZ1bmMqOCk7CisJfSBlbHNlIHsKKwkJaHdfbG9ja19jb250cm9sX3JlZyA9CisJCQkJKE1JU0NfUkVHX0RSSVZFUl9DT05UUk9MXzcgKyAoZnVuYyAtIDYpKjgpOworCX0KKworCS8qIFZhbGlkYXRpbmcgdGhhdCB0aGUgcmVzb3VyY2UgaXMgY3VycmVudGx5IHRha2VuICovCisJbG9ja19zdGF0dXMgPSBSRUdfUkQoYnAsIGh3X2xvY2tfY29udHJvbF9yZWcpOworCWlmICghKGxvY2tfc3RhdHVzICYgcmVzb3VyY2VfYml0KSkgeworCQlEUChORVRJRl9NU0dfSFcsICJsb2NrX3N0YXR1cyAweCV4ICByZXNvdXJjZV9iaXQgMHgleFxuIiwKKwkJICAgbG9ja19zdGF0dXMsIHJlc291cmNlX2JpdCk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCVJFR19XUihicCwgaHdfbG9ja19jb250cm9sX3JlZywgcmVzb3VyY2VfYml0KTsKKwlyZXR1cm4gMDsKK30KKworCitpbnQgYm54MnhfZ2V0X2dwaW8oc3RydWN0IGJueDJ4ICpicCwgaW50IGdwaW9fbnVtLCB1OCBwb3J0KQoreworCS8qIFRoZSBHUElPIHNob3VsZCBiZSBzd2FwcGVkIGlmIHN3YXAgcmVnaXN0ZXIgaXMgc2V0IGFuZCBhY3RpdmUgKi8KKwlpbnQgZ3Bpb19wb3J0ID0gKFJFR19SRChicCwgTklHX1JFR19QT1JUX1NXQVApICYmCisJCQkgUkVHX1JEKGJwLCBOSUdfUkVHX1NUUkFQX09WRVJSSURFKSkgXiBwb3J0OworCWludCBncGlvX3NoaWZ0ID0gZ3Bpb19udW0gKworCQkJKGdwaW9fcG9ydCA/IE1JU0NfUkVHSVNURVJTX0dQSU9fUE9SVF9TSElGVCA6IDApOworCXUzMiBncGlvX21hc2sgPSAoMSA8PCBncGlvX3NoaWZ0KTsKKwl1MzIgZ3Bpb19yZWc7CisJaW50IHZhbHVlOworCisJaWYgKGdwaW9fbnVtID4gTUlTQ19SRUdJU1RFUlNfR1BJT18zKSB7CisJCUJOWDJYX0VSUigiSW52YWxpZCBHUElPICVkXG4iLCBncGlvX251bSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHJlYWQgR1BJTyB2YWx1ZSAqLworCWdwaW9fcmVnID0gUkVHX1JEKGJwLCBNSVNDX1JFR19HUElPKTsKKworCS8qIGdldCB0aGUgcmVxdWVzdGVkIHBpbiB2YWx1ZSAqLworCWlmICgoZ3Bpb19yZWcgJiBncGlvX21hc2spID09IGdwaW9fbWFzaykKKwkJdmFsdWUgPSAxOworCWVsc2UKKwkJdmFsdWUgPSAwOworCisJRFAoTkVUSUZfTVNHX0xJTkssICJwaW4gJWQgIHZhbHVlIDB4JXhcbiIsIGdwaW9fbnVtLCB2YWx1ZSk7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK2ludCBibngyeF9zZXRfZ3BpbyhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZ3Bpb19udW0sIHUzMiBtb2RlLCB1OCBwb3J0KQoreworCS8qIFRoZSBHUElPIHNob3VsZCBiZSBzd2FwcGVkIGlmIHN3YXAgcmVnaXN0ZXIgaXMgc2V0IGFuZCBhY3RpdmUgKi8KKwlpbnQgZ3Bpb19wb3J0ID0gKFJFR19SRChicCwgTklHX1JFR19QT1JUX1NXQVApICYmCisJCQkgUkVHX1JEKGJwLCBOSUdfUkVHX1NUUkFQX09WRVJSSURFKSkgXiBwb3J0OworCWludCBncGlvX3NoaWZ0ID0gZ3Bpb19udW0gKworCQkJKGdwaW9fcG9ydCA/IE1JU0NfUkVHSVNURVJTX0dQSU9fUE9SVF9TSElGVCA6IDApOworCXUzMiBncGlvX21hc2sgPSAoMSA8PCBncGlvX3NoaWZ0KTsKKwl1MzIgZ3Bpb19yZWc7CisKKwlpZiAoZ3Bpb19udW0gPiBNSVNDX1JFR0lTVEVSU19HUElPXzMpIHsKKwkJQk5YMlhfRVJSKCJJbnZhbGlkIEdQSU8gJWRcbiIsIGdwaW9fbnVtKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYm54MnhfYWNxdWlyZV9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFX0dQSU8pOworCS8qIHJlYWQgR1BJTyBhbmQgbWFzayBleGNlcHQgdGhlIGZsb2F0IGJpdHMgKi8KKwlncGlvX3JlZyA9IChSRUdfUkQoYnAsIE1JU0NfUkVHX0dQSU8pICYgTUlTQ19SRUdJU1RFUlNfR1BJT19GTE9BVCk7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0xPVzoKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXQgR1BJTyAlZCAoc2hpZnQgJWQpIC0+IG91dHB1dCBsb3dcbiIsCisJCSAgIGdwaW9fbnVtLCBncGlvX3NoaWZ0KTsKKwkJLyogY2xlYXIgRkxPQVQgYW5kIHNldCBDTFIgKi8KKwkJZ3Bpb19yZWcgJj0gfihncGlvX21hc2sgPDwgTUlTQ19SRUdJU1RFUlNfR1BJT19GTE9BVF9QT1MpOworCQlncGlvX3JlZyB8PSAgKGdwaW9fbWFzayA8PCBNSVNDX1JFR0lTVEVSU19HUElPX0NMUl9QT1MpOworCQlicmVhazsKKworCWNhc2UgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfSElHSDoKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXQgR1BJTyAlZCAoc2hpZnQgJWQpIC0+IG91dHB1dCBoaWdoXG4iLAorCQkgICBncGlvX251bSwgZ3Bpb19zaGlmdCk7CisJCS8qIGNsZWFyIEZMT0FUIGFuZCBzZXQgU0VUICovCisJCWdwaW9fcmVnICY9IH4oZ3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX0dQSU9fRkxPQVRfUE9TKTsKKwkJZ3Bpb19yZWcgfD0gIChncGlvX21hc2sgPDwgTUlTQ19SRUdJU1RFUlNfR1BJT19TRVRfUE9TKTsKKwkJYnJlYWs7CisKKwljYXNlIE1JU0NfUkVHSVNURVJTX0dQSU9fSU5QVVRfSElfWjoKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXQgR1BJTyAlZCAoc2hpZnQgJWQpIC0+IGlucHV0XG4iLAorCQkgICBncGlvX251bSwgZ3Bpb19zaGlmdCk7CisJCS8qIHNldCBGTE9BVCAqLworCQlncGlvX3JlZyB8PSAoZ3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX0dQSU9fRkxPQVRfUE9TKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlSRUdfV1IoYnAsIE1JU0NfUkVHX0dQSU8sIGdwaW9fcmVnKTsKKwlibngyeF9yZWxlYXNlX2h3X2xvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfR1BJTyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGJueDJ4X3NldF9ncGlvX2ludChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZ3Bpb19udW0sIHUzMiBtb2RlLCB1OCBwb3J0KQoreworCS8qIFRoZSBHUElPIHNob3VsZCBiZSBzd2FwcGVkIGlmIHN3YXAgcmVnaXN0ZXIgaXMgc2V0IGFuZCBhY3RpdmUgKi8KKwlpbnQgZ3Bpb19wb3J0ID0gKFJFR19SRChicCwgTklHX1JFR19QT1JUX1NXQVApICYmCisJCQkgUkVHX1JEKGJwLCBOSUdfUkVHX1NUUkFQX09WRVJSSURFKSkgXiBwb3J0OworCWludCBncGlvX3NoaWZ0ID0gZ3Bpb19udW0gKworCQkJKGdwaW9fcG9ydCA/IE1JU0NfUkVHSVNURVJTX0dQSU9fUE9SVF9TSElGVCA6IDApOworCXUzMiBncGlvX21hc2sgPSAoMSA8PCBncGlvX3NoaWZ0KTsKKwl1MzIgZ3Bpb19yZWc7CisKKwlpZiAoZ3Bpb19udW0gPiBNSVNDX1JFR0lTVEVSU19HUElPXzMpIHsKKwkJQk5YMlhfRVJSKCJJbnZhbGlkIEdQSU8gJWRcbiIsIGdwaW9fbnVtKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYm54MnhfYWNxdWlyZV9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFX0dQSU8pOworCS8qIHJlYWQgR1BJTyBpbnQgKi8KKwlncGlvX3JlZyA9IFJFR19SRChicCwgTUlTQ19SRUdfR1BJT19JTlQpOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBNSVNDX1JFR0lTVEVSU19HUElPX0lOVF9PVVRQVVRfQ0xSOgorCQlEUChORVRJRl9NU0dfTElOSywgIkNsZWFyIEdQSU8gSU5UICVkIChzaGlmdCAlZCkgLT4gIgorCQkJCSAgICJvdXRwdXQgbG93XG4iLCBncGlvX251bSwgZ3Bpb19zaGlmdCk7CisJCS8qIGNsZWFyIFNFVCBhbmQgc2V0IENMUiAqLworCQlncGlvX3JlZyAmPSB+KGdwaW9fbWFzayA8PCBNSVNDX1JFR0lTVEVSU19HUElPX0lOVF9TRVRfUE9TKTsKKwkJZ3Bpb19yZWcgfD0gIChncGlvX21hc2sgPDwgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfQ0xSX1BPUyk7CisJCWJyZWFrOworCisJY2FzZSBNSVNDX1JFR0lTVEVSU19HUElPX0lOVF9PVVRQVVRfU0VUOgorCQlEUChORVRJRl9NU0dfTElOSywgIlNldCBHUElPIElOVCAlZCAoc2hpZnQgJWQpIC0+ICIKKwkJCQkgICAib3V0cHV0IGhpZ2hcbiIsIGdwaW9fbnVtLCBncGlvX3NoaWZ0KTsKKwkJLyogY2xlYXIgQ0xSIGFuZCBzZXQgU0VUICovCisJCWdwaW9fcmVnICY9IH4oZ3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX0NMUl9QT1MpOworCQlncGlvX3JlZyB8PSAgKGdwaW9fbWFzayA8PCBNSVNDX1JFR0lTVEVSU19HUElPX0lOVF9TRVRfUE9TKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlSRUdfV1IoYnAsIE1JU0NfUkVHX0dQSU9fSU5ULCBncGlvX3JlZyk7CisJYm54MnhfcmVsZWFzZV9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFX0dQSU8pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYm54Mnhfc2V0X3NwaW8oc3RydWN0IGJueDJ4ICpicCwgaW50IHNwaW9fbnVtLCB1MzIgbW9kZSkKK3sKKwl1MzIgc3Bpb19tYXNrID0gKDEgPDwgc3Bpb19udW0pOworCXUzMiBzcGlvX3JlZzsKKworCWlmICgoc3Bpb19udW0gPCBNSVNDX1JFR0lTVEVSU19TUElPXzQpIHx8CisJICAgIChzcGlvX251bSA+IE1JU0NfUkVHSVNURVJTX1NQSU9fNykpIHsKKwkJQk5YMlhfRVJSKCJJbnZhbGlkIFNQSU8gJWRcbiIsIHNwaW9fbnVtKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYm54MnhfYWNxdWlyZV9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFX1NQSU8pOworCS8qIHJlYWQgU1BJTyBhbmQgbWFzayBleGNlcHQgdGhlIGZsb2F0IGJpdHMgKi8KKwlzcGlvX3JlZyA9IChSRUdfUkQoYnAsIE1JU0NfUkVHX1NQSU8pICYgTUlTQ19SRUdJU1RFUlNfU1BJT19GTE9BVCk7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIE1JU0NfUkVHSVNURVJTX1NQSU9fT1VUUFVUX0xPVzoKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXQgU1BJTyAlZCAtPiBvdXRwdXQgbG93XG4iLCBzcGlvX251bSk7CisJCS8qIGNsZWFyIEZMT0FUIGFuZCBzZXQgQ0xSICovCisJCXNwaW9fcmVnICY9IH4oc3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX1NQSU9fRkxPQVRfUE9TKTsKKwkJc3Bpb19yZWcgfD0gIChzcGlvX21hc2sgPDwgTUlTQ19SRUdJU1RFUlNfU1BJT19DTFJfUE9TKTsKKwkJYnJlYWs7CisKKwljYXNlIE1JU0NfUkVHSVNURVJTX1NQSU9fT1VUUFVUX0hJR0g6CisJCURQKE5FVElGX01TR19MSU5LLCAiU2V0IFNQSU8gJWQgLT4gb3V0cHV0IGhpZ2hcbiIsIHNwaW9fbnVtKTsKKwkJLyogY2xlYXIgRkxPQVQgYW5kIHNldCBTRVQgKi8KKwkJc3Bpb19yZWcgJj0gfihzcGlvX21hc2sgPDwgTUlTQ19SRUdJU1RFUlNfU1BJT19GTE9BVF9QT1MpOworCQlzcGlvX3JlZyB8PSAgKHNwaW9fbWFzayA8PCBNSVNDX1JFR0lTVEVSU19TUElPX1NFVF9QT1MpOworCQlicmVhazsKKworCWNhc2UgTUlTQ19SRUdJU1RFUlNfU1BJT19JTlBVVF9ISV9aOgorCQlEUChORVRJRl9NU0dfTElOSywgIlNldCBTUElPICVkIC0+IGlucHV0XG4iLCBzcGlvX251bSk7CisJCS8qIHNldCBGTE9BVCAqLworCQlzcGlvX3JlZyB8PSAoc3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX1NQSU9fRkxPQVRfUE9TKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlSRUdfV1IoYnAsIE1JU0NfUkVHX1NQSU8sIHNwaW9fcmVnKTsKKwlibngyeF9yZWxlYXNlX2h3X2xvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfU1BJTyk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBibngyeF9jYWxjX2ZjX2FkdihzdHJ1Y3QgYm54MnggKmJwKQoreworCXN3aXRjaCAoYnAtPmxpbmtfdmFycy5pZWVlX2ZjICYKKwkJTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfTUFTSykgeworCWNhc2UgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfTk9ORToKKwkJYnAtPnBvcnQuYWR2ZXJ0aXNpbmcgJj0gfihBRFZFUlRJU0VEX0FzeW1fUGF1c2UgfAorCQkJCQkgIEFEVkVSVElTRURfUGF1c2UpOworCQlicmVhazsKKworCWNhc2UgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfQk9USDoKKwkJYnAtPnBvcnQuYWR2ZXJ0aXNpbmcgfD0gKEFEVkVSVElTRURfQXN5bV9QYXVzZSB8CisJCQkJCSBBRFZFUlRJU0VEX1BhdXNlKTsKKwkJYnJlYWs7CisKKwljYXNlIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0FTWU1NRVRSSUM6CisJCWJwLT5wb3J0LmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfQXN5bV9QYXVzZTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicC0+cG9ydC5hZHZlcnRpc2luZyAmPSB+KEFEVkVSVElTRURfQXN5bV9QYXVzZSB8CisJCQkJCSAgQURWRVJUSVNFRF9QYXVzZSk7CisJCWJyZWFrOworCX0KK30KKworCit1OCBibngyeF9pbml0aWFsX3BoeV9pbml0KHN0cnVjdCBibngyeCAqYnAsIGludCBsb2FkX21vZGUpCit7CisJaWYgKCFCUF9OT01DUChicCkpIHsKKwkJdTggcmM7CisKKwkJLyogSW5pdGlhbGl6ZSBsaW5rIHBhcmFtZXRlcnMgc3RydWN0dXJlIHZhcmlhYmxlcyAqLworCQkvKiBJdCBpcyByZWNvbW1lbmRlZCB0byB0dXJuIG9mZiBSWCBGQyBmb3IganVtYm8gZnJhbWVzCisJCSAgIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UgKi8KKwkJaWYgKGJwLT5kZXYtPm10dSA+IDUwMDApCisJCQlicC0+bGlua19wYXJhbXMucmVxX2ZjX2F1dG9fYWR2ID0gQk5YMlhfRkxPV19DVFJMX1RYOworCQllbHNlCisJCQlicC0+bGlua19wYXJhbXMucmVxX2ZjX2F1dG9fYWR2ID0gQk5YMlhfRkxPV19DVFJMX0JPVEg7CisKKwkJYm54MnhfYWNxdWlyZV9waHlfbG9jayhicCk7CisKKwkJaWYgKGxvYWRfbW9kZSA9PSBMT0FEX0RJQUcpCisJCQlicC0+bGlua19wYXJhbXMubG9vcGJhY2tfbW9kZSA9IExPT1BCQUNLX1hHWFNfMTA7CisKKwkJcmMgPSBibngyeF9waHlfaW5pdCgmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycyk7CisKKwkJYm54MnhfcmVsZWFzZV9waHlfbG9jayhicCk7CisKKwkJYm54MnhfY2FsY19mY19hZHYoYnApOworCisJCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSAmJiBicC0+bGlua192YXJzLmxpbmtfdXApIHsKKwkJCWJueDJ4X3N0YXRzX2hhbmRsZShicCwgU1RBVFNfRVZFTlRfTElOS19VUCk7CisJCQlibngyeF9saW5rX3JlcG9ydChicCk7CisJCX0KKworCQlyZXR1cm4gcmM7CisJfQorCUJOWDJYX0VSUigiQm9vdGNvZGUgaXMgbWlzc2luZyAtIGNhbiBub3QgaW5pdGlhbGl6ZSBsaW5rXG4iKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKwordm9pZCBibngyeF9saW5rX3NldChzdHJ1Y3QgYm54MnggKmJwKQoreworCWlmICghQlBfTk9NQ1AoYnApKSB7CisJCWJueDJ4X2FjcXVpcmVfcGh5X2xvY2soYnApOworCQlibngyeF9waHlfaW5pdCgmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycyk7CisJCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOworCisJCWJueDJ4X2NhbGNfZmNfYWR2KGJwKTsKKwl9IGVsc2UKKwkJQk5YMlhfRVJSKCJCb290Y29kZSBpcyBtaXNzaW5nIC0gY2FuIG5vdCBzZXQgbGlua1xuIik7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X19saW5rX3Jlc2V0KHN0cnVjdCBibngyeCAqYnApCit7CisJaWYgKCFCUF9OT01DUChicCkpIHsKKwkJYm54MnhfYWNxdWlyZV9waHlfbG9jayhicCk7CisJCWJueDJ4X2xpbmtfcmVzZXQoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMsIDEpOworCQlibngyeF9yZWxlYXNlX3BoeV9sb2NrKGJwKTsKKwl9IGVsc2UKKwkJQk5YMlhfRVJSKCJCb290Y29kZSBpcyBtaXNzaW5nIC0gY2FuIG5vdCByZXNldCBsaW5rXG4iKTsKK30KKwordTggYm54MnhfbGlua190ZXN0KHN0cnVjdCBibngyeCAqYnApCit7CisJdTggcmMgPSAwOworCisJaWYgKCFCUF9OT01DUChicCkpIHsKKwkJYm54MnhfYWNxdWlyZV9waHlfbG9jayhicCk7CisJCXJjID0gYm54MnhfdGVzdF9saW5rKCZicC0+bGlua19wYXJhbXMsICZicC0+bGlua192YXJzKTsKKwkJYm54MnhfcmVsZWFzZV9waHlfbG9jayhicCk7CisJfSBlbHNlCisJCUJOWDJYX0VSUigiQm9vdGNvZGUgaXMgbWlzc2luZyAtIGNhbiBub3QgdGVzdCBsaW5rXG4iKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgYm54MnhfaW5pdF9wb3J0X21pbm1heChzdHJ1Y3QgYm54MnggKmJwKQoreworCXUzMiByX3BhcmFtID0gYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkIC8gODsKKwl1MzIgZmFpcl9wZXJpb2RpY190aW1lb3V0X3VzZWM7CisJdTMyIHRfZmFpcjsKKworCW1lbXNldCgmKGJwLT5jbW5nLnJzX3ZhcnMpLCAwLAorCSAgICAgICBzaXplb2Yoc3RydWN0IHJhdGVfc2hhcGluZ192YXJzX3Blcl9wb3J0KSk7CisJbWVtc2V0KCYoYnAtPmNtbmcuZmFpcl92YXJzKSwgMCwgc2l6ZW9mKHN0cnVjdCBmYWlybmVzc192YXJzX3Blcl9wb3J0KSk7CisKKwkvKiAxMDAgdXNlYyBpbiBTRE0gdGlja3MgPSAyNSBzaW5jZSBlYWNoIHRpY2sgaXMgNCB1c2VjICovCisJYnAtPmNtbmcucnNfdmFycy5yc19wZXJpb2RpY190aW1lb3V0ID0gUlNfUEVSSU9ESUNfVElNRU9VVF9VU0VDIC8gNDsKKworCS8qIHRoaXMgaXMgdGhlIHRocmVzaG9sZCBiZWxvdyB3aGljaCBubyB0aW1lciBhcm1pbmcgd2lsbCBvY2N1cgorCSAgIDEuMjUgY29lZmZpY2llbnQgaXMgZm9yIHRoZSB0aHJlc2hvbGQgdG8gYmUgYSBsaXR0bGUgYmlnZ2VyCisJICAgdGhhbiB0aGUgcmVhbCB0aW1lLCB0byBjb21wZW5zYXRlIGZvciB0aW1lciBpbi1hY2N1cmFjeSAqLworCWJwLT5jbW5nLnJzX3ZhcnMucnNfdGhyZXNob2xkID0KKwkJCQkoUlNfUEVSSU9ESUNfVElNRU9VVF9VU0VDICogcl9wYXJhbSAqIDUpIC8gNDsKKworCS8qIHJlc29sdXRpb24gb2YgZmFpcm5lc3MgdGltZXIgKi8KKwlmYWlyX3BlcmlvZGljX3RpbWVvdXRfdXNlYyA9IFFNX0FSQl9CWVRFUyAvIHJfcGFyYW07CisJLyogZm9yIDEwRyBpdCBpcyAxMDAwdXNlYy4gZm9yIDFHIGl0IGlzIDEwMDAwdXNlYy4gKi8KKwl0X2ZhaXIgPSBUX0ZBSVJfQ09FRiAvIGJwLT5saW5rX3ZhcnMubGluZV9zcGVlZDsKKworCS8qIHRoaXMgaXMgdGhlIHRocmVzaG9sZCBiZWxvdyB3aGljaCB3ZSB3b24ndCBhcm0gdGhlIHRpbWVyIGFueW1vcmUgKi8KKwlicC0+Y21uZy5mYWlyX3ZhcnMuZmFpcl90aHJlc2hvbGQgPSBRTV9BUkJfQllURVM7CisKKwkvKiB3ZSBtdWx0aXBseSBieSAxZTMvOCB0byBnZXQgYnl0ZXMvbXNlYy4KKwkgICBXZSBkb24ndCB3YW50IHRoZSBjcmVkaXRzIHRvIHBhc3MgYSBjcmVkaXQKKwkgICBvZiB0aGUgdF9mYWlyKkZBSVJfTUVNIChhbGdvcml0aG0gcmVzb2x1dGlvbikgKi8KKwlicC0+Y21uZy5mYWlyX3ZhcnMudXBwZXJfYm91bmQgPSByX3BhcmFtICogdF9mYWlyICogRkFJUl9NRU07CisJLyogc2luY2UgZWFjaCB0aWNrIGlzIDQgdXNlYyAqLworCWJwLT5jbW5nLmZhaXJfdmFycy5mYWlybmVzc190aW1lb3V0ID0gZmFpcl9wZXJpb2RpY190aW1lb3V0X3VzZWMgLyA0OworfQorCisvKiBDYWxjdWxhdGVzIHRoZSBzdW0gb2Ygdm5fbWluX3JhdGVzLgorICAgSXQncyBuZWVkZWQgZm9yIGZ1cnRoZXIgbm9ybWFsaXppbmcgb2YgdGhlIG1pbl9yYXRlcy4KKyAgIFJldHVybnM6CisgICAgIHN1bSBvZiB2bl9taW5fcmF0ZXMuCisgICAgICAgb3IKKyAgICAgMCAtIGlmIGFsbCB0aGUgbWluX3JhdGVzIGFyZSAwLgorICAgICBJbiB0aGUgbGF0ZXIgY2FzZSBmYWluZXNzIGFsZ29yaXRobSBzaG91bGQgYmUgZGVhY3RpdmF0ZWQuCisgICAgIElmIG5vdCBhbGwgbWluX3JhdGVzIGFyZSB6ZXJvIHRoZW4gdGhvc2UgdGhhdCBhcmUgemVyb2VzIHdpbGwgYmUgc2V0IHRvIDEuCisgKi8KK3N0YXRpYyB2b2lkIGJueDJ4X2NhbGNfdm5fd2VpZ2h0X3N1bShzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBhbGxfemVybyA9IDE7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwlpbnQgdm47CisKKwlicC0+dm5fd2VpZ2h0X3N1bSA9IDA7CisJZm9yICh2biA9IFZOXzA7IHZuIDwgRTFIVk5fTUFYOyB2bisrKSB7CisJCWludCBmdW5jID0gMip2biArIHBvcnQ7CisJCXUzMiB2bl9jZmcgPSBTSE1FTV9SRChicCwgbWZfY2ZnLmZ1bmNfbWZfY29uZmlnW2Z1bmNdLmNvbmZpZyk7CisJCXUzMiB2bl9taW5fcmF0ZSA9ICgodm5fY2ZnICYgRlVOQ19NRl9DRkdfTUlOX0JXX01BU0spID4+CisJCQkJICAgRlVOQ19NRl9DRkdfTUlOX0JXX1NISUZUKSAqIDEwMDsKKworCQkvKiBTa2lwIGhpZGRlbiB2bnMgKi8KKwkJaWYgKHZuX2NmZyAmIEZVTkNfTUZfQ0ZHX0ZVTkNfSElERSkKKwkJCWNvbnRpbnVlOworCisJCS8qIElmIG1pbiByYXRlIGlzIHplcm8gLSBzZXQgaXQgdG8gMSAqLworCQlpZiAoIXZuX21pbl9yYXRlKQorCQkJdm5fbWluX3JhdGUgPSBERUZfTUlOX1JBVEU7CisJCWVsc2UKKwkJCWFsbF96ZXJvID0gMDsKKworCQlicC0+dm5fd2VpZ2h0X3N1bSArPSB2bl9taW5fcmF0ZTsKKwl9CisKKwkvKiAuLi4gb25seSBpZiBhbGwgbWluIHJhdGVzIGFyZSB6ZXJvcyAtIGRpc2FibGUgZmFpcm5lc3MgKi8KKwlpZiAoYWxsX3plcm8pIHsKKwkJYnAtPmNtbmcuZmxhZ3MuY21uZ19lbmFibGVzICY9CisJCQkJCX5DTU5HX0ZMQUdTX1BFUl9QT1JUX0ZBSVJORVNTX1ZOOworCQlEUChORVRJRl9NU0dfSUZVUCwgIkFsbCBNSU4gdmFsdWVzIGFyZSB6ZXJvZXMiCisJCSAgICIgIGZhaXJuZXNzIHdpbGwgYmUgZGlzYWJsZWRcbiIpOworCX0gZWxzZQorCQlicC0+Y21uZy5mbGFncy5jbW5nX2VuYWJsZXMgfD0KKwkJCQkJQ01OR19GTEFHU19QRVJfUE9SVF9GQUlSTkVTU19WTjsKK30KKworc3RhdGljIHZvaWQgYm54MnhfaW5pdF92bl9taW5tYXgoc3RydWN0IGJueDJ4ICpicCwgaW50IGZ1bmMpCit7CisJc3RydWN0IHJhdGVfc2hhcGluZ192YXJzX3Blcl92biBtX3JzX3ZuOworCXN0cnVjdCBmYWlybmVzc192YXJzX3Blcl92biBtX2ZhaXJfdm47CisJdTMyIHZuX2NmZyA9IFNITUVNX1JEKGJwLCBtZl9jZmcuZnVuY19tZl9jb25maWdbZnVuY10uY29uZmlnKTsKKwl1MTYgdm5fbWluX3JhdGUsIHZuX21heF9yYXRlOworCWludCBpOworCisJLyogSWYgZnVuY3Rpb24gaXMgaGlkZGVuIC0gc2V0IG1pbiBhbmQgbWF4IHRvIHplcm9lcyAqLworCWlmICh2bl9jZmcgJiBGVU5DX01GX0NGR19GVU5DX0hJREUpIHsKKwkJdm5fbWluX3JhdGUgPSAwOworCQl2bl9tYXhfcmF0ZSA9IDA7CisKKwl9IGVsc2UgeworCQl2bl9taW5fcmF0ZSA9ICgodm5fY2ZnICYgRlVOQ19NRl9DRkdfTUlOX0JXX01BU0spID4+CisJCQkJRlVOQ19NRl9DRkdfTUlOX0JXX1NISUZUKSAqIDEwMDsKKwkJLyogSWYgbWluIHJhdGUgaXMgemVybyAtIHNldCBpdCB0byAxICovCisJCWlmICghdm5fbWluX3JhdGUpCisJCQl2bl9taW5fcmF0ZSA9IERFRl9NSU5fUkFURTsKKwkJdm5fbWF4X3JhdGUgPSAoKHZuX2NmZyAmIEZVTkNfTUZfQ0ZHX01BWF9CV19NQVNLKSA+PgorCQkJCUZVTkNfTUZfQ0ZHX01BWF9CV19TSElGVCkgKiAxMDA7CisJfQorCURQKE5FVElGX01TR19JRlVQLAorCSAgICJmdW5jICVkOiB2bl9taW5fcmF0ZSAlZCAgdm5fbWF4X3JhdGUgJWQgIHZuX3dlaWdodF9zdW0gJWRcbiIsCisJICAgZnVuYywgdm5fbWluX3JhdGUsIHZuX21heF9yYXRlLCBicC0+dm5fd2VpZ2h0X3N1bSk7CisKKwltZW1zZXQoJm1fcnNfdm4sIDAsIHNpemVvZihzdHJ1Y3QgcmF0ZV9zaGFwaW5nX3ZhcnNfcGVyX3ZuKSk7CisJbWVtc2V0KCZtX2ZhaXJfdm4sIDAsIHNpemVvZihzdHJ1Y3QgZmFpcm5lc3NfdmFyc19wZXJfdm4pKTsKKworCS8qIGdsb2JhbCB2biBjb3VudGVyIC0gbWF4aW1hbCBNYnBzIGZvciB0aGlzIHZuICovCisJbV9yc192bi52bl9jb3VudGVyLnJhdGUgPSB2bl9tYXhfcmF0ZTsKKworCS8qIHF1b3RhIC0gbnVtYmVyIG9mIGJ5dGVzIHRyYW5zbWl0dGVkIGluIHRoaXMgcGVyaW9kICovCisJbV9yc192bi52bl9jb3VudGVyLnF1b3RhID0KKwkJCQkodm5fbWF4X3JhdGUgKiBSU19QRVJJT0RJQ19USU1FT1VUX1VTRUMpIC8gODsKKworCWlmIChicC0+dm5fd2VpZ2h0X3N1bSkgeworCQkvKiBjcmVkaXQgZm9yIGVhY2ggcGVyaW9kIG9mIHRoZSBmYWlybmVzcyBhbGdvcml0aG06CisJCSAgIG51bWJlciBvZiBieXRlcyBpbiBUX0ZBSVIgKHRoZSB2biBzaGFyZSB0aGUgcG9ydCByYXRlKS4KKwkJICAgdm5fd2VpZ2h0X3N1bSBzaG91bGQgbm90IGJlIGxhcmdlciB0aGFuIDEwMDAwLCB0aHVzCisJCSAgIFRfRkFJUl9DT0VGIC8gKDggKiB2bl93ZWlnaHRfc3VtKSB3aWxsIGFsd2F5cyBiZSBncmVhdGVyCisJCSAgIHRoYW4gemVybyAqLworCQltX2ZhaXJfdm4udm5fY3JlZGl0X2RlbHRhID0KKwkJCW1heF90KHUzMiwgKHZuX21pbl9yYXRlICogKFRfRkFJUl9DT0VGIC8KKwkJCQkJCSAgICg4ICogYnAtPnZuX3dlaWdodF9zdW0pKSksCisJCQkgICAgICAoYnAtPmNtbmcuZmFpcl92YXJzLmZhaXJfdGhyZXNob2xkICogMikpOworCQlEUChORVRJRl9NU0dfSUZVUCwgIm1fZmFpcl92bi52bl9jcmVkaXRfZGVsdGEgJWRcbiIsCisJCSAgIG1fZmFpcl92bi52bl9jcmVkaXRfZGVsdGEpOworCX0KKworCS8qIFN0b3JlIGl0IHRvIGludGVybmFsIG1lbW9yeSAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHJhdGVfc2hhcGluZ192YXJzX3Blcl92bikvNDsgaSsrKQorCQlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCisJCSAgICAgICBYU1RPUk1fUkFURV9TSEFQSU5HX1BFUl9WTl9WQVJTX09GRlNFVChmdW5jKSArIGkgKiA0LAorCQkgICAgICAgKCh1MzIgKikoJm1fcnNfdm4pKVtpXSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBmYWlybmVzc192YXJzX3Blcl92bikvNDsgaSsrKQorCQlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCisJCSAgICAgICBYU1RPUk1fRkFJUk5FU1NfUEVSX1ZOX1ZBUlNfT0ZGU0VUKGZ1bmMpICsgaSAqIDQsCisJCSAgICAgICAoKHUzMiAqKSgmbV9mYWlyX3ZuKSlbaV0pOworfQorCisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHVwb24gbGluayBpbnRlcnJ1cHQgKi8KK3N0YXRpYyB2b2lkIGJueDJ4X2xpbmtfYXR0bihzdHJ1Y3QgYm54MnggKmJwKQoreworCXUzMiBwcmV2X2xpbmtfc3RhdHVzID0gYnAtPmxpbmtfdmFycy5saW5rX3N0YXR1czsKKwkvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhcmUgc3luY2VkIHdpdGggdGhlIGN1cnJlbnQgc3RhdGlzdGljcyAqLworCWJueDJ4X3N0YXRzX2hhbmRsZShicCwgU1RBVFNfRVZFTlRfU1RPUCk7CisKKwlibngyeF9saW5rX3VwZGF0ZSgmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycyk7CisKKwlpZiAoYnAtPmxpbmtfdmFycy5saW5rX3VwKSB7CisKKwkJLyogZHJvcGxlc3MgZmxvdyBjb250cm9sICovCisJCWlmIChDSElQX0lTX0UxSChicCkgJiYgYnAtPmRyb3BsZXNzX2ZjKSB7CisJCQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCQkJdTMyIHBhdXNlX2VuYWJsZWQgPSAwOworCisJCQlpZiAoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfVFgpCisJCQkJcGF1c2VfZW5hYmxlZCA9IDE7CisKKwkJCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKKwkJCSAgICAgICBVU1RPUk1fRVRIX1BBVVNFX0VOQUJMRURfT0ZGU0VUKHBvcnQpLAorCQkJICAgICAgIHBhdXNlX2VuYWJsZWQpOworCQl9CisKKwkJaWYgKGJwLT5saW5rX3ZhcnMubWFjX3R5cGUgPT0gTUFDX1RZUEVfQk1BQykgeworCQkJc3RydWN0IGhvc3RfcG9ydF9zdGF0cyAqcHN0YXRzOworCisJCQlwc3RhdHMgPSBibngyeF9zcChicCwgcG9ydF9zdGF0cyk7CisJCQkvKiByZXNldCBvbGQgYm1hYyBzdGF0cyAqLworCQkJbWVtc2V0KCYocHN0YXRzLT5tYWNfc3R4WzBdKSwgMCwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IG1hY19zdHgpKTsKKwkJfQorCQlpZiAoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX09QRU4pCisJCQlibngyeF9zdGF0c19oYW5kbGUoYnAsIFNUQVRTX0VWRU5UX0xJTktfVVApOworCX0KKworCS8qIGluZGljYXRlIGxpbmsgc3RhdHVzIG9ubHkgaWYgbGluayBzdGF0dXMgYWN0dWFsbHkgY2hhbmdlZCAqLworCWlmIChwcmV2X2xpbmtfc3RhdHVzICE9IGJwLT5saW5rX3ZhcnMubGlua19zdGF0dXMpCisJCWJueDJ4X2xpbmtfcmVwb3J0KGJwKTsKKworCWlmIChJU19FMUhNRihicCkpIHsKKwkJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwkJaW50IGZ1bmM7CisJCWludCB2bjsKKworCQkvKiBTZXQgdGhlIGF0dGVudGlvbiB0b3dhcmRzIG90aGVyIGRyaXZlcnMgb24gdGhlIHNhbWUgcG9ydCAqLworCQlmb3IgKHZuID0gVk5fMDsgdm4gPCBFMUhWTl9NQVg7IHZuKyspIHsKKwkJCWlmICh2biA9PSBCUF9FMUhWTihicCkpCisJCQkJY29udGludWU7CisKKwkJCWZ1bmMgPSAoKHZuIDw8IDEpIHwgcG9ydCk7CisJCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMCArCisJCQkgICAgICAgKExJTktfU1lOQ19BVFRFTlRJT05fQklUX0ZVTkNfMCArIGZ1bmMpKjQsIDEpOworCQl9CisKKwkJaWYgKGJwLT5saW5rX3ZhcnMubGlua191cCkgeworCQkJaW50IGk7CisKKwkJCS8qIEluaXQgcmF0ZSBzaGFwaW5nIGFuZCBmYWlybmVzcyBjb250ZXh0cyAqLworCQkJYm54MnhfaW5pdF9wb3J0X21pbm1heChicCk7CisKKwkJCWZvciAodm4gPSBWTl8wOyB2biA8IEUxSFZOX01BWDsgdm4rKykKKwkJCQlibngyeF9pbml0X3ZuX21pbm1heChicCwgMip2biArIHBvcnQpOworCisJCQkvKiBTdG9yZSBpdCB0byBpbnRlcm5hbCBtZW1vcnkgKi8KKwkJCWZvciAoaSA9IDA7CisJCQkgICAgIGkgPCBzaXplb2Yoc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0KSAvIDQ7IGkrKykKKwkJCQlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCisJCQkJICBYU1RPUk1fQ01OR19QRVJfUE9SVF9WQVJTX09GRlNFVChwb3J0KSArIGkqNCwKKwkJCQkgICAgICAgKCh1MzIgKikoJmJwLT5jbW5nKSlbaV0pOworCQl9CisJfQorfQorCit2b2lkIGJueDJ4X19saW5rX3N0YXR1c191cGRhdGUoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpZiAoKGJwLT5zdGF0ZSAhPSBCTlgyWF9TVEFURV9PUEVOKSB8fCAoYnAtPmZsYWdzICYgTUZfRlVOQ19ESVMpKQorCQlyZXR1cm47CisKKwlibngyeF9saW5rX3N0YXR1c191cGRhdGUoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMpOworCisJaWYgKGJwLT5saW5rX3ZhcnMubGlua191cCkKKwkJYm54Mnhfc3RhdHNfaGFuZGxlKGJwLCBTVEFUU19FVkVOVF9MSU5LX1VQKTsKKwllbHNlCisJCWJueDJ4X3N0YXRzX2hhbmRsZShicCwgU1RBVFNfRVZFTlRfU1RPUCk7CisKKwlibngyeF9jYWxjX3ZuX3dlaWdodF9zdW0oYnApOworCisJLyogaW5kaWNhdGUgbGluayBzdGF0dXMgKi8KKwlibngyeF9saW5rX3JlcG9ydChicCk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3BtZl91cGRhdGUoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCXUzMiB2YWw7CisKKwlicC0+cG9ydC5wbWYgPSAxOworCURQKE5FVElGX01TR19MSU5LLCAicG1mICVkXG4iLCBicC0+cG9ydC5wbWYpOworCisJLyogZW5hYmxlIG5pZyBhdHRlbnRpb24gKi8KKwl2YWwgPSAoMHhmZjBmIHwgKDEgPDwgKEJQX0UxSFZOKGJwKSArIDQpKSk7CisJUkVHX1dSKGJwLCBIQ19SRUdfVFJBSUxJTkdfRURHRV8wICsgcG9ydCo4LCB2YWwpOworCVJFR19XUihicCwgSENfUkVHX0xFQURJTkdfRURHRV8wICsgcG9ydCo4LCB2YWwpOworCisJYm54Mnhfc3RhdHNfaGFuZGxlKGJwLCBTVEFUU19FVkVOVF9QTUYpOworfQorCisvKiBlbmQgb2YgTGluayAqLworCisvKiBzbG93IHBhdGggKi8KKworLyoKKyAqIEdlbmVyYWwgc2VydmljZSBmdW5jdGlvbnMKKyAqLworCisvKiBzZW5kIHRoZSBNQ1AgYSByZXF1ZXN0LCBibG9jayB1bnRpbCB0aGVyZSBpcyBhIHJlcGx5ICovCit1MzIgYm54MnhfZndfY29tbWFuZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgY29tbWFuZCkKK3sKKwlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOworCXUzMiBzZXEgPSArK2JwLT5md19zZXE7CisJdTMyIHJjID0gMDsKKwl1MzIgY250ID0gMTsKKwl1OCBkZWxheSA9IENISVBfUkVWX0lTX1NMT1coYnApID8gMTAwIDogMTA7CisKKwltdXRleF9sb2NrKCZicC0+ZndfbWJfbXV0ZXgpOworCVNITUVNX1dSKGJwLCBmdW5jX21iW2Z1bmNdLmRydl9tYl9oZWFkZXIsIChjb21tYW5kIHwgc2VxKSk7CisJRFAoQk5YMlhfTVNHX01DUCwgIndyb3RlIGNvbW1hbmQgKCV4KSB0byBGVyBNQlxuIiwgKGNvbW1hbmQgfCBzZXEpKTsKKworCWRvIHsKKwkJLyogbGV0IHRoZSBGVyBkbyBpdCdzIG1hZ2ljIC4uLiAqLworCQltc2xlZXAoZGVsYXkpOworCisJCXJjID0gU0hNRU1fUkQoYnAsIGZ1bmNfbWJbZnVuY10uZndfbWJfaGVhZGVyKTsKKworCQkvKiBHaXZlIHRoZSBGVyB1cCB0byA1IHNlY29uZCAoNTAwKjEwbXMpICovCisJfSB3aGlsZSAoKHNlcSAhPSAocmMgJiBGV19NU0dfU0VRX05VTUJFUl9NQVNLKSkgJiYgKGNudCsrIDwgNTAwKSk7CisKKwlEUChCTlgyWF9NU0dfTUNQLCAiW2FmdGVyICVkIG1zXSByZWFkICgleCkgc2VxIGlzICgleCkgZnJvbSBGVyBNQlxuIiwKKwkgICBjbnQqZGVsYXksIHJjLCBzZXEpOworCisJLyogaXMgdGhpcyBhIHJlcGx5IHRvIG91ciBjb21tYW5kPyAqLworCWlmIChzZXEgPT0gKHJjICYgRldfTVNHX1NFUV9OVU1CRVJfTUFTSykpCisJCXJjICY9IEZXX01TR19DT0RFX01BU0s7CisJZWxzZSB7CisJCS8qIEZXIEJVRyEgKi8KKwkJQk5YMlhfRVJSKCJGVyBmYWlsZWQgdG8gcmVzcG9uZCFcbiIpOworCQlibngyeF9md19kdW1wKGJwKTsKKwkJcmMgPSAwOworCX0KKwltdXRleF91bmxvY2soJmJwLT5md19tYl9tdXRleCk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2UxaF9kaXNhYmxlKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKworCW5ldGlmX3R4X2Rpc2FibGUoYnAtPmRldik7CisKKwlSRUdfV1IoYnAsIE5JR19SRUdfTExIMF9GVU5DX0VOICsgcG9ydCo4LCAwKTsKKworCW5ldGlmX2NhcnJpZXJfb2ZmKGJwLT5kZXYpOworfQorCitzdGF0aWMgdm9pZCBibngyeF9lMWhfZW5hYmxlKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKworCVJFR19XUihicCwgTklHX1JFR19MTEgwX0ZVTkNfRU4gKyBwb3J0KjgsIDEpOworCisJLyogVHggcXVldWUgc2hvdWxkIGJlIG9ubHkgcmVlbmFibGVkICovCisJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKGJwLT5kZXYpOworCisJLyoKKwkgKiBTaG91bGQgbm90IGNhbGwgbmV0aWZfY2Fycmllcl9vbiBzaW5jZSBpdCB3aWxsIGJlIGNhbGxlZCBpZiB0aGUgbGluaworCSAqIGlzIHVwIHdoZW4gY2hlY2tpbmcgZm9yIGxpbmsgc3RhdGUKKwkgKi8KK30KKworc3RhdGljIHZvaWQgYm54MnhfdXBkYXRlX21pbl9tYXgoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCWludCB2biwgaTsKKworCS8qIEluaXQgcmF0ZSBzaGFwaW5nIGFuZCBmYWlybmVzcyBjb250ZXh0cyAqLworCWJueDJ4X2luaXRfcG9ydF9taW5tYXgoYnApOworCisJYm54MnhfY2FsY192bl93ZWlnaHRfc3VtKGJwKTsKKworCWZvciAodm4gPSBWTl8wOyB2biA8IEUxSFZOX01BWDsgdm4rKykKKwkJYm54MnhfaW5pdF92bl9taW5tYXgoYnAsIDIqdm4gKyBwb3J0KTsKKworCWlmIChicC0+cG9ydC5wbWYpIHsKKwkJaW50IGZ1bmM7CisKKwkJLyogU2V0IHRoZSBhdHRlbnRpb24gdG93YXJkcyBvdGhlciBkcml2ZXJzIG9uIHRoZSBzYW1lIHBvcnQgKi8KKwkJZm9yICh2biA9IFZOXzA7IHZuIDwgRTFIVk5fTUFYOyB2bisrKSB7CisJCQlpZiAodm4gPT0gQlBfRTFIVk4oYnApKQorCQkJCWNvbnRpbnVlOworCisJCQlmdW5jID0gKCh2biA8PCAxKSB8IHBvcnQpOworCQkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzAgKworCQkJICAgICAgIChMSU5LX1NZTkNfQVRURU5USU9OX0JJVF9GVU5DXzAgKyBmdW5jKSo0LCAxKTsKKwkJfQorCisJCS8qIFN0b3JlIGl0IHRvIGludGVybmFsIG1lbW9yeSAqLworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBjbW5nX3N0cnVjdF9wZXJfcG9ydCkgLyA0OyBpKyspCisJCQlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCisJCQkgICAgICAgWFNUT1JNX0NNTkdfUEVSX1BPUlRfVkFSU19PRkZTRVQocG9ydCkgKyBpKjQsCisJCQkgICAgICAgKCh1MzIgKikoJmJwLT5jbW5nKSlbaV0pOworCX0KK30KKworc3RhdGljIHZvaWQgYm54MnhfZGNjX2V2ZW50KHN0cnVjdCBibngyeCAqYnAsIHUzMiBkY2NfZXZlbnQpCit7CisJRFAoQk5YMlhfTVNHX01DUCwgImRjY19ldmVudCAweCV4XG4iLCBkY2NfZXZlbnQpOworCisJaWYgKGRjY19ldmVudCAmIERSVl9TVEFUVVNfRENDX0RJU0FCTEVfRU5BQkxFX1BGKSB7CisKKwkJLyoKKwkJICogVGhpcyBpcyB0aGUgb25seSBwbGFjZSBiZXNpZGVzIHRoZSBmdW5jdGlvbiBpbml0aWFsaXphdGlvbgorCQkgKiB3aGVyZSB0aGUgYnAtPmZsYWdzIGNhbiBjaGFuZ2Ugc28gaXQgaXMgZG9uZSB3aXRob3V0IGFueQorCQkgKiBsb2NrcworCQkgKi8KKwkJaWYgKGJwLT5tZl9jb25maWcgJiBGVU5DX01GX0NGR19GVU5DX0RJU0FCTEVEKSB7CisJCQlEUChORVRJRl9NU0dfSUZET1dOLCAibWZfY2ZnIGZ1bmN0aW9uIGRpc2FibGVkXG4iKTsKKwkJCWJwLT5mbGFncyB8PSBNRl9GVU5DX0RJUzsKKworCQkJYm54MnhfZTFoX2Rpc2FibGUoYnApOworCQl9IGVsc2UgeworCQkJRFAoTkVUSUZfTVNHX0lGVVAsICJtZl9jZmcgZnVuY3Rpb24gZW5hYmxlZFxuIik7CisJCQlicC0+ZmxhZ3MgJj0gfk1GX0ZVTkNfRElTOworCisJCQlibngyeF9lMWhfZW5hYmxlKGJwKTsKKwkJfQorCQlkY2NfZXZlbnQgJj0gfkRSVl9TVEFUVVNfRENDX0RJU0FCTEVfRU5BQkxFX1BGOworCX0KKwlpZiAoZGNjX2V2ZW50ICYgRFJWX1NUQVRVU19EQ0NfQkFORFdJRFRIX0FMTE9DQVRJT04pIHsKKworCQlibngyeF91cGRhdGVfbWluX21heChicCk7CisJCWRjY19ldmVudCAmPSB+RFJWX1NUQVRVU19EQ0NfQkFORFdJRFRIX0FMTE9DQVRJT047CisJfQorCisJLyogUmVwb3J0IHJlc3VsdHMgdG8gTUNQICovCisJaWYgKGRjY19ldmVudCkKKwkJYm54MnhfZndfY29tbWFuZChicCwgRFJWX01TR19DT0RFX0RDQ19GQUlMVVJFKTsKKwllbHNlCisJCWJueDJ4X2Z3X2NvbW1hbmQoYnAsIERSVl9NU0dfQ09ERV9EQ0NfT0spOworfQorCisvKiBtdXN0IGJlIGNhbGxlZCB1bmRlciB0aGUgc3BxIGxvY2sgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV0aF9zcGUgKmJueDJ4X3NwX2dldF9uZXh0KHN0cnVjdCBibngyeCAqYnApCit7CisJc3RydWN0IGV0aF9zcGUgKm5leHRfc3BlID0gYnAtPnNwcV9wcm9kX2JkOworCisJaWYgKGJwLT5zcHFfcHJvZF9iZCA9PSBicC0+c3BxX2xhc3RfYmQpIHsKKwkJYnAtPnNwcV9wcm9kX2JkID0gYnAtPnNwcTsKKwkJYnAtPnNwcV9wcm9kX2lkeCA9IDA7CisJCURQKE5FVElGX01TR19USU1FUiwgImVuZCBvZiBzcHFcbiIpOworCX0gZWxzZSB7CisJCWJwLT5zcHFfcHJvZF9iZCsrOworCQlicC0+c3BxX3Byb2RfaWR4Kys7CisJfQorCXJldHVybiBuZXh0X3NwZTsKK30KKworLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgdGhlIHNwcSBsb2NrICovCitzdGF0aWMgaW5saW5lIHZvaWQgYm54Mnhfc3BfcHJvZF91cGRhdGUoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOworCisJLyogTWFrZSBzdXJlIHRoYXQgQkQgZGF0YSBpcyB1cGRhdGVkIGJlZm9yZSB3cml0aW5nIHRoZSBwcm9kdWNlciAqLworCXdtYigpOworCisJUkVHX1dSKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKyBYU1RPUk1fU1BRX1BST0RfT0ZGU0VUKGZ1bmMpLAorCSAgICAgICBicC0+c3BxX3Byb2RfaWR4KTsKKwltbWlvd2IoKTsKK30KKworLyogdGhlIHNsb3cgcGF0aCBxdWV1ZSBpcyBvZGQgc2luY2UgY29tcGxldGlvbnMgYXJyaXZlIG9uIHRoZSBmYXN0cGF0aCByaW5nICovCitpbnQgYm54Mnhfc3BfcG9zdChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgY29tbWFuZCwgaW50IGNpZCwKKwkJCSB1MzIgZGF0YV9oaSwgdTMyIGRhdGFfbG8sIGludCBjb21tb24pCit7CisJc3RydWN0IGV0aF9zcGUgKnNwZTsKKworI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKKwlpZiAodW5saWtlbHkoYnAtPnBhbmljKSkKKwkJcmV0dXJuIC1FSU87CisjZW5kaWYKKworCXNwaW5fbG9ja19iaCgmYnAtPnNwcV9sb2NrKTsKKworCWlmICghYnAtPnNwcV9sZWZ0KSB7CisJCUJOWDJYX0VSUigiQlVHISBTUFEgcmluZyBmdWxsIVxuIik7CisJCXNwaW5fdW5sb2NrX2JoKCZicC0+c3BxX2xvY2spOworCQlibngyeF9wYW5pYygpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXNwZSA9IGJueDJ4X3NwX2dldF9uZXh0KGJwKTsKKworCS8qIENJRCBuZWVkcyBwb3J0IG51bWJlciB0byBiZSBlbmNvZGVkIGludCBpdCAqLworCXNwZS0+aGRyLmNvbm5fYW5kX2NtZF9kYXRhID0KKwkJCWNwdV90b19sZTMyKChjb21tYW5kIDw8IFNQRV9IRFJfQ01EX0lEX1NISUZUKSB8CisJCQkJICAgIEhXX0NJRChicCwgY2lkKSk7CisJc3BlLT5oZHIudHlwZSA9IGNwdV90b19sZTE2KEVUSF9DT05ORUNUSU9OX1RZUEUpOworCWlmIChjb21tb24pCisJCXNwZS0+aGRyLnR5cGUgfD0KKwkJCWNwdV90b19sZTE2KCgxIDw8IFNQRV9IRFJfQ09NTU9OX1JBTVJPRF9TSElGVCkpOworCisJc3BlLT5kYXRhLm1hY19jb25maWdfYWRkci5oaSA9IGNwdV90b19sZTMyKGRhdGFfaGkpOworCXNwZS0+ZGF0YS5tYWNfY29uZmlnX2FkZHIubG8gPSBjcHVfdG9fbGUzMihkYXRhX2xvKTsKKworCWJwLT5zcHFfbGVmdC0tOworCisJRFAoQk5YMlhfTVNHX1NQLypORVRJRl9NU0dfVElNRVIqLywKKwkgICAiU1BRRVsleF0gKCV4OiV4KSAgY29tbWFuZCAlZCAgaHdfY2lkICV4ICBkYXRhICgleDoleCkgIGxlZnQgJXhcbiIsCisJICAgYnAtPnNwcV9wcm9kX2lkeCwgKHUzMilVNjRfSEkoYnAtPnNwcV9tYXBwaW5nKSwKKwkgICAodTMyKShVNjRfTE8oYnAtPnNwcV9tYXBwaW5nKSArCisJICAgKHZvaWQgKilicC0+c3BxX3Byb2RfYmQgLSAodm9pZCAqKWJwLT5zcHEpLCBjb21tYW5kLAorCSAgIEhXX0NJRChicCwgY2lkKSwgZGF0YV9oaSwgZGF0YV9sbywgYnAtPnNwcV9sZWZ0KTsKKworCWJueDJ4X3NwX3Byb2RfdXBkYXRlKGJwKTsKKwlzcGluX3VubG9ja19iaCgmYnAtPnNwcV9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworLyogYWNxdWlyZSBzcGxpdCBNQ1AgYWNjZXNzIGxvY2sgcmVnaXN0ZXIgKi8KK3N0YXRpYyBpbnQgYm54MnhfYWNxdWlyZV9hbHIoc3RydWN0IGJueDJ4ICpicCkKK3sKKwl1MzIgaiwgdmFsOworCWludCByYyA9IDA7CisKKwltaWdodF9zbGVlcCgpOworCWZvciAoaiA9IDA7IGogPCAxMDAwOyBqKyspIHsKKwkJdmFsID0gKDFVTCA8PCAzMSk7CisJCVJFR19XUihicCwgR1JDQkFTRV9NQ1AgKyAweDljLCB2YWwpOworCQl2YWwgPSBSRUdfUkQoYnAsIEdSQ0JBU0VfTUNQICsgMHg5Yyk7CisJCWlmICh2YWwgJiAoMUwgPDwgMzEpKQorCQkJYnJlYWs7CisKKwkJbXNsZWVwKDUpOworCX0KKwlpZiAoISh2YWwgJiAoMUwgPDwgMzEpKSkgeworCQlCTlgyWF9FUlIoIkNhbm5vdCBhY3F1aXJlIE1DUCBhY2Nlc3MgbG9jayByZWdpc3RlclxuIik7CisJCXJjID0gLUVCVVNZOworCX0KKworCXJldHVybiByYzsKK30KKworLyogcmVsZWFzZSBzcGxpdCBNQ1AgYWNjZXNzIGxvY2sgcmVnaXN0ZXIgKi8KK3N0YXRpYyB2b2lkIGJueDJ4X3JlbGVhc2VfYWxyKHN0cnVjdCBibngyeCAqYnApCit7CisJUkVHX1dSKGJwLCBHUkNCQVNFX01DUCArIDB4OWMsIDApOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBibngyeF91cGRhdGVfZHNiX2lkeChzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCBob3N0X2RlZl9zdGF0dXNfYmxvY2sgKmRlZl9zYiA9IGJwLT5kZWZfc3RhdHVzX2JsazsKKwl1MTYgcmMgPSAwOworCisJYmFycmllcigpOyAvKiBzdGF0dXMgYmxvY2sgaXMgd3JpdHRlbiB0byBieSB0aGUgY2hpcCAqLworCWlmIChicC0+ZGVmX2F0dF9pZHggIT0gZGVmX3NiLT5hdHRlbl9zdGF0dXNfYmxvY2suYXR0bl9iaXRzX2luZGV4KSB7CisJCWJwLT5kZWZfYXR0X2lkeCA9IGRlZl9zYi0+YXR0ZW5fc3RhdHVzX2Jsb2NrLmF0dG5fYml0c19pbmRleDsKKwkJcmMgfD0gMTsKKwl9CisJaWYgKGJwLT5kZWZfY19pZHggIT0gZGVmX3NiLT5jX2RlZl9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4KSB7CisJCWJwLT5kZWZfY19pZHggPSBkZWZfc2ItPmNfZGVmX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXg7CisJCXJjIHw9IDI7CisJfQorCWlmIChicC0+ZGVmX3VfaWR4ICE9IGRlZl9zYi0+dV9kZWZfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCkgeworCQlicC0+ZGVmX3VfaWR4ID0gZGVmX3NiLT51X2RlZl9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4OworCQlyYyB8PSA0OworCX0KKwlpZiAoYnAtPmRlZl94X2lkeCAhPSBkZWZfc2ItPnhfZGVmX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgpIHsKKwkJYnAtPmRlZl94X2lkeCA9IGRlZl9zYi0+eF9kZWZfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleDsKKwkJcmMgfD0gODsKKwl9CisJaWYgKGJwLT5kZWZfdF9pZHggIT0gZGVmX3NiLT50X2RlZl9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4KSB7CisJCWJwLT5kZWZfdF9pZHggPSBkZWZfc2ItPnRfZGVmX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXg7CisJCXJjIHw9IDE2OworCX0KKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBzbG93IHBhdGggc2VydmljZSBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZCBibngyeF9hdHRuX2ludF9hc3NlcnRlZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYXNzZXJ0ZWQpCit7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwl1MzIgaGNfYWRkciA9IChIQ19SRUdfQ09NTUFORF9SRUcgKyBwb3J0KjMyICsKKwkJICAgICAgIENPTU1BTkRfUkVHX0FUVE5fQklUU19TRVQpOworCXUzMiBhZXVfYWRkciA9IHBvcnQgPyBNSVNDX1JFR19BRVVfTUFTS19BVFROX0ZVTkNfMSA6CisJCQkgICAgICBNSVNDX1JFR19BRVVfTUFTS19BVFROX0ZVTkNfMDsKKwl1MzIgbmlnX2ludF9tYXNrX2FkZHIgPSBwb3J0ID8gTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMSA6CisJCQkJICAgICAgIE5JR19SRUdfTUFTS19JTlRFUlJVUFRfUE9SVDA7CisJdTMyIGFldV9tYXNrOworCXUzMiBuaWdfbWFzayA9IDA7CisKKwlpZiAoYnAtPmF0dG5fc3RhdGUgJiBhc3NlcnRlZCkKKwkJQk5YMlhfRVJSKCJJR1UgRVJST1JcbiIpOworCisJYm54MnhfYWNxdWlyZV9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFX1BPUlQwX0FUVF9NQVNLICsgcG9ydCk7CisJYWV1X21hc2sgPSBSRUdfUkQoYnAsIGFldV9hZGRyKTsKKworCURQKE5FVElGX01TR19IVywgImFldV9tYXNrICV4ICBuZXdseSBhc3NlcnRlZCAleFxuIiwKKwkgICBhZXVfbWFzaywgYXNzZXJ0ZWQpOworCWFldV9tYXNrICY9IH4oYXNzZXJ0ZWQgJiAweDNmZik7CisJRFAoTkVUSUZfTVNHX0hXLCAibmV3IG1hc2sgJXhcbiIsIGFldV9tYXNrKTsKKworCVJFR19XUihicCwgYWV1X2FkZHIsIGFldV9tYXNrKTsKKwlibngyeF9yZWxlYXNlX2h3X2xvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfUE9SVDBfQVRUX01BU0sgKyBwb3J0KTsKKworCURQKE5FVElGX01TR19IVywgImF0dG5fc3RhdGUgJXhcbiIsIGJwLT5hdHRuX3N0YXRlKTsKKwlicC0+YXR0bl9zdGF0ZSB8PSBhc3NlcnRlZDsKKwlEUChORVRJRl9NU0dfSFcsICJuZXcgc3RhdGUgJXhcbiIsIGJwLT5hdHRuX3N0YXRlKTsKKworCWlmIChhc3NlcnRlZCAmIEFUVE5fSEFSRF9XSVJFRF9NQVNLKSB7CisJCWlmIChhc3NlcnRlZCAmIEFUVE5fTklHX0ZPUl9GVU5DKSB7CisKKwkJCWJueDJ4X2FjcXVpcmVfcGh5X2xvY2soYnApOworCisJCQkvKiBzYXZlIG5pZyBpbnRlcnJ1cHQgbWFzayAqLworCQkJbmlnX21hc2sgPSBSRUdfUkQoYnAsIG5pZ19pbnRfbWFza19hZGRyKTsKKwkJCVJFR19XUihicCwgbmlnX2ludF9tYXNrX2FkZHIsIDApOworCisJCQlibngyeF9saW5rX2F0dG4oYnApOworCisJCQkvKiBoYW5kbGUgdW5pY29yZSBhdHRuPyAqLworCQl9CisJCWlmIChhc3NlcnRlZCAmIEFUVE5fU1dfVElNRVJfNF9GVU5DKQorCQkJRFAoTkVUSUZfTVNHX0hXLCAiQVRUTl9TV19USU1FUl80X0ZVTkMhXG4iKTsKKworCQlpZiAoYXNzZXJ0ZWQgJiBHUElPXzJfRlVOQykKKwkJCURQKE5FVElGX01TR19IVywgIkdQSU9fMl9GVU5DIVxuIik7CisKKwkJaWYgKGFzc2VydGVkICYgR1BJT18zX0ZVTkMpCisJCQlEUChORVRJRl9NU0dfSFcsICJHUElPXzNfRlVOQyFcbiIpOworCisJCWlmIChhc3NlcnRlZCAmIEdQSU9fNF9GVU5DKQorCQkJRFAoTkVUSUZfTVNHX0hXLCAiR1BJT180X0ZVTkMhXG4iKTsKKworCQlpZiAocG9ydCA9PSAwKSB7CisJCQlpZiAoYXNzZXJ0ZWQgJiBBVFROX0dFTkVSQUxfQVRUTl8xKSB7CisJCQkJRFAoTkVUSUZfTVNHX0hXLCAiQVRUTl9HRU5FUkFMX0FUVE5fMSFcbiIpOworCQkJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8xLCAweDApOworCQkJfQorCQkJaWYgKGFzc2VydGVkICYgQVRUTl9HRU5FUkFMX0FUVE5fMikgeworCQkJCURQKE5FVElGX01TR19IVywgIkFUVE5fR0VORVJBTF9BVFROXzIhXG4iKTsKKwkJCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMiwgMHgwKTsKKwkJCX0KKwkJCWlmIChhc3NlcnRlZCAmIEFUVE5fR0VORVJBTF9BVFROXzMpIHsKKwkJCQlEUChORVRJRl9NU0dfSFcsICJBVFROX0dFTkVSQUxfQVRUTl8zIVxuIik7CisJCQkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzMsIDB4MCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoYXNzZXJ0ZWQgJiBBVFROX0dFTkVSQUxfQVRUTl80KSB7CisJCQkJRFAoTkVUSUZfTVNHX0hXLCAiQVRUTl9HRU5FUkFMX0FUVE5fNCFcbiIpOworCQkJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl80LCAweDApOworCQkJfQorCQkJaWYgKGFzc2VydGVkICYgQVRUTl9HRU5FUkFMX0FUVE5fNSkgeworCQkJCURQKE5FVElGX01TR19IVywgIkFUVE5fR0VORVJBTF9BVFROXzUhXG4iKTsKKwkJCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fNSwgMHgwKTsKKwkJCX0KKwkJCWlmIChhc3NlcnRlZCAmIEFUVE5fR0VORVJBTF9BVFROXzYpIHsKKwkJCQlEUChORVRJRl9NU0dfSFcsICJBVFROX0dFTkVSQUxfQVRUTl82IVxuIik7CisJCQkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzYsIDB4MCk7CisJCQl9CisJCX0KKworCX0gLyogaWYgaGFyZHdpcmVkICovCisKKwlEUChORVRJRl9NU0dfSFcsICJhYm91dCB0byBtYXNrIDB4JTA4eCBhdCBIQyBhZGRyIDB4JXhcbiIsCisJICAgYXNzZXJ0ZWQsIGhjX2FkZHIpOworCVJFR19XUihicCwgaGNfYWRkciwgYXNzZXJ0ZWQpOworCisJLyogbm93IHNldCBiYWNrIHRoZSBtYXNrICovCisJaWYgKGFzc2VydGVkICYgQVRUTl9OSUdfRk9SX0ZVTkMpIHsKKwkJUkVHX1dSKGJwLCBuaWdfaW50X21hc2tfYWRkciwgbmlnX21hc2spOworCQlibngyeF9yZWxlYXNlX3BoeV9sb2NrKGJwKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9mYW5fZmFpbHVyZShzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisKKwkvKiBtYXJrIHRoZSBmYWlsdXJlICovCisJYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnICY9IH5QT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9NQVNLOworCWJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyB8PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9GQUlMVVJFOworCVNITUVNX1dSKGJwLCBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5leHRlcm5hbF9waHlfY29uZmlnLAorCQkgYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKTsKKworCS8qIGxvZyB0aGUgZmFpbHVyZSAqLworCW5ldGRldl9lcnIoYnAtPmRldiwgIkZhbiBGYWlsdXJlIG9uIE5ldHdvcmsgQ29udHJvbGxlciBoYXMgY2F1c2VkIgorCSAgICAgICAiIHRoZSBkcml2ZXIgdG8gc2h1dGRvd24gdGhlIGNhcmQgdG8gcHJldmVudCBwZXJtYW5lbnQiCisJICAgICAgICIgZGFtYWdlLiAgUGxlYXNlIGNvbnRhY3QgT0VNIFN1cHBvcnQgZm9yIGFzc2lzdGFuY2VcbiIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfYXR0bl9pbnRfZGVhc3NlcnRlZDAoc3RydWN0IGJueDJ4ICpicCwgdTMyIGF0dG4pCit7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwlpbnQgcmVnX29mZnNldDsKKwl1MzIgdmFsLCBzd2FwX3ZhbCwgc3dhcF9vdmVycmlkZTsKKworCXJlZ19vZmZzZXQgPSAocG9ydCA/IE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMV9PVVRfMCA6CisJCQkgICAgIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMF9PVVRfMCk7CisKKwlpZiAoYXR0biAmIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1NQSU81KSB7CisKKwkJdmFsID0gUkVHX1JEKGJwLCByZWdfb2Zmc2V0KTsKKwkJdmFsICY9IH5BRVVfSU5QVVRTX0FUVE5fQklUU19TUElPNTsKKwkJUkVHX1dSKGJwLCByZWdfb2Zmc2V0LCB2YWwpOworCisJCUJOWDJYX0VSUigiU1BJTzUgaHcgYXR0ZW50aW9uXG4iKTsKKworCQkvKiBGYW4gZmFpbHVyZSBhdHRlbnRpb24gKi8KKwkJc3dpdGNoIChYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpKSB7CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKKwkJCS8qIExvdyBwb3dlciBtb2RlIGlzIGNvbnRyb2xsZWQgYnkgR1BJTyAyICovCisJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18yLAorCQkJCSAgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1csIHBvcnQpOworCQkJLyogVGhlIFBIWSByZXNldCBpcyBjb250cm9sbGVkIGJ5IEdQSU8gMSAqLworCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMSwKKwkJCQkgICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfTE9XLCBwb3J0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNzoKKwkJCS8qIFRoZSBQSFkgcmVzZXQgaXMgY29udHJvbGxlZCBieSBHUElPIDEgKi8KKwkJCS8qIGZha2UgdGhlIHBvcnQgbnVtYmVyIHRvIGNhbmNlbCB0aGUgc3dhcCBkb25lIGluCisJCQkgICBzZXRfZ3BpbygpICovCisJCQlzd2FwX3ZhbCA9IFJFR19SRChicCwgTklHX1JFR19QT1JUX1NXQVApOworCQkJc3dhcF9vdmVycmlkZSA9IFJFR19SRChicCwgTklHX1JFR19TVFJBUF9PVkVSUklERSk7CisJCQlwb3J0ID0gKHN3YXBfdmFsICYmIHN3YXBfb3ZlcnJpZGUpIF4gMTsKKwkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzEsCisJCQkJICAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0xPVywgcG9ydCk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJYm54MnhfZmFuX2ZhaWx1cmUoYnApOworCX0KKworCWlmIChhdHRuICYgKEFFVV9JTlBVVFNfQVRUTl9CSVRTX0dQSU8zX0ZVTkNUSU9OXzAgfAorCQkgICAgQUVVX0lOUFVUU19BVFROX0JJVFNfR1BJTzNfRlVOQ1RJT05fMSkpIHsKKwkJYm54MnhfYWNxdWlyZV9waHlfbG9jayhicCk7CisJCWJueDJ4X2hhbmRsZV9tb2R1bGVfZGV0ZWN0X2ludCgmYnAtPmxpbmtfcGFyYW1zKTsKKwkJYm54MnhfcmVsZWFzZV9waHlfbG9jayhicCk7CisJfQorCisJaWYgKGF0dG4gJiBIV19JTlRFUlJVVF9BU1NFUlRfU0VUXzApIHsKKworCQl2YWwgPSBSRUdfUkQoYnAsIHJlZ19vZmZzZXQpOworCQl2YWwgJj0gfihhdHRuICYgSFdfSU5URVJSVVRfQVNTRVJUX1NFVF8wKTsKKwkJUkVHX1dSKGJwLCByZWdfb2Zmc2V0LCB2YWwpOworCisJCUJOWDJYX0VSUigiRkFUQUwgSFcgYmxvY2sgYXR0ZW50aW9uIHNldDAgMHgleFxuIiwKKwkJCSAgKHUzMikoYXR0biAmIEhXX0lOVEVSUlVUX0FTU0VSVF9TRVRfMCkpOworCQlibngyeF9wYW5pYygpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X2F0dG5faW50X2RlYXNzZXJ0ZWQxKHN0cnVjdCBibngyeCAqYnAsIHUzMiBhdHRuKQoreworCXUzMiB2YWw7CisKKwlpZiAoYXR0biAmIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0RPT1JCRUxMUV9IV19JTlRFUlJVUFQpIHsKKworCQl2YWwgPSBSRUdfUkQoYnAsIERPUlFfUkVHX0RPUlFfSU5UX1NUU19DTFIpOworCQlCTlgyWF9FUlIoIkRCIGh3IGF0dGVudGlvbiAweCV4XG4iLCB2YWwpOworCQkvKiBET1JRIGRpc2NhcmQgYXR0ZW50aW9uICovCisJCWlmICh2YWwgJiAweDIpCisJCQlCTlgyWF9FUlIoIkZBVEFMIGVycm9yIGZyb20gRE9SUVxuIik7CisJfQorCisJaWYgKGF0dG4gJiBIV19JTlRFUlJVVF9BU1NFUlRfU0VUXzEpIHsKKworCQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCQlpbnQgcmVnX29mZnNldDsKKworCQlyZWdfb2Zmc2V0ID0gKHBvcnQgPyBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzFfT1VUXzEgOgorCQkJCSAgICAgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18wX09VVF8xKTsKKworCQl2YWwgPSBSRUdfUkQoYnAsIHJlZ19vZmZzZXQpOworCQl2YWwgJj0gfihhdHRuICYgSFdfSU5URVJSVVRfQVNTRVJUX1NFVF8xKTsKKwkJUkVHX1dSKGJwLCByZWdfb2Zmc2V0LCB2YWwpOworCisJCUJOWDJYX0VSUigiRkFUQUwgSFcgYmxvY2sgYXR0ZW50aW9uIHNldDEgMHgleFxuIiwKKwkJCSAgKHUzMikoYXR0biAmIEhXX0lOVEVSUlVUX0FTU0VSVF9TRVRfMSkpOworCQlibngyeF9wYW5pYygpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X2F0dG5faW50X2RlYXNzZXJ0ZWQyKHN0cnVjdCBibngyeCAqYnAsIHUzMiBhdHRuKQoreworCXUzMiB2YWw7CisKKwlpZiAoYXR0biAmIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0NGQ19IV19JTlRFUlJVUFQpIHsKKworCQl2YWwgPSBSRUdfUkQoYnAsIENGQ19SRUdfQ0ZDX0lOVF9TVFNfQ0xSKTsKKwkJQk5YMlhfRVJSKCJDRkMgaHcgYXR0ZW50aW9uIDB4JXhcbiIsIHZhbCk7CisJCS8qIENGQyBlcnJvciBhdHRlbnRpb24gKi8KKwkJaWYgKHZhbCAmIDB4MikKKwkJCUJOWDJYX0VSUigiRkFUQUwgZXJyb3IgZnJvbSBDRkNcbiIpOworCX0KKworCWlmIChhdHRuICYgQUVVX0lOUFVUU19BVFROX0JJVFNfUFhQX0hXX0lOVEVSUlVQVCkgeworCisJCXZhbCA9IFJFR19SRChicCwgUFhQX1JFR19QWFBfSU5UX1NUU19DTFJfMCk7CisJCUJOWDJYX0VSUigiUFhQIGh3IGF0dGVudGlvbiAweCV4XG4iLCB2YWwpOworCQkvKiBSUV9VU0RNRFBfRklGT19PVkVSRkxPVyAqLworCQlpZiAodmFsICYgMHgxODAwMCkKKwkJCUJOWDJYX0VSUigiRkFUQUwgZXJyb3IgZnJvbSBQWFBcbiIpOworCX0KKworCWlmIChhdHRuICYgSFdfSU5URVJSVVRfQVNTRVJUX1NFVF8yKSB7CisKKwkJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwkJaW50IHJlZ19vZmZzZXQ7CisKKwkJcmVnX29mZnNldCA9IChwb3J0ID8gTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18xX09VVF8yIDoKKwkJCQkgICAgIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMF9PVVRfMik7CisKKwkJdmFsID0gUkVHX1JEKGJwLCByZWdfb2Zmc2V0KTsKKwkJdmFsICY9IH4oYXR0biAmIEhXX0lOVEVSUlVUX0FTU0VSVF9TRVRfMik7CisJCVJFR19XUihicCwgcmVnX29mZnNldCwgdmFsKTsKKworCQlCTlgyWF9FUlIoIkZBVEFMIEhXIGJsb2NrIGF0dGVudGlvbiBzZXQyIDB4JXhcbiIsCisJCQkgICh1MzIpKGF0dG4gJiBIV19JTlRFUlJVVF9BU1NFUlRfU0VUXzIpKTsKKwkJYm54MnhfcGFuaWMoKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9hdHRuX2ludF9kZWFzc2VydGVkMyhzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYXR0bikKK3sKKwl1MzIgdmFsOworCisJaWYgKGF0dG4gJiBFVkVSRVNUX0dFTl9BVFROX0lOX1VTRV9NQVNLKSB7CisKKwkJaWYgKGF0dG4gJiBCTlgyWF9QTUZfTElOS19BU1NFUlQpIHsKKwkJCWludCBmdW5jID0gQlBfRlVOQyhicCk7CisKKwkJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8xMiArIGZ1bmMqNCwgMCk7CisJCQlicC0+bWZfY29uZmlnID0gU0hNRU1fUkQoYnAsCisJCQkJCSAgIG1mX2NmZy5mdW5jX21mX2NvbmZpZ1tmdW5jXS5jb25maWcpOworCQkJdmFsID0gU0hNRU1fUkQoYnAsIGZ1bmNfbWJbZnVuY10uZHJ2X3N0YXR1cyk7CisJCQlpZiAodmFsICYgRFJWX1NUQVRVU19EQ0NfRVZFTlRfTUFTSykKKwkJCQlibngyeF9kY2NfZXZlbnQoYnAsCisJCQkJCSAgICAodmFsICYgRFJWX1NUQVRVU19EQ0NfRVZFTlRfTUFTSykpOworCQkJYm54MnhfX2xpbmtfc3RhdHVzX3VwZGF0ZShicCk7CisJCQlpZiAoKGJwLT5wb3J0LnBtZiA9PSAwKSAmJiAodmFsICYgRFJWX1NUQVRVU19QTUYpKQorCQkJCWJueDJ4X3BtZl91cGRhdGUoYnApOworCisJCX0gZWxzZSBpZiAoYXR0biAmIEJOWDJYX01DX0FTU0VSVF9CSVRTKSB7CisKKwkJCUJOWDJYX0VSUigiTUMgYXNzZXJ0IVxuIik7CisJCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMTAsIDApOworCQkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzksIDApOworCQkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzgsIDApOworCQkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzcsIDApOworCQkJYm54MnhfcGFuaWMoKTsKKworCQl9IGVsc2UgaWYgKGF0dG4gJiBCTlgyWF9NQ1BfQVNTRVJUKSB7CisKKwkJCUJOWDJYX0VSUigiTUNQIGFzc2VydCFcbiIpOworCQkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzExLCAwKTsKKwkJCWJueDJ4X2Z3X2R1bXAoYnApOworCisJCX0gZWxzZQorCQkJQk5YMlhfRVJSKCJVbmtub3duIEhXIGFzc2VydCEgKGF0dG4gMHgleClcbiIsIGF0dG4pOworCX0KKworCWlmIChhdHRuICYgRVZFUkVTVF9MQVRDSEVEX0FUVE5fSU5fVVNFX01BU0spIHsKKwkJQk5YMlhfRVJSKCJMQVRDSEVEIGF0dGVudGlvbiAweCUwOHggKG1hc2tlZClcbiIsIGF0dG4pOworCQlpZiAoYXR0biAmIEJOWDJYX0dSQ19USU1FT1VUKSB7CisJCQl2YWwgPSBDSElQX0lTX0UxSChicCkgPworCQkJCVJFR19SRChicCwgTUlTQ19SRUdfR1JDX1RJTUVPVVRfQVRUTikgOiAwOworCQkJQk5YMlhfRVJSKCJHUkMgdGltZS1vdXQgMHglMDh4XG4iLCB2YWwpOworCQl9CisJCWlmIChhdHRuICYgQk5YMlhfR1JDX1JTVikgeworCQkJdmFsID0gQ0hJUF9JU19FMUgoYnApID8KKwkJCQlSRUdfUkQoYnAsIE1JU0NfUkVHX0dSQ19SU1ZfQVRUTikgOiAwOworCQkJQk5YMlhfRVJSKCJHUkMgcmVzZXJ2ZWQgMHglMDh4XG4iLCB2YWwpOworCQl9CisJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0NMUl9MQVRDSF9TSUdOQUwsIDB4N2ZmKTsKKwl9Cit9CisKKyNkZWZpbmUgQk5YMlhfTUlTQ19HRU5fUkVHICAgICAgTUlTQ19SRUdfR0VORVJJQ19QT1JfMQorI2RlZmluZSBMT0FEX0NPVU5URVJfQklUUwkxNiAvKiBOdW1iZXIgb2YgYml0cyBmb3IgbG9hZCBjb3VudGVyICovCisjZGVmaW5lIExPQURfQ09VTlRFUl9NQVNLCSgoKHUzMikweDEgPDwgTE9BRF9DT1VOVEVSX0JJVFMpIC0gMSkKKyNkZWZpbmUgUkVTRVRfRE9ORV9GTEFHX01BU0sJKH5MT0FEX0NPVU5URVJfTUFTSykKKyNkZWZpbmUgUkVTRVRfRE9ORV9GTEFHX1NISUZUCUxPQURfQ09VTlRFUl9CSVRTCisjZGVmaW5lIENISVBfUEFSSVRZX1NVUFBPUlRFRChicCkgICAoQ0hJUF9JU19FMShicCkgfHwgQ0hJUF9JU19FMUgoYnApKQorLyoKKyAqIHNob3VsZCBiZSBydW4gdW5kZXIgcnRubCBsb2NrCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9zZXRfcmVzZXRfZG9uZShzdHJ1Y3QgYm54MnggKmJwKQoreworCXUzMiB2YWwJPSBSRUdfUkQoYnAsIEJOWDJYX01JU0NfR0VOX1JFRyk7CisJdmFsICY9IH4oMSA8PCBSRVNFVF9ET05FX0ZMQUdfU0hJRlQpOworCVJFR19XUihicCwgQk5YMlhfTUlTQ19HRU5fUkVHLCB2YWwpOworCWJhcnJpZXIoKTsKKwltbWlvd2IoKTsKK30KKworLyoKKyAqIHNob3VsZCBiZSBydW4gdW5kZXIgcnRubCBsb2NrCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9zZXRfcmVzZXRfaW5fcHJvZ3Jlc3Moc3RydWN0IGJueDJ4ICpicCkKK3sKKwl1MzIgdmFsCT0gUkVHX1JEKGJwLCBCTlgyWF9NSVNDX0dFTl9SRUcpOworCXZhbCB8PSAoMSA8PCAxNik7CisJUkVHX1dSKGJwLCBCTlgyWF9NSVNDX0dFTl9SRUcsIHZhbCk7CisJYmFycmllcigpOworCW1taW93YigpOworfQorCisvKgorICogc2hvdWxkIGJlIHJ1biB1bmRlciBydG5sIGxvY2sKKyAqLworYm9vbCBibngyeF9yZXNldF9pc19kb25lKHN0cnVjdCBibngyeCAqYnApCit7CisJdTMyIHZhbAk9IFJFR19SRChicCwgQk5YMlhfTUlTQ19HRU5fUkVHKTsKKwlEUChORVRJRl9NU0dfSFcsICJHRU5fUkVHX1ZBTD0weCUwOHhcbiIsIHZhbCk7CisJcmV0dXJuICh2YWwgJiBSRVNFVF9ET05FX0ZMQUdfTUFTSykgPyBmYWxzZSA6IHRydWU7Cit9CisKKy8qCisgKiBzaG91bGQgYmUgcnVuIHVuZGVyIHJ0bmwgbG9jaworICovCitpbmxpbmUgdm9pZCBibngyeF9pbmNfbG9hZF9jbnQoc3RydWN0IGJueDJ4ICpicCkKK3sKKwl1MzIgdmFsMSwgdmFsID0gUkVHX1JEKGJwLCBCTlgyWF9NSVNDX0dFTl9SRUcpOworCisJRFAoTkVUSUZfTVNHX0hXLCAiT2xkIEdFTl9SRUdfVkFMPTB4JTA4eFxuIiwgdmFsKTsKKworCXZhbDEgPSAoKHZhbCAmIExPQURfQ09VTlRFUl9NQVNLKSArIDEpICYgTE9BRF9DT1VOVEVSX01BU0s7CisJUkVHX1dSKGJwLCBCTlgyWF9NSVNDX0dFTl9SRUcsICh2YWwgJiBSRVNFVF9ET05FX0ZMQUdfTUFTSykgfCB2YWwxKTsKKwliYXJyaWVyKCk7CisJbW1pb3diKCk7Cit9CisKKy8qCisgKiBzaG91bGQgYmUgcnVuIHVuZGVyIHJ0bmwgbG9jaworICovCit1MzIgYm54MnhfZGVjX2xvYWRfY250KHN0cnVjdCBibngyeCAqYnApCit7CisJdTMyIHZhbDEsIHZhbCA9IFJFR19SRChicCwgQk5YMlhfTUlTQ19HRU5fUkVHKTsKKworCURQKE5FVElGX01TR19IVywgIk9sZCBHRU5fUkVHX1ZBTD0weCUwOHhcbiIsIHZhbCk7CisKKwl2YWwxID0gKCh2YWwgJiBMT0FEX0NPVU5URVJfTUFTSykgLSAxKSAmIExPQURfQ09VTlRFUl9NQVNLOworCVJFR19XUihicCwgQk5YMlhfTUlTQ19HRU5fUkVHLCAodmFsICYgUkVTRVRfRE9ORV9GTEFHX01BU0spIHwgdmFsMSk7CisJYmFycmllcigpOworCW1taW93YigpOworCisJcmV0dXJuIHZhbDE7Cit9CisKKy8qCisgKiBzaG91bGQgYmUgcnVuIHVuZGVyIHJ0bmwgbG9jaworICovCitzdGF0aWMgaW5saW5lIHUzMiBibngyeF9nZXRfbG9hZF9jbnQoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlyZXR1cm4gUkVHX1JEKGJwLCBCTlgyWF9NSVNDX0dFTl9SRUcpICYgTE9BRF9DT1VOVEVSX01BU0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9jbGVhcl9sb2FkX2NudChzdHJ1Y3QgYm54MnggKmJwKQoreworCXUzMiB2YWwgPSBSRUdfUkQoYnAsIEJOWDJYX01JU0NfR0VOX1JFRyk7CisJUkVHX1dSKGJwLCBCTlgyWF9NSVNDX0dFTl9SRUcsIHZhbCAmICh+TE9BRF9DT1VOVEVSX01BU0spKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9wcmludF9uZXh0X2Jsb2NrKGludCBpZHgsIGNvbnN0IGNoYXIgKmJsaykKK3sKKwlpZiAoaWR4KQorCQlwcl9jb250KCIsICIpOworCXByX2NvbnQoIiVzIiwgYmxrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYm54MnhfcHJpbnRfYmxvY2tzX3dpdGhfcGFyaXR5MCh1MzIgc2lnLCBpbnQgcGFyX251bSkKK3sKKwlpbnQgaSA9IDA7CisJdTMyIGN1cl9iaXQgPSAwOworCWZvciAoaSA9IDA7IHNpZzsgaSsrKSB7CisJCWN1cl9iaXQgPSAoKHUzMikweDEgPDwgaSk7CisJCWlmIChzaWcgJiBjdXJfYml0KSB7CisJCQlzd2l0Y2ggKGN1cl9iaXQpIHsKKwkJCWNhc2UgQUVVX0lOUFVUU19BVFROX0JJVFNfQlJCX1BBUklUWV9FUlJPUjoKKwkJCQlfcHJpbnRfbmV4dF9ibG9jayhwYXJfbnVtKyssICJCUkIiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQUVVX0lOUFVUU19BVFROX0JJVFNfUEFSU0VSX1BBUklUWV9FUlJPUjoKKwkJCQlfcHJpbnRfbmV4dF9ibG9jayhwYXJfbnVtKyssICJQQVJTRVIiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQUVVX0lOUFVUU19BVFROX0JJVFNfVFNETV9QQVJJVFlfRVJST1I6CisJCQkJX3ByaW50X25leHRfYmxvY2socGFyX251bSsrLCAiVFNETSIpOworCQkJCWJyZWFrOworCQkJY2FzZSBBRVVfSU5QVVRTX0FUVE5fQklUU19TRUFSQ0hFUl9QQVJJVFlfRVJST1I6CisJCQkJX3ByaW50X25leHRfYmxvY2socGFyX251bSsrLCAiU0VBUkNIRVIiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQUVVX0lOUFVUU19BVFROX0JJVFNfVFNFTUlfUEFSSVRZX0VSUk9SOgorCQkJCV9wcmludF9uZXh0X2Jsb2NrKHBhcl9udW0rKywgIlRTRU1JIik7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIENsZWFyIHRoZSBiaXQgKi8KKwkJCXNpZyAmPSB+Y3VyX2JpdDsKKwkJfQorCX0KKworCXJldHVybiBwYXJfbnVtOworfQorCitzdGF0aWMgaW5saW5lIGludCBibngyeF9wcmludF9ibG9ja3Nfd2l0aF9wYXJpdHkxKHUzMiBzaWcsIGludCBwYXJfbnVtKQoreworCWludCBpID0gMDsKKwl1MzIgY3VyX2JpdCA9IDA7CisJZm9yIChpID0gMDsgc2lnOyBpKyspIHsKKwkJY3VyX2JpdCA9ICgodTMyKTB4MSA8PCBpKTsKKwkJaWYgKHNpZyAmIGN1cl9iaXQpIHsKKwkJCXN3aXRjaCAoY3VyX2JpdCkgeworCQkJY2FzZSBBRVVfSU5QVVRTX0FUVE5fQklUU19QQkNMSUVOVF9QQVJJVFlfRVJST1I6CisJCQkJX3ByaW50X25leHRfYmxvY2socGFyX251bSsrLCAiUEJDTElFTlQiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQUVVX0lOUFVUU19BVFROX0JJVFNfUU1fUEFSSVRZX0VSUk9SOgorCQkJCV9wcmludF9uZXh0X2Jsb2NrKHBhcl9udW0rKywgIlFNIik7CisJCQkJYnJlYWs7CisJCQljYXNlIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1hTRE1fUEFSSVRZX0VSUk9SOgorCQkJCV9wcmludF9uZXh0X2Jsb2NrKHBhcl9udW0rKywgIlhTRE0iKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQUVVX0lOUFVUU19BVFROX0JJVFNfWFNFTUlfUEFSSVRZX0VSUk9SOgorCQkJCV9wcmludF9uZXh0X2Jsb2NrKHBhcl9udW0rKywgIlhTRU1JIik7CisJCQkJYnJlYWs7CisJCQljYXNlIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0RPT1JCRUxMUV9QQVJJVFlfRVJST1I6CisJCQkJX3ByaW50X25leHRfYmxvY2socGFyX251bSsrLCAiRE9PUkJFTExRIik7CisJCQkJYnJlYWs7CisJCQljYXNlIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1ZBVVhfUENJX0NPUkVfUEFSSVRZX0VSUk9SOgorCQkJCV9wcmludF9uZXh0X2Jsb2NrKHBhcl9udW0rKywgIlZBVVggUENJIENPUkUiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQUVVX0lOUFVUU19BVFROX0JJVFNfREVCVUdfUEFSSVRZX0VSUk9SOgorCQkJCV9wcmludF9uZXh0X2Jsb2NrKHBhcl9udW0rKywgIkRFQlVHIik7CisJCQkJYnJlYWs7CisJCQljYXNlIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1VTRE1fUEFSSVRZX0VSUk9SOgorCQkJCV9wcmludF9uZXh0X2Jsb2NrKHBhcl9udW0rKywgIlVTRE0iKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQUVVX0lOUFVUU19BVFROX0JJVFNfVVNFTUlfUEFSSVRZX0VSUk9SOgorCQkJCV9wcmludF9uZXh0X2Jsb2NrKHBhcl9udW0rKywgIlVTRU1JIik7CisJCQkJYnJlYWs7CisJCQljYXNlIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1VQQl9QQVJJVFlfRVJST1I6CisJCQkJX3ByaW50X25leHRfYmxvY2socGFyX251bSsrLCAiVVBCIik7CisJCQkJYnJlYWs7CisJCQljYXNlIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0NTRE1fUEFSSVRZX0VSUk9SOgorCQkJCV9wcmludF9uZXh0X2Jsb2NrKHBhcl9udW0rKywgIkNTRE0iKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyogQ2xlYXIgdGhlIGJpdCAqLworCQkJc2lnICY9IH5jdXJfYml0OworCQl9CisJfQorCisJcmV0dXJuIHBhcl9udW07Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGJueDJ4X3ByaW50X2Jsb2Nrc193aXRoX3Bhcml0eTIodTMyIHNpZywgaW50IHBhcl9udW0pCit7CisJaW50IGkgPSAwOworCXUzMiBjdXJfYml0ID0gMDsKKwlmb3IgKGkgPSAwOyBzaWc7IGkrKykgeworCQljdXJfYml0ID0gKCh1MzIpMHgxIDw8IGkpOworCQlpZiAoc2lnICYgY3VyX2JpdCkgeworCQkJc3dpdGNoIChjdXJfYml0KSB7CisJCQljYXNlIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0NTRU1JX1BBUklUWV9FUlJPUjoKKwkJCQlfcHJpbnRfbmV4dF9ibG9jayhwYXJfbnVtKyssICJDU0VNSSIpOworCQkJCWJyZWFrOworCQkJY2FzZSBBRVVfSU5QVVRTX0FUVE5fQklUU19QWFBfUEFSSVRZX0VSUk9SOgorCQkJCV9wcmludF9uZXh0X2Jsb2NrKHBhcl9udW0rKywgIlBYUCIpOworCQkJCWJyZWFrOworCQkJY2FzZSBBRVVfSU5fQVRUTl9CSVRTX1BYUFBDSUNMT0NLQ0xJRU5UX1BBUklUWV9FUlJPUjoKKwkJCQlfcHJpbnRfbmV4dF9ibG9jayhwYXJfbnVtKyssCisJCQkJCSJQWFBQQ0lDTE9DS0NMSUVOVCIpOworCQkJCWJyZWFrOworCQkJY2FzZSBBRVVfSU5QVVRTX0FUVE5fQklUU19DRkNfUEFSSVRZX0VSUk9SOgorCQkJCV9wcmludF9uZXh0X2Jsb2NrKHBhcl9udW0rKywgIkNGQyIpOworCQkJCWJyZWFrOworCQkJY2FzZSBBRVVfSU5QVVRTX0FUVE5fQklUU19DRFVfUEFSSVRZX0VSUk9SOgorCQkJCV9wcmludF9uZXh0X2Jsb2NrKHBhcl9udW0rKywgIkNEVSIpOworCQkJCWJyZWFrOworCQkJY2FzZSBBRVVfSU5QVVRTX0FUVE5fQklUU19JR1VfUEFSSVRZX0VSUk9SOgorCQkJCV9wcmludF9uZXh0X2Jsb2NrKHBhcl9udW0rKywgIklHVSIpOworCQkJCWJyZWFrOworCQkJY2FzZSBBRVVfSU5QVVRTX0FUVE5fQklUU19NSVNDX1BBUklUWV9FUlJPUjoKKwkJCQlfcHJpbnRfbmV4dF9ibG9jayhwYXJfbnVtKyssICJNSVNDIik7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIENsZWFyIHRoZSBiaXQgKi8KKwkJCXNpZyAmPSB+Y3VyX2JpdDsKKwkJfQorCX0KKworCXJldHVybiBwYXJfbnVtOworfQorCitzdGF0aWMgaW5saW5lIGludCBibngyeF9wcmludF9ibG9ja3Nfd2l0aF9wYXJpdHkzKHUzMiBzaWcsIGludCBwYXJfbnVtKQoreworCWludCBpID0gMDsKKwl1MzIgY3VyX2JpdCA9IDA7CisJZm9yIChpID0gMDsgc2lnOyBpKyspIHsKKwkJY3VyX2JpdCA9ICgodTMyKTB4MSA8PCBpKTsKKwkJaWYgKHNpZyAmIGN1cl9iaXQpIHsKKwkJCXN3aXRjaCAoY3VyX2JpdCkgeworCQkJY2FzZSBBRVVfSU5QVVRTX0FUVE5fQklUU19NQ1BfTEFUQ0hFRF9ST01fUEFSSVRZOgorCQkJCV9wcmludF9uZXh0X2Jsb2NrKHBhcl9udW0rKywgIk1DUCBST00iKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQUVVX0lOUFVUU19BVFROX0JJVFNfTUNQX0xBVENIRURfVU1QX1JYX1BBUklUWToKKwkJCQlfcHJpbnRfbmV4dF9ibG9jayhwYXJfbnVtKyssICJNQ1AgVU1QIFJYIik7CisJCQkJYnJlYWs7CisJCQljYXNlIEFFVV9JTlBVVFNfQVRUTl9CSVRTX01DUF9MQVRDSEVEX1VNUF9UWF9QQVJJVFk6CisJCQkJX3ByaW50X25leHRfYmxvY2socGFyX251bSsrLCAiTUNQIFVNUCBUWCIpOworCQkJCWJyZWFrOworCQkJY2FzZSBBRVVfSU5QVVRTX0FUVE5fQklUU19NQ1BfTEFUQ0hFRF9TQ1BBRF9QQVJJVFk6CisJCQkJX3ByaW50X25leHRfYmxvY2socGFyX251bSsrLCAiTUNQIFNDUEFEIik7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIENsZWFyIHRoZSBiaXQgKi8KKwkJCXNpZyAmPSB+Y3VyX2JpdDsKKwkJfQorCX0KKworCXJldHVybiBwYXJfbnVtOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgYm54MnhfcGFyaXR5X2F0dG4oc3RydWN0IGJueDJ4ICpicCwgdTMyIHNpZzAsIHUzMiBzaWcxLAorCQkJCSAgICAgdTMyIHNpZzIsIHUzMiBzaWczKQoreworCWlmICgoc2lnMCAmIEhXX1BSVFlfQVNTRVJUX1NFVF8wKSB8fCAoc2lnMSAmIEhXX1BSVFlfQVNTRVJUX1NFVF8xKSB8fAorCSAgICAoc2lnMiAmIEhXX1BSVFlfQVNTRVJUX1NFVF8yKSB8fCAoc2lnMyAmIEhXX1BSVFlfQVNTRVJUX1NFVF8zKSkgeworCQlpbnQgcGFyX251bSA9IDA7CisJCURQKE5FVElGX01TR19IVywgIldhcyBwYXJpdHkgZXJyb3I6IEhXIGJsb2NrIHBhcml0eSBhdHRlbnRpb246ICIKKwkJCSJbMF06MHglMDh4IFsxXToweCUwOHggIgorCQkJIlsyXToweCUwOHggWzNdOjB4JTA4eFxuIiwKKwkJCSAgc2lnMCAmIEhXX1BSVFlfQVNTRVJUX1NFVF8wLAorCQkJICBzaWcxICYgSFdfUFJUWV9BU1NFUlRfU0VUXzEsCisJCQkgIHNpZzIgJiBIV19QUlRZX0FTU0VSVF9TRVRfMiwKKwkJCSAgc2lnMyAmIEhXX1BSVFlfQVNTRVJUX1NFVF8zKTsKKwkJcHJpbnRrKEtFUk5fRVJSIiVzOiBQYXJpdHkgZXJyb3JzIGRldGVjdGVkIGluIGJsb2NrczogIiwKKwkJICAgICAgIGJwLT5kZXYtPm5hbWUpOworCQlwYXJfbnVtID0gYm54MnhfcHJpbnRfYmxvY2tzX3dpdGhfcGFyaXR5MCgKKwkJCXNpZzAgJiBIV19QUlRZX0FTU0VSVF9TRVRfMCwgcGFyX251bSk7CisJCXBhcl9udW0gPSBibngyeF9wcmludF9ibG9ja3Nfd2l0aF9wYXJpdHkxKAorCQkJc2lnMSAmIEhXX1BSVFlfQVNTRVJUX1NFVF8xLCBwYXJfbnVtKTsKKwkJcGFyX251bSA9IGJueDJ4X3ByaW50X2Jsb2Nrc193aXRoX3Bhcml0eTIoCisJCQlzaWcyICYgSFdfUFJUWV9BU1NFUlRfU0VUXzIsIHBhcl9udW0pOworCQlwYXJfbnVtID0gYm54MnhfcHJpbnRfYmxvY2tzX3dpdGhfcGFyaXR5MygKKwkJCXNpZzMgJiBIV19QUlRZX0FTU0VSVF9TRVRfMywgcGFyX251bSk7CisJCXByaW50aygiXG4iKTsKKwkJcmV0dXJuIHRydWU7CisJfSBlbHNlCisJCXJldHVybiBmYWxzZTsKK30KKworYm9vbCBibngyeF9jaGtfcGFyaXR5X2F0dG4oc3RydWN0IGJueDJ4ICpicCkKK3sKKwlzdHJ1Y3QgYXR0bl9yb3V0ZSBhdHRuOworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisKKwlhdHRuLnNpZ1swXSA9IFJFR19SRChicCwKKwkJTUlTQ19SRUdfQUVVX0FGVEVSX0lOVkVSVF8xX0ZVTkNfMCArCisJCQkgICAgIHBvcnQqNCk7CisJYXR0bi5zaWdbMV0gPSBSRUdfUkQoYnAsCisJCU1JU0NfUkVHX0FFVV9BRlRFUl9JTlZFUlRfMl9GVU5DXzAgKworCQkJICAgICBwb3J0KjQpOworCWF0dG4uc2lnWzJdID0gUkVHX1JEKGJwLAorCQlNSVNDX1JFR19BRVVfQUZURVJfSU5WRVJUXzNfRlVOQ18wICsKKwkJCSAgICAgcG9ydCo0KTsKKwlhdHRuLnNpZ1szXSA9IFJFR19SRChicCwKKwkJTUlTQ19SRUdfQUVVX0FGVEVSX0lOVkVSVF80X0ZVTkNfMCArCisJCQkgICAgIHBvcnQqNCk7CisKKwlyZXR1cm4gYm54MnhfcGFyaXR5X2F0dG4oYnAsIGF0dG4uc2lnWzBdLCBhdHRuLnNpZ1sxXSwgYXR0bi5zaWdbMl0sCisJCQkJCWF0dG4uc2lnWzNdKTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfYXR0bl9pbnRfZGVhc3NlcnRlZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgZGVhc3NlcnRlZCkKK3sKKwlzdHJ1Y3QgYXR0bl9yb3V0ZSBhdHRuLCAqZ3JvdXBfbWFzazsKKwlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCWludCBpbmRleDsKKwl1MzIgcmVnX2FkZHI7CisJdTMyIHZhbDsKKwl1MzIgYWV1X21hc2s7CisKKwkvKiBuZWVkIHRvIHRha2UgSFcgbG9jayBiZWNhdXNlIE1DUCBvciBvdGhlciBwb3J0IG1pZ2h0IGFsc28KKwkgICB0cnkgdG8gaGFuZGxlIHRoaXMgZXZlbnQgKi8KKwlibngyeF9hY3F1aXJlX2FscihicCk7CisKKwlpZiAoYm54MnhfY2hrX3Bhcml0eV9hdHRuKGJwKSkgeworCQlicC0+cmVjb3Zlcnlfc3RhdGUgPSBCTlgyWF9SRUNPVkVSWV9JTklUOworCQlibngyeF9zZXRfcmVzZXRfaW5fcHJvZ3Jlc3MoYnApOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmJwLT5yZXNldF90YXNrLCAwKTsKKwkJLyogRGlzYWJsZSBIVyBpbnRlcnJ1cHRzICovCisJCWJueDJ4X2ludF9kaXNhYmxlKGJwKTsKKwkJYm54MnhfcmVsZWFzZV9hbHIoYnApOworCQkvKiBJbiBjYXNlIG9mIHBhcml0eSBlcnJvcnMgZG9uJ3QgaGFuZGxlIGF0dGVudGlvbnMgc28gdGhhdAorCQkgKiBvdGhlciBmdW5jdGlvbiB3b3VsZCAic2VlIiBwYXJpdHkgZXJyb3JzLgorCQkgKi8KKwkJcmV0dXJuOworCX0KKworCWF0dG4uc2lnWzBdID0gUkVHX1JEKGJwLCBNSVNDX1JFR19BRVVfQUZURVJfSU5WRVJUXzFfRlVOQ18wICsgcG9ydCo0KTsKKwlhdHRuLnNpZ1sxXSA9IFJFR19SRChicCwgTUlTQ19SRUdfQUVVX0FGVEVSX0lOVkVSVF8yX0ZVTkNfMCArIHBvcnQqNCk7CisJYXR0bi5zaWdbMl0gPSBSRUdfUkQoYnAsIE1JU0NfUkVHX0FFVV9BRlRFUl9JTlZFUlRfM19GVU5DXzAgKyBwb3J0KjQpOworCWF0dG4uc2lnWzNdID0gUkVHX1JEKGJwLCBNSVNDX1JFR19BRVVfQUZURVJfSU5WRVJUXzRfRlVOQ18wICsgcG9ydCo0KTsKKwlEUChORVRJRl9NU0dfSFcsICJhdHRuOiAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLAorCSAgIGF0dG4uc2lnWzBdLCBhdHRuLnNpZ1sxXSwgYXR0bi5zaWdbMl0sIGF0dG4uc2lnWzNdKTsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE1BWF9EWU5BTUlDX0FUVE5fR1JQUzsgaW5kZXgrKykgeworCQlpZiAoZGVhc3NlcnRlZCAmICgxIDw8IGluZGV4KSkgeworCQkJZ3JvdXBfbWFzayA9ICZicC0+YXR0bl9ncm91cFtpbmRleF07CisKKwkJCURQKE5FVElGX01TR19IVywgImdyb3VwWyVkXTogJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKKwkJCSAgIGluZGV4LCBncm91cF9tYXNrLT5zaWdbMF0sIGdyb3VwX21hc2stPnNpZ1sxXSwKKwkJCSAgIGdyb3VwX21hc2stPnNpZ1syXSwgZ3JvdXBfbWFzay0+c2lnWzNdKTsKKworCQkJYm54MnhfYXR0bl9pbnRfZGVhc3NlcnRlZDMoYnAsCisJCQkJCWF0dG4uc2lnWzNdICYgZ3JvdXBfbWFzay0+c2lnWzNdKTsKKwkJCWJueDJ4X2F0dG5faW50X2RlYXNzZXJ0ZWQxKGJwLAorCQkJCQlhdHRuLnNpZ1sxXSAmIGdyb3VwX21hc2stPnNpZ1sxXSk7CisJCQlibngyeF9hdHRuX2ludF9kZWFzc2VydGVkMihicCwKKwkJCQkJYXR0bi5zaWdbMl0gJiBncm91cF9tYXNrLT5zaWdbMl0pOworCQkJYm54MnhfYXR0bl9pbnRfZGVhc3NlcnRlZDAoYnAsCisJCQkJCWF0dG4uc2lnWzBdICYgZ3JvdXBfbWFzay0+c2lnWzBdKTsKKwkJfQorCX0KKworCWJueDJ4X3JlbGVhc2VfYWxyKGJwKTsKKworCXJlZ19hZGRyID0gKEhDX1JFR19DT01NQU5EX1JFRyArIHBvcnQqMzIgKyBDT01NQU5EX1JFR19BVFROX0JJVFNfQ0xSKTsKKworCXZhbCA9IH5kZWFzc2VydGVkOworCURQKE5FVElGX01TR19IVywgImFib3V0IHRvIG1hc2sgMHglMDh4IGF0IEhDIGFkZHIgMHgleFxuIiwKKwkgICB2YWwsIHJlZ19hZGRyKTsKKwlSRUdfV1IoYnAsIHJlZ19hZGRyLCB2YWwpOworCisJaWYgKH5icC0+YXR0bl9zdGF0ZSAmIGRlYXNzZXJ0ZWQpCisJCUJOWDJYX0VSUigiSUdVIEVSUk9SXG4iKTsKKworCXJlZ19hZGRyID0gcG9ydCA/IE1JU0NfUkVHX0FFVV9NQVNLX0FUVE5fRlVOQ18xIDoKKwkJCSAgTUlTQ19SRUdfQUVVX01BU0tfQVRUTl9GVU5DXzA7CisKKwlibngyeF9hY3F1aXJlX2h3X2xvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfUE9SVDBfQVRUX01BU0sgKyBwb3J0KTsKKwlhZXVfbWFzayA9IFJFR19SRChicCwgcmVnX2FkZHIpOworCisJRFAoTkVUSUZfTVNHX0hXLCAiYWV1X21hc2sgJXggIG5ld2x5IGRlYXNzZXJ0ZWQgJXhcbiIsCisJICAgYWV1X21hc2ssIGRlYXNzZXJ0ZWQpOworCWFldV9tYXNrIHw9IChkZWFzc2VydGVkICYgMHgzZmYpOworCURQKE5FVElGX01TR19IVywgIm5ldyBtYXNrICV4XG4iLCBhZXVfbWFzayk7CisKKwlSRUdfV1IoYnAsIHJlZ19hZGRyLCBhZXVfbWFzayk7CisJYm54MnhfcmVsZWFzZV9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFX1BPUlQwX0FUVF9NQVNLICsgcG9ydCk7CisKKwlEUChORVRJRl9NU0dfSFcsICJhdHRuX3N0YXRlICV4XG4iLCBicC0+YXR0bl9zdGF0ZSk7CisJYnAtPmF0dG5fc3RhdGUgJj0gfmRlYXNzZXJ0ZWQ7CisJRFAoTkVUSUZfTVNHX0hXLCAibmV3IHN0YXRlICV4XG4iLCBicC0+YXR0bl9zdGF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2F0dG5faW50KHN0cnVjdCBibngyeCAqYnApCit7CisJLyogcmVhZCBsb2NhbCBjb3B5IG9mIGJpdHMgKi8KKwl1MzIgYXR0bl9iaXRzID0gbGUzMl90b19jcHUoYnAtPmRlZl9zdGF0dXNfYmxrLT5hdHRlbl9zdGF0dXNfYmxvY2suCisJCQkJCQkJCWF0dG5fYml0cyk7CisJdTMyIGF0dG5fYWNrID0gbGUzMl90b19jcHUoYnAtPmRlZl9zdGF0dXNfYmxrLT5hdHRlbl9zdGF0dXNfYmxvY2suCisJCQkJCQkJCWF0dG5fYml0c19hY2spOworCXUzMiBhdHRuX3N0YXRlID0gYnAtPmF0dG5fc3RhdGU7CisKKwkvKiBsb29rIGZvciBjaGFuZ2VkIGJpdHMgKi8KKwl1MzIgYXNzZXJ0ZWQgICA9ICBhdHRuX2JpdHMgJiB+YXR0bl9hY2sgJiB+YXR0bl9zdGF0ZTsKKwl1MzIgZGVhc3NlcnRlZCA9IH5hdHRuX2JpdHMgJiAgYXR0bl9hY2sgJiAgYXR0bl9zdGF0ZTsKKworCURQKE5FVElGX01TR19IVywKKwkgICAiYXR0bl9iaXRzICV4ICBhdHRuX2FjayAleCAgYXNzZXJ0ZWQgJXggIGRlYXNzZXJ0ZWQgJXhcbiIsCisJICAgYXR0bl9iaXRzLCBhdHRuX2FjaywgYXNzZXJ0ZWQsIGRlYXNzZXJ0ZWQpOworCisJaWYgKH4oYXR0bl9iaXRzIF4gYXR0bl9hY2spICYgKGF0dG5fYml0cyBeIGF0dG5fc3RhdGUpKQorCQlCTlgyWF9FUlIoIkJBRCBhdHRlbnRpb24gc3RhdGVcbiIpOworCisJLyogaGFuZGxlIGJpdHMgdGhhdCB3ZXJlIHJhaXNlZCAqLworCWlmIChhc3NlcnRlZCkKKwkJYm54MnhfYXR0bl9pbnRfYXNzZXJ0ZWQoYnAsIGFzc2VydGVkKTsKKworCWlmIChkZWFzc2VydGVkKQorCQlibngyeF9hdHRuX2ludF9kZWFzc2VydGVkKGJwLCBkZWFzc2VydGVkKTsKK30KKworc3RhdGljIHZvaWQgYm54Mnhfc3BfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGJueDJ4ICpicCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYm54MngsIHNwX3Rhc2sud29yayk7CisJdTE2IHN0YXR1czsKKworCS8qIFJldHVybiBoZXJlIGlmIGludGVycnVwdCBpcyBkaXNhYmxlZCAqLworCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmYnAtPmludHJfc2VtKSAhPSAwKSkgeworCQlEUChORVRJRl9NU0dfSU5UUiwgImNhbGxlZCBidXQgaW50cl9zZW0gbm90IDAsIHJldHVybmluZ1xuIik7CisJCXJldHVybjsKKwl9CisKKwlzdGF0dXMgPSBibngyeF91cGRhdGVfZHNiX2lkeChicCk7CisvKglpZiAoc3RhdHVzID09IDApCQkJCSAgICAgKi8KKy8qCQlCTlgyWF9FUlIoInNwdXJpb3VzIHNsb3dwYXRoIGludGVycnVwdCFcbiIpOyAqLworCisJRFAoTkVUSUZfTVNHX0lOVFIsICJnb3QgYSBzbG93cGF0aCBpbnRlcnJ1cHQgKHN0YXR1cyAweCV4KVxuIiwgc3RhdHVzKTsKKworCS8qIEhXIGF0dGVudGlvbnMgKi8KKwlpZiAoc3RhdHVzICYgMHgxKSB7CisJCWJueDJ4X2F0dG5faW50KGJwKTsKKwkJc3RhdHVzICY9IH4weDE7CisJfQorCisJLyogQ1N0b3JtIGV2ZW50czogU1RBVF9RVUVSWSAqLworCWlmIChzdGF0dXMgJiAweDIpIHsKKwkJRFAoQk5YMlhfTVNHX1NQLCAiQ1N0b3JtIGV2ZW50czogU1RBVF9RVUVSWVxuIik7CisJCXN0YXR1cyAmPSB+MHgyOworCX0KKworCWlmICh1bmxpa2VseShzdGF0dXMpKQorCQlEUChORVRJRl9NU0dfSU5UUiwgImdvdCBhbiB1bmtub3duIGludGVycnVwdCEgKHN0YXR1cyAweCV4KVxuIiwKKwkJICAgc3RhdHVzKTsKKworCWJueDJ4X2Fja19zYihicCwgREVGX1NCX0lELCBBVFRFTlRJT05fSUQsIGxlMTZfdG9fY3B1KGJwLT5kZWZfYXR0X2lkeCksCisJCSAgICAgSUdVX0lOVF9OT1AsIDEpOworCWJueDJ4X2Fja19zYihicCwgREVGX1NCX0lELCBVU1RPUk1fSUQsIGxlMTZfdG9fY3B1KGJwLT5kZWZfdV9pZHgpLAorCQkgICAgIElHVV9JTlRfTk9QLCAxKTsKKwlibngyeF9hY2tfc2IoYnAsIERFRl9TQl9JRCwgQ1NUT1JNX0lELCBsZTE2X3RvX2NwdShicC0+ZGVmX2NfaWR4KSwKKwkJICAgICBJR1VfSU5UX05PUCwgMSk7CisJYm54MnhfYWNrX3NiKGJwLCBERUZfU0JfSUQsIFhTVE9STV9JRCwgbGUxNl90b19jcHUoYnAtPmRlZl94X2lkeCksCisJCSAgICAgSUdVX0lOVF9OT1AsIDEpOworCWJueDJ4X2Fja19zYihicCwgREVGX1NCX0lELCBUU1RPUk1fSUQsIGxlMTZfdG9fY3B1KGJwLT5kZWZfdF9pZHgpLAorCQkgICAgIElHVV9JTlRfRU5BQkxFLCAxKTsKK30KKworaXJxcmV0dXJuX3QgYm54MnhfbXNpeF9zcF9pbnQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaW5zdGFuY2U7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwkvKiBSZXR1cm4gaGVyZSBpZiBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQgKi8KKwlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmJwLT5pbnRyX3NlbSkgIT0gMCkpIHsKKwkJRFAoTkVUSUZfTVNHX0lOVFIsICJjYWxsZWQgYnV0IGludHJfc2VtIG5vdCAwLCByZXR1cm5pbmdcbiIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJYm54MnhfYWNrX3NiKGJwLCBERUZfU0JfSUQsIFRTVE9STV9JRCwgMCwgSUdVX0lOVF9ESVNBQkxFLCAwKTsKKworI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKKwlpZiAodW5saWtlbHkoYnAtPnBhbmljKSkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworI2VuZGlmCisKKyNpZmRlZiBCQ01fQ05JQworCXsKKwkJc3RydWN0IGNuaWNfb3BzICpjX29wczsKKworCQlyY3VfcmVhZF9sb2NrKCk7CisJCWNfb3BzID0gcmN1X2RlcmVmZXJlbmNlKGJwLT5jbmljX29wcyk7CisJCWlmIChjX29wcykKKwkJCWNfb3BzLT5jbmljX2hhbmRsZXIoYnAtPmNuaWNfZGF0YSwgTlVMTCk7CisJCXJjdV9yZWFkX3VubG9jaygpOworCX0KKyNlbmRpZgorCXF1ZXVlX2RlbGF5ZWRfd29yayhibngyeF93cSwgJmJwLT5zcF90YXNrLCAwKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyogZW5kIG9mIHNsb3cgcGF0aCAqLworCitzdGF0aWMgdm9pZCBibngyeF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IChzdHJ1Y3QgYm54MnggKikgZGF0YTsKKworCWlmICghbmV0aWZfcnVubmluZyhicC0+ZGV2KSkKKwkJcmV0dXJuOworCisJaWYgKGF0b21pY19yZWFkKCZicC0+aW50cl9zZW0pICE9IDApCisJCWdvdG8gdGltZXJfcmVzdGFydDsKKworCWlmIChwb2xsKSB7CisJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwWzBdOworCQlpbnQgcmM7CisKKwkJYm54MnhfdHhfaW50KGZwKTsKKwkJcmMgPSBibngyeF9yeF9pbnQoZnAsIDEwMDApOworCX0KKworCWlmICghQlBfTk9NQ1AoYnApKSB7CisJCWludCBmdW5jID0gQlBfRlVOQyhicCk7CisJCXUzMiBkcnZfcHVsc2U7CisJCXUzMiBtY3BfcHVsc2U7CisKKwkJKyticC0+ZndfZHJ2X3B1bHNlX3dyX3NlcTsKKwkJYnAtPmZ3X2Rydl9wdWxzZV93cl9zZXEgJj0gRFJWX1BVTFNFX1NFUV9NQVNLOworCQkvKiBUQkQgLSBhZGQgU1lTVEVNX1RJTUUgKi8KKwkJZHJ2X3B1bHNlID0gYnAtPmZ3X2Rydl9wdWxzZV93cl9zZXE7CisJCVNITUVNX1dSKGJwLCBmdW5jX21iW2Z1bmNdLmRydl9wdWxzZV9tYiwgZHJ2X3B1bHNlKTsKKworCQltY3BfcHVsc2UgPSAoU0hNRU1fUkQoYnAsIGZ1bmNfbWJbZnVuY10ubWNwX3B1bHNlX21iKSAmCisJCQkgICAgIE1DUF9QVUxTRV9TRVFfTUFTSyk7CisJCS8qIFRoZSBkZWx0YSBiZXR3ZWVuIGRyaXZlciBwdWxzZSBhbmQgbWNwIHJlc3BvbnNlCisJCSAqIHNob3VsZCBiZSAxIChiZWZvcmUgbWNwIHJlc3BvbnNlKSBvciAwIChhZnRlciBtY3AgcmVzcG9uc2UpCisJCSAqLworCQlpZiAoKGRydl9wdWxzZSAhPSBtY3BfcHVsc2UpICYmCisJCSAgICAoZHJ2X3B1bHNlICE9ICgobWNwX3B1bHNlICsgMSkgJiBNQ1BfUFVMU0VfU0VRX01BU0spKSkgeworCQkJLyogc29tZW9uZSBsb3N0IGEgaGVhcnRiZWF0Li4uICovCisJCQlCTlgyWF9FUlIoImRydl9wdWxzZSAoMHgleCkgIT0gbWNwX3B1bHNlICgweCV4KVxuIiwKKwkJCQkgIGRydl9wdWxzZSwgbWNwX3B1bHNlKTsKKwkJfQorCX0KKworCWlmIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfT1BFTikKKwkJYm54Mnhfc3RhdHNfaGFuZGxlKGJwLCBTVEFUU19FVkVOVF9VUERBVEUpOworCit0aW1lcl9yZXN0YXJ0OgorCW1vZF90aW1lcigmYnAtPnRpbWVyLCBqaWZmaWVzICsgYnAtPmN1cnJlbnRfaW50ZXJ2YWwpOworfQorCisvKiBlbmQgb2YgU3RhdGlzdGljcyAqLworCisvKiBuaWMgaW5pdCAqLworCisvKgorICogbmljIGluaXQgc2VydmljZSBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZCBibngyeF96ZXJvX3NiKHN0cnVjdCBibngyeCAqYnAsIGludCBzYl9pZCkKK3sKKwlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCisJLyogIkNTVE9STSIgKi8KKwlibngyeF9pbml0X2ZpbGwoYnAsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsKKwkJCUNTVE9STV9TQl9IT1NUX1NUQVRVU19CTE9DS19VX09GRlNFVChwb3J0LCBzYl9pZCksIDAsCisJCQlDU1RPUk1fU0JfU1RBVFVTX0JMT0NLX1VfU0laRSAvIDQpOworCWJueDJ4X2luaXRfZmlsbChicCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKworCQkJQ1NUT1JNX1NCX0hPU1RfU1RBVFVTX0JMT0NLX0NfT0ZGU0VUKHBvcnQsIHNiX2lkKSwgMCwKKwkJCUNTVE9STV9TQl9TVEFUVVNfQkxPQ0tfQ19TSVpFIC8gNCk7Cit9CisKK3ZvaWQgYm54MnhfaW5pdF9zYihzdHJ1Y3QgYm54MnggKmJwLCBzdHJ1Y3QgaG9zdF9zdGF0dXNfYmxvY2sgKnNiLAorCQkJICBkbWFfYWRkcl90IG1hcHBpbmcsIGludCBzYl9pZCkKK3sKKwlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCWludCBmdW5jID0gQlBfRlVOQyhicCk7CisJaW50IGluZGV4OworCXU2NCBzZWN0aW9uOworCisJLyogVVNUT1JNICovCisJc2VjdGlvbiA9ICgodTY0KW1hcHBpbmcpICsgb2Zmc2V0b2Yoc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrLAorCQkJCQkgICAgdV9zdGF0dXNfYmxvY2spOworCXNiLT51X3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaWQgPSBzYl9pZDsKKworCVJFR19XUihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKKwkgICAgICAgQ1NUT1JNX1NCX0hPU1RfU0JfQUREUl9VX09GRlNFVChwb3J0LCBzYl9pZCksIFU2NF9MTyhzZWN0aW9uKSk7CisJUkVHX1dSKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKworCSAgICAgICAoKENTVE9STV9TQl9IT1NUX1NCX0FERFJfVV9PRkZTRVQocG9ydCwgc2JfaWQpKSArIDQpLAorCSAgICAgICBVNjRfSEkoc2VjdGlvbikpOworCVJFR19XUjgoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArIEZQX1VTQl9GVU5DX09GRiArCisJCUNTVE9STV9TQl9IT1NUX1NUQVRVU19CTE9DS19VX09GRlNFVChwb3J0LCBzYl9pZCksIGZ1bmMpOworCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgSENfVVNUT1JNX1NCX05VTV9JTkRJQ0VTOyBpbmRleCsrKQorCQlSRUdfV1IxNihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKKwkJCSBDU1RPUk1fU0JfSENfRElTQUJMRV9VX09GRlNFVChwb3J0LCBzYl9pZCwgaW5kZXgpLCAxKTsKKworCS8qIENTVE9STSAqLworCXNlY3Rpb24gPSAoKHU2NCltYXBwaW5nKSArIG9mZnNldG9mKHN0cnVjdCBob3N0X3N0YXR1c19ibG9jaywKKwkJCQkJICAgIGNfc3RhdHVzX2Jsb2NrKTsKKwlzYi0+Y19zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2lkID0gc2JfaWQ7CisKKwlSRUdfV1IoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCisJICAgICAgIENTVE9STV9TQl9IT1NUX1NCX0FERFJfQ19PRkZTRVQocG9ydCwgc2JfaWQpLCBVNjRfTE8oc2VjdGlvbikpOworCVJFR19XUihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKKwkgICAgICAgKChDU1RPUk1fU0JfSE9TVF9TQl9BRERSX0NfT0ZGU0VUKHBvcnQsIHNiX2lkKSkgKyA0KSwKKwkgICAgICAgVTY0X0hJKHNlY3Rpb24pKTsKKwlSRUdfV1I4KGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKyBGUF9DU0JfRlVOQ19PRkYgKworCQlDU1RPUk1fU0JfSE9TVF9TVEFUVVNfQkxPQ0tfQ19PRkZTRVQocG9ydCwgc2JfaWQpLCBmdW5jKTsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IEhDX0NTVE9STV9TQl9OVU1fSU5ESUNFUzsgaW5kZXgrKykKKwkJUkVHX1dSMTYoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCisJCQkgQ1NUT1JNX1NCX0hDX0RJU0FCTEVfQ19PRkZTRVQocG9ydCwgc2JfaWQsIGluZGV4KSwgMSk7CisKKwlibngyeF9hY2tfc2IoYnAsIHNiX2lkLCBDU1RPUk1fSUQsIDAsIElHVV9JTlRfRU5BQkxFLCAwKTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfemVyb19kZWZfc2Ioc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOworCisJYm54MnhfaW5pdF9maWxsKGJwLCBUU0VNX1JFR19GQVNUX01FTU9SWSArCisJCQlUU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChmdW5jKSwgMCwKKwkJCXNpemVvZihzdHJ1Y3QgdHN0b3JtX2RlZl9zdGF0dXNfYmxvY2spLzQpOworCWJueDJ4X2luaXRfZmlsbChicCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKworCQkJQ1NUT1JNX0RFRl9TQl9IT1NUX1NUQVRVU19CTE9DS19VX09GRlNFVChmdW5jKSwgMCwKKwkJCXNpemVvZihzdHJ1Y3QgY3N0b3JtX2RlZl9zdGF0dXNfYmxvY2tfdSkvNCk7CisJYm54MnhfaW5pdF9maWxsKGJwLCBDU0VNX1JFR19GQVNUX01FTU9SWSArCisJCQlDU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX0NfT0ZGU0VUKGZ1bmMpLCAwLAorCQkJc2l6ZW9mKHN0cnVjdCBjc3Rvcm1fZGVmX3N0YXR1c19ibG9ja19jKS80KTsKKwlibngyeF9pbml0X2ZpbGwoYnAsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsKKwkJCVhTVE9STV9ERUZfU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKGZ1bmMpLCAwLAorCQkJc2l6ZW9mKHN0cnVjdCB4c3Rvcm1fZGVmX3N0YXR1c19ibG9jaykvNCk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2luaXRfZGVmX3NiKHN0cnVjdCBibngyeCAqYnAsCisJCQkgICAgICBzdHJ1Y3QgaG9zdF9kZWZfc3RhdHVzX2Jsb2NrICpkZWZfc2IsCisJCQkgICAgICBkbWFfYWRkcl90IG1hcHBpbmcsIGludCBzYl9pZCkKK3sKKwlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCWludCBmdW5jID0gQlBfRlVOQyhicCk7CisJaW50IGluZGV4LCB2YWwsIHJlZ19vZmZzZXQ7CisJdTY0IHNlY3Rpb247CisKKwkvKiBBVFROICovCisJc2VjdGlvbiA9ICgodTY0KW1hcHBpbmcpICsgb2Zmc2V0b2Yoc3RydWN0IGhvc3RfZGVmX3N0YXR1c19ibG9jaywKKwkJCQkJICAgIGF0dGVuX3N0YXR1c19ibG9jayk7CisJZGVmX3NiLT5hdHRlbl9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2lkID0gc2JfaWQ7CisKKwlicC0+YXR0bl9zdGF0ZSA9IDA7CisKKwlyZWdfb2Zmc2V0ID0gKHBvcnQgPyBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzFfT1VUXzAgOgorCQkJICAgICBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzBfT1VUXzApOworCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTUFYX0RZTkFNSUNfQVRUTl9HUlBTOyBpbmRleCsrKSB7CisJCWJwLT5hdHRuX2dyb3VwW2luZGV4XS5zaWdbMF0gPSBSRUdfUkQoYnAsCisJCQkJCQkgICAgIHJlZ19vZmZzZXQgKyAweDEwKmluZGV4KTsKKwkJYnAtPmF0dG5fZ3JvdXBbaW5kZXhdLnNpZ1sxXSA9IFJFR19SRChicCwKKwkJCQkJICAgICAgIHJlZ19vZmZzZXQgKyAweDQgKyAweDEwKmluZGV4KTsKKwkJYnAtPmF0dG5fZ3JvdXBbaW5kZXhdLnNpZ1syXSA9IFJFR19SRChicCwKKwkJCQkJICAgICAgIHJlZ19vZmZzZXQgKyAweDggKyAweDEwKmluZGV4KTsKKwkJYnAtPmF0dG5fZ3JvdXBbaW5kZXhdLnNpZ1szXSA9IFJFR19SRChicCwKKwkJCQkJICAgICAgIHJlZ19vZmZzZXQgKyAweGMgKyAweDEwKmluZGV4KTsKKwl9CisKKwlyZWdfb2Zmc2V0ID0gKHBvcnQgPyBIQ19SRUdfQVRUTl9NU0cxX0FERFJfTCA6CisJCQkgICAgIEhDX1JFR19BVFROX01TRzBfQUREUl9MKTsKKworCVJFR19XUihicCwgcmVnX29mZnNldCwgVTY0X0xPKHNlY3Rpb24pKTsKKwlSRUdfV1IoYnAsIHJlZ19vZmZzZXQgKyA0LCBVNjRfSEkoc2VjdGlvbikpOworCisJcmVnX29mZnNldCA9IChwb3J0ID8gSENfUkVHX0FUVE5fTlVNX1AxIDogSENfUkVHX0FUVE5fTlVNX1AwKTsKKworCXZhbCA9IFJFR19SRChicCwgcmVnX29mZnNldCk7CisJdmFsIHw9IHNiX2lkOworCVJFR19XUihicCwgcmVnX29mZnNldCwgdmFsKTsKKworCS8qIFVTVE9STSAqLworCXNlY3Rpb24gPSAoKHU2NCltYXBwaW5nKSArIG9mZnNldG9mKHN0cnVjdCBob3N0X2RlZl9zdGF0dXNfYmxvY2ssCisJCQkJCSAgICB1X2RlZl9zdGF0dXNfYmxvY2spOworCWRlZl9zYi0+dV9kZWZfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pZCA9IHNiX2lkOworCisJUkVHX1dSKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKworCSAgICAgICBDU1RPUk1fREVGX1NCX0hPU1RfU0JfQUREUl9VX09GRlNFVChmdW5jKSwgVTY0X0xPKHNlY3Rpb24pKTsKKwlSRUdfV1IoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCisJICAgICAgICgoQ1NUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfVV9PRkZTRVQoZnVuYykpICsgNCksCisJICAgICAgIFU2NF9ISShzZWN0aW9uKSk7CisJUkVHX1dSOChicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsgREVGX1VTQl9GVU5DX09GRiArCisJCUNTVE9STV9ERUZfU0JfSE9TVF9TVEFUVVNfQkxPQ0tfVV9PRkZTRVQoZnVuYyksIGZ1bmMpOworCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgSENfVVNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFUzsgaW5kZXgrKykKKwkJUkVHX1dSMTYoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCisJCQkgQ1NUT1JNX0RFRl9TQl9IQ19ESVNBQkxFX1VfT0ZGU0VUKGZ1bmMsIGluZGV4KSwgMSk7CisKKwkvKiBDU1RPUk0gKi8KKwlzZWN0aW9uID0gKCh1NjQpbWFwcGluZykgKyBvZmZzZXRvZihzdHJ1Y3QgaG9zdF9kZWZfc3RhdHVzX2Jsb2NrLAorCQkJCQkgICAgY19kZWZfc3RhdHVzX2Jsb2NrKTsKKwlkZWZfc2ItPmNfZGVmX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaWQgPSBzYl9pZDsKKworCVJFR19XUihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKKwkgICAgICAgQ1NUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfQ19PRkZTRVQoZnVuYyksIFU2NF9MTyhzZWN0aW9uKSk7CisJUkVHX1dSKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKworCSAgICAgICAoKENTVE9STV9ERUZfU0JfSE9TVF9TQl9BRERSX0NfT0ZGU0VUKGZ1bmMpKSArIDQpLAorCSAgICAgICBVNjRfSEkoc2VjdGlvbikpOworCVJFR19XUjgoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArIERFRl9DU0JfRlVOQ19PRkYgKworCQlDU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX0NfT0ZGU0VUKGZ1bmMpLCBmdW5jKTsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IEhDX0NTVE9STV9ERUZfU0JfTlVNX0lORElDRVM7IGluZGV4KyspCisJCVJFR19XUjE2KGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKworCQkJIENTVE9STV9ERUZfU0JfSENfRElTQUJMRV9DX09GRlNFVChmdW5jLCBpbmRleCksIDEpOworCisJLyogVFNUT1JNICovCisJc2VjdGlvbiA9ICgodTY0KW1hcHBpbmcpICsgb2Zmc2V0b2Yoc3RydWN0IGhvc3RfZGVmX3N0YXR1c19ibG9jaywKKwkJCQkJICAgIHRfZGVmX3N0YXR1c19ibG9jayk7CisJZGVmX3NiLT50X2RlZl9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2lkID0gc2JfaWQ7CisKKwlSRUdfV1IoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCisJICAgICAgIFRTVE9STV9ERUZfU0JfSE9TVF9TQl9BRERSX09GRlNFVChmdW5jKSwgVTY0X0xPKHNlY3Rpb24pKTsKKwlSRUdfV1IoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCisJICAgICAgICgoVFNUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKGZ1bmMpKSArIDQpLAorCSAgICAgICBVNjRfSEkoc2VjdGlvbikpOworCVJFR19XUjgoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArIERFRl9UU0JfRlVOQ19PRkYgKworCQlUU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChmdW5jKSwgZnVuYyk7CisKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBIQ19UU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTOyBpbmRleCsrKQorCQlSRUdfV1IxNihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKKwkJCSBUU1RPUk1fREVGX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKGZ1bmMsIGluZGV4KSwgMSk7CisKKwkvKiBYU1RPUk0gKi8KKwlzZWN0aW9uID0gKCh1NjQpbWFwcGluZykgKyBvZmZzZXRvZihzdHJ1Y3QgaG9zdF9kZWZfc3RhdHVzX2Jsb2NrLAorCQkJCQkgICAgeF9kZWZfc3RhdHVzX2Jsb2NrKTsKKwlkZWZfc2ItPnhfZGVmX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaWQgPSBzYl9pZDsKKworCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsKKwkgICAgICAgWFNUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKGZ1bmMpLCBVNjRfTE8oc2VjdGlvbikpOworCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsKKwkgICAgICAgKChYU1RPUk1fREVGX1NCX0hPU1RfU0JfQUREUl9PRkZTRVQoZnVuYykpICsgNCksCisJICAgICAgIFU2NF9ISShzZWN0aW9uKSk7CisJUkVHX1dSOChicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsgREVGX1hTQl9GVU5DX09GRiArCisJCVhTVE9STV9ERUZfU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKGZ1bmMpLCBmdW5jKTsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IEhDX1hTVE9STV9ERUZfU0JfTlVNX0lORElDRVM7IGluZGV4KyspCisJCVJFR19XUjE2KGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKworCQkJIFhTVE9STV9ERUZfU0JfSENfRElTQUJMRV9PRkZTRVQoZnVuYywgaW5kZXgpLCAxKTsKKworCWJwLT5zdGF0c19wZW5kaW5nID0gMDsKKwlicC0+c2V0X21hY19wZW5kaW5nID0gMDsKKworCWJueDJ4X2Fja19zYihicCwgc2JfaWQsIENTVE9STV9JRCwgMCwgSUdVX0lOVF9FTkFCTEUsIDApOworfQorCit2b2lkIGJueDJ4X3VwZGF0ZV9jb2FsZXNjZShzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJaW50IGk7CisKKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQlpbnQgc2JfaWQgPSBicC0+ZnBbaV0uc2JfaWQ7CisKKwkJLyogSENfSU5ERVhfVV9FVEhfUlhfQ1FfQ09OUyAqLworCQlSRUdfV1I4KGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKworCQkJQ1NUT1JNX1NCX0hDX1RJTUVPVVRfVV9PRkZTRVQocG9ydCwgc2JfaWQsCisJCQkJCQkgICAgICBVX1NCX0VUSF9SWF9DUV9JTkRFWCksCisJCQlicC0+cnhfdGlja3MvKDQgKiBCTlgyWF9CVFIpKTsKKwkJUkVHX1dSMTYoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCisJCQkgQ1NUT1JNX1NCX0hDX0RJU0FCTEVfVV9PRkZTRVQocG9ydCwgc2JfaWQsCisJCQkJCQkgICAgICAgVV9TQl9FVEhfUlhfQ1FfSU5ERVgpLAorCQkJIChicC0+cnhfdGlja3MvKDQgKiBCTlgyWF9CVFIpKSA/IDAgOiAxKTsKKworCQkvKiBIQ19JTkRFWF9DX0VUSF9UWF9DUV9DT05TICovCisJCVJFR19XUjgoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCisJCQlDU1RPUk1fU0JfSENfVElNRU9VVF9DX09GRlNFVChwb3J0LCBzYl9pZCwKKwkJCQkJCSAgICAgIENfU0JfRVRIX1RYX0NRX0lOREVYKSwKKwkJCWJwLT50eF90aWNrcy8oNCAqIEJOWDJYX0JUUikpOworCQlSRUdfV1IxNihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKKwkJCSBDU1RPUk1fU0JfSENfRElTQUJMRV9DX09GRlNFVChwb3J0LCBzYl9pZCwKKwkJCQkJCSAgICAgICBDX1NCX0VUSF9UWF9DUV9JTkRFWCksCisJCQkgKGJwLT50eF90aWNrcy8oNCAqIEJOWDJYX0JUUikpID8gMCA6IDEpOworCX0KK30KKworc3RhdGljIHZvaWQgYm54MnhfaW5pdF9zcF9yaW5nKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKKworCXNwaW5fbG9ja19pbml0KCZicC0+c3BxX2xvY2spOworCisJYnAtPnNwcV9sZWZ0ID0gTUFYX1NQUV9QRU5ESU5HOworCWJwLT5zcHFfcHJvZF9pZHggPSAwOworCWJwLT5kc2Jfc3BfcHJvZCA9IEJOWDJYX1NQX0RTQl9JTkRFWDsKKwlicC0+c3BxX3Byb2RfYmQgPSBicC0+c3BxOworCWJwLT5zcHFfbGFzdF9iZCA9IGJwLT5zcHFfcHJvZF9iZCArIE1BWF9TUF9ERVNDX0NOVDsKKworCVJFR19XUihicCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyBYU1RPUk1fU1BRX1BBR0VfQkFTRV9PRkZTRVQoZnVuYyksCisJICAgICAgIFU2NF9MTyhicC0+c3BxX21hcHBpbmcpKTsKKwlSRUdfV1IoYnAsCisJICAgICAgIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgWFNUT1JNX1NQUV9QQUdFX0JBU0VfT0ZGU0VUKGZ1bmMpICsgNCwKKwkgICAgICAgVTY0X0hJKGJwLT5zcHFfbWFwcGluZykpOworCisJUkVHX1dSKGJwLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIFhTVE9STV9TUFFfUFJPRF9PRkZTRVQoZnVuYyksCisJICAgICAgIGJwLT5zcHFfcHJvZF9pZHgpOworfQorCitzdGF0aWMgdm9pZCBibngyeF9pbml0X2NvbnRleHQoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgaTsKKworCS8qIFJ4ICovCisJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJc3RydWN0IGV0aF9jb250ZXh0ICpjb250ZXh0ID0gYm54Mnhfc3AoYnAsIGNvbnRleHRbaV0uZXRoKTsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CisJCXU4IGNsX2lkID0gZnAtPmNsX2lkOworCisJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5zYl9pbmRleF9udW1iZXJzID0KKwkJCQkJCUJOWDJYX1JYX1NCX0lOREVYX05VTTsKKwkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLmNsaWVudElkID0gY2xfaWQ7CisJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5zdGF0dXNfYmxvY2tfaWQgPSBmcC0+c2JfaWQ7CisJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5mbGFncyA9CisJCQkoVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfTUNfQUxJR05NRU5UIHwKKwkJCSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9TVEFUSVNUSUNTKTsKKwkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLnN0YXRpc3RpY3NfY291bnRlcl9pZCA9CisJCQkJCQljbF9pZDsKKwkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLm1jX2FsaWdubWVudF9sb2dfc2l6ZSA9CisJCQkJCQlCTlgyWF9SWF9BTElHTl9TSElGVDsKKwkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLmJkX2J1ZmZfc2l6ZSA9CisJCQkJCQlicC0+cnhfYnVmX3NpemU7CisJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5iZF9wYWdlX2Jhc2VfaGkgPQorCQkJCQkJVTY0X0hJKGZwLT5yeF9kZXNjX21hcHBpbmcpOworCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uYmRfcGFnZV9iYXNlX2xvID0KKwkJCQkJCVU2NF9MTyhmcC0+cnhfZGVzY19tYXBwaW5nKTsKKwkJaWYgKCFmcC0+ZGlzYWJsZV90cGEpIHsKKwkJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5mbGFncyB8PQorCQkJCVVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1RQQTsKKwkJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5zZ2VfYnVmZl9zaXplID0KKwkJCQkodTE2KW1pbl90KHUzMiwgU0dFX1BBR0VfU0laRSpQQUdFU19QRVJfU0dFLAorCQkJCQkgICAweGZmZmYpOworCQkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLnNnZV9wYWdlX2Jhc2VfaGkgPQorCQkJCQkJVTY0X0hJKGZwLT5yeF9zZ2VfbWFwcGluZyk7CisJCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uc2dlX3BhZ2VfYmFzZV9sbyA9CisJCQkJCQlVNjRfTE8oZnAtPnJ4X3NnZV9tYXBwaW5nKTsKKworCQkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLm1heF9zZ2VzX2Zvcl9wYWNrZXQgPQorCQkJCVNHRV9QQUdFX0FMSUdOKGJwLT5kZXYtPm10dSkgPj4gU0dFX1BBR0VfU0hJRlQ7CisJCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24ubWF4X3NnZXNfZm9yX3BhY2tldCA9CisJCQkJKChjb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uCisJCQkJICBtYXhfc2dlc19mb3JfcGFja2V0ICsgUEFHRVNfUEVSX1NHRSAtIDEpICYKKwkJCQkgKH4oUEFHRVNfUEVSX1NHRSAtIDEpKSkgPj4gUEFHRVNfUEVSX1NHRV9TSElGVDsKKwkJfQorCisJCWNvbnRleHQtPnVzdG9ybV9hZ19jb250ZXh0LmNkdV91c2FnZSA9CisJCQlDRFVfUlNSVkRfVkFMVUVfVFlQRV9BKEhXX0NJRChicCwgaSksCisJCQkJCSAgICAgICBDRFVfUkVHSU9OX05VTUJFUl9VQ01fQUcsCisJCQkJCSAgICAgICBFVEhfQ09OTkVDVElPTl9UWVBFKTsKKworCQljb250ZXh0LT54c3Rvcm1fYWdfY29udGV4dC5jZHVfcmVzZXJ2ZWQgPQorCQkJQ0RVX1JTUlZEX1ZBTFVFX1RZUEVfQShIV19DSUQoYnAsIGkpLAorCQkJCQkgICAgICAgQ0RVX1JFR0lPTl9OVU1CRVJfWENNX0FHLAorCQkJCQkgICAgICAgRVRIX0NPTk5FQ1RJT05fVFlQRSk7CisJfQorCisJLyogVHggKi8KKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKKwkJc3RydWN0IGV0aF9jb250ZXh0ICpjb250ZXh0ID0KKwkJCWJueDJ4X3NwKGJwLCBjb250ZXh0W2ldLmV0aCk7CisKKwkJY29udGV4dC0+Y3N0b3JtX3N0X2NvbnRleHQuc2JfaW5kZXhfbnVtYmVyID0KKwkJCQkJCUNfU0JfRVRIX1RYX0NRX0lOREVYOworCQljb250ZXh0LT5jc3Rvcm1fc3RfY29udGV4dC5zdGF0dXNfYmxvY2tfaWQgPSBmcC0+c2JfaWQ7CisKKwkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQudHhfYmRfcGFnZV9iYXNlX2hpID0KKwkJCQkJCVU2NF9ISShmcC0+dHhfZGVzY19tYXBwaW5nKTsKKwkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQudHhfYmRfcGFnZV9iYXNlX2xvID0KKwkJCQkJCVU2NF9MTyhmcC0+dHhfZGVzY19tYXBwaW5nKTsKKwkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQuc3RhdGlzdGljc19kYXRhID0gKGZwLT5jbF9pZCB8CisJCQkJWFNUT1JNX0VUSF9TVF9DT05URVhUX1NUQVRJU1RJQ1NfRU5BQkxFKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2luaXRfaW5kX3RhYmxlKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKKwlpbnQgaTsKKworCWlmIChicC0+bXVsdGlfbW9kZSA9PSBFVEhfUlNTX01PREVfRElTQUJMRUQpCisJCXJldHVybjsKKworCURQKE5FVElGX01TR19JRlVQLAorCSAgICJJbml0aWFsaXppbmcgaW5kaXJlY3Rpb24gdGFibGUgIG11bHRpX21vZGUgJWRcbiIsIGJwLT5tdWx0aV9tb2RlKTsKKwlmb3IgKGkgPSAwOyBpIDwgVFNUT1JNX0lORElSRUNUSU9OX1RBQkxFX1NJWkU7IGkrKykKKwkJUkVHX1dSOChicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKKwkJCVRTVE9STV9JTkRJUkVDVElPTl9UQUJMRV9PRkZTRVQoZnVuYykgKyBpLAorCQkJYnAtPmZwLT5jbF9pZCArIChpICUgYnAtPm51bV9xdWV1ZXMpKTsKK30KKwordm9pZCBibngyeF9zZXRfY2xpZW50X2NvbmZpZyhzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCB0c3Rvcm1fZXRoX2NsaWVudF9jb25maWcgdHN0b3JtX2NsaWVudCA9IHswfTsKKwlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCWludCBpOworCisJdHN0b3JtX2NsaWVudC5tdHUgPSBicC0+ZGV2LT5tdHU7CisJdHN0b3JtX2NsaWVudC5jb25maWdfZmxhZ3MgPQorCQkJCShUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfU1RBVFNJVElDU19FTkFCTEUgfAorCQkJCSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRTFIT1ZfUkVNX0VOQUJMRSk7CisjaWZkZWYgQkNNX1ZMQU4KKwlpZiAoYnAtPnJ4X21vZGUgJiYgYnAtPnZsZ3JwICYmIChicC0+ZmxhZ3MgJiBIV19WTEFOX1JYX0ZMQUcpKSB7CisJCXRzdG9ybV9jbGllbnQuY29uZmlnX2ZsYWdzIHw9CisJCQkJVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1ZMQU5fUkVNX0VOQUJMRTsKKwkJRFAoTkVUSUZfTVNHX0lGVVAsICJ2bGFuIHJlbW92YWwgZW5hYmxlZFxuIik7CisJfQorI2VuZGlmCisKKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQl0c3Rvcm1fY2xpZW50LnN0YXRpc3RpY3NfY291bnRlcl9pZCA9IGJwLT5mcFtpXS5jbF9pZDsKKworCQlSRUdfV1IoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCisJCSAgICAgICBUU1RPUk1fQ0xJRU5UX0NPTkZJR19PRkZTRVQocG9ydCwgYnAtPmZwW2ldLmNsX2lkKSwKKwkJICAgICAgICgodTMyICopJnRzdG9ybV9jbGllbnQpWzBdKTsKKwkJUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKworCQkgICAgICAgVFNUT1JNX0NMSUVOVF9DT05GSUdfT0ZGU0VUKHBvcnQsIGJwLT5mcFtpXS5jbF9pZCkgKyA0LAorCQkgICAgICAgKCh1MzIgKikmdHN0b3JtX2NsaWVudClbMV0pOworCX0KKworCURQKEJOWDJYX01TR19PRkYsICJ0c3Rvcm1fY2xpZW50OiAweCUwOHggMHglMDh4XG4iLAorCSAgICgodTMyICopJnRzdG9ybV9jbGllbnQpWzBdLCAoKHUzMiAqKSZ0c3Rvcm1fY2xpZW50KVsxXSk7Cit9CisKK3ZvaWQgYm54Mnhfc2V0X3N0b3JtX3J4X21vZGUoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlzdHJ1Y3QgdHN0b3JtX2V0aF9tYWNfZmlsdGVyX2NvbmZpZyB0c3Rvcm1fbWFjX2ZpbHRlciA9IHswfTsKKwlpbnQgbW9kZSA9IGJwLT5yeF9tb2RlOworCWludCBtYXNrID0gYnAtPnJ4X21vZGVfY2xfbWFzazsKKwlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJaW50IGk7CisJLyogQWxsIGJ1dCBtYW5hZ2VtZW50IHVuaWNhc3QgcGFja2V0cyBzaG91bGQgcGFzcyB0byB0aGUgaG9zdCBhcyB3ZWxsICovCisJdTMyIGxsaF9tYXNrID0KKwkJTklHX0xMSDBfQlJCMV9EUlZfTUFTS19SRUdfTExIMF9CUkIxX0RSVl9NQVNLX0JSQ1NUIHwKKwkJTklHX0xMSDBfQlJCMV9EUlZfTUFTS19SRUdfTExIMF9CUkIxX0RSVl9NQVNLX01MQ1NUIHwKKwkJTklHX0xMSDBfQlJCMV9EUlZfTUFTS19SRUdfTExIMF9CUkIxX0RSVl9NQVNLX1ZMQU4gfAorCQlOSUdfTExIMF9CUkIxX0RSVl9NQVNLX1JFR19MTEgwX0JSQjFfRFJWX01BU0tfTk9fVkxBTjsKKworCURQKE5FVElGX01TR19JRlVQLCAicnggbW9kZSAlZCAgbWFzayAweCV4XG4iLCBtb2RlLCBtYXNrKTsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQk5YMlhfUlhfTU9ERV9OT05FOiAvKiBubyBSeCAqLworCQl0c3Rvcm1fbWFjX2ZpbHRlci51Y2FzdF9kcm9wX2FsbCA9IG1hc2s7CisJCXRzdG9ybV9tYWNfZmlsdGVyLm1jYXN0X2Ryb3BfYWxsID0gbWFzazsKKwkJdHN0b3JtX21hY19maWx0ZXIuYmNhc3RfZHJvcF9hbGwgPSBtYXNrOworCQlicmVhazsKKworCWNhc2UgQk5YMlhfUlhfTU9ERV9OT1JNQUw6CisJCXRzdG9ybV9tYWNfZmlsdGVyLmJjYXN0X2FjY2VwdF9hbGwgPSBtYXNrOworCQlicmVhazsKKworCWNhc2UgQk5YMlhfUlhfTU9ERV9BTExNVUxUSToKKwkJdHN0b3JtX21hY19maWx0ZXIubWNhc3RfYWNjZXB0X2FsbCA9IG1hc2s7CisJCXRzdG9ybV9tYWNfZmlsdGVyLmJjYXN0X2FjY2VwdF9hbGwgPSBtYXNrOworCQlicmVhazsKKworCWNhc2UgQk5YMlhfUlhfTU9ERV9QUk9NSVNDOgorCQl0c3Rvcm1fbWFjX2ZpbHRlci51Y2FzdF9hY2NlcHRfYWxsID0gbWFzazsKKwkJdHN0b3JtX21hY19maWx0ZXIubWNhc3RfYWNjZXB0X2FsbCA9IG1hc2s7CisJCXRzdG9ybV9tYWNfZmlsdGVyLmJjYXN0X2FjY2VwdF9hbGwgPSBtYXNrOworCQkvKiBwYXNzIG1hbmFnZW1lbnQgdW5pY2FzdCBwYWNrZXRzIGFzIHdlbGwgKi8KKwkJbGxoX21hc2sgfD0gTklHX0xMSDBfQlJCMV9EUlZfTUFTS19SRUdfTExIMF9CUkIxX0RSVl9NQVNLX1VOQ1NUOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUJOWDJYX0VSUigiQkFEIHJ4IG1vZGUgKCVkKVxuIiwgbW9kZSk7CisJCWJyZWFrOworCX0KKworCVJFR19XUihicCwKKwkgICAgICAgKHBvcnQgPyBOSUdfUkVHX0xMSDFfQlJCMV9EUlZfTUFTSyA6IE5JR19SRUdfTExIMF9CUkIxX0RSVl9NQVNLKSwKKwkgICAgICAgbGxoX21hc2spOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgdHN0b3JtX2V0aF9tYWNfZmlsdGVyX2NvbmZpZykvNDsgaSsrKSB7CisJCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKKwkJICAgICAgIFRTVE9STV9NQUNfRklMVEVSX0NPTkZJR19PRkZTRVQoZnVuYykgKyBpICogNCwKKwkJICAgICAgICgodTMyICopJnRzdG9ybV9tYWNfZmlsdGVyKVtpXSk7CisKKy8qCQlEUChORVRJRl9NU0dfSUZVUCwgInRzdG9ybV9tYWNfZmlsdGVyWyVkXTogMHglMDh4XG4iLCBpLAorCQkgICAoKHUzMiAqKSZ0c3Rvcm1fbWFjX2ZpbHRlcilbaV0pOyAqLworCX0KKworCWlmIChtb2RlICE9IEJOWDJYX1JYX01PREVfTk9ORSkKKwkJYm54Mnhfc2V0X2NsaWVudF9jb25maWcoYnApOworfQorCitzdGF0aWMgdm9pZCBibngyeF9pbml0X2ludGVybmFsX2NvbW1vbihzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBpOworCisJLyogWmVybyB0aGlzIG1hbnVhbGx5IGFzIGl0cyBpbml0aWFsaXphdGlvbiBpcworCSAgIGN1cnJlbnRseSBtaXNzaW5nIGluIHRoZSBpbml0VG9vbCAqLworCWZvciAoaSA9IDA7IGkgPCAoVVNUT1JNX0FHR19EQVRBX1NJWkUgPj4gMik7IGkrKykKKwkJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKworCQkgICAgICAgVVNUT1JNX0FHR19EQVRBX09GRlNFVCArIGkgKiA0LCAwKTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfaW5pdF9pbnRlcm5hbF9wb3J0KHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKworCVJFR19XUihicCwKKwkgICAgICAgQkFSX0NTVFJPUk1fSU5UTUVNICsgQ1NUT1JNX0hDX0JUUl9VX09GRlNFVChwb3J0KSwgQk5YMlhfQlRSKTsKKwlSRUdfV1IoYnAsCisJICAgICAgIEJBUl9DU1RST1JNX0lOVE1FTSArIENTVE9STV9IQ19CVFJfQ19PRkZTRVQocG9ydCksIEJOWDJYX0JUUik7CisJUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKyBUU1RPUk1fSENfQlRSX09GRlNFVChwb3J0KSwgQk5YMlhfQlRSKTsKKwlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArIFhTVE9STV9IQ19CVFJfT0ZGU0VUKHBvcnQpLCBCTlgyWF9CVFIpOworfQorCitzdGF0aWMgdm9pZCBibngyeF9pbml0X2ludGVybmFsX2Z1bmMoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlzdHJ1Y3QgdHN0b3JtX2V0aF9mdW5jdGlvbl9jb21tb25fY29uZmlnIHRzdG9ybV9jb25maWcgPSB7MH07CisJc3RydWN0IHN0YXRzX2luZGljYXRpb25fZmxhZ3Mgc3RhdHNfZmxhZ3MgPSB7MH07CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOworCWludCBpLCBqOworCXUzMiBvZmZzZXQ7CisJdTE2IG1heF9hZ2dfc2l6ZTsKKworCXRzdG9ybV9jb25maWcuY29uZmlnX2ZsYWdzID0gUlNTX0ZMQUdTKGJwKTsKKworCWlmIChpc19tdWx0aShicCkpCisJCXRzdG9ybV9jb25maWcucnNzX3Jlc3VsdF9tYXNrID0gTVVMVElfTUFTSzsKKworCS8qIEVuYWJsZSBUUEEgaWYgbmVlZGVkICovCisJaWYgKGJwLT5mbGFncyAmIFRQQV9FTkFCTEVfRkxBRykKKwkJdHN0b3JtX2NvbmZpZy5jb25maWdfZmxhZ3MgfD0KKwkJCVRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19FTkFCTEVfVFBBOworCisJaWYgKElTX0UxSE1GKGJwKSkKKwkJdHN0b3JtX2NvbmZpZy5jb25maWdfZmxhZ3MgfD0KKwkJCQlUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfRTFIT1ZfSU5fQ0FNOworCisJdHN0b3JtX2NvbmZpZy5sZWFkaW5nX2NsaWVudF9pZCA9IEJQX0xfSUQoYnApOworCisJUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKworCSAgICAgICBUU1RPUk1fRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19PRkZTRVQoZnVuYyksCisJICAgICAgICgqKHUzMiAqKSZ0c3Rvcm1fY29uZmlnKSk7CisKKwlicC0+cnhfbW9kZSA9IEJOWDJYX1JYX01PREVfTk9ORTsgLyogbm8gcnggdW50aWwgbGluayBpcyB1cCAqLworCWJwLT5yeF9tb2RlX2NsX21hc2sgPSAoMSA8PCBCUF9MX0lEKGJwKSk7CisJYm54Mnhfc2V0X3N0b3JtX3J4X21vZGUoYnApOworCisJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJdTggY2xfaWQgPSBicC0+ZnBbaV0uY2xfaWQ7CisKKwkJLyogcmVzZXQgeHN0b3JtIHBlciBjbGllbnQgc3RhdGlzdGljcyAqLworCQlvZmZzZXQgPSBCQVJfWFNUUk9STV9JTlRNRU0gKworCQkJIFhTVE9STV9QRVJfQ09VTlRFUl9JRF9TVEFUU19PRkZTRVQocG9ydCwgY2xfaWQpOworCQlmb3IgKGogPSAwOworCQkgICAgIGogPCBzaXplb2Yoc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSAvIDQ7IGorKykKKwkJCVJFR19XUihicCwgb2Zmc2V0ICsgaio0LCAwKTsKKworCQkvKiByZXNldCB0c3Rvcm0gcGVyIGNsaWVudCBzdGF0aXN0aWNzICovCisJCW9mZnNldCA9IEJBUl9UU1RST1JNX0lOVE1FTSArCisJCQkgVFNUT1JNX1BFUl9DT1VOVEVSX0lEX1NUQVRTX09GRlNFVChwb3J0LCBjbF9pZCk7CisJCWZvciAoaiA9IDA7CisJCSAgICAgaiA8IHNpemVvZihzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMpIC8gNDsgaisrKQorCQkJUkVHX1dSKGJwLCBvZmZzZXQgKyBqKjQsIDApOworCisJCS8qIHJlc2V0IHVzdG9ybSBwZXIgY2xpZW50IHN0YXRpc3RpY3MgKi8KKwkJb2Zmc2V0ID0gQkFSX1VTVFJPUk1fSU5UTUVNICsKKwkJCSBVU1RPUk1fUEVSX0NPVU5URVJfSURfU1RBVFNfT0ZGU0VUKHBvcnQsIGNsX2lkKTsKKwkJZm9yIChqID0gMDsKKwkJICAgICBqIDwgc2l6ZW9mKHN0cnVjdCB1c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykgLyA0OyBqKyspCisJCQlSRUdfV1IoYnAsIG9mZnNldCArIGoqNCwgMCk7CisJfQorCisJLyogSW5pdCBzdGF0aXN0aWNzIHJlbGF0ZWQgY29udGV4dCAqLworCXN0YXRzX2ZsYWdzLmNvbGxlY3RfZXRoID0gMTsKKworCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsgWFNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChmdW5jKSwKKwkgICAgICAgKCh1MzIgKikmc3RhdHNfZmxhZ3MpWzBdKTsKKwlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArIFhTVE9STV9TVEFUU19GTEFHU19PRkZTRVQoZnVuYykgKyA0LAorCSAgICAgICAoKHUzMiAqKSZzdGF0c19mbGFncylbMV0pOworCisJUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKyBUU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKGZ1bmMpLAorCSAgICAgICAoKHUzMiAqKSZzdGF0c19mbGFncylbMF0pOworCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsgVFNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChmdW5jKSArIDQsCisJICAgICAgICgodTMyICopJnN0YXRzX2ZsYWdzKVsxXSk7CisKKwlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArIFVTVE9STV9TVEFUU19GTEFHU19PRkZTRVQoZnVuYyksCisJICAgICAgICgodTMyICopJnN0YXRzX2ZsYWdzKVswXSk7CisJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKyBVU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKGZ1bmMpICsgNCwKKwkgICAgICAgKCh1MzIgKikmc3RhdHNfZmxhZ3MpWzFdKTsKKworCVJFR19XUihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsgQ1NUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChmdW5jKSwKKwkgICAgICAgKCh1MzIgKikmc3RhdHNfZmxhZ3MpWzBdKTsKKwlSRUdfV1IoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArIENTVE9STV9TVEFUU19GTEFHU19PRkZTRVQoZnVuYykgKyA0LAorCSAgICAgICAoKHUzMiAqKSZzdGF0c19mbGFncylbMV0pOworCisJUkVHX1dSKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKworCSAgICAgICBYU1RPUk1fRVRIX1NUQVRTX1FVRVJZX0FERFJfT0ZGU0VUKGZ1bmMpLAorCSAgICAgICBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgZndfc3RhdHMpKSk7CisJUkVHX1dSKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKworCSAgICAgICBYU1RPUk1fRVRIX1NUQVRTX1FVRVJZX0FERFJfT0ZGU0VUKGZ1bmMpICsgNCwKKwkgICAgICAgVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIGZ3X3N0YXRzKSkpOworCisJUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKworCSAgICAgICBUU1RPUk1fRVRIX1NUQVRTX1FVRVJZX0FERFJfT0ZGU0VUKGZ1bmMpLAorCSAgICAgICBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgZndfc3RhdHMpKSk7CisJUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKworCSAgICAgICBUU1RPUk1fRVRIX1NUQVRTX1FVRVJZX0FERFJfT0ZGU0VUKGZ1bmMpICsgNCwKKwkgICAgICAgVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIGZ3X3N0YXRzKSkpOworCisJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKworCSAgICAgICBVU1RPUk1fRVRIX1NUQVRTX1FVRVJZX0FERFJfT0ZGU0VUKGZ1bmMpLAorCSAgICAgICBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgZndfc3RhdHMpKSk7CisJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKworCSAgICAgICBVU1RPUk1fRVRIX1NUQVRTX1FVRVJZX0FERFJfT0ZGU0VUKGZ1bmMpICsgNCwKKwkgICAgICAgVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIGZ3X3N0YXRzKSkpOworCisJaWYgKENISVBfSVNfRTFIKGJwKSkgeworCQlSRUdfV1I4KGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKyBYU1RPUk1fRlVOQ1RJT05fTU9ERV9PRkZTRVQsCisJCQlJU19FMUhNRihicCkpOworCQlSRUdfV1I4KGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKyBUU1RPUk1fRlVOQ1RJT05fTU9ERV9PRkZTRVQsCisJCQlJU19FMUhNRihicCkpOworCQlSRUdfV1I4KGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKyBDU1RPUk1fRlVOQ1RJT05fTU9ERV9PRkZTRVQsCisJCQlJU19FMUhNRihicCkpOworCQlSRUdfV1I4KGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKyBVU1RPUk1fRlVOQ1RJT05fTU9ERV9PRkZTRVQsCisJCQlJU19FMUhNRihicCkpOworCisJCVJFR19XUjE2KGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKyBYU1RPUk1fRTFIT1ZfT0ZGU0VUKGZ1bmMpLAorCQkJIGJwLT5lMWhvdik7CisJfQorCisJLyogSW5pdCBDUSByaW5nIG1hcHBpbmcgYW5kIGFnZ3JlZ2F0aW9uIHNpemUsIHRoZSBGVyBsaW1pdCBpcyA4IGZyYWdzICovCisJbWF4X2FnZ19zaXplID0gbWluX3QodTMyLCAobWluX3QodTMyLCA4LCBNQVhfU0tCX0ZSQUdTKSAqCisJCQkJICAgU0dFX1BBR0VfU0laRSAqIFBBR0VTX1BFUl9TR0UpLCAweGZmZmYpOworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOworCisJCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKKwkJICAgICAgIFVTVE9STV9DUUVfUEFHRV9CQVNFX09GRlNFVChwb3J0LCBmcC0+Y2xfaWQpLAorCQkgICAgICAgVTY0X0xPKGZwLT5yeF9jb21wX21hcHBpbmcpKTsKKwkJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKworCQkgICAgICAgVVNUT1JNX0NRRV9QQUdFX0JBU0VfT0ZGU0VUKHBvcnQsIGZwLT5jbF9pZCkgKyA0LAorCQkgICAgICAgVTY0X0hJKGZwLT5yeF9jb21wX21hcHBpbmcpKTsKKworCQkvKiBOZXh0IHBhZ2UgKi8KKwkJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKworCQkgICAgICAgVVNUT1JNX0NRRV9QQUdFX05FWFRfT0ZGU0VUKHBvcnQsIGZwLT5jbF9pZCksCisJCSAgICAgICBVNjRfTE8oZnAtPnJ4X2NvbXBfbWFwcGluZyArIEJDTV9QQUdFX1NJWkUpKTsKKwkJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKworCQkgICAgICAgVVNUT1JNX0NRRV9QQUdFX05FWFRfT0ZGU0VUKHBvcnQsIGZwLT5jbF9pZCkgKyA0LAorCQkgICAgICAgVTY0X0hJKGZwLT5yeF9jb21wX21hcHBpbmcgKyBCQ01fUEFHRV9TSVpFKSk7CisKKwkJUkVHX1dSMTYoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCisJCQkgVVNUT1JNX01BWF9BR0dfU0laRV9PRkZTRVQocG9ydCwgZnAtPmNsX2lkKSwKKwkJCSBtYXhfYWdnX3NpemUpOworCX0KKworCS8qIGRyb3BsZXNzIGZsb3cgY29udHJvbCAqLworCWlmIChDSElQX0lTX0UxSChicCkpIHsKKwkJc3RydWN0IHVzdG9ybV9ldGhfcnhfcGF1c2VfZGF0YV9lMWggcnhfcGF1c2UgPSB7MH07CisKKwkJcnhfcGF1c2UuYmRfdGhyX2xvdyA9IDI1MDsKKwkJcnhfcGF1c2UuY3FlX3Rocl9sb3cgPSAyNTA7CisJCXJ4X3BhdXNlLmNvcyA9IDE7CisJCXJ4X3BhdXNlLnNnZV90aHJfbG93ID0gMDsKKwkJcnhfcGF1c2UuYmRfdGhyX2hpZ2ggPSAzNTA7CisJCXJ4X3BhdXNlLmNxZV90aHJfaGlnaCA9IDM1MDsKKwkJcnhfcGF1c2Uuc2dlX3Rocl9oaWdoID0gMDsKKworCQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CisKKwkJCWlmICghZnAtPmRpc2FibGVfdHBhKSB7CisJCQkJcnhfcGF1c2Uuc2dlX3Rocl9sb3cgPSAxNTA7CisJCQkJcnhfcGF1c2Uuc2dlX3Rocl9oaWdoID0gMjUwOworCQkJfQorCisKKwkJCW9mZnNldCA9IEJBUl9VU1RST1JNX0lOVE1FTSArCisJCQkJIFVTVE9STV9FVEhfUklOR19QQVVTRV9EQVRBX09GRlNFVChwb3J0LAorCQkJCQkJCQkgICBmcC0+Y2xfaWQpOworCQkJZm9yIChqID0gMDsKKwkJCSAgICAgaiA8IHNpemVvZihzdHJ1Y3QgdXN0b3JtX2V0aF9yeF9wYXVzZV9kYXRhX2UxaCkvNDsKKwkJCSAgICAgaisrKQorCQkJCVJFR19XUihicCwgb2Zmc2V0ICsgaio0LAorCQkJCSAgICAgICAoKHUzMiAqKSZyeF9wYXVzZSlbal0pOworCQl9CisJfQorCisJbWVtc2V0KCYoYnAtPmNtbmcpLCAwLCBzaXplb2Yoc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0KSk7CisKKwkvKiBJbml0IHJhdGUgc2hhcGluZyBhbmQgZmFpcm5lc3MgY29udGV4dHMgKi8KKwlpZiAoSVNfRTFITUYoYnApKSB7CisJCWludCB2bjsKKworCQkvKiBEdXJpbmcgaW5pdCB0aGVyZSBpcyBubyBhY3RpdmUgbGluaworCQkgICBVbnRpbCBsaW5rIGlzIHVwLCBzZXQgbGluayByYXRlIHRvIDEwR2JwcyAqLworCQlicC0+bGlua192YXJzLmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwMDsKKwkJYm54MnhfaW5pdF9wb3J0X21pbm1heChicCk7CisKKwkJaWYgKCFCUF9OT01DUChicCkpCisJCQlicC0+bWZfY29uZmlnID0KKwkJCSAgICAgIFNITUVNX1JEKGJwLCBtZl9jZmcuZnVuY19tZl9jb25maWdbZnVuY10uY29uZmlnKTsKKwkJYm54MnhfY2FsY192bl93ZWlnaHRfc3VtKGJwKTsKKworCQlmb3IgKHZuID0gVk5fMDsgdm4gPCBFMUhWTl9NQVg7IHZuKyspCisJCQlibngyeF9pbml0X3ZuX21pbm1heChicCwgMip2biArIHBvcnQpOworCisJCS8qIEVuYWJsZSByYXRlIHNoYXBpbmcgYW5kIGZhaXJuZXNzICovCisJCWJwLT5jbW5nLmZsYWdzLmNtbmdfZW5hYmxlcyB8PQorCQkJCQlDTU5HX0ZMQUdTX1BFUl9QT1JUX1JBVEVfU0hBUElOR19WTjsKKworCX0gZWxzZSB7CisJCS8qIHJhdGUgc2hhcGluZyBhbmQgZmFpcm5lc3MgYXJlIGRpc2FibGVkICovCisJCURQKE5FVElGX01TR19JRlVQLAorCQkgICAic2luZ2xlIGZ1bmN0aW9uIG1vZGUgIG1pbm1heCB3aWxsIGJlIGRpc2FibGVkXG4iKTsKKwl9CisKKworCS8qIFN0b3JlIGNtbmcgc3RydWN0dXJlcyB0byBpbnRlcm5hbCBtZW1vcnkgKi8KKwlpZiAoYnAtPnBvcnQucG1mKQorCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBjbW5nX3N0cnVjdF9wZXJfcG9ydCkgLyA0OyBpKyspCisJCQlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCisJCQkgICAgICAgWFNUT1JNX0NNTkdfUEVSX1BPUlRfVkFSU19PRkZTRVQocG9ydCkgKyBpICogNCwKKwkJCSAgICAgICAoKHUzMiAqKSgmYnAtPmNtbmcpKVtpXSk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2luaXRfaW50ZXJuYWwoc3RydWN0IGJueDJ4ICpicCwgdTMyIGxvYWRfY29kZSkKK3sKKwlzd2l0Y2ggKGxvYWRfY29kZSkgeworCWNhc2UgRldfTVNHX0NPREVfRFJWX0xPQURfQ09NTU9OOgorCQlibngyeF9pbml0X2ludGVybmFsX2NvbW1vbihicCk7CisJCS8qIG5vIGJyZWFrICovCisKKwljYXNlIEZXX01TR19DT0RFX0RSVl9MT0FEX1BPUlQ6CisJCWJueDJ4X2luaXRfaW50ZXJuYWxfcG9ydChicCk7CisJCS8qIG5vIGJyZWFrICovCisKKwljYXNlIEZXX01TR19DT0RFX0RSVl9MT0FEX0ZVTkNUSU9OOgorCQlibngyeF9pbml0X2ludGVybmFsX2Z1bmMoYnApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUJOWDJYX0VSUigiVW5rbm93biBsb2FkX2NvZGUgKDB4JXgpIGZyb20gTUNQXG4iLCBsb2FkX2NvZGUpOworCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgYm54MnhfbmljX2luaXQoc3RydWN0IGJueDJ4ICpicCwgdTMyIGxvYWRfY29kZSkKK3sKKwlpbnQgaTsKKworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOworCisJCWZwLT5icCA9IGJwOworCQlmcC0+c3RhdGUgPSBCTlgyWF9GUF9TVEFURV9DTE9TRUQ7CisJCWZwLT5pbmRleCA9IGk7CisJCWZwLT5jbF9pZCA9IEJQX0xfSUQoYnApICsgaTsKKyNpZmRlZiBCQ01fQ05JQworCQlmcC0+c2JfaWQgPSBmcC0+Y2xfaWQgKyAxOworI2Vsc2UKKwkJZnAtPnNiX2lkID0gZnAtPmNsX2lkOworI2VuZGlmCisJCURQKE5FVElGX01TR19JRlVQLAorCQkgICAicXVldWVbJWRdOiAgYm54MnhfaW5pdF9zYiglcCwlcCkgIGNsX2lkICVkICBzYiAlZFxuIiwKKwkJICAgaSwgYnAsIGZwLT5zdGF0dXNfYmxrLCBmcC0+Y2xfaWQsIGZwLT5zYl9pZCk7CisJCWJueDJ4X2luaXRfc2IoYnAsIGZwLT5zdGF0dXNfYmxrLCBmcC0+c3RhdHVzX2Jsa19tYXBwaW5nLAorCQkJICAgICAgZnAtPnNiX2lkKTsKKwkJYm54MnhfdXBkYXRlX2Zwc2JfaWR4KGZwKTsKKwl9CisKKwkvKiBlbnN1cmUgc3RhdHVzIGJsb2NrIGluZGljZXMgd2VyZSByZWFkICovCisJcm1iKCk7CisKKworCWJueDJ4X2luaXRfZGVmX3NiKGJwLCBicC0+ZGVmX3N0YXR1c19ibGssIGJwLT5kZWZfc3RhdHVzX2Jsa19tYXBwaW5nLAorCQkJICBERUZfU0JfSUQpOworCWJueDJ4X3VwZGF0ZV9kc2JfaWR4KGJwKTsKKwlibngyeF91cGRhdGVfY29hbGVzY2UoYnApOworCWJueDJ4X2luaXRfcnhfcmluZ3MoYnApOworCWJueDJ4X2luaXRfdHhfcmluZyhicCk7CisJYm54MnhfaW5pdF9zcF9yaW5nKGJwKTsKKwlibngyeF9pbml0X2NvbnRleHQoYnApOworCWJueDJ4X2luaXRfaW50ZXJuYWwoYnAsIGxvYWRfY29kZSk7CisJYm54MnhfaW5pdF9pbmRfdGFibGUoYnApOworCWJueDJ4X3N0YXRzX2luaXQoYnApOworCisJLyogQXQgdGhpcyBwb2ludCwgd2UgYXJlIHJlYWR5IGZvciBpbnRlcnJ1cHRzICovCisJYXRvbWljX3NldCgmYnAtPmludHJfc2VtLCAwKTsKKworCS8qIGZsdXNoIGFsbCBiZWZvcmUgZW5hYmxpbmcgaW50ZXJydXB0cyAqLworCW1iKCk7CisJbW1pb3diKCk7CisKKwlibngyeF9pbnRfZW5hYmxlKGJwKTsKKworCS8qIENoZWNrIGZvciBTUElPNSAqLworCWJueDJ4X2F0dG5faW50X2RlYXNzZXJ0ZWQwKGJwLAorCQlSRUdfUkQoYnAsIE1JU0NfUkVHX0FFVV9BRlRFUl9JTlZFUlRfMV9GVU5DXzAgKyBCUF9QT1JUKGJwKSo0KSAmCisJCQkJICAgQUVVX0lOUFVUU19BVFROX0JJVFNfU1BJTzUpOworfQorCisvKiBlbmQgb2YgbmljIGluaXQgKi8KKworLyoKKyAqIGd6aXAgc2VydmljZSBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgaW50IGJueDJ4X2d1bnppcF9pbml0KHN0cnVjdCBibngyeCAqYnApCit7CisJYnAtPmd1bnppcF9idWYgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmJwLT5wZGV2LT5kZXYsIEZXX0JVRl9TSVpFLAorCQkJCQkgICAgJmJwLT5ndW56aXBfbWFwcGluZywgR0ZQX0tFUk5FTCk7CisJaWYgKGJwLT5ndW56aXBfYnVmICA9PSBOVUxMKQorCQlnb3RvIGd1bnppcF9ub21lbTE7CisKKwlicC0+c3RybSA9IGttYWxsb2Moc2l6ZW9mKCpicC0+c3RybSksIEdGUF9LRVJORUwpOworCWlmIChicC0+c3RybSAgPT0gTlVMTCkKKwkJZ290byBndW56aXBfbm9tZW0yOworCisJYnAtPnN0cm0tPndvcmtzcGFjZSA9IGttYWxsb2MoemxpYl9pbmZsYXRlX3dvcmtzcGFjZXNpemUoKSwKKwkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoYnAtPnN0cm0tPndvcmtzcGFjZSA9PSBOVUxMKQorCQlnb3RvIGd1bnppcF9ub21lbTM7CisKKwlyZXR1cm4gMDsKKworZ3VuemlwX25vbWVtMzoKKwlrZnJlZShicC0+c3RybSk7CisJYnAtPnN0cm0gPSBOVUxMOworCitndW56aXBfbm9tZW0yOgorCWRtYV9mcmVlX2NvaGVyZW50KCZicC0+cGRldi0+ZGV2LCBGV19CVUZfU0laRSwgYnAtPmd1bnppcF9idWYsCisJCQkgIGJwLT5ndW56aXBfbWFwcGluZyk7CisJYnAtPmd1bnppcF9idWYgPSBOVUxMOworCitndW56aXBfbm9tZW0xOgorCW5ldGRldl9lcnIoYnAtPmRldiwgIkNhbm5vdCBhbGxvY2F0ZSBmaXJtd2FyZSBidWZmZXIgZm9yIgorCSAgICAgICAiIHVuLWNvbXByZXNzaW9uXG4iKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfZ3VuemlwX2VuZChzdHJ1Y3QgYm54MnggKmJwKQoreworCWtmcmVlKGJwLT5zdHJtLT53b3Jrc3BhY2UpOworCisJa2ZyZWUoYnAtPnN0cm0pOworCWJwLT5zdHJtID0gTlVMTDsKKworCWlmIChicC0+Z3VuemlwX2J1ZikgeworCQlkbWFfZnJlZV9jb2hlcmVudCgmYnAtPnBkZXYtPmRldiwgRldfQlVGX1NJWkUsIGJwLT5ndW56aXBfYnVmLAorCQkJCSAgYnAtPmd1bnppcF9tYXBwaW5nKTsKKwkJYnAtPmd1bnppcF9idWYgPSBOVUxMOworCX0KK30KKworc3RhdGljIGludCBibngyeF9ndW56aXAoc3RydWN0IGJueDJ4ICpicCwgY29uc3QgdTggKnpidWYsIGludCBsZW4pCit7CisJaW50IG4sIHJjOworCisJLyogY2hlY2sgZ3ppcCBoZWFkZXIgKi8KKwlpZiAoKHpidWZbMF0gIT0gMHgxZikgfHwgKHpidWZbMV0gIT0gMHg4YikgfHwgKHpidWZbMl0gIT0gWl9ERUZMQVRFRCkpIHsKKwkJQk5YMlhfRVJSKCJCYWQgZ3ppcCBoZWFkZXJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwluID0gMTA7CisKKyNkZWZpbmUgRk5BTUUJCQkJMHg4CisKKwlpZiAoemJ1ZlszXSAmIEZOQU1FKQorCQl3aGlsZSAoKHpidWZbbisrXSAhPSAwKSAmJiAobiA8IGxlbikpOworCisJYnAtPnN0cm0tPm5leHRfaW4gPSAodHlwZW9mKGJwLT5zdHJtLT5uZXh0X2luKSl6YnVmICsgbjsKKwlicC0+c3RybS0+YXZhaWxfaW4gPSBsZW4gLSBuOworCWJwLT5zdHJtLT5uZXh0X291dCA9IGJwLT5ndW56aXBfYnVmOworCWJwLT5zdHJtLT5hdmFpbF9vdXQgPSBGV19CVUZfU0laRTsKKworCXJjID0gemxpYl9pbmZsYXRlSW5pdDIoYnAtPnN0cm0sIC1NQVhfV0JJVFMpOworCWlmIChyYyAhPSBaX09LKQorCQlyZXR1cm4gcmM7CisKKwlyYyA9IHpsaWJfaW5mbGF0ZShicC0+c3RybSwgWl9GSU5JU0gpOworCWlmICgocmMgIT0gWl9PSykgJiYgKHJjICE9IFpfU1RSRUFNX0VORCkpCisJCW5ldGRldl9lcnIoYnAtPmRldiwgIkZpcm13YXJlIGRlY29tcHJlc3Npb24gZXJyb3I6ICVzXG4iLAorCQkJICAgYnAtPnN0cm0tPm1zZyk7CisKKwlicC0+Z3VuemlwX291dGxlbiA9IChGV19CVUZfU0laRSAtIGJwLT5zdHJtLT5hdmFpbF9vdXQpOworCWlmIChicC0+Z3VuemlwX291dGxlbiAmIDB4MykKKwkJbmV0ZGV2X2VycihicC0+ZGV2LCAiRmlybXdhcmUgZGVjb21wcmVzc2lvbiBlcnJvcjoiCisJCQkJICAgICIgZ3VuemlwX291dGxlbiAoJWQpIG5vdCBhbGlnbmVkXG4iLAorCQkJCWJwLT5ndW56aXBfb3V0bGVuKTsKKwlicC0+Z3VuemlwX291dGxlbiA+Pj0gMjsKKworCXpsaWJfaW5mbGF0ZUVuZChicC0+c3RybSk7CisKKwlpZiAocmMgPT0gWl9TVFJFQU1fRU5EKQorCQlyZXR1cm4gMDsKKworCXJldHVybiByYzsKK30KKworLyogbmljIGxvYWQvdW5sb2FkICovCisKKy8qCisgKiBHZW5lcmFsIHNlcnZpY2UgZnVuY3Rpb25zCisgKi8KKworLyogc2VuZCBhIE5JRyBsb29wYmFjayBkZWJ1ZyBwYWNrZXQgKi8KK3N0YXRpYyB2b2lkIGJueDJ4X2xiX3Bja3Qoc3RydWN0IGJueDJ4ICpicCkKK3sKKwl1MzIgd2Jfd3JpdGVbM107CisKKwkvKiBFdGhlcm5ldCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyAqLworCXdiX3dyaXRlWzBdID0gMHg1NTU1NTU1NTsKKwl3Yl93cml0ZVsxXSA9IDB4NTU1NTU1NTU7CisJd2Jfd3JpdGVbMl0gPSAweDIwOwkJLyogU09QICovCisJUkVHX1dSX0RNQUUoYnAsIE5JR19SRUdfREVCVUdfUEFDS0VUX0xCLCB3Yl93cml0ZSwgMyk7CisKKwkvKiBOT04tSVAgcHJvdG9jb2wgKi8KKwl3Yl93cml0ZVswXSA9IDB4MDkwMDAwMDA7CisJd2Jfd3JpdGVbMV0gPSAweDU1NTU1NTU1OworCXdiX3dyaXRlWzJdID0gMHgxMDsJCS8qIEVPUCwgZW9wX2J2YWxpZCA9IDAgKi8KKwlSRUdfV1JfRE1BRShicCwgTklHX1JFR19ERUJVR19QQUNLRVRfTEIsIHdiX3dyaXRlLCAzKTsKK30KKworLyogc29tZSBvZiB0aGUgaW50ZXJuYWwgbWVtb3JpZXMKKyAqIGFyZSBub3QgZGlyZWN0bHkgcmVhZGFibGUgZnJvbSB0aGUgZHJpdmVyCisgKiB0byB0ZXN0IHRoZW0gd2Ugc2VuZCBkZWJ1ZyBwYWNrZXRzCisgKi8KK3N0YXRpYyBpbnQgYm54MnhfaW50X21lbV90ZXN0KHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IGZhY3RvcjsKKwlpbnQgY291bnQsIGk7CisJdTMyIHZhbCA9IDA7CisKKwlpZiAoQ0hJUF9SRVZfSVNfRlBHQShicCkpCisJCWZhY3RvciA9IDEyMDsKKwllbHNlIGlmIChDSElQX1JFVl9JU19FTVVMKGJwKSkKKwkJZmFjdG9yID0gMjAwOworCWVsc2UKKwkJZmFjdG9yID0gMTsKKworCURQKE5FVElGX01TR19IVywgInN0YXJ0IHBhcnQxXG4iKTsKKworCS8qIERpc2FibGUgaW5wdXRzIG9mIHBhcnNlciBuZWlnaGJvciBibG9ja3MgKi8KKwlSRUdfV1IoYnAsIFRTRE1fUkVHX0VOQUJMRV9JTjEsIDB4MCk7CisJUkVHX1dSKGJwLCBUQ01fUkVHX1BSU19JRkVOLCAweDApOworCVJFR19XUihicCwgQ0ZDX1JFR19ERUJVRzAsIDB4MSk7CisJUkVHX1dSKGJwLCBOSUdfUkVHX1BSU19SRVFfSU5fRU4sIDB4MCk7CisKKwkvKiAgV3JpdGUgMCB0byBwYXJzZXIgY3JlZGl0cyBmb3IgQ0ZDIHNlYXJjaCByZXF1ZXN0ICovCisJUkVHX1dSKGJwLCBQUlNfUkVHX0NGQ19TRUFSQ0hfSU5JVElBTF9DUkVESVQsIDB4MCk7CisKKwkvKiBzZW5kIEV0aGVybmV0IHBhY2tldCAqLworCWJueDJ4X2xiX3Bja3QoYnApOworCisJLyogVE9ETyBkbyBpIHJlc2V0IE5JRyBzdGF0aXN0aWM/ICovCisJLyogV2FpdCB1bnRpbCBOSUcgcmVnaXN0ZXIgc2hvd3MgMSBwYWNrZXQgb2Ygc2l6ZSAweDEwICovCisJY291bnQgPSAxMDAwICogZmFjdG9yOworCXdoaWxlIChjb3VudCkgeworCisJCWJueDJ4X3JlYWRfZG1hZShicCwgTklHX1JFR19TVEFUMl9CUkJfT0NURVQsIDIpOworCQl2YWwgPSAqYm54Mnhfc3AoYnAsIHdiX2RhdGFbMF0pOworCQlpZiAodmFsID09IDB4MTApCisJCQlicmVhazsKKworCQltc2xlZXAoMTApOworCQljb3VudC0tOworCX0KKwlpZiAodmFsICE9IDB4MTApIHsKKwkJQk5YMlhfRVJSKCJOSUcgdGltZW91dCAgdmFsID0gMHgleFxuIiwgdmFsKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFdhaXQgdW50aWwgUFJTIHJlZ2lzdGVyIHNob3dzIDEgcGFja2V0ICovCisJY291bnQgPSAxMDAwICogZmFjdG9yOworCXdoaWxlIChjb3VudCkgeworCQl2YWwgPSBSRUdfUkQoYnAsIFBSU19SRUdfTlVNX09GX1BBQ0tFVFMpOworCQlpZiAodmFsID09IDEpCisJCQlicmVhazsKKworCQltc2xlZXAoMTApOworCQljb3VudC0tOworCX0KKwlpZiAodmFsICE9IDB4MSkgeworCQlCTlgyWF9FUlIoIlBSUyB0aW1lb3V0IHZhbCA9IDB4JXhcbiIsIHZhbCk7CisJCXJldHVybiAtMjsKKwl9CisKKwkvKiBSZXNldCBhbmQgaW5pdCBCUkIsIFBSUyAqLworCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzFfQ0xFQVIsIDB4MDMpOworCW1zbGVlcCg1MCk7CisJUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMV9TRVQsIDB4MDMpOworCW1zbGVlcCg1MCk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgQlJCMV9CTE9DSywgQ09NTU9OX1NUQUdFKTsKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBQUlNfQkxPQ0ssIENPTU1PTl9TVEFHRSk7CisKKwlEUChORVRJRl9NU0dfSFcsICJwYXJ0MlxuIik7CisKKwkvKiBEaXNhYmxlIGlucHV0cyBvZiBwYXJzZXIgbmVpZ2hib3IgYmxvY2tzICovCisJUkVHX1dSKGJwLCBUU0RNX1JFR19FTkFCTEVfSU4xLCAweDApOworCVJFR19XUihicCwgVENNX1JFR19QUlNfSUZFTiwgMHgwKTsKKwlSRUdfV1IoYnAsIENGQ19SRUdfREVCVUcwLCAweDEpOworCVJFR19XUihicCwgTklHX1JFR19QUlNfUkVRX0lOX0VOLCAweDApOworCisJLyogV3JpdGUgMCB0byBwYXJzZXIgY3JlZGl0cyBmb3IgQ0ZDIHNlYXJjaCByZXF1ZXN0ICovCisJUkVHX1dSKGJwLCBQUlNfUkVHX0NGQ19TRUFSQ0hfSU5JVElBTF9DUkVESVQsIDB4MCk7CisKKwkvKiBzZW5kIDEwIEV0aGVybmV0IHBhY2tldHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKKwkJYm54MnhfbGJfcGNrdChicCk7CisKKwkvKiBXYWl0IHVudGlsIE5JRyByZWdpc3RlciBzaG93cyAxMCArIDEKKwkgICBwYWNrZXRzIG9mIHNpemUgMTEqMHgxMCA9IDB4YjAgKi8KKwljb3VudCA9IDEwMDAgKiBmYWN0b3I7CisJd2hpbGUgKGNvdW50KSB7CisKKwkJYm54MnhfcmVhZF9kbWFlKGJwLCBOSUdfUkVHX1NUQVQyX0JSQl9PQ1RFVCwgMik7CisJCXZhbCA9ICpibngyeF9zcChicCwgd2JfZGF0YVswXSk7CisJCWlmICh2YWwgPT0gMHhiMCkKKwkJCWJyZWFrOworCisJCW1zbGVlcCgxMCk7CisJCWNvdW50LS07CisJfQorCWlmICh2YWwgIT0gMHhiMCkgeworCQlCTlgyWF9FUlIoIk5JRyB0aW1lb3V0ICB2YWwgPSAweCV4XG4iLCB2YWwpOworCQlyZXR1cm4gLTM7CisJfQorCisJLyogV2FpdCB1bnRpbCBQUlMgcmVnaXN0ZXIgc2hvd3MgMiBwYWNrZXRzICovCisJdmFsID0gUkVHX1JEKGJwLCBQUlNfUkVHX05VTV9PRl9QQUNLRVRTKTsKKwlpZiAodmFsICE9IDIpCisJCUJOWDJYX0VSUigiUFJTIHRpbWVvdXQgIHZhbCA9IDB4JXhcbiIsIHZhbCk7CisKKwkvKiBXcml0ZSAxIHRvIHBhcnNlciBjcmVkaXRzIGZvciBDRkMgc2VhcmNoIHJlcXVlc3QgKi8KKwlSRUdfV1IoYnAsIFBSU19SRUdfQ0ZDX1NFQVJDSF9JTklUSUFMX0NSRURJVCwgMHgxKTsKKworCS8qIFdhaXQgdW50aWwgUFJTIHJlZ2lzdGVyIHNob3dzIDMgcGFja2V0cyAqLworCW1zbGVlcCgxMCAqIGZhY3Rvcik7CisJLyogV2FpdCB1bnRpbCBOSUcgcmVnaXN0ZXIgc2hvd3MgMSBwYWNrZXQgb2Ygc2l6ZSAweDEwICovCisJdmFsID0gUkVHX1JEKGJwLCBQUlNfUkVHX05VTV9PRl9QQUNLRVRTKTsKKwlpZiAodmFsICE9IDMpCisJCUJOWDJYX0VSUigiUFJTIHRpbWVvdXQgIHZhbCA9IDB4JXhcbiIsIHZhbCk7CisKKwkvKiBjbGVhciBOSUcgRU9QIEZJRk8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTE7IGkrKykKKwkJUkVHX1JEKGJwLCBOSUdfUkVHX0lOR1JFU1NfRU9QX0xCX0ZJRk8pOworCXZhbCA9IFJFR19SRChicCwgTklHX1JFR19JTkdSRVNTX0VPUF9MQl9FTVBUWSk7CisJaWYgKHZhbCAhPSAxKSB7CisJCUJOWDJYX0VSUigiY2xlYXIgb2YgTklHIGZhaWxlZFxuIik7CisJCXJldHVybiAtNDsKKwl9CisKKwkvKiBSZXNldCBhbmQgaW5pdCBCUkIsIFBSUywgTklHICovCisJUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMV9DTEVBUiwgMHgwMyk7CisJbXNsZWVwKDUwKTsKKwlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18xX1NFVCwgMHgwMyk7CisJbXNsZWVwKDUwKTsKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBCUkIxX0JMT0NLLCBDT01NT05fU1RBR0UpOworCWJueDJ4X2luaXRfYmxvY2soYnAsIFBSU19CTE9DSywgQ09NTU9OX1NUQUdFKTsKKyNpZm5kZWYgQkNNX0NOSUMKKwkvKiBzZXQgTklDIG1vZGUgKi8KKwlSRUdfV1IoYnAsIFBSU19SRUdfTklDX01PREUsIDEpOworI2VuZGlmCisKKwkvKiBFbmFibGUgaW5wdXRzIG9mIHBhcnNlciBuZWlnaGJvciBibG9ja3MgKi8KKwlSRUdfV1IoYnAsIFRTRE1fUkVHX0VOQUJMRV9JTjEsIDB4N2ZmZmZmZmYpOworCVJFR19XUihicCwgVENNX1JFR19QUlNfSUZFTiwgMHgxKTsKKwlSRUdfV1IoYnAsIENGQ19SRUdfREVCVUcwLCAweDApOworCVJFR19XUihicCwgTklHX1JFR19QUlNfUkVRX0lOX0VOLCAweDEpOworCisJRFAoTkVUSUZfTVNHX0hXLCAiZG9uZVxuIik7CisKKwlyZXR1cm4gMDsgLyogT0sgKi8KK30KKworc3RhdGljIHZvaWQgZW5hYmxlX2Jsb2Nrc19hdHRlbnRpb24oc3RydWN0IGJueDJ4ICpicCkKK3sKKwlSRUdfV1IoYnAsIFBYUF9SRUdfUFhQX0lOVF9NQVNLXzAsIDApOworCVJFR19XUihicCwgUFhQX1JFR19QWFBfSU5UX01BU0tfMSwgMCk7CisJUkVHX1dSKGJwLCBET1JRX1JFR19ET1JRX0lOVF9NQVNLLCAwKTsKKwlSRUdfV1IoYnAsIENGQ19SRUdfQ0ZDX0lOVF9NQVNLLCAwKTsKKwlSRUdfV1IoYnAsIFFNX1JFR19RTV9JTlRfTUFTSywgMCk7CisJUkVHX1dSKGJwLCBUTV9SRUdfVE1fSU5UX01BU0ssIDApOworCVJFR19XUihicCwgWFNETV9SRUdfWFNETV9JTlRfTUFTS18wLCAwKTsKKwlSRUdfV1IoYnAsIFhTRE1fUkVHX1hTRE1fSU5UX01BU0tfMSwgMCk7CisJUkVHX1dSKGJwLCBYQ01fUkVHX1hDTV9JTlRfTUFTSywgMCk7CisvKglSRUdfV1IoYnAsIFhTRU1fUkVHX1hTRU1fSU5UX01BU0tfMCwgMCk7ICovCisvKglSRUdfV1IoYnAsIFhTRU1fUkVHX1hTRU1fSU5UX01BU0tfMSwgMCk7ICovCisJUkVHX1dSKGJwLCBVU0RNX1JFR19VU0RNX0lOVF9NQVNLXzAsIDApOworCVJFR19XUihicCwgVVNETV9SRUdfVVNETV9JTlRfTUFTS18xLCAwKTsKKwlSRUdfV1IoYnAsIFVDTV9SRUdfVUNNX0lOVF9NQVNLLCAwKTsKKy8qCVJFR19XUihicCwgVVNFTV9SRUdfVVNFTV9JTlRfTUFTS18wLCAwKTsgKi8KKy8qCVJFR19XUihicCwgVVNFTV9SRUdfVVNFTV9JTlRfTUFTS18xLCAwKTsgKi8KKwlSRUdfV1IoYnAsIEdSQ0JBU0VfVVBCICsgUEJfUkVHX1BCX0lOVF9NQVNLLCAwKTsKKwlSRUdfV1IoYnAsIENTRE1fUkVHX0NTRE1fSU5UX01BU0tfMCwgMCk7CisJUkVHX1dSKGJwLCBDU0RNX1JFR19DU0RNX0lOVF9NQVNLXzEsIDApOworCVJFR19XUihicCwgQ0NNX1JFR19DQ01fSU5UX01BU0ssIDApOworLyoJUkVHX1dSKGJwLCBDU0VNX1JFR19DU0VNX0lOVF9NQVNLXzAsIDApOyAqLworLyoJUkVHX1dSKGJwLCBDU0VNX1JFR19DU0VNX0lOVF9NQVNLXzEsIDApOyAqLworCWlmIChDSElQX1JFVl9JU19GUEdBKGJwKSkKKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19QWFAyX0lOVF9NQVNLXzAsIDB4NTgwMDAwKTsKKwllbHNlCisJCVJFR19XUihicCwgUFhQMl9SRUdfUFhQMl9JTlRfTUFTS18wLCAweDQ4MDAwMCk7CisJUkVHX1dSKGJwLCBUU0RNX1JFR19UU0RNX0lOVF9NQVNLXzAsIDApOworCVJFR19XUihicCwgVFNETV9SRUdfVFNETV9JTlRfTUFTS18xLCAwKTsKKwlSRUdfV1IoYnAsIFRDTV9SRUdfVENNX0lOVF9NQVNLLCAwKTsKKy8qCVJFR19XUihicCwgVFNFTV9SRUdfVFNFTV9JTlRfTUFTS18wLCAwKTsgKi8KKy8qCVJFR19XUihicCwgVFNFTV9SRUdfVFNFTV9JTlRfTUFTS18xLCAwKTsgKi8KKwlSRUdfV1IoYnAsIENEVV9SRUdfQ0RVX0lOVF9NQVNLLCAwKTsKKwlSRUdfV1IoYnAsIERNQUVfUkVHX0RNQUVfSU5UX01BU0ssIDApOworLyoJUkVHX1dSKGJwLCBNSVNDX1JFR19NSVNDX0lOVF9NQVNLLCAwKTsgKi8KKwlSRUdfV1IoYnAsIFBCRl9SRUdfUEJGX0lOVF9NQVNLLCAwWDE4KTsJCS8qIGJpdCAzLDQgbWFza2VkICovCit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCXUzMiBhZGRyOworCXUzMiBtYXNrOworfSBibngyeF9wYXJpdHlfbWFza1tdID0geworCXtQWFBfUkVHX1BYUF9QUlRZX01BU0ssIDB4ZmZmZmZmZmZ9LAorCXtQWFAyX1JFR19QWFAyX1BSVFlfTUFTS18wLCAweGZmZmZmZmZmfSwKKwl7UFhQMl9SRUdfUFhQMl9QUlRZX01BU0tfMSwgMHhmZmZmZmZmZn0sCisJe0hDX1JFR19IQ19QUlRZX01BU0ssIDB4ZmZmZmZmZmZ9LAorCXtNSVNDX1JFR19NSVNDX1BSVFlfTUFTSywgMHhmZmZmZmZmZn0sCisJe1FNX1JFR19RTV9QUlRZX01BU0ssIDB4MH0sCisJe0RPUlFfUkVHX0RPUlFfUFJUWV9NQVNLLCAweDB9LAorCXtHUkNCQVNFX1VQQiArIFBCX1JFR19QQl9QUlRZX01BU0ssIDB4MH0sCisJe0dSQ0JBU0VfWFBCICsgUEJfUkVHX1BCX1BSVFlfTUFTSywgMHgwfSwKKwl7U1JDX1JFR19TUkNfUFJUWV9NQVNLLCAweDR9LCAvKiBiaXQgMiAqLworCXtDRFVfUkVHX0NEVV9QUlRZX01BU0ssIDB4MH0sCisJe0NGQ19SRUdfQ0ZDX1BSVFlfTUFTSywgMHgwfSwKKwl7REJHX1JFR19EQkdfUFJUWV9NQVNLLCAweDB9LAorCXtETUFFX1JFR19ETUFFX1BSVFlfTUFTSywgMHgwfSwKKwl7QlJCMV9SRUdfQlJCMV9QUlRZX01BU0ssIDB4MH0sCisJe1BSU19SRUdfUFJTX1BSVFlfTUFTSywgKDE8PDYpfSwvKiBiaXQgNiAqLworCXtUU0RNX1JFR19UU0RNX1BSVFlfTUFTSywgMHgxOH0sLyogYml0IDMsNCAqLworCXtDU0RNX1JFR19DU0RNX1BSVFlfTUFTSywgMHg4fSwJLyogYml0IDMgKi8KKwl7VVNETV9SRUdfVVNETV9QUlRZX01BU0ssIDB4Mzh9LC8qIGJpdCAzLDQsNSAqLworCXtYU0RNX1JFR19YU0RNX1BSVFlfTUFTSywgMHg4fSwJLyogYml0IDMgKi8KKwl7VFNFTV9SRUdfVFNFTV9QUlRZX01BU0tfMCwgMHgwfSwKKwl7VFNFTV9SRUdfVFNFTV9QUlRZX01BU0tfMSwgMHgwfSwKKwl7VVNFTV9SRUdfVVNFTV9QUlRZX01BU0tfMCwgMHgwfSwKKwl7VVNFTV9SRUdfVVNFTV9QUlRZX01BU0tfMSwgMHgwfSwKKwl7Q1NFTV9SRUdfQ1NFTV9QUlRZX01BU0tfMCwgMHgwfSwKKwl7Q1NFTV9SRUdfQ1NFTV9QUlRZX01BU0tfMSwgMHgwfSwKKwl7WFNFTV9SRUdfWFNFTV9QUlRZX01BU0tfMCwgMHgwfSwKKwl7WFNFTV9SRUdfWFNFTV9QUlRZX01BU0tfMSwgMHgwfQorfTsKKworc3RhdGljIHZvaWQgZW5hYmxlX2Jsb2Nrc19wYXJpdHkoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgaSwgbWFza19hcnJfbGVuID0KKwkJc2l6ZW9mKGJueDJ4X3Bhcml0eV9tYXNrKS8oc2l6ZW9mKGJueDJ4X3Bhcml0eV9tYXNrWzBdKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbWFza19hcnJfbGVuOyBpKyspCisJCVJFR19XUihicCwgYm54MnhfcGFyaXR5X21hc2tbaV0uYWRkciwKKwkJCWJueDJ4X3Bhcml0eV9tYXNrW2ldLm1hc2spOworfQorCisKK3N0YXRpYyB2b2lkIGJueDJ4X3Jlc2V0X2NvbW1vbihzdHJ1Y3QgYm54MnggKmJwKQoreworCS8qIHJlc2V0X2NvbW1vbiAqLworCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzFfQ0xFQVIsCisJICAgICAgIDB4ZDNmZmZmN2YpOworCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfQ0xFQVIsIDB4MTQwMyk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2luaXRfcHhwKHN0cnVjdCBibngyeCAqYnApCit7CisJdTE2IGRldmN0bDsKKwlpbnQgcl9vcmRlciwgd19vcmRlcjsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGJwLT5wZGV2LAorCQkJICAgICBicC0+cGNpZV9jYXAgKyBQQ0lfRVhQX0RFVkNUTCwgJmRldmN0bCk7CisJRFAoTkVUSUZfTVNHX0hXLCAicmVhZCAweCV4IGZyb20gZGV2Y3RsXG4iLCBkZXZjdGwpOworCXdfb3JkZXIgPSAoKGRldmN0bCAmIFBDSV9FWFBfREVWQ1RMX1BBWUxPQUQpID4+IDUpOworCWlmIChicC0+bXJycyA9PSAtMSkKKwkJcl9vcmRlciA9ICgoZGV2Y3RsICYgUENJX0VYUF9ERVZDVExfUkVBRFJRKSA+PiAxMik7CisJZWxzZSB7CisJCURQKE5FVElGX01TR19IVywgImZvcmNlIHJlYWQgb3JkZXIgdG8gJWRcbiIsIGJwLT5tcnJzKTsKKwkJcl9vcmRlciA9IGJwLT5tcnJzOworCX0KKworCWJueDJ4X2luaXRfcHhwX2FyYihicCwgcl9vcmRlciwgd19vcmRlcik7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3NldHVwX2Zhbl9mYWlsdXJlX2RldGVjdGlvbihzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBpc19yZXF1aXJlZDsKKwl1MzIgdmFsOworCWludCBwb3J0OworCisJaWYgKEJQX05PTUNQKGJwKSkKKwkJcmV0dXJuOworCisJaXNfcmVxdWlyZWQgPSAwOworCXZhbCA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5zaGFyZWRfaHdfY29uZmlnLmNvbmZpZzIpICYKKwkgICAgICBTSEFSRURfSFdfQ0ZHX0ZBTl9GQUlMVVJFX01BU0s7CisKKwlpZiAodmFsID09IFNIQVJFRF9IV19DRkdfRkFOX0ZBSUxVUkVfRU5BQkxFRCkKKwkJaXNfcmVxdWlyZWQgPSAxOworCisJLyoKKwkgKiBUaGUgZmFuIGZhaWx1cmUgbWVjaGFuaXNtIGlzIHVzdWFsbHkgcmVsYXRlZCB0byB0aGUgUEhZIHR5cGUgc2luY2UKKwkgKiB0aGUgcG93ZXIgY29uc3VtcHRpb24gb2YgdGhlIGJvYXJkIGlzIGFmZmVjdGVkIGJ5IHRoZSBQSFkuIEN1cnJlbnRseSwKKwkgKiBmYW4gaXMgcmVxdWlyZWQgZm9yIG1vc3QgZGVzaWducyB3aXRoIFNGWDcxMDEsIEJDTTg3MjcgYW5kIEJDTTg0ODEuCisJICovCisJZWxzZSBpZiAodmFsID09IFNIQVJFRF9IV19DRkdfRkFOX0ZBSUxVUkVfUEhZX1RZUEUpCisJCWZvciAocG9ydCA9IFBPUlRfMDsgcG9ydCA8IFBPUlRfTUFYOyBwb3J0KyspIHsKKwkJCXUzMiBwaHlfdHlwZSA9CisJCQkJU0hNRU1fUkQoYnAsIGRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLgorCQkJCQkgZXh0ZXJuYWxfcGh5X2NvbmZpZykgJgorCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX01BU0s7CisJCQlpc19yZXF1aXJlZCB8PQorCQkJCSgocGh5X3R5cGUgPT0KKwkJCQkgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEpIHx8CisJCQkJIChwaHlfdHlwZSA9PQorCQkJCSAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNykgfHwKKwkJCQkgKHBoeV90eXBlID09CisJCQkJICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxKSk7CisJCX0KKworCURQKE5FVElGX01TR19IVywgImZhbiBkZXRlY3Rpb24gc2V0dGluZzogJWRcbiIsIGlzX3JlcXVpcmVkKTsKKworCWlmIChpc19yZXF1aXJlZCA9PSAwKQorCQlyZXR1cm47CisKKwkvKiBGYW4gZmFpbHVyZSBpcyBpbmRpY2F0ZWQgYnkgU1BJTyA1ICovCisJYm54Mnhfc2V0X3NwaW8oYnAsIE1JU0NfUkVHSVNURVJTX1NQSU9fNSwKKwkJICAgICAgIE1JU0NfUkVHSVNURVJTX1NQSU9fSU5QVVRfSElfWik7CisKKwkvKiBzZXQgdG8gYWN0aXZlIGxvdyBtb2RlICovCisJdmFsID0gUkVHX1JEKGJwLCBNSVNDX1JFR19TUElPX0lOVCk7CisJdmFsIHw9ICgoMSA8PCBNSVNDX1JFR0lTVEVSU19TUElPXzUpIDw8CisJCQkJCU1JU0NfUkVHSVNURVJTX1NQSU9fSU5UX09MRF9TRVRfUE9TKTsKKwlSRUdfV1IoYnAsIE1JU0NfUkVHX1NQSU9fSU5ULCB2YWwpOworCisJLyogZW5hYmxlIGludGVycnVwdCB0byBzaWduYWwgdGhlIElHVSAqLworCXZhbCA9IFJFR19SRChicCwgTUlTQ19SRUdfU1BJT19FVkVOVF9FTik7CisJdmFsIHw9ICgxIDw8IE1JU0NfUkVHSVNURVJTX1NQSU9fNSk7CisJUkVHX1dSKGJwLCBNSVNDX1JFR19TUElPX0VWRU5UX0VOLCB2YWwpOworfQorCitzdGF0aWMgaW50IGJueDJ4X2luaXRfY29tbW9uKHN0cnVjdCBibngyeCAqYnApCit7CisJdTMyIHZhbCwgaTsKKyNpZmRlZiBCQ01fQ05JQworCXUzMiB3Yl93cml0ZVsyXTsKKyNlbmRpZgorCisJRFAoQk5YMlhfTVNHX01DUCwgInN0YXJ0aW5nIGNvbW1vbiBpbml0ICBmdW5jICVkXG4iLCBCUF9GVU5DKGJwKSk7CisKKwlibngyeF9yZXNldF9jb21tb24oYnApOworCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzFfU0VULCAweGZmZmZmZmZmKTsKKwlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX1NFVCwgMHhmZmZjKTsKKworCWJueDJ4X2luaXRfYmxvY2soYnAsIE1JU0NfQkxPQ0ssIENPTU1PTl9TVEFHRSk7CisJaWYgKENISVBfSVNfRTFIKGJwKSkKKwkJUkVHX1dSKGJwLCBNSVNDX1JFR19FMUhNRl9NT0RFLCBJU19FMUhNRihicCkpOworCisJUkVHX1dSKGJwLCBNSVNDX1JFR19MQ1BMTF9DVFJMX1JFR18yLCAweDEwMCk7CisJbXNsZWVwKDMwKTsKKwlSRUdfV1IoYnAsIE1JU0NfUkVHX0xDUExMX0NUUkxfUkVHXzIsIDB4MCk7CisKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBQWFBfQkxPQ0ssIENPTU1PTl9TVEFHRSk7CisJaWYgKENISVBfSVNfRTEoYnApKSB7CisJCS8qIGVuYWJsZSBIVyBpbnRlcnJ1cHQgZnJvbSBQWFAgb24gVVNETSBvdmVyZmxvdworCQkgICBiaXQgMTYgb24gSU5UX01BU0tfMCAqLworCQlSRUdfV1IoYnAsIFBYUF9SRUdfUFhQX0lOVF9NQVNLXzAsIDApOworCX0KKworCWJueDJ4X2luaXRfYmxvY2soYnAsIFBYUDJfQkxPQ0ssIENPTU1PTl9TVEFHRSk7CisJYm54MnhfaW5pdF9weHAoYnApOworCisjaWZkZWYgX19CSUdfRU5ESUFOCisJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9RTV9FTkRJQU5fTSwgMSk7CisJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9UTV9FTkRJQU5fTSwgMSk7CisJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9TUkNfRU5ESUFOX00sIDEpOworCVJFR19XUihicCwgUFhQMl9SRUdfUlFfQ0RVX0VORElBTl9NLCAxKTsKKwlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX0RCR19FTkRJQU5fTSwgMSk7CisJLyogbWFrZSBzdXJlIHRoaXMgdmFsdWUgaXMgMCAqLworCVJFR19XUihicCwgUFhQMl9SRUdfUlFfSENfRU5ESUFOX00sIDApOworCisvKglSRUdfV1IoYnAsIFBYUDJfUkVHX1JEX1BCRl9TV0FQX01PREUsIDEpOyAqLworCVJFR19XUihicCwgUFhQMl9SRUdfUkRfUU1fU1dBUF9NT0RFLCAxKTsKKwlSRUdfV1IoYnAsIFBYUDJfUkVHX1JEX1RNX1NXQVBfTU9ERSwgMSk7CisJUkVHX1dSKGJwLCBQWFAyX1JFR19SRF9TUkNfU1dBUF9NT0RFLCAxKTsKKwlSRUdfV1IoYnAsIFBYUDJfUkVHX1JEX0NEVVJEX1NXQVBfTU9ERSwgMSk7CisjZW5kaWYKKworCVJFR19XUihicCwgUFhQMl9SRUdfUlFfQ0RVX1BfU0laRSwgMik7CisjaWZkZWYgQkNNX0NOSUMKKwlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX1RNX1BfU0laRSwgNSk7CisJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9RTV9QX1NJWkUsIDUpOworCVJFR19XUihicCwgUFhQMl9SRUdfUlFfU1JDX1BfU0laRSwgNSk7CisjZW5kaWYKKworCWlmIChDSElQX1JFVl9JU19GUEdBKGJwKSAmJiBDSElQX0lTX0UxSChicCkpCisJCVJFR19XUihicCwgUFhQMl9SRUdfUEdMX1RBR1NfTElNSVQsIDB4MSk7CisKKwkvKiBsZXQgdGhlIEhXIGRvIGl0J3MgbWFnaWMgLi4uICovCisJbXNsZWVwKDEwMCk7CisJLyogZmluaXNoIFBYUCBpbml0ICovCisJdmFsID0gUkVHX1JEKGJwLCBQWFAyX1JFR19SUV9DRkdfRE9ORSk7CisJaWYgKHZhbCAhPSAxKSB7CisJCUJOWDJYX0VSUigiUFhQMiBDRkcgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJdmFsID0gUkVHX1JEKGJwLCBQWFAyX1JFR19SRF9JTklUX0RPTkUpOworCWlmICh2YWwgIT0gMSkgeworCQlCTlgyWF9FUlIoIlBYUDIgUkRfSU5JVCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCVJFR19XUihicCwgUFhQMl9SRUdfUlFfRElTQUJMRV9JTlBVVFMsIDApOworCVJFR19XUihicCwgUFhQMl9SRUdfUkRfRElTQUJMRV9JTlBVVFMsIDApOworCisJYm54MnhfaW5pdF9ibG9jayhicCwgRE1BRV9CTE9DSywgQ09NTU9OX1NUQUdFKTsKKworCS8qIGNsZWFuIHRoZSBETUFFIG1lbW9yeSAqLworCWJwLT5kbWFlX3JlYWR5ID0gMTsKKwlibngyeF9pbml0X2ZpbGwoYnAsIFRTRU1fUkVHX1BSQU0sIDAsIDgpOworCisJYm54MnhfaW5pdF9ibG9jayhicCwgVENNX0JMT0NLLCBDT01NT05fU1RBR0UpOworCWJueDJ4X2luaXRfYmxvY2soYnAsIFVDTV9CTE9DSywgQ09NTU9OX1NUQUdFKTsKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBDQ01fQkxPQ0ssIENPTU1PTl9TVEFHRSk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgWENNX0JMT0NLLCBDT01NT05fU1RBR0UpOworCisJYm54MnhfcmVhZF9kbWFlKGJwLCBYU0VNX1JFR19QQVNTSVZFX0JVRkZFUiwgMyk7CisJYm54MnhfcmVhZF9kbWFlKGJwLCBDU0VNX1JFR19QQVNTSVZFX0JVRkZFUiwgMyk7CisJYm54MnhfcmVhZF9kbWFlKGJwLCBUU0VNX1JFR19QQVNTSVZFX0JVRkZFUiwgMyk7CisJYm54MnhfcmVhZF9kbWFlKGJwLCBVU0VNX1JFR19QQVNTSVZFX0JVRkZFUiwgMyk7CisKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBRTV9CTE9DSywgQ09NTU9OX1NUQUdFKTsKKworI2lmZGVmIEJDTV9DTklDCisJd2Jfd3JpdGVbMF0gPSAwOworCXdiX3dyaXRlWzFdID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgeworCQlSRUdfV1IoYnAsIFFNX1JFR19CQVNFQUREUiArIGkqNCwgMTAyNCAqIDQgKiAoaSUxNikpOworCQlibngyeF9pbml0X2luZF93cihicCwgUU1fUkVHX1BUUlRCTCArIGkqOCwgd2Jfd3JpdGUsIDIpOworCisJCWlmIChDSElQX0lTX0UxSChicCkpIHsKKwkJCVJFR19XUihicCwgUU1fUkVHX0JBU0VBRERSX0VYVF9BICsgaSo0LCAxMDI0KjQqKGklMTYpKTsKKwkJCWJueDJ4X2luaXRfaW5kX3dyKGJwLCBRTV9SRUdfUFRSVEJMX0VYVF9BICsgaSo4LAorCQkJCQkgIHdiX3dyaXRlLCAyKTsKKwkJfQorCX0KKyNlbmRpZgorCS8qIHNvZnQgcmVzZXQgcHVsc2UgKi8KKwlSRUdfV1IoYnAsIFFNX1JFR19TT0ZUX1JFU0VULCAxKTsKKwlSRUdfV1IoYnAsIFFNX1JFR19TT0ZUX1JFU0VULCAwKTsKKworI2lmZGVmIEJDTV9DTklDCisJYm54MnhfaW5pdF9ibG9jayhicCwgVElNRVJTX0JMT0NLLCBDT01NT05fU1RBR0UpOworI2VuZGlmCisKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBEUV9CTE9DSywgQ09NTU9OX1NUQUdFKTsKKwlSRUdfV1IoYnAsIERPUlFfUkVHX0RQTV9DSURfT0ZTVCwgQkNNX1BBR0VfU0hJRlQpOworCWlmICghQ0hJUF9SRVZfSVNfU0xPVyhicCkpIHsKKwkJLyogZW5hYmxlIGh3IGludGVycnVwdCBmcm9tIGRvb3JiZWxsIFEgKi8KKwkJUkVHX1dSKGJwLCBET1JRX1JFR19ET1JRX0lOVF9NQVNLLCAwKTsKKwl9CisKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBCUkIxX0JMT0NLLCBDT01NT05fU1RBR0UpOworCWJueDJ4X2luaXRfYmxvY2soYnAsIFBSU19CTE9DSywgQ09NTU9OX1NUQUdFKTsKKwlSRUdfV1IoYnAsIFBSU19SRUdfQV9QUlNVXzIwLCAweGYpOworI2lmbmRlZiBCQ01fQ05JQworCS8qIHNldCBOSUMgbW9kZSAqLworCVJFR19XUihicCwgUFJTX1JFR19OSUNfTU9ERSwgMSk7CisjZW5kaWYKKwlpZiAoQ0hJUF9JU19FMUgoYnApKQorCQlSRUdfV1IoYnAsIFBSU19SRUdfRTFIT1ZfTU9ERSwgSVNfRTFITUYoYnApKTsKKworCWJueDJ4X2luaXRfYmxvY2soYnAsIFRTRE1fQkxPQ0ssIENPTU1PTl9TVEFHRSk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgQ1NETV9CTE9DSywgQ09NTU9OX1NUQUdFKTsKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBVU0RNX0JMT0NLLCBDT01NT05fU1RBR0UpOworCWJueDJ4X2luaXRfYmxvY2soYnAsIFhTRE1fQkxPQ0ssIENPTU1PTl9TVEFHRSk7CisKKwlibngyeF9pbml0X2ZpbGwoYnAsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZLCAwLCBTVE9STV9JTlRNRU1fU0laRShicCkpOworCWJueDJ4X2luaXRfZmlsbChicCwgVVNFTV9SRUdfRkFTVF9NRU1PUlksIDAsIFNUT1JNX0lOVE1FTV9TSVpFKGJwKSk7CisJYm54MnhfaW5pdF9maWxsKGJwLCBDU0VNX1JFR19GQVNUX01FTU9SWSwgMCwgU1RPUk1fSU5UTUVNX1NJWkUoYnApKTsKKwlibngyeF9pbml0X2ZpbGwoYnAsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZLCAwLCBTVE9STV9JTlRNRU1fU0laRShicCkpOworCisJYm54MnhfaW5pdF9ibG9jayhicCwgVFNFTV9CTE9DSywgQ09NTU9OX1NUQUdFKTsKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBVU0VNX0JMT0NLLCBDT01NT05fU1RBR0UpOworCWJueDJ4X2luaXRfYmxvY2soYnAsIENTRU1fQkxPQ0ssIENPTU1PTl9TVEFHRSk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgWFNFTV9CTE9DSywgQ09NTU9OX1NUQUdFKTsKKworCS8qIHN5bmMgc2VtaSBydGMgKi8KKwlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18xX0NMRUFSLAorCSAgICAgICAweDgwMDAwMDAwKTsKKwlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18xX1NFVCwKKwkgICAgICAgMHg4MDAwMDAwMCk7CisKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBVUEJfQkxPQ0ssIENPTU1PTl9TVEFHRSk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgWFBCX0JMT0NLLCBDT01NT05fU1RBR0UpOworCWJueDJ4X2luaXRfYmxvY2soYnAsIFBCRl9CTE9DSywgQ09NTU9OX1NUQUdFKTsKKworCVJFR19XUihicCwgU1JDX1JFR19TT0ZUX1JTVCwgMSk7CisJZm9yIChpID0gU1JDX1JFR19LRVlSU1MwXzA7IGkgPD0gU1JDX1JFR19LRVlSU1MxXzk7IGkgKz0gNCkKKwkJUkVHX1dSKGJwLCBpLCByYW5kb20zMigpKTsKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBTUkNIX0JMT0NLLCBDT01NT05fU1RBR0UpOworI2lmZGVmIEJDTV9DTklDCisJUkVHX1dSKGJwLCBTUkNfUkVHX0tFWVNFQVJDSF8wLCAweDYzMjg1NjcyKTsKKwlSRUdfV1IoYnAsIFNSQ19SRUdfS0VZU0VBUkNIXzEsIDB4MjRiOGYyY2MpOworCVJFR19XUihicCwgU1JDX1JFR19LRVlTRUFSQ0hfMiwgMHgyMjNhZWY5Yik7CisJUkVHX1dSKGJwLCBTUkNfUkVHX0tFWVNFQVJDSF8zLCAweDI2MDAxZTNhKTsKKwlSRUdfV1IoYnAsIFNSQ19SRUdfS0VZU0VBUkNIXzQsIDB4N2FlOTExMTYpOworCVJFR19XUihicCwgU1JDX1JFR19LRVlTRUFSQ0hfNSwgMHg1Y2U1MjMwYik7CisJUkVHX1dSKGJwLCBTUkNfUkVHX0tFWVNFQVJDSF82LCAweDI5OGQ4YWRmKTsKKwlSRUdfV1IoYnAsIFNSQ19SRUdfS0VZU0VBUkNIXzcsIDB4NmViMGZmMDkpOworCVJFR19XUihicCwgU1JDX1JFR19LRVlTRUFSQ0hfOCwgMHgxODMwZjgyZik7CisJUkVHX1dSKGJwLCBTUkNfUkVHX0tFWVNFQVJDSF85LCAweDAxZTQ2YmU3KTsKKyNlbmRpZgorCVJFR19XUihicCwgU1JDX1JFR19TT0ZUX1JTVCwgMCk7CisKKwlpZiAoc2l6ZW9mKHVuaW9uIGNkdV9jb250ZXh0KSAhPSAxMDI0KQorCQkvKiB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgYSBjb250ZXh0IGlzIDEwMjQgYnl0ZXMgKi8KKwkJZGV2X2FsZXJ0KCZicC0+cGRldi0+ZGV2LCAicGxlYXNlIGFkanVzdCB0aGUgc2l6ZSAiCisJCQkJCSAgIm9mIGNkdV9jb250ZXh0KCVsZClcbiIsCisJCQkgKGxvbmcpc2l6ZW9mKHVuaW9uIGNkdV9jb250ZXh0KSk7CisKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBDRFVfQkxPQ0ssIENPTU1PTl9TVEFHRSk7CisJdmFsID0gKDQgPDwgMjQpICsgKDAgPDwgMTIpICsgMTAyNDsKKwlSRUdfV1IoYnAsIENEVV9SRUdfQ0RVX0dMT0JBTF9QQVJBTVMsIHZhbCk7CisKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBDRkNfQkxPQ0ssIENPTU1PTl9TVEFHRSk7CisJUkVHX1dSKGJwLCBDRkNfUkVHX0lOSVRfUkVHLCAweDdGRik7CisJLyogZW5hYmxlIGNvbnRleHQgdmFsaWRhdGlvbiBpbnRlcnJ1cHQgZnJvbSBDRkMgKi8KKwlSRUdfV1IoYnAsIENGQ19SRUdfQ0ZDX0lOVF9NQVNLLCAwKTsKKworCS8qIHNldCB0aGUgdGhyZXNob2xkcyB0byBwcmV2ZW50IENGQy9DRFUgcmFjZSAqLworCVJFR19XUihicCwgQ0ZDX1JFR19ERUJVRzAsIDB4MjAwMjAwMDApOworCisJYm54MnhfaW5pdF9ibG9jayhicCwgSENfQkxPQ0ssIENPTU1PTl9TVEFHRSk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgTUlTQ19BRVVfQkxPQ0ssIENPTU1PTl9TVEFHRSk7CisKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBQWFBDU19CTE9DSywgQ09NTU9OX1NUQUdFKTsKKwkvKiBSZXNldCBQQ0lFIGVycm9ycyBmb3IgZGVidWcgKi8KKwlSRUdfV1IoYnAsIDB4MjgxNCwgMHhmZmZmZmZmZik7CisJUkVHX1dSKGJwLCAweDM4MjAsIDB4ZmZmZmZmZmYpOworCisJYm54MnhfaW5pdF9ibG9jayhicCwgRU1BQzBfQkxPQ0ssIENPTU1PTl9TVEFHRSk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgRU1BQzFfQkxPQ0ssIENPTU1PTl9TVEFHRSk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgREJVX0JMT0NLLCBDT01NT05fU1RBR0UpOworCWJueDJ4X2luaXRfYmxvY2soYnAsIERCR19CTE9DSywgQ09NTU9OX1NUQUdFKTsKKworCWJueDJ4X2luaXRfYmxvY2soYnAsIE5JR19CTE9DSywgQ09NTU9OX1NUQUdFKTsKKwlpZiAoQ0hJUF9JU19FMUgoYnApKSB7CisJCVJFR19XUihicCwgTklHX1JFR19MTEhfTUZfTU9ERSwgSVNfRTFITUYoYnApKTsKKwkJUkVHX1dSKGJwLCBOSUdfUkVHX0xMSF9FMUhPVl9NT0RFLCBJU19FMUhNRihicCkpOworCX0KKworCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSkKKwkJbXNsZWVwKDIwMCk7CisKKwkvKiBmaW5pc2ggQ0ZDIGluaXQgKi8KKwl2YWwgPSByZWdfcG9sbChicCwgQ0ZDX1JFR19MTF9JTklUX0RPTkUsIDEsIDEwMCwgMTApOworCWlmICh2YWwgIT0gMSkgeworCQlCTlgyWF9FUlIoIkNGQyBMTF9JTklUIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCXZhbCA9IHJlZ19wb2xsKGJwLCBDRkNfUkVHX0FDX0lOSVRfRE9ORSwgMSwgMTAwLCAxMCk7CisJaWYgKHZhbCAhPSAxKSB7CisJCUJOWDJYX0VSUigiQ0ZDIEFDX0lOSVQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJdmFsID0gcmVnX3BvbGwoYnAsIENGQ19SRUdfQ0FNX0lOSVRfRE9ORSwgMSwgMTAwLCAxMCk7CisJaWYgKHZhbCAhPSAxKSB7CisJCUJOWDJYX0VSUigiQ0ZDIENBTV9JTklUIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCVJFR19XUihicCwgQ0ZDX1JFR19ERUJVRzAsIDApOworCisJLyogcmVhZCBOSUcgc3RhdGlzdGljCisJICAgdG8gc2VlIGlmIHRoaXMgaXMgb3VyIGZpcnN0IHVwIHNpbmNlIHBvd2VydXAgKi8KKwlibngyeF9yZWFkX2RtYWUoYnAsIE5JR19SRUdfU1RBVDJfQlJCX09DVEVULCAyKTsKKwl2YWwgPSAqYm54Mnhfc3AoYnAsIHdiX2RhdGFbMF0pOworCisJLyogZG8gaW50ZXJuYWwgbWVtb3J5IHNlbGYgdGVzdCAqLworCWlmICgoQ0hJUF9JU19FMShicCkpICYmICh2YWwgPT0gMCkgJiYgYm54MnhfaW50X21lbV90ZXN0KGJwKSkgeworCQlCTlgyWF9FUlIoImludGVybmFsIG1lbSBzZWxmIHRlc3QgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlzd2l0Y2ggKFhHWFNfRVhUX1BIWV9UWVBFKGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZykpIHsKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgorCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3Mjc6CisJCWJwLT5wb3J0Lm5lZWRfaHdfbG9jayA9IDE7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJYm54Mnhfc2V0dXBfZmFuX2ZhaWx1cmVfZGV0ZWN0aW9uKGJwKTsKKworCS8qIGNsZWFyIFBYUDIgYXR0ZW50aW9ucyAqLworCVJFR19SRChicCwgUFhQMl9SRUdfUFhQMl9JTlRfU1RTX0NMUl8wKTsKKworCWVuYWJsZV9ibG9ja3NfYXR0ZW50aW9uKGJwKTsKKwlpZiAoQ0hJUF9QQVJJVFlfU1VQUE9SVEVEKGJwKSkKKwkJZW5hYmxlX2Jsb2Nrc19wYXJpdHkoYnApOworCisJaWYgKCFCUF9OT01DUChicCkpIHsKKwkJYm54MnhfYWNxdWlyZV9waHlfbG9jayhicCk7CisJCWJueDJ4X2NvbW1vbl9pbml0X3BoeShicCwgYnAtPmNvbW1vbi5zaG1lbV9iYXNlKTsKKwkJYm54MnhfcmVsZWFzZV9waHlfbG9jayhicCk7CisJfSBlbHNlCisJCUJOWDJYX0VSUigiQm9vdGNvZGUgaXMgbWlzc2luZyAtIGNhbiBub3QgaW5pdGlhbGl6ZSBsaW5rXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJueDJ4X2luaXRfcG9ydChzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJaW50IGluaXRfc3RhZ2UgPSBwb3J0ID8gUE9SVDFfU1RBR0UgOiBQT1JUMF9TVEFHRTsKKwl1MzIgbG93LCBoaWdoOworCXUzMiB2YWw7CisKKwlEUChCTlgyWF9NU0dfTUNQLCAic3RhcnRpbmcgcG9ydCBpbml0ICBwb3J0ICVkXG4iLCBwb3J0KTsKKworCVJFR19XUihicCwgTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCwgMCk7CisKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBQWFBfQkxPQ0ssIGluaXRfc3RhZ2UpOworCWJueDJ4X2luaXRfYmxvY2soYnAsIFBYUDJfQkxPQ0ssIGluaXRfc3RhZ2UpOworCisJYm54MnhfaW5pdF9ibG9jayhicCwgVENNX0JMT0NLLCBpbml0X3N0YWdlKTsKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBVQ01fQkxPQ0ssIGluaXRfc3RhZ2UpOworCWJueDJ4X2luaXRfYmxvY2soYnAsIENDTV9CTE9DSywgaW5pdF9zdGFnZSk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgWENNX0JMT0NLLCBpbml0X3N0YWdlKTsKKworI2lmZGVmIEJDTV9DTklDCisJUkVHX1dSKGJwLCBRTV9SRUdfQ09OTk5VTV8wICsgcG9ydCo0LCAxMDI0LzE2IC0gMSk7CisKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBUSU1FUlNfQkxPQ0ssIGluaXRfc3RhZ2UpOworCVJFR19XUihicCwgVE1fUkVHX0xJTjBfU0NBTl9USU1FICsgcG9ydCo0LCAyMCk7CisJUkVHX1dSKGJwLCBUTV9SRUdfTElOMF9NQVhfQUNUSVZFX0NJRCArIHBvcnQqNCwgMzEpOworI2VuZGlmCisKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBEUV9CTE9DSywgaW5pdF9zdGFnZSk7CisKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBCUkIxX0JMT0NLLCBpbml0X3N0YWdlKTsKKwlpZiAoQ0hJUF9SRVZfSVNfU0xPVyhicCkgJiYgIUNISVBfSVNfRTFIKGJwKSkgeworCQkvKiBubyBwYXVzZSBmb3IgZW11bGF0aW9uIGFuZCBGUEdBICovCisJCWxvdyA9IDA7CisJCWhpZ2ggPSA1MTM7CisJfSBlbHNlIHsKKwkJaWYgKElTX0UxSE1GKGJwKSkKKwkJCWxvdyA9ICgoYnAtPmZsYWdzICYgT05FX1BPUlRfRkxBRykgPyAxNjAgOiAyNDYpOworCQllbHNlIGlmIChicC0+ZGV2LT5tdHUgPiA0MDk2KSB7CisJCQlpZiAoYnAtPmZsYWdzICYgT05FX1BPUlRfRkxBRykKKwkJCQlsb3cgPSAxNjA7CisJCQllbHNlIHsKKwkJCQl2YWwgPSBicC0+ZGV2LT5tdHU7CisJCQkJLyogKDI0KjEwMjQgKyB2YWwqNCkvMjU2ICovCisJCQkJbG93ID0gOTYgKyAodmFsLzY0KSArICgodmFsICUgNjQpID8gMSA6IDApOworCQkJfQorCQl9IGVsc2UKKwkJCWxvdyA9ICgoYnAtPmZsYWdzICYgT05FX1BPUlRfRkxBRykgPyA4MCA6IDE2MCk7CisJCWhpZ2ggPSBsb3cgKyA1NjsJLyogMTQqMTAyNC8yNTYgKi8KKwl9CisJUkVHX1dSKGJwLCBCUkIxX1JFR19QQVVTRV9MT1dfVEhSRVNIT0xEXzAgKyBwb3J0KjQsIGxvdyk7CisJUkVHX1dSKGJwLCBCUkIxX1JFR19QQVVTRV9ISUdIX1RIUkVTSE9MRF8wICsgcG9ydCo0LCBoaWdoKTsKKworCisJYm54MnhfaW5pdF9ibG9jayhicCwgUFJTX0JMT0NLLCBpbml0X3N0YWdlKTsKKworCWJueDJ4X2luaXRfYmxvY2soYnAsIFRTRE1fQkxPQ0ssIGluaXRfc3RhZ2UpOworCWJueDJ4X2luaXRfYmxvY2soYnAsIENTRE1fQkxPQ0ssIGluaXRfc3RhZ2UpOworCWJueDJ4X2luaXRfYmxvY2soYnAsIFVTRE1fQkxPQ0ssIGluaXRfc3RhZ2UpOworCWJueDJ4X2luaXRfYmxvY2soYnAsIFhTRE1fQkxPQ0ssIGluaXRfc3RhZ2UpOworCisJYm54MnhfaW5pdF9ibG9jayhicCwgVFNFTV9CTE9DSywgaW5pdF9zdGFnZSk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgVVNFTV9CTE9DSywgaW5pdF9zdGFnZSk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgQ1NFTV9CTE9DSywgaW5pdF9zdGFnZSk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgWFNFTV9CTE9DSywgaW5pdF9zdGFnZSk7CisKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBVUEJfQkxPQ0ssIGluaXRfc3RhZ2UpOworCWJueDJ4X2luaXRfYmxvY2soYnAsIFhQQl9CTE9DSywgaW5pdF9zdGFnZSk7CisKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBQQkZfQkxPQ0ssIGluaXRfc3RhZ2UpOworCisJLyogY29uZmlndXJlIFBCRiB0byB3b3JrIHdpdGhvdXQgUEFVU0UgbXR1IDkwMDAgKi8KKwlSRUdfV1IoYnAsIFBCRl9SRUdfUDBfUEFVU0VfRU5BQkxFICsgcG9ydCo0LCAwKTsKKworCS8qIHVwZGF0ZSB0aHJlc2hvbGQgKi8KKwlSRUdfV1IoYnAsIFBCRl9SRUdfUDBfQVJCX1RIUlNIICsgcG9ydCo0LCAoOTA0MC8xNikpOworCS8qIHVwZGF0ZSBpbml0IGNyZWRpdCAqLworCVJFR19XUihicCwgUEJGX1JFR19QMF9JTklUX0NSRCArIHBvcnQqNCwgKDkwNDAvMTYpICsgNTUzIC0gMjIpOworCisJLyogcHJvYmUgY2hhbmdlcyAqLworCVJFR19XUihicCwgUEJGX1JFR19JTklUX1AwICsgcG9ydCo0LCAxKTsKKwltc2xlZXAoNSk7CisJUkVHX1dSKGJwLCBQQkZfUkVHX0lOSVRfUDAgKyBwb3J0KjQsIDApOworCisjaWZkZWYgQkNNX0NOSUMKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBTUkNIX0JMT0NLLCBpbml0X3N0YWdlKTsKKyNlbmRpZgorCWJueDJ4X2luaXRfYmxvY2soYnAsIENEVV9CTE9DSywgaW5pdF9zdGFnZSk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgQ0ZDX0JMT0NLLCBpbml0X3N0YWdlKTsKKworCWlmIChDSElQX0lTX0UxKGJwKSkgeworCQlSRUdfV1IoYnAsIEhDX1JFR19MRUFESU5HX0VER0VfMCArIHBvcnQqOCwgMCk7CisJCVJFR19XUihicCwgSENfUkVHX1RSQUlMSU5HX0VER0VfMCArIHBvcnQqOCwgMCk7CisJfQorCWJueDJ4X2luaXRfYmxvY2soYnAsIEhDX0JMT0NLLCBpbml0X3N0YWdlKTsKKworCWJueDJ4X2luaXRfYmxvY2soYnAsIE1JU0NfQUVVX0JMT0NLLCBpbml0X3N0YWdlKTsKKwkvKiBpbml0IGFldV9tYXNrX2F0dG5fZnVuY18wLzE6CisJICogIC0gU0YgbW9kZTogYml0cyAzLTcgYXJlIG1hc2tlZC4gb25seSBiaXRzIDAtMiBhcmUgaW4gdXNlCisJICogIC0gTUYgbW9kZTogYml0IDMgaXMgbWFza2VkLiBiaXRzIDAtMiBhcmUgaW4gdXNlIGFzIGluIFNGCisJICogICAgICAgICAgICAgYml0cyA0LTcgYXJlIHVzZWQgZm9yICJwZXIgdm4gZ3JvdXAgYXR0ZW50aW9uIiAqLworCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX01BU0tfQVRUTl9GVU5DXzAgKyBwb3J0KjQsCisJICAgICAgIChJU19FMUhNRihicCkgPyAweEY3IDogMHg3KSk7CisKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBQWFBDU19CTE9DSywgaW5pdF9zdGFnZSk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgRU1BQzBfQkxPQ0ssIGluaXRfc3RhZ2UpOworCWJueDJ4X2luaXRfYmxvY2soYnAsIEVNQUMxX0JMT0NLLCBpbml0X3N0YWdlKTsKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBEQlVfQkxPQ0ssIGluaXRfc3RhZ2UpOworCWJueDJ4X2luaXRfYmxvY2soYnAsIERCR19CTE9DSywgaW5pdF9zdGFnZSk7CisKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBOSUdfQkxPQ0ssIGluaXRfc3RhZ2UpOworCisJUkVHX1dSKGJwLCBOSUdfUkVHX1hHWFNfU0VSREVTMF9NT0RFX1NFTCArIHBvcnQqNCwgMSk7CisKKwlpZiAoQ0hJUF9JU19FMUgoYnApKSB7CisJCS8qIDB4MiBkaXNhYmxlIGUxaG92LCAweDEgZW5hYmxlICovCisJCVJFR19XUihicCwgTklHX1JFR19MTEgwX0JSQjFfRFJWX01BU0tfTUYgKyBwb3J0KjQsCisJCSAgICAgICAoSVNfRTFITUYoYnApID8gMHgxIDogMHgyKSk7CisKKwkJeworCQkJUkVHX1dSKGJwLCBOSUdfUkVHX0xMRkNfRU5BQkxFXzAgKyBwb3J0KjQsIDApOworCQkJUkVHX1dSKGJwLCBOSUdfUkVHX0xMRkNfT1VUX0VOXzAgKyBwb3J0KjQsIDApOworCQkJUkVHX1dSKGJwLCBOSUdfUkVHX1BBVVNFX0VOQUJMRV8wICsgcG9ydCo0LCAxKTsKKwkJfQorCX0KKworCWJueDJ4X2luaXRfYmxvY2soYnAsIE1DUF9CTE9DSywgaW5pdF9zdGFnZSk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgRE1BRV9CTE9DSywgaW5pdF9zdGFnZSk7CisKKwlzd2l0Y2ggKFhHWFNfRVhUX1BIWV9UWVBFKGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZykpIHsKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CisJCXsKKwkJdTMyIHN3YXBfdmFsLCBzd2FwX292ZXJyaWRlLCBhZXVfZ3Bpb19tYXNrLCBvZmZzZXQ7CisKKwkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMywKKwkJCSAgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX0lOUFVUX0hJX1osIHBvcnQpOworCisJCS8qIFRoZSBHUElPIHNob3VsZCBiZSBzd2FwcGVkIGlmIHRoZSBzd2FwIHJlZ2lzdGVyIGlzCisJCSAgIHNldCBhbmQgYWN0aXZlICovCisJCXN3YXBfdmFsID0gUkVHX1JEKGJwLCBOSUdfUkVHX1BPUlRfU1dBUCk7CisJCXN3YXBfb3ZlcnJpZGUgPSBSRUdfUkQoYnAsIE5JR19SRUdfU1RSQVBfT1ZFUlJJREUpOworCisJCS8qIFNlbGVjdCBmdW5jdGlvbiB1cG9uIHBvcnQtc3dhcCBjb25maWd1cmF0aW9uICovCisJCWlmIChwb3J0ID09IDApIHsKKwkJCW9mZnNldCA9IE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMF9PVVRfMDsKKwkJCWFldV9ncGlvX21hc2sgPSAoc3dhcF92YWwgJiYgc3dhcF9vdmVycmlkZSkgPworCQkJCUFFVV9JTlBVVFNfQVRUTl9CSVRTX0dQSU8zX0ZVTkNUSU9OXzEgOgorCQkJCUFFVV9JTlBVVFNfQVRUTl9CSVRTX0dQSU8zX0ZVTkNUSU9OXzA7CisJCX0gZWxzZSB7CisJCQlvZmZzZXQgPSBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzFfT1VUXzA7CisJCQlhZXVfZ3Bpb19tYXNrID0gKHN3YXBfdmFsICYmIHN3YXBfb3ZlcnJpZGUpID8KKwkJCQlBRVVfSU5QVVRTX0FUVE5fQklUU19HUElPM19GVU5DVElPTl8wIDoKKwkJCQlBRVVfSU5QVVRTX0FUVE5fQklUU19HUElPM19GVU5DVElPTl8xOworCQl9CisJCXZhbCA9IFJFR19SRChicCwgb2Zmc2V0KTsKKwkJLyogYWRkIEdQSU8zIHRvIGdyb3VwICovCisJCXZhbCB8PSBhZXVfZ3Bpb19tYXNrOworCQlSRUdfV1IoYnAsIG9mZnNldCwgdmFsKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3Mjc6CisJCS8qIGFkZCBTUElPIDUgdG8gZ3JvdXAgMCAqLworCQl7CisJCXUzMiByZWdfYWRkciA9IChwb3J0ID8gTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18xX09VVF8wIDoKKwkJCQkgICAgICAgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18wX09VVF8wKTsKKwkJdmFsID0gUkVHX1JEKGJwLCByZWdfYWRkcik7CisJCXZhbCB8PSBBRVVfSU5QVVRTX0FUVE5fQklUU19TUElPNTsKKwkJUkVHX1dSKGJwLCByZWdfYWRkciwgdmFsKTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWJueDJ4X19saW5rX3Jlc2V0KGJwKTsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIElMVF9QRVJfRlVOQwkJKDc2OC8yKQorI2RlZmluZSBGVU5DX0lMVF9CQVNFKGZ1bmMpCShmdW5jICogSUxUX1BFUl9GVU5DKQorLyogdGhlIHBoeXMgYWRkcmVzcyBpcyBzaGlmdGVkIHJpZ2h0IDEyIGJpdHMgYW5kIGhhcyBhbiBhZGRlZAorICAgMT12YWxpZCBiaXQgYWRkZWQgdG8gdGhlIDUzcmQgYml0CisgICB0aGVuIHNpbmNlIHRoaXMgaXMgYSB3aWRlIHJlZ2lzdGVyKFRNKQorICAgd2Ugc3BsaXQgaXQgaW50byB0d28gMzIgYml0IHdyaXRlcworICovCisjZGVmaW5lIE9OQ0hJUF9BRERSMSh4KQkJKCh1MzIpKCgodTY0KXggPj4gMTIpICYgMHhGRkZGRkZGRikpCisjZGVmaW5lIE9OQ0hJUF9BRERSMih4KQkJKCh1MzIpKCgxIDw8IDIwKSB8ICgodTY0KXggPj4gNDQpKSkKKyNkZWZpbmUgUFhQX09ORV9JTFQoeCkJCSgoKHgpIDw8IDEwKSB8IHgpCisjZGVmaW5lIFBYUF9JTFRfUkFOR0UoZiwgbCkJKCgobCkgPDwgMTApIHwgZikKKworI2lmZGVmIEJDTV9DTklDCisjZGVmaW5lIENOSUNfSUxUX0xJTkVTCQkxMjcKKyNkZWZpbmUgQ05JQ19DVFhfUEVSX0lMVAkxNgorI2Vsc2UKKyNkZWZpbmUgQ05JQ19JTFRfTElORVMJCTAKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBibngyeF9pbHRfd3Ioc3RydWN0IGJueDJ4ICpicCwgdTMyIGluZGV4LCBkbWFfYWRkcl90IGFkZHIpCit7CisJaW50IHJlZzsKKworCWlmIChDSElQX0lTX0UxSChicCkpCisJCXJlZyA9IFBYUDJfUkVHX1JRX09OQ0hJUF9BVF9CMCArIGluZGV4Kjg7CisJZWxzZSAvKiBFMSAqLworCQlyZWcgPSBQWFAyX1JFR19SUV9PTkNISVBfQVQgKyBpbmRleCo4OworCisJYm54Mnhfd2Jfd3IoYnAsIHJlZywgT05DSElQX0FERFIxKGFkZHIpLCBPTkNISVBfQUREUjIoYWRkcikpOworfQorCitzdGF0aWMgaW50IGJueDJ4X2luaXRfZnVuYyhzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKKwl1MzIgYWRkciwgdmFsOworCWludCBpOworCisJRFAoQk5YMlhfTVNHX01DUCwgInN0YXJ0aW5nIGZ1bmMgaW5pdCAgZnVuYyAlZFxuIiwgZnVuYyk7CisKKwkvKiBzZXQgTVNJIHJlY29uZmlndXJlIGNhcGFiaWxpdHkgKi8KKwlhZGRyID0gKHBvcnQgPyBIQ19SRUdfQ09ORklHXzEgOiBIQ19SRUdfQ09ORklHXzApOworCXZhbCA9IFJFR19SRChicCwgYWRkcik7CisJdmFsIHw9IEhDX0NPTkZJR18wX1JFR19NU0lfQVRUTl9FTl8wOworCVJFR19XUihicCwgYWRkciwgdmFsKTsKKworCWkgPSBGVU5DX0lMVF9CQVNFKGZ1bmMpOworCisJYm54MnhfaWx0X3dyKGJwLCBpLCBibngyeF9zcF9tYXBwaW5nKGJwLCBjb250ZXh0KSk7CisJaWYgKENISVBfSVNfRTFIKGJwKSkgeworCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX0NEVV9GSVJTVF9JTFQsIGkpOworCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX0NEVV9MQVNUX0lMVCwgaSArIENOSUNfSUxUX0xJTkVTKTsKKwl9IGVsc2UgLyogRTEgKi8KKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19QU1dSUV9DRFUwX0wyUCArIGZ1bmMqNCwKKwkJICAgICAgIFBYUF9JTFRfUkFOR0UoaSwgaSArIENOSUNfSUxUX0xJTkVTKSk7CisKKyNpZmRlZiBCQ01fQ05JQworCWkgKz0gMSArIENOSUNfSUxUX0xJTkVTOworCWJueDJ4X2lsdF93cihicCwgaSwgYnAtPnRpbWVyc19tYXBwaW5nKTsKKwlpZiAoQ0hJUF9JU19FMShicCkpCisJCVJFR19XUihicCwgUFhQMl9SRUdfUFNXUlFfVE0wX0wyUCArIGZ1bmMqNCwgUFhQX09ORV9JTFQoaSkpOworCWVsc2UgeworCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX1RNX0ZJUlNUX0lMVCwgaSk7CisJCVJFR19XUihicCwgUFhQMl9SRUdfUlFfVE1fTEFTVF9JTFQsIGkpOworCX0KKworCWkrKzsKKwlibngyeF9pbHRfd3IoYnAsIGksIGJwLT5xbV9tYXBwaW5nKTsKKwlpZiAoQ0hJUF9JU19FMShicCkpCisJCVJFR19XUihicCwgUFhQMl9SRUdfUFNXUlFfUU0wX0wyUCArIGZ1bmMqNCwgUFhQX09ORV9JTFQoaSkpOworCWVsc2UgeworCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX1FNX0ZJUlNUX0lMVCwgaSk7CisJCVJFR19XUihicCwgUFhQMl9SRUdfUlFfUU1fTEFTVF9JTFQsIGkpOworCX0KKworCWkrKzsKKwlibngyeF9pbHRfd3IoYnAsIGksIGJwLT50MV9tYXBwaW5nKTsKKwlpZiAoQ0hJUF9JU19FMShicCkpCisJCVJFR19XUihicCwgUFhQMl9SRUdfUFNXUlFfU1JDMF9MMlAgKyBmdW5jKjQsIFBYUF9PTkVfSUxUKGkpKTsKKwllbHNlIHsKKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9TUkNfRklSU1RfSUxULCBpKTsKKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9TUkNfTEFTVF9JTFQsIGkpOworCX0KKworCS8qIHRlbGwgdGhlIHNlYXJjaGVyIHdoZXJlIHRoZSBUMiB0YWJsZSBpcyAqLworCVJFR19XUihicCwgU1JDX1JFR19DT1VOVEZSRUUwICsgcG9ydCo0LCAxNioxMDI0LzY0KTsKKworCWJueDJ4X3diX3dyKGJwLCBTUkNfUkVHX0ZJUlNURlJFRTAgKyBwb3J0KjE2LAorCQkgICAgVTY0X0xPKGJwLT50Ml9tYXBwaW5nKSwgVTY0X0hJKGJwLT50Ml9tYXBwaW5nKSk7CisKKwlibngyeF93Yl93cihicCwgU1JDX1JFR19MQVNURlJFRTAgKyBwb3J0KjE2LAorCQkgICAgVTY0X0xPKCh1NjQpYnAtPnQyX21hcHBpbmcgKyAxNioxMDI0IC0gNjQpLAorCQkgICAgVTY0X0hJKCh1NjQpYnAtPnQyX21hcHBpbmcgKyAxNioxMDI0IC0gNjQpKTsKKworCVJFR19XUihicCwgU1JDX1JFR19OVU1CRVJfSEFTSF9CSVRTMCArIHBvcnQqNCwgMTApOworI2VuZGlmCisKKwlpZiAoQ0hJUF9JU19FMUgoYnApKSB7CisJCWJueDJ4X2luaXRfYmxvY2soYnAsIE1JU0NfQkxPQ0ssIEZVTkMwX1NUQUdFICsgZnVuYyk7CisJCWJueDJ4X2luaXRfYmxvY2soYnAsIFRDTV9CTE9DSywgRlVOQzBfU1RBR0UgKyBmdW5jKTsKKwkJYm54MnhfaW5pdF9ibG9jayhicCwgVUNNX0JMT0NLLCBGVU5DMF9TVEFHRSArIGZ1bmMpOworCQlibngyeF9pbml0X2Jsb2NrKGJwLCBDQ01fQkxPQ0ssIEZVTkMwX1NUQUdFICsgZnVuYyk7CisJCWJueDJ4X2luaXRfYmxvY2soYnAsIFhDTV9CTE9DSywgRlVOQzBfU1RBR0UgKyBmdW5jKTsKKwkJYm54MnhfaW5pdF9ibG9jayhicCwgVFNFTV9CTE9DSywgRlVOQzBfU1RBR0UgKyBmdW5jKTsKKwkJYm54MnhfaW5pdF9ibG9jayhicCwgVVNFTV9CTE9DSywgRlVOQzBfU1RBR0UgKyBmdW5jKTsKKwkJYm54MnhfaW5pdF9ibG9jayhicCwgQ1NFTV9CTE9DSywgRlVOQzBfU1RBR0UgKyBmdW5jKTsKKwkJYm54MnhfaW5pdF9ibG9jayhicCwgWFNFTV9CTE9DSywgRlVOQzBfU1RBR0UgKyBmdW5jKTsKKworCQlSRUdfV1IoYnAsIE5JR19SRUdfTExIMF9GVU5DX0VOICsgcG9ydCo4LCAxKTsKKwkJUkVHX1dSKGJwLCBOSUdfUkVHX0xMSDBfRlVOQ19WTEFOX0lEICsgcG9ydCo4LCBicC0+ZTFob3YpOworCX0KKworCS8qIEhDIGluaXQgcGVyIGZ1bmN0aW9uICovCisJaWYgKENISVBfSVNfRTFIKGJwKSkgeworCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMTIgKyBmdW5jKjQsIDApOworCisJCVJFR19XUihicCwgSENfUkVHX0xFQURJTkdfRURHRV8wICsgcG9ydCo4LCAwKTsKKwkJUkVHX1dSKGJwLCBIQ19SRUdfVFJBSUxJTkdfRURHRV8wICsgcG9ydCo4LCAwKTsKKwl9CisJYm54MnhfaW5pdF9ibG9jayhicCwgSENfQkxPQ0ssIEZVTkMwX1NUQUdFICsgZnVuYyk7CisKKwkvKiBSZXNldCBQQ0lFIGVycm9ycyBmb3IgZGVidWcgKi8KKwlSRUdfV1IoYnAsIDB4MjExNCwgMHhmZmZmZmZmZik7CisJUkVHX1dSKGJwLCAweDIxMjAsIDB4ZmZmZmZmZmYpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBibngyeF9pbml0X2h3KHN0cnVjdCBibngyeCAqYnAsIHUzMiBsb2FkX2NvZGUpCit7CisJaW50IGksIHJjID0gMDsKKworCURQKEJOWDJYX01TR19NQ1AsICJmdW5jdGlvbiAlZCAgbG9hZF9jb2RlICV4XG4iLAorCSAgIEJQX0ZVTkMoYnApLCBsb2FkX2NvZGUpOworCisJYnAtPmRtYWVfcmVhZHkgPSAwOworCW11dGV4X2luaXQoJmJwLT5kbWFlX211dGV4KTsKKwlyYyA9IGJueDJ4X2d1bnppcF9pbml0KGJwKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXN3aXRjaCAobG9hZF9jb2RlKSB7CisJY2FzZSBGV19NU0dfQ09ERV9EUlZfTE9BRF9DT01NT046CisJCXJjID0gYm54MnhfaW5pdF9jb21tb24oYnApOworCQlpZiAocmMpCisJCQlnb3RvIGluaXRfaHdfZXJyOworCQkvKiBubyBicmVhayAqLworCisJY2FzZSBGV19NU0dfQ09ERV9EUlZfTE9BRF9QT1JUOgorCQlicC0+ZG1hZV9yZWFkeSA9IDE7CisJCXJjID0gYm54MnhfaW5pdF9wb3J0KGJwKTsKKwkJaWYgKHJjKQorCQkJZ290byBpbml0X2h3X2VycjsKKwkJLyogbm8gYnJlYWsgKi8KKworCWNhc2UgRldfTVNHX0NPREVfRFJWX0xPQURfRlVOQ1RJT046CisJCWJwLT5kbWFlX3JlYWR5ID0gMTsKKwkJcmMgPSBibngyeF9pbml0X2Z1bmMoYnApOworCQlpZiAocmMpCisJCQlnb3RvIGluaXRfaHdfZXJyOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUJOWDJYX0VSUigiVW5rbm93biBsb2FkX2NvZGUgKDB4JXgpIGZyb20gTUNQXG4iLCBsb2FkX2NvZGUpOworCQlicmVhazsKKwl9CisKKwlpZiAoIUJQX05PTUNQKGJwKSkgeworCQlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOworCisJCWJwLT5md19kcnZfcHVsc2Vfd3Jfc2VxID0KKwkJCQkoU0hNRU1fUkQoYnAsIGZ1bmNfbWJbZnVuY10uZHJ2X3B1bHNlX21iKSAmCisJCQkJIERSVl9QVUxTRV9TRVFfTUFTSyk7CisJCURQKEJOWDJYX01TR19NQ1AsICJkcnZfcHVsc2UgMHgleFxuIiwgYnAtPmZ3X2Rydl9wdWxzZV93cl9zZXEpOworCX0KKworCS8qIHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBiZWZvcmUgZ3VuemlwIGVuZCAqLworCWJueDJ4X3plcm9fZGVmX3NiKGJwKTsKKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwkJYm54MnhfemVyb19zYihicCwgQlBfTF9JRChicCkgKyBpKTsKKyNpZmRlZiBCQ01fQ05JQworCWJueDJ4X3plcm9fc2IoYnAsIEJQX0xfSUQoYnApICsgaSk7CisjZW5kaWYKKworaW5pdF9od19lcnI6CisJYm54MnhfZ3VuemlwX2VuZChicCk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3ZvaWQgYm54MnhfZnJlZV9tZW0oc3RydWN0IGJueDJ4ICpicCkKK3sKKworI2RlZmluZSBCTlgyWF9QQ0lfRlJFRSh4LCB5LCBzaXplKSBcCisJZG8geyBcCisJCWlmICh4KSB7IFwKKwkJCWRtYV9mcmVlX2NvaGVyZW50KCZicC0+cGRldi0+ZGV2LCBzaXplLCB4LCB5KTsgXAorCQkJeCA9IE5VTEw7IFwKKwkJCXkgPSAwOyBcCisJCX0gXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgQk5YMlhfRlJFRSh4KSBcCisJZG8geyBcCisJCWlmICh4KSB7IFwKKwkJCXZmcmVlKHgpOyBcCisJCQl4ID0gTlVMTDsgXAorCQl9IFwKKwl9IHdoaWxlICgwKQorCisJaW50IGk7CisKKwkvKiBmYXN0cGF0aCAqLworCS8qIENvbW1vbiAqLworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisKKwkJLyogc3RhdHVzIGJsb2NrcyAqLworCQlCTlgyWF9QQ0lfRlJFRShibngyeF9mcChicCwgaSwgc3RhdHVzX2JsayksCisJCQkgICAgICAgYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGtfbWFwcGluZyksCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBob3N0X3N0YXR1c19ibG9jaykpOworCX0KKwkvKiBSeCAqLworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisKKwkJLyogZmFzdHBhdGggcnggcmluZ3M6IHJ4X2J1ZiByeF9kZXNjIHJ4X2NvbXAgKi8KKwkJQk5YMlhfRlJFRShibngyeF9mcChicCwgaSwgcnhfYnVmX3JpbmcpKTsKKwkJQk5YMlhfUENJX0ZSRUUoYm54MnhfZnAoYnAsIGksIHJ4X2Rlc2NfcmluZyksCisJCQkgICAgICAgYm54MnhfZnAoYnAsIGksIHJ4X2Rlc2NfbWFwcGluZyksCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBldGhfcnhfYmQpICogTlVNX1JYX0JEKTsKKworCQlCTlgyWF9QQ0lfRlJFRShibngyeF9mcChicCwgaSwgcnhfY29tcF9yaW5nKSwKKwkJCSAgICAgICBibngyeF9mcChicCwgaSwgcnhfY29tcF9tYXBwaW5nKSwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGV0aF9mYXN0X3BhdGhfcnhfY3FlKSAqCisJCQkgICAgICAgTlVNX1JDUV9CRCk7CisKKwkJLyogU0dFIHJpbmcgKi8KKwkJQk5YMlhfRlJFRShibngyeF9mcChicCwgaSwgcnhfcGFnZV9yaW5nKSk7CisJCUJOWDJYX1BDSV9GUkVFKGJueDJ4X2ZwKGJwLCBpLCByeF9zZ2VfcmluZyksCisJCQkgICAgICAgYm54MnhfZnAoYnAsIGksIHJ4X3NnZV9tYXBwaW5nKSwKKwkJCSAgICAgICBCQ01fUEFHRV9TSVpFICogTlVNX1JYX1NHRV9QQUdFUyk7CisJfQorCS8qIFR4ICovCisJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKworCQkvKiBmYXN0cGF0aCB0eCByaW5nczogdHhfYnVmIHR4X2Rlc2MgKi8KKwkJQk5YMlhfRlJFRShibngyeF9mcChicCwgaSwgdHhfYnVmX3JpbmcpKTsKKwkJQk5YMlhfUENJX0ZSRUUoYm54MnhfZnAoYnAsIGksIHR4X2Rlc2NfcmluZyksCisJCQkgICAgICAgYm54MnhfZnAoYnAsIGksIHR4X2Rlc2NfbWFwcGluZyksCisJCQkgICAgICAgc2l6ZW9mKHVuaW9uIGV0aF90eF9iZF90eXBlcykgKiBOVU1fVFhfQkQpOworCX0KKwkvKiBlbmQgb2YgZmFzdHBhdGggKi8KKworCUJOWDJYX1BDSV9GUkVFKGJwLT5kZWZfc3RhdHVzX2JsaywgYnAtPmRlZl9zdGF0dXNfYmxrX21hcHBpbmcsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGhvc3RfZGVmX3N0YXR1c19ibG9jaykpOworCisJQk5YMlhfUENJX0ZSRUUoYnAtPnNsb3dwYXRoLCBicC0+c2xvd3BhdGhfbWFwcGluZywKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgYm54Mnhfc2xvd3BhdGgpKTsKKworI2lmZGVmIEJDTV9DTklDCisJQk5YMlhfUENJX0ZSRUUoYnAtPnQxLCBicC0+dDFfbWFwcGluZywgNjQqMTAyNCk7CisJQk5YMlhfUENJX0ZSRUUoYnAtPnQyLCBicC0+dDJfbWFwcGluZywgMTYqMTAyNCk7CisJQk5YMlhfUENJX0ZSRUUoYnAtPnRpbWVycywgYnAtPnRpbWVyc19tYXBwaW5nLCA4KjEwMjQpOworCUJOWDJYX1BDSV9GUkVFKGJwLT5xbSwgYnAtPnFtX21hcHBpbmcsIDEyOCoxMDI0KTsKKwlCTlgyWF9QQ0lfRlJFRShicC0+Y25pY19zYiwgYnAtPmNuaWNfc2JfbWFwcGluZywKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgaG9zdF9zdGF0dXNfYmxvY2spKTsKKyNlbmRpZgorCUJOWDJYX1BDSV9GUkVFKGJwLT5zcHEsIGJwLT5zcHFfbWFwcGluZywgQkNNX1BBR0VfU0laRSk7CisKKyN1bmRlZiBCTlgyWF9QQ0lfRlJFRQorI3VuZGVmIEJOWDJYX0tGUkVFCit9CisKK2ludCBibngyeF9hbGxvY19tZW0oc3RydWN0IGJueDJ4ICpicCkKK3sKKworI2RlZmluZSBCTlgyWF9QQ0lfQUxMT0MoeCwgeSwgc2l6ZSkgXAorCWRvIHsgXAorCQl4ID0gZG1hX2FsbG9jX2NvaGVyZW50KCZicC0+cGRldi0+ZGV2LCBzaXplLCB5LCBHRlBfS0VSTkVMKTsgXAorCQlpZiAoeCA9PSBOVUxMKSBcCisJCQlnb3RvIGFsbG9jX21lbV9lcnI7IFwKKwkJbWVtc2V0KHgsIDAsIHNpemUpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBCTlgyWF9BTExPQyh4LCBzaXplKSBcCisJZG8geyBcCisJCXggPSB2bWFsbG9jKHNpemUpOyBcCisJCWlmICh4ID09IE5VTEwpIFwKKwkJCWdvdG8gYWxsb2NfbWVtX2VycjsgXAorCQltZW1zZXQoeCwgMCwgc2l6ZSk7IFwKKwl9IHdoaWxlICgwKQorCisJaW50IGk7CisKKwkvKiBmYXN0cGF0aCAqLworCS8qIENvbW1vbiAqLworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCWJueDJ4X2ZwKGJwLCBpLCBicCkgPSBicDsKKworCQkvKiBzdGF0dXMgYmxvY2tzICovCisJCUJOWDJYX1BDSV9BTExPQyhibngyeF9mcChicCwgaSwgc3RhdHVzX2JsayksCisJCQkJJmJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrX21hcHBpbmcpLAorCQkJCXNpemVvZihzdHJ1Y3QgaG9zdF9zdGF0dXNfYmxvY2spKTsKKwl9CisJLyogUnggKi8KKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCisJCS8qIGZhc3RwYXRoIHJ4IHJpbmdzOiByeF9idWYgcnhfZGVzYyByeF9jb21wICovCisJCUJOWDJYX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCByeF9idWZfcmluZyksCisJCQkJc2l6ZW9mKHN0cnVjdCBzd19yeF9iZCkgKiBOVU1fUlhfQkQpOworCQlCTlgyWF9QQ0lfQUxMT0MoYm54MnhfZnAoYnAsIGksIHJ4X2Rlc2NfcmluZyksCisJCQkJJmJueDJ4X2ZwKGJwLCBpLCByeF9kZXNjX21hcHBpbmcpLAorCQkJCXNpemVvZihzdHJ1Y3QgZXRoX3J4X2JkKSAqIE5VTV9SWF9CRCk7CisKKwkJQk5YMlhfUENJX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCByeF9jb21wX3JpbmcpLAorCQkJCSZibngyeF9mcChicCwgaSwgcnhfY29tcF9tYXBwaW5nKSwKKwkJCQlzaXplb2Yoc3RydWN0IGV0aF9mYXN0X3BhdGhfcnhfY3FlKSAqCisJCQkJTlVNX1JDUV9CRCk7CisKKwkJLyogU0dFIHJpbmcgKi8KKwkJQk5YMlhfQUxMT0MoYm54MnhfZnAoYnAsIGksIHJ4X3BhZ2VfcmluZyksCisJCQkJc2l6ZW9mKHN0cnVjdCBzd19yeF9wYWdlKSAqIE5VTV9SWF9TR0UpOworCQlCTlgyWF9QQ0lfQUxMT0MoYm54MnhfZnAoYnAsIGksIHJ4X3NnZV9yaW5nKSwKKwkJCQkmYm54MnhfZnAoYnAsIGksIHJ4X3NnZV9tYXBwaW5nKSwKKwkJCQlCQ01fUEFHRV9TSVpFICogTlVNX1JYX1NHRV9QQUdFUyk7CisJfQorCS8qIFR4ICovCisJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKworCQkvKiBmYXN0cGF0aCB0eCByaW5nczogdHhfYnVmIHR4X2Rlc2MgKi8KKwkJQk5YMlhfQUxMT0MoYm54MnhfZnAoYnAsIGksIHR4X2J1Zl9yaW5nKSwKKwkJCQlzaXplb2Yoc3RydWN0IHN3X3R4X2JkKSAqIE5VTV9UWF9CRCk7CisJCUJOWDJYX1BDSV9BTExPQyhibngyeF9mcChicCwgaSwgdHhfZGVzY19yaW5nKSwKKwkJCQkmYm54MnhfZnAoYnAsIGksIHR4X2Rlc2NfbWFwcGluZyksCisJCQkJc2l6ZW9mKHVuaW9uIGV0aF90eF9iZF90eXBlcykgKiBOVU1fVFhfQkQpOworCX0KKwkvKiBlbmQgb2YgZmFzdHBhdGggKi8KKworCUJOWDJYX1BDSV9BTExPQyhicC0+ZGVmX3N0YXR1c19ibGssICZicC0+ZGVmX3N0YXR1c19ibGtfbWFwcGluZywKKwkJCXNpemVvZihzdHJ1Y3QgaG9zdF9kZWZfc3RhdHVzX2Jsb2NrKSk7CisKKwlCTlgyWF9QQ0lfQUxMT0MoYnAtPnNsb3dwYXRoLCAmYnAtPnNsb3dwYXRoX21hcHBpbmcsCisJCQlzaXplb2Yoc3RydWN0IGJueDJ4X3Nsb3dwYXRoKSk7CisKKyNpZmRlZiBCQ01fQ05JQworCUJOWDJYX1BDSV9BTExPQyhicC0+dDEsICZicC0+dDFfbWFwcGluZywgNjQqMTAyNCk7CisKKwkvKiBhbGxvY2F0ZSBzZWFyY2hlciBUMiB0YWJsZQorCSAgIHdlIGFsbG9jYXRlIDEvNCBvZiBhbGxvYyBudW0gZm9yIFQyCisJICAod2hpY2ggaXMgbm90IGVudGVyZWQgaW50byB0aGUgSUxUKSAqLworCUJOWDJYX1BDSV9BTExPQyhicC0+dDIsICZicC0+dDJfbWFwcGluZywgMTYqMTAyNCk7CisKKwkvKiBJbml0aWFsaXplIFQyIChmb3IgMTAyNCBjb25uZWN0aW9ucykgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTYqMTAyNDsgaSArPSA2NCkKKwkJKih1NjQgKikoKGNoYXIgKilicC0+dDIgKyBpICsgNTYpID0gYnAtPnQyX21hcHBpbmcgKyBpICsgNjQ7CisKKwkvKiBUaW1lciBibG9jayBhcnJheSAoOCpNQVhfQ09OTikgcGh5cyB1bmNhY2hlZCBmb3Igbm93IDEwMjQgY29ubnMgKi8KKwlCTlgyWF9QQ0lfQUxMT0MoYnAtPnRpbWVycywgJmJwLT50aW1lcnNfbWFwcGluZywgOCoxMDI0KTsKKworCS8qIFFNIHF1ZXVlcyAoMTI4Kk1BWF9DT05OKSAqLworCUJOWDJYX1BDSV9BTExPQyhicC0+cW0sICZicC0+cW1fbWFwcGluZywgMTI4KjEwMjQpOworCisJQk5YMlhfUENJX0FMTE9DKGJwLT5jbmljX3NiLCAmYnAtPmNuaWNfc2JfbWFwcGluZywKKwkJCXNpemVvZihzdHJ1Y3QgaG9zdF9zdGF0dXNfYmxvY2spKTsKKyNlbmRpZgorCisJLyogU2xvdyBwYXRoIHJpbmcgKi8KKwlCTlgyWF9QQ0lfQUxMT0MoYnAtPnNwcSwgJmJwLT5zcHFfbWFwcGluZywgQkNNX1BBR0VfU0laRSk7CisKKwlyZXR1cm4gMDsKKworYWxsb2NfbWVtX2VycjoKKwlibngyeF9mcmVlX21lbShicCk7CisJcmV0dXJuIC1FTk9NRU07CisKKyN1bmRlZiBCTlgyWF9QQ0lfQUxMT0MKKyN1bmRlZiBCTlgyWF9BTExPQworfQorCisKKy8qCisgKiBJbml0IHNlcnZpY2UgZnVuY3Rpb25zCisgKi8KKworLyoqCisgKiBTZXRzIGEgTUFDIGluIGEgQ0FNIGZvciBhIGZldyBMMiBDbGllbnRzIGZvciBFMSBjaGlwCisgKgorICogQHBhcmFtIGJwIGRyaXZlciBkZXNjcmlwdG9yCisgKiBAcGFyYW0gc2V0IHNldCBvciBjbGVhciBhbiBlbnRyeSAoMSBvciAwKQorICogQHBhcmFtIG1hYyBwb2ludGVyIHRvIGEgYnVmZmVyIGNvbnRhaW5pbmcgYSBNQUMKKyAqIEBwYXJhbSBjbF9iaXRfdmVjIGJpdCB2ZWN0b3Igb2YgY2xpZW50cyB0byByZWdpc3RlciBhIE1BQyBmb3IKKyAqIEBwYXJhbSBjYW1fb2Zmc2V0IG9mZnNldCBpbiBhIENBTSB0byB1c2UKKyAqIEBwYXJhbSB3aXRoX2JjYXN0IHNldCBicm9hZGNhc3QgTUFDIGFzIHdlbGwKKyAqLworc3RhdGljIHZvaWQgYm54Mnhfc2V0X21hY19hZGRyX2UxX2dlbihzdHJ1Y3QgYm54MnggKmJwLCBpbnQgc2V0LCB1OCAqbWFjLAorCQkJCSAgICAgIHUzMiBjbF9iaXRfdmVjLCB1OCBjYW1fb2Zmc2V0LAorCQkJCSAgICAgIHU4IHdpdGhfYmNhc3QpCit7CisJc3RydWN0IG1hY19jb25maWd1cmF0aW9uX2NtZCAqY29uZmlnID0gYm54Mnhfc3AoYnAsIG1hY19jb25maWcpOworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisKKwkvKiBDQU0gYWxsb2NhdGlvbgorCSAqIHVuaWNhc3RzIDAtMzE6cG9ydDAgMzItNjM6cG9ydDEKKwkgKiBtdWx0aWNhc3QgNjQtMTI3OnBvcnQwIDEyOC0xOTE6cG9ydDEKKwkgKi8KKwljb25maWctPmhkci5sZW5ndGggPSAxICsgKHdpdGhfYmNhc3QgPyAxIDogMCk7CisJY29uZmlnLT5oZHIub2Zmc2V0ID0gY2FtX29mZnNldDsKKwljb25maWctPmhkci5jbGllbnRfaWQgPSAweGZmOworCWNvbmZpZy0+aGRyLnJlc2VydmVkMSA9IDA7CisKKwkvKiBwcmltYXJ5IE1BQyAqLworCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLmNhbV9lbnRyeS5tc2JfbWFjX2FkZHIgPQorCQkJCQlzd2FiMTYoKih1MTYgKikmbWFjWzBdKTsKKwljb25maWctPmNvbmZpZ190YWJsZVswXS5jYW1fZW50cnkubWlkZGxlX21hY19hZGRyID0KKwkJCQkJc3dhYjE2KCoodTE2ICopJm1hY1syXSk7CisJY29uZmlnLT5jb25maWdfdGFibGVbMF0uY2FtX2VudHJ5LmxzYl9tYWNfYWRkciA9CisJCQkJCXN3YWIxNigqKHUxNiAqKSZtYWNbNF0pOworCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLmNhbV9lbnRyeS5mbGFncyA9IGNwdV90b19sZTE2KHBvcnQpOworCWlmIChzZXQpCisJCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLnRhcmdldF90YWJsZV9lbnRyeS5mbGFncyA9IDA7CisJZWxzZQorCQlDQU1fSU5WQUxJREFURShjb25maWctPmNvbmZpZ190YWJsZVswXSk7CisJY29uZmlnLT5jb25maWdfdGFibGVbMF0udGFyZ2V0X3RhYmxlX2VudHJ5LmNsaWVudHNfYml0X3ZlY3RvciA9CisJCQkJCQljcHVfdG9fbGUzMihjbF9iaXRfdmVjKTsKKwljb25maWctPmNvbmZpZ190YWJsZVswXS50YXJnZXRfdGFibGVfZW50cnkudmxhbl9pZCA9IDA7CisKKwlEUChORVRJRl9NU0dfSUZVUCwgIiVzIE1BQyAoJTA0eDolMDR4OiUwNHgpXG4iLAorCSAgIChzZXQgPyAic2V0dGluZyIgOiAiY2xlYXJpbmciKSwKKwkgICBjb25maWctPmNvbmZpZ190YWJsZVswXS5jYW1fZW50cnkubXNiX21hY19hZGRyLAorCSAgIGNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLmNhbV9lbnRyeS5taWRkbGVfbWFjX2FkZHIsCisJICAgY29uZmlnLT5jb25maWdfdGFibGVbMF0uY2FtX2VudHJ5LmxzYl9tYWNfYWRkcik7CisKKwkvKiBicm9hZGNhc3QgKi8KKwlpZiAod2l0aF9iY2FzdCkgeworCQljb25maWctPmNvbmZpZ190YWJsZVsxXS5jYW1fZW50cnkubXNiX21hY19hZGRyID0KKwkJCWNwdV90b19sZTE2KDB4ZmZmZik7CisJCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzFdLmNhbV9lbnRyeS5taWRkbGVfbWFjX2FkZHIgPQorCQkJY3B1X3RvX2xlMTYoMHhmZmZmKTsKKwkJY29uZmlnLT5jb25maWdfdGFibGVbMV0uY2FtX2VudHJ5LmxzYl9tYWNfYWRkciA9CisJCQljcHVfdG9fbGUxNigweGZmZmYpOworCQljb25maWctPmNvbmZpZ190YWJsZVsxXS5jYW1fZW50cnkuZmxhZ3MgPSBjcHVfdG9fbGUxNihwb3J0KTsKKwkJaWYgKHNldCkKKwkJCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzFdLnRhcmdldF90YWJsZV9lbnRyeS5mbGFncyA9CisJCQkJCVRTVE9STV9DQU1fVEFSR0VUX1RBQkxFX0VOVFJZX0JST0FEQ0FTVDsKKwkJZWxzZQorCQkJQ0FNX0lOVkFMSURBVEUoY29uZmlnLT5jb25maWdfdGFibGVbMV0pOworCQljb25maWctPmNvbmZpZ190YWJsZVsxXS50YXJnZXRfdGFibGVfZW50cnkuY2xpZW50c19iaXRfdmVjdG9yID0KKwkJCQkJCQljcHVfdG9fbGUzMihjbF9iaXRfdmVjKTsKKwkJY29uZmlnLT5jb25maWdfdGFibGVbMV0udGFyZ2V0X3RhYmxlX2VudHJ5LnZsYW5faWQgPSAwOworCX0KKworCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX1NFVF9NQUMsIDAsCisJCSAgICAgIFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBtYWNfY29uZmlnKSksCisJCSAgICAgIFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBtYWNfY29uZmlnKSksIDApOworfQorCisvKioKKyAqIFNldHMgYSBNQUMgaW4gYSBDQU0gZm9yIGEgZmV3IEwyIENsaWVudHMgZm9yIEUxSCBjaGlwCisgKgorICogQHBhcmFtIGJwIGRyaXZlciBkZXNjcmlwdG9yCisgKiBAcGFyYW0gc2V0IHNldCBvciBjbGVhciBhbiBlbnRyeSAoMSBvciAwKQorICogQHBhcmFtIG1hYyBwb2ludGVyIHRvIGEgYnVmZmVyIGNvbnRhaW5pbmcgYSBNQUMKKyAqIEBwYXJhbSBjbF9iaXRfdmVjIGJpdCB2ZWN0b3Igb2YgY2xpZW50cyB0byByZWdpc3RlciBhIE1BQyBmb3IKKyAqIEBwYXJhbSBjYW1fb2Zmc2V0IG9mZnNldCBpbiBhIENBTSB0byB1c2UKKyAqLworc3RhdGljIHZvaWQgYm54Mnhfc2V0X21hY19hZGRyX2UxaF9nZW4oc3RydWN0IGJueDJ4ICpicCwgaW50IHNldCwgdTggKm1hYywKKwkJCQkgICAgICAgdTMyIGNsX2JpdF92ZWMsIHU4IGNhbV9vZmZzZXQpCit7CisJc3RydWN0IG1hY19jb25maWd1cmF0aW9uX2NtZF9lMWggKmNvbmZpZyA9CisJCShzdHJ1Y3QgbWFjX2NvbmZpZ3VyYXRpb25fY21kX2UxaCAqKWJueDJ4X3NwKGJwLCBtYWNfY29uZmlnKTsKKworCWNvbmZpZy0+aGRyLmxlbmd0aCA9IDE7CisJY29uZmlnLT5oZHIub2Zmc2V0ID0gY2FtX29mZnNldDsKKwljb25maWctPmhkci5jbGllbnRfaWQgPSAweGZmOworCWNvbmZpZy0+aGRyLnJlc2VydmVkMSA9IDA7CisKKwkvKiBwcmltYXJ5IE1BQyAqLworCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLm1zYl9tYWNfYWRkciA9CisJCQkJCXN3YWIxNigqKHUxNiAqKSZtYWNbMF0pOworCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLm1pZGRsZV9tYWNfYWRkciA9CisJCQkJCXN3YWIxNigqKHUxNiAqKSZtYWNbMl0pOworCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLmxzYl9tYWNfYWRkciA9CisJCQkJCXN3YWIxNigqKHUxNiAqKSZtYWNbNF0pOworCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLmNsaWVudHNfYml0X3ZlY3RvciA9CisJCQkJCWNwdV90b19sZTMyKGNsX2JpdF92ZWMpOworCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLnZsYW5faWQgPSAwOworCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLmUxaG92X2lkID0gY3B1X3RvX2xlMTYoYnAtPmUxaG92KTsKKwlpZiAoc2V0KQorCQljb25maWctPmNvbmZpZ190YWJsZVswXS5mbGFncyA9IEJQX1BPUlQoYnApOworCWVsc2UKKwkJY29uZmlnLT5jb25maWdfdGFibGVbMF0uZmxhZ3MgPQorCQkJCU1BQ19DT05GSUdVUkFUSU9OX0VOVFJZX0UxSF9BQ1RJT05fVFlQRTsKKworCURQKE5FVElGX01TR19JRlVQLCAiJXMgTUFDICglMDR4OiUwNHg6JTA0eCkgIEUxSE9WICVkICBDTElEIG1hc2sgJWRcbiIsCisJICAgKHNldCA/ICJzZXR0aW5nIiA6ICJjbGVhcmluZyIpLAorCSAgIGNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLm1zYl9tYWNfYWRkciwKKwkgICBjb25maWctPmNvbmZpZ190YWJsZVswXS5taWRkbGVfbWFjX2FkZHIsCisJICAgY29uZmlnLT5jb25maWdfdGFibGVbMF0ubHNiX21hY19hZGRyLCBicC0+ZTFob3YsIGNsX2JpdF92ZWMpOworCisJYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfU0VUX01BQywgMCwKKwkJICAgICAgVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19jb25maWcpKSwKKwkJICAgICAgVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19jb25maWcpKSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgYm54Mnhfd2FpdF9yYW1yb2Qoc3RydWN0IGJueDJ4ICpicCwgaW50IHN0YXRlLCBpbnQgaWR4LAorCQkJICAgICBpbnQgKnN0YXRlX3AsIGludCBwb2xsKQoreworCS8qIGNhbiB0YWtlIGEgd2hpbGUgaWYgYW55IHBvcnQgaXMgcnVubmluZyAqLworCWludCBjbnQgPSA1MDAwOworCisJRFAoTkVUSUZfTVNHX0lGVVAsICIlcyBmb3Igc3RhdGUgdG8gYmVjb21lICV4IG9uIElEWCBbJWRdXG4iLAorCSAgIHBvbGwgPyAicG9sbGluZyIgOiAid2FpdGluZyIsIHN0YXRlLCBpZHgpOworCisJbWlnaHRfc2xlZXAoKTsKKwl3aGlsZSAoY250LS0pIHsKKwkJaWYgKHBvbGwpIHsKKwkJCWJueDJ4X3J4X2ludChicC0+ZnAsIDEwKTsKKwkJCS8qIGlmIGluZGV4IGlzIGRpZmZlcmVudCBmcm9tIDAKKwkJCSAqIHRoZSByZXBseSBmb3Igc29tZSBjb21tYW5kcyB3aWxsCisJCQkgKiBiZSBvbiB0aGUgbm9uIGRlZmF1bHQgcXVldWUKKwkJCSAqLworCQkJaWYgKGlkeCkKKwkJCQlibngyeF9yeF9pbnQoJmJwLT5mcFtpZHhdLCAxMCk7CisJCX0KKworCQltYigpOyAvKiBzdGF0ZSBpcyBjaGFuZ2VkIGJ5IGJueDJ4X3NwX2V2ZW50KCkgKi8KKwkJaWYgKCpzdGF0ZV9wID09IHN0YXRlKSB7CisjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgorCQkJRFAoTkVUSUZfTVNHX0lGVVAsICJleGl0ICAoY250ICVkKVxuIiwgNTAwMCAtIGNudCk7CisjZW5kaWYKKwkJCXJldHVybiAwOworCQl9CisKKwkJbXNsZWVwKDEpOworCisJCWlmIChicC0+cGFuaWMpCisJCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiB0aW1lb3V0ISAqLworCUJOWDJYX0VSUigidGltZW91dCAlcyBmb3Igc3RhdGUgJXggb24gSURYIFslZF1cbiIsCisJCSAgcG9sbCA/ICJwb2xsaW5nIiA6ICJ3YWl0aW5nIiwgc3RhdGUsIGlkeCk7CisjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgorCWJueDJ4X3BhbmljKCk7CisjZW5kaWYKKworCXJldHVybiAtRUJVU1k7Cit9CisKK3ZvaWQgYm54Mnhfc2V0X2V0aF9tYWNfYWRkcl9lMWgoc3RydWN0IGJueDJ4ICpicCwgaW50IHNldCkKK3sKKwlicC0+c2V0X21hY19wZW5kaW5nKys7CisJc21wX3dtYigpOworCisJYm54Mnhfc2V0X21hY19hZGRyX2UxaF9nZW4oYnAsIHNldCwgYnAtPmRldi0+ZGV2X2FkZHIsCisJCQkJICAgKDEgPDwgYnAtPmZwLT5jbF9pZCksIEJQX0ZVTkMoYnApKTsKKworCS8qIFdhaXQgZm9yIGEgY29tcGxldGlvbiAqLworCWJueDJ4X3dhaXRfcmFtcm9kKGJwLCAwLCAwLCAmYnAtPnNldF9tYWNfcGVuZGluZywgc2V0ID8gMCA6IDEpOworfQorCit2b2lkIGJueDJ4X3NldF9ldGhfbWFjX2FkZHJfZTEoc3RydWN0IGJueDJ4ICpicCwgaW50IHNldCkKK3sKKwlicC0+c2V0X21hY19wZW5kaW5nKys7CisJc21wX3dtYigpOworCisJYm54Mnhfc2V0X21hY19hZGRyX2UxX2dlbihicCwgc2V0LCBicC0+ZGV2LT5kZXZfYWRkciwKKwkJCQkgICgxIDw8IGJwLT5mcC0+Y2xfaWQpLCAoQlBfUE9SVChicCkgPyAzMiA6IDApLAorCQkJCSAgMSk7CisKKwkvKiBXYWl0IGZvciBhIGNvbXBsZXRpb24gKi8KKwlibngyeF93YWl0X3JhbXJvZChicCwgMCwgMCwgJmJwLT5zZXRfbWFjX3BlbmRpbmcsIHNldCA/IDAgOiAxKTsKK30KKworI2lmZGVmIEJDTV9DTklDCisvKioKKyAqIFNldCBpU0NTSSBNQUMocykgYXQgdGhlIG5leHQgZW50aWVzIGluIHRoZSBDQU0gYWZ0ZXIgdGhlIEVUSAorICogTUFDKHMpLiBUaGlzIGZ1bmN0aW9uIHdpbGwgd2FpdCB1bnRpbCB0aGUgcmFtZG9yZCBjb21wbGV0aW9uCisgKiByZXR1cm5zLgorICoKKyAqIEBwYXJhbSBicCBkcml2ZXIgaGFuZGxlCisgKiBAcGFyYW0gc2V0IHNldCBvciBjbGVhciB0aGUgQ0FNIGVudHJ5CisgKgorICogQHJldHVybiAwIGlmIGN1c3Nlc3MsIC1FTk9ERVYgaWYgcmFtcm9kIGRvZXNuJ3QgcmV0dXJuLgorICovCitpbnQgYm54Mnhfc2V0X2lzY3NpX2V0aF9tYWNfYWRkcihzdHJ1Y3QgYm54MnggKmJwLCBpbnQgc2V0KQoreworCXUzMiBjbF9iaXRfdmVjID0gKDEgPDwgQkNNX0lTQ1NJX0VUSF9DTF9JRCk7CisKKwlicC0+c2V0X21hY19wZW5kaW5nKys7CisJc21wX3dtYigpOworCisJLyogU2VuZCBhIFNFVF9NQUMgcmFtcm9kICovCisJaWYgKENISVBfSVNfRTEoYnApKQorCQlibngyeF9zZXRfbWFjX2FkZHJfZTFfZ2VuKGJwLCBzZXQsIGJwLT5pc2NzaV9tYWMsCisJCQkJICBjbF9iaXRfdmVjLCAoQlBfUE9SVChicCkgPyAzMiA6IDApICsgMiwKKwkJCQkgIDEpOworCWVsc2UKKwkJLyogQ0FNIGFsbG9jYXRpb24gZm9yIEUxSAorCQkqIHVuaWNhc3RzOiBieSBmdW5jIG51bWJlcgorCQkqIG11bHRpY2FzdDogMjArRlVOQyoyMCwgMjAgZWFjaAorCQkqLworCQlibngyeF9zZXRfbWFjX2FkZHJfZTFoX2dlbihicCwgc2V0LCBicC0+aXNjc2lfbWFjLAorCQkJCSAgIGNsX2JpdF92ZWMsIEUxSF9GVU5DX01BWCArIEJQX0ZVTkMoYnApKTsKKworCS8qIFdhaXQgZm9yIGEgY29tcGxldGlvbiB3aGVuIHNldHRpbmcgKi8KKwlibngyeF93YWl0X3JhbXJvZChicCwgMCwgMCwgJmJwLT5zZXRfbWFjX3BlbmRpbmcsIHNldCA/IDAgOiAxKTsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKK2ludCBibngyeF9zZXR1cF9sZWFkaW5nKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IHJjOworCisJLyogcmVzZXQgSUdVIHN0YXRlICovCisJYm54MnhfYWNrX3NiKGJwLCBicC0+ZnBbMF0uc2JfaWQsIENTVE9STV9JRCwgMCwgSUdVX0lOVF9FTkFCTEUsIDApOworCisJLyogU0VUVVAgcmFtcm9kICovCisJYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfUE9SVF9TRVRVUCwgMCwgMCwgMCwgMCk7CisKKwkvKiBXYWl0IGZvciBjb21wbGV0aW9uICovCisJcmMgPSBibngyeF93YWl0X3JhbXJvZChicCwgQk5YMlhfU1RBVEVfT1BFTiwgMCwgJihicC0+c3RhdGUpLCAwKTsKKworCXJldHVybiByYzsKK30KKworaW50IGJueDJ4X3NldHVwX211bHRpKHN0cnVjdCBibngyeCAqYnAsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpbmRleF07CisKKwkvKiByZXNldCBJR1Ugc3RhdGUgKi8KKwlibngyeF9hY2tfc2IoYnAsIGZwLT5zYl9pZCwgQ1NUT1JNX0lELCAwLCBJR1VfSU5UX0VOQUJMRSwgMCk7CisKKwkvKiBTRVRVUCByYW1yb2QgKi8KKwlmcC0+c3RhdGUgPSBCTlgyWF9GUF9TVEFURV9PUEVOSU5HOworCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX0NMSUVOVF9TRVRVUCwgaW5kZXgsIDAsCisJCSAgICAgIGZwLT5jbF9pZCwgMCk7CisKKwkvKiBXYWl0IGZvciBjb21wbGV0aW9uICovCisJcmV0dXJuIGJueDJ4X3dhaXRfcmFtcm9kKGJwLCBCTlgyWF9GUF9TVEFURV9PUEVOLCBpbmRleCwKKwkJCQkgJihmcC0+c3RhdGUpLCAwKTsKK30KKworCit2b2lkIGJueDJ4X3NldF9udW1fcXVldWVzX21zaXgoc3RydWN0IGJueDJ4ICpicCkKK3sKKworCXN3aXRjaCAoYnAtPm11bHRpX21vZGUpIHsKKwljYXNlIEVUSF9SU1NfTU9ERV9ESVNBQkxFRDoKKwkJYnAtPm51bV9xdWV1ZXMgPSAxOworCQlicmVhazsKKworCWNhc2UgRVRIX1JTU19NT0RFX1JFR1VMQVI6CisJCWlmIChudW1fcXVldWVzKQorCQkJYnAtPm51bV9xdWV1ZXMgPSBtaW5fdCh1MzIsIG51bV9xdWV1ZXMsCisJCQkJCQkgIEJOWDJYX01BWF9RVUVVRVMoYnApKTsKKwkJZWxzZQorCQkJYnAtPm51bV9xdWV1ZXMgPSBtaW5fdCh1MzIsIG51bV9vbmxpbmVfY3B1cygpLAorCQkJCQkJICBCTlgyWF9NQVhfUVVFVUVTKGJwKSk7CisJCWJyZWFrOworCisKKwlkZWZhdWx0OgorCQlicC0+bnVtX3F1ZXVlcyA9IDE7CisJCWJyZWFrOworCX0KK30KKworCisKK3N0YXRpYyBpbnQgYm54Mnhfc3RvcF9tdWx0aShzdHJ1Y3QgYm54MnggKmJwLCBpbnQgaW5kZXgpCit7CisJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaW5kZXhdOworCWludCByYzsKKworCS8qIGhhbHQgdGhlIGNvbm5lY3Rpb24gKi8KKwlmcC0+c3RhdGUgPSBCTlgyWF9GUF9TVEFURV9IQUxUSU5HOworCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX0hBTFQsIGluZGV4LCAwLCBmcC0+Y2xfaWQsIDApOworCisJLyogV2FpdCBmb3IgY29tcGxldGlvbiAqLworCXJjID0gYm54Mnhfd2FpdF9yYW1yb2QoYnAsIEJOWDJYX0ZQX1NUQVRFX0hBTFRFRCwgaW5kZXgsCisJCQkgICAgICAgJihmcC0+c3RhdGUpLCAxKTsKKwlpZiAocmMpIC8qIHRpbWVvdXQgKi8KKwkJcmV0dXJuIHJjOworCisJLyogZGVsZXRlIGNmYyBlbnRyeSAqLworCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX0NGQ19ERUwsIGluZGV4LCAwLCAwLCAxKTsKKworCS8qIFdhaXQgZm9yIGNvbXBsZXRpb24gKi8KKwlyYyA9IGJueDJ4X3dhaXRfcmFtcm9kKGJwLCBCTlgyWF9GUF9TVEFURV9DTE9TRUQsIGluZGV4LAorCQkJICAgICAgICYoZnAtPnN0YXRlKSwgMSk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGJueDJ4X3N0b3BfbGVhZGluZyhzdHJ1Y3QgYm54MnggKmJwKQoreworCV9fbGUxNiBkc2Jfc3BfcHJvZF9pZHg7CisJLyogaWYgdGhlIG90aGVyIHBvcnQgaXMgaGFuZGxpbmcgdHJhZmZpYywKKwkgICB0aGlzIGNhbiB0YWtlIGEgbG90IG9mIHRpbWUgKi8KKwlpbnQgY250ID0gNTAwOworCWludCByYzsKKworCW1pZ2h0X3NsZWVwKCk7CisKKwkvKiBTZW5kIEhBTFQgcmFtcm9kICovCisJYnAtPmZwWzBdLnN0YXRlID0gQk5YMlhfRlBfU1RBVEVfSEFMVElORzsKKwlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9IQUxULCAwLCAwLCBicC0+ZnAtPmNsX2lkLCAwKTsKKworCS8qIFdhaXQgZm9yIGNvbXBsZXRpb24gKi8KKwlyYyA9IGJueDJ4X3dhaXRfcmFtcm9kKGJwLCBCTlgyWF9GUF9TVEFURV9IQUxURUQsIDAsCisJCQkgICAgICAgJihicC0+ZnBbMF0uc3RhdGUpLCAxKTsKKwlpZiAocmMpIC8qIHRpbWVvdXQgKi8KKwkJcmV0dXJuIHJjOworCisJZHNiX3NwX3Byb2RfaWR4ID0gKmJwLT5kc2Jfc3BfcHJvZDsKKworCS8qIFNlbmQgUE9SVF9ERUxFVEUgcmFtcm9kICovCisJYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfUE9SVF9ERUwsIDAsIDAsIDAsIDEpOworCisJLyogV2FpdCBmb3IgY29tcGxldGlvbiB0byBhcnJpdmUgb24gZGVmYXVsdCBzdGF0dXMgYmxvY2sKKwkgICB3ZSBhcmUgZ29pbmcgdG8gcmVzZXQgdGhlIGNoaXAgYW55d2F5CisJICAgc28gdGhlcmUgaXMgbm90IG11Y2ggdG8gZG8gaWYgdGhpcyB0aW1lcyBvdXQKKwkgKi8KKwl3aGlsZSAoZHNiX3NwX3Byb2RfaWR4ID09ICpicC0+ZHNiX3NwX3Byb2QpIHsKKwkJaWYgKCFjbnQpIHsKKwkJCURQKE5FVElGX01TR19JRkRPV04sICJ0aW1lb3V0IHdhaXRpbmcgZm9yIHBvcnQgZGVsICIKKwkJCSAgICJkc2Jfc3BfcHJvZCAweCV4ICE9IGRzYl9zcF9wcm9kX2lkeCAweCV4XG4iLAorCQkJICAgKmJwLT5kc2Jfc3BfcHJvZCwgZHNiX3NwX3Byb2RfaWR4KTsKKyNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCisJCQlibngyeF9wYW5pYygpOworI2VuZGlmCisJCQlyYyA9IC1FQlVTWTsKKwkJCWJyZWFrOworCQl9CisJCWNudC0tOworCQltc2xlZXAoMSk7CisJCXJtYigpOyAvKiBSZWZyZXNoIHRoZSBkc2Jfc3BfcHJvZCAqLworCX0KKwlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9DTE9TSU5HX1dBSVQ0X1VOTE9BRDsKKwlicC0+ZnBbMF0uc3RhdGUgPSBCTlgyWF9GUF9TVEFURV9DTE9TRUQ7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3Jlc2V0X2Z1bmMoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCWludCBmdW5jID0gQlBfRlVOQyhicCk7CisJaW50IGJhc2UsIGk7CisKKwkvKiBDb25maWd1cmUgSUdVICovCisJUkVHX1dSKGJwLCBIQ19SRUdfTEVBRElOR19FREdFXzAgKyBwb3J0KjgsIDApOworCVJFR19XUihicCwgSENfUkVHX1RSQUlMSU5HX0VER0VfMCArIHBvcnQqOCwgMCk7CisKKyNpZmRlZiBCQ01fQ05JQworCS8qIERpc2FibGUgVGltZXIgc2NhbiAqLworCVJFR19XUihicCwgVE1fUkVHX0VOX0xJTkVBUjBfVElNRVIgKyBwb3J0KjQsIDApOworCS8qCisJICogV2FpdCBmb3IgYXQgbGVhc3QgMTBtcyBhbmQgdXAgdG8gMiBzZWNvbmQgZm9yIHRoZSB0aW1lcnMgc2NhbiB0bworCSAqIGNvbXBsZXRlCisJICovCisJZm9yIChpID0gMDsgaSA8IDIwMDsgaSsrKSB7CisJCW1zbGVlcCgxMCk7CisJCWlmICghUkVHX1JEKGJwLCBUTV9SRUdfTElOMF9TQ0FOX09OICsgcG9ydCo0KSkKKwkJCWJyZWFrOworCX0KKyNlbmRpZgorCS8qIENsZWFyIElMVCAqLworCWJhc2UgPSBGVU5DX0lMVF9CQVNFKGZ1bmMpOworCWZvciAoaSA9IGJhc2U7IGkgPCBiYXNlICsgSUxUX1BFUl9GVU5DOyBpKyspCisJCWJueDJ4X2lsdF93cihicCwgaSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3Jlc2V0X3BvcnQoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCXUzMiB2YWw7CisKKwlSRUdfV1IoYnAsIE5JR19SRUdfTUFTS19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQsIDApOworCisJLyogRG8gbm90IHJjdiBwYWNrZXRzIHRvIEJSQiAqLworCVJFR19XUihicCwgTklHX1JFR19MTEgwX0JSQjFfRFJWX01BU0sgKyBwb3J0KjQsIDB4MCk7CisJLyogRG8gbm90IGRpcmVjdCByY3YgcGFja2V0cyB0aGF0IGFyZSBub3QgZm9yIE1DUCB0byB0aGUgQlJCICovCisJUkVHX1dSKGJwLCAocG9ydCA/IE5JR19SRUdfTExIMV9CUkIxX05PVF9NQ1AgOgorCQkJICAgTklHX1JFR19MTEgwX0JSQjFfTk9UX01DUCksIDB4MCk7CisKKwkvKiBDb25maWd1cmUgQUVVICovCisJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfTUFTS19BVFROX0ZVTkNfMCArIHBvcnQqNCwgMCk7CisKKwltc2xlZXAoMTAwKTsKKwkvKiBDaGVjayBmb3IgQlJCIHBvcnQgb2NjdXBhbmN5ICovCisJdmFsID0gUkVHX1JEKGJwLCBCUkIxX1JFR19QT1JUX05VTV9PQ0NfQkxPQ0tTXzAgKyBwb3J0KjQpOworCWlmICh2YWwpCisJCURQKE5FVElGX01TR19JRkRPV04sCisJCSAgICJCUkIxIGlzIG5vdCBlbXB0eSAgJWQgYmxvY2tzIGFyZSBvY2N1cGllZFxuIiwgdmFsKTsKKworCS8qIFRPRE86IENsb3NlIERvb3JiZWxsIHBvcnQ/ICovCit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3Jlc2V0X2NoaXAoc3RydWN0IGJueDJ4ICpicCwgdTMyIHJlc2V0X2NvZGUpCit7CisJRFAoQk5YMlhfTVNHX01DUCwgImZ1bmN0aW9uICVkICByZXNldF9jb2RlICV4XG4iLAorCSAgIEJQX0ZVTkMoYnApLCByZXNldF9jb2RlKTsKKworCXN3aXRjaCAocmVzZXRfY29kZSkgeworCWNhc2UgRldfTVNHX0NPREVfRFJWX1VOTE9BRF9DT01NT046CisJCWJueDJ4X3Jlc2V0X3BvcnQoYnApOworCQlibngyeF9yZXNldF9mdW5jKGJwKTsKKwkJYm54MnhfcmVzZXRfY29tbW9uKGJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEZXX01TR19DT0RFX0RSVl9VTkxPQURfUE9SVDoKKwkJYm54MnhfcmVzZXRfcG9ydChicCk7CisJCWJueDJ4X3Jlc2V0X2Z1bmMoYnApOworCQlicmVhazsKKworCWNhc2UgRldfTVNHX0NPREVfRFJWX1VOTE9BRF9GVU5DVElPTjoKKwkJYm54MnhfcmVzZXRfZnVuYyhicCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJQk5YMlhfRVJSKCJVbmtub3duIHJlc2V0X2NvZGUgKDB4JXgpIGZyb20gTUNQXG4iLCByZXNldF9jb2RlKTsKKwkJYnJlYWs7CisJfQorfQorCit2b2lkIGJueDJ4X2NoaXBfY2xlYW51cChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgdW5sb2FkX21vZGUpCit7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwl1MzIgcmVzZXRfY29kZSA9IDA7CisJaW50IGksIGNudCwgcmM7CisKKwkvKiBXYWl0IHVudGlsIHR4IGZhc3RwYXRoIHRhc2tzIGNvbXBsZXRlICovCisJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CisKKwkJY250ID0gMTAwMDsKKwkJd2hpbGUgKGJueDJ4X2hhc190eF93b3JrX3VubG9hZChmcCkpIHsKKworCQkJYm54MnhfdHhfaW50KGZwKTsKKwkJCWlmICghY250KSB7CisJCQkJQk5YMlhfRVJSKCJ0aW1lb3V0IHdhaXRpbmcgZm9yIHF1ZXVlWyVkXVxuIiwKKwkJCQkJICBpKTsKKyNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCisJCQkJYm54MnhfcGFuaWMoKTsKKwkJCQlyZXR1cm4gLUVCVVNZOworI2Vsc2UKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJfQorCQkJY250LS07CisJCQltc2xlZXAoMSk7CisJCX0KKwl9CisJLyogR2l2ZSBIVyB0aW1lIHRvIGRpc2NhcmQgb2xkIHR4IG1lc3NhZ2VzICovCisJbXNsZWVwKDEpOworCisJaWYgKENISVBfSVNfRTEoYnApKSB7CisJCXN0cnVjdCBtYWNfY29uZmlndXJhdGlvbl9jbWQgKmNvbmZpZyA9CisJCQkJCQlibngyeF9zcChicCwgbWNhc3RfY29uZmlnKTsKKworCQlibngyeF9zZXRfZXRoX21hY19hZGRyX2UxKGJwLCAwKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5oZHIubGVuZ3RoOyBpKyspCisJCQlDQU1fSU5WQUxJREFURShjb25maWctPmNvbmZpZ190YWJsZVtpXSk7CisKKwkJY29uZmlnLT5oZHIubGVuZ3RoID0gaTsKKwkJaWYgKENISVBfUkVWX0lTX1NMT1coYnApKQorCQkJY29uZmlnLT5oZHIub2Zmc2V0ID0gQk5YMlhfTUFYX0VNVUxfTVVMVEkqKDEgKyBwb3J0KTsKKwkJZWxzZQorCQkJY29uZmlnLT5oZHIub2Zmc2V0ID0gQk5YMlhfTUFYX01VTFRJQ0FTVCooMSArIHBvcnQpOworCQljb25maWctPmhkci5jbGllbnRfaWQgPSBicC0+ZnAtPmNsX2lkOworCQljb25maWctPmhkci5yZXNlcnZlZDEgPSAwOworCisJCWJwLT5zZXRfbWFjX3BlbmRpbmcrKzsKKwkJc21wX3dtYigpOworCisJCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX1NFVF9NQUMsIDAsCisJCQkgICAgICBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgbWNhc3RfY29uZmlnKSksCisJCQkgICAgICBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgbWNhc3RfY29uZmlnKSksIDApOworCisJfSBlbHNlIHsgLyogRTFIICovCisJCVJFR19XUihicCwgTklHX1JFR19MTEgwX0ZVTkNfRU4gKyBwb3J0KjgsIDApOworCisJCWJueDJ4X3NldF9ldGhfbWFjX2FkZHJfZTFoKGJwLCAwKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgTUNfSEFTSF9TSVpFOyBpKyspCisJCQlSRUdfV1IoYnAsIE1DX0hBU0hfT0ZGU0VUKGJwLCBpKSwgMCk7CisKKwkJUkVHX1dSKGJwLCBNSVNDX1JFR19FMUhNRl9NT0RFLCAwKTsKKwl9CisjaWZkZWYgQkNNX0NOSUMKKwkvKiBDbGVhciBpU0NTSSBMMiBNQUMgKi8KKwltdXRleF9sb2NrKCZicC0+Y25pY19tdXRleCk7CisJaWYgKGJwLT5jbmljX2ZsYWdzICYgQk5YMlhfQ05JQ19GTEFHX01BQ19TRVQpIHsKKwkJYm54Mnhfc2V0X2lzY3NpX2V0aF9tYWNfYWRkcihicCwgMCk7CisJCWJwLT5jbmljX2ZsYWdzICY9IH5CTlgyWF9DTklDX0ZMQUdfTUFDX1NFVDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZicC0+Y25pY19tdXRleCk7CisjZW5kaWYKKworCWlmICh1bmxvYWRfbW9kZSA9PSBVTkxPQURfTk9STUFMKQorCQlyZXNldF9jb2RlID0gRFJWX01TR19DT0RFX1VOTE9BRF9SRVFfV09MX0RJUzsKKworCWVsc2UgaWYgKGJwLT5mbGFncyAmIE5PX1dPTF9GTEFHKQorCQlyZXNldF9jb2RlID0gRFJWX01TR19DT0RFX1VOTE9BRF9SRVFfV09MX01DUDsKKworCWVsc2UgaWYgKGJwLT53b2wpIHsKKwkJdTMyIGVtYWNfYmFzZSA9IHBvcnQgPyBHUkNCQVNFX0VNQUMxIDogR1JDQkFTRV9FTUFDMDsKKwkJdTggKm1hY19hZGRyID0gYnAtPmRldi0+ZGV2X2FkZHI7CisJCXUzMiB2YWw7CisJCS8qIFRoZSBtYWMgYWRkcmVzcyBpcyB3cml0dGVuIHRvIGVudHJpZXMgMS00IHRvCisJCSAgIHByZXNlcnZlIGVudHJ5IDAgd2hpY2ggaXMgdXNlZCBieSB0aGUgUE1GICovCisJCXU4IGVudHJ5ID0gKEJQX0UxSFZOKGJwKSArIDEpKjg7CisKKwkJdmFsID0gKG1hY19hZGRyWzBdIDw8IDgpIHwgbWFjX2FkZHJbMV07CisJCUVNQUNfV1IoYnAsIEVNQUNfUkVHX0VNQUNfTUFDX01BVENIICsgZW50cnksIHZhbCk7CisKKwkJdmFsID0gKG1hY19hZGRyWzJdIDw8IDI0KSB8IChtYWNfYWRkclszXSA8PCAxNikgfAorCQkgICAgICAobWFjX2FkZHJbNF0gPDwgOCkgfCBtYWNfYWRkcls1XTsKKwkJRU1BQ19XUihicCwgRU1BQ19SRUdfRU1BQ19NQUNfTUFUQ0ggKyBlbnRyeSArIDQsIHZhbCk7CisKKwkJcmVzZXRfY29kZSA9IERSVl9NU0dfQ09ERV9VTkxPQURfUkVRX1dPTF9FTjsKKworCX0gZWxzZQorCQlyZXNldF9jb2RlID0gRFJWX01TR19DT0RFX1VOTE9BRF9SRVFfV09MX0RJUzsKKworCS8qIENsb3NlIG11bHRpIGFuZCBsZWFkaW5nIGNvbm5lY3Rpb25zCisJICAgQ29tcGxldGlvbnMgZm9yIHJhbXJvZHMgYXJlIGNvbGxlY3RlZCBpbiBhIHN5bmNocm9ub3VzIHdheSAqLworCWZvcl9lYWNoX25vbmRlZmF1bHRfcXVldWUoYnAsIGkpCisJCWlmIChibngyeF9zdG9wX211bHRpKGJwLCBpKSkKKwkJCWdvdG8gdW5sb2FkX2Vycm9yOworCisJcmMgPSBibngyeF9zdG9wX2xlYWRpbmcoYnApOworCWlmIChyYykgeworCQlCTlgyWF9FUlIoIlN0b3AgbGVhZGluZyBmYWlsZWQhXG4iKTsKKyNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCisJCXJldHVybiAtRUJVU1k7CisjZWxzZQorCQlnb3RvIHVubG9hZF9lcnJvcjsKKyNlbmRpZgorCX0KKwordW5sb2FkX2Vycm9yOgorCWlmICghQlBfTk9NQ1AoYnApKQorCQlyZXNldF9jb2RlID0gYm54MnhfZndfY29tbWFuZChicCwgcmVzZXRfY29kZSk7CisJZWxzZSB7CisJCURQKE5FVElGX01TR19JRkRPV04sICJOTyBNQ1AgLSBsb2FkIGNvdW50cyAgICAgICVkLCAlZCwgJWRcbiIsCisJCSAgIGxvYWRfY291bnRbMF0sIGxvYWRfY291bnRbMV0sIGxvYWRfY291bnRbMl0pOworCQlsb2FkX2NvdW50WzBdLS07CisJCWxvYWRfY291bnRbMSArIHBvcnRdLS07CisJCURQKE5FVElGX01TR19JRkRPV04sICJOTyBNQ1AgLSBuZXcgbG9hZCBjb3VudHMgICVkLCAlZCwgJWRcbiIsCisJCSAgIGxvYWRfY291bnRbMF0sIGxvYWRfY291bnRbMV0sIGxvYWRfY291bnRbMl0pOworCQlpZiAobG9hZF9jb3VudFswXSA9PSAwKQorCQkJcmVzZXRfY29kZSA9IEZXX01TR19DT0RFX0RSVl9VTkxPQURfQ09NTU9OOworCQllbHNlIGlmIChsb2FkX2NvdW50WzEgKyBwb3J0XSA9PSAwKQorCQkJcmVzZXRfY29kZSA9IEZXX01TR19DT0RFX0RSVl9VTkxPQURfUE9SVDsKKwkJZWxzZQorCQkJcmVzZXRfY29kZSA9IEZXX01TR19DT0RFX0RSVl9VTkxPQURfRlVOQ1RJT047CisJfQorCisJaWYgKChyZXNldF9jb2RlID09IEZXX01TR19DT0RFX0RSVl9VTkxPQURfQ09NTU9OKSB8fAorCSAgICAocmVzZXRfY29kZSA9PSBGV19NU0dfQ09ERV9EUlZfVU5MT0FEX1BPUlQpKQorCQlibngyeF9fbGlua19yZXNldChicCk7CisKKwkvKiBSZXNldCB0aGUgY2hpcCAqLworCWJueDJ4X3Jlc2V0X2NoaXAoYnAsIHJlc2V0X2NvZGUpOworCisJLyogUmVwb3J0IFVOTE9BRF9ET05FIHRvIE1DUCAqLworCWlmICghQlBfTk9NQ1AoYnApKQorCQlibngyeF9md19jb21tYW5kKGJwLCBEUlZfTVNHX0NPREVfVU5MT0FEX0RPTkUpOworCit9CisKK3ZvaWQgYm54MnhfZGlzYWJsZV9jbG9zZV90aGVfZ2F0ZShzdHJ1Y3QgYm54MnggKmJwKQoreworCXUzMiB2YWw7CisKKwlEUChORVRJRl9NU0dfSFcsICJEaXNhYmxpbmcgXCJjbG9zZSB0aGUgZ2F0ZXNcIlxuIik7CisKKwlpZiAoQ0hJUF9JU19FMShicCkpIHsKKwkJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwkJdTMyIGFkZHIgPSBwb3J0ID8gTUlTQ19SRUdfQUVVX01BU0tfQVRUTl9GVU5DXzEgOgorCQkJTUlTQ19SRUdfQUVVX01BU0tfQVRUTl9GVU5DXzA7CisKKwkJdmFsID0gUkVHX1JEKGJwLCBhZGRyKTsKKwkJdmFsICY9IH4oMHgzMDApOworCQlSRUdfV1IoYnAsIGFkZHIsIHZhbCk7CisJfSBlbHNlIGlmIChDSElQX0lTX0UxSChicCkpIHsKKwkJdmFsID0gUkVHX1JEKGJwLCBNSVNDX1JFR19BRVVfR0VORVJBTF9NQVNLKTsKKwkJdmFsICY9IH4oTUlTQ19BRVVfR0VORVJBTF9NQVNLX1JFR19BRVVfUFhQX0NMT1NFX01BU0sgfAorCQkJIE1JU0NfQUVVX0dFTkVSQUxfTUFTS19SRUdfQUVVX05JR19DTE9TRV9NQVNLKTsKKwkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfR0VORVJBTF9NQVNLLCB2YWwpOworCX0KK30KKworCisvKiBDbG9zZSBnYXRlcyAjMiwgIzMgYW5kICM0OiAqLworc3RhdGljIHZvaWQgYm54Mnhfc2V0XzIzNF9nYXRlcyhzdHJ1Y3QgYm54MnggKmJwLCBib29sIGNsb3NlKQoreworCXUzMiB2YWwsIGFkZHI7CisKKwkvKiBHYXRlcyAjMiBhbmQgIzRhIGFyZSBjbG9zZWQvb3BlbmVkIGZvciAibm90IEUxIiBvbmx5ICovCisJaWYgKCFDSElQX0lTX0UxKGJwKSkgeworCQkvKiAjNCAqLworCQl2YWwgPSBSRUdfUkQoYnAsIFBYUF9SRUdfSFNUX0RJU0NBUkRfRE9PUkJFTExTKTsKKwkJUkVHX1dSKGJwLCBQWFBfUkVHX0hTVF9ESVNDQVJEX0RPT1JCRUxMUywKKwkJICAgICAgIGNsb3NlID8gKHZhbCB8IDB4MSkgOiAodmFsICYgKH4odTMyKTEpKSk7CisJCS8qICMyICovCisJCXZhbCA9IFJFR19SRChicCwgUFhQX1JFR19IU1RfRElTQ0FSRF9JTlRFUk5BTF9XUklURVMpOworCQlSRUdfV1IoYnAsIFBYUF9SRUdfSFNUX0RJU0NBUkRfSU5URVJOQUxfV1JJVEVTLAorCQkgICAgICAgY2xvc2UgPyAodmFsIHwgMHgxKSA6ICh2YWwgJiAofih1MzIpMSkpKTsKKwl9CisKKwkvKiAjMyAqLworCWFkZHIgPSBCUF9QT1JUKGJwKSA/IEhDX1JFR19DT05GSUdfMSA6IEhDX1JFR19DT05GSUdfMDsKKwl2YWwgPSBSRUdfUkQoYnAsIGFkZHIpOworCVJFR19XUihicCwgYWRkciwgKCFjbG9zZSkgPyAodmFsIHwgMHgxKSA6ICh2YWwgJiAofih1MzIpMSkpKTsKKworCURQKE5FVElGX01TR19IVywgIiVzIGdhdGVzICMyLCAjMyBhbmQgIzRcbiIsCisJCWNsb3NlID8gImNsb3NpbmciIDogIm9wZW5pbmciKTsKKwltbWlvd2IoKTsKK30KKworI2RlZmluZSBTSEFSRURfTUZfQ0xQX01BR0lDICAweDgwMDAwMDAwIC8qIGBtYWdpYycgYml0ICovCisKK3N0YXRpYyB2b2lkIGJueDJ4X2NscF9yZXNldF9wcmVwKHN0cnVjdCBibngyeCAqYnAsIHUzMiAqbWFnaWNfdmFsKQoreworCS8qIERvIHNvbWUgbWFnaWMuLi4gKi8KKwl1MzIgdmFsID0gTUZfQ0ZHX1JEKGJwLCBzaGFyZWRfbWZfY29uZmlnLmNscF9tYik7CisJKm1hZ2ljX3ZhbCA9IHZhbCAmIFNIQVJFRF9NRl9DTFBfTUFHSUM7CisJTUZfQ0ZHX1dSKGJwLCBzaGFyZWRfbWZfY29uZmlnLmNscF9tYiwgdmFsIHwgU0hBUkVEX01GX0NMUF9NQUdJQyk7Cit9CisKKy8qIFJlc3RvcmUgdGhlIHZhbHVlIG9mIHRoZSBgbWFnaWMnIGJpdC4KKyAqCisgKiBAcGFyYW0gcGRldiBEZXZpY2UgaGFuZGxlLgorICogQHBhcmFtIG1hZ2ljX3ZhbCBPbGQgdmFsdWUgb2YgdGhlIGBtYWdpYycgYml0LgorICovCitzdGF0aWMgdm9pZCBibngyeF9jbHBfcmVzZXRfZG9uZShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgbWFnaWNfdmFsKQoreworCS8qIFJlc3RvcmUgdGhlIGBtYWdpYycgYml0IHZhbHVlLi4uICovCisJLyogdTMyIHZhbCA9IFNITUVNX1JEKGJwLCBtZl9jZmcuc2hhcmVkX21mX2NvbmZpZy5jbHBfbWIpOworCVNITUVNX1dSKGJwLCBtZl9jZmcuc2hhcmVkX21mX2NvbmZpZy5jbHBfbWIsCisJCSh2YWwgJiAoflNIQVJFRF9NRl9DTFBfTUFHSUMpKSB8IG1hZ2ljX3ZhbCk7ICovCisJdTMyIHZhbCA9IE1GX0NGR19SRChicCwgc2hhcmVkX21mX2NvbmZpZy5jbHBfbWIpOworCU1GX0NGR19XUihicCwgc2hhcmVkX21mX2NvbmZpZy5jbHBfbWIsCisJCSh2YWwgJiAoflNIQVJFRF9NRl9DTFBfTUFHSUMpKSB8IG1hZ2ljX3ZhbCk7Cit9CisKKy8qIFByZXBhcmVzIGZvciBNQ1AgcmVzZXQ6IHRha2VzIGNhcmUgb2YgQ0xQIGNvbmZpZ3VyYXRpb25zLgorICoKKyAqIEBwYXJhbSBicAorICogQHBhcmFtIG1hZ2ljX3ZhbCBPbGQgdmFsdWUgb2YgJ21hZ2ljJyBiaXQuCisgKi8KK3N0YXRpYyB2b2lkIGJueDJ4X3Jlc2V0X21jcF9wcmVwKHN0cnVjdCBibngyeCAqYnAsIHUzMiAqbWFnaWNfdmFsKQoreworCXUzMiBzaG1lbTsKKwl1MzIgdmFsaWRpdHlfb2Zmc2V0OworCisJRFAoTkVUSUZfTVNHX0hXLCAiU3RhcnRpbmdcbiIpOworCisJLyogU2V0IGBtYWdpYycgYml0IGluIG9yZGVyIHRvIHNhdmUgTUYgY29uZmlnICovCisJaWYgKCFDSElQX0lTX0UxKGJwKSkKKwkJYm54MnhfY2xwX3Jlc2V0X3ByZXAoYnAsIG1hZ2ljX3ZhbCk7CisKKwkvKiBHZXQgc2htZW0gb2Zmc2V0ICovCisJc2htZW0gPSBSRUdfUkQoYnAsIE1JU0NfUkVHX1NIQVJFRF9NRU1fQUREUik7CisJdmFsaWRpdHlfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHNobWVtX3JlZ2lvbiwgdmFsaWRpdHlfbWFwWzBdKTsKKworCS8qIENsZWFyIHZhbGlkaXR5IG1hcCBmbGFncyAqLworCWlmIChzaG1lbSA+IDApCisJCVJFR19XUihicCwgc2htZW0gKyB2YWxpZGl0eV9vZmZzZXQsIDApOworfQorCisjZGVmaW5lIE1DUF9USU1FT1VUICAgICAgNTAwMCAgIC8qIDUgc2Vjb25kcyAoaW4gbXMpICovCisjZGVmaW5lIE1DUF9PTkVfVElNRU9VVCAgMTAwICAgIC8qIDEwMCBtcyAqLworCisvKiBXYWl0cyBmb3IgTUNQX09ORV9USU1FT1VUIG9yIE1DUF9PTkVfVElNRU9VVCoxMCwKKyAqIGRlcGVuZGluZyBvbiB0aGUgSFcgdHlwZS4KKyAqCisgKiBAcGFyYW0gYnAKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X21jcF93YWl0X29uZShzdHJ1Y3QgYm54MnggKmJwKQoreworCS8qIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGVtdWxhdGlvbiBhbmQgRlBHQSwKKwkgICB3YWl0IDEwIHRpbWVzIGxvbmdlciAqLworCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSkKKwkJbXNsZWVwKE1DUF9PTkVfVElNRU9VVCoxMCk7CisJZWxzZQorCQltc2xlZXAoTUNQX09ORV9USU1FT1VUKTsKK30KKworc3RhdGljIGludCBibngyeF9yZXNldF9tY3BfY29tcChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgbWFnaWNfdmFsKQoreworCXUzMiBzaG1lbSwgY250LCB2YWxpZGl0eV9vZmZzZXQsIHZhbDsKKwlpbnQgcmMgPSAwOworCisJbXNsZWVwKDEwMCk7CisKKwkvKiBHZXQgc2htZW0gb2Zmc2V0ICovCisJc2htZW0gPSBSRUdfUkQoYnAsIE1JU0NfUkVHX1NIQVJFRF9NRU1fQUREUik7CisJaWYgKHNobWVtID09IDApIHsKKwkJQk5YMlhfRVJSKCJTaG1lbSAwIHJldHVybiBmYWlsdXJlXG4iKTsKKwkJcmMgPSAtRU5PVFRZOworCQlnb3RvIGV4aXRfbGJsOworCX0KKworCXZhbGlkaXR5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sIHZhbGlkaXR5X21hcFswXSk7CisKKwkvKiBXYWl0IGZvciBNQ1AgdG8gY29tZSB1cCAqLworCWZvciAoY250ID0gMDsgY250IDwgKE1DUF9USU1FT1VUIC8gTUNQX09ORV9USU1FT1VUKTsgY250KyspIHsKKwkJLyogVEJEOiBpdHMgYmVzdCB0byBjaGVjayB2YWxpZGl0eSBtYXAgb2YgbGFzdCBwb3J0LgorCQkgKiBjdXJyZW50bHkgY2hlY2tzIG9uIHBvcnQgMC4KKwkJICovCisJCXZhbCA9IFJFR19SRChicCwgc2htZW0gKyB2YWxpZGl0eV9vZmZzZXQpOworCQlEUChORVRJRl9NU0dfSFcsICJzaG1lbSAweCV4IHZhbGlkaXR5IG1hcCgweCV4KT0weCV4XG4iLCBzaG1lbSwKKwkJICAgc2htZW0gKyB2YWxpZGl0eV9vZmZzZXQsIHZhbCk7CisKKwkJLyogY2hlY2sgdGhhdCBzaGFyZWQgbWVtb3J5IGlzIHZhbGlkLiAqLworCQlpZiAoKHZhbCAmIChTSFJfTUVNX1ZBTElESVRZX0RFVl9JTkZPIHwgU0hSX01FTV9WQUxJRElUWV9NQikpCisJCSAgICA9PSAoU0hSX01FTV9WQUxJRElUWV9ERVZfSU5GTyB8IFNIUl9NRU1fVkFMSURJVFlfTUIpKQorCQkJYnJlYWs7CisKKwkJYm54MnhfbWNwX3dhaXRfb25lKGJwKTsKKwl9CisKKwlEUChORVRJRl9NU0dfSFcsICJDbnQ9JWQgU2htZW0gdmFsaWRpdHkgbWFwIDB4JXhcbiIsIGNudCwgdmFsKTsKKworCS8qIENoZWNrIHRoYXQgc2hhcmVkIG1lbW9yeSBpcyB2YWxpZC4gVGhpcyBpbmRpY2F0ZXMgdGhhdCBNQ1AgaXMgdXAuICovCisJaWYgKCh2YWwgJiAoU0hSX01FTV9WQUxJRElUWV9ERVZfSU5GTyB8IFNIUl9NRU1fVkFMSURJVFlfTUIpKSAhPQorCSAgICAoU0hSX01FTV9WQUxJRElUWV9ERVZfSU5GTyB8IFNIUl9NRU1fVkFMSURJVFlfTUIpKSB7CisJCUJOWDJYX0VSUigiU2htZW0gc2lnbmF0dXJlIG5vdCBwcmVzZW50LiBNQ1AgaXMgbm90IHVwICEhXG4iKTsKKwkJcmMgPSAtRU5PVFRZOworCQlnb3RvIGV4aXRfbGJsOworCX0KKworZXhpdF9sYmw6CisJLyogUmVzdG9yZSB0aGUgYG1hZ2ljJyBiaXQgdmFsdWUgKi8KKwlpZiAoIUNISVBfSVNfRTEoYnApKQorCQlibngyeF9jbHBfcmVzZXRfZG9uZShicCwgbWFnaWNfdmFsKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgYm54MnhfcHhwX3ByZXAoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpZiAoIUNISVBfSVNfRTEoYnApKSB7CisJCVJFR19XUihicCwgUFhQMl9SRUdfUkRfU1RBUlRfSU5JVCwgMCk7CisJCVJFR19XUihicCwgUFhQMl9SRUdfUlFfUkJDX0RPTkUsIDApOworCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX0NGR19ET05FLCAwKTsKKwkJbW1pb3diKCk7CisJfQorfQorCisvKgorICogUmVzZXQgdGhlIHdob2xlIGNoaXAgZXhjZXB0IGZvcjoKKyAqICAgICAgLSBQQ0lFIGNvcmUKKyAqICAgICAgLSBQQ0kgR2x1ZSwgUFNXSFNULCBQWFAvUFhQMiBSRiAoYWxsIGNvbnRyb2xsZWQgYnkKKyAqICAgICAgICAgICAgICBvbmUgcmVzZXQgYml0KQorICogICAgICAtIElHVQorICogICAgICAtIE1JU0MgKGluY2x1ZGluZyBBRVUpCisgKiAgICAgIC0gR1JDCisgKiAgICAgIC0gUkJDTiwgUkJDUAorICovCitzdGF0aWMgdm9pZCBibngyeF9wcm9jZXNzX2tpbGxfY2hpcF9yZXNldChzdHJ1Y3QgYm54MnggKmJwKQoreworCXUzMiBub3RfcmVzZXRfbWFzazEsIHJlc2V0X21hc2sxLCBub3RfcmVzZXRfbWFzazIsIHJlc2V0X21hc2syOworCisJbm90X3Jlc2V0X21hc2sxID0KKwkJTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzFfUlNUX0hDIHwKKwkJTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzFfUlNUX1BYUFYgfAorCQlNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMV9SU1RfUFhQOworCisJbm90X3Jlc2V0X21hc2syID0KKwkJTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfUlNUX01ESU8gfAorCQlNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9SU1RfRU1BQzBfSEFSRF9DT1JFIHwKKwkJTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfUlNUX0VNQUMxX0hBUkRfQ09SRSB8CisJCU1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX1JTVF9NSVNDX0NPUkUgfAorCQlNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9SU1RfUkJDTiB8CisJCU1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX1JTVF9HUkMgIHwKKwkJTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfUlNUX01DUF9OX1JFU0VUX1JFR19IQVJEX0NPUkUgfAorCQlNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9SU1RfTUNQX05fSEFSRF9DT1JFX1JTVF9COworCisJcmVzZXRfbWFzazEgPSAweGZmZmZmZmZmOworCisJaWYgKENISVBfSVNfRTEoYnApKQorCQlyZXNldF9tYXNrMiA9IDB4ZmZmZjsKKwllbHNlCisJCXJlc2V0X21hc2syID0gMHgxZmZmZjsKKworCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzFfQ0xFQVIsCisJICAgICAgIHJlc2V0X21hc2sxICYgKH5ub3RfcmVzZXRfbWFzazEpKTsKKwlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX0NMRUFSLAorCSAgICAgICByZXNldF9tYXNrMiAmICh+bm90X3Jlc2V0X21hc2syKSk7CisKKwliYXJyaWVyKCk7CisJbW1pb3diKCk7CisKKwlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18xX1NFVCwgcmVzZXRfbWFzazEpOworCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfU0VULCByZXNldF9tYXNrMik7CisJbW1pb3diKCk7Cit9CisKK3N0YXRpYyBpbnQgYm54MnhfcHJvY2Vzc19raWxsKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IGNudCA9IDEwMDA7CisJdTMyIHZhbCA9IDA7CisJdTMyIHNyX2NudCwgYmxrX2NudCwgcG9ydF9pc19pZGxlXzAsIHBvcnRfaXNfaWRsZV8xLCBwZ2xfZXhwX3JvbTI7CisKKworCS8qIEVtcHR5IHRoZSBUZXRyaXMgYnVmZmVyLCB3YWl0IGZvciAxcyAqLworCWRvIHsKKwkJc3JfY250ICA9IFJFR19SRChicCwgUFhQMl9SRUdfUkRfU1JfQ05UKTsKKwkJYmxrX2NudCA9IFJFR19SRChicCwgUFhQMl9SRUdfUkRfQkxLX0NOVCk7CisJCXBvcnRfaXNfaWRsZV8wID0gUkVHX1JEKGJwLCBQWFAyX1JFR19SRF9QT1JUX0lTX0lETEVfMCk7CisJCXBvcnRfaXNfaWRsZV8xID0gUkVHX1JEKGJwLCBQWFAyX1JFR19SRF9QT1JUX0lTX0lETEVfMSk7CisJCXBnbF9leHBfcm9tMiA9IFJFR19SRChicCwgUFhQMl9SRUdfUEdMX0VYUF9ST00yKTsKKwkJaWYgKChzcl9jbnQgPT0gMHg3ZSkgJiYgKGJsa19jbnQgPT0gMHhhMCkgJiYKKwkJICAgICgocG9ydF9pc19pZGxlXzAgJiAweDEpID09IDB4MSkgJiYKKwkJICAgICgocG9ydF9pc19pZGxlXzEgJiAweDEpID09IDB4MSkgJiYKKwkJICAgIChwZ2xfZXhwX3JvbTIgPT0gMHhmZmZmZmZmZikpCisJCQlicmVhazsKKwkJbXNsZWVwKDEpOworCX0gd2hpbGUgKGNudC0tID4gMCk7CisKKwlpZiAoY250IDw9IDApIHsKKwkJRFAoTkVUSUZfTVNHX0hXLCAiVGV0cmlzIGJ1ZmZlciBkaWRuJ3QgZ2V0IGVtcHR5IG9yIHRoZXJlIgorCQkJICAiIGFyZSBzdGlsbCIKKwkJCSAgIiBvdXRzdGFuZGluZyByZWFkIHJlcXVlc3RzIGFmdGVyIDFzIVxuIik7CisJCURQKE5FVElGX01TR19IVywgInNyX2NudD0weCUwOHgsIGJsa19jbnQ9MHglMDh4LCIKKwkJCSAgIiBwb3J0X2lzX2lkbGVfMD0weCUwOHgsIgorCQkJICAiIHBvcnRfaXNfaWRsZV8xPTB4JTA4eCwgcGdsX2V4cF9yb20yPTB4JTA4eFxuIiwKKwkJCSAgc3JfY250LCBibGtfY250LCBwb3J0X2lzX2lkbGVfMCwgcG9ydF9pc19pZGxlXzEsCisJCQkgIHBnbF9leHBfcm9tMik7CisJCXJldHVybiAtRUFHQUlOOworCX0KKworCWJhcnJpZXIoKTsKKworCS8qIENsb3NlIGdhdGVzICMyLCAjMyBhbmQgIzQgKi8KKwlibngyeF9zZXRfMjM0X2dhdGVzKGJwLCB0cnVlKTsKKworCS8qIFRCRDogSW5kaWNhdGUgdGhhdCAicHJvY2VzcyBraWxsIiBpcyBpbiBwcm9ncmVzcyB0byBNQ1AgKi8KKworCS8qIENsZWFyICJ1bnByZXBhcmVkIiBiaXQgKi8KKwlSRUdfV1IoYnAsIE1JU0NfUkVHX1VOUFJFUEFSRUQsIDApOworCWJhcnJpZXIoKTsKKworCS8qIE1ha2Ugc3VyZSBhbGwgaXMgd3JpdHRlbiB0byB0aGUgY2hpcCBiZWZvcmUgdGhlIHJlc2V0ICovCisJbW1pb3diKCk7CisKKwkvKiBXYWl0IGZvciAxbXMgdG8gZW1wdHkgR0xVRSBhbmQgUENJLUUgY29yZSBxdWV1ZXMsCisJICogUFNXSFNULCBHUkMgYW5kIFBTV1JEIFRldHJpcyBidWZmZXIuCisJICovCisJbXNsZWVwKDEpOworCisJLyogUHJlcGFyZSB0byBjaGlwIHJlc2V0OiAqLworCS8qIE1DUCAqLworCWJueDJ4X3Jlc2V0X21jcF9wcmVwKGJwLCAmdmFsKTsKKworCS8qIFBYUCAqLworCWJueDJ4X3B4cF9wcmVwKGJwKTsKKwliYXJyaWVyKCk7CisKKwkvKiByZXNldCB0aGUgY2hpcCAqLworCWJueDJ4X3Byb2Nlc3Nfa2lsbF9jaGlwX3Jlc2V0KGJwKTsKKwliYXJyaWVyKCk7CisKKwkvKiBSZWNvdmVyIGFmdGVyIHJlc2V0OiAqLworCS8qIE1DUCAqLworCWlmIChibngyeF9yZXNldF9tY3BfY29tcChicCwgdmFsKSkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwkvKiBQWFAgKi8KKwlibngyeF9weHBfcHJlcChicCk7CisKKwkvKiBPcGVuIHRoZSBnYXRlcyAjMiwgIzMgYW5kICM0ICovCisJYm54Mnhfc2V0XzIzNF9nYXRlcyhicCwgZmFsc2UpOworCisJLyogVEJEOiBJR1UvQUVVIHByZXBhcmF0aW9uIGJyaW5nIGJhY2sgdGhlIEFFVS9JR1UgdG8gYQorCSAqIHJlc2V0IHN0YXRlLCByZS1lbmFibGUgYXR0ZW50aW9ucy4gKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJueDJ4X2xlYWRlcl9yZXNldChzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCByYyA9IDA7CisJLyogVHJ5IHRvIHJlY292ZXIgYWZ0ZXIgdGhlIGZhaWx1cmUgKi8KKwlpZiAoYm54MnhfcHJvY2Vzc19raWxsKGJwKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBTb21ldGhpbmcgYmFkIGhhZCBoYXBwZW4hIEFpaSFcbiIsCisJCSAgICAgICBicC0+ZGV2LT5uYW1lKTsKKwkJcmMgPSAtRUFHQUlOOworCQlnb3RvIGV4aXRfbGVhZGVyX3Jlc2V0OworCX0KKworCS8qIENsZWFyICJyZXNldCBpcyBpbiBwcm9ncmVzcyIgYml0IGFuZCB1cGRhdGUgdGhlIGRyaXZlciBzdGF0ZSAqLworCWJueDJ4X3NldF9yZXNldF9kb25lKGJwKTsKKwlicC0+cmVjb3Zlcnlfc3RhdGUgPSBCTlgyWF9SRUNPVkVSWV9ET05FOworCitleGl0X2xlYWRlcl9yZXNldDoKKwlicC0+aXNfbGVhZGVyID0gMDsKKwlibngyeF9yZWxlYXNlX2h3X2xvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfUkVTRVJWRURfMDgpOworCXNtcF93bWIoKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qIEFzc3VtcHRpb246IHJ1bnMgdW5kZXIgcnRubCBsb2NrLiBUaGlzIHRvZ2V0aGVyIHdpdGggdGhlIGZhY3QKKyAqIHRoYXQgaXQncyBjYWxsZWQgb25seSBmcm9tIGJueDJ4X3Jlc2V0X3Rhc2soKSBlbnN1cmUgdGhhdCBpdAorICogd2lsbCBuZXZlciBiZSBjYWxsZWQgd2hlbiBuZXRpZl9ydW5uaW5nKGJwLT5kZXYpIGlzIGZhbHNlLgorICovCitzdGF0aWMgdm9pZCBibngyeF9wYXJpdHlfcmVjb3ZlcihzdHJ1Y3QgYm54MnggKmJwKQoreworCURQKE5FVElGX01TR19IVywgIkhhbmRsaW5nIHBhcml0eVxuIik7CisJd2hpbGUgKDEpIHsKKwkJc3dpdGNoIChicC0+cmVjb3Zlcnlfc3RhdGUpIHsKKwkJY2FzZSBCTlgyWF9SRUNPVkVSWV9JTklUOgorCQkJRFAoTkVUSUZfTVNHX0hXLCAiU3RhdGUgaXMgQk5YMlhfUkVDT1ZFUllfSU5JVFxuIik7CisJCQkvKiBUcnkgdG8gZ2V0IGEgTEVBREVSX0xPQ0sgSFcgbG9jayAqLworCQkJaWYgKGJueDJ4X3RyeWxvY2tfaHdfbG9jayhicCwKKwkJCQlIV19MT0NLX1JFU09VUkNFX1JFU0VSVkVEXzA4KSkKKwkJCQlicC0+aXNfbGVhZGVyID0gMTsKKworCQkJLyogU3RvcCB0aGUgZHJpdmVyICovCisJCQkvKiBJZiBpbnRlcmZhY2UgaGFzIGJlZW4gcmVtb3ZlZCAtIGJyZWFrICovCisJCQlpZiAoYm54MnhfbmljX3VubG9hZChicCwgVU5MT0FEX1JFQ09WRVJZKSkKKwkJCQlyZXR1cm47CisKKwkJCWJwLT5yZWNvdmVyeV9zdGF0ZSA9IEJOWDJYX1JFQ09WRVJZX1dBSVQ7CisJCQkvKiBFbnN1cmUgImlzX2xlYWRlciIgYW5kICJyZWNvdmVyeV9zdGF0ZSIKKwkJCSAqICB1cGRhdGUgdmFsdWVzIGFyZSBzZWVuIG9uIG90aGVyIENQVXMKKwkJCSAqLworCQkJc21wX3dtYigpOworCQkJYnJlYWs7CisKKwkJY2FzZSBCTlgyWF9SRUNPVkVSWV9XQUlUOgorCQkJRFAoTkVUSUZfTVNHX0hXLCAiU3RhdGUgaXMgQk5YMlhfUkVDT1ZFUllfV0FJVFxuIik7CisJCQlpZiAoYnAtPmlzX2xlYWRlcikgeworCQkJCXUzMiBsb2FkX2NvdW50ZXIgPSBibngyeF9nZXRfbG9hZF9jbnQoYnApOworCQkJCWlmIChsb2FkX2NvdW50ZXIpIHsKKwkJCQkJLyogV2FpdCB1bnRpbCBhbGwgb3RoZXIgZnVuY3Rpb25zIGdldAorCQkJCQkgKiBkb3duLgorCQkJCQkgKi8KKwkJCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZicC0+cmVzZXRfdGFzaywKKwkJCQkJCQkJSFovMTApOworCQkJCQlyZXR1cm47CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogSWYgYWxsIG90aGVyIGZ1bmN0aW9ucyBnb3QgZG93biAtCisJCQkJCSAqIHRyeSB0byBicmluZyB0aGUgY2hpcCBiYWNrIHRvCisJCQkJCSAqIG5vcm1hbC4gSW4gYW55IGNhc2UgaXQncyBhbiBleGl0CisJCQkJCSAqIHBvaW50IGZvciBhIGxlYWRlci4KKwkJCQkJICovCisJCQkJCWlmIChibngyeF9sZWFkZXJfcmVzZXQoYnApIHx8CisJCQkJCWJueDJ4X25pY19sb2FkKGJwLCBMT0FEX05PUk1BTCkpIHsKKwkJCQkJCXByaW50ayhLRVJOX0VSUiIlczogUmVjb3ZlcnkgIgorCQkJCQkJImhhcyBmYWlsZWQuIFBvd2VyIGN5Y2xlIGlzICIKKwkJCQkJCSJuZWVkZWQuXG4iLCBicC0+ZGV2LT5uYW1lKTsKKwkJCQkJCS8qIERpc2Nvbm5lY3QgdGhpcyBkZXZpY2UgKi8KKwkJCQkJCW5ldGlmX2RldmljZV9kZXRhY2goYnAtPmRldik7CisJCQkJCQkvKiBCbG9jayBpZnVwIGZvciBhbGwgZnVuY3Rpb24KKwkJCQkJCSAqIG9mIHRoaXMgQVNJQyB1bnRpbAorCQkJCQkJICogInByb2Nlc3Mga2lsbCIgb3IgcG93ZXIKKwkJCQkJCSAqIGN5Y2xlLgorCQkJCQkJICovCisJCQkJCQlibngyeF9zZXRfcmVzZXRfaW5fcHJvZ3Jlc3MoYnApOworCQkJCQkJLyogU2h1dCBkb3duIHRoZSBwb3dlciAqLworCQkJCQkJYm54Mnhfc2V0X3Bvd2VyX3N0YXRlKGJwLAorCQkJCQkJCQlQQ0lfRDNob3QpOworCQkJCQkJcmV0dXJuOworCQkJCQl9CisKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCX0gZWxzZSB7IC8qIG5vbi1sZWFkZXIgKi8KKwkJCQlpZiAoIWJueDJ4X3Jlc2V0X2lzX2RvbmUoYnApKSB7CisJCQkJCS8qIFRyeSB0byBnZXQgYSBMRUFERVJfTE9DSyBIVyBsb2NrIGFzCisJCQkJCSAqIGxvbmcgYXMgYSBmb3JtZXIgbGVhZGVyIG1heSBoYXZlCisJCQkJCSAqIGJlZW4gdW5sb2FkZWQgYnkgdGhlIHVzZXIgb3IKKwkJCQkJICogcmVsZWFzZWQgYSBsZWFkZXJzaGlwIGJ5IGFub3RoZXIKKwkJCQkJICogcmVhc29uLgorCQkJCQkgKi8KKwkJCQkJaWYgKGJueDJ4X3RyeWxvY2tfaHdfbG9jayhicCwKKwkJCQkJICAgIEhXX0xPQ0tfUkVTT1VSQ0VfUkVTRVJWRURfMDgpKSB7CisJCQkJCQkvKiBJJ20gYSBsZWFkZXIgbm93ISBSZXN0YXJ0IGEKKwkJCQkJCSAqIHN3aXRjaCBjYXNlLgorCQkJCQkJICovCisJCQkJCQlicC0+aXNfbGVhZGVyID0gMTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisKKwkJCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZicC0+cmVzZXRfdGFzaywKKwkJCQkJCQkJSFovMTApOworCQkJCQlyZXR1cm47CisKKwkJCQl9IGVsc2UgeyAvKiBBIGxlYWRlciBoYXMgY29tcGxldGVkCisJCQkJCSAgKiB0aGUgInByb2Nlc3Mga2lsbCIuIEl0J3MgYW4gZXhpdAorCQkJCQkgICogcG9pbnQgZm9yIGEgbm9uLWxlYWRlci4KKwkJCQkJICAqLworCQkJCQlibngyeF9uaWNfbG9hZChicCwgTE9BRF9OT1JNQUwpOworCQkJCQlicC0+cmVjb3Zlcnlfc3RhdGUgPQorCQkJCQkJQk5YMlhfUkVDT1ZFUllfRE9ORTsKKwkJCQkJc21wX3dtYigpOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJfQorCQlkZWZhdWx0OgorCQkJcmV0dXJuOworCQl9CisJfQorfQorCisvKiBibngyeF9uaWNfdW5sb2FkKCkgZmx1c2hlcyB0aGUgYm54Mnhfd3EsIHRodXMgcmVzZXQgdGFzayBpcworICogc2NoZWR1bGVkIG9uIGEgZ2VuZXJhbCBxdWV1ZSBpbiBvcmRlciB0byBwcmV2ZW50IGEgZGVhZCBsb2NrLgorICovCitzdGF0aWMgdm9pZCBibngyeF9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBibngyeCwgcmVzZXRfdGFzay53b3JrKTsKKworI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKKwlCTlgyWF9FUlIoInJlc2V0IHRhc2sgY2FsbGVkIGJ1dCBTVE9QX09OX0VSUk9SIGRlZmluZWQiCisJCSAgIiBzbyByZXNldCBub3QgZG9uZSB0byBhbGxvdyBkZWJ1ZyBkdW1wLFxuIgorCSBLRVJOX0VSUiAiIHlvdSB3aWxsIG5lZWQgdG8gcmVib290IHdoZW4gZG9uZVxuIik7CisJcmV0dXJuOworI2VuZGlmCisKKwlydG5sX2xvY2soKTsKKworCWlmICghbmV0aWZfcnVubmluZyhicC0+ZGV2KSkKKwkJZ290byByZXNldF90YXNrX2V4aXQ7CisKKwlpZiAodW5saWtlbHkoYnAtPnJlY292ZXJ5X3N0YXRlICE9IEJOWDJYX1JFQ09WRVJZX0RPTkUpKQorCQlibngyeF9wYXJpdHlfcmVjb3ZlcihicCk7CisJZWxzZSB7CisJCWJueDJ4X25pY191bmxvYWQoYnAsIFVOTE9BRF9OT1JNQUwpOworCQlibngyeF9uaWNfbG9hZChicCwgTE9BRF9OT1JNQUwpOworCX0KKworcmVzZXRfdGFza19leGl0OgorCXJ0bmxfdW5sb2NrKCk7Cit9CisKKy8qIGVuZCBvZiBuaWMgbG9hZC91bmxvYWQgKi8KKworLyoKKyAqIEluaXQgc2VydmljZSBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgaW5saW5lIHUzMiBibngyeF9nZXRfcHJldGVuZF9yZWcoc3RydWN0IGJueDJ4ICpicCwgaW50IGZ1bmMpCit7CisJc3dpdGNoIChmdW5jKSB7CisJY2FzZSAwOiByZXR1cm4gUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GMDsKKwljYXNlIDE6CXJldHVybiBQWFAyX1JFR19QR0xfUFJFVEVORF9GVU5DX0YxOworCWNhc2UgMjoJcmV0dXJuIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjI7CisJY2FzZSAzOglyZXR1cm4gUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GMzsKKwljYXNlIDQ6CXJldHVybiBQWFAyX1JFR19QR0xfUFJFVEVORF9GVU5DX0Y0OworCWNhc2UgNToJcmV0dXJuIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjU7CisJY2FzZSA2OglyZXR1cm4gUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GNjsKKwljYXNlIDc6CXJldHVybiBQWFAyX1JFR19QR0xfUFJFVEVORF9GVU5DX0Y3OworCWRlZmF1bHQ6CisJCUJOWDJYX0VSUigiVW5zdXBwb3J0ZWQgZnVuY3Rpb24gaW5kZXg6ICVkXG4iLCBmdW5jKTsKKwkJcmV0dXJuICh1MzIpKC0xKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3VuZGlfaW50X2Rpc2FibGVfZTFoKHN0cnVjdCBibngyeCAqYnAsIGludCBvcmlnX2Z1bmMpCit7CisJdTMyIHJlZyA9IGJueDJ4X2dldF9wcmV0ZW5kX3JlZyhicCwgb3JpZ19mdW5jKSwgbmV3X3ZhbDsKKworCS8qIEZsdXNoIGFsbCBvdXRzdGFuZGluZyB3cml0ZXMgKi8KKwltbWlvd2IoKTsKKworCS8qIFByZXRlbmQgdG8gYmUgZnVuY3Rpb24gMCAqLworCVJFR19XUihicCwgcmVnLCAwKTsKKwkvKiBGbHVzaCB0aGUgR1JDIHRyYW5zYWN0aW9uIChpbiB0aGUgY2hpcCkgKi8KKwluZXdfdmFsID0gUkVHX1JEKGJwLCByZWcpOworCWlmIChuZXdfdmFsICE9IDApIHsKKwkJQk5YMlhfRVJSKCJIbW1tLi4uIFByZXRlbmQgcmVnaXN0ZXIgd2Fzbid0IHVwZGF0ZWQ6ICgwLCVkKSFcbiIsCisJCQkgIG5ld192YWwpOworCQlCVUcoKTsKKwl9CisKKwkvKiBGcm9tIG5vdyB3ZSBhcmUgaW4gdGhlICJsaWtlLUUxIiBtb2RlICovCisJYm54MnhfaW50X2Rpc2FibGUoYnApOworCisJLyogRmx1c2ggYWxsIG91dHN0YW5kaW5nIHdyaXRlcyAqLworCW1taW93YigpOworCisJLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwgZnVudGlvbiBzZXR0aW5ncyAqLworCVJFR19XUihicCwgcmVnLCBvcmlnX2Z1bmMpOworCW5ld192YWwgPSBSRUdfUkQoYnAsIHJlZyk7CisJaWYgKG5ld192YWwgIT0gb3JpZ19mdW5jKSB7CisJCUJOWDJYX0VSUigiSG1tbS4uLiBQcmV0ZW5kIHJlZ2lzdGVyIHdhc24ndCB1cGRhdGVkOiAoJWQsJWQpIVxuIiwKKwkJCSAgb3JpZ19mdW5jLCBuZXdfdmFsKTsKKwkJQlVHKCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfdW5kaV9pbnRfZGlzYWJsZShzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZnVuYykKK3sKKwlpZiAoQ0hJUF9JU19FMUgoYnApKQorCQlibngyeF91bmRpX2ludF9kaXNhYmxlX2UxaChicCwgZnVuYyk7CisJZWxzZQorCQlibngyeF9pbnRfZGlzYWJsZShicCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBibngyeF91bmRpX3VubG9hZChzdHJ1Y3QgYm54MnggKmJwKQoreworCXUzMiB2YWw7CisKKwkvKiBDaGVjayBpZiB0aGVyZSBpcyBhbnkgZHJpdmVyIGFscmVhZHkgbG9hZGVkICovCisJdmFsID0gUkVHX1JEKGJwLCBNSVNDX1JFR19VTlBSRVBBUkVEKTsKKwlpZiAodmFsID09IDB4MSkgeworCQkvKiBDaGVjayBpZiBpdCBpcyB0aGUgVU5ESSBkcml2ZXIKKwkJICogVU5ESSBkcml2ZXIgaW5pdGlhbGl6ZXMgQ0lEIG9mZnNldCBmb3Igbm9ybWFsIGJlbGwgdG8gMHg3CisJCSAqLworCQlibngyeF9hY3F1aXJlX2h3X2xvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfVU5ESSk7CisJCXZhbCA9IFJFR19SRChicCwgRE9SUV9SRUdfTk9STV9DSURfT0ZTVCk7CisJCWlmICh2YWwgPT0gMHg3KSB7CisJCQl1MzIgcmVzZXRfY29kZSA9IERSVl9NU0dfQ09ERV9VTkxPQURfUkVRX1dPTF9ESVM7CisJCQkvKiBzYXZlIG91ciBmdW5jICovCisJCQlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOworCQkJdTMyIHN3YXBfZW47CisJCQl1MzIgc3dhcF92YWw7CisKKwkJCS8qIGNsZWFyIHRoZSBVTkRJIGluZGljYXRpb24gKi8KKwkJCVJFR19XUihicCwgRE9SUV9SRUdfTk9STV9DSURfT0ZTVCwgMCk7CisKKwkJCUJOWDJYX0RFVl9JTkZPKCJVTkRJIGlzIGFjdGl2ZSEgcmVzZXQgZGV2aWNlXG4iKTsKKworCQkJLyogdHJ5IHVubG9hZCBVTkRJIG9uIHBvcnQgMCAqLworCQkJYnAtPmZ1bmMgPSAwOworCQkJYnAtPmZ3X3NlcSA9CisJCQkgICAgICAgKFNITUVNX1JEKGJwLCBmdW5jX21iW2JwLT5mdW5jXS5kcnZfbWJfaGVhZGVyKSAmCisJCQkJRFJWX01TR19TRVFfTlVNQkVSX01BU0spOworCQkJcmVzZXRfY29kZSA9IGJueDJ4X2Z3X2NvbW1hbmQoYnAsIHJlc2V0X2NvZGUpOworCisJCQkvKiBpZiBVTkRJIGlzIGxvYWRlZCBvbiB0aGUgb3RoZXIgcG9ydCAqLworCQkJaWYgKHJlc2V0X2NvZGUgIT0gRldfTVNHX0NPREVfRFJWX1VOTE9BRF9DT01NT04pIHsKKworCQkJCS8qIHNlbmQgIkRPTkUiIGZvciBwcmV2aW91cyB1bmxvYWQgKi8KKwkJCQlibngyeF9md19jb21tYW5kKGJwLCBEUlZfTVNHX0NPREVfVU5MT0FEX0RPTkUpOworCisJCQkJLyogdW5sb2FkIFVOREkgb24gcG9ydCAxICovCisJCQkJYnAtPmZ1bmMgPSAxOworCQkJCWJwLT5md19zZXEgPQorCQkJICAgICAgIChTSE1FTV9SRChicCwgZnVuY19tYlticC0+ZnVuY10uZHJ2X21iX2hlYWRlcikgJgorCQkJCQlEUlZfTVNHX1NFUV9OVU1CRVJfTUFTSyk7CisJCQkJcmVzZXRfY29kZSA9IERSVl9NU0dfQ09ERV9VTkxPQURfUkVRX1dPTF9ESVM7CisKKwkJCQlibngyeF9md19jb21tYW5kKGJwLCByZXNldF9jb2RlKTsKKwkJCX0KKworCQkJLyogbm93IGl0J3Mgc2FmZSB0byByZWxlYXNlIHRoZSBsb2NrICovCisJCQlibngyeF9yZWxlYXNlX2h3X2xvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfVU5ESSk7CisKKwkJCWJueDJ4X3VuZGlfaW50X2Rpc2FibGUoYnAsIGZ1bmMpOworCisJCQkvKiBjbG9zZSBpbnB1dCB0cmFmZmljIGFuZCB3YWl0IGZvciBpdCAqLworCQkJLyogRG8gbm90IHJjdiBwYWNrZXRzIHRvIEJSQiAqLworCQkJUkVHX1dSKGJwLAorCQkJICAgICAgKEJQX1BPUlQoYnApID8gTklHX1JFR19MTEgxX0JSQjFfRFJWX01BU0sgOgorCQkJCQkgICAgIE5JR19SRUdfTExIMF9CUkIxX0RSVl9NQVNLKSwgMHgwKTsKKwkJCS8qIERvIG5vdCBkaXJlY3QgcmN2IHBhY2tldHMgdGhhdCBhcmUgbm90IGZvciBNQ1AgdG8KKwkJCSAqIHRoZSBCUkIgKi8KKwkJCVJFR19XUihicCwKKwkJCSAgICAgICAoQlBfUE9SVChicCkgPyBOSUdfUkVHX0xMSDFfQlJCMV9OT1RfTUNQIDoKKwkJCQkJICAgICAgTklHX1JFR19MTEgwX0JSQjFfTk9UX01DUCksIDB4MCk7CisJCQkvKiBjbGVhciBBRVUgKi8KKwkJCVJFR19XUihicCwKKwkJCSAgICAgKEJQX1BPUlQoYnApID8gTUlTQ19SRUdfQUVVX01BU0tfQVRUTl9GVU5DXzEgOgorCQkJCQkgICAgTUlTQ19SRUdfQUVVX01BU0tfQVRUTl9GVU5DXzApLCAwKTsKKwkJCW1zbGVlcCgxMCk7CisKKwkJCS8qIHNhdmUgTklHIHBvcnQgc3dhcCBpbmZvICovCisJCQlzd2FwX3ZhbCA9IFJFR19SRChicCwgTklHX1JFR19QT1JUX1NXQVApOworCQkJc3dhcF9lbiA9IFJFR19SRChicCwgTklHX1JFR19TVFJBUF9PVkVSUklERSk7CisJCQkvKiByZXNldCBkZXZpY2UgKi8KKwkJCVJFR19XUihicCwKKwkJCSAgICAgICBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMV9DTEVBUiwKKwkJCSAgICAgICAweGQzZmZmZmZmKTsKKwkJCVJFR19XUihicCwKKwkJCSAgICAgICBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9DTEVBUiwKKwkJCSAgICAgICAweDE0MDMpOworCQkJLyogdGFrZSB0aGUgTklHIG91dCBvZiByZXNldCBhbmQgcmVzdG9yZSBzd2FwIHZhbHVlcyAqLworCQkJUkVHX1dSKGJwLAorCQkJICAgICAgIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18xX1NFVCwKKwkJCSAgICAgICBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMV9SU1RfTklHKTsKKwkJCVJFR19XUihicCwgTklHX1JFR19QT1JUX1NXQVAsIHN3YXBfdmFsKTsKKwkJCVJFR19XUihicCwgTklHX1JFR19TVFJBUF9PVkVSUklERSwgc3dhcF9lbik7CisKKwkJCS8qIHNlbmQgdW5sb2FkIGRvbmUgdG8gdGhlIE1DUCAqLworCQkJYm54MnhfZndfY29tbWFuZChicCwgRFJWX01TR19DT0RFX1VOTE9BRF9ET05FKTsKKworCQkJLyogcmVzdG9yZSBvdXIgZnVuYyBhbmQgZndfc2VxICovCisJCQlicC0+ZnVuYyA9IGZ1bmM7CisJCQlicC0+Zndfc2VxID0KKwkJCSAgICAgICAoU0hNRU1fUkQoYnAsIGZ1bmNfbWJbYnAtPmZ1bmNdLmRydl9tYl9oZWFkZXIpICYKKwkJCQlEUlZfTVNHX1NFUV9OVU1CRVJfTUFTSyk7CisKKwkJfSBlbHNlCisJCQlibngyeF9yZWxlYXNlX2h3X2xvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfVU5ESSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgYm54MnhfZ2V0X2NvbW1vbl9od2luZm8oc3RydWN0IGJueDJ4ICpicCkKK3sKKwl1MzIgdmFsLCB2YWwyLCB2YWwzLCB2YWw0LCBpZDsKKwl1MTYgcG1jOworCisJLyogR2V0IHRoZSBjaGlwIHJldmlzaW9uIGlkIGFuZCBudW1iZXIuICovCisJLyogY2hpcCBudW06MTYtMzEsIHJldjoxMi0xNSwgbWV0YWw6NC0xMSwgYm9uZF9pZDowLTMgKi8KKwl2YWwgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX0NISVBfTlVNKTsKKwlpZCA9ICgodmFsICYgMHhmZmZmKSA8PCAxNik7CisJdmFsID0gUkVHX1JEKGJwLCBNSVNDX1JFR19DSElQX1JFVik7CisJaWQgfD0gKCh2YWwgJiAweGYpIDw8IDEyKTsKKwl2YWwgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX0NISVBfTUVUQUwpOworCWlkIHw9ICgodmFsICYgMHhmZikgPDwgNCk7CisJdmFsID0gUkVHX1JEKGJwLCBNSVNDX1JFR19CT05EX0lEKTsKKwlpZCB8PSAodmFsICYgMHhmKTsKKwlicC0+Y29tbW9uLmNoaXBfaWQgPSBpZDsKKwlicC0+bGlua19wYXJhbXMuY2hpcF9pZCA9IGJwLT5jb21tb24uY2hpcF9pZDsKKwlCTlgyWF9ERVZfSU5GTygiY2hpcCBJRCBpcyAweCV4XG4iLCBpZCk7CisKKwl2YWwgPSAoUkVHX1JEKGJwLCAweDI4NzQpICYgMHg1NSk7CisJaWYgKChicC0+Y29tbW9uLmNoaXBfaWQgJiAweDEpIHx8CisJICAgIChDSElQX0lTX0UxKGJwKSAmJiB2YWwpIHx8IChDSElQX0lTX0UxSChicCkgJiYgKHZhbCA9PSAweDU1KSkpIHsKKwkJYnAtPmZsYWdzIHw9IE9ORV9QT1JUX0ZMQUc7CisJCUJOWDJYX0RFVl9JTkZPKCJzaW5nbGUgcG9ydCBkZXZpY2VcbiIpOworCX0KKworCXZhbCA9IFJFR19SRChicCwgTUNQX1JFR19NQ1BSX05WTV9DRkc0KTsKKwlicC0+Y29tbW9uLmZsYXNoX3NpemUgPSAoTlZSQU1fMU1CX1NJWkUgPDwKKwkJCQkgKHZhbCAmIE1DUFJfTlZNX0NGRzRfRkxBU0hfU0laRSkpOworCUJOWDJYX0RFVl9JTkZPKCJmbGFzaF9zaXplIDB4JXggKCVkKVxuIiwKKwkJICAgICAgIGJwLT5jb21tb24uZmxhc2hfc2l6ZSwgYnAtPmNvbW1vbi5mbGFzaF9zaXplKTsKKworCWJwLT5jb21tb24uc2htZW1fYmFzZSA9IFJFR19SRChicCwgTUlTQ19SRUdfU0hBUkVEX01FTV9BRERSKTsKKwlicC0+Y29tbW9uLnNobWVtMl9iYXNlID0gUkVHX1JEKGJwLCBNSVNDX1JFR19HRU5FUklDX0NSXzApOworCWJwLT5saW5rX3BhcmFtcy5zaG1lbV9iYXNlID0gYnAtPmNvbW1vbi5zaG1lbV9iYXNlOworCUJOWDJYX0RFVl9JTkZPKCJzaG1lbSBvZmZzZXQgMHgleCAgc2htZW0yIG9mZnNldCAweCV4XG4iLAorCQkgICAgICAgYnAtPmNvbW1vbi5zaG1lbV9iYXNlLCBicC0+Y29tbW9uLnNobWVtMl9iYXNlKTsKKworCWlmICghYnAtPmNvbW1vbi5zaG1lbV9iYXNlIHx8CisJICAgIChicC0+Y29tbW9uLnNobWVtX2Jhc2UgPCAweEEwMDAwKSB8fAorCSAgICAoYnAtPmNvbW1vbi5zaG1lbV9iYXNlID49IDB4QzAwMDApKSB7CisJCUJOWDJYX0RFVl9JTkZPKCJNQ1Agbm90IGFjdGl2ZVxuIik7CisJCWJwLT5mbGFncyB8PSBOT19NQ1BfRkxBRzsKKwkJcmV0dXJuOworCX0KKworCXZhbCA9IFNITUVNX1JEKGJwLCB2YWxpZGl0eV9tYXBbQlBfUE9SVChicCldKTsKKwlpZiAoKHZhbCAmIChTSFJfTUVNX1ZBTElESVRZX0RFVl9JTkZPIHwgU0hSX01FTV9WQUxJRElUWV9NQikpCisJCSE9IChTSFJfTUVNX1ZBTElESVRZX0RFVl9JTkZPIHwgU0hSX01FTV9WQUxJRElUWV9NQikpCisJCUJOWDJYX0VSUk9SKCJCQUQgTUNQIHZhbGlkaXR5IHNpZ25hdHVyZVxuIik7CisKKwlicC0+Y29tbW9uLmh3X2NvbmZpZyA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5zaGFyZWRfaHdfY29uZmlnLmNvbmZpZyk7CisJQk5YMlhfREVWX0lORk8oImh3X2NvbmZpZyAweCUwOHhcbiIsIGJwLT5jb21tb24uaHdfY29uZmlnKTsKKworCWJwLT5saW5rX3BhcmFtcy5od19sZWRfbW9kZSA9ICgoYnAtPmNvbW1vbi5od19jb25maWcgJgorCQkJCQlTSEFSRURfSFdfQ0ZHX0xFRF9NT0RFX01BU0spID4+CisJCQkJICAgICAgIFNIQVJFRF9IV19DRkdfTEVEX01PREVfU0hJRlQpOworCisJYnAtPmxpbmtfcGFyYW1zLmZlYXR1cmVfY29uZmlnX2ZsYWdzID0gMDsKKwl2YWwgPSBTSE1FTV9SRChicCwgZGV2X2luZm8uc2hhcmVkX2ZlYXR1cmVfY29uZmlnLmNvbmZpZyk7CisJaWYgKHZhbCAmIFNIQVJFRF9GRUFUX0NGR19PVkVSUklERV9QUkVFTVBIQVNJU19DRkdfRU5BQkxFRCkKKwkJYnAtPmxpbmtfcGFyYW1zLmZlYXR1cmVfY29uZmlnX2ZsYWdzIHw9CisJCQkJRkVBVFVSRV9DT05GSUdfT1ZFUlJJREVfUFJFRU1QSEFTSVNfRU5BQkxFRDsKKwllbHNlCisJCWJwLT5saW5rX3BhcmFtcy5mZWF0dXJlX2NvbmZpZ19mbGFncyAmPQorCQkJCX5GRUFUVVJFX0NPTkZJR19PVkVSUklERV9QUkVFTVBIQVNJU19FTkFCTEVEOworCisJdmFsID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLmJjX3JldikgPj4gODsKKwlicC0+Y29tbW9uLmJjX3ZlciA9IHZhbDsKKwlCTlgyWF9ERVZfSU5GTygiYmNfdmVyICVYXG4iLCB2YWwpOworCWlmICh2YWwgPCBCTlgyWF9CQ19WRVIpIHsKKwkJLyogZm9yIG5vdyBvbmx5IHdhcm4KKwkJICogbGF0ZXIgd2UgbWlnaHQgbmVlZCB0byBlbmZvcmNlIHRoaXMgKi8KKwkJQk5YMlhfRVJST1IoIlRoaXMgZHJpdmVyIG5lZWRzIGJjX3ZlciAlWCBidXQgZm91bmQgJVgsICIKKwkJCSAgICAicGxlYXNlIHVwZ3JhZGUgQkNcbiIsIEJOWDJYX0JDX1ZFUiwgdmFsKTsKKwl9CisJYnAtPmxpbmtfcGFyYW1zLmZlYXR1cmVfY29uZmlnX2ZsYWdzIHw9CisJCSh2YWwgPj0gUkVRX0JDX1ZFUl80X1ZSRllfT1BUX01ETCkgPworCQlGRUFUVVJFX0NPTkZJR19CQ19TVVBQT1JUU19PUFRfTURMX1ZSRlkgOiAwOworCisJaWYgKEJQX0UxSFZOKGJwKSA9PSAwKSB7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGJwLT5wZGV2LCBicC0+cG1fY2FwICsgUENJX1BNX1BNQywgJnBtYyk7CisJCWJwLT5mbGFncyB8PSAocG1jICYgUENJX1BNX0NBUF9QTUVfRDNjb2xkKSA/IDAgOiBOT19XT0xfRkxBRzsKKwl9IGVsc2UgeworCQkvKiBubyBXT0wgY2FwYWJpbGl0eSBmb3IgRTFIVk4gIT0gMCAqLworCQlicC0+ZmxhZ3MgfD0gTk9fV09MX0ZMQUc7CisJfQorCUJOWDJYX0RFVl9JTkZPKCIlc1dvTCBjYXBhYmxlXG4iLAorCQkgICAgICAgKGJwLT5mbGFncyAmIE5PX1dPTF9GTEFHKSA/ICJub3QgIiA6ICIiKTsKKworCXZhbCA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5zaGFyZWRfaHdfY29uZmlnLnBhcnRfbnVtKTsKKwl2YWwyID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLnNoYXJlZF9od19jb25maWcucGFydF9udW1bNF0pOworCXZhbDMgPSBTSE1FTV9SRChicCwgZGV2X2luZm8uc2hhcmVkX2h3X2NvbmZpZy5wYXJ0X251bVs4XSk7CisJdmFsNCA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5zaGFyZWRfaHdfY29uZmlnLnBhcnRfbnVtWzEyXSk7CisKKwlkZXZfaW5mbygmYnAtPnBkZXYtPmRldiwgInBhcnQgbnVtYmVyICVYLSVYLSVYLSVYXG4iLAorCQkgdmFsLCB2YWwyLCB2YWwzLCB2YWw0KTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGJueDJ4X2xpbmtfc2V0dGluZ3Nfc3VwcG9ydGVkKHN0cnVjdCBibngyeCAqYnAsCisJCQkJCQkgICAgdTMyIHN3aXRjaF9jZmcpCit7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwl1MzIgZXh0X3BoeV90eXBlOworCisJc3dpdGNoIChzd2l0Y2hfY2ZnKSB7CisJY2FzZSBTV0lUQ0hfQ0ZHXzFHOgorCQlCTlgyWF9ERVZfSU5GTygic3dpdGNoX2NmZyAweCV4ICgxRylcbiIsIHN3aXRjaF9jZmcpOworCisJCWV4dF9waHlfdHlwZSA9CisJCQlTRVJERVNfRVhUX1BIWV9UWVBFKGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyk7CisJCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7CisJCWNhc2UgUE9SVF9IV19DRkdfU0VSREVTX0VYVF9QSFlfVFlQRV9ESVJFQ1Q6CisJCQlCTlgyWF9ERVZfSU5GTygiZXh0X3BoeV90eXBlIDB4JXggKERpcmVjdClcbiIsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSk7CisKKwkJCWJwLT5wb3J0LnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMjUwMGJhc2VYX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX1RQIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9GSUJSRSB8CisJCQkJCSAgICAgICBTVVBQT1JURURfQXV0b25lZyB8CisJCQkJCSAgICAgICBTVVBQT1JURURfUGF1c2UgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9UWVBFX0JDTTU0ODI6CisJCQlCTlgyWF9ERVZfSU5GTygiZXh0X3BoeV90eXBlIDB4JXggKDU0ODIpXG4iLAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOworCisJCQlicC0+cG9ydC5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX1RQIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9GSUJSRSB8CisJCQkJCSAgICAgICBTVVBQT1JURURfQXV0b25lZyB8CisJCQkJCSAgICAgICBTVVBQT1JURURfUGF1c2UgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCUJOWDJYX0VSUigiTlZSQU0gY29uZmlnIGVycm9yLiAiCisJCQkJICAiQkFEIFNlckRlcyBleHRfcGh5X2NvbmZpZyAweCV4XG4iLAorCQkJCSAgYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWJwLT5wb3J0LnBoeV9hZGRyID0gUkVHX1JEKGJwLCBOSUdfUkVHX1NFUkRFUzBfQ1RSTF9QSFlfQUREUiArCisJCQkJCSAgIHBvcnQqMHgxMCk7CisJCUJOWDJYX0RFVl9JTkZPKCJwaHlfYWRkciAweCV4XG4iLCBicC0+cG9ydC5waHlfYWRkcik7CisJCWJyZWFrOworCisJY2FzZSBTV0lUQ0hfQ0ZHXzEwRzoKKwkJQk5YMlhfREVWX0lORk8oInN3aXRjaF9jZmcgMHgleCAoMTBHKVxuIiwgc3dpdGNoX2NmZyk7CisKKwkJZXh0X3BoeV90eXBlID0KKwkJCVhHWFNfRVhUX1BIWV9UWVBFKGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyk7CisJCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUOgorCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4IChEaXJlY3QpXG4iLAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOworCisJCQlicC0+cG9ydC5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzI1MDBiYXNlWF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX1RQIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9GSUJSRSB8CisJCQkJCSAgICAgICBTVVBQT1JURURfQXV0b25lZyB8CisJCQkJCSAgICAgICBTVVBQT1JURURfUGF1c2UgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgorCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4ICg4MDcyKVxuIiwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKKworCQkJYnAtPnBvcnQuc3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfRklCUkUgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0F1dG9uZWcgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX1BhdXNlIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MzoKKwkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoODA3MylcbiIsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSk7CisKKwkJCWJwLT5wb3J0LnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMjUwMGJhc2VYX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9GSUJSRSB8CisJCQkJCSAgICAgICBTVVBQT1JURURfQXV0b25lZyB8CisJCQkJCSAgICAgICBTVVBQT1JURURfUGF1c2UgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1OgorCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4ICg4NzA1KVxuIiwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKKworCQkJYnAtPnBvcnQuc3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9GSUJSRSB8CisJCQkJCSAgICAgICBTVVBQT1JURURfUGF1c2UgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgorCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4ICg4NzA2KVxuIiwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKKworCQkJYnAtPnBvcnQuc3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfRklCUkUgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX1BhdXNlIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKKwkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoODcyNilcbiIsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSk7CisKKwkJCWJwLT5wb3J0LnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0F1dG9uZWcgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0ZJQlJFIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9QYXVzZSB8CisJCQkJCSAgICAgICBTVVBQT1JURURfQXN5bV9QYXVzZSk7CisJCQlicmVhazsKKworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3Mjc6CisJCQlCTlgyWF9ERVZfSU5GTygiZXh0X3BoeV90eXBlIDB4JXggKDg3MjcpXG4iLAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOworCisJCQlicC0+cG9ydC5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9BdXRvbmVnIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9GSUJSRSB8CisJCQkJCSAgICAgICBTVVBQT1JURURfUGF1c2UgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgorCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4IChTRlg3MTAxKVxuIiwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKKworCQkJYnAtPnBvcnQuc3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9UUCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfQXV0b25lZyB8CisJCQkJCSAgICAgICBTVVBQT1JURURfUGF1c2UgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxOgorCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4IChCQ004NDgxKVxuIiwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKKworCQkJYnAtPnBvcnQuc3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX1RQIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9BdXRvbmVnIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9QYXVzZSB8CisJCQkJCSAgICAgICBTVVBQT1JURURfQXN5bV9QYXVzZSk7CisJCQlicmVhazsKKworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkU6CisJCQlCTlgyWF9FUlIoIlhHWFMgUEhZIEZhaWx1cmUgZGV0ZWN0ZWQgMHgleFxuIiwKKwkJCQkgIGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJQk5YMlhfRVJSKCJOVlJBTSBjb25maWcgZXJyb3IuICIKKwkJCQkgICJCQUQgWEdYUyBleHRfcGh5X2NvbmZpZyAweCV4XG4iLAorCQkJCSAgYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWJwLT5wb3J0LnBoeV9hZGRyID0gUkVHX1JEKGJwLCBOSUdfUkVHX1hHWFMwX0NUUkxfUEhZX0FERFIgKworCQkJCQkgICBwb3J0KjB4MTgpOworCQlCTlgyWF9ERVZfSU5GTygicGh5X2FkZHIgMHgleFxuIiwgYnAtPnBvcnQucGh5X2FkZHIpOworCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJQk5YMlhfRVJSKCJCQUQgc3dpdGNoX2NmZyBsaW5rX2NvbmZpZyAweCV4XG4iLAorCQkJICBicC0+cG9ydC5saW5rX2NvbmZpZyk7CisJCXJldHVybjsKKwl9CisJYnAtPmxpbmtfcGFyYW1zLnBoeV9hZGRyID0gYnAtPnBvcnQucGh5X2FkZHI7CisKKwkvKiBtYXNrIHdoYXQgd2Ugc3VwcG9ydCBhY2NvcmRpbmcgdG8gc3BlZWRfY2FwX21hc2sgKi8KKwlpZiAoIShicC0+bGlua19wYXJhbXMuc3BlZWRfY2FwX21hc2sgJgorCQkJCVBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMTBNX0hBTEYpKQorCQlicC0+cG9ydC5zdXBwb3J0ZWQgJj0gflNVUFBPUlRFRF8xMGJhc2VUX0hhbGY7CisKKwlpZiAoIShicC0+bGlua19wYXJhbXMuc3BlZWRfY2FwX21hc2sgJgorCQkJCVBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMTBNX0ZVTEwpKQorCQlicC0+cG9ydC5zdXBwb3J0ZWQgJj0gflNVUFBPUlRFRF8xMGJhc2VUX0Z1bGw7CisKKwlpZiAoIShicC0+bGlua19wYXJhbXMuc3BlZWRfY2FwX21hc2sgJgorCQkJCVBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMTAwTV9IQUxGKSkKKwkJYnAtPnBvcnQuc3VwcG9ydGVkICY9IH5TVVBQT1JURURfMTAwYmFzZVRfSGFsZjsKKworCWlmICghKGJwLT5saW5rX3BhcmFtcy5zcGVlZF9jYXBfbWFzayAmCisJCQkJUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xMDBNX0ZVTEwpKQorCQlicC0+cG9ydC5zdXBwb3J0ZWQgJj0gflNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsOworCisJaWYgKCEoYnAtPmxpbmtfcGFyYW1zLnNwZWVkX2NhcF9tYXNrICYKKwkJCQkJUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xRykpCisJCWJwLT5wb3J0LnN1cHBvcnRlZCAmPSB+KFNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZiB8CisJCQkJCVNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCk7CisKKwlpZiAoIShicC0+bGlua19wYXJhbXMuc3BlZWRfY2FwX21hc2sgJgorCQkJCQlQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzJfNUcpKQorCQlicC0+cG9ydC5zdXBwb3J0ZWQgJj0gflNVUFBPUlRFRF8yNTAwYmFzZVhfRnVsbDsKKworCWlmICghKGJwLT5saW5rX3BhcmFtcy5zcGVlZF9jYXBfbWFzayAmCisJCQkJCVBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMTBHKSkKKwkJYnAtPnBvcnQuc3VwcG9ydGVkICY9IH5TVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsOworCisJQk5YMlhfREVWX0lORk8oInN1cHBvcnRlZCAweCV4XG4iLCBicC0+cG9ydC5zdXBwb3J0ZWQpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgYm54MnhfbGlua19zZXR0aW5nc19yZXF1ZXN0ZWQoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlicC0+bGlua19wYXJhbXMucmVxX2R1cGxleCA9IERVUExFWF9GVUxMOworCisJc3dpdGNoIChicC0+cG9ydC5saW5rX2NvbmZpZyAmIFBPUlRfRkVBVFVSRV9MSU5LX1NQRUVEX01BU0spIHsKKwljYXNlIFBPUlRfRkVBVFVSRV9MSU5LX1NQRUVEX0FVVE86CisJCWlmIChicC0+cG9ydC5zdXBwb3J0ZWQgJiBTVVBQT1JURURfQXV0b25lZykgeworCQkJYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkID0gU1BFRURfQVVUT19ORUc7CisJCQlicC0+cG9ydC5hZHZlcnRpc2luZyA9IGJwLT5wb3J0LnN1cHBvcnRlZDsKKwkJfSBlbHNlIHsKKwkJCXUzMiBleHRfcGh5X3R5cGUgPQorCQkJICAgIFhHWFNfRVhUX1BIWV9UWVBFKGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyk7CisKKwkJCWlmICgoZXh0X3BoeV90eXBlID09CisJCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDUpIHx8CisJCQkgICAgKGV4dF9waHlfdHlwZSA9PQorCQkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2KSkgeworCQkJCS8qIGZvcmNlIDEwRywgbm8gQU4gKi8KKwkJCQlicC0+bGlua19wYXJhbXMucmVxX2xpbmVfc3BlZWQgPSBTUEVFRF8xMDAwMDsKKwkJCQlicC0+cG9ydC5hZHZlcnRpc2luZyA9CisJCQkJCQkoQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGwgfAorCQkJCQkJIEFEVkVSVElTRURfRklCUkUpOworCQkJCWJyZWFrOworCQkJfQorCQkJQk5YMlhfRVJSKCJOVlJBTSBjb25maWcgZXJyb3IuICIKKwkJCQkgICJJbnZhbGlkIGxpbmtfY29uZmlnIDB4JXgiCisJCQkJICAiICBBdXRvbmVnIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQkJICBicC0+cG9ydC5saW5rX2NvbmZpZyk7CisJCQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFBPUlRfRkVBVFVSRV9MSU5LX1NQRUVEXzEwTV9GVUxMOgorCQlpZiAoYnAtPnBvcnQuc3VwcG9ydGVkICYgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCkgeworCQkJYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkID0gU1BFRURfMTA7CisJCQlicC0+cG9ydC5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCB8CisJCQkJCQlBRFZFUlRJU0VEX1RQKTsKKwkJfSBlbHNlIHsKKwkJCUJOWDJYX0VSUk9SKCJOVlJBTSBjb25maWcgZXJyb3IuICIKKwkJCQkgICAgIkludmFsaWQgbGlua19jb25maWcgMHgleCIKKwkJCQkgICAgIiAgc3BlZWRfY2FwX21hc2sgMHgleFxuIiwKKwkJCQkgICAgYnAtPnBvcnQubGlua19jb25maWcsCisJCQkJICAgIGJwLT5saW5rX3BhcmFtcy5zcGVlZF9jYXBfbWFzayk7CisJCQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFBPUlRfRkVBVFVSRV9MSU5LX1NQRUVEXzEwTV9IQUxGOgorCQlpZiAoYnAtPnBvcnQuc3VwcG9ydGVkICYgU1VQUE9SVEVEXzEwYmFzZVRfSGFsZikgeworCQkJYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkID0gU1BFRURfMTA7CisJCQlicC0+bGlua19wYXJhbXMucmVxX2R1cGxleCA9IERVUExFWF9IQUxGOworCQkJYnAtPnBvcnQuYWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYgfAorCQkJCQkJQURWRVJUSVNFRF9UUCk7CisJCX0gZWxzZSB7CisJCQlCTlgyWF9FUlJPUigiTlZSQU0gY29uZmlnIGVycm9yLiAiCisJCQkJICAgICJJbnZhbGlkIGxpbmtfY29uZmlnIDB4JXgiCisJCQkJICAgICIgIHNwZWVkX2NhcF9tYXNrIDB4JXhcbiIsCisJCQkJICAgIGJwLT5wb3J0LmxpbmtfY29uZmlnLAorCQkJCSAgICBicC0+bGlua19wYXJhbXMuc3BlZWRfY2FwX21hc2spOworCQkJcmV0dXJuOworCQl9CisJCWJyZWFrOworCisJY2FzZSBQT1JUX0ZFQVRVUkVfTElOS19TUEVFRF8xMDBNX0ZVTEw6CisJCWlmIChicC0+cG9ydC5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCkgeworCQkJYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkID0gU1BFRURfMTAwOworCQkJYnAtPnBvcnQuYWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsIHwKKwkJCQkJCUFEVkVSVElTRURfVFApOworCQl9IGVsc2UgeworCQkJQk5YMlhfRVJST1IoIk5WUkFNIGNvbmZpZyBlcnJvci4gIgorCQkJCSAgICAiSW52YWxpZCBsaW5rX2NvbmZpZyAweCV4IgorCQkJCSAgICAiICBzcGVlZF9jYXBfbWFzayAweCV4XG4iLAorCQkJCSAgICBicC0+cG9ydC5saW5rX2NvbmZpZywKKwkJCQkgICAgYnAtPmxpbmtfcGFyYW1zLnNwZWVkX2NhcF9tYXNrKTsKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUE9SVF9GRUFUVVJFX0xJTktfU1BFRURfMTAwTV9IQUxGOgorCQlpZiAoYnAtPnBvcnQuc3VwcG9ydGVkICYgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYpIHsKKwkJCWJwLT5saW5rX3BhcmFtcy5yZXFfbGluZV9zcGVlZCA9IFNQRUVEXzEwMDsKKwkJCWJwLT5saW5rX3BhcmFtcy5yZXFfZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisJCQlicC0+cG9ydC5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgfAorCQkJCQkJQURWRVJUSVNFRF9UUCk7CisJCX0gZWxzZSB7CisJCQlCTlgyWF9FUlJPUigiTlZSQU0gY29uZmlnIGVycm9yLiAiCisJCQkJICAgICJJbnZhbGlkIGxpbmtfY29uZmlnIDB4JXgiCisJCQkJICAgICIgIHNwZWVkX2NhcF9tYXNrIDB4JXhcbiIsCisJCQkJICAgIGJwLT5wb3J0LmxpbmtfY29uZmlnLAorCQkJCSAgICBicC0+bGlua19wYXJhbXMuc3BlZWRfY2FwX21hc2spOworCQkJcmV0dXJuOworCQl9CisJCWJyZWFrOworCisJY2FzZSBQT1JUX0ZFQVRVUkVfTElOS19TUEVFRF8xRzoKKwkJaWYgKGJwLT5wb3J0LnN1cHBvcnRlZCAmIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCkgeworCQkJYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkID0gU1BFRURfMTAwMDsKKwkJCWJwLT5wb3J0LmFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCQkJQURWRVJUSVNFRF9UUCk7CisJCX0gZWxzZSB7CisJCQlCTlgyWF9FUlJPUigiTlZSQU0gY29uZmlnIGVycm9yLiAiCisJCQkJICAgICJJbnZhbGlkIGxpbmtfY29uZmlnIDB4JXgiCisJCQkJICAgICIgIHNwZWVkX2NhcF9tYXNrIDB4JXhcbiIsCisJCQkJICAgIGJwLT5wb3J0LmxpbmtfY29uZmlnLAorCQkJCSAgICBicC0+bGlua19wYXJhbXMuc3BlZWRfY2FwX21hc2spOworCQkJcmV0dXJuOworCQl9CisJCWJyZWFrOworCisJY2FzZSBQT1JUX0ZFQVRVUkVfTElOS19TUEVFRF8yXzVHOgorCQlpZiAoYnAtPnBvcnQuc3VwcG9ydGVkICYgU1VQUE9SVEVEXzI1MDBiYXNlWF9GdWxsKSB7CisJCQlicC0+bGlua19wYXJhbXMucmVxX2xpbmVfc3BlZWQgPSBTUEVFRF8yNTAwOworCQkJYnAtPnBvcnQuYWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8yNTAwYmFzZVhfRnVsbCB8CisJCQkJCQlBRFZFUlRJU0VEX1RQKTsKKwkJfSBlbHNlIHsKKwkJCUJOWDJYX0VSUk9SKCJOVlJBTSBjb25maWcgZXJyb3IuICIKKwkJCQkgICAgIkludmFsaWQgbGlua19jb25maWcgMHgleCIKKwkJCQkgICAgIiAgc3BlZWRfY2FwX21hc2sgMHgleFxuIiwKKwkJCQkgICAgYnAtPnBvcnQubGlua19jb25maWcsCisJCQkJICAgIGJwLT5saW5rX3BhcmFtcy5zcGVlZF9jYXBfbWFzayk7CisJCQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFBPUlRfRkVBVFVSRV9MSU5LX1NQRUVEXzEwR19DWDQ6CisJY2FzZSBQT1JUX0ZFQVRVUkVfTElOS19TUEVFRF8xMEdfS1g0OgorCWNhc2UgUE9SVF9GRUFUVVJFX0xJTktfU1BFRURfMTBHX0tSOgorCQlpZiAoYnAtPnBvcnQuc3VwcG9ydGVkICYgU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCkgeworCQkJYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkID0gU1BFRURfMTAwMDA7CisJCQlicC0+cG9ydC5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCB8CisJCQkJCQlBRFZFUlRJU0VEX0ZJQlJFKTsKKwkJfSBlbHNlIHsKKwkJCUJOWDJYX0VSUk9SKCJOVlJBTSBjb25maWcgZXJyb3IuICIKKwkJCQkgICAgIkludmFsaWQgbGlua19jb25maWcgMHgleCIKKwkJCQkgICAgIiAgc3BlZWRfY2FwX21hc2sgMHgleFxuIiwKKwkJCQkgICAgYnAtPnBvcnQubGlua19jb25maWcsCisJCQkJICAgIGJwLT5saW5rX3BhcmFtcy5zcGVlZF9jYXBfbWFzayk7CisJCQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlCTlgyWF9FUlJPUigiTlZSQU0gY29uZmlnIGVycm9yLiAiCisJCQkgICAgIkJBRCBsaW5rIHNwZWVkIGxpbmtfY29uZmlnIDB4JXhcbiIsCisJCQkgICAgYnAtPnBvcnQubGlua19jb25maWcpOworCQlicC0+bGlua19wYXJhbXMucmVxX2xpbmVfc3BlZWQgPSBTUEVFRF9BVVRPX05FRzsKKwkJYnAtPnBvcnQuYWR2ZXJ0aXNpbmcgPSBicC0+cG9ydC5zdXBwb3J0ZWQ7CisJCWJyZWFrOworCX0KKworCWJwLT5saW5rX3BhcmFtcy5yZXFfZmxvd19jdHJsID0gKGJwLT5wb3J0LmxpbmtfY29uZmlnICYKKwkJCQkJIFBPUlRfRkVBVFVSRV9GTE9XX0NPTlRST0xfTUFTSyk7CisJaWYgKChicC0+bGlua19wYXJhbXMucmVxX2Zsb3dfY3RybCA9PSBCTlgyWF9GTE9XX0NUUkxfQVVUTykgJiYKKwkgICAgIShicC0+cG9ydC5zdXBwb3J0ZWQgJiBTVVBQT1JURURfQXV0b25lZykpCisJCWJwLT5saW5rX3BhcmFtcy5yZXFfZmxvd19jdHJsID0gQk5YMlhfRkxPV19DVFJMX05PTkU7CisKKwlCTlgyWF9ERVZfSU5GTygicmVxX2xpbmVfc3BlZWQgJWQgIHJlcV9kdXBsZXggJWQgIHJlcV9mbG93X2N0cmwgMHgleCIKKwkJICAgICAgICIgIGFkdmVydGlzaW5nIDB4JXhcbiIsCisJCSAgICAgICBicC0+bGlua19wYXJhbXMucmVxX2xpbmVfc3BlZWQsCisJCSAgICAgICBicC0+bGlua19wYXJhbXMucmVxX2R1cGxleCwKKwkJICAgICAgIGJwLT5saW5rX3BhcmFtcy5yZXFfZmxvd19jdHJsLCBicC0+cG9ydC5hZHZlcnRpc2luZyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBibngyeF9zZXRfbWFjX2J1Zih1OCAqbWFjX2J1ZiwgdTMyIG1hY19sbywgdTE2IG1hY19oaSkKK3sKKwltYWNfaGkgPSBjcHVfdG9fYmUxNihtYWNfaGkpOworCW1hY19sbyA9IGNwdV90b19iZTMyKG1hY19sbyk7CisJbWVtY3B5KG1hY19idWYsICZtYWNfaGksIHNpemVvZihtYWNfaGkpKTsKKwltZW1jcHkobWFjX2J1ZiArIHNpemVvZihtYWNfaGkpLCAmbWFjX2xvLCBzaXplb2YobWFjX2xvKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBibngyeF9nZXRfcG9ydF9od2luZm8oc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCXUzMiB2YWwsIHZhbDI7CisJdTMyIGNvbmZpZzsKKwl1MTYgaTsKKwl1MzIgZXh0X3BoeV90eXBlOworCisJYnAtPmxpbmtfcGFyYW1zLmJwID0gYnA7CisJYnAtPmxpbmtfcGFyYW1zLnBvcnQgPSBwb3J0OworCisJYnAtPmxpbmtfcGFyYW1zLmxhbmVfY29uZmlnID0KKwkJU0hNRU1fUkQoYnAsIGRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLmxhbmVfY29uZmlnKTsKKwlicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcgPQorCQlTSE1FTV9SRChicCwKKwkJCSBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5leHRlcm5hbF9waHlfY29uZmlnKTsKKwkvKiBCQ004NzI3X05PQyA9PiBCQ004NzI3IG5vIG92ZXIgY3VycmVudCAqLworCWlmIChYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpID09CisJICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjdfTk9DKSB7CisJCWJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyAmPQorCQkJflBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX01BU0s7CisJCWJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyB8PQorCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNzsKKwkJYnAtPmxpbmtfcGFyYW1zLmZlYXR1cmVfY29uZmlnX2ZsYWdzIHw9CisJCQlGRUFUVVJFX0NPTkZJR19CQ004NzI3X05PQzsKKwl9CisKKwlicC0+bGlua19wYXJhbXMuc3BlZWRfY2FwX21hc2sgPQorCQlTSE1FTV9SRChicCwKKwkJCSBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5zcGVlZF9jYXBhYmlsaXR5X21hc2spOworCisJYnAtPnBvcnQubGlua19jb25maWcgPQorCQlTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9mZWF0dXJlX2NvbmZpZ1twb3J0XS5saW5rX2NvbmZpZyk7CisKKwkvKiBHZXQgdGhlIDQgbGFuZXMgeGd4cyBjb25maWcgcnggYW5kIHR4ICovCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQl2YWwgPSBTSE1FTV9SRChicCwKKwkJCSAgIGRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLnhneHNfY29uZmlnX3J4W2k8PDFdKTsKKwkJYnAtPmxpbmtfcGFyYW1zLnhneHNfY29uZmlnX3J4W2kgPDwgMV0gPSAoKHZhbD4+MTYpICYgMHhmZmZmKTsKKwkJYnAtPmxpbmtfcGFyYW1zLnhneHNfY29uZmlnX3J4WyhpIDw8IDEpICsgMV0gPSAodmFsICYgMHhmZmZmKTsKKworCQl2YWwgPSBTSE1FTV9SRChicCwKKwkJCSAgIGRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLnhneHNfY29uZmlnX3R4W2k8PDFdKTsKKwkJYnAtPmxpbmtfcGFyYW1zLnhneHNfY29uZmlnX3R4W2kgPDwgMV0gPSAoKHZhbD4+MTYpICYgMHhmZmZmKTsKKwkJYnAtPmxpbmtfcGFyYW1zLnhneHNfY29uZmlnX3R4WyhpIDw8IDEpICsgMV0gPSAodmFsICYgMHhmZmZmKTsKKwl9CisKKwkvKiBJZiB0aGUgZGV2aWNlIGlzIGNhcGFibGUgb2YgV29MLCBzZXQgdGhlIGRlZmF1bHQgc3RhdGUgYWNjb3JkaW5nCisJICogdG8gdGhlIEhXCisJICovCisJY29uZmlnID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLnBvcnRfZmVhdHVyZV9jb25maWdbcG9ydF0uY29uZmlnKTsKKwlicC0+d29sID0gKCEoYnAtPmZsYWdzICYgTk9fV09MX0ZMQUcpICYmCisJCSAgIChjb25maWcgJiBQT1JUX0ZFQVRVUkVfV09MX0VOQUJMRUQpKTsKKworCUJOWDJYX0RFVl9JTkZPKCJsYW5lX2NvbmZpZyAweCUwOHggIGV4dF9waHlfY29uZmlnIDB4JTA4eCIKKwkJICAgICAgICIgIHNwZWVkX2NhcF9tYXNrIDB4JTA4eCAgbGlua19jb25maWcgMHglMDh4XG4iLAorCQkgICAgICAgYnAtPmxpbmtfcGFyYW1zLmxhbmVfY29uZmlnLAorCQkgICAgICAgYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnLAorCQkgICAgICAgYnAtPmxpbmtfcGFyYW1zLnNwZWVkX2NhcF9tYXNrLCBicC0+cG9ydC5saW5rX2NvbmZpZyk7CisKKwlicC0+bGlua19wYXJhbXMuc3dpdGNoX2NmZyB8PSAoYnAtPnBvcnQubGlua19jb25maWcgJgorCQkJCSAgICAgICBQT1JUX0ZFQVRVUkVfQ09OTkVDVEVEX1NXSVRDSF9NQVNLKTsKKwlibngyeF9saW5rX3NldHRpbmdzX3N1cHBvcnRlZChicCwgYnAtPmxpbmtfcGFyYW1zLnN3aXRjaF9jZmcpOworCisJYm54MnhfbGlua19zZXR0aW5nc19yZXF1ZXN0ZWQoYnApOworCisJLyoKKwkgKiBJZiBjb25uZWN0ZWQgZGlyZWN0bHksIHdvcmsgd2l0aCB0aGUgaW50ZXJuYWwgUEhZLCBvdGhlcndpc2UsIHdvcmsKKwkgKiB3aXRoIHRoZSBleHRlcm5hbCBQSFkKKwkgKi8KKwlleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOworCWlmIChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUKQorCQlicC0+bWRpby5wcnRhZCA9IGJwLT5saW5rX3BhcmFtcy5waHlfYWRkcjsKKworCWVsc2UgaWYgKChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRkFJTFVSRSkgJiYKKwkJIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfTk9UX0NPTk4pKQorCQlicC0+bWRpby5wcnRhZCA9CisJCQlYR1hTX0VYVF9QSFlfQUREUihicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOworCisJdmFsMiA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5tYWNfdXBwZXIpOworCXZhbCA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5tYWNfbG93ZXIpOworCWJueDJ4X3NldF9tYWNfYnVmKGJwLT5kZXYtPmRldl9hZGRyLCB2YWwsIHZhbDIpOworCW1lbWNweShicC0+bGlua19wYXJhbXMubWFjX2FkZHIsIGJwLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KGJwLT5kZXYtPnBlcm1fYWRkciwgYnAtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKworI2lmZGVmIEJDTV9DTklDCisJdmFsMiA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5pc2NzaV9tYWNfdXBwZXIpOworCXZhbCA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5pc2NzaV9tYWNfbG93ZXIpOworCWJueDJ4X3NldF9tYWNfYnVmKGJwLT5pc2NzaV9tYWMsIHZhbCwgdmFsMik7CisjZW5kaWYKK30KKworc3RhdGljIGludCBfX2RldmluaXQgYm54MnhfZ2V0X2h3aW5mbyhzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBmdW5jID0gQlBfRlVOQyhicCk7CisJdTMyIHZhbCwgdmFsMjsKKwlpbnQgcmMgPSAwOworCisJYm54MnhfZ2V0X2NvbW1vbl9od2luZm8oYnApOworCisJYnAtPmUxaG92ID0gMDsKKwlicC0+ZTFobWYgPSAwOworCWlmIChDSElQX0lTX0UxSChicCkgJiYgIUJQX05PTUNQKGJwKSkgeworCQlicC0+bWZfY29uZmlnID0KKwkJCVNITUVNX1JEKGJwLCBtZl9jZmcuZnVuY19tZl9jb25maWdbZnVuY10uY29uZmlnKTsKKworCQl2YWwgPSAoU0hNRU1fUkQoYnAsIG1mX2NmZy5mdW5jX21mX2NvbmZpZ1tGVU5DXzBdLmUxaG92X3RhZykgJgorCQkgICAgICAgRlVOQ19NRl9DRkdfRTFIT1ZfVEFHX01BU0spOworCQlpZiAodmFsICE9IEZVTkNfTUZfQ0ZHX0UxSE9WX1RBR19ERUZBVUxUKQorCQkJYnAtPmUxaG1mID0gMTsKKwkJQk5YMlhfREVWX0lORk8oIiVzIGZ1bmN0aW9uIG1vZGVcbiIsCisJCQkgICAgICAgSVNfRTFITUYoYnApID8gIm11bHRpIiA6ICJzaW5nbGUiKTsKKworCQlpZiAoSVNfRTFITUYoYnApKSB7CisJCQl2YWwgPSAoU0hNRU1fUkQoYnAsIG1mX2NmZy5mdW5jX21mX2NvbmZpZ1tmdW5jXS4KKwkJCQkJCQkJZTFob3ZfdGFnKSAmCisJCQkgICAgICAgRlVOQ19NRl9DRkdfRTFIT1ZfVEFHX01BU0spOworCQkJaWYgKHZhbCAhPSBGVU5DX01GX0NGR19FMUhPVl9UQUdfREVGQVVMVCkgeworCQkJCWJwLT5lMWhvdiA9IHZhbDsKKwkJCQlCTlgyWF9ERVZfSU5GTygiRTFIT1YgZm9yIGZ1bmMgJWQgaXMgJWQgIgorCQkJCQkgICAgICAgIigweCUwNHgpXG4iLAorCQkJCQkgICAgICAgZnVuYywgYnAtPmUxaG92LCBicC0+ZTFob3YpOworCQkJfSBlbHNlIHsKKwkJCQlCTlgyWF9FUlJPUigiTm8gdmFsaWQgRTFIT1YgZm9yIGZ1bmMgJWQsIgorCQkJCQkgICAgIiAgYWJvcnRpbmdcbiIsIGZ1bmMpOworCQkJCXJjID0gLUVQRVJNOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKEJQX0UxSFZOKGJwKSkgeworCQkJCUJOWDJYX0VSUk9SKCJWTiAlZCBpbiBzaW5nbGUgZnVuY3Rpb24gbW9kZSwiCisJCQkJCSAgICAiICBhYm9ydGluZ1xuIiwgQlBfRTFIVk4oYnApKTsKKwkJCQlyYyA9IC1FUEVSTTsKKwkJCX0KKwkJfQorCX0KKworCWlmICghQlBfTk9NQ1AoYnApKSB7CisJCWJueDJ4X2dldF9wb3J0X2h3aW5mbyhicCk7CisKKwkJYnAtPmZ3X3NlcSA9IChTSE1FTV9SRChicCwgZnVuY19tYltmdW5jXS5kcnZfbWJfaGVhZGVyKSAmCisJCQkgICAgICBEUlZfTVNHX1NFUV9OVU1CRVJfTUFTSyk7CisJCUJOWDJYX0RFVl9JTkZPKCJmd19zZXEgMHglMDh4XG4iLCBicC0+Zndfc2VxKTsKKwl9CisKKwlpZiAoSVNfRTFITUYoYnApKSB7CisJCXZhbDIgPSBTSE1FTV9SRChicCwgbWZfY2ZnLmZ1bmNfbWZfY29uZmlnW2Z1bmNdLm1hY191cHBlcik7CisJCXZhbCA9IFNITUVNX1JEKGJwLCAgbWZfY2ZnLmZ1bmNfbWZfY29uZmlnW2Z1bmNdLm1hY19sb3dlcik7CisJCWlmICgodmFsMiAhPSBGVU5DX01GX0NGR19VUFBFUk1BQ19ERUZBVUxUKSAmJgorCQkgICAgKHZhbCAhPSBGVU5DX01GX0NGR19MT1dFUk1BQ19ERUZBVUxUKSkgeworCQkJYnAtPmRldi0+ZGV2X2FkZHJbMF0gPSAodTgpKHZhbDIgPj4gOCAmIDB4ZmYpOworCQkJYnAtPmRldi0+ZGV2X2FkZHJbMV0gPSAodTgpKHZhbDIgJiAweGZmKTsKKwkJCWJwLT5kZXYtPmRldl9hZGRyWzJdID0gKHU4KSh2YWwgPj4gMjQgJiAweGZmKTsKKwkJCWJwLT5kZXYtPmRldl9hZGRyWzNdID0gKHU4KSh2YWwgPj4gMTYgJiAweGZmKTsKKwkJCWJwLT5kZXYtPmRldl9hZGRyWzRdID0gKHU4KSh2YWwgPj4gOCAgJiAweGZmKTsKKwkJCWJwLT5kZXYtPmRldl9hZGRyWzVdID0gKHU4KSh2YWwgJiAweGZmKTsKKwkJCW1lbWNweShicC0+bGlua19wYXJhbXMubWFjX2FkZHIsIGJwLT5kZXYtPmRldl9hZGRyLAorCQkJICAgICAgIEVUSF9BTEVOKTsKKwkJCW1lbWNweShicC0+ZGV2LT5wZXJtX2FkZHIsIGJwLT5kZXYtPmRldl9hZGRyLAorCQkJICAgICAgIEVUSF9BTEVOKTsKKwkJfQorCisJCXJldHVybiByYzsKKwl9CisKKwlpZiAoQlBfTk9NQ1AoYnApKSB7CisJCS8qIG9ubHkgc3VwcG9zZWQgdG8gaGFwcGVuIG9uIGVtdWxhdGlvbi9GUEdBICovCisJCUJOWDJYX0VSUk9SKCJ3YXJuaW5nOiByYW5kb20gTUFDIHdvcmthcm91bmQgYWN0aXZlXG4iKTsKKwkJcmFuZG9tX2V0aGVyX2FkZHIoYnAtPmRldi0+ZGV2X2FkZHIpOworCQltZW1jcHkoYnAtPmRldi0+cGVybV9hZGRyLCBicC0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGJueDJ4X3JlYWRfZndpbmZvKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IGNudCwgaSwgYmxvY2tfZW5kLCByb2RpOworCWNoYXIgdnBkX2RhdGFbQk5YMlhfVlBEX0xFTisxXTsKKwljaGFyIHN0cl9pZF9yZWdbVkVORE9SX0lEX0xFTisxXTsKKwljaGFyIHN0cl9pZF9jYXBbVkVORE9SX0lEX0xFTisxXTsKKwl1OCBsZW47CisKKwljbnQgPSBwY2lfcmVhZF92cGQoYnAtPnBkZXYsIDAsIEJOWDJYX1ZQRF9MRU4sIHZwZF9kYXRhKTsKKwltZW1zZXQoYnAtPmZ3X3ZlciwgMCwgc2l6ZW9mKGJwLT5md192ZXIpKTsKKworCWlmIChjbnQgPCBCTlgyWF9WUERfTEVOKQorCQlnb3RvIG91dF9ub3RfZm91bmQ7CisKKwlpID0gcGNpX3ZwZF9maW5kX3RhZyh2cGRfZGF0YSwgMCwgQk5YMlhfVlBEX0xFTiwKKwkJCSAgICAgUENJX1ZQRF9MUkRUX1JPX0RBVEEpOworCWlmIChpIDwgMCkKKwkJZ290byBvdXRfbm90X2ZvdW5kOworCisKKwlibG9ja19lbmQgPSBpICsgUENJX1ZQRF9MUkRUX1RBR19TSVpFICsKKwkJICAgIHBjaV92cGRfbHJkdF9zaXplKCZ2cGRfZGF0YVtpXSk7CisKKwlpICs9IFBDSV9WUERfTFJEVF9UQUdfU0laRTsKKworCWlmIChibG9ja19lbmQgPiBCTlgyWF9WUERfTEVOKQorCQlnb3RvIG91dF9ub3RfZm91bmQ7CisKKwlyb2RpID0gcGNpX3ZwZF9maW5kX2luZm9fa2V5d29yZCh2cGRfZGF0YSwgaSwgYmxvY2tfZW5kLAorCQkJCSAgIFBDSV9WUERfUk9fS0VZV09SRF9NRlJfSUQpOworCWlmIChyb2RpIDwgMCkKKwkJZ290byBvdXRfbm90X2ZvdW5kOworCisJbGVuID0gcGNpX3ZwZF9pbmZvX2ZpZWxkX3NpemUoJnZwZF9kYXRhW3JvZGldKTsKKworCWlmIChsZW4gIT0gVkVORE9SX0lEX0xFTikKKwkJZ290byBvdXRfbm90X2ZvdW5kOworCisJcm9kaSArPSBQQ0lfVlBEX0lORk9fRkxEX0hEUl9TSVpFOworCisJLyogdmVuZG9yIHNwZWNpZmljIGluZm8gKi8KKwlzbnByaW50ZihzdHJfaWRfcmVnLCBWRU5ET1JfSURfTEVOICsgMSwgIiUwNHgiLCBQQ0lfVkVORE9SX0lEX0RFTEwpOworCXNucHJpbnRmKHN0cl9pZF9jYXAsIFZFTkRPUl9JRF9MRU4gKyAxLCAiJTA0WCIsIFBDSV9WRU5ET1JfSURfREVMTCk7CisJaWYgKCFzdHJuY21wKHN0cl9pZF9yZWcsICZ2cGRfZGF0YVtyb2RpXSwgVkVORE9SX0lEX0xFTikgfHwKKwkgICAgIXN0cm5jbXAoc3RyX2lkX2NhcCwgJnZwZF9kYXRhW3JvZGldLCBWRU5ET1JfSURfTEVOKSkgeworCisJCXJvZGkgPSBwY2lfdnBkX2ZpbmRfaW5mb19rZXl3b3JkKHZwZF9kYXRhLCBpLCBibG9ja19lbmQsCisJCQkJCQlQQ0lfVlBEX1JPX0tFWVdPUkRfVkVORE9SMCk7CisJCWlmIChyb2RpID49IDApIHsKKwkJCWxlbiA9IHBjaV92cGRfaW5mb19maWVsZF9zaXplKCZ2cGRfZGF0YVtyb2RpXSk7CisKKwkJCXJvZGkgKz0gUENJX1ZQRF9JTkZPX0ZMRF9IRFJfU0laRTsKKworCQkJaWYgKGxlbiA8IDMyICYmIChsZW4gKyByb2RpKSA8PSBCTlgyWF9WUERfTEVOKSB7CisJCQkJbWVtY3B5KGJwLT5md192ZXIsICZ2cGRfZGF0YVtyb2RpXSwgbGVuKTsKKwkJCQlicC0+ZndfdmVyW2xlbl0gPSAnICc7CisJCQl9CisJCX0KKwkJcmV0dXJuOworCX0KK291dF9ub3RfZm91bmQ6CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBibngyeF9pbml0X2JwKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKKwlpbnQgdGltZXJfaW50ZXJ2YWw7CisJaW50IHJjOworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHQgaGFuZGxpbmcgdW50aWwgSFcgaXMgaW5pdGlhbGl6ZWQgKi8KKwlhdG9taWNfc2V0KCZicC0+aW50cl9zZW0sIDEpOworCXNtcF93bWIoKTsgLyogRW5zdXJlIHRoYXQgYnAtPmludHJfc2VtIHVwZGF0ZSBpcyBTTVAtc2FmZSAqLworCisJbXV0ZXhfaW5pdCgmYnAtPnBvcnQucGh5X211dGV4KTsKKwltdXRleF9pbml0KCZicC0+ZndfbWJfbXV0ZXgpOworCXNwaW5fbG9ja19pbml0KCZicC0+c3RhdHNfbG9jayk7CisjaWZkZWYgQkNNX0NOSUMKKwltdXRleF9pbml0KCZicC0+Y25pY19tdXRleCk7CisjZW5kaWYKKworCUlOSVRfREVMQVlFRF9XT1JLKCZicC0+c3BfdGFzaywgYm54Mnhfc3BfdGFzayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJmJwLT5yZXNldF90YXNrLCBibngyeF9yZXNldF90YXNrKTsKKworCXJjID0gYm54MnhfZ2V0X2h3aW5mbyhicCk7CisKKwlibngyeF9yZWFkX2Z3aW5mbyhicCk7CisJLyogbmVlZCB0byByZXNldCBjaGlwIGlmIHVuZGkgd2FzIGFjdGl2ZSAqLworCWlmICghQlBfTk9NQ1AoYnApKQorCQlibngyeF91bmRpX3VubG9hZChicCk7CisKKwlpZiAoQ0hJUF9SRVZfSVNfRlBHQShicCkpCisJCWRldl9lcnIoJmJwLT5wZGV2LT5kZXYsICJGUEdBIGRldGVjdGVkXG4iKTsKKworCWlmIChCUF9OT01DUChicCkgJiYgKGZ1bmMgPT0gMCkpCisJCWRldl9lcnIoJmJwLT5wZGV2LT5kZXYsICJNQ1AgZGlzYWJsZWQsICIKKwkJCQkJIm11c3QgbG9hZCBkZXZpY2VzIGluIG9yZGVyIVxuIik7CisKKwkvKiBTZXQgbXVsdGkgcXVldWUgbW9kZSAqLworCWlmICgobXVsdGlfbW9kZSAhPSBFVEhfUlNTX01PREVfRElTQUJMRUQpICYmCisJICAgICgoaW50X21vZGUgPT0gSU5UX01PREVfSU5UeCkgfHwgKGludF9tb2RlID09IElOVF9NT0RFX01TSSkpKSB7CisJCWRldl9lcnIoJmJwLT5wZGV2LT5kZXYsICJNdWx0aSBkaXNhYmxlZCBzaW5jZSBpbnRfbW9kZSAiCisJCQkJCSJyZXF1ZXN0ZWQgaXMgbm90IE1TSS1YXG4iKTsKKwkJbXVsdGlfbW9kZSA9IEVUSF9SU1NfTU9ERV9ESVNBQkxFRDsKKwl9CisJYnAtPm11bHRpX21vZGUgPSBtdWx0aV9tb2RlOworCWJwLT5pbnRfbW9kZSA9IGludF9tb2RlOworCisJYnAtPmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9HUk87CisKKwkvKiBTZXQgVFBBIGZsYWdzICovCisJaWYgKGRpc2FibGVfdHBhKSB7CisJCWJwLT5mbGFncyAmPSB+VFBBX0VOQUJMRV9GTEFHOworCQlicC0+ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9MUk87CisJfSBlbHNlIHsKKwkJYnAtPmZsYWdzIHw9IFRQQV9FTkFCTEVfRkxBRzsKKwkJYnAtPmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87CisJfQorCWJwLT5kaXNhYmxlX3RwYSA9IGRpc2FibGVfdHBhOworCisJaWYgKENISVBfSVNfRTEoYnApKQorCQlicC0+ZHJvcGxlc3NfZmMgPSAwOworCWVsc2UKKwkJYnAtPmRyb3BsZXNzX2ZjID0gZHJvcGxlc3NfZmM7CisKKwlicC0+bXJycyA9IG1ycnM7CisKKwlicC0+dHhfcmluZ19zaXplID0gTUFYX1RYX0FWQUlMOworCWJwLT5yeF9yaW5nX3NpemUgPSBNQVhfUlhfQVZBSUw7CisKKwlicC0+cnhfY3N1bSA9IDE7CisKKwkvKiBtYWtlIHN1cmUgdGhhdCB0aGUgbnVtYmVycyBhcmUgaW4gdGhlIHJpZ2h0IGdyYW51bGFyaXR5ICovCisJYnAtPnR4X3RpY2tzID0gKDUwIC8gKDQgKiBCTlgyWF9CVFIpKSAqICg0ICogQk5YMlhfQlRSKTsKKwlicC0+cnhfdGlja3MgPSAoMjUgLyAoNCAqIEJOWDJYX0JUUikpICogKDQgKiBCTlgyWF9CVFIpOworCisJdGltZXJfaW50ZXJ2YWwgPSAoQ0hJUF9SRVZfSVNfU0xPVyhicCkgPyA1KkhaIDogSFopOworCWJwLT5jdXJyZW50X2ludGVydmFsID0gKHBvbGwgPyBwb2xsIDogdGltZXJfaW50ZXJ2YWwpOworCisJaW5pdF90aW1lcigmYnAtPnRpbWVyKTsKKwlicC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBicC0+Y3VycmVudF9pbnRlcnZhbDsKKwlicC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBicDsKKwlicC0+dGltZXIuZnVuY3Rpb24gPSBibngyeF90aW1lcjsKKworCXJldHVybiByYzsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBHZW5lcmFsIHNlcnZpY2UgZnVuY3Rpb25zCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBjYWxsZWQgd2l0aCBydG5sX2xvY2sgKi8KK3N0YXRpYyBpbnQgYm54Mnhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKworCWJueDJ4X3NldF9wb3dlcl9zdGF0ZShicCwgUENJX0QwKTsKKworCWlmICghYm54MnhfcmVzZXRfaXNfZG9uZShicCkpIHsKKwkJZG8geworCQkJLyogUmVzZXQgTUNQIG1haWwgYm94IHNlcXVlbmNlIGlmIHRoZXJlIGlzIG9uIGdvaW5nCisJCQkgKiByZWNvdmVyeQorCQkJICovCisJCQlicC0+Zndfc2VxID0gMDsKKworCQkJLyogSWYgaXQncyB0aGUgZmlyc3QgZnVuY3Rpb24gdG8gbG9hZCBhbmQgcmVzZXQgZG9uZQorCQkJICogaXMgc3RpbGwgbm90IGNsZWFyZWQgaXQgbWF5IG1lYW4gdGhhdC4gV2UgZG9uJ3QKKwkJCSAqIGNoZWNrIHRoZSBhdHRlbnRpb24gc3RhdGUgaGVyZSBiZWNhdXNlIGl0IG1heSBoYXZlCisJCQkgKiBhbHJlYWR5IGJlZW4gY2xlYXJlZCBieSBhICJjb21tb24iIHJlc2V0IGJ1dCB3ZQorCQkJICogc2hlbGwgcHJvY2VlZCB3aXRoICJwcm9jZXNzIGtpbGwiIGFueXdheS4KKwkJCSAqLworCQkJaWYgKChibngyeF9nZXRfbG9hZF9jbnQoYnApID09IDApICYmCisJCQkJYm54MnhfdHJ5bG9ja19od19sb2NrKGJwLAorCQkJCUhXX0xPQ0tfUkVTT1VSQ0VfUkVTRVJWRURfMDgpICYmCisJCQkJKCFibngyeF9sZWFkZXJfcmVzZXQoYnApKSkgeworCQkJCURQKE5FVElGX01TR19IVywgIlJlY292ZXJlZCBpbiBvcGVuXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJYm54Mnhfc2V0X3Bvd2VyX3N0YXRlKGJwLCBQQ0lfRDNob3QpOworCisJCQlwcmludGsoS0VSTl9FUlIiJXM6IFJlY292ZXJ5IGZsb3cgaGFzbid0IGJlZW4gcHJvcGVybHkiCisJCQkiIGNvbXBsZXRlZCB5ZXQuIFRyeSBhZ2FpbiBsYXRlci4gSWYgdSBzdGlsbCBzZWUgdGhpcyIKKwkJCSIgbWVzc2FnZSBhZnRlciBhIGZldyByZXRyaWVzIHRoZW4gcG93ZXIgY3ljbGUgaXMiCisJCQkiIHJlcXVpcmVkLlxuIiwgYnAtPmRldi0+bmFtZSk7CisKKwkJCXJldHVybiAtRUFHQUlOOworCQl9IHdoaWxlICgwKTsKKwl9CisKKwlicC0+cmVjb3Zlcnlfc3RhdGUgPSBCTlgyWF9SRUNPVkVSWV9ET05FOworCisJcmV0dXJuIGJueDJ4X25pY19sb2FkKGJwLCBMT0FEX09QRU4pOworfQorCisvKiBjYWxsZWQgd2l0aCBydG5sX2xvY2sgKi8KK3N0YXRpYyBpbnQgYm54MnhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCS8qIFVubG9hZCB0aGUgZHJpdmVyLCByZWxlYXNlIElSUXMgKi8KKwlibngyeF9uaWNfdW5sb2FkKGJwLCBVTkxPQURfQ0xPU0UpOworCWJueDJ4X3NldF9wb3dlcl9zdGF0ZShicCwgUENJX0QzaG90KTsKKworCXJldHVybiAwOworfQorCisvKiBjYWxsZWQgd2l0aCBuZXRpZl90eF9sb2NrIGZyb20gZGV2X21jYXN0LmMgKi8KK3ZvaWQgYm54Mnhfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgcnhfbW9kZSA9IEJOWDJYX1JYX01PREVfTk9STUFMOworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisKKwlpZiAoYnAtPnN0YXRlICE9IEJOWDJYX1NUQVRFX09QRU4pIHsKKwkJRFAoTkVUSUZfTVNHX0lGVVAsICJzdGF0ZSBpcyAleCwgcmV0dXJuaW5nXG4iLCBicC0+c3RhdGUpOworCQlyZXR1cm47CisJfQorCisJRFAoTkVUSUZfTVNHX0lGVVAsICJkZXYtPmZsYWdzID0gJXhcbiIsIGRldi0+ZmxhZ3MpOworCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKKwkJcnhfbW9kZSA9IEJOWDJYX1JYX01PREVfUFJPTUlTQzsKKworCWVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fAorCQkgKChuZXRkZXZfbWNfY291bnQoZGV2KSA+IEJOWDJYX01BWF9NVUxUSUNBU1QpICYmCisJCSAgQ0hJUF9JU19FMShicCkpKQorCQlyeF9tb2RlID0gQk5YMlhfUlhfTU9ERV9BTExNVUxUSTsKKworCWVsc2UgeyAvKiBzb21lIG11bHRpY2FzdHMgKi8KKwkJaWYgKENISVBfSVNfRTEoYnApKSB7CisJCQlpbnQgaSwgb2xkLCBvZmZzZXQ7CisJCQlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOworCQkJc3RydWN0IG1hY19jb25maWd1cmF0aW9uX2NtZCAqY29uZmlnID0KKwkJCQkJCWJueDJ4X3NwKGJwLCBtY2FzdF9jb25maWcpOworCisJCQlpID0gMDsKKwkJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHsKKwkJCQljb25maWctPmNvbmZpZ190YWJsZVtpXS4KKwkJCQkJY2FtX2VudHJ5Lm1zYl9tYWNfYWRkciA9CisJCQkJCXN3YWIxNigqKHUxNiAqKSZoYS0+YWRkclswXSk7CisJCQkJY29uZmlnLT5jb25maWdfdGFibGVbaV0uCisJCQkJCWNhbV9lbnRyeS5taWRkbGVfbWFjX2FkZHIgPQorCQkJCQlzd2FiMTYoKih1MTYgKikmaGEtPmFkZHJbMl0pOworCQkJCWNvbmZpZy0+Y29uZmlnX3RhYmxlW2ldLgorCQkJCQljYW1fZW50cnkubHNiX21hY19hZGRyID0KKwkJCQkJc3dhYjE2KCoodTE2ICopJmhhLT5hZGRyWzRdKTsKKwkJCQljb25maWctPmNvbmZpZ190YWJsZVtpXS5jYW1fZW50cnkuZmxhZ3MgPQorCQkJCQkJCWNwdV90b19sZTE2KHBvcnQpOworCQkJCWNvbmZpZy0+Y29uZmlnX3RhYmxlW2ldLgorCQkJCQl0YXJnZXRfdGFibGVfZW50cnkuZmxhZ3MgPSAwOworCQkJCWNvbmZpZy0+Y29uZmlnX3RhYmxlW2ldLnRhcmdldF90YWJsZV9lbnRyeS4KKwkJCQkJY2xpZW50c19iaXRfdmVjdG9yID0KKwkJCQkJCWNwdV90b19sZTMyKDEgPDwgQlBfTF9JRChicCkpOworCQkJCWNvbmZpZy0+Y29uZmlnX3RhYmxlW2ldLgorCQkJCQl0YXJnZXRfdGFibGVfZW50cnkudmxhbl9pZCA9IDA7CisKKwkJCQlEUChORVRJRl9NU0dfSUZVUCwKKwkJCQkgICAic2V0dGluZyBNQ0FTVFslZF0gKCUwNHg6JTA0eDolMDR4KVxuIiwgaSwKKwkJCQkgICBjb25maWctPmNvbmZpZ190YWJsZVtpXS4KKwkJCQkJCWNhbV9lbnRyeS5tc2JfbWFjX2FkZHIsCisJCQkJICAgY29uZmlnLT5jb25maWdfdGFibGVbaV0uCisJCQkJCQljYW1fZW50cnkubWlkZGxlX21hY19hZGRyLAorCQkJCSAgIGNvbmZpZy0+Y29uZmlnX3RhYmxlW2ldLgorCQkJCQkJY2FtX2VudHJ5LmxzYl9tYWNfYWRkcik7CisJCQkJaSsrOworCQkJfQorCQkJb2xkID0gY29uZmlnLT5oZHIubGVuZ3RoOworCQkJaWYgKG9sZCA+IGkpIHsKKwkJCQlmb3IgKDsgaSA8IG9sZDsgaSsrKSB7CisJCQkJCWlmIChDQU1fSVNfSU5WQUxJRChjb25maWctPgorCQkJCQkJCSAgIGNvbmZpZ190YWJsZVtpXSkpIHsKKwkJCQkJCS8qIGFscmVhZHkgaW52YWxpZGF0ZWQgKi8KKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCS8qIGludmFsaWRhdGUgKi8KKwkJCQkJQ0FNX0lOVkFMSURBVEUoY29uZmlnLT4KKwkJCQkJCSAgICAgICBjb25maWdfdGFibGVbaV0pOworCQkJCX0KKwkJCX0KKworCQkJaWYgKENISVBfUkVWX0lTX1NMT1coYnApKQorCQkJCW9mZnNldCA9IEJOWDJYX01BWF9FTVVMX01VTFRJKigxICsgcG9ydCk7CisJCQllbHNlCisJCQkJb2Zmc2V0ID0gQk5YMlhfTUFYX01VTFRJQ0FTVCooMSArIHBvcnQpOworCisJCQljb25maWctPmhkci5sZW5ndGggPSBpOworCQkJY29uZmlnLT5oZHIub2Zmc2V0ID0gb2Zmc2V0OworCQkJY29uZmlnLT5oZHIuY2xpZW50X2lkID0gYnAtPmZwLT5jbF9pZDsKKwkJCWNvbmZpZy0+aGRyLnJlc2VydmVkMSA9IDA7CisKKwkJCWJwLT5zZXRfbWFjX3BlbmRpbmcrKzsKKwkJCXNtcF93bWIoKTsKKworCQkJYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfU0VUX01BQywgMCwKKwkJCQkgICBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgbWNhc3RfY29uZmlnKSksCisJCQkJICAgVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1jYXN0X2NvbmZpZykpLAorCQkJCSAgICAgIDApOworCQl9IGVsc2UgeyAvKiBFMUggKi8KKwkJCS8qIEFjY2VwdCBvbmUgb3IgbW9yZSBtdWx0aWNhc3RzICovCisJCQlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOworCQkJdTMyIG1jX2ZpbHRlcltNQ19IQVNIX1NJWkVdOworCQkJdTMyIGNyYywgYml0LCByZWdpZHg7CisJCQlpbnQgaTsKKworCQkJbWVtc2V0KG1jX2ZpbHRlciwgMCwgNCAqIE1DX0hBU0hfU0laRSk7CisKKwkJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHsKKwkJCQlEUChORVRJRl9NU0dfSUZVUCwgIkFkZGluZyBtY2FzdCBNQUM6ICVwTVxuIiwKKwkJCQkgICBoYS0+YWRkcik7CisKKwkJCQljcmMgPSBjcmMzMmNfbGUoMCwgaGEtPmFkZHIsIEVUSF9BTEVOKTsKKwkJCQliaXQgPSAoY3JjID4+IDI0KSAmIDB4ZmY7CisJCQkJcmVnaWR4ID0gYml0ID4+IDU7CisJCQkJYml0ICY9IDB4MWY7CisJCQkJbWNfZmlsdGVyW3JlZ2lkeF0gfD0gKDEgPDwgYml0KTsKKwkJCX0KKworCQkJZm9yIChpID0gMDsgaSA8IE1DX0hBU0hfU0laRTsgaSsrKQorCQkJCVJFR19XUihicCwgTUNfSEFTSF9PRkZTRVQoYnAsIGkpLAorCQkJCSAgICAgICBtY19maWx0ZXJbaV0pOworCQl9CisJfQorCisJYnAtPnJ4X21vZGUgPSByeF9tb2RlOworCWJueDJ4X3NldF9zdG9ybV9yeF9tb2RlKGJwKTsKK30KKworCisvKiBjYWxsZWQgd2l0aCBydG5sX2xvY2sgKi8KK3N0YXRpYyBpbnQgYm54MnhfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwcnRhZCwKKwkJCSAgIGludCBkZXZhZCwgdTE2IGFkZHIpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJdTE2IHZhbHVlOworCWludCByYzsKKwl1MzIgcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOworCisJRFAoTkVUSUZfTVNHX0xJTkssICJtZGlvX3JlYWQ6IHBydGFkIDB4JXgsIGRldmFkIDB4JXgsIGFkZHIgMHgleFxuIiwKKwkgICBwcnRhZCwgZGV2YWQsIGFkZHIpOworCisJaWYgKHBydGFkICE9IGJwLT5tZGlvLnBydGFkKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAicHJ0YWQgbWlzc21hdGNoIChjbWQ6MHgleCAhPSBicDoweCV4KVxuIiwKKwkJICAgcHJ0YWQsIGJwLT5tZGlvLnBydGFkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogVGhlIEhXIGV4cGVjdHMgZGlmZmVyZW50IGRldmFkIGlmIENMMjIgaXMgdXNlZCAqLworCWRldmFkID0gKGRldmFkID09IE1ESU9fREVWQURfTk9ORSkgPyBERUZBVUxUX1BIWV9ERVZfQUREUiA6IGRldmFkOworCisJYm54MnhfYWNxdWlyZV9waHlfbG9jayhicCk7CisJcmMgPSBibngyeF9jbDQ1X3JlYWQoYnAsIEJQX1BPUlQoYnApLCBwaHlfdHlwZSwgcHJ0YWQsCisJCQkgICAgIGRldmFkLCBhZGRyLCAmdmFsdWUpOworCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOworCURQKE5FVElGX01TR19MSU5LLCAibWRpb19yZWFkX3ZhbCAweCV4IHJjID0gMHgleFxuIiwgdmFsdWUsIHJjKTsKKworCWlmICghcmMpCisJCXJjID0gdmFsdWU7CisJcmV0dXJuIHJjOworfQorCisvKiBjYWxsZWQgd2l0aCBydG5sX2xvY2sgKi8KK3N0YXRpYyBpbnQgYm54MnhfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcHJ0YWQsIGludCBkZXZhZCwKKwkJCSAgICB1MTYgYWRkciwgdTE2IHZhbHVlKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOworCWludCByYzsKKworCURQKE5FVElGX01TR19MSU5LLCAibWRpb193cml0ZTogcHJ0YWQgMHgleCwgZGV2YWQgMHgleCwgYWRkciAweCV4LCIKKwkJCSAgICIgdmFsdWUgMHgleFxuIiwgcHJ0YWQsIGRldmFkLCBhZGRyLCB2YWx1ZSk7CisKKwlpZiAocHJ0YWQgIT0gYnAtPm1kaW8ucHJ0YWQpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJwcnRhZCBtaXNzbWF0Y2ggKGNtZDoweCV4ICE9IGJwOjB4JXgpXG4iLAorCQkgICBwcnRhZCwgYnAtPm1kaW8ucHJ0YWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBUaGUgSFcgZXhwZWN0cyBkaWZmZXJlbnQgZGV2YWQgaWYgQ0wyMiBpcyB1c2VkICovCisJZGV2YWQgPSAoZGV2YWQgPT0gTURJT19ERVZBRF9OT05FKSA/IERFRkFVTFRfUEhZX0RFVl9BRERSIDogZGV2YWQ7CisKKwlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKKwlyYyA9IGJueDJ4X2NsNDVfd3JpdGUoYnAsIEJQX1BPUlQoYnApLCBleHRfcGh5X3R5cGUsIHBydGFkLAorCQkJICAgICAgZGV2YWQsIGFkZHIsIHZhbHVlKTsKKwlibngyeF9yZWxlYXNlX3BoeV9sb2NrKGJwKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qIGNhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLworc3RhdGljIGludCBibngyeF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgKm1kaW8gPSBpZl9taWkoaWZyKTsKKworCURQKE5FVElGX01TR19MSU5LLCAiaW9jdGw6IHBoeSBpZCAweCV4LCByZWcgMHgleCwgdmFsX2luIDB4JXhcbiIsCisJICAgbWRpby0+cGh5X2lkLCBtZGlvLT5yZWdfbnVtLCBtZGlvLT52YWxfaW4pOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUFHQUlOOworCisJcmV0dXJuIG1kaW9fbWlpX2lvY3RsKCZicC0+bWRpbywgbWRpbywgY21kKTsKK30KKworI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCitzdGF0aWMgdm9pZCBwb2xsX2JueDJ4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwlkaXNhYmxlX2lycShicC0+cGRldi0+aXJxKTsKKwlibngyeF9pbnRlcnJ1cHQoYnAtPnBkZXYtPmlycSwgZGV2KTsKKwllbmFibGVfaXJxKGJwLT5wZGV2LT5pcnEpOworfQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYm54MnhfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gYm54Mnhfb3BlbiwKKwkubmRvX3N0b3AJCT0gYm54MnhfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IGJueDJ4X3N0YXJ0X3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBibngyeF9zZXRfcnhfbW9kZSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGJueDJ4X2NoYW5nZV9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX2RvX2lvY3RsCQk9IGJueDJ4X2lvY3RsLAorCS5uZG9fY2hhbmdlX210dQkJPSBibngyeF9jaGFuZ2VfbXR1LAorCS5uZG9fdHhfdGltZW91dAkJPSBibngyeF90eF90aW1lb3V0LAorI2lmZGVmIEJDTV9WTEFOCisJLm5kb192bGFuX3J4X3JlZ2lzdGVyCT0gYm54Mnhfdmxhbl9yeF9yZWdpc3RlciwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBwb2xsX2JueDJ4LAorI2VuZGlmCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBibngyeF9pbml0X2RldihzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYm54MnggKmJwOworCWludCByYzsKKworCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CisJYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJYnAtPmRldiA9IGRldjsKKwlicC0+cGRldiA9IHBkZXY7CisJYnAtPmZsYWdzID0gMDsKKwlicC0+ZnVuYyA9IFBDSV9GVU5DKHBkZXYtPmRldmZuKTsKKworCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJjKSB7CisJCWRldl9lcnIoJmJwLT5wZGV2LT5kZXYsCisJCQkiQ2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlLCBhYm9ydGluZ1xuIik7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMCkgJiBJT1JFU09VUkNFX01FTSkpIHsKKwkJZGV2X2VycigmYnAtPnBkZXYtPmRldiwKKwkJCSJDYW5ub3QgZmluZCBQQ0kgZGV2aWNlIGJhc2UgYWRkcmVzcywgYWJvcnRpbmdcbiIpOworCQlyYyA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX291dF9kaXNhYmxlOworCX0KKworCWlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAyKSAmIElPUkVTT1VSQ0VfTUVNKSkgeworCQlkZXZfZXJyKCZicC0+cGRldi0+ZGV2LCAiQ2Fubm90IGZpbmQgc2Vjb25kIFBDSSBkZXZpY2UiCisJCSAgICAgICAiIGJhc2UgYWRkcmVzcywgYWJvcnRpbmdcbiIpOworCQlyYyA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX291dF9kaXNhYmxlOworCX0KKworCWlmIChhdG9taWNfcmVhZCgmcGRldi0+ZW5hYmxlX2NudCkgPT0gMSkgeworCQlyYyA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgRFJWX01PRFVMRV9OQU1FKTsKKwkJaWYgKHJjKSB7CisJCQlkZXZfZXJyKCZicC0+cGRldi0+ZGV2LAorCQkJCSJDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXMsIGFib3J0aW5nXG4iKTsKKwkJCWdvdG8gZXJyX291dF9kaXNhYmxlOworCQl9CisKKwkJcGNpX3NldF9tYXN0ZXIocGRldik7CisJCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCX0KKworCWJwLT5wbV9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfUE0pOworCWlmIChicC0+cG1fY2FwID09IDApIHsKKwkJZGV2X2VycigmYnAtPnBkZXYtPmRldiwKKwkJCSJDYW5ub3QgZmluZCBwb3dlciBtYW5hZ2VtZW50IGNhcGFiaWxpdHksIGFib3J0aW5nXG4iKTsKKwkJcmMgPSAtRUlPOworCQlnb3RvIGVycl9vdXRfcmVsZWFzZTsKKwl9CisKKwlicC0+cGNpZV9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfRVhQKTsKKwlpZiAoYnAtPnBjaWVfY2FwID09IDApIHsKKwkJZGV2X2VycigmYnAtPnBkZXYtPmRldiwKKwkJCSJDYW5ub3QgZmluZCBQQ0kgRXhwcmVzcyBjYXBhYmlsaXR5LCBhYm9ydGluZ1xuIik7CisJCXJjID0gLUVJTzsKKwkJZ290byBlcnJfb3V0X3JlbGVhc2U7CisJfQorCisJaWYgKGRtYV9zZXRfbWFzaygmcGRldi0+ZGV2LCBETUFfQklUX01BU0soNjQpKSA9PSAwKSB7CisJCWJwLT5mbGFncyB8PSBVU0lOR19EQUNfRkxBRzsKKwkJaWYgKGRtYV9zZXRfY29oZXJlbnRfbWFzaygmcGRldi0+ZGV2LCBETUFfQklUX01BU0soNjQpKSAhPSAwKSB7CisJCQlkZXZfZXJyKCZicC0+cGRldi0+ZGV2LCAiZG1hX3NldF9jb2hlcmVudF9tYXNrIgorCQkJICAgICAgICIgZmFpbGVkLCBhYm9ydGluZ1xuIik7CisJCQlyYyA9IC1FSU87CisJCQlnb3RvIGVycl9vdXRfcmVsZWFzZTsKKwkJfQorCisJfSBlbHNlIGlmIChkbWFfc2V0X21hc2soJnBkZXYtPmRldiwgRE1BX0JJVF9NQVNLKDMyKSkgIT0gMCkgeworCQlkZXZfZXJyKCZicC0+cGRldi0+ZGV2LAorCQkJIlN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IERNQSwgYWJvcnRpbmdcbiIpOworCQlyYyA9IC1FSU87CisJCWdvdG8gZXJyX291dF9yZWxlYXNlOworCX0KKworCWRldi0+bWVtX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCWRldi0+YmFzZV9hZGRyID0gZGV2LT5tZW1fc3RhcnQ7CisJZGV2LT5tZW1fZW5kID0gcGNpX3Jlc291cmNlX2VuZChwZGV2LCAwKTsKKworCWRldi0+aXJxID0gcGRldi0+aXJxOworCisJYnAtPnJlZ3ZpZXcgPSBwY2lfaW9yZW1hcF9iYXIocGRldiwgMCk7CisJaWYgKCFicC0+cmVndmlldykgeworCQlkZXZfZXJyKCZicC0+cGRldi0+ZGV2LAorCQkJIkNhbm5vdCBtYXAgcmVnaXN0ZXIgc3BhY2UsIGFib3J0aW5nXG4iKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXRfcmVsZWFzZTsKKwl9CisKKwlicC0+ZG9vcmJlbGxzID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKSwKKwkJCQkJbWluX3QodTY0LCBCTlgyWF9EQl9TSVpFLAorCQkJCQkgICAgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDIpKSk7CisJaWYgKCFicC0+ZG9vcmJlbGxzKSB7CisJCWRldl9lcnIoJmJwLT5wZGV2LT5kZXYsCisJCQkiQ2Fubm90IG1hcCBkb29yYmVsbCBzcGFjZSwgYWJvcnRpbmdcbiIpOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dF91bm1hcDsKKwl9CisKKwlibngyeF9zZXRfcG93ZXJfc3RhdGUoYnAsIFBDSV9EMCk7CisKKwkvKiBjbGVhbiBpbmRpcmVjdCBhZGRyZXNzZXMgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJwLT5wZGV2LCBQQ0lDRkdfR1JDX0FERFJFU1MsCisJCQkgICAgICAgUENJQ0ZHX1ZFTkRPUl9JRF9PRkZTRVQpOworCVJFR19XUihicCwgUFhQMl9SRUdfUEdMX0FERFJfODhfRjAgKyBCUF9QT1JUKGJwKSoxNiwgMCk7CisJUkVHX1dSKGJwLCBQWFAyX1JFR19QR0xfQUREUl84Q19GMCArIEJQX1BPUlQoYnApKjE2LCAwKTsKKwlSRUdfV1IoYnAsIFBYUDJfUkVHX1BHTF9BRERSXzkwX0YwICsgQlBfUE9SVChicCkqMTYsIDApOworCVJFR19XUihicCwgUFhQMl9SRUdfUEdMX0FERFJfOTRfRjAgKyBCUF9QT1JUKGJwKSoxNiwgMCk7CisKKwkvKiBSZXNldCB0aGUgbG9hZCBjb3VudGVyICovCisJYm54MnhfY2xlYXJfbG9hZF9jbnQoYnApOworCisJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CisKKwlkZXYtPm5ldGRldl9vcHMgPSAmYm54MnhfbmV0ZGV2X29wczsKKwlibngyeF9zZXRfZXRodG9vbF9vcHMoZGV2KTsKKwlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0c7CisJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX0NTVU07CisJaWYgKGJwLT5mbGFncyAmIFVTSU5HX0RBQ19GTEFHKQorCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKKwlkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPX0VDTik7CisJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7CisjaWZkZWYgQkNNX1ZMQU4KKwlkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlgpOworCWJwLT5mbGFncyB8PSAoSFdfVkxBTl9SWF9GTEFHIHwgSFdfVkxBTl9UWF9GTEFHKTsKKworCWRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1NHOworCWRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0hXX0NTVU07CisJaWYgKGJwLT5mbGFncyAmIFVTSU5HX0RBQ19GTEFHKQorCQlkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOworCWRldi0+dmxhbl9mZWF0dXJlcyB8PSAoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTT19FQ04pOworCWRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7CisjZW5kaWYKKworCS8qIGdldF9wb3J0X2h3aW5mbygpIHdpbGwgc2V0IHBydGFkIGFuZCBtbWRzIHByb3Blcmx5ICovCisJYnAtPm1kaW8ucHJ0YWQgPSBNRElPX1BSVEFEX05PTkU7CisJYnAtPm1kaW8ubW1kcyA9IDA7CisJYnAtPm1kaW8ubW9kZV9zdXBwb3J0ID0gTURJT19TVVBQT1JUU19DNDUgfCBNRElPX0VNVUxBVEVfQzIyOworCWJwLT5tZGlvLmRldiA9IGRldjsKKwlicC0+bWRpby5tZGlvX3JlYWQgPSBibngyeF9tZGlvX3JlYWQ7CisJYnAtPm1kaW8ubWRpb193cml0ZSA9IGJueDJ4X21kaW9fd3JpdGU7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF91bm1hcDoKKwlpZiAoYnAtPnJlZ3ZpZXcpIHsKKwkJaW91bm1hcChicC0+cmVndmlldyk7CisJCWJwLT5yZWd2aWV3ID0gTlVMTDsKKwl9CisJaWYgKGJwLT5kb29yYmVsbHMpIHsKKwkJaW91bm1hcChicC0+ZG9vcmJlbGxzKTsKKwkJYnAtPmRvb3JiZWxscyA9IE5VTEw7CisJfQorCitlcnJfb3V0X3JlbGVhc2U6CisJaWYgKGF0b21pY19yZWFkKCZwZGV2LT5lbmFibGVfY250KSA9PSAxKQorCQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCitlcnJfb3V0X2Rpc2FibGU6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworZXJyX291dDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBibngyeF9nZXRfcGNpZV93aWR0aF9zcGVlZChzdHJ1Y3QgYm54MnggKmJwLAorCQkJCQkJIGludCAqd2lkdGgsIGludCAqc3BlZWQpCit7CisJdTMyIHZhbCA9IFJFR19SRChicCwgUENJQ0ZHX09GRlNFVCArIFBDSUNGR19MSU5LX0NPTlRST0wpOworCisJKndpZHRoID0gKHZhbCAmIFBDSUNGR19MSU5LX1dJRFRIKSA+PiBQQ0lDRkdfTElOS19XSURUSF9TSElGVDsKKworCS8qIHJldHVybiB2YWx1ZSBvZiAxPTIuNUdIeiAyPTVHSHogKi8KKwkqc3BlZWQgPSAodmFsICYgUENJQ0ZHX0xJTktfU1BFRUQpID4+IFBDSUNGR19MSU5LX1NQRUVEX1NISUZUOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBibngyeF9jaGVja19maXJtd2FyZShzdHJ1Y3QgYm54MnggKmJwKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUgPSBicC0+ZmlybXdhcmU7CisJc3RydWN0IGJueDJ4X2Z3X2ZpbGVfaGRyICpmd19oZHI7CisJc3RydWN0IGJueDJ4X2Z3X2ZpbGVfc2VjdGlvbiAqc2VjdGlvbnM7CisJdTMyIG9mZnNldCwgbGVuLCBudW1fb3BzOworCXUxNiAqb3BzX29mZnNldHM7CisJaW50IGk7CisJY29uc3QgdTggKmZ3X3ZlcjsKKworCWlmIChmaXJtd2FyZS0+c2l6ZSA8IHNpemVvZihzdHJ1Y3QgYm54MnhfZndfZmlsZV9oZHIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZ3X2hkciA9IChzdHJ1Y3QgYm54MnhfZndfZmlsZV9oZHIgKilmaXJtd2FyZS0+ZGF0YTsKKwlzZWN0aW9ucyA9IChzdHJ1Y3QgYm54MnhfZndfZmlsZV9zZWN0aW9uICopZndfaGRyOworCisJLyogTWFrZSBzdXJlIG5vbmUgb2YgdGhlIG9mZnNldHMgYW5kIHNpemVzIG1ha2UgdXMgcmVhZCBiZXlvbmQKKwkgKiB0aGUgZW5kIG9mIHRoZSBmaXJtd2FyZSBkYXRhICovCisJZm9yIChpID0gMDsgaSA8IHNpemVvZigqZndfaGRyKSAvIHNpemVvZigqc2VjdGlvbnMpOyBpKyspIHsKKwkJb2Zmc2V0ID0gYmUzMl90b19jcHUoc2VjdGlvbnNbaV0ub2Zmc2V0KTsKKwkJbGVuID0gYmUzMl90b19jcHUoc2VjdGlvbnNbaV0ubGVuKTsKKwkJaWYgKG9mZnNldCArIGxlbiA+IGZpcm13YXJlLT5zaXplKSB7CisJCQlkZXZfZXJyKCZicC0+cGRldi0+ZGV2LAorCQkJCSJTZWN0aW9uICVkIGxlbmd0aCBpcyBvdXQgb2YgYm91bmRzXG4iLCBpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJLyogTGlrZXdpc2UgZm9yIHRoZSBpbml0X29wcyBvZmZzZXRzICovCisJb2Zmc2V0ID0gYmUzMl90b19jcHUoZndfaGRyLT5pbml0X29wc19vZmZzZXRzLm9mZnNldCk7CisJb3BzX29mZnNldHMgPSAodTE2ICopKGZpcm13YXJlLT5kYXRhICsgb2Zmc2V0KTsKKwludW1fb3BzID0gYmUzMl90b19jcHUoZndfaGRyLT5pbml0X29wcy5sZW4pIC8gc2l6ZW9mKHN0cnVjdCByYXdfb3ApOworCisJZm9yIChpID0gMDsgaSA8IGJlMzJfdG9fY3B1KGZ3X2hkci0+aW5pdF9vcHNfb2Zmc2V0cy5sZW4pIC8gMjsgaSsrKSB7CisJCWlmIChiZTE2X3RvX2NwdShvcHNfb2Zmc2V0c1tpXSkgPiBudW1fb3BzKSB7CisJCQlkZXZfZXJyKCZicC0+cGRldi0+ZGV2LAorCQkJCSJTZWN0aW9uIG9mZnNldCAlZCBpcyBvdXQgb2YgYm91bmRzXG4iLCBpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJLyogQ2hlY2sgRlcgdmVyc2lvbiAqLworCW9mZnNldCA9IGJlMzJfdG9fY3B1KGZ3X2hkci0+ZndfdmVyc2lvbi5vZmZzZXQpOworCWZ3X3ZlciA9IGZpcm13YXJlLT5kYXRhICsgb2Zmc2V0OworCWlmICgoZndfdmVyWzBdICE9IEJDTV81NzEwX0ZXX01BSk9SX1ZFUlNJT04pIHx8CisJICAgIChmd192ZXJbMV0gIT0gQkNNXzU3MTBfRldfTUlOT1JfVkVSU0lPTikgfHwKKwkgICAgKGZ3X3ZlclsyXSAhPSBCQ01fNTcxMF9GV19SRVZJU0lPTl9WRVJTSU9OKSB8fAorCSAgICAoZndfdmVyWzNdICE9IEJDTV81NzEwX0ZXX0VOR0lORUVSSU5HX1ZFUlNJT04pKSB7CisJCWRldl9lcnIoJmJwLT5wZGV2LT5kZXYsCisJCQkiQmFkIEZXIHZlcnNpb246JWQuJWQuJWQuJWQuIFNob3VsZCBiZSAlZC4lZC4lZC4lZFxuIiwKKwkJICAgICAgIGZ3X3ZlclswXSwgZndfdmVyWzFdLCBmd192ZXJbMl0sCisJCSAgICAgICBmd192ZXJbM10sIEJDTV81NzEwX0ZXX01BSk9SX1ZFUlNJT04sCisJCSAgICAgICBCQ01fNTcxMF9GV19NSU5PUl9WRVJTSU9OLAorCQkgICAgICAgQkNNXzU3MTBfRldfUkVWSVNJT05fVkVSU0lPTiwKKwkJICAgICAgIEJDTV81NzEwX0ZXX0VOR0lORUVSSU5HX1ZFUlNJT04pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJlMzJfdG9fY3B1X24oY29uc3QgdTggKl9zb3VyY2UsIHU4ICpfdGFyZ2V0LCB1MzIgbikKK3sKKwljb25zdCBfX2JlMzIgKnNvdXJjZSA9IChjb25zdCBfX2JlMzIgKilfc291cmNlOworCXUzMiAqdGFyZ2V0ID0gKHUzMiAqKV90YXJnZXQ7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbi80OyBpKyspCisJCXRhcmdldFtpXSA9IGJlMzJfdG9fY3B1KHNvdXJjZVtpXSk7Cit9CisKKy8qCisgICBPcHMgYXJyYXkgaXMgc3RvcmVkIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorICAge29wKDhiaXQpLCBvZmZzZXQoMjRiaXQsIGJpZyBlbmRpYW4pLCBkYXRhKDMyYml0LCBiaWcgZW5kaWFuKX0KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X3ByZXBfb3BzKGNvbnN0IHU4ICpfc291cmNlLCB1OCAqX3RhcmdldCwgdTMyIG4pCit7CisJY29uc3QgX19iZTMyICpzb3VyY2UgPSAoY29uc3QgX19iZTMyICopX3NvdXJjZTsKKwlzdHJ1Y3QgcmF3X29wICp0YXJnZXQgPSAoc3RydWN0IHJhd19vcCAqKV90YXJnZXQ7CisJdTMyIGksIGosIHRtcDsKKworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgbi84OyBpKyssIGogKz0gMikgeworCQl0bXAgPSBiZTMyX3RvX2NwdShzb3VyY2Vbal0pOworCQl0YXJnZXRbaV0ub3AgPSAodG1wID4+IDI0KSAmIDB4ZmY7CisJCXRhcmdldFtpXS5vZmZzZXQgPSB0bXAgJiAweGZmZmZmZjsKKwkJdGFyZ2V0W2ldLnJhd19kYXRhID0gYmUzMl90b19jcHUoc291cmNlW2ogKyAxXSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYmUxNl90b19jcHVfbihjb25zdCB1OCAqX3NvdXJjZSwgdTggKl90YXJnZXQsIHUzMiBuKQoreworCWNvbnN0IF9fYmUxNiAqc291cmNlID0gKGNvbnN0IF9fYmUxNiAqKV9zb3VyY2U7CisJdTE2ICp0YXJnZXQgPSAodTE2ICopX3RhcmdldDsKKwl1MzIgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuLzI7IGkrKykKKwkJdGFyZ2V0W2ldID0gYmUxNl90b19jcHUoc291cmNlW2ldKTsKK30KKworI2RlZmluZSBCTlgyWF9BTExPQ19BTkRfU0VUKGFyciwgbGJsLCBmdW5jKQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCXUzMiBsZW4gPSBiZTMyX3RvX2NwdShmd19oZHItPmFyci5sZW4pOwkJCQlcCisJYnAtPmFyciA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsJCQkJXAorCWlmICghYnAtPmFycikgewkJCQkJCQlcCisJCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlICVkIGJ5dGVzIGZvciAiI2FyciJcbiIsIGxlbik7IFwKKwkJZ290byBsYmw7CQkJCQkJXAorCX0JCQkJCQkJCVwKKwlmdW5jKGJwLT5maXJtd2FyZS0+ZGF0YSArIGJlMzJfdG9fY3B1KGZ3X2hkci0+YXJyLm9mZnNldCksCVwKKwkgICAgICh1OCAqKWJwLT5hcnIsIGxlbik7CQkJCQlcCit9IHdoaWxlICgwKQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBibngyeF9pbml0X2Zpcm13YXJlKHN0cnVjdCBibngyeCAqYnAsIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwljb25zdCBjaGFyICpmd19maWxlX25hbWU7CisJc3RydWN0IGJueDJ4X2Z3X2ZpbGVfaGRyICpmd19oZHI7CisJaW50IHJjOworCisJaWYgKENISVBfSVNfRTEoYnApKQorCQlmd19maWxlX25hbWUgPSBGV19GSUxFX05BTUVfRTE7CisJZWxzZSBpZiAoQ0hJUF9JU19FMUgoYnApKQorCQlmd19maWxlX25hbWUgPSBGV19GSUxFX05BTUVfRTFIOworCWVsc2UgeworCQlkZXZfZXJyKGRldiwgIlVuc3VwcG9ydGVkIGNoaXAgcmV2aXNpb25cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkZXZfaW5mbyhkZXYsICJMb2FkaW5nICVzXG4iLCBmd19maWxlX25hbWUpOworCisJcmMgPSByZXF1ZXN0X2Zpcm13YXJlKCZicC0+ZmlybXdhcmUsIGZ3X2ZpbGVfbmFtZSwgZGV2KTsKKwlpZiAocmMpIHsKKwkJZGV2X2VycihkZXYsICJDYW4ndCBsb2FkIGZpcm13YXJlIGZpbGUgJXNcbiIsIGZ3X2ZpbGVfbmFtZSk7CisJCWdvdG8gcmVxdWVzdF9maXJtd2FyZV9leGl0OworCX0KKworCXJjID0gYm54MnhfY2hlY2tfZmlybXdhcmUoYnApOworCWlmIChyYykgeworCQlkZXZfZXJyKGRldiwgIkNvcnJ1cHQgZmlybXdhcmUgZmlsZSAlc1xuIiwgZndfZmlsZV9uYW1lKTsKKwkJZ290byByZXF1ZXN0X2Zpcm13YXJlX2V4aXQ7CisJfQorCisJZndfaGRyID0gKHN0cnVjdCBibngyeF9md19maWxlX2hkciAqKWJwLT5maXJtd2FyZS0+ZGF0YTsKKworCS8qIEluaXRpYWxpemUgdGhlIHBvaW50ZXJzIHRvIHRoZSBpbml0IGFycmF5cyAqLworCS8qIEJsb2IgKi8KKwlCTlgyWF9BTExPQ19BTkRfU0VUKGluaXRfZGF0YSwgcmVxdWVzdF9maXJtd2FyZV9leGl0LCBiZTMyX3RvX2NwdV9uKTsKKworCS8qIE9wY29kZXMgKi8KKwlCTlgyWF9BTExPQ19BTkRfU0VUKGluaXRfb3BzLCBpbml0X29wc19hbGxvY19lcnIsIGJueDJ4X3ByZXBfb3BzKTsKKworCS8qIE9mZnNldHMgKi8KKwlCTlgyWF9BTExPQ19BTkRfU0VUKGluaXRfb3BzX29mZnNldHMsIGluaXRfb2Zmc2V0c19hbGxvY19lcnIsCisJCQkgICAgYmUxNl90b19jcHVfbik7CisKKwkvKiBTVE9STXMgZmlybXdhcmUgKi8KKwlJTklUX1RTRU1fSU5UX1RBQkxFX0RBVEEoYnApID0gYnAtPmZpcm13YXJlLT5kYXRhICsKKwkJCWJlMzJfdG9fY3B1KGZ3X2hkci0+dHNlbV9pbnRfdGFibGVfZGF0YS5vZmZzZXQpOworCUlOSVRfVFNFTV9QUkFNX0RBVEEoYnApICAgICAgPSBicC0+ZmlybXdhcmUtPmRhdGEgKworCQkJYmUzMl90b19jcHUoZndfaGRyLT50c2VtX3ByYW1fZGF0YS5vZmZzZXQpOworCUlOSVRfVVNFTV9JTlRfVEFCTEVfREFUQShicCkgPSBicC0+ZmlybXdhcmUtPmRhdGEgKworCQkJYmUzMl90b19jcHUoZndfaGRyLT51c2VtX2ludF90YWJsZV9kYXRhLm9mZnNldCk7CisJSU5JVF9VU0VNX1BSQU1fREFUQShicCkgICAgICA9IGJwLT5maXJtd2FyZS0+ZGF0YSArCisJCQliZTMyX3RvX2NwdShmd19oZHItPnVzZW1fcHJhbV9kYXRhLm9mZnNldCk7CisJSU5JVF9YU0VNX0lOVF9UQUJMRV9EQVRBKGJwKSA9IGJwLT5maXJtd2FyZS0+ZGF0YSArCisJCQliZTMyX3RvX2NwdShmd19oZHItPnhzZW1faW50X3RhYmxlX2RhdGEub2Zmc2V0KTsKKwlJTklUX1hTRU1fUFJBTV9EQVRBKGJwKSAgICAgID0gYnAtPmZpcm13YXJlLT5kYXRhICsKKwkJCWJlMzJfdG9fY3B1KGZ3X2hkci0+eHNlbV9wcmFtX2RhdGEub2Zmc2V0KTsKKwlJTklUX0NTRU1fSU5UX1RBQkxFX0RBVEEoYnApID0gYnAtPmZpcm13YXJlLT5kYXRhICsKKwkJCWJlMzJfdG9fY3B1KGZ3X2hkci0+Y3NlbV9pbnRfdGFibGVfZGF0YS5vZmZzZXQpOworCUlOSVRfQ1NFTV9QUkFNX0RBVEEoYnApICAgICAgPSBicC0+ZmlybXdhcmUtPmRhdGEgKworCQkJYmUzMl90b19jcHUoZndfaGRyLT5jc2VtX3ByYW1fZGF0YS5vZmZzZXQpOworCisJcmV0dXJuIDA7CisKK2luaXRfb2Zmc2V0c19hbGxvY19lcnI6CisJa2ZyZWUoYnAtPmluaXRfb3BzKTsKK2luaXRfb3BzX2FsbG9jX2VycjoKKwlrZnJlZShicC0+aW5pdF9kYXRhKTsKK3JlcXVlc3RfZmlybXdhcmVfZXhpdDoKKwlyZWxlYXNlX2Zpcm13YXJlKGJwLT5maXJtd2FyZSk7CisKKwlyZXR1cm4gcmM7Cit9CisKKworc3RhdGljIGludCBfX2RldmluaXQgYm54MnhfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CisJc3RydWN0IGJueDJ4ICpicDsKKwlpbnQgcGNpZV93aWR0aCwgcGNpZV9zcGVlZDsKKwlpbnQgcmM7CisKKwkvKiBkZXYgemVyb2VkIGluIGluaXRfZXRoZXJkZXYgKi8KKwlkZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2YoKmJwKSwgTUFYX0NPTlRFWFQpOworCWlmICghZGV2KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBhbGxvY2F0ZSBuZXQgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWJwLT5tc2dfZW5hYmxlID0gZGVidWc7CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKKworCXJjID0gYm54MnhfaW5pdF9kZXYocGRldiwgZGV2KTsKKwlpZiAocmMgPCAwKSB7CisJCWZyZWVfbmV0ZGV2KGRldik7CisJCXJldHVybiByYzsKKwl9CisKKwlyYyA9IGJueDJ4X2luaXRfYnAoYnApOworCWlmIChyYykKKwkJZ290byBpbml0X29uZV9leGl0OworCisJLyogU2V0IGluaXQgYXJyYXlzICovCisJcmMgPSBibngyeF9pbml0X2Zpcm13YXJlKGJwLCAmcGRldi0+ZGV2KTsKKwlpZiAocmMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRXJyb3IgbG9hZGluZyBmaXJtd2FyZVxuIik7CisJCWdvdG8gaW5pdF9vbmVfZXhpdDsKKwl9CisKKwlyYyA9IHJlZ2lzdGVyX25ldGRldihkZXYpOworCWlmIChyYykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZVxuIik7CisJCWdvdG8gaW5pdF9vbmVfZXhpdDsKKwl9CisKKwlibngyeF9nZXRfcGNpZV93aWR0aF9zcGVlZChicCwgJnBjaWVfd2lkdGgsICZwY2llX3NwZWVkKTsKKwluZXRkZXZfaW5mbyhkZXYsICIlcyAoJWMlZCkgUENJLUUgeCVkICVzIGZvdW5kIGF0IG1lbSAlbHgsIgorCSAgICAgICAiIElSUSAlZCwgIiwgYm9hcmRfaW5mb1tlbnQtPmRyaXZlcl9kYXRhXS5uYW1lLAorCSAgICAgICAoQ0hJUF9SRVYoYnApID4+IDEyKSArICdBJywgKENISVBfTUVUQUwoYnApID4+IDQpLAorCSAgICAgICBwY2llX3dpZHRoLCAocGNpZV9zcGVlZCA9PSAyKSA/ICI1R0h6IChHZW4yKSIgOiAiMi41R0h6IiwKKwkgICAgICAgZGV2LT5iYXNlX2FkZHIsIGJwLT5wZGV2LT5pcnEpOworCXByX2NvbnQoIm5vZGUgYWRkciAlcE1cbiIsIGRldi0+ZGV2X2FkZHIpOworCisJcmV0dXJuIDA7CisKK2luaXRfb25lX2V4aXQ6CisJaWYgKGJwLT5yZWd2aWV3KQorCQlpb3VubWFwKGJwLT5yZWd2aWV3KTsKKworCWlmIChicC0+ZG9vcmJlbGxzKQorCQlpb3VubWFwKGJwLT5kb29yYmVsbHMpOworCisJZnJlZV9uZXRkZXYoZGV2KTsKKworCWlmIChhdG9taWNfcmVhZCgmcGRldi0+ZW5hYmxlX2NudCkgPT0gMSkKKwkJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBibngyeF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGJueDJ4ICpicDsKKworCWlmICghZGV2KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkJBRCBuZXQgZGV2aWNlIGZyb20gYm54MnhfaW5pdF9vbmVcbiIpOworCQlyZXR1cm47CisJfQorCWJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisKKwkvKiBNYWtlIHN1cmUgUkVTRVQgdGFzayBpcyBub3Qgc2NoZWR1bGVkIGJlZm9yZSBjb250aW51aW5nICovCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZicC0+cmVzZXRfdGFzayk7CisKKwlrZnJlZShicC0+aW5pdF9vcHNfb2Zmc2V0cyk7CisJa2ZyZWUoYnAtPmluaXRfb3BzKTsKKwlrZnJlZShicC0+aW5pdF9kYXRhKTsKKwlyZWxlYXNlX2Zpcm13YXJlKGJwLT5maXJtd2FyZSk7CisKKwlpZiAoYnAtPnJlZ3ZpZXcpCisJCWlvdW5tYXAoYnAtPnJlZ3ZpZXcpOworCisJaWYgKGJwLT5kb29yYmVsbHMpCisJCWlvdW5tYXAoYnAtPmRvb3JiZWxscyk7CisKKwlmcmVlX25ldGRldihkZXYpOworCisJaWYgKGF0b21pY19yZWFkKCZwZGV2LT5lbmFibGVfY250KSA9PSAxKQorCQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKK30KKworc3RhdGljIGludCBibngyeF9lZWhfbmljX3VubG9hZChzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBpOworCisJYnAtPnN0YXRlID0gQk5YMlhfU1RBVEVfRVJST1I7CisKKwlicC0+cnhfbW9kZSA9IEJOWDJYX1JYX01PREVfTk9ORTsKKworCWJueDJ4X25ldGlmX3N0b3AoYnAsIDApOworCW5ldGlmX2NhcnJpZXJfb2ZmKGJwLT5kZXYpOworCisJZGVsX3RpbWVyX3N5bmMoJmJwLT50aW1lcik7CisJYnAtPnN0YXRzX3N0YXRlID0gU1RBVFNfU1RBVEVfRElTQUJMRUQ7CisJRFAoQk5YMlhfTVNHX1NUQVRTLCAic3RhdHNfc3RhdGUgLSBESVNBQkxFRFxuIik7CisKKwkvKiBSZWxlYXNlIElSUXMgKi8KKwlibngyeF9mcmVlX2lycShicCwgZmFsc2UpOworCisJaWYgKENISVBfSVNfRTEoYnApKSB7CisJCXN0cnVjdCBtYWNfY29uZmlndXJhdGlvbl9jbWQgKmNvbmZpZyA9CisJCQkJCQlibngyeF9zcChicCwgbWNhc3RfY29uZmlnKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5oZHIubGVuZ3RoOyBpKyspCisJCQlDQU1fSU5WQUxJREFURShjb25maWctPmNvbmZpZ190YWJsZVtpXSk7CisJfQorCisJLyogRnJlZSBTS0JzLCBTR0VzLCBUUEEgcG9vbCBhbmQgZHJpdmVyIGludGVybmFscyAqLworCWJueDJ4X2ZyZWVfc2ticyhicCk7CisJZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJCWJueDJ4X2ZyZWVfcnhfc2dlX3JhbmdlKGJwLCBicC0+ZnAgKyBpLCBOVU1fUlhfU0dFKTsKKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwkJbmV0aWZfbmFwaV9kZWwoJmJueDJ4X2ZwKGJwLCBpLCBuYXBpKSk7CisJYm54MnhfZnJlZV9tZW0oYnApOworCisJYnAtPnN0YXRlID0gQk5YMlhfU1RBVEVfQ0xPU0VEOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2VlaF9yZWNvdmVyKHN0cnVjdCBibngyeCAqYnApCit7CisJdTMyIHZhbDsKKworCW11dGV4X2luaXQoJmJwLT5wb3J0LnBoeV9tdXRleCk7CisKKwlicC0+Y29tbW9uLnNobWVtX2Jhc2UgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX1NIQVJFRF9NRU1fQUREUik7CisJYnAtPmxpbmtfcGFyYW1zLnNobWVtX2Jhc2UgPSBicC0+Y29tbW9uLnNobWVtX2Jhc2U7CisJQk5YMlhfREVWX0lORk8oInNobWVtIG9mZnNldCBpcyAweCV4XG4iLCBicC0+Y29tbW9uLnNobWVtX2Jhc2UpOworCisJaWYgKCFicC0+Y29tbW9uLnNobWVtX2Jhc2UgfHwKKwkgICAgKGJwLT5jb21tb24uc2htZW1fYmFzZSA8IDB4QTAwMDApIHx8CisJICAgIChicC0+Y29tbW9uLnNobWVtX2Jhc2UgPj0gMHhDMDAwMCkpIHsKKwkJQk5YMlhfREVWX0lORk8oIk1DUCBub3QgYWN0aXZlXG4iKTsKKwkJYnAtPmZsYWdzIHw9IE5PX01DUF9GTEFHOworCQlyZXR1cm47CisJfQorCisJdmFsID0gU0hNRU1fUkQoYnAsIHZhbGlkaXR5X21hcFtCUF9QT1JUKGJwKV0pOworCWlmICgodmFsICYgKFNIUl9NRU1fVkFMSURJVFlfREVWX0lORk8gfCBTSFJfTUVNX1ZBTElESVRZX01CKSkKKwkJIT0gKFNIUl9NRU1fVkFMSURJVFlfREVWX0lORk8gfCBTSFJfTUVNX1ZBTElESVRZX01CKSkKKwkJQk5YMlhfRVJSKCJCQUQgTUNQIHZhbGlkaXR5IHNpZ25hdHVyZVxuIik7CisKKwlpZiAoIUJQX05PTUNQKGJwKSkgeworCQlicC0+Zndfc2VxID0gKFNITUVNX1JEKGJwLCBmdW5jX21iW0JQX0ZVTkMoYnApXS5kcnZfbWJfaGVhZGVyKQorCQkJICAgICAgJiBEUlZfTVNHX1NFUV9OVU1CRVJfTUFTSyk7CisJCUJOWDJYX0RFVl9JTkZPKCJmd19zZXEgMHglMDh4XG4iLCBicC0+Zndfc2VxKTsKKwl9Cit9CisKKy8qKgorICogYm54MnhfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWQKKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKKyAqIEBzdGF0ZTogVGhlIGN1cnJlbnQgcGNpIGNvbm5lY3Rpb24gc3RhdGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhIFBDSSBidXMgZXJyb3IgYWZmZWN0aW5nCisgKiB0aGlzIGRldmljZSBoYXMgYmVlbiBkZXRlY3RlZC4KKyAqLworc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgYm54MnhfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCQlwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwlydG5sX2xvY2soKTsKKworCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKKworCWlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpIHsKKwkJcnRubF91bmxvY2soKTsKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisJfQorCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJYm54MnhfZWVoX25pY191bmxvYWQoYnApOworCisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCisJcnRubF91bmxvY2soKTsKKworCS8qIFJlcXVlc3QgYSBzbG90IHJlc2V0ICovCisJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7Cit9CisKKy8qKgorICogYm54MnhfaW9fc2xvdF9yZXNldCAtIGNhbGxlZCBhZnRlciB0aGUgUENJIGJ1cyBoYXMgYmVlbiByZXNldAorICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQorICoKKyAqIFJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLCBhcyBpZiBmcm9tIGEgY29sZC1ib290LgorICovCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBibngyeF9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwlydG5sX2xvY2soKTsKKworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0XG4iKTsKKwkJcnRubF91bmxvY2soKTsKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKQorCQlibngyeF9zZXRfcG93ZXJfc3RhdGUoYnAsIFBDSV9EMCk7CisKKwlydG5sX3VubG9jaygpOworCisJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKK30KKworLyoqCisgKiBibngyeF9pb19yZXN1bWUgLSBjYWxsZWQgd2hlbiB0cmFmZmljIGNhbiBzdGFydCBmbG93aW5nIGFnYWluCisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCisgKgorICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgZXJyb3IgcmVjb3ZlcnkgZHJpdmVyIHRlbGxzIHVzIHRoYXQKKyAqIGl0cyBPSyB0byByZXN1bWUgbm9ybWFsIG9wZXJhdGlvbi4KKyAqLworc3RhdGljIHZvaWQgYm54MnhfaW9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoYnAtPnJlY292ZXJ5X3N0YXRlICE9IEJOWDJYX1JFQ09WRVJZX0RPTkUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJIYW5kbGluZyBwYXJpdHkgZXJyb3IgcmVjb3ZlcnkuIFRyeSBhZ2FpbiBsYXRlclxuIik7CisJCXJldHVybjsKKwl9CisKKwlydG5sX2xvY2soKTsKKworCWJueDJ4X2VlaF9yZWNvdmVyKGJwKTsKKworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCisJCWJueDJ4X25pY19sb2FkKGJwLCBMT0FEX05PUk1BTCk7CisKKwluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CisKKwlydG5sX3VubG9jaygpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBibngyeF9lcnJfaGFuZGxlciA9IHsKKwkuZXJyb3JfZGV0ZWN0ZWQgPSBibngyeF9pb19lcnJvcl9kZXRlY3RlZCwKKwkuc2xvdF9yZXNldCAgICAgPSBibngyeF9pb19zbG90X3Jlc2V0LAorCS5yZXN1bWUgICAgICAgICA9IGJueDJ4X2lvX3Jlc3VtZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBibngyeF9wY2lfZHJpdmVyID0geworCS5uYW1lICAgICAgICA9IERSVl9NT0RVTEVfTkFNRSwKKwkuaWRfdGFibGUgICAgPSBibngyeF9wY2lfdGJsLAorCS5wcm9iZSAgICAgICA9IGJueDJ4X2luaXRfb25lLAorCS5yZW1vdmUgICAgICA9IF9fZGV2ZXhpdF9wKGJueDJ4X3JlbW92ZV9vbmUpLAorCS5zdXNwZW5kICAgICA9IGJueDJ4X3N1c3BlbmQsCisJLnJlc3VtZSAgICAgID0gYm54MnhfcmVzdW1lLAorCS5lcnJfaGFuZGxlciA9ICZibngyeF9lcnJfaGFuZGxlciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGJueDJ4X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcHJfaW5mbygiJXMiLCB2ZXJzaW9uKTsKKworCWJueDJ4X3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImJueDJ4Iik7CisJaWYgKGJueDJ4X3dxID09IE5VTEwpIHsKKwkJcHJfZXJyKCJDYW5ub3QgY3JlYXRlIHdvcmtxdWV1ZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmJueDJ4X3BjaV9kcml2ZXIpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJDYW5ub3QgcmVnaXN0ZXIgZHJpdmVyXG4iKTsKKwkJZGVzdHJveV93b3JrcXVldWUoYm54Mnhfd3EpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYm54MnhfY2xlYW51cCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYm54MnhfcGNpX2RyaXZlcik7CisKKwlkZXN0cm95X3dvcmtxdWV1ZShibngyeF93cSk7Cit9CisKK21vZHVsZV9pbml0KGJueDJ4X2luaXQpOworbW9kdWxlX2V4aXQoYm54MnhfY2xlYW51cCk7CisKKyNpZmRlZiBCQ01fQ05JQworCisvKiBjb3VudCBkZW5vdGVzIHRoZSBudW1iZXIgb2YgbmV3IGNvbXBsZXRpb25zIHdlIGhhdmUgc2VlbiAqLworc3RhdGljIHZvaWQgYm54MnhfY25pY19zcF9wb3N0KHN0cnVjdCBibngyeCAqYnAsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgZXRoX3NwZSAqc3BlOworCisjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgorCWlmICh1bmxpa2VseShicC0+cGFuaWMpKQorCQlyZXR1cm47CisjZW5kaWYKKworCXNwaW5fbG9ja19iaCgmYnAtPnNwcV9sb2NrKTsKKwlicC0+Y25pY19zcHFfcGVuZGluZyAtPSBjb3VudDsKKworCWZvciAoOyBicC0+Y25pY19zcHFfcGVuZGluZyA8IGJwLT5jbmljX2V0aF9kZXYubWF4X2t3cWVfcGVuZGluZzsKKwkgICAgIGJwLT5jbmljX3NwcV9wZW5kaW5nKyspIHsKKworCQlpZiAoIWJwLT5jbmljX2t3cV9wZW5kaW5nKQorCQkJYnJlYWs7CisKKwkJc3BlID0gYm54Mnhfc3BfZ2V0X25leHQoYnApOworCQkqc3BlID0gKmJwLT5jbmljX2t3cV9jb25zOworCisJCWJwLT5jbmljX2t3cV9wZW5kaW5nLS07CisKKwkJRFAoTkVUSUZfTVNHX1RJTUVSLCAicGVuZGluZyBvbiBTUFEgJWQsIG9uIEtXUSAlZCBjb3VudCAlZFxuIiwKKwkJICAgYnAtPmNuaWNfc3BxX3BlbmRpbmcsIGJwLT5jbmljX2t3cV9wZW5kaW5nLCBjb3VudCk7CisKKwkJaWYgKGJwLT5jbmljX2t3cV9jb25zID09IGJwLT5jbmljX2t3cV9sYXN0KQorCQkJYnAtPmNuaWNfa3dxX2NvbnMgPSBicC0+Y25pY19rd3E7CisJCWVsc2UKKwkJCWJwLT5jbmljX2t3cV9jb25zKys7CisJfQorCWJueDJ4X3NwX3Byb2RfdXBkYXRlKGJwKTsKKwlzcGluX3VubG9ja19iaCgmYnAtPnNwcV9sb2NrKTsKK30KKworc3RhdGljIGludCBibngyeF9jbmljX3NwX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGt3cWVfMTYgKmt3cWVzW10sIHUzMiBjb3VudCkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaTsKKworI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKKwlpZiAodW5saWtlbHkoYnAtPnBhbmljKSkKKwkJcmV0dXJuIC1FSU87CisjZW5kaWYKKworCXNwaW5fbG9ja19iaCgmYnAtPnNwcV9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXN0cnVjdCBldGhfc3BlICpzcGUgPSAoc3RydWN0IGV0aF9zcGUgKilrd3Flc1tpXTsKKworCQlpZiAoYnAtPmNuaWNfa3dxX3BlbmRpbmcgPT0gTUFYX1NQX0RFU0NfQ05UKQorCQkJYnJlYWs7CisKKwkJKmJwLT5jbmljX2t3cV9wcm9kID0gKnNwZTsKKworCQlicC0+Y25pY19rd3FfcGVuZGluZysrOworCisJCURQKE5FVElGX01TR19USU1FUiwgIkw1IFNQUUUgJXggJXggJXg6JXggcG9zICVkXG4iLAorCQkgICBzcGUtPmhkci5jb25uX2FuZF9jbWRfZGF0YSwgc3BlLT5oZHIudHlwZSwKKwkJICAgc3BlLT5kYXRhLm1hY19jb25maWdfYWRkci5oaSwKKwkJICAgc3BlLT5kYXRhLm1hY19jb25maWdfYWRkci5sbywKKwkJICAgYnAtPmNuaWNfa3dxX3BlbmRpbmcpOworCisJCWlmIChicC0+Y25pY19rd3FfcHJvZCA9PSBicC0+Y25pY19rd3FfbGFzdCkKKwkJCWJwLT5jbmljX2t3cV9wcm9kID0gYnAtPmNuaWNfa3dxOworCQllbHNlCisJCQlicC0+Y25pY19rd3FfcHJvZCsrOworCX0KKworCXNwaW5fdW5sb2NrX2JoKCZicC0+c3BxX2xvY2spOworCisJaWYgKGJwLT5jbmljX3NwcV9wZW5kaW5nIDwgYnAtPmNuaWNfZXRoX2Rldi5tYXhfa3dxZV9wZW5kaW5nKQorCQlibngyeF9jbmljX3NwX3Bvc3QoYnAsIDApOworCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgYm54MnhfY25pY19jdGxfc2VuZChzdHJ1Y3QgYm54MnggKmJwLCBzdHJ1Y3QgY25pY19jdGxfaW5mbyAqY3RsKQoreworCXN0cnVjdCBjbmljX29wcyAqY19vcHM7CisJaW50IHJjID0gMDsKKworCW11dGV4X2xvY2soJmJwLT5jbmljX211dGV4KTsKKwljX29wcyA9IGJwLT5jbmljX29wczsKKwlpZiAoY19vcHMpCisJCXJjID0gY19vcHMtPmNuaWNfY3RsKGJwLT5jbmljX2RhdGEsIGN0bCk7CisJbXV0ZXhfdW5sb2NrKCZicC0+Y25pY19tdXRleCk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgYm54MnhfY25pY19jdGxfc2VuZF9iaChzdHJ1Y3QgYm54MnggKmJwLCBzdHJ1Y3QgY25pY19jdGxfaW5mbyAqY3RsKQoreworCXN0cnVjdCBjbmljX29wcyAqY19vcHM7CisJaW50IHJjID0gMDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwljX29wcyA9IHJjdV9kZXJlZmVyZW5jZShicC0+Y25pY19vcHMpOworCWlmIChjX29wcykKKwkJcmMgPSBjX29wcy0+Y25pY19jdGwoYnAtPmNuaWNfZGF0YSwgY3RsKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIGZvciBjb21tYW5kcyB0aGF0IGhhdmUgbm8gZGF0YQorICovCitpbnQgYm54MnhfY25pY19ub3RpZnkoc3RydWN0IGJueDJ4ICpicCwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgY25pY19jdGxfaW5mbyBjdGwgPSB7MH07CisKKwljdGwuY21kID0gY21kOworCisJcmV0dXJuIGJueDJ4X2NuaWNfY3RsX3NlbmQoYnAsICZjdGwpOworfQorCitzdGF0aWMgdm9pZCBibngyeF9jbmljX2NmY19jb21wKHN0cnVjdCBibngyeCAqYnAsIGludCBjaWQpCit7CisJc3RydWN0IGNuaWNfY3RsX2luZm8gY3RsOworCisJLyogZmlyc3Qgd2UgdGVsbCBDTklDIGFuZCBvbmx5IHRoZW4gd2UgY291bnQgdGhpcyBhcyBhIGNvbXBsZXRpb24gKi8KKwljdGwuY21kID0gQ05JQ19DVExfQ09NUExFVElPTl9DTUQ7CisJY3RsLmRhdGEuY29tcC5jaWQgPSBjaWQ7CisKKwlibngyeF9jbmljX2N0bF9zZW5kX2JoKGJwLCAmY3RsKTsKKwlibngyeF9jbmljX3NwX3Bvc3QoYnAsIDEpOworfQorCitzdGF0aWMgaW50IGJueDJ4X2Rydl9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGRydl9jdGxfaW5mbyAqY3RsKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCByYyA9IDA7CisKKwlzd2l0Y2ggKGN0bC0+Y21kKSB7CisJY2FzZSBEUlZfQ1RMX0NUWFRCTF9XUl9DTUQ6IHsKKwkJdTMyIGluZGV4ID0gY3RsLT5kYXRhLmlvLm9mZnNldDsKKwkJZG1hX2FkZHJfdCBhZGRyID0gY3RsLT5kYXRhLmlvLmRtYV9hZGRyOworCisJCWJueDJ4X2lsdF93cihicCwgaW5kZXgsIGFkZHIpOworCQlicmVhazsKKwl9CisKKwljYXNlIERSVl9DVExfQ09NUExFVElPTl9DTUQ6IHsKKwkJaW50IGNvdW50ID0gY3RsLT5kYXRhLmNvbXAuY29tcF9jb3VudDsKKworCQlibngyeF9jbmljX3NwX3Bvc3QoYnAsIGNvdW50KTsKKwkJYnJlYWs7CisJfQorCisJLyogcnRubF9sb2NrIGlzIGhlbGQuICAqLworCWNhc2UgRFJWX0NUTF9TVEFSVF9MMl9DTUQ6IHsKKwkJdTMyIGNsaSA9IGN0bC0+ZGF0YS5yaW5nLmNsaWVudF9pZDsKKworCQlicC0+cnhfbW9kZV9jbF9tYXNrIHw9ICgxIDw8IGNsaSk7CisJCWJueDJ4X3NldF9zdG9ybV9yeF9tb2RlKGJwKTsKKwkJYnJlYWs7CisJfQorCisJLyogcnRubF9sb2NrIGlzIGhlbGQuICAqLworCWNhc2UgRFJWX0NUTF9TVE9QX0wyX0NNRDogeworCQl1MzIgY2xpID0gY3RsLT5kYXRhLnJpbmcuY2xpZW50X2lkOworCisJCWJwLT5yeF9tb2RlX2NsX21hc2sgJj0gfigxIDw8IGNsaSk7CisJCWJueDJ4X3NldF9zdG9ybV9yeF9tb2RlKGJwKTsKKwkJYnJlYWs7CisJfQorCisJZGVmYXVsdDoKKwkJQk5YMlhfRVJSKCJ1bmtub3duIGNvbW1hbmQgJXhcbiIsIGN0bC0+Y21kKTsKKwkJcmMgPSAtRUlOVkFMOworCX0KKworCXJldHVybiByYzsKK30KKwordm9pZCBibngyeF9zZXR1cF9jbmljX2lycV9pbmZvKHN0cnVjdCBibngyeCAqYnApCit7CisJc3RydWN0IGNuaWNfZXRoX2RldiAqY3AgPSAmYnAtPmNuaWNfZXRoX2RldjsKKworCWlmIChicC0+ZmxhZ3MgJiBVU0lOR19NU0lYX0ZMQUcpIHsKKwkJY3AtPmRydl9zdGF0ZSB8PSBDTklDX0RSVl9TVEFURV9VU0lOR19NU0lYOworCQljcC0+aXJxX2FyclswXS5pcnFfZmxhZ3MgfD0gQ05JQ19JUlFfRkxfTVNJWDsKKwkJY3AtPmlycV9hcnJbMF0udmVjdG9yID0gYnAtPm1zaXhfdGFibGVbMV0udmVjdG9yOworCX0gZWxzZSB7CisJCWNwLT5kcnZfc3RhdGUgJj0gfkNOSUNfRFJWX1NUQVRFX1VTSU5HX01TSVg7CisJCWNwLT5pcnFfYXJyWzBdLmlycV9mbGFncyAmPSB+Q05JQ19JUlFfRkxfTVNJWDsKKwl9CisJY3AtPmlycV9hcnJbMF0uc3RhdHVzX2JsayA9IGJwLT5jbmljX3NiOworCWNwLT5pcnFfYXJyWzBdLnN0YXR1c19ibGtfbnVtID0gQ05JQ19TQl9JRChicCk7CisJY3AtPmlycV9hcnJbMV0uc3RhdHVzX2JsayA9IGJwLT5kZWZfc3RhdHVzX2JsazsKKwljcC0+aXJxX2FyclsxXS5zdGF0dXNfYmxrX251bSA9IERFRl9TQl9JRDsKKworCWNwLT5udW1faXJxID0gMjsKK30KKworc3RhdGljIGludCBibngyeF9yZWdpc3Rlcl9jbmljKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjbmljX29wcyAqb3BzLAorCQkJICAgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGNuaWNfZXRoX2RldiAqY3AgPSAmYnAtPmNuaWNfZXRoX2RldjsKKworCWlmIChvcHMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYXRvbWljX3JlYWQoJmJwLT5pbnRyX3NlbSkgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWJwLT5jbmljX2t3cSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJwLT5jbmljX2t3cSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlicC0+Y25pY19rd3FfY29ucyA9IGJwLT5jbmljX2t3cTsKKwlicC0+Y25pY19rd3FfcHJvZCA9IGJwLT5jbmljX2t3cTsKKwlicC0+Y25pY19rd3FfbGFzdCA9IGJwLT5jbmljX2t3cSArIE1BWF9TUF9ERVNDX0NOVDsKKworCWJwLT5jbmljX3NwcV9wZW5kaW5nID0gMDsKKwlicC0+Y25pY19rd3FfcGVuZGluZyA9IDA7CisKKwlicC0+Y25pY19kYXRhID0gZGF0YTsKKworCWNwLT5udW1faXJxID0gMDsKKwljcC0+ZHJ2X3N0YXRlID0gQ05JQ19EUlZfU1RBVEVfUkVHRDsKKworCWJueDJ4X2luaXRfc2IoYnAsIGJwLT5jbmljX3NiLCBicC0+Y25pY19zYl9tYXBwaW5nLCBDTklDX1NCX0lEKGJwKSk7CisKKwlibngyeF9zZXR1cF9jbmljX2lycV9pbmZvKGJwKTsKKwlibngyeF9zZXRfaXNjc2lfZXRoX21hY19hZGRyKGJwLCAxKTsKKwlicC0+Y25pY19mbGFncyB8PSBCTlgyWF9DTklDX0ZMQUdfTUFDX1NFVDsKKwlyY3VfYXNzaWduX3BvaW50ZXIoYnAtPmNuaWNfb3BzLCBvcHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYm54MnhfdW5yZWdpc3Rlcl9jbmljKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGNuaWNfZXRoX2RldiAqY3AgPSAmYnAtPmNuaWNfZXRoX2RldjsKKworCW11dGV4X2xvY2soJmJwLT5jbmljX211dGV4KTsKKwlpZiAoYnAtPmNuaWNfZmxhZ3MgJiBCTlgyWF9DTklDX0ZMQUdfTUFDX1NFVCkgeworCQlicC0+Y25pY19mbGFncyAmPSB+Qk5YMlhfQ05JQ19GTEFHX01BQ19TRVQ7CisJCWJueDJ4X3NldF9pc2NzaV9ldGhfbWFjX2FkZHIoYnAsIDApOworCX0KKwljcC0+ZHJ2X3N0YXRlID0gMDsKKwlyY3VfYXNzaWduX3BvaW50ZXIoYnAtPmNuaWNfb3BzLCBOVUxMKTsKKwltdXRleF91bmxvY2soJmJwLT5jbmljX211dGV4KTsKKwlzeW5jaHJvbml6ZV9yY3UoKTsKKwlrZnJlZShicC0+Y25pY19rd3EpOworCWJwLT5jbmljX2t3cSA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGNuaWNfZXRoX2RldiAqYm54MnhfY25pY19wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBjbmljX2V0aF9kZXYgKmNwID0gJmJwLT5jbmljX2V0aF9kZXY7CisKKwljcC0+ZHJ2X293bmVyID0gVEhJU19NT0RVTEU7CisJY3AtPmNoaXBfaWQgPSBDSElQX0lEKGJwKTsKKwljcC0+cGRldiA9IGJwLT5wZGV2OworCWNwLT5pb19iYXNlID0gYnAtPnJlZ3ZpZXc7CisJY3AtPmlvX2Jhc2UyID0gYnAtPmRvb3JiZWxsczsKKwljcC0+bWF4X2t3cWVfcGVuZGluZyA9IDg7CisJY3AtPmN0eF9ibGtfc2l6ZSA9IENOSUNfQ1RYX1BFUl9JTFQgKiBzaXplb2YodW5pb24gY2R1X2NvbnRleHQpOworCWNwLT5jdHhfdGJsX29mZnNldCA9IEZVTkNfSUxUX0JBU0UoQlBfRlVOQyhicCkpICsgMTsKKwljcC0+Y3R4X3RibF9sZW4gPSBDTklDX0lMVF9MSU5FUzsKKwljcC0+c3RhcnRpbmdfY2lkID0gQkNNX0NOSUNfQ0lEX1NUQVJUOworCWNwLT5kcnZfc3VibWl0X2t3cWVzXzE2ID0gYm54MnhfY25pY19zcF9xdWV1ZTsKKwljcC0+ZHJ2X2N0bCA9IGJueDJ4X2Rydl9jdGw7CisJY3AtPmRydl9yZWdpc3Rlcl9jbmljID0gYm54MnhfcmVnaXN0ZXJfY25pYzsKKwljcC0+ZHJ2X3VucmVnaXN0ZXJfY25pYyA9IGJueDJ4X3VucmVnaXN0ZXJfY25pYzsKKworCXJldHVybiBjcDsKK30KK0VYUE9SVF9TWU1CT0woYm54MnhfY25pY19wcm9iZSk7CisKKyNlbmRpZiAvKiBCQ01fQ05JQyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9yZWcuaCBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X3JlZy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9ibngyeF9yZWcuaApyZW5hbWUgdG8gZHJpdmVycy9uZXQvYm54MngvYm54MnhfcmVnLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X3N0YXRzLmMgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9zdGF0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NDcyNDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9zdGF0cy5jCkBAIC0wLDAgKzEsMTQxMSBAQAorLyogYm54Mnhfc3RhdHMuYzogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBNYWludGFpbmVkIGJ5OiBFaWxvbiBHcmVlbnN0ZWluIDxlaWxvbmdAYnJvYWRjb20uY29tPgorICogV3JpdHRlbiBieTogRWxpZXplciBUYW1pcgorICogQmFzZWQgb24gY29kZSBmcm9tIE1pY2hhZWwgQ2hhbidzIGJueDIgZHJpdmVyCisgKiBVRFAgQ1NVTSBlcnJhdGEgd29ya2Fyb3VuZCBieSBBcmlrIEdlbmRlbG1hbgorICogU2xvd3BhdGggYW5kIGZhc3RwYXRoIHJld29yayBieSBWbGFkaXNsYXYgWm9sb3Rhcm92CisgKiBTdGF0aXN0aWNzIGFuZCBMaW5rIG1hbmFnZW1lbnQgYnkgWWl0Y2hhayBHZXJ0bmVyCisgKgorICovCisgI2luY2x1ZGUgImJueDJ4X2Ntbi5oIgorICNpbmNsdWRlICJibngyeF9zdGF0cy5oIgorCisvKiBTdGF0aXN0aWNzICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIE1hY3JvcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogc3VtW2hpOmxvXSArPSBhZGRbaGk6bG9dICovCisjZGVmaW5lIEFERF82NChzX2hpLCBhX2hpLCBzX2xvLCBhX2xvKSBcCisJZG8geyBcCisJCXNfbG8gKz0gYV9sbzsgXAorCQlzX2hpICs9IGFfaGkgKyAoKHNfbG8gPCBhX2xvKSA/IDEgOiAwKTsgXAorCX0gd2hpbGUgKDApCisKKy8qIGRpZmZlcmVuY2UgPSBtaW51ZW5kIC0gc3VidHJhaGVuZCAqLworI2RlZmluZSBESUZGXzY0KGRfaGksIG1faGksIHNfaGksIGRfbG8sIG1fbG8sIHNfbG8pIFwKKwlkbyB7IFwKKwkJaWYgKG1fbG8gPCBzX2xvKSB7IFwKKwkJCS8qIHVuZGVyZmxvdyAqLyBcCisJCQlkX2hpID0gbV9oaSAtIHNfaGk7IFwKKwkJCWlmIChkX2hpID4gMCkgeyBcCisJCQkJLyogd2UgY2FuICdsb2FuJyAxICovIFwKKwkJCQlkX2hpLS07IFwKKwkJCQlkX2xvID0gbV9sbyArIChVSU5UX01BWCAtIHNfbG8pICsgMTsgXAorCQkJfSBlbHNlIHsgXAorCQkJCS8qIG1faGkgPD0gc19oaSAqLyBcCisJCQkJZF9oaSA9IDA7IFwKKwkJCQlkX2xvID0gMDsgXAorCQkJfSBcCisJCX0gZWxzZSB7IFwKKwkJCS8qIG1fbG8gPj0gc19sbyAqLyBcCisJCQlpZiAobV9oaSA8IHNfaGkpIHsgXAorCQkJCWRfaGkgPSAwOyBcCisJCQkJZF9sbyA9IDA7IFwKKwkJCX0gZWxzZSB7IFwKKwkJCQkvKiBtX2hpID49IHNfaGkgKi8gXAorCQkJCWRfaGkgPSBtX2hpIC0gc19oaTsgXAorCQkJCWRfbG8gPSBtX2xvIC0gc19sbzsgXAorCQkJfSBcCisJCX0gXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgVVBEQVRFX1NUQVQ2NChzLCB0KSBcCisJZG8geyBcCisJCURJRkZfNjQoZGlmZi5oaSwgbmV3LT5zIyNfaGksIHBzdGF0cy0+bWFjX3N0eFswXS50IyNfaGksIFwKKwkJCWRpZmYubG8sIG5ldy0+cyMjX2xvLCBwc3RhdHMtPm1hY19zdHhbMF0udCMjX2xvKTsgXAorCQlwc3RhdHMtPm1hY19zdHhbMF0udCMjX2hpID0gbmV3LT5zIyNfaGk7IFwKKwkJcHN0YXRzLT5tYWNfc3R4WzBdLnQjI19sbyA9IG5ldy0+cyMjX2xvOyBcCisJCUFERF82NChwc3RhdHMtPm1hY19zdHhbMV0udCMjX2hpLCBkaWZmLmhpLCBcCisJCSAgICAgICBwc3RhdHMtPm1hY19zdHhbMV0udCMjX2xvLCBkaWZmLmxvKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgVVBEQVRFX1NUQVQ2NF9OSUcocywgdCkgXAorCWRvIHsgXAorCQlESUZGXzY0KGRpZmYuaGksIG5ldy0+cyMjX2hpLCBvbGQtPnMjI19oaSwgXAorCQkJZGlmZi5sbywgbmV3LT5zIyNfbG8sIG9sZC0+cyMjX2xvKTsgXAorCQlBRERfNjQoZXN0YXRzLT50IyNfaGksIGRpZmYuaGksIFwKKwkJICAgICAgIGVzdGF0cy0+dCMjX2xvLCBkaWZmLmxvKTsgXAorCX0gd2hpbGUgKDApCisKKy8qIHN1bVtoaTpsb10gKz0gYWRkICovCisjZGVmaW5lIEFERF9FWFRFTkRfNjQoc19oaSwgc19sbywgYSkgXAorCWRvIHsgXAorCQlzX2xvICs9IGE7IFwKKwkJc19oaSArPSAoc19sbyA8IGEpID8gMSA6IDA7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFVQREFURV9FWFRFTkRfU1RBVChzKSBcCisJZG8geyBcCisJCUFERF9FWFRFTkRfNjQocHN0YXRzLT5tYWNfc3R4WzFdLnMjI19oaSwgXAorCQkJICAgICAgcHN0YXRzLT5tYWNfc3R4WzFdLnMjI19sbywgXAorCQkJICAgICAgbmV3LT5zKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgVVBEQVRFX0VYVEVORF9UU1RBVChzLCB0KSBcCisJZG8geyBcCisJCWRpZmYgPSBsZTMyX3RvX2NwdSh0Y2xpZW50LT5zKSAtIGxlMzJfdG9fY3B1KG9sZF90Y2xpZW50LT5zKTsgXAorCQlvbGRfdGNsaWVudC0+cyA9IHRjbGllbnQtPnM7IFwKKwkJQUREX0VYVEVORF82NChxc3RhdHMtPnQjI19oaSwgcXN0YXRzLT50IyNfbG8sIGRpZmYpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBVUERBVEVfRVhURU5EX1VTVEFUKHMsIHQpIFwKKwlkbyB7IFwKKwkJZGlmZiA9IGxlMzJfdG9fY3B1KHVjbGllbnQtPnMpIC0gbGUzMl90b19jcHUob2xkX3VjbGllbnQtPnMpOyBcCisJCW9sZF91Y2xpZW50LT5zID0gdWNsaWVudC0+czsgXAorCQlBRERfRVhURU5EXzY0KHFzdGF0cy0+dCMjX2hpLCBxc3RhdHMtPnQjI19sbywgZGlmZik7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFVQREFURV9FWFRFTkRfWFNUQVQocywgdCkgXAorCWRvIHsgXAorCQlkaWZmID0gbGUzMl90b19jcHUoeGNsaWVudC0+cykgLSBsZTMyX3RvX2NwdShvbGRfeGNsaWVudC0+cyk7IFwKKwkJb2xkX3hjbGllbnQtPnMgPSB4Y2xpZW50LT5zOyBcCisJCUFERF9FWFRFTkRfNjQocXN0YXRzLT50IyNfaGksIHFzdGF0cy0+dCMjX2xvLCBkaWZmKTsgXAorCX0gd2hpbGUgKDApCisKKy8qIG1pbnVlbmQgLT0gc3VidHJhaGVuZCAqLworI2RlZmluZSBTVUJfNjQobV9oaSwgc19oaSwgbV9sbywgc19sbykgXAorCWRvIHsgXAorCQlESUZGXzY0KG1faGksIG1faGksIHNfaGksIG1fbG8sIG1fbG8sIHNfbG8pOyBcCisJfSB3aGlsZSAoMCkKKworLyogbWludWVuZFtoaTpsb10gLT0gc3VidHJhaGVuZCAqLworI2RlZmluZSBTVUJfRVhURU5EXzY0KG1faGksIG1fbG8sIHMpIFwKKwlkbyB7IFwKKwkJU1VCXzY0KG1faGksIDAsIG1fbG8sIHMpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBTVUJfRVhURU5EX1VTVEFUKHMsIHQpIFwKKwlkbyB7IFwKKwkJZGlmZiA9IGxlMzJfdG9fY3B1KHVjbGllbnQtPnMpIC0gbGUzMl90b19jcHUob2xkX3VjbGllbnQtPnMpOyBcCisJCVNVQl9FWFRFTkRfNjQocXN0YXRzLT50IyNfaGksIHFzdGF0cy0+dCMjX2xvLCBkaWZmKTsgXAorCX0gd2hpbGUgKDApCisKKy8qCisgKiBHZW5lcmFsIHNlcnZpY2UgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIGlubGluZSBsb25nIGJueDJ4X2hpbG8odTMyICpoaXJlZikKK3sKKwl1MzIgbG8gPSAqKGhpcmVmICsgMSk7CisjaWYgKEJJVFNfUEVSX0xPTkcgPT0gNjQpCisJdTMyIGhpID0gKmhpcmVmOworCisJcmV0dXJuIEhJTE9fVTY0KGhpLCBsbyk7CisjZWxzZQorCXJldHVybiBsbzsKKyNlbmRpZgorfQorCisvKgorICogSW5pdCBzZXJ2aWNlIGZ1bmN0aW9ucworICovCisKKworc3RhdGljIHZvaWQgYm54Mnhfc3Rvcm1fc3RhdHNfcG9zdChzdHJ1Y3QgYm54MnggKmJwKQoreworCWlmICghYnAtPnN0YXRzX3BlbmRpbmcpIHsKKwkJc3RydWN0IGV0aF9xdWVyeV9yYW1yb2RfZGF0YSByYW1yb2RfZGF0YSA9IHswfTsKKwkJaW50IGksIHJjOworCisJCXNwaW5fbG9ja19iaCgmYnAtPnN0YXRzX2xvY2spOworCisJCXJhbXJvZF9kYXRhLmRydl9jb3VudGVyID0gYnAtPnN0YXRzX2NvdW50ZXIrKzsKKwkJcmFtcm9kX2RhdGEuY29sbGVjdF9wb3J0ID0gYnAtPnBvcnQucG1mID8gMSA6IDA7CisJCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCQkJcmFtcm9kX2RhdGEuY3RyX2lkX3ZlY3RvciB8PSAoMSA8PCBicC0+ZnBbaV0uY2xfaWQpOworCisJCXJjID0gYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfU1RBVF9RVUVSWSwgMCwKKwkJCQkgICAoKHUzMiAqKSZyYW1yb2RfZGF0YSlbMV0sCisJCQkJICAgKCh1MzIgKikmcmFtcm9kX2RhdGEpWzBdLCAwKTsKKwkJaWYgKHJjID09IDApIHsKKwkJCS8qIHN0YXRzIHJhbXJvZCBoYXMgaXQncyBvd24gc2xvdCBvbiB0aGUgc3BxICovCisJCQlicC0+c3BxX2xlZnQrKzsKKwkJCWJwLT5zdGF0c19wZW5kaW5nID0gMTsKKwkJfQorCisJCXNwaW5fdW5sb2NrX2JoKCZicC0+c3RhdHNfbG9jayk7CisJfQorfQorCitzdGF0aWMgdm9pZCBibngyeF9od19zdGF0c19wb3N0KHN0cnVjdCBibngyeCAqYnApCit7CisJc3RydWN0IGRtYWVfY29tbWFuZCAqZG1hZSA9ICZicC0+c3RhdHNfZG1hZTsKKwl1MzIgKnN0YXRzX2NvbXAgPSBibngyeF9zcChicCwgc3RhdHNfY29tcCk7CisKKwkqc3RhdHNfY29tcCA9IERNQUVfQ09NUF9WQUw7CisJaWYgKENISVBfUkVWX0lTX1NMT1coYnApKQorCQlyZXR1cm47CisKKwkvKiBsb2FkZXIgKi8KKwlpZiAoYnAtPmV4ZWN1dGVyX2lkeCkgeworCQlpbnQgbG9hZGVyX2lkeCA9IFBNRl9ETUFFX0MoYnApOworCisJCW1lbXNldChkbWFlLCAwLCBzaXplb2Yoc3RydWN0IGRtYWVfY29tbWFuZCkpOworCisJCWRtYWUtPm9wY29kZSA9IChETUFFX0NNRF9TUkNfUENJIHwgRE1BRV9DTURfRFNUX0dSQyB8CisJCQkJRE1BRV9DTURfQ19EU1RfR1JDIHwgRE1BRV9DTURfQ19FTkFCTEUgfAorCQkJCURNQUVfQ01EX0RTVF9SRVNFVCB8CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCQkJRE1BRV9DTURfRU5ESUFOSVRZX0JfRFdfU1dBUCB8CisjZWxzZQorCQkJCURNQUVfQ01EX0VORElBTklUWV9EV19TV0FQIHwKKyNlbmRpZgorCQkJCShCUF9QT1JUKGJwKSA/IERNQUVfQ01EX1BPUlRfMSA6CisJCQkJCSAgICAgICBETUFFX0NNRF9QT1JUXzApIHwKKwkJCQkoQlBfRTFIVk4oYnApIDw8IERNQUVfQ01EX0UxSFZOX1NISUZUKSk7CisJCWRtYWUtPnNyY19hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIGRtYWVbMF0pKTsKKwkJZG1hZS0+c3JjX2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgZG1hZVswXSkpOworCQlkbWFlLT5kc3RfYWRkcl9sbyA9IChETUFFX1JFR19DTURfTUVNICsKKwkJCQkgICAgIHNpemVvZihzdHJ1Y3QgZG1hZV9jb21tYW5kKSAqCisJCQkJICAgICAobG9hZGVyX2lkeCArIDEpKSA+PiAyOworCQlkbWFlLT5kc3RfYWRkcl9oaSA9IDA7CisJCWRtYWUtPmxlbiA9IHNpemVvZihzdHJ1Y3QgZG1hZV9jb21tYW5kKSA+PiAyOworCQlpZiAoQ0hJUF9JU19FMShicCkpCisJCQlkbWFlLT5sZW4tLTsKKwkJZG1hZS0+Y29tcF9hZGRyX2xvID0gZG1hZV9yZWdfZ29fY1tsb2FkZXJfaWR4ICsgMV0gPj4gMjsKKwkJZG1hZS0+Y29tcF9hZGRyX2hpID0gMDsKKwkJZG1hZS0+Y29tcF92YWwgPSAxOworCisJCSpzdGF0c19jb21wID0gMDsKKwkJYm54MnhfcG9zdF9kbWFlKGJwLCBkbWFlLCBsb2FkZXJfaWR4KTsKKworCX0gZWxzZSBpZiAoYnAtPmZ1bmNfc3R4KSB7CisJCSpzdGF0c19jb21wID0gMDsKKwkJYm54MnhfcG9zdF9kbWFlKGJwLCBkbWFlLCBJTklUX0RNQUVfQyhicCkpOworCX0KK30KKworc3RhdGljIGludCBibngyeF9zdGF0c19jb21wKHN0cnVjdCBibngyeCAqYnApCit7CisJdTMyICpzdGF0c19jb21wID0gYm54Mnhfc3AoYnAsIHN0YXRzX2NvbXApOworCWludCBjbnQgPSAxMDsKKworCW1pZ2h0X3NsZWVwKCk7CisJd2hpbGUgKCpzdGF0c19jb21wICE9IERNQUVfQ09NUF9WQUwpIHsKKwkJaWYgKCFjbnQpIHsKKwkJCUJOWDJYX0VSUigidGltZW91dCB3YWl0aW5nIGZvciBzdGF0cyBmaW5pc2hlZFxuIik7CisJCQlicmVhazsKKwkJfQorCQljbnQtLTsKKwkJbXNsZWVwKDEpOworCX0KKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFN0YXRpc3RpY3Mgc2VydmljZSBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZCBibngyeF9zdGF0c19wbWZfdXBkYXRlKHN0cnVjdCBibngyeCAqYnApCit7CisJc3RydWN0IGRtYWVfY29tbWFuZCAqZG1hZTsKKwl1MzIgb3Bjb2RlOworCWludCBsb2FkZXJfaWR4ID0gUE1GX0RNQUVfQyhicCk7CisJdTMyICpzdGF0c19jb21wID0gYm54Mnhfc3AoYnAsIHN0YXRzX2NvbXApOworCisJLyogc2FuaXR5ICovCisJaWYgKCFJU19FMUhNRihicCkgfHwgIWJwLT5wb3J0LnBtZiB8fCAhYnAtPnBvcnQucG9ydF9zdHgpIHsKKwkJQk5YMlhfRVJSKCJCVUchXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWJwLT5leGVjdXRlcl9pZHggPSAwOworCisJb3Bjb2RlID0gKERNQUVfQ01EX1NSQ19HUkMgfCBETUFFX0NNRF9EU1RfUENJIHwKKwkJICBETUFFX0NNRF9DX0VOQUJMRSB8CisJCSAgRE1BRV9DTURfU1JDX1JFU0VUIHwgRE1BRV9DTURfRFNUX1JFU0VUIHwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJICBETUFFX0NNRF9FTkRJQU5JVFlfQl9EV19TV0FQIHwKKyNlbHNlCisJCSAgRE1BRV9DTURfRU5ESUFOSVRZX0RXX1NXQVAgfAorI2VuZGlmCisJCSAgKEJQX1BPUlQoYnApID8gRE1BRV9DTURfUE9SVF8xIDogRE1BRV9DTURfUE9SVF8wKSB8CisJCSAgKEJQX0UxSFZOKGJwKSA8PCBETUFFX0NNRF9FMUhWTl9TSElGVCkpOworCisJZG1hZSA9IGJueDJ4X3NwKGJwLCBkbWFlW2JwLT5leGVjdXRlcl9pZHgrK10pOworCWRtYWUtPm9wY29kZSA9IChvcGNvZGUgfCBETUFFX0NNRF9DX0RTVF9HUkMpOworCWRtYWUtPnNyY19hZGRyX2xvID0gYnAtPnBvcnQucG9ydF9zdHggPj4gMjsKKwlkbWFlLT5zcmNfYWRkcl9oaSA9IDA7CisJZG1hZS0+ZHN0X2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgcG9ydF9zdGF0cykpOworCWRtYWUtPmRzdF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIHBvcnRfc3RhdHMpKTsKKwlkbWFlLT5sZW4gPSBETUFFX0xFTjMyX1JEX01BWDsKKwlkbWFlLT5jb21wX2FkZHJfbG8gPSBkbWFlX3JlZ19nb19jW2xvYWRlcl9pZHhdID4+IDI7CisJZG1hZS0+Y29tcF9hZGRyX2hpID0gMDsKKwlkbWFlLT5jb21wX3ZhbCA9IDE7CisKKwlkbWFlID0gYm54Mnhfc3AoYnAsIGRtYWVbYnAtPmV4ZWN1dGVyX2lkeCsrXSk7CisJZG1hZS0+b3Bjb2RlID0gKG9wY29kZSB8IERNQUVfQ01EX0NfRFNUX1BDSSk7CisJZG1hZS0+c3JjX2FkZHJfbG8gPSAoYnAtPnBvcnQucG9ydF9zdHggPj4gMikgKyBETUFFX0xFTjMyX1JEX01BWDsKKwlkbWFlLT5zcmNfYWRkcl9oaSA9IDA7CisJZG1hZS0+ZHN0X2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgcG9ydF9zdGF0cykgKworCQkJCSAgIERNQUVfTEVOMzJfUkRfTUFYICogNCk7CisJZG1hZS0+ZHN0X2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgcG9ydF9zdGF0cykgKworCQkJCSAgIERNQUVfTEVOMzJfUkRfTUFYICogNCk7CisJZG1hZS0+bGVuID0gKHNpemVvZihzdHJ1Y3QgaG9zdF9wb3J0X3N0YXRzKSA+PiAyKSAtIERNQUVfTEVOMzJfUkRfTUFYOworCWRtYWUtPmNvbXBfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBzdGF0c19jb21wKSk7CisJZG1hZS0+Y29tcF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIHN0YXRzX2NvbXApKTsKKwlkbWFlLT5jb21wX3ZhbCA9IERNQUVfQ09NUF9WQUw7CisKKwkqc3RhdHNfY29tcCA9IDA7CisJYm54MnhfaHdfc3RhdHNfcG9zdChicCk7CisJYm54Mnhfc3RhdHNfY29tcChicCk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3BvcnRfc3RhdHNfaW5pdChzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCBkbWFlX2NvbW1hbmQgKmRtYWU7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwlpbnQgdm4gPSBCUF9FMUhWTihicCk7CisJdTMyIG9wY29kZTsKKwlpbnQgbG9hZGVyX2lkeCA9IFBNRl9ETUFFX0MoYnApOworCXUzMiBtYWNfYWRkcjsKKwl1MzIgKnN0YXRzX2NvbXAgPSBibngyeF9zcChicCwgc3RhdHNfY29tcCk7CisKKwkvKiBzYW5pdHkgKi8KKwlpZiAoIWJwLT5saW5rX3ZhcnMubGlua191cCB8fCAhYnAtPnBvcnQucG1mKSB7CisJCUJOWDJYX0VSUigiQlVHIVxuIik7CisJCXJldHVybjsKKwl9CisKKwlicC0+ZXhlY3V0ZXJfaWR4ID0gMDsKKworCS8qIE1DUCAqLworCW9wY29kZSA9IChETUFFX0NNRF9TUkNfUENJIHwgRE1BRV9DTURfRFNUX0dSQyB8CisJCSAgRE1BRV9DTURfQ19EU1RfR1JDIHwgRE1BRV9DTURfQ19FTkFCTEUgfAorCQkgIERNQUVfQ01EX1NSQ19SRVNFVCB8IERNQUVfQ01EX0RTVF9SRVNFVCB8CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCSAgRE1BRV9DTURfRU5ESUFOSVRZX0JfRFdfU1dBUCB8CisjZWxzZQorCQkgIERNQUVfQ01EX0VORElBTklUWV9EV19TV0FQIHwKKyNlbmRpZgorCQkgIChwb3J0ID8gRE1BRV9DTURfUE9SVF8xIDogRE1BRV9DTURfUE9SVF8wKSB8CisJCSAgKHZuIDw8IERNQUVfQ01EX0UxSFZOX1NISUZUKSk7CisKKwlpZiAoYnAtPnBvcnQucG9ydF9zdHgpIHsKKworCQlkbWFlID0gYm54Mnhfc3AoYnAsIGRtYWVbYnAtPmV4ZWN1dGVyX2lkeCsrXSk7CisJCWRtYWUtPm9wY29kZSA9IG9wY29kZTsKKwkJZG1hZS0+c3JjX2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgcG9ydF9zdGF0cykpOworCQlkbWFlLT5zcmNfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBwb3J0X3N0YXRzKSk7CisJCWRtYWUtPmRzdF9hZGRyX2xvID0gYnAtPnBvcnQucG9ydF9zdHggPj4gMjsKKwkJZG1hZS0+ZHN0X2FkZHJfaGkgPSAwOworCQlkbWFlLT5sZW4gPSBzaXplb2Yoc3RydWN0IGhvc3RfcG9ydF9zdGF0cykgPj4gMjsKKwkJZG1hZS0+Y29tcF9hZGRyX2xvID0gZG1hZV9yZWdfZ29fY1tsb2FkZXJfaWR4XSA+PiAyOworCQlkbWFlLT5jb21wX2FkZHJfaGkgPSAwOworCQlkbWFlLT5jb21wX3ZhbCA9IDE7CisJfQorCisJaWYgKGJwLT5mdW5jX3N0eCkgeworCisJCWRtYWUgPSBibngyeF9zcChicCwgZG1hZVticC0+ZXhlY3V0ZXJfaWR4KytdKTsKKwkJZG1hZS0+b3Bjb2RlID0gb3Bjb2RlOworCQlkbWFlLT5zcmNfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBmdW5jX3N0YXRzKSk7CisJCWRtYWUtPnNyY19hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIGZ1bmNfc3RhdHMpKTsKKwkJZG1hZS0+ZHN0X2FkZHJfbG8gPSBicC0+ZnVuY19zdHggPj4gMjsKKwkJZG1hZS0+ZHN0X2FkZHJfaGkgPSAwOworCQlkbWFlLT5sZW4gPSBzaXplb2Yoc3RydWN0IGhvc3RfZnVuY19zdGF0cykgPj4gMjsKKwkJZG1hZS0+Y29tcF9hZGRyX2xvID0gZG1hZV9yZWdfZ29fY1tsb2FkZXJfaWR4XSA+PiAyOworCQlkbWFlLT5jb21wX2FkZHJfaGkgPSAwOworCQlkbWFlLT5jb21wX3ZhbCA9IDE7CisJfQorCisJLyogTUFDICovCisJb3Bjb2RlID0gKERNQUVfQ01EX1NSQ19HUkMgfCBETUFFX0NNRF9EU1RfUENJIHwKKwkJICBETUFFX0NNRF9DX0RTVF9HUkMgfCBETUFFX0NNRF9DX0VOQUJMRSB8CisJCSAgRE1BRV9DTURfU1JDX1JFU0VUIHwgRE1BRV9DTURfRFNUX1JFU0VUIHwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJICBETUFFX0NNRF9FTkRJQU5JVFlfQl9EV19TV0FQIHwKKyNlbHNlCisJCSAgRE1BRV9DTURfRU5ESUFOSVRZX0RXX1NXQVAgfAorI2VuZGlmCisJCSAgKHBvcnQgPyBETUFFX0NNRF9QT1JUXzEgOiBETUFFX0NNRF9QT1JUXzApIHwKKwkJICAodm4gPDwgRE1BRV9DTURfRTFIVk5fU0hJRlQpKTsKKworCWlmIChicC0+bGlua192YXJzLm1hY190eXBlID09IE1BQ19UWVBFX0JNQUMpIHsKKworCQltYWNfYWRkciA9IChwb3J0ID8gTklHX1JFR19JTkdSRVNTX0JNQUMxX01FTSA6CisJCQkJICAgTklHX1JFR19JTkdSRVNTX0JNQUMwX01FTSk7CisKKwkJLyogQklHTUFDX1JFR0lTVEVSX1RYX1NUQVRfR1RQS1QgLi4KKwkJICAgQklHTUFDX1JFR0lTVEVSX1RYX1NUQVRfR1RCWVQgKi8KKwkJZG1hZSA9IGJueDJ4X3NwKGJwLCBkbWFlW2JwLT5leGVjdXRlcl9pZHgrK10pOworCQlkbWFlLT5vcGNvZGUgPSBvcGNvZGU7CisJCWRtYWUtPnNyY19hZGRyX2xvID0gKG1hY19hZGRyICsKKwkJCQkgICAgIEJJR01BQ19SRUdJU1RFUl9UWF9TVEFUX0dUUEtUKSA+PiAyOworCQlkbWFlLT5zcmNfYWRkcl9oaSA9IDA7CisJCWRtYWUtPmRzdF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19zdGF0cykpOworCQlkbWFlLT5kc3RfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBtYWNfc3RhdHMpKTsKKwkJZG1hZS0+bGVuID0gKDggKyBCSUdNQUNfUkVHSVNURVJfVFhfU1RBVF9HVEJZVCAtCisJCQkgICAgIEJJR01BQ19SRUdJU1RFUl9UWF9TVEFUX0dUUEtUKSA+PiAyOworCQlkbWFlLT5jb21wX2FkZHJfbG8gPSBkbWFlX3JlZ19nb19jW2xvYWRlcl9pZHhdID4+IDI7CisJCWRtYWUtPmNvbXBfYWRkcl9oaSA9IDA7CisJCWRtYWUtPmNvbXBfdmFsID0gMTsKKworCQkvKiBCSUdNQUNfUkVHSVNURVJfUlhfU1RBVF9HUjY0IC4uCisJCSAgIEJJR01BQ19SRUdJU1RFUl9SWF9TVEFUX0dSSVBKICovCisJCWRtYWUgPSBibngyeF9zcChicCwgZG1hZVticC0+ZXhlY3V0ZXJfaWR4KytdKTsKKwkJZG1hZS0+b3Bjb2RlID0gb3Bjb2RlOworCQlkbWFlLT5zcmNfYWRkcl9sbyA9IChtYWNfYWRkciArCisJCQkJICAgICBCSUdNQUNfUkVHSVNURVJfUlhfU1RBVF9HUjY0KSA+PiAyOworCQlkbWFlLT5zcmNfYWRkcl9oaSA9IDA7CisJCWRtYWUtPmRzdF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19zdGF0cykgKworCQkJCW9mZnNldG9mKHN0cnVjdCBibWFjX3N0YXRzLCByeF9zdGF0X2dyNjRfbG8pKTsKKwkJZG1hZS0+ZHN0X2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgbWFjX3N0YXRzKSArCisJCQkJb2Zmc2V0b2Yoc3RydWN0IGJtYWNfc3RhdHMsIHJ4X3N0YXRfZ3I2NF9sbykpOworCQlkbWFlLT5sZW4gPSAoOCArIEJJR01BQ19SRUdJU1RFUl9SWF9TVEFUX0dSSVBKIC0KKwkJCSAgICAgQklHTUFDX1JFR0lTVEVSX1JYX1NUQVRfR1I2NCkgPj4gMjsKKwkJZG1hZS0+Y29tcF9hZGRyX2xvID0gZG1hZV9yZWdfZ29fY1tsb2FkZXJfaWR4XSA+PiAyOworCQlkbWFlLT5jb21wX2FkZHJfaGkgPSAwOworCQlkbWFlLT5jb21wX3ZhbCA9IDE7CisKKwl9IGVsc2UgaWYgKGJwLT5saW5rX3ZhcnMubWFjX3R5cGUgPT0gTUFDX1RZUEVfRU1BQykgeworCisJCW1hY19hZGRyID0gKHBvcnQgPyBHUkNCQVNFX0VNQUMxIDogR1JDQkFTRV9FTUFDMCk7CisKKwkJLyogRU1BQ19SRUdfRU1BQ19SWF9TVEFUX0FDIChFTUFDX1JFR19FTUFDX1JYX1NUQVRfQUNfQ09VTlQpKi8KKwkJZG1hZSA9IGJueDJ4X3NwKGJwLCBkbWFlW2JwLT5leGVjdXRlcl9pZHgrK10pOworCQlkbWFlLT5vcGNvZGUgPSBvcGNvZGU7CisJCWRtYWUtPnNyY19hZGRyX2xvID0gKG1hY19hZGRyICsKKwkJCQkgICAgIEVNQUNfUkVHX0VNQUNfUlhfU1RBVF9BQykgPj4gMjsKKwkJZG1hZS0+c3JjX2FkZHJfaGkgPSAwOworCQlkbWFlLT5kc3RfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBtYWNfc3RhdHMpKTsKKwkJZG1hZS0+ZHN0X2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgbWFjX3N0YXRzKSk7CisJCWRtYWUtPmxlbiA9IEVNQUNfUkVHX0VNQUNfUlhfU1RBVF9BQ19DT1VOVDsKKwkJZG1hZS0+Y29tcF9hZGRyX2xvID0gZG1hZV9yZWdfZ29fY1tsb2FkZXJfaWR4XSA+PiAyOworCQlkbWFlLT5jb21wX2FkZHJfaGkgPSAwOworCQlkbWFlLT5jb21wX3ZhbCA9IDE7CisKKwkJLyogRU1BQ19SRUdfRU1BQ19SWF9TVEFUX0FDXzI4ICovCisJCWRtYWUgPSBibngyeF9zcChicCwgZG1hZVticC0+ZXhlY3V0ZXJfaWR4KytdKTsKKwkJZG1hZS0+b3Bjb2RlID0gb3Bjb2RlOworCQlkbWFlLT5zcmNfYWRkcl9sbyA9IChtYWNfYWRkciArCisJCQkJICAgICBFTUFDX1JFR19FTUFDX1JYX1NUQVRfQUNfMjgpID4+IDI7CisJCWRtYWUtPnNyY19hZGRyX2hpID0gMDsKKwkJZG1hZS0+ZHN0X2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgbWFjX3N0YXRzKSArCisJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IGVtYWNfc3RhdHMsIHJ4X3N0YXRfZmFsc2VjYXJyaWVyZXJyb3JzKSk7CisJCWRtYWUtPmRzdF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19zdGF0cykgKworCQkgICAgIG9mZnNldG9mKHN0cnVjdCBlbWFjX3N0YXRzLCByeF9zdGF0X2ZhbHNlY2FycmllcmVycm9ycykpOworCQlkbWFlLT5sZW4gPSAxOworCQlkbWFlLT5jb21wX2FkZHJfbG8gPSBkbWFlX3JlZ19nb19jW2xvYWRlcl9pZHhdID4+IDI7CisJCWRtYWUtPmNvbXBfYWRkcl9oaSA9IDA7CisJCWRtYWUtPmNvbXBfdmFsID0gMTsKKworCQkvKiBFTUFDX1JFR19FTUFDX1RYX1NUQVRfQUMgKEVNQUNfUkVHX0VNQUNfVFhfU1RBVF9BQ19DT1VOVCkqLworCQlkbWFlID0gYm54Mnhfc3AoYnAsIGRtYWVbYnAtPmV4ZWN1dGVyX2lkeCsrXSk7CisJCWRtYWUtPm9wY29kZSA9IG9wY29kZTsKKwkJZG1hZS0+c3JjX2FkZHJfbG8gPSAobWFjX2FkZHIgKworCQkJCSAgICAgRU1BQ19SRUdfRU1BQ19UWF9TVEFUX0FDKSA+PiAyOworCQlkbWFlLT5zcmNfYWRkcl9oaSA9IDA7CisJCWRtYWUtPmRzdF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19zdGF0cykgKworCQkJb2Zmc2V0b2Yoc3RydWN0IGVtYWNfc3RhdHMsIHR4X3N0YXRfaWZoY291dG9jdGV0cykpOworCQlkbWFlLT5kc3RfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBtYWNfc3RhdHMpICsKKwkJCW9mZnNldG9mKHN0cnVjdCBlbWFjX3N0YXRzLCB0eF9zdGF0X2lmaGNvdXRvY3RldHMpKTsKKwkJZG1hZS0+bGVuID0gRU1BQ19SRUdfRU1BQ19UWF9TVEFUX0FDX0NPVU5UOworCQlkbWFlLT5jb21wX2FkZHJfbG8gPSBkbWFlX3JlZ19nb19jW2xvYWRlcl9pZHhdID4+IDI7CisJCWRtYWUtPmNvbXBfYWRkcl9oaSA9IDA7CisJCWRtYWUtPmNvbXBfdmFsID0gMTsKKwl9CisKKwkvKiBOSUcgKi8KKwlkbWFlID0gYm54Mnhfc3AoYnAsIGRtYWVbYnAtPmV4ZWN1dGVyX2lkeCsrXSk7CisJZG1hZS0+b3Bjb2RlID0gb3Bjb2RlOworCWRtYWUtPnNyY19hZGRyX2xvID0gKHBvcnQgPyBOSUdfUkVHX1NUQVQxX0JSQl9ESVNDQVJEIDoKKwkJCQkgICAgTklHX1JFR19TVEFUMF9CUkJfRElTQ0FSRCkgPj4gMjsKKwlkbWFlLT5zcmNfYWRkcl9oaSA9IDA7CisJZG1hZS0+ZHN0X2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgbmlnX3N0YXRzKSk7CisJZG1hZS0+ZHN0X2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgbmlnX3N0YXRzKSk7CisJZG1hZS0+bGVuID0gKHNpemVvZihzdHJ1Y3QgbmlnX3N0YXRzKSAtIDQqc2l6ZW9mKHUzMikpID4+IDI7CisJZG1hZS0+Y29tcF9hZGRyX2xvID0gZG1hZV9yZWdfZ29fY1tsb2FkZXJfaWR4XSA+PiAyOworCWRtYWUtPmNvbXBfYWRkcl9oaSA9IDA7CisJZG1hZS0+Y29tcF92YWwgPSAxOworCisJZG1hZSA9IGJueDJ4X3NwKGJwLCBkbWFlW2JwLT5leGVjdXRlcl9pZHgrK10pOworCWRtYWUtPm9wY29kZSA9IG9wY29kZTsKKwlkbWFlLT5zcmNfYWRkcl9sbyA9IChwb3J0ID8gTklHX1JFR19TVEFUMV9FR1JFU1NfTUFDX1BLVDAgOgorCQkJCSAgICBOSUdfUkVHX1NUQVQwX0VHUkVTU19NQUNfUEtUMCkgPj4gMjsKKwlkbWFlLT5zcmNfYWRkcl9oaSA9IDA7CisJZG1hZS0+ZHN0X2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgbmlnX3N0YXRzKSArCisJCQlvZmZzZXRvZihzdHJ1Y3QgbmlnX3N0YXRzLCBlZ3Jlc3NfbWFjX3BrdDBfbG8pKTsKKwlkbWFlLT5kc3RfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBuaWdfc3RhdHMpICsKKwkJCW9mZnNldG9mKHN0cnVjdCBuaWdfc3RhdHMsIGVncmVzc19tYWNfcGt0MF9sbykpOworCWRtYWUtPmxlbiA9ICgyKnNpemVvZih1MzIpKSA+PiAyOworCWRtYWUtPmNvbXBfYWRkcl9sbyA9IGRtYWVfcmVnX2dvX2NbbG9hZGVyX2lkeF0gPj4gMjsKKwlkbWFlLT5jb21wX2FkZHJfaGkgPSAwOworCWRtYWUtPmNvbXBfdmFsID0gMTsKKworCWRtYWUgPSBibngyeF9zcChicCwgZG1hZVticC0+ZXhlY3V0ZXJfaWR4KytdKTsKKwlkbWFlLT5vcGNvZGUgPSAoRE1BRV9DTURfU1JDX0dSQyB8IERNQUVfQ01EX0RTVF9QQ0kgfAorCQkJRE1BRV9DTURfQ19EU1RfUENJIHwgRE1BRV9DTURfQ19FTkFCTEUgfAorCQkJRE1BRV9DTURfU1JDX1JFU0VUIHwgRE1BRV9DTURfRFNUX1JFU0VUIHwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJCURNQUVfQ01EX0VORElBTklUWV9CX0RXX1NXQVAgfAorI2Vsc2UKKwkJCURNQUVfQ01EX0VORElBTklUWV9EV19TV0FQIHwKKyNlbmRpZgorCQkJKHBvcnQgPyBETUFFX0NNRF9QT1JUXzEgOiBETUFFX0NNRF9QT1JUXzApIHwKKwkJCSh2biA8PCBETUFFX0NNRF9FMUhWTl9TSElGVCkpOworCWRtYWUtPnNyY19hZGRyX2xvID0gKHBvcnQgPyBOSUdfUkVHX1NUQVQxX0VHUkVTU19NQUNfUEtUMSA6CisJCQkJICAgIE5JR19SRUdfU1RBVDBfRUdSRVNTX01BQ19QS1QxKSA+PiAyOworCWRtYWUtPnNyY19hZGRyX2hpID0gMDsKKwlkbWFlLT5kc3RfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBuaWdfc3RhdHMpICsKKwkJCW9mZnNldG9mKHN0cnVjdCBuaWdfc3RhdHMsIGVncmVzc19tYWNfcGt0MV9sbykpOworCWRtYWUtPmRzdF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIG5pZ19zdGF0cykgKworCQkJb2Zmc2V0b2Yoc3RydWN0IG5pZ19zdGF0cywgZWdyZXNzX21hY19wa3QxX2xvKSk7CisJZG1hZS0+bGVuID0gKDIqc2l6ZW9mKHUzMikpID4+IDI7CisJZG1hZS0+Y29tcF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIHN0YXRzX2NvbXApKTsKKwlkbWFlLT5jb21wX2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgc3RhdHNfY29tcCkpOworCWRtYWUtPmNvbXBfdmFsID0gRE1BRV9DT01QX1ZBTDsKKworCSpzdGF0c19jb21wID0gMDsKK30KKworc3RhdGljIHZvaWQgYm54MnhfZnVuY19zdGF0c19pbml0KHN0cnVjdCBibngyeCAqYnApCit7CisJc3RydWN0IGRtYWVfY29tbWFuZCAqZG1hZSA9ICZicC0+c3RhdHNfZG1hZTsKKwl1MzIgKnN0YXRzX2NvbXAgPSBibngyeF9zcChicCwgc3RhdHNfY29tcCk7CisKKwkvKiBzYW5pdHkgKi8KKwlpZiAoIWJwLT5mdW5jX3N0eCkgeworCQlCTlgyWF9FUlIoIkJVRyFcbiIpOworCQlyZXR1cm47CisJfQorCisJYnAtPmV4ZWN1dGVyX2lkeCA9IDA7CisJbWVtc2V0KGRtYWUsIDAsIHNpemVvZihzdHJ1Y3QgZG1hZV9jb21tYW5kKSk7CisKKwlkbWFlLT5vcGNvZGUgPSAoRE1BRV9DTURfU1JDX1BDSSB8IERNQUVfQ01EX0RTVF9HUkMgfAorCQkJRE1BRV9DTURfQ19EU1RfUENJIHwgRE1BRV9DTURfQ19FTkFCTEUgfAorCQkJRE1BRV9DTURfU1JDX1JFU0VUIHwgRE1BRV9DTURfRFNUX1JFU0VUIHwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJCURNQUVfQ01EX0VORElBTklUWV9CX0RXX1NXQVAgfAorI2Vsc2UKKwkJCURNQUVfQ01EX0VORElBTklUWV9EV19TV0FQIHwKKyNlbmRpZgorCQkJKEJQX1BPUlQoYnApID8gRE1BRV9DTURfUE9SVF8xIDogRE1BRV9DTURfUE9SVF8wKSB8CisJCQkoQlBfRTFIVk4oYnApIDw8IERNQUVfQ01EX0UxSFZOX1NISUZUKSk7CisJZG1hZS0+c3JjX2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgZnVuY19zdGF0cykpOworCWRtYWUtPnNyY19hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIGZ1bmNfc3RhdHMpKTsKKwlkbWFlLT5kc3RfYWRkcl9sbyA9IGJwLT5mdW5jX3N0eCA+PiAyOworCWRtYWUtPmRzdF9hZGRyX2hpID0gMDsKKwlkbWFlLT5sZW4gPSBzaXplb2Yoc3RydWN0IGhvc3RfZnVuY19zdGF0cykgPj4gMjsKKwlkbWFlLT5jb21wX2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgc3RhdHNfY29tcCkpOworCWRtYWUtPmNvbXBfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBzdGF0c19jb21wKSk7CisJZG1hZS0+Y29tcF92YWwgPSBETUFFX0NPTVBfVkFMOworCisJKnN0YXRzX2NvbXAgPSAwOworfQorCitzdGF0aWMgdm9pZCBibngyeF9zdGF0c19zdGFydChzdHJ1Y3QgYm54MnggKmJwKQoreworCWlmIChicC0+cG9ydC5wbWYpCisJCWJueDJ4X3BvcnRfc3RhdHNfaW5pdChicCk7CisKKwllbHNlIGlmIChicC0+ZnVuY19zdHgpCisJCWJueDJ4X2Z1bmNfc3RhdHNfaW5pdChicCk7CisKKwlibngyeF9od19zdGF0c19wb3N0KGJwKTsKKwlibngyeF9zdG9ybV9zdGF0c19wb3N0KGJwKTsKK30KKworc3RhdGljIHZvaWQgYm54Mnhfc3RhdHNfcG1mX3N0YXJ0KHN0cnVjdCBibngyeCAqYnApCit7CisJYm54Mnhfc3RhdHNfY29tcChicCk7CisJYm54Mnhfc3RhdHNfcG1mX3VwZGF0ZShicCk7CisJYm54Mnhfc3RhdHNfc3RhcnQoYnApOworfQorCitzdGF0aWMgdm9pZCBibngyeF9zdGF0c19yZXN0YXJ0KHN0cnVjdCBibngyeCAqYnApCit7CisJYm54Mnhfc3RhdHNfY29tcChicCk7CisJYm54Mnhfc3RhdHNfc3RhcnQoYnApOworfQorCitzdGF0aWMgdm9pZCBibngyeF9ibWFjX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCBibWFjX3N0YXRzICpuZXcgPSBibngyeF9zcChicCwgbWFjX3N0YXRzLmJtYWNfc3RhdHMpOworCXN0cnVjdCBob3N0X3BvcnRfc3RhdHMgKnBzdGF0cyA9IGJueDJ4X3NwKGJwLCBwb3J0X3N0YXRzKTsKKwlzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzICplc3RhdHMgPSAmYnAtPmV0aF9zdGF0czsKKwlzdHJ1Y3QgeworCQl1MzIgbG87CisJCXUzMiBoaTsKKwl9IGRpZmY7CisKKwlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3JlcmIsIHJ4X3N0YXRfaWZoY2luYmFkb2N0ZXRzKTsKKwlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3JmY3MsIHJ4X3N0YXRfZG90M3N0YXRzZmNzZXJyb3JzKTsKKwlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3J1bmQsIHJ4X3N0YXRfZXRoZXJzdGF0c3VuZGVyc2l6ZXBrdHMpOworCVVQREFURV9TVEFUNjQocnhfc3RhdF9ncm92ciwgcnhfc3RhdF9kb3Qzc3RhdHNmcmFtZXN0b29sb25nKTsKKwlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3JmcmcsIHJ4X3N0YXRfZXRoZXJzdGF0c2ZyYWdtZW50cyk7CisJVVBEQVRFX1NUQVQ2NChyeF9zdGF0X2dyamJyLCByeF9zdGF0X2V0aGVyc3RhdHNqYWJiZXJzKTsKKwlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3J4Y2YsIHJ4X3N0YXRfbWFjY29udHJvbGZyYW1lc3JlY2VpdmVkKTsKKwlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3J4cGYsIHJ4X3N0YXRfeG9mZnN0YXRlZW50ZXJlZCk7CisJVVBEQVRFX1NUQVQ2NChyeF9zdGF0X2dyeHBmLCByeF9zdGF0X2JtYWNfeHBmKTsKKwlVUERBVEVfU1RBVDY0KHR4X3N0YXRfZ3R4cGYsIHR4X3N0YXRfb3V0eG9mZnNlbnQpOworCVVQREFURV9TVEFUNjQodHhfc3RhdF9ndHhwZiwgdHhfc3RhdF9mbG93Y29udHJvbGRvbmUpOworCVVQREFURV9TVEFUNjQodHhfc3RhdF9ndDY0LCB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNjRvY3RldHMpOworCVVQREFURV9TVEFUNjQodHhfc3RhdF9ndDEyNywKKwkJCQl0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNjVvY3RldHN0bzEyN29jdGV0cyk7CisJVVBEQVRFX1NUQVQ2NCh0eF9zdGF0X2d0MjU1LAorCQkJCXR4X3N0YXRfZXRoZXJzdGF0c3BrdHMxMjhvY3RldHN0bzI1NW9jdGV0cyk7CisJVVBEQVRFX1NUQVQ2NCh0eF9zdGF0X2d0NTExLAorCQkJCXR4X3N0YXRfZXRoZXJzdGF0c3BrdHMyNTZvY3RldHN0bzUxMW9jdGV0cyk7CisJVVBEQVRFX1NUQVQ2NCh0eF9zdGF0X2d0MTAyMywKKwkJCQl0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNTEyb2N0ZXRzdG8xMDIzb2N0ZXRzKTsKKwlVUERBVEVfU1RBVDY0KHR4X3N0YXRfZ3QxNTE4LAorCQkJCXR4X3N0YXRfZXRoZXJzdGF0c3BrdHMxMDI0b2N0ZXRzdG8xNTIyb2N0ZXRzKTsKKwlVUERBVEVfU1RBVDY0KHR4X3N0YXRfZ3QyMDQ3LCB0eF9zdGF0X2JtYWNfMjA0Nyk7CisJVVBEQVRFX1NUQVQ2NCh0eF9zdGF0X2d0NDA5NSwgdHhfc3RhdF9ibWFjXzQwOTUpOworCVVQREFURV9TVEFUNjQodHhfc3RhdF9ndDkyMTYsIHR4X3N0YXRfYm1hY185MjE2KTsKKwlVUERBVEVfU1RBVDY0KHR4X3N0YXRfZ3QxNjM4MywgdHhfc3RhdF9ibWFjXzE2MzgzKTsKKwlVUERBVEVfU1RBVDY0KHR4X3N0YXRfZ3RlcnIsCisJCQkJdHhfc3RhdF9kb3Qzc3RhdHNpbnRlcm5hbG1hY3RyYW5zbWl0ZXJyb3JzKTsKKwlVUERBVEVfU1RBVDY0KHR4X3N0YXRfZ3R1ZmwsIHR4X3N0YXRfYm1hY191ZmwpOworCisJZXN0YXRzLT5wYXVzZV9mcmFtZXNfcmVjZWl2ZWRfaGkgPQorCQkJCXBzdGF0cy0+bWFjX3N0eFsxXS5yeF9zdGF0X2JtYWNfeHBmX2hpOworCWVzdGF0cy0+cGF1c2VfZnJhbWVzX3JlY2VpdmVkX2xvID0KKwkJCQlwc3RhdHMtPm1hY19zdHhbMV0ucnhfc3RhdF9ibWFjX3hwZl9sbzsKKworCWVzdGF0cy0+cGF1c2VfZnJhbWVzX3NlbnRfaGkgPQorCQkJCXBzdGF0cy0+bWFjX3N0eFsxXS50eF9zdGF0X291dHhvZmZzZW50X2hpOworCWVzdGF0cy0+cGF1c2VfZnJhbWVzX3NlbnRfbG8gPQorCQkJCXBzdGF0cy0+bWFjX3N0eFsxXS50eF9zdGF0X291dHhvZmZzZW50X2xvOworfQorCitzdGF0aWMgdm9pZCBibngyeF9lbWFjX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCBlbWFjX3N0YXRzICpuZXcgPSBibngyeF9zcChicCwgbWFjX3N0YXRzLmVtYWNfc3RhdHMpOworCXN0cnVjdCBob3N0X3BvcnRfc3RhdHMgKnBzdGF0cyA9IGJueDJ4X3NwKGJwLCBwb3J0X3N0YXRzKTsKKwlzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzICplc3RhdHMgPSAmYnAtPmV0aF9zdGF0czsKKworCVVQREFURV9FWFRFTkRfU1RBVChyeF9zdGF0X2lmaGNpbmJhZG9jdGV0cyk7CisJVVBEQVRFX0VYVEVORF9TVEFUKHR4X3N0YXRfaWZoY291dGJhZG9jdGV0cyk7CisJVVBEQVRFX0VYVEVORF9TVEFUKHJ4X3N0YXRfZG90M3N0YXRzZmNzZXJyb3JzKTsKKwlVUERBVEVfRVhURU5EX1NUQVQocnhfc3RhdF9kb3Qzc3RhdHNhbGlnbm1lbnRlcnJvcnMpOworCVVQREFURV9FWFRFTkRfU1RBVChyeF9zdGF0X2RvdDNzdGF0c2NhcnJpZXJzZW5zZWVycm9ycyk7CisJVVBEQVRFX0VYVEVORF9TVEFUKHJ4X3N0YXRfZmFsc2VjYXJyaWVyZXJyb3JzKTsKKwlVUERBVEVfRVhURU5EX1NUQVQocnhfc3RhdF9ldGhlcnN0YXRzdW5kZXJzaXplcGt0cyk7CisJVVBEQVRFX0VYVEVORF9TVEFUKHJ4X3N0YXRfZG90M3N0YXRzZnJhbWVzdG9vbG9uZyk7CisJVVBEQVRFX0VYVEVORF9TVEFUKHJ4X3N0YXRfZXRoZXJzdGF0c2ZyYWdtZW50cyk7CisJVVBEQVRFX0VYVEVORF9TVEFUKHJ4X3N0YXRfZXRoZXJzdGF0c2phYmJlcnMpOworCVVQREFURV9FWFRFTkRfU1RBVChyeF9zdGF0X21hY2NvbnRyb2xmcmFtZXNyZWNlaXZlZCk7CisJVVBEQVRFX0VYVEVORF9TVEFUKHJ4X3N0YXRfeG9mZnN0YXRlZW50ZXJlZCk7CisJVVBEQVRFX0VYVEVORF9TVEFUKHJ4X3N0YXRfeG9ucGF1c2VmcmFtZXNyZWNlaXZlZCk7CisJVVBEQVRFX0VYVEVORF9TVEFUKHJ4X3N0YXRfeG9mZnBhdXNlZnJhbWVzcmVjZWl2ZWQpOworCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X291dHhvbnNlbnQpOworCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X291dHhvZmZzZW50KTsKKwlVUERBVEVfRVhURU5EX1NUQVQodHhfc3RhdF9mbG93Y29udHJvbGRvbmUpOworCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2V0aGVyc3RhdHNjb2xsaXNpb25zKTsKKwlVUERBVEVfRVhURU5EX1NUQVQodHhfc3RhdF9kb3Qzc3RhdHNzaW5nbGVjb2xsaXNpb25mcmFtZXMpOworCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2RvdDNzdGF0c211bHRpcGxlY29sbGlzaW9uZnJhbWVzKTsKKwlVUERBVEVfRVhURU5EX1NUQVQodHhfc3RhdF9kb3Qzc3RhdHNkZWZlcnJlZHRyYW5zbWlzc2lvbnMpOworCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2RvdDNzdGF0c2V4Y2Vzc2l2ZWNvbGxpc2lvbnMpOworCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2RvdDNzdGF0c2xhdGVjb2xsaXNpb25zKTsKKwlVUERBVEVfRVhURU5EX1NUQVQodHhfc3RhdF9ldGhlcnN0YXRzcGt0czY0b2N0ZXRzKTsKKwlVUERBVEVfRVhURU5EX1NUQVQodHhfc3RhdF9ldGhlcnN0YXRzcGt0czY1b2N0ZXRzdG8xMjdvY3RldHMpOworCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2V0aGVyc3RhdHNwa3RzMTI4b2N0ZXRzdG8yNTVvY3RldHMpOworCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2V0aGVyc3RhdHNwa3RzMjU2b2N0ZXRzdG81MTFvY3RldHMpOworCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNTEyb2N0ZXRzdG8xMDIzb2N0ZXRzKTsKKwlVUERBVEVfRVhURU5EX1NUQVQodHhfc3RhdF9ldGhlcnN0YXRzcGt0czEwMjRvY3RldHN0bzE1MjJvY3RldHMpOworCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2V0aGVyc3RhdHNwa3Rzb3ZlcjE1MjJvY3RldHMpOworCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2RvdDNzdGF0c2ludGVybmFsbWFjdHJhbnNtaXRlcnJvcnMpOworCisJZXN0YXRzLT5wYXVzZV9mcmFtZXNfcmVjZWl2ZWRfaGkgPQorCQkJcHN0YXRzLT5tYWNfc3R4WzFdLnJ4X3N0YXRfeG9ucGF1c2VmcmFtZXNyZWNlaXZlZF9oaTsKKwllc3RhdHMtPnBhdXNlX2ZyYW1lc19yZWNlaXZlZF9sbyA9CisJCQlwc3RhdHMtPm1hY19zdHhbMV0ucnhfc3RhdF94b25wYXVzZWZyYW1lc3JlY2VpdmVkX2xvOworCUFERF82NChlc3RhdHMtPnBhdXNlX2ZyYW1lc19yZWNlaXZlZF9oaSwKKwkgICAgICAgcHN0YXRzLT5tYWNfc3R4WzFdLnJ4X3N0YXRfeG9mZnBhdXNlZnJhbWVzcmVjZWl2ZWRfaGksCisJICAgICAgIGVzdGF0cy0+cGF1c2VfZnJhbWVzX3JlY2VpdmVkX2xvLAorCSAgICAgICBwc3RhdHMtPm1hY19zdHhbMV0ucnhfc3RhdF94b2ZmcGF1c2VmcmFtZXNyZWNlaXZlZF9sbyk7CisKKwllc3RhdHMtPnBhdXNlX2ZyYW1lc19zZW50X2hpID0KKwkJCXBzdGF0cy0+bWFjX3N0eFsxXS50eF9zdGF0X291dHhvbnNlbnRfaGk7CisJZXN0YXRzLT5wYXVzZV9mcmFtZXNfc2VudF9sbyA9CisJCQlwc3RhdHMtPm1hY19zdHhbMV0udHhfc3RhdF9vdXR4b25zZW50X2xvOworCUFERF82NChlc3RhdHMtPnBhdXNlX2ZyYW1lc19zZW50X2hpLAorCSAgICAgICBwc3RhdHMtPm1hY19zdHhbMV0udHhfc3RhdF9vdXR4b2Zmc2VudF9oaSwKKwkgICAgICAgZXN0YXRzLT5wYXVzZV9mcmFtZXNfc2VudF9sbywKKwkgICAgICAgcHN0YXRzLT5tYWNfc3R4WzFdLnR4X3N0YXRfb3V0eG9mZnNlbnRfbG8pOworfQorCitzdGF0aWMgaW50IGJueDJ4X2h3X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCBuaWdfc3RhdHMgKm5ldyA9IGJueDJ4X3NwKGJwLCBuaWdfc3RhdHMpOworCXN0cnVjdCBuaWdfc3RhdHMgKm9sZCA9ICYoYnAtPnBvcnQub2xkX25pZ19zdGF0cyk7CisJc3RydWN0IGhvc3RfcG9ydF9zdGF0cyAqcHN0YXRzID0gYm54Mnhfc3AoYnAsIHBvcnRfc3RhdHMpOworCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9ICZicC0+ZXRoX3N0YXRzOworCXN0cnVjdCB7CisJCXUzMiBsbzsKKwkJdTMyIGhpOworCX0gZGlmZjsKKworCWlmIChicC0+bGlua192YXJzLm1hY190eXBlID09IE1BQ19UWVBFX0JNQUMpCisJCWJueDJ4X2JtYWNfc3RhdHNfdXBkYXRlKGJwKTsKKworCWVsc2UgaWYgKGJwLT5saW5rX3ZhcnMubWFjX3R5cGUgPT0gTUFDX1RZUEVfRU1BQykKKwkJYm54MnhfZW1hY19zdGF0c191cGRhdGUoYnApOworCisJZWxzZSB7IC8qIHVucmVhY2hlZCAqLworCQlCTlgyWF9FUlIoInN0YXRzIHVwZGF0ZWQgYnkgRE1BRSBidXQgbm8gTUFDIGFjdGl2ZVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlBRERfRVhURU5EXzY0KHBzdGF0cy0+YnJiX2Ryb3BfaGksIHBzdGF0cy0+YnJiX2Ryb3BfbG8sCisJCSAgICAgIG5ldy0+YnJiX2Rpc2NhcmQgLSBvbGQtPmJyYl9kaXNjYXJkKTsKKwlBRERfRVhURU5EXzY0KGVzdGF0cy0+YnJiX3RydW5jYXRlX2hpLCBlc3RhdHMtPmJyYl90cnVuY2F0ZV9sbywKKwkJICAgICAgbmV3LT5icmJfdHJ1bmNhdGUgLSBvbGQtPmJyYl90cnVuY2F0ZSk7CisKKwlVUERBVEVfU1RBVDY0X05JRyhlZ3Jlc3NfbWFjX3BrdDAsCisJCQkJCWV0aGVyc3RhdHNwa3RzMTAyNG9jdGV0c3RvMTUyMm9jdGV0cyk7CisJVVBEQVRFX1NUQVQ2NF9OSUcoZWdyZXNzX21hY19wa3QxLCBldGhlcnN0YXRzcGt0c292ZXIxNTIyb2N0ZXRzKTsKKworCW1lbWNweShvbGQsIG5ldywgc2l6ZW9mKHN0cnVjdCBuaWdfc3RhdHMpKTsKKworCW1lbWNweSgmKGVzdGF0cy0+cnhfc3RhdF9pZmhjaW5iYWRvY3RldHNfaGkpLCAmKHBzdGF0cy0+bWFjX3N0eFsxXSksCisJICAgICAgIHNpemVvZihzdHJ1Y3QgbWFjX3N0eCkpOworCWVzdGF0cy0+YnJiX2Ryb3BfaGkgPSBwc3RhdHMtPmJyYl9kcm9wX2hpOworCWVzdGF0cy0+YnJiX2Ryb3BfbG8gPSBwc3RhdHMtPmJyYl9kcm9wX2xvOworCisJcHN0YXRzLT5ob3N0X3BvcnRfc3RhdHNfc3RhcnQgPSArK3BzdGF0cy0+aG9zdF9wb3J0X3N0YXRzX2VuZDsKKworCWlmICghQlBfTk9NQ1AoYnApKSB7CisJCXUzMiBuaWdfdGltZXJfbWF4ID0KKwkJCVNITUVNX1JEKGJwLCBwb3J0X21iW0JQX1BPUlQoYnApXS5zdGF0X25pZ190aW1lcik7CisJCWlmIChuaWdfdGltZXJfbWF4ICE9IGVzdGF0cy0+bmlnX3RpbWVyX21heCkgeworCQkJZXN0YXRzLT5uaWdfdGltZXJfbWF4ID0gbmlnX3RpbWVyX21heDsKKwkJCUJOWDJYX0VSUigiTklHIHRpbWVyIG1heCAoJXUpXG4iLAorCQkJCSAgZXN0YXRzLT5uaWdfdGltZXJfbWF4KTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJueDJ4X3N0b3JtX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCBldGhfc3RhdHNfcXVlcnkgKnN0YXRzID0gYm54Mnhfc3AoYnAsIGZ3X3N0YXRzKTsKKwlzdHJ1Y3QgdHN0b3JtX3Blcl9wb3J0X3N0YXRzICp0cG9ydCA9CisJCQkJCSZzdGF0cy0+dHN0b3JtX2NvbW1vbi5wb3J0X3N0YXRpc3RpY3M7CisJc3RydWN0IGhvc3RfZnVuY19zdGF0cyAqZnN0YXRzID0gYm54Mnhfc3AoYnAsIGZ1bmNfc3RhdHMpOworCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9ICZicC0+ZXRoX3N0YXRzOworCWludCBpOworCXUxNiBjdXJfc3RhdHNfY291bnRlcjsKKworCS8qIE1ha2Ugc3VyZSB3ZSB1c2UgdGhlIHZhbHVlIG9mIHRoZSBjb3VudGVyCisJICogdXNlZCBmb3Igc2VuZGluZyB0aGUgbGFzdCBzdGF0cyByYW1yb2QuCisJICovCisJc3Bpbl9sb2NrX2JoKCZicC0+c3RhdHNfbG9jayk7CisJY3VyX3N0YXRzX2NvdW50ZXIgPSBicC0+c3RhdHNfY291bnRlciAtIDE7CisJc3Bpbl91bmxvY2tfYmgoJmJwLT5zdGF0c19sb2NrKTsKKworCW1lbWNweSgmKGZzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGkpLAorCSAgICAgICAmKGJueDJ4X3NwKGJwLCBmdW5jX3N0YXRzX2Jhc2UpLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSksCisJICAgICAgIHNpemVvZihzdHJ1Y3QgaG9zdF9mdW5jX3N0YXRzKSAtIDIqc2l6ZW9mKHUzMikpOworCWVzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGkgPSAwOworCWVzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfbG8gPSAwOworCWVzdGF0cy0+ZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfaGkgPSAwOworCWVzdGF0cy0+ZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfbG8gPSAwOworCWVzdGF0cy0+bm9fYnVmZl9kaXNjYXJkX2hpID0gMDsKKwllc3RhdHMtPm5vX2J1ZmZfZGlzY2FyZF9sbyA9IDA7CisKKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKKwkJaW50IGNsX2lkID0gZnAtPmNsX2lkOworCQlzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKnRjbGllbnQgPQorCQkJCSZzdGF0cy0+dHN0b3JtX2NvbW1vbi5jbGllbnRfc3RhdGlzdGljc1tjbF9pZF07CisJCXN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqb2xkX3RjbGllbnQgPSAmZnAtPm9sZF90Y2xpZW50OworCQlzdHJ1Y3QgdXN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKnVjbGllbnQgPQorCQkJCSZzdGF0cy0+dXN0b3JtX2NvbW1vbi5jbGllbnRfc3RhdGlzdGljc1tjbF9pZF07CisJCXN0cnVjdCB1c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqb2xkX3VjbGllbnQgPSAmZnAtPm9sZF91Y2xpZW50OworCQlzdHJ1Y3QgeHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKnhjbGllbnQgPQorCQkJCSZzdGF0cy0+eHN0b3JtX2NvbW1vbi5jbGllbnRfc3RhdGlzdGljc1tjbF9pZF07CisJCXN0cnVjdCB4c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqb2xkX3hjbGllbnQgPSAmZnAtPm9sZF94Y2xpZW50OworCQlzdHJ1Y3QgYm54MnhfZXRoX3Ffc3RhdHMgKnFzdGF0cyA9ICZmcC0+ZXRoX3Ffc3RhdHM7CisJCXUzMiBkaWZmOworCisJCS8qIGFyZSBzdG9ybSBzdGF0cyB2YWxpZD8gKi8KKwkJaWYgKGxlMTZfdG9fY3B1KHhjbGllbnQtPnN0YXRzX2NvdW50ZXIpICE9IGN1cl9zdGF0c19jb3VudGVyKSB7CisJCQlEUChCTlgyWF9NU0dfU1RBVFMsICJbJWRdIHN0YXRzIG5vdCB1cGRhdGVkIGJ5IHhzdG9ybSIKKwkJCSAgICIgIHhzdG9ybSBjb3VudGVyICgweCV4KSAhPSBzdGF0c19jb3VudGVyICgweCV4KVxuIiwKKwkJCSAgIGksIHhjbGllbnQtPnN0YXRzX2NvdW50ZXIsIGN1cl9zdGF0c19jb3VudGVyICsgMSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJaWYgKGxlMTZfdG9fY3B1KHRjbGllbnQtPnN0YXRzX2NvdW50ZXIpICE9IGN1cl9zdGF0c19jb3VudGVyKSB7CisJCQlEUChCTlgyWF9NU0dfU1RBVFMsICJbJWRdIHN0YXRzIG5vdCB1cGRhdGVkIGJ5IHRzdG9ybSIKKwkJCSAgICIgIHRzdG9ybSBjb3VudGVyICgweCV4KSAhPSBzdGF0c19jb3VudGVyICgweCV4KVxuIiwKKwkJCSAgIGksIHRjbGllbnQtPnN0YXRzX2NvdW50ZXIsIGN1cl9zdGF0c19jb3VudGVyICsgMSk7CisJCQlyZXR1cm4gLTI7CisJCX0KKwkJaWYgKGxlMTZfdG9fY3B1KHVjbGllbnQtPnN0YXRzX2NvdW50ZXIpICE9IGN1cl9zdGF0c19jb3VudGVyKSB7CisJCQlEUChCTlgyWF9NU0dfU1RBVFMsICJbJWRdIHN0YXRzIG5vdCB1cGRhdGVkIGJ5IHVzdG9ybSIKKwkJCSAgICIgIHVzdG9ybSBjb3VudGVyICgweCV4KSAhPSBzdGF0c19jb3VudGVyICgweCV4KVxuIiwKKwkJCSAgIGksIHVjbGllbnQtPnN0YXRzX2NvdW50ZXIsIGN1cl9zdGF0c19jb3VudGVyICsgMSk7CisJCQlyZXR1cm4gLTQ7CisJCX0KKworCQlxc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpID0KKwkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl9icm9hZGNhc3RfYnl0ZXMuaGkpOworCQlxc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvID0KKwkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl9icm9hZGNhc3RfYnl0ZXMubG8pOworCisJCUFERF82NChxc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgbGUzMl90b19jcHUodGNsaWVudC0+cmN2X211bHRpY2FzdF9ieXRlcy5oaSksCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvLAorCQkgICAgICAgbGUzMl90b19jcHUodGNsaWVudC0+cmN2X211bHRpY2FzdF9ieXRlcy5sbykpOworCisJCUFERF82NChxc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgbGUzMl90b19jcHUodGNsaWVudC0+cmN2X3VuaWNhc3RfYnl0ZXMuaGkpLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9sbywKKwkJICAgICAgIGxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl91bmljYXN0X2J5dGVzLmxvKSk7CisKKwkJU1VCXzY0KHFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBsZTMyX3RvX2NwdSh1Y2xpZW50LT5iY2FzdF9ub19idWZmX2J5dGVzLmhpKSwKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfbG8sCisJCSAgICAgICBsZTMyX3RvX2NwdSh1Y2xpZW50LT5iY2FzdF9ub19idWZmX2J5dGVzLmxvKSk7CisKKwkJU1VCXzY0KHFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBsZTMyX3RvX2NwdSh1Y2xpZW50LT5tY2FzdF9ub19idWZmX2J5dGVzLmhpKSwKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfbG8sCisJCSAgICAgICBsZTMyX3RvX2NwdSh1Y2xpZW50LT5tY2FzdF9ub19idWZmX2J5dGVzLmxvKSk7CisKKwkJU1VCXzY0KHFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBsZTMyX3RvX2NwdSh1Y2xpZW50LT51Y2FzdF9ub19idWZmX2J5dGVzLmhpKSwKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfbG8sCisJCSAgICAgICBsZTMyX3RvX2NwdSh1Y2xpZW50LT51Y2FzdF9ub19idWZmX2J5dGVzLmxvKSk7CisKKwkJcXN0YXRzLT52YWxpZF9ieXRlc19yZWNlaXZlZF9oaSA9CisJCQkJCXFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGk7CisJCXFzdGF0cy0+dmFsaWRfYnl0ZXNfcmVjZWl2ZWRfbG8gPQorCQkJCQlxc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvOworCisJCXFzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGkgPQorCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl9lcnJvcl9ieXRlcy5oaSk7CisJCXFzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfbG8gPQorCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl9lcnJvcl9ieXRlcy5sbyk7CisKKwkJQUREXzY0KHFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBxc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9sbywKKwkJICAgICAgIHFzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfbG8pOworCisJCVVQREFURV9FWFRFTkRfVFNUQVQocmN2X3VuaWNhc3RfcGt0cywKKwkJCQkJdG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKKwkJVVBEQVRFX0VYVEVORF9UU1RBVChyY3ZfbXVsdGljYXN0X3BrdHMsCisJCQkJCXRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKKwkJVVBEQVRFX0VYVEVORF9UU1RBVChyY3ZfYnJvYWRjYXN0X3BrdHMsCisJCQkJCXRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKKwkJVVBEQVRFX0VYVEVORF9UU1RBVChwYWNrZXRzX3Rvb19iaWdfZGlzY2FyZCwKKwkJCQkJZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHMpOworCQlVUERBVEVfRVhURU5EX1RTVEFUKG5vX2J1ZmZfZGlzY2FyZCwgbm9fYnVmZl9kaXNjYXJkKTsKKworCQlTVUJfRVhURU5EX1VTVEFUKHVjYXN0X25vX2J1ZmZfcGt0cywKKwkJCQkJdG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKKwkJU1VCX0VYVEVORF9VU1RBVChtY2FzdF9ub19idWZmX3BrdHMsCisJCQkJCXRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKKwkJU1VCX0VYVEVORF9VU1RBVChiY2FzdF9ub19idWZmX3BrdHMsCisJCQkJCXRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKKwkJVVBEQVRFX0VYVEVORF9VU1RBVCh1Y2FzdF9ub19idWZmX3BrdHMsIG5vX2J1ZmZfZGlzY2FyZCk7CisJCVVQREFURV9FWFRFTkRfVVNUQVQobWNhc3Rfbm9fYnVmZl9wa3RzLCBub19idWZmX2Rpc2NhcmQpOworCQlVUERBVEVfRVhURU5EX1VTVEFUKGJjYXN0X25vX2J1ZmZfcGt0cywgbm9fYnVmZl9kaXNjYXJkKTsKKworCQlxc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpID0KKwkJCQlsZTMyX3RvX2NwdSh4Y2xpZW50LT51bmljYXN0X2J5dGVzX3NlbnQuaGkpOworCQlxc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2xvID0KKwkJCQlsZTMyX3RvX2NwdSh4Y2xpZW50LT51bmljYXN0X2J5dGVzX3NlbnQubG8pOworCisJCUFERF82NChxc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpLAorCQkgICAgICAgbGUzMl90b19jcHUoeGNsaWVudC0+bXVsdGljYXN0X2J5dGVzX3NlbnQuaGkpLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9sbywKKwkJICAgICAgIGxlMzJfdG9fY3B1KHhjbGllbnQtPm11bHRpY2FzdF9ieXRlc19zZW50LmxvKSk7CisKKwkJQUREXzY0KHFzdGF0cy0+dG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfaGksCisJCSAgICAgICBsZTMyX3RvX2NwdSh4Y2xpZW50LT5icm9hZGNhc3RfYnl0ZXNfc2VudC5oaSksCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2xvLAorCQkgICAgICAgbGUzMl90b19jcHUoeGNsaWVudC0+YnJvYWRjYXN0X2J5dGVzX3NlbnQubG8pKTsKKworCQlVUERBVEVfRVhURU5EX1hTVEFUKHVuaWNhc3RfcGt0c19zZW50LAorCQkJCQl0b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWQpOworCQlVUERBVEVfRVhURU5EX1hTVEFUKG11bHRpY2FzdF9wa3RzX3NlbnQsCisJCQkJCXRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkKTsKKwkJVVBEQVRFX0VYVEVORF9YU1RBVChicm9hZGNhc3RfcGt0c19zZW50LAorCQkJCQl0b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZCk7CisKKwkJb2xkX3RjbGllbnQtPmNoZWNrc3VtX2Rpc2NhcmQgPSB0Y2xpZW50LT5jaGVja3N1bV9kaXNjYXJkOworCQlvbGRfdGNsaWVudC0+dHRsMF9kaXNjYXJkID0gdGNsaWVudC0+dHRsMF9kaXNjYXJkOworCisJCUFERF82NChmc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSwKKwkJICAgICAgIGZzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfbG8sCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvKTsKKwkJQUREXzY0KGZzdGF0cy0+dG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfaGksCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpLAorCQkgICAgICAgZnN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9sbywKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfbG8pOworCQlBRERfNjQoZnN0YXRzLT50b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSwKKwkJICAgICAgIGZzdGF0cy0+dG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2xvLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG8pOworCQlBRERfNjQoZnN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSwKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBmc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2xvLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZF9sbyk7CisJCUFERF82NChmc3RhdHMtPnRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSwKKwkJICAgICAgIGZzdGF0cy0+dG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG8sCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2xvKTsKKwkJQUREXzY0KGZzdGF0cy0+dG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGksCisJCSAgICAgICBmc3RhdHMtPnRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbywKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2xvKTsKKwkJQUREXzY0KGZzdGF0cy0+dG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGksCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpLAorCQkgICAgICAgZnN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbywKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG8pOworCQlBRERfNjQoZnN0YXRzLT50b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSwKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGksCisJCSAgICAgICBmc3RhdHMtPnRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2xvLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbyk7CisJCUFERF82NChmc3RhdHMtPnZhbGlkX2J5dGVzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgcXN0YXRzLT52YWxpZF9ieXRlc19yZWNlaXZlZF9oaSwKKwkJICAgICAgIGZzdGF0cy0+dmFsaWRfYnl0ZXNfcmVjZWl2ZWRfbG8sCisJCSAgICAgICBxc3RhdHMtPnZhbGlkX2J5dGVzX3JlY2VpdmVkX2xvKTsKKworCQlBRERfNjQoZXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9oaSwKKwkJICAgICAgIHFzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBlc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2xvLAorCQkgICAgICAgcXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9sbyk7CisJCUFERF82NChlc3RhdHMtPmV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2hpLAorCQkgICAgICAgcXN0YXRzLT5ldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19oaSwKKwkJICAgICAgIGVzdGF0cy0+ZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfbG8sCisJCSAgICAgICBxc3RhdHMtPmV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2xvKTsKKwkJQUREXzY0KGVzdGF0cy0+bm9fYnVmZl9kaXNjYXJkX2hpLCBxc3RhdHMtPm5vX2J1ZmZfZGlzY2FyZF9oaSwKKwkJICAgICAgIGVzdGF0cy0+bm9fYnVmZl9kaXNjYXJkX2xvLCBxc3RhdHMtPm5vX2J1ZmZfZGlzY2FyZF9sbyk7CisJfQorCisJQUREXzY0KGZzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGksCisJICAgICAgIGVzdGF0cy0+cnhfc3RhdF9pZmhjaW5iYWRvY3RldHNfaGksCisJICAgICAgIGZzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfbG8sCisJICAgICAgIGVzdGF0cy0+cnhfc3RhdF9pZmhjaW5iYWRvY3RldHNfbG8pOworCisJbWVtY3B5KGVzdGF0cywgJihmc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpKSwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBob3N0X2Z1bmNfc3RhdHMpIC0gMipzaXplb2YodTMyKSk7CisKKwlBRERfNjQoZXN0YXRzLT5ldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19oaSwKKwkgICAgICAgZXN0YXRzLT5yeF9zdGF0X2RvdDNzdGF0c2ZyYW1lc3Rvb2xvbmdfaGksCisJICAgICAgIGVzdGF0cy0+ZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfbG8sCisJICAgICAgIGVzdGF0cy0+cnhfc3RhdF9kb3Qzc3RhdHNmcmFtZXN0b29sb25nX2xvKTsKKwlBRERfNjQoZXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9oaSwKKwkgICAgICAgZXN0YXRzLT5yeF9zdGF0X2lmaGNpbmJhZG9jdGV0c19oaSwKKwkgICAgICAgZXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9sbywKKwkgICAgICAgZXN0YXRzLT5yeF9zdGF0X2lmaGNpbmJhZG9jdGV0c19sbyk7CisKKwlpZiAoYnAtPnBvcnQucG1mKSB7CisJCWVzdGF0cy0+bWFjX2ZpbHRlcl9kaXNjYXJkID0KKwkJCQlsZTMyX3RvX2NwdSh0cG9ydC0+bWFjX2ZpbHRlcl9kaXNjYXJkKTsKKwkJZXN0YXRzLT54eG92ZXJmbG93X2Rpc2NhcmQgPQorCQkJCWxlMzJfdG9fY3B1KHRwb3J0LT54eG92ZXJmbG93X2Rpc2NhcmQpOworCQllc3RhdHMtPmJyYl90cnVuY2F0ZV9kaXNjYXJkID0KKwkJCQlsZTMyX3RvX2NwdSh0cG9ydC0+YnJiX3RydW5jYXRlX2Rpc2NhcmQpOworCQllc3RhdHMtPm1hY19kaXNjYXJkID0gbGUzMl90b19jcHUodHBvcnQtPm1hY19kaXNjYXJkKTsKKwl9CisKKwlmc3RhdHMtPmhvc3RfZnVuY19zdGF0c19zdGFydCA9ICsrZnN0YXRzLT5ob3N0X2Z1bmNfc3RhdHNfZW5kOworCisJYnAtPnN0YXRzX3BlbmRpbmcgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X25ldF9zdGF0c191cGRhdGUoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzICplc3RhdHMgPSAmYnAtPmV0aF9zdGF0czsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbnN0YXRzID0gJmJwLT5kZXYtPnN0YXRzOworCWludCBpOworCisJbnN0YXRzLT5yeF9wYWNrZXRzID0KKwkJYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpICsKKwkJYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSkgKworCQlibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKTsKKworCW5zdGF0cy0+dHhfcGFja2V0cyA9CisJCWJueDJ4X2hpbG8oJmVzdGF0cy0+dG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKSArCisJCWJueDJ4X2hpbG8oJmVzdGF0cy0+dG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGkpICsKKwkJYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSk7CisKKwluc3RhdHMtPnJ4X2J5dGVzID0gYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSk7CisKKwluc3RhdHMtPnR4X2J5dGVzID0gYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSk7CisKKwluc3RhdHMtPnJ4X2Ryb3BwZWQgPSBlc3RhdHMtPm1hY19kaXNjYXJkOworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCQluc3RhdHMtPnJ4X2Ryb3BwZWQgKz0KKwkJCWxlMzJfdG9fY3B1KGJwLT5mcFtpXS5vbGRfdGNsaWVudC5jaGVja3N1bV9kaXNjYXJkKTsKKworCW5zdGF0cy0+dHhfZHJvcHBlZCA9IDA7CisKKwluc3RhdHMtPm11bHRpY2FzdCA9CisJCWJueDJ4X2hpbG8oJmVzdGF0cy0+dG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpOworCisJbnN0YXRzLT5jb2xsaXNpb25zID0KKwkJYm54MnhfaGlsbygmZXN0YXRzLT50eF9zdGF0X2V0aGVyc3RhdHNjb2xsaXNpb25zX2hpKTsKKworCW5zdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycyA9CisJCWJueDJ4X2hpbG8oJmVzdGF0cy0+cnhfc3RhdF9ldGhlcnN0YXRzdW5kZXJzaXplcGt0c19oaSkgKworCQlibngyeF9oaWxvKCZlc3RhdHMtPmV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2hpKTsKKwluc3RhdHMtPnJ4X292ZXJfZXJyb3JzID0gYm54MnhfaGlsbygmZXN0YXRzLT5icmJfZHJvcF9oaSkgKworCQkJCSBibngyeF9oaWxvKCZlc3RhdHMtPmJyYl90cnVuY2F0ZV9oaSk7CisJbnN0YXRzLT5yeF9jcmNfZXJyb3JzID0KKwkJYm54MnhfaGlsbygmZXN0YXRzLT5yeF9zdGF0X2RvdDNzdGF0c2Zjc2Vycm9yc19oaSk7CisJbnN0YXRzLT5yeF9mcmFtZV9lcnJvcnMgPQorCQlibngyeF9oaWxvKCZlc3RhdHMtPnJ4X3N0YXRfZG90M3N0YXRzYWxpZ25tZW50ZXJyb3JzX2hpKTsKKwluc3RhdHMtPnJ4X2ZpZm9fZXJyb3JzID0gYm54MnhfaGlsbygmZXN0YXRzLT5ub19idWZmX2Rpc2NhcmRfaGkpOworCW5zdGF0cy0+cnhfbWlzc2VkX2Vycm9ycyA9IGVzdGF0cy0+eHhvdmVyZmxvd19kaXNjYXJkOworCisJbnN0YXRzLT5yeF9lcnJvcnMgPSBuc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMgKworCQkJICAgIG5zdGF0cy0+cnhfb3Zlcl9lcnJvcnMgKworCQkJICAgIG5zdGF0cy0+cnhfY3JjX2Vycm9ycyArCisJCQkgICAgbnN0YXRzLT5yeF9mcmFtZV9lcnJvcnMgKworCQkJICAgIG5zdGF0cy0+cnhfZmlmb19lcnJvcnMgKworCQkJICAgIG5zdGF0cy0+cnhfbWlzc2VkX2Vycm9yczsKKworCW5zdGF0cy0+dHhfYWJvcnRlZF9lcnJvcnMgPQorCQlibngyeF9oaWxvKCZlc3RhdHMtPnR4X3N0YXRfZG90M3N0YXRzbGF0ZWNvbGxpc2lvbnNfaGkpICsKKwkJYm54MnhfaGlsbygmZXN0YXRzLT50eF9zdGF0X2RvdDNzdGF0c2V4Y2Vzc2l2ZWNvbGxpc2lvbnNfaGkpOworCW5zdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMgPQorCQlibngyeF9oaWxvKCZlc3RhdHMtPnJ4X3N0YXRfZG90M3N0YXRzY2FycmllcnNlbnNlZXJyb3JzX2hpKTsKKwluc3RhdHMtPnR4X2ZpZm9fZXJyb3JzID0gMDsKKwluc3RhdHMtPnR4X2hlYXJ0YmVhdF9lcnJvcnMgPSAwOworCW5zdGF0cy0+dHhfd2luZG93X2Vycm9ycyA9IDA7CisKKwluc3RhdHMtPnR4X2Vycm9ycyA9IG5zdGF0cy0+dHhfYWJvcnRlZF9lcnJvcnMgKworCQkJICAgIG5zdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMgKworCSAgICBibngyeF9oaWxvKCZlc3RhdHMtPnR4X3N0YXRfZG90M3N0YXRzaW50ZXJuYWxtYWN0cmFuc21pdGVycm9yc19oaSk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2Rydl9zdGF0c191cGRhdGUoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzICplc3RhdHMgPSAmYnAtPmV0aF9zdGF0czsKKwlpbnQgaTsKKworCWVzdGF0cy0+ZHJpdmVyX3hvZmYgPSAwOworCWVzdGF0cy0+cnhfZXJyX2Rpc2NhcmRfcGt0ID0gMDsKKwllc3RhdHMtPnJ4X3NrYl9hbGxvY19mYWlsZWQgPSAwOworCWVzdGF0cy0+aHdfY3N1bV9lcnIgPSAwOworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCXN0cnVjdCBibngyeF9ldGhfcV9zdGF0cyAqcXN0YXRzID0gJmJwLT5mcFtpXS5ldGhfcV9zdGF0czsKKworCQllc3RhdHMtPmRyaXZlcl94b2ZmICs9IHFzdGF0cy0+ZHJpdmVyX3hvZmY7CisJCWVzdGF0cy0+cnhfZXJyX2Rpc2NhcmRfcGt0ICs9IHFzdGF0cy0+cnhfZXJyX2Rpc2NhcmRfcGt0OworCQllc3RhdHMtPnJ4X3NrYl9hbGxvY19mYWlsZWQgKz0gcXN0YXRzLT5yeF9za2JfYWxsb2NfZmFpbGVkOworCQllc3RhdHMtPmh3X2NzdW1fZXJyICs9IHFzdGF0cy0+aHdfY3N1bV9lcnI7CisJfQorfQorCitzdGF0aWMgdm9pZCBibngyeF9zdGF0c191cGRhdGUoc3RydWN0IGJueDJ4ICpicCkKK3sKKwl1MzIgKnN0YXRzX2NvbXAgPSBibngyeF9zcChicCwgc3RhdHNfY29tcCk7CisKKwlpZiAoKnN0YXRzX2NvbXAgIT0gRE1BRV9DT01QX1ZBTCkKKwkJcmV0dXJuOworCisJaWYgKGJwLT5wb3J0LnBtZikKKwkJYm54MnhfaHdfc3RhdHNfdXBkYXRlKGJwKTsKKworCWlmIChibngyeF9zdG9ybV9zdGF0c191cGRhdGUoYnApICYmIChicC0+c3RhdHNfcGVuZGluZysrID09IDMpKSB7CisJCUJOWDJYX0VSUigic3Rvcm0gc3RhdHMgd2VyZSBub3QgdXBkYXRlZCBmb3IgMyB0aW1lc1xuIik7CisJCWJueDJ4X3BhbmljKCk7CisJCXJldHVybjsKKwl9CisKKwlibngyeF9uZXRfc3RhdHNfdXBkYXRlKGJwKTsKKwlibngyeF9kcnZfc3RhdHNfdXBkYXRlKGJwKTsKKworCWlmIChuZXRpZl9tc2dfdGltZXIoYnApKSB7CisJCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9ICZicC0+ZXRoX3N0YXRzOworCQlpbnQgaTsKKworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJyYiBkcm9wcyAldSAgYnJiIHRydW5jYXRlICV1XG4iLAorCQkgICAgICAgYnAtPmRldi0+bmFtZSwKKwkJICAgICAgIGVzdGF0cy0+YnJiX2Ryb3BfbG8sIGVzdGF0cy0+YnJiX3RydW5jYXRlX2xvKTsKKworCQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CisJCQlzdHJ1Y3QgYm54MnhfZXRoX3Ffc3RhdHMgKnFzdGF0cyA9ICZmcC0+ZXRoX3Ffc3RhdHM7CisKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogcnggdXNhZ2UoJTR1KSAgKnJ4X2NvbnNfc2IoJXUpIgorCQkJCQkgICIgIHJ4IHBrdCglbHUpICByeCBjYWxscyglbHUgJWx1KVxuIiwKKwkJCSAgICAgICBmcC0+bmFtZSwgKGxlMTZfdG9fY3B1KCpmcC0+cnhfY29uc19zYikgLQorCQkJICAgICAgIGZwLT5yeF9jb21wX2NvbnMpLAorCQkJICAgICAgIGxlMTZfdG9fY3B1KCpmcC0+cnhfY29uc19zYiksCisJCQkgICAgICAgYm54MnhfaGlsbygmcXN0YXRzLT4KKwkJCQkJICB0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAorCQkJICAgICAgIGZwLT5yeF9jYWxscywgZnAtPnJ4X3BrdCk7CisJCX0KKworCQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CisJCQlzdHJ1Y3QgYm54MnhfZXRoX3Ffc3RhdHMgKnFzdGF0cyA9ICZmcC0+ZXRoX3Ffc3RhdHM7CisJCQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEgPQorCQkJCW5ldGRldl9nZXRfdHhfcXVldWUoYnAtPmRldiwgaSk7CisKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdHggYXZhaWwoJTR1KSAgKnR4X2NvbnNfc2IoJXUpIgorCQkJCQkgICIgIHR4IHBrdCglbHUpIHR4IGNhbGxzICglbHUpIgorCQkJCQkgICIgICVzIChYb2ZmIGV2ZW50cyAldSlcbiIsCisJCQkgICAgICAgZnAtPm5hbWUsIGJueDJ4X3R4X2F2YWlsKGZwKSwKKwkJCSAgICAgICBsZTE2X3RvX2NwdSgqZnAtPnR4X2NvbnNfc2IpLAorCQkJICAgICAgIGJueDJ4X2hpbG8oJnFzdGF0cy0+CisJCQkJCSAgdG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKSwKKwkJCSAgICAgICBmcC0+dHhfcGt0LAorCQkJICAgICAgIChuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkgPyAiWG9mZiIgOiAiWG9uIiksCisJCQkgICAgICAgcXN0YXRzLT5kcml2ZXJfeG9mZik7CisJCX0KKwl9CisKKwlibngyeF9od19zdGF0c19wb3N0KGJwKTsKKwlibngyeF9zdG9ybV9zdGF0c19wb3N0KGJwKTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfcG9ydF9zdGF0c19zdG9wKHN0cnVjdCBibngyeCAqYnApCit7CisJc3RydWN0IGRtYWVfY29tbWFuZCAqZG1hZTsKKwl1MzIgb3Bjb2RlOworCWludCBsb2FkZXJfaWR4ID0gUE1GX0RNQUVfQyhicCk7CisJdTMyICpzdGF0c19jb21wID0gYm54Mnhfc3AoYnAsIHN0YXRzX2NvbXApOworCisJYnAtPmV4ZWN1dGVyX2lkeCA9IDA7CisKKwlvcGNvZGUgPSAoRE1BRV9DTURfU1JDX1BDSSB8IERNQUVfQ01EX0RTVF9HUkMgfAorCQkgIERNQUVfQ01EX0NfRU5BQkxFIHwKKwkJICBETUFFX0NNRF9TUkNfUkVTRVQgfCBETUFFX0NNRF9EU1RfUkVTRVQgfAorI2lmZGVmIF9fQklHX0VORElBTgorCQkgIERNQUVfQ01EX0VORElBTklUWV9CX0RXX1NXQVAgfAorI2Vsc2UKKwkJICBETUFFX0NNRF9FTkRJQU5JVFlfRFdfU1dBUCB8CisjZW5kaWYKKwkJICAoQlBfUE9SVChicCkgPyBETUFFX0NNRF9QT1JUXzEgOiBETUFFX0NNRF9QT1JUXzApIHwKKwkJICAoQlBfRTFIVk4oYnApIDw8IERNQUVfQ01EX0UxSFZOX1NISUZUKSk7CisKKwlpZiAoYnAtPnBvcnQucG9ydF9zdHgpIHsKKworCQlkbWFlID0gYm54Mnhfc3AoYnAsIGRtYWVbYnAtPmV4ZWN1dGVyX2lkeCsrXSk7CisJCWlmIChicC0+ZnVuY19zdHgpCisJCQlkbWFlLT5vcGNvZGUgPSAob3Bjb2RlIHwgRE1BRV9DTURfQ19EU1RfR1JDKTsKKwkJZWxzZQorCQkJZG1hZS0+b3Bjb2RlID0gKG9wY29kZSB8IERNQUVfQ01EX0NfRFNUX1BDSSk7CisJCWRtYWUtPnNyY19hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIHBvcnRfc3RhdHMpKTsKKwkJZG1hZS0+c3JjX2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgcG9ydF9zdGF0cykpOworCQlkbWFlLT5kc3RfYWRkcl9sbyA9IGJwLT5wb3J0LnBvcnRfc3R4ID4+IDI7CisJCWRtYWUtPmRzdF9hZGRyX2hpID0gMDsKKwkJZG1hZS0+bGVuID0gc2l6ZW9mKHN0cnVjdCBob3N0X3BvcnRfc3RhdHMpID4+IDI7CisJCWlmIChicC0+ZnVuY19zdHgpIHsKKwkJCWRtYWUtPmNvbXBfYWRkcl9sbyA9IGRtYWVfcmVnX2dvX2NbbG9hZGVyX2lkeF0gPj4gMjsKKwkJCWRtYWUtPmNvbXBfYWRkcl9oaSA9IDA7CisJCQlkbWFlLT5jb21wX3ZhbCA9IDE7CisJCX0gZWxzZSB7CisJCQlkbWFlLT5jb21wX2FkZHJfbG8gPQorCQkJCVU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBzdGF0c19jb21wKSk7CisJCQlkbWFlLT5jb21wX2FkZHJfaGkgPQorCQkJCVU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBzdGF0c19jb21wKSk7CisJCQlkbWFlLT5jb21wX3ZhbCA9IERNQUVfQ09NUF9WQUw7CisKKwkJCSpzdGF0c19jb21wID0gMDsKKwkJfQorCX0KKworCWlmIChicC0+ZnVuY19zdHgpIHsKKworCQlkbWFlID0gYm54Mnhfc3AoYnAsIGRtYWVbYnAtPmV4ZWN1dGVyX2lkeCsrXSk7CisJCWRtYWUtPm9wY29kZSA9IChvcGNvZGUgfCBETUFFX0NNRF9DX0RTVF9QQ0kpOworCQlkbWFlLT5zcmNfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBmdW5jX3N0YXRzKSk7CisJCWRtYWUtPnNyY19hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIGZ1bmNfc3RhdHMpKTsKKwkJZG1hZS0+ZHN0X2FkZHJfbG8gPSBicC0+ZnVuY19zdHggPj4gMjsKKwkJZG1hZS0+ZHN0X2FkZHJfaGkgPSAwOworCQlkbWFlLT5sZW4gPSBzaXplb2Yoc3RydWN0IGhvc3RfZnVuY19zdGF0cykgPj4gMjsKKwkJZG1hZS0+Y29tcF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIHN0YXRzX2NvbXApKTsKKwkJZG1hZS0+Y29tcF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIHN0YXRzX2NvbXApKTsKKwkJZG1hZS0+Y29tcF92YWwgPSBETUFFX0NPTVBfVkFMOworCisJCSpzdGF0c19jb21wID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3N0YXRzX3N0b3Aoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgdXBkYXRlID0gMDsKKworCWJueDJ4X3N0YXRzX2NvbXAoYnApOworCisJaWYgKGJwLT5wb3J0LnBtZikKKwkJdXBkYXRlID0gKGJueDJ4X2h3X3N0YXRzX3VwZGF0ZShicCkgPT0gMCk7CisKKwl1cGRhdGUgfD0gKGJueDJ4X3N0b3JtX3N0YXRzX3VwZGF0ZShicCkgPT0gMCk7CisKKwlpZiAodXBkYXRlKSB7CisJCWJueDJ4X25ldF9zdGF0c191cGRhdGUoYnApOworCisJCWlmIChicC0+cG9ydC5wbWYpCisJCQlibngyeF9wb3J0X3N0YXRzX3N0b3AoYnApOworCisJCWJueDJ4X2h3X3N0YXRzX3Bvc3QoYnApOworCQlibngyeF9zdGF0c19jb21wKGJwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3N0YXRzX2RvX25vdGhpbmcoc3RydWN0IGJueDJ4ICpicCkKK3sKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJdm9pZCAoKmFjdGlvbikoc3RydWN0IGJueDJ4ICpicCk7CisJZW51bSBibngyeF9zdGF0c19zdGF0ZSBuZXh0X3N0YXRlOworfSBibngyeF9zdGF0c19zdG1bU1RBVFNfU1RBVEVfTUFYXVtTVEFUU19FVkVOVF9NQVhdID0geworLyogc3RhdGUJZXZlbnQJKi8KK3sKKy8qIERJU0FCTEVECVBNRgkqLyB7Ym54Mnhfc3RhdHNfcG1mX3VwZGF0ZSwgU1RBVFNfU1RBVEVfRElTQUJMRUR9LAorLyoJCUxJTktfVVAJKi8ge2JueDJ4X3N0YXRzX3N0YXJ0LCAgICAgIFNUQVRTX1NUQVRFX0VOQUJMRUR9LAorLyoJCVVQREFURQkqLyB7Ym54Mnhfc3RhdHNfZG9fbm90aGluZywgU1RBVFNfU1RBVEVfRElTQUJMRUR9LAorLyoJCVNUT1AJKi8ge2JueDJ4X3N0YXRzX2RvX25vdGhpbmcsIFNUQVRTX1NUQVRFX0RJU0FCTEVEfQorfSwKK3sKKy8qIEVOQUJMRUQJUE1GCSovIHtibngyeF9zdGF0c19wbWZfc3RhcnQsICBTVEFUU19TVEFURV9FTkFCTEVEfSwKKy8qCQlMSU5LX1VQCSovIHtibngyeF9zdGF0c19yZXN0YXJ0LCAgICBTVEFUU19TVEFURV9FTkFCTEVEfSwKKy8qCQlVUERBVEUJKi8ge2JueDJ4X3N0YXRzX3VwZGF0ZSwgICAgIFNUQVRTX1NUQVRFX0VOQUJMRUR9LAorLyoJCVNUT1AJKi8ge2JueDJ4X3N0YXRzX3N0b3AsICAgICAgIFNUQVRTX1NUQVRFX0RJU0FCTEVEfQorfQorfTsKKwordm9pZCBibngyeF9zdGF0c19oYW5kbGUoc3RydWN0IGJueDJ4ICpicCwgZW51bSBibngyeF9zdGF0c19ldmVudCBldmVudCkKK3sKKwllbnVtIGJueDJ4X3N0YXRzX3N0YXRlIHN0YXRlOworCisJaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCisJCXJldHVybjsKKworCS8qIFByb3RlY3QgYSBzdGF0ZSBjaGFuZ2UgZmxvdyAqLworCXNwaW5fbG9ja19iaCgmYnAtPnN0YXRzX2xvY2spOworCXN0YXRlID0gYnAtPnN0YXRzX3N0YXRlOworCWJwLT5zdGF0c19zdGF0ZSA9IGJueDJ4X3N0YXRzX3N0bVtzdGF0ZV1bZXZlbnRdLm5leHRfc3RhdGU7CisJc3Bpbl91bmxvY2tfYmgoJmJwLT5zdGF0c19sb2NrKTsKKworCWJueDJ4X3N0YXRzX3N0bVtzdGF0ZV1bZXZlbnRdLmFjdGlvbihicCk7CisKKwlpZiAoKGV2ZW50ICE9IFNUQVRTX0VWRU5UX1VQREFURSkgfHwgbmV0aWZfbXNnX3RpbWVyKGJwKSkKKwkJRFAoQk5YMlhfTVNHX1NUQVRTLCAic3RhdGUgJWQgLT4gZXZlbnQgJWQgLT4gc3RhdGUgJWRcbiIsCisJCSAgIHN0YXRlLCBldmVudCwgYnAtPnN0YXRzX3N0YXRlKTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfcG9ydF9zdGF0c19iYXNlX2luaXQoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlzdHJ1Y3QgZG1hZV9jb21tYW5kICpkbWFlOworCXUzMiAqc3RhdHNfY29tcCA9IGJueDJ4X3NwKGJwLCBzdGF0c19jb21wKTsKKworCS8qIHNhbml0eSAqLworCWlmICghYnAtPnBvcnQucG1mIHx8ICFicC0+cG9ydC5wb3J0X3N0eCkgeworCQlCTlgyWF9FUlIoIkJVRyFcbiIpOworCQlyZXR1cm47CisJfQorCisJYnAtPmV4ZWN1dGVyX2lkeCA9IDA7CisKKwlkbWFlID0gYm54Mnhfc3AoYnAsIGRtYWVbYnAtPmV4ZWN1dGVyX2lkeCsrXSk7CisJZG1hZS0+b3Bjb2RlID0gKERNQUVfQ01EX1NSQ19QQ0kgfCBETUFFX0NNRF9EU1RfR1JDIHwKKwkJCURNQUVfQ01EX0NfRFNUX1BDSSB8IERNQUVfQ01EX0NfRU5BQkxFIHwKKwkJCURNQUVfQ01EX1NSQ19SRVNFVCB8IERNQUVfQ01EX0RTVF9SRVNFVCB8CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCQlETUFFX0NNRF9FTkRJQU5JVFlfQl9EV19TV0FQIHwKKyNlbHNlCisJCQlETUFFX0NNRF9FTkRJQU5JVFlfRFdfU1dBUCB8CisjZW5kaWYKKwkJCShCUF9QT1JUKGJwKSA/IERNQUVfQ01EX1BPUlRfMSA6IERNQUVfQ01EX1BPUlRfMCkgfAorCQkJKEJQX0UxSFZOKGJwKSA8PCBETUFFX0NNRF9FMUhWTl9TSElGVCkpOworCWRtYWUtPnNyY19hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIHBvcnRfc3RhdHMpKTsKKwlkbWFlLT5zcmNfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBwb3J0X3N0YXRzKSk7CisJZG1hZS0+ZHN0X2FkZHJfbG8gPSBicC0+cG9ydC5wb3J0X3N0eCA+PiAyOworCWRtYWUtPmRzdF9hZGRyX2hpID0gMDsKKwlkbWFlLT5sZW4gPSBzaXplb2Yoc3RydWN0IGhvc3RfcG9ydF9zdGF0cykgPj4gMjsKKwlkbWFlLT5jb21wX2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgc3RhdHNfY29tcCkpOworCWRtYWUtPmNvbXBfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBzdGF0c19jb21wKSk7CisJZG1hZS0+Y29tcF92YWwgPSBETUFFX0NPTVBfVkFMOworCisJKnN0YXRzX2NvbXAgPSAwOworCWJueDJ4X2h3X3N0YXRzX3Bvc3QoYnApOworCWJueDJ4X3N0YXRzX2NvbXAoYnApOworfQorCitzdGF0aWMgdm9pZCBibngyeF9mdW5jX3N0YXRzX2Jhc2VfaW5pdChzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCB2biwgdm5fbWF4ID0gSVNfRTFITUYoYnApID8gRTFIVk5fTUFYIDogRTFWTl9NQVg7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwlpbnQgZnVuYzsKKwl1MzIgZnVuY19zdHg7CisKKwkvKiBzYW5pdHkgKi8KKwlpZiAoIWJwLT5wb3J0LnBtZiB8fCAhYnAtPmZ1bmNfc3R4KSB7CisJCUJOWDJYX0VSUigiQlVHIVxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBzYXZlIG91ciBmdW5jX3N0eCAqLworCWZ1bmNfc3R4ID0gYnAtPmZ1bmNfc3R4OworCisJZm9yICh2biA9IFZOXzA7IHZuIDwgdm5fbWF4OyB2bisrKSB7CisJCWZ1bmMgPSAyKnZuICsgcG9ydDsKKworCQlicC0+ZnVuY19zdHggPSBTSE1FTV9SRChicCwgZnVuY19tYltmdW5jXS5md19tYl9wYXJhbSk7CisJCWJueDJ4X2Z1bmNfc3RhdHNfaW5pdChicCk7CisJCWJueDJ4X2h3X3N0YXRzX3Bvc3QoYnApOworCQlibngyeF9zdGF0c19jb21wKGJwKTsKKwl9CisKKwkvKiByZXN0b3JlIG91ciBmdW5jX3N0eCAqLworCWJwLT5mdW5jX3N0eCA9IGZ1bmNfc3R4OworfQorCitzdGF0aWMgdm9pZCBibngyeF9mdW5jX3N0YXRzX2Jhc2VfdXBkYXRlKHN0cnVjdCBibngyeCAqYnApCit7CisJc3RydWN0IGRtYWVfY29tbWFuZCAqZG1hZSA9ICZicC0+c3RhdHNfZG1hZTsKKwl1MzIgKnN0YXRzX2NvbXAgPSBibngyeF9zcChicCwgc3RhdHNfY29tcCk7CisKKwkvKiBzYW5pdHkgKi8KKwlpZiAoIWJwLT5mdW5jX3N0eCkgeworCQlCTlgyWF9FUlIoIkJVRyFcbiIpOworCQlyZXR1cm47CisJfQorCisJYnAtPmV4ZWN1dGVyX2lkeCA9IDA7CisJbWVtc2V0KGRtYWUsIDAsIHNpemVvZihzdHJ1Y3QgZG1hZV9jb21tYW5kKSk7CisKKwlkbWFlLT5vcGNvZGUgPSAoRE1BRV9DTURfU1JDX0dSQyB8IERNQUVfQ01EX0RTVF9QQ0kgfAorCQkJRE1BRV9DTURfQ19EU1RfUENJIHwgRE1BRV9DTURfQ19FTkFCTEUgfAorCQkJRE1BRV9DTURfU1JDX1JFU0VUIHwgRE1BRV9DTURfRFNUX1JFU0VUIHwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJCURNQUVfQ01EX0VORElBTklUWV9CX0RXX1NXQVAgfAorI2Vsc2UKKwkJCURNQUVfQ01EX0VORElBTklUWV9EV19TV0FQIHwKKyNlbmRpZgorCQkJKEJQX1BPUlQoYnApID8gRE1BRV9DTURfUE9SVF8xIDogRE1BRV9DTURfUE9SVF8wKSB8CisJCQkoQlBfRTFIVk4oYnApIDw8IERNQUVfQ01EX0UxSFZOX1NISUZUKSk7CisJZG1hZS0+c3JjX2FkZHJfbG8gPSBicC0+ZnVuY19zdHggPj4gMjsKKwlkbWFlLT5zcmNfYWRkcl9oaSA9IDA7CisJZG1hZS0+ZHN0X2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgZnVuY19zdGF0c19iYXNlKSk7CisJZG1hZS0+ZHN0X2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgZnVuY19zdGF0c19iYXNlKSk7CisJZG1hZS0+bGVuID0gc2l6ZW9mKHN0cnVjdCBob3N0X2Z1bmNfc3RhdHMpID4+IDI7CisJZG1hZS0+Y29tcF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIHN0YXRzX2NvbXApKTsKKwlkbWFlLT5jb21wX2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgc3RhdHNfY29tcCkpOworCWRtYWUtPmNvbXBfdmFsID0gRE1BRV9DT01QX1ZBTDsKKworCSpzdGF0c19jb21wID0gMDsKKwlibngyeF9od19zdGF0c19wb3N0KGJwKTsKKwlibngyeF9zdGF0c19jb21wKGJwKTsKK30KKwordm9pZCBibngyeF9zdGF0c19pbml0KHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOworCWludCBpOworCisJYnAtPnN0YXRzX3BlbmRpbmcgPSAwOworCWJwLT5leGVjdXRlcl9pZHggPSAwOworCWJwLT5zdGF0c19jb3VudGVyID0gMDsKKworCS8qIHBvcnQgYW5kIGZ1bmMgc3RhdHMgZm9yIG1hbmFnZW1lbnQgKi8KKwlpZiAoIUJQX05PTUNQKGJwKSkgeworCQlicC0+cG9ydC5wb3J0X3N0eCA9IFNITUVNX1JEKGJwLCBwb3J0X21iW3BvcnRdLnBvcnRfc3R4KTsKKwkJYnAtPmZ1bmNfc3R4ID0gU0hNRU1fUkQoYnAsIGZ1bmNfbWJbZnVuY10uZndfbWJfcGFyYW0pOworCisJfSBlbHNlIHsKKwkJYnAtPnBvcnQucG9ydF9zdHggPSAwOworCQlicC0+ZnVuY19zdHggPSAwOworCX0KKwlEUChCTlgyWF9NU0dfU1RBVFMsICJwb3J0X3N0eCAweCV4ICBmdW5jX3N0eCAweCV4XG4iLAorCSAgIGJwLT5wb3J0LnBvcnRfc3R4LCBicC0+ZnVuY19zdHgpOworCisJLyogcG9ydCBzdGF0cyAqLworCW1lbXNldCgmKGJwLT5wb3J0Lm9sZF9uaWdfc3RhdHMpLCAwLCBzaXplb2Yoc3RydWN0IG5pZ19zdGF0cykpOworCWJwLT5wb3J0Lm9sZF9uaWdfc3RhdHMuYnJiX2Rpc2NhcmQgPQorCQkJUkVHX1JEKGJwLCBOSUdfUkVHX1NUQVQwX0JSQl9ESVNDQVJEICsgcG9ydCoweDM4KTsKKwlicC0+cG9ydC5vbGRfbmlnX3N0YXRzLmJyYl90cnVuY2F0ZSA9CisJCQlSRUdfUkQoYnAsIE5JR19SRUdfU1RBVDBfQlJCX1RSVU5DQVRFICsgcG9ydCoweDM4KTsKKwlSRUdfUkRfRE1BRShicCwgTklHX1JFR19TVEFUMF9FR1JFU1NfTUFDX1BLVDAgKyBwb3J0KjB4NTAsCisJCSAgICAmKGJwLT5wb3J0Lm9sZF9uaWdfc3RhdHMuZWdyZXNzX21hY19wa3QwX2xvKSwgMik7CisJUkVHX1JEX0RNQUUoYnAsIE5JR19SRUdfU1RBVDBfRUdSRVNTX01BQ19QS1QxICsgcG9ydCoweDUwLAorCQkgICAgJihicC0+cG9ydC5vbGRfbmlnX3N0YXRzLmVncmVzc19tYWNfcGt0MV9sbyksIDIpOworCisJLyogZnVuY3Rpb24gc3RhdHMgKi8KKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKKworCQltZW1zZXQoJmZwLT5vbGRfdGNsaWVudCwgMCwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMpKTsKKwkJbWVtc2V0KCZmcC0+b2xkX3VjbGllbnQsIDAsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IHVzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSk7CisJCW1lbXNldCgmZnAtPm9sZF94Y2xpZW50LCAwLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB4c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykpOworCQltZW1zZXQoJmZwLT5ldGhfcV9zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBibngyeF9ldGhfcV9zdGF0cykpOworCX0KKworCW1lbXNldCgmYnAtPmRldi0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykpOworCW1lbXNldCgmYnAtPmV0aF9zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBibngyeF9ldGhfc3RhdHMpKTsKKworCWJwLT5zdGF0c19zdGF0ZSA9IFNUQVRTX1NUQVRFX0RJU0FCTEVEOworCisJaWYgKGJwLT5wb3J0LnBtZikgeworCQlpZiAoYnAtPnBvcnQucG9ydF9zdHgpCisJCQlibngyeF9wb3J0X3N0YXRzX2Jhc2VfaW5pdChicCk7CisKKwkJaWYgKGJwLT5mdW5jX3N0eCkKKwkJCWJueDJ4X2Z1bmNfc3RhdHNfYmFzZV9pbml0KGJwKTsKKworCX0gZWxzZSBpZiAoYnAtPmZ1bmNfc3R4KQorCQlibngyeF9mdW5jX3N0YXRzX2Jhc2VfdXBkYXRlKGJwKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X3N0YXRzLmggYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9zdGF0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YTRlOTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9zdGF0cy5oCkBAIC0wLDAgKzEsMjM5IEBACisvKiBibngyeF9zdGF0cy5oOiBCcm9hZGNvbSBFdmVyZXN0IG5ldHdvcmsgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDEwIEJyb2FkY29tIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE1haW50YWluZWQgYnk6IEVpbG9uIEdyZWVuc3RlaW4gPGVpbG9uZ0Bicm9hZGNvbS5jb20+CisgKiBXcml0dGVuIGJ5OiBFbGllemVyIFRhbWlyCisgKiBCYXNlZCBvbiBjb2RlIGZyb20gTWljaGFlbCBDaGFuJ3MgYm54MiBkcml2ZXIKKyAqLworCisjaWZuZGVmIEJOWDJYX1NUQVRTX0gKKyNkZWZpbmUgQk5YMlhfU1RBVFNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGJueDJ4X2V0aF9xX3N0YXRzIHsKKwl1MzIgdG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGk7CisJdTMyIHRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvOworCXUzMiB0b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaTsKKwl1MzIgdG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfbG87CisJdTMyIHRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaTsKKwl1MzIgdG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2xvOworCXUzMiB0b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaTsKKwl1MzIgdG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG87CisJdTMyIHRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpOworCXUzMiB0b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZF9sbzsKKwl1MzIgdG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpOworCXUzMiB0b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG87CisJdTMyIHRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpOworCXUzMiB0b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbzsKKwl1MzIgdG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGk7CisJdTMyIHRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2xvOworCXUzMiB2YWxpZF9ieXRlc19yZWNlaXZlZF9oaTsKKwl1MzIgdmFsaWRfYnl0ZXNfcmVjZWl2ZWRfbG87CisKKwl1MzIgZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGk7CisJdTMyIGVycm9yX2J5dGVzX3JlY2VpdmVkX2xvOworCXUzMiBldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19oaTsKKwl1MzIgZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfbG87CisJdTMyIG5vX2J1ZmZfZGlzY2FyZF9oaTsKKwl1MzIgbm9fYnVmZl9kaXNjYXJkX2xvOworCisJdTMyIGRyaXZlcl94b2ZmOworCXUzMiByeF9lcnJfZGlzY2FyZF9wa3Q7CisJdTMyIHJ4X3NrYl9hbGxvY19mYWlsZWQ7CisJdTMyIGh3X2NzdW1fZXJyOworfTsKKworI2RlZmluZSBCTlgyWF9OVU1fUV9TVEFUUwkJMTMKKyNkZWZpbmUgUV9TVEFUU19PRkZTRVQzMihzdGF0X25hbWUpIFwKKwkJCShvZmZzZXRvZihzdHJ1Y3QgYm54MnhfZXRoX3Ffc3RhdHMsIHN0YXRfbmFtZSkgLyA0KQorCitzdHJ1Y3QgbmlnX3N0YXRzIHsKKwl1MzIgYnJiX2Rpc2NhcmQ7CisJdTMyIGJyYl9wYWNrZXQ7CisJdTMyIGJyYl90cnVuY2F0ZTsKKwl1MzIgZmxvd19jdHJsX2Rpc2NhcmQ7CisJdTMyIGZsb3dfY3RybF9vY3RldHM7CisJdTMyIGZsb3dfY3RybF9wYWNrZXQ7CisJdTMyIG1uZ19kaXNjYXJkOworCXUzMiBtbmdfb2N0ZXRfaW5wOworCXUzMiBtbmdfb2N0ZXRfb3V0OworCXUzMiBtbmdfcGFja2V0X2lucDsKKwl1MzIgbW5nX3BhY2tldF9vdXQ7CisJdTMyIHBiZl9vY3RldHM7CisJdTMyIHBiZl9wYWNrZXQ7CisJdTMyIHNhZmNfaW5wOworCXUzMiBlZ3Jlc3NfbWFjX3BrdDBfbG87CisJdTMyIGVncmVzc19tYWNfcGt0MF9oaTsKKwl1MzIgZWdyZXNzX21hY19wa3QxX2xvOworCXUzMiBlZ3Jlc3NfbWFjX3BrdDFfaGk7Cit9OworCisKK2VudW0gYm54Mnhfc3RhdHNfZXZlbnQgeworCVNUQVRTX0VWRU5UX1BNRiA9IDAsCisJU1RBVFNfRVZFTlRfTElOS19VUCwKKwlTVEFUU19FVkVOVF9VUERBVEUsCisJU1RBVFNfRVZFTlRfU1RPUCwKKwlTVEFUU19FVkVOVF9NQVgKK307CisKK2VudW0gYm54Mnhfc3RhdHNfc3RhdGUgeworCVNUQVRTX1NUQVRFX0RJU0FCTEVEID0gMCwKKwlTVEFUU19TVEFURV9FTkFCTEVELAorCVNUQVRTX1NUQVRFX01BWAorfTsKKworc3RydWN0IGJueDJ4X2V0aF9zdGF0cyB7CisJdTMyIHRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpOworCXUzMiB0b3RhbF9ieXRlc19yZWNlaXZlZF9sbzsKKwl1MzIgdG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfaGk7CisJdTMyIHRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2xvOworCXUzMiB0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGk7CisJdTMyIHRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZF9sbzsKKwl1MzIgdG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGk7CisJdTMyIHRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2xvOworCXUzMiB0b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZF9oaTsKKwl1MzIgdG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG87CisJdTMyIHRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaTsKKwl1MzIgdG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2xvOworCXUzMiB0b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaTsKKwl1MzIgdG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG87CisJdTMyIHRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpOworCXUzMiB0b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbzsKKwl1MzIgdmFsaWRfYnl0ZXNfcmVjZWl2ZWRfaGk7CisJdTMyIHZhbGlkX2J5dGVzX3JlY2VpdmVkX2xvOworCisJdTMyIGVycm9yX2J5dGVzX3JlY2VpdmVkX2hpOworCXUzMiBlcnJvcl9ieXRlc19yZWNlaXZlZF9sbzsKKwl1MzIgZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfaGk7CisJdTMyIGV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2xvOworCXUzMiBub19idWZmX2Rpc2NhcmRfaGk7CisJdTMyIG5vX2J1ZmZfZGlzY2FyZF9sbzsKKworCXUzMiByeF9zdGF0X2lmaGNpbmJhZG9jdGV0c19oaTsKKwl1MzIgcnhfc3RhdF9pZmhjaW5iYWRvY3RldHNfbG87CisJdTMyIHR4X3N0YXRfaWZoY291dGJhZG9jdGV0c19oaTsKKwl1MzIgdHhfc3RhdF9pZmhjb3V0YmFkb2N0ZXRzX2xvOworCXUzMiByeF9zdGF0X2RvdDNzdGF0c2Zjc2Vycm9yc19oaTsKKwl1MzIgcnhfc3RhdF9kb3Qzc3RhdHNmY3NlcnJvcnNfbG87CisJdTMyIHJ4X3N0YXRfZG90M3N0YXRzYWxpZ25tZW50ZXJyb3JzX2hpOworCXUzMiByeF9zdGF0X2RvdDNzdGF0c2FsaWdubWVudGVycm9yc19sbzsKKwl1MzIgcnhfc3RhdF9kb3Qzc3RhdHNjYXJyaWVyc2Vuc2VlcnJvcnNfaGk7CisJdTMyIHJ4X3N0YXRfZG90M3N0YXRzY2FycmllcnNlbnNlZXJyb3JzX2xvOworCXUzMiByeF9zdGF0X2ZhbHNlY2FycmllcmVycm9yc19oaTsKKwl1MzIgcnhfc3RhdF9mYWxzZWNhcnJpZXJlcnJvcnNfbG87CisJdTMyIHJ4X3N0YXRfZXRoZXJzdGF0c3VuZGVyc2l6ZXBrdHNfaGk7CisJdTMyIHJ4X3N0YXRfZXRoZXJzdGF0c3VuZGVyc2l6ZXBrdHNfbG87CisJdTMyIHJ4X3N0YXRfZG90M3N0YXRzZnJhbWVzdG9vbG9uZ19oaTsKKwl1MzIgcnhfc3RhdF9kb3Qzc3RhdHNmcmFtZXN0b29sb25nX2xvOworCXUzMiByeF9zdGF0X2V0aGVyc3RhdHNmcmFnbWVudHNfaGk7CisJdTMyIHJ4X3N0YXRfZXRoZXJzdGF0c2ZyYWdtZW50c19sbzsKKwl1MzIgcnhfc3RhdF9ldGhlcnN0YXRzamFiYmVyc19oaTsKKwl1MzIgcnhfc3RhdF9ldGhlcnN0YXRzamFiYmVyc19sbzsKKwl1MzIgcnhfc3RhdF9tYWNjb250cm9sZnJhbWVzcmVjZWl2ZWRfaGk7CisJdTMyIHJ4X3N0YXRfbWFjY29udHJvbGZyYW1lc3JlY2VpdmVkX2xvOworCXUzMiByeF9zdGF0X2JtYWNfeHBmX2hpOworCXUzMiByeF9zdGF0X2JtYWNfeHBmX2xvOworCXUzMiByeF9zdGF0X2JtYWNfeGNmX2hpOworCXUzMiByeF9zdGF0X2JtYWNfeGNmX2xvOworCXUzMiByeF9zdGF0X3hvZmZzdGF0ZWVudGVyZWRfaGk7CisJdTMyIHJ4X3N0YXRfeG9mZnN0YXRlZW50ZXJlZF9sbzsKKwl1MzIgcnhfc3RhdF94b25wYXVzZWZyYW1lc3JlY2VpdmVkX2hpOworCXUzMiByeF9zdGF0X3hvbnBhdXNlZnJhbWVzcmVjZWl2ZWRfbG87CisJdTMyIHJ4X3N0YXRfeG9mZnBhdXNlZnJhbWVzcmVjZWl2ZWRfaGk7CisJdTMyIHJ4X3N0YXRfeG9mZnBhdXNlZnJhbWVzcmVjZWl2ZWRfbG87CisJdTMyIHR4X3N0YXRfb3V0eG9uc2VudF9oaTsKKwl1MzIgdHhfc3RhdF9vdXR4b25zZW50X2xvOworCXUzMiB0eF9zdGF0X291dHhvZmZzZW50X2hpOworCXUzMiB0eF9zdGF0X291dHhvZmZzZW50X2xvOworCXUzMiB0eF9zdGF0X2Zsb3djb250cm9sZG9uZV9oaTsKKwl1MzIgdHhfc3RhdF9mbG93Y29udHJvbGRvbmVfbG87CisJdTMyIHR4X3N0YXRfZXRoZXJzdGF0c2NvbGxpc2lvbnNfaGk7CisJdTMyIHR4X3N0YXRfZXRoZXJzdGF0c2NvbGxpc2lvbnNfbG87CisJdTMyIHR4X3N0YXRfZG90M3N0YXRzc2luZ2xlY29sbGlzaW9uZnJhbWVzX2hpOworCXUzMiB0eF9zdGF0X2RvdDNzdGF0c3NpbmdsZWNvbGxpc2lvbmZyYW1lc19sbzsKKwl1MzIgdHhfc3RhdF9kb3Qzc3RhdHNtdWx0aXBsZWNvbGxpc2lvbmZyYW1lc19oaTsKKwl1MzIgdHhfc3RhdF9kb3Qzc3RhdHNtdWx0aXBsZWNvbGxpc2lvbmZyYW1lc19sbzsKKwl1MzIgdHhfc3RhdF9kb3Qzc3RhdHNkZWZlcnJlZHRyYW5zbWlzc2lvbnNfaGk7CisJdTMyIHR4X3N0YXRfZG90M3N0YXRzZGVmZXJyZWR0cmFuc21pc3Npb25zX2xvOworCXUzMiB0eF9zdGF0X2RvdDNzdGF0c2V4Y2Vzc2l2ZWNvbGxpc2lvbnNfaGk7CisJdTMyIHR4X3N0YXRfZG90M3N0YXRzZXhjZXNzaXZlY29sbGlzaW9uc19sbzsKKwl1MzIgdHhfc3RhdF9kb3Qzc3RhdHNsYXRlY29sbGlzaW9uc19oaTsKKwl1MzIgdHhfc3RhdF9kb3Qzc3RhdHNsYXRlY29sbGlzaW9uc19sbzsKKwl1MzIgdHhfc3RhdF9ldGhlcnN0YXRzcGt0czY0b2N0ZXRzX2hpOworCXUzMiB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNjRvY3RldHNfbG87CisJdTMyIHR4X3N0YXRfZXRoZXJzdGF0c3BrdHM2NW9jdGV0c3RvMTI3b2N0ZXRzX2hpOworCXUzMiB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNjVvY3RldHN0bzEyN29jdGV0c19sbzsKKwl1MzIgdHhfc3RhdF9ldGhlcnN0YXRzcGt0czEyOG9jdGV0c3RvMjU1b2N0ZXRzX2hpOworCXUzMiB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzMTI4b2N0ZXRzdG8yNTVvY3RldHNfbG87CisJdTMyIHR4X3N0YXRfZXRoZXJzdGF0c3BrdHMyNTZvY3RldHN0bzUxMW9jdGV0c19oaTsKKwl1MzIgdHhfc3RhdF9ldGhlcnN0YXRzcGt0czI1Nm9jdGV0c3RvNTExb2N0ZXRzX2xvOworCXUzMiB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNTEyb2N0ZXRzdG8xMDIzb2N0ZXRzX2hpOworCXUzMiB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNTEyb2N0ZXRzdG8xMDIzb2N0ZXRzX2xvOworCXUzMiB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzMTAyNG9jdGV0c3RvMTUyMm9jdGV0c19oaTsKKwl1MzIgdHhfc3RhdF9ldGhlcnN0YXRzcGt0czEwMjRvY3RldHN0bzE1MjJvY3RldHNfbG87CisJdTMyIHR4X3N0YXRfZXRoZXJzdGF0c3BrdHNvdmVyMTUyMm9jdGV0c19oaTsKKwl1MzIgdHhfc3RhdF9ldGhlcnN0YXRzcGt0c292ZXIxNTIyb2N0ZXRzX2xvOworCXUzMiB0eF9zdGF0X2JtYWNfMjA0N19oaTsKKwl1MzIgdHhfc3RhdF9ibWFjXzIwNDdfbG87CisJdTMyIHR4X3N0YXRfYm1hY180MDk1X2hpOworCXUzMiB0eF9zdGF0X2JtYWNfNDA5NV9sbzsKKwl1MzIgdHhfc3RhdF9ibWFjXzkyMTZfaGk7CisJdTMyIHR4X3N0YXRfYm1hY185MjE2X2xvOworCXUzMiB0eF9zdGF0X2JtYWNfMTYzODNfaGk7CisJdTMyIHR4X3N0YXRfYm1hY18xNjM4M19sbzsKKwl1MzIgdHhfc3RhdF9kb3Qzc3RhdHNpbnRlcm5hbG1hY3RyYW5zbWl0ZXJyb3JzX2hpOworCXUzMiB0eF9zdGF0X2RvdDNzdGF0c2ludGVybmFsbWFjdHJhbnNtaXRlcnJvcnNfbG87CisJdTMyIHR4X3N0YXRfYm1hY191ZmxfaGk7CisJdTMyIHR4X3N0YXRfYm1hY191ZmxfbG87CisKKwl1MzIgcGF1c2VfZnJhbWVzX3JlY2VpdmVkX2hpOworCXUzMiBwYXVzZV9mcmFtZXNfcmVjZWl2ZWRfbG87CisJdTMyIHBhdXNlX2ZyYW1lc19zZW50X2hpOworCXUzMiBwYXVzZV9mcmFtZXNfc2VudF9sbzsKKworCXUzMiBldGhlcnN0YXRzcGt0czEwMjRvY3RldHN0bzE1MjJvY3RldHNfaGk7CisJdTMyIGV0aGVyc3RhdHNwa3RzMTAyNG9jdGV0c3RvMTUyMm9jdGV0c19sbzsKKwl1MzIgZXRoZXJzdGF0c3BrdHNvdmVyMTUyMm9jdGV0c19oaTsKKwl1MzIgZXRoZXJzdGF0c3BrdHNvdmVyMTUyMm9jdGV0c19sbzsKKworCXUzMiBicmJfZHJvcF9oaTsKKwl1MzIgYnJiX2Ryb3BfbG87CisJdTMyIGJyYl90cnVuY2F0ZV9oaTsKKwl1MzIgYnJiX3RydW5jYXRlX2xvOworCisJdTMyIG1hY19maWx0ZXJfZGlzY2FyZDsKKwl1MzIgeHhvdmVyZmxvd19kaXNjYXJkOworCXUzMiBicmJfdHJ1bmNhdGVfZGlzY2FyZDsKKwl1MzIgbWFjX2Rpc2NhcmQ7CisKKwl1MzIgZHJpdmVyX3hvZmY7CisJdTMyIHJ4X2Vycl9kaXNjYXJkX3BrdDsKKwl1MzIgcnhfc2tiX2FsbG9jX2ZhaWxlZDsKKwl1MzIgaHdfY3N1bV9lcnI7CisKKwl1MzIgbmlnX3RpbWVyX21heDsKK307CisKKyNkZWZpbmUgQk5YMlhfTlVNX1NUQVRTCQkJNDMKKyNkZWZpbmUgU1RBVFNfT0ZGU0VUMzIoc3RhdF9uYW1lKSBcCisJCQkob2Zmc2V0b2Yoc3RydWN0IGJueDJ4X2V0aF9zdGF0cywgc3RhdF9uYW1lKSAvIDQpCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KK3N0cnVjdCBibngyeDsKKworCit2b2lkIGJueDJ4X3N0YXRzX2luaXQoc3RydWN0IGJueDJ4ICpicCk7CisKK2V4dGVybiBjb25zdCB1MzIgZG1hZV9yZWdfZ29fY1tdOworZXh0ZXJuIGludCBibngyeF9zcF9wb3N0KHN0cnVjdCBibngyeCAqYnAsIGludCBjb21tYW5kLCBpbnQgY2lkLAorCQkJIHUzMiBkYXRhX2hpLCB1MzIgZGF0YV9sbywgaW50IGNvbW1vbik7CisKKworI2VuZGlmIC8qIEJOWDJYX1NUQVRTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuYyBiL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY3MGJlOC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9saW5rLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NzMzICswLDAgQEAKLS8qIENvcHlyaWdodCAyMDA4LTIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24KLSAqCi0gKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCi0gKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZQotICogYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLmh0bWwgKHRoZSAiR1BMIikuCi0gKgotICogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcwotICogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCi0gKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgotICogY29uc2VudC4KLSAqCi0gKiBXcml0dGVuIGJ5IFlhbml2IFJvc25lcgotICoKLSAqLwotCi0jZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10Ci0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0KLSNpbmNsdWRlICJibngyeC5oIgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIEVUSF9ITEVOCQkJMTQKLSNkZWZpbmUgRVRIX09WUkVIRUFECQkoRVRIX0hMRU4gKyA4KS8qIDggZm9yIENSQyArIFZMQU4qLwotI2RlZmluZSBFVEhfTUlOX1BBQ0tFVF9TSVpFCQk2MAotI2RlZmluZSBFVEhfTUFYX1BBQ0tFVF9TSVpFCQkxNTAwCi0jZGVmaW5lIEVUSF9NQVhfSlVNQk9fUEFDS0VUX1NJWkUJOTYwMAotI2RlZmluZSBNRElPX0FDQ0VTU19USU1FT1VUCQkxMDAwCi0jZGVmaW5lIEJNQUNfQ09OVFJPTF9SWF9FTkFCTEUJMgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgkJCVNob3J0Y3V0IGRlZmluaXRpb25zCQkgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIE5JR19MQVRDSF9CQ19FTkFCTEVfTUlfSU5UIDAKLQotI2RlZmluZSBOSUdfU1RBVFVTX0VNQUMwX01JX0lOVCBcCi0JCU5JR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwX1JFR19TVEFUVVNfRU1BQzBfTUlTQ19NSV9JTlQKLSNkZWZpbmUgTklHX1NUQVRVU19YR1hTMF9MSU5LMTBHIFwKLQkJTklHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDBfUkVHX1NUQVRVU19YR1hTMF9MSU5LMTBHCi0jZGVmaW5lIE5JR19TVEFUVVNfWEdYUzBfTElOS19TVEFUVVMgXAotCQlOSUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMF9SRUdfU1RBVFVTX1hHWFMwX0xJTktfU1RBVFVTCi0jZGVmaW5lIE5JR19TVEFUVVNfWEdYUzBfTElOS19TVEFUVVNfU0laRSBcCi0JCU5JR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwX1JFR19TVEFUVVNfWEdYUzBfTElOS19TVEFUVVNfU0laRQotI2RlZmluZSBOSUdfU1RBVFVTX1NFUkRFUzBfTElOS19TVEFUVVMgXAotCQlOSUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMF9SRUdfU1RBVFVTX1NFUkRFUzBfTElOS19TVEFUVVMKLSNkZWZpbmUgTklHX01BU0tfTUlfSU5UIFwKLQkJTklHX01BU0tfSU5URVJSVVBUX1BPUlQwX1JFR19NQVNLX0VNQUMwX01JU0NfTUlfSU5UCi0jZGVmaW5lIE5JR19NQVNLX1hHWFMwX0xJTksxMEcgXAotCQlOSUdfTUFTS19JTlRFUlJVUFRfUE9SVDBfUkVHX01BU0tfWEdYUzBfTElOSzEwRwotI2RlZmluZSBOSUdfTUFTS19YR1hTMF9MSU5LX1NUQVRVUyBcCi0JCU5JR19NQVNLX0lOVEVSUlVQVF9QT1JUMF9SRUdfTUFTS19YR1hTMF9MSU5LX1NUQVRVUwotI2RlZmluZSBOSUdfTUFTS19TRVJERVMwX0xJTktfU1RBVFVTIFwKLQkJTklHX01BU0tfSU5URVJSVVBUX1BPUlQwX1JFR19NQVNLX1NFUkRFUzBfTElOS19TVEFUVVMKLQotI2RlZmluZSBNRElPX0FOX0NMNzNfT1JfMzdfQ09NUExFVEUgXAotCQkoTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQ0w3M19BVVRPTkVHX0NPTVBMRVRFIHwgXAotCQkgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQ0wzN19BVVRPTkVHX0NPTVBMRVRFKQotCi0jZGVmaW5lIFhHWFNfUkVTRVRfQklUUyBcCi0JKE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18zX01JU0NfTklHX01VWF9YR1hTMF9SU1RCX0hXIHwgICBcCi0JIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18zX01JU0NfTklHX01VWF9YR1hTMF9JRERRIHwgICAgICBcCi0JIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18zX01JU0NfTklHX01VWF9YR1hTMF9QV1JEV04gfCAgICBcCi0JIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18zX01JU0NfTklHX01VWF9YR1hTMF9QV1JEV05fU0QgfCBcCi0JIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18zX01JU0NfTklHX01VWF9YR1hTMF9UWERfRklGT19SU1RCKQotCi0jZGVmaW5lIFNFUkRFU19SRVNFVF9CSVRTIFwKLQkoTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzNfTUlTQ19OSUdfTVVYX1NFUkRFUzBfUlNUQl9IVyB8IFwKLQkgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzNfTUlTQ19OSUdfTVVYX1NFUkRFUzBfSUREUSB8ICAgIFwKLQkgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzNfTUlTQ19OSUdfTVVYX1NFUkRFUzBfUFdSRFdOIHwgIFwKLQkgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzNfTUlTQ19OSUdfTVVYX1NFUkRFUzBfUFdSRFdOX1NEKQotCi0jZGVmaW5lIEFVVE9ORUdfQ0wzNwkJU0hBUkVEX0hXX0NGR19BTl9FTkFCTEVfQ0wzNwotI2RlZmluZSBBVVRPTkVHX0NMNzMJCVNIQVJFRF9IV19DRkdfQU5fRU5BQkxFX0NMNzMKLSNkZWZpbmUgQVVUT05FR19CQU0gCQlTSEFSRURfSFdfQ0ZHX0FOX0VOQUJMRV9CQU0KLSNkZWZpbmUgQVVUT05FR19QQVJBTExFTCBcCi0JCQkJU0hBUkVEX0hXX0NGR19BTl9FTkFCTEVfUEFSQUxMRUxfREVURUNUSU9OCi0jZGVmaW5lIEFVVE9ORUdfU0dNSUlfRklCRVJfQVVUT0RFVCBcCi0JCQkJU0hBUkVEX0hXX0NGR19BTl9FTl9TR01JSV9GSUJFUl9BVVRPX0RFVEVDVAotI2RlZmluZSBBVVRPTkVHX1JFTU9URV9QSFkJU0hBUkVEX0hXX0NGR19BTl9FTkFCTEVfUkVNT1RFX1BIWQotCi0jZGVmaW5lIEdQX1NUQVRVU19QQVVTRV9SU09MVVRJT05fVFhTSURFIFwKLQkJCU1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX1BBVVNFX1JTT0xVVElPTl9UWFNJREUKLSNkZWZpbmUgR1BfU1RBVFVTX1BBVVNFX1JTT0xVVElPTl9SWFNJREUgXAotCQkJTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfUEFVU0VfUlNPTFVUSU9OX1JYU0lERQotI2RlZmluZSBHUF9TVEFUVVNfU1BFRURfTUFTSyBcCi0JCQlNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfTUFTSwotI2RlZmluZSBHUF9TVEFUVVNfMTBNCU1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xME0KLSNkZWZpbmUgR1BfU1RBVFVTXzEwME0JTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzEwME0KLSNkZWZpbmUgR1BfU1RBVFVTXzFHCU1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xRwotI2RlZmluZSBHUF9TVEFUVVNfMl81RwlNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfMl81RwotI2RlZmluZSBHUF9TVEFUVVNfNUcJTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzVHCi0jZGVmaW5lIEdQX1NUQVRVU182RwlNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfNkcKLSNkZWZpbmUgR1BfU1RBVFVTXzEwR19ISUcgXAotCQkJTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzEwR19ISUcKLSNkZWZpbmUgR1BfU1RBVFVTXzEwR19DWDQgXAotCQkJTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzEwR19DWDQKLSNkZWZpbmUgR1BfU1RBVFVTXzEyR19ISUcgXAotCQkJTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzEyR19ISUcKLSNkZWZpbmUgR1BfU1RBVFVTXzEyXzVHIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xMl81RwotI2RlZmluZSBHUF9TVEFUVVNfMTNHCU1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xM0cKLSNkZWZpbmUgR1BfU1RBVFVTXzE1RwlNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfMTVHCi0jZGVmaW5lIEdQX1NUQVRVU18xNkcJTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzE2RwotI2RlZmluZSBHUF9TVEFUVVNfMUdfS1ggTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzFHX0tYCi0jZGVmaW5lIEdQX1NUQVRVU18xMEdfS1g0IFwKLQkJCU1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xMEdfS1g0Ci0KLSNkZWZpbmUgTElOS18xMFRIRAkJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTBUSEQKLSNkZWZpbmUgTElOS18xMFRGRAkJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTBURkQKLSNkZWZpbmUgTElOS18xMDBUWEhECQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEwMFRYSEQKLSNkZWZpbmUgTElOS18xMDBUNAkJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTAwVDQKLSNkZWZpbmUgTElOS18xMDBUWEZECQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEwMFRYRkQKLSNkZWZpbmUgTElOS18xMDAwVEhECQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEwMDBUSEQKLSNkZWZpbmUgTElOS18xMDAwVEZECQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEwMDBURkQKLSNkZWZpbmUgTElOS18xMDAwWEZECQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEwMDBYRkQKLSNkZWZpbmUgTElOS18yNTAwVEhECQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzI1MDBUSEQKLSNkZWZpbmUgTElOS18yNTAwVEZECQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzI1MDBURkQKLSNkZWZpbmUgTElOS18yNTAwWEZECQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzI1MDBYRkQKLSNkZWZpbmUgTElOS18xMEdURkQJCQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEwR1RGRAotI2RlZmluZSBMSU5LXzEwR1hGRAkJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTBHWEZECi0jZGVmaW5lIExJTktfMTJHVEZECQkJTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xMkdURkQKLSNkZWZpbmUgTElOS18xMkdYRkQJCQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEyR1hGRAotI2RlZmluZSBMSU5LXzEyXzVHVEZECQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEyXzVHVEZECi0jZGVmaW5lIExJTktfMTJfNUdYRkQJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTJfNUdYRkQKLSNkZWZpbmUgTElOS18xM0dURkQJCQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEzR1RGRAotI2RlZmluZSBMSU5LXzEzR1hGRAkJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTNHWEZECi0jZGVmaW5lIExJTktfMTVHVEZECQkJTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xNUdURkQKLSNkZWZpbmUgTElOS18xNUdYRkQJCQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzE1R1hGRAotI2RlZmluZSBMSU5LXzE2R1RGRAkJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTZHVEZECi0jZGVmaW5lIExJTktfMTZHWEZECQkJTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xNkdYRkQKLQotI2RlZmluZSBQSFlfWEdYU19GTEFHCQkJMHgxCi0jZGVmaW5lIFBIWV9TR01JSV9GTEFHCQkJMHgyCi0jZGVmaW5lIFBIWV9TRVJERVNfRkxBRwkJCTB4NAotCi0vKiAqLwotI2RlZmluZSBTRlBfRUVQUk9NX0NPTl9UWVBFX0FERFIJCTB4MgotCSNkZWZpbmUgU0ZQX0VFUFJPTV9DT05fVFlQRV9WQUxfTEMgCQkweDcKLQkjZGVmaW5lIFNGUF9FRVBST01fQ09OX1RZUEVfVkFMX0NPUFBFUgkweDIxCi0KLQotI2RlZmluZSBTRlBfRUVQUk9NX0NPTVBfQ09ERV9BRERSCQkweDMKLQkjZGVmaW5lIFNGUF9FRVBST01fQ09NUF9DT0RFX1NSX01BU0sJKDE8PDQpCi0JI2RlZmluZSBTRlBfRUVQUk9NX0NPTVBfQ09ERV9MUl9NQVNLCSgxPDw1KQotCSNkZWZpbmUgU0ZQX0VFUFJPTV9DT01QX0NPREVfTFJNX01BU0sJKDE8PDYpCi0KLSNkZWZpbmUgU0ZQX0VFUFJPTV9GQ19UWF9URUNIX0FERFIJCTB4OAotCSNkZWZpbmUgU0ZQX0VFUFJPTV9GQ19UWF9URUNIX0JJVE1BU0tfQ09QUEVSX1BBU1NJVkUgMHg0Ci0JI2RlZmluZSBTRlBfRUVQUk9NX0ZDX1RYX1RFQ0hfQklUTUFTS19DT1BQRVJfQUNUSVZFCSAweDgKLQotI2RlZmluZSBTRlBfRUVQUk9NX09QVElPTlNfQUREUiAJCTB4NDAKLQkjZGVmaW5lIFNGUF9FRVBST01fT1BUSU9OU19MSU5FQVJfUlhfT1VUX01BU0sgMHgxCi0jZGVmaW5lIFNGUF9FRVBST01fT1BUSU9OU19TSVpFIAkJMgotCi0jZGVmaW5lIEVEQ19NT0RFX0xJTkVBUgkgCQkJMHgwMDIyCi0jZGVmaW5lIEVEQ19NT0RFX0xJTUlUSU5HCSAJCQkweDAwNDQKLSNkZWZpbmUgRURDX01PREVfUEFTU0lWRV9EQUMgCQkJMHgwMDU1Ci0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgSU5URVJGQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIENMNDVfV1JfT1ZFUl9DTDIyKF9icCwgX3BvcnQsIF9waHlfYWRkciwgX2JhbmssIF9hZGRyLCBfdmFsKSBcCi0JYm54MnhfY2w0NV93cml0ZShfYnAsIF9wb3J0LCAwLCBfcGh5X2FkZHIsIFwKLQkJREVGQVVMVF9QSFlfREVWX0FERFIsIFwKLQkJKF9iYW5rICsgKF9hZGRyICYgMHhmKSksIFwKLQkJX3ZhbCkKLQotI2RlZmluZSBDTDQ1X1JEX09WRVJfQ0wyMihfYnAsIF9wb3J0LCBfcGh5X2FkZHIsIF9iYW5rLCBfYWRkciwgX3ZhbCkgXAotCWJueDJ4X2NsNDVfcmVhZChfYnAsIF9wb3J0LCAwLCBfcGh5X2FkZHIsIFwKLQkJREVGQVVMVF9QSFlfREVWX0FERFIsIFwKLQkJKF9iYW5rICsgKF9hZGRyICYgMHhmKSksIFwKLQkJX3ZhbCkKLQotc3RhdGljIHZvaWQgYm54Mnhfc2V0X3NlcmRlc19hY2Nlc3Moc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTMyIGVtYWNfYmFzZSA9IChwYXJhbXMtPnBvcnQpID8gR1JDQkFTRV9FTUFDMSA6IEdSQ0JBU0VfRU1BQzA7Ci0KLQkvKiBTZXQgQ2xhdXNlIDIyICovCi0JUkVHX1dSKGJwLCBOSUdfUkVHX1NFUkRFUzBfQ1RSTF9NRF9TVCArIHBhcmFtcy0+cG9ydCoweDEwLCAxKTsKLQlSRUdfV1IoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTURJT19DT01NLCAweDI0NWY4MDAwKTsKLQl1ZGVsYXkoNTAwKTsKLQlSRUdfV1IoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTURJT19DT01NLCAweDI0NWQwMDBmKTsKLQl1ZGVsYXkoNTAwKTsKLQkgLyogU2V0IENsYXVzZSA0NSAqLwotCVJFR19XUihicCwgTklHX1JFR19TRVJERVMwX0NUUkxfTURfU1QgKyBwYXJhbXMtPnBvcnQqMHgxMCwgMCk7Ci19Ci1zdGF0aWMgdm9pZCBibngyeF9zZXRfcGh5X21kaW8oc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHU4IHBoeV9mbGFncykKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKLQotCWlmIChwaHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSB7Ci0JCVJFR19XUihicCwgTklHX1JFR19YR1hTMF9DVFJMX01EX1NUICsKLQkJCSAgIHBhcmFtcy0+cG9ydCoweDE4LCAwKTsKLQkJUkVHX1dSKGJwLCBOSUdfUkVHX1hHWFMwX0NUUkxfTURfREVWQUQgKyBwYXJhbXMtPnBvcnQqMHgxOCwKLQkJCSAgIERFRkFVTFRfUEhZX0RFVl9BRERSKTsKLQl9IGVsc2UgewotCQlibngyeF9zZXRfc2VyZGVzX2FjY2VzcyhwYXJhbXMpOwotCi0JCVJFR19XUihicCwgTklHX1JFR19TRVJERVMwX0NUUkxfTURfREVWQUQgKwotCQkJICAgcGFyYW1zLT5wb3J0KjB4MTAsCi0JCQkgICBERUZBVUxUX1BIWV9ERVZfQUREUik7Ci0JfQotfQotCi1zdGF0aWMgdTMyIGJueDJ4X2JpdHNfZW4oc3RydWN0IGJueDJ4ICpicCwgdTMyIHJlZywgdTMyIGJpdHMpCi17Ci0JdTMyIHZhbCA9IFJFR19SRChicCwgcmVnKTsKLQotCXZhbCB8PSBiaXRzOwotCVJFR19XUihicCwgcmVnLCB2YWwpOwotCXJldHVybiB2YWw7Ci19Ci0KLXN0YXRpYyB1MzIgYm54MnhfYml0c19kaXMoc3RydWN0IGJueDJ4ICpicCwgdTMyIHJlZywgdTMyIGJpdHMpCi17Ci0JdTMyIHZhbCA9IFJFR19SRChicCwgcmVnKTsKLQotCXZhbCAmPSB+Yml0czsKLQlSRUdfV1IoYnAsIHJlZywgdmFsKTsKLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9lbWFjX2luaXQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCi0JCQkgICBzdHJ1Y3QgbGlua192YXJzICp2YXJzKQotewotCS8qIHJlc2V0IGFuZCB1bnJlc2V0IHRoZSBlbWFjIGNvcmUgKi8KLQlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKLQl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OwotCXUzMiBlbWFjX2Jhc2UgPSBwb3J0ID8gR1JDQkFTRV9FTUFDMSA6IEdSQ0JBU0VfRU1BQzA7Ci0JdTMyIHZhbDsKLQl1MTYgdGltZW91dDsKLQotCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfQ0xFQVIsCi0JCSAgIChNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9SU1RfRU1BQzBfSEFSRF9DT1JFIDw8IHBvcnQpKTsKLQl1ZGVsYXkoNSk7Ci0JUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9TRVQsCi0JCSAgIChNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9SU1RfRU1BQzBfSEFSRF9DT1JFIDw8IHBvcnQpKTsKLQotCS8qIGluaXQgZW1hYyAtIHVzZSByZWFkLW1vZGlmeS13cml0ZSAqLwotCS8qIHNlbGYgY2xlYXIgcmVzZXQgKi8KLQl2YWwgPSBSRUdfUkQoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTU9ERSk7Ci0JRU1BQ19XUihicCwgRU1BQ19SRUdfRU1BQ19NT0RFLCAodmFsIHwgRU1BQ19NT0RFX1JFU0VUKSk7Ci0KLQl0aW1lb3V0ID0gMjAwOwotCWRvIHsKLQkJdmFsID0gUkVHX1JEKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX01PREUpOwotCQlEUChORVRJRl9NU0dfTElOSywgIkVNQUMgcmVzZXQgcmVnIGlzICV1XG4iLCB2YWwpOwotCQlpZiAoIXRpbWVvdXQpIHsKLQkJCURQKE5FVElGX01TR19MSU5LLCAiRU1BQyB0aW1lb3V0IVxuIik7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJdGltZW91dC0tOwotCX0gd2hpbGUgKHZhbCAmIEVNQUNfTU9ERV9SRVNFVCk7Ci0KLQkvKiBTZXQgbWFjIGFkZHJlc3MgKi8KLQl2YWwgPSAoKHBhcmFtcy0+bWFjX2FkZHJbMF0gPDwgOCkgfAotCQlwYXJhbXMtPm1hY19hZGRyWzFdKTsKLQlFTUFDX1dSKGJwLCBFTUFDX1JFR19FTUFDX01BQ19NQVRDSCwgdmFsKTsKLQotCXZhbCA9ICgocGFyYW1zLT5tYWNfYWRkclsyXSA8PCAyNCkgfAotCSAgICAgICAocGFyYW1zLT5tYWNfYWRkclszXSA8PCAxNikgfAotCSAgICAgICAocGFyYW1zLT5tYWNfYWRkcls0XSA8PCA4KSB8Ci0JCXBhcmFtcy0+bWFjX2FkZHJbNV0pOwotCUVNQUNfV1IoYnAsIEVNQUNfUkVHX0VNQUNfTUFDX01BVENIICsgNCwgdmFsKTsKLX0KLQotc3RhdGljIHU4IGJueDJ4X2VtYWNfZW5hYmxlKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAotCQkJICBzdHJ1Y3QgbGlua192YXJzICp2YXJzLCB1OCBsYikKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKLQl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OwotCXUzMiBlbWFjX2Jhc2UgPSBwb3J0ID8gR1JDQkFTRV9FTUFDMSA6IEdSQ0JBU0VfRU1BQzA7Ci0JdTMyIHZhbDsKLQotCURQKE5FVElGX01TR19MSU5LLCAiZW5hYmxpbmcgRU1BQ1xuIik7Ci0KLQkvKiBlbmFibGUgZW1hYyBhbmQgbm90IGJtYWMgKi8KLQlSRUdfV1IoYnAsIE5JR19SRUdfRUdSRVNTX0VNQUMwX1BPUlQgKyBwb3J0KjQsIDEpOwotCi0JLyogZm9yIHBhbGFkaXVtICovCi0JaWYgKENISVBfUkVWX0lTX0VNVUwoYnApKSB7Ci0JCS8qIFVzZSBsYW5lIDEgKG9mIGxhbmVzIDAtMykgKi8KLQkJUkVHX1dSKGJwLCBOSUdfUkVHX1hHWFNfTEFORV9TRUxfUDAgKyBwb3J0KjQsIDEpOwotCQlSRUdfV1IoYnAsIE5JR19SRUdfWEdYU19TRVJERVMwX01PREVfU0VMICsKLQkJCSAgICBwb3J0KjQsIDEpOwotCX0KLQkvKiBmb3IgZnBnYSAqLwotCWVsc2UKLQotCWlmIChDSElQX1JFVl9JU19GUEdBKGJwKSkgewotCQkvKiBVc2UgbGFuZSAxIChvZiBsYW5lcyAwLTMpICovCi0JCURQKE5FVElGX01TR19MSU5LLCAiYm54MnhfZW1hY19lbmFibGU6IFNldHRpbmcgRlBHQVxuIik7Ci0KLQkJUkVHX1dSKGJwLCBOSUdfUkVHX1hHWFNfTEFORV9TRUxfUDAgKyBwb3J0KjQsIDEpOwotCQlSRUdfV1IoYnAsIE5JR19SRUdfWEdYU19TRVJERVMwX01PREVfU0VMICsgcG9ydCo0LAotCQkJICAgIDApOwotCX0gZWxzZQotCS8qIEFTSUMgKi8KLQlpZiAodmFycy0+cGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRykgewotCQl1MzIgc2VyX2xhbmUgPSAoKHBhcmFtcy0+bGFuZV9jb25maWcgJgotCQkJICAgIFBPUlRfSFdfQ0ZHX0xBTkVfU1dBUF9DRkdfTUFTVEVSX01BU0spID4+Ci0JCQkgICAgUE9SVF9IV19DRkdfTEFORV9TV0FQX0NGR19NQVNURVJfU0hJRlQpOwotCi0JCURQKE5FVElGX01TR19MSU5LLCAiWEdYU1xuIik7Ci0JCS8qIHNlbGVjdCB0aGUgbWFzdGVyIGxhbmVzIChvdXQgb2YgMC0zKSAqLwotCQlSRUdfV1IoYnAsIE5JR19SRUdfWEdYU19MQU5FX1NFTF9QMCArCi0JCQkgICBwb3J0KjQsIHNlcl9sYW5lKTsKLQkJLyogc2VsZWN0IFhHWFMgKi8KLQkJUkVHX1dSKGJwLCBOSUdfUkVHX1hHWFNfU0VSREVTMF9NT0RFX1NFTCArCi0JCQkgICBwb3J0KjQsIDEpOwotCi0JfSBlbHNlIHsgLyogU2VyRGVzICovCi0JCURQKE5FVElGX01TR19MSU5LLCAiU2VyRGVzXG4iKTsKLQkJLyogc2VsZWN0IFNlckRlcyAqLwotCQlSRUdfV1IoYnAsIE5JR19SRUdfWEdYU19TRVJERVMwX01PREVfU0VMICsKLQkJCSAgIHBvcnQqNCwgMCk7Ci0JfQotCi0JYm54MnhfYml0c19lbihicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19SWF9NT0RFLAotCQkgICAgRU1BQ19SWF9NT0RFX1JFU0VUKTsKLQlibngyeF9iaXRzX2VuKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX1RYX01PREUsCi0JCSAgICBFTUFDX1RYX01PREVfUkVTRVQpOwotCi0JaWYgKENISVBfUkVWX0lTX1NMT1coYnApKSB7Ci0JCS8qIGNvbmZpZyBHTUlJIG1vZGUgKi8KLQkJdmFsID0gUkVHX1JEKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX01PREUpOwotCQlFTUFDX1dSKGJwLCBFTUFDX1JFR19FTUFDX01PREUsCi0JCQkgICAgKHZhbCB8IEVNQUNfTU9ERV9QT1JUX0dNSUkpKTsKLQl9IGVsc2UgeyAvKiBBU0lDICovCi0JCS8qIHBhdXNlIGVuYWJsZS9kaXNhYmxlICovCi0JCWJueDJ4X2JpdHNfZGlzKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX1JYX01PREUsCi0JCQkgICAgICAgRU1BQ19SWF9NT0RFX0ZMT1dfRU4pOwotCQlpZiAodmFycy0+Zmxvd19jdHJsICYgQk5YMlhfRkxPV19DVFJMX1JYKQotCQkJYm54MnhfYml0c19lbihicCwgZW1hY19iYXNlICsKLQkJCQkgICAgRU1BQ19SRUdfRU1BQ19SWF9NT0RFLAotCQkJCSAgICBFTUFDX1JYX01PREVfRkxPV19FTik7Ci0KLQkJYm54MnhfYml0c19kaXMoYnAsICBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX1RYX01PREUsCi0JCQkgICAgIChFTUFDX1RYX01PREVfRVhUX1BBVVNFX0VOIHwKLQkJCSAgICAgIEVNQUNfVFhfTU9ERV9GTE9XX0VOKSk7Ci0JCWlmICh2YXJzLT5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfVFgpCi0JCQlibngyeF9iaXRzX2VuKGJwLCBlbWFjX2Jhc2UgKwotCQkJCSAgICBFTUFDX1JFR19FTUFDX1RYX01PREUsCi0JCQkJICAgKEVNQUNfVFhfTU9ERV9FWFRfUEFVU0VfRU4gfAotCQkJCSAgICBFTUFDX1RYX01PREVfRkxPV19FTikpOwotCX0KLQotCS8qIEtFRVBfVkxBTl9UQUcsIHByb21pc2N1b3VzICovCi0JdmFsID0gUkVHX1JEKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX1JYX01PREUpOwotCXZhbCB8PSBFTUFDX1JYX01PREVfS0VFUF9WTEFOX1RBRyB8IEVNQUNfUlhfTU9ERV9QUk9NSVNDVU9VUzsKLQlFTUFDX1dSKGJwLCBFTUFDX1JFR19FTUFDX1JYX01PREUsIHZhbCk7Ci0KLQkvKiBTZXQgTG9vcGJhY2sgKi8KLQl2YWwgPSBSRUdfUkQoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTU9ERSk7Ci0JaWYgKGxiKQotCQl2YWwgfD0gMHg4MTA7Ci0JZWxzZQotCQl2YWwgJj0gfjB4ODEwOwotCUVNQUNfV1IoYnAsIEVNQUNfUkVHX0VNQUNfTU9ERSwgdmFsKTsKLQotCS8qIGVuYWJsZSBlbWFjICovCi0JUkVHX1dSKGJwLCBOSUdfUkVHX05JR19FTUFDMF9FTiArIHBvcnQqNCwgMSk7Ci0KLQkvKiBlbmFibGUgZW1hYyBmb3IganVtYm8gcGFja2V0cyAqLwotCUVNQUNfV1IoYnAsIEVNQUNfUkVHX0VNQUNfUlhfTVRVX1NJWkUsCi0JCShFTUFDX1JYX01UVV9TSVpFX0pVTUJPX0VOQSB8Ci0JCSAoRVRIX01BWF9KVU1CT19QQUNLRVRfU0laRSArIEVUSF9PVlJFSEVBRCkpKTsKLQotCS8qIHN0cmlwIENSQyAqLwotCVJFR19XUihicCwgTklHX1JFR19OSUdfSU5HUkVTU19FTUFDMF9OT19DUkMgKyBwb3J0KjQsIDB4MSk7Ci0KLQkvKiBkaXNhYmxlIHRoZSBOSUcgaW4vb3V0IHRvIHRoZSBibWFjICovCi0JUkVHX1dSKGJwLCBOSUdfUkVHX0JNQUMwX0lOX0VOICsgcG9ydCo0LCAweDApOwotCVJFR19XUihicCwgTklHX1JFR19CTUFDMF9QQVVTRV9PVVRfRU4gKyBwb3J0KjQsIDB4MCk7Ci0JUkVHX1dSKGJwLCBOSUdfUkVHX0JNQUMwX09VVF9FTiArIHBvcnQqNCwgMHgwKTsKLQotCS8qIGVuYWJsZSB0aGUgTklHIGluL291dCB0byB0aGUgZW1hYyAqLwotCVJFR19XUihicCwgTklHX1JFR19FTUFDMF9JTl9FTiArIHBvcnQqNCwgMHgxKTsKLQl2YWwgPSAwOwotCWlmICh2YXJzLT5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfVFgpCi0JCXZhbCA9IDE7Ci0KLQlSRUdfV1IoYnAsIE5JR19SRUdfRU1BQzBfUEFVU0VfT1VUX0VOICsgcG9ydCo0LCB2YWwpOwotCVJFR19XUihicCwgTklHX1JFR19FR1JFU1NfRU1BQzBfT1VUX0VOICsgcG9ydCo0LCAweDEpOwotCi0JaWYgKENISVBfUkVWX0lTX0VNVUwoYnApKSB7Ci0JCS8qIHRha2UgdGhlIEJpZ01hYyBvdXQgb2YgcmVzZXQgKi8KLQkJUkVHX1dSKGJwLAotCQkJICAgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfU0VULAotCQkJICAgKE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX1JTVF9CTUFDMCA8PCBwb3J0KSk7Ci0KLQkJLyogZW5hYmxlIGFjY2VzcyBmb3IgYm1hYyByZWdpc3RlcnMgKi8KLQkJUkVHX1dSKGJwLCBOSUdfUkVHX0JNQUMwX1JFR1NfT1VUX0VOICsgcG9ydCo0LCAweDEpOwotCX0gZWxzZQotCQlSRUdfV1IoYnAsIE5JR19SRUdfQk1BQzBfUkVHU19PVVRfRU4gKyBwb3J0KjQsIDB4MCk7Ci0KLQl2YXJzLT5tYWNfdHlwZSA9IE1BQ19UWVBFX0VNQUM7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotCi1zdGF0aWMgdTggYm54MnhfYm1hY19lbmFibGUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMsCi0JCQkgIHU4IGlzX2xiKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7Ci0JdTMyIGJtYWNfYWRkciA9IHBvcnQgPyBOSUdfUkVHX0lOR1JFU1NfQk1BQzFfTUVNIDoKLQkJCSAgICAgICBOSUdfUkVHX0lOR1JFU1NfQk1BQzBfTUVNOwotCXUzMiB3Yl9kYXRhWzJdOwotCXUzMiB2YWw7Ci0KLQlEUChORVRJRl9NU0dfTElOSywgIkVuYWJsaW5nIEJpZ01BQ1xuIik7Ci0JLyogcmVzZXQgYW5kIHVucmVzZXQgdGhlIEJpZ01hYyAqLwotCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfQ0xFQVIsCi0JICAgICAgIChNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9SU1RfQk1BQzAgPDwgcG9ydCkpOwotCW1zbGVlcCgxKTsKLQotCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfU0VULAotCSAgICAgICAoTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfUlNUX0JNQUMwIDw8IHBvcnQpKTsKLQotCS8qIGVuYWJsZSBhY2Nlc3MgZm9yIGJtYWMgcmVnaXN0ZXJzICovCi0JUkVHX1dSKGJwLCBOSUdfUkVHX0JNQUMwX1JFR1NfT1VUX0VOICsgcG9ydCo0LCAweDEpOwotCi0JLyogWEdYUyBjb250cm9sICovCi0Jd2JfZGF0YVswXSA9IDB4M2M7Ci0Jd2JfZGF0YVsxXSA9IDA7Ci0JUkVHX1dSX0RNQUUoYnAsIGJtYWNfYWRkciArCi0JCSAgICAgIEJJR01BQ19SRUdJU1RFUl9CTUFDX1hHWFNfQ09OVFJPTCwKLQkJICAgICAgd2JfZGF0YSwgMik7Ci0KLQkvKiB0eCBNQUMgU0EgKi8KLQl3Yl9kYXRhWzBdID0gKChwYXJhbXMtPm1hY19hZGRyWzJdIDw8IDI0KSB8Ci0JCSAgICAgICAocGFyYW1zLT5tYWNfYWRkclszXSA8PCAxNikgfAotCQkgICAgICAgKHBhcmFtcy0+bWFjX2FkZHJbNF0gPDwgOCkgfAotCQkJcGFyYW1zLT5tYWNfYWRkcls1XSk7Ci0Jd2JfZGF0YVsxXSA9ICgocGFyYW1zLT5tYWNfYWRkclswXSA8PCA4KSB8Ci0JCQlwYXJhbXMtPm1hY19hZGRyWzFdKTsKLQlSRUdfV1JfRE1BRShicCwgYm1hY19hZGRyICsgQklHTUFDX1JFR0lTVEVSX1RYX1NPVVJDRV9BRERSLAotCQkgICAgd2JfZGF0YSwgMik7Ci0KLQkvKiB0eCBjb250cm9sICovCi0JdmFsID0gMHhjMDsKLQlpZiAodmFycy0+Zmxvd19jdHJsICYgQk5YMlhfRkxPV19DVFJMX1RYKQotCQl2YWwgfD0gMHg4MDAwMDA7Ci0Jd2JfZGF0YVswXSA9IHZhbDsKLQl3Yl9kYXRhWzFdID0gMDsKLQlSRUdfV1JfRE1BRShicCwgYm1hY19hZGRyICsgQklHTUFDX1JFR0lTVEVSX1RYX0NPTlRST0wsCi0JCQl3Yl9kYXRhLCAyKTsKLQotCS8qIG1hYyBjb250cm9sICovCi0JdmFsID0gMHgzOwotCWlmIChpc19sYikgewotCQl2YWwgfD0gMHg0OwotCQlEUChORVRJRl9NU0dfTElOSywgImVuYWJsZSBibWFjIGxvb3BiYWNrXG4iKTsKLQl9Ci0Jd2JfZGF0YVswXSA9IHZhbDsKLQl3Yl9kYXRhWzFdID0gMDsKLQlSRUdfV1JfRE1BRShicCwgYm1hY19hZGRyICsgQklHTUFDX1JFR0lTVEVSX0JNQUNfQ09OVFJPTCwKLQkJICAgIHdiX2RhdGEsIDIpOwotCi0JLyogc2V0IHJ4IG10dSAqLwotCXdiX2RhdGFbMF0gPSBFVEhfTUFYX0pVTUJPX1BBQ0tFVF9TSVpFICsgRVRIX09WUkVIRUFEOwotCXdiX2RhdGFbMV0gPSAwOwotCVJFR19XUl9ETUFFKGJwLCBibWFjX2FkZHIgKyBCSUdNQUNfUkVHSVNURVJfUlhfTUFYX1NJWkUsCi0JCQl3Yl9kYXRhLCAyKTsKLQotCS8qIHJ4IGNvbnRyb2wgc2V0IHRvIGRvbid0IHN0cmlwIGNyYyAqLwotCXZhbCA9IDB4MTQ7Ci0JaWYgKHZhcnMtPmZsb3dfY3RybCAmIEJOWDJYX0ZMT1dfQ1RSTF9SWCkKLQkJdmFsIHw9IDB4MjA7Ci0Jd2JfZGF0YVswXSA9IHZhbDsKLQl3Yl9kYXRhWzFdID0gMDsKLQlSRUdfV1JfRE1BRShicCwgYm1hY19hZGRyICsgQklHTUFDX1JFR0lTVEVSX1JYX0NPTlRST0wsCi0JCQl3Yl9kYXRhLCAyKTsKLQotCS8qIHNldCB0eCBtdHUgKi8KLQl3Yl9kYXRhWzBdID0gRVRIX01BWF9KVU1CT19QQUNLRVRfU0laRSArIEVUSF9PVlJFSEVBRDsKLQl3Yl9kYXRhWzFdID0gMDsKLQlSRUdfV1JfRE1BRShicCwgYm1hY19hZGRyICsgQklHTUFDX1JFR0lTVEVSX1RYX01BWF9TSVpFLAotCQkJd2JfZGF0YSwgMik7Ci0KLQkvKiBzZXQgY250IG1heCBzaXplICovCi0Jd2JfZGF0YVswXSA9IEVUSF9NQVhfSlVNQk9fUEFDS0VUX1NJWkUgKyBFVEhfT1ZSRUhFQUQ7Ci0Jd2JfZGF0YVsxXSA9IDA7Ci0JUkVHX1dSX0RNQUUoYnAsIGJtYWNfYWRkciArIEJJR01BQ19SRUdJU1RFUl9DTlRfTUFYX1NJWkUsCi0JCSAgICB3Yl9kYXRhLCAyKTsKLQotCS8qIGNvbmZpZ3VyZSBzYWZjICovCi0Jd2JfZGF0YVswXSA9IDB4MTAwMDIwMDsKLQl3Yl9kYXRhWzFdID0gMDsKLQlSRUdfV1JfRE1BRShicCwgYm1hY19hZGRyICsgQklHTUFDX1JFR0lTVEVSX1JYX0xMRkNfTVNHX0ZMRFMsCi0JCSAgICB3Yl9kYXRhLCAyKTsKLQkvKiBmaXggZm9yIGVtdWxhdGlvbiAqLwotCWlmIChDSElQX1JFVl9JU19FTVVMKGJwKSkgewotCQl3Yl9kYXRhWzBdID0gMHhmMDAwOwotCQl3Yl9kYXRhWzFdID0gMDsKLQkJUkVHX1dSX0RNQUUoYnAsCi0JCQkgICAgYm1hY19hZGRyICsgQklHTUFDX1JFR0lTVEVSX1RYX1BBVVNFX1RIUkVTSE9MRCwKLQkJCSAgICB3Yl9kYXRhLCAyKTsKLQl9Ci0KLQlSRUdfV1IoYnAsIE5JR19SRUdfWEdYU19TRVJERVMwX01PREVfU0VMICsgcG9ydCo0LCAweDEpOwotCVJFR19XUihicCwgTklHX1JFR19YR1hTX0xBTkVfU0VMX1AwICsgcG9ydCo0LCAweDApOwotCVJFR19XUihicCwgTklHX1JFR19FR1JFU1NfRU1BQzBfUE9SVCArIHBvcnQqNCwgMHgwKTsKLQl2YWwgPSAwOwotCWlmICh2YXJzLT5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfVFgpCi0JCXZhbCA9IDE7Ci0JUkVHX1dSKGJwLCBOSUdfUkVHX0JNQUMwX1BBVVNFX09VVF9FTiArIHBvcnQqNCwgdmFsKTsKLQlSRUdfV1IoYnAsIE5JR19SRUdfRUdSRVNTX0VNQUMwX09VVF9FTiArIHBvcnQqNCwgMHgwKTsKLQlSRUdfV1IoYnAsIE5JR19SRUdfRU1BQzBfSU5fRU4gKyBwb3J0KjQsIDB4MCk7Ci0JUkVHX1dSKGJwLCBOSUdfUkVHX0VNQUMwX1BBVVNFX09VVF9FTiArIHBvcnQqNCwgMHgwKTsKLQlSRUdfV1IoYnAsIE5JR19SRUdfQk1BQzBfSU5fRU4gKyBwb3J0KjQsIDB4MSk7Ci0JUkVHX1dSKGJwLCBOSUdfUkVHX0JNQUMwX09VVF9FTiArIHBvcnQqNCwgMHgxKTsKLQotCXZhcnMtPm1hY190eXBlID0gTUFDX1RZUEVfQk1BQzsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfcGh5X2RlYXNzZXJ0KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCB1OCBwaHlfZmxhZ3MpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTMyIHZhbDsKLQotCWlmIChwaHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSB7Ci0JCURQKE5FVElGX01TR19MSU5LLCAiYm54MnhfcGh5X2RlYXNzZXJ0OlhHWFNcbiIpOwotCQl2YWwgPSBYR1hTX1JFU0VUX0JJVFM7Ci0KLQl9IGVsc2UgeyAvKiBTZXJEZXMgKi8KLQkJRFAoTkVUSUZfTVNHX0xJTkssICJibngyeF9waHlfZGVhc3NlcnQ6U2VyRGVzXG4iKTsKLQkJdmFsID0gU0VSREVTX1JFU0VUX0JJVFM7Ci0JfQotCi0JdmFsID0gdmFsIDw8IChwYXJhbXMtPnBvcnQqMTYpOwotCi0JLyogcmVzZXQgYW5kIHVucmVzZXQgdGhlIFNlckRlcy9YR1hTICovCi0JUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfM19DTEVBUiwKLQkJICAgIHZhbCk7Ci0JdWRlbGF5KDUwMCk7Ci0JUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfM19TRVQsCi0JCSAgICB2YWwpOwotCWJueDJ4X3NldF9waHlfbWRpbyhwYXJhbXMsIHBoeV9mbGFncyk7Ci19Ci0KLXZvaWQgYm54MnhfbGlua19zdGF0dXNfdXBkYXRlKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAotCQkJICAgIHN0cnVjdCBsaW5rX3ZhcnMgICAqdmFycykKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKLQl1OCBsaW5rXzEwZzsKLQl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OwotCi0JaWYgKHBhcmFtcy0+c3dpdGNoX2NmZyA9PSAgU1dJVENIX0NGR18xRykKLQkJdmFycy0+cGh5X2ZsYWdzID0gUEhZX1NFUkRFU19GTEFHOwotCWVsc2UKLQkJdmFycy0+cGh5X2ZsYWdzID0gUEhZX1hHWFNfRkxBRzsKLQl2YXJzLT5saW5rX3N0YXR1cyA9IFJFR19SRChicCwgcGFyYW1zLT5zaG1lbV9iYXNlICsKLQkJCQkJICBvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLAotCQkJCQkgICBwb3J0X21iW3BvcnRdLmxpbmtfc3RhdHVzKSk7Ci0KLQl2YXJzLT5saW5rX3VwID0gKHZhcnMtPmxpbmtfc3RhdHVzICYgTElOS19TVEFUVVNfTElOS19VUCk7Ci0KLQlpZiAodmFycy0+bGlua191cCkgewotCQlEUChORVRJRl9NU0dfTElOSywgInBoeSBsaW5rIHVwXG4iKTsKLQotCQl2YXJzLT5waHlfbGlua191cCA9IDE7Ci0JCXZhcnMtPmR1cGxleCA9IERVUExFWF9GVUxMOwotCQlzd2l0Y2ggKHZhcnMtPmxpbmtfc3RhdHVzICYKLQkJCQkJTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF9NQVNLKSB7Ci0JCQljYXNlIExJTktfMTBUSEQ6Ci0JCQkJdmFycy0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7Ci0JCQkJLyogZmFsbCB0aHJ1ICovCi0JCQljYXNlIExJTktfMTBURkQ6Ci0JCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIExJTktfMTAwVFhIRDoKLQkJCQl2YXJzLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKLQkJCQkvKiBmYWxsIHRocnUgKi8KLQkJCWNhc2UgTElOS18xMDBUNDoKLQkJCWNhc2UgTElOS18xMDBUWEZEOgotCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDA7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgTElOS18xMDAwVEhEOgotCQkJCXZhcnMtPmR1cGxleCA9IERVUExFWF9IQUxGOwotCQkJCS8qIGZhbGwgdGhydSAqLwotCQkJY2FzZSBMSU5LXzEwMDBURkQ6Ci0JCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDA7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgTElOS18yNTAwVEhEOgotCQkJCXZhcnMtPmR1cGxleCA9IERVUExFWF9IQUxGOwotCQkJCS8qIGZhbGwgdGhydSAqLwotCQkJY2FzZSBMSU5LXzI1MDBURkQ6Ci0JCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzI1MDA7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgTElOS18xMEdURkQ6Ci0JCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIExJTktfMTJHVEZEOgotCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMjAwMDsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBMSU5LXzEyXzVHVEZEOgotCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMjUwMDsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBMSU5LXzEzR1RGRDoKLQkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTMwMDA7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgTElOS18xNUdURkQ6Ci0JCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzE1MDAwOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIExJTktfMTZHVEZEOgotCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xNjAwMDsKLQkJCQlicmVhazsKLQotCQkJZGVmYXVsdDoKLQkJCQlicmVhazsKLQkJfQotCi0JCWlmICh2YXJzLT5saW5rX3N0YXR1cyAmIExJTktfU1RBVFVTX1RYX0ZMT1dfQ09OVFJPTF9FTkFCTEVEKQotCQkJdmFycy0+Zmxvd19jdHJsIHw9IEJOWDJYX0ZMT1dfQ1RSTF9UWDsKLQkJZWxzZQotCQkJdmFycy0+Zmxvd19jdHJsICY9IH5CTlgyWF9GTE9XX0NUUkxfVFg7Ci0KLQkJaWYgKHZhcnMtPmxpbmtfc3RhdHVzICYgTElOS19TVEFUVVNfUlhfRkxPV19DT05UUk9MX0VOQUJMRUQpCi0JCQl2YXJzLT5mbG93X2N0cmwgfD0gQk5YMlhfRkxPV19DVFJMX1JYOwotCQllbHNlCi0JCQl2YXJzLT5mbG93X2N0cmwgJj0gfkJOWDJYX0ZMT1dfQ1RSTF9SWDsKLQotCQlpZiAodmFycy0+cGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRykgewotCQkJaWYgKHZhcnMtPmxpbmVfc3BlZWQgJiYKLQkJCSAgICAoKHZhcnMtPmxpbmVfc3BlZWQgPT0gU1BFRURfMTApIHx8Ci0JCQkgICAgICh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEXzEwMCkpKSB7Ci0JCQkJdmFycy0+cGh5X2ZsYWdzIHw9IFBIWV9TR01JSV9GTEFHOwotCQkJfSBlbHNlIHsKLQkJCQl2YXJzLT5waHlfZmxhZ3MgJj0gflBIWV9TR01JSV9GTEFHOwotCQkJfQotCQl9Ci0KLQkJLyogYW55dGhpbmcgMTAgYW5kIG92ZXIgdXNlcyB0aGUgYm1hYyAqLwotCQlsaW5rXzEwZyA9ICgodmFycy0+bGluZV9zcGVlZCA9PSBTUEVFRF8xMDAwMCkgfHwKLQkJCSAgICAodmFycy0+bGluZV9zcGVlZCA9PSBTUEVFRF8xMjAwMCkgfHwKLQkJCSAgICAodmFycy0+bGluZV9zcGVlZCA9PSBTUEVFRF8xMjUwMCkgfHwKLQkJCSAgICAodmFycy0+bGluZV9zcGVlZCA9PSBTUEVFRF8xMzAwMCkgfHwKLQkJCSAgICAodmFycy0+bGluZV9zcGVlZCA9PSBTUEVFRF8xNTAwMCkgfHwKLQkJCSAgICAodmFycy0+bGluZV9zcGVlZCA9PSBTUEVFRF8xNjAwMCkpOwotCQlpZiAobGlua18xMGcpCi0JCQl2YXJzLT5tYWNfdHlwZSA9IE1BQ19UWVBFX0JNQUM7Ci0JCWVsc2UKLQkJCXZhcnMtPm1hY190eXBlID0gTUFDX1RZUEVfRU1BQzsKLQotCX0gZWxzZSB7IC8qIGxpbmsgZG93biAqLwotCQlEUChORVRJRl9NU0dfTElOSywgInBoeSBsaW5rIGRvd25cbiIpOwotCi0JCXZhcnMtPnBoeV9saW5rX3VwID0gMDsKLQotCQl2YXJzLT5saW5lX3NwZWVkID0gMDsKLQkJdmFycy0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7Ci0JCXZhcnMtPmZsb3dfY3RybCA9IEJOWDJYX0ZMT1dfQ1RSTF9OT05FOwotCi0JCS8qIGluZGljYXRlIG5vIG1hYyBhY3RpdmUgKi8KLQkJdmFycy0+bWFjX3R5cGUgPSBNQUNfVFlQRV9OT05FOwotCX0KLQotCURQKE5FVElGX01TR19MSU5LLCAibGlua19zdGF0dXMgMHgleCAgcGh5X2xpbmtfdXAgJXhcbiIsCi0JCSB2YXJzLT5saW5rX3N0YXR1cywgdmFycy0+cGh5X2xpbmtfdXApOwotCURQKE5FVElGX01TR19MSU5LLCAibGluZV9zcGVlZCAleCAgZHVwbGV4ICV4ICBmbG93X2N0cmwgMHgleFxuIiwKLQkJIHZhcnMtPmxpbmVfc3BlZWQsIHZhcnMtPmR1cGxleCwgdmFycy0+Zmxvd19jdHJsKTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfdXBkYXRlX21uZyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgdTMyIGxpbmtfc3RhdHVzKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCi0JUkVHX1dSKGJwLCBwYXJhbXMtPnNobWVtX2Jhc2UgKwotCQkgICBvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLAotCQkJICAgIHBvcnRfbWJbcGFyYW1zLT5wb3J0XS5saW5rX3N0YXR1cyksCi0JCQlsaW5rX3N0YXR1cyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2JtYWNfcnhfZGlzYWJsZShzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0KQotewotCXUzMiBibWFjX2FkZHIgPSBwb3J0ID8gTklHX1JFR19JTkdSRVNTX0JNQUMxX01FTSA6Ci0JCU5JR19SRUdfSU5HUkVTU19CTUFDMF9NRU07Ci0JdTMyIHdiX2RhdGFbMl07Ci0JdTMyIG5pZ19ibWFjX2VuYWJsZSA9IFJFR19SRChicCwgTklHX1JFR19CTUFDMF9SRUdTX09VVF9FTiArIHBvcnQqNCk7Ci0KLQkvKiBPbmx5IGlmIHRoZSBibWFjIGlzIG91dCBvZiByZXNldCAqLwotCWlmIChSRUdfUkQoYnAsIE1JU0NfUkVHX1JFU0VUX1JFR18yKSAmCi0JCQkoTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfUlNUX0JNQUMwIDw8IHBvcnQpICYmCi0JICAgIG5pZ19ibWFjX2VuYWJsZSkgewotCi0JCS8qIENsZWFyIFJ4IEVuYWJsZSBiaXQgaW4gQk1BQ19DT05UUk9MIHJlZ2lzdGVyICovCi0JCVJFR19SRF9ETUFFKGJwLCBibWFjX2FkZHIgKyBCSUdNQUNfUkVHSVNURVJfQk1BQ19DT05UUk9MLAotCQkJICAgIHdiX2RhdGEsIDIpOwotCQl3Yl9kYXRhWzBdICY9IH5CTUFDX0NPTlRST0xfUlhfRU5BQkxFOwotCQlSRUdfV1JfRE1BRShicCwgYm1hY19hZGRyICsgQklHTUFDX1JFR0lTVEVSX0JNQUNfQ09OVFJPTCwKLQkJCSAgICB3Yl9kYXRhLCAyKTsKLQotCQltc2xlZXAoMSk7Ci0JfQotfQotCi1zdGF0aWMgdTggYm54MnhfcGJmX3VwZGF0ZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgdTMyIGZsb3dfY3RybCwKLQkJCSB1MzIgbGluZV9zcGVlZCkKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKLQl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OwotCXUzMiBpbml0X2NyZCwgY3JkOwotCXUzMiBjb3VudCA9IDEwMDA7Ci0KLQkvKiBkaXNhYmxlIHBvcnQgKi8KLQlSRUdfV1IoYnAsIFBCRl9SRUdfRElTQUJMRV9ORVdfVEFTS19QUk9DX1AwICsgcG9ydCo0LCAweDEpOwotCi0JLyogd2FpdCBmb3IgaW5pdCBjcmVkaXQgKi8KLQlpbml0X2NyZCA9IFJFR19SRChicCwgUEJGX1JFR19QMF9JTklUX0NSRCArIHBvcnQqNCk7Ci0JY3JkID0gUkVHX1JEKGJwLCBQQkZfUkVHX1AwX0NSRURJVCArIHBvcnQqOCk7Ci0JRFAoTkVUSUZfTVNHX0xJTkssICJpbml0X2NyZCAweCV4ICBjcmQgMHgleFxuIiwgaW5pdF9jcmQsIGNyZCk7Ci0KLQl3aGlsZSAoKGluaXRfY3JkICE9IGNyZCkgJiYgY291bnQpIHsKLQkJbXNsZWVwKDUpOwotCi0JCWNyZCA9IFJFR19SRChicCwgUEJGX1JFR19QMF9DUkVESVQgKyBwb3J0KjgpOwotCQljb3VudC0tOwotCX0KLQljcmQgPSBSRUdfUkQoYnAsIFBCRl9SRUdfUDBfQ1JFRElUICsgcG9ydCo4KTsKLQlpZiAoaW5pdF9jcmQgIT0gY3JkKSB7Ci0JCURQKE5FVElGX01TR19MSU5LLCAiQlVHISBpbml0X2NyZCAweCV4ICE9IGNyZCAweCV4XG4iLAotCQkJICBpbml0X2NyZCwgY3JkKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGZsb3dfY3RybCAmIEJOWDJYX0ZMT1dfQ1RSTF9SWCB8fAotCSAgICBsaW5lX3NwZWVkID09IFNQRUVEXzEwIHx8Ci0JICAgIGxpbmVfc3BlZWQgPT0gU1BFRURfMTAwIHx8Ci0JICAgIGxpbmVfc3BlZWQgPT0gU1BFRURfMTAwMCB8fAotCSAgICBsaW5lX3NwZWVkID09IFNQRUVEXzI1MDApIHsKLQkJUkVHX1dSKGJwLCBQQkZfUkVHX1AwX1BBVVNFX0VOQUJMRSArIHBvcnQqNCwgMSk7Ci0JCS8qIHVwZGF0ZSB0aHJlc2hvbGQgKi8KLQkJUkVHX1dSKGJwLCBQQkZfUkVHX1AwX0FSQl9USFJTSCArIHBvcnQqNCwgMCk7Ci0JCS8qIHVwZGF0ZSBpbml0IGNyZWRpdCAqLwotCQlpbml0X2NyZCA9IDc3ODsgCS8qICg4MDAtMTgtNCkgKi8KLQotCX0gZWxzZSB7Ci0JCXUzMiB0aHJlc2ggPSAoRVRIX01BWF9KVU1CT19QQUNLRVRfU0laRSArCi0JCQkgICAgICBFVEhfT1ZSRUhFQUQpLzE2OwotCQlSRUdfV1IoYnAsIFBCRl9SRUdfUDBfUEFVU0VfRU5BQkxFICsgcG9ydCo0LCAwKTsKLQkJLyogdXBkYXRlIHRocmVzaG9sZCAqLwotCQlSRUdfV1IoYnAsIFBCRl9SRUdfUDBfQVJCX1RIUlNIICsgcG9ydCo0LCB0aHJlc2gpOwotCQkvKiB1cGRhdGUgaW5pdCBjcmVkaXQgKi8KLQkJc3dpdGNoIChsaW5lX3NwZWVkKSB7Ci0JCWNhc2UgU1BFRURfMTAwMDA6Ci0JCQlpbml0X2NyZCA9IHRocmVzaCArIDU1MyAtIDIyOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBTUEVFRF8xMjAwMDoKLQkJCWluaXRfY3JkID0gdGhyZXNoICsgNjY0IC0gMjI7Ci0JCQlicmVhazsKLQotCQljYXNlIFNQRUVEXzEzMDAwOgotCQkJaW5pdF9jcmQgPSB0aHJlc2ggKyA3NDIgLSAyMjsKLQkJCWJyZWFrOwotCi0JCWNhc2UgU1BFRURfMTYwMDA6Ci0JCQlpbml0X2NyZCA9IHRocmVzaCArIDc3OCAtIDIyOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIkludmFsaWQgbGluZV9zcGVlZCAweCV4XG4iLAotCQkJCSAgbGluZV9zcGVlZCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQlSRUdfV1IoYnAsIFBCRl9SRUdfUDBfSU5JVF9DUkQgKyBwb3J0KjQsIGluaXRfY3JkKTsKLQlEUChORVRJRl9NU0dfTElOSywgIlBCRiB1cGRhdGVkIHRvIHNwZWVkICVkIGNyZWRpdCAlZFxuIiwKLQkJIGxpbmVfc3BlZWQsIGluaXRfY3JkKTsKLQotCS8qIHByb2JlIHRoZSBjcmVkaXQgY2hhbmdlcyAqLwotCVJFR19XUihicCwgUEJGX1JFR19JTklUX1AwICsgcG9ydCo0LCAweDEpOwotCW1zbGVlcCg1KTsKLQlSRUdfV1IoYnAsIFBCRl9SRUdfSU5JVF9QMCArIHBvcnQqNCwgMHgwKTsKLQotCS8qIGVuYWJsZSBwb3J0ICovCi0JUkVHX1dSKGJwLCBQQkZfUkVHX0RJU0FCTEVfTkVXX1RBU0tfUFJPQ19QMCArIHBvcnQqNCwgMHgwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHUzMiBibngyeF9nZXRfZW1hY19iYXNlKHN0cnVjdCBibngyeCAqYnAsIHUzMiBleHRfcGh5X3R5cGUsIHU4IHBvcnQpCi17Ci0JdTMyIGVtYWNfYmFzZTsKLQotCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7Ci0JY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgotCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKLQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3Mjc6Ci0JCS8qIEFsbCBNREMvTURJTyBpcyBkaXJlY3RlZCB0aHJvdWdoIHNpbmdsZSBFTUFDICovCi0JCWlmIChSRUdfUkQoYnAsIE5JR19SRUdfUE9SVF9TV0FQKSkKLQkJCWVtYWNfYmFzZSA9IEdSQ0JBU0VfRU1BQzA7Ci0JCWVsc2UKLQkJCWVtYWNfYmFzZSA9IEdSQ0JBU0VfRU1BQzE7Ci0JCWJyZWFrOwotCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MzoKLQkJZW1hY19iYXNlID0gKHBvcnQpID8gR1JDQkFTRV9FTUFDMCA6IEdSQ0JBU0VfRU1BQzE7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWVtYWNfYmFzZSA9IChwb3J0KSA/IEdSQ0JBU0VfRU1BQzEgOiBHUkNCQVNFX0VNQUMwOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIGVtYWNfYmFzZTsKLQotfQotCi11OCBibngyeF9jbDQ1X3dyaXRlKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsIHUzMiBleHRfcGh5X3R5cGUsCi0JCSAgdTggcGh5X2FkZHIsIHU4IGRldmFkLCB1MTYgcmVnLCB1MTYgdmFsKQotewotCXUzMiB0bXAsIHNhdmVkX21vZGU7Ci0JdTggaSwgcmMgPSAwOwotCXUzMiBtZGlvX2N0cmwgPSBibngyeF9nZXRfZW1hY19iYXNlKGJwLCBleHRfcGh5X3R5cGUsIHBvcnQpOwotCi0JLyogc2V0IGNsYXVzZSA0NSBtb2RlLCBzbG93IGRvd24gdGhlIE1ESU8gY2xvY2sgdG8gMi41TUh6Ci0JICogKGEgdmFsdWUgb2YgNDk9PTB4MzEpIGFuZCBtYWtlIHN1cmUgdGhhdCB0aGUgQVVUTyBwb2xsIGlzIG9mZgotCSAqLwotCi0Jc2F2ZWRfbW9kZSA9IFJFR19SRChicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX01PREUpOwotCXRtcCA9IHNhdmVkX21vZGUgJiB+KEVNQUNfTURJT19NT0RFX0FVVE9fUE9MTCB8Ci0JCQkgICAgIEVNQUNfTURJT19NT0RFX0NMT0NLX0NOVCk7Ci0JdG1wIHw9IChFTUFDX01ESU9fTU9ERV9DTEFVU0VfNDUgfAotCQkoNDkgPDwgRU1BQ19NRElPX01PREVfQ0xPQ0tfQ05UX0JJVFNISUZUKSk7Ci0JUkVHX1dSKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSwgdG1wKTsKLQlSRUdfUkQoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19NT0RFKTsKLQl1ZGVsYXkoNDApOwotCi0JLyogYWRkcmVzcyAqLwotCi0JdG1wID0gKChwaHlfYWRkciA8PCAyMSkgfCAoZGV2YWQgPDwgMTYpIHwgcmVnIHwKLQkgICAgICAgRU1BQ19NRElPX0NPTU1fQ09NTUFORF9BRERSRVNTIHwKLQkgICAgICAgRU1BQ19NRElPX0NPTU1fU1RBUlRfQlVTWSk7Ci0JUkVHX1dSKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fQ09NTSwgdG1wKTsKLQotCWZvciAoaSA9IDA7IGkgPCA1MDsgaSsrKSB7Ci0JCXVkZWxheSgxMCk7Ci0KLQkJdG1wID0gUkVHX1JEKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fQ09NTSk7Ci0JCWlmICghKHRtcCAmIEVNQUNfTURJT19DT01NX1NUQVJUX0JVU1kpKSB7Ci0JCQl1ZGVsYXkoNSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAodG1wICYgRU1BQ19NRElPX0NPTU1fU1RBUlRfQlVTWSkgewotCQlEUChORVRJRl9NU0dfTElOSywgIndyaXRlIHBoeSByZWdpc3RlciBmYWlsZWRcbiIpOwotCQlyYyA9IC1FRkFVTFQ7Ci0JfSBlbHNlIHsKLQkJLyogZGF0YSAqLwotCQl0bXAgPSAoKHBoeV9hZGRyIDw8IDIxKSB8IChkZXZhZCA8PCAxNikgfCB2YWwgfAotCQkgICAgICAgRU1BQ19NRElPX0NPTU1fQ09NTUFORF9XUklURV80NSB8Ci0JCSAgICAgICBFTUFDX01ESU9fQ09NTV9TVEFSVF9CVVNZKTsKLQkJUkVHX1dSKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fQ09NTSwgdG1wKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgNTA7IGkrKykgewotCQkJdWRlbGF5KDEwKTsKLQotCQkJdG1wID0gUkVHX1JEKGJwLCBtZGlvX2N0cmwgKwotCQkJCQkgRU1BQ19SRUdfRU1BQ19NRElPX0NPTU0pOwotCQkJaWYgKCEodG1wICYgRU1BQ19NRElPX0NPTU1fU1RBUlRfQlVTWSkpIHsKLQkJCQl1ZGVsYXkoNSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKHRtcCAmIEVNQUNfTURJT19DT01NX1NUQVJUX0JVU1kpIHsKLQkJCURQKE5FVElGX01TR19MSU5LLCAid3JpdGUgcGh5IHJlZ2lzdGVyIGZhaWxlZFxuIik7Ci0JCQlyYyA9IC1FRkFVTFQ7Ci0JCX0KLQl9Ci0KLQkvKiBSZXN0b3JlIHRoZSBzYXZlZCBtb2RlICovCi0JUkVHX1dSKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSwgc2F2ZWRfbW9kZSk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXU4IGJueDJ4X2NsNDVfcmVhZChzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LCB1MzIgZXh0X3BoeV90eXBlLAotCQkgdTggcGh5X2FkZHIsIHU4IGRldmFkLCB1MTYgcmVnLCB1MTYgKnJldF92YWwpCi17Ci0JdTMyIHZhbCwgc2F2ZWRfbW9kZTsKLQl1MTYgaTsKLQl1OCByYyA9IDA7Ci0KLQl1MzIgbWRpb19jdHJsID0gYm54MnhfZ2V0X2VtYWNfYmFzZShicCwgZXh0X3BoeV90eXBlLCBwb3J0KTsKLQkvKiBzZXQgY2xhdXNlIDQ1IG1vZGUsIHNsb3cgZG93biB0aGUgTURJTyBjbG9jayB0byAyLjVNSHoKLQkgKiAoYSB2YWx1ZSBvZiA0OT09MHgzMSkgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoZSBBVVRPIHBvbGwgaXMgb2ZmCi0JICovCi0KLQlzYXZlZF9tb2RlID0gUkVHX1JEKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSk7Ci0JdmFsID0gc2F2ZWRfbW9kZSAmICgoRU1BQ19NRElPX01PREVfQVVUT19QT0xMIHwKLQkJCSAgICAgRU1BQ19NRElPX01PREVfQ0xPQ0tfQ05UKSk7Ci0JdmFsIHw9IChFTUFDX01ESU9fTU9ERV9DTEFVU0VfNDUgfAotCQkoNDlMIDw8IEVNQUNfTURJT19NT0RFX0NMT0NLX0NOVF9CSVRTSElGVCkpOwotCVJFR19XUihicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX01PREUsIHZhbCk7Ci0JUkVHX1JEKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSk7Ci0JdWRlbGF5KDQwKTsKLQotCS8qIGFkZHJlc3MgKi8KLQl2YWwgPSAoKHBoeV9hZGRyIDw8IDIxKSB8IChkZXZhZCA8PCAxNikgfCByZWcgfAotCSAgICAgICBFTUFDX01ESU9fQ09NTV9DT01NQU5EX0FERFJFU1MgfAotCSAgICAgICBFTUFDX01ESU9fQ09NTV9TVEFSVF9CVVNZKTsKLQlSRUdfV1IoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19DT01NLCB2YWwpOwotCi0JZm9yIChpID0gMDsgaSA8IDUwOyBpKyspIHsKLQkJdWRlbGF5KDEwKTsKLQotCQl2YWwgPSBSRUdfUkQoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19DT01NKTsKLQkJaWYgKCEodmFsICYgRU1BQ19NRElPX0NPTU1fU1RBUlRfQlVTWSkpIHsKLQkJCXVkZWxheSg1KTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmICh2YWwgJiBFTUFDX01ESU9fQ09NTV9TVEFSVF9CVVNZKSB7Ci0JCURQKE5FVElGX01TR19MSU5LLCAicmVhZCBwaHkgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKLQotCQkqcmV0X3ZhbCA9IDA7Ci0JCXJjID0gLUVGQVVMVDsKLQotCX0gZWxzZSB7Ci0JCS8qIGRhdGEgKi8KLQkJdmFsID0gKChwaHlfYWRkciA8PCAyMSkgfCAoZGV2YWQgPDwgMTYpIHwKLQkJICAgICAgIEVNQUNfTURJT19DT01NX0NPTU1BTkRfUkVBRF80NSB8Ci0JCSAgICAgICBFTUFDX01ESU9fQ09NTV9TVEFSVF9CVVNZKTsKLQkJUkVHX1dSKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fQ09NTSwgdmFsKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgNTA7IGkrKykgewotCQkJdWRlbGF5KDEwKTsKLQotCQkJdmFsID0gUkVHX1JEKGJwLCBtZGlvX2N0cmwgKwotCQkJCQkgIEVNQUNfUkVHX0VNQUNfTURJT19DT01NKTsKLQkJCWlmICghKHZhbCAmIEVNQUNfTURJT19DT01NX1NUQVJUX0JVU1kpKSB7Ci0JCQkJKnJldF92YWwgPSAodTE2KSh2YWwgJiBFTUFDX01ESU9fQ09NTV9EQVRBKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlpZiAodmFsICYgRU1BQ19NRElPX0NPTU1fU1RBUlRfQlVTWSkgewotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJyZWFkIHBoeSByZWdpc3RlciBmYWlsZWRcbiIpOwotCi0JCQkqcmV0X3ZhbCA9IDA7Ci0JCQlyYyA9IC1FRkFVTFQ7Ci0JCX0KLQl9Ci0KLQkvKiBSZXN0b3JlIHRoZSBzYXZlZCBtb2RlICovCi0JUkVHX1dSKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSwgc2F2ZWRfbW9kZSk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X3NldF9hZXJfbW1kKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAotCQkJICAgIHN0cnVjdCBsaW5rX3ZhcnMgICAqdmFycykKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKLQl1MzIgc2VyX2xhbmU7Ci0JdTE2IG9mZnNldDsKLQotCXNlcl9sYW5lID0gKChwYXJhbXMtPmxhbmVfY29uZmlnICYKLQkJICAgICBQT1JUX0hXX0NGR19MQU5FX1NXQVBfQ0ZHX01BU1RFUl9NQVNLKSA+PgotCQkgICAgIFBPUlRfSFdfQ0ZHX0xBTkVfU1dBUF9DRkdfTUFTVEVSX1NISUZUKTsKLQotCW9mZnNldCA9ICh2YXJzLT5waHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSA/Ci0JCShwYXJhbXMtPnBoeV9hZGRyICsgc2VyX2xhbmUpIDogMDsKLQotCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJICAgICAgTURJT19SRUdfQkFOS19BRVJfQkxPQ0ssCi0JCQkgICAgICBNRElPX0FFUl9CTE9DS19BRVJfUkVHLCAweDM4MDAgKyBvZmZzZXQpOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9zZXRfbWFzdGVyX2xuKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCXUxNiBuZXdfbWFzdGVyX2xuLCBzZXJfbGFuZTsKLQlzZXJfbGFuZSA9ICAoKHBhcmFtcy0+bGFuZV9jb25maWcgJgotCQkgICAgIFBPUlRfSFdfQ0ZHX0xBTkVfU1dBUF9DRkdfTUFTVEVSX01BU0spID4+Ci0JCSAgICAgUE9SVF9IV19DRkdfTEFORV9TV0FQX0NGR19NQVNURVJfU0hJRlQpOwotCi0JLyogc2V0IHRoZSBtYXN0ZXJfbG4gZm9yIEFOICovCi0JQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkgICAgICBNRElPX1JFR19CQU5LX1hHWFNfQkxPQ0syLAotCQkJICAgICAgTURJT19YR1hTX0JMT0NLMl9URVNUX01PREVfTEFORSwKLQkJCSAgICAgICZuZXdfbWFzdGVyX2xuKTsKLQotCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJICAgICAgTURJT19SRUdfQkFOS19YR1hTX0JMT0NLMiAsCi0JCQkgICAgICBNRElPX1hHWFNfQkxPQ0syX1RFU1RfTU9ERV9MQU5FLAotCQkJICAgICAgKG5ld19tYXN0ZXJfbG4gfCBzZXJfbGFuZSkpOwotfQotCi1zdGF0aWMgdTggYm54MnhfcmVzZXRfdW5pY29yZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKLQl1MTYgbWlpX2NvbnRyb2w7Ci0JdTE2IGk7Ci0KLQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCi0JCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLCAmbWlpX2NvbnRyb2wpOwotCi0JLyogcmVzZXQgdGhlIHVuaWNvcmUgKi8KLQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCi0JCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLAotCQkJICAgICAgKG1paV9jb250cm9sIHwKLQkJCSAgICAgICBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfUkVTRVQpKTsKLQlpZiAocGFyYW1zLT5zd2l0Y2hfY2ZnID09IFNXSVRDSF9DRkdfMUcpCi0JCWJueDJ4X3NldF9zZXJkZXNfYWNjZXNzKHBhcmFtcyk7Ci0KLQkvKiB3YWl0IGZvciB0aGUgcmVzZXQgdG8gc2VsZiBjbGVhciAqLwotCWZvciAoaSA9IDA7IGkgPCBNRElPX0FDQ0VTU19USU1FT1VUOyBpKyspIHsKLQkJdWRlbGF5KDUpOwotCi0JCS8qIHRoZSByZXNldCBlcmFzZWQgdGhlIHByZXZpb3VzIGJhbmsgdmFsdWUgKi8KLQkJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJICAgICAgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCwKLQkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsCi0JCQkgICAgICAmbWlpX2NvbnRyb2wpOwotCi0JCWlmICghKG1paV9jb250cm9sICYgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX1JFU0VUKSkgewotCQkJdWRlbGF5KDUpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQlEUChORVRJRl9NU0dfTElOSywgIkJVRyEgWEdYUyBpcyBzdGlsbCBpbiByZXNldCFcbiIpOwotCXJldHVybiAtRUlOVkFMOwotCi19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X3NldF9zd2FwX2xhbmVzKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCS8qIEVhY2ggdHdvIGJpdHMgcmVwcmVzZW50cyBhIGxhbmUgbnVtYmVyOgotCSAgIE5vIHN3YXAgaXMgMDEyMyA9PiAweDFiIG5vIG5lZWQgdG8gZW5hYmxlIHRoZSBzd2FwICovCi0JdTE2IHNlcl9sYW5lLCByeF9sYW5lX3N3YXAsIHR4X2xhbmVfc3dhcDsKLQotCXNlcl9sYW5lID0gKChwYXJhbXMtPmxhbmVfY29uZmlnICYKLQkJCSBQT1JUX0hXX0NGR19MQU5FX1NXQVBfQ0ZHX01BU1RFUl9NQVNLKSA+PgotCQkJUE9SVF9IV19DRkdfTEFORV9TV0FQX0NGR19NQVNURVJfU0hJRlQpOwotCXJ4X2xhbmVfc3dhcCA9ICgocGFyYW1zLT5sYW5lX2NvbmZpZyAmCi0JCQkgICAgIFBPUlRfSFdfQ0ZHX0xBTkVfU1dBUF9DRkdfUlhfTUFTSykgPj4KLQkJCSAgICBQT1JUX0hXX0NGR19MQU5FX1NXQVBfQ0ZHX1JYX1NISUZUKTsKLQl0eF9sYW5lX3N3YXAgPSAoKHBhcmFtcy0+bGFuZV9jb25maWcgJgotCQkJICAgICBQT1JUX0hXX0NGR19MQU5FX1NXQVBfQ0ZHX1RYX01BU0spID4+Ci0JCQkgICAgUE9SVF9IV19DRkdfTEFORV9TV0FQX0NGR19UWF9TSElGVCk7Ci0KLQlpZiAocnhfbGFuZV9zd2FwICE9IDB4MWIpIHsKLQkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJCSAgICBNRElPX1JFR19CQU5LX1hHWFNfQkxPQ0syLAotCQkJCSAgICBNRElPX1hHWFNfQkxPQ0syX1JYX0xOX1NXQVAsCi0JCQkJICAgIChyeF9sYW5lX3N3YXAgfAotCQkJCSAgICBNRElPX1hHWFNfQkxPQ0syX1JYX0xOX1NXQVBfRU5BQkxFIHwKLQkJCQkgICAgTURJT19YR1hTX0JMT0NLMl9SWF9MTl9TV0FQX0ZPUkNFX0VOQUJMRSkpOwotCX0gZWxzZSB7Ci0JCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1JFR19CQU5LX1hHWFNfQkxPQ0syLAotCQkJCSAgICAgIE1ESU9fWEdYU19CTE9DSzJfUlhfTE5fU1dBUCwgMCk7Ci0JfQotCi0JaWYgKHR4X2xhbmVfc3dhcCAhPSAweDFiKSB7Ci0JCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1JFR19CQU5LX1hHWFNfQkxPQ0syLAotCQkJCSAgICAgIE1ESU9fWEdYU19CTE9DSzJfVFhfTE5fU1dBUCwKLQkJCQkgICAgICAodHhfbGFuZV9zd2FwIHwKLQkJCQkgICAgICAgTURJT19YR1hTX0JMT0NLMl9UWF9MTl9TV0FQX0VOQUJMRSkpOwotCX0gZWxzZSB7Ci0JCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1JFR19CQU5LX1hHWFNfQkxPQ0syLAotCQkJCSAgICAgIE1ESU9fWEdYU19CTE9DSzJfVFhfTE5fU1dBUCwgMCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBibngyeF9zZXRfcGFyYWxsZWxfZGV0ZWN0aW9uKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAotCQkJCSAgICAgICB1OCAgICAgICAJIHBoeV9mbGFncykKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKLQl1MTYgY29udHJvbDI7Ci0KLQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUkVHX0JBTktfU0VSREVTX0RJR0lUQUwsCi0JCQkgICAgICBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDIsCi0JCQkgICAgICAmY29udHJvbDIpOwotCWlmIChwYXJhbXMtPnNwZWVkX2NhcF9tYXNrICYgUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xRykKLQkJY29udHJvbDIgfD0gTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wyX1BSTF9EVF9FTjsKLQllbHNlCi0JCWNvbnRyb2wyICY9IH5NRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDJfUFJMX0RUX0VOOwotCURQKE5FVElGX01TR19MSU5LLCAicGFyYW1zLT5zcGVlZF9jYXBfbWFzayA9IDB4JXgsIGNvbnRyb2wyID0gMHgleFxuIiwKLQkJcGFyYW1zLT5zcGVlZF9jYXBfbWFzaywgY29udHJvbDIpOwotCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJICAgICAgTURJT19SRUdfQkFOS19TRVJERVNfRElHSVRBTCwKLQkJCSAgICAgIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMiwKLQkJCSAgICAgIGNvbnRyb2wyKTsKLQotCWlmICgocGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRykgJiYKLQkgICAgIChwYXJhbXMtPnNwZWVkX2NhcF9tYXNrICYKLQkJICAgIFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMTBHKSkgewotCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFNcbiIpOwotCi0JCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQlNRElPX1JFR19CQU5LXzEwR19QQVJBTExFTF9ERVRFQ1QsCi0JCQkJTURJT18xMEdfUEFSQUxMRUxfREVURUNUX1BBUl9ERVRfMTBHX0xJTkssCi0JCQkJTURJT18xMEdfUEFSQUxMRUxfREVURUNUX1BBUl9ERVRfMTBHX0xJTktfQ05UKTsKLQotCQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJTURJT19SRUdfQkFOS18xMEdfUEFSQUxMRUxfREVURUNULAotCQkJCU1ESU9fMTBHX1BBUkFMTEVMX0RFVEVDVF9QQVJfREVUXzEwR19DT05UUk9MLAotCQkJCSZjb250cm9sMik7Ci0KLQotCQljb250cm9sMiB8PQotCQkgICAgTURJT18xMEdfUEFSQUxMRUxfREVURUNUX1BBUl9ERVRfMTBHX0NPTlRST0xfUEFSREVUMTBHX0VOOwotCi0JCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQlNRElPX1JFR19CQU5LXzEwR19QQVJBTExFTF9ERVRFQ1QsCi0JCQkJTURJT18xMEdfUEFSQUxMRUxfREVURUNUX1BBUl9ERVRfMTBHX0NPTlRST0wsCi0JCQkJY29udHJvbDIpOwotCi0JCS8qIERpc2FibGUgcGFyYWxsZWwgZGV0ZWN0aW9uIG9mIEhpRyAqLwotCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJTURJT19SRUdfQkFOS19YR1hTX0JMT0NLMiwKLQkJCQlNRElPX1hHWFNfQkxPQ0syX1VOSUNPUkVfTU9ERV8xMEcsCi0JCQkJTURJT19YR1hTX0JMT0NLMl9VTklDT1JFX01PREVfMTBHX0NYNF9YR1hTIHwKLQkJCQlNRElPX1hHWFNfQkxPQ0syX1VOSUNPUkVfTU9ERV8xMEdfSElHSUdfWEdYUyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBibngyeF9zZXRfYXV0b25lZyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKLQkJCSAgICBzdHJ1Y3QgbGlua192YXJzICp2YXJzLAotCQkJICAgIHU4IGVuYWJsZV9jbDczKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCXUxNiByZWdfdmFsOwotCi0JLyogQ0wzNyBBdXRvbmVnICovCi0KLQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCi0JCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLCAmcmVnX3ZhbCk7Ci0KLQkvKiBDTDM3IEF1dG9uZWcgRW5hYmxlZCAqLwotCWlmICh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEX0FVVE9fTkVHKQotCQlyZWdfdmFsIHw9IE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9BTl9FTjsKLQllbHNlIC8qIENMMzcgQXV0b25lZyBEaXNhYmxlZCAqLwotCQlyZWdfdmFsICY9IH4oTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX0FOX0VOIHwKLQkJCSAgICAgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX1JFU1RBUlRfQU4pOwotCi0JQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAotCQkJICAgICAgTURJT19DT01CT19JRUVFMF9NSUlfQ09OVFJPTCwgcmVnX3ZhbCk7Ci0KLQkvKiBFbmFibGUvRGlzYWJsZSBBdXRvZGV0ZWN0aW9uICovCi0KLQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUkVHX0JBTktfU0VSREVTX0RJR0lUQUwsCi0JCQkgICAgICBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDEsICZyZWdfdmFsKTsKLQlyZWdfdmFsICY9IH4oTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wxX1NJR05BTF9ERVRFQ1RfRU4gfAotCQkgICAgTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wxX0lOVkVSVF9TSUdOQUxfREVURUNUKTsKLQlyZWdfdmFsIHw9IE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMV9GSUJFUl9NT0RFOwotCWlmICh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEX0FVVE9fTkVHKQotCQlyZWdfdmFsIHw9IE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMV9BVVRPREVUOwotCWVsc2UKLQkJcmVnX3ZhbCAmPSB+TURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wxX0FVVE9ERVQ7Ci0KLQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUkVHX0JBTktfU0VSREVTX0RJR0lUQUwsCi0JCQkgICAgICBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDEsIHJlZ192YWwpOwotCi0JLyogRW5hYmxlIFRldG9uSUkgYW5kIEJBTSBhdXRvbmVnICovCi0JQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkgICAgICBNRElPX1JFR19CQU5LX0JBTV9ORVhUX1BBR0UsCi0JCQkgICAgICBNRElPX0JBTV9ORVhUX1BBR0VfTVA1X05FWFRfUEFHRV9DVFJMLAotCQkJICAmcmVnX3ZhbCk7Ci0JaWYgKHZhcnMtPmxpbmVfc3BlZWQgPT0gU1BFRURfQVVUT19ORUcpIHsKLQkJLyogRW5hYmxlIEJBTSBhbmVnIE1vZGUgYW5kIFRldG9uSUkgYW5lZyBNb2RlICovCi0JCXJlZ192YWwgfD0gKE1ESU9fQkFNX05FWFRfUEFHRV9NUDVfTkVYVF9QQUdFX0NUUkxfQkFNX01PREUgfAotCQkJICAgIE1ESU9fQkFNX05FWFRfUEFHRV9NUDVfTkVYVF9QQUdFX0NUUkxfVEVUT05fQU4pOwotCX0gZWxzZSB7Ci0JCS8qIFRldG9uSUkgYW5kIEJBTSBBdXRvbmVnIERpc2FibGVkICovCi0JCXJlZ192YWwgJj0gfihNRElPX0JBTV9ORVhUX1BBR0VfTVA1X05FWFRfUEFHRV9DVFJMX0JBTV9NT0RFIHwKLQkJCSAgICAgTURJT19CQU1fTkVYVF9QQUdFX01QNV9ORVhUX1BBR0VfQ1RSTF9URVRPTl9BTik7Ci0JfQotCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJICAgICAgTURJT19SRUdfQkFOS19CQU1fTkVYVF9QQUdFLAotCQkJICAgICAgTURJT19CQU1fTkVYVF9QQUdFX01QNV9ORVhUX1BBR0VfQ1RSTCwKLQkJCSAgICAgIHJlZ192YWwpOwotCi0JaWYgKGVuYWJsZV9jbDczKSB7Ci0JCS8qIEVuYWJsZSBDbDczIEZTTSBzdGF0dXMgYml0cyAqLwotCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX1VTRVJCMCwKLQkJCQkgICAgTURJT19DTDczX1VTRVJCMF9DTDczX1VDVFJMLAotCQkJCSAgICAgIDB4ZSk7Ci0KLQkJLyogRW5hYmxlIEJBTSBTdGF0aW9uIE1hbmFnZXIqLwotCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJcGFyYW1zLT5waHlfYWRkciwKLQkJCU1ESU9fUkVHX0JBTktfQ0w3M19VU0VSQjAsCi0JCQlNRElPX0NMNzNfVVNFUkIwX0NMNzNfQkFNX0NUUkwxLAotCQkJTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMV9CQU1fRU4gfAotCQkJTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMV9CQU1fU1RBVElPTl9NTkdSX0VOIHwKLQkJCU1ESU9fQ0w3M19VU0VSQjBfQ0w3M19CQU1fQ1RSTDFfQkFNX05QX0FGVEVSX0JQX0VOKTsKLQotCQkvKiBBZHZlcnRpc2UgQ0w3MyBsaW5rIHNwZWVkcyAqLwotCQkJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX0lFRUVCMSwKLQkJCQkJICAgICAgTURJT19DTDczX0lFRUVCMV9BTl9BRFYyLAotCQkJCQkgICAgICAmcmVnX3ZhbCk7Ci0JCWlmIChwYXJhbXMtPnNwZWVkX2NhcF9tYXNrICYKLQkJICAgIFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMTBHKQotCQkJcmVnX3ZhbCB8PSBNRElPX0NMNzNfSUVFRUIxX0FOX0FEVjJfQURWUl8xMEdfS1g0OwotCQlpZiAocGFyYW1zLT5zcGVlZF9jYXBfbWFzayAmCi0JCSAgICBQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzFHKQotCQkJcmVnX3ZhbCB8PSBNRElPX0NMNzNfSUVFRUIxX0FOX0FEVjJfQURWUl8xMDAwTV9LWDsKLQotCQkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX0lFRUVCMSwKLQkJCQkJICAgICAgTURJT19DTDczX0lFRUVCMV9BTl9BRFYyLAotCQkJCSAgICAgIHJlZ192YWwpOwotCi0JCS8qIENMNzMgQXV0b25lZyBFbmFibGVkICovCi0JCXJlZ192YWwgPSBNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTF9BTl9FTjsKLQotCX0gZWxzZSAvKiBDTDczIEF1dG9uZWcgRGlzYWJsZWQgKi8KLQkJcmVnX3ZhbCA9IDA7Ci0KLQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19JRUVFQjAsCi0JCQkgICAgICBNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTCwgcmVnX3ZhbCk7Ci19Ci0KLS8qIHByb2dyYW0gU2VyRGVzLCBmb3JjZWQgc3BlZWQgKi8KLXN0YXRpYyB2b2lkIGJueDJ4X3Byb2dyYW1fc2VyZGVzKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAotCQkJICAgICAgIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTE2IHJlZ192YWw7Ci0KLQkvKiBwcm9ncmFtIGR1cGxleCwgZGlzYWJsZSBhdXRvbmVnIGFuZCBzZ21paSovCi0JQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAotCQkJICAgICAgTURJT19DT01CT19JRUVFMF9NSUlfQ09OVFJPTCwgJnJlZ192YWwpOwotCXJlZ192YWwgJj0gfihNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfRlVMTF9EVVBMRVggfAotCQkgICAgIE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9BTl9FTiB8Ci0JCSAgICAgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX01BTl9TR01JSV9TUF9NQVNLKTsKLQlpZiAocGFyYW1zLT5yZXFfZHVwbGV4ID09IERVUExFWF9GVUxMKQotCQlyZWdfdmFsIHw9IE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9GVUxMX0RVUExFWDsKLQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCi0JCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLCByZWdfdmFsKTsKLQotCS8qIHByb2dyYW0gc3BlZWQKLQkgICAtIG5lZWRlZCBvbmx5IGlmIHRoZSBzcGVlZCBpcyBncmVhdGVyIHRoYW4gMUcgKDIuNUcgb3IgMTBHKSAqLwotCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1JFR19CQU5LX1NFUkRFU19ESUdJVEFMLAotCQkJCSAgICAgIE1ESU9fU0VSREVTX0RJR0lUQUxfTUlTQzEsICZyZWdfdmFsKTsKLQkvKiBjbGVhcmluZyB0aGUgc3BlZWQgdmFsdWUgYmVmb3JlIHNldHRpbmcgdGhlIHJpZ2h0IHNwZWVkICovCi0JRFAoTkVUSUZfTVNHX0xJTkssICJNRElPX1JFR19CQU5LX1NFUkRFU19ESUdJVEFMID0gMHgleFxuIiwgcmVnX3ZhbCk7Ci0KLQlyZWdfdmFsICY9IH4oTURJT19TRVJERVNfRElHSVRBTF9NSVNDMV9GT1JDRV9TUEVFRF9NQVNLIHwKLQkJICAgICBNRElPX1NFUkRFU19ESUdJVEFMX01JU0MxX0ZPUkNFX1NQRUVEX1NFTCk7Ci0KLQlpZiAoISgodmFycy0+bGluZV9zcGVlZCA9PSBTUEVFRF8xMDAwKSB8fAotCSAgICAgICh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEXzEwMCkgfHwKLQkgICAgICAodmFycy0+bGluZV9zcGVlZCA9PSBTUEVFRF8xMCkpKSB7Ci0KLQkJcmVnX3ZhbCB8PSAoTURJT19TRVJERVNfRElHSVRBTF9NSVNDMV9SRUZDTEtfU0VMXzE1Nl8yNU0gfAotCQkJICAgIE1ESU9fU0VSREVTX0RJR0lUQUxfTUlTQzFfRk9SQ0VfU1BFRURfU0VMKTsKLQkJaWYgKHZhcnMtPmxpbmVfc3BlZWQgPT0gU1BFRURfMTAwMDApCi0JCQlyZWdfdmFsIHw9Ci0JCQkJTURJT19TRVJERVNfRElHSVRBTF9NSVNDMV9GT1JDRV9TUEVFRF8xMEdfQ1g0OwotCQlpZiAodmFycy0+bGluZV9zcGVlZCA9PSBTUEVFRF8xMzAwMCkKLQkJCXJlZ192YWwgfD0KLQkJCQlNRElPX1NFUkRFU19ESUdJVEFMX01JU0MxX0ZPUkNFX1NQRUVEXzEzRzsKLQl9Ci0KLQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19SRUdfQkFOS19TRVJERVNfRElHSVRBTCwKLQkJCQkgICAgICBNRElPX1NFUkRFU19ESUdJVEFMX01JU0MxLCByZWdfdmFsKTsKLQotfQotCi1zdGF0aWMgdm9pZCBibngyeF9zZXRfYnJjbV9jbDM3X2FkdmVydGlzbWVudChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKLQl1MTYgdmFsID0gMDsKLQotCS8qIGNvbmZpZ3VyZSB0aGUgNDggYml0cyBmb3IgQkFNIEFOICovCi0KLQkvKiBzZXQgZXh0ZW5kZWQgY2FwYWJpbGl0aWVzICovCi0JaWYgKHBhcmFtcy0+c3BlZWRfY2FwX21hc2sgJiBQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzJfNUcpCi0JCXZhbCB8PSBNRElPX09WRVJfMUdfVVAxXzJfNUc7Ci0JaWYgKHBhcmFtcy0+c3BlZWRfY2FwX21hc2sgJiBQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzEwRykKLQkJdmFsIHw9IE1ESU9fT1ZFUl8xR19VUDFfMTBHOwotCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJICAgICAgTURJT19SRUdfQkFOS19PVkVSXzFHLAotCQkJICAgICAgTURJT19PVkVSXzFHX1VQMSwgdmFsKTsKLQotCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJICAgICAgTURJT19SRUdfQkFOS19PVkVSXzFHLAotCQkJICAgICAgTURJT19PVkVSXzFHX1VQMywgMHg0MDApOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9jYWxjX2llZWVfYW5lZ19hZHYoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHUxNiAqaWVlZV9mYykKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKLQkqaWVlZV9mYyA9IE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX0ZVTExfRFVQTEVYOwotCS8qIHJlc29sdmUgcGF1c2UgbW9kZSBhbmQgYWR2ZXJ0aXNlbWVudAotCSAqIFBsZWFzZSByZWZlciB0byBUYWJsZSAyOEItMyBvZiB0aGUgODAyLjNhYi0xOTk5IHNwZWMgKi8KLQotCXN3aXRjaCAocGFyYW1zLT5yZXFfZmxvd19jdHJsKSB7Ci0JY2FzZSBCTlgyWF9GTE9XX0NUUkxfQVVUTzoKLQkJaWYgKHBhcmFtcy0+cmVxX2ZjX2F1dG9fYWR2ID09IEJOWDJYX0ZMT1dfQ1RSTF9CT1RIKSB7Ci0JCQkqaWVlZV9mYyB8PQotCQkJICAgICBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9CT1RIOwotCQl9IGVsc2UgewotCQkJKmllZWVfZmMgfD0KLQkJICAgICAgIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0FTWU1NRVRSSUM7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBCTlgyWF9GTE9XX0NUUkxfVFg6Ci0JCSppZWVlX2ZjIHw9Ci0JCSAgICAgICBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9BU1lNTUVUUklDOwotCQlicmVhazsKLQotCWNhc2UgQk5YMlhfRkxPV19DVFJMX1JYOgotCWNhc2UgQk5YMlhfRkxPV19DVFJMX0JPVEg6Ci0JCSppZWVlX2ZjIHw9IE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0JPVEg7Ci0JCWJyZWFrOwotCi0JY2FzZSBCTlgyWF9GTE9XX0NUUkxfTk9ORToKLQlkZWZhdWx0OgotCQkqaWVlZV9mYyB8PSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9OT05FOwotCQlicmVhazsKLQl9Ci0JRFAoTkVUSUZfTVNHX0xJTkssICJpZWVlX2ZjID0gMHgleFxuIiwgKmllZWVfZmMpOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9zZXRfaWVlZV9hbmVnX2FkdmVydGlzbWVudChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKLQkJCQkJICAgdTE2IGllZWVfZmMpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTE2IHZhbDsKLQkvKiBmb3IgQU4sIHdlIGFyZSBhbHdheXMgcHVibGlzaGluZyBmdWxsIGR1cGxleCAqLwotCi0JQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAotCQkJICAgICAgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFYsIGllZWVfZmMpOwotCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX0lFRUVCMSwKLQkJCSAgICAgIE1ESU9fQ0w3M19JRUVFQjFfQU5fQURWMSwgJnZhbCk7Ci0JdmFsICY9IH5NRElPX0NMNzNfSUVFRUIxX0FOX0FEVjFfUEFVU0VfQk9USDsKLQl2YWwgfD0gKChpZWVlX2ZjPDwzKSAmIE1ESU9fQ0w3M19JRUVFQjFfQU5fQURWMV9QQVVTRV9NQVNLKTsKLQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19JRUVFQjEsCi0JCQkgICAgICBNRElPX0NMNzNfSUVFRUIxX0FOX0FEVjEsIHZhbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X3Jlc3RhcnRfYXV0b25lZyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgdTggZW5hYmxlX2NsNzMpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTE2IG1paV9jb250cm9sOwotCi0JRFAoTkVUSUZfTVNHX0xJTkssICJibngyeF9yZXN0YXJ0X2F1dG9uZWdcbiIpOwotCS8qIEVuYWJsZSBhbmQgcmVzdGFydCBCQU0vQ0wzNyBhbmVnICovCi0KLQlpZiAoZW5hYmxlX2NsNzMpIHsKLQkJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19JRUVFQjAsCi0JCQkJICAgICAgTURJT19DTDczX0lFRUVCMF9DTDczX0FOX0NPTlRST0wsCi0JCQkJICAgICAgJm1paV9jb250cm9sKTsKLQotCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJCXBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJTURJT19SRUdfQkFOS19DTDczX0lFRUVCMCwKLQkJCQlNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTCwKLQkJCQkobWlpX2NvbnRyb2wgfAotCQkJCU1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MX0FOX0VOIHwKLQkJCQlNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTF9SRVNUQVJUX0FOKSk7Ci0JfSBlbHNlIHsKLQotCQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCwKLQkJCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLAotCQkJCSAgICAgICZtaWlfY29udHJvbCk7Ci0JCURQKE5FVElGX01TR19MSU5LLAotCQkJICJibngyeF9yZXN0YXJ0X2F1dG9uZWcgbWlpX2NvbnRyb2wgYmVmb3JlID0gMHgleFxuIiwKLQkJCSBtaWlfY29udHJvbCk7Ci0JCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAotCQkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsCi0JCQkJICAgICAgKG1paV9jb250cm9sIHwKLQkJCQkgICAgICAgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX0FOX0VOIHwKLQkJCQkgICAgICAgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX1JFU1RBUlRfQU4pKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2luaXRpYWxpemVfc2dtaWlfcHJvY2VzcyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKLQkJCQkJIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTE2IGNvbnRyb2wxOwotCi0JLyogaW4gU0dNSUkgbW9kZSwgdGhlIHVuaWNvcmUgaXMgYWx3YXlzIHNsYXZlICovCi0KLQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUkVHX0JBTktfU0VSREVTX0RJR0lUQUwsCi0JCQkgICAgICBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDEsCi0JCSAgICAgICZjb250cm9sMSk7Ci0JY29udHJvbDEgfD0gTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wxX0lOVkVSVF9TSUdOQUxfREVURUNUOwotCS8qIHNldCBzZ21paSBtb2RlIChhbmQgbm90IGZpYmVyKSAqLwotCWNvbnRyb2wxICY9IH4oTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wxX0ZJQkVSX01PREUgfAotCQkgICAgICBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDFfQVVUT0RFVCB8Ci0JCSAgICAgIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMV9NU1RSX01PREUpOwotCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJICAgICAgTURJT19SRUdfQkFOS19TRVJERVNfRElHSVRBTCwKLQkJCSAgICAgIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMSwKLQkJCSAgICAgIGNvbnRyb2wxKTsKLQotCS8qIGlmIGZvcmNlZCBzcGVlZCAqLwotCWlmICghKHZhcnMtPmxpbmVfc3BlZWQgPT0gU1BFRURfQVVUT19ORUcpKSB7Ci0JCS8qIHNldCBzcGVlZCwgZGlzYWJsZSBhdXRvbmVnICovCi0JCXUxNiBtaWlfY29udHJvbDsKLQotCQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCwKLQkJCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLAotCQkJCSAgICAgICZtaWlfY29udHJvbCk7Ci0JCW1paV9jb250cm9sICY9IH4oTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX0FOX0VOIHwKLQkJCQkgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX01BTl9TR01JSV9TUF9NQVNLfAotCQkJCSBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfRlVMTF9EVVBMRVgpOwotCi0JCXN3aXRjaCAodmFycy0+bGluZV9zcGVlZCkgewotCQljYXNlIFNQRUVEXzEwMDoKLQkJCW1paV9jb250cm9sIHw9Ci0JCQkJTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX01BTl9TR01JSV9TUF8xMDA7Ci0JCQlicmVhazsKLQkJY2FzZSBTUEVFRF8xMDAwOgotCQkJbWlpX2NvbnRyb2wgfD0KLQkJCQlNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfTUFOX1NHTUlJX1NQXzEwMDA7Ci0JCQlicmVhazsKLQkJY2FzZSBTUEVFRF8xMDoKLQkJCS8qIHRoZXJlIGlzIG5vdGhpbmcgdG8gc2V0IGZvciAxME0gKi8KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJLyogaW52YWxpZCBzcGVlZCBmb3IgU0dNSUkgKi8KLQkJCURQKE5FVElGX01TR19MSU5LLCAiSW52YWxpZCBsaW5lX3NwZWVkIDB4JXhcbiIsCi0JCQkJICB2YXJzLT5saW5lX3NwZWVkKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogc2V0dGluZyB0aGUgZnVsbCBkdXBsZXggKi8KLQkJaWYgKHBhcmFtcy0+cmVxX2R1cGxleCA9PSBEVVBMRVhfRlVMTCkKLQkJCW1paV9jb250cm9sIHw9Ci0JCQkJTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX0ZVTExfRFVQTEVYOwotCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCwKLQkJCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLAotCQkJCSAgICAgIG1paV9jb250cm9sKTsKLQotCX0gZWxzZSB7IC8qIEFOIG1vZGUgKi8KLQkJLyogZW5hYmxlIGFuZCByZXN0YXJ0IEFOICovCi0JCWJueDJ4X3Jlc3RhcnRfYXV0b25lZyhwYXJhbXMsIDApOwotCX0KLX0KLQotCi0vKgotICogbGluayBtYW5hZ2VtZW50Ci0gKi8KLQotc3RhdGljIHZvaWQgYm54MnhfcGF1c2VfcmVzb2x2ZShzdHJ1Y3QgbGlua192YXJzICp2YXJzLCB1MzIgcGF1c2VfcmVzdWx0KQotewkJCQkJCS8qICBMRAkgICAgTFAJICovCi0Jc3dpdGNoIChwYXVzZV9yZXN1bHQpIHsgCQkvKiBBU1lNIFAgQVNZTSBQICovCi0JY2FzZSAweGI6ICAgICAgIAkJCS8qICAgMSAgMCAgIDEgIDEgKi8KLQkJdmFycy0+Zmxvd19jdHJsID0gQk5YMlhfRkxPV19DVFJMX1RYOwotCQlicmVhazsKLQotCWNhc2UgMHhlOiAgICAgICAJCQkvKiAgIDEgIDEgICAxICAwICovCi0JCXZhcnMtPmZsb3dfY3RybCA9IEJOWDJYX0ZMT1dfQ1RSTF9SWDsKLQkJYnJlYWs7Ci0KLQljYXNlIDB4NTogICAgICAgCQkJLyogICAwICAxICAgMCAgMSAqLwotCWNhc2UgMHg3OiAgICAgICAJCQkvKiAgIDAgIDEgICAxICAxICovCi0JY2FzZSAweGQ6ICAgICAgIAkJCS8qICAgMSAgMSAgIDAgIDEgKi8KLQljYXNlIDB4ZjogICAgICAgCQkJLyogICAxICAxICAgMSAgMSAqLwotCQl2YXJzLT5mbG93X2N0cmwgPSBCTlgyWF9GTE9XX0NUUkxfQk9USDsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB1OCBibngyeF9leHRfcGh5X3Jlc29sdmVfZmMoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCi0JCQkJICBzdHJ1Y3QgbGlua192YXJzICp2YXJzKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCXU4IGV4dF9waHlfYWRkcjsKLQl1MTYgbGRfcGF1c2U7CQkvKiBsb2NhbCAqLwotCXUxNiBscF9wYXVzZTsJCS8qIGxpbmsgcGFydG5lciAqLwotCXUxNiBhbl9jb21wbGV0ZTsJLyogQU4gY29tcGxldGUgKi8KLQl1MTYgcGF1c2VfcmVzdWx0OwotCXU4IHJldCA9IDA7Ci0JdTMyIGV4dF9waHlfdHlwZTsKLQl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OwotCWV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwotCWV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwotCS8qIHJlYWQgdHdpY2UgKi8KLQotCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKLQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCSAgICAgIE1ESU9fQU5fREVWQUQsCi0JCSAgICAgIE1ESU9fQU5fUkVHX1NUQVRVUywgJmFuX2NvbXBsZXRlKTsKLQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCi0JCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICBNRElPX0FOX0RFVkFELAotCQkgICAgICBNRElPX0FOX1JFR19TVEFUVVMsICZhbl9jb21wbGV0ZSk7Ci0KLQlpZiAoYW5fY29tcGxldGUgJiBNRElPX0FOX1JFR19TVEFUVVNfQU5fQ09NUExFVEUpIHsKLQkJcmV0ID0gMTsKLQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAotCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgTURJT19BTl9ERVZBRCwKLQkJCSAgICAgIE1ESU9fQU5fUkVHX0FEVl9QQVVTRSwgJmxkX3BhdXNlKTsKLQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAotCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgTURJT19BTl9ERVZBRCwKLQkJCSAgICAgIE1ESU9fQU5fUkVHX0xQX0FVVE9fTkVHLCAmbHBfcGF1c2UpOwotCQlwYXVzZV9yZXN1bHQgPSAobGRfcGF1c2UgJgotCQkJCU1ESU9fQU5fUkVHX0FEVl9QQVVTRV9NQVNLKSA+PiA4OwotCQlwYXVzZV9yZXN1bHQgfD0gKGxwX3BhdXNlICYKLQkJCQkgTURJT19BTl9SRUdfQURWX1BBVVNFX01BU0spID4+IDEwOwotCQlEUChORVRJRl9NU0dfTElOSywgIkV4dCBQSFkgcGF1c2UgcmVzdWx0IDB4JXhcbiIsCi0JCSAgIHBhdXNlX3Jlc3VsdCk7Ci0JCWJueDJ4X3BhdXNlX3Jlc29sdmUodmFycywgcGF1c2VfcmVzdWx0KTsKLQkJaWYgKHZhcnMtPmZsb3dfY3RybCA9PSBCTlgyWF9GTE9XX0NUUkxfTk9ORSAmJgotCQkgICAgIGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczKSB7Ci0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCi0JCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX0FOX0RFVkFELAotCQkJCSAgICAgIE1ESU9fQU5fUkVHX0NMMzdfRkNfTEQsICZsZF9wYXVzZSk7Ci0KLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKLQkJCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJICAgICAgTURJT19BTl9SRUdfQ0wzN19GQ19MUCwgJmxwX3BhdXNlKTsKLQkJCXBhdXNlX3Jlc3VsdCA9IChsZF9wYXVzZSAmCi0JCQkJTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfQk9USCkgPj4gNTsKLQkJCXBhdXNlX3Jlc3VsdCB8PSAobHBfcGF1c2UgJgotCQkJCU1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0JPVEgpID4+IDc7Ci0KLQkJCWJueDJ4X3BhdXNlX3Jlc29sdmUodmFycywgcGF1c2VfcmVzdWx0KTsKLQkJCURQKE5FVElGX01TR19MSU5LLCAiRXh0IFBIWSBDTDM3IHBhdXNlIHJlc3VsdCAweCV4XG4iLAotCQkJCSBwYXVzZV9yZXN1bHQpOwotCQl9Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB1OCBibngyeF9kaXJlY3RfcGFyYWxsZWxfZGV0ZWN0X3VzZWQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTE2IHBkXzEwZywgc3RhdHVzMl8xMDAweDsKLQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUkVHX0JBTktfU0VSREVTX0RJR0lUQUwsCi0JCQkgICAgICBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfU1RBVFVTMiwKLQkJCSAgICAgICZzdGF0dXMyXzEwMDB4KTsKLQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUkVHX0JBTktfU0VSREVTX0RJR0lUQUwsCi0JCQkgICAgICBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfU1RBVFVTMiwKLQkJCSAgICAgICZzdGF0dXMyXzEwMDB4KTsKLQlpZiAoc3RhdHVzMl8xMDAweCAmIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9TVEFUVVMyX0FOX0RJU0FCTEVEKSB7Ci0JCURQKE5FVElGX01TR19MSU5LLCAiMUcgcGFyYWxsZWwgZGV0ZWN0IGxpbmsgb24gcG9ydCAlZFxuIiwKLQkJCSBwYXJhbXMtPnBvcnQpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUkVHX0JBTktfMTBHX1BBUkFMTEVMX0RFVEVDVCwKLQkJCSAgICAgIE1ESU9fMTBHX1BBUkFMTEVMX0RFVEVDVF9QQVJfREVUXzEwR19TVEFUVVMsCi0JCQkgICAgICAmcGRfMTBnKTsKLQotCWlmIChwZF8xMGcgJiBNRElPXzEwR19QQVJBTExFTF9ERVRFQ1RfUEFSX0RFVF8xMEdfU1RBVFVTX1BEX0xJTkspIHsKLQkJRFAoTkVUSUZfTVNHX0xJTkssICIxMEcgcGFyYWxsZWwgZGV0ZWN0IGxpbmsgb24gcG9ydCAlZFxuIiwKLQkJCSBwYXJhbXMtPnBvcnQpOwotCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2Zsb3dfY3RybF9yZXNvbHZlKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAotCQkJCSAgc3RydWN0IGxpbmtfdmFycyAqdmFycywKLQkJCQkgIHUzMiBncF9zdGF0dXMpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTE2IGxkX3BhdXNlOyAgIC8qIGxvY2FsIGRyaXZlciAqLwotCXUxNiBscF9wYXVzZTsgICAvKiBsaW5rIHBhcnRuZXIgKi8KLQl1MTYgcGF1c2VfcmVzdWx0OwotCi0JdmFycy0+Zmxvd19jdHJsID0gQk5YMlhfRkxPV19DVFJMX05PTkU7Ci0KLQkvKiByZXNvbHZlIGZyb20gZ3Bfc3RhdHVzIGluIGNhc2Ugb2YgQU4gY29tcGxldGUgYW5kIG5vdCBzZ21paSAqLwotCWlmICgocGFyYW1zLT5yZXFfZmxvd19jdHJsID09IEJOWDJYX0ZMT1dfQ1RSTF9BVVRPKSAmJgotCSAgICAoZ3Bfc3RhdHVzICYgTURJT19BTl9DTDczX09SXzM3X0NPTVBMRVRFKSAmJgotCSAgICAoISh2YXJzLT5waHlfZmxhZ3MgJiBQSFlfU0dNSUlfRkxBRykpICYmCi0JICAgIChYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKSA9PQotCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUKSkgewotCQlpZiAoYm54MnhfZGlyZWN0X3BhcmFsbGVsX2RldGVjdF91c2VkKHBhcmFtcykpIHsKLQkJCXZhcnMtPmZsb3dfY3RybCA9IHBhcmFtcy0+cmVxX2ZjX2F1dG9fYWR2OwotCQkJcmV0dXJuOwotCQl9Ci0JCWlmICgoZ3Bfc3RhdHVzICYKLQkJICAgIChNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9DTDczX0FVVE9ORUdfQ09NUExFVEUgfAotCQkgICAgIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0NMNzNfTVJfTFBfTlBfQU5fQUJMRSkpID09Ci0JCSAgICAoTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQ0w3M19BVVRPTkVHX0NPTVBMRVRFIHwKLQkJICAgICBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9DTDczX01SX0xQX05QX0FOX0FCTEUpKSB7Ci0KLQkJCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19JRUVFQjEsCi0JCQkJCSAgICAgIE1ESU9fQ0w3M19JRUVFQjFfQU5fQURWMSwKLQkJCQkJICAgICAgJmxkX3BhdXNlKTsKLQkJCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCSAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQkJICAgICBNRElPX1JFR19CQU5LX0NMNzNfSUVFRUIxLAotCQkJCQkgICAgIE1ESU9fQ0w3M19JRUVFQjFfQU5fTFBfQURWMSwKLQkJCQkJICAgICAmbHBfcGF1c2UpOwotCQkJcGF1c2VfcmVzdWx0ID0gKGxkX3BhdXNlICYKLQkJCQkJTURJT19DTDczX0lFRUVCMV9BTl9BRFYxX1BBVVNFX01BU0spCi0JCQkJCT4+IDg7Ci0JCQlwYXVzZV9yZXN1bHQgfD0gKGxwX3BhdXNlICYKLQkJCQkJTURJT19DTDczX0lFRUVCMV9BTl9MUF9BRFYxX1BBVVNFX01BU0spCi0JCQkJCT4+IDEwOwotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJwYXVzZV9yZXN1bHQgQ0w3MyAweCV4XG4iLAotCQkJCSBwYXVzZV9yZXN1bHQpOwotCQl9IGVsc2UgewotCi0JCQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAotCQkJCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEViwKLQkJCQkJICAgICAgJmxkX3BhdXNlKTsKLQkJCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkgICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCSAgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAotCQkJICAgICAgIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfTElOS19QQVJUTkVSX0FCSUxJVFkxLAotCQkJICAgICAgICZscF9wYXVzZSk7Ci0JCQlwYXVzZV9yZXN1bHQgPSAobGRfcGF1c2UgJgotCQkJCU1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX01BU0spPj41OwotCQkJcGF1c2VfcmVzdWx0IHw9IChscF9wYXVzZSAmCi0JCQkJIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX01BU0spPj43OwotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJwYXVzZV9yZXN1bHQgQ0wzNyAweCV4XG4iLAotCQkJCSBwYXVzZV9yZXN1bHQpOwotCQl9Ci0JCWJueDJ4X3BhdXNlX3Jlc29sdmUodmFycywgcGF1c2VfcmVzdWx0KTsKLQl9IGVsc2UgaWYgKChwYXJhbXMtPnJlcV9mbG93X2N0cmwgPT0gQk5YMlhfRkxPV19DVFJMX0FVVE8pICYmCi0JCSAgIChibngyeF9leHRfcGh5X3Jlc29sdmVfZmMocGFyYW1zLCB2YXJzKSkpIHsKLQkJcmV0dXJuOwotCX0gZWxzZSB7Ci0JCWlmIChwYXJhbXMtPnJlcV9mbG93X2N0cmwgPT0gQk5YMlhfRkxPV19DVFJMX0FVVE8pCi0JCQl2YXJzLT5mbG93X2N0cmwgPSBwYXJhbXMtPnJlcV9mY19hdXRvX2FkdjsKLQkJZWxzZQotCQkJdmFycy0+Zmxvd19jdHJsID0gcGFyYW1zLT5yZXFfZmxvd19jdHJsOwotCX0KLQlEUChORVRJRl9NU0dfTElOSywgImZsb3dfY3RybCAweCV4XG4iLCB2YXJzLT5mbG93X2N0cmwpOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9jaGVja19mYWxsYmFja190b19jbDM3KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCXUxNiByeF9zdGF0dXMsIHVzdGF0X3ZhbCwgY2wzN19mc21fcmVjaWV2ZWQ7Ci0JRFAoTkVUSUZfTVNHX0xJTkssICJibngyeF9jaGVja19mYWxsYmFja190b19jbDM3XG4iKTsKLQkvKiBTdGVwIDE6IE1ha2Ugc3VyZSBzaWduYWwgaXMgZGV0ZWN0ZWQgKi8KLQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUkVHX0JBTktfUlgwLAotCQkJICAgICAgTURJT19SWDBfUlhfU1RBVFVTLAotCQkJICAgICAgJnJ4X3N0YXR1cyk7Ci0JaWYgKChyeF9zdGF0dXMgJiBNRElPX1JYMF9SWF9TVEFUVVNfU0lHREVUKSAhPQotCSAgICAoTURJT19SWDBfUlhfU1RBVFVTX1NJR0RFVCkpIHsKLQkJRFAoTkVUSUZfTVNHX0xJTkssICJTaWduYWwgaXMgbm90IGRldGVjdGVkLiBSZXN0b3JpbmcgQ0w3My4iCi0JCQkgICAgICJyeF9zdGF0dXMoMHg4MGIwKSA9IDB4JXhcbiIsIHJ4X3N0YXR1cyk7Ci0JCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1JFR19CQU5LX0NMNzNfSUVFRUIwLAotCQkJCSAgICAgIE1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MLAotCQkJCSAgICAgIE1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MX0FOX0VOKTsKLQkJcmV0dXJuOwotCX0KLQkvKiBTdGVwIDI6IENoZWNrIENMNzMgc3RhdGUgbWFjaGluZSAqLwotCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX1VTRVJCMCwKLQkJCSAgICAgIE1ESU9fQ0w3M19VU0VSQjBfQ0w3M19VU1RBVDEsCi0JCQkgICAgICAmdXN0YXRfdmFsKTsKLQlpZiAoKHVzdGF0X3ZhbCAmCi0JICAgICAoTURJT19DTDczX1VTRVJCMF9DTDczX1VTVEFUMV9MSU5LX1NUQVRVU19DSEVDSyB8Ci0JICAgICAgTURJT19DTDczX1VTRVJCMF9DTDczX1VTVEFUMV9BTl9HT09EX0NIRUNLX0JBTTM3KSkgIT0KLQkgICAgKE1ESU9fQ0w3M19VU0VSQjBfQ0w3M19VU1RBVDFfTElOS19TVEFUVVNfQ0hFQ0sgfAotCSAgICAgIE1ESU9fQ0w3M19VU0VSQjBfQ0w3M19VU1RBVDFfQU5fR09PRF9DSEVDS19CQU0zNykpIHsKLQkJRFAoTkVUSUZfTVNHX0xJTkssICJDTDczIHN0YXRlLW1hY2hpbmUgaXMgbm90IHN0YWJsZS4gIgotCQkJICAgICAidXN0YXRfdmFsKDB4ODM3MSkgPSAweCV4XG4iLCB1c3RhdF92YWwpOwotCQlyZXR1cm47Ci0JfQotCS8qIFN0ZXAgMzogQ2hlY2sgQ0wzNyBNZXNzYWdlIFBhZ2VzIHJlY2VpdmVkIHRvIGluZGljYXRlIExQCi0Jc3VwcG9ydHMgb25seSBDTDM3ICovCi0JQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkgICAgICBNRElPX1JFR19CQU5LX1JFTU9URV9QSFksCi0JCQkgICAgICBNRElPX1JFTU9URV9QSFlfTUlTQ19SWF9TVEFUVVMsCi0JCQkgICAgICAmY2wzN19mc21fcmVjaWV2ZWQpOwotCWlmICgoY2wzN19mc21fcmVjaWV2ZWQgJgotCSAgICAgKE1ESU9fUkVNT1RFX1BIWV9NSVNDX1JYX1NUQVRVU19DTDM3X0ZTTV9SRUNFSVZFRF9PVkVSMUdfTVNHIHwKLQkgICAgIE1ESU9fUkVNT1RFX1BIWV9NSVNDX1JYX1NUQVRVU19DTDM3X0ZTTV9SRUNFSVZFRF9CUkNNX09VSV9NU0cpKSAhPQotCSAgICAoTURJT19SRU1PVEVfUEhZX01JU0NfUlhfU1RBVFVTX0NMMzdfRlNNX1JFQ0VJVkVEX09WRVIxR19NU0cgfAotCSAgICAgIE1ESU9fUkVNT1RFX1BIWV9NSVNDX1JYX1NUQVRVU19DTDM3X0ZTTV9SRUNFSVZFRF9CUkNNX09VSV9NU0cpKSB7Ci0JCURQKE5FVElGX01TR19MSU5LLCAiTm8gQ0wzNyBGU00gd2VyZSByZWNlaXZlZC4gIgotCQkJICAgICAibWlzY19yeF9zdGF0dXMoMHg4MzMwKSA9IDB4JXhcbiIsCi0JCQkgY2wzN19mc21fcmVjaWV2ZWQpOwotCQlyZXR1cm47Ci0JfQotCS8qIFRoZSBjb21iaW5lZCBjbDM3L2NsNzMgZnNtIHN0YXRlIGluZm9ybWF0aW9uIGluZGljYXRpbmcgdGhhdCB3ZSBhcmUKLQljb25uZWN0ZWQgdG8gYSBkZXZpY2Ugd2hpY2ggZG9lcyBub3Qgc3VwcG9ydCBjbDczLCBidXQgZG9lcyBzdXBwb3J0Ci0JY2wzNyBCQU0uIEluIHRoaXMgY2FzZSB3ZSBkaXNhYmxlIGNsNzMgYW5kIHJlc3RhcnQgY2wzNyBhdXRvLW5lZyAqLwotCS8qIERpc2FibGUgQ0w3MyAqLwotCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX0lFRUVCMCwKLQkJCSAgICAgIE1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MLAotCQkJICAgICAgMCk7Ci0JLyogUmVzdGFydCBDTDM3IGF1dG9uZWcgKi8KLQlibngyeF9yZXN0YXJ0X2F1dG9uZWcocGFyYW1zLCAwKTsKLQlEUChORVRJRl9NU0dfTElOSywgIkRpc2FibGluZyBDTDczLCBhbmQgcmVzdGFydGluZyBDTDM3IGF1dG9uZWdcbiIpOwotfQotc3RhdGljIHU4IGJueDJ4X2xpbmtfc2V0dGluZ3Nfc3RhdHVzKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAotCQkJCSAgIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMsCi0JCQkJICAgdTMyIGdwX3N0YXR1cywKLQkJCQkgICB1OCBleHRfcGh5X2xpbmtfdXApCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTE2IG5ld19saW5lX3NwZWVkOwotCXU4IHJjID0gMDsKLQl2YXJzLT5saW5rX3N0YXR1cyA9IDA7Ci0KLQlpZiAoZ3Bfc3RhdHVzICYgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfTElOS19TVEFUVVMpIHsKLQkJRFAoTkVUSUZfTVNHX0xJTkssICJwaHkgbGluayB1cCBncF9zdGF0dXM9MHgleFxuIiwKLQkJCSBncF9zdGF0dXMpOwotCi0JCXZhcnMtPnBoeV9saW5rX3VwID0gMTsKLQkJdmFycy0+bGlua19zdGF0dXMgfD0gTElOS19TVEFUVVNfTElOS19VUDsKLQotCQlpZiAoZ3Bfc3RhdHVzICYgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfRFVQTEVYX1NUQVRVUykKLQkJCXZhcnMtPmR1cGxleCA9IERVUExFWF9GVUxMOwotCQllbHNlCi0JCQl2YXJzLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKLQotCQlibngyeF9mbG93X2N0cmxfcmVzb2x2ZShwYXJhbXMsIHZhcnMsIGdwX3N0YXR1cyk7Ci0KLQkJc3dpdGNoIChncF9zdGF0dXMgJiBHUF9TVEFUVVNfU1BFRURfTUFTSykgewotCQljYXNlIEdQX1NUQVRVU18xME06Ci0JCQluZXdfbGluZV9zcGVlZCA9IFNQRUVEXzEwOwotCQkJaWYgKHZhcnMtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKLQkJCQl2YXJzLT5saW5rX3N0YXR1cyB8PSBMSU5LXzEwVEZEOwotCQkJZWxzZQotCQkJCXZhcnMtPmxpbmtfc3RhdHVzIHw9IExJTktfMTBUSEQ7Ci0JCQlicmVhazsKLQotCQljYXNlIEdQX1NUQVRVU18xMDBNOgotCQkJbmV3X2xpbmVfc3BlZWQgPSBTUEVFRF8xMDA7Ci0JCQlpZiAodmFycy0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQotCQkJCXZhcnMtPmxpbmtfc3RhdHVzIHw9IExJTktfMTAwVFhGRDsKLQkJCWVsc2UKLQkJCQl2YXJzLT5saW5rX3N0YXR1cyB8PSBMSU5LXzEwMFRYSEQ7Ci0JCQlicmVhazsKLQotCQljYXNlIEdQX1NUQVRVU18xRzoKLQkJY2FzZSBHUF9TVEFUVVNfMUdfS1g6Ci0JCQluZXdfbGluZV9zcGVlZCA9IFNQRUVEXzEwMDA7Ci0JCQlpZiAodmFycy0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQotCQkJCXZhcnMtPmxpbmtfc3RhdHVzIHw9IExJTktfMTAwMFRGRDsKLQkJCWVsc2UKLQkJCQl2YXJzLT5saW5rX3N0YXR1cyB8PSBMSU5LXzEwMDBUSEQ7Ci0JCQlicmVhazsKLQotCQljYXNlIEdQX1NUQVRVU18yXzVHOgotCQkJbmV3X2xpbmVfc3BlZWQgPSBTUEVFRF8yNTAwOwotCQkJaWYgKHZhcnMtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKLQkJCQl2YXJzLT5saW5rX3N0YXR1cyB8PSBMSU5LXzI1MDBURkQ7Ci0JCQllbHNlCi0JCQkJdmFycy0+bGlua19zdGF0dXMgfD0gTElOS18yNTAwVEhEOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBHUF9TVEFUVVNfNUc6Ci0JCWNhc2UgR1BfU1RBVFVTXzZHOgotCQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkJICJsaW5rIHNwZWVkIHVuc3VwcG9ydGVkICBncF9zdGF0dXMgMHgleFxuIiwKLQkJCQkgIGdwX3N0YXR1cyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQljYXNlIEdQX1NUQVRVU18xMEdfS1g0OgotCQljYXNlIEdQX1NUQVRVU18xMEdfSElHOgotCQljYXNlIEdQX1NUQVRVU18xMEdfQ1g0OgotCQkJbmV3X2xpbmVfc3BlZWQgPSBTUEVFRF8xMDAwMDsKLQkJCXZhcnMtPmxpbmtfc3RhdHVzIHw9IExJTktfMTBHVEZEOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBHUF9TVEFUVVNfMTJHX0hJRzoKLQkJCW5ld19saW5lX3NwZWVkID0gU1BFRURfMTIwMDA7Ci0JCQl2YXJzLT5saW5rX3N0YXR1cyB8PSBMSU5LXzEyR1RGRDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgR1BfU1RBVFVTXzEyXzVHOgotCQkJbmV3X2xpbmVfc3BlZWQgPSBTUEVFRF8xMjUwMDsKLQkJCXZhcnMtPmxpbmtfc3RhdHVzIHw9IExJTktfMTJfNUdURkQ7Ci0JCQlicmVhazsKLQotCQljYXNlIEdQX1NUQVRVU18xM0c6Ci0JCQluZXdfbGluZV9zcGVlZCA9IFNQRUVEXzEzMDAwOwotCQkJdmFycy0+bGlua19zdGF0dXMgfD0gTElOS18xM0dURkQ7Ci0JCQlicmVhazsKLQotCQljYXNlIEdQX1NUQVRVU18xNUc6Ci0JCQluZXdfbGluZV9zcGVlZCA9IFNQRUVEXzE1MDAwOwotCQkJdmFycy0+bGlua19zdGF0dXMgfD0gTElOS18xNUdURkQ7Ci0JCQlicmVhazsKLQotCQljYXNlIEdQX1NUQVRVU18xNkc6Ci0JCQluZXdfbGluZV9zcGVlZCA9IFNQRUVEXzE2MDAwOwotCQkJdmFycy0+bGlua19zdGF0dXMgfD0gTElOS18xNkdURkQ7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkJICAibGluayBzcGVlZCB1bnN1cHBvcnRlZCBncF9zdGF0dXMgMHgleFxuIiwKLQkJCQkgIGdwX3N0YXR1cyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCS8qIFVwb24gbGluayBzcGVlZCBjaGFuZ2Ugc2V0IHRoZSBOSUcgaW50byBkcmFpbiBtb2RlLgotCQlDb21lcyB0byBkZWFscyB3aXRoIHBvc3NpYmxlIEZJRk8gZ2xpdGNoIGR1ZSB0byBjbGsgY2hhbmdlCi0JCXdoZW4gc3BlZWQgaXMgZGVjcmVhc2VkIHdpdGhvdXQgbGluayBkb3duIGluZGljYXRvciAqLwotCQlpZiAobmV3X2xpbmVfc3BlZWQgIT0gdmFycy0+bGluZV9zcGVlZCkgewotCQkJaWYgKFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpICE9Ci0JCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVCAmJgotCQkJICAgIGV4dF9waHlfbGlua191cCkgewotCQkJCURQKE5FVElGX01TR19MSU5LLCAiSW50ZXJuYWwgbGluayBzcGVlZCAlZCBpcyIKLQkJCQkJICAgICIgZGlmZmVyZW50IHRoYW4gdGhlIGV4dGVybmFsIgotCQkJCQkgICAgIiBsaW5rIHNwZWVkICVkXG4iLCBuZXdfbGluZV9zcGVlZCwKLQkJCQkJICB2YXJzLT5saW5lX3NwZWVkKTsKLQkJCQl2YXJzLT5waHlfbGlua191cCA9IDA7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQlSRUdfV1IoYnAsIE5JR19SRUdfRUdSRVNTX0RSQUlOMF9NT0RFCi0JCQkJICAgICsgcGFyYW1zLT5wb3J0KjQsIDApOwotCQkJbXNsZWVwKDEpOwotCQl9Ci0JCXZhcnMtPmxpbmVfc3BlZWQgPSBuZXdfbGluZV9zcGVlZDsKLQkJdmFycy0+bGlua19zdGF0dXMgfD0gTElOS19TVEFUVVNfU0VSREVTX0xJTks7Ci0KLQkJaWYgKChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09IFNQRUVEX0FVVE9fTkVHKSAmJgotCQkgICAgKChYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKSA9PQotCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVCkgfHwKLQkJICAgIChYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKSA9PQotCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDUpIHx8Ci0JCSAgICAoWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZykgPT0KLQkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2KSB8fAotCQkgICAgKFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpID09Ci0JCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNikpKSB7Ci0JCQl2YXJzLT5hdXRvbmVnID0gQVVUT19ORUdfRU5BQkxFRDsKLQotCQkJaWYgKGdwX3N0YXR1cyAmIE1ESU9fQU5fQ0w3M19PUl8zN19DT01QTEVURSkgewotCQkJCXZhcnMtPmF1dG9uZWcgfD0gQVVUT19ORUdfQ09NUExFVEU7Ci0JCQkJdmFycy0+bGlua19zdGF0dXMgfD0KLQkJCQkJTElOS19TVEFUVVNfQVVUT19ORUdPVElBVEVfQ09NUExFVEU7Ci0JCQl9Ci0KLQkJCXZhcnMtPmF1dG9uZWcgfD0gQVVUT19ORUdfUEFSQUxMRUxfREVURUNUSU9OX1VTRUQ7Ci0JCQl2YXJzLT5saW5rX3N0YXR1cyB8PQotCQkJCUxJTktfU1RBVFVTX1BBUkFMTEVMX0RFVEVDVElPTl9VU0VEOwotCi0JCX0KLQkJaWYgKHZhcnMtPmZsb3dfY3RybCAmIEJOWDJYX0ZMT1dfQ1RSTF9UWCkKLQkJCXZhcnMtPmxpbmtfc3RhdHVzIHw9Ci0JCQkJTElOS19TVEFUVVNfVFhfRkxPV19DT05UUk9MX0VOQUJMRUQ7Ci0KLQkJaWYgKHZhcnMtPmZsb3dfY3RybCAmIEJOWDJYX0ZMT1dfQ1RSTF9SWCkKLQkJCXZhcnMtPmxpbmtfc3RhdHVzIHw9Ci0JCQkJTElOS19TVEFUVVNfUlhfRkxPV19DT05UUk9MX0VOQUJMRUQ7Ci0KLQl9IGVsc2UgeyAvKiBsaW5rX2Rvd24gKi8KLQkJRFAoTkVUSUZfTVNHX0xJTkssICJwaHkgbGluayBkb3duXG4iKTsKLQotCQl2YXJzLT5waHlfbGlua191cCA9IDA7Ci0KLQkJdmFycy0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7Ci0JCXZhcnMtPmZsb3dfY3RybCA9IEJOWDJYX0ZMT1dfQ1RSTF9OT05FOwotCQl2YXJzLT5hdXRvbmVnID0gQVVUT19ORUdfRElTQUJMRUQ7Ci0JCXZhcnMtPm1hY190eXBlID0gTUFDX1RZUEVfTk9ORTsKLQotCQlpZiAoKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfQVVUT19ORUcpICYmCi0JCSAgICAoKFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpID09Ci0JCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUKSkpIHsKLQkJCS8qIENoZWNrIHNpZ25hbCBpcyBkZXRlY3RlZCAqLwotCQkJYm54MnhfY2hlY2tfZmFsbGJhY2tfdG9fY2wzNyhwYXJhbXMpOwotCQl9Ci0JfQotCi0JRFAoTkVUSUZfTVNHX0xJTkssICJncF9zdGF0dXMgMHgleCAgcGh5X2xpbmtfdXAgJXggbGluZV9zcGVlZCAleFxuIiwKLQkJIGdwX3N0YXR1cywgdmFycy0+cGh5X2xpbmtfdXAsIHZhcnMtPmxpbmVfc3BlZWQpOwotCURQKE5FVElGX01TR19MSU5LLCAiZHVwbGV4ICV4ICBmbG93X2N0cmwgMHgleCIKLQkJICIgYXV0b25lZyAweCV4XG4iLAotCQkgdmFycy0+ZHVwbGV4LAotCQkgdmFycy0+Zmxvd19jdHJsLCB2YXJzLT5hdXRvbmVnKTsKLQlEUChORVRJRl9NU0dfTElOSywgImxpbmtfc3RhdHVzIDB4JXhcbiIsIHZhcnMtPmxpbmtfc3RhdHVzKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgYm54Mnhfc2V0X2dtaWlfdHhfZHJpdmVyKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCXUxNiBscF91cDI7Ci0JdTE2IHR4X2RyaXZlcjsKLQl1MTYgYmFuazsKLQotCS8qIHJlYWQgcHJlY29tcCAqLwotCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJICAgICAgTURJT19SRUdfQkFOS19PVkVSXzFHLAotCQkJICAgICAgTURJT19PVkVSXzFHX0xQX1VQMiwgJmxwX3VwMik7Ci0KLQkvKiBiaXRzIFsxMDo3XSBhdCBscF91cDIsIHBvc2l0aW9uZWQgYXQgWzE1OjEyXSAqLwotCWxwX3VwMiA9ICgoKGxwX3VwMiAmIE1ESU9fT1ZFUl8xR19MUF9VUDJfUFJFRU1QSEFTSVNfTUFTSykgPj4KLQkJICAgTURJT19PVkVSXzFHX0xQX1VQMl9QUkVFTVBIQVNJU19TSElGVCkgPDwKLQkJICBNRElPX1RYMF9UWF9EUklWRVJfUFJFRU1QSEFTSVNfU0hJRlQpOwotCi0JaWYgKGxwX3VwMiA9PSAwKQotCQlyZXR1cm47Ci0KLQlmb3IgKGJhbmsgPSBNRElPX1JFR19CQU5LX1RYMDsgYmFuayA8PSBNRElPX1JFR19CQU5LX1RYMzsKLQkgICAgICBiYW5rICs9IChNRElPX1JFR19CQU5LX1RYMSAtIE1ESU9fUkVHX0JBTktfVFgwKSkgewotCQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJICAgICAgYmFuaywKLQkJCQkgICAgICBNRElPX1RYMF9UWF9EUklWRVIsICZ0eF9kcml2ZXIpOwotCi0JCS8qIHJlcGxhY2UgdHhfZHJpdmVyIGJpdHMgWzE1OjEyXSAqLwotCQlpZiAobHBfdXAyICE9Ci0JCSAgICAodHhfZHJpdmVyICYgTURJT19UWDBfVFhfRFJJVkVSX1BSRUVNUEhBU0lTX01BU0spKSB7Ci0JCQl0eF9kcml2ZXIgJj0gfk1ESU9fVFgwX1RYX0RSSVZFUl9QUkVFTVBIQVNJU19NQVNLOwotCQkJdHhfZHJpdmVyIHw9IGxwX3VwMjsKLQkJCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJCSAgICAgIGJhbmssCi0JCQkJCSAgICAgIE1ESU9fVFgwX1RYX0RSSVZFUiwgdHhfZHJpdmVyKTsKLQkJfQotCX0KLX0KLQotc3RhdGljIHU4IGJueDJ4X2VtYWNfcHJvZ3JhbShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKLQkJCSAgIHUzMiBsaW5lX3NwZWVkLCB1MzIgZHVwbGV4KQotewotCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7Ci0JdTE2IG1vZGUgPSAwOwotCi0JRFAoTkVUSUZfTVNHX0xJTkssICJzZXR0aW5nIGxpbmsgc3BlZWQgJiBkdXBsZXhcbiIpOwotCWJueDJ4X2JpdHNfZGlzKGJwLCBHUkNCQVNFX0VNQUMwICsgcG9ydCoweDQwMCArCi0JCSAgICAgRU1BQ19SRUdfRU1BQ19NT0RFLAotCQkgICAgIChFTUFDX01PREVfMjVHX01PREUgfAotCQkgICAgIEVNQUNfTU9ERV9QT1JUX01JSV8xME0gfAotCQkgICAgIEVNQUNfTU9ERV9IQUxGX0RVUExFWCkpOwotCXN3aXRjaCAobGluZV9zcGVlZCkgewotCWNhc2UgU1BFRURfMTA6Ci0JCW1vZGUgfD0gRU1BQ19NT0RFX1BPUlRfTUlJXzEwTTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNQRUVEXzEwMDoKLQkJbW9kZSB8PSBFTUFDX01PREVfUE9SVF9NSUk7Ci0JCWJyZWFrOwotCi0JY2FzZSBTUEVFRF8xMDAwOgotCQltb2RlIHw9IEVNQUNfTU9ERV9QT1JUX0dNSUk7Ci0JCWJyZWFrOwotCi0JY2FzZSBTUEVFRF8yNTAwOgotCQltb2RlIHw9IChFTUFDX01PREVfMjVHX01PREUgfCBFTUFDX01PREVfUE9SVF9HTUlJKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQkvKiAxMEcgbm90IHZhbGlkIGZvciBFTUFDICovCi0JCURQKE5FVElGX01TR19MSU5LLCAiSW52YWxpZCBsaW5lX3NwZWVkIDB4JXhcbiIsIGxpbmVfc3BlZWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoZHVwbGV4ID09IERVUExFWF9IQUxGKQotCQltb2RlIHw9IEVNQUNfTU9ERV9IQUxGX0RVUExFWDsKLQlibngyeF9iaXRzX2VuKGJwLAotCQkgICAgR1JDQkFTRV9FTUFDMCArIHBvcnQqMHg0MDAgKyBFTUFDX1JFR19FTUFDX01PREUsCi0JCSAgICBtb2RlKTsKLQotCWJueDJ4X3NldF9sZWQocGFyYW1zLCBMRURfTU9ERV9PUEVSLCBsaW5lX3NwZWVkKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAJCSAgICAgRXh0ZXJuYWwgUGh5IHNlY3Rpb24gICAgICAgCQkgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkIGJueDJ4X2V4dF9waHlfaHdfcmVzZXQoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCkKLXsKLQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18xLAotCQkgICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfTE9XLCBwb3J0KTsKLQltc2xlZXAoMSk7Ci0JYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMSwKLQkJICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfSElHSCwgcG9ydCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2V4dF9waHlfcmVzZXQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCi0JCQkgICAgICBzdHJ1Y3QgbGlua192YXJzICAgKnZhcnMpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTMyIGV4dF9waHlfdHlwZTsKLQl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQotCURQKE5FVElGX01TR19MSU5LLCAiUG9ydCAleDogYm54MnhfZXh0X3BoeV9yZXNldFxuIiwgcGFyYW1zLT5wb3J0KTsKLQlleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQkvKiBUaGUgUEhZIHJlc2V0IGlzIGNvbnRyb2xlZCBieSBHUElPIDEKLQkgKiBHaXZlIGl0IDFtcyBvZiByZXNldCBwdWxzZQotCSAqLwotCWlmICh2YXJzLT5waHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSB7Ci0KLQkJc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1Q6Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgRGlyZWN0XG4iKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNToKLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDg3MDUvODcwNlxuIik7Ci0KLQkJCS8qIFJlc3RvcmUgbm9ybWFsIHBvd2VyIG1vZGUqLwotCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMiwKLQkJCQkgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9ISUdILAotCQkJCQkgIHBhcmFtcy0+cG9ydCk7Ci0KLQkJCS8qIEhXIHJlc2V0ICovCi0JCQlibngyeF9leHRfcGh5X2h3X3Jlc2V0KGJwLCBwYXJhbXMtPnBvcnQpOwotCi0JCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsIDB4YTA0MCk7Ci0JCQlicmVhazsKLQotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3Mjc6Ci0JCQlicmVhazsKLQotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6Ci0KLQkJCS8qIFJlc3RvcmUgbm9ybWFsIHBvd2VyIG1vZGUqLwotCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMiwKLQkJCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9ISUdILAotCQkJCQkgIHBhcmFtcy0+cG9ydCk7Ci0KLQkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzEsCi0JCQkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfSElHSCwKLQkJCQkJICBwYXJhbXMtPnBvcnQpOwotCi0JCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsCi0JCQkJICAgICAgIDE8PDE1KTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyA4MDcyXG4iKTsKLQotCQkJLyogVW5zZXQgTG93IFBvd2VyIE1vZGUgYW5kIFNXIHJlc2V0ICovCi0JCQkvKiBSZXN0b3JlIG5vcm1hbCBwb3dlciBtb2RlKi8KLQkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzIsCi0JCQkJICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfSElHSCwKLQkJCQkJICBwYXJhbXMtPnBvcnQpOwotCi0JCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsCi0JCQkJICAgICAgIDE8PDE1KTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MzoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyA4MDczXG4iKTsKLQotCQkJLyogUmVzdG9yZSBub3JtYWwgcG93ZXIgbW9kZSovCi0JCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18yLAotCQkJCSAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0hJR0gsCi0JCQkJCSAgcGFyYW1zLT5wb3J0KTsKLQotCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMSwKLQkJCQkgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9ISUdILAotCQkJCQkgIHBhcmFtcy0+cG9ydCk7Ci0JCQlicmVhazsKLQotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgU0ZYNzEwMVxuIik7Ci0KLQkJCS8qIFJlc3RvcmUgbm9ybWFsIHBvd2VyIG1vZGUqLwotCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMiwKLQkJCQkgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9ISUdILAotCQkJCQkgIHBhcmFtcy0+cG9ydCk7Ci0KLQkJCS8qIEhXIHJlc2V0ICovCi0JCQlibngyeF9leHRfcGh5X2h3X3Jlc2V0KGJwLCBwYXJhbXMtPnBvcnQpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxOgotCQkJLyogUmVzdG9yZSBub3JtYWwgcG93ZXIgbW9kZSovCi0JCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18yLAotCQkJCSAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0hJR0gsCi0JCQkJCSAgcGFyYW1zLT5wb3J0KTsKLQotCQkJLyogSFcgcmVzZXQgKi8KLQkJCWJueDJ4X2V4dF9waHlfaHdfcmVzZXQoYnAsIHBhcmFtcy0+cG9ydCk7Ci0KLQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCSAgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwKLQkJCQkgICAgICAgMTw8MTUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MjM6Ci0JCQlicmVhazsKLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9GQUlMVVJFOgotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIFBIWSBGYWlsdXJlIGRldGVjdGVkXG4iKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIkJBRCBYR1hTIGV4dF9waHlfY29uZmlnIDB4JXhcbiIsCi0JCQkgICBwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQl9IGVsc2UgeyAvKiBTZXJEZXMgKi8KLQkJZXh0X3BoeV90eXBlID0gU0VSREVTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQkJc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKLQkJY2FzZSBQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9UWVBFX0RJUkVDVDoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiU2VyRGVzIERpcmVjdFxuIik7Ci0JCQlicmVhazsKLQotCQljYXNlIFBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX1RZUEVfQkNNNTQ4MjoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiU2VyRGVzIDU0ODJcbiIpOwotCQkJYm54MnhfZXh0X3BoeV9od19yZXNldChicCwgcGFyYW1zLT5wb3J0KTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIkJBRCBTZXJEZXMgZXh0X3BoeV9jb25maWcgMHgleFxuIiwKLQkJCQkgcGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7Ci0JCQlicmVhazsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgYm54Mnhfc2F2ZV9zcGlyb21fdmVyc2lvbihzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LAotCQkJCSAgICB1MzIgc2htZW1fYmFzZSwgdTMyIHNwaXJvbV92ZXIpCi17Ci0JRFAoTkVUSUZfTVNHX0xJTkssICJGVyB2ZXJzaW9uIDB4JXg6MHgleCBmb3IgcG9ydCAlZFxuIiwKLQkJICh1MTYpKHNwaXJvbV92ZXI+PjE2KSwgKHUxNilzcGlyb21fdmVyLCBwb3J0KTsKLQlSRUdfV1IoYnAsIHNobWVtX2Jhc2UgKwotCQkgICBvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLAotCQkJICAgIHBvcnRfbWJbcG9ydF0uZXh0X3BoeV9md192ZXJzaW9uKSwKLQkJCXNwaXJvbV92ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9zYXZlX2JjbV9zcGlyb21fdmVyKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsCi0JCQkJICAgIHUzMiBleHRfcGh5X3R5cGUsIHU4IGV4dF9waHlfYWRkciwKLQkJCQkgICAgdTMyIHNobWVtX2Jhc2UpCi17Ci0JdTE2IGZ3X3ZlcjEsIGZ3X3ZlcjI7Ci0KLQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKLQkJICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIxLCAmZndfdmVyMSk7Ci0JYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCi0JCSAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMiwgJmZ3X3ZlcjIpOwotCWJueDJ4X3NhdmVfc3Bpcm9tX3ZlcnNpb24oYnAsIHBvcnQsIHNobWVtX2Jhc2UsCi0JCQkJKHUzMikoZndfdmVyMTw8MTYgfCBmd192ZXIyKSk7Ci19Ci0KLQotc3RhdGljIHZvaWQgYm54Mnhfc2F2ZV84NDgxX3NwaXJvbV92ZXJzaW9uKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsCi0JCQkJCSB1OCBleHRfcGh5X2FkZHIsIHUzMiBzaG1lbV9iYXNlKQotewotCXUxNiB2YWwsIGZ3X3ZlcjEsIGZ3X3ZlcjIsIGNudDsKLQkvKiBGb3IgdGhlIDMyIGJpdHMgcmVnaXN0ZXJzIGluIDg0ODEsIGFjY2VzcyB2aWEgTURJTzJBUk0gaW50ZXJmYWNlLiovCi0JLyogKDEpIHNldCByZWdpc3RlciAweGMyMDBfMDAxNChTUElfQlJJREdFX0NUUkxfMikgdG8gMHgwMzAwMDAwMCAqLwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxLAotCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKLQkJICAgICAgIDB4QTgxOSwgMHgwMDE0KTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSwKLQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAgMHhBODFBLAotCQkgICAgICAgMHhjMjAwKTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSwKLQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAgMHhBODFCLAotCQkgICAgICAgMHgwMDAwKTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSwKLQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAgMHhBODFDLAotCQkgICAgICAgMHgwMzAwKTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSwKLQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAgMHhBODE3LAotCQkgICAgICAgMHgwMDA5KTsKLQotCWZvciAoY250ID0gMDsgY250IDwgMTAwOyBjbnQrKykgewotCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCi0JCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxLAotCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICAweEE4MTgsCi0JCQkgICAgICAmdmFsKTsKLQkJaWYgKHZhbCAmIDEpCi0JCQlicmVhazsKLQkJdWRlbGF5KDUpOwotCX0KLQlpZiAoY250ID09IDEwMCkgewotCQlEUChORVRJRl9NU0dfTElOSywgIlVuYWJsZSB0byByZWFkIDg0ODEgcGh5IGZ3IHZlcnNpb24oMSlcbiIpOwotCQlibngyeF9zYXZlX3NwaXJvbV92ZXJzaW9uKGJwLCBwb3J0LAotCQkJCQlzaG1lbV9iYXNlLCAwKTsKLQkJcmV0dXJuOwotCX0KLQotCi0JLyogMikgcmVhZCByZWdpc3RlciAweGMyMDBfMDAwMCAoU1BJX0ZXX1NUQVRVUykgKi8KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSwKLQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCi0JCSAgICAgICAweEE4MTksIDB4MDAwMCk7Ci0JYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEsCi0JCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAgMHhBODFBLCAweGMyMDApOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxLAotCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKLQkJICAgICAgIDB4QTgxNywgMHgwMDBBKTsKLQlmb3IgKGNudCA9IDA7IGNudCA8IDEwMDsgY250KyspIHsKLQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAotCQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSwKLQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJICAgICAgMHhBODE4LAotCQkJICAgICAgJnZhbCk7Ci0JCWlmICh2YWwgJiAxKQotCQkJYnJlYWs7Ci0JCXVkZWxheSg1KTsKLQl9Ci0JaWYgKGNudCA9PSAxMDApIHsKLQkJRFAoTkVUSUZfTVNHX0xJTkssICJVbmFibGUgdG8gcmVhZCA4NDgxIHBoeSBmdyB2ZXJzaW9uKDIpXG4iKTsKLQkJYm54Mnhfc2F2ZV9zcGlyb21fdmVyc2lvbihicCwgcG9ydCwKLQkJCQkJc2htZW1fYmFzZSwgMCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBsb3dlciAxNiBiaXRzIG9mIHRoZSByZWdpc3RlciBTUElfRldfU1RBVFVTICovCi0JYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAotCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxLAotCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAweEE4MUIsCi0JCSAgICAgICZmd192ZXIxKTsKLQkvKiB1cHBlciAxNiBiaXRzIG9mIHJlZ2lzdGVyIFNQSV9GV19TVEFUVVMgKi8KLQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCi0JCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEsCi0JCSAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgIDB4QTgxQywKLQkJICAgICAgJmZ3X3ZlcjIpOwotCi0JYm54Mnhfc2F2ZV9zcGlyb21fdmVyc2lvbihicCwgcG9ydCwKLQkJCQlzaG1lbV9iYXNlLCAoZndfdmVyMjw8MTYpIHwgZndfdmVyMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2JjbTgwNzJfZXh0ZXJuYWxfcm9tX2Jvb3Qoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKLQl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7Ci0KLQkvKiBOZWVkIHRvIHdhaXQgMjAwbXMgYWZ0ZXIgcmVzZXQgKi8KLQltc2xlZXAoMjAwKTsKLQkvKiBCb290IHBvcnQgZnJvbSBleHRlcm5hbCBST00KLQkgKiBTZXQgc2VyX2Jvb3RfY3RsIGJpdCBpbiB0aGUgTUlTQ19DVFJMMSByZWdpc3RlcgotCSAqLwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAotCQkJICAgIE1ESU9fUE1BX0RFVkFELAotCQkJICAgIE1ESU9fUE1BX1JFR19NSVNDX0NUUkwxLCAweDAwMDEpOwotCi0JLyogUmVzZXQgaW50ZXJuYWwgbWljcm9wcm9jZXNzb3IgKi8KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKLQkJCSAgTURJT19QTUFfREVWQUQsCi0JCQkgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTCwKLQkJCSAgTURJT19QTUFfUkVHX0dFTl9DVFJMX1JPTV9SRVNFVF9JTlRFUk5BTF9NUCk7Ci0JLyogc2V0IG1pY3JvIHJlc2V0ID0gMCAqLwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAotCQkJICAgIE1ESU9fUE1BX0RFVkFELAotCQkJICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTCwKLQkJCSAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkxfUk9NX01JQ1JPX1JFU0VUKTsKLQkvKiBSZXNldCBpbnRlcm5hbCBtaWNyb3Byb2Nlc3NvciAqLwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAotCQkJICBNRElPX1BNQV9ERVZBRCwKLQkJCSAgTURJT19QTUFfUkVHX0dFTl9DVFJMLAotCQkJICBNRElPX1BNQV9SRUdfR0VOX0NUUkxfUk9NX1JFU0VUX0lOVEVSTkFMX01QKTsKLQkvKiB3YWl0IGZvciAxMDBtcyBmb3IgY29kZSBkb3dubG9hZCB2aWEgU1BJIHBvcnQgKi8KLQltc2xlZXAoMTAwKTsKLQotCS8qIENsZWFyIHNlcl9ib290X2N0bCBiaXQgKi8KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKLQkJCSAgICBNRElPX1BNQV9ERVZBRCwKLQkJCSAgICBNRElPX1BNQV9SRUdfTUlTQ19DVFJMMSwgMHgwMDAwKTsKLQkvKiBXYWl0IDEwMG1zICovCi0JbXNsZWVwKDEwMCk7Ci0KLQlibngyeF9zYXZlX2JjbV9zcGlyb21fdmVyKGJwLCBwb3J0LAotCQkJCWV4dF9waHlfdHlwZSwKLQkJCQlleHRfcGh5X2FkZHIsCi0JCQkJcGFyYW1zLT5zaG1lbV9iYXNlKTsKLX0KLQotc3RhdGljIHU4IGJueDJ4XzgwNzNfaXNfc25yX25lZWRlZChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKLXsKLQkvKiBUaGlzIGlzIG9ubHkgcmVxdWlyZWQgZm9yIDgwNzNBMSwgdmVyc2lvbiAxMDIgb25seSAqLwotCi0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTggZXh0X3BoeV9hZGRyID0gWEdYU19FWFRfUEhZX0FERFIocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7Ci0JdTE2IHZhbDsKLQotCS8qIFJlYWQgODA3MyBIVyByZXZpc2lvbiovCi0JYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCi0JCSAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgIE1ESU9fUE1BX1JFR184MDczX0NISVBfUkVWLCAmdmFsKTsKLQotCWlmICh2YWwgIT0gMSkgewotCQkvKiBObyBuZWVkIHRvIHdvcmthcm91bmQgaW4gODA3MyBBMSAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKLQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIyLCAmdmFsKTsKLQotCS8qIFNOUiBzaG91bGQgYmUgYXBwbGllZCBvbmx5IGZvciB2ZXJzaW9uIDB4MTAyICovCi0JaWYgKHZhbCAhPSAweDEwMikKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHU4IGJueDJ4X2JjbTgwNzNfeGF1aV93YShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKLQl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQl1MTYgdmFsLCBjbnQsIGNudDEgOwotCi0JYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCi0JCSAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgIE1ESU9fUE1BX1JFR184MDczX0NISVBfUkVWLCAmdmFsKTsKLQotCWlmICh2YWwgPiAwKSB7Ci0JCS8qIE5vIG5lZWQgdG8gd29ya2Fyb3VuZCBpbiA4MDczIEExICovCi0JCXJldHVybiAwOwotCX0KLQkvKiBYQVVJIHdvcmthcm91bmQgaW4gODA3MyBBMDogKi8KLQotCS8qIEFmdGVyIGxvYWRpbmcgdGhlIGJvb3QgUk9NIGFuZCByZXN0YXJ0aW5nIEF1dG9uZWcsCi0JcG9sbCBEZXYxLCBSZWcgJEM4MjA6ICovCi0KLQlmb3IgKGNudCA9IDA7IGNudCA8IDEwMDA7IGNudCsrKSB7Ci0JCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKLQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJICAgICAgTURJT19QTUFfUkVHXzgwNzNfU1BFRURfTElOS19TVEFUVVMsCi0JCQkgICAgICAmdmFsKTsKLQkJICAvKiBJZiBiaXQgWzE0XSA9IDAgb3IgYml0IFsxM10gPSAwLCBjb250aW51ZSBvbiB3aXRoCi0JCSAgIHN5c3RlbSBpbml0aWFsaXphdGlvbiAoWEFVSSB3b3JrLWFyb3VuZCBub3QgcmVxdWlyZWQsCi0JCSAgICBhcyB0aGVzZSBiaXRzIGluZGljYXRlIDIuNUcgb3IgMUcgbGluayB1cCkuICovCi0JCWlmICghKHZhbCAmICgxPDwxNCkpIHx8ICEodmFsICYgKDE8PDEzKSkpIHsKLQkJCURQKE5FVElGX01TR19MSU5LLCAiWEFVSSB3b3JrLWFyb3VuZCBub3QgcmVxdWlyZWRcbiIpOwotCQkJcmV0dXJuIDA7Ci0JCX0gZWxzZSBpZiAoISh2YWwgJiAoMTw8MTUpKSkgewotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJjbGMgYml0IDE1IHdlbnQgb2ZmXG4iKTsKLQkJCSAvKiBJZiBiaXQgMTUgaXMgMCwgdGhlbiBwb2xsIERldjEsIFJlZyAkQzg0MSB1bnRpbAotCQkJICBpdCdzIE1TQiAoYml0IDE1KSBnb2VzIHRvIDEgKGluZGljYXRpbmcgdGhhdCB0aGUKLQkJCSAgWEFVSSB3b3JrYXJvdW5kIGhhcyBjb21wbGV0ZWQpLAotCQkJICB0aGVuIGNvbnRpbnVlIG9uIHdpdGggc3lzdGVtIGluaXRpYWxpemF0aW9uLiovCi0JCQlmb3IgKGNudDEgPSAwOyBjbnQxIDwgMTAwMDsgY250MSsrKSB7Ci0JCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCi0JCQkJCWV4dF9waHlfYWRkciwKLQkJCQkJTURJT19QTUFfREVWQUQsCi0JCQkJCU1ESU9fUE1BX1JFR184MDczX1hBVUlfV0EsICZ2YWwpOwotCQkJCWlmICh2YWwgJiAoMTw8MTUpKSB7Ci0JCQkJCURQKE5FVElGX01TR19MSU5LLAotCQkJCQkgICJYQVVJIHdvcmthcm91bmQgaGFzIGNvbXBsZXRlZFxuIik7Ci0JCQkJCXJldHVybiAwOwotCQkJCSB9Ci0JCQkJIG1zbGVlcCgzKTsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JCW1zbGVlcCgzKTsKLQl9Ci0JRFAoTkVUSUZfTVNHX0xJTkssICJXYXJuaW5nOiBYQVVJIHdvcmstYXJvdW5kIHRpbWVvdXQgISEhXG4iKTsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfYmNtODA3M19iY204NzI3X2V4dGVybmFsX3JvbV9ib290KHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsCi0JCQkJCQkgIHU4IGV4dF9waHlfYWRkciwKLQkJCQkJCSAgdTMyIGV4dF9waHlfdHlwZSwKLQkJCQkJCSAgdTMyIHNobWVtX2Jhc2UpCi17Ci0JLyogQm9vdCBwb3J0IGZyb20gZXh0ZXJuYWwgUk9NICAqLwotCS8qIEVEQyBncnN0ICovCi0JYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJICAgICAgIGV4dF9waHlfdHlwZSwKLQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAgTURJT19QTUFfUkVHX0dFTl9DVFJMLAotCQkgICAgICAgMHgwMDAxKTsKLQotCS8qIHVjb2RlIHJlYm9vdCBhbmQgcnN0ICovCi0JYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJICAgICAgIGV4dF9waHlfdHlwZSwKLQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAgTURJT19QTUFfUkVHX0dFTl9DVFJMLAotCQkgICAgICAgMHgwMDhjKTsKLQotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJICAgICAgIE1ESU9fUE1BX1JFR19NSVNDX0NUUkwxLCAweDAwMDEpOwotCi0JLyogUmVzZXQgaW50ZXJuYWwgbWljcm9wcm9jZXNzb3IgKi8KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkgICAgICAgZXh0X3BoeV90eXBlLAotCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkwsCi0JCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkxfUk9NX01JQ1JPX1JFU0VUKTsKLQotCS8qIFJlbGVhc2Ugc3JzdCBiaXQgKi8KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkgICAgICAgZXh0X3BoeV90eXBlLAotCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkwsCi0JCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkxfUk9NX1JFU0VUX0lOVEVSTkFMX01QKTsKLQotCS8qIHdhaXQgZm9yIDEwMG1zIGZvciBjb2RlIGRvd25sb2FkIHZpYSBTUEkgcG9ydCAqLwotCW1zbGVlcCgxMDApOwotCi0JLyogQ2xlYXIgc2VyX2Jvb3RfY3RsIGJpdCAqLwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJICAgICAgIE1ESU9fUE1BX1JFR19NSVNDX0NUUkwxLCAweDAwMDApOwotCi0JYm54Mnhfc2F2ZV9iY21fc3Bpcm9tX3ZlcihicCwgcG9ydCwKLQkJCQlleHRfcGh5X3R5cGUsCi0JCQkJZXh0X3BoeV9hZGRyLAotCQkJCXNobWVtX2Jhc2UpOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9iY204MDczX2V4dGVybmFsX3JvbV9ib290KHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsCi0JCQkJCSAgdTggZXh0X3BoeV9hZGRyLAotCQkJCQkgIHUzMiBzaG1lbV9iYXNlKQotewotCWJueDJ4X2JjbTgwNzNfYmNtODcyN19leHRlcm5hbF9yb21fYm9vdChicCwgcG9ydCwgZXh0X3BoeV9hZGRyLAotCQkJCQkgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKLQkJCQkJIHNobWVtX2Jhc2UpOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9iY204NzI3X2V4dGVybmFsX3JvbV9ib290KHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsCi0JCQkJCSAgdTggZXh0X3BoeV9hZGRyLAotCQkJCQkgIHUzMiBzaG1lbV9iYXNlKQotewotCWJueDJ4X2JjbTgwNzNfYmNtODcyN19leHRlcm5hbF9yb21fYm9vdChicCwgcG9ydCwgZXh0X3BoeV9hZGRyLAotCQkJCQkgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNywKLQkJCQkJIHNobWVtX2Jhc2UpOwotCi19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2JjbTg3MjZfZXh0ZXJuYWxfcm9tX2Jvb3Qoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKLQl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7Ci0KLQkvKiBOZWVkIHRvIHdhaXQgMTAwbXMgYWZ0ZXIgcmVzZXQgKi8KLQltc2xlZXAoMTAwKTsKLQotCS8qIE1pY3JvIGNvbnRyb2xsZXIgcmUtYm9vdCAqLwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAotCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkwsCi0JCSAgICAgICAweDAxOEIpOwotCi0JLyogU2V0IHNvZnQgcmVzZXQgKi8KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAgTURJT19QTUFfUkVHX0dFTl9DVFJMLAotCQkgICAgICAgTURJT19QTUFfUkVHX0dFTl9DVFJMX1JPTV9NSUNST19SRVNFVCk7Ci0KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAgTURJT19QTUFfUkVHX01JU0NfQ1RSTDEsIDB4MDAwMSk7Ci0KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAgTURJT19QTUFfUkVHX0dFTl9DVFJMLAotCQkgICAgICAgTURJT19QTUFfUkVHX0dFTl9DVFJMX1JPTV9SRVNFVF9JTlRFUk5BTF9NUCk7Ci0KLQkvKiB3YWl0IGZvciAxNTBtcyBmb3IgbWljcm9jb2RlIGxvYWQgKi8KLQltc2xlZXAoMTUwKTsKLQotCS8qIERpc2FibGUgc2VyaWFsIGJvb3QgY29udHJvbCwgdHJpc3RhdGVzIHBpbnMgU1NfTiwgU0NLLCBNT1NJLCBNSVNPICovCi0JYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCi0JCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJICAgICAgIE1ESU9fUE1BX1JFR19NSVNDX0NUUkwxLCAweDAwMDApOwotCi0JbXNsZWVwKDIwMCk7Ci0JYm54Mnhfc2F2ZV9iY21fc3Bpcm9tX3ZlcihicCwgcG9ydCwKLQkJCQlleHRfcGh5X3R5cGUsCi0JCQkJZXh0X3BoeV9hZGRyLAotCQkJCXBhcmFtcy0+c2htZW1fYmFzZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X3NmcF9zZXRfdHJhbnNtaXR0ZXIoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwKLQkJCQkgICAgdTMyIGV4dF9waHlfdHlwZSwgdTggZXh0X3BoeV9hZGRyLAotCQkJCSAgICB1OCB0eF9lbikKLXsKLQl1MTYgdmFsOwotCi0JRFAoTkVUSUZfTVNHX0xJTkssICJTZXR0aW5nIHRyYW5zbWl0dGVyIHR4X2VuPSV4IGZvciBwb3J0ICV4XG4iLAotCQkgdHhfZW4sIHBvcnQpOwotCS8qIERpc2FibGUvRW5hYmxlIHRyYW5zbWl0dGVyICggVFggbGFzZXIgb2YgdGhlIFNGUCsgbW9kdWxlLikqLwotCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKLQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICBNRElPX1BNQV9SRUdfUEhZX0lERU5USUZJRVIsCi0JCSAgICAgICZ2YWwpOwotCi0JaWYgKHR4X2VuKQotCQl2YWwgJj0gfigxPDwxNSk7Ci0JZWxzZQotCQl2YWwgfD0gKDE8PDE1KTsKLQotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJICAgICAgIE1ESU9fUE1BX1JFR19QSFlfSURFTlRJRklFUiwKLQkJICAgICAgIHZhbCk7Ci19Ci0KLXN0YXRpYyB1OCBibngyeF84NzI2X3JlYWRfc2ZwX21vZHVsZV9lZXByb20oc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCi0JCQkJCSAgdTE2IGFkZHIsIHU4IGJ5dGVfY250LCB1OCAqb19idWYpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTE2IHZhbCA9IDA7Ci0JdTE2IGk7Ci0JdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKLQl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7Ci0KLQlpZiAoYnl0ZV9jbnQgPiAxNikgewotCQlEUChORVRJRl9NU0dfTElOSywgIlJlYWRpbmcgZnJvbSBlZXByb20gaXMiCi0JCQkgICAgIiBpcyBsaW1pdGVkIHRvIDB4ZlxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQkvKiBTZXQgdGhlIHJlYWQgY29tbWFuZCBieXRlIGNvdW50ICovCi0JYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJICAgICAgIGV4dF9waHlfdHlwZSwKLQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9CWVRFX0NOVCwKLQkJICAgICAgIChieXRlX2NudCB8IDB4YTAwMCkpOwotCi0JLyogU2V0IHRoZSByZWFkIGNvbW1hbmQgYWRkcmVzcyAqLwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJICAgICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfTUVNX0FERFIsCi0JCSAgICAgICBhZGRyKTsKLQotCS8qIEFjdGl2YXRlIHJlYWQgY29tbWFuZCAqLwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJICAgICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTCwKLQkJICAgICAgIDB4MmMwZik7Ci0KLQkvKiBXYWl0IHVwIHRvIDUwMHVzIGZvciBjb21tYW5kIGNvbXBsZXRlIHN0YXR1cyAqLwotCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgewotCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCi0JCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCSAgICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTCwgJnZhbCk7Ci0JCWlmICgodmFsICYgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLKSA9PQotCQkgICAgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9TVEFUVVNfQ09NUExFVEUpCi0JCQlicmVhazsKLQkJdWRlbGF5KDUpOwotCX0KLQotCWlmICgodmFsICYgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLKSAhPQotCQkgICAgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9TVEFUVVNfQ09NUExFVEUpIHsKLQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkgIkdvdCBiYWQgc3RhdHVzIDB4JXggd2hlbiByZWFkaW5nIGZyb20gU0ZQKyBFRVBST01cbiIsCi0JCQkgKHZhbCAmIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTF9TVEFUVVNfTUFTSykpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBSZWFkIHRoZSBidWZmZXIgKi8KLQlmb3IgKGkgPSAwOyBpIDwgYnl0ZV9jbnQ7IGkrKykgewotCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCi0JCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCSAgICAgIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0RBVEFfQlVGICsgaSwgJnZhbCk7Ci0JCW9fYnVmW2ldID0gKHU4KSh2YWwgJiBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9EQVRBX01BU0spOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgewotCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCi0JCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCSAgICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTCwgJnZhbCk7Ci0JCWlmICgodmFsICYgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLKSA9PQotCQkgICAgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9TVEFUVVNfSURMRSkKLQkJCXJldHVybiAwOzsKLQkJbXNsZWVwKDEpOwotCX0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIHU4IGJueDJ4Xzg3MjdfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKLQkJCQkJICB1MTYgYWRkciwgdTggYnl0ZV9jbnQsIHU4ICpvX2J1ZikKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKLQl1MTYgdmFsLCBpOwotCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7Ci0JdTggZXh0X3BoeV9hZGRyID0gWEdYU19FWFRfUEhZX0FERFIocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7Ci0JdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwotCi0JaWYgKGJ5dGVfY250ID4gMTYpIHsKLQkJRFAoTkVUSUZfTVNHX0xJTkssICJSZWFkaW5nIGZyb20gZWVwcm9tIGlzIgotCQkJICAgICIgaXMgbGltaXRlZCB0byAweGZcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBOZWVkIHRvIHJlYWQgZnJvbSAxLjgwMDAgdG8gY2xlYXIgaXQgKi8KLQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCi0JCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcsCi0JCSAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTCwKLQkJICAgICAgJnZhbCk7Ci0KLQkvKiBTZXQgdGhlIHJlYWQgY29tbWFuZCBieXRlIGNvdW50ICovCi0JYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJICAgICAgIGV4dF9waHlfdHlwZSwKLQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9CWVRFX0NOVCwKLQkJICAgICAgICgoYnl0ZV9jbnQgPCAyKSA/IDIgOiBieXRlX2NudCkpOwotCi0JLyogU2V0IHRoZSByZWFkIGNvbW1hbmQgYWRkcmVzcyAqLwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJICAgICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfTUVNX0FERFIsCi0JCSAgICAgICBhZGRyKTsKLQkvKiBTZXQgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkgICAgICAgZXh0X3BoeV90eXBlLAotCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgICAweDgwMDQsCi0JCSAgICAgICBNRElPX1BNQV9SRUdfODcyN19UV09fV0lSRV9EQVRBX0JVRik7Ci0KLQkvKiBBY3RpdmF0ZSByZWFkIGNvbW1hbmQgKi8KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkgICAgICAgZXh0X3BoeV90eXBlLAotCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgICBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX0NUUkwsCi0JCSAgICAgICAweDgwMDIpOwotCS8qIFdhaXQgYXBwcm9wcmlhdGUgdGltZSBmb3IgdHdvLXdpcmUgY29tbWFuZCB0byBmaW5pc2ggYmVmb3JlCi0JcG9sbGluZyB0aGUgc3RhdHVzIHJlZ2lzdGVyICovCi0JbXNsZWVwKDEpOwotCi0JLyogV2FpdCB1cCB0byA1MDB1cyBmb3IgY29tbWFuZCBjb21wbGV0ZSBzdGF0dXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKLQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAotCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX0NUUkwsICZ2YWwpOwotCQlpZiAoKHZhbCAmIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTF9TVEFUVVNfTUFTSykgPT0KLQkJICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfU1RBVFVTX0NPTVBMRVRFKQotCQkJYnJlYWs7Ci0JCXVkZWxheSg1KTsKLQl9Ci0KLQlpZiAoKHZhbCAmIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTF9TVEFUVVNfTUFTSykgIT0KLQkJICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfU1RBVFVTX0NPTVBMRVRFKSB7Ci0JCURQKE5FVElGX01TR19MSU5LLAotCQkJICJHb3QgYmFkIHN0YXR1cyAweCV4IHdoZW4gcmVhZGluZyBmcm9tIFNGUCsgRUVQUk9NXG4iLAotCQkJICh2YWwgJiBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX0NUUkxfU1RBVFVTX01BU0spKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogUmVhZCB0aGUgYnVmZmVyICovCi0JZm9yIChpID0gMDsgaSA8IGJ5dGVfY250OyBpKyspIHsKLQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAotCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICBNRElPX1BNQV9SRUdfODcyN19UV09fV0lSRV9EQVRBX0JVRiArIGksICZ2YWwpOwotCQlvX2J1ZltpXSA9ICh1OCkodmFsICYgTURJT19QTUFfUkVHXzg3MjdfVFdPX1dJUkVfREFUQV9NQVNLKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKLQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAotCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX0NUUkwsICZ2YWwpOwotCQlpZiAoKHZhbCAmIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTF9TVEFUVVNfTUFTSykgPT0KLQkJICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfU1RBVFVTX0lETEUpCi0JCQlyZXR1cm4gMDs7Ci0JCW1zbGVlcCgxKTsKLQl9Ci0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotdTggYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgdTE2IGFkZHIsCi0JCQkJICAgICB1OCBieXRlX2NudCwgdTggKm9fYnVmKQotewotCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQotCWlmIChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNikKLQkJcmV0dXJuIGJueDJ4Xzg3MjZfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShwYXJhbXMsIGFkZHIsCi0JCQkJCQkgICAgICAgYnl0ZV9jbnQsIG9fYnVmKTsKLQllbHNlIGlmIChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNykKLQkJcmV0dXJuIGJueDJ4Xzg3MjdfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShwYXJhbXMsIGFkZHIsCi0JCQkJCQkgICAgICAgYnl0ZV9jbnQsIG9fYnVmKTsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIHU4IGJueDJ4X2dldF9lZGNfbW9kZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKLQkJCQkgIHUxNiAqZWRjX21vZGUpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTggdmFsLCBjaGVja19saW1pdGluZ19tb2RlID0gMDsKLQkqZWRjX21vZGUgPSBFRENfTU9ERV9MSU1JVElORzsKLQotCS8qIEZpcnN0IGNoZWNrIGZvciBjb3BwZXIgY2FibGUgKi8KLQlpZiAoYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShwYXJhbXMsCi0JCQkJICAgICAgIFNGUF9FRVBST01fQ09OX1RZUEVfQUREUiwKLQkJCQkgICAgICAgMSwKLQkJCQkgICAgICAgJnZhbCkgIT0gMCkgewotCQlEUChORVRJRl9NU0dfTElOSywgIkZhaWxlZCB0byByZWFkIGZyb20gU0ZQKyBtb2R1bGUgRUVQUk9NXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc3dpdGNoICh2YWwpIHsKLQljYXNlIFNGUF9FRVBST01fQ09OX1RZUEVfVkFMX0NPUFBFUjoKLQl7Ci0JCXU4IGNvcHBlcl9tb2R1bGVfdHlwZTsKLQotCQkvKiBDaGVjayBpZiBpdHMgYWN0aXZlIGNhYmxlKCBpbmNsdWRlcyBTRlArIG1vZHVsZSkKLQkJb2YgcGFzc2l2ZSBjYWJsZSovCi0JCWlmIChibngyeF9yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHBhcmFtcywKLQkJCQkJICAgICAgIFNGUF9FRVBST01fRkNfVFhfVEVDSF9BRERSLAotCQkJCQkgICAgICAgMSwKLQkJCQkJICAgICAgICZjb3BwZXJfbW9kdWxlX3R5cGUpICE9Ci0JCSAgICAwKSB7Ci0JCQlEUChORVRJRl9NU0dfTElOSywKLQkJCQkiRmFpbGVkIHRvIHJlYWQgY29wcGVyLWNhYmxlLXR5cGUiCi0JCQkJIiBmcm9tIFNGUCsgRUVQUk9NXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJaWYgKGNvcHBlcl9tb2R1bGVfdHlwZSAmCi0JCSAgICBTRlBfRUVQUk9NX0ZDX1RYX1RFQ0hfQklUTUFTS19DT1BQRVJfQUNUSVZFKSB7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIkFjdGl2ZSBDb3BwZXIgY2FibGUgZGV0ZWN0ZWRcbiIpOwotCQkJY2hlY2tfbGltaXRpbmdfbW9kZSA9IDE7Ci0JCX0gZWxzZSBpZiAoY29wcGVyX21vZHVsZV90eXBlICYKLQkJCVNGUF9FRVBST01fRkNfVFhfVEVDSF9CSVRNQVNLX0NPUFBFUl9QQVNTSVZFKSB7Ci0JCQkJRFAoTkVUSUZfTVNHX0xJTkssICJQYXNzaXZlIENvcHBlciIKLQkJCQkJICAgICIgY2FibGUgZGV0ZWN0ZWRcbiIpOwotCQkJCSplZGNfbW9kZSA9Ci0JCQkJICAgICAgRURDX01PREVfUEFTU0lWRV9EQUM7Ci0JCX0gZWxzZSB7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIlVua25vd24gY29wcGVyLWNhYmxlLSIKLQkJCQkgICAgICJ0eXBlIDB4JXggISEhXG4iLCBjb3BwZXJfbW9kdWxlX3R5cGUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0ZQX0VFUFJPTV9DT05fVFlQRV9WQUxfTEM6Ci0JCURQKE5FVElGX01TR19MSU5LLCAiT3B0aWMgbW9kdWxlIGRldGVjdGVkXG4iKTsKLQkJY2hlY2tfbGltaXRpbmdfbW9kZSA9IDE7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURQKE5FVElGX01TR19MSU5LLCAiVW5hYmxlIHRvIGRldGVybWluZSBtb2R1bGUgdHlwZSAweCV4ICEhIVxuIiwKLQkJCSB2YWwpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoY2hlY2tfbGltaXRpbmdfbW9kZSkgewotCQl1OCBvcHRpb25zW1NGUF9FRVBST01fT1BUSU9OU19TSVpFXTsKLQkJaWYgKGJueDJ4X3JlYWRfc2ZwX21vZHVsZV9lZXByb20ocGFyYW1zLAotCQkJCQkgICAgICAgU0ZQX0VFUFJPTV9PUFRJT05TX0FERFIsCi0JCQkJCSAgICAgICBTRlBfRUVQUk9NX09QVElPTlNfU0laRSwKLQkJCQkJICAgICAgIG9wdGlvbnMpICE9IDApIHsKLQkJCURQKE5FVElGX01TR19MSU5LLCAiRmFpbGVkIHRvIHJlYWQgT3B0aW9uIgotCQkJCSIgZmllbGQgZnJvbSBtb2R1bGUgRUVQUk9NXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWlmICgob3B0aW9uc1swXSAmIFNGUF9FRVBST01fT1BUSU9OU19MSU5FQVJfUlhfT1VUX01BU0spKQotCQkJKmVkY19tb2RlID0gRURDX01PREVfTElORUFSOwotCQllbHNlCi0JCQkqZWRjX21vZGUgPSBFRENfTU9ERV9MSU1JVElORzsKLQl9Ci0JRFAoTkVUSUZfTVNHX0xJTkssICJFREMgbW9kZSBpcyBzZXQgdG8gMHgleFxuIiwgKmVkY19tb2RlKTsKLQlyZXR1cm4gMDsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiByZWFkIHRoZSByZWxldmFudCBmaWVsZCBmcm9tIHRoZSBtb2R1bGUgKCBTRlArICksCi0JYW5kIHZlcmlmeSBpdCBpcyBjb21wbGlhbnQgd2l0aCB0aGlzIGJvYXJkICovCi1zdGF0aWMgdTggYm54MnhfdmVyaWZ5X3NmcF9tb2R1bGUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTMyIHZhbDsKLQl1MzIgZndfcmVzcDsKLQljaGFyIHZlbmRvcl9uYW1lW1NGUF9FRVBST01fVkVORE9SX05BTUVfU0laRSsxXTsKLQljaGFyIHZlbmRvcl9wbltTRlBfRUVQUk9NX1BBUlRfTk9fU0laRSsxXTsKLQotCXZhbCA9IFJFR19SRChicCwgcGFyYW1zLT5zaG1lbV9iYXNlICsKLQkJCSBvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLCBkZXZfaW5mby4KLQkJCQkgIHBvcnRfZmVhdHVyZV9jb25maWdbcGFyYW1zLT5wb3J0XS5jb25maWcpKTsKLQlpZiAoKHZhbCAmIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9NQVNLKSA9PQotCSAgICBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfTk9fRU5GT1JDRU1FTlQpIHsKLQkJRFAoTkVUSUZfTVNHX0xJTkssICJOT1QgZW5mb3JjaW5nIG1vZHVsZSB2ZXJpZmljYXRpb25cbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBBc2sgdGhlIEZXIHRvIHZhbGlkYXRlIHRoZSBtb2R1bGUgKi8KLQlpZiAoIShwYXJhbXMtPmZlYXR1cmVfY29uZmlnX2ZsYWdzICYKLQkgICAgICBGRUFUVVJFX0NPTkZJR19CQ19TVVBQT1JUU19PUFRfTURMX1ZSRlkpKSB7Ci0JCURQKE5FVElGX01TR19MSU5LLCAiRlcgZG9lcyBub3Qgc3VwcG9ydCBPUFQgTURMICIKLQkJCSAgICAidmVyaWZpY2F0aW9uXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZndfcmVzcCA9IGJueDJ4X2Z3X2NvbW1hbmQoYnAsIERSVl9NU0dfQ09ERV9WUkZZX09QVF9NREwpOwotCWlmIChmd19yZXNwID09IEZXX01TR19DT0RFX1ZSRllfT1BUX01ETF9TVUNDRVNTKSB7Ci0JCURQKE5FVElGX01TR19MSU5LLCAiQXBwcm92ZWQgbW9kdWxlXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogZm9ybWF0IHRoZSB3YXJuaW5nIG1lc3NhZ2UgKi8KLQlpZiAoYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShwYXJhbXMsCi0JCQkJICAgICAgIFNGUF9FRVBST01fVkVORE9SX05BTUVfQUREUiwKLQkJCQkgICAgICAgU0ZQX0VFUFJPTV9WRU5ET1JfTkFNRV9TSVpFLAotCQkJCSAgICAgICAodTggKil2ZW5kb3JfbmFtZSkpCi0JCXZlbmRvcl9uYW1lWzBdID0gJ1wwJzsKLQllbHNlCi0JCXZlbmRvcl9uYW1lW1NGUF9FRVBST01fVkVORE9SX05BTUVfU0laRV0gPSAnXDAnOwotCWlmIChibngyeF9yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHBhcmFtcywKLQkJCQkgICAgICAgU0ZQX0VFUFJPTV9QQVJUX05PX0FERFIsCi0JCQkJICAgICAgIFNGUF9FRVBST01fUEFSVF9OT19TSVpFLAotCQkJCSAgICAgICAodTggKil2ZW5kb3JfcG4pKQotCQl2ZW5kb3JfcG5bMF0gPSAnXDAnOwotCWVsc2UKLQkJdmVuZG9yX3BuW1NGUF9FRVBST01fUEFSVF9OT19TSVpFXSA9ICdcMCc7Ci0KLQluZXRkZXZfaW5mbyhicC0+ZGV2LCAiV2FybmluZzogVW5xdWFsaWZpZWQgU0ZQKyBtb2R1bGUgZGV0ZWN0ZWQsIFBvcnQgJWQgZnJvbSAlcyBwYXJ0IG51bWJlciAlc1xuIiwKLQkJICAgIHBhcmFtcy0+cG9ydCwgdmVuZG9yX25hbWUsIHZlbmRvcl9wbik7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyB1OCBibngyeF9iY204NzI2X3NldF9saW1pdGluZ19tb2RlKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAotCQkJCQl1MTYgZWRjX21vZGUpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKLQl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQl1MTYgY3VyX2xpbWl0aW5nX21vZGU7Ci0KLQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCi0JCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYsCi0JCSAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMiwKLQkJICAgICAgJmN1cl9saW1pdGluZ19tb2RlKTsKLQlEUChORVRJRl9NU0dfTElOSywgIkN1cnJlbnQgTGltaXRpbmcgbW9kZSBpcyAweCV4XG4iLAotCQkgY3VyX2xpbWl0aW5nX21vZGUpOwotCi0JaWYgKGVkY19tb2RlID09IEVEQ19NT0RFX0xJTUlUSU5HKSB7Ci0JCURQKE5FVElGX01TR19MSU5LLAotCQkJICJTZXR0aW5nIExJTUlUSU5HIE1PREVcbiIpOwotCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYsCi0JCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJICAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMiwKLQkJCSAgICAgICBFRENfTU9ERV9MSU1JVElORyk7Ci0JfSBlbHNlIHsgLyogTFJNIG1vZGUgKCBkZWZhdWx0ICkqLwotCi0JCURQKE5FVElGX01TR19MSU5LLCAiU2V0dGluZyBMUk0gTU9ERVxuIik7Ci0KLQkJLyogQ2hhbmdpbmcgdG8gTFJNIG1vZGUgdGFrZXMgcXVpdGUgZmV3IHNlY29uZHMuCi0JCVNvIGRvIGl0IG9ubHkgaWYgY3VycmVudCBtb2RlIGlzIGxpbWl0aW5nCi0JCSggZGVmYXVsdCBpcyBMUk0gKSovCi0JCWlmIChjdXJfbGltaXRpbmdfbW9kZSAhPSBFRENfTU9ERV9MSU1JVElORykKLQkJCXJldHVybiAwOwotCi0JCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwKLQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICAgTURJT19QTUFfUkVHX0xSTV9NT0RFLAotCQkJICAgICAgIDApOwotCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYsCi0JCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJICAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMiwKLQkJCSAgICAgICAweDEyOCk7Ci0JCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwKLQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICAgTURJT19QTUFfUkVHX01JU0NfQ1RSTDAsCi0JCQkgICAgICAgMHg0MDA4KTsKLQkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2LAotCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCSAgICAgICBNRElPX1BNQV9SRUdfTFJNX01PREUsCi0JCQkgICAgICAgMHhhYWFhKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1OCBibngyeF9iY204NzI3X3NldF9saW1pdGluZ19tb2RlKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAotCQkJCQl1MTYgZWRjX21vZGUpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKLQl1MTYgcGh5X2lkZW50aWZpZXI7Ci0JdTE2IHJvbV92ZXIyX3ZhbDsKLQl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQotCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKLQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcsCi0JCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJICAgICAgIE1ESU9fUE1BX1JFR19QSFlfSURFTlRJRklFUiwKLQkJICAgICAgICZwaHlfaWRlbnRpZmllcik7Ci0KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNywKLQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLAotCQkgICAgICAgKHBoeV9pZGVudGlmaWVyICYgfigxPDw5KSkpOwotCi0JYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAotCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAotCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjIsCi0JCSAgICAgICZyb21fdmVyMl92YWwpOwotCS8qIEtlZXAgdGhlIE1TQiA4LWJpdHMsIGFuZCBzZXQgdGhlIExTQiA4LWJpdHMgd2l0aCB0aGUgZWRjX21vZGUgKi8KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNywKLQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIyLAotCQkgICAgICAgKHJvbV92ZXIyX3ZhbCAmIDB4ZmYwMCkgfCAoZWRjX21vZGUgJiAweDAwZmYpKTsKLQotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAotCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgICBNRElPX1BNQV9SRUdfUEhZX0lERU5USUZJRVIsCi0JCSAgICAgICAocGh5X2lkZW50aWZpZXIgfCAoMTw8OSkpKTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyB1OCBibngyeF93YWl0X2Zvcl9zZnBfbW9kdWxlX2luaXRpYWxpemVkKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQotewotCXU4IHZhbDsKLQlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKLQl1MTYgdGltZW91dDsKLQkvKiBJbml0aWFsaXphdGlvbiB0aW1lIGFmdGVyIGhvdC1wbHVnIG1heSB0YWtlIHVwIHRvIDMwMG1zIGZvciBzb21lCi0JcGh5cyB0eXBlICggZS5nLiBKRFNVICkgKi8KLQlmb3IgKHRpbWVvdXQgPSAwOyB0aW1lb3V0IDwgNjA7IHRpbWVvdXQrKykgewotCQlpZiAoYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShwYXJhbXMsIDEsIDEsICZ2YWwpCi0JCSAgICA9PSAwKSB7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIlNGUCsgbW9kdWxlIGluaXRpYWxpemF0aW9uICIKLQkJCQkgICAgICJ0b29rICVkIG1zXG4iLCB0aW1lb3V0ICogNSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQltc2xlZXAoNSk7Ci0JfQotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF84NzI3X3Bvd2VyX21vZHVsZShzdHJ1Y3QgYm54MnggKmJwLAotCQkJCSAgc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCi0JCQkJICB1OCBleHRfcGh5X2FkZHIsIHU4IGlzX3Bvd2VyX3VwKSB7Ci0JLyogTWFrZSBzdXJlIEdQSU9zIGFyZSBub3QgdXNpbmcgZm9yIExFRCBtb2RlICovCi0JdTE2IHZhbDsKLQl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OwotCS8qCi0JICogSW4gdGhlIEdQSU8gcmVnaXN0ZXIsIGJpdCA0IGlzIHVzZSB0byBkZXRlbWluZSBpZiB0aGUgR1BJT3MgYXJlCi0JICogb3BlcmF0aW5nIGFzIElOUFVUIG9yIGFzIE9VVFBVVC4gQml0IDEgaXMgZm9yIGlucHV0LCBhbmQgMCBmb3IKLQkgKiBvdXRwdXQKLQkgKiBCaXRzIDAtMSBkZXRlcm1pbmUgdGhlIGdwaW9zIHZhbHVlIGZvciBPVVRQVVQgaW4gY2FzZSBiaXQgNCB2YWwgaXMgMAotCSAqIEJpdHMgOC05IGRldGVybWluZSB0aGUgZ3Bpb3MgdmFsdWUgZm9yIElOUFVUIGluIGNhc2UgYml0IDQgdmFsIGlzIDEKLQkgKiB3aGVyZSB0aGUgMXN0IGJpdCBpcyB0aGUgb3Zlci1jdXJyZW50KG9ubHkgaW5wdXQpLCBhbmQgMm5kIGJpdCBpcwotCSAqIGZvciBwb3dlciggb25seSBvdXRwdXQgKQotCSovCi0KLQkvKgotCSAqIEluIGNhc2Ugb2YgTk9DIGZlYXR1cmUgaXMgZGlzYWJsZWQgYW5kIHBvd2VyIGlzIHVwLCBzZXQgR1BJTyBjb250cm9sCi0JICogIGFzIGlucHV0IHRvIGVuYWJsZSBsaXN0ZW5pbmcgb2Ygb3Zlci1jdXJyZW50IGluZGljYXRpb24KLQkgKi8KLQotCWlmICghKHBhcmFtcy0+ZmVhdHVyZV9jb25maWdfZmxhZ3MgJgotCSAgICAgIEZFQVRVUkVfQ09ORklHX0JDTTg3MjdfTk9DKSAmJiBpc19wb3dlcl91cCkKLQkJdmFsID0gKDE8PDQpOwotCWVsc2UKLQkJLyoKLQkJICogU2V0IEdQSU8gY29udHJvbCB0byBPVVRQVVQsIGFuZCBzZXQgdGhlIHBvd2VyIGJpdAotCQkgKiB0byBhY2NvcmRpbmcgdG8gdGhlIGlzX3Bvd2VyX3VwCi0JCSAqLwotCQl2YWwgPSAoKCEoaXNfcG93ZXJfdXApKSA8PCAxKTsKLQotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAotCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgICBNRElPX1BNQV9SRUdfODcyN19HUElPX0NUUkwsCi0JCSAgICAgICB2YWwpOwotfQotCi1zdGF0aWMgdTggYm54Mnhfc2ZwX21vZHVsZV9kZXRlY3Rpb24oc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTE2IGVkY19tb2RlOwotCXU4IHJjID0gMDsKLQl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7Ci0JdTMyIHZhbCA9IFJFR19SRChicCwgcGFyYW1zLT5zaG1lbV9iYXNlICsKLQkJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHNobWVtX3JlZ2lvbiwgZGV2X2luZm8uCi0JCQkJICAgICBwb3J0X2ZlYXR1cmVfY29uZmlnW3BhcmFtcy0+cG9ydF0uY29uZmlnKSk7Ci0KLQlEUChORVRJRl9NU0dfTElOSywgIlNGUCsgbW9kdWxlIHBsdWdnZWQgaW4vb3V0IGRldGVjdGVkIG9uIHBvcnQgJWRcbiIsCi0JCSBwYXJhbXMtPnBvcnQpOwotCi0JaWYgKGJueDJ4X2dldF9lZGNfbW9kZShwYXJhbXMsICZlZGNfbW9kZSkgIT0gMCkgewotCQlEUChORVRJRl9NU0dfTElOSywgIkZhaWxlZCB0byBnZXQgdmFsaWQgbW9kdWxlIHR5cGVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9IGVsc2UgaWYgKGJueDJ4X3ZlcmlmeV9zZnBfbW9kdWxlKHBhcmFtcykgIT0KLQkJICAgMCkgewotCQkvKiBjaGVjayBTRlArIG1vZHVsZSBjb21wYXRpYmlsaXR5ICovCi0JCURQKE5FVElGX01TR19MSU5LLCAiTW9kdWxlIHZlcmlmaWNhdGlvbiBmYWlsZWQhIVxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJLyogVHVybiBvbiBmYXVsdCBtb2R1bGUtZGV0ZWN0ZWQgbGVkICovCi0JCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzAsCi0JCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX0hJR0gsCi0JCQkJICBwYXJhbXMtPnBvcnQpOwotCQlpZiAoKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3KSAmJgotCQkgICAgKCh2YWwgJiBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfTUFTSykgPT0KLQkJICAgICBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfUE9XRVJfRE9XTikpIHsKLQkJCS8qIFNodXRkb3duIFNGUCsgbW9kdWxlICovCi0JCQlEUChORVRJRl9NU0dfTElOSywgIlNodXRkb3duIFNGUCsgbW9kdWxlISFcbiIpOwotCQkJYm54MnhfODcyN19wb3dlcl9tb2R1bGUoYnAsIHBhcmFtcywKLQkJCQkJICAgICAgZXh0X3BoeV9hZGRyLCAwKTsKLQkJCXJldHVybiByYzsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIFR1cm4gb2ZmIGZhdWx0IG1vZHVsZS1kZXRlY3RlZCBsZWQgKi8KLQkJRFAoTkVUSUZfTVNHX0xJTkssICJUdXJuIG9mZiBmYXVsdCBtb2R1bGUtZGV0ZWN0ZWQgbGVkXG4iKTsKLQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMCwKLQkJCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX0xPVywKLQkJCQkJICBwYXJhbXMtPnBvcnQpOwotCX0KLQotCS8qIHBvd2VyIHVwIHRoZSBTRlAgbW9kdWxlICovCi0JaWYgKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3KQotCQlibngyeF84NzI3X3Bvd2VyX21vZHVsZShicCwgcGFyYW1zLCBleHRfcGh5X2FkZHIsIDEpOwotCi0JLyogQ2hlY2sgYW5kIHNldCBsaW1pdGluZyBtb2RlIC8gTFJNIG1vZGUgb24gODcyNi4KLQlPbiA4NzI3IGl0IGlzIGRvbmUgYXV0b21hdGljYWxseSAqLwotCWlmIChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNikKLQkJYm54MnhfYmNtODcyNl9zZXRfbGltaXRpbmdfbW9kZShwYXJhbXMsIGVkY19tb2RlKTsKLQllbHNlCi0JCWJueDJ4X2JjbTg3Mjdfc2V0X2xpbWl0aW5nX21vZGUocGFyYW1zLCBlZGNfbW9kZSk7Ci0JLyoKLQkgKiBFbmFibGUgdHJhbnNtaXQgZm9yIHRoaXMgbW9kdWxlIGlmIHRoZSBtb2R1bGUgaXMgYXBwcm92ZWQsIG9yCi0JICogaWYgdW5hcHByb3ZlZCBtb2R1bGVzIHNob3VsZCBhbHNvIGVuYWJsZSB0aGUgVHggbGFzZXIKLQkgKi8KLQlpZiAocmMgPT0gMCB8fAotCSAgICAodmFsICYgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX01BU0spICE9Ci0JICAgIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9ESVNBQkxFX1RYX0xBU0VSKQotCQlibngyeF9zZnBfc2V0X3RyYW5zbWl0dGVyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCWV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLCAxKTsKLQllbHNlCi0JCWJueDJ4X3NmcF9zZXRfdHJhbnNtaXR0ZXIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsIDApOwotCi0JcmV0dXJuIHJjOwotfQotCi12b2lkIGJueDJ4X2hhbmRsZV9tb2R1bGVfZGV0ZWN0X2ludChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKLQl1MzIgZ3Bpb192YWw7Ci0JdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKLQotCS8qIFNldCB2YWxpZCBtb2R1bGUgbGVkIG9mZiAqLwotCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzAsCi0JCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fSElHSCwKLQkJCSAgcGFyYW1zLT5wb3J0KTsKLQotCS8qIEdldCBjdXJyZW50IGdwaW8gdmFsIHJlZmVsZWN0aW5nIG1vZHVsZSBwbHVnZ2VkIGluIC8gb3V0Ki8KLQlncGlvX3ZhbCA9IGJueDJ4X2dldF9ncGlvKGJwLCAgTUlTQ19SRUdJU1RFUlNfR1BJT18zLCBwb3J0KTsKLQotCS8qIENhbGwgdGhlIGhhbmRsaW5nIGZ1bmN0aW9uIGluIGNhc2UgbW9kdWxlIGlzIGRldGVjdGVkICovCi0JaWYgKGdwaW9fdmFsID09IDApIHsKLQotCQlibngyeF9zZXRfZ3Bpb19pbnQoYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMywKLQkJCQkgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX0lOVF9PVVRQVVRfQ0xSLAotCQkJCSAgICAgIHBvcnQpOwotCi0JCWlmIChibngyeF93YWl0X2Zvcl9zZnBfbW9kdWxlX2luaXRpYWxpemVkKHBhcmFtcykgPT0KLQkJICAgIDApCi0JCQlibngyeF9zZnBfbW9kdWxlX2RldGVjdGlvbihwYXJhbXMpOwotCQllbHNlCi0JCQlEUChORVRJRl9NU0dfTElOSywgIlNGUCsgbW9kdWxlIGlzIG5vdCBpbml0aWFsaXplZFxuIik7Ci0JfSBlbHNlIHsKLQkJdTggZXh0X3BoeV9hZGRyID0gWEdYU19FWFRfUEhZX0FERFIocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7Ci0KLQkJdTMyIGV4dF9waHlfdHlwZSA9Ci0JCQlYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQkJdTMyIHZhbCA9IFJFR19SRChicCwgcGFyYW1zLT5zaG1lbV9iYXNlICsKLQkJCQkgICAgIG9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sIGRldl9pbmZvLgotCQkJCQkgICAgICBwb3J0X2ZlYXR1cmVfY29uZmlnW3BhcmFtcy0+cG9ydF0uCi0JCQkJCSAgICAgIGNvbmZpZykpOwotCi0JCWJueDJ4X3NldF9ncGlvX2ludChicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18zLAotCQkJCSAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX09VVFBVVF9TRVQsCi0JCQkJICAgICAgcG9ydCk7Ci0JCS8qIE1vZHVsZSB3YXMgcGx1Z2dlZCBvdXQuICovCi0JCS8qIERpc2FibGUgdHJhbnNtaXQgZm9yIHRoaXMgbW9kdWxlICovCi0JCWlmICgodmFsICYgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX01BU0spID09Ci0JCSAgICBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfRElTQUJMRV9UWF9MQVNFUikKLQkJCWJueDJ4X3NmcF9zZXRfdHJhbnNtaXR0ZXIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJCWV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLCAwKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2JjbTgwN3hfZm9yY2VfMTBHKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7Ci0JdTggZXh0X3BoeV9hZGRyID0gWEdYU19FWFRfUEhZX0FERFIocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7Ci0JdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwotCi0JLyogRm9yY2UgS1Igb3IgS1ggKi8KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsCi0JCSAgICAgICAweDIwNDApOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAotCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgICBNRElPX1BNQV9SRUdfMTBHX0NUUkwyLAotCQkgICAgICAgMHgwMDBiKTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAgTURJT19QTUFfUkVHX0JDTV9DVFJMLAotCQkgICAgICAgMHgwMDAwKTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fQU5fREVWQUQsCi0JCSAgICAgICBNRElPX0FOX1JFR19DVFJMLAotCQkgICAgICAgMHgwMDAwKTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfYmNtODA3M19zZXRfeGF1aV9sb3dfcG93ZXJfbW9kZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKLQl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OwotCXUxNiB2YWw7Ci0JdTggZXh0X3BoeV9hZGRyID0gWEdYU19FWFRfUEhZX0FERFIocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7Ci0JdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwotCi0JYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCi0JCSAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgIE1ESU9fUE1BX1JFR184MDczX0NISVBfUkVWLCAmdmFsKTsKLQotCWlmICh2YWwgPT0gMCkgewotCQkvKiBNdXN0bid0IHNldCBsb3cgcG93ZXIgbW9kZSBpbiA4MDczIEEwICovCi0JCXJldHVybjsKLQl9Ci0KLQkvKiBEaXNhYmxlIFBMTCBzZXF1ZW5jZXIgKHVzZSByZWFkLW1vZGlmeS13cml0ZSB0byBjbGVhciBiaXQgMTMpICovCi0JYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fWFNfREVWQUQsCi0JCSAgICAgICBNRElPX1hTX1BMTF9TRVFVRU5DRVIsICZ2YWwpOwotCXZhbCAmPSB+KDE8PDEzKTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fWFNfREVWQUQsIE1ESU9fWFNfUExMX1NFUVVFTkNFUiwgdmFsKTsKLQotCS8qIFBMTCBjb250cm9scyAqLwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAotCQkgICAgICAgTURJT19YU19ERVZBRCwgMHg4MDVFLCAweDEwNzcpOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAotCQkgICAgICAgTURJT19YU19ERVZBRCwgMHg4MDVELCAweDAwMDApOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAotCQkgICAgICAgTURJT19YU19ERVZBRCwgMHg4MDVDLCAweDAzMEIpOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAotCQkgICAgICAgTURJT19YU19ERVZBRCwgMHg4MDVCLCAweDEyNDApOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAotCQkgICAgICAgTURJT19YU19ERVZBRCwgMHg4MDVBLCAweDI0OTApOwotCi0JLyogVHggQ29udHJvbHMgKi8KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fWFNfREVWQUQsIDB4ODBBNywgMHgwQzc0KTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fWFNfREVWQUQsIDB4ODBBNiwgMHg5MDQxKTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fWFNfREVWQUQsIDB4ODBBNSwgMHg0NjQwKTsKLQotCS8qIFJ4IENvbnRyb2xzICovCi0JYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCi0JCSAgICAgICBNRElPX1hTX0RFVkFELCAweDgwRkUsIDB4MDFDNCk7Ci0JYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCi0JCSAgICAgICBNRElPX1hTX0RFVkFELCAweDgwRkQsIDB4OTI0OSk7Ci0JYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCi0JCSAgICAgICBNRElPX1hTX0RFVkFELCAweDgwRkMsIDB4MjAxNSk7Ci0KLQkvKiBFbmFibGUgUExMIHNlcXVlbmNlciAgKHVzZSByZWFkLW1vZGlmeS13cml0ZSB0byBzZXQgYml0IDEzKSAqLwotCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCi0JCSAgICAgICBNRElPX1hTX0RFVkFELAotCQkgICAgICAgTURJT19YU19QTExfU0VRVUVOQ0VSLCAmdmFsKTsKLQl2YWwgfD0gKDE8PDEzKTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fWFNfREVWQUQsIE1ESU9fWFNfUExMX1NFUVVFTkNFUiwgdmFsKTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfODA3M19zZXRfcGF1c2VfY2wzNyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKLQkJCQkgIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTE2IGNsMzdfdmFsOwotCXU4IGV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwotCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQotCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCSAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgTURJT19BTl9ERVZBRCwKLQkJICAgICAgTURJT19BTl9SRUdfQ0wzN19GQ19MRCwgJmNsMzdfdmFsKTsKLQotCWNsMzdfdmFsICY9IH5NRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9CT1RIOwotCS8qIFBsZWFzZSByZWZlciB0byBUYWJsZSAyOEItMyBvZiA4MDIuM2FiLTE5OTkgc3BlYy4gKi8KLQotCWlmICgodmFycy0+aWVlZV9mYyAmCi0JICAgIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX1NZTU1FVFJJQykgPT0KLQkgICAgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfU1lNTUVUUklDKSB7Ci0JCWNsMzdfdmFsIHw9ICBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9TWU1NRVRSSUM7Ci0JfQotCWlmICgodmFycy0+aWVlZV9mYyAmCi0JICAgIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0FTWU1NRVRSSUMpID09Ci0JICAgIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0FTWU1NRVRSSUMpIHsKLQkJY2wzN192YWwgfD0gIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0FTWU1NRVRSSUM7Ci0JfQotCWlmICgodmFycy0+aWVlZV9mYyAmCi0JICAgIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0JPVEgpID09Ci0JICAgIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0JPVEgpIHsKLQkJY2wzN192YWwgfD0gTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfQk9USDsKLQl9Ci0JRFAoTkVUSUZfTVNHX0xJTkssCi0JCSAiRXh0IHBoeSBBTiBhZHZlcnRpemUgY2wzNyAweCV4XG4iLCBjbDM3X3ZhbCk7Ci0KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCi0JCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCSAgICAgICBNRElPX0FOX0RFVkFELAotCQkgICAgICAgTURJT19BTl9SRUdfQ0wzN19GQ19MRCwgY2wzN192YWwpOwotCW1zbGVlcCg1MDApOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9leHRfcGh5X3NldF9wYXVzZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKLQkJCQkgIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTE2IHZhbDsKLQl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7Ci0KLQkvKiByZWFkIG1vZGlmeSB3cml0ZSBwYXVzZSBhZHZlcnRpemluZyAqLwotCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCSAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgTURJT19BTl9ERVZBRCwKLQkJICAgICAgTURJT19BTl9SRUdfQURWX1BBVVNFLCAmdmFsKTsKLQotCXZhbCAmPSB+TURJT19BTl9SRUdfQURWX1BBVVNFX0JPVEg7Ci0KLQkvKiBQbGVhc2UgcmVmZXIgdG8gVGFibGUgMjhCLTMgb2YgODAyLjNhYi0xOTk5IHNwZWMuICovCi0KLQlpZiAoKHZhcnMtPmllZWVfZmMgJgotCSAgICBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9BU1lNTUVUUklDKSA9PQotCSAgICBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9BU1lNTUVUUklDKSB7Ci0JCXZhbCB8PSAgTURJT19BTl9SRUdfQURWX1BBVVNFX0FTWU1NRVRSSUM7Ci0JfQotCWlmICgodmFycy0+aWVlZV9mYyAmCi0JICAgIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0JPVEgpID09Ci0JICAgIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0JPVEgpIHsKLQkJdmFsIHw9Ci0JCSBNRElPX0FOX1JFR19BRFZfUEFVU0VfUEFVU0U7Ci0JfQotCURQKE5FVElGX01TR19MSU5LLAotCQkgIkV4dCBwaHkgQU4gYWR2ZXJ0aXplIDB4JXhcbiIsIHZhbCk7Ci0JYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAotCQkgICAgICAgZXh0X3BoeV90eXBlLAotCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICAgTURJT19BTl9ERVZBRCwKLQkJICAgICAgIE1ESU9fQU5fUkVHX0FEVl9QQVVTRSwgdmFsKTsKLX0KLXN0YXRpYyB2b2lkIGJueDJ4X3NldF9wcmVlbXBoYXNpcyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKLXsKLQl1MTYgYmFuaywgaSA9IDA7Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0KLQlmb3IgKGJhbmsgPSBNRElPX1JFR19CQU5LX1JYMCwgaSA9IDA7IGJhbmsgPD0gTURJT19SRUdfQkFOS19SWDM7Ci0JICAgICAgYmFuayArPSAoTURJT19SRUdfQkFOS19SWDEtTURJT19SRUdfQkFOS19SWDApLCBpKyspIHsKLQkJCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJCSAgICAgIGJhbmssCi0JCQkJCSAgICAgIE1ESU9fUlgwX1JYX0VRX0JPT1NULAotCQkJCQkgICAgICBwYXJhbXMtPnhneHNfY29uZmlnX3J4W2ldKTsKLQl9Ci0KLQlmb3IgKGJhbmsgPSBNRElPX1JFR19CQU5LX1RYMCwgaSA9IDA7IGJhbmsgPD0gTURJT19SRUdfQkFOS19UWDM7Ci0JCSAgICAgIGJhbmsgKz0gKE1ESU9fUkVHX0JBTktfVFgxIC0gTURJT19SRUdfQkFOS19UWDApLCBpKyspIHsKLQkJCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJCSAgICAgIGJhbmssCi0JCQkJCSAgICAgIE1ESU9fVFgwX1RYX0RSSVZFUiwKLQkJCQkJICAgICAgcGFyYW1zLT54Z3hzX2NvbmZpZ190eFtpXSk7Ci0JfQotfQotCi0KLXN0YXRpYyB2b2lkIGJueDJ4Xzg0ODFfc2V0X2xlZDQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCi0JCQkgICAgICB1MzIgZXh0X3BoeV90eXBlLCB1OCBleHRfcGh5X2FkZHIpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0KLQkvKiBQSFlDX0NUTF9MRURfQ1RMICovCi0JYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAotCQkgICAgICAgZXh0X3BoeV90eXBlLAotCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgICBNRElPX1BNQV9SRUdfODQ4MV9MSU5LX1NJR05BTCwgMHhhNDgyKTsKLQotCS8qIFVubWFzayBMRUQ0IGZvciAxMEcgbGluayAqLwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKLQkJICAgICAgIGV4dF9waHlfdHlwZSwKLQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAgTURJT19QTUFfUkVHXzg0ODFfU0lHTkFMX01BU0ssICgxPDw2KSk7Ci0JLyogJ0ludGVycnVwdCBNYXNrJyAqLwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKLQkJICAgICAgIGV4dF9waHlfdHlwZSwKLQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fQU5fREVWQUQsCi0JCSAgICAgICAweEZGRkIsIDB4RkZGRCk7Ci19Ci1zdGF0aWMgdm9pZCBibngyeF84NDgxX3NldF9sZWdhY3lfbGVkX21vZGUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCi0JCQkJCSB1MzIgZXh0X3BoeV90eXBlLCB1OCBleHRfcGh5X2FkZHIpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0KLQkvKiBMRUQxICgxMEcgTGluayk6IERpc2FibGUgTEVEMSB3aGVuIDEwLzEwMC8xMDAwIGxpbmsgKi8KLQkvKiBMRUQyICgxRy8xMDAvMTAgTGluayk6IEVuYWJsZSBMRUQyIHdoZW4gMTAvMTAwLzEwMDAgbGluaykgKi8KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCi0JCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCSAgICAgICBNRElPX0FOX0RFVkFELAotCQkgICAgICAgTURJT19BTl9SRUdfODQ4MV9MRUdBQ1lfU0hBRE9XLAotCQkgICAgICAgKDE8PDE1KSB8ICgweGQgPDwgMTApIHwgKDB4Yzw8NCkgfCAweGUpOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF84NDgxX3NldF8xMEdfbGVkX21vZGUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCi0JCQkJICAgICAgdTMyIGV4dF9waHlfdHlwZSwgdTggZXh0X3BoeV9hZGRyKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCXUxNiB2YWwxOwotCi0JLyogTEVEMSAoMTBHIExpbmspICovCi0JLyogRW5hYmxlIGNvbnRpbnVzZSBiYXNlZCBvbiBzb3VyY2UgNygxMEctbGluaykgKi8KLQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJICAgICAgIGV4dF9waHlfdHlwZSwKLQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAgTURJT19QTUFfUkVHXzg0ODFfTElOS19TSUdOQUwsCi0JCSAgICAgICAmdmFsMSk7Ci0JLyogU2V0IGJpdCAyIHRvIDAsIGFuZCBiaXRzIFsxOjBdIHRvIDEwICovCi0JdmFsMSAmPSB+KCgxPDwwKSB8ICgxPDwyKSB8ICgxPDw3KSk7IC8qIENsZWFyIGJpdHMgMCwyLDcqLwotCXZhbDEgfD0gKCgxPDwxKSB8ICgxPDw2KSk7IC8qIFNldCBiaXQgMSwgNiAqLwotCi0JYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAotCQkgICAgICAgZXh0X3BoeV90eXBlLAotCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgICBNRElPX1BNQV9SRUdfODQ4MV9MSU5LX1NJR05BTCwKLQkJICAgICAgIHZhbDEpOwotCi0JLyogVW5tYXNrIExFRDEgZm9yIDEwRyBsaW5rICovCi0JYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJICAgICAgTURJT19QTUFfUkVHXzg0ODFfTEVEMV9NQVNLLAotCQkgICAgICAmdmFsMSk7Ci0JLyogU2V0IGJpdCAyIHRvIDAsIGFuZCBiaXRzIFsxOjBdIHRvIDEwICovCi0JdmFsMSB8PSAoMTw8Nyk7Ci0JYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAotCQkgICAgICAgZXh0X3BoeV90eXBlLAotCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgICBNRElPX1BNQV9SRUdfODQ4MV9MRUQxX01BU0ssCi0JCSAgICAgICB2YWwxKTsKLQotCS8qIExFRDIgKDFHLzEwMC8xMEcgTGluaykgKi8KLQkvKiBNYXNrIExFRDIgZm9yIDEwRyBsaW5rICovCi0JYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAotCQkgICAgICAgZXh0X3BoeV90eXBlLAotCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgICBNRElPX1BNQV9SRUdfODQ4MV9MRUQyX01BU0ssCi0JCSAgICAgICAwKTsKLQotCS8qIFVubWFzayBMRUQzIGZvciAxMEcgbGluayAqLwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKLQkJICAgICAgIGV4dF9waHlfdHlwZSwKLQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICBNRElPX1BNQV9SRUdfODQ4MV9MRUQzX01BU0ssCi0JCSAgICAgICAweDYpOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKLQkJICAgICAgIGV4dF9waHlfdHlwZSwKLQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAgTURJT19QTUFfUkVHXzg0ODFfTEVEM19CTElOSywKLQkJICAgICAgIDApOwotfQotCi0KLXN0YXRpYyB2b2lkIGJueDJ4X2luaXRfaW50ZXJuYWxfcGh5KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAotCQkJCSAgc3RydWN0IGxpbmtfdmFycyAqdmFycywKLQkJCQkgIHU4IGVuYWJsZV9jbDczKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCi0JaWYgKCEodmFycy0+cGh5X2ZsYWdzICYgUEhZX1NHTUlJX0ZMQUcpKSB7Ci0JCWlmICgoWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZykgPT0KLQkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1QpICYmCi0JCSAgICAocGFyYW1zLT5mZWF0dXJlX2NvbmZpZ19mbGFncyAmCi0JCSAgICAgRkVBVFVSRV9DT05GSUdfT1ZFUlJJREVfUFJFRU1QSEFTSVNfRU5BQkxFRCkpCi0JCQlibngyeF9zZXRfcHJlZW1waGFzaXMocGFyYW1zKTsKLQotCQkvKiBmb3JjZWQgc3BlZWQgcmVxdWVzdGVkPyAqLwotCQlpZiAodmFycy0+bGluZV9zcGVlZCAhPSBTUEVFRF9BVVRPX05FRyB8fAotCQkgICAgKChYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKSA9PQotCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVCkgJiYKLQkJCSAgcGFyYW1zLT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX0VYVCkpIHsKLQkJCURQKE5FVElGX01TR19MSU5LLCAibm90IFNHTUlJLCBubyBBTlxuIik7Ci0KLQkJCS8qIGRpc2FibGUgYXV0b25lZyAqLwotCQkJYm54Mnhfc2V0X2F1dG9uZWcocGFyYW1zLCB2YXJzLCAwKTsKLQotCQkJLyogcHJvZ3JhbSBzcGVlZCBhbmQgZHVwbGV4ICovCi0JCQlibngyeF9wcm9ncmFtX3NlcmRlcyhwYXJhbXMsIHZhcnMpOwotCi0JCX0gZWxzZSB7IC8qIEFOX21vZGUgKi8KLQkJCURQKE5FVElGX01TR19MSU5LLCAibm90IFNHTUlJLCBBTlxuIik7Ci0KLQkJCS8qIEFOIGVuYWJsZWQgKi8KLQkJCWJueDJ4X3NldF9icmNtX2NsMzdfYWR2ZXJ0aXNtZW50KHBhcmFtcyk7Ci0KLQkJCS8qIHByb2dyYW0gZHVwbGV4ICYgcGF1c2UgYWR2ZXJ0aXNlbWVudCAoZm9yIGFuZWcpICovCi0JCQlibngyeF9zZXRfaWVlZV9hbmVnX2FkdmVydGlzbWVudChwYXJhbXMsCi0JCQkJCQkgICAgICAgdmFycy0+aWVlZV9mYyk7Ci0KLQkJCS8qIGVuYWJsZSBhdXRvbmVnICovCi0JCQlibngyeF9zZXRfYXV0b25lZyhwYXJhbXMsIHZhcnMsIGVuYWJsZV9jbDczKTsKLQotCQkJLyogZW5hYmxlIGFuZCByZXN0YXJ0IEFOICovCi0JCQlibngyeF9yZXN0YXJ0X2F1dG9uZWcocGFyYW1zLCBlbmFibGVfY2w3Myk7Ci0JCX0KLQotCX0gZWxzZSB7IC8qIFNHTUlJIG1vZGUgKi8KLQkJRFAoTkVUSUZfTVNHX0xJTkssICJTR01JSVxuIik7Ci0KLQkJYm54MnhfaW5pdGlhbGl6ZV9zZ21paV9wcm9jZXNzKHBhcmFtcywgdmFycyk7Ci0JfQotfQotCi1zdGF0aWMgdTggYm54MnhfZXh0X3BoeV9pbml0KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgbGlua192YXJzICp2YXJzKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCXUzMiBleHRfcGh5X3R5cGU7Ci0JdTggZXh0X3BoeV9hZGRyOwotCXUxNiBjbnQ7Ci0JdTE2IGN0cmwgPSAwOwotCXUxNiB2YWwgPSAwOwotCXU4IHJjID0gMDsKLQotCWlmICh2YXJzLT5waHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSB7Ci0JCWV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwotCi0JCWV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwotCQkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgc29mdCByZXNldCBpcyBvZmYgKGV4cGVjdCBmb3IgdGhlIDgwNzI6Ci0JCSAqIGR1ZSB0byB0aGUgbG9jaywgaXQgd2lsbCBiZSBkb25lIGluc2lkZSB0aGUgc3BlY2lmaWMKLQkJICogaGFuZGxpbmcpCi0JCSAqLwotCQlpZiAoKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1QpICYmCi0JCSAgICAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkUpICYmCi0JCSAgIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfTk9UX0NPTk4pICYmCi0JCSAgICAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzIpICYmCi0JCSAgICAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMpKSB7Ci0JCQkvKiBXYWl0IGZvciBzb2Z0IHJlc2V0IHRvIGdldCBjbGVhcmVkIHVwdG8gMSBzZWMgKi8KLQkJCWZvciAoY250ID0gMDsgY250IDwgMTAwMDsgY250KyspIHsKLQkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCQkgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwgJmN0cmwpOwotCQkJCWlmICghKGN0cmwgJiAoMTw8MTUpKSkKLQkJCQkJYnJlYWs7Ci0JCQkJbXNsZWVwKDEpOwotCQkJfQotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJjb250cm9sIHJlZyAweCV4IChhZnRlciAlZCBtcylcbiIsCi0JCQkJIGN0cmwsIGNudCk7Ci0JCX0KLQotCQlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgewotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVDoKLQkJCWJyZWFrOwotCi0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNToKLQkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyA4NzA1XG4iKTsKLQotCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgIE1ESU9fUE1BX1JFR19NSVNDX0NUUkwsCi0JCQkJICAgICAgIDB4ODI4OCk7Ci0JCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLAotCQkJCSAgICAgICAweDdmYmYpOwotCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgIE1ESU9fUE1BX1JFR19DTVVfUExMX0JZUEFTUywKLQkJCQkgICAgICAgMHgwMTAwKTsKLQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgIE1ESU9fV0lTX0RFVkFELAotCQkJCSAgICAgICBNRElPX1dJU19SRUdfTEFTSV9DTlRMLCAweDEpOwotCi0JCQkvKiBCQ004NzA1IGRvZXNuJ3QgaGF2ZSBtaWNyb2NvZGUsIGhlbmNlIHRoZSAwICovCi0JCQlibngyeF9zYXZlX3NwaXJvbV92ZXJzaW9uKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCQlwYXJhbXMtPnNobWVtX2Jhc2UsIDApOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgotCQkJLyogV2FpdCB1bnRpbCBmdyBpcyBsb2FkZWQgKi8KLQkJCWZvciAoY250ID0gMDsgY250IDwgMTAwOyBjbnQrKykgewotCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJCSAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCi0JCQkJCSAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMSwgJnZhbCk7Ci0JCQkJaWYgKHZhbCkKLQkJCQkJYnJlYWs7Ci0JCQkJbXNsZWVwKDEwKTsKLQkJCX0KLQkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyA4NzA2IGlzIGluaXRpYWxpemVkICIKLQkJCQkiYWZ0ZXIgJWQgbXNcbiIsIGNudCk7Ci0JCQlpZiAoKHBhcmFtcy0+ZmVhdHVyZV9jb25maWdfZmxhZ3MgJgotCQkJICAgICBGRUFUVVJFX0NPTkZJR19PVkVSUklERV9QUkVFTVBIQVNJU19FTkFCTEVEKSkgewotCQkJCXU4IGk7Ci0JCQkJdTE2IHJlZzsKLQkJCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCQkJCXJlZyA9IE1ESU9fWFNfODcwNl9SRUdfQkFOS19SWDAgKwotCQkJCQkJaSooTURJT19YU184NzA2X1JFR19CQU5LX1JYMSAtCi0JCQkJCQkgICBNRElPX1hTXzg3MDZfUkVHX0JBTktfUlgwKTsKLQkJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJCQkgICAgICBNRElPX1hTX0RFVkFELAotCQkJCQkJICAgICAgcmVnLCAmdmFsKTsKLQkJCQkJLyogQ2xlYXIgZmlyc3QgMyBiaXRzIG9mIHRoZSBjb250cm9sICovCi0JCQkJCXZhbCAmPSB+MHg3OwotCQkJCQkvKiBTZXQgY29udHJvbCBiaXRzIGFjY29yZGluZyB0bwotCQkJCQljb25maWd1YXRpb24gKi8KLQkJCQkJdmFsIHw9IChwYXJhbXMtPnhneHNfY29uZmlnX3J4W2ldICYKLQkJCQkJCTB4Nyk7Ci0JCQkJCURQKE5FVElGX01TR19MSU5LLCAiU2V0dGluZyBSWCIKLQkJCQkJCSAiRXF1YWxpemVyIHRvIEJDTTg3MDYgcmVnIDB4JXgiCi0JCQkJCQkgIiA8LS0gdmFsIDB4JXhcbiIsIHJlZywgdmFsKTsKLQkJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAotCQkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJCQkgICAgICAgTURJT19YU19ERVZBRCwKLQkJCQkJCSAgICAgICByZWcsIHZhbCk7Ci0JCQkJfQotCQkJfQotCQkJLyogRm9yY2Ugc3BlZWQgKi8KLQkJCWlmIChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09IFNQRUVEXzEwMDAwKSB7Ci0JCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDg3MDYgZm9yY2UgMTBHYnBzXG4iKTsKLQotCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCQkgICAgICAgTURJT19QTUFfUkVHX0RJR0lUQUxfQ1RSTCwKLQkJCQkJICAgICAgIDB4NDAwKTsKLQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKLQkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCi0JCQkJCSAgICAgICBNRElPX1BNQV9SRUdfTEFTSV9DVFJMLCAxKTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogRm9yY2UgMUdicHMgdXNpbmcgYXV0b25lZyB3aXRoIDFHCi0JCQkJYWR2ZXJ0aXNtZW50ICovCi0KLQkJCQkvKiBBbGxvdyBDTDM3IHRocm91Z2ggQ0w3MyAqLwotCQkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyA4NzA2IEF1dG9OZWdcbiIpOwotCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkJICAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJCSAgICAgICBNRElPX0FOX1JFR19DTDM3X0NMNzMsCi0JCQkJCSAgICAgICAweDA0MGMpOwotCi0JCQkJLyogRW5hYmxlIEZ1bGwtRHVwbGV4IGFkdmVydGlzbWVudCBvbiBDTDM3ICovCi0JCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAotCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAotCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkgICAgICAgTURJT19BTl9ERVZBRCwKLQkJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NMMzdfRkNfTFAsCi0JCQkJCSAgICAgICAweDAwMjApOwotCQkJCS8qIEVuYWJsZSBDTDM3IEFOICovCi0JCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAotCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAotCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkgICAgICAgTURJT19BTl9ERVZBRCwKLQkJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NMMzdfQU4sCi0JCQkJCSAgICAgICAweDEwMDApOwotCQkJCS8qIDFHIHN1cHBvcnQgKi8KLQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJCSAgICAgICBNRElPX0FOX0RFVkFELAotCQkJCQkgICAgICAgTURJT19BTl9SRUdfQURWLCAoMTw8NSkpOwotCi0JCQkJLyogRW5hYmxlIGNsYXVzZSA3MyBBTiAqLwotCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkJICAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJCSAgICAgICBNRElPX0FOX1JFR19DVFJMLAotCQkJCQkgICAgICAgMHgxMjAwKTsKLQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkJICAgICAgIE1ESU9fUE1BX1JFR19SWF9BTEFSTV9DVFJMLAotCQkJCQkgICAgICAgMHgwNDAwKTsKLQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkJICAgICAgIE1ESU9fUE1BX1JFR19MQVNJX0NUUkwsIDB4MDAwNCk7Ci0KLQkJCX0KLQkJCWJueDJ4X3NhdmVfYmNtX3NwaXJvbV92ZXIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJCWV4dF9waHlfdHlwZSwKLQkJCQkJCWV4dF9waHlfYWRkciwKLQkJCQkJCXBhcmFtcy0+c2htZW1fYmFzZSk7Ci0JCQlicmVhazsKLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJJbml0aWFsaXppbmcgQkNNODcyNlxuIik7Ci0JCQlibngyeF9iY204NzI2X2V4dGVybmFsX3JvbV9ib290KHBhcmFtcyk7Ci0KLQkJCS8qIE5lZWQgdG8gY2FsbCBtb2R1bGUgZGV0ZWN0ZWQgb24gaW5pdGlhbGl6YXRpb24gc2luY2UKLQkJCXRoZSBtb2R1bGUgZGV0ZWN0aW9uIHRyaWdnZXJlZCBieSBhY3R1YWwgbW9kdWxlCi0JCQlpbnNlcnRpb24gbWlnaHQgb2NjdXIgYmVmb3JlIGRyaXZlciBpcyBsb2FkZWQsIGFuZCB3aGVuCi0JCQlkcml2ZXIgaXMgbG9hZGVkLCBpdCByZXNldCBhbGwgcmVnaXN0ZXJzLCBpbmNsdWRpbmcgdGhlCi0JCQl0cmFuc21pdHRlciAqLwotCQkJYm54Mnhfc2ZwX21vZHVsZV9kZXRlY3Rpb24ocGFyYW1zKTsKLQotCQkJLyogU2V0IEZsb3cgY29udHJvbCAqLwotCQkJYm54MnhfZXh0X3BoeV9zZXRfcGF1c2UocGFyYW1zLCB2YXJzKTsKLQkJCWlmIChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09IFNQRUVEXzEwMDApIHsKLQkJCQlEUChORVRJRl9NU0dfTElOSywgIlNldHRpbmcgMUcgZm9yY2VcbiIpOwotCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKLQkJCQkJICAgICAgIE1ESU9fUE1BX1JFR19DVFJMLCAweDQwKTsKLQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKLQkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCi0JCQkJCSAgICAgICBNRElPX1BNQV9SRUdfMTBHX0NUUkwyLCAweEQpOwotCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKLQkJCQkJICAgICAgIE1ESU9fUE1BX1JFR19MQVNJX0NUUkwsIDB4NSk7Ci0JCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAotCQkJCQkgICAgICAgTURJT19QTUFfUkVHX1JYX0FMQVJNX0NUUkwsCi0JCQkJCSAgICAgICAweDQwMCk7Ci0JCQl9IGVsc2UgaWYgKChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09Ci0JCQkJICAgIFNQRUVEX0FVVE9fTkVHKSAmJgotCQkJCSAgICgocGFyYW1zLT5zcGVlZF9jYXBfbWFzayAmCi0JCQkJICAgICBQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzFHKSkpIHsKLQkJCQlEUChORVRJRl9NU0dfTElOSywgIlNldHRpbmcgMUcgY2xhdXNlMzdcbiIpOwotCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX0FOX0RFVkFELAotCQkJCQkgICAgICAgTURJT19BTl9SRUdfQURWLCAweDIwKTsKLQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKLQkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19BTl9ERVZBRCwKLQkJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NMMzdfQ0w3MywgMHgwNDBjKTsKLQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKLQkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19BTl9ERVZBRCwKLQkJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NMMzdfRkNfTEQsIDB4MDAyMCk7Ci0JCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fQU5fREVWQUQsCi0JCQkJCSAgICAgICBNRElPX0FOX1JFR19DTDM3X0FOLCAweDEwMDApOwotCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX0FOX0RFVkFELAotCQkJCQkgICAgICAgTURJT19BTl9SRUdfQ1RSTCwgMHgxMjAwKTsKLQotCQkJCS8qIEVuYWJsZSBSWC1BTEFSTSBjb250cm9sIHRvIHJlY2VpdmUKLQkJCQlpbnRlcnJ1cHQgZm9yIDFHIHNwZWVkIGNoYW5nZSAqLwotCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKLQkJCQkJICAgICAgIE1ESU9fUE1BX1JFR19MQVNJX0NUUkwsIDB4NCk7Ci0JCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAotCQkJCQkgICAgICAgTURJT19QTUFfUkVHX1JYX0FMQVJNX0NUUkwsCi0JCQkJCSAgICAgICAweDQwMCk7Ci0KLQkJCX0gZWxzZSB7IC8qIERlZmF1bHQgMTBHLiBTZXQgb25seSBMQVNJIGNvbnRyb2wgKi8KLQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKLQkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCi0JCQkJCSAgICAgICBNRElPX1BNQV9SRUdfTEFTSV9DVFJMLCAxKTsKLQkJCX0KLQotCQkJLyogU2V0IFRYIFByZUVtcGhhc2lzIGlmIG5lZWRlZCAqLwotCQkJaWYgKChwYXJhbXMtPmZlYXR1cmVfY29uZmlnX2ZsYWdzICYKLQkJCSAgICAgRkVBVFVSRV9DT05GSUdfT1ZFUlJJREVfUFJFRU1QSEFTSVNfRU5BQkxFRCkpIHsKLQkJCQlEUChORVRJRl9NU0dfTElOSywgIlNldHRpbmcgVFhfQ1RSTDEgMHgleCwiCi0JCQkJCSAiVFhfQ1RSTDIgMHgleFxuIiwKLQkJCQkJIHBhcmFtcy0+eGd4c19jb25maWdfdHhbMF0sCi0JCQkJCSBwYXJhbXMtPnhneHNfY29uZmlnX3R4WzFdKTsKLQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkJICAgICAgIE1ESU9fUE1BX1JFR184NzI2X1RYX0NUUkwxLAotCQkJCQkgICAgICAgcGFyYW1zLT54Z3hzX2NvbmZpZ190eFswXSk7Ci0KLQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkJICAgICAgIE1ESU9fUE1BX1JFR184NzI2X1RYX0NUUkwyLAotCQkJCQkgICAgICAgcGFyYW1zLT54Z3hzX2NvbmZpZ190eFsxXSk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzM6Ci0JCXsKLQkJCXUxNiB0bXAxOwotCQkJdTE2IHJ4X2FsYXJtX2N0cmxfdmFsOwotCQkJdTE2IGxhc2lfY3RybF92YWw7Ci0JCQlpZiAoZXh0X3BoeV90eXBlID09Ci0JCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MikgewotCQkJCXJ4X2FsYXJtX2N0cmxfdmFsID0gMHg0MDA7Ci0JCQkJbGFzaV9jdHJsX3ZhbCA9IDB4MDAwNDsKLQkJCX0gZWxzZSB7Ci0JCQkJcnhfYWxhcm1fY3RybF92YWwgPSAoMTw8Mik7Ci0JCQkJbGFzaV9jdHJsX3ZhbCA9IDB4MDAwNDsKLQkJCX0KLQotCQkJLyogZW5hYmxlIExBU0kgKi8KLQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICBleHRfcGh5X3R5cGUsCi0JCQkJICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgIE1ESU9fUE1BX0RFVkFELAotCQkJCSAgIE1ESU9fUE1BX1JFR19SWF9BTEFSTV9DVFJMLAotCQkJCSAgIHJ4X2FsYXJtX2N0cmxfdmFsKTsKLQotCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgIE1ESU9fUE1BX1JFR19MQVNJX0NUUkwsCi0JCQkJICAgICAgIGxhc2lfY3RybF92YWwpOwotCi0JCQlibngyeF84MDczX3NldF9wYXVzZV9jbDM3KHBhcmFtcywgdmFycyk7Ci0KLQkJCWlmIChleHRfcGh5X3R5cGUgPT0KLQkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyKQotCQkJCWJueDJ4X2JjbTgwNzJfZXh0ZXJuYWxfcm9tX2Jvb3QocGFyYW1zKTsKLQkJCWVsc2UKLQkJCQkvKiBJbiBjYXNlIG9mIDgwNzMgd2l0aCBsb25nIHhhdWkgbGluZXMsCi0JCQkJZG9uJ3Qgc2V0IHRoZSA4MDczIHhhdWkgbG93IHBvd2VyKi8KLQkJCQlibngyeF9iY204MDczX3NldF94YXVpX2xvd19wb3dlcl9tb2RlKHBhcmFtcyk7Ci0KLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgTURJT19QTUFfUkVHX004MDUxX01TR09VVF9SRUcsCi0JCQkJICAgICAgJnRtcDEpOwotCi0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCSAgICAgIE1ESU9fUE1BX1JFR19SWF9BTEFSTSwgJnRtcDEpOwotCi0JCQlEUChORVRJRl9NU0dfTElOSywgIkJlZm9yZSByb20gUlhfQUxBUk0ocG9ydDEpOiIKLQkJCQkJICAgICAiMHgleFxuIiwgdG1wMSk7Ci0KLQkJCS8qIElmIHRoaXMgaXMgZm9yY2VkIHNwZWVkLCBzZXQgdG8gS1Igb3IgS1gKLQkJCSAqIChhbGwgb3RoZXIgYXJlIG5vdCBzdXBwb3J0ZWQpCi0JCQkgKi8KLQkJCWlmIChwYXJhbXMtPmxvb3BiYWNrX21vZGUgPT0gTE9PUEJBQ0tfRVhUKSB7Ci0JCQkJYm54MnhfYmNtODA3eF9mb3JjZV8xMEcocGFyYW1zKTsKLQkJCQlEUChORVRJRl9NU0dfTElOSywKLQkJCQkJIkZvcmNlZCBzcGVlZCAxMEcgb24gODA3WFxuIik7Ci0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UgewotCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAotCQkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJCSAgICAgICBNRElPX1BNQV9SRUdfQkNNX0NUUkwsCi0JCQkJCSAgICAgICAweDAwMDIpOwotCQkJfQotCQkJaWYgKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgIT0gU1BFRURfQVVUT19ORUcpIHsKLQkJCQlpZiAocGFyYW1zLT5yZXFfbGluZV9zcGVlZCA9PSBTUEVFRF8xMDAwMCkgewotCQkJCQl2YWwgPSAoMTw8Nyk7Ci0JCQkJfSBlbHNlIGlmIChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09Ci0JCQkJCSAgIFNQRUVEXzI1MDApIHsKLQkJCQkJdmFsID0gKDE8PDUpOwotCQkJCQkvKiBOb3RlIHRoYXQgMi41RyB3b3JrcyBvbmx5Ci0JCQkJCXdoZW4gdXNlZCB3aXRoIDFHIGFkdmVydGlzbWVudCAqLwotCQkJCX0gZWxzZQotCQkJCQl2YWwgPSAoMTw8NSk7Ci0JCQl9IGVsc2UgewotCi0JCQkJdmFsID0gMDsKLQkJCQlpZiAocGFyYW1zLT5zcGVlZF9jYXBfbWFzayAmCi0JCQkJCVBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMTBHKQotCQkJCQl2YWwgfD0gKDE8PDcpOwotCi0JCQkJLyogTm90ZSB0aGF0IDIuNUcgd29ya3Mgb25seSB3aGVuCi0JCQkJdXNlZCB3aXRoIDFHIGFkdmVydGlzbWVudCAqLwotCQkJCWlmIChwYXJhbXMtPnNwZWVkX2NhcF9tYXNrICYKLQkJCQkJKFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMUcgfAotCQkJCQkgUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8yXzVHKSkKLQkJCQkJdmFsIHw9ICgxPDw1KTsKLQkJCQlEUChORVRJRl9NU0dfTElOSywKLQkJCQkJICI4MDd4IGF1dG9uZWcgdmFsID0gMHgleFxuIiwgdmFsKTsKLQkJCX0KLQotCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICAgTURJT19BTl9ERVZBRCwKLQkJCQkgICAgICAgTURJT19BTl9SRUdfQURWLCB2YWwpOwotCQkJaWYgKGV4dF9waHlfdHlwZSA9PQotCQkJICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMpIHsKLQkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJCSAgICAgIE1ESU9fQU5fUkVHXzgwNzNfMl81RywgJnRtcDEpOwotCi0JCQkJaWYgKCgocGFyYW1zLT5zcGVlZF9jYXBfbWFzayAmCi0JCQkJICAgICAgUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8yXzVHKSAmJgotCQkJCSAgICAgKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0KLQkJCQkgICAgICBTUEVFRF9BVVRPX05FRykpIHx8Ci0JCQkJICAgIChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09Ci0JCQkJICAgICBTUEVFRF8yNTAwKSkgewotCQkJCQl1MTYgcGh5X3ZlcjsKLQkJCQkJLyogQWxsb3cgMi41RyBmb3IgQTEgYW5kIGFib3ZlICovCi0JCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJCQkgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKLQkJCQkJIGV4dF9waHlfYWRkciwKLQkJCQkJIE1ESU9fUE1BX0RFVkFELAotCQkJCQkgTURJT19QTUFfUkVHXzgwNzNfQ0hJUF9SRVYsICZwaHlfdmVyKTsKLQkJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJBZGQgMi41R1xuIik7Ci0JCQkJCWlmIChwaHlfdmVyID4gMCkKLQkJCQkJCXRtcDEgfD0gMTsKLQkJCQkJZWxzZQotCQkJCQkJdG1wMSAmPSAweGZmZmU7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJEaXNhYmxlIDIuNUdcbiIpOwotCQkJCQl0bXAxICY9IDB4ZmZmZTsKLQkJCQl9Ci0KLQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJCSAgICAgICBNRElPX0FOX0RFVkFELAotCQkJCQkgICAgICAgTURJT19BTl9SRUdfODA3M18yXzVHLCB0bXAxKTsKLQkJCX0KLQotCQkJLyogQWRkIHN1cHBvcnQgZm9yIENMMzcgKHBhc3NpdmUgbW9kZSkgSUkgKi8KLQotCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgICBNRElPX0FOX0RFVkFELAotCQkJCSAgICAgICBNRElPX0FOX1JFR19DTDM3X0ZDX0xELAotCQkJCSAgICAgICAmdG1wMSk7Ci0KLQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJICAgICAgIE1ESU9fQU5fUkVHX0NMMzdfRkNfTEQsICh0bXAxIHwKLQkJCQkgICAgICAgKChwYXJhbXMtPnJlcV9kdXBsZXggPT0gRFVQTEVYX0ZVTEwpID8KLQkJCQkgICAgICAgMHgyMCA6IDB4NDApKSk7Ci0KLQkJCS8qIEFkZCBzdXBwb3J0IGZvciBDTDM3IChwYXNzaXZlIG1vZGUpIElJSSAqLwotCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICAgTURJT19BTl9ERVZBRCwKLQkJCQkgICAgICAgTURJT19BTl9SRUdfQ0wzN19BTiwgMHgxMDAwKTsKLQotCQkJaWYgKGV4dF9waHlfdHlwZSA9PQotCQkJICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMpIHsKLQkJCQkvKiBUaGUgU05SIHdpbGwgaW1wcm92ZSBhYm91dCAyZGIgYnkgY2hhbmdpbmcKLQkJCQlCVyBhbmQgRkVFIG1haW4gdGFwLiBSZXN0IGNvbW1hbmRzIGFyZSBleGVjdXRlZAotCQkJCWFmdGVyIGxpbmsgaXMgdXAqLwotCQkJCS8qQ2hhbmdlIEZGRSBtYWluIGN1cnNvciB0byA1IGluIEVEQyByZWdpc3RlciovCi0JCQkJaWYgKGJueDJ4XzgwNzNfaXNfc25yX25lZWRlZChwYXJhbXMpKQotCQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCQkgICAgZXh0X3BoeV90eXBlLAotCQkJCQkJICAgIGV4dF9waHlfYWRkciwKLQkJCQkJCSAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkJCSAgICBNRElPX1BNQV9SRUdfRURDX0ZGRV9NQUlOLAotCQkJCQkJICAgIDB4RkIwQyk7Ci0KLQkJCQkvKiBFbmFibGUgRkVDIChGb3J3YXJlIEVycm9yIENvcnJlY3Rpb24pCi0JCQkJUmVxdWVzdCBpbiB0aGUgQU4gKi8KLQkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJCSAgICAgIE1ESU9fQU5fUkVHX0FEVjIsICZ0bXAxKTsKLQotCQkJCXRtcDEgfD0gKDE8PDE1KTsKLQotCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkJICAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJCSAgICAgICBNRElPX0FOX1JFR19BRFYyLCB0bXAxKTsKLQotCQkJfQotCi0JCQlibngyeF9leHRfcGh5X3NldF9wYXVzZShwYXJhbXMsIHZhcnMpOwotCi0JCQkvKiBSZXN0YXJ0IGF1dG9uZWcgKi8KLQkJCW1zbGVlcCg1MDApOwotCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICAgTURJT19BTl9ERVZBRCwKLQkJCQkgICAgICAgTURJT19BTl9SRUdfQ1RSTCwgMHgxMjAwKTsKLQkJCURQKE5FVElGX01TR19MSU5LLCAiODA3eCBBdXRvbmVnIFJlc3RhcnQ6ICIKLQkJCSAgICJBZHZlcnRpc2UgMUc9JXgsIDEwRz0leFxuIiwKLQkJCSAgICgodmFsICYgKDE8PDUpKSA+IDApLAotCQkJICAgKCh2YWwgJiAoMTw8NykpID4gMCkpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3Mjc6Ci0JCXsKLQkJCXUxNiB0bXAxOwotCQkJdTE2IHJ4X2FsYXJtX2N0cmxfdmFsOwotCQkJdTE2IGxhc2lfY3RybF92YWw7Ci0KLQkJCS8qIEVuYWJsZSBQTUQgbGluaywgTU9EX0FCU19GTFQsIGFuZCAxRyBsaW5rIGFsYXJtICovCi0KLQkJCXUxNiBtb2RfYWJzOwotCQkJcnhfYWxhcm1fY3RybF92YWwgPSAoMTw8MikgfCAoMTw8NSkgOwotCQkJbGFzaV9jdHJsX3ZhbCA9IDB4MDAwNDsKLQotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJJbml0aWFsaXppbmcgQkNNODcyN1xuIik7Ci0JCQkvKiBlbmFibGUgTEFTSSAqLwotCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgIE1ESU9fUE1BX1JFR19SWF9BTEFSTV9DVFJMLAotCQkJCSAgICAgICByeF9hbGFybV9jdHJsX3ZhbCk7Ci0KLQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCSAgICAgICBNRElPX1BNQV9SRUdfTEFTSV9DVFJMLAotCQkJCSAgICAgICBsYXNpX2N0cmxfdmFsKTsKLQotCQkJLyogSW5pdGlhbGx5IGNvbmZpZ3VyZSAgTU9EX0FCUyB0byBpbnRlcnJ1cHQgd2hlbgotCQkJbW9kdWxlIGlzIHByZXNlbmNlKCBiaXQgOCkgKi8KLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLCAmbW9kX2Ficyk7Ci0JCQkvKiBTZXQgRURDIG9mZiBieSBzZXR0aW5nIE9QVFhMT1Mgc2lnbmFsIGlucHV0IHRvIGxvdwotCQkJKGJpdCA5KS4KLQkJCVdoZW4gdGhlIEVEQyBpcyBvZmYgaXQgbG9ja3Mgb250byBhIHJlZmVyZW5jZSBjbG9jayBhbmQKLQkJCWF2b2lkcyBiZWNvbWluZyAnbG9zdCcuKi8KLQkJCW1vZF9hYnMgJj0gfigoMTw8OCkgfCAoMTw8OSkpOwotCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgIE1ESU9fUE1BX1JFR19QSFlfSURFTlRJRklFUiwgbW9kX2Ficyk7Ci0KLQkJCS8qIE1ha2UgTU9EX0FCUyBnaXZlIGludGVycnVwdCBvbiBjaGFuZ2UgKi8KLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgTURJT19QTUFfUkVHXzg3MjdfUENTX09QVF9DVFJMLAotCQkJCSAgICAgICZ2YWwpOwotCQkJdmFsIHw9ICgxPDwxMik7Ci0JCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICAgTURJT19QTUFfUkVHXzg3MjdfUENTX09QVF9DVFJMLAotCQkJCSAgICAgICB2YWwpOwotCi0JCQkvKiBTZXQgODcyNyBHUElPcyB0byBpbnB1dCB0byBhbGxvdyByZWFkaW5nIGZyb20gdGhlCi0JCQk4NzI3IEdQSU8wIHN0YXR1cyB3aGljaCByZWZsZWN0IFNGUCsgbW9kdWxlCi0JCQlvdmVyLWN1cnJlbnQgKi8KLQotCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcsCi0JCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgIE1ESU9fUE1BX1JFR184NzI3X1BDU19PUFRfQ1RSTCwKLQkJCQkgICAgICAgJnZhbCk7Ci0JCQl2YWwgJj0gMHhmZjhmOyAvKiBSZXNldCBiaXRzIDQtNiAqLwotCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAotCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCSAgICAgICBNRElPX1BNQV9SRUdfODcyN19QQ1NfT1BUX0NUUkwsCi0JCQkJICAgICAgIHZhbCk7Ci0KLQkJCWJueDJ4Xzg3MjdfcG93ZXJfbW9kdWxlKGJwLCBwYXJhbXMsIGV4dF9waHlfYWRkciwgMSk7Ci0JCQlibngyeF9iY204MDczX3NldF94YXVpX2xvd19wb3dlcl9tb2RlKHBhcmFtcyk7Ci0KLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgTURJT19QTUFfUkVHX004MDUxX01TR09VVF9SRUcsCi0JCQkJICAgICAgJnRtcDEpOwotCi0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCSAgICAgIE1ESU9fUE1BX1JFR19SWF9BTEFSTSwgJnRtcDEpOwotCi0JCQkvKiBTZXQgb3B0aW9uIDFHIHNwZWVkICovCi0JCQlpZiAocGFyYW1zLT5yZXFfbGluZV9zcGVlZCA9PSBTUEVFRF8xMDAwKSB7Ci0KLQkJCQlEUChORVRJRl9NU0dfTElOSywgIlNldHRpbmcgMUcgZm9yY2VcbiIpOwotCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsIDB4NDApOwotCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCQkgICAgICAgTURJT19QTUFfUkVHXzEwR19DVFJMMiwgMHhEKTsKLQkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCSAgICAgIE1ESU9fUE1BX1JFR18xMEdfQ1RSTDIsICZ0bXAxKTsKLQkJCQlEUChORVRJRl9NU0dfTElOSywgIjEuNyA9IDB4JXhcbiIsIHRtcDEpOwotCi0JCQl9IGVsc2UgaWYgKChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09Ci0JCQkJICAgIFNQRUVEX0FVVE9fTkVHKSAmJgotCQkJCSAgICgocGFyYW1zLT5zcGVlZF9jYXBfbWFzayAmCi0JCQkJICAgICBQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzFHKSkpIHsKLQotCQkJCURQKE5FVElGX01TR19MSU5LLCAiU2V0dGluZyAxRyBjbGF1c2UzN1xuIik7Ci0JCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fQU5fREVWQUQsCi0JCQkJCSAgICAgICBNRElPX1BNQV9SRUdfODcyN19NSVNDX0NUUkwsIDApOwotCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX0FOX0RFVkFELAotCQkJCQkgICAgICAgTURJT19BTl9SRUdfQ0wzN19BTiwgMHgxMzAwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogU2luY2UgdGhlIDg3MjcgaGFzIG9ubHkgc2luZ2xlIHJlc2V0IHBpbiwKLQkJCQluZWVkIHRvIHNldCB0aGUgMTBHIHJlZ2lzdGVycyBhbHRob3VnaCBpdCBpcwotCQkJCWRlZmF1bHQgKi8KLQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKLQkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19BTl9ERVZBRCwKLQkJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NUUkwsIDB4MDAyMCk7Ci0JCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fQU5fREVWQUQsCi0JCQkJCSAgICAgICAweDcsIDB4MDEwMCk7Ci0JCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAotCQkJCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsIDB4MjA0MCk7Ci0JCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAotCQkJCQkgICAgICAgTURJT19QTUFfUkVHXzEwR19DVFJMMiwgMHgwMDA4KTsKLQkJCX0KLQotCQkJLyogU2V0IDItd2lyZSB0cmFuc2ZlciByYXRlIHRvIDQwMEtoeiBzaW5jZSAxMDBLaHoKLQkJCWlzIG5vdCBvcGVyYXRpb25hbCAqLwotCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgIE1ESU9fUE1BX1JFR184NzI3X1RXT19XSVJFX1NMQVZFX0FERFIsCi0JCQkJICAgICAgIDB4YTEwMSk7Ci0KLQkJCS8qIFNldCBUWCBQcmVFbXBoYXNpcyBpZiBuZWVkZWQgKi8KLQkJCWlmICgocGFyYW1zLT5mZWF0dXJlX2NvbmZpZ19mbGFncyAmCi0JCQkgICAgIEZFQVRVUkVfQ09ORklHX09WRVJSSURFX1BSRUVNUEhBU0lTX0VOQUJMRUQpKSB7Ci0JCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXR0aW5nIFRYX0NUUkwxIDB4JXgsIgotCQkJCQkgIlRYX0NUUkwyIDB4JXhcbiIsCi0JCQkJCSBwYXJhbXMtPnhneHNfY29uZmlnX3R4WzBdLAotCQkJCQkgcGFyYW1zLT54Z3hzX2NvbmZpZ190eFsxXSk7Ci0JCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAotCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAotCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJCSAgICAgICBNRElPX1BNQV9SRUdfODcyN19UWF9DVFJMMSwKLQkJCQkJICAgICAgIHBhcmFtcy0+eGd4c19jb25maWdfdHhbMF0pOwotCi0JCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAotCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAotCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJCSAgICAgICBNRElPX1BNQV9SRUdfODcyN19UWF9DVFJMMiwKLQkJCQkJICAgICAgIHBhcmFtcy0+eGd4c19jb25maWdfdHhbMV0pOwotCQkJfQotCi0JCQlicmVhazsKLQkJfQotCi0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKLQkJewotCQkJdTE2IGZ3X3ZlcjEsIGZ3X3ZlcjI7Ci0JCQlEUChORVRJRl9NU0dfTElOSywKLQkJCQkiU2V0dGluZyB0aGUgU0ZYNzEwMSBMQVNJIGluZGljYXRpb25cbiIpOwotCi0JCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICAgTURJT19QTUFfUkVHX0xBU0lfQ1RSTCwgMHgxKTsKLQkJCURQKE5FVElGX01TR19MSU5LLAotCQkJICAiU2V0dGluZyB0aGUgU0ZYNzEwMSBMRUQgdG8gYmxpbmsgb24gdHJhZmZpY1xuIik7Ci0JCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICAgTURJT19QTUFfUkVHXzcxMDdfTEVEX0NOVEwsICgxPDwzKSk7Ci0KLQkJCWJueDJ4X2V4dF9waHlfc2V0X3BhdXNlKHBhcmFtcywgdmFycyk7Ci0JCQkvKiBSZXN0YXJ0IGF1dG9uZWcgKi8KLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19BTl9ERVZBRCwKLQkJCQkgICAgICBNRElPX0FOX1JFR19DVFJMLCAmdmFsKTsKLQkJCXZhbCB8PSAweDIwMDsKLQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJICAgICAgIE1ESU9fQU5fUkVHX0NUUkwsIHZhbCk7Ci0KLQkJCS8qIFNhdmUgc3Bpcm9tIHZlcnNpb24gKi8KLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICBNRElPX1BNQV9SRUdfNzEwMV9WRVIxLCAmZndfdmVyMSk7Ci0KLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICBNRElPX1BNQV9SRUdfNzEwMV9WRVIyLCAmZndfdmVyMik7Ci0KLQkJCWJueDJ4X3NhdmVfc3Bpcm9tX3ZlcnNpb24ocGFyYW1zLT5icCwgcGFyYW1zLT5wb3J0LAotCQkJCQkJcGFyYW1zLT5zaG1lbV9iYXNlLAotCQkJCQkJKHUzMikoZndfdmVyMTw8MTYgfCBmd192ZXIyKSk7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODE6Ci0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MjM6Ci0JCQkvKiBUaGlzIHBoeSB1c2VzIHRoZSBOSUcgbGF0Y2ggbWVjaGFuaXNtIHNpbmNlIGxpbmsKLQkJCQlpbmRpY2F0aW9uIGFycml2ZXMgdGhyb3VnaCBpdHMgTEVENCBhbmQgbm90IHZpYQotCQkJCWl0cyBMQVNJIHNpZ25hbCwgc28gd2UgZ2V0IHN0ZWFkeSBzaWduYWwKLQkJCQlpbnN0ZWFkIG9mIGNsZWFyIG9uIHJlYWQgKi8KLQkJCWJueDJ4X2JpdHNfZW4oYnAsIE5JR19SRUdfTEFUQ0hfQkNfMCArIHBhcmFtcy0+cG9ydCo0LAotCQkJCSAgICAxIDw8IE5JR19MQVRDSF9CQ19FTkFCTEVfTUlfSU5UKTsKLQotCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxLAotCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCSAgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwgMHgwMDAwKTsKLQotCQkJYm54MnhfODQ4MV9zZXRfbGVkNChwYXJhbXMsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyKTsKLQkJCWlmIChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09IFNQRUVEX0FVVE9fTkVHKSB7Ci0KLQkJCQl1MTYgYXV0b25lZ192YWwsIGFuXzEwMDBfdmFsLCBhbl8xMF8xMDBfdmFsOwotCQkJCS8qIHNldCAxMDAwIHNwZWVkIGFkdmVydGlzZW1lbnQgKi8KLQkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJCSAgICAgIE1ESU9fQU5fUkVHXzg0ODFfMTAwMFRfQ1RSTCwKLQkJCQkJICAgICAgJmFuXzEwMDBfdmFsKTsKLQotCQkJCWlmIChwYXJhbXMtPnNwZWVkX2NhcF9tYXNrICYKLQkJCQkgICAgUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xRykgewotCQkJCQlhbl8xMDAwX3ZhbCB8PSAoMTw8OCk7Ci0JCQkJCWlmIChwYXJhbXMtPnJlcV9kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCi0JCQkJCQlhbl8xMDAwX3ZhbCB8PSAoMTw8OSk7Ci0JCQkJCURQKE5FVElGX01TR19MSU5LLCAiQWR2ZXJ0aXNpbmcgMUdcbiIpOwotCQkJCX0gZWxzZQotCQkJCQlhbl8xMDAwX3ZhbCAmPSB+KCgxPDw4KSB8ICgxPDw5KSk7Ci0KLQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJCSAgICAgICBNRElPX0FOX0RFVkFELAotCQkJCQkgICAgICAgTURJT19BTl9SRUdfODQ4MV8xMDAwVF9DVFJMLAotCQkJCQkgICAgICAgYW5fMTAwMF92YWwpOwotCi0JCQkJLyogc2V0IDEwMCBzcGVlZCBhZHZlcnRpc2VtZW50ICovCi0JCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAotCQkJCQkgICAgICBNRElPX0FOX1JFR184NDgxX0xFR0FDWV9BTl9BRFYsCi0JCQkJCSAgICAgICZhbl8xMF8xMDBfdmFsKTsKLQotCQkJCWlmIChwYXJhbXMtPnNwZWVkX2NhcF9tYXNrICYKLQkJCQkgKFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMTAwTV9GVUxMIHwKLQkJCQkgIFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMTAwTV9IQUxGKSkgewotCQkJCQlhbl8xMF8xMDBfdmFsIHw9ICgxPDw3KTsKLQkJCQkJaWYgKHBhcmFtcy0+cmVxX2R1cGxleCA9PSBEVVBMRVhfRlVMTCkKLQkJCQkJCWFuXzEwXzEwMF92YWwgfD0gKDE8PDgpOwotCQkJCQlEUChORVRJRl9NU0dfTElOSywKLQkJCQkJCSJBZHZlcnRpc2luZyAxMDBNXG4iKTsKLQkJCQl9IGVsc2UKLQkJCQkJYW5fMTBfMTAwX3ZhbCAmPSB+KCgxPDw3KSB8ICgxPDw4KSk7Ci0KLQkJCQkvKiBzZXQgMTAgc3BlZWQgYWR2ZXJ0aXNlbWVudCAqLwotCQkJCWlmIChwYXJhbXMtPnNwZWVkX2NhcF9tYXNrICYKLQkJCQkgIChQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzEwTV9GVUxMIHwKLQkJCQkgICBQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzEwTV9IQUxGKSkgewotCQkJCQlhbl8xMF8xMDBfdmFsIHw9ICgxPDw1KTsKLQkJCQkJaWYgKHBhcmFtcy0+cmVxX2R1cGxleCA9PSBEVVBMRVhfRlVMTCkKLQkJCQkJCWFuXzEwXzEwMF92YWwgfD0gKDE8PDYpOwotCQkJCQlEUChORVRJRl9NU0dfTElOSywgIkFkdmVydGlzaW5nIDEwTVxuIik7Ci0JCQkJICAgICB9Ci0JCQkJZWxzZQotCQkJCQlhbl8xMF8xMDBfdmFsICY9IH4oKDE8PDUpIHwgKDE8PDYpKTsKLQotCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkJICAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJCSAgICAgICBNRElPX0FOX1JFR184NDgxX0xFR0FDWV9BTl9BRFYsCi0JCQkJCSAgICAgICBhbl8xMF8xMDBfdmFsKTsKLQotCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKLQkJCQkJICAgICAgTURJT19BTl9SRUdfODQ4MV9MRUdBQ1lfTUlJX0NUUkwsCi0JCQkJCSAgICAgICZhdXRvbmVnX3ZhbCk7Ci0KLQkJCQkvKiBEaXNhYmxlIGZvcmNlZCBzcGVlZCAqLwotCQkJCWF1dG9uZWdfdmFsICY9IH4oMTw8NnwxPDwxMyk7Ci0KLQkJCQkvKiBFbmFibGUgYXV0b25lZyBhbmQgcmVzdGFydCBhdXRvbmVnCi0JCQkJZm9yIGxlZ2FjeSBzcGVlZHMgKi8KLQkJCQlhdXRvbmVnX3ZhbCB8PSAoMTw8OXwxPDwxMik7Ci0KLQkJCQlpZiAocGFyYW1zLT5yZXFfZHVwbGV4ID09IERVUExFWF9GVUxMKQotCQkJCQlhdXRvbmVnX3ZhbCB8PSAoMTw8OCk7Ci0JCQkJZWxzZQotCQkJCQlhdXRvbmVnX3ZhbCAmPSB+KDE8PDgpOwotCi0JCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAotCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAotCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkgICAgICAgTURJT19BTl9ERVZBRCwKLQkJCQkJICAgICAgIE1ESU9fQU5fUkVHXzg0ODFfTEVHQUNZX01JSV9DVFJMLAotCQkJCQkgICAgICAgYXV0b25lZ192YWwpOwotCi0JCQkJaWYgKHBhcmFtcy0+c3BlZWRfY2FwX21hc2sgJgotCQkJCSAgICBQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzEwRykgewotCQkJCQlEUChORVRJRl9NU0dfTElOSywgIkFkdmVydGlzaW5nIDEwR1xuIik7Ci0JCQkJCS8qIFJlc3RhcnQgYXV0b25lZyBmb3IgMTBHKi8KLQotCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICAgTURJT19BTl9ERVZBRCwKLQkJCQkgICAgICAgTURJT19BTl9SRUdfQ1RSTCwgMHgzMjAwKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCS8qIEZvcmNlIHNwZWVkICovCi0JCQkJdTE2IGF1dG9uZWdfY3RybCwgcG1hX2N0cmw7Ci0JCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAotCQkJCQkgICAgICBNRElPX0FOX1JFR184NDgxX0xFR0FDWV9NSUlfQ1RSTCwKLQkJCQkJICAgICAgJmF1dG9uZWdfY3RybCk7Ci0KLQkJCQkvKiBEaXNhYmxlIGF1dG9uZWcgKi8KLQkJCQlhdXRvbmVnX2N0cmwgJj0gfigxPDwxMik7Ci0KLQkJCQkvKiBTZXQgMTAwMCBmb3JjZSAqLwotCQkJCXN3aXRjaCAocGFyYW1zLT5yZXFfbGluZV9zcGVlZCkgewotCQkJCWNhc2UgU1BFRURfMTAwMDA6Ci0JCQkJCURQKE5FVElGX01TR19MSU5LLAotCQkJCQkJIlVuYWJsZSB0byBzZXQgMTBHIGZvcmNlICFcbiIpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFNQRUVEXzEwMDA6Ci0JCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJCQkgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwKLQkJCQkJCSAgICAgICZwbWFfY3RybCk7Ci0JCQkJCWF1dG9uZWdfY3RybCAmPSB+KDE8PDEzKTsKLQkJCQkJYXV0b25lZ19jdHJsIHw9ICgxPDw2KTsKLQkJCQkJcG1hX2N0cmwgJj0gfigxPDwxMyk7Ci0JCQkJCXBtYV9jdHJsIHw9ICgxPDw2KTsKLQkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkJCQkiU2V0dGluZyAxMDAwTSBmb3JjZVxuIik7Ci0JCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCQkJICAgICAgIE1ESU9fUE1BX1JFR19DVFJMLAotCQkJCQkJICAgICAgIHBtYV9jdHJsKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBTUEVFRF8xMDA6Ci0JCQkJCWF1dG9uZWdfY3RybCB8PSAoMTw8MTMpOwotCQkJCQlhdXRvbmVnX2N0cmwgJj0gfigxPDw2KTsKLQkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkJCQkiU2V0dGluZyAxMDBNIGZvcmNlXG4iKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBTUEVFRF8xMDoKLQkJCQkJYXV0b25lZ19jdHJsICY9IH4oMTw8MTMpOwotCQkJCQlhdXRvbmVnX2N0cmwgJj0gfigxPDw2KTsKLQkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkJCQkiU2V0dGluZyAxME0gZm9yY2VcbiIpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCQkvKiBEdXBsZXggbW9kZSAqLwotCQkJCWlmIChwYXJhbXMtPnJlcV9kdXBsZXggPT0gRFVQTEVYX0ZVTEwpIHsKLQkJCQkJYXV0b25lZ19jdHJsIHw9ICgxPDw4KTsKLQkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkJCQkiU2V0dGluZyBmdWxsIGR1cGxleFxuIik7Ci0JCQkJfSBlbHNlCi0JCQkJCWF1dG9uZWdfY3RybCAmPSB+KDE8PDgpOwotCi0JCQkJLyogVXBkYXRlIGF1dG9uZWcgY3RybCBhbmQgcG1hIGN0cmwgKi8KLQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJCSAgICAgICBNRElPX0FOX0RFVkFELAotCQkJCQkgICAgICAgTURJT19BTl9SRUdfODQ4MV9MRUdBQ1lfTUlJX0NUUkwsCi0JCQkJCSAgICAgICBhdXRvbmVnX2N0cmwpOwotCQkJfQotCi0JCQkvKiBTYXZlIHNwaXJvbSB2ZXJzaW9uICovCi0JCQlibngyeF9zYXZlXzg0ODFfc3Bpcm9tX3ZlcnNpb24oYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJCSAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkJICAgICBwYXJhbXMtPnNobWVtX2Jhc2UpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRkFJTFVSRToKLQkJCURQKE5FVElGX01TR19MSU5LLAotCQkJCSAiWEdYUyBQSFkgRmFpbHVyZSBkZXRlY3RlZCAweCV4XG4iLAotCQkJCSBwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJCQUQgWEdYUyBleHRfcGh5X2NvbmZpZyAweCV4XG4iLAotCQkJCSAgcGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCi0JfSBlbHNlIHsgLyogU2VyRGVzICovCi0KLQkJZXh0X3BoeV90eXBlID0gU0VSREVTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQkJc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKLQkJY2FzZSBQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9UWVBFX0RJUkVDVDoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiU2VyRGVzIERpcmVjdFxuIik7Ci0JCQlicmVhazsKLQotCQljYXNlIFBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX1RZUEVfQkNNNTQ4MjoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiU2VyRGVzIDU0ODJcbiIpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiQkFEIFNlckRlcyBleHRfcGh5X2NvbmZpZyAweCV4XG4iLAotCQkJICAgcGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4Xzg3MjdfaGFuZGxlX21vZF9hYnMoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTE2IG1vZF9hYnMsIHJ4X2FsYXJtX3N0YXR1czsKLQl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQl1MzIgdmFsID0gUkVHX1JEKGJwLCBwYXJhbXMtPnNobWVtX2Jhc2UgKwotCQkJICAgICBvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLCBkZXZfaW5mby4KLQkJCQkgICAgICBwb3J0X2ZlYXR1cmVfY29uZmlnW3BhcmFtcy0+cG9ydF0uCi0JCQkJICAgICAgY29uZmlnKSk7Ci0JYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcsCi0JCSAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgIE1ESU9fUE1BX1JFR19QSFlfSURFTlRJRklFUiwgJm1vZF9hYnMpOwotCWlmIChtb2RfYWJzICYgKDE8PDgpKSB7Ci0KLQkJLyogTW9kdWxlIGlzIGFic2VudCAqLwotCQlEUChORVRJRl9NU0dfTElOSywgIk1PRF9BQlMgaW5kaWNhdGlvbiAiCi0JCQkgICAgInNob3cgbW9kdWxlIGlzIGFic2VudFxuIik7Ci0KLQkJLyogMS4gU2V0IG1vZF9hYnMgdG8gZGV0ZWN0IG5leHQgbW9kdWxlCi0JCXByZXNlbmNlIGV2ZW50Ci0JCSAgIDIuIFNldCBFREMgb2ZmIGJ5IHNldHRpbmcgT1BUWExPUyBzaWduYWwgaW5wdXQgdG8gbG93Ci0JCQkoYml0IDkpLgotCQkJV2hlbiB0aGUgRURDIGlzIG9mZiBpdCBsb2NrcyBvbnRvIGEgcmVmZXJlbmNlIGNsb2NrIGFuZAotCQkJYXZvaWRzIGJlY29taW5nICdsb3N0Jy4qLwotCQltb2RfYWJzICY9IH4oKDE8PDgpfCgxPDw5KSk7Ci0JCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAotCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCSAgICAgICBNRElPX1BNQV9SRUdfUEhZX0lERU5USUZJRVIsIG1vZF9hYnMpOwotCi0JCS8qIENsZWFyIFJYIGFsYXJtIHNpbmNlIGl0IHN0YXlzIHVwIGFzIGxvbmcgYXMKLQkJdGhlIG1vZF9hYnMgd2Fzbid0IGNoYW5nZWQgKi8KLQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAotCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICBNRElPX1BNQV9SRUdfUlhfQUxBUk0sICZyeF9hbGFybV9zdGF0dXMpOwotCi0JfSBlbHNlIHsKLQkJLyogTW9kdWxlIGlzIHByZXNlbnQgKi8KLQkJRFAoTkVUSUZfTVNHX0xJTkssICJNT0RfQUJTIGluZGljYXRpb24gIgotCQkJICAgICJzaG93IG1vZHVsZSBpcyBwcmVzZW50XG4iKTsKLQkJLyogRmlyc3QgdGhpbmcsIGRpc2FibGUgdHJhbnNtaXR0ZXIsCi0JCWFuZCBpZiB0aGUgbW9kdWxlIGlzIG9rLCB0aGUKLQkJbW9kdWxlX2RldGVjdGlvbiB3aWxsIGVuYWJsZSBpdCovCi0KLQkJLyogMS4gU2V0IG1vZF9hYnMgdG8gZGV0ZWN0IG5leHQgbW9kdWxlCi0JCWFic2VudCBldmVudCAoIGJpdCA4KQotCQkgICAyLiBSZXN0b3JlIHRoZSBkZWZhdWx0IHBvbGFyaXR5IG9mIHRoZSBPUFJYTE9TIHNpZ25hbCBhbmQKLQkJdGhpcyBzaWduYWwgd2lsbCB0aGVuIGNvcnJlY3RseSBpbmRpY2F0ZSB0aGUgcHJlc2VuY2Ugb3IKLQkJYWJzZW5jZSBvZiB0aGUgUnggc2lnbmFsLiAoYml0IDkpICovCi0JCW1vZF9hYnMgfD0gKCgxPDw4KXwoMTw8OSkpOwotCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCi0JCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAotCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgICBNRElPX1BNQV9SRUdfUEhZX0lERU5USUZJRVIsIG1vZF9hYnMpOwotCi0JCS8qIENsZWFyIFJYIGFsYXJtIHNpbmNlIGl0IHN0YXlzIHVwIGFzIGxvbmcgYXMKLQkJdGhlIG1vZF9hYnMgd2Fzbid0IGNoYW5nZWQuIFRoaXMgaXMgbmVlZCB0byBiZSBkb25lCi0JCWJlZm9yZSBjYWxsaW5nIHRoZSBtb2R1bGUgZGV0ZWN0aW9uLCBvdGhlcndpc2UgaXQgd2lsbCBjbGVhcgotCQl0aGUgbGluayB1cGRhdGUgYWxhcm0gKi8KLQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAotCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICBNRElPX1BNQV9SRUdfUlhfQUxBUk0sICZyeF9hbGFybV9zdGF0dXMpOwotCi0KLQkJaWYgKCh2YWwgJiBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfTUFTSykgPT0KLQkJICAgIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9ESVNBQkxFX1RYX0xBU0VSKQotCQkJYm54Mnhfc2ZwX3NldF90cmFuc21pdHRlcihicCwgcGFyYW1zLT5wb3J0LAotCQkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAotCQkJCQlleHRfcGh5X2FkZHIsIDApOwotCi0JCWlmIChibngyeF93YWl0X2Zvcl9zZnBfbW9kdWxlX2luaXRpYWxpemVkKHBhcmFtcykKLQkJICAgID09IDApCi0JCQlibngyeF9zZnBfbW9kdWxlX2RldGVjdGlvbihwYXJhbXMpOwotCQllbHNlCi0JCQlEUChORVRJRl9NU0dfTElOSywgIlNGUCsgbW9kdWxlIGlzIG5vdCBpbml0aWFsaXplZFxuIik7Ci0JfQotCi0JRFAoTkVUSUZfTVNHX0xJTkssICI4NzI3IFJYX0FMQVJNX1NUQVRVUyAweCV4XG4iLAotCQkgcnhfYWxhcm1fc3RhdHVzKTsKLQkvKiBObyBuZWVkIHRvIGNoZWNrIGxpbmsgc3RhdHVzIGluIGNhc2Ugb2YKLQltb2R1bGUgcGx1Z2dlZCBpbi9vdXQgKi8KLX0KLQotCi1zdGF0aWMgdTggYm54MnhfZXh0X3BoeV9pc19saW5rX3VwKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAotCQkJCSBzdHJ1Y3QgbGlua192YXJzICp2YXJzLAotCQkJCSB1OCBpc19taV9pbnQpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTMyIGV4dF9waHlfdHlwZTsKLQl1OCBleHRfcGh5X2FkZHI7Ci0JdTE2IHZhbDEgPSAwLCB2YWwyOwotCXUxNiByeF9zZCwgcGNzX3N0YXR1czsKLQl1OCBleHRfcGh5X2xpbmtfdXAgPSAwOwotCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7Ci0KLQlpZiAodmFycy0+cGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRykgewotCQlleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQkJZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7Ci0JCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7Ci0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUOgotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIERpcmVjdFxuIik7Ci0JCQlleHRfcGh5X2xpbmtfdXAgPSAxOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1OgotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDg3MDVcbiIpOwotCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19XSVNfREVWQUQsCi0JCQkJICAgICAgTURJT19XSVNfUkVHX0xBU0lfU1RBVFVTLCAmdmFsMSk7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIjg3MDUgTEFTSSBzdGF0dXMgMHgleFxuIiwgdmFsMSk7Ci0KLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fV0lTX0RFVkFELAotCQkJCSAgICAgIE1ESU9fV0lTX1JFR19MQVNJX1NUQVRVUywgJnZhbDEpOwotCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzA1IExBU0kgc3RhdHVzIDB4JXhcbiIsIHZhbDEpOwotCi0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICBNRElPX1BNQV9SRUdfUlhfU0QsICZyeF9zZCk7Ci0KLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIDEsCi0JCQkJICAgICAgMHhjODA5LCAmdmFsMSk7Ci0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICAxLAotCQkJCSAgICAgIDB4YzgwOSwgJnZhbDEpOwotCi0JCQlEUChORVRJRl9NU0dfTElOSywgIjg3MDUgMS5jODA5IHZhbD0weCV4XG4iLCB2YWwxKTsKLQkJCWV4dF9waHlfbGlua191cCA9ICgocnhfc2QgJiAweDEpICYmICh2YWwxICYgKDE8PDkpKSAmJgotCQkJCQkgICAoKHZhbDEgJiAoMTw8OCkpID09IDApKTsKLQkJCWlmIChleHRfcGh5X2xpbmtfdXApCi0JCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgODcwNi84NzI2XG4iKTsKLQkJCS8qIENsZWFyIFJYIEFsYXJtKi8KLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELCBNRElPX1BNQV9SRUdfUlhfQUxBUk0sCi0JCQkJICAgICAgJnZhbDIpOwotCQkJLyogY2xlYXIgTEFTSSBpbmRpY2F0aW9uKi8KLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELCBNRElPX1BNQV9SRUdfTEFTSV9TVEFUVVMsCi0JCQkJICAgICAgJnZhbDEpOwotCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19QTUFfREVWQUQsIE1ESU9fUE1BX1JFR19MQVNJX1NUQVRVUywKLQkJCQkgICAgICAmdmFsMik7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIjg3MDYvODcyNiBMQVNJIHN0YXR1cyAweCV4LS0+IgotCQkJCSAgICAgIjB4JXhcbiIsIHZhbDEsIHZhbDIpOwotCi0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwgTURJT19QTUFfUkVHX1JYX1NELAotCQkJCSAgICAgICZyeF9zZCk7Ci0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1BDU19ERVZBRCwgTURJT19QQ1NfUkVHX1NUQVRVUywKLQkJCQkgICAgICAmcGNzX3N0YXR1cyk7Ci0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX0FOX0RFVkFELCBNRElPX0FOX1JFR19MSU5LX1NUQVRVUywKLQkJCQkgICAgICAmdmFsMik7Ci0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX0FOX0RFVkFELCBNRElPX0FOX1JFR19MSU5LX1NUQVRVUywKLQkJCQkgICAgICAmdmFsMik7Ci0KLQkJCURQKE5FVElGX01TR19MSU5LLCAiODcwNi84NzI2IHJ4X3NkIDB4JXgiCi0JCQkgICAiICBwY3Nfc3RhdHVzIDB4JXggMUdicHMgbGlua19zdGF0dXMgMHgleFxuIiwKLQkJCSAgIHJ4X3NkLCBwY3Nfc3RhdHVzLCB2YWwyKTsKLQkJCS8qIGxpbmsgaXMgdXAgaWYgYm90aCBiaXQgMCBvZiBwbWRfcnhfc2QgYW5kCi0JCQkgKiBiaXQgMCBvZiBwY3Nfc3RhdHVzIGFyZSBzZXQsIG9yIGlmIHRoZSBhdXRvbmVnIGJpdAotCQkJICAgMSBpcyBzZXQKLQkJCSAqLwotCQkJZXh0X3BoeV9saW5rX3VwID0gKChyeF9zZCAmIHBjc19zdGF0dXMgJiAweDEpIHx8Ci0JCQkJCSAgICh2YWwyICYgKDE8PDEpKSk7Ci0JCQlpZiAoZXh0X3BoeV9saW5rX3VwKSB7Ci0JCQkJaWYgKGV4dF9waHlfdHlwZSA9PQotCQkJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNikgewotCQkJCQkvKiBJZiB0cmFuc21pdHRlciBpcyBkaXNhYmxlZCwKLQkJCQkJaWdub3JlIGZhbHNlIGxpbmsgdXAgaW5kaWNhdGlvbiAqLwotCQkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJCSAgIGV4dF9waHlfdHlwZSwKLQkJCQkJCSAgIGV4dF9waHlfYWRkciwKLQkJCQkJCSAgIE1ESU9fUE1BX0RFVkFELAotCQkJCQkJICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLAotCQkJCQkJICAgJnZhbDEpOwotCQkJCQlpZiAodmFsMSAmICgxPDwxNSkpIHsKLQkJCQkJCURQKE5FVElGX01TR19MSU5LLCAiVHggaXMgIgotCQkJCQkJCSAgICAiZGlzYWJsZWRcbiIpOwotCQkJCQkJZXh0X3BoeV9saW5rX3VwID0gMDsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfQotCQkJCWlmICh2YWwyICYgKDE8PDEpKQotCQkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDsKLQkJCQllbHNlCi0JCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwMDsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNzoKLQkJewotCQkJdTE2IGxpbmtfc3RhdHVzID0gMDsKLQkJCXUxNiByeF9hbGFybV9zdGF0dXM7Ci0JCQkvKiBDaGVjayB0aGUgTEFTSSAqLwotCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICBNRElPX1BNQV9SRUdfUlhfQUxBUk0sICZyeF9hbGFybV9zdGF0dXMpOwotCi0JCQlEUChORVRJRl9NU0dfTElOSywgIjg3MjcgUlhfQUxBUk1fU1RBVFVTIDB4JXhcbiIsCi0JCQkJIHJ4X2FsYXJtX3N0YXR1cyk7Ci0KLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgTURJT19QTUFfUkVHX0xBU0lfU1RBVFVTLCAmdmFsMSk7Ci0KLQkJCURQKE5FVElGX01TR19MSU5LLAotCQkJCSAiODcyNyBMQVNJIHN0YXR1cyAweCV4XG4iLAotCQkJCSB2YWwxKTsKLQotCQkJLyogQ2xlYXIgTVNHLU9VVCAqLwotCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICBNRElPX1BNQV9SRUdfTTgwNTFfTVNHT1VUX1JFRywKLQkJCQkgICAgICAmdmFsMSk7Ci0KLQkJCS8qCi0JCQkgKiBJZiBhIG1vZHVsZSBpcyBwcmVzZW50IGFuZCB0aGVyZSBpcyBuZWVkIHRvIGNoZWNrCi0JCQkgKiBmb3Igb3ZlciBjdXJyZW50Ci0JCQkgKi8KLQkJCWlmICghKHBhcmFtcy0+ZmVhdHVyZV9jb25maWdfZmxhZ3MgJgotCQkJICAgICAgRkVBVFVSRV9DT05GSUdfQkNNODcyN19OT0MpICYmCi0JCQkgICAgIShyeF9hbGFybV9zdGF0dXMgJiAoMTw8NSkpKSB7Ci0JCQkJLyogQ2hlY2sgb3Zlci1jdXJyZW50IHVzaW5nIDg3MjcgR1BJTzAgaW5wdXQqLwotCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJCSAgICAgIE1ESU9fUE1BX1JFR184NzI3X0dQSU9fQ1RSTCwKLQkJCQkJICAgICAgJnZhbDEpOwotCi0JCQkJaWYgKCh2YWwxICYgKDE8PDgpKSA9PSAwKSB7Ci0JCQkJCURQKE5FVElGX01TR19MSU5LLCAiODcyNyBQb3dlciBmYXVsdCIKLQkJCQkJCSAgICAgIiBoYXMgYmVlbiBkZXRlY3RlZCBvbiAiCi0JCQkJCQkgICAgICJwb3J0ICVkXG4iLAotCQkJCQkJIHBhcmFtcy0+cG9ydCk7Ci0JCQkJCW5ldGRldl9lcnIoYnAtPmRldiwgIkVycm9yOiAgUG93ZXIgZmF1bHQgb24gUG9ydCAlZCBoYXMgYmVlbiBkZXRlY3RlZCBhbmQgdGhlIHBvd2VyIHRvIHRoYXQgU0ZQKyBtb2R1bGUgaGFzIGJlZW4gcmVtb3ZlZCB0byBwcmV2ZW50IGZhaWx1cmUgb2YgdGhlIGNhcmQuIFBsZWFzZSByZW1vdmUgdGhlIFNGUCsgbW9kdWxlIGFuZCByZXN0YXJ0IHRoZSBzeXN0ZW0gdG8gY2xlYXIgdGhpcyBlcnJvci5cbiIsCi0JCQkJCQkgICBwYXJhbXMtPnBvcnQpOwotCQkJCQkvKgotCQkJCQkgKiBEaXNhYmxlIGFsbCBSWF9BTEFSTXMgZXhjZXB0IGZvcgotCQkJCQkgKiBtb2RfYWJzCi0JCQkJCSAqLwotCQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCQkgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkJCSAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkJICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkJCSAgICAgTURJT19QTUFfUkVHX1JYX0FMQVJNX0NUUkwsCi0JCQkJCQkgICAgICgxPDw1KSk7Ci0KLQkJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCQkgICAgZXh0X3BoeV90eXBlLAotCQkJCQkJICAgIGV4dF9waHlfYWRkciwKLQkJCQkJCSAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkJCSAgICBNRElPX1BNQV9SRUdfUEhZX0lERU5USUZJRVIsCi0JCQkJCQkgICAgJnZhbDEpOwotCQkJCQkvKiBXYWl0IGZvciBtb2R1bGVfYWJzZW50X2V2ZW50ICovCi0JCQkJCXZhbDEgfD0gKDE8PDgpOwotCQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCQkgICAgZXh0X3BoeV90eXBlLAotCQkJCQkJICAgIGV4dF9waHlfYWRkciwKLQkJCQkJCSAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkJCSAgICBNRElPX1BNQV9SRUdfUEhZX0lERU5USUZJRVIsCi0JCQkJCQkgICAgdmFsMSk7Ci0JCQkJCS8qIENsZWFyIFJYIGFsYXJtICovCi0JCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJCQkgICAgICBNRElPX1BNQV9SRUdfUlhfQUxBUk0sCi0JCQkJCQkgICAgICAmcnhfYWxhcm1fc3RhdHVzKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfSAvKiBPdmVyIGN1cnJlbnQgY2hlY2sgKi8KLQotCQkJLyogV2hlbiBtb2R1bGUgYWJzZW50IGJpdCBpcyBzZXQsIGNoZWNrIG1vZHVsZSAqLwotCQkJaWYgKHJ4X2FsYXJtX3N0YXR1cyAmICgxPDw1KSkgewotCQkJCWJueDJ4Xzg3MjdfaGFuZGxlX21vZF9hYnMocGFyYW1zKTsKLQkJCQkvKiBFbmFibGUgYWxsIG1vZF9hYnMgYW5kIGxpbmsgZGV0ZWN0aW9uIGJpdHMgKi8KLQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkJICAgICAgIE1ESU9fUE1BX1JFR19SWF9BTEFSTV9DVFJMLAotCQkJCQkgICAgICAgKCgxPDw1KSB8ICgxPDwyKSkpOwotCQkJfQotCi0JCQkvKiBJZiB0cmFuc21pdHRlciBpcyBkaXNhYmxlZCwKLQkJCWlnbm9yZSBmYWxzZSBsaW5rIHVwIGluZGljYXRpb24gKi8KLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLAotCQkJCSAgICAgICZ2YWwxKTsKLQkJCWlmICh2YWwxICYgKDE8PDE1KSkgewotCQkJCURQKE5FVElGX01TR19MSU5LLCAiVHggaXMgZGlzYWJsZWRcbiIpOwotCQkJCWV4dF9waHlfbGlua191cCA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgTURJT19QTUFfUkVHXzgwNzNfU1BFRURfTElOS19TVEFUVVMsCi0JCQkJICAgICAgJmxpbmtfc3RhdHVzKTsKLQotCQkJLyogQml0cyAwLi4yIC0tPiBzcGVlZCBkZXRlY3RlZCwKLQkJCSAgIGJpdHMgMTMuLjE1LS0+IGxpbmsgaXMgZG93biAqLwotCQkJaWYgKChsaW5rX3N0YXR1cyAmICgxPDwyKSkgJiYKLQkJCSAgICAoIShsaW5rX3N0YXR1cyAmICgxPDwxNSkpKSkgewotCQkJCWV4dF9waHlfbGlua191cCA9IDE7Ci0JCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOwotCQkJfSBlbHNlIGlmICgobGlua19zdGF0dXMgJiAoMTw8MCkpICYmCi0JCQkJICAgKCEobGlua19zdGF0dXMgJiAoMTw8MTMpKSkpIHsKLQkJCQlleHRfcGh5X2xpbmtfdXAgPSAxOwotCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwOwotCQkJCURQKE5FVElGX01TR19MSU5LLAotCQkJCQkgInBvcnQgJXg6IEV4dGVybmFsIGxpbmsiCi0JCQkJCSAiIHVwIGluIDFHXG4iLCBwYXJhbXMtPnBvcnQpOwotCQkJfSBlbHNlIHsKLQkJCQlleHRfcGh5X2xpbmtfdXAgPSAwOwotCQkJCURQKE5FVElGX01TR19MSU5LLAotCQkJCQkgInBvcnQgJXg6IEV4dGVybmFsIGxpbmsiCi0JCQkJCSAiIGlzIGRvd25cbiIsIHBhcmFtcy0+cG9ydCk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCi0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgotCQl7Ci0JCQl1MTYgbGlua19zdGF0dXMgPSAwOwotCQkJdTE2IGFuMTAwMF9zdGF0dXMgPSAwOwotCi0JCQlpZiAoZXh0X3BoeV90eXBlID09Ci0JCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzIpIHsKLQkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUENTX0RFVkFELAotCQkJCSAgICAgIE1ESU9fUENTX1JFR19MQVNJX1NUQVRVUywgJnZhbDEpOwotCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1BDU19ERVZBRCwKLQkJCQkgICAgICBNRElPX1BDU19SRUdfTEFTSV9TVEFUVVMsICZ2YWwyKTsKLQkJCURQKE5FVElGX01TR19MSU5LLAotCQkJCSAiODcweCBMQVNJIHN0YXR1cyAweCV4LT4weCV4XG4iLAotCQkJCSAgdmFsMSwgdmFsMik7Ci0JCQl9IGVsc2UgewotCQkJCS8qIEluIDgwNzMsIHBvcnQxIGlzIGRpcmVjdGVkIHRocm91Z2ggZW1hYzAgYW5kCi0JCQkJICogcG9ydDAgaXMgZGlyZWN0ZWQgdGhyb3VnaCBlbWFjMQotCQkJCSAqLwotCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJCSAgICAgIE1ESU9fUE1BX1JFR19MQVNJX1NUQVRVUywgJnZhbDEpOwotCi0JCQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkJCSAiODcwMyBMQVNJIHN0YXR1cyAweCV4XG4iLAotCQkJCQkgIHZhbDEpOwotCQkJfQotCi0JCQkvKiBjbGVhciB0aGUgaW50ZXJydXB0IExBU0kgc3RhdHVzIHJlZ2lzdGVyICovCi0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUENTX0RFVkFELAotCQkJCSAgICAgIE1ESU9fUENTX1JFR19TVEFUVVMsICZ2YWwyKTsKLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19QQ1NfREVWQUQsCi0JCQkJICAgICAgTURJT19QQ1NfUkVHX1NUQVRVUywgJnZhbDEpOwotCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4MDd4IFBDUyBzdGF0dXMgMHgleC0+MHgleFxuIiwKLQkJCSAgIHZhbDIsIHZhbDEpOwotCQkJLyogQ2xlYXIgTVNHLU9VVCAqLwotCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICBNRElPX1BNQV9SRUdfTTgwNTFfTVNHT1VUX1JFRywKLQkJCQkgICAgICAmdmFsMSk7Ci0KLQkJCS8qIENoZWNrIHRoZSBMQVNJICovCi0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCSAgICAgIE1ESU9fUE1BX1JFR19SWF9BTEFSTSwgJnZhbDIpOwotCi0JCQlEUChORVRJRl9NU0dfTElOSywgIktSIDB4OTAwMyAweCV4XG4iLCB2YWwyKTsKLQotCQkJLyogQ2hlY2sgdGhlIGxpbmsgc3RhdHVzICovCi0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUENTX0RFVkFELAotCQkJCSAgICAgIE1ESU9fUENTX1JFR19TVEFUVVMsICZ2YWwyKTsKLQkJCURQKE5FVElGX01TR19MSU5LLCAiS1IgUENTIHN0YXR1cyAweCV4XG4iLCB2YWwyKTsKLQotCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICBNRElPX1BNQV9SRUdfU1RBVFVTLCAmdmFsMik7Ci0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCSAgICAgIE1ESU9fUE1BX1JFR19TVEFUVVMsICZ2YWwxKTsKLQkJCWV4dF9waHlfbGlua191cCA9ICgodmFsMSAmIDQpID09IDQpOwotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJQTUFfUkVHX1NUQVRVUz0weCV4XG4iLCB2YWwxKTsKLQkJCWlmIChleHRfcGh5X3R5cGUgPT0KLQkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczKSB7Ci0KLQkJCQlpZiAoZXh0X3BoeV9saW5rX3VwICYmCi0JCQkJICAgICgocGFyYW1zLT5yZXFfbGluZV9zcGVlZCAhPQotCQkJCQlTUEVFRF8xMDAwMCkpKSB7Ci0JCQkJCWlmIChibngyeF9iY204MDczX3hhdWlfd2EocGFyYW1zKQotCQkJCQkgICAgICE9IDApIHsKLQkJCQkJCWV4dF9waHlfbGlua191cCA9IDA7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJCSAgICAgIE1ESU9fQU5fUkVHX0xJTktfU1RBVFVTLAotCQkJCQkgICAgICAmYW4xMDAwX3N0YXR1cyk7Ci0JCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAotCQkJCQkgICAgICBNRElPX0FOX1JFR19MSU5LX1NUQVRVUywKLQkJCQkJICAgICAgJmFuMTAwMF9zdGF0dXMpOwotCi0JCQkJLyogQ2hlY2sgdGhlIGxpbmsgc3RhdHVzIG9uIDEuMS4yICovCi0JCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkJICAgICAgTURJT19QTUFfUkVHX1NUQVRVUywgJnZhbDIpOwotCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJCSAgICAgIE1ESU9fUE1BX1JFR19TVEFUVVMsICZ2YWwxKTsKLQkJCQlEUChORVRJRl9NU0dfTElOSywgIktSIFBNQSBzdGF0dXMgMHgleC0+MHgleCwiCi0JCQkJCSAgICAgImFuX2xpbmtfc3RhdHVzPTB4JXhcbiIsCi0JCQkJCSAgdmFsMiwgdmFsMSwgYW4xMDAwX3N0YXR1cyk7Ci0KLQkJCQlleHRfcGh5X2xpbmtfdXAgPSAoKCh2YWwxICYgNCkgPT0gNCkgfHwKLQkJCQkJCShhbjEwMDBfc3RhdHVzICYgKDE8PDEpKSk7Ci0JCQkJaWYgKGV4dF9waHlfbGlua191cCAmJgotCQkJCSAgICBibngyeF84MDczX2lzX3Nucl9uZWVkZWQocGFyYW1zKSkgewotCQkJCQkvKiBUaGUgU05SIHdpbGwgaW1wcm92ZSBhYm91dCAyZGJieQotCQkJCQljaGFuZ2luZyB0aGUgQlcgYW5kIEZFRSBtYWluIHRhcC4qLwotCi0JCQkJCS8qIFRoZSAxc3Qgd3JpdGUgdG8gY2hhbmdlIEZGRSBtYWluCi0JCQkJCXRhcCBpcyBzZXQgYmVmb3JlIHJlc3RhcnQgQU4gKi8KLQkJCQkJLyogQ2hhbmdlIFBMTCBCYW5kd2lkdGggaW4gRURDCi0JCQkJCXJlZ2lzdGVyICovCi0JCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwKLQkJCQkJCSAgICBleHRfcGh5X2FkZHIsCi0JCQkJCQkgICAgTURJT19QTUFfREVWQUQsCi0JCQkJCQkgICAgTURJT19QTUFfUkVHX1BMTF9CQU5EV0lEVEgsCi0JCQkJCQkgICAgMHgyNkJDKTsKLQotCQkJCQkvKiBDaGFuZ2UgQ0RSIEJhbmR3aWR0aCBpbiBFREMKLQkJCQkJcmVnaXN0ZXIgKi8KLQkJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLAotCQkJCQkJICAgIGV4dF9waHlfYWRkciwKLQkJCQkJCSAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkJCSAgICBNRElPX1BNQV9SRUdfQ0RSX0JBTkRXSURUSCwKLQkJCQkJCSAgICAweDAzMzMpOwotCQkJCX0KLQkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJICAgZXh0X3BoeV90eXBlLAotCQkJCQkgICBleHRfcGh5X2FkZHIsCi0JCQkJCSAgIE1ESU9fUE1BX0RFVkFELAotCQkJCQkgICBNRElPX1BNQV9SRUdfODA3M19TUEVFRF9MSU5LX1NUQVRVUywKLQkJCQkJICAgJmxpbmtfc3RhdHVzKTsKLQotCQkJCS8qIEJpdHMgMC4uMiAtLT4gc3BlZWQgZGV0ZWN0ZWQsCi0JCQkJICAgYml0cyAxMy4uMTUtLT4gbGluayBpcyBkb3duICovCi0JCQkJaWYgKChsaW5rX3N0YXR1cyAmICgxPDwyKSkgJiYKLQkJCQkgICAgKCEobGlua19zdGF0dXMgJiAoMTw8MTUpKSkpIHsKLQkJCQkJZXh0X3BoeV9saW5rX3VwID0gMTsKLQkJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOwotCQkJCQlEUChORVRJRl9NU0dfTElOSywKLQkJCQkJCSAicG9ydCAleDogRXh0ZXJuYWwgbGluayIKLQkJCQkJCSAiIHVwIGluIDEwR1xuIiwgcGFyYW1zLT5wb3J0KTsKLQkJCQl9IGVsc2UgaWYgKChsaW5rX3N0YXR1cyAmICgxPDwxKSkgJiYKLQkJCQkJICAgKCEobGlua19zdGF0dXMgJiAoMTw8MTQpKSkpIHsKLQkJCQkJZXh0X3BoeV9saW5rX3VwID0gMTsKLQkJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzI1MDA7Ci0JCQkJCURQKE5FVElGX01TR19MSU5LLAotCQkJCQkJICJwb3J0ICV4OiBFeHRlcm5hbCBsaW5rIgotCQkJCQkJICIgdXAgaW4gMi41R1xuIiwgcGFyYW1zLT5wb3J0KTsKLQkJCQl9IGVsc2UgaWYgKChsaW5rX3N0YXR1cyAmICgxPDwwKSkgJiYKLQkJCQkJICAgKCEobGlua19zdGF0dXMgJiAoMTw8MTMpKSkpIHsKLQkJCQkJZXh0X3BoeV9saW5rX3VwID0gMTsKLQkJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDA7Ci0JCQkJCURQKE5FVElGX01TR19MSU5LLAotCQkJCQkJICJwb3J0ICV4OiBFeHRlcm5hbCBsaW5rIgotCQkJCQkJICIgdXAgaW4gMUdcbiIsIHBhcmFtcy0+cG9ydCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJZXh0X3BoeV9saW5rX3VwID0gMDsKLQkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkJCQkgInBvcnQgJXg6IEV4dGVybmFsIGxpbmsiCi0JCQkJCQkgIiBpcyBkb3duXG4iLCBwYXJhbXMtPnBvcnQpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJLyogU2VlIGlmIDFHIGxpbmsgaXMgdXAgZm9yIHRoZSA4MDcyICovCi0JCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAotCQkJCQkgICAgICBNRElPX0FOX1JFR19MSU5LX1NUQVRVUywKLQkJCQkJICAgICAgJmFuMTAwMF9zdGF0dXMpOwotCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKLQkJCQkJICAgICAgTURJT19BTl9SRUdfTElOS19TVEFUVVMsCi0JCQkJCSAgICAgICZhbjEwMDBfc3RhdHVzKTsKLQkJCQlpZiAoYW4xMDAwX3N0YXR1cyAmICgxPDwxKSkgewotCQkJCQlleHRfcGh5X2xpbmtfdXAgPSAxOwotCQkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDsKLQkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkJCQkgInBvcnQgJXg6IEV4dGVybmFsIGxpbmsiCi0JCQkJCQkgIiB1cCBpbiAxR1xuIiwgcGFyYW1zLT5wb3J0KTsKLQkJCQl9IGVsc2UgaWYgKGV4dF9waHlfbGlua191cCkgewotCQkJCQlleHRfcGh5X2xpbmtfdXAgPSAxOwotCQkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDA7Ci0JCQkJCURQKE5FVElGX01TR19MSU5LLAotCQkJCQkJICJwb3J0ICV4OiBFeHRlcm5hbCBsaW5rIgotCQkJCQkJICIgdXAgaW4gMTBHXG4iLCBwYXJhbXMtPnBvcnQpOwotCQkJCX0KLQkJCX0KLQotCi0JCQlicmVhazsKLQkJfQotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6Ci0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICBNRElPX1BNQV9SRUdfTEFTSV9TVEFUVVMsICZ2YWwyKTsKLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCSAgICAgIE1ESU9fUE1BX1JFR19MQVNJX1NUQVRVUywgJnZhbDEpOwotCQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkJICIxMEctYmFzZS1UIExBU0kgc3RhdHVzIDB4JXgtPjB4JXhcbiIsCi0JCQkJICB2YWwyLCB2YWwxKTsKLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCSAgICAgIE1ESU9fUE1BX1JFR19TVEFUVVMsICZ2YWwyKTsKLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCSAgICAgIE1ESU9fUE1BX1JFR19TVEFUVVMsICZ2YWwxKTsKLQkJCURQKE5FVElGX01TR19MSU5LLAotCQkJCSAiMTBHLWJhc2UtVCBQTUEgc3RhdHVzIDB4JXgtPjB4JXhcbiIsCi0JCQkJIHZhbDIsIHZhbDEpOwotCQkJZXh0X3BoeV9saW5rX3VwID0gKCh2YWwxICYgNCkgPT0gNCk7Ci0JCQkvKiBpZiBsaW5rIGlzIHVwCi0JCQkgKiBwcmludCB0aGUgQU4gb3V0Y29tZSBvZiB0aGUgU0ZYNzEwMSBQSFkKLQkJCSAqLwotCQkJaWYgKGV4dF9waHlfbGlua191cCkgewotCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKLQkJCQkJICAgICAgTURJT19BTl9SRUdfTUFTVEVSX1NUQVRVUywKLQkJCQkJICAgICAgJnZhbDIpOwotCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwMDsKLQkJCQlEUChORVRJRl9NU0dfTElOSywKLQkJCQkJICJTRlg3MTAxIEFOIHN0YXR1cyAweCV4LT5NYXN0ZXI9JXhcbiIsCi0JCQkJCSAgdmFsMiwKLQkJCQkJICh2YWwyICYgKDE8PDE0KSkpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MToKLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgyMzoKLQkJCS8qIENoZWNrIDEwRy1CYXNlVCBsaW5rIHN0YXR1cyAqLwotCQkJLyogQ2hlY2sgUE1EIHNpZ25hbCBvayAqLwotCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKLQkJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJCQkgICAgICAweEZGRkEsCi0JCQkJCQkgICAgICAmdmFsMSk7Ci0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICBNRElPX1BNQV9SRUdfODQ4MV9QTURfU0lHTkFMLAotCQkJCSAgICAgICZ2YWwyKTsKLQkJCURQKE5FVElGX01TR19MSU5LLCAiUE1EX1NJR05BTCAxLmE4MTEgPSAweCV4XG4iLCB2YWwyKTsKLQotCQkJLyogQ2hlY2sgbGluayAxMEcgKi8KLQkJCWlmICh2YWwyICYgKDE8PDExKSkgewotCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwMDsKLQkJCQlleHRfcGh5X2xpbmtfdXAgPSAxOwotCQkJCWJueDJ4Xzg0ODFfc2V0XzEwR19sZWRfbW9kZShwYXJhbXMsCi0JCQkJCQkJICBleHRfcGh5X3R5cGUsCi0JCQkJCQkJICBleHRfcGh5X2FkZHIpOwotCQkJfSBlbHNlIHsgLyogQ2hlY2sgTGVnYWN5IHNwZWVkIGxpbmsgKi8KLQkJCQl1MTYgbGVnYWN5X3N0YXR1cywgbGVnYWN5X3NwZWVkOwotCi0JCQkJLyogRW5hYmxlIGV4cGFuc2lvbiByZWdpc3RlciAweDQyCi0JCQkJKE9wZXJhdGlvbiBtb2RlIHN0YXR1cykgKi8KLQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCSBleHRfcGh5X3R5cGUsCi0JCQkJCSBleHRfcGh5X2FkZHIsCi0JCQkJCSBNRElPX0FOX0RFVkFELAotCQkJCQkgTURJT19BTl9SRUdfODQ4MV9FWFBBTlNJT05fUkVHX0FDQ0VTUywKLQkJCQkJIDB4ZjQyKTsKLQotCQkJCS8qIEdldCBsZWdhY3kgc3BlZWQgb3BlcmF0aW9uIHN0YXR1cyAqLwotCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJCQkgIGV4dF9waHlfdHlwZSwKLQkJCQkJICBleHRfcGh5X2FkZHIsCi0JCQkJCSAgTURJT19BTl9ERVZBRCwKLQkJCQkJICBNRElPX0FOX1JFR184NDgxX0VYUEFOU0lPTl9SRUdfUkRfUlcsCi0JCQkJCSAgJmxlZ2FjeV9zdGF0dXMpOwotCi0JCQkJRFAoTkVUSUZfTVNHX0xJTkssICJMZWdhY3kgc3BlZWQgc3RhdHVzIgotCQkJCQkgICAgICIgPSAweCV4XG4iLCBsZWdhY3lfc3RhdHVzKTsKLQkJCQlleHRfcGh5X2xpbmtfdXAgPSAoKGxlZ2FjeV9zdGF0dXMgJiAoMTw8MTEpKQotCQkJCQkJICAgPT0gKDE8PDExKSk7Ci0JCQkJaWYgKGV4dF9waHlfbGlua191cCkgewotCQkJCQlsZWdhY3lfc3BlZWQgPSAobGVnYWN5X3N0YXR1cyAmICgzPDw5KSk7Ci0JCQkJCWlmIChsZWdhY3lfc3BlZWQgPT0gKDA8PDkpKQotCQkJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwOwotCQkJCQllbHNlIGlmIChsZWdhY3lfc3BlZWQgPT0gKDE8PDkpKQotCQkJCQkJdmFycy0+bGluZV9zcGVlZCA9Ci0JCQkJCQkJU1BFRURfMTAwOwotCQkJCQllbHNlIGlmIChsZWdhY3lfc3BlZWQgPT0gKDI8PDkpKQotCQkJCQkJdmFycy0+bGluZV9zcGVlZCA9Ci0JCQkJCQkJU1BFRURfMTAwMDsKLQkJCQkJZWxzZSAvKiBTaG91bGQgbm90IGhhcHBlbiAqLwotCQkJCQkJdmFycy0+bGluZV9zcGVlZCA9IDA7Ci0KLQkJCQkJaWYgKGxlZ2FjeV9zdGF0dXMgJiAoMTw8OCkpCi0JCQkJCQl2YXJzLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKLQkJCQkJZWxzZQotCQkJCQkJdmFycy0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7Ci0KLQkJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJMaW5rIGlzIHVwICIKLQkJCQkJCSAgICAgImluICVkTWJwcywgaXNfZHVwbGV4X2Z1bGwiCi0JCQkJCQkgICAgICI9ICVkXG4iLAotCQkJCQkJdmFycy0+bGluZV9zcGVlZCwKLQkJCQkJCSh2YXJzLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpKTsKLQkJCQkJYm54MnhfODQ4MV9zZXRfbGVnYWN5X2xlZF9tb2RlKHBhcmFtcywKLQkJCQkJCQkJIGV4dF9waHlfdHlwZSwKLQkJCQkJCQkJIGV4dF9waHlfYWRkcik7Ci0JCQkJfQotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIkJBRCBYR1hTIGV4dF9waHlfY29uZmlnIDB4JXhcbiIsCi0JCQkgICBwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQkJCWV4dF9waHlfbGlua191cCA9IDA7Ci0JCQlicmVhazsKLQkJfQotCQkvKiBTZXQgU0dNSUkgbW9kZSBmb3IgZXh0ZXJuYWwgcGh5ICovCi0JCWlmIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUKSB7Ci0JCQlpZiAodmFycy0+bGluZV9zcGVlZCA8IFNQRUVEXzEwMDApCi0JCQkJdmFycy0+cGh5X2ZsYWdzIHw9IFBIWV9TR01JSV9GTEFHOwotCQkJZWxzZQotCQkJCXZhcnMtPnBoeV9mbGFncyAmPSB+UEhZX1NHTUlJX0ZMQUc7Ci0JCX0KLQotCX0gZWxzZSB7IC8qIFNlckRlcyAqLwotCQlleHRfcGh5X3R5cGUgPSBTRVJERVNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwotCQlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgewotCQljYXNlIFBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX1RZUEVfRElSRUNUOgotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXJEZXMgRGlyZWN0XG4iKTsKLQkJCWV4dF9waHlfbGlua191cCA9IDE7Ci0JCQlicmVhazsKLQotCQljYXNlIFBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX1RZUEVfQkNNNTQ4MjoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiU2VyRGVzIDU0ODJcbiIpOwotCQkJZXh0X3BoeV9saW5rX3VwID0gMTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlEUChORVRJRl9NU0dfTElOSywKLQkJCQkgIkJBRCBTZXJEZXMgZXh0X3BoeV9jb25maWcgMHgleFxuIiwKLQkJCQkgcGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7Ci0JCQlleHRfcGh5X2xpbmtfdXAgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gZXh0X3BoeV9saW5rX3VwOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9saW5rX2ludF9lbmFibGUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCi17Ci0JdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKLQl1MzIgZXh0X3BoeV90eXBlOwotCXUzMiBtYXNrOwotCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCi0JLyogc2V0dGluZyB0aGUgc3RhdHVzIHRvIHJlcG9ydCBvbiBsaW5rIHVwCi0JICAgZm9yIGVpdGhlciBYR1hTIG9yIFNlckRlcyAqLwotCi0JaWYgKHBhcmFtcy0+c3dpdGNoX2NmZyA9PSBTV0lUQ0hfQ0ZHXzEwRykgewotCQltYXNrID0gKE5JR19NQVNLX1hHWFMwX0xJTksxMEcgfAotCQkJTklHX01BU0tfWEdYUzBfTElOS19TVEFUVVMpOwotCQlEUChORVRJRl9NU0dfTElOSywgImVuYWJsZWQgWEdYUyBpbnRlcnJ1cHRcbiIpOwotCQlleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQkJaWYgKChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUKSAmJgotCQkgICAgKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9GQUlMVVJFKSAmJgotCQkgICAgKGV4dF9waHlfdHlwZSAhPQotCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX05PVF9DT05OKSkgewotCQkJbWFzayB8PSBOSUdfTUFTS19NSV9JTlQ7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgImVuYWJsZWQgZXh0ZXJuYWwgcGh5IGludFxuIik7Ci0JCX0KLQotCX0gZWxzZSB7IC8qIFNlckRlcyAqLwotCQltYXNrID0gTklHX01BU0tfU0VSREVTMF9MSU5LX1NUQVRVUzsKLQkJRFAoTkVUSUZfTVNHX0xJTkssICJlbmFibGVkIFNlckRlcyBpbnRlcnJ1cHRcbiIpOwotCQlleHRfcGh5X3R5cGUgPSBTRVJERVNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwotCQlpZiAoKGV4dF9waHlfdHlwZSAhPQotCQkJCVBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX1RZUEVfRElSRUNUKSAmJgotCQkgICAgKGV4dF9waHlfdHlwZSAhPQotCQkJCVBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX1RZUEVfTk9UX0NPTk4pKSB7Ci0JCQltYXNrIHw9IE5JR19NQVNLX01JX0lOVDsKLQkJCURQKE5FVElGX01TR19MSU5LLCAiZW5hYmxlZCBleHRlcm5hbCBwaHkgaW50XG4iKTsKLQkJfQotCX0KLQlibngyeF9iaXRzX2VuKGJwLAotCQkgICAgICBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0LAotCQkgICAgICBtYXNrKTsKLQotCURQKE5FVElGX01TR19MSU5LLCAicG9ydCAleCwgaXNfeGd4cyAleCwgaW50X3N0YXR1cyAweCV4XG4iLCBwb3J0LAotCQkgKHBhcmFtcy0+c3dpdGNoX2NmZyA9PSBTV0lUQ0hfQ0ZHXzEwRyksCi0JCSBSRUdfUkQoYnAsIE5JR19SRUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCkpOwotCURQKE5FVElGX01TR19MSU5LLCAiIGludF9tYXNrIDB4JXgsIE1JX0lOVCAleCwgU0VSREVTX0xJTksgJXhcbiIsCi0JCSBSRUdfUkQoYnAsIE5JR19SRUdfTUFTS19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQpLAotCQkgUkVHX1JEKGJwLCBOSUdfUkVHX0VNQUMwX1NUQVRVU19NSVNDX01JX0lOVCArIHBvcnQqMHgxOCksCi0JCSBSRUdfUkQoYnAsIE5JR19SRUdfU0VSREVTMF9TVEFUVVNfTElOS19TVEFUVVMrcG9ydCoweDNjKSk7Ci0JRFAoTkVUSUZfTVNHX0xJTkssICIgMTBHICV4LCBYR1hTX0xJTksgJXhcbiIsCi0JICAgUkVHX1JEKGJwLCBOSUdfUkVHX1hHWFMwX1NUQVRVU19MSU5LMTBHICsgcG9ydCoweDY4KSwKLQkgICBSRUdfUkQoYnAsIE5JR19SRUdfWEdYUzBfU1RBVFVTX0xJTktfU1RBVFVTICsgcG9ydCoweDY4KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4Xzg0ODFfcmVhcm1fbGF0Y2hfc2lnbmFsKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsCi0JCQkJCXU4IGlzX21pX2ludCkKLXsKLQl1MzIgbGF0Y2hfc3RhdHVzID0gMCwgaXNfbWlfaW50X3N0YXR1czsKLQkvKiBEaXNhYmxlIHRoZSBNSSBJTlQgKCBleHRlcm5hbCBwaHkgaW50ICkKLQkgKiBieSB3cml0aW5nIDEgdG8gdGhlIHN0YXR1cyByZWdpc3Rlci4gTGluayBkb3duIGluZGljYXRpb24KLQkgKiBpcyBoaWdoLWFjdGl2ZS1zaWduYWwsIHNvIGluIHRoaXMgY2FzZSB3ZSBuZWVkIHRvIHdyaXRlIHRoZQotCSAqIHN0YXR1cyB0byBjbGVhciB0aGUgWE9SCi0JICovCi0JLyogUmVhZCBMYXRjaGVkIHNpZ25hbHMgKi8KLQlsYXRjaF9zdGF0dXMgPSBSRUdfUkQoYnAsCi0JCQkJICBOSUdfUkVHX0xBVENIX1NUQVRVU18wICsgcG9ydCo4KTsKLQlpc19taV9pbnRfc3RhdHVzID0gUkVHX1JEKGJwLAotCQkJCSAgTklHX1JFR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0KTsKLQlEUChORVRJRl9NU0dfTElOSywgIm9yaWdpbmFsX3NpZ25hbCA9IDB4JXgsIG5pZ19zdGF0dXMgPSAweCV4LCIKLQkJICAgICAibGF0Y2hfc3RhdHVzID0gMHgleFxuIiwKLQkJIGlzX21pX2ludCwgaXNfbWlfaW50X3N0YXR1cywgbGF0Y2hfc3RhdHVzKTsKLQkvKiBIYW5kbGUgb25seSB0aG9zZSB3aXRoIGxhdGNoZWQtc2lnbmFsPXVwLiovCi0JaWYgKGxhdGNoX3N0YXR1cyAmIDEpIHsKLQkJLyogRm9yIGFsbCBsYXRjaGVkLXNpZ25hbD11cCxXcml0ZSBvcmlnaW5hbF9zaWduYWwgdG8gc3RhdHVzICovCi0JCWlmIChpc19taV9pbnQpCi0JCQlibngyeF9iaXRzX2VuKGJwLAotCQkJCSAgICBOSUdfUkVHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDAKLQkJCQkgICAgKyBwb3J0KjQsCi0JCQkJICAgIE5JR19TVEFUVVNfRU1BQzBfTUlfSU5UKTsKLQkJZWxzZQotCQkJYm54MnhfYml0c19kaXMoYnAsCi0JCQkJICAgICBOSUdfUkVHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDAKLQkJCQkgICAgICsgcG9ydCo0LAotCQkJCSAgICAgTklHX1NUQVRVU19FTUFDMF9NSV9JTlQpOwotCQkvKiBGb3IgYWxsIGxhdGNoZWQtc2lnbmFsPXVwIDogUmUtQXJtIExhdGNoIHNpZ25hbHMgKi8KLQkJUkVHX1dSKGJwLCBOSUdfUkVHX0xBVENIX1NUQVRVU18wICsgcG9ydCo4LAotCQkJICAgKGxhdGNoX3N0YXR1cyAmIDB4ZmZmZSkgfCAobGF0Y2hfc3RhdHVzICYgMSkpOwotCX0KLX0KLS8qCi0gKiBsaW5rIG1hbmFnZW1lbnQKLSAqLwotc3RhdGljIHZvaWQgYm54MnhfbGlua19pbnRfYWNrKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAotCQkJICAgICBzdHJ1Y3QgbGlua192YXJzICp2YXJzLCB1OCBpc18xMGcsCi0JCQkgICAgIHU4IGlzX21pX2ludCkKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKLQl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OwotCi0JLyogZmlyc3QgcmVzZXQgYWxsIHN0YXR1cwotCSAqIHdlIGFzc3VtZSBvbmx5IG9uZSBsaW5lIHdpbGwgYmUgY2hhbmdlIGF0IGEgdGltZSAqLwotCWJueDJ4X2JpdHNfZGlzKGJwLCBOSUdfUkVHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQsCi0JCSAgICAgKE5JR19TVEFUVVNfWEdYUzBfTElOSzEwRyB8Ci0JCSAgICAgIE5JR19TVEFUVVNfWEdYUzBfTElOS19TVEFUVVMgfAotCQkgICAgICBOSUdfU1RBVFVTX1NFUkRFUzBfTElOS19TVEFUVVMpKTsKLQlpZiAoKFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpCi0JCT09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEpIHx8Ci0JKFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpCi0JCT09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODIzKSkgewotCQlibngyeF84NDgxX3JlYXJtX2xhdGNoX3NpZ25hbChicCwgcG9ydCwgaXNfbWlfaW50KTsKLQl9Ci0JaWYgKHZhcnMtPnBoeV9saW5rX3VwKSB7Ci0JCWlmIChpc18xMGcpIHsKLQkJCS8qIERpc2FibGUgdGhlIDEwRyBsaW5rIGludGVycnVwdAotCQkJICogYnkgd3JpdGluZyAxIHRvIHRoZSBzdGF0dXMgcmVnaXN0ZXIKLQkJCSAqLwotCQkJRFAoTkVUSUZfTVNHX0xJTkssICIxMEcgWEdYUyBwaHkgbGluayB1cFxuIik7Ci0JCQlibngyeF9iaXRzX2VuKGJwLAotCQkJCSAgICAgIE5JR19SRUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCwKLQkJCQkgICAgICBOSUdfU1RBVFVTX1hHWFMwX0xJTksxMEcpOwotCi0JCX0gZWxzZSBpZiAocGFyYW1zLT5zd2l0Y2hfY2ZnID09IFNXSVRDSF9DRkdfMTBHKSB7Ci0JCQkvKiBEaXNhYmxlIHRoZSBsaW5rIGludGVycnVwdAotCQkJICogYnkgd3JpdGluZyAxIHRvIHRoZSByZWxldmFudCBsYW5lCi0JCQkgKiBpbiB0aGUgc3RhdHVzIHJlZ2lzdGVyCi0JCQkgKi8KLQkJCXUzMiBzZXJfbGFuZSA9ICgocGFyYW1zLT5sYW5lX2NvbmZpZyAmCi0JCQkJICAgIFBPUlRfSFdfQ0ZHX0xBTkVfU1dBUF9DRkdfTUFTVEVSX01BU0spID4+Ci0JCQkJICAgIFBPUlRfSFdfQ0ZHX0xBTkVfU1dBUF9DRkdfTUFTVEVSX1NISUZUKTsKLQotCQkJRFAoTkVUSUZfTVNHX0xJTkssICIlZCBzcGVlZCBYR1hTIHBoeSBsaW5rIHVwXG4iLAotCQkJCSB2YXJzLT5saW5lX3NwZWVkKTsKLQkJCWJueDJ4X2JpdHNfZW4oYnAsCi0JCQkJICAgICAgTklHX1JFR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0LAotCQkJCSAgICAgICgoMSA8PCBzZXJfbGFuZSkgPDwKLQkJCQkgICAgICAgTklHX1NUQVRVU19YR1hTMF9MSU5LX1NUQVRVU19TSVpFKSk7Ci0KLQkJfSBlbHNlIHsgLyogU2VyRGVzICovCi0JCQlEUChORVRJRl9NU0dfTElOSywgIlNlckRlcyBwaHkgbGluayB1cFxuIik7Ci0JCQkvKiBEaXNhYmxlIHRoZSBsaW5rIGludGVycnVwdAotCQkJICogYnkgd3JpdGluZyAxIHRvIHRoZSBzdGF0dXMgcmVnaXN0ZXIKLQkJCSAqLwotCQkJYm54MnhfYml0c19lbihicCwKLQkJCQkgICAgICBOSUdfUkVHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQsCi0JCQkJICAgICAgTklHX1NUQVRVU19TRVJERVMwX0xJTktfU1RBVFVTKTsKLQkJfQotCi0JfSBlbHNlIHsgLyogbGlua19kb3duICovCi0JfQotfQotCi1zdGF0aWMgdTggYm54MnhfZm9ybWF0X3Zlcih1MzIgbnVtLCB1OCAqc3RyLCB1MTYgbGVuKQotewotCXU4ICpzdHJfcHRyID0gc3RyOwotCXUzMiBtYXNrID0gMHhmMDAwMDAwMDsKLQl1OCBzaGlmdCA9IDgqNDsKLQl1OCBkaWdpdDsKLQlpZiAobGVuIDwgMTApIHsKLQkJLyogTmVlZCBtb3JlIHRoYW4gMTBjaGFycyBmb3IgdGhpcyBmb3JtYXQgKi8KLQkJKnN0cl9wdHIgPSAnXDAnOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0Jd2hpbGUgKHNoaWZ0ID4gMCkgewotCi0JCXNoaWZ0IC09IDQ7Ci0JCWRpZ2l0ID0gKChudW0gJiBtYXNrKSA+PiBzaGlmdCk7Ci0JCWlmIChkaWdpdCA8IDB4YSkKLQkJCSpzdHJfcHRyID0gZGlnaXQgKyAnMCc7Ci0JCWVsc2UKLQkJCSpzdHJfcHRyID0gZGlnaXQgLSAweGEgKyAnYSc7Ci0JCXN0cl9wdHIrKzsKLQkJbWFzayA9IG1hc2sgPj4gNDsKLQkJaWYgKHNoaWZ0ID09IDQqNCkgewotCQkJKnN0cl9wdHIgPSAnOic7Ci0JCQlzdHJfcHRyKys7Ci0JCX0KLQl9Ci0JKnN0cl9wdHIgPSAnXDAnOwotCXJldHVybiAwOwotfQotCi11OCBibngyeF9nZXRfZXh0X3BoeV9md192ZXJzaW9uKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCB1OCBkcml2ZXJfbG9hZGVkLAotCQkJICAgICAgdTggKnZlcnNpb24sIHUxNiBsZW4pCi17Ci0Jc3RydWN0IGJueDJ4ICpicDsKLQl1MzIgZXh0X3BoeV90eXBlID0gMDsKLQl1MzIgc3Bpcm9tX3ZlciA9IDA7Ci0JdTggc3RhdHVzOwotCi0JaWYgKHZlcnNpb24gPT0gTlVMTCB8fCBwYXJhbXMgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JYnAgPSBwYXJhbXMtPmJwOwotCi0Jc3Bpcm9tX3ZlciA9IFJFR19SRChicCwgcGFyYW1zLT5zaG1lbV9iYXNlICsKLQkJICAgb2Zmc2V0b2Yoc3RydWN0IHNobWVtX3JlZ2lvbiwKLQkJCSAgICBwb3J0X21iW3BhcmFtcy0+cG9ydF0uZXh0X3BoeV9md192ZXJzaW9uKSk7Ci0KLQlzdGF0dXMgPSAwOwotCS8qIHJlc2V0IHRoZSByZXR1cm5lZCB2YWx1ZSB0byB6ZXJvICovCi0JZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7Ci0Jc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKLQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6Ci0KLQkJaWYgKGxlbiA8IDUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQl2ZXJzaW9uWzBdID0gKHNwaXJvbV92ZXIgJiAweEZGKTsKLQkJdmVyc2lvblsxXSA9IChzcGlyb21fdmVyICYgMHhGRjAwKSA+PiA4OwotCQl2ZXJzaW9uWzJdID0gKHNwaXJvbV92ZXIgJiAweEZGMDAwMCkgPj4gMTY7Ci0JCXZlcnNpb25bM10gPSAoc3Bpcm9tX3ZlciAmIDB4RkYwMDAwMDApID4+IDI0OwotCQl2ZXJzaW9uWzRdID0gJ1wwJzsKLQotCQlicmVhazsKLQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6Ci0JY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgotCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNzoKLQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDY6Ci0JY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgotCQlzdGF0dXMgPSBibngyeF9mb3JtYXRfdmVyKHNwaXJvbV92ZXIsIHZlcnNpb24sIGxlbik7Ci0JCWJyZWFrOwotCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MToKLQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODIzOgotCQlzcGlyb21fdmVyID0gKChzcGlyb21fdmVyICYgMHhGODApID4+IDcpIDw8IDE2IHwKLQkJCShzcGlyb21fdmVyICYgMHg3Rik7Ci0JCXN0YXR1cyA9IGJueDJ4X2Zvcm1hdF92ZXIoc3Bpcm9tX3ZlciwgdmVyc2lvbiwgbGVuKTsKLQkJYnJlYWs7Ci0JY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1Q6Ci0JY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1OgotCQl2ZXJzaW9uWzBdID0gJ1wwJzsKLQkJYnJlYWs7Ci0KLQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkU6Ci0JCURQKE5FVElGX01TR19MSU5LLCAiYm54MnhfZ2V0X2V4dF9waHlfZndfdmVyc2lvbjoiCi0JCQkJICAgICIgdHlwZSBpcyBGQUlMVVJFIVxuIik7Ci0JCXN0YXR1cyA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X3NldF94Z3hzX2xvb3BiYWNrKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAotCQkJCSAgc3RydWN0IGxpbmtfdmFycyAqdmFycywKLQkJCQkgIHU4IGlzXzEwZykKLXsKLQl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OwotCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCi0JaWYgKGlzXzEwZykgewotCQl1MzIgbWRfZGV2YWQ7Ci0KLQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDEwRyBsb29wYmFjayBlbmFibGVcbiIpOwotCi0JCS8qIGNoYW5nZSB0aGUgdW5pX3BoeV9hZGRyIGluIHRoZSBuaWcgKi8KLQkJbWRfZGV2YWQgPSBSRUdfUkQoYnAsIChOSUdfUkVHX1hHWFMwX0NUUkxfTURfREVWQUQgKwotCQkJCQkgIHBvcnQqMHgxOCkpOwotCi0JCVJFR19XUihicCwgTklHX1JFR19YR1hTMF9DVFJMX01EX0RFVkFEICsgcG9ydCoweDE4LCAweDUpOwotCi0JCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIDAsCi0JCQkgICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCSAgICAgICA1LAotCQkJICAgICAgIChNRElPX1JFR19CQU5LX0FFUl9CTE9DSyArCi0JCQkJKE1ESU9fQUVSX0JMT0NLX0FFUl9SRUcgJiAweGYpKSwKLQkJCSAgICAgICAweDI4MDApOwotCi0JCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIDAsCi0JCQkgICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCSAgICAgICA1LAotCQkJICAgICAgIChNRElPX1JFR19CQU5LX0NMNzNfSUVFRUIwICsKLQkJCQkoTURJT19DTDczX0lFRUVCMF9DTDczX0FOX0NPTlRST0wgJiAweGYpKSwKLQkJCSAgICAgICAweDYwNDEpOwotCQltc2xlZXAoMjAwKTsKLQkJLyogc2V0IGFlciBtbWQgYmFjayAqLwotCQlibngyeF9zZXRfYWVyX21tZChwYXJhbXMsIHZhcnMpOwotCi0JCS8qIGFuZCBtZF9kZXZhZCAqLwotCQlSRUdfV1IoYnAsIE5JR19SRUdfWEdYUzBfQ1RSTF9NRF9ERVZBRCArIHBvcnQqMHgxOCwKLQkJCSAgICBtZF9kZXZhZCk7Ci0KLQl9IGVsc2UgewotCQl1MTYgbWlpX2NvbnRyb2w7Ci0KLQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDFHIGxvb3BiYWNrIGVuYWJsZVxuIik7Ci0KLQkJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBvcnQsCi0JCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAotCQkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsCi0JCQkJICAgICAgJm1paV9jb250cm9sKTsKLQotCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcG9ydCwKLQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCi0JCQkJICAgICAgTURJT19DT01CT19JRUVFMF9NSUlfQ09OVFJPTCwKLQkJCQkgICAgICAobWlpX2NvbnRyb2wgfAotCQkJCSAgICAgICBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfTE9PUEJBQ0spKTsKLQl9Ci19Ci0KLQotc3RhdGljIHZvaWQgYm54MnhfZXh0X3BoeV9sb29wYmFjayhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKLQl1OCBleHRfcGh5X2FkZHI7Ci0JdTMyIGV4dF9waHlfdHlwZTsKLQotCWlmIChwYXJhbXMtPnN3aXRjaF9jZmcgPT0gU1dJVENIX0NGR18xMEcpIHsKLQkJZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7Ci0JCWV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwotCQkvKiBDTDM3IEF1dG9uZWcgRW5hYmxlZCAqLwotCQlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgewotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVDoKLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9OT1RfQ09OTjoKLQkJCURQKE5FVElGX01TR19MSU5LLAotCQkJCSJleHRfcGh5X2xvb3BiYWNrOiBXZSBzaG91bGQgbm90IGdldCBoZXJlXG4iKTsKLQkJCWJyZWFrOwotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDU6Ci0JCQlEUChORVRJRl9NU0dfTElOSywgImV4dF9waHlfbG9vcGJhY2s6IDg3MDVcbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiZXh0X3BoeV9sb29wYmFjazogODcwNlxuIik7Ci0JCQlicmVhazsKLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJQTUEvUE1EIGV4dF9waHlfbG9vcGJhY2s6IDg3MjZcbiIpOwotCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgIE1ESU9fUE1BX1JFR19DVFJMLAotCQkJCSAgICAgICAweDAwMDEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKLQkJCS8qIFNGWDcxMDFfWEdYU19URVNUMSAqLwotCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICAgTURJT19YU19ERVZBRCwKLQkJCQkgICAgICAgTURJT19YU19TRlg3MTAxX1hHWFNfVEVTVDEsCi0JCQkJICAgICAgIDB4MTAwKTsKLQkJCURQKE5FVElGX01TR19MSU5LLAotCQkJCSJleHRfcGh5X2xvb3BiYWNrOiBzZXQgZXh0IHBoeSBsb29wYmFja1xuIik7Ci0JCQlicmVhazsKLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgotCi0JCQlicmVhazsKLQkJfSAvKiBzd2l0Y2ggZXh0ZXJuYWwgUEhZIHR5cGUgKi8KLQl9IGVsc2UgewotCQkvKiBzZXJkZXMgKi8KLQkJZXh0X3BoeV90eXBlID0gU0VSREVTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQkJZXh0X3BoeV9hZGRyID0gKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgICYKLQkJUE9SVF9IV19DRkdfU0VSREVTX0VYVF9QSFlfQUREUl9NQVNLKQotCQk+PiBQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9BRERSX1NISUZUOwotCX0KLX0KLQotCi0vKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIGJueDJ4X292ZXJyaWRlX2xlZF92YWx1ZSAtCi0gKgotICogT3ZlcnJpZGUgdGhlIGxlZCB2YWx1ZSBvZiB0aGUgcmVxdXN0ZWQgbGVkCi0gKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotdTggYm54Mnhfb3ZlcnJpZGVfbGVkX3ZhbHVlKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsCi0JCQkgIHUzMiBsZWRfaWR4LCB1MzIgdmFsdWUpCi17Ci0JdTMyIHJlZ192YWw7Ci0KLQkvKiBJZiBwb3J0IDAgdGhlbiB1c2UgRU1BQzAsIGVsc2UgdXNlIEVNQUMxKi8KLQl1MzIgZW1hY19iYXNlID0gKHBvcnQpID8gR1JDQkFTRV9FTUFDMSA6IEdSQ0JBU0VfRU1BQzA7Ci0KLQlEUChORVRJRl9NU0dfTElOSywKLQkJICJibngyeF9vdmVycmlkZV9sZWRfdmFsdWUoKSBwb3J0ICV4IGxlZF9pZHggJWQgdmFsdWUgJWRcbiIsCi0JCSBwb3J0LCBsZWRfaWR4LCB2YWx1ZSk7Ci0KLQlzd2l0Y2ggKGxlZF9pZHgpIHsKLQljYXNlIDA6IC8qIDEwTUIgbGVkICovCi0JCS8qIFJlYWQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIExFRCByZWdpc3RlciBpbgotCQl0aGUgRU1BQyBibG9jayAqLwotCQlyZWdfdmFsID0gUkVHX1JEKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX0xFRCk7Ci0JCS8qIFNldCB0aGUgT1ZFUlJJREUgYml0IHRvIDEgKi8KLQkJcmVnX3ZhbCB8PSBFTUFDX0xFRF9PVkVSUklERTsKLQkJLyogSWYgdmFsdWUgaXMgMSwgc2V0IHRoZSAxME1fT1ZFUlJJREUgYml0LAotCQlvdGhlcndpc2UgcmVzZXQgaXQuKi8KLQkJcmVnX3ZhbCA9ICh2YWx1ZSA9PSAxKSA/IChyZWdfdmFsIHwgRU1BQ19MRURfMTBNQl9PVkVSUklERSkgOgotCQkJKHJlZ192YWwgJiB+RU1BQ19MRURfMTBNQl9PVkVSUklERSk7Ci0JCVJFR19XUihicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19MRUQsIHJlZ192YWwpOwotCQlicmVhazsKLQljYXNlIDE6IC8qMTAwTUIgbGVkICAgICovCi0JCS8qUmVhZCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgTEVEIHJlZ2lzdGVyIGluCi0JCXRoZSBFTUFDIGJsb2NrICovCi0JCXJlZ192YWwgPSBSRUdfUkQoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTEVEKTsKLQkJLyogIFNldCB0aGUgT1ZFUlJJREUgYml0IHRvIDEgKi8KLQkJcmVnX3ZhbCB8PSBFTUFDX0xFRF9PVkVSUklERTsKLQkJLyogIElmIHZhbHVlIGlzIDEsIHNldCB0aGUgMTAwTV9PVkVSUklERSBiaXQsCi0JCW90aGVyd2lzZSByZXNldCBpdC4qLwotCQlyZWdfdmFsID0gKHZhbHVlID09IDEpID8gKHJlZ192YWwgfCBFTUFDX0xFRF8xMDBNQl9PVkVSUklERSkgOgotCQkJKHJlZ192YWwgJiB+RU1BQ19MRURfMTAwTUJfT1ZFUlJJREUpOwotCQlSRUdfV1IoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTEVELCByZWdfdmFsKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOiAvKiAxMDAwTUIgbGVkICovCi0JCS8qIFJlYWQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIExFRCByZWdpc3RlciBpbiB0aGUKLQkJRU1BQyBibG9jayAqLwotCQlyZWdfdmFsID0gUkVHX1JEKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX0xFRCk7Ci0JCS8qIFNldCB0aGUgT1ZFUlJJREUgYml0IHRvIDEgKi8KLQkJcmVnX3ZhbCB8PSBFTUFDX0xFRF9PVkVSUklERTsKLQkJLyogSWYgdmFsdWUgaXMgMSwgc2V0IHRoZSAxMDAwTV9PVkVSUklERSBiaXQsIG90aGVyd2lzZQotCQlyZXNldCBpdC4gKi8KLQkJcmVnX3ZhbCA9ICh2YWx1ZSA9PSAxKSA/IChyZWdfdmFsIHwgRU1BQ19MRURfMTAwME1CX09WRVJSSURFKSA6Ci0JCQkocmVnX3ZhbCAmIH5FTUFDX0xFRF8xMDAwTUJfT1ZFUlJJREUpOwotCQlSRUdfV1IoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTEVELCByZWdfdmFsKTsKLQkJYnJlYWs7Ci0JY2FzZSAzOiAvKiAyNTAwTUIgbGVkICovCi0JCS8qICBSZWFkIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBMRUQgcmVnaXN0ZXIgaW4gdGhlCi0JCUVNQUMgYmxvY2sqLwotCQlyZWdfdmFsID0gUkVHX1JEKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX0xFRCk7Ci0JCS8qIFNldCB0aGUgT1ZFUlJJREUgYml0IHRvIDEgKi8KLQkJcmVnX3ZhbCB8PSBFTUFDX0xFRF9PVkVSUklERTsKLQkJLyogIElmIHZhbHVlIGlzIDEsIHNldCB0aGUgMjUwME1fT1ZFUlJJREUgYml0LCBvdGhlcndpc2UKLQkJcmVzZXQgaXQuKi8KLQkJcmVnX3ZhbCA9ICh2YWx1ZSA9PSAxKSA/IChyZWdfdmFsIHwgRU1BQ19MRURfMjUwME1CX09WRVJSSURFKSA6Ci0JCQkocmVnX3ZhbCAmIH5FTUFDX0xFRF8yNTAwTUJfT1ZFUlJJREUpOwotCQlSRUdfV1IoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTEVELCByZWdfdmFsKTsKLQkJYnJlYWs7Ci0JY2FzZSA0OiAvKjEwRyBsZWQgKi8KLQkJaWYgKHBvcnQgPT0gMCkgewotCQkJUkVHX1dSKGJwLCBOSUdfUkVHX0xFRF8xMEdfUDAsCi0JCQkJICAgIHZhbHVlKTsKLQkJfSBlbHNlIHsKLQkJCVJFR19XUihicCwgTklHX1JFR19MRURfMTBHX1AxLAotCQkJCSAgICB2YWx1ZSk7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSA1OiAvKiBUUkFGRklDIGxlZCAqLwotCQkvKiBGaW5kIGlmIHRoZSB0cmFmZmljIGNvbnRyb2wgaXMgdmlhIEJNQUMgb3IgRU1BQyAqLwotCQlpZiAocG9ydCA9PSAwKQotCQkJcmVnX3ZhbCA9IFJFR19SRChicCwgTklHX1JFR19OSUdfRU1BQzBfRU4pOwotCQllbHNlCi0JCQlyZWdfdmFsID0gUkVHX1JEKGJwLCBOSUdfUkVHX05JR19FTUFDMV9FTik7Ci0KLQkJLyogIE92ZXJyaWRlIHRoZSB0cmFmZmljIGxlZCBpbiB0aGUgRU1BQzoqLwotCQlpZiAocmVnX3ZhbCA9PSAxKSB7Ci0JCQkvKiBSZWFkIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBMRUQgcmVnaXN0ZXIgaW4KLQkJCXRoZSBFTUFDIGJsb2NrICovCi0JCQlyZWdfdmFsID0gUkVHX1JEKGJwLCBlbWFjX2Jhc2UgKwotCQkJCQkgICAgIEVNQUNfUkVHX0VNQUNfTEVEKTsKLQkJCS8qIFNldCB0aGUgVFJBRkZJQ19PVkVSUklERSBiaXQgdG8gMSAqLwotCQkJcmVnX3ZhbCB8PSBFTUFDX0xFRF9PVkVSUklERTsKLQkJCS8qIElmIHZhbHVlIGlzIDEsIHNldCB0aGUgVFJBRkZJQyBiaXQsIG90aGVyd2lzZQotCQkJcmVzZXQgaXQuKi8KLQkJCXJlZ192YWwgPSAodmFsdWUgPT0gMSkgPyAocmVnX3ZhbCB8IEVNQUNfTEVEX1RSQUZGSUMpIDoKLQkJCQkocmVnX3ZhbCAmIH5FTUFDX0xFRF9UUkFGRklDKTsKLQkJCVJFR19XUihicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19MRUQsIHJlZ192YWwpOwotCQl9IGVsc2UgeyAvKiBPdmVycmlkZSB0aGUgdHJhZmZpYyBsZWQgaW4gdGhlIEJNQUM6ICovCi0JCQlSRUdfV1IoYnAsIE5JR19SRUdfTEVEX0NPTlRST0xfT1ZFUlJJREVfVFJBRkZJQ19QMAotCQkJCSAgICsgcG9ydCo0LCAxKTsKLQkJCVJFR19XUihicCwgTklHX1JFR19MRURfQ09OVFJPTF9UUkFGRklDX1AwICsgcG9ydCo0LAotCQkJCSAgICB2YWx1ZSk7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkgImJueDJ4X292ZXJyaWRlX2xlZF92YWx1ZSgpIHVua25vd24gbGVkIGluZGV4ICVkICIKLQkJCSAiKHNob3VsZCBiZSAwLTUpXG4iLCBsZWRfaWR4KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQotdTggYm54Mnhfc2V0X2xlZChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgdTggbW9kZSwgdTMyIHNwZWVkKQotewotCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7Ci0JdTE2IGh3X2xlZF9tb2RlID0gcGFyYW1zLT5od19sZWRfbW9kZTsKLQl1OCByYyA9IDA7Ci0JdTMyIHRtcDsKLQl1MzIgZW1hY19iYXNlID0gcG9ydCA/IEdSQ0JBU0VfRU1BQzEgOiBHUkNCQVNFX0VNQUMwOwotCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKLQlEUChORVRJRl9NU0dfTElOSywgImJueDJ4X3NldF9sZWQ6IHBvcnQgJXgsIG1vZGUgJWRcbiIsIHBvcnQsIG1vZGUpOwotCURQKE5FVElGX01TR19MSU5LLCAic3BlZWQgMHgleCwgaHdfbGVkX21vZGUgMHgleFxuIiwKLQkJIHNwZWVkLCBod19sZWRfbW9kZSk7Ci0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBMRURfTU9ERV9PRkY6Ci0JCVJFR19XUihicCwgTklHX1JFR19MRURfMTBHX1AwICsgcG9ydCo0LCAwKTsKLQkJUkVHX1dSKGJwLCBOSUdfUkVHX0xFRF9NT0RFX1AwICsgcG9ydCo0LAotCQkJICAgU0hBUkVEX0hXX0NGR19MRURfTUFDMSk7Ci0KLQkJdG1wID0gRU1BQ19SRChicCwgRU1BQ19SRUdfRU1BQ19MRUQpOwotCQlFTUFDX1dSKGJwLCBFTUFDX1JFR19FTUFDX0xFRCwgKHRtcCB8IEVNQUNfTEVEX09WRVJSSURFKSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBMRURfTU9ERV9PUEVSOgotCQlpZiAoZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVCkgewotCQkJUkVHX1dSKGJwLCBOSUdfUkVHX0xFRF9NT0RFX1AwICsgcG9ydCo0LCAwKTsKLQkJCVJFR19XUihicCwgTklHX1JFR19MRURfMTBHX1AwICsgcG9ydCo0LCAxKTsKLQkJfSBlbHNlIHsKLQkJCVJFR19XUihicCwgTklHX1JFR19MRURfTU9ERV9QMCArIHBvcnQqNCwKLQkJCQkgICBod19sZWRfbW9kZSk7Ci0JCX0KLQotCQlSRUdfV1IoYnAsIE5JR19SRUdfTEVEX0NPTlRST0xfT1ZFUlJJREVfVFJBRkZJQ19QMCArCi0JCQkgICBwb3J0KjQsIDApOwotCQkvKiBTZXQgYmxpbmtpbmcgcmF0ZSB0byB+MTUuOUh6ICovCi0JCVJFR19XUihicCwgTklHX1JFR19MRURfQ09OVFJPTF9CTElOS19SQVRFX1AwICsgcG9ydCo0LAotCQkJICAgTEVEX0JMSU5LX1JBVEVfVkFMKTsKLQkJUkVHX1dSKGJwLCBOSUdfUkVHX0xFRF9DT05UUk9MX0JMSU5LX1JBVEVfRU5BX1AwICsKLQkJCSAgIHBvcnQqNCwgMSk7Ci0JCXRtcCA9IEVNQUNfUkQoYnAsIEVNQUNfUkVHX0VNQUNfTEVEKTsKLQkJRU1BQ19XUihicCwgRU1BQ19SRUdfRU1BQ19MRUQsCi0JCQkgICAgKHRtcCAmICh+RU1BQ19MRURfT1ZFUlJJREUpKSk7Ci0KLQkJaWYgKENISVBfSVNfRTEoYnApICYmCi0JCSAgICAoKHNwZWVkID09IFNQRUVEXzI1MDApIHx8Ci0JCSAgICAgKHNwZWVkID09IFNQRUVEXzEwMDApIHx8Ci0JCSAgICAgKHNwZWVkID09IFNQRUVEXzEwMCkgfHwKLQkJICAgICAoc3BlZWQgPT0gU1BFRURfMTApKSkgewotCQkJLyogT24gRXZlcmVzdCAxIEF4IGNoaXAgdmVyc2lvbnMgZm9yIHNwZWVkcyBsZXNzIHRoYW4KLQkJCTEwRyBMRUQgc2NoZW1lIGlzIGRpZmZlcmVudCAqLwotCQkJUkVHX1dSKGJwLCBOSUdfUkVHX0xFRF9DT05UUk9MX09WRVJSSURFX1RSQUZGSUNfUDAKLQkJCQkgICArIHBvcnQqNCwgMSk7Ci0JCQlSRUdfV1IoYnAsIE5JR19SRUdfTEVEX0NPTlRST0xfVFJBRkZJQ19QMCArCi0JCQkJICAgcG9ydCo0LCAwKTsKLQkJCVJFR19XUihicCwgTklHX1JFR19MRURfQ09OVFJPTF9CTElOS19UUkFGRklDX1AwICsKLQkJCQkgICBwb3J0KjQsIDEpOwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmMgPSAtRUlOVkFMOwotCQlEUChORVRJRl9NU0dfTElOSywgImJueDJ4X3NldF9sZWQ6IEludmFsaWQgbGVkIG1vZGUgJWRcbiIsCi0JCQkgbW9kZSk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gcmM7Ci0KLX0KLQotdTggYm54MnhfdGVzdF9saW5rKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgbGlua192YXJzICp2YXJzKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCXUxNiBncF9zdGF0dXMgPSAwOwotCi0JQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkgICAgICBNRElPX1JFR19CQU5LX0dQX1NUQVRVUywKLQkJCSAgICAgIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxLAotCQkJICAgICAgJmdwX3N0YXR1cyk7Ci0JLyogbGluayBpcyB1cCBvbmx5IGlmIGJvdGggbG9jYWwgcGh5IGFuZCBleHRlcm5hbCBwaHkgYXJlIHVwICovCi0JaWYgKChncF9zdGF0dXMgJiBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9MSU5LX1NUQVRVUykgJiYKLQkgICAgYm54MnhfZXh0X3BoeV9pc19saW5rX3VwKHBhcmFtcywgdmFycywgMSkpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIC1FU1JDSDsKLX0KLQotc3RhdGljIHU4IGJueDJ4X2xpbmtfaW5pdGlhbGl6ZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKLQkJCSAgICAgIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKLQl1OCByYyA9IDA7Ci0JdTggbm9uX2V4dF9waHk7Ci0JdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwotCi0JLyogQWN0aXZhdGUgdGhlIGV4dGVybmFsIFBIWSAqLwotCWJueDJ4X2V4dF9waHlfcmVzZXQocGFyYW1zLCB2YXJzKTsKLQotCWJueDJ4X3NldF9hZXJfbW1kKHBhcmFtcywgdmFycyk7Ci0KLQlpZiAodmFycy0+cGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRykKLQkJYm54Mnhfc2V0X21hc3Rlcl9sbihwYXJhbXMpOwotCi0JcmMgPSBibngyeF9yZXNldF91bmljb3JlKHBhcmFtcyk7Ci0JLyogcmVzZXQgdGhlIFNlckRlcyBhbmQgd2FpdCBmb3IgcmVzZXQgYml0IHJldHVybiBsb3cgKi8KLQlpZiAocmMgIT0gMCkKLQkJcmV0dXJuIHJjOwotCi0JYm54Mnhfc2V0X2Flcl9tbWQocGFyYW1zLCB2YXJzKTsKLQotCS8qIHNldHRpbmcgdGhlIG1hc3RlckxuX2RlZiBhZ2FpbiBhZnRlciB0aGUgcmVzZXQgKi8KLQlpZiAodmFycy0+cGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRykgewotCQlibngyeF9zZXRfbWFzdGVyX2xuKHBhcmFtcyk7Ci0JCWJueDJ4X3NldF9zd2FwX2xhbmVzKHBhcmFtcyk7Ci0JfQotCi0JaWYgKHZhcnMtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpIHsKLQkJaWYgKChwYXJhbXMtPnJlcV9saW5lX3NwZWVkICYmCi0JCSAgICAoKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfMTAwKSB8fAotCQkgICAgIChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09IFNQRUVEXzEwKSkpIHx8Ci0JCSAgICAoIXBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgJiYKLQkJICAgICAocGFyYW1zLT5zcGVlZF9jYXBfbWFzayA+PQotCQkgICAgICAgUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xME1fRlVMTCkgJiYKLQkJICAgICAocGFyYW1zLT5zcGVlZF9jYXBfbWFzayA8Ci0JCSAgICAgICBQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzFHKQotCQkgICAgICkpICB7Ci0JCQl2YXJzLT5waHlfZmxhZ3MgfD0gUEhZX1NHTUlJX0ZMQUc7Ci0JCX0gZWxzZSB7Ci0JCQl2YXJzLT5waHlfZmxhZ3MgJj0gflBIWV9TR01JSV9GTEFHOwotCQl9Ci0JfQotCS8qIEluIGNhc2Ugb2YgZXh0ZXJuYWwgcGh5IGV4aXN0YW5jZSwgdGhlIGxpbmUgc3BlZWQgd291bGQgYmUgdGhlCi0JIGxpbmUgc3BlZWQgbGlua2VkIHVwIGJ5IHRoZSBleHRlcm5hbCBwaHkuIEluIGNhc2UgaXQgaXMgZGlyZWN0IG9ubHksCi0JICB0aGVuIHRoZSBsaW5lX3NwZWVkIGR1cmluZyBpbml0aWFsaXphdGlvbiB3aWxsIGJlIGVxdWFsIHRvIHRoZQotCSAgIHJlcV9saW5lX3NwZWVkKi8KLQl2YXJzLT5saW5lX3NwZWVkID0gcGFyYW1zLT5yZXFfbGluZV9zcGVlZDsKLQotCWJueDJ4X2NhbGNfaWVlZV9hbmVnX2FkdihwYXJhbXMsICZ2YXJzLT5pZWVlX2ZjKTsKLQotCS8qIGluaXQgZXh0IHBoeSBhbmQgZW5hYmxlIGxpbmsgc3RhdGUgaW50ICovCi0Jbm9uX2V4dF9waHkgPSAoKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1QpIHx8Ci0JCSAgICAgICAocGFyYW1zLT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX1hHWFNfMTApKTsKLQotCWlmIChub25fZXh0X3BoeSB8fAotCSAgICAoZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDUpIHx8Ci0JICAgIChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNikgfHwKLQkgICAgKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2KSB8fAotCSAgICAocGFyYW1zLT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX0VYVF9QSFkpKSB7Ci0JCWlmIChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09IFNQRUVEX0FVVE9fTkVHKQotCQkJYm54Mnhfc2V0X3BhcmFsbGVsX2RldGVjdGlvbihwYXJhbXMsIHZhcnMtPnBoeV9mbGFncyk7Ci0JCWJueDJ4X2luaXRfaW50ZXJuYWxfcGh5KHBhcmFtcywgdmFycywgbm9uX2V4dF9waHkpOwotCX0KLQotCWlmICghbm9uX2V4dF9waHkpCi0JCXJjIHw9IGJueDJ4X2V4dF9waHlfaW5pdChwYXJhbXMsIHZhcnMpOwotCi0JYm54MnhfYml0c19kaXMoYnAsIE5JR19SRUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCwKLQkJICAgICAoTklHX1NUQVRVU19YR1hTMF9MSU5LMTBHIHwKLQkJICAgICAgTklHX1NUQVRVU19YR1hTMF9MSU5LX1NUQVRVUyB8Ci0JCSAgICAgIE5JR19TVEFUVVNfU0VSREVTMF9MSU5LX1NUQVRVUykpOwotCi0JcmV0dXJuIHJjOwotCi19Ci0KLQotdTggYm54MnhfcGh5X2luaXQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTMyIHZhbDsKLQotCURQKE5FVElGX01TR19MSU5LLCAiUGh5IEluaXRpYWxpemF0aW9uIHN0YXJ0ZWRcbiIpOwotCURQKE5FVElGX01TR19MSU5LLCAicmVxX3NwZWVkICVkLCByZXFfZmxvd2N0cmwgJWRcbiIsCi0JCSBwYXJhbXMtPnJlcV9saW5lX3NwZWVkLCBwYXJhbXMtPnJlcV9mbG93X2N0cmwpOwotCXZhcnMtPmxpbmtfc3RhdHVzID0gMDsKLQl2YXJzLT5waHlfbGlua191cCA9IDA7Ci0JdmFycy0+bGlua191cCA9IDA7Ci0JdmFycy0+bGluZV9zcGVlZCA9IDA7Ci0JdmFycy0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7Ci0JdmFycy0+Zmxvd19jdHJsID0gQk5YMlhfRkxPV19DVFJMX05PTkU7Ci0JdmFycy0+bWFjX3R5cGUgPSBNQUNfVFlQRV9OT05FOwotCi0JaWYgKHBhcmFtcy0+c3dpdGNoX2NmZyA9PSAgU1dJVENIX0NGR18xRykKLQkJdmFycy0+cGh5X2ZsYWdzID0gUEhZX1NFUkRFU19GTEFHOwotCWVsc2UKLQkJdmFycy0+cGh5X2ZsYWdzID0gUEhZX1hHWFNfRkxBRzsKLQotCS8qIGRpc2FibGUgYXR0ZW50aW9ucyAqLwotCWJueDJ4X2JpdHNfZGlzKGJwLCBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQwICsgcGFyYW1zLT5wb3J0KjQsCi0JCSAgICAgICAoTklHX01BU0tfWEdYUzBfTElOS19TVEFUVVMgfAotCQkJTklHX01BU0tfWEdYUzBfTElOSzEwRyB8Ci0JCQlOSUdfTUFTS19TRVJERVMwX0xJTktfU1RBVFVTIHwKLQkJCU5JR19NQVNLX01JX0lOVCkpOwotCi0JYm54MnhfZW1hY19pbml0KHBhcmFtcywgdmFycyk7Ci0KLQlpZiAoQ0hJUF9SRVZfSVNfRlBHQShicCkpIHsKLQotCQl2YXJzLT5saW5rX3VwID0gMTsKLQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOwotCQl2YXJzLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKLQkJdmFycy0+Zmxvd19jdHJsID0gQk5YMlhfRkxPV19DVFJMX05PTkU7Ci0JCXZhcnMtPmxpbmtfc3RhdHVzID0gKExJTktfU1RBVFVTX0xJTktfVVAgfCBMSU5LXzEwR1RGRCk7Ci0JCS8qIGVuYWJsZSBvbiBFMS41IEZQR0EgKi8KLQkJaWYgKENISVBfSVNfRTFIKGJwKSkgewotCQkJdmFycy0+Zmxvd19jdHJsIHw9Ci0JCQkJCShCTlgyWF9GTE9XX0NUUkxfVFggfAotCQkJCQkgQk5YMlhfRkxPV19DVFJMX1JYKTsKLQkJCXZhcnMtPmxpbmtfc3RhdHVzIHw9Ci0JCQkJCShMSU5LX1NUQVRVU19UWF9GTE9XX0NPTlRST0xfRU5BQkxFRCB8Ci0JCQkJCSBMSU5LX1NUQVRVU19SWF9GTE9XX0NPTlRST0xfRU5BQkxFRCk7Ci0JCX0KLQotCQlibngyeF9lbWFjX2VuYWJsZShwYXJhbXMsIHZhcnMsIDApOwotCQlibngyeF9wYmZfdXBkYXRlKHBhcmFtcywgdmFycy0+Zmxvd19jdHJsLCB2YXJzLT5saW5lX3NwZWVkKTsKLQkJLyogZGlzYWJsZSBkcmFpbiAqLwotCQlSRUdfV1IoYnAsIE5JR19SRUdfRUdSRVNTX0RSQUlOMF9NT0RFICsgcGFyYW1zLT5wb3J0KjQsIDApOwotCi0JCS8qIHVwZGF0ZSBzaGFyZWQgbWVtb3J5ICovCi0JCWJueDJ4X3VwZGF0ZV9tbmcocGFyYW1zLCB2YXJzLT5saW5rX3N0YXR1cyk7Ci0KLQkJcmV0dXJuIDA7Ci0KLQl9IGVsc2UKLQlpZiAoQ0hJUF9SRVZfSVNfRU1VTChicCkpIHsKLQotCQl2YXJzLT5saW5rX3VwID0gMTsKLQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOwotCQl2YXJzLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKLQkJdmFycy0+Zmxvd19jdHJsID0gQk5YMlhfRkxPV19DVFJMX05PTkU7Ci0JCXZhcnMtPmxpbmtfc3RhdHVzID0gKExJTktfU1RBVFVTX0xJTktfVVAgfCBMSU5LXzEwR1RGRCk7Ci0KLQkJYm54MnhfYm1hY19lbmFibGUocGFyYW1zLCB2YXJzLCAwKTsKLQotCQlibngyeF9wYmZfdXBkYXRlKHBhcmFtcywgdmFycy0+Zmxvd19jdHJsLCB2YXJzLT5saW5lX3NwZWVkKTsKLQkJLyogRGlzYWJsZSBkcmFpbiAqLwotCQlSRUdfV1IoYnAsIE5JR19SRUdfRUdSRVNTX0RSQUlOMF9NT0RFCi0JCQkJICAgICsgcGFyYW1zLT5wb3J0KjQsIDApOwotCi0JCS8qIHVwZGF0ZSBzaGFyZWQgbWVtb3J5ICovCi0JCWJueDJ4X3VwZGF0ZV9tbmcocGFyYW1zLCB2YXJzLT5saW5rX3N0YXR1cyk7Ci0KLQkJcmV0dXJuIDA7Ci0KLQl9IGVsc2UKLQlpZiAocGFyYW1zLT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX0JNQUMpIHsKLQotCQl2YXJzLT5saW5rX3VwID0gMTsKLQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOwotCQl2YXJzLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKLQkJdmFycy0+Zmxvd19jdHJsID0gQk5YMlhfRkxPV19DVFJMX05PTkU7Ci0JCXZhcnMtPm1hY190eXBlID0gTUFDX1RZUEVfQk1BQzsKLQotCQl2YXJzLT5waHlfZmxhZ3MgPSBQSFlfWEdYU19GTEFHOwotCi0JCWJueDJ4X3BoeV9kZWFzc2VydChwYXJhbXMsIHZhcnMtPnBoeV9mbGFncyk7Ci0JCS8qIHNldCBibWFjIGxvb3BiYWNrICovCi0JCWJueDJ4X2JtYWNfZW5hYmxlKHBhcmFtcywgdmFycywgMSk7Ci0KLQkJUkVHX1dSKGJwLCBOSUdfUkVHX0VHUkVTU19EUkFJTjBfTU9ERSArCi0JCSAgICBwYXJhbXMtPnBvcnQqNCwgMCk7Ci0KLQl9IGVsc2UgaWYgKHBhcmFtcy0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19FTUFDKSB7Ci0KLQkJdmFycy0+bGlua191cCA9IDE7Ci0JCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwOwotCQl2YXJzLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKLQkJdmFycy0+Zmxvd19jdHJsID0gQk5YMlhfRkxPV19DVFJMX05PTkU7Ci0JCXZhcnMtPm1hY190eXBlID0gTUFDX1RZUEVfRU1BQzsKLQotCQl2YXJzLT5waHlfZmxhZ3MgPSBQSFlfWEdYU19GTEFHOwotCi0JCWJueDJ4X3BoeV9kZWFzc2VydChwYXJhbXMsIHZhcnMtPnBoeV9mbGFncyk7Ci0JCS8qIHNldCBibWFjIGxvb3BiYWNrICovCi0JCWJueDJ4X2VtYWNfZW5hYmxlKHBhcmFtcywgdmFycywgMSk7Ci0JCWJueDJ4X2VtYWNfcHJvZ3JhbShwYXJhbXMsIHZhcnMtPmxpbmVfc3BlZWQsCi0JCQkJCSAgICAgIHZhcnMtPmR1cGxleCk7Ci0JCVJFR19XUihicCwgTklHX1JFR19FR1JFU1NfRFJBSU4wX01PREUgKwotCQkgICAgcGFyYW1zLT5wb3J0KjQsIDApOwotCi0JfSBlbHNlIGlmICgocGFyYW1zLT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX1hHWFNfMTApIHx8Ci0JCSAgIChwYXJhbXMtPmxvb3BiYWNrX21vZGUgPT0gTE9PUEJBQ0tfRVhUX1BIWSkpIHsKLQotCQl2YXJzLT5saW5rX3VwID0gMTsKLQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOwotCQl2YXJzLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKLQkJdmFycy0+Zmxvd19jdHJsID0gQk5YMlhfRkxPV19DVFJMX05PTkU7Ci0KLQkJdmFycy0+cGh5X2ZsYWdzID0gUEhZX1hHWFNfRkxBRzsKLQotCQl2YWwgPSBSRUdfUkQoYnAsCi0JCQkJIE5JR19SRUdfWEdYUzBfQ1RSTF9QSFlfQUREUisKLQkJCQkgcGFyYW1zLT5wb3J0KjB4MTgpOwotCQlwYXJhbXMtPnBoeV9hZGRyID0gKHU4KXZhbDsKLQotCQlibngyeF9waHlfZGVhc3NlcnQocGFyYW1zLCB2YXJzLT5waHlfZmxhZ3MpOwotCQlibngyeF9saW5rX2luaXRpYWxpemUocGFyYW1zLCB2YXJzKTsKLQotCQl2YXJzLT5tYWNfdHlwZSA9IE1BQ19UWVBFX0JNQUM7Ci0KLQkJYm54MnhfYm1hY19lbmFibGUocGFyYW1zLCB2YXJzLCAwKTsKLQotCQlpZiAocGFyYW1zLT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX1hHWFNfMTApIHsKLQkJCS8qIHNldCAxMEcgWEdYUyBsb29wYmFjayAqLwotCQkJYm54Mnhfc2V0X3hneHNfbG9vcGJhY2socGFyYW1zLCB2YXJzLCAxKTsKLQkJfSBlbHNlIHsKLQkJCS8qIHNldCBleHRlcm5hbCBwaHkgbG9vcGJhY2sgKi8KLQkJCWJueDJ4X2V4dF9waHlfbG9vcGJhY2socGFyYW1zKTsKLQkJfQotCQlSRUdfV1IoYnAsIE5JR19SRUdfRUdSRVNTX0RSQUlOMF9NT0RFICsKLQkJCSAgICBwYXJhbXMtPnBvcnQqNCwgMCk7Ci0KLQkJYm54Mnhfc2V0X2xlZChwYXJhbXMsIExFRF9NT0RFX09QRVIsIHZhcnMtPmxpbmVfc3BlZWQpOwotCX0gZWxzZQotCS8qIE5vIGxvb3BiYWNrICovCi0JewotCQlibngyeF9waHlfZGVhc3NlcnQocGFyYW1zLCB2YXJzLT5waHlfZmxhZ3MpOwotCQlzd2l0Y2ggKHBhcmFtcy0+c3dpdGNoX2NmZykgewotCQljYXNlIFNXSVRDSF9DRkdfMUc6Ci0JCQl2YXJzLT5waHlfZmxhZ3MgfD0gUEhZX1NFUkRFU19GTEFHOwotCQkJaWYgKChwYXJhbXMtPmV4dF9waHlfY29uZmlnICYKLQkJCSAgICAgUE9SVF9IV19DRkdfU0VSREVTX0VYVF9QSFlfVFlQRV9NQVNLKSA9PQotCQkJICAgICBQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9UWVBFX0JDTTU0ODIpIHsKLQkJCQl2YXJzLT5waHlfZmxhZ3MgfD0gUEhZX1NHTUlJX0ZMQUc7Ci0JCQl9Ci0KLQkJCXZhbCA9IFJFR19SRChicCwKLQkJCQkJIE5JR19SRUdfU0VSREVTMF9DVFJMX1BIWV9BRERSKwotCQkJCQkgcGFyYW1zLT5wb3J0KjB4MTApOwotCi0JCQlwYXJhbXMtPnBoeV9hZGRyID0gKHU4KXZhbDsKLQotCQkJYnJlYWs7Ci0JCWNhc2UgU1dJVENIX0NGR18xMEc6Ci0JCQl2YXJzLT5waHlfZmxhZ3MgfD0gUEhZX1hHWFNfRkxBRzsKLQkJCXZhbCA9IFJFR19SRChicCwKLQkJCQkgTklHX1JFR19YR1hTMF9DVFJMX1BIWV9BRERSKwotCQkJCSBwYXJhbXMtPnBvcnQqMHgxOCk7Ci0JCQlwYXJhbXMtPnBoeV9hZGRyID0gKHU4KXZhbDsKLQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIkludmFsaWQgc3dpdGNoX2NmZ1xuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlEUChORVRJRl9NU0dfTElOSywgIlBoeSBhZGRyZXNzID0gMHgleFxuIiwgcGFyYW1zLT5waHlfYWRkcik7Ci0KLQkJYm54MnhfbGlua19pbml0aWFsaXplKHBhcmFtcywgdmFycyk7Ci0JCW1zbGVlcCgzMCk7Ci0JCWJueDJ4X2xpbmtfaW50X2VuYWJsZShwYXJhbXMpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfODcyNl9yZXNldF9waHkoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwgdTggZXh0X3BoeV9hZGRyKQotewotCURQKE5FVElGX01TR19MSU5LLCAiYm54MnhfODcyNl9yZXNldF9waHkgcG9ydCAlZFxuIiwgcG9ydCk7Ci0KLQkvKiBTZXQgc2VyaWFsIGJvb3QgY29udHJvbCBmb3IgZXh0ZXJuYWwgbG9hZCAqLwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2LCBleHRfcGh5X2FkZHIsCi0JCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTCwgMHgwMDAxKTsKLX0KLQotdTggYm54MnhfbGlua19yZXNldChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgc3RydWN0IGxpbmtfdmFycyAqdmFycywKLQkJICB1OCByZXNldF9leHRfcGh5KQotewotCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCXUzMiBleHRfcGh5X2NvbmZpZyA9IHBhcmFtcy0+ZXh0X3BoeV9jb25maWc7Ci0JdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKLQl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUoZXh0X3BoeV9jb25maWcpOwotCXUzMiB2YWwgPSBSRUdfUkQoYnAsIHBhcmFtcy0+c2htZW1fYmFzZSArCi0JCQkgICAgIG9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sIGRldl9pbmZvLgotCQkJCSAgICAgIHBvcnRfZmVhdHVyZV9jb25maWdbcGFyYW1zLT5wb3J0XS4KLQkJCQkgICAgICBjb25maWcpKTsKLQlEUChORVRJRl9NU0dfTElOSywgIlJlc2V0dGluZyB0aGUgbGluayBvZiBwb3J0ICVkXG4iLCBwb3J0KTsKLQkvKiBkaXNhYmxlIGF0dGVudGlvbnMgKi8KLQl2YXJzLT5saW5rX3N0YXR1cyA9IDA7Ci0JYm54MnhfdXBkYXRlX21uZyhwYXJhbXMsIHZhcnMtPmxpbmtfc3RhdHVzKTsKLQlibngyeF9iaXRzX2RpcyhicCwgTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCwKLQkJICAgICAoTklHX01BU0tfWEdYUzBfTElOS19TVEFUVVMgfAotCQkgICAgICBOSUdfTUFTS19YR1hTMF9MSU5LMTBHIHwKLQkJICAgICAgTklHX01BU0tfU0VSREVTMF9MSU5LX1NUQVRVUyB8Ci0JCSAgICAgIE5JR19NQVNLX01JX0lOVCkpOwotCi0JLyogYWN0aXZhdGUgbmlnIGRyYWluICovCi0JUkVHX1dSKGJwLCBOSUdfUkVHX0VHUkVTU19EUkFJTjBfTU9ERSArIHBvcnQqNCwgMSk7Ci0KLQkvKiBkaXNhYmxlIG5pZyBlZ3Jlc3MgaW50ZXJmYWNlICovCi0JUkVHX1dSKGJwLCBOSUdfUkVHX0JNQUMwX09VVF9FTiArIHBvcnQqNCwgMCk7Ci0JUkVHX1dSKGJwLCBOSUdfUkVHX0VHUkVTU19FTUFDMF9PVVRfRU4gKyBwb3J0KjQsIDApOwotCi0JLyogU3RvcCBCaWdNYWMgcnggKi8KLQlibngyeF9ibWFjX3J4X2Rpc2FibGUoYnAsIHBvcnQpOwotCi0JLyogZGlzYWJsZSBlbWFjICovCi0JUkVHX1dSKGJwLCBOSUdfUkVHX05JR19FTUFDMF9FTiArIHBvcnQqNCwgMCk7Ci0KLQltc2xlZXAoMTApOwotCS8qIFRoZSBQSFkgcmVzZXQgaXMgY29udHJvbGVkIGJ5IEdQSU8gMQotCSAqIEhvbGQgaXQgYXMgdmFycyBsb3cKLQkgKi8KLQkgLyogY2xlYXIgbGluayBsZWQgKi8KLQlibngyeF9zZXRfbGVkKHBhcmFtcywgTEVEX01PREVfT0ZGLCAwKTsKLQlpZiAocmVzZXRfZXh0X3BoeSkgewotCQlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgewotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVDoKLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3OgotCQl7Ci0KLQkJCS8qIERpc2FibGUgVHJhbnNtaXR0ZXIgKi8KLQkJCXU4IGV4dF9waHlfYWRkciA9Ci0JCQkJWEdYU19FWFRfUEhZX0FERFIocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7Ci0JCQlpZiAoKHZhbCAmIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9NQVNLKSA9PQotCQkJICAgIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9ESVNBQkxFX1RYX0xBU0VSKQotCQkJCWJueDJ4X3NmcF9zZXRfdHJhbnNtaXR0ZXIoYnAsIHBvcnQsCi0JCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcsCi0JCQkJCWV4dF9waHlfYWRkciwgMCk7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzM6Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIlNldHRpbmcgODA3MyBwb3J0ICVkIGludG8gIgotCQkJCSAibG93IHBvd2VyIG1vZGVcbiIsCi0JCQkJIHBvcnQpOwotCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMiwKLQkJCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1csCi0JCQkJCSAgcG9ydCk7Ci0JCQlicmVhazsKLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgotCQl7Ci0JCQl1OCBleHRfcGh5X2FkZHIgPQotCQkJCVhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwotCQkJLyogU2V0IHNvZnQgcmVzZXQgKi8KLQkJCWJueDJ4Xzg3MjZfcmVzZXRfcGh5KGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfYWRkcik7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODIzOgotCQl7Ci0JCQl1OCBleHRfcGh5X2FkZHIgPQotCQkJCVhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwotCQkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSwKLQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgICBNRElPX0FOX0RFVkFELAotCQkJCSAgICAgICBNRElPX0FOX1JFR19DVFJMLCAweDAwMDApOwotCQkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSwKLQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsIDEpOwotCQkJYnJlYWs7Ci0JCX0KLQkJZGVmYXVsdDoKLQkJCS8qIEhXIHJlc2V0ICovCi0JCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18xLAotCQkJCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0xPVywKLQkJCQkJICBwb3J0KTsKLQkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzIsCi0JCQkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfTE9XLAotCQkJCQkgIHBvcnQpOwotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJyZXNldCBleHRlcm5hbCBQSFlcbiIpOwotCQl9Ci0JfQotCS8qIHJlc2V0IHRoZSBTZXJEZXMvWEdYUyAqLwotCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzNfQ0xFQVIsCi0JICAgICAgICgweDFmZiA8PCAocG9ydCoxNikpKTsKLQotCS8qIHJlc2V0IEJpZ01hYyAqLwotCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfQ0xFQVIsCi0JICAgICAgIChNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9SU1RfQk1BQzAgPDwgcG9ydCkpOwotCi0JLyogZGlzYWJsZSBuaWcgaW5ncmVzcyBpbnRlcmZhY2UgKi8KLQlSRUdfV1IoYnAsIE5JR19SRUdfQk1BQzBfSU5fRU4gKyBwb3J0KjQsIDApOwotCVJFR19XUihicCwgTklHX1JFR19FTUFDMF9JTl9FTiArIHBvcnQqNCwgMCk7Ci0JUkVHX1dSKGJwLCBOSUdfUkVHX0JNQUMwX09VVF9FTiArIHBvcnQqNCwgMCk7Ci0JUkVHX1dSKGJwLCBOSUdfUkVHX0VHUkVTU19FTUFDMF9PVVRfRU4gKyBwb3J0KjQsIDApOwotCXZhcnMtPmxpbmtfdXAgPSAwOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTggYm54MnhfdXBkYXRlX2xpbmtfZG93bihzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKLQkJCSAgICAgICBzdHJ1Y3QgbGlua192YXJzICp2YXJzKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7Ci0KLQlEUChORVRJRl9NU0dfTElOSywgIlBvcnQgJXg6IExpbmsgaXMgZG93blxuIiwgcG9ydCk7Ci0JYm54Mnhfc2V0X2xlZChwYXJhbXMsIExFRF9NT0RFX09GRiwgMCk7Ci0KLQkvKiBpbmRpY2F0ZSBubyBtYWMgYWN0aXZlICovCi0JdmFycy0+bWFjX3R5cGUgPSBNQUNfVFlQRV9OT05FOwotCi0JLyogdXBkYXRlIHNoYXJlZCBtZW1vcnkgKi8KLQl2YXJzLT5saW5rX3N0YXR1cyA9IDA7Ci0JdmFycy0+bGluZV9zcGVlZCA9IDA7Ci0JYm54MnhfdXBkYXRlX21uZyhwYXJhbXMsIHZhcnMtPmxpbmtfc3RhdHVzKTsKLQotCS8qIGFjdGl2YXRlIG5pZyBkcmFpbiAqLwotCVJFR19XUihicCwgTklHX1JFR19FR1JFU1NfRFJBSU4wX01PREUgKyBwb3J0KjQsIDEpOwotCi0JLyogZGlzYWJsZSBlbWFjICovCi0JUkVHX1dSKGJwLCBOSUdfUkVHX05JR19FTUFDMF9FTiArIHBvcnQqNCwgMCk7Ci0KLQltc2xlZXAoMTApOwotCi0JLyogcmVzZXQgQmlnTWFjICovCi0JYm54MnhfYm1hY19yeF9kaXNhYmxlKGJwLCBwYXJhbXMtPnBvcnQpOwotCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsKLQkJICAgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfQ0xFQVIsCi0JCSAgIChNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9SU1RfQk1BQzAgPDwgcG9ydCkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTggYm54MnhfdXBkYXRlX2xpbmtfdXAoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCi0JCQkgICAgIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMsCi0JCQkgICAgIHU4IGxpbmtfMTBnLCB1MzIgZ3Bfc3RhdHVzKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7Ci0JdTggcmMgPSAwOwotCi0JdmFycy0+bGlua19zdGF0dXMgfD0gTElOS19TVEFUVVNfTElOS19VUDsKLQlpZiAobGlua18xMGcpIHsKLQkJYm54MnhfYm1hY19lbmFibGUocGFyYW1zLCB2YXJzLCAwKTsKLQkJYm54Mnhfc2V0X2xlZChwYXJhbXMsIExFRF9NT0RFX09QRVIsIFNQRUVEXzEwMDAwKTsKLQl9IGVsc2UgewotCQlyYyA9IGJueDJ4X2VtYWNfcHJvZ3JhbShwYXJhbXMsIHZhcnMtPmxpbmVfc3BlZWQsCi0JCQkJICAgICAgdmFycy0+ZHVwbGV4KTsKLQotCQlibngyeF9lbWFjX2VuYWJsZShwYXJhbXMsIHZhcnMsIDApOwotCi0JCS8qIEFOIGNvbXBsZXRlPyAqLwotCQlpZiAoZ3Bfc3RhdHVzICYgTURJT19BTl9DTDczX09SXzM3X0NPTVBMRVRFKSB7Ci0JCQlpZiAoISh2YXJzLT5waHlfZmxhZ3MgJgotCQkJICAgICAgUEhZX1NHTUlJX0ZMQUcpKQotCQkJCWJueDJ4X3NldF9nbWlpX3R4X2RyaXZlcihwYXJhbXMpOwotCQl9Ci0JfQotCi0JLyogUEJGIC0gbGluayB1cCAqLwotCXJjIHw9IGJueDJ4X3BiZl91cGRhdGUocGFyYW1zLCB2YXJzLT5mbG93X2N0cmwsCi0JCQkgICAgICB2YXJzLT5saW5lX3NwZWVkKTsKLQotCS8qIGRpc2FibGUgZHJhaW4gKi8KLQlSRUdfV1IoYnAsIE5JR19SRUdfRUdSRVNTX0RSQUlOMF9NT0RFICsgcG9ydCo0LCAwKTsKLQotCS8qIHVwZGF0ZSBzaGFyZWQgbWVtb3J5ICovCi0JYm54MnhfdXBkYXRlX21uZyhwYXJhbXMsIHZhcnMtPmxpbmtfc3RhdHVzKTsKLQltc2xlZXAoMjApOwotCXJldHVybiByYzsKLX0KLS8qIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGNhbGxlZCB1cG9uIGxpbmsgaW50ZXJydXB0ICovCi0vKiBJbiBjYXNlIHZhcnMtPmxpbmtfdXAsIGRyaXZlciBuZWVkcyB0bwotCTEuIFVwZGF0ZSB0aGUgcGJmCi0JMi4gRGlzYWJsZSBkcmFpbgotCTMuIFVwZGF0ZSB0aGUgc2hhcmVkIG1lbW9yeQotCTQuIEluZGljYXRlIGxpbmsgdXAKLQk1LiBTZXQgTEVEcwotICAgT3RoZXJ3aXNlLAotCTEuIFVwZGF0ZSBzaGFyZWQgbWVtb3J5Ci0JMi4gUmVzZXQgQmlnTWFjCi0JMy4gUmVwb3J0IGxpbmsgZG93bgotCTQuIFVuc2V0IExFRHMKLSovCi11OCBibngyeF9saW5rX3VwZGF0ZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgc3RydWN0IGxpbmtfdmFycyAqdmFycykKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKLQl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OwotCXUxNiBncF9zdGF0dXM7Ci0JdTggbGlua18xMGc7Ci0JdTggZXh0X3BoeV9saW5rX3VwLCByYyA9IDA7Ci0JdTMyIGV4dF9waHlfdHlwZTsKLQl1OCBpc19taV9pbnQgPSAwOwotCi0JRFAoTkVUSUZfTVNHX0xJTkssICJwb3J0ICV4LCBYR1hTPyV4LCBpbnRfc3RhdHVzIDB4JXhcbiIsCi0JCSBwb3J0LCAodmFycy0+cGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRyksCi0JCSBSRUdfUkQoYnAsIE5JR19SRUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCkpOwotCi0JaXNfbWlfaW50ID0gKHU4KShSRUdfUkQoYnAsIE5JR19SRUdfRU1BQzBfU1RBVFVTX01JU0NfTUlfSU5UICsKLQkJCQkgICAgcG9ydCoweDE4KSA+IDApOwotCURQKE5FVElGX01TR19MSU5LLCAiaW50X21hc2sgMHgleCBNSV9JTlQgJXgsIFNFUkRFU19MSU5LICV4XG4iLAotCQkgUkVHX1JEKGJwLCBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0KSwKLQkJIGlzX21pX2ludCwKLQkJIFJFR19SRChicCwKLQkJCSAgICBOSUdfUkVHX1NFUkRFUzBfU1RBVFVTX0xJTktfU1RBVFVTICsgcG9ydCoweDNjKSk7Ci0KLQlEUChORVRJRl9NU0dfTElOSywgIiAxMEcgJXgsIFhHWFNfTElOSyAleFxuIiwKLQkgIFJFR19SRChicCwgTklHX1JFR19YR1hTMF9TVEFUVVNfTElOSzEwRyArIHBvcnQqMHg2OCksCi0JICBSRUdfUkQoYnAsIE5JR19SRUdfWEdYUzBfU1RBVFVTX0xJTktfU1RBVFVTICsgcG9ydCoweDY4KSk7Ci0KLQkvKiBkaXNhYmxlIGVtYWMgKi8KLQlSRUdfV1IoYnAsIE5JR19SRUdfTklHX0VNQUMwX0VOICsgcG9ydCo0LCAwKTsKLQotCWV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwotCi0JLyogQ2hlY2sgZXh0ZXJuYWwgbGluayBjaGFuZ2Ugb25seSBmb3Igbm9uLWRpcmVjdCAqLwotCWV4dF9waHlfbGlua191cCA9IGJueDJ4X2V4dF9waHlfaXNfbGlua191cChwYXJhbXMsIHZhcnMsIGlzX21pX2ludCk7Ci0KLQkvKiBSZWFkIGdwX3N0YXR1cyAqLwotCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwb3J0LCBwYXJhbXMtPnBoeV9hZGRyLAotCQkJICAgICAgTURJT19SRUdfQkFOS19HUF9TVEFUVVMsCi0JCQkgICAgICBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMSwKLQkJCSAgICAgICZncF9zdGF0dXMpOwotCi0JcmMgPSBibngyeF9saW5rX3NldHRpbmdzX3N0YXR1cyhwYXJhbXMsIHZhcnMsIGdwX3N0YXR1cywKLQkJCQkgICAgICBleHRfcGh5X2xpbmtfdXApOwotCWlmIChyYyAhPSAwKQotCQlyZXR1cm4gcmM7Ci0KLQkvKiBhbnl0aGluZyAxMCBhbmQgb3ZlciB1c2VzIHRoZSBibWFjICovCi0JbGlua18xMGcgPSAoKHZhcnMtPmxpbmVfc3BlZWQgPT0gU1BFRURfMTAwMDApIHx8Ci0JCSAgICAodmFycy0+bGluZV9zcGVlZCA9PSBTUEVFRF8xMjAwMCkgfHwKLQkJICAgICh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEXzEyNTAwKSB8fAotCQkgICAgKHZhcnMtPmxpbmVfc3BlZWQgPT0gU1BFRURfMTMwMDApIHx8Ci0JCSAgICAodmFycy0+bGluZV9zcGVlZCA9PSBTUEVFRF8xNTAwMCkgfHwKLQkJICAgICh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEXzE2MDAwKSk7Ci0KLQlibngyeF9saW5rX2ludF9hY2socGFyYW1zLCB2YXJzLCBsaW5rXzEwZywgaXNfbWlfaW50KTsKLQotCS8qIEluIGNhc2UgZXh0ZXJuYWwgcGh5IGxpbmsgaXMgdXAsIGFuZCBpbnRlcm5hbCBsaW5rIGlzIGRvd24KLQkoIG5vdCBpbml0aWFsaXplZCB5ZXQgcHJvYmFibHkgYWZ0ZXIgbGluayBpbml0aWFsaXphdGlvbiwgaXQgbmVlZHMKLQl0byBiZSBpbml0aWFsaXplZC4KLQlOb3RlIHRoYXQgYWZ0ZXIgbGluayBkb3duLXVwIGFzIHJlc3VsdCBvZiBjYWJsZSBwbHVnLAotCXRoZSB4Z3hzIGxpbmsgd291bGQgcHJvYmFibHkgYmVjb21lIHVwIGFnYWluIHdpdGhvdXQgdGhlIG5lZWQgdG8KLQlpbml0aWFsaXplIGl0Ki8KLQotCWlmICgoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX1RZUEVfRElSRUNUKSAmJgotCSAgICAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDUpICYmCi0JICAgIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNikgJiYKLQkgICAgKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2KSAmJgotCSAgICAoZXh0X3BoeV9saW5rX3VwICYmICF2YXJzLT5waHlfbGlua191cCkpCi0JCWJueDJ4X2luaXRfaW50ZXJuYWxfcGh5KHBhcmFtcywgdmFycywgMCk7Ci0KLQkvKiBsaW5rIGlzIHVwIG9ubHkgaWYgYm90aCBsb2NhbCBwaHkgYW5kIGV4dGVybmFsIHBoeSBhcmUgdXAgKi8KLQl2YXJzLT5saW5rX3VwID0gKGV4dF9waHlfbGlua191cCAmJiB2YXJzLT5waHlfbGlua191cCk7Ci0KLQlpZiAodmFycy0+bGlua191cCkKLQkJcmMgPSBibngyeF91cGRhdGVfbGlua191cChwYXJhbXMsIHZhcnMsIGxpbmtfMTBnLCBncF9zdGF0dXMpOwotCWVsc2UKLQkJcmMgPSBibngyeF91cGRhdGVfbGlua19kb3duKHBhcmFtcywgdmFycyk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB1OCBibngyeF84MDczX2NvbW1vbl9pbml0X3BoeShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgc2htZW1fYmFzZSkKLXsKLQl1OCBleHRfcGh5X2FkZHJbUE9SVF9NQVhdOwotCXUxNiB2YWw7Ci0JczggcG9ydDsKLQotCS8qIFBBUlQxIC0gUmVzZXQgYm90aCBwaHlzICovCi0JZm9yIChwb3J0ID0gUE9SVF9NQVggLSAxOyBwb3J0ID49IFBPUlRfMDsgcG9ydC0tKSB7Ci0JCS8qIEV4dHJhY3QgdGhlIGV4dCBwaHkgYWRkcmVzcyBmb3IgdGhlIHBvcnQgKi8KLQkJdTMyIGV4dF9waHlfY29uZmlnID0gUkVHX1JEKGJwLCBzaG1lbV9iYXNlICsKLQkJCQkJb2Zmc2V0b2Yoc3RydWN0IHNobWVtX3JlZ2lvbiwKLQkJICAgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0uZXh0ZXJuYWxfcGh5X2NvbmZpZykpOwotCi0JCS8qIGRpc2FibGUgYXR0ZW50aW9ucyAqLwotCQlibngyeF9iaXRzX2RpcyhicCwgTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCwKLQkJCSAgICAgKE5JR19NQVNLX1hHWFMwX0xJTktfU1RBVFVTIHwKLQkJCSAgICAgIE5JR19NQVNLX1hHWFMwX0xJTksxMEcgfAotCQkJICAgICAgTklHX01BU0tfU0VSREVTMF9MSU5LX1NUQVRVUyB8Ci0JCQkgICAgICBOSUdfTUFTS19NSV9JTlQpKTsKLQotCQlleHRfcGh5X2FkZHJbcG9ydF0gPSBYR1hTX0VYVF9QSFlfQUREUihleHRfcGh5X2NvbmZpZyk7Ci0KLQkJLyogTmVlZCB0byB0YWtlIHRoZSBwaHkgb3V0IG9mIGxvdyBwb3dlciBtb2RlIGluIG9yZGVyCi0JCQl0byB3cml0ZSB0byBhY2Nlc3MgaXRzIHJlZ2lzdGVycyAqLwotCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18yLAotCQkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfSElHSCwgcG9ydCk7Ci0KLQkJLyogUmVzZXQgdGhlIHBoeSAqLwotCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCi0JCQkgICAgICAgZXh0X3BoeV9hZGRyW3BvcnRdLAotCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJICAgICAgIE1ESU9fUE1BX1JFR19DVFJMLAotCQkJICAgICAgIDE8PDE1KTsKLQl9Ci0KLQkvKiBBZGQgZGVsYXkgb2YgMTUwbXMgYWZ0ZXIgcmVzZXQgKi8KLQltc2xlZXAoMTUwKTsKLQotCS8qIFBBUlQyIC0gRG93bmxvYWQgZmlybXdhcmUgdG8gYm90aCBwaHlzICovCi0JZm9yIChwb3J0ID0gUE9SVF9NQVggLSAxOyBwb3J0ID49IFBPUlRfMDsgcG9ydC0tKSB7Ci0JCXUxNiBmd192ZXIxOwotCi0JCWJueDJ4X2JjbTgwNzNfZXh0ZXJuYWxfcm9tX2Jvb3QoYnAsIHBvcnQsCi0JCQkJCSAgICAgIGV4dF9waHlfYWRkcltwb3J0XSwgc2htZW1fYmFzZSk7Ci0KLQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LCBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAotCQkJICAgICAgZXh0X3BoeV9hZGRyW3BvcnRdLAotCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjEsICZmd192ZXIxKTsKLQkJaWYgKGZ3X3ZlcjEgPT0gMCB8fCBmd192ZXIxID09IDB4NDMyMSkgewotCQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkJICJibngyeF84MDczX2NvbW1vbl9pbml0X3BoeSBwb3J0ICV4OiIKLQkJCQkgIkRvd25sb2FkIGZhaWxlZC4gZncgdmVyc2lvbiA9IDB4JXhcbiIsCi0JCQkJIHBvcnQsIGZ3X3ZlcjEpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQkvKiBPbmx5IHNldCBiaXQgMTAgPSAxIChUeCBwb3dlciBkb3duKSAqLwotCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCi0JCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAotCQkJICAgICAgZXh0X3BoeV9hZGRyW3BvcnRdLAotCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICBNRElPX1BNQV9SRUdfVFhfUE9XRVJfRE9XTiwgJnZhbCk7Ci0KLQkJLyogUGhhc2UxIG9mIFRYX1BPV0VSX0RPV04gcmVzZXQgKi8KLQkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAotCQkJICAgICAgIGV4dF9waHlfYWRkcltwb3J0XSwKLQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCSAgICAgICBNRElPX1BNQV9SRUdfVFhfUE9XRVJfRE9XTiwKLQkJCSAgICAgICAodmFsIHwgMTw8MTApKTsKLQl9Ci0KLQkvKiBUb2dnbGUgVHJhbnNtaXR0ZXI6IFBvd2VyIGRvd24gYW5kIHRoZW4gdXAgd2l0aCA2MDBtcwotCSAgIGRlbGF5IGJldHdlZW4gKi8KLQltc2xlZXAoNjAwKTsKLQotCS8qIFBBUlQzIC0gY29tcGxldGUgVFhfUE9XRVJfRE9XTiBwcm9jZXNzLCBhbmQgc2V0IEdQSU8yIGJhY2sgdG8gbG93ICovCi0JZm9yIChwb3J0ID0gUE9SVF9NQVggLSAxOyBwb3J0ID49IFBPUlRfMDsgcG9ydC0tKSB7Ci0JCS8qIFBoYXNlMiBvZiBQT1dFUl9ET1dOX1JFU0VUICovCi0JCS8qIFJlbGVhc2UgYml0IDEwIChSZWxlYXNlIFR4IHBvd2VyIGRvd24pICovCi0JCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKLQkJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCi0JCQkgICAgICBleHRfcGh5X2FkZHJbcG9ydF0sCi0JCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCSAgICAgIE1ESU9fUE1BX1JFR19UWF9QT1dFUl9ET1dOLCAmdmFsKTsKLQotCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCi0JCQkgICAgICAgZXh0X3BoeV9hZGRyW3BvcnRdLAotCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJICAgICAgIE1ESU9fUE1BX1JFR19UWF9QT1dFUl9ET1dOLCAodmFsICYgKH4oMTw8MTApKSkpOwotCQltc2xlZXAoMTUpOwotCi0JCS8qIFJlYWQgbW9kaWZ5IHdyaXRlIHRoZSBTUEktUk9NIHZlcnNpb24gc2VsZWN0IHJlZ2lzdGVyICovCi0JCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKLQkJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCi0JCQkgICAgICBleHRfcGh5X2FkZHJbcG9ydF0sCi0JCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCSAgICAgIE1ESU9fUE1BX1JFR19FRENfRkZFX01BSU4sICZ2YWwpOwotCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKLQkJCSAgICAgIGV4dF9waHlfYWRkcltwb3J0XSwKLQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJICAgICAgTURJT19QTUFfUkVHX0VEQ19GRkVfTUFJTiwgKHZhbCB8ICgxPDwxMikpKTsKLQotCQkvKiBzZXQgR1BJTzIgYmFjayB0byBMT1cgKi8KLQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMiwKLQkJCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0xPVywgcG9ydCk7Ci0JfQotCXJldHVybiAwOwotCi19Ci0KLXN0YXRpYyB1OCBibngyeF84NzI3X2NvbW1vbl9pbml0X3BoeShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgc2htZW1fYmFzZSkKLXsKLQl1OCBleHRfcGh5X2FkZHJbUE9SVF9NQVhdOwotCXM4IHBvcnQsIGZpcnN0X3BvcnQsIGk7Ci0JdTMyIHN3YXBfdmFsLCBzd2FwX292ZXJyaWRlOwotCURQKE5FVElGX01TR19MSU5LLCAiRXhlY3V0aW5nIEJDTTg3MjcgY29tbW9uIGluaXRcbiIpOwotCXN3YXBfdmFsID0gUkVHX1JEKGJwLCAgTklHX1JFR19QT1JUX1NXQVApOwotCXN3YXBfb3ZlcnJpZGUgPSBSRUdfUkQoYnAsICBOSUdfUkVHX1NUUkFQX09WRVJSSURFKTsKLQotCWJueDJ4X2V4dF9waHlfaHdfcmVzZXQoYnAsIDEgXiAoc3dhcF92YWwgJiYgc3dhcF9vdmVycmlkZSkpOwotCW1zbGVlcCg1KTsKLQotCWlmIChzd2FwX3ZhbCAmJiBzd2FwX292ZXJyaWRlKQotCQlmaXJzdF9wb3J0ID0gUE9SVF8wOwotCWVsc2UKLQkJZmlyc3RfcG9ydCA9IFBPUlRfMTsKLQotCS8qIFBBUlQxIC0gUmVzZXQgYm90aCBwaHlzICovCi0JZm9yIChpID0gMCwgcG9ydCA9IGZpcnN0X3BvcnQ7IGkgPCBQT1JUX01BWDsgaSsrLCBwb3J0ID0gIXBvcnQpIHsKLQkJLyogRXh0cmFjdCB0aGUgZXh0IHBoeSBhZGRyZXNzIGZvciB0aGUgcG9ydCAqLwotCQl1MzIgZXh0X3BoeV9jb25maWcgPSBSRUdfUkQoYnAsIHNobWVtX2Jhc2UgKwotCQkJCQlvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLAotCQkgICBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5leHRlcm5hbF9waHlfY29uZmlnKSk7Ci0KLQkJLyogZGlzYWJsZSBhdHRlbnRpb25zICovCi0JCWJueDJ4X2JpdHNfZGlzKGJwLCBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0LAotCQkJICAgICAoTklHX01BU0tfWEdYUzBfTElOS19TVEFUVVMgfAotCQkJICAgICAgTklHX01BU0tfWEdYUzBfTElOSzEwRyB8Ci0JCQkgICAgICBOSUdfTUFTS19TRVJERVMwX0xJTktfU1RBVFVTIHwKLQkJCSAgICAgIE5JR19NQVNLX01JX0lOVCkpOwotCi0JCWV4dF9waHlfYWRkcltwb3J0XSA9IFhHWFNfRVhUX1BIWV9BRERSKGV4dF9waHlfY29uZmlnKTsKLQotCQkvKiBSZXNldCB0aGUgcGh5ICovCi0JCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNywKLQkJCSAgICAgICBleHRfcGh5X2FkZHJbcG9ydF0sCi0JCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsCi0JCQkgICAgICAgMTw8MTUpOwotCX0KLQotCS8qIEFkZCBkZWxheSBvZiAxNTBtcyBhZnRlciByZXNldCAqLwotCW1zbGVlcCgxNTApOwotCi0JLyogUEFSVDIgLSBEb3dubG9hZCBmaXJtd2FyZSB0byBib3RoIHBoeXMgKi8KLQlmb3IgKGkgPSAwLCBwb3J0ID0gZmlyc3RfcG9ydDsgaSA8IFBPUlRfTUFYOyBpKyssIHBvcnQgPSAhcG9ydCkgewotCQl1MTYgZndfdmVyMTsKLQotCQlibngyeF9iY204NzI3X2V4dGVybmFsX3JvbV9ib290KGJwLCBwb3J0LAotCQkJCQkgICAgICBleHRfcGh5X2FkZHJbcG9ydF0sIHNobWVtX2Jhc2UpOwotCi0JCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNywKLQkJCSAgICAgIGV4dF9waHlfYWRkcltwb3J0XSwKLQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIxLCAmZndfdmVyMSk7Ci0JCWlmIChmd192ZXIxID09IDAgfHwgZndfdmVyMSA9PSAweDQzMjEpIHsKLQkJCURQKE5FVElGX01TR19MSU5LLAotCQkJCSAiYm54MnhfODcyN19jb21tb25faW5pdF9waHkgcG9ydCAleDoiCi0JCQkJICJEb3dubG9hZCBmYWlsZWQuIGZ3IHZlcnNpb24gPSAweCV4XG4iLAotCQkJCSBwb3J0LCBmd192ZXIxKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIHU4IGJueDJ4Xzg3MjZfY29tbW9uX2luaXRfcGh5KHN0cnVjdCBibngyeCAqYnAsIHUzMiBzaG1lbV9iYXNlKQotewotCXU4IGV4dF9waHlfYWRkcjsKLQl1MzIgdmFsOwotCXM4IHBvcnQ7Ci0KLQkvKiBVc2UgcG9ydDEgYmVjYXVzZSBvZiB0aGUgc3RhdGljIHBvcnQtc3dhcCAqLwotCS8qIEVuYWJsZSB0aGUgbW9kdWxlIGRldGVjdGlvbiBpbnRlcnJ1cHQgKi8KLQl2YWwgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX0dQSU9fRVZFTlRfRU4pOwotCXZhbCB8PSAoKDE8PE1JU0NfUkVHSVNURVJTX0dQSU9fMyl8Ci0JCSgxPDwoTUlTQ19SRUdJU1RFUlNfR1BJT18zICsgTUlTQ19SRUdJU1RFUlNfR1BJT19QT1JUX1NISUZUKSkpOwotCVJFR19XUihicCwgTUlTQ19SRUdfR1BJT19FVkVOVF9FTiwgdmFsKTsKLQotCWJueDJ4X2V4dF9waHlfaHdfcmVzZXQoYnAsIDEpOwotCW1zbGVlcCg1KTsKLQlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgUE9SVF9NQVg7IHBvcnQrKykgewotCQkvKiBFeHRyYWN0IHRoZSBleHQgcGh5IGFkZHJlc3MgZm9yIHRoZSBwb3J0ICovCi0JCXUzMiBleHRfcGh5X2NvbmZpZyA9IFJFR19SRChicCwgc2htZW1fYmFzZSArCi0JCQkJCW9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sCi0JCQlkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5leHRlcm5hbF9waHlfY29uZmlnKSk7Ci0KLQkJZXh0X3BoeV9hZGRyID0gWEdYU19FWFRfUEhZX0FERFIoZXh0X3BoeV9jb25maWcpOwotCQlEUChORVRJRl9NU0dfTElOSywgIjg3MjZfY29tbW9uX2luaXQgOiBleHRfcGh5X2FkZHIgPSAweCV4XG4iLAotCQkJIGV4dF9waHlfYWRkcik7Ci0KLQkJYm54MnhfODcyNl9yZXNldF9waHkoYnAsIHBvcnQsIGV4dF9waHlfYWRkcik7Ci0KLQkJLyogU2V0IGZhdWx0IG1vZHVsZSBkZXRlY3RlZCBMRUQgb24gKi8KLQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMCwKLQkJCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fSElHSCwKLQkJCQkgIHBvcnQpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyB1OCBibngyeF84NDgyM19jb21tb25faW5pdF9waHkoc3RydWN0IGJueDJ4ICpicCwgdTMyIHNobWVtX2Jhc2UpCi17Ci0JLyogSFcgcmVzZXQgKi8KLQlibngyeF9leHRfcGh5X2h3X3Jlc2V0KGJwLCAxKTsKLQlyZXR1cm4gMDsKLX0KLXU4IGJueDJ4X2NvbW1vbl9pbml0X3BoeShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgc2htZW1fYmFzZSkKLXsKLQl1OCByYyA9IDA7Ci0JdTMyIGV4dF9waHlfdHlwZTsKLQotCURQKE5FVElGX01TR19MSU5LLCAiQmVnaW4gY29tbW9uIHBoeSBpbml0XG4iKTsKLQotCS8qIFJlYWQgdGhlIGV4dF9waHlfdHlwZSBmb3IgYXJiaXRyYXJ5IHBvcnQoMCkgKi8KLQlleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRSgKLQkJCVJFR19SRChicCwgc2htZW1fYmFzZSArCi0JCQkgICBvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLAotCQkJICAgICBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1swXS5leHRlcm5hbF9waHlfY29uZmlnKSkpOwotCi0Jc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKLQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzM6Ci0JewotCQlyYyA9IGJueDJ4XzgwNzNfY29tbW9uX2luaXRfcGh5KGJwLCBzaG1lbV9iYXNlKTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3OgotCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyN19OT0M6Ci0JCXJjID0gYm54MnhfODcyN19jb21tb25faW5pdF9waHkoYnAsIHNobWVtX2Jhc2UpOwotCQlicmVhazsKLQotCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKLQkJLyogR1BJTzEgYWZmZWN0cyBib3RoIHBvcnRzLCBzbyB0aGVyZSdzIG5lZWQgdG8gcHVsbAotCQlpdCBmb3Igc2luZ2xlIHBvcnQgYWxvbmUgKi8KLQkJcmMgPSBibngyeF84NzI2X2NvbW1vbl9pbml0X3BoeShicCwgc2htZW1fYmFzZSk7Ci0JCWJyZWFrOwotCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MjM6Ci0JCXJjID0gYm54MnhfODQ4MjNfY29tbW9uX2luaXRfcGh5KGJwLCBzaG1lbV9iYXNlKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkgImJueDJ4X2NvbW1vbl9pbml0X3BoeTogZXh0X3BoeSAweCV4IG5vdCByZXF1aXJlZFxuIiwKLQkJCSBleHRfcGh5X3R5cGUpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXZvaWQgYm54Mnhfc2Z4NzEwMV9zcF9zd19yZXNldChzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LCB1OCBwaHlfYWRkcikKLXsKLQl1MTYgdmFsLCBjbnQ7Ci0KLQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCi0JCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCi0JCSAgICAgIHBoeV9hZGRyLAotCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJICAgICAgTURJT19QTUFfUkVHXzcxMDFfUkVTRVQsICZ2YWwpOwotCi0JZm9yIChjbnQgPSAwOyBjbnQgPCAxMDsgY250KyspIHsKLQkJbXNsZWVwKDUwKTsKLQkJLyogV3JpdGVzIGEgc2VsZi1jbGVhcmluZyByZXNldCAqLwotCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCi0JCQkgICAgICAgcGh5X2FkZHIsCi0JCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICAgTURJT19QTUFfUkVHXzcxMDFfUkVTRVQsCi0JCQkgICAgICAgKHZhbCB8ICgxPDwxNSkpKTsKLQkJLyogV2FpdCBmb3IgY2xlYXIgKi8KLQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAotCQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKLQkJCSAgICAgIHBoeV9hZGRyLAotCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICBNRElPX1BNQV9SRUdfNzEwMV9SRVNFVCwgJnZhbCk7Ci0KLQkJaWYgKCh2YWwgJiAoMTw8MTUpKSA9PSAwKQotCQkJYnJlYWs7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm54MnhfbWFpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2ZmNWIzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X21haW4uYworKysgL2Rldi9udWxsCkBAIC0xLDEzOTE2ICswLDAgQEAKLS8qIGJueDJ4X21haW4uYzogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBNYWludGFpbmVkIGJ5OiBFaWxvbiBHcmVlbnN0ZWluIDxlaWxvbmdAYnJvYWRjb20uY29tPgotICogV3JpdHRlbiBieTogRWxpZXplciBUYW1pcgotICogQmFzZWQgb24gY29kZSBmcm9tIE1pY2hhZWwgQ2hhbidzIGJueDIgZHJpdmVyCi0gKiBVRFAgQ1NVTSBlcnJhdGEgd29ya2Fyb3VuZCBieSBBcmlrIEdlbmRlbG1hbgotICogU2xvd3BhdGggYW5kIGZhc3RwYXRoIHJld29yayBieSBWbGFkaXNsYXYgWm9sb3Rhcm92Ci0gKiBTdGF0aXN0aWNzIGFuZCBMaW5rIG1hbmFnZW1lbnQgYnkgWWl0Y2hhayBHZXJ0bmVyCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPiAgLyogZm9yIGRldl9pbmZvKCkgKi8KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgotI2luY2x1ZGUgPG5ldC9pcC5oPgotI2luY2x1ZGUgPG5ldC90Y3AuaD4KLSNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KLSNpbmNsdWRlIDxuZXQvaXA2X2NoZWNrc3VtLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9jcmMzMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgotI2luY2x1ZGUgPGxpbnV4L3psaWIuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgotCi0KLSNpbmNsdWRlICJibngyeC5oIgotI2luY2x1ZGUgImJueDJ4X2luaXQuaCIKLSNpbmNsdWRlICJibngyeF9pbml0X29wcy5oIgotI2luY2x1ZGUgImJueDJ4X2R1bXAuaCIKLQotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjEuNTIuNTMtMSIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSIyMDEwLzE4LzA0IgotI2RlZmluZSBCTlgyWF9CQ19WRVIJCTB4MDQwMjAwCi0KLSNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgotI2luY2x1ZGUgImJueDJ4X2Z3X2ZpbGVfaGRyLmgiCi0vKiBGVyBmaWxlcyAqLwotI2RlZmluZSBGV19GSUxFX1ZFUlNJT04JCQkJCVwKLQlfX3N0cmluZ2lmeShCQ01fNTcxMF9GV19NQUpPUl9WRVJTSU9OKSAiLiIJXAotCV9fc3RyaW5naWZ5KEJDTV81NzEwX0ZXX01JTk9SX1ZFUlNJT04pICIuIglcCi0JX19zdHJpbmdpZnkoQkNNXzU3MTBfRldfUkVWSVNJT05fVkVSU0lPTikgIi4iCVwKLQlfX3N0cmluZ2lmeShCQ01fNTcxMF9GV19FTkdJTkVFUklOR19WRVJTSU9OKQotI2RlZmluZSBGV19GSUxFX05BTUVfRTEJCSJibngyeC1lMS0iIEZXX0ZJTEVfVkVSU0lPTiAiLmZ3IgotI2RlZmluZSBGV19GSUxFX05BTUVfRTFICSJibngyeC1lMWgtIiBGV19GSUxFX1ZFUlNJT04gIi5mdyIKLQotLyogVGltZSBpbiBqaWZmaWVzIGJlZm9yZSBjb25jbHVkaW5nIHRoZSB0cmFuc21pdHRlciBpcyBodW5nICovCi0jZGVmaW5lIFRYX1RJTUVPVVQJCSg1KkhaKQotCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9Ci0JIkJyb2FkY29tIE5ldFh0cmVtZSBJSSA1NzcxeCAxMEdpZ2FiaXQgRXRoZXJuZXQgRHJpdmVyICIKLQlEUlZfTU9EVUxFX05BTUUgIiAiIERSVl9NT0RVTEVfVkVSU0lPTiAiICgiIERSVl9NT0RVTEVfUkVMREFURSAiKVxuIjsKLQotTU9EVUxFX0FVVEhPUigiRWxpZXplciBUYW1pciIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJCcm9hZGNvbSBOZXRYdHJlbWUgSUkgQkNNNTc3MTAvNTc3MTEvNTc3MTFFIERyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX1ZFUlNJT04oRFJWX01PRFVMRV9WRVJTSU9OKTsKLU1PRFVMRV9GSVJNV0FSRShGV19GSUxFX05BTUVfRTEpOwotTU9EVUxFX0ZJUk1XQVJFKEZXX0ZJTEVfTkFNRV9FMUgpOwotCi1zdGF0aWMgaW50IG11bHRpX21vZGUgPSAxOwotbW9kdWxlX3BhcmFtKG11bHRpX21vZGUsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG11bHRpX21vZGUsICIgTXVsdGkgcXVldWUgbW9kZSAiCi0JCQkgICAgICIoMCBEaXNhYmxlOyAxIEVuYWJsZSAoZGVmYXVsdCkpIik7Ci0KLXN0YXRpYyBpbnQgbnVtX3F1ZXVlczsKLW1vZHVsZV9wYXJhbShudW1fcXVldWVzLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhudW1fcXVldWVzLCAiIE51bWJlciBvZiBxdWV1ZXMgZm9yIG11bHRpX21vZGU9MSIKLQkJCQkiIChkZWZhdWx0IGlzIGFzIGEgbnVtYmVyIG9mIENQVXMpIik7Ci0KLXN0YXRpYyBpbnQgZGlzYWJsZV90cGE7Ci1tb2R1bGVfcGFyYW0oZGlzYWJsZV90cGEsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfdHBhLCAiIERpc2FibGUgdGhlIFRQQSAoTFJPKSBmZWF0dXJlIik7Ci0KLXN0YXRpYyBpbnQgaW50X21vZGU7Ci1tb2R1bGVfcGFyYW0oaW50X21vZGUsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGludF9tb2RlLCAiIEZvcmNlIGludGVycnVwdCBtb2RlIG90aGVyIHRoZW4gTVNJLVggIgotCQkJCSIoMSBJTlQjeDsgMiBNU0kpIik7Ci0KLXN0YXRpYyBpbnQgZHJvcGxlc3NfZmM7Ci1tb2R1bGVfcGFyYW0oZHJvcGxlc3NfZmMsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRyb3BsZXNzX2ZjLCAiIFBhdXNlIG9uIGV4aGF1c3RlZCBob3N0IHJpbmciKTsKLQotc3RhdGljIGludCBwb2xsOwotbW9kdWxlX3BhcmFtKHBvbGwsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHBvbGwsICIgVXNlIHBvbGxpbmcgKGZvciBkZWJ1ZykiKTsKLQotc3RhdGljIGludCBtcnJzID0gLTE7Ci1tb2R1bGVfcGFyYW0obXJycywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MobXJycywgIiBGb3JjZSBNYXggUmVhZCBSZXEgU2l6ZSAoMC4uMykgKGZvciBkZWJ1ZykiKTsKLQotc3RhdGljIGludCBkZWJ1ZzsKLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICIgRGVmYXVsdCBkZWJ1ZyBtc2dsZXZlbCIpOwotCi1zdGF0aWMgaW50IGxvYWRfY291bnRbM107IC8qIDAtY29tbW9uLCAxLXBvcnQwLCAyLXBvcnQxICovCi0KLXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqYm54Mnhfd3E7Ci0KLWVudW0gYm54MnhfYm9hcmRfdHlwZSB7Ci0JQkNNNTc3MTAgPSAwLAotCUJDTTU3NzExID0gMSwKLQlCQ001NzcxMUUgPSAyLAotfTsKLQotLyogaW5kZXhlZCBieSBib2FyZF90eXBlLCBhYm92ZSAqLwotc3RhdGljIHN0cnVjdCB7Ci0JY2hhciAqbmFtZTsKLX0gYm9hcmRfaW5mb1tdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JeyAiQnJvYWRjb20gTmV0WHRyZW1lIElJIEJDTTU3NzEwIFhHYiIgfSwKLQl7ICJCcm9hZGNvbSBOZXRYdHJlbWUgSUkgQkNNNTc3MTEgWEdiIiB9LAotCXsgIkJyb2FkY29tIE5ldFh0cmVtZSBJSSBCQ001NzcxMUUgWEdiIiB9Ci19OwotCi0KLXN0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShibngyeF9wY2lfdGJsKSA9IHsKLQl7IFBDSV9WREVWSUNFKEJST0FEQ09NLCBQQ0lfREVWSUNFX0lEX05YMl81NzcxMCksIEJDTTU3NzEwIH0sCi0JeyBQQ0lfVkRFVklDRShCUk9BRENPTSwgUENJX0RFVklDRV9JRF9OWDJfNTc3MTEpLCBCQ001NzcxMSB9LAotCXsgUENJX1ZERVZJQ0UoQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfTlgyXzU3NzExRSksIEJDTTU3NzExRSB9LAotCXsgMCB9Ci19OwotCi1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYm54MnhfcGNpX3RibCk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIEdlbmVyYWwgc2VydmljZSBmdW5jdGlvbnMKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIHVzZWQgb25seSBhdCBpbml0Ci0gKiBsb2NraW5nIGlzIGRvbmUgYnkgbWNwCi0gKi8KLXZvaWQgYm54MnhfcmVnX3dyX2luZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYWRkciwgdTMyIHZhbCkKLXsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJwLT5wZGV2LCBQQ0lDRkdfR1JDX0FERFJFU1MsIGFkZHIpOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnAtPnBkZXYsIFBDSUNGR19HUkNfREFUQSwgdmFsKTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJwLT5wZGV2LCBQQ0lDRkdfR1JDX0FERFJFU1MsCi0JCQkgICAgICAgUENJQ0ZHX1ZFTkRPUl9JRF9PRkZTRVQpOwotfQotCi1zdGF0aWMgdTMyIGJueDJ4X3JlZ19yZF9pbmQoc3RydWN0IGJueDJ4ICpicCwgdTMyIGFkZHIpCi17Ci0JdTMyIHZhbDsKLQotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnAtPnBkZXYsIFBDSUNGR19HUkNfQUREUkVTUywgYWRkcik7Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGJwLT5wZGV2LCBQQ0lDRkdfR1JDX0RBVEEsICZ2YWwpOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnAtPnBkZXYsIFBDSUNGR19HUkNfQUREUkVTUywKLQkJCSAgICAgICBQQ0lDRkdfVkVORE9SX0lEX09GRlNFVCk7Ci0KLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgY29uc3QgdTMyIGRtYWVfcmVnX2dvX2NbXSA9IHsKLQlETUFFX1JFR19HT19DMCwgRE1BRV9SRUdfR09fQzEsIERNQUVfUkVHX0dPX0MyLCBETUFFX1JFR19HT19DMywKLQlETUFFX1JFR19HT19DNCwgRE1BRV9SRUdfR09fQzUsIERNQUVfUkVHX0dPX0M2LCBETUFFX1JFR19HT19DNywKLQlETUFFX1JFR19HT19DOCwgRE1BRV9SRUdfR09fQzksIERNQUVfUkVHX0dPX0MxMCwgRE1BRV9SRUdfR09fQzExLAotCURNQUVfUkVHX0dPX0MxMiwgRE1BRV9SRUdfR09fQzEzLCBETUFFX1JFR19HT19DMTQsIERNQUVfUkVHX0dPX0MxNQotfTsKLQotLyogY29weSBjb21tYW5kIGludG8gRE1BRSBjb21tYW5kIG1lbW9yeSBhbmQgc2V0IERNQUUgY29tbWFuZCBnbyAqLwotc3RhdGljIHZvaWQgYm54MnhfcG9zdF9kbWFlKHN0cnVjdCBibngyeCAqYnAsIHN0cnVjdCBkbWFlX2NvbW1hbmQgKmRtYWUsCi0JCQkgICAgaW50IGlkeCkKLXsKLQl1MzIgY21kX29mZnNldDsKLQlpbnQgaTsKLQotCWNtZF9vZmZzZXQgPSAoRE1BRV9SRUdfQ01EX01FTSArIHNpemVvZihzdHJ1Y3QgZG1hZV9jb21tYW5kKSAqIGlkeCk7Ci0JZm9yIChpID0gMDsgaSA8IChzaXplb2Yoc3RydWN0IGRtYWVfY29tbWFuZCkvNCk7IGkrKykgewotCQlSRUdfV1IoYnAsIGNtZF9vZmZzZXQgKyBpKjQsICooKCh1MzIgKilkbWFlKSArIGkpKTsKLQotCQlEUChCTlgyWF9NU0dfT0ZGLCAiRE1BRSBjbWRbJWRdLiVkICgweCUwOHgpIDogMHglMDh4XG4iLAotCQkgICBpZHgsIGksIGNtZF9vZmZzZXQgKyBpKjQsICooKCh1MzIgKilkbWFlKSArIGkpKTsKLQl9Ci0JUkVHX1dSKGJwLCBkbWFlX3JlZ19nb19jW2lkeF0sIDEpOwotfQotCi12b2lkIGJueDJ4X3dyaXRlX2RtYWUoc3RydWN0IGJueDJ4ICpicCwgZG1hX2FkZHJfdCBkbWFfYWRkciwgdTMyIGRzdF9hZGRyLAotCQkgICAgICB1MzIgbGVuMzIpCi17Ci0Jc3RydWN0IGRtYWVfY29tbWFuZCBkbWFlOwotCXUzMiAqd2JfY29tcCA9IGJueDJ4X3NwKGJwLCB3Yl9jb21wKTsKLQlpbnQgY250ID0gMjAwOwotCi0JaWYgKCFicC0+ZG1hZV9yZWFkeSkgewotCQl1MzIgKmRhdGEgPSBibngyeF9zcChicCwgd2JfZGF0YVswXSk7Ci0KLQkJRFAoQk5YMlhfTVNHX09GRiwgIkRNQUUgaXMgbm90IHJlYWR5IChkc3RfYWRkciAlMDh4ICBsZW4zMiAlZCkiCi0JCSAgICIgIHVzaW5nIGluZGlyZWN0XG4iLCBkc3RfYWRkciwgbGVuMzIpOwotCQlibngyeF9pbml0X2luZF93cihicCwgZHN0X2FkZHIsIGRhdGEsIGxlbjMyKTsKLQkJcmV0dXJuOwotCX0KLQotCW1lbXNldCgmZG1hZSwgMCwgc2l6ZW9mKHN0cnVjdCBkbWFlX2NvbW1hbmQpKTsKLQotCWRtYWUub3Bjb2RlID0gKERNQUVfQ01EX1NSQ19QQ0kgfCBETUFFX0NNRF9EU1RfR1JDIHwKLQkJICAgICAgIERNQUVfQ01EX0NfRFNUX1BDSSB8IERNQUVfQ01EX0NfRU5BQkxFIHwKLQkJICAgICAgIERNQUVfQ01EX1NSQ19SRVNFVCB8IERNQUVfQ01EX0RTVF9SRVNFVCB8Ci0jaWZkZWYgX19CSUdfRU5ESUFOCi0JCSAgICAgICBETUFFX0NNRF9FTkRJQU5JVFlfQl9EV19TV0FQIHwKLSNlbHNlCi0JCSAgICAgICBETUFFX0NNRF9FTkRJQU5JVFlfRFdfU1dBUCB8Ci0jZW5kaWYKLQkJICAgICAgIChCUF9QT1JUKGJwKSA/IERNQUVfQ01EX1BPUlRfMSA6IERNQUVfQ01EX1BPUlRfMCkgfAotCQkgICAgICAgKEJQX0UxSFZOKGJwKSA8PCBETUFFX0NNRF9FMUhWTl9TSElGVCkpOwotCWRtYWUuc3JjX2FkZHJfbG8gPSBVNjRfTE8oZG1hX2FkZHIpOwotCWRtYWUuc3JjX2FkZHJfaGkgPSBVNjRfSEkoZG1hX2FkZHIpOwotCWRtYWUuZHN0X2FkZHJfbG8gPSBkc3RfYWRkciA+PiAyOwotCWRtYWUuZHN0X2FkZHJfaGkgPSAwOwotCWRtYWUubGVuID0gbGVuMzI7Ci0JZG1hZS5jb21wX2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgd2JfY29tcCkpOwotCWRtYWUuY29tcF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIHdiX2NvbXApKTsKLQlkbWFlLmNvbXBfdmFsID0gRE1BRV9DT01QX1ZBTDsKLQotCURQKEJOWDJYX01TR19PRkYsICJETUFFOiBvcGNvZGUgMHglMDh4XG4iCi0JICAgRFBfTEVWRUwgInNyY19hZGRyICBbJXg6JTA4eF0gIGxlbiBbJWQgKjRdICAiCi0JCSAgICAiZHN0X2FkZHIgWyV4OiUwOHggKCUwOHgpXVxuIgotCSAgIERQX0xFVkVMICJjb21wX2FkZHIgWyV4OiUwOHhdICBjb21wX3ZhbCAweCUwOHhcbiIsCi0JICAgZG1hZS5vcGNvZGUsIGRtYWUuc3JjX2FkZHJfaGksIGRtYWUuc3JjX2FkZHJfbG8sCi0JICAgZG1hZS5sZW4sIGRtYWUuZHN0X2FkZHJfaGksIGRtYWUuZHN0X2FkZHJfbG8sIGRzdF9hZGRyLAotCSAgIGRtYWUuY29tcF9hZGRyX2hpLCBkbWFlLmNvbXBfYWRkcl9sbywgZG1hZS5jb21wX3ZhbCk7Ci0JRFAoQk5YMlhfTVNHX09GRiwgImRhdGEgWzB4JTA4eCAweCUwOHggMHglMDh4IDB4JTA4eF1cbiIsCi0JICAgYnAtPnNsb3dwYXRoLT53Yl9kYXRhWzBdLCBicC0+c2xvd3BhdGgtPndiX2RhdGFbMV0sCi0JICAgYnAtPnNsb3dwYXRoLT53Yl9kYXRhWzJdLCBicC0+c2xvd3BhdGgtPndiX2RhdGFbM10pOwotCi0JbXV0ZXhfbG9jaygmYnAtPmRtYWVfbXV0ZXgpOwotCi0JKndiX2NvbXAgPSAwOwotCi0JYm54MnhfcG9zdF9kbWFlKGJwLCAmZG1hZSwgSU5JVF9ETUFFX0MoYnApKTsKLQotCXVkZWxheSg1KTsKLQotCXdoaWxlICgqd2JfY29tcCAhPSBETUFFX0NPTVBfVkFMKSB7Ci0JCURQKEJOWDJYX01TR19PRkYsICJ3Yl9jb21wIDB4JTA4eFxuIiwgKndiX2NvbXApOwotCi0JCWlmICghY250KSB7Ci0JCQlCTlgyWF9FUlIoIkRNQUUgdGltZW91dCFcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQkJY250LS07Ci0JCS8qIGFkanVzdCBkZWxheSBmb3IgZW11bGF0aW9uL0ZQR0EgKi8KLQkJaWYgKENISVBfUkVWX0lTX1NMT1coYnApKQotCQkJbXNsZWVwKDEwMCk7Ci0JCWVsc2UKLQkJCXVkZWxheSg1KTsKLQl9Ci0KLQltdXRleF91bmxvY2soJmJwLT5kbWFlX211dGV4KTsKLX0KLQotdm9pZCBibngyeF9yZWFkX2RtYWUoc3RydWN0IGJueDJ4ICpicCwgdTMyIHNyY19hZGRyLCB1MzIgbGVuMzIpCi17Ci0Jc3RydWN0IGRtYWVfY29tbWFuZCBkbWFlOwotCXUzMiAqd2JfY29tcCA9IGJueDJ4X3NwKGJwLCB3Yl9jb21wKTsKLQlpbnQgY250ID0gMjAwOwotCi0JaWYgKCFicC0+ZG1hZV9yZWFkeSkgewotCQl1MzIgKmRhdGEgPSBibngyeF9zcChicCwgd2JfZGF0YVswXSk7Ci0JCWludCBpOwotCi0JCURQKEJOWDJYX01TR19PRkYsICJETUFFIGlzIG5vdCByZWFkeSAoc3JjX2FkZHIgJTA4eCAgbGVuMzIgJWQpIgotCQkgICAiICB1c2luZyBpbmRpcmVjdFxuIiwgc3JjX2FkZHIsIGxlbjMyKTsKLQkJZm9yIChpID0gMDsgaSA8IGxlbjMyOyBpKyspCi0JCQlkYXRhW2ldID0gYm54MnhfcmVnX3JkX2luZChicCwgc3JjX2FkZHIgKyBpKjQpOwotCQlyZXR1cm47Ci0JfQotCi0JbWVtc2V0KCZkbWFlLCAwLCBzaXplb2Yoc3RydWN0IGRtYWVfY29tbWFuZCkpOwotCi0JZG1hZS5vcGNvZGUgPSAoRE1BRV9DTURfU1JDX0dSQyB8IERNQUVfQ01EX0RTVF9QQ0kgfAotCQkgICAgICAgRE1BRV9DTURfQ19EU1RfUENJIHwgRE1BRV9DTURfQ19FTkFCTEUgfAotCQkgICAgICAgRE1BRV9DTURfU1JDX1JFU0VUIHwgRE1BRV9DTURfRFNUX1JFU0VUIHwKLSNpZmRlZiBfX0JJR19FTkRJQU4KLQkJICAgICAgIERNQUVfQ01EX0VORElBTklUWV9CX0RXX1NXQVAgfAotI2Vsc2UKLQkJICAgICAgIERNQUVfQ01EX0VORElBTklUWV9EV19TV0FQIHwKLSNlbmRpZgotCQkgICAgICAgKEJQX1BPUlQoYnApID8gRE1BRV9DTURfUE9SVF8xIDogRE1BRV9DTURfUE9SVF8wKSB8Ci0JCSAgICAgICAoQlBfRTFIVk4oYnApIDw8IERNQUVfQ01EX0UxSFZOX1NISUZUKSk7Ci0JZG1hZS5zcmNfYWRkcl9sbyA9IHNyY19hZGRyID4+IDI7Ci0JZG1hZS5zcmNfYWRkcl9oaSA9IDA7Ci0JZG1hZS5kc3RfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCB3Yl9kYXRhKSk7Ci0JZG1hZS5kc3RfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCB3Yl9kYXRhKSk7Ci0JZG1hZS5sZW4gPSBsZW4zMjsKLQlkbWFlLmNvbXBfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCB3Yl9jb21wKSk7Ci0JZG1hZS5jb21wX2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgd2JfY29tcCkpOwotCWRtYWUuY29tcF92YWwgPSBETUFFX0NPTVBfVkFMOwotCi0JRFAoQk5YMlhfTVNHX09GRiwgIkRNQUU6IG9wY29kZSAweCUwOHhcbiIKLQkgICBEUF9MRVZFTCAic3JjX2FkZHIgIFsleDolMDh4XSAgbGVuIFslZCAqNF0gICIKLQkJICAgICJkc3RfYWRkciBbJXg6JTA4eCAoJTA4eCldXG4iCi0JICAgRFBfTEVWRUwgImNvbXBfYWRkciBbJXg6JTA4eF0gIGNvbXBfdmFsIDB4JTA4eFxuIiwKLQkgICBkbWFlLm9wY29kZSwgZG1hZS5zcmNfYWRkcl9oaSwgZG1hZS5zcmNfYWRkcl9sbywKLQkgICBkbWFlLmxlbiwgZG1hZS5kc3RfYWRkcl9oaSwgZG1hZS5kc3RfYWRkcl9sbywgc3JjX2FkZHIsCi0JICAgZG1hZS5jb21wX2FkZHJfaGksIGRtYWUuY29tcF9hZGRyX2xvLCBkbWFlLmNvbXBfdmFsKTsKLQotCW11dGV4X2xvY2soJmJwLT5kbWFlX211dGV4KTsKLQotCW1lbXNldChibngyeF9zcChicCwgd2JfZGF0YVswXSksIDAsIHNpemVvZih1MzIpICogNCk7Ci0JKndiX2NvbXAgPSAwOwotCi0JYm54MnhfcG9zdF9kbWFlKGJwLCAmZG1hZSwgSU5JVF9ETUFFX0MoYnApKTsKLQotCXVkZWxheSg1KTsKLQotCXdoaWxlICgqd2JfY29tcCAhPSBETUFFX0NPTVBfVkFMKSB7Ci0KLQkJaWYgKCFjbnQpIHsKLQkJCUJOWDJYX0VSUigiRE1BRSB0aW1lb3V0IVxuIik7Ci0JCQlicmVhazsKLQkJfQotCQljbnQtLTsKLQkJLyogYWRqdXN0IGRlbGF5IGZvciBlbXVsYXRpb24vRlBHQSAqLwotCQlpZiAoQ0hJUF9SRVZfSVNfU0xPVyhicCkpCi0JCQltc2xlZXAoMTAwKTsKLQkJZWxzZQotCQkJdWRlbGF5KDUpOwotCX0KLQlEUChCTlgyWF9NU0dfT0ZGLCAiZGF0YSBbMHglMDh4IDB4JTA4eCAweCUwOHggMHglMDh4XVxuIiwKLQkgICBicC0+c2xvd3BhdGgtPndiX2RhdGFbMF0sIGJwLT5zbG93cGF0aC0+d2JfZGF0YVsxXSwKLQkgICBicC0+c2xvd3BhdGgtPndiX2RhdGFbMl0sIGJwLT5zbG93cGF0aC0+d2JfZGF0YVszXSk7Ci0KLQltdXRleF91bmxvY2soJmJwLT5kbWFlX211dGV4KTsKLX0KLQotdm9pZCBibngyeF93cml0ZV9kbWFlX3BoeXNfbGVuKHN0cnVjdCBibngyeCAqYnAsIGRtYV9hZGRyX3QgcGh5c19hZGRyLAotCQkJICAgICAgIHUzMiBhZGRyLCB1MzIgbGVuKQotewotCWludCBkbWFlX3dyX21heCA9IERNQUVfTEVOMzJfV1JfTUFYKGJwKTsKLQlpbnQgb2Zmc2V0ID0gMDsKLQotCXdoaWxlIChsZW4gPiBkbWFlX3dyX21heCkgewotCQlibngyeF93cml0ZV9kbWFlKGJwLCBwaHlzX2FkZHIgKyBvZmZzZXQsCi0JCQkJIGFkZHIgKyBvZmZzZXQsIGRtYWVfd3JfbWF4KTsKLQkJb2Zmc2V0ICs9IGRtYWVfd3JfbWF4ICogNDsKLQkJbGVuIC09IGRtYWVfd3JfbWF4OwotCX0KLQotCWJueDJ4X3dyaXRlX2RtYWUoYnAsIHBoeXNfYWRkciArIG9mZnNldCwgYWRkciArIG9mZnNldCwgbGVuKTsKLX0KLQotLyogdXNlZCBvbmx5IGZvciBzbG93cGF0aCBzbyBub3QgaW5saW5lZCAqLwotc3RhdGljIHZvaWQgYm54Mnhfd2Jfd3Ioc3RydWN0IGJueDJ4ICpicCwgaW50IHJlZywgdTMyIHZhbF9oaSwgdTMyIHZhbF9sbykKLXsKLQl1MzIgd2Jfd3JpdGVbMl07Ci0KLQl3Yl93cml0ZVswXSA9IHZhbF9oaTsKLQl3Yl93cml0ZVsxXSA9IHZhbF9sbzsKLQlSRUdfV1JfRE1BRShicCwgcmVnLCB3Yl93cml0ZSwgMik7Ci19Ci0KLSNpZmRlZiBVU0VfV0JfUkQKLXN0YXRpYyB1NjQgYm54Mnhfd2JfcmQoc3RydWN0IGJueDJ4ICpicCwgaW50IHJlZykKLXsKLQl1MzIgd2JfZGF0YVsyXTsKLQotCVJFR19SRF9ETUFFKGJwLCByZWcsIHdiX2RhdGEsIDIpOwotCi0JcmV0dXJuIEhJTE9fVTY0KHdiX2RhdGFbMF0sIHdiX2RhdGFbMV0pOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgYm54MnhfbWNfYXNzZXJ0KHN0cnVjdCBibngyeCAqYnApCi17Ci0JY2hhciBsYXN0X2lkeDsKLQlpbnQgaSwgcmMgPSAwOwotCXUzMiByb3cwLCByb3cxLCByb3cyLCByb3czOwotCi0JLyogWFNUT1JNICovCi0JbGFzdF9pZHggPSBSRUdfUkQ4KGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKwotCQkJICAgWFNUT1JNX0FTU0VSVF9MSVNUX0lOREVYX09GRlNFVCk7Ci0JaWYgKGxhc3RfaWR4KQotCQlCTlgyWF9FUlIoIlhTVE9STV9BU1NFUlRfTElTVF9JTkRFWCAweCV4XG4iLCBsYXN0X2lkeCk7Ci0KLQkvKiBwcmludCB0aGUgYXNzZXJ0cyAqLwotCWZvciAoaSA9IDA7IGkgPCBTVFJPTV9BU1NFUlRfQVJSQVlfU0laRTsgaSsrKSB7Ci0KLQkJcm93MCA9IFJFR19SRChicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsKLQkJCSAgICAgIFhTVE9STV9BU1NFUlRfTElTVF9PRkZTRVQoaSkpOwotCQlyb3cxID0gUkVHX1JEKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKwotCQkJICAgICAgWFNUT1JNX0FTU0VSVF9MSVNUX09GRlNFVChpKSArIDQpOwotCQlyb3cyID0gUkVHX1JEKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKwotCQkJICAgICAgWFNUT1JNX0FTU0VSVF9MSVNUX09GRlNFVChpKSArIDgpOwotCQlyb3czID0gUkVHX1JEKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKwotCQkJICAgICAgWFNUT1JNX0FTU0VSVF9MSVNUX09GRlNFVChpKSArIDEyKTsKLQotCQlpZiAocm93MCAhPSBDT01NT05fQVNNX0lOVkFMSURfQVNTRVJUX09QQ09ERSkgewotCQkJQk5YMlhfRVJSKCJYU1RPUk1fQVNTRVJUX0lOREVYIDB4JXggPSAweCUwOHgiCi0JCQkJICAiIDB4JTA4eCAweCUwOHggMHglMDh4XG4iLAotCQkJCSAgaSwgcm93Mywgcm93Miwgcm93MSwgcm93MCk7Ci0JCQlyYysrOwotCQl9IGVsc2UgewotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQkvKiBUU1RPUk0gKi8KLQlsYXN0X2lkeCA9IFJFR19SRDgoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCi0JCQkgICBUU1RPUk1fQVNTRVJUX0xJU1RfSU5ERVhfT0ZGU0VUKTsKLQlpZiAobGFzdF9pZHgpCi0JCUJOWDJYX0VSUigiVFNUT1JNX0FTU0VSVF9MSVNUX0lOREVYIDB4JXhcbiIsIGxhc3RfaWR4KTsKLQotCS8qIHByaW50IHRoZSBhc3NlcnRzICovCi0JZm9yIChpID0gMDsgaSA8IFNUUk9NX0FTU0VSVF9BUlJBWV9TSVpFOyBpKyspIHsKLQotCQlyb3cwID0gUkVHX1JEKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKwotCQkJICAgICAgVFNUT1JNX0FTU0VSVF9MSVNUX09GRlNFVChpKSk7Ci0JCXJvdzEgPSBSRUdfUkQoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCi0JCQkgICAgICBUU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGkpICsgNCk7Ci0JCXJvdzIgPSBSRUdfUkQoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCi0JCQkgICAgICBUU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGkpICsgOCk7Ci0JCXJvdzMgPSBSRUdfUkQoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCi0JCQkgICAgICBUU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGkpICsgMTIpOwotCi0JCWlmIChyb3cwICE9IENPTU1PTl9BU01fSU5WQUxJRF9BU1NFUlRfT1BDT0RFKSB7Ci0JCQlCTlgyWF9FUlIoIlRTVE9STV9BU1NFUlRfSU5ERVggMHgleCA9IDB4JTA4eCIKLQkJCQkgICIgMHglMDh4IDB4JTA4eCAweCUwOHhcbiIsCi0JCQkJICBpLCByb3czLCByb3cyLCByb3cxLCByb3cwKTsKLQkJCXJjKys7Ci0JCX0gZWxzZSB7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qIENTVE9STSAqLwotCWxhc3RfaWR4ID0gUkVHX1JEOChicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKLQkJCSAgIENTVE9STV9BU1NFUlRfTElTVF9JTkRFWF9PRkZTRVQpOwotCWlmIChsYXN0X2lkeCkKLQkJQk5YMlhfRVJSKCJDU1RPUk1fQVNTRVJUX0xJU1RfSU5ERVggMHgleFxuIiwgbGFzdF9pZHgpOwotCi0JLyogcHJpbnQgdGhlIGFzc2VydHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgU1RST01fQVNTRVJUX0FSUkFZX1NJWkU7IGkrKykgewotCi0JCXJvdzAgPSBSRUdfUkQoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCi0JCQkgICAgICBDU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGkpKTsKLQkJcm93MSA9IFJFR19SRChicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKLQkJCSAgICAgIENTVE9STV9BU1NFUlRfTElTVF9PRkZTRVQoaSkgKyA0KTsKLQkJcm93MiA9IFJFR19SRChicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKLQkJCSAgICAgIENTVE9STV9BU1NFUlRfTElTVF9PRkZTRVQoaSkgKyA4KTsKLQkJcm93MyA9IFJFR19SRChicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKLQkJCSAgICAgIENTVE9STV9BU1NFUlRfTElTVF9PRkZTRVQoaSkgKyAxMik7Ci0KLQkJaWYgKHJvdzAgIT0gQ09NTU9OX0FTTV9JTlZBTElEX0FTU0VSVF9PUENPREUpIHsKLQkJCUJOWDJYX0VSUigiQ1NUT1JNX0FTU0VSVF9JTkRFWCAweCV4ID0gMHglMDh4IgotCQkJCSAgIiAweCUwOHggMHglMDh4IDB4JTA4eFxuIiwKLQkJCQkgIGksIHJvdzMsIHJvdzIsIHJvdzEsIHJvdzApOwotCQkJcmMrKzsKLQkJfSBlbHNlIHsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JLyogVVNUT1JNICovCi0JbGFzdF9pZHggPSBSRUdfUkQ4KGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwotCQkJICAgVVNUT1JNX0FTU0VSVF9MSVNUX0lOREVYX09GRlNFVCk7Ci0JaWYgKGxhc3RfaWR4KQotCQlCTlgyWF9FUlIoIlVTVE9STV9BU1NFUlRfTElTVF9JTkRFWCAweCV4XG4iLCBsYXN0X2lkeCk7Ci0KLQkvKiBwcmludCB0aGUgYXNzZXJ0cyAqLwotCWZvciAoaSA9IDA7IGkgPCBTVFJPTV9BU1NFUlRfQVJSQVlfU0laRTsgaSsrKSB7Ci0KLQkJcm93MCA9IFJFR19SRChicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkJCSAgICAgIFVTVE9STV9BU1NFUlRfTElTVF9PRkZTRVQoaSkpOwotCQlyb3cxID0gUkVHX1JEKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwotCQkJICAgICAgVVNUT1JNX0FTU0VSVF9MSVNUX09GRlNFVChpKSArIDQpOwotCQlyb3cyID0gUkVHX1JEKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwotCQkJICAgICAgVVNUT1JNX0FTU0VSVF9MSVNUX09GRlNFVChpKSArIDgpOwotCQlyb3czID0gUkVHX1JEKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwotCQkJICAgICAgVVNUT1JNX0FTU0VSVF9MSVNUX09GRlNFVChpKSArIDEyKTsKLQotCQlpZiAocm93MCAhPSBDT01NT05fQVNNX0lOVkFMSURfQVNTRVJUX09QQ09ERSkgewotCQkJQk5YMlhfRVJSKCJVU1RPUk1fQVNTRVJUX0lOREVYIDB4JXggPSAweCUwOHgiCi0JCQkJICAiIDB4JTA4eCAweCUwOHggMHglMDh4XG4iLAotCQkJCSAgaSwgcm93Mywgcm93Miwgcm93MSwgcm93MCk7Ci0JCQlyYysrOwotCQl9IGVsc2UgewotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2Z3X2R1bXAoc3RydWN0IGJueDJ4ICpicCkKLXsKLQl1MzIgYWRkcjsKLQl1MzIgbWFyaywgb2Zmc2V0OwotCV9fYmUzMiBkYXRhWzldOwotCWludCB3b3JkOwotCi0JaWYgKEJQX05PTUNQKGJwKSkgewotCQlCTlgyWF9FUlIoIk5PIE1DUCAtIGNhbiBub3QgZHVtcFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlhZGRyID0gYnAtPmNvbW1vbi5zaG1lbV9iYXNlIC0gMHgwODAwICsgNDsKLQltYXJrID0gUkVHX1JEKGJwLCBhZGRyKTsKLQltYXJrID0gTUNQX1JFR19NQ1BSX1NDUkFUQ0ggKyAoKG1hcmsgKyAweDMpICYgfjB4MykgLSAweDA4MDAwMDAwOwotCXByX2VycigiYmVnaW4gZncgZHVtcCAobWFyayAweCV4KVxuIiwgbWFyayk7Ci0KLQlwcl9lcnIoIiIpOwotCWZvciAob2Zmc2V0ID0gbWFyazsgb2Zmc2V0IDw9IGJwLT5jb21tb24uc2htZW1fYmFzZTsgb2Zmc2V0ICs9IDB4OCo0KSB7Ci0JCWZvciAod29yZCA9IDA7IHdvcmQgPCA4OyB3b3JkKyspCi0JCQlkYXRhW3dvcmRdID0gaHRvbmwoUkVHX1JEKGJwLCBvZmZzZXQgKyA0KndvcmQpKTsKLQkJZGF0YVs4XSA9IDB4MDsKLQkJcHJfY29udCgiJXMiLCAoY2hhciAqKWRhdGEpOwotCX0KLQlmb3IgKG9mZnNldCA9IGFkZHIgKyA0OyBvZmZzZXQgPD0gbWFyazsgb2Zmc2V0ICs9IDB4OCo0KSB7Ci0JCWZvciAod29yZCA9IDA7IHdvcmQgPCA4OyB3b3JkKyspCi0JCQlkYXRhW3dvcmRdID0gaHRvbmwoUkVHX1JEKGJwLCBvZmZzZXQgKyA0KndvcmQpKTsKLQkJZGF0YVs4XSA9IDB4MDsKLQkJcHJfY29udCgiJXMiLCAoY2hhciAqKWRhdGEpOwotCX0KLQlwcl9lcnIoImVuZCBvZiBmdyBkdW1wXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfcGFuaWNfZHVtcChzdHJ1Y3QgYm54MnggKmJwKQotewotCWludCBpOwotCXUxNiBqLCBzdGFydCwgZW5kOwotCi0JYnAtPnN0YXRzX3N0YXRlID0gU1RBVFNfU1RBVEVfRElTQUJMRUQ7Ci0JRFAoQk5YMlhfTVNHX1NUQVRTLCAic3RhdHNfc3RhdGUgLSBESVNBQkxFRFxuIik7Ci0KLQlCTlgyWF9FUlIoImJlZ2luIGNyYXNoIGR1bXAgLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotCi0JLyogSW5kaWNlcyAqLwotCS8qIENvbW1vbiAqLwotCUJOWDJYX0VSUigiZGVmX2NfaWR4KDB4JXgpICBkZWZfdV9pZHgoMHgleCkgIGRlZl94X2lkeCgweCV4KSIKLQkJICAiICBkZWZfdF9pZHgoMHgleCkgIGRlZl9hdHRfaWR4KDB4JXgpICBhdHRuX3N0YXRlKDB4JXgpIgotCQkgICIgIHNwcV9wcm9kX2lkeCgweCV4KVxuIiwKLQkJICBicC0+ZGVmX2NfaWR4LCBicC0+ZGVmX3VfaWR4LCBicC0+ZGVmX3hfaWR4LCBicC0+ZGVmX3RfaWR4LAotCQkgIGJwLT5kZWZfYXR0X2lkeCwgYnAtPmF0dG5fc3RhdGUsIGJwLT5zcHFfcHJvZF9pZHgpOwotCi0JLyogUnggKi8KLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgewotCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKLQotCQlCTlgyWF9FUlIoImZwJWQ6IHJ4X2JkX3Byb2QoMHgleCkgIHJ4X2JkX2NvbnMoMHgleCkiCi0JCQkgICIgICpyeF9iZF9jb25zX3NiKDB4JXgpICByeF9jb21wX3Byb2QoMHgleCkiCi0JCQkgICIgIHJ4X2NvbXBfY29ucygweCV4KSAgKnJ4X2NvbnNfc2IoMHgleClcbiIsCi0JCQkgIGksIGZwLT5yeF9iZF9wcm9kLCBmcC0+cnhfYmRfY29ucywKLQkJCSAgbGUxNl90b19jcHUoKmZwLT5yeF9iZF9jb25zX3NiKSwgZnAtPnJ4X2NvbXBfcHJvZCwKLQkJCSAgZnAtPnJ4X2NvbXBfY29ucywgbGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKSk7Ci0JCUJOWDJYX0VSUigiICAgICByeF9zZ2VfcHJvZCgweCV4KSAgbGFzdF9tYXhfc2dlKDB4JXgpIgotCQkJICAiICBmcF91X2lkeCgweCV4KSAqc2JfdV9pZHgoMHgleClcbiIsCi0JCQkgIGZwLT5yeF9zZ2VfcHJvZCwgZnAtPmxhc3RfbWF4X3NnZSwKLQkJCSAgbGUxNl90b19jcHUoZnAtPmZwX3VfaWR4KSwKLQkJCSAgZnAtPnN0YXR1c19ibGstPnVfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCk7Ci0JfQotCi0JLyogVHggKi8KLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgewotCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKLQotCQlCTlgyWF9FUlIoImZwJWQ6IHR4X3BrdF9wcm9kKDB4JXgpICB0eF9wa3RfY29ucygweCV4KSIKLQkJCSAgIiAgdHhfYmRfcHJvZCgweCV4KSAgdHhfYmRfY29ucygweCV4KSIKLQkJCSAgIiAgKnR4X2NvbnNfc2IoMHgleClcbiIsCi0JCQkgIGksIGZwLT50eF9wa3RfcHJvZCwgZnAtPnR4X3BrdF9jb25zLCBmcC0+dHhfYmRfcHJvZCwKLQkJCSAgZnAtPnR4X2JkX2NvbnMsIGxlMTZfdG9fY3B1KCpmcC0+dHhfY29uc19zYikpOwotCQlCTlgyWF9FUlIoIiAgICAgZnBfY19pZHgoMHgleCkgICpzYl9jX2lkeCgweCV4KSIKLQkJCSAgIiAgdHhfZGJfcHJvZCgweCV4KVxuIiwgbGUxNl90b19jcHUoZnAtPmZwX2NfaWR4KSwKLQkJCSAgZnAtPnN0YXR1c19ibGstPmNfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCwKLQkJCSAgZnAtPnR4X2RiLmRhdGEucHJvZCk7Ci0JfQotCi0JLyogUmluZ3MgKi8KLQkvKiBSeCAqLwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7Ci0JCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwotCi0JCXN0YXJ0ID0gUlhfQkQobGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKSAtIDEwKTsKLQkJZW5kID0gUlhfQkQobGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKSArIDUwMyk7Ci0JCWZvciAoaiA9IHN0YXJ0OyBqICE9IGVuZDsgaiA9IFJYX0JEKGogKyAxKSkgewotCQkJdTMyICpyeF9iZCA9ICh1MzIgKikmZnAtPnJ4X2Rlc2NfcmluZ1tqXTsKLQkJCXN0cnVjdCBzd19yeF9iZCAqc3dfYmQgPSAmZnAtPnJ4X2J1Zl9yaW5nW2pdOwotCi0JCQlCTlgyWF9FUlIoImZwJWQ6IHJ4X2JkWyV4XT1bJXg6JXhdICBzd19iZD1bJXBdXG4iLAotCQkJCSAgaSwgaiwgcnhfYmRbMV0sIHJ4X2JkWzBdLCBzd19iZC0+c2tiKTsKLQkJfQotCi0JCXN0YXJ0ID0gUlhfU0dFKGZwLT5yeF9zZ2VfcHJvZCk7Ci0JCWVuZCA9IFJYX1NHRShmcC0+bGFzdF9tYXhfc2dlKTsKLQkJZm9yIChqID0gc3RhcnQ7IGogIT0gZW5kOyBqID0gUlhfU0dFKGogKyAxKSkgewotCQkJdTMyICpyeF9zZ2UgPSAodTMyICopJmZwLT5yeF9zZ2VfcmluZ1tqXTsKLQkJCXN0cnVjdCBzd19yeF9wYWdlICpzd19wYWdlID0gJmZwLT5yeF9wYWdlX3Jpbmdbal07Ci0KLQkJCUJOWDJYX0VSUigiZnAlZDogcnhfc2dlWyV4XT1bJXg6JXhdICBzd19wYWdlPVslcF1cbiIsCi0JCQkJICBpLCBqLCByeF9zZ2VbMV0sIHJ4X3NnZVswXSwgc3dfcGFnZS0+cGFnZSk7Ci0JCX0KLQotCQlzdGFydCA9IFJDUV9CRChmcC0+cnhfY29tcF9jb25zIC0gMTApOwotCQllbmQgPSBSQ1FfQkQoZnAtPnJ4X2NvbXBfY29ucyArIDUwMyk7Ci0JCWZvciAoaiA9IHN0YXJ0OyBqICE9IGVuZDsgaiA9IFJDUV9CRChqICsgMSkpIHsKLQkJCXUzMiAqY3FlID0gKHUzMiAqKSZmcC0+cnhfY29tcF9yaW5nW2pdOwotCi0JCQlCTlgyWF9FUlIoImZwJWQ6IGNxZVsleF09WyV4OiV4OiV4OiV4XVxuIiwKLQkJCQkgIGksIGosIGNxZVswXSwgY3FlWzFdLCBjcWVbMl0sIGNxZVszXSk7Ci0JCX0KLQl9Ci0KLQkvKiBUeCAqLwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7Ci0JCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwotCi0JCXN0YXJ0ID0gVFhfQkQobGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKSAtIDEwKTsKLQkJZW5kID0gVFhfQkQobGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKSArIDI0NSk7Ci0JCWZvciAoaiA9IHN0YXJ0OyBqICE9IGVuZDsgaiA9IFRYX0JEKGogKyAxKSkgewotCQkJc3RydWN0IHN3X3R4X2JkICpzd19iZCA9ICZmcC0+dHhfYnVmX3Jpbmdbal07Ci0KLQkJCUJOWDJYX0VSUigiZnAlZDogcGFja2V0WyV4XT1bJXAsJXhdXG4iLAotCQkJCSAgaSwgaiwgc3dfYmQtPnNrYiwgc3dfYmQtPmZpcnN0X2JkKTsKLQkJfQotCi0JCXN0YXJ0ID0gVFhfQkQoZnAtPnR4X2JkX2NvbnMgLSAxMCk7Ci0JCWVuZCA9IFRYX0JEKGZwLT50eF9iZF9jb25zICsgMjU0KTsKLQkJZm9yIChqID0gc3RhcnQ7IGogIT0gZW5kOyBqID0gVFhfQkQoaiArIDEpKSB7Ci0JCQl1MzIgKnR4X2JkID0gKHUzMiAqKSZmcC0+dHhfZGVzY19yaW5nW2pdOwotCi0JCQlCTlgyWF9FUlIoImZwJWQ6IHR4X2JkWyV4XT1bJXg6JXg6JXg6JXhdXG4iLAotCQkJCSAgaSwgaiwgdHhfYmRbMF0sIHR4X2JkWzFdLCB0eF9iZFsyXSwgdHhfYmRbM10pOwotCQl9Ci0JfQotCi0JYm54MnhfZndfZHVtcChicCk7Ci0JYm54MnhfbWNfYXNzZXJ0KGJwKTsKLQlCTlgyWF9FUlIoImVuZCBjcmFzaCBkdW1wIC0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfaW50X2VuYWJsZShzdHJ1Y3QgYm54MnggKmJwKQotewotCWludCBwb3J0ID0gQlBfUE9SVChicCk7Ci0JdTMyIGFkZHIgPSBwb3J0ID8gSENfUkVHX0NPTkZJR18xIDogSENfUkVHX0NPTkZJR18wOwotCXUzMiB2YWwgPSBSRUdfUkQoYnAsIGFkZHIpOwotCWludCBtc2l4ID0gKGJwLT5mbGFncyAmIFVTSU5HX01TSVhfRkxBRykgPyAxIDogMDsKLQlpbnQgbXNpID0gKGJwLT5mbGFncyAmIFVTSU5HX01TSV9GTEFHKSA/IDEgOiAwOwotCi0JaWYgKG1zaXgpIHsKLQkJdmFsICY9IH4oSENfQ09ORklHXzBfUkVHX1NJTkdMRV9JU1JfRU5fMCB8Ci0JCQkgSENfQ09ORklHXzBfUkVHX0lOVF9MSU5FX0VOXzApOwotCQl2YWwgfD0gKEhDX0NPTkZJR18wX1JFR19NU0lfTVNJWF9JTlRfRU5fMCB8Ci0JCQlIQ19DT05GSUdfMF9SRUdfQVRUTl9CSVRfRU5fMCk7Ci0JfSBlbHNlIGlmIChtc2kpIHsKLQkJdmFsICY9IH5IQ19DT05GSUdfMF9SRUdfSU5UX0xJTkVfRU5fMDsKLQkJdmFsIHw9IChIQ19DT05GSUdfMF9SRUdfU0lOR0xFX0lTUl9FTl8wIHwKLQkJCUhDX0NPTkZJR18wX1JFR19NU0lfTVNJWF9JTlRfRU5fMCB8Ci0JCQlIQ19DT05GSUdfMF9SRUdfQVRUTl9CSVRfRU5fMCk7Ci0JfSBlbHNlIHsKLQkJdmFsIHw9IChIQ19DT05GSUdfMF9SRUdfU0lOR0xFX0lTUl9FTl8wIHwKLQkJCUhDX0NPTkZJR18wX1JFR19NU0lfTVNJWF9JTlRfRU5fMCB8Ci0JCQlIQ19DT05GSUdfMF9SRUdfSU5UX0xJTkVfRU5fMCB8Ci0JCQlIQ19DT05GSUdfMF9SRUdfQVRUTl9CSVRfRU5fMCk7Ci0KLQkJRFAoTkVUSUZfTVNHX0lOVFIsICJ3cml0ZSAleCB0byBIQyAlZCAoYWRkciAweCV4KVxuIiwKLQkJICAgdmFsLCBwb3J0LCBhZGRyKTsKLQotCQlSRUdfV1IoYnAsIGFkZHIsIHZhbCk7Ci0KLQkJdmFsICY9IH5IQ19DT05GSUdfMF9SRUdfTVNJX01TSVhfSU5UX0VOXzA7Ci0JfQotCi0JRFAoTkVUSUZfTVNHX0lOVFIsICJ3cml0ZSAleCB0byBIQyAlZCAoYWRkciAweCV4KSAgbW9kZSAlc1xuIiwKLQkgICB2YWwsIHBvcnQsIGFkZHIsIChtc2l4ID8gIk1TSS1YIiA6IChtc2kgPyAiTVNJIiA6ICJJTlR4IikpKTsKLQotCVJFR19XUihicCwgYWRkciwgdmFsKTsKLQkvKgotCSAqIEVuc3VyZSB0aGF0IEhDX0NPTkZJRyBpcyB3cml0dGVuIGJlZm9yZSBsZWFkaW5nL3RyYWlsaW5nIGVkZ2UgY29uZmlnCi0JICovCi0JbW1pb3diKCk7Ci0JYmFycmllcigpOwotCi0JaWYgKENISVBfSVNfRTFIKGJwKSkgewotCQkvKiBpbml0IGxlYWRpbmcvdHJhaWxpbmcgZWRnZSAqLwotCQlpZiAoSVNfRTFITUYoYnApKSB7Ci0JCQl2YWwgPSAoMHhlZTBmIHwgKDEgPDwgKEJQX0UxSFZOKGJwKSArIDQpKSk7Ci0JCQlpZiAoYnAtPnBvcnQucG1mKQotCQkJCS8qIGVuYWJsZSBuaWcgYW5kIGdwaW8zIGF0dGVudGlvbiAqLwotCQkJCXZhbCB8PSAweDExMDA7Ci0JCX0gZWxzZQotCQkJdmFsID0gMHhmZmZmOwotCi0JCVJFR19XUihicCwgSENfUkVHX1RSQUlMSU5HX0VER0VfMCArIHBvcnQqOCwgdmFsKTsKLQkJUkVHX1dSKGJwLCBIQ19SRUdfTEVBRElOR19FREdFXzAgKyBwb3J0KjgsIHZhbCk7Ci0JfQotCi0JLyogTWFrZSBzdXJlIHRoYXQgaW50ZXJydXB0cyBhcmUgaW5kZWVkIGVuYWJsZWQgZnJvbSBoZXJlIG9uICovCi0JbW1pb3diKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2ludF9kaXNhYmxlKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKLQl1MzIgYWRkciA9IHBvcnQgPyBIQ19SRUdfQ09ORklHXzEgOiBIQ19SRUdfQ09ORklHXzA7Ci0JdTMyIHZhbCA9IFJFR19SRChicCwgYWRkcik7Ci0KLQl2YWwgJj0gfihIQ19DT05GSUdfMF9SRUdfU0lOR0xFX0lTUl9FTl8wIHwKLQkJIEhDX0NPTkZJR18wX1JFR19NU0lfTVNJWF9JTlRfRU5fMCB8Ci0JCSBIQ19DT05GSUdfMF9SRUdfSU5UX0xJTkVfRU5fMCB8Ci0JCSBIQ19DT05GSUdfMF9SRUdfQVRUTl9CSVRfRU5fMCk7Ci0KLQlEUChORVRJRl9NU0dfSU5UUiwgIndyaXRlICV4IHRvIEhDICVkIChhZGRyIDB4JXgpXG4iLAotCSAgIHZhbCwgcG9ydCwgYWRkcik7Ci0KLQkvKiBmbHVzaCBhbGwgb3V0c3RhbmRpbmcgd3JpdGVzICovCi0JbW1pb3diKCk7Ci0KLQlSRUdfV1IoYnAsIGFkZHIsIHZhbCk7Ci0JaWYgKFJFR19SRChicCwgYWRkcikgIT0gdmFsKQotCQlCTlgyWF9FUlIoIkJVRyEgcHJvcGVyIHZhbCBub3QgcmVhZCBmcm9tIElHVSFcbiIpOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9pbnRfZGlzYWJsZV9zeW5jKHN0cnVjdCBibngyeCAqYnAsIGludCBkaXNhYmxlX2h3KQotewotCWludCBtc2l4ID0gKGJwLT5mbGFncyAmIFVTSU5HX01TSVhfRkxBRykgPyAxIDogMDsKLQlpbnQgaSwgb2Zmc2V0OwotCi0JLyogZGlzYWJsZSBpbnRlcnJ1cHQgaGFuZGxpbmcgKi8KLQlhdG9taWNfaW5jKCZicC0+aW50cl9zZW0pOwotCXNtcF93bWIoKTsgLyogRW5zdXJlIHRoYXQgYnAtPmludHJfc2VtIHVwZGF0ZSBpcyBTTVAtc2FmZSAqLwotCi0JaWYgKGRpc2FibGVfaHcpCi0JCS8qIHByZXZlbnQgdGhlIEhXIGZyb20gc2VuZGluZyBpbnRlcnJ1cHRzICovCi0JCWJueDJ4X2ludF9kaXNhYmxlKGJwKTsKLQotCS8qIG1ha2Ugc3VyZSBhbGwgSVNScyBhcmUgZG9uZSAqLwotCWlmIChtc2l4KSB7Ci0JCXN5bmNocm9uaXplX2lycShicC0+bXNpeF90YWJsZVswXS52ZWN0b3IpOwotCQlvZmZzZXQgPSAxOwotI2lmZGVmIEJDTV9DTklDCi0JCW9mZnNldCsrOwotI2VuZGlmCi0JCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQotCQkJc3luY2hyb25pemVfaXJxKGJwLT5tc2l4X3RhYmxlW2kgKyBvZmZzZXRdLnZlY3Rvcik7Ci0JfSBlbHNlCi0JCXN5bmNocm9uaXplX2lycShicC0+cGRldi0+aXJxKTsKLQotCS8qIG1ha2Ugc3VyZSBzcF90YXNrIGlzIG5vdCBydW5uaW5nICovCi0JY2FuY2VsX2RlbGF5ZWRfd29yaygmYnAtPnNwX3Rhc2spOwotCWZsdXNoX3dvcmtxdWV1ZShibngyeF93cSk7Ci19Ci0KLS8qIGZhc3QgcGF0aCAqLwotCi0vKgotICogR2VuZXJhbCBzZXJ2aWNlIGZ1bmN0aW9ucwotICovCi0KLS8qIFJldHVybiB0cnVlIGlmIHN1Y2NlZWRlZCB0byBhY3F1aXJlIHRoZSBsb2NrICovCi1zdGF0aWMgYm9vbCBibngyeF90cnlsb2NrX2h3X2xvY2soc3RydWN0IGJueDJ4ICpicCwgdTMyIHJlc291cmNlKQotewotCXUzMiBsb2NrX3N0YXR1czsKLQl1MzIgcmVzb3VyY2VfYml0ID0gKDEgPDwgcmVzb3VyY2UpOwotCWludCBmdW5jID0gQlBfRlVOQyhicCk7Ci0JdTMyIGh3X2xvY2tfY29udHJvbF9yZWc7Ci0KLQlEUChORVRJRl9NU0dfSFcsICJUcnlpbmcgdG8gdGFrZSBhIGxvY2sgb24gcmVzb3VyY2UgJWRcbiIsIHJlc291cmNlKTsKLQotCS8qIFZhbGlkYXRpbmcgdGhhdCB0aGUgcmVzb3VyY2UgaXMgd2l0aGluIHJhbmdlICovCi0JaWYgKHJlc291cmNlID4gSFdfTE9DS19NQVhfUkVTT1VSQ0VfVkFMVUUpIHsKLQkJRFAoTkVUSUZfTVNHX0hXLAotCQkgICAicmVzb3VyY2UoMHgleCkgPiBIV19MT0NLX01BWF9SRVNPVVJDRV9WQUxVRSgweCV4KVxuIiwKLQkJICAgcmVzb3VyY2UsIEhXX0xPQ0tfTUFYX1JFU09VUkNFX1ZBTFVFKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGZ1bmMgPD0gNSkKLQkJaHdfbG9ja19jb250cm9sX3JlZyA9IChNSVNDX1JFR19EUklWRVJfQ09OVFJPTF8xICsgZnVuYyo4KTsKLQllbHNlCi0JCWh3X2xvY2tfY29udHJvbF9yZWcgPQotCQkJCShNSVNDX1JFR19EUklWRVJfQ09OVFJPTF83ICsgKGZ1bmMgLSA2KSo4KTsKLQotCS8qIFRyeSB0byBhY3F1aXJlIHRoZSBsb2NrICovCi0JUkVHX1dSKGJwLCBod19sb2NrX2NvbnRyb2xfcmVnICsgNCwgcmVzb3VyY2VfYml0KTsKLQlsb2NrX3N0YXR1cyA9IFJFR19SRChicCwgaHdfbG9ja19jb250cm9sX3JlZyk7Ci0JaWYgKGxvY2tfc3RhdHVzICYgcmVzb3VyY2VfYml0KQotCQlyZXR1cm4gdHJ1ZTsKLQotCURQKE5FVElGX01TR19IVywgIkZhaWxlZCB0byBnZXQgYSBsb2NrIG9uIHJlc291cmNlICVkXG4iLCByZXNvdXJjZSk7Ci0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfYWNrX3NiKHN0cnVjdCBibngyeCAqYnAsIHU4IHNiX2lkLAotCQkJCXU4IHN0b3JtLCB1MTYgaW5kZXgsIHU4IG9wLCB1OCB1cGRhdGUpCi17Ci0JdTMyIGhjX2FkZHIgPSAoSENfUkVHX0NPTU1BTkRfUkVHICsgQlBfUE9SVChicCkqMzIgKwotCQkgICAgICAgQ09NTUFORF9SRUdfSU5UX0FDSyk7Ci0Jc3RydWN0IGlndV9hY2tfcmVnaXN0ZXIgaWd1X2FjazsKLQotCWlndV9hY2suc3RhdHVzX2Jsb2NrX2luZGV4ID0gaW5kZXg7Ci0JaWd1X2Fjay5zYl9pZF9hbmRfZmxhZ3MgPQotCQkJKChzYl9pZCA8PCBJR1VfQUNLX1JFR0lTVEVSX1NUQVRVU19CTE9DS19JRF9TSElGVCkgfAotCQkJIChzdG9ybSA8PCBJR1VfQUNLX1JFR0lTVEVSX1NUT1JNX0lEX1NISUZUKSB8Ci0JCQkgKHVwZGF0ZSA8PCBJR1VfQUNLX1JFR0lTVEVSX1VQREFURV9JTkRFWF9TSElGVCkgfAotCQkJIChvcCA8PCBJR1VfQUNLX1JFR0lTVEVSX0lOVEVSUlVQVF9NT0RFX1NISUZUKSk7Ci0KLQlEUChCTlgyWF9NU0dfT0ZGLCAid3JpdGUgMHglMDh4IHRvIEhDIGFkZHIgMHgleFxuIiwKLQkgICAoKih1MzIgKikmaWd1X2FjayksIGhjX2FkZHIpOwotCVJFR19XUihicCwgaGNfYWRkciwgKCoodTMyICopJmlndV9hY2spKTsKLQotCS8qIE1ha2Ugc3VyZSB0aGF0IEFDSyBpcyB3cml0dGVuICovCi0JbW1pb3diKCk7Ci0JYmFycmllcigpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfdXBkYXRlX2Zwc2JfaWR4KHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnApCi17Ci0Jc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrICpmcHNiID0gZnAtPnN0YXR1c19ibGs7Ci0KLQliYXJyaWVyKCk7IC8qIHN0YXR1cyBibG9jayBpcyB3cml0dGVuIHRvIGJ5IHRoZSBjaGlwICovCi0JZnAtPmZwX2NfaWR4ID0gZnBzYi0+Y19zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4OwotCWZwLT5mcF91X2lkeCA9IGZwc2ItPnVfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleDsKLX0KLQotc3RhdGljIHUxNiBibngyeF9hY2tfaW50KHN0cnVjdCBibngyeCAqYnApCi17Ci0JdTMyIGhjX2FkZHIgPSAoSENfUkVHX0NPTU1BTkRfUkVHICsgQlBfUE9SVChicCkqMzIgKwotCQkgICAgICAgQ09NTUFORF9SRUdfU0lNRF9NQVNLKTsKLQl1MzIgcmVzdWx0ID0gUkVHX1JEKGJwLCBoY19hZGRyKTsKLQotCURQKEJOWDJYX01TR19PRkYsICJyZWFkIDB4JTA4eCBmcm9tIEhDIGFkZHIgMHgleFxuIiwKLQkgICByZXN1bHQsIGhjX2FkZHIpOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotCi0vKgotICogZmFzdCBwYXRoIHNlcnZpY2UgZnVuY3Rpb25zCi0gKi8KLQotc3RhdGljIGlubGluZSBpbnQgYm54MnhfaGFzX3R4X3dvcmtfdW5sb2FkKHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnApCi17Ci0JLyogVGVsbCBjb21waWxlciB0aGF0IGNvbnN1bWVyIGFuZCBwcm9kdWNlciBjYW4gY2hhbmdlICovCi0JYmFycmllcigpOwotCXJldHVybiAoZnAtPnR4X3BrdF9wcm9kICE9IGZwLT50eF9wa3RfY29ucyk7Ci19Ci0KLS8qIGZyZWUgc2tiIGluIHRoZSBwYWNrZXQgcmluZyBhdCBwb3MgaWR4Ci0gKiByZXR1cm4gaWR4IG9mIGxhc3QgYmQgZnJlZWQKLSAqLwotc3RhdGljIHUxNiBibngyeF9mcmVlX3R4X3BrdChzdHJ1Y3QgYm54MnggKmJwLCBzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwLAotCQkJICAgICB1MTYgaWR4KQotewotCXN0cnVjdCBzd190eF9iZCAqdHhfYnVmID0gJmZwLT50eF9idWZfcmluZ1tpZHhdOwotCXN0cnVjdCBldGhfdHhfc3RhcnRfYmQgKnR4X3N0YXJ0X2JkOwotCXN0cnVjdCBldGhfdHhfYmQgKnR4X2RhdGFfYmQ7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4X2J1Zi0+c2tiOwotCXUxNiBiZF9pZHggPSBUWF9CRCh0eF9idWYtPmZpcnN0X2JkKSwgbmV3X2NvbnM7Ci0JaW50IG5iZDsKLQotCS8qIHByZWZldGNoIHNrYiBlbmQgcG9pbnRlciB0byBzcGVlZHVwIGRldl9rZnJlZV9za2IoKSAqLwotCXByZWZldGNoKCZza2ItPmVuZCk7Ci0KLQlEUChCTlgyWF9NU0dfT0ZGLCAicGt0X2lkeCAlZCAgYnVmZiBAKCVwKS0+c2tiICVwXG4iLAotCSAgIGlkeCwgdHhfYnVmLCBza2IpOwotCi0JLyogdW5tYXAgZmlyc3QgYmQgKi8KLQlEUChCTlgyWF9NU0dfT0ZGLCAiZnJlZSBiZF9pZHggJWRcbiIsIGJkX2lkeCk7Ci0JdHhfc3RhcnRfYmQgPSAmZnAtPnR4X2Rlc2NfcmluZ1tiZF9pZHhdLnN0YXJ0X2JkOwotCWRtYV91bm1hcF9zaW5nbGUoJmJwLT5wZGV2LT5kZXYsIEJEX1VOTUFQX0FERFIodHhfc3RhcnRfYmQpLAotCQkJIEJEX1VOTUFQX0xFTih0eF9zdGFydF9iZCksIFBDSV9ETUFfVE9ERVZJQ0UpOwotCi0JbmJkID0gbGUxNl90b19jcHUodHhfc3RhcnRfYmQtPm5iZCkgLSAxOwotI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKLQlpZiAoKG5iZCAtIDEpID4gKE1BWF9TS0JfRlJBR1MgKyAyKSkgewotCQlCTlgyWF9FUlIoIkJBRCBuYmQhXG4iKTsKLQkJYm54MnhfcGFuaWMoKTsKLQl9Ci0jZW5kaWYKLQluZXdfY29ucyA9IG5iZCArIHR4X2J1Zi0+Zmlyc3RfYmQ7Ci0KLQkvKiBHZXQgdGhlIG5leHQgYmQgKi8KLQliZF9pZHggPSBUWF9CRChORVhUX1RYX0lEWChiZF9pZHgpKTsKLQotCS8qIFNraXAgYSBwYXJzZSBiZC4uLiAqLwotCS0tbmJkOwotCWJkX2lkeCA9IFRYX0JEKE5FWFRfVFhfSURYKGJkX2lkeCkpOwotCi0JLyogLi4uYW5kIHRoZSBUU08gc3BsaXQgaGVhZGVyIGJkIHNpbmNlIHRoZXkgaGF2ZSBubyBtYXBwaW5nICovCi0JaWYgKHR4X2J1Zi0+ZmxhZ3MgJiBCTlgyWF9UU09fU1BMSVRfQkQpIHsKLQkJLS1uYmQ7Ci0JCWJkX2lkeCA9IFRYX0JEKE5FWFRfVFhfSURYKGJkX2lkeCkpOwotCX0KLQotCS8qIG5vdyBmcmVlIGZyYWdzICovCi0Jd2hpbGUgKG5iZCA+IDApIHsKLQotCQlEUChCTlgyWF9NU0dfT0ZGLCAiZnJlZSBmcmFnIGJkX2lkeCAlZFxuIiwgYmRfaWR4KTsKLQkJdHhfZGF0YV9iZCA9ICZmcC0+dHhfZGVzY19yaW5nW2JkX2lkeF0ucmVnX2JkOwotCQlkbWFfdW5tYXBfcGFnZSgmYnAtPnBkZXYtPmRldiwgQkRfVU5NQVBfQUREUih0eF9kYXRhX2JkKSwKLQkJCSAgICAgICBCRF9VTk1BUF9MRU4odHhfZGF0YV9iZCksIERNQV9UT19ERVZJQ0UpOwotCQlpZiAoLS1uYmQpCi0JCQliZF9pZHggPSBUWF9CRChORVhUX1RYX0lEWChiZF9pZHgpKTsKLQl9Ci0KLQkvKiByZWxlYXNlIHNrYiAqLwotCVdBUk5fT04oIXNrYik7Ci0JZGV2X2tmcmVlX3NrYihza2IpOwotCXR4X2J1Zi0+Zmlyc3RfYmQgPSAwOwotCXR4X2J1Zi0+c2tiID0gTlVMTDsKLQotCXJldHVybiBuZXdfY29uczsKLX0KLQotc3RhdGljIGlubGluZSB1MTYgYm54MnhfdHhfYXZhaWwoc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCkKLXsKLQlzMTYgdXNlZDsKLQl1MTYgcHJvZDsKLQl1MTYgY29uczsKLQotCXByb2QgPSBmcC0+dHhfYmRfcHJvZDsKLQljb25zID0gZnAtPnR4X2JkX2NvbnM7Ci0KLQkvKiBOVU1fVFhfUklOR1MgPSBudW1iZXIgb2YgIm5leHQtcGFnZSIgZW50cmllcwotCSAgIEl0IHdpbGwgYmUgdXNlZCBhcyBhIHRocmVzaG9sZCAqLwotCXVzZWQgPSBTVUJfUzE2KHByb2QsIGNvbnMpICsgKHMxNilOVU1fVFhfUklOR1M7Ci0KLSNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCi0JV0FSTl9PTih1c2VkIDwgMCk7Ci0JV0FSTl9PTih1c2VkID4gZnAtPmJwLT50eF9yaW5nX3NpemUpOwotCVdBUk5fT04oKGZwLT5icC0+dHhfcmluZ19zaXplIC0gdXNlZCkgPiBNQVhfVFhfQVZBSUwpOwotI2VuZGlmCi0KLQlyZXR1cm4gKHMxNikoZnAtPmJwLT50eF9yaW5nX3NpemUpIC0gdXNlZDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYm54MnhfaGFzX3R4X3dvcmsoc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCkKLXsKLQl1MTYgaHdfY29uczsKLQotCS8qIFRlbGwgY29tcGlsZXIgdGhhdCBzdGF0dXMgYmxvY2sgZmllbGRzIGNhbiBjaGFuZ2UgKi8KLQliYXJyaWVyKCk7Ci0JaHdfY29ucyA9IGxlMTZfdG9fY3B1KCpmcC0+dHhfY29uc19zYik7Ci0JcmV0dXJuIGh3X2NvbnMgIT0gZnAtPnR4X3BrdF9jb25zOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X3R4X2ludChzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBmcC0+YnA7Ci0Jc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwotCXUxNiBod19jb25zLCBzd19jb25zLCBiZF9jb25zID0gZnAtPnR4X2JkX2NvbnM7Ci0KLSNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCi0JaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCi0JCXJldHVybiAtMTsKLSNlbmRpZgotCi0JdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShicC0+ZGV2LCBmcC0+aW5kZXgpOwotCWh3X2NvbnMgPSBsZTE2X3RvX2NwdSgqZnAtPnR4X2NvbnNfc2IpOwotCXN3X2NvbnMgPSBmcC0+dHhfcGt0X2NvbnM7Ci0KLQl3aGlsZSAoc3dfY29ucyAhPSBod19jb25zKSB7Ci0JCXUxNiBwa3RfY29uczsKLQotCQlwa3RfY29ucyA9IFRYX0JEKHN3X2NvbnMpOwotCi0JCS8qIHByZWZldGNoKGJwLT50eF9idWZfcmluZ1twa3RfY29uc10uc2tiKTsgKi8KLQotCQlEUChORVRJRl9NU0dfVFhfRE9ORSwgImh3X2NvbnMgJXUgIHN3X2NvbnMgJXUgIHBrdF9jb25zICV1XG4iLAotCQkgICBod19jb25zLCBzd19jb25zLCBwa3RfY29ucyk7Ci0KLS8qCQlpZiAoTkVYVF9UWF9JRFgoc3dfY29ucykgIT0gaHdfY29ucykgewotCQkJcm1iKCk7Ci0JCQlwcmVmZXRjaChmcC0+dHhfYnVmX3JpbmdbTkVYVF9UWF9JRFgoc3dfY29ucyldLnNrYik7Ci0JCX0KLSovCi0JCWJkX2NvbnMgPSBibngyeF9mcmVlX3R4X3BrdChicCwgZnAsIHBrdF9jb25zKTsKLQkJc3dfY29ucysrOwotCX0KLQotCWZwLT50eF9wa3RfY29ucyA9IHN3X2NvbnM7Ci0JZnAtPnR4X2JkX2NvbnMgPSBiZF9jb25zOwotCi0JLyogTmVlZCB0byBtYWtlIHRoZSB0eF9iZF9jb25zIHVwZGF0ZSB2aXNpYmxlIHRvIHN0YXJ0X3htaXQoKQotCSAqIGJlZm9yZSBjaGVja2luZyBmb3IgbmV0aWZfdHhfcXVldWVfc3RvcHBlZCgpLiAgV2l0aG91dCB0aGUKLQkgKiBtZW1vcnkgYmFycmllciwgdGhlcmUgaXMgYSBzbWFsbCBwb3NzaWJpbGl0eSB0aGF0Ci0JICogc3RhcnRfeG1pdCgpIHdpbGwgbWlzcyBpdCBhbmQgY2F1c2UgdGhlIHF1ZXVlIHRvIGJlIHN0b3BwZWQKLQkgKiBmb3JldmVyLgotCSAqLwotCXNtcF9tYigpOwotCi0JLyogVEJEIG5lZWQgYSB0aHJlc2g/ICovCi0JaWYgKHVubGlrZWx5KG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkpIHsKLQkJLyogVGFraW5nIHR4X2xvY2soKSBpcyBuZWVkZWQgdG8gcHJldmVudCByZWVuYWJsaW5nIHRoZSBxdWV1ZQotCQkgKiB3aGlsZSBpdCdzIGVtcHR5LiBUaGlzIGNvdWxkIGhhdmUgaGFwcGVuIGlmIHJ4X2FjdGlvbigpIGdldHMKLQkJICogc3VzcGVuZGVkIGluIGJueDJ4X3R4X2ludCgpIGFmdGVyIHRoZSBjb25kaXRpb24gYmVmb3JlCi0JCSAqIG5ldGlmX3R4X3dha2VfcXVldWUoKSwgd2hpbGUgdHhfYWN0aW9uIChibngyeF9zdGFydF94bWl0KCkpOgotCQkgKgotCQkgKiBzdG9wcyB0aGUgcXVldWUtPnNlZXMgZnJlc2ggdHhfYmRfY29ucy0+cmVsZWFzZXMgdGhlIHF1ZXVlLT4KLQkJICogc2VuZHMgc29tZSBwYWNrZXRzIGNvbnN1bWluZyB0aGUgd2hvbGUgcXVldWUgYWdhaW4tPgotCQkgKiBzdG9wcyB0aGUgcXVldWUKLQkJICovCi0KLQkJX19uZXRpZl90eF9sb2NrKHR4cSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQotCQlpZiAoKG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkgJiYKLQkJICAgIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfT1BFTikgJiYKLQkJICAgIChibngyeF90eF9hdmFpbChmcCkgPj0gTUFYX1NLQl9GUkFHUyArIDMpKQotCQkJbmV0aWZfdHhfd2FrZV9xdWV1ZSh0eHEpOwotCi0JCV9fbmV0aWZfdHhfdW5sb2NrKHR4cSk7Ci0JfQotCXJldHVybiAwOwotfQotCi0jaWZkZWYgQkNNX0NOSUMKLXN0YXRpYyB2b2lkIGJueDJ4X2NuaWNfY2ZjX2NvbXAoc3RydWN0IGJueDJ4ICpicCwgaW50IGNpZCk7Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgYm54Mnhfc3BfZXZlbnQoc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCwKLQkJCSAgIHVuaW9uIGV0aF9yeF9jcWUgKnJyX2NxZSkKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gZnAtPmJwOwotCWludCBjaWQgPSBTV19DSUQocnJfY3FlLT5yYW1yb2RfY3FlLmNvbm5fYW5kX2NtZF9kYXRhKTsKLQlpbnQgY29tbWFuZCA9IENRRV9DTUQocnJfY3FlLT5yYW1yb2RfY3FlLmNvbm5fYW5kX2NtZF9kYXRhKTsKLQotCURQKEJOWDJYX01TR19TUCwKLQkgICAiZnAgJWQgIGNpZCAlZCAgZ290IHJhbXJvZCAjJWQgIHN0YXRlIGlzICV4ICB0eXBlIGlzICVkXG4iLAotCSAgIGZwLT5pbmRleCwgY2lkLCBjb21tYW5kLCBicC0+c3RhdGUsCi0JICAgcnJfY3FlLT5yYW1yb2RfY3FlLnJhbXJvZF90eXBlKTsKLQotCWJwLT5zcHFfbGVmdCsrOwotCi0JaWYgKGZwLT5pbmRleCkgewotCQlzd2l0Y2ggKGNvbW1hbmQgfCBmcC0+c3RhdGUpIHsKLQkJY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfQ0xJRU5UX1NFVFVQIHwKLQkJCQkJCUJOWDJYX0ZQX1NUQVRFX09QRU5JTkcpOgotCQkJRFAoTkVUSUZfTVNHX0lGVVAsICJnb3QgTVVMVElbJWRdIHNldHVwIHJhbXJvZFxuIiwKLQkJCSAgIGNpZCk7Ci0JCQlmcC0+c3RhdGUgPSBCTlgyWF9GUF9TVEFURV9PUEVOOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfSEFMVCB8IEJOWDJYX0ZQX1NUQVRFX0hBTFRJTkcpOgotCQkJRFAoTkVUSUZfTVNHX0lGRE9XTiwgImdvdCBNVUxUSVslZF0gaGFsdCByYW1yb2RcbiIsCi0JCQkgICBjaWQpOwotCQkJZnAtPnN0YXRlID0gQk5YMlhfRlBfU1RBVEVfSEFMVEVEOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCUJOWDJYX0VSUigidW5leHBlY3RlZCBNQyByZXBseSAoJWQpICAiCi0JCQkJICAiZnBbJWRdIHN0YXRlIGlzICV4XG4iLAotCQkJCSAgY29tbWFuZCwgZnAtPmluZGV4LCBmcC0+c3RhdGUpOwotCQkJYnJlYWs7Ci0JCX0KLQkJbWIoKTsgLyogZm9yY2UgYm54Mnhfd2FpdF9yYW1yb2QoKSB0byBzZWUgdGhlIGNoYW5nZSAqLwotCQlyZXR1cm47Ci0JfQotCi0Jc3dpdGNoIChjb21tYW5kIHwgYnAtPnN0YXRlKSB7Ci0JY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfUE9SVF9TRVRVUCB8IEJOWDJYX1NUQVRFX09QRU5JTkdfV0FJVDRfUE9SVCk6Ci0JCURQKE5FVElGX01TR19JRlVQLCAiZ290IHNldHVwIHJhbXJvZFxuIik7Ci0JCWJwLT5zdGF0ZSA9IEJOWDJYX1NUQVRFX09QRU47Ci0JCWJyZWFrOwotCi0JY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfSEFMVCB8IEJOWDJYX1NUQVRFX0NMT1NJTkdfV0FJVDRfSEFMVCk6Ci0JCURQKE5FVElGX01TR19JRkRPV04sICJnb3QgaGFsdCByYW1yb2RcbiIpOwotCQlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9DTE9TSU5HX1dBSVQ0X0RFTEVURTsKLQkJZnAtPnN0YXRlID0gQk5YMlhfRlBfU1RBVEVfSEFMVEVEOwotCQlicmVhazsKLQotCWNhc2UgKFJBTVJPRF9DTURfSURfRVRIX0NGQ19ERUwgfCBCTlgyWF9TVEFURV9DTE9TSU5HX1dBSVQ0X0hBTFQpOgotCQlEUChORVRJRl9NU0dfSUZET1dOLCAiZ290IGRlbGV0ZSByYW1yb2QgZm9yIE1VTFRJWyVkXVxuIiwgY2lkKTsKLQkJYm54MnhfZnAoYnAsIGNpZCwgc3RhdGUpID0gQk5YMlhfRlBfU1RBVEVfQ0xPU0VEOwotCQlicmVhazsKLQotI2lmZGVmIEJDTV9DTklDCi0JY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfQ0ZDX0RFTCB8IEJOWDJYX1NUQVRFX09QRU4pOgotCQlEUChORVRJRl9NU0dfSUZET1dOLCAiZ290IGRlbGV0ZSByYW1yb2QgZm9yIENJRCAlZFxuIiwgY2lkKTsKLQkJYm54MnhfY25pY19jZmNfY29tcChicCwgY2lkKTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotCWNhc2UgKFJBTVJPRF9DTURfSURfRVRIX1NFVF9NQUMgfCBCTlgyWF9TVEFURV9PUEVOKToKLQljYXNlIChSQU1ST0RfQ01EX0lEX0VUSF9TRVRfTUFDIHwgQk5YMlhfU1RBVEVfRElBRyk6Ci0JCURQKE5FVElGX01TR19JRlVQLCAiZ290IHNldCBtYWMgcmFtcm9kXG4iKTsKLQkJYnAtPnNldF9tYWNfcGVuZGluZy0tOwotCQlzbXBfd21iKCk7Ci0JCWJyZWFrOwotCi0JY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfU0VUX01BQyB8IEJOWDJYX1NUQVRFX0NMT1NJTkdfV0FJVDRfSEFMVCk6Ci0JCURQKE5FVElGX01TR19JRkRPV04sICJnb3QgKHVuKXNldCBtYWMgcmFtcm9kXG4iKTsKLQkJYnAtPnNldF9tYWNfcGVuZGluZy0tOwotCQlzbXBfd21iKCk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJQk5YMlhfRVJSKCJ1bmV4cGVjdGVkIE1DIHJlcGx5ICglZCkgIGJwLT5zdGF0ZSBpcyAleFxuIiwKLQkJCSAgY29tbWFuZCwgYnAtPnN0YXRlKTsKLQkJYnJlYWs7Ci0JfQotCW1iKCk7IC8qIGZvcmNlIGJueDJ4X3dhaXRfcmFtcm9kKCkgdG8gc2VlIHRoZSBjaGFuZ2UgKi8KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X2ZyZWVfcnhfc2dlKHN0cnVjdCBibngyeCAqYnAsCi0JCQkJICAgICBzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwLCB1MTYgaW5kZXgpCi17Ci0Jc3RydWN0IHN3X3J4X3BhZ2UgKnN3X2J1ZiA9ICZmcC0+cnhfcGFnZV9yaW5nW2luZGV4XTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHN3X2J1Zi0+cGFnZTsKLQlzdHJ1Y3QgZXRoX3J4X3NnZSAqc2dlID0gJmZwLT5yeF9zZ2VfcmluZ1tpbmRleF07Ci0KLQkvKiBTa2lwICJuZXh0IHBhZ2UiIGVsZW1lbnRzICovCi0JaWYgKCFwYWdlKQotCQlyZXR1cm47Ci0KLQlkbWFfdW5tYXBfcGFnZSgmYnAtPnBkZXYtPmRldiwgZG1hX3VubWFwX2FkZHIoc3dfYnVmLCBtYXBwaW5nKSwKLQkJICAgICAgIFNHRV9QQUdFX1NJWkUqUEFHRVNfUEVSX1NHRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQlfX2ZyZWVfcGFnZXMocGFnZSwgUEFHRVNfUEVSX1NHRV9TSElGVCk7Ci0KLQlzd19idWYtPnBhZ2UgPSBOVUxMOwotCXNnZS0+YWRkcl9oaSA9IDA7Ci0Jc2dlLT5hZGRyX2xvID0gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X2ZyZWVfcnhfc2dlX3JhbmdlKHN0cnVjdCBibngyeCAqYnAsCi0JCQkJCSAgIHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsIGludCBsYXN0KQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGxhc3Q7IGkrKykKLQkJYm54MnhfZnJlZV9yeF9zZ2UoYnAsIGZwLCBpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYm54MnhfYWxsb2Nfcnhfc2dlKHN0cnVjdCBibngyeCAqYnAsCi0JCQkJICAgICBzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwLCB1MTYgaW5kZXgpCi17Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlcyhHRlBfQVRPTUlDLCBQQUdFU19QRVJfU0dFX1NISUZUKTsKLQlzdHJ1Y3Qgc3dfcnhfcGFnZSAqc3dfYnVmID0gJmZwLT5yeF9wYWdlX3JpbmdbaW5kZXhdOwotCXN0cnVjdCBldGhfcnhfc2dlICpzZ2UgPSAmZnAtPnJ4X3NnZV9yaW5nW2luZGV4XTsKLQlkbWFfYWRkcl90IG1hcHBpbmc7Ci0KLQlpZiAodW5saWtlbHkocGFnZSA9PSBOVUxMKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltYXBwaW5nID0gZG1hX21hcF9wYWdlKCZicC0+cGRldi0+ZGV2LCBwYWdlLCAwLAotCQkJICAgICAgIFNHRV9QQUdFX1NJWkUqUEFHRVNfUEVSX1NHRSwgRE1BX0ZST01fREVWSUNFKTsKLQlpZiAodW5saWtlbHkoZG1hX21hcHBpbmdfZXJyb3IoJmJwLT5wZGV2LT5kZXYsIG1hcHBpbmcpKSkgewotCQlfX2ZyZWVfcGFnZXMocGFnZSwgUEFHRVNfUEVSX1NHRV9TSElGVCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXN3X2J1Zi0+cGFnZSA9IHBhZ2U7Ci0JZG1hX3VubWFwX2FkZHJfc2V0KHN3X2J1ZiwgbWFwcGluZywgbWFwcGluZyk7Ci0KLQlzZ2UtPmFkZHJfaGkgPSBjcHVfdG9fbGUzMihVNjRfSEkobWFwcGluZykpOwotCXNnZS0+YWRkcl9sbyA9IGNwdV90b19sZTMyKFU2NF9MTyhtYXBwaW5nKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYm54MnhfYWxsb2Nfcnhfc2tiKHN0cnVjdCBibngyeCAqYnAsCi0JCQkJICAgICBzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwLCB1MTYgaW5kZXgpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3Qgc3dfcnhfYmQgKnJ4X2J1ZiA9ICZmcC0+cnhfYnVmX3JpbmdbaW5kZXhdOwotCXN0cnVjdCBldGhfcnhfYmQgKnJ4X2JkID0gJmZwLT5yeF9kZXNjX3JpbmdbaW5kZXhdOwotCWRtYV9hZGRyX3QgbWFwcGluZzsKLQotCXNrYiA9IG5ldGRldl9hbGxvY19za2IoYnAtPmRldiwgYnAtPnJ4X2J1Zl9zaXplKTsKLQlpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1hcHBpbmcgPSBkbWFfbWFwX3NpbmdsZSgmYnAtPnBkZXYtPmRldiwgc2tiLT5kYXRhLCBicC0+cnhfYnVmX3NpemUsCi0JCQkJIERNQV9GUk9NX0RFVklDRSk7Ci0JaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKCZicC0+cGRldi0+ZGV2LCBtYXBwaW5nKSkpIHsKLQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlyeF9idWYtPnNrYiA9IHNrYjsKLQlkbWFfdW5tYXBfYWRkcl9zZXQocnhfYnVmLCBtYXBwaW5nLCBtYXBwaW5nKTsKLQotCXJ4X2JkLT5hZGRyX2hpID0gY3B1X3RvX2xlMzIoVTY0X0hJKG1hcHBpbmcpKTsKLQlyeF9iZC0+YWRkcl9sbyA9IGNwdV90b19sZTMyKFU2NF9MTyhtYXBwaW5nKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogbm90ZSB0aGF0IHdlIGFyZSBub3QgYWxsb2NhdGluZyBhIG5ldyBza2IsCi0gKiB3ZSBhcmUganVzdCBtb3Zpbmcgb25lIGZyb20gY29ucyB0byBwcm9kCi0gKiB3ZSBhcmUgbm90IGNyZWF0aW5nIGEgbmV3IG1hcHBpbmcsCi0gKiBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIGZvciBkbWFfbWFwcGluZ19lcnJvcigpLgotICovCi1zdGF0aWMgdm9pZCBibngyeF9yZXVzZV9yeF9za2Ioc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCwKLQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgY29ucywgdTE2IHByb2QpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IGZwLT5icDsKLQlzdHJ1Y3Qgc3dfcnhfYmQgKmNvbnNfcnhfYnVmID0gJmZwLT5yeF9idWZfcmluZ1tjb25zXTsKLQlzdHJ1Y3Qgc3dfcnhfYmQgKnByb2RfcnhfYnVmID0gJmZwLT5yeF9idWZfcmluZ1twcm9kXTsKLQlzdHJ1Y3QgZXRoX3J4X2JkICpjb25zX2JkID0gJmZwLT5yeF9kZXNjX3JpbmdbY29uc107Ci0Jc3RydWN0IGV0aF9yeF9iZCAqcHJvZF9iZCA9ICZmcC0+cnhfZGVzY19yaW5nW3Byb2RdOwotCi0JZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoJmJwLT5wZGV2LT5kZXYsCi0JCQkJICAgZG1hX3VubWFwX2FkZHIoY29uc19yeF9idWYsIG1hcHBpbmcpLAotCQkJCSAgIFJYX0NPUFlfVEhSRVNILCBETUFfRlJPTV9ERVZJQ0UpOwotCi0JcHJvZF9yeF9idWYtPnNrYiA9IGNvbnNfcnhfYnVmLT5za2I7Ci0JZG1hX3VubWFwX2FkZHJfc2V0KHByb2RfcnhfYnVmLCBtYXBwaW5nLAotCQkJICAgZG1hX3VubWFwX2FkZHIoY29uc19yeF9idWYsIG1hcHBpbmcpKTsKLQkqcHJvZF9iZCA9ICpjb25zX2JkOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfdXBkYXRlX2xhc3RfbWF4X3NnZShzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwLAotCQkJCQkgICAgIHUxNiBpZHgpCi17Ci0JdTE2IGxhc3RfbWF4ID0gZnAtPmxhc3RfbWF4X3NnZTsKLQotCWlmIChTVUJfUzE2KGlkeCwgbGFzdF9tYXgpID4gMCkKLQkJZnAtPmxhc3RfbWF4X3NnZSA9IGlkeDsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfY2xlYXJfc2dlX21hc2tfbmV4dF9lbGVtcyhzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwKQotewotCWludCBpLCBqOwotCi0JZm9yIChpID0gMTsgaSA8PSBOVU1fUlhfU0dFX1BBR0VTOyBpKyspIHsKLQkJaW50IGlkeCA9IFJYX1NHRV9DTlQgKiBpIC0gMTsKLQotCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7Ci0JCQlTR0VfTUFTS19DTEVBUl9CSVQoZnAsIGlkeCk7Ci0JCQlpZHgtLTsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgYm54MnhfdXBkYXRlX3NnZV9wcm9kKHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsCi0JCQkJICBzdHJ1Y3QgZXRoX2Zhc3RfcGF0aF9yeF9jcWUgKmZwX2NxZSkKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gZnAtPmJwOwotCXUxNiBzZ2VfbGVuID0gU0dFX1BBR0VfQUxJR04obGUxNl90b19jcHUoZnBfY3FlLT5wa3RfbGVuKSAtCi0JCQkJICAgICBsZTE2X3RvX2NwdShmcF9jcWUtPmxlbl9vbl9iZCkpID4+Ci0JCSAgICAgIFNHRV9QQUdFX1NISUZUOwotCXUxNiBsYXN0X21heCwgbGFzdF9lbGVtLCBmaXJzdF9lbGVtOwotCXUxNiBkZWx0YSA9IDA7Ci0JdTE2IGk7Ci0KLQlpZiAoIXNnZV9sZW4pCi0JCXJldHVybjsKLQotCS8qIEZpcnN0IG1hcmsgYWxsIHVzZWQgcGFnZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc2dlX2xlbjsgaSsrKQotCQlTR0VfTUFTS19DTEVBUl9CSVQoZnAsIFJYX1NHRShsZTE2X3RvX2NwdShmcF9jcWUtPnNnbFtpXSkpKTsKLQotCURQKE5FVElGX01TR19SWF9TVEFUVVMsICJmcF9jcWUtPnNnbFslZF0gPSAlZFxuIiwKLQkgICBzZ2VfbGVuIC0gMSwgbGUxNl90b19jcHUoZnBfY3FlLT5zZ2xbc2dlX2xlbiAtIDFdKSk7Ci0KLQkvKiBIZXJlIHdlIGFzc3VtZSB0aGF0IHRoZSBsYXN0IFNHRSBpbmRleCBpcyB0aGUgYmlnZ2VzdCAqLwotCXByZWZldGNoKCh2b2lkICopKGZwLT5zZ2VfbWFzaykpOwotCWJueDJ4X3VwZGF0ZV9sYXN0X21heF9zZ2UoZnAsIGxlMTZfdG9fY3B1KGZwX2NxZS0+c2dsW3NnZV9sZW4gLSAxXSkpOwotCi0JbGFzdF9tYXggPSBSWF9TR0UoZnAtPmxhc3RfbWF4X3NnZSk7Ci0JbGFzdF9lbGVtID0gbGFzdF9tYXggPj4gUlhfU0dFX01BU0tfRUxFTV9TSElGVDsKLQlmaXJzdF9lbGVtID0gUlhfU0dFKGZwLT5yeF9zZ2VfcHJvZCkgPj4gUlhfU0dFX01BU0tfRUxFTV9TSElGVDsKLQotCS8qIElmIHJpbmcgaXMgbm90IGZ1bGwgKi8KLQlpZiAobGFzdF9lbGVtICsgMSAhPSBmaXJzdF9lbGVtKQotCQlsYXN0X2VsZW0rKzsKLQotCS8qIE5vdyB1cGRhdGUgdGhlIHByb2QgKi8KLQlmb3IgKGkgPSBmaXJzdF9lbGVtOyBpICE9IGxhc3RfZWxlbTsgaSA9IE5FWFRfU0dFX01BU0tfRUxFTShpKSkgewotCQlpZiAobGlrZWx5KGZwLT5zZ2VfbWFza1tpXSkpCi0JCQlicmVhazsKLQotCQlmcC0+c2dlX21hc2tbaV0gPSBSWF9TR0VfTUFTS19FTEVNX09ORV9NQVNLOwotCQlkZWx0YSArPSBSWF9TR0VfTUFTS19FTEVNX1NaOwotCX0KLQotCWlmIChkZWx0YSA+IDApIHsKLQkJZnAtPnJ4X3NnZV9wcm9kICs9IGRlbHRhOwotCQkvKiBjbGVhciBwYWdlLWVuZCBlbnRyaWVzICovCi0JCWJueDJ4X2NsZWFyX3NnZV9tYXNrX25leHRfZWxlbXMoZnApOwotCX0KLQotCURQKE5FVElGX01TR19SWF9TVEFUVVMsCi0JICAgImZwLT5sYXN0X21heF9zZ2UgPSAlZCAgZnAtPnJ4X3NnZV9wcm9kID0gJWRcbiIsCi0JICAgZnAtPmxhc3RfbWF4X3NnZSwgZnAtPnJ4X3NnZV9wcm9kKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X2luaXRfc2dlX3JpbmdfYml0X21hc2soc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCkKLXsKLQkvKiBTZXQgdGhlIG1hc2sgdG8gYWxsIDEtczogaXQncyBmYXN0ZXIgdG8gY29tcGFyZSB0byAwIHRoYW4gdG8gMHhmLXMgKi8KLQltZW1zZXQoZnAtPnNnZV9tYXNrLCAweGZmLAotCSAgICAgICAoTlVNX1JYX1NHRSA+PiBSWF9TR0VfTUFTS19FTEVNX1NISUZUKSpzaXplb2YodTY0KSk7Ci0KLQkvKiBDbGVhciB0aGUgdHdvIGxhc3QgaW5kaWNlcyBpbiB0aGUgcGFnZSB0byAxOgotCSAgIHRoZXNlIGFyZSB0aGUgaW5kaWNlcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlICJuZXh0IiBlbGVtZW50LAotCSAgIGhlbmNlIHdpbGwgbmV2ZXIgYmUgaW5kaWNhdGVkIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tCi0JICAgdGhlIGNhbGN1bGF0aW9ucy4gKi8KLQlibngyeF9jbGVhcl9zZ2VfbWFza19uZXh0X2VsZW1zKGZwKTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfdHBhX3N0YXJ0KHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsIHUxNiBxdWV1ZSwKLQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgY29ucywgdTE2IHByb2QpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IGZwLT5icDsKLQlzdHJ1Y3Qgc3dfcnhfYmQgKmNvbnNfcnhfYnVmID0gJmZwLT5yeF9idWZfcmluZ1tjb25zXTsKLQlzdHJ1Y3Qgc3dfcnhfYmQgKnByb2RfcnhfYnVmID0gJmZwLT5yeF9idWZfcmluZ1twcm9kXTsKLQlzdHJ1Y3QgZXRoX3J4X2JkICpwcm9kX2JkID0gJmZwLT5yeF9kZXNjX3JpbmdbcHJvZF07Ci0JZG1hX2FkZHJfdCBtYXBwaW5nOwotCi0JLyogbW92ZSBlbXB0eSBza2IgZnJvbSBwb29sIHRvIHByb2QgYW5kIG1hcCBpdCAqLwotCXByb2RfcnhfYnVmLT5za2IgPSBmcC0+dHBhX3Bvb2xbcXVldWVdLnNrYjsKLQltYXBwaW5nID0gZG1hX21hcF9zaW5nbGUoJmJwLT5wZGV2LT5kZXYsIGZwLT50cGFfcG9vbFtxdWV1ZV0uc2tiLT5kYXRhLAotCQkJCSBicC0+cnhfYnVmX3NpemUsIERNQV9GUk9NX0RFVklDRSk7Ci0JZG1hX3VubWFwX2FkZHJfc2V0KHByb2RfcnhfYnVmLCBtYXBwaW5nLCBtYXBwaW5nKTsKLQotCS8qIG1vdmUgcGFydGlhbCBza2IgZnJvbSBjb25zIHRvIHBvb2wgKGRvbid0IHVubWFwIHlldCkgKi8KLQlmcC0+dHBhX3Bvb2xbcXVldWVdID0gKmNvbnNfcnhfYnVmOwotCi0JLyogbWFyayBiaW4gc3RhdGUgYXMgc3RhcnQgLSBwcmludCBlcnJvciBpZiBjdXJyZW50IHN0YXRlICE9IHN0b3AgKi8KLQlpZiAoZnAtPnRwYV9zdGF0ZVtxdWV1ZV0gIT0gQk5YMlhfVFBBX1NUT1ApCi0JCUJOWDJYX0VSUigic3RhcnQgb2YgYmluIG5vdCBpbiBzdG9wIFslZF1cbiIsIHF1ZXVlKTsKLQotCWZwLT50cGFfc3RhdGVbcXVldWVdID0gQk5YMlhfVFBBX1NUQVJUOwotCi0JLyogcG9pbnQgcHJvZF9iZCB0byBuZXcgc2tiICovCi0JcHJvZF9iZC0+YWRkcl9oaSA9IGNwdV90b19sZTMyKFU2NF9ISShtYXBwaW5nKSk7Ci0JcHJvZF9iZC0+YWRkcl9sbyA9IGNwdV90b19sZTMyKFU2NF9MTyhtYXBwaW5nKSk7Ci0KLSNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCi0JZnAtPnRwYV9xdWV1ZV91c2VkIHw9ICgxIDw8IHF1ZXVlKTsKLSNpZmRlZiBfQVNNX0dFTkVSSUNfSU5UX0w2NF9ICi0JRFAoTkVUSUZfTVNHX1JYX1NUQVRVUywgImZwLT50cGFfcXVldWVfdXNlZCA9IDB4JWx4XG4iLAotI2Vsc2UKLQlEUChORVRJRl9NU0dfUlhfU1RBVFVTLCAiZnAtPnRwYV9xdWV1ZV91c2VkID0gMHglbGx4XG4iLAotI2VuZGlmCi0JICAgZnAtPnRwYV9xdWV1ZV91c2VkKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW50IGJueDJ4X2ZpbGxfZnJhZ19za2Ioc3RydWN0IGJueDJ4ICpicCwgc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCwKLQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICAgIHN0cnVjdCBldGhfZmFzdF9wYXRoX3J4X2NxZSAqZnBfY3FlLAotCQkJICAgICAgIHUxNiBjcWVfaWR4KQotewotCXN0cnVjdCBzd19yeF9wYWdlICpyeF9wZywgb2xkX3J4X3BnOwotCXUxNiBsZW5fb25fYmQgPSBsZTE2X3RvX2NwdShmcF9jcWUtPmxlbl9vbl9iZCk7Ci0JdTMyIGksIGZyYWdfbGVuLCBmcmFnX3NpemUsIHBhZ2VzOwotCWludCBlcnI7Ci0JaW50IGo7Ci0KLQlmcmFnX3NpemUgPSBsZTE2X3RvX2NwdShmcF9jcWUtPnBrdF9sZW4pIC0gbGVuX29uX2JkOwotCXBhZ2VzID0gU0dFX1BBR0VfQUxJR04oZnJhZ19zaXplKSA+PiBTR0VfUEFHRV9TSElGVDsKLQotCS8qIFRoaXMgaXMgbmVlZGVkIGluIG9yZGVyIHRvIGVuYWJsZSBmb3J3YXJkaW5nIHN1cHBvcnQgKi8KLQlpZiAoZnJhZ19zaXplKQotCQlza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplID0gbWluKCh1MzIpU0dFX1BBR0VfU0laRSwKLQkJCQkJICAgICAgIG1heChmcmFnX3NpemUsICh1MzIpbGVuX29uX2JkKSk7Ci0KLSNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCi0JaWYgKHBhZ2VzID4gbWluX3QodTMyLCA4LCBNQVhfU0tCX0ZSQUdTKSpTR0VfUEFHRV9TSVpFKlBBR0VTX1BFUl9TR0UpIHsKLQkJQk5YMlhfRVJSKCJTR0wgbGVuZ3RoIGlzIHRvbyBsb25nOiAlZC4gQ1FFIGluZGV4IGlzICVkXG4iLAotCQkJICBwYWdlcywgY3FlX2lkeCk7Ci0JCUJOWDJYX0VSUigiZnBfY3FlLT5wa3RfbGVuID0gJWQgIGZwX2NxZS0+bGVuX29uX2JkID0gJWRcbiIsCi0JCQkgIGZwX2NxZS0+cGt0X2xlbiwgbGVuX29uX2JkKTsKLQkJYm54MnhfcGFuaWMoKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotI2VuZGlmCi0KLQkvKiBSdW4gdGhyb3VnaCB0aGUgU0dMIGFuZCBjb21wb3NlIHRoZSBmcmFnbWVudGVkIHNrYiAqLwotCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgcGFnZXM7IGkgKz0gUEFHRVNfUEVSX1NHRSwgaisrKSB7Ci0JCXUxNiBzZ2VfaWR4ID0gUlhfU0dFKGxlMTZfdG9fY3B1KGZwX2NxZS0+c2dsW2pdKSk7Ci0KLQkJLyogRlcgZ2l2ZXMgdGhlIGluZGljZXMgb2YgdGhlIFNHRSBhcyBpZiB0aGUgcmluZyBpcyBhbiBhcnJheQotCQkgICAobWVhbmluZyB0aGF0ICJuZXh0IiBlbGVtZW50IHdpbGwgY29uc3VtZSAyIGluZGljZXMpICovCi0JCWZyYWdfbGVuID0gbWluKGZyYWdfc2l6ZSwgKHUzMikoU0dFX1BBR0VfU0laRSpQQUdFU19QRVJfU0dFKSk7Ci0JCXJ4X3BnID0gJmZwLT5yeF9wYWdlX3Jpbmdbc2dlX2lkeF07Ci0JCW9sZF9yeF9wZyA9ICpyeF9wZzsKLQotCQkvKiBJZiB3ZSBmYWlsIHRvIGFsbG9jYXRlIGEgc3Vic3RpdHV0ZSBwYWdlLCB3ZSBzaW1wbHkgc3RvcAotCQkgICB3aGVyZSB3ZSBhcmUgYW5kIGRyb3AgdGhlIHdob2xlIHBhY2tldCAqLwotCQllcnIgPSBibngyeF9hbGxvY19yeF9zZ2UoYnAsIGZwLCBzZ2VfaWR4KTsKLQkJaWYgKHVubGlrZWx5KGVycikpIHsKLQkJCWZwLT5ldGhfcV9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0KLQkJLyogVW5tYXAgdGhlIHBhZ2UgYXMgd2UgciBnb2luZyB0byBwYXNzIGl0IHRvIHRoZSBzdGFjayAqLwotCQlkbWFfdW5tYXBfcGFnZSgmYnAtPnBkZXYtPmRldiwKLQkJCSAgICAgICBkbWFfdW5tYXBfYWRkcigmb2xkX3J4X3BnLCBtYXBwaW5nKSwKLQkJCSAgICAgICBTR0VfUEFHRV9TSVpFKlBBR0VTX1BFUl9TR0UsIERNQV9GUk9NX0RFVklDRSk7Ci0KLQkJLyogQWRkIG9uZSBmcmFnIGFuZCB1cGRhdGUgdGhlIGFwcHJvcHJpYXRlIGZpZWxkcyBpbiB0aGUgc2tiICovCi0JCXNrYl9maWxsX3BhZ2VfZGVzYyhza2IsIGosIG9sZF9yeF9wZy5wYWdlLCAwLCBmcmFnX2xlbik7Ci0KLQkJc2tiLT5kYXRhX2xlbiArPSBmcmFnX2xlbjsKLQkJc2tiLT50cnVlc2l6ZSArPSBmcmFnX2xlbjsKLQkJc2tiLT5sZW4gKz0gZnJhZ19sZW47Ci0KLQkJZnJhZ19zaXplIC09IGZyYWdfbGVuOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF90cGFfc3RvcChzdHJ1Y3QgYm54MnggKmJwLCBzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwLAotCQkJICAgdTE2IHF1ZXVlLCBpbnQgcGFkLCBpbnQgbGVuLCB1bmlvbiBldGhfcnhfY3FlICpjcWUsCi0JCQkgICB1MTYgY3FlX2lkeCkKLXsKLQlzdHJ1Y3Qgc3dfcnhfYmQgKnJ4X2J1ZiA9ICZmcC0+dHBhX3Bvb2xbcXVldWVdOwotCXN0cnVjdCBza19idWZmICpza2IgPSByeF9idWYtPnNrYjsKLQkvKiBhbGxvYyBuZXcgc2tiICovCi0Jc3RydWN0IHNrX2J1ZmYgKm5ld19za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGJwLT5kZXYsIGJwLT5yeF9idWZfc2l6ZSk7Ci0KLQkvKiBVbm1hcCBza2IgaW4gdGhlIHBvb2wgYW55d2F5LCBhcyB3ZSBhcmUgZ29pbmcgdG8gY2hhbmdlCi0JICAgcG9vbCBlbnRyeSBzdGF0dXMgdG8gQk5YMlhfVFBBX1NUT1AgZXZlbiBpZiBuZXcgc2tiIGFsbG9jYXRpb24KLQkgICBmYWlscy4gKi8KLQlkbWFfdW5tYXBfc2luZ2xlKCZicC0+cGRldi0+ZGV2LCBkbWFfdW5tYXBfYWRkcihyeF9idWYsIG1hcHBpbmcpLAotCQkJIGJwLT5yeF9idWZfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTsKLQotCWlmIChsaWtlbHkobmV3X3NrYikpIHsKLQkJLyogZml4IGlwIHhzdW0gYW5kIGdpdmUgaXQgdG8gdGhlIHN0YWNrICovCi0JCS8qIChubyBuZWVkIHRvIG1hcCB0aGUgbmV3IHNrYikgKi8KLSNpZmRlZiBCQ01fVkxBTgotCQlpbnQgaXNfdmxhbl9jcWUgPQotCQkJKGxlMTZfdG9fY3B1KGNxZS0+ZmFzdF9wYXRoX2NxZS5wYXJzX2ZsYWdzLmZsYWdzKSAmCi0JCQkgUEFSU0lOR19GTEFHU19WTEFOKTsKLQkJaW50IGlzX25vdF9od2FjY2VsX3ZsYW5fY3FlID0KLQkJCShpc192bGFuX2NxZSAmJiAoIShicC0+ZmxhZ3MgJiBIV19WTEFOX1JYX0ZMQUcpKSk7Ci0jZW5kaWYKLQotCQlwcmVmZXRjaChza2IpOwotCQlwcmVmZXRjaCgoKGNoYXIgKikoc2tiKSkgKyAxMjgpOwotCi0jaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgotCQlpZiAocGFkICsgbGVuID4gYnAtPnJ4X2J1Zl9zaXplKSB7Ci0JCQlCTlgyWF9FUlIoInNrYl9wdXQgaXMgYWJvdXQgdG8gZmFpbC4uLiAgIgotCQkJCSAgInBhZCAlZCAgbGVuICVkICByeF9idWZfc2l6ZSAlZFxuIiwKLQkJCQkgIHBhZCwgbGVuLCBicC0+cnhfYnVmX3NpemUpOwotCQkJYm54MnhfcGFuaWMoKTsKLQkJCXJldHVybjsKLQkJfQotI2VuZGlmCi0KLQkJc2tiX3Jlc2VydmUoc2tiLCBwYWQpOwotCQlza2JfcHV0KHNrYiwgbGVuKTsKLQotCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBicC0+ZGV2KTsKLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQotCQl7Ci0JCQlzdHJ1Y3QgaXBoZHIgKmlwaDsKLQotCQkJaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKLSNpZmRlZiBCQ01fVkxBTgotCQkJLyogSWYgdGhlcmUgaXMgbm8gUnggVkxBTiBvZmZsb2FkaW5nIC0KLQkJCSAgIHRha2UgVkxBTiB0YWcgaW50byBhbiBhY2NvdW50ICovCi0JCQlpZiAodW5saWtlbHkoaXNfbm90X2h3YWNjZWxfdmxhbl9jcWUpKQotCQkJCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoKHU4ICopaXBoICsgVkxBTl9ITEVOKTsKLSNlbmRpZgotCQkJaXBoLT5jaGVjayA9IDA7Ci0JCQlpcGgtPmNoZWNrID0gaXBfZmFzdF9jc3VtKCh1OCAqKWlwaCwgaXBoLT5paGwpOwotCQl9Ci0KLQkJaWYgKCFibngyeF9maWxsX2ZyYWdfc2tiKGJwLCBmcCwgc2tiLAotCQkJCQkgJmNxZS0+ZmFzdF9wYXRoX2NxZSwgY3FlX2lkeCkpIHsKLSNpZmRlZiBCQ01fVkxBTgotCQkJaWYgKChicC0+dmxncnAgIT0gTlVMTCkgJiYgaXNfdmxhbl9jcWUgJiYKLQkJCSAgICAoIWlzX25vdF9od2FjY2VsX3ZsYW5fY3FlKSkKLQkJCQl2bGFuX2dyb19yZWNlaXZlKCZmcC0+bmFwaSwgYnAtPnZsZ3JwLAotCQkJCQkJIGxlMTZfdG9fY3B1KGNxZS0+ZmFzdF9wYXRoX2NxZS4KLQkJCQkJCQkgICAgIHZsYW5fdGFnKSwgc2tiKTsKLQkJCWVsc2UKLSNlbmRpZgotCQkJCW5hcGlfZ3JvX3JlY2VpdmUoJmZwLT5uYXBpLCBza2IpOwotCQl9IGVsc2UgewotCQkJRFAoTkVUSUZfTVNHX1JYX1NUQVRVUywgIkZhaWxlZCB0byBhbGxvY2F0ZSBuZXcgcGFnZXMiCi0JCQkgICAiIC0gZHJvcHBpbmcgcGFja2V0IVxuIik7Ci0JCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCX0KLQotCi0JCS8qIHB1dCBuZXcgc2tiIGluIGJpbiAqLwotCQlmcC0+dHBhX3Bvb2xbcXVldWVdLnNrYiA9IG5ld19za2I7Ci0KLQl9IGVsc2UgewotCQkvKiBlbHNlIGRyb3AgdGhlIHBhY2tldCBhbmQga2VlcCB0aGUgYnVmZmVyIGluIHRoZSBiaW4gKi8KLQkJRFAoTkVUSUZfTVNHX1JYX1NUQVRVUywKLQkJICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBuZXcgc2tiIC0gZHJvcHBpbmcgcGFja2V0IVxuIik7Ci0JCWZwLT5ldGhfcV9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7Ci0JfQotCi0JZnAtPnRwYV9zdGF0ZVtxdWV1ZV0gPSBCTlgyWF9UUEFfU1RPUDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X3VwZGF0ZV9yeF9wcm9kKHN0cnVjdCBibngyeCAqYnAsCi0JCQkJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsCi0JCQkJCXUxNiBiZF9wcm9kLCB1MTYgcnhfY29tcF9wcm9kLAotCQkJCQl1MTYgcnhfc2dlX3Byb2QpCi17Ci0Jc3RydWN0IHVzdG9ybV9ldGhfcnhfcHJvZHVjZXJzIHJ4X3Byb2RzID0gezB9OwotCWludCBpOwotCi0JLyogVXBkYXRlIHByb2R1Y2VycyAqLwotCXJ4X3Byb2RzLmJkX3Byb2QgPSBiZF9wcm9kOwotCXJ4X3Byb2RzLmNxZV9wcm9kID0gcnhfY29tcF9wcm9kOwotCXJ4X3Byb2RzLnNnZV9wcm9kID0gcnhfc2dlX3Byb2Q7Ci0KLQkvKgotCSAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBCRCBhbmQgU0dFIGRhdGEgaXMgdXBkYXRlZCBiZWZvcmUgdXBkYXRpbmcgdGhlCi0JICogcHJvZHVjZXJzIHNpbmNlIEZXIG1pZ2h0IHJlYWQgdGhlIEJEL1NHRSByaWdodCBhZnRlciB0aGUgcHJvZHVjZXIKLQkgKiBpcyB1cGRhdGVkLgotCSAqIFRoaXMgaXMgb25seSBhcHBsaWNhYmxlIGZvciB3ZWFrLW9yZGVyZWQgbWVtb3J5IG1vZGVsIGFyY2hzIHN1Y2gKLQkgKiBhcyBJQS02NC4gVGhlIGZvbGxvd2luZyBiYXJyaWVyIGlzIGFsc28gbWFuZGF0b3J5IHNpbmNlIEZXIHdpbGwKLQkgKiBhc3N1bWVzIEJEcyBtdXN0IGhhdmUgYnVmZmVycy4KLQkgKi8KLQl3bWIoKTsKLQotCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHVzdG9ybV9ldGhfcnhfcHJvZHVjZXJzKS80OyBpKyspCi0JCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkJICAgICAgIFVTVE9STV9SWF9QUk9EU19PRkZTRVQoQlBfUE9SVChicCksIGZwLT5jbF9pZCkgKyBpKjQsCi0JCSAgICAgICAoKHUzMiAqKSZyeF9wcm9kcylbaV0pOwotCi0JbW1pb3diKCk7IC8qIGtlZXAgcHJvZCB1cGRhdGVzIG9yZGVyZWQgKi8KLQotCURQKE5FVElGX01TR19SWF9TVEFUVVMsCi0JICAgInF1ZXVlWyVkXTogIHdyb3RlICBiZF9wcm9kICV1ICBjcWVfcHJvZCAldSAgc2dlX3Byb2QgJXVcbiIsCi0JICAgZnAtPmluZGV4LCBiZF9wcm9kLCByeF9jb21wX3Byb2QsIHJ4X3NnZV9wcm9kKTsKLX0KLQotc3RhdGljIGludCBibngyeF9yeF9pbnQoc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCwgaW50IGJ1ZGdldCkKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gZnAtPmJwOwotCXUxNiBiZF9jb25zLCBiZF9wcm9kLCBiZF9wcm9kX2Z3LCBjb21wX3JpbmdfY29uczsKLQl1MTYgaHdfY29tcF9jb25zLCBzd19jb21wX2NvbnMsIHN3X2NvbXBfcHJvZDsKLQlpbnQgcnhfcGt0ID0gMDsKLQotI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKLQlpZiAodW5saWtlbHkoYnAtPnBhbmljKSkKLQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQotCS8qIENRICJuZXh0IGVsZW1lbnQiIGlzIG9mIHRoZSBzaXplIG9mIHRoZSByZWd1bGFyIGVsZW1lbnQsCi0JICAgdGhhdCdzIHdoeSBpdCdzIG9rIGhlcmUgKi8KLQlod19jb21wX2NvbnMgPSBsZTE2X3RvX2NwdSgqZnAtPnJ4X2NvbnNfc2IpOwotCWlmICgoaHdfY29tcF9jb25zICYgTUFYX1JDUV9ERVNDX0NOVCkgPT0gTUFYX1JDUV9ERVNDX0NOVCkKLQkJaHdfY29tcF9jb25zKys7Ci0KLQliZF9jb25zID0gZnAtPnJ4X2JkX2NvbnM7Ci0JYmRfcHJvZCA9IGZwLT5yeF9iZF9wcm9kOwotCWJkX3Byb2RfZncgPSBiZF9wcm9kOwotCXN3X2NvbXBfY29ucyA9IGZwLT5yeF9jb21wX2NvbnM7Ci0Jc3dfY29tcF9wcm9kID0gZnAtPnJ4X2NvbXBfcHJvZDsKLQotCS8qIE1lbW9yeSBiYXJyaWVyIG5lY2Vzc2FyeSBhcyBzcGVjdWxhdGl2ZSByZWFkcyBvZiB0aGUgcngKLQkgKiBidWZmZXIgY2FuIGJlIGFoZWFkIG9mIHRoZSBpbmRleCBpbiB0aGUgc3RhdHVzIGJsb2NrCi0JICovCi0Jcm1iKCk7Ci0KLQlEUChORVRJRl9NU0dfUlhfU1RBVFVTLAotCSAgICJxdWV1ZVslZF06ICBod19jb21wX2NvbnMgJXUgIHN3X2NvbXBfY29ucyAldVxuIiwKLQkgICBmcC0+aW5kZXgsIGh3X2NvbXBfY29ucywgc3dfY29tcF9jb25zKTsKLQotCXdoaWxlIChzd19jb21wX2NvbnMgIT0gaHdfY29tcF9jb25zKSB7Ci0JCXN0cnVjdCBzd19yeF9iZCAqcnhfYnVmID0gTlVMTDsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkJdW5pb24gZXRoX3J4X2NxZSAqY3FlOwotCQl1OCBjcWVfZnBfZmxhZ3MsIGNxZV9mcF9zdGF0dXNfZmxhZ3M7Ci0JCXUxNiBsZW4sIHBhZDsKLQotCQljb21wX3JpbmdfY29ucyA9IFJDUV9CRChzd19jb21wX2NvbnMpOwotCQliZF9wcm9kID0gUlhfQkQoYmRfcHJvZCk7Ci0JCWJkX2NvbnMgPSBSWF9CRChiZF9jb25zKTsKLQotCQkvKiBQcmVmZXRjaCB0aGUgcGFnZSBjb250YWluaW5nIHRoZSBCRCBkZXNjcmlwdG9yCi0JCSAgIGF0IHByb2R1Y2VyJ3MgaW5kZXguIEl0IHdpbGwgYmUgbmVlZGVkIHdoZW4gbmV3IHNrYiBpcwotCQkgICBhbGxvY2F0ZWQgKi8KLQkJcHJlZmV0Y2goKHZvaWQgKikoUEFHRV9BTElHTigodW5zaWduZWQgbG9uZykKLQkJCQkJICAgICAoJmZwLT5yeF9kZXNjX3JpbmdbYmRfcHJvZF0pKSAtCi0JCQkJICBQQUdFX1NJWkUgKyAxKSk7Ci0KLQkJY3FlID0gJmZwLT5yeF9jb21wX3JpbmdbY29tcF9yaW5nX2NvbnNdOwotCQljcWVfZnBfZmxhZ3MgPSBjcWUtPmZhc3RfcGF0aF9jcWUudHlwZV9lcnJvcl9mbGFnczsKLQkJY3FlX2ZwX3N0YXR1c19mbGFncyA9IGNxZS0+ZmFzdF9wYXRoX2NxZS5zdGF0dXNfZmxhZ3M7Ci0KLQkJRFAoTkVUSUZfTVNHX1JYX1NUQVRVUywgIkNRRSB0eXBlICV4ICBlcnIgJXggIHN0YXR1cyAleCIKLQkJICAgIiAgcXVldWUgJXggIHZsYW4gJXggIGxlbiAldVxuIiwgQ1FFX1RZUEUoY3FlX2ZwX2ZsYWdzKSwKLQkJICAgY3FlX2ZwX2ZsYWdzLCBjcWUtPmZhc3RfcGF0aF9jcWUuc3RhdHVzX2ZsYWdzLAotCQkgICBsZTMyX3RvX2NwdShjcWUtPmZhc3RfcGF0aF9jcWUucnNzX2hhc2hfcmVzdWx0KSwKLQkJICAgbGUxNl90b19jcHUoY3FlLT5mYXN0X3BhdGhfY3FlLnZsYW5fdGFnKSwKLQkJICAgbGUxNl90b19jcHUoY3FlLT5mYXN0X3BhdGhfY3FlLnBrdF9sZW4pKTsKLQotCQkvKiBpcyB0aGlzIGEgc2xvd3BhdGggbXNnPyAqLwotCQlpZiAodW5saWtlbHkoQ1FFX1RZUEUoY3FlX2ZwX2ZsYWdzKSkpIHsKLQkJCWJueDJ4X3NwX2V2ZW50KGZwLCBjcWUpOwotCQkJZ290byBuZXh0X2NxZTsKLQotCQkvKiB0aGlzIGlzIGFuIHJ4IHBhY2tldCAqLwotCQl9IGVsc2UgewotCQkJcnhfYnVmID0gJmZwLT5yeF9idWZfcmluZ1tiZF9jb25zXTsKLQkJCXNrYiA9IHJ4X2J1Zi0+c2tiOwotCQkJcHJlZmV0Y2goc2tiKTsKLQkJCWxlbiA9IGxlMTZfdG9fY3B1KGNxZS0+ZmFzdF9wYXRoX2NxZS5wa3RfbGVuKTsKLQkJCXBhZCA9IGNxZS0+ZmFzdF9wYXRoX2NxZS5wbGFjZW1lbnRfb2Zmc2V0OwotCi0JCQkvKiBJZiBDUUUgaXMgbWFya2VkIGJvdGggVFBBX1NUQVJUIGFuZCBUUEFfRU5ECi0JCQkgICBpdCBpcyBhIG5vbi1UUEEgQ1FFICovCi0JCQlpZiAoKCFmcC0+ZGlzYWJsZV90cGEpICYmCi0JCQkgICAgKFRQQV9UWVBFKGNxZV9mcF9mbGFncykgIT0KLQkJCQkJKFRQQV9UWVBFX1NUQVJUIHwgVFBBX1RZUEVfRU5EKSkpIHsKLQkJCQl1MTYgcXVldWUgPSBjcWUtPmZhc3RfcGF0aF9jcWUucXVldWVfaW5kZXg7Ci0KLQkJCQlpZiAoVFBBX1RZUEUoY3FlX2ZwX2ZsYWdzKSA9PSBUUEFfVFlQRV9TVEFSVCkgewotCQkJCQlEUChORVRJRl9NU0dfUlhfU1RBVFVTLAotCQkJCQkgICAiY2FsbGluZyB0cGFfc3RhcnQgb24gcXVldWUgJWRcbiIsCi0JCQkJCSAgIHF1ZXVlKTsKLQotCQkJCQlibngyeF90cGFfc3RhcnQoZnAsIHF1ZXVlLCBza2IsCi0JCQkJCQkJYmRfY29ucywgYmRfcHJvZCk7Ci0JCQkJCWdvdG8gbmV4dF9yeDsKLQkJCQl9Ci0KLQkJCQlpZiAoVFBBX1RZUEUoY3FlX2ZwX2ZsYWdzKSA9PSBUUEFfVFlQRV9FTkQpIHsKLQkJCQkJRFAoTkVUSUZfTVNHX1JYX1NUQVRVUywKLQkJCQkJICAgImNhbGxpbmcgdHBhX3N0b3Agb24gcXVldWUgJWRcbiIsCi0JCQkJCSAgIHF1ZXVlKTsKLQotCQkJCQlpZiAoIUJOWDJYX1JYX1NVTV9GSVgoY3FlKSkKLQkJCQkJCUJOWDJYX0VSUigiU1RPUCBvbiBub25lIFRDUCAiCi0JCQkJCQkJICAiZGF0YVxuIik7Ci0KLQkJCQkJLyogVGhpcyBpcyBhIHNpemUgb2YgdGhlIGxpbmVhciBkYXRhCi0JCQkJCSAgIG9uIHRoaXMgc2tiICovCi0JCQkJCWxlbiA9IGxlMTZfdG9fY3B1KGNxZS0+ZmFzdF9wYXRoX2NxZS4KLQkJCQkJCQkJbGVuX29uX2JkKTsKLQkJCQkJYm54MnhfdHBhX3N0b3AoYnAsIGZwLCBxdWV1ZSwgcGFkLAotCQkJCQkJICAgIGxlbiwgY3FlLCBjb21wX3JpbmdfY29ucyk7Ci0jaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgotCQkJCQlpZiAoYnAtPnBhbmljKQotCQkJCQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQotCQkJCQlibngyeF91cGRhdGVfc2dlX3Byb2QoZnAsCi0JCQkJCQkJJmNxZS0+ZmFzdF9wYXRoX2NxZSk7Ci0JCQkJCWdvdG8gbmV4dF9jcWU7Ci0JCQkJfQotCQkJfQotCi0JCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSgmYnAtPnBkZXYtPmRldiwKLQkJCQkJZG1hX3VubWFwX2FkZHIocnhfYnVmLCBtYXBwaW5nKSwKLQkJCQkJCSAgIHBhZCArIFJYX0NPUFlfVEhSRVNILAotCQkJCQkJICAgRE1BX0ZST01fREVWSUNFKTsKLQkJCXByZWZldGNoKCgoY2hhciAqKShza2IpKSArIDEyOCk7Ci0KLQkJCS8qIGlzIHRoaXMgYW4gZXJyb3IgcGFja2V0PyAqLwotCQkJaWYgKHVubGlrZWx5KGNxZV9mcF9mbGFncyAmIEVUSF9SWF9FUlJPUl9GQUxHUykpIHsKLQkJCQlEUChORVRJRl9NU0dfUlhfRVJSLAotCQkJCSAgICJFUlJPUiAgZmxhZ3MgJXggIHJ4IHBhY2tldCAldVxuIiwKLQkJCQkgICBjcWVfZnBfZmxhZ3MsIHN3X2NvbXBfY29ucyk7Ci0JCQkJZnAtPmV0aF9xX3N0YXRzLnJ4X2Vycl9kaXNjYXJkX3BrdCsrOwotCQkJCWdvdG8gcmV1c2Vfcng7Ci0JCQl9Ci0KLQkJCS8qIFNpbmNlIHdlIGRvbid0IGhhdmUgYSBqdW1ibyByaW5nCi0JCQkgKiBjb3B5IHNtYWxsIHBhY2tldHMgaWYgbXR1ID4gMTUwMAotCQkJICovCi0JCQlpZiAoKGJwLT5kZXYtPm10dSA+IEVUSF9NQVhfUEFDS0VUX1NJWkUpICYmCi0JCQkgICAgKGxlbiA8PSBSWF9DT1BZX1RIUkVTSCkpIHsKLQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsKLQotCQkJCW5ld19za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGJwLT5kZXYsCi0JCQkJCQkJICAgbGVuICsgcGFkKTsKLQkJCQlpZiAobmV3X3NrYiA9PSBOVUxMKSB7Ci0JCQkJCURQKE5FVElGX01TR19SWF9FUlIsCi0JCQkJCSAgICJFUlJPUiAgcGFja2V0IGRyb3BwZWQgIgotCQkJCQkgICAiYmVjYXVzZSBvZiBhbGxvYyBmYWlsdXJlXG4iKTsKLQkJCQkJZnAtPmV0aF9xX3N0YXRzLnJ4X3NrYl9hbGxvY19mYWlsZWQrKzsKLQkJCQkJZ290byByZXVzZV9yeDsKLQkJCQl9Ci0KLQkJCQkvKiBhbGlnbmVkIGNvcHkgKi8KLQkJCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChza2IsIHBhZCwKLQkJCQkJCSAgICBuZXdfc2tiLT5kYXRhICsgcGFkLCBsZW4pOwotCQkJCXNrYl9yZXNlcnZlKG5ld19za2IsIHBhZCk7Ci0JCQkJc2tiX3B1dChuZXdfc2tiLCBsZW4pOwotCi0JCQkJYm54MnhfcmV1c2Vfcnhfc2tiKGZwLCBza2IsIGJkX2NvbnMsIGJkX3Byb2QpOwotCi0JCQkJc2tiID0gbmV3X3NrYjsKLQotCQkJfSBlbHNlCi0JCQlpZiAobGlrZWx5KGJueDJ4X2FsbG9jX3J4X3NrYihicCwgZnAsIGJkX3Byb2QpID09IDApKSB7Ci0JCQkJZG1hX3VubWFwX3NpbmdsZSgmYnAtPnBkZXYtPmRldiwKLQkJCQkJZG1hX3VubWFwX2FkZHIocnhfYnVmLCBtYXBwaW5nKSwKLQkJCQkJCSBicC0+cnhfYnVmX3NpemUsCi0JCQkJCQkgRE1BX0ZST01fREVWSUNFKTsKLQkJCQlza2JfcmVzZXJ2ZShza2IsIHBhZCk7Ci0JCQkJc2tiX3B1dChza2IsIGxlbik7Ci0KLQkJCX0gZWxzZSB7Ci0JCQkJRFAoTkVUSUZfTVNHX1JYX0VSUiwKLQkJCQkgICAiRVJST1IgIHBhY2tldCBkcm9wcGVkIGJlY2F1c2UgIgotCQkJCSAgICJvZiBhbGxvYyBmYWlsdXJlXG4iKTsKLQkJCQlmcC0+ZXRoX3Ffc3RhdHMucnhfc2tiX2FsbG9jX2ZhaWxlZCsrOwotcmV1c2Vfcng6Ci0JCQkJYm54MnhfcmV1c2Vfcnhfc2tiKGZwLCBza2IsIGJkX2NvbnMsIGJkX3Byb2QpOwotCQkJCWdvdG8gbmV4dF9yeDsKLQkJCX0KLQotCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgYnAtPmRldik7Ci0KLQkJCWlmICgoYnAtPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYSEFTSCkgJiYKLQkJCSAgICAoY3FlX2ZwX3N0YXR1c19mbGFncyAmCi0JCQkgICAgIEVUSF9GQVNUX1BBVEhfUlhfQ1FFX1JTU19IQVNIX0ZMRykpCi0JCQkJc2tiLT5yeGhhc2ggPSBsZTMyX3RvX2NwdSgKLQkJCQkgICAgY3FlLT5mYXN0X3BhdGhfY3FlLnJzc19oYXNoX3Jlc3VsdCk7Ci0KLQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKLQkJCWlmIChicC0+cnhfY3N1bSkgewotCQkJCWlmIChsaWtlbHkoQk5YMlhfUlhfQ1NVTV9PSyhjcWUpKSkKLQkJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQkJCQllbHNlCi0JCQkJCWZwLT5ldGhfcV9zdGF0cy5od19jc3VtX2VycisrOwotCQkJfQotCQl9Ci0KLQkJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIGZwLT5pbmRleCk7Ci0KLSNpZmRlZiBCQ01fVkxBTgotCQlpZiAoKGJwLT52bGdycCAhPSBOVUxMKSAmJiAoYnAtPmZsYWdzICYgSFdfVkxBTl9SWF9GTEFHKSAmJgotCQkgICAgKGxlMTZfdG9fY3B1KGNxZS0+ZmFzdF9wYXRoX2NxZS5wYXJzX2ZsYWdzLmZsYWdzKSAmCi0JCSAgICAgUEFSU0lOR19GTEFHU19WTEFOKSkKLQkJCXZsYW5fZ3JvX3JlY2VpdmUoJmZwLT5uYXBpLCBicC0+dmxncnAsCi0JCQkJbGUxNl90b19jcHUoY3FlLT5mYXN0X3BhdGhfY3FlLnZsYW5fdGFnKSwgc2tiKTsKLQkJZWxzZQotI2VuZGlmCi0JCQluYXBpX2dyb19yZWNlaXZlKCZmcC0+bmFwaSwgc2tiKTsKLQotCi1uZXh0X3J4OgotCQlyeF9idWYtPnNrYiA9IE5VTEw7Ci0KLQkJYmRfY29ucyA9IE5FWFRfUlhfSURYKGJkX2NvbnMpOwotCQliZF9wcm9kID0gTkVYVF9SWF9JRFgoYmRfcHJvZCk7Ci0JCWJkX3Byb2RfZncgPSBORVhUX1JYX0lEWChiZF9wcm9kX2Z3KTsKLQkJcnhfcGt0Kys7Ci1uZXh0X2NxZToKLQkJc3dfY29tcF9wcm9kID0gTkVYVF9SQ1FfSURYKHN3X2NvbXBfcHJvZCk7Ci0JCXN3X2NvbXBfY29ucyA9IE5FWFRfUkNRX0lEWChzd19jb21wX2NvbnMpOwotCi0JCWlmIChyeF9wa3QgPT0gYnVkZ2V0KQotCQkJYnJlYWs7Ci0JfSAvKiB3aGlsZSAqLwotCi0JZnAtPnJ4X2JkX2NvbnMgPSBiZF9jb25zOwotCWZwLT5yeF9iZF9wcm9kID0gYmRfcHJvZF9mdzsKLQlmcC0+cnhfY29tcF9jb25zID0gc3dfY29tcF9jb25zOwotCWZwLT5yeF9jb21wX3Byb2QgPSBzd19jb21wX3Byb2Q7Ci0KLQkvKiBVcGRhdGUgcHJvZHVjZXJzICovCi0JYm54MnhfdXBkYXRlX3J4X3Byb2QoYnAsIGZwLCBiZF9wcm9kX2Z3LCBzd19jb21wX3Byb2QsCi0JCQkgICAgIGZwLT5yeF9zZ2VfcHJvZCk7Ci0KLQlmcC0+cnhfcGt0ICs9IHJ4X3BrdDsKLQlmcC0+cnhfY2FsbHMrKzsKLQotCXJldHVybiByeF9wa3Q7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBibngyeF9tc2l4X2ZwX2ludChpbnQgaXJxLCB2b2lkICpmcF9jb29raWUpCi17Ci0Jc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9IGZwX2Nvb2tpZTsKLQlzdHJ1Y3QgYm54MnggKmJwID0gZnAtPmJwOwotCi0JLyogUmV0dXJuIGhlcmUgaWYgaW50ZXJydXB0IGlzIGRpc2FibGVkICovCi0JaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZicC0+aW50cl9zZW0pICE9IDApKSB7Ci0JCURQKE5FVElGX01TR19JTlRSLCAiY2FsbGVkIGJ1dCBpbnRyX3NlbSBub3QgMCwgcmV0dXJuaW5nXG4iKTsKLQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCX0KLQotCURQKEJOWDJYX01TR19GUCwgImdvdCBhbiBNU0ktWCBpbnRlcnJ1cHQgb24gSURYOlNCIFslZDolZF1cbiIsCi0JICAgZnAtPmluZGV4LCBmcC0+c2JfaWQpOwotCWJueDJ4X2Fja19zYihicCwgZnAtPnNiX2lkLCBVU1RPUk1fSUQsIDAsIElHVV9JTlRfRElTQUJMRSwgMCk7Ci0KLSNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCi0JaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCi0JCXJldHVybiBJUlFfSEFORExFRDsKLSNlbmRpZgotCi0JLyogSGFuZGxlIFJ4IGFuZCBUeCBhY2NvcmRpbmcgdG8gTVNJLVggdmVjdG9yICovCi0JcHJlZmV0Y2goZnAtPnJ4X2NvbnNfc2IpOwotCXByZWZldGNoKGZwLT50eF9jb25zX3NiKTsKLQlwcmVmZXRjaCgmZnAtPnN0YXR1c19ibGstPnVfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCk7Ci0JcHJlZmV0Y2goJmZwLT5zdGF0dXNfYmxrLT5jX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgpOwotCW5hcGlfc2NoZWR1bGUoJmJueDJ4X2ZwKGJwLCBmcC0+aW5kZXgsIG5hcGkpKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIGlycXJldHVybl90IGJueDJ4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldl9pbnN0YW5jZSk7Ci0JdTE2IHN0YXR1cyA9IGJueDJ4X2Fja19pbnQoYnApOwotCXUxNiBtYXNrOwotCWludCBpOwotCi0JLyogUmV0dXJuIGhlcmUgaWYgaW50ZXJydXB0IGlzIHNoYXJlZCBhbmQgaXQncyBub3QgZm9yIHVzICovCi0JaWYgKHVubGlrZWx5KHN0YXR1cyA9PSAwKSkgewotCQlEUChORVRJRl9NU0dfSU5UUiwgIm5vdCBvdXIgaW50ZXJydXB0IVxuIik7Ci0JCXJldHVybiBJUlFfTk9ORTsKLQl9Ci0JRFAoTkVUSUZfTVNHX0lOVFIsICJnb3QgYW4gaW50ZXJydXB0ICBzdGF0dXMgMHgleFxuIiwgc3RhdHVzKTsKLQotCS8qIFJldHVybiBoZXJlIGlmIGludGVycnVwdCBpcyBkaXNhYmxlZCAqLwotCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmYnAtPmludHJfc2VtKSAhPSAwKSkgewotCQlEUChORVRJRl9NU0dfSU5UUiwgImNhbGxlZCBidXQgaW50cl9zZW0gbm90IDAsIHJldHVybmluZ1xuIik7Ci0JCXJldHVybiBJUlFfSEFORExFRDsKLQl9Ci0KLSNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCi0JaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCi0JCXJldHVybiBJUlFfSEFORExFRDsKLSNlbmRpZgotCi0JZm9yIChpID0gMDsgaSA8IEJOWDJYX05VTV9RVUVVRVMoYnApOyBpKyspIHsKLQkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07Ci0KLQkJbWFzayA9IDB4MiA8PCBmcC0+c2JfaWQ7Ci0JCWlmIChzdGF0dXMgJiBtYXNrKSB7Ci0JCQkvKiBIYW5kbGUgUnggYW5kIFR4IGFjY29yZGluZyB0byBTQiBpZCAqLwotCQkJcHJlZmV0Y2goZnAtPnJ4X2NvbnNfc2IpOwotCQkJcHJlZmV0Y2goJmZwLT5zdGF0dXNfYmxrLT51X3N0YXR1c19ibG9jay4KLQkJCQkJCXN0YXR1c19ibG9ja19pbmRleCk7Ci0JCQlwcmVmZXRjaChmcC0+dHhfY29uc19zYik7Ci0JCQlwcmVmZXRjaCgmZnAtPnN0YXR1c19ibGstPmNfc3RhdHVzX2Jsb2NrLgotCQkJCQkJc3RhdHVzX2Jsb2NrX2luZGV4KTsKLQkJCW5hcGlfc2NoZWR1bGUoJmJueDJ4X2ZwKGJwLCBmcC0+aW5kZXgsIG5hcGkpKTsKLQkJCXN0YXR1cyAmPSB+bWFzazsKLQkJfQotCX0KLQotI2lmZGVmIEJDTV9DTklDCi0JbWFzayA9IDB4MiA8PCBDTklDX1NCX0lEKGJwKTsKLQlpZiAoc3RhdHVzICYgKG1hc2sgfCAweDEpKSB7Ci0JCXN0cnVjdCBjbmljX29wcyAqY19vcHMgPSBOVUxMOwotCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJY19vcHMgPSByY3VfZGVyZWZlcmVuY2UoYnAtPmNuaWNfb3BzKTsKLQkJaWYgKGNfb3BzKQotCQkJY19vcHMtPmNuaWNfaGFuZGxlcihicC0+Y25pY19kYXRhLCBOVUxMKTsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQkJc3RhdHVzICY9IH5tYXNrOwotCX0KLSNlbmRpZgotCi0JaWYgKHVubGlrZWx5KHN0YXR1cyAmIDB4MSkpIHsKLQkJcXVldWVfZGVsYXllZF93b3JrKGJueDJ4X3dxLCAmYnAtPnNwX3Rhc2ssIDApOwotCi0JCXN0YXR1cyAmPSB+MHgxOwotCQlpZiAoIXN0YXR1cykKLQkJCXJldHVybiBJUlFfSEFORExFRDsKLQl9Ci0KLQlpZiAodW5saWtlbHkoc3RhdHVzKSkKLQkJRFAoTkVUSUZfTVNHX0lOVFIsICJnb3QgYW4gdW5rbm93biBpbnRlcnJ1cHQhIChzdGF0dXMgMHgleClcbiIsCi0JCSAgIHN0YXR1cyk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLS8qIGVuZCBvZiBmYXN0IHBhdGggKi8KLQotc3RhdGljIHZvaWQgYm54Mnhfc3RhdHNfaGFuZGxlKHN0cnVjdCBibngyeCAqYnAsIGVudW0gYm54Mnhfc3RhdHNfZXZlbnQgZXZlbnQpOwotCi0vKiBMaW5rICovCi0KLS8qCi0gKiBHZW5lcmFsIHNlcnZpY2UgZnVuY3Rpb25zCi0gKi8KLQotc3RhdGljIGludCBibngyeF9hY3F1aXJlX2h3X2xvY2soc3RydWN0IGJueDJ4ICpicCwgdTMyIHJlc291cmNlKQotewotCXUzMiBsb2NrX3N0YXR1czsKLQl1MzIgcmVzb3VyY2VfYml0ID0gKDEgPDwgcmVzb3VyY2UpOwotCWludCBmdW5jID0gQlBfRlVOQyhicCk7Ci0JdTMyIGh3X2xvY2tfY29udHJvbF9yZWc7Ci0JaW50IGNudDsKLQotCS8qIFZhbGlkYXRpbmcgdGhhdCB0aGUgcmVzb3VyY2UgaXMgd2l0aGluIHJhbmdlICovCi0JaWYgKHJlc291cmNlID4gSFdfTE9DS19NQVhfUkVTT1VSQ0VfVkFMVUUpIHsKLQkJRFAoTkVUSUZfTVNHX0hXLAotCQkgICAicmVzb3VyY2UoMHgleCkgPiBIV19MT0NLX01BWF9SRVNPVVJDRV9WQUxVRSgweCV4KVxuIiwKLQkJICAgcmVzb3VyY2UsIEhXX0xPQ0tfTUFYX1JFU09VUkNFX1ZBTFVFKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGZ1bmMgPD0gNSkgewotCQlod19sb2NrX2NvbnRyb2xfcmVnID0gKE1JU0NfUkVHX0RSSVZFUl9DT05UUk9MXzEgKyBmdW5jKjgpOwotCX0gZWxzZSB7Ci0JCWh3X2xvY2tfY29udHJvbF9yZWcgPQotCQkJCShNSVNDX1JFR19EUklWRVJfQ09OVFJPTF83ICsgKGZ1bmMgLSA2KSo4KTsKLQl9Ci0KLQkvKiBWYWxpZGF0aW5nIHRoYXQgdGhlIHJlc291cmNlIGlzIG5vdCBhbHJlYWR5IHRha2VuICovCi0JbG9ja19zdGF0dXMgPSBSRUdfUkQoYnAsIGh3X2xvY2tfY29udHJvbF9yZWcpOwotCWlmIChsb2NrX3N0YXR1cyAmIHJlc291cmNlX2JpdCkgewotCQlEUChORVRJRl9NU0dfSFcsICJsb2NrX3N0YXR1cyAweCV4ICByZXNvdXJjZV9iaXQgMHgleFxuIiwKLQkJICAgbG9ja19zdGF0dXMsIHJlc291cmNlX2JpdCk7Ci0JCXJldHVybiAtRUVYSVNUOwotCX0KLQotCS8qIFRyeSBmb3IgNSBzZWNvbmQgZXZlcnkgNW1zICovCi0JZm9yIChjbnQgPSAwOyBjbnQgPCAxMDAwOyBjbnQrKykgewotCQkvKiBUcnkgdG8gYWNxdWlyZSB0aGUgbG9jayAqLwotCQlSRUdfV1IoYnAsIGh3X2xvY2tfY29udHJvbF9yZWcgKyA0LCByZXNvdXJjZV9iaXQpOwotCQlsb2NrX3N0YXR1cyA9IFJFR19SRChicCwgaHdfbG9ja19jb250cm9sX3JlZyk7Ci0JCWlmIChsb2NrX3N0YXR1cyAmIHJlc291cmNlX2JpdCkKLQkJCXJldHVybiAwOwotCi0JCW1zbGVlcCg1KTsKLQl9Ci0JRFAoTkVUSUZfTVNHX0hXLCAiVGltZW91dFxuIik7Ci0JcmV0dXJuIC1FQUdBSU47Ci19Ci0KLXN0YXRpYyBpbnQgYm54MnhfcmVsZWFzZV9od19sb2NrKHN0cnVjdCBibngyeCAqYnAsIHUzMiByZXNvdXJjZSkKLXsKLQl1MzIgbG9ja19zdGF0dXM7Ci0JdTMyIHJlc291cmNlX2JpdCA9ICgxIDw8IHJlc291cmNlKTsKLQlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOwotCXUzMiBod19sb2NrX2NvbnRyb2xfcmVnOwotCi0JRFAoTkVUSUZfTVNHX0hXLCAiUmVsZWFzaW5nIGEgbG9jayBvbiByZXNvdXJjZSAlZFxuIiwgcmVzb3VyY2UpOwotCi0JLyogVmFsaWRhdGluZyB0aGF0IHRoZSByZXNvdXJjZSBpcyB3aXRoaW4gcmFuZ2UgKi8KLQlpZiAocmVzb3VyY2UgPiBIV19MT0NLX01BWF9SRVNPVVJDRV9WQUxVRSkgewotCQlEUChORVRJRl9NU0dfSFcsCi0JCSAgICJyZXNvdXJjZSgweCV4KSA+IEhXX0xPQ0tfTUFYX1JFU09VUkNFX1ZBTFVFKDB4JXgpXG4iLAotCQkgICByZXNvdXJjZSwgSFdfTE9DS19NQVhfUkVTT1VSQ0VfVkFMVUUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoZnVuYyA8PSA1KSB7Ci0JCWh3X2xvY2tfY29udHJvbF9yZWcgPSAoTUlTQ19SRUdfRFJJVkVSX0NPTlRST0xfMSArIGZ1bmMqOCk7Ci0JfSBlbHNlIHsKLQkJaHdfbG9ja19jb250cm9sX3JlZyA9Ci0JCQkJKE1JU0NfUkVHX0RSSVZFUl9DT05UUk9MXzcgKyAoZnVuYyAtIDYpKjgpOwotCX0KLQotCS8qIFZhbGlkYXRpbmcgdGhhdCB0aGUgcmVzb3VyY2UgaXMgY3VycmVudGx5IHRha2VuICovCi0JbG9ja19zdGF0dXMgPSBSRUdfUkQoYnAsIGh3X2xvY2tfY29udHJvbF9yZWcpOwotCWlmICghKGxvY2tfc3RhdHVzICYgcmVzb3VyY2VfYml0KSkgewotCQlEUChORVRJRl9NU0dfSFcsICJsb2NrX3N0YXR1cyAweCV4ICByZXNvdXJjZV9iaXQgMHgleFxuIiwKLQkJICAgbG9ja19zdGF0dXMsIHJlc291cmNlX2JpdCk7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCVJFR19XUihicCwgaHdfbG9ja19jb250cm9sX3JlZywgcmVzb3VyY2VfYml0KTsKLQlyZXR1cm4gMDsKLX0KLQotLyogSFcgTG9jayBmb3Igc2hhcmVkIGR1YWwgcG9ydCBQSFlzICovCi1zdGF0aWMgdm9pZCBibngyeF9hY3F1aXJlX3BoeV9sb2NrKHN0cnVjdCBibngyeCAqYnApCi17Ci0JbXV0ZXhfbG9jaygmYnAtPnBvcnQucGh5X211dGV4KTsKLQotCWlmIChicC0+cG9ydC5uZWVkX2h3X2xvY2spCi0JCWJueDJ4X2FjcXVpcmVfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV9NRElPKTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfcmVsZWFzZV9waHlfbG9jayhzdHJ1Y3QgYm54MnggKmJwKQotewotCWlmIChicC0+cG9ydC5uZWVkX2h3X2xvY2spCi0JCWJueDJ4X3JlbGVhc2VfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV9NRElPKTsKLQotCW11dGV4X3VubG9jaygmYnAtPnBvcnQucGh5X211dGV4KTsKLX0KLQotaW50IGJueDJ4X2dldF9ncGlvKHN0cnVjdCBibngyeCAqYnAsIGludCBncGlvX251bSwgdTggcG9ydCkKLXsKLQkvKiBUaGUgR1BJTyBzaG91bGQgYmUgc3dhcHBlZCBpZiBzd2FwIHJlZ2lzdGVyIGlzIHNldCBhbmQgYWN0aXZlICovCi0JaW50IGdwaW9fcG9ydCA9IChSRUdfUkQoYnAsIE5JR19SRUdfUE9SVF9TV0FQKSAmJgotCQkJIFJFR19SRChicCwgTklHX1JFR19TVFJBUF9PVkVSUklERSkpIF4gcG9ydDsKLQlpbnQgZ3Bpb19zaGlmdCA9IGdwaW9fbnVtICsKLQkJCShncGlvX3BvcnQgPyBNSVNDX1JFR0lTVEVSU19HUElPX1BPUlRfU0hJRlQgOiAwKTsKLQl1MzIgZ3Bpb19tYXNrID0gKDEgPDwgZ3Bpb19zaGlmdCk7Ci0JdTMyIGdwaW9fcmVnOwotCWludCB2YWx1ZTsKLQotCWlmIChncGlvX251bSA+IE1JU0NfUkVHSVNURVJTX0dQSU9fMykgewotCQlCTlgyWF9FUlIoIkludmFsaWQgR1BJTyAlZFxuIiwgZ3Bpb19udW0pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiByZWFkIEdQSU8gdmFsdWUgKi8KLQlncGlvX3JlZyA9IFJFR19SRChicCwgTUlTQ19SRUdfR1BJTyk7Ci0KLQkvKiBnZXQgdGhlIHJlcXVlc3RlZCBwaW4gdmFsdWUgKi8KLQlpZiAoKGdwaW9fcmVnICYgZ3Bpb19tYXNrKSA9PSBncGlvX21hc2spCi0JCXZhbHVlID0gMTsKLQllbHNlCi0JCXZhbHVlID0gMDsKLQotCURQKE5FVElGX01TR19MSU5LLCAicGluICVkICB2YWx1ZSAweCV4XG4iLCBncGlvX251bSwgdmFsdWUpOwotCi0JcmV0dXJuIHZhbHVlOwotfQotCi1pbnQgYm54Mnhfc2V0X2dwaW8oc3RydWN0IGJueDJ4ICpicCwgaW50IGdwaW9fbnVtLCB1MzIgbW9kZSwgdTggcG9ydCkKLXsKLQkvKiBUaGUgR1BJTyBzaG91bGQgYmUgc3dhcHBlZCBpZiBzd2FwIHJlZ2lzdGVyIGlzIHNldCBhbmQgYWN0aXZlICovCi0JaW50IGdwaW9fcG9ydCA9IChSRUdfUkQoYnAsIE5JR19SRUdfUE9SVF9TV0FQKSAmJgotCQkJIFJFR19SRChicCwgTklHX1JFR19TVFJBUF9PVkVSUklERSkpIF4gcG9ydDsKLQlpbnQgZ3Bpb19zaGlmdCA9IGdwaW9fbnVtICsKLQkJCShncGlvX3BvcnQgPyBNSVNDX1JFR0lTVEVSU19HUElPX1BPUlRfU0hJRlQgOiAwKTsKLQl1MzIgZ3Bpb19tYXNrID0gKDEgPDwgZ3Bpb19zaGlmdCk7Ci0JdTMyIGdwaW9fcmVnOwotCi0JaWYgKGdwaW9fbnVtID4gTUlTQ19SRUdJU1RFUlNfR1BJT18zKSB7Ci0JCUJOWDJYX0VSUigiSW52YWxpZCBHUElPICVkXG4iLCBncGlvX251bSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWJueDJ4X2FjcXVpcmVfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV9HUElPKTsKLQkvKiByZWFkIEdQSU8gYW5kIG1hc2sgZXhjZXB0IHRoZSBmbG9hdCBiaXRzICovCi0JZ3Bpb19yZWcgPSAoUkVHX1JEKGJwLCBNSVNDX1JFR19HUElPKSAmIE1JU0NfUkVHSVNURVJTX0dQSU9fRkxPQVQpOwotCi0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1c6Ci0JCURQKE5FVElGX01TR19MSU5LLCAiU2V0IEdQSU8gJWQgKHNoaWZ0ICVkKSAtPiBvdXRwdXQgbG93XG4iLAotCQkgICBncGlvX251bSwgZ3Bpb19zaGlmdCk7Ci0JCS8qIGNsZWFyIEZMT0FUIGFuZCBzZXQgQ0xSICovCi0JCWdwaW9fcmVnICY9IH4oZ3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX0dQSU9fRkxPQVRfUE9TKTsKLQkJZ3Bpb19yZWcgfD0gIChncGlvX21hc2sgPDwgTUlTQ19SRUdJU1RFUlNfR1BJT19DTFJfUE9TKTsKLQkJYnJlYWs7Ci0KLQljYXNlIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0hJR0g6Ci0JCURQKE5FVElGX01TR19MSU5LLCAiU2V0IEdQSU8gJWQgKHNoaWZ0ICVkKSAtPiBvdXRwdXQgaGlnaFxuIiwKLQkJICAgZ3Bpb19udW0sIGdwaW9fc2hpZnQpOwotCQkvKiBjbGVhciBGTE9BVCBhbmQgc2V0IFNFVCAqLwotCQlncGlvX3JlZyAmPSB+KGdwaW9fbWFzayA8PCBNSVNDX1JFR0lTVEVSU19HUElPX0ZMT0FUX1BPUyk7Ci0JCWdwaW9fcmVnIHw9ICAoZ3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX0dQSU9fU0VUX1BPUyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBNSVNDX1JFR0lTVEVSU19HUElPX0lOUFVUX0hJX1o6Ci0JCURQKE5FVElGX01TR19MSU5LLCAiU2V0IEdQSU8gJWQgKHNoaWZ0ICVkKSAtPiBpbnB1dFxuIiwKLQkJICAgZ3Bpb19udW0sIGdwaW9fc2hpZnQpOwotCQkvKiBzZXQgRkxPQVQgKi8KLQkJZ3Bpb19yZWcgfD0gKGdwaW9fbWFzayA8PCBNSVNDX1JFR0lTVEVSU19HUElPX0ZMT0FUX1BPUyk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JUkVHX1dSKGJwLCBNSVNDX1JFR19HUElPLCBncGlvX3JlZyk7Ci0JYm54MnhfcmVsZWFzZV9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFX0dQSU8pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBibngyeF9zZXRfZ3Bpb19pbnQoc3RydWN0IGJueDJ4ICpicCwgaW50IGdwaW9fbnVtLCB1MzIgbW9kZSwgdTggcG9ydCkKLXsKLQkvKiBUaGUgR1BJTyBzaG91bGQgYmUgc3dhcHBlZCBpZiBzd2FwIHJlZ2lzdGVyIGlzIHNldCBhbmQgYWN0aXZlICovCi0JaW50IGdwaW9fcG9ydCA9IChSRUdfUkQoYnAsIE5JR19SRUdfUE9SVF9TV0FQKSAmJgotCQkJIFJFR19SRChicCwgTklHX1JFR19TVFJBUF9PVkVSUklERSkpIF4gcG9ydDsKLQlpbnQgZ3Bpb19zaGlmdCA9IGdwaW9fbnVtICsKLQkJCShncGlvX3BvcnQgPyBNSVNDX1JFR0lTVEVSU19HUElPX1BPUlRfU0hJRlQgOiAwKTsKLQl1MzIgZ3Bpb19tYXNrID0gKDEgPDwgZ3Bpb19zaGlmdCk7Ci0JdTMyIGdwaW9fcmVnOwotCi0JaWYgKGdwaW9fbnVtID4gTUlTQ19SRUdJU1RFUlNfR1BJT18zKSB7Ci0JCUJOWDJYX0VSUigiSW52YWxpZCBHUElPICVkXG4iLCBncGlvX251bSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWJueDJ4X2FjcXVpcmVfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV9HUElPKTsKLQkvKiByZWFkIEdQSU8gaW50ICovCi0JZ3Bpb19yZWcgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX0dQSU9fSU5UKTsKLQotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfT1VUUFVUX0NMUjoKLQkJRFAoTkVUSUZfTVNHX0xJTkssICJDbGVhciBHUElPIElOVCAlZCAoc2hpZnQgJWQpIC0+ICIKLQkJCQkgICAib3V0cHV0IGxvd1xuIiwgZ3Bpb19udW0sIGdwaW9fc2hpZnQpOwotCQkvKiBjbGVhciBTRVQgYW5kIHNldCBDTFIgKi8KLQkJZ3Bpb19yZWcgJj0gfihncGlvX21hc2sgPDwgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfU0VUX1BPUyk7Ci0JCWdwaW9fcmVnIHw9ICAoZ3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX0NMUl9QT1MpOwotCQlicmVhazsKLQotCWNhc2UgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfT1VUUFVUX1NFVDoKLQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXQgR1BJTyBJTlQgJWQgKHNoaWZ0ICVkKSAtPiAiCi0JCQkJICAgIm91dHB1dCBoaWdoXG4iLCBncGlvX251bSwgZ3Bpb19zaGlmdCk7Ci0JCS8qIGNsZWFyIENMUiBhbmQgc2V0IFNFVCAqLwotCQlncGlvX3JlZyAmPSB+KGdwaW9fbWFzayA8PCBNSVNDX1JFR0lTVEVSU19HUElPX0lOVF9DTFJfUE9TKTsKLQkJZ3Bpb19yZWcgfD0gIChncGlvX21hc2sgPDwgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfU0VUX1BPUyk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JUkVHX1dSKGJwLCBNSVNDX1JFR19HUElPX0lOVCwgZ3Bpb19yZWcpOwotCWJueDJ4X3JlbGVhc2VfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV9HUElPKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X3NldF9zcGlvKHN0cnVjdCBibngyeCAqYnAsIGludCBzcGlvX251bSwgdTMyIG1vZGUpCi17Ci0JdTMyIHNwaW9fbWFzayA9ICgxIDw8IHNwaW9fbnVtKTsKLQl1MzIgc3Bpb19yZWc7Ci0KLQlpZiAoKHNwaW9fbnVtIDwgTUlTQ19SRUdJU1RFUlNfU1BJT180KSB8fAotCSAgICAoc3Bpb19udW0gPiBNSVNDX1JFR0lTVEVSU19TUElPXzcpKSB7Ci0JCUJOWDJYX0VSUigiSW52YWxpZCBTUElPICVkXG4iLCBzcGlvX251bSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWJueDJ4X2FjcXVpcmVfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV9TUElPKTsKLQkvKiByZWFkIFNQSU8gYW5kIG1hc2sgZXhjZXB0IHRoZSBmbG9hdCBiaXRzICovCi0Jc3Bpb19yZWcgPSAoUkVHX1JEKGJwLCBNSVNDX1JFR19TUElPKSAmIE1JU0NfUkVHSVNURVJTX1NQSU9fRkxPQVQpOwotCi0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBNSVNDX1JFR0lTVEVSU19TUElPX09VVFBVVF9MT1c6Ci0JCURQKE5FVElGX01TR19MSU5LLCAiU2V0IFNQSU8gJWQgLT4gb3V0cHV0IGxvd1xuIiwgc3Bpb19udW0pOwotCQkvKiBjbGVhciBGTE9BVCBhbmQgc2V0IENMUiAqLwotCQlzcGlvX3JlZyAmPSB+KHNwaW9fbWFzayA8PCBNSVNDX1JFR0lTVEVSU19TUElPX0ZMT0FUX1BPUyk7Ci0JCXNwaW9fcmVnIHw9ICAoc3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX1NQSU9fQ0xSX1BPUyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBNSVNDX1JFR0lTVEVSU19TUElPX09VVFBVVF9ISUdIOgotCQlEUChORVRJRl9NU0dfTElOSywgIlNldCBTUElPICVkIC0+IG91dHB1dCBoaWdoXG4iLCBzcGlvX251bSk7Ci0JCS8qIGNsZWFyIEZMT0FUIGFuZCBzZXQgU0VUICovCi0JCXNwaW9fcmVnICY9IH4oc3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX1NQSU9fRkxPQVRfUE9TKTsKLQkJc3Bpb19yZWcgfD0gIChzcGlvX21hc2sgPDwgTUlTQ19SRUdJU1RFUlNfU1BJT19TRVRfUE9TKTsKLQkJYnJlYWs7Ci0KLQljYXNlIE1JU0NfUkVHSVNURVJTX1NQSU9fSU5QVVRfSElfWjoKLQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXQgU1BJTyAlZCAtPiBpbnB1dFxuIiwgc3Bpb19udW0pOwotCQkvKiBzZXQgRkxPQVQgKi8KLQkJc3Bpb19yZWcgfD0gKHNwaW9fbWFzayA8PCBNSVNDX1JFR0lTVEVSU19TUElPX0ZMT0FUX1BPUyk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JUkVHX1dSKGJwLCBNSVNDX1JFR19TUElPLCBzcGlvX3JlZyk7Ci0JYm54MnhfcmVsZWFzZV9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFX1NQSU8pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2NhbGNfZmNfYWR2KHN0cnVjdCBibngyeCAqYnApCi17Ci0Jc3dpdGNoIChicC0+bGlua192YXJzLmllZWVfZmMgJgotCQlNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9NQVNLKSB7Ci0JY2FzZSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9OT05FOgotCQlicC0+cG9ydC5hZHZlcnRpc2luZyAmPSB+KEFEVkVSVElTRURfQXN5bV9QYXVzZSB8Ci0JCQkJCSAgQURWRVJUSVNFRF9QYXVzZSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9CT1RIOgotCQlicC0+cG9ydC5hZHZlcnRpc2luZyB8PSAoQURWRVJUSVNFRF9Bc3ltX1BhdXNlIHwKLQkJCQkJIEFEVkVSVElTRURfUGF1c2UpOwotCQlicmVhazsKLQotCWNhc2UgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfQVNZTU1FVFJJQzoKLQkJYnAtPnBvcnQuYWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9Bc3ltX1BhdXNlOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWJwLT5wb3J0LmFkdmVydGlzaW5nICY9IH4oQURWRVJUSVNFRF9Bc3ltX1BhdXNlIHwKLQkJCQkJICBBRFZFUlRJU0VEX1BhdXNlKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBibngyeF9saW5rX3JlcG9ydChzdHJ1Y3QgYm54MnggKmJwKQotewotCWlmIChicC0+ZmxhZ3MgJiBNRl9GVU5DX0RJUykgewotCQluZXRpZl9jYXJyaWVyX29mZihicC0+ZGV2KTsKLQkJbmV0ZGV2X2VycihicC0+ZGV2LCAiTklDIExpbmsgaXMgRG93blxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoYnAtPmxpbmtfdmFycy5saW5rX3VwKSB7Ci0JCXUxNiBsaW5lX3NwZWVkOwotCi0JCWlmIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfT1BFTikKLQkJCW5ldGlmX2NhcnJpZXJfb24oYnAtPmRldik7Ci0JCW5ldGRldl9pbmZvKGJwLT5kZXYsICJOSUMgTGluayBpcyBVcCwgIik7Ci0KLQkJbGluZV9zcGVlZCA9IGJwLT5saW5rX3ZhcnMubGluZV9zcGVlZDsKLQkJaWYgKElTX0UxSE1GKGJwKSkgewotCQkJdTE2IHZuX21heF9yYXRlOwotCi0JCQl2bl9tYXhfcmF0ZSA9Ci0JCQkJKChicC0+bWZfY29uZmlnICYgRlVOQ19NRl9DRkdfTUFYX0JXX01BU0spID4+Ci0JCQkJIEZVTkNfTUZfQ0ZHX01BWF9CV19TSElGVCkgKiAxMDA7Ci0JCQlpZiAodm5fbWF4X3JhdGUgPCBsaW5lX3NwZWVkKQotCQkJCWxpbmVfc3BlZWQgPSB2bl9tYXhfcmF0ZTsKLQkJfQotCQlwcl9jb250KCIlZCBNYnBzICIsIGxpbmVfc3BlZWQpOwotCi0JCWlmIChicC0+bGlua192YXJzLmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKLQkJCXByX2NvbnQoImZ1bGwgZHVwbGV4Iik7Ci0JCWVsc2UKLQkJCXByX2NvbnQoImhhbGYgZHVwbGV4Iik7Ci0KLQkJaWYgKGJwLT5saW5rX3ZhcnMuZmxvd19jdHJsICE9IEJOWDJYX0ZMT1dfQ1RSTF9OT05FKSB7Ci0JCQlpZiAoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfUlgpIHsKLQkJCQlwcl9jb250KCIsIHJlY2VpdmUgIik7Ci0JCQkJaWYgKGJwLT5saW5rX3ZhcnMuZmxvd19jdHJsICYKLQkJCQkgICAgQk5YMlhfRkxPV19DVFJMX1RYKQotCQkJCQlwcl9jb250KCImIHRyYW5zbWl0ICIpOwotCQkJfSBlbHNlIHsKLQkJCQlwcl9jb250KCIsIHRyYW5zbWl0ICIpOwotCQkJfQotCQkJcHJfY29udCgiZmxvdyBjb250cm9sIE9OIik7Ci0JCX0KLQkJcHJfY29udCgiXG4iKTsKLQotCX0gZWxzZSB7IC8qIGxpbmtfZG93biAqLwotCQluZXRpZl9jYXJyaWVyX29mZihicC0+ZGV2KTsKLQkJbmV0ZGV2X2VycihicC0+ZGV2LCAiTklDIExpbmsgaXMgRG93blxuIik7Ci0JfQotfQotCi1zdGF0aWMgdTggYm54MnhfaW5pdGlhbF9waHlfaW5pdChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgbG9hZF9tb2RlKQotewotCWlmICghQlBfTk9NQ1AoYnApKSB7Ci0JCXU4IHJjOwotCi0JCS8qIEluaXRpYWxpemUgbGluayBwYXJhbWV0ZXJzIHN0cnVjdHVyZSB2YXJpYWJsZXMgKi8KLQkJLyogSXQgaXMgcmVjb21tZW5kZWQgdG8gdHVybiBvZmYgUlggRkMgZm9yIGp1bWJvIGZyYW1lcwotCQkgICBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlICovCi0JCWlmIChicC0+ZGV2LT5tdHUgPiA1MDAwKQotCQkJYnAtPmxpbmtfcGFyYW1zLnJlcV9mY19hdXRvX2FkdiA9IEJOWDJYX0ZMT1dfQ1RSTF9UWDsKLQkJZWxzZQotCQkJYnAtPmxpbmtfcGFyYW1zLnJlcV9mY19hdXRvX2FkdiA9IEJOWDJYX0ZMT1dfQ1RSTF9CT1RIOwotCi0JCWJueDJ4X2FjcXVpcmVfcGh5X2xvY2soYnApOwotCi0JCWlmIChsb2FkX21vZGUgPT0gTE9BRF9ESUFHKQotCQkJYnAtPmxpbmtfcGFyYW1zLmxvb3BiYWNrX21vZGUgPSBMT09QQkFDS19YR1hTXzEwOwotCi0JCXJjID0gYm54MnhfcGh5X2luaXQoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMpOwotCi0JCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOwotCi0JCWJueDJ4X2NhbGNfZmNfYWR2KGJwKTsKLQotCQlpZiAoQ0hJUF9SRVZfSVNfU0xPVyhicCkgJiYgYnAtPmxpbmtfdmFycy5saW5rX3VwKSB7Ci0JCQlibngyeF9zdGF0c19oYW5kbGUoYnAsIFNUQVRTX0VWRU5UX0xJTktfVVApOwotCQkJYm54MnhfbGlua19yZXBvcnQoYnApOwotCQl9Ci0KLQkJcmV0dXJuIHJjOwotCX0KLQlCTlgyWF9FUlIoIkJvb3Rjb2RlIGlzIG1pc3NpbmcgLSBjYW4gbm90IGluaXRpYWxpemUgbGlua1xuIik7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2xpbmtfc2V0KHN0cnVjdCBibngyeCAqYnApCi17Ci0JaWYgKCFCUF9OT01DUChicCkpIHsKLQkJYm54MnhfYWNxdWlyZV9waHlfbG9jayhicCk7Ci0JCWJueDJ4X3BoeV9pbml0KCZicC0+bGlua19wYXJhbXMsICZicC0+bGlua192YXJzKTsKLQkJYm54MnhfcmVsZWFzZV9waHlfbG9jayhicCk7Ci0KLQkJYm54MnhfY2FsY19mY19hZHYoYnApOwotCX0gZWxzZQotCQlCTlgyWF9FUlIoIkJvb3Rjb2RlIGlzIG1pc3NpbmcgLSBjYW4gbm90IHNldCBsaW5rXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfX2xpbmtfcmVzZXQoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpZiAoIUJQX05PTUNQKGJwKSkgewotCQlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKLQkJYm54MnhfbGlua19yZXNldCgmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycywgMSk7Ci0JCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOwotCX0gZWxzZQotCQlCTlgyWF9FUlIoIkJvb3Rjb2RlIGlzIG1pc3NpbmcgLSBjYW4gbm90IHJlc2V0IGxpbmtcbiIpOwotfQotCi1zdGF0aWMgdTggYm54MnhfbGlua190ZXN0KHN0cnVjdCBibngyeCAqYnApCi17Ci0JdTggcmMgPSAwOwotCi0JaWYgKCFCUF9OT01DUChicCkpIHsKLQkJYm54MnhfYWNxdWlyZV9waHlfbG9jayhicCk7Ci0JCXJjID0gYm54MnhfdGVzdF9saW5rKCZicC0+bGlua19wYXJhbXMsICZicC0+bGlua192YXJzKTsKLQkJYm54MnhfcmVsZWFzZV9waHlfbG9jayhicCk7Ci0JfSBlbHNlCi0JCUJOWDJYX0VSUigiQm9vdGNvZGUgaXMgbWlzc2luZyAtIGNhbiBub3QgdGVzdCBsaW5rXG4iKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfaW5pdF9wb3J0X21pbm1heChzdHJ1Y3QgYm54MnggKmJwKQotewotCXUzMiByX3BhcmFtID0gYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkIC8gODsKLQl1MzIgZmFpcl9wZXJpb2RpY190aW1lb3V0X3VzZWM7Ci0JdTMyIHRfZmFpcjsKLQotCW1lbXNldCgmKGJwLT5jbW5nLnJzX3ZhcnMpLCAwLAotCSAgICAgICBzaXplb2Yoc3RydWN0IHJhdGVfc2hhcGluZ192YXJzX3Blcl9wb3J0KSk7Ci0JbWVtc2V0KCYoYnAtPmNtbmcuZmFpcl92YXJzKSwgMCwgc2l6ZW9mKHN0cnVjdCBmYWlybmVzc192YXJzX3Blcl9wb3J0KSk7Ci0KLQkvKiAxMDAgdXNlYyBpbiBTRE0gdGlja3MgPSAyNSBzaW5jZSBlYWNoIHRpY2sgaXMgNCB1c2VjICovCi0JYnAtPmNtbmcucnNfdmFycy5yc19wZXJpb2RpY190aW1lb3V0ID0gUlNfUEVSSU9ESUNfVElNRU9VVF9VU0VDIC8gNDsKLQotCS8qIHRoaXMgaXMgdGhlIHRocmVzaG9sZCBiZWxvdyB3aGljaCBubyB0aW1lciBhcm1pbmcgd2lsbCBvY2N1cgotCSAgIDEuMjUgY29lZmZpY2llbnQgaXMgZm9yIHRoZSB0aHJlc2hvbGQgdG8gYmUgYSBsaXR0bGUgYmlnZ2VyCi0JICAgdGhhbiB0aGUgcmVhbCB0aW1lLCB0byBjb21wZW5zYXRlIGZvciB0aW1lciBpbi1hY2N1cmFjeSAqLwotCWJwLT5jbW5nLnJzX3ZhcnMucnNfdGhyZXNob2xkID0KLQkJCQkoUlNfUEVSSU9ESUNfVElNRU9VVF9VU0VDICogcl9wYXJhbSAqIDUpIC8gNDsKLQotCS8qIHJlc29sdXRpb24gb2YgZmFpcm5lc3MgdGltZXIgKi8KLQlmYWlyX3BlcmlvZGljX3RpbWVvdXRfdXNlYyA9IFFNX0FSQl9CWVRFUyAvIHJfcGFyYW07Ci0JLyogZm9yIDEwRyBpdCBpcyAxMDAwdXNlYy4gZm9yIDFHIGl0IGlzIDEwMDAwdXNlYy4gKi8KLQl0X2ZhaXIgPSBUX0ZBSVJfQ09FRiAvIGJwLT5saW5rX3ZhcnMubGluZV9zcGVlZDsKLQotCS8qIHRoaXMgaXMgdGhlIHRocmVzaG9sZCBiZWxvdyB3aGljaCB3ZSB3b24ndCBhcm0gdGhlIHRpbWVyIGFueW1vcmUgKi8KLQlicC0+Y21uZy5mYWlyX3ZhcnMuZmFpcl90aHJlc2hvbGQgPSBRTV9BUkJfQllURVM7Ci0KLQkvKiB3ZSBtdWx0aXBseSBieSAxZTMvOCB0byBnZXQgYnl0ZXMvbXNlYy4KLQkgICBXZSBkb24ndCB3YW50IHRoZSBjcmVkaXRzIHRvIHBhc3MgYSBjcmVkaXQKLQkgICBvZiB0aGUgdF9mYWlyKkZBSVJfTUVNIChhbGdvcml0aG0gcmVzb2x1dGlvbikgKi8KLQlicC0+Y21uZy5mYWlyX3ZhcnMudXBwZXJfYm91bmQgPSByX3BhcmFtICogdF9mYWlyICogRkFJUl9NRU07Ci0JLyogc2luY2UgZWFjaCB0aWNrIGlzIDQgdXNlYyAqLwotCWJwLT5jbW5nLmZhaXJfdmFycy5mYWlybmVzc190aW1lb3V0ID0gZmFpcl9wZXJpb2RpY190aW1lb3V0X3VzZWMgLyA0OwotfQotCi0vKiBDYWxjdWxhdGVzIHRoZSBzdW0gb2Ygdm5fbWluX3JhdGVzLgotICAgSXQncyBuZWVkZWQgZm9yIGZ1cnRoZXIgbm9ybWFsaXppbmcgb2YgdGhlIG1pbl9yYXRlcy4KLSAgIFJldHVybnM6Ci0gICAgIHN1bSBvZiB2bl9taW5fcmF0ZXMuCi0gICAgICAgb3IKLSAgICAgMCAtIGlmIGFsbCB0aGUgbWluX3JhdGVzIGFyZSAwLgotICAgICBJbiB0aGUgbGF0ZXIgY2FzZSBmYWluZXNzIGFsZ29yaXRobSBzaG91bGQgYmUgZGVhY3RpdmF0ZWQuCi0gICAgIElmIG5vdCBhbGwgbWluX3JhdGVzIGFyZSB6ZXJvIHRoZW4gdGhvc2UgdGhhdCBhcmUgemVyb2VzIHdpbGwgYmUgc2V0IHRvIDEuCi0gKi8KLXN0YXRpYyB2b2lkIGJueDJ4X2NhbGNfdm5fd2VpZ2h0X3N1bShzdHJ1Y3QgYm54MnggKmJwKQotewotCWludCBhbGxfemVybyA9IDE7Ci0JaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKLQlpbnQgdm47Ci0KLQlicC0+dm5fd2VpZ2h0X3N1bSA9IDA7Ci0JZm9yICh2biA9IFZOXzA7IHZuIDwgRTFIVk5fTUFYOyB2bisrKSB7Ci0JCWludCBmdW5jID0gMip2biArIHBvcnQ7Ci0JCXUzMiB2bl9jZmcgPSBTSE1FTV9SRChicCwgbWZfY2ZnLmZ1bmNfbWZfY29uZmlnW2Z1bmNdLmNvbmZpZyk7Ci0JCXUzMiB2bl9taW5fcmF0ZSA9ICgodm5fY2ZnICYgRlVOQ19NRl9DRkdfTUlOX0JXX01BU0spID4+Ci0JCQkJICAgRlVOQ19NRl9DRkdfTUlOX0JXX1NISUZUKSAqIDEwMDsKLQotCQkvKiBTa2lwIGhpZGRlbiB2bnMgKi8KLQkJaWYgKHZuX2NmZyAmIEZVTkNfTUZfQ0ZHX0ZVTkNfSElERSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIElmIG1pbiByYXRlIGlzIHplcm8gLSBzZXQgaXQgdG8gMSAqLwotCQlpZiAoIXZuX21pbl9yYXRlKQotCQkJdm5fbWluX3JhdGUgPSBERUZfTUlOX1JBVEU7Ci0JCWVsc2UKLQkJCWFsbF96ZXJvID0gMDsKLQotCQlicC0+dm5fd2VpZ2h0X3N1bSArPSB2bl9taW5fcmF0ZTsKLQl9Ci0KLQkvKiAuLi4gb25seSBpZiBhbGwgbWluIHJhdGVzIGFyZSB6ZXJvcyAtIGRpc2FibGUgZmFpcm5lc3MgKi8KLQlpZiAoYWxsX3plcm8pIHsKLQkJYnAtPmNtbmcuZmxhZ3MuY21uZ19lbmFibGVzICY9Ci0JCQkJCX5DTU5HX0ZMQUdTX1BFUl9QT1JUX0ZBSVJORVNTX1ZOOwotCQlEUChORVRJRl9NU0dfSUZVUCwgIkFsbCBNSU4gdmFsdWVzIGFyZSB6ZXJvZXMiCi0JCSAgICIgIGZhaXJuZXNzIHdpbGwgYmUgZGlzYWJsZWRcbiIpOwotCX0gZWxzZQotCQlicC0+Y21uZy5mbGFncy5jbW5nX2VuYWJsZXMgfD0KLQkJCQkJQ01OR19GTEFHU19QRVJfUE9SVF9GQUlSTkVTU19WTjsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfaW5pdF92bl9taW5tYXgoc3RydWN0IGJueDJ4ICpicCwgaW50IGZ1bmMpCi17Ci0Jc3RydWN0IHJhdGVfc2hhcGluZ192YXJzX3Blcl92biBtX3JzX3ZuOwotCXN0cnVjdCBmYWlybmVzc192YXJzX3Blcl92biBtX2ZhaXJfdm47Ci0JdTMyIHZuX2NmZyA9IFNITUVNX1JEKGJwLCBtZl9jZmcuZnVuY19tZl9jb25maWdbZnVuY10uY29uZmlnKTsKLQl1MTYgdm5fbWluX3JhdGUsIHZuX21heF9yYXRlOwotCWludCBpOwotCi0JLyogSWYgZnVuY3Rpb24gaXMgaGlkZGVuIC0gc2V0IG1pbiBhbmQgbWF4IHRvIHplcm9lcyAqLwotCWlmICh2bl9jZmcgJiBGVU5DX01GX0NGR19GVU5DX0hJREUpIHsKLQkJdm5fbWluX3JhdGUgPSAwOwotCQl2bl9tYXhfcmF0ZSA9IDA7Ci0KLQl9IGVsc2UgewotCQl2bl9taW5fcmF0ZSA9ICgodm5fY2ZnICYgRlVOQ19NRl9DRkdfTUlOX0JXX01BU0spID4+Ci0JCQkJRlVOQ19NRl9DRkdfTUlOX0JXX1NISUZUKSAqIDEwMDsKLQkJLyogSWYgbWluIHJhdGUgaXMgemVybyAtIHNldCBpdCB0byAxICovCi0JCWlmICghdm5fbWluX3JhdGUpCi0JCQl2bl9taW5fcmF0ZSA9IERFRl9NSU5fUkFURTsKLQkJdm5fbWF4X3JhdGUgPSAoKHZuX2NmZyAmIEZVTkNfTUZfQ0ZHX01BWF9CV19NQVNLKSA+PgotCQkJCUZVTkNfTUZfQ0ZHX01BWF9CV19TSElGVCkgKiAxMDA7Ci0JfQotCURQKE5FVElGX01TR19JRlVQLAotCSAgICJmdW5jICVkOiB2bl9taW5fcmF0ZSAlZCAgdm5fbWF4X3JhdGUgJWQgIHZuX3dlaWdodF9zdW0gJWRcbiIsCi0JICAgZnVuYywgdm5fbWluX3JhdGUsIHZuX21heF9yYXRlLCBicC0+dm5fd2VpZ2h0X3N1bSk7Ci0KLQltZW1zZXQoJm1fcnNfdm4sIDAsIHNpemVvZihzdHJ1Y3QgcmF0ZV9zaGFwaW5nX3ZhcnNfcGVyX3ZuKSk7Ci0JbWVtc2V0KCZtX2ZhaXJfdm4sIDAsIHNpemVvZihzdHJ1Y3QgZmFpcm5lc3NfdmFyc19wZXJfdm4pKTsKLQotCS8qIGdsb2JhbCB2biBjb3VudGVyIC0gbWF4aW1hbCBNYnBzIGZvciB0aGlzIHZuICovCi0JbV9yc192bi52bl9jb3VudGVyLnJhdGUgPSB2bl9tYXhfcmF0ZTsKLQotCS8qIHF1b3RhIC0gbnVtYmVyIG9mIGJ5dGVzIHRyYW5zbWl0dGVkIGluIHRoaXMgcGVyaW9kICovCi0JbV9yc192bi52bl9jb3VudGVyLnF1b3RhID0KLQkJCQkodm5fbWF4X3JhdGUgKiBSU19QRVJJT0RJQ19USU1FT1VUX1VTRUMpIC8gODsKLQotCWlmIChicC0+dm5fd2VpZ2h0X3N1bSkgewotCQkvKiBjcmVkaXQgZm9yIGVhY2ggcGVyaW9kIG9mIHRoZSBmYWlybmVzcyBhbGdvcml0aG06Ci0JCSAgIG51bWJlciBvZiBieXRlcyBpbiBUX0ZBSVIgKHRoZSB2biBzaGFyZSB0aGUgcG9ydCByYXRlKS4KLQkJICAgdm5fd2VpZ2h0X3N1bSBzaG91bGQgbm90IGJlIGxhcmdlciB0aGFuIDEwMDAwLCB0aHVzCi0JCSAgIFRfRkFJUl9DT0VGIC8gKDggKiB2bl93ZWlnaHRfc3VtKSB3aWxsIGFsd2F5cyBiZSBncmVhdGVyCi0JCSAgIHRoYW4gemVybyAqLwotCQltX2ZhaXJfdm4udm5fY3JlZGl0X2RlbHRhID0KLQkJCW1heF90KHUzMiwgKHZuX21pbl9yYXRlICogKFRfRkFJUl9DT0VGIC8KLQkJCQkJCSAgICg4ICogYnAtPnZuX3dlaWdodF9zdW0pKSksCi0JCQkgICAgICAoYnAtPmNtbmcuZmFpcl92YXJzLmZhaXJfdGhyZXNob2xkICogMikpOwotCQlEUChORVRJRl9NU0dfSUZVUCwgIm1fZmFpcl92bi52bl9jcmVkaXRfZGVsdGEgJWRcbiIsCi0JCSAgIG1fZmFpcl92bi52bl9jcmVkaXRfZGVsdGEpOwotCX0KLQotCS8qIFN0b3JlIGl0IHRvIGludGVybmFsIG1lbW9yeSAqLwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHJhdGVfc2hhcGluZ192YXJzX3Blcl92bikvNDsgaSsrKQotCQlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCi0JCSAgICAgICBYU1RPUk1fUkFURV9TSEFQSU5HX1BFUl9WTl9WQVJTX09GRlNFVChmdW5jKSArIGkgKiA0LAotCQkgICAgICAgKCh1MzIgKikoJm1fcnNfdm4pKVtpXSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBmYWlybmVzc192YXJzX3Blcl92bikvNDsgaSsrKQotCQlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCi0JCSAgICAgICBYU1RPUk1fRkFJUk5FU1NfUEVSX1ZOX1ZBUlNfT0ZGU0VUKGZ1bmMpICsgaSAqIDQsCi0JCSAgICAgICAoKHUzMiAqKSgmbV9mYWlyX3ZuKSlbaV0pOwotfQotCi0KLS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHVwb24gbGluayBpbnRlcnJ1cHQgKi8KLXN0YXRpYyB2b2lkIGJueDJ4X2xpbmtfYXR0bihzdHJ1Y3QgYm54MnggKmJwKQotewotCXUzMiBwcmV2X2xpbmtfc3RhdHVzID0gYnAtPmxpbmtfdmFycy5saW5rX3N0YXR1czsKLQkvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhcmUgc3luY2VkIHdpdGggdGhlIGN1cnJlbnQgc3RhdGlzdGljcyAqLwotCWJueDJ4X3N0YXRzX2hhbmRsZShicCwgU1RBVFNfRVZFTlRfU1RPUCk7Ci0KLQlibngyeF9saW5rX3VwZGF0ZSgmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycyk7Ci0KLQlpZiAoYnAtPmxpbmtfdmFycy5saW5rX3VwKSB7Ci0KLQkJLyogZHJvcGxlc3MgZmxvdyBjb250cm9sICovCi0JCWlmIChDSElQX0lTX0UxSChicCkgJiYgYnAtPmRyb3BsZXNzX2ZjKSB7Ci0JCQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwotCQkJdTMyIHBhdXNlX2VuYWJsZWQgPSAwOwotCi0JCQlpZiAoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfVFgpCi0JCQkJcGF1c2VfZW5hYmxlZCA9IDE7Ci0KLQkJCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkJCSAgICAgICBVU1RPUk1fRVRIX1BBVVNFX0VOQUJMRURfT0ZGU0VUKHBvcnQpLAotCQkJICAgICAgIHBhdXNlX2VuYWJsZWQpOwotCQl9Ci0KLQkJaWYgKGJwLT5saW5rX3ZhcnMubWFjX3R5cGUgPT0gTUFDX1RZUEVfQk1BQykgewotCQkJc3RydWN0IGhvc3RfcG9ydF9zdGF0cyAqcHN0YXRzOwotCi0JCQlwc3RhdHMgPSBibngyeF9zcChicCwgcG9ydF9zdGF0cyk7Ci0JCQkvKiByZXNldCBvbGQgYm1hYyBzdGF0cyAqLwotCQkJbWVtc2V0KCYocHN0YXRzLT5tYWNfc3R4WzBdKSwgMCwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IG1hY19zdHgpKTsKLQkJfQotCQlpZiAoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX09QRU4pCi0JCQlibngyeF9zdGF0c19oYW5kbGUoYnAsIFNUQVRTX0VWRU5UX0xJTktfVVApOwotCX0KLQotCS8qIGluZGljYXRlIGxpbmsgc3RhdHVzIG9ubHkgaWYgbGluayBzdGF0dXMgYWN0dWFsbHkgY2hhbmdlZCAqLwotCWlmIChwcmV2X2xpbmtfc3RhdHVzICE9IGJwLT5saW5rX3ZhcnMubGlua19zdGF0dXMpCi0JCWJueDJ4X2xpbmtfcmVwb3J0KGJwKTsKLQotCWlmIChJU19FMUhNRihicCkpIHsKLQkJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKLQkJaW50IGZ1bmM7Ci0JCWludCB2bjsKLQotCQkvKiBTZXQgdGhlIGF0dGVudGlvbiB0b3dhcmRzIG90aGVyIGRyaXZlcnMgb24gdGhlIHNhbWUgcG9ydCAqLwotCQlmb3IgKHZuID0gVk5fMDsgdm4gPCBFMUhWTl9NQVg7IHZuKyspIHsKLQkJCWlmICh2biA9PSBCUF9FMUhWTihicCkpCi0JCQkJY29udGludWU7Ci0KLQkJCWZ1bmMgPSAoKHZuIDw8IDEpIHwgcG9ydCk7Ci0JCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMCArCi0JCQkgICAgICAgKExJTktfU1lOQ19BVFRFTlRJT05fQklUX0ZVTkNfMCArIGZ1bmMpKjQsIDEpOwotCQl9Ci0KLQkJaWYgKGJwLT5saW5rX3ZhcnMubGlua191cCkgewotCQkJaW50IGk7Ci0KLQkJCS8qIEluaXQgcmF0ZSBzaGFwaW5nIGFuZCBmYWlybmVzcyBjb250ZXh0cyAqLwotCQkJYm54MnhfaW5pdF9wb3J0X21pbm1heChicCk7Ci0KLQkJCWZvciAodm4gPSBWTl8wOyB2biA8IEUxSFZOX01BWDsgdm4rKykKLQkJCQlibngyeF9pbml0X3ZuX21pbm1heChicCwgMip2biArIHBvcnQpOwotCi0JCQkvKiBTdG9yZSBpdCB0byBpbnRlcm5hbCBtZW1vcnkgKi8KLQkJCWZvciAoaSA9IDA7Ci0JCQkgICAgIGkgPCBzaXplb2Yoc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0KSAvIDQ7IGkrKykKLQkJCQlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCi0JCQkJICBYU1RPUk1fQ01OR19QRVJfUE9SVF9WQVJTX09GRlNFVChwb3J0KSArIGkqNCwKLQkJCQkgICAgICAgKCh1MzIgKikoJmJwLT5jbW5nKSlbaV0pOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBibngyeF9fbGlua19zdGF0dXNfdXBkYXRlKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaWYgKChicC0+c3RhdGUgIT0gQk5YMlhfU1RBVEVfT1BFTikgfHwgKGJwLT5mbGFncyAmIE1GX0ZVTkNfRElTKSkKLQkJcmV0dXJuOwotCi0JYm54MnhfbGlua19zdGF0dXNfdXBkYXRlKCZicC0+bGlua19wYXJhbXMsICZicC0+bGlua192YXJzKTsKLQotCWlmIChicC0+bGlua192YXJzLmxpbmtfdXApCi0JCWJueDJ4X3N0YXRzX2hhbmRsZShicCwgU1RBVFNfRVZFTlRfTElOS19VUCk7Ci0JZWxzZQotCQlibngyeF9zdGF0c19oYW5kbGUoYnAsIFNUQVRTX0VWRU5UX1NUT1ApOwotCi0JYm54MnhfY2FsY192bl93ZWlnaHRfc3VtKGJwKTsKLQotCS8qIGluZGljYXRlIGxpbmsgc3RhdHVzICovCi0JYm54MnhfbGlua19yZXBvcnQoYnApOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9wbWZfdXBkYXRlKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKLQl1MzIgdmFsOwotCi0JYnAtPnBvcnQucG1mID0gMTsKLQlEUChORVRJRl9NU0dfTElOSywgInBtZiAlZFxuIiwgYnAtPnBvcnQucG1mKTsKLQotCS8qIGVuYWJsZSBuaWcgYXR0ZW50aW9uICovCi0JdmFsID0gKDB4ZmYwZiB8ICgxIDw8IChCUF9FMUhWTihicCkgKyA0KSkpOwotCVJFR19XUihicCwgSENfUkVHX1RSQUlMSU5HX0VER0VfMCArIHBvcnQqOCwgdmFsKTsKLQlSRUdfV1IoYnAsIEhDX1JFR19MRUFESU5HX0VER0VfMCArIHBvcnQqOCwgdmFsKTsKLQotCWJueDJ4X3N0YXRzX2hhbmRsZShicCwgU1RBVFNfRVZFTlRfUE1GKTsKLX0KLQotLyogZW5kIG9mIExpbmsgKi8KLQotLyogc2xvdyBwYXRoICovCi0KLS8qCi0gKiBHZW5lcmFsIHNlcnZpY2UgZnVuY3Rpb25zCi0gKi8KLQotLyogc2VuZCB0aGUgTUNQIGEgcmVxdWVzdCwgYmxvY2sgdW50aWwgdGhlcmUgaXMgYSByZXBseSAqLwotdTMyIGJueDJ4X2Z3X2NvbW1hbmQoc3RydWN0IGJueDJ4ICpicCwgdTMyIGNvbW1hbmQpCi17Ci0JaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKLQl1MzIgc2VxID0gKyticC0+Zndfc2VxOwotCXUzMiByYyA9IDA7Ci0JdTMyIGNudCA9IDE7Ci0JdTggZGVsYXkgPSBDSElQX1JFVl9JU19TTE9XKGJwKSA/IDEwMCA6IDEwOwotCi0JbXV0ZXhfbG9jaygmYnAtPmZ3X21iX211dGV4KTsKLQlTSE1FTV9XUihicCwgZnVuY19tYltmdW5jXS5kcnZfbWJfaGVhZGVyLCAoY29tbWFuZCB8IHNlcSkpOwotCURQKEJOWDJYX01TR19NQ1AsICJ3cm90ZSBjb21tYW5kICgleCkgdG8gRlcgTUJcbiIsIChjb21tYW5kIHwgc2VxKSk7Ci0KLQlkbyB7Ci0JCS8qIGxldCB0aGUgRlcgZG8gaXQncyBtYWdpYyAuLi4gKi8KLQkJbXNsZWVwKGRlbGF5KTsKLQotCQlyYyA9IFNITUVNX1JEKGJwLCBmdW5jX21iW2Z1bmNdLmZ3X21iX2hlYWRlcik7Ci0KLQkJLyogR2l2ZSB0aGUgRlcgdXAgdG8gNSBzZWNvbmQgKDUwMCoxMG1zKSAqLwotCX0gd2hpbGUgKChzZXEgIT0gKHJjICYgRldfTVNHX1NFUV9OVU1CRVJfTUFTSykpICYmIChjbnQrKyA8IDUwMCkpOwotCi0JRFAoQk5YMlhfTVNHX01DUCwgIlthZnRlciAlZCBtc10gcmVhZCAoJXgpIHNlcSBpcyAoJXgpIGZyb20gRlcgTUJcbiIsCi0JICAgY250KmRlbGF5LCByYywgc2VxKTsKLQotCS8qIGlzIHRoaXMgYSByZXBseSB0byBvdXIgY29tbWFuZD8gKi8KLQlpZiAoc2VxID09IChyYyAmIEZXX01TR19TRVFfTlVNQkVSX01BU0spKQotCQlyYyAmPSBGV19NU0dfQ09ERV9NQVNLOwotCWVsc2UgewotCQkvKiBGVyBCVUchICovCi0JCUJOWDJYX0VSUigiRlcgZmFpbGVkIHRvIHJlc3BvbmQhXG4iKTsKLQkJYm54MnhfZndfZHVtcChicCk7Ci0JCXJjID0gMDsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZicC0+ZndfbWJfbXV0ZXgpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9zZXRfZXRoX21hY19hZGRyX2UxaChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgc2V0KTsKLXN0YXRpYyB2b2lkIGJueDJ4X3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi1zdGF0aWMgdm9pZCBibngyeF9lMWhfZGlzYWJsZShzdHJ1Y3QgYm54MnggKmJwKQotewotCWludCBwb3J0ID0gQlBfUE9SVChicCk7Ci0KLQluZXRpZl90eF9kaXNhYmxlKGJwLT5kZXYpOwotCi0JUkVHX1dSKGJwLCBOSUdfUkVHX0xMSDBfRlVOQ19FTiArIHBvcnQqOCwgMCk7Ci0KLQluZXRpZl9jYXJyaWVyX29mZihicC0+ZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfZTFoX2VuYWJsZShzdHJ1Y3QgYm54MnggKmJwKQotewotCWludCBwb3J0ID0gQlBfUE9SVChicCk7Ci0KLQlSRUdfV1IoYnAsIE5JR19SRUdfTExIMF9GVU5DX0VOICsgcG9ydCo4LCAxKTsKLQotCS8qIFR4IHF1ZXVlIHNob3VsZCBiZSBvbmx5IHJlZW5hYmxlZCAqLwotCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhicC0+ZGV2KTsKLQotCS8qCi0JICogU2hvdWxkIG5vdCBjYWxsIG5ldGlmX2NhcnJpZXJfb24gc2luY2UgaXQgd2lsbCBiZSBjYWxsZWQgaWYgdGhlIGxpbmsKLQkgKiBpcyB1cCB3aGVuIGNoZWNraW5nIGZvciBsaW5rIHN0YXRlCi0JICovCi19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X3VwZGF0ZV9taW5fbWF4KHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKLQlpbnQgdm4sIGk7Ci0KLQkvKiBJbml0IHJhdGUgc2hhcGluZyBhbmQgZmFpcm5lc3MgY29udGV4dHMgKi8KLQlibngyeF9pbml0X3BvcnRfbWlubWF4KGJwKTsKLQotCWJueDJ4X2NhbGNfdm5fd2VpZ2h0X3N1bShicCk7Ci0KLQlmb3IgKHZuID0gVk5fMDsgdm4gPCBFMUhWTl9NQVg7IHZuKyspCi0JCWJueDJ4X2luaXRfdm5fbWlubWF4KGJwLCAyKnZuICsgcG9ydCk7Ci0KLQlpZiAoYnAtPnBvcnQucG1mKSB7Ci0JCWludCBmdW5jOwotCi0JCS8qIFNldCB0aGUgYXR0ZW50aW9uIHRvd2FyZHMgb3RoZXIgZHJpdmVycyBvbiB0aGUgc2FtZSBwb3J0ICovCi0JCWZvciAodm4gPSBWTl8wOyB2biA8IEUxSFZOX01BWDsgdm4rKykgewotCQkJaWYgKHZuID09IEJQX0UxSFZOKGJwKSkKLQkJCQljb250aW51ZTsKLQotCQkJZnVuYyA9ICgodm4gPDwgMSkgfCBwb3J0KTsKLQkJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8wICsKLQkJCSAgICAgICAoTElOS19TWU5DX0FUVEVOVElPTl9CSVRfRlVOQ18wICsgZnVuYykqNCwgMSk7Ci0JCX0KLQotCQkvKiBTdG9yZSBpdCB0byBpbnRlcm5hbCBtZW1vcnkgKi8KLQkJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQpIC8gNDsgaSsrKQotCQkJUkVHX1dSKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKwotCQkJICAgICAgIFhTVE9STV9DTU5HX1BFUl9QT1JUX1ZBUlNfT0ZGU0VUKHBvcnQpICsgaSo0LAotCQkJICAgICAgICgodTMyICopKCZicC0+Y21uZykpW2ldKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2RjY19ldmVudChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgZGNjX2V2ZW50KQotewotCURQKEJOWDJYX01TR19NQ1AsICJkY2NfZXZlbnQgMHgleFxuIiwgZGNjX2V2ZW50KTsKLQotCWlmIChkY2NfZXZlbnQgJiBEUlZfU1RBVFVTX0RDQ19ESVNBQkxFX0VOQUJMRV9QRikgewotCi0JCS8qCi0JCSAqIFRoaXMgaXMgdGhlIG9ubHkgcGxhY2UgYmVzaWRlcyB0aGUgZnVuY3Rpb24gaW5pdGlhbGl6YXRpb24KLQkJICogd2hlcmUgdGhlIGJwLT5mbGFncyBjYW4gY2hhbmdlIHNvIGl0IGlzIGRvbmUgd2l0aG91dCBhbnkKLQkJICogbG9ja3MKLQkJICovCi0JCWlmIChicC0+bWZfY29uZmlnICYgRlVOQ19NRl9DRkdfRlVOQ19ESVNBQkxFRCkgewotCQkJRFAoTkVUSUZfTVNHX0lGRE9XTiwgIm1mX2NmZyBmdW5jdGlvbiBkaXNhYmxlZFxuIik7Ci0JCQlicC0+ZmxhZ3MgfD0gTUZfRlVOQ19ESVM7Ci0KLQkJCWJueDJ4X2UxaF9kaXNhYmxlKGJwKTsKLQkJfSBlbHNlIHsKLQkJCURQKE5FVElGX01TR19JRlVQLCAibWZfY2ZnIGZ1bmN0aW9uIGVuYWJsZWRcbiIpOwotCQkJYnAtPmZsYWdzICY9IH5NRl9GVU5DX0RJUzsKLQotCQkJYm54MnhfZTFoX2VuYWJsZShicCk7Ci0JCX0KLQkJZGNjX2V2ZW50ICY9IH5EUlZfU1RBVFVTX0RDQ19ESVNBQkxFX0VOQUJMRV9QRjsKLQl9Ci0JaWYgKGRjY19ldmVudCAmIERSVl9TVEFUVVNfRENDX0JBTkRXSURUSF9BTExPQ0FUSU9OKSB7Ci0KLQkJYm54MnhfdXBkYXRlX21pbl9tYXgoYnApOwotCQlkY2NfZXZlbnQgJj0gfkRSVl9TVEFUVVNfRENDX0JBTkRXSURUSF9BTExPQ0FUSU9OOwotCX0KLQotCS8qIFJlcG9ydCByZXN1bHRzIHRvIE1DUCAqLwotCWlmIChkY2NfZXZlbnQpCi0JCWJueDJ4X2Z3X2NvbW1hbmQoYnAsIERSVl9NU0dfQ09ERV9EQ0NfRkFJTFVSRSk7Ci0JZWxzZQotCQlibngyeF9md19jb21tYW5kKGJwLCBEUlZfTVNHX0NPREVfRENDX09LKTsKLX0KLQotLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgdGhlIHNwcSBsb2NrICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBldGhfc3BlICpibngyeF9zcF9nZXRfbmV4dChzdHJ1Y3QgYm54MnggKmJwKQotewotCXN0cnVjdCBldGhfc3BlICpuZXh0X3NwZSA9IGJwLT5zcHFfcHJvZF9iZDsKLQotCWlmIChicC0+c3BxX3Byb2RfYmQgPT0gYnAtPnNwcV9sYXN0X2JkKSB7Ci0JCWJwLT5zcHFfcHJvZF9iZCA9IGJwLT5zcHE7Ci0JCWJwLT5zcHFfcHJvZF9pZHggPSAwOwotCQlEUChORVRJRl9NU0dfVElNRVIsICJlbmQgb2Ygc3BxXG4iKTsKLQl9IGVsc2UgewotCQlicC0+c3BxX3Byb2RfYmQrKzsKLQkJYnAtPnNwcV9wcm9kX2lkeCsrOwotCX0KLQlyZXR1cm4gbmV4dF9zcGU7Ci19Ci0KLS8qIG11c3QgYmUgY2FsbGVkIHVuZGVyIHRoZSBzcHEgbG9jayAqLwotc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X3NwX3Byb2RfdXBkYXRlKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKLQotCS8qIE1ha2Ugc3VyZSB0aGF0IEJEIGRhdGEgaXMgdXBkYXRlZCBiZWZvcmUgd3JpdGluZyB0aGUgcHJvZHVjZXIgKi8KLQl3bWIoKTsKLQotCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsgWFNUT1JNX1NQUV9QUk9EX09GRlNFVChmdW5jKSwKLQkgICAgICAgYnAtPnNwcV9wcm9kX2lkeCk7Ci0JbW1pb3diKCk7Ci19Ci0KLS8qIHRoZSBzbG93IHBhdGggcXVldWUgaXMgb2RkIHNpbmNlIGNvbXBsZXRpb25zIGFycml2ZSBvbiB0aGUgZmFzdHBhdGggcmluZyAqLwotc3RhdGljIGludCBibngyeF9zcF9wb3N0KHN0cnVjdCBibngyeCAqYnAsIGludCBjb21tYW5kLCBpbnQgY2lkLAotCQkJIHUzMiBkYXRhX2hpLCB1MzIgZGF0YV9sbywgaW50IGNvbW1vbikKLXsKLQlzdHJ1Y3QgZXRoX3NwZSAqc3BlOwotCi0jaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgotCWlmICh1bmxpa2VseShicC0+cGFuaWMpKQotCQlyZXR1cm4gLUVJTzsKLSNlbmRpZgotCi0Jc3Bpbl9sb2NrX2JoKCZicC0+c3BxX2xvY2spOwotCi0JaWYgKCFicC0+c3BxX2xlZnQpIHsKLQkJQk5YMlhfRVJSKCJCVUchIFNQUSByaW5nIGZ1bGwhXG4iKTsKLQkJc3Bpbl91bmxvY2tfYmgoJmJwLT5zcHFfbG9jayk7Ci0JCWJueDJ4X3BhbmljKCk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0Jc3BlID0gYm54Mnhfc3BfZ2V0X25leHQoYnApOwotCi0JLyogQ0lEIG5lZWRzIHBvcnQgbnVtYmVyIHRvIGJlIGVuY29kZWQgaW50IGl0ICovCi0Jc3BlLT5oZHIuY29ubl9hbmRfY21kX2RhdGEgPQotCQkJY3B1X3RvX2xlMzIoKGNvbW1hbmQgPDwgU1BFX0hEUl9DTURfSURfU0hJRlQpIHwKLQkJCQkgICAgSFdfQ0lEKGJwLCBjaWQpKTsKLQlzcGUtPmhkci50eXBlID0gY3B1X3RvX2xlMTYoRVRIX0NPTk5FQ1RJT05fVFlQRSk7Ci0JaWYgKGNvbW1vbikKLQkJc3BlLT5oZHIudHlwZSB8PQotCQkJY3B1X3RvX2xlMTYoKDEgPDwgU1BFX0hEUl9DT01NT05fUkFNUk9EX1NISUZUKSk7Ci0KLQlzcGUtPmRhdGEubWFjX2NvbmZpZ19hZGRyLmhpID0gY3B1X3RvX2xlMzIoZGF0YV9oaSk7Ci0Jc3BlLT5kYXRhLm1hY19jb25maWdfYWRkci5sbyA9IGNwdV90b19sZTMyKGRhdGFfbG8pOwotCi0JYnAtPnNwcV9sZWZ0LS07Ci0KLQlEUChCTlgyWF9NU0dfU1AvKk5FVElGX01TR19USU1FUiovLAotCSAgICJTUFFFWyV4XSAoJXg6JXgpICBjb21tYW5kICVkICBod19jaWQgJXggIGRhdGEgKCV4OiV4KSAgbGVmdCAleFxuIiwKLQkgICBicC0+c3BxX3Byb2RfaWR4LCAodTMyKVU2NF9ISShicC0+c3BxX21hcHBpbmcpLAotCSAgICh1MzIpKFU2NF9MTyhicC0+c3BxX21hcHBpbmcpICsKLQkgICAodm9pZCAqKWJwLT5zcHFfcHJvZF9iZCAtICh2b2lkICopYnAtPnNwcSksIGNvbW1hbmQsCi0JICAgSFdfQ0lEKGJwLCBjaWQpLCBkYXRhX2hpLCBkYXRhX2xvLCBicC0+c3BxX2xlZnQpOwotCi0JYm54Mnhfc3BfcHJvZF91cGRhdGUoYnApOwotCXNwaW5fdW5sb2NrX2JoKCZicC0+c3BxX2xvY2spOwotCXJldHVybiAwOwotfQotCi0vKiBhY3F1aXJlIHNwbGl0IE1DUCBhY2Nlc3MgbG9jayByZWdpc3RlciAqLwotc3RhdGljIGludCBibngyeF9hY3F1aXJlX2FscihzdHJ1Y3QgYm54MnggKmJwKQotewotCXUzMiBqLCB2YWw7Ci0JaW50IHJjID0gMDsKLQotCW1pZ2h0X3NsZWVwKCk7Ci0JZm9yIChqID0gMDsgaiA8IDEwMDA7IGorKykgewotCQl2YWwgPSAoMVVMIDw8IDMxKTsKLQkJUkVHX1dSKGJwLCBHUkNCQVNFX01DUCArIDB4OWMsIHZhbCk7Ci0JCXZhbCA9IFJFR19SRChicCwgR1JDQkFTRV9NQ1AgKyAweDljKTsKLQkJaWYgKHZhbCAmICgxTCA8PCAzMSkpCi0JCQlicmVhazsKLQotCQltc2xlZXAoNSk7Ci0JfQotCWlmICghKHZhbCAmICgxTCA8PCAzMSkpKSB7Ci0JCUJOWDJYX0VSUigiQ2Fubm90IGFjcXVpcmUgTUNQIGFjY2VzcyBsb2NrIHJlZ2lzdGVyXG4iKTsKLQkJcmMgPSAtRUJVU1k7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi0vKiByZWxlYXNlIHNwbGl0IE1DUCBhY2Nlc3MgbG9jayByZWdpc3RlciAqLwotc3RhdGljIHZvaWQgYm54MnhfcmVsZWFzZV9hbHIoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlSRUdfV1IoYnAsIEdSQ0JBU0VfTUNQICsgMHg5YywgMCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTE2IGJueDJ4X3VwZGF0ZV9kc2JfaWR4KHN0cnVjdCBibngyeCAqYnApCi17Ci0Jc3RydWN0IGhvc3RfZGVmX3N0YXR1c19ibG9jayAqZGVmX3NiID0gYnAtPmRlZl9zdGF0dXNfYmxrOwotCXUxNiByYyA9IDA7Ci0KLQliYXJyaWVyKCk7IC8qIHN0YXR1cyBibG9jayBpcyB3cml0dGVuIHRvIGJ5IHRoZSBjaGlwICovCi0JaWYgKGJwLT5kZWZfYXR0X2lkeCAhPSBkZWZfc2ItPmF0dGVuX3N0YXR1c19ibG9jay5hdHRuX2JpdHNfaW5kZXgpIHsKLQkJYnAtPmRlZl9hdHRfaWR4ID0gZGVmX3NiLT5hdHRlbl9zdGF0dXNfYmxvY2suYXR0bl9iaXRzX2luZGV4OwotCQlyYyB8PSAxOwotCX0KLQlpZiAoYnAtPmRlZl9jX2lkeCAhPSBkZWZfc2ItPmNfZGVmX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgpIHsKLQkJYnAtPmRlZl9jX2lkeCA9IGRlZl9zYi0+Y19kZWZfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleDsKLQkJcmMgfD0gMjsKLQl9Ci0JaWYgKGJwLT5kZWZfdV9pZHggIT0gZGVmX3NiLT51X2RlZl9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4KSB7Ci0JCWJwLT5kZWZfdV9pZHggPSBkZWZfc2ItPnVfZGVmX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXg7Ci0JCXJjIHw9IDQ7Ci0JfQotCWlmIChicC0+ZGVmX3hfaWR4ICE9IGRlZl9zYi0+eF9kZWZfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCkgewotCQlicC0+ZGVmX3hfaWR4ID0gZGVmX3NiLT54X2RlZl9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4OwotCQlyYyB8PSA4OwotCX0KLQlpZiAoYnAtPmRlZl90X2lkeCAhPSBkZWZfc2ItPnRfZGVmX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgpIHsKLQkJYnAtPmRlZl90X2lkeCA9IGRlZl9zYi0+dF9kZWZfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleDsKLQkJcmMgfD0gMTY7Ci0JfQotCXJldHVybiByYzsKLX0KLQotLyoKLSAqIHNsb3cgcGF0aCBzZXJ2aWNlIGZ1bmN0aW9ucwotICovCi0KLXN0YXRpYyB2b2lkIGJueDJ4X2F0dG5faW50X2Fzc2VydGVkKHN0cnVjdCBibngyeCAqYnAsIHUzMiBhc3NlcnRlZCkKLXsKLQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwotCXUzMiBoY19hZGRyID0gKEhDX1JFR19DT01NQU5EX1JFRyArIHBvcnQqMzIgKwotCQkgICAgICAgQ09NTUFORF9SRUdfQVRUTl9CSVRTX1NFVCk7Ci0JdTMyIGFldV9hZGRyID0gcG9ydCA/IE1JU0NfUkVHX0FFVV9NQVNLX0FUVE5fRlVOQ18xIDoKLQkJCSAgICAgIE1JU0NfUkVHX0FFVV9NQVNLX0FUVE5fRlVOQ18wOwotCXUzMiBuaWdfaW50X21hc2tfYWRkciA9IHBvcnQgPyBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQxIDoKLQkJCQkgICAgICAgTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMDsKLQl1MzIgYWV1X21hc2s7Ci0JdTMyIG5pZ19tYXNrID0gMDsKLQotCWlmIChicC0+YXR0bl9zdGF0ZSAmIGFzc2VydGVkKQotCQlCTlgyWF9FUlIoIklHVSBFUlJPUlxuIik7Ci0KLQlibngyeF9hY3F1aXJlX2h3X2xvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfUE9SVDBfQVRUX01BU0sgKyBwb3J0KTsKLQlhZXVfbWFzayA9IFJFR19SRChicCwgYWV1X2FkZHIpOwotCi0JRFAoTkVUSUZfTVNHX0hXLCAiYWV1X21hc2sgJXggIG5ld2x5IGFzc2VydGVkICV4XG4iLAotCSAgIGFldV9tYXNrLCBhc3NlcnRlZCk7Ci0JYWV1X21hc2sgJj0gfihhc3NlcnRlZCAmIDB4M2ZmKTsKLQlEUChORVRJRl9NU0dfSFcsICJuZXcgbWFzayAleFxuIiwgYWV1X21hc2spOwotCi0JUkVHX1dSKGJwLCBhZXVfYWRkciwgYWV1X21hc2spOwotCWJueDJ4X3JlbGVhc2VfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV9QT1JUMF9BVFRfTUFTSyArIHBvcnQpOwotCi0JRFAoTkVUSUZfTVNHX0hXLCAiYXR0bl9zdGF0ZSAleFxuIiwgYnAtPmF0dG5fc3RhdGUpOwotCWJwLT5hdHRuX3N0YXRlIHw9IGFzc2VydGVkOwotCURQKE5FVElGX01TR19IVywgIm5ldyBzdGF0ZSAleFxuIiwgYnAtPmF0dG5fc3RhdGUpOwotCi0JaWYgKGFzc2VydGVkICYgQVRUTl9IQVJEX1dJUkVEX01BU0spIHsKLQkJaWYgKGFzc2VydGVkICYgQVRUTl9OSUdfRk9SX0ZVTkMpIHsKLQotCQkJYm54MnhfYWNxdWlyZV9waHlfbG9jayhicCk7Ci0KLQkJCS8qIHNhdmUgbmlnIGludGVycnVwdCBtYXNrICovCi0JCQluaWdfbWFzayA9IFJFR19SRChicCwgbmlnX2ludF9tYXNrX2FkZHIpOwotCQkJUkVHX1dSKGJwLCBuaWdfaW50X21hc2tfYWRkciwgMCk7Ci0KLQkJCWJueDJ4X2xpbmtfYXR0bihicCk7Ci0KLQkJCS8qIGhhbmRsZSB1bmljb3JlIGF0dG4/ICovCi0JCX0KLQkJaWYgKGFzc2VydGVkICYgQVRUTl9TV19USU1FUl80X0ZVTkMpCi0JCQlEUChORVRJRl9NU0dfSFcsICJBVFROX1NXX1RJTUVSXzRfRlVOQyFcbiIpOwotCi0JCWlmIChhc3NlcnRlZCAmIEdQSU9fMl9GVU5DKQotCQkJRFAoTkVUSUZfTVNHX0hXLCAiR1BJT18yX0ZVTkMhXG4iKTsKLQotCQlpZiAoYXNzZXJ0ZWQgJiBHUElPXzNfRlVOQykKLQkJCURQKE5FVElGX01TR19IVywgIkdQSU9fM19GVU5DIVxuIik7Ci0KLQkJaWYgKGFzc2VydGVkICYgR1BJT180X0ZVTkMpCi0JCQlEUChORVRJRl9NU0dfSFcsICJHUElPXzRfRlVOQyFcbiIpOwotCi0JCWlmIChwb3J0ID09IDApIHsKLQkJCWlmIChhc3NlcnRlZCAmIEFUVE5fR0VORVJBTF9BVFROXzEpIHsKLQkJCQlEUChORVRJRl9NU0dfSFcsICJBVFROX0dFTkVSQUxfQVRUTl8xIVxuIik7Ci0JCQkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzEsIDB4MCk7Ci0JCQl9Ci0JCQlpZiAoYXNzZXJ0ZWQgJiBBVFROX0dFTkVSQUxfQVRUTl8yKSB7Ci0JCQkJRFAoTkVUSUZfTVNHX0hXLCAiQVRUTl9HRU5FUkFMX0FUVE5fMiFcbiIpOwotCQkJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8yLCAweDApOwotCQkJfQotCQkJaWYgKGFzc2VydGVkICYgQVRUTl9HRU5FUkFMX0FUVE5fMykgewotCQkJCURQKE5FVElGX01TR19IVywgIkFUVE5fR0VORVJBTF9BVFROXzMhXG4iKTsKLQkJCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMywgMHgwKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChhc3NlcnRlZCAmIEFUVE5fR0VORVJBTF9BVFROXzQpIHsKLQkJCQlEUChORVRJRl9NU0dfSFcsICJBVFROX0dFTkVSQUxfQVRUTl80IVxuIik7Ci0JCQkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzQsIDB4MCk7Ci0JCQl9Ci0JCQlpZiAoYXNzZXJ0ZWQgJiBBVFROX0dFTkVSQUxfQVRUTl81KSB7Ci0JCQkJRFAoTkVUSUZfTVNHX0hXLCAiQVRUTl9HRU5FUkFMX0FUVE5fNSFcbiIpOwotCQkJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl81LCAweDApOwotCQkJfQotCQkJaWYgKGFzc2VydGVkICYgQVRUTl9HRU5FUkFMX0FUVE5fNikgewotCQkJCURQKE5FVElGX01TR19IVywgIkFUVE5fR0VORVJBTF9BVFROXzYhXG4iKTsKLQkJCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fNiwgMHgwKTsKLQkJCX0KLQkJfQotCi0JfSAvKiBpZiBoYXJkd2lyZWQgKi8KLQotCURQKE5FVElGX01TR19IVywgImFib3V0IHRvIG1hc2sgMHglMDh4IGF0IEhDIGFkZHIgMHgleFxuIiwKLQkgICBhc3NlcnRlZCwgaGNfYWRkcik7Ci0JUkVHX1dSKGJwLCBoY19hZGRyLCBhc3NlcnRlZCk7Ci0KLQkvKiBub3cgc2V0IGJhY2sgdGhlIG1hc2sgKi8KLQlpZiAoYXNzZXJ0ZWQgJiBBVFROX05JR19GT1JfRlVOQykgewotCQlSRUdfV1IoYnAsIG5pZ19pbnRfbWFza19hZGRyLCBuaWdfbWFzayk7Ci0JCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X2Zhbl9mYWlsdXJlKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKLQotCS8qIG1hcmsgdGhlIGZhaWx1cmUgKi8KLQlicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcgJj0gflBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX01BU0s7Ci0JYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnIHw9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkU7Ci0JU0hNRU1fV1IoYnAsIGRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLmV4dGVybmFsX3BoeV9jb25maWcsCi0JCSBicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOwotCi0JLyogbG9nIHRoZSBmYWlsdXJlICovCi0JbmV0ZGV2X2VycihicC0+ZGV2LCAiRmFuIEZhaWx1cmUgb24gTmV0d29yayBDb250cm9sbGVyIGhhcyBjYXVzZWQiCi0JICAgICAgICIgdGhlIGRyaXZlciB0byBzaHV0ZG93biB0aGUgY2FyZCB0byBwcmV2ZW50IHBlcm1hbmVudCIKLQkgICAgICAgIiBkYW1hZ2UuICBQbGVhc2UgY29udGFjdCBPRU0gU3VwcG9ydCBmb3IgYXNzaXN0YW5jZVxuIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9hdHRuX2ludF9kZWFzc2VydGVkMChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYXR0bikKLXsKLQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwotCWludCByZWdfb2Zmc2V0OwotCXUzMiB2YWwsIHN3YXBfdmFsLCBzd2FwX292ZXJyaWRlOwotCi0JcmVnX29mZnNldCA9IChwb3J0ID8gTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18xX09VVF8wIDoKLQkJCSAgICAgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18wX09VVF8wKTsKLQotCWlmIChhdHRuICYgQUVVX0lOUFVUU19BVFROX0JJVFNfU1BJTzUpIHsKLQotCQl2YWwgPSBSRUdfUkQoYnAsIHJlZ19vZmZzZXQpOwotCQl2YWwgJj0gfkFFVV9JTlBVVFNfQVRUTl9CSVRTX1NQSU81OwotCQlSRUdfV1IoYnAsIHJlZ19vZmZzZXQsIHZhbCk7Ci0KLQkJQk5YMlhfRVJSKCJTUElPNSBodyBhdHRlbnRpb25cbiIpOwotCi0JCS8qIEZhbiBmYWlsdXJlIGF0dGVudGlvbiAqLwotCQlzd2l0Y2ggKFhHWFNfRVhUX1BIWV9UWVBFKGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZykpIHsKLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgotCQkJLyogTG93IHBvd2VyIG1vZGUgaXMgY29udHJvbGxlZCBieSBHUElPIDIgKi8KLQkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzIsCi0JCQkJICAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0xPVywgcG9ydCk7Ci0JCQkvKiBUaGUgUEhZIHJlc2V0IGlzIGNvbnRyb2xsZWQgYnkgR1BJTyAxICovCi0JCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18xLAotCQkJCSAgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1csIHBvcnQpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3OgotCQkJLyogVGhlIFBIWSByZXNldCBpcyBjb250cm9sbGVkIGJ5IEdQSU8gMSAqLwotCQkJLyogZmFrZSB0aGUgcG9ydCBudW1iZXIgdG8gY2FuY2VsIHRoZSBzd2FwIGRvbmUgaW4KLQkJCSAgIHNldF9ncGlvKCkgKi8KLQkJCXN3YXBfdmFsID0gUkVHX1JEKGJwLCBOSUdfUkVHX1BPUlRfU1dBUCk7Ci0JCQlzd2FwX292ZXJyaWRlID0gUkVHX1JEKGJwLCBOSUdfUkVHX1NUUkFQX09WRVJSSURFKTsKLQkJCXBvcnQgPSAoc3dhcF92YWwgJiYgc3dhcF9vdmVycmlkZSkgXiAxOwotCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMSwKLQkJCQkgICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfTE9XLCBwb3J0KTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQlibngyeF9mYW5fZmFpbHVyZShicCk7Ci0JfQotCi0JaWYgKGF0dG4gJiAoQUVVX0lOUFVUU19BVFROX0JJVFNfR1BJTzNfRlVOQ1RJT05fMCB8Ci0JCSAgICBBRVVfSU5QVVRTX0FUVE5fQklUU19HUElPM19GVU5DVElPTl8xKSkgewotCQlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKLQkJYm54MnhfaGFuZGxlX21vZHVsZV9kZXRlY3RfaW50KCZicC0+bGlua19wYXJhbXMpOwotCQlibngyeF9yZWxlYXNlX3BoeV9sb2NrKGJwKTsKLQl9Ci0KLQlpZiAoYXR0biAmIEhXX0lOVEVSUlVUX0FTU0VSVF9TRVRfMCkgewotCi0JCXZhbCA9IFJFR19SRChicCwgcmVnX29mZnNldCk7Ci0JCXZhbCAmPSB+KGF0dG4gJiBIV19JTlRFUlJVVF9BU1NFUlRfU0VUXzApOwotCQlSRUdfV1IoYnAsIHJlZ19vZmZzZXQsIHZhbCk7Ci0KLQkJQk5YMlhfRVJSKCJGQVRBTCBIVyBibG9jayBhdHRlbnRpb24gc2V0MCAweCV4XG4iLAotCQkJICAodTMyKShhdHRuICYgSFdfSU5URVJSVVRfQVNTRVJUX1NFVF8wKSk7Ci0JCWJueDJ4X3BhbmljKCk7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfYXR0bl9pbnRfZGVhc3NlcnRlZDEoc3RydWN0IGJueDJ4ICpicCwgdTMyIGF0dG4pCi17Ci0JdTMyIHZhbDsKLQotCWlmIChhdHRuICYgQUVVX0lOUFVUU19BVFROX0JJVFNfRE9PUkJFTExRX0hXX0lOVEVSUlVQVCkgewotCi0JCXZhbCA9IFJFR19SRChicCwgRE9SUV9SRUdfRE9SUV9JTlRfU1RTX0NMUik7Ci0JCUJOWDJYX0VSUigiREIgaHcgYXR0ZW50aW9uIDB4JXhcbiIsIHZhbCk7Ci0JCS8qIERPUlEgZGlzY2FyZCBhdHRlbnRpb24gKi8KLQkJaWYgKHZhbCAmIDB4MikKLQkJCUJOWDJYX0VSUigiRkFUQUwgZXJyb3IgZnJvbSBET1JRXG4iKTsKLQl9Ci0KLQlpZiAoYXR0biAmIEhXX0lOVEVSUlVUX0FTU0VSVF9TRVRfMSkgewotCi0JCWludCBwb3J0ID0gQlBfUE9SVChicCk7Ci0JCWludCByZWdfb2Zmc2V0OwotCi0JCXJlZ19vZmZzZXQgPSAocG9ydCA/IE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMV9PVVRfMSA6Ci0JCQkJICAgICBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzBfT1VUXzEpOwotCi0JCXZhbCA9IFJFR19SRChicCwgcmVnX29mZnNldCk7Ci0JCXZhbCAmPSB+KGF0dG4gJiBIV19JTlRFUlJVVF9BU1NFUlRfU0VUXzEpOwotCQlSRUdfV1IoYnAsIHJlZ19vZmZzZXQsIHZhbCk7Ci0KLQkJQk5YMlhfRVJSKCJGQVRBTCBIVyBibG9jayBhdHRlbnRpb24gc2V0MSAweCV4XG4iLAotCQkJICAodTMyKShhdHRuICYgSFdfSU5URVJSVVRfQVNTRVJUX1NFVF8xKSk7Ci0JCWJueDJ4X3BhbmljKCk7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfYXR0bl9pbnRfZGVhc3NlcnRlZDIoc3RydWN0IGJueDJ4ICpicCwgdTMyIGF0dG4pCi17Ci0JdTMyIHZhbDsKLQotCWlmIChhdHRuICYgQUVVX0lOUFVUU19BVFROX0JJVFNfQ0ZDX0hXX0lOVEVSUlVQVCkgewotCi0JCXZhbCA9IFJFR19SRChicCwgQ0ZDX1JFR19DRkNfSU5UX1NUU19DTFIpOwotCQlCTlgyWF9FUlIoIkNGQyBodyBhdHRlbnRpb24gMHgleFxuIiwgdmFsKTsKLQkJLyogQ0ZDIGVycm9yIGF0dGVudGlvbiAqLwotCQlpZiAodmFsICYgMHgyKQotCQkJQk5YMlhfRVJSKCJGQVRBTCBlcnJvciBmcm9tIENGQ1xuIik7Ci0JfQotCi0JaWYgKGF0dG4gJiBBRVVfSU5QVVRTX0FUVE5fQklUU19QWFBfSFdfSU5URVJSVVBUKSB7Ci0KLQkJdmFsID0gUkVHX1JEKGJwLCBQWFBfUkVHX1BYUF9JTlRfU1RTX0NMUl8wKTsKLQkJQk5YMlhfRVJSKCJQWFAgaHcgYXR0ZW50aW9uIDB4JXhcbiIsIHZhbCk7Ci0JCS8qIFJRX1VTRE1EUF9GSUZPX09WRVJGTE9XICovCi0JCWlmICh2YWwgJiAweDE4MDAwKQotCQkJQk5YMlhfRVJSKCJGQVRBTCBlcnJvciBmcm9tIFBYUFxuIik7Ci0JfQotCi0JaWYgKGF0dG4gJiBIV19JTlRFUlJVVF9BU1NFUlRfU0VUXzIpIHsKLQotCQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwotCQlpbnQgcmVnX29mZnNldDsKLQotCQlyZWdfb2Zmc2V0ID0gKHBvcnQgPyBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzFfT1VUXzIgOgotCQkJCSAgICAgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18wX09VVF8yKTsKLQotCQl2YWwgPSBSRUdfUkQoYnAsIHJlZ19vZmZzZXQpOwotCQl2YWwgJj0gfihhdHRuICYgSFdfSU5URVJSVVRfQVNTRVJUX1NFVF8yKTsKLQkJUkVHX1dSKGJwLCByZWdfb2Zmc2V0LCB2YWwpOwotCi0JCUJOWDJYX0VSUigiRkFUQUwgSFcgYmxvY2sgYXR0ZW50aW9uIHNldDIgMHgleFxuIiwKLQkJCSAgKHUzMikoYXR0biAmIEhXX0lOVEVSUlVUX0FTU0VSVF9TRVRfMikpOwotCQlibngyeF9wYW5pYygpOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X2F0dG5faW50X2RlYXNzZXJ0ZWQzKHN0cnVjdCBibngyeCAqYnAsIHUzMiBhdHRuKQotewotCXUzMiB2YWw7Ci0KLQlpZiAoYXR0biAmIEVWRVJFU1RfR0VOX0FUVE5fSU5fVVNFX01BU0spIHsKLQotCQlpZiAoYXR0biAmIEJOWDJYX1BNRl9MSU5LX0FTU0VSVCkgewotCQkJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKLQotCQkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzEyICsgZnVuYyo0LCAwKTsKLQkJCWJwLT5tZl9jb25maWcgPSBTSE1FTV9SRChicCwKLQkJCQkJICAgbWZfY2ZnLmZ1bmNfbWZfY29uZmlnW2Z1bmNdLmNvbmZpZyk7Ci0JCQl2YWwgPSBTSE1FTV9SRChicCwgZnVuY19tYltmdW5jXS5kcnZfc3RhdHVzKTsKLQkJCWlmICh2YWwgJiBEUlZfU1RBVFVTX0RDQ19FVkVOVF9NQVNLKQotCQkJCWJueDJ4X2RjY19ldmVudChicCwKLQkJCQkJICAgICh2YWwgJiBEUlZfU1RBVFVTX0RDQ19FVkVOVF9NQVNLKSk7Ci0JCQlibngyeF9fbGlua19zdGF0dXNfdXBkYXRlKGJwKTsKLQkJCWlmICgoYnAtPnBvcnQucG1mID09IDApICYmICh2YWwgJiBEUlZfU1RBVFVTX1BNRikpCi0JCQkJYm54MnhfcG1mX3VwZGF0ZShicCk7Ci0KLQkJfSBlbHNlIGlmIChhdHRuICYgQk5YMlhfTUNfQVNTRVJUX0JJVFMpIHsKLQotCQkJQk5YMlhfRVJSKCJNQyBhc3NlcnQhXG4iKTsKLQkJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8xMCwgMCk7Ci0JCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fOSwgMCk7Ci0JCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fOCwgMCk7Ci0JCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fNywgMCk7Ci0JCQlibngyeF9wYW5pYygpOwotCi0JCX0gZWxzZSBpZiAoYXR0biAmIEJOWDJYX01DUF9BU1NFUlQpIHsKLQotCQkJQk5YMlhfRVJSKCJNQ1AgYXNzZXJ0IVxuIik7Ci0JCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMTEsIDApOwotCQkJYm54MnhfZndfZHVtcChicCk7Ci0KLQkJfSBlbHNlCi0JCQlCTlgyWF9FUlIoIlVua25vd24gSFcgYXNzZXJ0ISAoYXR0biAweCV4KVxuIiwgYXR0bik7Ci0JfQotCi0JaWYgKGF0dG4gJiBFVkVSRVNUX0xBVENIRURfQVRUTl9JTl9VU0VfTUFTSykgewotCQlCTlgyWF9FUlIoIkxBVENIRUQgYXR0ZW50aW9uIDB4JTA4eCAobWFza2VkKVxuIiwgYXR0bik7Ci0JCWlmIChhdHRuICYgQk5YMlhfR1JDX1RJTUVPVVQpIHsKLQkJCXZhbCA9IENISVBfSVNfRTFIKGJwKSA/Ci0JCQkJUkVHX1JEKGJwLCBNSVNDX1JFR19HUkNfVElNRU9VVF9BVFROKSA6IDA7Ci0JCQlCTlgyWF9FUlIoIkdSQyB0aW1lLW91dCAweCUwOHhcbiIsIHZhbCk7Ci0JCX0KLQkJaWYgKGF0dG4gJiBCTlgyWF9HUkNfUlNWKSB7Ci0JCQl2YWwgPSBDSElQX0lTX0UxSChicCkgPwotCQkJCVJFR19SRChicCwgTUlTQ19SRUdfR1JDX1JTVl9BVFROKSA6IDA7Ci0JCQlCTlgyWF9FUlIoIkdSQyByZXNlcnZlZCAweCUwOHhcbiIsIHZhbCk7Ci0JCX0KLQkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfQ0xSX0xBVENIX1NJR05BTCwgMHg3ZmYpOwotCX0KLX0KLQotc3RhdGljIGludCBibngyeF9uaWNfdW5sb2FkKHN0cnVjdCBibngyeCAqYnAsIGludCB1bmxvYWRfbW9kZSk7Ci1zdGF0aWMgaW50IGJueDJ4X25pY19sb2FkKHN0cnVjdCBibngyeCAqYnAsIGludCBsb2FkX21vZGUpOwotCi0KLSNkZWZpbmUgQk5YMlhfTUlTQ19HRU5fUkVHICAgICAgTUlTQ19SRUdfR0VORVJJQ19QT1JfMQotI2RlZmluZSBMT0FEX0NPVU5URVJfQklUUwkxNiAvKiBOdW1iZXIgb2YgYml0cyBmb3IgbG9hZCBjb3VudGVyICovCi0jZGVmaW5lIExPQURfQ09VTlRFUl9NQVNLCSgoKHUzMikweDEgPDwgTE9BRF9DT1VOVEVSX0JJVFMpIC0gMSkKLSNkZWZpbmUgUkVTRVRfRE9ORV9GTEFHX01BU0sJKH5MT0FEX0NPVU5URVJfTUFTSykKLSNkZWZpbmUgUkVTRVRfRE9ORV9GTEFHX1NISUZUCUxPQURfQ09VTlRFUl9CSVRTCi0jZGVmaW5lIENISVBfUEFSSVRZX1NVUFBPUlRFRChicCkgICAoQ0hJUF9JU19FMShicCkgfHwgQ0hJUF9JU19FMUgoYnApKQotLyoKLSAqIHNob3VsZCBiZSBydW4gdW5kZXIgcnRubCBsb2NrCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9zZXRfcmVzZXRfZG9uZShzdHJ1Y3QgYm54MnggKmJwKQotewotCXUzMiB2YWwJPSBSRUdfUkQoYnAsIEJOWDJYX01JU0NfR0VOX1JFRyk7Ci0JdmFsICY9IH4oMSA8PCBSRVNFVF9ET05FX0ZMQUdfU0hJRlQpOwotCVJFR19XUihicCwgQk5YMlhfTUlTQ19HRU5fUkVHLCB2YWwpOwotCWJhcnJpZXIoKTsKLQltbWlvd2IoKTsKLX0KLQotLyoKLSAqIHNob3VsZCBiZSBydW4gdW5kZXIgcnRubCBsb2NrCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9zZXRfcmVzZXRfaW5fcHJvZ3Jlc3Moc3RydWN0IGJueDJ4ICpicCkKLXsKLQl1MzIgdmFsCT0gUkVHX1JEKGJwLCBCTlgyWF9NSVNDX0dFTl9SRUcpOwotCXZhbCB8PSAoMSA8PCAxNik7Ci0JUkVHX1dSKGJwLCBCTlgyWF9NSVNDX0dFTl9SRUcsIHZhbCk7Ci0JYmFycmllcigpOwotCW1taW93YigpOwotfQotCi0vKgotICogc2hvdWxkIGJlIHJ1biB1bmRlciBydG5sIGxvY2sKLSAqLwotc3RhdGljIGlubGluZSBib29sIGJueDJ4X3Jlc2V0X2lzX2RvbmUoc3RydWN0IGJueDJ4ICpicCkKLXsKLQl1MzIgdmFsCT0gUkVHX1JEKGJwLCBCTlgyWF9NSVNDX0dFTl9SRUcpOwotCURQKE5FVElGX01TR19IVywgIkdFTl9SRUdfVkFMPTB4JTA4eFxuIiwgdmFsKTsKLQlyZXR1cm4gKHZhbCAmIFJFU0VUX0RPTkVfRkxBR19NQVNLKSA/IGZhbHNlIDogdHJ1ZTsKLX0KLQotLyoKLSAqIHNob3VsZCBiZSBydW4gdW5kZXIgcnRubCBsb2NrCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9pbmNfbG9hZF9jbnQoc3RydWN0IGJueDJ4ICpicCkKLXsKLQl1MzIgdmFsMSwgdmFsID0gUkVHX1JEKGJwLCBCTlgyWF9NSVNDX0dFTl9SRUcpOwotCi0JRFAoTkVUSUZfTVNHX0hXLCAiT2xkIEdFTl9SRUdfVkFMPTB4JTA4eFxuIiwgdmFsKTsKLQotCXZhbDEgPSAoKHZhbCAmIExPQURfQ09VTlRFUl9NQVNLKSArIDEpICYgTE9BRF9DT1VOVEVSX01BU0s7Ci0JUkVHX1dSKGJwLCBCTlgyWF9NSVNDX0dFTl9SRUcsICh2YWwgJiBSRVNFVF9ET05FX0ZMQUdfTUFTSykgfCB2YWwxKTsKLQliYXJyaWVyKCk7Ci0JbW1pb3diKCk7Ci19Ci0KLS8qCi0gKiBzaG91bGQgYmUgcnVuIHVuZGVyIHJ0bmwgbG9jawotICovCi1zdGF0aWMgaW5saW5lIHUzMiBibngyeF9kZWNfbG9hZF9jbnQoc3RydWN0IGJueDJ4ICpicCkKLXsKLQl1MzIgdmFsMSwgdmFsID0gUkVHX1JEKGJwLCBCTlgyWF9NSVNDX0dFTl9SRUcpOwotCi0JRFAoTkVUSUZfTVNHX0hXLCAiT2xkIEdFTl9SRUdfVkFMPTB4JTA4eFxuIiwgdmFsKTsKLQotCXZhbDEgPSAoKHZhbCAmIExPQURfQ09VTlRFUl9NQVNLKSAtIDEpICYgTE9BRF9DT1VOVEVSX01BU0s7Ci0JUkVHX1dSKGJwLCBCTlgyWF9NSVNDX0dFTl9SRUcsICh2YWwgJiBSRVNFVF9ET05FX0ZMQUdfTUFTSykgfCB2YWwxKTsKLQliYXJyaWVyKCk7Ci0JbW1pb3diKCk7Ci0KLQlyZXR1cm4gdmFsMTsKLX0KLQotLyoKLSAqIHNob3VsZCBiZSBydW4gdW5kZXIgcnRubCBsb2NrCi0gKi8KLXN0YXRpYyBpbmxpbmUgdTMyIGJueDJ4X2dldF9sb2FkX2NudChzdHJ1Y3QgYm54MnggKmJwKQotewotCXJldHVybiBSRUdfUkQoYnAsIEJOWDJYX01JU0NfR0VOX1JFRykgJiBMT0FEX0NPVU5URVJfTUFTSzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X2NsZWFyX2xvYWRfY250KHN0cnVjdCBibngyeCAqYnApCi17Ci0JdTMyIHZhbCA9IFJFR19SRChicCwgQk5YMlhfTUlTQ19HRU5fUkVHKTsKLQlSRUdfV1IoYnAsIEJOWDJYX01JU0NfR0VOX1JFRywgdmFsICYgKH5MT0FEX0NPVU5URVJfTUFTSykpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX3ByaW50X25leHRfYmxvY2soaW50IGlkeCwgY29uc3QgY2hhciAqYmxrKQotewotCWlmIChpZHgpCi0JCXByX2NvbnQoIiwgIik7Ci0JcHJfY29udCgiJXMiLCBibGspOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBibngyeF9wcmludF9ibG9ja3Nfd2l0aF9wYXJpdHkwKHUzMiBzaWcsIGludCBwYXJfbnVtKQotewotCWludCBpID0gMDsKLQl1MzIgY3VyX2JpdCA9IDA7Ci0JZm9yIChpID0gMDsgc2lnOyBpKyspIHsKLQkJY3VyX2JpdCA9ICgodTMyKTB4MSA8PCBpKTsKLQkJaWYgKHNpZyAmIGN1cl9iaXQpIHsKLQkJCXN3aXRjaCAoY3VyX2JpdCkgewotCQkJY2FzZSBBRVVfSU5QVVRTX0FUVE5fQklUU19CUkJfUEFSSVRZX0VSUk9SOgotCQkJCV9wcmludF9uZXh0X2Jsb2NrKHBhcl9udW0rKywgIkJSQiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBRVVfSU5QVVRTX0FUVE5fQklUU19QQVJTRVJfUEFSSVRZX0VSUk9SOgotCQkJCV9wcmludF9uZXh0X2Jsb2NrKHBhcl9udW0rKywgIlBBUlNFUiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBRVVfSU5QVVRTX0FUVE5fQklUU19UU0RNX1BBUklUWV9FUlJPUjoKLQkJCQlfcHJpbnRfbmV4dF9ibG9jayhwYXJfbnVtKyssICJUU0RNIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1NFQVJDSEVSX1BBUklUWV9FUlJPUjoKLQkJCQlfcHJpbnRfbmV4dF9ibG9jayhwYXJfbnVtKyssICJTRUFSQ0hFUiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBRVVfSU5QVVRTX0FUVE5fQklUU19UU0VNSV9QQVJJVFlfRVJST1I6Ci0JCQkJX3ByaW50X25leHRfYmxvY2socGFyX251bSsrLCAiVFNFTUkiKTsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJLyogQ2xlYXIgdGhlIGJpdCAqLwotCQkJc2lnICY9IH5jdXJfYml0OwotCQl9Ci0JfQotCi0JcmV0dXJuIHBhcl9udW07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGJueDJ4X3ByaW50X2Jsb2Nrc193aXRoX3Bhcml0eTEodTMyIHNpZywgaW50IHBhcl9udW0pCi17Ci0JaW50IGkgPSAwOwotCXUzMiBjdXJfYml0ID0gMDsKLQlmb3IgKGkgPSAwOyBzaWc7IGkrKykgewotCQljdXJfYml0ID0gKCh1MzIpMHgxIDw8IGkpOwotCQlpZiAoc2lnICYgY3VyX2JpdCkgewotCQkJc3dpdGNoIChjdXJfYml0KSB7Ci0JCQljYXNlIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1BCQ0xJRU5UX1BBUklUWV9FUlJPUjoKLQkJCQlfcHJpbnRfbmV4dF9ibG9jayhwYXJfbnVtKyssICJQQkNMSUVOVCIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBRVVfSU5QVVRTX0FUVE5fQklUU19RTV9QQVJJVFlfRVJST1I6Ci0JCQkJX3ByaW50X25leHRfYmxvY2socGFyX251bSsrLCAiUU0iKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQUVVX0lOUFVUU19BVFROX0JJVFNfWFNETV9QQVJJVFlfRVJST1I6Ci0JCQkJX3ByaW50X25leHRfYmxvY2socGFyX251bSsrLCAiWFNETSIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBRVVfSU5QVVRTX0FUVE5fQklUU19YU0VNSV9QQVJJVFlfRVJST1I6Ci0JCQkJX3ByaW50X25leHRfYmxvY2socGFyX251bSsrLCAiWFNFTUkiKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQUVVX0lOUFVUU19BVFROX0JJVFNfRE9PUkJFTExRX1BBUklUWV9FUlJPUjoKLQkJCQlfcHJpbnRfbmV4dF9ibG9jayhwYXJfbnVtKyssICJET09SQkVMTFEiKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQUVVX0lOUFVUU19BVFROX0JJVFNfVkFVWF9QQ0lfQ09SRV9QQVJJVFlfRVJST1I6Ci0JCQkJX3ByaW50X25leHRfYmxvY2socGFyX251bSsrLCAiVkFVWCBQQ0kgQ09SRSIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBRVVfSU5QVVRTX0FUVE5fQklUU19ERUJVR19QQVJJVFlfRVJST1I6Ci0JCQkJX3ByaW50X25leHRfYmxvY2socGFyX251bSsrLCAiREVCVUciKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQUVVX0lOUFVUU19BVFROX0JJVFNfVVNETV9QQVJJVFlfRVJST1I6Ci0JCQkJX3ByaW50X25leHRfYmxvY2socGFyX251bSsrLCAiVVNETSIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBRVVfSU5QVVRTX0FUVE5fQklUU19VU0VNSV9QQVJJVFlfRVJST1I6Ci0JCQkJX3ByaW50X25leHRfYmxvY2socGFyX251bSsrLCAiVVNFTUkiKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQUVVX0lOUFVUU19BVFROX0JJVFNfVVBCX1BBUklUWV9FUlJPUjoKLQkJCQlfcHJpbnRfbmV4dF9ibG9jayhwYXJfbnVtKyssICJVUEIiKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQUVVX0lOUFVUU19BVFROX0JJVFNfQ1NETV9QQVJJVFlfRVJST1I6Ci0JCQkJX3ByaW50X25leHRfYmxvY2socGFyX251bSsrLCAiQ1NETSIpOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQkvKiBDbGVhciB0aGUgYml0ICovCi0JCQlzaWcgJj0gfmN1cl9iaXQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcGFyX251bTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYm54MnhfcHJpbnRfYmxvY2tzX3dpdGhfcGFyaXR5Mih1MzIgc2lnLCBpbnQgcGFyX251bSkKLXsKLQlpbnQgaSA9IDA7Ci0JdTMyIGN1cl9iaXQgPSAwOwotCWZvciAoaSA9IDA7IHNpZzsgaSsrKSB7Ci0JCWN1cl9iaXQgPSAoKHUzMikweDEgPDwgaSk7Ci0JCWlmIChzaWcgJiBjdXJfYml0KSB7Ci0JCQlzd2l0Y2ggKGN1cl9iaXQpIHsKLQkJCWNhc2UgQUVVX0lOUFVUU19BVFROX0JJVFNfQ1NFTUlfUEFSSVRZX0VSUk9SOgotCQkJCV9wcmludF9uZXh0X2Jsb2NrKHBhcl9udW0rKywgIkNTRU1JIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1BYUF9QQVJJVFlfRVJST1I6Ci0JCQkJX3ByaW50X25leHRfYmxvY2socGFyX251bSsrLCAiUFhQIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFFVV9JTl9BVFROX0JJVFNfUFhQUENJQ0xPQ0tDTElFTlRfUEFSSVRZX0VSUk9SOgotCQkJCV9wcmludF9uZXh0X2Jsb2NrKHBhcl9udW0rKywKLQkJCQkJIlBYUFBDSUNMT0NLQ0xJRU5UIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0NGQ19QQVJJVFlfRVJST1I6Ci0JCQkJX3ByaW50X25leHRfYmxvY2socGFyX251bSsrLCAiQ0ZDIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0NEVV9QQVJJVFlfRVJST1I6Ci0JCQkJX3ByaW50X25leHRfYmxvY2socGFyX251bSsrLCAiQ0RVIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0lHVV9QQVJJVFlfRVJST1I6Ci0JCQkJX3ByaW50X25leHRfYmxvY2socGFyX251bSsrLCAiSUdVIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFFVV9JTlBVVFNfQVRUTl9CSVRTX01JU0NfUEFSSVRZX0VSUk9SOgotCQkJCV9wcmludF9uZXh0X2Jsb2NrKHBhcl9udW0rKywgIk1JU0MiKTsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJLyogQ2xlYXIgdGhlIGJpdCAqLwotCQkJc2lnICY9IH5jdXJfYml0OwotCQl9Ci0JfQotCi0JcmV0dXJuIHBhcl9udW07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGJueDJ4X3ByaW50X2Jsb2Nrc193aXRoX3Bhcml0eTModTMyIHNpZywgaW50IHBhcl9udW0pCi17Ci0JaW50IGkgPSAwOwotCXUzMiBjdXJfYml0ID0gMDsKLQlmb3IgKGkgPSAwOyBzaWc7IGkrKykgewotCQljdXJfYml0ID0gKCh1MzIpMHgxIDw8IGkpOwotCQlpZiAoc2lnICYgY3VyX2JpdCkgewotCQkJc3dpdGNoIChjdXJfYml0KSB7Ci0JCQljYXNlIEFFVV9JTlBVVFNfQVRUTl9CSVRTX01DUF9MQVRDSEVEX1JPTV9QQVJJVFk6Ci0JCQkJX3ByaW50X25leHRfYmxvY2socGFyX251bSsrLCAiTUNQIFJPTSIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBRVVfSU5QVVRTX0FUVE5fQklUU19NQ1BfTEFUQ0hFRF9VTVBfUlhfUEFSSVRZOgotCQkJCV9wcmludF9uZXh0X2Jsb2NrKHBhcl9udW0rKywgIk1DUCBVTVAgUlgiKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQUVVX0lOUFVUU19BVFROX0JJVFNfTUNQX0xBVENIRURfVU1QX1RYX1BBUklUWToKLQkJCQlfcHJpbnRfbmV4dF9ibG9jayhwYXJfbnVtKyssICJNQ1AgVU1QIFRYIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFFVV9JTlBVVFNfQVRUTl9CSVRTX01DUF9MQVRDSEVEX1NDUEFEX1BBUklUWToKLQkJCQlfcHJpbnRfbmV4dF9ibG9jayhwYXJfbnVtKyssICJNQ1AgU0NQQUQiKTsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJLyogQ2xlYXIgdGhlIGJpdCAqLwotCQkJc2lnICY9IH5jdXJfYml0OwotCQl9Ci0JfQotCi0JcmV0dXJuIHBhcl9udW07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBibngyeF9wYXJpdHlfYXR0bihzdHJ1Y3QgYm54MnggKmJwLCB1MzIgc2lnMCwgdTMyIHNpZzEsCi0JCQkJICAgICB1MzIgc2lnMiwgdTMyIHNpZzMpCi17Ci0JaWYgKChzaWcwICYgSFdfUFJUWV9BU1NFUlRfU0VUXzApIHx8IChzaWcxICYgSFdfUFJUWV9BU1NFUlRfU0VUXzEpIHx8Ci0JICAgIChzaWcyICYgSFdfUFJUWV9BU1NFUlRfU0VUXzIpIHx8IChzaWczICYgSFdfUFJUWV9BU1NFUlRfU0VUXzMpKSB7Ci0JCWludCBwYXJfbnVtID0gMDsKLQkJRFAoTkVUSUZfTVNHX0hXLCAiV2FzIHBhcml0eSBlcnJvcjogSFcgYmxvY2sgcGFyaXR5IGF0dGVudGlvbjogIgotCQkJIlswXToweCUwOHggWzFdOjB4JTA4eCAiCi0JCQkiWzJdOjB4JTA4eCBbM106MHglMDh4XG4iLAotCQkJICBzaWcwICYgSFdfUFJUWV9BU1NFUlRfU0VUXzAsCi0JCQkgIHNpZzEgJiBIV19QUlRZX0FTU0VSVF9TRVRfMSwKLQkJCSAgc2lnMiAmIEhXX1BSVFlfQVNTRVJUX1NFVF8yLAotCQkJICBzaWczICYgSFdfUFJUWV9BU1NFUlRfU0VUXzMpOwotCQlwcmludGsoS0VSTl9FUlIiJXM6IFBhcml0eSBlcnJvcnMgZGV0ZWN0ZWQgaW4gYmxvY2tzOiAiLAotCQkgICAgICAgYnAtPmRldi0+bmFtZSk7Ci0JCXBhcl9udW0gPSBibngyeF9wcmludF9ibG9ja3Nfd2l0aF9wYXJpdHkwKAotCQkJc2lnMCAmIEhXX1BSVFlfQVNTRVJUX1NFVF8wLCBwYXJfbnVtKTsKLQkJcGFyX251bSA9IGJueDJ4X3ByaW50X2Jsb2Nrc193aXRoX3Bhcml0eTEoCi0JCQlzaWcxICYgSFdfUFJUWV9BU1NFUlRfU0VUXzEsIHBhcl9udW0pOwotCQlwYXJfbnVtID0gYm54MnhfcHJpbnRfYmxvY2tzX3dpdGhfcGFyaXR5MigKLQkJCXNpZzIgJiBIV19QUlRZX0FTU0VSVF9TRVRfMiwgcGFyX251bSk7Ci0JCXBhcl9udW0gPSBibngyeF9wcmludF9ibG9ja3Nfd2l0aF9wYXJpdHkzKAotCQkJc2lnMyAmIEhXX1BSVFlfQVNTRVJUX1NFVF8zLCBwYXJfbnVtKTsKLQkJcHJpbnRrKCJcbiIpOwotCQlyZXR1cm4gdHJ1ZTsKLQl9IGVsc2UKLQkJcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBibngyeF9jaGtfcGFyaXR5X2F0dG4oc3RydWN0IGJueDJ4ICpicCkKLXsKLQlzdHJ1Y3QgYXR0bl9yb3V0ZSBhdHRuOwotCWludCBwb3J0ID0gQlBfUE9SVChicCk7Ci0KLQlhdHRuLnNpZ1swXSA9IFJFR19SRChicCwKLQkJTUlTQ19SRUdfQUVVX0FGVEVSX0lOVkVSVF8xX0ZVTkNfMCArCi0JCQkgICAgIHBvcnQqNCk7Ci0JYXR0bi5zaWdbMV0gPSBSRUdfUkQoYnAsCi0JCU1JU0NfUkVHX0FFVV9BRlRFUl9JTlZFUlRfMl9GVU5DXzAgKwotCQkJICAgICBwb3J0KjQpOwotCWF0dG4uc2lnWzJdID0gUkVHX1JEKGJwLAotCQlNSVNDX1JFR19BRVVfQUZURVJfSU5WRVJUXzNfRlVOQ18wICsKLQkJCSAgICAgcG9ydCo0KTsKLQlhdHRuLnNpZ1szXSA9IFJFR19SRChicCwKLQkJTUlTQ19SRUdfQUVVX0FGVEVSX0lOVkVSVF80X0ZVTkNfMCArCi0JCQkgICAgIHBvcnQqNCk7Ci0KLQlyZXR1cm4gYm54MnhfcGFyaXR5X2F0dG4oYnAsIGF0dG4uc2lnWzBdLCBhdHRuLnNpZ1sxXSwgYXR0bi5zaWdbMl0sCi0JCQkJCWF0dG4uc2lnWzNdKTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfYXR0bl9pbnRfZGVhc3NlcnRlZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgZGVhc3NlcnRlZCkKLXsKLQlzdHJ1Y3QgYXR0bl9yb3V0ZSBhdHRuLCAqZ3JvdXBfbWFzazsKLQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwotCWludCBpbmRleDsKLQl1MzIgcmVnX2FkZHI7Ci0JdTMyIHZhbDsKLQl1MzIgYWV1X21hc2s7Ci0KLQkvKiBuZWVkIHRvIHRha2UgSFcgbG9jayBiZWNhdXNlIE1DUCBvciBvdGhlciBwb3J0IG1pZ2h0IGFsc28KLQkgICB0cnkgdG8gaGFuZGxlIHRoaXMgZXZlbnQgKi8KLQlibngyeF9hY3F1aXJlX2FscihicCk7Ci0KLQlpZiAoYm54MnhfY2hrX3Bhcml0eV9hdHRuKGJwKSkgewotCQlicC0+cmVjb3Zlcnlfc3RhdGUgPSBCTlgyWF9SRUNPVkVSWV9JTklUOwotCQlibngyeF9zZXRfcmVzZXRfaW5fcHJvZ3Jlc3MoYnApOwotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmJwLT5yZXNldF90YXNrLCAwKTsKLQkJLyogRGlzYWJsZSBIVyBpbnRlcnJ1cHRzICovCi0JCWJueDJ4X2ludF9kaXNhYmxlKGJwKTsKLQkJYm54MnhfcmVsZWFzZV9hbHIoYnApOwotCQkvKiBJbiBjYXNlIG9mIHBhcml0eSBlcnJvcnMgZG9uJ3QgaGFuZGxlIGF0dGVudGlvbnMgc28gdGhhdAotCQkgKiBvdGhlciBmdW5jdGlvbiB3b3VsZCAic2VlIiBwYXJpdHkgZXJyb3JzLgotCQkgKi8KLQkJcmV0dXJuOwotCX0KLQotCWF0dG4uc2lnWzBdID0gUkVHX1JEKGJwLCBNSVNDX1JFR19BRVVfQUZURVJfSU5WRVJUXzFfRlVOQ18wICsgcG9ydCo0KTsKLQlhdHRuLnNpZ1sxXSA9IFJFR19SRChicCwgTUlTQ19SRUdfQUVVX0FGVEVSX0lOVkVSVF8yX0ZVTkNfMCArIHBvcnQqNCk7Ci0JYXR0bi5zaWdbMl0gPSBSRUdfUkQoYnAsIE1JU0NfUkVHX0FFVV9BRlRFUl9JTlZFUlRfM19GVU5DXzAgKyBwb3J0KjQpOwotCWF0dG4uc2lnWzNdID0gUkVHX1JEKGJwLCBNSVNDX1JFR19BRVVfQUZURVJfSU5WRVJUXzRfRlVOQ18wICsgcG9ydCo0KTsKLQlEUChORVRJRl9NU0dfSFcsICJhdHRuOiAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLAotCSAgIGF0dG4uc2lnWzBdLCBhdHRuLnNpZ1sxXSwgYXR0bi5zaWdbMl0sIGF0dG4uc2lnWzNdKTsKLQotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE1BWF9EWU5BTUlDX0FUVE5fR1JQUzsgaW5kZXgrKykgewotCQlpZiAoZGVhc3NlcnRlZCAmICgxIDw8IGluZGV4KSkgewotCQkJZ3JvdXBfbWFzayA9ICZicC0+YXR0bl9ncm91cFtpbmRleF07Ci0KLQkJCURQKE5FVElGX01TR19IVywgImdyb3VwWyVkXTogJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKLQkJCSAgIGluZGV4LCBncm91cF9tYXNrLT5zaWdbMF0sIGdyb3VwX21hc2stPnNpZ1sxXSwKLQkJCSAgIGdyb3VwX21hc2stPnNpZ1syXSwgZ3JvdXBfbWFzay0+c2lnWzNdKTsKLQotCQkJYm54MnhfYXR0bl9pbnRfZGVhc3NlcnRlZDMoYnAsCi0JCQkJCWF0dG4uc2lnWzNdICYgZ3JvdXBfbWFzay0+c2lnWzNdKTsKLQkJCWJueDJ4X2F0dG5faW50X2RlYXNzZXJ0ZWQxKGJwLAotCQkJCQlhdHRuLnNpZ1sxXSAmIGdyb3VwX21hc2stPnNpZ1sxXSk7Ci0JCQlibngyeF9hdHRuX2ludF9kZWFzc2VydGVkMihicCwKLQkJCQkJYXR0bi5zaWdbMl0gJiBncm91cF9tYXNrLT5zaWdbMl0pOwotCQkJYm54MnhfYXR0bl9pbnRfZGVhc3NlcnRlZDAoYnAsCi0JCQkJCWF0dG4uc2lnWzBdICYgZ3JvdXBfbWFzay0+c2lnWzBdKTsKLQkJfQotCX0KLQotCWJueDJ4X3JlbGVhc2VfYWxyKGJwKTsKLQotCXJlZ19hZGRyID0gKEhDX1JFR19DT01NQU5EX1JFRyArIHBvcnQqMzIgKyBDT01NQU5EX1JFR19BVFROX0JJVFNfQ0xSKTsKLQotCXZhbCA9IH5kZWFzc2VydGVkOwotCURQKE5FVElGX01TR19IVywgImFib3V0IHRvIG1hc2sgMHglMDh4IGF0IEhDIGFkZHIgMHgleFxuIiwKLQkgICB2YWwsIHJlZ19hZGRyKTsKLQlSRUdfV1IoYnAsIHJlZ19hZGRyLCB2YWwpOwotCi0JaWYgKH5icC0+YXR0bl9zdGF0ZSAmIGRlYXNzZXJ0ZWQpCi0JCUJOWDJYX0VSUigiSUdVIEVSUk9SXG4iKTsKLQotCXJlZ19hZGRyID0gcG9ydCA/IE1JU0NfUkVHX0FFVV9NQVNLX0FUVE5fRlVOQ18xIDoKLQkJCSAgTUlTQ19SRUdfQUVVX01BU0tfQVRUTl9GVU5DXzA7Ci0KLQlibngyeF9hY3F1aXJlX2h3X2xvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfUE9SVDBfQVRUX01BU0sgKyBwb3J0KTsKLQlhZXVfbWFzayA9IFJFR19SRChicCwgcmVnX2FkZHIpOwotCi0JRFAoTkVUSUZfTVNHX0hXLCAiYWV1X21hc2sgJXggIG5ld2x5IGRlYXNzZXJ0ZWQgJXhcbiIsCi0JICAgYWV1X21hc2ssIGRlYXNzZXJ0ZWQpOwotCWFldV9tYXNrIHw9IChkZWFzc2VydGVkICYgMHgzZmYpOwotCURQKE5FVElGX01TR19IVywgIm5ldyBtYXNrICV4XG4iLCBhZXVfbWFzayk7Ci0KLQlSRUdfV1IoYnAsIHJlZ19hZGRyLCBhZXVfbWFzayk7Ci0JYm54MnhfcmVsZWFzZV9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFX1BPUlQwX0FUVF9NQVNLICsgcG9ydCk7Ci0KLQlEUChORVRJRl9NU0dfSFcsICJhdHRuX3N0YXRlICV4XG4iLCBicC0+YXR0bl9zdGF0ZSk7Ci0JYnAtPmF0dG5fc3RhdGUgJj0gfmRlYXNzZXJ0ZWQ7Ci0JRFAoTkVUSUZfTVNHX0hXLCAibmV3IHN0YXRlICV4XG4iLCBicC0+YXR0bl9zdGF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2F0dG5faW50KHN0cnVjdCBibngyeCAqYnApCi17Ci0JLyogcmVhZCBsb2NhbCBjb3B5IG9mIGJpdHMgKi8KLQl1MzIgYXR0bl9iaXRzID0gbGUzMl90b19jcHUoYnAtPmRlZl9zdGF0dXNfYmxrLT5hdHRlbl9zdGF0dXNfYmxvY2suCi0JCQkJCQkJCWF0dG5fYml0cyk7Ci0JdTMyIGF0dG5fYWNrID0gbGUzMl90b19jcHUoYnAtPmRlZl9zdGF0dXNfYmxrLT5hdHRlbl9zdGF0dXNfYmxvY2suCi0JCQkJCQkJCWF0dG5fYml0c19hY2spOwotCXUzMiBhdHRuX3N0YXRlID0gYnAtPmF0dG5fc3RhdGU7Ci0KLQkvKiBsb29rIGZvciBjaGFuZ2VkIGJpdHMgKi8KLQl1MzIgYXNzZXJ0ZWQgICA9ICBhdHRuX2JpdHMgJiB+YXR0bl9hY2sgJiB+YXR0bl9zdGF0ZTsKLQl1MzIgZGVhc3NlcnRlZCA9IH5hdHRuX2JpdHMgJiAgYXR0bl9hY2sgJiAgYXR0bl9zdGF0ZTsKLQotCURQKE5FVElGX01TR19IVywKLQkgICAiYXR0bl9iaXRzICV4ICBhdHRuX2FjayAleCAgYXNzZXJ0ZWQgJXggIGRlYXNzZXJ0ZWQgJXhcbiIsCi0JICAgYXR0bl9iaXRzLCBhdHRuX2FjaywgYXNzZXJ0ZWQsIGRlYXNzZXJ0ZWQpOwotCi0JaWYgKH4oYXR0bl9iaXRzIF4gYXR0bl9hY2spICYgKGF0dG5fYml0cyBeIGF0dG5fc3RhdGUpKQotCQlCTlgyWF9FUlIoIkJBRCBhdHRlbnRpb24gc3RhdGVcbiIpOwotCi0JLyogaGFuZGxlIGJpdHMgdGhhdCB3ZXJlIHJhaXNlZCAqLwotCWlmIChhc3NlcnRlZCkKLQkJYm54MnhfYXR0bl9pbnRfYXNzZXJ0ZWQoYnAsIGFzc2VydGVkKTsKLQotCWlmIChkZWFzc2VydGVkKQotCQlibngyeF9hdHRuX2ludF9kZWFzc2VydGVkKGJwLCBkZWFzc2VydGVkKTsKLX0KLQotc3RhdGljIHZvaWQgYm54Mnhfc3BfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYm54MngsIHNwX3Rhc2sud29yayk7Ci0JdTE2IHN0YXR1czsKLQotCS8qIFJldHVybiBoZXJlIGlmIGludGVycnVwdCBpcyBkaXNhYmxlZCAqLwotCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmYnAtPmludHJfc2VtKSAhPSAwKSkgewotCQlEUChORVRJRl9NU0dfSU5UUiwgImNhbGxlZCBidXQgaW50cl9zZW0gbm90IDAsIHJldHVybmluZ1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlzdGF0dXMgPSBibngyeF91cGRhdGVfZHNiX2lkeChicCk7Ci0vKglpZiAoc3RhdHVzID09IDApCQkJCSAgICAgKi8KLS8qCQlCTlgyWF9FUlIoInNwdXJpb3VzIHNsb3dwYXRoIGludGVycnVwdCFcbiIpOyAqLwotCi0JRFAoTkVUSUZfTVNHX0lOVFIsICJnb3QgYSBzbG93cGF0aCBpbnRlcnJ1cHQgKHN0YXR1cyAweCV4KVxuIiwgc3RhdHVzKTsKLQotCS8qIEhXIGF0dGVudGlvbnMgKi8KLQlpZiAoc3RhdHVzICYgMHgxKSB7Ci0JCWJueDJ4X2F0dG5faW50KGJwKTsKLQkJc3RhdHVzICY9IH4weDE7Ci0JfQotCi0JLyogQ1N0b3JtIGV2ZW50czogU1RBVF9RVUVSWSAqLwotCWlmIChzdGF0dXMgJiAweDIpIHsKLQkJRFAoQk5YMlhfTVNHX1NQLCAiQ1N0b3JtIGV2ZW50czogU1RBVF9RVUVSWVxuIik7Ci0JCXN0YXR1cyAmPSB+MHgyOwotCX0KLQotCWlmICh1bmxpa2VseShzdGF0dXMpKQotCQlEUChORVRJRl9NU0dfSU5UUiwgImdvdCBhbiB1bmtub3duIGludGVycnVwdCEgKHN0YXR1cyAweCV4KVxuIiwKLQkJICAgc3RhdHVzKTsKLQotCWJueDJ4X2Fja19zYihicCwgREVGX1NCX0lELCBBVFRFTlRJT05fSUQsIGxlMTZfdG9fY3B1KGJwLT5kZWZfYXR0X2lkeCksCi0JCSAgICAgSUdVX0lOVF9OT1AsIDEpOwotCWJueDJ4X2Fja19zYihicCwgREVGX1NCX0lELCBVU1RPUk1fSUQsIGxlMTZfdG9fY3B1KGJwLT5kZWZfdV9pZHgpLAotCQkgICAgIElHVV9JTlRfTk9QLCAxKTsKLQlibngyeF9hY2tfc2IoYnAsIERFRl9TQl9JRCwgQ1NUT1JNX0lELCBsZTE2X3RvX2NwdShicC0+ZGVmX2NfaWR4KSwKLQkJICAgICBJR1VfSU5UX05PUCwgMSk7Ci0JYm54MnhfYWNrX3NiKGJwLCBERUZfU0JfSUQsIFhTVE9STV9JRCwgbGUxNl90b19jcHUoYnAtPmRlZl94X2lkeCksCi0JCSAgICAgSUdVX0lOVF9OT1AsIDEpOwotCWJueDJ4X2Fja19zYihicCwgREVGX1NCX0lELCBUU1RPUk1fSUQsIGxlMTZfdG9fY3B1KGJwLT5kZWZfdF9pZHgpLAotCQkgICAgIElHVV9JTlRfRU5BQkxFLCAxKTsKLX0KLQotc3RhdGljIGlycXJldHVybl90IGJueDJ4X21zaXhfc3BfaW50KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2luc3RhbmNlOwotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JLyogUmV0dXJuIGhlcmUgaWYgaW50ZXJydXB0IGlzIGRpc2FibGVkICovCi0JaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZicC0+aW50cl9zZW0pICE9IDApKSB7Ci0JCURQKE5FVElGX01TR19JTlRSLCAiY2FsbGVkIGJ1dCBpbnRyX3NlbSBub3QgMCwgcmV0dXJuaW5nXG4iKTsKLQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCX0KLQotCWJueDJ4X2Fja19zYihicCwgREVGX1NCX0lELCBUU1RPUk1fSUQsIDAsIElHVV9JTlRfRElTQUJMRSwgMCk7Ci0KLSNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCi0JaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCi0JCXJldHVybiBJUlFfSEFORExFRDsKLSNlbmRpZgotCi0jaWZkZWYgQkNNX0NOSUMKLQl7Ci0JCXN0cnVjdCBjbmljX29wcyAqY19vcHM7Ci0KLQkJcmN1X3JlYWRfbG9jaygpOwotCQljX29wcyA9IHJjdV9kZXJlZmVyZW5jZShicC0+Y25pY19vcHMpOwotCQlpZiAoY19vcHMpCi0JCQljX29wcy0+Y25pY19oYW5kbGVyKGJwLT5jbmljX2RhdGEsIE5VTEwpOwotCQlyY3VfcmVhZF91bmxvY2soKTsKLQl9Ci0jZW5kaWYKLQlxdWV1ZV9kZWxheWVkX3dvcmsoYm54Mnhfd3EsICZicC0+c3BfdGFzaywgMCk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLS8qIGVuZCBvZiBzbG93IHBhdGggKi8KLQotLyogU3RhdGlzdGljcyAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBNYWNyb3MKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIHN1bVtoaTpsb10gKz0gYWRkW2hpOmxvXSAqLwotI2RlZmluZSBBRERfNjQoc19oaSwgYV9oaSwgc19sbywgYV9sbykgXAotCWRvIHsgXAotCQlzX2xvICs9IGFfbG87IFwKLQkJc19oaSArPSBhX2hpICsgKChzX2xvIDwgYV9sbykgPyAxIDogMCk7IFwKLQl9IHdoaWxlICgwKQotCi0vKiBkaWZmZXJlbmNlID0gbWludWVuZCAtIHN1YnRyYWhlbmQgKi8KLSNkZWZpbmUgRElGRl82NChkX2hpLCBtX2hpLCBzX2hpLCBkX2xvLCBtX2xvLCBzX2xvKSBcCi0JZG8geyBcCi0JCWlmIChtX2xvIDwgc19sbykgeyBcCi0JCQkvKiB1bmRlcmZsb3cgKi8gXAotCQkJZF9oaSA9IG1faGkgLSBzX2hpOyBcCi0JCQlpZiAoZF9oaSA+IDApIHsgXAotCQkJCS8qIHdlIGNhbiAnbG9hbicgMSAqLyBcCi0JCQkJZF9oaS0tOyBcCi0JCQkJZF9sbyA9IG1fbG8gKyAoVUlOVF9NQVggLSBzX2xvKSArIDE7IFwKLQkJCX0gZWxzZSB7IFwKLQkJCQkvKiBtX2hpIDw9IHNfaGkgKi8gXAotCQkJCWRfaGkgPSAwOyBcCi0JCQkJZF9sbyA9IDA7IFwKLQkJCX0gXAotCQl9IGVsc2UgeyBcCi0JCQkvKiBtX2xvID49IHNfbG8gKi8gXAotCQkJaWYgKG1faGkgPCBzX2hpKSB7IFwKLQkJCQlkX2hpID0gMDsgXAotCQkJCWRfbG8gPSAwOyBcCi0JCQl9IGVsc2UgeyBcCi0JCQkJLyogbV9oaSA+PSBzX2hpICovIFwKLQkJCQlkX2hpID0gbV9oaSAtIHNfaGk7IFwKLQkJCQlkX2xvID0gbV9sbyAtIHNfbG87IFwKLQkJCX0gXAotCQl9IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFVQREFURV9TVEFUNjQocywgdCkgXAotCWRvIHsgXAotCQlESUZGXzY0KGRpZmYuaGksIG5ldy0+cyMjX2hpLCBwc3RhdHMtPm1hY19zdHhbMF0udCMjX2hpLCBcCi0JCQlkaWZmLmxvLCBuZXctPnMjI19sbywgcHN0YXRzLT5tYWNfc3R4WzBdLnQjI19sbyk7IFwKLQkJcHN0YXRzLT5tYWNfc3R4WzBdLnQjI19oaSA9IG5ldy0+cyMjX2hpOyBcCi0JCXBzdGF0cy0+bWFjX3N0eFswXS50IyNfbG8gPSBuZXctPnMjI19sbzsgXAotCQlBRERfNjQocHN0YXRzLT5tYWNfc3R4WzFdLnQjI19oaSwgZGlmZi5oaSwgXAotCQkgICAgICAgcHN0YXRzLT5tYWNfc3R4WzFdLnQjI19sbywgZGlmZi5sbyk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFVQREFURV9TVEFUNjRfTklHKHMsIHQpIFwKLQlkbyB7IFwKLQkJRElGRl82NChkaWZmLmhpLCBuZXctPnMjI19oaSwgb2xkLT5zIyNfaGksIFwKLQkJCWRpZmYubG8sIG5ldy0+cyMjX2xvLCBvbGQtPnMjI19sbyk7IFwKLQkJQUREXzY0KGVzdGF0cy0+dCMjX2hpLCBkaWZmLmhpLCBcCi0JCSAgICAgICBlc3RhdHMtPnQjI19sbywgZGlmZi5sbyk7IFwKLQl9IHdoaWxlICgwKQotCi0vKiBzdW1baGk6bG9dICs9IGFkZCAqLwotI2RlZmluZSBBRERfRVhURU5EXzY0KHNfaGksIHNfbG8sIGEpIFwKLQlkbyB7IFwKLQkJc19sbyArPSBhOyBcCi0JCXNfaGkgKz0gKHNfbG8gPCBhKSA/IDEgOiAwOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBVUERBVEVfRVhURU5EX1NUQVQocykgXAotCWRvIHsgXAotCQlBRERfRVhURU5EXzY0KHBzdGF0cy0+bWFjX3N0eFsxXS5zIyNfaGksIFwKLQkJCSAgICAgIHBzdGF0cy0+bWFjX3N0eFsxXS5zIyNfbG8sIFwKLQkJCSAgICAgIG5ldy0+cyk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFVQREFURV9FWFRFTkRfVFNUQVQocywgdCkgXAotCWRvIHsgXAotCQlkaWZmID0gbGUzMl90b19jcHUodGNsaWVudC0+cykgLSBsZTMyX3RvX2NwdShvbGRfdGNsaWVudC0+cyk7IFwKLQkJb2xkX3RjbGllbnQtPnMgPSB0Y2xpZW50LT5zOyBcCi0JCUFERF9FWFRFTkRfNjQocXN0YXRzLT50IyNfaGksIHFzdGF0cy0+dCMjX2xvLCBkaWZmKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgVVBEQVRFX0VYVEVORF9VU1RBVChzLCB0KSBcCi0JZG8geyBcCi0JCWRpZmYgPSBsZTMyX3RvX2NwdSh1Y2xpZW50LT5zKSAtIGxlMzJfdG9fY3B1KG9sZF91Y2xpZW50LT5zKTsgXAotCQlvbGRfdWNsaWVudC0+cyA9IHVjbGllbnQtPnM7IFwKLQkJQUREX0VYVEVORF82NChxc3RhdHMtPnQjI19oaSwgcXN0YXRzLT50IyNfbG8sIGRpZmYpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBVUERBVEVfRVhURU5EX1hTVEFUKHMsIHQpIFwKLQlkbyB7IFwKLQkJZGlmZiA9IGxlMzJfdG9fY3B1KHhjbGllbnQtPnMpIC0gbGUzMl90b19jcHUob2xkX3hjbGllbnQtPnMpOyBcCi0JCW9sZF94Y2xpZW50LT5zID0geGNsaWVudC0+czsgXAotCQlBRERfRVhURU5EXzY0KHFzdGF0cy0+dCMjX2hpLCBxc3RhdHMtPnQjI19sbywgZGlmZik7IFwKLQl9IHdoaWxlICgwKQotCi0vKiBtaW51ZW5kIC09IHN1YnRyYWhlbmQgKi8KLSNkZWZpbmUgU1VCXzY0KG1faGksIHNfaGksIG1fbG8sIHNfbG8pIFwKLQlkbyB7IFwKLQkJRElGRl82NChtX2hpLCBtX2hpLCBzX2hpLCBtX2xvLCBtX2xvLCBzX2xvKTsgXAotCX0gd2hpbGUgKDApCi0KLS8qIG1pbnVlbmRbaGk6bG9dIC09IHN1YnRyYWhlbmQgKi8KLSNkZWZpbmUgU1VCX0VYVEVORF82NChtX2hpLCBtX2xvLCBzKSBcCi0JZG8geyBcCi0JCVNVQl82NChtX2hpLCAwLCBtX2xvLCBzKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU1VCX0VYVEVORF9VU1RBVChzLCB0KSBcCi0JZG8geyBcCi0JCWRpZmYgPSBsZTMyX3RvX2NwdSh1Y2xpZW50LT5zKSAtIGxlMzJfdG9fY3B1KG9sZF91Y2xpZW50LT5zKTsgXAotCQlTVUJfRVhURU5EXzY0KHFzdGF0cy0+dCMjX2hpLCBxc3RhdHMtPnQjI19sbywgZGlmZik7IFwKLQl9IHdoaWxlICgwKQotCi0vKgotICogR2VuZXJhbCBzZXJ2aWNlIGZ1bmN0aW9ucwotICovCi0KLXN0YXRpYyBpbmxpbmUgbG9uZyBibngyeF9oaWxvKHUzMiAqaGlyZWYpCi17Ci0JdTMyIGxvID0gKihoaXJlZiArIDEpOwotI2lmIChCSVRTX1BFUl9MT05HID09IDY0KQotCXUzMiBoaSA9ICpoaXJlZjsKLQotCXJldHVybiBISUxPX1U2NChoaSwgbG8pOwotI2Vsc2UKLQlyZXR1cm4gbG87Ci0jZW5kaWYKLX0KLQotLyoKLSAqIEluaXQgc2VydmljZSBmdW5jdGlvbnMKLSAqLwotCi1zdGF0aWMgdm9pZCBibngyeF9zdG9ybV9zdGF0c19wb3N0KHN0cnVjdCBibngyeCAqYnApCi17Ci0JaWYgKCFicC0+c3RhdHNfcGVuZGluZykgewotCQlzdHJ1Y3QgZXRoX3F1ZXJ5X3JhbXJvZF9kYXRhIHJhbXJvZF9kYXRhID0gezB9OwotCQlpbnQgaSwgcmM7Ci0KLQkJcmFtcm9kX2RhdGEuZHJ2X2NvdW50ZXIgPSBicC0+c3RhdHNfY291bnRlcisrOwotCQlyYW1yb2RfZGF0YS5jb2xsZWN0X3BvcnQgPSBicC0+cG9ydC5wbWYgPyAxIDogMDsKLQkJZm9yX2VhY2hfcXVldWUoYnAsIGkpCi0JCQlyYW1yb2RfZGF0YS5jdHJfaWRfdmVjdG9yIHw9ICgxIDw8IGJwLT5mcFtpXS5jbF9pZCk7Ci0KLQkJcmMgPSBibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9TVEFUX1FVRVJZLCAwLAotCQkJCSAgICgodTMyICopJnJhbXJvZF9kYXRhKVsxXSwKLQkJCQkgICAoKHUzMiAqKSZyYW1yb2RfZGF0YSlbMF0sIDApOwotCQlpZiAocmMgPT0gMCkgewotCQkJLyogc3RhdHMgcmFtcm9kIGhhcyBpdCdzIG93biBzbG90IG9uIHRoZSBzcHEgKi8KLQkJCWJwLT5zcHFfbGVmdCsrOwotCQkJYnAtPnN0YXRzX3BlbmRpbmcgPSAxOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBibngyeF9od19zdGF0c19wb3N0KHN0cnVjdCBibngyeCAqYnApCi17Ci0Jc3RydWN0IGRtYWVfY29tbWFuZCAqZG1hZSA9ICZicC0+c3RhdHNfZG1hZTsKLQl1MzIgKnN0YXRzX2NvbXAgPSBibngyeF9zcChicCwgc3RhdHNfY29tcCk7Ci0KLQkqc3RhdHNfY29tcCA9IERNQUVfQ09NUF9WQUw7Ci0JaWYgKENISVBfUkVWX0lTX1NMT1coYnApKQotCQlyZXR1cm47Ci0KLQkvKiBsb2FkZXIgKi8KLQlpZiAoYnAtPmV4ZWN1dGVyX2lkeCkgewotCQlpbnQgbG9hZGVyX2lkeCA9IFBNRl9ETUFFX0MoYnApOwotCi0JCW1lbXNldChkbWFlLCAwLCBzaXplb2Yoc3RydWN0IGRtYWVfY29tbWFuZCkpOwotCi0JCWRtYWUtPm9wY29kZSA9IChETUFFX0NNRF9TUkNfUENJIHwgRE1BRV9DTURfRFNUX0dSQyB8Ci0JCQkJRE1BRV9DTURfQ19EU1RfR1JDIHwgRE1BRV9DTURfQ19FTkFCTEUgfAotCQkJCURNQUVfQ01EX0RTVF9SRVNFVCB8Ci0jaWZkZWYgX19CSUdfRU5ESUFOCi0JCQkJRE1BRV9DTURfRU5ESUFOSVRZX0JfRFdfU1dBUCB8Ci0jZWxzZQotCQkJCURNQUVfQ01EX0VORElBTklUWV9EV19TV0FQIHwKLSNlbmRpZgotCQkJCShCUF9QT1JUKGJwKSA/IERNQUVfQ01EX1BPUlRfMSA6Ci0JCQkJCSAgICAgICBETUFFX0NNRF9QT1JUXzApIHwKLQkJCQkoQlBfRTFIVk4oYnApIDw8IERNQUVfQ01EX0UxSFZOX1NISUZUKSk7Ci0JCWRtYWUtPnNyY19hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIGRtYWVbMF0pKTsKLQkJZG1hZS0+c3JjX2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgZG1hZVswXSkpOwotCQlkbWFlLT5kc3RfYWRkcl9sbyA9IChETUFFX1JFR19DTURfTUVNICsKLQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgZG1hZV9jb21tYW5kKSAqCi0JCQkJICAgICAobG9hZGVyX2lkeCArIDEpKSA+PiAyOwotCQlkbWFlLT5kc3RfYWRkcl9oaSA9IDA7Ci0JCWRtYWUtPmxlbiA9IHNpemVvZihzdHJ1Y3QgZG1hZV9jb21tYW5kKSA+PiAyOwotCQlpZiAoQ0hJUF9JU19FMShicCkpCi0JCQlkbWFlLT5sZW4tLTsKLQkJZG1hZS0+Y29tcF9hZGRyX2xvID0gZG1hZV9yZWdfZ29fY1tsb2FkZXJfaWR4ICsgMV0gPj4gMjsKLQkJZG1hZS0+Y29tcF9hZGRyX2hpID0gMDsKLQkJZG1hZS0+Y29tcF92YWwgPSAxOwotCi0JCSpzdGF0c19jb21wID0gMDsKLQkJYm54MnhfcG9zdF9kbWFlKGJwLCBkbWFlLCBsb2FkZXJfaWR4KTsKLQotCX0gZWxzZSBpZiAoYnAtPmZ1bmNfc3R4KSB7Ci0JCSpzdGF0c19jb21wID0gMDsKLQkJYm54MnhfcG9zdF9kbWFlKGJwLCBkbWFlLCBJTklUX0RNQUVfQyhicCkpOwotCX0KLX0KLQotc3RhdGljIGludCBibngyeF9zdGF0c19jb21wKHN0cnVjdCBibngyeCAqYnApCi17Ci0JdTMyICpzdGF0c19jb21wID0gYm54Mnhfc3AoYnAsIHN0YXRzX2NvbXApOwotCWludCBjbnQgPSAxMDsKLQotCW1pZ2h0X3NsZWVwKCk7Ci0Jd2hpbGUgKCpzdGF0c19jb21wICE9IERNQUVfQ09NUF9WQUwpIHsKLQkJaWYgKCFjbnQpIHsKLQkJCUJOWDJYX0VSUigidGltZW91dCB3YWl0aW5nIGZvciBzdGF0cyBmaW5pc2hlZFxuIik7Ci0JCQlicmVhazsKLQkJfQotCQljbnQtLTsKLQkJbXNsZWVwKDEpOwotCX0KLQlyZXR1cm4gMTsKLX0KLQotLyoKLSAqIFN0YXRpc3RpY3Mgc2VydmljZSBmdW5jdGlvbnMKLSAqLwotCi1zdGF0aWMgdm9pZCBibngyeF9zdGF0c19wbWZfdXBkYXRlKHN0cnVjdCBibngyeCAqYnApCi17Ci0Jc3RydWN0IGRtYWVfY29tbWFuZCAqZG1hZTsKLQl1MzIgb3Bjb2RlOwotCWludCBsb2FkZXJfaWR4ID0gUE1GX0RNQUVfQyhicCk7Ci0JdTMyICpzdGF0c19jb21wID0gYm54Mnhfc3AoYnAsIHN0YXRzX2NvbXApOwotCi0JLyogc2FuaXR5ICovCi0JaWYgKCFJU19FMUhNRihicCkgfHwgIWJwLT5wb3J0LnBtZiB8fCAhYnAtPnBvcnQucG9ydF9zdHgpIHsKLQkJQk5YMlhfRVJSKCJCVUchXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWJwLT5leGVjdXRlcl9pZHggPSAwOwotCi0Jb3Bjb2RlID0gKERNQUVfQ01EX1NSQ19HUkMgfCBETUFFX0NNRF9EU1RfUENJIHwKLQkJICBETUFFX0NNRF9DX0VOQUJMRSB8Ci0JCSAgRE1BRV9DTURfU1JDX1JFU0VUIHwgRE1BRV9DTURfRFNUX1JFU0VUIHwKLSNpZmRlZiBfX0JJR19FTkRJQU4KLQkJICBETUFFX0NNRF9FTkRJQU5JVFlfQl9EV19TV0FQIHwKLSNlbHNlCi0JCSAgRE1BRV9DTURfRU5ESUFOSVRZX0RXX1NXQVAgfAotI2VuZGlmCi0JCSAgKEJQX1BPUlQoYnApID8gRE1BRV9DTURfUE9SVF8xIDogRE1BRV9DTURfUE9SVF8wKSB8Ci0JCSAgKEJQX0UxSFZOKGJwKSA8PCBETUFFX0NNRF9FMUhWTl9TSElGVCkpOwotCi0JZG1hZSA9IGJueDJ4X3NwKGJwLCBkbWFlW2JwLT5leGVjdXRlcl9pZHgrK10pOwotCWRtYWUtPm9wY29kZSA9IChvcGNvZGUgfCBETUFFX0NNRF9DX0RTVF9HUkMpOwotCWRtYWUtPnNyY19hZGRyX2xvID0gYnAtPnBvcnQucG9ydF9zdHggPj4gMjsKLQlkbWFlLT5zcmNfYWRkcl9oaSA9IDA7Ci0JZG1hZS0+ZHN0X2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgcG9ydF9zdGF0cykpOwotCWRtYWUtPmRzdF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIHBvcnRfc3RhdHMpKTsKLQlkbWFlLT5sZW4gPSBETUFFX0xFTjMyX1JEX01BWDsKLQlkbWFlLT5jb21wX2FkZHJfbG8gPSBkbWFlX3JlZ19nb19jW2xvYWRlcl9pZHhdID4+IDI7Ci0JZG1hZS0+Y29tcF9hZGRyX2hpID0gMDsKLQlkbWFlLT5jb21wX3ZhbCA9IDE7Ci0KLQlkbWFlID0gYm54Mnhfc3AoYnAsIGRtYWVbYnAtPmV4ZWN1dGVyX2lkeCsrXSk7Ci0JZG1hZS0+b3Bjb2RlID0gKG9wY29kZSB8IERNQUVfQ01EX0NfRFNUX1BDSSk7Ci0JZG1hZS0+c3JjX2FkZHJfbG8gPSAoYnAtPnBvcnQucG9ydF9zdHggPj4gMikgKyBETUFFX0xFTjMyX1JEX01BWDsKLQlkbWFlLT5zcmNfYWRkcl9oaSA9IDA7Ci0JZG1hZS0+ZHN0X2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgcG9ydF9zdGF0cykgKwotCQkJCSAgIERNQUVfTEVOMzJfUkRfTUFYICogNCk7Ci0JZG1hZS0+ZHN0X2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgcG9ydF9zdGF0cykgKwotCQkJCSAgIERNQUVfTEVOMzJfUkRfTUFYICogNCk7Ci0JZG1hZS0+bGVuID0gKHNpemVvZihzdHJ1Y3QgaG9zdF9wb3J0X3N0YXRzKSA+PiAyKSAtIERNQUVfTEVOMzJfUkRfTUFYOwotCWRtYWUtPmNvbXBfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBzdGF0c19jb21wKSk7Ci0JZG1hZS0+Y29tcF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIHN0YXRzX2NvbXApKTsKLQlkbWFlLT5jb21wX3ZhbCA9IERNQUVfQ09NUF9WQUw7Ci0KLQkqc3RhdHNfY29tcCA9IDA7Ci0JYm54MnhfaHdfc3RhdHNfcG9zdChicCk7Ci0JYm54Mnhfc3RhdHNfY29tcChicCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X3BvcnRfc3RhdHNfaW5pdChzdHJ1Y3QgYm54MnggKmJwKQotewotCXN0cnVjdCBkbWFlX2NvbW1hbmQgKmRtYWU7Ci0JaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKLQlpbnQgdm4gPSBCUF9FMUhWTihicCk7Ci0JdTMyIG9wY29kZTsKLQlpbnQgbG9hZGVyX2lkeCA9IFBNRl9ETUFFX0MoYnApOwotCXUzMiBtYWNfYWRkcjsKLQl1MzIgKnN0YXRzX2NvbXAgPSBibngyeF9zcChicCwgc3RhdHNfY29tcCk7Ci0KLQkvKiBzYW5pdHkgKi8KLQlpZiAoIWJwLT5saW5rX3ZhcnMubGlua191cCB8fCAhYnAtPnBvcnQucG1mKSB7Ci0JCUJOWDJYX0VSUigiQlVHIVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlicC0+ZXhlY3V0ZXJfaWR4ID0gMDsKLQotCS8qIE1DUCAqLwotCW9wY29kZSA9IChETUFFX0NNRF9TUkNfUENJIHwgRE1BRV9DTURfRFNUX0dSQyB8Ci0JCSAgRE1BRV9DTURfQ19EU1RfR1JDIHwgRE1BRV9DTURfQ19FTkFCTEUgfAotCQkgIERNQUVfQ01EX1NSQ19SRVNFVCB8IERNQUVfQ01EX0RTVF9SRVNFVCB8Ci0jaWZkZWYgX19CSUdfRU5ESUFOCi0JCSAgRE1BRV9DTURfRU5ESUFOSVRZX0JfRFdfU1dBUCB8Ci0jZWxzZQotCQkgIERNQUVfQ01EX0VORElBTklUWV9EV19TV0FQIHwKLSNlbmRpZgotCQkgIChwb3J0ID8gRE1BRV9DTURfUE9SVF8xIDogRE1BRV9DTURfUE9SVF8wKSB8Ci0JCSAgKHZuIDw8IERNQUVfQ01EX0UxSFZOX1NISUZUKSk7Ci0KLQlpZiAoYnAtPnBvcnQucG9ydF9zdHgpIHsKLQotCQlkbWFlID0gYm54Mnhfc3AoYnAsIGRtYWVbYnAtPmV4ZWN1dGVyX2lkeCsrXSk7Ci0JCWRtYWUtPm9wY29kZSA9IG9wY29kZTsKLQkJZG1hZS0+c3JjX2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgcG9ydF9zdGF0cykpOwotCQlkbWFlLT5zcmNfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBwb3J0X3N0YXRzKSk7Ci0JCWRtYWUtPmRzdF9hZGRyX2xvID0gYnAtPnBvcnQucG9ydF9zdHggPj4gMjsKLQkJZG1hZS0+ZHN0X2FkZHJfaGkgPSAwOwotCQlkbWFlLT5sZW4gPSBzaXplb2Yoc3RydWN0IGhvc3RfcG9ydF9zdGF0cykgPj4gMjsKLQkJZG1hZS0+Y29tcF9hZGRyX2xvID0gZG1hZV9yZWdfZ29fY1tsb2FkZXJfaWR4XSA+PiAyOwotCQlkbWFlLT5jb21wX2FkZHJfaGkgPSAwOwotCQlkbWFlLT5jb21wX3ZhbCA9IDE7Ci0JfQotCi0JaWYgKGJwLT5mdW5jX3N0eCkgewotCi0JCWRtYWUgPSBibngyeF9zcChicCwgZG1hZVticC0+ZXhlY3V0ZXJfaWR4KytdKTsKLQkJZG1hZS0+b3Bjb2RlID0gb3Bjb2RlOwotCQlkbWFlLT5zcmNfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBmdW5jX3N0YXRzKSk7Ci0JCWRtYWUtPnNyY19hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIGZ1bmNfc3RhdHMpKTsKLQkJZG1hZS0+ZHN0X2FkZHJfbG8gPSBicC0+ZnVuY19zdHggPj4gMjsKLQkJZG1hZS0+ZHN0X2FkZHJfaGkgPSAwOwotCQlkbWFlLT5sZW4gPSBzaXplb2Yoc3RydWN0IGhvc3RfZnVuY19zdGF0cykgPj4gMjsKLQkJZG1hZS0+Y29tcF9hZGRyX2xvID0gZG1hZV9yZWdfZ29fY1tsb2FkZXJfaWR4XSA+PiAyOwotCQlkbWFlLT5jb21wX2FkZHJfaGkgPSAwOwotCQlkbWFlLT5jb21wX3ZhbCA9IDE7Ci0JfQotCi0JLyogTUFDICovCi0Jb3Bjb2RlID0gKERNQUVfQ01EX1NSQ19HUkMgfCBETUFFX0NNRF9EU1RfUENJIHwKLQkJICBETUFFX0NNRF9DX0RTVF9HUkMgfCBETUFFX0NNRF9DX0VOQUJMRSB8Ci0JCSAgRE1BRV9DTURfU1JDX1JFU0VUIHwgRE1BRV9DTURfRFNUX1JFU0VUIHwKLSNpZmRlZiBfX0JJR19FTkRJQU4KLQkJICBETUFFX0NNRF9FTkRJQU5JVFlfQl9EV19TV0FQIHwKLSNlbHNlCi0JCSAgRE1BRV9DTURfRU5ESUFOSVRZX0RXX1NXQVAgfAotI2VuZGlmCi0JCSAgKHBvcnQgPyBETUFFX0NNRF9QT1JUXzEgOiBETUFFX0NNRF9QT1JUXzApIHwKLQkJICAodm4gPDwgRE1BRV9DTURfRTFIVk5fU0hJRlQpKTsKLQotCWlmIChicC0+bGlua192YXJzLm1hY190eXBlID09IE1BQ19UWVBFX0JNQUMpIHsKLQotCQltYWNfYWRkciA9IChwb3J0ID8gTklHX1JFR19JTkdSRVNTX0JNQUMxX01FTSA6Ci0JCQkJICAgTklHX1JFR19JTkdSRVNTX0JNQUMwX01FTSk7Ci0KLQkJLyogQklHTUFDX1JFR0lTVEVSX1RYX1NUQVRfR1RQS1QgLi4KLQkJICAgQklHTUFDX1JFR0lTVEVSX1RYX1NUQVRfR1RCWVQgKi8KLQkJZG1hZSA9IGJueDJ4X3NwKGJwLCBkbWFlW2JwLT5leGVjdXRlcl9pZHgrK10pOwotCQlkbWFlLT5vcGNvZGUgPSBvcGNvZGU7Ci0JCWRtYWUtPnNyY19hZGRyX2xvID0gKG1hY19hZGRyICsKLQkJCQkgICAgIEJJR01BQ19SRUdJU1RFUl9UWF9TVEFUX0dUUEtUKSA+PiAyOwotCQlkbWFlLT5zcmNfYWRkcl9oaSA9IDA7Ci0JCWRtYWUtPmRzdF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19zdGF0cykpOwotCQlkbWFlLT5kc3RfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBtYWNfc3RhdHMpKTsKLQkJZG1hZS0+bGVuID0gKDggKyBCSUdNQUNfUkVHSVNURVJfVFhfU1RBVF9HVEJZVCAtCi0JCQkgICAgIEJJR01BQ19SRUdJU1RFUl9UWF9TVEFUX0dUUEtUKSA+PiAyOwotCQlkbWFlLT5jb21wX2FkZHJfbG8gPSBkbWFlX3JlZ19nb19jW2xvYWRlcl9pZHhdID4+IDI7Ci0JCWRtYWUtPmNvbXBfYWRkcl9oaSA9IDA7Ci0JCWRtYWUtPmNvbXBfdmFsID0gMTsKLQotCQkvKiBCSUdNQUNfUkVHSVNURVJfUlhfU1RBVF9HUjY0IC4uCi0JCSAgIEJJR01BQ19SRUdJU1RFUl9SWF9TVEFUX0dSSVBKICovCi0JCWRtYWUgPSBibngyeF9zcChicCwgZG1hZVticC0+ZXhlY3V0ZXJfaWR4KytdKTsKLQkJZG1hZS0+b3Bjb2RlID0gb3Bjb2RlOwotCQlkbWFlLT5zcmNfYWRkcl9sbyA9IChtYWNfYWRkciArCi0JCQkJICAgICBCSUdNQUNfUkVHSVNURVJfUlhfU1RBVF9HUjY0KSA+PiAyOwotCQlkbWFlLT5zcmNfYWRkcl9oaSA9IDA7Ci0JCWRtYWUtPmRzdF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19zdGF0cykgKwotCQkJCW9mZnNldG9mKHN0cnVjdCBibWFjX3N0YXRzLCByeF9zdGF0X2dyNjRfbG8pKTsKLQkJZG1hZS0+ZHN0X2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgbWFjX3N0YXRzKSArCi0JCQkJb2Zmc2V0b2Yoc3RydWN0IGJtYWNfc3RhdHMsIHJ4X3N0YXRfZ3I2NF9sbykpOwotCQlkbWFlLT5sZW4gPSAoOCArIEJJR01BQ19SRUdJU1RFUl9SWF9TVEFUX0dSSVBKIC0KLQkJCSAgICAgQklHTUFDX1JFR0lTVEVSX1JYX1NUQVRfR1I2NCkgPj4gMjsKLQkJZG1hZS0+Y29tcF9hZGRyX2xvID0gZG1hZV9yZWdfZ29fY1tsb2FkZXJfaWR4XSA+PiAyOwotCQlkbWFlLT5jb21wX2FkZHJfaGkgPSAwOwotCQlkbWFlLT5jb21wX3ZhbCA9IDE7Ci0KLQl9IGVsc2UgaWYgKGJwLT5saW5rX3ZhcnMubWFjX3R5cGUgPT0gTUFDX1RZUEVfRU1BQykgewotCi0JCW1hY19hZGRyID0gKHBvcnQgPyBHUkNCQVNFX0VNQUMxIDogR1JDQkFTRV9FTUFDMCk7Ci0KLQkJLyogRU1BQ19SRUdfRU1BQ19SWF9TVEFUX0FDIChFTUFDX1JFR19FTUFDX1JYX1NUQVRfQUNfQ09VTlQpKi8KLQkJZG1hZSA9IGJueDJ4X3NwKGJwLCBkbWFlW2JwLT5leGVjdXRlcl9pZHgrK10pOwotCQlkbWFlLT5vcGNvZGUgPSBvcGNvZGU7Ci0JCWRtYWUtPnNyY19hZGRyX2xvID0gKG1hY19hZGRyICsKLQkJCQkgICAgIEVNQUNfUkVHX0VNQUNfUlhfU1RBVF9BQykgPj4gMjsKLQkJZG1hZS0+c3JjX2FkZHJfaGkgPSAwOwotCQlkbWFlLT5kc3RfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBtYWNfc3RhdHMpKTsKLQkJZG1hZS0+ZHN0X2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgbWFjX3N0YXRzKSk7Ci0JCWRtYWUtPmxlbiA9IEVNQUNfUkVHX0VNQUNfUlhfU1RBVF9BQ19DT1VOVDsKLQkJZG1hZS0+Y29tcF9hZGRyX2xvID0gZG1hZV9yZWdfZ29fY1tsb2FkZXJfaWR4XSA+PiAyOwotCQlkbWFlLT5jb21wX2FkZHJfaGkgPSAwOwotCQlkbWFlLT5jb21wX3ZhbCA9IDE7Ci0KLQkJLyogRU1BQ19SRUdfRU1BQ19SWF9TVEFUX0FDXzI4ICovCi0JCWRtYWUgPSBibngyeF9zcChicCwgZG1hZVticC0+ZXhlY3V0ZXJfaWR4KytdKTsKLQkJZG1hZS0+b3Bjb2RlID0gb3Bjb2RlOwotCQlkbWFlLT5zcmNfYWRkcl9sbyA9IChtYWNfYWRkciArCi0JCQkJICAgICBFTUFDX1JFR19FTUFDX1JYX1NUQVRfQUNfMjgpID4+IDI7Ci0JCWRtYWUtPnNyY19hZGRyX2hpID0gMDsKLQkJZG1hZS0+ZHN0X2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgbWFjX3N0YXRzKSArCi0JCSAgICAgb2Zmc2V0b2Yoc3RydWN0IGVtYWNfc3RhdHMsIHJ4X3N0YXRfZmFsc2VjYXJyaWVyZXJyb3JzKSk7Ci0JCWRtYWUtPmRzdF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19zdGF0cykgKwotCQkgICAgIG9mZnNldG9mKHN0cnVjdCBlbWFjX3N0YXRzLCByeF9zdGF0X2ZhbHNlY2FycmllcmVycm9ycykpOwotCQlkbWFlLT5sZW4gPSAxOwotCQlkbWFlLT5jb21wX2FkZHJfbG8gPSBkbWFlX3JlZ19nb19jW2xvYWRlcl9pZHhdID4+IDI7Ci0JCWRtYWUtPmNvbXBfYWRkcl9oaSA9IDA7Ci0JCWRtYWUtPmNvbXBfdmFsID0gMTsKLQotCQkvKiBFTUFDX1JFR19FTUFDX1RYX1NUQVRfQUMgKEVNQUNfUkVHX0VNQUNfVFhfU1RBVF9BQ19DT1VOVCkqLwotCQlkbWFlID0gYm54Mnhfc3AoYnAsIGRtYWVbYnAtPmV4ZWN1dGVyX2lkeCsrXSk7Ci0JCWRtYWUtPm9wY29kZSA9IG9wY29kZTsKLQkJZG1hZS0+c3JjX2FkZHJfbG8gPSAobWFjX2FkZHIgKwotCQkJCSAgICAgRU1BQ19SRUdfRU1BQ19UWF9TVEFUX0FDKSA+PiAyOwotCQlkbWFlLT5zcmNfYWRkcl9oaSA9IDA7Ci0JCWRtYWUtPmRzdF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19zdGF0cykgKwotCQkJb2Zmc2V0b2Yoc3RydWN0IGVtYWNfc3RhdHMsIHR4X3N0YXRfaWZoY291dG9jdGV0cykpOwotCQlkbWFlLT5kc3RfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBtYWNfc3RhdHMpICsKLQkJCW9mZnNldG9mKHN0cnVjdCBlbWFjX3N0YXRzLCB0eF9zdGF0X2lmaGNvdXRvY3RldHMpKTsKLQkJZG1hZS0+bGVuID0gRU1BQ19SRUdfRU1BQ19UWF9TVEFUX0FDX0NPVU5UOwotCQlkbWFlLT5jb21wX2FkZHJfbG8gPSBkbWFlX3JlZ19nb19jW2xvYWRlcl9pZHhdID4+IDI7Ci0JCWRtYWUtPmNvbXBfYWRkcl9oaSA9IDA7Ci0JCWRtYWUtPmNvbXBfdmFsID0gMTsKLQl9Ci0KLQkvKiBOSUcgKi8KLQlkbWFlID0gYm54Mnhfc3AoYnAsIGRtYWVbYnAtPmV4ZWN1dGVyX2lkeCsrXSk7Ci0JZG1hZS0+b3Bjb2RlID0gb3Bjb2RlOwotCWRtYWUtPnNyY19hZGRyX2xvID0gKHBvcnQgPyBOSUdfUkVHX1NUQVQxX0JSQl9ESVNDQVJEIDoKLQkJCQkgICAgTklHX1JFR19TVEFUMF9CUkJfRElTQ0FSRCkgPj4gMjsKLQlkbWFlLT5zcmNfYWRkcl9oaSA9IDA7Ci0JZG1hZS0+ZHN0X2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgbmlnX3N0YXRzKSk7Ci0JZG1hZS0+ZHN0X2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgbmlnX3N0YXRzKSk7Ci0JZG1hZS0+bGVuID0gKHNpemVvZihzdHJ1Y3QgbmlnX3N0YXRzKSAtIDQqc2l6ZW9mKHUzMikpID4+IDI7Ci0JZG1hZS0+Y29tcF9hZGRyX2xvID0gZG1hZV9yZWdfZ29fY1tsb2FkZXJfaWR4XSA+PiAyOwotCWRtYWUtPmNvbXBfYWRkcl9oaSA9IDA7Ci0JZG1hZS0+Y29tcF92YWwgPSAxOwotCi0JZG1hZSA9IGJueDJ4X3NwKGJwLCBkbWFlW2JwLT5leGVjdXRlcl9pZHgrK10pOwotCWRtYWUtPm9wY29kZSA9IG9wY29kZTsKLQlkbWFlLT5zcmNfYWRkcl9sbyA9IChwb3J0ID8gTklHX1JFR19TVEFUMV9FR1JFU1NfTUFDX1BLVDAgOgotCQkJCSAgICBOSUdfUkVHX1NUQVQwX0VHUkVTU19NQUNfUEtUMCkgPj4gMjsKLQlkbWFlLT5zcmNfYWRkcl9oaSA9IDA7Ci0JZG1hZS0+ZHN0X2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgbmlnX3N0YXRzKSArCi0JCQlvZmZzZXRvZihzdHJ1Y3QgbmlnX3N0YXRzLCBlZ3Jlc3NfbWFjX3BrdDBfbG8pKTsKLQlkbWFlLT5kc3RfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBuaWdfc3RhdHMpICsKLQkJCW9mZnNldG9mKHN0cnVjdCBuaWdfc3RhdHMsIGVncmVzc19tYWNfcGt0MF9sbykpOwotCWRtYWUtPmxlbiA9ICgyKnNpemVvZih1MzIpKSA+PiAyOwotCWRtYWUtPmNvbXBfYWRkcl9sbyA9IGRtYWVfcmVnX2dvX2NbbG9hZGVyX2lkeF0gPj4gMjsKLQlkbWFlLT5jb21wX2FkZHJfaGkgPSAwOwotCWRtYWUtPmNvbXBfdmFsID0gMTsKLQotCWRtYWUgPSBibngyeF9zcChicCwgZG1hZVticC0+ZXhlY3V0ZXJfaWR4KytdKTsKLQlkbWFlLT5vcGNvZGUgPSAoRE1BRV9DTURfU1JDX0dSQyB8IERNQUVfQ01EX0RTVF9QQ0kgfAotCQkJRE1BRV9DTURfQ19EU1RfUENJIHwgRE1BRV9DTURfQ19FTkFCTEUgfAotCQkJRE1BRV9DTURfU1JDX1JFU0VUIHwgRE1BRV9DTURfRFNUX1JFU0VUIHwKLSNpZmRlZiBfX0JJR19FTkRJQU4KLQkJCURNQUVfQ01EX0VORElBTklUWV9CX0RXX1NXQVAgfAotI2Vsc2UKLQkJCURNQUVfQ01EX0VORElBTklUWV9EV19TV0FQIHwKLSNlbmRpZgotCQkJKHBvcnQgPyBETUFFX0NNRF9QT1JUXzEgOiBETUFFX0NNRF9QT1JUXzApIHwKLQkJCSh2biA8PCBETUFFX0NNRF9FMUhWTl9TSElGVCkpOwotCWRtYWUtPnNyY19hZGRyX2xvID0gKHBvcnQgPyBOSUdfUkVHX1NUQVQxX0VHUkVTU19NQUNfUEtUMSA6Ci0JCQkJICAgIE5JR19SRUdfU1RBVDBfRUdSRVNTX01BQ19QS1QxKSA+PiAyOwotCWRtYWUtPnNyY19hZGRyX2hpID0gMDsKLQlkbWFlLT5kc3RfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBuaWdfc3RhdHMpICsKLQkJCW9mZnNldG9mKHN0cnVjdCBuaWdfc3RhdHMsIGVncmVzc19tYWNfcGt0MV9sbykpOwotCWRtYWUtPmRzdF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIG5pZ19zdGF0cykgKwotCQkJb2Zmc2V0b2Yoc3RydWN0IG5pZ19zdGF0cywgZWdyZXNzX21hY19wa3QxX2xvKSk7Ci0JZG1hZS0+bGVuID0gKDIqc2l6ZW9mKHUzMikpID4+IDI7Ci0JZG1hZS0+Y29tcF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIHN0YXRzX2NvbXApKTsKLQlkbWFlLT5jb21wX2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgc3RhdHNfY29tcCkpOwotCWRtYWUtPmNvbXBfdmFsID0gRE1BRV9DT01QX1ZBTDsKLQotCSpzdGF0c19jb21wID0gMDsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfZnVuY19zdGF0c19pbml0KHN0cnVjdCBibngyeCAqYnApCi17Ci0Jc3RydWN0IGRtYWVfY29tbWFuZCAqZG1hZSA9ICZicC0+c3RhdHNfZG1hZTsKLQl1MzIgKnN0YXRzX2NvbXAgPSBibngyeF9zcChicCwgc3RhdHNfY29tcCk7Ci0KLQkvKiBzYW5pdHkgKi8KLQlpZiAoIWJwLT5mdW5jX3N0eCkgewotCQlCTlgyWF9FUlIoIkJVRyFcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JYnAtPmV4ZWN1dGVyX2lkeCA9IDA7Ci0JbWVtc2V0KGRtYWUsIDAsIHNpemVvZihzdHJ1Y3QgZG1hZV9jb21tYW5kKSk7Ci0KLQlkbWFlLT5vcGNvZGUgPSAoRE1BRV9DTURfU1JDX1BDSSB8IERNQUVfQ01EX0RTVF9HUkMgfAotCQkJRE1BRV9DTURfQ19EU1RfUENJIHwgRE1BRV9DTURfQ19FTkFCTEUgfAotCQkJRE1BRV9DTURfU1JDX1JFU0VUIHwgRE1BRV9DTURfRFNUX1JFU0VUIHwKLSNpZmRlZiBfX0JJR19FTkRJQU4KLQkJCURNQUVfQ01EX0VORElBTklUWV9CX0RXX1NXQVAgfAotI2Vsc2UKLQkJCURNQUVfQ01EX0VORElBTklUWV9EV19TV0FQIHwKLSNlbmRpZgotCQkJKEJQX1BPUlQoYnApID8gRE1BRV9DTURfUE9SVF8xIDogRE1BRV9DTURfUE9SVF8wKSB8Ci0JCQkoQlBfRTFIVk4oYnApIDw8IERNQUVfQ01EX0UxSFZOX1NISUZUKSk7Ci0JZG1hZS0+c3JjX2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgZnVuY19zdGF0cykpOwotCWRtYWUtPnNyY19hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIGZ1bmNfc3RhdHMpKTsKLQlkbWFlLT5kc3RfYWRkcl9sbyA9IGJwLT5mdW5jX3N0eCA+PiAyOwotCWRtYWUtPmRzdF9hZGRyX2hpID0gMDsKLQlkbWFlLT5sZW4gPSBzaXplb2Yoc3RydWN0IGhvc3RfZnVuY19zdGF0cykgPj4gMjsKLQlkbWFlLT5jb21wX2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgc3RhdHNfY29tcCkpOwotCWRtYWUtPmNvbXBfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBzdGF0c19jb21wKSk7Ci0JZG1hZS0+Y29tcF92YWwgPSBETUFFX0NPTVBfVkFMOwotCi0JKnN0YXRzX2NvbXAgPSAwOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9zdGF0c19zdGFydChzdHJ1Y3QgYm54MnggKmJwKQotewotCWlmIChicC0+cG9ydC5wbWYpCi0JCWJueDJ4X3BvcnRfc3RhdHNfaW5pdChicCk7Ci0KLQllbHNlIGlmIChicC0+ZnVuY19zdHgpCi0JCWJueDJ4X2Z1bmNfc3RhdHNfaW5pdChicCk7Ci0KLQlibngyeF9od19zdGF0c19wb3N0KGJwKTsKLQlibngyeF9zdG9ybV9zdGF0c19wb3N0KGJwKTsKLX0KLQotc3RhdGljIHZvaWQgYm54Mnhfc3RhdHNfcG1mX3N0YXJ0KHN0cnVjdCBibngyeCAqYnApCi17Ci0JYm54Mnhfc3RhdHNfY29tcChicCk7Ci0JYm54Mnhfc3RhdHNfcG1mX3VwZGF0ZShicCk7Ci0JYm54Mnhfc3RhdHNfc3RhcnQoYnApOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9zdGF0c19yZXN0YXJ0KHN0cnVjdCBibngyeCAqYnApCi17Ci0JYm54Mnhfc3RhdHNfY29tcChicCk7Ci0JYm54Mnhfc3RhdHNfc3RhcnQoYnApOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9ibWFjX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQotewotCXN0cnVjdCBibWFjX3N0YXRzICpuZXcgPSBibngyeF9zcChicCwgbWFjX3N0YXRzLmJtYWNfc3RhdHMpOwotCXN0cnVjdCBob3N0X3BvcnRfc3RhdHMgKnBzdGF0cyA9IGJueDJ4X3NwKGJwLCBwb3J0X3N0YXRzKTsKLQlzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzICplc3RhdHMgPSAmYnAtPmV0aF9zdGF0czsKLQlzdHJ1Y3QgewotCQl1MzIgbG87Ci0JCXUzMiBoaTsKLQl9IGRpZmY7Ci0KLQlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3JlcmIsIHJ4X3N0YXRfaWZoY2luYmFkb2N0ZXRzKTsKLQlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3JmY3MsIHJ4X3N0YXRfZG90M3N0YXRzZmNzZXJyb3JzKTsKLQlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3J1bmQsIHJ4X3N0YXRfZXRoZXJzdGF0c3VuZGVyc2l6ZXBrdHMpOwotCVVQREFURV9TVEFUNjQocnhfc3RhdF9ncm92ciwgcnhfc3RhdF9kb3Qzc3RhdHNmcmFtZXN0b29sb25nKTsKLQlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3JmcmcsIHJ4X3N0YXRfZXRoZXJzdGF0c2ZyYWdtZW50cyk7Ci0JVVBEQVRFX1NUQVQ2NChyeF9zdGF0X2dyamJyLCByeF9zdGF0X2V0aGVyc3RhdHNqYWJiZXJzKTsKLQlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3J4Y2YsIHJ4X3N0YXRfbWFjY29udHJvbGZyYW1lc3JlY2VpdmVkKTsKLQlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3J4cGYsIHJ4X3N0YXRfeG9mZnN0YXRlZW50ZXJlZCk7Ci0JVVBEQVRFX1NUQVQ2NChyeF9zdGF0X2dyeHBmLCByeF9zdGF0X2JtYWNfeHBmKTsKLQlVUERBVEVfU1RBVDY0KHR4X3N0YXRfZ3R4cGYsIHR4X3N0YXRfb3V0eG9mZnNlbnQpOwotCVVQREFURV9TVEFUNjQodHhfc3RhdF9ndHhwZiwgdHhfc3RhdF9mbG93Y29udHJvbGRvbmUpOwotCVVQREFURV9TVEFUNjQodHhfc3RhdF9ndDY0LCB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNjRvY3RldHMpOwotCVVQREFURV9TVEFUNjQodHhfc3RhdF9ndDEyNywKLQkJCQl0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNjVvY3RldHN0bzEyN29jdGV0cyk7Ci0JVVBEQVRFX1NUQVQ2NCh0eF9zdGF0X2d0MjU1LAotCQkJCXR4X3N0YXRfZXRoZXJzdGF0c3BrdHMxMjhvY3RldHN0bzI1NW9jdGV0cyk7Ci0JVVBEQVRFX1NUQVQ2NCh0eF9zdGF0X2d0NTExLAotCQkJCXR4X3N0YXRfZXRoZXJzdGF0c3BrdHMyNTZvY3RldHN0bzUxMW9jdGV0cyk7Ci0JVVBEQVRFX1NUQVQ2NCh0eF9zdGF0X2d0MTAyMywKLQkJCQl0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNTEyb2N0ZXRzdG8xMDIzb2N0ZXRzKTsKLQlVUERBVEVfU1RBVDY0KHR4X3N0YXRfZ3QxNTE4LAotCQkJCXR4X3N0YXRfZXRoZXJzdGF0c3BrdHMxMDI0b2N0ZXRzdG8xNTIyb2N0ZXRzKTsKLQlVUERBVEVfU1RBVDY0KHR4X3N0YXRfZ3QyMDQ3LCB0eF9zdGF0X2JtYWNfMjA0Nyk7Ci0JVVBEQVRFX1NUQVQ2NCh0eF9zdGF0X2d0NDA5NSwgdHhfc3RhdF9ibWFjXzQwOTUpOwotCVVQREFURV9TVEFUNjQodHhfc3RhdF9ndDkyMTYsIHR4X3N0YXRfYm1hY185MjE2KTsKLQlVUERBVEVfU1RBVDY0KHR4X3N0YXRfZ3QxNjM4MywgdHhfc3RhdF9ibWFjXzE2MzgzKTsKLQlVUERBVEVfU1RBVDY0KHR4X3N0YXRfZ3RlcnIsCi0JCQkJdHhfc3RhdF9kb3Qzc3RhdHNpbnRlcm5hbG1hY3RyYW5zbWl0ZXJyb3JzKTsKLQlVUERBVEVfU1RBVDY0KHR4X3N0YXRfZ3R1ZmwsIHR4X3N0YXRfYm1hY191ZmwpOwotCi0JZXN0YXRzLT5wYXVzZV9mcmFtZXNfcmVjZWl2ZWRfaGkgPQotCQkJCXBzdGF0cy0+bWFjX3N0eFsxXS5yeF9zdGF0X2JtYWNfeHBmX2hpOwotCWVzdGF0cy0+cGF1c2VfZnJhbWVzX3JlY2VpdmVkX2xvID0KLQkJCQlwc3RhdHMtPm1hY19zdHhbMV0ucnhfc3RhdF9ibWFjX3hwZl9sbzsKLQotCWVzdGF0cy0+cGF1c2VfZnJhbWVzX3NlbnRfaGkgPQotCQkJCXBzdGF0cy0+bWFjX3N0eFsxXS50eF9zdGF0X291dHhvZmZzZW50X2hpOwotCWVzdGF0cy0+cGF1c2VfZnJhbWVzX3NlbnRfbG8gPQotCQkJCXBzdGF0cy0+bWFjX3N0eFsxXS50eF9zdGF0X291dHhvZmZzZW50X2xvOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9lbWFjX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQotewotCXN0cnVjdCBlbWFjX3N0YXRzICpuZXcgPSBibngyeF9zcChicCwgbWFjX3N0YXRzLmVtYWNfc3RhdHMpOwotCXN0cnVjdCBob3N0X3BvcnRfc3RhdHMgKnBzdGF0cyA9IGJueDJ4X3NwKGJwLCBwb3J0X3N0YXRzKTsKLQlzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzICplc3RhdHMgPSAmYnAtPmV0aF9zdGF0czsKLQotCVVQREFURV9FWFRFTkRfU1RBVChyeF9zdGF0X2lmaGNpbmJhZG9jdGV0cyk7Ci0JVVBEQVRFX0VYVEVORF9TVEFUKHR4X3N0YXRfaWZoY291dGJhZG9jdGV0cyk7Ci0JVVBEQVRFX0VYVEVORF9TVEFUKHJ4X3N0YXRfZG90M3N0YXRzZmNzZXJyb3JzKTsKLQlVUERBVEVfRVhURU5EX1NUQVQocnhfc3RhdF9kb3Qzc3RhdHNhbGlnbm1lbnRlcnJvcnMpOwotCVVQREFURV9FWFRFTkRfU1RBVChyeF9zdGF0X2RvdDNzdGF0c2NhcnJpZXJzZW5zZWVycm9ycyk7Ci0JVVBEQVRFX0VYVEVORF9TVEFUKHJ4X3N0YXRfZmFsc2VjYXJyaWVyZXJyb3JzKTsKLQlVUERBVEVfRVhURU5EX1NUQVQocnhfc3RhdF9ldGhlcnN0YXRzdW5kZXJzaXplcGt0cyk7Ci0JVVBEQVRFX0VYVEVORF9TVEFUKHJ4X3N0YXRfZG90M3N0YXRzZnJhbWVzdG9vbG9uZyk7Ci0JVVBEQVRFX0VYVEVORF9TVEFUKHJ4X3N0YXRfZXRoZXJzdGF0c2ZyYWdtZW50cyk7Ci0JVVBEQVRFX0VYVEVORF9TVEFUKHJ4X3N0YXRfZXRoZXJzdGF0c2phYmJlcnMpOwotCVVQREFURV9FWFRFTkRfU1RBVChyeF9zdGF0X21hY2NvbnRyb2xmcmFtZXNyZWNlaXZlZCk7Ci0JVVBEQVRFX0VYVEVORF9TVEFUKHJ4X3N0YXRfeG9mZnN0YXRlZW50ZXJlZCk7Ci0JVVBEQVRFX0VYVEVORF9TVEFUKHJ4X3N0YXRfeG9ucGF1c2VmcmFtZXNyZWNlaXZlZCk7Ci0JVVBEQVRFX0VYVEVORF9TVEFUKHJ4X3N0YXRfeG9mZnBhdXNlZnJhbWVzcmVjZWl2ZWQpOwotCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X291dHhvbnNlbnQpOwotCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X291dHhvZmZzZW50KTsKLQlVUERBVEVfRVhURU5EX1NUQVQodHhfc3RhdF9mbG93Y29udHJvbGRvbmUpOwotCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2V0aGVyc3RhdHNjb2xsaXNpb25zKTsKLQlVUERBVEVfRVhURU5EX1NUQVQodHhfc3RhdF9kb3Qzc3RhdHNzaW5nbGVjb2xsaXNpb25mcmFtZXMpOwotCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2RvdDNzdGF0c211bHRpcGxlY29sbGlzaW9uZnJhbWVzKTsKLQlVUERBVEVfRVhURU5EX1NUQVQodHhfc3RhdF9kb3Qzc3RhdHNkZWZlcnJlZHRyYW5zbWlzc2lvbnMpOwotCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2RvdDNzdGF0c2V4Y2Vzc2l2ZWNvbGxpc2lvbnMpOwotCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2RvdDNzdGF0c2xhdGVjb2xsaXNpb25zKTsKLQlVUERBVEVfRVhURU5EX1NUQVQodHhfc3RhdF9ldGhlcnN0YXRzcGt0czY0b2N0ZXRzKTsKLQlVUERBVEVfRVhURU5EX1NUQVQodHhfc3RhdF9ldGhlcnN0YXRzcGt0czY1b2N0ZXRzdG8xMjdvY3RldHMpOwotCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2V0aGVyc3RhdHNwa3RzMTI4b2N0ZXRzdG8yNTVvY3RldHMpOwotCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2V0aGVyc3RhdHNwa3RzMjU2b2N0ZXRzdG81MTFvY3RldHMpOwotCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNTEyb2N0ZXRzdG8xMDIzb2N0ZXRzKTsKLQlVUERBVEVfRVhURU5EX1NUQVQodHhfc3RhdF9ldGhlcnN0YXRzcGt0czEwMjRvY3RldHN0bzE1MjJvY3RldHMpOwotCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2V0aGVyc3RhdHNwa3Rzb3ZlcjE1MjJvY3RldHMpOwotCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2RvdDNzdGF0c2ludGVybmFsbWFjdHJhbnNtaXRlcnJvcnMpOwotCi0JZXN0YXRzLT5wYXVzZV9mcmFtZXNfcmVjZWl2ZWRfaGkgPQotCQkJcHN0YXRzLT5tYWNfc3R4WzFdLnJ4X3N0YXRfeG9ucGF1c2VmcmFtZXNyZWNlaXZlZF9oaTsKLQllc3RhdHMtPnBhdXNlX2ZyYW1lc19yZWNlaXZlZF9sbyA9Ci0JCQlwc3RhdHMtPm1hY19zdHhbMV0ucnhfc3RhdF94b25wYXVzZWZyYW1lc3JlY2VpdmVkX2xvOwotCUFERF82NChlc3RhdHMtPnBhdXNlX2ZyYW1lc19yZWNlaXZlZF9oaSwKLQkgICAgICAgcHN0YXRzLT5tYWNfc3R4WzFdLnJ4X3N0YXRfeG9mZnBhdXNlZnJhbWVzcmVjZWl2ZWRfaGksCi0JICAgICAgIGVzdGF0cy0+cGF1c2VfZnJhbWVzX3JlY2VpdmVkX2xvLAotCSAgICAgICBwc3RhdHMtPm1hY19zdHhbMV0ucnhfc3RhdF94b2ZmcGF1c2VmcmFtZXNyZWNlaXZlZF9sbyk7Ci0KLQllc3RhdHMtPnBhdXNlX2ZyYW1lc19zZW50X2hpID0KLQkJCXBzdGF0cy0+bWFjX3N0eFsxXS50eF9zdGF0X291dHhvbnNlbnRfaGk7Ci0JZXN0YXRzLT5wYXVzZV9mcmFtZXNfc2VudF9sbyA9Ci0JCQlwc3RhdHMtPm1hY19zdHhbMV0udHhfc3RhdF9vdXR4b25zZW50X2xvOwotCUFERF82NChlc3RhdHMtPnBhdXNlX2ZyYW1lc19zZW50X2hpLAotCSAgICAgICBwc3RhdHMtPm1hY19zdHhbMV0udHhfc3RhdF9vdXR4b2Zmc2VudF9oaSwKLQkgICAgICAgZXN0YXRzLT5wYXVzZV9mcmFtZXNfc2VudF9sbywKLQkgICAgICAgcHN0YXRzLT5tYWNfc3R4WzFdLnR4X3N0YXRfb3V0eG9mZnNlbnRfbG8pOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X2h3X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQotewotCXN0cnVjdCBuaWdfc3RhdHMgKm5ldyA9IGJueDJ4X3NwKGJwLCBuaWdfc3RhdHMpOwotCXN0cnVjdCBuaWdfc3RhdHMgKm9sZCA9ICYoYnAtPnBvcnQub2xkX25pZ19zdGF0cyk7Ci0Jc3RydWN0IGhvc3RfcG9ydF9zdGF0cyAqcHN0YXRzID0gYm54Mnhfc3AoYnAsIHBvcnRfc3RhdHMpOwotCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9ICZicC0+ZXRoX3N0YXRzOwotCXN0cnVjdCB7Ci0JCXUzMiBsbzsKLQkJdTMyIGhpOwotCX0gZGlmZjsKLQotCWlmIChicC0+bGlua192YXJzLm1hY190eXBlID09IE1BQ19UWVBFX0JNQUMpCi0JCWJueDJ4X2JtYWNfc3RhdHNfdXBkYXRlKGJwKTsKLQotCWVsc2UgaWYgKGJwLT5saW5rX3ZhcnMubWFjX3R5cGUgPT0gTUFDX1RZUEVfRU1BQykKLQkJYm54MnhfZW1hY19zdGF0c191cGRhdGUoYnApOwotCi0JZWxzZSB7IC8qIHVucmVhY2hlZCAqLwotCQlCTlgyWF9FUlIoInN0YXRzIHVwZGF0ZWQgYnkgRE1BRSBidXQgbm8gTUFDIGFjdGl2ZVxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlBRERfRVhURU5EXzY0KHBzdGF0cy0+YnJiX2Ryb3BfaGksIHBzdGF0cy0+YnJiX2Ryb3BfbG8sCi0JCSAgICAgIG5ldy0+YnJiX2Rpc2NhcmQgLSBvbGQtPmJyYl9kaXNjYXJkKTsKLQlBRERfRVhURU5EXzY0KGVzdGF0cy0+YnJiX3RydW5jYXRlX2hpLCBlc3RhdHMtPmJyYl90cnVuY2F0ZV9sbywKLQkJICAgICAgbmV3LT5icmJfdHJ1bmNhdGUgLSBvbGQtPmJyYl90cnVuY2F0ZSk7Ci0KLQlVUERBVEVfU1RBVDY0X05JRyhlZ3Jlc3NfbWFjX3BrdDAsCi0JCQkJCWV0aGVyc3RhdHNwa3RzMTAyNG9jdGV0c3RvMTUyMm9jdGV0cyk7Ci0JVVBEQVRFX1NUQVQ2NF9OSUcoZWdyZXNzX21hY19wa3QxLCBldGhlcnN0YXRzcGt0c292ZXIxNTIyb2N0ZXRzKTsKLQotCW1lbWNweShvbGQsIG5ldywgc2l6ZW9mKHN0cnVjdCBuaWdfc3RhdHMpKTsKLQotCW1lbWNweSgmKGVzdGF0cy0+cnhfc3RhdF9pZmhjaW5iYWRvY3RldHNfaGkpLCAmKHBzdGF0cy0+bWFjX3N0eFsxXSksCi0JICAgICAgIHNpemVvZihzdHJ1Y3QgbWFjX3N0eCkpOwotCWVzdGF0cy0+YnJiX2Ryb3BfaGkgPSBwc3RhdHMtPmJyYl9kcm9wX2hpOwotCWVzdGF0cy0+YnJiX2Ryb3BfbG8gPSBwc3RhdHMtPmJyYl9kcm9wX2xvOwotCi0JcHN0YXRzLT5ob3N0X3BvcnRfc3RhdHNfc3RhcnQgPSArK3BzdGF0cy0+aG9zdF9wb3J0X3N0YXRzX2VuZDsKLQotCWlmICghQlBfTk9NQ1AoYnApKSB7Ci0JCXUzMiBuaWdfdGltZXJfbWF4ID0KLQkJCVNITUVNX1JEKGJwLCBwb3J0X21iW0JQX1BPUlQoYnApXS5zdGF0X25pZ190aW1lcik7Ci0JCWlmIChuaWdfdGltZXJfbWF4ICE9IGVzdGF0cy0+bmlnX3RpbWVyX21heCkgewotCQkJZXN0YXRzLT5uaWdfdGltZXJfbWF4ID0gbmlnX3RpbWVyX21heDsKLQkJCUJOWDJYX0VSUigiTklHIHRpbWVyIG1heCAoJXUpXG4iLAotCQkJCSAgZXN0YXRzLT5uaWdfdGltZXJfbWF4KTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X3N0b3JtX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQotewotCXN0cnVjdCBldGhfc3RhdHNfcXVlcnkgKnN0YXRzID0gYm54Mnhfc3AoYnAsIGZ3X3N0YXRzKTsKLQlzdHJ1Y3QgdHN0b3JtX3Blcl9wb3J0X3N0YXRzICp0cG9ydCA9Ci0JCQkJCSZzdGF0cy0+dHN0b3JtX2NvbW1vbi5wb3J0X3N0YXRpc3RpY3M7Ci0Jc3RydWN0IGhvc3RfZnVuY19zdGF0cyAqZnN0YXRzID0gYm54Mnhfc3AoYnAsIGZ1bmNfc3RhdHMpOwotCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9ICZicC0+ZXRoX3N0YXRzOwotCWludCBpOwotCi0JbWVtY3B5KCYoZnN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSksCi0JICAgICAgICYoYm54Mnhfc3AoYnAsIGZ1bmNfc3RhdHNfYmFzZSktPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpKSwKLQkgICAgICAgc2l6ZW9mKHN0cnVjdCBob3N0X2Z1bmNfc3RhdHMpIC0gMipzaXplb2YodTMyKSk7Ci0JZXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9oaSA9IDA7Ci0JZXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9sbyA9IDA7Ci0JZXN0YXRzLT5ldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19oaSA9IDA7Ci0JZXN0YXRzLT5ldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19sbyA9IDA7Ci0JZXN0YXRzLT5ub19idWZmX2Rpc2NhcmRfaGkgPSAwOwotCWVzdGF0cy0+bm9fYnVmZl9kaXNjYXJkX2xvID0gMDsKLQotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7Ci0JCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwotCQlpbnQgY2xfaWQgPSBmcC0+Y2xfaWQ7Ci0JCXN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqdGNsaWVudCA9Ci0JCQkJJnN0YXRzLT50c3Rvcm1fY29tbW9uLmNsaWVudF9zdGF0aXN0aWNzW2NsX2lkXTsKLQkJc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzICpvbGRfdGNsaWVudCA9ICZmcC0+b2xkX3RjbGllbnQ7Ci0JCXN0cnVjdCB1c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqdWNsaWVudCA9Ci0JCQkJJnN0YXRzLT51c3Rvcm1fY29tbW9uLmNsaWVudF9zdGF0aXN0aWNzW2NsX2lkXTsKLQkJc3RydWN0IHVzdG9ybV9wZXJfY2xpZW50X3N0YXRzICpvbGRfdWNsaWVudCA9ICZmcC0+b2xkX3VjbGllbnQ7Ci0JCXN0cnVjdCB4c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqeGNsaWVudCA9Ci0JCQkJJnN0YXRzLT54c3Rvcm1fY29tbW9uLmNsaWVudF9zdGF0aXN0aWNzW2NsX2lkXTsKLQkJc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzICpvbGRfeGNsaWVudCA9ICZmcC0+b2xkX3hjbGllbnQ7Ci0JCXN0cnVjdCBibngyeF9ldGhfcV9zdGF0cyAqcXN0YXRzID0gJmZwLT5ldGhfcV9zdGF0czsKLQkJdTMyIGRpZmY7Ci0KLQkJLyogYXJlIHN0b3JtIHN0YXRzIHZhbGlkPyAqLwotCQlpZiAoKHUxNikobGUxNl90b19jcHUoeGNsaWVudC0+c3RhdHNfY291bnRlcikgKyAxKSAhPQotCQkJCQkJCWJwLT5zdGF0c19jb3VudGVyKSB7Ci0JCQlEUChCTlgyWF9NU0dfU1RBVFMsICJbJWRdIHN0YXRzIG5vdCB1cGRhdGVkIGJ5IHhzdG9ybSIKLQkJCSAgICIgIHhzdG9ybSBjb3VudGVyICgweCV4KSAhPSBzdGF0c19jb3VudGVyICgweCV4KVxuIiwKLQkJCSAgIGksIHhjbGllbnQtPnN0YXRzX2NvdW50ZXIsIGJwLT5zdGF0c19jb3VudGVyKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQlpZiAoKHUxNikobGUxNl90b19jcHUodGNsaWVudC0+c3RhdHNfY291bnRlcikgKyAxKSAhPQotCQkJCQkJCWJwLT5zdGF0c19jb3VudGVyKSB7Ci0JCQlEUChCTlgyWF9NU0dfU1RBVFMsICJbJWRdIHN0YXRzIG5vdCB1cGRhdGVkIGJ5IHRzdG9ybSIKLQkJCSAgICIgIHRzdG9ybSBjb3VudGVyICgweCV4KSAhPSBzdGF0c19jb3VudGVyICgweCV4KVxuIiwKLQkJCSAgIGksIHRjbGllbnQtPnN0YXRzX2NvdW50ZXIsIGJwLT5zdGF0c19jb3VudGVyKTsKLQkJCXJldHVybiAtMjsKLQkJfQotCQlpZiAoKHUxNikobGUxNl90b19jcHUodWNsaWVudC0+c3RhdHNfY291bnRlcikgKyAxKSAhPQotCQkJCQkJCWJwLT5zdGF0c19jb3VudGVyKSB7Ci0JCQlEUChCTlgyWF9NU0dfU1RBVFMsICJbJWRdIHN0YXRzIG5vdCB1cGRhdGVkIGJ5IHVzdG9ybSIKLQkJCSAgICIgIHVzdG9ybSBjb3VudGVyICgweCV4KSAhPSBzdGF0c19jb3VudGVyICgweCV4KVxuIiwKLQkJCSAgIGksIHVjbGllbnQtPnN0YXRzX2NvdW50ZXIsIGJwLT5zdGF0c19jb3VudGVyKTsKLQkJCXJldHVybiAtNDsKLQkJfQotCi0JCXFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGkgPQotCQkJbGUzMl90b19jcHUodGNsaWVudC0+cmN2X2Jyb2FkY2FzdF9ieXRlcy5oaSk7Ci0JCXFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfbG8gPQotCQkJbGUzMl90b19jcHUodGNsaWVudC0+cmN2X2Jyb2FkY2FzdF9ieXRlcy5sbyk7Ci0KLQkJQUREXzY0KHFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGksCi0JCSAgICAgICBsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfbXVsdGljYXN0X2J5dGVzLmhpKSwKLQkJICAgICAgIHFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfbG8sCi0JCSAgICAgICBsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfbXVsdGljYXN0X2J5dGVzLmxvKSk7Ci0KLQkJQUREXzY0KHFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGksCi0JCSAgICAgICBsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfdW5pY2FzdF9ieXRlcy5oaSksCi0JCSAgICAgICBxc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvLAotCQkgICAgICAgbGUzMl90b19jcHUodGNsaWVudC0+cmN2X3VuaWNhc3RfYnl0ZXMubG8pKTsKLQotCQlTVUJfNjQocXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSwKLQkJICAgICAgIGxlMzJfdG9fY3B1KHVjbGllbnQtPmJjYXN0X25vX2J1ZmZfYnl0ZXMuaGkpLAotCQkgICAgICAgcXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9sbywKLQkJICAgICAgIGxlMzJfdG9fY3B1KHVjbGllbnQtPmJjYXN0X25vX2J1ZmZfYnl0ZXMubG8pKTsKLQotCQlTVUJfNjQocXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSwKLQkJICAgICAgIGxlMzJfdG9fY3B1KHVjbGllbnQtPm1jYXN0X25vX2J1ZmZfYnl0ZXMuaGkpLAotCQkgICAgICAgcXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9sbywKLQkJICAgICAgIGxlMzJfdG9fY3B1KHVjbGllbnQtPm1jYXN0X25vX2J1ZmZfYnl0ZXMubG8pKTsKLQotCQlTVUJfNjQocXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSwKLQkJICAgICAgIGxlMzJfdG9fY3B1KHVjbGllbnQtPnVjYXN0X25vX2J1ZmZfYnl0ZXMuaGkpLAotCQkgICAgICAgcXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9sbywKLQkJICAgICAgIGxlMzJfdG9fY3B1KHVjbGllbnQtPnVjYXN0X25vX2J1ZmZfYnl0ZXMubG8pKTsKLQotCQlxc3RhdHMtPnZhbGlkX2J5dGVzX3JlY2VpdmVkX2hpID0KLQkJCQkJcXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaTsKLQkJcXN0YXRzLT52YWxpZF9ieXRlc19yZWNlaXZlZF9sbyA9Ci0JCQkJCXFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfbG87Ci0KLQkJcXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9oaSA9Ci0JCQkJbGUzMl90b19jcHUodGNsaWVudC0+cmN2X2Vycm9yX2J5dGVzLmhpKTsKLQkJcXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9sbyA9Ci0JCQkJbGUzMl90b19jcHUodGNsaWVudC0+cmN2X2Vycm9yX2J5dGVzLmxvKTsKLQotCQlBRERfNjQocXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSwKLQkJICAgICAgIHFzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGksCi0JCSAgICAgICBxc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvLAotCQkgICAgICAgcXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9sbyk7Ci0KLQkJVVBEQVRFX0VYVEVORF9UU1RBVChyY3ZfdW5pY2FzdF9wa3RzLAotCQkJCQl0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWQpOwotCQlVUERBVEVfRVhURU5EX1RTVEFUKHJjdl9tdWx0aWNhc3RfcGt0cywKLQkJCQkJdG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWQpOwotCQlVUERBVEVfRVhURU5EX1RTVEFUKHJjdl9icm9hZGNhc3RfcGt0cywKLQkJCQkJdG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWQpOwotCQlVUERBVEVfRVhURU5EX1RTVEFUKHBhY2tldHNfdG9vX2JpZ19kaXNjYXJkLAotCQkJCQlldGhlcnN0YXRzb3ZlcnJzaXplcGt0cyk7Ci0JCVVQREFURV9FWFRFTkRfVFNUQVQobm9fYnVmZl9kaXNjYXJkLCBub19idWZmX2Rpc2NhcmQpOwotCi0JCVNVQl9FWFRFTkRfVVNUQVQodWNhc3Rfbm9fYnVmZl9wa3RzLAotCQkJCQl0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWQpOwotCQlTVUJfRVhURU5EX1VTVEFUKG1jYXN0X25vX2J1ZmZfcGt0cywKLQkJCQkJdG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWQpOwotCQlTVUJfRVhURU5EX1VTVEFUKGJjYXN0X25vX2J1ZmZfcGt0cywKLQkJCQkJdG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWQpOwotCQlVUERBVEVfRVhURU5EX1VTVEFUKHVjYXN0X25vX2J1ZmZfcGt0cywgbm9fYnVmZl9kaXNjYXJkKTsKLQkJVVBEQVRFX0VYVEVORF9VU1RBVChtY2FzdF9ub19idWZmX3BrdHMsIG5vX2J1ZmZfZGlzY2FyZCk7Ci0JCVVQREFURV9FWFRFTkRfVVNUQVQoYmNhc3Rfbm9fYnVmZl9wa3RzLCBub19idWZmX2Rpc2NhcmQpOwotCi0JCXFzdGF0cy0+dG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfaGkgPQotCQkJCWxlMzJfdG9fY3B1KHhjbGllbnQtPnVuaWNhc3RfYnl0ZXNfc2VudC5oaSk7Ci0JCXFzdGF0cy0+dG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfbG8gPQotCQkJCWxlMzJfdG9fY3B1KHhjbGllbnQtPnVuaWNhc3RfYnl0ZXNfc2VudC5sbyk7Ci0KLQkJQUREXzY0KHFzdGF0cy0+dG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfaGksCi0JCSAgICAgICBsZTMyX3RvX2NwdSh4Y2xpZW50LT5tdWx0aWNhc3RfYnl0ZXNfc2VudC5oaSksCi0JCSAgICAgICBxc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2xvLAotCQkgICAgICAgbGUzMl90b19jcHUoeGNsaWVudC0+bXVsdGljYXN0X2J5dGVzX3NlbnQubG8pKTsKLQotCQlBRERfNjQocXN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSwKLQkJICAgICAgIGxlMzJfdG9fY3B1KHhjbGllbnQtPmJyb2FkY2FzdF9ieXRlc19zZW50LmhpKSwKLQkJICAgICAgIHFzdGF0cy0+dG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfbG8sCi0JCSAgICAgICBsZTMyX3RvX2NwdSh4Y2xpZW50LT5icm9hZGNhc3RfYnl0ZXNfc2VudC5sbykpOwotCi0JCVVQREFURV9FWFRFTkRfWFNUQVQodW5pY2FzdF9wa3RzX3NlbnQsCi0JCQkJCXRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZCk7Ci0JCVVQREFURV9FWFRFTkRfWFNUQVQobXVsdGljYXN0X3BrdHNfc2VudCwKLQkJCQkJdG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWQpOwotCQlVUERBVEVfRVhURU5EX1hTVEFUKGJyb2FkY2FzdF9wa3RzX3NlbnQsCi0JCQkJCXRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkKTsKLQotCQlvbGRfdGNsaWVudC0+Y2hlY2tzdW1fZGlzY2FyZCA9IHRjbGllbnQtPmNoZWNrc3VtX2Rpc2NhcmQ7Ci0JCW9sZF90Y2xpZW50LT50dGwwX2Rpc2NhcmQgPSB0Y2xpZW50LT50dGwwX2Rpc2NhcmQ7Ci0KLQkJQUREXzY0KGZzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGksCi0JCSAgICAgICBxc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpLAotCQkgICAgICAgZnN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9sbywKLQkJICAgICAgIHFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfbG8pOwotCQlBRERfNjQoZnN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSwKLQkJICAgICAgIHFzdGF0cy0+dG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfaGksCi0JCSAgICAgICBmc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2xvLAotCQkgICAgICAgcXN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9sbyk7Ci0JCUFERF82NChmc3RhdHMtPnRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSwKLQkJICAgICAgIHFzdGF0cy0+dG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpLAotCQkgICAgICAgZnN0YXRzLT50b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG8sCi0JCSAgICAgICBxc3RhdHMtPnRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZF9sbyk7Ci0JCUFERF82NChmc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpLAotCQkgICAgICAgcXN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSwKLQkJICAgICAgIGZzdGF0cy0+dG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG8sCi0JCSAgICAgICBxc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2xvKTsKLQkJQUREXzY0KGZzdGF0cy0+dG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGksCi0JCSAgICAgICBxc3RhdHMtPnRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpLAotCQkgICAgICAgZnN0YXRzLT50b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZF9sbywKLQkJICAgICAgIHFzdGF0cy0+dG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG8pOwotCQlBRERfNjQoZnN0YXRzLT50b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGksCi0JCSAgICAgICBxc3RhdHMtPnRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSwKLQkJICAgICAgIGZzdGF0cy0+dG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2xvLAotCQkgICAgICAgcXN0YXRzLT50b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG8pOwotCQlBRERfNjQoZnN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSwKLQkJICAgICAgIHFzdGF0cy0+dG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGksCi0JCSAgICAgICBmc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2xvLAotCQkgICAgICAgcXN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbyk7Ci0JCUFERF82NChmc3RhdHMtPnRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpLAotCQkgICAgICAgcXN0YXRzLT50b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSwKLQkJICAgICAgIGZzdGF0cy0+dG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG8sCi0JCSAgICAgICBxc3RhdHMtPnRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2xvKTsKLQkJQUREXzY0KGZzdGF0cy0+dmFsaWRfYnl0ZXNfcmVjZWl2ZWRfaGksCi0JCSAgICAgICBxc3RhdHMtPnZhbGlkX2J5dGVzX3JlY2VpdmVkX2hpLAotCQkgICAgICAgZnN0YXRzLT52YWxpZF9ieXRlc19yZWNlaXZlZF9sbywKLQkJICAgICAgIHFzdGF0cy0+dmFsaWRfYnl0ZXNfcmVjZWl2ZWRfbG8pOwotCi0JCUFERF82NChlc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2hpLAotCQkgICAgICAgcXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9oaSwKLQkJICAgICAgIGVzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfbG8sCi0JCSAgICAgICBxc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2xvKTsKLQkJQUREXzY0KGVzdGF0cy0+ZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfaGksCi0JCSAgICAgICBxc3RhdHMtPmV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2hpLAotCQkgICAgICAgZXN0YXRzLT5ldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19sbywKLQkJICAgICAgIHFzdGF0cy0+ZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfbG8pOwotCQlBRERfNjQoZXN0YXRzLT5ub19idWZmX2Rpc2NhcmRfaGksIHFzdGF0cy0+bm9fYnVmZl9kaXNjYXJkX2hpLAotCQkgICAgICAgZXN0YXRzLT5ub19idWZmX2Rpc2NhcmRfbG8sIHFzdGF0cy0+bm9fYnVmZl9kaXNjYXJkX2xvKTsKLQl9Ci0KLQlBRERfNjQoZnN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSwKLQkgICAgICAgZXN0YXRzLT5yeF9zdGF0X2lmaGNpbmJhZG9jdGV0c19oaSwKLQkgICAgICAgZnN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9sbywKLQkgICAgICAgZXN0YXRzLT5yeF9zdGF0X2lmaGNpbmJhZG9jdGV0c19sbyk7Ci0KLQltZW1jcHkoZXN0YXRzLCAmKGZzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGkpLAotCSAgICAgICBzaXplb2Yoc3RydWN0IGhvc3RfZnVuY19zdGF0cykgLSAyKnNpemVvZih1MzIpKTsKLQotCUFERF82NChlc3RhdHMtPmV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2hpLAotCSAgICAgICBlc3RhdHMtPnJ4X3N0YXRfZG90M3N0YXRzZnJhbWVzdG9vbG9uZ19oaSwKLQkgICAgICAgZXN0YXRzLT5ldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19sbywKLQkgICAgICAgZXN0YXRzLT5yeF9zdGF0X2RvdDNzdGF0c2ZyYW1lc3Rvb2xvbmdfbG8pOwotCUFERF82NChlc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2hpLAotCSAgICAgICBlc3RhdHMtPnJ4X3N0YXRfaWZoY2luYmFkb2N0ZXRzX2hpLAotCSAgICAgICBlc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2xvLAotCSAgICAgICBlc3RhdHMtPnJ4X3N0YXRfaWZoY2luYmFkb2N0ZXRzX2xvKTsKLQotCWlmIChicC0+cG9ydC5wbWYpIHsKLQkJZXN0YXRzLT5tYWNfZmlsdGVyX2Rpc2NhcmQgPQotCQkJCWxlMzJfdG9fY3B1KHRwb3J0LT5tYWNfZmlsdGVyX2Rpc2NhcmQpOwotCQllc3RhdHMtPnh4b3ZlcmZsb3dfZGlzY2FyZCA9Ci0JCQkJbGUzMl90b19jcHUodHBvcnQtPnh4b3ZlcmZsb3dfZGlzY2FyZCk7Ci0JCWVzdGF0cy0+YnJiX3RydW5jYXRlX2Rpc2NhcmQgPQotCQkJCWxlMzJfdG9fY3B1KHRwb3J0LT5icmJfdHJ1bmNhdGVfZGlzY2FyZCk7Ci0JCWVzdGF0cy0+bWFjX2Rpc2NhcmQgPSBsZTMyX3RvX2NwdSh0cG9ydC0+bWFjX2Rpc2NhcmQpOwotCX0KLQotCWZzdGF0cy0+aG9zdF9mdW5jX3N0YXRzX3N0YXJ0ID0gKytmc3RhdHMtPmhvc3RfZnVuY19zdGF0c19lbmQ7Ci0KLQlicC0+c3RhdHNfcGVuZGluZyA9IDA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfbmV0X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQotewotCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9ICZicC0+ZXRoX3N0YXRzOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuc3RhdHMgPSAmYnAtPmRldi0+c3RhdHM7Ci0JaW50IGk7Ci0KLQluc3RhdHMtPnJ4X3BhY2tldHMgPQotCQlibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSkgKwotCQlibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKSArCi0JCWJueDJ4X2hpbG8oJmVzdGF0cy0+dG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpOwotCi0JbnN0YXRzLT50eF9wYWNrZXRzID0KLQkJYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGkpICsKLQkJYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSkgKwotCQlibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKTsKLQotCW5zdGF0cy0+cnhfYnl0ZXMgPSBibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpKTsKLQotCW5zdGF0cy0+dHhfYnl0ZXMgPSBibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpKTsKLQotCW5zdGF0cy0+cnhfZHJvcHBlZCA9IGVzdGF0cy0+bWFjX2Rpc2NhcmQ7Ci0JZm9yX2VhY2hfcXVldWUoYnAsIGkpCi0JCW5zdGF0cy0+cnhfZHJvcHBlZCArPQotCQkJbGUzMl90b19jcHUoYnAtPmZwW2ldLm9sZF90Y2xpZW50LmNoZWNrc3VtX2Rpc2NhcmQpOwotCi0JbnN0YXRzLT50eF9kcm9wcGVkID0gMDsKLQotCW5zdGF0cy0+bXVsdGljYXN0ID0KLQkJYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSk7Ci0KLQluc3RhdHMtPmNvbGxpc2lvbnMgPQotCQlibngyeF9oaWxvKCZlc3RhdHMtPnR4X3N0YXRfZXRoZXJzdGF0c2NvbGxpc2lvbnNfaGkpOwotCi0JbnN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzID0KLQkJYm54MnhfaGlsbygmZXN0YXRzLT5yeF9zdGF0X2V0aGVyc3RhdHN1bmRlcnNpemVwa3RzX2hpKSArCi0JCWJueDJ4X2hpbG8oJmVzdGF0cy0+ZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfaGkpOwotCW5zdGF0cy0+cnhfb3Zlcl9lcnJvcnMgPSBibngyeF9oaWxvKCZlc3RhdHMtPmJyYl9kcm9wX2hpKSArCi0JCQkJIGJueDJ4X2hpbG8oJmVzdGF0cy0+YnJiX3RydW5jYXRlX2hpKTsKLQluc3RhdHMtPnJ4X2NyY19lcnJvcnMgPQotCQlibngyeF9oaWxvKCZlc3RhdHMtPnJ4X3N0YXRfZG90M3N0YXRzZmNzZXJyb3JzX2hpKTsKLQluc3RhdHMtPnJ4X2ZyYW1lX2Vycm9ycyA9Ci0JCWJueDJ4X2hpbG8oJmVzdGF0cy0+cnhfc3RhdF9kb3Qzc3RhdHNhbGlnbm1lbnRlcnJvcnNfaGkpOwotCW5zdGF0cy0+cnhfZmlmb19lcnJvcnMgPSBibngyeF9oaWxvKCZlc3RhdHMtPm5vX2J1ZmZfZGlzY2FyZF9oaSk7Ci0JbnN0YXRzLT5yeF9taXNzZWRfZXJyb3JzID0gZXN0YXRzLT54eG92ZXJmbG93X2Rpc2NhcmQ7Ci0KLQluc3RhdHMtPnJ4X2Vycm9ycyA9IG5zdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycyArCi0JCQkgICAgbnN0YXRzLT5yeF9vdmVyX2Vycm9ycyArCi0JCQkgICAgbnN0YXRzLT5yeF9jcmNfZXJyb3JzICsKLQkJCSAgICBuc3RhdHMtPnJ4X2ZyYW1lX2Vycm9ycyArCi0JCQkgICAgbnN0YXRzLT5yeF9maWZvX2Vycm9ycyArCi0JCQkgICAgbnN0YXRzLT5yeF9taXNzZWRfZXJyb3JzOwotCi0JbnN0YXRzLT50eF9hYm9ydGVkX2Vycm9ycyA9Ci0JCWJueDJ4X2hpbG8oJmVzdGF0cy0+dHhfc3RhdF9kb3Qzc3RhdHNsYXRlY29sbGlzaW9uc19oaSkgKwotCQlibngyeF9oaWxvKCZlc3RhdHMtPnR4X3N0YXRfZG90M3N0YXRzZXhjZXNzaXZlY29sbGlzaW9uc19oaSk7Ci0JbnN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycyA9Ci0JCWJueDJ4X2hpbG8oJmVzdGF0cy0+cnhfc3RhdF9kb3Qzc3RhdHNjYXJyaWVyc2Vuc2VlcnJvcnNfaGkpOwotCW5zdGF0cy0+dHhfZmlmb19lcnJvcnMgPSAwOwotCW5zdGF0cy0+dHhfaGVhcnRiZWF0X2Vycm9ycyA9IDA7Ci0JbnN0YXRzLT50eF93aW5kb3dfZXJyb3JzID0gMDsKLQotCW5zdGF0cy0+dHhfZXJyb3JzID0gbnN0YXRzLT50eF9hYm9ydGVkX2Vycm9ycyArCi0JCQkgICAgbnN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycyArCi0JICAgIGJueDJ4X2hpbG8oJmVzdGF0cy0+dHhfc3RhdF9kb3Qzc3RhdHNpbnRlcm5hbG1hY3RyYW5zbWl0ZXJyb3JzX2hpKTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfZHJ2X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQotewotCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9ICZicC0+ZXRoX3N0YXRzOwotCWludCBpOwotCi0JZXN0YXRzLT5kcml2ZXJfeG9mZiA9IDA7Ci0JZXN0YXRzLT5yeF9lcnJfZGlzY2FyZF9wa3QgPSAwOwotCWVzdGF0cy0+cnhfc2tiX2FsbG9jX2ZhaWxlZCA9IDA7Ci0JZXN0YXRzLT5od19jc3VtX2VyciA9IDA7Ci0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKLQkJc3RydWN0IGJueDJ4X2V0aF9xX3N0YXRzICpxc3RhdHMgPSAmYnAtPmZwW2ldLmV0aF9xX3N0YXRzOwotCi0JCWVzdGF0cy0+ZHJpdmVyX3hvZmYgKz0gcXN0YXRzLT5kcml2ZXJfeG9mZjsKLQkJZXN0YXRzLT5yeF9lcnJfZGlzY2FyZF9wa3QgKz0gcXN0YXRzLT5yeF9lcnJfZGlzY2FyZF9wa3Q7Ci0JCWVzdGF0cy0+cnhfc2tiX2FsbG9jX2ZhaWxlZCArPSBxc3RhdHMtPnJ4X3NrYl9hbGxvY19mYWlsZWQ7Ci0JCWVzdGF0cy0+aHdfY3N1bV9lcnIgKz0gcXN0YXRzLT5od19jc3VtX2VycjsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQotewotCXUzMiAqc3RhdHNfY29tcCA9IGJueDJ4X3NwKGJwLCBzdGF0c19jb21wKTsKLQotCWlmICgqc3RhdHNfY29tcCAhPSBETUFFX0NPTVBfVkFMKQotCQlyZXR1cm47Ci0KLQlpZiAoYnAtPnBvcnQucG1mKQotCQlibngyeF9od19zdGF0c191cGRhdGUoYnApOwotCi0JaWYgKGJueDJ4X3N0b3JtX3N0YXRzX3VwZGF0ZShicCkgJiYgKGJwLT5zdGF0c19wZW5kaW5nKysgPT0gMykpIHsKLQkJQk5YMlhfRVJSKCJzdG9ybSBzdGF0cyB3ZXJlIG5vdCB1cGRhdGVkIGZvciAzIHRpbWVzXG4iKTsKLQkJYm54MnhfcGFuaWMoKTsKLQkJcmV0dXJuOwotCX0KLQotCWJueDJ4X25ldF9zdGF0c191cGRhdGUoYnApOwotCWJueDJ4X2Rydl9zdGF0c191cGRhdGUoYnApOwotCi0JaWYgKG5ldGlmX21zZ190aW1lcihicCkpIHsKLQkJc3RydWN0IGJueDJ4X2V0aF9zdGF0cyAqZXN0YXRzID0gJmJwLT5ldGhfc3RhdHM7Ci0JCWludCBpOwotCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogYnJiIGRyb3BzICV1ICBicmIgdHJ1bmNhdGUgJXVcbiIsCi0JCSAgICAgICBicC0+ZGV2LT5uYW1lLAotCQkgICAgICAgZXN0YXRzLT5icmJfZHJvcF9sbywgZXN0YXRzLT5icmJfdHJ1bmNhdGVfbG8pOwotCi0JCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7Ci0JCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKLQkJCXN0cnVjdCBibngyeF9ldGhfcV9zdGF0cyAqcXN0YXRzID0gJmZwLT5ldGhfcV9zdGF0czsKLQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByeCB1c2FnZSglNHUpICAqcnhfY29uc19zYigldSkiCi0JCQkJCSAgIiAgcnggcGt0KCVsdSkgIHJ4IGNhbGxzKCVsdSAlbHUpXG4iLAotCQkJICAgICAgIGZwLT5uYW1lLCAobGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKSAtCi0JCQkgICAgICAgZnAtPnJ4X2NvbXBfY29ucyksCi0JCQkgICAgICAgbGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKSwKLQkJCSAgICAgICBibngyeF9oaWxvKCZxc3RhdHMtPgotCQkJCQkgIHRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSksCi0JCQkgICAgICAgZnAtPnJ4X2NhbGxzLCBmcC0+cnhfcGt0KTsKLQkJfQotCi0JCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7Ci0JCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKLQkJCXN0cnVjdCBibngyeF9ldGhfcV9zdGF0cyAqcXN0YXRzID0gJmZwLT5ldGhfcV9zdGF0czsKLQkJCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSA9Ci0JCQkJbmV0ZGV2X2dldF90eF9xdWV1ZShicC0+ZGV2LCBpKTsKLQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eCBhdmFpbCglNHUpICAqdHhfY29uc19zYigldSkiCi0JCQkJCSAgIiAgdHggcGt0KCVsdSkgdHggY2FsbHMgKCVsdSkiCi0JCQkJCSAgIiAgJXMgKFhvZmYgZXZlbnRzICV1KVxuIiwKLQkJCSAgICAgICBmcC0+bmFtZSwgYm54MnhfdHhfYXZhaWwoZnApLAotCQkJICAgICAgIGxlMTZfdG9fY3B1KCpmcC0+dHhfY29uc19zYiksCi0JCQkgICAgICAgYm54MnhfaGlsbygmcXN0YXRzLT4KLQkJCQkJICB0b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGkpLAotCQkJICAgICAgIGZwLT50eF9wa3QsCi0JCQkgICAgICAgKG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSA/ICJYb2ZmIiA6ICJYb24iKSwKLQkJCSAgICAgICBxc3RhdHMtPmRyaXZlcl94b2ZmKTsKLQkJfQotCX0KLQotCWJueDJ4X2h3X3N0YXRzX3Bvc3QoYnApOwotCWJueDJ4X3N0b3JtX3N0YXRzX3Bvc3QoYnApOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9wb3J0X3N0YXRzX3N0b3Aoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlzdHJ1Y3QgZG1hZV9jb21tYW5kICpkbWFlOwotCXUzMiBvcGNvZGU7Ci0JaW50IGxvYWRlcl9pZHggPSBQTUZfRE1BRV9DKGJwKTsKLQl1MzIgKnN0YXRzX2NvbXAgPSBibngyeF9zcChicCwgc3RhdHNfY29tcCk7Ci0KLQlicC0+ZXhlY3V0ZXJfaWR4ID0gMDsKLQotCW9wY29kZSA9IChETUFFX0NNRF9TUkNfUENJIHwgRE1BRV9DTURfRFNUX0dSQyB8Ci0JCSAgRE1BRV9DTURfQ19FTkFCTEUgfAotCQkgIERNQUVfQ01EX1NSQ19SRVNFVCB8IERNQUVfQ01EX0RTVF9SRVNFVCB8Ci0jaWZkZWYgX19CSUdfRU5ESUFOCi0JCSAgRE1BRV9DTURfRU5ESUFOSVRZX0JfRFdfU1dBUCB8Ci0jZWxzZQotCQkgIERNQUVfQ01EX0VORElBTklUWV9EV19TV0FQIHwKLSNlbmRpZgotCQkgIChCUF9QT1JUKGJwKSA/IERNQUVfQ01EX1BPUlRfMSA6IERNQUVfQ01EX1BPUlRfMCkgfAotCQkgIChCUF9FMUhWTihicCkgPDwgRE1BRV9DTURfRTFIVk5fU0hJRlQpKTsKLQotCWlmIChicC0+cG9ydC5wb3J0X3N0eCkgewotCi0JCWRtYWUgPSBibngyeF9zcChicCwgZG1hZVticC0+ZXhlY3V0ZXJfaWR4KytdKTsKLQkJaWYgKGJwLT5mdW5jX3N0eCkKLQkJCWRtYWUtPm9wY29kZSA9IChvcGNvZGUgfCBETUFFX0NNRF9DX0RTVF9HUkMpOwotCQllbHNlCi0JCQlkbWFlLT5vcGNvZGUgPSAob3Bjb2RlIHwgRE1BRV9DTURfQ19EU1RfUENJKTsKLQkJZG1hZS0+c3JjX2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgcG9ydF9zdGF0cykpOwotCQlkbWFlLT5zcmNfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBwb3J0X3N0YXRzKSk7Ci0JCWRtYWUtPmRzdF9hZGRyX2xvID0gYnAtPnBvcnQucG9ydF9zdHggPj4gMjsKLQkJZG1hZS0+ZHN0X2FkZHJfaGkgPSAwOwotCQlkbWFlLT5sZW4gPSBzaXplb2Yoc3RydWN0IGhvc3RfcG9ydF9zdGF0cykgPj4gMjsKLQkJaWYgKGJwLT5mdW5jX3N0eCkgewotCQkJZG1hZS0+Y29tcF9hZGRyX2xvID0gZG1hZV9yZWdfZ29fY1tsb2FkZXJfaWR4XSA+PiAyOwotCQkJZG1hZS0+Y29tcF9hZGRyX2hpID0gMDsKLQkJCWRtYWUtPmNvbXBfdmFsID0gMTsKLQkJfSBlbHNlIHsKLQkJCWRtYWUtPmNvbXBfYWRkcl9sbyA9Ci0JCQkJVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIHN0YXRzX2NvbXApKTsKLQkJCWRtYWUtPmNvbXBfYWRkcl9oaSA9Ci0JCQkJVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIHN0YXRzX2NvbXApKTsKLQkJCWRtYWUtPmNvbXBfdmFsID0gRE1BRV9DT01QX1ZBTDsKLQotCQkJKnN0YXRzX2NvbXAgPSAwOwotCQl9Ci0JfQotCi0JaWYgKGJwLT5mdW5jX3N0eCkgewotCi0JCWRtYWUgPSBibngyeF9zcChicCwgZG1hZVticC0+ZXhlY3V0ZXJfaWR4KytdKTsKLQkJZG1hZS0+b3Bjb2RlID0gKG9wY29kZSB8IERNQUVfQ01EX0NfRFNUX1BDSSk7Ci0JCWRtYWUtPnNyY19hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIGZ1bmNfc3RhdHMpKTsKLQkJZG1hZS0+c3JjX2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgZnVuY19zdGF0cykpOwotCQlkbWFlLT5kc3RfYWRkcl9sbyA9IGJwLT5mdW5jX3N0eCA+PiAyOwotCQlkbWFlLT5kc3RfYWRkcl9oaSA9IDA7Ci0JCWRtYWUtPmxlbiA9IHNpemVvZihzdHJ1Y3QgaG9zdF9mdW5jX3N0YXRzKSA+PiAyOwotCQlkbWFlLT5jb21wX2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgc3RhdHNfY29tcCkpOwotCQlkbWFlLT5jb21wX2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgc3RhdHNfY29tcCkpOwotCQlkbWFlLT5jb21wX3ZhbCA9IERNQUVfQ09NUF9WQUw7Ci0KLQkJKnN0YXRzX2NvbXAgPSAwOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYm54Mnhfc3RhdHNfc3RvcChzdHJ1Y3QgYm54MnggKmJwKQotewotCWludCB1cGRhdGUgPSAwOwotCi0JYm54Mnhfc3RhdHNfY29tcChicCk7Ci0KLQlpZiAoYnAtPnBvcnQucG1mKQotCQl1cGRhdGUgPSAoYm54MnhfaHdfc3RhdHNfdXBkYXRlKGJwKSA9PSAwKTsKLQotCXVwZGF0ZSB8PSAoYm54Mnhfc3Rvcm1fc3RhdHNfdXBkYXRlKGJwKSA9PSAwKTsKLQotCWlmICh1cGRhdGUpIHsKLQkJYm54MnhfbmV0X3N0YXRzX3VwZGF0ZShicCk7Ci0KLQkJaWYgKGJwLT5wb3J0LnBtZikKLQkJCWJueDJ4X3BvcnRfc3RhdHNfc3RvcChicCk7Ci0KLQkJYm54MnhfaHdfc3RhdHNfcG9zdChicCk7Ci0JCWJueDJ4X3N0YXRzX2NvbXAoYnApOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYm54Mnhfc3RhdHNfZG9fbm90aGluZyhzdHJ1Y3QgYm54MnggKmJwKQotewotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHsKLQl2b2lkICgqYWN0aW9uKShzdHJ1Y3QgYm54MnggKmJwKTsKLQllbnVtIGJueDJ4X3N0YXRzX3N0YXRlIG5leHRfc3RhdGU7Ci19IGJueDJ4X3N0YXRzX3N0bVtTVEFUU19TVEFURV9NQVhdW1NUQVRTX0VWRU5UX01BWF0gPSB7Ci0vKiBzdGF0ZQlldmVudAkqLwotewotLyogRElTQUJMRUQJUE1GCSovIHtibngyeF9zdGF0c19wbWZfdXBkYXRlLCBTVEFUU19TVEFURV9ESVNBQkxFRH0sCi0vKgkJTElOS19VUAkqLyB7Ym54Mnhfc3RhdHNfc3RhcnQsICAgICAgU1RBVFNfU1RBVEVfRU5BQkxFRH0sCi0vKgkJVVBEQVRFCSovIHtibngyeF9zdGF0c19kb19ub3RoaW5nLCBTVEFUU19TVEFURV9ESVNBQkxFRH0sCi0vKgkJU1RPUAkqLyB7Ym54Mnhfc3RhdHNfZG9fbm90aGluZywgU1RBVFNfU1RBVEVfRElTQUJMRUR9Ci19LAotewotLyogRU5BQkxFRAlQTUYJKi8ge2JueDJ4X3N0YXRzX3BtZl9zdGFydCwgIFNUQVRTX1NUQVRFX0VOQUJMRUR9LAotLyoJCUxJTktfVVAJKi8ge2JueDJ4X3N0YXRzX3Jlc3RhcnQsICAgIFNUQVRTX1NUQVRFX0VOQUJMRUR9LAotLyoJCVVQREFURQkqLyB7Ym54Mnhfc3RhdHNfdXBkYXRlLCAgICAgU1RBVFNfU1RBVEVfRU5BQkxFRH0sCi0vKgkJU1RPUAkqLyB7Ym54Mnhfc3RhdHNfc3RvcCwgICAgICAgU1RBVFNfU1RBVEVfRElTQUJMRUR9Ci19Ci19OwotCi1zdGF0aWMgdm9pZCBibngyeF9zdGF0c19oYW5kbGUoc3RydWN0IGJueDJ4ICpicCwgZW51bSBibngyeF9zdGF0c19ldmVudCBldmVudCkKLXsKLQllbnVtIGJueDJ4X3N0YXRzX3N0YXRlIHN0YXRlID0gYnAtPnN0YXRzX3N0YXRlOwotCi0JaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCi0JCXJldHVybjsKLQotCWJueDJ4X3N0YXRzX3N0bVtzdGF0ZV1bZXZlbnRdLmFjdGlvbihicCk7Ci0JYnAtPnN0YXRzX3N0YXRlID0gYm54Mnhfc3RhdHNfc3RtW3N0YXRlXVtldmVudF0ubmV4dF9zdGF0ZTsKLQotCS8qIE1ha2Ugc3VyZSB0aGUgc3RhdGUgaGFzIGJlZW4gImNoYW5nZWQiICovCi0Jc21wX3dtYigpOwotCi0JaWYgKChldmVudCAhPSBTVEFUU19FVkVOVF9VUERBVEUpIHx8IG5ldGlmX21zZ190aW1lcihicCkpCi0JCURQKEJOWDJYX01TR19TVEFUUywgInN0YXRlICVkIC0+IGV2ZW50ICVkIC0+IHN0YXRlICVkXG4iLAotCQkgICBzdGF0ZSwgZXZlbnQsIGJwLT5zdGF0c19zdGF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X3BvcnRfc3RhdHNfYmFzZV9pbml0KHN0cnVjdCBibngyeCAqYnApCi17Ci0Jc3RydWN0IGRtYWVfY29tbWFuZCAqZG1hZTsKLQl1MzIgKnN0YXRzX2NvbXAgPSBibngyeF9zcChicCwgc3RhdHNfY29tcCk7Ci0KLQkvKiBzYW5pdHkgKi8KLQlpZiAoIWJwLT5wb3J0LnBtZiB8fCAhYnAtPnBvcnQucG9ydF9zdHgpIHsKLQkJQk5YMlhfRVJSKCJCVUchXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWJwLT5leGVjdXRlcl9pZHggPSAwOwotCi0JZG1hZSA9IGJueDJ4X3NwKGJwLCBkbWFlW2JwLT5leGVjdXRlcl9pZHgrK10pOwotCWRtYWUtPm9wY29kZSA9IChETUFFX0NNRF9TUkNfUENJIHwgRE1BRV9DTURfRFNUX0dSQyB8Ci0JCQlETUFFX0NNRF9DX0RTVF9QQ0kgfCBETUFFX0NNRF9DX0VOQUJMRSB8Ci0JCQlETUFFX0NNRF9TUkNfUkVTRVQgfCBETUFFX0NNRF9EU1RfUkVTRVQgfAotI2lmZGVmIF9fQklHX0VORElBTgotCQkJRE1BRV9DTURfRU5ESUFOSVRZX0JfRFdfU1dBUCB8Ci0jZWxzZQotCQkJRE1BRV9DTURfRU5ESUFOSVRZX0RXX1NXQVAgfAotI2VuZGlmCi0JCQkoQlBfUE9SVChicCkgPyBETUFFX0NNRF9QT1JUXzEgOiBETUFFX0NNRF9QT1JUXzApIHwKLQkJCShCUF9FMUhWTihicCkgPDwgRE1BRV9DTURfRTFIVk5fU0hJRlQpKTsKLQlkbWFlLT5zcmNfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBwb3J0X3N0YXRzKSk7Ci0JZG1hZS0+c3JjX2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgcG9ydF9zdGF0cykpOwotCWRtYWUtPmRzdF9hZGRyX2xvID0gYnAtPnBvcnQucG9ydF9zdHggPj4gMjsKLQlkbWFlLT5kc3RfYWRkcl9oaSA9IDA7Ci0JZG1hZS0+bGVuID0gc2l6ZW9mKHN0cnVjdCBob3N0X3BvcnRfc3RhdHMpID4+IDI7Ci0JZG1hZS0+Y29tcF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIHN0YXRzX2NvbXApKTsKLQlkbWFlLT5jb21wX2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgc3RhdHNfY29tcCkpOwotCWRtYWUtPmNvbXBfdmFsID0gRE1BRV9DT01QX1ZBTDsKLQotCSpzdGF0c19jb21wID0gMDsKLQlibngyeF9od19zdGF0c19wb3N0KGJwKTsKLQlibngyeF9zdGF0c19jb21wKGJwKTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfZnVuY19zdGF0c19iYXNlX2luaXQoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpbnQgdm4sIHZuX21heCA9IElTX0UxSE1GKGJwKSA/IEUxSFZOX01BWCA6IEUxVk5fTUFYOwotCWludCBwb3J0ID0gQlBfUE9SVChicCk7Ci0JaW50IGZ1bmM7Ci0JdTMyIGZ1bmNfc3R4OwotCi0JLyogc2FuaXR5ICovCi0JaWYgKCFicC0+cG9ydC5wbWYgfHwgIWJwLT5mdW5jX3N0eCkgewotCQlCTlgyWF9FUlIoIkJVRyFcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogc2F2ZSBvdXIgZnVuY19zdHggKi8KLQlmdW5jX3N0eCA9IGJwLT5mdW5jX3N0eDsKLQotCWZvciAodm4gPSBWTl8wOyB2biA8IHZuX21heDsgdm4rKykgewotCQlmdW5jID0gMip2biArIHBvcnQ7Ci0KLQkJYnAtPmZ1bmNfc3R4ID0gU0hNRU1fUkQoYnAsIGZ1bmNfbWJbZnVuY10uZndfbWJfcGFyYW0pOwotCQlibngyeF9mdW5jX3N0YXRzX2luaXQoYnApOwotCQlibngyeF9od19zdGF0c19wb3N0KGJwKTsKLQkJYm54Mnhfc3RhdHNfY29tcChicCk7Ci0JfQotCi0JLyogcmVzdG9yZSBvdXIgZnVuY19zdHggKi8KLQlicC0+ZnVuY19zdHggPSBmdW5jX3N0eDsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfZnVuY19zdGF0c19iYXNlX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQotewotCXN0cnVjdCBkbWFlX2NvbW1hbmQgKmRtYWUgPSAmYnAtPnN0YXRzX2RtYWU7Ci0JdTMyICpzdGF0c19jb21wID0gYm54Mnhfc3AoYnAsIHN0YXRzX2NvbXApOwotCi0JLyogc2FuaXR5ICovCi0JaWYgKCFicC0+ZnVuY19zdHgpIHsKLQkJQk5YMlhfRVJSKCJCVUchXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWJwLT5leGVjdXRlcl9pZHggPSAwOwotCW1lbXNldChkbWFlLCAwLCBzaXplb2Yoc3RydWN0IGRtYWVfY29tbWFuZCkpOwotCi0JZG1hZS0+b3Bjb2RlID0gKERNQUVfQ01EX1NSQ19HUkMgfCBETUFFX0NNRF9EU1RfUENJIHwKLQkJCURNQUVfQ01EX0NfRFNUX1BDSSB8IERNQUVfQ01EX0NfRU5BQkxFIHwKLQkJCURNQUVfQ01EX1NSQ19SRVNFVCB8IERNQUVfQ01EX0RTVF9SRVNFVCB8Ci0jaWZkZWYgX19CSUdfRU5ESUFOCi0JCQlETUFFX0NNRF9FTkRJQU5JVFlfQl9EV19TV0FQIHwKLSNlbHNlCi0JCQlETUFFX0NNRF9FTkRJQU5JVFlfRFdfU1dBUCB8Ci0jZW5kaWYKLQkJCShCUF9QT1JUKGJwKSA/IERNQUVfQ01EX1BPUlRfMSA6IERNQUVfQ01EX1BPUlRfMCkgfAotCQkJKEJQX0UxSFZOKGJwKSA8PCBETUFFX0NNRF9FMUhWTl9TSElGVCkpOwotCWRtYWUtPnNyY19hZGRyX2xvID0gYnAtPmZ1bmNfc3R4ID4+IDI7Ci0JZG1hZS0+c3JjX2FkZHJfaGkgPSAwOwotCWRtYWUtPmRzdF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIGZ1bmNfc3RhdHNfYmFzZSkpOwotCWRtYWUtPmRzdF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIGZ1bmNfc3RhdHNfYmFzZSkpOwotCWRtYWUtPmxlbiA9IHNpemVvZihzdHJ1Y3QgaG9zdF9mdW5jX3N0YXRzKSA+PiAyOwotCWRtYWUtPmNvbXBfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBzdGF0c19jb21wKSk7Ci0JZG1hZS0+Y29tcF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIHN0YXRzX2NvbXApKTsKLQlkbWFlLT5jb21wX3ZhbCA9IERNQUVfQ09NUF9WQUw7Ci0KLQkqc3RhdHNfY29tcCA9IDA7Ci0JYm54MnhfaHdfc3RhdHNfcG9zdChicCk7Ci0JYm54Mnhfc3RhdHNfY29tcChicCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X3N0YXRzX2luaXQoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwotCWludCBmdW5jID0gQlBfRlVOQyhicCk7Ci0JaW50IGk7Ci0KLQlicC0+c3RhdHNfcGVuZGluZyA9IDA7Ci0JYnAtPmV4ZWN1dGVyX2lkeCA9IDA7Ci0JYnAtPnN0YXRzX2NvdW50ZXIgPSAwOwotCi0JLyogcG9ydCBhbmQgZnVuYyBzdGF0cyBmb3IgbWFuYWdlbWVudCAqLwotCWlmICghQlBfTk9NQ1AoYnApKSB7Ci0JCWJwLT5wb3J0LnBvcnRfc3R4ID0gU0hNRU1fUkQoYnAsIHBvcnRfbWJbcG9ydF0ucG9ydF9zdHgpOwotCQlicC0+ZnVuY19zdHggPSBTSE1FTV9SRChicCwgZnVuY19tYltmdW5jXS5md19tYl9wYXJhbSk7Ci0KLQl9IGVsc2UgewotCQlicC0+cG9ydC5wb3J0X3N0eCA9IDA7Ci0JCWJwLT5mdW5jX3N0eCA9IDA7Ci0JfQotCURQKEJOWDJYX01TR19TVEFUUywgInBvcnRfc3R4IDB4JXggIGZ1bmNfc3R4IDB4JXhcbiIsCi0JICAgYnAtPnBvcnQucG9ydF9zdHgsIGJwLT5mdW5jX3N0eCk7Ci0KLQkvKiBwb3J0IHN0YXRzICovCi0JbWVtc2V0KCYoYnAtPnBvcnQub2xkX25pZ19zdGF0cyksIDAsIHNpemVvZihzdHJ1Y3QgbmlnX3N0YXRzKSk7Ci0JYnAtPnBvcnQub2xkX25pZ19zdGF0cy5icmJfZGlzY2FyZCA9Ci0JCQlSRUdfUkQoYnAsIE5JR19SRUdfU1RBVDBfQlJCX0RJU0NBUkQgKyBwb3J0KjB4MzgpOwotCWJwLT5wb3J0Lm9sZF9uaWdfc3RhdHMuYnJiX3RydW5jYXRlID0KLQkJCVJFR19SRChicCwgTklHX1JFR19TVEFUMF9CUkJfVFJVTkNBVEUgKyBwb3J0KjB4MzgpOwotCVJFR19SRF9ETUFFKGJwLCBOSUdfUkVHX1NUQVQwX0VHUkVTU19NQUNfUEtUMCArIHBvcnQqMHg1MCwKLQkJICAgICYoYnAtPnBvcnQub2xkX25pZ19zdGF0cy5lZ3Jlc3NfbWFjX3BrdDBfbG8pLCAyKTsKLQlSRUdfUkRfRE1BRShicCwgTklHX1JFR19TVEFUMF9FR1JFU1NfTUFDX1BLVDEgKyBwb3J0KjB4NTAsCi0JCSAgICAmKGJwLT5wb3J0Lm9sZF9uaWdfc3RhdHMuZWdyZXNzX21hY19wa3QxX2xvKSwgMik7Ci0KLQkvKiBmdW5jdGlvbiBzdGF0cyAqLwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7Ci0JCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwotCi0JCW1lbXNldCgmZnAtPm9sZF90Y2xpZW50LCAwLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykpOwotCQltZW1zZXQoJmZwLT5vbGRfdWNsaWVudCwgMCwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgdXN0b3JtX3Blcl9jbGllbnRfc3RhdHMpKTsKLQkJbWVtc2V0KCZmcC0+b2xkX3hjbGllbnQsIDAsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSk7Ci0JCW1lbXNldCgmZnAtPmV0aF9xX3N0YXRzLCAwLCBzaXplb2Yoc3RydWN0IGJueDJ4X2V0aF9xX3N0YXRzKSk7Ci0JfQotCi0JbWVtc2V0KCZicC0+ZGV2LT5zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSk7Ci0JbWVtc2V0KCZicC0+ZXRoX3N0YXRzLCAwLCBzaXplb2Yoc3RydWN0IGJueDJ4X2V0aF9zdGF0cykpOwotCi0JYnAtPnN0YXRzX3N0YXRlID0gU1RBVFNfU1RBVEVfRElTQUJMRUQ7Ci0KLQlpZiAoYnAtPnBvcnQucG1mKSB7Ci0JCWlmIChicC0+cG9ydC5wb3J0X3N0eCkKLQkJCWJueDJ4X3BvcnRfc3RhdHNfYmFzZV9pbml0KGJwKTsKLQotCQlpZiAoYnAtPmZ1bmNfc3R4KQotCQkJYm54MnhfZnVuY19zdGF0c19iYXNlX2luaXQoYnApOwotCi0JfSBlbHNlIGlmIChicC0+ZnVuY19zdHgpCi0JCWJueDJ4X2Z1bmNfc3RhdHNfYmFzZV91cGRhdGUoYnApOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IChzdHJ1Y3QgYm54MnggKikgZGF0YTsKLQotCWlmICghbmV0aWZfcnVubmluZyhicC0+ZGV2KSkKLQkJcmV0dXJuOwotCi0JaWYgKGF0b21pY19yZWFkKCZicC0+aW50cl9zZW0pICE9IDApCi0JCWdvdG8gdGltZXJfcmVzdGFydDsKLQotCWlmIChwb2xsKSB7Ci0JCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwWzBdOwotCQlpbnQgcmM7Ci0KLQkJYm54MnhfdHhfaW50KGZwKTsKLQkJcmMgPSBibngyeF9yeF9pbnQoZnAsIDEwMDApOwotCX0KLQotCWlmICghQlBfTk9NQ1AoYnApKSB7Ci0JCWludCBmdW5jID0gQlBfRlVOQyhicCk7Ci0JCXUzMiBkcnZfcHVsc2U7Ci0JCXUzMiBtY3BfcHVsc2U7Ci0KLQkJKyticC0+ZndfZHJ2X3B1bHNlX3dyX3NlcTsKLQkJYnAtPmZ3X2Rydl9wdWxzZV93cl9zZXEgJj0gRFJWX1BVTFNFX1NFUV9NQVNLOwotCQkvKiBUQkQgLSBhZGQgU1lTVEVNX1RJTUUgKi8KLQkJZHJ2X3B1bHNlID0gYnAtPmZ3X2Rydl9wdWxzZV93cl9zZXE7Ci0JCVNITUVNX1dSKGJwLCBmdW5jX21iW2Z1bmNdLmRydl9wdWxzZV9tYiwgZHJ2X3B1bHNlKTsKLQotCQltY3BfcHVsc2UgPSAoU0hNRU1fUkQoYnAsIGZ1bmNfbWJbZnVuY10ubWNwX3B1bHNlX21iKSAmCi0JCQkgICAgIE1DUF9QVUxTRV9TRVFfTUFTSyk7Ci0JCS8qIFRoZSBkZWx0YSBiZXR3ZWVuIGRyaXZlciBwdWxzZSBhbmQgbWNwIHJlc3BvbnNlCi0JCSAqIHNob3VsZCBiZSAxIChiZWZvcmUgbWNwIHJlc3BvbnNlKSBvciAwIChhZnRlciBtY3AgcmVzcG9uc2UpCi0JCSAqLwotCQlpZiAoKGRydl9wdWxzZSAhPSBtY3BfcHVsc2UpICYmCi0JCSAgICAoZHJ2X3B1bHNlICE9ICgobWNwX3B1bHNlICsgMSkgJiBNQ1BfUFVMU0VfU0VRX01BU0spKSkgewotCQkJLyogc29tZW9uZSBsb3N0IGEgaGVhcnRiZWF0Li4uICovCi0JCQlCTlgyWF9FUlIoImRydl9wdWxzZSAoMHgleCkgIT0gbWNwX3B1bHNlICgweCV4KVxuIiwKLQkJCQkgIGRydl9wdWxzZSwgbWNwX3B1bHNlKTsKLQkJfQotCX0KLQotCWlmIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfT1BFTikKLQkJYm54Mnhfc3RhdHNfaGFuZGxlKGJwLCBTVEFUU19FVkVOVF9VUERBVEUpOwotCi10aW1lcl9yZXN0YXJ0OgotCW1vZF90aW1lcigmYnAtPnRpbWVyLCBqaWZmaWVzICsgYnAtPmN1cnJlbnRfaW50ZXJ2YWwpOwotfQotCi0vKiBlbmQgb2YgU3RhdGlzdGljcyAqLwotCi0vKiBuaWMgaW5pdCAqLwotCi0vKgotICogbmljIGluaXQgc2VydmljZSBmdW5jdGlvbnMKLSAqLwotCi1zdGF0aWMgdm9pZCBibngyeF96ZXJvX3NiKHN0cnVjdCBibngyeCAqYnAsIGludCBzYl9pZCkKLXsKLQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwotCi0JLyogIkNTVE9STSIgKi8KLQlibngyeF9pbml0X2ZpbGwoYnAsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsKLQkJCUNTVE9STV9TQl9IT1NUX1NUQVRVU19CTE9DS19VX09GRlNFVChwb3J0LCBzYl9pZCksIDAsCi0JCQlDU1RPUk1fU0JfU1RBVFVTX0JMT0NLX1VfU0laRSAvIDQpOwotCWJueDJ4X2luaXRfZmlsbChicCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKwotCQkJQ1NUT1JNX1NCX0hPU1RfU1RBVFVTX0JMT0NLX0NfT0ZGU0VUKHBvcnQsIHNiX2lkKSwgMCwKLQkJCUNTVE9STV9TQl9TVEFUVVNfQkxPQ0tfQ19TSVpFIC8gNCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2luaXRfc2Ioc3RydWN0IGJueDJ4ICpicCwgc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrICpzYiwKLQkJCSAgZG1hX2FkZHJfdCBtYXBwaW5nLCBpbnQgc2JfaWQpCi17Ci0JaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKLQlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOwotCWludCBpbmRleDsKLQl1NjQgc2VjdGlvbjsKLQotCS8qIFVTVE9STSAqLwotCXNlY3Rpb24gPSAoKHU2NCltYXBwaW5nKSArIG9mZnNldG9mKHN0cnVjdCBob3N0X3N0YXR1c19ibG9jaywKLQkJCQkJICAgIHVfc3RhdHVzX2Jsb2NrKTsKLQlzYi0+dV9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2lkID0gc2JfaWQ7Ci0KLQlSRUdfV1IoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCi0JICAgICAgIENTVE9STV9TQl9IT1NUX1NCX0FERFJfVV9PRkZTRVQocG9ydCwgc2JfaWQpLCBVNjRfTE8oc2VjdGlvbikpOwotCVJFR19XUihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKLQkgICAgICAgKChDU1RPUk1fU0JfSE9TVF9TQl9BRERSX1VfT0ZGU0VUKHBvcnQsIHNiX2lkKSkgKyA0KSwKLQkgICAgICAgVTY0X0hJKHNlY3Rpb24pKTsKLQlSRUdfV1I4KGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKyBGUF9VU0JfRlVOQ19PRkYgKwotCQlDU1RPUk1fU0JfSE9TVF9TVEFUVVNfQkxPQ0tfVV9PRkZTRVQocG9ydCwgc2JfaWQpLCBmdW5jKTsKLQotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IEhDX1VTVE9STV9TQl9OVU1fSU5ESUNFUzsgaW5kZXgrKykKLQkJUkVHX1dSMTYoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCi0JCQkgQ1NUT1JNX1NCX0hDX0RJU0FCTEVfVV9PRkZTRVQocG9ydCwgc2JfaWQsIGluZGV4KSwgMSk7Ci0KLQkvKiBDU1RPUk0gKi8KLQlzZWN0aW9uID0gKCh1NjQpbWFwcGluZykgKyBvZmZzZXRvZihzdHJ1Y3QgaG9zdF9zdGF0dXNfYmxvY2ssCi0JCQkJCSAgICBjX3N0YXR1c19ibG9jayk7Ci0Jc2ItPmNfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pZCA9IHNiX2lkOwotCi0JUkVHX1dSKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKwotCSAgICAgICBDU1RPUk1fU0JfSE9TVF9TQl9BRERSX0NfT0ZGU0VUKHBvcnQsIHNiX2lkKSwgVTY0X0xPKHNlY3Rpb24pKTsKLQlSRUdfV1IoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCi0JICAgICAgICgoQ1NUT1JNX1NCX0hPU1RfU0JfQUREUl9DX09GRlNFVChwb3J0LCBzYl9pZCkpICsgNCksCi0JICAgICAgIFU2NF9ISShzZWN0aW9uKSk7Ci0JUkVHX1dSOChicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsgRlBfQ1NCX0ZVTkNfT0ZGICsKLQkJQ1NUT1JNX1NCX0hPU1RfU1RBVFVTX0JMT0NLX0NfT0ZGU0VUKHBvcnQsIHNiX2lkKSwgZnVuYyk7Ci0KLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBIQ19DU1RPUk1fU0JfTlVNX0lORElDRVM7IGluZGV4KyspCi0JCVJFR19XUjE2KGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKwotCQkJIENTVE9STV9TQl9IQ19ESVNBQkxFX0NfT0ZGU0VUKHBvcnQsIHNiX2lkLCBpbmRleCksIDEpOwotCi0JYm54MnhfYWNrX3NiKGJwLCBzYl9pZCwgQ1NUT1JNX0lELCAwLCBJR1VfSU5UX0VOQUJMRSwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X3plcm9fZGVmX3NiKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKLQotCWJueDJ4X2luaXRfZmlsbChicCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKwotCQkJVFNUT1JNX0RFRl9TQl9IT1NUX1NUQVRVU19CTE9DS19PRkZTRVQoZnVuYyksIDAsCi0JCQlzaXplb2Yoc3RydWN0IHRzdG9ybV9kZWZfc3RhdHVzX2Jsb2NrKS80KTsKLQlibngyeF9pbml0X2ZpbGwoYnAsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsKLQkJCUNTVE9STV9ERUZfU0JfSE9TVF9TVEFUVVNfQkxPQ0tfVV9PRkZTRVQoZnVuYyksIDAsCi0JCQlzaXplb2Yoc3RydWN0IGNzdG9ybV9kZWZfc3RhdHVzX2Jsb2NrX3UpLzQpOwotCWJueDJ4X2luaXRfZmlsbChicCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKwotCQkJQ1NUT1JNX0RFRl9TQl9IT1NUX1NUQVRVU19CTE9DS19DX09GRlNFVChmdW5jKSwgMCwKLQkJCXNpemVvZihzdHJ1Y3QgY3N0b3JtX2RlZl9zdGF0dXNfYmxvY2tfYykvNCk7Ci0JYm54MnhfaW5pdF9maWxsKGJwLCBYU0VNX1JFR19GQVNUX01FTU9SWSArCi0JCQlYU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChmdW5jKSwgMCwKLQkJCXNpemVvZihzdHJ1Y3QgeHN0b3JtX2RlZl9zdGF0dXNfYmxvY2spLzQpOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9pbml0X2RlZl9zYihzdHJ1Y3QgYm54MnggKmJwLAotCQkJICAgICAgc3RydWN0IGhvc3RfZGVmX3N0YXR1c19ibG9jayAqZGVmX3NiLAotCQkJICAgICAgZG1hX2FkZHJfdCBtYXBwaW5nLCBpbnQgc2JfaWQpCi17Ci0JaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKLQlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOwotCWludCBpbmRleCwgdmFsLCByZWdfb2Zmc2V0OwotCXU2NCBzZWN0aW9uOwotCi0JLyogQVRUTiAqLwotCXNlY3Rpb24gPSAoKHU2NCltYXBwaW5nKSArIG9mZnNldG9mKHN0cnVjdCBob3N0X2RlZl9zdGF0dXNfYmxvY2ssCi0JCQkJCSAgICBhdHRlbl9zdGF0dXNfYmxvY2spOwotCWRlZl9zYi0+YXR0ZW5fc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pZCA9IHNiX2lkOwotCi0JYnAtPmF0dG5fc3RhdGUgPSAwOwotCi0JcmVnX29mZnNldCA9IChwb3J0ID8gTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18xX09VVF8wIDoKLQkJCSAgICAgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18wX09VVF8wKTsKLQotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE1BWF9EWU5BTUlDX0FUVE5fR1JQUzsgaW5kZXgrKykgewotCQlicC0+YXR0bl9ncm91cFtpbmRleF0uc2lnWzBdID0gUkVHX1JEKGJwLAotCQkJCQkJICAgICByZWdfb2Zmc2V0ICsgMHgxMCppbmRleCk7Ci0JCWJwLT5hdHRuX2dyb3VwW2luZGV4XS5zaWdbMV0gPSBSRUdfUkQoYnAsCi0JCQkJCSAgICAgICByZWdfb2Zmc2V0ICsgMHg0ICsgMHgxMCppbmRleCk7Ci0JCWJwLT5hdHRuX2dyb3VwW2luZGV4XS5zaWdbMl0gPSBSRUdfUkQoYnAsCi0JCQkJCSAgICAgICByZWdfb2Zmc2V0ICsgMHg4ICsgMHgxMCppbmRleCk7Ci0JCWJwLT5hdHRuX2dyb3VwW2luZGV4XS5zaWdbM10gPSBSRUdfUkQoYnAsCi0JCQkJCSAgICAgICByZWdfb2Zmc2V0ICsgMHhjICsgMHgxMCppbmRleCk7Ci0JfQotCi0JcmVnX29mZnNldCA9IChwb3J0ID8gSENfUkVHX0FUVE5fTVNHMV9BRERSX0wgOgotCQkJICAgICBIQ19SRUdfQVRUTl9NU0cwX0FERFJfTCk7Ci0KLQlSRUdfV1IoYnAsIHJlZ19vZmZzZXQsIFU2NF9MTyhzZWN0aW9uKSk7Ci0JUkVHX1dSKGJwLCByZWdfb2Zmc2V0ICsgNCwgVTY0X0hJKHNlY3Rpb24pKTsKLQotCXJlZ19vZmZzZXQgPSAocG9ydCA/IEhDX1JFR19BVFROX05VTV9QMSA6IEhDX1JFR19BVFROX05VTV9QMCk7Ci0KLQl2YWwgPSBSRUdfUkQoYnAsIHJlZ19vZmZzZXQpOwotCXZhbCB8PSBzYl9pZDsKLQlSRUdfV1IoYnAsIHJlZ19vZmZzZXQsIHZhbCk7Ci0KLQkvKiBVU1RPUk0gKi8KLQlzZWN0aW9uID0gKCh1NjQpbWFwcGluZykgKyBvZmZzZXRvZihzdHJ1Y3QgaG9zdF9kZWZfc3RhdHVzX2Jsb2NrLAotCQkJCQkgICAgdV9kZWZfc3RhdHVzX2Jsb2NrKTsKLQlkZWZfc2ItPnVfZGVmX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaWQgPSBzYl9pZDsKLQotCVJFR19XUihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKLQkgICAgICAgQ1NUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfVV9PRkZTRVQoZnVuYyksIFU2NF9MTyhzZWN0aW9uKSk7Ci0JUkVHX1dSKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKwotCSAgICAgICAoKENTVE9STV9ERUZfU0JfSE9TVF9TQl9BRERSX1VfT0ZGU0VUKGZ1bmMpKSArIDQpLAotCSAgICAgICBVNjRfSEkoc2VjdGlvbikpOwotCVJFR19XUjgoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArIERFRl9VU0JfRlVOQ19PRkYgKwotCQlDU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX1VfT0ZGU0VUKGZ1bmMpLCBmdW5jKTsKLQotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IEhDX1VTVE9STV9ERUZfU0JfTlVNX0lORElDRVM7IGluZGV4KyspCi0JCVJFR19XUjE2KGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKwotCQkJIENTVE9STV9ERUZfU0JfSENfRElTQUJMRV9VX09GRlNFVChmdW5jLCBpbmRleCksIDEpOwotCi0JLyogQ1NUT1JNICovCi0Jc2VjdGlvbiA9ICgodTY0KW1hcHBpbmcpICsgb2Zmc2V0b2Yoc3RydWN0IGhvc3RfZGVmX3N0YXR1c19ibG9jaywKLQkJCQkJICAgIGNfZGVmX3N0YXR1c19ibG9jayk7Ci0JZGVmX3NiLT5jX2RlZl9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2lkID0gc2JfaWQ7Ci0KLQlSRUdfV1IoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCi0JICAgICAgIENTVE9STV9ERUZfU0JfSE9TVF9TQl9BRERSX0NfT0ZGU0VUKGZ1bmMpLCBVNjRfTE8oc2VjdGlvbikpOwotCVJFR19XUihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKLQkgICAgICAgKChDU1RPUk1fREVGX1NCX0hPU1RfU0JfQUREUl9DX09GRlNFVChmdW5jKSkgKyA0KSwKLQkgICAgICAgVTY0X0hJKHNlY3Rpb24pKTsKLQlSRUdfV1I4KGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKyBERUZfQ1NCX0ZVTkNfT0ZGICsKLQkJQ1NUT1JNX0RFRl9TQl9IT1NUX1NUQVRVU19CTE9DS19DX09GRlNFVChmdW5jKSwgZnVuYyk7Ci0KLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBIQ19DU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTOyBpbmRleCsrKQotCQlSRUdfV1IxNihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKLQkJCSBDU1RPUk1fREVGX1NCX0hDX0RJU0FCTEVfQ19PRkZTRVQoZnVuYywgaW5kZXgpLCAxKTsKLQotCS8qIFRTVE9STSAqLwotCXNlY3Rpb24gPSAoKHU2NCltYXBwaW5nKSArIG9mZnNldG9mKHN0cnVjdCBob3N0X2RlZl9zdGF0dXNfYmxvY2ssCi0JCQkJCSAgICB0X2RlZl9zdGF0dXNfYmxvY2spOwotCWRlZl9zYi0+dF9kZWZfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pZCA9IHNiX2lkOwotCi0JUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKwotCSAgICAgICBUU1RPUk1fREVGX1NCX0hPU1RfU0JfQUREUl9PRkZTRVQoZnVuYyksIFU2NF9MTyhzZWN0aW9uKSk7Ci0JUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKwotCSAgICAgICAoKFRTVE9STV9ERUZfU0JfSE9TVF9TQl9BRERSX09GRlNFVChmdW5jKSkgKyA0KSwKLQkgICAgICAgVTY0X0hJKHNlY3Rpb24pKTsKLQlSRUdfV1I4KGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKyBERUZfVFNCX0ZVTkNfT0ZGICsKLQkJVFNUT1JNX0RFRl9TQl9IT1NUX1NUQVRVU19CTE9DS19PRkZTRVQoZnVuYyksIGZ1bmMpOwotCi0JZm9yIChpbmRleCA9IDA7IGluZGV4IDwgSENfVFNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFUzsgaW5kZXgrKykKLQkJUkVHX1dSMTYoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCi0JCQkgVFNUT1JNX0RFRl9TQl9IQ19ESVNBQkxFX09GRlNFVChmdW5jLCBpbmRleCksIDEpOwotCi0JLyogWFNUT1JNICovCi0Jc2VjdGlvbiA9ICgodTY0KW1hcHBpbmcpICsgb2Zmc2V0b2Yoc3RydWN0IGhvc3RfZGVmX3N0YXR1c19ibG9jaywKLQkJCQkJICAgIHhfZGVmX3N0YXR1c19ibG9jayk7Ci0JZGVmX3NiLT54X2RlZl9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2lkID0gc2JfaWQ7Ci0KLQlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCi0JICAgICAgIFhTVE9STV9ERUZfU0JfSE9TVF9TQl9BRERSX09GRlNFVChmdW5jKSwgVTY0X0xPKHNlY3Rpb24pKTsKLQlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCi0JICAgICAgICgoWFNUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKGZ1bmMpKSArIDQpLAotCSAgICAgICBVNjRfSEkoc2VjdGlvbikpOwotCVJFR19XUjgoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArIERFRl9YU0JfRlVOQ19PRkYgKwotCQlYU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChmdW5jKSwgZnVuYyk7Ci0KLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBIQ19YU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTOyBpbmRleCsrKQotCQlSRUdfV1IxNihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsKLQkJCSBYU1RPUk1fREVGX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKGZ1bmMsIGluZGV4KSwgMSk7Ci0KLQlicC0+c3RhdHNfcGVuZGluZyA9IDA7Ci0JYnAtPnNldF9tYWNfcGVuZGluZyA9IDA7Ci0KLQlibngyeF9hY2tfc2IoYnAsIHNiX2lkLCBDU1RPUk1fSUQsIDAsIElHVV9JTlRfRU5BQkxFLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfdXBkYXRlX2NvYWxlc2NlKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKLQlpbnQgaTsKLQotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7Ci0JCWludCBzYl9pZCA9IGJwLT5mcFtpXS5zYl9pZDsKLQotCQkvKiBIQ19JTkRFWF9VX0VUSF9SWF9DUV9DT05TICovCi0JCVJFR19XUjgoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCi0JCQlDU1RPUk1fU0JfSENfVElNRU9VVF9VX09GRlNFVChwb3J0LCBzYl9pZCwKLQkJCQkJCSAgICAgIFVfU0JfRVRIX1JYX0NRX0lOREVYKSwKLQkJCWJwLT5yeF90aWNrcy8oNCAqIEJOWDJYX0JUUikpOwotCQlSRUdfV1IxNihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKLQkJCSBDU1RPUk1fU0JfSENfRElTQUJMRV9VX09GRlNFVChwb3J0LCBzYl9pZCwKLQkJCQkJCSAgICAgICBVX1NCX0VUSF9SWF9DUV9JTkRFWCksCi0JCQkgKGJwLT5yeF90aWNrcy8oNCAqIEJOWDJYX0JUUikpID8gMCA6IDEpOwotCi0JCS8qIEhDX0lOREVYX0NfRVRIX1RYX0NRX0NPTlMgKi8KLQkJUkVHX1dSOChicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKLQkJCUNTVE9STV9TQl9IQ19USU1FT1VUX0NfT0ZGU0VUKHBvcnQsIHNiX2lkLAotCQkJCQkJICAgICAgQ19TQl9FVEhfVFhfQ1FfSU5ERVgpLAotCQkJYnAtPnR4X3RpY2tzLyg0ICogQk5YMlhfQlRSKSk7Ci0JCVJFR19XUjE2KGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKwotCQkJIENTVE9STV9TQl9IQ19ESVNBQkxFX0NfT0ZGU0VUKHBvcnQsIHNiX2lkLAotCQkJCQkJICAgICAgIENfU0JfRVRIX1RYX0NRX0lOREVYKSwKLQkJCSAoYnAtPnR4X3RpY2tzLyg0ICogQk5YMlhfQlRSKSkgPyAwIDogMSk7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfZnJlZV90cGFfcG9vbChzdHJ1Y3QgYm54MnggKmJwLAotCQkJCSAgICAgICBzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwLCBpbnQgbGFzdCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBsYXN0OyBpKyspIHsKLQkJc3RydWN0IHN3X3J4X2JkICpyeF9idWYgPSAmKGZwLT50cGFfcG9vbFtpXSk7Ci0JCXN0cnVjdCBza19idWZmICpza2IgPSByeF9idWYtPnNrYjsKLQotCQlpZiAoc2tiID09IE5VTEwpIHsKLQkJCURQKE5FVElGX01TR19JRkRPV04sICJ0cGEgYmluICVkIGVtcHR5IG9uIGZyZWVcbiIsIGkpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoZnAtPnRwYV9zdGF0ZVtpXSA9PSBCTlgyWF9UUEFfU1RBUlQpCi0JCQlkbWFfdW5tYXBfc2luZ2xlKCZicC0+cGRldi0+ZGV2LAotCQkJCQkgZG1hX3VubWFwX2FkZHIocnhfYnVmLCBtYXBwaW5nKSwKLQkJCQkJIGJwLT5yeF9idWZfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTsKLQotCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJ4X2J1Zi0+c2tiID0gTlVMTDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2luaXRfcnhfcmluZ3Moc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOwotCWludCBtYXhfYWdnX3F1ZXVlcyA9IENISVBfSVNfRTEoYnApID8gRVRIX01BWF9BR0dSRUdBVElPTl9RVUVVRVNfRTEgOgotCQkJCQkgICAgICBFVEhfTUFYX0FHR1JFR0FUSU9OX1FVRVVFU19FMUg7Ci0JdTE2IHJpbmdfcHJvZCwgY3FlX3JpbmdfcHJvZDsKLQlpbnQgaSwgajsKLQotCWJwLT5yeF9idWZfc2l6ZSA9IGJwLT5kZXYtPm10dSArIEVUSF9PVlJFSEVBRCArIEJOWDJYX1JYX0FMSUdOOwotCURQKE5FVElGX01TR19JRlVQLAotCSAgICJtdHUgJWQgIHJ4X2J1Zl9zaXplICVkXG4iLCBicC0+ZGV2LT5tdHUsIGJwLT5yeF9idWZfc2l6ZSk7Ci0KLQlpZiAoYnAtPmZsYWdzICYgVFBBX0VOQUJMRV9GTEFHKSB7Ci0KLQkJZm9yX2VhY2hfcXVldWUoYnAsIGopIHsKLQkJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2pdOwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgbWF4X2FnZ19xdWV1ZXM7IGkrKykgewotCQkJCWZwLT50cGFfcG9vbFtpXS5za2IgPQotCQkJCSAgIG5ldGRldl9hbGxvY19za2IoYnAtPmRldiwgYnAtPnJ4X2J1Zl9zaXplKTsKLQkJCQlpZiAoIWZwLT50cGFfcG9vbFtpXS5za2IpIHsKLQkJCQkJQk5YMlhfRVJSKCJGYWlsZWQgdG8gYWxsb2NhdGUgVFBBICIKLQkJCQkJCSAgInNrYiBwb29sIGZvciBxdWV1ZVslZF0gLSAiCi0JCQkJCQkgICJkaXNhYmxpbmcgVFBBIG9uIHRoaXMgIgotCQkJCQkJICAicXVldWUhXG4iLCBqKTsKLQkJCQkJYm54MnhfZnJlZV90cGFfcG9vbChicCwgZnAsIGkpOwotCQkJCQlmcC0+ZGlzYWJsZV90cGEgPSAxOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJZG1hX3VubWFwX2FkZHJfc2V0KChzdHJ1Y3Qgc3dfcnhfYmQgKikKLQkJCQkJCQkmYnAtPmZwLT50cGFfcG9vbFtpXSwKLQkJCQkJCSAgIG1hcHBpbmcsIDApOwotCQkJCWZwLT50cGFfc3RhdGVbaV0gPSBCTlgyWF9UUEFfU1RPUDsKLQkJCX0KLQkJfQotCX0KLQotCWZvcl9lYWNoX3F1ZXVlKGJwLCBqKSB7Ci0JCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2pdOwotCi0JCWZwLT5yeF9iZF9jb25zID0gMDsKLQkJZnAtPnJ4X2NvbnNfc2IgPSBCTlgyWF9SWF9TQl9JTkRFWDsKLQkJZnAtPnJ4X2JkX2NvbnNfc2IgPSBCTlgyWF9SWF9TQl9CRF9JTkRFWDsKLQotCQkvKiAibmV4dCBwYWdlIiBlbGVtZW50cyBpbml0aWFsaXphdGlvbiAqLwotCQkvKiBTR0UgcmluZyAqLwotCQlmb3IgKGkgPSAxOyBpIDw9IE5VTV9SWF9TR0VfUEFHRVM7IGkrKykgewotCQkJc3RydWN0IGV0aF9yeF9zZ2UgKnNnZTsKLQotCQkJc2dlID0gJmZwLT5yeF9zZ2VfcmluZ1tSWF9TR0VfQ05UICogaSAtIDJdOwotCQkJc2dlLT5hZGRyX2hpID0KLQkJCQljcHVfdG9fbGUzMihVNjRfSEkoZnAtPnJ4X3NnZV9tYXBwaW5nICsKLQkJCQkJQkNNX1BBR0VfU0laRSooaSAlIE5VTV9SWF9TR0VfUEFHRVMpKSk7Ci0JCQlzZ2UtPmFkZHJfbG8gPQotCQkJCWNwdV90b19sZTMyKFU2NF9MTyhmcC0+cnhfc2dlX21hcHBpbmcgKwotCQkJCQlCQ01fUEFHRV9TSVpFKihpICUgTlVNX1JYX1NHRV9QQUdFUykpKTsKLQkJfQotCi0JCWJueDJ4X2luaXRfc2dlX3JpbmdfYml0X21hc2soZnApOwotCi0JCS8qIFJYIEJEIHJpbmcgKi8KLQkJZm9yIChpID0gMTsgaSA8PSBOVU1fUlhfUklOR1M7IGkrKykgewotCQkJc3RydWN0IGV0aF9yeF9iZCAqcnhfYmQ7Ci0KLQkJCXJ4X2JkID0gJmZwLT5yeF9kZXNjX3JpbmdbUlhfREVTQ19DTlQgKiBpIC0gMl07Ci0JCQlyeF9iZC0+YWRkcl9oaSA9Ci0JCQkJY3B1X3RvX2xlMzIoVTY0X0hJKGZwLT5yeF9kZXNjX21hcHBpbmcgKwotCQkJCQkgICAgQkNNX1BBR0VfU0laRSooaSAlIE5VTV9SWF9SSU5HUykpKTsKLQkJCXJ4X2JkLT5hZGRyX2xvID0KLQkJCQljcHVfdG9fbGUzMihVNjRfTE8oZnAtPnJ4X2Rlc2NfbWFwcGluZyArCi0JCQkJCSAgICBCQ01fUEFHRV9TSVpFKihpICUgTlVNX1JYX1JJTkdTKSkpOwotCQl9Ci0KLQkJLyogQ1EgcmluZyAqLwotCQlmb3IgKGkgPSAxOyBpIDw9IE5VTV9SQ1FfUklOR1M7IGkrKykgewotCQkJc3RydWN0IGV0aF9yeF9jcWVfbmV4dF9wYWdlICpuZXh0cGc7Ci0KLQkJCW5leHRwZyA9IChzdHJ1Y3QgZXRoX3J4X2NxZV9uZXh0X3BhZ2UgKikKLQkJCQkmZnAtPnJ4X2NvbXBfcmluZ1tSQ1FfREVTQ19DTlQgKiBpIC0gMV07Ci0JCQluZXh0cGctPmFkZHJfaGkgPQotCQkJCWNwdV90b19sZTMyKFU2NF9ISShmcC0+cnhfY29tcF9tYXBwaW5nICsKLQkJCQkJICAgQkNNX1BBR0VfU0laRSooaSAlIE5VTV9SQ1FfUklOR1MpKSk7Ci0JCQluZXh0cGctPmFkZHJfbG8gPQotCQkJCWNwdV90b19sZTMyKFU2NF9MTyhmcC0+cnhfY29tcF9tYXBwaW5nICsKLQkJCQkJICAgQkNNX1BBR0VfU0laRSooaSAlIE5VTV9SQ1FfUklOR1MpKSk7Ci0JCX0KLQotCQkvKiBBbGxvY2F0ZSBTR0VzIGFuZCBpbml0aWFsaXplIHRoZSByaW5nIGVsZW1lbnRzICovCi0JCWZvciAoaSA9IDAsIHJpbmdfcHJvZCA9IDA7Ci0JCSAgICAgaSA8IE1BWF9SWF9TR0VfQ05UKk5VTV9SWF9TR0VfUEFHRVM7IGkrKykgewotCi0JCQlpZiAoYm54MnhfYWxsb2Nfcnhfc2dlKGJwLCBmcCwgcmluZ19wcm9kKSA8IDApIHsKLQkJCQlCTlgyWF9FUlIoIndhcyBvbmx5IGFibGUgdG8gYWxsb2NhdGUgIgotCQkJCQkgICIlZCByeCBzZ2VzXG4iLCBpKTsKLQkJCQlCTlgyWF9FUlIoImRpc2FibGluZyBUUEEgZm9yIHF1ZXVlWyVkXVxuIiwgaik7Ci0JCQkJLyogQ2xlYW51cCBhbHJlYWR5IGFsbG9jYXRlZCBlbGVtZW50cyAqLwotCQkJCWJueDJ4X2ZyZWVfcnhfc2dlX3JhbmdlKGJwLCBmcCwgcmluZ19wcm9kKTsKLQkJCQlibngyeF9mcmVlX3RwYV9wb29sKGJwLCBmcCwgbWF4X2FnZ19xdWV1ZXMpOwotCQkJCWZwLT5kaXNhYmxlX3RwYSA9IDE7Ci0JCQkJcmluZ19wcm9kID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXJpbmdfcHJvZCA9IE5FWFRfU0dFX0lEWChyaW5nX3Byb2QpOwotCQl9Ci0JCWZwLT5yeF9zZ2VfcHJvZCA9IHJpbmdfcHJvZDsKLQotCQkvKiBBbGxvY2F0ZSBCRHMgYW5kIGluaXRpYWxpemUgQkQgcmluZyAqLwotCQlmcC0+cnhfY29tcF9jb25zID0gMDsKLQkJY3FlX3JpbmdfcHJvZCA9IHJpbmdfcHJvZCA9IDA7Ci0JCWZvciAoaSA9IDA7IGkgPCBicC0+cnhfcmluZ19zaXplOyBpKyspIHsKLQkJCWlmIChibngyeF9hbGxvY19yeF9za2IoYnAsIGZwLCByaW5nX3Byb2QpIDwgMCkgewotCQkJCUJOWDJYX0VSUigid2FzIG9ubHkgYWJsZSB0byBhbGxvY2F0ZSAiCi0JCQkJCSAgIiVkIHJ4IHNrYnMgb24gcXVldWVbJWRdXG4iLCBpLCBqKTsKLQkJCQlmcC0+ZXRoX3Ffc3RhdHMucnhfc2tiX2FsbG9jX2ZhaWxlZCsrOwotCQkJCWJyZWFrOwotCQkJfQotCQkJcmluZ19wcm9kID0gTkVYVF9SWF9JRFgocmluZ19wcm9kKTsKLQkJCWNxZV9yaW5nX3Byb2QgPSBORVhUX1JDUV9JRFgoY3FlX3JpbmdfcHJvZCk7Ci0JCQlXQVJOX09OKHJpbmdfcHJvZCA8PSBpKTsKLQkJfQotCi0JCWZwLT5yeF9iZF9wcm9kID0gcmluZ19wcm9kOwotCQkvKiBtdXN0IG5vdCBoYXZlIG1vcmUgYXZhaWxhYmxlIENRRXMgdGhhbiBCRHMgKi8KLQkJZnAtPnJ4X2NvbXBfcHJvZCA9IG1pbl90KHUxNiwgTlVNX1JDUV9SSU5HUypSQ1FfREVTQ19DTlQsCi0JCQkJCSBjcWVfcmluZ19wcm9kKTsKLQkJZnAtPnJ4X3BrdCA9IGZwLT5yeF9jYWxscyA9IDA7Ci0KLQkJLyogV2FybmluZyEKLQkJICogdGhpcyB3aWxsIGdlbmVyYXRlIGFuIGludGVycnVwdCAodG8gdGhlIFRTVE9STSkKLQkJICogbXVzdCBvbmx5IGJlIGRvbmUgYWZ0ZXIgY2hpcCBpcyBpbml0aWFsaXplZAotCQkgKi8KLQkJYm54MnhfdXBkYXRlX3J4X3Byb2QoYnAsIGZwLCByaW5nX3Byb2QsIGZwLT5yeF9jb21wX3Byb2QsCi0JCQkJICAgICBmcC0+cnhfc2dlX3Byb2QpOwotCQlpZiAoaiAhPSAwKQotCQkJY29udGludWU7Ci0KLQkJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwotCQkgICAgICAgVVNUT1JNX01FTV9XT1JLQVJPVU5EX0FERFJFU1NfT0ZGU0VUKGZ1bmMpLAotCQkgICAgICAgVTY0X0xPKGZwLT5yeF9jb21wX21hcHBpbmcpKTsKLQkJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwotCQkgICAgICAgVVNUT1JNX01FTV9XT1JLQVJPVU5EX0FERFJFU1NfT0ZGU0VUKGZ1bmMpICsgNCwKLQkJICAgICAgIFU2NF9ISShmcC0+cnhfY29tcF9tYXBwaW5nKSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBibngyeF9pbml0X3R4X3Jpbmcoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpbnQgaSwgajsKLQotCWZvcl9lYWNoX3F1ZXVlKGJwLCBqKSB7Ci0JCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2pdOwotCi0JCWZvciAoaSA9IDE7IGkgPD0gTlVNX1RYX1JJTkdTOyBpKyspIHsKLQkJCXN0cnVjdCBldGhfdHhfbmV4dF9iZCAqdHhfbmV4dF9iZCA9Ci0JCQkJJmZwLT50eF9kZXNjX3JpbmdbVFhfREVTQ19DTlQgKiBpIC0gMV0ubmV4dF9iZDsKLQotCQkJdHhfbmV4dF9iZC0+YWRkcl9oaSA9Ci0JCQkJY3B1X3RvX2xlMzIoVTY0X0hJKGZwLT50eF9kZXNjX21hcHBpbmcgKwotCQkJCQkgICAgQkNNX1BBR0VfU0laRSooaSAlIE5VTV9UWF9SSU5HUykpKTsKLQkJCXR4X25leHRfYmQtPmFkZHJfbG8gPQotCQkJCWNwdV90b19sZTMyKFU2NF9MTyhmcC0+dHhfZGVzY19tYXBwaW5nICsKLQkJCQkJICAgIEJDTV9QQUdFX1NJWkUqKGkgJSBOVU1fVFhfUklOR1MpKSk7Ci0JCX0KLQotCQlmcC0+dHhfZGIuZGF0YS5oZWFkZXIuaGVhZGVyID0gRE9PUkJFTExfSERSX0RCX1RZUEU7Ci0JCWZwLT50eF9kYi5kYXRhLnplcm9fZmlsbDEgPSAwOwotCQlmcC0+dHhfZGIuZGF0YS5wcm9kID0gMDsKLQotCQlmcC0+dHhfcGt0X3Byb2QgPSAwOwotCQlmcC0+dHhfcGt0X2NvbnMgPSAwOwotCQlmcC0+dHhfYmRfcHJvZCA9IDA7Ci0JCWZwLT50eF9iZF9jb25zID0gMDsKLQkJZnAtPnR4X2NvbnNfc2IgPSBCTlgyWF9UWF9TQl9JTkRFWDsKLQkJZnAtPnR4X3BrdCA9IDA7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBibngyeF9pbml0X3NwX3Jpbmcoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOwotCi0Jc3Bpbl9sb2NrX2luaXQoJmJwLT5zcHFfbG9jayk7Ci0KLQlicC0+c3BxX2xlZnQgPSBNQVhfU1BRX1BFTkRJTkc7Ci0JYnAtPnNwcV9wcm9kX2lkeCA9IDA7Ci0JYnAtPmRzYl9zcF9wcm9kID0gQk5YMlhfU1BfRFNCX0lOREVYOwotCWJwLT5zcHFfcHJvZF9iZCA9IGJwLT5zcHE7Ci0JYnAtPnNwcV9sYXN0X2JkID0gYnAtPnNwcV9wcm9kX2JkICsgTUFYX1NQX0RFU0NfQ05UOwotCi0JUkVHX1dSKGJwLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIFhTVE9STV9TUFFfUEFHRV9CQVNFX09GRlNFVChmdW5jKSwKLQkgICAgICAgVTY0X0xPKGJwLT5zcHFfbWFwcGluZykpOwotCVJFR19XUihicCwKLQkgICAgICAgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyBYU1RPUk1fU1BRX1BBR0VfQkFTRV9PRkZTRVQoZnVuYykgKyA0LAotCSAgICAgICBVNjRfSEkoYnAtPnNwcV9tYXBwaW5nKSk7Ci0KLQlSRUdfV1IoYnAsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgWFNUT1JNX1NQUV9QUk9EX09GRlNFVChmdW5jKSwKLQkgICAgICAgYnAtPnNwcV9wcm9kX2lkeCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2luaXRfY29udGV4dChzdHJ1Y3QgYm54MnggKmJwKQotewotCWludCBpOwotCi0JLyogUnggKi8KLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgewotCQlzdHJ1Y3QgZXRoX2NvbnRleHQgKmNvbnRleHQgPSBibngyeF9zcChicCwgY29udGV4dFtpXS5ldGgpOwotCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKLQkJdTggY2xfaWQgPSBmcC0+Y2xfaWQ7Ci0KLQkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLnNiX2luZGV4X251bWJlcnMgPQotCQkJCQkJQk5YMlhfUlhfU0JfSU5ERVhfTlVNOwotCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uY2xpZW50SWQgPSBjbF9pZDsKLQkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLnN0YXR1c19ibG9ja19pZCA9IGZwLT5zYl9pZDsKLQkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLmZsYWdzID0KLQkJCShVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9NQ19BTElHTk1FTlQgfAotCQkJIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1NUQVRJU1RJQ1MpOwotCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uc3RhdGlzdGljc19jb3VudGVyX2lkID0KLQkJCQkJCWNsX2lkOwotCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24ubWNfYWxpZ25tZW50X2xvZ19zaXplID0KLQkJCQkJCUJOWDJYX1JYX0FMSUdOX1NISUZUOwotCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uYmRfYnVmZl9zaXplID0KLQkJCQkJCWJwLT5yeF9idWZfc2l6ZTsKLQkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLmJkX3BhZ2VfYmFzZV9oaSA9Ci0JCQkJCQlVNjRfSEkoZnAtPnJ4X2Rlc2NfbWFwcGluZyk7Ci0JCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5iZF9wYWdlX2Jhc2VfbG8gPQotCQkJCQkJVTY0X0xPKGZwLT5yeF9kZXNjX21hcHBpbmcpOwotCQlpZiAoIWZwLT5kaXNhYmxlX3RwYSkgewotCQkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLmZsYWdzIHw9Ci0JCQkJVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfVFBBOwotCQkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLnNnZV9idWZmX3NpemUgPQotCQkJCSh1MTYpbWluX3QodTMyLCBTR0VfUEFHRV9TSVpFKlBBR0VTX1BFUl9TR0UsCi0JCQkJCSAgIDB4ZmZmZik7Ci0JCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uc2dlX3BhZ2VfYmFzZV9oaSA9Ci0JCQkJCQlVNjRfSEkoZnAtPnJ4X3NnZV9tYXBwaW5nKTsKLQkJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5zZ2VfcGFnZV9iYXNlX2xvID0KLQkJCQkJCVU2NF9MTyhmcC0+cnhfc2dlX21hcHBpbmcpOwotCi0JCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24ubWF4X3NnZXNfZm9yX3BhY2tldCA9Ci0JCQkJU0dFX1BBR0VfQUxJR04oYnAtPmRldi0+bXR1KSA+PiBTR0VfUEFHRV9TSElGVDsKLQkJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5tYXhfc2dlc19mb3JfcGFja2V0ID0KLQkJCQkoKGNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi4KLQkJCQkgIG1heF9zZ2VzX2Zvcl9wYWNrZXQgKyBQQUdFU19QRVJfU0dFIC0gMSkgJgotCQkJCSAofihQQUdFU19QRVJfU0dFIC0gMSkpKSA+PiBQQUdFU19QRVJfU0dFX1NISUZUOwotCQl9Ci0KLQkJY29udGV4dC0+dXN0b3JtX2FnX2NvbnRleHQuY2R1X3VzYWdlID0KLQkJCUNEVV9SU1JWRF9WQUxVRV9UWVBFX0EoSFdfQ0lEKGJwLCBpKSwKLQkJCQkJICAgICAgIENEVV9SRUdJT05fTlVNQkVSX1VDTV9BRywKLQkJCQkJICAgICAgIEVUSF9DT05ORUNUSU9OX1RZUEUpOwotCi0JCWNvbnRleHQtPnhzdG9ybV9hZ19jb250ZXh0LmNkdV9yZXNlcnZlZCA9Ci0JCQlDRFVfUlNSVkRfVkFMVUVfVFlQRV9BKEhXX0NJRChicCwgaSksCi0JCQkJCSAgICAgICBDRFVfUkVHSU9OX05VTUJFUl9YQ01fQUcsCi0JCQkJCSAgICAgICBFVEhfQ09OTkVDVElPTl9UWVBFKTsKLQl9Ci0KLQkvKiBUeCAqLwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7Ci0JCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwotCQlzdHJ1Y3QgZXRoX2NvbnRleHQgKmNvbnRleHQgPQotCQkJYm54Mnhfc3AoYnAsIGNvbnRleHRbaV0uZXRoKTsKLQotCQljb250ZXh0LT5jc3Rvcm1fc3RfY29udGV4dC5zYl9pbmRleF9udW1iZXIgPQotCQkJCQkJQ19TQl9FVEhfVFhfQ1FfSU5ERVg7Ci0JCWNvbnRleHQtPmNzdG9ybV9zdF9jb250ZXh0LnN0YXR1c19ibG9ja19pZCA9IGZwLT5zYl9pZDsKLQotCQljb250ZXh0LT54c3Rvcm1fc3RfY29udGV4dC50eF9iZF9wYWdlX2Jhc2VfaGkgPQotCQkJCQkJVTY0X0hJKGZwLT50eF9kZXNjX21hcHBpbmcpOwotCQljb250ZXh0LT54c3Rvcm1fc3RfY29udGV4dC50eF9iZF9wYWdlX2Jhc2VfbG8gPQotCQkJCQkJVTY0X0xPKGZwLT50eF9kZXNjX21hcHBpbmcpOwotCQljb250ZXh0LT54c3Rvcm1fc3RfY29udGV4dC5zdGF0aXN0aWNzX2RhdGEgPSAoZnAtPmNsX2lkIHwKLQkJCQlYU1RPUk1fRVRIX1NUX0NPTlRFWFRfU1RBVElTVElDU19FTkFCTEUpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYm54MnhfaW5pdF9pbmRfdGFibGUoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOwotCWludCBpOwotCi0JaWYgKGJwLT5tdWx0aV9tb2RlID09IEVUSF9SU1NfTU9ERV9ESVNBQkxFRCkKLQkJcmV0dXJuOwotCi0JRFAoTkVUSUZfTVNHX0lGVVAsCi0JICAgIkluaXRpYWxpemluZyBpbmRpcmVjdGlvbiB0YWJsZSAgbXVsdGlfbW9kZSAlZFxuIiwgYnAtPm11bHRpX21vZGUpOwotCWZvciAoaSA9IDA7IGkgPCBUU1RPUk1fSU5ESVJFQ1RJT05fVEFCTEVfU0laRTsgaSsrKQotCQlSRUdfV1I4KGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKwotCQkJVFNUT1JNX0lORElSRUNUSU9OX1RBQkxFX09GRlNFVChmdW5jKSArIGksCi0JCQlicC0+ZnAtPmNsX2lkICsgKGkgJSBicC0+bnVtX3F1ZXVlcykpOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9zZXRfY2xpZW50X2NvbmZpZyhzdHJ1Y3QgYm54MnggKmJwKQotewotCXN0cnVjdCB0c3Rvcm1fZXRoX2NsaWVudF9jb25maWcgdHN0b3JtX2NsaWVudCA9IHswfTsKLQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwotCWludCBpOwotCi0JdHN0b3JtX2NsaWVudC5tdHUgPSBicC0+ZGV2LT5tdHU7Ci0JdHN0b3JtX2NsaWVudC5jb25maWdfZmxhZ3MgPQotCQkJCShUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfU1RBVFNJVElDU19FTkFCTEUgfAotCQkJCSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRTFIT1ZfUkVNX0VOQUJMRSk7Ci0jaWZkZWYgQkNNX1ZMQU4KLQlpZiAoYnAtPnJ4X21vZGUgJiYgYnAtPnZsZ3JwICYmIChicC0+ZmxhZ3MgJiBIV19WTEFOX1JYX0ZMQUcpKSB7Ci0JCXRzdG9ybV9jbGllbnQuY29uZmlnX2ZsYWdzIHw9Ci0JCQkJVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1ZMQU5fUkVNX0VOQUJMRTsKLQkJRFAoTkVUSUZfTVNHX0lGVVAsICJ2bGFuIHJlbW92YWwgZW5hYmxlZFxuIik7Ci0JfQotI2VuZGlmCi0KLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgewotCQl0c3Rvcm1fY2xpZW50LnN0YXRpc3RpY3NfY291bnRlcl9pZCA9IGJwLT5mcFtpXS5jbF9pZDsKLQotCQlSRUdfV1IoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCi0JCSAgICAgICBUU1RPUk1fQ0xJRU5UX0NPTkZJR19PRkZTRVQocG9ydCwgYnAtPmZwW2ldLmNsX2lkKSwKLQkJICAgICAgICgodTMyICopJnRzdG9ybV9jbGllbnQpWzBdKTsKLQkJUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKwotCQkgICAgICAgVFNUT1JNX0NMSUVOVF9DT05GSUdfT0ZGU0VUKHBvcnQsIGJwLT5mcFtpXS5jbF9pZCkgKyA0LAotCQkgICAgICAgKCh1MzIgKikmdHN0b3JtX2NsaWVudClbMV0pOwotCX0KLQotCURQKEJOWDJYX01TR19PRkYsICJ0c3Rvcm1fY2xpZW50OiAweCUwOHggMHglMDh4XG4iLAotCSAgICgodTMyICopJnRzdG9ybV9jbGllbnQpWzBdLCAoKHUzMiAqKSZ0c3Rvcm1fY2xpZW50KVsxXSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X3NldF9zdG9ybV9yeF9tb2RlKHN0cnVjdCBibngyeCAqYnApCi17Ci0Jc3RydWN0IHRzdG9ybV9ldGhfbWFjX2ZpbHRlcl9jb25maWcgdHN0b3JtX21hY19maWx0ZXIgPSB7MH07Ci0JaW50IG1vZGUgPSBicC0+cnhfbW9kZTsKLQlpbnQgbWFzayA9IGJwLT5yeF9tb2RlX2NsX21hc2s7Ci0JaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKLQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwotCWludCBpOwotCS8qIEFsbCBidXQgbWFuYWdlbWVudCB1bmljYXN0IHBhY2tldHMgc2hvdWxkIHBhc3MgdG8gdGhlIGhvc3QgYXMgd2VsbCAqLwotCXUzMiBsbGhfbWFzayA9Ci0JCU5JR19MTEgwX0JSQjFfRFJWX01BU0tfUkVHX0xMSDBfQlJCMV9EUlZfTUFTS19CUkNTVCB8Ci0JCU5JR19MTEgwX0JSQjFfRFJWX01BU0tfUkVHX0xMSDBfQlJCMV9EUlZfTUFTS19NTENTVCB8Ci0JCU5JR19MTEgwX0JSQjFfRFJWX01BU0tfUkVHX0xMSDBfQlJCMV9EUlZfTUFTS19WTEFOIHwKLQkJTklHX0xMSDBfQlJCMV9EUlZfTUFTS19SRUdfTExIMF9CUkIxX0RSVl9NQVNLX05PX1ZMQU47Ci0KLQlEUChORVRJRl9NU0dfSUZVUCwgInJ4IG1vZGUgJWQgIG1hc2sgMHgleFxuIiwgbW9kZSwgbWFzayk7Ci0KLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIEJOWDJYX1JYX01PREVfTk9ORTogLyogbm8gUnggKi8KLQkJdHN0b3JtX21hY19maWx0ZXIudWNhc3RfZHJvcF9hbGwgPSBtYXNrOwotCQl0c3Rvcm1fbWFjX2ZpbHRlci5tY2FzdF9kcm9wX2FsbCA9IG1hc2s7Ci0JCXRzdG9ybV9tYWNfZmlsdGVyLmJjYXN0X2Ryb3BfYWxsID0gbWFzazsKLQkJYnJlYWs7Ci0KLQljYXNlIEJOWDJYX1JYX01PREVfTk9STUFMOgotCQl0c3Rvcm1fbWFjX2ZpbHRlci5iY2FzdF9hY2NlcHRfYWxsID0gbWFzazsKLQkJYnJlYWs7Ci0KLQljYXNlIEJOWDJYX1JYX01PREVfQUxMTVVMVEk6Ci0JCXRzdG9ybV9tYWNfZmlsdGVyLm1jYXN0X2FjY2VwdF9hbGwgPSBtYXNrOwotCQl0c3Rvcm1fbWFjX2ZpbHRlci5iY2FzdF9hY2NlcHRfYWxsID0gbWFzazsKLQkJYnJlYWs7Ci0KLQljYXNlIEJOWDJYX1JYX01PREVfUFJPTUlTQzoKLQkJdHN0b3JtX21hY19maWx0ZXIudWNhc3RfYWNjZXB0X2FsbCA9IG1hc2s7Ci0JCXRzdG9ybV9tYWNfZmlsdGVyLm1jYXN0X2FjY2VwdF9hbGwgPSBtYXNrOwotCQl0c3Rvcm1fbWFjX2ZpbHRlci5iY2FzdF9hY2NlcHRfYWxsID0gbWFzazsKLQkJLyogcGFzcyBtYW5hZ2VtZW50IHVuaWNhc3QgcGFja2V0cyBhcyB3ZWxsICovCi0JCWxsaF9tYXNrIHw9IE5JR19MTEgwX0JSQjFfRFJWX01BU0tfUkVHX0xMSDBfQlJCMV9EUlZfTUFTS19VTkNTVDsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlCTlgyWF9FUlIoIkJBRCByeCBtb2RlICglZClcbiIsIG1vZGUpOwotCQlicmVhazsKLQl9Ci0KLQlSRUdfV1IoYnAsCi0JICAgICAgIChwb3J0ID8gTklHX1JFR19MTEgxX0JSQjFfRFJWX01BU0sgOiBOSUdfUkVHX0xMSDBfQlJCMV9EUlZfTUFTSyksCi0JICAgICAgIGxsaF9tYXNrKTsKLQotCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHRzdG9ybV9ldGhfbWFjX2ZpbHRlcl9jb25maWcpLzQ7IGkrKykgewotCQlSRUdfV1IoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCi0JCSAgICAgICBUU1RPUk1fTUFDX0ZJTFRFUl9DT05GSUdfT0ZGU0VUKGZ1bmMpICsgaSAqIDQsCi0JCSAgICAgICAoKHUzMiAqKSZ0c3Rvcm1fbWFjX2ZpbHRlcilbaV0pOwotCi0vKgkJRFAoTkVUSUZfTVNHX0lGVVAsICJ0c3Rvcm1fbWFjX2ZpbHRlclslZF06IDB4JTA4eFxuIiwgaSwKLQkJICAgKCh1MzIgKikmdHN0b3JtX21hY19maWx0ZXIpW2ldKTsgKi8KLQl9Ci0KLQlpZiAobW9kZSAhPSBCTlgyWF9SWF9NT0RFX05PTkUpCi0JCWJueDJ4X3NldF9jbGllbnRfY29uZmlnKGJwKTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfaW5pdF9pbnRlcm5hbF9jb21tb24oc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpbnQgaTsKLQotCS8qIFplcm8gdGhpcyBtYW51YWxseSBhcyBpdHMgaW5pdGlhbGl6YXRpb24gaXMKLQkgICBjdXJyZW50bHkgbWlzc2luZyBpbiB0aGUgaW5pdFRvb2wgKi8KLQlmb3IgKGkgPSAwOyBpIDwgKFVTVE9STV9BR0dfREFUQV9TSVpFID4+IDIpOyBpKyspCi0JCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkJICAgICAgIFVTVE9STV9BR0dfREFUQV9PRkZTRVQgKyBpICogNCwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2luaXRfaW50ZXJuYWxfcG9ydChzdHJ1Y3QgYm54MnggKmJwKQotewotCWludCBwb3J0ID0gQlBfUE9SVChicCk7Ci0KLQlSRUdfV1IoYnAsCi0JICAgICAgIEJBUl9DU1RST1JNX0lOVE1FTSArIENTVE9STV9IQ19CVFJfVV9PRkZTRVQocG9ydCksIEJOWDJYX0JUUik7Ci0JUkVHX1dSKGJwLAotCSAgICAgICBCQVJfQ1NUUk9STV9JTlRNRU0gKyBDU1RPUk1fSENfQlRSX0NfT0ZGU0VUKHBvcnQpLCBCTlgyWF9CVFIpOwotCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsgVFNUT1JNX0hDX0JUUl9PRkZTRVQocG9ydCksIEJOWDJYX0JUUik7Ci0JUkVHX1dSKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKyBYU1RPUk1fSENfQlRSX09GRlNFVChwb3J0KSwgQk5YMlhfQlRSKTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfaW5pdF9pbnRlcm5hbF9mdW5jKHN0cnVjdCBibngyeCAqYnApCi17Ci0Jc3RydWN0IHRzdG9ybV9ldGhfZnVuY3Rpb25fY29tbW9uX2NvbmZpZyB0c3Rvcm1fY29uZmlnID0gezB9OwotCXN0cnVjdCBzdGF0c19pbmRpY2F0aW9uX2ZsYWdzIHN0YXRzX2ZsYWdzID0gezB9OwotCWludCBwb3J0ID0gQlBfUE9SVChicCk7Ci0JaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKLQlpbnQgaSwgajsKLQl1MzIgb2Zmc2V0OwotCXUxNiBtYXhfYWdnX3NpemU7Ci0KLQl0c3Rvcm1fY29uZmlnLmNvbmZpZ19mbGFncyA9IFJTU19GTEFHUyhicCk7Ci0KLQlpZiAoaXNfbXVsdGkoYnApKQotCQl0c3Rvcm1fY29uZmlnLnJzc19yZXN1bHRfbWFzayA9IE1VTFRJX01BU0s7Ci0KLQkvKiBFbmFibGUgVFBBIGlmIG5lZWRlZCAqLwotCWlmIChicC0+ZmxhZ3MgJiBUUEFfRU5BQkxFX0ZMQUcpCi0JCXRzdG9ybV9jb25maWcuY29uZmlnX2ZsYWdzIHw9Ci0JCQlUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfRU5BQkxFX1RQQTsKLQotCWlmIChJU19FMUhNRihicCkpCi0JCXRzdG9ybV9jb25maWcuY29uZmlnX2ZsYWdzIHw9Ci0JCQkJVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0UxSE9WX0lOX0NBTTsKLQotCXRzdG9ybV9jb25maWcubGVhZGluZ19jbGllbnRfaWQgPSBCUF9MX0lEKGJwKTsKLQotCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKLQkgICAgICAgVFNUT1JNX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfT0ZGU0VUKGZ1bmMpLAotCSAgICAgICAoKih1MzIgKikmdHN0b3JtX2NvbmZpZykpOwotCi0JYnAtPnJ4X21vZGUgPSBCTlgyWF9SWF9NT0RFX05PTkU7IC8qIG5vIHJ4IHVudGlsIGxpbmsgaXMgdXAgKi8KLQlicC0+cnhfbW9kZV9jbF9tYXNrID0gKDEgPDwgQlBfTF9JRChicCkpOwotCWJueDJ4X3NldF9zdG9ybV9yeF9tb2RlKGJwKTsKLQotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7Ci0JCXU4IGNsX2lkID0gYnAtPmZwW2ldLmNsX2lkOwotCi0JCS8qIHJlc2V0IHhzdG9ybSBwZXIgY2xpZW50IHN0YXRpc3RpY3MgKi8KLQkJb2Zmc2V0ID0gQkFSX1hTVFJPUk1fSU5UTUVNICsKLQkJCSBYU1RPUk1fUEVSX0NPVU5URVJfSURfU1RBVFNfT0ZGU0VUKHBvcnQsIGNsX2lkKTsKLQkJZm9yIChqID0gMDsKLQkJICAgICBqIDwgc2l6ZW9mKHN0cnVjdCB4c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykgLyA0OyBqKyspCi0JCQlSRUdfV1IoYnAsIG9mZnNldCArIGoqNCwgMCk7Ci0KLQkJLyogcmVzZXQgdHN0b3JtIHBlciBjbGllbnQgc3RhdGlzdGljcyAqLwotCQlvZmZzZXQgPSBCQVJfVFNUUk9STV9JTlRNRU0gKwotCQkJIFRTVE9STV9QRVJfQ09VTlRFUl9JRF9TVEFUU19PRkZTRVQocG9ydCwgY2xfaWQpOwotCQlmb3IgKGogPSAwOwotCQkgICAgIGogPCBzaXplb2Yoc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSAvIDQ7IGorKykKLQkJCVJFR19XUihicCwgb2Zmc2V0ICsgaio0LCAwKTsKLQotCQkvKiByZXNldCB1c3Rvcm0gcGVyIGNsaWVudCBzdGF0aXN0aWNzICovCi0JCW9mZnNldCA9IEJBUl9VU1RST1JNX0lOVE1FTSArCi0JCQkgVVNUT1JNX1BFUl9DT1VOVEVSX0lEX1NUQVRTX09GRlNFVChwb3J0LCBjbF9pZCk7Ci0JCWZvciAoaiA9IDA7Ci0JCSAgICAgaiA8IHNpemVvZihzdHJ1Y3QgdXN0b3JtX3Blcl9jbGllbnRfc3RhdHMpIC8gNDsgaisrKQotCQkJUkVHX1dSKGJwLCBvZmZzZXQgKyBqKjQsIDApOwotCX0KLQotCS8qIEluaXQgc3RhdGlzdGljcyByZWxhdGVkIGNvbnRleHQgKi8KLQlzdGF0c19mbGFncy5jb2xsZWN0X2V0aCA9IDE7Ci0KLQlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArIFhTVE9STV9TVEFUU19GTEFHU19PRkZTRVQoZnVuYyksCi0JICAgICAgICgodTMyICopJnN0YXRzX2ZsYWdzKVswXSk7Ci0JUkVHX1dSKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKyBYU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKGZ1bmMpICsgNCwKLQkgICAgICAgKCh1MzIgKikmc3RhdHNfZmxhZ3MpWzFdKTsKLQotCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsgVFNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChmdW5jKSwKLQkgICAgICAgKCh1MzIgKikmc3RhdHNfZmxhZ3MpWzBdKTsKLQlSRUdfV1IoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArIFRTVE9STV9TVEFUU19GTEFHU19PRkZTRVQoZnVuYykgKyA0LAotCSAgICAgICAoKHUzMiAqKSZzdGF0c19mbGFncylbMV0pOwotCi0JUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKyBVU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKGZ1bmMpLAotCSAgICAgICAoKHUzMiAqKSZzdGF0c19mbGFncylbMF0pOwotCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsgVVNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChmdW5jKSArIDQsCi0JICAgICAgICgodTMyICopJnN0YXRzX2ZsYWdzKVsxXSk7Ci0KLQlSRUdfV1IoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArIENTVE9STV9TVEFUU19GTEFHU19PRkZTRVQoZnVuYyksCi0JICAgICAgICgodTMyICopJnN0YXRzX2ZsYWdzKVswXSk7Ci0JUkVHX1dSKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKyBDU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKGZ1bmMpICsgNCwKLQkgICAgICAgKCh1MzIgKikmc3RhdHNfZmxhZ3MpWzFdKTsKLQotCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsKLQkgICAgICAgWFNUT1JNX0VUSF9TVEFUU19RVUVSWV9BRERSX09GRlNFVChmdW5jKSwKLQkgICAgICAgVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIGZ3X3N0YXRzKSkpOwotCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsKLQkgICAgICAgWFNUT1JNX0VUSF9TVEFUU19RVUVSWV9BRERSX09GRlNFVChmdW5jKSArIDQsCi0JICAgICAgIFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBmd19zdGF0cykpKTsKLQotCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKLQkgICAgICAgVFNUT1JNX0VUSF9TVEFUU19RVUVSWV9BRERSX09GRlNFVChmdW5jKSwKLQkgICAgICAgVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIGZ3X3N0YXRzKSkpOwotCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKLQkgICAgICAgVFNUT1JNX0VUSF9TVEFUU19RVUVSWV9BRERSX09GRlNFVChmdW5jKSArIDQsCi0JICAgICAgIFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBmd19zdGF0cykpKTsKLQotCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkgICAgICAgVVNUT1JNX0VUSF9TVEFUU19RVUVSWV9BRERSX09GRlNFVChmdW5jKSwKLQkgICAgICAgVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIGZ3X3N0YXRzKSkpOwotCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkgICAgICAgVVNUT1JNX0VUSF9TVEFUU19RVUVSWV9BRERSX09GRlNFVChmdW5jKSArIDQsCi0JICAgICAgIFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBmd19zdGF0cykpKTsKLQotCWlmIChDSElQX0lTX0UxSChicCkpIHsKLQkJUkVHX1dSOChicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsgWFNUT1JNX0ZVTkNUSU9OX01PREVfT0ZGU0VULAotCQkJSVNfRTFITUYoYnApKTsKLQkJUkVHX1dSOChicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsgVFNUT1JNX0ZVTkNUSU9OX01PREVfT0ZGU0VULAotCQkJSVNfRTFITUYoYnApKTsKLQkJUkVHX1dSOChicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsgQ1NUT1JNX0ZVTkNUSU9OX01PREVfT0ZGU0VULAotCQkJSVNfRTFITUYoYnApKTsKLQkJUkVHX1dSOChicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsgVVNUT1JNX0ZVTkNUSU9OX01PREVfT0ZGU0VULAotCQkJSVNfRTFITUYoYnApKTsKLQotCQlSRUdfV1IxNihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsgWFNUT1JNX0UxSE9WX09GRlNFVChmdW5jKSwKLQkJCSBicC0+ZTFob3YpOwotCX0KLQotCS8qIEluaXQgQ1EgcmluZyBtYXBwaW5nIGFuZCBhZ2dyZWdhdGlvbiBzaXplLCB0aGUgRlcgbGltaXQgaXMgOCBmcmFncyAqLwotCW1heF9hZ2dfc2l6ZSA9IG1pbl90KHUzMiwgKG1pbl90KHUzMiwgOCwgTUFYX1NLQl9GUkFHUykgKgotCQkJCSAgIFNHRV9QQUdFX1NJWkUgKiBQQUdFU19QRVJfU0dFKSwgMHhmZmZmKTsKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgewotCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKLQotCQlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCi0JCSAgICAgICBVU1RPUk1fQ1FFX1BBR0VfQkFTRV9PRkZTRVQocG9ydCwgZnAtPmNsX2lkKSwKLQkJICAgICAgIFU2NF9MTyhmcC0+cnhfY29tcF9tYXBwaW5nKSk7Ci0JCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkJICAgICAgIFVTVE9STV9DUUVfUEFHRV9CQVNFX09GRlNFVChwb3J0LCBmcC0+Y2xfaWQpICsgNCwKLQkJICAgICAgIFU2NF9ISShmcC0+cnhfY29tcF9tYXBwaW5nKSk7Ci0KLQkJLyogTmV4dCBwYWdlICovCi0JCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkJICAgICAgIFVTVE9STV9DUUVfUEFHRV9ORVhUX09GRlNFVChwb3J0LCBmcC0+Y2xfaWQpLAotCQkgICAgICAgVTY0X0xPKGZwLT5yeF9jb21wX21hcHBpbmcgKyBCQ01fUEFHRV9TSVpFKSk7Ci0JCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkJICAgICAgIFVTVE9STV9DUUVfUEFHRV9ORVhUX09GRlNFVChwb3J0LCBmcC0+Y2xfaWQpICsgNCwKLQkJICAgICAgIFU2NF9ISShmcC0+cnhfY29tcF9tYXBwaW5nICsgQkNNX1BBR0VfU0laRSkpOwotCi0JCVJFR19XUjE2KGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwotCQkJIFVTVE9STV9NQVhfQUdHX1NJWkVfT0ZGU0VUKHBvcnQsIGZwLT5jbF9pZCksCi0JCQkgbWF4X2FnZ19zaXplKTsKLQl9Ci0KLQkvKiBkcm9wbGVzcyBmbG93IGNvbnRyb2wgKi8KLQlpZiAoQ0hJUF9JU19FMUgoYnApKSB7Ci0JCXN0cnVjdCB1c3Rvcm1fZXRoX3J4X3BhdXNlX2RhdGFfZTFoIHJ4X3BhdXNlID0gezB9OwotCi0JCXJ4X3BhdXNlLmJkX3Rocl9sb3cgPSAyNTA7Ci0JCXJ4X3BhdXNlLmNxZV90aHJfbG93ID0gMjUwOwotCQlyeF9wYXVzZS5jb3MgPSAxOwotCQlyeF9wYXVzZS5zZ2VfdGhyX2xvdyA9IDA7Ci0JCXJ4X3BhdXNlLmJkX3Rocl9oaWdoID0gMzUwOwotCQlyeF9wYXVzZS5jcWVfdGhyX2hpZ2ggPSAzNTA7Ci0JCXJ4X3BhdXNlLnNnZV90aHJfaGlnaCA9IDA7Ci0KLQkJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKLQkJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwotCi0JCQlpZiAoIWZwLT5kaXNhYmxlX3RwYSkgewotCQkJCXJ4X3BhdXNlLnNnZV90aHJfbG93ID0gMTUwOwotCQkJCXJ4X3BhdXNlLnNnZV90aHJfaGlnaCA9IDI1MDsKLQkJCX0KLQotCi0JCQlvZmZzZXQgPSBCQVJfVVNUUk9STV9JTlRNRU0gKwotCQkJCSBVU1RPUk1fRVRIX1JJTkdfUEFVU0VfREFUQV9PRkZTRVQocG9ydCwKLQkJCQkJCQkJICAgZnAtPmNsX2lkKTsKLQkJCWZvciAoaiA9IDA7Ci0JCQkgICAgIGogPCBzaXplb2Yoc3RydWN0IHVzdG9ybV9ldGhfcnhfcGF1c2VfZGF0YV9lMWgpLzQ7Ci0JCQkgICAgIGorKykKLQkJCQlSRUdfV1IoYnAsIG9mZnNldCArIGoqNCwKLQkJCQkgICAgICAgKCh1MzIgKikmcnhfcGF1c2UpW2pdKTsKLQkJfQotCX0KLQotCW1lbXNldCgmKGJwLT5jbW5nKSwgMCwgc2l6ZW9mKHN0cnVjdCBjbW5nX3N0cnVjdF9wZXJfcG9ydCkpOwotCi0JLyogSW5pdCByYXRlIHNoYXBpbmcgYW5kIGZhaXJuZXNzIGNvbnRleHRzICovCi0JaWYgKElTX0UxSE1GKGJwKSkgewotCQlpbnQgdm47Ci0KLQkJLyogRHVyaW5nIGluaXQgdGhlcmUgaXMgbm8gYWN0aXZlIGxpbmsKLQkJICAgVW50aWwgbGluayBpcyB1cCwgc2V0IGxpbmsgcmF0ZSB0byAxMEdicHMgKi8KLQkJYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkID0gU1BFRURfMTAwMDA7Ci0JCWJueDJ4X2luaXRfcG9ydF9taW5tYXgoYnApOwotCi0JCWlmICghQlBfTk9NQ1AoYnApKQotCQkJYnAtPm1mX2NvbmZpZyA9Ci0JCQkgICAgICBTSE1FTV9SRChicCwgbWZfY2ZnLmZ1bmNfbWZfY29uZmlnW2Z1bmNdLmNvbmZpZyk7Ci0JCWJueDJ4X2NhbGNfdm5fd2VpZ2h0X3N1bShicCk7Ci0KLQkJZm9yICh2biA9IFZOXzA7IHZuIDwgRTFIVk5fTUFYOyB2bisrKQotCQkJYm54MnhfaW5pdF92bl9taW5tYXgoYnAsIDIqdm4gKyBwb3J0KTsKLQotCQkvKiBFbmFibGUgcmF0ZSBzaGFwaW5nIGFuZCBmYWlybmVzcyAqLwotCQlicC0+Y21uZy5mbGFncy5jbW5nX2VuYWJsZXMgfD0KLQkJCQkJQ01OR19GTEFHU19QRVJfUE9SVF9SQVRFX1NIQVBJTkdfVk47Ci0KLQl9IGVsc2UgewotCQkvKiByYXRlIHNoYXBpbmcgYW5kIGZhaXJuZXNzIGFyZSBkaXNhYmxlZCAqLwotCQlEUChORVRJRl9NU0dfSUZVUCwKLQkJICAgInNpbmdsZSBmdW5jdGlvbiBtb2RlICBtaW5tYXggd2lsbCBiZSBkaXNhYmxlZFxuIik7Ci0JfQotCi0KLQkvKiBTdG9yZSBjbW5nIHN0cnVjdHVyZXMgdG8gaW50ZXJuYWwgbWVtb3J5ICovCi0JaWYgKGJwLT5wb3J0LnBtZikKLQkJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQpIC8gNDsgaSsrKQotCQkJUkVHX1dSKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKwotCQkJICAgICAgIFhTVE9STV9DTU5HX1BFUl9QT1JUX1ZBUlNfT0ZGU0VUKHBvcnQpICsgaSAqIDQsCi0JCQkgICAgICAgKCh1MzIgKikoJmJwLT5jbW5nKSlbaV0pOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9pbml0X2ludGVybmFsKHN0cnVjdCBibngyeCAqYnAsIHUzMiBsb2FkX2NvZGUpCi17Ci0Jc3dpdGNoIChsb2FkX2NvZGUpIHsKLQljYXNlIEZXX01TR19DT0RFX0RSVl9MT0FEX0NPTU1PTjoKLQkJYm54MnhfaW5pdF9pbnRlcm5hbF9jb21tb24oYnApOwotCQkvKiBubyBicmVhayAqLwotCi0JY2FzZSBGV19NU0dfQ09ERV9EUlZfTE9BRF9QT1JUOgotCQlibngyeF9pbml0X2ludGVybmFsX3BvcnQoYnApOwotCQkvKiBubyBicmVhayAqLwotCi0JY2FzZSBGV19NU0dfQ09ERV9EUlZfTE9BRF9GVU5DVElPTjoKLQkJYm54MnhfaW5pdF9pbnRlcm5hbF9mdW5jKGJwKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlCTlgyWF9FUlIoIlVua25vd24gbG9hZF9jb2RlICgweCV4KSBmcm9tIE1DUFxuIiwgbG9hZF9jb2RlKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBibngyeF9uaWNfaW5pdChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgbG9hZF9jb2RlKQotewotCWludCBpOwotCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKLQkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07Ci0KLQkJZnAtPmJwID0gYnA7Ci0JCWZwLT5zdGF0ZSA9IEJOWDJYX0ZQX1NUQVRFX0NMT1NFRDsKLQkJZnAtPmluZGV4ID0gaTsKLQkJZnAtPmNsX2lkID0gQlBfTF9JRChicCkgKyBpOwotI2lmZGVmIEJDTV9DTklDCi0JCWZwLT5zYl9pZCA9IGZwLT5jbF9pZCArIDE7Ci0jZWxzZQotCQlmcC0+c2JfaWQgPSBmcC0+Y2xfaWQ7Ci0jZW5kaWYKLQkJRFAoTkVUSUZfTVNHX0lGVVAsCi0JCSAgICJxdWV1ZVslZF06ICBibngyeF9pbml0X3NiKCVwLCVwKSAgY2xfaWQgJWQgIHNiICVkXG4iLAotCQkgICBpLCBicCwgZnAtPnN0YXR1c19ibGssIGZwLT5jbF9pZCwgZnAtPnNiX2lkKTsKLQkJYm54MnhfaW5pdF9zYihicCwgZnAtPnN0YXR1c19ibGssIGZwLT5zdGF0dXNfYmxrX21hcHBpbmcsCi0JCQkgICAgICBmcC0+c2JfaWQpOwotCQlibngyeF91cGRhdGVfZnBzYl9pZHgoZnApOwotCX0KLQotCS8qIGVuc3VyZSBzdGF0dXMgYmxvY2sgaW5kaWNlcyB3ZXJlIHJlYWQgKi8KLQlybWIoKTsKLQotCi0JYm54MnhfaW5pdF9kZWZfc2IoYnAsIGJwLT5kZWZfc3RhdHVzX2JsaywgYnAtPmRlZl9zdGF0dXNfYmxrX21hcHBpbmcsCi0JCQkgIERFRl9TQl9JRCk7Ci0JYm54MnhfdXBkYXRlX2RzYl9pZHgoYnApOwotCWJueDJ4X3VwZGF0ZV9jb2FsZXNjZShicCk7Ci0JYm54MnhfaW5pdF9yeF9yaW5ncyhicCk7Ci0JYm54MnhfaW5pdF90eF9yaW5nKGJwKTsKLQlibngyeF9pbml0X3NwX3JpbmcoYnApOwotCWJueDJ4X2luaXRfY29udGV4dChicCk7Ci0JYm54MnhfaW5pdF9pbnRlcm5hbChicCwgbG9hZF9jb2RlKTsKLQlibngyeF9pbml0X2luZF90YWJsZShicCk7Ci0JYm54Mnhfc3RhdHNfaW5pdChicCk7Ci0KLQkvKiBBdCB0aGlzIHBvaW50LCB3ZSBhcmUgcmVhZHkgZm9yIGludGVycnVwdHMgKi8KLQlhdG9taWNfc2V0KCZicC0+aW50cl9zZW0sIDApOwotCi0JLyogZmx1c2ggYWxsIGJlZm9yZSBlbmFibGluZyBpbnRlcnJ1cHRzICovCi0JbWIoKTsKLQltbWlvd2IoKTsKLQotCWJueDJ4X2ludF9lbmFibGUoYnApOwotCi0JLyogQ2hlY2sgZm9yIFNQSU81ICovCi0JYm54MnhfYXR0bl9pbnRfZGVhc3NlcnRlZDAoYnAsCi0JCVJFR19SRChicCwgTUlTQ19SRUdfQUVVX0FGVEVSX0lOVkVSVF8xX0ZVTkNfMCArIEJQX1BPUlQoYnApKjQpICYKLQkJCQkgICBBRVVfSU5QVVRTX0FUVE5fQklUU19TUElPNSk7Ci19Ci0KLS8qIGVuZCBvZiBuaWMgaW5pdCAqLwotCi0vKgotICogZ3ppcCBzZXJ2aWNlIGZ1bmN0aW9ucwotICovCi0KLXN0YXRpYyBpbnQgYm54MnhfZ3VuemlwX2luaXQoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlicC0+Z3VuemlwX2J1ZiA9IGRtYV9hbGxvY19jb2hlcmVudCgmYnAtPnBkZXYtPmRldiwgRldfQlVGX1NJWkUsCi0JCQkJCSAgICAmYnAtPmd1bnppcF9tYXBwaW5nLCBHRlBfS0VSTkVMKTsKLQlpZiAoYnAtPmd1bnppcF9idWYgID09IE5VTEwpCi0JCWdvdG8gZ3VuemlwX25vbWVtMTsKLQotCWJwLT5zdHJtID0ga21hbGxvYyhzaXplb2YoKmJwLT5zdHJtKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGJwLT5zdHJtICA9PSBOVUxMKQotCQlnb3RvIGd1bnppcF9ub21lbTI7Ci0KLQlicC0+c3RybS0+d29ya3NwYWNlID0ga21hbGxvYyh6bGliX2luZmxhdGVfd29ya3NwYWNlc2l6ZSgpLAotCQkJCSAgICAgIEdGUF9LRVJORUwpOwotCWlmIChicC0+c3RybS0+d29ya3NwYWNlID09IE5VTEwpCi0JCWdvdG8gZ3VuemlwX25vbWVtMzsKLQotCXJldHVybiAwOwotCi1ndW56aXBfbm9tZW0zOgotCWtmcmVlKGJwLT5zdHJtKTsKLQlicC0+c3RybSA9IE5VTEw7Ci0KLWd1bnppcF9ub21lbTI6Ci0JZG1hX2ZyZWVfY29oZXJlbnQoJmJwLT5wZGV2LT5kZXYsIEZXX0JVRl9TSVpFLCBicC0+Z3VuemlwX2J1ZiwKLQkJCSAgYnAtPmd1bnppcF9tYXBwaW5nKTsKLQlicC0+Z3VuemlwX2J1ZiA9IE5VTEw7Ci0KLWd1bnppcF9ub21lbTE6Ci0JbmV0ZGV2X2VycihicC0+ZGV2LCAiQ2Fubm90IGFsbG9jYXRlIGZpcm13YXJlIGJ1ZmZlciBmb3IiCi0JICAgICAgICIgdW4tY29tcHJlc3Npb25cbiIpOwotCXJldHVybiAtRU5PTUVNOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9ndW56aXBfZW5kKHN0cnVjdCBibngyeCAqYnApCi17Ci0Ja2ZyZWUoYnAtPnN0cm0tPndvcmtzcGFjZSk7Ci0KLQlrZnJlZShicC0+c3RybSk7Ci0JYnAtPnN0cm0gPSBOVUxMOwotCi0JaWYgKGJwLT5ndW56aXBfYnVmKSB7Ci0JCWRtYV9mcmVlX2NvaGVyZW50KCZicC0+cGRldi0+ZGV2LCBGV19CVUZfU0laRSwgYnAtPmd1bnppcF9idWYsCi0JCQkJICBicC0+Z3VuemlwX21hcHBpbmcpOwotCQlicC0+Z3VuemlwX2J1ZiA9IE5VTEw7Ci0JfQotfQotCi1zdGF0aWMgaW50IGJueDJ4X2d1bnppcChzdHJ1Y3QgYm54MnggKmJwLCBjb25zdCB1OCAqemJ1ZiwgaW50IGxlbikKLXsKLQlpbnQgbiwgcmM7Ci0KLQkvKiBjaGVjayBnemlwIGhlYWRlciAqLwotCWlmICgoemJ1ZlswXSAhPSAweDFmKSB8fCAoemJ1ZlsxXSAhPSAweDhiKSB8fCAoemJ1ZlsyXSAhPSBaX0RFRkxBVEVEKSkgewotCQlCTlgyWF9FUlIoIkJhZCBnemlwIGhlYWRlclxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW4gPSAxMDsKLQotI2RlZmluZSBGTkFNRQkJCQkweDgKLQotCWlmICh6YnVmWzNdICYgRk5BTUUpCi0JCXdoaWxlICgoemJ1ZltuKytdICE9IDApICYmIChuIDwgbGVuKSk7Ci0KLQlicC0+c3RybS0+bmV4dF9pbiA9ICh0eXBlb2YoYnAtPnN0cm0tPm5leHRfaW4pKXpidWYgKyBuOwotCWJwLT5zdHJtLT5hdmFpbF9pbiA9IGxlbiAtIG47Ci0JYnAtPnN0cm0tPm5leHRfb3V0ID0gYnAtPmd1bnppcF9idWY7Ci0JYnAtPnN0cm0tPmF2YWlsX291dCA9IEZXX0JVRl9TSVpFOwotCi0JcmMgPSB6bGliX2luZmxhdGVJbml0MihicC0+c3RybSwgLU1BWF9XQklUUyk7Ci0JaWYgKHJjICE9IFpfT0spCi0JCXJldHVybiByYzsKLQotCXJjID0gemxpYl9pbmZsYXRlKGJwLT5zdHJtLCBaX0ZJTklTSCk7Ci0JaWYgKChyYyAhPSBaX09LKSAmJiAocmMgIT0gWl9TVFJFQU1fRU5EKSkKLQkJbmV0ZGV2X2VycihicC0+ZGV2LCAiRmlybXdhcmUgZGVjb21wcmVzc2lvbiBlcnJvcjogJXNcbiIsCi0JCQkgICBicC0+c3RybS0+bXNnKTsKLQotCWJwLT5ndW56aXBfb3V0bGVuID0gKEZXX0JVRl9TSVpFIC0gYnAtPnN0cm0tPmF2YWlsX291dCk7Ci0JaWYgKGJwLT5ndW56aXBfb3V0bGVuICYgMHgzKQotCQluZXRkZXZfZXJyKGJwLT5kZXYsICJGaXJtd2FyZSBkZWNvbXByZXNzaW9uIGVycm9yOiIKLQkJCQkgICAgIiBndW56aXBfb3V0bGVuICglZCkgbm90IGFsaWduZWRcbiIsCi0JCQkJYnAtPmd1bnppcF9vdXRsZW4pOwotCWJwLT5ndW56aXBfb3V0bGVuID4+PSAyOwotCi0JemxpYl9pbmZsYXRlRW5kKGJwLT5zdHJtKTsKLQotCWlmIChyYyA9PSBaX1NUUkVBTV9FTkQpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKiBuaWMgbG9hZC91bmxvYWQgKi8KLQotLyoKLSAqIEdlbmVyYWwgc2VydmljZSBmdW5jdGlvbnMKLSAqLwotCi0vKiBzZW5kIGEgTklHIGxvb3BiYWNrIGRlYnVnIHBhY2tldCAqLwotc3RhdGljIHZvaWQgYm54MnhfbGJfcGNrdChzdHJ1Y3QgYm54MnggKmJwKQotewotCXUzMiB3Yl93cml0ZVszXTsKLQotCS8qIEV0aGVybmV0IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzICovCi0Jd2Jfd3JpdGVbMF0gPSAweDU1NTU1NTU1OwotCXdiX3dyaXRlWzFdID0gMHg1NTU1NTU1NTsKLQl3Yl93cml0ZVsyXSA9IDB4MjA7CQkvKiBTT1AgKi8KLQlSRUdfV1JfRE1BRShicCwgTklHX1JFR19ERUJVR19QQUNLRVRfTEIsIHdiX3dyaXRlLCAzKTsKLQotCS8qIE5PTi1JUCBwcm90b2NvbCAqLwotCXdiX3dyaXRlWzBdID0gMHgwOTAwMDAwMDsKLQl3Yl93cml0ZVsxXSA9IDB4NTU1NTU1NTU7Ci0Jd2Jfd3JpdGVbMl0gPSAweDEwOwkJLyogRU9QLCBlb3BfYnZhbGlkID0gMCAqLwotCVJFR19XUl9ETUFFKGJwLCBOSUdfUkVHX0RFQlVHX1BBQ0tFVF9MQiwgd2Jfd3JpdGUsIDMpOwotfQotCi0vKiBzb21lIG9mIHRoZSBpbnRlcm5hbCBtZW1vcmllcwotICogYXJlIG5vdCBkaXJlY3RseSByZWFkYWJsZSBmcm9tIHRoZSBkcml2ZXIKLSAqIHRvIHRlc3QgdGhlbSB3ZSBzZW5kIGRlYnVnIHBhY2tldHMKLSAqLwotc3RhdGljIGludCBibngyeF9pbnRfbWVtX3Rlc3Qoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpbnQgZmFjdG9yOwotCWludCBjb3VudCwgaTsKLQl1MzIgdmFsID0gMDsKLQotCWlmIChDSElQX1JFVl9JU19GUEdBKGJwKSkKLQkJZmFjdG9yID0gMTIwOwotCWVsc2UgaWYgKENISVBfUkVWX0lTX0VNVUwoYnApKQotCQlmYWN0b3IgPSAyMDA7Ci0JZWxzZQotCQlmYWN0b3IgPSAxOwotCi0JRFAoTkVUSUZfTVNHX0hXLCAic3RhcnQgcGFydDFcbiIpOwotCi0JLyogRGlzYWJsZSBpbnB1dHMgb2YgcGFyc2VyIG5laWdoYm9yIGJsb2NrcyAqLwotCVJFR19XUihicCwgVFNETV9SRUdfRU5BQkxFX0lOMSwgMHgwKTsKLQlSRUdfV1IoYnAsIFRDTV9SRUdfUFJTX0lGRU4sIDB4MCk7Ci0JUkVHX1dSKGJwLCBDRkNfUkVHX0RFQlVHMCwgMHgxKTsKLQlSRUdfV1IoYnAsIE5JR19SRUdfUFJTX1JFUV9JTl9FTiwgMHgwKTsKLQotCS8qICBXcml0ZSAwIHRvIHBhcnNlciBjcmVkaXRzIGZvciBDRkMgc2VhcmNoIHJlcXVlc3QgKi8KLQlSRUdfV1IoYnAsIFBSU19SRUdfQ0ZDX1NFQVJDSF9JTklUSUFMX0NSRURJVCwgMHgwKTsKLQotCS8qIHNlbmQgRXRoZXJuZXQgcGFja2V0ICovCi0JYm54MnhfbGJfcGNrdChicCk7Ci0KLQkvKiBUT0RPIGRvIGkgcmVzZXQgTklHIHN0YXRpc3RpYz8gKi8KLQkvKiBXYWl0IHVudGlsIE5JRyByZWdpc3RlciBzaG93cyAxIHBhY2tldCBvZiBzaXplIDB4MTAgKi8KLQljb3VudCA9IDEwMDAgKiBmYWN0b3I7Ci0Jd2hpbGUgKGNvdW50KSB7Ci0KLQkJYm54MnhfcmVhZF9kbWFlKGJwLCBOSUdfUkVHX1NUQVQyX0JSQl9PQ1RFVCwgMik7Ci0JCXZhbCA9ICpibngyeF9zcChicCwgd2JfZGF0YVswXSk7Ci0JCWlmICh2YWwgPT0gMHgxMCkKLQkJCWJyZWFrOwotCi0JCW1zbGVlcCgxMCk7Ci0JCWNvdW50LS07Ci0JfQotCWlmICh2YWwgIT0gMHgxMCkgewotCQlCTlgyWF9FUlIoIk5JRyB0aW1lb3V0ICB2YWwgPSAweCV4XG4iLCB2YWwpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogV2FpdCB1bnRpbCBQUlMgcmVnaXN0ZXIgc2hvd3MgMSBwYWNrZXQgKi8KLQljb3VudCA9IDEwMDAgKiBmYWN0b3I7Ci0Jd2hpbGUgKGNvdW50KSB7Ci0JCXZhbCA9IFJFR19SRChicCwgUFJTX1JFR19OVU1fT0ZfUEFDS0VUUyk7Ci0JCWlmICh2YWwgPT0gMSkKLQkJCWJyZWFrOwotCi0JCW1zbGVlcCgxMCk7Ci0JCWNvdW50LS07Ci0JfQotCWlmICh2YWwgIT0gMHgxKSB7Ci0JCUJOWDJYX0VSUigiUFJTIHRpbWVvdXQgdmFsID0gMHgleFxuIiwgdmFsKTsKLQkJcmV0dXJuIC0yOwotCX0KLQotCS8qIFJlc2V0IGFuZCBpbml0IEJSQiwgUFJTICovCi0JUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMV9DTEVBUiwgMHgwMyk7Ci0JbXNsZWVwKDUwKTsKLQlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18xX1NFVCwgMHgwMyk7Ci0JbXNsZWVwKDUwKTsKLQlibngyeF9pbml0X2Jsb2NrKGJwLCBCUkIxX0JMT0NLLCBDT01NT05fU1RBR0UpOwotCWJueDJ4X2luaXRfYmxvY2soYnAsIFBSU19CTE9DSywgQ09NTU9OX1NUQUdFKTsKLQotCURQKE5FVElGX01TR19IVywgInBhcnQyXG4iKTsKLQotCS8qIERpc2FibGUgaW5wdXRzIG9mIHBhcnNlciBuZWlnaGJvciBibG9ja3MgKi8KLQlSRUdfV1IoYnAsIFRTRE1fUkVHX0VOQUJMRV9JTjEsIDB4MCk7Ci0JUkVHX1dSKGJwLCBUQ01fUkVHX1BSU19JRkVOLCAweDApOwotCVJFR19XUihicCwgQ0ZDX1JFR19ERUJVRzAsIDB4MSk7Ci0JUkVHX1dSKGJwLCBOSUdfUkVHX1BSU19SRVFfSU5fRU4sIDB4MCk7Ci0KLQkvKiBXcml0ZSAwIHRvIHBhcnNlciBjcmVkaXRzIGZvciBDRkMgc2VhcmNoIHJlcXVlc3QgKi8KLQlSRUdfV1IoYnAsIFBSU19SRUdfQ0ZDX1NFQVJDSF9JTklUSUFMX0NSRURJVCwgMHgwKTsKLQotCS8qIHNlbmQgMTAgRXRoZXJuZXQgcGFja2V0cyAqLwotCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQotCQlibngyeF9sYl9wY2t0KGJwKTsKLQotCS8qIFdhaXQgdW50aWwgTklHIHJlZ2lzdGVyIHNob3dzIDEwICsgMQotCSAgIHBhY2tldHMgb2Ygc2l6ZSAxMSoweDEwID0gMHhiMCAqLwotCWNvdW50ID0gMTAwMCAqIGZhY3RvcjsKLQl3aGlsZSAoY291bnQpIHsKLQotCQlibngyeF9yZWFkX2RtYWUoYnAsIE5JR19SRUdfU1RBVDJfQlJCX09DVEVULCAyKTsKLQkJdmFsID0gKmJueDJ4X3NwKGJwLCB3Yl9kYXRhWzBdKTsKLQkJaWYgKHZhbCA9PSAweGIwKQotCQkJYnJlYWs7Ci0KLQkJbXNsZWVwKDEwKTsKLQkJY291bnQtLTsKLQl9Ci0JaWYgKHZhbCAhPSAweGIwKSB7Ci0JCUJOWDJYX0VSUigiTklHIHRpbWVvdXQgIHZhbCA9IDB4JXhcbiIsIHZhbCk7Ci0JCXJldHVybiAtMzsKLQl9Ci0KLQkvKiBXYWl0IHVudGlsIFBSUyByZWdpc3RlciBzaG93cyAyIHBhY2tldHMgKi8KLQl2YWwgPSBSRUdfUkQoYnAsIFBSU19SRUdfTlVNX09GX1BBQ0tFVFMpOwotCWlmICh2YWwgIT0gMikKLQkJQk5YMlhfRVJSKCJQUlMgdGltZW91dCAgdmFsID0gMHgleFxuIiwgdmFsKTsKLQotCS8qIFdyaXRlIDEgdG8gcGFyc2VyIGNyZWRpdHMgZm9yIENGQyBzZWFyY2ggcmVxdWVzdCAqLwotCVJFR19XUihicCwgUFJTX1JFR19DRkNfU0VBUkNIX0lOSVRJQUxfQ1JFRElULCAweDEpOwotCi0JLyogV2FpdCB1bnRpbCBQUlMgcmVnaXN0ZXIgc2hvd3MgMyBwYWNrZXRzICovCi0JbXNsZWVwKDEwICogZmFjdG9yKTsKLQkvKiBXYWl0IHVudGlsIE5JRyByZWdpc3RlciBzaG93cyAxIHBhY2tldCBvZiBzaXplIDB4MTAgKi8KLQl2YWwgPSBSRUdfUkQoYnAsIFBSU19SRUdfTlVNX09GX1BBQ0tFVFMpOwotCWlmICh2YWwgIT0gMykKLQkJQk5YMlhfRVJSKCJQUlMgdGltZW91dCAgdmFsID0gMHgleFxuIiwgdmFsKTsKLQotCS8qIGNsZWFyIE5JRyBFT1AgRklGTyAqLwotCWZvciAoaSA9IDA7IGkgPCAxMTsgaSsrKQotCQlSRUdfUkQoYnAsIE5JR19SRUdfSU5HUkVTU19FT1BfTEJfRklGTyk7Ci0JdmFsID0gUkVHX1JEKGJwLCBOSUdfUkVHX0lOR1JFU1NfRU9QX0xCX0VNUFRZKTsKLQlpZiAodmFsICE9IDEpIHsKLQkJQk5YMlhfRVJSKCJjbGVhciBvZiBOSUcgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIC00OwotCX0KLQotCS8qIFJlc2V0IGFuZCBpbml0IEJSQiwgUFJTLCBOSUcgKi8KLQlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18xX0NMRUFSLCAweDAzKTsKLQltc2xlZXAoNTApOwotCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzFfU0VULCAweDAzKTsKLQltc2xlZXAoNTApOwotCWJueDJ4X2luaXRfYmxvY2soYnAsIEJSQjFfQkxPQ0ssIENPTU1PTl9TVEFHRSk7Ci0JYm54MnhfaW5pdF9ibG9jayhicCwgUFJTX0JMT0NLLCBDT01NT05fU1RBR0UpOwotI2lmbmRlZiBCQ01fQ05JQwotCS8qIHNldCBOSUMgbW9kZSAqLwotCVJFR19XUihicCwgUFJTX1JFR19OSUNfTU9ERSwgMSk7Ci0jZW5kaWYKLQotCS8qIEVuYWJsZSBpbnB1dHMgb2YgcGFyc2VyIG5laWdoYm9yIGJsb2NrcyAqLwotCVJFR19XUihicCwgVFNETV9SRUdfRU5BQkxFX0lOMSwgMHg3ZmZmZmZmZik7Ci0JUkVHX1dSKGJwLCBUQ01fUkVHX1BSU19JRkVOLCAweDEpOwotCVJFR19XUihicCwgQ0ZDX1JFR19ERUJVRzAsIDB4MCk7Ci0JUkVHX1dSKGJwLCBOSUdfUkVHX1BSU19SRVFfSU5fRU4sIDB4MSk7Ci0KLQlEUChORVRJRl9NU0dfSFcsICJkb25lXG4iKTsKLQotCXJldHVybiAwOyAvKiBPSyAqLwotfQotCi1zdGF0aWMgdm9pZCBlbmFibGVfYmxvY2tzX2F0dGVudGlvbihzdHJ1Y3QgYm54MnggKmJwKQotewotCVJFR19XUihicCwgUFhQX1JFR19QWFBfSU5UX01BU0tfMCwgMCk7Ci0JUkVHX1dSKGJwLCBQWFBfUkVHX1BYUF9JTlRfTUFTS18xLCAwKTsKLQlSRUdfV1IoYnAsIERPUlFfUkVHX0RPUlFfSU5UX01BU0ssIDApOwotCVJFR19XUihicCwgQ0ZDX1JFR19DRkNfSU5UX01BU0ssIDApOwotCVJFR19XUihicCwgUU1fUkVHX1FNX0lOVF9NQVNLLCAwKTsKLQlSRUdfV1IoYnAsIFRNX1JFR19UTV9JTlRfTUFTSywgMCk7Ci0JUkVHX1dSKGJwLCBYU0RNX1JFR19YU0RNX0lOVF9NQVNLXzAsIDApOwotCVJFR19XUihicCwgWFNETV9SRUdfWFNETV9JTlRfTUFTS18xLCAwKTsKLQlSRUdfV1IoYnAsIFhDTV9SRUdfWENNX0lOVF9NQVNLLCAwKTsKLS8qCVJFR19XUihicCwgWFNFTV9SRUdfWFNFTV9JTlRfTUFTS18wLCAwKTsgKi8KLS8qCVJFR19XUihicCwgWFNFTV9SRUdfWFNFTV9JTlRfTUFTS18xLCAwKTsgKi8KLQlSRUdfV1IoYnAsIFVTRE1fUkVHX1VTRE1fSU5UX01BU0tfMCwgMCk7Ci0JUkVHX1dSKGJwLCBVU0RNX1JFR19VU0RNX0lOVF9NQVNLXzEsIDApOwotCVJFR19XUihicCwgVUNNX1JFR19VQ01fSU5UX01BU0ssIDApOwotLyoJUkVHX1dSKGJwLCBVU0VNX1JFR19VU0VNX0lOVF9NQVNLXzAsIDApOyAqLwotLyoJUkVHX1dSKGJwLCBVU0VNX1JFR19VU0VNX0lOVF9NQVNLXzEsIDApOyAqLwotCVJFR19XUihicCwgR1JDQkFTRV9VUEIgKyBQQl9SRUdfUEJfSU5UX01BU0ssIDApOwotCVJFR19XUihicCwgQ1NETV9SRUdfQ1NETV9JTlRfTUFTS18wLCAwKTsKLQlSRUdfV1IoYnAsIENTRE1fUkVHX0NTRE1fSU5UX01BU0tfMSwgMCk7Ci0JUkVHX1dSKGJwLCBDQ01fUkVHX0NDTV9JTlRfTUFTSywgMCk7Ci0vKglSRUdfV1IoYnAsIENTRU1fUkVHX0NTRU1fSU5UX01BU0tfMCwgMCk7ICovCi0vKglSRUdfV1IoYnAsIENTRU1fUkVHX0NTRU1fSU5UX01BU0tfMSwgMCk7ICovCi0JaWYgKENISVBfUkVWX0lTX0ZQR0EoYnApKQotCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1BYUDJfSU5UX01BU0tfMCwgMHg1ODAwMDApOwotCWVsc2UKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19QWFAyX0lOVF9NQVNLXzAsIDB4NDgwMDAwKTsKLQlSRUdfV1IoYnAsIFRTRE1fUkVHX1RTRE1fSU5UX01BU0tfMCwgMCk7Ci0JUkVHX1dSKGJwLCBUU0RNX1JFR19UU0RNX0lOVF9NQVNLXzEsIDApOwotCVJFR19XUihicCwgVENNX1JFR19UQ01fSU5UX01BU0ssIDApOwotLyoJUkVHX1dSKGJwLCBUU0VNX1JFR19UU0VNX0lOVF9NQVNLXzAsIDApOyAqLwotLyoJUkVHX1dSKGJwLCBUU0VNX1JFR19UU0VNX0lOVF9NQVNLXzEsIDApOyAqLwotCVJFR19XUihicCwgQ0RVX1JFR19DRFVfSU5UX01BU0ssIDApOwotCVJFR19XUihicCwgRE1BRV9SRUdfRE1BRV9JTlRfTUFTSywgMCk7Ci0vKglSRUdfV1IoYnAsIE1JU0NfUkVHX01JU0NfSU5UX01BU0ssIDApOyAqLwotCVJFR19XUihicCwgUEJGX1JFR19QQkZfSU5UX01BU0ssIDBYMTgpOwkJLyogYml0IDMsNCBtYXNrZWQgKi8KLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB7Ci0JdTMyIGFkZHI7Ci0JdTMyIG1hc2s7Ci19IGJueDJ4X3Bhcml0eV9tYXNrW10gPSB7Ci0Je1BYUF9SRUdfUFhQX1BSVFlfTUFTSywgMHhmZmZmZmZmZn0sCi0Je1BYUDJfUkVHX1BYUDJfUFJUWV9NQVNLXzAsIDB4ZmZmZmZmZmZ9LAotCXtQWFAyX1JFR19QWFAyX1BSVFlfTUFTS18xLCAweGZmZmZmZmZmfSwKLQl7SENfUkVHX0hDX1BSVFlfTUFTSywgMHhmZmZmZmZmZn0sCi0Je01JU0NfUkVHX01JU0NfUFJUWV9NQVNLLCAweGZmZmZmZmZmfSwKLQl7UU1fUkVHX1FNX1BSVFlfTUFTSywgMHgwfSwKLQl7RE9SUV9SRUdfRE9SUV9QUlRZX01BU0ssIDB4MH0sCi0Je0dSQ0JBU0VfVVBCICsgUEJfUkVHX1BCX1BSVFlfTUFTSywgMHgwfSwKLQl7R1JDQkFTRV9YUEIgKyBQQl9SRUdfUEJfUFJUWV9NQVNLLCAweDB9LAotCXtTUkNfUkVHX1NSQ19QUlRZX01BU0ssIDB4NH0sIC8qIGJpdCAyICovCi0Je0NEVV9SRUdfQ0RVX1BSVFlfTUFTSywgMHgwfSwKLQl7Q0ZDX1JFR19DRkNfUFJUWV9NQVNLLCAweDB9LAotCXtEQkdfUkVHX0RCR19QUlRZX01BU0ssIDB4MH0sCi0Je0RNQUVfUkVHX0RNQUVfUFJUWV9NQVNLLCAweDB9LAotCXtCUkIxX1JFR19CUkIxX1BSVFlfTUFTSywgMHgwfSwKLQl7UFJTX1JFR19QUlNfUFJUWV9NQVNLLCAoMTw8Nil9LC8qIGJpdCA2ICovCi0Je1RTRE1fUkVHX1RTRE1fUFJUWV9NQVNLLCAweDE4fSwvKiBiaXQgMyw0ICovCi0Je0NTRE1fUkVHX0NTRE1fUFJUWV9NQVNLLCAweDh9LAkvKiBiaXQgMyAqLwotCXtVU0RNX1JFR19VU0RNX1BSVFlfTUFTSywgMHgzOH0sLyogYml0IDMsNCw1ICovCi0Je1hTRE1fUkVHX1hTRE1fUFJUWV9NQVNLLCAweDh9LAkvKiBiaXQgMyAqLwotCXtUU0VNX1JFR19UU0VNX1BSVFlfTUFTS18wLCAweDB9LAotCXtUU0VNX1JFR19UU0VNX1BSVFlfTUFTS18xLCAweDB9LAotCXtVU0VNX1JFR19VU0VNX1BSVFlfTUFTS18wLCAweDB9LAotCXtVU0VNX1JFR19VU0VNX1BSVFlfTUFTS18xLCAweDB9LAotCXtDU0VNX1JFR19DU0VNX1BSVFlfTUFTS18wLCAweDB9LAotCXtDU0VNX1JFR19DU0VNX1BSVFlfTUFTS18xLCAweDB9LAotCXtYU0VNX1JFR19YU0VNX1BSVFlfTUFTS18wLCAweDB9LAotCXtYU0VNX1JFR19YU0VNX1BSVFlfTUFTS18xLCAweDB9Ci19OwotCi1zdGF0aWMgdm9pZCBlbmFibGVfYmxvY2tzX3Bhcml0eShzdHJ1Y3QgYm54MnggKmJwKQotewotCWludCBpLCBtYXNrX2Fycl9sZW4gPQotCQlzaXplb2YoYm54MnhfcGFyaXR5X21hc2spLyhzaXplb2YoYm54MnhfcGFyaXR5X21hc2tbMF0pKTsKLQotCWZvciAoaSA9IDA7IGkgPCBtYXNrX2Fycl9sZW47IGkrKykKLQkJUkVHX1dSKGJwLCBibngyeF9wYXJpdHlfbWFza1tpXS5hZGRyLAotCQkJYm54MnhfcGFyaXR5X21hc2tbaV0ubWFzayk7Ci19Ci0KLQotc3RhdGljIHZvaWQgYm54MnhfcmVzZXRfY29tbW9uKHN0cnVjdCBibngyeCAqYnApCi17Ci0JLyogcmVzZXRfY29tbW9uICovCi0JUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMV9DTEVBUiwKLQkgICAgICAgMHhkM2ZmZmY3Zik7Ci0JUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9DTEVBUiwgMHgxNDAzKTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfaW5pdF9weHAoc3RydWN0IGJueDJ4ICpicCkKLXsKLQl1MTYgZGV2Y3RsOwotCWludCByX29yZGVyLCB3X29yZGVyOwotCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQoYnAtPnBkZXYsCi0JCQkgICAgIGJwLT5wY2llX2NhcCArIFBDSV9FWFBfREVWQ1RMLCAmZGV2Y3RsKTsKLQlEUChORVRJRl9NU0dfSFcsICJyZWFkIDB4JXggZnJvbSBkZXZjdGxcbiIsIGRldmN0bCk7Ci0Jd19vcmRlciA9ICgoZGV2Y3RsICYgUENJX0VYUF9ERVZDVExfUEFZTE9BRCkgPj4gNSk7Ci0JaWYgKGJwLT5tcnJzID09IC0xKQotCQlyX29yZGVyID0gKChkZXZjdGwgJiBQQ0lfRVhQX0RFVkNUTF9SRUFEUlEpID4+IDEyKTsKLQllbHNlIHsKLQkJRFAoTkVUSUZfTVNHX0hXLCAiZm9yY2UgcmVhZCBvcmRlciB0byAlZFxuIiwgYnAtPm1ycnMpOwotCQlyX29yZGVyID0gYnAtPm1ycnM7Ci0JfQotCi0JYm54MnhfaW5pdF9weHBfYXJiKGJwLCByX29yZGVyLCB3X29yZGVyKTsKLX0KLQotc3RhdGljIHZvaWQgYm54Mnhfc2V0dXBfZmFuX2ZhaWx1cmVfZGV0ZWN0aW9uKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IGlzX3JlcXVpcmVkOwotCXUzMiB2YWw7Ci0JaW50IHBvcnQ7Ci0KLQlpZiAoQlBfTk9NQ1AoYnApKQotCQlyZXR1cm47Ci0KLQlpc19yZXF1aXJlZCA9IDA7Ci0JdmFsID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLnNoYXJlZF9od19jb25maWcuY29uZmlnMikgJgotCSAgICAgIFNIQVJFRF9IV19DRkdfRkFOX0ZBSUxVUkVfTUFTSzsKLQotCWlmICh2YWwgPT0gU0hBUkVEX0hXX0NGR19GQU5fRkFJTFVSRV9FTkFCTEVEKQotCQlpc19yZXF1aXJlZCA9IDE7Ci0KLQkvKgotCSAqIFRoZSBmYW4gZmFpbHVyZSBtZWNoYW5pc20gaXMgdXN1YWxseSByZWxhdGVkIHRvIHRoZSBQSFkgdHlwZSBzaW5jZQotCSAqIHRoZSBwb3dlciBjb25zdW1wdGlvbiBvZiB0aGUgYm9hcmQgaXMgYWZmZWN0ZWQgYnkgdGhlIFBIWS4gQ3VycmVudGx5LAotCSAqIGZhbiBpcyByZXF1aXJlZCBmb3IgbW9zdCBkZXNpZ25zIHdpdGggU0ZYNzEwMSwgQkNNODcyNyBhbmQgQkNNODQ4MS4KLQkgKi8KLQllbHNlIGlmICh2YWwgPT0gU0hBUkVEX0hXX0NGR19GQU5fRkFJTFVSRV9QSFlfVFlQRSkKLQkJZm9yIChwb3J0ID0gUE9SVF8wOyBwb3J0IDwgUE9SVF9NQVg7IHBvcnQrKykgewotCQkJdTMyIHBoeV90eXBlID0KLQkJCQlTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0uCi0JCQkJCSBleHRlcm5hbF9waHlfY29uZmlnKSAmCi0JCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfTUFTSzsKLQkJCWlzX3JlcXVpcmVkIHw9Ci0JCQkJKChwaHlfdHlwZSA9PQotCQkJCSAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSkgfHwKLQkJCQkgKHBoeV90eXBlID09Ci0JCQkJICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3KSB8fAotCQkJCSAocGh5X3R5cGUgPT0KLQkJCQkgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEpKTsKLQkJfQotCi0JRFAoTkVUSUZfTVNHX0hXLCAiZmFuIGRldGVjdGlvbiBzZXR0aW5nOiAlZFxuIiwgaXNfcmVxdWlyZWQpOwotCi0JaWYgKGlzX3JlcXVpcmVkID09IDApCi0JCXJldHVybjsKLQotCS8qIEZhbiBmYWlsdXJlIGlzIGluZGljYXRlZCBieSBTUElPIDUgKi8KLQlibngyeF9zZXRfc3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfU1BJT181LAotCQkgICAgICAgTUlTQ19SRUdJU1RFUlNfU1BJT19JTlBVVF9ISV9aKTsKLQotCS8qIHNldCB0byBhY3RpdmUgbG93IG1vZGUgKi8KLQl2YWwgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX1NQSU9fSU5UKTsKLQl2YWwgfD0gKCgxIDw8IE1JU0NfUkVHSVNURVJTX1NQSU9fNSkgPDwKLQkJCQkJTUlTQ19SRUdJU1RFUlNfU1BJT19JTlRfT0xEX1NFVF9QT1MpOwotCVJFR19XUihicCwgTUlTQ19SRUdfU1BJT19JTlQsIHZhbCk7Ci0KLQkvKiBlbmFibGUgaW50ZXJydXB0IHRvIHNpZ25hbCB0aGUgSUdVICovCi0JdmFsID0gUkVHX1JEKGJwLCBNSVNDX1JFR19TUElPX0VWRU5UX0VOKTsKLQl2YWwgfD0gKDEgPDwgTUlTQ19SRUdJU1RFUlNfU1BJT181KTsKLQlSRUdfV1IoYnAsIE1JU0NfUkVHX1NQSU9fRVZFTlRfRU4sIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbnQgYm54MnhfaW5pdF9jb21tb24oc3RydWN0IGJueDJ4ICpicCkKLXsKLQl1MzIgdmFsLCBpOwotI2lmZGVmIEJDTV9DTklDCi0JdTMyIHdiX3dyaXRlWzJdOwotI2VuZGlmCi0KLQlEUChCTlgyWF9NU0dfTUNQLCAic3RhcnRpbmcgY29tbW9uIGluaXQgIGZ1bmMgJWRcbiIsIEJQX0ZVTkMoYnApKTsKLQotCWJueDJ4X3Jlc2V0X2NvbW1vbihicCk7Ci0JUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMV9TRVQsIDB4ZmZmZmZmZmYpOwotCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfU0VULCAweGZmZmMpOwotCi0JYm54MnhfaW5pdF9ibG9jayhicCwgTUlTQ19CTE9DSywgQ09NTU9OX1NUQUdFKTsKLQlpZiAoQ0hJUF9JU19FMUgoYnApKQotCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0UxSE1GX01PREUsIElTX0UxSE1GKGJwKSk7Ci0KLQlSRUdfV1IoYnAsIE1JU0NfUkVHX0xDUExMX0NUUkxfUkVHXzIsIDB4MTAwKTsKLQltc2xlZXAoMzApOwotCVJFR19XUihicCwgTUlTQ19SRUdfTENQTExfQ1RSTF9SRUdfMiwgMHgwKTsKLQotCWJueDJ4X2luaXRfYmxvY2soYnAsIFBYUF9CTE9DSywgQ09NTU9OX1NUQUdFKTsKLQlpZiAoQ0hJUF9JU19FMShicCkpIHsKLQkJLyogZW5hYmxlIEhXIGludGVycnVwdCBmcm9tIFBYUCBvbiBVU0RNIG92ZXJmbG93Ci0JCSAgIGJpdCAxNiBvbiBJTlRfTUFTS18wICovCi0JCVJFR19XUihicCwgUFhQX1JFR19QWFBfSU5UX01BU0tfMCwgMCk7Ci0JfQotCi0JYm54MnhfaW5pdF9ibG9jayhicCwgUFhQMl9CTE9DSywgQ09NTU9OX1NUQUdFKTsKLQlibngyeF9pbml0X3B4cChicCk7Ci0KLSNpZmRlZiBfX0JJR19FTkRJQU4KLQlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX1FNX0VORElBTl9NLCAxKTsKLQlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX1RNX0VORElBTl9NLCAxKTsKLQlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX1NSQ19FTkRJQU5fTSwgMSk7Ci0JUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9DRFVfRU5ESUFOX00sIDEpOwotCVJFR19XUihicCwgUFhQMl9SRUdfUlFfREJHX0VORElBTl9NLCAxKTsKLQkvKiBtYWtlIHN1cmUgdGhpcyB2YWx1ZSBpcyAwICovCi0JUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9IQ19FTkRJQU5fTSwgMCk7Ci0KLS8qCVJFR19XUihicCwgUFhQMl9SRUdfUkRfUEJGX1NXQVBfTU9ERSwgMSk7ICovCi0JUkVHX1dSKGJwLCBQWFAyX1JFR19SRF9RTV9TV0FQX01PREUsIDEpOwotCVJFR19XUihicCwgUFhQMl9SRUdfUkRfVE1fU1dBUF9NT0RFLCAxKTsKLQlSRUdfV1IoYnAsIFBYUDJfUkVHX1JEX1NSQ19TV0FQX01PREUsIDEpOwotCVJFR19XUihicCwgUFhQMl9SRUdfUkRfQ0RVUkRfU1dBUF9NT0RFLCAxKTsKLSNlbmRpZgotCi0JUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9DRFVfUF9TSVpFLCAyKTsKLSNpZmRlZiBCQ01fQ05JQwotCVJFR19XUihicCwgUFhQMl9SRUdfUlFfVE1fUF9TSVpFLCA1KTsKLQlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX1FNX1BfU0laRSwgNSk7Ci0JUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9TUkNfUF9TSVpFLCA1KTsKLSNlbmRpZgotCi0JaWYgKENISVBfUkVWX0lTX0ZQR0EoYnApICYmIENISVBfSVNfRTFIKGJwKSkKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19QR0xfVEFHU19MSU1JVCwgMHgxKTsKLQotCS8qIGxldCB0aGUgSFcgZG8gaXQncyBtYWdpYyAuLi4gKi8KLQltc2xlZXAoMTAwKTsKLQkvKiBmaW5pc2ggUFhQIGluaXQgKi8KLQl2YWwgPSBSRUdfUkQoYnAsIFBYUDJfUkVHX1JRX0NGR19ET05FKTsKLQlpZiAodmFsICE9IDEpIHsKLQkJQk5YMlhfRVJSKCJQWFAyIENGRyBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQl2YWwgPSBSRUdfUkQoYnAsIFBYUDJfUkVHX1JEX0lOSVRfRE9ORSk7Ci0JaWYgKHZhbCAhPSAxKSB7Ci0JCUJOWDJYX0VSUigiUFhQMiBSRF9JTklUIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9ESVNBQkxFX0lOUFVUUywgMCk7Ci0JUkVHX1dSKGJwLCBQWFAyX1JFR19SRF9ESVNBQkxFX0lOUFVUUywgMCk7Ci0KLQlibngyeF9pbml0X2Jsb2NrKGJwLCBETUFFX0JMT0NLLCBDT01NT05fU1RBR0UpOwotCi0JLyogY2xlYW4gdGhlIERNQUUgbWVtb3J5ICovCi0JYnAtPmRtYWVfcmVhZHkgPSAxOwotCWJueDJ4X2luaXRfZmlsbChicCwgVFNFTV9SRUdfUFJBTSwgMCwgOCk7Ci0KLQlibngyeF9pbml0X2Jsb2NrKGJwLCBUQ01fQkxPQ0ssIENPTU1PTl9TVEFHRSk7Ci0JYm54MnhfaW5pdF9ibG9jayhicCwgVUNNX0JMT0NLLCBDT01NT05fU1RBR0UpOwotCWJueDJ4X2luaXRfYmxvY2soYnAsIENDTV9CTE9DSywgQ09NTU9OX1NUQUdFKTsKLQlibngyeF9pbml0X2Jsb2NrKGJwLCBYQ01fQkxPQ0ssIENPTU1PTl9TVEFHRSk7Ci0KLQlibngyeF9yZWFkX2RtYWUoYnAsIFhTRU1fUkVHX1BBU1NJVkVfQlVGRkVSLCAzKTsKLQlibngyeF9yZWFkX2RtYWUoYnAsIENTRU1fUkVHX1BBU1NJVkVfQlVGRkVSLCAzKTsKLQlibngyeF9yZWFkX2RtYWUoYnAsIFRTRU1fUkVHX1BBU1NJVkVfQlVGRkVSLCAzKTsKLQlibngyeF9yZWFkX2RtYWUoYnAsIFVTRU1fUkVHX1BBU1NJVkVfQlVGRkVSLCAzKTsKLQotCWJueDJ4X2luaXRfYmxvY2soYnAsIFFNX0JMT0NLLCBDT01NT05fU1RBR0UpOwotCi0jaWZkZWYgQkNNX0NOSUMKLQl3Yl93cml0ZVswXSA9IDA7Ci0Jd2Jfd3JpdGVbMV0gPSAwOwotCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7Ci0JCVJFR19XUihicCwgUU1fUkVHX0JBU0VBRERSICsgaSo0LCAxMDI0ICogNCAqIChpJTE2KSk7Ci0JCWJueDJ4X2luaXRfaW5kX3dyKGJwLCBRTV9SRUdfUFRSVEJMICsgaSo4LCB3Yl93cml0ZSwgMik7Ci0KLQkJaWYgKENISVBfSVNfRTFIKGJwKSkgewotCQkJUkVHX1dSKGJwLCBRTV9SRUdfQkFTRUFERFJfRVhUX0EgKyBpKjQsIDEwMjQqNCooaSUxNikpOwotCQkJYm54MnhfaW5pdF9pbmRfd3IoYnAsIFFNX1JFR19QVFJUQkxfRVhUX0EgKyBpKjgsCi0JCQkJCSAgd2Jfd3JpdGUsIDIpOwotCQl9Ci0JfQotI2VuZGlmCi0JLyogc29mdCByZXNldCBwdWxzZSAqLwotCVJFR19XUihicCwgUU1fUkVHX1NPRlRfUkVTRVQsIDEpOwotCVJFR19XUihicCwgUU1fUkVHX1NPRlRfUkVTRVQsIDApOwotCi0jaWZkZWYgQkNNX0NOSUMKLQlibngyeF9pbml0X2Jsb2NrKGJwLCBUSU1FUlNfQkxPQ0ssIENPTU1PTl9TVEFHRSk7Ci0jZW5kaWYKLQotCWJueDJ4X2luaXRfYmxvY2soYnAsIERRX0JMT0NLLCBDT01NT05fU1RBR0UpOwotCVJFR19XUihicCwgRE9SUV9SRUdfRFBNX0NJRF9PRlNULCBCQ01fUEFHRV9TSElGVCk7Ci0JaWYgKCFDSElQX1JFVl9JU19TTE9XKGJwKSkgewotCQkvKiBlbmFibGUgaHcgaW50ZXJydXB0IGZyb20gZG9vcmJlbGwgUSAqLwotCQlSRUdfV1IoYnAsIERPUlFfUkVHX0RPUlFfSU5UX01BU0ssIDApOwotCX0KLQotCWJueDJ4X2luaXRfYmxvY2soYnAsIEJSQjFfQkxPQ0ssIENPTU1PTl9TVEFHRSk7Ci0JYm54MnhfaW5pdF9ibG9jayhicCwgUFJTX0JMT0NLLCBDT01NT05fU1RBR0UpOwotCVJFR19XUihicCwgUFJTX1JFR19BX1BSU1VfMjAsIDB4Zik7Ci0jaWZuZGVmIEJDTV9DTklDCi0JLyogc2V0IE5JQyBtb2RlICovCi0JUkVHX1dSKGJwLCBQUlNfUkVHX05JQ19NT0RFLCAxKTsKLSNlbmRpZgotCWlmIChDSElQX0lTX0UxSChicCkpCi0JCVJFR19XUihicCwgUFJTX1JFR19FMUhPVl9NT0RFLCBJU19FMUhNRihicCkpOwotCi0JYm54MnhfaW5pdF9ibG9jayhicCwgVFNETV9CTE9DSywgQ09NTU9OX1NUQUdFKTsKLQlibngyeF9pbml0X2Jsb2NrKGJwLCBDU0RNX0JMT0NLLCBDT01NT05fU1RBR0UpOwotCWJueDJ4X2luaXRfYmxvY2soYnAsIFVTRE1fQkxPQ0ssIENPTU1PTl9TVEFHRSk7Ci0JYm54MnhfaW5pdF9ibG9jayhicCwgWFNETV9CTE9DSywgQ09NTU9OX1NUQUdFKTsKLQotCWJueDJ4X2luaXRfZmlsbChicCwgVFNFTV9SRUdfRkFTVF9NRU1PUlksIDAsIFNUT1JNX0lOVE1FTV9TSVpFKGJwKSk7Ci0JYm54MnhfaW5pdF9maWxsKGJwLCBVU0VNX1JFR19GQVNUX01FTU9SWSwgMCwgU1RPUk1fSU5UTUVNX1NJWkUoYnApKTsKLQlibngyeF9pbml0X2ZpbGwoYnAsIENTRU1fUkVHX0ZBU1RfTUVNT1JZLCAwLCBTVE9STV9JTlRNRU1fU0laRShicCkpOwotCWJueDJ4X2luaXRfZmlsbChicCwgWFNFTV9SRUdfRkFTVF9NRU1PUlksIDAsIFNUT1JNX0lOVE1FTV9TSVpFKGJwKSk7Ci0KLQlibngyeF9pbml0X2Jsb2NrKGJwLCBUU0VNX0JMT0NLLCBDT01NT05fU1RBR0UpOwotCWJueDJ4X2luaXRfYmxvY2soYnAsIFVTRU1fQkxPQ0ssIENPTU1PTl9TVEFHRSk7Ci0JYm54MnhfaW5pdF9ibG9jayhicCwgQ1NFTV9CTE9DSywgQ09NTU9OX1NUQUdFKTsKLQlibngyeF9pbml0X2Jsb2NrKGJwLCBYU0VNX0JMT0NLLCBDT01NT05fU1RBR0UpOwotCi0JLyogc3luYyBzZW1pIHJ0YyAqLwotCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzFfQ0xFQVIsCi0JICAgICAgIDB4ODAwMDAwMDApOwotCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzFfU0VULAotCSAgICAgICAweDgwMDAwMDAwKTsKLQotCWJueDJ4X2luaXRfYmxvY2soYnAsIFVQQl9CTE9DSywgQ09NTU9OX1NUQUdFKTsKLQlibngyeF9pbml0X2Jsb2NrKGJwLCBYUEJfQkxPQ0ssIENPTU1PTl9TVEFHRSk7Ci0JYm54MnhfaW5pdF9ibG9jayhicCwgUEJGX0JMT0NLLCBDT01NT05fU1RBR0UpOwotCi0JUkVHX1dSKGJwLCBTUkNfUkVHX1NPRlRfUlNULCAxKTsKLQlmb3IgKGkgPSBTUkNfUkVHX0tFWVJTUzBfMDsgaSA8PSBTUkNfUkVHX0tFWVJTUzFfOTsgaSArPSA0KQotCQlSRUdfV1IoYnAsIGksIHJhbmRvbTMyKCkpOwotCWJueDJ4X2luaXRfYmxvY2soYnAsIFNSQ0hfQkxPQ0ssIENPTU1PTl9TVEFHRSk7Ci0jaWZkZWYgQkNNX0NOSUMKLQlSRUdfV1IoYnAsIFNSQ19SRUdfS0VZU0VBUkNIXzAsIDB4NjMyODU2NzIpOwotCVJFR19XUihicCwgU1JDX1JFR19LRVlTRUFSQ0hfMSwgMHgyNGI4ZjJjYyk7Ci0JUkVHX1dSKGJwLCBTUkNfUkVHX0tFWVNFQVJDSF8yLCAweDIyM2FlZjliKTsKLQlSRUdfV1IoYnAsIFNSQ19SRUdfS0VZU0VBUkNIXzMsIDB4MjYwMDFlM2EpOwotCVJFR19XUihicCwgU1JDX1JFR19LRVlTRUFSQ0hfNCwgMHg3YWU5MTExNik7Ci0JUkVHX1dSKGJwLCBTUkNfUkVHX0tFWVNFQVJDSF81LCAweDVjZTUyMzBiKTsKLQlSRUdfV1IoYnAsIFNSQ19SRUdfS0VZU0VBUkNIXzYsIDB4Mjk4ZDhhZGYpOwotCVJFR19XUihicCwgU1JDX1JFR19LRVlTRUFSQ0hfNywgMHg2ZWIwZmYwOSk7Ci0JUkVHX1dSKGJwLCBTUkNfUkVHX0tFWVNFQVJDSF84LCAweDE4MzBmODJmKTsKLQlSRUdfV1IoYnAsIFNSQ19SRUdfS0VZU0VBUkNIXzksIDB4MDFlNDZiZTcpOwotI2VuZGlmCi0JUkVHX1dSKGJwLCBTUkNfUkVHX1NPRlRfUlNULCAwKTsKLQotCWlmIChzaXplb2YodW5pb24gY2R1X2NvbnRleHQpICE9IDEwMjQpCi0JCS8qIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCBhIGNvbnRleHQgaXMgMTAyNCBieXRlcyAqLwotCQlkZXZfYWxlcnQoJmJwLT5wZGV2LT5kZXYsICJwbGVhc2UgYWRqdXN0IHRoZSBzaXplICIKLQkJCQkJICAib2YgY2R1X2NvbnRleHQoJWxkKVxuIiwKLQkJCSAobG9uZylzaXplb2YodW5pb24gY2R1X2NvbnRleHQpKTsKLQotCWJueDJ4X2luaXRfYmxvY2soYnAsIENEVV9CTE9DSywgQ09NTU9OX1NUQUdFKTsKLQl2YWwgPSAoNCA8PCAyNCkgKyAoMCA8PCAxMikgKyAxMDI0OwotCVJFR19XUihicCwgQ0RVX1JFR19DRFVfR0xPQkFMX1BBUkFNUywgdmFsKTsKLQotCWJueDJ4X2luaXRfYmxvY2soYnAsIENGQ19CTE9DSywgQ09NTU9OX1NUQUdFKTsKLQlSRUdfV1IoYnAsIENGQ19SRUdfSU5JVF9SRUcsIDB4N0ZGKTsKLQkvKiBlbmFibGUgY29udGV4dCB2YWxpZGF0aW9uIGludGVycnVwdCBmcm9tIENGQyAqLwotCVJFR19XUihicCwgQ0ZDX1JFR19DRkNfSU5UX01BU0ssIDApOwotCi0JLyogc2V0IHRoZSB0aHJlc2hvbGRzIHRvIHByZXZlbnQgQ0ZDL0NEVSByYWNlICovCi0JUkVHX1dSKGJwLCBDRkNfUkVHX0RFQlVHMCwgMHgyMDAyMDAwMCk7Ci0KLQlibngyeF9pbml0X2Jsb2NrKGJwLCBIQ19CTE9DSywgQ09NTU9OX1NUQUdFKTsKLQlibngyeF9pbml0X2Jsb2NrKGJwLCBNSVNDX0FFVV9CTE9DSywgQ09NTU9OX1NUQUdFKTsKLQotCWJueDJ4X2luaXRfYmxvY2soYnAsIFBYUENTX0JMT0NLLCBDT01NT05fU1RBR0UpOwotCS8qIFJlc2V0IFBDSUUgZXJyb3JzIGZvciBkZWJ1ZyAqLwotCVJFR19XUihicCwgMHgyODE0LCAweGZmZmZmZmZmKTsKLQlSRUdfV1IoYnAsIDB4MzgyMCwgMHhmZmZmZmZmZik7Ci0KLQlibngyeF9pbml0X2Jsb2NrKGJwLCBFTUFDMF9CTE9DSywgQ09NTU9OX1NUQUdFKTsKLQlibngyeF9pbml0X2Jsb2NrKGJwLCBFTUFDMV9CTE9DSywgQ09NTU9OX1NUQUdFKTsKLQlibngyeF9pbml0X2Jsb2NrKGJwLCBEQlVfQkxPQ0ssIENPTU1PTl9TVEFHRSk7Ci0JYm54MnhfaW5pdF9ibG9jayhicCwgREJHX0JMT0NLLCBDT01NT05fU1RBR0UpOwotCi0JYm54MnhfaW5pdF9ibG9jayhicCwgTklHX0JMT0NLLCBDT01NT05fU1RBR0UpOwotCWlmIChDSElQX0lTX0UxSChicCkpIHsKLQkJUkVHX1dSKGJwLCBOSUdfUkVHX0xMSF9NRl9NT0RFLCBJU19FMUhNRihicCkpOwotCQlSRUdfV1IoYnAsIE5JR19SRUdfTExIX0UxSE9WX01PREUsIElTX0UxSE1GKGJwKSk7Ci0JfQotCi0JaWYgKENISVBfUkVWX0lTX1NMT1coYnApKQotCQltc2xlZXAoMjAwKTsKLQotCS8qIGZpbmlzaCBDRkMgaW5pdCAqLwotCXZhbCA9IHJlZ19wb2xsKGJwLCBDRkNfUkVHX0xMX0lOSVRfRE9ORSwgMSwgMTAwLCAxMCk7Ci0JaWYgKHZhbCAhPSAxKSB7Ci0JCUJOWDJYX0VSUigiQ0ZDIExMX0lOSVQgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0JdmFsID0gcmVnX3BvbGwoYnAsIENGQ19SRUdfQUNfSU5JVF9ET05FLCAxLCAxMDAsIDEwKTsKLQlpZiAodmFsICE9IDEpIHsKLQkJQk5YMlhfRVJSKCJDRkMgQUNfSU5JVCBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQl2YWwgPSByZWdfcG9sbChicCwgQ0ZDX1JFR19DQU1fSU5JVF9ET05FLCAxLCAxMDAsIDEwKTsKLQlpZiAodmFsICE9IDEpIHsKLQkJQk5YMlhfRVJSKCJDRkMgQ0FNX0lOSVQgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0JUkVHX1dSKGJwLCBDRkNfUkVHX0RFQlVHMCwgMCk7Ci0KLQkvKiByZWFkIE5JRyBzdGF0aXN0aWMKLQkgICB0byBzZWUgaWYgdGhpcyBpcyBvdXIgZmlyc3QgdXAgc2luY2UgcG93ZXJ1cCAqLwotCWJueDJ4X3JlYWRfZG1hZShicCwgTklHX1JFR19TVEFUMl9CUkJfT0NURVQsIDIpOwotCXZhbCA9ICpibngyeF9zcChicCwgd2JfZGF0YVswXSk7Ci0KLQkvKiBkbyBpbnRlcm5hbCBtZW1vcnkgc2VsZiB0ZXN0ICovCi0JaWYgKChDSElQX0lTX0UxKGJwKSkgJiYgKHZhbCA9PSAwKSAmJiBibngyeF9pbnRfbWVtX3Rlc3QoYnApKSB7Ci0JCUJOWDJYX0VSUigiaW50ZXJuYWwgbWVtIHNlbGYgdGVzdCBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXN3aXRjaCAoWEdYU19FWFRfUEhZX1RZUEUoYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKSkgewotCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKLQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzM6Ci0JY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgotCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNzoKLQkJYnAtPnBvcnQubmVlZF9od19sb2NrID0gMTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlibngyeF9zZXR1cF9mYW5fZmFpbHVyZV9kZXRlY3Rpb24oYnApOwotCi0JLyogY2xlYXIgUFhQMiBhdHRlbnRpb25zICovCi0JUkVHX1JEKGJwLCBQWFAyX1JFR19QWFAyX0lOVF9TVFNfQ0xSXzApOwotCi0JZW5hYmxlX2Jsb2Nrc19hdHRlbnRpb24oYnApOwotCWlmIChDSElQX1BBUklUWV9TVVBQT1JURUQoYnApKQotCQllbmFibGVfYmxvY2tzX3Bhcml0eShicCk7Ci0KLQlpZiAoIUJQX05PTUNQKGJwKSkgewotCQlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKLQkJYm54MnhfY29tbW9uX2luaXRfcGh5KGJwLCBicC0+Y29tbW9uLnNobWVtX2Jhc2UpOwotCQlibngyeF9yZWxlYXNlX3BoeV9sb2NrKGJwKTsKLQl9IGVsc2UKLQkJQk5YMlhfRVJSKCJCb290Y29kZSBpcyBtaXNzaW5nIC0gY2FuIG5vdCBpbml0aWFsaXplIGxpbmtcbiIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYm54MnhfaW5pdF9wb3J0KHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKLQlpbnQgaW5pdF9zdGFnZSA9IHBvcnQgPyBQT1JUMV9TVEFHRSA6IFBPUlQwX1NUQUdFOwotCXUzMiBsb3csIGhpZ2g7Ci0JdTMyIHZhbDsKLQotCURQKEJOWDJYX01TR19NQ1AsICJzdGFydGluZyBwb3J0IGluaXQgIHBvcnQgJWRcbiIsIHBvcnQpOwotCi0JUkVHX1dSKGJwLCBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0LCAwKTsKLQotCWJueDJ4X2luaXRfYmxvY2soYnAsIFBYUF9CTE9DSywgaW5pdF9zdGFnZSk7Ci0JYm54MnhfaW5pdF9ibG9jayhicCwgUFhQMl9CTE9DSywgaW5pdF9zdGFnZSk7Ci0KLQlibngyeF9pbml0X2Jsb2NrKGJwLCBUQ01fQkxPQ0ssIGluaXRfc3RhZ2UpOwotCWJueDJ4X2luaXRfYmxvY2soYnAsIFVDTV9CTE9DSywgaW5pdF9zdGFnZSk7Ci0JYm54MnhfaW5pdF9ibG9jayhicCwgQ0NNX0JMT0NLLCBpbml0X3N0YWdlKTsKLQlibngyeF9pbml0X2Jsb2NrKGJwLCBYQ01fQkxPQ0ssIGluaXRfc3RhZ2UpOwotCi0jaWZkZWYgQkNNX0NOSUMKLQlSRUdfV1IoYnAsIFFNX1JFR19DT05OTlVNXzAgKyBwb3J0KjQsIDEwMjQvMTYgLSAxKTsKLQotCWJueDJ4X2luaXRfYmxvY2soYnAsIFRJTUVSU19CTE9DSywgaW5pdF9zdGFnZSk7Ci0JUkVHX1dSKGJwLCBUTV9SRUdfTElOMF9TQ0FOX1RJTUUgKyBwb3J0KjQsIDIwKTsKLQlSRUdfV1IoYnAsIFRNX1JFR19MSU4wX01BWF9BQ1RJVkVfQ0lEICsgcG9ydCo0LCAzMSk7Ci0jZW5kaWYKLQotCWJueDJ4X2luaXRfYmxvY2soYnAsIERRX0JMT0NLLCBpbml0X3N0YWdlKTsKLQotCWJueDJ4X2luaXRfYmxvY2soYnAsIEJSQjFfQkxPQ0ssIGluaXRfc3RhZ2UpOwotCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSAmJiAhQ0hJUF9JU19FMUgoYnApKSB7Ci0JCS8qIG5vIHBhdXNlIGZvciBlbXVsYXRpb24gYW5kIEZQR0EgKi8KLQkJbG93ID0gMDsKLQkJaGlnaCA9IDUxMzsKLQl9IGVsc2UgewotCQlpZiAoSVNfRTFITUYoYnApKQotCQkJbG93ID0gKChicC0+ZmxhZ3MgJiBPTkVfUE9SVF9GTEFHKSA/IDE2MCA6IDI0Nik7Ci0JCWVsc2UgaWYgKGJwLT5kZXYtPm10dSA+IDQwOTYpIHsKLQkJCWlmIChicC0+ZmxhZ3MgJiBPTkVfUE9SVF9GTEFHKQotCQkJCWxvdyA9IDE2MDsKLQkJCWVsc2UgewotCQkJCXZhbCA9IGJwLT5kZXYtPm10dTsKLQkJCQkvKiAoMjQqMTAyNCArIHZhbCo0KS8yNTYgKi8KLQkJCQlsb3cgPSA5NiArICh2YWwvNjQpICsgKCh2YWwgJSA2NCkgPyAxIDogMCk7Ci0JCQl9Ci0JCX0gZWxzZQotCQkJbG93ID0gKChicC0+ZmxhZ3MgJiBPTkVfUE9SVF9GTEFHKSA/IDgwIDogMTYwKTsKLQkJaGlnaCA9IGxvdyArIDU2OwkvKiAxNCoxMDI0LzI1NiAqLwotCX0KLQlSRUdfV1IoYnAsIEJSQjFfUkVHX1BBVVNFX0xPV19USFJFU0hPTERfMCArIHBvcnQqNCwgbG93KTsKLQlSRUdfV1IoYnAsIEJSQjFfUkVHX1BBVVNFX0hJR0hfVEhSRVNIT0xEXzAgKyBwb3J0KjQsIGhpZ2gpOwotCi0KLQlibngyeF9pbml0X2Jsb2NrKGJwLCBQUlNfQkxPQ0ssIGluaXRfc3RhZ2UpOwotCi0JYm54MnhfaW5pdF9ibG9jayhicCwgVFNETV9CTE9DSywgaW5pdF9zdGFnZSk7Ci0JYm54MnhfaW5pdF9ibG9jayhicCwgQ1NETV9CTE9DSywgaW5pdF9zdGFnZSk7Ci0JYm54MnhfaW5pdF9ibG9jayhicCwgVVNETV9CTE9DSywgaW5pdF9zdGFnZSk7Ci0JYm54MnhfaW5pdF9ibG9jayhicCwgWFNETV9CTE9DSywgaW5pdF9zdGFnZSk7Ci0KLQlibngyeF9pbml0X2Jsb2NrKGJwLCBUU0VNX0JMT0NLLCBpbml0X3N0YWdlKTsKLQlibngyeF9pbml0X2Jsb2NrKGJwLCBVU0VNX0JMT0NLLCBpbml0X3N0YWdlKTsKLQlibngyeF9pbml0X2Jsb2NrKGJwLCBDU0VNX0JMT0NLLCBpbml0X3N0YWdlKTsKLQlibngyeF9pbml0X2Jsb2NrKGJwLCBYU0VNX0JMT0NLLCBpbml0X3N0YWdlKTsKLQotCWJueDJ4X2luaXRfYmxvY2soYnAsIFVQQl9CTE9DSywgaW5pdF9zdGFnZSk7Ci0JYm54MnhfaW5pdF9ibG9jayhicCwgWFBCX0JMT0NLLCBpbml0X3N0YWdlKTsKLQotCWJueDJ4X2luaXRfYmxvY2soYnAsIFBCRl9CTE9DSywgaW5pdF9zdGFnZSk7Ci0KLQkvKiBjb25maWd1cmUgUEJGIHRvIHdvcmsgd2l0aG91dCBQQVVTRSBtdHUgOTAwMCAqLwotCVJFR19XUihicCwgUEJGX1JFR19QMF9QQVVTRV9FTkFCTEUgKyBwb3J0KjQsIDApOwotCi0JLyogdXBkYXRlIHRocmVzaG9sZCAqLwotCVJFR19XUihicCwgUEJGX1JFR19QMF9BUkJfVEhSU0ggKyBwb3J0KjQsICg5MDQwLzE2KSk7Ci0JLyogdXBkYXRlIGluaXQgY3JlZGl0ICovCi0JUkVHX1dSKGJwLCBQQkZfUkVHX1AwX0lOSVRfQ1JEICsgcG9ydCo0LCAoOTA0MC8xNikgKyA1NTMgLSAyMik7Ci0KLQkvKiBwcm9iZSBjaGFuZ2VzICovCi0JUkVHX1dSKGJwLCBQQkZfUkVHX0lOSVRfUDAgKyBwb3J0KjQsIDEpOwotCW1zbGVlcCg1KTsKLQlSRUdfV1IoYnAsIFBCRl9SRUdfSU5JVF9QMCArIHBvcnQqNCwgMCk7Ci0KLSNpZmRlZiBCQ01fQ05JQwotCWJueDJ4X2luaXRfYmxvY2soYnAsIFNSQ0hfQkxPQ0ssIGluaXRfc3RhZ2UpOwotI2VuZGlmCi0JYm54MnhfaW5pdF9ibG9jayhicCwgQ0RVX0JMT0NLLCBpbml0X3N0YWdlKTsKLQlibngyeF9pbml0X2Jsb2NrKGJwLCBDRkNfQkxPQ0ssIGluaXRfc3RhZ2UpOwotCi0JaWYgKENISVBfSVNfRTEoYnApKSB7Ci0JCVJFR19XUihicCwgSENfUkVHX0xFQURJTkdfRURHRV8wICsgcG9ydCo4LCAwKTsKLQkJUkVHX1dSKGJwLCBIQ19SRUdfVFJBSUxJTkdfRURHRV8wICsgcG9ydCo4LCAwKTsKLQl9Ci0JYm54MnhfaW5pdF9ibG9jayhicCwgSENfQkxPQ0ssIGluaXRfc3RhZ2UpOwotCi0JYm54MnhfaW5pdF9ibG9jayhicCwgTUlTQ19BRVVfQkxPQ0ssIGluaXRfc3RhZ2UpOwotCS8qIGluaXQgYWV1X21hc2tfYXR0bl9mdW5jXzAvMToKLQkgKiAgLSBTRiBtb2RlOiBiaXRzIDMtNyBhcmUgbWFza2VkLiBvbmx5IGJpdHMgMC0yIGFyZSBpbiB1c2UKLQkgKiAgLSBNRiBtb2RlOiBiaXQgMyBpcyBtYXNrZWQuIGJpdHMgMC0yIGFyZSBpbiB1c2UgYXMgaW4gU0YKLQkgKiAgICAgICAgICAgICBiaXRzIDQtNyBhcmUgdXNlZCBmb3IgInBlciB2biBncm91cCBhdHRlbnRpb24iICovCi0JUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfTUFTS19BVFROX0ZVTkNfMCArIHBvcnQqNCwKLQkgICAgICAgKElTX0UxSE1GKGJwKSA/IDB4RjcgOiAweDcpKTsKLQotCWJueDJ4X2luaXRfYmxvY2soYnAsIFBYUENTX0JMT0NLLCBpbml0X3N0YWdlKTsKLQlibngyeF9pbml0X2Jsb2NrKGJwLCBFTUFDMF9CTE9DSywgaW5pdF9zdGFnZSk7Ci0JYm54MnhfaW5pdF9ibG9jayhicCwgRU1BQzFfQkxPQ0ssIGluaXRfc3RhZ2UpOwotCWJueDJ4X2luaXRfYmxvY2soYnAsIERCVV9CTE9DSywgaW5pdF9zdGFnZSk7Ci0JYm54MnhfaW5pdF9ibG9jayhicCwgREJHX0JMT0NLLCBpbml0X3N0YWdlKTsKLQotCWJueDJ4X2luaXRfYmxvY2soYnAsIE5JR19CTE9DSywgaW5pdF9zdGFnZSk7Ci0KLQlSRUdfV1IoYnAsIE5JR19SRUdfWEdYU19TRVJERVMwX01PREVfU0VMICsgcG9ydCo0LCAxKTsKLQotCWlmIChDSElQX0lTX0UxSChicCkpIHsKLQkJLyogMHgyIGRpc2FibGUgZTFob3YsIDB4MSBlbmFibGUgKi8KLQkJUkVHX1dSKGJwLCBOSUdfUkVHX0xMSDBfQlJCMV9EUlZfTUFTS19NRiArIHBvcnQqNCwKLQkJICAgICAgIChJU19FMUhNRihicCkgPyAweDEgOiAweDIpKTsKLQotCQl7Ci0JCQlSRUdfV1IoYnAsIE5JR19SRUdfTExGQ19FTkFCTEVfMCArIHBvcnQqNCwgMCk7Ci0JCQlSRUdfV1IoYnAsIE5JR19SRUdfTExGQ19PVVRfRU5fMCArIHBvcnQqNCwgMCk7Ci0JCQlSRUdfV1IoYnAsIE5JR19SRUdfUEFVU0VfRU5BQkxFXzAgKyBwb3J0KjQsIDEpOwotCQl9Ci0JfQotCi0JYm54MnhfaW5pdF9ibG9jayhicCwgTUNQX0JMT0NLLCBpbml0X3N0YWdlKTsKLQlibngyeF9pbml0X2Jsb2NrKGJwLCBETUFFX0JMT0NLLCBpbml0X3N0YWdlKTsKLQotCXN3aXRjaCAoWEdYU19FWFRfUEhZX1RZUEUoYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKSkgewotCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKLQkJewotCQl1MzIgc3dhcF92YWwsIHN3YXBfb3ZlcnJpZGUsIGFldV9ncGlvX21hc2ssIG9mZnNldDsKLQotCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18zLAotCQkJICAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fSU5QVVRfSElfWiwgcG9ydCk7Ci0KLQkJLyogVGhlIEdQSU8gc2hvdWxkIGJlIHN3YXBwZWQgaWYgdGhlIHN3YXAgcmVnaXN0ZXIgaXMKLQkJICAgc2V0IGFuZCBhY3RpdmUgKi8KLQkJc3dhcF92YWwgPSBSRUdfUkQoYnAsIE5JR19SRUdfUE9SVF9TV0FQKTsKLQkJc3dhcF9vdmVycmlkZSA9IFJFR19SRChicCwgTklHX1JFR19TVFJBUF9PVkVSUklERSk7Ci0KLQkJLyogU2VsZWN0IGZ1bmN0aW9uIHVwb24gcG9ydC1zd2FwIGNvbmZpZ3VyYXRpb24gKi8KLQkJaWYgKHBvcnQgPT0gMCkgewotCQkJb2Zmc2V0ID0gTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18wX09VVF8wOwotCQkJYWV1X2dwaW9fbWFzayA9IChzd2FwX3ZhbCAmJiBzd2FwX292ZXJyaWRlKSA/Ci0JCQkJQUVVX0lOUFVUU19BVFROX0JJVFNfR1BJTzNfRlVOQ1RJT05fMSA6Ci0JCQkJQUVVX0lOUFVUU19BVFROX0JJVFNfR1BJTzNfRlVOQ1RJT05fMDsKLQkJfSBlbHNlIHsKLQkJCW9mZnNldCA9IE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMV9PVVRfMDsKLQkJCWFldV9ncGlvX21hc2sgPSAoc3dhcF92YWwgJiYgc3dhcF9vdmVycmlkZSkgPwotCQkJCUFFVV9JTlBVVFNfQVRUTl9CSVRTX0dQSU8zX0ZVTkNUSU9OXzAgOgotCQkJCUFFVV9JTlBVVFNfQVRUTl9CSVRTX0dQSU8zX0ZVTkNUSU9OXzE7Ci0JCX0KLQkJdmFsID0gUkVHX1JEKGJwLCBvZmZzZXQpOwotCQkvKiBhZGQgR1BJTzMgdG8gZ3JvdXAgKi8KLQkJdmFsIHw9IGFldV9ncGlvX21hc2s7Ci0JCVJFR19XUihicCwgb2Zmc2V0LCB2YWwpOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgotCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNzoKLQkJLyogYWRkIFNQSU8gNSB0byBncm91cCAwICovCi0JCXsKLQkJdTMyIHJlZ19hZGRyID0gKHBvcnQgPyBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzFfT1VUXzAgOgotCQkJCSAgICAgICBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzBfT1VUXzApOwotCQl2YWwgPSBSRUdfUkQoYnAsIHJlZ19hZGRyKTsKLQkJdmFsIHw9IEFFVV9JTlBVVFNfQVRUTl9CSVRTX1NQSU81OwotCQlSRUdfV1IoYnAsIHJlZ19hZGRyLCB2YWwpOwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JYm54MnhfX2xpbmtfcmVzZXQoYnApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgSUxUX1BFUl9GVU5DCQkoNzY4LzIpCi0jZGVmaW5lIEZVTkNfSUxUX0JBU0UoZnVuYykJKGZ1bmMgKiBJTFRfUEVSX0ZVTkMpCi0vKiB0aGUgcGh5cyBhZGRyZXNzIGlzIHNoaWZ0ZWQgcmlnaHQgMTIgYml0cyBhbmQgaGFzIGFuIGFkZGVkCi0gICAxPXZhbGlkIGJpdCBhZGRlZCB0byB0aGUgNTNyZCBiaXQKLSAgIHRoZW4gc2luY2UgdGhpcyBpcyBhIHdpZGUgcmVnaXN0ZXIoVE0pCi0gICB3ZSBzcGxpdCBpdCBpbnRvIHR3byAzMiBiaXQgd3JpdGVzCi0gKi8KLSNkZWZpbmUgT05DSElQX0FERFIxKHgpCQkoKHUzMikoKCh1NjQpeCA+PiAxMikgJiAweEZGRkZGRkZGKSkKLSNkZWZpbmUgT05DSElQX0FERFIyKHgpCQkoKHUzMikoKDEgPDwgMjApIHwgKCh1NjQpeCA+PiA0NCkpKQotI2RlZmluZSBQWFBfT05FX0lMVCh4KQkJKCgoeCkgPDwgMTApIHwgeCkKLSNkZWZpbmUgUFhQX0lMVF9SQU5HRShmLCBsKQkoKChsKSA8PCAxMCkgfCBmKQotCi0jaWZkZWYgQkNNX0NOSUMKLSNkZWZpbmUgQ05JQ19JTFRfTElORVMJCTEyNwotI2RlZmluZSBDTklDX0NUWF9QRVJfSUxUCTE2Ci0jZWxzZQotI2RlZmluZSBDTklDX0lMVF9MSU5FUwkJMAotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIGJueDJ4X2lsdF93cihzdHJ1Y3QgYm54MnggKmJwLCB1MzIgaW5kZXgsIGRtYV9hZGRyX3QgYWRkcikKLXsKLQlpbnQgcmVnOwotCi0JaWYgKENISVBfSVNfRTFIKGJwKSkKLQkJcmVnID0gUFhQMl9SRUdfUlFfT05DSElQX0FUX0IwICsgaW5kZXgqODsKLQllbHNlIC8qIEUxICovCi0JCXJlZyA9IFBYUDJfUkVHX1JRX09OQ0hJUF9BVCArIGluZGV4Kjg7Ci0KLQlibngyeF93Yl93cihicCwgcmVnLCBPTkNISVBfQUREUjEoYWRkciksIE9OQ0hJUF9BRERSMihhZGRyKSk7Ci19Ci0KLXN0YXRpYyBpbnQgYm54MnhfaW5pdF9mdW5jKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKLQlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOwotCXUzMiBhZGRyLCB2YWw7Ci0JaW50IGk7Ci0KLQlEUChCTlgyWF9NU0dfTUNQLCAic3RhcnRpbmcgZnVuYyBpbml0ICBmdW5jICVkXG4iLCBmdW5jKTsKLQotCS8qIHNldCBNU0kgcmVjb25maWd1cmUgY2FwYWJpbGl0eSAqLwotCWFkZHIgPSAocG9ydCA/IEhDX1JFR19DT05GSUdfMSA6IEhDX1JFR19DT05GSUdfMCk7Ci0JdmFsID0gUkVHX1JEKGJwLCBhZGRyKTsKLQl2YWwgfD0gSENfQ09ORklHXzBfUkVHX01TSV9BVFROX0VOXzA7Ci0JUkVHX1dSKGJwLCBhZGRyLCB2YWwpOwotCi0JaSA9IEZVTkNfSUxUX0JBU0UoZnVuYyk7Ci0KLQlibngyeF9pbHRfd3IoYnAsIGksIGJueDJ4X3NwX21hcHBpbmcoYnAsIGNvbnRleHQpKTsKLQlpZiAoQ0hJUF9JU19FMUgoYnApKSB7Ci0JCVJFR19XUihicCwgUFhQMl9SRUdfUlFfQ0RVX0ZJUlNUX0lMVCwgaSk7Ci0JCVJFR19XUihicCwgUFhQMl9SRUdfUlFfQ0RVX0xBU1RfSUxULCBpICsgQ05JQ19JTFRfTElORVMpOwotCX0gZWxzZSAvKiBFMSAqLwotCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1BTV1JRX0NEVTBfTDJQICsgZnVuYyo0LAotCQkgICAgICAgUFhQX0lMVF9SQU5HRShpLCBpICsgQ05JQ19JTFRfTElORVMpKTsKLQotI2lmZGVmIEJDTV9DTklDCi0JaSArPSAxICsgQ05JQ19JTFRfTElORVM7Ci0JYm54MnhfaWx0X3dyKGJwLCBpLCBicC0+dGltZXJzX21hcHBpbmcpOwotCWlmIChDSElQX0lTX0UxKGJwKSkKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19QU1dSUV9UTTBfTDJQICsgZnVuYyo0LCBQWFBfT05FX0lMVChpKSk7Ci0JZWxzZSB7Ci0JCVJFR19XUihicCwgUFhQMl9SRUdfUlFfVE1fRklSU1RfSUxULCBpKTsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9UTV9MQVNUX0lMVCwgaSk7Ci0JfQotCi0JaSsrOwotCWJueDJ4X2lsdF93cihicCwgaSwgYnAtPnFtX21hcHBpbmcpOwotCWlmIChDSElQX0lTX0UxKGJwKSkKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19QU1dSUV9RTTBfTDJQICsgZnVuYyo0LCBQWFBfT05FX0lMVChpKSk7Ci0JZWxzZSB7Ci0JCVJFR19XUihicCwgUFhQMl9SRUdfUlFfUU1fRklSU1RfSUxULCBpKTsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9RTV9MQVNUX0lMVCwgaSk7Ci0JfQotCi0JaSsrOwotCWJueDJ4X2lsdF93cihicCwgaSwgYnAtPnQxX21hcHBpbmcpOwotCWlmIChDSElQX0lTX0UxKGJwKSkKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19QU1dSUV9TUkMwX0wyUCArIGZ1bmMqNCwgUFhQX09ORV9JTFQoaSkpOwotCWVsc2UgewotCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX1NSQ19GSVJTVF9JTFQsIGkpOwotCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX1NSQ19MQVNUX0lMVCwgaSk7Ci0JfQotCi0JLyogdGVsbCB0aGUgc2VhcmNoZXIgd2hlcmUgdGhlIFQyIHRhYmxlIGlzICovCi0JUkVHX1dSKGJwLCBTUkNfUkVHX0NPVU5URlJFRTAgKyBwb3J0KjQsIDE2KjEwMjQvNjQpOwotCi0JYm54Mnhfd2Jfd3IoYnAsIFNSQ19SRUdfRklSU1RGUkVFMCArIHBvcnQqMTYsCi0JCSAgICBVNjRfTE8oYnAtPnQyX21hcHBpbmcpLCBVNjRfSEkoYnAtPnQyX21hcHBpbmcpKTsKLQotCWJueDJ4X3diX3dyKGJwLCBTUkNfUkVHX0xBU1RGUkVFMCArIHBvcnQqMTYsCi0JCSAgICBVNjRfTE8oKHU2NClicC0+dDJfbWFwcGluZyArIDE2KjEwMjQgLSA2NCksCi0JCSAgICBVNjRfSEkoKHU2NClicC0+dDJfbWFwcGluZyArIDE2KjEwMjQgLSA2NCkpOwotCi0JUkVHX1dSKGJwLCBTUkNfUkVHX05VTUJFUl9IQVNIX0JJVFMwICsgcG9ydCo0LCAxMCk7Ci0jZW5kaWYKLQotCWlmIChDSElQX0lTX0UxSChicCkpIHsKLQkJYm54MnhfaW5pdF9ibG9jayhicCwgTUlTQ19CTE9DSywgRlVOQzBfU1RBR0UgKyBmdW5jKTsKLQkJYm54MnhfaW5pdF9ibG9jayhicCwgVENNX0JMT0NLLCBGVU5DMF9TVEFHRSArIGZ1bmMpOwotCQlibngyeF9pbml0X2Jsb2NrKGJwLCBVQ01fQkxPQ0ssIEZVTkMwX1NUQUdFICsgZnVuYyk7Ci0JCWJueDJ4X2luaXRfYmxvY2soYnAsIENDTV9CTE9DSywgRlVOQzBfU1RBR0UgKyBmdW5jKTsKLQkJYm54MnhfaW5pdF9ibG9jayhicCwgWENNX0JMT0NLLCBGVU5DMF9TVEFHRSArIGZ1bmMpOwotCQlibngyeF9pbml0X2Jsb2NrKGJwLCBUU0VNX0JMT0NLLCBGVU5DMF9TVEFHRSArIGZ1bmMpOwotCQlibngyeF9pbml0X2Jsb2NrKGJwLCBVU0VNX0JMT0NLLCBGVU5DMF9TVEFHRSArIGZ1bmMpOwotCQlibngyeF9pbml0X2Jsb2NrKGJwLCBDU0VNX0JMT0NLLCBGVU5DMF9TVEFHRSArIGZ1bmMpOwotCQlibngyeF9pbml0X2Jsb2NrKGJwLCBYU0VNX0JMT0NLLCBGVU5DMF9TVEFHRSArIGZ1bmMpOwotCi0JCVJFR19XUihicCwgTklHX1JFR19MTEgwX0ZVTkNfRU4gKyBwb3J0KjgsIDEpOwotCQlSRUdfV1IoYnAsIE5JR19SRUdfTExIMF9GVU5DX1ZMQU5fSUQgKyBwb3J0KjgsIGJwLT5lMWhvdik7Ci0JfQotCi0JLyogSEMgaW5pdCBwZXIgZnVuY3Rpb24gKi8KLQlpZiAoQ0hJUF9JU19FMUgoYnApKSB7Ci0JCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8xMiArIGZ1bmMqNCwgMCk7Ci0KLQkJUkVHX1dSKGJwLCBIQ19SRUdfTEVBRElOR19FREdFXzAgKyBwb3J0KjgsIDApOwotCQlSRUdfV1IoYnAsIEhDX1JFR19UUkFJTElOR19FREdFXzAgKyBwb3J0KjgsIDApOwotCX0KLQlibngyeF9pbml0X2Jsb2NrKGJwLCBIQ19CTE9DSywgRlVOQzBfU1RBR0UgKyBmdW5jKTsKLQotCS8qIFJlc2V0IFBDSUUgZXJyb3JzIGZvciBkZWJ1ZyAqLwotCVJFR19XUihicCwgMHgyMTE0LCAweGZmZmZmZmZmKTsKLQlSRUdfV1IoYnAsIDB4MjEyMCwgMHhmZmZmZmZmZik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBibngyeF9pbml0X2h3KHN0cnVjdCBibngyeCAqYnAsIHUzMiBsb2FkX2NvZGUpCi17Ci0JaW50IGksIHJjID0gMDsKLQotCURQKEJOWDJYX01TR19NQ1AsICJmdW5jdGlvbiAlZCAgbG9hZF9jb2RlICV4XG4iLAotCSAgIEJQX0ZVTkMoYnApLCBsb2FkX2NvZGUpOwotCi0JYnAtPmRtYWVfcmVhZHkgPSAwOwotCW11dGV4X2luaXQoJmJwLT5kbWFlX211dGV4KTsKLQlyYyA9IGJueDJ4X2d1bnppcF9pbml0KGJwKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCXN3aXRjaCAobG9hZF9jb2RlKSB7Ci0JY2FzZSBGV19NU0dfQ09ERV9EUlZfTE9BRF9DT01NT046Ci0JCXJjID0gYm54MnhfaW5pdF9jb21tb24oYnApOwotCQlpZiAocmMpCi0JCQlnb3RvIGluaXRfaHdfZXJyOwotCQkvKiBubyBicmVhayAqLwotCi0JY2FzZSBGV19NU0dfQ09ERV9EUlZfTE9BRF9QT1JUOgotCQlicC0+ZG1hZV9yZWFkeSA9IDE7Ci0JCXJjID0gYm54MnhfaW5pdF9wb3J0KGJwKTsKLQkJaWYgKHJjKQotCQkJZ290byBpbml0X2h3X2VycjsKLQkJLyogbm8gYnJlYWsgKi8KLQotCWNhc2UgRldfTVNHX0NPREVfRFJWX0xPQURfRlVOQ1RJT046Ci0JCWJwLT5kbWFlX3JlYWR5ID0gMTsKLQkJcmMgPSBibngyeF9pbml0X2Z1bmMoYnApOwotCQlpZiAocmMpCi0JCQlnb3RvIGluaXRfaHdfZXJyOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCUJOWDJYX0VSUigiVW5rbm93biBsb2FkX2NvZGUgKDB4JXgpIGZyb20gTUNQXG4iLCBsb2FkX2NvZGUpOwotCQlicmVhazsKLQl9Ci0KLQlpZiAoIUJQX05PTUNQKGJwKSkgewotCQlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOwotCi0JCWJwLT5md19kcnZfcHVsc2Vfd3Jfc2VxID0KLQkJCQkoU0hNRU1fUkQoYnAsIGZ1bmNfbWJbZnVuY10uZHJ2X3B1bHNlX21iKSAmCi0JCQkJIERSVl9QVUxTRV9TRVFfTUFTSyk7Ci0JCURQKEJOWDJYX01TR19NQ1AsICJkcnZfcHVsc2UgMHgleFxuIiwgYnAtPmZ3X2Rydl9wdWxzZV93cl9zZXEpOwotCX0KLQotCS8qIHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBiZWZvcmUgZ3VuemlwIGVuZCAqLwotCWJueDJ4X3plcm9fZGVmX3NiKGJwKTsKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkKLQkJYm54MnhfemVyb19zYihicCwgQlBfTF9JRChicCkgKyBpKTsKLSNpZmRlZiBCQ01fQ05JQwotCWJueDJ4X3plcm9fc2IoYnAsIEJQX0xfSUQoYnApICsgaSk7Ci0jZW5kaWYKLQotaW5pdF9od19lcnI6Ci0JYm54MnhfZ3VuemlwX2VuZChicCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2ZyZWVfbWVtKHN0cnVjdCBibngyeCAqYnApCi17Ci0KLSNkZWZpbmUgQk5YMlhfUENJX0ZSRUUoeCwgeSwgc2l6ZSkgXAotCWRvIHsgXAotCQlpZiAoeCkgeyBcCi0JCQlkbWFfZnJlZV9jb2hlcmVudCgmYnAtPnBkZXYtPmRldiwgc2l6ZSwgeCwgeSk7IFwKLQkJCXggPSBOVUxMOyBcCi0JCQl5ID0gMDsgXAotCQl9IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIEJOWDJYX0ZSRUUoeCkgXAotCWRvIHsgXAotCQlpZiAoeCkgeyBcCi0JCQl2ZnJlZSh4KTsgXAotCQkJeCA9IE5VTEw7IFwKLQkJfSBcCi0JfSB3aGlsZSAoMCkKLQotCWludCBpOwotCi0JLyogZmFzdHBhdGggKi8KLQkvKiBDb21tb24gKi8KLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgewotCi0JCS8qIHN0YXR1cyBibG9ja3MgKi8KLQkJQk5YMlhfUENJX0ZSRUUoYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGspLAotCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrX21hcHBpbmcpLAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaG9zdF9zdGF0dXNfYmxvY2spKTsKLQl9Ci0JLyogUnggKi8KLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgewotCi0JCS8qIGZhc3RwYXRoIHJ4IHJpbmdzOiByeF9idWYgcnhfZGVzYyByeF9jb21wICovCi0JCUJOWDJYX0ZSRUUoYm54MnhfZnAoYnAsIGksIHJ4X2J1Zl9yaW5nKSk7Ci0JCUJOWDJYX1BDSV9GUkVFKGJueDJ4X2ZwKGJwLCBpLCByeF9kZXNjX3JpbmcpLAotCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBpLCByeF9kZXNjX21hcHBpbmcpLAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZXRoX3J4X2JkKSAqIE5VTV9SWF9CRCk7Ci0KLQkJQk5YMlhfUENJX0ZSRUUoYm54MnhfZnAoYnAsIGksIHJ4X2NvbXBfcmluZyksCi0JCQkgICAgICAgYm54MnhfZnAoYnAsIGksIHJ4X2NvbXBfbWFwcGluZyksCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBldGhfZmFzdF9wYXRoX3J4X2NxZSkgKgotCQkJICAgICAgIE5VTV9SQ1FfQkQpOwotCi0JCS8qIFNHRSByaW5nICovCi0JCUJOWDJYX0ZSRUUoYm54MnhfZnAoYnAsIGksIHJ4X3BhZ2VfcmluZykpOwotCQlCTlgyWF9QQ0lfRlJFRShibngyeF9mcChicCwgaSwgcnhfc2dlX3JpbmcpLAotCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBpLCByeF9zZ2VfbWFwcGluZyksCi0JCQkgICAgICAgQkNNX1BBR0VfU0laRSAqIE5VTV9SWF9TR0VfUEFHRVMpOwotCX0KLQkvKiBUeCAqLwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7Ci0KLQkJLyogZmFzdHBhdGggdHggcmluZ3M6IHR4X2J1ZiB0eF9kZXNjICovCi0JCUJOWDJYX0ZSRUUoYm54MnhfZnAoYnAsIGksIHR4X2J1Zl9yaW5nKSk7Ci0JCUJOWDJYX1BDSV9GUkVFKGJueDJ4X2ZwKGJwLCBpLCB0eF9kZXNjX3JpbmcpLAotCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBpLCB0eF9kZXNjX21hcHBpbmcpLAotCQkJICAgICAgIHNpemVvZih1bmlvbiBldGhfdHhfYmRfdHlwZXMpICogTlVNX1RYX0JEKTsKLQl9Ci0JLyogZW5kIG9mIGZhc3RwYXRoICovCi0KLQlCTlgyWF9QQ0lfRlJFRShicC0+ZGVmX3N0YXR1c19ibGssIGJwLT5kZWZfc3RhdHVzX2Jsa19tYXBwaW5nLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBob3N0X2RlZl9zdGF0dXNfYmxvY2spKTsKLQotCUJOWDJYX1BDSV9GUkVFKGJwLT5zbG93cGF0aCwgYnAtPnNsb3dwYXRoX21hcHBpbmcsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IGJueDJ4X3Nsb3dwYXRoKSk7Ci0KLSNpZmRlZiBCQ01fQ05JQwotCUJOWDJYX1BDSV9GUkVFKGJwLT50MSwgYnAtPnQxX21hcHBpbmcsIDY0KjEwMjQpOwotCUJOWDJYX1BDSV9GUkVFKGJwLT50MiwgYnAtPnQyX21hcHBpbmcsIDE2KjEwMjQpOwotCUJOWDJYX1BDSV9GUkVFKGJwLT50aW1lcnMsIGJwLT50aW1lcnNfbWFwcGluZywgOCoxMDI0KTsKLQlCTlgyWF9QQ0lfRlJFRShicC0+cW0sIGJwLT5xbV9tYXBwaW5nLCAxMjgqMTAyNCk7Ci0JQk5YMlhfUENJX0ZSRUUoYnAtPmNuaWNfc2IsIGJwLT5jbmljX3NiX21hcHBpbmcsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrKSk7Ci0jZW5kaWYKLQlCTlgyWF9QQ0lfRlJFRShicC0+c3BxLCBicC0+c3BxX21hcHBpbmcsIEJDTV9QQUdFX1NJWkUpOwotCi0jdW5kZWYgQk5YMlhfUENJX0ZSRUUKLSN1bmRlZiBCTlgyWF9LRlJFRQotfQotCi1zdGF0aWMgaW50IGJueDJ4X2FsbG9jX21lbShzdHJ1Y3QgYm54MnggKmJwKQotewotCi0jZGVmaW5lIEJOWDJYX1BDSV9BTExPQyh4LCB5LCBzaXplKSBcCi0JZG8geyBcCi0JCXggPSBkbWFfYWxsb2NfY29oZXJlbnQoJmJwLT5wZGV2LT5kZXYsIHNpemUsIHksIEdGUF9LRVJORUwpOyBcCi0JCWlmICh4ID09IE5VTEwpIFwKLQkJCWdvdG8gYWxsb2NfbWVtX2VycjsgXAotCQltZW1zZXQoeCwgMCwgc2l6ZSk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIEJOWDJYX0FMTE9DKHgsIHNpemUpIFwKLQlkbyB7IFwKLQkJeCA9IHZtYWxsb2Moc2l6ZSk7IFwKLQkJaWYgKHggPT0gTlVMTCkgXAotCQkJZ290byBhbGxvY19tZW1fZXJyOyBcCi0JCW1lbXNldCh4LCAwLCBzaXplKTsgXAotCX0gd2hpbGUgKDApCi0KLQlpbnQgaTsKLQotCS8qIGZhc3RwYXRoICovCi0JLyogQ29tbW9uICovCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKLQkJYm54MnhfZnAoYnAsIGksIGJwKSA9IGJwOwotCi0JCS8qIHN0YXR1cyBibG9ja3MgKi8KLQkJQk5YMlhfUENJX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrKSwKLQkJCQkmYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGtfbWFwcGluZyksCi0JCQkJc2l6ZW9mKHN0cnVjdCBob3N0X3N0YXR1c19ibG9jaykpOwotCX0KLQkvKiBSeCAqLwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7Ci0KLQkJLyogZmFzdHBhdGggcnggcmluZ3M6IHJ4X2J1ZiByeF9kZXNjIHJ4X2NvbXAgKi8KLQkJQk5YMlhfQUxMT0MoYm54MnhfZnAoYnAsIGksIHJ4X2J1Zl9yaW5nKSwKLQkJCQlzaXplb2Yoc3RydWN0IHN3X3J4X2JkKSAqIE5VTV9SWF9CRCk7Ci0JCUJOWDJYX1BDSV9BTExPQyhibngyeF9mcChicCwgaSwgcnhfZGVzY19yaW5nKSwKLQkJCQkmYm54MnhfZnAoYnAsIGksIHJ4X2Rlc2NfbWFwcGluZyksCi0JCQkJc2l6ZW9mKHN0cnVjdCBldGhfcnhfYmQpICogTlVNX1JYX0JEKTsKLQotCQlCTlgyWF9QQ0lfQUxMT0MoYm54MnhfZnAoYnAsIGksIHJ4X2NvbXBfcmluZyksCi0JCQkJJmJueDJ4X2ZwKGJwLCBpLCByeF9jb21wX21hcHBpbmcpLAotCQkJCXNpemVvZihzdHJ1Y3QgZXRoX2Zhc3RfcGF0aF9yeF9jcWUpICoKLQkJCQlOVU1fUkNRX0JEKTsKLQotCQkvKiBTR0UgcmluZyAqLwotCQlCTlgyWF9BTExPQyhibngyeF9mcChicCwgaSwgcnhfcGFnZV9yaW5nKSwKLQkJCQlzaXplb2Yoc3RydWN0IHN3X3J4X3BhZ2UpICogTlVNX1JYX1NHRSk7Ci0JCUJOWDJYX1BDSV9BTExPQyhibngyeF9mcChicCwgaSwgcnhfc2dlX3JpbmcpLAotCQkJCSZibngyeF9mcChicCwgaSwgcnhfc2dlX21hcHBpbmcpLAotCQkJCUJDTV9QQUdFX1NJWkUgKiBOVU1fUlhfU0dFX1BBR0VTKTsKLQl9Ci0JLyogVHggKi8KLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgewotCi0JCS8qIGZhc3RwYXRoIHR4IHJpbmdzOiB0eF9idWYgdHhfZGVzYyAqLwotCQlCTlgyWF9BTExPQyhibngyeF9mcChicCwgaSwgdHhfYnVmX3JpbmcpLAotCQkJCXNpemVvZihzdHJ1Y3Qgc3dfdHhfYmQpICogTlVNX1RYX0JEKTsKLQkJQk5YMlhfUENJX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCB0eF9kZXNjX3JpbmcpLAotCQkJCSZibngyeF9mcChicCwgaSwgdHhfZGVzY19tYXBwaW5nKSwKLQkJCQlzaXplb2YodW5pb24gZXRoX3R4X2JkX3R5cGVzKSAqIE5VTV9UWF9CRCk7Ci0JfQotCS8qIGVuZCBvZiBmYXN0cGF0aCAqLwotCi0JQk5YMlhfUENJX0FMTE9DKGJwLT5kZWZfc3RhdHVzX2JsaywgJmJwLT5kZWZfc3RhdHVzX2Jsa19tYXBwaW5nLAotCQkJc2l6ZW9mKHN0cnVjdCBob3N0X2RlZl9zdGF0dXNfYmxvY2spKTsKLQotCUJOWDJYX1BDSV9BTExPQyhicC0+c2xvd3BhdGgsICZicC0+c2xvd3BhdGhfbWFwcGluZywKLQkJCXNpemVvZihzdHJ1Y3QgYm54Mnhfc2xvd3BhdGgpKTsKLQotI2lmZGVmIEJDTV9DTklDCi0JQk5YMlhfUENJX0FMTE9DKGJwLT50MSwgJmJwLT50MV9tYXBwaW5nLCA2NCoxMDI0KTsKLQotCS8qIGFsbG9jYXRlIHNlYXJjaGVyIFQyIHRhYmxlCi0JICAgd2UgYWxsb2NhdGUgMS80IG9mIGFsbG9jIG51bSBmb3IgVDIKLQkgICh3aGljaCBpcyBub3QgZW50ZXJlZCBpbnRvIHRoZSBJTFQpICovCi0JQk5YMlhfUENJX0FMTE9DKGJwLT50MiwgJmJwLT50Ml9tYXBwaW5nLCAxNioxMDI0KTsKLQotCS8qIEluaXRpYWxpemUgVDIgKGZvciAxMDI0IGNvbm5lY3Rpb25zKSAqLwotCWZvciAoaSA9IDA7IGkgPCAxNioxMDI0OyBpICs9IDY0KQotCQkqKHU2NCAqKSgoY2hhciAqKWJwLT50MiArIGkgKyA1NikgPSBicC0+dDJfbWFwcGluZyArIGkgKyA2NDsKLQotCS8qIFRpbWVyIGJsb2NrIGFycmF5ICg4Kk1BWF9DT05OKSBwaHlzIHVuY2FjaGVkIGZvciBub3cgMTAyNCBjb25ucyAqLwotCUJOWDJYX1BDSV9BTExPQyhicC0+dGltZXJzLCAmYnAtPnRpbWVyc19tYXBwaW5nLCA4KjEwMjQpOwotCi0JLyogUU0gcXVldWVzICgxMjgqTUFYX0NPTk4pICovCi0JQk5YMlhfUENJX0FMTE9DKGJwLT5xbSwgJmJwLT5xbV9tYXBwaW5nLCAxMjgqMTAyNCk7Ci0KLQlCTlgyWF9QQ0lfQUxMT0MoYnAtPmNuaWNfc2IsICZicC0+Y25pY19zYl9tYXBwaW5nLAotCQkJc2l6ZW9mKHN0cnVjdCBob3N0X3N0YXR1c19ibG9jaykpOwotI2VuZGlmCi0KLQkvKiBTbG93IHBhdGggcmluZyAqLwotCUJOWDJYX1BDSV9BTExPQyhicC0+c3BxLCAmYnAtPnNwcV9tYXBwaW5nLCBCQ01fUEFHRV9TSVpFKTsKLQotCXJldHVybiAwOwotCi1hbGxvY19tZW1fZXJyOgotCWJueDJ4X2ZyZWVfbWVtKGJwKTsKLQlyZXR1cm4gLUVOT01FTTsKLQotI3VuZGVmIEJOWDJYX1BDSV9BTExPQwotI3VuZGVmIEJOWDJYX0FMTE9DCi19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2ZyZWVfdHhfc2ticyhzdHJ1Y3QgYm54MnggKmJwKQotewotCWludCBpOwotCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKLQkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07Ci0KLQkJdTE2IGJkX2NvbnMgPSBmcC0+dHhfYmRfY29uczsKLQkJdTE2IHN3X3Byb2QgPSBmcC0+dHhfcGt0X3Byb2Q7Ci0JCXUxNiBzd19jb25zID0gZnAtPnR4X3BrdF9jb25zOwotCi0JCXdoaWxlIChzd19jb25zICE9IHN3X3Byb2QpIHsKLQkJCWJkX2NvbnMgPSBibngyeF9mcmVlX3R4X3BrdChicCwgZnAsIFRYX0JEKHN3X2NvbnMpKTsKLQkJCXN3X2NvbnMrKzsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgYm54MnhfZnJlZV9yeF9za2JzKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IGksIGo7Ci0KLQlmb3JfZWFjaF9xdWV1ZShicCwgaikgewotCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtqXTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1JYX0JEOyBpKyspIHsKLQkJCXN0cnVjdCBzd19yeF9iZCAqcnhfYnVmID0gJmZwLT5yeF9idWZfcmluZ1tpXTsKLQkJCXN0cnVjdCBza19idWZmICpza2IgPSByeF9idWYtPnNrYjsKLQotCQkJaWYgKHNrYiA9PSBOVUxMKQotCQkJCWNvbnRpbnVlOwotCi0JCQlkbWFfdW5tYXBfc2luZ2xlKCZicC0+cGRldi0+ZGV2LAotCQkJCQkgZG1hX3VubWFwX2FkZHIocnhfYnVmLCBtYXBwaW5nKSwKLQkJCQkJIGJwLT5yeF9idWZfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTsKLQotCQkJcnhfYnVmLT5za2IgPSBOVUxMOwotCQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQl9Ci0JCWlmICghZnAtPmRpc2FibGVfdHBhKQotCQkJYm54MnhfZnJlZV90cGFfcG9vbChicCwgZnAsIENISVBfSVNfRTEoYnApID8KLQkJCQkJICAgIEVUSF9NQVhfQUdHUkVHQVRJT05fUVVFVUVTX0UxIDoKLQkJCQkJICAgIEVUSF9NQVhfQUdHUkVHQVRJT05fUVVFVUVTX0UxSCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBibngyeF9mcmVlX3NrYnMoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlibngyeF9mcmVlX3R4X3NrYnMoYnApOwotCWJueDJ4X2ZyZWVfcnhfc2ticyhicCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2ZyZWVfbXNpeF9pcnFzKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IGksIG9mZnNldCA9IDE7Ci0KLQlmcmVlX2lycShicC0+bXNpeF90YWJsZVswXS52ZWN0b3IsIGJwLT5kZXYpOwotCURQKE5FVElGX01TR19JRkRPV04sICJyZWxlYXNlZCBzcCBpcnEgKCVkKVxuIiwKLQkgICBicC0+bXNpeF90YWJsZVswXS52ZWN0b3IpOwotCi0jaWZkZWYgQkNNX0NOSUMKLQlvZmZzZXQrKzsKLSNlbmRpZgotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7Ci0JCURQKE5FVElGX01TR19JRkRPV04sICJhYm91dCB0byByZWxlYXNlIGZwICMlZC0+JWQgaXJxICAiCi0JCSAgICJzdGF0ZSAleFxuIiwgaSwgYnAtPm1zaXhfdGFibGVbaSArIG9mZnNldF0udmVjdG9yLAotCQkgICBibngyeF9mcChicCwgaSwgc3RhdGUpKTsKLQotCQlmcmVlX2lycShicC0+bXNpeF90YWJsZVtpICsgb2Zmc2V0XS52ZWN0b3IsICZicC0+ZnBbaV0pOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYm54MnhfZnJlZV9pcnEoc3RydWN0IGJueDJ4ICpicCwgYm9vbCBkaXNhYmxlX29ubHkpCi17Ci0JaWYgKGJwLT5mbGFncyAmIFVTSU5HX01TSVhfRkxBRykgewotCQlpZiAoIWRpc2FibGVfb25seSkKLQkJCWJueDJ4X2ZyZWVfbXNpeF9pcnFzKGJwKTsKLQkJcGNpX2Rpc2FibGVfbXNpeChicC0+cGRldik7Ci0JCWJwLT5mbGFncyAmPSB+VVNJTkdfTVNJWF9GTEFHOwotCi0JfSBlbHNlIGlmIChicC0+ZmxhZ3MgJiBVU0lOR19NU0lfRkxBRykgewotCQlpZiAoIWRpc2FibGVfb25seSkKLQkJCWZyZWVfaXJxKGJwLT5wZGV2LT5pcnEsIGJwLT5kZXYpOwotCQlwY2lfZGlzYWJsZV9tc2koYnAtPnBkZXYpOwotCQlicC0+ZmxhZ3MgJj0gflVTSU5HX01TSV9GTEFHOwotCi0JfSBlbHNlIGlmICghZGlzYWJsZV9vbmx5KQotCQlmcmVlX2lycShicC0+cGRldi0+aXJxLCBicC0+ZGV2KTsKLX0KLQotc3RhdGljIGludCBibngyeF9lbmFibGVfbXNpeChzdHJ1Y3QgYm54MnggKmJwKQotewotCWludCBpLCByYywgb2Zmc2V0ID0gMTsKLQlpbnQgaWd1X3ZlYyA9IDA7Ci0KLQlicC0+bXNpeF90YWJsZVswXS5lbnRyeSA9IGlndV92ZWM7Ci0JRFAoTkVUSUZfTVNHX0lGVVAsICJtc2l4X3RhYmxlWzBdLmVudHJ5ID0gJWQgKHNsb3dwYXRoKVxuIiwgaWd1X3ZlYyk7Ci0KLSNpZmRlZiBCQ01fQ05JQwotCWlndV92ZWMgPSBCUF9MX0lEKGJwKSArIG9mZnNldDsKLQlicC0+bXNpeF90YWJsZVsxXS5lbnRyeSA9IGlndV92ZWM7Ci0JRFAoTkVUSUZfTVNHX0lGVVAsICJtc2l4X3RhYmxlWzFdLmVudHJ5ID0gJWQgKENOSUMpXG4iLCBpZ3VfdmVjKTsKLQlvZmZzZXQrKzsKLSNlbmRpZgotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7Ci0JCWlndV92ZWMgPSBCUF9MX0lEKGJwKSArIG9mZnNldCArIGk7Ci0JCWJwLT5tc2l4X3RhYmxlW2kgKyBvZmZzZXRdLmVudHJ5ID0gaWd1X3ZlYzsKLQkJRFAoTkVUSUZfTVNHX0lGVVAsICJtc2l4X3RhYmxlWyVkXS5lbnRyeSA9ICVkICIKLQkJICAgIihmYXN0cGF0aCAjJXUpXG4iLCBpICsgb2Zmc2V0LCBpZ3VfdmVjLCBpKTsKLQl9Ci0KLQlyYyA9IHBjaV9lbmFibGVfbXNpeChicC0+cGRldiwgJmJwLT5tc2l4X3RhYmxlWzBdLAotCQkJICAgICBCTlgyWF9OVU1fUVVFVUVTKGJwKSArIG9mZnNldCk7Ci0KLQkvKgotCSAqIHJlY29uZmlndXJlIG51bWJlciBvZiB0eC9yeCBxdWV1ZXMgYWNjb3JkaW5nIHRvIGF2YWlsYWJsZQotCSAqIE1TSS1YIHZlY3RvcnMKLQkgKi8KLQlpZiAocmMgPj0gQk5YMlhfTUlOX01TSVhfVkVDX0NOVCkgewotCQkvKiB2ZWN0b3JzIGF2YWlsYWJsZSBmb3IgRlAgKi8KLQkJaW50IGZwX3ZlYyA9IHJjIC0gQk5YMlhfTVNJWF9WRUNfRlBfU1RBUlQ7Ci0KLQkJRFAoTkVUSUZfTVNHX0lGVVAsCi0JCSAgICJUcnlpbmcgdG8gdXNlIGxlc3MgTVNJLVggdmVjdG9yczogJWRcbiIsIHJjKTsKLQotCQlyYyA9IHBjaV9lbmFibGVfbXNpeChicC0+cGRldiwgJmJwLT5tc2l4X3RhYmxlWzBdLCByYyk7Ci0KLQkJaWYgKHJjKSB7Ci0JCQlEUChORVRJRl9NU0dfSUZVUCwKLQkJCSAgICJNU0ktWCBpcyBub3QgYXR0YWluYWJsZSAgcmMgJWRcbiIsIHJjKTsKLQkJCXJldHVybiByYzsKLQkJfQotCi0JCWJwLT5udW1fcXVldWVzID0gbWluKGJwLT5udW1fcXVldWVzLCBmcF92ZWMpOwotCi0JCURQKE5FVElGX01TR19JRlVQLCAiTmV3IHF1ZXVlIGNvbmZpZ3VyYXRpb24gc2V0OiAlZFxuIiwKLQkJCQkgIGJwLT5udW1fcXVldWVzKTsKLQl9IGVsc2UgaWYgKHJjKSB7Ci0JCURQKE5FVElGX01TR19JRlVQLCAiTVNJLVggaXMgbm90IGF0dGFpbmFibGUgIHJjICVkXG4iLCByYyk7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlicC0+ZmxhZ3MgfD0gVVNJTkdfTVNJWF9GTEFHOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYm54MnhfcmVxX21zaXhfaXJxcyhzdHJ1Y3QgYm54MnggKmJwKQotewotCWludCBpLCByYywgb2Zmc2V0ID0gMTsKLQotCXJjID0gcmVxdWVzdF9pcnEoYnAtPm1zaXhfdGFibGVbMF0udmVjdG9yLCBibngyeF9tc2l4X3NwX2ludCwgMCwKLQkJCSBicC0+ZGV2LT5uYW1lLCBicC0+ZGV2KTsKLQlpZiAocmMpIHsKLQkJQk5YMlhfRVJSKCJyZXF1ZXN0IHNwIGlycSBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotI2lmZGVmIEJDTV9DTklDCi0Jb2Zmc2V0Kys7Ci0jZW5kaWYKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgewotCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKLQkJc25wcmludGYoZnAtPm5hbWUsIHNpemVvZihmcC0+bmFtZSksICIlcy1mcC0lZCIsCi0JCQkgYnAtPmRldi0+bmFtZSwgaSk7Ci0KLQkJcmMgPSByZXF1ZXN0X2lycShicC0+bXNpeF90YWJsZVtpICsgb2Zmc2V0XS52ZWN0b3IsCi0JCQkJIGJueDJ4X21zaXhfZnBfaW50LCAwLCBmcC0+bmFtZSwgZnApOwotCQlpZiAocmMpIHsKLQkJCUJOWDJYX0VSUigicmVxdWVzdCBmcCAjJWQgaXJxIGZhaWxlZCAgcmMgJWRcbiIsIGksIHJjKTsKLQkJCWJueDJ4X2ZyZWVfbXNpeF9pcnFzKGJwKTsKLQkJCXJldHVybiAtRUJVU1k7Ci0JCX0KLQotCQlmcC0+c3RhdGUgPSBCTlgyWF9GUF9TVEFURV9JUlE7Ci0JfQotCi0JaSA9IEJOWDJYX05VTV9RVUVVRVMoYnApOwotCW5ldGRldl9pbmZvKGJwLT5kZXYsICJ1c2luZyBNU0ktWCAgSVJRczogc3AgJWQgIGZwWyVkXSAlZCIKLQkgICAgICAgIiAuLi4gZnBbJWRdICVkXG4iLAotCSAgICAgICBicC0+bXNpeF90YWJsZVswXS52ZWN0b3IsCi0JICAgICAgIDAsIGJwLT5tc2l4X3RhYmxlW29mZnNldF0udmVjdG9yLAotCSAgICAgICBpIC0gMSwgYnAtPm1zaXhfdGFibGVbb2Zmc2V0ICsgaSAtIDFdLnZlY3Rvcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBibngyeF9lbmFibGVfbXNpKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IHJjOwotCi0JcmMgPSBwY2lfZW5hYmxlX21zaShicC0+cGRldik7Ci0JaWYgKHJjKSB7Ci0JCURQKE5FVElGX01TR19JRlVQLCAiTVNJIGlzIG5vdCBhdHRhaW5hYmxlXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlicC0+ZmxhZ3MgfD0gVVNJTkdfTVNJX0ZMQUc7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBibngyeF9yZXFfaXJxKHN0cnVjdCBibngyeCAqYnApCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmM7Ci0KLQlpZiAoYnAtPmZsYWdzICYgVVNJTkdfTVNJX0ZMQUcpCi0JCWZsYWdzID0gMDsKLQllbHNlCi0JCWZsYWdzID0gSVJRRl9TSEFSRUQ7Ci0KLQlyYyA9IHJlcXVlc3RfaXJxKGJwLT5wZGV2LT5pcnEsIGJueDJ4X2ludGVycnVwdCwgZmxhZ3MsCi0JCQkgYnAtPmRldi0+bmFtZSwgYnAtPmRldik7Ci0JaWYgKCFyYykKLQkJYm54MnhfZnAoYnAsIDAsIHN0YXRlKSA9IEJOWDJYX0ZQX1NUQVRFX0lSUTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfbmFwaV9lbmFibGUoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpbnQgaTsKLQotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQotCQluYXBpX2VuYWJsZSgmYm54MnhfZnAoYnAsIGksIG5hcGkpKTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfbmFwaV9kaXNhYmxlKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IGk7Ci0KLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkKLQkJbmFwaV9kaXNhYmxlKCZibngyeF9mcChicCwgaSwgbmFwaSkpOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9uZXRpZl9zdGFydChzdHJ1Y3QgYm54MnggKmJwKQotewotCWludCBpbnRyX3NlbTsKLQotCWludHJfc2VtID0gYXRvbWljX2RlY19hbmRfdGVzdCgmYnAtPmludHJfc2VtKTsKLQlzbXBfd21iKCk7IC8qIEVuc3VyZSB0aGF0IGJwLT5pbnRyX3NlbSB1cGRhdGUgaXMgU01QLXNhZmUgKi8KLQotCWlmIChpbnRyX3NlbSkgewotCQlpZiAobmV0aWZfcnVubmluZyhicC0+ZGV2KSkgewotCQkJYm54MnhfbmFwaV9lbmFibGUoYnApOwotCQkJYm54MnhfaW50X2VuYWJsZShicCk7Ci0JCQlpZiAoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX09QRU4pCi0JCQkJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKGJwLT5kZXYpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBibngyeF9uZXRpZl9zdG9wKHN0cnVjdCBibngyeCAqYnAsIGludCBkaXNhYmxlX2h3KQotewotCWJueDJ4X2ludF9kaXNhYmxlX3N5bmMoYnAsIGRpc2FibGVfaHcpOwotCWJueDJ4X25hcGlfZGlzYWJsZShicCk7Ci0JbmV0aWZfdHhfZGlzYWJsZShicC0+ZGV2KTsKLX0KLQotLyoKLSAqIEluaXQgc2VydmljZSBmdW5jdGlvbnMKLSAqLwotCi0vKioKLSAqIFNldHMgYSBNQUMgaW4gYSBDQU0gZm9yIGEgZmV3IEwyIENsaWVudHMgZm9yIEUxIGNoaXAKLSAqCi0gKiBAcGFyYW0gYnAgZHJpdmVyIGRlc2NyaXB0b3IKLSAqIEBwYXJhbSBzZXQgc2V0IG9yIGNsZWFyIGFuIGVudHJ5ICgxIG9yIDApCi0gKiBAcGFyYW0gbWFjIHBvaW50ZXIgdG8gYSBidWZmZXIgY29udGFpbmluZyBhIE1BQwotICogQHBhcmFtIGNsX2JpdF92ZWMgYml0IHZlY3RvciBvZiBjbGllbnRzIHRvIHJlZ2lzdGVyIGEgTUFDIGZvcgotICogQHBhcmFtIGNhbV9vZmZzZXQgb2Zmc2V0IGluIGEgQ0FNIHRvIHVzZQotICogQHBhcmFtIHdpdGhfYmNhc3Qgc2V0IGJyb2FkY2FzdCBNQUMgYXMgd2VsbAotICovCi1zdGF0aWMgdm9pZCBibngyeF9zZXRfbWFjX2FkZHJfZTFfZ2VuKHN0cnVjdCBibngyeCAqYnAsIGludCBzZXQsIHU4ICptYWMsCi0JCQkJICAgICAgdTMyIGNsX2JpdF92ZWMsIHU4IGNhbV9vZmZzZXQsCi0JCQkJICAgICAgdTggd2l0aF9iY2FzdCkKLXsKLQlzdHJ1Y3QgbWFjX2NvbmZpZ3VyYXRpb25fY21kICpjb25maWcgPSBibngyeF9zcChicCwgbWFjX2NvbmZpZyk7Ci0JaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKLQotCS8qIENBTSBhbGxvY2F0aW9uCi0JICogdW5pY2FzdHMgMC0zMTpwb3J0MCAzMi02Mzpwb3J0MQotCSAqIG11bHRpY2FzdCA2NC0xMjc6cG9ydDAgMTI4LTE5MTpwb3J0MQotCSAqLwotCWNvbmZpZy0+aGRyLmxlbmd0aCA9IDEgKyAod2l0aF9iY2FzdCA/IDEgOiAwKTsKLQljb25maWctPmhkci5vZmZzZXQgPSBjYW1fb2Zmc2V0OwotCWNvbmZpZy0+aGRyLmNsaWVudF9pZCA9IDB4ZmY7Ci0JY29uZmlnLT5oZHIucmVzZXJ2ZWQxID0gMDsKLQotCS8qIHByaW1hcnkgTUFDICovCi0JY29uZmlnLT5jb25maWdfdGFibGVbMF0uY2FtX2VudHJ5Lm1zYl9tYWNfYWRkciA9Ci0JCQkJCXN3YWIxNigqKHUxNiAqKSZtYWNbMF0pOwotCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLmNhbV9lbnRyeS5taWRkbGVfbWFjX2FkZHIgPQotCQkJCQlzd2FiMTYoKih1MTYgKikmbWFjWzJdKTsKLQljb25maWctPmNvbmZpZ190YWJsZVswXS5jYW1fZW50cnkubHNiX21hY19hZGRyID0KLQkJCQkJc3dhYjE2KCoodTE2ICopJm1hY1s0XSk7Ci0JY29uZmlnLT5jb25maWdfdGFibGVbMF0uY2FtX2VudHJ5LmZsYWdzID0gY3B1X3RvX2xlMTYocG9ydCk7Ci0JaWYgKHNldCkKLQkJY29uZmlnLT5jb25maWdfdGFibGVbMF0udGFyZ2V0X3RhYmxlX2VudHJ5LmZsYWdzID0gMDsKLQllbHNlCi0JCUNBTV9JTlZBTElEQVRFKGNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdKTsKLQljb25maWctPmNvbmZpZ190YWJsZVswXS50YXJnZXRfdGFibGVfZW50cnkuY2xpZW50c19iaXRfdmVjdG9yID0KLQkJCQkJCWNwdV90b19sZTMyKGNsX2JpdF92ZWMpOwotCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLnRhcmdldF90YWJsZV9lbnRyeS52bGFuX2lkID0gMDsKLQotCURQKE5FVElGX01TR19JRlVQLCAiJXMgTUFDICglMDR4OiUwNHg6JTA0eClcbiIsCi0JICAgKHNldCA/ICJzZXR0aW5nIiA6ICJjbGVhcmluZyIpLAotCSAgIGNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLmNhbV9lbnRyeS5tc2JfbWFjX2FkZHIsCi0JICAgY29uZmlnLT5jb25maWdfdGFibGVbMF0uY2FtX2VudHJ5Lm1pZGRsZV9tYWNfYWRkciwKLQkgICBjb25maWctPmNvbmZpZ190YWJsZVswXS5jYW1fZW50cnkubHNiX21hY19hZGRyKTsKLQotCS8qIGJyb2FkY2FzdCAqLwotCWlmICh3aXRoX2JjYXN0KSB7Ci0JCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzFdLmNhbV9lbnRyeS5tc2JfbWFjX2FkZHIgPQotCQkJY3B1X3RvX2xlMTYoMHhmZmZmKTsKLQkJY29uZmlnLT5jb25maWdfdGFibGVbMV0uY2FtX2VudHJ5Lm1pZGRsZV9tYWNfYWRkciA9Ci0JCQljcHVfdG9fbGUxNigweGZmZmYpOwotCQljb25maWctPmNvbmZpZ190YWJsZVsxXS5jYW1fZW50cnkubHNiX21hY19hZGRyID0KLQkJCWNwdV90b19sZTE2KDB4ZmZmZik7Ci0JCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzFdLmNhbV9lbnRyeS5mbGFncyA9IGNwdV90b19sZTE2KHBvcnQpOwotCQlpZiAoc2V0KQotCQkJY29uZmlnLT5jb25maWdfdGFibGVbMV0udGFyZ2V0X3RhYmxlX2VudHJ5LmZsYWdzID0KLQkJCQkJVFNUT1JNX0NBTV9UQVJHRVRfVEFCTEVfRU5UUllfQlJPQURDQVNUOwotCQllbHNlCi0JCQlDQU1fSU5WQUxJREFURShjb25maWctPmNvbmZpZ190YWJsZVsxXSk7Ci0JCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzFdLnRhcmdldF90YWJsZV9lbnRyeS5jbGllbnRzX2JpdF92ZWN0b3IgPQotCQkJCQkJCWNwdV90b19sZTMyKGNsX2JpdF92ZWMpOwotCQljb25maWctPmNvbmZpZ190YWJsZVsxXS50YXJnZXRfdGFibGVfZW50cnkudmxhbl9pZCA9IDA7Ci0JfQotCi0JYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfU0VUX01BQywgMCwKLQkJICAgICAgVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19jb25maWcpKSwKLQkJICAgICAgVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19jb25maWcpKSwgMCk7Ci19Ci0KLS8qKgotICogU2V0cyBhIE1BQyBpbiBhIENBTSBmb3IgYSBmZXcgTDIgQ2xpZW50cyBmb3IgRTFIIGNoaXAKLSAqCi0gKiBAcGFyYW0gYnAgZHJpdmVyIGRlc2NyaXB0b3IKLSAqIEBwYXJhbSBzZXQgc2V0IG9yIGNsZWFyIGFuIGVudHJ5ICgxIG9yIDApCi0gKiBAcGFyYW0gbWFjIHBvaW50ZXIgdG8gYSBidWZmZXIgY29udGFpbmluZyBhIE1BQwotICogQHBhcmFtIGNsX2JpdF92ZWMgYml0IHZlY3RvciBvZiBjbGllbnRzIHRvIHJlZ2lzdGVyIGEgTUFDIGZvcgotICogQHBhcmFtIGNhbV9vZmZzZXQgb2Zmc2V0IGluIGEgQ0FNIHRvIHVzZQotICovCi1zdGF0aWMgdm9pZCBibngyeF9zZXRfbWFjX2FkZHJfZTFoX2dlbihzdHJ1Y3QgYm54MnggKmJwLCBpbnQgc2V0LCB1OCAqbWFjLAotCQkJCSAgICAgICB1MzIgY2xfYml0X3ZlYywgdTggY2FtX29mZnNldCkKLXsKLQlzdHJ1Y3QgbWFjX2NvbmZpZ3VyYXRpb25fY21kX2UxaCAqY29uZmlnID0KLQkJKHN0cnVjdCBtYWNfY29uZmlndXJhdGlvbl9jbWRfZTFoICopYm54Mnhfc3AoYnAsIG1hY19jb25maWcpOwotCi0JY29uZmlnLT5oZHIubGVuZ3RoID0gMTsKLQljb25maWctPmhkci5vZmZzZXQgPSBjYW1fb2Zmc2V0OwotCWNvbmZpZy0+aGRyLmNsaWVudF9pZCA9IDB4ZmY7Ci0JY29uZmlnLT5oZHIucmVzZXJ2ZWQxID0gMDsKLQotCS8qIHByaW1hcnkgTUFDICovCi0JY29uZmlnLT5jb25maWdfdGFibGVbMF0ubXNiX21hY19hZGRyID0KLQkJCQkJc3dhYjE2KCoodTE2ICopJm1hY1swXSk7Ci0JY29uZmlnLT5jb25maWdfdGFibGVbMF0ubWlkZGxlX21hY19hZGRyID0KLQkJCQkJc3dhYjE2KCoodTE2ICopJm1hY1syXSk7Ci0JY29uZmlnLT5jb25maWdfdGFibGVbMF0ubHNiX21hY19hZGRyID0KLQkJCQkJc3dhYjE2KCoodTE2ICopJm1hY1s0XSk7Ci0JY29uZmlnLT5jb25maWdfdGFibGVbMF0uY2xpZW50c19iaXRfdmVjdG9yID0KLQkJCQkJY3B1X3RvX2xlMzIoY2xfYml0X3ZlYyk7Ci0JY29uZmlnLT5jb25maWdfdGFibGVbMF0udmxhbl9pZCA9IDA7Ci0JY29uZmlnLT5jb25maWdfdGFibGVbMF0uZTFob3ZfaWQgPSBjcHVfdG9fbGUxNihicC0+ZTFob3YpOwotCWlmIChzZXQpCi0JCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLmZsYWdzID0gQlBfUE9SVChicCk7Ci0JZWxzZQotCQljb25maWctPmNvbmZpZ190YWJsZVswXS5mbGFncyA9Ci0JCQkJTUFDX0NPTkZJR1VSQVRJT05fRU5UUllfRTFIX0FDVElPTl9UWVBFOwotCi0JRFAoTkVUSUZfTVNHX0lGVVAsICIlcyBNQUMgKCUwNHg6JTA0eDolMDR4KSAgRTFIT1YgJWQgIENMSUQgbWFzayAlZFxuIiwKLQkgICAoc2V0ID8gInNldHRpbmciIDogImNsZWFyaW5nIiksCi0JICAgY29uZmlnLT5jb25maWdfdGFibGVbMF0ubXNiX21hY19hZGRyLAotCSAgIGNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLm1pZGRsZV9tYWNfYWRkciwKLQkgICBjb25maWctPmNvbmZpZ190YWJsZVswXS5sc2JfbWFjX2FkZHIsIGJwLT5lMWhvdiwgY2xfYml0X3ZlYyk7Ci0KLQlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9TRVRfTUFDLCAwLAotCQkgICAgICBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgbWFjX2NvbmZpZykpLAotCQkgICAgICBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgbWFjX2NvbmZpZykpLCAwKTsKLX0KLQotc3RhdGljIGludCBibngyeF93YWl0X3JhbXJvZChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgc3RhdGUsIGludCBpZHgsCi0JCQkgICAgIGludCAqc3RhdGVfcCwgaW50IHBvbGwpCi17Ci0JLyogY2FuIHRha2UgYSB3aGlsZSBpZiBhbnkgcG9ydCBpcyBydW5uaW5nICovCi0JaW50IGNudCA9IDUwMDA7Ci0KLQlEUChORVRJRl9NU0dfSUZVUCwgIiVzIGZvciBzdGF0ZSB0byBiZWNvbWUgJXggb24gSURYIFslZF1cbiIsCi0JICAgcG9sbCA/ICJwb2xsaW5nIiA6ICJ3YWl0aW5nIiwgc3RhdGUsIGlkeCk7Ci0KLQltaWdodF9zbGVlcCgpOwotCXdoaWxlIChjbnQtLSkgewotCQlpZiAocG9sbCkgewotCQkJYm54MnhfcnhfaW50KGJwLT5mcCwgMTApOwotCQkJLyogaWYgaW5kZXggaXMgZGlmZmVyZW50IGZyb20gMAotCQkJICogdGhlIHJlcGx5IGZvciBzb21lIGNvbW1hbmRzIHdpbGwKLQkJCSAqIGJlIG9uIHRoZSBub24gZGVmYXVsdCBxdWV1ZQotCQkJICovCi0JCQlpZiAoaWR4KQotCQkJCWJueDJ4X3J4X2ludCgmYnAtPmZwW2lkeF0sIDEwKTsKLQkJfQotCi0JCW1iKCk7IC8qIHN0YXRlIGlzIGNoYW5nZWQgYnkgYm54Mnhfc3BfZXZlbnQoKSAqLwotCQlpZiAoKnN0YXRlX3AgPT0gc3RhdGUpIHsKLSNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCi0JCQlEUChORVRJRl9NU0dfSUZVUCwgImV4aXQgIChjbnQgJWQpXG4iLCA1MDAwIC0gY250KTsKLSNlbmRpZgotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQltc2xlZXAoMSk7Ci0KLQkJaWYgKGJwLT5wYW5pYykKLQkJCXJldHVybiAtRUlPOwotCX0KLQotCS8qIHRpbWVvdXQhICovCi0JQk5YMlhfRVJSKCJ0aW1lb3V0ICVzIGZvciBzdGF0ZSAleCBvbiBJRFggWyVkXVxuIiwKLQkJICBwb2xsID8gInBvbGxpbmciIDogIndhaXRpbmciLCBzdGF0ZSwgaWR4KTsKLSNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCi0JYm54MnhfcGFuaWMoKTsKLSNlbmRpZgotCi0JcmV0dXJuIC1FQlVTWTsKLX0KLQotc3RhdGljIHZvaWQgYm54Mnhfc2V0X2V0aF9tYWNfYWRkcl9lMWgoc3RydWN0IGJueDJ4ICpicCwgaW50IHNldCkKLXsKLQlicC0+c2V0X21hY19wZW5kaW5nKys7Ci0Jc21wX3dtYigpOwotCi0JYm54Mnhfc2V0X21hY19hZGRyX2UxaF9nZW4oYnAsIHNldCwgYnAtPmRldi0+ZGV2X2FkZHIsCi0JCQkJICAgKDEgPDwgYnAtPmZwLT5jbF9pZCksIEJQX0ZVTkMoYnApKTsKLQotCS8qIFdhaXQgZm9yIGEgY29tcGxldGlvbiAqLwotCWJueDJ4X3dhaXRfcmFtcm9kKGJwLCAwLCAwLCAmYnAtPnNldF9tYWNfcGVuZGluZywgc2V0ID8gMCA6IDEpOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9zZXRfZXRoX21hY19hZGRyX2UxKHN0cnVjdCBibngyeCAqYnAsIGludCBzZXQpCi17Ci0JYnAtPnNldF9tYWNfcGVuZGluZysrOwotCXNtcF93bWIoKTsKLQotCWJueDJ4X3NldF9tYWNfYWRkcl9lMV9nZW4oYnAsIHNldCwgYnAtPmRldi0+ZGV2X2FkZHIsCi0JCQkJICAoMSA8PCBicC0+ZnAtPmNsX2lkKSwgKEJQX1BPUlQoYnApID8gMzIgOiAwKSwKLQkJCQkgIDEpOwotCi0JLyogV2FpdCBmb3IgYSBjb21wbGV0aW9uICovCi0JYm54Mnhfd2FpdF9yYW1yb2QoYnAsIDAsIDAsICZicC0+c2V0X21hY19wZW5kaW5nLCBzZXQgPyAwIDogMSk7Ci19Ci0KLSNpZmRlZiBCQ01fQ05JQwotLyoqCi0gKiBTZXQgaVNDU0kgTUFDKHMpIGF0IHRoZSBuZXh0IGVudGllcyBpbiB0aGUgQ0FNIGFmdGVyIHRoZSBFVEgKLSAqIE1BQyhzKS4gVGhpcyBmdW5jdGlvbiB3aWxsIHdhaXQgdW50aWwgdGhlIHJhbWRvcmQgY29tcGxldGlvbgotICogcmV0dXJucy4KLSAqCi0gKiBAcGFyYW0gYnAgZHJpdmVyIGhhbmRsZQotICogQHBhcmFtIHNldCBzZXQgb3IgY2xlYXIgdGhlIENBTSBlbnRyeQotICoKLSAqIEByZXR1cm4gMCBpZiBjdXNzZXNzLCAtRU5PREVWIGlmIHJhbXJvZCBkb2Vzbid0IHJldHVybi4KLSAqLwotc3RhdGljIGludCBibngyeF9zZXRfaXNjc2lfZXRoX21hY19hZGRyKHN0cnVjdCBibngyeCAqYnAsIGludCBzZXQpCi17Ci0JdTMyIGNsX2JpdF92ZWMgPSAoMSA8PCBCQ01fSVNDU0lfRVRIX0NMX0lEKTsKLQotCWJwLT5zZXRfbWFjX3BlbmRpbmcrKzsKLQlzbXBfd21iKCk7Ci0KLQkvKiBTZW5kIGEgU0VUX01BQyByYW1yb2QgKi8KLQlpZiAoQ0hJUF9JU19FMShicCkpCi0JCWJueDJ4X3NldF9tYWNfYWRkcl9lMV9nZW4oYnAsIHNldCwgYnAtPmlzY3NpX21hYywKLQkJCQkgIGNsX2JpdF92ZWMsIChCUF9QT1JUKGJwKSA/IDMyIDogMCkgKyAyLAotCQkJCSAgMSk7Ci0JZWxzZQotCQkvKiBDQU0gYWxsb2NhdGlvbiBmb3IgRTFICi0JCSogdW5pY2FzdHM6IGJ5IGZ1bmMgbnVtYmVyCi0JCSogbXVsdGljYXN0OiAyMCtGVU5DKjIwLCAyMCBlYWNoCi0JCSovCi0JCWJueDJ4X3NldF9tYWNfYWRkcl9lMWhfZ2VuKGJwLCBzZXQsIGJwLT5pc2NzaV9tYWMsCi0JCQkJICAgY2xfYml0X3ZlYywgRTFIX0ZVTkNfTUFYICsgQlBfRlVOQyhicCkpOwotCi0JLyogV2FpdCBmb3IgYSBjb21wbGV0aW9uIHdoZW4gc2V0dGluZyAqLwotCWJueDJ4X3dhaXRfcmFtcm9kKGJwLCAwLCAwLCAmYnAtPnNldF9tYWNfcGVuZGluZywgc2V0ID8gMCA6IDEpOwotCi0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludCBibngyeF9zZXR1cF9sZWFkaW5nKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IHJjOwotCi0JLyogcmVzZXQgSUdVIHN0YXRlICovCi0JYm54MnhfYWNrX3NiKGJwLCBicC0+ZnBbMF0uc2JfaWQsIENTVE9STV9JRCwgMCwgSUdVX0lOVF9FTkFCTEUsIDApOwotCi0JLyogU0VUVVAgcmFtcm9kICovCi0JYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfUE9SVF9TRVRVUCwgMCwgMCwgMCwgMCk7Ci0KLQkvKiBXYWl0IGZvciBjb21wbGV0aW9uICovCi0JcmMgPSBibngyeF93YWl0X3JhbXJvZChicCwgQk5YMlhfU1RBVEVfT1BFTiwgMCwgJihicC0+c3RhdGUpLCAwKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBibngyeF9zZXR1cF9tdWx0aShzdHJ1Y3QgYm54MnggKmJwLCBpbnQgaW5kZXgpCi17Ci0Jc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaW5kZXhdOwotCi0JLyogcmVzZXQgSUdVIHN0YXRlICovCi0JYm54MnhfYWNrX3NiKGJwLCBmcC0+c2JfaWQsIENTVE9STV9JRCwgMCwgSUdVX0lOVF9FTkFCTEUsIDApOwotCi0JLyogU0VUVVAgcmFtcm9kICovCi0JZnAtPnN0YXRlID0gQk5YMlhfRlBfU1RBVEVfT1BFTklORzsKLQlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9DTElFTlRfU0VUVVAsIGluZGV4LCAwLAotCQkgICAgICBmcC0+Y2xfaWQsIDApOwotCi0JLyogV2FpdCBmb3IgY29tcGxldGlvbiAqLwotCXJldHVybiBibngyeF93YWl0X3JhbXJvZChicCwgQk5YMlhfRlBfU1RBVEVfT1BFTiwgaW5kZXgsCi0JCQkJICYoZnAtPnN0YXRlKSwgMCk7Ci19Ci0KLXN0YXRpYyBpbnQgYm54MnhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpOwotCi1zdGF0aWMgdm9pZCBibngyeF9zZXRfbnVtX3F1ZXVlc19tc2l4KHN0cnVjdCBibngyeCAqYnApCi17Ci0KLQlzd2l0Y2ggKGJwLT5tdWx0aV9tb2RlKSB7Ci0JY2FzZSBFVEhfUlNTX01PREVfRElTQUJMRUQ6Ci0JCWJwLT5udW1fcXVldWVzID0gMTsKLQkJYnJlYWs7Ci0KLQljYXNlIEVUSF9SU1NfTU9ERV9SRUdVTEFSOgotCQlpZiAobnVtX3F1ZXVlcykKLQkJCWJwLT5udW1fcXVldWVzID0gbWluX3QodTMyLCBudW1fcXVldWVzLAotCQkJCQkJICBCTlgyWF9NQVhfUVVFVUVTKGJwKSk7Ci0JCWVsc2UKLQkJCWJwLT5udW1fcXVldWVzID0gbWluX3QodTMyLCBudW1fb25saW5lX2NwdXMoKSwKLQkJCQkJCSAgQk5YMlhfTUFYX1FVRVVFUyhicCkpOwotCQlicmVhazsKLQotCi0JZGVmYXVsdDoKLQkJYnAtPm51bV9xdWV1ZXMgPSAxOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgYm54Mnhfc2V0X251bV9xdWV1ZXMoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpbnQgcmMgPSAwOwotCi0Jc3dpdGNoIChpbnRfbW9kZSkgewotCWNhc2UgSU5UX01PREVfSU5UeDoKLQljYXNlIElOVF9NT0RFX01TSToKLQkJYnAtPm51bV9xdWV1ZXMgPSAxOwotCQlEUChORVRJRl9NU0dfSUZVUCwgInNldCBudW1iZXIgb2YgcXVldWVzIHRvIDFcbiIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBTZXQgbnVtYmVyIG9mIHF1ZXVlcyBhY2NvcmRpbmcgdG8gYnAtPm11bHRpX21vZGUgdmFsdWUgKi8KLQkJYm54Mnhfc2V0X251bV9xdWV1ZXNfbXNpeChicCk7Ci0KLQkJRFAoTkVUSUZfTVNHX0lGVVAsICJzZXQgbnVtYmVyIG9mIHF1ZXVlcyB0byAlZFxuIiwKLQkJICAgYnAtPm51bV9xdWV1ZXMpOwotCi0JCS8qIGlmIHdlIGNhbid0IHVzZSBNU0ktWCB3ZSBvbmx5IG5lZWQgb25lIGZwLAotCQkgKiBzbyB0cnkgdG8gZW5hYmxlIE1TSS1YIHdpdGggdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgZnAncwotCQkgKiBhbmQgZmFsbGJhY2sgdG8gTVNJIG9yIGxlZ2FjeSBJTlR4IHdpdGggb25lIGZwCi0JCSAqLwotCQlyYyA9IGJueDJ4X2VuYWJsZV9tc2l4KGJwKTsKLQkJaWYgKHJjKQotCQkJLyogZmFpbGVkIHRvIGVuYWJsZSBNU0ktWCAqLwotCQkJYnAtPm51bV9xdWV1ZXMgPSAxOwotCQlicmVhazsKLQl9Ci0JYnAtPmRldi0+cmVhbF9udW1fdHhfcXVldWVzID0gYnAtPm51bV9xdWV1ZXM7Ci0JcmV0dXJuIHJjOwotfQotCi0jaWZkZWYgQkNNX0NOSUMKLXN0YXRpYyBpbnQgYm54MnhfY25pY19ub3RpZnkoc3RydWN0IGJueDJ4ICpicCwgaW50IGNtZCk7Ci1zdGF0aWMgdm9pZCBibngyeF9zZXR1cF9jbmljX2lycV9pbmZvKHN0cnVjdCBibngyeCAqYnApOwotI2VuZGlmCi0KLS8qIG11c3QgYmUgY2FsbGVkIHdpdGggcnRubF9sb2NrICovCi1zdGF0aWMgaW50IGJueDJ4X25pY19sb2FkKHN0cnVjdCBibngyeCAqYnAsIGludCBsb2FkX21vZGUpCi17Ci0JdTMyIGxvYWRfY29kZTsKLQlpbnQgaSwgcmM7Ci0KLSNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCi0JaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCi0JCXJldHVybiAtRVBFUk07Ci0jZW5kaWYKLQotCWJwLT5zdGF0ZSA9IEJOWDJYX1NUQVRFX09QRU5JTkdfV0FJVDRfTE9BRDsKLQotCXJjID0gYm54Mnhfc2V0X251bV9xdWV1ZXMoYnApOwotCi0JaWYgKGJueDJ4X2FsbG9jX21lbShicCkpIHsKLQkJYm54MnhfZnJlZV9pcnEoYnAsIHRydWUpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkKLQkJYm54MnhfZnAoYnAsIGksIGRpc2FibGVfdHBhKSA9Ci0JCQkJCSgoYnAtPmZsYWdzICYgVFBBX0VOQUJMRV9GTEFHKSA9PSAwKTsKLQotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQotCQluZXRpZl9uYXBpX2FkZChicC0+ZGV2LCAmYm54MnhfZnAoYnAsIGksIG5hcGkpLAotCQkJICAgICAgIGJueDJ4X3BvbGwsIDEyOCk7Ci0KLQlibngyeF9uYXBpX2VuYWJsZShicCk7Ci0KLQlpZiAoYnAtPmZsYWdzICYgVVNJTkdfTVNJWF9GTEFHKSB7Ci0JCXJjID0gYm54MnhfcmVxX21zaXhfaXJxcyhicCk7Ci0JCWlmIChyYykgewotCQkJYm54MnhfZnJlZV9pcnEoYnAsIHRydWUpOwotCQkJZ290byBsb2FkX2Vycm9yMTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIEZhbGwgdG8gSU5UeCBpZiBmYWlsZWQgdG8gZW5hYmxlIE1TSS1YIGR1ZSB0byBsYWNrIG9mCi0JCSAgIG1lbW9yeSAoaW4gYm54Mnhfc2V0X251bV9xdWV1ZXMoKSkgKi8KLQkJaWYgKChyYyAhPSAtRU5PTUVNKSAmJiAoaW50X21vZGUgIT0gSU5UX01PREVfSU5UeCkpCi0JCQlibngyeF9lbmFibGVfbXNpKGJwKTsKLQkJYm54MnhfYWNrX2ludChicCk7Ci0JCXJjID0gYm54MnhfcmVxX2lycShicCk7Ci0JCWlmIChyYykgewotCQkJQk5YMlhfRVJSKCJJUlEgcmVxdWVzdCBmYWlsZWQgIHJjICVkLCBhYm9ydGluZ1xuIiwgcmMpOwotCQkJYm54MnhfZnJlZV9pcnEoYnAsIHRydWUpOwotCQkJZ290byBsb2FkX2Vycm9yMTsKLQkJfQotCQlpZiAoYnAtPmZsYWdzICYgVVNJTkdfTVNJX0ZMQUcpIHsKLQkJCWJwLT5kZXYtPmlycSA9IGJwLT5wZGV2LT5pcnE7Ci0JCQluZXRkZXZfaW5mbyhicC0+ZGV2LCAidXNpbmcgTVNJICBJUlEgJWRcbiIsCi0JCQkJICAgIGJwLT5wZGV2LT5pcnEpOwotCQl9Ci0JfQotCi0JLyogU2VuZCBMT0FEX1JFUVVFU1QgY29tbWFuZCB0byBNQ1AKLQkgICBSZXR1cm5zIHRoZSB0eXBlIG9mIExPQUQgY29tbWFuZDoKLQkgICBpZiBpdCBpcyB0aGUgZmlyc3QgcG9ydCB0byBiZSBpbml0aWFsaXplZAotCSAgIGNvbW1vbiBibG9ja3Mgc2hvdWxkIGJlIGluaXRpYWxpemVkLCBvdGhlcndpc2UgLSBub3QKLQkqLwotCWlmICghQlBfTk9NQ1AoYnApKSB7Ci0JCWxvYWRfY29kZSA9IGJueDJ4X2Z3X2NvbW1hbmQoYnAsIERSVl9NU0dfQ09ERV9MT0FEX1JFUSk7Ci0JCWlmICghbG9hZF9jb2RlKSB7Ci0JCQlCTlgyWF9FUlIoIk1DUCByZXNwb25zZSBmYWlsdXJlLCBhYm9ydGluZ1xuIik7Ci0JCQlyYyA9IC1FQlVTWTsKLQkJCWdvdG8gbG9hZF9lcnJvcjI7Ci0JCX0KLQkJaWYgKGxvYWRfY29kZSA9PSBGV19NU0dfQ09ERV9EUlZfTE9BRF9SRUZVU0VEKSB7Ci0JCQlyYyA9IC1FQlVTWTsgLyogb3RoZXIgcG9ydCBpbiBkaWFnbm9zdGljIG1vZGUgKi8KLQkJCWdvdG8gbG9hZF9lcnJvcjI7Ci0JCX0KLQotCX0gZWxzZSB7Ci0JCWludCBwb3J0ID0gQlBfUE9SVChicCk7Ci0KLQkJRFAoTkVUSUZfTVNHX0lGVVAsICJOTyBNQ1AgLSBsb2FkIGNvdW50cyAgICAgICVkLCAlZCwgJWRcbiIsCi0JCSAgIGxvYWRfY291bnRbMF0sIGxvYWRfY291bnRbMV0sIGxvYWRfY291bnRbMl0pOwotCQlsb2FkX2NvdW50WzBdKys7Ci0JCWxvYWRfY291bnRbMSArIHBvcnRdKys7Ci0JCURQKE5FVElGX01TR19JRlVQLCAiTk8gTUNQIC0gbmV3IGxvYWQgY291bnRzICAlZCwgJWQsICVkXG4iLAotCQkgICBsb2FkX2NvdW50WzBdLCBsb2FkX2NvdW50WzFdLCBsb2FkX2NvdW50WzJdKTsKLQkJaWYgKGxvYWRfY291bnRbMF0gPT0gMSkKLQkJCWxvYWRfY29kZSA9IEZXX01TR19DT0RFX0RSVl9MT0FEX0NPTU1PTjsKLQkJZWxzZSBpZiAobG9hZF9jb3VudFsxICsgcG9ydF0gPT0gMSkKLQkJCWxvYWRfY29kZSA9IEZXX01TR19DT0RFX0RSVl9MT0FEX1BPUlQ7Ci0JCWVsc2UKLQkJCWxvYWRfY29kZSA9IEZXX01TR19DT0RFX0RSVl9MT0FEX0ZVTkNUSU9OOwotCX0KLQotCWlmICgobG9hZF9jb2RlID09IEZXX01TR19DT0RFX0RSVl9MT0FEX0NPTU1PTikgfHwKLQkgICAgKGxvYWRfY29kZSA9PSBGV19NU0dfQ09ERV9EUlZfTE9BRF9QT1JUKSkKLQkJYnAtPnBvcnQucG1mID0gMTsKLQllbHNlCi0JCWJwLT5wb3J0LnBtZiA9IDA7Ci0JRFAoTkVUSUZfTVNHX0xJTkssICJwbWYgJWRcbiIsIGJwLT5wb3J0LnBtZik7Ci0KLQkvKiBJbml0aWFsaXplIEhXICovCi0JcmMgPSBibngyeF9pbml0X2h3KGJwLCBsb2FkX2NvZGUpOwotCWlmIChyYykgewotCQlCTlgyWF9FUlIoIkhXIGluaXQgZmFpbGVkLCBhYm9ydGluZ1xuIik7Ci0JCWJueDJ4X2Z3X2NvbW1hbmQoYnAsIERSVl9NU0dfQ09ERV9MT0FEX0RPTkUpOwotCQlibngyeF9md19jb21tYW5kKGJwLCBEUlZfTVNHX0NPREVfVU5MT0FEX1JFUV9XT0xfTUNQKTsKLQkJYm54MnhfZndfY29tbWFuZChicCwgRFJWX01TR19DT0RFX1VOTE9BRF9ET05FKTsKLQkJZ290byBsb2FkX2Vycm9yMjsKLQl9Ci0KLQkvKiBTZXR1cCBOSUMgaW50ZXJuYWxzIGFuZCBlbmFibGUgaW50ZXJydXB0cyAqLwotCWJueDJ4X25pY19pbml0KGJwLCBsb2FkX2NvZGUpOwotCi0JaWYgKChsb2FkX2NvZGUgPT0gRldfTVNHX0NPREVfRFJWX0xPQURfQ09NTU9OKSAmJgotCSAgICAoYnAtPmNvbW1vbi5zaG1lbTJfYmFzZSkpCi0JCVNITUVNMl9XUihicCwgZGNjX3N1cHBvcnQsCi0JCQkgIChTSE1FTV9EQ0NfU1VQUE9SVF9ESVNBQkxFX0VOQUJMRV9QRl9UTFYgfAotCQkJICAgU0hNRU1fRENDX1NVUFBPUlRfQkFORFdJRFRIX0FMTE9DQVRJT05fVExWKSk7Ci0KLQkvKiBTZW5kIExPQURfRE9ORSBjb21tYW5kIHRvIE1DUCAqLwotCWlmICghQlBfTk9NQ1AoYnApKSB7Ci0JCWxvYWRfY29kZSA9IGJueDJ4X2Z3X2NvbW1hbmQoYnAsIERSVl9NU0dfQ09ERV9MT0FEX0RPTkUpOwotCQlpZiAoIWxvYWRfY29kZSkgewotCQkJQk5YMlhfRVJSKCJNQ1AgcmVzcG9uc2UgZmFpbHVyZSwgYWJvcnRpbmdcbiIpOwotCQkJcmMgPSAtRUJVU1k7Ci0JCQlnb3RvIGxvYWRfZXJyb3IzOwotCQl9Ci0JfQotCi0JYnAtPnN0YXRlID0gQk5YMlhfU1RBVEVfT1BFTklOR19XQUlUNF9QT1JUOwotCi0JcmMgPSBibngyeF9zZXR1cF9sZWFkaW5nKGJwKTsKLQlpZiAocmMpIHsKLQkJQk5YMlhfRVJSKCJTZXR1cCBsZWFkaW5nIGZhaWxlZCFcbiIpOwotI2lmbmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCi0JCWdvdG8gbG9hZF9lcnJvcjM7Ci0jZWxzZQotCQlicC0+cGFuaWMgPSAxOwotCQlyZXR1cm4gLUVCVVNZOwotI2VuZGlmCi0JfQotCi0JaWYgKENISVBfSVNfRTFIKGJwKSkKLQkJaWYgKGJwLT5tZl9jb25maWcgJiBGVU5DX01GX0NGR19GVU5DX0RJU0FCTEVEKSB7Ci0JCQlEUChORVRJRl9NU0dfSUZVUCwgIm1mX2NmZyBmdW5jdGlvbiBkaXNhYmxlZFxuIik7Ci0JCQlicC0+ZmxhZ3MgfD0gTUZfRlVOQ19ESVM7Ci0JCX0KLQotCWlmIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfT1BFTikgewotI2lmZGVmIEJDTV9DTklDCi0JCS8qIEVuYWJsZSBUaW1lciBzY2FuICovCi0JCVJFR19XUihicCwgVE1fUkVHX0VOX0xJTkVBUjBfVElNRVIgKyBCUF9QT1JUKGJwKSo0LCAxKTsKLSNlbmRpZgotCQlmb3JfZWFjaF9ub25kZWZhdWx0X3F1ZXVlKGJwLCBpKSB7Ci0JCQlyYyA9IGJueDJ4X3NldHVwX211bHRpKGJwLCBpKTsKLQkJCWlmIChyYykKLSNpZmRlZiBCQ01fQ05JQwotCQkJCWdvdG8gbG9hZF9lcnJvcjQ7Ci0jZWxzZQotCQkJCWdvdG8gbG9hZF9lcnJvcjM7Ci0jZW5kaWYKLQkJfQotCi0JCWlmIChDSElQX0lTX0UxKGJwKSkKLQkJCWJueDJ4X3NldF9ldGhfbWFjX2FkZHJfZTEoYnAsIDEpOwotCQllbHNlCi0JCQlibngyeF9zZXRfZXRoX21hY19hZGRyX2UxaChicCwgMSk7Ci0jaWZkZWYgQkNNX0NOSUMKLQkJLyogU2V0IGlTQ1NJIEwyIE1BQyAqLwotCQltdXRleF9sb2NrKCZicC0+Y25pY19tdXRleCk7Ci0JCWlmIChicC0+Y25pY19ldGhfZGV2LmRydl9zdGF0ZSAmIENOSUNfRFJWX1NUQVRFX1JFR0QpIHsKLQkJCWJueDJ4X3NldF9pc2NzaV9ldGhfbWFjX2FkZHIoYnAsIDEpOwotCQkJYnAtPmNuaWNfZmxhZ3MgfD0gQk5YMlhfQ05JQ19GTEFHX01BQ19TRVQ7Ci0JCQlibngyeF9pbml0X3NiKGJwLCBicC0+Y25pY19zYiwgYnAtPmNuaWNfc2JfbWFwcGluZywKLQkJCQkgICAgICBDTklDX1NCX0lEKGJwKSk7Ci0JCX0KLQkJbXV0ZXhfdW5sb2NrKCZicC0+Y25pY19tdXRleCk7Ci0jZW5kaWYKLQl9Ci0KLQlpZiAoYnAtPnBvcnQucG1mKQotCQlibngyeF9pbml0aWFsX3BoeV9pbml0KGJwLCBsb2FkX21vZGUpOwotCi0JLyogU3RhcnQgZmFzdCBwYXRoICovCi0Jc3dpdGNoIChsb2FkX21vZGUpIHsKLQljYXNlIExPQURfTk9STUFMOgotCQlpZiAoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX09QRU4pIHsKLQkJCS8qIFR4IHF1ZXVlIHNob3VsZCBiZSBvbmx5IHJlZW5hYmxlZCAqLwotCQkJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKGJwLT5kZXYpOwotCQl9Ci0JCS8qIEluaXRpYWxpemUgdGhlIHJlY2VpdmUgZmlsdGVyLiAqLwotCQlibngyeF9zZXRfcnhfbW9kZShicC0+ZGV2KTsKLQkJYnJlYWs7Ci0KLQljYXNlIExPQURfT1BFTjoKLQkJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhicC0+ZGV2KTsKLQkJaWYgKGJwLT5zdGF0ZSAhPSBCTlgyWF9TVEFURV9PUEVOKQotCQkJbmV0aWZfdHhfZGlzYWJsZShicC0+ZGV2KTsKLQkJLyogSW5pdGlhbGl6ZSB0aGUgcmVjZWl2ZSBmaWx0ZXIuICovCi0JCWJueDJ4X3NldF9yeF9tb2RlKGJwLT5kZXYpOwotCQlicmVhazsKLQotCWNhc2UgTE9BRF9ESUFHOgotCQkvKiBJbml0aWFsaXplIHRoZSByZWNlaXZlIGZpbHRlci4gKi8KLQkJYm54Mnhfc2V0X3J4X21vZGUoYnAtPmRldik7Ci0JCWJwLT5zdGF0ZSA9IEJOWDJYX1NUQVRFX0RJQUc7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKCFicC0+cG9ydC5wbWYpCi0JCWJueDJ4X19saW5rX3N0YXR1c191cGRhdGUoYnApOwotCi0JLyogc3RhcnQgdGhlIHRpbWVyICovCi0JbW9kX3RpbWVyKCZicC0+dGltZXIsIGppZmZpZXMgKyBicC0+Y3VycmVudF9pbnRlcnZhbCk7Ci0KLSNpZmRlZiBCQ01fQ05JQwotCWJueDJ4X3NldHVwX2NuaWNfaXJxX2luZm8oYnApOwotCWlmIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfT1BFTikKLQkJYm54MnhfY25pY19ub3RpZnkoYnAsIENOSUNfQ1RMX1NUQVJUX0NNRCk7Ci0jZW5kaWYKLQlibngyeF9pbmNfbG9hZF9jbnQoYnApOwotCi0JcmV0dXJuIDA7Ci0KLSNpZmRlZiBCQ01fQ05JQwotbG9hZF9lcnJvcjQ6Ci0JLyogRGlzYWJsZSBUaW1lciBzY2FuICovCi0JUkVHX1dSKGJwLCBUTV9SRUdfRU5fTElORUFSMF9USU1FUiArIEJQX1BPUlQoYnApKjQsIDApOwotI2VuZGlmCi1sb2FkX2Vycm9yMzoKLQlibngyeF9pbnRfZGlzYWJsZV9zeW5jKGJwLCAxKTsKLQlpZiAoIUJQX05PTUNQKGJwKSkgewotCQlibngyeF9md19jb21tYW5kKGJwLCBEUlZfTVNHX0NPREVfVU5MT0FEX1JFUV9XT0xfTUNQKTsKLQkJYm54MnhfZndfY29tbWFuZChicCwgRFJWX01TR19DT0RFX1VOTE9BRF9ET05FKTsKLQl9Ci0JYnAtPnBvcnQucG1mID0gMDsKLQkvKiBGcmVlIFNLQnMsIFNHRXMsIFRQQSBwb29sIGFuZCBkcml2ZXIgaW50ZXJuYWxzICovCi0JYm54MnhfZnJlZV9za2JzKGJwKTsKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkKLQkJYm54MnhfZnJlZV9yeF9zZ2VfcmFuZ2UoYnAsIGJwLT5mcCArIGksIE5VTV9SWF9TR0UpOwotbG9hZF9lcnJvcjI6Ci0JLyogUmVsZWFzZSBJUlFzICovCi0JYm54MnhfZnJlZV9pcnEoYnAsIGZhbHNlKTsKLWxvYWRfZXJyb3IxOgotCWJueDJ4X25hcGlfZGlzYWJsZShicCk7Ci0JZm9yX2VhY2hfcXVldWUoYnAsIGkpCi0JCW5ldGlmX25hcGlfZGVsKCZibngyeF9mcChicCwgaSwgbmFwaSkpOwotCWJueDJ4X2ZyZWVfbWVtKGJwKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBibngyeF9zdG9wX211bHRpKHN0cnVjdCBibngyeCAqYnAsIGludCBpbmRleCkKLXsKLQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpbmRleF07Ci0JaW50IHJjOwotCi0JLyogaGFsdCB0aGUgY29ubmVjdGlvbiAqLwotCWZwLT5zdGF0ZSA9IEJOWDJYX0ZQX1NUQVRFX0hBTFRJTkc7Ci0JYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfSEFMVCwgaW5kZXgsIDAsIGZwLT5jbF9pZCwgMCk7Ci0KLQkvKiBXYWl0IGZvciBjb21wbGV0aW9uICovCi0JcmMgPSBibngyeF93YWl0X3JhbXJvZChicCwgQk5YMlhfRlBfU1RBVEVfSEFMVEVELCBpbmRleCwKLQkJCSAgICAgICAmKGZwLT5zdGF0ZSksIDEpOwotCWlmIChyYykgLyogdGltZW91dCAqLwotCQlyZXR1cm4gcmM7Ci0KLQkvKiBkZWxldGUgY2ZjIGVudHJ5ICovCi0JYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfQ0ZDX0RFTCwgaW5kZXgsIDAsIDAsIDEpOwotCi0JLyogV2FpdCBmb3IgY29tcGxldGlvbiAqLwotCXJjID0gYm54Mnhfd2FpdF9yYW1yb2QoYnAsIEJOWDJYX0ZQX1NUQVRFX0NMT1NFRCwgaW5kZXgsCi0JCQkgICAgICAgJihmcC0+c3RhdGUpLCAxKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgYm54Mnhfc3RvcF9sZWFkaW5nKHN0cnVjdCBibngyeCAqYnApCi17Ci0JX19sZTE2IGRzYl9zcF9wcm9kX2lkeDsKLQkvKiBpZiB0aGUgb3RoZXIgcG9ydCBpcyBoYW5kbGluZyB0cmFmZmljLAotCSAgIHRoaXMgY2FuIHRha2UgYSBsb3Qgb2YgdGltZSAqLwotCWludCBjbnQgPSA1MDA7Ci0JaW50IHJjOwotCi0JbWlnaHRfc2xlZXAoKTsKLQotCS8qIFNlbmQgSEFMVCByYW1yb2QgKi8KLQlicC0+ZnBbMF0uc3RhdGUgPSBCTlgyWF9GUF9TVEFURV9IQUxUSU5HOwotCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX0hBTFQsIDAsIDAsIGJwLT5mcC0+Y2xfaWQsIDApOwotCi0JLyogV2FpdCBmb3IgY29tcGxldGlvbiAqLwotCXJjID0gYm54Mnhfd2FpdF9yYW1yb2QoYnAsIEJOWDJYX0ZQX1NUQVRFX0hBTFRFRCwgMCwKLQkJCSAgICAgICAmKGJwLT5mcFswXS5zdGF0ZSksIDEpOwotCWlmIChyYykgLyogdGltZW91dCAqLwotCQlyZXR1cm4gcmM7Ci0KLQlkc2Jfc3BfcHJvZF9pZHggPSAqYnAtPmRzYl9zcF9wcm9kOwotCi0JLyogU2VuZCBQT1JUX0RFTEVURSByYW1yb2QgKi8KLQlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9QT1JUX0RFTCwgMCwgMCwgMCwgMSk7Ci0KLQkvKiBXYWl0IGZvciBjb21wbGV0aW9uIHRvIGFycml2ZSBvbiBkZWZhdWx0IHN0YXR1cyBibG9jawotCSAgIHdlIGFyZSBnb2luZyB0byByZXNldCB0aGUgY2hpcCBhbnl3YXkKLQkgICBzbyB0aGVyZSBpcyBub3QgbXVjaCB0byBkbyBpZiB0aGlzIHRpbWVzIG91dAotCSAqLwotCXdoaWxlIChkc2Jfc3BfcHJvZF9pZHggPT0gKmJwLT5kc2Jfc3BfcHJvZCkgewotCQlpZiAoIWNudCkgewotCQkJRFAoTkVUSUZfTVNHX0lGRE9XTiwgInRpbWVvdXQgd2FpdGluZyBmb3IgcG9ydCBkZWwgIgotCQkJICAgImRzYl9zcF9wcm9kIDB4JXggIT0gZHNiX3NwX3Byb2RfaWR4IDB4JXhcbiIsCi0JCQkgICAqYnAtPmRzYl9zcF9wcm9kLCBkc2Jfc3BfcHJvZF9pZHgpOwotI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKLQkJCWJueDJ4X3BhbmljKCk7Ci0jZW5kaWYKLQkJCXJjID0gLUVCVVNZOwotCQkJYnJlYWs7Ci0JCX0KLQkJY250LS07Ci0JCW1zbGVlcCgxKTsKLQkJcm1iKCk7IC8qIFJlZnJlc2ggdGhlIGRzYl9zcF9wcm9kICovCi0JfQotCWJwLT5zdGF0ZSA9IEJOWDJYX1NUQVRFX0NMT1NJTkdfV0FJVDRfVU5MT0FEOwotCWJwLT5mcFswXS5zdGF0ZSA9IEJOWDJYX0ZQX1NUQVRFX0NMT1NFRDsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfcmVzZXRfZnVuYyhzdHJ1Y3QgYm54MnggKmJwKQotewotCWludCBwb3J0ID0gQlBfUE9SVChicCk7Ci0JaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKLQlpbnQgYmFzZSwgaTsKLQotCS8qIENvbmZpZ3VyZSBJR1UgKi8KLQlSRUdfV1IoYnAsIEhDX1JFR19MRUFESU5HX0VER0VfMCArIHBvcnQqOCwgMCk7Ci0JUkVHX1dSKGJwLCBIQ19SRUdfVFJBSUxJTkdfRURHRV8wICsgcG9ydCo4LCAwKTsKLQotI2lmZGVmIEJDTV9DTklDCi0JLyogRGlzYWJsZSBUaW1lciBzY2FuICovCi0JUkVHX1dSKGJwLCBUTV9SRUdfRU5fTElORUFSMF9USU1FUiArIHBvcnQqNCwgMCk7Ci0JLyoKLQkgKiBXYWl0IGZvciBhdCBsZWFzdCAxMG1zIGFuZCB1cCB0byAyIHNlY29uZCBmb3IgdGhlIHRpbWVycyBzY2FuIHRvCi0JICogY29tcGxldGUKLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMjAwOyBpKyspIHsKLQkJbXNsZWVwKDEwKTsKLQkJaWYgKCFSRUdfUkQoYnAsIFRNX1JFR19MSU4wX1NDQU5fT04gKyBwb3J0KjQpKQotCQkJYnJlYWs7Ci0JfQotI2VuZGlmCi0JLyogQ2xlYXIgSUxUICovCi0JYmFzZSA9IEZVTkNfSUxUX0JBU0UoZnVuYyk7Ci0JZm9yIChpID0gYmFzZTsgaSA8IGJhc2UgKyBJTFRfUEVSX0ZVTkM7IGkrKykKLQkJYm54MnhfaWx0X3dyKGJwLCBpLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfcmVzZXRfcG9ydChzdHJ1Y3QgYm54MnggKmJwKQotewotCWludCBwb3J0ID0gQlBfUE9SVChicCk7Ci0JdTMyIHZhbDsKLQotCVJFR19XUihicCwgTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCwgMCk7Ci0KLQkvKiBEbyBub3QgcmN2IHBhY2tldHMgdG8gQlJCICovCi0JUkVHX1dSKGJwLCBOSUdfUkVHX0xMSDBfQlJCMV9EUlZfTUFTSyArIHBvcnQqNCwgMHgwKTsKLQkvKiBEbyBub3QgZGlyZWN0IHJjdiBwYWNrZXRzIHRoYXQgYXJlIG5vdCBmb3IgTUNQIHRvIHRoZSBCUkIgKi8KLQlSRUdfV1IoYnAsIChwb3J0ID8gTklHX1JFR19MTEgxX0JSQjFfTk9UX01DUCA6Ci0JCQkgICBOSUdfUkVHX0xMSDBfQlJCMV9OT1RfTUNQKSwgMHgwKTsKLQotCS8qIENvbmZpZ3VyZSBBRVUgKi8KLQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9NQVNLX0FUVE5fRlVOQ18wICsgcG9ydCo0LCAwKTsKLQotCW1zbGVlcCgxMDApOwotCS8qIENoZWNrIGZvciBCUkIgcG9ydCBvY2N1cGFuY3kgKi8KLQl2YWwgPSBSRUdfUkQoYnAsIEJSQjFfUkVHX1BPUlRfTlVNX09DQ19CTE9DS1NfMCArIHBvcnQqNCk7Ci0JaWYgKHZhbCkKLQkJRFAoTkVUSUZfTVNHX0lGRE9XTiwKLQkJICAgIkJSQjEgaXMgbm90IGVtcHR5ICAlZCBibG9ja3MgYXJlIG9jY3VwaWVkXG4iLCB2YWwpOwotCi0JLyogVE9ETzogQ2xvc2UgRG9vcmJlbGwgcG9ydD8gKi8KLX0KLQotc3RhdGljIHZvaWQgYm54MnhfcmVzZXRfY2hpcChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgcmVzZXRfY29kZSkKLXsKLQlEUChCTlgyWF9NU0dfTUNQLCAiZnVuY3Rpb24gJWQgIHJlc2V0X2NvZGUgJXhcbiIsCi0JICAgQlBfRlVOQyhicCksIHJlc2V0X2NvZGUpOwotCi0Jc3dpdGNoIChyZXNldF9jb2RlKSB7Ci0JY2FzZSBGV19NU0dfQ09ERV9EUlZfVU5MT0FEX0NPTU1PTjoKLQkJYm54MnhfcmVzZXRfcG9ydChicCk7Ci0JCWJueDJ4X3Jlc2V0X2Z1bmMoYnApOwotCQlibngyeF9yZXNldF9jb21tb24oYnApOwotCQlicmVhazsKLQotCWNhc2UgRldfTVNHX0NPREVfRFJWX1VOTE9BRF9QT1JUOgotCQlibngyeF9yZXNldF9wb3J0KGJwKTsKLQkJYm54MnhfcmVzZXRfZnVuYyhicCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBGV19NU0dfQ09ERV9EUlZfVU5MT0FEX0ZVTkNUSU9OOgotCQlibngyeF9yZXNldF9mdW5jKGJwKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlCTlgyWF9FUlIoIlVua25vd24gcmVzZXRfY29kZSAoMHgleCkgZnJvbSBNQ1BcbiIsIHJlc2V0X2NvZGUpOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2NoaXBfY2xlYW51cChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgdW5sb2FkX21vZGUpCi17Ci0JaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKLQl1MzIgcmVzZXRfY29kZSA9IDA7Ci0JaW50IGksIGNudCwgcmM7Ci0KLQkvKiBXYWl0IHVudGlsIHR4IGZhc3RwYXRoIHRhc2tzIGNvbXBsZXRlICovCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKLQkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07Ci0KLQkJY250ID0gMTAwMDsKLQkJd2hpbGUgKGJueDJ4X2hhc190eF93b3JrX3VubG9hZChmcCkpIHsKLQotCQkJYm54MnhfdHhfaW50KGZwKTsKLQkJCWlmICghY250KSB7Ci0JCQkJQk5YMlhfRVJSKCJ0aW1lb3V0IHdhaXRpbmcgZm9yIHF1ZXVlWyVkXVxuIiwKLQkJCQkJICBpKTsKLSNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCi0JCQkJYm54MnhfcGFuaWMoKTsKLQkJCQlyZXR1cm4gLUVCVVNZOwotI2Vsc2UKLQkJCQlicmVhazsKLSNlbmRpZgotCQkJfQotCQkJY250LS07Ci0JCQltc2xlZXAoMSk7Ci0JCX0KLQl9Ci0JLyogR2l2ZSBIVyB0aW1lIHRvIGRpc2NhcmQgb2xkIHR4IG1lc3NhZ2VzICovCi0JbXNsZWVwKDEpOwotCi0JaWYgKENISVBfSVNfRTEoYnApKSB7Ci0JCXN0cnVjdCBtYWNfY29uZmlndXJhdGlvbl9jbWQgKmNvbmZpZyA9Ci0JCQkJCQlibngyeF9zcChicCwgbWNhc3RfY29uZmlnKTsKLQotCQlibngyeF9zZXRfZXRoX21hY19hZGRyX2UxKGJwLCAwKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5oZHIubGVuZ3RoOyBpKyspCi0JCQlDQU1fSU5WQUxJREFURShjb25maWctPmNvbmZpZ190YWJsZVtpXSk7Ci0KLQkJY29uZmlnLT5oZHIubGVuZ3RoID0gaTsKLQkJaWYgKENISVBfUkVWX0lTX1NMT1coYnApKQotCQkJY29uZmlnLT5oZHIub2Zmc2V0ID0gQk5YMlhfTUFYX0VNVUxfTVVMVEkqKDEgKyBwb3J0KTsKLQkJZWxzZQotCQkJY29uZmlnLT5oZHIub2Zmc2V0ID0gQk5YMlhfTUFYX01VTFRJQ0FTVCooMSArIHBvcnQpOwotCQljb25maWctPmhkci5jbGllbnRfaWQgPSBicC0+ZnAtPmNsX2lkOwotCQljb25maWctPmhkci5yZXNlcnZlZDEgPSAwOwotCi0JCWJwLT5zZXRfbWFjX3BlbmRpbmcrKzsKLQkJc21wX3dtYigpOwotCi0JCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX1NFVF9NQUMsIDAsCi0JCQkgICAgICBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgbWNhc3RfY29uZmlnKSksCi0JCQkgICAgICBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgbWNhc3RfY29uZmlnKSksIDApOwotCi0JfSBlbHNlIHsgLyogRTFIICovCi0JCVJFR19XUihicCwgTklHX1JFR19MTEgwX0ZVTkNfRU4gKyBwb3J0KjgsIDApOwotCi0JCWJueDJ4X3NldF9ldGhfbWFjX2FkZHJfZTFoKGJwLCAwKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgTUNfSEFTSF9TSVpFOyBpKyspCi0JCQlSRUdfV1IoYnAsIE1DX0hBU0hfT0ZGU0VUKGJwLCBpKSwgMCk7Ci0KLQkJUkVHX1dSKGJwLCBNSVNDX1JFR19FMUhNRl9NT0RFLCAwKTsKLQl9Ci0jaWZkZWYgQkNNX0NOSUMKLQkvKiBDbGVhciBpU0NTSSBMMiBNQUMgKi8KLQltdXRleF9sb2NrKCZicC0+Y25pY19tdXRleCk7Ci0JaWYgKGJwLT5jbmljX2ZsYWdzICYgQk5YMlhfQ05JQ19GTEFHX01BQ19TRVQpIHsKLQkJYm54Mnhfc2V0X2lzY3NpX2V0aF9tYWNfYWRkcihicCwgMCk7Ci0JCWJwLT5jbmljX2ZsYWdzICY9IH5CTlgyWF9DTklDX0ZMQUdfTUFDX1NFVDsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZicC0+Y25pY19tdXRleCk7Ci0jZW5kaWYKLQotCWlmICh1bmxvYWRfbW9kZSA9PSBVTkxPQURfTk9STUFMKQotCQlyZXNldF9jb2RlID0gRFJWX01TR19DT0RFX1VOTE9BRF9SRVFfV09MX0RJUzsKLQotCWVsc2UgaWYgKGJwLT5mbGFncyAmIE5PX1dPTF9GTEFHKQotCQlyZXNldF9jb2RlID0gRFJWX01TR19DT0RFX1VOTE9BRF9SRVFfV09MX01DUDsKLQotCWVsc2UgaWYgKGJwLT53b2wpIHsKLQkJdTMyIGVtYWNfYmFzZSA9IHBvcnQgPyBHUkNCQVNFX0VNQUMxIDogR1JDQkFTRV9FTUFDMDsKLQkJdTggKm1hY19hZGRyID0gYnAtPmRldi0+ZGV2X2FkZHI7Ci0JCXUzMiB2YWw7Ci0JCS8qIFRoZSBtYWMgYWRkcmVzcyBpcyB3cml0dGVuIHRvIGVudHJpZXMgMS00IHRvCi0JCSAgIHByZXNlcnZlIGVudHJ5IDAgd2hpY2ggaXMgdXNlZCBieSB0aGUgUE1GICovCi0JCXU4IGVudHJ5ID0gKEJQX0UxSFZOKGJwKSArIDEpKjg7Ci0KLQkJdmFsID0gKG1hY19hZGRyWzBdIDw8IDgpIHwgbWFjX2FkZHJbMV07Ci0JCUVNQUNfV1IoYnAsIEVNQUNfUkVHX0VNQUNfTUFDX01BVENIICsgZW50cnksIHZhbCk7Ci0KLQkJdmFsID0gKG1hY19hZGRyWzJdIDw8IDI0KSB8IChtYWNfYWRkclszXSA8PCAxNikgfAotCQkgICAgICAobWFjX2FkZHJbNF0gPDwgOCkgfCBtYWNfYWRkcls1XTsKLQkJRU1BQ19XUihicCwgRU1BQ19SRUdfRU1BQ19NQUNfTUFUQ0ggKyBlbnRyeSArIDQsIHZhbCk7Ci0KLQkJcmVzZXRfY29kZSA9IERSVl9NU0dfQ09ERV9VTkxPQURfUkVRX1dPTF9FTjsKLQotCX0gZWxzZQotCQlyZXNldF9jb2RlID0gRFJWX01TR19DT0RFX1VOTE9BRF9SRVFfV09MX0RJUzsKLQotCS8qIENsb3NlIG11bHRpIGFuZCBsZWFkaW5nIGNvbm5lY3Rpb25zCi0JICAgQ29tcGxldGlvbnMgZm9yIHJhbXJvZHMgYXJlIGNvbGxlY3RlZCBpbiBhIHN5bmNocm9ub3VzIHdheSAqLwotCWZvcl9lYWNoX25vbmRlZmF1bHRfcXVldWUoYnAsIGkpCi0JCWlmIChibngyeF9zdG9wX211bHRpKGJwLCBpKSkKLQkJCWdvdG8gdW5sb2FkX2Vycm9yOwotCi0JcmMgPSBibngyeF9zdG9wX2xlYWRpbmcoYnApOwotCWlmIChyYykgewotCQlCTlgyWF9FUlIoIlN0b3AgbGVhZGluZyBmYWlsZWQhXG4iKTsKLSNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCi0JCXJldHVybiAtRUJVU1k7Ci0jZWxzZQotCQlnb3RvIHVubG9hZF9lcnJvcjsKLSNlbmRpZgotCX0KLQotdW5sb2FkX2Vycm9yOgotCWlmICghQlBfTk9NQ1AoYnApKQotCQlyZXNldF9jb2RlID0gYm54MnhfZndfY29tbWFuZChicCwgcmVzZXRfY29kZSk7Ci0JZWxzZSB7Ci0JCURQKE5FVElGX01TR19JRkRPV04sICJOTyBNQ1AgLSBsb2FkIGNvdW50cyAgICAgICVkLCAlZCwgJWRcbiIsCi0JCSAgIGxvYWRfY291bnRbMF0sIGxvYWRfY291bnRbMV0sIGxvYWRfY291bnRbMl0pOwotCQlsb2FkX2NvdW50WzBdLS07Ci0JCWxvYWRfY291bnRbMSArIHBvcnRdLS07Ci0JCURQKE5FVElGX01TR19JRkRPV04sICJOTyBNQ1AgLSBuZXcgbG9hZCBjb3VudHMgICVkLCAlZCwgJWRcbiIsCi0JCSAgIGxvYWRfY291bnRbMF0sIGxvYWRfY291bnRbMV0sIGxvYWRfY291bnRbMl0pOwotCQlpZiAobG9hZF9jb3VudFswXSA9PSAwKQotCQkJcmVzZXRfY29kZSA9IEZXX01TR19DT0RFX0RSVl9VTkxPQURfQ09NTU9OOwotCQllbHNlIGlmIChsb2FkX2NvdW50WzEgKyBwb3J0XSA9PSAwKQotCQkJcmVzZXRfY29kZSA9IEZXX01TR19DT0RFX0RSVl9VTkxPQURfUE9SVDsKLQkJZWxzZQotCQkJcmVzZXRfY29kZSA9IEZXX01TR19DT0RFX0RSVl9VTkxPQURfRlVOQ1RJT047Ci0JfQotCi0JaWYgKChyZXNldF9jb2RlID09IEZXX01TR19DT0RFX0RSVl9VTkxPQURfQ09NTU9OKSB8fAotCSAgICAocmVzZXRfY29kZSA9PSBGV19NU0dfQ09ERV9EUlZfVU5MT0FEX1BPUlQpKQotCQlibngyeF9fbGlua19yZXNldChicCk7Ci0KLQkvKiBSZXNldCB0aGUgY2hpcCAqLwotCWJueDJ4X3Jlc2V0X2NoaXAoYnAsIHJlc2V0X2NvZGUpOwotCi0JLyogUmVwb3J0IFVOTE9BRF9ET05FIHRvIE1DUCAqLwotCWlmICghQlBfTk9NQ1AoYnApKQotCQlibngyeF9md19jb21tYW5kKGJwLCBEUlZfTVNHX0NPREVfVU5MT0FEX0RPTkUpOwotCi19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9kaXNhYmxlX2Nsb3NlX3RoZV9nYXRlKHN0cnVjdCBibngyeCAqYnApCi17Ci0JdTMyIHZhbDsKLQotCURQKE5FVElGX01TR19IVywgIkRpc2FibGluZyBcImNsb3NlIHRoZSBnYXRlc1wiXG4iKTsKLQotCWlmIChDSElQX0lTX0UxKGJwKSkgewotCQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwotCQl1MzIgYWRkciA9IHBvcnQgPyBNSVNDX1JFR19BRVVfTUFTS19BVFROX0ZVTkNfMSA6Ci0JCQlNSVNDX1JFR19BRVVfTUFTS19BVFROX0ZVTkNfMDsKLQotCQl2YWwgPSBSRUdfUkQoYnAsIGFkZHIpOwotCQl2YWwgJj0gfigweDMwMCk7Ci0JCVJFR19XUihicCwgYWRkciwgdmFsKTsKLQl9IGVsc2UgaWYgKENISVBfSVNfRTFIKGJwKSkgewotCQl2YWwgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX01BU0spOwotCQl2YWwgJj0gfihNSVNDX0FFVV9HRU5FUkFMX01BU0tfUkVHX0FFVV9QWFBfQ0xPU0VfTUFTSyB8Ci0JCQkgTUlTQ19BRVVfR0VORVJBTF9NQVNLX1JFR19BRVVfTklHX0NMT1NFX01BU0spOwotCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX01BU0ssIHZhbCk7Ci0JfQotfQotCi0vKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLwotc3RhdGljIGludCBibngyeF9uaWNfdW5sb2FkKHN0cnVjdCBibngyeCAqYnAsIGludCB1bmxvYWRfbW9kZSkKLXsKLQlpbnQgaTsKLQotCWlmIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfQ0xPU0VEKSB7Ci0JCS8qIEludGVyZmFjZSBoYXMgYmVlbiByZW1vdmVkIC0gbm90aGluZyB0byByZWNvdmVyICovCi0JCWJwLT5yZWNvdmVyeV9zdGF0ZSA9IEJOWDJYX1JFQ09WRVJZX0RPTkU7Ci0JCWJwLT5pc19sZWFkZXIgPSAwOwotCQlibngyeF9yZWxlYXNlX2h3X2xvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfUkVTRVJWRURfMDgpOwotCQlzbXBfd21iKCk7Ci0KLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0jaWZkZWYgQkNNX0NOSUMKLQlibngyeF9jbmljX25vdGlmeShicCwgQ05JQ19DVExfU1RPUF9DTUQpOwotI2VuZGlmCi0JYnAtPnN0YXRlID0gQk5YMlhfU1RBVEVfQ0xPU0lOR19XQUlUNF9IQUxUOwotCi0JLyogU2V0ICJkcm9wIGFsbCIgKi8KLQlicC0+cnhfbW9kZSA9IEJOWDJYX1JYX01PREVfTk9ORTsKLQlibngyeF9zZXRfc3Rvcm1fcnhfbW9kZShicCk7Ci0KLQkvKiBEaXNhYmxlIEhXIGludGVycnVwdHMsIE5BUEkgYW5kIFR4ICovCi0JYm54MnhfbmV0aWZfc3RvcChicCwgMSk7Ci0JbmV0aWZfY2Fycmllcl9vZmYoYnAtPmRldik7Ci0KLQlkZWxfdGltZXJfc3luYygmYnAtPnRpbWVyKTsKLQlTSE1FTV9XUihicCwgZnVuY19tYltCUF9GVU5DKGJwKV0uZHJ2X3B1bHNlX21iLAotCQkgKERSVl9QVUxTRV9BTFdBWVNfQUxJVkUgfCBicC0+ZndfZHJ2X3B1bHNlX3dyX3NlcSkpOwotCWJueDJ4X3N0YXRzX2hhbmRsZShicCwgU1RBVFNfRVZFTlRfU1RPUCk7Ci0KLQkvKiBSZWxlYXNlIElSUXMgKi8KLQlibngyeF9mcmVlX2lycShicCwgZmFsc2UpOwotCi0JLyogQ2xlYW51cCB0aGUgY2hpcCBpZiBuZWVkZWQgKi8KLQlpZiAodW5sb2FkX21vZGUgIT0gVU5MT0FEX1JFQ09WRVJZKQotCQlibngyeF9jaGlwX2NsZWFudXAoYnAsIHVubG9hZF9tb2RlKTsKLQotCWJwLT5wb3J0LnBtZiA9IDA7Ci0KLQkvKiBGcmVlIFNLQnMsIFNHRXMsIFRQQSBwb29sIGFuZCBkcml2ZXIgaW50ZXJuYWxzICovCi0JYm54MnhfZnJlZV9za2JzKGJwKTsKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkKLQkJYm54MnhfZnJlZV9yeF9zZ2VfcmFuZ2UoYnAsIGJwLT5mcCArIGksIE5VTV9SWF9TR0UpOwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQotCQluZXRpZl9uYXBpX2RlbCgmYm54MnhfZnAoYnAsIGksIG5hcGkpKTsKLQlibngyeF9mcmVlX21lbShicCk7Ci0KLQlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9DTE9TRUQ7Ci0KLQkvKiBUaGUgbGFzdCBkcml2ZXIgbXVzdCBkaXNhYmxlIGEgImNsb3NlIHRoZSBnYXRlIiBpZiB0aGVyZSBpcyBubwotCSAqIHBhcml0eSBhdHRlbnRpb24gb3IgInByb2Nlc3Mga2lsbCIgcGVuZGluZy4KLQkgKi8KLQlpZiAoKCFibngyeF9kZWNfbG9hZF9jbnQoYnApKSAmJiAoIWJueDJ4X2Noa19wYXJpdHlfYXR0bihicCkpICYmCi0JICAgIGJueDJ4X3Jlc2V0X2lzX2RvbmUoYnApKQotCQlibngyeF9kaXNhYmxlX2Nsb3NlX3RoZV9nYXRlKGJwKTsKLQotCS8qIFJlc2V0IE1DUCBtYWlsIGJveCBzZXF1ZW5jZSBpZiB0aGVyZSBpcyBvbiBnb2luZyByZWNvdmVyeSAqLwotCWlmICh1bmxvYWRfbW9kZSA9PSBVTkxPQURfUkVDT1ZFUlkpCi0JCWJwLT5md19zZXEgPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIENsb3NlIGdhdGVzICMyLCAjMyBhbmQgIzQ6ICovCi1zdGF0aWMgdm9pZCBibngyeF9zZXRfMjM0X2dhdGVzKHN0cnVjdCBibngyeCAqYnAsIGJvb2wgY2xvc2UpCi17Ci0JdTMyIHZhbCwgYWRkcjsKLQotCS8qIEdhdGVzICMyIGFuZCAjNGEgYXJlIGNsb3NlZC9vcGVuZWQgZm9yICJub3QgRTEiIG9ubHkgKi8KLQlpZiAoIUNISVBfSVNfRTEoYnApKSB7Ci0JCS8qICM0ICovCi0JCXZhbCA9IFJFR19SRChicCwgUFhQX1JFR19IU1RfRElTQ0FSRF9ET09SQkVMTFMpOwotCQlSRUdfV1IoYnAsIFBYUF9SRUdfSFNUX0RJU0NBUkRfRE9PUkJFTExTLAotCQkgICAgICAgY2xvc2UgPyAodmFsIHwgMHgxKSA6ICh2YWwgJiAofih1MzIpMSkpKTsKLQkJLyogIzIgKi8KLQkJdmFsID0gUkVHX1JEKGJwLCBQWFBfUkVHX0hTVF9ESVNDQVJEX0lOVEVSTkFMX1dSSVRFUyk7Ci0JCVJFR19XUihicCwgUFhQX1JFR19IU1RfRElTQ0FSRF9JTlRFUk5BTF9XUklURVMsCi0JCSAgICAgICBjbG9zZSA/ICh2YWwgfCAweDEpIDogKHZhbCAmICh+KHUzMikxKSkpOwotCX0KLQotCS8qICMzICovCi0JYWRkciA9IEJQX1BPUlQoYnApID8gSENfUkVHX0NPTkZJR18xIDogSENfUkVHX0NPTkZJR18wOwotCXZhbCA9IFJFR19SRChicCwgYWRkcik7Ci0JUkVHX1dSKGJwLCBhZGRyLCAoIWNsb3NlKSA/ICh2YWwgfCAweDEpIDogKHZhbCAmICh+KHUzMikxKSkpOwotCi0JRFAoTkVUSUZfTVNHX0hXLCAiJXMgZ2F0ZXMgIzIsICMzIGFuZCAjNFxuIiwKLQkJY2xvc2UgPyAiY2xvc2luZyIgOiAib3BlbmluZyIpOwotCW1taW93YigpOwotfQotCi0jZGVmaW5lIFNIQVJFRF9NRl9DTFBfTUFHSUMgIDB4ODAwMDAwMDAgLyogYG1hZ2ljJyBiaXQgKi8KLQotc3RhdGljIHZvaWQgYm54MnhfY2xwX3Jlc2V0X3ByZXAoc3RydWN0IGJueDJ4ICpicCwgdTMyICptYWdpY192YWwpCi17Ci0JLyogRG8gc29tZSBtYWdpYy4uLiAqLwotCXUzMiB2YWwgPSBNRl9DRkdfUkQoYnAsIHNoYXJlZF9tZl9jb25maWcuY2xwX21iKTsKLQkqbWFnaWNfdmFsID0gdmFsICYgU0hBUkVEX01GX0NMUF9NQUdJQzsKLQlNRl9DRkdfV1IoYnAsIHNoYXJlZF9tZl9jb25maWcuY2xwX21iLCB2YWwgfCBTSEFSRURfTUZfQ0xQX01BR0lDKTsKLX0KLQotLyogUmVzdG9yZSB0aGUgdmFsdWUgb2YgdGhlIGBtYWdpYycgYml0LgotICoKLSAqIEBwYXJhbSBwZGV2IERldmljZSBoYW5kbGUuCi0gKiBAcGFyYW0gbWFnaWNfdmFsIE9sZCB2YWx1ZSBvZiB0aGUgYG1hZ2ljJyBiaXQuCi0gKi8KLXN0YXRpYyB2b2lkIGJueDJ4X2NscF9yZXNldF9kb25lKHN0cnVjdCBibngyeCAqYnAsIHUzMiBtYWdpY192YWwpCi17Ci0JLyogUmVzdG9yZSB0aGUgYG1hZ2ljJyBiaXQgdmFsdWUuLi4gKi8KLQkvKiB1MzIgdmFsID0gU0hNRU1fUkQoYnAsIG1mX2NmZy5zaGFyZWRfbWZfY29uZmlnLmNscF9tYik7Ci0JU0hNRU1fV1IoYnAsIG1mX2NmZy5zaGFyZWRfbWZfY29uZmlnLmNscF9tYiwKLQkJKHZhbCAmICh+U0hBUkVEX01GX0NMUF9NQUdJQykpIHwgbWFnaWNfdmFsKTsgKi8KLQl1MzIgdmFsID0gTUZfQ0ZHX1JEKGJwLCBzaGFyZWRfbWZfY29uZmlnLmNscF9tYik7Ci0JTUZfQ0ZHX1dSKGJwLCBzaGFyZWRfbWZfY29uZmlnLmNscF9tYiwKLQkJKHZhbCAmICh+U0hBUkVEX01GX0NMUF9NQUdJQykpIHwgbWFnaWNfdmFsKTsKLX0KLQotLyogUHJlcGFyZXMgZm9yIE1DUCByZXNldDogdGFrZXMgY2FyZSBvZiBDTFAgY29uZmlndXJhdGlvbnMuCi0gKgotICogQHBhcmFtIGJwCi0gKiBAcGFyYW0gbWFnaWNfdmFsIE9sZCB2YWx1ZSBvZiAnbWFnaWMnIGJpdC4KLSAqLwotc3RhdGljIHZvaWQgYm54MnhfcmVzZXRfbWNwX3ByZXAoc3RydWN0IGJueDJ4ICpicCwgdTMyICptYWdpY192YWwpCi17Ci0JdTMyIHNobWVtOwotCXUzMiB2YWxpZGl0eV9vZmZzZXQ7Ci0KLQlEUChORVRJRl9NU0dfSFcsICJTdGFydGluZ1xuIik7Ci0KLQkvKiBTZXQgYG1hZ2ljJyBiaXQgaW4gb3JkZXIgdG8gc2F2ZSBNRiBjb25maWcgKi8KLQlpZiAoIUNISVBfSVNfRTEoYnApKQotCQlibngyeF9jbHBfcmVzZXRfcHJlcChicCwgbWFnaWNfdmFsKTsKLQotCS8qIEdldCBzaG1lbSBvZmZzZXQgKi8KLQlzaG1lbSA9IFJFR19SRChicCwgTUlTQ19SRUdfU0hBUkVEX01FTV9BRERSKTsKLQl2YWxpZGl0eV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLCB2YWxpZGl0eV9tYXBbMF0pOwotCi0JLyogQ2xlYXIgdmFsaWRpdHkgbWFwIGZsYWdzICovCi0JaWYgKHNobWVtID4gMCkKLQkJUkVHX1dSKGJwLCBzaG1lbSArIHZhbGlkaXR5X29mZnNldCwgMCk7Ci19Ci0KLSNkZWZpbmUgTUNQX1RJTUVPVVQgICAgICA1MDAwICAgLyogNSBzZWNvbmRzIChpbiBtcykgKi8KLSNkZWZpbmUgTUNQX09ORV9USU1FT1VUICAxMDAgICAgLyogMTAwIG1zICovCi0KLS8qIFdhaXRzIGZvciBNQ1BfT05FX1RJTUVPVVQgb3IgTUNQX09ORV9USU1FT1VUKjEwLAotICogZGVwZW5kaW5nIG9uIHRoZSBIVyB0eXBlLgotICoKLSAqIEBwYXJhbSBicAotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfbWNwX3dhaXRfb25lKHN0cnVjdCBibngyeCAqYnApCi17Ci0JLyogc3BlY2lhbCBoYW5kbGluZyBmb3IgZW11bGF0aW9uIGFuZCBGUEdBLAotCSAgIHdhaXQgMTAgdGltZXMgbG9uZ2VyICovCi0JaWYgKENISVBfUkVWX0lTX1NMT1coYnApKQotCQltc2xlZXAoTUNQX09ORV9USU1FT1VUKjEwKTsKLQllbHNlCi0JCW1zbGVlcChNQ1BfT05FX1RJTUVPVVQpOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X3Jlc2V0X21jcF9jb21wKHN0cnVjdCBibngyeCAqYnAsIHUzMiBtYWdpY192YWwpCi17Ci0JdTMyIHNobWVtLCBjbnQsIHZhbGlkaXR5X29mZnNldCwgdmFsOwotCWludCByYyA9IDA7Ci0KLQltc2xlZXAoMTAwKTsKLQotCS8qIEdldCBzaG1lbSBvZmZzZXQgKi8KLQlzaG1lbSA9IFJFR19SRChicCwgTUlTQ19SRUdfU0hBUkVEX01FTV9BRERSKTsKLQlpZiAoc2htZW0gPT0gMCkgewotCQlCTlgyWF9FUlIoIlNobWVtIDAgcmV0dXJuIGZhaWx1cmVcbiIpOwotCQlyYyA9IC1FTk9UVFk7Ci0JCWdvdG8gZXhpdF9sYmw7Ci0JfQotCi0JdmFsaWRpdHlfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHNobWVtX3JlZ2lvbiwgdmFsaWRpdHlfbWFwWzBdKTsKLQotCS8qIFdhaXQgZm9yIE1DUCB0byBjb21lIHVwICovCi0JZm9yIChjbnQgPSAwOyBjbnQgPCAoTUNQX1RJTUVPVVQgLyBNQ1BfT05FX1RJTUVPVVQpOyBjbnQrKykgewotCQkvKiBUQkQ6IGl0cyBiZXN0IHRvIGNoZWNrIHZhbGlkaXR5IG1hcCBvZiBsYXN0IHBvcnQuCi0JCSAqIGN1cnJlbnRseSBjaGVja3Mgb24gcG9ydCAwLgotCQkgKi8KLQkJdmFsID0gUkVHX1JEKGJwLCBzaG1lbSArIHZhbGlkaXR5X29mZnNldCk7Ci0JCURQKE5FVElGX01TR19IVywgInNobWVtIDB4JXggdmFsaWRpdHkgbWFwKDB4JXgpPTB4JXhcbiIsIHNobWVtLAotCQkgICBzaG1lbSArIHZhbGlkaXR5X29mZnNldCwgdmFsKTsKLQotCQkvKiBjaGVjayB0aGF0IHNoYXJlZCBtZW1vcnkgaXMgdmFsaWQuICovCi0JCWlmICgodmFsICYgKFNIUl9NRU1fVkFMSURJVFlfREVWX0lORk8gfCBTSFJfTUVNX1ZBTElESVRZX01CKSkKLQkJICAgID09IChTSFJfTUVNX1ZBTElESVRZX0RFVl9JTkZPIHwgU0hSX01FTV9WQUxJRElUWV9NQikpCi0JCQlicmVhazsKLQotCQlibngyeF9tY3Bfd2FpdF9vbmUoYnApOwotCX0KLQotCURQKE5FVElGX01TR19IVywgIkNudD0lZCBTaG1lbSB2YWxpZGl0eSBtYXAgMHgleFxuIiwgY250LCB2YWwpOwotCi0JLyogQ2hlY2sgdGhhdCBzaGFyZWQgbWVtb3J5IGlzIHZhbGlkLiBUaGlzIGluZGljYXRlcyB0aGF0IE1DUCBpcyB1cC4gKi8KLQlpZiAoKHZhbCAmIChTSFJfTUVNX1ZBTElESVRZX0RFVl9JTkZPIHwgU0hSX01FTV9WQUxJRElUWV9NQikpICE9Ci0JICAgIChTSFJfTUVNX1ZBTElESVRZX0RFVl9JTkZPIHwgU0hSX01FTV9WQUxJRElUWV9NQikpIHsKLQkJQk5YMlhfRVJSKCJTaG1lbSBzaWduYXR1cmUgbm90IHByZXNlbnQuIE1DUCBpcyBub3QgdXAgISFcbiIpOwotCQlyYyA9IC1FTk9UVFk7Ci0JCWdvdG8gZXhpdF9sYmw7Ci0JfQotCi1leGl0X2xibDoKLQkvKiBSZXN0b3JlIHRoZSBgbWFnaWMnIGJpdCB2YWx1ZSAqLwotCWlmICghQ0hJUF9JU19FMShicCkpCi0JCWJueDJ4X2NscF9yZXNldF9kb25lKGJwLCBtYWdpY192YWwpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9weHBfcHJlcChzdHJ1Y3QgYm54MnggKmJwKQotewotCWlmICghQ0hJUF9JU19FMShicCkpIHsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19SRF9TVEFSVF9JTklULCAwKTsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9SQkNfRE9ORSwgMCk7Ci0JCVJFR19XUihicCwgUFhQMl9SRUdfUlFfQ0ZHX0RPTkUsIDApOwotCQltbWlvd2IoKTsKLQl9Ci19Ci0KLS8qCi0gKiBSZXNldCB0aGUgd2hvbGUgY2hpcCBleGNlcHQgZm9yOgotICogICAgICAtIFBDSUUgY29yZQotICogICAgICAtIFBDSSBHbHVlLCBQU1dIU1QsIFBYUC9QWFAyIFJGIChhbGwgY29udHJvbGxlZCBieQotICogICAgICAgICAgICAgIG9uZSByZXNldCBiaXQpCi0gKiAgICAgIC0gSUdVCi0gKiAgICAgIC0gTUlTQyAoaW5jbHVkaW5nIEFFVSkKLSAqICAgICAgLSBHUkMKLSAqICAgICAgLSBSQkNOLCBSQkNQCi0gKi8KLXN0YXRpYyB2b2lkIGJueDJ4X3Byb2Nlc3Nfa2lsbF9jaGlwX3Jlc2V0KHN0cnVjdCBibngyeCAqYnApCi17Ci0JdTMyIG5vdF9yZXNldF9tYXNrMSwgcmVzZXRfbWFzazEsIG5vdF9yZXNldF9tYXNrMiwgcmVzZXRfbWFzazI7Ci0KLQlub3RfcmVzZXRfbWFzazEgPQotCQlNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMV9SU1RfSEMgfAotCQlNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMV9SU1RfUFhQViB8Ci0JCU1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18xX1JTVF9QWFA7Ci0KLQlub3RfcmVzZXRfbWFzazIgPQotCQlNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9SU1RfTURJTyB8Ci0JCU1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX1JTVF9FTUFDMF9IQVJEX0NPUkUgfAotCQlNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9SU1RfRU1BQzFfSEFSRF9DT1JFIHwKLQkJTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfUlNUX01JU0NfQ09SRSB8Ci0JCU1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX1JTVF9SQkNOIHwKLQkJTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfUlNUX0dSQyAgfAotCQlNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9SU1RfTUNQX05fUkVTRVRfUkVHX0hBUkRfQ09SRSB8Ci0JCU1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX1JTVF9NQ1BfTl9IQVJEX0NPUkVfUlNUX0I7Ci0KLQlyZXNldF9tYXNrMSA9IDB4ZmZmZmZmZmY7Ci0KLQlpZiAoQ0hJUF9JU19FMShicCkpCi0JCXJlc2V0X21hc2syID0gMHhmZmZmOwotCWVsc2UKLQkJcmVzZXRfbWFzazIgPSAweDFmZmZmOwotCi0JUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMV9DTEVBUiwKLQkgICAgICAgcmVzZXRfbWFzazEgJiAofm5vdF9yZXNldF9tYXNrMSkpOwotCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfQ0xFQVIsCi0JICAgICAgIHJlc2V0X21hc2syICYgKH5ub3RfcmVzZXRfbWFzazIpKTsKLQotCWJhcnJpZXIoKTsKLQltbWlvd2IoKTsKLQotCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzFfU0VULCByZXNldF9tYXNrMSk7Ci0JUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9TRVQsIHJlc2V0X21hc2syKTsKLQltbWlvd2IoKTsKLX0KLQotc3RhdGljIGludCBibngyeF9wcm9jZXNzX2tpbGwoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpbnQgY250ID0gMTAwMDsKLQl1MzIgdmFsID0gMDsKLQl1MzIgc3JfY250LCBibGtfY250LCBwb3J0X2lzX2lkbGVfMCwgcG9ydF9pc19pZGxlXzEsIHBnbF9leHBfcm9tMjsKLQotCi0JLyogRW1wdHkgdGhlIFRldHJpcyBidWZmZXIsIHdhaXQgZm9yIDFzICovCi0JZG8gewotCQlzcl9jbnQgID0gUkVHX1JEKGJwLCBQWFAyX1JFR19SRF9TUl9DTlQpOwotCQlibGtfY250ID0gUkVHX1JEKGJwLCBQWFAyX1JFR19SRF9CTEtfQ05UKTsKLQkJcG9ydF9pc19pZGxlXzAgPSBSRUdfUkQoYnAsIFBYUDJfUkVHX1JEX1BPUlRfSVNfSURMRV8wKTsKLQkJcG9ydF9pc19pZGxlXzEgPSBSRUdfUkQoYnAsIFBYUDJfUkVHX1JEX1BPUlRfSVNfSURMRV8xKTsKLQkJcGdsX2V4cF9yb20yID0gUkVHX1JEKGJwLCBQWFAyX1JFR19QR0xfRVhQX1JPTTIpOwotCQlpZiAoKHNyX2NudCA9PSAweDdlKSAmJiAoYmxrX2NudCA9PSAweGEwKSAmJgotCQkgICAgKChwb3J0X2lzX2lkbGVfMCAmIDB4MSkgPT0gMHgxKSAmJgotCQkgICAgKChwb3J0X2lzX2lkbGVfMSAmIDB4MSkgPT0gMHgxKSAmJgotCQkgICAgKHBnbF9leHBfcm9tMiA9PSAweGZmZmZmZmZmKSkKLQkJCWJyZWFrOwotCQltc2xlZXAoMSk7Ci0JfSB3aGlsZSAoY250LS0gPiAwKTsKLQotCWlmIChjbnQgPD0gMCkgewotCQlEUChORVRJRl9NU0dfSFcsICJUZXRyaXMgYnVmZmVyIGRpZG4ndCBnZXQgZW1wdHkgb3IgdGhlcmUiCi0JCQkgICIgYXJlIHN0aWxsIgotCQkJICAiIG91dHN0YW5kaW5nIHJlYWQgcmVxdWVzdHMgYWZ0ZXIgMXMhXG4iKTsKLQkJRFAoTkVUSUZfTVNHX0hXLCAic3JfY250PTB4JTA4eCwgYmxrX2NudD0weCUwOHgsIgotCQkJICAiIHBvcnRfaXNfaWRsZV8wPTB4JTA4eCwiCi0JCQkgICIgcG9ydF9pc19pZGxlXzE9MHglMDh4LCBwZ2xfZXhwX3JvbTI9MHglMDh4XG4iLAotCQkJICBzcl9jbnQsIGJsa19jbnQsIHBvcnRfaXNfaWRsZV8wLCBwb3J0X2lzX2lkbGVfMSwKLQkJCSAgcGdsX2V4cF9yb20yKTsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCi0JYmFycmllcigpOwotCi0JLyogQ2xvc2UgZ2F0ZXMgIzIsICMzIGFuZCAjNCAqLwotCWJueDJ4X3NldF8yMzRfZ2F0ZXMoYnAsIHRydWUpOwotCi0JLyogVEJEOiBJbmRpY2F0ZSB0aGF0ICJwcm9jZXNzIGtpbGwiIGlzIGluIHByb2dyZXNzIHRvIE1DUCAqLwotCi0JLyogQ2xlYXIgInVucHJlcGFyZWQiIGJpdCAqLwotCVJFR19XUihicCwgTUlTQ19SRUdfVU5QUkVQQVJFRCwgMCk7Ci0JYmFycmllcigpOwotCi0JLyogTWFrZSBzdXJlIGFsbCBpcyB3cml0dGVuIHRvIHRoZSBjaGlwIGJlZm9yZSB0aGUgcmVzZXQgKi8KLQltbWlvd2IoKTsKLQotCS8qIFdhaXQgZm9yIDFtcyB0byBlbXB0eSBHTFVFIGFuZCBQQ0ktRSBjb3JlIHF1ZXVlcywKLQkgKiBQU1dIU1QsIEdSQyBhbmQgUFNXUkQgVGV0cmlzIGJ1ZmZlci4KLQkgKi8KLQltc2xlZXAoMSk7Ci0KLQkvKiBQcmVwYXJlIHRvIGNoaXAgcmVzZXQ6ICovCi0JLyogTUNQICovCi0JYm54MnhfcmVzZXRfbWNwX3ByZXAoYnAsICZ2YWwpOwotCi0JLyogUFhQICovCi0JYm54MnhfcHhwX3ByZXAoYnApOwotCWJhcnJpZXIoKTsKLQotCS8qIHJlc2V0IHRoZSBjaGlwICovCi0JYm54MnhfcHJvY2Vzc19raWxsX2NoaXBfcmVzZXQoYnApOwotCWJhcnJpZXIoKTsKLQotCS8qIFJlY292ZXIgYWZ0ZXIgcmVzZXQ6ICovCi0JLyogTUNQICovCi0JaWYgKGJueDJ4X3Jlc2V0X21jcF9jb21wKGJwLCB2YWwpKQotCQlyZXR1cm4gLUVBR0FJTjsKLQotCS8qIFBYUCAqLwotCWJueDJ4X3B4cF9wcmVwKGJwKTsKLQotCS8qIE9wZW4gdGhlIGdhdGVzICMyLCAjMyBhbmQgIzQgKi8KLQlibngyeF9zZXRfMjM0X2dhdGVzKGJwLCBmYWxzZSk7Ci0KLQkvKiBUQkQ6IElHVS9BRVUgcHJlcGFyYXRpb24gYnJpbmcgYmFjayB0aGUgQUVVL0lHVSB0byBhCi0JICogcmVzZXQgc3RhdGUsIHJlLWVuYWJsZSBhdHRlbnRpb25zLiAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYm54MnhfbGVhZGVyX3Jlc2V0KHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IHJjID0gMDsKLQkvKiBUcnkgdG8gcmVjb3ZlciBhZnRlciB0aGUgZmFpbHVyZSAqLwotCWlmIChibngyeF9wcm9jZXNzX2tpbGwoYnApKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFNvbWV0aGluZyBiYWQgaGFkIGhhcHBlbiEgQWlpIVxuIiwKLQkJICAgICAgIGJwLT5kZXYtPm5hbWUpOwotCQlyYyA9IC1FQUdBSU47Ci0JCWdvdG8gZXhpdF9sZWFkZXJfcmVzZXQ7Ci0JfQotCi0JLyogQ2xlYXIgInJlc2V0IGlzIGluIHByb2dyZXNzIiBiaXQgYW5kIHVwZGF0ZSB0aGUgZHJpdmVyIHN0YXRlICovCi0JYm54Mnhfc2V0X3Jlc2V0X2RvbmUoYnApOwotCWJwLT5yZWNvdmVyeV9zdGF0ZSA9IEJOWDJYX1JFQ09WRVJZX0RPTkU7Ci0KLWV4aXRfbGVhZGVyX3Jlc2V0OgotCWJwLT5pc19sZWFkZXIgPSAwOwotCWJueDJ4X3JlbGVhc2VfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV9SRVNFUlZFRF8wOCk7Ci0Jc21wX3dtYigpOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBibngyeF9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IGJueDJ4ICpicCwgcGNpX3Bvd2VyX3Qgc3RhdGUpOwotCi0vKiBBc3N1bXB0aW9uOiBydW5zIHVuZGVyIHJ0bmwgbG9jay4gVGhpcyB0b2dldGhlciB3aXRoIHRoZSBmYWN0Ci0gKiB0aGF0IGl0J3MgY2FsbGVkIG9ubHkgZnJvbSBibngyeF9yZXNldF90YXNrKCkgZW5zdXJlIHRoYXQgaXQKLSAqIHdpbGwgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gbmV0aWZfcnVubmluZyhicC0+ZGV2KSBpcyBmYWxzZS4KLSAqLwotc3RhdGljIHZvaWQgYm54MnhfcGFyaXR5X3JlY292ZXIoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlEUChORVRJRl9NU0dfSFcsICJIYW5kbGluZyBwYXJpdHlcbiIpOwotCXdoaWxlICgxKSB7Ci0JCXN3aXRjaCAoYnAtPnJlY292ZXJ5X3N0YXRlKSB7Ci0JCWNhc2UgQk5YMlhfUkVDT1ZFUllfSU5JVDoKLQkJCURQKE5FVElGX01TR19IVywgIlN0YXRlIGlzIEJOWDJYX1JFQ09WRVJZX0lOSVRcbiIpOwotCQkJLyogVHJ5IHRvIGdldCBhIExFQURFUl9MT0NLIEhXIGxvY2sgKi8KLQkJCWlmIChibngyeF90cnlsb2NrX2h3X2xvY2soYnAsCi0JCQkJSFdfTE9DS19SRVNPVVJDRV9SRVNFUlZFRF8wOCkpCi0JCQkJYnAtPmlzX2xlYWRlciA9IDE7Ci0KLQkJCS8qIFN0b3AgdGhlIGRyaXZlciAqLwotCQkJLyogSWYgaW50ZXJmYWNlIGhhcyBiZWVuIHJlbW92ZWQgLSBicmVhayAqLwotCQkJaWYgKGJueDJ4X25pY191bmxvYWQoYnAsIFVOTE9BRF9SRUNPVkVSWSkpCi0JCQkJcmV0dXJuOwotCi0JCQlicC0+cmVjb3Zlcnlfc3RhdGUgPSBCTlgyWF9SRUNPVkVSWV9XQUlUOwotCQkJLyogRW5zdXJlICJpc19sZWFkZXIiIGFuZCAicmVjb3Zlcnlfc3RhdGUiCi0JCQkgKiAgdXBkYXRlIHZhbHVlcyBhcmUgc2VlbiBvbiBvdGhlciBDUFVzCi0JCQkgKi8KLQkJCXNtcF93bWIoKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgQk5YMlhfUkVDT1ZFUllfV0FJVDoKLQkJCURQKE5FVElGX01TR19IVywgIlN0YXRlIGlzIEJOWDJYX1JFQ09WRVJZX1dBSVRcbiIpOwotCQkJaWYgKGJwLT5pc19sZWFkZXIpIHsKLQkJCQl1MzIgbG9hZF9jb3VudGVyID0gYm54MnhfZ2V0X2xvYWRfY250KGJwKTsKLQkJCQlpZiAobG9hZF9jb3VudGVyKSB7Ci0JCQkJCS8qIFdhaXQgdW50aWwgYWxsIG90aGVyIGZ1bmN0aW9ucyBnZXQKLQkJCQkJICogZG93bi4KLQkJCQkJICovCi0JCQkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYnAtPnJlc2V0X3Rhc2ssCi0JCQkJCQkJCUhaLzEwKTsKLQkJCQkJcmV0dXJuOwotCQkJCX0gZWxzZSB7Ci0JCQkJCS8qIElmIGFsbCBvdGhlciBmdW5jdGlvbnMgZ290IGRvd24gLQotCQkJCQkgKiB0cnkgdG8gYnJpbmcgdGhlIGNoaXAgYmFjayB0bwotCQkJCQkgKiBub3JtYWwuIEluIGFueSBjYXNlIGl0J3MgYW4gZXhpdAotCQkJCQkgKiBwb2ludCBmb3IgYSBsZWFkZXIuCi0JCQkJCSAqLwotCQkJCQlpZiAoYm54MnhfbGVhZGVyX3Jlc2V0KGJwKSB8fAotCQkJCQlibngyeF9uaWNfbG9hZChicCwgTE9BRF9OT1JNQUwpKSB7Ci0JCQkJCQlwcmludGsoS0VSTl9FUlIiJXM6IFJlY292ZXJ5ICIKLQkJCQkJCSJoYXMgZmFpbGVkLiBQb3dlciBjeWNsZSBpcyAiCi0JCQkJCQkibmVlZGVkLlxuIiwgYnAtPmRldi0+bmFtZSk7Ci0JCQkJCQkvKiBEaXNjb25uZWN0IHRoaXMgZGV2aWNlICovCi0JCQkJCQluZXRpZl9kZXZpY2VfZGV0YWNoKGJwLT5kZXYpOwotCQkJCQkJLyogQmxvY2sgaWZ1cCBmb3IgYWxsIGZ1bmN0aW9uCi0JCQkJCQkgKiBvZiB0aGlzIEFTSUMgdW50aWwKLQkJCQkJCSAqICJwcm9jZXNzIGtpbGwiIG9yIHBvd2VyCi0JCQkJCQkgKiBjeWNsZS4KLQkJCQkJCSAqLwotCQkJCQkJYm54Mnhfc2V0X3Jlc2V0X2luX3Byb2dyZXNzKGJwKTsKLQkJCQkJCS8qIFNodXQgZG93biB0aGUgcG93ZXIgKi8KLQkJCQkJCWJueDJ4X3NldF9wb3dlcl9zdGF0ZShicCwKLQkJCQkJCQkJUENJX0QzaG90KTsKLQkJCQkJCXJldHVybjsKLQkJCQkJfQotCi0JCQkJCXJldHVybjsKLQkJCQl9Ci0JCQl9IGVsc2UgeyAvKiBub24tbGVhZGVyICovCi0JCQkJaWYgKCFibngyeF9yZXNldF9pc19kb25lKGJwKSkgewotCQkJCQkvKiBUcnkgdG8gZ2V0IGEgTEVBREVSX0xPQ0sgSFcgbG9jayBhcwotCQkJCQkgKiBsb25nIGFzIGEgZm9ybWVyIGxlYWRlciBtYXkgaGF2ZQotCQkJCQkgKiBiZWVuIHVubG9hZGVkIGJ5IHRoZSB1c2VyIG9yCi0JCQkJCSAqIHJlbGVhc2VkIGEgbGVhZGVyc2hpcCBieSBhbm90aGVyCi0JCQkJCSAqIHJlYXNvbi4KLQkJCQkJICovCi0JCQkJCWlmIChibngyeF90cnlsb2NrX2h3X2xvY2soYnAsCi0JCQkJCSAgICBIV19MT0NLX1JFU09VUkNFX1JFU0VSVkVEXzA4KSkgewotCQkJCQkJLyogSSdtIGEgbGVhZGVyIG5vdyEgUmVzdGFydCBhCi0JCQkJCQkgKiBzd2l0Y2ggY2FzZS4KLQkJCQkJCSAqLwotCQkJCQkJYnAtPmlzX2xlYWRlciA9IDE7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCi0JCQkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYnAtPnJlc2V0X3Rhc2ssCi0JCQkJCQkJCUhaLzEwKTsKLQkJCQkJcmV0dXJuOwotCi0JCQkJfSBlbHNlIHsgLyogQSBsZWFkZXIgaGFzIGNvbXBsZXRlZAotCQkJCQkgICogdGhlICJwcm9jZXNzIGtpbGwiLiBJdCdzIGFuIGV4aXQKLQkJCQkJICAqIHBvaW50IGZvciBhIG5vbi1sZWFkZXIuCi0JCQkJCSAgKi8KLQkJCQkJYm54MnhfbmljX2xvYWQoYnAsIExPQURfTk9STUFMKTsKLQkJCQkJYnAtPnJlY292ZXJ5X3N0YXRlID0KLQkJCQkJCUJOWDJYX1JFQ09WRVJZX0RPTkU7Ci0JCQkJCXNtcF93bWIoKTsKLQkJCQkJcmV0dXJuOwotCQkJCX0KLQkJCX0KLQkJZGVmYXVsdDoKLQkJCXJldHVybjsKLQkJfQotCX0KLX0KLQotLyogYm54MnhfbmljX3VubG9hZCgpIGZsdXNoZXMgdGhlIGJueDJ4X3dxLCB0aHVzIHJlc2V0IHRhc2sgaXMKLSAqIHNjaGVkdWxlZCBvbiBhIGdlbmVyYWwgcXVldWUgaW4gb3JkZXIgdG8gcHJldmVudCBhIGRlYWQgbG9jay4KLSAqLwotc3RhdGljIHZvaWQgYm54MnhfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYm54MngsIHJlc2V0X3Rhc2sud29yayk7Ci0KLSNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCi0JQk5YMlhfRVJSKCJyZXNldCB0YXNrIGNhbGxlZCBidXQgU1RPUF9PTl9FUlJPUiBkZWZpbmVkIgotCQkgICIgc28gcmVzZXQgbm90IGRvbmUgdG8gYWxsb3cgZGVidWcgZHVtcCxcbiIKLQkgS0VSTl9FUlIgIiB5b3Ugd2lsbCBuZWVkIHRvIHJlYm9vdCB3aGVuIGRvbmVcbiIpOwotCXJldHVybjsKLSNlbmRpZgotCi0JcnRubF9sb2NrKCk7Ci0KLQlpZiAoIW5ldGlmX3J1bm5pbmcoYnAtPmRldikpCi0JCWdvdG8gcmVzZXRfdGFza19leGl0OwotCi0JaWYgKHVubGlrZWx5KGJwLT5yZWNvdmVyeV9zdGF0ZSAhPSBCTlgyWF9SRUNPVkVSWV9ET05FKSkKLQkJYm54MnhfcGFyaXR5X3JlY292ZXIoYnApOwotCWVsc2UgewotCQlibngyeF9uaWNfdW5sb2FkKGJwLCBVTkxPQURfTk9STUFMKTsKLQkJYm54MnhfbmljX2xvYWQoYnAsIExPQURfTk9STUFMKTsKLQl9Ci0KLXJlc2V0X3Rhc2tfZXhpdDoKLQlydG5sX3VubG9jaygpOwotfQotCi0vKiBlbmQgb2YgbmljIGxvYWQvdW5sb2FkICovCi0KLS8qIGV0aHRvb2xfb3BzICovCi0KLS8qCi0gKiBJbml0IHNlcnZpY2UgZnVuY3Rpb25zCi0gKi8KLQotc3RhdGljIGlubGluZSB1MzIgYm54MnhfZ2V0X3ByZXRlbmRfcmVnKHN0cnVjdCBibngyeCAqYnAsIGludCBmdW5jKQotewotCXN3aXRjaCAoZnVuYykgewotCWNhc2UgMDogcmV0dXJuIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjA7Ci0JY2FzZSAxOglyZXR1cm4gUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GMTsKLQljYXNlIDI6CXJldHVybiBQWFAyX1JFR19QR0xfUFJFVEVORF9GVU5DX0YyOwotCWNhc2UgMzoJcmV0dXJuIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjM7Ci0JY2FzZSA0OglyZXR1cm4gUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GNDsKLQljYXNlIDU6CXJldHVybiBQWFAyX1JFR19QR0xfUFJFVEVORF9GVU5DX0Y1OwotCWNhc2UgNjoJcmV0dXJuIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjY7Ci0JY2FzZSA3OglyZXR1cm4gUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GNzsKLQlkZWZhdWx0OgotCQlCTlgyWF9FUlIoIlVuc3VwcG9ydGVkIGZ1bmN0aW9uIGluZGV4OiAlZFxuIiwgZnVuYyk7Ci0JCXJldHVybiAodTMyKSgtMSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBibngyeF91bmRpX2ludF9kaXNhYmxlX2UxaChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgb3JpZ19mdW5jKQotewotCXUzMiByZWcgPSBibngyeF9nZXRfcHJldGVuZF9yZWcoYnAsIG9yaWdfZnVuYyksIG5ld192YWw7Ci0KLQkvKiBGbHVzaCBhbGwgb3V0c3RhbmRpbmcgd3JpdGVzICovCi0JbW1pb3diKCk7Ci0KLQkvKiBQcmV0ZW5kIHRvIGJlIGZ1bmN0aW9uIDAgKi8KLQlSRUdfV1IoYnAsIHJlZywgMCk7Ci0JLyogRmx1c2ggdGhlIEdSQyB0cmFuc2FjdGlvbiAoaW4gdGhlIGNoaXApICovCi0JbmV3X3ZhbCA9IFJFR19SRChicCwgcmVnKTsKLQlpZiAobmV3X3ZhbCAhPSAwKSB7Ci0JCUJOWDJYX0VSUigiSG1tbS4uLiBQcmV0ZW5kIHJlZ2lzdGVyIHdhc24ndCB1cGRhdGVkOiAoMCwlZCkhXG4iLAotCQkJICBuZXdfdmFsKTsKLQkJQlVHKCk7Ci0JfQotCi0JLyogRnJvbSBub3cgd2UgYXJlIGluIHRoZSAibGlrZS1FMSIgbW9kZSAqLwotCWJueDJ4X2ludF9kaXNhYmxlKGJwKTsKLQotCS8qIEZsdXNoIGFsbCBvdXRzdGFuZGluZyB3cml0ZXMgKi8KLQltbWlvd2IoKTsKLQotCS8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGZ1bnRpb24gc2V0dGluZ3MgKi8KLQlSRUdfV1IoYnAsIHJlZywgb3JpZ19mdW5jKTsKLQluZXdfdmFsID0gUkVHX1JEKGJwLCByZWcpOwotCWlmIChuZXdfdmFsICE9IG9yaWdfZnVuYykgewotCQlCTlgyWF9FUlIoIkhtbW0uLi4gUHJldGVuZCByZWdpc3RlciB3YXNuJ3QgdXBkYXRlZDogKCVkLCVkKSFcbiIsCi0JCQkgIG9yaWdfZnVuYywgbmV3X3ZhbCk7Ci0JCUJVRygpOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X3VuZGlfaW50X2Rpc2FibGUoc3RydWN0IGJueDJ4ICpicCwgaW50IGZ1bmMpCi17Ci0JaWYgKENISVBfSVNfRTFIKGJwKSkKLQkJYm54MnhfdW5kaV9pbnRfZGlzYWJsZV9lMWgoYnAsIGZ1bmMpOwotCWVsc2UKLQkJYm54MnhfaW50X2Rpc2FibGUoYnApOwotfQotCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgYm54MnhfdW5kaV91bmxvYWQoc3RydWN0IGJueDJ4ICpicCkKLXsKLQl1MzIgdmFsOwotCi0JLyogQ2hlY2sgaWYgdGhlcmUgaXMgYW55IGRyaXZlciBhbHJlYWR5IGxvYWRlZCAqLwotCXZhbCA9IFJFR19SRChicCwgTUlTQ19SRUdfVU5QUkVQQVJFRCk7Ci0JaWYgKHZhbCA9PSAweDEpIHsKLQkJLyogQ2hlY2sgaWYgaXQgaXMgdGhlIFVOREkgZHJpdmVyCi0JCSAqIFVOREkgZHJpdmVyIGluaXRpYWxpemVzIENJRCBvZmZzZXQgZm9yIG5vcm1hbCBiZWxsIHRvIDB4NwotCQkgKi8KLQkJYm54MnhfYWNxdWlyZV9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFX1VOREkpOwotCQl2YWwgPSBSRUdfUkQoYnAsIERPUlFfUkVHX05PUk1fQ0lEX09GU1QpOwotCQlpZiAodmFsID09IDB4NykgewotCQkJdTMyIHJlc2V0X2NvZGUgPSBEUlZfTVNHX0NPREVfVU5MT0FEX1JFUV9XT0xfRElTOwotCQkJLyogc2F2ZSBvdXIgZnVuYyAqLwotCQkJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKLQkJCXUzMiBzd2FwX2VuOwotCQkJdTMyIHN3YXBfdmFsOwotCi0JCQkvKiBjbGVhciB0aGUgVU5ESSBpbmRpY2F0aW9uICovCi0JCQlSRUdfV1IoYnAsIERPUlFfUkVHX05PUk1fQ0lEX09GU1QsIDApOwotCi0JCQlCTlgyWF9ERVZfSU5GTygiVU5ESSBpcyBhY3RpdmUhIHJlc2V0IGRldmljZVxuIik7Ci0KLQkJCS8qIHRyeSB1bmxvYWQgVU5ESSBvbiBwb3J0IDAgKi8KLQkJCWJwLT5mdW5jID0gMDsKLQkJCWJwLT5md19zZXEgPQotCQkJICAgICAgIChTSE1FTV9SRChicCwgZnVuY19tYlticC0+ZnVuY10uZHJ2X21iX2hlYWRlcikgJgotCQkJCURSVl9NU0dfU0VRX05VTUJFUl9NQVNLKTsKLQkJCXJlc2V0X2NvZGUgPSBibngyeF9md19jb21tYW5kKGJwLCByZXNldF9jb2RlKTsKLQotCQkJLyogaWYgVU5ESSBpcyBsb2FkZWQgb24gdGhlIG90aGVyIHBvcnQgKi8KLQkJCWlmIChyZXNldF9jb2RlICE9IEZXX01TR19DT0RFX0RSVl9VTkxPQURfQ09NTU9OKSB7Ci0KLQkJCQkvKiBzZW5kICJET05FIiBmb3IgcHJldmlvdXMgdW5sb2FkICovCi0JCQkJYm54MnhfZndfY29tbWFuZChicCwgRFJWX01TR19DT0RFX1VOTE9BRF9ET05FKTsKLQotCQkJCS8qIHVubG9hZCBVTkRJIG9uIHBvcnQgMSAqLwotCQkJCWJwLT5mdW5jID0gMTsKLQkJCQlicC0+Zndfc2VxID0KLQkJCSAgICAgICAoU0hNRU1fUkQoYnAsIGZ1bmNfbWJbYnAtPmZ1bmNdLmRydl9tYl9oZWFkZXIpICYKLQkJCQkJRFJWX01TR19TRVFfTlVNQkVSX01BU0spOwotCQkJCXJlc2V0X2NvZGUgPSBEUlZfTVNHX0NPREVfVU5MT0FEX1JFUV9XT0xfRElTOwotCi0JCQkJYm54MnhfZndfY29tbWFuZChicCwgcmVzZXRfY29kZSk7Ci0JCQl9Ci0KLQkJCS8qIG5vdyBpdCdzIHNhZmUgdG8gcmVsZWFzZSB0aGUgbG9jayAqLwotCQkJYm54MnhfcmVsZWFzZV9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFX1VOREkpOwotCi0JCQlibngyeF91bmRpX2ludF9kaXNhYmxlKGJwLCBmdW5jKTsKLQotCQkJLyogY2xvc2UgaW5wdXQgdHJhZmZpYyBhbmQgd2FpdCBmb3IgaXQgKi8KLQkJCS8qIERvIG5vdCByY3YgcGFja2V0cyB0byBCUkIgKi8KLQkJCVJFR19XUihicCwKLQkJCSAgICAgIChCUF9QT1JUKGJwKSA/IE5JR19SRUdfTExIMV9CUkIxX0RSVl9NQVNLIDoKLQkJCQkJICAgICBOSUdfUkVHX0xMSDBfQlJCMV9EUlZfTUFTSyksIDB4MCk7Ci0JCQkvKiBEbyBub3QgZGlyZWN0IHJjdiBwYWNrZXRzIHRoYXQgYXJlIG5vdCBmb3IgTUNQIHRvCi0JCQkgKiB0aGUgQlJCICovCi0JCQlSRUdfV1IoYnAsCi0JCQkgICAgICAgKEJQX1BPUlQoYnApID8gTklHX1JFR19MTEgxX0JSQjFfTk9UX01DUCA6Ci0JCQkJCSAgICAgIE5JR19SRUdfTExIMF9CUkIxX05PVF9NQ1ApLCAweDApOwotCQkJLyogY2xlYXIgQUVVICovCi0JCQlSRUdfV1IoYnAsCi0JCQkgICAgIChCUF9QT1JUKGJwKSA/IE1JU0NfUkVHX0FFVV9NQVNLX0FUVE5fRlVOQ18xIDoKLQkJCQkJICAgIE1JU0NfUkVHX0FFVV9NQVNLX0FUVE5fRlVOQ18wKSwgMCk7Ci0JCQltc2xlZXAoMTApOwotCi0JCQkvKiBzYXZlIE5JRyBwb3J0IHN3YXAgaW5mbyAqLwotCQkJc3dhcF92YWwgPSBSRUdfUkQoYnAsIE5JR19SRUdfUE9SVF9TV0FQKTsKLQkJCXN3YXBfZW4gPSBSRUdfUkQoYnAsIE5JR19SRUdfU1RSQVBfT1ZFUlJJREUpOwotCQkJLyogcmVzZXQgZGV2aWNlICovCi0JCQlSRUdfV1IoYnAsCi0JCQkgICAgICAgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzFfQ0xFQVIsCi0JCQkgICAgICAgMHhkM2ZmZmZmZik7Ci0JCQlSRUdfV1IoYnAsCi0JCQkgICAgICAgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfQ0xFQVIsCi0JCQkgICAgICAgMHgxNDAzKTsKLQkJCS8qIHRha2UgdGhlIE5JRyBvdXQgb2YgcmVzZXQgYW5kIHJlc3RvcmUgc3dhcCB2YWx1ZXMgKi8KLQkJCVJFR19XUihicCwKLQkJCSAgICAgICBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMV9TRVQsCi0JCQkgICAgICAgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzFfUlNUX05JRyk7Ci0JCQlSRUdfV1IoYnAsIE5JR19SRUdfUE9SVF9TV0FQLCBzd2FwX3ZhbCk7Ci0JCQlSRUdfV1IoYnAsIE5JR19SRUdfU1RSQVBfT1ZFUlJJREUsIHN3YXBfZW4pOwotCi0JCQkvKiBzZW5kIHVubG9hZCBkb25lIHRvIHRoZSBNQ1AgKi8KLQkJCWJueDJ4X2Z3X2NvbW1hbmQoYnAsIERSVl9NU0dfQ09ERV9VTkxPQURfRE9ORSk7Ci0KLQkJCS8qIHJlc3RvcmUgb3VyIGZ1bmMgYW5kIGZ3X3NlcSAqLwotCQkJYnAtPmZ1bmMgPSBmdW5jOwotCQkJYnAtPmZ3X3NlcSA9Ci0JCQkgICAgICAgKFNITUVNX1JEKGJwLCBmdW5jX21iW2JwLT5mdW5jXS5kcnZfbWJfaGVhZGVyKSAmCi0JCQkJRFJWX01TR19TRVFfTlVNQkVSX01BU0spOwotCi0JCX0gZWxzZQotCQkJYm54MnhfcmVsZWFzZV9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFX1VOREkpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgX19kZXZpbml0IGJueDJ4X2dldF9jb21tb25faHdpbmZvKHN0cnVjdCBibngyeCAqYnApCi17Ci0JdTMyIHZhbCwgdmFsMiwgdmFsMywgdmFsNCwgaWQ7Ci0JdTE2IHBtYzsKLQotCS8qIEdldCB0aGUgY2hpcCByZXZpc2lvbiBpZCBhbmQgbnVtYmVyLiAqLwotCS8qIGNoaXAgbnVtOjE2LTMxLCByZXY6MTItMTUsIG1ldGFsOjQtMTEsIGJvbmRfaWQ6MC0zICovCi0JdmFsID0gUkVHX1JEKGJwLCBNSVNDX1JFR19DSElQX05VTSk7Ci0JaWQgPSAoKHZhbCAmIDB4ZmZmZikgPDwgMTYpOwotCXZhbCA9IFJFR19SRChicCwgTUlTQ19SRUdfQ0hJUF9SRVYpOwotCWlkIHw9ICgodmFsICYgMHhmKSA8PCAxMik7Ci0JdmFsID0gUkVHX1JEKGJwLCBNSVNDX1JFR19DSElQX01FVEFMKTsKLQlpZCB8PSAoKHZhbCAmIDB4ZmYpIDw8IDQpOwotCXZhbCA9IFJFR19SRChicCwgTUlTQ19SRUdfQk9ORF9JRCk7Ci0JaWQgfD0gKHZhbCAmIDB4Zik7Ci0JYnAtPmNvbW1vbi5jaGlwX2lkID0gaWQ7Ci0JYnAtPmxpbmtfcGFyYW1zLmNoaXBfaWQgPSBicC0+Y29tbW9uLmNoaXBfaWQ7Ci0JQk5YMlhfREVWX0lORk8oImNoaXAgSUQgaXMgMHgleFxuIiwgaWQpOwotCi0JdmFsID0gKFJFR19SRChicCwgMHgyODc0KSAmIDB4NTUpOwotCWlmICgoYnAtPmNvbW1vbi5jaGlwX2lkICYgMHgxKSB8fAotCSAgICAoQ0hJUF9JU19FMShicCkgJiYgdmFsKSB8fCAoQ0hJUF9JU19FMUgoYnApICYmICh2YWwgPT0gMHg1NSkpKSB7Ci0JCWJwLT5mbGFncyB8PSBPTkVfUE9SVF9GTEFHOwotCQlCTlgyWF9ERVZfSU5GTygic2luZ2xlIHBvcnQgZGV2aWNlXG4iKTsKLQl9Ci0KLQl2YWwgPSBSRUdfUkQoYnAsIE1DUF9SRUdfTUNQUl9OVk1fQ0ZHNCk7Ci0JYnAtPmNvbW1vbi5mbGFzaF9zaXplID0gKE5WUkFNXzFNQl9TSVpFIDw8Ci0JCQkJICh2YWwgJiBNQ1BSX05WTV9DRkc0X0ZMQVNIX1NJWkUpKTsKLQlCTlgyWF9ERVZfSU5GTygiZmxhc2hfc2l6ZSAweCV4ICglZClcbiIsCi0JCSAgICAgICBicC0+Y29tbW9uLmZsYXNoX3NpemUsIGJwLT5jb21tb24uZmxhc2hfc2l6ZSk7Ci0KLQlicC0+Y29tbW9uLnNobWVtX2Jhc2UgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX1NIQVJFRF9NRU1fQUREUik7Ci0JYnAtPmNvbW1vbi5zaG1lbTJfYmFzZSA9IFJFR19SRChicCwgTUlTQ19SRUdfR0VORVJJQ19DUl8wKTsKLQlicC0+bGlua19wYXJhbXMuc2htZW1fYmFzZSA9IGJwLT5jb21tb24uc2htZW1fYmFzZTsKLQlCTlgyWF9ERVZfSU5GTygic2htZW0gb2Zmc2V0IDB4JXggIHNobWVtMiBvZmZzZXQgMHgleFxuIiwKLQkJICAgICAgIGJwLT5jb21tb24uc2htZW1fYmFzZSwgYnAtPmNvbW1vbi5zaG1lbTJfYmFzZSk7Ci0KLQlpZiAoIWJwLT5jb21tb24uc2htZW1fYmFzZSB8fAotCSAgICAoYnAtPmNvbW1vbi5zaG1lbV9iYXNlIDwgMHhBMDAwMCkgfHwKLQkgICAgKGJwLT5jb21tb24uc2htZW1fYmFzZSA+PSAweEMwMDAwKSkgewotCQlCTlgyWF9ERVZfSU5GTygiTUNQIG5vdCBhY3RpdmVcbiIpOwotCQlicC0+ZmxhZ3MgfD0gTk9fTUNQX0ZMQUc7Ci0JCXJldHVybjsKLQl9Ci0KLQl2YWwgPSBTSE1FTV9SRChicCwgdmFsaWRpdHlfbWFwW0JQX1BPUlQoYnApXSk7Ci0JaWYgKCh2YWwgJiAoU0hSX01FTV9WQUxJRElUWV9ERVZfSU5GTyB8IFNIUl9NRU1fVkFMSURJVFlfTUIpKQotCQkhPSAoU0hSX01FTV9WQUxJRElUWV9ERVZfSU5GTyB8IFNIUl9NRU1fVkFMSURJVFlfTUIpKQotCQlCTlgyWF9FUlJPUigiQkFEIE1DUCB2YWxpZGl0eSBzaWduYXR1cmVcbiIpOwotCi0JYnAtPmNvbW1vbi5od19jb25maWcgPSBTSE1FTV9SRChicCwgZGV2X2luZm8uc2hhcmVkX2h3X2NvbmZpZy5jb25maWcpOwotCUJOWDJYX0RFVl9JTkZPKCJod19jb25maWcgMHglMDh4XG4iLCBicC0+Y29tbW9uLmh3X2NvbmZpZyk7Ci0KLQlicC0+bGlua19wYXJhbXMuaHdfbGVkX21vZGUgPSAoKGJwLT5jb21tb24uaHdfY29uZmlnICYKLQkJCQkJU0hBUkVEX0hXX0NGR19MRURfTU9ERV9NQVNLKSA+PgotCQkJCSAgICAgICBTSEFSRURfSFdfQ0ZHX0xFRF9NT0RFX1NISUZUKTsKLQotCWJwLT5saW5rX3BhcmFtcy5mZWF0dXJlX2NvbmZpZ19mbGFncyA9IDA7Ci0JdmFsID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLnNoYXJlZF9mZWF0dXJlX2NvbmZpZy5jb25maWcpOwotCWlmICh2YWwgJiBTSEFSRURfRkVBVF9DRkdfT1ZFUlJJREVfUFJFRU1QSEFTSVNfQ0ZHX0VOQUJMRUQpCi0JCWJwLT5saW5rX3BhcmFtcy5mZWF0dXJlX2NvbmZpZ19mbGFncyB8PQotCQkJCUZFQVRVUkVfQ09ORklHX09WRVJSSURFX1BSRUVNUEhBU0lTX0VOQUJMRUQ7Ci0JZWxzZQotCQlicC0+bGlua19wYXJhbXMuZmVhdHVyZV9jb25maWdfZmxhZ3MgJj0KLQkJCQl+RkVBVFVSRV9DT05GSUdfT1ZFUlJJREVfUFJFRU1QSEFTSVNfRU5BQkxFRDsKLQotCXZhbCA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5iY19yZXYpID4+IDg7Ci0JYnAtPmNvbW1vbi5iY192ZXIgPSB2YWw7Ci0JQk5YMlhfREVWX0lORk8oImJjX3ZlciAlWFxuIiwgdmFsKTsKLQlpZiAodmFsIDwgQk5YMlhfQkNfVkVSKSB7Ci0JCS8qIGZvciBub3cgb25seSB3YXJuCi0JCSAqIGxhdGVyIHdlIG1pZ2h0IG5lZWQgdG8gZW5mb3JjZSB0aGlzICovCi0JCUJOWDJYX0VSUk9SKCJUaGlzIGRyaXZlciBuZWVkcyBiY192ZXIgJVggYnV0IGZvdW5kICVYLCAiCi0JCQkgICAgInBsZWFzZSB1cGdyYWRlIEJDXG4iLCBCTlgyWF9CQ19WRVIsIHZhbCk7Ci0JfQotCWJwLT5saW5rX3BhcmFtcy5mZWF0dXJlX2NvbmZpZ19mbGFncyB8PQotCQkodmFsID49IFJFUV9CQ19WRVJfNF9WUkZZX09QVF9NREwpID8KLQkJRkVBVFVSRV9DT05GSUdfQkNfU1VQUE9SVFNfT1BUX01ETF9WUkZZIDogMDsKLQotCWlmIChCUF9FMUhWTihicCkgPT0gMCkgewotCQlwY2lfcmVhZF9jb25maWdfd29yZChicC0+cGRldiwgYnAtPnBtX2NhcCArIFBDSV9QTV9QTUMsICZwbWMpOwotCQlicC0+ZmxhZ3MgfD0gKHBtYyAmIFBDSV9QTV9DQVBfUE1FX0QzY29sZCkgPyAwIDogTk9fV09MX0ZMQUc7Ci0JfSBlbHNlIHsKLQkJLyogbm8gV09MIGNhcGFiaWxpdHkgZm9yIEUxSFZOICE9IDAgKi8KLQkJYnAtPmZsYWdzIHw9IE5PX1dPTF9GTEFHOwotCX0KLQlCTlgyWF9ERVZfSU5GTygiJXNXb0wgY2FwYWJsZVxuIiwKLQkJICAgICAgIChicC0+ZmxhZ3MgJiBOT19XT0xfRkxBRykgPyAibm90ICIgOiAiIik7Ci0KLQl2YWwgPSBTSE1FTV9SRChicCwgZGV2X2luZm8uc2hhcmVkX2h3X2NvbmZpZy5wYXJ0X251bSk7Ci0JdmFsMiA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5zaGFyZWRfaHdfY29uZmlnLnBhcnRfbnVtWzRdKTsKLQl2YWwzID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLnNoYXJlZF9od19jb25maWcucGFydF9udW1bOF0pOwotCXZhbDQgPSBTSE1FTV9SRChicCwgZGV2X2luZm8uc2hhcmVkX2h3X2NvbmZpZy5wYXJ0X251bVsxMl0pOwotCi0JZGV2X2luZm8oJmJwLT5wZGV2LT5kZXYsICJwYXJ0IG51bWJlciAlWC0lWC0lWC0lWFxuIiwKLQkJIHZhbCwgdmFsMiwgdmFsMywgdmFsNCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBibngyeF9saW5rX3NldHRpbmdzX3N1cHBvcnRlZChzdHJ1Y3QgYm54MnggKmJwLAotCQkJCQkJICAgIHUzMiBzd2l0Y2hfY2ZnKQotewotCWludCBwb3J0ID0gQlBfUE9SVChicCk7Ci0JdTMyIGV4dF9waHlfdHlwZTsKLQotCXN3aXRjaCAoc3dpdGNoX2NmZykgewotCWNhc2UgU1dJVENIX0NGR18xRzoKLQkJQk5YMlhfREVWX0lORk8oInN3aXRjaF9jZmcgMHgleCAoMUcpXG4iLCBzd2l0Y2hfY2ZnKTsKLQotCQlleHRfcGh5X3R5cGUgPQotCQkJU0VSREVTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOwotCQlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgewotCQljYXNlIFBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX1RZUEVfRElSRUNUOgotCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4IChEaXJlY3QpXG4iLAotCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOwotCi0JCQlicC0+cG9ydC5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEXzI1MDBiYXNlWF9GdWxsIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF9UUCB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfRklCUkUgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEX0F1dG9uZWcgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEX1BhdXNlIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUE9SVF9IV19DRkdfU0VSREVTX0VYVF9QSFlfVFlQRV9CQ001NDgyOgotCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4ICg1NDgyKVxuIiwKLQkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKLQotCQkJYnAtPnBvcnQuc3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF9UUCB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfRklCUkUgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEX0F1dG9uZWcgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEX1BhdXNlIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlCTlgyWF9FUlIoIk5WUkFNIGNvbmZpZyBlcnJvci4gIgotCQkJCSAgIkJBRCBTZXJEZXMgZXh0X3BoeV9jb25maWcgMHgleFxuIiwKLQkJCQkgIGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlicC0+cG9ydC5waHlfYWRkciA9IFJFR19SRChicCwgTklHX1JFR19TRVJERVMwX0NUUkxfUEhZX0FERFIgKwotCQkJCQkgICBwb3J0KjB4MTApOwotCQlCTlgyWF9ERVZfSU5GTygicGh5X2FkZHIgMHgleFxuIiwgYnAtPnBvcnQucGh5X2FkZHIpOwotCQlicmVhazsKLQotCWNhc2UgU1dJVENIX0NGR18xMEc6Ci0JCUJOWDJYX0RFVl9JTkZPKCJzd2l0Y2hfY2ZnIDB4JXggKDEwRylcbiIsIHN3aXRjaF9jZmcpOwotCi0JCWV4dF9waHlfdHlwZSA9Ci0JCQlYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOwotCQlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgewotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVDoKLQkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoRGlyZWN0KVxuIiwKLQkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKLQotCQkJYnAtPnBvcnQuc3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF8yNTAwYmFzZVhfRnVsbCB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF9UUCB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfRklCUkUgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEX0F1dG9uZWcgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEX1BhdXNlIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKLQkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoODA3MilcbiIsCi0JCQkJICAgICAgIGV4dF9waHlfdHlwZSk7Ci0KLQkJCWJwLT5wb3J0LnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEX0ZJQlJFIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF9BdXRvbmVnIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF9QYXVzZSB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfQXN5bV9QYXVzZSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzM6Ci0JCQlCTlgyWF9ERVZfSU5GTygiZXh0X3BoeV90eXBlIDB4JXggKDgwNzMpXG4iLAotCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOwotCi0JCQlicC0+cG9ydC5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEXzI1MDBiYXNlWF9GdWxsIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfRklCUkUgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEX0F1dG9uZWcgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEX1BhdXNlIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNToKLQkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoODcwNSlcbiIsCi0JCQkJICAgICAgIGV4dF9waHlfdHlwZSk7Ci0KLQkJCWJwLT5wb3J0LnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfRklCUkUgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEX1BhdXNlIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKLQkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoODcwNilcbiIsCi0JCQkJICAgICAgIGV4dF9waHlfdHlwZSk7Ci0KLQkJCWJwLT5wb3J0LnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEX0ZJQlJFIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF9QYXVzZSB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfQXN5bV9QYXVzZSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6Ci0JCQlCTlgyWF9ERVZfSU5GTygiZXh0X3BoeV90eXBlIDB4JXggKDg3MjYpXG4iLAotCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOwotCi0JCQlicC0+cG9ydC5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF9BdXRvbmVnIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF9GSUJSRSB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfUGF1c2UgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3OgotCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4ICg4NzI3KVxuIiwKLQkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKLQotCQkJYnAtPnBvcnQuc3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfQXV0b25lZyB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfRklCUkUgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEX1BhdXNlIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKLQkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoU0ZYNzEwMSlcbiIsCi0JCQkJICAgICAgIGV4dF9waHlfdHlwZSk7Ci0KLQkJCWJwLT5wb3J0LnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfVFAgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEX0F1dG9uZWcgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEX1BhdXNlIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MToKLQkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoQkNNODQ4MSlcbiIsCi0JCQkJICAgICAgIGV4dF9waHlfdHlwZSk7Ci0KLQkJCWJwLT5wb3J0LnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfMTBiYXNlVF9GdWxsIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF9UUCB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfQXV0b25lZyB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfUGF1c2UgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9GQUlMVVJFOgotCQkJQk5YMlhfRVJSKCJYR1hTIFBIWSBGYWlsdXJlIGRldGVjdGVkIDB4JXhcbiIsCi0JCQkJICBicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCUJOWDJYX0VSUigiTlZSQU0gY29uZmlnIGVycm9yLiAiCi0JCQkJICAiQkFEIFhHWFMgZXh0X3BoeV9jb25maWcgMHgleFxuIiwKLQkJCQkgIGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlicC0+cG9ydC5waHlfYWRkciA9IFJFR19SRChicCwgTklHX1JFR19YR1hTMF9DVFJMX1BIWV9BRERSICsKLQkJCQkJICAgcG9ydCoweDE4KTsKLQkJQk5YMlhfREVWX0lORk8oInBoeV9hZGRyIDB4JXhcbiIsIGJwLT5wb3J0LnBoeV9hZGRyKTsKLQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCUJOWDJYX0VSUigiQkFEIHN3aXRjaF9jZmcgbGlua19jb25maWcgMHgleFxuIiwKLQkJCSAgYnAtPnBvcnQubGlua19jb25maWcpOwotCQlyZXR1cm47Ci0JfQotCWJwLT5saW5rX3BhcmFtcy5waHlfYWRkciA9IGJwLT5wb3J0LnBoeV9hZGRyOwotCi0JLyogbWFzayB3aGF0IHdlIHN1cHBvcnQgYWNjb3JkaW5nIHRvIHNwZWVkX2NhcF9tYXNrICovCi0JaWYgKCEoYnAtPmxpbmtfcGFyYW1zLnNwZWVkX2NhcF9tYXNrICYKLQkJCQlQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzEwTV9IQUxGKSkKLQkJYnAtPnBvcnQuc3VwcG9ydGVkICY9IH5TVVBQT1JURURfMTBiYXNlVF9IYWxmOwotCi0JaWYgKCEoYnAtPmxpbmtfcGFyYW1zLnNwZWVkX2NhcF9tYXNrICYKLQkJCQlQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzEwTV9GVUxMKSkKLQkJYnAtPnBvcnQuc3VwcG9ydGVkICY9IH5TVVBQT1JURURfMTBiYXNlVF9GdWxsOwotCi0JaWYgKCEoYnAtPmxpbmtfcGFyYW1zLnNwZWVkX2NhcF9tYXNrICYKLQkJCQlQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzEwME1fSEFMRikpCi0JCWJwLT5wb3J0LnN1cHBvcnRlZCAmPSB+U1VQUE9SVEVEXzEwMGJhc2VUX0hhbGY7Ci0KLQlpZiAoIShicC0+bGlua19wYXJhbXMuc3BlZWRfY2FwX21hc2sgJgotCQkJCVBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMTAwTV9GVUxMKSkKLQkJYnAtPnBvcnQuc3VwcG9ydGVkICY9IH5TVVBQT1JURURfMTAwYmFzZVRfRnVsbDsKLQotCWlmICghKGJwLT5saW5rX3BhcmFtcy5zcGVlZF9jYXBfbWFzayAmCi0JCQkJCVBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMUcpKQotCQlicC0+cG9ydC5zdXBwb3J0ZWQgJj0gfihTVVBQT1JURURfMTAwMGJhc2VUX0hhbGYgfAotCQkJCQlTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwpOwotCi0JaWYgKCEoYnAtPmxpbmtfcGFyYW1zLnNwZWVkX2NhcF9tYXNrICYKLQkJCQkJUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8yXzVHKSkKLQkJYnAtPnBvcnQuc3VwcG9ydGVkICY9IH5TVVBQT1JURURfMjUwMGJhc2VYX0Z1bGw7Ci0KLQlpZiAoIShicC0+bGlua19wYXJhbXMuc3BlZWRfY2FwX21hc2sgJgotCQkJCQlQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzEwRykpCi0JCWJwLT5wb3J0LnN1cHBvcnRlZCAmPSB+U1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbDsKLQotCUJOWDJYX0RFVl9JTkZPKCJzdXBwb3J0ZWQgMHgleFxuIiwgYnAtPnBvcnQuc3VwcG9ydGVkKTsKLX0KLQotc3RhdGljIHZvaWQgX19kZXZpbml0IGJueDJ4X2xpbmtfc2V0dGluZ3NfcmVxdWVzdGVkKHN0cnVjdCBibngyeCAqYnApCi17Ci0JYnAtPmxpbmtfcGFyYW1zLnJlcV9kdXBsZXggPSBEVVBMRVhfRlVMTDsKLQotCXN3aXRjaCAoYnAtPnBvcnQubGlua19jb25maWcgJiBQT1JUX0ZFQVRVUkVfTElOS19TUEVFRF9NQVNLKSB7Ci0JY2FzZSBQT1JUX0ZFQVRVUkVfTElOS19TUEVFRF9BVVRPOgotCQlpZiAoYnAtPnBvcnQuc3VwcG9ydGVkICYgU1VQUE9SVEVEX0F1dG9uZWcpIHsKLQkJCWJwLT5saW5rX3BhcmFtcy5yZXFfbGluZV9zcGVlZCA9IFNQRUVEX0FVVE9fTkVHOwotCQkJYnAtPnBvcnQuYWR2ZXJ0aXNpbmcgPSBicC0+cG9ydC5zdXBwb3J0ZWQ7Ci0JCX0gZWxzZSB7Ci0JCQl1MzIgZXh0X3BoeV90eXBlID0KLQkJCSAgICBYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOwotCi0JCQlpZiAoKGV4dF9waHlfdHlwZSA9PQotCQkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1KSB8fAotCQkJICAgIChleHRfcGh5X3R5cGUgPT0KLQkJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNikpIHsKLQkJCQkvKiBmb3JjZSAxMEcsIG5vIEFOICovCi0JCQkJYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkID0gU1BFRURfMTAwMDA7Ci0JCQkJYnAtPnBvcnQuYWR2ZXJ0aXNpbmcgPQotCQkJCQkJKEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsIHwKLQkJCQkJCSBBRFZFUlRJU0VEX0ZJQlJFKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCUJOWDJYX0VSUigiTlZSQU0gY29uZmlnIGVycm9yLiAiCi0JCQkJICAiSW52YWxpZCBsaW5rX2NvbmZpZyAweCV4IgotCQkJCSAgIiAgQXV0b25lZyBub3Qgc3VwcG9ydGVkXG4iLAotCQkJCSAgYnAtPnBvcnQubGlua19jb25maWcpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBQT1JUX0ZFQVRVUkVfTElOS19TUEVFRF8xME1fRlVMTDoKLQkJaWYgKGJwLT5wb3J0LnN1cHBvcnRlZCAmIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwpIHsKLQkJCWJwLT5saW5rX3BhcmFtcy5yZXFfbGluZV9zcGVlZCA9IFNQRUVEXzEwOwotCQkJYnAtPnBvcnQuYWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwgfAotCQkJCQkJQURWRVJUSVNFRF9UUCk7Ci0JCX0gZWxzZSB7Ci0JCQlCTlgyWF9FUlJPUigiTlZSQU0gY29uZmlnIGVycm9yLiAiCi0JCQkJICAgICJJbnZhbGlkIGxpbmtfY29uZmlnIDB4JXgiCi0JCQkJICAgICIgIHNwZWVkX2NhcF9tYXNrIDB4JXhcbiIsCi0JCQkJICAgIGJwLT5wb3J0LmxpbmtfY29uZmlnLAotCQkJCSAgICBicC0+bGlua19wYXJhbXMuc3BlZWRfY2FwX21hc2spOwotCQkJcmV0dXJuOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBQT1JUX0ZFQVRVUkVfTElOS19TUEVFRF8xME1fSEFMRjoKLQkJaWYgKGJwLT5wb3J0LnN1cHBvcnRlZCAmIFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYpIHsKLQkJCWJwLT5saW5rX3BhcmFtcy5yZXFfbGluZV9zcGVlZCA9IFNQRUVEXzEwOwotCQkJYnAtPmxpbmtfcGFyYW1zLnJlcV9kdXBsZXggPSBEVVBMRVhfSEFMRjsKLQkJCWJwLT5wb3J0LmFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTBiYXNlVF9IYWxmIHwKLQkJCQkJCUFEVkVSVElTRURfVFApOwotCQl9IGVsc2UgewotCQkJQk5YMlhfRVJST1IoIk5WUkFNIGNvbmZpZyBlcnJvci4gIgotCQkJCSAgICAiSW52YWxpZCBsaW5rX2NvbmZpZyAweCV4IgotCQkJCSAgICAiICBzcGVlZF9jYXBfbWFzayAweCV4XG4iLAotCQkJCSAgICBicC0+cG9ydC5saW5rX2NvbmZpZywKLQkJCQkgICAgYnAtPmxpbmtfcGFyYW1zLnNwZWVkX2NhcF9tYXNrKTsKLQkJCXJldHVybjsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgUE9SVF9GRUFUVVJFX0xJTktfU1BFRURfMTAwTV9GVUxMOgotCQlpZiAoYnAtPnBvcnQuc3VwcG9ydGVkICYgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwpIHsKLQkJCWJwLT5saW5rX3BhcmFtcy5yZXFfbGluZV9zcGVlZCA9IFNQRUVEXzEwMDsKLQkJCWJwLT5wb3J0LmFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCB8Ci0JCQkJCQlBRFZFUlRJU0VEX1RQKTsKLQkJfSBlbHNlIHsKLQkJCUJOWDJYX0VSUk9SKCJOVlJBTSBjb25maWcgZXJyb3IuICIKLQkJCQkgICAgIkludmFsaWQgbGlua19jb25maWcgMHgleCIKLQkJCQkgICAgIiAgc3BlZWRfY2FwX21hc2sgMHgleFxuIiwKLQkJCQkgICAgYnAtPnBvcnQubGlua19jb25maWcsCi0JCQkJICAgIGJwLT5saW5rX3BhcmFtcy5zcGVlZF9jYXBfbWFzayk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFBPUlRfRkVBVFVSRV9MSU5LX1NQRUVEXzEwME1fSEFMRjoKLQkJaWYgKGJwLT5wb3J0LnN1cHBvcnRlZCAmIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmKSB7Ci0JCQlicC0+bGlua19wYXJhbXMucmVxX2xpbmVfc3BlZWQgPSBTUEVFRF8xMDA7Ci0JCQlicC0+bGlua19wYXJhbXMucmVxX2R1cGxleCA9IERVUExFWF9IQUxGOwotCQkJYnAtPnBvcnQuYWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmIHwKLQkJCQkJCUFEVkVSVElTRURfVFApOwotCQl9IGVsc2UgewotCQkJQk5YMlhfRVJST1IoIk5WUkFNIGNvbmZpZyBlcnJvci4gIgotCQkJCSAgICAiSW52YWxpZCBsaW5rX2NvbmZpZyAweCV4IgotCQkJCSAgICAiICBzcGVlZF9jYXBfbWFzayAweCV4XG4iLAotCQkJCSAgICBicC0+cG9ydC5saW5rX2NvbmZpZywKLQkJCQkgICAgYnAtPmxpbmtfcGFyYW1zLnNwZWVkX2NhcF9tYXNrKTsKLQkJCXJldHVybjsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgUE9SVF9GRUFUVVJFX0xJTktfU1BFRURfMUc6Ci0JCWlmIChicC0+cG9ydC5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwpIHsKLQkJCWJwLT5saW5rX3BhcmFtcy5yZXFfbGluZV9zcGVlZCA9IFNQRUVEXzEwMDA7Ci0JCQlicC0+cG9ydC5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsIHwKLQkJCQkJCUFEVkVSVElTRURfVFApOwotCQl9IGVsc2UgewotCQkJQk5YMlhfRVJST1IoIk5WUkFNIGNvbmZpZyBlcnJvci4gIgotCQkJCSAgICAiSW52YWxpZCBsaW5rX2NvbmZpZyAweCV4IgotCQkJCSAgICAiICBzcGVlZF9jYXBfbWFzayAweCV4XG4iLAotCQkJCSAgICBicC0+cG9ydC5saW5rX2NvbmZpZywKLQkJCQkgICAgYnAtPmxpbmtfcGFyYW1zLnNwZWVkX2NhcF9tYXNrKTsKLQkJCXJldHVybjsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgUE9SVF9GRUFUVVJFX0xJTktfU1BFRURfMl81RzoKLQkJaWYgKGJwLT5wb3J0LnN1cHBvcnRlZCAmIFNVUFBPUlRFRF8yNTAwYmFzZVhfRnVsbCkgewotCQkJYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkID0gU1BFRURfMjUwMDsKLQkJCWJwLT5wb3J0LmFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMjUwMGJhc2VYX0Z1bGwgfAotCQkJCQkJQURWRVJUSVNFRF9UUCk7Ci0JCX0gZWxzZSB7Ci0JCQlCTlgyWF9FUlJPUigiTlZSQU0gY29uZmlnIGVycm9yLiAiCi0JCQkJICAgICJJbnZhbGlkIGxpbmtfY29uZmlnIDB4JXgiCi0JCQkJICAgICIgIHNwZWVkX2NhcF9tYXNrIDB4JXhcbiIsCi0JCQkJICAgIGJwLT5wb3J0LmxpbmtfY29uZmlnLAotCQkJCSAgICBicC0+bGlua19wYXJhbXMuc3BlZWRfY2FwX21hc2spOwotCQkJcmV0dXJuOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBQT1JUX0ZFQVRVUkVfTElOS19TUEVFRF8xMEdfQ1g0OgotCWNhc2UgUE9SVF9GRUFUVVJFX0xJTktfU1BFRURfMTBHX0tYNDoKLQljYXNlIFBPUlRfRkVBVFVSRV9MSU5LX1NQRUVEXzEwR19LUjoKLQkJaWYgKGJwLT5wb3J0LnN1cHBvcnRlZCAmIFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwpIHsKLQkJCWJwLT5saW5rX3BhcmFtcy5yZXFfbGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOwotCQkJYnAtPnBvcnQuYWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGwgfAotCQkJCQkJQURWRVJUSVNFRF9GSUJSRSk7Ci0JCX0gZWxzZSB7Ci0JCQlCTlgyWF9FUlJPUigiTlZSQU0gY29uZmlnIGVycm9yLiAiCi0JCQkJICAgICJJbnZhbGlkIGxpbmtfY29uZmlnIDB4JXgiCi0JCQkJICAgICIgIHNwZWVkX2NhcF9tYXNrIDB4JXhcbiIsCi0JCQkJICAgIGJwLT5wb3J0LmxpbmtfY29uZmlnLAotCQkJCSAgICBicC0+bGlua19wYXJhbXMuc3BlZWRfY2FwX21hc2spOwotCQkJcmV0dXJuOwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJQk5YMlhfRVJST1IoIk5WUkFNIGNvbmZpZyBlcnJvci4gIgotCQkJICAgICJCQUQgbGluayBzcGVlZCBsaW5rX2NvbmZpZyAweCV4XG4iLAotCQkJICAgIGJwLT5wb3J0LmxpbmtfY29uZmlnKTsKLQkJYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkID0gU1BFRURfQVVUT19ORUc7Ci0JCWJwLT5wb3J0LmFkdmVydGlzaW5nID0gYnAtPnBvcnQuc3VwcG9ydGVkOwotCQlicmVhazsKLQl9Ci0KLQlicC0+bGlua19wYXJhbXMucmVxX2Zsb3dfY3RybCA9IChicC0+cG9ydC5saW5rX2NvbmZpZyAmCi0JCQkJCSBQT1JUX0ZFQVRVUkVfRkxPV19DT05UUk9MX01BU0spOwotCWlmICgoYnAtPmxpbmtfcGFyYW1zLnJlcV9mbG93X2N0cmwgPT0gQk5YMlhfRkxPV19DVFJMX0FVVE8pICYmCi0JICAgICEoYnAtPnBvcnQuc3VwcG9ydGVkICYgU1VQUE9SVEVEX0F1dG9uZWcpKQotCQlicC0+bGlua19wYXJhbXMucmVxX2Zsb3dfY3RybCA9IEJOWDJYX0ZMT1dfQ1RSTF9OT05FOwotCi0JQk5YMlhfREVWX0lORk8oInJlcV9saW5lX3NwZWVkICVkICByZXFfZHVwbGV4ICVkICByZXFfZmxvd19jdHJsIDB4JXgiCi0JCSAgICAgICAiICBhZHZlcnRpc2luZyAweCV4XG4iLAotCQkgICAgICAgYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkLAotCQkgICAgICAgYnAtPmxpbmtfcGFyYW1zLnJlcV9kdXBsZXgsCi0JCSAgICAgICBicC0+bGlua19wYXJhbXMucmVxX2Zsb3dfY3RybCwgYnAtPnBvcnQuYWR2ZXJ0aXNpbmcpOwotfQotCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgYm54Mnhfc2V0X21hY19idWYodTggKm1hY19idWYsIHUzMiBtYWNfbG8sIHUxNiBtYWNfaGkpCi17Ci0JbWFjX2hpID0gY3B1X3RvX2JlMTYobWFjX2hpKTsKLQltYWNfbG8gPSBjcHVfdG9fYmUzMihtYWNfbG8pOwotCW1lbWNweShtYWNfYnVmLCAmbWFjX2hpLCBzaXplb2YobWFjX2hpKSk7Ci0JbWVtY3B5KG1hY19idWYgKyBzaXplb2YobWFjX2hpKSwgJm1hY19sbywgc2l6ZW9mKG1hY19sbykpOwotfQotCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgYm54MnhfZ2V0X3BvcnRfaHdpbmZvKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKLQl1MzIgdmFsLCB2YWwyOwotCXUzMiBjb25maWc7Ci0JdTE2IGk7Ci0JdTMyIGV4dF9waHlfdHlwZTsKLQotCWJwLT5saW5rX3BhcmFtcy5icCA9IGJwOwotCWJwLT5saW5rX3BhcmFtcy5wb3J0ID0gcG9ydDsKLQotCWJwLT5saW5rX3BhcmFtcy5sYW5lX2NvbmZpZyA9Ci0JCVNITUVNX1JEKGJwLCBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5sYW5lX2NvbmZpZyk7Ci0JYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnID0KLQkJU0hNRU1fUkQoYnAsCi0JCQkgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0uZXh0ZXJuYWxfcGh5X2NvbmZpZyk7Ci0JLyogQkNNODcyN19OT0MgPT4gQkNNODcyNyBubyBvdmVyIGN1cnJlbnQgKi8KLQlpZiAoWEdYU19FWFRfUEhZX1RZUEUoYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKSA9PQotCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3X05PQykgewotCQlicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcgJj0KLQkJCX5QT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9NQVNLOwotCQlicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcgfD0KLQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3Mjc7Ci0JCWJwLT5saW5rX3BhcmFtcy5mZWF0dXJlX2NvbmZpZ19mbGFncyB8PQotCQkJRkVBVFVSRV9DT05GSUdfQkNNODcyN19OT0M7Ci0JfQotCi0JYnAtPmxpbmtfcGFyYW1zLnNwZWVkX2NhcF9tYXNrID0KLQkJU0hNRU1fUkQoYnAsCi0JCQkgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0uc3BlZWRfY2FwYWJpbGl0eV9tYXNrKTsKLQotCWJwLT5wb3J0LmxpbmtfY29uZmlnID0KLQkJU0hNRU1fUkQoYnAsIGRldl9pbmZvLnBvcnRfZmVhdHVyZV9jb25maWdbcG9ydF0ubGlua19jb25maWcpOwotCi0JLyogR2V0IHRoZSA0IGxhbmVzIHhneHMgY29uZmlnIHJ4IGFuZCB0eCAqLwotCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKLQkJdmFsID0gU0hNRU1fUkQoYnAsCi0JCQkgICBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS54Z3hzX2NvbmZpZ19yeFtpPDwxXSk7Ci0JCWJwLT5saW5rX3BhcmFtcy54Z3hzX2NvbmZpZ19yeFtpIDw8IDFdID0gKCh2YWw+PjE2KSAmIDB4ZmZmZik7Ci0JCWJwLT5saW5rX3BhcmFtcy54Z3hzX2NvbmZpZ19yeFsoaSA8PCAxKSArIDFdID0gKHZhbCAmIDB4ZmZmZik7Ci0KLQkJdmFsID0gU0hNRU1fUkQoYnAsCi0JCQkgICBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS54Z3hzX2NvbmZpZ190eFtpPDwxXSk7Ci0JCWJwLT5saW5rX3BhcmFtcy54Z3hzX2NvbmZpZ190eFtpIDw8IDFdID0gKCh2YWw+PjE2KSAmIDB4ZmZmZik7Ci0JCWJwLT5saW5rX3BhcmFtcy54Z3hzX2NvbmZpZ190eFsoaSA8PCAxKSArIDFdID0gKHZhbCAmIDB4ZmZmZik7Ci0JfQotCi0JLyogSWYgdGhlIGRldmljZSBpcyBjYXBhYmxlIG9mIFdvTCwgc2V0IHRoZSBkZWZhdWx0IHN0YXRlIGFjY29yZGluZwotCSAqIHRvIHRoZSBIVwotCSAqLwotCWNvbmZpZyA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5wb3J0X2ZlYXR1cmVfY29uZmlnW3BvcnRdLmNvbmZpZyk7Ci0JYnAtPndvbCA9ICghKGJwLT5mbGFncyAmIE5PX1dPTF9GTEFHKSAmJgotCQkgICAoY29uZmlnICYgUE9SVF9GRUFUVVJFX1dPTF9FTkFCTEVEKSk7Ci0KLQlCTlgyWF9ERVZfSU5GTygibGFuZV9jb25maWcgMHglMDh4ICBleHRfcGh5X2NvbmZpZyAweCUwOHgiCi0JCSAgICAgICAiICBzcGVlZF9jYXBfbWFzayAweCUwOHggIGxpbmtfY29uZmlnIDB4JTA4eFxuIiwKLQkJICAgICAgIGJwLT5saW5rX3BhcmFtcy5sYW5lX2NvbmZpZywKLQkJICAgICAgIGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZywKLQkJICAgICAgIGJwLT5saW5rX3BhcmFtcy5zcGVlZF9jYXBfbWFzaywgYnAtPnBvcnQubGlua19jb25maWcpOwotCi0JYnAtPmxpbmtfcGFyYW1zLnN3aXRjaF9jZmcgfD0gKGJwLT5wb3J0LmxpbmtfY29uZmlnICYKLQkJCQkgICAgICAgUE9SVF9GRUFUVVJFX0NPTk5FQ1RFRF9TV0lUQ0hfTUFTSyk7Ci0JYm54MnhfbGlua19zZXR0aW5nc19zdXBwb3J0ZWQoYnAsIGJwLT5saW5rX3BhcmFtcy5zd2l0Y2hfY2ZnKTsKLQotCWJueDJ4X2xpbmtfc2V0dGluZ3NfcmVxdWVzdGVkKGJwKTsKLQotCS8qCi0JICogSWYgY29ubmVjdGVkIGRpcmVjdGx5LCB3b3JrIHdpdGggdGhlIGludGVybmFsIFBIWSwgb3RoZXJ3aXNlLCB3b3JrCi0JICogd2l0aCB0aGUgZXh0ZXJuYWwgUEhZCi0JICovCi0JZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUoYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKTsKLQlpZiAoZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVCkKLQkJYnAtPm1kaW8ucHJ0YWQgPSBicC0+bGlua19wYXJhbXMucGh5X2FkZHI7Ci0KLQllbHNlIGlmICgoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkUpICYmCi0JCSAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX05PVF9DT05OKSkKLQkJYnAtPm1kaW8ucHJ0YWQgPQotCQkJWEdYU19FWFRfUEhZX0FERFIoYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKTsKLQotCXZhbDIgPSBTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0ubWFjX3VwcGVyKTsKLQl2YWwgPSBTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0ubWFjX2xvd2VyKTsKLQlibngyeF9zZXRfbWFjX2J1ZihicC0+ZGV2LT5kZXZfYWRkciwgdmFsLCB2YWwyKTsKLQltZW1jcHkoYnAtPmxpbmtfcGFyYW1zLm1hY19hZGRyLCBicC0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShicC0+ZGV2LT5wZXJtX2FkZHIsIGJwLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0KLSNpZmRlZiBCQ01fQ05JQwotCXZhbDIgPSBTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0uaXNjc2lfbWFjX3VwcGVyKTsKLQl2YWwgPSBTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0uaXNjc2lfbWFjX2xvd2VyKTsKLQlibngyeF9zZXRfbWFjX2J1ZihicC0+aXNjc2lfbWFjLCB2YWwsIHZhbDIpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGJueDJ4X2dldF9od2luZm8oc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOwotCXUzMiB2YWwsIHZhbDI7Ci0JaW50IHJjID0gMDsKLQotCWJueDJ4X2dldF9jb21tb25faHdpbmZvKGJwKTsKLQotCWJwLT5lMWhvdiA9IDA7Ci0JYnAtPmUxaG1mID0gMDsKLQlpZiAoQ0hJUF9JU19FMUgoYnApICYmICFCUF9OT01DUChicCkpIHsKLQkJYnAtPm1mX2NvbmZpZyA9Ci0JCQlTSE1FTV9SRChicCwgbWZfY2ZnLmZ1bmNfbWZfY29uZmlnW2Z1bmNdLmNvbmZpZyk7Ci0KLQkJdmFsID0gKFNITUVNX1JEKGJwLCBtZl9jZmcuZnVuY19tZl9jb25maWdbRlVOQ18wXS5lMWhvdl90YWcpICYKLQkJICAgICAgIEZVTkNfTUZfQ0ZHX0UxSE9WX1RBR19NQVNLKTsKLQkJaWYgKHZhbCAhPSBGVU5DX01GX0NGR19FMUhPVl9UQUdfREVGQVVMVCkKLQkJCWJwLT5lMWhtZiA9IDE7Ci0JCUJOWDJYX0RFVl9JTkZPKCIlcyBmdW5jdGlvbiBtb2RlXG4iLAotCQkJICAgICAgIElTX0UxSE1GKGJwKSA/ICJtdWx0aSIgOiAic2luZ2xlIik7Ci0KLQkJaWYgKElTX0UxSE1GKGJwKSkgewotCQkJdmFsID0gKFNITUVNX1JEKGJwLCBtZl9jZmcuZnVuY19tZl9jb25maWdbZnVuY10uCi0JCQkJCQkJCWUxaG92X3RhZykgJgotCQkJICAgICAgIEZVTkNfTUZfQ0ZHX0UxSE9WX1RBR19NQVNLKTsKLQkJCWlmICh2YWwgIT0gRlVOQ19NRl9DRkdfRTFIT1ZfVEFHX0RFRkFVTFQpIHsKLQkJCQlicC0+ZTFob3YgPSB2YWw7Ci0JCQkJQk5YMlhfREVWX0lORk8oIkUxSE9WIGZvciBmdW5jICVkIGlzICVkICIKLQkJCQkJICAgICAgICIoMHglMDR4KVxuIiwKLQkJCQkJICAgICAgIGZ1bmMsIGJwLT5lMWhvdiwgYnAtPmUxaG92KTsKLQkJCX0gZWxzZSB7Ci0JCQkJQk5YMlhfRVJST1IoIk5vIHZhbGlkIEUxSE9WIGZvciBmdW5jICVkLCIKLQkJCQkJICAgICIgIGFib3J0aW5nXG4iLCBmdW5jKTsKLQkJCQlyYyA9IC1FUEVSTTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChCUF9FMUhWTihicCkpIHsKLQkJCQlCTlgyWF9FUlJPUigiVk4gJWQgaW4gc2luZ2xlIGZ1bmN0aW9uIG1vZGUsIgotCQkJCQkgICAgIiAgYWJvcnRpbmdcbiIsIEJQX0UxSFZOKGJwKSk7Ci0JCQkJcmMgPSAtRVBFUk07Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoIUJQX05PTUNQKGJwKSkgewotCQlibngyeF9nZXRfcG9ydF9od2luZm8oYnApOwotCi0JCWJwLT5md19zZXEgPSAoU0hNRU1fUkQoYnAsIGZ1bmNfbWJbZnVuY10uZHJ2X21iX2hlYWRlcikgJgotCQkJICAgICAgRFJWX01TR19TRVFfTlVNQkVSX01BU0spOwotCQlCTlgyWF9ERVZfSU5GTygiZndfc2VxIDB4JTA4eFxuIiwgYnAtPmZ3X3NlcSk7Ci0JfQotCi0JaWYgKElTX0UxSE1GKGJwKSkgewotCQl2YWwyID0gU0hNRU1fUkQoYnAsIG1mX2NmZy5mdW5jX21mX2NvbmZpZ1tmdW5jXS5tYWNfdXBwZXIpOwotCQl2YWwgPSBTSE1FTV9SRChicCwgIG1mX2NmZy5mdW5jX21mX2NvbmZpZ1tmdW5jXS5tYWNfbG93ZXIpOwotCQlpZiAoKHZhbDIgIT0gRlVOQ19NRl9DRkdfVVBQRVJNQUNfREVGQVVMVCkgJiYKLQkJICAgICh2YWwgIT0gRlVOQ19NRl9DRkdfTE9XRVJNQUNfREVGQVVMVCkpIHsKLQkJCWJwLT5kZXYtPmRldl9hZGRyWzBdID0gKHU4KSh2YWwyID4+IDggJiAweGZmKTsKLQkJCWJwLT5kZXYtPmRldl9hZGRyWzFdID0gKHU4KSh2YWwyICYgMHhmZik7Ci0JCQlicC0+ZGV2LT5kZXZfYWRkclsyXSA9ICh1OCkodmFsID4+IDI0ICYgMHhmZik7Ci0JCQlicC0+ZGV2LT5kZXZfYWRkclszXSA9ICh1OCkodmFsID4+IDE2ICYgMHhmZik7Ci0JCQlicC0+ZGV2LT5kZXZfYWRkcls0XSA9ICh1OCkodmFsID4+IDggICYgMHhmZik7Ci0JCQlicC0+ZGV2LT5kZXZfYWRkcls1XSA9ICh1OCkodmFsICYgMHhmZik7Ci0JCQltZW1jcHkoYnAtPmxpbmtfcGFyYW1zLm1hY19hZGRyLCBicC0+ZGV2LT5kZXZfYWRkciwKLQkJCSAgICAgICBFVEhfQUxFTik7Ci0JCQltZW1jcHkoYnAtPmRldi0+cGVybV9hZGRyLCBicC0+ZGV2LT5kZXZfYWRkciwKLQkJCSAgICAgICBFVEhfQUxFTik7Ci0JCX0KLQotCQlyZXR1cm4gcmM7Ci0JfQotCi0JaWYgKEJQX05PTUNQKGJwKSkgewotCQkvKiBvbmx5IHN1cHBvc2VkIHRvIGhhcHBlbiBvbiBlbXVsYXRpb24vRlBHQSAqLwotCQlCTlgyWF9FUlJPUigid2FybmluZzogcmFuZG9tIE1BQyB3b3JrYXJvdW5kIGFjdGl2ZVxuIik7Ci0JCXJhbmRvbV9ldGhlcl9hZGRyKGJwLT5kZXYtPmRldl9hZGRyKTsKLQkJbWVtY3B5KGJwLT5kZXYtPnBlcm1fYWRkciwgYnAtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBibngyeF9yZWFkX2Z3aW5mbyhzdHJ1Y3QgYm54MnggKmJwKQotewotCWludCBjbnQsIGksIGJsb2NrX2VuZCwgcm9kaTsKLQljaGFyIHZwZF9kYXRhW0JOWDJYX1ZQRF9MRU4rMV07Ci0JY2hhciBzdHJfaWRfcmVnW1ZFTkRPUl9JRF9MRU4rMV07Ci0JY2hhciBzdHJfaWRfY2FwW1ZFTkRPUl9JRF9MRU4rMV07Ci0JdTggbGVuOwotCi0JY250ID0gcGNpX3JlYWRfdnBkKGJwLT5wZGV2LCAwLCBCTlgyWF9WUERfTEVOLCB2cGRfZGF0YSk7Ci0JbWVtc2V0KGJwLT5md192ZXIsIDAsIHNpemVvZihicC0+ZndfdmVyKSk7Ci0KLQlpZiAoY250IDwgQk5YMlhfVlBEX0xFTikKLQkJZ290byBvdXRfbm90X2ZvdW5kOwotCi0JaSA9IHBjaV92cGRfZmluZF90YWcodnBkX2RhdGEsIDAsIEJOWDJYX1ZQRF9MRU4sCi0JCQkgICAgIFBDSV9WUERfTFJEVF9ST19EQVRBKTsKLQlpZiAoaSA8IDApCi0JCWdvdG8gb3V0X25vdF9mb3VuZDsKLQotCi0JYmxvY2tfZW5kID0gaSArIFBDSV9WUERfTFJEVF9UQUdfU0laRSArCi0JCSAgICBwY2lfdnBkX2xyZHRfc2l6ZSgmdnBkX2RhdGFbaV0pOwotCi0JaSArPSBQQ0lfVlBEX0xSRFRfVEFHX1NJWkU7Ci0KLQlpZiAoYmxvY2tfZW5kID4gQk5YMlhfVlBEX0xFTikKLQkJZ290byBvdXRfbm90X2ZvdW5kOwotCi0Jcm9kaSA9IHBjaV92cGRfZmluZF9pbmZvX2tleXdvcmQodnBkX2RhdGEsIGksIGJsb2NrX2VuZCwKLQkJCQkgICBQQ0lfVlBEX1JPX0tFWVdPUkRfTUZSX0lEKTsKLQlpZiAocm9kaSA8IDApCi0JCWdvdG8gb3V0X25vdF9mb3VuZDsKLQotCWxlbiA9IHBjaV92cGRfaW5mb19maWVsZF9zaXplKCZ2cGRfZGF0YVtyb2RpXSk7Ci0KLQlpZiAobGVuICE9IFZFTkRPUl9JRF9MRU4pCi0JCWdvdG8gb3V0X25vdF9mb3VuZDsKLQotCXJvZGkgKz0gUENJX1ZQRF9JTkZPX0ZMRF9IRFJfU0laRTsKLQotCS8qIHZlbmRvciBzcGVjaWZpYyBpbmZvICovCi0Jc25wcmludGYoc3RyX2lkX3JlZywgVkVORE9SX0lEX0xFTiArIDEsICIlMDR4IiwgUENJX1ZFTkRPUl9JRF9ERUxMKTsKLQlzbnByaW50ZihzdHJfaWRfY2FwLCBWRU5ET1JfSURfTEVOICsgMSwgIiUwNFgiLCBQQ0lfVkVORE9SX0lEX0RFTEwpOwotCWlmICghc3RybmNtcChzdHJfaWRfcmVnLCAmdnBkX2RhdGFbcm9kaV0sIFZFTkRPUl9JRF9MRU4pIHx8Ci0JICAgICFzdHJuY21wKHN0cl9pZF9jYXAsICZ2cGRfZGF0YVtyb2RpXSwgVkVORE9SX0lEX0xFTikpIHsKLQotCQlyb2RpID0gcGNpX3ZwZF9maW5kX2luZm9fa2V5d29yZCh2cGRfZGF0YSwgaSwgYmxvY2tfZW5kLAotCQkJCQkJUENJX1ZQRF9ST19LRVlXT1JEX1ZFTkRPUjApOwotCQlpZiAocm9kaSA+PSAwKSB7Ci0JCQlsZW4gPSBwY2lfdnBkX2luZm9fZmllbGRfc2l6ZSgmdnBkX2RhdGFbcm9kaV0pOwotCi0JCQlyb2RpICs9IFBDSV9WUERfSU5GT19GTERfSERSX1NJWkU7Ci0KLQkJCWlmIChsZW4gPCAzMiAmJiAobGVuICsgcm9kaSkgPD0gQk5YMlhfVlBEX0xFTikgewotCQkJCW1lbWNweShicC0+ZndfdmVyLCAmdnBkX2RhdGFbcm9kaV0sIGxlbik7Ci0JCQkJYnAtPmZ3X3ZlcltsZW5dID0gJyAnOwotCQkJfQotCQl9Ci0JCXJldHVybjsKLQl9Ci1vdXRfbm90X2ZvdW5kOgotCXJldHVybjsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgYm54MnhfaW5pdF9icChzdHJ1Y3QgYm54MnggKmJwKQotewotCWludCBmdW5jID0gQlBfRlVOQyhicCk7Ci0JaW50IHRpbWVyX2ludGVydmFsOwotCWludCByYzsKLQotCS8qIERpc2FibGUgaW50ZXJydXB0IGhhbmRsaW5nIHVudGlsIEhXIGlzIGluaXRpYWxpemVkICovCi0JYXRvbWljX3NldCgmYnAtPmludHJfc2VtLCAxKTsKLQlzbXBfd21iKCk7IC8qIEVuc3VyZSB0aGF0IGJwLT5pbnRyX3NlbSB1cGRhdGUgaXMgU01QLXNhZmUgKi8KLQotCW11dGV4X2luaXQoJmJwLT5wb3J0LnBoeV9tdXRleCk7Ci0JbXV0ZXhfaW5pdCgmYnAtPmZ3X21iX211dGV4KTsKLSNpZmRlZiBCQ01fQ05JQwotCW11dGV4X2luaXQoJmJwLT5jbmljX211dGV4KTsKLSNlbmRpZgotCi0JSU5JVF9ERUxBWUVEX1dPUksoJmJwLT5zcF90YXNrLCBibngyeF9zcF90YXNrKTsKLQlJTklUX0RFTEFZRURfV09SSygmYnAtPnJlc2V0X3Rhc2ssIGJueDJ4X3Jlc2V0X3Rhc2spOwotCi0JcmMgPSBibngyeF9nZXRfaHdpbmZvKGJwKTsKLQotCWJueDJ4X3JlYWRfZndpbmZvKGJwKTsKLQkvKiBuZWVkIHRvIHJlc2V0IGNoaXAgaWYgdW5kaSB3YXMgYWN0aXZlICovCi0JaWYgKCFCUF9OT01DUChicCkpCi0JCWJueDJ4X3VuZGlfdW5sb2FkKGJwKTsKLQotCWlmIChDSElQX1JFVl9JU19GUEdBKGJwKSkKLQkJZGV2X2VycigmYnAtPnBkZXYtPmRldiwgIkZQR0EgZGV0ZWN0ZWRcbiIpOwotCi0JaWYgKEJQX05PTUNQKGJwKSAmJiAoZnVuYyA9PSAwKSkKLQkJZGV2X2VycigmYnAtPnBkZXYtPmRldiwgIk1DUCBkaXNhYmxlZCwgIgotCQkJCQkibXVzdCBsb2FkIGRldmljZXMgaW4gb3JkZXIhXG4iKTsKLQotCS8qIFNldCBtdWx0aSBxdWV1ZSBtb2RlICovCi0JaWYgKChtdWx0aV9tb2RlICE9IEVUSF9SU1NfTU9ERV9ESVNBQkxFRCkgJiYKLQkgICAgKChpbnRfbW9kZSA9PSBJTlRfTU9ERV9JTlR4KSB8fCAoaW50X21vZGUgPT0gSU5UX01PREVfTVNJKSkpIHsKLQkJZGV2X2VycigmYnAtPnBkZXYtPmRldiwgIk11bHRpIGRpc2FibGVkIHNpbmNlIGludF9tb2RlICIKLQkJCQkJInJlcXVlc3RlZCBpcyBub3QgTVNJLVhcbiIpOwotCQltdWx0aV9tb2RlID0gRVRIX1JTU19NT0RFX0RJU0FCTEVEOwotCX0KLQlicC0+bXVsdGlfbW9kZSA9IG11bHRpX21vZGU7Ci0KLQotCWJwLT5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPOwotCi0JLyogU2V0IFRQQSBmbGFncyAqLwotCWlmIChkaXNhYmxlX3RwYSkgewotCQlicC0+ZmxhZ3MgJj0gflRQQV9FTkFCTEVfRkxBRzsKLQkJYnAtPmRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfTFJPOwotCX0gZWxzZSB7Ci0JCWJwLT5mbGFncyB8PSBUUEFfRU5BQkxFX0ZMQUc7Ci0JCWJwLT5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOwotCX0KLQotCWlmIChDSElQX0lTX0UxKGJwKSkKLQkJYnAtPmRyb3BsZXNzX2ZjID0gMDsKLQllbHNlCi0JCWJwLT5kcm9wbGVzc19mYyA9IGRyb3BsZXNzX2ZjOwotCi0JYnAtPm1ycnMgPSBtcnJzOwotCi0JYnAtPnR4X3Jpbmdfc2l6ZSA9IE1BWF9UWF9BVkFJTDsKLQlicC0+cnhfcmluZ19zaXplID0gTUFYX1JYX0FWQUlMOwotCi0JYnAtPnJ4X2NzdW0gPSAxOwotCi0JLyogbWFrZSBzdXJlIHRoYXQgdGhlIG51bWJlcnMgYXJlIGluIHRoZSByaWdodCBncmFudWxhcml0eSAqLwotCWJwLT50eF90aWNrcyA9ICg1MCAvICg0ICogQk5YMlhfQlRSKSkgKiAoNCAqIEJOWDJYX0JUUik7Ci0JYnAtPnJ4X3RpY2tzID0gKDI1IC8gKDQgKiBCTlgyWF9CVFIpKSAqICg0ICogQk5YMlhfQlRSKTsKLQotCXRpbWVyX2ludGVydmFsID0gKENISVBfUkVWX0lTX1NMT1coYnApID8gNSpIWiA6IEhaKTsKLQlicC0+Y3VycmVudF9pbnRlcnZhbCA9IChwb2xsID8gcG9sbCA6IHRpbWVyX2ludGVydmFsKTsKLQotCWluaXRfdGltZXIoJmJwLT50aW1lcik7Ci0JYnAtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgYnAtPmN1cnJlbnRfaW50ZXJ2YWw7Ci0JYnAtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYnA7Ci0JYnAtPnRpbWVyLmZ1bmN0aW9uID0gYm54MnhfdGltZXI7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qCi0gKiBldGh0b29sIHNlcnZpY2UgZnVuY3Rpb25zCi0gKi8KLQotLyogQWxsIGV0aHRvb2wgZnVuY3Rpb25zIGNhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLwotCi1zdGF0aWMgaW50IGJueDJ4X2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWNtZC0+c3VwcG9ydGVkID0gYnAtPnBvcnQuc3VwcG9ydGVkOwotCWNtZC0+YWR2ZXJ0aXNpbmcgPSBicC0+cG9ydC5hZHZlcnRpc2luZzsKLQotCWlmICgoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX09QRU4pICYmCi0JICAgICEoYnAtPmZsYWdzICYgTUZfRlVOQ19ESVMpICYmCi0JICAgIChicC0+bGlua192YXJzLmxpbmtfdXApKSB7Ci0JCWNtZC0+c3BlZWQgPSBicC0+bGlua192YXJzLmxpbmVfc3BlZWQ7Ci0JCWNtZC0+ZHVwbGV4ID0gYnAtPmxpbmtfdmFycy5kdXBsZXg7Ci0JCWlmIChJU19FMUhNRihicCkpIHsKLQkJCXUxNiB2bl9tYXhfcmF0ZTsKLQotCQkJdm5fbWF4X3JhdGUgPQotCQkJCSgoYnAtPm1mX2NvbmZpZyAmIEZVTkNfTUZfQ0ZHX01BWF9CV19NQVNLKSA+PgotCQkJCUZVTkNfTUZfQ0ZHX01BWF9CV19TSElGVCkgKiAxMDA7Ci0JCQlpZiAodm5fbWF4X3JhdGUgPCBjbWQtPnNwZWVkKQotCQkJCWNtZC0+c3BlZWQgPSB2bl9tYXhfcmF0ZTsKLQkJfQotCX0gZWxzZSB7Ci0JCWNtZC0+c3BlZWQgPSAtMTsKLQkJY21kLT5kdXBsZXggPSAtMTsKLQl9Ci0KLQlpZiAoYnAtPmxpbmtfcGFyYW1zLnN3aXRjaF9jZmcgPT0gU1dJVENIX0NGR18xMEcpIHsKLQkJdTMyIGV4dF9waHlfdHlwZSA9Ci0JCQlYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOwotCi0JCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7Ci0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUOgotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6Ci0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MzoKLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1OgotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDY6Ci0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3OgotCQkJY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxOgotCQkJY21kLT5wb3J0ID0gUE9SVF9UUDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRkFJTFVSRToKLQkJCUJOWDJYX0VSUigiWEdYUyBQSFkgRmFpbHVyZSBkZXRlY3RlZCAweCV4XG4iLAotCQkJCSAgYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIkJBRCBYR1hTIGV4dF9waHlfY29uZmlnIDB4JXhcbiIsCi0JCQkgICBicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOwotCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2UKLQkJY21kLT5wb3J0ID0gUE9SVF9UUDsKLQotCWNtZC0+cGh5X2FkZHJlc3MgPSBicC0+bWRpby5wcnRhZDsKLQljbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKLQotCWlmIChicC0+bGlua19wYXJhbXMucmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfQVVUT19ORUcpCi0JCWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOwotCWVsc2UKLQkJY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwotCi0JY21kLT5tYXh0eHBrdCA9IDA7Ci0JY21kLT5tYXhyeHBrdCA9IDA7Ci0KLQlEUChORVRJRl9NU0dfTElOSywgImV0aHRvb2xfY21kOiBjbWQgJWRcbiIKLQkgICBEUF9MRVZFTCAiICBzdXBwb3J0ZWQgMHgleCAgYWR2ZXJ0aXNpbmcgMHgleCAgc3BlZWQgJWRcbiIKLQkgICBEUF9MRVZFTCAiICBkdXBsZXggJWQgIHBvcnQgJWQgIHBoeV9hZGRyZXNzICVkICB0cmFuc2NlaXZlciAlZFxuIgotCSAgIERQX0xFVkVMICIgIGF1dG9uZWcgJWQgIG1heHR4cGt0ICVkICBtYXhyeHBrdCAlZFxuIiwKLQkgICBjbWQtPmNtZCwgY21kLT5zdXBwb3J0ZWQsIGNtZC0+YWR2ZXJ0aXNpbmcsIGNtZC0+c3BlZWQsCi0JICAgY21kLT5kdXBsZXgsIGNtZC0+cG9ydCwgY21kLT5waHlfYWRkcmVzcywgY21kLT50cmFuc2NlaXZlciwKLQkgICBjbWQtPmF1dG9uZWcsIGNtZC0+bWF4dHhwa3QsIGNtZC0+bWF4cnhwa3QpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYm54Mnhfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXUzMiBhZHZlcnRpc2luZzsKLQotCWlmIChJU19FMUhNRihicCkpCi0JCXJldHVybiAwOwotCi0JRFAoTkVUSUZfTVNHX0xJTkssICJldGh0b29sX2NtZDogY21kICVkXG4iCi0JICAgRFBfTEVWRUwgIiAgc3VwcG9ydGVkIDB4JXggIGFkdmVydGlzaW5nIDB4JXggIHNwZWVkICVkXG4iCi0JICAgRFBfTEVWRUwgIiAgZHVwbGV4ICVkICBwb3J0ICVkICBwaHlfYWRkcmVzcyAlZCAgdHJhbnNjZWl2ZXIgJWRcbiIKLQkgICBEUF9MRVZFTCAiICBhdXRvbmVnICVkICBtYXh0eHBrdCAlZCAgbWF4cnhwa3QgJWRcbiIsCi0JICAgY21kLT5jbWQsIGNtZC0+c3VwcG9ydGVkLCBjbWQtPmFkdmVydGlzaW5nLCBjbWQtPnNwZWVkLAotCSAgIGNtZC0+ZHVwbGV4LCBjbWQtPnBvcnQsIGNtZC0+cGh5X2FkZHJlc3MsIGNtZC0+dHJhbnNjZWl2ZXIsCi0JICAgY21kLT5hdXRvbmVnLCBjbWQtPm1heHR4cGt0LCBjbWQtPm1heHJ4cGt0KTsKLQotCWlmIChjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHsKLQkJaWYgKCEoYnAtPnBvcnQuc3VwcG9ydGVkICYgU1VQUE9SVEVEX0F1dG9uZWcpKSB7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIkF1dG9uZWcgbm90IHN1cHBvcnRlZFxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCS8qIGFkdmVydGlzZSB0aGUgcmVxdWVzdGVkIHNwZWVkIGFuZCBkdXBsZXggaWYgc3VwcG9ydGVkICovCi0JCWNtZC0+YWR2ZXJ0aXNpbmcgJj0gYnAtPnBvcnQuc3VwcG9ydGVkOwotCi0JCWJwLT5saW5rX3BhcmFtcy5yZXFfbGluZV9zcGVlZCA9IFNQRUVEX0FVVE9fTkVHOwotCQlicC0+bGlua19wYXJhbXMucmVxX2R1cGxleCA9IERVUExFWF9GVUxMOwotCQlicC0+cG9ydC5hZHZlcnRpc2luZyB8PSAoQURWRVJUSVNFRF9BdXRvbmVnIHwKLQkJCQkJIGNtZC0+YWR2ZXJ0aXNpbmcpOwotCi0JfSBlbHNlIHsgLyogZm9yY2VkIHNwZWVkICovCi0JCS8qIGFkdmVydGlzZSB0aGUgcmVxdWVzdGVkIHNwZWVkIGFuZCBkdXBsZXggaWYgc3VwcG9ydGVkICovCi0JCXN3aXRjaCAoY21kLT5zcGVlZCkgewotCQljYXNlIFNQRUVEXzEwOgotCQkJaWYgKGNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKSB7Ci0JCQkJaWYgKCEoYnAtPnBvcnQuc3VwcG9ydGVkICYKLQkJCQkgICAgICBTVVBQT1JURURfMTBiYXNlVF9GdWxsKSkgewotCQkJCQlEUChORVRJRl9NU0dfTElOSywKLQkJCQkJICAgIjEwTSBmdWxsIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCQl9Ci0KLQkJCQlhZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgICAgICBBRFZFUlRJU0VEX1RQKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKCEoYnAtPnBvcnQuc3VwcG9ydGVkICYKLQkJCQkgICAgICBTVVBQT1JURURfMTBiYXNlVF9IYWxmKSkgewotCQkJCQlEUChORVRJRl9NU0dfTElOSywKLQkJCQkJICAgIjEwTSBoYWxmIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCQl9Ci0KLQkJCQlhZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZiB8Ci0JCQkJCSAgICAgICBBRFZFUlRJU0VEX1RQKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgU1BFRURfMTAwOgotCQkJaWYgKGNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKSB7Ci0JCQkJaWYgKCEoYnAtPnBvcnQuc3VwcG9ydGVkICYKLQkJCQkJCVNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsKSkgewotCQkJCQlEUChORVRJRl9NU0dfTElOSywKLQkJCQkJICAgIjEwME0gZnVsbCBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkJfQotCi0JCQkJYWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsIHwKLQkJCQkJICAgICAgIEFEVkVSVElTRURfVFApOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoIShicC0+cG9ydC5zdXBwb3J0ZWQgJgotCQkJCQkJU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYpKSB7Ci0JCQkJCURQKE5FVElGX01TR19MSU5LLAotCQkJCQkgICAiMTAwTSBoYWxmIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCQl9Ci0KLQkJCQlhZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgfAotCQkJCQkgICAgICAgQURWRVJUSVNFRF9UUCk7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQljYXNlIFNQRUVEXzEwMDA6Ci0JCQlpZiAoY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpIHsKLQkJCQlEUChORVRJRl9NU0dfTElOSywgIjFHIGhhbGYgbm90IHN1cHBvcnRlZFxuIik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0KLQkJCWlmICghKGJwLT5wb3J0LnN1cHBvcnRlZCAmIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCkpIHsKLQkJCQlEUChORVRJRl9NU0dfTElOSywgIjFHIGZ1bGwgbm90IHN1cHBvcnRlZFxuIik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0KLQkJCWFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwgfAotCQkJCSAgICAgICBBRFZFUlRJU0VEX1RQKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgU1BFRURfMjUwMDoKLQkJCWlmIChjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkgewotCQkJCURQKE5FVElGX01TR19MSU5LLAotCQkJCSAgICIyLjVHIGhhbGYgbm90IHN1cHBvcnRlZFxuIik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0KLQkJCWlmICghKGJwLT5wb3J0LnN1cHBvcnRlZCAmIFNVUFBPUlRFRF8yNTAwYmFzZVhfRnVsbCkpIHsKLQkJCQlEUChORVRJRl9NU0dfTElOSywKLQkJCQkgICAiMi41RyBmdWxsIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCi0JCQlhZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzI1MDBiYXNlWF9GdWxsIHwKLQkJCQkgICAgICAgQURWRVJUSVNFRF9UUCk7Ci0JCQlicmVhazsKLQotCQljYXNlIFNQRUVEXzEwMDAwOgotCQkJaWYgKGNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKSB7Ci0JCQkJRFAoTkVUSUZfTVNHX0xJTkssICIxMEcgaGFsZiBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJaWYgKCEoYnAtPnBvcnQuc3VwcG9ydGVkICYgU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCkpIHsKLQkJCQlEUChORVRJRl9NU0dfTElOSywgIjEwRyBmdWxsIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCi0JCQlhZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCB8Ci0JCQkJICAgICAgIEFEVkVSVElTRURfRklCUkUpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiVW5zdXBwb3J0ZWQgc3BlZWRcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlicC0+bGlua19wYXJhbXMucmVxX2xpbmVfc3BlZWQgPSBjbWQtPnNwZWVkOwotCQlicC0+bGlua19wYXJhbXMucmVxX2R1cGxleCA9IGNtZC0+ZHVwbGV4OwotCQlicC0+cG9ydC5hZHZlcnRpc2luZyA9IGFkdmVydGlzaW5nOwotCX0KLQotCURQKE5FVElGX01TR19MSU5LLCAicmVxX2xpbmVfc3BlZWQgJWRcbiIKLQkgICBEUF9MRVZFTCAiICByZXFfZHVwbGV4ICVkICBhZHZlcnRpc2luZyAweCV4XG4iLAotCSAgIGJwLT5saW5rX3BhcmFtcy5yZXFfbGluZV9zcGVlZCwgYnAtPmxpbmtfcGFyYW1zLnJlcV9kdXBsZXgsCi0JICAgYnAtPnBvcnQuYWR2ZXJ0aXNpbmcpOwotCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQlibngyeF9zdGF0c19oYW5kbGUoYnAsIFNUQVRTX0VWRU5UX1NUT1ApOwotCQlibngyeF9saW5rX3NldChicCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgSVNfRTFfT05MSU5FKGluZm8pCSgoKGluZm8pICYgUklfRTFfT05MSU5FKSA9PSBSSV9FMV9PTkxJTkUpCi0jZGVmaW5lIElTX0UxSF9PTkxJTkUoaW5mbykJKCgoaW5mbykgJiBSSV9FMUhfT05MSU5FKSA9PSBSSV9FMUhfT05MSU5FKQotCi1zdGF0aWMgaW50IGJueDJ4X2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCByZWdkdW1wX2xlbiA9IDA7Ci0JaW50IGk7Ci0KLQlpZiAoQ0hJUF9JU19FMShicCkpIHsKLQkJZm9yIChpID0gMDsgaSA8IFJFR1NfQ09VTlQ7IGkrKykKLQkJCWlmIChJU19FMV9PTkxJTkUocmVnX2FkZHJzW2ldLmluZm8pKQotCQkJCXJlZ2R1bXBfbGVuICs9IHJlZ19hZGRyc1tpXS5zaXplOwotCi0JCWZvciAoaSA9IDA7IGkgPCBXUkVHU19DT1VOVF9FMTsgaSsrKQotCQkJaWYgKElTX0UxX09OTElORSh3cmVnX2FkZHJzX2UxW2ldLmluZm8pKQotCQkJCXJlZ2R1bXBfbGVuICs9IHdyZWdfYWRkcnNfZTFbaV0uc2l6ZSAqCi0JCQkJCSgxICsgd3JlZ19hZGRyc19lMVtpXS5yZWFkX3JlZ3NfY291bnQpOwotCi0JfSBlbHNlIHsgLyogRTFIICovCi0JCWZvciAoaSA9IDA7IGkgPCBSRUdTX0NPVU5UOyBpKyspCi0JCQlpZiAoSVNfRTFIX09OTElORShyZWdfYWRkcnNbaV0uaW5mbykpCi0JCQkJcmVnZHVtcF9sZW4gKz0gcmVnX2FkZHJzW2ldLnNpemU7Ci0KLQkJZm9yIChpID0gMDsgaSA8IFdSRUdTX0NPVU5UX0UxSDsgaSsrKQotCQkJaWYgKElTX0UxSF9PTkxJTkUod3JlZ19hZGRyc19lMWhbaV0uaW5mbykpCi0JCQkJcmVnZHVtcF9sZW4gKz0gd3JlZ19hZGRyc19lMWhbaV0uc2l6ZSAqCi0JCQkJCSgxICsgd3JlZ19hZGRyc19lMWhbaV0ucmVhZF9yZWdzX2NvdW50KTsKLQl9Ci0JcmVnZHVtcF9sZW4gKj0gNDsKLQlyZWdkdW1wX2xlbiArPSBzaXplb2Yoc3RydWN0IGR1bXBfaGRyKTsKLQotCXJldHVybiByZWdkdW1wX2xlbjsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsIHZvaWQgKl9wKQotewotCXUzMiAqcCA9IF9wLCBpLCBqOwotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBkdW1wX2hkciBkdW1wX2hkciA9IHswfTsKLQotCXJlZ3MtPnZlcnNpb24gPSAwOwotCW1lbXNldChwLCAwLCByZWdzLT5sZW4pOwotCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGJwLT5kZXYpKQotCQlyZXR1cm47Ci0KLQlkdW1wX2hkci5oZHJfc2l6ZSA9IChzaXplb2Yoc3RydWN0IGR1bXBfaGRyKSAvIDQpIC0gMTsKLQlkdW1wX2hkci5kdW1wX3NpZ24gPSBkdW1wX3NpZ25fYWxsOwotCWR1bXBfaGRyLnhzdG9ybV93YWl0cCA9IFJFR19SRChicCwgWFNUT1JNX1dBSVRQX0FERFIpOwotCWR1bXBfaGRyLnRzdG9ybV93YWl0cCA9IFJFR19SRChicCwgVFNUT1JNX1dBSVRQX0FERFIpOwotCWR1bXBfaGRyLnVzdG9ybV93YWl0cCA9IFJFR19SRChicCwgVVNUT1JNX1dBSVRQX0FERFIpOwotCWR1bXBfaGRyLmNzdG9ybV93YWl0cCA9IFJFR19SRChicCwgQ1NUT1JNX1dBSVRQX0FERFIpOwotCWR1bXBfaGRyLmluZm8gPSBDSElQX0lTX0UxKGJwKSA/IFJJX0UxX09OTElORSA6IFJJX0UxSF9PTkxJTkU7Ci0KLQltZW1jcHkocCwgJmR1bXBfaGRyLCBzaXplb2Yoc3RydWN0IGR1bXBfaGRyKSk7Ci0JcCArPSBkdW1wX2hkci5oZHJfc2l6ZSArIDE7Ci0KLQlpZiAoQ0hJUF9JU19FMShicCkpIHsKLQkJZm9yIChpID0gMDsgaSA8IFJFR1NfQ09VTlQ7IGkrKykKLQkJCWlmIChJU19FMV9PTkxJTkUocmVnX2FkZHJzW2ldLmluZm8pKQotCQkJCWZvciAoaiA9IDA7IGogPCByZWdfYWRkcnNbaV0uc2l6ZTsgaisrKQotCQkJCQkqcCsrID0gUkVHX1JEKGJwLAotCQkJCQkJICAgICAgcmVnX2FkZHJzW2ldLmFkZHIgKyBqKjQpOwotCi0JfSBlbHNlIHsgLyogRTFIICovCi0JCWZvciAoaSA9IDA7IGkgPCBSRUdTX0NPVU5UOyBpKyspCi0JCQlpZiAoSVNfRTFIX09OTElORShyZWdfYWRkcnNbaV0uaW5mbykpCi0JCQkJZm9yIChqID0gMDsgaiA8IHJlZ19hZGRyc1tpXS5zaXplOyBqKyspCi0JCQkJCSpwKysgPSBSRUdfUkQoYnAsCi0JCQkJCQkgICAgICByZWdfYWRkcnNbaV0uYWRkciArIGoqNCk7Ci0JfQotfQotCi0jZGVmaW5lIFBIWV9GV19WRVJfTEVOCQkJMTAKLQotc3RhdGljIHZvaWQgYm54MnhfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0JdTggcGh5X2Z3X3ZlcltQSFlfRldfVkVSX0xFTl07Ci0KLQlzdHJjcHkoaW5mby0+ZHJpdmVyLCBEUlZfTU9EVUxFX05BTUUpOwotCXN0cmNweShpbmZvLT52ZXJzaW9uLCBEUlZfTU9EVUxFX1ZFUlNJT04pOwotCi0JcGh5X2Z3X3ZlclswXSA9ICdcMCc7Ci0JaWYgKGJwLT5wb3J0LnBtZikgewotCQlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKLQkJYm54MnhfZ2V0X2V4dF9waHlfZndfdmVyc2lvbigmYnAtPmxpbmtfcGFyYW1zLAotCQkJCQkgICAgIChicC0+c3RhdGUgIT0gQk5YMlhfU1RBVEVfQ0xPU0VEKSwKLQkJCQkJICAgICBwaHlfZndfdmVyLCBQSFlfRldfVkVSX0xFTik7Ci0JCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOwotCX0KLQotCXN0cm5jcHkoaW5mby0+ZndfdmVyc2lvbiwgYnAtPmZ3X3ZlciwgMzIpOwotCXNucHJpbnRmKGluZm8tPmZ3X3ZlcnNpb24gKyBzdHJsZW4oYnAtPmZ3X3ZlciksIDMyIC0gc3RybGVuKGJwLT5md192ZXIpLAotCQkgImJjICVkLiVkLiVkJXMlcyIsCi0JCSAoYnAtPmNvbW1vbi5iY192ZXIgJiAweGZmMDAwMCkgPj4gMTYsCi0JCSAoYnAtPmNvbW1vbi5iY192ZXIgJiAweGZmMDApID4+IDgsCi0JCSAoYnAtPmNvbW1vbi5iY192ZXIgJiAweGZmKSwKLQkJICgocGh5X2Z3X3ZlclswXSAhPSAnXDAnKSA/ICIgcGh5ICIgOiAiIiksIHBoeV9md192ZXIpOwotCXN0cmNweShpbmZvLT5idXNfaW5mbywgcGNpX25hbWUoYnAtPnBkZXYpKTsKLQlpbmZvLT5uX3N0YXRzID0gQk5YMlhfTlVNX1NUQVRTOwotCWluZm8tPnRlc3RpbmZvX2xlbiA9IEJOWDJYX05VTV9URVNUUzsKLQlpbmZvLT5lZWR1bXBfbGVuID0gYnAtPmNvbW1vbi5mbGFzaF9zaXplOwotCWluZm8tPnJlZ2R1bXBfbGVuID0gYm54MnhfZ2V0X3JlZ3NfbGVuKGRldik7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKGJwLT5mbGFncyAmIE5PX1dPTF9GTEFHKSB7Ci0JCXdvbC0+c3VwcG9ydGVkID0gMDsKLQkJd29sLT53b2xvcHRzID0gMDsKLQl9IGVsc2UgewotCQl3b2wtPnN1cHBvcnRlZCA9IFdBS0VfTUFHSUM7Ci0JCWlmIChicC0+d29sKQotCQkJd29sLT53b2xvcHRzID0gV0FLRV9NQUdJQzsKLQkJZWxzZQotCQkJd29sLT53b2xvcHRzID0gMDsKLQl9Ci0JbWVtc2V0KCZ3b2wtPnNvcGFzcywgMCwgc2l6ZW9mKHdvbC0+c29wYXNzKSk7Ci19Ci0KLXN0YXRpYyBpbnQgYm54Mnhfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAod29sLT53b2xvcHRzICYgfldBS0VfTUFHSUMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfTUFHSUMpIHsKLQkJaWYgKGJwLT5mbGFncyAmIE5PX1dPTF9GTEFHKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJYnAtPndvbCA9IDE7Ci0JfSBlbHNlCi0JCWJwLT53b2wgPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1MzIgYm54MnhfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlyZXR1cm4gYnAtPm1zZ19lbmFibGU7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X3NldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgbGV2ZWwpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJYnAtPm1zZ19lbmFibGUgPSBsZXZlbDsKLX0KLQotc3RhdGljIGludCBibngyeF9ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoIWJwLT5wb3J0LnBtZikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7Ci0JCWJueDJ4X3N0YXRzX2hhbmRsZShicCwgU1RBVFNfRVZFTlRfU1RPUCk7Ci0JCWJueDJ4X2xpbmtfc2V0KGJwKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHUzMiBibngyeF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKGJwLT5mbGFncyAmIE1GX0ZVTkNfRElTKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBicC0+bGlua192YXJzLmxpbmtfdXA7Ci19Ci0KLXN0YXRpYyBpbnQgYm54MnhfZ2V0X2VlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybiBicC0+Y29tbW9uLmZsYXNoX3NpemU7Ci19Ci0KLXN0YXRpYyBpbnQgYm54MnhfYWNxdWlyZV9udnJhbV9sb2NrKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKLQlpbnQgY291bnQsIGk7Ci0JdTMyIHZhbCA9IDA7Ci0KLQkvKiBhZGp1c3QgdGltZW91dCBmb3IgZW11bGF0aW9uL0ZQR0EgKi8KLQljb3VudCA9IE5WUkFNX1RJTUVPVVRfQ09VTlQ7Ci0JaWYgKENISVBfUkVWX0lTX1NMT1coYnApKQotCQljb3VudCAqPSAxMDA7Ci0KLQkvKiByZXF1ZXN0IGFjY2VzcyB0byBudnJhbSBpbnRlcmZhY2UgKi8KLQlSRUdfV1IoYnAsIE1DUF9SRUdfTUNQUl9OVk1fU1dfQVJCLAotCSAgICAgICAoTUNQUl9OVk1fU1dfQVJCX0FSQl9SRVFfU0VUMSA8PCBwb3J0KSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQqMTA7IGkrKykgewotCQl2YWwgPSBSRUdfUkQoYnAsIE1DUF9SRUdfTUNQUl9OVk1fU1dfQVJCKTsKLQkJaWYgKHZhbCAmIChNQ1BSX05WTV9TV19BUkJfQVJCX0FSQjEgPDwgcG9ydCkpCi0JCQlicmVhazsKLQotCQl1ZGVsYXkoNSk7Ci0JfQotCi0JaWYgKCEodmFsICYgKE1DUFJfTlZNX1NXX0FSQl9BUkJfQVJCMSA8PCBwb3J0KSkpIHsKLQkJRFAoQk5YMlhfTVNHX05WTSwgImNhbm5vdCBnZXQgYWNjZXNzIHRvIG52cmFtIGludGVyZmFjZVxuIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYm54MnhfcmVsZWFzZV9udnJhbV9sb2NrKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKLQlpbnQgY291bnQsIGk7Ci0JdTMyIHZhbCA9IDA7Ci0KLQkvKiBhZGp1c3QgdGltZW91dCBmb3IgZW11bGF0aW9uL0ZQR0EgKi8KLQljb3VudCA9IE5WUkFNX1RJTUVPVVRfQ09VTlQ7Ci0JaWYgKENISVBfUkVWX0lTX1NMT1coYnApKQotCQljb3VudCAqPSAxMDA7Ci0KLQkvKiByZWxpbnF1aXNoIG52cmFtIGludGVyZmFjZSAqLwotCVJFR19XUihicCwgTUNQX1JFR19NQ1BSX05WTV9TV19BUkIsCi0JICAgICAgIChNQ1BSX05WTV9TV19BUkJfQVJCX1JFUV9DTFIxIDw8IHBvcnQpKTsKLQotCWZvciAoaSA9IDA7IGkgPCBjb3VudCoxMDsgaSsrKSB7Ci0JCXZhbCA9IFJFR19SRChicCwgTUNQX1JFR19NQ1BSX05WTV9TV19BUkIpOwotCQlpZiAoISh2YWwgJiAoTUNQUl9OVk1fU1dfQVJCX0FSQl9BUkIxIDw8IHBvcnQpKSkKLQkJCWJyZWFrOwotCi0JCXVkZWxheSg1KTsKLQl9Ci0KLQlpZiAodmFsICYgKE1DUFJfTlZNX1NXX0FSQl9BUkJfQVJCMSA8PCBwb3J0KSkgewotCQlEUChCTlgyWF9NU0dfTlZNLCAiY2Fubm90IGZyZWUgYWNjZXNzIHRvIG52cmFtIGludGVyZmFjZVxuIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2VuYWJsZV9udnJhbV9hY2Nlc3Moc3RydWN0IGJueDJ4ICpicCkKLXsKLQl1MzIgdmFsOwotCi0JdmFsID0gUkVHX1JEKGJwLCBNQ1BfUkVHX01DUFJfTlZNX0FDQ0VTU19FTkFCTEUpOwotCi0JLyogZW5hYmxlIGJvdGggYml0cywgZXZlbiBvbiByZWFkICovCi0JUkVHX1dSKGJwLCBNQ1BfUkVHX01DUFJfTlZNX0FDQ0VTU19FTkFCTEUsCi0JICAgICAgICh2YWwgfCBNQ1BSX05WTV9BQ0NFU1NfRU5BQkxFX0VOIHwKLQkJICAgICAgTUNQUl9OVk1fQUNDRVNTX0VOQUJMRV9XUl9FTikpOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9kaXNhYmxlX252cmFtX2FjY2VzcyhzdHJ1Y3QgYm54MnggKmJwKQotewotCXUzMiB2YWw7Ci0KLQl2YWwgPSBSRUdfUkQoYnAsIE1DUF9SRUdfTUNQUl9OVk1fQUNDRVNTX0VOQUJMRSk7Ci0KLQkvKiBkaXNhYmxlIGJvdGggYml0cywgZXZlbiBhZnRlciByZWFkICovCi0JUkVHX1dSKGJwLCBNQ1BfUkVHX01DUFJfTlZNX0FDQ0VTU19FTkFCTEUsCi0JICAgICAgICh2YWwgJiB+KE1DUFJfTlZNX0FDQ0VTU19FTkFCTEVfRU4gfAotCQkJTUNQUl9OVk1fQUNDRVNTX0VOQUJMRV9XUl9FTikpKTsKLX0KLQotc3RhdGljIGludCBibngyeF9udnJhbV9yZWFkX2R3b3JkKHN0cnVjdCBibngyeCAqYnAsIHUzMiBvZmZzZXQsIF9fYmUzMiAqcmV0X3ZhbCwKLQkJCQkgIHUzMiBjbWRfZmxhZ3MpCi17Ci0JaW50IGNvdW50LCBpLCByYzsKLQl1MzIgdmFsOwotCi0JLyogYnVpbGQgdGhlIGNvbW1hbmQgd29yZCAqLwotCWNtZF9mbGFncyB8PSBNQ1BSX05WTV9DT01NQU5EX0RPSVQ7Ci0KLQkvKiBuZWVkIHRvIGNsZWFyIERPTkUgYml0IHNlcGFyYXRlbHkgKi8KLQlSRUdfV1IoYnAsIE1DUF9SRUdfTUNQUl9OVk1fQ09NTUFORCwgTUNQUl9OVk1fQ09NTUFORF9ET05FKTsKLQotCS8qIGFkZHJlc3Mgb2YgdGhlIE5WUkFNIHRvIHJlYWQgZnJvbSAqLwotCVJFR19XUihicCwgTUNQX1JFR19NQ1BSX05WTV9BRERSLAotCSAgICAgICAob2Zmc2V0ICYgTUNQUl9OVk1fQUREUl9OVk1fQUREUl9WQUxVRSkpOwotCi0JLyogaXNzdWUgYSByZWFkIGNvbW1hbmQgKi8KLQlSRUdfV1IoYnAsIE1DUF9SRUdfTUNQUl9OVk1fQ09NTUFORCwgY21kX2ZsYWdzKTsKLQotCS8qIGFkanVzdCB0aW1lb3V0IGZvciBlbXVsYXRpb24vRlBHQSAqLwotCWNvdW50ID0gTlZSQU1fVElNRU9VVF9DT1VOVDsKLQlpZiAoQ0hJUF9SRVZfSVNfU0xPVyhicCkpCi0JCWNvdW50ICo9IDEwMDsKLQotCS8qIHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KLQkqcmV0X3ZhbCA9IDA7Ci0JcmMgPSAtRUJVU1k7Ci0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJdWRlbGF5KDUpOwotCQl2YWwgPSBSRUdfUkQoYnAsIE1DUF9SRUdfTUNQUl9OVk1fQ09NTUFORCk7Ci0KLQkJaWYgKHZhbCAmIE1DUFJfTlZNX0NPTU1BTkRfRE9ORSkgewotCQkJdmFsID0gUkVHX1JEKGJwLCBNQ1BfUkVHX01DUFJfTlZNX1JFQUQpOwotCQkJLyogd2UgcmVhZCBudnJhbSBkYXRhIGluIGNwdSBvcmRlcgotCQkJICogYnV0IGV0aHRvb2wgc2VlcyBpdCBhcyBhbiBhcnJheSBvZiBieXRlcwotCQkJICogY29udmVydGluZyB0byBiaWctZW5kaWFuIHdpbGwgZG8gdGhlIHdvcmsgKi8KLQkJCSpyZXRfdmFsID0gY3B1X3RvX2JlMzIodmFsKTsKLQkJCXJjID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X252cmFtX3JlYWQoc3RydWN0IGJueDJ4ICpicCwgdTMyIG9mZnNldCwgdTggKnJldF9idWYsCi0JCQkgICAgaW50IGJ1Zl9zaXplKQotewotCWludCByYzsKLQl1MzIgY21kX2ZsYWdzOwotCV9fYmUzMiB2YWw7Ci0KLQlpZiAoKG9mZnNldCAmIDB4MDMpIHx8IChidWZfc2l6ZSAmIDB4MDMpIHx8IChidWZfc2l6ZSA9PSAwKSkgewotCQlEUChCTlgyWF9NU0dfTlZNLAotCQkgICAiSW52YWxpZCBwYXJhbWV0ZXI6IG9mZnNldCAweCV4ICBidWZfc2l6ZSAweCV4XG4iLAotCQkgICBvZmZzZXQsIGJ1Zl9zaXplKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKG9mZnNldCArIGJ1Zl9zaXplID4gYnAtPmNvbW1vbi5mbGFzaF9zaXplKSB7Ci0JCURQKEJOWDJYX01TR19OVk0sICJJbnZhbGlkIHBhcmFtZXRlcjogb2Zmc2V0ICgweCV4KSArIgotCQkJCSAgIiBidWZfc2l6ZSAoMHgleCkgPiBmbGFzaF9zaXplICgweCV4KVxuIiwKLQkJICAgb2Zmc2V0LCBidWZfc2l6ZSwgYnAtPmNvbW1vbi5mbGFzaF9zaXplKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogcmVxdWVzdCBhY2Nlc3MgdG8gbnZyYW0gaW50ZXJmYWNlICovCi0JcmMgPSBibngyeF9hY3F1aXJlX252cmFtX2xvY2soYnApOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JLyogZW5hYmxlIGFjY2VzcyB0byBudnJhbSBpbnRlcmZhY2UgKi8KLQlibngyeF9lbmFibGVfbnZyYW1fYWNjZXNzKGJwKTsKLQotCS8qIHJlYWQgdGhlIGZpcnN0IHdvcmQocykgKi8KLQljbWRfZmxhZ3MgPSBNQ1BSX05WTV9DT01NQU5EX0ZJUlNUOwotCXdoaWxlICgoYnVmX3NpemUgPiBzaXplb2YodTMyKSkgJiYgKHJjID09IDApKSB7Ci0JCXJjID0gYm54MnhfbnZyYW1fcmVhZF9kd29yZChicCwgb2Zmc2V0LCAmdmFsLCBjbWRfZmxhZ3MpOwotCQltZW1jcHkocmV0X2J1ZiwgJnZhbCwgNCk7Ci0KLQkJLyogYWR2YW5jZSB0byB0aGUgbmV4dCBkd29yZCAqLwotCQlvZmZzZXQgKz0gc2l6ZW9mKHUzMik7Ci0JCXJldF9idWYgKz0gc2l6ZW9mKHUzMik7Ci0JCWJ1Zl9zaXplIC09IHNpemVvZih1MzIpOwotCQljbWRfZmxhZ3MgPSAwOwotCX0KLQotCWlmIChyYyA9PSAwKSB7Ci0JCWNtZF9mbGFncyB8PSBNQ1BSX05WTV9DT01NQU5EX0xBU1Q7Ci0JCXJjID0gYm54MnhfbnZyYW1fcmVhZF9kd29yZChicCwgb2Zmc2V0LCAmdmFsLCBjbWRfZmxhZ3MpOwotCQltZW1jcHkocmV0X2J1ZiwgJnZhbCwgNCk7Ci0JfQotCi0JLyogZGlzYWJsZSBhY2Nlc3MgdG8gbnZyYW0gaW50ZXJmYWNlICovCi0JYm54MnhfZGlzYWJsZV9udnJhbV9hY2Nlc3MoYnApOwotCWJueDJ4X3JlbGVhc2VfbnZyYW1fbG9jayhicCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgYm54MnhfZ2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqZWVidWYpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IHJjOwotCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCi0JCXJldHVybiAtRUFHQUlOOwotCi0JRFAoQk5YMlhfTVNHX05WTSwgImV0aHRvb2xfZWVwcm9tOiBjbWQgJWRcbiIKLQkgICBEUF9MRVZFTCAiICBtYWdpYyAweCV4ICBvZmZzZXQgMHgleCAoJWQpICBsZW4gMHgleCAoJWQpXG4iLAotCSAgIGVlcHJvbS0+Y21kLCBlZXByb20tPm1hZ2ljLCBlZXByb20tPm9mZnNldCwgZWVwcm9tLT5vZmZzZXQsCi0JICAgZWVwcm9tLT5sZW4sIGVlcHJvbS0+bGVuKTsKLQotCS8qIHBhcmFtZXRlcnMgYWxyZWFkeSB2YWxpZGF0ZWQgaW4gZXRodG9vbF9nZXRfZWVwcm9tICovCi0KLQlyYyA9IGJueDJ4X252cmFtX3JlYWQoYnAsIGVlcHJvbS0+b2Zmc2V0LCBlZWJ1ZiwgZWVwcm9tLT5sZW4pOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X252cmFtX3dyaXRlX2R3b3JkKHN0cnVjdCBibngyeCAqYnAsIHUzMiBvZmZzZXQsIHUzMiB2YWwsCi0JCQkJICAgdTMyIGNtZF9mbGFncykKLXsKLQlpbnQgY291bnQsIGksIHJjOwotCi0JLyogYnVpbGQgdGhlIGNvbW1hbmQgd29yZCAqLwotCWNtZF9mbGFncyB8PSBNQ1BSX05WTV9DT01NQU5EX0RPSVQgfCBNQ1BSX05WTV9DT01NQU5EX1dSOwotCi0JLyogbmVlZCB0byBjbGVhciBET05FIGJpdCBzZXBhcmF0ZWx5ICovCi0JUkVHX1dSKGJwLCBNQ1BfUkVHX01DUFJfTlZNX0NPTU1BTkQsIE1DUFJfTlZNX0NPTU1BTkRfRE9ORSk7Ci0KLQkvKiB3cml0ZSB0aGUgZGF0YSAqLwotCVJFR19XUihicCwgTUNQX1JFR19NQ1BSX05WTV9XUklURSwgdmFsKTsKLQotCS8qIGFkZHJlc3Mgb2YgdGhlIE5WUkFNIHRvIHdyaXRlIHRvICovCi0JUkVHX1dSKGJwLCBNQ1BfUkVHX01DUFJfTlZNX0FERFIsCi0JICAgICAgIChvZmZzZXQgJiBNQ1BSX05WTV9BRERSX05WTV9BRERSX1ZBTFVFKSk7Ci0KLQkvKiBpc3N1ZSB0aGUgd3JpdGUgY29tbWFuZCAqLwotCVJFR19XUihicCwgTUNQX1JFR19NQ1BSX05WTV9DT01NQU5ELCBjbWRfZmxhZ3MpOwotCi0JLyogYWRqdXN0IHRpbWVvdXQgZm9yIGVtdWxhdGlvbi9GUEdBICovCi0JY291bnQgPSBOVlJBTV9USU1FT1VUX0NPVU5UOwotCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSkKLQkJY291bnQgKj0gMTAwOwotCi0JLyogd2FpdCBmb3IgY29tcGxldGlvbiAqLwotCXJjID0gLUVCVVNZOwotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCXVkZWxheSg1KTsKLQkJdmFsID0gUkVHX1JEKGJwLCBNQ1BfUkVHX01DUFJfTlZNX0NPTU1BTkQpOwotCQlpZiAodmFsICYgTUNQUl9OVk1fQ09NTUFORF9ET05FKSB7Ci0JCQlyYyA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJldHVybiByYzsKLX0KLQotI2RlZmluZSBCWVRFX09GRlNFVChvZmZzZXQpCQkoOCAqIChvZmZzZXQgJiAweDAzKSkKLQotc3RhdGljIGludCBibngyeF9udnJhbV93cml0ZTEoc3RydWN0IGJueDJ4ICpicCwgdTMyIG9mZnNldCwgdTggKmRhdGFfYnVmLAotCQkJICAgICAgaW50IGJ1Zl9zaXplKQotewotCWludCByYzsKLQl1MzIgY21kX2ZsYWdzOwotCXUzMiBhbGlnbl9vZmZzZXQ7Ci0JX19iZTMyIHZhbDsKLQotCWlmIChvZmZzZXQgKyBidWZfc2l6ZSA+IGJwLT5jb21tb24uZmxhc2hfc2l6ZSkgewotCQlEUChCTlgyWF9NU0dfTlZNLCAiSW52YWxpZCBwYXJhbWV0ZXI6IG9mZnNldCAoMHgleCkgKyIKLQkJCQkgICIgYnVmX3NpemUgKDB4JXgpID4gZmxhc2hfc2l6ZSAoMHgleClcbiIsCi0JCSAgIG9mZnNldCwgYnVmX3NpemUsIGJwLT5jb21tb24uZmxhc2hfc2l6ZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIHJlcXVlc3QgYWNjZXNzIHRvIG52cmFtIGludGVyZmFjZSAqLwotCXJjID0gYm54MnhfYWNxdWlyZV9udnJhbV9sb2NrKGJwKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCS8qIGVuYWJsZSBhY2Nlc3MgdG8gbnZyYW0gaW50ZXJmYWNlICovCi0JYm54MnhfZW5hYmxlX252cmFtX2FjY2VzcyhicCk7Ci0KLQljbWRfZmxhZ3MgPSAoTUNQUl9OVk1fQ09NTUFORF9GSVJTVCB8IE1DUFJfTlZNX0NPTU1BTkRfTEFTVCk7Ci0JYWxpZ25fb2Zmc2V0ID0gKG9mZnNldCAmIH4weDAzKTsKLQlyYyA9IGJueDJ4X252cmFtX3JlYWRfZHdvcmQoYnAsIGFsaWduX29mZnNldCwgJnZhbCwgY21kX2ZsYWdzKTsKLQotCWlmIChyYyA9PSAwKSB7Ci0JCXZhbCAmPSB+KDB4ZmYgPDwgQllURV9PRkZTRVQob2Zmc2V0KSk7Ci0JCXZhbCB8PSAoKmRhdGFfYnVmIDw8IEJZVEVfT0ZGU0VUKG9mZnNldCkpOwotCi0JCS8qIG52cmFtIGRhdGEgaXMgcmV0dXJuZWQgYXMgYW4gYXJyYXkgb2YgYnl0ZXMKLQkJICogY29udmVydCBpdCBiYWNrIHRvIGNwdSBvcmRlciAqLwotCQl2YWwgPSBiZTMyX3RvX2NwdSh2YWwpOwotCi0JCXJjID0gYm54MnhfbnZyYW1fd3JpdGVfZHdvcmQoYnAsIGFsaWduX29mZnNldCwgdmFsLAotCQkJCQkgICAgIGNtZF9mbGFncyk7Ci0JfQotCi0JLyogZGlzYWJsZSBhY2Nlc3MgdG8gbnZyYW0gaW50ZXJmYWNlICovCi0JYm54MnhfZGlzYWJsZV9udnJhbV9hY2Nlc3MoYnApOwotCWJueDJ4X3JlbGVhc2VfbnZyYW1fbG9jayhicCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgYm54MnhfbnZyYW1fd3JpdGUoc3RydWN0IGJueDJ4ICpicCwgdTMyIG9mZnNldCwgdTggKmRhdGFfYnVmLAotCQkJICAgICBpbnQgYnVmX3NpemUpCi17Ci0JaW50IHJjOwotCXUzMiBjbWRfZmxhZ3M7Ci0JdTMyIHZhbDsKLQl1MzIgd3JpdHRlbl9zb19mYXI7Ci0KLQlpZiAoYnVmX3NpemUgPT0gMSkJLyogZXRodG9vbCAqLwotCQlyZXR1cm4gYm54MnhfbnZyYW1fd3JpdGUxKGJwLCBvZmZzZXQsIGRhdGFfYnVmLCBidWZfc2l6ZSk7Ci0KLQlpZiAoKG9mZnNldCAmIDB4MDMpIHx8IChidWZfc2l6ZSAmIDB4MDMpIHx8IChidWZfc2l6ZSA9PSAwKSkgewotCQlEUChCTlgyWF9NU0dfTlZNLAotCQkgICAiSW52YWxpZCBwYXJhbWV0ZXI6IG9mZnNldCAweCV4ICBidWZfc2l6ZSAweCV4XG4iLAotCQkgICBvZmZzZXQsIGJ1Zl9zaXplKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKG9mZnNldCArIGJ1Zl9zaXplID4gYnAtPmNvbW1vbi5mbGFzaF9zaXplKSB7Ci0JCURQKEJOWDJYX01TR19OVk0sICJJbnZhbGlkIHBhcmFtZXRlcjogb2Zmc2V0ICgweCV4KSArIgotCQkJCSAgIiBidWZfc2l6ZSAoMHgleCkgPiBmbGFzaF9zaXplICgweCV4KVxuIiwKLQkJICAgb2Zmc2V0LCBidWZfc2l6ZSwgYnAtPmNvbW1vbi5mbGFzaF9zaXplKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogcmVxdWVzdCBhY2Nlc3MgdG8gbnZyYW0gaW50ZXJmYWNlICovCi0JcmMgPSBibngyeF9hY3F1aXJlX252cmFtX2xvY2soYnApOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JLyogZW5hYmxlIGFjY2VzcyB0byBudnJhbSBpbnRlcmZhY2UgKi8KLQlibngyeF9lbmFibGVfbnZyYW1fYWNjZXNzKGJwKTsKLQotCXdyaXR0ZW5fc29fZmFyID0gMDsKLQljbWRfZmxhZ3MgPSBNQ1BSX05WTV9DT01NQU5EX0ZJUlNUOwotCXdoaWxlICgod3JpdHRlbl9zb19mYXIgPCBidWZfc2l6ZSkgJiYgKHJjID09IDApKSB7Ci0JCWlmICh3cml0dGVuX3NvX2ZhciA9PSAoYnVmX3NpemUgLSBzaXplb2YodTMyKSkpCi0JCQljbWRfZmxhZ3MgfD0gTUNQUl9OVk1fQ09NTUFORF9MQVNUOwotCQllbHNlIGlmICgoKG9mZnNldCArIDQpICUgTlZSQU1fUEFHRV9TSVpFKSA9PSAwKQotCQkJY21kX2ZsYWdzIHw9IE1DUFJfTlZNX0NPTU1BTkRfTEFTVDsKLQkJZWxzZSBpZiAoKG9mZnNldCAlIE5WUkFNX1BBR0VfU0laRSkgPT0gMCkKLQkJCWNtZF9mbGFncyB8PSBNQ1BSX05WTV9DT01NQU5EX0ZJUlNUOwotCi0JCW1lbWNweSgmdmFsLCBkYXRhX2J1ZiwgNCk7Ci0KLQkJcmMgPSBibngyeF9udnJhbV93cml0ZV9kd29yZChicCwgb2Zmc2V0LCB2YWwsIGNtZF9mbGFncyk7Ci0KLQkJLyogYWR2YW5jZSB0byB0aGUgbmV4dCBkd29yZCAqLwotCQlvZmZzZXQgKz0gc2l6ZW9mKHUzMik7Ci0JCWRhdGFfYnVmICs9IHNpemVvZih1MzIpOwotCQl3cml0dGVuX3NvX2ZhciArPSBzaXplb2YodTMyKTsKLQkJY21kX2ZsYWdzID0gMDsKLQl9Ci0KLQkvKiBkaXNhYmxlIGFjY2VzcyB0byBudnJhbSBpbnRlcmZhY2UgKi8KLQlibngyeF9kaXNhYmxlX252cmFtX2FjY2VzcyhicCk7Ci0JYm54MnhfcmVsZWFzZV9udnJhbV9sb2NrKGJwKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBibngyeF9zZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICplZWJ1ZikKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwotCWludCByYyA9IDA7Ci0KLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0KLQlEUChCTlgyWF9NU0dfTlZNLCAiZXRodG9vbF9lZXByb206IGNtZCAlZFxuIgotCSAgIERQX0xFVkVMICIgIG1hZ2ljIDB4JXggIG9mZnNldCAweCV4ICglZCkgIGxlbiAweCV4ICglZClcbiIsCi0JICAgZWVwcm9tLT5jbWQsIGVlcHJvbS0+bWFnaWMsIGVlcHJvbS0+b2Zmc2V0LCBlZXByb20tPm9mZnNldCwKLQkgICBlZXByb20tPmxlbiwgZWVwcm9tLT5sZW4pOwotCi0JLyogcGFyYW1ldGVycyBhbHJlYWR5IHZhbGlkYXRlZCBpbiBldGh0b29sX3NldF9lZXByb20gKi8KLQotCS8qIFBIWSBlZXByb20gY2FuIGJlIGFjY2Vzc2VkIG9ubHkgYnkgdGhlIFBNRiAqLwotCWlmICgoZWVwcm9tLT5tYWdpYyA+PSAweDUwNDg1OTAwKSAmJiAoZWVwcm9tLT5tYWdpYyA8PSAweDUwNDg1OUZGKSAmJgotCSAgICAhYnAtPnBvcnQucG1mKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChlZXByb20tPm1hZ2ljID09IDB4NTA0ODU5NTApIHsKLQkJLyogJ1BIWVAnICgweDUwNDg1OTUwKTogcHJlcGFyZSBwaHkgZm9yIEZXIHVwZ3JhZGUgKi8KLQkJYm54Mnhfc3RhdHNfaGFuZGxlKGJwLCBTVEFUU19FVkVOVF9TVE9QKTsKLQotCQlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKLQkJcmMgfD0gYm54MnhfbGlua19yZXNldCgmYnAtPmxpbmtfcGFyYW1zLAotCQkJCSAgICAgICAmYnAtPmxpbmtfdmFycywgMCk7Ci0JCWlmIChYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpID09Ci0JCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEpCi0JCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18wLAotCQkJCSAgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX0hJR0gsIHBvcnQpOwotCQlibngyeF9yZWxlYXNlX3BoeV9sb2NrKGJwKTsKLQkJYm54MnhfbGlua19yZXBvcnQoYnApOwotCi0JfSBlbHNlIGlmIChlZXByb20tPm1hZ2ljID09IDB4NTA0ODU5NTIpIHsKLQkJLyogJ1BIWVInICgweDUwNDg1OTUyKTogcmUtaW5pdCBsaW5rIGFmdGVyIEZXIHVwZ3JhZGUgKi8KLQkJaWYgKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9PUEVOKSB7Ci0JCQlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKLQkJCXJjIHw9IGJueDJ4X2xpbmtfcmVzZXQoJmJwLT5saW5rX3BhcmFtcywKLQkJCQkJICAgICAgICZicC0+bGlua192YXJzLCAxKTsKLQotCQkJcmMgfD0gYm54MnhfcGh5X2luaXQoJmJwLT5saW5rX3BhcmFtcywKLQkJCQkJICAgICAmYnAtPmxpbmtfdmFycyk7Ci0JCQlibngyeF9yZWxlYXNlX3BoeV9sb2NrKGJwKTsKLQkJCWJueDJ4X2NhbGNfZmNfYWR2KGJwKTsKLQkJfQotCX0gZWxzZSBpZiAoZWVwcm9tLT5tYWdpYyA9PSAweDUzOTg1OTQzKSB7Ci0JCS8qICdQSFlDJyAoMHg1Mzk4NTk0Myk6IFBIWSBGVyB1cGdyYWRlIGNvbXBsZXRlZCAqLwotCQlpZiAoWEdYU19FWFRfUEhZX1RZUEUoYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKSA9PQotCQkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxKSB7Ci0JCQl1OCBleHRfcGh5X2FkZHIgPQotCQkJICAgICBYR1hTX0VYVF9QSFlfQUREUihicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOwotCi0JCQkvKiBEU1AgUmVtb3ZlIERvd25sb2FkIE1vZGUgKi8KLQkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzAsCi0JCQkJICAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fTE9XLCBwb3J0KTsKLQotCQkJYm54MnhfYWNxdWlyZV9waHlfbG9jayhicCk7Ci0KLQkJCWJueDJ4X3NmeDcxMDFfc3Bfc3dfcmVzZXQoYnAsIHBvcnQsIGV4dF9waHlfYWRkcik7Ci0KLQkJCS8qIHdhaXQgMC41IHNlYyB0byBhbGxvdyBpdCB0byBydW4gKi8KLQkJCW1zbGVlcCg1MDApOwotCQkJYm54MnhfZXh0X3BoeV9od19yZXNldChicCwgcG9ydCk7Ci0JCQltc2xlZXAoNTAwKTsKLQkJCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOwotCQl9Ci0JfSBlbHNlCi0JCXJjID0gYm54MnhfbnZyYW1fd3JpdGUoYnAsIGVlcHJvbS0+b2Zmc2V0LCBlZWJ1ZiwgZWVwcm9tLT5sZW4pOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmNvYWwpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQltZW1zZXQoY29hbCwgMCwgc2l6ZW9mKHN0cnVjdCBldGh0b29sX2NvYWxlc2NlKSk7Ci0KLQljb2FsLT5yeF9jb2FsZXNjZV91c2VjcyA9IGJwLT5yeF90aWNrczsKLQljb2FsLT50eF9jb2FsZXNjZV91c2VjcyA9IGJwLT50eF90aWNrczsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmNvYWwpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlicC0+cnhfdGlja3MgPSAodTE2KWNvYWwtPnJ4X2NvYWxlc2NlX3VzZWNzOwotCWlmIChicC0+cnhfdGlja3MgPiBCTlgyWF9NQVhfQ09BTEVTQ0VfVE9VVCkKLQkJYnAtPnJ4X3RpY2tzID0gQk5YMlhfTUFYX0NPQUxFU0NFX1RPVVQ7Ci0KLQlicC0+dHhfdGlja3MgPSAodTE2KWNvYWwtPnR4X2NvYWxlc2NlX3VzZWNzOwotCWlmIChicC0+dHhfdGlja3MgPiBCTlgyWF9NQVhfQ09BTEVTQ0VfVE9VVCkKLQkJYnAtPnR4X3RpY2tzID0gQk5YMlhfTUFYX0NPQUxFU0NFX1RPVVQ7Ci0KLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQotCQlibngyeF91cGRhdGVfY29hbGVzY2UoYnApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmVyaW5nKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JZXJpbmctPnJ4X21heF9wZW5kaW5nID0gTUFYX1JYX0FWQUlMOwotCWVyaW5nLT5yeF9taW5pX21heF9wZW5kaW5nID0gMDsKLQllcmluZy0+cnhfanVtYm9fbWF4X3BlbmRpbmcgPSAwOwotCi0JZXJpbmctPnJ4X3BlbmRpbmcgPSBicC0+cnhfcmluZ19zaXplOwotCWVyaW5nLT5yeF9taW5pX3BlbmRpbmcgPSAwOwotCWVyaW5nLT5yeF9qdW1ib19wZW5kaW5nID0gMDsKLQotCWVyaW5nLT50eF9tYXhfcGVuZGluZyA9IE1BWF9UWF9BVkFJTDsKLQllcmluZy0+dHhfcGVuZGluZyA9IGJwLT50eF9yaW5nX3NpemU7Ci19Ci0KLXN0YXRpYyBpbnQgYm54Mnhfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqZXJpbmcpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IHJjID0gMDsKLQotCWlmIChicC0+cmVjb3Zlcnlfc3RhdGUgIT0gQk5YMlhfUkVDT1ZFUllfRE9ORSkgewotCQlwcmludGsoS0VSTl9FUlIgIkhhbmRsaW5nIHBhcml0eSBlcnJvciByZWNvdmVyeS4gVHJ5IGFnYWluIGxhdGVyXG4iKTsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCi0JaWYgKChlcmluZy0+cnhfcGVuZGluZyA+IE1BWF9SWF9BVkFJTCkgfHwKLQkgICAgKGVyaW5nLT50eF9wZW5kaW5nID4gTUFYX1RYX0FWQUlMKSB8fAotCSAgICAoZXJpbmctPnR4X3BlbmRpbmcgPD0gTUFYX1NLQl9GUkFHUyArIDQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWJwLT5yeF9yaW5nX3NpemUgPSBlcmluZy0+cnhfcGVuZGluZzsKLQlicC0+dHhfcmluZ19zaXplID0gZXJpbmctPnR4X3BlbmRpbmc7Ci0KLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7Ci0JCWJueDJ4X25pY191bmxvYWQoYnAsIFVOTE9BRF9OT1JNQUwpOwotCQlyYyA9IGJueDJ4X25pY19sb2FkKGJwLCBMT0FEX05PUk1BTCk7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICplcGF1c2UpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQllcGF1c2UtPmF1dG9uZWcgPSAoYnAtPmxpbmtfcGFyYW1zLnJlcV9mbG93X2N0cmwgPT0KLQkJCSAgIEJOWDJYX0ZMT1dfQ1RSTF9BVVRPKSAmJgotCQkJICAoYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkID09IFNQRUVEX0FVVE9fTkVHKTsKLQotCWVwYXVzZS0+cnhfcGF1c2UgPSAoKGJwLT5saW5rX3ZhcnMuZmxvd19jdHJsICYgQk5YMlhfRkxPV19DVFJMX1JYKSA9PQotCQkJICAgIEJOWDJYX0ZMT1dfQ1RSTF9SWCk7Ci0JZXBhdXNlLT50eF9wYXVzZSA9ICgoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfVFgpID09Ci0JCQkgICAgQk5YMlhfRkxPV19DVFJMX1RYKTsKLQotCURQKE5FVElGX01TR19MSU5LLCAiZXRodG9vbF9wYXVzZXBhcmFtOiBjbWQgJWRcbiIKLQkgICBEUF9MRVZFTCAiICBhdXRvbmVnICVkICByeF9wYXVzZSAlZCAgdHhfcGF1c2UgJWRcbiIsCi0JICAgZXBhdXNlLT5jbWQsIGVwYXVzZS0+YXV0b25lZywgZXBhdXNlLT5yeF9wYXVzZSwgZXBhdXNlLT50eF9wYXVzZSk7Ci19Ci0KLXN0YXRpYyBpbnQgYm54Mnhfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICplcGF1c2UpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoSVNfRTFITUYoYnApKQotCQlyZXR1cm4gMDsKLQotCURQKE5FVElGX01TR19MSU5LLCAiZXRodG9vbF9wYXVzZXBhcmFtOiBjbWQgJWRcbiIKLQkgICBEUF9MRVZFTCAiICBhdXRvbmVnICVkICByeF9wYXVzZSAlZCAgdHhfcGF1c2UgJWRcbiIsCi0JICAgZXBhdXNlLT5jbWQsIGVwYXVzZS0+YXV0b25lZywgZXBhdXNlLT5yeF9wYXVzZSwgZXBhdXNlLT50eF9wYXVzZSk7Ci0KLQlicC0+bGlua19wYXJhbXMucmVxX2Zsb3dfY3RybCA9IEJOWDJYX0ZMT1dfQ1RSTF9BVVRPOwotCi0JaWYgKGVwYXVzZS0+cnhfcGF1c2UpCi0JCWJwLT5saW5rX3BhcmFtcy5yZXFfZmxvd19jdHJsIHw9IEJOWDJYX0ZMT1dfQ1RSTF9SWDsKLQotCWlmIChlcGF1c2UtPnR4X3BhdXNlKQotCQlicC0+bGlua19wYXJhbXMucmVxX2Zsb3dfY3RybCB8PSBCTlgyWF9GTE9XX0NUUkxfVFg7Ci0KLQlpZiAoYnAtPmxpbmtfcGFyYW1zLnJlcV9mbG93X2N0cmwgPT0gQk5YMlhfRkxPV19DVFJMX0FVVE8pCi0JCWJwLT5saW5rX3BhcmFtcy5yZXFfZmxvd19jdHJsID0gQk5YMlhfRkxPV19DVFJMX05PTkU7Ci0KLQlpZiAoZXBhdXNlLT5hdXRvbmVnKSB7Ci0JCWlmICghKGJwLT5wb3J0LnN1cHBvcnRlZCAmIFNVUFBPUlRFRF9BdXRvbmVnKSkgewotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJhdXRvbmVnIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlpZiAoYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkID09IFNQRUVEX0FVVE9fTkVHKQotCQkJYnAtPmxpbmtfcGFyYW1zLnJlcV9mbG93X2N0cmwgPSBCTlgyWF9GTE9XX0NUUkxfQVVUTzsKLQl9Ci0KLQlEUChORVRJRl9NU0dfTElOSywKLQkgICAicmVxX2Zsb3dfY3RybCAweCV4XG4iLCBicC0+bGlua19wYXJhbXMucmVxX2Zsb3dfY3RybCk7Ci0KLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7Ci0JCWJueDJ4X3N0YXRzX2hhbmRsZShicCwgU1RBVFNfRVZFTlRfU1RPUCk7Ci0JCWJueDJ4X2xpbmtfc2V0KGJwKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBibngyeF9zZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGNoYW5nZWQgPSAwOwotCWludCByYyA9IDA7Ci0KLQlpZiAoYnAtPnJlY292ZXJ5X3N0YXRlICE9IEJOWDJYX1JFQ09WRVJZX0RPTkUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJIYW5kbGluZyBwYXJpdHkgZXJyb3IgcmVjb3ZlcnkuIFRyeSBhZ2FpbiBsYXRlclxuIik7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQotCS8qIFRQQSByZXF1aXJlcyBSeCBDU1VNIG9mZmxvYWRpbmcgKi8KLQlpZiAoKGRhdGEgJiBFVEhfRkxBR19MUk8pICYmIGJwLT5yeF9jc3VtKSB7Ci0JCWlmICghZGlzYWJsZV90cGEpIHsKLQkJCWlmICghKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykpIHsKLQkJCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOwotCQkJCWJwLT5mbGFncyB8PSBUUEFfRU5BQkxFX0ZMQUc7Ci0JCQkJY2hhbmdlZCA9IDE7Ci0JCQl9Ci0JCX0gZWxzZQotCQkJcmMgPSAtRUlOVkFMOwotCX0gZWxzZSBpZiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKSB7Ci0JCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfTFJPOwotCQlicC0+ZmxhZ3MgJj0gflRQQV9FTkFCTEVfRkxBRzsKLQkJY2hhbmdlZCA9IDE7Ci0JfQotCi0JaWYgKGRhdGEgJiBFVEhfRkxBR19SWEhBU0gpCi0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9SWEhBU0g7Ci0JZWxzZQotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1JYSEFTSDsKLQotCWlmIChjaGFuZ2VkICYmIG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQlibngyeF9uaWNfdW5sb2FkKGJwLCBVTkxPQURfTk9STUFMKTsKLQkJcmMgPSBibngyeF9uaWNfbG9hZChicCwgTE9BRF9OT1JNQUwpOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHUzMiBibngyeF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcmV0dXJuIGJwLT5yeF9jc3VtOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCByYyA9IDA7Ci0KLQlpZiAoYnAtPnJlY292ZXJ5X3N0YXRlICE9IEJOWDJYX1JFQ09WRVJZX0RPTkUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJIYW5kbGluZyBwYXJpdHkgZXJyb3IgcmVjb3ZlcnkuIFRyeSBhZ2FpbiBsYXRlclxuIik7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQotCWJwLT5yeF9jc3VtID0gZGF0YTsKLQotCS8qIERpc2FibGUgVFBBLCB3aGVuIFJ4IENTVU0gaXMgZGlzYWJsZWQuIE90aGVyd2lzZSBhbGwKLQkgICBUUEEnZWQgcGFja2V0cyB3aWxsIGJlIGRpc2NhcmRlZCBkdWUgdG8gd3JvbmcgVENQIENTVU0gKi8KLQlpZiAoIWRhdGEpIHsKLQkJdTMyIGZsYWdzID0gZXRodG9vbF9vcF9nZXRfZmxhZ3MoZGV2KTsKLQotCQlyYyA9IGJueDJ4X3NldF9mbGFncyhkZXYsIChmbGFncyAmIH5FVEhfRkxBR19MUk8pKTsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgYm54Mnhfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlpZiAoZGF0YSkgewotCQlkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPX0VDTik7Ci0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwotCX0gZWxzZSB7Ci0JCWRldi0+ZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPX0VDTik7Ci0JCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPNjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB7Ci0JY2hhciBzdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKLX0gYm54MnhfdGVzdHNfc3RyX2FycltCTlgyWF9OVU1fVEVTVFNdID0gewotCXsgInJlZ2lzdGVyX3Rlc3QgKG9mZmxpbmUpIiB9LAotCXsgIm1lbW9yeV90ZXN0IChvZmZsaW5lKSIgfSwKLQl7ICJsb29wYmFja190ZXN0IChvZmZsaW5lKSIgfSwKLQl7ICJudnJhbV90ZXN0IChvbmxpbmUpIiB9LAotCXsgImludGVycnVwdF90ZXN0IChvbmxpbmUpIiB9LAotCXsgImxpbmtfdGVzdCAob25saW5lKSIgfSwKLQl7ICJpZGxlIGNoZWNrIChvbmxpbmUpIiB9Ci19OwotCi1zdGF0aWMgaW50IGJueDJ4X3Rlc3RfcmVnaXN0ZXJzKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IGlkeCwgaSwgcmMgPSAtRU5PREVWOwotCXUzMiB3cl92YWwgPSAwOwotCWludCBwb3J0ID0gQlBfUE9SVChicCk7Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCB7Ci0JCXUzMiBvZmZzZXQwOwotCQl1MzIgb2Zmc2V0MTsKLQkJdTMyIG1hc2s7Ci0JfSByZWdfdGJsW10gPSB7Ci0vKiAwICovCQl7IEJSQjFfUkVHX1BBVVNFX0xPV19USFJFU0hPTERfMCwgICAgICA0LCAweDAwMDAwM2ZmIH0sCi0JCXsgRE9SUV9SRUdfREJfQUREUjAsICAgICAgICAgICAgICAgICAgIDQsIDB4ZmZmZmZmZmYgfSwKLQkJeyBIQ19SRUdfQUdHX0lOVF8wLCAgICAgICAgICAgICAgICAgICAgNCwgMHgwMDAwMDNmZiB9LAotCQl7IFBCRl9SRUdfTUFDX0lGMF9FTkFCTEUsICAgICAgICAgICAgICA0LCAweDAwMDAwMDAxIH0sCi0JCXsgUEJGX1JFR19QMF9JTklUX0NSRCwgICAgICAgICAgICAgICAgIDQsIDB4MDAwMDA3ZmYgfSwKLQkJeyBQUlNfUkVHX0NJRF9QT1JUXzAsICAgICAgICAgICAgICAgICAgNCwgMHgwMGZmZmZmZiB9LAotCQl7IFBYUDJfUkVHX1BTV1JRX0NEVTBfTDJQLCAgICAgICAgICAgICA0LCAweDAwMGZmZmZmIH0sCi0JCXsgUFhQMl9SRUdfUlFfQ0RVMF9FRklSU1RfTUVNX0FERFIsICAgIDgsIDB4MDAwM2ZmZmYgfSwKLQkJeyBQWFAyX1JFR19QU1dSUV9UTTBfTDJQLCAgICAgICAgICAgICAgNCwgMHgwMDBmZmZmZiB9LAotCQl7IFBYUDJfUkVHX1JRX1VTRE0wX0VGSVJTVF9NRU1fQUREUiwgICA4LCAweDAwMDNmZmZmIH0sCi0vKiAxMCAqLwl7IFBYUDJfUkVHX1BTV1JRX1RTRE0wX0wyUCwgICAgICAgICAgICA0LCAweDAwMGZmZmZmIH0sCi0JCXsgUU1fUkVHX0NPTk5OVU1fMCwgICAgICAgICAgICAgICAgICAgIDQsIDB4MDAwZmZmZmYgfSwKLQkJeyBUTV9SRUdfTElOMF9NQVhfQUNUSVZFX0NJRCwgICAgICAgICAgNCwgMHgwMDAzZmZmZiB9LAotCQl7IFNSQ19SRUdfS0VZUlNTMF8wLCAgICAgICAgICAgICAgICAgIDQwLCAweGZmZmZmZmZmIH0sCi0JCXsgU1JDX1JFR19LRVlSU1MwXzcsICAgICAgICAgICAgICAgICAgNDAsIDB4ZmZmZmZmZmYgfSwKLQkJeyBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQwMCwgNCwgMHgwMDAwMDAwMSB9LAotCQl7IFhDTV9SRUdfV1VfREFfQ05UX0NNRDAwLCAgICAgICAgICAgICA0LCAweDAwMDAwMDAzIH0sCi0JCXsgWENNX1JFR19HTEJfREVMX0FDS19NQVhfQ05UXzAsICAgICAgIDQsIDB4MDAwMDAwZmYgfSwKLQkJeyBOSUdfUkVHX0xMSDBfVF9CSVQsICAgICAgICAgICAgICAgICAgNCwgMHgwMDAwMDAwMSB9LAotCQl7IE5JR19SRUdfRU1BQzBfSU5fRU4sICAgICAgICAgICAgICAgICA0LCAweDAwMDAwMDAxIH0sCi0vKiAyMCAqLwl7IE5JR19SRUdfQk1BQzBfSU5fRU4sICAgICAgICAgICAgICAgICA0LCAweDAwMDAwMDAxIH0sCi0JCXsgTklHX1JFR19YQ00wX09VVF9FTiwgICAgICAgICAgICAgICAgIDQsIDB4MDAwMDAwMDEgfSwKLQkJeyBOSUdfUkVHX0JSQjBfT1VUX0VOLCAgICAgICAgICAgICAgICAgNCwgMHgwMDAwMDAwMSB9LAotCQl7IE5JR19SRUdfTExIMF9YQ01fTUFTSywgICAgICAgICAgICAgICA0LCAweDAwMDAwMDA3IH0sCi0JCXsgTklHX1JFR19MTEgwX0FDUElfUEFUXzZfTEVOLCAgICAgICAgNjgsIDB4MDAwMDAwZmYgfSwKLQkJeyBOSUdfUkVHX0xMSDBfQUNQSV9QQVRfMF9DUkMsICAgICAgICA2OCwgMHhmZmZmZmZmZiB9LAotCQl7IE5JR19SRUdfTExIMF9ERVNUX01BQ18wXzAsICAgICAgICAgMTYwLCAweGZmZmZmZmZmIH0sCi0JCXsgTklHX1JFR19MTEgwX0RFU1RfSVBfMF8xLCAgICAgICAgICAxNjAsIDB4ZmZmZmZmZmYgfSwKLQkJeyBOSUdfUkVHX0xMSDBfSVBWNF9JUFY2XzAsICAgICAgICAgIDE2MCwgMHgwMDAwMDAwMSB9LAotCQl7IE5JR19SRUdfTExIMF9ERVNUX1VEUF8wLCAgICAgICAgICAgMTYwLCAweDAwMDBmZmZmIH0sCi0vKiAzMCAqLwl7IE5JR19SRUdfTExIMF9ERVNUX1RDUF8wLCAgICAgICAgICAgMTYwLCAweDAwMDBmZmZmIH0sCi0JCXsgTklHX1JFR19MTEgwX1ZMQU5fSURfMCwgICAgICAgICAgICAxNjAsIDB4MDAwMDBmZmYgfSwKLQkJeyBOSUdfUkVHX1hHWFNfU0VSREVTMF9NT0RFX1NFTCwgICAgICAgNCwgMHgwMDAwMDAwMSB9LAotCQl7IE5JR19SRUdfTEVEX0NPTlRST0xfT1ZFUlJJREVfVFJBRkZJQ19QMCwgNCwgMHgwMDAwMDAwMSB9LAotCQl7IE5JR19SRUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMCwgICAgICA0LCAweDA3ZmZmZmZmIH0sCi0JCXsgTklHX1JFR19YR1hTMF9DVFJMX0VYVFJFTU9URU1ESU9TVCwgMjQsIDB4MDAwMDAwMDEgfSwKLQkJeyBOSUdfUkVHX1NFUkRFUzBfQ1RSTF9QSFlfQUREUiwgICAgICAxNiwgMHgwMDAwMDAxZiB9LAotCi0JCXsgMHhmZmZmZmZmZiwgMCwgMHgwMDAwMDAwMCB9Ci0JfTsKLQotCWlmICghbmV0aWZfcnVubmluZyhicC0+ZGV2KSkKLQkJcmV0dXJuIHJjOwotCi0JLyogUmVwZWF0IHRoZSB0ZXN0IHR3aWNlOgotCSAgIEZpcnN0IGJ5IHdyaXRpbmcgMHgwMDAwMDAwMCwgc2Vjb25kIGJ5IHdyaXRpbmcgMHhmZmZmZmZmZiAqLwotCWZvciAoaWR4ID0gMDsgaWR4IDwgMjsgaWR4KyspIHsKLQotCQlzd2l0Y2ggKGlkeCkgewotCQljYXNlIDA6Ci0JCQl3cl92YWwgPSAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCXdyX3ZhbCA9IDB4ZmZmZmZmZmY7Ci0JCQlicmVhazsKLQkJfQotCi0JCWZvciAoaSA9IDA7IHJlZ190YmxbaV0ub2Zmc2V0MCAhPSAweGZmZmZmZmZmOyBpKyspIHsKLQkJCXUzMiBvZmZzZXQsIG1hc2ssIHNhdmVfdmFsLCB2YWw7Ci0KLQkJCW9mZnNldCA9IHJlZ190YmxbaV0ub2Zmc2V0MCArIHBvcnQqcmVnX3RibFtpXS5vZmZzZXQxOwotCQkJbWFzayA9IHJlZ190YmxbaV0ubWFzazsKLQotCQkJc2F2ZV92YWwgPSBSRUdfUkQoYnAsIG9mZnNldCk7Ci0KLQkJCVJFR19XUihicCwgb2Zmc2V0LCAod3JfdmFsICYgbWFzaykpOwotCQkJdmFsID0gUkVHX1JEKGJwLCBvZmZzZXQpOwotCi0JCQkvKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCByZWdpc3RlcidzIHZhbHVlICovCi0JCQlSRUdfV1IoYnAsIG9mZnNldCwgc2F2ZV92YWwpOwotCi0JCQkvKiB2ZXJpZnkgdmFsdWUgaXMgYXMgZXhwZWN0ZWQgKi8KLQkJCWlmICgodmFsICYgbWFzaykgIT0gKHdyX3ZhbCAmIG1hc2spKSB7Ci0JCQkJRFAoTkVUSUZfTVNHX1BST0JFLAotCQkJCSAgICJvZmZzZXQgMHgleDogdmFsIDB4JXggIT0gMHgleCBtYXNrIDB4JXhcbiIsCi0JCQkJICAgb2Zmc2V0LCB2YWwsIHdyX3ZhbCwgbWFzayk7Ci0JCQkJZ290byB0ZXN0X3JlZ19leGl0OwotCQkJfQotCQl9Ci0JfQotCi0JcmMgPSAwOwotCi10ZXN0X3JlZ19leGl0OgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBibngyeF90ZXN0X21lbW9yeShzdHJ1Y3QgYm54MnggKmJwKQotewotCWludCBpLCBqLCByYyA9IC1FTk9ERVY7Ci0JdTMyIHZhbDsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IHsKLQkJdTMyIG9mZnNldDsKLQkJaW50IHNpemU7Ci0JfSBtZW1fdGJsW10gPSB7Ci0JCXsgQ0NNX1JFR19YWF9ERVNDUl9UQUJMRSwgICBDQ01fUkVHX1hYX0RFU0NSX1RBQkxFX1NJWkUgfSwKLQkJeyBDRkNfUkVHX0FDVElWSVRZX0NPVU5URVIsIENGQ19SRUdfQUNUSVZJVFlfQ09VTlRFUl9TSVpFIH0sCi0JCXsgQ0ZDX1JFR19MSU5LX0xJU1QsICAgICAgICBDRkNfUkVHX0xJTktfTElTVF9TSVpFIH0sCi0JCXsgRE1BRV9SRUdfQ01EX01FTSwgICAgICAgICBETUFFX1JFR19DTURfTUVNX1NJWkUgfSwKLQkJeyBUQ01fUkVHX1hYX0RFU0NSX1RBQkxFLCAgIFRDTV9SRUdfWFhfREVTQ1JfVEFCTEVfU0laRSB9LAotCQl7IFVDTV9SRUdfWFhfREVTQ1JfVEFCTEUsICAgVUNNX1JFR19YWF9ERVNDUl9UQUJMRV9TSVpFIH0sCi0JCXsgWENNX1JFR19YWF9ERVNDUl9UQUJMRSwgICBYQ01fUkVHX1hYX0RFU0NSX1RBQkxFX1NJWkUgfSwKLQotCQl7IDB4ZmZmZmZmZmYsIDAgfQotCX07Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCB7Ci0JCWNoYXIgKm5hbWU7Ci0JCXUzMiBvZmZzZXQ7Ci0JCXUzMiBlMV9tYXNrOwotCQl1MzIgZTFoX21hc2s7Ci0JfSBwcnR5X3RibFtdID0gewotCQl7ICJDQ01fUFJUWV9TVFMiLCAgQ0NNX1JFR19DQ01fUFJUWV9TVFMsICAgMHgzZmZjMCwgMCB9LAotCQl7ICJDRkNfUFJUWV9TVFMiLCAgQ0ZDX1JFR19DRkNfUFJUWV9TVFMsICAgMHgyLCAgICAgMHgyIH0sCi0JCXsgIkRNQUVfUFJUWV9TVFMiLCBETUFFX1JFR19ETUFFX1BSVFlfU1RTLCAwLCAgICAgICAwIH0sCi0JCXsgIlRDTV9QUlRZX1NUUyIsICBUQ01fUkVHX1RDTV9QUlRZX1NUUywgICAweDNmZmMwLCAwIH0sCi0JCXsgIlVDTV9QUlRZX1NUUyIsICBVQ01fUkVHX1VDTV9QUlRZX1NUUywgICAweDNmZmMwLCAwIH0sCi0JCXsgIlhDTV9QUlRZX1NUUyIsICBYQ01fUkVHX1hDTV9QUlRZX1NUUywgICAweDNmZmMxLCAwIH0sCi0KLQkJeyBOVUxMLCAweGZmZmZmZmZmLCAwLCAwIH0KLQl9OwotCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGJwLT5kZXYpKQotCQlyZXR1cm4gcmM7Ci0KLQkvKiBHbyB0aHJvdWdoIGFsbCB0aGUgbWVtb3JpZXMgKi8KLQlmb3IgKGkgPSAwOyBtZW1fdGJsW2ldLm9mZnNldCAhPSAweGZmZmZmZmZmOyBpKyspCi0JCWZvciAoaiA9IDA7IGogPCBtZW1fdGJsW2ldLnNpemU7IGorKykKLQkJCVJFR19SRChicCwgbWVtX3RibFtpXS5vZmZzZXQgKyBqKjQpOwotCi0JLyogQ2hlY2sgdGhlIHBhcml0eSBzdGF0dXMgKi8KLQlmb3IgKGkgPSAwOyBwcnR5X3RibFtpXS5vZmZzZXQgIT0gMHhmZmZmZmZmZjsgaSsrKSB7Ci0JCXZhbCA9IFJFR19SRChicCwgcHJ0eV90YmxbaV0ub2Zmc2V0KTsKLQkJaWYgKChDSElQX0lTX0UxKGJwKSAmJiAodmFsICYgfihwcnR5X3RibFtpXS5lMV9tYXNrKSkpIHx8Ci0JCSAgICAoQ0hJUF9JU19FMUgoYnApICYmICh2YWwgJiB+KHBydHlfdGJsW2ldLmUxaF9tYXNrKSkpKSB7Ci0JCQlEUChORVRJRl9NU0dfSFcsCi0JCQkgICAiJXMgaXMgMHgleFxuIiwgcHJ0eV90YmxbaV0ubmFtZSwgdmFsKTsKLQkJCWdvdG8gdGVzdF9tZW1fZXhpdDsKLQkJfQotCX0KLQotCXJjID0gMDsKLQotdGVzdF9tZW1fZXhpdDoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X3dhaXRfZm9yX2xpbmsoc3RydWN0IGJueDJ4ICpicCwgdTggbGlua191cCkKLXsKLQlpbnQgY250ID0gMTAwMDsKLQotCWlmIChsaW5rX3VwKQotCQl3aGlsZSAoYm54MnhfbGlua190ZXN0KGJwKSAmJiBjbnQtLSkKLQkJCW1zbGVlcCgxMCk7Ci19Ci0KLXN0YXRpYyBpbnQgYm54MnhfcnVuX2xvb3BiYWNrKHN0cnVjdCBibngyeCAqYnAsIGludCBsb29wYmFja19tb2RlLCB1OCBsaW5rX3VwKQotewotCXVuc2lnbmVkIGludCBwa3Rfc2l6ZSwgbnVtX3BrdHMsIGk7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1bnNpZ25lZCBjaGFyICpwYWNrZXQ7Ci0Jc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcF9yeCA9ICZicC0+ZnBbMF07Ci0Jc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcF90eCA9ICZicC0+ZnBbMF07Ci0JdTE2IHR4X3N0YXJ0X2lkeCwgdHhfaWR4OwotCXUxNiByeF9zdGFydF9pZHgsIHJ4X2lkeDsKLQl1MTYgcGt0X3Byb2QsIGJkX3Byb2Q7Ci0Jc3RydWN0IHN3X3R4X2JkICp0eF9idWY7Ci0Jc3RydWN0IGV0aF90eF9zdGFydF9iZCAqdHhfc3RhcnRfYmQ7Ci0Jc3RydWN0IGV0aF90eF9wYXJzZV9iZCAqcGJkID0gTlVMTDsKLQlkbWFfYWRkcl90IG1hcHBpbmc7Ci0JdW5pb24gZXRoX3J4X2NxZSAqY3FlOwotCXU4IGNxZV9mcF9mbGFnczsKLQlzdHJ1Y3Qgc3dfcnhfYmQgKnJ4X2J1ZjsKLQl1MTYgbGVuOwotCWludCByYyA9IC1FTk9ERVY7Ci0KLQkvKiBjaGVjayB0aGUgbG9vcGJhY2sgbW9kZSAqLwotCXN3aXRjaCAobG9vcGJhY2tfbW9kZSkgewotCWNhc2UgQk5YMlhfUEhZX0xPT1BCQUNLOgotCQlpZiAoYnAtPmxpbmtfcGFyYW1zLmxvb3BiYWNrX21vZGUgIT0gTE9PUEJBQ0tfWEdYU18xMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQljYXNlIEJOWDJYX01BQ19MT09QQkFDSzoKLQkJYnAtPmxpbmtfcGFyYW1zLmxvb3BiYWNrX21vZGUgPSBMT09QQkFDS19CTUFDOwotCQlibngyeF9waHlfaW5pdCgmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIHByZXBhcmUgdGhlIGxvb3BiYWNrIHBhY2tldCAqLwotCXBrdF9zaXplID0gKCgoYnAtPmRldi0+bXR1IDwgRVRIX01BWF9QQUNLRVRfU0laRSkgPwotCQkgICAgIGJwLT5kZXYtPm10dSA6IEVUSF9NQVhfUEFDS0VUX1NJWkUpICsgRVRIX0hMRU4pOwotCXNrYiA9IG5ldGRldl9hbGxvY19za2IoYnAtPmRldiwgYnAtPnJ4X2J1Zl9zaXplKTsKLQlpZiAoIXNrYikgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gdGVzdF9sb29wYmFja19leGl0OwotCX0KLQlwYWNrZXQgPSBza2JfcHV0KHNrYiwgcGt0X3NpemUpOwotCW1lbWNweShwYWNrZXQsIGJwLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JbWVtc2V0KHBhY2tldCArIEVUSF9BTEVOLCAwLCBFVEhfQUxFTik7Ci0JbWVtc2V0KHBhY2tldCArIDIqRVRIX0FMRU4sIDB4NzcsIChFVEhfSExFTiAtIDIqRVRIX0FMRU4pKTsKLQlmb3IgKGkgPSBFVEhfSExFTjsgaSA8IHBrdF9zaXplOyBpKyspCi0JCXBhY2tldFtpXSA9ICh1bnNpZ25lZCBjaGFyKSAoaSAmIDB4ZmYpOwotCi0JLyogc2VuZCB0aGUgbG9vcGJhY2sgcGFja2V0ICovCi0JbnVtX3BrdHMgPSAwOwotCXR4X3N0YXJ0X2lkeCA9IGxlMTZfdG9fY3B1KCpmcF90eC0+dHhfY29uc19zYik7Ci0Jcnhfc3RhcnRfaWR4ID0gbGUxNl90b19jcHUoKmZwX3J4LT5yeF9jb25zX3NiKTsKLQotCXBrdF9wcm9kID0gZnBfdHgtPnR4X3BrdF9wcm9kKys7Ci0JdHhfYnVmID0gJmZwX3R4LT50eF9idWZfcmluZ1tUWF9CRChwa3RfcHJvZCldOwotCXR4X2J1Zi0+Zmlyc3RfYmQgPSBmcF90eC0+dHhfYmRfcHJvZDsKLQl0eF9idWYtPnNrYiA9IHNrYjsKLQl0eF9idWYtPmZsYWdzID0gMDsKLQotCWJkX3Byb2QgPSBUWF9CRChmcF90eC0+dHhfYmRfcHJvZCk7Ci0JdHhfc3RhcnRfYmQgPSAmZnBfdHgtPnR4X2Rlc2NfcmluZ1tiZF9wcm9kXS5zdGFydF9iZDsKLQltYXBwaW5nID0gZG1hX21hcF9zaW5nbGUoJmJwLT5wZGV2LT5kZXYsIHNrYi0+ZGF0YSwKLQkJCQkgc2tiX2hlYWRsZW4oc2tiKSwgRE1BX1RPX0RFVklDRSk7Ci0JdHhfc3RhcnRfYmQtPmFkZHJfaGkgPSBjcHVfdG9fbGUzMihVNjRfSEkobWFwcGluZykpOwotCXR4X3N0YXJ0X2JkLT5hZGRyX2xvID0gY3B1X3RvX2xlMzIoVTY0X0xPKG1hcHBpbmcpKTsKLQl0eF9zdGFydF9iZC0+bmJkID0gY3B1X3RvX2xlMTYoMik7IC8qIHN0YXJ0ICsgcGJkICovCi0JdHhfc3RhcnRfYmQtPm5ieXRlcyA9IGNwdV90b19sZTE2KHNrYl9oZWFkbGVuKHNrYikpOwotCXR4X3N0YXJ0X2JkLT52bGFuID0gY3B1X3RvX2xlMTYocGt0X3Byb2QpOwotCXR4X3N0YXJ0X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCA9IEVUSF9UWF9CRF9GTEFHU19TVEFSVF9CRDsKLQl0eF9zdGFydF9iZC0+Z2VuZXJhbF9kYXRhID0gKChVTklDQVNUX0FERFJFU1MgPDwKLQkJCQlFVEhfVFhfU1RBUlRfQkRfRVRIX0FERFJfVFlQRV9TSElGVCkgfCAxKTsKLQotCS8qIHR1cm4gb24gcGFyc2luZyBhbmQgZ2V0IGEgQkQgKi8KLQliZF9wcm9kID0gVFhfQkQoTkVYVF9UWF9JRFgoYmRfcHJvZCkpOwotCXBiZCA9ICZmcF90eC0+dHhfZGVzY19yaW5nW2JkX3Byb2RdLnBhcnNlX2JkOwotCi0JbWVtc2V0KHBiZCwgMCwgc2l6ZW9mKHN0cnVjdCBldGhfdHhfcGFyc2VfYmQpKTsKLQotCXdtYigpOwotCi0JZnBfdHgtPnR4X2RiLmRhdGEucHJvZCArPSAyOwotCWJhcnJpZXIoKTsKLQlET09SQkVMTChicCwgZnBfdHgtPmluZGV4LCBmcF90eC0+dHhfZGIucmF3KTsKLQotCW1taW93YigpOwotCi0JbnVtX3BrdHMrKzsKLQlmcF90eC0+dHhfYmRfcHJvZCArPSAyOyAvKiBzdGFydCArIHBiZCAqLwotCi0JdWRlbGF5KDEwMCk7Ci0KLQl0eF9pZHggPSBsZTE2X3RvX2NwdSgqZnBfdHgtPnR4X2NvbnNfc2IpOwotCWlmICh0eF9pZHggIT0gdHhfc3RhcnRfaWR4ICsgbnVtX3BrdHMpCi0JCWdvdG8gdGVzdF9sb29wYmFja19leGl0OwotCi0JcnhfaWR4ID0gbGUxNl90b19jcHUoKmZwX3J4LT5yeF9jb25zX3NiKTsKLQlpZiAocnhfaWR4ICE9IHJ4X3N0YXJ0X2lkeCArIG51bV9wa3RzKQotCQlnb3RvIHRlc3RfbG9vcGJhY2tfZXhpdDsKLQotCWNxZSA9ICZmcF9yeC0+cnhfY29tcF9yaW5nW1JDUV9CRChmcF9yeC0+cnhfY29tcF9jb25zKV07Ci0JY3FlX2ZwX2ZsYWdzID0gY3FlLT5mYXN0X3BhdGhfY3FlLnR5cGVfZXJyb3JfZmxhZ3M7Ci0JaWYgKENRRV9UWVBFKGNxZV9mcF9mbGFncykgfHwgKGNxZV9mcF9mbGFncyAmIEVUSF9SWF9FUlJPUl9GQUxHUykpCi0JCWdvdG8gdGVzdF9sb29wYmFja19yeF9leGl0OwotCi0JbGVuID0gbGUxNl90b19jcHUoY3FlLT5mYXN0X3BhdGhfY3FlLnBrdF9sZW4pOwotCWlmIChsZW4gIT0gcGt0X3NpemUpCi0JCWdvdG8gdGVzdF9sb29wYmFja19yeF9leGl0OwotCi0JcnhfYnVmID0gJmZwX3J4LT5yeF9idWZfcmluZ1tSWF9CRChmcF9yeC0+cnhfYmRfY29ucyldOwotCXNrYiA9IHJ4X2J1Zi0+c2tiOwotCXNrYl9yZXNlcnZlKHNrYiwgY3FlLT5mYXN0X3BhdGhfY3FlLnBsYWNlbWVudF9vZmZzZXQpOwotCWZvciAoaSA9IEVUSF9ITEVOOyBpIDwgcGt0X3NpemU7IGkrKykKLQkJaWYgKCooc2tiLT5kYXRhICsgaSkgIT0gKHVuc2lnbmVkIGNoYXIpIChpICYgMHhmZikpCi0JCQlnb3RvIHRlc3RfbG9vcGJhY2tfcnhfZXhpdDsKLQotCXJjID0gMDsKLQotdGVzdF9sb29wYmFja19yeF9leGl0OgotCi0JZnBfcngtPnJ4X2JkX2NvbnMgPSBORVhUX1JYX0lEWChmcF9yeC0+cnhfYmRfY29ucyk7Ci0JZnBfcngtPnJ4X2JkX3Byb2QgPSBORVhUX1JYX0lEWChmcF9yeC0+cnhfYmRfcHJvZCk7Ci0JZnBfcngtPnJ4X2NvbXBfY29ucyA9IE5FWFRfUkNRX0lEWChmcF9yeC0+cnhfY29tcF9jb25zKTsKLQlmcF9yeC0+cnhfY29tcF9wcm9kID0gTkVYVF9SQ1FfSURYKGZwX3J4LT5yeF9jb21wX3Byb2QpOwotCi0JLyogVXBkYXRlIHByb2R1Y2VycyAqLwotCWJueDJ4X3VwZGF0ZV9yeF9wcm9kKGJwLCBmcF9yeCwgZnBfcngtPnJ4X2JkX3Byb2QsIGZwX3J4LT5yeF9jb21wX3Byb2QsCi0JCQkgICAgIGZwX3J4LT5yeF9zZ2VfcHJvZCk7Ci0KLXRlc3RfbG9vcGJhY2tfZXhpdDoKLQlicC0+bGlua19wYXJhbXMubG9vcGJhY2tfbW9kZSA9IExPT1BCQUNLX05PTkU7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgYm54MnhfdGVzdF9sb29wYmFjayhzdHJ1Y3QgYm54MnggKmJwLCB1OCBsaW5rX3VwKQotewotCWludCByYyA9IDAsIHJlczsKLQotCWlmIChCUF9OT01DUChicCkpCi0JCXJldHVybiByYzsKLQotCWlmICghbmV0aWZfcnVubmluZyhicC0+ZGV2KSkKLQkJcmV0dXJuIEJOWDJYX0xPT1BCQUNLX0ZBSUxFRDsKLQotCWJueDJ4X25ldGlmX3N0b3AoYnAsIDEpOwotCWJueDJ4X2FjcXVpcmVfcGh5X2xvY2soYnApOwotCi0JcmVzID0gYm54MnhfcnVuX2xvb3BiYWNrKGJwLCBCTlgyWF9QSFlfTE9PUEJBQ0ssIGxpbmtfdXApOwotCWlmIChyZXMpIHsKLQkJRFAoTkVUSUZfTVNHX1BST0JFLCAiICBQSFkgbG9vcGJhY2sgZmFpbGVkICAocmVzICVkKVxuIiwgcmVzKTsKLQkJcmMgfD0gQk5YMlhfUEhZX0xPT1BCQUNLX0ZBSUxFRDsKLQl9Ci0KLQlyZXMgPSBibngyeF9ydW5fbG9vcGJhY2soYnAsIEJOWDJYX01BQ19MT09QQkFDSywgbGlua191cCk7Ci0JaWYgKHJlcykgewotCQlEUChORVRJRl9NU0dfUFJPQkUsICIgIE1BQyBsb29wYmFjayBmYWlsZWQgIChyZXMgJWQpXG4iLCByZXMpOwotCQlyYyB8PSBCTlgyWF9NQUNfTE9PUEJBQ0tfRkFJTEVEOwotCX0KLQotCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOwotCWJueDJ4X25ldGlmX3N0YXJ0KGJwKTsKLQotCXJldHVybiByYzsKLX0KLQotI2RlZmluZSBDUkMzMl9SRVNJRFVBTAkJCTB4ZGViYjIwZTMKLQotc3RhdGljIGludCBibngyeF90ZXN0X252cmFtKHN0cnVjdCBibngyeCAqYnApCi17Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCB7Ci0JCWludCBvZmZzZXQ7Ci0JCWludCBzaXplOwotCX0gbnZyYW1fdGJsW10gPSB7Ci0JCXsgICAgIDAsICAweDE0IH0sIC8qIGJvb3RzdHJhcCAqLwotCQl7ICAweDE0LCAgMHhlYyB9LCAvKiBkaXIgKi8KLQkJeyAweDEwMCwgMHgzNTAgfSwgLyogbWFudWZfaW5mbyAqLwotCQl7IDB4NDUwLCAgMHhmMCB9LCAvKiBmZWF0dXJlX2luZm8gKi8KLQkJeyAweDY0MCwgIDB4NjQgfSwgLyogdXBncmFkZV9rZXlfaW5mbyAqLwotCQl7IDB4NmE0LCAgMHg2NCB9LAotCQl7IDB4NzA4LCAgMHg3MCB9LCAvKiBtYW51Zl9rZXlfaW5mbyAqLwotCQl7IDB4Nzc4LCAgMHg3MCB9LAotCQl7ICAgICAwLCAgICAgMCB9Ci0JfTsKLQlfX2JlMzIgYnVmWzB4MzUwIC8gNF07Ci0JdTggKmRhdGEgPSAodTggKilidWY7Ci0JaW50IGksIHJjOwotCXUzMiBtYWdpYywgY3JjOwotCi0JaWYgKEJQX05PTUNQKGJwKSkKLQkJcmV0dXJuIDA7Ci0KLQlyYyA9IGJueDJ4X252cmFtX3JlYWQoYnAsIDAsIGRhdGEsIDQpOwotCWlmIChyYykgewotCQlEUChORVRJRl9NU0dfUFJPQkUsICJtYWdpYyB2YWx1ZSByZWFkIChyYyAlZClcbiIsIHJjKTsKLQkJZ290byB0ZXN0X252cmFtX2V4aXQ7Ci0JfQotCi0JbWFnaWMgPSBiZTMyX3RvX2NwdShidWZbMF0pOwotCWlmIChtYWdpYyAhPSAweDY2OTk1NWFhKSB7Ci0JCURQKE5FVElGX01TR19QUk9CRSwgIm1hZ2ljIHZhbHVlICgweCUwOHgpXG4iLCBtYWdpYyk7Ci0JCXJjID0gLUVOT0RFVjsKLQkJZ290byB0ZXN0X252cmFtX2V4aXQ7Ci0JfQotCi0JZm9yIChpID0gMDsgbnZyYW1fdGJsW2ldLnNpemU7IGkrKykgewotCi0JCXJjID0gYm54MnhfbnZyYW1fcmVhZChicCwgbnZyYW1fdGJsW2ldLm9mZnNldCwgZGF0YSwKLQkJCQkgICAgICBudnJhbV90YmxbaV0uc2l6ZSk7Ci0JCWlmIChyYykgewotCQkJRFAoTkVUSUZfTVNHX1BST0JFLAotCQkJICAgIm52cmFtX3RibFslZF0gcmVhZCBkYXRhIChyYyAlZClcbiIsIGksIHJjKTsKLQkJCWdvdG8gdGVzdF9udnJhbV9leGl0OwotCQl9Ci0KLQkJY3JjID0gZXRoZXJfY3JjX2xlKG52cmFtX3RibFtpXS5zaXplLCBkYXRhKTsKLQkJaWYgKGNyYyAhPSBDUkMzMl9SRVNJRFVBTCkgewotCQkJRFAoTkVUSUZfTVNHX1BST0JFLAotCQkJICAgIm52cmFtX3RibFslZF0gY3JjIHZhbHVlICgweCUwOHgpXG4iLCBpLCBjcmMpOwotCQkJcmMgPSAtRU5PREVWOwotCQkJZ290byB0ZXN0X252cmFtX2V4aXQ7Ci0JCX0KLQl9Ci0KLXRlc3RfbnZyYW1fZXhpdDoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgYm54MnhfdGVzdF9pbnRyKHN0cnVjdCBibngyeCAqYnApCi17Ci0Jc3RydWN0IG1hY19jb25maWd1cmF0aW9uX2NtZCAqY29uZmlnID0gYm54Mnhfc3AoYnAsIG1hY19jb25maWcpOwotCWludCBpLCByYzsKLQotCWlmICghbmV0aWZfcnVubmluZyhicC0+ZGV2KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQljb25maWctPmhkci5sZW5ndGggPSAwOwotCWlmIChDSElQX0lTX0UxKGJwKSkKLQkJLyogdXNlIGxhc3QgdW5pY2FzdCBlbnRyaWVzICovCi0JCWNvbmZpZy0+aGRyLm9mZnNldCA9IChCUF9QT1JUKGJwKSA/IDYzIDogMzEpOwotCWVsc2UKLQkJY29uZmlnLT5oZHIub2Zmc2V0ID0gQlBfRlVOQyhicCk7Ci0JY29uZmlnLT5oZHIuY2xpZW50X2lkID0gYnAtPmZwLT5jbF9pZDsKLQljb25maWctPmhkci5yZXNlcnZlZDEgPSAwOwotCi0JYnAtPnNldF9tYWNfcGVuZGluZysrOwotCXNtcF93bWIoKTsKLQlyYyA9IGJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX1NFVF9NQUMsIDAsCi0JCQkgICBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgbWFjX2NvbmZpZykpLAotCQkJICAgVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19jb25maWcpKSwgMCk7Ci0JaWYgKHJjID09IDApIHsKLQkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKLQkJCWlmICghYnAtPnNldF9tYWNfcGVuZGluZykKLQkJCQlicmVhazsKLQkJCXNtcF9ybWIoKTsKLQkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwKTsKLQkJfQotCQlpZiAoaSA9PSAxMCkKLQkJCXJjID0gLUVOT0RFVjsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X3NlbGZfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBldGh0b29sX3Rlc3QgKmV0ZXN0LCB1NjQgKmJ1ZikKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmIChicC0+cmVjb3Zlcnlfc3RhdGUgIT0gQk5YMlhfUkVDT1ZFUllfRE9ORSkgewotCQlwcmludGsoS0VSTl9FUlIgIkhhbmRsaW5nIHBhcml0eSBlcnJvciByZWNvdmVyeS4gVHJ5IGFnYWluIGxhdGVyXG4iKTsKLQkJZXRlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKLQkJcmV0dXJuOwotCX0KLQotCW1lbXNldChidWYsIDAsIHNpemVvZih1NjQpICogQk5YMlhfTlVNX1RFU1RTKTsKLQotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQotCQlyZXR1cm47Ci0KLQkvKiBvZmZsaW5lIHRlc3RzIGFyZSBub3Qgc3VwcG9ydGVkIGluIE1GIG1vZGUgKi8KLQlpZiAoSVNfRTFITUYoYnApKQotCQlldGVzdC0+ZmxhZ3MgJj0gfkVUSF9URVNUX0ZMX09GRkxJTkU7Ci0KLQlpZiAoZXRlc3QtPmZsYWdzICYgRVRIX1RFU1RfRkxfT0ZGTElORSkgewotCQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwotCQl1MzIgdmFsOwotCQl1OCBsaW5rX3VwOwotCi0JCS8qIHNhdmUgY3VycmVudCB2YWx1ZSBvZiBpbnB1dCBlbmFibGUgZm9yIFRYIHBvcnQgSUYgKi8KLQkJdmFsID0gUkVHX1JEKGJwLCBOSUdfUkVHX0VHUkVTU19VTVAwX0lOX0VOICsgcG9ydCo0KTsKLQkJLyogZGlzYWJsZSBpbnB1dCBmb3IgVFggcG9ydCBJRiAqLwotCQlSRUdfV1IoYnAsIE5JR19SRUdfRUdSRVNTX1VNUDBfSU5fRU4gKyBwb3J0KjQsIDApOwotCi0JCWxpbmtfdXAgPSAoYm54MnhfbGlua190ZXN0KGJwKSA9PSAwKTsKLQkJYm54MnhfbmljX3VubG9hZChicCwgVU5MT0FEX05PUk1BTCk7Ci0JCWJueDJ4X25pY19sb2FkKGJwLCBMT0FEX0RJQUcpOwotCQkvKiB3YWl0IHVudGlsIGxpbmsgc3RhdGUgaXMgcmVzdG9yZWQgKi8KLQkJYm54Mnhfd2FpdF9mb3JfbGluayhicCwgbGlua191cCk7Ci0KLQkJaWYgKGJueDJ4X3Rlc3RfcmVnaXN0ZXJzKGJwKSAhPSAwKSB7Ci0JCQlidWZbMF0gPSAxOwotCQkJZXRlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKLQkJfQotCQlpZiAoYm54MnhfdGVzdF9tZW1vcnkoYnApICE9IDApIHsKLQkJCWJ1ZlsxXSA9IDE7Ci0JCQlldGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwotCQl9Ci0JCWJ1ZlsyXSA9IGJueDJ4X3Rlc3RfbG9vcGJhY2soYnAsIGxpbmtfdXApOwotCQlpZiAoYnVmWzJdICE9IDApCi0JCQlldGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwotCi0JCWJueDJ4X25pY191bmxvYWQoYnAsIFVOTE9BRF9OT1JNQUwpOwotCi0JCS8qIHJlc3RvcmUgaW5wdXQgZm9yIFRYIHBvcnQgSUYgKi8KLQkJUkVHX1dSKGJwLCBOSUdfUkVHX0VHUkVTU19VTVAwX0lOX0VOICsgcG9ydCo0LCB2YWwpOwotCi0JCWJueDJ4X25pY19sb2FkKGJwLCBMT0FEX05PUk1BTCk7Ci0JCS8qIHdhaXQgdW50aWwgbGluayBzdGF0ZSBpcyByZXN0b3JlZCAqLwotCQlibngyeF93YWl0X2Zvcl9saW5rKGJwLCBsaW5rX3VwKTsKLQl9Ci0JaWYgKGJueDJ4X3Rlc3RfbnZyYW0oYnApICE9IDApIHsKLQkJYnVmWzNdID0gMTsKLQkJZXRlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKLQl9Ci0JaWYgKGJueDJ4X3Rlc3RfaW50cihicCkgIT0gMCkgewotCQlidWZbNF0gPSAxOwotCQlldGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwotCX0KLQlpZiAoYnAtPnBvcnQucG1mKQotCQlpZiAoYm54MnhfbGlua190ZXN0KGJwKSAhPSAwKSB7Ci0JCQlidWZbNV0gPSAxOwotCQkJZXRlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKLQkJfQotCi0jaWZkZWYgQk5YMlhfRVhUUkFfREVCVUcKLQlibngyeF9wYW5pY19kdW1wKGJwKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHsKLQlsb25nIG9mZnNldDsKLQlpbnQgc2l6ZTsKLQl1OCBzdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKLX0gYm54MnhfcV9zdGF0c19hcnJbQk5YMlhfTlVNX1FfU1RBVFNdID0gewotLyogMSAqLwl7IFFfU1RBVFNfT0ZGU0VUMzIodG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGkpLCA4LCAiWyVkXTogcnhfYnl0ZXMiIH0sCi0JeyBRX1NUQVRTX09GRlNFVDMyKGVycm9yX2J5dGVzX3JlY2VpdmVkX2hpKSwKLQkJCQkJCTgsICJbJWRdOiByeF9lcnJvcl9ieXRlcyIgfSwKLQl7IFFfU1RBVFNfT0ZGU0VUMzIodG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKSwKLQkJCQkJCTgsICJbJWRdOiByeF91Y2FzdF9wYWNrZXRzIiB9LAotCXsgUV9TVEFUU19PRkZTRVQzMih0b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSksCi0JCQkJCQk4LCAiWyVkXTogcnhfbWNhc3RfcGFja2V0cyIgfSwKLQl7IFFfU1RBVFNfT0ZGU0VUMzIodG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAotCQkJCQkJOCwgIlslZF06IHJ4X2JjYXN0X3BhY2tldHMiIH0sCi0JeyBRX1NUQVRTX09GRlNFVDMyKG5vX2J1ZmZfZGlzY2FyZF9oaSksCTgsICJbJWRdOiByeF9kaXNjYXJkcyIgfSwKLQl7IFFfU1RBVFNfT0ZGU0VUMzIocnhfZXJyX2Rpc2NhcmRfcGt0KSwKLQkJCQkJIDQsICJbJWRdOiByeF9waHlfaXBfZXJyX2Rpc2NhcmRzIn0sCi0JeyBRX1NUQVRTX09GRlNFVDMyKHJ4X3NrYl9hbGxvY19mYWlsZWQpLAotCQkJCQkgNCwgIlslZF06IHJ4X3NrYl9hbGxvY19kaXNjYXJkIiB9LAotCXsgUV9TVEFUU19PRkZTRVQzMihod19jc3VtX2VyciksIDQsICJbJWRdOiByeF9jc3VtX29mZmxvYWRfZXJyb3JzIiB9LAotCi0vKiAxMCAqL3sgUV9TVEFUU19PRkZTRVQzMih0b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSksCTgsICJbJWRdOiB0eF9ieXRlcyIgfSwKLQl7IFFfU1RBVFNfT0ZGU0VUMzIodG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKSwKLQkJCQkJCTgsICJbJWRdOiB0eF91Y2FzdF9wYWNrZXRzIiB9LAotCXsgUV9TVEFUU19PRkZTRVQzMih0b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSksCi0JCQkJCQk4LCAiWyVkXTogdHhfbWNhc3RfcGFja2V0cyIgfSwKLQl7IFFfU1RBVFNfT0ZGU0VUMzIodG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGkpLAotCQkJCQkJOCwgIlslZF06IHR4X2JjYXN0X3BhY2tldHMiIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgewotCWxvbmcgb2Zmc2V0OwotCWludCBzaXplOwotCXUzMiBmbGFnczsKLSNkZWZpbmUgU1RBVFNfRkxBR1NfUE9SVAkJMQotI2RlZmluZSBTVEFUU19GTEFHU19GVU5DCQkyCi0jZGVmaW5lIFNUQVRTX0ZMQUdTX0JPVEgJCShTVEFUU19GTEFHU19GVU5DIHwgU1RBVFNfRkxBR1NfUE9SVCkKLQl1OCBzdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKLX0gYm54Mnhfc3RhdHNfYXJyW0JOWDJYX05VTV9TVEFUU10gPSB7Ci0vKiAxICovCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9ieXRlcyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKGVycm9yX2J5dGVzX3JlY2VpdmVkX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19CT1RILCAicnhfZXJyb3JfYnl0ZXMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF91Y2FzdF9wYWNrZXRzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9tY2FzdF9wYWNrZXRzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9iY2FzdF9wYWNrZXRzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9kb3Qzc3RhdHNmY3NlcnJvcnNfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9jcmNfZXJyb3JzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9kb3Qzc3RhdHNhbGlnbm1lbnRlcnJvcnNfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9hbGlnbl9lcnJvcnMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X2V0aGVyc3RhdHN1bmRlcnNpemVwa3RzX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfdW5kZXJzaXplX3BhY2tldHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X292ZXJzaXplX3BhY2tldHMiIH0sCi0vKiAxMCAqL3sgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9ldGhlcnN0YXRzZnJhZ21lbnRzX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfZnJhZ21lbnRzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9ldGhlcnN0YXRzamFiYmVyc19oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2phYmJlcnMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihub19idWZmX2Rpc2NhcmRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9kaXNjYXJkcyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKG1hY19maWx0ZXJfZGlzY2FyZCksCi0JCQkJNCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2ZpbHRlcmVkX3BhY2tldHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih4eG92ZXJmbG93X2Rpc2NhcmQpLAotCQkJCTQsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9md19kaXNjYXJkcyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKGJyYl9kcm9wX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfYnJiX2Rpc2NhcmQiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihicmJfdHJ1bmNhdGVfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9icmJfdHJ1bmNhdGUiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihwYXVzZV9mcmFtZXNfcmVjZWl2ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9wYXVzZV9mcmFtZXMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X21hY2NvbnRyb2xmcmFtZXNyZWNlaXZlZF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X21hY19jdHJsX2ZyYW1lcyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKG5pZ190aW1lcl9tYXgpLAotCQkJNCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2NvbnN0YW50X3BhdXNlX2V2ZW50cyIgfSwKLS8qIDIwICoveyBTVEFUU19PRkZTRVQzMihyeF9lcnJfZGlzY2FyZF9wa3QpLAotCQkJCTQsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9waHlfaXBfZXJyX2Rpc2NhcmRzIn0sCi0JeyBTVEFUU19PRkZTRVQzMihyeF9za2JfYWxsb2NfZmFpbGVkKSwKLQkJCQk0LCBTVEFUU19GTEFHU19CT1RILCAicnhfc2tiX2FsbG9jX2Rpc2NhcmQiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihod19jc3VtX2VyciksCi0JCQkJNCwgU1RBVFNfRkxBR1NfQk9USCwgInJ4X2NzdW1fb2ZmbG9hZF9lcnJvcnMiIH0sCi0KLQl7IFNUQVRTX09GRlNFVDMyKHRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19CT1RILCAidHhfYnl0ZXMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2lmaGNvdXRiYWRvY3RldHNfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9lcnJvcl9ieXRlcyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKHRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfQk9USCwgInR4X3VjYXN0X3BhY2tldHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfQk9USCwgInR4X21jYXN0X3BhY2tldHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfQk9USCwgInR4X2JjYXN0X3BhY2tldHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2RvdDNzdGF0c2ludGVybmFsbWFjdHJhbnNtaXRlcnJvcnNfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9tYWNfZXJyb3JzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9kb3Qzc3RhdHNjYXJyaWVyc2Vuc2VlcnJvcnNfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9jYXJyaWVyX2Vycm9ycyIgfSwKLS8qIDMwICoveyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2RvdDNzdGF0c3NpbmdsZWNvbGxpc2lvbmZyYW1lc19oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X3NpbmdsZV9jb2xsaXNpb25zIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9kb3Qzc3RhdHNtdWx0aXBsZWNvbGxpc2lvbmZyYW1lc19oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X211bHRpX2NvbGxpc2lvbnMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2RvdDNzdGF0c2RlZmVycmVkdHJhbnNtaXNzaW9uc19oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X2RlZmVycmVkIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9kb3Qzc3RhdHNleGNlc3NpdmVjb2xsaXNpb25zX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfZXhjZXNzX2NvbGxpc2lvbnMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2RvdDNzdGF0c2xhdGVjb2xsaXNpb25zX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfbGF0ZV9jb2xsaXNpb25zIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9ldGhlcnN0YXRzY29sbGlzaW9uc19oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X3RvdGFsX2NvbGxpc2lvbnMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNjRvY3RldHNfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF82NF9ieXRlX3BhY2tldHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNjVvY3RldHN0bzEyN29jdGV0c19oaSksCi0JCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfNjVfdG9fMTI3X2J5dGVfcGFja2V0cyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZXRoZXJzdGF0c3BrdHMxMjhvY3RldHN0bzI1NW9jdGV0c19oaSksCi0JCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfMTI4X3RvXzI1NV9ieXRlX3BhY2tldHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2V0aGVyc3RhdHNwa3RzMjU2b2N0ZXRzdG81MTFvY3RldHNfaGkpLAotCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4XzI1Nl90b181MTFfYnl0ZV9wYWNrZXRzIiB9LAotLyogNDAgKi97IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZXRoZXJzdGF0c3BrdHM1MTJvY3RldHN0bzEwMjNvY3RldHNfaGkpLAotCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4XzUxMl90b18xMDIzX2J5dGVfcGFja2V0cyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKGV0aGVyc3RhdHNwa3RzMTAyNG9jdGV0c3RvMTUyMm9jdGV0c19oaSksCi0JCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfMTAyNF90b18xNTIyX2J5dGVfcGFja2V0cyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKGV0aGVyc3RhdHNwa3Rzb3ZlcjE1MjJvY3RldHNfaGkpLAotCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4XzE1MjNfdG9fOTAyMl9ieXRlX3BhY2tldHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihwYXVzZV9mcmFtZXNfc2VudF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X3BhdXNlX2ZyYW1lcyIgfQotfTsKLQotI2RlZmluZSBJU19QT1JUX1NUQVQoaSkgXAotCSgoYm54Mnhfc3RhdHNfYXJyW2ldLmZsYWdzICYgU1RBVFNfRkxBR1NfQk9USCkgPT0gU1RBVFNfRkxBR1NfUE9SVCkKLSNkZWZpbmUgSVNfRlVOQ19TVEFUKGkpCQkoYm54Mnhfc3RhdHNfYXJyW2ldLmZsYWdzICYgU1RBVFNfRkxBR1NfRlVOQykKLSNkZWZpbmUgSVNfRTFITUZfTU9ERV9TVEFUKGJwKSBcCi0JCQkoSVNfRTFITUYoYnApICYmICEoYnAtPm1zZ19lbmFibGUgJiBCTlgyWF9NU0dfU1RBVFMpKQotCi1zdGF0aWMgaW50IGJueDJ4X2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzdHJpbmdzZXQpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGksIG51bV9zdGF0czsKLQotCXN3aXRjaCAoc3RyaW5nc2V0KSB7Ci0JY2FzZSBFVEhfU1NfU1RBVFM6Ci0JCWlmIChpc19tdWx0aShicCkpIHsKLQkJCW51bV9zdGF0cyA9IEJOWDJYX05VTV9RX1NUQVRTICogYnAtPm51bV9xdWV1ZXM7Ci0JCQlpZiAoIUlTX0UxSE1GX01PREVfU1RBVChicCkpCi0JCQkJbnVtX3N0YXRzICs9IEJOWDJYX05VTV9TVEFUUzsKLQkJfSBlbHNlIHsKLQkJCWlmIChJU19FMUhNRl9NT0RFX1NUQVQoYnApKSB7Ci0JCQkJbnVtX3N0YXRzID0gMDsKLQkJCQlmb3IgKGkgPSAwOyBpIDwgQk5YMlhfTlVNX1NUQVRTOyBpKyspCi0JCQkJCWlmIChJU19GVU5DX1NUQVQoaSkpCi0JCQkJCQludW1fc3RhdHMrKzsKLQkJCX0gZWxzZQotCQkJCW51bV9zdGF0cyA9IEJOWDJYX05VTV9TVEFUUzsKLQkJfQotCQlyZXR1cm4gbnVtX3N0YXRzOwotCi0JY2FzZSBFVEhfU1NfVEVTVDoKLQkJcmV0dXJuIEJOWDJYX05VTV9URVNUUzsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYm54MnhfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0cmluZ3NldCwgdTggKmJ1ZikKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgaSwgaiwgazsKLQotCXN3aXRjaCAoc3RyaW5nc2V0KSB7Ci0JY2FzZSBFVEhfU1NfU1RBVFM6Ci0JCWlmIChpc19tdWx0aShicCkpIHsKLQkJCWsgPSAwOwotCQkJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKLQkJCQlmb3IgKGogPSAwOyBqIDwgQk5YMlhfTlVNX1FfU1RBVFM7IGorKykKLQkJCQkJc3ByaW50ZihidWYgKyAoayArIGopKkVUSF9HU1RSSU5HX0xFTiwKLQkJCQkJCWJueDJ4X3Ffc3RhdHNfYXJyW2pdLnN0cmluZywgaSk7Ci0JCQkJayArPSBCTlgyWF9OVU1fUV9TVEFUUzsKLQkJCX0KLQkJCWlmIChJU19FMUhNRl9NT0RFX1NUQVQoYnApKQotCQkJCWJyZWFrOwotCQkJZm9yIChqID0gMDsgaiA8IEJOWDJYX05VTV9TVEFUUzsgaisrKQotCQkJCXN0cmNweShidWYgKyAoayArIGopKkVUSF9HU1RSSU5HX0xFTiwKLQkJCQkgICAgICAgYm54Mnhfc3RhdHNfYXJyW2pdLnN0cmluZyk7Ci0JCX0gZWxzZSB7Ci0JCQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IEJOWDJYX05VTV9TVEFUUzsgaSsrKSB7Ci0JCQkJaWYgKElTX0UxSE1GX01PREVfU1RBVChicCkgJiYgSVNfUE9SVF9TVEFUKGkpKQotCQkJCQljb250aW51ZTsKLQkJCQlzdHJjcHkoYnVmICsgaipFVEhfR1NUUklOR19MRU4sCi0JCQkJICAgICAgIGJueDJ4X3N0YXRzX2FycltpXS5zdHJpbmcpOwotCQkJCWorKzsKLQkJCX0KLQkJfQotCQlicmVhazsKLQotCWNhc2UgRVRIX1NTX1RFU1Q6Ci0JCW1lbWNweShidWYsIGJueDJ4X3Rlc3RzX3N0cl9hcnIsIHNpemVvZihibngyeF90ZXN0c19zdHJfYXJyKSk7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYm54MnhfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgKmJ1ZikKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1MzIgKmh3X3N0YXRzLCAqb2Zmc2V0OwotCWludCBpLCBqLCBrOwotCi0JaWYgKGlzX211bHRpKGJwKSkgewotCQlrID0gMDsKLQkJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKLQkJCWh3X3N0YXRzID0gKHUzMiAqKSZicC0+ZnBbaV0uZXRoX3Ffc3RhdHM7Ci0JCQlmb3IgKGogPSAwOyBqIDwgQk5YMlhfTlVNX1FfU1RBVFM7IGorKykgewotCQkJCWlmIChibngyeF9xX3N0YXRzX2FycltqXS5zaXplID09IDApIHsKLQkJCQkJLyogc2tpcCB0aGlzIGNvdW50ZXIgKi8KLQkJCQkJYnVmW2sgKyBqXSA9IDA7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCQlvZmZzZXQgPSAoaHdfc3RhdHMgKwotCQkJCQkgIGJueDJ4X3Ffc3RhdHNfYXJyW2pdLm9mZnNldCk7Ci0JCQkJaWYgKGJueDJ4X3Ffc3RhdHNfYXJyW2pdLnNpemUgPT0gNCkgewotCQkJCQkvKiA0LWJ5dGUgY291bnRlciAqLwotCQkJCQlidWZbayArIGpdID0gKHU2NCkgKm9mZnNldDsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCS8qIDgtYnl0ZSBjb3VudGVyICovCi0JCQkJYnVmW2sgKyBqXSA9IEhJTE9fVTY0KCpvZmZzZXQsICoob2Zmc2V0ICsgMSkpOwotCQkJfQotCQkJayArPSBCTlgyWF9OVU1fUV9TVEFUUzsKLQkJfQotCQlpZiAoSVNfRTFITUZfTU9ERV9TVEFUKGJwKSkKLQkJCXJldHVybjsKLQkJaHdfc3RhdHMgPSAodTMyICopJmJwLT5ldGhfc3RhdHM7Ci0JCWZvciAoaiA9IDA7IGogPCBCTlgyWF9OVU1fU1RBVFM7IGorKykgewotCQkJaWYgKGJueDJ4X3N0YXRzX2FycltqXS5zaXplID09IDApIHsKLQkJCQkvKiBza2lwIHRoaXMgY291bnRlciAqLwotCQkJCWJ1ZltrICsgal0gPSAwOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJb2Zmc2V0ID0gKGh3X3N0YXRzICsgYm54Mnhfc3RhdHNfYXJyW2pdLm9mZnNldCk7Ci0JCQlpZiAoYm54Mnhfc3RhdHNfYXJyW2pdLnNpemUgPT0gNCkgewotCQkJCS8qIDQtYnl0ZSBjb3VudGVyICovCi0JCQkJYnVmW2sgKyBqXSA9ICh1NjQpICpvZmZzZXQ7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQkvKiA4LWJ5dGUgY291bnRlciAqLwotCQkJYnVmW2sgKyBqXSA9IEhJTE9fVTY0KCpvZmZzZXQsICoob2Zmc2V0ICsgMSkpOwotCQl9Ci0JfSBlbHNlIHsKLQkJaHdfc3RhdHMgPSAodTMyICopJmJwLT5ldGhfc3RhdHM7Ci0JCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgQk5YMlhfTlVNX1NUQVRTOyBpKyspIHsKLQkJCWlmIChJU19FMUhNRl9NT0RFX1NUQVQoYnApICYmIElTX1BPUlRfU1RBVChpKSkKLQkJCQljb250aW51ZTsKLQkJCWlmIChibngyeF9zdGF0c19hcnJbaV0uc2l6ZSA9PSAwKSB7Ci0JCQkJLyogc2tpcCB0aGlzIGNvdW50ZXIgKi8KLQkJCQlidWZbal0gPSAwOwotCQkJCWorKzsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCW9mZnNldCA9IChod19zdGF0cyArIGJueDJ4X3N0YXRzX2FycltpXS5vZmZzZXQpOwotCQkJaWYgKGJueDJ4X3N0YXRzX2FycltpXS5zaXplID09IDQpIHsKLQkJCQkvKiA0LWJ5dGUgY291bnRlciAqLwotCQkJCWJ1ZltqXSA9ICh1NjQpICpvZmZzZXQ7Ci0JCQkJaisrOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJLyogOC1ieXRlIGNvdW50ZXIgKi8KLQkJCWJ1ZltqXSA9IEhJTE9fVTY0KCpvZmZzZXQsICoob2Zmc2V0ICsgMSkpOwotCQkJaisrOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW50IGJueDJ4X3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGk7Ci0KLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIWJwLT5wb3J0LnBtZikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoZGF0YSA9PSAwKQotCQlkYXRhID0gMjsKLQotCWZvciAoaSA9IDA7IGkgPCAoZGF0YSAqIDIpOyBpKyspIHsKLQkJaWYgKChpICUgMikgPT0gMCkKLQkJCWJueDJ4X3NldF9sZWQoJmJwLT5saW5rX3BhcmFtcywgTEVEX01PREVfT1BFUiwKLQkJCQkgICAgICBTUEVFRF8xMDAwKTsKLQkJZWxzZQotCQkJYm54Mnhfc2V0X2xlZCgmYnAtPmxpbmtfcGFyYW1zLCBMRURfTU9ERV9PRkYsIDApOwotCi0JCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDUwMCk7Ci0JCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCWJyZWFrOwotCX0KLQotCWlmIChicC0+bGlua192YXJzLmxpbmtfdXApCi0JCWJueDJ4X3NldF9sZWQoJmJwLT5saW5rX3BhcmFtcywgTEVEX01PREVfT1BFUiwKLQkJCSAgICAgIGJwLT5saW5rX3ZhcnMubGluZV9zcGVlZCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBibngyeF9ldGh0b29sX29wcyA9IHsKLQkuZ2V0X3NldHRpbmdzCQk9IGJueDJ4X2dldF9zZXR0aW5ncywKLQkuc2V0X3NldHRpbmdzCQk9IGJueDJ4X3NldF9zZXR0aW5ncywKLQkuZ2V0X2RydmluZm8JCT0gYm54MnhfZ2V0X2RydmluZm8sCi0JLmdldF9yZWdzX2xlbgkJPSBibngyeF9nZXRfcmVnc19sZW4sCi0JLmdldF9yZWdzCQk9IGJueDJ4X2dldF9yZWdzLAotCS5nZXRfd29sCQk9IGJueDJ4X2dldF93b2wsCi0JLnNldF93b2wJCT0gYm54Mnhfc2V0X3dvbCwKLQkuZ2V0X21zZ2xldmVsCQk9IGJueDJ4X2dldF9tc2dsZXZlbCwKLQkuc2V0X21zZ2xldmVsCQk9IGJueDJ4X3NldF9tc2dsZXZlbCwKLQkubndheV9yZXNldAkJPSBibngyeF9ud2F5X3Jlc2V0LAotCS5nZXRfbGluawkJPSBibngyeF9nZXRfbGluaywKLQkuZ2V0X2VlcHJvbV9sZW4JCT0gYm54MnhfZ2V0X2VlcHJvbV9sZW4sCi0JLmdldF9lZXByb20JCT0gYm54MnhfZ2V0X2VlcHJvbSwKLQkuc2V0X2VlcHJvbQkJPSBibngyeF9zZXRfZWVwcm9tLAotCS5nZXRfY29hbGVzY2UJCT0gYm54MnhfZ2V0X2NvYWxlc2NlLAotCS5zZXRfY29hbGVzY2UJCT0gYm54Mnhfc2V0X2NvYWxlc2NlLAotCS5nZXRfcmluZ3BhcmFtCQk9IGJueDJ4X2dldF9yaW5ncGFyYW0sCi0JLnNldF9yaW5ncGFyYW0JCT0gYm54Mnhfc2V0X3JpbmdwYXJhbSwKLQkuZ2V0X3BhdXNlcGFyYW0JCT0gYm54MnhfZ2V0X3BhdXNlcGFyYW0sCi0JLnNldF9wYXVzZXBhcmFtCQk9IGJueDJ4X3NldF9wYXVzZXBhcmFtLAotCS5nZXRfcnhfY3N1bQkJPSBibngyeF9nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0JCT0gYm54Mnhfc2V0X3J4X2NzdW0sCi0JLmdldF90eF9jc3VtCQk9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCi0JLnNldF90eF9jc3VtCQk9IGV0aHRvb2xfb3Bfc2V0X3R4X2h3X2NzdW0sCi0JLnNldF9mbGFncwkJPSBibngyeF9zZXRfZmxhZ3MsCi0JLmdldF9mbGFncwkJPSBldGh0b29sX29wX2dldF9mbGFncywKLQkuZ2V0X3NnCQkJPSBldGh0b29sX29wX2dldF9zZywKLQkuc2V0X3NnCQkJPSBldGh0b29sX29wX3NldF9zZywKLQkuZ2V0X3RzbwkJPSBldGh0b29sX29wX2dldF90c28sCi0JLnNldF90c28JCT0gYm54Mnhfc2V0X3RzbywKLQkuc2VsZl90ZXN0CQk9IGJueDJ4X3NlbGZfdGVzdCwKLQkuZ2V0X3NzZXRfY291bnQJCT0gYm54MnhfZ2V0X3NzZXRfY291bnQsCi0JLmdldF9zdHJpbmdzCQk9IGJueDJ4X2dldF9zdHJpbmdzLAotCS5waHlzX2lkCQk9IGJueDJ4X3BoeXNfaWQsCi0JLmdldF9ldGh0b29sX3N0YXRzCT0gYm54MnhfZ2V0X2V0aHRvb2xfc3RhdHMsCi19OwotCi0vKiBlbmQgb2YgZXRodG9vbF9vcHMgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogR2VuZXJhbCBzZXJ2aWNlIGZ1bmN0aW9ucwotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGludCBibngyeF9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IGJueDJ4ICpicCwgcGNpX3Bvd2VyX3Qgc3RhdGUpCi17Ci0JdTE2IHBtY3NyOwotCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQoYnAtPnBkZXYsIGJwLT5wbV9jYXAgKyBQQ0lfUE1fQ1RSTCwgJnBtY3NyKTsKLQotCXN3aXRjaCAoc3RhdGUpIHsKLQljYXNlIFBDSV9EMDoKLQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGJwLT5wZGV2LCBicC0+cG1fY2FwICsgUENJX1BNX0NUUkwsCi0JCQkJICAgICAgKChwbWNzciAmIH5QQ0lfUE1fQ1RSTF9TVEFURV9NQVNLKSB8Ci0JCQkJICAgICAgIFBDSV9QTV9DVFJMX1BNRV9TVEFUVVMpKTsKLQotCQlpZiAocG1jc3IgJiBQQ0lfUE1fQ1RSTF9TVEFURV9NQVNLKQotCQkJLyogZGVsYXkgcmVxdWlyZWQgZHVyaW5nIHRyYW5zaXRpb24gb3V0IG9mIEQzaG90ICovCi0JCQltc2xlZXAoMjApOwotCQlicmVhazsKLQotCWNhc2UgUENJX0QzaG90OgotCQkvKiBJZiB0aGVyZSBhcmUgb3RoZXIgY2xpZW50cyBhYm92ZSBkb24ndAotCQkgICBzaHV0IGRvd24gdGhlIHBvd2VyICovCi0JCWlmIChhdG9taWNfcmVhZCgmYnAtPnBkZXYtPmVuYWJsZV9jbnQpICE9IDEpCi0JCQlyZXR1cm4gMDsKLQkJLyogRG9uJ3Qgc2h1dCBkb3duIHRoZSBwb3dlciBmb3IgZW11bGF0aW9uIGFuZCBGUEdBICovCi0JCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSkKLQkJCXJldHVybiAwOwotCi0JCXBtY3NyICY9IH5QQ0lfUE1fQ1RSTF9TVEFURV9NQVNLOwotCQlwbWNzciB8PSAzOwotCi0JCWlmIChicC0+d29sKQotCQkJcG1jc3IgfD0gUENJX1BNX0NUUkxfUE1FX0VOQUJMRTsKLQotCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoYnAtPnBkZXYsIGJwLT5wbV9jYXAgKyBQQ0lfUE1fQ1RSTCwKLQkJCQkgICAgICBwbWNzcik7Ci0KLQkJLyogTm8gbW9yZSBtZW1vcnkgYWNjZXNzIGFmdGVyIHRoaXMgcG9pbnQgdW50aWwKLQkJKiBkZXZpY2UgaXMgYnJvdWdodCBiYWNrIHRvIEQwLgotCQkqLwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYm54MnhfaGFzX3J4X3dvcmsoc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCkKLXsKLQl1MTYgcnhfY29uc19zYjsKLQotCS8qIFRlbGwgY29tcGlsZXIgdGhhdCBzdGF0dXMgYmxvY2sgZmllbGRzIGNhbiBjaGFuZ2UgKi8KLQliYXJyaWVyKCk7Ci0JcnhfY29uc19zYiA9IGxlMTZfdG9fY3B1KCpmcC0+cnhfY29uc19zYik7Ci0JaWYgKChyeF9jb25zX3NiICYgTUFYX1JDUV9ERVNDX0NOVCkgPT0gTUFYX1JDUV9ERVNDX0NOVCkKLQkJcnhfY29uc19zYisrOwotCXJldHVybiAoZnAtPnJ4X2NvbXBfY29ucyAhPSByeF9jb25zX3NiKTsKLX0KLQotLyoKLSAqIG5ldF9kZXZpY2Ugc2VydmljZSBmdW5jdGlvbnMKLSAqLwotCi1zdGF0aWMgaW50IGJueDJ4X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQotewotCWludCB3b3JrX2RvbmUgPSAwOwotCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IGJueDJ4X2Zhc3RwYXRoLAotCQkJCQkJIG5hcGkpOwotCXN0cnVjdCBibngyeCAqYnAgPSBmcC0+YnA7Ci0KLQl3aGlsZSAoMSkgewotI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKLQkJaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpIHsKLQkJCW5hcGlfY29tcGxldGUobmFwaSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotI2VuZGlmCi0KLQkJaWYgKGJueDJ4X2hhc190eF93b3JrKGZwKSkKLQkJCWJueDJ4X3R4X2ludChmcCk7Ci0KLQkJaWYgKGJueDJ4X2hhc19yeF93b3JrKGZwKSkgewotCQkJd29ya19kb25lICs9IGJueDJ4X3J4X2ludChmcCwgYnVkZ2V0IC0gd29ya19kb25lKTsKLQotCQkJLyogbXVzdCBub3QgY29tcGxldGUgaWYgd2UgY29uc3VtZWQgZnVsbCBidWRnZXQgKi8KLQkJCWlmICh3b3JrX2RvbmUgPj0gYnVkZ2V0KQotCQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogRmFsbCBvdXQgZnJvbSB0aGUgTkFQSSBsb29wIGlmIG5lZWRlZCAqLwotCQlpZiAoIShibngyeF9oYXNfcnhfd29yayhmcCkgfHwgYm54MnhfaGFzX3R4X3dvcmsoZnApKSkgewotCQkJYm54MnhfdXBkYXRlX2Zwc2JfaWR4KGZwKTsKLQkJLyogYm54MnhfaGFzX3J4X3dvcmsoKSByZWFkcyB0aGUgc3RhdHVzIGJsb2NrLCB0aHVzIHdlIG5lZWQKLQkJICogdG8gZW5zdXJlIHRoYXQgc3RhdHVzIGJsb2NrIGluZGljZXMgaGF2ZSBiZWVuIGFjdHVhbGx5IHJlYWQKLQkJICogKGJueDJ4X3VwZGF0ZV9mcHNiX2lkeCkgcHJpb3IgdG8gdGhpcyBjaGVjawotCQkgKiAoYm54MnhfaGFzX3J4X3dvcmspIHNvIHRoYXQgd2Ugd29uJ3Qgd3JpdGUgdGhlICJuZXdlciIKLQkJICogdmFsdWUgb2YgdGhlIHN0YXR1cyBibG9jayB0byBJR1UgKGlmIHRoZXJlIHdhcyBhIERNQSByaWdodAotCQkgKiBhZnRlciBibngyeF9oYXNfcnhfd29yayBhbmQgaWYgdGhlcmUgaXMgbm8gcm1iLCB0aGUgbWVtb3J5Ci0JCSAqIHJlYWRpbmcgKGJueDJ4X3VwZGF0ZV9mcHNiX2lkeCkgbWF5IGJlIHBvc3Rwb25lZCB0byByaWdodAotCQkgKiBiZWZvcmUgYm54MnhfYWNrX3NiKS4gSW4gdGhpcyBjYXNlIHRoZXJlIHdpbGwgbmV2ZXIgYmUKLQkJICogYW5vdGhlciBpbnRlcnJ1cHQgdW50aWwgdGhlcmUgaXMgYW5vdGhlciB1cGRhdGUgb2YgdGhlCi0JCSAqIHN0YXR1cyBibG9jaywgd2hpbGUgdGhlcmUgaXMgc3RpbGwgdW5oYW5kbGVkIHdvcmsuCi0JCSAqLwotCQkJcm1iKCk7Ci0KLQkJCWlmICghKGJueDJ4X2hhc19yeF93b3JrKGZwKSB8fCBibngyeF9oYXNfdHhfd29yayhmcCkpKSB7Ci0JCQkJbmFwaV9jb21wbGV0ZShuYXBpKTsKLQkJCQkvKiBSZS1lbmFibGUgaW50ZXJydXB0cyAqLwotCQkJCWJueDJ4X2Fja19zYihicCwgZnAtPnNiX2lkLCBDU1RPUk1fSUQsCi0JCQkJCSAgICAgbGUxNl90b19jcHUoZnAtPmZwX2NfaWR4KSwKLQkJCQkJICAgICBJR1VfSU5UX05PUCwgMSk7Ci0JCQkJYm54MnhfYWNrX3NiKGJwLCBmcC0+c2JfaWQsIFVTVE9STV9JRCwKLQkJCQkJICAgICBsZTE2X3RvX2NwdShmcC0+ZnBfdV9pZHgpLAotCQkJCQkgICAgIElHVV9JTlRfRU5BQkxFLCAxKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQotCXJldHVybiB3b3JrX2RvbmU7Ci19Ci0KLQotLyogd2Ugc3BsaXQgdGhlIGZpcnN0IEJEIGludG8gaGVhZGVycyBhbmQgZGF0YSBCRHMKLSAqIHRvIGVhc2UgdGhlIHBhaW4gb2Ygb3VyIGZlbGxvdyBtaWNyb2NvZGUgZW5naW5lZXJzCi0gKiB3ZSB1c2Ugb25lIG1hcHBpbmcgZm9yIGJvdGggQkRzCi0gKiBTbyBmYXIgdGhpcyBoYXMgb25seSBiZWVuIG9ic2VydmVkIHRvIGhhcHBlbgotICogaW4gT3RoZXIgT3BlcmF0aW5nIFN5c3RlbXMoVE0pCi0gKi8KLXN0YXRpYyBub2lubGluZSB1MTYgYm54MnhfdHhfc3BsaXQoc3RydWN0IGJueDJ4ICpicCwKLQkJCQkgICBzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwLAotCQkJCSAgIHN0cnVjdCBzd190eF9iZCAqdHhfYnVmLAotCQkJCSAgIHN0cnVjdCBldGhfdHhfc3RhcnRfYmQgKip0eF9iZCwgdTE2IGhsZW4sCi0JCQkJICAgdTE2IGJkX3Byb2QsIGludCBuYmQpCi17Ci0Jc3RydWN0IGV0aF90eF9zdGFydF9iZCAqaF90eF9iZCA9ICp0eF9iZDsKLQlzdHJ1Y3QgZXRoX3R4X2JkICpkX3R4X2JkOwotCWRtYV9hZGRyX3QgbWFwcGluZzsKLQlpbnQgb2xkX2xlbiA9IGxlMTZfdG9fY3B1KGhfdHhfYmQtPm5ieXRlcyk7Ci0KLQkvKiBmaXJzdCBmaXggZmlyc3QgQkQgKi8KLQloX3R4X2JkLT5uYmQgPSBjcHVfdG9fbGUxNihuYmQpOwotCWhfdHhfYmQtPm5ieXRlcyA9IGNwdV90b19sZTE2KGhsZW4pOwotCi0JRFAoTkVUSUZfTVNHX1RYX1FVRVVFRCwJIlRTTyBzcGxpdCBoZWFkZXIgc2l6ZSBpcyAlZCAiCi0JICAgIigleDoleCkgbmJkICVkXG4iLCBoX3R4X2JkLT5uYnl0ZXMsIGhfdHhfYmQtPmFkZHJfaGksCi0JICAgaF90eF9iZC0+YWRkcl9sbywgaF90eF9iZC0+bmJkKTsKLQotCS8qIG5vdyBnZXQgYSBuZXcgZGF0YSBCRAotCSAqIChhZnRlciB0aGUgcGJkKSBhbmQgZmlsbCBpdCAqLwotCWJkX3Byb2QgPSBUWF9CRChORVhUX1RYX0lEWChiZF9wcm9kKSk7Ci0JZF90eF9iZCA9ICZmcC0+dHhfZGVzY19yaW5nW2JkX3Byb2RdLnJlZ19iZDsKLQotCW1hcHBpbmcgPSBISUxPX1U2NChsZTMyX3RvX2NwdShoX3R4X2JkLT5hZGRyX2hpKSwKLQkJCSAgIGxlMzJfdG9fY3B1KGhfdHhfYmQtPmFkZHJfbG8pKSArIGhsZW47Ci0KLQlkX3R4X2JkLT5hZGRyX2hpID0gY3B1X3RvX2xlMzIoVTY0X0hJKG1hcHBpbmcpKTsKLQlkX3R4X2JkLT5hZGRyX2xvID0gY3B1X3RvX2xlMzIoVTY0X0xPKG1hcHBpbmcpKTsKLQlkX3R4X2JkLT5uYnl0ZXMgPSBjcHVfdG9fbGUxNihvbGRfbGVuIC0gaGxlbik7Ci0KLQkvKiB0aGlzIG1hcmtzIHRoZSBCRCBhcyBvbmUgdGhhdCBoYXMgbm8gaW5kaXZpZHVhbCBtYXBwaW5nICovCi0JdHhfYnVmLT5mbGFncyB8PSBCTlgyWF9UU09fU1BMSVRfQkQ7Ci0KLQlEUChORVRJRl9NU0dfVFhfUVVFVUVELAotCSAgICJUU08gc3BsaXQgZGF0YSBzaXplIGlzICVkICgleDoleClcbiIsCi0JICAgZF90eF9iZC0+bmJ5dGVzLCBkX3R4X2JkLT5hZGRyX2hpLCBkX3R4X2JkLT5hZGRyX2xvKTsKLQotCS8qIHVwZGF0ZSB0eF9iZCAqLwotCSp0eF9iZCA9IChzdHJ1Y3QgZXRoX3R4X3N0YXJ0X2JkICopZF90eF9iZDsKLQotCXJldHVybiBiZF9wcm9kOwotfQotCi1zdGF0aWMgaW5saW5lIHUxNiBibngyeF9jc3VtX2ZpeCh1bnNpZ25lZCBjaGFyICp0X2hlYWRlciwgdTE2IGNzdW0sIHM4IGZpeCkKLXsKLQlpZiAoZml4ID4gMCkKLQkJY3N1bSA9ICh1MTYpIH5jc3VtX2ZvbGQoY3N1bV9zdWIoY3N1bSwKLQkJCQljc3VtX3BhcnRpYWwodF9oZWFkZXIgLSBmaXgsIGZpeCwgMCkpKTsKLQotCWVsc2UgaWYgKGZpeCA8IDApCi0JCWNzdW0gPSAodTE2KSB+Y3N1bV9mb2xkKGNzdW1fYWRkKGNzdW0sCi0JCQkJY3N1bV9wYXJ0aWFsKHRfaGVhZGVyLCAtZml4LCAwKSkpOwotCi0JcmV0dXJuIHN3YWIxNihjc3VtKTsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgYm54MnhfeG1pdF90eXBlKHN0cnVjdCBibngyeCAqYnAsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JdTMyIHJjOwotCi0JaWYgKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1BBUlRJQUwpCi0JCXJjID0gWE1JVF9QTEFJTjsKLQotCWVsc2UgewotCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkgewotCQkJcmMgPSBYTUlUX0NTVU1fVjY7Ci0JCQlpZiAoaXB2Nl9oZHIoc2tiKS0+bmV4dGhkciA9PSBJUFBST1RPX1RDUCkKLQkJCQlyYyB8PSBYTUlUX0NTVU1fVENQOwotCi0JCX0gZWxzZSB7Ci0JCQlyYyA9IFhNSVRfQ1NVTV9WNDsKLQkJCWlmIChpcF9oZHIoc2tiKS0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApCi0JCQkJcmMgfD0gWE1JVF9DU1VNX1RDUDsKLQkJfQotCX0KLQotCWlmIChza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlICYgU0tCX0dTT19UQ1BWNCkKLQkJcmMgfD0gKFhNSVRfR1NPX1Y0IHwgWE1JVF9DU1VNX1Y0IHwgWE1JVF9DU1VNX1RDUCk7Ci0KLQllbHNlIGlmIChza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlICYgU0tCX0dTT19UQ1BWNikKLQkJcmMgfD0gKFhNSVRfR1NPX1Y2IHwgWE1JVF9DU1VNX1RDUCB8IFhNSVRfQ1NVTV9WNik7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLSNpZiAoTUFYX1NLQl9GUkFHUyA+PSBNQVhfRkVUQ0hfQkQgLSAzKQotLyogY2hlY2sgaWYgcGFja2V0IHJlcXVpcmVzIGxpbmVhcml6YXRpb24gKHBhY2tldCBpcyB0b28gZnJhZ21lbnRlZCkKLSAgIG5vIG5lZWQgdG8gY2hlY2sgZnJhZ21lbnRhdGlvbiBpZiBwYWdlIHNpemUgPiA4SyAodGhlcmUgd2lsbCBiZSBubwotICAgdmlvbGF0aW9uIHRvIEZXIHJlc3RyaWN0aW9ucykgKi8KLXN0YXRpYyBpbnQgYm54MnhfcGt0X3JlcV9saW4oc3RydWN0IGJueDJ4ICpicCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgdTMyIHhtaXRfdHlwZSkKLXsKLQlpbnQgdG9fY29weSA9IDA7Ci0JaW50IGhsZW4gPSAwOwotCWludCBmaXJzdF9iZF9zeiA9IDA7Ci0KLQkvKiAzID0gMSAoZm9yIGxpbmVhciBkYXRhIEJEKSArIDIgKGZvciBQQkQgYW5kIGxhc3QgQkQpICovCi0JaWYgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPj0gKE1BWF9GRVRDSF9CRCAtIDMpKSB7Ci0KLQkJaWYgKHhtaXRfdHlwZSAmIFhNSVRfR1NPKSB7Ci0JCQl1bnNpZ25lZCBzaG9ydCBsc29fbXNzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZTsKLQkJCS8qIENoZWNrIGlmIExTTyBwYWNrZXQgbmVlZHMgdG8gYmUgY29waWVkOgotCQkJICAgMyA9IDEgKGZvciBoZWFkZXJzIEJEKSArIDIgKGZvciBQQkQgYW5kIGxhc3QgQkQpICovCi0JCQlpbnQgd25kX3NpemUgPSBNQVhfRkVUQ0hfQkQgLSAzOwotCQkJLyogTnVtYmVyIG9mIHdpbmRvd3MgdG8gY2hlY2sgKi8KLQkJCWludCBudW1fd25kcyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgLSB3bmRfc2l6ZTsKLQkJCWludCB3bmRfaWR4ID0gMDsKLQkJCWludCBmcmFnX2lkeCA9IDA7Ci0JCQl1MzIgd25kX3N1bSA9IDA7Ci0KLQkJCS8qIEhlYWRlcnMgbGVuZ3RoICovCi0JCQlobGVuID0gKGludCkoc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSAtIHNrYi0+ZGF0YSkgKwotCQkJCXRjcF9oZHJsZW4oc2tiKTsKLQotCQkJLyogQW1vdW50IG9mIGRhdGEgKHcvbyBoZWFkZXJzKSBvbiBsaW5lYXIgcGFydCBvZiBTS0IqLwotCQkJZmlyc3RfYmRfc3ogPSBza2JfaGVhZGxlbihza2IpIC0gaGxlbjsKLQotCQkJd25kX3N1bSAgPSBmaXJzdF9iZF9zejsKLQotCQkJLyogQ2FsY3VsYXRlIHRoZSBmaXJzdCBzdW0gLSBpdCdzIHNwZWNpYWwgKi8KLQkJCWZvciAoZnJhZ19pZHggPSAwOyBmcmFnX2lkeCA8IHduZF9zaXplIC0gMTsgZnJhZ19pZHgrKykKLQkJCQl3bmRfc3VtICs9Ci0JCQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbZnJhZ19pZHhdLnNpemU7Ci0KLQkJCS8qIElmIHRoZXJlIHdhcyBkYXRhIG9uIGxpbmVhciBza2IgZGF0YSAtIGNoZWNrIGl0ICovCi0JCQlpZiAoZmlyc3RfYmRfc3ogPiAwKSB7Ci0JCQkJaWYgKHVubGlrZWx5KHduZF9zdW0gPCBsc29fbXNzKSkgewotCQkJCQl0b19jb3B5ID0gMTsKLQkJCQkJZ290byBleGl0X2xibDsKLQkJCQl9Ci0KLQkJCQl3bmRfc3VtIC09IGZpcnN0X2JkX3N6OwotCQkJfQotCi0JCQkvKiBPdGhlcnMgYXJlIGVhc2llcjogcnVuIHRocm91Z2ggdGhlIGZyYWcgbGlzdCBhbmQKLQkJCSAgIGNoZWNrIGFsbCB3aW5kb3dzICovCi0JCQlmb3IgKHduZF9pZHggPSAwOyB3bmRfaWR4IDw9IG51bV93bmRzOyB3bmRfaWR4KyspIHsKLQkJCQl3bmRfc3VtICs9Ci0JCQkgIHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3Nbd25kX2lkeCArIHduZF9zaXplIC0gMV0uc2l6ZTsKLQotCQkJCWlmICh1bmxpa2VseSh3bmRfc3VtIDwgbHNvX21zcykpIHsKLQkJCQkJdG9fY29weSA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQl3bmRfc3VtIC09Ci0JCQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3Nbd25kX2lkeF0uc2l6ZTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIGluIG5vbi1MU08gdG9vIGZyYWdtZW50ZWQgcGFja2V0IHNob3VsZCBhbHdheXMKLQkJCSAgIGJlIGxpbmVhcml6ZWQgKi8KLQkJCXRvX2NvcHkgPSAxOwotCQl9Ci0JfQotCi1leGl0X2xibDoKLQlpZiAodW5saWtlbHkodG9fY29weSkpCi0JCURQKE5FVElGX01TR19UWF9RVUVVRUQsCi0JCSAgICJMaW5lYXJpemF0aW9uIElTIFJFUVVJUkVEIGZvciAlcyBwYWNrZXQuICIKLQkJICAgIm51bV9mcmFncyAlZCAgaGxlbiAlZCAgZmlyc3RfYmRfc3ogJWRcbiIsCi0JCSAgICh4bWl0X3R5cGUgJiBYTUlUX0dTTykgPyAiTFNPIiA6ICJub24tTFNPIiwKLQkJICAgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncywgaGxlbiwgZmlyc3RfYmRfc3opOwotCi0JcmV0dXJuIHRvX2NvcHk7Ci19Ci0jZW5kaWYKLQotLyogY2FsbGVkIHdpdGggbmV0aWZfdHhfbG9jawotICogYm54MnhfdHhfaW50KCkgcnVucyB3aXRob3V0IG5ldGlmX3R4X2xvY2sgdW5sZXNzIGl0IG5lZWRzIHRvIGNhbGwKLSAqIG5ldGlmX3dha2VfcXVldWUoKQotICovCi1zdGF0aWMgbmV0ZGV2X3R4X3QgYm54Mnhfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnA7Ci0Jc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwotCXN0cnVjdCBzd190eF9iZCAqdHhfYnVmOwotCXN0cnVjdCBldGhfdHhfc3RhcnRfYmQgKnR4X3N0YXJ0X2JkOwotCXN0cnVjdCBldGhfdHhfYmQgKnR4X2RhdGFfYmQsICp0b3RhbF9wa3RfYmQgPSBOVUxMOwotCXN0cnVjdCBldGhfdHhfcGFyc2VfYmQgKnBiZCA9IE5VTEw7Ci0JdTE2IHBrdF9wcm9kLCBiZF9wcm9kOwotCWludCBuYmQsIGZwX2luZGV4OwotCWRtYV9hZGRyX3QgbWFwcGluZzsKLQl1MzIgeG1pdF90eXBlID0gYm54MnhfeG1pdF90eXBlKGJwLCBza2IpOwotCWludCBpOwotCXU4IGhsZW4gPSAwOwotCV9fbGUxNiBwa3Rfc2l6ZSA9IDA7Ci0Jc3RydWN0IGV0aGhkciAqZXRoOwotCXU4IG1hY190eXBlID0gVU5JQ0FTVF9BRERSRVNTOwotCi0jaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgotCWlmICh1bmxpa2VseShicC0+cGFuaWMpKQotCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Ci0jZW5kaWYKLQotCWZwX2luZGV4ID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7Ci0JdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIGZwX2luZGV4KTsKLQotCWZwID0gJmJwLT5mcFtmcF9pbmRleF07Ci0KLQlpZiAodW5saWtlbHkoYm54MnhfdHhfYXZhaWwoZnApIDwgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAzKSkpIHsKLQkJZnAtPmV0aF9xX3N0YXRzLmRyaXZlcl94b2ZmKys7Ci0JCW5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTsKLQkJQk5YMlhfRVJSKCJCVUchIFR4IHJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlIVxuIik7Ci0JCXJldHVybiBORVRERVZfVFhfQlVTWTsKLQl9Ci0KLQlEUChORVRJRl9NU0dfVFhfUVVFVUVELCAiU0tCOiBzdW1tZWQgJXggIHByb3RvY29sICV4ICBwcm90b2NvbCgleCwleCkiCi0JICAgIiAgZ3NvIHR5cGUgJXggIHhtaXRfdHlwZSAleFxuIiwKLQkgICBza2ItPmlwX3N1bW1lZCwgc2tiLT5wcm90b2NvbCwgaXB2Nl9oZHIoc2tiKS0+bmV4dGhkciwKLQkgICBpcF9oZHIoc2tiKS0+cHJvdG9jb2wsIHNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUsIHhtaXRfdHlwZSk7Ci0KLQlldGggPSAoc3RydWN0IGV0aGhkciAqKXNrYi0+ZGF0YTsKLQotCS8qIHNldCBmbGFnIGFjY29yZGluZyB0byBwYWNrZXQgdHlwZSAoVU5JQ0FTVF9BRERSRVNTIGlzIGRlZmF1bHQpKi8KLQlpZiAodW5saWtlbHkoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZXRoLT5oX2Rlc3QpKSkgewotCQlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoZXRoLT5oX2Rlc3QpKQotCQkJbWFjX3R5cGUgPSBCUk9BRENBU1RfQUREUkVTUzsKLQkJZWxzZQotCQkJbWFjX3R5cGUgPSBNVUxUSUNBU1RfQUREUkVTUzsKLQl9Ci0KLSNpZiAoTUFYX1NLQl9GUkFHUyA+PSBNQVhfRkVUQ0hfQkQgLSAzKQotCS8qIEZpcnN0LCBjaGVjayBpZiB3ZSBuZWVkIHRvIGxpbmVhcml6ZSB0aGUgc2tiIChkdWUgdG8gRlcKLQkgICByZXN0cmljdGlvbnMpLiBObyBuZWVkIHRvIGNoZWNrIGZyYWdtZW50YXRpb24gaWYgcGFnZSBzaXplID4gOEsKLQkgICAodGhlcmUgd2lsbCBiZSBubyB2aW9sYXRpb24gdG8gRlcgcmVzdHJpY3Rpb25zKSAqLwotCWlmIChibngyeF9wa3RfcmVxX2xpbihicCwgc2tiLCB4bWl0X3R5cGUpKSB7Ci0JCS8qIFN0YXRpc3RpY3Mgb2YgbGluZWFyaXphdGlvbiAqLwotCQlicC0+bGluX2NudCsrOwotCQlpZiAoc2tiX2xpbmVhcml6ZShza2IpICE9IDApIHsKLQkJCURQKE5FVElGX01TR19UWF9RVUVVRUQsICJTS0IgbGluZWFyaXphdGlvbiBmYWlsZWQgLSAiCi0JCQkgICAic2lsZW50bHkgZHJvcHBpbmcgdGhpcyBTS0JcbiIpOwotCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJCXJldHVybiBORVRERVZfVFhfT0s7Ci0JCX0KLQl9Ci0jZW5kaWYKLQotCS8qCi0JUGxlYXNlIHJlYWQgY2FyZWZ1bGx5LiBGaXJzdCB3ZSB1c2Ugb25lIEJEIHdoaWNoIHdlIG1hcmsgYXMgc3RhcnQsCi0JdGhlbiB3ZSBoYXZlIGEgcGFyc2luZyBpbmZvIEJEICh1c2VkIGZvciBUU08gb3IgeHN1bSksCi0JYW5kIG9ubHkgdGhlbiB3ZSBoYXZlIHRoZSByZXN0IG9mIHRoZSBUU08gQkRzLgotCShkb24ndCBmb3JnZXQgdG8gbWFyayB0aGUgbGFzdCBvbmUgYXMgbGFzdCwKLQlhbmQgdG8gdW5tYXAgb25seSBBRlRFUiB5b3Ugd3JpdGUgdG8gdGhlIEJEIC4uLikKLQlBbmQgYWJvdmUgYWxsLCBhbGwgcGRiIHNpemVzIGFyZSBpbiB3b3JkcyAtIE5PVCBEV09SRFMhCi0JKi8KLQotCXBrdF9wcm9kID0gZnAtPnR4X3BrdF9wcm9kKys7Ci0JYmRfcHJvZCA9IFRYX0JEKGZwLT50eF9iZF9wcm9kKTsKLQotCS8qIGdldCBhIHR4X2J1ZiBhbmQgZmlyc3QgQkQgKi8KLQl0eF9idWYgPSAmZnAtPnR4X2J1Zl9yaW5nW1RYX0JEKHBrdF9wcm9kKV07Ci0JdHhfc3RhcnRfYmQgPSAmZnAtPnR4X2Rlc2NfcmluZ1tiZF9wcm9kXS5zdGFydF9iZDsKLQotCXR4X3N0YXJ0X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCA9IEVUSF9UWF9CRF9GTEFHU19TVEFSVF9CRDsKLQl0eF9zdGFydF9iZC0+Z2VuZXJhbF9kYXRhID0gIChtYWNfdHlwZSA8PAotCQkJCQlFVEhfVFhfU1RBUlRfQkRfRVRIX0FERFJfVFlQRV9TSElGVCk7Ci0JLyogaGVhZGVyIG5iZCAqLwotCXR4X3N0YXJ0X2JkLT5nZW5lcmFsX2RhdGEgfD0gKDEgPDwgRVRIX1RYX1NUQVJUX0JEX0hEUl9OQkRTX1NISUZUKTsKLQotCS8qIHJlbWVtYmVyIHRoZSBmaXJzdCBCRCBvZiB0aGUgcGFja2V0ICovCi0JdHhfYnVmLT5maXJzdF9iZCA9IGZwLT50eF9iZF9wcm9kOwotCXR4X2J1Zi0+c2tiID0gc2tiOwotCXR4X2J1Zi0+ZmxhZ3MgPSAwOwotCi0JRFAoTkVUSUZfTVNHX1RYX1FVRVVFRCwKLQkgICAic2VuZGluZyBwa3QgJXUgQCVwICBuZXh0X2lkeCAldSAgYmQgJXUgQCVwXG4iLAotCSAgIHBrdF9wcm9kLCB0eF9idWYsIGZwLT50eF9wa3RfcHJvZCwgYmRfcHJvZCwgdHhfc3RhcnRfYmQpOwotCi0jaWZkZWYgQkNNX1ZMQU4KLQlpZiAoKGJwLT52bGdycCAhPSBOVUxMKSAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikgJiYKLQkgICAgKGJwLT5mbGFncyAmIEhXX1ZMQU5fVFhfRkxBRykpIHsKLQkJdHhfc3RhcnRfYmQtPnZsYW4gPSBjcHVfdG9fbGUxNih2bGFuX3R4X3RhZ19nZXQoc2tiKSk7Ci0JCXR4X3N0YXJ0X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCB8PSBFVEhfVFhfQkRfRkxBR1NfVkxBTl9UQUc7Ci0JfSBlbHNlCi0jZW5kaWYKLQkJdHhfc3RhcnRfYmQtPnZsYW4gPSBjcHVfdG9fbGUxNihwa3RfcHJvZCk7Ci0KLQkvKiB0dXJuIG9uIHBhcnNpbmcgYW5kIGdldCBhIEJEICovCi0JYmRfcHJvZCA9IFRYX0JEKE5FWFRfVFhfSURYKGJkX3Byb2QpKTsKLQlwYmQgPSAmZnAtPnR4X2Rlc2NfcmluZ1tiZF9wcm9kXS5wYXJzZV9iZDsKLQotCW1lbXNldChwYmQsIDAsIHNpemVvZihzdHJ1Y3QgZXRoX3R4X3BhcnNlX2JkKSk7Ci0KLQlpZiAoeG1pdF90eXBlICYgWE1JVF9DU1VNKSB7Ci0JCWhsZW4gPSAoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgLSBza2ItPmRhdGEpIC8gMjsKLQotCQkvKiBmb3Igbm93IE5TIGZsYWcgaXMgbm90IHVzZWQgaW4gTGludXggKi8KLQkJcGJkLT5nbG9iYWxfZGF0YSA9Ci0JCQkoaGxlbiB8ICgoc2tiLT5wcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF84MDIxUSkpIDw8Ci0JCQkJIEVUSF9UWF9QQVJTRV9CRF9MTENfU05BUF9FTl9TSElGVCkpOwotCi0JCXBiZC0+aXBfaGxlbiA9IChza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpIC0KLQkJCQlza2JfbmV0d29ya19oZWFkZXIoc2tiKSkgLyAyOwotCi0JCWhsZW4gKz0gcGJkLT5pcF9obGVuICsgdGNwX2hkcmxlbihza2IpIC8gMjsKLQotCQlwYmQtPnRvdGFsX2hsZW4gPSBjcHVfdG9fbGUxNihobGVuKTsKLQkJaGxlbiA9IGhsZW4qMjsKLQotCQl0eF9zdGFydF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgfD0gRVRIX1RYX0JEX0ZMQUdTX0w0X0NTVU07Ci0KLQkJaWYgKHhtaXRfdHlwZSAmIFhNSVRfQ1NVTV9WNCkKLQkJCXR4X3N0YXJ0X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCB8PQotCQkJCQkJRVRIX1RYX0JEX0ZMQUdTX0lQX0NTVU07Ci0JCWVsc2UKLQkJCXR4X3N0YXJ0X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCB8PQotCQkJCQkJRVRIX1RYX0JEX0ZMQUdTX0lQVjY7Ci0KLQkJaWYgKHhtaXRfdHlwZSAmIFhNSVRfQ1NVTV9UQ1ApIHsKLQkJCXBiZC0+dGNwX3BzZXVkb19jc3VtID0gc3dhYjE2KHRjcF9oZHIoc2tiKS0+Y2hlY2spOwotCi0JCX0gZWxzZSB7Ci0JCQlzOCBmaXggPSBTS0JfQ1NfT0ZGKHNrYik7IC8qIHNpZ25lZCEgKi8KLQotCQkJcGJkLT5nbG9iYWxfZGF0YSB8PSBFVEhfVFhfUEFSU0VfQkRfVURQX0NTX0ZMRzsKLQotCQkJRFAoTkVUSUZfTVNHX1RYX1FVRVVFRCwKLQkJCSAgICJobGVuICVkICBmaXggJWQgIGNzdW0gYmVmb3JlIGZpeCAleFxuIiwKLQkJCSAgIGxlMTZfdG9fY3B1KHBiZC0+dG90YWxfaGxlbiksIGZpeCwgU0tCX0NTKHNrYikpOwotCi0JCQkvKiBIVyBidWc6IGZpeHVwIHRoZSBDU1VNICovCi0JCQlwYmQtPnRjcF9wc2V1ZG9fY3N1bSA9Ci0JCQkJYm54MnhfY3N1bV9maXgoc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSwKLQkJCQkJICAgICAgIFNLQl9DUyhza2IpLCBmaXgpOwotCi0JCQlEUChORVRJRl9NU0dfVFhfUVVFVUVELCAiY3N1bSBhZnRlciBmaXggJXhcbiIsCi0JCQkgICBwYmQtPnRjcF9wc2V1ZG9fY3N1bSk7Ci0JCX0KLQl9Ci0KLQltYXBwaW5nID0gZG1hX21hcF9zaW5nbGUoJmJwLT5wZGV2LT5kZXYsIHNrYi0+ZGF0YSwKLQkJCQkgc2tiX2hlYWRsZW4oc2tiKSwgRE1BX1RPX0RFVklDRSk7Ci0KLQl0eF9zdGFydF9iZC0+YWRkcl9oaSA9IGNwdV90b19sZTMyKFU2NF9ISShtYXBwaW5nKSk7Ci0JdHhfc3RhcnRfYmQtPmFkZHJfbG8gPSBjcHVfdG9fbGUzMihVNjRfTE8obWFwcGluZykpOwotCW5iZCA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAyOyAvKiBzdGFydF9iZCArIHBiZCArIGZyYWdzICovCi0JdHhfc3RhcnRfYmQtPm5iZCA9IGNwdV90b19sZTE2KG5iZCk7Ci0JdHhfc3RhcnRfYmQtPm5ieXRlcyA9IGNwdV90b19sZTE2KHNrYl9oZWFkbGVuKHNrYikpOwotCXBrdF9zaXplID0gdHhfc3RhcnRfYmQtPm5ieXRlczsKLQotCURQKE5FVElGX01TR19UWF9RVUVVRUQsICJmaXJzdCBiZCBAJXAgIGFkZHIgKCV4OiV4KSAgbmJkICVkIgotCSAgICIgIG5ieXRlcyAlZCAgZmxhZ3MgJXggIHZsYW4gJXhcbiIsCi0JICAgdHhfc3RhcnRfYmQsIHR4X3N0YXJ0X2JkLT5hZGRyX2hpLCB0eF9zdGFydF9iZC0+YWRkcl9sbywKLQkgICBsZTE2X3RvX2NwdSh0eF9zdGFydF9iZC0+bmJkKSwgbGUxNl90b19jcHUodHhfc3RhcnRfYmQtPm5ieXRlcyksCi0JICAgdHhfc3RhcnRfYmQtPmJkX2ZsYWdzLmFzX2JpdGZpZWxkLCBsZTE2X3RvX2NwdSh0eF9zdGFydF9iZC0+dmxhbikpOwotCi0JaWYgKHhtaXRfdHlwZSAmIFhNSVRfR1NPKSB7Ci0KLQkJRFAoTkVUSUZfTVNHX1RYX1FVRVVFRCwKLQkJICAgIlRTTyBwYWNrZXQgbGVuICVkICBobGVuICVkICB0b3RhbCBsZW4gJWQgIHRzbyBzaXplICVkXG4iLAotCQkgICBza2ItPmxlbiwgaGxlbiwgc2tiX2hlYWRsZW4oc2tiKSwKLQkJICAgc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSk7Ci0KLQkJdHhfc3RhcnRfYmQtPmJkX2ZsYWdzLmFzX2JpdGZpZWxkIHw9IEVUSF9UWF9CRF9GTEFHU19TV19MU087Ci0KLQkJaWYgKHVubGlrZWx5KHNrYl9oZWFkbGVuKHNrYikgPiBobGVuKSkKLQkJCWJkX3Byb2QgPSBibngyeF90eF9zcGxpdChicCwgZnAsIHR4X2J1ZiwgJnR4X3N0YXJ0X2JkLAotCQkJCQkJIGhsZW4sIGJkX3Byb2QsICsrbmJkKTsKLQotCQlwYmQtPmxzb19tc3MgPSBjcHVfdG9fbGUxNihza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplKTsKLQkJcGJkLT50Y3Bfc2VuZF9zZXEgPSBzd2FiMzIodGNwX2hkcihza2IpLT5zZXEpOwotCQlwYmQtPnRjcF9mbGFncyA9IHBiZF90Y3BfZmxhZ3Moc2tiKTsKLQotCQlpZiAoeG1pdF90eXBlICYgWE1JVF9HU09fVjQpIHsKLQkJCXBiZC0+aXBfaWQgPSBzd2FiMTYoaXBfaGRyKHNrYiktPmlkKTsKLQkJCXBiZC0+dGNwX3BzZXVkb19jc3VtID0KLQkJCQlzd2FiMTYofmNzdW1fdGNwdWRwX21hZ2ljKGlwX2hkcihza2IpLT5zYWRkciwKLQkJCQkJCQkgIGlwX2hkcihza2IpLT5kYWRkciwKLQkJCQkJCQkgIDAsIElQUFJPVE9fVENQLCAwKSk7Ci0KLQkJfSBlbHNlCi0JCQlwYmQtPnRjcF9wc2V1ZG9fY3N1bSA9Ci0JCQkJc3dhYjE2KH5jc3VtX2lwdjZfbWFnaWMoJmlwdjZfaGRyKHNrYiktPnNhZGRyLAotCQkJCQkJCSZpcHY2X2hkcihza2IpLT5kYWRkciwKLQkJCQkJCQkwLCBJUFBST1RPX1RDUCwgMCkpOwotCi0JCXBiZC0+Z2xvYmFsX2RhdGEgfD0gRVRIX1RYX1BBUlNFX0JEX1BTRVVET19DU19XSVRIT1VUX0xFTjsKLQl9Ci0JdHhfZGF0YV9iZCA9IChzdHJ1Y3QgZXRoX3R4X2JkICopdHhfc3RhcnRfYmQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgaSsrKSB7Ci0JCXNrYl9mcmFnX3QgKmZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKLQotCQliZF9wcm9kID0gVFhfQkQoTkVYVF9UWF9JRFgoYmRfcHJvZCkpOwotCQl0eF9kYXRhX2JkID0gJmZwLT50eF9kZXNjX3JpbmdbYmRfcHJvZF0ucmVnX2JkOwotCQlpZiAodG90YWxfcGt0X2JkID09IE5VTEwpCi0JCQl0b3RhbF9wa3RfYmQgPSAmZnAtPnR4X2Rlc2NfcmluZ1tiZF9wcm9kXS5yZWdfYmQ7Ci0KLQkJbWFwcGluZyA9IGRtYV9tYXBfcGFnZSgmYnAtPnBkZXYtPmRldiwgZnJhZy0+cGFnZSwKLQkJCQkgICAgICAgZnJhZy0+cGFnZV9vZmZzZXQsCi0JCQkJICAgICAgIGZyYWctPnNpemUsIERNQV9UT19ERVZJQ0UpOwotCi0JCXR4X2RhdGFfYmQtPmFkZHJfaGkgPSBjcHVfdG9fbGUzMihVNjRfSEkobWFwcGluZykpOwotCQl0eF9kYXRhX2JkLT5hZGRyX2xvID0gY3B1X3RvX2xlMzIoVTY0X0xPKG1hcHBpbmcpKTsKLQkJdHhfZGF0YV9iZC0+bmJ5dGVzID0gY3B1X3RvX2xlMTYoZnJhZy0+c2l6ZSk7Ci0JCWxlMTZfYWRkX2NwdSgmcGt0X3NpemUsIGZyYWctPnNpemUpOwotCi0JCURQKE5FVElGX01TR19UWF9RVUVVRUQsCi0JCSAgICJmcmFnICVkICBiZCBAJXAgIGFkZHIgKCV4OiV4KSAgbmJ5dGVzICVkXG4iLAotCQkgICBpLCB0eF9kYXRhX2JkLCB0eF9kYXRhX2JkLT5hZGRyX2hpLCB0eF9kYXRhX2JkLT5hZGRyX2xvLAotCQkgICBsZTE2X3RvX2NwdSh0eF9kYXRhX2JkLT5uYnl0ZXMpKTsKLQl9Ci0KLQlEUChORVRJRl9NU0dfVFhfUVVFVUVELCAibGFzdCBiZCBAJXBcbiIsIHR4X2RhdGFfYmQpOwotCi0JYmRfcHJvZCA9IFRYX0JEKE5FWFRfVFhfSURYKGJkX3Byb2QpKTsKLQotCS8qIG5vdyBzZW5kIGEgdHggZG9vcmJlbGwsIGNvdW50aW5nIHRoZSBuZXh0IEJECi0JICogaWYgdGhlIHBhY2tldCBjb250YWlucyBvciBlbmRzIHdpdGggaXQKLQkgKi8KLQlpZiAoVFhfQkRfUE9GRihiZF9wcm9kKSA8IG5iZCkKLQkJbmJkKys7Ci0KLQlpZiAodG90YWxfcGt0X2JkICE9IE5VTEwpCi0JCXRvdGFsX3BrdF9iZC0+dG90YWxfcGt0X2J5dGVzID0gcGt0X3NpemU7Ci0KLQlpZiAocGJkKQotCQlEUChORVRJRl9NU0dfVFhfUVVFVUVELAotCQkgICAiUEJEIEAlcCAgaXBfZGF0YSAleCAgaXBfaGxlbiAldSAgaXBfaWQgJXUgIGxzb19tc3MgJXUiCi0JCSAgICIgIHRjcF9mbGFncyAleCAgeHN1bSAleCAgc2VxICV1ICBobGVuICV1XG4iLAotCQkgICBwYmQsIHBiZC0+Z2xvYmFsX2RhdGEsIHBiZC0+aXBfaGxlbiwgcGJkLT5pcF9pZCwKLQkJICAgcGJkLT5sc29fbXNzLCBwYmQtPnRjcF9mbGFncywgcGJkLT50Y3BfcHNldWRvX2NzdW0sCi0JCSAgIHBiZC0+dGNwX3NlbmRfc2VxLCBsZTE2X3RvX2NwdShwYmQtPnRvdGFsX2hsZW4pKTsKLQotCURQKE5FVElGX01TR19UWF9RVUVVRUQsICJkb29yYmVsbDogbmJkICVkICBiZCAldVxuIiwgbmJkLCBiZF9wcm9kKTsKLQotCS8qCi0JICogTWFrZSBzdXJlIHRoYXQgdGhlIEJEIGRhdGEgaXMgdXBkYXRlZCBiZWZvcmUgdXBkYXRpbmcgdGhlIHByb2R1Y2VyCi0JICogc2luY2UgRlcgbWlnaHQgcmVhZCB0aGUgQkQgcmlnaHQgYWZ0ZXIgdGhlIHByb2R1Y2VyIGlzIHVwZGF0ZWQuCi0JICogVGhpcyBpcyBvbmx5IGFwcGxpY2FibGUgZm9yIHdlYWstb3JkZXJlZCBtZW1vcnkgbW9kZWwgYXJjaHMgc3VjaAotCSAqIGFzIElBLTY0LiBUaGUgZm9sbG93aW5nIGJhcnJpZXIgaXMgYWxzbyBtYW5kYXRvcnkgc2luY2UgRlcgd2lsbAotCSAqIGFzc3VtZXMgcGFja2V0cyBtdXN0IGhhdmUgQkRzLgotCSAqLwotCXdtYigpOwotCi0JZnAtPnR4X2RiLmRhdGEucHJvZCArPSBuYmQ7Ci0JYmFycmllcigpOwotCURPT1JCRUxMKGJwLCBmcC0+aW5kZXgsIGZwLT50eF9kYi5yYXcpOwotCi0JbW1pb3diKCk7Ci0KLQlmcC0+dHhfYmRfcHJvZCArPSBuYmQ7Ci0KLQlpZiAodW5saWtlbHkoYm54MnhfdHhfYXZhaWwoZnApIDwgTUFYX1NLQl9GUkFHUyArIDMpKSB7Ci0JCW5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTsKLQotCQkvKiBwYWlyZWQgbWVtb3J5IGJhcnJpZXIgaXMgaW4gYm54MnhfdHhfaW50KCksIHdlIGhhdmUgdG8ga2VlcAotCQkgKiBvcmRlcmluZyBvZiBzZXRfYml0KCkgaW4gbmV0aWZfdHhfc3RvcF9xdWV1ZSgpIGFuZCByZWFkIG9mCi0JCSAqIGZwLT5iZF90eF9jb25zICovCi0JCXNtcF9tYigpOwotCi0JCWZwLT5ldGhfcV9zdGF0cy5kcml2ZXJfeG9mZisrOwotCQlpZiAoYm54MnhfdHhfYXZhaWwoZnApID49IE1BWF9TS0JfRlJBR1MgKyAzKQotCQkJbmV0aWZfdHhfd2FrZV9xdWV1ZSh0eHEpOwotCX0KLQlmcC0+dHhfcGt0Kys7Ci0KLQlyZXR1cm4gTkVUREVWX1RYX09LOwotfQotCi0vKiBjYWxsZWQgd2l0aCBydG5sX2xvY2sgKi8KLXN0YXRpYyBpbnQgYm54Mnhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQotCWJueDJ4X3NldF9wb3dlcl9zdGF0ZShicCwgUENJX0QwKTsKLQotCWlmICghYm54MnhfcmVzZXRfaXNfZG9uZShicCkpIHsKLQkJZG8gewotCQkJLyogUmVzZXQgTUNQIG1haWwgYm94IHNlcXVlbmNlIGlmIHRoZXJlIGlzIG9uIGdvaW5nCi0JCQkgKiByZWNvdmVyeQotCQkJICovCi0JCQlicC0+Zndfc2VxID0gMDsKLQotCQkJLyogSWYgaXQncyB0aGUgZmlyc3QgZnVuY3Rpb24gdG8gbG9hZCBhbmQgcmVzZXQgZG9uZQotCQkJICogaXMgc3RpbGwgbm90IGNsZWFyZWQgaXQgbWF5IG1lYW4gdGhhdC4gV2UgZG9uJ3QKLQkJCSAqIGNoZWNrIHRoZSBhdHRlbnRpb24gc3RhdGUgaGVyZSBiZWNhdXNlIGl0IG1heSBoYXZlCi0JCQkgKiBhbHJlYWR5IGJlZW4gY2xlYXJlZCBieSBhICJjb21tb24iIHJlc2V0IGJ1dCB3ZQotCQkJICogc2hlbGwgcHJvY2VlZCB3aXRoICJwcm9jZXNzIGtpbGwiIGFueXdheS4KLQkJCSAqLwotCQkJaWYgKChibngyeF9nZXRfbG9hZF9jbnQoYnApID09IDApICYmCi0JCQkJYm54MnhfdHJ5bG9ja19od19sb2NrKGJwLAotCQkJCUhXX0xPQ0tfUkVTT1VSQ0VfUkVTRVJWRURfMDgpICYmCi0JCQkJKCFibngyeF9sZWFkZXJfcmVzZXQoYnApKSkgewotCQkJCURQKE5FVElGX01TR19IVywgIlJlY292ZXJlZCBpbiBvcGVuXG4iKTsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJYm54Mnhfc2V0X3Bvd2VyX3N0YXRlKGJwLCBQQ0lfRDNob3QpOwotCi0JCQlwcmludGsoS0VSTl9FUlIiJXM6IFJlY292ZXJ5IGZsb3cgaGFzbid0IGJlZW4gcHJvcGVybHkiCi0JCQkiIGNvbXBsZXRlZCB5ZXQuIFRyeSBhZ2FpbiBsYXRlci4gSWYgdSBzdGlsbCBzZWUgdGhpcyIKLQkJCSIgbWVzc2FnZSBhZnRlciBhIGZldyByZXRyaWVzIHRoZW4gcG93ZXIgY3ljbGUgaXMiCi0JCQkiIHJlcXVpcmVkLlxuIiwgYnAtPmRldi0+bmFtZSk7Ci0KLQkJCXJldHVybiAtRUFHQUlOOwotCQl9IHdoaWxlICgwKTsKLQl9Ci0KLQlicC0+cmVjb3Zlcnlfc3RhdGUgPSBCTlgyWF9SRUNPVkVSWV9ET05FOwotCi0JcmV0dXJuIGJueDJ4X25pY19sb2FkKGJwLCBMT0FEX09QRU4pOwotfQotCi0vKiBjYWxsZWQgd2l0aCBydG5sX2xvY2sgKi8KLXN0YXRpYyBpbnQgYm54MnhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCS8qIFVubG9hZCB0aGUgZHJpdmVyLCByZWxlYXNlIElSUXMgKi8KLQlibngyeF9uaWNfdW5sb2FkKGJwLCBVTkxPQURfQ0xPU0UpOwotCWJueDJ4X3NldF9wb3dlcl9zdGF0ZShicCwgUENJX0QzaG90KTsKLQotCXJldHVybiAwOwotfQotCi0vKiBjYWxsZWQgd2l0aCBuZXRpZl90eF9sb2NrIGZyb20gZGV2X21jYXN0LmMgKi8KLXN0YXRpYyB2b2lkIGJueDJ4X3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0JdTMyIHJ4X21vZGUgPSBCTlgyWF9SWF9NT0RFX05PUk1BTDsKLQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwotCi0JaWYgKGJwLT5zdGF0ZSAhPSBCTlgyWF9TVEFURV9PUEVOKSB7Ci0JCURQKE5FVElGX01TR19JRlVQLCAic3RhdGUgaXMgJXgsIHJldHVybmluZ1xuIiwgYnAtPnN0YXRlKTsKLQkJcmV0dXJuOwotCX0KLQotCURQKE5FVElGX01TR19JRlVQLCAiZGV2LT5mbGFncyA9ICV4XG4iLCBkZXYtPmZsYWdzKTsKLQotCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCi0JCXJ4X21vZGUgPSBCTlgyWF9SWF9NT0RFX1BST01JU0M7Ci0KLQllbHNlIGlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwKLQkJICgobmV0ZGV2X21jX2NvdW50KGRldikgPiBCTlgyWF9NQVhfTVVMVElDQVNUKSAmJgotCQkgIENISVBfSVNfRTEoYnApKSkKLQkJcnhfbW9kZSA9IEJOWDJYX1JYX01PREVfQUxMTVVMVEk7Ci0KLQllbHNlIHsgLyogc29tZSBtdWx0aWNhc3RzICovCi0JCWlmIChDSElQX0lTX0UxKGJwKSkgewotCQkJaW50IGksIG9sZCwgb2Zmc2V0OwotCQkJc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKLQkJCXN0cnVjdCBtYWNfY29uZmlndXJhdGlvbl9jbWQgKmNvbmZpZyA9Ci0JCQkJCQlibngyeF9zcChicCwgbWNhc3RfY29uZmlnKTsKLQotCQkJaSA9IDA7Ci0JCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihoYSwgZGV2KSB7Ci0JCQkJY29uZmlnLT5jb25maWdfdGFibGVbaV0uCi0JCQkJCWNhbV9lbnRyeS5tc2JfbWFjX2FkZHIgPQotCQkJCQlzd2FiMTYoKih1MTYgKikmaGEtPmFkZHJbMF0pOwotCQkJCWNvbmZpZy0+Y29uZmlnX3RhYmxlW2ldLgotCQkJCQljYW1fZW50cnkubWlkZGxlX21hY19hZGRyID0KLQkJCQkJc3dhYjE2KCoodTE2ICopJmhhLT5hZGRyWzJdKTsKLQkJCQljb25maWctPmNvbmZpZ190YWJsZVtpXS4KLQkJCQkJY2FtX2VudHJ5LmxzYl9tYWNfYWRkciA9Ci0JCQkJCXN3YWIxNigqKHUxNiAqKSZoYS0+YWRkcls0XSk7Ci0JCQkJY29uZmlnLT5jb25maWdfdGFibGVbaV0uY2FtX2VudHJ5LmZsYWdzID0KLQkJCQkJCQljcHVfdG9fbGUxNihwb3J0KTsKLQkJCQljb25maWctPmNvbmZpZ190YWJsZVtpXS4KLQkJCQkJdGFyZ2V0X3RhYmxlX2VudHJ5LmZsYWdzID0gMDsKLQkJCQljb25maWctPmNvbmZpZ190YWJsZVtpXS50YXJnZXRfdGFibGVfZW50cnkuCi0JCQkJCWNsaWVudHNfYml0X3ZlY3RvciA9Ci0JCQkJCQljcHVfdG9fbGUzMigxIDw8IEJQX0xfSUQoYnApKTsKLQkJCQljb25maWctPmNvbmZpZ190YWJsZVtpXS4KLQkJCQkJdGFyZ2V0X3RhYmxlX2VudHJ5LnZsYW5faWQgPSAwOwotCi0JCQkJRFAoTkVUSUZfTVNHX0lGVVAsCi0JCQkJICAgInNldHRpbmcgTUNBU1RbJWRdICglMDR4OiUwNHg6JTA0eClcbiIsIGksCi0JCQkJICAgY29uZmlnLT5jb25maWdfdGFibGVbaV0uCi0JCQkJCQljYW1fZW50cnkubXNiX21hY19hZGRyLAotCQkJCSAgIGNvbmZpZy0+Y29uZmlnX3RhYmxlW2ldLgotCQkJCQkJY2FtX2VudHJ5Lm1pZGRsZV9tYWNfYWRkciwKLQkJCQkgICBjb25maWctPmNvbmZpZ190YWJsZVtpXS4KLQkJCQkJCWNhbV9lbnRyeS5sc2JfbWFjX2FkZHIpOwotCQkJCWkrKzsKLQkJCX0KLQkJCW9sZCA9IGNvbmZpZy0+aGRyLmxlbmd0aDsKLQkJCWlmIChvbGQgPiBpKSB7Ci0JCQkJZm9yICg7IGkgPCBvbGQ7IGkrKykgewotCQkJCQlpZiAoQ0FNX0lTX0lOVkFMSUQoY29uZmlnLT4KLQkJCQkJCQkgICBjb25maWdfdGFibGVbaV0pKSB7Ci0JCQkJCQkvKiBhbHJlYWR5IGludmFsaWRhdGVkICovCi0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCQkvKiBpbnZhbGlkYXRlICovCi0JCQkJCUNBTV9JTlZBTElEQVRFKGNvbmZpZy0+Ci0JCQkJCQkgICAgICAgY29uZmlnX3RhYmxlW2ldKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSkKLQkJCQlvZmZzZXQgPSBCTlgyWF9NQVhfRU1VTF9NVUxUSSooMSArIHBvcnQpOwotCQkJZWxzZQotCQkJCW9mZnNldCA9IEJOWDJYX01BWF9NVUxUSUNBU1QqKDEgKyBwb3J0KTsKLQotCQkJY29uZmlnLT5oZHIubGVuZ3RoID0gaTsKLQkJCWNvbmZpZy0+aGRyLm9mZnNldCA9IG9mZnNldDsKLQkJCWNvbmZpZy0+aGRyLmNsaWVudF9pZCA9IGJwLT5mcC0+Y2xfaWQ7Ci0JCQljb25maWctPmhkci5yZXNlcnZlZDEgPSAwOwotCi0JCQlicC0+c2V0X21hY19wZW5kaW5nKys7Ci0JCQlzbXBfd21iKCk7Ci0KLQkJCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX1NFVF9NQUMsIDAsCi0JCQkJICAgVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1jYXN0X2NvbmZpZykpLAotCQkJCSAgIFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBtY2FzdF9jb25maWcpKSwKLQkJCQkgICAgICAwKTsKLQkJfSBlbHNlIHsgLyogRTFIICovCi0JCQkvKiBBY2NlcHQgb25lIG9yIG1vcmUgbXVsdGljYXN0cyAqLwotCQkJc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKLQkJCXUzMiBtY19maWx0ZXJbTUNfSEFTSF9TSVpFXTsKLQkJCXUzMiBjcmMsIGJpdCwgcmVnaWR4OwotCQkJaW50IGk7Ci0KLQkJCW1lbXNldChtY19maWx0ZXIsIDAsIDQgKiBNQ19IQVNIX1NJWkUpOwotCi0JCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihoYSwgZGV2KSB7Ci0JCQkJRFAoTkVUSUZfTVNHX0lGVVAsICJBZGRpbmcgbWNhc3QgTUFDOiAlcE1cbiIsCi0JCQkJICAgaGEtPmFkZHIpOwotCi0JCQkJY3JjID0gY3JjMzJjX2xlKDAsIGhhLT5hZGRyLCBFVEhfQUxFTik7Ci0JCQkJYml0ID0gKGNyYyA+PiAyNCkgJiAweGZmOwotCQkJCXJlZ2lkeCA9IGJpdCA+PiA1OwotCQkJCWJpdCAmPSAweDFmOwotCQkJCW1jX2ZpbHRlcltyZWdpZHhdIHw9ICgxIDw8IGJpdCk7Ci0JCQl9Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCBNQ19IQVNIX1NJWkU7IGkrKykKLQkJCQlSRUdfV1IoYnAsIE1DX0hBU0hfT0ZGU0VUKGJwLCBpKSwKLQkJCQkgICAgICAgbWNfZmlsdGVyW2ldKTsKLQkJfQotCX0KLQotCWJwLT5yeF9tb2RlID0gcnhfbW9kZTsKLQlibngyeF9zZXRfc3Rvcm1fcnhfbW9kZShicCk7Ci19Ci0KLS8qIGNhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLwotc3RhdGljIGludCBibngyeF9jaGFuZ2VfbWFjX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKLXsKLQlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOwotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKCh1OCAqKShhZGRyLT5zYV9kYXRhKSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOwotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJaWYgKENISVBfSVNfRTEoYnApKQotCQkJYm54Mnhfc2V0X2V0aF9tYWNfYWRkcl9lMShicCwgMSk7Ci0JCWVsc2UKLQkJCWJueDJ4X3NldF9ldGhfbWFjX2FkZHJfZTFoKGJwLCAxKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogY2FsbGVkIHdpdGggcnRubF9sb2NrICovCi1zdGF0aWMgaW50IGJueDJ4X21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcHJ0YWQsCi0JCQkgICBpbnQgZGV2YWQsIHUxNiBhZGRyKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXUxNiB2YWx1ZTsKLQlpbnQgcmM7Ci0JdTMyIHBoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUoYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKTsKLQotCURQKE5FVElGX01TR19MSU5LLCAibWRpb19yZWFkOiBwcnRhZCAweCV4LCBkZXZhZCAweCV4LCBhZGRyIDB4JXhcbiIsCi0JICAgcHJ0YWQsIGRldmFkLCBhZGRyKTsKLQotCWlmIChwcnRhZCAhPSBicC0+bWRpby5wcnRhZCkgewotCQlEUChORVRJRl9NU0dfTElOSywgInBydGFkIG1pc3NtYXRjaCAoY21kOjB4JXggIT0gYnA6MHgleClcbiIsCi0JCSAgIHBydGFkLCBicC0+bWRpby5wcnRhZCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIFRoZSBIVyBleHBlY3RzIGRpZmZlcmVudCBkZXZhZCBpZiBDTDIyIGlzIHVzZWQgKi8KLQlkZXZhZCA9IChkZXZhZCA9PSBNRElPX0RFVkFEX05PTkUpID8gREVGQVVMVF9QSFlfREVWX0FERFIgOiBkZXZhZDsKLQotCWJueDJ4X2FjcXVpcmVfcGh5X2xvY2soYnApOwotCXJjID0gYm54MnhfY2w0NV9yZWFkKGJwLCBCUF9QT1JUKGJwKSwgcGh5X3R5cGUsIHBydGFkLAotCQkJICAgICBkZXZhZCwgYWRkciwgJnZhbHVlKTsKLQlibngyeF9yZWxlYXNlX3BoeV9sb2NrKGJwKTsKLQlEUChORVRJRl9NU0dfTElOSywgIm1kaW9fcmVhZF92YWwgMHgleCByYyA9IDB4JXhcbiIsIHZhbHVlLCByYyk7Ci0KLQlpZiAoIXJjKQotCQlyYyA9IHZhbHVlOwotCXJldHVybiByYzsKLX0KLQotLyogY2FsbGVkIHdpdGggcnRubF9sb2NrICovCi1zdGF0aWMgaW50IGJueDJ4X21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBydGFkLCBpbnQgZGV2YWQsCi0JCQkgICAgdTE2IGFkZHIsIHUxNiB2YWx1ZSkKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUoYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKTsKLQlpbnQgcmM7Ci0KLQlEUChORVRJRl9NU0dfTElOSywgIm1kaW9fd3JpdGU6IHBydGFkIDB4JXgsIGRldmFkIDB4JXgsIGFkZHIgMHgleCwiCi0JCQkgICAiIHZhbHVlIDB4JXhcbiIsIHBydGFkLCBkZXZhZCwgYWRkciwgdmFsdWUpOwotCi0JaWYgKHBydGFkICE9IGJwLT5tZGlvLnBydGFkKSB7Ci0JCURQKE5FVElGX01TR19MSU5LLCAicHJ0YWQgbWlzc21hdGNoIChjbWQ6MHgleCAhPSBicDoweCV4KVxuIiwKLQkJICAgcHJ0YWQsIGJwLT5tZGlvLnBydGFkKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogVGhlIEhXIGV4cGVjdHMgZGlmZmVyZW50IGRldmFkIGlmIENMMjIgaXMgdXNlZCAqLwotCWRldmFkID0gKGRldmFkID09IE1ESU9fREVWQURfTk9ORSkgPyBERUZBVUxUX1BIWV9ERVZfQUREUiA6IGRldmFkOwotCi0JYm54MnhfYWNxdWlyZV9waHlfbG9jayhicCk7Ci0JcmMgPSBibngyeF9jbDQ1X3dyaXRlKGJwLCBCUF9QT1JUKGJwKSwgZXh0X3BoeV90eXBlLCBwcnRhZCwKLQkJCSAgICAgIGRldmFkLCBhZGRyLCB2YWx1ZSk7Ci0JYm54MnhfcmVsZWFzZV9waHlfbG9jayhicCk7Ci0JcmV0dXJuIHJjOwotfQotCi0vKiBjYWxsZWQgd2l0aCBydG5sX2xvY2sgKi8KLXN0YXRpYyBpbnQgYm54MnhfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG1paV9pb2N0bF9kYXRhICptZGlvID0gaWZfbWlpKGlmcik7Ci0KLQlEUChORVRJRl9NU0dfTElOSywgImlvY3RsOiBwaHkgaWQgMHgleCwgcmVnIDB4JXgsIHZhbF9pbiAweCV4XG4iLAotCSAgIG1kaW8tPnBoeV9pZCwgbWRpby0+cmVnX251bSwgbWRpby0+dmFsX2luKTsKLQotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQotCQlyZXR1cm4gLUVBR0FJTjsKLQotCXJldHVybiBtZGlvX21paV9pb2N0bCgmYnAtPm1kaW8sIG1kaW8sIGNtZCk7Ci19Ci0KLS8qIGNhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLwotc3RhdGljIGludCBibngyeF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCByYyA9IDA7Ci0KLQlpZiAoYnAtPnJlY292ZXJ5X3N0YXRlICE9IEJOWDJYX1JFQ09WRVJZX0RPTkUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJIYW5kbGluZyBwYXJpdHkgZXJyb3IgcmVjb3ZlcnkuIFRyeSBhZ2FpbiBsYXRlclxuIik7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQotCWlmICgobmV3X210dSA+IEVUSF9NQVhfSlVNQk9fUEFDS0VUX1NJWkUpIHx8Ci0JICAgICgobmV3X210dSArIEVUSF9ITEVOKSA8IEVUSF9NSU5fUEFDS0VUX1NJWkUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIFRoaXMgZG9lcyBub3QgcmFjZSB3aXRoIHBhY2tldCBhbGxvY2F0aW9uCi0JICogYmVjYXVzZSB0aGUgYWN0dWFsIGFsbG9jIHNpemUgaXMKLQkgKiBvbmx5IHVwZGF0ZWQgYXMgcGFydCBvZiBsb2FkCi0JICovCi0JZGV2LT5tdHUgPSBuZXdfbXR1OwotCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQlibngyeF9uaWNfdW5sb2FkKGJwLCBVTkxPQURfTk9STUFMKTsKLQkJcmMgPSBibngyeF9uaWNfbG9hZChicCwgTE9BRF9OT1JNQUwpOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0jaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgotCWlmICghYnAtPnBhbmljKQotCQlibngyeF9wYW5pYygpOwotI2VuZGlmCi0JLyogVGhpcyBhbGxvd3MgdGhlIG5ldGlmIHRvIGJlIHNodXRkb3duIGdyYWNlZnVsbHkgYmVmb3JlIHJlc2V0dGluZyAqLwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYnAtPnJlc2V0X3Rhc2ssIDApOwotfQotCi0jaWZkZWYgQkNNX1ZMQU4KLS8qIGNhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLwotc3RhdGljIHZvaWQgYm54Mnhfdmxhbl9yeF9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgIHN0cnVjdCB2bGFuX2dyb3VwICp2bGdycCkKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWJwLT52bGdycCA9IHZsZ3JwOwotCi0JLyogU2V0IGZsYWdzIGFjY29yZGluZyB0byB0aGUgcmVxdWlyZWQgY2FwYWJpbGl0aWVzICovCi0JYnAtPmZsYWdzICY9IH4oSFdfVkxBTl9SWF9GTEFHIHwgSFdfVkxBTl9UWF9GTEFHKTsKLQotCWlmIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19WTEFOX1RYKQotCQlicC0+ZmxhZ3MgfD0gSFdfVkxBTl9UWF9GTEFHOwotCi0JaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fUlgpCi0JCWJwLT5mbGFncyB8PSBIV19WTEFOX1JYX0ZMQUc7Ci0KLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQotCQlibngyeF9zZXRfY2xpZW50X2NvbmZpZyhicCk7Ci19Ci0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLXN0YXRpYyB2b2lkIHBvbGxfYm54Mngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWRpc2FibGVfaXJxKGJwLT5wZGV2LT5pcnEpOwotCWJueDJ4X2ludGVycnVwdChicC0+cGRldi0+aXJxLCBkZXYpOwotCWVuYWJsZV9pcnEoYnAtPnBkZXYtPmlycSk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBibngyeF9uZXRkZXZfb3BzID0gewotCS5uZG9fb3BlbgkJPSBibngyeF9vcGVuLAotCS5uZG9fc3RvcAkJPSBibngyeF9jbG9zZSwKLQkubmRvX3N0YXJ0X3htaXQJCT0gYm54Mnhfc3RhcnRfeG1pdCwKLQkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IGJueDJ4X3NldF9yeF9tb2RlLAotCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gYm54MnhfY2hhbmdlX21hY19hZGRyLAotCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAotCS5uZG9fZG9faW9jdGwJCT0gYm54MnhfaW9jdGwsCi0JLm5kb19jaGFuZ2VfbXR1CQk9IGJueDJ4X2NoYW5nZV9tdHUsCi0JLm5kb190eF90aW1lb3V0CQk9IGJueDJ4X3R4X3RpbWVvdXQsCi0jaWZkZWYgQkNNX1ZMQU4KLQkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIJPSBibngyeF92bGFuX3J4X3JlZ2lzdGVyLAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQkubmRvX3BvbGxfY29udHJvbGxlcgk9IHBvbGxfYm54MngsCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGJueDJ4X2luaXRfZGV2KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBibngyeCAqYnA7Ci0JaW50IHJjOwotCi0JU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKLQlicCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlicC0+ZGV2ID0gZGV2OwotCWJwLT5wZGV2ID0gcGRldjsKLQlicC0+ZmxhZ3MgPSAwOwotCWJwLT5mdW5jID0gUENJX0ZVTkMocGRldi0+ZGV2Zm4pOwotCi0JcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKLQlpZiAocmMpIHsKLQkJZGV2X2VycigmYnAtPnBkZXYtPmRldiwKLQkJCSJDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UsIGFib3J0aW5nXG4iKTsKLQkJZ290byBlcnJfb3V0OwotCX0KLQotCWlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAwKSAmIElPUkVTT1VSQ0VfTUVNKSkgewotCQlkZXZfZXJyKCZicC0+cGRldi0+ZGV2LAotCQkJIkNhbm5vdCBmaW5kIFBDSSBkZXZpY2UgYmFzZSBhZGRyZXNzLCBhYm9ydGluZ1xuIik7Ci0JCXJjID0gLUVOT0RFVjsKLQkJZ290byBlcnJfb3V0X2Rpc2FibGU7Ci0JfQotCi0JaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDIpICYgSU9SRVNPVVJDRV9NRU0pKSB7Ci0JCWRldl9lcnIoJmJwLT5wZGV2LT5kZXYsICJDYW5ub3QgZmluZCBzZWNvbmQgUENJIGRldmljZSIKLQkJICAgICAgICIgYmFzZSBhZGRyZXNzLCBhYm9ydGluZ1xuIik7Ci0JCXJjID0gLUVOT0RFVjsKLQkJZ290byBlcnJfb3V0X2Rpc2FibGU7Ci0JfQotCi0JaWYgKGF0b21pY19yZWFkKCZwZGV2LT5lbmFibGVfY250KSA9PSAxKSB7Ci0JCXJjID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTU9EVUxFX05BTUUpOwotCQlpZiAocmMpIHsKLQkJCWRldl9lcnIoJmJwLT5wZGV2LT5kZXYsCi0JCQkJIkNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlcywgYWJvcnRpbmdcbiIpOwotCQkJZ290byBlcnJfb3V0X2Rpc2FibGU7Ci0JCX0KLQotCQlwY2lfc2V0X21hc3RlcihwZGV2KTsKLQkJcGNpX3NhdmVfc3RhdGUocGRldik7Ci0JfQotCi0JYnAtPnBtX2NhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9QTSk7Ci0JaWYgKGJwLT5wbV9jYXAgPT0gMCkgewotCQlkZXZfZXJyKCZicC0+cGRldi0+ZGV2LAotCQkJIkNhbm5vdCBmaW5kIHBvd2VyIG1hbmFnZW1lbnQgY2FwYWJpbGl0eSwgYWJvcnRpbmdcbiIpOwotCQlyYyA9IC1FSU87Ci0JCWdvdG8gZXJyX291dF9yZWxlYXNlOwotCX0KLQotCWJwLT5wY2llX2NhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9FWFApOwotCWlmIChicC0+cGNpZV9jYXAgPT0gMCkgewotCQlkZXZfZXJyKCZicC0+cGRldi0+ZGV2LAotCQkJIkNhbm5vdCBmaW5kIFBDSSBFeHByZXNzIGNhcGFiaWxpdHksIGFib3J0aW5nXG4iKTsKLQkJcmMgPSAtRUlPOwotCQlnb3RvIGVycl9vdXRfcmVsZWFzZTsKLQl9Ci0KLQlpZiAoZG1hX3NldF9tYXNrKCZwZGV2LT5kZXYsIERNQV9CSVRfTUFTSyg2NCkpID09IDApIHsKLQkJYnAtPmZsYWdzIHw9IFVTSU5HX0RBQ19GTEFHOwotCQlpZiAoZG1hX3NldF9jb2hlcmVudF9tYXNrKCZwZGV2LT5kZXYsIERNQV9CSVRfTUFTSyg2NCkpICE9IDApIHsKLQkJCWRldl9lcnIoJmJwLT5wZGV2LT5kZXYsICJkbWFfc2V0X2NvaGVyZW50X21hc2siCi0JCQkgICAgICAgIiBmYWlsZWQsIGFib3J0aW5nXG4iKTsKLQkJCXJjID0gLUVJTzsKLQkJCWdvdG8gZXJyX291dF9yZWxlYXNlOwotCQl9Ci0KLQl9IGVsc2UgaWYgKGRtYV9zZXRfbWFzaygmcGRldi0+ZGV2LCBETUFfQklUX01BU0soMzIpKSAhPSAwKSB7Ci0JCWRldl9lcnIoJmJwLT5wZGV2LT5kZXYsCi0JCQkiU3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgRE1BLCBhYm9ydGluZ1xuIik7Ci0JCXJjID0gLUVJTzsKLQkJZ290byBlcnJfb3V0X3JlbGVhc2U7Ci0JfQotCi0JZGV2LT5tZW1fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7Ci0JZGV2LT5iYXNlX2FkZHIgPSBkZXYtPm1lbV9zdGFydDsKLQlkZXYtPm1lbV9lbmQgPSBwY2lfcmVzb3VyY2VfZW5kKHBkZXYsIDApOwotCi0JZGV2LT5pcnEgPSBwZGV2LT5pcnE7Ci0KLQlicC0+cmVndmlldyA9IHBjaV9pb3JlbWFwX2JhcihwZGV2LCAwKTsKLQlpZiAoIWJwLT5yZWd2aWV3KSB7Ci0JCWRldl9lcnIoJmJwLT5wZGV2LT5kZXYsCi0JCQkiQ2Fubm90IG1hcCByZWdpc3RlciBzcGFjZSwgYWJvcnRpbmdcbiIpOwotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX291dF9yZWxlYXNlOwotCX0KLQotCWJwLT5kb29yYmVsbHMgPSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpLAotCQkJCQltaW5fdCh1NjQsIEJOWDJYX0RCX1NJWkUsCi0JCQkJCSAgICAgIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMikpKTsKLQlpZiAoIWJwLT5kb29yYmVsbHMpIHsKLQkJZGV2X2VycigmYnAtPnBkZXYtPmRldiwKLQkJCSJDYW5ub3QgbWFwIGRvb3JiZWxsIHNwYWNlLCBhYm9ydGluZ1xuIik7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBlcnJfb3V0X3VubWFwOwotCX0KLQotCWJueDJ4X3NldF9wb3dlcl9zdGF0ZShicCwgUENJX0QwKTsKLQotCS8qIGNsZWFuIGluZGlyZWN0IGFkZHJlc3NlcyAqLwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnAtPnBkZXYsIFBDSUNGR19HUkNfQUREUkVTUywKLQkJCSAgICAgICBQQ0lDRkdfVkVORE9SX0lEX09GRlNFVCk7Ci0JUkVHX1dSKGJwLCBQWFAyX1JFR19QR0xfQUREUl84OF9GMCArIEJQX1BPUlQoYnApKjE2LCAwKTsKLQlSRUdfV1IoYnAsIFBYUDJfUkVHX1BHTF9BRERSXzhDX0YwICsgQlBfUE9SVChicCkqMTYsIDApOwotCVJFR19XUihicCwgUFhQMl9SRUdfUEdMX0FERFJfOTBfRjAgKyBCUF9QT1JUKGJwKSoxNiwgMCk7Ci0JUkVHX1dSKGJwLCBQWFAyX1JFR19QR0xfQUREUl85NF9GMCArIEJQX1BPUlQoYnApKjE2LCAwKTsKLQotCS8qIFJlc2V0IHRoZSBsb2FkIGNvdW50ZXIgKi8KLQlibngyeF9jbGVhcl9sb2FkX2NudChicCk7Ci0KLQlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKLQotCWRldi0+bmV0ZGV2X29wcyA9ICZibngyeF9uZXRkZXZfb3BzOwotCWRldi0+ZXRodG9vbF9vcHMgPSAmYm54MnhfZXRodG9vbF9vcHM7Ci0JZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHOwotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOwotCWlmIChicC0+ZmxhZ3MgJiBVU0lOR19EQUNfRkxBRykKLQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7Ci0JZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTT19FQ04pOwotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwotI2lmZGVmIEJDTV9WTEFOCi0JZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYKTsKLQlicC0+ZmxhZ3MgfD0gKEhXX1ZMQU5fUlhfRkxBRyB8IEhXX1ZMQU5fVFhfRkxBRyk7Ci0KLQlkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9TRzsKLQlkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOwotCWlmIChicC0+ZmxhZ3MgJiBVU0lOR19EQUNfRkxBRykKLQkJZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKLQlkZXYtPnZsYW5fZmVhdHVyZXMgfD0gKE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU09fRUNOKTsKLQlkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwotI2VuZGlmCi0KLQkvKiBnZXRfcG9ydF9od2luZm8oKSB3aWxsIHNldCBwcnRhZCBhbmQgbW1kcyBwcm9wZXJseSAqLwotCWJwLT5tZGlvLnBydGFkID0gTURJT19QUlRBRF9OT05FOwotCWJwLT5tZGlvLm1tZHMgPSAwOwotCWJwLT5tZGlvLm1vZGVfc3VwcG9ydCA9IE1ESU9fU1VQUE9SVFNfQzQ1IHwgTURJT19FTVVMQVRFX0MyMjsKLQlicC0+bWRpby5kZXYgPSBkZXY7Ci0JYnAtPm1kaW8ubWRpb19yZWFkID0gYm54MnhfbWRpb19yZWFkOwotCWJwLT5tZGlvLm1kaW9fd3JpdGUgPSBibngyeF9tZGlvX3dyaXRlOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfdW5tYXA6Ci0JaWYgKGJwLT5yZWd2aWV3KSB7Ci0JCWlvdW5tYXAoYnAtPnJlZ3ZpZXcpOwotCQlicC0+cmVndmlldyA9IE5VTEw7Ci0JfQotCWlmIChicC0+ZG9vcmJlbGxzKSB7Ci0JCWlvdW5tYXAoYnAtPmRvb3JiZWxscyk7Ci0JCWJwLT5kb29yYmVsbHMgPSBOVUxMOwotCX0KLQotZXJyX291dF9yZWxlYXNlOgotCWlmIChhdG9taWNfcmVhZCgmcGRldi0+ZW5hYmxlX2NudCkgPT0gMSkKLQkJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKLQotZXJyX291dF9kaXNhYmxlOgotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0KLWVycl9vdXQ6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgYm54MnhfZ2V0X3BjaWVfd2lkdGhfc3BlZWQoc3RydWN0IGJueDJ4ICpicCwKLQkJCQkJCSBpbnQgKndpZHRoLCBpbnQgKnNwZWVkKQotewotCXUzMiB2YWwgPSBSRUdfUkQoYnAsIFBDSUNGR19PRkZTRVQgKyBQQ0lDRkdfTElOS19DT05UUk9MKTsKLQotCSp3aWR0aCA9ICh2YWwgJiBQQ0lDRkdfTElOS19XSURUSCkgPj4gUENJQ0ZHX0xJTktfV0lEVEhfU0hJRlQ7Ci0KLQkvKiByZXR1cm4gdmFsdWUgb2YgMT0yLjVHSHogMj01R0h6ICovCi0JKnNwZWVkID0gKHZhbCAmIFBDSUNGR19MSU5LX1NQRUVEKSA+PiBQQ0lDRkdfTElOS19TUEVFRF9TSElGVDsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgYm54MnhfY2hlY2tfZmlybXdhcmUoc3RydWN0IGJueDJ4ICpicCkKLXsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlID0gYnAtPmZpcm13YXJlOwotCXN0cnVjdCBibngyeF9md19maWxlX2hkciAqZndfaGRyOwotCXN0cnVjdCBibngyeF9md19maWxlX3NlY3Rpb24gKnNlY3Rpb25zOwotCXUzMiBvZmZzZXQsIGxlbiwgbnVtX29wczsKLQl1MTYgKm9wc19vZmZzZXRzOwotCWludCBpOwotCWNvbnN0IHU4ICpmd192ZXI7Ci0KLQlpZiAoZmlybXdhcmUtPnNpemUgPCBzaXplb2Yoc3RydWN0IGJueDJ4X2Z3X2ZpbGVfaGRyKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlmd19oZHIgPSAoc3RydWN0IGJueDJ4X2Z3X2ZpbGVfaGRyICopZmlybXdhcmUtPmRhdGE7Ci0Jc2VjdGlvbnMgPSAoc3RydWN0IGJueDJ4X2Z3X2ZpbGVfc2VjdGlvbiAqKWZ3X2hkcjsKLQotCS8qIE1ha2Ugc3VyZSBub25lIG9mIHRoZSBvZmZzZXRzIGFuZCBzaXplcyBtYWtlIHVzIHJlYWQgYmV5b25kCi0JICogdGhlIGVuZCBvZiB0aGUgZmlybXdhcmUgZGF0YSAqLwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoKmZ3X2hkcikgLyBzaXplb2YoKnNlY3Rpb25zKTsgaSsrKSB7Ci0JCW9mZnNldCA9IGJlMzJfdG9fY3B1KHNlY3Rpb25zW2ldLm9mZnNldCk7Ci0JCWxlbiA9IGJlMzJfdG9fY3B1KHNlY3Rpb25zW2ldLmxlbik7Ci0JCWlmIChvZmZzZXQgKyBsZW4gPiBmaXJtd2FyZS0+c2l6ZSkgewotCQkJZGV2X2VycigmYnAtPnBkZXYtPmRldiwKLQkJCQkiU2VjdGlvbiAlZCBsZW5ndGggaXMgb3V0IG9mIGJvdW5kc1xuIiwgaSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQotCS8qIExpa2V3aXNlIGZvciB0aGUgaW5pdF9vcHMgb2Zmc2V0cyAqLwotCW9mZnNldCA9IGJlMzJfdG9fY3B1KGZ3X2hkci0+aW5pdF9vcHNfb2Zmc2V0cy5vZmZzZXQpOwotCW9wc19vZmZzZXRzID0gKHUxNiAqKShmaXJtd2FyZS0+ZGF0YSArIG9mZnNldCk7Ci0JbnVtX29wcyA9IGJlMzJfdG9fY3B1KGZ3X2hkci0+aW5pdF9vcHMubGVuKSAvIHNpemVvZihzdHJ1Y3QgcmF3X29wKTsKLQotCWZvciAoaSA9IDA7IGkgPCBiZTMyX3RvX2NwdShmd19oZHItPmluaXRfb3BzX29mZnNldHMubGVuKSAvIDI7IGkrKykgewotCQlpZiAoYmUxNl90b19jcHUob3BzX29mZnNldHNbaV0pID4gbnVtX29wcykgewotCQkJZGV2X2VycigmYnAtPnBkZXYtPmRldiwKLQkJCQkiU2VjdGlvbiBvZmZzZXQgJWQgaXMgb3V0IG9mIGJvdW5kc1xuIiwgaSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQotCS8qIENoZWNrIEZXIHZlcnNpb24gKi8KLQlvZmZzZXQgPSBiZTMyX3RvX2NwdShmd19oZHItPmZ3X3ZlcnNpb24ub2Zmc2V0KTsKLQlmd192ZXIgPSBmaXJtd2FyZS0+ZGF0YSArIG9mZnNldDsKLQlpZiAoKGZ3X3ZlclswXSAhPSBCQ01fNTcxMF9GV19NQUpPUl9WRVJTSU9OKSB8fAotCSAgICAoZndfdmVyWzFdICE9IEJDTV81NzEwX0ZXX01JTk9SX1ZFUlNJT04pIHx8Ci0JICAgIChmd192ZXJbMl0gIT0gQkNNXzU3MTBfRldfUkVWSVNJT05fVkVSU0lPTikgfHwKLQkgICAgKGZ3X3ZlclszXSAhPSBCQ01fNTcxMF9GV19FTkdJTkVFUklOR19WRVJTSU9OKSkgewotCQlkZXZfZXJyKCZicC0+cGRldi0+ZGV2LAotCQkJIkJhZCBGVyB2ZXJzaW9uOiVkLiVkLiVkLiVkLiBTaG91bGQgYmUgJWQuJWQuJWQuJWRcbiIsCi0JCSAgICAgICBmd192ZXJbMF0sIGZ3X3ZlclsxXSwgZndfdmVyWzJdLAotCQkgICAgICAgZndfdmVyWzNdLCBCQ01fNTcxMF9GV19NQUpPUl9WRVJTSU9OLAotCQkgICAgICAgQkNNXzU3MTBfRldfTUlOT1JfVkVSU0lPTiwKLQkJICAgICAgIEJDTV81NzEwX0ZXX1JFVklTSU9OX1ZFUlNJT04sCi0JCSAgICAgICBCQ01fNTcxMF9GV19FTkdJTkVFUklOR19WRVJTSU9OKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBiZTMyX3RvX2NwdV9uKGNvbnN0IHU4ICpfc291cmNlLCB1OCAqX3RhcmdldCwgdTMyIG4pCi17Ci0JY29uc3QgX19iZTMyICpzb3VyY2UgPSAoY29uc3QgX19iZTMyICopX3NvdXJjZTsKLQl1MzIgKnRhcmdldCA9ICh1MzIgKilfdGFyZ2V0OwotCXUzMiBpOwotCi0JZm9yIChpID0gMDsgaSA8IG4vNDsgaSsrKQotCQl0YXJnZXRbaV0gPSBiZTMyX3RvX2NwdShzb3VyY2VbaV0pOwotfQotCi0vKgotICAgT3BzIGFycmF5IGlzIHN0b3JlZCBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDoKLSAgIHtvcCg4Yml0KSwgb2Zmc2V0KDI0Yml0LCBiaWcgZW5kaWFuKSwgZGF0YSgzMmJpdCwgYmlnIGVuZGlhbil9Ci0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9wcmVwX29wcyhjb25zdCB1OCAqX3NvdXJjZSwgdTggKl90YXJnZXQsIHUzMiBuKQotewotCWNvbnN0IF9fYmUzMiAqc291cmNlID0gKGNvbnN0IF9fYmUzMiAqKV9zb3VyY2U7Ci0Jc3RydWN0IHJhd19vcCAqdGFyZ2V0ID0gKHN0cnVjdCByYXdfb3AgKilfdGFyZ2V0OwotCXUzMiBpLCBqLCB0bXA7Ci0KLQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IG4vODsgaSsrLCBqICs9IDIpIHsKLQkJdG1wID0gYmUzMl90b19jcHUoc291cmNlW2pdKTsKLQkJdGFyZ2V0W2ldLm9wID0gKHRtcCA+PiAyNCkgJiAweGZmOwotCQl0YXJnZXRbaV0ub2Zmc2V0ID0gdG1wICYgMHhmZmZmZmY7Ci0JCXRhcmdldFtpXS5yYXdfZGF0YSA9IGJlMzJfdG9fY3B1KHNvdXJjZVtqICsgMV0pOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGJlMTZfdG9fY3B1X24oY29uc3QgdTggKl9zb3VyY2UsIHU4ICpfdGFyZ2V0LCB1MzIgbikKLXsKLQljb25zdCBfX2JlMTYgKnNvdXJjZSA9IChjb25zdCBfX2JlMTYgKilfc291cmNlOwotCXUxNiAqdGFyZ2V0ID0gKHUxNiAqKV90YXJnZXQ7Ci0JdTMyIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbi8yOyBpKyspCi0JCXRhcmdldFtpXSA9IGJlMTZfdG9fY3B1KHNvdXJjZVtpXSk7Ci19Ci0KLSNkZWZpbmUgQk5YMlhfQUxMT0NfQU5EX1NFVChhcnIsIGxibCwgZnVuYykJCQkJXAotZG8gewkJCQkJCQkJCVwKLQl1MzIgbGVuID0gYmUzMl90b19jcHUoZndfaGRyLT5hcnIubGVuKTsJCQkJXAotCWJwLT5hcnIgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CQkJCVwKLQlpZiAoIWJwLT5hcnIpIHsJCQkJCQkJXAotCQlwcl9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSAlZCBieXRlcyBmb3IgIiNhcnIiXG4iLCBsZW4pOyBcCi0JCWdvdG8gbGJsOwkJCQkJCVwKLQl9CQkJCQkJCQlcCi0JZnVuYyhicC0+ZmlybXdhcmUtPmRhdGEgKyBiZTMyX3RvX2NwdShmd19oZHItPmFyci5vZmZzZXQpLAlcCi0JICAgICAodTggKilicC0+YXJyLCBsZW4pOwkJCQkJXAotfSB3aGlsZSAoMCkKLQotc3RhdGljIGludCBfX2RldmluaXQgYm54MnhfaW5pdF9maXJtd2FyZShzdHJ1Y3QgYm54MnggKmJwLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JY29uc3QgY2hhciAqZndfZmlsZV9uYW1lOwotCXN0cnVjdCBibngyeF9md19maWxlX2hkciAqZndfaGRyOwotCWludCByYzsKLQotCWlmIChDSElQX0lTX0UxKGJwKSkKLQkJZndfZmlsZV9uYW1lID0gRldfRklMRV9OQU1FX0UxOwotCWVsc2UgaWYgKENISVBfSVNfRTFIKGJwKSkKLQkJZndfZmlsZV9uYW1lID0gRldfRklMRV9OQU1FX0UxSDsKLQllbHNlIHsKLQkJZGV2X2VycihkZXYsICJVbnN1cHBvcnRlZCBjaGlwIHJldmlzaW9uXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZGV2X2luZm8oZGV2LCAiTG9hZGluZyAlc1xuIiwgZndfZmlsZV9uYW1lKTsKLQotCXJjID0gcmVxdWVzdF9maXJtd2FyZSgmYnAtPmZpcm13YXJlLCBmd19maWxlX25hbWUsIGRldik7Ci0JaWYgKHJjKSB7Ci0JCWRldl9lcnIoZGV2LCAiQ2FuJ3QgbG9hZCBmaXJtd2FyZSBmaWxlICVzXG4iLCBmd19maWxlX25hbWUpOwotCQlnb3RvIHJlcXVlc3RfZmlybXdhcmVfZXhpdDsKLQl9Ci0KLQlyYyA9IGJueDJ4X2NoZWNrX2Zpcm13YXJlKGJwKTsKLQlpZiAocmMpIHsKLQkJZGV2X2VycihkZXYsICJDb3JydXB0IGZpcm13YXJlIGZpbGUgJXNcbiIsIGZ3X2ZpbGVfbmFtZSk7Ci0JCWdvdG8gcmVxdWVzdF9maXJtd2FyZV9leGl0OwotCX0KLQotCWZ3X2hkciA9IChzdHJ1Y3QgYm54MnhfZndfZmlsZV9oZHIgKilicC0+ZmlybXdhcmUtPmRhdGE7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBwb2ludGVycyB0byB0aGUgaW5pdCBhcnJheXMgKi8KLQkvKiBCbG9iICovCi0JQk5YMlhfQUxMT0NfQU5EX1NFVChpbml0X2RhdGEsIHJlcXVlc3RfZmlybXdhcmVfZXhpdCwgYmUzMl90b19jcHVfbik7Ci0KLQkvKiBPcGNvZGVzICovCi0JQk5YMlhfQUxMT0NfQU5EX1NFVChpbml0X29wcywgaW5pdF9vcHNfYWxsb2NfZXJyLCBibngyeF9wcmVwX29wcyk7Ci0KLQkvKiBPZmZzZXRzICovCi0JQk5YMlhfQUxMT0NfQU5EX1NFVChpbml0X29wc19vZmZzZXRzLCBpbml0X29mZnNldHNfYWxsb2NfZXJyLAotCQkJICAgIGJlMTZfdG9fY3B1X24pOwotCi0JLyogU1RPUk1zIGZpcm13YXJlICovCi0JSU5JVF9UU0VNX0lOVF9UQUJMRV9EQVRBKGJwKSA9IGJwLT5maXJtd2FyZS0+ZGF0YSArCi0JCQliZTMyX3RvX2NwdShmd19oZHItPnRzZW1faW50X3RhYmxlX2RhdGEub2Zmc2V0KTsKLQlJTklUX1RTRU1fUFJBTV9EQVRBKGJwKSAgICAgID0gYnAtPmZpcm13YXJlLT5kYXRhICsKLQkJCWJlMzJfdG9fY3B1KGZ3X2hkci0+dHNlbV9wcmFtX2RhdGEub2Zmc2V0KTsKLQlJTklUX1VTRU1fSU5UX1RBQkxFX0RBVEEoYnApID0gYnAtPmZpcm13YXJlLT5kYXRhICsKLQkJCWJlMzJfdG9fY3B1KGZ3X2hkci0+dXNlbV9pbnRfdGFibGVfZGF0YS5vZmZzZXQpOwotCUlOSVRfVVNFTV9QUkFNX0RBVEEoYnApICAgICAgPSBicC0+ZmlybXdhcmUtPmRhdGEgKwotCQkJYmUzMl90b19jcHUoZndfaGRyLT51c2VtX3ByYW1fZGF0YS5vZmZzZXQpOwotCUlOSVRfWFNFTV9JTlRfVEFCTEVfREFUQShicCkgPSBicC0+ZmlybXdhcmUtPmRhdGEgKwotCQkJYmUzMl90b19jcHUoZndfaGRyLT54c2VtX2ludF90YWJsZV9kYXRhLm9mZnNldCk7Ci0JSU5JVF9YU0VNX1BSQU1fREFUQShicCkgICAgICA9IGJwLT5maXJtd2FyZS0+ZGF0YSArCi0JCQliZTMyX3RvX2NwdShmd19oZHItPnhzZW1fcHJhbV9kYXRhLm9mZnNldCk7Ci0JSU5JVF9DU0VNX0lOVF9UQUJMRV9EQVRBKGJwKSA9IGJwLT5maXJtd2FyZS0+ZGF0YSArCi0JCQliZTMyX3RvX2NwdShmd19oZHItPmNzZW1faW50X3RhYmxlX2RhdGEub2Zmc2V0KTsKLQlJTklUX0NTRU1fUFJBTV9EQVRBKGJwKSAgICAgID0gYnAtPmZpcm13YXJlLT5kYXRhICsKLQkJCWJlMzJfdG9fY3B1KGZ3X2hkci0+Y3NlbV9wcmFtX2RhdGEub2Zmc2V0KTsKLQotCXJldHVybiAwOwotCi1pbml0X29mZnNldHNfYWxsb2NfZXJyOgotCWtmcmVlKGJwLT5pbml0X29wcyk7Ci1pbml0X29wc19hbGxvY19lcnI6Ci0Ja2ZyZWUoYnAtPmluaXRfZGF0YSk7Ci1yZXF1ZXN0X2Zpcm13YXJlX2V4aXQ6Ci0JcmVsZWFzZV9maXJtd2FyZShicC0+ZmlybXdhcmUpOwotCi0JcmV0dXJuIHJjOwotfQotCi0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGJueDJ4X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJCSAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOwotCXN0cnVjdCBibngyeCAqYnA7Ci0JaW50IHBjaWVfd2lkdGgsIHBjaWVfc3BlZWQ7Ci0JaW50IHJjOwotCi0JLyogZGV2IHplcm9lZCBpbiBpbml0X2V0aGVyZGV2ICovCi0JZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKCpicCksIE1BWF9DT05URVhUKTsKLQlpZiAoIWRldikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgYWxsb2NhdGUgbmV0IGRldmljZVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlicC0+bXNnX2VuYWJsZSA9IGRlYnVnOwotCi0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7Ci0KLQlyYyA9IGJueDJ4X2luaXRfZGV2KHBkZXYsIGRldik7Ci0JaWYgKHJjIDwgMCkgewotCQlmcmVlX25ldGRldihkZXYpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JcmMgPSBibngyeF9pbml0X2JwKGJwKTsKLQlpZiAocmMpCi0JCWdvdG8gaW5pdF9vbmVfZXhpdDsKLQotCS8qIFNldCBpbml0IGFycmF5cyAqLwotCXJjID0gYm54MnhfaW5pdF9maXJtd2FyZShicCwgJnBkZXYtPmRldik7Ci0JaWYgKHJjKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkVycm9yIGxvYWRpbmcgZmlybXdhcmVcbiIpOwotCQlnb3RvIGluaXRfb25lX2V4aXQ7Ci0JfQotCi0JcmMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQlpZiAocmMpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2VcbiIpOwotCQlnb3RvIGluaXRfb25lX2V4aXQ7Ci0JfQotCi0JYm54MnhfZ2V0X3BjaWVfd2lkdGhfc3BlZWQoYnAsICZwY2llX3dpZHRoLCAmcGNpZV9zcGVlZCk7Ci0JbmV0ZGV2X2luZm8oZGV2LCAiJXMgKCVjJWQpIFBDSS1FIHglZCAlcyBmb3VuZCBhdCBtZW0gJWx4LCIKLQkgICAgICAgIiBJUlEgJWQsICIsIGJvYXJkX2luZm9bZW50LT5kcml2ZXJfZGF0YV0ubmFtZSwKLQkgICAgICAgKENISVBfUkVWKGJwKSA+PiAxMikgKyAnQScsIChDSElQX01FVEFMKGJwKSA+PiA0KSwKLQkgICAgICAgcGNpZV93aWR0aCwgKHBjaWVfc3BlZWQgPT0gMikgPyAiNUdIeiAoR2VuMikiIDogIjIuNUdIeiIsCi0JICAgICAgIGRldi0+YmFzZV9hZGRyLCBicC0+cGRldi0+aXJxKTsKLQlwcl9jb250KCJub2RlIGFkZHIgJXBNXG4iLCBkZXYtPmRldl9hZGRyKTsKLQotCXJldHVybiAwOwotCi1pbml0X29uZV9leGl0OgotCWlmIChicC0+cmVndmlldykKLQkJaW91bm1hcChicC0+cmVndmlldyk7Ci0KLQlpZiAoYnAtPmRvb3JiZWxscykKLQkJaW91bm1hcChicC0+ZG9vcmJlbGxzKTsKLQotCWZyZWVfbmV0ZGV2KGRldik7Ci0KLQlpZiAoYXRvbWljX3JlYWQoJnBkZXYtPmVuYWJsZV9jbnQpID09IDEpCi0JCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7Ci0KLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgYm54MnhfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBibngyeCAqYnA7Ci0KLQlpZiAoIWRldikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJCQUQgbmV0IGRldmljZSBmcm9tIGJueDJ4X2luaXRfb25lXG4iKTsKLQkJcmV0dXJuOwotCX0KLQlicCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotCi0JLyogTWFrZSBzdXJlIFJFU0VUIHRhc2sgaXMgbm90IHNjaGVkdWxlZCBiZWZvcmUgY29udGludWluZyAqLwotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYnAtPnJlc2V0X3Rhc2spOwotCi0Ja2ZyZWUoYnAtPmluaXRfb3BzX29mZnNldHMpOwotCWtmcmVlKGJwLT5pbml0X29wcyk7Ci0Ja2ZyZWUoYnAtPmluaXRfZGF0YSk7Ci0JcmVsZWFzZV9maXJtd2FyZShicC0+ZmlybXdhcmUpOwotCi0JaWYgKGJwLT5yZWd2aWV3KQotCQlpb3VubWFwKGJwLT5yZWd2aWV3KTsKLQotCWlmIChicC0+ZG9vcmJlbGxzKQotCQlpb3VubWFwKGJwLT5kb29yYmVsbHMpOwotCi0JZnJlZV9uZXRkZXYoZGV2KTsKLQotCWlmIChhdG9taWNfcmVhZCgmcGRldi0+ZW5hYmxlX2NudCkgPT0gMSkKLQkJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKLQotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBpbnQgYm54Mnhfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGJueDJ4ICpicDsKLQotCWlmICghZGV2KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkJBRCBuZXQgZGV2aWNlIGZyb20gYm54MnhfaW5pdF9vbmVcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcnRubF9sb2NrKCk7Ci0KLQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7Ci0JCXJ0bmxfdW5sb2NrKCk7Ci0JCXJldHVybiAwOwotCX0KLQotCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKLQotCWJueDJ4X25pY191bmxvYWQoYnAsIFVOTE9BRF9DTE9TRSk7Ci0KLQlibngyeF9zZXRfcG93ZXJfc3RhdGUoYnAsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKLQotCXJ0bmxfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBibngyeF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgYm54MnggKmJwOwotCWludCByYzsKLQotCWlmICghZGV2KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkJBRCBuZXQgZGV2aWNlIGZyb20gYm54MnhfaW5pdF9vbmVcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKGJwLT5yZWNvdmVyeV9zdGF0ZSAhPSBCTlgyWF9SRUNPVkVSWV9ET05FKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiSGFuZGxpbmcgcGFyaXR5IGVycm9yIHJlY292ZXJ5LiBUcnkgYWdhaW4gbGF0ZXJcbiIpOwotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0KLQlydG5sX2xvY2soKTsKLQotCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwotCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJcnRubF91bmxvY2soKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JYm54Mnhfc2V0X3Bvd2VyX3N0YXRlKGJwLCBQQ0lfRDApOwotCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKLQotCXJjID0gYm54MnhfbmljX2xvYWQoYnAsIExPQURfT1BFTik7Ci0KLQlydG5sX3VubG9jaygpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X2VlaF9uaWNfdW5sb2FkKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IGk7Ci0KLQlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9FUlJPUjsKLQotCWJwLT5yeF9tb2RlID0gQk5YMlhfUlhfTU9ERV9OT05FOwotCi0JYm54MnhfbmV0aWZfc3RvcChicCwgMCk7Ci0JbmV0aWZfY2Fycmllcl9vZmYoYnAtPmRldik7Ci0KLQlkZWxfdGltZXJfc3luYygmYnAtPnRpbWVyKTsKLQlicC0+c3RhdHNfc3RhdGUgPSBTVEFUU19TVEFURV9ESVNBQkxFRDsKLQlEUChCTlgyWF9NU0dfU1RBVFMsICJzdGF0c19zdGF0ZSAtIERJU0FCTEVEXG4iKTsKLQotCS8qIFJlbGVhc2UgSVJRcyAqLwotCWJueDJ4X2ZyZWVfaXJxKGJwLCBmYWxzZSk7Ci0KLQlpZiAoQ0hJUF9JU19FMShicCkpIHsKLQkJc3RydWN0IG1hY19jb25maWd1cmF0aW9uX2NtZCAqY29uZmlnID0KLQkJCQkJCWJueDJ4X3NwKGJwLCBtY2FzdF9jb25maWcpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBjb25maWctPmhkci5sZW5ndGg7IGkrKykKLQkJCUNBTV9JTlZBTElEQVRFKGNvbmZpZy0+Y29uZmlnX3RhYmxlW2ldKTsKLQl9Ci0KLQkvKiBGcmVlIFNLQnMsIFNHRXMsIFRQQSBwb29sIGFuZCBkcml2ZXIgaW50ZXJuYWxzICovCi0JYm54MnhfZnJlZV9za2JzKGJwKTsKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkKLQkJYm54MnhfZnJlZV9yeF9zZ2VfcmFuZ2UoYnAsIGJwLT5mcCArIGksIE5VTV9SWF9TR0UpOwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQotCQluZXRpZl9uYXBpX2RlbCgmYm54MnhfZnAoYnAsIGksIG5hcGkpKTsKLQlibngyeF9mcmVlX21lbShicCk7Ci0KLQlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9DTE9TRUQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfZWVoX3JlY292ZXIoc3RydWN0IGJueDJ4ICpicCkKLXsKLQl1MzIgdmFsOwotCi0JbXV0ZXhfaW5pdCgmYnAtPnBvcnQucGh5X211dGV4KTsKLQotCWJwLT5jb21tb24uc2htZW1fYmFzZSA9IFJFR19SRChicCwgTUlTQ19SRUdfU0hBUkVEX01FTV9BRERSKTsKLQlicC0+bGlua19wYXJhbXMuc2htZW1fYmFzZSA9IGJwLT5jb21tb24uc2htZW1fYmFzZTsKLQlCTlgyWF9ERVZfSU5GTygic2htZW0gb2Zmc2V0IGlzIDB4JXhcbiIsIGJwLT5jb21tb24uc2htZW1fYmFzZSk7Ci0KLQlpZiAoIWJwLT5jb21tb24uc2htZW1fYmFzZSB8fAotCSAgICAoYnAtPmNvbW1vbi5zaG1lbV9iYXNlIDwgMHhBMDAwMCkgfHwKLQkgICAgKGJwLT5jb21tb24uc2htZW1fYmFzZSA+PSAweEMwMDAwKSkgewotCQlCTlgyWF9ERVZfSU5GTygiTUNQIG5vdCBhY3RpdmVcbiIpOwotCQlicC0+ZmxhZ3MgfD0gTk9fTUNQX0ZMQUc7Ci0JCXJldHVybjsKLQl9Ci0KLQl2YWwgPSBTSE1FTV9SRChicCwgdmFsaWRpdHlfbWFwW0JQX1BPUlQoYnApXSk7Ci0JaWYgKCh2YWwgJiAoU0hSX01FTV9WQUxJRElUWV9ERVZfSU5GTyB8IFNIUl9NRU1fVkFMSURJVFlfTUIpKQotCQkhPSAoU0hSX01FTV9WQUxJRElUWV9ERVZfSU5GTyB8IFNIUl9NRU1fVkFMSURJVFlfTUIpKQotCQlCTlgyWF9FUlIoIkJBRCBNQ1AgdmFsaWRpdHkgc2lnbmF0dXJlXG4iKTsKLQotCWlmICghQlBfTk9NQ1AoYnApKSB7Ci0JCWJwLT5md19zZXEgPSAoU0hNRU1fUkQoYnAsIGZ1bmNfbWJbQlBfRlVOQyhicCldLmRydl9tYl9oZWFkZXIpCi0JCQkgICAgICAmIERSVl9NU0dfU0VRX05VTUJFUl9NQVNLKTsKLQkJQk5YMlhfREVWX0lORk8oImZ3X3NlcSAweCUwOHhcbiIsIGJwLT5md19zZXEpOwotCX0KLX0KLQotLyoqCi0gKiBibngyeF9pb19lcnJvcl9kZXRlY3RlZCAtIGNhbGxlZCB3aGVuIFBDSSBlcnJvciBpcyBkZXRlY3RlZAotICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQotICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVjdGlvbiBzdGF0ZQotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGEgUENJIGJ1cyBlcnJvciBhZmZlY3RpbmcKLSAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLgotICovCi1zdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBibngyeF9pb19lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQkJCXBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJ0bmxfbG9jaygpOwotCi0JbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwotCi0JaWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkgewotCQlydG5sX3VubG9jaygpOwotCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKLQl9Ci0KLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQotCQlibngyeF9lZWhfbmljX3VubG9hZChicCk7Ci0KLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0KLQlydG5sX3VubG9jaygpOwotCi0JLyogUmVxdWVzdCBhIHNsb3QgcmVzZXQgKi8KLQlyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKLX0KLQotLyoqCi0gKiBibngyeF9pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBQQ0kgYnVzIGhhcyBiZWVuIHJlc2V0Ci0gKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCi0gKgotICogUmVzdGFydCB0aGUgY2FyZCBmcm9tIHNjcmF0Y2gsIGFzIGlmIGZyb20gYSBjb2xkLWJvb3QuCi0gKi8KLXN0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGJueDJ4X2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJ0bmxfbG9jaygpOwotCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSJDYW5ub3QgcmUtZW5hYmxlIFBDSSBkZXZpY2UgYWZ0ZXIgcmVzZXRcbiIpOwotCQlydG5sX3VubG9jaygpOwotCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKLQl9Ci0KLQlwY2lfc2V0X21hc3RlcihwZGV2KTsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKLQotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCi0JCWJueDJ4X3NldF9wb3dlcl9zdGF0ZShicCwgUENJX0QwKTsKLQotCXJ0bmxfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEOwotfQotCi0vKioKLSAqIGJueDJ4X2lvX3Jlc3VtZSAtIGNhbGxlZCB3aGVuIHRyYWZmaWMgY2FuIHN0YXJ0IGZsb3dpbmcgYWdhaW4KLSAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKLSAqCi0gKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdAotICogaXRzIE9LIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uLgotICovCi1zdGF0aWMgdm9pZCBibngyeF9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmIChicC0+cmVjb3Zlcnlfc3RhdGUgIT0gQk5YMlhfUkVDT1ZFUllfRE9ORSkgewotCQlwcmludGsoS0VSTl9FUlIgIkhhbmRsaW5nIHBhcml0eSBlcnJvciByZWNvdmVyeS4gVHJ5IGFnYWluIGxhdGVyXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXJ0bmxfbG9jaygpOwotCi0JYm54MnhfZWVoX3JlY292ZXIoYnApOwotCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJYm54MnhfbmljX2xvYWQoYnAsIExPQURfTk9STUFMKTsKLQotCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKLQotCXJ0bmxfdW5sb2NrKCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGJueDJ4X2Vycl9oYW5kbGVyID0gewotCS5lcnJvcl9kZXRlY3RlZCA9IGJueDJ4X2lvX2Vycm9yX2RldGVjdGVkLAotCS5zbG90X3Jlc2V0ICAgICA9IGJueDJ4X2lvX3Nsb3RfcmVzZXQsCi0JLnJlc3VtZSAgICAgICAgID0gYm54MnhfaW9fcmVzdW1lLAotfTsKLQotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGJueDJ4X3BjaV9kcml2ZXIgPSB7Ci0JLm5hbWUgICAgICAgID0gRFJWX01PRFVMRV9OQU1FLAotCS5pZF90YWJsZSAgICA9IGJueDJ4X3BjaV90YmwsCi0JLnByb2JlICAgICAgID0gYm54MnhfaW5pdF9vbmUsCi0JLnJlbW92ZSAgICAgID0gX19kZXZleGl0X3AoYm54MnhfcmVtb3ZlX29uZSksCi0JLnN1c3BlbmQgICAgID0gYm54Mnhfc3VzcGVuZCwKLQkucmVzdW1lICAgICAgPSBibngyeF9yZXN1bWUsCi0JLmVycl9oYW5kbGVyID0gJmJueDJ4X2Vycl9oYW5kbGVyLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgYm54MnhfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0KLQlwcl9pbmZvKCIlcyIsIHZlcnNpb24pOwotCi0JYm54Mnhfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiYm54MngiKTsKLQlpZiAoYm54Mnhfd3EgPT0gTlVMTCkgewotCQlwcl9lcnIoIkNhbm5vdCBjcmVhdGUgd29ya3F1ZXVlXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYm54MnhfcGNpX2RyaXZlcik7Ci0JaWYgKHJldCkgewotCQlwcl9lcnIoIkNhbm5vdCByZWdpc3RlciBkcml2ZXJcbiIpOwotCQlkZXN0cm95X3dvcmtxdWV1ZShibngyeF93cSk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBibngyeF9jbGVhbnVwKHZvaWQpCi17Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZibngyeF9wY2lfZHJpdmVyKTsKLQotCWRlc3Ryb3lfd29ya3F1ZXVlKGJueDJ4X3dxKTsKLX0KLQotbW9kdWxlX2luaXQoYm54MnhfaW5pdCk7Ci1tb2R1bGVfZXhpdChibngyeF9jbGVhbnVwKTsKLQotI2lmZGVmIEJDTV9DTklDCi0KLS8qIGNvdW50IGRlbm90ZXMgdGhlIG51bWJlciBvZiBuZXcgY29tcGxldGlvbnMgd2UgaGF2ZSBzZWVuICovCi1zdGF0aWMgdm9pZCBibngyeF9jbmljX3NwX3Bvc3Qoc3RydWN0IGJueDJ4ICpicCwgaW50IGNvdW50KQotewotCXN0cnVjdCBldGhfc3BlICpzcGU7Ci0KLSNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCi0JaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCi0JCXJldHVybjsKLSNlbmRpZgotCi0Jc3Bpbl9sb2NrX2JoKCZicC0+c3BxX2xvY2spOwotCWJwLT5jbmljX3NwcV9wZW5kaW5nIC09IGNvdW50OwotCi0JZm9yICg7IGJwLT5jbmljX3NwcV9wZW5kaW5nIDwgYnAtPmNuaWNfZXRoX2Rldi5tYXhfa3dxZV9wZW5kaW5nOwotCSAgICAgYnAtPmNuaWNfc3BxX3BlbmRpbmcrKykgewotCi0JCWlmICghYnAtPmNuaWNfa3dxX3BlbmRpbmcpCi0JCQlicmVhazsKLQotCQlzcGUgPSBibngyeF9zcF9nZXRfbmV4dChicCk7Ci0JCSpzcGUgPSAqYnAtPmNuaWNfa3dxX2NvbnM7Ci0KLQkJYnAtPmNuaWNfa3dxX3BlbmRpbmctLTsKLQotCQlEUChORVRJRl9NU0dfVElNRVIsICJwZW5kaW5nIG9uIFNQUSAlZCwgb24gS1dRICVkIGNvdW50ICVkXG4iLAotCQkgICBicC0+Y25pY19zcHFfcGVuZGluZywgYnAtPmNuaWNfa3dxX3BlbmRpbmcsIGNvdW50KTsKLQotCQlpZiAoYnAtPmNuaWNfa3dxX2NvbnMgPT0gYnAtPmNuaWNfa3dxX2xhc3QpCi0JCQlicC0+Y25pY19rd3FfY29ucyA9IGJwLT5jbmljX2t3cTsKLQkJZWxzZQotCQkJYnAtPmNuaWNfa3dxX2NvbnMrKzsKLQl9Ci0JYm54Mnhfc3BfcHJvZF91cGRhdGUoYnApOwotCXNwaW5fdW5sb2NrX2JoKCZicC0+c3BxX2xvY2spOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X2NuaWNfc3BfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgICBzdHJ1Y3Qga3dxZV8xNiAqa3dxZXNbXSwgdTMyIGNvdW50KQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpOwotCi0jaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgotCWlmICh1bmxpa2VseShicC0+cGFuaWMpKQotCQlyZXR1cm4gLUVJTzsKLSNlbmRpZgotCi0Jc3Bpbl9sb2NrX2JoKCZicC0+c3BxX2xvY2spOwotCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJc3RydWN0IGV0aF9zcGUgKnNwZSA9IChzdHJ1Y3QgZXRoX3NwZSAqKWt3cWVzW2ldOwotCi0JCWlmIChicC0+Y25pY19rd3FfcGVuZGluZyA9PSBNQVhfU1BfREVTQ19DTlQpCi0JCQlicmVhazsKLQotCQkqYnAtPmNuaWNfa3dxX3Byb2QgPSAqc3BlOwotCi0JCWJwLT5jbmljX2t3cV9wZW5kaW5nKys7Ci0KLQkJRFAoTkVUSUZfTVNHX1RJTUVSLCAiTDUgU1BRRSAleCAleCAleDoleCBwb3MgJWRcbiIsCi0JCSAgIHNwZS0+aGRyLmNvbm5fYW5kX2NtZF9kYXRhLCBzcGUtPmhkci50eXBlLAotCQkgICBzcGUtPmRhdGEubWFjX2NvbmZpZ19hZGRyLmhpLAotCQkgICBzcGUtPmRhdGEubWFjX2NvbmZpZ19hZGRyLmxvLAotCQkgICBicC0+Y25pY19rd3FfcGVuZGluZyk7Ci0KLQkJaWYgKGJwLT5jbmljX2t3cV9wcm9kID09IGJwLT5jbmljX2t3cV9sYXN0KQotCQkJYnAtPmNuaWNfa3dxX3Byb2QgPSBicC0+Y25pY19rd3E7Ci0JCWVsc2UKLQkJCWJwLT5jbmljX2t3cV9wcm9kKys7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfYmgoJmJwLT5zcHFfbG9jayk7Ci0KLQlpZiAoYnAtPmNuaWNfc3BxX3BlbmRpbmcgPCBicC0+Y25pY19ldGhfZGV2Lm1heF9rd3FlX3BlbmRpbmcpCi0JCWJueDJ4X2NuaWNfc3BfcG9zdChicCwgMCk7Ci0KLQlyZXR1cm4gaTsKLX0KLQotc3RhdGljIGludCBibngyeF9jbmljX2N0bF9zZW5kKHN0cnVjdCBibngyeCAqYnAsIHN0cnVjdCBjbmljX2N0bF9pbmZvICpjdGwpCi17Ci0Jc3RydWN0IGNuaWNfb3BzICpjX29wczsKLQlpbnQgcmMgPSAwOwotCi0JbXV0ZXhfbG9jaygmYnAtPmNuaWNfbXV0ZXgpOwotCWNfb3BzID0gYnAtPmNuaWNfb3BzOwotCWlmIChjX29wcykKLQkJcmMgPSBjX29wcy0+Y25pY19jdGwoYnAtPmNuaWNfZGF0YSwgY3RsKTsKLQltdXRleF91bmxvY2soJmJwLT5jbmljX211dGV4KTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBibngyeF9jbmljX2N0bF9zZW5kX2JoKHN0cnVjdCBibngyeCAqYnAsIHN0cnVjdCBjbmljX2N0bF9pbmZvICpjdGwpCi17Ci0Jc3RydWN0IGNuaWNfb3BzICpjX29wczsKLQlpbnQgcmMgPSAwOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCWNfb3BzID0gcmN1X2RlcmVmZXJlbmNlKGJwLT5jbmljX29wcyk7Ci0JaWYgKGNfb3BzKQotCQlyYyA9IGNfb3BzLT5jbmljX2N0bChicC0+Y25pY19kYXRhLCBjdGwpOwotCXJjdV9yZWFkX3VubG9jaygpOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKgotICogZm9yIGNvbW1hbmRzIHRoYXQgaGF2ZSBubyBkYXRhCi0gKi8KLXN0YXRpYyBpbnQgYm54MnhfY25pY19ub3RpZnkoc3RydWN0IGJueDJ4ICpicCwgaW50IGNtZCkKLXsKLQlzdHJ1Y3QgY25pY19jdGxfaW5mbyBjdGwgPSB7MH07Ci0KLQljdGwuY21kID0gY21kOwotCi0JcmV0dXJuIGJueDJ4X2NuaWNfY3RsX3NlbmQoYnAsICZjdGwpOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9jbmljX2NmY19jb21wKHN0cnVjdCBibngyeCAqYnAsIGludCBjaWQpCi17Ci0Jc3RydWN0IGNuaWNfY3RsX2luZm8gY3RsOwotCi0JLyogZmlyc3Qgd2UgdGVsbCBDTklDIGFuZCBvbmx5IHRoZW4gd2UgY291bnQgdGhpcyBhcyBhIGNvbXBsZXRpb24gKi8KLQljdGwuY21kID0gQ05JQ19DVExfQ09NUExFVElPTl9DTUQ7Ci0JY3RsLmRhdGEuY29tcC5jaWQgPSBjaWQ7Ci0KLQlibngyeF9jbmljX2N0bF9zZW5kX2JoKGJwLCAmY3RsKTsKLQlibngyeF9jbmljX3NwX3Bvc3QoYnAsIDEpOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X2Rydl9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGRydl9jdGxfaW5mbyAqY3RsKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCByYyA9IDA7Ci0KLQlzd2l0Y2ggKGN0bC0+Y21kKSB7Ci0JY2FzZSBEUlZfQ1RMX0NUWFRCTF9XUl9DTUQ6IHsKLQkJdTMyIGluZGV4ID0gY3RsLT5kYXRhLmlvLm9mZnNldDsKLQkJZG1hX2FkZHJfdCBhZGRyID0gY3RsLT5kYXRhLmlvLmRtYV9hZGRyOwotCi0JCWJueDJ4X2lsdF93cihicCwgaW5kZXgsIGFkZHIpOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIERSVl9DVExfQ09NUExFVElPTl9DTUQ6IHsKLQkJaW50IGNvdW50ID0gY3RsLT5kYXRhLmNvbXAuY29tcF9jb3VudDsKLQotCQlibngyeF9jbmljX3NwX3Bvc3QoYnAsIGNvdW50KTsKLQkJYnJlYWs7Ci0JfQotCi0JLyogcnRubF9sb2NrIGlzIGhlbGQuICAqLwotCWNhc2UgRFJWX0NUTF9TVEFSVF9MMl9DTUQ6IHsKLQkJdTMyIGNsaSA9IGN0bC0+ZGF0YS5yaW5nLmNsaWVudF9pZDsKLQotCQlicC0+cnhfbW9kZV9jbF9tYXNrIHw9ICgxIDw8IGNsaSk7Ci0JCWJueDJ4X3NldF9zdG9ybV9yeF9tb2RlKGJwKTsKLQkJYnJlYWs7Ci0JfQotCi0JLyogcnRubF9sb2NrIGlzIGhlbGQuICAqLwotCWNhc2UgRFJWX0NUTF9TVE9QX0wyX0NNRDogewotCQl1MzIgY2xpID0gY3RsLT5kYXRhLnJpbmcuY2xpZW50X2lkOwotCi0JCWJwLT5yeF9tb2RlX2NsX21hc2sgJj0gfigxIDw8IGNsaSk7Ci0JCWJueDJ4X3NldF9zdG9ybV9yeF9tb2RlKGJwKTsKLQkJYnJlYWs7Ci0JfQotCi0JZGVmYXVsdDoKLQkJQk5YMlhfRVJSKCJ1bmtub3duIGNvbW1hbmQgJXhcbiIsIGN0bC0+Y21kKTsKLQkJcmMgPSAtRUlOVkFMOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgYm54Mnhfc2V0dXBfY25pY19pcnFfaW5mbyhzdHJ1Y3QgYm54MnggKmJwKQotewotCXN0cnVjdCBjbmljX2V0aF9kZXYgKmNwID0gJmJwLT5jbmljX2V0aF9kZXY7Ci0KLQlpZiAoYnAtPmZsYWdzICYgVVNJTkdfTVNJWF9GTEFHKSB7Ci0JCWNwLT5kcnZfc3RhdGUgfD0gQ05JQ19EUlZfU1RBVEVfVVNJTkdfTVNJWDsKLQkJY3AtPmlycV9hcnJbMF0uaXJxX2ZsYWdzIHw9IENOSUNfSVJRX0ZMX01TSVg7Ci0JCWNwLT5pcnFfYXJyWzBdLnZlY3RvciA9IGJwLT5tc2l4X3RhYmxlWzFdLnZlY3RvcjsKLQl9IGVsc2UgewotCQljcC0+ZHJ2X3N0YXRlICY9IH5DTklDX0RSVl9TVEFURV9VU0lOR19NU0lYOwotCQljcC0+aXJxX2FyclswXS5pcnFfZmxhZ3MgJj0gfkNOSUNfSVJRX0ZMX01TSVg7Ci0JfQotCWNwLT5pcnFfYXJyWzBdLnN0YXR1c19ibGsgPSBicC0+Y25pY19zYjsKLQljcC0+aXJxX2FyclswXS5zdGF0dXNfYmxrX251bSA9IENOSUNfU0JfSUQoYnApOwotCWNwLT5pcnFfYXJyWzFdLnN0YXR1c19ibGsgPSBicC0+ZGVmX3N0YXR1c19ibGs7Ci0JY3AtPmlycV9hcnJbMV0uc3RhdHVzX2Jsa19udW0gPSBERUZfU0JfSUQ7Ci0KLQljcC0+bnVtX2lycSA9IDI7Ci19Ci0KLXN0YXRpYyBpbnQgYm54MnhfcmVnaXN0ZXJfY25pYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY25pY19vcHMgKm9wcywKLQkJCSAgICAgICB2b2lkICpkYXRhKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBjbmljX2V0aF9kZXYgKmNwID0gJmJwLT5jbmljX2V0aF9kZXY7Ci0KLQlpZiAob3BzID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGF0b21pY19yZWFkKCZicC0+aW50cl9zZW0pICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlicC0+Y25pY19rd3EgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFicC0+Y25pY19rd3EpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JYnAtPmNuaWNfa3dxX2NvbnMgPSBicC0+Y25pY19rd3E7Ci0JYnAtPmNuaWNfa3dxX3Byb2QgPSBicC0+Y25pY19rd3E7Ci0JYnAtPmNuaWNfa3dxX2xhc3QgPSBicC0+Y25pY19rd3EgKyBNQVhfU1BfREVTQ19DTlQ7Ci0KLQlicC0+Y25pY19zcHFfcGVuZGluZyA9IDA7Ci0JYnAtPmNuaWNfa3dxX3BlbmRpbmcgPSAwOwotCi0JYnAtPmNuaWNfZGF0YSA9IGRhdGE7Ci0KLQljcC0+bnVtX2lycSA9IDA7Ci0JY3AtPmRydl9zdGF0ZSA9IENOSUNfRFJWX1NUQVRFX1JFR0Q7Ci0KLQlibngyeF9pbml0X3NiKGJwLCBicC0+Y25pY19zYiwgYnAtPmNuaWNfc2JfbWFwcGluZywgQ05JQ19TQl9JRChicCkpOwotCi0JYm54Mnhfc2V0dXBfY25pY19pcnFfaW5mbyhicCk7Ci0JYm54Mnhfc2V0X2lzY3NpX2V0aF9tYWNfYWRkcihicCwgMSk7Ci0JYnAtPmNuaWNfZmxhZ3MgfD0gQk5YMlhfQ05JQ19GTEFHX01BQ19TRVQ7Ci0JcmN1X2Fzc2lnbl9wb2ludGVyKGJwLT5jbmljX29wcywgb3BzKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X3VucmVnaXN0ZXJfY25pYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBjbmljX2V0aF9kZXYgKmNwID0gJmJwLT5jbmljX2V0aF9kZXY7Ci0KLQltdXRleF9sb2NrKCZicC0+Y25pY19tdXRleCk7Ci0JaWYgKGJwLT5jbmljX2ZsYWdzICYgQk5YMlhfQ05JQ19GTEFHX01BQ19TRVQpIHsKLQkJYnAtPmNuaWNfZmxhZ3MgJj0gfkJOWDJYX0NOSUNfRkxBR19NQUNfU0VUOwotCQlibngyeF9zZXRfaXNjc2lfZXRoX21hY19hZGRyKGJwLCAwKTsKLQl9Ci0JY3AtPmRydl9zdGF0ZSA9IDA7Ci0JcmN1X2Fzc2lnbl9wb2ludGVyKGJwLT5jbmljX29wcywgTlVMTCk7Ci0JbXV0ZXhfdW5sb2NrKCZicC0+Y25pY19tdXRleCk7Ci0Jc3luY2hyb25pemVfcmN1KCk7Ci0Ja2ZyZWUoYnAtPmNuaWNfa3dxKTsKLQlicC0+Y25pY19rd3EgPSBOVUxMOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0cnVjdCBjbmljX2V0aF9kZXYgKmJueDJ4X2NuaWNfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgY25pY19ldGhfZGV2ICpjcCA9ICZicC0+Y25pY19ldGhfZGV2OwotCi0JY3AtPmRydl9vd25lciA9IFRISVNfTU9EVUxFOwotCWNwLT5jaGlwX2lkID0gQ0hJUF9JRChicCk7Ci0JY3AtPnBkZXYgPSBicC0+cGRldjsKLQljcC0+aW9fYmFzZSA9IGJwLT5yZWd2aWV3OwotCWNwLT5pb19iYXNlMiA9IGJwLT5kb29yYmVsbHM7Ci0JY3AtPm1heF9rd3FlX3BlbmRpbmcgPSA4OwotCWNwLT5jdHhfYmxrX3NpemUgPSBDTklDX0NUWF9QRVJfSUxUICogc2l6ZW9mKHVuaW9uIGNkdV9jb250ZXh0KTsKLQljcC0+Y3R4X3RibF9vZmZzZXQgPSBGVU5DX0lMVF9CQVNFKEJQX0ZVTkMoYnApKSArIDE7Ci0JY3AtPmN0eF90YmxfbGVuID0gQ05JQ19JTFRfTElORVM7Ci0JY3AtPnN0YXJ0aW5nX2NpZCA9IEJDTV9DTklDX0NJRF9TVEFSVDsKLQljcC0+ZHJ2X3N1Ym1pdF9rd3Flc18xNiA9IGJueDJ4X2NuaWNfc3BfcXVldWU7Ci0JY3AtPmRydl9jdGwgPSBibngyeF9kcnZfY3RsOwotCWNwLT5kcnZfcmVnaXN0ZXJfY25pYyA9IGJueDJ4X3JlZ2lzdGVyX2NuaWM7Ci0JY3AtPmRydl91bnJlZ2lzdGVyX2NuaWMgPSBibngyeF91bnJlZ2lzdGVyX2NuaWM7Ci0KLQlyZXR1cm4gY3A7Ci19Ci1FWFBPUlRfU1lNQk9MKGJueDJ4X2NuaWNfcHJvYmUpOwotCi0jZW5kaWYgLyogQkNNX0NOSUMgKi8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCmluZGV4IGRmNDgzMDcuLmM3NDZiMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKQEAgLTIzMywzNCArMjMzLDI3IEBACiAJX3VubG9ja190eF9oYXNodGJsKGJvbmQpOwogfQogCitzdGF0aWMgbG9uZyBsb25nIGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpCit7CisJcmV0dXJuIChzNjQpIChzbGF2ZS0+c3BlZWQgPDwgMjApIC0gLyogQ29udmVydCB0byBNZWdhYml0IHBlciBzZWMgKi8KKwkgICAgICAgKHM2NCkgKFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkIDw8IDMpOyAvKiBCeXRlcyB0byBiaXRzICovCit9CisKIC8qIENhbGxlciBtdXN0IGhvbGQgYm9uZCBsb2NrIGZvciByZWFkICovCiBzdGF0aWMgc3RydWN0IHNsYXZlICp0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKIHsKIAlzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCAqbGVhc3RfbG9hZGVkOwotCXM2NCBtYXhfZ2FwOwotCWludCBpLCBmb3VuZCA9IDA7CisJbG9uZyBsb25nIG1heF9nYXA7CisJaW50IGk7CiAKLQkvKiBGaW5kIHRoZSBmaXJzdCBlbmFibGVkIHNsYXZlICovCi0JYm9uZF9mb3JfZWFjaF9zbGF2ZShib25kLCBzbGF2ZSwgaSkgewotCQlpZiAoU0xBVkVfSVNfT0soc2xhdmUpKSB7Ci0JCQlmb3VuZCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmICghZm91bmQpIHsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JbGVhc3RfbG9hZGVkID0gc2xhdmU7Ci0JbWF4X2dhcCA9IChzNjQpKHNsYXZlLT5zcGVlZCA8PCAyMCkgLSAvKiBDb252ZXJ0IHRvIE1lZ2FiaXQgcGVyIHNlYyAqLwotCQkJKHM2NCkoU0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWQgPDwgMyk7IC8qIEJ5dGVzIHRvIGJpdHMgKi8KKwlsZWFzdF9sb2FkZWQgPSBOVUxMOworCW1heF9nYXAgPSBMTE9OR19NSU47CiAKIAkvKiBGaW5kIHRoZSBzbGF2ZSB3aXRoIHRoZSBsYXJnZXN0IGdhcCAqLwotCWJvbmRfZm9yX2VhY2hfc2xhdmVfZnJvbShib25kLCBzbGF2ZSwgaSwgbGVhc3RfbG9hZGVkKSB7CisJYm9uZF9mb3JfZWFjaF9zbGF2ZShib25kLCBzbGF2ZSwgaSkgewogCQlpZiAoU0xBVkVfSVNfT0soc2xhdmUpKSB7Ci0JCQlzNjQgZ2FwID0gKHM2NCkoc2xhdmUtPnNwZWVkIDw8IDIwKSAtCi0JCQkJCShzNjQpKFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkIDw8IDMpOworCQkJbG9uZyBsb25nIGdhcCA9IGNvbXB1dGVfZ2FwKHNsYXZlKTsKKwogCQkJaWYgKG1heF9nYXAgPCBnYXApIHsKIAkJCQlsZWFzdF9sb2FkZWQgPSBzbGF2ZTsKIAkJCQltYXhfZ2FwID0gZ2FwOwpAQCAtNjg5LDcgKzY4Miw3IEBACiAJCQljbGllbnRfaW5mby0+bnR0ID0gMDsKIAkJfQogCi0JCWlmICghbGlzdF9lbXB0eSgmYm9uZC0+dmxhbl9saXN0KSkgeworCQlpZiAoYm9uZC0+dmxncnApIHsKIAkJCWlmICghdmxhbl9nZXRfdGFnKHNrYiwgJmNsaWVudF9pbmZvLT52bGFuX2lkKSkKIAkJCQljbGllbnRfaW5mby0+dGFnID0gMTsKIAkJfQpAQCAtODIyLDcgKzgxNSw3IEBACiAKIAkvKmluaXRpYWxpemUgcGFja2V0IHR5cGUqLwogCXBrX3R5cGUtPnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BUlApOwotCXBrX3R5cGUtPmRldiA9IE5VTEw7CisJcGtfdHlwZS0+ZGV2ID0gYm9uZC0+ZGV2OwogCXBrX3R5cGUtPmZ1bmMgPSBybGJfYXJwX3JlY3Y7CiAKIAkvKiByZWdpc3RlciB0byByZWNlaXZlIEFSUHMgKi8KQEAgLTkxMSw3ICs5MDQsNyBAQAogCQlza2ItPnByaW9yaXR5ID0gVENfUFJJT19DT05UUk9MOwogCQlza2ItPmRldiA9IHNsYXZlLT5kZXY7CiAKLQkJaWYgKCFsaXN0X2VtcHR5KCZib25kLT52bGFuX2xpc3QpKSB7CisJCWlmIChib25kLT52bGdycCkgewogCQkJc3RydWN0IHZsYW5fZW50cnkgKnZsYW47CiAKIAkJCXZsYW4gPSBib25kX25leHRfdmxhbihib25kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2lwdjYuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9pcHY2LmMKaW5kZXggOTY5ZmZlZC4uMTIxYjA3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2lwdjYuYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfaXB2Ni5jCkBAIC0xNzgsNiArMTc4LDggQEAKIAkJfQogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkodmxhbiwgJmJvbmQtPnZsYW5fbGlzdCwgdmxhbl9saXN0KSB7CisJCQlpZiAoIWJvbmQtPnZsZ3JwKQorCQkJCWNvbnRpbnVlOwogCQkJdmxhbl9kZXYgPSB2bGFuX2dyb3VwX2dldF9kZXZpY2UoYm9uZC0+dmxncnAsCiAJCQkJCQkJIHZsYW4tPnZsYW5faWQpOwogCQkJaWYgKHZsYW5fZGV2ID09IGV2ZW50X2RldikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKaW5kZXggYzNkOThkZC4uMmNjNGNmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCkBAIC05MCw2ICs5MCw3IEBACiAjZGVmaW5lIEJPTkRfTElOS19BUlBfSU5URVJWCTAKIAogc3RhdGljIGludCBtYXhfYm9uZHMJPSBCT05EX0RFRkFVTFRfTUFYX0JPTkRTOworc3RhdGljIGludCB0eF9xdWV1ZXMJPSBCT05EX0RFRkFVTFRfVFhfUVVFVUVTOwogc3RhdGljIGludCBudW1fZ3JhdF9hcnAgPSAxOwogc3RhdGljIGludCBudW1fdW5zb2xfbmEgPSAxOwogc3RhdGljIGludCBtaWltb24JPSBCT05EX0xJTktfTU9OX0lOVEVSVjsKQEAgLTEwNiwxMCArMTA3LDEzIEBACiBzdGF0aWMgY2hhciAqYXJwX2lwX3RhcmdldFtCT05EX01BWF9BUlBfVEFSR0VUU107CiBzdGF0aWMgY2hhciAqYXJwX3ZhbGlkYXRlOwogc3RhdGljIGNoYXIgKmZhaWxfb3Zlcl9tYWM7CitzdGF0aWMgaW50IGFsbF9zbGF2ZXNfYWN0aXZlID0gMDsKIHN0YXRpYyBzdHJ1Y3QgYm9uZF9wYXJhbXMgYm9uZGluZ19kZWZhdWx0czsKIAogbW9kdWxlX3BhcmFtKG1heF9ib25kcywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobWF4X2JvbmRzLCAiTWF4IG51bWJlciBvZiBib25kZWQgZGV2aWNlcyIpOworbW9kdWxlX3BhcmFtKHR4X3F1ZXVlcywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModHhfcXVldWVzLCAiTWF4IG51bWJlciBvZiB0cmFuc21pdCBxdWV1ZXMgKGRlZmF1bHQgPSAxNikiKTsKIG1vZHVsZV9wYXJhbShudW1fZ3JhdF9hcnAsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG51bV9ncmF0X2FycCwgIk51bWJlciBvZiBncmF0dWl0b3VzIEFSUCBwYWNrZXRzIHRvIHNlbmQgb24gZmFpbG92ZXIgZXZlbnQiKTsKIG1vZHVsZV9wYXJhbShudW1fdW5zb2xfbmEsIGludCwgMDY0NCk7CkBAIC0xNTUsNiArMTU5LDEwIEBACiBNT0RVTEVfUEFSTV9ERVNDKGFycF92YWxpZGF0ZSwgInZhbGlkYXRlIHNyYy9kc3Qgb2YgQVJQIHByb2Jlczogbm9uZSAoZGVmYXVsdCksIGFjdGl2ZSwgYmFja3VwIG9yIGFsbCIpOwogbW9kdWxlX3BhcmFtKGZhaWxfb3Zlcl9tYWMsIGNoYXJwLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZmFpbF9vdmVyX21hYywgIkZvciBhY3RpdmUtYmFja3VwLCBkbyBub3Qgc2V0IGFsbCBzbGF2ZXMgdG8gdGhlIHNhbWUgTUFDLiAgbm9uZSAoZGVmYXVsdCksIGFjdGl2ZSBvciBmb2xsb3ciKTsKK21vZHVsZV9wYXJhbShhbGxfc2xhdmVzX2FjdGl2ZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoYWxsX3NsYXZlc19hY3RpdmUsICJLZWVwIGFsbCBmcmFtZXMgcmVjZWl2ZWQgb24gYW4gaW50ZXJmYWNlIgorCQkJCSAgICAgImJ5IHNldHRpbmcgYWN0aXZlIGZsYWcgZm9yIGFsbCBzbGF2ZXMuICAiCisJCQkJICAgICAiMCBmb3IgbmV2ZXIgKGRlZmF1bHQpLCAxIGZvciBhbHdheXMuIik7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFsIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTY4LDcgKzE3Niw5IEBACiBzdGF0aWMgaW50IGJvbmRfbW9kZQk9IEJPTkRfTU9ERV9ST1VORFJPQklOOwogc3RhdGljIGludCB4bWl0X2hhc2h0eXBlID0gQk9ORF9YTUlUX1BPTElDWV9MQVlFUjI7CiBzdGF0aWMgaW50IGxhY3BfZmFzdDsKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogc3RhdGljIGludCBkaXNhYmxlX25ldHBvbGwgPSAxOworI2VuZGlmCiAKIGNvbnN0IHN0cnVjdCBib25kX3Bhcm1fdGJsIGJvbmRfbGFjcF90YmxbXSA9IHsKIHsJInNsb3ciLAkJQURfTEFDUF9TTE9XfSwKQEAgLTQxNCw2ICs0MjQsNyBAQAogewogCXVuc2lnbmVkIHNob3J0IHVuaW5pdGlhbGl6ZWRfdmFyKHZsYW5faWQpOwogCisJLyogVGVzdCB2bGFuX2xpc3Qgbm90IHZsZ3JwIHRvIGNhdGNoIGFuZCBoYW5kbGUgODAyLjFwIHRhZ3MgKi8KIAlpZiAoIWxpc3RfZW1wdHkoJmJvbmQtPnZsYW5fbGlzdCkgJiYKIAkgICAgIShzbGF2ZV9kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19WTEFOX1RYKSAmJgogCSAgICB2bGFuX2dldF90YWcoc2tiLCAmdmxhbl9pZCkgPT0gMCkgewpAQCAtNDc3LDcgKzQ4OCw5IEBACiAJc3RydWN0IHNsYXZlICpzbGF2ZTsKIAlpbnQgaTsKIAorCXdyaXRlX2xvY2soJmJvbmQtPmxvY2spOwogCWJvbmQtPnZsZ3JwID0gZ3JwOworCXdyaXRlX3VubG9jaygmYm9uZC0+bG9jayk7CiAKIAlib25kX2Zvcl9lYWNoX3NsYXZlKGJvbmQsIHNsYXZlLCBpKSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYgPSBzbGF2ZS0+ZGV2OwpAQCAtNTU3LDEwICs1NzAsOCBAQAogCXN0cnVjdCB2bGFuX2VudHJ5ICp2bGFuOwogCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqc2xhdmVfb3BzID0gc2xhdmVfZGV2LT5uZXRkZXZfb3BzOwogCi0Jd3JpdGVfbG9ja19iaCgmYm9uZC0+bG9jayk7Ci0KLQlpZiAobGlzdF9lbXB0eSgmYm9uZC0+dmxhbl9saXN0KSkKLQkJZ290byBvdXQ7CisJaWYgKCFib25kLT52bGdycCkKKwkJcmV0dXJuOwogCiAJaWYgKChzbGF2ZV9kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19WTEFOX1JYKSAmJgogCSAgICBzbGF2ZV9vcHMtPm5kb192bGFuX3J4X3JlZ2lzdGVyKQpAQCAtNTY4LDEzICs1NzksMTAgQEAKIAogCWlmICghKHNsYXZlX2Rldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fRklMVEVSKSB8fAogCSAgICAhKHNsYXZlX29wcy0+bmRvX3ZsYW5fcnhfYWRkX3ZpZCkpCi0JCWdvdG8gb3V0OworCQlyZXR1cm47CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sICZib25kLT52bGFuX2xpc3QsIHZsYW5fbGlzdCkKIAkJc2xhdmVfb3BzLT5uZG9fdmxhbl9yeF9hZGRfdmlkKHNsYXZlX2Rldiwgdmxhbi0+dmxhbl9pZCk7Ci0KLW91dDoKLQl3cml0ZV91bmxvY2tfYmgoJmJvbmQtPmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCBib25kX2RlbF92bGFuc19mcm9tX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kLApAQCAtNTg0LDE2ICs1OTIsMTYgQEAKIAlzdHJ1Y3Qgdmxhbl9lbnRyeSAqdmxhbjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9kZXY7CiAKLQl3cml0ZV9sb2NrX2JoKCZib25kLT5sb2NrKTsKLQotCWlmIChsaXN0X2VtcHR5KCZib25kLT52bGFuX2xpc3QpKQotCQlnb3RvIG91dDsKKwlpZiAoIWJvbmQtPnZsZ3JwKQorCQlyZXR1cm47CiAKIAlpZiAoIShzbGF2ZV9kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19WTEFOX0ZJTFRFUikgfHwKIAkgICAgIShzbGF2ZV9vcHMtPm5kb192bGFuX3J4X2tpbGxfdmlkKSkKIAkJZ290byB1bnJlZzsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodmxhbiwgJmJvbmQtPnZsYW5fbGlzdCwgdmxhbl9saXN0KSB7CisJCWlmICghdmxhbi0+dmxhbl9pZCkKKwkJCWNvbnRpbnVlOwogCQkvKiBTYXZlIGFuZCB0aGVuIHJlc3RvcmUgdmxhbl9kZXYgaW4gdGhlIGdycCBhcnJheSwKIAkJICogc2luY2UgdGhlIHNsYXZlJ3MgZHJpdmVyIG1pZ2h0IGNsZWFyIGl0LgogCQkgKi8KQEAgLTYwNiw5ICs2MTQsNiBAQAogCWlmICgoc2xhdmVfZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSFdfVkxBTl9SWCkgJiYKIAkgICAgc2xhdmVfb3BzLT5uZG9fdmxhbl9yeF9yZWdpc3RlcikKIAkJc2xhdmVfb3BzLT5uZG9fdmxhbl9yeF9yZWdpc3RlcihzbGF2ZV9kZXYsIE5VTEwpOwotCi1vdXQ6Ci0Jd3JpdGVfdW5sb2NrX2JoKCZib25kLT5sb2NrKTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExpbmsgc3RhdHVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTQzMyw3ICsxNDM4LDcgQEAKIAkvKiBubyBuZWVkIHRvIGxvY2sgc2luY2Ugd2UncmUgcHJvdGVjdGVkIGJ5IHJ0bmxfbG9jayAqLwogCWlmIChzbGF2ZV9kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQpIHsKIAkJcHJfZGVidWcoIiVzOiBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRFxuIiwgc2xhdmVfZGV2LT5uYW1lKTsKLQkJaWYgKCFsaXN0X2VtcHR5KCZib25kLT52bGFuX2xpc3QpKSB7CisJCWlmIChib25kLT52bGdycCkgewogCQkJcHJfZXJyKCIlczogRXJyb3I6IGNhbm5vdCBlbnNsYXZlIFZMQU4gY2hhbGxlbmdlZCBzbGF2ZSAlcyBvbiBWTEFOIGVuYWJsZWQgYm9uZCAlc1xuIiwKIAkJCSAgICAgICBib25kX2Rldi0+bmFtZSwgc2xhdmVfZGV2LT5uYW1lLCBib25kX2Rldi0+bmFtZSk7CiAJCQlyZXR1cm4gLUVQRVJNOwpAQCAtMTUyMiwxNiArMTUyNywzMiBAQAogCQl9CiAJfQogCisJLyogSWYgdGhpcyBpcyB0aGUgZmlyc3Qgc2xhdmUsIHRoZW4gd2UgbmVlZCB0byBzZXQgdGhlIG1hc3RlcidzIGhhcmR3YXJlCisJICogYWRkcmVzcyB0byBiZSB0aGUgc2FtZSBhcyB0aGUgc2xhdmUncy4gKi8KKwlpZiAoYm9uZC0+c2xhdmVfY250ID09IDApCisJCW1lbWNweShib25kLT5kZXYtPmRldl9hZGRyLCBzbGF2ZV9kZXYtPmRldl9hZGRyLAorCQkgICAgICAgc2xhdmVfZGV2LT5hZGRyX2xlbik7CisKKwogCW5ld19zbGF2ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbGF2ZSksIEdGUF9LRVJORUwpOwogCWlmICghbmV3X3NsYXZlKSB7CiAJCXJlcyA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX3VuZG9fZmxhZ3M7CiAJfQogCi0JLyogc2F2ZSBzbGF2ZSdzIG9yaWdpbmFsIGZsYWdzIGJlZm9yZSBjYWxsaW5nCi0JICogbmV0ZGV2X3NldF9tYXN0ZXIgYW5kIGRldl9vcGVuCisJLyoKKwkgKiBTZXQgdGhlIG5ld19zbGF2ZSdzIHF1ZXVlX2lkIHRvIGJlIHplcm8uICBRdWV1ZSBJRCBtYXBwaW5nCisJICogaXMgc2V0IHZpYSBzeXNmcyBvciBtb2R1bGUgb3B0aW9uIGlmIGRlc2lyZWQuCiAJICovCi0JbmV3X3NsYXZlLT5vcmlnaW5hbF9mbGFncyA9IHNsYXZlX2Rldi0+ZmxhZ3M7CisJbmV3X3NsYXZlLT5xdWV1ZV9pZCA9IDA7CisKKwkvKiBTYXZlIHNsYXZlJ3Mgb3JpZ2luYWwgbXR1IGFuZCB0aGVuIHNldCBpdCB0byBtYXRjaCB0aGUgYm9uZCAqLworCW5ld19zbGF2ZS0+b3JpZ2luYWxfbXR1ID0gc2xhdmVfZGV2LT5tdHU7CisJcmVzID0gZGV2X3NldF9tdHUoc2xhdmVfZGV2LCBib25kLT5kZXYtPm10dSk7CisJaWYgKHJlcykgeworCQlwcl9kZWJ1ZygiRXJyb3IgJWQgY2FsbGluZyBkZXZfc2V0X210dVxuIiwgcmVzKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CiAKIAkvKgogCSAqIFNhdmUgc2xhdmUncyBvcmlnaW5hbCAoInBlcm1hbmVudCIpIG1hYyBhZGRyZXNzIGZvciBtb2RlcwpAQCAtMTU1MCw3ICsxNTcxLDcgQEAKIAkJcmVzID0gZGV2X3NldF9tYWNfYWRkcmVzcyhzbGF2ZV9kZXYsICZhZGRyKTsKIAkJaWYgKHJlcykgewogCQkJcHJfZGVidWcoIkVycm9yICVkIGNhbGxpbmcgc2V0X21hY19hZGRyZXNzXG4iLCByZXMpOwotCQkJZ290byBlcnJfZnJlZTsKKwkJCWdvdG8gZXJyX3Jlc3RvcmVfbXR1OwogCQl9CiAJfQogCkBAIC0xNzkzLDYgKzE4MTQsOSBAQAogCQlkZXZfc2V0X21hY19hZGRyZXNzKHNsYXZlX2RldiwgJmFkZHIpOwogCX0KIAorZXJyX3Jlc3RvcmVfbXR1OgorCWRldl9zZXRfbXR1KHNsYXZlX2RldiwgbmV3X3NsYXZlLT5vcmlnaW5hbF9tdHUpOworCiBlcnJfZnJlZToKIAlrZnJlZShuZXdfc2xhdmUpOwogCkBAIC0xOTEzLDcgKzE5MzcsNyBAQAogCQkgKi8KIAkJbWVtc2V0KGJvbmRfZGV2LT5kZXZfYWRkciwgMCwgYm9uZF9kZXYtPmFkZHJfbGVuKTsKIAotCQlpZiAobGlzdF9lbXB0eSgmYm9uZC0+dmxhbl9saXN0KSkgeworCQlpZiAoIWJvbmQtPnZsZ3JwKSB7CiAJCQlib25kX2Rldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQ7CiAJCX0gZWxzZSB7CiAJCQlwcl93YXJuaW5nKCIlczogV2FybmluZzogY2xlYXJpbmcgSFcgYWRkcmVzcyBvZiAlcyB3aGlsZSBpdCBzdGlsbCBoYXMgVkxBTnMuXG4iLApAQCAtMTk4MCw2ICsyMDA0LDggQEAKIAkJZGV2X3NldF9tYWNfYWRkcmVzcyhzbGF2ZV9kZXYsICZhZGRyKTsKIAl9CiAKKwlkZXZfc2V0X210dShzbGF2ZV9kZXYsIHNsYXZlLT5vcmlnaW5hbF9tdHUpOworCiAJc2xhdmVfZGV2LT5wcml2X2ZsYWdzICY9IH4oSUZGX01BU1RFUl84MDIzQUQgfCBJRkZfTUFTVEVSX0FMQiB8CiAJCQkJICAgSUZGX1NMQVZFX0lOQUNUSVZFIHwgSUZGX0JPTkRJTkcgfAogCQkJCSAgIElGRl9TTEFWRV9ORUVEQVJQKTsKQEAgLTIxMDMsOSArMjEyOSw5IEBACiAJICovCiAJbWVtc2V0KGJvbmRfZGV2LT5kZXZfYWRkciwgMCwgYm9uZF9kZXYtPmFkZHJfbGVuKTsKIAotCWlmIChsaXN0X2VtcHR5KCZib25kLT52bGFuX2xpc3QpKQorCWlmICghYm9uZC0+dmxncnApIHsKIAkJYm9uZF9kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVkxBTl9DSEFMTEVOR0VEOwotCWVsc2UgeworCX0gZWxzZSB7CiAJCXByX3dhcm5pbmcoIiVzOiBXYXJuaW5nOiBjbGVhcmluZyBIVyBhZGRyZXNzIG9mICVzIHdoaWxlIGl0IHN0aWxsIGhhcyBWTEFOcy5cbiIsCiAJCQkgICBib25kX2Rldi0+bmFtZSwgYm9uZF9kZXYtPm5hbWUpOwogCQlwcl93YXJuaW5nKCIlczogV2hlbiByZS1hZGRpbmcgc2xhdmVzLCBtYWtlIHN1cmUgdGhlIGJvbmQncyBIVyBhZGRyZXNzIG1hdGNoZXMgaXRzIFZMQU5zJy5cbiIsCkBAIC0yNTM4LDcgKzI1NjQsNyBAQAogCQlpZiAoIXRhcmdldHNbaV0pCiAJCQlicmVhazsKIAkJcHJfZGVidWcoImJhc2E6IHRhcmdldCAleFxuIiwgdGFyZ2V0c1tpXSk7Ci0JCWlmIChsaXN0X2VtcHR5KCZib25kLT52bGFuX2xpc3QpKSB7CisJCWlmICghYm9uZC0+dmxncnApIHsKIAkJCXByX2RlYnVnKCJiYXNhOiBlbXB0eSB2bGFuOiBhcnBfc2VuZFxuIik7CiAJCQlib25kX2FycF9zZW5kKHNsYXZlLT5kZXYsIEFSUE9QX1JFUVVFU1QsIHRhcmdldHNbaV0sCiAJCQkJICAgICAgYm9uZC0+bWFzdGVyX2lwLCAwKTsKQEAgLTI1NjYsNyArMjU5Miw3IEBACiAJCS8qCiAJCSAqIFRoaXMgdGFyZ2V0IGlzIG5vdCBvbiBhIFZMQU4KIAkJICovCi0JCWlmIChydC0+dS5kc3QuZGV2ID09IGJvbmQtPmRldikgeworCQlpZiAocnQtPmRzdC5kZXYgPT0gYm9uZC0+ZGV2KSB7CiAJCQlpcF9ydF9wdXQocnQpOwogCQkJcHJfZGVidWcoImJhc2E6IHJ0ZGV2ID09IGJvbmQtPmRldjogYXJwX3NlbmRcbiIpOwogCQkJYm9uZF9hcnBfc2VuZChzbGF2ZS0+ZGV2LCBBUlBPUF9SRVFVRVNULCB0YXJnZXRzW2ldLApAQCAtMjU3Nyw3ICsyNjAzLDcgQEAKIAkJdmxhbl9pZCA9IDA7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkodmxhbiwgJmJvbmQtPnZsYW5fbGlzdCwgdmxhbl9saXN0KSB7CiAJCQl2bGFuX2RldiA9IHZsYW5fZ3JvdXBfZ2V0X2RldmljZShib25kLT52bGdycCwgdmxhbi0+dmxhbl9pZCk7Ci0JCQlpZiAodmxhbl9kZXYgPT0gcnQtPnUuZHN0LmRldikgeworCQkJaWYgKHZsYW5fZGV2ID09IHJ0LT5kc3QuZGV2KSB7CiAJCQkJdmxhbl9pZCA9IHZsYW4tPnZsYW5faWQ7CiAJCQkJcHJfZGVidWcoImJhc2E6IHZsYW4gbWF0Y2ggb24gJXMgJWRcbiIsCiAJCQkJICAgICAgIHZsYW5fZGV2LT5uYW1lLCB2bGFuX2lkKTsKQEAgLTI1OTUsNyArMjYyMSw3IEBACiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByX3dhcm5pbmcoIiVzOiBubyBwYXRoIHRvIGFycF9pcF90YXJnZXQgJXBJNCB2aWEgcnQuZGV2ICVzXG4iLAogCQkJCSAgIGJvbmQtPmRldi0+bmFtZSwgJmZsLmZsNF9kc3QsCi0JCQkJICAgcnQtPnUuZHN0LmRldiA/IHJ0LT51LmRzdC5kZXYtPm5hbWUgOiAiTlVMTCIpOworCQkJCSAgIHJ0LT5kc3QuZGV2ID8gcnQtPmRzdC5kZXYtPm5hbWUgOiAiTlVMTCIpOwogCQl9CiAJCWlwX3J0X3B1dChydCk7CiAJfQpAQCAtMjYyNyw2ICsyNjUzLDkgQEAKIAkJCQlib25kLT5tYXN0ZXJfaXAsIDApOwogCX0KIAorCWlmICghYm9uZC0+dmxncnApCisJCXJldHVybjsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkodmxhbiwgJmJvbmQtPnZsYW5fbGlzdCwgdmxhbl9saXN0KSB7CiAJCXZsYW5fZGV2ID0gdmxhbl9ncm91cF9nZXRfZGV2aWNlKGJvbmQtPnZsZ3JwLCB2bGFuLT52bGFuX2lkKTsKIAkJaWYgKHZsYW4tPnZsYW5faXApIHsKQEAgLTMyNzYsNiArMzMwNSw3IEBACiAJCWVsc2UKIAkJCXNlcV9wdXRzKHNlcSwgIkFnZ3JlZ2F0b3IgSUQ6IE4vQVxuIik7CiAJfQorCXNlcV9wcmludGYoc2VxLCAiU2xhdmUgcXVldWUgSUQ6ICVkXG4iLCBzbGF2ZS0+cXVldWVfaWQpOwogfQogCiBzdGF0aWMgaW50IGJvbmRfaW5mb19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKQEAgLTM1NTgsNiArMzU4OCw4IEBACiAJCX0KIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sICZib25kLT52bGFuX2xpc3QsIHZsYW5fbGlzdCkgeworCQkJaWYgKCFib25kLT52bGdycCkKKwkJCQljb250aW51ZTsKIAkJCXZsYW5fZGV2ID0gdmxhbl9ncm91cF9nZXRfZGV2aWNlKGJvbmQtPnZsZ3JwLCB2bGFuLT52bGFuX2lkKTsKIAkJCWlmICh2bGFuX2RldiA9PSBldmVudF9kZXYpIHsKIAkJCQlzd2l0Y2ggKGV2ZW50KSB7CkBAIC0zNzg1LDUwICszODE3LDQ5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYm9uZF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KQorc3RhdGljIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqYm9uZF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LAorCQkJCQkJc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cykKIHsKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmYm9uZF9kZXYtPnN0YXRzOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIGxvY2FsX3N0YXRzOworCXN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCB0ZW1wOwogCXN0cnVjdCBzbGF2ZSAqc2xhdmU7CiAJaW50IGk7CiAKLQltZW1zZXQoJmxvY2FsX3N0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpKTsKKwltZW1zZXQoc3RhdHMsIDAsIHNpemVvZigqc3RhdHMpKTsKIAogCXJlYWRfbG9ja19iaCgmYm9uZC0+bG9jayk7CiAKIAlib25kX2Zvcl9lYWNoX3NsYXZlKGJvbmQsIHNsYXZlLCBpKSB7Ci0JCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzc3RhdHMgPSBkZXZfZ2V0X3N0YXRzKHNsYXZlLT5kZXYpOworCQljb25zdCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnNzdGF0cyA9CisJCQlkZXZfZ2V0X3N0YXRzKHNsYXZlLT5kZXYsICZ0ZW1wKTsKIAotCQlsb2NhbF9zdGF0cy5yeF9wYWNrZXRzICs9IHNzdGF0cy0+cnhfcGFja2V0czsKLQkJbG9jYWxfc3RhdHMucnhfYnl0ZXMgKz0gc3N0YXRzLT5yeF9ieXRlczsKLQkJbG9jYWxfc3RhdHMucnhfZXJyb3JzICs9IHNzdGF0cy0+cnhfZXJyb3JzOwotCQlsb2NhbF9zdGF0cy5yeF9kcm9wcGVkICs9IHNzdGF0cy0+cnhfZHJvcHBlZDsKKwkJc3RhdHMtPnJ4X3BhY2tldHMgKz0gc3N0YXRzLT5yeF9wYWNrZXRzOworCQlzdGF0cy0+cnhfYnl0ZXMgKz0gc3N0YXRzLT5yeF9ieXRlczsKKwkJc3RhdHMtPnJ4X2Vycm9ycyArPSBzc3RhdHMtPnJ4X2Vycm9yczsKKwkJc3RhdHMtPnJ4X2Ryb3BwZWQgKz0gc3N0YXRzLT5yeF9kcm9wcGVkOwogCi0JCWxvY2FsX3N0YXRzLnR4X3BhY2tldHMgKz0gc3N0YXRzLT50eF9wYWNrZXRzOwotCQlsb2NhbF9zdGF0cy50eF9ieXRlcyArPSBzc3RhdHMtPnR4X2J5dGVzOwotCQlsb2NhbF9zdGF0cy50eF9lcnJvcnMgKz0gc3N0YXRzLT50eF9lcnJvcnM7Ci0JCWxvY2FsX3N0YXRzLnR4X2Ryb3BwZWQgKz0gc3N0YXRzLT50eF9kcm9wcGVkOworCQlzdGF0cy0+dHhfcGFja2V0cyArPSBzc3RhdHMtPnR4X3BhY2tldHM7CisJCXN0YXRzLT50eF9ieXRlcyArPSBzc3RhdHMtPnR4X2J5dGVzOworCQlzdGF0cy0+dHhfZXJyb3JzICs9IHNzdGF0cy0+dHhfZXJyb3JzOworCQlzdGF0cy0+dHhfZHJvcHBlZCArPSBzc3RhdHMtPnR4X2Ryb3BwZWQ7CiAKLQkJbG9jYWxfc3RhdHMubXVsdGljYXN0ICs9IHNzdGF0cy0+bXVsdGljYXN0OwotCQlsb2NhbF9zdGF0cy5jb2xsaXNpb25zICs9IHNzdGF0cy0+Y29sbGlzaW9uczsKKwkJc3RhdHMtPm11bHRpY2FzdCArPSBzc3RhdHMtPm11bHRpY2FzdDsKKwkJc3RhdHMtPmNvbGxpc2lvbnMgKz0gc3N0YXRzLT5jb2xsaXNpb25zOwogCi0JCWxvY2FsX3N0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgKz0gc3N0YXRzLT5yeF9sZW5ndGhfZXJyb3JzOwotCQlsb2NhbF9zdGF0cy5yeF9vdmVyX2Vycm9ycyArPSBzc3RhdHMtPnJ4X292ZXJfZXJyb3JzOwotCQlsb2NhbF9zdGF0cy5yeF9jcmNfZXJyb3JzICs9IHNzdGF0cy0+cnhfY3JjX2Vycm9yczsKLQkJbG9jYWxfc3RhdHMucnhfZnJhbWVfZXJyb3JzICs9IHNzdGF0cy0+cnhfZnJhbWVfZXJyb3JzOwotCQlsb2NhbF9zdGF0cy5yeF9maWZvX2Vycm9ycyArPSBzc3RhdHMtPnJ4X2ZpZm9fZXJyb3JzOwotCQlsb2NhbF9zdGF0cy5yeF9taXNzZWRfZXJyb3JzICs9IHNzdGF0cy0+cnhfbWlzc2VkX2Vycm9yczsKKwkJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMgKz0gc3N0YXRzLT5yeF9sZW5ndGhfZXJyb3JzOworCQlzdGF0cy0+cnhfb3Zlcl9lcnJvcnMgKz0gc3N0YXRzLT5yeF9vdmVyX2Vycm9yczsKKwkJc3RhdHMtPnJ4X2NyY19lcnJvcnMgKz0gc3N0YXRzLT5yeF9jcmNfZXJyb3JzOworCQlzdGF0cy0+cnhfZnJhbWVfZXJyb3JzICs9IHNzdGF0cy0+cnhfZnJhbWVfZXJyb3JzOworCQlzdGF0cy0+cnhfZmlmb19lcnJvcnMgKz0gc3N0YXRzLT5yeF9maWZvX2Vycm9yczsKKwkJc3RhdHMtPnJ4X21pc3NlZF9lcnJvcnMgKz0gc3N0YXRzLT5yeF9taXNzZWRfZXJyb3JzOwogCi0JCWxvY2FsX3N0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzICs9IHNzdGF0cy0+dHhfYWJvcnRlZF9lcnJvcnM7Ci0JCWxvY2FsX3N0YXRzLnR4X2NhcnJpZXJfZXJyb3JzICs9IHNzdGF0cy0+dHhfY2Fycmllcl9lcnJvcnM7Ci0JCWxvY2FsX3N0YXRzLnR4X2ZpZm9fZXJyb3JzICs9IHNzdGF0cy0+dHhfZmlmb19lcnJvcnM7Ci0JCWxvY2FsX3N0YXRzLnR4X2hlYXJ0YmVhdF9lcnJvcnMgKz0gc3N0YXRzLT50eF9oZWFydGJlYXRfZXJyb3JzOwotCQlsb2NhbF9zdGF0cy50eF93aW5kb3dfZXJyb3JzICs9IHNzdGF0cy0+dHhfd2luZG93X2Vycm9yczsKKwkJc3RhdHMtPnR4X2Fib3J0ZWRfZXJyb3JzICs9IHNzdGF0cy0+dHhfYWJvcnRlZF9lcnJvcnM7CisJCXN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycyArPSBzc3RhdHMtPnR4X2NhcnJpZXJfZXJyb3JzOworCQlzdGF0cy0+dHhfZmlmb19lcnJvcnMgKz0gc3N0YXRzLT50eF9maWZvX2Vycm9yczsKKwkJc3RhdHMtPnR4X2hlYXJ0YmVhdF9lcnJvcnMgKz0gc3N0YXRzLT50eF9oZWFydGJlYXRfZXJyb3JzOworCQlzdGF0cy0+dHhfd2luZG93X2Vycm9ycyArPSBzc3RhdHMtPnR4X3dpbmRvd19lcnJvcnM7CiAJfQogCi0JbWVtY3B5KHN0YXRzLCAmbG9jYWxfc3RhdHMsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykpOwotCiAJcmVhZF91bmxvY2tfYmgoJmJvbmQtPmxvY2spOwogCiAJcmV0dXJuIHN0YXRzOwpAQCAtNDQxMiw5ICs0NDQzLDU5IEBACiAJfQogfQogCisvKgorICogTG9va3VwIHRoZSBzbGF2ZSB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgcWlkCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGJvbmRfc2xhdmVfb3ZlcnJpZGUoc3RydWN0IGJvbmRpbmcgKmJvbmQsCisJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpbnQgaSwgcmVzID0gMTsKKwlzdHJ1Y3Qgc2xhdmUgKnNsYXZlID0gTlVMTDsKKwlzdHJ1Y3Qgc2xhdmUgKmNoZWNrX3NsYXZlOworCisJcmVhZF9sb2NrKCZib25kLT5sb2NrKTsKKworCWlmICghQk9ORF9JU19PSyhib25kKSB8fCAhc2tiLT5xdWV1ZV9tYXBwaW5nKQorCQlnb3RvIG91dDsKKworCS8qIEZpbmQgb3V0IGlmIGFueSBzbGF2ZXMgaGF2ZSB0aGUgc2FtZSBtYXBwaW5nIGFzIHRoaXMgc2tiLiAqLworCWJvbmRfZm9yX2VhY2hfc2xhdmUoYm9uZCwgY2hlY2tfc2xhdmUsIGkpIHsKKwkJaWYgKGNoZWNrX3NsYXZlLT5xdWV1ZV9pZCA9PSBza2ItPnF1ZXVlX21hcHBpbmcpIHsKKwkJCXNsYXZlID0gY2hlY2tfc2xhdmU7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIElmIHRoZSBzbGF2ZSBpc24ndCBVUCwgdXNlIGRlZmF1bHQgdHJhbnNtaXQgcG9saWN5LiAqLworCWlmIChzbGF2ZSAmJiBzbGF2ZS0+cXVldWVfaWQgJiYgSVNfVVAoc2xhdmUtPmRldikgJiYKKwkgICAgKHNsYXZlLT5saW5rID09IEJPTkRfTElOS19VUCkpIHsKKwkJcmVzID0gYm9uZF9kZXZfcXVldWVfeG1pdChib25kLCBza2IsIHNsYXZlLT5kZXYpOworCX0KKworb3V0OgorCXJlYWRfdW5sb2NrKCZib25kLT5sb2NrKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgdTE2IGJvbmRfc2VsZWN0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJLyoKKwkgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiBleGlzdHMgdG8gaGVscCBkZXZfcGlja190eCBnZXQgdGhlIGNvcnJlY3QKKwkgKiBkZXN0aW5hdGlvbiBxdWV1ZS4gIFVzaW5nIGEgaGVscGVyIGZ1bmN0aW9uIHNraXBzIHRoZSBhIGNhbGwgdG8KKwkgKiBza2JfdHhfaGFzaCBhbmQgd2lsbCBwdXQgdGhlIHNrYnMgaW4gdGhlIHF1ZXVlIHdlIGV4cGVjdCBvbiB0aGVpcgorCSAqIHdheSBkb3duIHRvIHRoZSBib25kaW5nIGRyaXZlci4KKwkgKi8KKwlyZXR1cm4gc2tiLT5xdWV1ZV9tYXBwaW5nOworfQorCiBzdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JY29uc3Qgc3RydWN0IGJvbmRpbmcgKmJvbmQgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBib25kaW5nICpib25kID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChUWF9RVUVVRV9PVkVSUklERShib25kLT5wYXJhbXMubW9kZSkpIHsKKwkJaWYgKCFib25kX3NsYXZlX292ZXJyaWRlKGJvbmQsIHNrYikpCisJCQlyZXR1cm4gTkVUREVWX1RYX09LOworCX0KIAogCXN3aXRjaCAoYm9uZC0+cGFyYW1zLm1vZGUpIHsKIAljYXNlIEJPTkRfTU9ERV9ST1VORFJPQklOOgpAQCAtNDQ5OSw3ICs0NTgwLDggQEAKIAkubmRvX29wZW4JCT0gYm9uZF9vcGVuLAogCS5uZG9fc3RvcAkJPSBib25kX2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdAkJPSBib25kX3N0YXJ0X3htaXQsCi0JLm5kb19nZXRfc3RhdHMJCT0gYm9uZF9nZXRfc3RhdHMsCisJLm5kb19zZWxlY3RfcXVldWUJPSBib25kX3NlbGVjdF9xdWV1ZSwKKwkubmRvX2dldF9zdGF0czY0CT0gYm9uZF9nZXRfc3RhdHMsCiAJLm5kb19kb19pb2N0bAkJPSBib25kX2RvX2lvY3RsLAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gYm9uZF9zZXRfbXVsdGljYXN0X2xpc3QsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IGJvbmRfY2hhbmdlX210dSwKQEAgLTQ2MDQsNiArNDY4Niw3IEBACiBzdGF0aWMgdm9pZCBib25kX3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpCiB7CiAJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSBuZXRkZXZfcHJpdihib25kX2Rldik7CisJc3RydWN0IHZsYW5fZW50cnkgKnZsYW4sICp0bXA7CiAKIAlib25kX25ldHBvbGxfY2xlYW51cChib25kX2Rldik7CiAKQEAgLTQ2MTcsNiArNDcwMCwxMSBAQAogCWJvbmRfcmVtb3ZlX3Byb2NfZW50cnkoYm9uZCk7CiAKIAlfX2h3X2FkZHJfZmx1c2goJmJvbmQtPm1jX2xpc3QpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZsYW4sIHRtcCwgJmJvbmQtPnZsYW5fbGlzdCwgdmxhbl9saXN0KSB7CisJCWxpc3RfZGVsKCZ2bGFuLT52bGFuX2xpc3QpOworCQlrZnJlZSh2bGFuKTsKKwl9CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNb2R1bGUgaW5pdGlhbGl6YXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTQ3NjcsNiArNDg1NSwyMCBAQAogCQl9CiAJfQogCisJaWYgKHR4X3F1ZXVlcyA8IDEgfHwgdHhfcXVldWVzID4gMjU1KSB7CisJCXByX3dhcm5pbmcoIldhcm5pbmc6IHR4X3F1ZXVlcyAoJWQpIHNob3VsZCBiZSBiZXR3ZWVuICIKKwkJCSAgICIxIGFuZCAyNTUsIHJlc2V0dGluZyB0byAlZFxuIiwKKwkJCSAgIHR4X3F1ZXVlcywgQk9ORF9ERUZBVUxUX1RYX1FVRVVFUyk7CisJCXR4X3F1ZXVlcyA9IEJPTkRfREVGQVVMVF9UWF9RVUVVRVM7CisJfQorCisJaWYgKChhbGxfc2xhdmVzX2FjdGl2ZSAhPSAwKSAmJiAoYWxsX3NsYXZlc19hY3RpdmUgIT0gMSkpIHsKKwkJcHJfd2FybmluZygiV2FybmluZzogYWxsX3NsYXZlc19hY3RpdmUgbW9kdWxlIHBhcmFtZXRlciAoJWQpLCAiCisJCQkgICAibm90IG9mIHZhbGlkIHZhbHVlICgwLzEpLCBzbyBpdCB3YXMgc2V0IHRvICIKKwkJCSAgICIwXG4iLCBhbGxfc2xhdmVzX2FjdGl2ZSk7CisJCWFsbF9zbGF2ZXNfYWN0aXZlID0gMDsKKwl9CisKIAkvKiByZXNldCB2YWx1ZXMgZm9yIFRMQi9BTEIgKi8KIAlpZiAoKGJvbmRfbW9kZSA9PSBCT05EX01PREVfVExCKSB8fAogCSAgICAoYm9uZF9tb2RlID09IEJPTkRfTU9ERV9BTEIpKSB7CkBAIC00OTM3LDYgKzUwMzksOCBAQAogCXBhcmFtcy0+cHJpbWFyeVswXSA9IDA7CiAJcGFyYW1zLT5wcmltYXJ5X3Jlc2VsZWN0ID0gcHJpbWFyeV9yZXNlbGVjdF92YWx1ZTsKIAlwYXJhbXMtPmZhaWxfb3Zlcl9tYWMgPSBmYWlsX292ZXJfbWFjX3ZhbHVlOworCXBhcmFtcy0+dHhfcXVldWVzID0gdHhfcXVldWVzOworCXBhcmFtcy0+YWxsX3NsYXZlc19hY3RpdmUgPSBhbGxfc2xhdmVzX2FjdGl2ZTsKIAogCWlmIChwcmltYXJ5KSB7CiAJCXN0cm5jcHkocGFyYW1zLT5wcmltYXJ5LCBwcmltYXJ5LCBJRk5BTVNJWik7CkBAIC01MDIzLDggKzUxMjcsOCBAQAogCiAJcnRubF9sb2NrKCk7CiAKLQlib25kX2RldiA9IGFsbG9jX25ldGRldihzaXplb2Yoc3RydWN0IGJvbmRpbmcpLCBuYW1lID8gbmFtZSA6ICIiLAotCQkJCWJvbmRfc2V0dXApOworCWJvbmRfZGV2ID0gYWxsb2NfbmV0ZGV2X21xKHNpemVvZihzdHJ1Y3QgYm9uZGluZyksIG5hbWUgPyBuYW1lIDogIiIsCisJCQkJYm9uZF9zZXR1cCwgdHhfcXVldWVzKTsKIAlpZiAoIWJvbmRfZGV2KSB7CiAJCXByX2VycigiJXM6IGVlayEgY2FuJ3QgYWxsb2MgbmV0ZGV2IVxuIiwgbmFtZSk7CiAJCXJ0bmxfdW5sb2NrKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jCmluZGV4IGI4YmVjMDguLmMzMTFhZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jCkBAIC0yMTEsNyArMjExLDggQEAKIC8qCiAgKiBTZXQgdGhlIHNsYXZlcyBpbiB0aGUgY3VycmVudCBib25kLiAgVGhlIGJvbmQgaW50ZXJmYWNlIG11c3QgYmUKICAqIHVwIGZvciB0aGlzIHRvIHN1Y2NlZWQuCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGxhcmdlbHkgdGhlIHNhbWUgZmxvdyBhcyBib25kaW5nX3VwZGF0ZV9ib25kcygpLgorICogVGhpcyBpcyBzdXBwb3NlZCB0byBiZSBvbmx5IHRoaW4gd3JhcHBlciBmb3IgYm9uZF9lbnNsYXZlIGFuZCBib25kX3JlbGVhc2UuCisgKiBBbGwgaGFyZCB3b3JrIHNob3VsZCBiZSBkb25lIHRoZXJlLgogICovCiBzdGF0aWMgc3NpemVfdCBib25kaW5nX3N0b3JlX3NsYXZlcyhzdHJ1Y3QgZGV2aWNlICpkLAogCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTIxOSwxMCArMjIwLDggQEAKIHsKIAljaGFyIGNvbW1hbmRbSUZOQU1TSVogKyAxXSA9IHsgMCwgfTsKIAljaGFyICppZm5hbWU7Ci0JaW50IGksIHJlcywgZm91bmQsIHJldCA9IGNvdW50OwotCXUzMiBvcmlnaW5hbF9tdHU7Ci0Jc3RydWN0IHNsYXZlICpzbGF2ZTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKKwlpbnQgcmVzLCByZXQgPSBjb3VudDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBib25kaW5nICpib25kID0gdG9fYm9uZChkKTsKIAogCS8qIFF1aWNrIHNhbml0eSBjaGVjayAtLSBpcyB0aGUgYm9uZCBpbnRlcmZhY2UgdXA/ICovCkBAIC0yMzEsOCArMjMwLDYgQEAKIAkJCSAgIGJvbmQtPmRldi0+bmFtZSk7CiAJfQogCi0JLyogTm90ZTogIFdlIGNhbid0IGhvbGQgYm9uZC0+bG9jayBoZXJlLCBhcyBib25kX2NyZWF0ZSBncmFicyBpdC4gKi8KLQogCWlmICghcnRubF90cnlsb2NrKCkpCiAJCXJldHVybiByZXN0YXJ0X3N5c2NhbGwoKTsKIApAQCAtMjQyLDkwICsyMzksMzIgQEAKIAkgICAgIWRldl92YWxpZF9uYW1lKGlmbmFtZSkpCiAJCWdvdG8gZXJyX25vX2NtZDsKIAotCWlmIChjb21tYW5kWzBdID09ICcrJykgeworCWRldiA9IF9fZGV2X2dldF9ieV9uYW1lKGRldl9uZXQoYm9uZC0+ZGV2KSwgaWZuYW1lKTsKKwlpZiAoIWRldikgeworCQlwcl9pbmZvKCIlczogSW50ZXJmYWNlICVzIGRvZXMgbm90IGV4aXN0IVxuIiwKKwkJCWJvbmQtPmRldi0+bmFtZSwgaWZuYW1lKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQogCi0JCS8qIEdvdCBhIHNsYXZlIG5hbWUgaW4gaWZuYW1lLiAgSXMgaXQgYWxyZWFkeSBpbiB0aGUgbGlzdD8gKi8KLQkJZm91bmQgPSAwOwotCi0JCWRldiA9IF9fZGV2X2dldF9ieV9uYW1lKGRldl9uZXQoYm9uZC0+ZGV2KSwgaWZuYW1lKTsKLQkJaWYgKCFkZXYpIHsKLQkJCXByX2luZm8oIiVzOiBJbnRlcmZhY2UgJXMgZG9lcyBub3QgZXhpc3QhXG4iLAotCQkJCWJvbmQtPmRldi0+bmFtZSwgaWZuYW1lKTsKLQkJCXJldCA9IC1FTk9ERVY7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKSB7Ci0JCQlwcl9lcnIoIiVzOiBFcnJvcjogVW5hYmxlIHRvIGVuc2xhdmUgJXMgYmVjYXVzZSBpdCBpcyBhbHJlYWR5IHVwLlxuIiwKLQkJCSAgICAgICBib25kLT5kZXYtPm5hbWUsIGRldi0+bmFtZSk7Ci0JCQlyZXQgPSAtRVBFUk07Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCXJlYWRfbG9jaygmYm9uZC0+bG9jayk7Ci0JCWJvbmRfZm9yX2VhY2hfc2xhdmUoYm9uZCwgc2xhdmUsIGkpCi0JCQlpZiAoc2xhdmUtPmRldiA9PSBkZXYpIHsKLQkJCQlwcl9lcnIoIiVzOiBJbnRlcmZhY2UgJXMgaXMgYWxyZWFkeSBlbnNsYXZlZCFcbiIsCi0JCQkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgaWZuYW1lKTsKLQkJCQlyZXQgPSAtRVBFUk07Ci0JCQkJcmVhZF91bmxvY2soJmJvbmQtPmxvY2spOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQlyZWFkX3VubG9jaygmYm9uZC0+bG9jayk7Ci0KLQkJcHJfaW5mbygiJXM6IEFkZGluZyBzbGF2ZSAlcy5cbiIsIGJvbmQtPmRldi0+bmFtZSwgaWZuYW1lKTsKLQotCQkvKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBzbGF2ZSwgdGhlbiB3ZSBuZWVkIHRvIHNldAotCQkgICB0aGUgbWFzdGVyJ3MgaGFyZHdhcmUgYWRkcmVzcyB0byBiZSB0aGUgc2FtZSBhcyB0aGUKLQkJICAgc2xhdmUncy4gKi8KLQkJaWYgKGlzX3plcm9fZXRoZXJfYWRkcihib25kLT5kZXYtPmRldl9hZGRyKSkKLQkJCW1lbWNweShib25kLT5kZXYtPmRldl9hZGRyLCBkZXYtPmRldl9hZGRyLAotCQkJICAgICAgIGRldi0+YWRkcl9sZW4pOwotCi0JCS8qIFNldCB0aGUgc2xhdmUncyBNVFUgdG8gbWF0Y2ggdGhlIGJvbmQgKi8KLQkJb3JpZ2luYWxfbXR1ID0gZGV2LT5tdHU7Ci0JCXJlcyA9IGRldl9zZXRfbXR1KGRldiwgYm9uZC0+ZGV2LT5tdHUpOwotCQlpZiAocmVzKSB7Ci0JCQlyZXQgPSByZXM7Ci0JCQlnb3RvIG91dDsKLQkJfQotCisJc3dpdGNoIChjb21tYW5kWzBdKSB7CisJY2FzZSAnKyc6CisJCXByX2luZm8oIiVzOiBBZGRpbmcgc2xhdmUgJXMuXG4iLCBib25kLT5kZXYtPm5hbWUsIGRldi0+bmFtZSk7CiAJCXJlcyA9IGJvbmRfZW5zbGF2ZShib25kLT5kZXYsIGRldik7Ci0JCWJvbmRfZm9yX2VhY2hfc2xhdmUoYm9uZCwgc2xhdmUsIGkpCi0JCQlpZiAoc3RybmljbXAoc2xhdmUtPmRldi0+bmFtZSwgaWZuYW1lLCBJRk5BTVNJWikgPT0gMCkKLQkJCQlzbGF2ZS0+b3JpZ2luYWxfbXR1ID0gb3JpZ2luYWxfbXR1OwotCQlpZiAocmVzKQotCQkJcmV0ID0gcmVzOworCQlicmVhazsKIAotCQlnb3RvIG91dDsKKwljYXNlICctJzoKKwkJcHJfaW5mbygiJXM6IFJlbW92aW5nIHNsYXZlICVzLlxuIiwgYm9uZC0+ZGV2LT5uYW1lLCBkZXYtPm5hbWUpOworCQlyZXMgPSBib25kX3JlbGVhc2UoYm9uZC0+ZGV2LCBkZXYpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWdvdG8gZXJyX25vX2NtZDsKIAl9CiAKLQlpZiAoY29tbWFuZFswXSA9PSAnLScpIHsKLQkJZGV2ID0gTlVMTDsKLQkJb3JpZ2luYWxfbXR1ID0gMDsKLQkJYm9uZF9mb3JfZWFjaF9zbGF2ZShib25kLCBzbGF2ZSwgaSkKLQkJCWlmIChzdHJuaWNtcChzbGF2ZS0+ZGV2LT5uYW1lLCBpZm5hbWUsIElGTkFNU0laKSA9PSAwKSB7Ci0JCQkJZGV2ID0gc2xhdmUtPmRldjsKLQkJCQlvcmlnaW5hbF9tdHUgPSBzbGF2ZS0+b3JpZ2luYWxfbXR1OwotCQkJCWJyZWFrOwotCQkJfQotCQlpZiAoZGV2KSB7Ci0JCQlwcl9pbmZvKCIlczogUmVtb3Zpbmcgc2xhdmUgJXNcbiIsCi0JCQkJYm9uZC0+ZGV2LT5uYW1lLCBkZXYtPm5hbWUpOwotCQkJCXJlcyA9IGJvbmRfcmVsZWFzZShib25kLT5kZXYsIGRldik7Ci0JCQlpZiAocmVzKSB7Ci0JCQkJcmV0ID0gcmVzOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJLyogc2V0IHRoZSBzbGF2ZSBNVFUgdG8gdGhlIGRlZmF1bHQgKi8KLQkJCWRldl9zZXRfbXR1KGRldiwgb3JpZ2luYWxfbXR1KTsKLQkJfSBlbHNlIHsKLQkJCXByX2VycigidW5hYmxlIHRvIHJlbW92ZSBub24tZXhpc3RlbnQgc2xhdmUgJXMgZm9yIGJvbmQgJXMuXG4iLAotCQkJICAgICAgIGlmbmFtZSwgYm9uZC0+ZGV2LT5uYW1lKTsKLQkJCXJldCA9IC1FTk9ERVY7Ci0JCX0KLQkJZ290byBvdXQ7Ci0JfQorCWlmIChyZXMpCisJCXJldCA9IHJlczsKKwlnb3RvIG91dDsKIAogZXJyX25vX2NtZDoKIAlwcl9lcnIoIm5vIGNvbW1hbmQgZm91bmQgaW4gc2xhdmVzIGZpbGUgZm9yIGJvbmQgJXMuIFVzZSAraWZuYW1lIG9yIC1pZm5hbWUuXG4iLApAQCAtMzc0LDE5ICszMTMsMjYgQEAKIAkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgKGludClzdHJsZW4oYnVmKSAtIDEsIGJ1Zik7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwotCX0gZWxzZSB7Ci0JCWlmIChib25kLT5wYXJhbXMubW9kZSA9PSBCT05EX01PREVfODAyM0FEKQotCQkJYm9uZF91bnNldF9tYXN0ZXJfM2FkX2ZsYWdzKGJvbmQpOwotCi0JCWlmIChib25kLT5wYXJhbXMubW9kZSA9PSBCT05EX01PREVfQUxCKQotCQkJYm9uZF91bnNldF9tYXN0ZXJfYWxiX2ZsYWdzKGJvbmQpOwotCi0JCWJvbmQtPnBhcmFtcy5tb2RlID0gbmV3X3ZhbHVlOwotCQlib25kX3NldF9tb2RlX29wcyhib25kLCBib25kLT5wYXJhbXMubW9kZSk7Ci0JCXByX2luZm8oIiVzOiBzZXR0aW5nIG1vZGUgdG8gJXMgKCVkKS5cbiIsCi0JCQlib25kLT5kZXYtPm5hbWUsIGJvbmRfbW9kZV90YmxbbmV3X3ZhbHVlXS5tb2RlbmFtZSwKLQkJICAgICAgIG5ld192YWx1ZSk7CiAJfQorCWlmICgobmV3X3ZhbHVlID09IEJPTkRfTU9ERV9BTEIgfHwKKwkgICAgIG5ld192YWx1ZSA9PSBCT05EX01PREVfVExCKSAmJgorCSAgICBib25kLT5wYXJhbXMuYXJwX2ludGVydmFsKSB7CisJCXByX2VycigiJXM6ICVzIG1vZGUgaXMgaW5jb21wYXRpYmxlIHdpdGggYXJwIG1vbml0b3JpbmcuXG4iLAorCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lLCBib25kX21vZGVfdGJsW25ld192YWx1ZV0ubW9kZW5hbWUpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJaWYgKGJvbmQtPnBhcmFtcy5tb2RlID09IEJPTkRfTU9ERV84MDIzQUQpCisJCWJvbmRfdW5zZXRfbWFzdGVyXzNhZF9mbGFncyhib25kKTsKKworCWlmIChib25kLT5wYXJhbXMubW9kZSA9PSBCT05EX01PREVfQUxCKQorCQlib25kX3Vuc2V0X21hc3Rlcl9hbGJfZmxhZ3MoYm9uZCk7CisKKwlib25kLT5wYXJhbXMubW9kZSA9IG5ld192YWx1ZTsKKwlib25kX3NldF9tb2RlX29wcyhib25kLCBib25kLT5wYXJhbXMubW9kZSk7CisJcHJfaW5mbygiJXM6IHNldHRpbmcgbW9kZSB0byAlcyAoJWQpLlxuIiwKKwkJYm9uZC0+ZGV2LT5uYW1lLCBib25kX21vZGVfdGJsW25ld192YWx1ZV0ubW9kZW5hbWUsCisJCW5ld192YWx1ZSk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTU3MSw3ICs1MTcsMTMgQEAKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQotCisJaWYgKGJvbmQtPnBhcmFtcy5tb2RlID09IEJPTkRfTU9ERV9BTEIgfHwKKwkgICAgYm9uZC0+cGFyYW1zLm1vZGUgPT0gQk9ORF9NT0RFX1RMQikgeworCQlwcl9pbmZvKCIlczogQVJQIG1vbml0b3JpbmcgY2Fubm90IGJlIHVzZWQgd2l0aCBBTEIvVExCLiBPbmx5IE1JSSBtb25pdG9yaW5nIGlzIHN1cHBvcnRlZCBvbiAlcy5cbiIsCisJCQlib25kLT5kZXYtPm5hbWUsIGJvbmQtPmRldi0+bmFtZSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KIAlwcl9pbmZvKCIlczogU2V0dGluZyBBUlAgbW9uaXRvcmluZyBpbnRlcnZhbCB0byAlZC5cbiIsCiAJCWJvbmQtPmRldi0+bmFtZSwgbmV3X3ZhbHVlKTsKIAlib25kLT5wYXJhbXMuYXJwX2ludGVydmFsID0gbmV3X3ZhbHVlOwpAQCAtMTQ3Miw3ICsxNDI0LDE3MyBAQAogfQogc3RhdGljIERFVklDRV9BVFRSKGFkX3BhcnRuZXJfbWFjLCBTX0lSVUdPLCBib25kaW5nX3Nob3dfYWRfcGFydG5lcl9tYWMsIE5VTEwpOwogCisvKgorICogU2hvdyB0aGUgcXVldWVfaWRzIG9mIHRoZSBzbGF2ZXMgaW4gdGhlIGN1cnJlbnQgYm9uZC4KKyAqLworc3RhdGljIHNzaXplX3QgYm9uZGluZ19zaG93X3F1ZXVlX2lkKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2xhdmUgKnNsYXZlOworCWludCBpLCByZXMgPSAwOworCXN0cnVjdCBib25kaW5nICpib25kID0gdG9fYm9uZChkKTsKIAorCWlmICghcnRubF90cnlsb2NrKCkpCisJCXJldHVybiByZXN0YXJ0X3N5c2NhbGwoKTsKKworCXJlYWRfbG9jaygmYm9uZC0+bG9jayk7CisJYm9uZF9mb3JfZWFjaF9zbGF2ZShib25kLCBzbGF2ZSwgaSkgeworCQlpZiAocmVzID4gKFBBR0VfU0laRSAtIElGTkFNU0laIC0gNikpIHsKKwkJCS8qIG5vdCBlbm91Z2ggc3BhY2UgZm9yIGFub3RoZXIgaW50ZXJmYWNlX25hbWU6cXVldWVfaWQgcGFpciAqLworCQkJaWYgKChQQUdFX1NJWkUgLSByZXMpID4gMTApCisJCQkJcmVzID0gUEFHRV9TSVpFIC0gMTA7CisJCQlyZXMgKz0gc3ByaW50ZihidWYgKyByZXMsICIrK21vcmUrKyAiKTsKKwkJCWJyZWFrOworCQl9CisJCXJlcyArPSBzcHJpbnRmKGJ1ZiArIHJlcywgIiVzOiVkICIsCisJCQkgICAgICAgc2xhdmUtPmRldi0+bmFtZSwgc2xhdmUtPnF1ZXVlX2lkKTsKKwl9CisJcmVhZF91bmxvY2soJmJvbmQtPmxvY2spOworCWlmIChyZXMpCisJCWJ1ZltyZXMtMV0gPSAnXG4nOyAvKiBlYXQgdGhlIGxlZnRvdmVyIHNwYWNlICovCisJcnRubF91bmxvY2soKTsKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogU2V0IHRoZSBxdWV1ZV9pZHMgb2YgdGhlICBzbGF2ZXMgaW4gdGhlIGN1cnJlbnQgYm9uZC4gIFRoZSBib25kCisgKiBpbnRlcmZhY2UgbXVzdCBiZSBlbnNsYXZlZCBmb3IgdGhpcyB0byB3b3JrLgorICovCitzdGF0aWMgc3NpemVfdCBib25kaW5nX3N0b3JlX3F1ZXVlX2lkKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICAgY29uc3QgY2hhciAqYnVmZmVyLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNsYXZlICpzbGF2ZSwgKnVwZGF0ZV9zbGF2ZTsKKwlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IHRvX2JvbmQoZCk7CisJdTE2IHFpZDsKKwlpbnQgaSwgcmV0ID0gY291bnQ7CisJY2hhciAqZGVsaW07CisJc3RydWN0IG5ldF9kZXZpY2UgKnNkZXYgPSBOVUxMOworCisJaWYgKCFydG5sX3RyeWxvY2soKSkKKwkJcmV0dXJuIHJlc3RhcnRfc3lzY2FsbCgpOworCisJLyogZGVsaW0gd2lsbCBwb2ludCB0byBxdWV1ZSBpZCBpZiBzdWNjZXNzZnVsICovCisJZGVsaW0gPSBzdHJjaHIoYnVmZmVyLCAnOicpOworCWlmICghZGVsaW0pCisJCWdvdG8gZXJyX25vX2NtZDsKKworCS8qCisJICogVGVybWluYXRlIHN0cmluZyB0aGF0IHBvaW50cyB0byBkZXZpY2UgbmFtZSBhbmQgYnVtcCBpdAorCSAqIHVwIG9uZSwgc28gd2UgY2FuIHJlYWQgdGhlIHF1ZXVlIGlkIHRoZXJlLgorCSAqLworCSpkZWxpbSA9ICdcMCc7CisJaWYgKHNzY2FuZigrK2RlbGltLCAiJWhkXG4iLCAmcWlkKSAhPSAxKQorCQlnb3RvIGVycl9ub19jbWQ7CisKKwkvKiBDaGVjayBidWZmZXIgbGVuZ3RoLCB2YWxpZCBpZm5hbWUgYW5kIHF1ZXVlIGlkICovCisJaWYgKHN0cmxlbihidWZmZXIpID4gSUZOQU1TSVogfHwKKwkgICAgIWRldl92YWxpZF9uYW1lKGJ1ZmZlcikgfHwKKwkgICAgcWlkID4gYm9uZC0+cGFyYW1zLnR4X3F1ZXVlcykKKwkJZ290byBlcnJfbm9fY21kOworCisJLyogR2V0IHRoZSBwb2ludGVyIHRvIHRoYXQgaW50ZXJmYWNlIGlmIGl0IGV4aXN0cyAqLworCXNkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShkZXZfbmV0KGJvbmQtPmRldiksIGJ1ZmZlcik7CisJaWYgKCFzZGV2KQorCQlnb3RvIGVycl9ub19jbWQ7CisKKwlyZWFkX2xvY2soJmJvbmQtPmxvY2spOworCisJLyogU2VhcmNoIGZvciB0aGVzIHNsYXZlIGFuZCBjaGVjayBmb3IgZHVwbGljYXRlIHFpZHMgKi8KKwl1cGRhdGVfc2xhdmUgPSBOVUxMOworCWJvbmRfZm9yX2VhY2hfc2xhdmUoYm9uZCwgc2xhdmUsIGkpIHsKKwkJaWYgKHNkZXYgPT0gc2xhdmUtPmRldikKKwkJCS8qCisJCQkgKiBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoZSBtYXRjaGluZworCQkJICogc2xhdmUgZm9yIGR1cHMsIHNpbmNlIHdlJ3JlIG92ZXJ3cml0aW5nIGl0CisJCQkgKi8KKwkJCXVwZGF0ZV9zbGF2ZSA9IHNsYXZlOworCQllbHNlIGlmIChxaWQgJiYgcWlkID09IHNsYXZlLT5xdWV1ZV9pZCkgeworCQkJZ290byBlcnJfbm9fY21kX3VubG9jazsKKwkJfQorCX0KKworCWlmICghdXBkYXRlX3NsYXZlKQorCQlnb3RvIGVycl9ub19jbWRfdW5sb2NrOworCisJLyogQWN0dWFsbHkgc2V0IHRoZSBxaWRzIGZvciB0aGUgc2xhdmUgKi8KKwl1cGRhdGVfc2xhdmUtPnF1ZXVlX2lkID0gcWlkOworCisJcmVhZF91bmxvY2soJmJvbmQtPmxvY2spOworb3V0OgorCXJ0bmxfdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKKworZXJyX25vX2NtZF91bmxvY2s6CisJcmVhZF91bmxvY2soJmJvbmQtPmxvY2spOworZXJyX25vX2NtZDoKKwlwcl9pbmZvKCJpbnZhbGlkIGlucHV0IGZvciBxdWV1ZV9pZCBzZXQgZm9yICVzLlxuIiwKKwkJYm9uZC0+ZGV2LT5uYW1lKTsKKwlyZXQgPSAtRVBFUk07CisJZ290byBvdXQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihxdWV1ZV9pZCwgU19JUlVHTyB8IFNfSVdVU1IsIGJvbmRpbmdfc2hvd19xdWV1ZV9pZCwKKwkJICAgYm9uZGluZ19zdG9yZV9xdWV1ZV9pZCk7CisKKworLyoKKyAqIFNob3cgYW5kIHNldCB0aGUgYWxsX3NsYXZlc19hY3RpdmUgZmxhZy4KKyAqLworc3RhdGljIHNzaXplX3QgYm9uZGluZ19zaG93X3NsYXZlc19hY3RpdmUoc3RydWN0IGRldmljZSAqZCwKKwkJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICBjaGFyICpidWYpCit7CisJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSB0b19ib25kKGQpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGJvbmQtPnBhcmFtcy5hbGxfc2xhdmVzX2FjdGl2ZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJvbmRpbmdfc3RvcmVfc2xhdmVzX2FjdGl2ZShzdHJ1Y3QgZGV2aWNlICpkLAorCQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJaW50IGksIG5ld192YWx1ZSwgcmV0ID0gY291bnQ7CisJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSB0b19ib25kKGQpOworCXN0cnVjdCBzbGF2ZSAqc2xhdmU7CisKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJm5ld192YWx1ZSkgIT0gMSkgeworCQlwcl9lcnIoIiVzOiBubyBhbGxfc2xhdmVzX2FjdGl2ZSB2YWx1ZSBzcGVjaWZpZWQuXG4iLAorCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG5ld192YWx1ZSA9PSBib25kLT5wYXJhbXMuYWxsX3NsYXZlc19hY3RpdmUpCisJCWdvdG8gb3V0OworCisJaWYgKChuZXdfdmFsdWUgPT0gMCkgfHwgKG5ld192YWx1ZSA9PSAxKSkgeworCQlib25kLT5wYXJhbXMuYWxsX3NsYXZlc19hY3RpdmUgPSBuZXdfdmFsdWU7CisJfSBlbHNlIHsKKwkJcHJfaW5mbygiJXM6IElnbm9yaW5nIGludmFsaWQgYWxsX3NsYXZlc19hY3RpdmUgdmFsdWUgJWQuXG4iLAorCQkJYm9uZC0+ZGV2LT5uYW1lLCBuZXdfdmFsdWUpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlib25kX2Zvcl9lYWNoX3NsYXZlKGJvbmQsIHNsYXZlLCBpKSB7CisJCWlmIChzbGF2ZS0+c3RhdGUgPT0gQk9ORF9TVEFURV9CQUNLVVApIHsKKwkJCWlmIChuZXdfdmFsdWUpCisJCQkJc2xhdmUtPmRldi0+cHJpdl9mbGFncyAmPSB+SUZGX1NMQVZFX0lOQUNUSVZFOworCQkJZWxzZQorCQkJCXNsYXZlLT5kZXYtPnByaXZfZmxhZ3MgfD0gSUZGX1NMQVZFX0lOQUNUSVZFOworCQl9CisJfQorb3V0OgorCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihhbGxfc2xhdmVzX2FjdGl2ZSwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgIGJvbmRpbmdfc2hvd19zbGF2ZXNfYWN0aXZlLCBib25kaW5nX3N0b3JlX3NsYXZlc19hY3RpdmUpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcGVyX2JvbmRfYXR0cnNbXSA9IHsKIAkmZGV2X2F0dHJfc2xhdmVzLmF0dHIsCkBAIC0xNDk5LDYgKzE2MTcsOCBAQAogCSZkZXZfYXR0cl9hZF9hY3Rvcl9rZXkuYXR0ciwKIAkmZGV2X2F0dHJfYWRfcGFydG5lcl9rZXkuYXR0ciwKIAkmZGV2X2F0dHJfYWRfcGFydG5lcl9tYWMuYXR0ciwKKwkmZGV2X2F0dHJfcXVldWVfaWQuYXR0ciwKKwkmZGV2X2F0dHJfYWxsX3NsYXZlc19hY3RpdmUuYXR0ciwKIAlOVUxMLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmggYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRpbmcuaAppbmRleCAyYWEzMzY3Li5jNmZkZDg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRpbmcuaAorKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRpbmcuaApAQCAtMjMsOCArMjMsOCBAQAogI2luY2x1ZGUgImJvbmRfM2FkLmgiCiAjaW5jbHVkZSAiYm9uZF9hbGIuaCIKIAotI2RlZmluZSBEUlZfVkVSU0lPTgkiMy42LjAiCi0jZGVmaW5lIERSVl9SRUxEQVRFCSJTZXB0ZW1iZXIgMjYsIDIwMDkiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIzLjcuMCIKKyNkZWZpbmUgRFJWX1JFTERBVEUJIkp1bmUgMiwgMjAxMCIKICNkZWZpbmUgRFJWX05BTUUJImJvbmRpbmciCiAjZGVmaW5lIERSVl9ERVNDUklQVElPTgkiRXRoZXJuZXQgQ2hhbm5lbCBCb25kaW5nIERyaXZlciIKIApAQCAtNjAsNiArNjAsOSBAQAogCQkgKChtb2RlKSA9PSBCT05EX01PREVfVExCKSAgICAgICAgICB8fAlcCiAJCSAoKG1vZGUpID09IEJPTkRfTU9ERV9BTEIpKQogCisjZGVmaW5lIFRYX1FVRVVFX09WRVJSSURFKG1vZGUpCQkJCVwKKwkJCSgoKG1vZGUpID09IEJPTkRfTU9ERV9BQ1RJVkVCQUNLVVApIHx8CVwKKwkJCSAoKG1vZGUpID09IEJPTkRfTU9ERV9ST1VORFJPQklOKSkKIC8qCiAgKiBMZXNzIGJhZCB3YXkgdG8gY2FsbCBpb2N0bCBmcm9tIHdpdGhpbiB0aGUga2VybmVsOyB0aGlzIG5lZWRzIHRvIGJlCiAgKiBkb25lIHNvbWUgb3RoZXIgd2F5IHRvIGdldCB0aGUgY2FsbCBvdXQgb2YgaW50ZXJydXB0IGNvbnRleHQuCkBAIC0xMzEsNiArMTM0LDggQEAKIAljaGFyIHByaW1hcnlbSUZOQU1TSVpdOwogCWludCBwcmltYXJ5X3Jlc2VsZWN0OwogCV9fYmUzMiBhcnBfdGFyZ2V0c1tCT05EX01BWF9BUlBfVEFSR0VUU107CisJaW50IHR4X3F1ZXVlczsKKwlpbnQgYWxsX3NsYXZlc19hY3RpdmU7CiB9OwogCiBzdHJ1Y3QgYm9uZF9wYXJtX3RibCB7CkBAIC0xNTksMTIgKzE2NCwxMiBAQAogCXM4ICAgICBsaW5rOyAgICAvKiBvbmUgb2YgQk9ORF9MSU5LX1hYWFggKi8KIAlzOCAgICAgbmV3X2xpbms7CiAJczggICAgIHN0YXRlOyAgIC8qIG9uZSBvZiBCT05EX1NUQVRFX1hYWFggKi8KLQl1MzIgICAgb3JpZ2luYWxfZmxhZ3M7CiAJdTMyICAgIG9yaWdpbmFsX210dTsKIAl1MzIgICAgbGlua19mYWlsdXJlX2NvdW50OwogCXU4ICAgICBwZXJtX2h3YWRkcltFVEhfQUxFTl07CiAJdTE2ICAgIHNwZWVkOwogCXU4ICAgICBkdXBsZXg7CisJdTE2ICAgIHF1ZXVlX2lkOwogCXN0cnVjdCBhZF9zbGF2ZV9pbmZvIGFkX2luZm87IC8qIEhVR0UgLSBiZXR0ZXIgdG8gZHluYW1pY2FsbHkgYWxsb2MgKi8KIAlzdHJ1Y3QgdGxiX3NsYXZlX2luZm8gdGxiX2luZm87CiB9OwpAQCAtMjkxLDcgKzI5Niw4IEBACiAJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSBuZXRkZXZfcHJpdihzbGF2ZS0+ZGV2LT5tYXN0ZXIpOwogCWlmICghYm9uZF9pc19sYihib25kKSkKIAkJc2xhdmUtPnN0YXRlID0gQk9ORF9TVEFURV9CQUNLVVA7Ci0Jc2xhdmUtPmRldi0+cHJpdl9mbGFncyB8PSBJRkZfU0xBVkVfSU5BQ1RJVkU7CisJaWYgKCFib25kLT5wYXJhbXMuYWxsX3NsYXZlc19hY3RpdmUpCisJCXNsYXZlLT5kZXYtPnByaXZfZmxhZ3MgfD0gSUZGX1NMQVZFX0lOQUNUSVZFOwogCWlmIChzbGF2ZV9kb19hcnBfdmFsaWRhdGUoYm9uZCwgc2xhdmUpKQogCQlzbGF2ZS0+ZGV2LT5wcml2X2ZsYWdzIHw9IElGRl9TTEFWRV9ORUVEQVJQOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FpZi9LY29uZmlnIGIvZHJpdmVycy9uZXQvY2FpZi9LY29uZmlnCmluZGV4IDBiMjhlMDEuLjYzMWE2MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NhaWYvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9jYWlmL0tjb25maWcKQEAgLTIsMTYgKzIsMzIgQEAKICMgQ0FJRiBwaHlzaWNhbCBkcml2ZXJzCiAjCiAKLWlmIENBSUYKLQogY29tbWVudCAiQ0FJRiB0cmFuc3BvcnQgZHJpdmVycyIKIAogY29uZmlnIENBSUZfVFRZCiAJdHJpc3RhdGUgIkNBSUYgVFRZIHRyYW5zcG9ydCBkcml2ZXIiCisJZGVwZW5kcyBvbiBDQUlGCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCVRoZSBDQUlGIFRUWSB0cmFuc3BvcnQgZHJpdmVyIGlzIGEgTGluZSBEaXNjaXBsaW5lIChsZGlzYykKIAlpZGVudGlmaWVkIGFzIE5fQ0FJRi4gV2hlbiB0aGlzIGxkaXNjIGlzIG9wZW5lZCBmcm9tIHVzZXIgc3BhY2UKIAlpdCB3aWxsIHJlZGlyZWN0IHRoZSBUVFkncyB0cmFmZmljIGludG8gdGhlIENBSUYgc3RhY2suCiAKLWVuZGlmICMgQ0FJRgorY29uZmlnIENBSUZfU1BJX1NMQVZFCisJdHJpc3RhdGUgIkNBSUYgU1BJIHRyYW5zcG9ydCBkcml2ZXIgZm9yIHNsYXZlIGludGVyZmFjZSIKKwlkZXBlbmRzIG9uIENBSUYKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJVGhlIENBSUYgTGluayBsYXllciBTUEkgUHJvdG9jb2wgZHJpdmVyIGZvciBTbGF2ZSBTUEkgaW50ZXJmYWNlLgorCVRoaXMgZHJpdmVyIGltcGxlbWVudHMgYSBwbGF0Zm9ybSBkcml2ZXIgdG8gYWNjb21tb2RhdGUgZm9yIGEKKwlwbGF0Zm9ybSBzcGVjaWZpYyBTUEkgZGV2aWNlLiBBIHNhbXBsZSBDQUlGIFNQSSBQbGF0Zm9ybSBkZXZpY2UgaXMKKwlwcm92aWRlZCBpbiBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY2FpZi9zcGlfcG9ydGluZy50eHQKKworY29uZmlnIENBSUZfU1BJX1NZTkMKKwlib29sICJOZXh0IGNvbW1hbmQgYW5kIGxlbmd0aCBpbiBzdGFydCBvZiBmcmFtZSIKKwlkZXBlbmRzIG9uIENBSUZfU1BJX1NMQVZFCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCVB1dHRpbmcgdGhlIG5leHQgY29tbWFuZCBhbmQgbGVuZ3RoIGluIHRoZSBzdGFydCBvZiB0aGUgZnJhbWUgY2FuCisJaGVscCB0byBzeW5jaHJvbml6ZSB0byB0aGUgbmV4dCB0cmFuc2ZlciBpbiBjYXNlIG9mIG92ZXIgb3IgdW5kZXItcnVucy4KKwlUaGlzIG9wdGlvbiBhbHNvIG5lZWRzIHRvIGJlIGVuYWJsZWQgb24gdGhlIG1vZGVtLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FpZi9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2NhaWYvTWFrZWZpbGUKaW5kZXggNTJiNmQxZi4uM2ExMWQ2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FpZi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9jYWlmL01ha2VmaWxlCkBAIC0xLDEyICsxLDEwIEBACi1pZmVxICgkKENPTkZJR19DQUlGX0RFQlVHKSwxKQotQ0FJRl9EQkdfRkxBR1MgOj0gLURERUJVRworaWZlcSAoJChDT05GSUdfQ0FJRl9ERUJVRykseSkKK0VYVFJBX0NGTEFHUyArPSAtRERFQlVHCiBlbmRpZgogCi1LQlVJTERfRVhUUkFfU1lNQk9MUz1uZXQvY2FpZi9Nb2R1bGUuc3ltdmVycwotCi1jY2ZsYWdzLXkgOj0gJChDQUlGX0ZMQUdTKSAkKENBSUZfREJHX0ZMQUdTKQotY2xlYW4tZGlyczo9IC50bXBfdmVyc2lvbnMKLWNsZWFuLWZpbGVzOj0gTW9kdWxlLnN5bXZlcnMgbW9kdWxlcy5vcmRlciAqLmNtZCAqfiBcCi0KICMgU2VyaWFsIGludGVyZmFjZQogb2JqLSQoQ09ORklHX0NBSUZfVFRZKSArPSBjYWlmX3NlcmlhbC5vCisKKyMgU1BJIHNsYXZlIHBoeXNpY2FsIGludGVyZmFjZXMgbW9kdWxlCitjZnNwaV9zbGF2ZS1vYmpzIDo9IGNhaWZfc3BpLm8gY2FpZl9zcGlfc2xhdmUubworb2JqLSQoQ09ORklHX0NBSUZfU1BJX1NMQVZFKSArPSBjZnNwaV9zbGF2ZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYWlmL2NhaWZfc2VyaWFsLmMgYi9kcml2ZXJzL25ldC9jYWlmL2NhaWZfc2VyaWFsLmMKaW5kZXggMDkyNTdjYS4uM2RmMGMwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FpZi9jYWlmX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvbmV0L2NhaWYvY2FpZl9zZXJpYWwuYwpAQCAtMTc0LDYgKzE3NCw3IEBACiAJc3RydWN0IHNlcl9kZXZpY2UgKnNlcjsKIAlpbnQgcmV0OwogCXU4ICpwOworCiAJc2VyID0gdHR5LT5kaXNjX2RhdGE7CiAKIAkvKgpAQCAtMjIxLDYgKzIyMiw3IEBACiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCB0dHlfd3IsIGxlbiwgcm9vbTsKKwogCXR0eSA9IHNlci0+dHR5OwogCXNlci0+dHhfc3RhcnRlZCA9IHRydWU7CiAKQEAgLTI4MSw2ICsyODMsNyBAQAogc3RhdGljIGludCBjYWlmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc2VyX2RldmljZSAqc2VyOworCiAJQlVHX09OKGRldiA9PSBOVUxMKTsKIAlzZXIgPSBuZXRkZXZfcHJpdihkZXYpOwogCkBAIC0yOTksNiArMzAyLDcgQEAKIHN0YXRpYyB2b2lkIGxkaXNjX3R4X3dha2V1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCBzZXJfZGV2aWNlICpzZXI7CisKIAlzZXIgPSB0dHktPmRpc2NfZGF0YTsKIAlCVUdfT04oc2VyID09IE5VTEwpOwogCUJVR19PTihzZXItPnR0eSAhPSB0dHkpOwpAQCAtMzQ4LDYgKzM1Miw3IEBACiAJc3RydWN0IHNlcl9kZXZpY2UgKnNlciA9IHR0eS0+ZGlzY19kYXRhOwogCS8qIFJlbW92ZSBtYXkgYmUgY2FsbGVkIGluc2lkZSBvciBvdXRzaWRlIG9mIHJ0bmxfbG9jayAqLwogCWludCBpc2xvY2tlZCA9IHJ0bmxfaXNfbG9ja2VkKCk7CisKIAlpZiAoIWlzbG9ja2VkKQogCQlydG5sX2xvY2soKTsKIAkvKiBkZXZpY2UgaXMgZnJlZWQgYXV0b21hZ2ljYWxseSBieSBuZXQtc3lzZnMgKi8KQEAgLTM3NCw2ICszNzksNyBAQAogc3RhdGljIGludCByZWdpc3Rlcl9sZGlzYyh2b2lkKQogewogCWludCByZXN1bHQ7CisKIAlyZXN1bHQgPSB0dHlfcmVnaXN0ZXJfbGRpc2MoTl9DQUlGLCAmY2FpZl9sZGlzYyk7CiAJaWYgKHJlc3VsdCA8IDApIHsKIAkJcHJfZXJyKCJjYW5ub3QgcmVnaXN0ZXIgQ0FJRiBsZGlzYz0lZCBlcnI9JWRcbiIsIE5fQ0FJRiwKQEAgLTM5MSwxMiArMzk3LDEyIEBACiBzdGF0aWMgdm9pZCBjYWlmZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNlcl9kZXZpY2UgKnNlcmRldiA9IG5ldGRldl9wcml2KGRldik7CisKIAlkZXYtPmZlYXR1cmVzID0gMDsKIAlkZXYtPm5ldGRldl9vcHMgPSAmbmV0ZGV2X29wczsKIAlkZXYtPnR5cGUgPSBBUlBIUkRfQ0FJRjsKIAlkZXYtPmZsYWdzID0gSUZGX1BPSU5UT1BPSU5UIHwgSUZGX05PQVJQOwogCWRldi0+bXR1ID0gQ0FJRl9NQVhfTVRVOwotCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gQ0FJRl9ORUVERURfSEVBRFJPT007CiAJZGV2LT50eF9xdWV1ZV9sZW4gPSAwOwogCWRldi0+ZGVzdHJ1Y3RvciA9IGZyZWVfbmV0ZGV2OwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnNlcmRldi0+aGVhZCk7CkBAIC00MTAsOCArNDE2LDYgQEAKIAogc3RhdGljIGludCBjYWlmX25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHNlcl9kZXZpY2UgKnNlcjsKLQlzZXIgPSBuZXRkZXZfcHJpdihkZXYpOwogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTQyNSw2ICs0MjksNyBAQAogc3RhdGljIGludCBfX2luaXQgY2FpZl9zZXJfaW5pdCh2b2lkKQogewogCWludCByZXQ7CisKIAlyZXQgPSByZWdpc3Rlcl9sZGlzYygpOwogCWRlYnVnZnNkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImNhaWZfc2VyaWFsIiwgTlVMTCk7CiAJcmV0dXJuIHJldDsKQEAgLTQzNSw2ICs0NDAsNyBAQAogCXN0cnVjdCBzZXJfZGV2aWNlICpzZXIgPSBOVUxMOwogCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGU7CiAJc3RydWN0IGxpc3RfaGVhZCAqX3RtcDsKKwogCWxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBfdG1wLCAmc2VyX2xpc3QpIHsKIAkJc2VyID0gbGlzdF9lbnRyeShub2RlLCBzdHJ1Y3Qgc2VyX2RldmljZSwgbm9kZSk7CiAJCWRldl9jbG9zZShzZXItPmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYWlmL2NhaWZfc3BpLmMgYi9kcml2ZXJzL25ldC9jYWlmL2NhaWZfc3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUwNThmZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2NhaWYvY2FpZl9zcGkuYwpAQCAtMCwwICsxLDg1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgU1QtRXJpY3Nzb24gQUIgMjAxMAorICogQ29udGFjdDogU2p1ciBCcmVuZGVsYW5kIC8gc2p1ci5icmFuZGVsYW5kQHN0ZXJpY3Nzb24uY29tCisgKiBBdXRob3I6ICBEYW5pZWwgTWFydGVuc3NvbiAvIERhbmllbC5NYXJ0ZW5zc29uQHN0ZXJpY3Nzb24uY29tCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bmV0L2NhaWYvY2FpZl9sYXllci5oPgorI2luY2x1ZGUgPG5ldC9jYWlmL2NhaWZfc3BpLmg+CisKKyNpZm5kZWYgQ09ORklHX0NBSUZfU1BJX1NZTkMKKyNkZWZpbmUgRkxBVk9SICJGbGF2b3VyOiBWYW5pbGxhLlxuIgorI2Vsc2UKKyNkZWZpbmUgRkxBVk9SICJGbGF2b3VyOiBNYXN0ZXIgQ01EJkxFTiBhdCBzdGFydC5cbiIKKyNlbmRpZiAvKiBDT05GSUdfQ0FJRl9TUElfU1lOQyAqLworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJEYW5pZWwgTWFydGVuc3NvbjxkYW5pZWwubWFydGVuc3NvbkBzdGVyaWNzc29uLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ0FJRiBTUEkgZHJpdmVyIik7CisKK3N0YXRpYyBpbnQgc3BpX2xvb3A7Cittb2R1bGVfcGFyYW0oc3BpX2xvb3AsIGJvb2wsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhzcGlfbG9vcCwgIlNQSSBydW5uaW5nIGluIGxvb3BiYWNrIG1vZGUuIik7CisKKy8qIFNQSSBmcmFtZSBhbGlnbm1lbnQuICovCittb2R1bGVfcGFyYW0oc3BpX2ZybV9hbGlnbiwgaW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0Moc3BpX2ZybV9hbGlnbiwgIlNQSSBmcmFtZSBhbGlnbm1lbnQuIik7CisKKy8qIFNQSSBwYWRkaW5nIG9wdGlvbnMuICovCittb2R1bGVfcGFyYW0oc3BpX3VwX2hlYWRfYWxpZ24sIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHNwaV91cF9oZWFkX2FsaWduLCAiU1BJIHVwbGluayBoZWFkIGFsaWdubWVudC4iKTsKKworbW9kdWxlX3BhcmFtKHNwaV91cF90YWlsX2FsaWduLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhzcGlfdXBfdGFpbF9hbGlnbiwgIlNQSSB1cGxpbmsgdGFpbCBhbGlnbm1lbnQuIik7CisKK21vZHVsZV9wYXJhbShzcGlfZG93bl9oZWFkX2FsaWduLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhzcGlfZG93bl9oZWFkX2FsaWduLCAiU1BJIGRvd25saW5rIGhlYWQgYWxpZ25tZW50LiIpOworCittb2R1bGVfcGFyYW0oc3BpX2Rvd25fdGFpbF9hbGlnbiwgaW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0Moc3BpX2Rvd25fdGFpbF9hbGlnbiwgIlNQSSBkb3dubGluayB0YWlsIGFsaWdubWVudC4iKTsKKworI2lmZGVmIENPTkZJR19BUk0KKyNkZWZpbmUgQllURV9IRVhfRk1UICIlMDJYIgorI2Vsc2UKKyNkZWZpbmUgQllURV9IRVhfRk1UICIlMDJoaFgiCisjZW5kaWYKKworI2RlZmluZSBTUElfTUFYX1BBWUxPQURfU0laRSA0MDk2CisvKgorICogVGhyZXNob2xkIHZhbHVlcyBmb3IgdGhlIFNQSSBwYWNrZXQgcXVldWUuIEZsb3djb250cm9sIHdpbGwgYmUgYXNzZXJ0ZWQKKyAqIHdoZW4gdGhlIG51bWJlciBvZiBwYWNrZXRzIGV4Y2VlZHMgSElHSF9XQVRFUl9NQVJLLiBJdCB3aWxsIG5vdCBiZQorICogZGVhc3NlcnRlZCBiZWZvcmUgdGhlIG51bWJlciBvZiBwYWNrZXRzIGRyb3BzIGJlbG93IExPV19XQVRFUl9NQVJLLgorICovCisjZGVmaW5lIExPV19XQVRFUl9NQVJLICAgMTAwCisjZGVmaW5lIEhJR0hfV0FURVJfTUFSSyAgKExPV19XQVRFUl9NQVJLKjUpCisKKyNpZmRlZiBDT05GSUdfVU1MCisKKy8qCisgKiBXZSBzb21ldGltZXMgdXNlIFVNTCBmb3IgZGVidWdnaW5nLCBidXQgaXQgY2Fubm90IGhhbmRsZQorICogZG1hX2FsbG9jX2NvaGVyZW50IHNvIHdlIGhhdmUgdG8gd3JhcCBpdC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkICpkbWFfYWxsb2MoZG1hX2FkZHJfdCAqZGFkZHIpCit7CisJcmV0dXJuIGttYWxsb2MoU1BJX0RNQV9CVUZfTEVOLCBHRlBfS0VSTkVMKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9mcmVlKHZvaWQgKmNwdV9hZGRyLCBkbWFfYWRkcl90IGhhbmRsZSkKK3sKKwlrZnJlZShjcHVfYWRkcik7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX2FsbG9jKGRtYV9hZGRyX3QgKmRhZGRyKQoreworCXJldHVybiBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgU1BJX0RNQV9CVUZfTEVOLCBkYWRkciwKKwkJCQlHRlBfS0VSTkVMKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9mcmVlKHZvaWQgKmNwdV9hZGRyLCBkbWFfYWRkcl90IGhhbmRsZSkKK3sKKwlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBTUElfRE1BX0JVRl9MRU4sIGNwdV9hZGRyLCBoYW5kbGUpOworfQorI2VuZGlmCS8qIENPTkZJR19VTUwgKi8KKworI2lmZGVmIENPTkZJR19ERUJVR19GUworCisjZGVmaW5lIERFQlVHRlNfQlVGX1NJWkUJNDA5NgorCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqZGJnZnNfcm9vdDsKKworc3RhdGljIGlubGluZSB2b2lkIGRyaXZlcl9kZWJ1Z2ZzX2NyZWF0ZSh2b2lkKQoreworCWRiZ2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoY2ZzcGlfc3BpX2RyaXZlci5kcml2ZXIubmFtZSwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkcml2ZXJfZGVidWdmc19yZW1vdmUodm9pZCkKK3sKKwlkZWJ1Z2ZzX3JlbW92ZShkYmdmc19yb290KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRldl9kZWJ1Z2ZzX3JlbShzdHJ1Y3QgY2ZzcGkgKmNmc3BpKQoreworCWRlYnVnZnNfcmVtb3ZlKGNmc3BpLT5kYmdmc19mcmFtZSk7CisJZGVidWdmc19yZW1vdmUoY2ZzcGktPmRiZ2ZzX3N0YXRlKTsKKwlkZWJ1Z2ZzX3JlbW92ZShjZnNwaS0+ZGJnZnNfZGlyKTsKK30KKworc3RhdGljIGludCBkYmdmc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGRiZ2ZzX3N0YXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwljaGFyICpidWY7CisJaW50IGxlbiA9IDA7CisJc3NpemVfdCBzaXplOworCXN0cnVjdCBjZnNwaSAqY2ZzcGkgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlidWYgPSBremFsbG9jKERFQlVHRlNfQlVGX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gMDsKKworCS8qIFByaW50IG91dCBkZWJ1ZyBpbmZvcm1hdGlvbi4gKi8KKwlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChERUJVR0ZTX0JVRl9TSVpFIC0gbGVuKSwKKwkJCSJDQUlGIFNQSSBkZWJ1ZyBpbmZvcm1hdGlvbjpcbiIpOworCisJbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoREVCVUdGU19CVUZfU0laRSAtIGxlbiksIEZMQVZPUik7CisKKwlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChERUJVR0ZTX0JVRl9TSVpFIC0gbGVuKSwKKwkJCSJTVEFURTogJWRcbiIsIGNmc3BpLT5kYmdfc3RhdGUpOworCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKERFQlVHRlNfQlVGX1NJWkUgLSBsZW4pLAorCQkJIlByZXZpb3VzIENNRDogMHgleFxuIiwgY2ZzcGktPnBjbWQpOworCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKERFQlVHRlNfQlVGX1NJWkUgLSBsZW4pLAorCQkJIkN1cnJlbnQgQ01EOiAweCV4XG4iLCBjZnNwaS0+Y21kKTsKKwlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChERUJVR0ZTX0JVRl9TSVpFIC0gbGVuKSwKKwkJCSJQcmV2aW91cyBUWCBsZW46ICVkXG4iLCBjZnNwaS0+dHhfcHBja19sZW4pOworCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKERFQlVHRlNfQlVGX1NJWkUgLSBsZW4pLAorCQkJIlByZXZpb3VzIFJYIGxlbjogJWRcbiIsIGNmc3BpLT5yeF9wcGNrX2xlbik7CisJbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoREVCVUdGU19CVUZfU0laRSAtIGxlbiksCisJCQkiQ3VycmVudCBUWCBsZW46ICVkXG4iLCBjZnNwaS0+dHhfY3Bja19sZW4pOworCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKERFQlVHRlNfQlVGX1NJWkUgLSBsZW4pLAorCQkJIkN1cnJlbnQgUlggbGVuOiAlZFxuIiwgY2ZzcGktPnJ4X2NwY2tfbGVuKTsKKwlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChERUJVR0ZTX0JVRl9TSVpFIC0gbGVuKSwKKwkJCSJOZXh0IFRYIGxlbjogJWRcbiIsIGNmc3BpLT50eF9ucGNrX2xlbik7CisJbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoREVCVUdGU19CVUZfU0laRSAtIGxlbiksCisJCQkiTmV4dCBSWCBsZW46ICVkXG4iLCBjZnNwaS0+cnhfbnBja19sZW4pOworCisJaWYgKGxlbiA+IERFQlVHRlNfQlVGX1NJWkUpCisJCWxlbiA9IERFQlVHRlNfQlVGX1NJWkU7CisKKwlzaXplID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7CisJa2ZyZWUoYnVmKTsKKworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgc3NpemVfdCBwcmludF9mcmFtZShjaGFyICpidWYsIHNpemVfdCBzaXplLCBjaGFyICpmcm0sCisJCQkgICBzaXplX3QgY291bnQsIHNpemVfdCBjdXQpCit7CisJaW50IGxlbiA9IDA7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCisJCQkJCSJbMHgiIEJZVEVfSEVYX0ZNVCAiXSIsCisJCQkJCWZybVtpXSk7CisJCWlmICgoaSA9PSBjdXQpICYmIChjb3VudCA+IChjdXQgKiAyKSkpIHsKKwkJCS8qIEZhc3QgZm9yd2FyZC4gKi8KKwkJCWkgPSBjb3VudCAtIGN1dDsKKwkJCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAorCQkJCQkiLS0tICV1IGJ5dGVzIHNraXBwZWQgLS0tXG4iLAorCQkJCQkoaW50KShjb3VudCAtIChjdXQgKiAyKSkpOworCQl9CisKKwkJaWYgKCghKGkgJSAxMCkpICYmIGkpIHsKKwkJCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKERFQlVHRlNfQlVGX1NJWkUgLSBsZW4pLAorCQkJCQkiXG4iKTsKKwkJfQorCX0KKwlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChERUJVR0ZTX0JVRl9TSVpFIC0gbGVuKSwgIlxuIik7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHNzaXplX3QgZGJnZnNfZnJhbWUoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCWNoYXIgKmJ1ZjsKKwlpbnQgbGVuID0gMDsKKwlzc2l6ZV90IHNpemU7CisJc3RydWN0IGNmc3BpICpjZnNwaTsKKworCWNmc3BpID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWJ1ZiA9IGt6YWxsb2MoREVCVUdGU19CVUZfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAwOworCisJLyogUHJpbnQgb3V0IGRlYnVnIGluZm9ybWF0aW9uLiAqLworCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKERFQlVHRlNfQlVGX1NJWkUgLSBsZW4pLAorCQkJIkN1cnJlbnQgZnJhbWU6XG4iKTsKKworCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKERFQlVHRlNfQlVGX1NJWkUgLSBsZW4pLAorCQkJIlR4IGRhdGEgKExlbjogJWQpOlxuIiwgY2ZzcGktPnR4X2NwY2tfbGVuKTsKKworCWxlbiArPSBwcmludF9mcmFtZSgoYnVmICsgbGVuKSwgKERFQlVHRlNfQlVGX1NJWkUgLSBsZW4pLAorCQkJICAgY2ZzcGktPnhmZXIudmFfdHgsCisJCQkgICAoY2ZzcGktPnR4X2NwY2tfbGVuICsgU1BJX0NNRF9TWiksIDEwMCk7CisKKwlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChERUJVR0ZTX0JVRl9TSVpFIC0gbGVuKSwKKwkJCSJSeCBkYXRhIChMZW46ICVkKTpcbiIsIGNmc3BpLT5yeF9jcGNrX2xlbik7CisKKwlsZW4gKz0gcHJpbnRfZnJhbWUoKGJ1ZiArIGxlbiksIChERUJVR0ZTX0JVRl9TSVpFIC0gbGVuKSwKKwkJCSAgIGNmc3BpLT54ZmVyLnZhX3J4LAorCQkJICAgKGNmc3BpLT5yeF9jcGNrX2xlbiArIFNQSV9DTURfU1opLCAxMDApOworCisJc2l6ZSA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOworCWtmcmVlKGJ1Zik7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGJnZnNfc3RhdGVfZm9wcyA9IHsKKwkub3BlbiA9IGRiZ2ZzX29wZW4sCisJLnJlYWQgPSBkYmdmc19zdGF0ZSwKKwkub3duZXIgPSBUSElTX01PRFVMRQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGJnZnNfZnJhbWVfZm9wcyA9IHsKKwkub3BlbiA9IGRiZ2ZzX29wZW4sCisJLnJlYWQgPSBkYmdmc19mcmFtZSwKKwkub3duZXIgPSBUSElTX01PRFVMRQorfTsKKworc3RhdGljIGlubGluZSB2b2lkIGRldl9kZWJ1Z2ZzX2FkZChzdHJ1Y3QgY2ZzcGkgKmNmc3BpKQoreworCWNmc3BpLT5kYmdmc19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoY2ZzcGktPnBkZXYtPm5hbWUsIGRiZ2ZzX3Jvb3QpOworCWNmc3BpLT5kYmdmc19zdGF0ZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInN0YXRlIiwgU19JUlVHTywKKwkJCQkJCSBjZnNwaS0+ZGJnZnNfZGlyLCBjZnNwaSwKKwkJCQkJCSAmZGJnZnNfc3RhdGVfZm9wcyk7CisJY2ZzcGktPmRiZ2ZzX2ZyYW1lID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZnJhbWUiLCBTX0lSVUdPLAorCQkJCQkJIGNmc3BpLT5kYmdmc19kaXIsIGNmc3BpLAorCQkJCQkJICZkYmdmc19mcmFtZV9mb3BzKTsKK30KKworaW5saW5lIHZvaWQgY2ZzcGlfZGJnX3N0YXRlKHN0cnVjdCBjZnNwaSAqY2ZzcGksIGludCBzdGF0ZSkKK3sKKwljZnNwaS0+ZGJnX3N0YXRlID0gc3RhdGU7Cit9OworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIGRyaXZlcl9kZWJ1Z2ZzX2NyZWF0ZSh2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZHJpdmVyX2RlYnVnZnNfcmVtb3ZlKHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXZfZGVidWdmc19hZGQoc3RydWN0IGNmc3BpICpjZnNwaSkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRldl9kZWJ1Z2ZzX3JlbShzdHJ1Y3QgY2ZzcGkgKmNmc3BpKQoreworfQorCitpbmxpbmUgdm9pZCBjZnNwaV9kYmdfc3RhdGUoc3RydWN0IGNmc3BpICpjZnNwaSwgaW50IHN0YXRlKQoreworfQorI2VuZGlmCQkJCS8qIENPTkZJR19ERUJVR19GUyAqLworCitzdGF0aWMgTElTVF9IRUFEKGNmc3BpX2xpc3QpOworc3RhdGljIHNwaW5sb2NrX3QgY2ZzcGlfbGlzdF9sb2NrOworCisvKiBTUEkgdXBsaW5rIGhlYWQgYWxpZ25tZW50LiAqLworc3RhdGljIHNzaXplX3Qgc2hvd191cF9oZWFkX2FsaWduKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgc3BpX3VwX2hlYWRfYWxpZ24pOworfQorCitzdGF0aWMgRFJJVkVSX0FUVFIodXBfaGVhZF9hbGlnbiwgU19JUlVTUiwgc2hvd191cF9oZWFkX2FsaWduLCBOVUxMKTsKKworLyogU1BJIHVwbGluayB0YWlsIGFsaWdubWVudC4gKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfdXBfdGFpbF9hbGlnbihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHNwaV91cF90YWlsX2FsaWduKTsKK30KKworc3RhdGljIERSSVZFUl9BVFRSKHVwX3RhaWxfYWxpZ24sIFNfSVJVU1IsIHNob3dfdXBfdGFpbF9hbGlnbiwgTlVMTCk7CisKKy8qIFNQSSBkb3dubGluayBoZWFkIGFsaWdubWVudC4gKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfZG93bl9oZWFkX2FsaWduKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgc3BpX2Rvd25faGVhZF9hbGlnbik7Cit9CisKK3N0YXRpYyBEUklWRVJfQVRUUihkb3duX2hlYWRfYWxpZ24sIFNfSVJVU1IsIHNob3dfZG93bl9oZWFkX2FsaWduLCBOVUxMKTsKKworLyogU1BJIGRvd25saW5rIHRhaWwgYWxpZ25tZW50LiAqLworc3RhdGljIHNzaXplX3Qgc2hvd19kb3duX3RhaWxfYWxpZ24oc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBzcGlfZG93bl90YWlsX2FsaWduKTsKK30KKworc3RhdGljIERSSVZFUl9BVFRSKGRvd25fdGFpbF9hbGlnbiwgU19JUlVTUiwgc2hvd19kb3duX3RhaWxfYWxpZ24sIE5VTEwpOworCisvKiBTUEkgZnJhbWUgYWxpZ25tZW50LiAqLworc3RhdGljIHNzaXplX3Qgc2hvd19mcmFtZV9hbGlnbihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHNwaV9mcm1fYWxpZ24pOworfQorCitzdGF0aWMgRFJJVkVSX0FUVFIoZnJhbWVfYWxpZ24sIFNfSVJVU1IsIHNob3dfZnJhbWVfYWxpZ24sIE5VTEwpOworCitpbnQgY2ZzcGlfeG1pdGZybShzdHJ1Y3QgY2ZzcGkgKmNmc3BpLCB1OCAqYnVmLCBzaXplX3QgbGVuKQoreworCXU4ICpkc3QgPSBidWY7CisJY2FpZl9hc3NlcnQoYnVmKTsKKworCWRvIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJc3RydWN0IGNhaWZfcGF5bG9hZF9pbmZvICppbmZvOworCQlpbnQgc3BhZCA9IDA7CisJCWludCBlcGFkOworCisJCXNrYiA9IHNrYl9kZXF1ZXVlKCZjZnNwaS0+Y2hlYWQpOworCQlpZiAoIXNrYikKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIENhbGN1bGF0ZSBsZW5ndGggb2YgZnJhbWUgaW5jbHVkaW5nIFNQSSBwYWRkaW5nLgorCQkgKiBUaGUgcGF5bG9hZCBwb3NpdGlvbiBpcyBmb3VuZCBpbiB0aGUgY29udHJvbCBidWZmZXIuCisJCSAqLworCQlpbmZvID0gKHN0cnVjdCBjYWlmX3BheWxvYWRfaW5mbyAqKSZza2ItPmNiOworCisJCS8qCisJCSAqIENvbXB1dGUgaGVhZCBvZmZzZXQgaS5lLiBudW1iZXIgb2YgYnl0ZXMgdG8gYWRkIHRvCisJCSAqIGdldCB0aGUgc3RhcnQgb2YgdGhlIHBheWxvYWQgYWxpZ25lZC4KKwkJICovCisJCWlmIChzcGlfdXBfaGVhZF9hbGlnbikgeworCQkJc3BhZCA9IDEgKyAoKGluZm8tPmhkcl9sZW4gKyAxKSAmIHNwaV91cF9oZWFkX2FsaWduKTsKKwkJCSpkc3QgPSAodTgpKHNwYWQgLSAxKTsKKwkJCWRzdCArPSBzcGFkOworCQl9CisKKwkJLyogQ29weSBpbiBDQUlGIGZyYW1lLiAqLworCQlza2JfY29weV9iaXRzKHNrYiwgMCwgZHN0LCBza2ItPmxlbik7CisJCWRzdCArPSBza2ItPmxlbjsKKwkJY2ZzcGktPm5kZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJY2ZzcGktPm5kZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCisJCS8qCisJCSAqIENvbXB1dGUgdGFpbCBvZmZzZXQgaS5lLiBudW1iZXIgb2YgYnl0ZXMgdG8gYWRkIHRvCisJCSAqIGdldCB0aGUgY29tcGxldGUgQ0FJRiBmcmFtZSBhbGlnbmVkLgorCQkgKi8KKwkJZXBhZCA9IChza2ItPmxlbiArIHNwYWQpICYgc3BpX3VwX3RhaWxfYWxpZ247CisJCWRzdCArPSBlcGFkOworCisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKworCX0gd2hpbGUgKChkc3QgLSBidWYpIDwgbGVuKTsKKworCXJldHVybiBkc3QgLSBidWY7Cit9CisKK2ludCBjZnNwaV94bWl0bGVuKHN0cnVjdCBjZnNwaSAqY2ZzcGkpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisJaW50IGZybV9sZW4gPSAwOworCWludCBwa3RzID0gMDsKKworCS8qCisJICogRGVjb21taXQgcHJldmlvdXNseSBjb21taXRlZCBmcmFtZXMuCisJICogc2tiX3F1ZXVlX3NwbGljZV90YWlsKCZjZnNwaS0+Y2hlYWQsJmNmc3BpLT5xaGVhZCkKKwkgKi8KKwl3aGlsZSAoc2tiX3BlZWsoJmNmc3BpLT5jaGVhZCkpIHsKKwkJc2tiID0gc2tiX2RlcXVldWVfdGFpbCgmY2ZzcGktPmNoZWFkKTsKKwkJc2tiX3F1ZXVlX2hlYWQoJmNmc3BpLT5xaGVhZCwgc2tiKTsKKwl9CisKKwlkbyB7CisJCXN0cnVjdCBjYWlmX3BheWxvYWRfaW5mbyAqaW5mbyA9IE5VTEw7CisJCWludCBzcGFkID0gMDsKKwkJaW50IGVwYWQgPSAwOworCisJCXNrYiA9IHNrYl9kZXF1ZXVlKCZjZnNwaS0+cWhlYWQpOworCQlpZiAoIXNrYikKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIENhbGN1bGF0ZSBsZW5ndGggb2YgZnJhbWUgaW5jbHVkaW5nIFNQSSBwYWRkaW5nLgorCQkgKiBUaGUgcGF5bG9hZCBwb3NpdGlvbiBpcyBmb3VuZCBpbiB0aGUgY29udHJvbCBidWZmZXIuCisJCSAqLworCQlpbmZvID0gKHN0cnVjdCBjYWlmX3BheWxvYWRfaW5mbyAqKSZza2ItPmNiOworCisJCS8qCisJCSAqIENvbXB1dGUgaGVhZCBvZmZzZXQgaS5lLiBudW1iZXIgb2YgYnl0ZXMgdG8gYWRkIHRvCisJCSAqIGdldCB0aGUgc3RhcnQgb2YgdGhlIHBheWxvYWQgYWxpZ25lZC4KKwkJICovCisJCWlmIChzcGlfdXBfaGVhZF9hbGlnbikKKwkJCXNwYWQgPSAxICsgKChpbmZvLT5oZHJfbGVuICsgMSkgJiBzcGlfdXBfaGVhZF9hbGlnbik7CisKKwkJLyoKKwkJICogQ29tcHV0ZSB0YWlsIG9mZnNldCBpLmUuIG51bWJlciBvZiBieXRlcyB0byBhZGQgdG8KKwkJICogZ2V0IHRoZSBjb21wbGV0ZSBDQUlGIGZyYW1lIGFsaWduZWQuCisJCSAqLworCQllcGFkID0gKHNrYi0+bGVuICsgc3BhZCkgJiBzcGlfdXBfdGFpbF9hbGlnbjsKKworCQlpZiAoKHNrYi0+bGVuICsgc3BhZCArIGVwYWQgKyBmcm1fbGVuKSA8PSBDQUlGX01BWF9TUElfRlJBTUUpIHsKKwkJCXNrYl9xdWV1ZV90YWlsKCZjZnNwaS0+Y2hlYWQsIHNrYik7CisJCQlwa3RzKys7CisJCQlmcm1fbGVuICs9IHNrYi0+bGVuICsgc3BhZCArIGVwYWQ7CisJCX0gZWxzZSB7CisJCQkvKiBQdXQgYmFjayBwYWNrZXQuICovCisJCQlza2JfcXVldWVfaGVhZCgmY2ZzcGktPnFoZWFkLCBza2IpOworCQl9CisJfSB3aGlsZSAocGt0cyA8PSBDQUlGX01BWF9TUElfUEtUUyk7CisKKwkvKgorCSAqIFNlbmQgZmxvdyBvbiBpZiBwcmV2aW91c2x5IHNlbnQgZmxvdyBvZmYKKwkgKiBhbmQgbm93IGdvIGJlbG93IHRoZSBsb3cgd2F0ZXIgbWFyaworCSAqLworCWlmIChjZnNwaS0+Zmxvd19vZmZfc2VudCAmJiBjZnNwaS0+cWhlYWQucWxlbiA8IGNmc3BpLT5xZF9sb3dfbWFyayAmJgorCQljZnNwaS0+Y2ZkZXYuZmxvd2N0cmwpIHsKKwkJY2ZzcGktPmZsb3dfb2ZmX3NlbnQgPSAwOworCQljZnNwaS0+Y2ZkZXYuZmxvd2N0cmwoY2ZzcGktPm5kZXYsIDEpOworCX0KKworCXJldHVybiBmcm1fbGVuOworfQorCitzdGF0aWMgdm9pZCBjZnNwaV9zc19jYihib29sIGFzc2VydCwgc3RydWN0IGNmc3BpX2lmYyAqaWZjKQoreworCXN0cnVjdCBjZnNwaSAqY2ZzcGkgPSAoc3RydWN0IGNmc3BpICopaWZjLT5wcml2OworCisJaWYgKCFpbl9pbnRlcnJ1cHQoKSkKKwkJc3Bpbl9sb2NrKCZjZnNwaS0+bG9jayk7CisJaWYgKGFzc2VydCkgeworCQlzZXRfYml0KFNQSV9TU19PTiwgJmNmc3BpLT5zdGF0ZSk7CisJCXNldF9iaXQoU1BJX1hGRVIsICZjZnNwaS0+c3RhdGUpOworCX0gZWxzZSB7CisJCXNldF9iaXQoU1BJX1NTX09GRiwgJmNmc3BpLT5zdGF0ZSk7CisJfQorCWlmICghaW5faW50ZXJydXB0KCkpCisJCXNwaW5fdW5sb2NrKCZjZnNwaS0+bG9jayk7CisKKwkvKiBXYWtlIHVwIHRoZSB4ZmVyIHRocmVhZC4gKi8KKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNmc3BpLT53YWl0KTsKK30KKworc3RhdGljIHZvaWQgY2ZzcGlfeGZlcl9kb25lX2NiKHN0cnVjdCBjZnNwaV9pZmMgKmlmYykKK3sKKwlzdHJ1Y3QgY2ZzcGkgKmNmc3BpID0gKHN0cnVjdCBjZnNwaSAqKWlmYy0+cHJpdjsKKworCS8qIFRyYW5zZmVyIGRvbmUsIGNvbXBsZXRlIHdvcmsgcXVldWUgKi8KKwljb21wbGV0ZSgmY2ZzcGktPmNvbXApOworfQorCitzdGF0aWMgaW50IGNmc3BpX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY2ZzcGkgKmNmc3BpID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWlmICghZGV2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNmc3BpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXNrYl9xdWV1ZV90YWlsKCZjZnNwaS0+cWhlYWQsIHNrYik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2ZzcGktPmxvY2ssIGZsYWdzKTsKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoU1BJX1hGRVIsICZjZnNwaS0+c3RhdGUpKSB7CisJCS8qIFdha2UgdXAgeGZlciB0aHJlYWQuICovCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2ZzcGktPndhaXQpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjZnNwaS0+bG9jaywgZmxhZ3MpOworCisJLyogU2VuZCBmbG93IG9mZiBpZiBudW1iZXIgb2YgYnl0ZXMgaXMgYWJvdmUgaGlnaCB3YXRlciBtYXJrICovCisJaWYgKCFjZnNwaS0+Zmxvd19vZmZfc2VudCAmJgorCQljZnNwaS0+cWhlYWQucWxlbiA+IGNmc3BpLT5xZF9oaWdoX21hcmsgJiYKKwkJY2ZzcGktPmNmZGV2LmZsb3djdHJsKSB7CisJCWNmc3BpLT5mbG93X29mZl9zZW50ID0gMTsKKwkJY2ZzcGktPmNmZGV2LmZsb3djdHJsKGNmc3BpLT5uZGV2LCAwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNmc3BpX3J4ZnJtKHN0cnVjdCBjZnNwaSAqY2ZzcGksIHU4ICpidWYsIHNpemVfdCBsZW4pCit7CisJdTggKnNyYyA9IGJ1ZjsKKworCWNhaWZfYXNzZXJ0KGJ1ZiAhPSBOVUxMKTsKKworCWRvIHsKKwkJaW50IHJlczsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisJCWludCBzcGFkID0gMDsKKwkJaW50IGVwYWQgPSAwOworCQl1OCAqZHN0ID0gTlVMTDsKKwkJaW50IHBrdF9sZW4gPSAwOworCisJCS8qCisJCSAqIENvbXB1dGUgaGVhZCBvZmZzZXQgaS5lLiBudW1iZXIgb2YgYnl0ZXMgYWRkZWQgdG8KKwkJICogZ2V0IHRoZSBzdGFydCBvZiB0aGUgcGF5bG9hZCBhbGlnbmVkLgorCQkgKi8KKwkJaWYgKHNwaV9kb3duX2hlYWRfYWxpZ24pIHsKKwkJCXNwYWQgPSAxICsgKnNyYzsKKwkJCXNyYyArPSBzcGFkOworCQl9CisKKwkJLyogUmVhZCBsZW5ndGggb2YgQ0FJRiBmcmFtZSAobGl0dGxlIGVuZGlhbikuICovCisJCXBrdF9sZW4gPSAqc3JjOworCQlwa3RfbGVuIHw9ICgoKihzcmMrMSkpIDw8IDgpICYgMHhGRjAwOworCQlwa3RfbGVuICs9IDI7CS8qIEFkZCBGQ1MgZmllbGRzLiAqLworCisJCS8qIEdldCBhIHN1aXRhYmxlIGNhaWYgcGFja2V0IGFuZCBjb3B5IGluIGRhdGEuICovCisKKwkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihjZnNwaS0+bmRldiwgcGt0X2xlbiArIDEpOworCQljYWlmX2Fzc2VydChza2IgIT0gTlVMTCk7CisKKwkJZHN0ID0gc2tiX3B1dChza2IsIHBrdF9sZW4pOworCQltZW1jcHkoZHN0LCBzcmMsIHBrdF9sZW4pOworCQlzcmMgKz0gcGt0X2xlbjsKKworCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfQ0FJRik7CisJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CisJCXNrYi0+ZGV2ID0gY2ZzcGktPm5kZXY7CisKKwkJLyoKKwkJICogUHVzaCByZWNlaXZlZCBwYWNrZXQgdXAgdGhlIHN0YWNrLgorCQkgKi8KKwkJaWYgKCFzcGlfbG9vcCkKKwkJCXJlcyA9IG5ldGlmX3J4X25pKHNrYik7CisJCWVsc2UKKwkJCXJlcyA9IGNmc3BpX3htaXQoc2tiLCBjZnNwaS0+bmRldik7CisKKwkJaWYgKCFyZXMpIHsKKwkJCWNmc3BpLT5uZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQljZnNwaS0+bmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKKwkJfSBlbHNlCisJCQljZnNwaS0+bmRldi0+c3RhdHMucnhfZHJvcHBlZCsrOworCisJCS8qCisJCSAqIENvbXB1dGUgdGFpbCBvZmZzZXQgaS5lLiBudW1iZXIgb2YgYnl0ZXMgYWRkZWQgdG8KKwkJICogZ2V0IHRoZSBjb21wbGV0ZSBDQUlGIGZyYW1lIGFsaWduZWQuCisJCSAqLworCQllcGFkID0gKHBrdF9sZW4gKyBzcGFkKSAmIHNwaV9kb3duX3RhaWxfYWxpZ247CisJCXNyYyArPSBlcGFkOworCX0gd2hpbGUgKChzcmMgLSBidWYpIDwgbGVuKTsKKworCXJldHVybiBzcmMgLSBidWY7Cit9CisKK3N0YXRpYyBpbnQgY2ZzcGlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjZnNwaV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgY2ZzcGlfb3BzID0geworCS5uZG9fb3BlbiA9IGNmc3BpX29wZW4sCisJLm5kb19zdG9wID0gY2ZzcGlfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gY2ZzcGlfeG1pdAorfTsKKworc3RhdGljIHZvaWQgY2ZzcGlfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY2ZzcGkgKmNmc3BpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlkZXYtPmZlYXR1cmVzID0gMDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmY2ZzcGlfb3BzOworCWRldi0+dHlwZSA9IEFSUEhSRF9DQUlGOworCWRldi0+ZmxhZ3MgPSBJRkZfTk9BUlAgfCBJRkZfUE9JTlRPUE9JTlQ7CisJZGV2LT50eF9xdWV1ZV9sZW4gPSAwOworCWRldi0+bXR1ID0gU1BJX01BWF9QQVlMT0FEX1NJWkU7CisJZGV2LT5kZXN0cnVjdG9yID0gZnJlZV9uZXRkZXY7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmY2ZzcGktPnFoZWFkKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZjZnNwaS0+Y2hlYWQpOworCWNmc3BpLT5jZmRldi5saW5rX3NlbGVjdCA9IENBSUZfTElOS19ISUdIX0JBTkRXOworCWNmc3BpLT5jZmRldi51c2VfZnJhZyA9IGZhbHNlOworCWNmc3BpLT5jZmRldi51c2Vfc3R4ID0gZmFsc2U7CisJY2ZzcGktPmNmZGV2LnVzZV9mY3MgPSBmYWxzZTsKKwljZnNwaS0+bmRldiA9IGRldjsKK30KKworaW50IGNmc3BpX3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBjZnNwaSAqY2ZzcGkgPSBOVUxMOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OworCXN0cnVjdCBjZnNwaV9kZXYgKmRldjsKKwlpbnQgcmVzOworCWRldiA9IChzdHJ1Y3QgY2ZzcGlfZGV2ICopcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwluZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgY2ZzcGkpLAorCQkJImNmc3BpJWQiLCBjZnNwaV9zZXR1cCk7CisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJY2ZzcGkgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwluZXRpZl9zdG9wX3F1ZXVlKG5kZXYpOworCWNmc3BpLT5uZGV2ID0gbmRldjsKKwljZnNwaS0+cGRldiA9IHBkZXY7CisKKwkvKiBTZXQgZmxvdyBpbmZvICovCisJY2ZzcGktPmZsb3dfb2ZmX3NlbnQgPSAwOworCWNmc3BpLT5xZF9sb3dfbWFyayA9IExPV19XQVRFUl9NQVJLOworCWNmc3BpLT5xZF9oaWdoX21hcmsgPSBISUdIX1dBVEVSX01BUks7CisKKwkvKiBBc3NpZ24gdGhlIFNQSSBkZXZpY2UuICovCisJY2ZzcGktPmRldiA9IGRldjsKKwkvKiBBc3NpZ24gdGhlIGRldmljZSBpZmMgdG8gdGhpcyBTUEkgaW50ZXJmYWNlLiAqLworCWRldi0+aWZjID0gJmNmc3BpLT5pZmM7CisKKwkvKiBBbGxvY2F0ZSBETUEgYnVmZmVycy4gKi8KKwljZnNwaS0+eGZlci52YV90eCA9IGRtYV9hbGxvYygmY2ZzcGktPnhmZXIucGFfdHgpOworCWlmICghY2ZzcGktPnhmZXIudmFfdHgpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIkNGU1BJOiBmYWlsZWQgdG8gYWxsb2NhdGUgZG1hIFRYIGJ1ZmZlci5cbiIpOworCQlyZXMgPSAtRU5PREVWOworCQlnb3RvIGVycl9kbWFfYWxsb2NfdHg7CisJfQorCisJY2ZzcGktPnhmZXIudmFfcnggPSBkbWFfYWxsb2MoJmNmc3BpLT54ZmVyLnBhX3J4KTsKKworCWlmICghY2ZzcGktPnhmZXIudmFfcngpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIkNGU1BJOiBmYWlsZWQgdG8gYWxsb2NhdGUgZG1hIFRYIGJ1ZmZlci5cbiIpOworCQlyZXMgPSAtRU5PREVWOworCQlnb3RvIGVycl9kbWFfYWxsb2Nfcng7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgd29yayBxdWV1ZS4gKi8KKwlJTklUX1dPUksoJmNmc3BpLT53b3JrLCBjZnNwaV94ZmVyKTsKKworCS8qIEluaXRpYWxpemUgc3BpbiBsb2Nrcy4gKi8KKwlzcGluX2xvY2tfaW5pdCgmY2ZzcGktPmxvY2spOworCisJLyogSW5pdGlhbGl6ZSBmbG93IGNvbnRyb2wgc3RhdGUuICovCisJY2ZzcGktPmZsb3dfc3RvcCA9IGZhbHNlOworCisJLyogSW5pdGlhbGl6ZSB3YWl0IHF1ZXVlLiAqLworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNmc3BpLT53YWl0KTsKKworCS8qIENyZWF0ZSB3b3JrIHRocmVhZC4gKi8KKwljZnNwaS0+d3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShkZXYtPm5hbWUpOworCWlmICghY2ZzcGktPndxKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNGU1BJOiBmYWlsZWQgdG8gY3JlYXRlIHdvcmsgcXVldWUuXG4iKTsKKwkJcmVzID0gLUVOT0RFVjsKKwkJZ290byBlcnJfY3JlYXRlX3dxOworCX0KKworCS8qIEluaXRpYWxpemUgd29yayBxdWV1ZS4gKi8KKwlpbml0X2NvbXBsZXRpb24oJmNmc3BpLT5jb21wKTsKKworCS8qIENyZWF0ZSBkZWJ1Z2ZzIGVudHJpZXMuICovCisJZGV2X2RlYnVnZnNfYWRkKGNmc3BpKTsKKworCS8qIFNldCB1cCB0aGUgaWZjLiAqLworCWNmc3BpLT5pZmMuc3NfY2IgPSBjZnNwaV9zc19jYjsKKwljZnNwaS0+aWZjLnhmZXJfZG9uZV9jYiA9IGNmc3BpX3hmZXJfZG9uZV9jYjsKKwljZnNwaS0+aWZjLnByaXYgPSBjZnNwaTsKKworCS8qIEFkZCBDQUlGIFNQSSBkZXZpY2UgdG8gbGlzdC4gKi8KKwlzcGluX2xvY2soJmNmc3BpX2xpc3RfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmY2ZzcGktPmxpc3QsICZjZnNwaV9saXN0KTsKKwlzcGluX3VubG9jaygmY2ZzcGlfbGlzdF9sb2NrKTsKKworCS8qIFNjaGVkdWxlIHRoZSB3b3JrIHF1ZXVlLiAqLworCXF1ZXVlX3dvcmsoY2ZzcGktPndxLCAmY2ZzcGktPndvcmspOworCisJLyogUmVnaXN0ZXIgbmV0d29yayBkZXZpY2UuICovCisJcmVzID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOworCWlmIChyZXMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDRlNQSTogUmVnLiBlcnJvcjogJWQuXG4iLCByZXMpOworCQlnb3RvIGVycl9uZXRfcmVnOworCX0KKwlyZXR1cm4gcmVzOworCisgZXJyX25ldF9yZWc6CisJZGV2X2RlYnVnZnNfcmVtKGNmc3BpKTsKKwlzZXRfYml0KFNQSV9URVJNSU5BVEUsICZjZnNwaS0+c3RhdGUpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2ZzcGktPndhaXQpOworCWRlc3Ryb3lfd29ya3F1ZXVlKGNmc3BpLT53cSk7CisgZXJyX2NyZWF0ZV93cToKKwlkbWFfZnJlZShjZnNwaS0+eGZlci52YV9yeCwgY2ZzcGktPnhmZXIucGFfcngpOworIGVycl9kbWFfYWxsb2Nfcng6CisJZG1hX2ZyZWUoY2ZzcGktPnhmZXIudmFfdHgsIGNmc3BpLT54ZmVyLnBhX3R4KTsKKyBlcnJfZG1hX2FsbG9jX3R4OgorCWZyZWVfbmV0ZGV2KG5kZXYpOworCisJcmV0dXJuIHJlczsKK30KKworaW50IGNmc3BpX3NwaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X25vZGU7CisJc3RydWN0IGxpc3RfaGVhZCAqbjsKKwlzdHJ1Y3QgY2ZzcGkgKmNmc3BpID0gTlVMTDsKKwlzdHJ1Y3QgY2ZzcGlfZGV2ICpkZXY7CisKKwlkZXYgPSAoc3RydWN0IGNmc3BpX2RldiAqKXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXNwaW5fbG9jaygmY2ZzcGlfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdF9ub2RlLCBuLCAmY2ZzcGlfbGlzdCkgeworCQljZnNwaSA9IGxpc3RfZW50cnkobGlzdF9ub2RlLCBzdHJ1Y3QgY2ZzcGksIGxpc3QpOworCQkvKiBGaW5kIHRoZSBjb3JyZXNwb25kaW5nIGRldmljZS4gKi8KKwkJaWYgKGNmc3BpLT5kZXYgPT0gZGV2KSB7CisJCQkvKiBSZW1vdmUgZnJvbSBsaXN0LiAqLworCQkJbGlzdF9kZWwobGlzdF9ub2RlKTsKKwkJCS8qIEZyZWUgRE1BIGJ1ZmZlcnMuICovCisJCQlkbWFfZnJlZShjZnNwaS0+eGZlci52YV9yeCwgY2ZzcGktPnhmZXIucGFfcngpOworCQkJZG1hX2ZyZWUoY2ZzcGktPnhmZXIudmFfdHgsIGNmc3BpLT54ZmVyLnBhX3R4KTsKKwkJCXNldF9iaXQoU1BJX1RFUk1JTkFURSwgJmNmc3BpLT5zdGF0ZSk7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNmc3BpLT53YWl0KTsKKwkJCWRlc3Ryb3lfd29ya3F1ZXVlKGNmc3BpLT53cSk7CisJCQkvKiBEZXN0cm95IGRlYnVnZnMgZGlyZWN0b3J5IGFuZCBmaWxlcy4gKi8KKwkJCWRldl9kZWJ1Z2ZzX3JlbShjZnNwaSk7CisJCQl1bnJlZ2lzdGVyX25ldGRldihjZnNwaS0+bmRldik7CisJCQlzcGluX3VubG9jaygmY2ZzcGlfbGlzdF9sb2NrKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZjZnNwaV9saXN0X2xvY2spOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY2ZzcGlfZXhpdF9tb2R1bGUodm9pZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X25vZGU7CisJc3RydWN0IGxpc3RfaGVhZCAqbjsKKwlzdHJ1Y3QgY2ZzcGkgKmNmc3BpID0gTlVMTDsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0X25vZGUsIG4sICZjZnNwaV9saXN0KSB7CisJCWNmc3BpID0gbGlzdF9lbnRyeShsaXN0X25vZGUsIHN0cnVjdCBjZnNwaSwgbGlzdCk7CisJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGNmc3BpLT5wZGV2KTsKKwl9CisKKwkvKiBEZXN0cm95IHN5c2ZzIGZpbGVzLiAqLworCWRyaXZlcl9yZW1vdmVfZmlsZSgmY2ZzcGlfc3BpX2RyaXZlci5kcml2ZXIsCisJCQkgICAmZHJpdmVyX2F0dHJfdXBfaGVhZF9hbGlnbik7CisJZHJpdmVyX3JlbW92ZV9maWxlKCZjZnNwaV9zcGlfZHJpdmVyLmRyaXZlciwKKwkJCSAgICZkcml2ZXJfYXR0cl91cF90YWlsX2FsaWduKTsKKwlkcml2ZXJfcmVtb3ZlX2ZpbGUoJmNmc3BpX3NwaV9kcml2ZXIuZHJpdmVyLAorCQkJICAgJmRyaXZlcl9hdHRyX2Rvd25faGVhZF9hbGlnbik7CisJZHJpdmVyX3JlbW92ZV9maWxlKCZjZnNwaV9zcGlfZHJpdmVyLmRyaXZlciwKKwkJCSAgICZkcml2ZXJfYXR0cl9kb3duX3RhaWxfYWxpZ24pOworCWRyaXZlcl9yZW1vdmVfZmlsZSgmY2ZzcGlfc3BpX2RyaXZlci5kcml2ZXIsICZkcml2ZXJfYXR0cl9mcmFtZV9hbGlnbik7CisJLyogVW5yZWdpc3RlciBwbGF0Zm9ybSBkcml2ZXIuICovCisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmNmc3BpX3NwaV9kcml2ZXIpOworCS8qIERlc3Ryb3kgZGVidWdmcyByb290IGRpcmVjdG9yeS4gKi8KKwlkcml2ZXJfZGVidWdmc19yZW1vdmUoKTsKK30KKworc3RhdGljIGludCBfX2luaXQgY2ZzcGlfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCisJLyogSW5pdGlhbGl6ZSBzcGluIGxvY2suICovCisJc3Bpbl9sb2NrX2luaXQoJmNmc3BpX2xpc3RfbG9jayk7CisKKwkvKiBSZWdpc3RlciBwbGF0Zm9ybSBkcml2ZXIuICovCisJcmVzdWx0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZjZnNwaV9zcGlfZHJpdmVyKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IHJlZ2lzdGVyIHBsYXRmb3JtIFNQSSBkcml2ZXIuXG4iKTsKKwkJZ290byBlcnJfZGV2X3JlZ2lzdGVyOworCX0KKworCS8qIENyZWF0ZSBzeXNmcyBmaWxlcy4gKi8KKwlyZXN1bHQgPQorCSAgICBkcml2ZXJfY3JlYXRlX2ZpbGUoJmNmc3BpX3NwaV9kcml2ZXIuZHJpdmVyLAorCQkJICAgICAgICZkcml2ZXJfYXR0cl91cF9oZWFkX2FsaWduKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiU3lzZnMgY3JlYXRpb24gZmFpbGVkIDEuXG4iKTsKKwkJZ290byBlcnJfY3JlYXRlX3VwX2hlYWRfYWxpZ247CisJfQorCisJcmVzdWx0ID0KKwkgICAgZHJpdmVyX2NyZWF0ZV9maWxlKCZjZnNwaV9zcGlfZHJpdmVyLmRyaXZlciwKKwkJCSAgICAgICAmZHJpdmVyX2F0dHJfdXBfdGFpbF9hbGlnbik7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIlN5c2ZzIGNyZWF0aW9uIGZhaWxlZCAyLlxuIik7CisJCWdvdG8gZXJyX2NyZWF0ZV91cF90YWlsX2FsaWduOworCX0KKworCXJlc3VsdCA9CisJICAgIGRyaXZlcl9jcmVhdGVfZmlsZSgmY2ZzcGlfc3BpX2RyaXZlci5kcml2ZXIsCisJCQkgICAgICAgJmRyaXZlcl9hdHRyX2Rvd25faGVhZF9hbGlnbik7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIlN5c2ZzIGNyZWF0aW9uIGZhaWxlZCAzLlxuIik7CisJCWdvdG8gZXJyX2NyZWF0ZV9kb3duX2hlYWRfYWxpZ247CisJfQorCisJcmVzdWx0ID0KKwkgICAgZHJpdmVyX2NyZWF0ZV9maWxlKCZjZnNwaV9zcGlfZHJpdmVyLmRyaXZlciwKKwkJCSAgICAgICAmZHJpdmVyX2F0dHJfZG93bl90YWlsX2FsaWduKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiU3lzZnMgY3JlYXRpb24gZmFpbGVkIDQuXG4iKTsKKwkJZ290byBlcnJfY3JlYXRlX2Rvd25fdGFpbF9hbGlnbjsKKwl9CisKKwlyZXN1bHQgPQorCSAgICBkcml2ZXJfY3JlYXRlX2ZpbGUoJmNmc3BpX3NwaV9kcml2ZXIuZHJpdmVyLAorCQkJICAgICAgICZkcml2ZXJfYXR0cl9mcmFtZV9hbGlnbik7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIlN5c2ZzIGNyZWF0aW9uIGZhaWxlZCA1LlxuIik7CisJCWdvdG8gZXJyX2NyZWF0ZV9mcmFtZV9hbGlnbjsKKwl9CisJZHJpdmVyX2RlYnVnZnNfY3JlYXRlKCk7CisJcmV0dXJuIHJlc3VsdDsKKworIGVycl9jcmVhdGVfZnJhbWVfYWxpZ246CisJZHJpdmVyX3JlbW92ZV9maWxlKCZjZnNwaV9zcGlfZHJpdmVyLmRyaXZlciwKKwkJCSAgICZkcml2ZXJfYXR0cl9kb3duX3RhaWxfYWxpZ24pOworIGVycl9jcmVhdGVfZG93bl90YWlsX2FsaWduOgorCWRyaXZlcl9yZW1vdmVfZmlsZSgmY2ZzcGlfc3BpX2RyaXZlci5kcml2ZXIsCisJCQkgICAmZHJpdmVyX2F0dHJfZG93bl9oZWFkX2FsaWduKTsKKyBlcnJfY3JlYXRlX2Rvd25faGVhZF9hbGlnbjoKKwlkcml2ZXJfcmVtb3ZlX2ZpbGUoJmNmc3BpX3NwaV9kcml2ZXIuZHJpdmVyLAorCQkJICAgJmRyaXZlcl9hdHRyX3VwX3RhaWxfYWxpZ24pOworIGVycl9jcmVhdGVfdXBfdGFpbF9hbGlnbjoKKwlkcml2ZXJfcmVtb3ZlX2ZpbGUoJmNmc3BpX3NwaV9kcml2ZXIuZHJpdmVyLAorCQkJICAgJmRyaXZlcl9hdHRyX3VwX2hlYWRfYWxpZ24pOworIGVycl9jcmVhdGVfdXBfaGVhZF9hbGlnbjoKKyBlcnJfZGV2X3JlZ2lzdGVyOgorCXJldHVybiByZXN1bHQ7Cit9CisKK21vZHVsZV9pbml0KGNmc3BpX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGNmc3BpX2V4aXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NhaWYvY2FpZl9zcGlfc2xhdmUuYyBiL2RyaXZlcnMvbmV0L2NhaWYvY2FpZl9zcGlfc2xhdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzdjY2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvY2FpZi9jYWlmX3NwaV9zbGF2ZS5jCkBAIC0wLDAgKzEsMjUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSBTVC1Fcmljc3NvbiBBQiAyMDEwCisgKiBDb250YWN0OiBTanVyIEJyZW5kZWxhbmQgLyBzanVyLmJyYW5kZWxhbmRAc3Rlcmljc3Nvbi5jb20KKyAqIEF1dGhvcjogIERhbmllbCBNYXJ0ZW5zc29uIC8gRGFuaWVsLk1hcnRlbnNzb25Ac3Rlcmljc3Nvbi5jb20KKyAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHZlcnNpb24gMi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bmV0L2NhaWYvY2FpZl9zcGkuaD4KKworI2lmbmRlZiBDT05GSUdfQ0FJRl9TUElfU1lOQworI2RlZmluZSBTUElfREFUQV9QT1MgU1BJX0NNRF9TWgorc3RhdGljIGlubGluZSBpbnQgZm9yd2FyZF90b19zcGlfY21kKHN0cnVjdCBjZnNwaSAqY2ZzcGkpCit7CisJcmV0dXJuIGNmc3BpLT5yeF9jcGNrX2xlbjsKK30KKyNlbHNlCisjZGVmaW5lIFNQSV9EQVRBX1BPUyAwCitzdGF0aWMgaW5saW5lIGludCBmb3J3YXJkX3RvX3NwaV9jbWQoc3RydWN0IGNmc3BpICpjZnNwaSkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitpbnQgc3BpX2ZybV9hbGlnbiA9IDI7CitpbnQgc3BpX3VwX2hlYWRfYWxpZ24gPSAxOworaW50IHNwaV91cF90YWlsX2FsaWduOworaW50IHNwaV9kb3duX2hlYWRfYWxpZ24gPSAzOworaW50IHNwaV9kb3duX3RhaWxfYWxpZ24gPSAxOworCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdmc19zdG9yZV9wcmV2KHN0cnVjdCBjZnNwaSAqY2ZzcGkpCit7CisJLyogU3RvcmUgcHJldmlvdXMgY29tbWFuZCBmb3IgZGVidWdnaW5nIHJlYXNvbnMuKi8KKwljZnNwaS0+cGNtZCA9IGNmc3BpLT5jbWQ7CisJLyogU3RvcmUgcHJldmlvdXMgdHJhbnNmZXIuICovCisJY2ZzcGktPnR4X3BwY2tfbGVuID0gY2ZzcGktPnR4X2NwY2tfbGVuOworCWNmc3BpLT5yeF9wcGNrX2xlbiA9IGNmc3BpLT5yeF9jcGNrX2xlbjsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdmc19zdG9yZV9wcmV2KHN0cnVjdCBjZnNwaSAqY2ZzcGkpCit7Cit9CisjZW5kaWYKKwordm9pZCBjZnNwaV94ZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgY2ZzcGkgKmNmc3BpOworCXU4ICpwdHIgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKwljZnNwaSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2ZzcGksIHdvcmspOworCisJLyogSW5pdGlhbGl6ZSBzdGF0ZS4gKi8KKwljZnNwaS0+Y21kID0gU1BJX0NNRF9FT1Q7CisKKwlmb3IgKDs7KSB7CisKKwkJY2ZzcGlfZGJnX3N0YXRlKGNmc3BpLCBDRlNQSV9TVEFURV9XQUlUSU5HKTsKKworCQkvKiBXYWl0IGZvciBtYXN0ZXIgdGFsayBvciB0cmFuc21pdCBldmVudC4gKi8KKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNmc3BpLT53YWl0LAorCQkJCSB0ZXN0X2JpdChTUElfWEZFUiwgJmNmc3BpLT5zdGF0ZSkgfHwKKwkJCQkgdGVzdF9iaXQoU1BJX1RFUk1JTkFURSwgJmNmc3BpLT5zdGF0ZSkpOworCisJCWlmICh0ZXN0X2JpdChTUElfVEVSTUlOQVRFLCAmY2ZzcGktPnN0YXRlKSkKKwkJCXJldHVybjsKKworI2lmIENGU1BJX0RCR19QUkVGSUxMCisJCS8qIFByZWZpbGwgYnVmZmVycyBmb3IgZWFzaWVyIGRlYnVnZ2luZy4gKi8KKwkJbWVtc2V0KGNmc3BpLT54ZmVyLnZhX3R4LCAweEZGLCBTUElfRE1BX0JVRl9MRU4pOworCQltZW1zZXQoY2ZzcGktPnhmZXIudmFfcngsIDB4RkYsIFNQSV9ETUFfQlVGX0xFTik7CisjZW5kaWYJLyogQ0ZTUElfREJHX1BSRUZJTEwgKi8KKworCQljZnNwaV9kYmdfc3RhdGUoY2ZzcGksIENGU1BJX1NUQVRFX0FXQUtFKTsKKworCS8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSBhIGNvbW1pdHRlZCBmcmFtZS4gKi8KKwkJaWYgKGNmc3BpLT50eF9jcGNrX2xlbikgeworCQkJaW50IGxlbjsKKworCQkJY2ZzcGlfZGJnX3N0YXRlKGNmc3BpLCBDRlNQSV9TVEFURV9GRVRDSF9QS1QpOworCisJCQkvKiBDb3B5IGNvbW1pdGVkIFNQSSBmcmFtZXMgYWZ0ZXIgdGhlIFNQSSBpbmRpY2F0aW9uLiAqLworCQkJcHRyID0gKHU4ICopIGNmc3BpLT54ZmVyLnZhX3R4OworCQkJcHRyICs9IFNQSV9JTkRfU1o7CisJCQlsZW4gPSBjZnNwaV94bWl0ZnJtKGNmc3BpLCBwdHIsIGNmc3BpLT50eF9jcGNrX2xlbik7CisJCQlXQVJOX09OKGxlbiAhPSBjZnNwaS0+dHhfY3Bja19sZW4pOworCX0KKworCQljZnNwaV9kYmdfc3RhdGUoY2ZzcGksIENGU1BJX1NUQVRFX0dFVF9ORVhUKTsKKworCQkvKiBHZXQgbGVuZ3RoIG9mIG5leHQgZnJhbWUgdG8gY29tbWl0LiAqLworCQljZnNwaS0+dHhfbnBja19sZW4gPSBjZnNwaV94bWl0bGVuKGNmc3BpKTsKKworCQlXQVJOX09OKGNmc3BpLT50eF9ucGNrX2xlbiA+IFNQSV9ETUFfQlVGX0xFTik7CisKKwkJLyoKKwkJICogQWRkIGluZGljYXRpb24gYW5kIGxlbmd0aCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmcmFtZSwKKwkJICogdXNpbmcgbGl0dGxlIGVuZGlhbi4KKwkJICovCisJCXB0ciA9ICh1OCAqKSBjZnNwaS0+eGZlci52YV90eDsKKwkJKnB0cisrID0gU1BJX0NNRF9JTkQ7CisJCSpwdHIrKyA9IChTUElfQ01EX0lORCAgJiAweEZGMDApID4+IDg7CisJCSpwdHIrKyA9IGNmc3BpLT50eF9ucGNrX2xlbiAmIDB4MDBGRjsKKwkJKnB0cisrID0gKGNmc3BpLT50eF9ucGNrX2xlbiAmIDB4RkYwMCkgPj4gODsKKworCQkvKiBDYWxjdWxhdGUgbGVuZ3RoIG9mIERNQXMuICovCisJCWNmc3BpLT54ZmVyLnR4X2RtYV9sZW4gPSBjZnNwaS0+dHhfY3Bja19sZW4gKyBTUElfSU5EX1NaOworCQljZnNwaS0+eGZlci5yeF9kbWFfbGVuID0gY2ZzcGktPnJ4X2NwY2tfbGVuICsgU1BJX0NNRF9TWjsKKworCQkvKiBBZGQgU1BJIFRYIGZyYW1lIGFsaWdubWVudCBwYWRkaW5nLCBpZiBuZWNlc3NhcnkuICovCisJCWlmIChjZnNwaS0+dHhfY3Bja19sZW4gJiYKKwkJCShjZnNwaS0+eGZlci50eF9kbWFfbGVuICUgc3BpX2ZybV9hbGlnbikpIHsKKworCQkJY2ZzcGktPnhmZXIudHhfZG1hX2xlbiArPSBzcGlfZnJtX2FsaWduIC0KKwkJCSAgICAoY2ZzcGktPnhmZXIudHhfZG1hX2xlbiAlIHNwaV9mcm1fYWxpZ24pOworCQl9CisKKwkJLyogQWRkIFNQSSBSWCBmcmFtZSBhbGlnbm1lbnQgcGFkZGluZywgaWYgbmVjZXNzYXJ5LiAqLworCQlpZiAoY2ZzcGktPnJ4X2NwY2tfbGVuICYmCisJCQkoY2ZzcGktPnhmZXIucnhfZG1hX2xlbiAlIHNwaV9mcm1fYWxpZ24pKSB7CisKKwkJCWNmc3BpLT54ZmVyLnJ4X2RtYV9sZW4gKz0gc3BpX2ZybV9hbGlnbiAtCisJCQkgICAgKGNmc3BpLT54ZmVyLnJ4X2RtYV9sZW4gJSBzcGlfZnJtX2FsaWduKTsKKwkJfQorCisJCWNmc3BpX2RiZ19zdGF0ZShjZnNwaSwgQ0ZTUElfU1RBVEVfSU5JVF9YRkVSKTsKKworCQkvKiBTdGFydCB0cmFuc2Zlci4gKi8KKwkJcmV0ID0gY2ZzcGktPmRldi0+aW5pdF94ZmVyKCZjZnNwaS0+eGZlciwgY2ZzcGktPmRldik7CisJCVdBUk5fT04ocmV0KTsKKworCQljZnNwaV9kYmdfc3RhdGUoY2ZzcGksIENGU1BJX1NUQVRFX1dBSVRfQUNUSVZFKTsKKworCQkvKgorCQkgKiBUT0RPOiBXZSBtaWdodCBiZSBhYmxlIHRvIG1ha2UgYW4gYXNzdW1wdGlvbiBpZiB0aGlzIGlzIHRoZQorCQkgKiBmaXJzdCBsb29wLiBNYWtlIHN1cmUgdGhhdCBtaW5pbXVtIHRvZ2dsZSB0aW1lIGlzIHJlc3BlY3RlZC4KKwkJICovCisJCXVkZWxheShNSU5fVFJBTlNJVElPTl9USU1FX1VTRUMpOworCisJCWNmc3BpX2RiZ19zdGF0ZShjZnNwaSwgQ0ZTUElfU1RBVEVfU0lHX0FDVElWRSk7CisKKwkJLyogU2lnbmFsIHRoYXQgd2UgYXJlIHJlYWR5IHRvIHJlY2lldmUgZGF0YS4gKi8KKwkJY2ZzcGktPmRldi0+c2lnX3hmZXIodHJ1ZSwgY2ZzcGktPmRldik7CisKKwkJY2ZzcGlfZGJnX3N0YXRlKGNmc3BpLCBDRlNQSV9TVEFURV9XQUlUX1hGRVJfRE9ORSk7CisKKwkJLyogV2FpdCBmb3IgdHJhbnNmZXIgY29tcGxldGlvbi4gKi8KKwkJd2FpdF9mb3JfY29tcGxldGlvbigmY2ZzcGktPmNvbXApOworCisJCWNmc3BpX2RiZ19zdGF0ZShjZnNwaSwgQ0ZTUElfU1RBVEVfWEZFUl9ET05FKTsKKworCQlpZiAoY2ZzcGktPmNtZCA9PSBTUElfQ01EX0VPVCkgeworCQkJLyoKKwkJCSAqIENsZWFyIHRoZSBtYXN0ZXIgdGFsayBiaXQuIEEgeGZlciBpcyBhbHdheXMgYXQKKwkJCSAqICBsZWFzdCB0d28gYnVyc3RzLgorCQkJICovCisJCQljbGVhcl9iaXQoU1BJX1NTX09OLCAmY2ZzcGktPnN0YXRlKTsKKwkJfQorCisJCWNmc3BpX2RiZ19zdGF0ZShjZnNwaSwgQ0ZTUElfU1RBVEVfV0FJVF9JTkFDVElWRSk7CisKKwkJLyogTWFrZSBzdXJlIHRoYXQgdGhlIG1pbmltdW0gdG9nZ2xlIHRpbWUgaXMgcmVzcGVjdGVkLiAqLworCQlpZiAoU1BJX1hGRVJfVElNRV9VU0VDKGNmc3BpLT54ZmVyLnR4X2RtYV9sZW4sCisJCQkJCWNmc3BpLT5kZXYtPmNsa19taHopIDwKKwkJCU1JTl9UUkFOU0lUSU9OX1RJTUVfVVNFQykgeworCisJCQl1ZGVsYXkoTUlOX1RSQU5TSVRJT05fVElNRV9VU0VDIC0KKwkJCQlTUElfWEZFUl9USU1FX1VTRUMKKwkJCQkoY2ZzcGktPnhmZXIudHhfZG1hX2xlbiwgY2ZzcGktPmRldi0+Y2xrX21oeikpOworCQl9CisKKwkJY2ZzcGlfZGJnX3N0YXRlKGNmc3BpLCBDRlNQSV9TVEFURV9TSUdfSU5BQ1RJVkUpOworCisJCS8qIERlLWFzc2VydCB0cmFuc2ZlciBzaWduYWwuICovCisJCWNmc3BpLT5kZXYtPnNpZ194ZmVyKGZhbHNlLCBjZnNwaS0+ZGV2KTsKKworCQkvKiBDaGVjayB3aGV0aGVyIHdlIHJlY2VpdmVkIGEgQ0FJRiBwYWNrZXQuICovCisJCWlmIChjZnNwaS0+cnhfY3Bja19sZW4pIHsKKwkJCWludCBsZW47CisKKwkJCWNmc3BpX2RiZ19zdGF0ZShjZnNwaSwgQ0ZTUElfU1RBVEVfREVMSVZFUl9QS1QpOworCisJCQkvKiBQYXJzZSBTUEkgZnJhbWUuICovCisJCQlwdHIgPSAoKHU4ICopKGNmc3BpLT54ZmVyLnZhX3J4ICsgU1BJX0RBVEFfUE9TKSk7CisKKwkJCWxlbiA9IGNmc3BpX3J4ZnJtKGNmc3BpLCBwdHIsIGNmc3BpLT5yeF9jcGNrX2xlbik7CisJCQlXQVJOX09OKGxlbiAhPSBjZnNwaS0+cnhfY3Bja19sZW4pOworCQl9CisKKwkJLyogQ2hlY2sgdGhlIG5leHQgU1BJIGNvbW1hbmQgYW5kIGxlbmd0aC4gKi8KKwkJcHRyID0gKHU4ICopIGNmc3BpLT54ZmVyLnZhX3J4OworCisJCXB0ciArPSBmb3J3YXJkX3RvX3NwaV9jbWQoY2ZzcGkpOworCisJCWNmc3BpLT5jbWQgPSAqcHRyKys7CisJCWNmc3BpLT5jbWQgfD0gKCgqcHRyKyspIDw8IDgpICYgMHhGRjAwOworCQljZnNwaS0+cnhfbnBja19sZW4gPSAqcHRyKys7CisJCWNmc3BpLT5yeF9ucGNrX2xlbiB8PSAoKCpwdHIrKykgPDwgOCkgJiAweEZGMDA7CisKKwkJV0FSTl9PTihjZnNwaS0+cnhfbnBja19sZW4gPiBTUElfRE1BX0JVRl9MRU4pOworCQlXQVJOX09OKGNmc3BpLT5jbWQgPiBTUElfQ01EX0VPVCk7CisKKwkJZGVidWdmc19zdG9yZV9wcmV2KGNmc3BpKTsKKworCQkvKiBDaGVjayB3aGV0aGVyIHRoZSBtYXN0ZXIgaXNzdWVkIGFuIEVPVCBjb21tYW5kLiAqLworCQlpZiAoY2ZzcGktPmNtZCA9PSBTUElfQ01EX0VPVCkgeworCQkJLyogUmVzZXQgc3RhdGUuICovCisJCQljZnNwaS0+dHhfY3Bja19sZW4gPSAwOworCQkJY2ZzcGktPnJ4X2NwY2tfbGVuID0gMDsKKwkJfSBlbHNlIHsKKwkJCS8qIFVwZGF0ZSBzdGF0ZS4gKi8KKwkJCWNmc3BpLT50eF9jcGNrX2xlbiA9IGNmc3BpLT50eF9ucGNrX2xlbjsKKwkJCWNmc3BpLT5yeF9jcGNrX2xlbiA9IGNmc3BpLT5yeF9ucGNrX2xlbjsKKwkJfQorCisJCS8qCisJCSAqIENoZWNrIHdoZXRoZXIgd2UgbmVlZCB0byBjbGVhciB0aGUgeGZlciBiaXQuCisJCSAqIFNwaW4gbG9jayBuZWVkZWQgZm9yIHBhY2tldCBpbnNlcnRpb24uCisJCSAqIFRlc3QgYW5kIGNsZWFyIG9mIGRpZmZlcmVudCBiaXRzCisJCSAqIGFyZSBub3Qgc3VwcG9ydGVkLgorCQkgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNmc3BpLT5sb2NrLCBmbGFncyk7CisJCWlmIChjZnNwaS0+Y21kID09IFNQSV9DTURfRU9UICYmICFjZnNwaV94bWl0bGVuKGNmc3BpKQorCQkJJiYgIXRlc3RfYml0KFNQSV9TU19PTiwgJmNmc3BpLT5zdGF0ZSkpCisJCQljbGVhcl9iaXQoU1BJX1hGRVIsICZjZnNwaS0+c3RhdGUpOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNmc3BpLT5sb2NrLCBmbGFncyk7CisJfQorfQorCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNmc3BpX3NwaV9kcml2ZXIgPSB7CisJLnByb2JlID0gY2ZzcGlfc3BpX3Byb2JlLAorCS5yZW1vdmUgPSBjZnNwaV9zcGlfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCSAgIC5uYW1lID0gImNmc3BpX3NzcGkiLAorCQkgICAub3duZXIgPSBUSElTX01PRFVMRSwKKwkJICAgfSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnCmluZGV4IDJjNTIyN2MuLjlkOWU0NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnCkBAIC03Myw2ICs3MywxNSBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlIHdpbGwgYmUKIAkgIGNhbGxlZCBqYW56LWljYW4zLmtvLgogCitjb25maWcgSEFWRV9DQU5fRkxFWENBTgorCWJvb2wKKworY29uZmlnIENBTl9GTEVYQ0FOCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIEZyZWVzY2FsZSBGTEVYQ0FOIGJhc2VkIGNoaXBzIgorCWRlcGVuZHMgb24gQ0FOX0RFViAmJiBIQVZFX0NBTl9GTEVYQ0FOCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBzdXBwb3J0IGZvciBGcmVlc2NhbGUgRmxleENBTi4KKwogc291cmNlICJkcml2ZXJzL25ldC9jYW4vbXNjYW4vS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL25ldC9jYW4vc2phMTAwMC9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvY2FuL01ha2VmaWxlCmluZGV4IDkwNDdjZDAuLjAwNTc1MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9jYW4vTWFrZWZpbGUKQEAgLTE2LDUgKzE2LDYgQEAKIG9iai0kKENPTkZJR19DQU5fTUNQMjUxWCkJKz0gbWNwMjUxeC5vCiBvYmotJChDT05GSUdfQ0FOX0JGSU4pCQkrPSBiZmluX2Nhbi5vCiBvYmotJChDT05GSUdfQ0FOX0pBTlpfSUNBTjMpCSs9IGphbnotaWNhbjMubworb2JqLSQoQ09ORklHX0NBTl9GTEVYQ0FOKQkrPSBmbGV4Y2FuLm8KIAogY2NmbGFncy0kKENPTkZJR19DQU5fREVCVUdfREVWSUNFUykgOj0gLURERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2ZsZXhjYW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9mbGV4Y2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY0NDNhMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9mbGV4Y2FuLmMKQEAgLTAsMCArMSwxMDMwIEBACisvKgorICogZmxleGNhbi5jIC0gRkxFWENBTiBDQU4gY29udHJvbGxlciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNiBWYXJtYSBFbGVjdHJvbmljcyBPeQorICogQ29weXJpZ2h0IChjKSAyMDA5IFNhc2NoYSBIYXVlciwgUGVuZ3V0cm9uaXgKKyAqIENvcHlyaWdodCAoYykgMjAxMCBNYXJjIEtsZWluZS1CdWRkZSwgUGVuZ3V0cm9uaXgKKyAqCisgKiBCYXNlZCBvbiBjb2RlIG9yaWdpbmFsbHkgYnkgQW5kcmV5IFZvbGtvdiA8YXZvbGtvdkB2YXJtYS1lbC5jb20+CisgKgorICogTElDRU5DRToKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nhbi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nhbi9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jYW4vZXJyb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9jYW4vcGxhdGZvcm0vZmxleGNhbi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KKworI2RlZmluZSBEUlZfTkFNRQkJCSJmbGV4Y2FuIgorCisvKiA4IGZvciBSWCBmaWZvIGFuZCAyIGVycm9yIGhhbmRsaW5nICovCisjZGVmaW5lIEZMRVhDQU5fTkFQSV9XRUlHSFQJCSg4ICsgMikKKworLyogRkxFWENBTiBtb2R1bGUgY29uZmlndXJhdGlvbiByZWdpc3RlciAoQ0FOTUNSKSBiaXRzICovCisjZGVmaW5lIEZMRVhDQU5fTUNSX01ESVMJCUJJVCgzMSkKKyNkZWZpbmUgRkxFWENBTl9NQ1JfRlJaCQkJQklUKDMwKQorI2RlZmluZSBGTEVYQ0FOX01DUl9GRU4JCQlCSVQoMjkpCisjZGVmaW5lIEZMRVhDQU5fTUNSX0hBTFQJCUJJVCgyOCkKKyNkZWZpbmUgRkxFWENBTl9NQ1JfTk9UX1JEWQkJQklUKDI3KQorI2RlZmluZSBGTEVYQ0FOX01DUl9XQUtfTVNLCQlCSVQoMjYpCisjZGVmaW5lIEZMRVhDQU5fTUNSX1NPRlRSU1QJCUJJVCgyNSkKKyNkZWZpbmUgRkxFWENBTl9NQ1JfRlJaX0FDSwkJQklUKDI0KQorI2RlZmluZSBGTEVYQ0FOX01DUl9TVVBWCQlCSVQoMjMpCisjZGVmaW5lIEZMRVhDQU5fTUNSX1NMRl9XQUsJCUJJVCgyMikKKyNkZWZpbmUgRkxFWENBTl9NQ1JfV1JOX0VOCQlCSVQoMjEpCisjZGVmaW5lIEZMRVhDQU5fTUNSX0xQTV9BQ0sJCUJJVCgyMCkKKyNkZWZpbmUgRkxFWENBTl9NQ1JfV0FLX1NSQwkJQklUKDE5KQorI2RlZmluZSBGTEVYQ0FOX01DUl9ET1pFCQlCSVQoMTgpCisjZGVmaW5lIEZMRVhDQU5fTUNSX1NSWF9ESVMJCUJJVCgxNykKKyNkZWZpbmUgRkxFWENBTl9NQ1JfQkNDCQkJQklUKDE2KQorI2RlZmluZSBGTEVYQ0FOX01DUl9MUFJJT19FTgkJQklUKDEzKQorI2RlZmluZSBGTEVYQ0FOX01DUl9BRU4JCQlCSVQoMTIpCisjZGVmaW5lIEZMRVhDQU5fTUNSX01BWE1CKHgpCQkoKHgpICYgMHhmKQorI2RlZmluZSBGTEVYQ0FOX01DUl9JREFNX0EJCSgwIDw8IDgpCisjZGVmaW5lIEZMRVhDQU5fTUNSX0lEQU1fQgkJKDEgPDwgOCkKKyNkZWZpbmUgRkxFWENBTl9NQ1JfSURBTV9DCQkoMiA8PCA4KQorI2RlZmluZSBGTEVYQ0FOX01DUl9JREFNX0QJCSgzIDw8IDgpCisKKy8qIEZMRVhDQU4gY29udHJvbCByZWdpc3RlciAoQ0FOQ1RSTCkgYml0cyAqLworI2RlZmluZSBGTEVYQ0FOX0NUUkxfUFJFU0RJVih4KQkJKCgoeCkgJiAweGZmKSA8PCAyNCkKKyNkZWZpbmUgRkxFWENBTl9DVFJMX1JKVyh4KQkJKCgoeCkgJiAweDAzKSA8PCAyMikKKyNkZWZpbmUgRkxFWENBTl9DVFJMX1BTRUcxKHgpCQkoKCh4KSAmIDB4MDcpIDw8IDE5KQorI2RlZmluZSBGTEVYQ0FOX0NUUkxfUFNFRzIoeCkJCSgoKHgpICYgMHgwNykgPDwgMTYpCisjZGVmaW5lIEZMRVhDQU5fQ1RSTF9CT0ZGX01TSwkJQklUKDE1KQorI2RlZmluZSBGTEVYQ0FOX0NUUkxfRVJSX01TSwkJQklUKDE0KQorI2RlZmluZSBGTEVYQ0FOX0NUUkxfQ0xLX1NSQwkJQklUKDEzKQorI2RlZmluZSBGTEVYQ0FOX0NUUkxfTFBCCQlCSVQoMTIpCisjZGVmaW5lIEZMRVhDQU5fQ1RSTF9UV1JOX01TSwkJQklUKDExKQorI2RlZmluZSBGTEVYQ0FOX0NUUkxfUldSTl9NU0sJCUJJVCgxMCkKKyNkZWZpbmUgRkxFWENBTl9DVFJMX1NNUAkJQklUKDcpCisjZGVmaW5lIEZMRVhDQU5fQ1RSTF9CT0ZGX1JFQwkJQklUKDYpCisjZGVmaW5lIEZMRVhDQU5fQ1RSTF9UU1lOCQlCSVQoNSkKKyNkZWZpbmUgRkxFWENBTl9DVFJMX0xCVUYJCUJJVCg0KQorI2RlZmluZSBGTEVYQ0FOX0NUUkxfTE9NCQlCSVQoMykKKyNkZWZpbmUgRkxFWENBTl9DVFJMX1BST1BTRUcoeCkJCSgoeCkgJiAweDA3KQorI2RlZmluZSBGTEVYQ0FOX0NUUkxfRVJSX0JVUwkJKEZMRVhDQU5fQ1RSTF9FUlJfTVNLKQorI2RlZmluZSBGTEVYQ0FOX0NUUkxfRVJSX1NUQVRFIFwKKwkoRkxFWENBTl9DVFJMX1RXUk5fTVNLIHwgRkxFWENBTl9DVFJMX1JXUk5fTVNLIHwgXAorCSBGTEVYQ0FOX0NUUkxfQk9GRl9NU0spCisjZGVmaW5lIEZMRVhDQU5fQ1RSTF9FUlJfQUxMIFwKKwkoRkxFWENBTl9DVFJMX0VSUl9CVVMgfCBGTEVYQ0FOX0NUUkxfRVJSX1NUQVRFKQorCisvKiBGTEVYQ0FOIGVycm9yIGFuZCBzdGF0dXMgcmVnaXN0ZXIgKEVTUikgYml0cyAqLworI2RlZmluZSBGTEVYQ0FOX0VTUl9UV1JOX0lOVAkJQklUKDE3KQorI2RlZmluZSBGTEVYQ0FOX0VTUl9SV1JOX0lOVAkJQklUKDE2KQorI2RlZmluZSBGTEVYQ0FOX0VTUl9CSVQxX0VSUgkJQklUKDE1KQorI2RlZmluZSBGTEVYQ0FOX0VTUl9CSVQwX0VSUgkJQklUKDE0KQorI2RlZmluZSBGTEVYQ0FOX0VTUl9BQ0tfRVJSCQlCSVQoMTMpCisjZGVmaW5lIEZMRVhDQU5fRVNSX0NSQ19FUlIJCUJJVCgxMikKKyNkZWZpbmUgRkxFWENBTl9FU1JfRlJNX0VSUgkJQklUKDExKQorI2RlZmluZSBGTEVYQ0FOX0VTUl9TVEZfRVJSCQlCSVQoMTApCisjZGVmaW5lIEZMRVhDQU5fRVNSX1RYX1dSTgkJQklUKDkpCisjZGVmaW5lIEZMRVhDQU5fRVNSX1JYX1dSTgkJQklUKDgpCisjZGVmaW5lIEZMRVhDQU5fRVNSX0lETEUJCUJJVCg3KQorI2RlZmluZSBGTEVYQ0FOX0VTUl9UWFJYCQlCSVQoNikKKyNkZWZpbmUgRkxFWENBTl9FU1RfRkxUX0NPTkZfU0hJRlQJKDQpCisjZGVmaW5lIEZMRVhDQU5fRVNSX0ZMVF9DT05GX01BU0sJKDB4MyA8PCBGTEVYQ0FOX0VTVF9GTFRfQ09ORl9TSElGVCkKKyNkZWZpbmUgRkxFWENBTl9FU1JfRkxUX0NPTkZfQUNUSVZFCSgweDAgPDwgRkxFWENBTl9FU1RfRkxUX0NPTkZfU0hJRlQpCisjZGVmaW5lIEZMRVhDQU5fRVNSX0ZMVF9DT05GX1BBU1NJVkUJKDB4MSA8PCBGTEVYQ0FOX0VTVF9GTFRfQ09ORl9TSElGVCkKKyNkZWZpbmUgRkxFWENBTl9FU1JfQk9GRl9JTlQJCUJJVCgyKQorI2RlZmluZSBGTEVYQ0FOX0VTUl9FUlJfSU5UCQlCSVQoMSkKKyNkZWZpbmUgRkxFWENBTl9FU1JfV0FLX0lOVAkJQklUKDApCisjZGVmaW5lIEZMRVhDQU5fRVNSX0VSUl9CVVMgXAorCShGTEVYQ0FOX0VTUl9CSVQxX0VSUiB8IEZMRVhDQU5fRVNSX0JJVDBfRVJSIHwgXAorCSBGTEVYQ0FOX0VTUl9BQ0tfRVJSIHwgRkxFWENBTl9FU1JfQ1JDX0VSUiB8IFwKKwkgRkxFWENBTl9FU1JfRlJNX0VSUiB8IEZMRVhDQU5fRVNSX1NURl9FUlIpCisjZGVmaW5lIEZMRVhDQU5fRVNSX0VSUl9TVEFURSBcCisJKEZMRVhDQU5fRVNSX1RXUk5fSU5UIHwgRkxFWENBTl9FU1JfUldSTl9JTlQgfCBGTEVYQ0FOX0VTUl9CT0ZGX0lOVCkKKyNkZWZpbmUgRkxFWENBTl9FU1JfRVJSX0FMTCBcCisJKEZMRVhDQU5fRVNSX0VSUl9CVVMgfCBGTEVYQ0FOX0VTUl9FUlJfU1RBVEUpCisKKy8qIEZMRVhDQU4gaW50ZXJydXB0IGZsYWcgcmVnaXN0ZXIgKElGTEFHKSBiaXRzICovCisjZGVmaW5lIEZMRVhDQU5fVFhfQlVGX0lECQk4CisjZGVmaW5lIEZMRVhDQU5fSUZMQUdfQlVGKHgpCQlCSVQoeCkKKyNkZWZpbmUgRkxFWENBTl9JRkxBR19SWF9GSUZPX09WRVJGTE9XCUJJVCg3KQorI2RlZmluZSBGTEVYQ0FOX0lGTEFHX1JYX0ZJRk9fV0FSTglCSVQoNikKKyNkZWZpbmUgRkxFWENBTl9JRkxBR19SWF9GSUZPX0FWQUlMQUJMRQlCSVQoNSkKKyNkZWZpbmUgRkxFWENBTl9JRkxBR19ERUZBVUxUIFwKKwkoRkxFWENBTl9JRkxBR19SWF9GSUZPX09WRVJGTE9XIHwgRkxFWENBTl9JRkxBR19SWF9GSUZPX0FWQUlMQUJMRSB8IFwKKwkgRkxFWENBTl9JRkxBR19CVUYoRkxFWENBTl9UWF9CVUZfSUQpKQorCisvKiBGTEVYQ0FOIG1lc3NhZ2UgYnVmZmVycyAqLworI2RlZmluZSBGTEVYQ0FOX01CX0NOVF9DT0RFKHgpCQkoKCh4KSAmIDB4ZikgPDwgMjQpCisjZGVmaW5lIEZMRVhDQU5fTUJfQ05UX1NSUgkJQklUKDIyKQorI2RlZmluZSBGTEVYQ0FOX01CX0NOVF9JREUJCUJJVCgyMSkKKyNkZWZpbmUgRkxFWENBTl9NQl9DTlRfUlRSCQlCSVQoMjApCisjZGVmaW5lIEZMRVhDQU5fTUJfQ05UX0xFTkdUSCh4KQkoKCh4KSAmIDB4ZikgPDwgMTYpCisjZGVmaW5lIEZMRVhDQU5fTUJfQ05UX1RJTUVTVEFNUCh4KQkoKHgpICYgMHhmZmZmKQorCisjZGVmaW5lIEZMRVhDQU5fTUJfQ09ERV9NQVNLCQkoMHhmMGZmZmZmZikKKworLyogU3RydWN0dXJlIG9mIHRoZSBtZXNzYWdlIGJ1ZmZlciAqLworc3RydWN0IGZsZXhjYW5fbWIgeworCXUzMiBjYW5fY3RybDsKKwl1MzIgY2FuX2lkOworCXUzMiBkYXRhWzJdOworfTsKKworLyogU3RydWN0dXJlIG9mIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMgKi8KK3N0cnVjdCBmbGV4Y2FuX3JlZ3MgeworCXUzMiBtY3I7CQkvKiAweDAwICovCisJdTMyIGN0cmw7CQkvKiAweDA0ICovCisJdTMyIHRpbWVyOwkJLyogMHgwOCAqLworCXUzMiBfcmVzZXJ2ZWQxOwkJLyogMHgwYyAqLworCXUzMiByeGdtYXNrOwkJLyogMHgxMCAqLworCXUzMiByeDE0bWFzazsJCS8qIDB4MTQgKi8KKwl1MzIgcngxNW1hc2s7CQkvKiAweDE4ICovCisJdTMyIGVjcjsJCS8qIDB4MWMgKi8KKwl1MzIgZXNyOwkJLyogMHgyMCAqLworCXUzMiBpbWFzazI7CQkvKiAweDI0ICovCisJdTMyIGltYXNrMTsJCS8qIDB4MjggKi8KKwl1MzIgaWZsYWcyOwkJLyogMHgyYyAqLworCXUzMiBpZmxhZzE7CQkvKiAweDMwICovCisJdTMyIF9yZXNlcnZlZDJbMTldOworCXN0cnVjdCBmbGV4Y2FuX21iIGNhbnR4ZmdbNjRdOworfTsKKworc3RydWN0IGZsZXhjYW5fcHJpdiB7CisJc3RydWN0IGNhbl9wcml2IGNhbjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOworCisJdm9pZCBfX2lvbWVtICpiYXNlOworCXUzMiByZWdfZXNyOworCXUzMiByZWdfY3RybF9kZWZhdWx0OworCisJc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBmbGV4Y2FuX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworfTsKKworc3RhdGljIHN0cnVjdCBjYW5fYml0dGltaW5nX2NvbnN0IGZsZXhjYW5fYml0dGltaW5nX2NvbnN0ID0geworCS5uYW1lID0gRFJWX05BTUUsCisJLnRzZWcxX21pbiA9IDQsCisJLnRzZWcxX21heCA9IDE2LAorCS50c2VnMl9taW4gPSAyLAorCS50c2VnMl9tYXggPSA4LAorCS5zandfbWF4ID0gNCwKKwkuYnJwX21pbiA9IDEsCisJLmJycF9tYXggPSAyNTYsCisJLmJycF9pbmMgPSAxLAorfTsKKworLyoKKyAqIFN3dGljaCB0cmFuc2NlaXZlciBvbiBvciBvZmYKKyAqLworc3RhdGljIHZvaWQgZmxleGNhbl90cmFuc2NlaXZlcl9zd2l0Y2goY29uc3Qgc3RydWN0IGZsZXhjYW5fcHJpdiAqcHJpdiwgaW50IG9uKQoreworCWlmIChwcml2LT5wZGF0YSAmJiBwcml2LT5wZGF0YS0+dHJhbnNjZWl2ZXJfc3dpdGNoKQorCQlwcml2LT5wZGF0YS0+dHJhbnNjZWl2ZXJfc3dpdGNoKG9uKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZmxleGNhbl9oYXNfYW5kX2hhbmRsZV9iZXJyKGNvbnN0IHN0cnVjdCBmbGV4Y2FuX3ByaXYgKnByaXYsCisJCQkJCSAgICAgIHUzMiByZWdfZXNyKQoreworCXJldHVybiAocHJpdi0+Y2FuLmN0cmxtb2RlICYgQ0FOX0NUUkxNT0RFX0JFUlJfUkVQT1JUSU5HKSAmJgorCQkocmVnX2VzciAmIEZMRVhDQU5fRVNSX0VSUl9CVVMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmxleGNhbl9jaGlwX2VuYWJsZShzdHJ1Y3QgZmxleGNhbl9wcml2ICpwcml2KQoreworCXN0cnVjdCBmbGV4Y2FuX3JlZ3MgX19pb21lbSAqcmVncyA9IHByaXYtPmJhc2U7CisJdTMyIHJlZzsKKworCXJlZyA9IHJlYWRsKCZyZWdzLT5tY3IpOworCXJlZyAmPSB+RkxFWENBTl9NQ1JfTURJUzsKKwl3cml0ZWwocmVnLCAmcmVncy0+bWNyKTsKKworCXVkZWxheSgxMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbGV4Y2FuX2NoaXBfZGlzYWJsZShzdHJ1Y3QgZmxleGNhbl9wcml2ICpwcml2KQoreworCXN0cnVjdCBmbGV4Y2FuX3JlZ3MgX19pb21lbSAqcmVncyA9IHByaXYtPmJhc2U7CisJdTMyIHJlZzsKKworCXJlZyA9IHJlYWRsKCZyZWdzLT5tY3IpOworCXJlZyB8PSBGTEVYQ0FOX01DUl9NRElTOworCXdyaXRlbChyZWcsICZyZWdzLT5tY3IpOworfQorCitzdGF0aWMgaW50IGZsZXhjYW5fZ2V0X2JlcnJfY291bnRlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgY2FuX2JlcnJfY291bnRlciAqYmVjKQoreworCWNvbnN0IHN0cnVjdCBmbGV4Y2FuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBmbGV4Y2FuX3JlZ3MgX19pb21lbSAqcmVncyA9IHByaXYtPmJhc2U7CisJdTMyIHJlZyA9IHJlYWRsKCZyZWdzLT5lY3IpOworCisJYmVjLT50eGVyciA9IChyZWcgPj4gMCkgJiAweGZmOworCWJlYy0+cnhlcnIgPSAocmVnID4+IDgpICYgMHhmZjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZsZXhjYW5fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWNvbnN0IHN0cnVjdCBmbGV4Y2FuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZkZXYtPnN0YXRzOworCXN0cnVjdCBmbGV4Y2FuX3JlZ3MgX19pb21lbSAqcmVncyA9IHByaXYtPmJhc2U7CisJc3RydWN0IGNhbl9mcmFtZSAqY2YgPSAoc3RydWN0IGNhbl9mcmFtZSAqKXNrYi0+ZGF0YTsKKwl1MzIgY2FuX2lkOworCXUzMiBjdHJsID0gRkxFWENBTl9NQl9DTlRfQ09ERSgweGMpIHwgKGNmLT5jYW5fZGxjIDw8IDE2KTsKKworCWlmIChjYW5fZHJvcHBlZF9pbnZhbGlkX3NrYihkZXYsIHNrYikpCisJCXJldHVybiBORVRERVZfVFhfT0s7CisKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisKKwlpZiAoY2YtPmNhbl9pZCAmIENBTl9FRkZfRkxBRykgeworCQljYW5faWQgPSBjZi0+Y2FuX2lkICYgQ0FOX0VGRl9NQVNLOworCQljdHJsIHw9IEZMRVhDQU5fTUJfQ05UX0lERSB8IEZMRVhDQU5fTUJfQ05UX1NSUjsKKwl9IGVsc2UgeworCQljYW5faWQgPSAoY2YtPmNhbl9pZCAmIENBTl9TRkZfTUFTSykgPDwgMTg7CisJfQorCisJaWYgKGNmLT5jYW5faWQgJiBDQU5fUlRSX0ZMQUcpCisJCWN0cmwgfD0gRkxFWENBTl9NQl9DTlRfUlRSOworCisJaWYgKGNmLT5jYW5fZGxjID4gMCkgeworCQl1MzIgZGF0YSA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopJmNmLT5kYXRhWzBdKTsKKwkJd3JpdGVsKGRhdGEsICZyZWdzLT5jYW50eGZnW0ZMRVhDQU5fVFhfQlVGX0lEXS5kYXRhWzBdKTsKKwl9CisJaWYgKGNmLT5jYW5fZGxjID4gMykgeworCQl1MzIgZGF0YSA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopJmNmLT5kYXRhWzRdKTsKKwkJd3JpdGVsKGRhdGEsICZyZWdzLT5jYW50eGZnW0ZMRVhDQU5fVFhfQlVGX0lEXS5kYXRhWzFdKTsKKwl9CisKKwl3cml0ZWwoY2FuX2lkLCAmcmVncy0+Y2FudHhmZ1tGTEVYQ0FOX1RYX0JVRl9JRF0uY2FuX2lkKTsKKwl3cml0ZWwoY3RybCwgJnJlZ3MtPmNhbnR4ZmdbRkxFWENBTl9UWF9CVUZfSURdLmNhbl9jdHJsKTsKKworCWtmcmVlX3NrYihza2IpOworCisJLyogdHhfcGFja2V0cyBpcyBpbmNyZW1lbnRlZCBpbiBmbGV4Y2FuX2lycSAqLworCXN0YXRzLT50eF9ieXRlcyArPSBjZi0+Y2FuX2RsYzsKKworCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKK3N0YXRpYyB2b2lkIGRvX2J1c19lcnIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICAgIHN0cnVjdCBjYW5fZnJhbWUgKmNmLCB1MzIgcmVnX2VzcikKK3sKKwlzdHJ1Y3QgZmxleGNhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgcnhfZXJyb3JzID0gMCwgdHhfZXJyb3JzID0gMDsKKworCWNmLT5jYW5faWQgfD0gQ0FOX0VSUl9QUk9UIHwgQ0FOX0VSUl9CVVNFUlJPUjsKKworCWlmIChyZWdfZXNyICYgRkxFWENBTl9FU1JfQklUMV9FUlIpIHsKKwkJZGV2X2RiZyhkZXYtPmRldi5wYXJlbnQsICJCSVQxX0VSUiBpcnFcbiIpOworCQljZi0+ZGF0YVsyXSB8PSBDQU5fRVJSX1BST1RfQklUMTsKKwkJdHhfZXJyb3JzID0gMTsKKwl9CisJaWYgKHJlZ19lc3IgJiBGTEVYQ0FOX0VTUl9CSVQwX0VSUikgeworCQlkZXZfZGJnKGRldi0+ZGV2LnBhcmVudCwgIkJJVDBfRVJSIGlycVxuIik7CisJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9CSVQwOworCQl0eF9lcnJvcnMgPSAxOworCX0KKwlpZiAocmVnX2VzciAmIEZMRVhDQU5fRVNSX0FDS19FUlIpIHsKKwkJZGV2X2RiZyhkZXYtPmRldi5wYXJlbnQsICJBQ0tfRVJSIGlycVxuIik7CisJCWNmLT5jYW5faWQgfD0gQ0FOX0VSUl9BQ0s7CisJCWNmLT5kYXRhWzNdIHw9IENBTl9FUlJfUFJPVF9MT0NfQUNLOworCQl0eF9lcnJvcnMgPSAxOworCX0KKwlpZiAocmVnX2VzciAmIEZMRVhDQU5fRVNSX0NSQ19FUlIpIHsKKwkJZGV2X2RiZyhkZXYtPmRldi5wYXJlbnQsICJDUkNfRVJSIGlycVxuIik7CisJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9CSVQ7CisJCWNmLT5kYXRhWzNdIHw9IENBTl9FUlJfUFJPVF9MT0NfQ1JDX1NFUTsKKwkJcnhfZXJyb3JzID0gMTsKKwl9CisJaWYgKHJlZ19lc3IgJiBGTEVYQ0FOX0VTUl9GUk1fRVJSKSB7CisJCWRldl9kYmcoZGV2LT5kZXYucGFyZW50LCAiRlJNX0VSUiBpcnFcbiIpOworCQljZi0+ZGF0YVsyXSB8PSBDQU5fRVJSX1BST1RfRk9STTsKKwkJcnhfZXJyb3JzID0gMTsKKwl9CisJaWYgKHJlZ19lc3IgJiBGTEVYQ0FOX0VTUl9TVEZfRVJSKSB7CisJCWRldl9kYmcoZGV2LT5kZXYucGFyZW50LCAiU1RGX0VSUiBpcnFcbiIpOworCQljZi0+ZGF0YVsyXSB8PSBDQU5fRVJSX1BST1RfU1RVRkY7CisJCXJ4X2Vycm9ycyA9IDE7CisJfQorCisJcHJpdi0+Y2FuLmNhbl9zdGF0cy5idXNfZXJyb3IrKzsKKwlpZiAocnhfZXJyb3JzKQorCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCWlmICh0eF9lcnJvcnMpCisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7Cit9CisKK3N0YXRpYyBpbnQgZmxleGNhbl9wb2xsX2J1c19lcnIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJlZ19lc3IpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgY2FuX2ZyYW1lICpjZjsKKworCXNrYiA9IGFsbG9jX2Nhbl9lcnJfc2tiKGRldiwgJmNmKTsKKwlpZiAodW5saWtlbHkoIXNrYikpCisJCXJldHVybiAwOworCisJZG9fYnVzX2VycihkZXYsIGNmLCByZWdfZXNyKTsKKwluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBjZi0+Y2FuX2RsYzsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBkb19zdGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICAgIHN0cnVjdCBjYW5fZnJhbWUgKmNmLCBlbnVtIGNhbl9zdGF0ZSBuZXdfc3RhdGUpCit7CisJc3RydWN0IGZsZXhjYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGNhbl9iZXJyX2NvdW50ZXIgYmVjOworCisJZmxleGNhbl9nZXRfYmVycl9jb3VudGVyKGRldiwgJmJlYyk7CisKKwlzd2l0Y2ggKHByaXYtPmNhbi5zdGF0ZSkgeworCWNhc2UgQ0FOX1NUQVRFX0VSUk9SX0FDVElWRToKKwkJLyoKKwkJICogZnJvbTogRVJST1JfQUNUSVZFCisJCSAqIHRvICA6IEVSUk9SX1dBUk5JTkcsIEVSUk9SX1BBU1NJVkUsIEJVU19PRkYKKwkJICogPT4gIDogdGhlcmUgd2FzIGEgd2FybmluZyBpbnQKKwkJICovCisJCWlmIChuZXdfc3RhdGUgPj0gQ0FOX1NUQVRFX0VSUk9SX1dBUk5JTkcgJiYKKwkJICAgIG5ld19zdGF0ZSA8PSBDQU5fU1RBVEVfQlVTX09GRikgeworCQkJZGV2X2RiZyhkZXYtPmRldi5wYXJlbnQsICJFcnJvciBXYXJuaW5nIElSUVxuIik7CisJCQlwcml2LT5jYW4uY2FuX3N0YXRzLmVycm9yX3dhcm5pbmcrKzsKKworCQkJY2YtPmNhbl9pZCB8PSBDQU5fRVJSX0NSVEw7CisJCQljZi0+ZGF0YVsxXSA9IChiZWMudHhlcnIgPiBiZWMucnhlcnIpID8KKwkJCQlDQU5fRVJSX0NSVExfVFhfV0FSTklORyA6CisJCQkJQ0FOX0VSUl9DUlRMX1JYX1dBUk5JTkc7CisJCX0KKwljYXNlIENBTl9TVEFURV9FUlJPUl9XQVJOSU5HOgkvKiBmYWxsdGhyb3VnaCAqLworCQkvKgorCQkgKiBmcm9tOiBFUlJPUl9BQ1RJVkUsIEVSUk9SX1dBUk5JTkcKKwkJICogdG8gIDogRVJST1JfUEFTU0lWRSwgQlVTX09GRgorCQkgKiA9PiAgOiBlcnJvciBwYXNzaXZlIGludAorCQkgKi8KKwkJaWYgKG5ld19zdGF0ZSA+PSBDQU5fU1RBVEVfRVJST1JfUEFTU0lWRSAmJgorCQkgICAgbmV3X3N0YXRlIDw9IENBTl9TVEFURV9CVVNfT0ZGKSB7CisJCQlkZXZfZGJnKGRldi0+ZGV2LnBhcmVudCwgIkVycm9yIFBhc3NpdmUgSVJRXG4iKTsKKwkJCXByaXYtPmNhbi5jYW5fc3RhdHMuZXJyb3JfcGFzc2l2ZSsrOworCisJCQljZi0+Y2FuX2lkIHw9IENBTl9FUlJfQ1JUTDsKKwkJCWNmLT5kYXRhWzFdID0gKGJlYy50eGVyciA+IGJlYy5yeGVycikgPworCQkJCUNBTl9FUlJfQ1JUTF9UWF9QQVNTSVZFIDoKKwkJCQlDQU5fRVJSX0NSVExfUlhfUEFTU0lWRTsKKwkJfQorCQlicmVhazsKKwljYXNlIENBTl9TVEFURV9CVVNfT0ZGOgorCQlkZXZfZXJyKGRldi0+ZGV2LnBhcmVudCwKKwkJCSJCVUchIGhhcmR3YXJlIHJlY292ZXJlZCBhdXRvbWF0aWNhbGx5IGZyb20gQlVTX09GRlxuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCS8qIHByb2Nlc3Mgc3RhdGUgY2hhbmdlcyBkZXBlbmRpbmcgb24gdGhlIG5ldyBzdGF0ZSAqLworCXN3aXRjaCAobmV3X3N0YXRlKSB7CisJY2FzZSBDQU5fU1RBVEVfRVJST1JfQUNUSVZFOgorCQlkZXZfZGJnKGRldi0+ZGV2LnBhcmVudCwgIkVycm9yIEFjdGl2ZVxuIik7CisJCWNmLT5jYW5faWQgfD0gQ0FOX0VSUl9QUk9UOworCQljZi0+ZGF0YVsyXSA9IENBTl9FUlJfUFJPVF9BQ1RJVkU7CisJCWJyZWFrOworCWNhc2UgQ0FOX1NUQVRFX0JVU19PRkY6CisJCWNmLT5jYW5faWQgfD0gQ0FOX0VSUl9CVVNPRkY7CisJCWNhbl9idXNfb2ZmKGRldik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBmbGV4Y2FuX3BvbGxfc3RhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJlZ19lc3IpCit7CisJc3RydWN0IGZsZXhjYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgY2FuX2ZyYW1lICpjZjsKKwllbnVtIGNhbl9zdGF0ZSBuZXdfc3RhdGU7CisJaW50IGZsdDsKKworCWZsdCA9IHJlZ19lc3IgJiBGTEVYQ0FOX0VTUl9GTFRfQ09ORl9NQVNLOworCWlmIChsaWtlbHkoZmx0ID09IEZMRVhDQU5fRVNSX0ZMVF9DT05GX0FDVElWRSkpIHsKKwkJaWYgKGxpa2VseSghKHJlZ19lc3IgJiAoRkxFWENBTl9FU1JfVFhfV1JOIHwKKwkJCQkJRkxFWENBTl9FU1JfUlhfV1JOKSkpKQorCQkJbmV3X3N0YXRlID0gQ0FOX1NUQVRFX0VSUk9SX0FDVElWRTsKKwkJZWxzZQorCQkJbmV3X3N0YXRlID0gQ0FOX1NUQVRFX0VSUk9SX1dBUk5JTkc7CisJfSBlbHNlIGlmICh1bmxpa2VseShmbHQgPT0gRkxFWENBTl9FU1JfRkxUX0NPTkZfUEFTU0lWRSkpCisJCW5ld19zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9QQVNTSVZFOworCWVsc2UKKwkJbmV3X3N0YXRlID0gQ0FOX1NUQVRFX0JVU19PRkY7CisKKwkvKiBzdGF0ZSBoYXNuJ3QgY2hhbmdlZCAqLworCWlmIChsaWtlbHkobmV3X3N0YXRlID09IHByaXYtPmNhbi5zdGF0ZSkpCisJCXJldHVybiAwOworCisJc2tiID0gYWxsb2NfY2FuX2Vycl9za2IoZGV2LCAmY2YpOworCWlmICh1bmxpa2VseSghc2tiKSkKKwkJcmV0dXJuIDA7CisKKwlkb19zdGF0ZShkZXYsIGNmLCBuZXdfc3RhdGUpOworCXByaXYtPmNhbi5zdGF0ZSA9IG5ld19zdGF0ZTsKKwluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBjZi0+Y2FuX2RsYzsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBmbGV4Y2FuX3JlYWRfZmlmbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGNhbl9mcmFtZSAqY2YpCit7CisJY29uc3Qgc3RydWN0IGZsZXhjYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGZsZXhjYW5fcmVncyBfX2lvbWVtICpyZWdzID0gcHJpdi0+YmFzZTsKKwlzdHJ1Y3QgZmxleGNhbl9tYiBfX2lvbWVtICptYiA9ICZyZWdzLT5jYW50eGZnWzBdOworCXUzMiByZWdfY3RybCwgcmVnX2lkOworCisJcmVnX2N0cmwgPSByZWFkbCgmbWItPmNhbl9jdHJsKTsKKwlyZWdfaWQgPSByZWFkbCgmbWItPmNhbl9pZCk7CisJaWYgKHJlZ19jdHJsICYgRkxFWENBTl9NQl9DTlRfSURFKQorCQljZi0+Y2FuX2lkID0gKChyZWdfaWQgPj4gMCkgJiBDQU5fRUZGX01BU0spIHwgQ0FOX0VGRl9GTEFHOworCWVsc2UKKwkJY2YtPmNhbl9pZCA9IChyZWdfaWQgPj4gMTgpICYgQ0FOX1NGRl9NQVNLOworCisJaWYgKHJlZ19jdHJsICYgRkxFWENBTl9NQl9DTlRfUlRSKQorCQljZi0+Y2FuX2lkIHw9IENBTl9SVFJfRkxBRzsKKwljZi0+Y2FuX2RsYyA9IGdldF9jYW5fZGxjKChyZWdfY3RybCA+PiAxNikgJiAweGYpOworCisJKihfX2JlMzIgKikoY2YtPmRhdGEgKyAwKSA9IGNwdV90b19iZTMyKHJlYWRsKCZtYi0+ZGF0YVswXSkpOworCSooX19iZTMyICopKGNmLT5kYXRhICsgNCkgPSBjcHVfdG9fYmUzMihyZWFkbCgmbWItPmRhdGFbMV0pKTsKKworCS8qIG1hcmsgYXMgcmVhZCAqLworCXdyaXRlbChGTEVYQ0FOX0lGTEFHX1JYX0ZJRk9fQVZBSUxBQkxFLCAmcmVncy0+aWZsYWcxKTsKKwlyZWFkbCgmcmVncy0+dGltZXIpOworfQorCitzdGF0aWMgaW50IGZsZXhjYW5fcmVhZF9mcmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZkZXYtPnN0YXRzOworCXN0cnVjdCBjYW5fZnJhbWUgKmNmOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlza2IgPSBhbGxvY19jYW5fc2tiKGRldiwgJmNmKTsKKwlpZiAodW5saWtlbHkoIXNrYikpIHsKKwkJc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKKwkJcmV0dXJuIDA7CisJfQorCisJZmxleGNhbl9yZWFkX2ZpZm8oZGV2LCBjZik7CisJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKworCXN0YXRzLT5yeF9wYWNrZXRzKys7CisJc3RhdHMtPnJ4X2J5dGVzICs9IGNmLT5jYW5fZGxjOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZmxleGNhbl9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IHF1b3RhKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLT5kZXY7CisJY29uc3Qgc3RydWN0IGZsZXhjYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGZsZXhjYW5fcmVncyBfX2lvbWVtICpyZWdzID0gcHJpdi0+YmFzZTsKKwl1MzIgcmVnX2lmbGFnMSwgcmVnX2VzcjsKKwlpbnQgd29ya19kb25lID0gMDsKKworCS8qCisJICogVGhlIGVycm9yIGJpdHMgYXJlIGNsZWFyZWQgb24gcmVhZCwKKwkgKiB1c2Ugc2F2ZWQgdmFsdWUgZnJvbSBpcnEgaGFuZGxlci4KKwkgKi8KKwlyZWdfZXNyID0gcmVhZGwoJnJlZ3MtPmVzcikgfCBwcml2LT5yZWdfZXNyOworCisJLyogaGFuZGxlIHN0YXRlIGNoYW5nZXMgKi8KKwl3b3JrX2RvbmUgKz0gZmxleGNhbl9wb2xsX3N0YXRlKGRldiwgcmVnX2Vzcik7CisKKwkvKiBoYW5kbGUgUlgtRklGTyAqLworCXJlZ19pZmxhZzEgPSByZWFkbCgmcmVncy0+aWZsYWcxKTsKKwl3aGlsZSAocmVnX2lmbGFnMSAmIEZMRVhDQU5fSUZMQUdfUlhfRklGT19BVkFJTEFCTEUgJiYKKwkgICAgICAgd29ya19kb25lIDwgcXVvdGEpIHsKKwkJd29ya19kb25lICs9IGZsZXhjYW5fcmVhZF9mcmFtZShkZXYpOworCQlyZWdfaWZsYWcxID0gcmVhZGwoJnJlZ3MtPmlmbGFnMSk7CisJfQorCisJLyogcmVwb3J0IGJ1cyBlcnJvcnMgKi8KKwlpZiAoZmxleGNhbl9oYXNfYW5kX2hhbmRsZV9iZXJyKHByaXYsIHJlZ19lc3IpICYmIHdvcmtfZG9uZSA8IHF1b3RhKQorCQl3b3JrX2RvbmUgKz0gZmxleGNhbl9wb2xsX2J1c19lcnIoZGV2LCByZWdfZXNyKTsKKworCWlmICh3b3JrX2RvbmUgPCBxdW90YSkgeworCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCQkvKiBlbmFibGUgSVJRcyAqLworCQl3cml0ZWwoRkxFWENBTl9JRkxBR19ERUZBVUxULCAmcmVncy0+aW1hc2sxKTsKKwkJd3JpdGVsKHByaXYtPnJlZ19jdHJsX2RlZmF1bHQsICZyZWdzLT5jdHJsKTsKKwl9CisKKwlyZXR1cm4gd29ya19kb25lOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZmxleGNhbl9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmRldi0+c3RhdHM7CisJc3RydWN0IGZsZXhjYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGZsZXhjYW5fcmVncyBfX2lvbWVtICpyZWdzID0gcHJpdi0+YmFzZTsKKwl1MzIgcmVnX2lmbGFnMSwgcmVnX2VzcjsKKworCXJlZ19pZmxhZzEgPSByZWFkbCgmcmVncy0+aWZsYWcxKTsKKwlyZWdfZXNyID0gcmVhZGwoJnJlZ3MtPmVzcik7CisJd3JpdGVsKEZMRVhDQU5fRVNSX0VSUl9JTlQsICZyZWdzLT5lc3IpOwkvKiBBQ0sgZXJyIElSUSAqLworCisJLyoKKwkgKiBzY2hlZHVsZSBOQVBJIGluIGNhc2Ugb2Y6CisJICogLSByeCBJUlEKKwkgKiAtIHN0YXRlIGNoYW5nZSBJUlEKKwkgKiAtIGJ1cyBlcnJvciBJUlEgYW5kIGJ1cyBlcnJvciByZXBvcnRpbmcgaXMgYWN0aXZhdGVkCisJICovCisJaWYgKChyZWdfaWZsYWcxICYgRkxFWENBTl9JRkxBR19SWF9GSUZPX0FWQUlMQUJMRSkgfHwKKwkgICAgKHJlZ19lc3IgJiBGTEVYQ0FOX0VTUl9FUlJfU1RBVEUpIHx8CisJICAgIGZsZXhjYW5faGFzX2FuZF9oYW5kbGVfYmVycihwcml2LCByZWdfZXNyKSkgeworCQkvKgorCQkgKiBUaGUgZXJyb3IgYml0cyBhcmUgY2xlYXJlZCBvbiByZWFkLAorCQkgKiBzYXZlIHRoZW0gZm9yIGxhdGVyIHVzZS4KKwkJICovCisJCXByaXYtPnJlZ19lc3IgPSByZWdfZXNyICYgRkxFWENBTl9FU1JfRVJSX0JVUzsKKwkJd3JpdGVsKEZMRVhDQU5fSUZMQUdfREVGQVVMVCAmIH5GTEVYQ0FOX0lGTEFHX1JYX0ZJRk9fQVZBSUxBQkxFLAorCQkgICAgICAgJnJlZ3MtPmltYXNrMSk7CisJCXdyaXRlbChwcml2LT5yZWdfY3RybF9kZWZhdWx0ICYgfkZMRVhDQU5fQ1RSTF9FUlJfQUxMLAorCQkgICAgICAgJnJlZ3MtPmN0cmwpOworCQluYXBpX3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKKwl9CisKKwkvKiBGSUZPIG92ZXJmbG93ICovCisJaWYgKHJlZ19pZmxhZzEgJiBGTEVYQ0FOX0lGTEFHX1JYX0ZJRk9fT1ZFUkZMT1cpIHsKKwkJd3JpdGVsKEZMRVhDQU5fSUZMQUdfUlhfRklGT19PVkVSRkxPVywgJnJlZ3MtPmlmbGFnMSk7CisJCWRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwl9CisKKwkvKiB0cmFuc21pc3Npb24gY29tcGxldGUgaW50ZXJydXB0ICovCisJaWYgKHJlZ19pZmxhZzEgJiAoMSA8PCBGTEVYQ0FOX1RYX0JVRl9JRCkpIHsKKwkJLyogdHhfYnl0ZXMgaXMgaW5jcmVtZW50ZWQgaW4gZmxleGNhbl9zdGFydF94bWl0ICovCisJCXN0YXRzLT50eF9wYWNrZXRzKys7CisJCXdyaXRlbCgoMSA8PCBGTEVYQ0FOX1RYX0JVRl9JRCksICZyZWdzLT5pZmxhZzEpOworCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBmbGV4Y2FuX3NldF9iaXR0aW1pbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwljb25zdCBzdHJ1Y3QgZmxleGNhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwljb25zdCBzdHJ1Y3QgY2FuX2JpdHRpbWluZyAqYnQgPSAmcHJpdi0+Y2FuLmJpdHRpbWluZzsKKwlzdHJ1Y3QgZmxleGNhbl9yZWdzIF9faW9tZW0gKnJlZ3MgPSBwcml2LT5iYXNlOworCXUzMiByZWc7CisKKwlyZWcgPSByZWFkbCgmcmVncy0+Y3RybCk7CisJcmVnICY9IH4oRkxFWENBTl9DVFJMX1BSRVNESVYoMHhmZikgfAorCQkgRkxFWENBTl9DVFJMX1JKVygweDMpIHwKKwkJIEZMRVhDQU5fQ1RSTF9QU0VHMSgweDcpIHwKKwkJIEZMRVhDQU5fQ1RSTF9QU0VHMigweDcpIHwKKwkJIEZMRVhDQU5fQ1RSTF9QUk9QU0VHKDB4NykgfAorCQkgRkxFWENBTl9DVFJMX0xQQiB8CisJCSBGTEVYQ0FOX0NUUkxfU01QIHwKKwkJIEZMRVhDQU5fQ1RSTF9MT00pOworCisJcmVnIHw9IEZMRVhDQU5fQ1RSTF9QUkVTRElWKGJ0LT5icnAgLSAxKSB8CisJCUZMRVhDQU5fQ1RSTF9QU0VHMShidC0+cGhhc2Vfc2VnMSAtIDEpIHwKKwkJRkxFWENBTl9DVFJMX1BTRUcyKGJ0LT5waGFzZV9zZWcyIC0gMSkgfAorCQlGTEVYQ0FOX0NUUkxfUkpXKGJ0LT5zancgLSAxKSB8CisJCUZMRVhDQU5fQ1RSTF9QUk9QU0VHKGJ0LT5wcm9wX3NlZyAtIDEpOworCisJaWYgKHByaXYtPmNhbi5jdHJsbW9kZSAmIENBTl9DVFJMTU9ERV9MT09QQkFDSykKKwkJcmVnIHw9IEZMRVhDQU5fQ1RSTF9MUEI7CisJaWYgKHByaXYtPmNhbi5jdHJsbW9kZSAmIENBTl9DVFJMTU9ERV9MSVNURU5PTkxZKQorCQlyZWcgfD0gRkxFWENBTl9DVFJMX0xPTTsKKwlpZiAocHJpdi0+Y2FuLmN0cmxtb2RlICYgQ0FOX0NUUkxNT0RFXzNfU0FNUExFUykKKwkJcmVnIHw9IEZMRVhDQU5fQ1RSTF9TTVA7CisKKwlkZXZfaW5mbyhkZXYtPmRldi5wYXJlbnQsICJ3cml0aW5nIGN0cmw9MHglMDh4XG4iLCByZWcpOworCXdyaXRlbChyZWcsICZyZWdzLT5jdHJsKTsKKworCS8qIHByaW50IGNoaXAgc3RhdHVzICovCisJZGV2X2RiZyhkZXYtPmRldi5wYXJlbnQsICIlczogbWNyPTB4JTA4eCBjdHJsPTB4JTA4eFxuIiwgX19mdW5jX18sCisJCXJlYWRsKCZyZWdzLT5tY3IpLCByZWFkbCgmcmVncy0+Y3RybCkpOworfQorCisvKgorICogZmxleGNhbl9jaGlwX3N0YXJ0CisgKgorICogdGhpcyBmdW5jdGlvbnMgaXMgZW50ZXJlZCB3aXRoIGNsb2NrcyBlbmFibGVkCisgKgorICovCitzdGF0aWMgaW50IGZsZXhjYW5fY2hpcF9zdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBmbGV4Y2FuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBmbGV4Y2FuX3JlZ3MgX19pb21lbSAqcmVncyA9IHByaXYtPmJhc2U7CisJdW5zaWduZWQgaW50IGk7CisJaW50IGVycjsKKwl1MzIgcmVnX21jciwgcmVnX2N0cmw7CisKKwkvKiBlbmFibGUgbW9kdWxlICovCisJZmxleGNhbl9jaGlwX2VuYWJsZShwcml2KTsKKworCS8qIHNvZnQgcmVzZXQgKi8KKwl3cml0ZWwoRkxFWENBTl9NQ1JfU09GVFJTVCwgJnJlZ3MtPm1jcik7CisJdWRlbGF5KDEwKTsKKworCXJlZ19tY3IgPSByZWFkbCgmcmVncy0+bWNyKTsKKwlpZiAocmVnX21jciAmIEZMRVhDQU5fTUNSX1NPRlRSU1QpIHsKKwkJZGV2X2VycihkZXYtPmRldi5wYXJlbnQsCisJCQkiRmFpbGVkIHRvIHNvZnRyZXNldCBjYW4gbW9kdWxlIChtY3I9MHglMDh4KVxuIiwKKwkJCXJlZ19tY3IpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwlmbGV4Y2FuX3NldF9iaXR0aW1pbmcoZGV2KTsKKworCS8qCisJICogTUNSCisJICoKKwkgKiBlbmFibGUgZnJlZXplCisJICogZW5hYmxlIGZpZm8KKwkgKiBoYWx0IG5vdworCSAqIG9ubHkgc3VwZXJ2aXNvciBhY2Nlc3MKKwkgKiBlbmFibGUgd2FybmluZyBpbnQKKwkgKiBjaG9vc2UgZm9ybWF0IEMKKwkgKgorCSAqLworCXJlZ19tY3IgPSByZWFkbCgmcmVncy0+bWNyKTsKKwlyZWdfbWNyIHw9IEZMRVhDQU5fTUNSX0ZSWiB8IEZMRVhDQU5fTUNSX0ZFTiB8IEZMRVhDQU5fTUNSX0hBTFQgfAorCQlGTEVYQ0FOX01DUl9TVVBWIHwgRkxFWENBTl9NQ1JfV1JOX0VOIHwKKwkJRkxFWENBTl9NQ1JfSURBTV9DOworCWRldl9kYmcoZGV2LT5kZXYucGFyZW50LCAiJXM6IHdyaXRpbmcgbWNyPTB4JTA4eCIsIF9fZnVuY19fLCByZWdfbWNyKTsKKwl3cml0ZWwocmVnX21jciwgJnJlZ3MtPm1jcik7CisKKwkvKgorCSAqIENUUkwKKwkgKgorCSAqIGRpc2FibGUgdGltZXIgc3luYyBmZWF0dXJlCisJICoKKwkgKiBkaXNhYmxlIGF1dG8gYnVzb2ZmIHJlY292ZXJ5CisJICogdHJhbnNtaXQgbG93ZXN0IGJ1ZmZlciBmaXJzdAorCSAqCisJICogZW5hYmxlIHR4IGFuZCByeCB3YXJuaW5nIGludGVycnVwdAorCSAqIGVuYWJsZSBidXMgb2ZmIGludGVycnVwdAorCSAqICg9PSBGTEVYQ0FOX0NUUkxfRVJSX1NUQVRFKQorCSAqCisJICogX25vdGVfOiB3ZSBlbmFibGUgdGhlICJlcnJvciBpbnRlcnJ1cHQiCisJICogKEZMRVhDQU5fQ1RSTF9FUlJfTVNLKSwgdG9vLiBPdGhlcndpc2Ugd2UgZG9uJ3QgZ2V0IGFueQorCSAqIHdhcm5pbmcgb3IgYnVzIHBhc3NpdmUgaW50ZXJydXB0cy4KKwkgKi8KKwlyZWdfY3RybCA9IHJlYWRsKCZyZWdzLT5jdHJsKTsKKwlyZWdfY3RybCAmPSB+RkxFWENBTl9DVFJMX1RTWU47CisJcmVnX2N0cmwgfD0gRkxFWENBTl9DVFJMX0JPRkZfUkVDIHwgRkxFWENBTl9DVFJMX0xCVUYgfAorCQlGTEVYQ0FOX0NUUkxfRVJSX1NUQVRFIHwgRkxFWENBTl9DVFJMX0VSUl9NU0s7CisKKwkvKiBzYXZlIGZvciBsYXRlciB1c2UgKi8KKwlwcml2LT5yZWdfY3RybF9kZWZhdWx0ID0gcmVnX2N0cmw7CisJZGV2X2RiZyhkZXYtPmRldi5wYXJlbnQsICIlczogd3JpdGluZyBjdHJsPTB4JTA4eCIsIF9fZnVuY19fLCByZWdfY3RybCk7CisJd3JpdGVsKHJlZ19jdHJsLCAmcmVncy0+Y3RybCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWdzLT5jYW50eGZnKTsgaSsrKSB7CisJCXdyaXRlbCgwLCAmcmVncy0+Y2FudHhmZ1tpXS5jYW5fY3RybCk7CisJCXdyaXRlbCgwLCAmcmVncy0+Y2FudHhmZ1tpXS5jYW5faWQpOworCQl3cml0ZWwoMCwgJnJlZ3MtPmNhbnR4ZmdbaV0uZGF0YVswXSk7CisJCXdyaXRlbCgwLCAmcmVncy0+Y2FudHhmZ1tpXS5kYXRhWzFdKTsKKworCQkvKiBwdXQgTUIgaW50byByeCBxdWV1ZSAqLworCQl3cml0ZWwoRkxFWENBTl9NQl9DTlRfQ09ERSgweDQpLCAmcmVncy0+Y2FudHhmZ1tpXS5jYW5fY3RybCk7CisJfQorCisJLyogYWNjZXB0YW5jZSBtYXNrL2FjY2VwdGFuY2UgY29kZSAoYWNjZXB0IGV2ZXJ5dGhpbmcpICovCisJd3JpdGVsKDB4MCwgJnJlZ3MtPnJ4Z21hc2spOworCXdyaXRlbCgweDAsICZyZWdzLT5yeDE0bWFzayk7CisJd3JpdGVsKDB4MCwgJnJlZ3MtPnJ4MTVtYXNrKTsKKworCWZsZXhjYW5fdHJhbnNjZWl2ZXJfc3dpdGNoKHByaXYsIDEpOworCisJLyogc3luY2hyb25pemUgd2l0aCB0aGUgY2FuIGJ1cyAqLworCXJlZ19tY3IgPSByZWFkbCgmcmVncy0+bWNyKTsKKwlyZWdfbWNyICY9IH5GTEVYQ0FOX01DUl9IQUxUOworCXdyaXRlbChyZWdfbWNyLCAmcmVncy0+bWNyKTsKKworCXByaXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9BQ1RJVkU7CisKKwkvKiBlbmFibGUgRklGTyBpbnRlcnJ1cHRzICovCisJd3JpdGVsKEZMRVhDQU5fSUZMQUdfREVGQVVMVCwgJnJlZ3MtPmltYXNrMSk7CisKKwkvKiBwcmludCBjaGlwIHN0YXR1cyAqLworCWRldl9kYmcoZGV2LT5kZXYucGFyZW50LCAiJXM6IHJlYWRpbmcgbWNyPTB4JTA4eCBjdHJsPTB4JTA4eFxuIiwKKwkJX19mdW5jX18sIHJlYWRsKCZyZWdzLT5tY3IpLCByZWFkbCgmcmVncy0+Y3RybCkpOworCisJcmV0dXJuIDA7CisKKyBvdXQ6CisJZmxleGNhbl9jaGlwX2Rpc2FibGUocHJpdik7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIGZsZXhjYW5fY2hpcF9zdG9wCisgKgorICogdGhpcyBmdW5jdGlvbnMgaXMgZW50ZXJlZCB3aXRoIGNsb2NrcyBlbmFibGVkCisgKgorICovCitzdGF0aWMgdm9pZCBmbGV4Y2FuX2NoaXBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBmbGV4Y2FuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBmbGV4Y2FuX3JlZ3MgX19pb21lbSAqcmVncyA9IHByaXYtPmJhc2U7CisJdTMyIHJlZzsKKworCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KKwl3cml0ZWwoMCwgJnJlZ3MtPmltYXNrMSk7CisKKwkvKiBEaXNhYmxlICsgaGFsdCBtb2R1bGUgKi8KKwlyZWcgPSByZWFkbCgmcmVncy0+bWNyKTsKKwlyZWcgfD0gRkxFWENBTl9NQ1JfTURJUyB8IEZMRVhDQU5fTUNSX0hBTFQ7CisJd3JpdGVsKHJlZywgJnJlZ3MtPm1jcik7CisKKwlmbGV4Y2FuX3RyYW5zY2VpdmVyX3N3aXRjaChwcml2LCAwKTsKKwlwcml2LT5jYW4uc3RhdGUgPSBDQU5fU1RBVEVfU1RPUFBFRDsKKworCXJldHVybjsKK30KKworc3RhdGljIGludCBmbGV4Y2FuX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmxleGNhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZXJyOworCisJY2xrX2VuYWJsZShwcml2LT5jbGspOworCisJZXJyID0gb3Blbl9jYW5kZXYoZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWVyciA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBmbGV4Y2FuX2lycSwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9jbG9zZTsKKworCS8qIHN0YXJ0IGNoaXAgYW5kIHF1ZXVpbmcgKi8KKwllcnIgPSBmbGV4Y2FuX2NoaXBfc3RhcnQoZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9jbG9zZTsKKwluYXBpX2VuYWJsZSgmcHJpdi0+bmFwaSk7CisJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKworCXJldHVybiAwOworCisgb3V0X2Nsb3NlOgorCWNsb3NlX2NhbmRldihkZXYpOworIG91dDoKKwljbGtfZGlzYWJsZShwcml2LT5jbGspOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBmbGV4Y2FuX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZsZXhjYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJbmFwaV9kaXNhYmxlKCZwcml2LT5uYXBpKTsKKwlmbGV4Y2FuX2NoaXBfc3RvcChkZXYpOworCisJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJY2xrX2Rpc2FibGUocHJpdi0+Y2xrKTsKKworCWNsb3NlX2NhbmRldihkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmxleGNhbl9zZXRfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIGNhbl9tb2RlIG1vZGUpCit7CisJaW50IGVycjsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQ0FOX01PREVfU1RBUlQ6CisJCWVyciA9IGZsZXhjYW5fY2hpcF9zdGFydChkZXYpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGZsZXhjYW5fbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JPSBmbGV4Y2FuX29wZW4sCisJLm5kb19zdG9wCT0gZmxleGNhbl9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJPSBmbGV4Y2FuX3N0YXJ0X3htaXQsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCByZWdpc3Rlcl9mbGV4Y2FuZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZsZXhjYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGZsZXhjYW5fcmVncyBfX2lvbWVtICpyZWdzID0gcHJpdi0+YmFzZTsKKwl1MzIgcmVnLCBlcnI7CisKKwljbGtfZW5hYmxlKHByaXYtPmNsayk7CisKKwkvKiBzZWxlY3QgImJ1cyBjbG9jayIsIGNoaXAgbXVzdCBiZSBkaXNhYmxlZCAqLworCWZsZXhjYW5fY2hpcF9kaXNhYmxlKHByaXYpOworCXJlZyA9IHJlYWRsKCZyZWdzLT5jdHJsKTsKKwlyZWcgfD0gRkxFWENBTl9DVFJMX0NMS19TUkM7CisJd3JpdGVsKHJlZywgJnJlZ3MtPmN0cmwpOworCisJZmxleGNhbl9jaGlwX2VuYWJsZShwcml2KTsKKworCS8qIHNldCBmcmVlemUsIGhhbHQgYW5kIGFjdGl2YXRlIEZJRk8sIHJlc3RyaWN0IHJlZ2lzdGVyIGFjY2VzcyAqLworCXJlZyA9IHJlYWRsKCZyZWdzLT5tY3IpOworCXJlZyB8PSBGTEVYQ0FOX01DUl9GUlogfCBGTEVYQ0FOX01DUl9IQUxUIHwKKwkJRkxFWENBTl9NQ1JfRkVOIHwgRkxFWENBTl9NQ1JfU1VQVjsKKwl3cml0ZWwocmVnLCAmcmVncy0+bWNyKTsKKworCS8qCisJICogQ3VycmVudGx5IHdlIG9ubHkgc3VwcG9ydCBuZXdlciB2ZXJzaW9ucyBvZiB0aGlzIGNvcmUKKwkgKiBmZWF0dXJpbmcgYSBSWCBGSUZPLiBPbGRlciBjb3JlcyBmb3VuZCBvbiBzb21lIENvbGRmaXJlCisJICogZGVyaXZhdGVzIGFyZSBub3QgeWV0IHN1cHBvcnRlZC4KKwkgKi8KKwlyZWcgPSByZWFkbCgmcmVncy0+bWNyKTsKKwlpZiAoIShyZWcgJiBGTEVYQ0FOX01DUl9GRU4pKSB7CisJCWRldl9lcnIoZGV2LT5kZXYucGFyZW50LAorCQkJIkNvdWxkIG5vdCBlbmFibGUgUlggRklGTywgdW5zdXBwb3J0ZWQgY29yZVxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IHJlZ2lzdGVyX2NhbmRldihkZXYpOworCisgb3V0OgorCS8qIGRpc2FibGUgY29yZSBhbmQgdHVybiBvZmYgY2xvY2tzICovCisJZmxleGNhbl9jaGlwX2Rpc2FibGUocHJpdik7CisJY2xrX2Rpc2FibGUocHJpdi0+Y2xrKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCB1bnJlZ2lzdGVyX2ZsZXhjYW5kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnJlZ2lzdGVyX2NhbmRldihkZXYpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBmbGV4Y2FuX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZmxleGNhbl9wcml2ICpwcml2OworCXN0cnVjdCByZXNvdXJjZSAqbWVtOworCXN0cnVjdCBjbGsgKmNsazsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJcmVzb3VyY2Vfc2l6ZV90IG1lbV9zaXplOworCWludCBlcnIsIGlycTsKKworCWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihjbGspKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIGNsb2NrIGRlZmluZWRcbiIpOworCQllcnIgPSBQVFJfRVJSKGNsayk7CisJCWdvdG8gZmFpbGVkX2Nsb2NrOworCX0KKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoIW1lbSB8fCBpcnEgPD0gMCkgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGZhaWxlZF9nZXQ7CisJfQorCisJbWVtX3NpemUgPSByZXNvdXJjZV9zaXplKG1lbSk7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24obWVtLT5zdGFydCwgbWVtX3NpemUsIHBkZXYtPm5hbWUpKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBmYWlsZWRfcmVxOworCX0KKworCWJhc2UgPSBpb3JlbWFwKG1lbS0+c3RhcnQsIG1lbV9zaXplKTsKKwlpZiAoIWJhc2UpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsZWRfbWFwOworCX0KKworCWRldiA9IGFsbG9jX2NhbmRldihzaXplb2Yoc3RydWN0IGZsZXhjYW5fcHJpdiksIDApOworCWlmICghZGV2KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbGVkX2FsbG9jOworCX0KKworCWRldi0+bmV0ZGV2X29wcyA9ICZmbGV4Y2FuX25ldGRldl9vcHM7CisJZGV2LT5pcnEgPSBpcnE7CisJZGV2LT5mbGFncyB8PSBJRkZfRUNITzsgLyogd2Ugc3VwcG9ydCBsb2NhbCBlY2hvIGluIGhhcmR3YXJlICovCisKKwlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlwcml2LT5jYW4uY2xvY2suZnJlcSA9IGNsa19nZXRfcmF0ZShjbGspOworCXByaXYtPmNhbi5iaXR0aW1pbmdfY29uc3QgPSAmZmxleGNhbl9iaXR0aW1pbmdfY29uc3Q7CisJcHJpdi0+Y2FuLmRvX3NldF9tb2RlID0gZmxleGNhbl9zZXRfbW9kZTsKKwlwcml2LT5jYW4uZG9fZ2V0X2JlcnJfY291bnRlciA9IGZsZXhjYW5fZ2V0X2JlcnJfY291bnRlcjsKKwlwcml2LT5jYW4uY3RybG1vZGVfc3VwcG9ydGVkID0gQ0FOX0NUUkxNT0RFX0xPT1BCQUNLIHwKKwkJQ0FOX0NUUkxNT0RFX0xJU1RFTk9OTFkJfCBDQU5fQ1RSTE1PREVfM19TQU1QTEVTIHwKKwkJQ0FOX0NUUkxNT0RFX0JFUlJfUkVQT1JUSU5HOworCXByaXYtPmJhc2UgPSBiYXNlOworCXByaXYtPmRldiA9IGRldjsKKwlwcml2LT5jbGsgPSBjbGs7CisJcHJpdi0+cGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCW5ldGlmX25hcGlfYWRkKGRldiwgJnByaXYtPm5hcGksIGZsZXhjYW5fcG9sbCwgRkxFWENBTl9OQVBJX1dFSUdIVCk7CisKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgZGV2KTsKKwlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOworCisJZXJyID0gcmVnaXN0ZXJfZmxleGNhbmRldihkZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVnaXN0ZXJpbmcgbmV0ZGV2IGZhaWxlZFxuIik7CisJCWdvdG8gZmFpbGVkX3JlZ2lzdGVyOworCX0KKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJkZXZpY2UgcmVnaXN0ZXJlZCAocmVnX2Jhc2U9JXAsIGlycT0lZClcbiIsCisJCSBwcml2LT5iYXNlLCBkZXYtPmlycSk7CisKKwlyZXR1cm4gMDsKKworIGZhaWxlZF9yZWdpc3RlcjoKKwlmcmVlX2NhbmRldihkZXYpOworIGZhaWxlZF9hbGxvYzoKKwlpb3VubWFwKGJhc2UpOworIGZhaWxlZF9tYXA6CisJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIG1lbV9zaXplKTsKKyBmYWlsZWRfcmVxOgorCWNsa19wdXQoY2xrKTsKKyBmYWlsZWRfZ2V0OgorIGZhaWxlZF9jbG9jazoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBmbGV4Y2FuX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZmxleGNhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKworCXVucmVnaXN0ZXJfZmxleGNhbmRldihkZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWZyZWVfY2FuZGV2KGRldik7CisJaW91bm1hcChwcml2LT5iYXNlKTsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSk7CisKKwljbGtfcHV0KHByaXYtPmNsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZmxleGNhbl9kcml2ZXIgPSB7CisJLmRyaXZlci5uYW1lID0gRFJWX05BTUUsCisJLnByb2JlID0gZmxleGNhbl9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoZmxleGNhbl9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZmxleGNhbl9pbml0KHZvaWQpCit7CisJcHJfaW5mbygiJXMgbmV0ZGV2aWNlIGRyaXZlclxuIiwgRFJWX05BTUUpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmZsZXhjYW5fZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGZsZXhjYW5fZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZmbGV4Y2FuX2RyaXZlcik7CisJcHJfaW5mbygiJXM6IGRyaXZlciByZW1vdmVkXG4iLCBEUlZfTkFNRSk7Cit9CisKK21vZHVsZV9pbml0KGZsZXhjYW5faW5pdCk7Cittb2R1bGVfZXhpdChmbGV4Y2FuX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJTYXNjaGEgSGF1ZXIgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4sICIKKwkgICAgICAiTWFyYyBLbGVpbmUtQnVkZGUgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ0FOIHBvcnQgZHJpdmVyIGZvciBmbGV4Y2FuIGJhc2VkIGNoaXAiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9tc2Nhbi5oIGIvZHJpdmVycy9uZXQvY2FuL21zY2FuL21zY2FuLmgKaW5kZXggNGZmOTY2NC4uYjQzZTlmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL21zY2FuL21zY2FuLmgKKysrIGIvZHJpdmVycy9uZXQvY2FuL21zY2FuL21zY2FuLmgKQEAgLTIyNyw3ICsyMjcsNyBAQAogCQl1MTYgdGltZTsJCQkvKiArIDB4N2MgICAgIDB4M2UgKi8KIAl9IHR4OwogCV9NU0NBTl9SRVNFUlZFRF8oMzIsIDIpOwkJLyogKyAweDdlICAgICAgICAgICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICN1bmRlZiBfTVNDQU5fUkVTRVJWRURfCiAjZGVmaW5lIE1TQ0FOX1JFR0lPTiAJc2l6ZW9mKHN0cnVjdCBtc2NhbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZwppbmRleCA5N2ZmNmZlLi4wNDUyNTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnCkBAIC03LDQgKzcsMTAgQEAKIAkgIFRoaXMgZHJpdmVyIGlzIGZvciB0aGUgb25lIGNoYW5uZWwgQ1BDLVVTQi9BUk03IENBTi9VU0IgaW50ZXJmYWNlCiAJICBmcm9tIEVNUyBEci4gVGhvbWFzIFd1ZW5zY2hlIChodHRwOi8vd3d3LmVtcy13dWVuc2NoZS5kZSkuCiAKK2NvbmZpZyBDQU5fRVNEX1VTQjIKKyAgICAgICAgdHJpc3RhdGUgIkVTRCBVU0IvMiBDQU4vVVNCIGludGVyZmFjZSIKKyAgICAgICAgLS0taGVscC0tLQorICAgICAgICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBDQU4tVVNCLzIgaW50ZXJmYWNlCisgICAgICAgICAgZnJvbSBlc2QgZWxlY3Ryb25pYyBzeXN0ZW0gZGVzaWduIGdtYmggKGh0dHA6Ly93d3cuZXNkLmV1KS4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3VzYi9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvTWFrZWZpbGUKaW5kZXggMGFmZDUxZC4uZmNlM2NmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9jYW4vdXNiL01ha2VmaWxlCkBAIC0zLDUgKzMsNiBAQAogIwogCiBvYmotJChDT05GSUdfQ0FOX0VNU19VU0IpICs9IGVtc191c2Iubworb2JqLSQoQ09ORklHX0NBTl9FU0RfVVNCMikgKz0gZXNkX3VzYjIubwogCiBjY2ZsYWdzLSQoQ09ORklHX0NBTl9ERUJVR19ERVZJQ0VTKSA6PSAtRERFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vdXNiL2Vtc191c2IuYyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvZW1zX3VzYi5jCmluZGV4IDFmYzA4NzEuLmU3NWYxYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvZW1zX3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvZW1zX3VzYi5jCkBAIC0xOTcsNyArMTk3LDcgQEAKIH07CiAKIC8qIE1haW4gbWVzc2FnZSB0eXBlIHVzZWQgYmV0d2VlbiBsaWJyYXJ5IGFuZCBhcHBsaWNhdGlvbiAqLwotc3RydWN0IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBlbXNfY3BjX21zZyB7CitzdHJ1Y3QgX19wYWNrZWQgZW1zX2NwY19tc2cgewogCXU4IHR5cGU7CS8qIHR5cGUgb2YgbWVzc2FnZSAqLwogCXU4IGxlbmd0aDsJLyogbGVuZ3RoIG9mIGRhdGEgd2l0aGluIHVuaW9uICdtc2cnICovCiAJdTggbXNnaWQ7CS8qIGNvbmZpcm1hdGlvbiBoYW5kbGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvZXNkX3VzYjIuYyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvZXNkX3VzYjIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWE1Mjc1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9lc2RfdXNiMi5jCkBAIC0wLDAgKzEsMTEzMiBAQAorLyoKKyAqIENBTiBkcml2ZXIgZm9yIGVzZCBDQU4tVVNCLzIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTWF0dGhpYXMgRnVjaHMgPG1hdHRoaWFzLmZ1Y2hzQGVzZC5ldT4sIGVzZCBnbWJoCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSA8bGludXgvY2FuLmg+CisjaW5jbHVkZSA8bGludXgvY2FuL2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nhbi9lcnJvci5oPgorCitNT0RVTEVfQVVUSE9SKCJNYXR0aGlhcyBGdWNocyA8bWF0dGhpYXMuZnVjaHNAZXNkLmV1PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDQU4gZHJpdmVyIGZvciBlc2QgQ0FOLVVTQi8yIGludGVyZmFjZXMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKKworLyogRGVmaW5lIHRoZXNlIHZhbHVlcyB0byBtYXRjaCB5b3VyIGRldmljZXMgKi8KKyNkZWZpbmUgVVNCX0VTREdNQkhfVkVORE9SX0lECTB4MGFiNAorI2RlZmluZSBVU0JfQ0FOVVNCMl9QUk9EVUNUX0lECTB4MDAxMAorCisjZGVmaW5lIEVTRF9VU0IyX0NBTl9DTE9DSwk2MDAwMDAwMAorI2RlZmluZSBFU0RfVVNCMl9NQVhfTkVUUwkyCisKKy8qIFVTQjIgY29tbWFuZHMgKi8KKyNkZWZpbmUgQ01EX1ZFUlNJT04JCTEgLyogYWxzbyB1c2VkIGZvciBWRVJTSU9OX1JFUExZICovCisjZGVmaW5lIENNRF9DQU5fUlgJCTIgLyogZGV2aWNlIHRvIGhvc3Qgb25seSAqLworI2RlZmluZSBDTURfQ0FOX1RYCQkzIC8qIGFsc28gdXNlZCBmb3IgVFhfRE9ORSAqLworI2RlZmluZSBDTURfU0VUQkFVRAkJNCAvKiBhbHNvIHVzZWQgZm9yIFNFVEJBVURfUkVQTFkgKi8KKyNkZWZpbmUgQ01EX1RTCQkJNSAvKiBhbHNvIHVzZWQgZm9yIFRTX1JFUExZICovCisjZGVmaW5lIENNRF9JREFERAkJNiAvKiBhbHNvIHVzZWQgZm9yIElEQUREX1JFUExZICovCisKKy8qIGVzZCBDQU4gbWVzc2FnZSBmbGFncyAtIGRsYyBmaWVsZCAqLworI2RlZmluZSBFU0RfUlRSCQkJMHgxMAorCisvKiBlc2QgQ0FOIG1lc3NhZ2UgZmxhZ3MgLSBpZCBmaWVsZCAqLworI2RlZmluZSBFU0RfRVhUSUQJCTB4MjAwMDAwMDAKKyNkZWZpbmUgRVNEX0VWRU5UCQkweDQwMDAwMDAwCisjZGVmaW5lIEVTRF9JRE1BU0sJCTB4MWZmZmZmZmYKKworLyogZXNkIENBTiBldmVudCBpZHMgdXNlZCBieSB0aGlzIGRyaXZlciAqLworI2RlZmluZSBFU0RfRVZfQ0FOX0VSUk9SX0VYVAkyCisKKy8qIGJhdWRyYXRlIG1lc3NhZ2UgZmxhZ3MgKi8KKyNkZWZpbmUgRVNEX1VTQjJfVUJSCQkweDgwMDAwMDAwCisjZGVmaW5lIEVTRF9VU0IyX0xPTQkJMHg0MDAwMDAwMAorI2RlZmluZSBFU0RfVVNCMl9OT19CQVVEUkFURQkweDdmZmZmZmZmCisjZGVmaW5lIEVTRF9VU0IyX1RTRUcxX01JTgkxCisjZGVmaW5lIEVTRF9VU0IyX1RTRUcxX01BWAkxNgorI2RlZmluZSBFU0RfVVNCMl9UU0VHMV9TSElGVAkxNgorI2RlZmluZSBFU0RfVVNCMl9UU0VHMl9NSU4JMQorI2RlZmluZSBFU0RfVVNCMl9UU0VHMl9NQVgJOAorI2RlZmluZSBFU0RfVVNCMl9UU0VHMl9TSElGVAkyMAorI2RlZmluZSBFU0RfVVNCMl9TSldfTUFYCTQKKyNkZWZpbmUgRVNEX1VTQjJfU0pXX1NISUZUCTE0CisjZGVmaW5lIEVTRF9VU0IyX0JSUF9NSU4JMQorI2RlZmluZSBFU0RfVVNCMl9CUlBfTUFYCTEwMjQKKyNkZWZpbmUgRVNEX1VTQjJfQlJQX0lOQwkxCisjZGVmaW5lIEVTRF9VU0IyXzNfU0FNUExFUwkweDAwODAwMDAwCisKKy8qIGVzZCBJREFERCBtZXNzYWdlICovCisjZGVmaW5lIEVTRF9JRF9FTkFCTEUJCTB4ODAKKyNkZWZpbmUgRVNEX01BWF9JRF9TRUdNRU5UCTY0CisKKy8qIFNKQTEwMDAgRUNDIHJlZ2lzdGVyIChlbXVsYXRlZCBieSB1c2IyIGZpcm13YXJlKSAqLworI2RlZmluZSBTSkExMDAwX0VDQ19TRUcJCTB4MUYKKyNkZWZpbmUgU0pBMTAwMF9FQ0NfRElSCQkweDIwCisjZGVmaW5lIFNKQTEwMDBfRUNDX0VSUgkJMHgwNgorI2RlZmluZSBTSkExMDAwX0VDQ19CSVQJCTB4MDAKKyNkZWZpbmUgU0pBMTAwMF9FQ0NfRk9STQkweDQwCisjZGVmaW5lIFNKQTEwMDBfRUNDX1NUVUZGCTB4ODAKKyNkZWZpbmUgU0pBMTAwMF9FQ0NfTUFTSwkweGMwCisKKy8qIGVzZCBidXMgc3RhdGUgZXZlbnQgY29kZXMgKi8KKyNkZWZpbmUgRVNEX0JVU1NUQVRFX01BU0sJMHhjMAorI2RlZmluZSBFU0RfQlVTU1RBVEVfV0FSTgkweDQwCisjZGVmaW5lIEVTRF9CVVNTVEFURV9FUlJQQVNTSVZFCTB4ODAKKyNkZWZpbmUgRVNEX0JVU1NUQVRFX0JVU09GRgkweGMwCisKKyNkZWZpbmUgUlhfQlVGRkVSX1NJWkUJCTEwMjQKKyNkZWZpbmUgTUFYX1JYX1VSQlMJCTQKKyNkZWZpbmUgTUFYX1RYX1VSQlMJCTE2IC8qIG11c3QgYmUgcG93ZXIgb2YgMiAqLworCitzdHJ1Y3QgaGVhZGVyX21zZyB7CisJdTggbGVuOyAvKiBsZW4gaXMgYWx3YXlzIHRoZSB0b3RhbCBtZXNzYWdlIGxlbmd0aCBpbiAzMmJpdCB3b3JkcyAqLworCXU4IGNtZDsKKwl1OCByc3ZkWzJdOworfTsKKworc3RydWN0IHZlcnNpb25fbXNnIHsKKwl1OCBsZW47CisJdTggY21kOworCXU4IHJzdmQ7CisJdTggZmxhZ3M7CisJX19sZTMyIGRydl92ZXJzaW9uOworfTsKKworc3RydWN0IHZlcnNpb25fcmVwbHlfbXNnIHsKKwl1OCBsZW47CisJdTggY21kOworCXU4IG5ldHM7CisJdTggZmVhdHVyZXM7CisJX19sZTMyIHZlcnNpb247CisJdTggbmFtZVsxNl07CisJX19sZTMyIHJzdmQ7CisJX19sZTMyIHRzOworfTsKKworc3RydWN0IHJ4X21zZyB7CisJdTggbGVuOworCXU4IGNtZDsKKwl1OCBuZXQ7CisJdTggZGxjOworCV9fbGUzMiB0czsKKwlfX2xlMzIgaWQ7IC8qIHVwcGVyIDMgYml0cyBjb250YWluIGZsYWdzICovCisJdTggZGF0YVs4XTsKK307CisKK3N0cnVjdCB0eF9tc2cgeworCXU4IGxlbjsKKwl1OCBjbWQ7CisJdTggbmV0OworCXU4IGRsYzsKKwlfX2xlMzIgaG5kOworCV9fbGUzMiBpZDsgLyogdXBwZXIgMyBiaXRzIGNvbnRhaW4gZmxhZ3MgKi8KKwl1OCBkYXRhWzhdOworfTsKKworc3RydWN0IHR4X2RvbmVfbXNnIHsKKwl1OCBsZW47CisJdTggY21kOworCXU4IG5ldDsKKwl1OCBzdGF0dXM7CisJX19sZTMyIGhuZDsKKwlfX2xlMzIgdHM7Cit9OworCitzdHJ1Y3QgaWRfZmlsdGVyX21zZyB7CisJdTggbGVuOworCXU4IGNtZDsKKwl1OCBuZXQ7CisJdTggb3B0aW9uOworCV9fbGUzMiBtYXNrW0VTRF9NQVhfSURfU0VHTUVOVCArIDFdOworfTsKKworc3RydWN0IHNldF9iYXVkcmF0ZV9tc2cgeworCXU4IGxlbjsKKwl1OCBjbWQ7CisJdTggbmV0OworCXU4IHJzdmQ7CisJX19sZTMyIGJhdWQ7Cit9OworCisvKiBNYWluIG1lc3NhZ2UgdHlwZSB1c2VkIGJldHdlZW4gbGlicmFyeSBhbmQgYXBwbGljYXRpb24gKi8KK3N0cnVjdCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgZXNkX3VzYjJfbXNnIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBoZWFkZXJfbXNnIGhkcjsKKwkJc3RydWN0IHZlcnNpb25fbXNnIHZlcnNpb247CisJCXN0cnVjdCB2ZXJzaW9uX3JlcGx5X21zZyB2ZXJzaW9uX3JlcGx5OworCQlzdHJ1Y3QgcnhfbXNnIHJ4OworCQlzdHJ1Y3QgdHhfbXNnIHR4OworCQlzdHJ1Y3QgdHhfZG9uZV9tc2cgdHhkb25lOworCQlzdHJ1Y3Qgc2V0X2JhdWRyYXRlX21zZyBzZXRiYXVkOworCQlzdHJ1Y3QgaWRfZmlsdGVyX21zZyBmaWx0ZXI7CisJfSBtc2c7Cit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZXNkX3VzYjJfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRShVU0JfRVNER01CSF9WRU5ET1JfSUQsIFVTQl9DQU5VU0IyX1BST0RVQ1RfSUQpfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBlc2RfdXNiMl90YWJsZSk7CisKK3N0cnVjdCBlc2RfdXNiMl9uZXRfcHJpdjsKKworc3RydWN0IGVzZF90eF91cmJfY29udGV4dCB7CisJc3RydWN0IGVzZF91c2IyX25ldF9wcml2ICpwcml2OworCXUzMiBlY2hvX2luZGV4OworCWludCBkbGM7Cit9OworCitzdHJ1Y3QgZXNkX3VzYjIgeworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXN0cnVjdCBlc2RfdXNiMl9uZXRfcHJpdiAqbmV0c1tFU0RfVVNCMl9NQVhfTkVUU107CisKKwlzdHJ1Y3QgdXNiX2FuY2hvciByeF9zdWJtaXR0ZWQ7CisKKwlpbnQgbmV0X2NvdW50OworCXUzMiB2ZXJzaW9uOworCWludCByeGluaXRkb25lOworfTsKKworc3RydWN0IGVzZF91c2IyX25ldF9wcml2IHsKKwlzdHJ1Y3QgY2FuX3ByaXYgY2FuOyAvKiBtdXN0IGJlIHRoZSBmaXJzdCBtZW1iZXIgKi8KKworCWF0b21pY190IGFjdGl2ZV90eF9qb2JzOworCXN0cnVjdCB1c2JfYW5jaG9yIHR4X3N1Ym1pdHRlZDsKKwlzdHJ1Y3QgZXNkX3R4X3VyYl9jb250ZXh0IHR4X2NvbnRleHRzW01BWF9UWF9VUkJTXTsKKworCWludCBvcGVuX3RpbWU7CisJc3RydWN0IGVzZF91c2IyICp1c2IyOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJaW50IGluZGV4OworCXU4IG9sZF9zdGF0ZTsKKwlzdHJ1Y3QgY2FuX2JlcnJfY291bnRlciBiZWM7Cit9OworCitzdGF0aWMgdm9pZCBlc2RfdXNiMl9yeF9ldmVudChzdHJ1Y3QgZXNkX3VzYjJfbmV0X3ByaXYgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgZXNkX3VzYjJfbXNnICptc2cpCit7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPm5ldGRldi0+c3RhdHM7CisJc3RydWN0IGNhbl9mcmFtZSAqY2Y7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MzIgaWQgPSBsZTMyX3RvX2NwdShtc2ctPm1zZy5yeC5pZCkgJiBFU0RfSURNQVNLOworCisJaWYgKGlkID09IEVTRF9FVl9DQU5fRVJST1JfRVhUKSB7CisJCXU4IHN0YXRlID0gbXNnLT5tc2cucnguZGF0YVswXTsKKwkJdTggZWNjID0gbXNnLT5tc2cucnguZGF0YVsxXTsKKwkJdTggdHhlcnIgPSBtc2ctPm1zZy5yeC5kYXRhWzJdOworCQl1OCByeGVyciA9IG1zZy0+bXNnLnJ4LmRhdGFbM107CisKKwkJc2tiID0gYWxsb2NfY2FuX2Vycl9za2IocHJpdi0+bmV0ZGV2LCAmY2YpOworCQlpZiAoc2tiID09IE5VTEwpIHsKKwkJCXN0YXRzLT5yeF9kcm9wcGVkKys7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAoc3RhdGUgIT0gcHJpdi0+b2xkX3N0YXRlKSB7CisJCQlwcml2LT5vbGRfc3RhdGUgPSBzdGF0ZTsKKworCQkJc3dpdGNoIChzdGF0ZSAmIEVTRF9CVVNTVEFURV9NQVNLKSB7CisJCQljYXNlIEVTRF9CVVNTVEFURV9CVVNPRkY6CisJCQkJcHJpdi0+Y2FuLnN0YXRlID0gQ0FOX1NUQVRFX0JVU19PRkY7CisJCQkJY2YtPmNhbl9pZCB8PSBDQU5fRVJSX0JVU09GRjsKKwkJCQljYW5fYnVzX29mZihwcml2LT5uZXRkZXYpOworCQkJCWJyZWFrOworCQkJY2FzZSBFU0RfQlVTU1RBVEVfV0FSTjoKKwkJCQlwcml2LT5jYW4uc3RhdGUgPSBDQU5fU1RBVEVfRVJST1JfV0FSTklORzsKKwkJCQlwcml2LT5jYW4uY2FuX3N0YXRzLmVycm9yX3dhcm5pbmcrKzsKKwkJCQlicmVhazsKKwkJCWNhc2UgRVNEX0JVU1NUQVRFX0VSUlBBU1NJVkU6CisJCQkJcHJpdi0+Y2FuLnN0YXRlID0gQ0FOX1NUQVRFX0VSUk9SX1BBU1NJVkU7CisJCQkJcHJpdi0+Y2FuLmNhbl9zdGF0cy5lcnJvcl9wYXNzaXZlKys7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXByaXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9BQ1RJVkU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQlwcml2LT5jYW4uY2FuX3N0YXRzLmJ1c19lcnJvcisrOworCQkJc3RhdHMtPnJ4X2Vycm9ycysrOworCisJCQljZi0+Y2FuX2lkIHw9IENBTl9FUlJfUFJPVCB8IENBTl9FUlJfQlVTRVJST1I7CisKKwkJCXN3aXRjaCAoZWNjICYgU0pBMTAwMF9FQ0NfTUFTSykgeworCQkJY2FzZSBTSkExMDAwX0VDQ19CSVQ6CisJCQkJY2YtPmRhdGFbMl0gfD0gQ0FOX0VSUl9QUk9UX0JJVDsKKwkJCQlicmVhazsKKwkJCWNhc2UgU0pBMTAwMF9FQ0NfRk9STToKKwkJCQljZi0+ZGF0YVsyXSB8PSBDQU5fRVJSX1BST1RfRk9STTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU0pBMTAwMF9FQ0NfU1RVRkY6CisJCQkJY2YtPmRhdGFbMl0gfD0gQ0FOX0VSUl9QUk9UX1NUVUZGOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQljZi0+ZGF0YVsyXSB8PSBDQU5fRVJSX1BST1RfVU5TUEVDOworCQkJCWNmLT5kYXRhWzNdID0gZWNjICYgU0pBMTAwMF9FQ0NfU0VHOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBFcnJvciBvY2N1cmVkIGR1cmluZyB0cmFuc21pc3Npb24/ICovCisJCQlpZiAoIShlY2MgJiBTSkExMDAwX0VDQ19ESVIpKQorCQkJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9UWDsKKworCQkJaWYgKHByaXYtPmNhbi5zdGF0ZSA9PSBDQU5fU1RBVEVfRVJST1JfV0FSTklORyB8fAorCQkJICAgIHByaXYtPmNhbi5zdGF0ZSA9PSBDQU5fU1RBVEVfRVJST1JfUEFTU0lWRSkgeworCQkJCWNmLT5kYXRhWzFdID0gKHR4ZXJyID4gcnhlcnIpID8KKwkJCQkJQ0FOX0VSUl9DUlRMX1RYX1BBU1NJVkUgOgorCQkJCQlDQU5fRVJSX0NSVExfUlhfUEFTU0lWRTsKKwkJCX0KKwkJCWNmLT5kYXRhWzZdID0gdHhlcnI7CisJCQljZi0+ZGF0YVs3XSA9IHJ4ZXJyOworCQl9CisKKwkJbmV0aWZfcngoc2tiKTsKKworCQlwcml2LT5iZWMudHhlcnIgPSB0eGVycjsKKwkJcHJpdi0+YmVjLnJ4ZXJyID0gcnhlcnI7CisKKwkJc3RhdHMtPnJ4X3BhY2tldHMrKzsKKwkJc3RhdHMtPnJ4X2J5dGVzICs9IGNmLT5jYW5fZGxjOworCX0KK30KKworc3RhdGljIHZvaWQgZXNkX3VzYjJfcnhfY2FuX21zZyhzdHJ1Y3QgZXNkX3VzYjJfbmV0X3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGVzZF91c2IyX21zZyAqbXNnKQoreworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5uZXRkZXYtPnN0YXRzOworCXN0cnVjdCBjYW5fZnJhbWUgKmNmOworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IGk7CisJdTMyIGlkOworCisJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChwcml2LT5uZXRkZXYpKQorCQlyZXR1cm47CisKKwlpZCA9IGxlMzJfdG9fY3B1KG1zZy0+bXNnLnJ4LmlkKTsKKworCWlmIChpZCAmIEVTRF9FVkVOVCkgeworCQllc2RfdXNiMl9yeF9ldmVudChwcml2LCBtc2cpOworCX0gZWxzZSB7CisJCXNrYiA9IGFsbG9jX2Nhbl9za2IocHJpdi0+bmV0ZGV2LCAmY2YpOworCQlpZiAoc2tiID09IE5VTEwpIHsKKwkJCXN0YXRzLT5yeF9kcm9wcGVkKys7CisJCQlyZXR1cm47CisJCX0KKworCQljZi0+Y2FuX2lkID0gaWQgJiBFU0RfSURNQVNLOworCQljZi0+Y2FuX2RsYyA9IGdldF9jYW5fZGxjKG1zZy0+bXNnLnJ4LmRsYyk7CisKKwkJaWYgKGlkICYgRVNEX0VYVElEKQorCQkJY2YtPmNhbl9pZCB8PSBDQU5fRUZGX0ZMQUc7CisKKwkJaWYgKG1zZy0+bXNnLnJ4LmRsYyAmIEVTRF9SVFIpIHsKKwkJCWNmLT5jYW5faWQgfD0gQ0FOX1JUUl9GTEFHOworCQl9IGVsc2UgeworCQkJZm9yIChpID0gMDsgaSA8IGNmLT5jYW5fZGxjOyBpKyspCisJCQkJY2YtPmRhdGFbaV0gPSBtc2ctPm1zZy5yeC5kYXRhW2ldOworCQl9CisKKwkJbmV0aWZfcngoc2tiKTsKKworCQlzdGF0cy0+cnhfcGFja2V0cysrOworCQlzdGF0cy0+cnhfYnl0ZXMgKz0gY2YtPmNhbl9kbGM7CisJfQorCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBlc2RfdXNiMl90eF9kb25lX21zZyhzdHJ1Y3QgZXNkX3VzYjJfbmV0X3ByaXYgKnByaXYsCisJCQkJIHN0cnVjdCBlc2RfdXNiMl9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+bmV0ZGV2LT5zdGF0czsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcHJpdi0+bmV0ZGV2OworCXN0cnVjdCBlc2RfdHhfdXJiX2NvbnRleHQgKmNvbnRleHQ7CisKKwlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpCisJCXJldHVybjsKKworCWNvbnRleHQgPSAmcHJpdi0+dHhfY29udGV4dHNbbXNnLT5tc2cudHhkb25lLmhuZCAmIChNQVhfVFhfVVJCUyAtIDEpXTsKKworCWlmICghbXNnLT5tc2cudHhkb25lLnN0YXR1cykgeworCQlzdGF0cy0+dHhfcGFja2V0cysrOworCQlzdGF0cy0+dHhfYnl0ZXMgKz0gY29udGV4dC0+ZGxjOworCQljYW5fZ2V0X2VjaG9fc2tiKG5ldGRldiwgY29udGV4dC0+ZWNob19pbmRleCk7CisJfSBlbHNlIHsKKwkJc3RhdHMtPnR4X2Vycm9ycysrOworCQljYW5fZnJlZV9lY2hvX3NrYihuZXRkZXYsIGNvbnRleHQtPmVjaG9faW5kZXgpOworCX0KKworCS8qIFJlbGVhc2UgY29udGV4dCAqLworCWNvbnRleHQtPmVjaG9faW5kZXggPSBNQVhfVFhfVVJCUzsKKwlhdG9taWNfZGVjKCZwcml2LT5hY3RpdmVfdHhfam9icyk7CisKKwluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7Cit9CisKK3N0YXRpYyB2b2lkIGVzZF91c2IyX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGVzZF91c2IyICpkZXYgPSB1cmItPmNvbnRleHQ7CisJaW50IHJldHZhbDsKKwlpbnQgcG9zID0gMDsKKwlpbnQgaTsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6IC8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQlyZXR1cm47CisKKwlkZWZhdWx0OgorCQlkZXZfaW5mbyhkZXYtPnVkZXYtPmRldi5wYXJlbnQsCisJCQkgIlJ4IFVSQiBhYm9ydGVkICglZClcbiIsIHVyYi0+c3RhdHVzKTsKKwkJZ290byByZXN1Ym1pdF91cmI7CisJfQorCisJd2hpbGUgKHBvcyA8IHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQlzdHJ1Y3QgZXNkX3VzYjJfbXNnICptc2c7CisKKwkJbXNnID0gKHN0cnVjdCBlc2RfdXNiMl9tc2cgKikodXJiLT50cmFuc2Zlcl9idWZmZXIgKyBwb3MpOworCisJCXN3aXRjaCAobXNnLT5tc2cuaGRyLmNtZCkgeworCQljYXNlIENNRF9DQU5fUlg6CisJCQllc2RfdXNiMl9yeF9jYW5fbXNnKGRldi0+bmV0c1ttc2ctPm1zZy5yeC5uZXRdLCBtc2cpOworCQkJYnJlYWs7CisKKwkJY2FzZSBDTURfQ0FOX1RYOgorCQkJZXNkX3VzYjJfdHhfZG9uZV9tc2coZGV2LT5uZXRzW21zZy0+bXNnLnR4ZG9uZS5uZXRdLAorCQkJCQkgICAgIG1zZyk7CisJCQlicmVhazsKKwkJfQorCisJCXBvcyArPSBtc2ctPm1zZy5oZHIubGVuIDw8IDI7CisKKwkJaWYgKHBvcyA+IHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQkJZGV2X2VycihkZXYtPnVkZXYtPmRldi5wYXJlbnQsICJmb3JtYXQgZXJyb3JcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9CisKK3Jlc3VibWl0X3VyYjoKKwl1c2JfZmlsbF9idWxrX3VyYih1cmIsIGRldi0+dWRldiwgdXNiX3JjdmJ1bGtwaXBlKGRldi0+dWRldiwgMSksCisJCQkgIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBSWF9CVUZGRVJfU0laRSwKKwkJCSAgZXNkX3VzYjJfcmVhZF9idWxrX2NhbGxiYWNrLCBkZXYpOworCisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0dmFsID09IC1FTk9ERVYpIHsKKwkJZm9yIChpID0gMDsgaSA8IGRldi0+bmV0X2NvdW50OyBpKyspIHsKKwkJCWlmIChkZXYtPm5ldHNbaV0pCisJCQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYtPm5ldHNbaV0tPm5ldGRldik7CisJCX0KKwl9IGVsc2UgaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKGRldi0+dWRldi0+ZGV2LnBhcmVudCwKKwkJCSJmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgYnVsayB1cmI6ICVkXG4iLCByZXR2YWwpOworCX0KKworCXJldHVybjsKK30KKworLyoKKyAqIGNhbGxiYWNrIGZvciBidWxrIElOIHVyYgorICovCitzdGF0aWMgdm9pZCBlc2RfdXNiMl93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgZXNkX3R4X3VyYl9jb250ZXh0ICpjb250ZXh0ID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBlc2RfdXNiMl9uZXRfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgZXNkX3VzYjIgKmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXNpemVfdCBzaXplID0gc2l6ZW9mKHN0cnVjdCBlc2RfdXNiMl9tc2cpOworCisJV0FSTl9PTighY29udGV4dCk7CisKKwlwcml2ID0gY29udGV4dC0+cHJpdjsKKwluZXRkZXYgPSBwcml2LT5uZXRkZXY7CisJZGV2ID0gcHJpdi0+dXNiMjsKKworCS8qIGZyZWUgdXAgb3VyIGFsbG9jYXRlZCBidWZmZXIgKi8KKwl1c2JfZnJlZV9jb2hlcmVudCh1cmItPmRldiwgc2l6ZSwKKwkJCSAgdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+dHJhbnNmZXJfZG1hKTsKKworCWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSkKKwkJcmV0dXJuOworCisJaWYgKHVyYi0+c3RhdHVzKQorCQlkZXZfaW5mbyhuZXRkZXYtPmRldi5wYXJlbnQsICJUeCBVUkIgYWJvcnRlZCAoJWQpXG4iLAorCQkJIHVyYi0+c3RhdHVzKTsKKworCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2Zpcm13YXJlKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGQpOworCXN0cnVjdCBlc2RfdXNiMiAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiVkLiVkXG4iLAorCQkgICAgICAgKGRldi0+dmVyc2lvbiA+PiAxMikgJiAweGYsCisJCSAgICAgICAoZGV2LT52ZXJzaW9uID4+IDgpICYgMHhmLAorCQkgICAgICAgZGV2LT52ZXJzaW9uICYgMHhmZik7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoZmlybXdhcmUsIFNfSVJVR08sIHNob3dfZmlybXdhcmUsIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBzaG93X2hhcmR3YXJlKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGQpOworCXN0cnVjdCBlc2RfdXNiMiAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiVkLiVkXG4iLAorCQkgICAgICAgKGRldi0+dmVyc2lvbiA+PiAyOCkgJiAweGYsCisJCSAgICAgICAoZGV2LT52ZXJzaW9uID4+IDI0KSAmIDB4ZiwKKwkJICAgICAgIChkZXYtPnZlcnNpb24gPj4gMTYpICYgMHhmZik7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoaGFyZHdhcmUsIFNfSVJVR08sIHNob3dfaGFyZHdhcmUsIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBzaG93X25ldHMoc3RydWN0IGRldmljZSAqZCwKKwkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkKTsKKwlzdHJ1Y3QgZXNkX3VzYjIgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZCIsIGRldi0+bmV0X2NvdW50KTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihuZXRzLCBTX0lSVUdPLCBzaG93X25ldHMsIE5VTEwpOworCitzdGF0aWMgaW50IGVzZF91c2IyX3NlbmRfbXNnKHN0cnVjdCBlc2RfdXNiMiAqZGV2LCBzdHJ1Y3QgZXNkX3VzYjJfbXNnICptc2cpCit7CisJaW50IGFjdHVhbF9sZW5ndGg7CisKKwlyZXR1cm4gdXNiX2J1bGtfbXNnKGRldi0+dWRldiwKKwkJCSAgICB1c2Jfc25kYnVsa3BpcGUoZGV2LT51ZGV2LCAyKSwKKwkJCSAgICBtc2csCisJCQkgICAgbXNnLT5tc2cuaGRyLmxlbiA8PCAyLAorCQkJICAgICZhY3R1YWxfbGVuZ3RoLAorCQkJICAgIDEwMDApOworfQorCitzdGF0aWMgaW50IGVzZF91c2IyX3dhaXRfbXNnKHN0cnVjdCBlc2RfdXNiMiAqZGV2LAorCQkJICAgICBzdHJ1Y3QgZXNkX3VzYjJfbXNnICptc2cpCit7CisJaW50IGFjdHVhbF9sZW5ndGg7CisKKwlyZXR1cm4gdXNiX2J1bGtfbXNnKGRldi0+dWRldiwKKwkJCSAgICB1c2JfcmN2YnVsa3BpcGUoZGV2LT51ZGV2LCAxKSwKKwkJCSAgICBtc2csCisJCQkgICAgc2l6ZW9mKCptc2cpLAorCQkJICAgICZhY3R1YWxfbGVuZ3RoLAorCQkJICAgIDEwMDApOworfQorCitzdGF0aWMgaW50IGVzZF91c2IyX3NldHVwX3J4X3VyYnMoc3RydWN0IGVzZF91c2IyICpkZXYpCit7CisJaW50IGksIGVyciA9IDA7CisKKwlpZiAoZGV2LT5yeGluaXRkb25lKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfUlhfVVJCUzsgaSsrKSB7CisJCXN0cnVjdCB1cmIgKnVyYiA9IE5VTEw7CisJCXU4ICpidWYgPSBOVUxMOworCisJCS8qIGNyZWF0ZSBhIFVSQiwgYW5kIGEgYnVmZmVyIGZvciBpdCAqLworCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQlpZiAoIXVyYikgeworCQkJZGV2X3dhcm4oZGV2LT51ZGV2LT5kZXYucGFyZW50LAorCQkJCSAiTm8gbWVtb3J5IGxlZnQgZm9yIFVSQnNcbiIpOworCQkJZXJyID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisKKwkJYnVmID0gdXNiX2FsbG9jX2NvaGVyZW50KGRldi0+dWRldiwgUlhfQlVGRkVSX1NJWkUsIEdGUF9LRVJORUwsCisJCQkJCSAmdXJiLT50cmFuc2Zlcl9kbWEpOworCQlpZiAoIWJ1ZikgeworCQkJZGV2X3dhcm4oZGV2LT51ZGV2LT5kZXYucGFyZW50LAorCQkJCSAiTm8gbWVtb3J5IGxlZnQgZm9yIFVTQiBidWZmZXJcbiIpOworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gZnJlZXVyYjsKKwkJfQorCisJCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgZGV2LT51ZGV2LAorCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKGRldi0+dWRldiwgMSksCisJCQkJICBidWYsIFJYX0JVRkZFUl9TSVpFLAorCQkJCSAgZXNkX3VzYjJfcmVhZF9idWxrX2NhbGxiYWNrLCBkZXYpOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCQl1c2JfYW5jaG9yX3VyYih1cmIsICZkZXYtPnJ4X3N1Ym1pdHRlZCk7CisKKwkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGVycikgeworCQkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOworCQkJdXNiX2ZyZWVfY29oZXJlbnQoZGV2LT51ZGV2LCBSWF9CVUZGRVJfU0laRSwgYnVmLAorCQkJCQkgIHVyYi0+dHJhbnNmZXJfZG1hKTsKKwkJfQorCitmcmVldXJiOgorCQkvKiBEcm9wIHJlZmVyZW5jZSwgVVNCIGNvcmUgd2lsbCB0YWtlIGNhcmUgb2YgZnJlZWluZyBpdCAqLworCQl1c2JfZnJlZV91cmIodXJiKTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCX0KKworCS8qIERpZCB3ZSBzdWJtaXQgYW55IFVSQnMgKi8KKwlpZiAoaSA9PSAwKSB7CisJCWRldl9lcnIoZGV2LT51ZGV2LT5kZXYucGFyZW50LCAiY291bGRuJ3Qgc2V0dXAgcmVhZCBVUkJzXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBXYXJuIGlmIHdlJ3ZlIGNvdWxkbid0IHRyYW5zbWl0IGFsbCB0aGUgVVJCcyAqLworCWlmIChpIDwgTUFYX1JYX1VSQlMpIHsKKwkJZGV2X3dhcm4oZGV2LT51ZGV2LT5kZXYucGFyZW50LAorCQkJICJyeCBwZXJmb3JtYW5jZSBtYXkgYmUgc2xvd1xuIik7CisJfQorCisJZGV2LT5yeGluaXRkb25lID0gMTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFN0YXJ0IGludGVyZmFjZQorICovCitzdGF0aWMgaW50IGVzZF91c2IyX3N0YXJ0KHN0cnVjdCBlc2RfdXNiMl9uZXRfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgZXNkX3VzYjIgKmRldiA9IHByaXYtPnVzYjI7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHByaXYtPm5ldGRldjsKKwlzdHJ1Y3QgZXNkX3VzYjJfbXNnIG1zZzsKKwlpbnQgZXJyLCBpOworCisJLyoKKwkgKiBFbmFibGUgYWxsIElEcworCSAqIFRoZSBJREFERCBtZXNzYWdlIHRha2VzIHVwIHRvIDY0IDMyIGJpdCBiaXRtYXNrcyAoMjA0OCBiaXRzKS4KKwkgKiBFYWNoIGJpdCByZXByZXNlbnRzIG9uZSAxMSBiaXQgQ0FOIGlkZW50aWZpZXIuIEEgc2V0IGJpdAorCSAqIGVuYWJsZXMgcmVjZXB0aW9uIG9mIHRoZSBjb3JyZXNwb25kaW5nIENBTiBpZGVudGlmaWVyLiBBIGNsZWFyZWQKKwkgKiBiaXQgZGlzYWJsZWQgdGhpcyBpZGVudGlmaWVyLiBBbiBhZGRpdGlvbmFsIGJpdG1hc2sgdmFsdWUKKwkgKiBmb2xsb3dpbmcgdGhlIENBTiAyLjBBIGJpdHMgaXMgdXNlZCB0byBlbmFibGUgcmVjZXB0aW9uIG9mCisJICogZXh0ZW5kZWQgQ0FOIGZyYW1lcy4gT25seSB0aGUgTFNCIG9mIHRoaXMgZmluYWwgbWFzayBpcyBjaGVja2VkCisJICogZm9yIHRoZSBjb21wbGV0ZSAyOSBiaXQgSUQgcmFuZ2UuIFRoZSBJREFERCBtZXNzYWdlIGFsc28gYWxsb3dzCisJICogZmlsdGVyIGNvbmZpZ3VyYXRpb24gZm9yIGFuIElEIHN1YnNldC4gSW4gdGhpcyBjYXNlIHlvdSBjYW4gYWRkCisJICogdGhlIG51bWJlciBvZiB0aGUgc3RhcnRpbmcgYml0bWFzayAoMC4uNjQpIHRvIHRoZSBmaWx0ZXIub3B0aW9uCisJICogZmllbGQgZm9sbG93ZWQgYnkgb25seSBzb21lIGJpdG1hc2tzLgorCSAqLworCW1zZy5tc2cuaGRyLmNtZCA9IENNRF9JREFERDsKKwltc2cubXNnLmhkci5sZW4gPSAyICsgRVNEX01BWF9JRF9TRUdNRU5UOworCW1zZy5tc2cuZmlsdGVyLm5ldCA9IHByaXYtPmluZGV4OworCW1zZy5tc2cuZmlsdGVyLm9wdGlvbiA9IEVTRF9JRF9FTkFCTEU7IC8qIHN0YXJ0IHdpdGggc2VnbWVudCAwICovCisJZm9yIChpID0gMDsgaSA8IEVTRF9NQVhfSURfU0VHTUVOVDsgaSsrKQorCQltc2cubXNnLmZpbHRlci5tYXNrW2ldID0gY3B1X3RvX2xlMzIoMHhmZmZmZmZmZik7CisJLyogZW5hYmxlIDI5Yml0IGV4dGVuZGVkIElEcyAqLworCW1zZy5tc2cuZmlsdGVyLm1hc2tbRVNEX01BWF9JRF9TRUdNRU5UXSA9IGNwdV90b19sZTMyKDB4MDAwMDAwMDEpOworCisJZXJyID0gZXNkX3VzYjJfc2VuZF9tc2coZGV2LCAmbXNnKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWxlZDsKKworCWVyciA9IGVzZF91c2IyX3NldHVwX3J4X3VyYnMoZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWxlZDsKKworCXByaXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9BQ1RJVkU7CisKKwlyZXR1cm4gMDsKKworZmFpbGVkOgorCWlmIChlcnIgPT0gLUVOT0RFVikKKwkJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOworCisJZGV2X2VycihuZXRkZXYtPmRldi5wYXJlbnQsICJjb3VsZG4ndCBzdGFydCBkZXZpY2U6ICVkXG4iLCBlcnIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgdW5saW5rX2FsbF91cmJzKHN0cnVjdCBlc2RfdXNiMiAqZGV2KQoreworCXN0cnVjdCBlc2RfdXNiMl9uZXRfcHJpdiAqcHJpdjsKKwlpbnQgaTsKKworCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmRldi0+cnhfc3VibWl0dGVkKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5uZXRfY291bnQ7IGkrKykgeworCQlwcml2ID0gZGV2LT5uZXRzW2ldOworCQlpZiAocHJpdikgeworCQkJdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmcHJpdi0+dHhfc3VibWl0dGVkKTsKKwkJCWF0b21pY19zZXQoJnByaXYtPmFjdGl2ZV90eF9qb2JzLCAwKTsKKworCQkJZm9yIChpID0gMDsgaSA8IE1BWF9UWF9VUkJTOyBpKyspCisJCQkJcHJpdi0+dHhfY29udGV4dHNbaV0uZWNob19pbmRleCA9IE1BWF9UWF9VUkJTOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGVzZF91c2IyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgZXNkX3VzYjJfbmV0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBlcnI7CisKKwkvKiBjb21tb24gb3BlbiAqLworCWVyciA9IG9wZW5fY2FuZGV2KG5ldGRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIGZpbmFsbHkgc3RhcnQgZGV2aWNlICovCisJZXJyID0gZXNkX3VzYjJfc3RhcnQocHJpdik7CisJaWYgKGVycikgeworCQlkZXZfd2FybihuZXRkZXYtPmRldi5wYXJlbnQsCisJCQkgImNvdWxkbid0IHN0YXJ0IGRldmljZTogJWRcbiIsIGVycik7CisJCWNsb3NlX2NhbmRldihuZXRkZXYpOworCQlyZXR1cm4gZXJyOworCX0KKworCXByaXYtPm9wZW5fdGltZSA9IGppZmZpZXM7CisKKwluZXRpZl9zdGFydF9xdWV1ZShuZXRkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBuZXRkZXZfdHhfdCBlc2RfdXNiMl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgZXNkX3VzYjJfbmV0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBlc2RfdXNiMiAqZGV2ID0gcHJpdi0+dXNiMjsKKwlzdHJ1Y3QgZXNkX3R4X3VyYl9jb250ZXh0ICpjb250ZXh0ID0gTlVMTDsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmbmV0ZGV2LT5zdGF0czsKKwlzdHJ1Y3QgY2FuX2ZyYW1lICpjZiA9IChzdHJ1Y3QgY2FuX2ZyYW1lICopc2tiLT5kYXRhOworCXN0cnVjdCBlc2RfdXNiMl9tc2cgKm1zZzsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJdTggKmJ1ZjsKKwlpbnQgaSwgZXJyOworCWludCByZXQgPSBORVRERVZfVFhfT0s7CisJc2l6ZV90IHNpemUgPSBzaXplb2Yoc3RydWN0IGVzZF91c2IyX21zZyk7CisKKwlpZiAoY2FuX2Ryb3BwZWRfaW52YWxpZF9za2IobmV0ZGV2LCBza2IpKQorCQlyZXR1cm4gTkVUREVWX1RYX09LOworCisJLyogY3JlYXRlIGEgVVJCLCBhbmQgYSBidWZmZXIgZm9yIGl0LCBhbmQgY29weSB0aGUgZGF0YSB0byB0aGUgVVJCICovCisJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXVyYikgeworCQlkZXZfZXJyKG5ldGRldi0+ZGV2LnBhcmVudCwgIk5vIG1lbW9yeSBsZWZ0IGZvciBVUkJzXG4iKTsKKwkJc3RhdHMtPnR4X2Ryb3BwZWQrKzsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlnb3RvIG5vdXJibWVtOworCX0KKworCWJ1ZiA9IHVzYl9hbGxvY19jb2hlcmVudChkZXYtPnVkZXYsIHNpemUsIEdGUF9BVE9NSUMsCisJCQkJICZ1cmItPnRyYW5zZmVyX2RtYSk7CisJaWYgKCFidWYpIHsKKwkJZGV2X2VycihuZXRkZXYtPmRldi5wYXJlbnQsICJObyBtZW1vcnkgbGVmdCBmb3IgVVNCIGJ1ZmZlclxuIik7CisJCXN0YXRzLT50eF9kcm9wcGVkKys7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJZ290byBub2J1Zm1lbTsKKwl9CisKKwltc2cgPSAoc3RydWN0IGVzZF91c2IyX21zZyAqKWJ1ZjsKKworCW1zZy0+bXNnLmhkci5sZW4gPSAzOyAvKiBtaW5pbWFsIGxlbmd0aCAqLworCW1zZy0+bXNnLmhkci5jbWQgPSBDTURfQ0FOX1RYOworCW1zZy0+bXNnLnR4Lm5ldCA9IHByaXYtPmluZGV4OworCW1zZy0+bXNnLnR4LmRsYyA9IGNmLT5jYW5fZGxjOworCW1zZy0+bXNnLnR4LmlkID0gY3B1X3RvX2xlMzIoY2YtPmNhbl9pZCAmIENBTl9FUlJfTUFTSyk7CisKKwlpZiAoY2YtPmNhbl9pZCAmIENBTl9SVFJfRkxBRykKKwkJbXNnLT5tc2cudHguZGxjIHw9IEVTRF9SVFI7CisKKwlpZiAoY2YtPmNhbl9pZCAmIENBTl9FRkZfRkxBRykKKwkJbXNnLT5tc2cudHguaWQgfD0gY3B1X3RvX2xlMzIoRVNEX0VYVElEKTsKKworCWZvciAoaSA9IDA7IGkgPCBjZi0+Y2FuX2RsYzsgaSsrKQorCQltc2ctPm1zZy50eC5kYXRhW2ldID0gY2YtPmRhdGFbaV07CisKKwltc2ctPm1zZy5oZHIubGVuICs9IChjZi0+Y2FuX2RsYyArIDMpID4+IDI7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1RYX1VSQlM7IGkrKykgeworCQlpZiAocHJpdi0+dHhfY29udGV4dHNbaV0uZWNob19pbmRleCA9PSBNQVhfVFhfVVJCUykgeworCQkJY29udGV4dCA9ICZwcml2LT50eF9jb250ZXh0c1tpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyoKKwkgKiBUaGlzIG1heSBuZXZlciBoYXBwZW4uCisJICovCisJaWYgKCFjb250ZXh0KSB7CisJCWRldl93YXJuKG5ldGRldi0+ZGV2LnBhcmVudCwgImNvdWxkbid0IGZpbmQgZnJlZSBjb250ZXh0XG4iKTsKKwkJcmV0ID0gTkVUREVWX1RYX0JVU1k7CisJCWdvdG8gcmVsZWFzZWJ1ZjsKKwl9CisKKwljb250ZXh0LT5wcml2ID0gcHJpdjsKKwljb250ZXh0LT5lY2hvX2luZGV4ID0gaTsKKwljb250ZXh0LT5kbGMgPSBjZi0+Y2FuX2RsYzsKKworCS8qIGhuZCBtdXN0IG5vdCBiZSAwIC0gTVNCIGlzIHN0cmlwcGVkIGluIHR4ZG9uZSBoYW5kbGluZyAqLworCW1zZy0+bXNnLnR4LmhuZCA9IDB4ODAwMDAwMDAgfCBpOyAvKiByZXR1cm5lZCBpbiBUWCBkb25lIG1lc3NhZ2UgKi8KKworCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgZGV2LT51ZGV2LCB1c2Jfc25kYnVsa3BpcGUoZGV2LT51ZGV2LCAyKSwgYnVmLAorCQkJICBtc2ctPm1zZy5oZHIubGVuIDw8IDIsCisJCQkgIGVzZF91c2IyX3dyaXRlX2J1bGtfY2FsbGJhY2ssIGNvbnRleHQpOworCisJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKworCXVzYl9hbmNob3JfdXJiKHVyYiwgJnByaXYtPnR4X3N1Ym1pdHRlZCk7CisKKwljYW5fcHV0X2VjaG9fc2tiKHNrYiwgbmV0ZGV2LCBjb250ZXh0LT5lY2hvX2luZGV4KTsKKworCWF0b21pY19pbmMoJnByaXYtPmFjdGl2ZV90eF9qb2JzKTsKKworCS8qIFNsb3cgZG93biB0eCBwYXRoICovCisJaWYgKGF0b21pY19yZWFkKCZwcml2LT5hY3RpdmVfdHhfam9icykgPj0gTUFYX1RYX1VSQlMpCisJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKworCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKGVycikgeworCQljYW5fZnJlZV9lY2hvX3NrYihuZXRkZXYsIGNvbnRleHQtPmVjaG9faW5kZXgpOworCisJCWF0b21pY19kZWMoJnByaXYtPmFjdGl2ZV90eF9qb2JzKTsKKwkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOworCisJCXN0YXRzLT50eF9kcm9wcGVkKys7CisKKwkJaWYgKGVyciA9PSAtRU5PREVWKQorCQkJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOworCQllbHNlCisJCQlkZXZfd2FybihuZXRkZXYtPmRldi5wYXJlbnQsICJmYWlsZWQgdHhfdXJiICVkXG4iLCBlcnIpOworCisJCWdvdG8gcmVsZWFzZWJ1ZjsKKwl9CisKKwluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKworCS8qCisJICogUmVsZWFzZSBvdXIgcmVmZXJlbmNlIHRvIHRoaXMgVVJCLCB0aGUgVVNCIGNvcmUgd2lsbCBldmVudHVhbGx5IGZyZWUKKwkgKiBpdCBlbnRpcmVseS4KKwkgKi8KKwl1c2JfZnJlZV91cmIodXJiKTsKKworCXJldHVybiBORVRERVZfVFhfT0s7CisKK3JlbGVhc2VidWY6CisJdXNiX2ZyZWVfY29oZXJlbnQoZGV2LT51ZGV2LCBzaXplLCBidWYsIHVyYi0+dHJhbnNmZXJfZG1hKTsKKworbm9idWZtZW06CisJdXNiX2ZyZWVfdXJiKHVyYik7CisKK25vdXJibWVtOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZXNkX3VzYjJfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgZXNkX3VzYjJfbmV0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBlc2RfdXNiMl9tc2cgbXNnOworCWludCBpOworCisJLyogRGlzYWJsZSBhbGwgSURzIChzZWUgZXNkX3VzYjJfc3RhcnQoKSkgKi8KKwltc2cubXNnLmhkci5jbWQgPSBDTURfSURBREQ7CisJbXNnLm1zZy5oZHIubGVuID0gMiArIEVTRF9NQVhfSURfU0VHTUVOVDsKKwltc2cubXNnLmZpbHRlci5uZXQgPSBwcml2LT5pbmRleDsKKwltc2cubXNnLmZpbHRlci5vcHRpb24gPSBFU0RfSURfRU5BQkxFOyAvKiBzdGFydCB3aXRoIHNlZ21lbnQgMCAqLworCWZvciAoaSA9IDA7IGkgPD0gRVNEX01BWF9JRF9TRUdNRU5UOyBpKyspCisJCW1zZy5tc2cuZmlsdGVyLm1hc2tbaV0gPSAwOworCWlmIChlc2RfdXNiMl9zZW5kX21zZyhwcml2LT51c2IyLCAmbXNnKSA8IDApCisJCWRldl9lcnIobmV0ZGV2LT5kZXYucGFyZW50LCAic2VuZGluZyBpZGFkZCBtZXNzYWdlIGZhaWxlZFxuIik7CisKKwkvKiBzZXQgQ0FOIGNvbnRyb2xsZXIgdG8gcmVzZXQgbW9kZSAqLworCW1zZy5tc2cuaGRyLmxlbiA9IDI7CisJbXNnLm1zZy5oZHIuY21kID0gQ01EX1NFVEJBVUQ7CisJbXNnLm1zZy5zZXRiYXVkLm5ldCA9IHByaXYtPmluZGV4OworCW1zZy5tc2cuc2V0YmF1ZC5yc3ZkID0gMDsKKwltc2cubXNnLnNldGJhdWQuYmF1ZCA9IGNwdV90b19sZTMyKEVTRF9VU0IyX05PX0JBVURSQVRFKTsKKwlpZiAoZXNkX3VzYjJfc2VuZF9tc2cocHJpdi0+dXNiMiwgJm1zZykgPCAwKQorCQlkZXZfZXJyKG5ldGRldi0+ZGV2LnBhcmVudCwgInNlbmRpbmcgc2V0YmF1ZCBtZXNzYWdlIGZhaWxlZFxuIik7CisKKwlwcml2LT5jYW4uc3RhdGUgPSBDQU5fU1RBVEVfU1RPUFBFRDsKKworCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKworCWNsb3NlX2NhbmRldihuZXRkZXYpOworCisJcHJpdi0+b3Blbl90aW1lID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVzZF91c2IyX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuID0gZXNkX3VzYjJfb3BlbiwKKwkubmRvX3N0b3AgPSBlc2RfdXNiMl9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgPSBlc2RfdXNiMl9zdGFydF94bWl0LAorfTsKKworc3RhdGljIHN0cnVjdCBjYW5fYml0dGltaW5nX2NvbnN0IGVzZF91c2IyX2JpdHRpbWluZ19jb25zdCA9IHsKKwkubmFtZSA9ICJlc2RfdXNiMiIsCisJLnRzZWcxX21pbiA9IEVTRF9VU0IyX1RTRUcxX01JTiwKKwkudHNlZzFfbWF4ID0gRVNEX1VTQjJfVFNFRzFfTUFYLAorCS50c2VnMl9taW4gPSBFU0RfVVNCMl9UU0VHMl9NSU4sCisJLnRzZWcyX21heCA9IEVTRF9VU0IyX1RTRUcyX01BWCwKKwkuc2p3X21heCA9IEVTRF9VU0IyX1NKV19NQVgsCisJLmJycF9taW4gPSBFU0RfVVNCMl9CUlBfTUlOLAorCS5icnBfbWF4ID0gRVNEX1VTQjJfQlJQX01BWCwKKwkuYnJwX2luYyA9IEVTRF9VU0IyX0JSUF9JTkMsCit9OworCitzdGF0aWMgaW50IGVzZF91c2IyX3NldF9iaXR0aW1pbmcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgZXNkX3VzYjJfbmV0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBjYW5fYml0dGltaW5nICpidCA9ICZwcml2LT5jYW4uYml0dGltaW5nOworCXN0cnVjdCBlc2RfdXNiMl9tc2cgbXNnOworCXUzMiBjYW5idHI7CisKKwljYW5idHIgPSBFU0RfVVNCMl9VQlI7CisJY2FuYnRyIHw9IChidC0+YnJwIC0gMSkgJiAoRVNEX1VTQjJfQlJQX01BWCAtIDEpOworCWNhbmJ0ciB8PSAoKGJ0LT5zancgLSAxKSAmIChFU0RfVVNCMl9TSldfTUFYIC0gMSkpCisJCTw8IEVTRF9VU0IyX1NKV19TSElGVDsKKwljYW5idHIgfD0gKChidC0+cHJvcF9zZWcgKyBidC0+cGhhc2Vfc2VnMSAtIDEpCisJCSAgICYgKEVTRF9VU0IyX1RTRUcxX01BWCAtIDEpKQorCQk8PCBFU0RfVVNCMl9UU0VHMV9TSElGVDsKKwljYW5idHIgfD0gKChidC0+cGhhc2Vfc2VnMiAtIDEpICYgKEVTRF9VU0IyX1RTRUcyX01BWCAtIDEpKQorCQk8PCBFU0RfVVNCMl9UU0VHMl9TSElGVDsKKwlpZiAocHJpdi0+Y2FuLmN0cmxtb2RlICYgQ0FOX0NUUkxNT0RFXzNfU0FNUExFUykKKwkJY2FuYnRyIHw9IEVTRF9VU0IyXzNfU0FNUExFUzsKKworCW1zZy5tc2cuaGRyLmxlbiA9IDI7CisJbXNnLm1zZy5oZHIuY21kID0gQ01EX1NFVEJBVUQ7CisJbXNnLm1zZy5zZXRiYXVkLm5ldCA9IHByaXYtPmluZGV4OworCW1zZy5tc2cuc2V0YmF1ZC5yc3ZkID0gMDsKKwltc2cubXNnLnNldGJhdWQuYmF1ZCA9IGNwdV90b19sZTMyKGNhbmJ0cik7CisKKwlkZXZfaW5mbyhuZXRkZXYtPmRldi5wYXJlbnQsICJzZXR0aW5nIEJUUj0lI3hcbiIsIGNhbmJ0cik7CisKKwlyZXR1cm4gZXNkX3VzYjJfc2VuZF9tc2cocHJpdi0+dXNiMiwgJm1zZyk7Cit9CisKK3N0YXRpYyBpbnQgZXNkX3VzYjJfZ2V0X2JlcnJfY291bnRlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICAgc3RydWN0IGNhbl9iZXJyX2NvdW50ZXIgKmJlYykKK3sKKwlzdHJ1Y3QgZXNkX3VzYjJfbmV0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJYmVjLT50eGVyciA9IHByaXYtPmJlYy50eGVycjsKKwliZWMtPnJ4ZXJyID0gcHJpdi0+YmVjLnJ4ZXJyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXNkX3VzYjJfc2V0X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSBjYW5fbW9kZSBtb2RlKQoreworCXN0cnVjdCBlc2RfdXNiMl9uZXRfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAoIXByaXYtPm9wZW5fdGltZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENBTl9NT0RFX1NUQVJUOgorCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVzZF91c2IyX3Byb2JlX29uZV9uZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgZXNkX3VzYjIgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3QgZXNkX3VzYjJfbmV0X3ByaXYgKnByaXY7CisJaW50IGVyciA9IDA7CisJaW50IGk7CisKKwluZXRkZXYgPSBhbGxvY19jYW5kZXYoc2l6ZW9mKCpwcml2KSwgTUFYX1RYX1VSQlMpOworCWlmICghbmV0ZGV2KSB7CisJCWRldl9lcnIoJmludGYtPmRldiwgImNvdWxkbid0IGFsbG9jIGNhbmRldlxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CisKKwlwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWluaXRfdXNiX2FuY2hvcigmcHJpdi0+dHhfc3VibWl0dGVkKTsKKwlhdG9taWNfc2V0KCZwcml2LT5hY3RpdmVfdHhfam9icywgMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1RYX1VSQlM7IGkrKykKKwkJcHJpdi0+dHhfY29udGV4dHNbaV0uZWNob19pbmRleCA9IE1BWF9UWF9VUkJTOworCisJcHJpdi0+dXNiMiA9IGRldjsKKwlwcml2LT5uZXRkZXYgPSBuZXRkZXY7CisJcHJpdi0+aW5kZXggPSBpbmRleDsKKworCXByaXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFURV9TVE9QUEVEOworCXByaXYtPmNhbi5jbG9jay5mcmVxID0gRVNEX1VTQjJfQ0FOX0NMT0NLOworCXByaXYtPmNhbi5iaXR0aW1pbmdfY29uc3QgPSAmZXNkX3VzYjJfYml0dGltaW5nX2NvbnN0OworCXByaXYtPmNhbi5kb19zZXRfYml0dGltaW5nID0gZXNkX3VzYjJfc2V0X2JpdHRpbWluZzsKKwlwcml2LT5jYW4uZG9fc2V0X21vZGUgPSBlc2RfdXNiMl9zZXRfbW9kZTsKKwlwcml2LT5jYW4uZG9fZ2V0X2JlcnJfY291bnRlciA9IGVzZF91c2IyX2dldF9iZXJyX2NvdW50ZXI7CisJcHJpdi0+Y2FuLmN0cmxtb2RlX3N1cHBvcnRlZCA9IENBTl9DVFJMTU9ERV8zX1NBTVBMRVM7CisKKwluZXRkZXYtPmZsYWdzIHw9IElGRl9FQ0hPOyAvKiB3ZSBzdXBwb3J0IGxvY2FsIGVjaG8gKi8KKworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZlc2RfdXNiMl9uZXRkZXZfb3BzOworCisJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmaW50Zi0+ZGV2KTsKKworCWVyciA9IHJlZ2lzdGVyX2NhbmRldihuZXRkZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LAorCQkJImNvdWxkbid0IHJlZ2lzdGVyIENBTiBkZXZpY2U6ICVkXG4iLCBlcnIpOworCQlmcmVlX2NhbmRldihuZXRkZXYpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCisJZGV2LT5uZXRzW2luZGV4XSA9IHByaXY7CisJZGV2X2luZm8obmV0ZGV2LT5kZXYucGFyZW50LCAiZGV2aWNlICVzIHJlZ2lzdGVyZWRcbiIsIG5ldGRldi0+bmFtZSk7CisKK2RvbmU6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIHByb2JlIGZ1bmN0aW9uIGZvciBuZXcgVVNCMiBkZXZpY2VzCisgKgorICogY2hlY2sgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgbnVtYmVyIG9mIGF2YWlsYWJsZQorICogQ0FOIGludGVyZmFjZXMKKyAqLworc3RhdGljIGludCBlc2RfdXNiMl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGVzZF91c2IyICpkZXY7CisJc3RydWN0IGVzZF91c2IyX21zZyBtc2c7CisJaW50IGksIGVycjsKKworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCisJZGV2LT51ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKworCWluaXRfdXNiX2FuY2hvcigmZGV2LT5yeF9zdWJtaXR0ZWQpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBkZXYpOworCisJLyogcXVlcnkgbnVtYmVyIG9mIENBTiBpbnRlcmZhY2VzIChuZXRzKSAqLworCW1zZy5tc2cuaGRyLmNtZCA9IENNRF9WRVJTSU9OOworCW1zZy5tc2cuaGRyLmxlbiA9IDI7CisJbXNnLm1zZy52ZXJzaW9uLnJzdmQgPSAwOworCW1zZy5tc2cudmVyc2lvbi5mbGFncyA9IDA7CisJbXNnLm1zZy52ZXJzaW9uLmRydl92ZXJzaW9uID0gMDsKKworCWVyciA9IGVzZF91c2IyX3NlbmRfbXNnKGRldiwgJm1zZyk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAic2VuZGluZyB2ZXJzaW9uIG1lc3NhZ2UgZmFpbGVkXG4iKTsKKwkJZ290byBmcmVlX2RldjsKKwl9CisKKwllcnIgPSBlc2RfdXNiMl93YWl0X21zZyhkZXYsICZtc2cpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoJmludGYtPmRldiwgIm5vIHZlcnNpb24gbWVzc2FnZSBhbnN3ZXJcbiIpOworCQlnb3RvIGZyZWVfZGV2OworCX0KKworCWRldi0+bmV0X2NvdW50ID0gKGludCltc2cubXNnLnZlcnNpb25fcmVwbHkubmV0czsKKwlkZXYtPnZlcnNpb24gPSBsZTMyX3RvX2NwdShtc2cubXNnLnZlcnNpb25fcmVwbHkudmVyc2lvbik7CisKKwlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9maXJtd2FyZSkpCisJCWRldl9lcnIoJmludGYtPmRldiwKKwkJCSJDb3VsZG4ndCBjcmVhdGUgZGV2aWNlIGZpbGUgZm9yIGZpcm13YXJlXG4iKTsKKworCWlmIChkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2hhcmR3YXJlKSkKKwkJZGV2X2VycigmaW50Zi0+ZGV2LAorCQkJIkNvdWxkbid0IGNyZWF0ZSBkZXZpY2UgZmlsZSBmb3IgaGFyZHdhcmVcbiIpOworCisJaWYgKGRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfbmV0cykpCisJCWRldl9lcnIoJmludGYtPmRldiwKKwkJCSJDb3VsZG4ndCBjcmVhdGUgZGV2aWNlIGZpbGUgZm9yIG5ldHNcbiIpOworCisJLyogZG8gcGVyIGRldmljZSBwcm9iaW5nICovCisJZm9yIChpID0gMDsgaSA8IGRldi0+bmV0X2NvdW50OyBpKyspCisJCWVzZF91c2IyX3Byb2JlX29uZV9uZXQoaW50ZiwgaSk7CisKKwlyZXR1cm4gMDsKKworZnJlZV9kZXY6CisJa2ZyZWUoZGV2KTsKK2RvbmU6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIGNhbGxlZCBieSB0aGUgdXNiIGNvcmUgd2hlbiB0aGUgZGV2aWNlIGlzIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtCisgKi8KK3N0YXRpYyB2b2lkIGVzZF91c2IyX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGVzZF91c2IyICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJaW50IGk7CisKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2Zpcm13YXJlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2hhcmR3YXJlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX25ldHMpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKworCWlmIChkZXYpIHsKKwkJZm9yIChpID0gMDsgaSA8IGRldi0+bmV0X2NvdW50OyBpKyspIHsKKwkJCWlmIChkZXYtPm5ldHNbaV0pIHsKKwkJCQluZXRkZXYgPSBkZXYtPm5ldHNbaV0tPm5ldGRldjsKKwkJCQl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOworCQkJCWZyZWVfY2FuZGV2KG5ldGRldik7CisJCQl9CisJCX0KKwkJdW5saW5rX2FsbF91cmJzKGRldik7CisJfQorfQorCisvKiB1c2Igc3BlY2lmaWMgb2JqZWN0IG5lZWRlZCB0byByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSB1c2Igc3Vic3lzdGVtICovCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZXNkX3VzYjJfZHJpdmVyID0geworCS5uYW1lID0gImVzZF91c2IyIiwKKwkucHJvYmUgPSBlc2RfdXNiMl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGVzZF91c2IyX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0gZXNkX3VzYjJfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBlc2RfdXNiMl9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCS8qIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwllcnIgPSB1c2JfcmVnaXN0ZXIoJmVzZF91c2IyX2RyaXZlcik7CisKKwlpZiAoZXJyKSB7CisJCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorbW9kdWxlX2luaXQoZXNkX3VzYjJfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBlc2RfdXNiMl9leGl0KHZvaWQpCit7CisJLyogZGVyZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCisJdXNiX2RlcmVnaXN0ZXIoJmVzZF91c2IyX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChlc2RfdXNiMl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYyBiL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYwppbmRleCAwNGEwM2Y3Li4yOGM4OGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYXNzaW5pLmMKKysrIGIvZHJpdmVycy9uZXQvY2Fzc2luaS5jCkBAIC0xMDcsMTIgKzEwNyw3IEBACiAjZGVmaW5lIGNhc19wYWdlX3VubWFwKHgpICAgIGt1bm1hcF9hdG9taWMoKHgpLCBLTV9TS0JfREFUQV9TT0ZUSVJRKQogI2RlZmluZSBDQVNfTkNQVVMgICAgICAgICAgICBudW1fb25saW5lX2NwdXMoKQogCi0jaWZkZWYgQ09ORklHX0NBU1NJTklfTkFQSQotI2RlZmluZSBVU0VfTkFQSQotI2RlZmluZSBjYXNfc2tiX3JlbGVhc2UoeCkgIG5ldGlmX3JlY2VpdmVfc2tiKHgpCi0jZWxzZQogI2RlZmluZSBjYXNfc2tiX3JlbGVhc2UoeCkgIG5ldGlmX3J4KHgpCi0jZW5kaWYKIAogLyogc2VsZWN0IHdoaWNoIGZpcm13YXJlIHRvIHVzZSAqLwogI2RlZmluZSBVU0VfSFBfV09SS0FST1VORApAQCAtMzA2Myw5ICszMDU4LDYgQEAKIHsKIAl1bnNpZ25lZCBjaGFyICplID0gJmNwLT5kZXYtPmRldl9hZGRyWzBdOwogCWludCBpOwotI2lmZGVmIENPTkZJR19DQVNTSU5JX01VTFRJQ0FTVF9SRUdfV1JJVEUKLQl1MzIgcnhjZmc7Ci0jZW5kaWYKIAljYXNfbWFjX3Jlc2V0KGNwKTsKIAogCS8qIHNldHVwIGNvcmUgYXJiaXRyYXRpb24gd2VpZ2h0IHJlZ2lzdGVyICovCkBAIC0zMTMzLDIzICszMTI1LDggQEAKIAl3cml0ZWwoMHhjMjAwLCBjcC0+cmVncyArIFJFR19NQUNfQUREUk4oNDMpKTsKIAl3cml0ZWwoMHgwMTgwLCBjcC0+cmVncyArIFJFR19NQUNfQUREUk4oNDQpKTsKIAotI2lmbmRlZiBDT05GSUdfQ0FTU0lOSV9NVUxUSUNBU1RfUkVHX1dSSVRFCiAJY3AtPm1hY19yeF9jZmcgPSBjYXNfc2V0dXBfbXVsdGljYXN0KGNwKTsKLSNlbHNlCi0JLyogV1RaOiBEbyB3aGF0IEFkcmlhbiBkaWQgaW4gY2FzX3NldF9tdWx0aWNhc3QuIERvaW5nCi0JICogYSB3cml0ZWwgZG9lcyBub3Qgc2VlbSB0byBiZSBuZWNlc3NhcnkgYmVjYXVzZSBDYXNzaW5pCi0JICogc2VlbXMgdG8gcHJlc2VydmUgdGhlIGNvbmZpZ3VyYXRpb24gd2hlbiB3ZSBkbyB0aGUgcmVzZXQuCi0JICogSWYgdGhlIGNoaXAgaXMgaW4gdHJvdWJsZSwgdGhvdWdoLCBpdCBpcyBub3QgY2xlYXIgaWYgd2UKLQkgKiBjYW4gcmVhbGx5IGNvdW50IG9uIHRoaXMgYmVoYXZpb3IuIGNhc19zZXRfbXVsdGljYXN0IHVzZXMKLQkgKiBzcGluX2xvY2tfaXJxc2F2ZSwgYnV0IHdlIGFyZSBjYWxsZWQgb25seSBpbiBjYXNfaW5pdF9odyBhbmQKLQkgKiBjYXNfaW5pdF9odyBpcyBwcm90ZWN0ZWQgYnkgY2FzX2xvY2tfYWxsLCB3aGljaCBjYWxscwotCSAqIHNwaW5fbG9ja19pcnEgKHNvIGl0IGRvZXNuJ3QgbmVlZCB0byBzYXZlIHRoZSBmbGFncywgYW5kCi0JICogd2Ugc2hvdWxkIGJlIE9LIGZvciB0aGUgd3JpdGVsLCBhcyB0aGF0IGlzIHRoZSBvbmx5Ci0JICogZGlmZmVyZW5jZSkuCi0JICovCi0JY3AtPm1hY19yeF9jZmcgPSByeGNmZyA9IGNhc19zZXR1cF9tdWx0aWNhc3QoY3ApOwotCXdyaXRlbChyeGNmZywgY3AtPnJlZ3MgKyBSRUdfTUFDX1JYX0NGRyk7Ci0jZW5kaWYKKwogCXNwaW5fbG9jaygmY3AtPnN0YXRfbG9ja1tOX1RYX1JJTkdTXSk7CiAJY2FzX2NsZWFyX21hY19lcnIoY3ApOwogCXNwaW5fdW5sb2NrKCZjcC0+c3RhdF9sb2NrW05fVFhfUklOR1NdKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhc3NpbmkuaCBiL2RyaXZlcnMvbmV0L2Nhc3NpbmkuaAppbmRleCBmZDE3YTAwLi5kYmM0Nzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYXNzaW5pLmgKKysrIGIvZHJpdmVycy9uZXQvY2Fzc2luaS5oCkBAIC0yODQ0LDEwICsyODQ0LDYgQEAKIAlhdG9taWNfdAkJcmVzZXRfdGFza19wZW5kaW5nX2FsbDsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0NBU1NJTklfUUdFX0RFQlVHCi0JYXRvbWljX3QgaW50ZXJydXB0X3NlZW47IC8qIDEgaWYgYW55IGludGVycnVwdHMgYXJlIGdldHRpbmcgdGhyb3VnaCAqLwotI2VuZGlmCi0KIAkvKiBMaW5rLWRvd24gcHJvYmxlbSB3b3JrYXJvdW5kICovCiAjZGVmaW5lIExJTktfVFJBTlNJVElPTl9VTktOT1dOIAkwCiAjZGVmaW5lIExJTktfVFJBTlNJVElPTl9PTl9GQUlMVVJFIAkxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvY2hlbHNpby9jb21tb24uaAppbmRleCAwMzZiMmRmLi4wOTJmMzFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vY29tbW9uLmgKQEAgLTI4Niw3ICsyODYsNiBAQAogCXVuc2lnbmVkIGludCAgICAgICAgICAgIGNsb2NrX21jMzsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICBjbG9ja19tYzQ7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgZXNwaV9ucG9ydHM7Ci0JdW5zaWduZWQgaW50ICAgICAgICAgICAgY2xvY2tfY3NwaTsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICBjbG9ja19lbG1lcjA7CiAJdW5zaWduZWQgY2hhciAgICAgICAgICAgbWRpb19tZGllbjsKIAl1bnNpZ25lZCBjaGFyICAgICAgICAgICBtZGlvX21kaWludjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vc3Vici5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zdWJyLmMKaW5kZXggNTNiZGUxNS4uNTk5ZDE3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9zdWJyLmMKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zdWJyLmMKQEAgLTE4NSw5ICsxODUsNiBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX0NIRUxTSU9fVDFfQ09VR0FSCi0jaW5jbHVkZSAiY3NwaS5oIgotI2VuZGlmCiAjaWZkZWYgQ09ORklHX0NIRUxTSU9fVDFfMUcKICNpbmNsdWRlICJmcGdhX2RlZnMuaCIKIApAQCAtMjgwLDcgKzI3Nyw3IEBACiAJdDFfdHBpX3dyaXRlKGFkYXB0ZXIsIEFfRUxNRVIwX1BPUlQwX01JMV9DRkcsIHZhbCk7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19DSEVMU0lPX1QxXzFHKSB8fCBkZWZpbmVkKENPTkZJR19DSEVMU0lPX1QxX0NPVUdBUikKKyNpZiBkZWZpbmVkKENPTkZJR19DSEVMU0lPX1QxXzFHKQogLyoKICAqIEVsbWVyIE1JMSBNRElPIHJlYWQvd3JpdGUgb3BlcmF0aW9ucy4KICAqLwpAQCAtMzE3LDcgKzMxNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19DSEVMU0lPX1QxXzFHKSB8fCBkZWZpbmVkKENPTkZJR19DSEVMU0lPX1QxX0NPVUdBUikKKyNpZiBkZWZpbmVkKENPTkZJR19DSEVMU0lPX1QxXzFHKQogc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX29wcyBtaTFfbWRpb19vcHMgPSB7CiAJLmluaXQgPSBtaTFfbWRpb19pbml0LAogCS5yZWFkID0gbWkxX21kaW9fcmVhZCwKQEAgLTc1MiwzMSArNzQ5LDYgQEAKIAkJCQkJIG1vZF9kZXRlY3QgPyAicmVtb3ZlZCIgOiAiaW5zZXJ0ZWQiKTsKIAkJfQogCQlicmVhazsKLSNpZmRlZiBDT05GSUdfQ0hFTFNJT19UMV9DT1VHQVIKLQljYXNlIENIQlRfQk9BUkRfQ09VR0FSOgotCQlpZiAoYWRhcHRlci0+cGFyYW1zLm5wb3J0cyA9PSAxKSB7Ci0JCQlpZiAoY2F1c2UgJiBFTE1FUjBfR1BfQklUMSkgeyAgICAgICAgIC8qIFZpdGVzc2UgTUFDICovCi0JCQkJc3RydWN0IGNtYWMgKm1hYyA9IGFkYXB0ZXItPnBvcnRbMF0ubWFjOwotCQkJCW1hYy0+b3BzLT5pbnRlcnJ1cHRfaGFuZGxlcihtYWMpOwotCQkJfQotCQkJaWYgKGNhdXNlICYgRUxNRVIwX0dQX0JJVDUpIHsgICAgIC8qIFhQQUsgTU9EX0RFVEVDVCAqLwotCQkJfQotCQl9IGVsc2UgewotCQkJaW50IGksIHBvcnRfYml0OwotCi0JCQlmb3JfZWFjaF9wb3J0KGFkYXB0ZXIsIGkpIHsKLQkJCQlwb3J0X2JpdCA9IGkgPyBpICsgMSA6IDA7Ci0JCQkJaWYgKCEoY2F1c2UgJiAoMSA8PCBwb3J0X2JpdCkpKQotCQkJCQljb250aW51ZTsKLQotCQkJCXBoeSA9IGFkYXB0ZXItPnBvcnRbaV0ucGh5OwotCQkJCXBoeV9jYXVzZSA9IHBoeS0+b3BzLT5pbnRlcnJ1cHRfaGFuZGxlcihwaHkpOwotCQkJCWlmIChwaHlfY2F1c2UgJiBjcGh5X2NhdXNlX2xpbmtfY2hhbmdlKQotCQkJCQl0MV9saW5rX2NoYW5nZWQoYWRhcHRlciwgaSk7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0jZW5kaWYKIAl9CiAJdDFfdHBpX3dyaXRlKGFkYXB0ZXIsIEFfRUxNRVIwX0lOVF9DQVVTRSwgY2F1c2UpOwogCXJldHVybiAwOwpAQCAtOTU1LDcgKzkyNyw2IEBACiAJY2FzZSBDSEJUX0JPQVJEX04xMTA6CiAJY2FzZSBDSEJUX0JPQVJEX04yMTA6CiAJY2FzZSBDSEJUX0JPQVJEX0NIVDIxMDoKLQljYXNlIENIQlRfQk9BUkRfQ09VR0FSOgogCQl0MV90cGlfcGFyKGFkYXB0ZXIsIDB4Zik7CiAJCXQxX3RwaV93cml0ZShhZGFwdGVyLCBBX0VMTUVSMF9HUE8sIDB4ODAwKTsKIAkJYnJlYWs7CkBAIC0xMDA0LDEwICs5NzUsNiBAQAogCQkgICAgICAgYWRhcHRlci0+cmVncyArIEFfTUM1X0NPTkZJRyk7CiAJfQogCi0jaWZkZWYgQ09ORklHX0NIRUxTSU9fVDFfQ09VR0FSCi0JaWYgKGFkYXB0ZXItPmNzcGkgJiYgdDFfY3NwaV9pbml0KGFkYXB0ZXItPmNzcGkpKQotCQlnb3RvIG91dF9lcnI7Ci0jZW5kaWYKIAlpZiAoYWRhcHRlci0+ZXNwaSAmJiB0MV9lc3BpX2luaXQoYWRhcHRlci0+ZXNwaSwgYmktPmNoaXBfbWFjLAogCQkJCQkgIGJpLT5lc3BpX25wb3J0cykpCiAJCWdvdG8gb3V0X2VycjsKQEAgLTEwNjEsMTAgKzEwMjgsNiBAQAogCQl0MV90cF9kZXN0cm95KGFkYXB0ZXItPnRwKTsKIAlpZiAoYWRhcHRlci0+ZXNwaSkKIAkJdDFfZXNwaV9kZXN0cm95KGFkYXB0ZXItPmVzcGkpOwotI2lmZGVmIENPTkZJR19DSEVMU0lPX1QxX0NPVUdBUgotCWlmIChhZGFwdGVyLT5jc3BpKQotCQl0MV9jc3BpX2Rlc3Ryb3koYWRhcHRlci0+Y3NwaSk7Ci0jZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfbGlua19jb25maWcoc3RydWN0IGxpbmtfY29uZmlnICpsYywKQEAgLTEwODQsMTQgKzEwNDcsNiBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19DSEVMU0lPX1QxX0NPVUdBUgotCWlmIChiaS0+Y2xvY2tfY3NwaSAmJiAhKGFkYXB0ZXItPmNzcGkgPSB0MV9jc3BpX2NyZWF0ZShhZGFwdGVyKSkpIHsKLQkJcHJfZXJyKCIlczogQ1NQSSBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsCi0JCSAgICAgICBhZGFwdGVyLT5uYW1lKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0jZW5kaWYKLQogLyoKICAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCBob2xkIHRoZSBTVyBzdGF0ZSBvZgogICogdGhlIFRlcm1pbmF0b3IgSFcgbW9kdWxlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NuaWMuYyBiL2RyaXZlcnMvbmV0L2NuaWMuYwppbmRleCA4MDQ3MTI2Li4wOTYxMDMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jbmljLmMKKysrIGIvZHJpdmVycy9uZXQvY25pYy5jCkBAIC00MCw5ICs0MCw5IEBACiAKICNpbmNsdWRlICJjbmljX2lmLmgiCiAjaW5jbHVkZSAiYm54Mi5oIgotI2luY2x1ZGUgImJueDJ4X3JlZy5oIgotI2luY2x1ZGUgImJueDJ4X2Z3X2RlZnMuaCIKLSNpbmNsdWRlICJibngyeF9oc2kuaCIKKyNpbmNsdWRlICJibngyeC9ibngyeF9yZWcuaCIKKyNpbmNsdWRlICJibngyeC9ibngyeF9md19kZWZzLmgiCisjaW5jbHVkZSAiYm54MngvYm54MnhfaHNpLmgiCiAjaW5jbHVkZSAiLi4vc2NzaS9ibngyaS81N3h4X2lzY3NpX2NvbnN0YW50cy5oIgogI2luY2x1ZGUgIi4uL3Njc2kvYm54MmkvNTd4eF9pc2NzaV9oc2kuaCIKICNpbmNsdWRlICJjbmljLmgiCkBAIC0yNTcsNyArMjU3LDcgQEAKIHsKIAl1MzIgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBNQVhfSVNDU0lfVEJMX1NaOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgY3AtPm1heF9jaWRfc3BhY2U7IGkrKykgewogCQlpZiAoY3AtPmN0eF90YmxbaV0uY2lkID09IGNpZCkgewogCQkJKmw1X2NpZCA9IGk7CiAJCQlyZXR1cm4gMDsKQEAgLTgwNCw3ICs4MDQsNyBAQAogCWNuaWNfZnJlZV9kbWEoZGV2LCAmY3AtPmNvbm5fYnVmX2luZm8pOwogCWNuaWNfZnJlZV9kbWEoZGV2LCAmY3AtPmt3cV9pbmZvKTsKIAljbmljX2ZyZWVfZG1hKGRldiwgJmNwLT5rd3FfMTZfZGF0YV9pbmZvKTsKLQljbmljX2ZyZWVfZG1hKGRldiwgJmNwLT5rY3FfaW5mbyk7CisJY25pY19mcmVlX2RtYShkZXYsICZjcC0+a2NxMS5kbWEpOwogCWtmcmVlKGNwLT5pc2NzaV90YmwpOwogCWNwLT5pc2NzaV90YmwgPSBOVUxMOwogCWtmcmVlKGNwLT5jdHhfdGJsKTsKQEAgLTg2Myw2ICs4NjMsMzcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBjbmljX2FsbG9jX2tjcShzdHJ1Y3QgY25pY19kZXYgKmRldiwgc3RydWN0IGtjcV9pbmZvICppbmZvKQoreworCWludCBlcnIsIGksIGlzX2JueDIgPSAwOworCXN0cnVjdCBrY3FlICoqa2NxOworCisJaWYgKHRlc3RfYml0KENOSUNfRl9CTlgyX0NMQVNTLCAmZGV2LT5mbGFncykpCisJCWlzX2JueDIgPSAxOworCisJZXJyID0gY25pY19hbGxvY19kbWEoZGV2LCAmaW5mby0+ZG1hLCBLQ1FfUEFHRV9DTlQsIGlzX2JueDIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlrY3EgPSAoc3RydWN0IGtjcWUgKiopIGluZm8tPmRtYS5wZ19hcnI7CisJaW5mby0+a2NxID0ga2NxOworCisJaWYgKGlzX2JueDIpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IEtDUV9QQUdFX0NOVDsgaSsrKSB7CisJCXN0cnVjdCBibngyeF9iZF9jaGFpbl9uZXh0ICpuZXh0ID0KKwkJCShzdHJ1Y3QgYm54MnhfYmRfY2hhaW5fbmV4dCAqKSAma2NxW2ldW01BWF9LQ1FFX0NOVF07CisJCWludCBqID0gaSArIDE7CisKKwkJaWYgKGogPj0gS0NRX1BBR0VfQ05UKQorCQkJaiA9IDA7CisJCW5leHQtPmFkZHJfaGkgPSAodTY0KSBpbmZvLT5kbWEucGdfbWFwX2FycltqXSA+PiAzMjsKKwkJbmV4dC0+YWRkcl9sbyA9IGluZm8tPmRtYS5wZ19tYXBfYXJyW2pdICYgMHhmZmZmZmZmZjsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgY25pY19hbGxvY19sMl9yaW5ncyhzdHJ1Y3QgY25pY19kZXYgKmRldiwgaW50IHBhZ2VzKQogewogCXN0cnVjdCBjbmljX2xvY2FsICpjcCA9IGRldi0+Y25pY19wcml2OwpAQCAtOTU0LDEwICs5ODUsOSBAQAogCQlnb3RvIGVycm9yOwogCWNwLT5rd3EgPSAoc3RydWN0IGt3cWUgKiopIGNwLT5rd3FfaW5mby5wZ19hcnI7CiAKLQlyZXQgPSBjbmljX2FsbG9jX2RtYShkZXYsICZjcC0+a2NxX2luZm8sIEtDUV9QQUdFX0NOVCwgMSk7CisJcmV0ID0gY25pY19hbGxvY19rY3EoZGV2LCAmY3AtPmtjcTEpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3I7Ci0JY3AtPmtjcSA9IChzdHJ1Y3Qga2NxZSAqKikgY3AtPmtjcV9pbmZvLnBnX2FycjsKIAogCXJldCA9IGNuaWNfYWxsb2NfY29udGV4dChkZXYpOwogCWlmIChyZXQpCkBAIC05ODEsMTcgKzEwMTEsMTAgQEAKIHN0YXRpYyBpbnQgY25pY19hbGxvY19ibngyeF9jb250ZXh0KHN0cnVjdCBjbmljX2RldiAqZGV2KQogewogCXN0cnVjdCBjbmljX2xvY2FsICpjcCA9IGRldi0+Y25pY19wcml2OwotCXN0cnVjdCBjbmljX2V0aF9kZXYgKmV0aGRldiA9IGNwLT5ldGhkZXY7CiAJaW50IGN0eF9ibGtfc2l6ZSA9IGNwLT5ldGhkZXYtPmN0eF9ibGtfc2l6ZTsKLQlpbnQgdG90YWxfbWVtLCBibGtzLCBpLCBjaWRfc3BhY2U7CisJaW50IHRvdGFsX21lbSwgYmxrcywgaTsKIAotCWlmIChCTlgyWF9JU0NTSV9TVEFSVF9DSUQgPCBldGhkZXYtPnN0YXJ0aW5nX2NpZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQljaWRfc3BhY2UgPSBNQVhfSVNDU0lfVEJMX1NaICsKLQkJICAgIChCTlgyWF9JU0NTSV9TVEFSVF9DSUQgLSBldGhkZXYtPnN0YXJ0aW5nX2NpZCk7Ci0KLQl0b3RhbF9tZW0gPSBCTlgyWF9DT05URVhUX01FTV9TSVpFICogY2lkX3NwYWNlOworCXRvdGFsX21lbSA9IEJOWDJYX0NPTlRFWFRfTUVNX1NJWkUgKiBjcC0+bWF4X2NpZF9zcGFjZTsKIAlibGtzID0gdG90YWxfbWVtIC8gY3R4X2Jsa19zaXplOwogCWlmICh0b3RhbF9tZW0gJSBjdHhfYmxrX3NpemUpCiAJCWJsa3MrKzsKQEAgLTEwMzUsMTYgKzEwNTgsMjcgQEAKIHN0YXRpYyBpbnQgY25pY19hbGxvY19ibngyeF9yZXNjKHN0cnVjdCBjbmljX2RldiAqZGV2KQogewogCXN0cnVjdCBjbmljX2xvY2FsICpjcCA9IGRldi0+Y25pY19wcml2OworCXN0cnVjdCBjbmljX2V0aF9kZXYgKmV0aGRldiA9IGNwLT5ldGhkZXY7CisJdTMyIHN0YXJ0X2NpZCA9IGV0aGRldi0+c3RhcnRpbmdfY2lkOwogCWludCBpLCBqLCBuLCByZXQsIHBhZ2VzOwogCXN0cnVjdCBjbmljX2RtYSAqa3dxXzE2X2RtYSA9ICZjcC0+a3dxXzE2X2RhdGFfaW5mbzsKIAorCWNwLT5tYXhfY2lkX3NwYWNlID0gTUFYX0lTQ1NJX1RCTF9TWjsKKwljcC0+aXNjc2lfc3RhcnRfY2lkID0gc3RhcnRfY2lkOworCWlmIChzdGFydF9jaWQgPCBCTlgyWF9JU0NTSV9TVEFSVF9DSUQpIHsKKwkJdTMyIGRlbHRhID0gQk5YMlhfSVNDU0lfU1RBUlRfQ0lEIC0gc3RhcnRfY2lkOworCisJCWNwLT5pc2NzaV9zdGFydF9jaWQgPSBCTlgyWF9JU0NTSV9TVEFSVF9DSUQ7CisJCWNwLT5tYXhfY2lkX3NwYWNlICs9IGRlbHRhOworCX0KKwogCWNwLT5pc2NzaV90YmwgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY25pY19pc2NzaSkgKiBNQVhfSVNDU0lfVEJMX1NaLAogCQkJCUdGUF9LRVJORUwpOwogCWlmICghY3AtPmlzY3NpX3RibCkKIAkJZ290byBlcnJvcjsKIAogCWNwLT5jdHhfdGJsID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNuaWNfY29udGV4dCkgKgotCQkJCSAgTUFYX0NOSUNfTDVfQ09OVEVYVCwgR0ZQX0tFUk5FTCk7CisJCQkJY3AtPm1heF9jaWRfc3BhY2UsIEdGUF9LRVJORUwpOwogCWlmICghY3AtPmN0eF90YmwpCiAJCWdvdG8gZXJyb3I7CiAKQEAgLTEwNTMsNyArMTA4Nyw3IEBACiAJCWNwLT5jdHhfdGJsW2ldLnVscF9wcm90b19pZCA9IENOSUNfVUxQX0lTQ1NJOwogCX0KIAotCXBhZ2VzID0gUEFHRV9BTElHTihNQVhfQ05JQ19MNV9DT05URVhUICogQ05JQ19LV1ExNl9EQVRBX1NJWkUpIC8KKwlwYWdlcyA9IFBBR0VfQUxJR04oY3AtPm1heF9jaWRfc3BhY2UgKiBDTklDX0tXUTE2X0RBVEFfU0laRSkgLwogCQlQQUdFX1NJWkU7CiAKIAlyZXQgPSBjbmljX2FsbG9jX2RtYShkZXYsIGt3cV8xNl9kbWEsIHBhZ2VzLCAwKTsKQEAgLTEwNjEsNyArMTA5NSw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJbiA9IFBBR0VfU0laRSAvIENOSUNfS1dRMTZfREFUQV9TSVpFOwotCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgTUFYX0lTQ1NJX1RCTF9TWjsgaSsrKSB7CisJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBjcC0+bWF4X2NpZF9zcGFjZTsgaSsrKSB7CiAJCWxvbmcgb2ZmID0gQ05JQ19LV1ExNl9EQVRBX1NJWkUgKiAoaSAlIG4pOwogCiAJCWNwLT5jdHhfdGJsW2ldLmt3cWVfZGF0YSA9IGt3cV8xNl9kbWEtPnBnX2FycltqXSArIG9mZjsKQEAgLTEwNzIsMjIgKzExMDYsOSBAQAogCQkJaisrOwogCX0KIAotCXJldCA9IGNuaWNfYWxsb2NfZG1hKGRldiwgJmNwLT5rY3FfaW5mbywgS0NRX1BBR0VfQ05ULCAwKTsKKwlyZXQgPSBjbmljX2FsbG9jX2tjcShkZXYsICZjcC0+a2NxMSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcjsKLQljcC0+a2NxID0gKHN0cnVjdCBrY3FlICoqKSBjcC0+a2NxX2luZm8ucGdfYXJyOwotCi0JZm9yIChpID0gMDsgaSA8IEtDUV9QQUdFX0NOVDsgaSsrKSB7Ci0JCXN0cnVjdCBibngyeF9iZF9jaGFpbl9uZXh0ICpuZXh0ID0KLQkJCShzdHJ1Y3QgYm54MnhfYmRfY2hhaW5fbmV4dCAqKQotCQkJJmNwLT5rY3FbaV1bTUFYX0tDUUVfQ05UXTsKLQkJaW50IGogPSBpICsgMTsKLQotCQlpZiAoaiA+PSBLQ1FfUEFHRV9DTlQpCi0JCQlqID0gMDsKLQkJbmV4dC0+YWRkcl9oaSA9ICh1NjQpIGNwLT5rY3FfaW5mby5wZ19tYXBfYXJyW2pdID4+IDMyOwotCQluZXh0LT5hZGRyX2xvID0gY3AtPmtjcV9pbmZvLnBnX21hcF9hcnJbal0gJiAweGZmZmZmZmZmOwotCX0KIAogCXBhZ2VzID0gUEFHRV9BTElHTihCTlgyWF9JU0NTSV9OVU1fQ09OTkVDVElPTlMgKgogCQkJICAgQk5YMlhfSVNDU0lfQ09OTl9CVUZfU0laRSkgLyBQQUdFX1NJWkU7CkBAIC0yMTIwLDE4ICsyMTQxLDIwIEBACiAJcmV0dXJuIGlkeDsKIH0KIAotc3RhdGljIGludCBjbmljX2dldF9rY3FlcyhzdHJ1Y3QgY25pY19kZXYgKmRldiwgdTE2IGh3X3Byb2QsIHUxNiAqc3dfcHJvZCkKK3N0YXRpYyBpbnQgY25pY19nZXRfa2NxZXMoc3RydWN0IGNuaWNfZGV2ICpkZXYsIHN0cnVjdCBrY3FfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgY25pY19sb2NhbCAqY3AgPSBkZXYtPmNuaWNfcHJpdjsKLQl1MTYgaSwgcmksIGxhc3Q7CisJdTE2IGksIHJpLCBod19wcm9kLCBsYXN0OwogCXN0cnVjdCBrY3FlICprY3FlOwogCWludCBrY3FlX2NudCA9IDAsIGxhc3RfY250ID0gMDsKIAotCWkgPSByaSA9IGxhc3QgPSAqc3dfcHJvZDsKKwlpID0gcmkgPSBsYXN0ID0gaW5mby0+c3dfcHJvZF9pZHg7CiAJcmkgJj0gTUFYX0tDUV9JRFg7CisJaHdfcHJvZCA9ICppbmZvLT5od19wcm9kX2lkeF9wdHI7CisJaHdfcHJvZCA9IGNwLT5od19pZHgoaHdfcHJvZCk7CiAKIAl3aGlsZSAoKGkgIT0gaHdfcHJvZCkgJiYgKGtjcWVfY250IDwgTUFYX0NPTVBMRVRFRF9LQ1FFKSkgewotCQlrY3FlID0gJmNwLT5rY3FbS0NRX1BHKHJpKV1bS0NRX0lEWChyaSldOworCQlrY3FlID0gJmluZm8tPmtjcVtLQ1FfUEcocmkpXVtLQ1FfSURYKHJpKV07CiAJCWNwLT5jb21wbGV0ZWRfa2NxW2tjcWVfY250KytdID0ga2NxZTsKIAkJaSA9IGNwLT5uZXh0X2lkeChpKTsKIAkJcmkgPSBpICYgTUFYX0tDUV9JRFg7CkBAIC0yMTQxLDcgKzIxNjQsNyBAQAogCQl9CiAJfQogCi0JKnN3X3Byb2QgPSBsYXN0OworCWluZm8tPnN3X3Byb2RfaWR4ID0gbGFzdDsKIAlyZXR1cm4gbGFzdF9jbnQ7CiB9CiAKQEAgLTIxODQsNiArMjIwNyw5IEBACiAJdTE2IHR4X2NvbnMgPSAqY3AtPnR4X2NvbnNfcHRyOwogCWludCBjb21wID0gMDsKIAorCWlmICghdGVzdF9iaXQoQ05JQ19GX0NOSUNfVVAsICZjcC0+ZGV2LT5mbGFncykpCisJCXJldHVybjsKKwogCWlmIChjcC0+dHhfY29ucyAhPSB0eF9jb25zIHx8IGNwLT5yeF9jb25zICE9IHJ4X2NvbnMpIHsKIAkJaWYgKHRlc3RfYml0KENOSUNfTENMX0ZMX0wyX1dBSVQsICZjcC0+Y25pY19sb2NhbF9mbGFncykpCiAJCQljb21wID0gY25pY19sMl9jb21wbGV0aW9uKGNwKTsKQEAgLTIxOTcsMTAzICsyMjIzLDc5IEBACiAJCWNsZWFyX2JpdChDTklDX0xDTF9GTF9MMl9XQUlULCAmY3AtPmNuaWNfbG9jYWxfZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IGNuaWNfc2VydmljZV9ibngyKHZvaWQgKmRhdGEsIHZvaWQgKnN0YXR1c19ibGspCitzdGF0aWMgdTMyIGNuaWNfc2VydmljZV9ibngyX3F1ZXVlcyhzdHJ1Y3QgY25pY19kZXYgKmRldikKIHsKLQlzdHJ1Y3QgY25pY19kZXYgKmRldiA9IGRhdGE7Ci0Jc3RydWN0IHN0YXR1c19ibG9jayAqc2JsayA9IHN0YXR1c19ibGs7CiAJc3RydWN0IGNuaWNfbG9jYWwgKmNwID0gZGV2LT5jbmljX3ByaXY7Ci0JdTMyIHN0YXR1c19pZHggPSBzYmxrLT5zdGF0dXNfaWR4OwotCXUxNiBod19wcm9kLCBzd19wcm9kOworCXUzMiBzdGF0dXNfaWR4ID0gKHUxNikgKmNwLT5rY3ExLnN0YXR1c19pZHhfcHRyOwogCWludCBrY3FlX2NudDsKIAotCWlmICh1bmxpa2VseSghdGVzdF9iaXQoQ05JQ19GX0NOSUNfVVAsICZkZXYtPmZsYWdzKSkpCi0JCXJldHVybiBzdGF0dXNfaWR4OwotCiAJY3AtPmt3cV9jb25faWR4ID0gKmNwLT5rd3FfY29uX2lkeF9wdHI7CiAKLQlod19wcm9kID0gc2Jsay0+c3RhdHVzX2NvbXBsZXRpb25fcHJvZHVjZXJfaW5kZXg7Ci0Jc3dfcHJvZCA9IGNwLT5rY3FfcHJvZF9pZHg7Ci0Jd2hpbGUgKHN3X3Byb2QgIT0gaHdfcHJvZCkgewotCQlrY3FlX2NudCA9IGNuaWNfZ2V0X2tjcWVzKGRldiwgaHdfcHJvZCwgJnN3X3Byb2QpOwotCQlpZiAoa2NxZV9jbnQgPT0gMCkKLQkJCWdvdG8gZG9uZTsKKwl3aGlsZSAoKGtjcWVfY250ID0gY25pY19nZXRfa2NxZXMoZGV2LCAmY3AtPmtjcTEpKSkgewogCiAJCXNlcnZpY2Vfa2NxZXMoZGV2LCBrY3FlX2NudCk7CiAKIAkJLyogVGVsbCBjb21waWxlciB0aGF0IHN0YXR1c19ibGsgZmllbGRzIGNhbiBjaGFuZ2UuICovCiAJCWJhcnJpZXIoKTsKLQkJaWYgKHN0YXR1c19pZHggIT0gc2Jsay0+c3RhdHVzX2lkeCkgewotCQkJc3RhdHVzX2lkeCA9IHNibGstPnN0YXR1c19pZHg7CisJCWlmIChzdGF0dXNfaWR4ICE9ICpjcC0+a2NxMS5zdGF0dXNfaWR4X3B0cikgeworCQkJc3RhdHVzX2lkeCA9ICh1MTYpICpjcC0+a2NxMS5zdGF0dXNfaWR4X3B0cjsKIAkJCWNwLT5rd3FfY29uX2lkeCA9ICpjcC0+a3dxX2Nvbl9pZHhfcHRyOwotCQkJaHdfcHJvZCA9IHNibGstPnN0YXR1c19jb21wbGV0aW9uX3Byb2R1Y2VyX2luZGV4OwogCQl9IGVsc2UKIAkJCWJyZWFrOwogCX0KIAotZG9uZToKLQlDTklDX1dSMTYoZGV2LCBjcC0+a2NxX2lvX2FkZHIsIHN3X3Byb2QpOwotCi0JY3AtPmtjcV9wcm9kX2lkeCA9IHN3X3Byb2Q7CisJQ05JQ19XUjE2KGRldiwgY3AtPmtjcTEuaW9fYWRkciwgY3AtPmtjcTEuc3dfcHJvZF9pZHgpOwogCiAJY25pY19jaGtfcGt0X3JpbmdzKGNwKTsKKwogCXJldHVybiBzdGF0dXNfaWR4OwogfQogCitzdGF0aWMgaW50IGNuaWNfc2VydmljZV9ibngyKHZvaWQgKmRhdGEsIHZvaWQgKnN0YXR1c19ibGspCit7CisJc3RydWN0IGNuaWNfZGV2ICpkZXYgPSBkYXRhOworCXN0cnVjdCBjbmljX2xvY2FsICpjcCA9IGRldi0+Y25pY19wcml2OworCXUzMiBzdGF0dXNfaWR4ID0gKmNwLT5rY3ExLnN0YXR1c19pZHhfcHRyOworCisJaWYgKHVubGlrZWx5KCF0ZXN0X2JpdChDTklDX0ZfQ05JQ19VUCwgJmRldi0+ZmxhZ3MpKSkKKwkJcmV0dXJuIHN0YXR1c19pZHg7CisKKwlyZXR1cm4gY25pY19zZXJ2aWNlX2JueDJfcXVldWVzKGRldik7Cit9CisKIHN0YXRpYyB2b2lkIGNuaWNfc2VydmljZV9ibngyX21zaXgodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBjbmljX2RldiAqZGV2ID0gKHN0cnVjdCBjbmljX2RldiAqKSBkYXRhOwogCXN0cnVjdCBjbmljX2xvY2FsICpjcCA9IGRldi0+Y25pY19wcml2OwotCXN0cnVjdCBzdGF0dXNfYmxvY2tfbXNpeCAqc3RhdHVzX2JsayA9IGNwLT5zdGF0dXNfYmxrLmJueDI7Ci0JdTMyIHN0YXR1c19pZHggPSBzdGF0dXNfYmxrLT5zdGF0dXNfaWR4OwotCXUxNiBod19wcm9kLCBzd19wcm9kOwotCWludCBrY3FlX2NudDsKIAotCWNwLT5rd3FfY29uX2lkeCA9IHN0YXR1c19ibGstPnN0YXR1c19jbWRfY29uc3VtZXJfaW5kZXg7CisJY3AtPmxhc3Rfc3RhdHVzX2lkeCA9IGNuaWNfc2VydmljZV9ibngyX3F1ZXVlcyhkZXYpOwogCi0JaHdfcHJvZCA9IHN0YXR1c19ibGstPnN0YXR1c19jb21wbGV0aW9uX3Byb2R1Y2VyX2luZGV4OwotCXN3X3Byb2QgPSBjcC0+a2NxX3Byb2RfaWR4OwotCXdoaWxlIChzd19wcm9kICE9IGh3X3Byb2QpIHsKLQkJa2NxZV9jbnQgPSBjbmljX2dldF9rY3FlcyhkZXYsIGh3X3Byb2QsICZzd19wcm9kKTsKLQkJaWYgKGtjcWVfY250ID09IDApCi0JCQlnb3RvIGRvbmU7Ci0KLQkJc2VydmljZV9rY3FlcyhkZXYsIGtjcWVfY250KTsKLQotCQkvKiBUZWxsIGNvbXBpbGVyIHRoYXQgc3RhdHVzX2JsayBmaWVsZHMgY2FuIGNoYW5nZS4gKi8KLQkJYmFycmllcigpOwotCQlpZiAoc3RhdHVzX2lkeCAhPSBzdGF0dXNfYmxrLT5zdGF0dXNfaWR4KSB7Ci0JCQlzdGF0dXNfaWR4ID0gc3RhdHVzX2Jsay0+c3RhdHVzX2lkeDsKLQkJCWNwLT5rd3FfY29uX2lkeCA9IHN0YXR1c19ibGstPnN0YXR1c19jbWRfY29uc3VtZXJfaW5kZXg7Ci0JCQlod19wcm9kID0gc3RhdHVzX2Jsay0+c3RhdHVzX2NvbXBsZXRpb25fcHJvZHVjZXJfaW5kZXg7Ci0JCX0gZWxzZQotCQkJYnJlYWs7Ci0JfQotCi1kb25lOgotCUNOSUNfV1IxNihkZXYsIGNwLT5rY3FfaW9fYWRkciwgc3dfcHJvZCk7Ci0JY3AtPmtjcV9wcm9kX2lkeCA9IHN3X3Byb2Q7Ci0KLQljbmljX2Noa19wa3RfcmluZ3MoY3ApOwotCi0JY3AtPmxhc3Rfc3RhdHVzX2lkeCA9IHN0YXR1c19pZHg7CiAJQ05JQ19XUihkZXYsIEJOWDJfUENJQ0ZHX0lOVF9BQ0tfQ01ELCBjcC0+aW50X251bSB8CiAJCUJOWDJfUENJQ0ZHX0lOVF9BQ0tfQ01EX0lOREVYX1ZBTElEIHwgY3AtPmxhc3Rfc3RhdHVzX2lkeCk7CiB9CiAKK3N0YXRpYyB2b2lkIGNuaWNfZG9pcnEoc3RydWN0IGNuaWNfZGV2ICpkZXYpCit7CisJc3RydWN0IGNuaWNfbG9jYWwgKmNwID0gZGV2LT5jbmljX3ByaXY7CisJdTE2IHByb2QgPSBjcC0+a2NxMS5zd19wcm9kX2lkeCAmIE1BWF9LQ1FfSURYOworCisJaWYgKGxpa2VseSh0ZXN0X2JpdChDTklDX0ZfQ05JQ19VUCwgJmRldi0+ZmxhZ3MpKSkgeworCQlwcmVmZXRjaChjcC0+c3RhdHVzX2Jsay5nZW4pOworCQlwcmVmZXRjaCgmY3AtPmtjcTEua2NxW0tDUV9QRyhwcm9kKV1bS0NRX0lEWChwcm9kKV0pOworCisJCXRhc2tsZXRfc2NoZWR1bGUoJmNwLT5jbmljX2lycV90YXNrKTsKKwl9Cit9CisKIHN0YXRpYyBpcnFyZXR1cm5fdCBjbmljX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpCiB7CiAJc3RydWN0IGNuaWNfZGV2ICpkZXYgPSBkZXZfaW5zdGFuY2U7CiAJc3RydWN0IGNuaWNfbG9jYWwgKmNwID0gZGV2LT5jbmljX3ByaXY7Ci0JdTE2IHByb2QgPSBjcC0+a2NxX3Byb2RfaWR4ICYgTUFYX0tDUV9JRFg7CiAKIAlpZiAoY3AtPmFja19pbnQpCiAJCWNwLT5hY2tfaW50KGRldik7CiAKLQlwcmVmZXRjaChjcC0+c3RhdHVzX2Jsay5nZW4pOwotCXByZWZldGNoKCZjcC0+a2NxW0tDUV9QRyhwcm9kKV1bS0NRX0lEWChwcm9kKV0pOwotCi0JaWYgKGxpa2VseSh0ZXN0X2JpdChDTklDX0ZfQ05JQ19VUCwgJmRldi0+ZmxhZ3MpKSkKLQkJdGFza2xldF9zY2hlZHVsZSgmY3AtPmNuaWNfaXJxX3Rhc2spOworCWNuaWNfZG9pcnEoZGV2KTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTIzMjQsNjAgKzIzMjYsNTAgQEAKIAkJCSAgIElHVV9JTlRfRElTQUJMRSwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNuaWNfc2VydmljZV9ibngyeF9iaCh1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdTMyIGNuaWNfc2VydmljZV9ibngyeF9rY3Eoc3RydWN0IGNuaWNfZGV2ICpkZXYsIHN0cnVjdCBrY3FfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgY25pY19kZXYgKmRldiA9IChzdHJ1Y3QgY25pY19kZXYgKikgZGF0YTsKLQlzdHJ1Y3QgY25pY19sb2NhbCAqY3AgPSBkZXYtPmNuaWNfcHJpdjsKLQl1MTYgaHdfcHJvZCwgc3dfcHJvZDsKLQlzdHJ1Y3QgY3N0b3JtX3N0YXR1c19ibG9ja19jICpzYmxrID0KLQkJJmNwLT5zdGF0dXNfYmxrLmJueDJ4LT5jX3N0YXR1c19ibG9jazsKLQl1MzIgc3RhdHVzX2lkeCA9IHNibGstPnN0YXR1c19ibG9ja19pbmRleDsKKwl1MzIgbGFzdF9zdGF0dXMgPSAqaW5mby0+c3RhdHVzX2lkeF9wdHI7CiAJaW50IGtjcWVfY250OwogCi0JaWYgKHVubGlrZWx5KCF0ZXN0X2JpdChDTklDX0ZfQ05JQ19VUCwgJmRldi0+ZmxhZ3MpKSkKLQkJcmV0dXJuOwotCi0JaHdfcHJvZCA9IHNibGstPmluZGV4X3ZhbHVlc1tIQ19JTkRFWF9DX0lTQ1NJX0VRX0NPTlNdOwotCWh3X3Byb2QgPSBjcC0+aHdfaWR4KGh3X3Byb2QpOwotCXN3X3Byb2QgPSBjcC0+a2NxX3Byb2RfaWR4OwotCXdoaWxlIChzd19wcm9kICE9IGh3X3Byb2QpIHsKLQkJa2NxZV9jbnQgPSBjbmljX2dldF9rY3FlcyhkZXYsIGh3X3Byb2QsICZzd19wcm9kKTsKLQkJaWYgKGtjcWVfY250ID09IDApCi0JCQlnb3RvIGRvbmU7CisJd2hpbGUgKChrY3FlX2NudCA9IGNuaWNfZ2V0X2tjcWVzKGRldiwgaW5mbykpKSB7CiAKIAkJc2VydmljZV9rY3FlcyhkZXYsIGtjcWVfY250KTsKIAogCQkvKiBUZWxsIGNvbXBpbGVyIHRoYXQgc2JsayBmaWVsZHMgY2FuIGNoYW5nZS4gKi8KIAkJYmFycmllcigpOwotCQlpZiAoc3RhdHVzX2lkeCA9PSBzYmxrLT5zdGF0dXNfYmxvY2tfaW5kZXgpCisJCWlmIChsYXN0X3N0YXR1cyA9PSAqaW5mby0+c3RhdHVzX2lkeF9wdHIpCiAJCQlicmVhazsKIAotCQlzdGF0dXNfaWR4ID0gc2Jsay0+c3RhdHVzX2Jsb2NrX2luZGV4OwotCQlod19wcm9kID0gc2Jsay0+aW5kZXhfdmFsdWVzW0hDX0lOREVYX0NfSVNDU0lfRVFfQ09OU107Ci0JCWh3X3Byb2QgPSBjcC0+aHdfaWR4KGh3X3Byb2QpOworCQlsYXN0X3N0YXR1cyA9ICppbmZvLT5zdGF0dXNfaWR4X3B0cjsKIAl9CisJcmV0dXJuIGxhc3Rfc3RhdHVzOworfQogCi1kb25lOgotCUNOSUNfV1IxNihkZXYsIGNwLT5rY3FfaW9fYWRkciwgc3dfcHJvZCArIE1BWF9LQ1FfSURYKTsKK3N0YXRpYyB2b2lkIGNuaWNfc2VydmljZV9ibngyeF9iaCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGNuaWNfZGV2ICpkZXYgPSAoc3RydWN0IGNuaWNfZGV2ICopIGRhdGE7CisJc3RydWN0IGNuaWNfbG9jYWwgKmNwID0gZGV2LT5jbmljX3ByaXY7CisJdTMyIHN0YXR1c19pZHg7CisKKwlpZiAodW5saWtlbHkoIXRlc3RfYml0KENOSUNfRl9DTklDX1VQLCAmZGV2LT5mbGFncykpKQorCQlyZXR1cm47CisKKwlzdGF0dXNfaWR4ID0gY25pY19zZXJ2aWNlX2JueDJ4X2tjcShkZXYsICZjcC0+a2NxMSk7CisKKwlDTklDX1dSMTYoZGV2LCBjcC0+a2NxMS5pb19hZGRyLCBjcC0+a2NxMS5zd19wcm9kX2lkeCArIE1BWF9LQ1FfSURYKTsKIAljbmljX2Fja19ibngyeF9pbnQoZGV2LCBjcC0+c3RhdHVzX2Jsa19udW0sIENTVE9STV9JRCwKIAkJCSAgIHN0YXR1c19pZHgsIElHVV9JTlRfRU5BQkxFLCAxKTsKLQotCWNwLT5rY3FfcHJvZF9pZHggPSBzd19wcm9kOwogfQogCiBzdGF0aWMgaW50IGNuaWNfc2VydmljZV9ibngyeCh2b2lkICpkYXRhLCB2b2lkICpzdGF0dXNfYmxrKQogewogCXN0cnVjdCBjbmljX2RldiAqZGV2ID0gZGF0YTsKIAlzdHJ1Y3QgY25pY19sb2NhbCAqY3AgPSBkZXYtPmNuaWNfcHJpdjsKLQl1MTYgcHJvZCA9IGNwLT5rY3FfcHJvZF9pZHggJiBNQVhfS0NRX0lEWDsKIAotCWlmIChsaWtlbHkodGVzdF9iaXQoQ05JQ19GX0NOSUNfVVAsICZkZXYtPmZsYWdzKSkpIHsKLQkJcHJlZmV0Y2goY3AtPnN0YXR1c19ibGsuYm54MngpOwotCQlwcmVmZXRjaCgmY3AtPmtjcVtLQ1FfUEcocHJvZCldW0tDUV9JRFgocHJvZCldKTsKKwlpZiAoIShjcC0+ZXRoZGV2LT5kcnZfc3RhdGUgJiBDTklDX0RSVl9TVEFURV9VU0lOR19NU0lYKSkKKwkJY25pY19kb2lycShkZXYpOwogCi0JCXRhc2tsZXRfc2NoZWR1bGUoJmNwLT5jbmljX2lycV90YXNrKTsKLQkJY25pY19jaGtfcGt0X3JpbmdzKGNwKTsKLQl9CisJY25pY19jaGtfcGt0X3JpbmdzKGNwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjgyNCw3ICsyODE2LDcgQEAKIAogCWVyciA9IGlwX3JvdXRlX291dHB1dF9rZXkoJmluaXRfbmV0LCAmcnQsICZmbCk7CiAJaWYgKCFlcnIpCi0JCSpkc3QgPSAmcnQtPnUuZHN0OworCQkqZHN0ID0gJnJ0LT5kc3Q7CiAJcmV0dXJuIGVycjsKICNlbHNlCiAJcmV0dXJuIC1FTkVUVU5SRUFDSDsKQEAgLTI5OTYsNyArMjk4OCw3IEBACiBzdGF0aWMgaW50IGNuaWNfY21fYWJvcnQoc3RydWN0IGNuaWNfc29jayAqY3NrKQogewogCXN0cnVjdCBjbmljX2xvY2FsICpjcCA9IGNzay0+ZGV2LT5jbmljX3ByaXY7Ci0JdTMyIG9wY29kZTsKKwl1MzIgb3Bjb2RlID0gTDRfS0NRRV9PUENPREVfVkFMVUVfUkVTRVRfQ09NUDsKIAogCWlmICghY25pY19pbl91c2UoY3NrKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMDA4LDEyICszMDAwLDkgQEAKIAkgKiBjb25uZWN0IHdhcyBub3Qgc3VjY2Vzc2Z1bC4KIAkgKi8KIAotCWNzay0+c3RhdGUgPSBMNF9LQ1FFX09QQ09ERV9WQUxVRV9SRVNFVF9DT01QOwotCWlmICh0ZXN0X2JpdChTS19GX1BHX09GRkxEX0NPTVBMRVRFLCAmY3NrLT5mbGFncykpCi0JCW9wY29kZSA9IGNzay0+c3RhdGU7Ci0JZWxzZQotCQlvcGNvZGUgPSBMNUNNX1JBTVJPRF9DTURfSURfVEVSTUlOQVRFX09GRkxPQUQ7CiAJY3AtPmNsb3NlX2Nvbm4oY3NrLCBvcGNvZGUpOworCWlmIChjc2stPnN0YXRlICE9IG9wY29kZSkKKwkJcmV0dXJuIC1FQUxSRUFEWTsKIAogCXJldHVybiAwOwogfQpAQCAtMzAyNiw2ICszMDE1LDggQEAKIAlpZiAoY25pY19jbG9zZV9wcmVwKGNzaykpIHsKIAkJY3NrLT5zdGF0ZSA9IEw0X0tDUUVfT1BDT0RFX1ZBTFVFX0NMT1NFX0NPTVA7CiAJCXJldHVybiBjbmljX2NtX2Nsb3NlX3JlcShjc2spOworCX0gZWxzZSB7CisJCXJldHVybiAtRUFMUkVBRFk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMzE0MSwxMiArMzEzMiw2IEBACiAJCWJyZWFrOwogCiAJY2FzZSBMNF9LQ1FFX09QQ09ERV9WQUxVRV9SRVNFVF9SRUNFSVZFRDoKLQkJaWYgKHRlc3RfYml0KENOSUNfRl9CTlgyX0NMQVNTLCAmZGV2LT5mbGFncykpIHsKLQkJCWNuaWNfY21fdXBjYWxsKGNwLCBjc2ssIG9wY29kZSk7Ci0JCQlicmVhazsKLQkJfSBlbHNlIGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoU0tfRl9PRkZMRF9DT01QTEVURSwgJmNzay0+ZmxhZ3MpKQotCQkJY3NrLT5zdGF0ZSA9IG9wY29kZTsKLQkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBMNF9LQ1FFX09QQ09ERV9WQUxVRV9DTE9TRV9DT01QOgogCWNhc2UgTDRfS0NRRV9PUENPREVfVkFMVUVfUkVTRVRfQ09NUDoKIAljYXNlIEw1Q01fUkFNUk9EX0NNRF9JRF9TRUFSQ0hFUl9ERUxFVEU6CkBAIC0zMjAyLDE5ICszMTg3LDIyIEBACiAKIHN0YXRpYyBpbnQgY25pY19yZWFkeV90b19jbG9zZShzdHJ1Y3QgY25pY19zb2NrICpjc2ssIHUzMiBvcGNvZGUpCiB7Ci0JaWYgKChvcGNvZGUgPT0gY3NrLT5zdGF0ZSkgfHwKLQkgICAgKG9wY29kZSA9PSBMNF9LQ1FFX09QQ09ERV9WQUxVRV9SRVNFVF9SRUNFSVZFRCAmJgotCSAgICAgY3NrLT5zdGF0ZSA9PSBMNF9LQ1FFX09QQ09ERV9WQUxVRV9DTE9TRV9DT01QKSkgewotCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoU0tfRl9DTE9TSU5HLCAmY3NrLT5mbGFncykpCi0JCQlyZXR1cm4gMTsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFNLX0ZfT0ZGTERfQ09NUExFVEUsICZjc2stPmZsYWdzKSkgeworCQkvKiBVbnNvbGljaXRlZCBSRVNFVF9DT01QIG9yIFJFU0VUX1JFQ0VJVkVEICovCisJCW9wY29kZSA9IEw0X0tDUUVfT1BDT0RFX1ZBTFVFX1JFU0VUX1JFQ0VJVkVEOworCQljc2stPnN0YXRlID0gb3Bjb2RlOwogCX0KLQkvKiA1NzcxMCsgb25seSAgd29ya2Fyb3VuZCB0byBoYW5kbGUgdW5zb2xpY2l0ZWQgUkVTRVRfQ09NUAotCSAqIHdoaWNoIHdpbGwgYmUgdHJlYXRlZCBsaWtlIGEgUkVTRVQgUkNWRCBub3RpZmljYXRpb24KLQkgKiB3aGljaCB0cmlnZ2VycyB0aGUgY2xlYW4gdXAgcHJvY2VkdXJlCisKKwkvKiAxLiBJZiBldmVudCBvcGNvZGUgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgZXZlbnQgaW4gY3NrLT5zdGF0ZQorCSAqIDIuIElmIHRoZSBleHBlY3RlZCBldmVudCBpcyBDTE9TRV9DT01QLCB3ZSBhY2NlcHQgYW55IGV2ZW50CisJICogMy4gSWYgdGhlIGV4cGVjdGVkIGV2ZW50IGlzIDAsIG1lYW5pbmcgdGhlIGNvbm5lY3Rpb24gd2FzIG5ldmVyCisJICogICAgbmV2ZXIgZXN0YWJsaXNoZWQsIHdlIGFjY2VwdCB0aGUgb3Bjb2RlIGZyb20gY21fYWJvcnQuCiAJICovCi0JZWxzZSBpZiAob3Bjb2RlID09IEw0X0tDUUVfT1BDT0RFX1ZBTFVFX1JFU0VUX0NPTVApIHsKKwlpZiAob3Bjb2RlID09IGNzay0+c3RhdGUgfHwgY3NrLT5zdGF0ZSA9PSAwIHx8CisJICAgIGNzay0+c3RhdGUgPT0gTDRfS0NRRV9PUENPREVfVkFMVUVfQ0xPU0VfQ09NUCkgewogCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoU0tfRl9DTE9TSU5HLCAmY3NrLT5mbGFncykpIHsKLQkJCWNzay0+c3RhdGUgPSBMNF9LQ1FFX09QQ09ERV9WQUxVRV9SRVNFVF9SRUNFSVZFRDsKKwkJCWlmIChjc2stPnN0YXRlID09IDApCisJCQkJY3NrLT5zdGF0ZSA9IG9wY29kZTsKIAkJCXJldHVybiAxOwogCQl9CiAJfQpAQCAtMzIyNiw4ICszMjE0LDE0IEBACiAJc3RydWN0IGNuaWNfZGV2ICpkZXYgPSBjc2stPmRldjsKIAlzdHJ1Y3QgY25pY19sb2NhbCAqY3AgPSBkZXYtPmNuaWNfcHJpdjsKIAorCWlmIChvcGNvZGUgPT0gTDRfS0NRRV9PUENPREVfVkFMVUVfUkVTRVRfUkVDRUlWRUQpIHsKKwkJY25pY19jbV91cGNhbGwoY3AsIGNzaywgb3Bjb2RlKTsKKwkJcmV0dXJuOworCX0KKwogCWNsZWFyX2JpdChTS19GX0NPTk5FQ1RfU1RBUlQsICZjc2stPmZsYWdzKTsKIAljbmljX2Nsb3NlX2Nvbm4oY3NrKTsKKwljc2stPnN0YXRlID0gb3Bjb2RlOwogCWNuaWNfY21fdXBjYWxsKGNwLCBjc2ssIG9wY29kZSk7CiB9CiAKQEAgLTMyNTcsOCArMzI1MSwxMiBAQAogCWNhc2UgTDRfS0NRRV9PUENPREVfVkFMVUVfUkVTRVRfUkVDRUlWRUQ6CiAJY2FzZSBMNF9LQ1FFX09QQ09ERV9WQUxVRV9DTE9TRV9DT01QOgogCWNhc2UgTDRfS0NRRV9PUENPREVfVkFMVUVfUkVTRVRfQ09NUDoKLQkJaWYgKGNuaWNfcmVhZHlfdG9fY2xvc2UoY3NrLCBvcGNvZGUpKQotCQkJY21kID0gTDVDTV9SQU1ST0RfQ01EX0lEX1NFQVJDSEVSX0RFTEVURTsKKwkJaWYgKGNuaWNfcmVhZHlfdG9fY2xvc2UoY3NrLCBvcGNvZGUpKSB7CisJCQlpZiAodGVzdF9iaXQoU0tfRl9QR19PRkZMRF9DT01QTEVURSwgJmNzay0+ZmxhZ3MpKQorCQkJCWNtZCA9IEw1Q01fUkFNUk9EX0NNRF9JRF9TRUFSQ0hFUl9ERUxFVEU7CisJCQllbHNlCisJCQkJY2xvc2VfY29tcGxldGUgPSAxOworCQl9CiAJCWJyZWFrOwogCWNhc2UgTDVDTV9SQU1ST0RfQ01EX0lEX1NFQVJDSEVSX0RFTEVURToKIAkJY21kID0gTDVDTV9SQU1ST0RfQ01EX0lEX1RFUk1JTkFURV9PRkZMT0FEOwpAQCAtMzY5NCw3ICszNjkyLDcgQEAKIAlzdHJ1Y3QgY25pY19sb2NhbCAqY3AgPSBkZXYtPmNuaWNfcHJpdjsKIAlzdHJ1Y3QgY25pY19ldGhfZGV2ICpldGhkZXYgPSBjcC0+ZXRoZGV2OwogCXN0cnVjdCBzdGF0dXNfYmxvY2sgKnNibGsgPSBjcC0+c3RhdHVzX2Jsay5nZW47Ci0JdTMyIHZhbDsKKwl1MzIgdmFsLCBrY3FfY2lkX2FkZHIsIGt3cV9jaWRfYWRkcjsKIAlpbnQgZXJyOwogCiAJY25pY19zZXRfYm54Ml9tYWMoZGV2KTsKQEAgLTM3MTksNyArMzcxNyw3IEBACiAJY25pY19pbml0X2NvbnRleHQoZGV2LCBLV1FfQ0lEKTsKIAljbmljX2luaXRfY29udGV4dChkZXYsIEtDUV9DSUQpOwogCi0JY3AtPmt3cV9jaWRfYWRkciA9IEdFVF9DSURfQUREUihLV1FfQ0lEKTsKKwlrd3FfY2lkX2FkZHIgPSBHRVRfQ0lEX0FERFIoS1dRX0NJRCk7CiAJY3AtPmt3cV9pb19hZGRyID0gTUJfR0VUX0NJRF9BRERSKEtXUV9DSUQpICsgTDVfS1JOTFFfSE9TVF9RSURYOwogCiAJY3AtPm1heF9rd3FfaWR4ID0gTUFYX0tXUV9JRFg7CkBAIC0zNzM1LDUwICszNzMzLDU5IEBACiAJLyogSW5pdGlhbGl6ZSB0aGUga2VybmVsIHdvcmsgcXVldWUgY29udGV4dC4gKi8KIAl2YWwgPSBLUk5MUV9UWVBFX1RZUEVfS1JOTFEgfCBLUk5MUV9TSVpFX1RZUEVfU0laRSB8CiAJICAgICAgKEJDTV9QQUdFX0JJVFMgLSA4KSB8IEtSTkxRX0ZMQUdTX1FFX1NFTEZfU0VROwotCWNuaWNfY3R4X3dyKGRldiwgY3AtPmt3cV9jaWRfYWRkciwgTDVfS1JOTFFfVFlQRSwgdmFsKTsKKwljbmljX2N0eF93cihkZXYsIGt3cV9jaWRfYWRkciwgTDVfS1JOTFFfVFlQRSwgdmFsKTsKIAogCXZhbCA9IChCQ01fUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBrd3FlKSAtIDEpIDw8IDE2OwotCWNuaWNfY3R4X3dyKGRldiwgY3AtPmt3cV9jaWRfYWRkciwgTDVfS1JOTFFfUUVfU0VMRl9TRVFfTUFYLCB2YWwpOworCWNuaWNfY3R4X3dyKGRldiwga3dxX2NpZF9hZGRyLCBMNV9LUk5MUV9RRV9TRUxGX1NFUV9NQVgsIHZhbCk7CiAKIAl2YWwgPSAoKEJDTV9QQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGt3cWUpKSA8PCAxNikgfCBLV1FfUEFHRV9DTlQ7Ci0JY25pY19jdHhfd3IoZGV2LCBjcC0+a3dxX2NpZF9hZGRyLCBMNV9LUk5MUV9QR1RCTF9OUEFHRVMsIHZhbCk7CisJY25pY19jdHhfd3IoZGV2LCBrd3FfY2lkX2FkZHIsIEw1X0tSTkxRX1BHVEJMX05QQUdFUywgdmFsKTsKIAogCXZhbCA9ICh1MzIpICgodTY0KSBjcC0+a3dxX2luZm8ucGd0YmxfbWFwID4+IDMyKTsKLQljbmljX2N0eF93cihkZXYsIGNwLT5rd3FfY2lkX2FkZHIsIEw1X0tSTkxRX1BHVEJMX0hBRERSX0hJLCB2YWwpOworCWNuaWNfY3R4X3dyKGRldiwga3dxX2NpZF9hZGRyLCBMNV9LUk5MUV9QR1RCTF9IQUREUl9ISSwgdmFsKTsKIAogCXZhbCA9ICh1MzIpIGNwLT5rd3FfaW5mby5wZ3RibF9tYXA7Ci0JY25pY19jdHhfd3IoZGV2LCBjcC0+a3dxX2NpZF9hZGRyLCBMNV9LUk5MUV9QR1RCTF9IQUREUl9MTywgdmFsKTsKKwljbmljX2N0eF93cihkZXYsIGt3cV9jaWRfYWRkciwgTDVfS1JOTFFfUEdUQkxfSEFERFJfTE8sIHZhbCk7CiAKLQljcC0+a2NxX2NpZF9hZGRyID0gR0VUX0NJRF9BRERSKEtDUV9DSUQpOwotCWNwLT5rY3FfaW9fYWRkciA9IE1CX0dFVF9DSURfQUREUihLQ1FfQ0lEKSArIEw1X0tSTkxRX0hPU1RfUUlEWDsKKwlrY3FfY2lkX2FkZHIgPSBHRVRfQ0lEX0FERFIoS0NRX0NJRCk7CisJY3AtPmtjcTEuaW9fYWRkciA9IE1CX0dFVF9DSURfQUREUihLQ1FfQ0lEKSArIEw1X0tSTkxRX0hPU1RfUUlEWDsKIAotCWNwLT5rY3FfcHJvZF9pZHggPSAwOworCWNwLT5rY3ExLnN3X3Byb2RfaWR4ID0gMDsKKwljcC0+a2NxMS5od19wcm9kX2lkeF9wdHIgPQorCQkodTE2ICopICZzYmxrLT5zdGF0dXNfY29tcGxldGlvbl9wcm9kdWNlcl9pbmRleDsKKworCWNwLT5rY3ExLnN0YXR1c19pZHhfcHRyID0gKHUxNiAqKSAmc2Jsay0+c3RhdHVzX2lkeDsKIAogCS8qIEluaXRpYWxpemUgdGhlIGtlcm5lbCBjb21wbGV0ZSBxdWV1ZSBjb250ZXh0LiAqLwogCXZhbCA9IEtSTkxRX1RZUEVfVFlQRV9LUk5MUSB8IEtSTkxRX1NJWkVfVFlQRV9TSVpFIHwKIAkgICAgICAoQkNNX1BBR0VfQklUUyAtIDgpIHwgS1JOTFFfRkxBR1NfUUVfU0VMRl9TRVE7Ci0JY25pY19jdHhfd3IoZGV2LCBjcC0+a2NxX2NpZF9hZGRyLCBMNV9LUk5MUV9UWVBFLCB2YWwpOworCWNuaWNfY3R4X3dyKGRldiwga2NxX2NpZF9hZGRyLCBMNV9LUk5MUV9UWVBFLCB2YWwpOwogCiAJdmFsID0gKEJDTV9QQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGtjcWUpIC0gMSkgPDwgMTY7Ci0JY25pY19jdHhfd3IoZGV2LCBjcC0+a2NxX2NpZF9hZGRyLCBMNV9LUk5MUV9RRV9TRUxGX1NFUV9NQVgsIHZhbCk7CisJY25pY19jdHhfd3IoZGV2LCBrY3FfY2lkX2FkZHIsIEw1X0tSTkxRX1FFX1NFTEZfU0VRX01BWCwgdmFsKTsKIAogCXZhbCA9ICgoQkNNX1BBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3Qga2NxZSkpIDw8IDE2KSB8IEtDUV9QQUdFX0NOVDsKLQljbmljX2N0eF93cihkZXYsIGNwLT5rY3FfY2lkX2FkZHIsIEw1X0tSTkxRX1BHVEJMX05QQUdFUywgdmFsKTsKKwljbmljX2N0eF93cihkZXYsIGtjcV9jaWRfYWRkciwgTDVfS1JOTFFfUEdUQkxfTlBBR0VTLCB2YWwpOwogCi0JdmFsID0gKHUzMikgKCh1NjQpIGNwLT5rY3FfaW5mby5wZ3RibF9tYXAgPj4gMzIpOwotCWNuaWNfY3R4X3dyKGRldiwgY3AtPmtjcV9jaWRfYWRkciwgTDVfS1JOTFFfUEdUQkxfSEFERFJfSEksIHZhbCk7CisJdmFsID0gKHUzMikgKCh1NjQpIGNwLT5rY3ExLmRtYS5wZ3RibF9tYXAgPj4gMzIpOworCWNuaWNfY3R4X3dyKGRldiwga2NxX2NpZF9hZGRyLCBMNV9LUk5MUV9QR1RCTF9IQUREUl9ISSwgdmFsKTsKIAotCXZhbCA9ICh1MzIpIGNwLT5rY3FfaW5mby5wZ3RibF9tYXA7Ci0JY25pY19jdHhfd3IoZGV2LCBjcC0+a2NxX2NpZF9hZGRyLCBMNV9LUk5MUV9QR1RCTF9IQUREUl9MTywgdmFsKTsKKwl2YWwgPSAodTMyKSBjcC0+a2NxMS5kbWEucGd0YmxfbWFwOworCWNuaWNfY3R4X3dyKGRldiwga2NxX2NpZF9hZGRyLCBMNV9LUk5MUV9QR1RCTF9IQUREUl9MTywgdmFsKTsKIAogCWNwLT5pbnRfbnVtID0gMDsKIAlpZiAoZXRoZGV2LT5kcnZfc3RhdGUgJiBDTklDX0RSVl9TVEFURV9VU0lOR19NU0lYKSB7CisJCXN0cnVjdCBzdGF0dXNfYmxvY2tfbXNpeCAqbXNibGsgPSBjcC0+c3RhdHVzX2Jsay5ibngyOwogCQl1MzIgc2JfaWQgPSBjcC0+c3RhdHVzX2Jsa19udW07CiAJCXUzMiBzYiA9IEJOWDJfTDJDVFhfTDVfU1RBVFVTQl9OVU0oc2JfaWQpOwogCisJCWNwLT5rY3ExLmh3X3Byb2RfaWR4X3B0ciA9CisJCQkodTE2ICopICZtc2Jsay0+c3RhdHVzX2NvbXBsZXRpb25fcHJvZHVjZXJfaW5kZXg7CisJCWNwLT5rY3ExLnN0YXR1c19pZHhfcHRyID0gKHUxNiAqKSAmbXNibGstPnN0YXR1c19pZHg7CisJCWNwLT5rd3FfY29uX2lkeF9wdHIgPSAodTE2ICopICZtc2Jsay0+c3RhdHVzX2NtZF9jb25zdW1lcl9pbmRleDsKIAkJY3AtPmludF9udW0gPSBzYl9pZCA8PCBCTlgyX1BDSUNGR19JTlRfQUNLX0NNRF9JTlRfTlVNX1NISUZUOwotCQljbmljX2N0eF93cihkZXYsIGNwLT5rd3FfY2lkX2FkZHIsIEw1X0tSTkxRX0hPU1RfUUlEWCwgc2IpOwotCQljbmljX2N0eF93cihkZXYsIGNwLT5rY3FfY2lkX2FkZHIsIEw1X0tSTkxRX0hPU1RfUUlEWCwgc2IpOworCQljbmljX2N0eF93cihkZXYsIGt3cV9jaWRfYWRkciwgTDVfS1JOTFFfSE9TVF9RSURYLCBzYik7CisJCWNuaWNfY3R4X3dyKGRldiwga2NxX2NpZF9hZGRyLCBMNV9LUk5MUV9IT1NUX1FJRFgsIHNiKTsKIAl9CiAKIAkvKiBFbmFibGUgQ29tbW5hZCBTY2hlZHVsZXIgbm90aWZpY2F0aW9uIHdoZW4gd2Ugd3JpdGUgdG8gdGhlCkBAIC00MTIzLDMzICs0MTMwLDM5IEBACiAJdTggc2JfaWQgPSBjcC0+c3RhdHVzX2Jsa19udW07CiAKIAlyZXQgPSBjbmljX2luaXRfaWRfdGJsKCZjcC0+Y2lkX3RibCwgTUFYX0lTQ1NJX1RCTF9TWiwKLQkJCSAgICAgICBCTlgyWF9JU0NTSV9TVEFSVF9DSUQpOworCQkJICAgICAgIGNwLT5pc2NzaV9zdGFydF9jaWQpOwogCiAJaWYgKHJldCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljcC0+a2NxX2lvX2FkZHIgPSBCQVJfQ1NUUk9STV9JTlRNRU0gKworCWNwLT5rY3ExLmlvX2FkZHIgPSBCQVJfQ1NUUk9STV9JTlRNRU0gKwogCQkJICBDU1RPUk1fSVNDU0lfRVFfUFJPRF9PRkZTRVQoZnVuYywgMCk7Ci0JY3AtPmtjcV9wcm9kX2lkeCA9IDA7CisJY3AtPmtjcTEuc3dfcHJvZF9pZHggPSAwOworCisJY3AtPmtjcTEuaHdfcHJvZF9pZHhfcHRyID0KKwkJJmNwLT5zdGF0dXNfYmxrLmJueDJ4LT5jX3N0YXR1c19ibG9jay5pbmRleF92YWx1ZXNbCisJCQlIQ19JTkRFWF9DX0lTQ1NJX0VRX0NPTlNdOworCWNwLT5rY3ExLnN0YXR1c19pZHhfcHRyID0KKwkJJmNwLT5zdGF0dXNfYmxrLmJueDJ4LT5jX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXg7CiAKIAljbmljX2dldF9ibngyeF9pc2NzaV9pbmZvKGRldik7CiAKIAkvKiBPbmx5IDEgRVEgKi8KLQlDTklDX1dSMTYoZGV2LCBjcC0+a2NxX2lvX2FkZHIsIE1BWF9LQ1FfSURYKTsKKwlDTklDX1dSMTYoZGV2LCBjcC0+a2NxMS5pb19hZGRyLCBNQVhfS0NRX0lEWCk7CiAJQ05JQ19XUihkZXYsIEJBUl9DU1RST1JNX0lOVE1FTSArCiAJCUNTVE9STV9JU0NTSV9FUV9DT05TX09GRlNFVChmdW5jLCAwKSwgMCk7CiAJQ05JQ19XUihkZXYsIEJBUl9DU1RST1JNX0lOVE1FTSArCiAJCUNTVE9STV9JU0NTSV9FUV9ORVhUX1BBR0VfQUREUl9PRkZTRVQoZnVuYywgMCksCi0JCWNwLT5rY3FfaW5mby5wZ19tYXBfYXJyWzFdICYgMHhmZmZmZmZmZik7CisJCWNwLT5rY3ExLmRtYS5wZ19tYXBfYXJyWzFdICYgMHhmZmZmZmZmZik7CiAJQ05JQ19XUihkZXYsIEJBUl9DU1RST1JNX0lOVE1FTSArCiAJCUNTVE9STV9JU0NTSV9FUV9ORVhUX1BBR0VfQUREUl9PRkZTRVQoZnVuYywgMCkgKyA0LAotCQkodTY0KSBjcC0+a2NxX2luZm8ucGdfbWFwX2FyclsxXSA+PiAzMik7CisJCSh1NjQpIGNwLT5rY3ExLmRtYS5wZ19tYXBfYXJyWzFdID4+IDMyKTsKIAlDTklDX1dSKGRldiwgQkFSX0NTVFJPUk1fSU5UTUVNICsKIAkJQ1NUT1JNX0lTQ1NJX0VRX05FWFRfRVFFX0FERFJfT0ZGU0VUKGZ1bmMsIDApLAotCQljcC0+a2NxX2luZm8ucGdfbWFwX2FyclswXSAmIDB4ZmZmZmZmZmYpOworCQljcC0+a2NxMS5kbWEucGdfbWFwX2FyclswXSAmIDB4ZmZmZmZmZmYpOwogCUNOSUNfV1IoZGV2LCBCQVJfQ1NUUk9STV9JTlRNRU0gKwogCQlDU1RPUk1fSVNDU0lfRVFfTkVYVF9FUUVfQUREUl9PRkZTRVQoZnVuYywgMCkgKyA0LAotCQkodTY0KSBjcC0+a2NxX2luZm8ucGdfbWFwX2FyclswXSA+PiAzMik7CisJCSh1NjQpIGNwLT5rY3ExLmRtYS5wZ19tYXBfYXJyWzBdID4+IDMyKTsKIAlDTklDX1dSOChkZXYsIEJBUl9DU1RST1JNX0lOVE1FTSArCiAJCUNTVE9STV9JU0NTSV9FUV9ORVhUX1BBR0VfQUREUl9WQUxJRF9PRkZTRVQoZnVuYywgMCksIDEpOwogCUNOSUNfV1IxNihkZXYsIEJBUl9DU1RST1JNX0lOVE1FTSArCkBAIC00Mzc3LDcgKzQzOTAsNyBAQAogCQkgIDApOwogCUNOSUNfV1IoZGV2LCBCQVJfQ1NUUk9STV9JTlRNRU0gKwogCQlDU1RPUk1fSVNDU0lfRVFfQ09OU19PRkZTRVQoY3AtPmZ1bmMsIDApLCAwKTsKLQlDTklDX1dSMTYoZGV2LCBjcC0+a2NxX2lvX2FkZHIsIDApOworCUNOSUNfV1IxNihkZXYsIGNwLT5rY3ExLmlvX2FkZHIsIDApOwogCWNuaWNfZnJlZV9yZXNjKGRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NuaWMuaCBiL2RyaXZlcnMvbmV0L2NuaWMuaAppbmRleCAwOGIxMjM1Li4yNzVjMzYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jbmljLmgKKysrIGIvZHJpdmVycy9uZXQvY25pYy5oCkBAIC0xNjksNiArMTY5LDE2IEBACiAJfSBwcm90bzsKIH07CiAKK3N0cnVjdCBrY3FfaW5mbyB7CisJc3RydWN0IGNuaWNfZG1hCWRtYTsKKwlzdHJ1Y3Qga2NxZQkqKmtjcTsKKworCXUxNgkJKmh3X3Byb2RfaWR4X3B0cjsKKwl1MTYJCXN3X3Byb2RfaWR4OworCXUxNgkJKnN0YXR1c19pZHhfcHRyOworCXUzMgkJaW9fYWRkcjsKK307CisKIHN0cnVjdCBjbmljX2xvY2FsIHsKIAogCXNwaW5sb2NrX3QgY25pY191bHBfbG9jazsKQEAgLTIwMiw5ICsyMTIsNiBAQAogCXUxNgkJcnhfY29uczsKIAl1MTYJCXR4X2NvbnM7CiAKLQl1MzIga3dxX2NpZF9hZGRyOwotCXUzMiBrY3FfY2lkX2FkZHI7Ci0KIAlzdHJ1Y3QgY25pY19kbWEJCWt3cV9pbmZvOwogCXN0cnVjdCBrd3FlCQkqKmt3cTsKIApAQCAtMjE4LDExICsyMjUsNyBAQAogCXUxNgkJKmt3cV9jb25faWR4X3B0cjsKIAl1MTYJCWt3cV9jb25faWR4OwogCi0Jc3RydWN0IGNuaWNfZG1hCWtjcV9pbmZvOwotCXN0cnVjdCBrY3FlCSoqa2NxOwotCi0JdTE2CQlrY3FfcHJvZF9pZHg7Ci0JdTMyCQlrY3FfaW9fYWRkcjsKKwlzdHJ1Y3Qga2NxX2luZm8Ja2NxMTsKIAogCXVuaW9uIHsKIAkJdm9pZAkJCQkqZ2VuOwpAQCAtMjQ4LDggKzI1MSwxMCBAQAogCXN0cnVjdCBjbmljX2lzY3NpCSppc2NzaV90Ymw7CiAJc3RydWN0IGNuaWNfY29udGV4dAkqY3R4X3RibDsKIAlzdHJ1Y3QgY25pY19pZF90YmwJY2lkX3RibDsKLQlpbnQJCQltYXhfaXNjc2lfY29ubjsKIAlhdG9taWNfdAkJaXNjc2lfY29ubjsKKwl1MzIJCQlpc2NzaV9zdGFydF9jaWQ7CisKKwl1MzIJCQltYXhfY2lkX3NwYWNlOwogCiAJLyogcGVyIGNvbm5lY3Rpb24gcGFyYW1ldGVycyAqLwogCWludAkJCW51bV9pc2NzaV90YXNrczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NuaWNfaWYuaCBiL2RyaXZlcnMvbmV0L2NuaWNfaWYuaAppbmRleCAwYzU1MTc3Li4zNDRjODQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jbmljX2lmLmgKKysrIGIvZHJpdmVycy9uZXQvY25pY19pZi5oCkBAIC0xMiw4ICsxMiw4IEBACiAjaWZuZGVmIENOSUNfSUZfSAogI2RlZmluZSBDTklDX0lGX0gKIAotI2RlZmluZSBDTklDX01PRFVMRV9WRVJTSU9OCSIyLjEuMiIKLSNkZWZpbmUgQ05JQ19NT0RVTEVfUkVMREFURQkiTWF5IDI2LCAyMDEwIgorI2RlZmluZSBDTklDX01PRFVMRV9WRVJTSU9OCSIyLjEuMyIKKyNkZWZpbmUgQ05JQ19NT0RVTEVfUkVMREFURQkiSnVuZSAyNCwgMjAxMCIKIAogI2RlZmluZSBDTklDX1VMUF9SRE1BCQkwCiAjZGVmaW5lIENOSUNfVUxQX0lTQ1NJCQkxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jcG1hYy5jIGIvZHJpdmVycy9uZXQvY3BtYWMuYwppbmRleCAyMzc4NmVlLi5lMWY2MTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jcG1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2NwbWFjLmMKQEAgLTg0NiwxMSArODQ2LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCFwcml2LT5waHkpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmICgoY21kID09IFNJT0NHTUlJUEhZKSB8fCAoY21kID09IFNJT0NHTUlJUkVHKSB8fAotCSAgICAoY21kID09IFNJT0NTTUlJUkVHKSkKLQkJcmV0dXJuIHBoeV9taWlfaW9jdGwocHJpdi0+cGh5LCBpZl9taWkoaWZyKSwgY21kKTsKIAotCXJldHVybiAtRU9QTk9UU1VQUDsKKwlyZXR1cm4gcGh5X21paV9pb2N0bChwcml2LT5waHksIGlmciwgY21kKTsKIH0KIAogc3RhdGljIGludCBjcG1hY19nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCkBAIC05NjQsNyArOTYxLDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwcml2LT5wZGV2LCBJT1JFU09VUkNFX01FTSwgInJlZ3MiKTsKLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihtZW0tPnN0YXJ0LCBtZW0tPmVuZCAtIG1lbS0+c3RhcnQsIGRldi0+bmFtZSkpIHsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihtZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbSksIGRldi0+bmFtZSkpIHsKIAkJaWYgKG5ldGlmX21zZ19kcnYocHJpdikpCiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVxdWVzdCByZWdpc3RlcnNcbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lKTsKQEAgLTk3Miw3ICs5NjksNyBAQAogCQlnb3RvIGZhaWxfcmVzZXJ2ZTsKIAl9CiAKLQlwcml2LT5yZWdzID0gaW9yZW1hcChtZW0tPnN0YXJ0LCBtZW0tPmVuZCAtIG1lbS0+c3RhcnQpOworCXByaXYtPnJlZ3MgPSBpb3JlbWFwKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSk7CiAJaWYgKCFwcml2LT5yZWdzKSB7CiAJCWlmIChuZXRpZl9tc2dfZHJ2KHByaXYpKQogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlbWFwIHJlZ2lzdGVyc1xuIiwKQEAgLTEwNDksNyArMTA0Niw3IEBACiAJaW91bm1hcChwcml2LT5yZWdzKTsKIAogZmFpbF9yZW1hcDoKLQlyZWxlYXNlX21lbV9yZWdpb24obWVtLT5zdGFydCwgbWVtLT5lbmQgLSBtZW0tPnN0YXJ0KTsKKwlyZWxlYXNlX21lbV9yZWdpb24obWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW0pKTsKIAogZmFpbF9yZXNlcnZlOgogCXJldHVybiByZXM7CkBAIC0xMDc3LDcgKzEwNzQsNyBAQAogCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwogCWlvdW5tYXAocHJpdi0+cmVncyk7CiAJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwcml2LT5wZGV2LCBJT1JFU09VUkNFX01FTSwgInJlZ3MiKTsKLQlyZWxlYXNlX21lbV9yZWdpb24obWVtLT5zdGFydCwgbWVtLT5lbmQgLSBtZW0tPnN0YXJ0KTsKKwlyZWxlYXNlX21lbV9yZWdpb24obWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW0pKTsKIAlwcml2LT5yeF9oZWFkID0gJnByaXYtPmRlc2NfcmluZ1tDUE1BQ19RVUVVRVNdOwogCWZvciAoaSA9IDA7IGkgPCBwcml2LT5yaW5nX3NpemU7IGkrKykgewogCQlpZiAocHJpdi0+cnhfaGVhZFtpXS5za2IpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jIGIvZHJpdmVycy9uZXQvY3Jpcy9ldGhfdjEwLmMKaW5kZXggN2UwMDAyNy4uODE0NzVjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3Jpcy9ldGhfdjEwLmMKKysrIGIvZHJpdmVycy9uZXQvY3Jpcy9ldGhfdjEwLmMKQEAgLTE3MDIsMTEgKzE3MDIsNyBAQAogCiAJaWYgKCFjdXJyZW50X3NwZWVkKSB7CiAJCS8qIE1ha2UgTEVEIHJlZCwgbGluayBpcyBkb3duICovCi0jaWYgZGVmaW5lZChDT05GSUdfRVRSQVhfTkVUV09SS19SRURfT05fTk9fQ09OTkVDVElPTikKLQkJQ1JJU19MRURfTkVUV09SS19TRVQoQ1JJU19MRURfUkVEKTsKLSNlbHNlCiAJCUNSSVNfTEVEX05FVFdPUktfU0VUKENSSVNfTEVEX09GRik7Ci0jZW5kaWYKIAl9IGVsc2UgaWYgKGxpZ2h0X2xlZHMpIHsKIAkJaWYgKGN1cnJlbnRfc3BlZWQgPT0gMTApIHsKIAkJCUNSSVNfTEVEX05FVFdPUktfU0VUKENSSVNfTEVEX09SQU5HRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jczg5eDAuYyBiL2RyaXZlcnMvbmV0L2NzODl4MC5jCmluZGV4IDJjY2I5ZjEuLmQzMjVlMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NzODl4MC5jCisrKyBiL2RyaXZlcnMvbmV0L2NzODl4MC5jCkBAIC0xNzAsMjIgKzE3MCwxMiBAQAogLyogVGhlIGNzODkwMCBoYXMgNCBJUlEgcGlucywgc29mdHdhcmUgc2VsZWN0YWJsZS4gY3M4OTAwX2lycV9tYXAgbWFwcwogICAgdGhlbSB0byBzeXN0ZW0gSVJRIG51bWJlcnMuIFRoaXMgbWFwcGluZyBpcyBjYXJkIHNwZWNpZmljIGFuZCBpcyBzZXQgdG8KICAgIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBDaXJydXMgRXZhbCBib2FyZCBmb3IgdGhpcyBjaGlwLiAqLwotI2lmIGRlZmluZWQoQ09ORklHX1NIX0hJQ09TSDQpCi1zdGF0aWMgdW5zaWduZWQgaW50IG5ldGNhcmRfcG9ydGxpc3RbXSBfX3VzZWQgX19pbml0ZGF0YSA9Ci0gICB7IDB4MDMwMCwgMH07Ci1zdGF0aWMgdW5zaWduZWQgaW50IGNzODkwMF9pcnFfbWFwW10gPSB7MSwwLDAsMH07Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19NQUNIX0lYRFAyMzUxKQorI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfSVhEUDIzNTEpCiBzdGF0aWMgdW5zaWduZWQgaW50IG5ldGNhcmRfcG9ydGxpc3RbXSBfX3VzZWQgX19pbml0ZGF0YSA9IHtJWERQMjM1MV9WSVJUX0NTODkwMF9CQVNFLCAwfTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY3M4OTAwX2lycV9tYXBbXSA9IHtJUlFfSVhEUDIzNTFfQ1M4OTAwLCAwLCAwLCAwfTsKICNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfSVhEUDJYMDEpCiBzdGF0aWMgdW5zaWduZWQgaW50IG5ldGNhcmRfcG9ydGxpc3RbXSBfX3VzZWQgX19pbml0ZGF0YSA9IHtJWERQMlgwMV9DUzg5MDBfVklSVF9CQVNFLCAwfTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY3M4OTAwX2lycV9tYXBbXSA9IHtJUlFfSVhEUDJYMDFfQ1M4OTAwLCAwLCAwLCAwfTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfUE5YMDEwWCkKLSNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KLSNkZWZpbmUgQ0lSUlVTX0RFRkFVTFRfQkFTRQlJT19BRERSRVNTKEVYVF9TVEFUSUMyX3MwX0JBU0UgKyAweDIwMDAwMCkJLyogPSBQaHlzaWNhbCBhZGRyZXNzIDB4NDgyMDAwMDAgKi8KLSNkZWZpbmUgQ0lSUlVTX0RFRkFVTFRfSVJRCVZIX0lOVENfSU5UX05VTV9DQVNDQURFRF9JTlRFUlJVUFRfMSAvKiBFdmVudCBpbnB1dHMgYmFuayAxIC0gSUQgMzUvYml0IDMgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbmV0Y2FyZF9wb3J0bGlzdFtdIF9fdXNlZCBfX2luaXRkYXRhID0ge0NJUlJVU19ERUZBVUxUX0JBU0UsIDB9Owotc3RhdGljIHVuc2lnbmVkIGludCBjczg5MDBfaXJxX21hcFtdID0ge0NJUlJVU19ERUZBVUxUX0lSUSwgMCwgMCwgMH07CiAjZWxpZiBkZWZpbmVkKENPTkZJR19NQUNIX01YMzFBRFMpCiAjaW5jbHVkZSA8bWFjaC9ib2FyZC1teDMxYWRzLmg+CiBzdGF0aWMgdW5zaWduZWQgaW50IG5ldGNhcmRfcG9ydGxpc3RbXSBfX3VzZWQgX19pbml0ZGF0YSA9IHsKQEAgLTIxOCw3ICsyMDgsNiBAQAogCiAvKiBJbmZvcm1hdGlvbiB0aGF0IG5lZWQgdG8gYmUga2VwdCBmb3IgZWFjaCBib2FyZC4gKi8KIHN0cnVjdCBuZXRfbG9jYWwgewotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCWludCBjaGlwX3R5cGU7CQkvKiBvbmUgb2Y6IENTODkwMCwgQ1M4OTIwLCBDUzg5MjBNICovCiAJY2hhciBjaGlwX3JldmlzaW9uOwkvKiByZXZpc2lvbiBsZXR0ZXIgb2YgdGhlIGNoaXAgKCdBJy4uLikgKi8KIAlpbnQgc2VuZF9jbWQ7CQkvKiB0aGUgcHJvcGVyIHNlbmQgY29tbWFuZDogVFhfTk9XLCBUWF9BRlRFUl8zODEsIG9yIFRYX0FGVEVSX0FMTCAqLwpAQCAtMjU3LDcgKzI0Niw3IEBACiBzdGF0aWMgaW50IGdldF9lZXByb21fZGF0YShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgb2ZmLCBpbnQgbGVuLCBpbnQgKmJ1ZmZlcik7CiBzdGF0aWMgaW50IGdldF9lZXByb21fY2tzdW0oaW50IG9mZiwgaW50IGxlbiwgaW50ICpidWZmZXIpOwogc3RhdGljIGludCBzZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcik7Ci1zdGF0aWMgdm9pZCBjb3VudF9yeF9lcnJvcnMoaW50IHN0YXR1cywgc3RydWN0IG5ldF9sb2NhbCAqbHApOworc3RhdGljIHZvaWQgY291bnRfcnhfZXJyb3JzKGludCBzdGF0dXMsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiBzdGF0aWMgdm9pZCBuZXRfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogI2VuZGlmCkBAIC0zNzIsMTggKzM2MSw2IEBACiB7CiAJX19yYXdfd3JpdGVsKHZhbHVlLCBiYXNlX2FkZHIgKyAocG9ydG5vIDw8IDEpKTsKIH0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfUE5YMDEwWCkKLXN0YXRpYyB1MTYKLXJlYWR3b3JkKHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyLCBpbnQgcG9ydG5vKQotewotCXJldHVybiBpbncoYmFzZV9hZGRyICsgKHBvcnRubyA8PCAxKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi13cml0ZXdvcmQodW5zaWduZWQgbG9uZyBiYXNlX2FkZHIsIGludCBwb3J0bm8sIHUxNiB2YWx1ZSkKLXsKLQlvdXR3KHZhbHVlLCBiYXNlX2FkZHIgKyAocG9ydG5vIDw8IDEpKTsKLX0KICNlbHNlCiBzdGF0aWMgdTE2CiByZWFkd29yZCh1bnNpZ25lZCBsb25nIGJhc2VfYWRkciwgaW50IHBvcnRubykKQEAgLTU0NiwzMCArNTIzLDYgQEAKICNlbmRpZgogICAgICAgICB9CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9QTlgwMTBYCi0JaW5pdGlhbGl6ZV9lYmkoKTsKLQotCS8qIE1hcCBHUElPIHJlZ2lzdGVycyBmb3IgdGhlIHBpbnMgY29ubmVjdGVkIHRvIHRoZSBDUzg5MDBhLiAqLwotCWlmIChtYXBfY2lycnVzX2dwaW8oKSA8IDApCi0JCXJldHVybiAtRU5PREVWOwotCi0JcmVzZXRfY2lycnVzKCk7Ci0KLQkvKiBNYXAgZXZlbnQtcm91dGVyIHJlZ2lzdGVycy4gKi8KLQlpZiAobWFwX2V2ZW50X3JvdXRlcigpIDwgMCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQllbmFibGVfY2lycnVzX2lycSgpOwotCi0JdW5tYXBfY2lycnVzX2dwaW8oKTsKLQl1bm1hcF9ldmVudF9yb3V0ZXIoKTsKLQotCWRldi0+YmFzZV9hZGRyID0gaW9hZGRyOwotCi0JZm9yIChpID0gMCA7IGkgPCAzIDsgaSsrKQotCQlyZWFkcmVnKGRldiwgMCk7Ci0jZW5kaWYKLQogCS8qIEdyYWIgdGhlIHJlZ2lvbiBzbyB3ZSBjYW4gZmluZCBhbm90aGVyIGJvYXJkIGlmIGF1dG9JUlEgZmFpbHMuICovCiAJLyogV1RGIGlzIGdvaW5nIG9uIGhlcmU/ICovCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2FkZHIgJiB+MywgTkVUQ0FSRF9JT19FWFRFTlQsIERSVl9OQU1FKSkgewpAQCAtNTc5LDEyICs1MzIsNiBAQAogCQlnb3RvIG91dDE7CiAJfQogCi0jaWZkZWYgQ09ORklHX1NIX0hJQ09TSDQKLQkvKiB0cnVseSByZXNldCB0aGUgY2hpcCAqLwotCXdyaXRld29yZChpb2FkZHIsIEFERF9QT1JULCAweDAxMTQpOwotCXdyaXRld29yZChpb2FkZHIsIERBVEFfUE9SVCwgMHgwMDQwKTsKLSNlbmRpZgotCiAJLyogaWYgdGhleSBnaXZlIHVzIGFuIG9kZCBJL08gYWRkcmVzcywgdGhlbiBkbyBPTkUgd3JpdGUgdG8KICAgICAgICAgICAgdGhlIGFkZHJlc3MgcG9ydCwgdG8gZ2V0IGl0IGJhY2sgdG8gYWRkcmVzcyB6ZXJvLCB3aGVyZSB3ZQogICAgICAgICAgICBleHBlY3QgdG8gZmluZCB0aGUgRUlTQSBzaWduYXR1cmUgd29yZC4gQW4gSU8gd2l0aCBhIGJhc2Ugb2YgMHgzCkBAIC02NTAsMzcgKzU5Nyw2IEBACiAJICAgdGhlIGRyaXZlciB3aWxsIGFsd2F5cyBkbyAqc29tZXRoaW5nKiBpbnN0ZWFkIG9mIGNvbXBsYWluIHRoYXQKIAkgICBhZGFwdGVyX2NuZiBpcyAwLiAqLwogCi0jaWZkZWYgQ09ORklHX1NIX0hJQ09TSDQKLQlpZiAoMSkgewotCQkvKiBGb3IgdGhlIEhpQ08uU0g0IGJvYXJkLCB0aGluZ3MgYXJlIGRpZmZlcmVudDogd2UgZG9uJ3QKLQkJICAgaGF2ZSBFRVBST00sIGJ1dCB0aGVyZSBpcyBzb21lIGRhdGEgaW4gZmxhc2gsIHNvIHdlIGdvCi0JCSAgIGdldCBpdCB0aGVyZSBkaXJlY3RseSAoTUFDKS4gKi8KLQkJX191MTYgKmNvbmZkOwotCQlzaG9ydCBjbnQ7Ci0JCWlmICgoKCogKHZvbGF0aWxlIF9fdTMyICopIDB4YTAwMTNmZjApICYgMHgwMGZmZmZmZikKLQkJCT09IDB4MDA2YzMwMDApIHsKLQkJCWNvbmZkID0gKF9fdTE2KikgMHhhMDAxM2ZjMDsKLQkJfSBlbHNlIHsKLQkJCWNvbmZkID0gKF9fdTE2KikgMHhhMDAxZmZjMDsKLQkJfQotCQljbnQgPSAoKmNvbmZkKysgJiAweDAwZmYpID4+IDE7Ci0JCXdoaWxlICgtLWNudCA+IDApIHsKLQkJCV9fdTE2IGogPSAqY29uZmQrKzsKLQotCQkJc3dpdGNoIChqICYgMHgwZmZmKSB7Ci0JCQljYXNlIFBQX0lBOgotCQkJCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTi8yOyBpKyspIHsKLQkJCQkJZGV2LT5kZXZfYWRkcltpKjJdID0gY29uZmRbaV0gJiAweEZGOwotCQkJCQlkZXYtPmRldl9hZGRyW2kqMisxXSA9IGNvbmZkW2ldID4+IDg7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJfQotCQkJaiA9IChqID4+IDEyKSArIDE7Ci0JCQljb25mZCArPSBqOwotCQkJY250IC09IGo7Ci0JCX0KLQl9IGVsc2UKLSNlbmRpZgogCiAgICAgICAgIGlmICgocmVhZHJlZyhkZXYsIFBQX1NlbGZTVCkgJiAoRUVQUk9NX09LIHwgRUVQUk9NX1BSRVNFTlQpKSA9PQogCSAgICAgIChFRVBST01fT0t8RUVQUk9NX1BSRVNFTlQpKSB7CkBAIC03MzUsMTEgKzY1MSw3IEBACiAgICAgICAgIHByaW50aygiXG4iKTsKIAogCS8qIEZpcnN0IGNoZWNrIHRvIHNlZSBpZiBhbiBFRVBST00gaXMgYXR0YWNoZWQuICovCi0jaWZkZWYgQ09ORklHX1NIX0hJQ09TSDQgLyogbm8gRUVQUk9NIG9uIEhpQ08sIGRvbid0IGhhenpsZSB3aXRoIGl0IGhlcmUgKi8KLQlpZiAoMSkgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgImNzODl4MDogTm8gRUVQUk9NIG9uIEhpQ08uU0g0XG4iKTsKLQl9IGVsc2UKLSNlbmRpZgorCiAJaWYgKChyZWFkcmVnKGRldiwgUFBfU2VsZlNUKSAmIEVFUFJPTV9QUkVTRU5UKSA9PSAwKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjczg5eDA6IE5vIEVFUFJPTSwgcmVseWluZyBvbiBjb21tYW5kIGxpbmUuLi4uXG4iKTsKIAllbHNlIGlmIChnZXRfZWVwcm9tX2RhdGEoZGV2LCBTVEFSVF9FRVBST01fREFUQSxDSEtTVU1fTEVOLGVlcHJvbV9idWZmKSA8IDApIHsKQEAgLTk4Myw3ICs4OTUsNyBAQAogCQkJZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZylicCwgc3RhdHVzLCBsZW5ndGgpOwogCX0KIAlpZiAoKHN0YXR1cyAmIFJYX09LKSA9PSAwKSB7Ci0JCWNvdW50X3J4X2Vycm9ycyhzdGF0dXMsIGxwKTsKKwkJY291bnRfcnhfZXJyb3JzKHN0YXR1cywgZGV2KTsKIAkJZ290byBza2lwX3RoaXNfZnJhbWU7CiAJfQogCkBAIC05OTIsNyArOTA0LDcgQEAKIAlpZiAoc2tiID09IE5VTEwpIHsKIAkJaWYgKG5ldF9kZWJ1ZykJLyogSSBkb24ndCB0aGluayB3ZSB3YW50IHRvIGRvIHRoaXMgdG8gYSBzdHJlc3NlZCBzeXN0ZW0gKi8KIAkJCXByaW50aygiJXM6IE1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iLCBkZXYtPm5hbWUpOwotCQlscC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAogCQkvKiBBS1BNOiBhZHZhbmNlIGJwIHRvIHRoZSBuZXh0IGZyYW1lICovCiBza2lwX3RoaXNfZnJhbWU6CkBAIC0xMDIyLDggKzkzNCw4IEBACiAJfQogICAgICAgICBza2ItPnByb3RvY29sPWV0aF90eXBlX3RyYW5zKHNrYixkZXYpOwogCW5ldGlmX3J4KHNrYik7Ci0JbHAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQlscC0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuZ3RoOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuZ3RoOwogfQogCiAjZW5kaWYJLyogQUxMT1dfRE1BICovCkBAIC0xMjc2LDcgKzExODgsNiBAQAogCWludCBpOwogCWludCByZXQ7CiAKLSNpZiAhZGVmaW5lZChDT05GSUdfU0hfSElDT1NINCkgJiYgIWRlZmluZWQoQ09ORklHX0FSQ0hfUE5YMDEwWCkgLyogdXNlcyBpcnEjMSwgc28gdGhpcyB3b24ndCB3b3JrICovCiAJaWYgKGRldi0+aXJxIDwgMikgewogCQkvKiBBbGxvdyBpbnRlcnJ1cHRzIHRvIGJlIGdlbmVyYXRlZCBieSB0aGUgY2hpcCAqLwogLyogQ2lycnVzJyByZWxlYXNlIGhhZCB0aGlzOiAqLwpAQCAtMTMwNSw3ICsxMjE2LDYgQEAKIAkJfQogCX0KIAllbHNlCi0jZW5kaWYKIAl7CiAjaWZuZGVmIENPTkZJR19DUzg5eDBfTk9OSVNBX0lSUQogCQlpZiAoKCgxIDw8IGRldi0+aXJxKSAmIGxwLT5pcnFfbWFwKSA9PSAwKSB7CkBAIC0xMzkxLDkgKzEzMDEsNiBAQAogCWNhc2UgQV9DTkZfTUVESUFfMTBCXzI6IHJlc3VsdCA9IGxwLT5hZGFwdGVyX2NuZiAmIEFfQ05GXzEwQl8yOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogcmVzdWx0ID0gbHAtPmFkYXB0ZXJfY25mICYgKEFfQ05GXzEwQl9UIHwgQV9DTkZfQVVJIHwgQV9DTkZfMTBCXzIpOwogICAgICAgICB9Ci0jaWZkZWYgQ09ORklHX0FSQ0hfUE5YMDEwWAotCXJlc3VsdCA9IEFfQ05GXzEwQl9UOwotI2VuZGlmCiAgICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICIlczogRUVQUk9NIGlzIGNvbmZpZ3VyZWQgZm9yIHVuYXZhaWxhYmxlIG1lZGlhXG4iLCBkZXYtPm5hbWUpOwogcmVsZWFzZV9kbWE6CkBAIC0xNTUyLDcgKzE0NTksNyBAQAogCS8qIFdyaXRlIHRoZSBjb250ZW50cyBvZiB0aGUgcGFja2V0ICovCiAJd3JpdGV3b3JkcyhkZXYtPmJhc2VfYWRkciwgVFhfRlJBTUVfUE9SVCxza2ItPmRhdGEsKHNrYi0+bGVuKzEpID4+MSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKLQlscC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAlkZXZfa2ZyZWVfc2tiIChza2IpOwogCiAJLyoKQEAgLTE1OTgsMTggKzE1MDUsMjMgQEAKIAkJCW5ldF9yeChkZXYpOwogCQkJYnJlYWs7CiAJCWNhc2UgSVNRX1RSQU5TTUlUVEVSX0VWRU5UOgotCQkJbHAtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwkvKiBJbmZvcm0gdXBwZXIgbGF5ZXJzLiAqLwogCQkJaWYgKChzdGF0dXMgJiAoCVRYX09LIHwKIAkJCQkJVFhfTE9TVF9DUlMgfAogCQkJCQlUWF9TUUVfRVJST1IgfAogCQkJCQlUWF9MQVRFX0NPTCB8CiAJCQkJCVRYXzE2X0NPTCkpICE9IFRYX09LKSB7Ci0JCQkJaWYgKChzdGF0dXMgJiBUWF9PSykgPT0gMCkgbHAtPnN0YXRzLnR4X2Vycm9ycysrOwotCQkJCWlmIChzdGF0dXMgJiBUWF9MT1NUX0NSUykgbHAtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7Ci0JCQkJaWYgKHN0YXR1cyAmIFRYX1NRRV9FUlJPUikgbHAtPnN0YXRzLnR4X2hlYXJ0YmVhdF9lcnJvcnMrKzsKLQkJCQlpZiAoc3RhdHVzICYgVFhfTEFURV9DT0wpIGxwLT5zdGF0cy50eF93aW5kb3dfZXJyb3JzKys7Ci0JCQkJaWYgKHN0YXR1cyAmIFRYXzE2X0NPTCkgbHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCQkJaWYgKChzdGF0dXMgJiBUWF9PSykgPT0gMCkKKwkJCQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJCQlpZiAoc3RhdHVzICYgVFhfTE9TVF9DUlMpCisJCQkJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJCQlpZiAoc3RhdHVzICYgVFhfU1FFX0VSUk9SKQorCQkJCQlkZXYtPnN0YXRzLnR4X2hlYXJ0YmVhdF9lcnJvcnMrKzsKKwkJCQlpZiAoc3RhdHVzICYgVFhfTEFURV9DT0wpCisJCQkJCWRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOworCQkJCWlmIChzdGF0dXMgJiBUWF8xNl9DT0wpCisJCQkJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIElTUV9CVUZGRVJfRVZFTlQ6CkBAIC0xNjUxLDEwICsxNTYzLDEwIEBACiAjZW5kaWYKIAkJCWJyZWFrOwogCQljYXNlIElTUV9SWF9NSVNTX0VWRU5UOgotCQkJbHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gKHN0YXR1cyA+PjYpOworCQkJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzICs9IChzdGF0dXMgPj4gNik7CiAJCQlicmVhazsKIAkJY2FzZSBJU1FfVFhfQ09MX0VWRU5UOgotCQkJbHAtPnN0YXRzLmNvbGxpc2lvbnMgKz0gKHN0YXR1cyA+PjYpOworCQkJZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9IChzdGF0dXMgPj4gNik7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTE2NjIsMjIgKzE1NzQsMjQgQEAKIH0KIAogc3RhdGljIHZvaWQKLWNvdW50X3J4X2Vycm9ycyhpbnQgc3RhdHVzLCBzdHJ1Y3QgbmV0X2xvY2FsICpscCkKK2NvdW50X3J4X2Vycm9ycyhpbnQgc3RhdHVzLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQlpZiAoc3RhdHVzICYgUlhfUlVOVCkgbHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQlpZiAoc3RhdHVzICYgUlhfRVhUUkFfREFUQSkgbHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQlpZiAoc3RhdHVzICYgUlhfQ1JDX0VSUk9SKSBpZiAoIShzdGF0dXMgJiAoUlhfRVhUUkFfREFUQXxSWF9SVU5UKSkpCisJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwlpZiAoc3RhdHVzICYgUlhfUlVOVCkKKwkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJaWYgKHN0YXR1cyAmIFJYX0VYVFJBX0RBVEEpCisJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCWlmICgoc3RhdHVzICYgUlhfQ1JDX0VSUk9SKSAmJiAhKHN0YXR1cyAmIChSWF9FWFRSQV9EQVRBfFJYX1JVTlQpKSkKIAkJLyogcGVyIHN0ciAxNzIgKi8KLQkJbHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKLQlpZiAoc3RhdHVzICYgUlhfRFJJQkJMRSkgbHAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwlpZiAoc3RhdHVzICYgUlhfRFJJQkJMRSkKKwkJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKIH0KIAogLyogV2UgaGF2ZSBhIGdvb2QgcGFja2V0KHMpLCBnZXQgaXQvdGhlbSBvdXQgb2YgdGhlIGJ1ZmZlcnMuICovCiBzdGF0aWMgdm9pZAogbmV0X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IHN0YXR1cywgbGVuZ3RoOwogCkBAIC0xNjg2LDcgKzE2MDAsNyBAQAogCWxlbmd0aCA9IHJlYWR3b3JkKGlvYWRkciwgUlhfRlJBTUVfUE9SVCk7CiAKIAlpZiAoKHN0YXR1cyAmIFJYX09LKSA9PSAwKSB7Ci0JCWNvdW50X3J4X2Vycm9ycyhzdGF0dXMsIGxwKTsKKwkJY291bnRfcnhfZXJyb3JzKHN0YXR1cywgZGV2KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTY5Niw3ICsxNjEwLDcgQEAKICNpZiAwCQkvKiBBZ2FpbiwgdGhpcyBzZWVtcyBhIGNydWVsIHRoaW5nIHRvIGRvICovCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBNZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0LlxuIiwgZGV2LT5uYW1lKTsKICNlbmRpZgotCQlscC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuOwogCX0KIAlza2JfcmVzZXJ2ZShza2IsIDIpOwkvKiBsb25nd29yZCBhbGlnbiBMMyBoZWFkZXIgKi8KQEAgLTE3MTMsOCArMTYyNyw4IEBACiAKICAgICAgICAgc2tiLT5wcm90b2NvbD1ldGhfdHlwZV90cmFucyhza2IsZGV2KTsKIAluZXRpZl9yeChza2IpOwotCWxwLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JbHAtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbmd0aDsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbmd0aDsKIH0KIAogI2lmIEFMTE9XX0RNQQpAQCAtMTc2NSwxMSArMTY3OSwxMSBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CiAJLyogVXBkYXRlIHRoZSBzdGF0aXN0aWNzIGZyb20gdGhlIGRldmljZSByZWdpc3RlcnMuICovCi0JbHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gKHJlYWRyZWcoZGV2LCBQUF9SeE1pc3MpID4+IDYpOwotCWxwLT5zdGF0cy5jb2xsaXNpb25zICs9IChyZWFkcmVnKGRldiwgUFBfVHhDb2wpID4+IDYpOworCWRldi0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycyArPSAocmVhZHJlZyhkZXYsIFBQX1J4TWlzcykgPj4gNik7CisJZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9IChyZWFkcmVnKGRldiwgUFBfVHhDb2wpID4+IDYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gJmxwLT5zdGF0czsKKwlyZXR1cm4gJmRldi0+c3RhdHM7CiB9CiAKIHN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3M4OXgwLmggYi9kcml2ZXJzL25ldC9jczg5eDAuaAppbmRleCAyMDRlZDM3Li45MTQyM2I3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jczg5eDAuaAorKysgYi9kcml2ZXJzL25ldC9jczg5eDAuaApAQCAtNDM3LDExICs0MzcsNyBAQAogI2RlZmluZSBJUlFfTUFQX0VFUFJPTV9EQVRBIDB4MDA0NiAvKiAgT2Zmc2V0IGludG8gZWVwcm9tIGZvciB0aGUgSVJRIG1hcCAqLwogI2RlZmluZSBJUlFfTUFQX0xFTiAweDAwMDQgLyogIE5vIG9mIGJ5dGVzIHRvIHJlYWQgZm9yIHRoZSBJUlEgbWFwICovCiAjZGVmaW5lIFBOUF9JUlFfRlJNVCAweDAwMjIgLyogIFBOUCBzbWFsbCBpdGVtIElSUSBmb3JtYXQgKi8KLSNpZmRlZiBDT05GSUdfU0hfSElDT1NINAotI2RlZmluZSBDUzg5MDBfSVJRX01BUCAweDAwMDIgLyogSGlDTy1TSDQgYm9hcmQgaGFzIGl0cyBJUlEgb24gIzEgKi8KLSNlbHNlCiAjZGVmaW5lIENTODkwMF9JUlFfTUFQIDB4MWMyMCAvKiAgVGhpcyBJUlEgbWFwIGlzIGZpeGVkICovCi0jZW5kaWYKIAogI2RlZmluZSBDUzg5MjBfTk9fSU5UUyAweDBGICAgLyogIE1heCBDUzg5MjAgaW50ZXJydXB0IHNlbGVjdCAjICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYwppbmRleCBlM2YxYjg1Li4wNjZmZDViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jCkBAIC0yMzExLDE1ICsyMzExLDkgQEAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0LCB1c2VyYWRkciwgc2l6ZW9mKHQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQkvKiBDaGVjayB0LmxlbiBzYW5pdHkgPyAqLwotCQlmd19kYXRhID0ga21hbGxvYyh0LmxlbiwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghZndfZGF0YSkKLQkJCXJldHVybiAtRU5PTUVNOwotCi0JCWlmIChjb3B5X2Zyb21fdXNlcgotCQkJKGZ3X2RhdGEsIHVzZXJhZGRyICsgc2l6ZW9mKHQpLCB0LmxlbikpIHsKLQkJCWtmcmVlKGZ3X2RhdGEpOwotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KKwkJZndfZGF0YSA9IG1lbWR1cF91c2VyKHVzZXJhZGRyICsgc2l6ZW9mKHQpLCB0Lmxlbik7CisJCWlmIChJU19FUlIoZndfZGF0YSkpCisJCQlyZXR1cm4gUFRSX0VSUihmd19kYXRhKTsKIAogCQlyZXQgPSB0M19sb2FkX2Z3KGFkYXB0ZXIsIGZ3X2RhdGEsIHQubGVuKTsKIAkJa2ZyZWUoZndfZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jCmluZGV4IDU5NjJiOTEuLjhmZjk2YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jCkBAIC0yMDMsMTUgKzIwMywxMSBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBuZWVkX3NrYl91bm1hcCh2b2lkKQogewotCS8qCi0JICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byB0ZWxsIGlmIHRoZSBwbGF0Zm9ybSBuZWVkcyBidWZmZXIKLQkgKiB1bm1hcHBpbmcgYnkgY2hlY2tpbmcgaWYgREVDTEFSRV9QQ0lfVU5NQVBfQUREUiBkZWZpbmVzIGFueXRoaW5nLgotCSAqLwotCXN0cnVjdCBkdW1teSB7Ci0JCURFRklORV9ETUFfVU5NQVBfQUREUihhZGRyKTsKLQl9OwotCi0JcmV0dXJuIHNpemVvZihzdHJ1Y3QgZHVtbXkpICE9IDA7CisjaWZkZWYgQ09ORklHX05FRURfRE1BX01BUF9TVEFURQorCXJldHVybiAxOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZgogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3QzX2h3LmMgYi9kcml2ZXJzL25ldC9jeGdiMy90M19ody5jCmluZGV4IDk1YThiYTAuLjQyN2M0NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL3QzX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvdDNfaHcuYwpAQCAtNjc5LDE0ICs2NzksNiBAQAogCXJldHVybiB0M19zZWVwcm9tX3dyaXRlKGFkYXB0ZXIsIEVFUFJPTV9TVEFUX0FERFIsIGVuYWJsZSA/IDB4YyA6IDApOwogfQogCi0vKgotICogQ29udmVydCBhIGNoYXJhY3RlciBob2xkaW5nIGEgaGV4IGRpZ2l0IHRvIGEgbnVtYmVyLgotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGhleDJpbnQodW5zaWduZWQgY2hhciBjKQotewotCXJldHVybiBpc2RpZ2l0KGMpID8gYyAtICcwJyA6IHRvdXBwZXIoYykgLSAnQScgKyAxMDsKLX0KLQogLyoqCiAgKglnZXRfdnBkX3BhcmFtcyAtIHJlYWQgVlBEIHBhcmFtZXRlcnMgZnJvbSBWUEQgRUVQUk9NCiAgKglAYWRhcHRlcjogYWRhcHRlciB0byByZWFkCkBAIC03MjcsMTUgKzcxOSwxNSBAQAogCQlwLT5wb3J0X3R5cGVbMF0gPSB1c2VzX3hhdWkoYWRhcHRlcikgPyAxIDogMjsKIAkJcC0+cG9ydF90eXBlWzFdID0gdXNlc194YXVpKGFkYXB0ZXIpID8gNiA6IDI7CiAJfSBlbHNlIHsKLQkJcC0+cG9ydF90eXBlWzBdID0gaGV4MmludCh2cGQucG9ydDBfZGF0YVswXSk7Ci0JCXAtPnBvcnRfdHlwZVsxXSA9IGhleDJpbnQodnBkLnBvcnQxX2RhdGFbMF0pOworCQlwLT5wb3J0X3R5cGVbMF0gPSBoZXhfdG9fYmluKHZwZC5wb3J0MF9kYXRhWzBdKTsKKwkJcC0+cG9ydF90eXBlWzFdID0gaGV4X3RvX2Jpbih2cGQucG9ydDFfZGF0YVswXSk7CiAJCXAtPnhhdWljZmdbMF0gPSBzaW1wbGVfc3RydG91bCh2cGQueGF1aTBjZmdfZGF0YSwgTlVMTCwgMTYpOwogCQlwLT54YXVpY2ZnWzFdID0gc2ltcGxlX3N0cnRvdWwodnBkLnhhdWkxY2ZnX2RhdGEsIE5VTEwsIDE2KTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQotCQlwLT5ldGhfYmFzZVtpXSA9IGhleDJpbnQodnBkLm5hX2RhdGFbMiAqIGldKSAqIDE2ICsKLQkJCQkgaGV4MmludCh2cGQubmFfZGF0YVsyICogaSArIDFdKTsKKwkJcC0+ZXRoX2Jhc2VbaV0gPSBoZXhfdG9fYmluKHZwZC5uYV9kYXRhWzIgKiBpXSkgKiAxNiArCisJCQkJIGhleF90b19iaW4odnBkLm5hX2RhdGFbMiAqIGkgKyAxXSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3ZlcnNpb24uaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL3ZlcnNpb24uaAppbmRleCA5ZDBiZDlkLi44YmRhMDZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy92ZXJzaW9uLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvdmVyc2lvbi5oCkBAIC0zNSwxMCArMzUsMTAgQEAKICNkZWZpbmUgRFJWX0RFU0MgIkNoZWxzaW8gVDMgTmV0d29yayBEcml2ZXIiCiAjZGVmaW5lIERSVl9OQU1FICJjeGdiMyIKIC8qIERyaXZlciB2ZXJzaW9uICovCi0jZGVmaW5lIERSVl9WRVJTSU9OICIxLjEuMy1rbyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMS40LWtvIgogCiAvKiBGaXJtd2FyZSB2ZXJzaW9uICovCiAjZGVmaW5lIEZXX1ZFUlNJT05fTUFKT1IgNwotI2RlZmluZSBGV19WRVJTSU9OX01JTk9SIDQKKyNkZWZpbmUgRldfVkVSU0lPTl9NSU5PUiAxMAogI2RlZmluZSBGV19WRVJTSU9OX01JQ1JPIDAKICNlbmRpZgkJCQkvKiBfX0NIRUxTSU9fVkVSU0lPTl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiNC9jeGdiNC5oIGIvZHJpdmVycy9uZXQvY3hnYjQvY3hnYjQuaAppbmRleCBkZDE3NzBlLi42ZTU2MmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiNC9jeGdiNC5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2I0L2N4Z2I0LmgKQEAgLTIxOSw2ICsyMTksMTAgQEAKIAlzdHJ1Y3QgdnBkX3BhcmFtcyB2cGQ7CiAJc3RydWN0IHBjaV9wYXJhbXMgcGNpOwogCisJdW5zaWduZWQgaW50IHNmX3NpemU7ICAgICAgICAgICAgIC8qIHNlcmlhbCBmbGFzaCBzaXplIGluIGJ5dGVzICovCisJdW5zaWduZWQgaW50IHNmX25zZWM7ICAgICAgICAgICAgIC8qICMgb2YgZmxhc2ggc2VjdG9ycyAqLworCXVuc2lnbmVkIGludCBzZl9md19zdGFydDsgICAgICAgICAvKiBzdGFydCBvZiBGVyBpbWFnZSBpbiBmbGFzaCAqLworCiAJdW5zaWduZWQgaW50IGZ3X3ZlcnM7CiAJdW5zaWduZWQgaW50IHRwX3ZlcnM7CiAJdTggYXBpX3ZlcnNbN107CkBAIC0yOTAsNyArMjk0LDkgQEAKIAl1OCAgICAgcnhfb2ZmbG9hZDsgICAgICAgICAgICAvKiBDU08sIGV0YyAqLwogCXU4ICAgICBucXNldHM7ICAgICAgICAgICAgICAgIC8qICMgb2YgcXNldHMgKi8KIAl1OCAgICAgZmlyc3RfcXNldDsgICAgICAgICAgICAvKiBpbmRleCBvZiBmaXJzdCBxc2V0ICovCisJdTggICAgIHJzc19tb2RlOwogCXN0cnVjdCBsaW5rX2NvbmZpZyBsaW5rX2NmZzsKKwl1MTYgICAqcnNzOwogfTsKIAogLyogcG9ydF9pbmZvLnJ4X29mZmxvYWQgZmxhZ3MgKi8KQEAgLTMwNSw3ICszMTEsNiBAQAogCUZVTExfSU5JVF9ET05FICAgICA9ICgxIDw8IDApLAogCVVTSU5HX01TSSAgICAgICAgICA9ICgxIDw8IDEpLAogCVVTSU5HX01TSVggICAgICAgICA9ICgxIDw8IDIpLAotCVFVRVVFU19CT1VORCAgICAgICA9ICgxIDw8IDMpLAogCUZXX09LICAgICAgICAgICAgICA9ICgxIDw8IDQpLAogfTsKIApAQCAtNDc3LDcgKzQ4Miw4IEBACiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJc3RydWN0IGRldmljZSAqcGRldl9kZXY7CiAJdW5zaWduZWQgbG9uZyByZWdpc3RlcmVkX2RldmljZV9tYXA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgZm47CisJdW5zaWduZWQgaW50IGZsYWdzOwogCiAJY29uc3QgY2hhciAqbmFtZTsKIAlpbnQgbXNnX2VuYWJsZTsKQEAgLTY0Niw2ICs2NTIsNyBAQAogdm9pZCB0NF9pbnRyX2NsZWFyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKIGludCB0NF9zbG93X2ludHJfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CiAKK2ludCB0NF93YWl0X2Rldl9yZWFkeShzdHJ1Y3QgYWRhcHRlciAqYWRhcCk7CiBpbnQgdDRfbGlua19zdGFydChzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgdW5zaWduZWQgaW50IG1ib3gsIHVuc2lnbmVkIGludCBwb3J0LAogCQkgIHN0cnVjdCBsaW5rX2NvbmZpZyAqbGMpOwogaW50IHQ0X3Jlc3RhcnRfYW5lZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgdW5zaWduZWQgaW50IG1ib3gsIHVuc2lnbmVkIGludCBwb3J0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2I0L2N4Z2I0X21haW4uYyBiL2RyaXZlcnMvbmV0L2N4Z2I0L2N4Z2I0X21haW4uYwppbmRleCA1ODA0NWIwLi5jMzI3NTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiNC9jeGdiNF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjQvY3hnYjRfbWFpbi5jCkBAIC02Nyw3ICs2Nyw3IEBACiAjaW5jbHVkZSAidDRmd19hcGkuaCIKICNpbmNsdWRlICJsMnQuaCIKIAotI2RlZmluZSBEUlZfVkVSU0lPTiAiMS4wLjAta28iCisjZGVmaW5lIERSVl9WRVJTSU9OICIxLjMuMC1rbyIKICNkZWZpbmUgRFJWX0RFU0MgIkNoZWxzaW8gVDQgTmV0d29yayBEcml2ZXIiCiAKIC8qCkBAIC03Nyw2ICs3Nyw3NiBAQAogICovCiAjZGVmaW5lIE1BWF9TR0VfVElNRVJWQUwgMjAwVQogCisjaWZkZWYgQ09ORklHX1BDSV9JT1YKKy8qCisgKiBWaXJ0dWFsIEZ1bmN0aW9uIHByb3Zpc2lvbmluZyBjb25zdGFudHMuICBXZSBuZWVkIHR3byBleHRyYSBJbmdyZXNzIFF1ZXVlcworICogd2l0aCBJbnRlcnJ1cHQgY2FwYWJpbGl0eSB0byBzZXJ2ZSBhcyB0aGUgVkYncyBGaXJtd2FyZSBFdmVudCBRdWV1ZSBhbmQKKyAqIEZvcndhcmRlZCBJbnRlcnJ1cHQgUXVldWUgKHdoZW4gdXNpbmcgTVNJIG1vZGUpIC0tIG5laXRoZXIgd2lsbCBoYXZlIEZyZWUKKyAqIExpc3RzIGFzc29jaWF0ZWQgd2l0aCB0aGVtKS4gIEZvciBlYWNoIEV0aGVybmV0L0NvbnRyb2wgRWdyZXNzIFF1ZXVlIGFuZAorICogZm9yIGVhY2ggRnJlZSBMaXN0LCB3ZSBuZWVkIGFuIEVncmVzcyBDb250ZXh0LgorICovCitlbnVtIHsKKwlWRlJFU19OUE9SVFMgPSAxLAkJLyogIyBvZiAicG9ydHMiIHBlciBWRiAqLworCVZGUkVTX05RU0VUUyA9IDIsCQkvKiAjIG9mICJRdWV1ZSBTZXRzIiBwZXIgVkYgKi8KKworCVZGUkVTX05WSSA9IFZGUkVTX05QT1JUUywJLyogIyBvZiBWaXJ0dWFsIEludGVyZmFjZXMgKi8KKwlWRlJFU19ORVRIQ1RSTCA9IFZGUkVTX05RU0VUUywJLyogIyBvZiBFUXMgdXNlZCBmb3IgRVRIIG9yIENUUkwgUXMgKi8KKwlWRlJFU19OSVFGTElOVCA9IFZGUkVTX05RU0VUUysyLC8qICMgb2YgaW5ncmVzcyBRcy93IEZyZWUgTGlzdChzKS9pbnRyICovCisJVkZSRVNfTklRID0gMCwJCQkvKiAjIG9mIG5vbi1mbC9pbnQgaW5ncmVzcyBxdWV1ZXMgKi8KKwlWRlJFU19ORVEgPSBWRlJFU19OUVNFVFMqMiwJLyogIyBvZiBlZ3Jlc3MgcXVldWVzICovCisJVkZSRVNfVEMgPSAwLAkJCS8qIFBDSS1FIHRyYWZmaWMgY2xhc3MgKi8KKwlWRlJFU19ORVhBQ1RGID0gMTYsCQkvKiAjIG9mIGV4YWN0IE1QUyBmaWx0ZXJzICovCisKKwlWRlJFU19SX0NBUFMgPSBGV19DTURfQ0FQX0RNQVF8RldfQ01EX0NBUF9WRnxGV19DTURfQ0FQX1BPUlQsCisJVkZSRVNfV1hfQ0FQUyA9IEZXX0NNRF9DQVBfRE1BUXxGV19DTURfQ0FQX1ZGLAorfTsKKworLyoKKyAqIFByb3ZpZGUgYSBQb3J0IEFjY2VzcyBSaWdodHMgTWFzayBmb3IgdGhlIHNwZWNpZmllZCBQRi9WRi4gIFRoaXMgaXMgdmVyeQorICogc3RhdGljIGFuZCBsaWtlbHkgbm90IHRvIGJlIHVzZWZ1bCBpbiB0aGUgbG9uZyBydW4uICBXZSByZWFsbHkgbmVlZCB0bworICogaW1wbGVtZW50IHNvbWUgZm9ybSBvZiBwZXJzaXN0ZW50IGNvbmZpZ3VyYXRpb24gd2hpY2ggdGhlIGZpcm13YXJlCisgKiBjb250cm9scy4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBwZnZmcmVzX3BtYXNrKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkJCSAgdW5zaWduZWQgaW50IHBmLCB1bnNpZ25lZCBpbnQgdmYpCit7CisJdW5zaWduZWQgaW50IHBvcnRuLCBwb3J0dmVjOworCisJLyoKKwkgKiBHaXZlIFBGJ3MgYWNjZXNzIHRvIGFsbCBvZiB0aGUgcG9ydHMuCisJICovCisJaWYgKHZmID09IDApCisJCXJldHVybiBGV19QRlZGX0NNRF9QTUFTS19NQVNLOworCisJLyoKKwkgKiBGb3IgVkZzLCB3ZSdsbCBhc3NpZ24gdGhlbSBhY2Nlc3MgdG8gdGhlIHBvcnRzIGJhc2VkIHB1cmVseSBvbiB0aGUKKwkgKiBQRi4gIFdlIGFzc2lnbiBhY3RpdmUgcG9ydHMgaW4gb3JkZXIsIHdyYXBwaW5nIGFyb3VuZCBpZiB0aGVyZSBhcmUKKwkgKiBmZXdlciBhY3RpdmUgcG9ydHMgdGhhbiBQRnM6IGUuZy4gYWN0aXZlIHBvcnRbcGYgJSBucG9ydHNdLgorCSAqIFVuZm9ydHVuYXRlbHkgdGhlIGFkYXB0ZXIncyBwb3J0X2luZm8gc3RydWN0cyBoYXZlbid0IGJlZW4KKwkgKiBpbml0aWFsaXplZCB5ZXQgc28gd2UgaGF2ZSB0byBjb21wdXRlIHRoaXMuCisJICovCisJaWYgKGFkYXB0ZXItPnBhcmFtcy5ucG9ydHMgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlwb3J0biA9IHBmICUgYWRhcHRlci0+cGFyYW1zLm5wb3J0czsKKwlwb3J0dmVjID0gYWRhcHRlci0+cGFyYW1zLnBvcnR2ZWM7CisJZm9yICg7OykgeworCQkvKgorCQkgKiBJc29sYXRlIHRoZSBsb3dlc3Qgc2V0IGJpdCBpbiB0aGUgcG9ydCB2ZWN0b3IuICBJZiB3ZSdyZSBhdAorCQkgKiB0aGUgcG9ydCBudW1iZXIgdGhhdCB3ZSB3YW50LCByZXR1cm4gdGhhdCBhcyB0aGUgcG1hc2suCisJCSAqIG90aGVyd2lzZSBtYXNrIHRoYXQgYml0IG91dCBvZiB0aGUgcG9ydCB2ZWN0b3IgYW5kCisJCSAqIGRlY3JlbWVudCBvdXIgcG9ydCBudW1iZXIgLi4uCisJCSAqLworCQl1bnNpZ25lZCBpbnQgcG1hc2sgPSBwb3J0dmVjIF4gKHBvcnR2ZWMgJiAocG9ydHZlYy0xKSk7CisJCWlmIChwb3J0biA9PSAwKQorCQkJcmV0dXJuIHBtYXNrOworCQlwb3J0bi0tOworCQlwb3J0dmVjICY9IH5wbWFzazsKKwl9CisJLypOT1RSRUFDSEVEKi8KK30KKyNlbmRpZgorCiBlbnVtIHsKIAlNRU1XSU4wX0FQRVJUVVJFID0gNjU1MzYsCiAJTUVNV0lOMF9CQVNFICAgICA9IDB4MzAwMDAsCkBAIC0xMDEsMTAgKzE3MSwyMCBAQAogCQkJIE5FVElGX01TR19USU1FUiB8IE5FVElGX01TR19JRkRPV04gfCBORVRJRl9NU0dfSUZVUCB8XAogCQkJIE5FVElGX01TR19SWF9FUlIgfCBORVRJRl9NU0dfVFhfRVJSKQogCi0jZGVmaW5lIENIX0RFVklDRShkZXZpZCkgeyBQQ0lfVkRFVklDRShDSEVMU0lPLCBkZXZpZCksIDAgfQorI2RlZmluZSBDSF9ERVZJQ0UoZGV2aWQsIGRhdGEpIHsgUENJX1ZERVZJQ0UoQ0hFTFNJTywgZGV2aWQpLCAoZGF0YSkgfQogCiBzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoY3hnYjRfcGNpX3RibCkgPSB7Ci0JQ0hfREVWSUNFKDB4YTAwMCksICAvKiBQRTEwSyAqLworCUNIX0RFVklDRSgweGEwMDAsIDApLCAgLyogUEUxMEsgKi8KKwlDSF9ERVZJQ0UoMHg0MDAxLCAwKSwKKwlDSF9ERVZJQ0UoMHg0MDAyLCAwKSwKKwlDSF9ERVZJQ0UoMHg0MDAzLCAwKSwKKwlDSF9ERVZJQ0UoMHg0MDA0LCAwKSwKKwlDSF9ERVZJQ0UoMHg0MDA1LCAwKSwKKwlDSF9ERVZJQ0UoMHg0MDA2LCAwKSwKKwlDSF9ERVZJQ0UoMHg0MDA3LCAwKSwKKwlDSF9ERVZJQ0UoMHg0MDA4LCAwKSwKKwlDSF9ERVZJQ0UoMHg0MDA5LCAwKSwKKwlDSF9ERVZJQ0UoMHg0MDBhLCAwKSwKIAl7IDAsIH0KIH07CiAKQEAgLTIxNiw3ICsyOTYsNyBAQAogdm9pZCB0NF9vc19wb3J0bW9kX2NoYW5nZWQoY29uc3Qgc3RydWN0IGFkYXB0ZXIgKmFkYXAsIGludCBwb3J0X2lkKQogewogCXN0YXRpYyBjb25zdCBjaGFyICptb2Rfc3RyW10gPSB7Ci0JCU5VTEwsICJMUiIsICJTUiIsICJFUiIsICJwYXNzaXZlIERBIiwgImFjdGl2ZSBEQSIKKwkJTlVMTCwgIkxSIiwgIlNSIiwgIkVSIiwgInBhc3NpdmUgREEiLCAiYWN0aXZlIERBIiwgIkxSTSIKIAl9OwogCiAJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFkYXAtPnBvcnRbcG9ydF9pZF07CkBAIC0yMjQsNyArMzA0LDcgQEAKIAogCWlmIChwaS0+bW9kX3R5cGUgPT0gRldfUE9SVF9NT0RfVFlQRV9OT05FKQogCQluZXRkZXZfaW5mbyhkZXYsICJwb3J0IG1vZHVsZSB1bnBsdWdnZWRcbiIpOwotCWVsc2UKKwllbHNlIGlmIChwaS0+bW9kX3R5cGUgPCBBUlJBWV9TSVpFKG1vZF9zdHIpKQogCQluZXRkZXZfaW5mbyhkZXYsICIlcyBtb2R1bGUgaW5zZXJ0ZWRcbiIsIG1vZF9zdHJbcGktPm1vZF90eXBlXSk7CiB9CiAKQEAgLTI0NCwxMiArMzI0LDEzIEBACiAJaW50IHVjX2NudCA9IG5ldGRldl91Y19jb3VudChkZXYpOwogCWludCBtY19jbnQgPSBuZXRkZXZfbWNfY291bnQoZGV2KTsKIAljb25zdCBzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgaW50IG1iID0gcGktPmFkYXB0ZXItPmZuOwogCiAJLyogZmlyc3QgZG8gdGhlIHNlY29uZGFyeSB1bmljYXN0IGFkZHJlc3NlcyAqLwogCW5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBkZXYpIHsKIAkJYWRkcltuYWRkcisrXSA9IGhhLT5hZGRyOwogCQlpZiAoLS11Y19jbnQgPT0gMCB8fCBuYWRkciA+PSBBUlJBWV9TSVpFKGFkZHIpKSB7Ci0JCQlyZXQgPSB0NF9hbGxvY19tYWNfZmlsdChwaS0+YWRhcHRlciwgMCwgcGktPnZpaWQsIGZyZWUsCisJCQlyZXQgPSB0NF9hbGxvY19tYWNfZmlsdChwaS0+YWRhcHRlciwgbWIsIHBpLT52aWlkLCBmcmVlLAogCQkJCQluYWRkciwgYWRkciwgZmlsdF9pZHgsICZ1aGFzaCwgc2xlZXApOwogCQkJaWYgKHJldCA8IDApCiAJCQkJcmV0dXJuIHJldDsKQEAgLTI2Myw3ICszNDQsNyBAQAogCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHsKIAkJYWRkcltuYWRkcisrXSA9IGhhLT5hZGRyOwogCQlpZiAoLS1tY19jbnQgPT0gMCB8fCBuYWRkciA+PSBBUlJBWV9TSVpFKGFkZHIpKSB7Ci0JCQlyZXQgPSB0NF9hbGxvY19tYWNfZmlsdChwaS0+YWRhcHRlciwgMCwgcGktPnZpaWQsIGZyZWUsCisJCQlyZXQgPSB0NF9hbGxvY19tYWNfZmlsdChwaS0+YWRhcHRlciwgbWIsIHBpLT52aWlkLCBmcmVlLAogCQkJCQluYWRkciwgYWRkciwgZmlsdF9pZHgsICZtaGFzaCwgc2xlZXApOwogCQkJaWYgKHJldCA8IDApCiAJCQkJcmV0dXJuIHJldDsKQEAgLTI3Myw3ICszNTQsNyBAQAogCQl9CiAJfQogCi0JcmV0dXJuIHQ0X3NldF9hZGRyX2hhc2gocGktPmFkYXB0ZXIsIDAsIHBpLT52aWlkLCB1aGFzaCAhPSAwLAorCXJldHVybiB0NF9zZXRfYWRkcl9oYXNoKHBpLT5hZGFwdGVyLCBtYiwgcGktPnZpaWQsIHVoYXNoICE9IDAsCiAJCQkJdWhhc2ggfCBtaGFzaCwgc2xlZXApOwogfQogCkBAIC0yODgsNyArMzY5LDcgQEAKIAogCXJldCA9IHNldF9hZGRyX2ZpbHRlcnMoZGV2LCBzbGVlcF9vayk7CiAJaWYgKHJldCA9PSAwKQotCQlyZXQgPSB0NF9zZXRfcnhtb2RlKHBpLT5hZGFwdGVyLCAwLCBwaS0+dmlpZCwgbXR1LAorCQlyZXQgPSB0NF9zZXRfcnhtb2RlKHBpLT5hZGFwdGVyLCBwaS0+YWRhcHRlci0+Zm4sIHBpLT52aWlkLCBtdHUsCiAJCQkJICAgIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpID8gMSA6IDAsCiAJCQkJICAgIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSA/IDEgOiAwLCAxLCAtMSwKIAkJCQkgICAgc2xlZXBfb2spOwpAQCAtMzA1LDE1ICszODYsMTYgQEAKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBpbnQgbWIgPSBwaS0+YWRhcHRlci0+Zm47CiAKIAkvKgogCSAqIFdlIGRvIG5vdCBzZXQgYWRkcmVzcyBmaWx0ZXJzIGFuZCBwcm9taXNjdWl0eSBoZXJlLCB0aGUgc3RhY2sgZG9lcwogCSAqIHRoYXQgc3RlcCBleHBsaWNpdGx5LgogCSAqLwotCXJldCA9IHQ0X3NldF9yeG1vZGUocGktPmFkYXB0ZXIsIDAsIHBpLT52aWlkLCBkZXYtPm10dSwgLTEsIC0xLCAtMSwKKwlyZXQgPSB0NF9zZXRfcnhtb2RlKHBpLT5hZGFwdGVyLCBtYiwgcGktPnZpaWQsIGRldi0+bXR1LCAtMSwgLTEsIC0xLAogCQkJICAgIHBpLT52bGFuX2dycCAhPSBOVUxMLCB0cnVlKTsKIAlpZiAocmV0ID09IDApIHsKLQkJcmV0ID0gdDRfY2hhbmdlX21hYyhwaS0+YWRhcHRlciwgMCwgcGktPnZpaWQsCisJCXJldCA9IHQ0X2NoYW5nZV9tYWMocGktPmFkYXB0ZXIsIG1iLCBwaS0+dmlpZCwKIAkJCQkgICAgcGktPnhhY3RfYWRkcl9maWx0LCBkZXYtPmRldl9hZGRyLCB0cnVlLAogCQkJCSAgICB0cnVlKTsKIAkJaWYgKHJldCA+PSAwKSB7CkBAIC0zMjIsOSArNDA0LDEwIEBACiAJCX0KIAl9CiAJaWYgKHJldCA9PSAwKQotCQlyZXQgPSB0NF9saW5rX3N0YXJ0KHBpLT5hZGFwdGVyLCAwLCBwaS0+dHhfY2hhbiwgJnBpLT5saW5rX2NmZyk7CisJCXJldCA9IHQ0X2xpbmtfc3RhcnQocGktPmFkYXB0ZXIsIG1iLCBwaS0+dHhfY2hhbiwKKwkJCQkgICAgJnBpLT5saW5rX2NmZyk7CiAJaWYgKHJldCA9PSAwKQotCQlyZXQgPSB0NF9lbmFibGVfdmkocGktPmFkYXB0ZXIsIDAsIHBpLT52aWlkLCB0cnVlLCB0cnVlKTsKKwkJcmV0ID0gdDRfZW5hYmxlX3ZpKHBpLT5hZGFwdGVyLCBtYiwgcGktPnZpaWQsIHRydWUsIHRydWUpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTUyNywzMCArNjEwLDQ3IEBACiB9CiAKIC8qKgorICoJd3JpdGVfcnNzIC0gd3JpdGUgdGhlIFJTUyB0YWJsZSBmb3IgYSBnaXZlbiBwb3J0CisgKglAcGk6IHRoZSBwb3J0CisgKglAcXVldWVzOiBhcnJheSBvZiBxdWV1ZSBpbmRpY2VzIGZvciBSU1MKKyAqCisgKglTZXRzIHVwIHRoZSBwb3J0aW9uIG9mIHRoZSBIVyBSU1MgdGFibGUgZm9yIHRoZSBwb3J0J3MgVkkgdG8gZGlzdHJpYnV0ZQorICoJcGFja2V0cyB0byB0aGUgUnggcXVldWVzIGluIEBxdWV1ZXMuCisgKi8KK3N0YXRpYyBpbnQgd3JpdGVfcnNzKGNvbnN0IHN0cnVjdCBwb3J0X2luZm8gKnBpLCBjb25zdCB1MTYgKnF1ZXVlcykKK3sKKwl1MTYgKnJzczsKKwlpbnQgaSwgZXJyOworCWNvbnN0IHN0cnVjdCBzZ2VfZXRoX3J4cSAqcSA9ICZwaS0+YWRhcHRlci0+c2dlLmV0aHJ4cVtwaS0+Zmlyc3RfcXNldF07CisKKwlyc3MgPSBrbWFsbG9jKHBpLT5yc3Nfc2l6ZSAqIHNpemVvZih1MTYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJzcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBtYXAgdGhlIHF1ZXVlIGluZGljZXMgdG8gcXVldWUgaWRzICovCisJZm9yIChpID0gMDsgaSA8IHBpLT5yc3Nfc2l6ZTsgaSsrLCBxdWV1ZXMrKykKKwkJcnNzW2ldID0gcVsqcXVldWVzXS5yc3BxLmFic19pZDsKKworCWVyciA9IHQ0X2NvbmZpZ19yc3NfcmFuZ2UocGktPmFkYXB0ZXIsIHBpLT5hZGFwdGVyLT5mbiwgcGktPnZpaWQsIDAsCisJCQkJICBwaS0+cnNzX3NpemUsIHJzcywgcGktPnJzc19zaXplKTsKKwlrZnJlZShyc3MpOworCXJldHVybiBlcnI7Cit9CisKKy8qKgogICoJc2V0dXBfcnNzIC0gY29uZmlndXJlIFJTUwogICoJQGFkYXA6IHRoZSBhZGFwdGVyCiAgKgotICoJU2V0cyB1cCBSU1MgdG8gZGlzdHJpYnV0ZSBwYWNrZXRzIHRvIG11bHRpcGxlIHJlY2VpdmUgcXVldWVzLiAgV2UKLSAqCWNvbmZpZ3VyZSB0aGUgUlNTIENQVSBsb29rdXAgdGFibGUgdG8gZGlzdHJpYnV0ZSB0byB0aGUgbnVtYmVyIG9mIEhXCi0gKglyZWNlaXZlIHF1ZXVlcywgYW5kIHRoZSByZXNwb25zZSBxdWV1ZSBsb29rdXAgdGFibGUgdG8gbmFycm93IHRoYXQKLSAqCWRvd24gdG8gdGhlIHJlc3BvbnNlIHF1ZXVlcyBhY3R1YWxseSBjb25maWd1cmVkIGZvciBlYWNoIHBvcnQuCi0gKglXZSBhbHdheXMgY29uZmlndXJlIHRoZSBSU1MgbWFwcGluZyBmb3IgYWxsIHBvcnRzIHNpbmNlIHRoZSBtYXBwaW5nCi0gKgl0YWJsZSBoYXMgcGxlbnR5IG9mIGVudHJpZXMuCisgKglTZXRzIHVwIFJTUyBmb3IgZWFjaCBwb3J0LgogICovCiBzdGF0aWMgaW50IHNldHVwX3JzcyhzdHJ1Y3QgYWRhcHRlciAqYWRhcCkKIHsKLQlpbnQgaSwgaiwgZXJyOwotCXUxNiByc3NbTUFYX0VUSF9RU0VUU107CisJaW50IGksIGVycjsKIAogCWZvcl9lYWNoX3BvcnQoYWRhcCwgaSkgewogCQljb25zdCBzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IGFkYXAycGluZm8oYWRhcCwgaSk7Ci0JCWNvbnN0IHN0cnVjdCBzZ2VfZXRoX3J4cSAqcSA9ICZhZGFwLT5zZ2UuZXRocnhxW3BpLT5maXJzdF9xc2V0XTsKIAotCQlmb3IgKGogPSAwOyBqIDwgcGktPm5xc2V0czsgaisrKQotCQkJcnNzW2pdID0gcVtqXS5yc3BxLmFic19pZDsKLQotCQllcnIgPSB0NF9jb25maWdfcnNzX3JhbmdlKGFkYXAsIDAsIHBpLT52aWlkLCAwLCBwaS0+cnNzX3NpemUsCi0JCQkJCSAgcnNzLCBwaS0+bnFzZXRzKTsKKwkJZXJyID0gd3JpdGVfcnNzKHBpLCBwaS0+cnNzKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtOTYzLDEwICsxMDYzLDExIEBACiAgKiBSZXR1cm4gYSB2ZXJzaW9uIG51bWJlciB0byBpZGVudGlmeSB0aGUgdHlwZSBvZiBhZGFwdGVyLiAgVGhlIHNjaGVtZSBpczoKICAqIC0gYml0cyAwLi45OiBjaGlwIHZlcnNpb24KICAqIC0gYml0cyAxMC4uMTU6IGNoaXAgcmV2aXNpb24KKyAqIC0gYml0cyAxNi4uMjM6IHJlZ2lzdGVyIGR1bXAgdmVyc2lvbgogICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBta19hZGFwX3ZlcnMoY29uc3Qgc3RydWN0IGFkYXB0ZXIgKmFwKQogewotCXJldHVybiA0IHwgKGFwLT5wYXJhbXMucmV2IDw8IDEwKTsKKwlyZXR1cm4gNCB8IChhcC0+cGFyYW1zLnJldiA8PCAxMCkgfCAoMSA8PCAxNik7CiB9CiAKIHN0YXRpYyB2b2lkIHJlZ19ibG9ja19kdW1wKHN0cnVjdCBhZGFwdGVyICphcCwgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgc3RhcnQsCkBAIC0xMDQxLDcgKzExNDIsOSBAQAogCQkweGRmYzAsIDB4ZGZlMCwKIAkJMHhlMDAwLCAweGVhN2MsCiAJCTB4ZjAwMCwgMHgxMTE5MCwKLQkJMHgxOTA0MCwgMHgxOTEyNCwKKwkJMHgxOTA0MCwgMHgxOTA2YywKKwkJMHgxOTA3OCwgMHgxOTA4MCwKKwkJMHgxOTA4YywgMHgxOTEyNCwKIAkJMHgxOTE1MCwgMHgxOTFiMCwKIAkJMHgxOTFkMCwgMHgxOTFlOCwKIAkJMHgxOTIzOCwgMHgxOTI0YywKQEAgLTEwNTQsNDkgKzExNTcsNDkgQEAKIAkJMHgxYTE5MCwgMHgxYTFjNCwKIAkJMHgxYTFmYywgMHgxYTFmYywKIAkJMHgxZTA0MCwgMHgxZTA0YywKLQkJMHgxZTI0MCwgMHgxZTI4YywKKwkJMHgxZTI4NCwgMHgxZTI4YywKIAkJMHgxZTJjMCwgMHgxZTJjMCwKIAkJMHgxZTJlMCwgMHgxZTJlMCwKIAkJMHgxZTMwMCwgMHgxZTM4NCwKIAkJMHgxZTNjMCwgMHgxZTNjOCwKIAkJMHgxZTQ0MCwgMHgxZTQ0YywKLQkJMHgxZTY0MCwgMHgxZTY4YywKKwkJMHgxZTY4NCwgMHgxZTY4YywKIAkJMHgxZTZjMCwgMHgxZTZjMCwKIAkJMHgxZTZlMCwgMHgxZTZlMCwKIAkJMHgxZTcwMCwgMHgxZTc4NCwKIAkJMHgxZTdjMCwgMHgxZTdjOCwKIAkJMHgxZTg0MCwgMHgxZTg0YywKLQkJMHgxZWE0MCwgMHgxZWE4YywKKwkJMHgxZWE4NCwgMHgxZWE4YywKIAkJMHgxZWFjMCwgMHgxZWFjMCwKIAkJMHgxZWFlMCwgMHgxZWFlMCwKIAkJMHgxZWIwMCwgMHgxZWI4NCwKIAkJMHgxZWJjMCwgMHgxZWJjOCwKIAkJMHgxZWM0MCwgMHgxZWM0YywKLQkJMHgxZWU0MCwgMHgxZWU4YywKKwkJMHgxZWU4NCwgMHgxZWU4YywKIAkJMHgxZWVjMCwgMHgxZWVjMCwKIAkJMHgxZWVlMCwgMHgxZWVlMCwKIAkJMHgxZWYwMCwgMHgxZWY4NCwKIAkJMHgxZWZjMCwgMHgxZWZjOCwKIAkJMHgxZjA0MCwgMHgxZjA0YywKLQkJMHgxZjI0MCwgMHgxZjI4YywKKwkJMHgxZjI4NCwgMHgxZjI4YywKIAkJMHgxZjJjMCwgMHgxZjJjMCwKIAkJMHgxZjJlMCwgMHgxZjJlMCwKIAkJMHgxZjMwMCwgMHgxZjM4NCwKIAkJMHgxZjNjMCwgMHgxZjNjOCwKIAkJMHgxZjQ0MCwgMHgxZjQ0YywKLQkJMHgxZjY0MCwgMHgxZjY4YywKKwkJMHgxZjY4NCwgMHgxZjY4YywKIAkJMHgxZjZjMCwgMHgxZjZjMCwKIAkJMHgxZjZlMCwgMHgxZjZlMCwKIAkJMHgxZjcwMCwgMHgxZjc4NCwKIAkJMHgxZjdjMCwgMHgxZjdjOCwKIAkJMHgxZjg0MCwgMHgxZjg0YywKLQkJMHgxZmE0MCwgMHgxZmE4YywKKwkJMHgxZmE4NCwgMHgxZmE4YywKIAkJMHgxZmFjMCwgMHgxZmFjMCwKIAkJMHgxZmFlMCwgMHgxZmFlMCwKIAkJMHgxZmIwMCwgMHgxZmI4NCwKIAkJMHgxZmJjMCwgMHgxZmJjOCwKIAkJMHgxZmM0MCwgMHgxZmM0YywKLQkJMHgxZmU0MCwgMHgxZmU4YywKKwkJMHgxZmU4NCwgMHgxZmU4YywKIAkJMHgxZmVjMCwgMHgxZmVjMCwKIAkJMHgxZmVlMCwgMHgxZmVlMCwKIAkJMHgxZmYwMCwgMHgxZmY4NCwKQEAgLTEyMTcsMTYgKzEzMjAsMTggQEAKIAkJcmV0dXJuIC1FQUdBSU47CiAJaWYgKHAtPmxpbmtfY2ZnLmF1dG9uZWcgIT0gQVVUT05FR19FTkFCTEUpCiAJCXJldHVybiAtRUlOVkFMOwotCXQ0X3Jlc3RhcnRfYW5lZyhwLT5hZGFwdGVyLCAwLCBwLT50eF9jaGFuKTsKKwl0NF9yZXN0YXJ0X2FuZWcocC0+YWRhcHRlciwgcC0+YWRhcHRlci0+Zm4sIHAtPnR4X2NoYW4pOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGlkZW50aWZ5X3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCiB7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXAgPSBuZXRkZXYyYWRhcChkZXYpOworCiAJaWYgKGRhdGEgPT0gMCkKIAkJZGF0YSA9IDI7ICAgICAvKiBkZWZhdWx0IHRvIDIgc2Vjb25kcyAqLwogCi0JcmV0dXJuIHQ0X2lkZW50aWZ5X3BvcnQobmV0ZGV2MmFkYXAoZGV2KSwgMCwgbmV0ZGV2MnBpbmZvKGRldiktPnZpaWQsCisJcmV0dXJuIHQ0X2lkZW50aWZ5X3BvcnQoYWRhcCwgYWRhcC0+Zm4sIG5ldGRldjJwaW5mbyhkZXYpLT52aWlkLAogCQkJCWRhdGEgKiA1KTsKIH0KIApAQCAtMTIzNCw3ICsxMzM5LDggQEAKIHsKIAl1bnNpZ25lZCBpbnQgdiA9IDA7CiAKLQlpZiAodHlwZSA9PSBGV19QT1JUX1RZUEVfQlRfU0dNSUkgfHwgdHlwZSA9PSBGV19QT1JUX1RZUEVfQlRfWEFVSSkgeworCWlmICh0eXBlID09IEZXX1BPUlRfVFlQRV9CVF9TR01JSSB8fCB0eXBlID09IEZXX1BPUlRfVFlQRV9CVF9YRkkgfHwKKwkgICAgdHlwZSA9PSBGV19QT1JUX1RZUEVfQlRfWEFVSSkgewogCQl2IHw9IFNVUFBPUlRFRF9UUDsKIAkJaWYgKGNhcHMgJiBGV19QT1JUX0NBUF9TUEVFRF8xMDBNKQogCQkJdiB8PSBTVVBQT1JURURfMTAwYmFzZVRfRnVsbDsKQEAgLTEyNTAsNyArMTM1NiwxMCBAQAogCQkJdiB8PSBTVVBQT1JURURfMTAwMDBiYXNlS1g0X0Z1bGw7CiAJfSBlbHNlIGlmICh0eXBlID09IEZXX1BPUlRfVFlQRV9LUikKIAkJdiB8PSBTVVBQT1JURURfQmFja3BsYW5lIHwgU1VQUE9SVEVEXzEwMDAwYmFzZUtSX0Z1bGw7Ci0JZWxzZSBpZiAodHlwZSA9PSBGV19QT1JUX1RZUEVfRklCRVIpCisJZWxzZSBpZiAodHlwZSA9PSBGV19QT1JUX1RZUEVfQlBfQVApCisJCXYgfD0gU1VQUE9SVEVEX0JhY2twbGFuZSB8IFNVUFBPUlRFRF8xMDAwMGJhc2VSX0ZFQzsKKwllbHNlIGlmICh0eXBlID09IEZXX1BPUlRfVFlQRV9GSUJFUl9YRkkgfHwKKwkJIHR5cGUgPT0gRldfUE9SVF9UWVBFX0ZJQkVSX1hBVUkgfHwgdHlwZSA9PSBGV19QT1JUX1RZUEVfU0ZQKQogCQl2IHw9IFNVUFBPUlRFRF9GSUJSRTsKIAogCWlmIChjYXBzICYgRldfUE9SVF9DQVBfQU5FRykKQEAgLTEyNzYsMTMgKzEzODUsMTkgQEAKIAljb25zdCBzdHJ1Y3QgcG9ydF9pbmZvICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCWlmIChwLT5wb3J0X3R5cGUgPT0gRldfUE9SVF9UWVBFX0JUX1NHTUlJIHx8CisJICAgIHAtPnBvcnRfdHlwZSA9PSBGV19QT1JUX1RZUEVfQlRfWEZJIHx8CiAJICAgIHAtPnBvcnRfdHlwZSA9PSBGV19QT1JUX1RZUEVfQlRfWEFVSSkKIAkJY21kLT5wb3J0ID0gUE9SVF9UUDsKLQllbHNlIGlmIChwLT5wb3J0X3R5cGUgPT0gRldfUE9SVF9UWVBFX0ZJQkVSKQorCWVsc2UgaWYgKHAtPnBvcnRfdHlwZSA9PSBGV19QT1JUX1RZUEVfRklCRVJfWEZJIHx8CisJCSBwLT5wb3J0X3R5cGUgPT0gRldfUE9SVF9UWVBFX0ZJQkVSX1hBVUkpCiAJCWNtZC0+cG9ydCA9IFBPUlRfRklCUkU7Ci0JZWxzZSBpZiAocC0+cG9ydF90eXBlID09IEZXX1BPUlRfVFlQRV9UV0lOQVgpCi0JCWNtZC0+cG9ydCA9IFBPUlRfREE7Ci0JZWxzZQorCWVsc2UgaWYgKHAtPnBvcnRfdHlwZSA9PSBGV19QT1JUX1RZUEVfU0ZQKSB7CisJCWlmIChwLT5tb2RfdHlwZSA9PSBGV19QT1JUX01PRF9UWVBFX1RXSU5BWF9QQVNTSVZFIHx8CisJCSAgICBwLT5tb2RfdHlwZSA9PSBGV19QT1JUX01PRF9UWVBFX1RXSU5BWF9BQ1RJVkUpCisJCQljbWQtPnBvcnQgPSBQT1JUX0RBOworCQllbHNlCisJCQljbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOworCX0gZWxzZQogCQljbWQtPnBvcnQgPSBQT1JUX09USEVSOwogCiAJaWYgKHAtPm1kaW9fYWRkciA+PSAwKSB7CkBAIC0xMzU2LDcgKzE0NzEsOCBAQAogCWxjLT5hdXRvbmVnID0gY21kLT5hdXRvbmVnOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJcmV0dXJuIHQ0X2xpbmtfc3RhcnQocC0+YWRhcHRlciwgMCwgcC0+dHhfY2hhbiwgbGMpOworCQlyZXR1cm4gdDRfbGlua19zdGFydChwLT5hZGFwdGVyLCBwLT5hZGFwdGVyLT5mbiwgcC0+dHhfY2hhbiwKKwkJCQkgICAgIGxjKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM4OCw3ICsxNTA0LDggQEAKIAlpZiAoZXBhdXNlLT50eF9wYXVzZSkKIAkJbGMtPnJlcXVlc3RlZF9mYyB8PSBQQVVTRV9UWDsKIAlpZiAobmV0aWZfcnVubmluZyhkZXYpKQotCQlyZXR1cm4gdDRfbGlua19zdGFydChwLT5hZGFwdGVyLCAwLCBwLT50eF9jaGFuLCBsYyk7CisJCXJldHVybiB0NF9saW5rX3N0YXJ0KHAtPmFkYXB0ZXIsIHAtPmFkYXB0ZXItPmZuLCBwLT50eF9jaGFuLAorCQkJCSAgICAgbGMpOwogCXJldHVybiAwOwogfQogCkBAIC0xNTIwLDcgKzE2MzcsOCBAQAogCQkJdiA9IEZXX1BBUkFNU19NTkVNKEZXX1BBUkFNU19NTkVNX0RNQVEpIHwKIAkJCSAgICBGV19QQVJBTVNfUEFSQU1fWChGV19QQVJBTVNfUEFSQU1fRE1BUV9JUV9JTlRDTlRUSFJFU0gpIHwKIAkJCSAgICBGV19QQVJBTVNfUEFSQU1fWVoocS0+Y250eHRfaWQpOwotCQkJZXJyID0gdDRfc2V0X3BhcmFtcyhhZGFwLCAwLCAwLCAwLCAxLCAmdiwgJm5ld19pZHgpOworCQkJZXJyID0gdDRfc2V0X3BhcmFtcyhhZGFwLCBhZGFwLT5mbiwgYWRhcC0+Zm4sIDAsIDEsICZ2LAorCQkJCQkgICAgJm5ld19pZHgpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC0xNzA4LDI3ICsxODI2LDExNCBAQAogCXJldHVybiBlcnI7CiB9CiAKKyNkZWZpbmUgVFNPX0ZMQUdTIChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNiB8IE5FVElGX0ZfVFNPX0VDTikKKwogc3RhdGljIGludCBzZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiB2YWx1ZSkKIHsKIAlpZiAodmFsdWUpCi0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzY7CisJCWRldi0+ZmVhdHVyZXMgfD0gVFNPX0ZMQUdTOwogCWVsc2UKLQkJZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082KTsKKwkJZGV2LT5mZWF0dXJlcyAmPSB+VFNPX0ZMQUdTOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmxhZ3MpCiB7Ci0JaWYgKGZsYWdzICYgfkVUSF9GTEFHX1JYSEFTSCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCXJldHVybiBldGh0b29sX29wX3NldF9mbGFncyhkZXYsIGZsYWdzLCBFVEhfRkxBR19SWEhBU0gpOworfQogCi0JaWYgKGZsYWdzICYgRVRIX0ZMQUdfUlhIQVNIKQotCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfUlhIQVNIOwotCWVsc2UKLQkJZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9SWEhBU0g7CitzdGF0aWMgaW50IGdldF9yc3NfdGFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcnhmaF9pbmRpciAqcCkKK3sKKwljb25zdCBzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgaW50IG4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHAtPnNpemUsIHBpLT5yc3Nfc2l6ZSk7CisKKwlwLT5zaXplID0gcGktPnJzc19zaXplOworCXdoaWxlIChuLS0pCisJCXAtPnJpbmdfaW5kZXhbbl0gPSBwaS0+cnNzW25dOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNldF9yc3NfdGFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSBjb25zdCBzdHJ1Y3QgZXRodG9vbF9yeGZoX2luZGlyICpwKQoreworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChwLT5zaXplICE9IHBpLT5yc3Nfc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZm9yIChpID0gMDsgaSA8IHAtPnNpemU7IGkrKykKKwkJaWYgKHAtPnJpbmdfaW5kZXhbaV0gPj0gcGktPm5xc2V0cykKKwkJCXJldHVybiAtRUlOVkFMOworCWZvciAoaSA9IDA7IGkgPCBwLT5zaXplOyBpKyspCisJCXBpLT5yc3NbaV0gPSBwLT5yaW5nX2luZGV4W2ldOworCWlmIChwaS0+YWRhcHRlci0+ZmxhZ3MgJiBGVUxMX0lOSVRfRE9ORSkKKwkJcmV0dXJuIHdyaXRlX3JzcyhwaSwgcGktPnJzcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3J4bmZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICppbmZvLAorCQkgICAgIHZvaWQgKnJ1bGVzKQoreworCWNvbnN0IHN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXN3aXRjaCAoaW5mby0+Y21kKSB7CisJY2FzZSBFVEhUT09MX0dSWEZIOiB7CisJCXVuc2lnbmVkIGludCB2ID0gcGktPnJzc19tb2RlOworCisJCWluZm8tPmRhdGEgPSAwOworCQlzd2l0Y2ggKGluZm8tPmZsb3dfdHlwZSkgeworCQljYXNlIFRDUF9WNF9GTE9XOgorCQkJaWYgKHYgJiBGV19SU1NfVklfQ09ORklHX0NNRF9JUDRGT1VSVFVQRU4pCisJCQkJaW5mby0+ZGF0YSA9IFJYSF9JUF9TUkMgfCBSWEhfSVBfRFNUIHwKKwkJCQkJICAgICBSWEhfTDRfQl8wXzEgfCBSWEhfTDRfQl8yXzM7CisJCQllbHNlIGlmICh2ICYgRldfUlNTX1ZJX0NPTkZJR19DTURfSVA0VFdPVFVQRU4pCisJCQkJaW5mby0+ZGF0YSA9IFJYSF9JUF9TUkMgfCBSWEhfSVBfRFNUOworCQkJYnJlYWs7CisJCWNhc2UgVURQX1Y0X0ZMT1c6CisJCQlpZiAoKHYgJiBGV19SU1NfVklfQ09ORklHX0NNRF9JUDRGT1VSVFVQRU4pICYmCisJCQkgICAgKHYgJiBGV19SU1NfVklfQ09ORklHX0NNRF9VRFBFTikpCisJCQkJaW5mby0+ZGF0YSA9IFJYSF9JUF9TUkMgfCBSWEhfSVBfRFNUIHwKKwkJCQkJICAgICBSWEhfTDRfQl8wXzEgfCBSWEhfTDRfQl8yXzM7CisJCQllbHNlIGlmICh2ICYgRldfUlNTX1ZJX0NPTkZJR19DTURfSVA0VFdPVFVQRU4pCisJCQkJaW5mby0+ZGF0YSA9IFJYSF9JUF9TUkMgfCBSWEhfSVBfRFNUOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9WNF9GTE9XOgorCQljYXNlIEFIX0VTUF9WNF9GTE9XOgorCQljYXNlIElQVjRfRkxPVzoKKwkJCWlmICh2ICYgRldfUlNTX1ZJX0NPTkZJR19DTURfSVA0VFdPVFVQRU4pCisJCQkJaW5mby0+ZGF0YSA9IFJYSF9JUF9TUkMgfCBSWEhfSVBfRFNUOworCQkJYnJlYWs7CisJCWNhc2UgVENQX1Y2X0ZMT1c6CisJCQlpZiAodiAmIEZXX1JTU19WSV9DT05GSUdfQ01EX0lQNkZPVVJUVVBFTikKKwkJCQlpbmZvLT5kYXRhID0gUlhIX0lQX1NSQyB8IFJYSF9JUF9EU1QgfAorCQkJCQkgICAgIFJYSF9MNF9CXzBfMSB8IFJYSF9MNF9CXzJfMzsKKwkJCWVsc2UgaWYgKHYgJiBGV19SU1NfVklfQ09ORklHX0NNRF9JUDZUV09UVVBFTikKKwkJCQlpbmZvLT5kYXRhID0gUlhIX0lQX1NSQyB8IFJYSF9JUF9EU1Q7CisJCQlicmVhazsKKwkJY2FzZSBVRFBfVjZfRkxPVzoKKwkJCWlmICgodiAmIEZXX1JTU19WSV9DT05GSUdfQ01EX0lQNkZPVVJUVVBFTikgJiYKKwkJCSAgICAodiAmIEZXX1JTU19WSV9DT05GSUdfQ01EX1VEUEVOKSkKKwkJCQlpbmZvLT5kYXRhID0gUlhIX0lQX1NSQyB8IFJYSF9JUF9EU1QgfAorCQkJCQkgICAgIFJYSF9MNF9CXzBfMSB8IFJYSF9MNF9CXzJfMzsKKwkJCWVsc2UgaWYgKHYgJiBGV19SU1NfVklfQ09ORklHX0NNRF9JUDZUV09UVVBFTikKKwkJCQlpbmZvLT5kYXRhID0gUlhIX0lQX1NSQyB8IFJYSF9JUF9EU1Q7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX1Y2X0ZMT1c6CisJCWNhc2UgQUhfRVNQX1Y2X0ZMT1c6CisJCWNhc2UgSVBWNl9GTE9XOgorCQkJaWYgKHYgJiBGV19SU1NfVklfQ09ORklHX0NNRF9JUDZUV09UVVBFTikKKwkJCQlpbmZvLT5kYXRhID0gUlhIX0lQX1NSQyB8IFJYSF9JUF9EU1Q7CisJCQlicmVhazsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBFVEhUT09MX0dSWFJJTkdTOgorCQlpbmZvLT5kYXRhID0gcGktPm5xc2V0czsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKwogc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBjeGdiX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MgICAgICA9IGdldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzICAgICAgPSBzZXRfc2V0dGluZ3MsCkBAIC0xNzYwLDYgKzE5NjUsOSBAQAogCS5zZXRfd29sICAgICAgICAgICA9IHNldF93b2wsCiAJLnNldF90c28gICAgICAgICAgID0gc2V0X3RzbywKIAkuc2V0X2ZsYWdzICAgICAgICAgPSBzZXRfZmxhZ3MsCisJLmdldF9yeG5mYyAgICAgICAgID0gZ2V0X3J4bmZjLAorCS5nZXRfcnhmaF9pbmRpciAgICA9IGdldF9yc3NfdGFibGUsCisJLnNldF9yeGZoX2luZGlyICAgID0gc2V0X3Jzc190YWJsZSwKIAkuZmxhc2hfZGV2aWNlICAgICAgPSBzZXRfZmxhc2gsCiB9OwogCkBAIC0yMzA2LDkgKzI1MTQsMTEgQEAKIAlsbGkuYWRhcHRlcl90eXBlID0gYWRhcC0+cGFyYW1zLnJldjsKIAlsbGkuaXNjc2lfaW9sZW4gPSBNQVhSWERBVEFfR0VUKHQ0X3JlYWRfcmVnKGFkYXAsIFRQX1BBUkFfUkVHMikpOwogCWxsaS51ZGJfZGVuc2l0eSA9IDEgPDwgUVVFVUVTUEVSUEFHRVBGMF9HRVQoCi0JCQl0NF9yZWFkX3JlZyhhZGFwLCBTR0VfRUdSRVNTX1FVRVVFU19QRVJfUEFHRV9QRikpOworCQkJdDRfcmVhZF9yZWcoYWRhcCwgU0dFX0VHUkVTU19RVUVVRVNfUEVSX1BBR0VfUEYpID4+CisJCQkoYWRhcC0+Zm4gKiA0KSk7CiAJbGxpLnVjcV9kZW5zaXR5ID0gMSA8PCBRVUVVRVNQRVJQQUdFUEYwX0dFVCgKLQkJCXQ0X3JlYWRfcmVnKGFkYXAsIFNHRV9JTkdSRVNTX1FVRVVFU19QRVJfUEFHRV9QRikpOworCQkJdDRfcmVhZF9yZWcoYWRhcCwgU0dFX0lOR1JFU1NfUVVFVUVTX1BFUl9QQUdFX1BGKSA+PgorCQkJKGFkYXAtPmZuICogNCkpOwogCWxsaS5ndHNfcmVnID0gYWRhcC0+cmVncyArIE1ZUEZfUkVHKFNHRV9QRl9HVFMpOwogCWxsaS5kYl9yZWcgPSBhZGFwLT5yZWdzICsgTVlQRl9SRUcoU0dFX1BGX0tET09SQkVMTCk7CiAJbGxpLmZ3X3ZlcnMgPSBhZGFwLT5wYXJhbXMuZndfdmVyczsKQEAgLTI0ODMsNiArMjY5Myw3IEBACiAJdDRfaW50cl9kaXNhYmxlKGFkYXB0ZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnRpZF9yZWxlYXNlX3Rhc2spOwogCWFkYXB0ZXItPnRpZF9yZWxlYXNlX3Rhc2tfYnVzeSA9IGZhbHNlOworCWFkYXB0ZXItPnRpZF9yZWxlYXNlX2hlYWQgPSBOVUxMOwogCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgVVNJTkdfTVNJWCkgewogCQlmcmVlX21zaXhfcXVldWVfaXJxcyhhZGFwdGVyKTsKQEAgLTI1MTEsOSArMjcyMiwxMCBAQAogCX0KIAogCWRldi0+cmVhbF9udW1fdHhfcXVldWVzID0gcGktPm5xc2V0czsKLQlsaW5rX3N0YXJ0KGRldik7Ci0JbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhkZXYpOwotCXJldHVybiAwOworCWVyciA9IGxpbmtfc3RhcnQoZGV2KTsKKwlpZiAoIWVycikKKwkJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhkZXYpOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgY3hnYl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMjUyMywxNSArMjczNSwxNSBAQAogCiAJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKGRldik7CiAJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQlyZXR1cm4gdDRfZW5hYmxlX3ZpKGFkYXB0ZXIsIDAsIHBpLT52aWlkLCBmYWxzZSwgZmFsc2UpOworCXJldHVybiB0NF9lbmFibGVfdmkoYWRhcHRlciwgYWRhcHRlci0+Zm4sIHBpLT52aWlkLCBmYWxzZSwgZmFsc2UpOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmN4Z2JfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpjeGdiX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkJc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpucykKIHsKIAlzdHJ1Y3QgcG9ydF9zdGF0cyBzdGF0czsKIAlzdHJ1Y3QgcG9ydF9pbmZvICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IHAtPmFkYXB0ZXI7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5zID0gJmRldi0+c3RhdHM7CiAKIAlzcGluX2xvY2soJmFkYXB0ZXItPnN0YXRzX2xvY2spOwogCXQ0X2dldF9wb3J0X3N0YXRzKGFkYXB0ZXIsIHAtPnR4X2NoYW4sICZzdGF0cyk7CkBAIC0yNTcwLDYgKzI3ODIsNyBAQAogCiBzdGF0aWMgaW50IGN4Z2JfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpyZXEsIGludCBjbWQpCiB7CisJdW5zaWduZWQgaW50IG1ib3g7CiAJaW50IHJldCA9IDAsIHBydGFkLCBkZXZhZDsKIAlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG1paV9pb2N0bF9kYXRhICpkYXRhID0gKHN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqKSZyZXEtPmlmcl9kYXRhOwpAQCAtMjU5MiwxMSArMjgwNSwxMiBAQAogCQl9IGVsc2UKIAkJCXJldHVybiAtRUlOVkFMOwogCisJCW1ib3ggPSBwaS0+YWRhcHRlci0+Zm47CiAJCWlmIChjbWQgPT0gU0lPQ0dNSUlSRUcpCi0JCQlyZXQgPSB0NF9tZGlvX3JkKHBpLT5hZGFwdGVyLCAwLCBwcnRhZCwgZGV2YWQsCisJCQlyZXQgPSB0NF9tZGlvX3JkKHBpLT5hZGFwdGVyLCBtYm94LCBwcnRhZCwgZGV2YWQsCiAJCQkJCSBkYXRhLT5yZWdfbnVtLCAmZGF0YS0+dmFsX291dCk7CiAJCWVsc2UKLQkJCXJldCA9IHQ0X21kaW9fd3IocGktPmFkYXB0ZXIsIDAsIHBydGFkLCBkZXZhZCwKKwkJCXJldCA9IHQ0X21kaW9fd3IocGktPmFkYXB0ZXIsIG1ib3gsIHBydGFkLCBkZXZhZCwKIAkJCQkJIGRhdGEtPnJlZ19udW0sIGRhdGEtPnZhbF9pbik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0yNjE4LDggKzI4MzIsOCBAQAogCiAJaWYgKG5ld19tdHUgPCA4MSB8fCBuZXdfbXR1ID4gTUFYX01UVSkgICAgICAgICAvKiBhY2NvbW1vZGF0ZSBTQUNLICovCiAJCXJldHVybiAtRUlOVkFMOwotCXJldCA9IHQ0X3NldF9yeG1vZGUocGktPmFkYXB0ZXIsIDAsIHBpLT52aWlkLCBuZXdfbXR1LCAtMSwgLTEsIC0xLCAtMSwKLQkJCSAgICB0cnVlKTsKKwlyZXQgPSB0NF9zZXRfcnhtb2RlKHBpLT5hZGFwdGVyLCBwaS0+YWRhcHRlci0+Zm4sIHBpLT52aWlkLCBuZXdfbXR1LCAtMSwKKwkJCSAgICAtMSwgLTEsIC0xLCB0cnVlKTsKIAlpZiAoIXJldCkKIAkJZGV2LT5tdHUgPSBuZXdfbXR1OwogCXJldHVybiByZXQ7CkBAIC0yNjM0LDggKzI4NDgsOCBAQAogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLT5zYV9kYXRhKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXQgPSB0NF9jaGFuZ2VfbWFjKHBpLT5hZGFwdGVyLCAwLCBwaS0+dmlpZCwgcGktPnhhY3RfYWRkcl9maWx0LAotCQkJICAgIGFkZHItPnNhX2RhdGEsIHRydWUsIHRydWUpOworCXJldCA9IHQ0X2NoYW5nZV9tYWMocGktPmFkYXB0ZXIsIHBpLT5hZGFwdGVyLT5mbiwgcGktPnZpaWQsCisJCQkgICAgcGktPnhhY3RfYWRkcl9maWx0LCBhZGRyLT5zYV9kYXRhLCB0cnVlLCB0cnVlKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMjY0OSw4ICsyODYzLDggQEAKIAlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CiAKIAlwaS0+dmxhbl9ncnAgPSBncnA7Ci0JdDRfc2V0X3J4bW9kZShwaS0+YWRhcHRlciwgMCwgcGktPnZpaWQsIC0xLCAtMSwgLTEsIC0xLCBncnAgIT0gTlVMTCwKLQkJICAgICAgdHJ1ZSk7CisJdDRfc2V0X3J4bW9kZShwaS0+YWRhcHRlciwgcGktPmFkYXB0ZXItPmZuLCBwaS0+dmlpZCwgLTEsIC0xLCAtMSwgLTEsCisJCSAgICAgIGdycCAhPSBOVUxMLCB0cnVlKTsKIH0KIAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCkBAIC0yNjc0LDcgKzI4ODgsNyBAQAogCS5uZG9fb3BlbiAgICAgICAgICAgICA9IGN4Z2Jfb3BlbiwKIAkubmRvX3N0b3AgICAgICAgICAgICAgPSBjeGdiX2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdCAgICAgICA9IHQ0X2V0aF94bWl0LAotCS5uZG9fZ2V0X3N0YXRzICAgICAgICA9IGN4Z2JfZ2V0X3N0YXRzLAorCS5uZG9fZ2V0X3N0YXRzNjQgICAgICA9IGN4Z2JfZ2V0X3N0YXRzLAogCS5uZG9fc2V0X3J4X21vZGUgICAgICA9IGN4Z2Jfc2V0X3J4bW9kZSwKIAkubmRvX3NldF9tYWNfYWRkcmVzcyAgPSBjeGdiX3NldF9tYWNfYWRkciwKIAkubmRvX3ZhbGlkYXRlX2FkZHIgICAgPSBldGhfdmFsaWRhdGVfYWRkciwKQEAgLTI3MDcsNiArMjkyMSw3NiBAQAogCXQ0X3dyaXRlX3JlZyhhZGFwLCBQQ0lFX01FTV9BQ0NFU1NfUkVHKFBDSUVfTUVNX0FDQ0VTU19CQVNFX1dJTiwgMiksCiAJCSAgICAgKGJhcjAgKyBNRU1XSU4yX0JBU0UpIHwgQklSKDApIHwKIAkJICAgICBXSU5ET1coaWxvZzIoTUVNV0lOMl9BUEVSVFVSRSkgLSAxMCkpOworCWlmIChhZGFwLT52cmVzLm9jcS5zaXplKSB7CisJCXVuc2lnbmVkIGludCBzdGFydCwgc3pfa2I7CisKKwkJc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoYWRhcC0+cGRldiwgMikgKworCQkJT0NRX1dJTl9PRkZTRVQoYWRhcC0+cGRldiwgJmFkYXAtPnZyZXMpOworCQlzel9rYiA9IHJvdW5kdXBfcG93X29mX3R3byhhZGFwLT52cmVzLm9jcS5zaXplKSA+PiAxMDsKKwkJdDRfd3JpdGVfcmVnKGFkYXAsCisJCQkgICAgIFBDSUVfTUVNX0FDQ0VTU19SRUcoUENJRV9NRU1fQUNDRVNTX0JBU0VfV0lOLCAzKSwKKwkJCSAgICAgc3RhcnQgfCBCSVIoMSkgfCBXSU5ET1coaWxvZzIoc3pfa2IpKSk7CisJCXQ0X3dyaXRlX3JlZyhhZGFwLAorCQkJICAgICBQQ0lFX01FTV9BQ0NFU1NfUkVHKFBDSUVfTUVNX0FDQ0VTU19PRkZTRVQsIDMpLAorCQkJICAgICBhZGFwLT52cmVzLm9jcS5zdGFydCk7CisJCXQ0X3JlYWRfcmVnKGFkYXAsCisJCQkgICAgUENJRV9NRU1fQUNDRVNTX1JFRyhQQ0lFX01FTV9BQ0NFU1NfT0ZGU0VULCAzKSk7CisJfQorfQorCitzdGF0aWMgaW50IGFkYXBfaW5pdDEoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHN0cnVjdCBmd19jYXBzX2NvbmZpZ19jbWQgKmMpCit7CisJdTMyIHY7CisJaW50IHJldDsKKworCS8qIGdldCBkZXZpY2UgY2FwYWJpbGl0aWVzICovCisJbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCWMtPm9wX3RvX3dyaXRlID0gaHRvbmwoRldfQ01EX09QKEZXX0NBUFNfQ09ORklHX0NNRCkgfAorCQkJICAgICAgIEZXX0NNRF9SRVFVRVNUIHwgRldfQ01EX1JFQUQpOworCWMtPnJldHZhbF9sZW4xNiA9IGh0b25sKEZXX0xFTjE2KCpjKSk7CisJcmV0ID0gdDRfd3JfbWJveChhZGFwLCBhZGFwLT5mbiwgYywgc2l6ZW9mKCpjKSwgYyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBzZWxlY3QgY2FwYWJpbGl0aWVzIHdlJ2xsIGJlIHVzaW5nICovCisJaWYgKGMtPm5pY2NhcHMgJiBodG9ucyhGV19DQVBTX0NPTkZJR19OSUNfVk0pKSB7CisJCWlmICghdmZfYWNscykKKwkJCWMtPm5pY2NhcHMgXj0gaHRvbnMoRldfQ0FQU19DT05GSUdfTklDX1ZNKTsKKwkJZWxzZQorCQkJYy0+bmljY2FwcyA9IGh0b25zKEZXX0NBUFNfQ09ORklHX05JQ19WTSk7CisJfSBlbHNlIGlmICh2Zl9hY2xzKSB7CisJCWRldl9lcnIoYWRhcC0+cGRldl9kZXYsICJ2aXJ0dWFsaXphdGlvbiBBQ0xzIG5vdCBzdXBwb3J0ZWQiKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJYy0+b3BfdG9fd3JpdGUgPSBodG9ubChGV19DTURfT1AoRldfQ0FQU19DT05GSUdfQ01EKSB8CisJCQkgICAgICAgRldfQ01EX1JFUVVFU1QgfCBGV19DTURfV1JJVEUpOworCXJldCA9IHQ0X3dyX21ib3goYWRhcCwgYWRhcC0+Zm4sIGMsIHNpemVvZigqYyksIE5VTEwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdDRfY29uZmlnX2dsYmxfcnNzKGFkYXAsIGFkYXAtPmZuLAorCQkJCSBGV19SU1NfR0xCX0NPTkZJR19DTURfTU9ERV9CQVNJQ1ZJUlRVQUwsCisJCQkJIEZXX1JTU19HTEJfQ09ORklHX0NNRF9UTkxNQVBFTiB8CisJCQkJIEZXX1JTU19HTEJfQ09ORklHX0NNRF9UTkxBTExMS1ApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdDRfY2ZnX3BmdmYoYWRhcCwgYWRhcC0+Zm4sIGFkYXAtPmZuLCAwLCBNQVhfRUdSUSwgNjQsIE1BWF9JTkdRLAorCQkJICAwLCAwLCA0LCAweGYsIDB4ZiwgMTYsIEZXX0NNRF9DQVBfUEYsIEZXX0NNRF9DQVBfUEYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJdDRfc2dlX2luaXQoYWRhcCk7CisKKwkvKiB0d2VhayBzb21lIHNldHRpbmdzICovCisJdDRfd3JpdGVfcmVnKGFkYXAsIFRQX1NISUZUX0NOVCwgMHg2NGY4ODQ5KTsKKwl0NF93cml0ZV9yZWcoYWRhcCwgVUxQX1JYX1RERFBfUFNaLCBIUFowKFBBR0VfU0hJRlQgLSAxMikpOworCXQ0X3dyaXRlX3JlZyhhZGFwLCBUUF9QSU9fQUREUiwgVFBfSU5HUkVTU19DT05GSUcpOworCXYgPSB0NF9yZWFkX3JlZyhhZGFwLCBUUF9QSU9fREFUQSk7CisJdDRfd3JpdGVfcmVnKGFkYXAsIFRQX1BJT19EQVRBLCB2ICYgfkNTVU1fSEFTX1BTRVVET19IRFIpOworCisJLyogZ2V0IGJhc2ljIHN0dWZmIGdvaW5nICovCisJcmV0dXJuIHQ0X2Vhcmx5X2luaXQoYWRhcCwgYWRhcC0+Zm4pOwogfQogCiAvKgpAQCAtMjczNCw3ICszMDE4LDcgQEAKIAkJcmV0dXJuIHJldDsKIAogCS8qIGNvbnRhY3QgRlcsIHJlcXVlc3QgbWFzdGVyICovCi0JcmV0ID0gdDRfZndfaGVsbG8oYWRhcCwgMCwgMCwgTUFTVEVSX01VU1QsICZzdGF0ZSk7CisJcmV0ID0gdDRfZndfaGVsbG8oYWRhcCwgYWRhcC0+Zm4sIGFkYXAtPmZuLCBNQVNURVJfTVVTVCwgJnN0YXRlKTsKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKGFkYXAtPnBkZXZfZGV2LCAiY291bGQgbm90IGNvbm5lY3QgdG8gRlcsIGVycm9yICVkXG4iLAogCQkJcmV0KTsKQEAgLTI3NDIsNDQgKzMwMjYsNyBAQAogCX0KIAogCS8qIHJlc2V0IGRldmljZSAqLwotCXJldCA9IHQ0X2Z3X3Jlc2V0KGFkYXAsIDAsIFBJT1JTVE1PREUgfCBQSU9SU1QpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGJ5ZTsKLQotCS8qIGdldCBkZXZpY2UgY2FwYWJpbGl0aWVzICovCi0JbWVtc2V0KCZjLCAwLCBzaXplb2YoYykpOwotCWMub3BfdG9fd3JpdGUgPSBodG9ubChGV19DTURfT1AoRldfQ0FQU19DT05GSUdfQ01EKSB8Ci0JCQkgICAgICBGV19DTURfUkVRVUVTVCB8IEZXX0NNRF9SRUFEKTsKLQljLnJldHZhbF9sZW4xNiA9IGh0b25sKEZXX0xFTjE2KGMpKTsKLQlyZXQgPSB0NF93cl9tYm94KGFkYXAsIDAsICZjLCBzaXplb2YoYyksICZjKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBieWU7Ci0KLQkvKiBzZWxlY3QgY2FwYWJpbGl0aWVzIHdlJ2xsIGJlIHVzaW5nICovCi0JaWYgKGMubmljY2FwcyAmIGh0b25zKEZXX0NBUFNfQ09ORklHX05JQ19WTSkpIHsKLQkJaWYgKCF2Zl9hY2xzKQotCQkJYy5uaWNjYXBzIF49IGh0b25zKEZXX0NBUFNfQ09ORklHX05JQ19WTSk7Ci0JCWVsc2UKLQkJCWMubmljY2FwcyA9IGh0b25zKEZXX0NBUFNfQ09ORklHX05JQ19WTSk7Ci0JfSBlbHNlIGlmICh2Zl9hY2xzKSB7Ci0JCWRldl9lcnIoYWRhcC0+cGRldl9kZXYsICJ2aXJ0dWFsaXphdGlvbiBBQ0xzIG5vdCBzdXBwb3J0ZWQiKTsKLQkJZ290byBieWU7Ci0JfQotCWMub3BfdG9fd3JpdGUgPSBodG9ubChGV19DTURfT1AoRldfQ0FQU19DT05GSUdfQ01EKSB8Ci0JCQkgICAgICBGV19DTURfUkVRVUVTVCB8IEZXX0NNRF9XUklURSk7Ci0JcmV0ID0gdDRfd3JfbWJveChhZGFwLCAwLCAmYywgc2l6ZW9mKGMpLCBOVUxMKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBieWU7Ci0KLQlyZXQgPSB0NF9jb25maWdfZ2xibF9yc3MoYWRhcCwgMCwKLQkJCQkgRldfUlNTX0dMQl9DT05GSUdfQ01EX01PREVfQkFTSUNWSVJUVUFMLAotCQkJCSBGV19SU1NfR0xCX0NPTkZJR19DTURfVE5MTUFQRU4gfAotCQkJCSBGV19SU1NfR0xCX0NPTkZJR19DTURfVE5MQUxMTEtQKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBieWU7Ci0KLQlyZXQgPSB0NF9jZmdfcGZ2ZihhZGFwLCAwLCAwLCAwLCA2NCwgNjQsIDY0LCAwLCAwLCA0LCAweGYsIDB4ZiwgMTYsCi0JCQkgIEZXX0NNRF9DQVBfUEYsIEZXX0NNRF9DQVBfUEYpOworCXJldCA9IHQ0X2Z3X3Jlc2V0KGFkYXAsIGFkYXAtPmZuLCBQSU9SU1RNT0RFIHwgUElPUlNUKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBieWU7CiAKQEAgLTI3OTAsMjcgKzMwMzcsMzEgQEAKIAlmb3IgKHYgPSAxOyB2IDwgU0dFX05DT1VOVEVSUzsgdisrKQogCQlhZGFwLT5zZ2UuY291bnRlcl92YWxbdl0gPSBtaW4oaW50cl9jbnRbdiAtIDFdLAogCQkJCQkgICAgICAgVEhSRVNIT0xEXzNfTUFTSyk7Ci0JdDRfc2dlX2luaXQoYWRhcCk7Ci0KLQkvKiBnZXQgYmFzaWMgc3R1ZmYgZ29pbmcgKi8KLQlyZXQgPSB0NF9lYXJseV9pbml0KGFkYXAsIDApOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGJ5ZTsKLQogI2RlZmluZSBGV19QQVJBTV9ERVYocGFyYW0pIFwKIAkoRldfUEFSQU1TX01ORU0oRldfUEFSQU1TX01ORU1fREVWKSB8IFwKIAkgRldfUEFSQU1TX1BBUkFNX1goRldfUEFSQU1TX1BBUkFNX0RFVl8jI3BhcmFtKSkKIAorCXBhcmFtc1swXSA9IEZXX1BBUkFNX0RFVihDQ0xLKTsKKwlyZXQgPSB0NF9xdWVyeV9wYXJhbXMoYWRhcCwgYWRhcC0+Zm4sIGFkYXAtPmZuLCAwLCAxLCBwYXJhbXMsIHZhbCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gYnllOworCWFkYXAtPnBhcmFtcy52cGQuY2NsayA9IHZhbFswXTsKKworCXJldCA9IGFkYXBfaW5pdDEoYWRhcCwgJmMpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGJ5ZTsKKwogI2RlZmluZSBGV19QQVJBTV9QRlZGKHBhcmFtKSBcCiAJKEZXX1BBUkFNU19NTkVNKEZXX1BBUkFNU19NTkVNX1BGVkYpIHwgXAotCSBGV19QQVJBTVNfUEFSQU1fWChGV19QQVJBTVNfUEFSQU1fUEZWRl8jI3BhcmFtKSkKKwkgRldfUEFSQU1TX1BBUkFNX1goRldfUEFSQU1TX1BBUkFNX1BGVkZfIyNwYXJhbSkgfCBcCisJIEZXX1BBUkFNU19QQVJBTV9ZKGFkYXAtPmZuKSkKIAogCXBhcmFtc1swXSA9IEZXX1BBUkFNX0RFVihQT1JUVkVDKTsKIAlwYXJhbXNbMV0gPSBGV19QQVJBTV9QRlZGKEwyVF9TVEFSVCk7CiAJcGFyYW1zWzJdID0gRldfUEFSQU1fUEZWRihMMlRfRU5EKTsKIAlwYXJhbXNbM10gPSBGV19QQVJBTV9QRlZGKEZJTFRFUl9TVEFSVCk7CiAJcGFyYW1zWzRdID0gRldfUEFSQU1fUEZWRihGSUxURVJfRU5EKTsKLQlyZXQgPSB0NF9xdWVyeV9wYXJhbXMoYWRhcCwgMCwgMCwgMCwgNSwgcGFyYW1zLCB2YWwpOworCXJldCA9IHQ0X3F1ZXJ5X3BhcmFtcyhhZGFwLCBhZGFwLT5mbiwgYWRhcC0+Zm4sIDAsIDUsIHBhcmFtcywgdmFsKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBieWU7CiAJcG9ydF92ZWMgPSB2YWxbMF07CkBAIC0yODI1LDcgKzMwNzYsOCBAQAogCQlwYXJhbXNbM10gPSBGV19QQVJBTV9QRlZGKFRERFBfU1RBUlQpOwogCQlwYXJhbXNbNF0gPSBGV19QQVJBTV9QRlZGKFRERFBfRU5EKTsKIAkJcGFyYW1zWzVdID0gRldfUEFSQU1fREVWKEZMT1dDX0JVRkZJRk9fU1opOwotCQlyZXQgPSB0NF9xdWVyeV9wYXJhbXMoYWRhcCwgMCwgMCwgMCwgNiwgcGFyYW1zLCB2YWwpOworCQlyZXQgPSB0NF9xdWVyeV9wYXJhbXMoYWRhcCwgYWRhcC0+Zm4sIGFkYXAtPmZuLCAwLCA2LCBwYXJhbXMsCisJCQkJICAgICAgdmFsKTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIGJ5ZTsKIAkJYWRhcC0+dGlkcy5udGlkcyA9IHZhbFswXTsKQEAgLTI4NDQsNyArMzA5Niw4IEBACiAJCXBhcmFtc1szXSA9IEZXX1BBUkFNX1BGVkYoUlFfRU5EKTsKIAkJcGFyYW1zWzRdID0gRldfUEFSQU1fUEZWRihQQkxfU1RBUlQpOwogCQlwYXJhbXNbNV0gPSBGV19QQVJBTV9QRlZGKFBCTF9FTkQpOwotCQlyZXQgPSB0NF9xdWVyeV9wYXJhbXMoYWRhcCwgMCwgMCwgMCwgNiwgcGFyYW1zLCB2YWwpOworCQlyZXQgPSB0NF9xdWVyeV9wYXJhbXMoYWRhcCwgYWRhcC0+Zm4sIGFkYXAtPmZuLCAwLCA2LCBwYXJhbXMsCisJCQkJICAgICAgdmFsKTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIGJ5ZTsKIAkJYWRhcC0+dnJlcy5zdGFnLnN0YXJ0ID0gdmFsWzBdOwpAQCAtMjg1MywxMSArMzEwNiwyOSBAQAogCQlhZGFwLT52cmVzLnJxLnNpemUgPSB2YWxbM10gLSB2YWxbMl0gKyAxOwogCQlhZGFwLT52cmVzLnBibC5zdGFydCA9IHZhbFs0XTsKIAkJYWRhcC0+dnJlcy5wYmwuc2l6ZSA9IHZhbFs1XSAtIHZhbFs0XSArIDE7CisKKwkJcGFyYW1zWzBdID0gRldfUEFSQU1fUEZWRihTUVJRX1NUQVJUKTsKKwkJcGFyYW1zWzFdID0gRldfUEFSQU1fUEZWRihTUVJRX0VORCk7CisJCXBhcmFtc1syXSA9IEZXX1BBUkFNX1BGVkYoQ1FfU1RBUlQpOworCQlwYXJhbXNbM10gPSBGV19QQVJBTV9QRlZGKENRX0VORCk7CisJCXBhcmFtc1s0XSA9IEZXX1BBUkFNX1BGVkYoT0NRX1NUQVJUKTsKKwkJcGFyYW1zWzVdID0gRldfUEFSQU1fUEZWRihPQ1FfRU5EKTsKKwkJcmV0ID0gdDRfcXVlcnlfcGFyYW1zKGFkYXAsIGFkYXAtPmZuLCBhZGFwLT5mbiwgMCwgNiwgcGFyYW1zLAorCQkJCSAgICAgIHZhbCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBieWU7CisJCWFkYXAtPnZyZXMucXAuc3RhcnQgPSB2YWxbMF07CisJCWFkYXAtPnZyZXMucXAuc2l6ZSA9IHZhbFsxXSAtIHZhbFswXSArIDE7CisJCWFkYXAtPnZyZXMuY3Euc3RhcnQgPSB2YWxbMl07CisJCWFkYXAtPnZyZXMuY3Euc2l6ZSA9IHZhbFszXSAtIHZhbFsyXSArIDE7CisJCWFkYXAtPnZyZXMub2NxLnN0YXJ0ID0gdmFsWzRdOworCQlhZGFwLT52cmVzLm9jcS5zaXplID0gdmFsWzVdIC0gdmFsWzRdICsgMTsKIAl9CiAJaWYgKGMuaXNjc2ljYXBzKSB7CiAJCXBhcmFtc1swXSA9IEZXX1BBUkFNX1BGVkYoSVNDU0lfU1RBUlQpOwogCQlwYXJhbXNbMV0gPSBGV19QQVJBTV9QRlZGKElTQ1NJX0VORCk7Ci0JCXJldCA9IHQ0X3F1ZXJ5X3BhcmFtcyhhZGFwLCAwLCAwLCAwLCAyLCBwYXJhbXMsIHZhbCk7CisJCXJldCA9IHQ0X3F1ZXJ5X3BhcmFtcyhhZGFwLCBhZGFwLT5mbiwgYWRhcC0+Zm4sIDAsIDIsIHBhcmFtcywKKwkJCQkgICAgICB2YWwpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gYnllOwogCQlhZGFwLT52cmVzLmlzY3NpLnN0YXJ0ID0gdmFsWzBdOwpAQCAtMjg3NywxMiArMzE0OCw0MSBAQAogCXQ0X2xvYWRfbXR1cyhhZGFwLCBhZGFwLT5wYXJhbXMubXR1cywgYWRhcC0+cGFyYW1zLmFfd25kLAogCQkgICAgIGFkYXAtPnBhcmFtcy5iX3duZCk7CiAKLQkvKiB0d2VhayBzb21lIHNldHRpbmdzICovCi0JdDRfd3JpdGVfcmVnKGFkYXAsIFRQX1NISUZUX0NOVCwgMHg2NGY4ODQ5KTsKLQl0NF93cml0ZV9yZWcoYWRhcCwgVUxQX1JYX1RERFBfUFNaLCBIUFowKFBBR0VfU0hJRlQgLSAxMikpOwotCXQ0X3dyaXRlX3JlZyhhZGFwLCBUUF9QSU9fQUREUiwgVFBfSU5HUkVTU19DT05GSUcpOwotCXYgPSB0NF9yZWFkX3JlZyhhZGFwLCBUUF9QSU9fREFUQSk7Ci0JdDRfd3JpdGVfcmVnKGFkYXAsIFRQX1BJT19EQVRBLCB2ICYgfkNTVU1fSEFTX1BTRVVET19IRFIpOworI2lmZGVmIENPTkZJR19QQ0lfSU9WCisJLyoKKwkgKiBQcm92aXNpb24gcmVzb3VyY2UgbGltaXRzIGZvciBWaXJ0dWFsIEZ1bmN0aW9ucy4gIFdlIGN1cnJlbnRseQorCSAqIGdyYW50IHRoZW0gYWxsIHRoZSBzYW1lIHN0YXRpYyByZXNvdXJjZSBsaW1pdHMgZXhjZXB0IGZvciB0aGUgUG9ydAorCSAqIEFjY2VzcyBSaWdodHMgTWFzayB3aGljaCB3ZSdyZSBhc3NpZ25pbmcgYmFzZWQgb24gdGhlIFBGLiAgQWxsIG9mCisJICogdGhlIHN0YXRpYyBwcm92aXNpb25pbmcgc3R1ZmYgZm9yIGJvdGggdGhlIFBGIGFuZCBWRiByZWFsbHkgbmVlZHMKKwkgKiB0byBiZSBtYW5hZ2VkIGluIGEgcGVyc2lzdGVudCBtYW5uZXIgZm9yIGVhY2ggZGV2aWNlIHdoaWNoIHRoZQorCSAqIGZpcm13YXJlIGNvbnRyb2xzLgorCSAqLworCXsKKwkJaW50IHBmLCB2ZjsKKworCQlmb3IgKHBmID0gMDsgcGYgPCBBUlJBWV9TSVpFKG51bV92Zik7IHBmKyspIHsKKwkJCWlmIChudW1fdmZbcGZdIDw9IDApCisJCQkJY29udGludWU7CisKKwkJCS8qIFZGIG51bWJlcmluZyBzdGFydHMgYXQgMSEgKi8KKwkJCWZvciAodmYgPSAxOyB2ZiA8PSBudW1fdmZbcGZdOyB2ZisrKSB7CisJCQkJcmV0ID0gdDRfY2ZnX3BmdmYoYWRhcCwgYWRhcC0+Zm4sIHBmLCB2ZiwKKwkJCQkJCSAgVkZSRVNfTkVRLCBWRlJFU19ORVRIQ1RSTCwKKwkJCQkJCSAgVkZSRVNfTklRRkxJTlQsIFZGUkVTX05JUSwKKwkJCQkJCSAgVkZSRVNfVEMsIFZGUkVTX05WSSwKKwkJCQkJCSAgRldfUEZWRl9DTURfQ01BU0tfTUFTSywKKwkJCQkJCSAgcGZ2ZnJlc19wbWFzayhhZGFwLCBwZiwgdmYpLAorCQkJCQkJICBWRlJFU19ORVhBQ1RGLAorCQkJCQkJICBWRlJFU19SX0NBUFMsIFZGUkVTX1dYX0NBUFMpOworCQkJCWlmIChyZXQgPCAwKQorCQkJCQlkZXZfd2FybihhZGFwLT5wZGV2X2RldiwgImZhaWxlZCB0byAiCisJCQkJCQkgInByb3Zpc2lvbiBwZi92Zj0lZC8lZDsgIgorCQkJCQkJICJlcnI9JWRcbiIsIHBmLCB2ZiwgcmV0KTsKKwkJCX0KKwkJfQorCX0KKyNlbmRpZgorCiAJc2V0dXBfbWVtd2luKGFkYXApOwogCXJldHVybiAwOwogCkBAIC0yODkyLDEwICszMTkyLDExNCBAQAogCSAqIGNvbW1hbmRzLgogCSAqLwogYnllOglpZiAocmV0ICE9IC1FVElNRURPVVQgJiYgcmV0ICE9IC1FSU8pCi0JCXQ0X2Z3X2J5ZShhZGFwLCAwKTsKKwkJdDRfZndfYnllKGFkYXAsIGFkYXAtPmZuKTsKIAlyZXR1cm4gcmV0OwogfQogCisvKiBFRUggY2FsbGJhY2tzICovCisKK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGVlaF9lcnJfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCSBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKQoreworCWludCBpOworCXN0cnVjdCBhZGFwdGVyICphZGFwID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKCFhZGFwKQorCQlnb3RvIG91dDsKKworCXJ0bmxfbG9jaygpOworCWFkYXAtPmZsYWdzICY9IH5GV19PSzsKKwlub3RpZnlfdWxkcyhhZGFwLCBDWEdCNF9TVEFURV9TVEFSVF9SRUNPVkVSWSk7CisJZm9yX2VhY2hfcG9ydChhZGFwLCBpKSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhZGFwLT5wb3J0W2ldOworCisJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKKwkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwl9CisJaWYgKGFkYXAtPmZsYWdzICYgRlVMTF9JTklUX0RPTkUpCisJCWN4Z2JfZG93bihhZGFwKTsKKwlydG5sX3VubG9jaygpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK291dDoJcmV0dXJuIHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSA/CisJCVBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1QgOiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUOworfQorCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBlZWhfc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpbnQgaSwgcmV0OworCXN0cnVjdCBmd19jYXBzX2NvbmZpZ19jbWQgYzsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmICghYWRhcCkgeworCQlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKwkJcGNpX3NhdmVfc3RhdGUocGRldik7CisJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7CisJfQorCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0XG4iKTsKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisJcGNpX3NhdmVfc3RhdGUocGRldik7CisJcGNpX2NsZWFudXBfYWVyX3VuY29ycmVjdF9lcnJvcl9zdGF0dXMocGRldik7CisKKwlpZiAodDRfd2FpdF9kZXZfcmVhZHkoYWRhcCkgPCAwKQorCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwlpZiAodDRfZndfaGVsbG8oYWRhcCwgYWRhcC0+Zm4sIGFkYXAtPmZuLCBNQVNURVJfTVVTVCwgTlVMTCkpCisJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOworCWFkYXAtPmZsYWdzIHw9IEZXX09LOworCWlmIChhZGFwX2luaXQxKGFkYXAsICZjKSkKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisKKwlmb3JfZWFjaF9wb3J0KGFkYXAsIGkpIHsKKwkJc3RydWN0IHBvcnRfaW5mbyAqcCA9IGFkYXAycGluZm8oYWRhcCwgaSk7CisKKwkJcmV0ID0gdDRfYWxsb2NfdmkoYWRhcCwgYWRhcC0+Zm4sIHAtPnR4X2NoYW4sIGFkYXAtPmZuLCAwLCAxLAorCQkJCSAgTlVMTCwgTlVMTCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisJCXAtPnZpaWQgPSByZXQ7CisJCXAtPnhhY3RfYWRkcl9maWx0ID0gLTE7CisJfQorCisJdDRfbG9hZF9tdHVzKGFkYXAsIGFkYXAtPnBhcmFtcy5tdHVzLCBhZGFwLT5wYXJhbXMuYV93bmQsCisJCSAgICAgYWRhcC0+cGFyYW1zLmJfd25kKTsKKwlzZXR1cF9tZW13aW4oYWRhcCk7CisJaWYgKGN4Z2JfdXAoYWRhcCkpCisJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOworCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGVlaF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaW50IGk7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXAgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoIWFkYXApCisJCXJldHVybjsKKworCXJ0bmxfbG9jaygpOworCWZvcl9lYWNoX3BvcnQoYWRhcCwgaSkgeworCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWRhcC0+cG9ydFtpXTsKKworCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCQlsaW5rX3N0YXJ0KGRldik7CisJCQljeGdiX3NldF9yeG1vZGUoZGV2KTsKKwkJfQorCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CisJfQorCXJ0bmxfdW5sb2NrKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGN4Z2I0X2VlaCA9IHsKKwkuZXJyb3JfZGV0ZWN0ZWQgPSBlZWhfZXJyX2RldGVjdGVkLAorCS5zbG90X3Jlc2V0ICAgICA9IGVlaF9zbG90X3Jlc2V0LAorCS5yZXN1bWUgICAgICAgICA9IGVlaF9yZXN1bWUsCit9OworCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfMTBnX3BvcnQoY29uc3Qgc3RydWN0IGxpbmtfY29uZmlnICpsYykKIHsKIAlyZXR1cm4gKGxjLT5zdXBwb3J0ZWQgJiBGV19QT1JUX0NBUF9TUEVFRF8xMEcpICE9IDA7CkBAIC0zMDc2LDEwICszNDgwLDI3IEBACiAKICN1bmRlZiBFWFRSQV9WRUNTCiAKK3N0YXRpYyBpbnQgX19kZXZpbml0IGluaXRfcnNzKHN0cnVjdCBhZGFwdGVyICphZGFwKQoreworCXVuc2lnbmVkIGludCBpLCBqOworCisJZm9yX2VhY2hfcG9ydChhZGFwLCBpKSB7CisJCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gYWRhcDJwaW5mbyhhZGFwLCBpKTsKKworCQlwaS0+cnNzID0ga2NhbGxvYyhwaS0+cnNzX3NpemUsIHNpemVvZih1MTYpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwaS0+cnNzKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWZvciAoaiA9IDA7IGogPCBwaS0+cnNzX3NpemU7IGorKykKKwkJCXBpLT5yc3Nbal0gPSBqICUgcGktPm5xc2V0czsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBwcmludF9wb3J0X2luZm8oc3RydWN0IGFkYXB0ZXIgKmFkYXApCiB7CiAJc3RhdGljIGNvbnN0IGNoYXIgKmJhc2VbXSA9IHsKLQkJIlIiLCAiS1g0IiwgIlQiLCAiS1giLCAiVCIsICJLUiIsICJDWDQiCisJCSJSIFhGSSIsICJSIFhBVUkiLCAiVCBTR01JSSIsICJUIFhGSSIsICJUIFhBVUkiLCAiS1g0IiwgIkNYNCIsCisJCSJLWCIsICJLUiIsICJLUiBTRlArIiwgIktSIEZFQyIKIAl9OwogCiAJaW50IGk7CkBAIC0zMTIxLDcgKzM1NDIsMzEgQEAKIAl9CiB9CiAKLSNkZWZpbmUgVkxBTl9GRUFUIChORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfFwKKy8qCisgKiBGcmVlIHRoZSBmb2xsb3dpbmcgcmVzb3VyY2VzOgorICogLSBtZW1vcnkgdXNlZCBmb3IgdGFibGVzCisgKiAtIE1TSS9NU0ktWAorICogLSBuZXQgZGV2aWNlcworICogLSByZXNvdXJjZXMgRlcgaXMgaG9sZGluZyBmb3IgdXMKKyAqLworc3RhdGljIHZvaWQgZnJlZV9zb21lX3Jlc291cmNlcyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCXQ0X2ZyZWVfbWVtKGFkYXB0ZXItPmwydCk7CisJdDRfZnJlZV9tZW0oYWRhcHRlci0+dGlkcy50aWRfdGFiKTsKKwlkaXNhYmxlX21zaShhZGFwdGVyKTsKKworCWZvcl9lYWNoX3BvcnQoYWRhcHRlciwgaSkKKwkJaWYgKGFkYXB0ZXItPnBvcnRbaV0pIHsKKwkJCWtmcmVlKGFkYXAycGluZm8oYWRhcHRlciwgaSktPnJzcyk7CisJCQlmcmVlX25ldGRldihhZGFwdGVyLT5wb3J0W2ldKTsKKwkJfQorCWlmIChhZGFwdGVyLT5mbGFncyAmIEZXX09LKQorCQl0NF9md19ieWUoYWRhcHRlciwgYWRhcHRlci0+Zm4pOworfQorCisjZGVmaW5lIFZMQU5fRkVBVCAoTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8IFRTT19GTEFHUyB8IFwKIAkJICAgTkVUSUZfRl9JUFY2X0NTVU0gfCBORVRJRl9GX0hJR0hETUEpCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGluaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LApAQCAtMzE0MSwxMCArMzU4NiwxMiBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCS8qIFdlIGNvbnRyb2wgZXZlcnl0aGluZyB0aHJvdWdoIFBGIDAgKi8KKwkvKiBXZSBjb250cm9sIGV2ZXJ5dGhpbmcgdGhyb3VnaCBvbmUgUEYgKi8KIAlmdW5jID0gUENJX0ZVTkMocGRldi0+ZGV2Zm4pOwotCWlmIChmdW5jID4gMCkKKwlpZiAoZnVuYyAhPSBlbnQtPmRyaXZlcl9kYXRhKSB7CisJCXBjaV9zYXZlX3N0YXRlKHBkZXYpOyAgICAgICAgLyogdG8gcmVzdG9yZSBTUi1JT1YgbGF0ZXIgKi8KIAkJZ290byBzcmlvdjsKKwl9CiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAoZXJyKSB7CkBAIC0zMTg3LDYgKzM2MzQsNyBAQAogCiAJYWRhcHRlci0+cGRldiA9IHBkZXY7CiAJYWRhcHRlci0+cGRldl9kZXYgPSAmcGRldi0+ZGV2OworCWFkYXB0ZXItPmZuID0gZnVuYzsKIAlhZGFwdGVyLT5uYW1lID0gcGNpX25hbWUocGRldik7CiAJYWRhcHRlci0+bXNnX2VuYWJsZSA9IGRmbHRfbXNnX2VuYWJsZTsKIAltZW1zZXQoYWRhcHRlci0+Y2hhbl9tYXAsIDB4ZmYsIHNpemVvZihhZGFwdGVyLT5jaGFuX21hcCkpOwpAQCAtMzIyNSw3ICszNjczLDcgQEAKIAkJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7CiAJCW5ldGRldi0+aXJxID0gcGRldi0+aXJxOwogCi0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082OworCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBUU09fRkxBR1M7CiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU07CiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9HUk8gfCBORVRJRl9GX1JYSEFTSCB8IGhpZ2hkbWE7CiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYOwpAQCAtMzIzOCw3ICszNjg2LDcgQEAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgYWRhcHRlcik7CiAKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBGV19PSykgewotCQllcnIgPSB0NF9wb3J0X2luaXQoYWRhcHRlciwgMCwgMCwgMCk7CisJCWVyciA9IHQ0X3BvcnRfaW5pdChhZGFwdGVyLCBmdW5jLCBmdW5jLCAwKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0X2ZyZWVfZGV2OwogCX0KQEAgLTMyNjIsNiArMzcxMCwxNiBAQAogCQlhZGFwdGVyLT5wYXJhbXMub2ZmbG9hZCA9IDA7CiAJfQogCisJLyogU2VlIHdoYXQgaW50ZXJydXB0cyB3ZSdsbCBiZSB1c2luZyAqLworCWlmIChtc2kgPiAxICYmIGVuYWJsZV9tc2l4KGFkYXB0ZXIpID09IDApCisJCWFkYXB0ZXItPmZsYWdzIHw9IFVTSU5HX01TSVg7CisJZWxzZSBpZiAobXNpID4gMCAmJiBwY2lfZW5hYmxlX21zaShwZGV2KSA9PSAwKQorCQlhZGFwdGVyLT5mbGFncyB8PSBVU0lOR19NU0k7CisKKwllcnIgPSBpbml0X3JzcyhhZGFwdGVyKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9mcmVlX2RldjsKKwogCS8qCiAJICogVGhlIGNhcmQgaXMgbm93IHJlYWR5IHRvIGdvLiAgSWYgYW55IGVycm9ycyBvY2N1ciBkdXJpbmcgZGV2aWNlCiAJICogcmVnaXN0cmF0aW9uIHdlIGRvIG5vdCBmYWlsIHRoZSB3aG9sZSBjYXJkIGJ1dCByYXRoZXIgcHJvY2VlZCBvbmx5CkBAIC0zMjk3LDEyICszNzU1LDYgQEAKIAkJc2V0dXBfZGVidWdmcyhhZGFwdGVyKTsKIAl9CiAKLQkvKiBTZWUgd2hhdCBpbnRlcnJ1cHRzIHdlJ2xsIGJlIHVzaW5nICovCi0JaWYgKG1zaSA+IDEgJiYgZW5hYmxlX21zaXgoYWRhcHRlcikgPT0gMCkKLQkJYWRhcHRlci0+ZmxhZ3MgfD0gVVNJTkdfTVNJWDsKLQllbHNlIGlmIChtc2kgPiAwICYmIHBjaV9lbmFibGVfbXNpKHBkZXYpID09IDApCi0JCWFkYXB0ZXItPmZsYWdzIHw9IFVTSU5HX01TSTsKLQogCWlmIChpc19vZmZsb2FkKGFkYXB0ZXIpKQogCQlhdHRhY2hfdWxkcyhhZGFwdGVyKTsKIApAQCAtMzMxOSwxMyArMzc3MSw3IEBACiAJcmV0dXJuIDA7CiAKICBvdXRfZnJlZV9kZXY6Ci0JdDRfZnJlZV9tZW0oYWRhcHRlci0+dGlkcy50aWRfdGFiKTsKLQl0NF9mcmVlX21lbShhZGFwdGVyLT5sMnQpOwotCWZvcl9lYWNoX3BvcnQoYWRhcHRlciwgaSkKLQkJaWYgKGFkYXB0ZXItPnBvcnRbaV0pCi0JCQlmcmVlX25ldGRldihhZGFwdGVyLT5wb3J0W2ldKTsKLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBGV19PSykKLQkJdDRfZndfYnllKGFkYXB0ZXIsIDApOworCWZyZWVfc29tZV9yZXNvdXJjZXMoYWRhcHRlcik7CiAgb3V0X3VubWFwX2JhcjoKIAlpb3VubWFwKGFkYXB0ZXItPnJlZ3MpOwogIG91dF9mcmVlX2FkYXB0ZXI6CkBAIC0zMzYwLDE2ICszODA2LDggQEAKIAogCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBGVUxMX0lOSVRfRE9ORSkKIAkJCWN4Z2JfZG93bihhZGFwdGVyKTsKLQkJdDRfZnJlZV9tZW0oYWRhcHRlci0+bDJ0KTsKLQkJdDRfZnJlZV9tZW0oYWRhcHRlci0+dGlkcy50aWRfdGFiKTsKLQkJZGlzYWJsZV9tc2koYWRhcHRlcik7CiAKLQkJZm9yX2VhY2hfcG9ydChhZGFwdGVyLCBpKQotCQkJaWYgKGFkYXB0ZXItPnBvcnRbaV0pCi0JCQkJZnJlZV9uZXRkZXYoYWRhcHRlci0+cG9ydFtpXSk7Ci0KLQkJaWYgKGFkYXB0ZXItPmZsYWdzICYgRldfT0spCi0JCQl0NF9md19ieWUoYWRhcHRlciwgMCk7CisJCWZyZWVfc29tZV9yZXNvdXJjZXMoYWRhcHRlcik7CiAJCWlvdW5tYXAoYWRhcHRlci0+cmVncyk7CiAJCWtmcmVlKGFkYXB0ZXIpOwogCQlwY2lfZGlzYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhwZGV2KTsKQEAgLTMzODUsNiArMzgyMyw3IEBACiAJLmlkX3RhYmxlID0gY3hnYjRfcGNpX3RibCwKIAkucHJvYmUgICAgPSBpbml0X29uZSwKIAkucmVtb3ZlICAgPSBfX2RldmV4aXRfcChyZW1vdmVfb25lKSwKKwkuZXJyX2hhbmRsZXIgPSAmY3hnYjRfZWVoLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgY3hnYjRfaW5pdF9tb2R1bGUodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2I0L2N4Z2I0X3VsZC5oIGIvZHJpdmVycy9uZXQvY3hnYjQvY3hnYjRfdWxkLmgKaW5kZXggNWI5ODU0Ni4uODVkNzRlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjQvY3hnYjRfdWxkLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjQvY3hnYjRfdWxkLmgKQEAgLTE4NSw4ICsxODUsMTQgQEAKIAlzdHJ1Y3QgY3hnYjRfcmFuZ2Ugc3RhZzsKIAlzdHJ1Y3QgY3hnYjRfcmFuZ2UgcnE7CiAJc3RydWN0IGN4Z2I0X3JhbmdlIHBibDsKKwlzdHJ1Y3QgY3hnYjRfcmFuZ2UgcXA7CisJc3RydWN0IGN4Z2I0X3JhbmdlIGNxOworCXN0cnVjdCBjeGdiNF9yYW5nZSBvY3E7CiB9OwogCisjZGVmaW5lIE9DUV9XSU5fT0ZGU0VUKHBkZXYsIHZyZXMpIFwKKwkocGNpX3Jlc291cmNlX2xlbigocGRldiksIDIpIC0gcm91bmR1cF9wb3dfb2ZfdHdvKCh2cmVzKS0+b2NxLnNpemUpKQorCiAvKgogICogQmxvY2sgb2YgaW5mb3JtYXRpb24gdGhlIExMRCBwcm92aWRlcyB0byBVTERzIGF0dGFjaGluZyB0byBhIGRldmljZS4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjQvbDJ0LmMgYi9kcml2ZXJzL25ldC9jeGdiNC9sMnQuYwppbmRleCA5Zjk2NzI0Li5lOGYwZjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiNC9sMnQuYworKysgYi9kcml2ZXJzL25ldC9jeGdiNC9sMnQuYwpAQCAtMzEwLDYgKzMxMCwxMyBAQAogCQkJbmVpZ2hfcmVsZWFzZShlLT5uZWlnaCk7CiAJCQllLT5uZWlnaCA9IE5VTEw7CiAJCX0KKwkJd2hpbGUgKGUtPmFycHFfaGVhZCkgeworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGUtPmFycHFfaGVhZDsKKworCQkJZS0+YXJwcV9oZWFkID0gc2tiLT5uZXh0OworCQkJa2ZyZWVfc2tiKHNrYik7CisJCX0KKwkJZS0+YXJwcV90YWlsID0gTlVMTDsKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJmUtPmxvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiNC9zZ2UuYyBiL2RyaXZlcnMvbmV0L2N4Z2I0L3NnZS5jCmluZGV4IGQxZjhmMjIuLmJmMzhjZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2I0L3NnZS5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2I0L3NnZS5jCkBAIC05MzgsMTYgKzkzOCwxNiBAQAogCiAJCXdyLT5vcF9pbW1kbGVuID0gaHRvbmwoRldfV1JfT1AoRldfRVRIX1RYX1BLVF9XUikgfAogCQkJCSAgICAgICBGV19XUl9JTU1ETEVOKHNpemVvZigqbHNvKSkpOwotCQlsc28tPmxzb19jdHJsID0gaHRvbmwoTFNPX09QQ09ERShDUExfVFhfUEtUX0xTTykgfAotCQkJCSAgICAgIExTT19GSVJTVF9TTElDRSB8IExTT19MQVNUX1NMSUNFIHwKLQkJCQkgICAgICBMU09fSVBWNih2NikgfAotCQkJCSAgICAgIExTT19FVEhIRFJfTEVOKGV0aF94dHJhX2xlbiAvIDQpIHwKLQkJCQkgICAgICBMU09fSVBIRFJfTEVOKGwzaGRyX2xlbiAvIDQpIHwKLQkJCQkgICAgICBMU09fVENQSERSX0xFTih0Y3BfaGRyKHNrYiktPmRvZmYpKTsKLQkJbHNvLT5pcGlkX29mc3QgPSBodG9ucygwKTsKLQkJbHNvLT5tc3MgPSBodG9ucyhzc2ktPmdzb19zaXplKTsKLQkJbHNvLT5zZXFub19vZmZzZXQgPSBodG9ubCgwKTsKLQkJbHNvLT5sZW4gPSBodG9ubChza2ItPmxlbik7CisJCWxzby0+Yy5sc29fY3RybCA9IGh0b25sKExTT19PUENPREUoQ1BMX1RYX1BLVF9MU08pIHwKKwkJCQkJTFNPX0ZJUlNUX1NMSUNFIHwgTFNPX0xBU1RfU0xJQ0UgfAorCQkJCQlMU09fSVBWNih2NikgfAorCQkJCQlMU09fRVRISERSX0xFTihldGhfeHRyYV9sZW4gLyA0KSB8CisJCQkJCUxTT19JUEhEUl9MRU4obDNoZHJfbGVuIC8gNCkgfAorCQkJCQlMU09fVENQSERSX0xFTih0Y3BfaGRyKHNrYiktPmRvZmYpKTsKKwkJbHNvLT5jLmlwaWRfb2ZzdCA9IGh0b25zKDApOworCQlsc28tPmMubXNzID0gaHRvbnMoc3NpLT5nc29fc2l6ZSk7CisJCWxzby0+Yy5zZXFub19vZmZzZXQgPSBodG9ubCgwKTsKKwkJbHNvLT5jLmxlbiA9IGh0b25sKHNrYi0+bGVuKTsKIAkJY3BsID0gKHZvaWQgKikobHNvICsgMSk7CiAJCWNudHJsID0gVFhQS1RfQ1NVTV9UWVBFKHY2ID8gVFhfQ1NVTV9UQ1BJUDYgOiBUWF9DU1VNX1RDUElQKSB8CiAJCQlUWFBLVF9JUEhEUl9MRU4obDNoZHJfbGVuKSB8CkBAIC0xNTkzLDE0ICsxNTkzLDE1IEBACiAKIAlpZiAoY3N1bV9vayAmJiAocGktPnJ4X29mZmxvYWQgJiBSWF9DU08pICYmCiAJICAgIChwa3QtPmwyaW5mbyAmIGh0b25sKFJYRl9VRFAgfCBSWEZfVENQKSkpIHsKLQkJaWYgKCFwa3QtPmlwX2ZyYWcpCisJCWlmICghcGt0LT5pcF9mcmFnKSB7CiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCQllbHNlIHsKKwkJCXJ4cS0+c3RhdHMucnhfY3NvKys7CisJCX0gZWxzZSBpZiAocGt0LT5sMmluZm8gJiBodG9ubChSWEZfSVApKSB7CiAJCQlfX3N1bTE2IGMgPSAoX19mb3JjZSBfX3N1bTE2KXBrdC0+Y3N1bTsKIAkJCXNrYi0+Y3N1bSA9IGNzdW1fdW5mb2xkKGMpOwogCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9DT01QTEVURTsKKwkJCXJ4cS0+c3RhdHMucnhfY3NvKys7CiAJCX0KLQkJcnhxLT5zdGF0cy5yeF9jc28rKzsKIAl9IGVsc2UKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCkBAIC0xNzE4LDcgKzE3MTksNyBAQAogCQkJCQlmcmVlX3J4X2J1ZnMocS0+YWRhcCwgJnJ4cS0+ZmwsIDEpOwogCQkJCQlxLT5vZmZzZXQgPSAwOwogCQkJCX0KLQkJCQlsZW4gJj0gUlNQRF9MRU47CisJCQkJbGVuID0gUlNQRF9MRU4obGVuKTsKIAkJCX0KIAkJCXNpLnRvdF9sZW4gPSBsZW47CiAKQEAgLTE5OTgsNyArMTk5OSw3IEBACiAJbWVtc2V0KCZjLCAwLCBzaXplb2YoYykpOwogCWMub3BfdG9fdmZuID0gaHRvbmwoRldfQ01EX09QKEZXX0lRX0NNRCkgfCBGV19DTURfUkVRVUVTVCB8CiAJCQkgICAgRldfQ01EX1dSSVRFIHwgRldfQ01EX0VYRUMgfAotCQkJICAgIEZXX0lRX0NNRF9QRk4oMCkgfCBGV19JUV9DTURfVkZOKDApKTsKKwkJCSAgICBGV19JUV9DTURfUEZOKGFkYXAtPmZuKSB8IEZXX0lRX0NNRF9WRk4oMCkpOwogCWMuYWxsb2NfdG9fbGVuMTYgPSBodG9ubChGV19JUV9DTURfQUxMT0MgfCBGV19JUV9DTURfSVFTVEFSVCgxKSB8CiAJCQkJIEZXX0xFTjE2KGMpKTsKIAljLnR5cGVfdG9faXFhbmRzdGluZGV4ID0gaHRvbmwoRldfSVFfQ01EX1RZUEUoRldfSVFfVFlQRV9GTF9JTlRfQ0FQKSB8CkBAIC0yMDMwLDcgKzIwMzEsNyBAQAogCQljLmZsMGFkZHIgPSBjcHVfdG9fYmU2NChmbC0+YWRkcik7CiAJfQogCi0JcmV0ID0gdDRfd3JfbWJveChhZGFwLCAwLCAmYywgc2l6ZW9mKGMpLCAmYyk7CisJcmV0ID0gdDRfd3JfbWJveChhZGFwLCBhZGFwLT5mbiwgJmMsIHNpemVvZihjKSwgJmMpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCkBAIC0yMTA5LDcgKzIxMTAsNyBAQAogCW1lbXNldCgmYywgMCwgc2l6ZW9mKGMpKTsKIAljLm9wX3RvX3ZmbiA9IGh0b25sKEZXX0NNRF9PUChGV19FUV9FVEhfQ01EKSB8IEZXX0NNRF9SRVFVRVNUIHwKIAkJCSAgICBGV19DTURfV1JJVEUgfCBGV19DTURfRVhFQyB8Ci0JCQkgICAgRldfRVFfRVRIX0NNRF9QRk4oMCkgfCBGV19FUV9FVEhfQ01EX1ZGTigwKSk7CisJCQkgICAgRldfRVFfRVRIX0NNRF9QRk4oYWRhcC0+Zm4pIHwgRldfRVFfRVRIX0NNRF9WRk4oMCkpOwogCWMuYWxsb2NfdG9fbGVuMTYgPSBodG9ubChGV19FUV9FVEhfQ01EX0FMTE9DIHwKIAkJCQkgRldfRVFfRVRIX0NNRF9FUVNUQVJUIHwgRldfTEVOMTYoYykpOwogCWMudmlpZF9wa2QgPSBodG9ubChGV19FUV9FVEhfQ01EX1ZJSUQocGktPnZpaWQpKTsKQEAgLTIxMjIsNyArMjEyMyw3IEBACiAJCQkJICBGV19FUV9FVEhfQ01EX0VRU0laRShuZW50cmllcykpOwogCWMuZXFhZGRyID0gY3B1X3RvX2JlNjQodHhxLT5xLnBoeXNfYWRkcik7CiAKLQlyZXQgPSB0NF93cl9tYm94KGFkYXAsIDAsICZjLCBzaXplb2YoYyksICZjKTsKKwlyZXQgPSB0NF93cl9tYm94KGFkYXAsIGFkYXAtPmZuLCAmYywgc2l6ZW9mKGMpLCAmYyk7CiAJaWYgKHJldCkgewogCQlrZnJlZSh0eHEtPnEuc2Rlc2MpOwogCQl0eHEtPnEuc2Rlc2MgPSBOVUxMOwpAQCAtMjE1OSw3ICsyMTYwLDggQEAKIAogCWMub3BfdG9fdmZuID0gaHRvbmwoRldfQ01EX09QKEZXX0VRX0NUUkxfQ01EKSB8IEZXX0NNRF9SRVFVRVNUIHwKIAkJCSAgICBGV19DTURfV1JJVEUgfCBGV19DTURfRVhFQyB8Ci0JCQkgICAgRldfRVFfQ1RSTF9DTURfUEZOKDApIHwgRldfRVFfQ1RSTF9DTURfVkZOKDApKTsKKwkJCSAgICBGV19FUV9DVFJMX0NNRF9QRk4oYWRhcC0+Zm4pIHwKKwkJCSAgICBGV19FUV9DVFJMX0NNRF9WRk4oMCkpOwogCWMuYWxsb2NfdG9fbGVuMTYgPSBodG9ubChGV19FUV9DVFJMX0NNRF9BTExPQyB8CiAJCQkJIEZXX0VRX0NUUkxfQ01EX0VRU1RBUlQgfCBGV19MRU4xNihjKSk7CiAJYy5jbXBsaXFpZF9lcWlkID0gaHRvbmwoRldfRVFfQ1RSTF9DTURfQ01QTElRSUQoY21wbHFpZCkpOwpAQCAtMjE3Myw3ICsyMTc1LDcgQEAKIAkJCQkgIEZXX0VRX0NUUkxfQ01EX0VRU0laRShuZW50cmllcykpOwogCWMuZXFhZGRyID0gY3B1X3RvX2JlNjQodHhxLT5xLnBoeXNfYWRkcik7CiAKLQlyZXQgPSB0NF93cl9tYm94KGFkYXAsIDAsICZjLCBzaXplb2YoYyksICZjKTsKKwlyZXQgPSB0NF93cl9tYm94KGFkYXAsIGFkYXAtPmZuLCAmYywgc2l6ZW9mKGMpLCAmYyk7CiAJaWYgKHJldCkgewogCQlkbWFfZnJlZV9jb2hlcmVudChhZGFwLT5wZGV2X2RldiwKIAkJCQkgIG5lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCB0eF9kZXNjKSwKQEAgLTIyMDksNyArMjIxMSw4IEBACiAJbWVtc2V0KCZjLCAwLCBzaXplb2YoYykpOwogCWMub3BfdG9fdmZuID0gaHRvbmwoRldfQ01EX09QKEZXX0VRX09GTERfQ01EKSB8IEZXX0NNRF9SRVFVRVNUIHwKIAkJCSAgICBGV19DTURfV1JJVEUgfCBGV19DTURfRVhFQyB8Ci0JCQkgICAgRldfRVFfT0ZMRF9DTURfUEZOKDApIHwgRldfRVFfT0ZMRF9DTURfVkZOKDApKTsKKwkJCSAgICBGV19FUV9PRkxEX0NNRF9QRk4oYWRhcC0+Zm4pIHwKKwkJCSAgICBGV19FUV9PRkxEX0NNRF9WRk4oMCkpOwogCWMuYWxsb2NfdG9fbGVuMTYgPSBodG9ubChGV19FUV9PRkxEX0NNRF9BTExPQyB8CiAJCQkJIEZXX0VRX09GTERfQ01EX0VRU1RBUlQgfCBGV19MRU4xNihjKSk7CiAJYy5mZXRjaHN6bV90b19pcWlkID0gaHRvbmwoRldfRVFfT0ZMRF9DTURfSE9TVEZDTU9ERSgyKSB8CkBAIC0yMjIxLDcgKzIyMjQsNyBAQAogCQkJCSAgRldfRVFfT0ZMRF9DTURfRVFTSVpFKG5lbnRyaWVzKSk7CiAJYy5lcWFkZHIgPSBjcHVfdG9fYmU2NCh0eHEtPnEucGh5c19hZGRyKTsKIAotCXJldCA9IHQ0X3dyX21ib3goYWRhcCwgMCwgJmMsIHNpemVvZihjKSwgJmMpOworCXJldCA9IHQ0X3dyX21ib3goYWRhcCwgYWRhcC0+Zm4sICZjLCBzaXplb2YoYyksICZjKTsKIAlpZiAocmV0KSB7CiAJCWtmcmVlKHR4cS0+cS5zZGVzYyk7CiAJCXR4cS0+cS5zZGVzYyA9IE5VTEw7CkBAIC0yMjU3LDggKzIyNjAsOCBAQAogCXVuc2lnbmVkIGludCBmbF9pZCA9IGZsID8gZmwtPmNudHh0X2lkIDogMHhmZmZmOwogCiAJYWRhcC0+c2dlLmluZ3JfbWFwW3JxLT5jbnR4dF9pZF0gPSBOVUxMOwotCXQ0X2lxX2ZyZWUoYWRhcCwgMCwgMCwgMCwgRldfSVFfVFlQRV9GTF9JTlRfQ0FQLCBycS0+Y250eHRfaWQsIGZsX2lkLAotCQkgICAweGZmZmYpOworCXQ0X2lxX2ZyZWUoYWRhcCwgYWRhcC0+Zm4sIGFkYXAtPmZuLCAwLCBGV19JUV9UWVBFX0ZMX0lOVF9DQVAsCisJCSAgIHJxLT5jbnR4dF9pZCwgZmxfaWQsIDB4ZmZmZik7CiAJZG1hX2ZyZWVfY29oZXJlbnQoYWRhcC0+cGRldl9kZXYsIChycS0+c2l6ZSArIDEpICogcnEtPmlxZV9sZW4sCiAJCQkgIHJxLT5kZXNjLCBycS0+cGh5c19hZGRyKTsKIAluZXRpZl9uYXBpX2RlbCgmcnEtPm5hcGkpOwpAQCAtMjI5NSw3ICsyMjk4LDggQEAKIAkJaWYgKGVxLT5yc3BxLmRlc2MpCiAJCQlmcmVlX3JzcHFfZmwoYWRhcCwgJmVxLT5yc3BxLCAmZXEtPmZsKTsKIAkJaWYgKGV0cS0+cS5kZXNjKSB7Ci0JCQl0NF9ldGhfZXFfZnJlZShhZGFwLCAwLCAwLCAwLCBldHEtPnEuY250eHRfaWQpOworCQkJdDRfZXRoX2VxX2ZyZWUoYWRhcCwgYWRhcC0+Zm4sIGFkYXAtPmZuLCAwLAorCQkJCSAgICAgICBldHEtPnEuY250eHRfaWQpOwogCQkJZnJlZV90eF9kZXNjKGFkYXAsICZldHEtPnEsIGV0cS0+cS5pbl91c2UsIHRydWUpOwogCQkJa2ZyZWUoZXRxLT5xLnNkZXNjKTsKIAkJCWZyZWVfdHhxKGFkYXAsICZldHEtPnEpOwpAQCAtMjMxOCw3ICsyMzIyLDggQEAKIAogCQlpZiAocS0+cS5kZXNjKSB7CiAJCQl0YXNrbGV0X2tpbGwoJnEtPnFyZXN1bWVfdHNrKTsKLQkJCXQ0X29mbGRfZXFfZnJlZShhZGFwLCAwLCAwLCAwLCBxLT5xLmNudHh0X2lkKTsKKwkJCXQ0X29mbGRfZXFfZnJlZShhZGFwLCBhZGFwLT5mbiwgYWRhcC0+Zm4sIDAsCisJCQkJCXEtPnEuY250eHRfaWQpOwogCQkJZnJlZV90eF9kZXNjKGFkYXAsICZxLT5xLCBxLT5xLmluX3VzZSwgZmFsc2UpOwogCQkJa2ZyZWUocS0+cS5zZGVzYyk7CiAJCQlfX3NrYl9xdWV1ZV9wdXJnZSgmcS0+c2VuZHEpOwpAQCAtMjMzMiw3ICsyMzM3LDggQEAKIAogCQlpZiAoY3EtPnEuZGVzYykgewogCQkJdGFza2xldF9raWxsKCZjcS0+cXJlc3VtZV90c2spOwotCQkJdDRfY3RybF9lcV9mcmVlKGFkYXAsIDAsIDAsIDAsIGNxLT5xLmNudHh0X2lkKTsKKwkJCXQ0X2N0cmxfZXFfZnJlZShhZGFwLCBhZGFwLT5mbiwgYWRhcC0+Zm4sIDAsCisJCQkJCWNxLT5xLmNudHh0X2lkKTsKIAkJCV9fc2tiX3F1ZXVlX3B1cmdlKCZjcS0+c2VuZHEpOwogCQkJZnJlZV90eHEoYWRhcCwgJmNxLT5xKTsKIAkJfQpAQCAtMjQwMCw2ICsyNDA2LDcgQEAKICAqLwogdm9pZCB0NF9zZ2VfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcCkKIHsKKwl1bnNpZ25lZCBpbnQgaSwgdjsKIAlzdHJ1Y3Qgc2dlICpzID0gJmFkYXAtPnNnZTsKIAl1bnNpZ25lZCBpbnQgZmxfYWxpZ25fbG9nID0gaWxvZzIoRkxfQUxJR04pOwogCkBAIC0yNDA4LDggKzI0MTUsMTAgQEAKIAkJCSBJTkdQQURCT1VOREFSWShmbF9hbGlnbl9sb2cgLSA1KSB8IFBLVFNISUZUKDIpIHwKIAkJCSBSWFBLVENQTE1PREUgfAogCQkJIChTVEFUX0xFTiA9PSAxMjggPyBFR1JTVEFUVVNQQUdFU0laRSA6IDApKTsKLQl0NF9zZXRfcmVnX2ZpZWxkKGFkYXAsIFNHRV9IT1NUX1BBR0VfU0laRSwgSE9TVFBBR0VTSVpFUEYwX01BU0ssCi0JCQkgSE9TVFBBR0VTSVpFUEYwKFBBR0VfU0hJRlQgLSAxMCkpOworCisJZm9yIChpID0gdiA9IDA7IGkgPCAzMjsgaSArPSA0KQorCQl2IHw9IChQQUdFX1NISUZUIC0gMTApIDw8IGk7CisJdDRfd3JpdGVfcmVnKGFkYXAsIFNHRV9IT1NUX1BBR0VfU0laRSwgdik7CiAJdDRfd3JpdGVfcmVnKGFkYXAsIFNHRV9GTF9CVUZGRVJfU0laRTAsIFBBR0VfU0laRSk7CiAjaWYgRkxfUEdfT1JERVIgPiAwCiAJdDRfd3JpdGVfcmVnKGFkYXAsIFNHRV9GTF9CVUZGRVJfU0laRTEsIFBBR0VfU0laRSA8PCBGTF9QR19PUkRFUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiNC90NF9ody5jIGIvZHJpdmVycy9uZXQvY3hnYjQvdDRfaHcuYwppbmRleCBkYTI3MmE5Li45ZTFhNGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiNC90NF9ody5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2I0L3Q0X2h3LmMKQEAgLTIyMSw2ICsyMjEsMTMgQEAKIAlpZiAoKHNpemUgJiAxNSkgfHwgc2l6ZSA+IE1CT1hfTEVOKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCS8qCisJICogSWYgdGhlIGRldmljZSBpcyBvZmYtbGluZSwgYXMgaW4gRUVILCBjb21tYW5kcyB3aWxsIHRpbWUgb3V0LgorCSAqIEZhaWwgdGhlbSBlYXJseSBzbyB3ZSBkb24ndCB3YXN0ZSB0aW1lIHdhaXRpbmcuCisJICovCisJaWYgKGFkYXAtPnBkZXYtPmVycm9yX3N0YXRlICE9IHBjaV9jaGFubmVsX2lvX25vcm1hbCkKKwkJcmV0dXJuIC1FSU87CisKIAl2ID0gTUJPV05FUl9HRVQodDRfcmVhZF9yZWcoYWRhcCwgY3RsX3JlZykpOwogCWZvciAoaSA9IDA7IHYgPT0gTUJPWF9PV05FUl9OT05FICYmIGkgPCAzOyBpKyspCiAJCXYgPSBNQk9XTkVSX0dFVCh0NF9yZWFkX3JlZyhhZGFwLCBjdGxfcmVnKSk7CkBAIC00NDksMTIgKzQ1NiwxMCBAQAogCVNGX1JEX1NUQVRVUyAgICA9IDUsICAgICAgICAgIC8qIHJlYWQgc3RhdHVzIHJlZ2lzdGVyICovCiAJU0ZfV1JfRU5BQkxFICAgID0gNiwgICAgICAgICAgLyogZW5hYmxlIHdyaXRlcyAqLwogCVNGX1JEX0RBVEFfRkFTVCA9IDB4YiwgICAgICAgIC8qIHJlYWQgZmxhc2ggKi8KKwlTRl9SRF9JRCAgICAgICAgPSAweDlmLCAgICAgICAvKiByZWFkIElEICovCiAJU0ZfRVJBU0VfU0VDVE9SID0gMHhkOCwgICAgICAgLyogZXJhc2Ugc2VjdG9yICovCiAKLQlGV19TVEFSVF9TRUMgPSA4LCAgICAgICAgICAgICAvKiBmaXJzdCBmbGFzaCBzZWN0b3IgZm9yIEZXICovCi0JRldfRU5EX1NFQyA9IDE1LCAgICAgICAgICAgICAgLyogbGFzdCBmbGFzaCBzZWN0b3IgZm9yIEZXICovCi0JRldfSU1HX1NUQVJUID0gRldfU1RBUlRfU0VDICogU0ZfU0VDX1NJWkUsCi0JRldfTUFYX1NJWkUgPSAoRldfRU5EX1NFQyAtIEZXX1NUQVJUX1NFQyArIDEpICogU0ZfU0VDX1NJWkUsCisJRldfTUFYX1NJWkUgPSA1MTIgKiAxMDI0LAogfTsKIAogLyoqCkBAIC01NTgsNyArNTYzLDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JaWYgKGFkZHIgKyBud29yZHMgKiBzaXplb2YodTMyKSA+IFNGX1NJWkUgfHwgKGFkZHIgJiAzKSkKKwlpZiAoYWRkciArIG53b3JkcyAqIHNpemVvZih1MzIpID4gYWRhcHRlci0+cGFyYW1zLnNmX3NpemUgfHwgKGFkZHIgJiAzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlhZGRyID0gc3dhYjMyKGFkZHIpIHwgU0ZfUkRfREFUQV9GQVNUOwpAQCAtNTk2LDcgKzYwMSw3IEBACiAJdTMyIGJ1Zls2NF07CiAJdW5zaWduZWQgaW50IGksIGMsIGxlZnQsIHZhbCwgb2Zmc2V0ID0gYWRkciAmIDB4ZmY7CiAKLQlpZiAoYWRkciA+PSBTRl9TSVpFIHx8IG9mZnNldCArIG4gPiBTRl9QQUdFX1NJWkUpCisJaWYgKGFkZHIgPj0gYWRhcHRlci0+cGFyYW1zLnNmX3NpemUgfHwgb2Zmc2V0ICsgbiA+IFNGX1BBR0VfU0laRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAl2YWwgPSBzd2FiMzIoYWRkcikgfCBTRl9QUk9HX1BBR0U7CkBAIC02MTQsNyArNjE5LDcgQEAKIAkJaWYgKHJldCkKIAkJCWdvdG8gdW5sb2NrOwogCX0KLQlyZXQgPSBmbGFzaF93YWl0X29wKGFkYXB0ZXIsIDUsIDEpOworCXJldCA9IGZsYXNoX3dhaXRfb3AoYWRhcHRlciwgOCwgMSk7CiAJaWYgKHJldCkKIAkJZ290byB1bmxvY2s7CiAKQEAgLTY0Nyw5ICs2NTIsOCBAQAogICovCiBzdGF0aWMgaW50IGdldF9md192ZXJzaW9uKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgKnZlcnMpCiB7Ci0JcmV0dXJuIHQ0X3JlYWRfZmxhc2goYWRhcHRlciwKLQkJCSAgICAgRldfSU1HX1NUQVJUICsgb2Zmc2V0b2Yoc3RydWN0IGZ3X2hkciwgZndfdmVyKSwgMSwKLQkJCSAgICAgdmVycywgMCk7CisJcmV0dXJuIHQ0X3JlYWRfZmxhc2goYWRhcHRlciwgYWRhcHRlci0+cGFyYW1zLnNmX2Z3X3N0YXJ0ICsKKwkJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IGZ3X2hkciwgZndfdmVyKSwgMSwgdmVycywgMCk7CiB9CiAKIC8qKgpAQCAtNjYxLDggKzY2NSw4IEBACiAgKi8KIHN0YXRpYyBpbnQgZ2V0X3RwX3ZlcnNpb24oc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqdmVycykKIHsKLQlyZXR1cm4gdDRfcmVhZF9mbGFzaChhZGFwdGVyLCBGV19JTUdfU1RBUlQgKyBvZmZzZXRvZihzdHJ1Y3QgZndfaGRyLAotCQkJCQkJCSAgICAgIHRwX21pY3JvY29kZV92ZXIpLAorCXJldHVybiB0NF9yZWFkX2ZsYXNoKGFkYXB0ZXIsIGFkYXB0ZXItPnBhcmFtcy5zZl9md19zdGFydCArCisJCQkgICAgIG9mZnNldG9mKHN0cnVjdCBmd19oZHIsIHRwX21pY3JvY29kZV92ZXIpLAogCQkJICAgICAxLCB2ZXJzLCAwKTsKIH0KIApAQCAtNjg0LDkgKzY4OCw5IEBACiAJaWYgKCFyZXQpCiAJCXJldCA9IGdldF90cF92ZXJzaW9uKGFkYXB0ZXIsICZhZGFwdGVyLT5wYXJhbXMudHBfdmVycyk7CiAJaWYgKCFyZXQpCi0JCXJldCA9IHQ0X3JlYWRfZmxhc2goYWRhcHRlciwKLQkJCUZXX0lNR19TVEFSVCArIG9mZnNldG9mKHN0cnVjdCBmd19oZHIsIGludGZ2ZXJfbmljKSwKLQkJCTIsIGFwaV92ZXJzLCAxKTsKKwkJcmV0ID0gdDRfcmVhZF9mbGFzaChhZGFwdGVyLCBhZGFwdGVyLT5wYXJhbXMuc2ZfZndfc3RhcnQgKworCQkJCSAgICBvZmZzZXRvZihzdHJ1Y3QgZndfaGRyLCBpbnRmdmVyX25pYyksCisJCQkJICAgIDIsIGFwaV92ZXJzLCAxKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC03MjYsNyArNzMwLDcgQEAKIAkJaWYgKChyZXQgPSBzZjFfd3JpdGUoYWRhcHRlciwgMSwgMCwgMSwgU0ZfV1JfRU5BQkxFKSkgIT0gMCB8fAogCQkgICAgKHJldCA9IHNmMV93cml0ZShhZGFwdGVyLCA0LCAwLCAxLAogCQkJCSAgICAgU0ZfRVJBU0VfU0VDVE9SIHwgKHN0YXJ0IDw8IDgpKSkgIT0gMCB8fAotCQkgICAgKHJldCA9IGZsYXNoX3dhaXRfb3AoYWRhcHRlciwgNSwgNTAwKSkgIT0gMCkgeworCQkgICAgKHJldCA9IGZsYXNoX3dhaXRfb3AoYWRhcHRlciwgMTQsIDUwMCkpICE9IDApIHsKIAkJCWRldl9lcnIoYWRhcHRlci0+cGRldl9kZXYsCiAJCQkJImVyYXNlIG9mIGZsYXNoIHNlY3RvciAlZCBmYWlsZWQsIGVycm9yICVkXG4iLAogCQkJCXN0YXJ0LCByZXQpOwpAQCAtNzU0LDYgKzc1OCw5IEBACiAJdTggZmlyc3RfcGFnZVtTRl9QQUdFX1NJWkVdOwogCWNvbnN0IHUzMiAqcCA9IChjb25zdCB1MzIgKilmd19kYXRhOwogCWNvbnN0IHN0cnVjdCBmd19oZHIgKmhkciA9IChjb25zdCBzdHJ1Y3QgZndfaGRyICopZndfZGF0YTsKKwl1bnNpZ25lZCBpbnQgc2Zfc2VjX3NpemUgPSBhZGFwLT5wYXJhbXMuc2Zfc2l6ZSAvIGFkYXAtPnBhcmFtcy5zZl9uc2VjOworCXVuc2lnbmVkIGludCBmd19pbWdfc3RhcnQgPSBhZGFwLT5wYXJhbXMuc2ZfZndfc3RhcnQ7CisJdW5zaWduZWQgaW50IGZ3X3N0YXJ0X3NlYyA9IGZ3X2ltZ19zdGFydCAvIHNmX3NlY19zaXplOwogCiAJaWYgKCFzaXplKSB7CiAJCWRldl9lcnIoYWRhcC0+cGRldl9kZXYsICJGVyBpbWFnZSBoYXMgbm8gZGF0YVxuIik7CkBAIC03ODQsOCArNzkxLDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaSA9IERJVl9ST1VORF9VUChzaXplLCBTRl9TRUNfU0laRSk7ICAgICAgICAvKiAjIG9mIHNlY3RvcnMgc3Bhbm5lZCAqLwotCXJldCA9IHQ0X2ZsYXNoX2VyYXNlX3NlY3RvcnMoYWRhcCwgRldfU1RBUlRfU0VDLCBGV19TVEFSVF9TRUMgKyBpIC0gMSk7CisJaSA9IERJVl9ST1VORF9VUChzaXplLCBzZl9zZWNfc2l6ZSk7ICAgICAgICAvKiAjIG9mIHNlY3RvcnMgc3Bhbm5lZCAqLworCXJldCA9IHQ0X2ZsYXNoX2VyYXNlX3NlY3RvcnMoYWRhcCwgZndfc3RhcnRfc2VjLCBmd19zdGFydF9zZWMgKyBpIC0gMSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKQEAgLTc5NiwxMSArODAzLDExIEBACiAJICovCiAJbWVtY3B5KGZpcnN0X3BhZ2UsIGZ3X2RhdGEsIFNGX1BBR0VfU0laRSk7CiAJKChzdHJ1Y3QgZndfaGRyICopZmlyc3RfcGFnZSktPmZ3X3ZlciA9IGh0b25sKDB4ZmZmZmZmZmYpOwotCXJldCA9IHQ0X3dyaXRlX2ZsYXNoKGFkYXAsIEZXX0lNR19TVEFSVCwgU0ZfUEFHRV9TSVpFLCBmaXJzdF9wYWdlKTsKKwlyZXQgPSB0NF93cml0ZV9mbGFzaChhZGFwLCBmd19pbWdfc3RhcnQsIFNGX1BBR0VfU0laRSwgZmlyc3RfcGFnZSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKLQlhZGRyID0gRldfSU1HX1NUQVJUOworCWFkZHIgPSBmd19pbWdfc3RhcnQ7CiAJZm9yIChzaXplIC09IFNGX1BBR0VfU0laRTsgc2l6ZTsgc2l6ZSAtPSBTRl9QQUdFX1NJWkUpIHsKIAkJYWRkciArPSBTRl9QQUdFX1NJWkU7CiAJCWZ3X2RhdGEgKz0gU0ZfUEFHRV9TSVpFOwpAQCAtODEwLDcgKzgxNyw3IEBACiAJfQogCiAJcmV0ID0gdDRfd3JpdGVfZmxhc2goYWRhcCwKLQkJCSAgICAgRldfSU1HX1NUQVJUICsgb2Zmc2V0b2Yoc3RydWN0IGZ3X2hkciwgZndfdmVyKSwKKwkJCSAgICAgZndfaW1nX3N0YXJ0ICsgb2Zmc2V0b2Yoc3RydWN0IGZ3X2hkciwgZndfdmVyKSwKIAkJCSAgICAgc2l6ZW9mKGhkci0+ZndfdmVyKSwgKGNvbnN0IHU4ICopJmhkci0+ZndfdmVyKTsKIG91dDoKIAlpZiAocmV0KQpAQCAtMTEyOCw2ICsxMTM1LDcgQEAKIHN0YXRpYyB2b2lkIHVscHJ4X2ludHJfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdGF0aWMgc3RydWN0IGludHJfaW5mbyB1bHByeF9pbnRyX2luZm9bXSA9IHsKKwkJeyAweDE4MDAwMDAsICJVTFBSWCBjb250ZXh0IGVycm9yIiwgLTEsIDEgfSwKIAkJeyAweDdmZmZmZiwgIlVMUFJYIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCiAJCXsgMCB9CiAJfTsKQEAgLTE0MzYsNyArMTQ0NCw3IEBACiAJCXQ0X2ZhdGFsX2VycihhZGFwKTsKIH0KIAotI2RlZmluZSBQRl9JTlRSX01BU0sgKFBGU1cgfCBQRkNJTSkKKyNkZWZpbmUgUEZfSU5UUl9NQVNLIChQRlNXKQogI2RlZmluZSBHTEJMX0lOVFJfTUFTSyAoQ0lNIHwgTVBTIHwgUEwgfCBQQ0lFIHwgTUMgfCBFREMwIHwgXAogCQlFREMxIHwgTEUgfCBUUCB8IE1BIHwgUE1fVFggfCBQTV9SWCB8IFVMUF9SWCB8IFwKIAkJQ1BMX1NXSVRDSCB8IFNHRSB8IFVMUF9UWCkKQEAgLTI1MTAsNyArMjUxOCw3IEBACiAJYy5yZXR2YWxfbGVuMTYgPSBodG9ubChGV19MRU4xNihjKSk7CiAJYy5uaXFmbGludF9uaXEgPSBodG9ubChGV19QRlZGX0NNRF9OSVFGTElOVChyeHFpKSB8CiAJCQkgICAgICAgRldfUEZWRl9DTURfTklRKHJ4cSkpOwotCWMuY21hc2tfdG9fbmVxID0gaHRvbmwoRldfUEZWRl9DTURfQ01BU0soY21hc2spIHwKKwljLnR5cGVfdG9fbmVxID0gaHRvbmwoRldfUEZWRl9DTURfQ01BU0soY21hc2spIHwKIAkJCSAgICAgICBGV19QRlZGX0NNRF9QTUFTSyhwbWFzaykgfAogCQkJICAgICAgIEZXX1BGVkZfQ01EX05FUSh0eHEpKTsKIAljLnRjX3RvX25leGFjdGYgPSBodG9ubChGV19QRlZGX0NNRF9UQyh0YykgfCBGV19QRlZGX0NNRF9OVkkodmkpIHwKQEAgLTI1NzIsNyArMjU4MCw3IEBACiAJfQogCWlmIChyc3Nfc2l6ZSkKIAkJKnJzc19zaXplID0gRldfVklfQ01EX1JTU1NJWkVfR0VUKG50b2hzKGMucnNzc2l6ZV9wa2QpKTsKLQlyZXR1cm4gbnRvaHMoYy52aWlkX3BrZCk7CisJcmV0dXJuIEZXX1ZJX0NNRF9WSUlEX0dFVChudG9ocyhjLnR5cGVfdmlpZCkpOwogfQogCiAvKioKQEAgLTI1OTUsNyArMjYwMyw3IEBACiAJCQkgICAgRldfQ01EX0VYRUMgfCBGV19WSV9DTURfUEZOKHBmKSB8CiAJCQkgICAgRldfVklfQ01EX1ZGTih2ZikpOwogCWMuYWxsb2NfdG9fbGVuMTYgPSBodG9ubChGV19WSV9DTURfRlJFRSB8IEZXX0xFTjE2KGMpKTsKLQljLnZpaWRfcGtkID0gaHRvbnMoRldfVklfQ01EX1ZJSUQodmlpZCkpOworCWMudHlwZV92aWlkID0gaHRvbnMoRldfVklfQ01EX1ZJSUQodmlpZCkpOwogCXJldHVybiB0NF93cl9tYm94KGFkYXAsIG1ib3gsICZjLCBzaXplb2YoYyksICZjKTsKIH0KIApAQCAtMzA0NSw3ICszMDUzLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHdhaXRfZGV2X3JlYWR5KHN0cnVjdCBhZGFwdGVyICphZGFwKQoraW50IHQ0X3dhaXRfZGV2X3JlYWR5KHN0cnVjdCBhZGFwdGVyICphZGFwKQogewogCWlmICh0NF9yZWFkX3JlZyhhZGFwLCBQTF9XSE9BTUkpICE9IDB4ZmZmZmZmZmYpCiAJCXJldHVybiAwOwpAQCAtMzA1Myw2ICszMDYxLDMzIEBACiAJcmV0dXJuIHQ0X3JlYWRfcmVnKGFkYXAsIFBMX1dIT0FNSSkgIT0gMHhmZmZmZmZmZiA/IDAgOiAtRUlPOwogfQogCitzdGF0aWMgaW50IF9fZGV2aW5pdCBnZXRfZmxhc2hfcGFyYW1zKHN0cnVjdCBhZGFwdGVyICphZGFwKQoreworCWludCByZXQ7CisJdTMyIGluZm87CisKKwlyZXQgPSBzZjFfd3JpdGUoYWRhcCwgMSwgMSwgMCwgU0ZfUkRfSUQpOworCWlmICghcmV0KQorCQlyZXQgPSBzZjFfcmVhZChhZGFwLCAzLCAwLCAxLCAmaW5mbyk7CisJdDRfd3JpdGVfcmVnKGFkYXAsIFNGX09QLCAwKTsgICAgICAgICAgICAgICAgICAgIC8qIHVubG9jayBTRiAqLworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoKGluZm8gJiAweGZmKSAhPSAweDIwKSAgICAgICAgICAgICAvKiBub3QgYSBOdW1vbml4IGZsYXNoICovCisJCXJldHVybiAtRUlOVkFMOworCWluZm8gPj49IDE2OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxvZzIgb2Ygc2l6ZSAqLworCWlmIChpbmZvID49IDB4MTQgJiYgaW5mbyA8IDB4MTgpCisJCWFkYXAtPnBhcmFtcy5zZl9uc2VjID0gMSA8PCAoaW5mbyAtIDE2KTsKKwllbHNlIGlmIChpbmZvID09IDB4MTgpCisJCWFkYXAtPnBhcmFtcy5zZl9uc2VjID0gNjQ7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKwlhZGFwLT5wYXJhbXMuc2Zfc2l6ZSA9IDEgPDwgaW5mbzsKKwlhZGFwLT5wYXJhbXMuc2ZfZndfc3RhcnQgPQorCQl0NF9yZWFkX3JlZyhhZGFwLCBDSU1fQk9PVF9DRkcpICYgQk9PVEFERFJfTUFTSzsKKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKgl0NF9wcmVwX2FkYXB0ZXIgLSBwcmVwYXJlIFNXIGFuZCBIVyBmb3Igb3BlcmF0aW9uCiAgKglAYWRhcHRlcjogdGhlIGFkYXB0ZXIKQEAgLTMwNjYsMTMgKzMxMDEsMTkgQEAKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gd2FpdF9kZXZfcmVhZHkoYWRhcHRlcik7CisJcmV0ID0gdDRfd2FpdF9kZXZfcmVhZHkoYWRhcHRlcik7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKIAlnZXRfcGNpX21vZGUoYWRhcHRlciwgJmFkYXB0ZXItPnBhcmFtcy5wY2kpOwogCWFkYXB0ZXItPnBhcmFtcy5yZXYgPSB0NF9yZWFkX3JlZyhhZGFwdGVyLCBQTF9SRVYpOwogCisJcmV0ID0gZ2V0X2ZsYXNoX3BhcmFtcyhhZGFwdGVyKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGFkYXB0ZXItPnBkZXZfZGV2LCAiZXJyb3IgJWQgaWRlbnRpZnlpbmcgZmxhc2hcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCiAJcmV0ID0gZ2V0X3ZwZF9wYXJhbXMoYWRhcHRlciwgJmFkYXB0ZXItPnBhcmFtcy52cGQpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwpAQCAtMzA5Miw4ICszMTMzLDEwIEBACiAJdTggYWRkcls2XTsKIAlpbnQgcmV0LCBpLCBqID0gMDsKIAlzdHJ1Y3QgZndfcG9ydF9jbWQgYzsKKwlzdHJ1Y3QgZndfcnNzX3ZpX2NvbmZpZ19jbWQgcnZjOwogCiAJbWVtc2V0KCZjLCAwLCBzaXplb2YoYykpOworCW1lbXNldCgmcnZjLCAwLCBzaXplb2YocnZjKSk7CiAKIAlmb3JfZWFjaF9wb3J0KGFkYXAsIGkpIHsKIAkJdW5zaWduZWQgaW50IHJzc19zaXplOwpAQCAtMzEyMiwxMiArMzE2NSwyMiBAQAogCQlwLT5yc3Nfc2l6ZSA9IHJzc19zaXplOwogCQltZW1jcHkoYWRhcC0+cG9ydFtpXS0+ZGV2X2FkZHIsIGFkZHIsIEVUSF9BTEVOKTsKIAkJbWVtY3B5KGFkYXAtPnBvcnRbaV0tPnBlcm1fYWRkciwgYWRkciwgRVRIX0FMRU4pOworCQlhZGFwLT5wb3J0W2ldLT5kZXZfaWQgPSBqOwogCiAJCXJldCA9IG50b2hsKGMudS5pbmZvLmxzdGF0dXNfdG9fbW9kdHlwZSk7CiAJCXAtPm1kaW9fYWRkciA9IChyZXQgJiBGV19QT1JUX0NNRF9NRElPQ0FQKSA/CiAJCQlGV19QT1JUX0NNRF9NRElPQUREUl9HRVQocmV0KSA6IC0xOwogCQlwLT5wb3J0X3R5cGUgPSBGV19QT1JUX0NNRF9QVFlQRV9HRVQocmV0KTsKLQkJcC0+bW9kX3R5cGUgPSBGV19QT1JUX0NNRF9NT0RUWVBFX0dFVChyZXQpOworCQlwLT5tb2RfdHlwZSA9IEZXX1BPUlRfTU9EX1RZUEVfTkE7CisKKwkJcnZjLm9wX3RvX3ZpaWQgPSBodG9ubChGV19DTURfT1AoRldfUlNTX1ZJX0NPTkZJR19DTUQpIHwKKwkJCQkgICAgICAgRldfQ01EX1JFUVVFU1QgfCBGV19DTURfUkVBRCB8CisJCQkJICAgICAgIEZXX1JTU19WSV9DT05GSUdfQ01EX1ZJSUQocC0+dmlpZCkpOworCQlydmMucmV0dmFsX2xlbjE2ID0gaHRvbmwoRldfTEVOMTYocnZjKSk7CisJCXJldCA9IHQ0X3dyX21ib3goYWRhcCwgbWJveCwgJnJ2Yywgc2l6ZW9mKHJ2YyksICZydmMpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJcC0+cnNzX21vZGUgPSBudG9obChydmMudS5iYXNpY3ZpcnR1YWwuZGVmYXVsdHFfdG9fdWRwZW4pOwogCiAJCWluaXRfbGlua19jb25maWcoJnAtPmxpbmtfY2ZnLCBudG9ocyhjLnUuaW5mby5wY2FwKSk7CiAJCWorKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2I0L3Q0X2h3LmggYi9kcml2ZXJzL25ldC9jeGdiNC90NF9ody5oCmluZGV4IDAyNTYyMzIuLjEwYTA1NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2I0L3Q0X2h3LmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjQvdDRfaHcuaApAQCAtNTcsOCArNTcsNiBAQAogCiBlbnVtIHsKIAlTRl9QQUdFX1NJWkUgPSAyNTYsICAgICAgICAgICAvKiBzZXJpYWwgZmxhc2ggcGFnZSBzaXplICovCi0JU0ZfU0VDX1NJWkUgPSA2NCAqIDEwMjQsICAgICAgLyogc2VyaWFsIGZsYXNoIHNlY3RvciBzaXplICovCi0JU0ZfU0laRSA9IFNGX1NFQ19TSVpFICogMTYsICAgLyogc2VyaWFsIGZsYXNoIHNpemUgKi8KIH07CiAKIGVudW0geyBSU1BfVFlQRV9GTEJVRiwgUlNQX1RZUEVfQ1BMLCBSU1BfVFlQRV9JTlRSIH07IC8qIHJlc3BvbnNlIGVudHJ5IHR5cGVzICovCkBAIC02OSw2ICs2Nyw0NSBAQAogCVNHRV9NQVhfV1JfTEVOID0gNTEyLCAgICAgLyogbWF4IFdSIHNpemUgaW4gYnl0ZXMgKi8KIAlTR0VfTlRJTUVSUyA9IDYsICAgICAgICAgIC8qICMgb2YgaW50ZXJydXB0IGhvbGRvZmYgdGltZXIgdmFsdWVzICovCiAJU0dFX05DT1VOVEVSUyA9IDQsICAgICAgICAvKiAjIG9mIGludGVycnVwdCBwYWNrZXQgY291bnRlciB2YWx1ZXMgKi8KKworCVNHRV9USU1FUl9SU1RSVF9DTlRSID0gNiwgLyogcmVzdGFydCBSWCBwYWNrZXQgdGhyZXNob2xkIGNvdW50ZXIgKi8KKwlTR0VfVElNRVJfVVBEX0NJRFggPSA3LCAgIC8qIHVwZGF0ZSBjaWR4IG9ubHkgKi8KKworCVNHRV9FUV9JRFhTSVpFID0gNjQsICAgICAgLyogZWdyZXNzIHF1ZXVlIHBpZHgvY2lkeCB1bml0IHNpemUgKi8KKworCVNHRV9JTlRSRFNUX1BDSSA9IDAsICAgICAgLyogaW50ZXJydXB0IGRlc3RpbmF0aW9uIGlzIFBDSS1FICovCisJU0dFX0lOVFJEU1RfSVEgPSAxLCAgICAgICAvKiAgIGRlc3RpbmF0aW9uIGlzIGFuIGluZ3Jlc3MgcXVldWUgKi8KKworCVNHRV9VUERBVEVERUxfTk9ORSA9IDAsICAgLyogaW5ncmVzcyBxdWV1ZSBwaWR4IHVwZGF0ZSBkZWxpdmVyeSAqLworCVNHRV9VUERBVEVERUxfSU5UUiA9IDEsICAgLyogICBpbnRlcnJ1cHQgKi8KKwlTR0VfVVBEQVRFREVMX1NUUEcgPSAyLCAgIC8qICAgc3RhdHVzIHBhZ2UgKi8KKwlTR0VfVVBEQVRFREVMX0JPVEggPSAzLCAgIC8qICAgaW50ZXJydXB0IGFuZCBzdGF0dXMgcGFnZSAqLworCisJU0dFX0hPU1RGQ01PREVfTk9ORSA9IDAsICAvKiBlZ3Jlc3MgcXVldWUgY2lkeCB1cGRhdGVzICovCisJU0dFX0hPU1RGQ01PREVfSVEgPSAxLCAgICAvKiAgIHNlbnQgdG8gaW5ncmVzcyBxdWV1ZSAqLworCVNHRV9IT1NURkNNT0RFX1NUUEcgPSAyLCAgLyogICBzZW50IHRvIHN0YXR1cyBwYWdlICovCisJU0dFX0hPU1RGQ01PREVfQk9USCA9IDMsICAvKiAgIGluZ3Jlc3MgcXVldWUgYW5kIHN0YXR1cyBwYWdlICovCisKKwlTR0VfRkVUQ0hCVVJTVE1JTl8xNkIgPSAwLC8qIGVncmVzcyBxdWV1ZSBkZXNjcmlwdG9yIGZldGNoIG1pbmltdW0gKi8KKwlTR0VfRkVUQ0hCVVJTVE1JTl8zMkIgPSAxLAorCVNHRV9GRVRDSEJVUlNUTUlOXzY0QiA9IDIsCisJU0dFX0ZFVENIQlVSU1RNSU5fMTI4QiA9IDMsCisKKwlTR0VfRkVUQ0hCVVJTVE1BWF82NEIgPSAwLC8qIGVncmVzcyBxdWV1ZSBkZXNjcmlwdG9yIGZldGNoIG1heGltdW0gKi8KKwlTR0VfRkVUQ0hCVVJTVE1BWF8xMjhCID0gMSwKKwlTR0VfRkVUQ0hCVVJTVE1BWF8yNTZCID0gMiwKKwlTR0VfRkVUQ0hCVVJTVE1BWF81MTJCID0gMywKKworCVNHRV9DSURYRkxVU0hUSFJFU0hfMSA9IDAsLyogZWdyZXNzIHF1ZXVlIGNpZHggZmx1c2ggdGhyZXNob2xkICovCisJU0dFX0NJRFhGTFVTSFRIUkVTSF8yID0gMSwKKwlTR0VfQ0lEWEZMVVNIVEhSRVNIXzQgPSAyLAorCVNHRV9DSURYRkxVU0hUSFJFU0hfOCA9IDMsCisJU0dFX0NJRFhGTFVTSFRIUkVTSF8xNiA9IDQsCisJU0dFX0NJRFhGTFVTSFRIUkVTSF8zMiA9IDUsCisJU0dFX0NJRFhGTFVTSFRIUkVTSF82NCA9IDYsCisJU0dFX0NJRFhGTFVTSFRIUkVTSF8xMjggPSA3LAorCisJU0dFX0lOR1BBREJPVU5EQVJZX1NISUZUID0gNSwvKiBpbmdyZXNzIHF1ZXVlIHBhZCBib3VuZGFyeSAqLwogfTsKIAogc3RydWN0IHNnZV9xc3RhdCB7ICAgICAgICAgICAgICAgIC8qIGRhdGEgd3JpdHRlbiB0byBTR0UgcXVldWUgc3RhdHVzIGVudHJpZXMgKi8KQEAgLTkwLDExICsxMjcsMTMgQEAKIH07CiAKICNkZWZpbmUgUlNQRF9ORVdCVUYgMHg4MDAwMDAwMFUKLSNkZWZpbmUgUlNQRF9MRU4gICAgMHg3ZmZmZmZmZlUKKyNkZWZpbmUgUlNQRF9MRU4oeCkgKCgoeCkgPj4gMCkgJiAweDdmZmZmZmZmVSkKKyNkZWZpbmUgUlNQRF9RSUQoeCkgUlNQRF9MRU4oeCkKIAogI2RlZmluZSBSU1BEX0dFTih4KSAgKCh4KSA+PiA3KQogI2RlZmluZSBSU1BEX1RZUEUoeCkgKCgoeCkgPj4gNCkgJiAzKQogCiAjZGVmaW5lIFFJTlRSX0NOVF9FTiAgICAgICAweDEKICNkZWZpbmUgUUlOVFJfVElNRVJfSURYKHgpICgoeCkgPDwgMSkKKyNkZWZpbmUgUUlOVFJfVElNRVJfSURYX0dFVCh4KSAoKCh4KSA+PiAxKSAmIDB4NykKICNlbmRpZiAvKiBfX1Q0X0hXX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2I0L3Q0X21zZy5oIGIvZHJpdmVycy9uZXQvY3hnYjQvdDRfbXNnLmgKaW5kZXggN2E5ODFiOC4uYTU1MGQwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjQvdDRfbXNnLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjQvdDRfbXNnLmgKQEAgLTQ0Myw4ICs0NDMsNyBAQAogCiAjZGVmaW5lIGNwbF90eF9wa3RfeHQgY3BsX3R4X3BrdAogCi1zdHJ1Y3QgY3BsX3R4X3BrdF9sc28gewotCVdSX0hEUjsKK3N0cnVjdCBjcGxfdHhfcGt0X2xzb19jb3JlIHsKIAlfX2JlMzIgbHNvX2N0cmw7CiAjZGVmaW5lIExTT19UQ1BIRFJfTEVOKHgpICgoeCkgPDwgMCkKICNkZWZpbmUgTFNPX0lQSERSX0xFTih4KSAgKCh4KSA8PCA0KQpAQCAtNDYwLDYgKzQ1OSwxMiBAQAogCS8qIGVuY2Fwc3VsYXRlZCBDUEwgKFRYX1BLVCwgVFhfUEtUX1hUIG9yIFRYX0RBVEEpIGZvbGxvd3MgaGVyZSAqLwogfTsKIAorc3RydWN0IGNwbF90eF9wa3RfbHNvIHsKKwlXUl9IRFI7CisJc3RydWN0IGNwbF90eF9wa3RfbHNvX2NvcmUgYzsKKwkvKiBlbmNhcHN1bGF0ZWQgQ1BMIChUWF9QS1QsIFRYX1BLVF9YVCBvciBUWF9EQVRBKSBmb2xsb3dzIGhlcmUgKi8KK307CisKIHN0cnVjdCBjcGxfaXNjc2lfaGRyIHsKIAl1bmlvbiBvcGNvZGVfdGlkIG90OwogCV9fYmUxNiBwZHVfbGVuX2RkcDsKQEAgLTUyNCw2ICs1MjksOCBAQAogCV9fYmUzMiBsMmluZm87CiAjZGVmaW5lIFJYRl9VRFAgKDEgPDwgMjIpCiAjZGVmaW5lIFJYRl9UQ1AgKDEgPDwgMjMpCisjZGVmaW5lIFJYRl9JUCAgKDEgPDwgMjQpCisjZGVmaW5lIFJYRl9JUDYgKDEgPDwgMjUpCiAJX19iZTE2IGhkcl9sZW47CiAJX19iZTE2IGVycl92ZWM7CiB9OwpAQCAtNjIzLDYgKzYzMCwxMSBAQAogCV9fYmU2NCBkYXRhWzRdOwogfTsKIAorLyogY3BsX2Z3Nl9tc2cudHlwZSB2YWx1ZXMgKi8KK2VudW0geworCUZXNl9UWVBFX0NNRF9SUEwgPSAwLAorfTsKKwogZW51bSB7CiAJVUxQX1RYX01FTV9SRUFEID0gMiwKIAlVTFBfVFhfTUVNX1dSSVRFID0gMywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2I0L3Q0X3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2N4Z2I0L3Q0X3JlZ3MuaAppbmRleCA1ZWQ1NjQ4Li4wYWRjNWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiNC90NF9yZWdzLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjQvdDRfcmVncy5oCkBAIC05MywxMiArOTMsMTUgQEAKICNkZWZpbmUgIFBLVFNISUZUX01BU0sgICAgICAgICAgMHgwMDAwMWMwMFUKICNkZWZpbmUgIFBLVFNISUZUX1NISUZUICAgICAgICAgMTAKICNkZWZpbmUgIFBLVFNISUZUKHgpICAgICAgICAgICAgKCh4KSA8PCBQS1RTSElGVF9TSElGVCkKKyNkZWZpbmUgIFBLVFNISUZUX0dFVCh4KQkoKCh4KSAmIFBLVFNISUZUX01BU0spID4+IFBLVFNISUZUX1NISUZUKQogI2RlZmluZSAgSU5HUENJRUJPVU5EQVJZX01BU0sgICAweDAwMDAwMzgwVQogI2RlZmluZSAgSU5HUENJRUJPVU5EQVJZX1NISUZUICA3CiAjZGVmaW5lICBJTkdQQ0lFQk9VTkRBUlkoeCkgICAgICgoeCkgPDwgSU5HUENJRUJPVU5EQVJZX1NISUZUKQogI2RlZmluZSAgSU5HUEFEQk9VTkRBUllfTUFTSyAgICAweDAwMDAwMDcwVQogI2RlZmluZSAgSU5HUEFEQk9VTkRBUllfU0hJRlQgICA0CiAjZGVmaW5lICBJTkdQQURCT1VOREFSWSh4KSAgICAgICgoeCkgPDwgSU5HUEFEQk9VTkRBUllfU0hJRlQpCisjZGVmaW5lICBJTkdQQURCT1VOREFSWV9HRVQoeCkJKCgoeCkgJiBJTkdQQURCT1VOREFSWV9NQVNLKSBcCisJCQkJID4+IElOR1BBREJPVU5EQVJZX1NISUZUKQogI2RlZmluZSAgRUdSUENJRUJPVU5EQVJZX01BU0sgICAweDAwMDAwMDBlVQogI2RlZmluZSAgRUdSUENJRUJPVU5EQVJZX1NISUZUICAxCiAjZGVmaW5lICBFR1JQQ0lFQk9VTkRBUlkoeCkgICAgICgoeCkgPDwgRUdSUENJRUJPVU5EQVJZX1NISUZUKQpAQCAtMjI5LDYgKzIzMiw3IEBACiAjZGVmaW5lICBXSU5ET1dfTUFTSyAgICAgMHgwMDAwMDBmZlUKICNkZWZpbmUgIFdJTkRPV19TSElGVCAgICAwCiAjZGVmaW5lICBXSU5ET1coeCkgICAgICAgKCh4KSA8PCBXSU5ET1dfU0hJRlQpCisjZGVmaW5lIFBDSUVfTUVNX0FDQ0VTU19PRkZTRVQgMHgzMDZjCiAKICNkZWZpbmUgUENJRV9DT1JFX1VUTF9TWVNURU1fQlVTX0FHRU5UX1NUQVRVUyAweDU5MDgKICNkZWZpbmUgIFJOUFAgMHg4MDAwMDAwMFUKQEAgLTMyNiw2ICszMzAsOSBAQAogCiAjZGVmaW5lIEVEQ18xX0JBU0VfQUREUiAweDc5ODAKIAorI2RlZmluZSBDSU1fQk9PVF9DRkcgMHg3YjAwCisjZGVmaW5lICBCT09UQUREUl9NQVNLIDB4ZmZmZmZmMDBVCisKICNkZWZpbmUgQ0lNX1BGX01BSUxCT1hfREFUQSAweDI0MAogI2RlZmluZSBDSU1fUEZfTUFJTEJPWF9DVFJMIDB4MjgwCiAjZGVmaW5lICBNQk1TR1ZBTElEICAgICAweDAwMDAwMDA4VQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjQvdDRmd19hcGkuaCBiL2RyaXZlcnMvbmV0L2N4Z2I0L3Q0ZndfYXBpLmgKaW5kZXggNjM5OTFkNi4uMDk2OWYyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjQvdDRmd19hcGkuaAorKysgYi9kcml2ZXJzL25ldC9jeGdiNC90NGZ3X2FwaS5oCkBAIC03MSw2ICs3MSw3IEBACiAjZGVmaW5lIEZXX1dSX0FUT01JQyh4KQkgKCh4KSA8PCAyMykKICNkZWZpbmUgRldfV1JfRkxVU0goeCkgICAoKHgpIDw8IDIyKQogI2RlZmluZSBGV19XUl9DT01QTCh4KSAgICgoeCkgPDwgMjEpCisjZGVmaW5lIEZXX1dSX0lNTURMRU5fTUFTSyAweGZmCiAjZGVmaW5lIEZXX1dSX0lNTURMRU4oeCkgKCh4KSA8PCAwKQogCiAjZGVmaW5lIEZXX1dSX0VRVUlRCSgxVSA8PCAzMSkKQEAgLTQ0Nyw3ICs0NDgsOSBAQAogCUZXX1BBUkFNU19QQVJBTV9ERVZfSU5UVkVSX1JJCT0gMHgwNywKIAlGV19QQVJBTVNfUEFSQU1fREVWX0lOVFZFUl9JU0NTSVBEVSA9IDB4MDgsCiAJRldfUEFSQU1TX1BBUkFNX0RFVl9JTlRWRVJfSVNDU0kgPSAweDA5LAotCUZXX1BBUkFNU19QQVJBTV9ERVZfSU5UVkVSX0ZDT0UgPSAweDBBCisJRldfUEFSQU1TX1BBUkFNX0RFVl9JTlRWRVJfRkNPRSA9IDB4MEEsCisJRldfUEFSQU1TX1BBUkFNX0RFVl9GV1JFViA9IDB4MEIsCisJRldfUEFSQU1TX1BBUkFNX0RFVl9UUFJFViA9IDB4MEMsCiB9OwogCiAvKgpAQCAtNDc1LDcgKzQ3OCwxNSBAQAogCUZXX1BBUkFNU19QQVJBTV9QRlZGX1BCTF9FTkQJPSAweDEyLAogCUZXX1BBUkFNU19QQVJBTV9QRlZGX0wyVF9TVEFSVCA9IDB4MTMsCiAJRldfUEFSQU1TX1BBUkFNX1BGVkZfTDJUX0VORCA9IDB4MTQsCisJRldfUEFSQU1TX1BBUkFNX1BGVkZfU1FSUV9TVEFSVCA9IDB4MTUsCisJRldfUEFSQU1TX1BBUkFNX1BGVkZfU1FSUV9FTkQJPSAweDE2LAorCUZXX1BBUkFNU19QQVJBTV9QRlZGX0NRX1NUQVJUCT0gMHgxNywKKwlGV19QQVJBTVNfUEFSQU1fUEZWRl9DUV9FTkQJPSAweDE4LAogCUZXX1BBUkFNU19QQVJBTV9QRlZGX1NDSEVEQ0xBU1NfRVRIID0gMHgyMCwKKwlGV19QQVJBTVNfUEFSQU1fUEZWRl9WSUlEICAgICAgID0gMHgyNCwKKwlGV19QQVJBTVNfUEFSQU1fUEZWRl9DUE1BU0sgICAgID0gMHgyNSwKKwlGV19QQVJBTVNfUEFSQU1fUEZWRl9PQ1FfU1RBUlQgID0gMHgyNiwKKwlGV19QQVJBTVNfUEFSQU1fUEZWRl9PQ1FfRU5EICAgID0gMHgyNywKIH07CiAKIC8qCkBAIC01MTIsNyArNTIzLDcgQEAKIAlfX2JlMzIgb3BfdG9fdmZuOwogCV9fYmUzMiByZXR2YWxfbGVuMTY7CiAJX19iZTMyIG5pcWZsaW50X25pcTsKLQlfX2JlMzIgY21hc2tfdG9fbmVxOworCV9fYmUzMiB0eXBlX3RvX25lcTsKIAlfX2JlMzIgdGNfdG9fbmV4YWN0ZjsKIAlfX2JlMzIgcl9jYXBzX3RvX25ldGhjdHJsOwogCV9fYmUxNiBucmljcTsKQEAgLTUyOSwxMSArNTQwLDE2IEBACiAjZGVmaW5lIEZXX1BGVkZfQ01EX05JUSh4KSAoKHgpIDw8IDApCiAjZGVmaW5lIEZXX1BGVkZfQ01EX05JUV9HRVQoeCkgKCgoeCkgPj4gMCkgJiAweGZmZmZmKQogCisjZGVmaW5lIEZXX1BGVkZfQ01EX1RZUEUgKDEgPDwgMzEpCisjZGVmaW5lIEZXX1BGVkZfQ01EX1RZUEVfR0VUKHgpICgoKHgpID4+IDMxKSAmIDB4MSkKKwogI2RlZmluZSBGV19QRlZGX0NNRF9DTUFTSyh4KSAoKHgpIDw8IDI0KQotI2RlZmluZSBGV19QRlZGX0NNRF9DTUFTS19HRVQoeCkgKCgoeCkgPj4gMjQpICYgMHhmKQorI2RlZmluZSBGV19QRlZGX0NNRF9DTUFTS19NQVNLIDB4ZgorI2RlZmluZSBGV19QRlZGX0NNRF9DTUFTS19HRVQoeCkgKCgoeCkgPj4gMjQpICYgRldfUEZWRl9DTURfQ01BU0tfTUFTSykKIAogI2RlZmluZSBGV19QRlZGX0NNRF9QTUFTSyh4KSAoKHgpIDw8IDIwKQotI2RlZmluZSBGV19QRlZGX0NNRF9QTUFTS19HRVQoeCkgKCgoeCkgPj4gMjApICYgMHhmKQorI2RlZmluZSBGV19QRlZGX0NNRF9QTUFTS19NQVNLIDB4ZgorI2RlZmluZSBGV19QRlZGX0NNRF9QTUFTS19HRVQoeCkgKCgoeCkgPj4gMjApICYgRldfUEZWRl9DTURfUE1BU0tfTUFTSykKIAogI2RlZmluZSBGV19QRlZGX0NNRF9ORVEoeCkgKCh4KSA8PCAwKQogI2RlZmluZSBGV19QRlZGX0NNRF9ORVFfR0VUKHgpICgoKHgpID4+IDApICYgMHhmZmZmZikKQEAgLTY4Niw2ICs3MDIsNyBAQAogI2RlZmluZSBGV19FUV9FVEhfQ01EX0VRSUQoeCkgKCh4KSA8PCAwKQogI2RlZmluZSBGV19FUV9FVEhfQ01EX0VRSURfR0VUKHgpICgoKHgpID4+IDApICYgMHhmZmZmZikKICNkZWZpbmUgRldfRVFfRVRIX0NNRF9QSFlTRVFJRCh4KSAoKHgpIDw8IDApCisjZGVmaW5lIEZXX0VRX0VUSF9DTURfUEhZU0VRSURfR0VUKHgpICgoKHgpID4+IDApICYgMHhmZmZmZikKIAogI2RlZmluZSBGV19FUV9FVEhfQ01EX0ZFVENIU1pNKHgpICgoeCkgPDwgMjYpCiAjZGVmaW5lIEZXX0VRX0VUSF9DTURfU1RBVFVTUEdOUyh4KSAoKHgpIDw8IDI1KQpAQCAtODA0LDE2ICs4MjEsMTYgQEAKIHN0cnVjdCBmd192aV9jbWQgewogCV9fYmUzMiBvcF90b192Zm47CiAJX19iZTMyIGFsbG9jX3RvX2xlbjE2OwotCV9fYmUxNiB2aWlkX3BrZDsKKwlfX2JlMTYgdHlwZV92aWlkOwogCXU4IG1hY1s2XTsKIAl1OCBwb3J0aWRfcGtkOwogCXU4IG5tYWM7CiAJdTggbm1hYzBbNl07CiAJX19iZTE2IHJzc3NpemVfcGtkOwogCXU4IG5tYWMxWzZdOwotCV9fYmUxNiByNzsKKwlfX2JlMTYgaWRzaWlxX3BrZDsKIAl1OCBubWFjMls2XTsKLQlfX2JlMTYgcjg7CisJX19iZTE2IGlkc2VpcV9wa2Q7CiAJdTggbm1hYzNbNl07CiAJX19iZTY0IHI5OwogCV9fYmU2NCByMTA7CkBAIC04MjQsMTMgKzg0MSwxNiBAQAogI2RlZmluZSBGV19WSV9DTURfQUxMT0MgKDFVIDw8IDMxKQogI2RlZmluZSBGV19WSV9DTURfRlJFRSAoMVUgPDwgMzApCiAjZGVmaW5lIEZXX1ZJX0NNRF9WSUlEKHgpICgoeCkgPDwgMCkKKyNkZWZpbmUgRldfVklfQ01EX1ZJSURfR0VUKHgpICgoeCkgJiAweGZmZikKICNkZWZpbmUgRldfVklfQ01EX1BPUlRJRCh4KSAoKHgpIDw8IDQpCisjZGVmaW5lIEZXX1ZJX0NNRF9QT1JUSURfR0VUKHgpICgoKHgpID4+IDQpICYgMHhmKQogI2RlZmluZSBGV19WSV9DTURfUlNTU0laRV9HRVQoeCkgKCgoeCkgPj4gMCkgJiAweDdmZikKIAogLyogU3BlY2lhbCBWSV9NQUMgY29tbWFuZCBpbmRleCBpZHMgKi8KICNkZWZpbmUgRldfVklfTUFDX0FERF9NQUMJCTB4M0ZGCiAjZGVmaW5lIEZXX1ZJX01BQ19BRERfUEVSU0lTVF9NQUMJMHgzRkUKICNkZWZpbmUgRldfVklfTUFDX01BQ19CQVNFRF9GUkVFCTB4M0ZECisjZGVmaW5lIEZXX0NMU19UQ0FNX05VTV9FTlRSSUVTCQkzMzYKIAogZW51bSBmd192aV9tYWNfc21hYyB7CiAJRldfVklfTUFDX01QU19UQ0FNX0VOVFJZLApAQCAtODgxLDYgKzkwMSw3IEBACiB9OwogCiAjZGVmaW5lIEZXX1ZJX1JYTU9ERV9DTURfVklJRCh4KSAoKHgpIDw8IDApCisjZGVmaW5lIEZXX1ZJX1JYTU9ERV9DTURfTVRVX01BU0sgMHhmZmZmCiAjZGVmaW5lIEZXX1ZJX1JYTU9ERV9DTURfTVRVKHgpICgoeCkgPDwgMTYpCiAjZGVmaW5lIEZXX1ZJX1JYTU9ERV9DTURfUFJPTUlTQ0VOX01BU0sgMHgzCiAjZGVmaW5lIEZXX1ZJX1JYTU9ERV9DTURfUFJPTUlTQ0VOKHgpICgoeCkgPDwgMTQpCkBAIC0xMTM2LDYgKzExNTcsMTEgQEAKIAkJCV9fYmUzMiBsc3RhdHVzX3RvX21vZHR5cGU7CiAJCQlfX2JlMTYgcGNhcDsKIAkJCV9fYmUxNiBhY2FwOworCQkJX19iZTE2IG10dTsKKwkJCV9fdTggICBjYmxsZW47CisJCQlfX3U4ICAgcjk7CisJCQlfX2JlMzIgcjEwOworCQkJX19iZTY0IHIxMTsKIAkJfSBpbmZvOwogCQlzdHJ1Y3QgZndfcG9ydF9wcHAgewogCQkJX19iZTMyIHBwcGVuX3RvX25jc2ljaDsKQEAgLTExNjEsNiArMTE4Nyw3IEBACiAjZGVmaW5lIEZXX1BPUlRfQ01EX1BPUlRJRF9HRVQoeCkgKCgoeCkgPj4gMCkgJiAweGYpCiAKICNkZWZpbmUgRldfUE9SVF9DTURfQUNUSU9OKHgpICgoeCkgPDwgMTYpCisjZGVmaW5lIEZXX1BPUlRfQ01EX0FDVElPTl9HRVQoeCkgKCgoeCkgPj4gMTYpICYgMHhmZmZmKQogCiAjZGVmaW5lIEZXX1BPUlRfQ01EX0NUTEJGKHgpICgoeCkgPDwgMTApCiAjZGVmaW5lIEZXX1BPUlRfQ01EX09WTEFOMyh4KSAoKHgpIDw8IDcpCkBAIC0xMTk2LDE0ICsxMjIzLDE3IEBACiAjZGVmaW5lIEZXX1BPUlRfQ01EX05DU0lDSCh4KSAoKHgpIDw8IDQpCiAKIGVudW0gZndfcG9ydF90eXBlIHsKLQlGV19QT1JUX1RZUEVfRklCRVIsCi0JRldfUE9SVF9UWVBFX0tYNCwKKwlGV19QT1JUX1RZUEVfRklCRVJfWEZJLAorCUZXX1BPUlRfVFlQRV9GSUJFUl9YQVVJLAogCUZXX1BPUlRfVFlQRV9CVF9TR01JSSwKLQlGV19QT1JUX1RZUEVfS1gsCisJRldfUE9SVF9UWVBFX0JUX1hGSSwKIAlGV19QT1JUX1RZUEVfQlRfWEFVSSwKLQlGV19QT1JUX1RZUEVfS1IsCisJRldfUE9SVF9UWVBFX0tYNCwKIAlGV19QT1JUX1RZUEVfQ1g0LAotCUZXX1BPUlRfVFlQRV9UV0lOQVgsCisJRldfUE9SVF9UWVBFX0tYLAorCUZXX1BPUlRfVFlQRV9LUiwKKwlGV19QT1JUX1RZUEVfU0ZQLAorCUZXX1BPUlRfVFlQRV9CUF9BUCwKIAogCUZXX1BPUlRfVFlQRV9OT05FID0gRldfUE9SVF9DTURfUFRZUEVfTUFTSwogfTsKQEAgLTEyMTMsNiArMTI0Myw5IEBACiAJRldfUE9SVF9NT0RfVFlQRV9MUiwKIAlGV19QT1JUX01PRF9UWVBFX1NSLAogCUZXX1BPUlRfTU9EX1RZUEVfRVIsCisJRldfUE9SVF9NT0RfVFlQRV9UV0lOQVhfUEFTU0lWRSwKKwlGV19QT1JUX01PRF9UWVBFX1RXSU5BWF9BQ1RJVkUsCisJRldfUE9SVF9NT0RfVFlQRV9MUk0sCiAKIAlGV19QT1JUX01PRF9UWVBFX05PTkUgPSBGV19QT1JUX0NNRF9NT0RUWVBFX01BU0sKIH07CkBAIC0xNDY5LDYgKzE1MDIsNyBAQAogfTsKIAogI2RlZmluZSBGV19SU1NfR0xCX0NPTkZJR19DTURfTU9ERSh4KQkoKHgpIDw8IDI4KQorI2RlZmluZSBGV19SU1NfR0xCX0NPTkZJR19DTURfTU9ERV9HRVQoeCkgKCgoeCkgPj4gMjgpICYgMHhmKQogCiAjZGVmaW5lIEZXX1JTU19HTEJfQ09ORklHX0NNRF9NT0RFX01BTlVBTAkwCiAjZGVmaW5lIEZXX1JTU19HTEJfQ09ORklHX0NNRF9NT0RFX0JBU0lDVklSVFVBTAkxCkBAIC0xNDg1LDEzICsxNTE5LDE0IEBACiAJCX0gbWFudWFsOwogCQlzdHJ1Y3QgZndfcnNzX3ZpX2NvbmZpZ19iYXNpY3ZpcnR1YWwgewogCQkJX19iZTMyIHI2OwotCQkJX19iZTMyIGRlZmF1bHRxX3RvX2lwNHVkcGVuOworCQkJX19iZTMyIGRlZmF1bHRxX3RvX3VkcGVuOwogI2RlZmluZSBGV19SU1NfVklfQ09ORklHX0NNRF9ERUZBVUxUUSh4KSAgKCh4KSA8PCAxNikKKyNkZWZpbmUgRldfUlNTX1ZJX0NPTkZJR19DTURfREVGQVVMVFFfR0VUKHgpICgoKHgpID4+IDE2KSAmIDB4M2ZmKQogI2RlZmluZSBGV19SU1NfVklfQ09ORklHX0NNRF9JUDZGT1VSVFVQRU4gKDFVIDw8IDQpCiAjZGVmaW5lIEZXX1JTU19WSV9DT05GSUdfQ01EX0lQNlRXT1RVUEVOICAoMVUgPDwgMykKICNkZWZpbmUgRldfUlNTX1ZJX0NPTkZJR19DTURfSVA0Rk9VUlRVUEVOICgxVSA8PCAyKQogI2RlZmluZSBGV19SU1NfVklfQ09ORklHX0NNRF9JUDRUV09UVVBFTiAgKDFVIDw8IDEpCi0jZGVmaW5lIEZXX1JTU19WSV9DT05GSUdfQ01EX0lQNFVEUEVOICAgICAoMVUgPDwgMCkKKyNkZWZpbmUgRldfUlNTX1ZJX0NPTkZJR19DTURfVURQRU4gICAgICAgICgxVSA8PCAwKQogCQkJX19iZTY0IHI5OwogCQkJX19iZTY0IHIxMDsKIAkJfSBiYXNpY3ZpcnR1YWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiNHZmL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzJlZTI2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi9NYWtlZmlsZQpAQCAtMCwwICsxLDcgQEAKKyMKKyMgQ2hlbHNpbyBUNCBTUi1JT1YgVmlydHVhbCBGdW5jdGlvbiBEcml2ZXIKKyMKKworb2JqLSQoQ09ORklHX0NIRUxTSU9fVDRWRikgKz0gY3hnYjR2Zi5vCisKK2N4Z2I0dmYtb2JqcyA6PSBjeGdiNHZmX21haW4ubyB0NHZmX2h3Lm8gc2dlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2I0dmYvYWRhcHRlci5oIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi9hZGFwdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVhMDE5NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2I0dmYvYWRhcHRlci5oCkBAIC0wLDAgKzEsNTQwIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIENoZWxzaW8gVDQgUENJLUUgU1ItSU9WIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQKKyAqIGRyaXZlciBmb3IgTGludXguCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgQ2hlbHNpbyBDb21tdW5pY2F0aW9ucywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworLyoKKyAqIFRoaXMgZmlsZSBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGRpcmVjdGx5LiAgSW5jbHVkZSB0NHZmX2NvbW1vbi5oIGluc3RlYWQuCisgKi8KKworI2lmbmRlZiBfX0NYR0I0VkZfQURBUFRFUl9IX18KKyNkZWZpbmUgX19DWEdCNFZGX0FEQVBURVJfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisKKyNpbmNsdWRlICIuLi9jeGdiNC90NF9ody5oIgorCisvKgorICogQ29uc3RhbnRzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4KKyAqLworZW51bSB7CisJTUFYX05QT1JUUwk9IDEsCQkvKiBtYXggIyBvZiAicG9ydHMiICovCisJTUFYX1BPUlRfUVNFVFMJPSA4LAkJLyogbWF4ICMgb2YgUXVldWUgU2V0cyAvICJwb3J0IiAqLworCU1BWF9FVEhfUVNFVFMJPSBNQVhfTlBPUlRTKk1BWF9QT1JUX1FTRVRTLAorCisJLyoKKwkgKiBNU0ktWCBpbnRlcnJ1cHQgaW5kZXggdXNhZ2UuCisJICovCisJTVNJWF9GVwkJPSAwLAkJLyogTVNJLVggaW5kZXggZm9yIGZpcm13YXJlIFEgKi8KKwlNU0lYX05JUUZMSU5UCT0gMSwJCS8qIE1TSS1YIGluZGV4IGJhc2UgZm9yIEluZ3Jlc3MgUXMgKi8KKwlNU0lYX0VYVFJBUwk9IDEsCisJTVNJWF9FTlRSSUVTCT0gTUFYX0VUSF9RU0VUUyArIE1TSVhfRVhUUkFTLAorCisJLyoKKwkgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgSW5ncmVzcyBhbmQgRWdyZXNzIFF1ZXVlcyBpcyBkZXRlcm1pbmVkIGJ5CisJICogdGhlIG1heGltdW0gbnVtYmVyIG9mICJRdWV1ZSBTZXRzIiB3aGljaCB3ZSBzdXBwb3J0IHBsdXMgYW55CisJICogYW5jaWxsYXJ5IHF1ZXVlcy4gIEVhY2ggIlF1ZXVlIFNldCIgcmVxdWlyZXMgb25lIEluZ3Jlc3MgUXVldWUKKwkgKiBmb3IgUlggUGFja2V0IEluZ3Jlc3MgRXZlbnQgbm90aWZpY2F0aW9ucyBhbmQgdHdvIEVncmVzcyBRdWV1ZXMgZm9yCisJICogYSBGcmVlIExpc3QgYW5kIGFuIEV0aGVybmV0IFRYIGxpc3QuCisJICovCisJSU5HUV9FWFRSQVMJPSAyLAkJLyogZmlybXdhcmUgZXZlbnQgcXVldWUgYW5kICovCisJCQkJCS8qICAgZm9yd2FyZGVkIGludGVycnVwdHMgKi8KKwlNQVhfSU5HUQk9IE1BWF9FVEhfUVNFVFMrSU5HUV9FWFRSQVMsCisJTUFYX0VHUlEJPSBNQVhfRVRIX1FTRVRTKjIsCit9OworCisvKgorICogRm9yd2FyZCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiByZWZlcmVuY2VzLgorICovCitzdHJ1Y3QgYWRhcHRlcjsKK3N0cnVjdCBzZ2VfZXRoX3J4cTsKK3N0cnVjdCBzZ2VfcnNwcTsKKworLyoKKyAqIFBlci0icG9ydCIgaW5mb3JtYXRpb24uICBUaGlzIGlzIHJlYWxseSBwZXItVmlydHVhbCBJbnRlcmZhY2UgaW5mb3JtYXRpb24KKyAqIGJ1dCB0aGUgdXNlIG9mIHRoZSAicG9ydCIgbm9tYW5jbGF0dXJlIG1ha2VzIGl0IGVhc2llciB0byBnbyBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiB0aGUgUEYgYW5kIFZGIGRyaXZlcnMgLi4uCisgKi8KK3N0cnVjdCBwb3J0X2luZm8geworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyOwkvKiBvdXIgYWRhcHRlciAqLworCXN0cnVjdCB2bGFuX2dyb3VwICp2bGFuX2dycDsJLyogb3V0IFZMQU4gZ3JvdXAgKi8KKwl1MTYgdmlpZDsJCQkvKiB2aXJ0dWFsIGludGVyZmFjZSBJRCAqLworCXMxNiB4YWN0X2FkZHJfZmlsdDsJCS8qIGluZGV4IG9mIG91ciBNQUMgYWRkcmVzcyBmaWx0ZXIgKi8KKwl1MTYgcnNzX3NpemU7CQkJLyogc2l6ZSBvZiBWSSdzIFJTUyB0YWJsZSBzbGljZSAqLworCXU4IHBpZHg7CQkJLyogaW5kZXggaW50byBhZGFwdGVyIHBvcnRbXSAqLworCXU4IHBvcnRfaWQ7CQkJLyogcGh5c2ljYWwgcG9ydCBJRCAqLworCXU4IHJ4X29mZmxvYWQ7CQkJLyogQ1NPLCBldGMuICovCisJdTggbnFzZXRzOwkJCS8qICMgb2YgIlF1ZXVlIFNldHMiICovCisJdTggZmlyc3RfcXNldDsJCQkvKiBpbmRleCBvZiBmaXJzdCAiUXVldWUgU2V0IiAqLworCXN0cnVjdCBsaW5rX2NvbmZpZyBsaW5rX2NmZzsJLyogcGh5c2ljYWwgcG9ydCBjb25maWd1cmF0aW9uICovCit9OworCisvKiBwb3J0X2luZm8ucnhfb2ZmbG9hZCBmbGFncyAqLworZW51bSB7CisJUlhfQ1NPID0gMSA8PCAwLAorfTsKKworLyoKKyAqIFNjYXR0ZXIgR2F0aGVyIEVuZ2luZSByZXNvdXJjZXMgZm9yIHRoZSAiYWRhcHRlciIuICBPdXIgaW5ncmVzcyBhbmQgZWdyZXNzCisgKiBxdWV1ZXMgYXJlIG9yZ2FuaXplZCBpbnRvICJRdWV1ZSBTZXRzIiB3aXRoIG9uZSBpbmdyZXNzIGFuZCBvbmUgZWdyZXNzCisgKiBxdWV1ZSBwZXIgUXVldWUgU2V0LiAgVGhlc2UgUXVldWUgU2V0cyBhcmUgYXBvcnRpb25hYmxlIGJldHdlZW4gdGhlICJwb3J0cyIKKyAqIChWaXJ0dWFsIEludGVyZmFjZXMpLiAgT25lIGV4dHJhIGluZ3Jlc3MgcXVldWUgaXMgdXNlZCB0byByZWNlaXZlCisgKiBhc3luY2hyb25vdXMgbWVzc2FnZXMgZnJvbSB0aGUgZmlybXdhcmUuICBOb3RlIHRoYXQgdGhlICJRdWV1ZSBJRHMiIHRoYXQgd2UKKyAqIHVzZSBoZXJlIGFyZSByZWFsbHkgIlJlbGF0aXZlIFF1ZXVlIElEcyIgd2hpY2ggYXJlIHJldHVybmVkIGFzIHBhcnQgb2YgdGhlCisgKiBmaXJtd2FyZSBjb21tYW5kIHRvIGFsbG9jYXRlIHF1ZXVlcy4gIFRoZXNlIHF1ZXVlIElEcyBhcmUgcmVsYXRpdmUgdG8gdGhlCisgKiBhYnNvbHV0ZSBRdWV1ZSBJRCBiYXNlIG9mIHRoZSBzZWN0aW9uIG9mIHRoZSBRdWV1ZSBJRCBzcGFjZSBhbGxvY2F0ZWQgdG8KKyAqIHRoZSBQRi9WRi4KKyAqLworCisvKgorICogU0dFIGZyZWUtbGlzdCBxdWV1ZSBzdGF0ZS4KKyAqLworc3RydWN0IHJ4X3N3X2Rlc2M7CitzdHJ1Y3Qgc2dlX2ZsIHsKKwl1bnNpZ25lZCBpbnQgYXZhaWw7CQkvKiAjIG9mIGF2YWlsYWJsZSBSWCBidWZmZXJzICovCisJdW5zaWduZWQgaW50IHBlbmRfY3JlZDsJCS8qIG5ldyBidWZmZXJzIHNpbmNlIGxhc3QgRkwgREIgcmluZyAqLworCXVuc2lnbmVkIGludCBjaWR4OwkJLyogY29uc3VtZXIgaW5kZXggKi8KKwl1bnNpZ25lZCBpbnQgcGlkeDsJCS8qIHByb2R1Y2VyIGluZGV4ICovCisJdW5zaWduZWQgbG9uZyBhbGxvY19mYWlsZWQ7CS8qICMgb2YgYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZXMgKi8KKwl1bnNpZ25lZCBsb25nIGxhcmdlX2FsbG9jX2ZhaWxlZDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ2aW5nOwkJLyogIyBvZiB0aW1lcyBGTCB3YXMgZm91bmQgc3RhcnZpbmcgKi8KKworCS8qCisJICogV3JpdGUtb25jZS9pbmZyZXF1ZW50bHkgZmllbGRzLgorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKi8KKworCXVuc2lnbmVkIGludCBjbnR4dF9pZDsJCS8qIFNHRSByZWxhdGl2ZSBRSUQgZm9yIHRoZSBmcmVlIGxpc3QgKi8KKwl1bnNpZ25lZCBpbnQgYWJzX2lkOwkJLyogU0dFIGFic29sdXRlIFFJRCBmb3IgdGhlIGZyZWUgbGlzdCAqLworCXVuc2lnbmVkIGludCBzaXplOwkJLyogY2FwYWNpdHkgb2YgZnJlZSBsaXN0ICovCisJc3RydWN0IHJ4X3N3X2Rlc2MgKnNkZXNjOwkvKiBhZGRyZXNzIG9mIFNXIFJYIGRlc2NyaXB0b3IgcmluZyAqLworCV9fYmU2NCAqZGVzYzsJCQkvKiBhZGRyZXNzIG9mIEhXIFJYIGRlc2NyaXB0b3IgcmluZyAqLworCWRtYV9hZGRyX3QgYWRkcjsJCS8qIFBDSSBidXMgYWRkcmVzcyBvZiBoYXJkd2FyZSByaW5nICovCit9OworCisvKgorICogQW4gaW5ncmVzcyBwYWNrZXQgZ2F0aGVyIGxpc3QuCisgKi8KK3N0cnVjdCBwa3RfZ2wgeworCXNrYl9mcmFnX3QgZnJhZ3NbTUFYX1NLQl9GUkFHU107CisJdm9pZCAqdmE7CQkJLyogdmlydHVhbCBhZGRyZXNzIG9mIGZpcnN0IGJ5dGUgKi8KKwl1bnNpZ25lZCBpbnQgbmZyYWdzOwkJLyogIyBvZiBmcmFnbWVudHMgKi8KKwl1bnNpZ25lZCBpbnQgdG90X2xlbjsJCS8qIHRvdGFsIGxlbmd0aCBvZiBmcmFnbWVudHMgKi8KK307CisKK3R5cGVkZWYgaW50ICgqcnNwcV9oYW5kbGVyX3QpKHN0cnVjdCBzZ2VfcnNwcSAqLCBjb25zdCBfX2JlNjQgKiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBwa3RfZ2wgKik7CisKKy8qCisgKiBTdGF0ZSBmb3IgYW4gU0dFIFJlc3BvbnNlIFF1ZXVlLgorICovCitzdHJ1Y3Qgc2dlX3JzcHEgeworCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOwkvKiBOQVBJIHNjaGVkdWxpbmcgY29udHJvbCAqLworCWNvbnN0IF9fYmU2NCAqY3VyX2Rlc2M7CQkvKiBjdXJyZW50IGRlc2NyaXB0b3IgaW4gcXVldWUgKi8KKwl1bnNpZ25lZCBpbnQgY2lkeDsJCS8qIGNvbnN1bWVyIGluZGV4ICovCisJdTggZ2VuOwkJCQkvKiBjdXJyZW50IGdlbmVyYXRpb24gYml0ICovCisJdTggbmV4dF9pbnRyX3BhcmFtczsJCS8qIGhvbGRvZmYgcGFyYW1zIGZvciBuZXh0IGludGVycnVwdCAqLworCWludCBvZmZzZXQ7CQkJLyogb2Zmc2V0IGludG8gY3VycmVudCBGTCBidWZmZXIgKi8KKworCXVuc2lnbmVkIGludCB1bmhhbmRsZWRfaXJxczsJLyogYm9ndXMgaW50ZXJydXB0cyAqLworCisJLyoKKwkgKiBXcml0ZS1vbmNlL2luZnJlcXVlbnRseSBmaWVsZHMuCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqLworCisJdTggaW50cl9wYXJhbXM7CQkJLyogaW50ZXJydXB0IGhvbGRvZmYgcGFyYW1ldGVycyAqLworCXU4IHBrdGNudF9pZHg7CQkJLyogaW50ZXJydXB0IHBhY2tldCB0aHJlc2hvbGQgKi8KKwl1OCBpZHg7CQkJCS8qIHF1ZXVlIGluZGV4IHdpdGhpbiBpdHMgZ3JvdXAgKi8KKwl1MTYgY250eHRfaWQ7CQkJLyogU0dFIHJlbCBRSUQgZm9yIHRoZSByZXNwb25zZSBRICovCisJdTE2IGFic19pZDsJCQkvKiBTR0UgYWJzIFFJRCBmb3IgdGhlIHJlc3BvbnNlIFEgKi8KKwlfX2JlNjQgKmRlc2M7CQkJLyogYWRkcmVzcyBvZiBoYXJkd2FyZSByZXNwb25zZSByaW5nICovCisJZG1hX2FkZHJfdCBwaHlzX2FkZHI7CQkvKiBQQ0kgYnVzIGFkZHJlc3Mgb2YgcmluZyAqLworCXVuc2lnbmVkIGludCBpcWVfbGVuOwkJLyogZW50cnkgc2l6ZSAqLworCXVuc2lnbmVkIGludCBzaXplOwkJLyogY2FwY2l0eSBvZiByZXNwb25zZSBRICovCisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXI7CS8qIG91ciBhZGFwdGVyICovCisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsJLyogYXNzb2NpYXRlZCBuZXQgZGV2aWNlICovCisJcnNwcV9oYW5kbGVyX3QgaGFuZGxlcjsJCS8qIHRoZSBoYW5kbGVyIGZvciB0aGlzIHJlc3BvbnNlIFEgKi8KK307CisKKy8qCisgKiBFdGhlcm5ldCBxdWV1ZSBzdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBzZ2VfZXRoX3N0YXRzIHsKKwl1bnNpZ25lZCBsb25nIHBrdHM7CQkvKiAjIG9mIGV0aGVybmV0IHBhY2tldHMgKi8KKwl1bnNpZ25lZCBsb25nIGxyb19wa3RzOwkJLyogIyBvZiBMUk8gc3VwZXIgcGFja2V0cyAqLworCXVuc2lnbmVkIGxvbmcgbHJvX21lcmdlZDsJLyogIyBvZiB3aXJlIHBhY2tldHMgbWVyZ2VkIGJ5IExSTyAqLworCXVuc2lnbmVkIGxvbmcgcnhfY3NvOwkJLyogIyBvZiBSeCBjaGVja3N1bSBvZmZsb2FkcyAqLworCXVuc2lnbmVkIGxvbmcgdmxhbl9leDsJCS8qICMgb2YgUnggVkxBTiBleHRyYWN0aW9ucyAqLworCXVuc2lnbmVkIGxvbmcgcnhfZHJvcHM7CQkvKiAjIG9mIHBhY2tldHMgZHJvcHBlZCBkdWUgdG8gbm8gbWVtICovCit9OworCisvKgorICogU3RhdGUgZm9yIGFuIEV0aGVybmV0IFJlY2VpdmUgUXVldWUuCisgKi8KK3N0cnVjdCBzZ2VfZXRoX3J4cSB7CisJc3RydWN0IHNnZV9yc3BxIHJzcHE7CQkvKiBSZXNwb25zZSBRdWV1ZSAqLworCXN0cnVjdCBzZ2VfZmwgZmw7CQkvKiBGcmVlIExpc3QgKi8KKwlzdHJ1Y3Qgc2dlX2V0aF9zdGF0cyBzdGF0czsJLyogcmVjZWl2ZSBzdGF0aXN0aWNzICovCit9OworCisvKgorICogU0dFIFRyYW5zbWl0IFF1ZXVlIHN0YXRlLiAgVGhpcyBjb250YWlucyBhbGwgb2YgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkCisgKiB3aXRoIHRoZSBoYXJkd2FyZSBzdGF0dXMgb2YgYSBUWCBRdWV1ZSB3aGljaCBpcyBhIGNpcmN1bGFyIHJpbmcgb2YgaGFyZHdhcmUKKyAqIFRYIERlc2NyaXB0b3JzLiAgRm9yIGNvbnZlbmllbmNlLCBpdCBhbHNvIGNvbnRhaW5zIGEgcG9pbnRlciB0byBhIHBhcmFsbGVsCisgKiAiU29mdHdhcmUgRGVzY3JpcHRvciIgYXJyYXkgYnV0IHdlIGRvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgaXQgaGVyZSBvdGhlcgorICogdGhhbiBpdHMgdHlwZSBuYW1lLgorICovCitzdHJ1Y3QgdHhfZGVzYyB7CisJLyoKKwkgKiBFZ3Jlc3MgUXVldWVzIGFyZSBtZWFzdXJlZCBpbiB1bml0cyBvZiBTR0VfRVFfSURYU0laRSBieSB0aGUKKwkgKiBoYXJkd2FyZTogU2l6ZXMsIFByb2R1Y2VyIGFuZCBDb25zdW1lciBpbmRpY2VzLCBldGMuCisJICovCisJX19iZTY0IGZsaXRbU0dFX0VRX0lEWFNJWkUvc2l6ZW9mKF9fYmU2NCldOworfTsKK3N0cnVjdCB0eF9zd19kZXNjOworc3RydWN0IHNnZV90eHEgeworCXVuc2lnbmVkIGludCBpbl91c2U7CQkvKiAjIG9mIGluLXVzZSBUWCBkZXNjcmlwdG9ycyAqLworCXVuc2lnbmVkIGludCBzaXplOwkJLyogIyBvZiBkZXNjcmlwdG9ycyAqLworCXVuc2lnbmVkIGludCBjaWR4OwkJLyogU1cgY29uc3VtZXIgaW5kZXggKi8KKwl1bnNpZ25lZCBpbnQgcGlkeDsJCS8qIHByb2R1Y2VyIGluZGV4ICovCisJdW5zaWduZWQgbG9uZyBzdG9wczsJCS8qICMgb2YgdGltZXMgcXVldWUgaGFzIGJlZW4gc3RvcHBlZCAqLworCXVuc2lnbmVkIGxvbmcgcmVzdGFydHM7CQkvKiAjIG9mIHF1ZXVlIHJlc3RhcnRzICovCisKKwkvKgorCSAqIFdyaXRlLW9uY2UvaW5mcmVxdWVudGx5IGZpZWxkcy4KKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICovCisKKwl1bnNpZ25lZCBpbnQgY250eHRfaWQ7CQkvKiBTR0UgcmVsYXRpdmUgUUlEIGZvciB0aGUgVFggUSAqLworCXVuc2lnbmVkIGludCBhYnNfaWQ7CQkvKiBTR0UgYWJzb2x1dGUgUUlEIGZvciB0aGUgVFggUSAqLworCXN0cnVjdCB0eF9kZXNjICpkZXNjOwkJLyogYWRkcmVzcyBvZiBIVyBUWCBkZXNjcmlwdG9yIHJpbmcgKi8KKwlzdHJ1Y3QgdHhfc3dfZGVzYyAqc2Rlc2M7CS8qIGFkZHJlc3Mgb2YgU1cgVFggZGVzY3JpcHRvciByaW5nICovCisJc3RydWN0IHNnZV9xc3RhdCAqc3RhdDsJCS8qIHF1ZXVlIHN0YXR1cyBlbnRyeSAqLworCWRtYV9hZGRyX3QgcGh5c19hZGRyOwkJLyogUENJIGJ1cyBhZGRyZXNzIG9mIGhhcmR3YXJlIHJpbmcgKi8KK307CisKKy8qCisgKiBTdGF0ZSBmb3IgYW4gRXRoZXJuZXQgVHJhbnNtaXQgUXVldWUuCisgKi8KK3N0cnVjdCBzZ2VfZXRoX3R4cSB7CisJc3RydWN0IHNnZV90eHEgcTsJCS8qIFNHRSBUWCBRdWV1ZSAqLworCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsJLyogYXNzb2NpYXRlZCBuZXRkZXYgVFggcXVldWUgKi8KKwl1bnNpZ25lZCBsb25nIHRzbzsJCS8qICMgb2YgVFNPIHJlcXVlc3RzICovCisJdW5zaWduZWQgbG9uZyB0eF9jc287CQkvKiAjIG9mIFRYIGNoZWNrc3VtIG9mZmxvYWRzICovCisJdW5zaWduZWQgbG9uZyB2bGFuX2luczsJCS8qICMgb2YgVFggVkxBTiBpbnNlcnRpb25zICovCisJdW5zaWduZWQgbG9uZyBtYXBwaW5nX2VycjsJLyogIyBvZiBJL08gTU1VIHBhY2tldCBtYXBwaW5nIGVycm9ycyAqLworfTsKKworLyoKKyAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgU2NhdHRlci9HYXRoZXIgRW5naW5lIHJlc291cmNlcy4KKyAqLworc3RydWN0IHNnZSB7CisJLyoKKwkgKiBPdXIgIlF1ZXVlIFNldHMiIC4uLgorCSAqLworCXN0cnVjdCBzZ2VfZXRoX3R4cSBldGh0eHFbTUFYX0VUSF9RU0VUU107CisJc3RydWN0IHNnZV9ldGhfcnhxIGV0aHJ4cVtNQVhfRVRIX1FTRVRTXTsKKworCS8qCisJICogRXh0cmEgaW5ncmVzcyBxdWV1ZXMgZm9yIGFzeW5jaHJvbm91cyBmaXJtd2FyZSBldmVudHMgYW5kCisJICogZm9yd2FyZGVkIGludGVycnVwdHMgKHdoZW4gaW4gTVNJIG1vZGUpLgorCSAqLworCXN0cnVjdCBzZ2VfcnNwcSBmd19ldnRxIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CisKKwlzdHJ1Y3Qgc2dlX3JzcHEgaW50cnEgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKKwlzcGlubG9ja190IGludHJxX2xvY2s7CisKKwkvKgorCSAqIFN0YXRlIGZvciBtYW5hZ2luZyAic3RhcnZpbmcgRnJlZSBMaXN0cyIgLS0gRnJlZSBMaXN0cyB3aGljaCBoYXZlCisJICogZmFsbGVuIGJlbG93IGEgY2VydGFpbiB0aHJlc2hvbGQgb2YgYnVmZmVycyBhdmFpbGFibGUgdG8gdGhlCisJICogaGFyZHdhcmUgYW5kIGF0dGVtcHRzIHRvIHJlZmlsbCB0aGVtIHVwIHRvIHRoYXQgdGhyZXNob2xkIGhhdmUKKwkgKiBmYWlsZWQuICBXZSBoYXZlIGEgcmVndWxhciAic2xvdyB0aWNrIiB0aW1lciBwcm9jZXNzIHdoaWNoIHdpbGwKKwkgKiBtYWtlIHBlcmlvZGljIGF0dGVtcHRzIHRvIHJlZmlsbCB0aGVzZSBzdGFydmluZyBGcmVlIExpc3RzIC4uLgorCSAqLworCURFQ0xBUkVfQklUTUFQKHN0YXJ2aW5nX2ZsLCBNQVhfRUdSUSk7CisJc3RydWN0IHRpbWVyX2xpc3QgcnhfdGltZXI7CisKKwkvKgorCSAqIFN0YXRlIGZvciBjbGVhbmluZyB1cCBjb21wbGV0ZWQgVFggZGVzY3JpcHRvcnMuCisJICovCisJc3RydWN0IHRpbWVyX2xpc3QgdHhfdGltZXI7CisKKwkvKgorCSAqIFdyaXRlLW9uY2UvaW5mcmVxdWVudGx5IGZpZWxkcy4KKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICovCisKKwl1MTYgbWF4X2V0aHFzZXRzOwkJLyogIyBvZiBhdmFpbGFibGUgRXRoZXJuZXQgcXVldWUgc2V0cyAqLworCXUxNiBldGhxc2V0czsJCQkvKiAjIG9mIGFjdGl2ZSBFdGhlcm5ldCBxdWV1ZSBzZXRzICovCisJdTE2IGV0aHR4cV9yb3ZlcjsJCS8qIFR4IHF1ZXVlIHRvIGNsZWFuIHVwIG5leHQgKi8KKwl1MTYgdGltZXJfdmFsW1NHRV9OVElNRVJTXTsJLyogaW50ZXJydXB0IGhvbGRvZmYgdGltZXIgYXJyYXkgKi8KKwl1OCBjb3VudGVyX3ZhbFtTR0VfTkNPVU5URVJTXTsJLyogaW50ZXJydXB0IFJYIHRocmVzaG9sZCBhcnJheSAqLworCisJLyoKKwkgKiBSZXZlcnNlIG1hcHMgZnJvbSBBYnNvbHV0ZSBRdWV1ZSBJRHMgdG8gYXNzb2NpYXRlZCBxdWV1ZSBwb2ludGVycy4KKwkgKiBUaGUgYWJzb2x1dGUgUXVldWUgSURzIGFyZSBpbiBhIGNvbXBhY3QgcmFuZ2Ugd2hpY2ggc3RhcnQgYXQgYQorCSAqIFtwb3RlbnRpYWxseSBsYXJnZV0gQmFzZSBRdWV1ZSBJRC4gIFdlIHBlcmZvcm0gdGhlIHJldmVyc2UgbWFwIGJ5CisJICogZmlyc3QgY29udmVydGluZyB0aGUgQWJzb2x1dGUgUXVldWUgSUQgaW50byBhIFJlbGF0aXZlIFF1ZXVlIElEIGJ5CisJICogc3VidHJhY3Rpbmcgb2ZmIHRoZSBCYXNlIFF1ZXVlIElEIGFuZCB0aGVuIHVzZSBhIFJlbGF0aXZlIFF1ZXVlIElECisJICogaW5kZXhlZCB0YWJsZSB0byBnZXQgdGhlIHBvaW50ZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcgc29mdHdhcmUKKwkgKiBxdWV1ZSBzdHJ1Y3R1cmUuCisJICovCisJdW5zaWduZWQgaW50IGVncl9iYXNlOworCXVuc2lnbmVkIGludCBpbmdyX2Jhc2U7CisJdm9pZCAqZWdyX21hcFtNQVhfRUdSUV07CisJc3RydWN0IHNnZV9yc3BxICppbmdyX21hcFtNQVhfSU5HUV07Cit9OworCisvKgorICogVXRpbGl0eSBtYWNyb3MgdG8gY29udmVydCBBYnNvbHV0ZS0gdG8gUmVsYXRpdmUtUXVldWUgaW5kaWNlcyBhbmQgRWdyZXNzLQorICogYW5kIEluZ3Jlc3MtUXVldWVzLiAgVGhlIEVRX01BUCgpIGFuZCBJUV9NQVAoKSBtYWNyb3Mgd2hpY2ggcHJvdmlkZQorICogcG9pbnRlcnMgdG8gSW5ncmVzcy0gYW5kIEVncmVzcy1RdWV1ZXMgY2FuIGJlIHVzZWQgYXMgYm90aCBMLSBhbmQgUi12YWx1ZXMKKyAqLworI2RlZmluZSBFUV9JRFgocywgYWJzX2lkKSAoKHVuc2lnbmVkIGludCkoKGFic19pZCkgLSAocyktPmVncl9iYXNlKSkKKyNkZWZpbmUgSVFfSURYKHMsIGFic19pZCkgKCh1bnNpZ25lZCBpbnQpKChhYnNfaWQpIC0gKHMpLT5pbmdyX2Jhc2UpKQorCisjZGVmaW5lIEVRX01BUChzLCBhYnNfaWQpICgocyktPmVncl9tYXBbRVFfSURYKHMsIGFic19pZCldKQorI2RlZmluZSBJUV9NQVAocywgYWJzX2lkKSAoKHMpLT5pbmdyX21hcFtJUV9JRFgocywgYWJzX2lkKV0pCisKKy8qCisgKiBNYWNybyB0byBpdGVyYXRlIGFjcm9zcyBRdWV1ZSBTZXRzICgicnhxIiBpcyBhIGhpc3RvcmljIG1pc25vbWVyKS4KKyAqLworI2RlZmluZSBmb3JfZWFjaF9ldGhyeHEoc2dlLCBpdGVyKSBcCisJZm9yIChpdGVyID0gMDsgaXRlciA8IChzZ2UpLT5ldGhxc2V0czsgaXRlcisrKQorCisvKgorICogUGVyLSJhZGFwdGVyIiAoVmlydHVhbCBGdW5jdGlvbikgaW5mb3JtYXRpb24uCisgKi8KK3N0cnVjdCBhZGFwdGVyIHsKKwkvKiBQQ0kgcmVzb3VyY2VzICovCisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXN0cnVjdCBkZXZpY2UgKnBkZXZfZGV2OworCisJLyogImFkYXB0ZXIiIHJlc291cmNlcyAqLworCXVuc2lnbmVkIGxvbmcgcmVnaXN0ZXJlZF9kZXZpY2VfbWFwOworCXVuc2lnbmVkIGxvbmcgb3Blbl9kZXZpY2VfbWFwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGFkYXB0ZXJfcGFyYW1zIHBhcmFtczsKKworCS8qIHF1ZXVlIGFuZCBpbnRlcnJ1cHQgcmVzb3VyY2VzICovCisJc3RydWN0IHsKKwkJdW5zaWduZWQgc2hvcnQgdmVjOworCQljaGFyIGRlc2NbMjJdOworCX0gbXNpeF9pbmZvW01TSVhfRU5UUklFU107CisJc3RydWN0IHNnZSBzZ2U7CisKKwkvKiBMaW51eCBuZXR3b3JrIGRldmljZSByZXNvdXJjZXMgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZSAqcG9ydFtNQVhfTlBPUlRTXTsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGludCBtc2dfZW5hYmxlOworCisJLyogZGVidWdmcyByZXNvdXJjZXMgKi8KKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jvb3Q7CisKKwkvKiB2YXJpb3VzIGxvY2tzICovCisJc3BpbmxvY2tfdCBzdGF0c19sb2NrOworfTsKKworZW51bSB7IC8qIGFkYXB0ZXIgZmxhZ3MgKi8KKwlGVUxMX0lOSVRfRE9ORSAgICAgPSAoMVVMIDw8IDApLAorCVVTSU5HX01TSSAgICAgICAgICA9ICgxVUwgPDwgMSksCisJVVNJTkdfTVNJWCAgICAgICAgID0gKDFVTCA8PCAyKSwKKwlRVUVVRVNfQk9VTkQgICAgICAgPSAoMVVMIDw8IDMpLAorfTsKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgcmVnaXN0ZXIgcmVhZC93cml0ZSByb3V0aW5lIGRlZmluaXRpb25zIGFyZSByZXF1aXJlZCBieQorICogdGhlIGNvbW1vbiBjb2RlLgorICovCisKKy8qKgorICogdDRfcmVhZF9yZWcgLSByZWFkIGEgSFcgcmVnaXN0ZXIKKyAqIEBhZGFwdGVyOiB0aGUgYWRhcHRlcgorICogQHJlZ19hZGRyOiB0aGUgcmVnaXN0ZXIgYWRkcmVzcworICoKKyAqIFJldHVybnMgdGhlIDMyLWJpdCB2YWx1ZSBvZiB0aGUgZ2l2ZW4gSFcgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHQ0X3JlYWRfcmVnKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgcmVnX2FkZHIpCit7CisJcmV0dXJuIHJlYWRsKGFkYXB0ZXItPnJlZ3MgKyByZWdfYWRkcik7Cit9CisKKy8qKgorICogdDRfd3JpdGVfcmVnIC0gd3JpdGUgYSBIVyByZWdpc3RlcgorICogQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCisgKiBAcmVnX2FkZHI6IHRoZSByZWdpc3RlciBhZGRyZXNzCisgKiBAdmFsOiB0aGUgdmFsdWUgdG8gd3JpdGUKKyAqCisgKiBXcml0ZSBhIDMyLWJpdCB2YWx1ZSBpbnRvIHRoZSBnaXZlbiBIVyByZWdpc3Rlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHQ0X3dyaXRlX3JlZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIHJlZ19hZGRyLCB1MzIgdmFsKQoreworCXdyaXRlbCh2YWwsIGFkYXB0ZXItPnJlZ3MgKyByZWdfYWRkcik7Cit9CisKKyNpZm5kZWYgcmVhZHEKK3N0YXRpYyBpbmxpbmUgdTY0IHJlYWRxKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gcmVhZGwoYWRkcikgKyAoKHU2NClyZWFkbChhZGRyICsgNCkgPDwgMzIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVxKHU2NCB2YWwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl3cml0ZWwodmFsLCBhZGRyKTsKKwl3cml0ZWwodmFsID4+IDMyLCBhZGRyICsgNCk7Cit9CisjZW5kaWYKKworLyoqCisgKiB0NF9yZWFkX3JlZzY0IC0gcmVhZCBhIDY0LWJpdCBIVyByZWdpc3RlcgorICogQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCisgKiBAcmVnX2FkZHI6IHRoZSByZWdpc3RlciBhZGRyZXNzCisgKgorICogUmV0dXJucyB0aGUgNjQtYml0IHZhbHVlIG9mIHRoZSBnaXZlbiBIVyByZWdpc3Rlci4KKyAqLworc3RhdGljIGlubGluZSB1NjQgdDRfcmVhZF9yZWc2NChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIHJlZ19hZGRyKQoreworCXJldHVybiByZWFkcShhZGFwdGVyLT5yZWdzICsgcmVnX2FkZHIpOworfQorCisvKioKKyAqIHQ0X3dyaXRlX3JlZzY0IC0gd3JpdGUgYSA2NC1iaXQgSFcgcmVnaXN0ZXIKKyAqIEBhZGFwdGVyOiB0aGUgYWRhcHRlcgorICogQHJlZ19hZGRyOiB0aGUgcmVnaXN0ZXIgYWRkcmVzcworICogQHZhbDogdGhlIHZhbHVlIHRvIHdyaXRlCisgKgorICogV3JpdGUgYSA2NC1iaXQgdmFsdWUgaW50byB0aGUgZ2l2ZW4gSFcgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB0NF93cml0ZV9yZWc2NChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIHJlZ19hZGRyLAorCQkJCSAgdTY0IHZhbCkKK3sKKwl3cml0ZXEodmFsLCBhZGFwdGVyLT5yZWdzICsgcmVnX2FkZHIpOworfQorCisvKioKKyAqIHBvcnRfbmFtZSAtIHJldHVybiB0aGUgc3RyaW5nIG5hbWUgb2YgYSBwb3J0CisgKiBAYWRhcHRlcjogdGhlIGFkYXB0ZXIKKyAqIEBwaWR4OiB0aGUgcG9ydCBpbmRleAorICoKKyAqIFJldHVybiB0aGUgc3RyaW5nIG5hbWUgb2YgdGhlIHNlbGVjdGVkIHBvcnQuCisgKi8KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqcG9ydF9uYW1lKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgcGlkeCkKK3sKKwlyZXR1cm4gYWRhcHRlci0+cG9ydFtwaWR4XS0+bmFtZTsKK30KKworLyoqCisgKiB0NF9vc19zZXRfaHdfYWRkciAtIHN0b3JlIGEgcG9ydCdzIE1BQyBhZGRyZXNzIGluIFNXCisgKiBAYWRhcHRlcjogdGhlIGFkYXB0ZXIKKyAqIEBwaWR4OiB0aGUgcG9ydCBpbmRleAorICogQGh3X2FkZHI6IHRoZSBFdGhlcm5ldCBhZGRyZXNzCisgKgorICogU3RvcmUgdGhlIEV0aGVybmV0IGFkZHJlc3Mgb2YgdGhlIGdpdmVuIHBvcnQgaW4gU1cuICBDYWxsZWQgYnkgdGhlIGNvbW1vbgorICogY29kZSB3aGVuIGl0IHJldHJpZXZlcyBhIHBvcnQncyBFdGhlcm5ldCBhZGRyZXNzIGZyb20gRUVQUk9NLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdDRfb3Nfc2V0X2h3X2FkZHIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwaWR4LAorCQkJCSAgICAgdTggaHdfYWRkcltdKQoreworCW1lbWNweShhZGFwdGVyLT5wb3J0W3BpZHhdLT5kZXZfYWRkciwgaHdfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShhZGFwdGVyLT5wb3J0W3BpZHhdLT5wZXJtX2FkZHIsIGh3X2FkZHIsIEVUSF9BTEVOKTsKK30KKworLyoqCisgKiBuZXRkZXYycGluZm8gLSByZXR1cm4gdGhlIHBvcnRfaW5mbyBzdHJ1Y3R1cmUgYXNzb2NpYXRlZCB3aXRoIGEgbmV0X2RldmljZQorICogQGRldjogdGhlIG5ldGRldgorICoKKyAqIFJldHVybiB0aGUgc3RydWN0IHBvcnRfaW5mbyBhc3NvY2lhdGVkIHdpdGggYSBuZXRfZGV2aWNlCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBvcnRfaW5mbyAqbmV0ZGV2MnBpbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIG5ldGRldl9wcml2KGRldik7Cit9CisKKy8qKgorICogYWRhcDJwaW5mbyAtIHJldHVybiB0aGUgcG9ydF9pbmZvIG9mIGEgcG9ydAorICogQGFkYXA6IHRoZSBhZGFwdGVyCisgKiBAcGlkeDogdGhlIHBvcnQgaW5kZXgKKyAqCisgKiBSZXR1cm4gdGhlIHBvcnRfaW5mbyBzdHJ1Y3R1cmUgZm9yIHRoZSBhZGFwdGVyLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwb3J0X2luZm8gKmFkYXAycGluZm8oc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwaWR4KQoreworCXJldHVybiBuZXRkZXZfcHJpdihhZGFwdGVyLT5wb3J0W3BpZHhdKTsKK30KKworLyoqCisgKiBuZXRkZXYyYWRhcCAtIHJldHVybiB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUgYXNzb2NpYXRlZCB3aXRoIGEgbmV0X2RldmljZQorICogQGRldjogdGhlIG5ldGRldgorICoKKyAqIFJldHVybiB0aGUgc3RydWN0IGFkYXB0ZXIgYXNzb2NpYXRlZCB3aXRoIGEgbmV0X2RldmljZQorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhZGFwdGVyICpuZXRkZXYyYWRhcChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiBuZXRkZXYycGluZm8oZGV2KS0+YWRhcHRlcjsKK30KKworLyoKKyAqIE9TICJDYWxsYmFjayIgZnVuY3Rpb24gZGVjbGFyYXRpb25zLiAgVGhlc2UgYXJlIGZ1bmN0aW9ucyB0aGF0IHRoZSBPUyBjb2RlCisgKiBpcyAiY29udHJhY3RlZCIgdG8gcHJvdmlkZSBmb3IgdGhlIGNvbW1vbiBjb2RlLgorICovCit2b2lkIHQ0dmZfb3NfbGlua19jaGFuZ2VkKHN0cnVjdCBhZGFwdGVyICosIGludCwgaW50KTsKKworLyoKKyAqIFNHRSBmdW5jdGlvbiBwcm90b3R5cGUgZGVjbGFyYXRpb25zLgorICovCitpbnQgdDR2Zl9zZ2VfYWxsb2NfcnhxKHN0cnVjdCBhZGFwdGVyICosIHN0cnVjdCBzZ2VfcnNwcSAqLCBib29sLAorCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50LAorCQkgICAgICAgc3RydWN0IHNnZV9mbCAqLCByc3BxX2hhbmRsZXJfdCk7CitpbnQgdDR2Zl9zZ2VfYWxsb2NfZXRoX3R4cShzdHJ1Y3QgYWRhcHRlciAqLCBzdHJ1Y3Qgc2dlX2V0aF90eHEgKiwKKwkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBuZXRkZXZfcXVldWUgKiwKKwkJCSAgIHVuc2lnbmVkIGludCk7Cit2b2lkIHQ0dmZfZnJlZV9zZ2VfcmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyICopOworCitpbnQgdDR2Zl9ldGhfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK2ludCB0NHZmX2V0aHJ4X2hhbmRsZXIoc3RydWN0IHNnZV9yc3BxICosIGNvbnN0IF9fYmU2NCAqLAorCQkgICAgICAgY29uc3Qgc3RydWN0IHBrdF9nbCAqKTsKKworaXJxX2hhbmRsZXJfdCB0NHZmX2ludHJfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqKTsKK2lycXJldHVybl90IHQ0dmZfc2dlX2ludHJfbXNpeChpbnQsIHZvaWQgKik7CisKK2ludCB0NHZmX3NnZV9pbml0KHN0cnVjdCBhZGFwdGVyICopOwordm9pZCB0NHZmX3NnZV9zdGFydChzdHJ1Y3QgYWRhcHRlciAqKTsKK3ZvaWQgdDR2Zl9zZ2Vfc3RvcChzdHJ1Y3QgYWRhcHRlciAqKTsKKworI2VuZGlmIC8qIF9fQ1hHQjRWRl9BREFQVEVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjR2Zi9jeGdiNHZmX21haW4uYyBiL2RyaXZlcnMvbmV0L2N4Z2I0dmYvY3hnYjR2Zl9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE2NTYzMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2I0dmYvY3hnYjR2Zl9tYWluLmMKQEAgLTAsMCArMSwyODg4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIENoZWxzaW8gVDQgUENJLUUgU1ItSU9WIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQKKyAqIGRyaXZlciBmb3IgTGludXguCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgQ2hlbHNpbyBDb21tdW5pY2F0aW9ucywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKworI2luY2x1ZGUgInQ0dmZfY29tbW9uLmgiCisjaW5jbHVkZSAidDR2Zl9kZWZzLmgiCisKKyNpbmNsdWRlICIuLi9jeGdiNC90NF9yZWdzLmgiCisjaW5jbHVkZSAiLi4vY3hnYjQvdDRfbXNnLmgiCisKKy8qCisgKiBHZW5lcmljIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkcml2ZXIuCisgKi8KKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMC4wIgorI2RlZmluZSBEUlZfREVTQyAiQ2hlbHNpbyBUNCBWaXJ0dWFsIEZ1bmN0aW9uIChWRikgTmV0d29yayBEcml2ZXIiCisKKy8qCisgKiBNb2R1bGUgUGFyYW1ldGVycy4KKyAqID09PT09PT09PT09PT09PT09PQorICovCisKKy8qCisgKiBEZWZhdWx0IGV0aHRvb2wgIm1lc3NhZ2UgbGV2ZWwiIGZvciBhZGFwdGVycy4KKyAqLworI2RlZmluZSBERkxUX01TR19FTkFCTEUgKE5FVElGX01TR19EUlYgfCBORVRJRl9NU0dfUFJPQkUgfCBORVRJRl9NU0dfTElOSyB8IFwKKwkJCSBORVRJRl9NU0dfVElNRVIgfCBORVRJRl9NU0dfSUZET1dOIHwgTkVUSUZfTVNHX0lGVVAgfFwKKwkJCSBORVRJRl9NU0dfUlhfRVJSIHwgTkVUSUZfTVNHX1RYX0VSUikKKworc3RhdGljIGludCBkZmx0X21zZ19lbmFibGUgPSBERkxUX01TR19FTkFCTEU7CisKK21vZHVsZV9wYXJhbShkZmx0X21zZ19lbmFibGUsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRmbHRfbXNnX2VuYWJsZSwKKwkJICJkZWZhdWx0IGFkYXB0ZXIgZXRodG9vbCBtZXNzYWdlIGxldmVsIGJpdG1hcCIpOworCisvKgorICogVGhlIGRyaXZlciB1c2VzIHRoZSBiZXN0IGludGVycnVwdCBzY2hlbWUgYXZhaWxhYmxlIG9uIGEgcGxhdGZvcm0gaW4gdGhlCisgKiBvcmRlciBNU0ktWCB0aGVuIE1TSS4gIFRoaXMgcGFyYW1ldGVyIGRldGVybWluZXMgd2hpY2ggb2YgdGhlc2Ugc2NoZW1lcyB0aGUKKyAqIGRyaXZlciBtYXkgY29uc2lkZXIgYXMgZm9sbG93czoKKyAqCisgKiAgICAgbXNpID0gMjogY2hvb3NlIGZyb20gYW1vbmcgTVNJLVggYW5kIE1TSQorICogICAgIG1zaSA9IDE6IG9ubHkgY29uc2lkZXIgTVNJIGludGVycnVwdHMKKyAqCisgKiBOb3RlIHRoYXQgdW5saWtlIHRoZSBQaHlzaWNhbCBGdW5jdGlvbiBkcml2ZXIsIHRoaXMgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXIKKyAqIGRvZXMgX25vdF8gc3VwcG9ydCBsZWdhY3kgSU5UeCBpbnRlcnJ1cHRzICh0aGlzIGxpbWl0YXRpb24gaXMgbWFuZGF0ZWQgYnkKKyAqIHRoZSBQQ0ktRSBTUi1JT1Ygc3RhbmRhcmQpLgorICovCisjZGVmaW5lIE1TSV9NU0lYCTIKKyNkZWZpbmUgTVNJX01TSQkJMQorI2RlZmluZSBNU0lfREVGQVVMVAlNU0lfTVNJWAorCitzdGF0aWMgaW50IG1zaSA9IE1TSV9ERUZBVUxUOworCittb2R1bGVfcGFyYW0obXNpLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhtc2ksICJ3aGV0aGVyIHRvIHVzZSBNU0ktWCBvciBNU0kiKTsKKworLyoKKyAqIEZ1bmRhbWVudGFsIGNvbnN0YW50cy4KKyAqID09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCitlbnVtIHsKKwlNQVhfVFhRX0VOVFJJRVMJCT0gMTYzODQsCisJTUFYX1JTUFFfRU5UUklFUwk9IDE2Mzg0LAorCU1BWF9SWF9CVUZGRVJTCQk9IDE2Mzg0LAorCisJTUlOX1RYUV9FTlRSSUVTCQk9IDMyLAorCU1JTl9SU1BRX0VOVFJJRVMJPSAxMjgsCisJTUlOX0ZMX0VOVFJJRVMJCT0gMTYsCisKKwkvKgorCSAqIEZvciBwdXJwb3NlcyBvZiBtYW5pcHVsYXRpbmcgdGhlIEZyZWUgTGlzdCBzaXplIHdlIG5lZWQgdG8KKwkgKiByZWNvZ25pemUgdGhhdCBGcmVlIExpc3RzIGFyZSBhY3R1YWxseSBFZ3Jlc3MgUXVldWVzICh0aGUgaG9zdAorCSAqIHByb2R1Y2VzIGZyZWUgYnVmZmVycyB3aGljaCB0aGUgaGFyZHdhcmUgY29uc3VtZXMpLCBFZ3Jlc3MgUXVldWVzCisJICogaW5kaWNlcyBhcmUgYWxsIGluIHVuaXRzIG9mIEVncmVzcyBDb250ZXh0IFVuaXRzIGJ5dGVzLCBhbmQgZnJlZQorCSAqIGxpc3QgZW50cmllcyBhcmUgNjQtYml0IFBDSSBETUEgYWRkcmVzc2VzLiAgQW5kIHNpbmNlIHRoZSBzdGF0ZSBvZgorCSAqIHRoZSBQcm9kdWNlciBJbmRleCA9PSB0aGUgQ29uc3VtZXIgSW5kZXggaW1wbGllcyBhbiBFTVBUWSBsaXN0LCB3ZQorCSAqIGFsd2F5cyBoYXZlIGF0IGxlYXN0IG9uZSBFZ3Jlc3MgVW5pdCdzIHdvcnRoIG9mIEZyZWUgTGlzdCBlbnRyaWVzCisJICogdW51c2VkLiAgU2VlIHNnZS5jIGZvciBtb3JlIGRldGFpbHMgLi4uCisJICovCisJRVFfVU5JVCA9IFNHRV9FUV9JRFhTSVpFLAorCUZMX1BFUl9FUV9VTklUID0gRVFfVU5JVCAvIHNpemVvZihfX2JlNjQpLAorCU1JTl9GTF9SRVNJRCA9IEZMX1BFUl9FUV9VTklULAorfTsKKworLyoKKyAqIEdsb2JhbCBkcml2ZXIgc3RhdGUuCisgKiA9PT09PT09PT09PT09PT09PT09PQorICovCisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpjeGdiNHZmX2RlYnVnZnNfcm9vdDsKKworLyoKKyAqIE9TICJDYWxsYmFjayIgZnVuY3Rpb25zLgorICogPT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworLyoKKyAqIFRoZSBsaW5rIHN0YXR1cyBoYXMgY2hhbmdlZCBvbiB0aGUgaW5kaWNhdGVkICJwb3J0IiAoVmlydHVhbCBJbnRlcmZhY2UpLgorICovCit2b2lkIHQ0dmZfb3NfbGlua19jaGFuZ2VkKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgcGlkeCwgaW50IGxpbmtfb2spCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFkYXB0ZXItPnBvcnRbcGlkeF07CisKKwkvKgorCSAqIElmIHRoZSBwb3J0IGlzIGRpc2FibGVkIG9yIHRoZSBjdXJyZW50IHJlY29yZGVkICJsaW5rIHVwIgorCSAqIHN0YXR1cyBtYXRjaGVzIHRoZSBuZXcgc3RhdHVzLCBqdXN0IHJldHVybi4KKwkgKi8KKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSB8fCBsaW5rX29rID09IG5ldGlmX2NhcnJpZXJfb2soZGV2KSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBUZWxsIHRoZSBPUyB0aGF0IHRoZSBsaW5rIHN0YXR1cyBoYXMgY2hhbmdlZCBhbmQgcHJpbnQgYSBzaG9ydAorCSAqIGluZm9ybWF0aXZlIG1lc3NhZ2Ugb24gdGhlIGNvbnNvbGUgYWJvdXQgdGhlIGV2ZW50LgorCSAqLworCWlmIChsaW5rX29rKSB7CisJCWNvbnN0IGNoYXIgKnM7CisJCWNvbnN0IGNoYXIgKmZjOworCQljb25zdCBzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CisKKwkJbmV0aWZfY2Fycmllcl9vbihkZXYpOworCisJCXN3aXRjaCAocGktPmxpbmtfY2ZnLnNwZWVkKSB7CisJCWNhc2UgU1BFRURfMTAwMDA6CisJCQlzID0gIjEwR2JwcyI7CisJCQlicmVhazsKKworCQljYXNlIFNQRUVEXzEwMDA6CisJCQlzID0gIjEwMDBNYnBzIjsKKwkJCWJyZWFrOworCisJCWNhc2UgU1BFRURfMTAwOgorCQkJcyA9ICIxMDBNYnBzIjsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlzID0gInVua25vd24iOworCQkJYnJlYWs7CisJCX0KKworCQlzd2l0Y2ggKHBpLT5saW5rX2NmZy5mYykgeworCQljYXNlIFBBVVNFX1JYOgorCQkJZmMgPSAiUlgiOworCQkJYnJlYWs7CisKKwkJY2FzZSBQQVVTRV9UWDoKKwkJCWZjID0gIlRYIjsKKwkJCWJyZWFrOworCisJCWNhc2UgUEFVU0VfUlh8UEFVU0VfVFg6CisJCQlmYyA9ICJSWC9UWCI7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZmMgPSAibm8iOworCQkJYnJlYWs7CisJCX0KKworCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayB1cCwgJXMsIGZ1bGwtZHVwbGV4LCAlcyBQQVVTRVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgcywgZmMpOworCX0gZWxzZSB7CisJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIGRvd25cbiIsIGRldi0+bmFtZSk7CisJfQorfQorCisvKgorICogTmV0IGRldmljZSBvcGVyYXRpb25zLgorICogPT09PT09PT09PT09PT09PT09PT09PQorICovCisKKy8qCisgKiBSZWNvcmQgb3VyIG5ldyBWTEFOIEdyb3VwIGFuZCBlbmFibGUvZGlzYWJsZSBoYXJkd2FyZSBWTEFOIFRhZyBleHRyYWN0aW9uCisgKiBiYXNlZCBvbiB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVkxBTiBHcm91cCBwb2ludGVyIGlzIE5VTEwgb3Igbm90LgorICovCitzdGF0aWMgdm9pZCBjeGdiNHZmX3ZsYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCB2bGFuX2dyb3VwICpncnApCit7CisJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcGktPnZsYW5fZ3JwID0gZ3JwOworCXQ0dmZfc2V0X3J4bW9kZShwaS0+YWRhcHRlciwgcGktPnZpaWQsIC0xLCAtMSwgLTEsIC0xLCBncnAgIT0gTlVMTCwgMCk7Cit9CisKKy8qCisgKiBQZXJmb3JtIHRoZSBNQUMgYW5kIFBIWSBhY3Rpb25zIG5lZWRlZCB0byBlbmFibGUgYSAicG9ydCIgKFZpcnR1YWwKKyAqIEludGVyZmFjZSkuCisgKi8KK3N0YXRpYyBpbnQgbGlua19zdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWludCByZXQ7CisJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOworCisJLyoKKwkgKiBXZSBkbyBub3Qgc2V0IGFkZHJlc3MgZmlsdGVycyBhbmQgcHJvbWlzY3VpdHkgaGVyZSwgdGhlIHN0YWNrIGRvZXMKKwkgKiB0aGF0IHN0ZXAgZXhwbGljaXRseS4KKwkgKi8KKwlyZXQgPSB0NHZmX3NldF9yeG1vZGUocGktPmFkYXB0ZXIsIHBpLT52aWlkLCBkZXYtPm10dSwgLTEsIC0xLCAtMSwgLTEsCisJCQkgICAgICB0cnVlKTsKKwlpZiAocmV0ID09IDApIHsKKwkJcmV0ID0gdDR2Zl9jaGFuZ2VfbWFjKHBpLT5hZGFwdGVyLCBwaS0+dmlpZCwKKwkJCQkgICAgICBwaS0+eGFjdF9hZGRyX2ZpbHQsIGRldi0+ZGV2X2FkZHIsIHRydWUpOworCQlpZiAocmV0ID49IDApIHsKKwkJCXBpLT54YWN0X2FkZHJfZmlsdCA9IHJldDsKKwkJCXJldCA9IDA7CisJCX0KKwl9CisKKwkvKgorCSAqIFdlIGRvbid0IG5lZWQgdG8gYWN0dWFsbHkgInN0YXJ0IHRoZSBsaW5rIiBpdHNlbGYgc2luY2UgdGhlCisJICogZmlybXdhcmUgd2lsbCBkbyB0aGF0IGZvciB1cyB3aGVuIHRoZSBmaXJzdCBWaXJ0dWFsIEludGVyZmFjZQorCSAqIGlzIGVuYWJsZWQgb24gYSBwb3J0LgorCSAqLworCWlmIChyZXQgPT0gMCkKKwkJcmV0ID0gdDR2Zl9lbmFibGVfdmkocGktPmFkYXB0ZXIsIHBpLT52aWlkLCB0cnVlLCB0cnVlKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogTmFtZSB0aGUgTVNJLVggaW50ZXJydXB0cy4KKyAqLworc3RhdGljIHZvaWQgbmFtZV9tc2l4X3ZlY3Moc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IG5hbWVsZW4gPSBzaXplb2YoYWRhcHRlci0+bXNpeF9pbmZvWzBdLmRlc2MpIC0gMTsKKwlpbnQgcGlkeDsKKworCS8qCisJICogRmlybXdhcmUgZXZlbnRzLgorCSAqLworCXNucHJpbnRmKGFkYXB0ZXItPm1zaXhfaW5mb1tNU0lYX0ZXXS5kZXNjLCBuYW1lbGVuLAorCQkgIiVzLUZXZXZlbnRxIiwgYWRhcHRlci0+bmFtZSk7CisJYWRhcHRlci0+bXNpeF9pbmZvW01TSVhfRlddLmRlc2NbbmFtZWxlbl0gPSAwOworCisJLyoKKwkgKiBFdGhlcm5ldCBxdWV1ZXMuCisJICovCisJZm9yX2VhY2hfcG9ydChhZGFwdGVyLCBwaWR4KSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhZGFwdGVyLT5wb3J0W3BpZHhdOworCQljb25zdCBzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CisJCWludCBxcywgbXNpOworCisJCWZvciAocXMgPSAwLCBtc2kgPSBNU0lYX05JUUZMSU5UOworCQkgICAgIHFzIDwgcGktPm5xc2V0czsKKwkJICAgICBxcysrLCBtc2krKykgeworCQkJc25wcmludGYoYWRhcHRlci0+bXNpeF9pbmZvW21zaV0uZGVzYywgbmFtZWxlbiwKKwkJCQkgIiVzLSVkIiwgZGV2LT5uYW1lLCBxcyk7CisJCQlhZGFwdGVyLT5tc2l4X2luZm9bbXNpXS5kZXNjW25hbWVsZW5dID0gMDsKKwkJfQorCX0KK30KKworLyoKKyAqIFJlcXVlc3QgYWxsIG9mIG91ciBNU0ktWCByZXNvdXJjZXMuCisgKi8KK3N0YXRpYyBpbnQgcmVxdWVzdF9tc2l4X3F1ZXVlX2lycXMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNnZSAqcyA9ICZhZGFwdGVyLT5zZ2U7CisJaW50IHJ4cSwgbXNpLCBlcnI7CisKKwkvKgorCSAqIEZpcm13YXJlIGV2ZW50cy4KKwkgKi8KKwllcnIgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5tc2l4X2luZm9bTVNJWF9GV10udmVjLCB0NHZmX3NnZV9pbnRyX21zaXgsCisJCQkgIDAsIGFkYXB0ZXItPm1zaXhfaW5mb1tNU0lYX0ZXXS5kZXNjLCAmcy0+ZndfZXZ0cSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qCisJICogRXRoZXJuZXQgcXVldWVzLgorCSAqLworCW1zaSA9IE1TSVhfTklRRkxJTlQ7CisJZm9yX2VhY2hfZXRocnhxKHMsIHJ4cSkgeworCQllcnIgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5tc2l4X2luZm9bbXNpXS52ZWMsCisJCQkJICB0NHZmX3NnZV9pbnRyX21zaXgsIDAsCisJCQkJICBhZGFwdGVyLT5tc2l4X2luZm9bbXNpXS5kZXNjLAorCQkJCSAgJnMtPmV0aHJ4cVtyeHFdLnJzcHEpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfZnJlZV9pcnFzOworCQltc2krKzsKKwl9CisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2lycXM6CisJd2hpbGUgKC0tcnhxID49IDApCisJCWZyZWVfaXJxKGFkYXB0ZXItPm1zaXhfaW5mb1stLW1zaV0udmVjLCAmcy0+ZXRocnhxW3J4cV0ucnNwcSk7CisJZnJlZV9pcnEoYWRhcHRlci0+bXNpeF9pbmZvW01TSVhfRlddLnZlYywgJnMtPmZ3X2V2dHEpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBGcmVlIG91ciBNU0ktWCByZXNvdXJjZXMuCisgKi8KK3N0YXRpYyB2b2lkIGZyZWVfbXNpeF9xdWV1ZV9pcnFzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBzZ2UgKnMgPSAmYWRhcHRlci0+c2dlOworCWludCByeHEsIG1zaTsKKworCWZyZWVfaXJxKGFkYXB0ZXItPm1zaXhfaW5mb1tNU0lYX0ZXXS52ZWMsICZzLT5md19ldnRxKTsKKwltc2kgPSBNU0lYX05JUUZMSU5UOworCWZvcl9lYWNoX2V0aHJ4cShzLCByeHEpCisJCWZyZWVfaXJxKGFkYXB0ZXItPm1zaXhfaW5mb1ttc2krK10udmVjLAorCQkJICZzLT5ldGhyeHFbcnhxXS5yc3BxKTsKK30KKworLyoKKyAqIFR1cm4gb24gTkFQSSBhbmQgc3RhcnQgdXAgaW50ZXJydXB0cyBvbiBhIHJlc3BvbnNlIHF1ZXVlLgorICovCitzdGF0aWMgdm9pZCBxZW5hYmxlKHN0cnVjdCBzZ2VfcnNwcSAqcnNwcSkKK3sKKwluYXBpX2VuYWJsZSgmcnNwcS0+bmFwaSk7CisKKwkvKgorCSAqIDAtaW5jcmVtZW50IHRoZSBHb2luZyBUbyBTbGVlcCByZWdpc3RlciB0byBzdGFydCB0aGUgdGltZXIgYW5kCisJICogZW5hYmxlIGludGVycnVwdHMuCisJICovCisJdDRfd3JpdGVfcmVnKHJzcHEtPmFkYXB0ZXIsIFQ0VkZfU0dFX0JBU0VfQUREUiArIFNHRV9WRl9HVFMsCisJCSAgICAgQ0lEWElOQygwKSB8CisJCSAgICAgU0VJTlRBUk0ocnNwcS0+aW50cl9wYXJhbXMpIHwKKwkJICAgICBJTkdSRVNTUUlEKHJzcHEtPmNudHh0X2lkKSk7Cit9CisKKy8qCisgKiBFbmFibGUgTkFQSSBzY2hlZHVsaW5nIGFuZCBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3IgYWxsIFJlY2VpdmUgUXVldWVzLgorICovCitzdGF0aWMgdm9pZCBlbmFibGVfcngoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHJ4cTsKKwlzdHJ1Y3Qgc2dlICpzID0gJmFkYXB0ZXItPnNnZTsKKworCWZvcl9lYWNoX2V0aHJ4cShzLCByeHEpCisJCXFlbmFibGUoJnMtPmV0aHJ4cVtyeHFdLnJzcHEpOworCXFlbmFibGUoJnMtPmZ3X2V2dHEpOworCisJLyoKKwkgKiBUaGUgaW50ZXJydXB0IHF1ZXVlIGRvZXNuJ3QgdXNlIE5BUEkgc28gd2UgZG8gdGhlIDAtaW5jcmVtZW50IG9mCisJICogaXRzIEdvaW5nIFRvIFNsZWVwIHJlZ2lzdGVyIGhlcmUgdG8gZ2V0IGl0IHN0YXJ0ZWQuCisJICovCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgVVNJTkdfTVNJKQorCQl0NF93cml0ZV9yZWcoYWRhcHRlciwgVDRWRl9TR0VfQkFTRV9BRERSICsgU0dFX1ZGX0dUUywKKwkJCSAgICAgQ0lEWElOQygwKSB8CisJCQkgICAgIFNFSU5UQVJNKHMtPmludHJxLmludHJfcGFyYW1zKSB8CisJCQkgICAgIElOR1JFU1NRSUQocy0+aW50cnEuY250eHRfaWQpKTsKKworfQorCisvKgorICogV2FpdCB1bnRpbCBhbGwgTkFQSSBoYW5kbGVycyBhcmUgZGVzY2hlZHVsZWQuCisgKi8KK3N0YXRpYyB2b2lkIHF1aWVzY2Vfcngoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNnZSAqcyA9ICZhZGFwdGVyLT5zZ2U7CisJaW50IHJ4cTsKKworCWZvcl9lYWNoX2V0aHJ4cShzLCByeHEpCisJCW5hcGlfZGlzYWJsZSgmcy0+ZXRocnhxW3J4cV0ucnNwcS5uYXBpKTsKKwluYXBpX2Rpc2FibGUoJnMtPmZ3X2V2dHEubmFwaSk7Cit9CisKKy8qCisgKiBSZXNwb25zZSBxdWV1ZSBoYW5kbGVyIGZvciB0aGUgZmlybXdhcmUgZXZlbnQgcXVldWUuCisgKi8KK3N0YXRpYyBpbnQgZndldnRxX2hhbmRsZXIoc3RydWN0IHNnZV9yc3BxICpyc3BxLCBjb25zdCBfX2JlNjQgKnJzcCwKKwkJCSAgY29uc3Qgc3RydWN0IHBrdF9nbCAqZ2wpCit7CisJLyoKKwkgKiBFeHRyYWN0IHJlc3BvbnNlIG9wY29kZSBhbmQgZ2V0IHBvaW50ZXIgdG8gQ1BMIG1lc3NhZ2UgYm9keS4KKwkgKi8KKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IHJzcHEtPmFkYXB0ZXI7CisJdTggb3Bjb2RlID0gKChjb25zdCBzdHJ1Y3QgcnNzX2hlYWRlciAqKXJzcCktPm9wY29kZTsKKwl2b2lkICpjcGwgPSAodm9pZCAqKShyc3AgKyAxKTsKKworCXN3aXRjaCAob3Bjb2RlKSB7CisJY2FzZSBDUExfRlc2X01TRzogeworCQkvKgorCQkgKiBXZSd2ZSByZWNlaXZlZCBhbiBhc3luY2hyb25vdXMgbWVzc2FnZSBmcm9tIHRoZSBmaXJtd2FyZS4KKwkJICovCisJCWNvbnN0IHN0cnVjdCBjcGxfZnc2X21zZyAqZndfbXNnID0gY3BsOworCQlpZiAoZndfbXNnLT50eXBlID09IEZXNl9UWVBFX0NNRF9SUEwpCisJCQl0NHZmX2hhbmRsZV9md19ycGwoYWRhcHRlciwgZndfbXNnLT5kYXRhKTsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBDUExfU0dFX0VHUl9VUERBVEU6IHsKKwkJLyoKKwkJICogV2UndmUgcmVjZWl2ZWQgYW4gRWdyZXNzIFF1ZXVlIFN0YXR1cyBVcGRhdGUgbWVzc2FnZS4gIFdlCisJCSAqIGdldCB0aGVzZSwgaWYgdGhlIFNHRSBpcyBjb25maWd1cmVkIHRvIHNlbmQgdGhlc2Ugd2hlbiB0aGUKKwkJICogZmlybXdhcmUgcGFzc2VzIGNlcnRhaW4gcG9pbnRzIGluIHByb2Nlc3Npbmcgb3VyIFRYCisJCSAqIEV0aGVybmV0IFF1ZXVlIG9yIGlmIHdlIG1ha2UgYW4gZXhwbGljaXQgcmVxdWVzdCBmb3Igb25lLgorCQkgKiBXZSB1c2UgdGhlc2UgdXBkYXRlcyB0byBkZXRlcm1pbmUgd2hlbiB3ZSBtYXkgbmVlZCB0bworCQkgKiByZXN0YXJ0IGEgVFggRXRoZXJuZXQgUXVldWUgd2hpY2ggd2FzIHN0b3BwZWQgZm9yIGxhY2sgb2YKKwkJICogZnJlZSBUWCBRdWV1ZSBEZXNjcmlwdG9ycyAuLi4KKwkJICovCisJCWNvbnN0IHN0cnVjdCBjcGxfc2dlX2Vncl91cGRhdGUgKnAgPSAodm9pZCAqKWNwbDsKKwkJdW5zaWduZWQgaW50IHFpZCA9IEVHUl9RSUQoYmUzMl90b19jcHUocC0+b3Bjb2RlX3FpZCkpOworCQlzdHJ1Y3Qgc2dlICpzID0gJmFkYXB0ZXItPnNnZTsKKwkJc3RydWN0IHNnZV90eHEgKnRxOworCQlzdHJ1Y3Qgc2dlX2V0aF90eHEgKnR4cTsKKwkJdW5zaWduZWQgaW50IGVxX2lkeDsKKworCQkvKgorCQkgKiBQZXJmb3JtIHNhbml0eSBjaGVja2luZyBvbiB0aGUgUXVldWUgSUQgdG8gbWFrZSBzdXJlIGl0CisJCSAqIHJlYWxseSByZWZlcnMgdG8gb25lIG9mIG91ciBUWCBFdGhlcm5ldCBFZ3Jlc3MgUXVldWVzIHdoaWNoCisJCSAqIGlzIGFjdGl2ZSBhbmQgbWF0Y2hlcyB0aGUgcXVldWUncyBJRC4gIE5vbmUgb2YgdGhlc2UgZXJyb3IKKwkJICogY29uZGl0aW9ucyBzaG91bGQgZXZlciBoYXBwZW4gc28gd2UgbWF5IHdhbnQgdG8gZWl0aGVyIG1ha2UKKwkJICogdGhlbSBmYXRhbCBhbmQvb3IgY29uZGl0aW9uYWxpemVkIHVuZGVyIERFQlVHLgorCQkgKi8KKwkJZXFfaWR4ID0gRVFfSURYKHMsIHFpZCk7CisJCWlmICh1bmxpa2VseShlcV9pZHggPj0gTUFYX0VHUlEpKSB7CisJCQlkZXZfZXJyKGFkYXB0ZXItPnBkZXZfZGV2LAorCQkJCSJFZ3Jlc3MgVXBkYXRlIFFJRCAlZCBvdXQgb2YgcmFuZ2VcbiIsIHFpZCk7CisJCQlicmVhazsKKwkJfQorCQl0cSA9IHMtPmVncl9tYXBbZXFfaWR4XTsKKwkJaWYgKHVubGlrZWx5KHRxID09IE5VTEwpKSB7CisJCQlkZXZfZXJyKGFkYXB0ZXItPnBkZXZfZGV2LAorCQkJCSJFZ3Jlc3MgVXBkYXRlIFFJRCAlZCBUWFE9TlVMTFxuIiwgcWlkKTsKKwkJCWJyZWFrOworCQl9CisJCXR4cSA9IGNvbnRhaW5lcl9vZih0cSwgc3RydWN0IHNnZV9ldGhfdHhxLCBxKTsKKwkJaWYgKHVubGlrZWx5KHRxLT5hYnNfaWQgIT0gcWlkKSkgeworCQkJZGV2X2VycihhZGFwdGVyLT5wZGV2X2RldiwKKwkJCQkiRWdyZXNzIFVwZGF0ZSBRSUQgJWQgcmVmZXJzIHRvIFRYUSAlZFxuIiwKKwkJCQlxaWQsIHRxLT5hYnNfaWQpOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBSZXN0YXJ0IGEgc3RvcHBlZCBUWCBRdWV1ZSB3aGljaCBoYXMgbGVzcyB0aGFuIGhhbGYgb2YgaXRzCisJCSAqIFRYIHJpbmcgaW4gdXNlIC4uLgorCQkgKi8KKwkJdHhxLT5xLnJlc3RhcnRzKys7CisJCW5ldGlmX3R4X3dha2VfcXVldWUodHhxLT50eHEpOworCQlicmVhazsKKwl9CisKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGFkYXB0ZXItPnBkZXZfZGV2LAorCQkJInVuZXhwZWN0ZWQgQ1BMICUjeCBvbiBGVyBldmVudCBxdWV1ZVxuIiwgb3Bjb2RlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEFsbG9jYXRlIFNHRSBUWC9SWCByZXNwb25zZSBxdWV1ZXMuICBEZXRlcm1pbmUgaG93IG1hbnkgc2V0cyBvZiBTR0UgcXVldWVzCisgKiB0byB1c2UgYW5kIGluaXRpYWxpemVzIHRoZW0uICBXZSBzdXBwb3J0IG11bHRpcGxlICJRdWV1ZSBTZXRzIiBwZXIgcG9ydCBpZgorICogd2UgaGF2ZSBNU0ktWCwgb3RoZXJ3aXNlIGp1c3Qgb25lIHF1ZXVlIHNldCBwZXIgcG9ydC4KKyAqLworc3RhdGljIGludCBzZXR1cF9zZ2VfcXVldWVzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBzZ2UgKnMgPSAmYWRhcHRlci0+c2dlOworCWludCBlcnIsIHBpZHgsIG1zaXg7CisKKwkvKgorCSAqIENsZWFyICJRdWV1ZSBTZXQiIEZyZWUgTGlzdCBTdGFydmluZyBhbmQgVFggUXVldWUgTWFwcGluZyBFcnJvcgorCSAqIHN0YXRlLgorCSAqLworCWJpdG1hcF96ZXJvKHMtPnN0YXJ2aW5nX2ZsLCBNQVhfRUdSUSk7CisKKwkvKgorCSAqIElmIHdlJ3JlIHVzaW5nIE1TSSBpbnRlcnJ1cHQgbW9kZSB3ZSBuZWVkIHRvIHNldCB1cCBhICJmb3J3YXJkZWQKKwkgKiBpbnRlcnJ1cHQiIHF1ZXVlIHdoaWNoIHdlJ2xsIHNldCB1cCB3aXRoIG91ciBNU0kgdmVjdG9yLiAgVGhlIHJlc3QKKwkgKiBvZiB0aGUgaW5ncmVzcyBxdWV1ZXMgd2lsbCBiZSBzZXQgdXAgdG8gZm9yd2FyZCB0aGVpciBpbnRlcnJ1cHRzIHRvCisJICogdGhpcyBxdWV1ZSAuLi4gIFRoaXMgbXVzdCBiZSBmaXJzdCBzaW5jZSB0NHZmX3NnZV9hbGxvY19yeHEoKSB1c2VzCisJICogdGhlIGludHJxJ3MgcXVldWUgSUQgYXMgdGhlIGludGVycnVwdCBmb3J3YXJkaW5nIHF1ZXVlIGZvciB0aGUKKwkgKiBzdWJzZXF1ZW50IGNhbGxzIC4uLgorCSAqLworCWlmIChhZGFwdGVyLT5mbGFncyAmIFVTSU5HX01TSSkgeworCQllcnIgPSB0NHZmX3NnZV9hbGxvY19yeHEoYWRhcHRlciwgJnMtPmludHJxLCBmYWxzZSwKKwkJCQkJIGFkYXB0ZXItPnBvcnRbMF0sIDAsIE5VTEwsIE5VTEwpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfZnJlZV9xdWV1ZXM7CisJfQorCisJLyoKKwkgKiBBbGxvY2F0ZSBvdXIgaW5ncmVzcyBxdWV1ZSBmb3IgYXN5bmNocm9ub3VzIGZpcm13YXJlIG1lc3NhZ2VzLgorCSAqLworCWVyciA9IHQ0dmZfc2dlX2FsbG9jX3J4cShhZGFwdGVyLCAmcy0+ZndfZXZ0cSwgdHJ1ZSwgYWRhcHRlci0+cG9ydFswXSwKKwkJCQkgTVNJWF9GVywgTlVMTCwgZndldnRxX2hhbmRsZXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWVfcXVldWVzOworCisJLyoKKwkgKiBBbGxvY2F0ZSBlYWNoICJwb3J0IidzIGluaXRpYWwgUXVldWUgU2V0cy4gIFRoZXNlIGNhbiBiZSBjaGFuZ2VkCisJICogbGF0ZXIgb24gLi4uIHVwIHRvIHRoZSBwb2ludCB3aGVyZSBhbnkgaW50ZXJmYWNlIG9uIHRoZSBhZGFwdGVyIGlzCisJICogYnJvdWdodCB1cCBhdCB3aGljaCBwb2ludCBsb3RzIG9mIHRoaW5ncyBnZXQgbmFpbGVkIGRvd24KKwkgKiBwZXJtYW5lbnRseSAuLi4KKwkgKi8KKwltc2l4ID0gTVNJWF9OSVFGTElOVDsKKwlmb3JfZWFjaF9wb3J0KGFkYXB0ZXIsIHBpZHgpIHsKKwkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFkYXB0ZXItPnBvcnRbcGlkeF07CisJCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkJc3RydWN0IHNnZV9ldGhfcnhxICpyeHEgPSAmcy0+ZXRocnhxW3BpLT5maXJzdF9xc2V0XTsKKwkJc3RydWN0IHNnZV9ldGhfdHhxICp0eHEgPSAmcy0+ZXRodHhxW3BpLT5maXJzdF9xc2V0XTsKKwkJaW50IHFzOworCisJCWZvciAocXMgPSAwOyBxcyA8IHBpLT5ucXNldHM7IHFzKyssIHJ4cSsrLCB0eHErKykgeworCQkJZXJyID0gdDR2Zl9zZ2VfYWxsb2NfcnhxKGFkYXB0ZXIsICZyeHEtPnJzcHEsIGZhbHNlLAorCQkJCQkJIGRldiwgbXNpeCsrLAorCQkJCQkJICZyeHEtPmZsLCB0NHZmX2V0aHJ4X2hhbmRsZXIpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGVycl9mcmVlX3F1ZXVlczsKKworCQkJZXJyID0gdDR2Zl9zZ2VfYWxsb2NfZXRoX3R4cShhZGFwdGVyLCB0eHEsIGRldiwKKwkJCQkJICAgICBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgcXMpLAorCQkJCQkgICAgIHMtPmZ3X2V2dHEuY250eHRfaWQpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGVycl9mcmVlX3F1ZXVlczsKKworCQkJcnhxLT5yc3BxLmlkeCA9IHFzOworCQkJbWVtc2V0KCZyeHEtPnN0YXRzLCAwLCBzaXplb2YocnhxLT5zdGF0cykpOworCQl9CisJfQorCisJLyoKKwkgKiBDcmVhdGUgdGhlIHJldmVyc2UgbWFwcGluZ3MgZm9yIHRoZSBxdWV1ZXMuCisJICovCisJcy0+ZWdyX2Jhc2UgPSBzLT5ldGh0eHFbMF0ucS5hYnNfaWQgLSBzLT5ldGh0eHFbMF0ucS5jbnR4dF9pZDsKKwlzLT5pbmdyX2Jhc2UgPSBzLT5ldGhyeHFbMF0ucnNwcS5hYnNfaWQgLSBzLT5ldGhyeHFbMF0ucnNwcS5jbnR4dF9pZDsKKwlJUV9NQVAocywgcy0+ZndfZXZ0cS5hYnNfaWQpID0gJnMtPmZ3X2V2dHE7CisJZm9yX2VhY2hfcG9ydChhZGFwdGVyLCBwaWR4KSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhZGFwdGVyLT5wb3J0W3BpZHhdOworCQlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CisJCXN0cnVjdCBzZ2VfZXRoX3J4cSAqcnhxID0gJnMtPmV0aHJ4cVtwaS0+Zmlyc3RfcXNldF07CisJCXN0cnVjdCBzZ2VfZXRoX3R4cSAqdHhxID0gJnMtPmV0aHR4cVtwaS0+Zmlyc3RfcXNldF07CisJCWludCBxczsKKworCQlmb3IgKHFzID0gMDsgcXMgPCBwaS0+bnFzZXRzOyBxcysrLCByeHErKywgdHhxKyspIHsKKwkJCUlRX01BUChzLCByeHEtPnJzcHEuYWJzX2lkKSA9ICZyeHEtPnJzcHE7CisJCQlFUV9NQVAocywgdHhxLT5xLmFic19pZCkgPSAmdHhxLT5xOworCisJCQkvKgorCQkJICogVGhlIEZXX0lRX0NNRCBkb2Vzbid0IHJldHVybiB0aGUgQWJzb2x1dGUgUXVldWUgSURzCisJCQkgKiBmb3IgRnJlZSBMaXN0cyBidXQgc2luY2UgYWxsIG9mIHRoZSBFZ3Jlc3MgUXVldWVzCisJCQkgKiAoaW5jbHVkaW5nIEZyZWUgTGlzdHMpIGhhdmUgUmVsYXRpdmUgUXVldWUgSURzCisJCQkgKiB3aGljaCBhcmUgY29tcHV0ZWQgYXMgQWJzb2x1dGUgLSBCYXNlIFF1ZXVlIElELCB3ZQorCQkJICogY2FuIHN5bnRoZXNpemUgdGhlIEFic29sdXRlIFF1ZXVlIElEcyBmb3IgdGhlIEZyZWUKKwkJCSAqIExpc3RzLiAgVGhpcyBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyB3aGVuCisJCQkgKiB3ZSB3YW50IHRvIGR1bXAgUXVldWUgQ29udGV4dHMgdmlhIHRoZSBQRiBEcml2ZXIuCisJCQkgKi8KKwkJCXJ4cS0+ZmwuYWJzX2lkID0gcnhxLT5mbC5jbnR4dF9pZCArIHMtPmVncl9iYXNlOworCQkJRVFfTUFQKHMsIHJ4cS0+ZmwuYWJzX2lkKSA9ICZyeHEtPmZsOworCQl9CisJfQorCXJldHVybiAwOworCitlcnJfZnJlZV9xdWV1ZXM6CisJdDR2Zl9mcmVlX3NnZV9yZXNvdXJjZXMoYWRhcHRlcik7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFNldCB1cCBSZWNlaXZlIFNpZGUgU2NhbGluZyAoUlNTKSB0byBkaXN0cmlidXRlIHBhY2tldHMgdG8gbXVsdGlwbGUgcmVjZWl2ZQorICogcXVldWVzLiAgV2UgY29uZmlndXJlIHRoZSBSU1MgQ1BVIGxvb2t1cCB0YWJsZSB0byBkaXN0cmlidXRlIHRvIHRoZSBudW1iZXIKKyAqIG9mIEhXIHJlY2VpdmUgcXVldWVzLCBhbmQgdGhlIHJlc3BvbnNlIHF1ZXVlIGxvb2t1cCB0YWJsZSB0byBuYXJyb3cgdGhhdAorICogZG93biB0byB0aGUgcmVzcG9uc2UgcXVldWVzIGFjdHVhbGx5IGNvbmZpZ3VyZWQgZm9yIGVhY2ggInBvcnQiIChWaXJ0dWFsCisgKiBJbnRlcmZhY2UpLiAgV2UgYWx3YXlzIGNvbmZpZ3VyZSB0aGUgUlNTIG1hcHBpbmcgZm9yIGFsbCBwb3J0cyBzaW5jZSB0aGUKKyAqIG1hcHBpbmcgdGFibGUgaGFzIHBsZW50eSBvZiBlbnRyaWVzLgorICovCitzdGF0aWMgaW50IHNldHVwX3JzcyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgcGlkeDsKKworCWZvcl9lYWNoX3BvcnQoYWRhcHRlciwgcGlkeCkgeworCQlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IGFkYXAycGluZm8oYWRhcHRlciwgcGlkeCk7CisJCXN0cnVjdCBzZ2VfZXRoX3J4cSAqcnhxID0gJmFkYXB0ZXItPnNnZS5ldGhyeHFbcGktPmZpcnN0X3FzZXRdOworCQl1MTYgcnNzW01BWF9QT1JUX1FTRVRTXTsKKwkJaW50IHFzLCBlcnI7CisKKwkJZm9yIChxcyA9IDA7IHFzIDwgcGktPm5xc2V0czsgcXMrKykKKwkJCXJzc1txc10gPSByeHFbcXNdLnJzcHEuYWJzX2lkOworCisJCWVyciA9IHQ0dmZfY29uZmlnX3Jzc19yYW5nZShhZGFwdGVyLCBwaS0+dmlpZCwKKwkJCQkJICAgIDAsIHBpLT5yc3Nfc2l6ZSwgcnNzLCBwaS0+bnFzZXRzKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJLyoKKwkJICogUGVyZm9ybSBHbG9iYWwgUlNTIE1vZGUtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCisJCSAqLworCQlzd2l0Y2ggKGFkYXB0ZXItPnBhcmFtcy5yc3MubW9kZSkgeworCQljYXNlIEZXX1JTU19HTEJfQ09ORklHX0NNRF9NT0RFX0JBU0lDVklSVFVBTDoKKwkJCS8qCisJCQkgKiBJZiBUdW5uZWwgQWxsIExvb2t1cCBpc24ndCBzcGVjaWZpZWQgaW4gdGhlIGdsb2JhbAorCQkJICogUlNTIENvbmZpZ3VyYXRpb24sIHRoZW4gd2UgbmVlZCB0byBzcGVjaWZ5IGEKKwkJCSAqIGRlZmF1bHQgSW5ncmVzcyBRdWV1ZSBmb3IgYW55IGluZ3Jlc3MgcGFja2V0cyB3aGljaAorCQkJICogYXJlbid0IGhhc2hlZC4gIFdlJ2xsIHVzZSBvdXIgZmlyc3QgaW5ncmVzcyBxdWV1ZQorCQkJICogLi4uCisJCQkgKi8KKwkJCWlmICghYWRhcHRlci0+cGFyYW1zLnJzcy51LmJhc2ljdmlydHVhbC50bmxhbGxsb29rdXApIHsKKwkJCQl1bmlvbiByc3NfdmlfY29uZmlnIGNvbmZpZzsKKwkJCQllcnIgPSB0NHZmX3JlYWRfcnNzX3ZpX2NvbmZpZyhhZGFwdGVyLAorCQkJCQkJCSAgICAgIHBpLT52aWlkLAorCQkJCQkJCSAgICAgICZjb25maWcpOworCQkJCWlmIChlcnIpCisJCQkJCXJldHVybiBlcnI7CisJCQkJY29uZmlnLmJhc2ljdmlydHVhbC5kZWZhdWx0cSA9CisJCQkJCXJ4cVswXS5yc3BxLmFic19pZDsKKwkJCQllcnIgPSB0NHZmX3dyaXRlX3Jzc192aV9jb25maWcoYWRhcHRlciwKKwkJCQkJCQkgICAgICAgcGktPnZpaWQsCisJCQkJCQkJICAgICAgICZjb25maWcpOworCQkJCWlmIChlcnIpCisJCQkJCXJldHVybiBlcnI7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKgorICogQnJpbmcgdGhlIGFkYXB0ZXIgdXAuICBDYWxsZWQgd2hlbmV2ZXIgd2UgZ28gZnJvbSBubyAicG9ydHMiIG9wZW4gdG8gaGF2aW5nCisgKiBvbmUgb3Blbi4gIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgdGhlIGFjdGlvbnMgbmVjZXNzYXJ5IHRvIG1ha2UgYW4gYWRhcHRlcgorICogb3BlcmF0aW9uYWwsIHN1Y2ggYXMgY29tcGxldGluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgSFcgbW9kdWxlcywgYW5kCisgKiBlbmFibGluZyBpbnRlcnJ1cHRzLiAgTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgcnRubCBsb2NrIGhlbGQuICAoTm90ZSB0aGF0CisgKiB0aGlzIGlzIGNhbGxlZCAiY3hnYl91cCIgaW4gdGhlIFBGIERyaXZlci4pCisgKi8KK3N0YXRpYyBpbnQgYWRhcHRlcl91cChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgZXJyOworCisJLyoKKwkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIGJlZW4gY2FsbGVkLCBwZXJmb3JtIGJhc2ljCisJICogYWRhcHRlciBzZXR1cC4gIE9uY2Ugd2UndmUgZG9uZSB0aGlzLCBtYW55IG9mIG91ciBhZGFwdGVyCisJICogcGFyYW1ldGVycyBjYW4gbm8gbG9uZ2VyIGJlIGNoYW5nZWQgLi4uCisJICovCisJaWYgKChhZGFwdGVyLT5mbGFncyAmIEZVTExfSU5JVF9ET05FKSA9PSAwKSB7CisJCWVyciA9IHNldHVwX3NnZV9xdWV1ZXMoYWRhcHRlcik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQllcnIgPSBzZXR1cF9yc3MoYWRhcHRlcik7CisJCWlmIChlcnIpIHsKKwkJCXQ0dmZfZnJlZV9zZ2VfcmVzb3VyY2VzKGFkYXB0ZXIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCWlmIChhZGFwdGVyLT5mbGFncyAmIFVTSU5HX01TSVgpCisJCQluYW1lX21zaXhfdmVjcyhhZGFwdGVyKTsKKwkJYWRhcHRlci0+ZmxhZ3MgfD0gRlVMTF9JTklUX0RPTkU7CisJfQorCisJLyoKKwkgKiBBY3F1aXJlIG91ciBpbnRlcnJ1cHQgcmVzb3VyY2VzLiAgV2Ugb25seSBzdXBwb3J0IE1TSS1YIGFuZCBNU0kuCisJICovCisJQlVHX09OKChhZGFwdGVyLT5mbGFncyAmIChVU0lOR19NU0lYfFVTSU5HX01TSSkpID09IDApOworCWlmIChhZGFwdGVyLT5mbGFncyAmIFVTSU5HX01TSVgpCisJCWVyciA9IHJlcXVlc3RfbXNpeF9xdWV1ZV9pcnFzKGFkYXB0ZXIpOworCWVsc2UKKwkJZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+cGRldi0+aXJxLAorCQkJCSAgdDR2Zl9pbnRyX2hhbmRsZXIoYWRhcHRlciksIDAsCisJCQkJICBhZGFwdGVyLT5uYW1lLCBhZGFwdGVyKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoYWRhcHRlci0+cGRldl9kZXYsICJyZXF1ZXN0X2lycSBmYWlsZWQsIGVyciAlZFxuIiwKKwkJCWVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyoKKwkgKiBFbmFibGUgTkFQSSBpbmdyZXNzIHByb2Nlc3NpbmcgYW5kIHJldHVybiBzdWNjZXNzLgorCSAqLworCWVuYWJsZV9yeChhZGFwdGVyKTsKKwl0NHZmX3NnZV9zdGFydChhZGFwdGVyKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEJyaW5nIHRoZSBhZGFwdGVyIGRvd24uICBDYWxsZWQgd2hlbmV2ZXIgdGhlIGxhc3QgInBvcnQiIChWaXJ0dWFsCisgKiBJbnRlcmZhY2UpIGNsb3NlZC4gIChOb3RlIHRoYXQgdGhpcyByb3V0aW5lIGlzIGNhbGxlZCAiY3hnYl9kb3duIiBpbiB0aGUgUEYKKyAqIERyaXZlci4pCisgKi8KK3N0YXRpYyB2b2lkIGFkYXB0ZXJfZG93bihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwkvKgorCSAqIEZyZWUgaW50ZXJydXB0IHJlc291cmNlcy4KKwkgKi8KKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBVU0lOR19NU0lYKQorCQlmcmVlX21zaXhfcXVldWVfaXJxcyhhZGFwdGVyKTsKKwllbHNlCisJCWZyZWVfaXJxKGFkYXB0ZXItPnBkZXYtPmlycSwgYWRhcHRlcik7CisKKwkvKgorCSAqIFdhaXQgZm9yIE5BUEkgaGFuZGxlcnMgdG8gZmluaXNoLgorCSAqLworCXF1aWVzY2VfcngoYWRhcHRlcik7Cit9CisKKy8qCisgKiBTdGFydCB1cCBhIG5ldCBkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQgY3hnYjR2Zl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBwaS0+YWRhcHRlcjsKKworCS8qCisJICogSWYgdGhpcyBpcyB0aGUgZmlyc3QgaW50ZXJmYWNlIHRoYXQgd2UncmUgb3BlbmluZyBvbiB0aGUgImFkYXB0ZXIiLAorCSAqIGJyaW5nIHRoZSAiYWRhcHRlciIgdXAgbm93LgorCSAqLworCWlmIChhZGFwdGVyLT5vcGVuX2RldmljZV9tYXAgPT0gMCkgeworCQllcnIgPSBhZGFwdGVyX3VwKGFkYXB0ZXIpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwkvKgorCSAqIE5vdGUgdGhhdCB0aGlzIGludGVyZmFjZSBpcyB1cCBhbmQgc3RhcnQgZXZlcnl0aGluZyB1cCAuLi4KKwkgKi8KKwlkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcyA9IHBpLT5ucXNldHM7CisJc2V0X2JpdChwaS0+cG9ydF9pZCwgJmFkYXB0ZXItPm9wZW5fZGV2aWNlX21hcCk7CisJbGlua19zdGFydChkZXYpOworCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNodXQgZG93biBhIG5ldCBkZXZpY2UuICBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkICJjeGdiX2Nsb3NlIiBpbiB0aGUgUEYKKyAqIERyaXZlciAuLi4KKyAqLworc3RhdGljIGludCBjeGdiNHZmX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IHBpLT5hZGFwdGVyOworCisJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKGRldik7CisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwlyZXQgPSB0NHZmX2VuYWJsZV92aShhZGFwdGVyLCBwaS0+dmlpZCwgZmFsc2UsIGZhbHNlKTsKKwlwaS0+bGlua19jZmcubGlua19vayA9IDA7CisKKwljbGVhcl9iaXQocGktPnBvcnRfaWQsICZhZGFwdGVyLT5vcGVuX2RldmljZV9tYXApOworCWlmIChhZGFwdGVyLT5vcGVuX2RldmljZV9tYXAgPT0gMCkKKwkJYWRhcHRlcl9kb3duKGFkYXB0ZXIpOworCXJldHVybiAwOworfQorCisvKgorICogVHJhbnNsYXRlIG91ciBiYXNpYyBzdGF0aXN0aWNzIGludG8gdGhlIHN0YW5kYXJkICJpZmNvbmZpZyIgc3RhdGlzdGljcy4KKyAqLworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpjeGdiNHZmX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0NHZmX3BvcnRfc3RhdHMgc3RhdHM7CisJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXYycGluZm8oZGV2KTsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IHBpLT5hZGFwdGVyOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpucyA9ICZkZXYtPnN0YXRzOworCWludCBlcnI7CisKKwlzcGluX2xvY2soJmFkYXB0ZXItPnN0YXRzX2xvY2spOworCWVyciA9IHQ0dmZfZ2V0X3BvcnRfc3RhdHMoYWRhcHRlciwgcGktPnBpZHgsICZzdGF0cyk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPnN0YXRzX2xvY2spOworCisJbWVtc2V0KG5zLCAwLCBzaXplb2YoKm5zKSk7CisJaWYgKGVycikKKwkJcmV0dXJuIG5zOworCisJbnMtPnR4X2J5dGVzID0gKHN0YXRzLnR4X2JjYXN0X2J5dGVzICsgc3RhdHMudHhfbWNhc3RfYnl0ZXMgKworCQkJc3RhdHMudHhfdWNhc3RfYnl0ZXMgKyBzdGF0cy50eF9vZmZsb2FkX2J5dGVzKTsKKwlucy0+dHhfcGFja2V0cyA9IChzdGF0cy50eF9iY2FzdF9mcmFtZXMgKyBzdGF0cy50eF9tY2FzdF9mcmFtZXMgKworCQkJICBzdGF0cy50eF91Y2FzdF9mcmFtZXMgKyBzdGF0cy50eF9vZmZsb2FkX2ZyYW1lcyk7CisJbnMtPnJ4X2J5dGVzID0gKHN0YXRzLnJ4X2JjYXN0X2J5dGVzICsgc3RhdHMucnhfbWNhc3RfYnl0ZXMgKworCQkJc3RhdHMucnhfdWNhc3RfYnl0ZXMpOworCW5zLT5yeF9wYWNrZXRzID0gKHN0YXRzLnJ4X2JjYXN0X2ZyYW1lcyArIHN0YXRzLnJ4X21jYXN0X2ZyYW1lcyArCisJCQkgIHN0YXRzLnJ4X3VjYXN0X2ZyYW1lcyk7CisJbnMtPm11bHRpY2FzdCA9IHN0YXRzLnJ4X21jYXN0X2ZyYW1lczsKKwlucy0+dHhfZXJyb3JzID0gc3RhdHMudHhfZHJvcF9mcmFtZXM7CisJbnMtPnJ4X2Vycm9ycyA9IHN0YXRzLnJ4X2Vycl9mcmFtZXM7CisKKwlyZXR1cm4gbnM7Cit9CisKKy8qCisgKiBDb2xsZWN0IHVwIHRvIG1heGFkZHJzIHdvcnRoIG9mIGEgbmV0ZGV2aWNlJ3MgdW5pY2FzdCBhZGRyZXNzZXMgaW50byBhbgorICogYXJyYXkgb2YgYWRkcnNzIHBvaW50ZXJzIGFuZCByZXR1cm4gdGhlIG51bWJlciBjb2xsZWN0ZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNvbGxlY3RfbmV0ZGV2X3VjX2xpc3RfYWRkcnMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIGNvbnN0IHU4ICoqYWRkciwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBtYXhhZGRycykKK3sKKwl1bnNpZ25lZCBpbnQgbmFkZHIgPSAwOworCWNvbnN0IHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7CisKKwlmb3JfZWFjaF9kZXZfYWRkcihkZXYsIGhhKSB7CisJCWFkZHJbbmFkZHIrK10gPSBoYS0+YWRkcjsKKwkJaWYgKG5hZGRyID49IG1heGFkZHJzKQorCQkJYnJlYWs7CisJfQorCXJldHVybiBuYWRkcjsKK30KKworLyoKKyAqIENvbGxlY3QgdXAgdG8gbWF4YWRkcnMgd29ydGggb2YgYSBuZXRkZXZpY2UncyBtdWx0aWNhc3QgYWRkcmVzc2VzIGludG8gYW4KKyAqIGFycmF5IG9mIGFkZHJzcyBwb2ludGVycyBhbmQgcmV0dXJuIHRoZSBudW1iZXIgY29sbGVjdGVkLgorICovCitzdGF0aWMgaW5saW5lIGludCBjb2xsZWN0X25ldGRldl9tY19saXN0X2FkZHJzKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgICBjb25zdCB1OCAqKmFkZHIsCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbWF4YWRkcnMpCit7CisJdW5zaWduZWQgaW50IG5hZGRyID0gMDsKKwljb25zdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOworCisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikgeworCQlhZGRyW25hZGRyKytdID0gaGEtPmFkZHI7CisJCWlmIChuYWRkciA+PSBtYXhhZGRycykKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gbmFkZHI7Cit9CisKKy8qCisgKiBDb25maWd1cmUgdGhlIGV4YWN0IGFuZCBoYXNoIGFkZHJlc3MgZmlsdGVycyB0byBoYW5kbGUgYSBwb3J0J3MgbXVsdGljYXN0CisgKiBhbmQgc2Vjb25kYXJ5IHVuaWNhc3QgTUFDIGFkZHJlc3Nlcy4KKyAqLworc3RhdGljIGludCBzZXRfYWRkcl9maWx0ZXJzKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2xlZXApCit7CisJdTY0IG1oYXNoID0gMDsKKwl1NjQgdWhhc2ggPSAwOworCWJvb2wgZnJlZSA9IHRydWU7CisJdTE2IGZpbHRfaWR4WzddOworCWNvbnN0IHU4ICphZGRyWzddOworCWludCByZXQsIG5hZGRyID0gMDsKKwljb25zdCBzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CisKKwkvKiBmaXJzdCBkbyB0aGUgc2Vjb25kYXJ5IHVuaWNhc3QgYWRkcmVzc2VzICovCisJbmFkZHIgPSBjb2xsZWN0X25ldGRldl91Y19saXN0X2FkZHJzKGRldiwgYWRkciwgQVJSQVlfU0laRShhZGRyKSk7CisJaWYgKG5hZGRyID4gMCkgeworCQlyZXQgPSB0NHZmX2FsbG9jX21hY19maWx0KHBpLT5hZGFwdGVyLCBwaS0+dmlpZCwgZnJlZSwKKwkJCQkJICBuYWRkciwgYWRkciwgZmlsdF9pZHgsICZ1aGFzaCwgc2xlZXApOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJZnJlZSA9IGZhbHNlOworCX0KKworCS8qIG5leHQgc2V0IHVwIHRoZSBtdWx0aWNhc3QgYWRkcmVzc2VzICovCisJbmFkZHIgPSBjb2xsZWN0X25ldGRldl9tY19saXN0X2FkZHJzKGRldiwgYWRkciwgQVJSQVlfU0laRShhZGRyKSk7CisJaWYgKG5hZGRyID4gMCkgeworCQlyZXQgPSB0NHZmX2FsbG9jX21hY19maWx0KHBpLT5hZGFwdGVyLCBwaS0+dmlpZCwgZnJlZSwKKwkJCQkJICBuYWRkciwgYWRkciwgZmlsdF9pZHgsICZtaGFzaCwgc2xlZXApOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHQ0dmZfc2V0X2FkZHJfaGFzaChwaS0+YWRhcHRlciwgcGktPnZpaWQsIHVoYXNoICE9IDAsCisJCQkJICB1aGFzaCB8IG1oYXNoLCBzbGVlcCk7Cit9CisKKy8qCisgKiBTZXQgUlggcHJvcGVydGllcyBvZiBhIHBvcnQsIHN1Y2ggYXMgcHJvbWlzY3J1aXR5LCBhZGRyZXNzIGZpbHRlcnMsIGFuZCBNVFUuCisgKiBJZiBAbXR1IGlzIC0xIGl0IGlzIGxlZnQgdW5jaGFuZ2VkLgorICovCitzdGF0aWMgaW50IHNldF9yeG1vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG10dSwgYm9vbCBzbGVlcF9vaykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldCA9IHNldF9hZGRyX2ZpbHRlcnMoZGV2LCBzbGVlcF9vayk7CisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSB0NHZmX3NldF9yeG1vZGUocGktPmFkYXB0ZXIsIHBpLT52aWlkLCAtMSwKKwkJCQkgICAgICAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSAhPSAwLAorCQkJCSAgICAgIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSAhPSAwLAorCQkJCSAgICAgIDEsIC0xLCBzbGVlcF9vayk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFNldCB0aGUgY3VycmVudCByZWNlaXZlIG1vZGVzIG9uIHRoZSBkZXZpY2UuCisgKi8KK3N0YXRpYyB2b2lkIGN4Z2I0dmZfc2V0X3J4bW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCS8qIHVuZm9ydHVuYXRlbHkgd2UgY2FuJ3QgcmV0dXJuIGVycm9ycyB0byB0aGUgc3RhY2sgKi8KKwlzZXRfcnhtb2RlKGRldiwgLTEsIGZhbHNlKTsKK30KKworLyoKKyAqIEZpbmQgdGhlIGVudHJ5IGluIHRoZSBpbnRlcnJ1cHQgaG9sZG9mZiB0aW1lciB2YWx1ZSBhcnJheSB3aGljaCBjb21lcworICogY2xvc2VzdCB0byB0aGUgc3BlY2lmaWVkIGludGVycnVwdCBob2xkb2ZmIHZhbHVlLgorICovCitzdGF0aWMgaW50IGNsb3Nlc3RfdGltZXIoY29uc3Qgc3RydWN0IHNnZSAqcywgaW50IHVzKQoreworCWludCBpLCB0aW1lcl9pZHggPSAwLCBtaW5fZGVsdGEgPSBJTlRfTUFYOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocy0+dGltZXJfdmFsKTsgaSsrKSB7CisJCWludCBkZWx0YSA9IHVzIC0gcy0+dGltZXJfdmFsW2ldOworCQlpZiAoZGVsdGEgPCAwKQorCQkJZGVsdGEgPSAtZGVsdGE7CisJCWlmIChkZWx0YSA8IG1pbl9kZWx0YSkgeworCQkJbWluX2RlbHRhID0gZGVsdGE7CisJCQl0aW1lcl9pZHggPSBpOworCQl9CisJfQorCXJldHVybiB0aW1lcl9pZHg7Cit9CisKK3N0YXRpYyBpbnQgY2xvc2VzdF90aHJlcyhjb25zdCBzdHJ1Y3Qgc2dlICpzLCBpbnQgdGhyZXMpCit7CisJaW50IGksIGRlbHRhLCBwa3RjbnRfaWR4ID0gMCwgbWluX2RlbHRhID0gSU5UX01BWDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHMtPmNvdW50ZXJfdmFsKTsgaSsrKSB7CisJCWRlbHRhID0gdGhyZXMgLSBzLT5jb3VudGVyX3ZhbFtpXTsKKwkJaWYgKGRlbHRhIDwgMCkKKwkJCWRlbHRhID0gLWRlbHRhOworCQlpZiAoZGVsdGEgPCBtaW5fZGVsdGEpIHsKKwkJCW1pbl9kZWx0YSA9IGRlbHRhOworCQkJcGt0Y250X2lkeCA9IGk7CisJCX0KKwl9CisJcmV0dXJuIHBrdGNudF9pZHg7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBxdWV1ZSdzIGludGVycnVwdCBob2xkLW9mZiB0aW1lIGluIHVzLiAgMCBtZWFucyBubyB0aW1lci4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBxdGltZXJfdmFsKGNvbnN0IHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzZ2VfcnNwcSAqcnNwcSkKK3sKKwl1bnNpZ25lZCBpbnQgdGltZXJfaWR4ID0gUUlOVFJfVElNRVJfSURYX0dFVChyc3BxLT5pbnRyX3BhcmFtcyk7CisKKwlyZXR1cm4gdGltZXJfaWR4IDwgU0dFX05USU1FUlMKKwkJPyBhZGFwdGVyLT5zZ2UudGltZXJfdmFsW3RpbWVyX2lkeF0KKwkJOiAwOworfQorCisvKioKKyAqCXNldF9yeHFfaW50cl9wYXJhbXMgLSBzZXQgYSBxdWV1ZSdzIGludGVycnVwdCBob2xkb2ZmIHBhcmFtZXRlcnMKKyAqCUBhZGFwdGVyOiB0aGUgYWRhcHRlcgorICoJQHJzcHE6IHRoZSBSWCByZXNwb25zZSBxdWV1ZQorICoJQHVzOiB0aGUgaG9sZC1vZmYgdGltZSBpbiB1cywgb3IgMCB0byBkaXNhYmxlIHRpbWVyCisgKglAY250OiB0aGUgaG9sZC1vZmYgcGFja2V0IGNvdW50LCBvciAwIHRvIGRpc2FibGUgY291bnRlcgorICoKKyAqCVNldHMgYW4gUlggcmVzcG9uc2UgcXVldWUncyBpbnRlcnJ1cHQgaG9sZC1vZmYgdGltZSBhbmQgcGFja2V0IGNvdW50LgorICoJQXQgbGVhc3Qgb25lIG9mIHRoZSB0d28gbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgdGhlIHF1ZXVlIHRvIGdlbmVyYXRlCisgKglpbnRlcnJ1cHRzLgorICovCitzdGF0aWMgaW50IHNldF9yeHFfaW50cl9wYXJhbXMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBzZ2VfcnNwcSAqcnNwcSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdXMsIHVuc2lnbmVkIGludCBjbnQpCit7CisJdW5zaWduZWQgaW50IHRpbWVyX2lkeDsKKworCS8qCisJICogSWYgYm90aCB0aGUgaW50ZXJydXB0IGhvbGRvZmYgdGltZXIgYW5kIGNvdW50IGFyZSBzcGVjaWZpZWQgYXMKKwkgKiB6ZXJvLCBkZWZhdWx0IHRvIGEgaG9sZG9mZiBjb3VudCBvZiAxIC4uLgorCSAqLworCWlmICgodXMgfCBjbnQpID09IDApCisJCWNudCA9IDE7CisKKwkvKgorCSAqIElmIGFuIGludGVycnVwdCBob2xkb2ZmIGNvdW50IGhhcyBiZWVuIHNwZWNpZmllZCwgdGhlbiBmaW5kIHRoZQorCSAqIGNsb3Nlc3QgY29uZmlndXJlZCBob2xkb2ZmIGNvdW50IGFuZCB1c2UgdGhhdC4gIElmIHRoZSByZXNwb25zZQorCSAqIHF1ZXVlIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZCwgdGhlbiB1cGRhdGUgaXRzIHF1ZXVlIGNvbnRleHQKKwkgKiBwYXJhbWV0ZXJzIC4uLgorCSAqLworCWlmIChjbnQpIHsKKwkJaW50IGVycjsKKwkJdTMyIHYsIHBrdGNudF9pZHg7CisKKwkJcGt0Y250X2lkeCA9IGNsb3Nlc3RfdGhyZXMoJmFkYXB0ZXItPnNnZSwgY250KTsKKwkJaWYgKHJzcHEtPmRlc2MgJiYgcnNwcS0+cGt0Y250X2lkeCAhPSBwa3RjbnRfaWR4KSB7CisJCQl2ID0gRldfUEFSQU1TX01ORU0oRldfUEFSQU1TX01ORU1fRE1BUSkgfAorCQkJICAgIEZXX1BBUkFNU19QQVJBTV9YKAorCQkJCQlGV19QQVJBTVNfUEFSQU1fRE1BUV9JUV9JTlRDTlRUSFJFU0gpIHwKKwkJCSAgICBGV19QQVJBTVNfUEFSQU1fWVoocnNwcS0+Y250eHRfaWQpOworCQkJZXJyID0gdDR2Zl9zZXRfcGFyYW1zKGFkYXB0ZXIsIDEsICZ2LCAmcGt0Y250X2lkeCk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0KKwkJcnNwcS0+cGt0Y250X2lkeCA9IHBrdGNudF9pZHg7CisJfQorCisJLyoKKwkgKiBDb21wdXRlIHRoZSBjbG9zZXN0IGhvbGRvZmYgdGltZXIgaW5kZXggZnJvbSB0aGUgc3VwcGxpZWQgaG9sZG9mZgorCSAqIHRpbWVyIHZhbHVlLgorCSAqLworCXRpbWVyX2lkeCA9ICh1cyA9PSAwCisJCSAgICAgPyBTR0VfVElNRVJfUlNUUlRfQ05UUgorCQkgICAgIDogY2xvc2VzdF90aW1lcigmYWRhcHRlci0+c2dlLCB1cykpOworCisJLyoKKwkgKiBVcGRhdGUgdGhlIHJlc3BvbnNlIHF1ZXVlJ3MgaW50ZXJydXB0IGNvYWxlc2NpbmcgcGFyYW1ldGVycyBhbmQKKwkgKiByZXR1cm4gc3VjY2Vzcy4KKwkgKi8KKwlyc3BxLT5pbnRyX3BhcmFtcyA9IChRSU5UUl9USU1FUl9JRFgodGltZXJfaWR4KSB8CisJCQkgICAgIChjbnQgPiAwID8gUUlOVFJfQ05UX0VOIDogMCkpOworCXJldHVybiAwOworfQorCisvKgorICogUmV0dXJuIGEgdmVyc2lvbiBudW1iZXIgdG8gaWRlbnRpZnkgdGhlIHR5cGUgb2YgYWRhcHRlci4gIFRoZSBzY2hlbWUgaXM6CisgKiAtIGJpdHMgMC4uOTogY2hpcCB2ZXJzaW9uCisgKiAtIGJpdHMgMTAuLjE1OiBjaGlwIHJldmlzaW9uCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1rX2FkYXBfdmVycyhjb25zdCBzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwkvKgorCSAqIENoaXAgdmVyc2lvbiA0LCByZXZpc2lvbiAweDNmIChjeGdiNHZmKS4KKwkgKi8KKwlyZXR1cm4gNCB8ICgweDNmIDw8IDEwKTsKK30KKworLyoKKyAqIEV4ZWN1dGUgdGhlIHNwZWNpZmllZCBpb2N0bCBjb21tYW5kLgorICovCitzdGF0aWMgaW50IGN4Z2I0dmZfZG9faW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCit7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGNtZCkgeworCSAgICAvKgorCSAgICAgKiBUaGUgVkYgRHJpdmVyIGRvZXNuJ3QgaGF2ZSBhY2Nlc3MgdG8gYW55IG9mIHRoZSBvdGhlcgorCSAgICAgKiBjb21tb24gRXRoZXJuZXQgZGV2aWNlIGlvY3RsKCkncyAobGlrZSByZWFkaW5nL3dyaXRpbmcKKwkgICAgICogUEhZIHJlZ2lzdGVycywgZXRjLgorCSAgICAgKi8KKworCWRlZmF1bHQ6CisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIENoYW5nZSB0aGUgZGV2aWNlJ3MgTVRVLgorICovCitzdGF0aWMgaW50IGN4Z2I0dmZfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCS8qIGFjY29tbW9kYXRlIFNBQ0sgKi8KKwlpZiAobmV3X210dSA8IDgxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IHQ0dmZfc2V0X3J4bW9kZShwaS0+YWRhcHRlciwgcGktPnZpaWQsIG5ld19tdHUsCisJCQkgICAgICAtMSwgLTEsIC0xLCAtMSwgdHJ1ZSk7CisJaWYgKCFyZXQpCisJCWRldi0+bXR1ID0gbmV3X210dTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ2hhbmdlIHRoZSBkZXZpY2VzIE1BQyBhZGRyZXNzLgorICovCitzdGF0aWMgaW50IGN4Z2I0dmZfc2V0X21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKl9hZGRyKQoreworCWludCByZXQ7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gX2FkZHI7CisJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IHQ0dmZfY2hhbmdlX21hYyhwaS0+YWRhcHRlciwgcGktPnZpaWQsIHBpLT54YWN0X2FkZHJfZmlsdCwKKwkJCSAgICAgIGFkZHItPnNhX2RhdGEsIHRydWUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOworCXBpLT54YWN0X2FkZHJfZmlsdCA9IHJldDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybiBhIFRYIFF1ZXVlIG9uIHdoaWNoIHRvIHNlbmQgdGhlIHNwZWNpZmllZCBza2IuCisgKi8KK3N0YXRpYyB1MTYgY3hnYjR2Zl9zZWxlY3RfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwkvKgorCSAqIFhYWCBGb3Igbm93IGp1c3QgdXNlIHRoZSBkZWZhdWx0IGhhc2ggYnV0IHdlIHByb2JhYmx5IHdhbnQgdG8KKwkgKiBYWFggbG9vayBhdCBvdGhlciBwb3NzaWJpbGl0aWVzIC4uLgorCSAqLworCXJldHVybiBza2JfdHhfaGFzaChkZXYsIHNrYik7Cit9CisKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorLyoKKyAqIFBvbGwgYWxsIG9mIG91ciByZWNlaXZlIHF1ZXVlcy4gIFRoaXMgaXMgY2FsbGVkIG91dHNpZGUgb2Ygbm9ybWFsIGludGVycnVwdAorICogY29udGV4dC4KKyAqLworc3RhdGljIHZvaWQgY3hnYjR2Zl9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBwaS0+YWRhcHRlcjsKKworCWlmIChhZGFwdGVyLT5mbGFncyAmIFVTSU5HX01TSVgpIHsKKwkJc3RydWN0IHNnZV9ldGhfcnhxICpyeHE7CisJCWludCBucXNldHM7CisKKwkJcnhxID0gJmFkYXB0ZXItPnNnZS5ldGhyeHFbcGktPmZpcnN0X3FzZXRdOworCQlmb3IgKG5xc2V0cyA9IHBpLT5ucXNldHM7IG5xc2V0czsgbnFzZXRzLS0pIHsKKwkJCXQ0dmZfc2dlX2ludHJfbXNpeCgwLCAmcnhxLT5yc3BxKTsKKwkJCXJ4cSsrOworCQl9CisJfSBlbHNlCisJCXQ0dmZfaW50cl9oYW5kbGVyKGFkYXB0ZXIpKDAsIGFkYXB0ZXIpOworfQorI2VuZGlmCisKKy8qCisgKiBFdGh0b29sIG9wZXJhdGlvbnMuCisgKiA9PT09PT09PT09PT09PT09PT09CisgKgorICogTm90ZSB0aGF0IHdlIGRvbid0IHN1cHBvcnQgYW55IGV0aHRvb2wgb3BlcmF0aW9ucyB3aGljaCBjaGFuZ2UgdGhlIHBoeXNpY2FsCisgKiBzdGF0ZSBvZiB0aGUgcG9ydCB0byB3aGljaCB3ZSdyZSBsaW5rZWQuCisgKi8KKworLyoKKyAqIFJldHVybiBjdXJyZW50IHBvcnQgbGluayBzZXR0aW5ncy4KKyAqLworc3RhdGljIGludCBjeGdiNHZmX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBldGh0b29sX2NtZCAqY21kKQoreworCWNvbnN0IHN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWNtZC0+c3VwcG9ydGVkID0gcGktPmxpbmtfY2ZnLnN1cHBvcnRlZDsKKwljbWQtPmFkdmVydGlzaW5nID0gcGktPmxpbmtfY2ZnLmFkdmVydGlzaW5nOworCWNtZC0+c3BlZWQgPSBuZXRpZl9jYXJyaWVyX29rKGRldikgPyBwaS0+bGlua19jZmcuc3BlZWQgOiAtMTsKKwljbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOworCisJY21kLT5wb3J0ID0gKGNtZC0+c3VwcG9ydGVkICYgU1VQUE9SVEVEX1RQKSA/IFBPUlRfVFAgOiBQT1JUX0ZJQlJFOworCWNtZC0+cGh5X2FkZHJlc3MgPSBwaS0+cG9ydF9pZDsKKwljbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKKwljbWQtPmF1dG9uZWcgPSBwaS0+bGlua19jZmcuYXV0b25lZzsKKwljbWQtPm1heHR4cGt0ID0gMDsKKwljbWQtPm1heHJ4cGt0ID0gMDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybiBvdXIgZHJpdmVyIGluZm9ybWF0aW9uLgorICovCitzdGF0aWMgdm9pZCBjeGdiNHZmX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZHJ2aW5mbykKK3sKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldjJhZGFwKGRldik7CisKKwlzdHJjcHkoZHJ2aW5mby0+ZHJpdmVyLCBLQlVJTERfTU9ETkFNRSk7CisJc3RyY3B5KGRydmluZm8tPnZlcnNpb24sIERSVl9WRVJTSU9OKTsKKwlzdHJjcHkoZHJ2aW5mby0+YnVzX2luZm8sIHBjaV9uYW1lKHRvX3BjaV9kZXYoZGV2LT5kZXYucGFyZW50KSkpOworCXNucHJpbnRmKGRydmluZm8tPmZ3X3ZlcnNpb24sIHNpemVvZihkcnZpbmZvLT5md192ZXJzaW9uKSwKKwkJICIldS4ldS4ldS4ldSwgVFAgJXUuJXUuJXUuJXUiLAorCQkgRldfSERSX0ZXX1ZFUl9NQUpPUl9HRVQoYWRhcHRlci0+cGFyYW1zLmRldi5md3JldiksCisJCSBGV19IRFJfRldfVkVSX01JTk9SX0dFVChhZGFwdGVyLT5wYXJhbXMuZGV2LmZ3cmV2KSwKKwkJIEZXX0hEUl9GV19WRVJfTUlDUk9fR0VUKGFkYXB0ZXItPnBhcmFtcy5kZXYuZndyZXYpLAorCQkgRldfSERSX0ZXX1ZFUl9CVUlMRF9HRVQoYWRhcHRlci0+cGFyYW1zLmRldi5md3JldiksCisJCSBGV19IRFJfRldfVkVSX01BSk9SX0dFVChhZGFwdGVyLT5wYXJhbXMuZGV2LnRwcmV2KSwKKwkJIEZXX0hEUl9GV19WRVJfTUlOT1JfR0VUKGFkYXB0ZXItPnBhcmFtcy5kZXYudHByZXYpLAorCQkgRldfSERSX0ZXX1ZFUl9NSUNST19HRVQoYWRhcHRlci0+cGFyYW1zLmRldi50cHJldiksCisJCSBGV19IRFJfRldfVkVSX0JVSUxEX0dFVChhZGFwdGVyLT5wYXJhbXMuZGV2LnRwcmV2KSk7Cit9CisKKy8qCisgKiBSZXR1cm4gY3VycmVudCBhZGFwdGVyIG1lc3NhZ2UgbGV2ZWwuCisgKi8KK3N0YXRpYyB1MzIgY3hnYjR2Zl9nZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gbmV0ZGV2MmFkYXAoZGV2KS0+bXNnX2VuYWJsZTsKK30KKworLyoKKyAqIFNldCBjdXJyZW50IGFkYXB0ZXIgbWVzc2FnZSBsZXZlbC4KKyAqLworc3RhdGljIHZvaWQgY3hnYjR2Zl9zZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIG1zZ2xldmVsKQoreworCW5ldGRldjJhZGFwKGRldiktPm1zZ19lbmFibGUgPSBtc2dsZXZlbDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgZGV2aWNlJ3MgY3VycmVudCBRdWV1ZSBTZXQgcmluZyBzaXplIHBhcmFtZXRlcnMgYWxvbmcgd2l0aCB0aGUKKyAqIGFsbG93ZWQgbWF4aW11bSB2YWx1ZXMuICBTaW5jZSBldGh0b29sIGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUgY29uY2VwdCBvZgorICogbXVsdGktcXVldWUgZGV2aWNlcywgd2UganVzdCByZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAqIGZpcnN0IFF1ZXVlIFNldC4KKyAqLworc3RhdGljIHZvaWQgY3hnYjR2Zl9nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJwKQoreworCWNvbnN0IHN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwljb25zdCBzdHJ1Y3Qgc2dlICpzID0gJnBpLT5hZGFwdGVyLT5zZ2U7CisKKwlycC0+cnhfbWF4X3BlbmRpbmcgPSBNQVhfUlhfQlVGRkVSUzsKKwlycC0+cnhfbWluaV9tYXhfcGVuZGluZyA9IE1BWF9SU1BRX0VOVFJJRVM7CisJcnAtPnJ4X2p1bWJvX21heF9wZW5kaW5nID0gMDsKKwlycC0+dHhfbWF4X3BlbmRpbmcgPSBNQVhfVFhRX0VOVFJJRVM7CisKKwlycC0+cnhfcGVuZGluZyA9IHMtPmV0aHJ4cVtwaS0+Zmlyc3RfcXNldF0uZmwuc2l6ZSAtIE1JTl9GTF9SRVNJRDsKKwlycC0+cnhfbWluaV9wZW5kaW5nID0gcy0+ZXRocnhxW3BpLT5maXJzdF9xc2V0XS5yc3BxLnNpemU7CisJcnAtPnJ4X2p1bWJvX3BlbmRpbmcgPSAwOworCXJwLT50eF9wZW5kaW5nID0gcy0+ZXRodHhxW3BpLT5maXJzdF9xc2V0XS5xLnNpemU7Cit9CisKKy8qCisgKiBTZXQgdGhlIFF1ZXVlIFNldCByaW5nIHNpemUgcGFyYW1ldGVycyBmb3IgdGhlIGRldmljZS4gIEFnYWluLCBzaW5jZQorICogZXRodG9vbCBkb2Vzbid0IGFsbG93IGZvciB0aGUgY29uY2VwdCBvZiBtdWx0aXBsZSBxdWV1ZXMgcGVyIGRldmljZSwgd2UnbGwKKyAqIGFwcGx5IHRoZXNlIG5ldyB2YWx1ZXMgYWNyb3NzIGFsbCBvZiB0aGUgUXVldWUgU2V0cyBhc3NvY2lhdGVkIHdpdGggdGhlCisgKiBkZXZpY2UgLS0gYWZ0ZXIgdmV0dGluZyB0aGVtIG9mIGNvdXJzZSEKKyAqLworc3RhdGljIGludCBjeGdiNHZmX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICpycCkKK3sKKwljb25zdCBzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBwaS0+YWRhcHRlcjsKKwlzdHJ1Y3Qgc2dlICpzID0gJmFkYXB0ZXItPnNnZTsKKwlpbnQgcXM7CisKKwlpZiAocnAtPnJ4X3BlbmRpbmcgPiBNQVhfUlhfQlVGRkVSUyB8fAorCSAgICBycC0+cnhfanVtYm9fcGVuZGluZyB8fAorCSAgICBycC0+dHhfcGVuZGluZyA+IE1BWF9UWFFfRU5UUklFUyB8fAorCSAgICBycC0+cnhfbWluaV9wZW5kaW5nID4gTUFYX1JTUFFfRU5UUklFUyB8fAorCSAgICBycC0+cnhfbWluaV9wZW5kaW5nIDwgTUlOX1JTUFFfRU5UUklFUyB8fAorCSAgICBycC0+cnhfcGVuZGluZyA8IE1JTl9GTF9FTlRSSUVTIHx8CisJICAgIHJwLT50eF9wZW5kaW5nIDwgTUlOX1RYUV9FTlRSSUVTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhZGFwdGVyLT5mbGFncyAmIEZVTExfSU5JVF9ET05FKQorCQlyZXR1cm4gLUVCVVNZOworCisJZm9yIChxcyA9IHBpLT5maXJzdF9xc2V0OyBxcyA8IHBpLT5maXJzdF9xc2V0ICsgcGktPm5xc2V0czsgcXMrKykgeworCQlzLT5ldGhyeHFbcXNdLmZsLnNpemUgPSBycC0+cnhfcGVuZGluZyArIE1JTl9GTF9SRVNJRDsKKwkJcy0+ZXRocnhxW3FzXS5yc3BxLnNpemUgPSBycC0+cnhfbWluaV9wZW5kaW5nOworCQlzLT5ldGh0eHFbcXNdLnEuc2l6ZSA9IHJwLT50eF9wZW5kaW5nOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgaW50ZXJydXB0IGhvbGRvZmYgdGltZXIgYW5kIGNvdW50IGZvciB0aGUgZmlyc3QgUXVldWUgU2V0IG9uIHRoZQorICogZGV2aWNlLiAgT3VyIGV4dGVuc2lvbiBpb2N0bCgpICh0aGUgY3hnYnRvb2wgaW50ZXJmYWNlKSBhbGxvd3MgdGhlCisgKiBpbnRlcnJ1cHQgaG9sZG9mZiB0aW1lciB0byBiZSByZWFkIG9uIGFsbCBvZiB0aGUgZGV2aWNlJ3MgUXVldWUgU2V0cy4KKyAqLworc3RhdGljIGludCBjeGdiNHZmX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjb2FsZXNjZSkKK3sKKwljb25zdCBzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CisJY29uc3Qgc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBwaS0+YWRhcHRlcjsKKwljb25zdCBzdHJ1Y3Qgc2dlX3JzcHEgKnJzcHEgPSAmYWRhcHRlci0+c2dlLmV0aHJ4cVtwaS0+Zmlyc3RfcXNldF0ucnNwcTsKKworCWNvYWxlc2NlLT5yeF9jb2FsZXNjZV91c2VjcyA9IHF0aW1lcl92YWwoYWRhcHRlciwgcnNwcSk7CisJY29hbGVzY2UtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzID0KKwkJKChyc3BxLT5pbnRyX3BhcmFtcyAmIFFJTlRSX0NOVF9FTikKKwkJID8gYWRhcHRlci0+c2dlLmNvdW50ZXJfdmFsW3JzcHEtPnBrdGNudF9pZHhdCisJCSA6IDApOworCXJldHVybiAwOworfQorCisvKgorICogU2V0IHRoZSBSWCBpbnRlcnJ1cHQgaG9sZG9mZiB0aW1lciBhbmQgY291bnQgZm9yIHRoZSBmaXJzdCBRdWV1ZSBTZXQgb24gdGhlCisgKiBpbnRlcmZhY2UuICBPdXIgZXh0ZW5zaW9uIGlvY3RsKCkgKHRoZSBjeGdidG9vbCBpbnRlcmZhY2UpIGFsbG93cyB1cyB0byBzZXQKKyAqIHRoZSBpbnRlcnJ1cHQgaG9sZG9mZiB0aW1lciBvbiBhbnkgb2YgdGhlIGRldmljZSdzIFF1ZXVlIFNldHMuCisgKi8KK3N0YXRpYyBpbnQgY3hnYjR2Zl9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqY29hbGVzY2UpCit7CisJY29uc3Qgc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gcGktPmFkYXB0ZXI7CisKKwlyZXR1cm4gc2V0X3J4cV9pbnRyX3BhcmFtcyhhZGFwdGVyLAorCQkJCSAgICZhZGFwdGVyLT5zZ2UuZXRocnhxW3BpLT5maXJzdF9xc2V0XS5yc3BxLAorCQkJCSAgIGNvYWxlc2NlLT5yeF9jb2FsZXNjZV91c2VjcywKKwkJCQkgICBjb2FsZXNjZS0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMpOworfQorCisvKgorICogUmVwb3J0IGN1cnJlbnQgcG9ydCBsaW5rIHBhdXNlIHBhcmFtZXRlciBzZXR0aW5ncy4KKyAqLworc3RhdGljIHZvaWQgY3hnYjR2Zl9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBhdXNlcGFyYW0pCit7CisJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcGF1c2VwYXJhbS0+YXV0b25lZyA9IChwaS0+bGlua19jZmcucmVxdWVzdGVkX2ZjICYgUEFVU0VfQVVUT05FRykgIT0gMDsKKwlwYXVzZXBhcmFtLT5yeF9wYXVzZSA9IChwaS0+bGlua19jZmcuZmMgJiBQQVVTRV9SWCkgIT0gMDsKKwlwYXVzZXBhcmFtLT50eF9wYXVzZSA9IChwaS0+bGlua19jZmcuZmMgJiBQQVVTRV9UWCkgIT0gMDsKK30KKworLyoKKyAqIFJldHVybiB3aGV0aGVyIFJYIENoZWNrc3VtIE9mZmxvYWRpbmcgaXMgY3VycmVudGx5IGVuYWJsZWQgZm9yIHRoZSBkZXZpY2UuCisgKi8KK3N0YXRpYyB1MzIgY3hnYjR2Zl9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldHVybiAocGktPnJ4X29mZmxvYWQgJiBSWF9DU08pICE9IDA7Cit9CisKKy8qCisgKiBUdXJuIFJYIENoZWNrc3VtIE9mZmxvYWRpbmcgb24gb3Igb2ZmIGZvciB0aGUgZGV2aWNlLgorICovCitzdGF0aWMgaW50IGN4Z2I0dmZfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGNzdW0pCit7CisJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKGNzdW0pCisJCXBpLT5yeF9vZmZsb2FkIHw9IFJYX0NTTzsKKwllbHNlCisJCXBpLT5yeF9vZmZsb2FkICY9IH5SWF9DU087CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJZGVudGlmeSB0aGUgcG9ydCBieSBibGlua2luZyB0aGUgcG9ydCdzIExFRC4KKyAqLworc3RhdGljIGludCBjeGdiNHZmX3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGlkKQoreworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldHVybiB0NHZmX2lkZW50aWZ5X3BvcnQocGktPmFkYXB0ZXIsIHBpLT52aWlkLCA1KTsKK30KKworLyoKKyAqIFBvcnQgc3RhdHMgbWFpbnRhaW5lZCBwZXIgcXVldWUgb2YgdGhlIHBvcnQuCisgKi8KK3N0cnVjdCBxdWV1ZV9wb3J0X3N0YXRzIHsKKwl1NjQgdHNvOworCXU2NCB0eF9jc3VtOworCXU2NCByeF9jc3VtOworCXU2NCB2bGFuX2V4OworCXU2NCB2bGFuX2luczsKK307CisKKy8qCisgKiBTdHJpbmdzIGZvciB0aGUgRVRIX1NTX1NUQVRTIHN0YXRpc3RpY3Mgc2V0ICgiZXRodG9vbCAtUyIpLiAgTm90ZSB0aGF0CisgKiB0aGVzZSBuZWVkIHRvIG1hdGNoIHRoZSBvcmRlciBvZiBzdGF0aXN0aWNzIHJldHVybmVkIGJ5CisgKiB0NHZmX2dldF9wb3J0X3N0YXRzKCkuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyIHN0YXRzX3N0cmluZ3NbXVtFVEhfR1NUUklOR19MRU5dID0geworCS8qCisJICogVGhlc2UgbXVzdCBtYXRjaCB0aGUgbGF5b3V0IG9mIHRoZSB0NHZmX3BvcnRfc3RhdHMgc3RydWN0dXJlLgorCSAqLworCSJUeEJyb2FkY2FzdEJ5dGVzICAiLAorCSJUeEJyb2FkY2FzdEZyYW1lcyAiLAorCSJUeE11bHRpY2FzdEJ5dGVzICAiLAorCSJUeE11bHRpY2FzdEZyYW1lcyAiLAorCSJUeFVuaWNhc3RCeXRlcyAgICAiLAorCSJUeFVuaWNhc3RGcmFtZXMgICAiLAorCSJUeERyb3BwZWRGcmFtZXMgICAiLAorCSJUeE9mZmxvYWRCeXRlcyAgICAiLAorCSJUeE9mZmxvYWRGcmFtZXMgICAiLAorCSJSeEJyb2FkY2FzdEJ5dGVzICAiLAorCSJSeEJyb2FkY2FzdEZyYW1lcyAiLAorCSJSeE11bHRpY2FzdEJ5dGVzICAiLAorCSJSeE11bHRpY2FzdEZyYW1lcyAiLAorCSJSeFVuaWNhc3RCeXRlcyAgICAiLAorCSJSeFVuaWNhc3RGcmFtZXMgICAiLAorCSJSeEVycm9yRnJhbWVzICAgICAiLAorCisJLyoKKwkgKiBUaGVzZSBhcmUgYWNjdW11bGF0ZWQgcGVyLXF1ZXVlIHN0YXRpc3RpY3MgYW5kIG11c3QgbWF0Y2ggdGhlCisJICogb3JkZXIgb2YgdGhlIGZpZWxkcyBpbiB0aGUgcXVldWVfcG9ydF9zdGF0cyBzdHJ1Y3R1cmUuCisJICovCisJIlRTTyAgICAgICAgICAgICAgICIsCisJIlR4Q3N1bU9mZmxvYWQgICAgICIsCisJIlJ4Q3N1bUdvb2QgICAgICAgICIsCisJIlZMQU5leHRyYWN0aW9ucyAgICIsCisJIlZMQU5pbnNlcnRpb25zICAgICIsCit9OworCisvKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc3RhdGlzdGljcyBpbiB0aGUgc3BlY2lmaWVkIHN0YXRpc3RpY3Mgc2V0LgorICovCitzdGF0aWMgaW50IGN4Z2I0dmZfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNzZXQpCit7CisJc3dpdGNoIChzc2V0KSB7CisJY2FzZSBFVEhfU1NfU1RBVFM6CisJCXJldHVybiBBUlJBWV9TSVpFKHN0YXRzX3N0cmluZ3MpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisJLypOT1RSRUFDSEVEKi8KK30KKworLyoKKyAqIFJldHVybiB0aGUgc3RyaW5ncyBmb3IgdGhlIHNwZWNpZmllZCBzdGF0aXN0aWNzIHNldC4KKyAqLworc3RhdGljIHZvaWQgY3hnYjR2Zl9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXUzMiBzc2V0LAorCQkJCXU4ICpkYXRhKQoreworCXN3aXRjaCAoc3NldCkgeworCWNhc2UgRVRIX1NTX1NUQVRTOgorCQltZW1jcHkoZGF0YSwgc3RhdHNfc3RyaW5ncywgc2l6ZW9mKHN0YXRzX3N0cmluZ3MpKTsKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogU21hbGwgdXRpbGl0eSByb3V0aW5lIHRvIGFjY3VtdWxhdGUgcXVldWUgc3RhdGlzdGljcyBhY3Jvc3MgdGhlIHF1ZXVlcyBvZgorICogYSAicG9ydCIuCisgKi8KK3N0YXRpYyB2b2lkIGNvbGxlY3Rfc2dlX3BvcnRfc3RhdHMoY29uc3Qgc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICAgY29uc3Qgc3RydWN0IHBvcnRfaW5mbyAqcGksCisJCQkJICAgc3RydWN0IHF1ZXVlX3BvcnRfc3RhdHMgKnN0YXRzKQoreworCWNvbnN0IHN0cnVjdCBzZ2VfZXRoX3R4cSAqdHhxID0gJmFkYXB0ZXItPnNnZS5ldGh0eHFbcGktPmZpcnN0X3FzZXRdOworCWNvbnN0IHN0cnVjdCBzZ2VfZXRoX3J4cSAqcnhxID0gJmFkYXB0ZXItPnNnZS5ldGhyeHFbcGktPmZpcnN0X3FzZXRdOworCWludCBxczsKKworCW1lbXNldChzdGF0cywgMCwgc2l6ZW9mKCpzdGF0cykpOworCWZvciAocXMgPSAwOyBxcyA8IHBpLT5ucXNldHM7IHFzKyssIHJ4cSsrLCB0eHErKykgeworCQlzdGF0cy0+dHNvICs9IHR4cS0+dHNvOworCQlzdGF0cy0+dHhfY3N1bSArPSB0eHEtPnR4X2NzbzsKKwkJc3RhdHMtPnJ4X2NzdW0gKz0gcnhxLT5zdGF0cy5yeF9jc287CisJCXN0YXRzLT52bGFuX2V4ICs9IHJ4cS0+c3RhdHMudmxhbl9leDsKKwkJc3RhdHMtPnZsYW5faW5zICs9IHR4cS0+dmxhbl9pbnM7CisJfQorfQorCisvKgorICogUmV0dXJuIHRoZSBFVEhfU1NfU1RBVFMgc3RhdGlzdGljcyBzZXQuCisgKi8KK3N0YXRpYyB2b2lkIGN4Z2I0dmZfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsCisJCQkJICAgICAgdTY0ICpkYXRhKQoreworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2MnBpbmZvKGRldik7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBwaS0+YWRhcHRlcjsKKwlpbnQgZXJyID0gdDR2Zl9nZXRfcG9ydF9zdGF0cyhhZGFwdGVyLCBwaS0+cGlkeCwKKwkJCQkgICAgICAoc3RydWN0IHQ0dmZfcG9ydF9zdGF0cyAqKWRhdGEpOworCWlmIChlcnIpCisJCW1lbXNldChkYXRhLCAwLCBzaXplb2Yoc3RydWN0IHQ0dmZfcG9ydF9zdGF0cykpOworCisJZGF0YSArPSBzaXplb2Yoc3RydWN0IHQ0dmZfcG9ydF9zdGF0cykgLyBzaXplb2YodTY0KTsKKwljb2xsZWN0X3NnZV9wb3J0X3N0YXRzKGFkYXB0ZXIsIHBpLCAoc3RydWN0IHF1ZXVlX3BvcnRfc3RhdHMgKilkYXRhKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgc2l6ZSBvZiBvdXIgcmVnaXN0ZXIgbWFwLgorICovCitzdGF0aWMgaW50IGN4Z2I0dmZfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIFQ0VkZfUkVHTUFQX1NJWkU7Cit9CisKKy8qCisgKiBEdW1wIGEgYmxvY2sgb2YgcmVnaXN0ZXJzLCBzdGFydCB0byBlbmQgaW5jbHVzaXZlLCBpbnRvIGEgYnVmZmVyLgorICovCitzdGF0aWMgdm9pZCByZWdfYmxvY2tfZHVtcChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdm9pZCAqcmVnYnVmLAorCQkJICAgdW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgZW5kKQoreworCXUzMiAqYnAgPSByZWdidWYgKyBzdGFydCAtIFQ0VkZfUkVHTUFQX1NUQVJUOworCisJZm9yICggOyBzdGFydCA8PSBlbmQ7IHN0YXJ0ICs9IHNpemVvZih1MzIpKSB7CisJCS8qCisJCSAqIEF2b2lkIHJlYWRpbmcgdGhlIE1haWxib3ggQ29udHJvbCByZWdpc3RlciBzaW5jZSB0aGF0CisJCSAqIGNhbiB0cmlnZ2VyIGEgTWFpbGJveCBPd25lcnNoaXAgQXJiaXRyYXRpb24gY3ljbGUgYW5kCisJCSAqIGludGVyZmVyZSB3aXRoIGNvbW11bmljYXRpb24gd2l0aCB0aGUgZmlybXdhcmUuCisJCSAqLworCQlpZiAoc3RhcnQgPT0gVDRWRl9DSU1fQkFTRV9BRERSICsgQ0lNX1ZGX0VYVF9NQUlMQk9YX0NUUkwpCisJCQkqYnArKyA9IDB4ZmZmZjsKKwkJZWxzZQorCQkJKmJwKysgPSB0NF9yZWFkX3JlZyhhZGFwdGVyLCBzdGFydCk7CisJfQorfQorCisvKgorICogQ29weSBvdXIgZW50aXJlIHJlZ2lzdGVyIG1hcCBpbnRvIHRoZSBwcm92aWRlZCBidWZmZXIuCisgKi8KK3N0YXRpYyB2b2lkIGN4Z2I0dmZfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywKKwkJCSAgICAgdm9pZCAqcmVnYnVmKQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2MmFkYXAoZGV2KTsKKworCXJlZ3MtPnZlcnNpb24gPSBta19hZGFwX3ZlcnMoYWRhcHRlcik7CisKKwkvKgorCSAqIEZpbGwgaW4gcmVnaXN0ZXIgYnVmZmVyIHdpdGggb3VyIHJlZ2lzdGVyIG1hcC4KKwkgKi8KKwltZW1zZXQocmVnYnVmLCAwLCBUNFZGX1JFR01BUF9TSVpFKTsKKworCXJlZ19ibG9ja19kdW1wKGFkYXB0ZXIsIHJlZ2J1ZiwKKwkJICAgICAgIFQ0VkZfU0dFX0JBU0VfQUREUiArIFQ0VkZfTU9EX01BUF9TR0VfRklSU1QsCisJCSAgICAgICBUNFZGX1NHRV9CQVNFX0FERFIgKyBUNFZGX01PRF9NQVBfU0dFX0xBU1QpOworCXJlZ19ibG9ja19kdW1wKGFkYXB0ZXIsIHJlZ2J1ZiwKKwkJICAgICAgIFQ0VkZfTVBTX0JBU0VfQUREUiArIFQ0VkZfTU9EX01BUF9NUFNfRklSU1QsCisJCSAgICAgICBUNFZGX01QU19CQVNFX0FERFIgKyBUNFZGX01PRF9NQVBfTVBTX0xBU1QpOworCXJlZ19ibG9ja19kdW1wKGFkYXB0ZXIsIHJlZ2J1ZiwKKwkJICAgICAgIFQ0VkZfUExfQkFTRV9BRERSICsgVDRWRl9NT0RfTUFQX1BMX0ZJUlNULAorCQkgICAgICAgVDRWRl9QTF9CQVNFX0FERFIgKyBUNFZGX01PRF9NQVBfUExfTEFTVCk7CisJcmVnX2Jsb2NrX2R1bXAoYWRhcHRlciwgcmVnYnVmLAorCQkgICAgICAgVDRWRl9DSU1fQkFTRV9BRERSICsgVDRWRl9NT0RfTUFQX0NJTV9GSVJTVCwKKwkJICAgICAgIFQ0VkZfQ0lNX0JBU0VfQUREUiArIFQ0VkZfTU9EX01BUF9DSU1fTEFTVCk7CisKKwlyZWdfYmxvY2tfZHVtcChhZGFwdGVyLCByZWdidWYsCisJCSAgICAgICBUNFZGX01CREFUQV9CQVNFX0FERFIgKyBUNFZGX01CREFUQV9GSVJTVCwKKwkJICAgICAgIFQ0VkZfTUJEQVRBX0JBU0VfQUREUiArIFQ0VkZfTUJEQVRBX0xBU1QpOworfQorCisvKgorICogUmVwb3J0IGN1cnJlbnQgV2FrZSBPbiBMQU4gc2V0dGluZ3MuCisgKi8KK3N0YXRpYyB2b2lkIGN4Z2I0dmZfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwl3b2wtPnN1cHBvcnRlZCA9IDA7CisJd29sLT53b2xvcHRzID0gMDsKKwltZW1zZXQoJndvbC0+c29wYXNzLCAwLCBzaXplb2Yod29sLT5zb3Bhc3MpKTsKK30KKworLyoKKyAqIFNldCBUQ1AgU2VnbWVudGF0aW9uIE9mZmxvYWRpbmcgZmVhdHVyZSBjYXBhYmlsaXRpZXMuCisgKi8KK3N0YXRpYyBpbnQgY3hnYjR2Zl9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiB0c28pCit7CisJaWYgKHRzbykKKwkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNjsKKwllbHNlCisJCWRldi0+ZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgY3hnYjR2Zl9ldGh0b29sX29wcyA9IHsKKwkuZ2V0X3NldHRpbmdzCQk9IGN4Z2I0dmZfZ2V0X3NldHRpbmdzLAorCS5nZXRfZHJ2aW5mbwkJPSBjeGdiNHZmX2dldF9kcnZpbmZvLAorCS5nZXRfbXNnbGV2ZWwJCT0gY3hnYjR2Zl9nZXRfbXNnbGV2ZWwsCisJLnNldF9tc2dsZXZlbAkJPSBjeGdiNHZmX3NldF9tc2dsZXZlbCwKKwkuZ2V0X3JpbmdwYXJhbQkJPSBjeGdiNHZmX2dldF9yaW5ncGFyYW0sCisJLnNldF9yaW5ncGFyYW0JCT0gY3hnYjR2Zl9zZXRfcmluZ3BhcmFtLAorCS5nZXRfY29hbGVzY2UJCT0gY3hnYjR2Zl9nZXRfY29hbGVzY2UsCisJLnNldF9jb2FsZXNjZQkJPSBjeGdiNHZmX3NldF9jb2FsZXNjZSwKKwkuZ2V0X3BhdXNlcGFyYW0JCT0gY3hnYjR2Zl9nZXRfcGF1c2VwYXJhbSwKKwkuZ2V0X3J4X2NzdW0JCT0gY3hnYjR2Zl9nZXRfcnhfY3N1bSwKKwkuc2V0X3J4X2NzdW0JCT0gY3hnYjR2Zl9zZXRfcnhfY3N1bSwKKwkuc2V0X3R4X2NzdW0JCT0gZXRodG9vbF9vcF9zZXRfdHhfaXB2Nl9jc3VtLAorCS5zZXRfc2cJCQk9IGV0aHRvb2xfb3Bfc2V0X3NnLAorCS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLAorCS5nZXRfc3RyaW5ncwkJPSBjeGdiNHZmX2dldF9zdHJpbmdzLAorCS5waHlzX2lkCQk9IGN4Z2I0dmZfcGh5c19pZCwKKwkuZ2V0X3NzZXRfY291bnQJCT0gY3hnYjR2Zl9nZXRfc3NldF9jb3VudCwKKwkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBjeGdiNHZmX2dldF9ldGh0b29sX3N0YXRzLAorCS5nZXRfcmVnc19sZW4JCT0gY3hnYjR2Zl9nZXRfcmVnc19sZW4sCisJLmdldF9yZWdzCQk9IGN4Z2I0dmZfZ2V0X3JlZ3MsCisJLmdldF93b2wJCT0gY3hnYjR2Zl9nZXRfd29sLAorCS5zZXRfdHNvCQk9IGN4Z2I0dmZfc2V0X3RzbywKK307CisKKy8qCisgKiAvc3lzL2tlcm5lbC9kZWJ1Zy9jeGdiNHZmIHN1cHBvcnQgY29kZSBhbmQgZGF0YS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKy8qCisgKiBTaG93IFNHRSBRdWV1ZSBTZXQgaW5mb3JtYXRpb24uICBXZSBkaXNwbGF5IFFQTCBRdWV1ZXMgU2V0cyBwZXIgbGluZS4KKyAqLworI2RlZmluZSBRUEwJNAorCitzdGF0aWMgaW50IHNnZV9xaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gc2VxLT5wcml2YXRlOworCWludCBldGhfZW50cmllcyA9IERJVl9ST1VORF9VUChhZGFwdGVyLT5zZ2UuZXRocXNldHMsIFFQTCk7CisJaW50IHFzLCByID0gKHVpbnRwdHJfdCl2IC0gMTsKKworCWlmIChyKQorCQlzZXFfcHV0YyhzZXEsICdcbicpOworCisJI2RlZmluZSBTMyhmbXRfc3BlYywgcywgdikgXAorCQlkbyB7XAorCQkJc2VxX3ByaW50ZihzZXEsICIlLTEycyIsIHMpOyBcCisJCQlmb3IgKHFzID0gMDsgcXMgPCBuOyArK3FzKSBcCisJCQkJc2VxX3ByaW50ZihzZXEsICIgJTE2IiBmbXRfc3BlYywgdik7IFwKKwkJCXNlcV9wdXRjKHNlcSwgJ1xuJyk7IFwKKwkJfSB3aGlsZSAoMCkKKwkjZGVmaW5lIFMocywgdikJCVMzKCJzIiwgcywgdikKKwkjZGVmaW5lIFQocywgdikJCVMzKCJ1IiwgcywgdHhxW3FzXS52KQorCSNkZWZpbmUgUihzLCB2KQkJUzMoInUiLCBzLCByeHFbcXNdLnYpCisKKwlpZiAociA8IGV0aF9lbnRyaWVzKSB7CisJCWNvbnN0IHN0cnVjdCBzZ2VfZXRoX3J4cSAqcnhxID0gJmFkYXB0ZXItPnNnZS5ldGhyeHFbciAqIFFQTF07CisJCWNvbnN0IHN0cnVjdCBzZ2VfZXRoX3R4cSAqdHhxID0gJmFkYXB0ZXItPnNnZS5ldGh0eHFbciAqIFFQTF07CisJCWludCBuID0gbWluKFFQTCwgYWRhcHRlci0+c2dlLmV0aHFzZXRzIC0gUVBMICogcik7CisKKwkJUygiUVR5cGU6IiwgIkV0aGVybmV0Iik7CisJCVMoIkludGVyZmFjZToiLAorCQkgIChyeHFbcXNdLnJzcHEubmV0ZGV2CisJCSAgID8gcnhxW3FzXS5yc3BxLm5ldGRldi0+bmFtZQorCQkgICA6ICJOL0EiKSk7CisJCVMzKCJkIiwgIlBvcnQ6IiwKKwkJICAgKHJ4cVtxc10ucnNwcS5uZXRkZXYKKwkJICAgID8gKChzdHJ1Y3QgcG9ydF9pbmZvICopCisJCSAgICAgICBuZXRkZXZfcHJpdihyeHFbcXNdLnJzcHEubmV0ZGV2KSktPnBvcnRfaWQKKwkJICAgIDogLTEpKTsKKwkJVCgiVHhRIElEOiIsIHEuYWJzX2lkKTsKKwkJVCgiVHhRIHNpemU6IiwgcS5zaXplKTsKKwkJVCgiVHhRIGludXNlOiIsIHEuaW5fdXNlKTsKKwkJVCgiVHhRIFBJZHg6IiwgcS5waWR4KTsKKwkJVCgiVHhRIENJZHg6IiwgcS5jaWR4KTsKKwkJUigiUnNwUSBJRDoiLCByc3BxLmFic19pZCk7CisJCVIoIlJzcFEgc2l6ZToiLCByc3BxLnNpemUpOworCQlSKCJSc3BRRSBzaXplOiIsIHJzcHEuaXFlX2xlbik7CisJCVMzKCJ1IiwgIkludHIgZGVsYXk6IiwgcXRpbWVyX3ZhbChhZGFwdGVyLCAmcnhxW3FzXS5yc3BxKSk7CisJCVMzKCJ1IiwgIkludHIgcGt0Y250OiIsCisJCSAgIGFkYXB0ZXItPnNnZS5jb3VudGVyX3ZhbFtyeHFbcXNdLnJzcHEucGt0Y250X2lkeF0pOworCQlSKCJSc3BRIENJZHg6IiwgcnNwcS5jaWR4KTsKKwkJUigiUnNwUSBHZW46IiwgcnNwcS5nZW4pOworCQlSKCJGTCBJRDoiLCBmbC5hYnNfaWQpOworCQlSKCJGTCBzaXplOiIsIGZsLnNpemUgLSBNSU5fRkxfUkVTSUQpOworCQlSKCJGTCBhdmFpbDoiLCBmbC5hdmFpbCk7CisJCVIoIkZMIFBJZHg6IiwgZmwucGlkeCk7CisJCVIoIkZMIENJZHg6IiwgZmwuY2lkeCk7CisJCXJldHVybiAwOworCX0KKworCXIgLT0gZXRoX2VudHJpZXM7CisJaWYgKHIgPT0gMCkgeworCQljb25zdCBzdHJ1Y3Qgc2dlX3JzcHEgKmV2dHEgPSAmYWRhcHRlci0+c2dlLmZ3X2V2dHE7CisKKwkJc2VxX3ByaW50ZihzZXEsICIlLTEycyAlMTZzXG4iLCAiUVR5cGU6IiwgIkZXIGV2ZW50IHF1ZXVlIik7CisJCXNlcV9wcmludGYoc2VxLCAiJS0xMnMgJTE2dVxuIiwgIlJzcFEgSUQ6IiwgZXZ0cS0+YWJzX2lkKTsKKwkJc2VxX3ByaW50ZihzZXEsICIlLTEycyAlMTZ1XG4iLCAiSW50ciBkZWxheToiLAorCQkJICAgcXRpbWVyX3ZhbChhZGFwdGVyLCBldnRxKSk7CisJCXNlcV9wcmludGYoc2VxLCAiJS0xMnMgJTE2dVxuIiwgIkludHIgcGt0Y250OiIsCisJCQkgICBhZGFwdGVyLT5zZ2UuY291bnRlcl92YWxbZXZ0cS0+cGt0Y250X2lkeF0pOworCQlzZXFfcHJpbnRmKHNlcSwgIiUtMTJzICUxNnVcbiIsICJSc3BRIENpZHg6IiwgZXZ0cS0+Y2lkeCk7CisJCXNlcV9wcmludGYoc2VxLCAiJS0xMnMgJTE2dVxuIiwgIlJzcFEgR2VuOiIsIGV2dHEtPmdlbik7CisJfSBlbHNlIGlmIChyID09IDEpIHsKKwkJY29uc3Qgc3RydWN0IHNnZV9yc3BxICppbnRycSA9ICZhZGFwdGVyLT5zZ2UuaW50cnE7CisKKwkJc2VxX3ByaW50ZihzZXEsICIlLTEycyAlMTZzXG4iLCAiUVR5cGU6IiwgIkludGVycnVwdCBRdWV1ZSIpOworCQlzZXFfcHJpbnRmKHNlcSwgIiUtMTJzICUxNnVcbiIsICJSc3BRIElEOiIsIGludHJxLT5hYnNfaWQpOworCQlzZXFfcHJpbnRmKHNlcSwgIiUtMTJzICUxNnVcbiIsICJJbnRyIGRlbGF5OiIsCisJCQkgICBxdGltZXJfdmFsKGFkYXB0ZXIsIGludHJxKSk7CisJCXNlcV9wcmludGYoc2VxLCAiJS0xMnMgJTE2dVxuIiwgIkludHIgcGt0Y250OiIsCisJCQkgICBhZGFwdGVyLT5zZ2UuY291bnRlcl92YWxbaW50cnEtPnBrdGNudF9pZHhdKTsKKwkJc2VxX3ByaW50ZihzZXEsICIlLTEycyAlMTZ1XG4iLCAiUnNwUSBDaWR4OiIsIGludHJxLT5jaWR4KTsKKwkJc2VxX3ByaW50ZihzZXEsICIlLTEycyAlMTZ1XG4iLCAiUnNwUSBHZW46IiwgaW50cnEtPmdlbik7CisJfQorCisJI3VuZGVmIFIKKwkjdW5kZWYgVAorCSN1bmRlZiBTCisJI3VuZGVmIFMzCisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mICJlbnRyaWVzIiBpbiBvdXIgImZpbGUiLiAgV2UgZ3JvdXAgdGhlIG11bHRpLVF1ZXVlCisgKiBzZWN0aW9ucyB3aXRoIFFQTCBRdWV1ZSBTZXRzIHBlciAiZW50cnkiLiAgVGhlIHNlY3Rpb25zIG9mIHRoZSBvdXRwdXQgYXJlOgorICoKKyAqICAgICBFdGhlcm5ldCBSWC9UWCBRdWV1ZSBTZXRzCisgKiAgICAgRmlybXdhcmUgRXZlbnQgUXVldWUKKyAqICAgICBGb3J3YXJkZWQgSW50ZXJydXB0IFF1ZXVlIChpZiBpbiBNU0kgbW9kZSkKKyAqLworc3RhdGljIGludCBzZ2VfcXVldWVfZW50cmllcyhjb25zdCBzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gRElWX1JPVU5EX1VQKGFkYXB0ZXItPnNnZS5ldGhxc2V0cywgUVBMKSArIDEgKworCQkoKGFkYXB0ZXItPmZsYWdzICYgVVNJTkdfTVNJKSAhPSAwKTsKK30KKworc3RhdGljIHZvaWQgKnNnZV9xdWV1ZV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCit7CisJaW50IGVudHJpZXMgPSBzZ2VfcXVldWVfZW50cmllcyhzZXEtPnByaXZhdGUpOworCisJcmV0dXJuICpwb3MgPCBlbnRyaWVzID8gKHZvaWQgKikoKHVpbnRwdHJfdCkqcG9zICsgMSkgOiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBzZ2VfcXVldWVfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKK30KKworc3RhdGljIHZvaWQgKnNnZV9xdWV1ZV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwlpbnQgZW50cmllcyA9IHNnZV9xdWV1ZV9lbnRyaWVzKHNlcS0+cHJpdmF0ZSk7CisKKwkrKypwb3M7CisJcmV0dXJuICpwb3MgPCBlbnRyaWVzID8gKHZvaWQgKikoKHVpbnRwdHJfdCkqcG9zICsgMSkgOiBOVUxMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNnZV9xaW5mb19zZXFfb3BzID0geworCS5zdGFydCA9IHNnZV9xdWV1ZV9zdGFydCwKKwkubmV4dCAgPSBzZ2VfcXVldWVfbmV4dCwKKwkuc3RvcCAgPSBzZ2VfcXVldWVfc3RvcCwKKwkuc2hvdyAgPSBzZ2VfcWluZm9fc2hvdworfTsKKworc3RhdGljIGludCBzZ2VfcWluZm9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgcmVzID0gc2VxX29wZW4oZmlsZSwgJnNnZV9xaW5mb19zZXFfb3BzKTsKKworCWlmICghcmVzKSB7CisJCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCQlzZXEtPnByaXZhdGUgPSBpbm9kZS0+aV9wcml2YXRlOworCX0KKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZ2VfcWluZm9fZGVidWdmc19mb3BzID0geworCS5vd25lciAgID0gVEhJU19NT0RVTEUsCisJLm9wZW4gICAgPSBzZ2VfcWluZm9fb3BlbiwKKwkucmVhZCAgICA9IHNlcV9yZWFkLAorCS5sbHNlZWsgID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCit9OworCisvKgorICogU2hvdyBTR0UgUXVldWUgU2V0IHN0YXRpc3RpY3MuICBXZSBkaXNwbGF5IFFQTCBRdWV1ZXMgU2V0cyBwZXIgbGluZS4KKyAqLworI2RlZmluZSBRUEwJNAorCitzdGF0aWMgaW50IHNnZV9xc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IHNlcS0+cHJpdmF0ZTsKKwlpbnQgZXRoX2VudHJpZXMgPSBESVZfUk9VTkRfVVAoYWRhcHRlci0+c2dlLmV0aHFzZXRzLCBRUEwpOworCWludCBxcywgciA9ICh1aW50cHRyX3QpdiAtIDE7CisKKwlpZiAocikKKwkJc2VxX3B1dGMoc2VxLCAnXG4nKTsKKworCSNkZWZpbmUgUzMoZm10LCBzLCB2KSBcCisJCWRvIHsgXAorCQkJc2VxX3ByaW50ZihzZXEsICIlLTE2cyIsIHMpOyBcCisJCQlmb3IgKHFzID0gMDsgcXMgPCBuOyArK3FzKSBcCisJCQkJc2VxX3ByaW50ZihzZXEsICIgJTgiIGZtdCwgdik7IFwKKwkJCXNlcV9wdXRjKHNlcSwgJ1xuJyk7IFwKKwkJfSB3aGlsZSAoMCkKKwkjZGVmaW5lIFMocywgdikJCVMzKCJzIiwgcywgdikKKworCSNkZWZpbmUgVDMoZm10LCBzLCB2KQlTMyhmbXQsIHMsIHR4cVtxc10udikKKwkjZGVmaW5lIFQocywgdikJCVQzKCJsdSIsIHMsIHYpCisKKwkjZGVmaW5lIFIzKGZtdCwgcywgdikJUzMoZm10LCBzLCByeHFbcXNdLnYpCisJI2RlZmluZSBSKHMsIHYpCQlSMygibHUiLCBzLCB2KQorCisJaWYgKHIgPCBldGhfZW50cmllcykgeworCQljb25zdCBzdHJ1Y3Qgc2dlX2V0aF9yeHEgKnJ4cSA9ICZhZGFwdGVyLT5zZ2UuZXRocnhxW3IgKiBRUExdOworCQljb25zdCBzdHJ1Y3Qgc2dlX2V0aF90eHEgKnR4cSA9ICZhZGFwdGVyLT5zZ2UuZXRodHhxW3IgKiBRUExdOworCQlpbnQgbiA9IG1pbihRUEwsIGFkYXB0ZXItPnNnZS5ldGhxc2V0cyAtIFFQTCAqIHIpOworCisJCVMoIlFUeXBlOiIsICJFdGhlcm5ldCIpOworCQlTKCJJbnRlcmZhY2U6IiwKKwkJICAocnhxW3FzXS5yc3BxLm5ldGRldgorCQkgICA/IHJ4cVtxc10ucnNwcS5uZXRkZXYtPm5hbWUKKwkJICAgOiAiTi9BIikpOworCQlSMygidSIsICJSc3BRTnVsbEludHM6IiwgcnNwcS51bmhhbmRsZWRfaXJxcyk7CisJCVIoIlJ4UGFja2V0czoiLCBzdGF0cy5wa3RzKTsKKwkJUigiUnhDU086Iiwgc3RhdHMucnhfY3NvKTsKKwkJUigiVkxBTnh0cmFjdDoiLCBzdGF0cy52bGFuX2V4KTsKKwkJUigiTFJPbWVyZ2VkOiIsIHN0YXRzLmxyb19tZXJnZWQpOworCQlSKCJMUk9wYWNrZXRzOiIsIHN0YXRzLmxyb19wa3RzKTsKKwkJUigiUnhEcm9wczoiLCBzdGF0cy5yeF9kcm9wcyk7CisJCVQoIlRTTzoiLCB0c28pOworCQlUKCJUeENTTzoiLCB0eF9jc28pOworCQlUKCJWTEFOaW5zOiIsIHZsYW5faW5zKTsKKwkJVCgiVHhRRnVsbDoiLCBxLnN0b3BzKTsKKwkJVCgiVHhRUmVzdGFydHM6IiwgcS5yZXN0YXJ0cyk7CisJCVQoIlR4TWFwRXJyOiIsIG1hcHBpbmdfZXJyKTsKKwkJUigiRkxBbGxvY0VycjoiLCBmbC5hbGxvY19mYWlsZWQpOworCQlSKCJGTExyZ0FsY0VycjoiLCBmbC5sYXJnZV9hbGxvY19mYWlsZWQpOworCQlSKCJGTFN0YXJ2aW5nOiIsIGZsLnN0YXJ2aW5nKTsKKwkJcmV0dXJuIDA7CisJfQorCisJciAtPSBldGhfZW50cmllczsKKwlpZiAociA9PSAwKSB7CisJCWNvbnN0IHN0cnVjdCBzZ2VfcnNwcSAqZXZ0cSA9ICZhZGFwdGVyLT5zZ2UuZndfZXZ0cTsKKworCQlzZXFfcHJpbnRmKHNlcSwgIiUtOHMgJTE2c1xuIiwgIlFUeXBlOiIsICJGVyBldmVudCBxdWV1ZSIpOworCQlzZXFfcHJpbnRmKHNlcSwgIiUtMTZzICU4dVxuIiwgIlJzcFFOdWxsSW50czoiLAorCQkJICAgZXZ0cS0+dW5oYW5kbGVkX2lycXMpOworCQlzZXFfcHJpbnRmKHNlcSwgIiUtMTZzICU4dVxuIiwgIlJzcFEgQ0lkeDoiLCBldnRxLT5jaWR4KTsKKwkJc2VxX3ByaW50ZihzZXEsICIlLTE2cyAlOHVcbiIsICJSc3BRIEdlbjoiLCBldnRxLT5nZW4pOworCX0gZWxzZSBpZiAociA9PSAxKSB7CisJCWNvbnN0IHN0cnVjdCBzZ2VfcnNwcSAqaW50cnEgPSAmYWRhcHRlci0+c2dlLmludHJxOworCisJCXNlcV9wcmludGYoc2VxLCAiJS04cyAlMTZzXG4iLCAiUVR5cGU6IiwgIkludGVycnVwdCBRdWV1ZSIpOworCQlzZXFfcHJpbnRmKHNlcSwgIiUtMTZzICU4dVxuIiwgIlJzcFFOdWxsSW50czoiLAorCQkJICAgaW50cnEtPnVuaGFuZGxlZF9pcnFzKTsKKwkJc2VxX3ByaW50ZihzZXEsICIlLTE2cyAlOHVcbiIsICJSc3BRIENJZHg6IiwgaW50cnEtPmNpZHgpOworCQlzZXFfcHJpbnRmKHNlcSwgIiUtMTZzICU4dVxuIiwgIlJzcFEgR2VuOiIsIGludHJxLT5nZW4pOworCX0KKworCSN1bmRlZiBSCisJI3VuZGVmIFQKKwkjdW5kZWYgUworCSN1bmRlZiBSMworCSN1bmRlZiBUMworCSN1bmRlZiBTMworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiAiZW50cmllcyIgaW4gb3VyICJmaWxlIi4gIFdlIGdyb3VwIHRoZSBtdWx0aS1RdWV1ZQorICogc2VjdGlvbnMgd2l0aCBRUEwgUXVldWUgU2V0cyBwZXIgImVudHJ5Ii4gIFRoZSBzZWN0aW9ucyBvZiB0aGUgb3V0cHV0IGFyZToKKyAqCisgKiAgICAgRXRoZXJuZXQgUlgvVFggUXVldWUgU2V0cworICogICAgIEZpcm13YXJlIEV2ZW50IFF1ZXVlCisgKiAgICAgRm9yd2FyZGVkIEludGVycnVwdCBRdWV1ZSAoaWYgaW4gTVNJIG1vZGUpCisgKi8KK3N0YXRpYyBpbnQgc2dlX3FzdGF0c19lbnRyaWVzKGNvbnN0IHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXJldHVybiBESVZfUk9VTkRfVVAoYWRhcHRlci0+c2dlLmV0aHFzZXRzLCBRUEwpICsgMSArCisJCSgoYWRhcHRlci0+ZmxhZ3MgJiBVU0lOR19NU0kpICE9IDApOworfQorCitzdGF0aWMgdm9pZCAqc2dlX3FzdGF0c19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCit7CisJaW50IGVudHJpZXMgPSBzZ2VfcXN0YXRzX2VudHJpZXMoc2VxLT5wcml2YXRlKTsKKworCXJldHVybiAqcG9zIDwgZW50cmllcyA/ICh2b2lkICopKCh1aW50cHRyX3QpKnBvcyArIDEpIDogTlVMTDsKK30KKworc3RhdGljIHZvaWQgc2dlX3FzdGF0c19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworfQorCitzdGF0aWMgdm9pZCAqc2dlX3FzdGF0c19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwlpbnQgZW50cmllcyA9IHNnZV9xc3RhdHNfZW50cmllcyhzZXEtPnByaXZhdGUpOworCisJKCpwb3MpKys7CisJcmV0dXJuICpwb3MgPCBlbnRyaWVzID8gKHZvaWQgKikoKHVpbnRwdHJfdCkqcG9zICsgMSkgOiBOVUxMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNnZV9xc3RhdHNfc2VxX29wcyA9IHsKKwkuc3RhcnQgPSBzZ2VfcXN0YXRzX3N0YXJ0LAorCS5uZXh0ICA9IHNnZV9xc3RhdHNfbmV4dCwKKwkuc3RvcCAgPSBzZ2VfcXN0YXRzX3N0b3AsCisJLnNob3cgID0gc2dlX3FzdGF0c19zaG93Cit9OworCitzdGF0aWMgaW50IHNnZV9xc3RhdHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgcmVzID0gc2VxX29wZW4oZmlsZSwgJnNnZV9xc3RhdHNfc2VxX29wcyk7CisKKwlpZiAocmVzID09IDApIHsKKwkJc3RydWN0IHNlcV9maWxlICpzZXEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJCXNlcS0+cHJpdmF0ZSA9IGlub2RlLT5pX3ByaXZhdGU7CisJfQorCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNnZV9xc3RhdHNfcHJvY19mb3BzID0geworCS5vd25lciAgID0gVEhJU19NT0RVTEUsCisJLm9wZW4gICAgPSBzZ2VfcXN0YXRzX29wZW4sCisJLnJlYWQgICAgPSBzZXFfcmVhZCwKKwkubGxzZWVrICA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAorfTsKKworLyoKKyAqIFNob3cgUENJLUUgU1ItSU9WIFZpcnR1YWwgRnVuY3Rpb24gUmVzb3VyY2UgTGltaXRzLgorICovCitzdGF0aWMgaW50IHJlc291cmNlc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gc2VxLT5wcml2YXRlOworCXN0cnVjdCB2Zl9yZXNvdXJjZXMgKnZmcmVzID0gJmFkYXB0ZXItPnBhcmFtcy52ZnJlczsKKworCSNkZWZpbmUgUyhkZXNjLCBmbXQsIHZhcikgXAorCQlzZXFfcHJpbnRmKHNlcSwgIiUtNjBzICIgZm10ICJcbiIsIFwKKwkJCSAgIGRlc2MgIiAoIiAjdmFyICIpOiIsIHZmcmVzLT52YXIpCisKKwlTKCJWaXJ0dWFsIEludGVyZmFjZXMiLCAiJWQiLCBudmkpOworCVMoIkVncmVzcyBRdWV1ZXMiLCAiJWQiLCBuZXEpOworCVMoIkV0aGVybmV0IENvbnRyb2wiLCAiJWQiLCBuZXRoY3RybCk7CisJUygiSW5ncmVzcyBRdWV1ZXMvdyBGcmVlIExpc3RzL0ludGVycnVwdHMiLCAiJWQiLCBuaXFmbGludCk7CisJUygiSW5ncmVzcyBRdWV1ZXMiLCAiJWQiLCBuaXEpOworCVMoIlRyYWZmaWMgQ2xhc3MiLCAiJWQiLCB0Yyk7CisJUygiUG9ydCBBY2Nlc3MgUmlnaHRzIE1hc2siLCAiJSN4IiwgcG1hc2spOworCVMoIk1BQyBBZGRyZXNzIEZpbHRlcnMiLCAiJWQiLCBuZXhhY3RmKTsKKwlTKCJGaXJtd2FyZSBDb21tYW5kIFJlYWQgQ2FwYWJpbGl0aWVzIiwgIiUjeCIsIHJfY2Fwcyk7CisJUygiRmlybXdhcmUgQ29tbWFuZCBXcml0ZS9FeGVjdXRlIENhcGFiaWxpdGllcyIsICIlI3giLCB3eF9jYXBzKTsKKworCSN1bmRlZiBTCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZXNvdXJjZXNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcmVzb3VyY2VzX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZXNvdXJjZXNfcHJvY19mb3BzID0geworCS5vd25lciAgID0gVEhJU19NT0RVTEUsCisJLm9wZW4gICAgPSByZXNvdXJjZXNfb3BlbiwKKwkucmVhZCAgICA9IHNlcV9yZWFkLAorCS5sbHNlZWsgID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCit9OworCisvKgorICogU2hvdyBWaXJ0dWFsIEludGVyZmFjZXMuCisgKi8KK3N0YXRpYyBpbnQgaW50ZXJmYWNlc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikgeworCQlzZXFfcHV0cyhzZXEsICJJbnRlcmZhY2UgIFBvcnQgICBWSUlEXG4iKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IHNlcS0+cHJpdmF0ZTsKKwkJaW50IHBpZHggPSAodWludHB0cl90KXYgLSAyOworCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWRhcHRlci0+cG9ydFtwaWR4XTsKKwkJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOworCisJCXNlcV9wcmludGYoc2VxLCAiJTlzICAlNGQgICUjNXhcbiIsCisJCQkgICBkZXYtPm5hbWUsIHBpLT5wb3J0X2lkLCBwaS0+dmlpZCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmludGVyZmFjZXNfZ2V0X2lkeChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgbG9mZl90IHBvcykKK3sKKwlyZXR1cm4gcG9zIDw9IGFkYXB0ZXItPnBhcmFtcy5ucG9ydHMKKwkJPyAodm9pZCAqKSh1aW50cHRyX3QpKHBvcyArIDEpCisJCTogTlVMTDsKK30KKworc3RhdGljIHZvaWQgKmludGVyZmFjZXNfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQoreworCXJldHVybiAqcG9zCisJCT8gaW50ZXJmYWNlc19nZXRfaWR4KHNlcS0+cHJpdmF0ZSwgKnBvcykKKwkJOiBTRVFfU1RBUlRfVE9LRU47Cit9CisKK3N0YXRpYyB2b2lkICppbnRlcmZhY2VzX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCSgqcG9zKSsrOworCXJldHVybiBpbnRlcmZhY2VzX2dldF9pZHgoc2VxLT5wcml2YXRlLCAqcG9zKTsKK30KKworc3RhdGljIHZvaWQgaW50ZXJmYWNlc19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGludGVyZmFjZXNfc2VxX29wcyA9IHsKKwkuc3RhcnQgPSBpbnRlcmZhY2VzX3N0YXJ0LAorCS5uZXh0ICA9IGludGVyZmFjZXNfbmV4dCwKKwkuc3RvcCAgPSBpbnRlcmZhY2VzX3N0b3AsCisJLnNob3cgID0gaW50ZXJmYWNlc19zaG93Cit9OworCitzdGF0aWMgaW50IGludGVyZmFjZXNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgcmVzID0gc2VxX29wZW4oZmlsZSwgJmludGVyZmFjZXNfc2VxX29wcyk7CisKKwlpZiAocmVzID09IDApIHsKKwkJc3RydWN0IHNlcV9maWxlICpzZXEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJCXNlcS0+cHJpdmF0ZSA9IGlub2RlLT5pX3ByaXZhdGU7CisJfQorCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGludGVyZmFjZXNfcHJvY19mb3BzID0geworCS5vd25lciAgID0gVEhJU19NT0RVTEUsCisJLm9wZW4gICAgPSBpbnRlcmZhY2VzX29wZW4sCisJLnJlYWQgICAgPSBzZXFfcmVhZCwKKwkubGxzZWVrICA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAorfTsKKworLyoKKyAqIC9zeXMva2VybmVsL2RlYnVnZnMvY3hnYjR2Zi8gZmlsZXMgbGlzdC4KKyAqLworc3RydWN0IGN4Z2I0dmZfZGVidWdmc19lbnRyeSB7CisJY29uc3QgY2hhciAqbmFtZTsJCS8qIG5hbWUgb2YgZGVidWdmcyBub2RlICovCisJbW9kZV90IG1vZGU7CQkJLyogZmlsZSBzeXN0ZW0gbW9kZSAqLworCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHM7Cit9OworCitzdGF0aWMgc3RydWN0IGN4Z2I0dmZfZGVidWdmc19lbnRyeSBkZWJ1Z2ZzX2ZpbGVzW10gPSB7CisJeyAic2dlX3FpbmZvIiwgIFNfSVJVR08sICZzZ2VfcWluZm9fZGVidWdmc19mb3BzIH0sCisJeyAic2dlX3FzdGF0cyIsIFNfSVJVR08sICZzZ2VfcXN0YXRzX3Byb2NfZm9wcyB9LAorCXsgInJlc291cmNlcyIsICBTX0lSVUdPLCAmcmVzb3VyY2VzX3Byb2NfZm9wcyB9LAorCXsgImludGVyZmFjZXMiLCBTX0lSVUdPLCAmaW50ZXJmYWNlc19wcm9jX2ZvcHMgfSwKK307CisKKy8qCisgKiBNb2R1bGUgYW5kIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgY2xlYW51cCBjb2RlLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisvKgorICogU2V0IHVwIG91dCAvc3lzL2tlcm5lbC9kZWJ1Zy9jeGdiNHZmIHN1Yi1ub2Rlcy4gIFdlIGFzc3VtZSB0aGF0IHRoZQorICogZGlyZWN0b3J5IChkZWJ1Z2ZzX3Jvb3QpIGhhcyBhbHJlYWR5IGJlZW4gc2V0IHVwLgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzZXR1cF9kZWJ1Z2ZzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCisJQlVHX09OKGFkYXB0ZXItPmRlYnVnZnNfcm9vdCA9PSBOVUxMKTsKKworCS8qCisJICogRGVidWdmcyBzdXBwb3J0IGlzIGJlc3QgZWZmb3J0LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRlYnVnZnNfZmlsZXMpOyBpKyspCisJCSh2b2lkKWRlYnVnZnNfY3JlYXRlX2ZpbGUoZGVidWdmc19maWxlc1tpXS5uYW1lLAorCQkJCSAgZGVidWdmc19maWxlc1tpXS5tb2RlLAorCQkJCSAgYWRhcHRlci0+ZGVidWdmc19yb290LAorCQkJCSAgKHZvaWQgKilhZGFwdGVyLAorCQkJCSAgZGVidWdmc19maWxlc1tpXS5mb3BzKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGVhciBkb3duIHRoZSAvc3lzL2tlcm5lbC9kZWJ1Zy9jeGdiNHZmIHN1Yi1ub2RlcyBjcmVhdGVkIGFib3ZlLiAgV2UgbGVhdmUKKyAqIGl0IHRvIG91ciBjYWxsZXIgdG8gdGVhciBkb3duIHRoZSBkaXJlY3RvcnkgKGRlYnVnZnNfcm9vdCkuCisgKi8KK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBjbGVhbnVwX2RlYnVnZnMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJQlVHX09OKGFkYXB0ZXItPmRlYnVnZnNfcm9vdCA9PSBOVUxMKTsKKworCS8qCisJICogVW5saWtlIG91ciBzaXN0ZXIgcm91dGluZSBjbGVhbnVwX3Byb2MoKSwgd2UgZG9uJ3QgbmVlZCB0byByZW1vdmUKKwkgKiBpbmRpdmlkdWFsIGVudHJpZXMgYmVjYXVzZSBhIGNhbGwgd2lsbCBiZSBtYWRlIHRvCisJICogZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKCkuICBXZSBqdXN0IG5lZWQgdG8gY2xlYW4gdXAgYW55IGFuY2lsbGFyeQorCSAqIHBlcnNpc3RlbnQgc3RhdGUuCisJICovCisJLyogbm90aGluZyB0byBkbyAqLworfQorCisvKgorICogUGVyZm9ybSBlYXJseSAiYWRhcHRlciIgaW5pdGlhbGl6YXRpb24uICBUaGlzIGlzIHdoZXJlIHdlIGRpc2NvdmVyIHdoYXQKKyAqIGFkYXB0ZXIgcGFyYW1ldGVycyB3ZSdyZSBnb2luZyB0byBiZSB1c2luZyBhbmQgaW5pdGlhbGl6ZSBiYXNpYyBhZGFwdGVyCisgKiBoYXJkd2FyZSBzdXBwb3J0LgorICovCitzdGF0aWMgaW50IGFkYXBfaW5pdDAoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHZmX3Jlc291cmNlcyAqdmZyZXMgPSAmYWRhcHRlci0+cGFyYW1zLnZmcmVzOworCXN0cnVjdCBzZ2VfcGFyYW1zICpzZ2VfcGFyYW1zID0gJmFkYXB0ZXItPnBhcmFtcy5zZ2U7CisJc3RydWN0IHNnZSAqcyA9ICZhZGFwdGVyLT5zZ2U7CisJdW5zaWduZWQgaW50IGV0aHFzZXRzOworCWludCBlcnI7CisKKwkvKgorCSAqIFdhaXQgZm9yIHRoZSBkZXZpY2UgdG8gYmVjb21lIHJlYWR5IGJlZm9yZSBwcm9jZWVkaW5nIC4uLgorCSAqLworCWVyciA9IHQ0dmZfd2FpdF9kZXZfcmVhZHkoYWRhcHRlcik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGFkYXB0ZXItPnBkZXZfZGV2LCAiZGV2aWNlIGRpZG4ndCBiZWNvbWUgcmVhZHk6IgorCQkJIiBlcnI9JWRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyoKKwkgKiBHcmFiIGJhc2ljIG9wZXJhdGlvbmFsIHBhcmFtZXRlcnMuICBUaGVzZSB3aWxsIHByZWRvbWluYW50bHkgaGF2ZQorCSAqIGJlZW4gc2V0IHVwIGJ5IHRoZSBQaHlzaWNhbCBGdW5jdGlvbiBEcml2ZXIgb3Igd2lsbCBiZSBoYXJkIGNvZGVkCisJICogaW50byB0aGUgYWRhcHRlci4gIFdlIGp1c3QgaGF2ZSB0byBsaXZlIHdpdGggdGhlbSAuLi4gIE5vdGUgdGhhdAorCSAqIHdlIF9tdXN0XyBnZXQgb3VyIFZQRCBwYXJhbWV0ZXJzIGJlZm9yZSBvdXIgU0dFIHBhcmFtZXRlcnMgYmVjYXVzZQorCSAqIHdlIG5lZWQgdG8ga25vdyB0aGUgYWRhcHRlcidzIGNvcmUgY2xvY2sgZnJvbSB0aGUgVlBEIGluIG9yZGVyIHRvCisJICogcHJvcGVybHkgZGVjb2RlIHRoZSBTR0UgVGltZXIgVmFsdWVzLgorCSAqLworCWVyciA9IHQ0dmZfZ2V0X2Rldl9wYXJhbXMoYWRhcHRlcik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGFkYXB0ZXItPnBkZXZfZGV2LCAidW5hYmxlIHRvIHJldHJpZXZlIGFkYXB0ZXIiCisJCQkiIGRldmljZSBwYXJhbWV0ZXJzOiBlcnI9JWRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCWVyciA9IHQ0dmZfZ2V0X3ZwZF9wYXJhbXMoYWRhcHRlcik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGFkYXB0ZXItPnBkZXZfZGV2LCAidW5hYmxlIHRvIHJldHJpZXZlIGFkYXB0ZXIiCisJCQkiIFZQRCBwYXJhbWV0ZXJzOiBlcnI9JWRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCWVyciA9IHQ0dmZfZ2V0X3NnZV9wYXJhbXMoYWRhcHRlcik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGFkYXB0ZXItPnBkZXZfZGV2LCAidW5hYmxlIHRvIHJldHJpZXZlIGFkYXB0ZXIiCisJCQkiIFNHRSBwYXJhbWV0ZXJzOiBlcnI9JWRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCWVyciA9IHQ0dmZfZ2V0X3Jzc19nbGJfY29uZmlnKGFkYXB0ZXIpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5wZGV2X2RldiwgInVuYWJsZSB0byByZXRyaWV2ZSBhZGFwdGVyIgorCQkJIiBSU1MgcGFyYW1ldGVyczogZXJyPSVkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKwlpZiAoYWRhcHRlci0+cGFyYW1zLnJzcy5tb2RlICE9CisJICAgIEZXX1JTU19HTEJfQ09ORklHX0NNRF9NT0RFX0JBU0lDVklSVFVBTCkgeworCQlkZXZfZXJyKGFkYXB0ZXItPnBkZXZfZGV2LCAidW5hYmxlIHRvIG9wZXJhdGUgd2l0aCBnbG9iYWwgUlNTIgorCQkJIiBtb2RlICVkXG4iLCBhZGFwdGVyLT5wYXJhbXMucnNzLm1vZGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZXJyID0gdDR2Zl9zZ2VfaW5pdChhZGFwdGVyKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoYWRhcHRlci0+cGRldl9kZXYsICJ1bmFibGUgdG8gdXNlIGFkYXB0ZXIgcGFyYW1ldGVyczoiCisJCQkiIGVycj0lZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKgorCSAqIFJldHJpZXZlIG91ciBSWCBpbnRlcnJ1cHQgaG9sZG9mZiB0aW1lciB2YWx1ZXMgYW5kIGNvdW50ZXIKKwkgKiB0aHJlc2hvbGQgdmFsdWVzIGZyb20gdGhlIFNHRSBwYXJhbWV0ZXJzLgorCSAqLworCXMtPnRpbWVyX3ZhbFswXSA9IGNvcmVfdGlja3NfdG9fdXMoYWRhcHRlciwKKwkJVElNRVJWQUxVRTBfR0VUKHNnZV9wYXJhbXMtPnNnZV90aW1lcl92YWx1ZV8wX2FuZF8xKSk7CisJcy0+dGltZXJfdmFsWzFdID0gY29yZV90aWNrc190b191cyhhZGFwdGVyLAorCQlUSU1FUlZBTFVFMV9HRVQoc2dlX3BhcmFtcy0+c2dlX3RpbWVyX3ZhbHVlXzBfYW5kXzEpKTsKKwlzLT50aW1lcl92YWxbMl0gPSBjb3JlX3RpY2tzX3RvX3VzKGFkYXB0ZXIsCisJCVRJTUVSVkFMVUUwX0dFVChzZ2VfcGFyYW1zLT5zZ2VfdGltZXJfdmFsdWVfMl9hbmRfMykpOworCXMtPnRpbWVyX3ZhbFszXSA9IGNvcmVfdGlja3NfdG9fdXMoYWRhcHRlciwKKwkJVElNRVJWQUxVRTFfR0VUKHNnZV9wYXJhbXMtPnNnZV90aW1lcl92YWx1ZV8yX2FuZF8zKSk7CisJcy0+dGltZXJfdmFsWzRdID0gY29yZV90aWNrc190b191cyhhZGFwdGVyLAorCQlUSU1FUlZBTFVFMF9HRVQoc2dlX3BhcmFtcy0+c2dlX3RpbWVyX3ZhbHVlXzRfYW5kXzUpKTsKKwlzLT50aW1lcl92YWxbNV0gPSBjb3JlX3RpY2tzX3RvX3VzKGFkYXB0ZXIsCisJCVRJTUVSVkFMVUUxX0dFVChzZ2VfcGFyYW1zLT5zZ2VfdGltZXJfdmFsdWVfNF9hbmRfNSkpOworCisJcy0+Y291bnRlcl92YWxbMF0gPQorCQlUSFJFU0hPTERfMF9HRVQoc2dlX3BhcmFtcy0+c2dlX2luZ3Jlc3NfcnhfdGhyZXNob2xkKTsKKwlzLT5jb3VudGVyX3ZhbFsxXSA9CisJCVRIUkVTSE9MRF8xX0dFVChzZ2VfcGFyYW1zLT5zZ2VfaW5ncmVzc19yeF90aHJlc2hvbGQpOworCXMtPmNvdW50ZXJfdmFsWzJdID0KKwkJVEhSRVNIT0xEXzJfR0VUKHNnZV9wYXJhbXMtPnNnZV9pbmdyZXNzX3J4X3RocmVzaG9sZCk7CisJcy0+Y291bnRlcl92YWxbM10gPQorCQlUSFJFU0hPTERfM19HRVQoc2dlX3BhcmFtcy0+c2dlX2luZ3Jlc3NfcnhfdGhyZXNob2xkKTsKKworCS8qCisJICogR3JhYiBvdXIgVmlydHVhbCBJbnRlcmZhY2UgcmVzb3VyY2UgYWxsb2NhdGlvbiwgZXh0cmFjdCB0aGUKKwkgKiBmZWF0dXJlcyB0aGF0IHdlJ3JlIGludGVyZXN0ZWQgaW4gYW5kIGRvIGEgYml0IG9mIHNhbml0eSB0ZXN0aW5nIG9uCisJICogd2hhdCB3ZSBkaXNjb3Zlci4KKwkgKi8KKwllcnIgPSB0NHZmX2dldF92ZnJlcyhhZGFwdGVyKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoYWRhcHRlci0+cGRldl9kZXYsICJ1bmFibGUgdG8gZ2V0IHZpcnR1YWwgaW50ZXJmYWNlIgorCQkJIiByZXNvdXJjZXM6IGVycj0lZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgInBvcnRzIiB3aGljaCB3ZSBzdXBwb3J0IGlzIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YKKwkgKiBWaXJ0dWFsIEludGVyZmFjZXMgd2l0aCB3aGljaCB3ZSd2ZSBiZWVuIHByb3Zpc2lvbmVkLgorCSAqLworCWFkYXB0ZXItPnBhcmFtcy5ucG9ydHMgPSB2ZnJlcy0+bnZpOworCWlmIChhZGFwdGVyLT5wYXJhbXMubnBvcnRzID4gTUFYX05QT1JUUykgeworCQlkZXZfd2FybihhZGFwdGVyLT5wZGV2X2RldiwgIm9ubHkgdXNpbmcgJWQgb2YgJWQgYWxsb3dlZCIKKwkJCSAiIHZpcnR1YWwgaW50ZXJmYWNlc1xuIiwgTUFYX05QT1JUUywKKwkJCSBhZGFwdGVyLT5wYXJhbXMubnBvcnRzKTsKKwkJYWRhcHRlci0+cGFyYW1zLm5wb3J0cyA9IE1BWF9OUE9SVFM7CisJfQorCisJLyoKKwkgKiBXZSBuZWVkIHRvIHJlc2VydmUgYSBudW1iZXIgb2YgdGhlIGluZ3Jlc3MgcXVldWVzIHdpdGggRnJlZSBMaXN0CisJICogYW5kIEludGVycnVwdCBjYXBhYmlsaXRpZXMgZm9yIHNwZWNpYWwgaW50ZXJydXB0IHB1cnBvc2VzIChsaWtlCisJICogYXN5bmNocm9ub3VzIGZpcm13YXJlIG1lc3NhZ2VzLCBvciBmb3J3YXJkZWQgaW50ZXJydXB0cyBpZiB3ZSdyZQorCSAqIHVzaW5nIE1TSSkuICBUaGUgcmVzdCBvZiB0aGUgRkwvSW50ci1jYXBhYmxlIGluZ3Jlc3MgcXVldWVzIHdpbGwgYmUKKwkgKiBtYXRjaGVkIHVwIG9uZS1mb3Itb25lIHdpdGggRXRoZXJuZXQvQ29udHJvbCBlZ3Jlc3MgcXVldWVzIGluIG9yZGVyCisJICogdG8gZm9ybSAiUXVldWUgU2V0cyIgd2hpY2ggd2lsbCBiZSBhcG9ydGlvbmVkIGJldHdlZW4gdGhlICJwb3J0cyIuCisJICogRm9yIGVhY2ggUXVldWUgU2V0LCB3ZSdsbCBuZWVkIHRoZSBhYmlsaXR5IHRvIGFsbG9jYXRlIHR3byBFZ3Jlc3MKKwkgKiBDb250ZXh0cyAtLSBvbmUgZm9yIHRoZSBJbmdyZXNzIFF1ZXVlIEZyZWUgTGlzdCBhbmQgb25lIGZvciB0aGUgVFgKKwkgKiBFdGhlcm5ldCBRdWV1ZS4KKwkgKi8KKwlldGhxc2V0cyA9IHZmcmVzLT5uaXFmbGludCAtIElOR1FfRVhUUkFTOworCWlmICh2ZnJlcy0+bmV0aGN0cmwgIT0gZXRocXNldHMpIHsKKwkJZGV2X3dhcm4oYWRhcHRlci0+cGRldl9kZXYsICJ1bmVxdWFsIG51bWJlciBvZiBbYXZhaWxhYmxlXSIKKwkJCSAiIGluZ3Jlc3MvZWdyZXNzIHF1ZXVlcyAoJWQvJWQpOyB1c2luZyBtaW5pbXVtIGZvciIKKwkJCSAiIG51bWJlciBvZiBRdWV1ZSBTZXRzXG4iLCBldGhxc2V0cywgdmZyZXMtPm5ldGhjdHJsKTsKKwkJZXRocXNldHMgPSBtaW4odmZyZXMtPm5ldGhjdHJsLCBldGhxc2V0cyk7CisJfQorCWlmICh2ZnJlcy0+bmVxIDwgZXRocXNldHMqMikgeworCQlkZXZfd2FybihhZGFwdGVyLT5wZGV2X2RldiwgIk5vdCBlbm91Z2ggRWdyZXNzIENvbnRleHRzICglZCkiCisJCQkgIiB0byBzdXBwb3J0IFF1ZXVlIFNldHMgKCVkKTsgcmVkdWNpbmcgYWxsb3dlZCBRdWV1ZSIKKwkJCSAiIFNldHNcbiIsIHZmcmVzLT5uZXEsIGV0aHFzZXRzKTsKKwkJZXRocXNldHMgPSB2ZnJlcy0+bmVxLzI7CisJfQorCWlmIChldGhxc2V0cyA+IE1BWF9FVEhfUVNFVFMpIHsKKwkJZGV2X3dhcm4oYWRhcHRlci0+cGRldl9kZXYsICJvbmx5IHVzaW5nICVkIG9mICVkIGFsbG93ZWQgUXVldWUiCisJCQkgIiBTZXRzXG4iLCBNQVhfRVRIX1FTRVRTLCBhZGFwdGVyLT5zZ2UubWF4X2V0aHFzZXRzKTsKKwkJZXRocXNldHMgPSBNQVhfRVRIX1FTRVRTOworCX0KKwlpZiAodmZyZXMtPm5pcSAhPSAwIHx8IHZmcmVzLT5uZXEgPiBldGhxc2V0cyoyKSB7CisJCWRldl93YXJuKGFkYXB0ZXItPnBkZXZfZGV2LCAidW51c2VkIHJlc291cmNlcyBuaXEvbmVxICglZC8lZCkiCisJCQkgIiBpZ25vcmVkXG4iLCB2ZnJlcy0+bmlxLCB2ZnJlcy0+bmVxIC0gZXRocXNldHMqMik7CisJfQorCWFkYXB0ZXItPnNnZS5tYXhfZXRocXNldHMgPSBldGhxc2V0czsKKworCS8qCisJICogQ2hlY2sgZm9yIHZhcmlvdXMgcGFyYW1ldGVyIHNhbml0eSBpc3N1ZXMuICBNb3N0IGNoZWNrcyBzaW1wbHkKKwkgKiByZXN1bHQgaW4gdXMgdXNpbmcgZmV3ZXIgcmVzb3VyY2VzIHRoYW4gb3VyIHByb3Zpc3Npb25pbmcgYnV0IHdlCisJICogZG8gbmVlZCBhdCBsZWFzdCAgb25lICJwb3J0IiB3aXRoIHdoaWNoIHRvIHdvcmsgLi4uCisJICovCisJaWYgKGFkYXB0ZXItPnNnZS5tYXhfZXRocXNldHMgPCBhZGFwdGVyLT5wYXJhbXMubnBvcnRzKSB7CisJCWRldl93YXJuKGFkYXB0ZXItPnBkZXZfZGV2LCAib25seSB1c2luZyAlZCBvZiAlZCBhdmFpbGFibGUiCisJCQkgIiB2aXJ0dWFsIGludGVyZmFjZXMgKHRvbyBmZXcgUXVldWUgU2V0cylcbiIsCisJCQkgYWRhcHRlci0+c2dlLm1heF9ldGhxc2V0cywgYWRhcHRlci0+cGFyYW1zLm5wb3J0cyk7CisJCWFkYXB0ZXItPnBhcmFtcy5ucG9ydHMgPSBhZGFwdGVyLT5zZ2UubWF4X2V0aHFzZXRzOworCX0KKwlpZiAoYWRhcHRlci0+cGFyYW1zLm5wb3J0cyA9PSAwKSB7CisJCWRldl9lcnIoYWRhcHRlci0+cGRldl9kZXYsICJubyB2aXJ0dWFsIGludGVyZmFjZXMgY29uZmlndXJlZC8iCisJCQkidXNhYmxlIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfcnNwcShzdHJ1Y3Qgc2dlX3JzcHEgKnJzcHEsIHU4IHRpbWVyX2lkeCwKKwkJCSAgICAgdTggcGt0X2NudF9pZHgsIHVuc2lnbmVkIGludCBzaXplLAorCQkJICAgICB1bnNpZ25lZCBpbnQgaXFlX3NpemUpCit7CisJcnNwcS0+aW50cl9wYXJhbXMgPSAoUUlOVFJfVElNRVJfSURYKHRpbWVyX2lkeCkgfAorCQkJICAgICAocGt0X2NudF9pZHggPCBTR0VfTkNPVU5URVJTID8gUUlOVFJfQ05UX0VOIDogMCkpOworCXJzcHEtPnBrdGNudF9pZHggPSAocGt0X2NudF9pZHggPCBTR0VfTkNPVU5URVJTCisJCQkgICAgPyBwa3RfY250X2lkeAorCQkJICAgIDogMCk7CisJcnNwcS0+aXFlX2xlbiA9IGlxZV9zaXplOworCXJzcHEtPnNpemUgPSBzaXplOworfQorCisvKgorICogUGVyZm9ybSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb2YgRE1BIHF1ZXVlcyBkZXBlbmRpbmcgb24gdGhlIG51bWJlciBhbmQKKyAqIHR5cGUgb2YgcG9ydHMgd2UgZm91bmQgYW5kIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIENQVXMuICBNb3N0IHNldHRpbmdzIGNhbgorICogYmUgbW9kaWZpZWQgYnkgdGhlIGFkbWluIHZpYSBldGh0b29sIGFuZCBjeGdidG9vbCBwcmlvciB0byB0aGUgYWRhcHRlcgorICogYmVpbmcgYnJvdWdodCB1cCBmb3IgdGhlIGZpcnN0IHRpbWUuCisgKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBjZmdfcXVldWVzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBzZ2UgKnMgPSAmYWRhcHRlci0+c2dlOworCWludCBxMTBnLCBuMTBnLCBxaWR4LCBwaWR4LCBxczsKKworCS8qCisJICogV2Ugc2hvdWxkIG5vdCBiZSBjYWxsZWQgdGlsbCB3ZSBrbm93IGhvdyBtYW55IFF1ZXVlIFNldHMgd2UgY2FuCisJICogc3VwcG9ydC4gIEluIHBhcnRpY3VsYXIsIHRoaXMgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGtub3cgd2hhdCBraW5kCisJICogb2YgaW50ZXJydXB0cyB3ZSdsbCBiZSB1c2luZyAuLi4KKwkgKi8KKwlCVUdfT04oKGFkYXB0ZXItPmZsYWdzICYgKFVTSU5HX01TSVh8VVNJTkdfTVNJKSkgPT0gMCk7CisKKwkvKgorCSAqIENvdW50IHRoZSBudW1iZXIgb2YgMTBHYkUgVmlydHVhbCBJbnRlcmZhY2VzIHRoYXQgd2UgaGF2ZS4KKwkgKi8KKwluMTBnID0gMDsKKwlmb3JfZWFjaF9wb3J0KGFkYXB0ZXIsIHBpZHgpCisJCW4xMGcgKz0gaXNfMTBnX3BvcnQoJmFkYXAycGluZm8oYWRhcHRlciwgcGlkeCktPmxpbmtfY2ZnKTsKKworCS8qCisJICogV2UgZGVmYXVsdCB0byAxIHF1ZXVlIHBlciBub24tMTBHIHBvcnQgYW5kIHVwIHRvICMgb2YgY29yZXMgcXVldWVzCisJICogcGVyIDEwRyBwb3J0LgorCSAqLworCWlmIChuMTBnID09IDApCisJCXExMGcgPSAwOworCWVsc2UgeworCQlpbnQgbjFnID0gKGFkYXB0ZXItPnBhcmFtcy5ucG9ydHMgLSBuMTBnKTsKKwkJcTEwZyA9IChhZGFwdGVyLT5zZ2UubWF4X2V0aHFzZXRzIC0gbjFnKSAvIG4xMGc7CisJCWlmIChxMTBnID4gbnVtX29ubGluZV9jcHVzKCkpCisJCQlxMTBnID0gbnVtX29ubGluZV9jcHVzKCk7CisJfQorCisJLyoKKwkgKiBBbGxvY2F0ZSB0aGUgIlF1ZXVlIFNldHMiIHRvIHRoZSB2YXJpb3VzIFZpcnR1YWwgSW50ZXJmYWNlcy4KKwkgKiBUaGUgbGF5b3V0IHdpbGwgYmUgZXN0YWJsaXNoZWQgaW4gc2V0dXBfc2dlX3F1ZXVlcygpIHdoZW4gdGhlCisJICogYWRhcHRlciBpcyBicm91Z2ggdXAgZm9yIHRoZSBmaXJzdCB0aW1lLgorCSAqLworCXFpZHggPSAwOworCWZvcl9lYWNoX3BvcnQoYWRhcHRlciwgcGlkeCkgeworCQlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IGFkYXAycGluZm8oYWRhcHRlciwgcGlkeCk7CisKKwkJcGktPmZpcnN0X3FzZXQgPSBxaWR4OworCQlwaS0+bnFzZXRzID0gaXNfMTBnX3BvcnQoJnBpLT5saW5rX2NmZykgPyBxMTBnIDogMTsKKwkJcWlkeCArPSBwaS0+bnFzZXRzOworCX0KKwlzLT5ldGhxc2V0cyA9IHFpZHg7CisKKwkvKgorCSAqIFNldCB1cCBkZWZhdWx0IFF1ZXVlIFNldCBwYXJhbWV0ZXJzIC4uLiAgU3RhcnQgb2ZmIHdpdGggdGhlCisJICogc2hvcnRlc3QgaW50ZXJydXB0IGhvbGRvZmYgdGltZXIuCisJICovCisJZm9yIChxcyA9IDA7IHFzIDwgcy0+bWF4X2V0aHFzZXRzOyBxcysrKSB7CisJCXN0cnVjdCBzZ2VfZXRoX3J4cSAqcnhxID0gJnMtPmV0aHJ4cVtxc107CisJCXN0cnVjdCBzZ2VfZXRoX3R4cSAqdHhxID0gJnMtPmV0aHR4cVtxc107CisKKwkJaW5pdF9yc3BxKCZyeHEtPnJzcHEsIDAsIDAsIDEwMjQsIEwxX0NBQ0hFX0JZVEVTKTsKKwkJcnhxLT5mbC5zaXplID0gNzI7CisJCXR4cS0+cS5zaXplID0gMTAyNDsKKwl9CisKKwkvKgorCSAqIFRoZSBmaXJtd2FyZSBldmVudCBxdWV1ZSBpcyB1c2VkIGZvciBsaW5rIHN0YXRlIGNoYW5nZXMgYW5kCisJICogbm90aWZpY2F0aW9ucyBvZiBUWCBETUEgY29tcGxldGlvbnMuCisJICovCisJaW5pdF9yc3BxKCZzLT5md19ldnRxLCBTR0VfVElNRVJfUlNUUlRfQ05UUiwgMCwgNTEyLAorCQkgIEwxX0NBQ0hFX0JZVEVTKTsKKworCS8qCisJICogVGhlIGZvcndhcmRlZCBpbnRlcnJ1cHQgcXVldWUgaXMgdXNlZCB3aGVuIHdlJ3JlIGluIE1TSSBpbnRlcnJ1cHQKKwkgKiBtb2RlLiAgSW4gdGhpcyBtb2RlIGFsbCBpbnRlcnJ1cHRzIGFzc29jaWF0ZWQgd2l0aCBSWCBxdWV1ZXMgd2lsbAorCSAqIGJlIGZvcndhcmRlZCB0byBhIHNpbmdsZSBxdWV1ZSB3aGljaCB3ZSdsbCBhc3NvY2lhdGUgd2l0aCBvdXIgTVNJCisJICogaW50ZXJydXB0IHZlY3Rvci4gIFRoZSBtZXNzYWdlcyBkcm9wcGVkIGluIHRoZSBmb3J3YXJkZWQgaW50ZXJydXB0CisJICogcXVldWUgd2lsbCBpbmRpY2F0ZSB3aGljaCBpbmdyZXNzIHF1ZXVlIG5lZWRzIHNlcnZpY2luZyAuLi4gIFRoaXMKKwkgKiBxdWV1ZSBuZWVkcyB0byBiZSBsYXJnZSBlbm91Z2ggdG8gYWNjb21tb2RhdGUgYWxsIG9mIHRoZSBpbmdyZXNzCisJICogcXVldWVzIHdoaWNoIGFyZSBmb3J3YXJkaW5nIHRoZWlyIGludGVycnVwdCAoKzEgdG8gcHJldmVudCB0aGUgUElEWAorCSAqIGZyb20gZXF1YWxsaW5nIHRoZSBDSURYIGlmIGV2ZXJ5IGluZ3Jlc3MgcXVldWUgaGFzIGFuIG91dHN0YW5kaW5nCisJICogaW50ZXJydXB0KS4gIFRoZSBxdWV1ZSBkb2Vzbid0IG5lZWQgdG8gYmUgYW55IGxhcmdlciBiZWNhdXNlIG5vCisJICogaW5ncmVzcyBxdWV1ZSB3aWxsIGV2ZXIgaGF2ZSBtb3JlIHRoYW4gb25lIG91dHN0YW5kaW5nIGludGVycnVwdCBhdAorCSAqIGFueSB0aW1lIC4uLgorCSAqLworCWluaXRfcnNwcSgmcy0+aW50cnEsIFNHRV9USU1FUl9SU1RSVF9DTlRSLCAwLCBNU0lYX0VOVFJJRVMgKyAxLAorCQkgIEwxX0NBQ0hFX0JZVEVTKTsKK30KKworLyoKKyAqIFJlZHVjZSB0aGUgbnVtYmVyIG9mIEV0aGVybmV0IHF1ZXVlcyBhY3Jvc3MgYWxsIHBvcnRzIHRvIGF0IG1vc3Qgbi4KKyAqIG4gcHJvdmlkZXMgYXQgbGVhc3Qgb25lIHF1ZXVlIHBlciBwb3J0LgorICovCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcmVkdWNlX2V0aHFzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgbikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcG9ydF9pbmZvICpwaTsKKworCS8qCisJICogV2hpbGUgd2UgaGF2ZSB0b28gbWFueSBhY3RpdmUgRXRoZXIgUXVldWUgU2V0cywgaW50ZXJhdGUgYWNyb3NzIHRoZQorCSAqICJwb3J0cyIgYW5kIHJlZHVjZSB0aGVpciBpbmRpdmlkdWFsIFF1ZXVlIFNldCBhbGxvY2F0aW9ucy4KKwkgKi8KKwlCVUdfT04obiA8IGFkYXB0ZXItPnBhcmFtcy5ucG9ydHMpOworCXdoaWxlIChuIDwgYWRhcHRlci0+c2dlLmV0aHFzZXRzKQorCQlmb3JfZWFjaF9wb3J0KGFkYXB0ZXIsIGkpIHsKKwkJCXBpID0gYWRhcDJwaW5mbyhhZGFwdGVyLCBpKTsKKwkJCWlmIChwaS0+bnFzZXRzID4gMSkgeworCQkJCXBpLT5ucXNldHMtLTsKKwkJCQlhZGFwdGVyLT5zZ2UuZXRocXNldHMtLTsKKwkJCQlpZiAoYWRhcHRlci0+c2dlLmV0aHFzZXRzIDw9IG4pCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkvKgorCSAqIFJlYXNzaWduIHRoZSBzdGFydGluZyBRdWV1ZSBTZXRzIGZvciBlYWNoIG9mIHRoZSAicG9ydHMiIC4uLgorCSAqLworCW4gPSAwOworCWZvcl9lYWNoX3BvcnQoYWRhcHRlciwgaSkgeworCQlwaSA9IGFkYXAycGluZm8oYWRhcHRlciwgaSk7CisJCXBpLT5maXJzdF9xc2V0ID0gbjsKKwkJbiArPSBwaS0+bnFzZXRzOworCX0KK30KKworLyoKKyAqIFdlIG5lZWQgdG8gZ3JhYiBlbm91Z2ggTVNJLVggdmVjdG9ycyB0byBjb3ZlciBvdXIgaW50ZXJydXB0IG5lZWRzLiAgSWRlYWxseQorICogd2UgZ2V0IGEgc2VwYXJhdGUgTVNJLVggdmVjdG9yIGZvciBldmVyeSAiUXVldWUgU2V0IiBwbHVzIGFueSBleHRyYXMgd2UKKyAqIG5lZWQuICBNaW5pbWFsbHkgd2UgbmVlZCBvbmUgZm9yIGV2ZXJ5IFZpcnR1YWwgSW50ZXJmYWNlIHBsdXMgdGhvc2UgbmVlZGVkCisgKiBmb3Igb3VyICJleHRyYXMiLiAgTm90ZSB0aGF0IHRoaXMgcHJvY2VzcyBtYXkgbG93ZXIgdGhlIG1heGltdW0gbnVtYmVyIG9mCisgKiBhbGxvd2VkIFF1ZXVlIFNldHMgLi4uCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IGVuYWJsZV9tc2l4KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCWludCBpLCBlcnIsIHdhbnQsIG5lZWQ7CisJc3RydWN0IG1zaXhfZW50cnkgZW50cmllc1tNU0lYX0VOVFJJRVNdOworCXN0cnVjdCBzZ2UgKnMgPSAmYWRhcHRlci0+c2dlOworCisJZm9yIChpID0gMDsgaSA8IE1TSVhfRU5UUklFUzsgKytpKQorCQllbnRyaWVzW2ldLmVudHJ5ID0gaTsKKworCS8qCisJICogV2UgX3dhbnRfIGVub3VnaCBNU0ktWCBpbnRlcnJ1cHRzIHRvIGNvdmVyIGFsbCBvZiBvdXIgIlF1ZXVlIFNldHMiCisJICogcGx1cyB0aG9zZSBuZWVkZWQgZm9yIG91ciAiZXh0cmFzIiAoZm9yIGV4YW1wbGUsIHRoZSBmaXJtd2FyZQorCSAqIG1lc3NhZ2UgcXVldWUpLiAgV2UgX25lZWRfIGF0IGxlYXN0IG9uZSAiUXVldWUgU2V0IiBwZXIgVmlydHVhbAorCSAqIEludGVyZmFjZSBwbHVzIHRob3NlIG5lZWRlZCBmb3Igb3VyICJleHRyYXMiLiAgU28gbm93IHdlIGdldCB0byBzZWUKKwkgKiBpZiB0aGUgc29uZyBpcyByaWdodCAuLi4KKwkgKi8KKwl3YW50ID0gcy0+bWF4X2V0aHFzZXRzICsgTVNJWF9FWFRSQVM7CisJbmVlZCA9IGFkYXB0ZXItPnBhcmFtcy5ucG9ydHMgKyBNU0lYX0VYVFJBUzsKKwl3aGlsZSAoKGVyciA9IHBjaV9lbmFibGVfbXNpeChhZGFwdGVyLT5wZGV2LCBlbnRyaWVzLCB3YW50KSkgPj0gbmVlZCkKKwkJd2FudCA9IGVycjsKKworCWlmIChlcnIgPT0gMCkgeworCQlpbnQgbnFzZXRzID0gd2FudCAtIE1TSVhfRVhUUkFTOworCQlpZiAobnFzZXRzIDwgcy0+bWF4X2V0aHFzZXRzKSB7CisJCQlkZXZfd2FybihhZGFwdGVyLT5wZGV2X2RldiwgIm9ubHkgZW5vdWdoIE1TSS1YIHZlY3RvcnMiCisJCQkJICIgZm9yICVkIFF1ZXVlIFNldHNcbiIsIG5xc2V0cyk7CisJCQlzLT5tYXhfZXRocXNldHMgPSBucXNldHM7CisJCQlpZiAobnFzZXRzIDwgcy0+ZXRocXNldHMpCisJCQkJcmVkdWNlX2V0aHFzKGFkYXB0ZXIsIG5xc2V0cyk7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IHdhbnQ7ICsraSkKKwkJCWFkYXB0ZXItPm1zaXhfaW5mb1tpXS52ZWMgPSBlbnRyaWVzW2ldLnZlY3RvcjsKKwl9IGVsc2UgaWYgKGVyciA+IDApIHsKKwkJcGNpX2Rpc2FibGVfbXNpeChhZGFwdGVyLT5wZGV2KTsKKwkJZGV2X2luZm8oYWRhcHRlci0+cGRldl9kZXYsICJvbmx5ICVkIE1TSS1YIHZlY3RvcnMgbGVmdCwiCisJCQkgIiBub3QgdXNpbmcgTVNJLVhcbiIsIGVycik7CisJfQorCXJldHVybiBlcnI7Cit9CisKKyNpZmRlZiBIQVZFX05FVF9ERVZJQ0VfT1BTCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGN4Z2I0dmZfbmV0ZGV2X29wcwk9IHsKKwkubmRvX29wZW4JCT0gY3hnYjR2Zl9vcGVuLAorCS5uZG9fc3RvcAkJPSBjeGdiNHZmX3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IHQ0dmZfZXRoX3htaXQsCisJLm5kb19nZXRfc3RhdHMJCT0gY3hnYjR2Zl9nZXRfc3RhdHMsCisJLm5kb19zZXRfcnhfbW9kZQk9IGN4Z2I0dmZfc2V0X3J4bW9kZSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGN4Z2I0dmZfc2V0X21hY19hZGRyLAorCS5uZG9fc2VsZWN0X3F1ZXVlCT0gY3hnYjR2Zl9zZWxlY3RfcXVldWUsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb19kb19pb2N0bAkJPSBjeGdiNHZmX2RvX2lvY3RsLAorCS5uZG9fY2hhbmdlX210dQkJPSBjeGdiNHZmX2NoYW5nZV9tdHUsCisJLm5kb192bGFuX3J4X3JlZ2lzdGVyCT0gY3hnYjR2Zl92bGFuX3J4X3JlZ2lzdGVyLAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBjeGdiNHZmX3BvbGxfY29udHJvbGxlciwKKyNlbmRpZgorfTsKKyNlbmRpZgorCisvKgorICogIlByb2JlIiBhIGRldmljZTogaW5pdGlhbGl6ZSBhIGRldmljZSBhbmQgY29uc3RydWN0IGFsbCBrZXJuZWwgYW5kIGRyaXZlcgorICogc3RhdGUgbmVlZGVkIHRvIG1hbmFnZSB0aGUgZGV2aWNlLiAgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCAiaW5pdF9vbmUiIGluCisgKiB0aGUgUEYgRHJpdmVyIC4uLgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBjeGdiNHZmX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlzdGF0aWMgaW50IHZlcnNpb25fcHJpbnRlZDsKKworCWludCBwY2lfdXNpbmdfZGFjOworCWludCBlcnIsIHBpZHg7CisJdW5zaWduZWQgaW50IHBtYXNrOworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyOworCXN0cnVjdCBwb3J0X2luZm8gKnBpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisKKwkvKgorCSAqIFZldCBvdXIgbW9kdWxlIHBhcmFtZXRlcnMuCisJICovCisJaWYgKG1zaSAhPSBNU0lfTVNJWCAmJiBtc2kgIT0gTVNJX01TSSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJiYWQgbW9kdWxlIHBhcmFtZXRlciBtc2k9JWQ7IG11c3QgYmUgJWQiCisJCQkiIChNU0ktWCBvciBNU0kpIG9yICVkIChNU0kpXG4iLCBtc2ksIE1TSV9NU0lYLAorCQkJTVNJX01TSSk7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwkvKgorCSAqIFByaW50IG91ciBkcml2ZXIgYmFubmVyIHRoZSBmaXJzdCB0aW1lIHdlJ3JlIGNhbGxlZCB0byBpbml0aWFsaXplIGEKKwkgKiBkZXZpY2UuCisJICovCisJaWYgKHZlcnNpb25fcHJpbnRlZCA9PSAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzIC0gdmVyc2lvbiAlc1xuIiwgRFJWX0RFU0MsIERSVl9WRVJTSU9OKTsKKwkJdmVyc2lvbl9wcmludGVkID0gMTsKKwl9CisKKwkvKgorCSAqIFJlc2VydmUgUENJIHJlc291cmNlcyBmb3IgdGhlIGRldmljZS4gIElmIHdlIGNhbid0IGdldCB0aGVtIHNvbWUKKwkgKiBvdGhlciBkcml2ZXIgbWF5IGhhdmUgYWxyZWFkeSBjbGFpbWVkIHRoZSBkZXZpY2UgLi4uCisJICovCisJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBLQlVJTERfTU9ETkFNRSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qCisJICogSW5pdGlhbGl6ZSBnZW5lcmljIFBDSSBkZXZpY2Ugc3RhdGUuCisJICovCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2VcbiIpOworCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbnM7CisJfQorCisJLyoKKwkgKiBTZXQgdXAgb3VyIERNQSBtYXNrOiB0cnkgZm9yIDY0LWJpdCBhZGRyZXNzIG1hc2tpbmcgZmlyc3QgYW5kCisJICogZmFsbCBiYWNrIHRvIDMyLWJpdCBpZiB3ZSBjYW4ndCBnZXQgNjQgYml0cyAuLi4KKwkgKi8KKwllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSyg2NCkpOworCWlmIChlcnIgPT0gMCkgeworCQllcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSk7CisJCWlmIChlcnIpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBvYnRhaW4gNjQtYml0IERNQSBmb3IiCisJCQkJIiBjb2hlcmVudCBhbGxvY2F0aW9uc1xuIik7CisJCQlnb3RvIGVycl9kaXNhYmxlX2RldmljZTsKKwkJfQorCQlwY2lfdXNpbmdfZGFjID0gMTsKKwl9IGVsc2UgeworCQllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpOworCQlpZiAoZXJyICE9IDApIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvblxuIik7CisJCQlnb3RvIGVycl9kaXNhYmxlX2RldmljZTsKKwkJfQorCQlwY2lfdXNpbmdfZGFjID0gMDsKKwl9CisKKwkvKgorCSAqIEVuYWJsZSBidXMgbWFzdGVyaW5nIGZvciB0aGUgZGV2aWNlIC4uLgorCSAqLworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJLyoKKwkgKiBBbGxvY2F0ZSBvdXIgYWRhcHRlciBkYXRhIHN0cnVjdHVyZSBhbmQgYXR0YWNoIGl0IHRvIHRoZSBkZXZpY2UuCisJICovCisJYWRhcHRlciA9IGt6YWxsb2Moc2l6ZW9mKCphZGFwdGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhZGFwdGVyKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2Rpc2FibGVfZGV2aWNlOworCX0KKwlwY2lfc2V0X2RydmRhdGEocGRldiwgYWRhcHRlcik7CisJYWRhcHRlci0+cGRldiA9IHBkZXY7CisJYWRhcHRlci0+cGRldl9kZXYgPSAmcGRldi0+ZGV2OworCisJLyoKKwkgKiBJbml0aWFsaXplIFNNUCBkYXRhIHN5bmNocm9uaXphdGlvbiByZXNvdXJjZXMuCisJICovCisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnN0YXRzX2xvY2spOworCisJLyoKKwkgKiBNYXAgb3VyIEkvTyByZWdpc3RlcnMgaW4gQkFSMC4KKwkgKi8KKwlhZGFwdGVyLT5yZWdzID0gcGNpX2lvcmVtYXBfYmFyKHBkZXYsIDApOworCWlmICghYWRhcHRlci0+cmVncykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgbWFwIGRldmljZSByZWdpc3RlcnNcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX2FkYXB0ZXI7CisJfQorCisJLyoKKwkgKiBJbml0aWFsaXplIGFkYXB0ZXIgbGV2ZWwgZmVhdHVyZXMuCisJICovCisJYWRhcHRlci0+bmFtZSA9IHBjaV9uYW1lKHBkZXYpOworCWFkYXB0ZXItPm1zZ19lbmFibGUgPSBkZmx0X21zZ19lbmFibGU7CisJZXJyID0gYWRhcF9pbml0MChhZGFwdGVyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl91bm1hcF9iYXI7CisKKwkvKgorCSAqIEFsbG9jYXRlIG91ciAiYWRhcHRlciBwb3J0cyIgYW5kIHN0aXRjaCBldmVyeXRoaW5nIHRvZ2V0aGVyLgorCSAqLworCXBtYXNrID0gYWRhcHRlci0+cGFyYW1zLnZmcmVzLnBtYXNrOworCWZvcl9lYWNoX3BvcnQoYWRhcHRlciwgcGlkeCkgeworCQlpbnQgcG9ydF9pZCwgdmlpZDsKKworCQkvKgorCQkgKiBXZSBzaW1wbGlzdGljYWxseSBhbGxvY2F0ZSBvdXIgdmlydHVhbCBpbnRlcmZhY2VzCisJCSAqIHNlcXVlbnRpYWxseSBhY3Jvc3MgdGhlIHBvcnQgbnVtYmVycyB0byB3aGljaCB3ZSBoYXZlCisJCSAqIGFjY2VzcyByaWdodHMuICBUaGlzIHNob3VsZCBiZSBjb25maWd1cmFibGUgaW4gc29tZSBtYW5uZXIKKwkJICogLi4uCisJCSAqLworCQlpZiAocG1hc2sgPT0gMCkKKwkJCWJyZWFrOworCQlwb3J0X2lkID0gZmZzKHBtYXNrKSAtIDE7CisJCXBtYXNrICY9IH4oMSA8PCBwb3J0X2lkKTsKKwkJdmlpZCA9IHQ0dmZfYWxsb2NfdmkoYWRhcHRlciwgcG9ydF9pZCk7CisJCWlmICh2aWlkIDwgMCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIFZJIGZvciBwb3J0ICVkOiIKKwkJCQkiIGVycj0lZFxuIiwgcG9ydF9pZCwgdmlpZCk7CisJCQllcnIgPSB2aWlkOworCQkJZ290byBlcnJfZnJlZV9kZXY7CisJCX0KKworCQkvKgorCQkgKiBBbGxvY2F0ZSBvdXIgbmV0d29yayBkZXZpY2UgYW5kIHN0aXRjaCB0aGluZ3MgdG9nZXRoZXIuCisJCSAqLworCQluZXRkZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2Yoc3RydWN0IHBvcnRfaW5mbyksCisJCQkJCSAgIE1BWF9QT1JUX1FTRVRTKTsKKwkJaWYgKG5ldGRldiA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgbmV0ZGV2IGZvciIKKwkJCQkiIHBvcnQgJWRcbiIsIHBvcnRfaWQpOworCQkJdDR2Zl9mcmVlX3ZpKGFkYXB0ZXIsIHZpaWQpOworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyX2ZyZWVfZGV2OworCQl9CisJCWFkYXB0ZXItPnBvcnRbcGlkeF0gPSBuZXRkZXY7CisJCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJnBkZXYtPmRldik7CisJCXBpID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwkJcGktPmFkYXB0ZXIgPSBhZGFwdGVyOworCQlwaS0+cGlkeCA9IHBpZHg7CisJCXBpLT5wb3J0X2lkID0gcG9ydF9pZDsKKwkJcGktPnZpaWQgPSB2aWlkOworCisJCS8qCisJCSAqIEluaXRpYWxpemUgdGhlIHN0YXJ0aW5nIHN0YXRlIG9mIG91ciAicG9ydCIgYW5kIHJlZ2lzdGVyCisJCSAqIGl0LgorCQkgKi8KKwkJcGktPnhhY3RfYWRkcl9maWx0ID0gLTE7CisJCXBpLT5yeF9vZmZsb2FkID0gUlhfQ1NPOworCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKKwkJbmV0ZGV2LT5pcnEgPSBwZGV2LT5pcnE7CisKKwkJbmV0ZGV2LT5mZWF0dXJlcyA9IChORVRJRl9GX1NHIHwgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfAorCQkJCSAgICBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSB8CisJCQkJICAgIE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWCB8CisJCQkJICAgIE5FVElGX0ZfR1JPKTsKKwkJaWYgKHBjaV91c2luZ19kYWMpCisJCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKKwkJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzID0KKwkJCShuZXRkZXYtPmZlYXR1cmVzICYKKwkJCSB+KE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWCkpOworCisjaWZkZWYgSEFWRV9ORVRfREVWSUNFX09QUworCQluZXRkZXYtPm5ldGRldl9vcHMgPSAmY3hnYjR2Zl9uZXRkZXZfb3BzOworI2Vsc2UKKwkJbmV0ZGV2LT52bGFuX3J4X3JlZ2lzdGVyID0gY3hnYjR2Zl92bGFuX3J4X3JlZ2lzdGVyOworCQluZXRkZXYtPm9wZW4gPSBjeGdiNHZmX29wZW47CisJCW5ldGRldi0+c3RvcCA9IGN4Z2I0dmZfc3RvcDsKKwkJbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB0NHZmX2V0aF94bWl0OworCQluZXRkZXYtPmdldF9zdGF0cyA9IGN4Z2I0dmZfZ2V0X3N0YXRzOworCQluZXRkZXYtPnNldF9yeF9tb2RlID0gY3hnYjR2Zl9zZXRfcnhtb2RlOworCQluZXRkZXYtPmRvX2lvY3RsID0gY3hnYjR2Zl9kb19pb2N0bDsKKwkJbmV0ZGV2LT5jaGFuZ2VfbXR1ID0gY3hnYjR2Zl9jaGFuZ2VfbXR1OworCQluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9IGN4Z2I0dmZfc2V0X21hY19hZGRyOworCQluZXRkZXYtPnNlbGVjdF9xdWV1ZSA9IGN4Z2I0dmZfc2VsZWN0X3F1ZXVlOworI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJCW5ldGRldi0+cG9sbF9jb250cm9sbGVyID0gY3hnYjR2Zl9wb2xsX2NvbnRyb2xsZXI7CisjZW5kaWYKKyNlbmRpZgorCQlTRVRfRVRIVE9PTF9PUFMobmV0ZGV2LCAmY3hnYjR2Zl9ldGh0b29sX29wcyk7CisKKwkJLyoKKwkJICogSW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmUvc29mdHdhcmUgc3RhdGUgZm9yIHRoZSBwb3J0LgorCQkgKi8KKwkJZXJyID0gdDR2Zl9wb3J0X2luaXQoYWRhcHRlciwgcGlkeCk7CisJCWlmIChlcnIpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBpbml0aWFsaXplIHBvcnQgJWRcbiIsCisJCQkJcGlkeCk7CisJCQlnb3RvIGVycl9mcmVlX2RldjsKKwkJfQorCX0KKworCS8qCisJICogVGhlICJjYXJkIiBpcyBub3cgcmVhZHkgdG8gZ28uICBJZiBhbnkgZXJyb3JzIG9jY3VyIGR1cmluZyBkZXZpY2UKKwkgKiByZWdpc3RyYXRpb24gd2UgZG8gbm90IGZhaWwgdGhlIHdob2xlICJjYXJkIiBidXQgcmF0aGVyIHByb2NlZWQKKwkgKiBvbmx5IHdpdGggdGhlIHBvcnRzIHdlIG1hbmFnZSB0byByZWdpc3RlciBzdWNjZXNzZnVsbHkuICBIb3dldmVyIHdlCisJICogbXVzdCByZWdpc3RlciBhdCBsZWFzdCBvbmUgbmV0IGRldmljZS4KKwkgKi8KKwlmb3JfZWFjaF9wb3J0KGFkYXB0ZXIsIHBpZHgpIHsKKwkJbmV0ZGV2ID0gYWRhcHRlci0+cG9ydFtwaWR4XTsKKwkJaWYgKG5ldGRldiA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CisJCWlmIChlcnIpIHsKKwkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSAlcywiCisJCQkJICIgc2tpcHBpbmdcbiIsIG5ldGRldi0+bmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXNldF9iaXQocGlkeCwgJmFkYXB0ZXItPnJlZ2lzdGVyZWRfZGV2aWNlX21hcCk7CisJfQorCWlmIChhZGFwdGVyLT5yZWdpc3RlcmVkX2RldmljZV9tYXAgPT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgYW55IG5ldCBkZXZpY2VzXG4iKTsKKwkJZ290byBlcnJfZnJlZV9kZXY7CisJfQorCisJLyoKKwkgKiBTZXQgdXAgb3VyIGRlYnVnZnMgZW50cmllcy4KKwkgKi8KKwlpZiAoY3hnYjR2Zl9kZWJ1Z2ZzX3Jvb3QpIHsKKwkJYWRhcHRlci0+ZGVidWdmc19yb290ID0KKwkJCWRlYnVnZnNfY3JlYXRlX2RpcihwY2lfbmFtZShwZGV2KSwKKwkJCQkJICAgY3hnYjR2Zl9kZWJ1Z2ZzX3Jvb3QpOworCQlpZiAoYWRhcHRlci0+ZGVidWdmc19yb290ID09IE5VTEwpCisJCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiY291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzIgorCQkJCSAiIGRpcmVjdG9yeSIpOworCQllbHNlCisJCQlzZXR1cF9kZWJ1Z2ZzKGFkYXB0ZXIpOworCX0KKworCS8qCisJICogU2VlIHdoYXQgaW50ZXJydXB0cyB3ZSdsbCBiZSB1c2luZy4gIElmIHdlJ3ZlIGJlZW4gY29uZmlndXJlZCB0bworCSAqIHVzZSBNU0ktWCBpbnRlcnJ1cHRzLCB0cnkgdG8gZW5hYmxlIHRoZW0gYnV0IGZhbGwgYmFjayB0byB1c2luZworCSAqIE1TSSBpbnRlcnJ1cHRzIGlmIHdlIGNhbid0IGVuYWJsZSBNU0ktWCBpbnRlcnJ1cHRzLiAgSWYgd2UgY2FuJ3QKKwkgKiBnZXQgTVNJIGludGVycnVwdHMgd2UgYmFpbCB3aXRoIHRoZSBlcnJvci4KKwkgKi8KKwlpZiAobXNpID09IE1TSV9NU0lYICYmIGVuYWJsZV9tc2l4KGFkYXB0ZXIpID09IDApCisJCWFkYXB0ZXItPmZsYWdzIHw9IFVTSU5HX01TSVg7CisJZWxzZSB7CisJCWVyciA9IHBjaV9lbmFibGVfbXNpKHBkZXYpOworCQlpZiAoZXJyKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gYWxsb2NhdGUgJXMgaW50ZXJydXB0czsiCisJCQkJIiBlcnI9JWRcbiIsCisJCQkJbXNpID09IE1TSV9NU0lYID8gIk1TSS1YIG9yIE1TSSIgOiAiTVNJIiwgZXJyKTsKKwkJCWdvdG8gZXJyX2ZyZWVfZGVidWdmczsKKwkJfQorCQlhZGFwdGVyLT5mbGFncyB8PSBVU0lOR19NU0k7CisJfQorCisJLyoKKwkgKiBOb3cgdGhhdCB3ZSBrbm93IGhvdyBtYW55ICJwb3J0cyIgd2UgaGF2ZSBhbmQgd2hhdCB0aGVpciB0eXBlcyBhcmUsCisJICogYW5kIGhvdyBtYW55IFF1ZXVlIFNldHMgd2UgY2FuIHN1cHBvcnQsIHdlIGNhbiBjb25maWd1cmUgb3VyIHF1ZXVlCisJICogcmVzb3VyY2VzLgorCSAqLworCWNmZ19xdWV1ZXMoYWRhcHRlcik7CisKKwkvKgorCSAqIFByaW50IGEgc2hvcnQgbm90aWNlIG9uIHRoZSBleGlzdGFuY2UgYW5kIGNvbmZpZ3VyYXRpb24gb2YgdGhlIG5ldworCSAqIFZGIG5ldHdvcmsgZGV2aWNlIC4uLgorCSAqLworCWZvcl9lYWNoX3BvcnQoYWRhcHRlciwgcGlkeCkgeworCQlkZXZfaW5mbyhhZGFwdGVyLT5wZGV2X2RldiwgIiVzOiBDaGVsc2lvIFZGIE5JQyBQQ0llICVzXG4iLAorCQkJIGFkYXB0ZXItPnBvcnRbcGlkeF0tPm5hbWUsCisJCQkgKGFkYXB0ZXItPmZsYWdzICYgVVNJTkdfTVNJWCkgPyAiTVNJLVgiIDoKKwkJCSAoYWRhcHRlci0+ZmxhZ3MgJiBVU0lOR19NU0kpICA/ICJNU0kiIDogIiIpOworCX0KKworCS8qCisJICogUmV0dXJuIHN1Y2Nlc3MhCisJICovCisJcmV0dXJuIDA7CisKKwkvKgorCSAqIEVycm9yIHJlY292ZXJ5IGFuZCBleGl0IGNvZGUuICBVbndpbmQgc3RhdGUgdGhhdCdzIGJlZW4gY3JlYXRlZAorCSAqIHNvIGZhciBhbmQgcmV0dXJuIHRoZSBlcnJvci4KKwkgKi8KKworZXJyX2ZyZWVfZGVidWdmczoKKwlpZiAoYWRhcHRlci0+ZGVidWdmc19yb290KSB7CisJCWNsZWFudXBfZGVidWdmcyhhZGFwdGVyKTsKKwkJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGFkYXB0ZXItPmRlYnVnZnNfcm9vdCk7CisJfQorCitlcnJfZnJlZV9kZXY6CisJZm9yX2VhY2hfcG9ydChhZGFwdGVyLCBwaWR4KSB7CisJCW5ldGRldiA9IGFkYXB0ZXItPnBvcnRbcGlkeF07CisJCWlmIChuZXRkZXYgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQlwaSA9IG5ldGRldl9wcml2KG5ldGRldik7CisJCXQ0dmZfZnJlZV92aShhZGFwdGVyLCBwaS0+dmlpZCk7CisJCWlmICh0ZXN0X2JpdChwaWR4LCAmYWRhcHRlci0+cmVnaXN0ZXJlZF9kZXZpY2VfbWFwKSkKKwkJCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CisJCWZyZWVfbmV0ZGV2KG5ldGRldik7CisJfQorCitlcnJfdW5tYXBfYmFyOgorCWlvdW5tYXAoYWRhcHRlci0+cmVncyk7CisKK2Vycl9mcmVlX2FkYXB0ZXI6CisJa2ZyZWUoYWRhcHRlcik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCitlcnJfZGlzYWJsZV9kZXZpY2U6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9jbGVhcl9tYXN0ZXIocGRldik7CisKK2Vycl9yZWxlYXNlX3JlZ2lvbnM6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKK2Vycl9vdXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqICJSZW1vdmUiIGEgZGV2aWNlOiB0ZWFyIGRvd24gYWxsIGtlcm5lbCBhbmQgZHJpdmVyIHN0YXRlIGNyZWF0ZWQgaW4gdGhlCisgKiAicHJvYmUiIHJvdXRpbmUgYW5kIHF1aWVzY2UgdGhlIGRldmljZSAoZGlzYWJsZSBpbnRlcnJ1cHRzLCBldGMuKS4gIChOb3RlCisgKiB0aGF0IHRoaXMgaXMgY2FsbGVkICJyZW1vdmVfb25lIiBpbiB0aGUgUEYgRHJpdmVyLikKKyAqLworc3RhdGljIHZvaWQgX19kZXZleGl0IGN4Z2I0dmZfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCS8qCisJICogVGVhciBkb3duIGRyaXZlciBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggZGV2aWNlLgorCSAqLworCWlmIChhZGFwdGVyKSB7CisJCWludCBwaWR4OworCisJCS8qCisJCSAqIFN0b3AgYWxsIG9mIG91ciBhY3Rpdml0eS4gIFVucmVnaXN0ZXIgbmV0d29yayBwb3J0LAorCQkgKiBkaXNhYmxlIGludGVycnVwdHMsIGV0Yy4KKwkJICovCisJCWZvcl9lYWNoX3BvcnQoYWRhcHRlciwgcGlkeCkKKwkJCWlmICh0ZXN0X2JpdChwaWR4LCAmYWRhcHRlci0+cmVnaXN0ZXJlZF9kZXZpY2VfbWFwKSkKKwkJCQl1bnJlZ2lzdGVyX25ldGRldihhZGFwdGVyLT5wb3J0W3BpZHhdKTsKKwkJdDR2Zl9zZ2Vfc3RvcChhZGFwdGVyKTsKKwkJaWYgKGFkYXB0ZXItPmZsYWdzICYgVVNJTkdfTVNJWCkgeworCQkJcGNpX2Rpc2FibGVfbXNpeChhZGFwdGVyLT5wZGV2KTsKKwkJCWFkYXB0ZXItPmZsYWdzICY9IH5VU0lOR19NU0lYOworCQl9IGVsc2UgaWYgKGFkYXB0ZXItPmZsYWdzICYgVVNJTkdfTVNJKSB7CisJCQlwY2lfZGlzYWJsZV9tc2koYWRhcHRlci0+cGRldik7CisJCQlhZGFwdGVyLT5mbGFncyAmPSB+VVNJTkdfTVNJOworCQl9CisKKwkJLyoKKwkJICogVGVhciBkb3duIG91ciBkZWJ1Z2ZzIGVudHJpZXMuCisJCSAqLworCQlpZiAoYWRhcHRlci0+ZGVidWdmc19yb290KSB7CisJCQljbGVhbnVwX2RlYnVnZnMoYWRhcHRlcik7CisJCQlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoYWRhcHRlci0+ZGVidWdmc19yb290KTsKKwkJfQorCisJCS8qCisJCSAqIEZyZWUgYWxsIG9mIHRoZSB2YXJpb3VzIHJlc291cmNlcyB3aGljaCB3ZSd2ZSBhY3F1aXJlZCAuLi4KKwkJICovCisJCXQ0dmZfZnJlZV9zZ2VfcmVzb3VyY2VzKGFkYXB0ZXIpOworCQlmb3JfZWFjaF9wb3J0KGFkYXB0ZXIsIHBpZHgpIHsKKwkJCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5wb3J0W3BpZHhdOworCQkJc3RydWN0IHBvcnRfaW5mbyAqcGk7CisKKwkJCWlmIChuZXRkZXYgPT0gTlVMTCkKKwkJCQljb250aW51ZTsKKworCQkJcGkgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCQkJdDR2Zl9mcmVlX3ZpKGFkYXB0ZXIsIHBpLT52aWlkKTsKKwkJCWZyZWVfbmV0ZGV2KG5ldGRldik7CisJCX0KKwkJaW91bm1hcChhZGFwdGVyLT5yZWdzKTsKKwkJa2ZyZWUoYWRhcHRlcik7CisJCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwl9CisKKwkvKgorCSAqIERpc2FibGUgdGhlIGRldmljZSBhbmQgcmVsZWFzZSBpdHMgUENJIHJlc291cmNlcy4KKwkgKi8KKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX2NsZWFyX21hc3RlcihwZGV2KTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworfQorCisvKgorICogUENJIERldmljZSByZWdpc3RyYXRpb24gZGF0YSBzdHJ1Y3R1cmVzLgorICovCisjZGVmaW5lIENIX0RFVklDRShkZXZpZCwgaWR4KSBcCisJeyBQQ0lfVkVORE9SX0lEX0NIRUxTSU8sIGRldmlkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpZHggfQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3hnYjR2Zl9wY2lfdGJsW10gPSB7CisJQ0hfREVWSUNFKDB4YjAwMCwgMCksCS8qIFBFMTBLIEZQR0EgKi8KKwlDSF9ERVZJQ0UoMHg0ODAwLCAwKSwJLyogVDQ0MC1kYmcgKi8KKwlDSF9ERVZJQ0UoMHg0ODAxLCAwKSwJLyogVDQyMC1jciAqLworCUNIX0RFVklDRSgweDQ4MDIsIDApLAkvKiBUNDIyLWNyICovCisJeyAwLCB9Cit9OworCitNT0RVTEVfREVTQ1JJUFRJT04oRFJWX0RFU0MpOworTU9EVUxFX0FVVEhPUigiQ2hlbHNpbyBDb21tdW5pY2F0aW9ucyIpOworTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOworTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGN4Z2I0dmZfcGNpX3RibCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBjeGdiNHZmX2RyaXZlciA9IHsKKwkubmFtZQkJPSBLQlVJTERfTU9ETkFNRSwKKwkuaWRfdGFibGUJPSBjeGdiNHZmX3BjaV90YmwsCisJLnByb2JlCQk9IGN4Z2I0dmZfcGNpX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoY3hnYjR2Zl9wY2lfcmVtb3ZlKSwKK307CisKKy8qCisgKiBJbml0aWFsaXplIGdsb2JhbCBkcml2ZXIgc3RhdGUuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGN4Z2I0dmZfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJLyogRGVidWdmcyBzdXBwb3J0IGlzIG9wdGlvbmFsLCBqdXN0IHdhcm4gaWYgdGhpcyBmYWlscyAqLworCWN4Z2I0dmZfZGVidWdmc19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKEtCVUlMRF9NT0ROQU1FLCBOVUxMKTsKKwlpZiAoIWN4Z2I0dmZfZGVidWdmc19yb290KQorCQlwcmludGsoS0VSTl9XQVJOSU5HIEtCVUlMRF9NT0ROQU1FICI6IGNvdWxkIG5vdCBjcmVhdGUiCisJCSAgICAgICAiIGRlYnVnZnMgZW50cnksIGNvbnRpbnVpbmdcbiIpOworCisJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmY3hnYjR2Zl9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlkZWJ1Z2ZzX3JlbW92ZShjeGdiNHZmX2RlYnVnZnNfcm9vdCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRlYXIgZG93biBnbG9iYWwgZHJpdmVyIHN0YXRlLgorICovCitzdGF0aWMgdm9pZCBfX2V4aXQgY3hnYjR2Zl9tb2R1bGVfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmY3hnYjR2Zl9kcml2ZXIpOworCWRlYnVnZnNfcmVtb3ZlKGN4Z2I0dmZfZGVidWdmc19yb290KTsKK30KKworbW9kdWxlX2luaXQoY3hnYjR2Zl9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChjeGdiNHZmX21vZHVsZV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2I0dmYvc2dlLmMgYi9kcml2ZXJzL25ldC9jeGdiNHZmL3NnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNWExYzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9jeGdiNHZmL3NnZS5jCkBAIC0wLDAgKzEsMjQ1NCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDaGVsc2lvIFQ0IFBDSS1FIFNSLUlPViBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0CisgKiBkcml2ZXIgZm9yIExpbnV4LgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIENoZWxzaW8gQ29tbXVuaWNhdGlvbnMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CisjaW5jbHVkZSA8bmV0L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisKKyNpbmNsdWRlICJ0NHZmX2NvbW1vbi5oIgorI2luY2x1ZGUgInQ0dmZfZGVmcy5oIgorCisjaW5jbHVkZSAiLi4vY3hnYjQvdDRfcmVncy5oIgorI2luY2x1ZGUgIi4uL2N4Z2I0L3Q0ZndfYXBpLmgiCisjaW5jbHVkZSAiLi4vY3hnYjQvdDRfbXNnLmgiCisKKy8qCisgKiBEZWNvZGVkIEFkYXB0ZXIgUGFyYW1ldGVycy4KKyAqLworc3RhdGljIHUzMiBGTF9QR19PUkRFUjsJCS8qIGxhcmdlIHBhZ2UgYWxsb2NhdGlvbiBzaXplICovCitzdGF0aWMgdTMyIFNUQVRfTEVOOwkJLyogbGVuZ3RoIG9mIHN0YXR1cyBwYWdlIGF0IHJpbmcgZW5kICovCitzdGF0aWMgdTMyIFBLVFNISUZUOwkJLyogcGFkZGluZyBiZXR3ZWVuIENQTCBhbmQgcGFja2V0IGRhdGEgKi8KK3N0YXRpYyB1MzIgRkxfQUxJR047CQkvKiByZXNwb25zZSBxdWV1ZSBtZXNzYWdlIGFsaWdubWVudCAqLworCisvKgorICogQ29uc3RhbnRzIC4uLgorICovCitlbnVtIHsKKwkvKgorCSAqIEVncmVzcyBRdWV1ZSBzaXplcywgcHJvZHVjZXIgYW5kIGNvbnN1bWVyIGluZGljZXMgYXJlIGFsbCBpbiB1bml0cworCSAqIG9mIEVncmVzcyBDb250ZXh0IFVuaXRzIGJ5dGVzLiAgTm90ZSB0aGF0IGFzIGZhciBhcyB0aGUgaGFyZHdhcmUgaXMKKwkgKiBjb25jZXJuZWQsIHRoZSBmcmVlIGxpc3QgaXMgYW4gRWdyZXNzIFF1ZXVlICh0aGUgaG9zdCBwcm9kdWNlcyBmcmVlCisJICogYnVmZmVycyB3aGljaCB0aGUgaGFyZHdhcmUgY29uc3VtZXMpIGFuZCBmcmVlIGxpc3QgZW50cmllcyBhcmUKKwkgKiA2NC1iaXQgUENJIERNQSBhZGRyZXNzZXMuCisJICovCisJRVFfVU5JVCA9IFNHRV9FUV9JRFhTSVpFLAorCUZMX1BFUl9FUV9VTklUID0gRVFfVU5JVCAvIHNpemVvZihfX2JlNjQpLAorCVRYRF9QRVJfRVFfVU5JVCA9IEVRX1VOSVQgLyBzaXplb2YoX19iZTY0KSwKKworCS8qCisJICogTWF4IG51bWJlciBvZiBUWCBkZXNjcmlwdG9ycyB3ZSBjbGVhbiB1cCBhdCBhIHRpbWUuICBTaG91bGQgYmUKKwkgKiBtb2Rlc3QgYXMgZnJlZWluZyBza2JzIGlzbid0IGNoZWFwIGFuZCBpdCBoYXBwZW5zIHdoaWxlIGhvbGRpbmcKKwkgKiBsb2Nrcy4gIFdlIGp1c3QgbmVlZCB0byBmcmVlIHBhY2tldHMgZmFzdGVyIHRoYW4gdGhleSBhcnJpdmUsIHdlCisJICogZXZlbnR1YWxseSBjYXRjaCB1cCBhbmQga2VlcCB0aGUgYW1vcnRpemVkIGNvc3QgcmVhc29uYWJsZS4KKwkgKi8KKwlNQVhfVFhfUkVDTEFJTSA9IDE2LAorCisJLyoKKwkgKiBNYXggbnVtYmVyIG9mIFJ4IGJ1ZmZlcnMgd2UgcmVwbGVuaXNoIGF0IGEgdGltZS4gIEFnYWluIGtlZXAgdGhpcworCSAqIG1vZGVzdCwgYWxsb2NhdGluZyBidWZmZXJzIGlzbid0IGNoZWFwIGVpdGhlci4KKwkgKi8KKwlNQVhfUlhfUkVGSUxMID0gMTYsCisKKwkvKgorCSAqIFBlcmlvZCBvZiB0aGUgUnggcXVldWUgY2hlY2sgdGltZXIuICBUaGlzIHRpbWVyIGlzIGluZnJlcXVlbnQgYXMgaXQKKwkgKiBoYXMgc29tZXRoaW5nIHRvIGRvIG9ubHkgd2hlbiB0aGUgc3lzdGVtIGV4cGVyaWVuY2VzIHNldmVyZSBtZW1vcnkKKwkgKiBzaG9ydGFnZS4KKwkgKi8KKwlSWF9RQ0hFQ0tfUEVSSU9EID0gKEhaIC8gMiksCisKKwkvKgorCSAqIFBlcmlvZCBvZiB0aGUgVFggcXVldWUgY2hlY2sgdGltZXIgYW5kIHRoZSBtYXhpbXVtIG51bWJlciBvZiBUWAorCSAqIGRlc2NyaXB0b3JzIHRvIGJlIHJlY2xhaW1lZCBieSB0aGUgVFggdGltZXIuCisJICovCisJVFhfUUNIRUNLX1BFUklPRCA9IChIWiAvIDIpLAorCU1BWF9USU1FUl9UWF9SRUNMQUlNID0gMTAwLAorCisJLyoKKwkgKiBBbiBGTCB3aXRoIDw9IEZMX1NUQVJWRV9USFJFUyBidWZmZXJzIGlzIHN0YXJ2aW5nIGFuZCBhIHBlcmlvZGljCisJICogdGltZXIgd2lsbCBhdHRlbXB0IHRvIHJlZmlsbCBpdC4KKwkgKi8KKwlGTF9TVEFSVkVfVEhSRVMgPSA0LAorCisJLyoKKwkgKiBTdXNwZW5kIGFuIEV0aGVybmV0IFRYIHF1ZXVlIHdpdGggZmV3ZXIgYXZhaWxhYmxlIGRlc2NyaXB0b3JzIHRoYW4KKwkgKiB0aGlzLiAgV2UgYWx3YXlzIHdhbnQgdG8gaGF2ZSByb29tIGZvciBhIG1heGltdW0gc2l6ZWQgcGFja2V0OgorCSAqIGlubGluZSBpbW1lZGlhdGUgZGF0YSArIE1BWF9TS0JfRlJBR1MuIFRoaXMgaXMgdGhlIHNhbWUgYXMKKwkgKiBjYWxjX3R4X2ZsaXRzKCkgZm9yIGEgVFNPIHBhY2tldCB3aXRoIG5yX2ZyYWdzID09IE1BWF9TS0JfRlJBR1MKKwkgKiAoc2VlIHRoYXQgZnVuY3Rpb24gYW5kIGl0cyBoZWxwZXJzIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZQorCSAqIGNhbGN1bGF0aW9uKS4KKwkgKi8KKwlFVEhUWFFfTUFYX0ZSQUdTID0gTUFYX1NLQl9GUkFHUyArIDEsCisJRVRIVFhRX01BWF9TR0xfTEVOID0gKCgzICogKEVUSFRYUV9NQVhfRlJBR1MtMSkpLzIgKworCQkJCSAgICgoRVRIVFhRX01BWF9GUkFHUy0xKSAmIDEpICsKKwkJCQkgICAyKSwKKwlFVEhUWFFfTUFYX0hEUiA9IChzaXplb2Yoc3RydWN0IGZ3X2V0aF90eF9wa3Rfdm1fd3IpICsKKwkJCSAgc2l6ZW9mKHN0cnVjdCBjcGxfdHhfcGt0X2xzb19jb3JlKSArCisJCQkgIHNpemVvZihzdHJ1Y3QgY3BsX3R4X3BrdF9jb3JlKSkgLyBzaXplb2YoX19iZTY0KSwKKwlFVEhUWFFfTUFYX0ZMSVRTID0gRVRIVFhRX01BWF9TR0xfTEVOICsgRVRIVFhRX01BWF9IRFIsCisKKwlFVEhUWFFfU1RPUF9USFJFUyA9IDEgKyBESVZfUk9VTkRfVVAoRVRIVFhRX01BWF9GTElUUywgVFhEX1BFUl9FUV9VTklUKSwKKworCS8qCisJICogTWF4IFRYIGRlc2NyaXB0b3Igc3BhY2Ugd2UgYWxsb3cgZm9yIGFuIEV0aGVybmV0IHBhY2tldCB0byBiZQorCSAqIGlubGluZWQgaW50byBhIFdSLiAgVGhpcyBpcyBsaW1pdGVkIGJ5IHRoZSBtYXhpbXVtIHZhbHVlIHdoaWNoCisJICogd2UgY2FuIHNwZWNpZnkgZm9yIGltbWVkaWF0ZSBkYXRhIGluIHRoZSBmaXJtd2FyZSBFdGhlcm5ldCBUWAorCSAqIFdvcmsgUmVxdWVzdC4KKwkgKi8KKwlNQVhfSU1NX1RYX1BLVF9MRU4gPSBGV19XUl9JTU1ETEVOX01BU0ssCisKKwkvKgorCSAqIE1heCBzaXplIG9mIGEgV1Igc2VudCB0aHJvdWdoIGEgY29udHJvbCBUWCBxdWV1ZS4KKwkgKi8KKwlNQVhfQ1RSTF9XUl9MRU4gPSAyNTYsCisKKwkvKgorCSAqIE1heGltdW0gYW1vdW50IG9mIGRhdGEgd2hpY2ggd2UnbGwgZXZlciBuZWVkIHRvIGlubGluZSBpbnRvIGEKKwkgKiBUWCByaW5nOiBtYXgoTUFYX0lNTV9UWF9QS1RfTEVOLCBNQVhfQ1RSTF9XUl9MRU4pLgorCSAqLworCU1BWF9JTU1fVFhfTEVOID0gKE1BWF9JTU1fVFhfUEtUX0xFTiA+IE1BWF9DVFJMX1dSX0xFTgorCQkJICA/IE1BWF9JTU1fVFhfUEtUX0xFTgorCQkJICA6IE1BWF9DVFJMX1dSX0xFTiksCisKKwkvKgorCSAqIEZvciBpbmNvbWluZyBwYWNrZXRzIGxlc3MgdGhhbiBSWF9DT1BZX1RIUkVTLCB3ZSBjb3B5IHRoZSBkYXRhIGludG8KKwkgKiBhbiBza2IgcmF0aGVyIHRoYW4gcmVmZXJlbmNpbmcgdGhlIGRhdGEuICBXZSBhbGxvY2F0ZSBlbm91Z2gKKwkgKiBpbi1saW5lIHJvb20gaW4gc2tiJ3MgdG8gYWNjb21tb2RhdGUgcHVsbGluZyBpbiBSWF9QVUxMX0xFTiBieXRlcworCSAqIG9mIHRoZSBkYXRhIChoZWFkZXIpLgorCSAqLworCVJYX0NPUFlfVEhSRVMgPSAyNTYsCisJUlhfUFVMTF9MRU4gPSAxMjgsCit9OworCisvKgorICogQ2FuJ3QgZGVmaW5lIHRoaXMgaW4gdGhlIGFib3ZlIGVudW0gYmVjYXVzZSBQS1RTSElGVCBpc24ndCBhIGNvbnN0YW50IGluCisgKiB0aGUgVkYgRHJpdmVyIC4uLgorICovCisjZGVmaW5lIFJYX1BLVF9QVUxMX0xFTiAoUlhfUFVMTF9MRU4gKyBQS1RTSElGVCkKKworLyoKKyAqIFNvZnR3YXJlIHN0YXRlIHBlciBUWCBkZXNjcmlwdG9yLgorICovCitzdHJ1Y3QgdHhfc3dfZGVzYyB7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsJCS8qIHNvY2tldCBidWZmZXIgb2YgVFggZGF0YSBzb3VyY2UgKi8KKwlzdHJ1Y3QgdWxwdHhfc2dsICpzZ2w7CQkvKiBzY2F0dGVyL2dhdGhlciBsaXN0IGluIFRYIFF1ZXVlICovCit9OworCisvKgorICogU29mdHdhcmUgc3RhdGUgcGVyIFJYIEZyZWUgTGlzdCBkZXNjcmlwdG9yLiAgV2Uga2VlcCB0cmFjayBvZiB0aGUgYWxsb2NhdGVkCisgKiBGTCBwYWdlLCBpdHMgc2l6ZSwgYW5kIGl0cyBQQ0kgRE1BIGFkZHJlc3MgKGlmIHRoZSBwYWdlIGlzIG1hcHBlZCkuICBUaGUgRkwKKyAqIHBhZ2Ugc2l6ZSBhbmQgaXRzIFBDSSBETUEgbWFwcGVkIHN0YXRlIGFyZSBzdG9yZWQgaW4gdGhlIGxvdyBiaXRzIG9mIHRoZQorICogUENJIERNQSBhZGRyZXNzIGFzIHBlciBiZWxvdy4KKyAqLworc3RydWN0IHJ4X3N3X2Rlc2MgeworCXN0cnVjdCBwYWdlICpwYWdlOwkJLyogRnJlZSBMaXN0IHBhZ2UgYnVmZmVyICovCisJZG1hX2FkZHJfdCBkbWFfYWRkcjsJCS8qIFBDSSBETUEgYWRkcmVzcyAoaWYgbWFwcGVkKSAqLworCQkJCQkvKiAgIGFuZCBmbGFncyAoc2VlIGJlbG93KSAqLworfTsKKworLyoKKyAqIFRoZSBsb3cgYml0cyBvZiByeF9zd19kZXNjLmRtYV9hZGRyIGhhdmUgc3BlY2lhbCBtZWFuaW5nLiAgTm90ZSB0aGF0IHRoZQorICogU0dFIGFsc28gdXNlcyB0aGUgbG93IDQgYml0cyB0byBkZXRlcm1pbmUgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlci4gIEl0IHVzZXMKKyAqIHRob3NlIGJpdHMgdG8gaW5kZXggaW50byB0aGUgU0dFX0ZMX0JVRkZFUl9TSVpFW2luZGV4XSByZWdpc3RlciBhcnJheS4KKyAqIFNpbmNlIHdlIG9ubHkgdXNlIFNHRV9GTF9CVUZGRVJfU0laRTAgYW5kIFNHRV9GTF9CVUZGRVJfU0laRTEsIHRoZXNlIGxvdyA0CisgKiBiaXRzIGNhbiBvbmx5IGNvbnRhaW4gYSAwIG9yIGEgMSB0byBpbmRpY2F0ZSB3aGljaCBzaXplIGJ1ZmZlciB3ZSdyZSBnaXZpbmcKKyAqIHRvIHRoZSBTR0UuICBUaHVzLCBvdXIgc29mdHdhcmUgc3RhdGUgb2YgImlzIHRoZSBidWZmZXIgbWFwcGVkIGZvciBETUEiIGlzCisgKiBtYWludGFpbmVkIGluIGFuIGludmVyc2Ugc2Vuc2Ugc28gdGhlIGhhcmR3YXJlIG5ldmVyIHNlZXMgdGhhdCBiaXQgaGlnaC4KKyAqLworZW51bSB7CisJUlhfTEFSR0VfQlVGICAgID0gMSA8PCAwLAkvKiBidWZmZXIgaXMgU0dFX0ZMX0JVRkZFUl9TSVpFWzFdICovCisJUlhfVU5NQVBQRURfQlVGID0gMSA8PCAxLAkvKiBidWZmZXIgaXMgbm90IG1hcHBlZCAqLworfTsKKworLyoqCisgKglnZXRfYnVmX2FkZHIgLSByZXR1cm4gRE1BIGJ1ZmZlciBhZGRyZXNzIG9mIHNvZnR3YXJlIGRlc2NyaXB0b3IKKyAqCUBzZGVzYzogcG9pbnRlciB0byB0aGUgc29mdHdhcmUgYnVmZmVyIGRlc2NyaXB0b3IKKyAqCisgKglSZXR1cm4gdGhlIERNQSBidWZmZXIgYWRkcmVzcyBvZiBhIHNvZnR3YXJlIGRlc2NyaXB0b3IgKHN0cmlwcGluZyBvdXQKKyAqCW91ciBsb3ctb3JkZXIgZmxhZyBiaXRzKS4KKyAqLworc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGdldF9idWZfYWRkcihjb25zdCBzdHJ1Y3Qgcnhfc3dfZGVzYyAqc2Rlc2MpCit7CisJcmV0dXJuIHNkZXNjLT5kbWFfYWRkciAmIH4oZG1hX2FkZHJfdCkoUlhfTEFSR0VfQlVGIHwgUlhfVU5NQVBQRURfQlVGKTsKK30KKworLyoqCisgKglpc19idWZfbWFwcGVkIC0gaXMgYnVmZmVyIG1hcHBlZCBmb3IgRE1BPworICoJQHNkZXNjOiBwb2ludGVyIHRvIHRoZSBzb2Z0d2FyZSBidWZmZXIgZGVzY3JpcHRvcgorICoKKyAqCURldGVybWluZSB3aGV0aGVyIHRoZSBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIGEgc29mdHdhcmUgZGVzY3JpcHRvciBpbgorICoJbWFwcGVkIGZvciBETUEgb3Igbm90LgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfYnVmX21hcHBlZChjb25zdCBzdHJ1Y3Qgcnhfc3dfZGVzYyAqc2Rlc2MpCit7CisJcmV0dXJuICEoc2Rlc2MtPmRtYV9hZGRyICYgUlhfVU5NQVBQRURfQlVGKTsKK30KKworLyoqCisgKgluZWVkX3NrYl91bm1hcCAtIGRvZXMgdGhlIHBsYXRmb3JtIG5lZWQgdW5tYXBwaW5nIG9mIHNrX2J1ZmZzPworICoKKyAqCVJldHVybnMgdHJ1ZSBpZiB0aGUgcGxhdGZyb20gbmVlZHMgc2tfYnVmZiB1bm1hcHBpbmcuICBUaGUgY29tcGlsZXIKKyAqCW9wdGltaXplcyBhd2F5IHVuZWNlc3NhcnkgY29kZSBpZiB0aGlzIHJldHVybnMgdHJ1ZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbmVlZF9za2JfdW5tYXAodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfTkVFRF9ETUFfTUFQX1NUQVRFCisJcmV0dXJuIDE7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CisKKy8qKgorICoJdHhxX2F2YWlsIC0gcmV0dXJuIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIHNsb3RzIGluIGEgVFggcXVldWUKKyAqCUB0cTogdGhlIFRYIHF1ZXVlCisgKgorICoJUmV0dXJucyB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBkZXNjcmlwdG9ycyBpbiBhIFRYIHF1ZXVlLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0eHFfYXZhaWwoY29uc3Qgc3RydWN0IHNnZV90eHEgKnRxKQoreworCXJldHVybiB0cS0+c2l6ZSAtIDEgLSB0cS0+aW5fdXNlOworfQorCisvKioKKyAqCWZsX2NhcCAtIHJldHVybiB0aGUgY2FwYWNpdHkgb2YgYSBGcmVlIExpc3QKKyAqCUBmbDogdGhlIEZyZWUgTGlzdAorICoKKyAqCVJldHVybnMgdGhlIGNhcGFjaXR5IG9mIGEgRnJlZSBMaXN0LiAgVGhlIGNhcGFjaXR5IGlzIGxlc3MgdGhhbiB0aGUKKyAqCXNpemUgYmVjYXVzZSBhbiBFZ3Jlc3MgUXVldWUgSW5kZXggVW5pdCB3b3J0aCBvZiBkZXNjcmlwdG9ycyBuZWVkcyB0bworICoJYmUgbGVmdCB1bnBvcHVsYXRlZCwgb3RoZXJ3aXNlIHRoZSBQcm9kdWNlciBhbmQgQ29uc3VtZXIgaW5kaWNlcyBQSURYCisgKglhbmQgQ0lEWCB3aWxsIG1hdGNoIGFuZCB0aGUgaGFyZHdhcmUgd2lsbCB0aGluayB0aGUgRkwgaXMgZW1wdHkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZsX2NhcChjb25zdCBzdHJ1Y3Qgc2dlX2ZsICpmbCkKK3sKKwlyZXR1cm4gZmwtPnNpemUgLSBGTF9QRVJfRVFfVU5JVDsKK30KKworLyoqCisgKglmbF9zdGFydmluZyAtIHJldHVybiB3aGV0aGVyIGEgRnJlZSBMaXN0IGlzIHN0YXJ2aW5nLgorICoJQGZsOiB0aGUgRnJlZSBMaXN0CisgKgorICoJVGVzdHMgc3BlY2lmaWVkIEZyZWUgTGlzdCB0byBzZWUgd2hldGhlciB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMKKyAqCWF2YWlsYWJsZSB0byB0aGUgaGFyZHdhcmUgaGFzIGZhbGxlZCBiZWxvdyBvdXIgInN0YXJ2YXRpb24iCisgKgl0aHJlc2hob2xkLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgZmxfc3RhcnZpbmcoY29uc3Qgc3RydWN0IHNnZV9mbCAqZmwpCit7CisJcmV0dXJuIGZsLT5hdmFpbCAtIGZsLT5wZW5kX2NyZWQgPD0gRkxfU1RBUlZFX1RIUkVTOworfQorCisvKioKKyAqCW1hcF9za2IgLSAgbWFwIGFuIHNrYiBmb3IgRE1BIHRvIHRoZSBkZXZpY2UKKyAqCUBkZXY6IHRoZSBlZ3Jlc3MgbmV0IGRldmljZQorICoJQHNrYjogdGhlIHBhY2tldCB0byBtYXAKKyAqCUBhZGRyOiBhIHBvaW50ZXIgdG8gdGhlIGJhc2Ugb2YgdGhlIERNQSBtYXBwaW5nIGFycmF5CisgKgorICoJTWFwIGFuIHNrYiBmb3IgRE1BIHRvIHRoZSBkZXZpY2UgYW5kIHJldHVybiBhbiBhcnJheSBvZiBETUEgYWRkcmVzc2VzLgorICovCitzdGF0aWMgaW50IG1hcF9za2Ioc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICBkbWFfYWRkcl90ICphZGRyKQoreworCWNvbnN0IHNrYl9mcmFnX3QgKmZwLCAqZW5kOworCWNvbnN0IHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNpOworCisJKmFkZHIgPSBkbWFfbWFwX3NpbmdsZShkZXYsIHNrYi0+ZGF0YSwgc2tiX2hlYWRsZW4oc2tiKSwgRE1BX1RPX0RFVklDRSk7CisJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgKmFkZHIpKQorCQlnb3RvIG91dF9lcnI7CisKKwlzaSA9IHNrYl9zaGluZm8oc2tiKTsKKwllbmQgPSAmc2ktPmZyYWdzW3NpLT5ucl9mcmFnc107CisJZm9yIChmcCA9IHNpLT5mcmFnczsgZnAgPCBlbmQ7IGZwKyspIHsKKwkJKisrYWRkciA9IGRtYV9tYXBfcGFnZShkZXYsIGZwLT5wYWdlLCBmcC0+cGFnZV9vZmZzZXQsIGZwLT5zaXplLAorCQkJCSAgICAgICBETUFfVE9fREVWSUNFKTsKKwkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgKmFkZHIpKQorCQkJZ290byB1bndpbmQ7CisJfQorCXJldHVybiAwOworCit1bndpbmQ6CisJd2hpbGUgKGZwLS0gPiBzaS0+ZnJhZ3MpCisJCWRtYV91bm1hcF9wYWdlKGRldiwgKi0tYWRkciwgZnAtPnNpemUsIERNQV9UT19ERVZJQ0UpOworCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBhZGRyWy0xXSwgc2tiX2hlYWRsZW4oc2tiKSwgRE1BX1RPX0RFVklDRSk7CisKK291dF9lcnI6CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyB2b2lkIHVubWFwX3NnbChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgIGNvbnN0IHN0cnVjdCB1bHB0eF9zZ2wgKnNnbCwgY29uc3Qgc3RydWN0IHNnZV90eHEgKnRxKQoreworCWNvbnN0IHN0cnVjdCB1bHB0eF9zZ2VfcGFpciAqcDsKKwl1bnNpZ25lZCBpbnQgbmZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKworCWlmIChsaWtlbHkoc2tiX2hlYWRsZW4oc2tiKSkpCisJCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBiZTY0X3RvX2NwdShzZ2wtPmFkZHIwKSwKKwkJCQkgYmUzMl90b19jcHUoc2dsLT5sZW4wKSwgRE1BX1RPX0RFVklDRSk7CisJZWxzZSB7CisJCWRtYV91bm1hcF9wYWdlKGRldiwgYmU2NF90b19jcHUoc2dsLT5hZGRyMCksCisJCQkgICAgICAgYmUzMl90b19jcHUoc2dsLT5sZW4wKSwgRE1BX1RPX0RFVklDRSk7CisJCW5mcmFncy0tOworCX0KKworCS8qCisJICogdGhlIGNvbXBsZXhpdHkgYmVsb3cgaXMgYmVjYXVzZSBvZiB0aGUgcG9zc2liaWxpdHkgb2YgYSB3cmFwLWFyb3VuZAorCSAqIGluIHRoZSBtaWRkbGUgb2YgYW4gU0dMCisJICovCisJZm9yIChwID0gc2dsLT5zZ2U7IG5mcmFncyA+PSAyOyBuZnJhZ3MgLT0gMikgeworCQlpZiAobGlrZWx5KCh1OCAqKShwICsgMSkgPD0gKHU4ICopdHEtPnN0YXQpKSB7Cit1bm1hcDoKKwkJCWRtYV91bm1hcF9wYWdlKGRldiwgYmU2NF90b19jcHUocC0+YWRkclswXSksCisJCQkJICAgICAgIGJlMzJfdG9fY3B1KHAtPmxlblswXSksIERNQV9UT19ERVZJQ0UpOworCQkJZG1hX3VubWFwX3BhZ2UoZGV2LCBiZTY0X3RvX2NwdShwLT5hZGRyWzFdKSwKKwkJCQkgICAgICAgYmUzMl90b19jcHUocC0+bGVuWzFdKSwgRE1BX1RPX0RFVklDRSk7CisJCQlwKys7CisJCX0gZWxzZSBpZiAoKHU4ICopcCA9PSAodTggKil0cS0+c3RhdCkgeworCQkJcCA9IChjb25zdCBzdHJ1Y3QgdWxwdHhfc2dlX3BhaXIgKil0cS0+ZGVzYzsKKwkJCWdvdG8gdW5tYXA7CisJCX0gZWxzZSBpZiAoKHU4ICopcCArIDggPT0gKHU4ICopdHEtPnN0YXQpIHsKKwkJCWNvbnN0IF9fYmU2NCAqYWRkciA9IChjb25zdCBfX2JlNjQgKil0cS0+ZGVzYzsKKworCQkJZG1hX3VubWFwX3BhZ2UoZGV2LCBiZTY0X3RvX2NwdShhZGRyWzBdKSwKKwkJCQkgICAgICAgYmUzMl90b19jcHUocC0+bGVuWzBdKSwgRE1BX1RPX0RFVklDRSk7CisJCQlkbWFfdW5tYXBfcGFnZShkZXYsIGJlNjRfdG9fY3B1KGFkZHJbMV0pLAorCQkJCSAgICAgICBiZTMyX3RvX2NwdShwLT5sZW5bMV0pLCBETUFfVE9fREVWSUNFKTsKKwkJCXAgPSAoY29uc3Qgc3RydWN0IHVscHR4X3NnZV9wYWlyICopJmFkZHJbMl07CisJCX0gZWxzZSB7CisJCQljb25zdCBfX2JlNjQgKmFkZHIgPSAoY29uc3QgX19iZTY0ICopdHEtPmRlc2M7CisKKwkJCWRtYV91bm1hcF9wYWdlKGRldiwgYmU2NF90b19jcHUocC0+YWRkclswXSksCisJCQkJICAgICAgIGJlMzJfdG9fY3B1KHAtPmxlblswXSksIERNQV9UT19ERVZJQ0UpOworCQkJZG1hX3VubWFwX3BhZ2UoZGV2LCBiZTY0X3RvX2NwdShhZGRyWzBdKSwKKwkJCQkgICAgICAgYmUzMl90b19jcHUocC0+bGVuWzFdKSwgRE1BX1RPX0RFVklDRSk7CisJCQlwID0gKGNvbnN0IHN0cnVjdCB1bHB0eF9zZ2VfcGFpciAqKSZhZGRyWzFdOworCQl9CisJfQorCWlmIChuZnJhZ3MpIHsKKwkJX19iZTY0IGFkZHI7CisKKwkJaWYgKCh1OCAqKXAgPT0gKHU4ICopdHEtPnN0YXQpCisJCQlwID0gKGNvbnN0IHN0cnVjdCB1bHB0eF9zZ2VfcGFpciAqKXRxLT5kZXNjOworCQlhZGRyID0gKCh1OCAqKXAgKyAxNiA8PSAodTggKil0cS0+c3RhdAorCQkJPyBwLT5hZGRyWzBdCisJCQk6ICooY29uc3QgX19iZTY0ICopdHEtPmRlc2MpOworCQlkbWFfdW5tYXBfcGFnZShkZXYsIGJlNjRfdG9fY3B1KGFkZHIpLCBiZTMyX3RvX2NwdShwLT5sZW5bMF0pLAorCQkJICAgICAgIERNQV9UT19ERVZJQ0UpOworCX0KK30KKworLyoqCisgKglmcmVlX3R4X2Rlc2MgLSByZWNsYWltcyBUWCBkZXNjcmlwdG9ycyBhbmQgdGhlaXIgYnVmZmVycworICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCisgKglAdHE6IHRoZSBUWCBxdWV1ZSB0byByZWNsYWltIGRlc2NyaXB0b3JzIGZyb20KKyAqCUBuOiB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIHRvIHJlY2xhaW0KKyAqCUB1bm1hcDogd2hldGhlciB0aGUgYnVmZmVycyBzaG91bGQgYmUgdW5tYXBwZWQgZm9yIERNQQorICoKKyAqCVJlY2xhaW1zIFRYIGRlc2NyaXB0b3JzIGZyb20gYW4gU0dFIFRYIHF1ZXVlIGFuZCBmcmVlcyB0aGUgYXNzb2NpYXRlZAorICoJVFggYnVmZmVycy4gIENhbGxlZCB3aXRoIHRoZSBUWCBxdWV1ZSBsb2NrIGhlbGQuCisgKi8KK3N0YXRpYyB2b2lkIGZyZWVfdHhfZGVzYyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNnZV90eHEgKnRxLAorCQkJIHVuc2lnbmVkIGludCBuLCBib29sIHVubWFwKQoreworCXN0cnVjdCB0eF9zd19kZXNjICpzZGVzYzsKKwl1bnNpZ25lZCBpbnQgY2lkeCA9IHRxLT5jaWR4OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGFkYXB0ZXItPnBkZXZfZGV2OworCisJY29uc3QgaW50IG5lZWRfdW5tYXAgPSBuZWVkX3NrYl91bm1hcCgpICYmIHVubWFwOworCisJc2Rlc2MgPSAmdHEtPnNkZXNjW2NpZHhdOworCXdoaWxlIChuLS0pIHsKKwkJLyoKKwkJICogSWYgd2Uga2VwdCBhIHJlZmVyZW5jZSB0byB0aGUgb3JpZ2luYWwgVFggc2tiLCB3ZSBuZWVkIHRvCisJCSAqIHVubWFwIGl0IGZyb20gUENJIERNQSBzcGFjZSAoaWYgcmVxdWlyZWQpIGFuZCBmcmVlIGl0LgorCQkgKi8KKwkJaWYgKHNkZXNjLT5za2IpIHsKKwkJCWlmIChuZWVkX3VubWFwKQorCQkJCXVubWFwX3NnbChkZXYsIHNkZXNjLT5za2IsIHNkZXNjLT5zZ2wsIHRxKTsKKwkJCWtmcmVlX3NrYihzZGVzYy0+c2tiKTsKKwkJCXNkZXNjLT5za2IgPSBOVUxMOworCQl9CisKKwkJc2Rlc2MrKzsKKwkJaWYgKCsrY2lkeCA9PSB0cS0+c2l6ZSkgeworCQkJY2lkeCA9IDA7CisJCQlzZGVzYyA9IHRxLT5zZGVzYzsKKwkJfQorCX0KKwl0cS0+Y2lkeCA9IGNpZHg7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiByZWNsYWltYWJsZSBkZXNjcmlwdG9ycyBpbiBhIFRYIHF1ZXVlLgorICovCitzdGF0aWMgaW5saW5lIGludCByZWNsYWltYWJsZShjb25zdCBzdHJ1Y3Qgc2dlX3R4cSAqdHEpCit7CisJaW50IGh3X2NpZHggPSBiZTE2X3RvX2NwdSh0cS0+c3RhdC0+Y2lkeCk7CisJaW50IHJlY2xhaW1hYmxlID0gaHdfY2lkeCAtIHRxLT5jaWR4OworCWlmIChyZWNsYWltYWJsZSA8IDApCisJCXJlY2xhaW1hYmxlICs9IHRxLT5zaXplOworCXJldHVybiByZWNsYWltYWJsZTsKK30KKworLyoqCisgKglyZWNsYWltX2NvbXBsZXRlZF90eCAtIHJlY2xhaW1zIGNvbXBsZXRlZCBUWCBkZXNjcmlwdG9ycworICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCisgKglAdHE6IHRoZSBUWCBxdWV1ZSB0byByZWNsYWltIGNvbXBsZXRlZCBkZXNjcmlwdG9ycyBmcm9tCisgKglAdW5tYXA6IHdoZXRoZXIgdGhlIGJ1ZmZlcnMgc2hvdWxkIGJlIHVubWFwcGVkIGZvciBETUEKKyAqCisgKglSZWNsYWltcyBUWCBkZXNjcmlwdG9ycyB0aGF0IHRoZSBTR0UgaGFzIGluZGljYXRlZCBpdCBoYXMgcHJvY2Vzc2VkLAorICoJYW5kIGZyZWVzIHRoZSBhc3NvY2lhdGVkIGJ1ZmZlcnMgaWYgcG9zc2libGUuICBDYWxsZWQgd2l0aCB0aGUgVFgKKyAqCXF1ZXVlIGxvY2tlZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHJlY2xhaW1fY29tcGxldGVkX3R4KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkJCQlzdHJ1Y3Qgc2dlX3R4cSAqdHEsCisJCQkJCWJvb2wgdW5tYXApCit7CisJaW50IGF2YWlsID0gcmVjbGFpbWFibGUodHEpOworCisJaWYgKGF2YWlsKSB7CisJCS8qCisJCSAqIExpbWl0IHRoZSBhbW91bnQgb2YgY2xlYW4gdXAgd29yayB3ZSBkbyBhdCBhIHRpbWUgdG8ga2VlcAorCQkgKiB0aGUgVFggbG9jayBob2xkIHRpbWUgTygxKS4KKwkJICovCisJCWlmIChhdmFpbCA+IE1BWF9UWF9SRUNMQUlNKQorCQkJYXZhaWwgPSBNQVhfVFhfUkVDTEFJTTsKKworCQlmcmVlX3R4X2Rlc2MoYWRhcHRlciwgdHEsIGF2YWlsLCB1bm1hcCk7CisJCXRxLT5pbl91c2UgLT0gYXZhaWw7CisJfQorfQorCisvKioKKyAqCWdldF9idWZfc2l6ZSAtIHJldHVybiB0aGUgc2l6ZSBvZiBhbiBSWCBGcmVlIExpc3QgYnVmZmVyLgorICoJQHNkZXNjOiBwb2ludGVyIHRvIHRoZSBzb2Z0d2FyZSBidWZmZXIgZGVzY3JpcHRvcgorICovCitzdGF0aWMgaW5saW5lIGludCBnZXRfYnVmX3NpemUoY29uc3Qgc3RydWN0IHJ4X3N3X2Rlc2MgKnNkZXNjKQoreworCXJldHVybiBGTF9QR19PUkRFUiA+IDAgJiYgKHNkZXNjLT5kbWFfYWRkciAmIFJYX0xBUkdFX0JVRikKKwkJPyAoUEFHRV9TSVpFIDw8IEZMX1BHX09SREVSKQorCQk6IFBBR0VfU0laRTsKK30KKworLyoqCisgKglmcmVlX3J4X2J1ZnMgLSBmcmVlIFJYIGJ1ZmZlcnMgb24gYW4gU0dFIEZyZWUgTGlzdAorICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCisgKglAZmw6IHRoZSBTR0UgRnJlZSBMaXN0IHRvIGZyZWUgYnVmZmVycyBmcm9tCisgKglAbjogaG93IG1hbnkgYnVmZmVycyB0byBmcmVlCisgKgorICoJUmVsZWFzZSB0aGUgbmV4dCBAbiBidWZmZXJzIG9uIGFuIFNHRSBGcmVlIExpc3QgUlggcXVldWUuICAgVGhlCisgKglidWZmZXJzIG11c3QgYmUgbWFkZSBpbmFjY2Vzc2libGUgdG8gaGFyZHdhcmUgYmVmb3JlIGNhbGxpbmcgdGhpcworICoJZnVuY3Rpb24uCisgKi8KK3N0YXRpYyB2b2lkIGZyZWVfcnhfYnVmcyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNnZV9mbCAqZmwsIGludCBuKQoreworCXdoaWxlIChuLS0pIHsKKwkJc3RydWN0IHJ4X3N3X2Rlc2MgKnNkZXNjID0gJmZsLT5zZGVzY1tmbC0+Y2lkeF07CisKKwkJaWYgKGlzX2J1Zl9tYXBwZWQoc2Rlc2MpKQorCQkJZG1hX3VubWFwX3BhZ2UoYWRhcHRlci0+cGRldl9kZXYsIGdldF9idWZfYWRkcihzZGVzYyksCisJCQkJICAgICAgIGdldF9idWZfc2l6ZShzZGVzYyksIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCXB1dF9wYWdlKHNkZXNjLT5wYWdlKTsKKwkJc2Rlc2MtPnBhZ2UgPSBOVUxMOworCQlpZiAoKytmbC0+Y2lkeCA9PSBmbC0+c2l6ZSkKKwkJCWZsLT5jaWR4ID0gMDsKKwkJZmwtPmF2YWlsLS07CisJfQorfQorCisvKioKKyAqCXVubWFwX3J4X2J1ZiAtIHVubWFwIHRoZSBjdXJyZW50IFJYIGJ1ZmZlciBvbiBhbiBTR0UgRnJlZSBMaXN0CisgKglAYWRhcHRlcjogdGhlIGFkYXB0ZXIKKyAqCUBmbDogdGhlIFNHRSBGcmVlIExpc3QKKyAqCisgKglVbm1hcCB0aGUgY3VycmVudCBidWZmZXIgb24gYW4gU0dFIEZyZWUgTGlzdCBSWCBxdWV1ZS4gICBUaGUKKyAqCWJ1ZmZlciBtdXN0IGJlIG1hZGUgaW5hY2Nlc3NpYmxlIHRvIEhXIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICoJVGhpcyBpcyBzaW1pbGFyIHRvIEBmcmVlX3J4X2J1ZnMgYWJvdmUgYnV0IGRvZXMgbm90IGZyZWUgdGhlIGJ1ZmZlci4KKyAqCURvIG5vdGUgdGhhdCB0aGUgRkwgc3RpbGwgbG9zZXMgYW55IGZ1cnRoZXIgYWNjZXNzIHRvIHRoZSBidWZmZXIuCisgKglUaGlzIGlzIHVzZWQgcHJlZG9taW5hbnRseSB0byAidHJhbnNmZXIgb3duZXJzaGlwIiBvZiBhbiBGTCBidWZmZXIKKyAqCXRvIGFub3RoZXIgZW50aXR5ICh0eXBpY2FsbHkgYW4gc2tiJ3MgZnJhZ21lbnQgbGlzdCkuCisgKi8KK3N0YXRpYyB2b2lkIHVubWFwX3J4X2J1ZihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNnZV9mbCAqZmwpCit7CisJc3RydWN0IHJ4X3N3X2Rlc2MgKnNkZXNjID0gJmZsLT5zZGVzY1tmbC0+Y2lkeF07CisKKwlpZiAoaXNfYnVmX21hcHBlZChzZGVzYykpCisJCWRtYV91bm1hcF9wYWdlKGFkYXB0ZXItPnBkZXZfZGV2LCBnZXRfYnVmX2FkZHIoc2Rlc2MpLAorCQkJICAgICAgIGdldF9idWZfc2l6ZShzZGVzYyksIFBDSV9ETUFfRlJPTURFVklDRSk7CisJc2Rlc2MtPnBhZ2UgPSBOVUxMOworCWlmICgrK2ZsLT5jaWR4ID09IGZsLT5zaXplKQorCQlmbC0+Y2lkeCA9IDA7CisJZmwtPmF2YWlsLS07Cit9CisKKy8qKgorICoJcmluZ19mbF9kYiAtIHJpZ2ggZG9vcmJlbGwgb24gZnJlZSBsaXN0CisgKglAYWRhcHRlcjogdGhlIGFkYXB0ZXIKKyAqCUBmbDogdGhlIEZyZWUgTGlzdCB3aG9zZSBkb29yYmVsbCBzaG91bGQgYmUgcnVuZyAuLi4KKyAqCisgKglUZWxsIHRoZSBTY2F0dGVyIEdhdGhlciBFbmdpbmUgdGhhdCB0aGVyZSBhcmUgbmV3IGZyZWUgbGlzdCBlbnRyaWVzCisgKglhdmFpbGFibGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByaW5nX2ZsX2RiKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2dlX2ZsICpmbCkKK3sKKwkvKgorCSAqIFRoZSBTR0Uga2VlcHMgdHJhY2sgb2YgaXRzIFByb2R1Y2VyIGFuZCBDb25zdW1lciBJbmRpY2VzIGluIHRlcm1zCisJICogb2YgRWdyZXNzIFF1ZXVlIFVuaXRzIHNvIHdlIGNhbiBvbmx5IHRlbGwgaXQgYWJvdXQgaW50ZWdyYWwgbnVtYmVycworCSAqIG9mIG11bHRpcGxlcyBvZiBGcmVlIExpc3QgRW50cmllcyBwZXIgRWdyZXNzIFF1ZXVlIFVuaXRzIC4uLgorCSAqLworCWlmIChmbC0+cGVuZF9jcmVkID49IEZMX1BFUl9FUV9VTklUKSB7CisJCXdtYigpOworCQl0NF93cml0ZV9yZWcoYWRhcHRlciwgVDRWRl9TR0VfQkFTRV9BRERSICsgU0dFX1ZGX0tET09SQkVMTCwKKwkJCSAgICAgREJQUklPIHwKKwkJCSAgICAgUUlEKGZsLT5jbnR4dF9pZCkgfAorCQkJICAgICBQSURYKGZsLT5wZW5kX2NyZWQgLyBGTF9QRVJfRVFfVU5JVCkpOworCQlmbC0+cGVuZF9jcmVkICU9IEZMX1BFUl9FUV9VTklUOworCX0KK30KKworLyoqCisgKglzZXRfcnhfc3dfZGVzYyAtIGluaXRpYWxpemUgc29mdHdhcmUgUlggYnVmZmVyIGRlc2NyaXB0b3IKKyAqCUBzZGVzYzogcG9pbnRlciB0byB0aGUgc29mdHdvcmUgUlggYnVmZmVyIGRlc2NyaXB0b3IKKyAqCUBwYWdlOiBwb2ludGVyIHRvIHRoZSBwYWdlIGRhdGEgc3RydWN0dXJlIGJhY2tpbmcgdGhlIFJYIGJ1ZmZlcgorICoJQGRtYV9hZGRyOiBQQ0kgRE1BIGFkZHJlc3MgKHBvc3NpYmx5IHdpdGggbG93LWJpdCBmbGFncykKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNldF9yeF9zd19kZXNjKHN0cnVjdCByeF9zd19kZXNjICpzZGVzYywgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJICBkbWFfYWRkcl90IGRtYV9hZGRyKQoreworCXNkZXNjLT5wYWdlID0gcGFnZTsKKwlzZGVzYy0+ZG1hX2FkZHIgPSBkbWFfYWRkcjsKK30KKworLyoKKyAqIFN1cHBvcnQgZm9yIHBvaXNvbmluZyBSWCBidWZmZXJzIC4uLgorICovCisjZGVmaW5lIFBPSVNPTl9CVUZfVkFMIC0xCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb2lzb25fYnVmKHN0cnVjdCBwYWdlICpwYWdlLCBzaXplX3Qgc3opCit7CisjaWYgUE9JU09OX0JVRl9WQUwgPj0gMAorCW1lbXNldChwYWdlX2FkZHJlc3MocGFnZSksIFBPSVNPTl9CVUZfVkFMLCBzeik7CisjZW5kaWYKK30KKworLyoqCisgKglyZWZpbGxfZmwgLSByZWZpbGwgYW4gU0dFIFJYIGJ1ZmZlciByaW5nCisgKglAYWRhcHRlcjogdGhlIGFkYXB0ZXIKKyAqCUBmbDogdGhlIEZyZWUgTGlzdCByaW5nIHRvIHJlZmlsbAorICoJQG46IHRoZSBudW1iZXIgb2YgbmV3IGJ1ZmZlcnMgdG8gYWxsb2NhdGUKKyAqCUBnZnA6IHRoZSBnZnAgZmxhZ3MgZm9yIHRoZSBhbGxvY2F0aW9ucworICoKKyAqCShSZSlwb3B1bGF0ZSBhbiBTR0UgZnJlZS1idWZmZXIgcXVldWUgd2l0aCB1cCB0byBAbiBuZXcgcGFja2V0IGJ1ZmZlcnMsCisgKglhbGxvY2F0ZWQgd2l0aCB0aGUgc3VwcGxpZWQgZ2ZwIGZsYWdzLiAgVGhlIGNhbGxlciBtdXN0IGFzc3VyZSB0aGF0CisgKglAbiBkb2VzIG5vdCBleGNlZWQgdGhlIHF1ZXVlJ3MgY2FwYWNpdHkgLS0gaS5lLiAoY2lkeCA9PSBwaWR4KSBfSU4KKyAqCUVHUkVTUyBRVUVVRSBVTklUU18gaW5kaWNhdGVzIGFuIGVtcHR5IEZyZWUgTGlzdCEgIFJldHVybnMgdGhlIG51bWJlcgorICoJb2YgYnVmZmVycyBhbGxvY2F0ZWQuICBJZiBhZnRlcndhcmRzIHRoZSBxdWV1ZSBpcyBmb3VuZCBjcml0aWNhbGx5IGxvdywKKyAqCW1hcmsgaXQgYXMgc3RhcnZpbmcgaW4gdGhlIGJpdG1hcCBvZiBzdGFydmluZyBGTHMuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmVmaWxsX2ZsKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2dlX2ZsICpmbCwKKwkJCSAgICAgIGludCBuLCBnZnBfdCBnZnApCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwl1bnNpZ25lZCBpbnQgY3JlZCA9IGZsLT5hdmFpbDsKKwlfX2JlNjQgKmQgPSAmZmwtPmRlc2NbZmwtPnBpZHhdOworCXN0cnVjdCByeF9zd19kZXNjICpzZGVzYyA9ICZmbC0+c2Rlc2NbZmwtPnBpZHhdOworCisJLyoKKwkgKiBTYW5pdHk6IGVuc3VyZSB0aGF0IHRoZSByZXN1bHQgb2YgYWRkaW5nIG4gRnJlZSBMaXN0IGJ1ZmZlcnMKKwkgKiB3b24ndCByZXN1bHQgaW4gd3JhcHBpbmcgdGhlIFNHRSdzIFByb2R1Y2VyIEluZGV4IGFyb3VuZCB0bworCSAqIGl0J3MgQ29uc3VtZXIgSW5kZXggdGhlcmVieSBpbmRpY2F0aW5nIGFuIGVtcHR5IEZyZWUgTGlzdCAuLi4KKwkgKi8KKwlCVUdfT04oZmwtPmF2YWlsICsgbiA+IGZsLT5zaXplIC0gRkxfUEVSX0VRX1VOSVQpOworCisJLyoKKwkgKiBJZiB3ZSBzdXBwb3J0IGxhcmdlIHBhZ2VzLCBwcmVmZXIgbGFyZ2UgYnVmZmVycyBhbmQgZmFpbCBvdmVyIHRvCisJICogc21hbGwgcGFnZXMgaWYgd2UgY2FuJ3QgYWxsb2NhdGUgbGFyZ2UgcGFnZXMgdG8gc2F0aXNmeSB0aGUgcmVmaWxsLgorCSAqIElmIHdlIGRvbid0IHN1cHBvcnQgbGFyZ2UgcGFnZXMsIGRyb3AgZGlyZWN0bHkgaW50byB0aGUgc21hbGwgcGFnZQorCSAqIGFsbG9jYXRpb24gY29kZS4KKwkgKi8KKwlpZiAoRkxfUEdfT1JERVIgPT0gMCkKKwkJZ290byBhbGxvY19zbWFsbF9wYWdlczsKKworCXdoaWxlIChuKSB7CisJCXBhZ2UgPSBhbGxvY19wYWdlcyhnZnAgfCBfX0dGUF9DT01QIHwgX19HRlBfTk9XQVJOLAorCQkJCSAgIEZMX1BHX09SREVSKTsKKwkJaWYgKHVubGlrZWx5KCFwYWdlKSkgeworCQkJLyoKKwkJCSAqIFdlJ3ZlIGZhaWxlZCBpbm91ciBhdHRlbXB0IHRvIGFsbG9jYXRlIGEgImxhcmdlCisJCQkgKiBwYWdlIi4gIEZhaWwgb3ZlciB0byB0aGUgInNtYWxsIHBhZ2UiIGFsbG9jYXRpb24KKwkJCSAqIGJlbG93LgorCQkJICovCisJCQlmbC0+bGFyZ2VfYWxsb2NfZmFpbGVkKys7CisJCQlicmVhazsKKwkJfQorCQlwb2lzb25fYnVmKHBhZ2UsIFBBR0VfU0laRSA8PCBGTF9QR19PUkRFUik7CisKKwkJZG1hX2FkZHIgPSBkbWFfbWFwX3BhZ2UoYWRhcHRlci0+cGRldl9kZXYsIHBhZ2UsIDAsCisJCQkJCVBBR0VfU0laRSA8PCBGTF9QR19PUkRFUiwKKwkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKGFkYXB0ZXItPnBkZXZfZGV2LCBkbWFfYWRkcikpKSB7CisJCQkvKgorCQkJICogV2UndmUgcnVuIG91dCBvZiBETUEgbWFwcGluZyBzcGFjZS4gIEZyZWUgdXAgdGhlCisJCQkgKiBidWZmZXIgYW5kIHJldHVybiB3aXRoIHdoYXQgd2UndmUgbWFuYWdlZCB0byBwdXQKKwkJCSAqIGludG8gdGhlIGZyZWUgbGlzdC4gIFdlIGRvbid0IHdhbnQgdG8gZmFpbCBvdmVyIHRvCisJCQkgKiB0aGUgc21hbGwgcGFnZSBhbGxvY2F0aW9uIGJlbG93IGluIHRoaXMgY2FzZQorCQkJICogYmVjYXVzZSBETUEgbWFwcGluZyByZXNvdXJjZXMgYXJlIHR5cGljYWxseQorCQkJICogY3JpdGljYWwgcmVzb3VyY2VzIG9uY2UgdGhleSBiZWNvbWUgc2NhcnNlLgorCQkJICovCisJCQlfX2ZyZWVfcGFnZXMocGFnZSwgRkxfUEdfT1JERVIpOworCQkJZ290byBvdXQ7CisJCX0KKwkJZG1hX2FkZHIgfD0gUlhfTEFSR0VfQlVGOworCQkqZCsrID0gY3B1X3RvX2JlNjQoZG1hX2FkZHIpOworCisJCXNldF9yeF9zd19kZXNjKHNkZXNjLCBwYWdlLCBkbWFfYWRkcik7CisJCXNkZXNjKys7CisKKwkJZmwtPmF2YWlsKys7CisJCWlmICgrK2ZsLT5waWR4ID09IGZsLT5zaXplKSB7CisJCQlmbC0+cGlkeCA9IDA7CisJCQlzZGVzYyA9IGZsLT5zZGVzYzsKKwkJCWQgPSBmbC0+ZGVzYzsKKwkJfQorCQluLS07CisJfQorCithbGxvY19zbWFsbF9wYWdlczoKKwl3aGlsZSAobi0tKSB7CisJCXBhZ2UgPSBfX25ldGRldl9hbGxvY19wYWdlKGFkYXB0ZXItPnBvcnRbMF0sCisJCQkJCSAgIGdmcCB8IF9fR0ZQX05PV0FSTik7CisJCWlmICh1bmxpa2VseSghcGFnZSkpIHsKKwkJCWZsLT5hbGxvY19mYWlsZWQrKzsKKwkJCWJyZWFrOworCQl9CisJCXBvaXNvbl9idWYocGFnZSwgUEFHRV9TSVpFKTsKKworCQlkbWFfYWRkciA9IGRtYV9tYXBfcGFnZShhZGFwdGVyLT5wZGV2X2RldiwgcGFnZSwgMCwgUEFHRV9TSVpFLAorCQkJCSAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlpZiAodW5saWtlbHkoZG1hX21hcHBpbmdfZXJyb3IoYWRhcHRlci0+cGRldl9kZXYsIGRtYV9hZGRyKSkpIHsKKwkJCW5ldGRldl9mcmVlX3BhZ2UoYWRhcHRlci0+cG9ydFswXSwgcGFnZSk7CisJCQlicmVhazsKKwkJfQorCQkqZCsrID0gY3B1X3RvX2JlNjQoZG1hX2FkZHIpOworCisJCXNldF9yeF9zd19kZXNjKHNkZXNjLCBwYWdlLCBkbWFfYWRkcik7CisJCXNkZXNjKys7CisKKwkJZmwtPmF2YWlsKys7CisJCWlmICgrK2ZsLT5waWR4ID09IGZsLT5zaXplKSB7CisJCQlmbC0+cGlkeCA9IDA7CisJCQlzZGVzYyA9IGZsLT5zZGVzYzsKKwkJCWQgPSBmbC0+ZGVzYzsKKwkJfQorCX0KKworb3V0OgorCS8qCisJICogVXBkYXRlIG91ciBhY2NvdW50aW5nIHN0YXRlIHRvIGluY29ycG9yYXRlIHRoZSBuZXcgRnJlZSBMaXN0CisJICogYnVmZmVycywgdGVsbCB0aGUgaGFyZHdhcmUgYWJvdXQgdGhlbSBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YKKwkgKiBidWZlcnMgd2hpY2ggd2Ugd2VyZSBhYmxlIHRvIGFsbG9jYXRlLgorCSAqLworCWNyZWQgPSBmbC0+YXZhaWwgLSBjcmVkOworCWZsLT5wZW5kX2NyZWQgKz0gY3JlZDsKKwlyaW5nX2ZsX2RiKGFkYXB0ZXIsIGZsKTsKKworCWlmICh1bmxpa2VseShmbF9zdGFydmluZyhmbCkpKSB7CisJCXNtcF93bWIoKTsKKwkJc2V0X2JpdChmbC0+Y250eHRfaWQsIGFkYXB0ZXItPnNnZS5zdGFydmluZ19mbCk7CisJfQorCisJcmV0dXJuIGNyZWQ7Cit9CisKKy8qCisgKiBSZWZpbGwgYSBGcmVlIExpc3QgdG8gaXRzIGNhcGFjaXR5IG9yIHRoZSBNYXhpbXVtIFJlZmlsbCBJbmNyZW1lbnQsCisgKiB3aGljaGV2ZXIgaXMgc21hbGxlciAuLi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fcmVmaWxsX2ZsKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2dlX2ZsICpmbCkKK3sKKwlyZWZpbGxfZmwoYWRhcHRlciwgZmwsCisJCSAgbWluKCh1bnNpZ25lZCBpbnQpTUFYX1JYX1JFRklMTCwgZmxfY2FwKGZsKSAtIGZsLT5hdmFpbCksCisJCSAgR0ZQX0FUT01JQyk7Cit9CisKKy8qKgorICoJYWxsb2NfcmluZyAtIGFsbG9jYXRlIHJlc291cmNlcyBmb3IgYW4gU0dFIGRlc2NyaXB0b3IgcmluZworICoJQGRldjogdGhlIFBDSSBkZXZpY2UncyBjb3JlIGRldmljZQorICoJQG5lbGVtOiB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3JzCisgKglAaHdzaXplOiB0aGUgc2l6ZSBvZiBlYWNoIGhhcmR3YXJlIGRlc2NyaXB0b3IKKyAqCUBzd3NpemU6IHRoZSBzaXplIG9mIGVhY2ggc29mdHdhcmUgZGVzY3JpcHRvcgorICoJQGJ1c2FkZHJwOiB0aGUgcGh5c2ljYWwgUENJIGJ1cyBhZGRyZXNzIG9mIHRoZSBhbGxvY2F0ZWQgcmluZworICoJQHN3cmluZ3A6IHJldHVybiBhZGRyZXNzIHBvaW50ZXIgZm9yIHNvZnR3YXJlIHJpbmcKKyAqCUBzdGF0X3NpemU6IGV4dHJhIHNwYWNlIGluIGhhcmR3YXJlIHJpbmcgZm9yIHN0YXR1cyBpbmZvcm1hdGlvbgorICoKKyAqCUFsbG9jYXRlcyByZXNvdXJjZXMgZm9yIGFuIFNHRSBkZXNjcmlwdG9yIHJpbmcsIHN1Y2ggYXMgVFggcXVldWVzLAorICoJZnJlZSBidWZmZXIgbGlzdHMsIHJlc3BvbnNlIHF1ZXVlcywgZXRjLiAgRWFjaCBTR0UgcmluZyByZXF1aXJlcworICoJc3BhY2UgZm9yIGl0cyBoYXJkd2FyZSBkZXNjcmlwdG9ycyBwbHVzLCBvcHRpb25hbGx5LCBzcGFjZSBmb3Igc29mdHdhcmUKKyAqCXN0YXRlIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGhhcmR3YXJlIGVudHJ5ICh0aGUgbWV0YWRhdGEpLiAgVGhlIGZ1bmN0aW9uCisgKglyZXR1cm5zIHRocmVlIHZhbHVlczogdGhlIHZpcnR1YWwgYWRkcmVzcyBmb3IgdGhlIGhhcmR3YXJlIHJpbmcgKHRoZQorICoJcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiksIHRoZSBQQ0kgYnVzIGFkZHJlc3Mgb2YgdGhlIGhhcmR3YXJlCisgKglyaW5nIChpbiAqYnVzYWRkcnApLCBhbmQgdGhlIGFkZHJlc3Mgb2YgdGhlIHNvZnR3YXJlIHJpbmcgKGluIHN3cmluZ3ApLgorICoJQm90aCB0aGUgaGFyZHdhcmUgYW5kIHNvZnR3YXJlIHJpbmdzIGFyZSByZXR1cm5lZCB6ZXJvZWQgb3V0LgorICovCitzdGF0aWMgdm9pZCAqYWxsb2NfcmluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBuZWxlbSwgc2l6ZV90IGh3c2l6ZSwKKwkJCXNpemVfdCBzd3NpemUsIGRtYV9hZGRyX3QgKmJ1c2FkZHJwLCB2b2lkICpzd3JpbmdwLAorCQkJc2l6ZV90IHN0YXRfc2l6ZSkKK3sKKwkvKgorCSAqIEFsbG9jYXRlIHRoZSBoYXJkd2FyZSByaW5nIGFuZCBQQ0kgRE1BIGJ1cyBhZGRyZXNzIHNwYWNlIGZvciBzYWlkLgorCSAqLworCXNpemVfdCBod2xlbiA9IG5lbGVtICogaHdzaXplICsgc3RhdF9zaXplOworCXZvaWQgKmh3cmluZyA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYsIGh3bGVuLCBidXNhZGRycCwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWh3cmluZykKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIElmIHRoZSBjYWxsZXIgd2FudHMgYSBzb2Z0d2FyZSByaW5nLCBhbGxvY2F0ZSBpdCBhbmQgcmV0dXJuIGEKKwkgKiBwb2ludGVyIHRvIGl0IGluICpzd3JpbmdwLgorCSAqLworCUJVR19PTigoc3dzaXplICE9IDApICE9IChzd3JpbmdwICE9IE5VTEwpKTsKKwlpZiAoc3dzaXplKSB7CisJCXZvaWQgKnN3cmluZyA9IGtjYWxsb2MobmVsZW0sIHN3c2l6ZSwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFzd3JpbmcpIHsKKwkJCWRtYV9mcmVlX2NvaGVyZW50KGRldiwgaHdsZW4sIGh3cmluZywgKmJ1c2FkZHJwKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCSoodm9pZCAqKilzd3JpbmdwID0gc3dyaW5nOworCX0KKworCS8qCisJICogWmVybyBvdXQgdGhlIGhhcmR3YXJlIHJpbmcgYW5kIHJldHVybiBpdHMgYWRkcmVzcyBhcyBvdXIgZnVuY3Rpb24KKwkgKiB2YWx1ZS4KKwkgKi8KKwltZW1zZXQoaHdyaW5nLCAwLCBod2xlbik7CisJcmV0dXJuIGh3cmluZzsKK30KKworLyoqCisgKglzZ2xfbGVuIC0gY2FsY3VsYXRlcyB0aGUgc2l6ZSBvZiBhbiBTR0wgb2YgdGhlIGdpdmVuIGNhcGFjaXR5CisgKglAbjogdGhlIG51bWJlciBvZiBTR0wgZW50cmllcworICoKKyAqCUNhbGN1bGF0ZXMgdGhlIG51bWJlciBvZiBmbGl0cyAoOC1ieXRlIHVuaXRzKSBuZWVkZWQgZm9yIGEgRGlyZWN0CisgKglTY2F0dGVyL0dhdGhlciBMaXN0IHRoYXQgY2FuIGhvbGQgdGhlIGdpdmVuIG51bWJlciBvZiBlbnRyaWVzLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzZ2xfbGVuKHVuc2lnbmVkIGludCBuKQoreworCS8qCisJICogQSBEaXJlY3QgU2NhdHRlciBHYXRoZXIgTGlzdCB1c2VzIDMyLWJpdCBsZW5ndGhzIGFuZCA2NC1iaXQgUENJIERNQQorCSAqIGFkZHJlc3Nlcy4gIFRoZSBEU0dMIFdvcmsgUmVxdWVzdCBzdGFydHMgb2ZmIHdpdGggYSAzMi1iaXQgRFNHTAorCSAqIFVMUFRYIGhlYWRlciwgdGhlbiBMZW5ndGgwLCB0aGVuIEFkZHJlc3MwLCB0aGVuLCBmb3IgMSA8PSBpIDw9IE4sCisJICogcmVwZWF0ZWQgc2VxdWVuY2VzIG9mIHsgTGVuZ3RoW2ldLCBMZW5ndGhbaSsxXSwgQWRkcmVzc1tpXSwKKwkgKiBBZGRyZXNzW2krMV0gfSAodGhpcyBlbnN1cmVzIHRoYXQgYWxsIGFkZHJlc3NlcyBhcmUgb24gNjQtYml0CisJICogYm91bmRhcmllcykuICBJZiBOIGlzIGV2ZW4sIHRoZW4gTGVuZ3RoW04rMV0gc2hvdWxkIGJlIHNldCB0byAwIGFuZAorCSAqIEFkZHJlc3NbTisxXSBpcyBvbWl0dGVkLgorCSAqCisJICogVGhlIGZvbGxvd2luZyBjYWxjdWxhdGlvbiBpbmNvcnBvcmF0ZXMgYWxsIG9mIHRoZSBhYm92ZS4gIEl0J3MKKwkgKiBzb21ld2hhdCBoYXJkIHRvIGZvbGxvdyBidXQsIGJyaWVmbHk6IHRoZSAiKzIiIGFjY291bnRzIGZvciB0aGUKKwkgKiBmaXJzdCB0d28gZmxpdHMgd2hpY2ggaW5jbHVkZSB0aGUgRFNHTCBoZWFkZXIsIExlbmd0aDAgYW5kCisJICogQWRkcmVzczA7IHRoZSAiKDMqKG4tMSkpLzIiIGNvdmVycyB0aGUgbWFpbiBib2R5IG9mIGxpc3QgZW50cmllcyAoMworCSAqIGZsaXRzIGZvciBldmVyeSBwYWlyIG9mIHRoZSByZW1haW5pbmcgTikgKzEgaWYgKG4tMSkgaXMgb2RkOyBhbmQKKwkgKiBmaW5hbGx5IHRoZSAiKygobi0xKSYxKSIgYWRkcyB0aGUgb25lIHJlbWFpbmluZyBmbGl0IG5lZWRlZCBpZgorCSAqIChuLTEpIGlzIG9kZCAuLi4KKwkgKi8KKwluLS07CisJcmV0dXJuICgzICogbikgLyAyICsgKG4gJiAxKSArIDI7Cit9CisKKy8qKgorICoJZmxpdHNfdG9fZGVzYyAtIHJldHVybnMgdGhlIG51bSBvZiBUWCBkZXNjcmlwdG9ycyBmb3IgdGhlIGdpdmVuIGZsaXRzCisgKglAZmxpdHM6IHRoZSBudW1iZXIgb2YgZmxpdHMKKyAqCisgKglSZXR1cm5zIHRoZSBudW1iZXIgb2YgVFggZGVzY3JpcHRvcnMgbmVlZGVkIGZvciB0aGUgc3VwcGxpZWQgbnVtYmVyCisgKglvZiBmbGl0cy4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZmxpdHNfdG9fZGVzYyh1bnNpZ25lZCBpbnQgZmxpdHMpCit7CisJQlVHX09OKGZsaXRzID4gU0dFX01BWF9XUl9MRU4gLyBzaXplb2YoX19iZTY0KSk7CisJcmV0dXJuIERJVl9ST1VORF9VUChmbGl0cywgVFhEX1BFUl9FUV9VTklUKTsKK30KKworLyoqCisgKglpc19ldGhfaW1tIC0gY2FuIGFuIEV0aGVybmV0IHBhY2tldCBiZSBzZW50IGFzIGltbWVkaWF0ZSBkYXRhPworICoJQHNrYjogdGhlIHBhY2tldAorICoKKyAqCVJldHVybnMgd2hldGhlciBhbiBFdGhlcm5ldCBwYWNrZXQgaXMgc21hbGwgZW5vdWdoIHRvIGZpdCBjb21wbGV0ZWx5IGFzCisgKglpbW1lZGlhdGUgZGF0YS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaXNfZXRoX2ltbShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCS8qCisJICogVGhlIFZGIERyaXZlciB1c2VzIHRoZSBGV19FVEhfVFhfUEtUX1ZNX1dSIGZpcm13YXJlIFdvcmsgUmVxdWVzdAorCSAqIHdoaWNoIGRvZXMgbm90IGFjY29tbW9kYXRlIGltbWVkaWF0ZSBkYXRhLiAgV2UgY291bGQgZGlrZSBvdXQgYWxsCisJICogb2YgdGhlIHN1cHBvcnQgY29kZSBmb3IgaW1tZWRpYXRlIGRhdGEgYnV0IHRoYXQgd291bGQgdGllIG91ciBoYW5kcworCSAqIHRvbyBtdWNoIGlmIHdlIGV2ZXIgd2FudCB0byBlbmhhY2UgdGhlIGZpcm13YXJlLiAgSXQgd291bGQgYWxzbworCSAqIGNyZWF0ZSBtb3JlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIFBGIGFuZCBWRiBEcml2ZXJzLgorCSAqLworCXJldHVybiBmYWxzZTsKK30KKworLyoqCisgKgljYWxjX3R4X2ZsaXRzIC0gY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgZmxpdHMgZm9yIGEgcGFja2V0IFRYIFdSCisgKglAc2tiOiB0aGUgcGFja2V0CisgKgorICoJUmV0dXJucyB0aGUgbnVtYmVyIG9mIGZsaXRzIG5lZWRlZCBmb3IgYSBUWCBXb3JrIFJlcXVlc3QgZm9yIHRoZQorICoJZ2l2ZW4gRXRoZXJuZXQgcGFja2V0LCBpbmNsdWRpbmcgdGhlIG5lZWRlZCBXUiBhbmQgQ1BMIGhlYWRlcnMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNhbGNfdHhfZmxpdHMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwl1bnNpZ25lZCBpbnQgZmxpdHM7CisKKwkvKgorCSAqIElmIHRoZSBza2IgaXMgc21hbGwgZW5vdWdoLCB3ZSBjYW4gcHVtcCBpdCBvdXQgYXMgYSB3b3JrIHJlcXVlc3QKKwkgKiB3aXRoIG9ubHkgaW1tZWRpYXRlIGRhdGEuICBJbiB0aGF0IGNhc2Ugd2UganVzdCBoYXZlIHRvIGhhdmUgdGhlCisJICogVFggUGFja2V0IGhlYWRlciBwbHVzIHRoZSBza2IgZGF0YSBpbiB0aGUgV29yayBSZXF1ZXN0LgorCSAqLworCWlmIChpc19ldGhfaW1tKHNrYikpCisJCXJldHVybiBESVZfUk9VTkRfVVAoc2tiLT5sZW4gKyBzaXplb2Yoc3RydWN0IGNwbF90eF9wa3QpLAorCQkJCSAgICBzaXplb2YoX19iZTY0KSk7CisKKwkvKgorCSAqIE90aGVyd2lzZSwgd2UncmUgZ29pbmcgdG8gaGF2ZSB0byBjb25zdHJ1Y3QgYSBTY2F0dGVyIGdhdGhlciBsaXN0CisJICogb2YgdGhlIHNrYiBib2R5IGFuZCBmcmFnbWVudHMuICBXZSBhbHNvIGluY2x1ZGUgdGhlIGZsaXRzIG5lY2Vzc2FyeQorCSAqIGZvciB0aGUgVFggUGFja2V0IFdvcmsgUmVxdWVzdCBhbmQgQ1BMLiAgV2UgYWx3YXlzIGhhdmUgYSBmaXJtd2FyZQorCSAqIFdyaXRlIEhlYWRlciAoaW5jb3Jwb3JhdGVkIGFzIHBhcnQgb2YgdGhlIGNwbF90eF9wa3RfbHNvIGFuZAorCSAqIGNwbF90eF9wa3Qgc3RydWN0dXJlcyksIGZvbGxvd2VkIGJ5IGVpdGhlciBhIFRYIFBhY2tldCBXcml0ZSBDUEwKKwkgKiBtZXNzYWdlIG9yLCBpZiB3ZSdyZSBkb2luZyBhIExhcmdlIFNlbmQgT2ZmbG9hZCwgYW4gTFNPIENQTCBtZXNzYWdlCisJICogd2l0aCBhbiBlbWJlZGVkIFRYIFBhY2tldCBXcml0ZSBDUEwgbWVzc2FnZS4KKwkgKi8KKwlmbGl0cyA9IHNnbF9sZW4oc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDEpOworCWlmIChza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplKQorCQlmbGl0cyArPSAoc2l6ZW9mKHN0cnVjdCBmd19ldGhfdHhfcGt0X3ZtX3dyKSArCisJCQkgIHNpemVvZihzdHJ1Y3QgY3BsX3R4X3BrdF9sc29fY29yZSkgKworCQkJICBzaXplb2Yoc3RydWN0IGNwbF90eF9wa3RfY29yZSkpIC8gc2l6ZW9mKF9fYmU2NCk7CisJZWxzZQorCQlmbGl0cyArPSAoc2l6ZW9mKHN0cnVjdCBmd19ldGhfdHhfcGt0X3ZtX3dyKSArCisJCQkgIHNpemVvZihzdHJ1Y3QgY3BsX3R4X3BrdF9jb3JlKSkgLyBzaXplb2YoX19iZTY0KTsKKwlyZXR1cm4gZmxpdHM7Cit9CisKKy8qKgorICoJd3JpdGVfc2dsIC0gcG9wdWxhdGUgYSBTY2F0dGVyL0dhdGhlciBMaXN0IGZvciBhIHBhY2tldAorICoJQHNrYjogdGhlIHBhY2tldAorICoJQHRxOiB0aGUgVFggcXVldWUgd2UgYXJlIHdyaXRpbmcgaW50bworICoJQHNnbDogc3RhcnRpbmcgbG9jYXRpb24gZm9yIHdyaXRpbmcgdGhlIFNHTAorICoJQGVuZDogcG9pbnRzIHJpZ2h0IGFmdGVyIHRoZSBlbmQgb2YgdGhlIFNHTAorICoJQHN0YXJ0OiBzdGFydCBvZmZzZXQgaW50byBza2IgbWFpbi1ib2R5IGRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgU0dMCisgKglAYWRkcjogdGhlIGxpc3Qgb2YgRE1BIGJ1cyBhZGRyZXNzZXMgZm9yIHRoZSBTR0wgZWxlbWVudHMKKyAqCisgKglHZW5lcmF0ZXMgYSBTY2F0dGVyL0dhdGhlciBMaXN0IGZvciB0aGUgYnVmZmVycyB0aGF0IG1ha2UgdXAgYSBwYWNrZXQuCisgKglUaGUgY2FsbGVyIG11c3QgcHJvdmlkZSBhZGVxdWF0ZSBzcGFjZSBmb3IgdGhlIFNHTCB0aGF0IHdpbGwgYmUgd3JpdHRlbi4KKyAqCVRoZSBTR0wgaW5jbHVkZXMgYWxsIG9mIHRoZSBwYWNrZXQncyBwYWdlIGZyYWdtZW50cyBhbmQgdGhlIGRhdGEgaW4gaXRzCisgKgltYWluIGJvZHkgZXhjZXB0IGZvciB0aGUgZmlyc3QgQHN0YXJ0IGJ5dGVzLiAgQHBvcyBtdXN0IGJlIDE2LWJ5dGUKKyAqCWFsaWduZWQgYW5kIHdpdGhpbiBhIFRYIGRlc2NyaXB0b3Igd2l0aCBhdmFpbGFibGUgc3BhY2UuICBAZW5kIHBvaW50cworICoJd3JpdGUgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgU0dMIGJ1dCBkb2VzIG5vdCBhY2NvdW50IGZvciBhbnkgcG90ZW50aWFsCisgKgl3cmFwIGFyb3VuZCwgaS5lLiwgQGVuZCA+IEB0cS0+c3RhdC4KKyAqLworc3RhdGljIHZvaWQgd3JpdGVfc2dsKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZ2VfdHhxICp0cSwKKwkJICAgICAgc3RydWN0IHVscHR4X3NnbCAqc2dsLCB1NjQgKmVuZCwgdW5zaWduZWQgaW50IHN0YXJ0LAorCQkgICAgICBjb25zdCBkbWFfYWRkcl90ICphZGRyKQoreworCXVuc2lnbmVkIGludCBpLCBsZW47CisJc3RydWN0IHVscHR4X3NnZV9wYWlyICp0bzsKKwljb25zdCBzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaSA9IHNrYl9zaGluZm8oc2tiKTsKKwl1bnNpZ25lZCBpbnQgbmZyYWdzID0gc2ktPm5yX2ZyYWdzOworCXN0cnVjdCB1bHB0eF9zZ2VfcGFpciBidWZbTUFYX1NLQl9GUkFHUyAvIDIgKyAxXTsKKworCWxlbiA9IHNrYl9oZWFkbGVuKHNrYikgLSBzdGFydDsKKwlpZiAobGlrZWx5KGxlbikpIHsKKwkJc2dsLT5sZW4wID0gaHRvbmwobGVuKTsKKwkJc2dsLT5hZGRyMCA9IGNwdV90b19iZTY0KGFkZHJbMF0gKyBzdGFydCk7CisJCW5mcmFncysrOworCX0gZWxzZSB7CisJCXNnbC0+bGVuMCA9IGh0b25sKHNpLT5mcmFnc1swXS5zaXplKTsKKwkJc2dsLT5hZGRyMCA9IGNwdV90b19iZTY0KGFkZHJbMV0pOworCX0KKworCXNnbC0+Y21kX25zZ2UgPSBodG9ubChVTFBUWF9DTUQoVUxQX1RYX1NDX0RTR0wpIHwKKwkJCSAgICAgIFVMUFRYX05TR0UobmZyYWdzKSk7CisJaWYgKGxpa2VseSgtLW5mcmFncyA9PSAwKSkKKwkJcmV0dXJuOworCS8qCisJICogTW9zdCBvZiB0aGUgY29tcGxleGl0eSBiZWxvdyBkZWFscyB3aXRoIHRoZSBwb3NzaWJpbGl0eSB3ZSBoaXQgdGhlCisJICogZW5kIG9mIHRoZSBxdWV1ZSBpbiB0aGUgbWlkZGxlIG9mIHdyaXRpbmcgdGhlIFNHTC4gIEZvciB0aGlzIGNhc2UKKwkgKiBvbmx5IHdlIGNyZWF0ZSB0aGUgU0dMIGluIGEgdGVtcG9yYXJ5IGJ1ZmZlciBhbmQgdGhlbiBjb3B5IGl0LgorCSAqLworCXRvID0gKHU4ICopZW5kID4gKHU4ICopdHEtPnN0YXQgPyBidWYgOiBzZ2wtPnNnZTsKKworCWZvciAoaSA9IChuZnJhZ3MgIT0gc2ktPm5yX2ZyYWdzKTsgbmZyYWdzID49IDI7IG5mcmFncyAtPSAyLCB0bysrKSB7CisJCXRvLT5sZW5bMF0gPSBjcHVfdG9fYmUzMihzaS0+ZnJhZ3NbaV0uc2l6ZSk7CisJCXRvLT5sZW5bMV0gPSBjcHVfdG9fYmUzMihzaS0+ZnJhZ3NbKytpXS5zaXplKTsKKwkJdG8tPmFkZHJbMF0gPSBjcHVfdG9fYmU2NChhZGRyW2ldKTsKKwkJdG8tPmFkZHJbMV0gPSBjcHVfdG9fYmU2NChhZGRyWysraV0pOworCX0KKwlpZiAobmZyYWdzKSB7CisJCXRvLT5sZW5bMF0gPSBjcHVfdG9fYmUzMihzaS0+ZnJhZ3NbaV0uc2l6ZSk7CisJCXRvLT5sZW5bMV0gPSBjcHVfdG9fYmUzMigwKTsKKwkJdG8tPmFkZHJbMF0gPSBjcHVfdG9fYmU2NChhZGRyW2kgKyAxXSk7CisJfQorCWlmICh1bmxpa2VseSgodTggKillbmQgPiAodTggKil0cS0+c3RhdCkpIHsKKwkJdW5zaWduZWQgaW50IHBhcnQwID0gKHU4ICopdHEtPnN0YXQgLSAodTggKilzZ2wtPnNnZSwgcGFydDE7CisKKwkJaWYgKGxpa2VseShwYXJ0MCkpCisJCQltZW1jcHkoc2dsLT5zZ2UsIGJ1ZiwgcGFydDApOworCQlwYXJ0MSA9ICh1OCAqKWVuZCAtICh1OCAqKXRxLT5zdGF0OworCQltZW1jcHkodHEtPmRlc2MsICh1OCAqKWJ1ZiArIHBhcnQwLCBwYXJ0MSk7CisJCWVuZCA9ICh2b2lkICopdHEtPmRlc2MgKyBwYXJ0MTsKKwl9CisJaWYgKCh1aW50cHRyX3QpZW5kICYgOCkgICAgICAgICAgIC8qIDAtcGFkIHRvIG11bHRpcGxlIG9mIDE2ICovCisJCSoodTY0ICopZW5kID0gMDsKK30KKworLyoqCisgKgljaGVja19yaW5nX3R4X2RiIC0gY2hlY2sgYW5kIHBvdGVudGlhbGx5IHJpbmcgYSBUWCBxdWV1ZSdzIGRvb3JiZWxsCisgKglAYWRhcHRlcjogdGhlIGFkYXB0ZXIKKyAqCUB0cTogdGhlIFRYIHF1ZXVlCisgKglAbjogbnVtYmVyIG9mIG5ldyBkZXNjcmlwdG9ycyB0byBnaXZlIHRvIEhXCisgKgorICoJUmluZyB0aGUgZG9vcmJlbCBmb3IgYSBUWCBxdWV1ZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHJpbmdfdHhfZGIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBzZ2VfdHhxICp0cSwKKwkJCSAgICAgIGludCBuKQoreworCS8qCisJICogV2FybiBpZiB3ZSB3cml0ZSBkb29yYmVsbHMgd2l0aCB0aGUgd3JvbmcgcHJpb3JpdHkgYW5kIHdyaXRlCisJICogZGVzY3JpcHRvcnMgYmVmb3JlIHRlbGxpbmcgSFcuCisJICovCisJV0FSTl9PTigoUUlEKHRxLT5jbnR4dF9pZCkgfCBQSURYKG4pKSAmIERCUFJJTyk7CisJd21iKCk7CisJdDRfd3JpdGVfcmVnKGFkYXB0ZXIsIFQ0VkZfU0dFX0JBU0VfQUREUiArIFNHRV9WRl9LRE9PUkJFTEwsCisJCSAgICAgUUlEKHRxLT5jbnR4dF9pZCkgfCBQSURYKG4pKTsKK30KKworLyoqCisgKglpbmxpbmVfdHhfc2tiIC0gaW5saW5lIGEgcGFja2V0J3MgZGF0YSBpbnRvIFRYIGRlc2NyaXB0b3JzCisgKglAc2tiOiB0aGUgcGFja2V0CisgKglAdHE6IHRoZSBUWCBxdWV1ZSB3aGVyZSB0aGUgcGFja2V0IHdpbGwgYmUgaW5saW5lZAorICoJQHBvczogc3RhcnRpbmcgcG9zaXRpb24gaW4gdGhlIFRYIHF1ZXVlIHRvIGlubGluZSB0aGUgcGFja2V0CisgKgorICoJSW5saW5lIGEgcGFja2V0J3MgY29udGVudHMgZGlyZWN0bHkgaW50byBUWCBkZXNjcmlwdG9ycywgc3RhcnRpbmcgYXQKKyAqCXRoZSBnaXZlbiBwb3NpdGlvbiB3aXRoaW4gdGhlIFRYIERNQSByaW5nLgorICoJTW9zdCBvZiB0aGUgY29tcGxleGl0eSBvZiB0aGlzIG9wZXJhdGlvbiBpcyBkZWFsaW5nIHdpdGggd3JhcCBhcm91bmRzCisgKglpbiB0aGUgbWlkZGxlIG9mIHRoZSBwYWNrZXQgd2Ugd2FudCB0byBpbmxpbmUuCisgKi8KK3N0YXRpYyB2b2lkIGlubGluZV90eF9za2IoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHNnZV90eHEgKnRxLAorCQkJICB2b2lkICpwb3MpCit7CisJdTY0ICpwOworCWludCBsZWZ0ID0gKHZvaWQgKil0cS0+c3RhdCAtIHBvczsKKworCWlmIChsaWtlbHkoc2tiLT5sZW4gPD0gbGVmdCkpIHsKKwkJaWYgKGxpa2VseSghc2tiLT5kYXRhX2xlbikpCisJCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgcG9zLCBza2ItPmxlbik7CisJCWVsc2UKKwkJCXNrYl9jb3B5X2JpdHMoc2tiLCAwLCBwb3MsIHNrYi0+bGVuKTsKKwkJcG9zICs9IHNrYi0+bGVuOworCX0gZWxzZSB7CisJCXNrYl9jb3B5X2JpdHMoc2tiLCAwLCBwb3MsIGxlZnQpOworCQlza2JfY29weV9iaXRzKHNrYiwgbGVmdCwgdHEtPmRlc2MsIHNrYi0+bGVuIC0gbGVmdCk7CisJCXBvcyA9ICh2b2lkICopdHEtPmRlc2MgKyAoc2tiLT5sZW4gLSBsZWZ0KTsKKwl9CisKKwkvKiAwLXBhZCB0byBtdWx0aXBsZSBvZiAxNiAqLworCXAgPSBQVFJfQUxJR04ocG9zLCA4KTsKKwlpZiAoKHVpbnRwdHJfdClwICYgOCkKKwkJKnAgPSAwOworfQorCisvKgorICogRmlndXJlIG91dCB3aGF0IEhXIGNzdW0gYSBwYWNrZXQgd2FudHMgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgY29udHJvbAorICogYml0cy4KKyAqLworc3RhdGljIHU2NCBod2NzdW0oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpbnQgY3N1bV90eXBlOworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CisKKwlpZiAoaXBoLT52ZXJzaW9uID09IDQpIHsKKwkJaWYgKGlwaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApCisJCQljc3VtX3R5cGUgPSBUWF9DU1VNX1RDUElQOworCQllbHNlIGlmIChpcGgtPnByb3RvY29sID09IElQUFJPVE9fVURQKQorCQkJY3N1bV90eXBlID0gVFhfQ1NVTV9VRFBJUDsKKwkJZWxzZSB7Citub2NzdW06CisJCQkvKgorCQkJICogdW5rbm93biBwcm90b2NvbCwgZGlzYWJsZSBIVyBjc3VtCisJCQkgKiBhbmQgaG9wZSBhIGJhZCBwYWNrZXQgaXMgZGV0ZWN0ZWQKKwkJCSAqLworCQkJcmV0dXJuIFRYUEtUX0w0Q1NVTV9ESVM7CisJCX0KKwl9IGVsc2UgeworCQkvKgorCQkgKiB0aGlzIGRvZXNuJ3Qgd29yayB3aXRoIGV4dGVuc2lvbiBoZWFkZXJzCisJCSAqLworCQljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IChjb25zdCBzdHJ1Y3QgaXB2NmhkciAqKWlwaDsKKworCQlpZiAoaXA2aC0+bmV4dGhkciA9PSBJUFBST1RPX1RDUCkKKwkJCWNzdW1fdHlwZSA9IFRYX0NTVU1fVENQSVA2OworCQllbHNlIGlmIChpcDZoLT5uZXh0aGRyID09IElQUFJPVE9fVURQKQorCQkJY3N1bV90eXBlID0gVFhfQ1NVTV9VRFBJUDY7CisJCWVsc2UKKwkJCWdvdG8gbm9jc3VtOworCX0KKworCWlmIChsaWtlbHkoY3N1bV90eXBlID49IFRYX0NTVU1fVENQSVApKQorCQlyZXR1cm4gVFhQS1RfQ1NVTV9UWVBFKGNzdW1fdHlwZSkgfAorCQkJVFhQS1RfSVBIRFJfTEVOKHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKSkgfAorCQkJVFhQS1RfRVRISERSX0xFTihza2JfbmV0d29ya19vZmZzZXQoc2tiKSAtIEVUSF9ITEVOKTsKKwllbHNlIHsKKwkJaW50IHN0YXJ0ID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTsKKworCQlyZXR1cm4gVFhQS1RfQ1NVTV9UWVBFKGNzdW1fdHlwZSkgfAorCQkJVFhQS1RfQ1NVTV9TVEFSVChzdGFydCkgfAorCQkJVFhQS1RfQ1NVTV9MT0Moc3RhcnQgKyBza2ItPmNzdW1fb2Zmc2V0KTsKKwl9Cit9CisKKy8qCisgKiBTdG9wIGFuIEV0aGVybmV0IFRYIHF1ZXVlIGFuZCByZWNvcmQgdGhhdCBzdGF0ZSBjaGFuZ2UuCisgKi8KK3N0YXRpYyB2b2lkIHR4cV9zdG9wKHN0cnVjdCBzZ2VfZXRoX3R4cSAqdHhxKQoreworCW5ldGlmX3R4X3N0b3BfcXVldWUodHhxLT50eHEpOworCXR4cS0+cS5zdG9wcysrOworfQorCisvKgorICogQWR2YW5jZSBvdXIgc29mdHdhcmUgc3RhdGUgZm9yIGEgVFggcXVldWUgYnkgYWRkaW5nIG4gaW4gdXNlIGRlc2NyaXB0b3JzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdHhxX2FkdmFuY2Uoc3RydWN0IHNnZV90eHEgKnRxLCB1bnNpZ25lZCBpbnQgbikKK3sKKwl0cS0+aW5fdXNlICs9IG47CisJdHEtPnBpZHggKz0gbjsKKwlpZiAodHEtPnBpZHggPj0gdHEtPnNpemUpCisJCXRxLT5waWR4IC09IHRxLT5zaXplOworfQorCisvKioKKyAqCXQ0dmZfZXRoX3htaXQgLSBhZGQgYSBwYWNrZXQgdG8gYW4gRXRoZXJuZXQgVFggcXVldWUKKyAqCUBza2I6IHRoZSBwYWNrZXQKKyAqCUBkZXY6IHRoZSBlZ3Jlc3MgbmV0IGRldmljZQorICoKKyAqCUFkZCBhIHBhY2tldCB0byBhbiBTR0UgRXRoZXJuZXQgVFggcXVldWUuICBSdW5zIHdpdGggc29mdGlycXMgZGlzYWJsZWQuCisgKi8KK2ludCB0NHZmX2V0aF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdTMyIHdyX21pZDsKKwl1NjQgY250cmwsICplbmQ7CisJaW50IHFpZHgsIGNyZWRpdHM7CisJdW5zaWduZWQgaW50IGZsaXRzLCBuZGVzYzsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3Qgc2dlX2V0aF90eHEgKnR4cTsKKwljb25zdCBzdHJ1Y3QgcG9ydF9pbmZvICpwaTsKKwlzdHJ1Y3QgZndfZXRoX3R4X3BrdF92bV93ciAqd3I7CisJc3RydWN0IGNwbF90eF9wa3RfY29yZSAqY3BsOworCWNvbnN0IHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNzaTsKKwlkbWFfYWRkcl90IGFkZHJbTUFYX1NLQl9GUkFHUyArIDFdOworCWNvbnN0IHNpemVfdCBmd19oZHJfY29weV9sZW4gPSAoc2l6ZW9mKHdyLT5ldGhtYWNkc3QpICsKKwkJCQkJc2l6ZW9mKHdyLT5ldGhtYWNzcmMpICsKKwkJCQkJc2l6ZW9mKHdyLT5ldGh0eXBlKSArCisJCQkJCXNpemVvZih3ci0+dmxhbnRjaSkpOworCisJLyoKKwkgKiBUaGUgY2hpcCBtaW5pbXVtIHBhY2tldCBsZW5ndGggaXMgMTAgb2N0ZXRzIGJ1dCB0aGUgZmlybXdhcmUKKwkgKiBjb21tYW5kIHRoYXQgd2UgYXJlIHVzaW5nIHJlcXVpcmVzIHRoYXQgd2UgY29weSB0aGUgRXRoZXJuZXQgaGVhZGVyCisJICogKGluY2x1ZGluZyB0aGUgVkxBTiB0YWcpIGludG8gdGhlIGhlYWRlciBzbyB3ZSByZWplY3QgYW55dGhpbmcKKwkgKiBzbWFsbGVyIHRoYW4gdGhhdCAuLi4KKwkgKi8KKwlpZiAodW5saWtlbHkoc2tiLT5sZW4gPCBmd19oZHJfY29weV9sZW4pKQorCQlnb3RvIG91dF9mcmVlOworCisJLyoKKwkgKiBGaWd1cmUgb3V0IHdoaWNoIFRYIFF1ZXVlIHdlJ3JlIGdvaW5nIHRvIHVzZS4KKwkgKi8KKwlwaSA9IG5ldGRldl9wcml2KGRldik7CisJYWRhcHRlciA9IHBpLT5hZGFwdGVyOworCXFpZHggPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKKwlCVUdfT04ocWlkeCA+PSBwaS0+bnFzZXRzKTsKKwl0eHEgPSAmYWRhcHRlci0+c2dlLmV0aHR4cVtwaS0+Zmlyc3RfcXNldCArIHFpZHhdOworCisJLyoKKwkgKiBUYWtlIHRoaXMgb3Bwb3J0dW5pdHkgdG8gcmVjbGFpbSBhbnkgVFggRGVzY3JpcHRvcnMgd2hvc2UgRE1BCisJICogdHJhbnNmZXJzIGhhdmUgY29tcGxldGVkLgorCSAqLworCXJlY2xhaW1fY29tcGxldGVkX3R4KGFkYXB0ZXIsICZ0eHEtPnEsIHRydWUpOworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBmbGl0cyBhbmQgVFggRGVzY3JpcHRvcnMgd2UncmUgZ29pbmcgdG8KKwkgKiBuZWVkIGFsb25nIHdpdGggaG93IG1hbnkgVFggRGVzY3JpcHRvcnMgd2lsbCBiZSBsZWZ0IG92ZXIgYWZ0ZXIKKwkgKiB3ZSBpbmplY3Qgb3VyIFdvcmsgUmVxdWVzdC4KKwkgKi8KKwlmbGl0cyA9IGNhbGNfdHhfZmxpdHMoc2tiKTsKKwluZGVzYyA9IGZsaXRzX3RvX2Rlc2MoZmxpdHMpOworCWNyZWRpdHMgPSB0eHFfYXZhaWwoJnR4cS0+cSkgLSBuZGVzYzsKKworCWlmICh1bmxpa2VseShjcmVkaXRzIDwgMCkpIHsKKwkJLyoKKwkJICogTm90IGVub3VnaCByb29tIGZvciB0aGlzIHBhY2tldCdzIFdvcmsgUmVxdWVzdC4gIFN0b3AgdGhlCisJCSAqIFRYIFF1ZXVlIGFuZCByZXR1cm4gYSAiYnVzeSIgY29uZGl0aW9uLiAgVGhlIHF1ZXVlIHdpbGwgZ2V0CisJCSAqIHN0YXJ0ZWQgbGF0ZXIgb24gd2hlbiB0aGUgZmlybXdhcmUgaW5mb3JtcyB1cyB0aGF0IHNwYWNlCisJCSAqIGhhcyBvcGVuZWQgdXAuCisJCSAqLworCQl0eHFfc3RvcCh0eHEpOworCQlkZXZfZXJyKGFkYXB0ZXItPnBkZXZfZGV2LAorCQkJIiVzOiBUWCByaW5nICV1IGZ1bGwgd2hpbGUgcXVldWUgYXdha2UhXG4iLAorCQkJZGV2LT5uYW1lLCBxaWR4KTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCX0KKworCWlmICghaXNfZXRoX2ltbShza2IpICYmCisJICAgIHVubGlrZWx5KG1hcF9za2IoYWRhcHRlci0+cGRldl9kZXYsIHNrYiwgYWRkcikgPCAwKSkgeworCQkvKgorCQkgKiBXZSBuZWVkIHRvIG1hcCB0aGUgc2tiIGludG8gUENJIERNQSBzcGFjZSAoYmVjYXVzZSBpdCBjYW4ndAorCQkgKiBiZSBpbi1saW5lZCBkaXJlY3RseSBpbnRvIHRoZSBXb3JrIFJlcXVlc3QpIGFuZCB0aGUgbWFwcGluZworCQkgKiBvcGVyYXRpb24gZmFpbGVkLiAgUmVjb3JkIHRoZSBlcnJvciBhbmQgZHJvcCB0aGUgcGFja2V0LgorCQkgKi8KKwkJdHhxLT5tYXBwaW5nX2VycisrOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCXdyX21pZCA9IEZXX1dSX0xFTjE2KERJVl9ST1VORF9VUChmbGl0cywgMikpOworCWlmICh1bmxpa2VseShjcmVkaXRzIDwgRVRIVFhRX1NUT1BfVEhSRVMpKSB7CisJCS8qCisJCSAqIEFmdGVyIHdlJ3JlIGRvbmUgaW5qZWN0aW5nIHRoZSBXb3JrIFJlcXVlc3QgZm9yIHRoaXMKKwkJICogcGFja2V0LCB3ZSdsbCBiZSBiZWxvdyBvdXIgInN0b3AgdGhyZXNoaG9sZCIgc28gc3RvcCB0aGUgVFgKKwkJICogUXVldWUgbm93IGFuZCBzY2hlZHVsZSBhIHJlcXVlc3QgZm9yIGFuIFNHRSBFZ3Jlc3MgUXVldWUKKwkJICogVXBkYXRlIG1lc3NhZ2UuICBUaGUgcXVldWUgd2lsbCBnZXQgc3RhcnRlZCBsYXRlciBvbiB3aGVuCisJCSAqIHRoZSBmaXJtd2FyZSBwcm9jZXNzZXMgdGhpcyBXb3JrIFJlcXVlc3QgYW5kIHNlbmRzIHVzIGFuCisJCSAqIEVncmVzcyBRdWV1ZSBTdGF0dXMgVXBkYXRlIG1lc3NhZ2UgaW5kaWNhdGluZyB0aGF0IHNwYWNlCisJCSAqIGhhcyBvcGVuZWQgdXAuCisJCSAqLworCQl0eHFfc3RvcCh0eHEpOworCQl3cl9taWQgfD0gRldfV1JfRVFVRVEgfCBGV19XUl9FUVVJUTsKKwl9CisKKwkvKgorCSAqIFN0YXJ0IGZpbGxpbmcgaW4gb3VyIFdvcmsgUmVxdWVzdC4gIE5vdGUgdGhhdCB3ZSBkbyBfbm90XyBoYW5kbGUKKwkgKiB0aGUgV1IgSGVhZGVyIHdyYXBwaW5nIGFyb3VuZCB0aGUgVFggRGVzY3JpcHRvciBSaW5nLiAgSWYgb3VyCisJICogbWF4aW11bSBoZWFkZXIgc2l6ZSBldmVyIGV4Y2VlZHMgb25lIFRYIERlc2NyaXB0b3IsIHdlJ2xsIG5lZWQgdG8KKwkgKiBkbyBzb21ldGhpbmcgZWxzZSBoZXJlLgorCSAqLworCUJVR19PTihESVZfUk9VTkRfVVAoRVRIVFhRX01BWF9IRFIsIFRYRF9QRVJfRVFfVU5JVCkgPiAxKTsKKwl3ciA9ICh2b2lkICopJnR4cS0+cS5kZXNjW3R4cS0+cS5waWR4XTsKKwl3ci0+ZXF1aXFfdG9fbGVuMTYgPSBjcHVfdG9fYmUzMih3cl9taWQpOworCXdyLT5yM1swXSA9IGNwdV90b19iZTY0KDApOworCXdyLT5yM1sxXSA9IGNwdV90b19iZTY0KDApOworCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCAodm9pZCAqKXdyLT5ldGhtYWNkc3QsIGZ3X2hkcl9jb3B5X2xlbik7CisJZW5kID0gKHU2NCAqKXdyICsgZmxpdHM7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYSBMYXJnZSBTZW5kIE9mZmxvYWQgcGFja2V0IHdlJ2xsIHB1dCBpbiBhbiBMU08gQ1BMCisJICogbWVzc2FnZSB3aXRoIGFuIGVuY2Fwc3VsYXRlZCBUWCBQYWNrZXQgQ1BMIG1lc3NhZ2UuICBPdGhlcndpc2Ugd2UKKwkgKiBqdXN0IHVzZSBhIFRYIFBhY2tldCBDUEwgbWVzc2FnZS4KKwkgKi8KKwlzc2kgPSBza2Jfc2hpbmZvKHNrYik7CisJaWYgKHNzaS0+Z3NvX3NpemUpIHsKKwkJc3RydWN0IGNwbF90eF9wa3RfbHNvX2NvcmUgKmxzbyA9ICh2b2lkICopKHdyICsgMSk7CisJCWJvb2wgdjYgPSAoc3NpLT5nc29fdHlwZSAmIFNLQl9HU09fVENQVjYpICE9IDA7CisJCWludCBsM2hkcl9sZW4gPSBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYik7CisJCWludCBldGhfeHRyYV9sZW4gPSBza2JfbmV0d29ya19vZmZzZXQoc2tiKSAtIEVUSF9ITEVOOworCisJCXdyLT5vcF9pbW1kbGVuID0KKwkJCWNwdV90b19iZTMyKEZXX1dSX09QKEZXX0VUSF9UWF9QS1RfVk1fV1IpIHwKKwkJCQkgICAgRldfV1JfSU1NRExFTihzaXplb2YoKmxzbykgKworCQkJCQkJICBzaXplb2YoKmNwbCkpKTsKKwkJLyoKKwkJICogRmlsbCBpbiB0aGUgTFNPIENQTCBtZXNzYWdlLgorCQkgKi8KKwkJbHNvLT5sc29fY3RybCA9CisJCQljcHVfdG9fYmUzMihMU09fT1BDT0RFKENQTF9UWF9QS1RfTFNPKSB8CisJCQkJICAgIExTT19GSVJTVF9TTElDRSB8CisJCQkJICAgIExTT19MQVNUX1NMSUNFIHwKKwkJCQkgICAgTFNPX0lQVjYodjYpIHwKKwkJCQkgICAgTFNPX0VUSEhEUl9MRU4oZXRoX3h0cmFfbGVuLzQpIHwKKwkJCQkgICAgTFNPX0lQSERSX0xFTihsM2hkcl9sZW4vNCkgfAorCQkJCSAgICBMU09fVENQSERSX0xFTih0Y3BfaGRyKHNrYiktPmRvZmYpKTsKKwkJbHNvLT5pcGlkX29mc3QgPSBjcHVfdG9fYmUxNigwKTsKKwkJbHNvLT5tc3MgPSBjcHVfdG9fYmUxNihzc2ktPmdzb19zaXplKTsKKwkJbHNvLT5zZXFub19vZmZzZXQgPSBjcHVfdG9fYmUzMigwKTsKKwkJbHNvLT5sZW4gPSBjcHVfdG9fYmUzMihza2ItPmxlbik7CisKKwkJLyoKKwkJICogU2V0IHVwIFRYIFBhY2tldCBDUEwgcG9pbnRlciwgY29udHJvbCB3b3JkIGFuZCBwZXJmb3JtCisJCSAqIGFjY291bnRpbmcuCisJCSAqLworCQljcGwgPSAodm9pZCAqKShsc28gKyAxKTsKKwkJY250cmwgPSAoVFhQS1RfQ1NVTV9UWVBFKHY2ID8gVFhfQ1NVTV9UQ1BJUDYgOiBUWF9DU1VNX1RDUElQKSB8CisJCQkgVFhQS1RfSVBIRFJfTEVOKGwzaGRyX2xlbikgfAorCQkJIFRYUEtUX0VUSEhEUl9MRU4oZXRoX3h0cmFfbGVuKSk7CisJCXR4cS0+dHNvKys7CisJCXR4cS0+dHhfY3NvICs9IHNzaS0+Z3NvX3NlZ3M7CisJfSBlbHNlIHsKKwkJaW50IGxlbjsKKworCQlsZW4gPSBpc19ldGhfaW1tKHNrYikgPyBza2ItPmxlbiArIHNpemVvZigqY3BsKSA6IHNpemVvZigqY3BsKTsKKwkJd3ItPm9wX2ltbWRsZW4gPQorCQkJY3B1X3RvX2JlMzIoRldfV1JfT1AoRldfRVRIX1RYX1BLVF9WTV9XUikgfAorCQkJCSAgICBGV19XUl9JTU1ETEVOKGxlbikpOworCisJCS8qCisJCSAqIFNldCB1cCBUWCBQYWNrZXQgQ1BMIHBvaW50ZXIsIGNvbnRyb2wgd29yZCBhbmQgcGVyZm9ybQorCQkgKiBhY2NvdW50aW5nLgorCQkgKi8KKwkJY3BsID0gKHZvaWQgKikod3IgKyAxKTsKKwkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKKwkJCWNudHJsID0gaHdjc3VtKHNrYikgfCBUWFBLVF9JUENTVU1fRElTOworCQkJdHhxLT50eF9jc28rKzsKKwkJfSBlbHNlCisJCQljbnRybCA9IFRYUEtUX0w0Q1NVTV9ESVMgfCBUWFBLVF9JUENTVU1fRElTOworCX0KKworCS8qCisJICogSWYgdGhlcmUncyBhIFZMQU4gdGFnIHByZXNlbnQsIGFkZCB0aGF0IHRvIHRoZSBsaXN0IG9mIHRoaW5ncyB0bworCSAqIGRvIGluIHRoaXMgV29yayBSZXF1ZXN0LgorCSAqLworCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKKwkJdHhxLT52bGFuX2lucysrOworCQljbnRybCB8PSBUWFBLVF9WTEFOX1ZMRCB8IFRYUEtUX1ZMQU4odmxhbl90eF90YWdfZ2V0KHNrYikpOworCX0KKworCS8qCisJICogRmlsbCBpbiB0aGUgVFggUGFja2V0IENQTCBtZXNzYWdlIGhlYWRlci4KKwkgKi8KKwljcGwtPmN0cmwwID0gY3B1X3RvX2JlMzIoVFhQS1RfT1BDT0RFKENQTF9UWF9QS1RfWFQpIHwKKwkJCQkgVFhQS1RfSU5URihwaS0+cG9ydF9pZCkgfAorCQkJCSBUWFBLVF9QRigwKSk7CisJY3BsLT5wYWNrID0gY3B1X3RvX2JlMTYoMCk7CisJY3BsLT5sZW4gPSBjcHVfdG9fYmUxNihza2ItPmxlbik7CisJY3BsLT5jdHJsMSA9IGNwdV90b19iZTY0KGNudHJsKTsKKworI2lmZGVmIFQ0X1RSQUNFCisJVDRfVFJBQ0U1KGFkYXB0ZXItPnRiW3R4cS0+cS5jbnR4dF9pZCAmIDddLAorCQkgICJldGhfeG1pdDogbmRlc2MgJXUsIGNyZWRpdHMgJXUsIHBpZHggJXUsIGxlbiAldSwgZnJhZ3MgJXUiLAorCQkgIG5kZXNjLCBjcmVkaXRzLCB0eHEtPnEucGlkeCwgc2tiLT5sZW4sIHNzaS0+bnJfZnJhZ3MpOworI2VuZGlmCisKKwkvKgorCSAqIEZpbGwgaW4gdGhlIGJvZHkgb2YgdGhlIFRYIFBhY2tldCBDUEwgbWVzc2FnZSB3aXRoIGVpdGhlciBpbi1saW5lZAorCSAqIGRhdGEgb3IgYSBTY2F0dGVyL0dhdGhlciBMaXN0LgorCSAqLworCWlmIChpc19ldGhfaW1tKHNrYikpIHsKKwkJLyoKKwkJICogSW4tbGluZSB0aGUgcGFja2V0J3MgZGF0YSBhbmQgZnJlZSB0aGUgc2tiIHNpbmNlIHdlIGRvbid0CisJCSAqIG5lZWQgaXQgYW55IGxvbmdlci4KKwkJICovCisJCWlubGluZV90eF9za2Ioc2tiLCAmdHhxLT5xLCBjcGwgKyAxKTsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFdyaXRlIHRoZSBza2IncyBTY2F0dGVyL0dhdGhlciBsaXN0IGludG8gdGhlIFRYIFBhY2tldCBDUEwKKwkJICogbWVzc2FnZSBhbmQgcmV0YWluIGEgcG9pbnRlciB0byB0aGUgc2tiIHNvIHdlIGNhbiBmcmVlIGl0CisJCSAqIGxhdGVyIHdoZW4gaXRzIERNQSBjb21wbGV0ZXMuICAoV2Ugc3RvcmUgdGhlIHNrYiBwb2ludGVyCisJCSAqIGluIHRoZSBTb2Z0d2FyZSBEZXNjcmlwdG9yIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxhc3QgVFgKKwkJICogRGVzY3JpcHRvciB1c2VkIGJ5IHRoZSBXb3JrIFJlcXVlc3QuKQorCQkgKgorCQkgKiBUaGUgcmV0YWluZWQgc2tiIHdpbGwgYmUgZnJlZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBUWAorCQkgKiBEZXNjcmlwdG9ycyBhcmUgcmVjbGFpbWVkIGFmdGVyIHRoZWlyIERNQXMgY29tcGxldGUuCisJCSAqIEhvd2V2ZXIsIHRoaXMgY291bGQgdGFrZSBxdWl0ZSBhIHdoaWxlIHNpbmNlLCBpbiBnZW5lcmFsLAorCQkgKiB0aGUgaGFyZHdhcmUgaXMgc2V0IHVwIHRvIGJlIGxhenkgYWJvdXQgc2VuZGluZyBETUEKKwkJICogY29tcGxldGlvbiBub3RpZmljYXRpb25zIHRvIHVzIGFuZCB3ZSBtb3N0bHkgcGVyZm9ybSBUWAorCQkgKiByZWNsYWltcyBpbiB0aGUgdHJhbnNtaXQgcm91dGluZS4KKwkJICoKKwkJICogVGhpcyBpcyBnb29kIGZvciBwZXJmb3JtYW1jZSBidXQgbWVhbnMgdGhhdCB3ZSByZWx5IG9uIG5ldworCQkgKiBUWCBwYWNrZXRzIGFycml2aW5nIHRvIHJ1biB0aGUgZGVzdHJ1Y3RvcnMgb2YgY29tcGxldGVkCisJCSAqIHBhY2tldHMsIHdoaWNoIG9wZW4gdXAgc3BhY2UgaW4gdGhlaXIgc29ja2V0cycgc2VuZCBxdWV1ZXMuCisJCSAqIFNvbWV0aW1lcyB3ZSBkbyBub3QgZ2V0IHN1Y2ggbmV3IHBhY2tldHMgY2F1c2luZyBUWCB0bworCQkgKiBzdGFsbC4gIEEgc2luZ2xlIFVEUCB0cmFuc21pdHRlciBpcyBhIGdvb2QgZXhhbXBsZSBvZiB0aGlzCisJCSAqIHNpdHVhdGlvbi4gIFdlIGhhdmUgYSBjbGVhbiB1cCB0aW1lciB0aGF0IHBlcmlvZGljYWxseQorCQkgKiByZWNsYWltcyBjb21wbGV0ZWQgcGFja2V0cyBidXQgaXQgZG9lc24ndCBydW4gb2Z0ZW4gZW5vdWdoCisJCSAqIChub3IgZG8gd2Ugd2FudCBpdCB0bykgdG8gcHJldmVudCBsZW5ndGh5IHN0YWxscy4gIEEKKwkJICogc29sdXRpb24gdG8gdGhpcyBwcm9ibGVtIGlzIHRvIHJ1biB0aGUgZGVzdHJ1Y3RvciBlYXJseSwKKwkJICogYWZ0ZXIgdGhlIHBhY2tldCBpcyBxdWV1ZWQgYnV0IGJlZm9yZSBpdCdzIERNQWQuICBBIGNvbiBpcworCQkgKiB0aGF0IHdlIGxpZSB0byBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcsIGJ1dCB0aGUgYW1vdW50IG9mCisJCSAqIGV4dHJhIG1lbW9yeSBpcyByZWFzb25hYmxlIChsaW1pdGVkIGJ5IHRoZSBudW1iZXIgb2YgVFgKKwkJICogZGVzY3JpcHRvcnMpLCB0aGUgcGFja2V0cyBkbyBhY3R1YWxseSBnZXQgZnJlZWQgcXVpY2tseSBieQorCQkgKiBuZXcgcGFja2V0cyBhbG1vc3QgYWx3YXlzLCBhbmQgZm9yIHByb3RvY29scyBsaWtlIFRDUCB0aGF0CisJCSAqIHdhaXQgZm9yIGFja3MgdG8gcmVhbGx5IGZyZWUgdXAgdGhlIGRhdGEgdGhlIGV4dHJhIG1lbW9yeQorCQkgKiBpcyBldmVuIGxlc3MuICBPbiB0aGUgcG9zaXRpdmUgc2lkZSB3ZSBydW4gdGhlIGRlc3RydWN0b3JzCisJCSAqIG9uIHRoZSBzZW5kaW5nIENQVSByYXRoZXIgdGhhbiBvbiBhIHBvdGVudGlhbGx5IGRpZmZlcmVudAorCQkgKiBjb21wbGV0aW5nIENQVSwgdXN1YWxseSBhIGdvb2QgdGhpbmcuCisJCSAqCisJCSAqIFJ1biB0aGUgZGVzdHJ1Y3RvciBiZWZvcmUgdGVsbGluZyB0aGUgRE1BIGVuZ2luZSBhYm91dCB0aGUKKwkJICogcGFja2V0IHRvIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGNvbXBsZXRlIGFuZCBnZXQgZnJlZWQKKwkJICogcHJlbWF0dXJlbHkuCisJCSAqLworCQlzdHJ1Y3QgdWxwdHhfc2dsICpzZ2wgPSAoc3RydWN0IHVscHR4X3NnbCAqKShjcGwgKyAxKTsKKwkJc3RydWN0IHNnZV90eHEgKnRxID0gJnR4cS0+cTsKKwkJaW50IGxhc3RfZGVzYzsKKworCQkvKgorCQkgKiBJZiB0aGUgV29yayBSZXF1ZXN0IGhlYWRlciB3YXMgYW4gZXhhY3QgbXVsdGlwbGUgb2Ygb3VyIFRYCisJCSAqIERlc2NyaXB0b3IgbGVuZ3RoLCB0aGVuIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgc3RhcnRpbmcgU0dMCisJCSAqIHBvaW50ZXIgbGluZXMgdXAgZXhhY3RseSB3aXRoIHRoZSBlbmQgb2Ygb3VyIFRYIERlc2NyaXB0b3IKKwkJICogcmluZy4gIElmIHRoYXQncyB0aGUgY2FzZSwgd3JhcCBhcm91bmQgdG8gdGhlIGJlZ2lubmluZworCQkgKiBoZXJlIC4uLgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KCh2b2lkICopc2dsID09ICh2b2lkICopdHEtPnN0YXQpKSB7CisJCQlzZ2wgPSAodm9pZCAqKXRxLT5kZXNjOworCQkJZW5kID0gKHZvaWQgKikoKHZvaWQgKil0cS0+ZGVzYyArCisJCQkJICAgICAgICgodm9pZCAqKWVuZCAtICh2b2lkICopdHEtPnN0YXQpKTsKKwkJfQorCisJCXdyaXRlX3NnbChza2IsIHRxLCBzZ2wsIGVuZCwgMCwgYWRkcik7CisJCXNrYl9vcnBoYW4oc2tiKTsKKworCQlsYXN0X2Rlc2MgPSB0cS0+cGlkeCArIG5kZXNjIC0gMTsKKwkJaWYgKGxhc3RfZGVzYyA+PSB0cS0+c2l6ZSkKKwkJCWxhc3RfZGVzYyAtPSB0cS0+c2l6ZTsKKwkJdHEtPnNkZXNjW2xhc3RfZGVzY10uc2tiID0gc2tiOworCQl0cS0+c2Rlc2NbbGFzdF9kZXNjXS5zZ2wgPSBzZ2w7CisJfQorCisJLyoKKwkgKiBBZHZhbmNlIG91ciBpbnRlcm5hbCBUWCBRdWV1ZSBzdGF0ZSwgdGVsbCB0aGUgaGFyZHdhcmUgYWJvdXQKKwkgKiB0aGUgbmV3IFRYIGRlc2NyaXB0b3JzIGFuZCByZXR1cm4gc3VjY2Vzcy4KKwkgKi8KKwl0eHFfYWR2YW5jZSgmdHhxLT5xLCBuZGVzYyk7CisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJcmluZ190eF9kYihhZGFwdGVyLCAmdHhxLT5xLCBuZGVzYyk7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKKworb3V0X2ZyZWU6CisJLyoKKwkgKiBBbiBlcnJvciBvZiBzb21lIHNvcnQgaGFwcGVuZWQuICBGcmVlIHRoZSBUWCBza2IgYW5kIHRlbGwgdGhlCisJICogT1MgdGhhdCB3ZSd2ZSAiZGVhbHQiIHdpdGggdGhlIHBhY2tldCAuLi4KKwkgKi8KKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KKworLyoqCisgKgl0NHZmX3BrdGdsX2ZyZWUgLSBmcmVlIGEgcGFja2V0IGdhdGhlciBsaXN0CisgKglAZ2w6IHRoZSBnYXRoZXIgbGlzdAorICoKKyAqCVJlbGVhc2VzIHRoZSBwYWdlcyBvZiBhIHBhY2tldCBnYXRoZXIgbGlzdC4gIFdlIGRvIG5vdCBvd24gdGhlIGxhc3QKKyAqCXBhZ2Ugb24gdGhlIGxpc3QgYW5kIGRvIG5vdCBmcmVlIGl0LgorICovCit2b2lkIHQ0dmZfcGt0Z2xfZnJlZShjb25zdCBzdHJ1Y3QgcGt0X2dsICpnbCkKK3sKKwlpbnQgZnJhZzsKKworCWZyYWcgPSBnbC0+bmZyYWdzIC0gMTsKKwl3aGlsZSAoZnJhZy0tKQorCQlwdXRfcGFnZShnbC0+ZnJhZ3NbZnJhZ10ucGFnZSk7Cit9CisKKy8qKgorICoJY29weV9mcmFncyAtIGNvcHkgZnJhZ21lbnRzIGZyb20gZ2F0aGVyIGxpc3QgaW50byBza2Jfc2hhcmVkX2luZm8KKyAqCUBzaTogZGVzdGluYXRpb24gc2tiIHNoYXJlZCBpbmZvIHN0cnVjdHVyZQorICoJQGdsOiBzb3VyY2UgaW50ZXJuYWwgcGFja2V0IGdhdGhlciBsaXN0CisgKglAb2Zmc2V0OiBwYWNrZXQgc3RhcnQgb2Zmc2V0IGluIGZpcnN0IHBhZ2UKKyAqCisgKglDb3B5IGFuIGludGVybmFsIHBhY2tldCBnYXRoZXIgbGlzdCBpbnRvIGEgTGludXggc2tiX3NoYXJlZF9pbmZvCisgKglzdHJ1Y3R1cmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X2ZyYWdzKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNpLAorCQkJICAgICAgY29uc3Qgc3RydWN0IHBrdF9nbCAqZ2wsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCXVuc2lnbmVkIGludCBuOworCisJLyogdXN1YWxseSB0aGVyZSdzIGp1c3Qgb25lIGZyYWcgKi8KKwlzaS0+ZnJhZ3NbMF0ucGFnZSA9IGdsLT5mcmFnc1swXS5wYWdlOworCXNpLT5mcmFnc1swXS5wYWdlX29mZnNldCA9IGdsLT5mcmFnc1swXS5wYWdlX29mZnNldCArIG9mZnNldDsKKwlzaS0+ZnJhZ3NbMF0uc2l6ZSA9IGdsLT5mcmFnc1swXS5zaXplIC0gb2Zmc2V0OworCXNpLT5ucl9mcmFncyA9IGdsLT5uZnJhZ3M7CisKKwluID0gZ2wtPm5mcmFncyAtIDE7CisJaWYgKG4pCisJCW1lbWNweSgmc2ktPmZyYWdzWzFdLCAmZ2wtPmZyYWdzWzFdLCBuICogc2l6ZW9mKHNrYl9mcmFnX3QpKTsKKworCS8qIGdldCBhIHJlZmVyZW5jZSB0byB0aGUgbGFzdCBwYWdlLCB3ZSBkb24ndCBvd24gaXQgKi8KKwlnZXRfcGFnZShnbC0+ZnJhZ3Nbbl0ucGFnZSk7Cit9CisKKy8qKgorICoJZG9fZ3JvIC0gcGVyZm9ybSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBpbmdyZXNzIHBhY2tldCBwcm9jZXNzaW5nCisgKglAcnhxOiBpbmdyZXNzIFJYIEV0aGVybmV0IFF1ZXVlCisgKglAZ2w6IGdhdGhlciBsaXN0IGZvciBpbmdyZXNzIHBhY2tldAorICoJQHBrdDogQ1BMIGhlYWRlciBmb3IgbGFzdCBwYWNrZXQgZnJhZ21lbnQKKyAqCisgKglQZXJmb3JtIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIGluZ3Jlc3MgcGFja2V0IHByb2Nlc3NpbmcuCisgKglXZSB1c2UgdGhlIHN0YW5kYXJkIExpbnV4IEdSTyBpbnRlcmZhY2VzIGZvciB0aGlzLgorICovCitzdGF0aWMgdm9pZCBkb19ncm8oc3RydWN0IHNnZV9ldGhfcnhxICpyeHEsIGNvbnN0IHN0cnVjdCBwa3RfZ2wgKmdsLAorCQkgICBjb25zdCBzdHJ1Y3QgY3BsX3J4X3BrdCAqcGt0KQoreworCWludCByZXQ7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCXNrYiA9IG5hcGlfZ2V0X2ZyYWdzKCZyeHEtPnJzcHEubmFwaSk7CisJaWYgKHVubGlrZWx5KCFza2IpKSB7CisJCXQ0dmZfcGt0Z2xfZnJlZShnbCk7CisJCXJ4cS0+c3RhdHMucnhfZHJvcHMrKzsKKwkJcmV0dXJuOworCX0KKworCWNvcHlfZnJhZ3Moc2tiX3NoaW5mbyhza2IpLCBnbCwgUEtUU0hJRlQpOworCXNrYi0+bGVuID0gZ2wtPnRvdF9sZW4gLSBQS1RTSElGVDsKKwlza2ItPmRhdGFfbGVuID0gc2tiLT5sZW47CisJc2tiLT50cnVlc2l6ZSArPSBza2ItPmRhdGFfbGVuOworCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIHJ4cS0+cnNwcS5pZHgpOworCisJaWYgKHVubGlrZWx5KHBrdC0+dmxhbl9leCkpIHsKKwkJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihyeHEtPnJzcHEubmV0ZGV2KTsKKwkJc3RydWN0IHZsYW5fZ3JvdXAgKmdycCA9IHBpLT52bGFuX2dycDsKKworCQlyeHEtPnN0YXRzLnZsYW5fZXgrKzsKKwkJaWYgKGxpa2VseShncnApKSB7CisJCQlyZXQgPSB2bGFuX2dyb19mcmFncygmcnhxLT5yc3BxLm5hcGksIGdycCwKKwkJCQkJICAgICBiZTE2X3RvX2NwdShwa3QtPnZsYW4pKTsKKwkJCWdvdG8gc3RhdHM7CisJCX0KKwl9CisJcmV0ID0gbmFwaV9ncm9fZnJhZ3MoJnJ4cS0+cnNwcS5uYXBpKTsKKworc3RhdHM6CisJaWYgKHJldCA9PSBHUk9fSEVMRCkKKwkJcnhxLT5zdGF0cy5scm9fcGt0cysrOworCWVsc2UgaWYgKHJldCA9PSBHUk9fTUVSR0VEIHx8IHJldCA9PSBHUk9fTUVSR0VEX0ZSRUUpCisJCXJ4cS0+c3RhdHMubHJvX21lcmdlZCsrOworCXJ4cS0+c3RhdHMucGt0cysrOworCXJ4cS0+c3RhdHMucnhfY3NvKys7Cit9CisKKy8qKgorICoJdDR2Zl9ldGhyeF9oYW5kbGVyIC0gcHJvY2VzcyBhbiBpbmdyZXNzIGV0aGVybmV0IHBhY2tldAorICoJQHJzcHE6IHRoZSByZXNwb25zZSBxdWV1ZSB0aGF0IHJlY2VpdmVkIHRoZSBwYWNrZXQKKyAqCUByc3A6IHRoZSByZXNwb25zZSBxdWV1ZSBkZXNjcmlwdG9yIGhvbGRpbmcgdGhlIFJYX1BLVCBtZXNzYWdlCisgKglAZ2w6IHRoZSBnYXRoZXIgbGlzdCBvZiBwYWNrZXQgZnJhZ21lbnRzCisgKgorICoJUHJvY2VzcyBhbiBpbmdyZXNzIGV0aGVybmV0IHBhY2tldCBhbmQgZGVsaXZlciBpdCB0byB0aGUgc3RhY2suCisgKi8KK2ludCB0NHZmX2V0aHJ4X2hhbmRsZXIoc3RydWN0IHNnZV9yc3BxICpyc3BxLCBjb25zdCBfX2JlNjQgKnJzcCwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBwa3RfZ2wgKmdsKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHBvcnRfaW5mbyAqcGk7CisJc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc3NpOworCWNvbnN0IHN0cnVjdCBjcGxfcnhfcGt0ICpwa3QgPSAodm9pZCAqKSZyc3BbMV07CisJYm9vbCBjc3VtX29rID0gcGt0LT5jc3VtX2NhbGMgJiYgIXBrdC0+ZXJyX3ZlYzsKKwl1bnNpZ25lZCBpbnQgbGVuID0gYmUxNl90b19jcHUocGt0LT5sZW4pOworCXN0cnVjdCBzZ2VfZXRoX3J4cSAqcnhxID0gY29udGFpbmVyX29mKHJzcHEsIHN0cnVjdCBzZ2VfZXRoX3J4cSwgcnNwcSk7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYSBnb29kIFRDUCBwYWNrZXQgYW5kIHdlIGhhdmUgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQKKwkgKiBlbmFibGVkLCBoYW5kbGUgdGhlIHBhY2tldCBpbiB0aGUgR1JPIHBhdGguCisJICovCisJaWYgKChwa3QtPmwyaW5mbyAmIGNwdV90b19iZTMyKFJYRl9UQ1ApKSAmJgorCSAgICAocnNwcS0+bmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfR1JPKSAmJiBjc3VtX29rICYmCisJICAgICFwa3QtPmlwX2ZyYWcpIHsKKwkJZG9fZ3JvKHJ4cSwgZ2wsIHBrdCk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogSWYgdGhlIGluZ3Jlc3MgcGFja2V0IGlzIHNtYWxsIGVub3VnaCwgYWxsb2NhdGUgYW4gc2tiIGxhcmdlIGVub3VnaAorCSAqIGZvciBhbGwgb2YgdGhlIGRhdGEgYW5kIGNvcHkgaXQgaW5saW5lLiAgT3RoZXJ3aXNlLCBhbGxvY2F0ZSBhbiBza2IKKwkgKiB3aXRoIGVub3VnaCByb29tIHRvIHB1bGwgaW4gdGhlIGhlYWRlciBhbmQgcmVmZXJlbmNlIHRoZSByZXN0IG9mCisJICogdGhlIGRhdGEgdmlhIHRoZSBza2IgZnJhZ21lbnQgbGlzdC4KKwkgKi8KKwlpZiAobGVuIDw9IFJYX0NPUFlfVEhSRVMpIHsKKwkJLyogc21hbGwgcGFja2V0cyBoYXZlIG9ubHkgb25lIGZyYWdtZW50ICovCisJCXNrYiA9IGFsbG9jX3NrYihnbC0+ZnJhZ3NbMF0uc2l6ZSwgR0ZQX0FUT01JQyk7CisJCWlmICghc2tiKQorCQkJZ290byBub21lbTsKKwkJX19za2JfcHV0KHNrYiwgZ2wtPmZyYWdzWzBdLnNpemUpOworCQlza2JfY29weV90b19saW5lYXJfZGF0YShza2IsIGdsLT52YSwgZ2wtPmZyYWdzWzBdLnNpemUpOworCX0gZWxzZSB7CisJCXNrYiA9IGFsbG9jX3NrYihSWF9QS1RfUFVMTF9MRU4sIEdGUF9BVE9NSUMpOworCQlpZiAoIXNrYikKKwkJCWdvdG8gbm9tZW07CisJCV9fc2tiX3B1dChza2IsIFJYX1BLVF9QVUxMX0xFTik7CisJCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwgZ2wtPnZhLCBSWF9QS1RfUFVMTF9MRU4pOworCisJCXNzaSA9IHNrYl9zaGluZm8oc2tiKTsKKwkJc3NpLT5mcmFnc1swXS5wYWdlID0gZ2wtPmZyYWdzWzBdLnBhZ2U7CisJCXNzaS0+ZnJhZ3NbMF0ucGFnZV9vZmZzZXQgPSAoZ2wtPmZyYWdzWzBdLnBhZ2Vfb2Zmc2V0ICsKKwkJCQkJICAgICBSWF9QS1RfUFVMTF9MRU4pOworCQlzc2ktPmZyYWdzWzBdLnNpemUgPSBnbC0+ZnJhZ3NbMF0uc2l6ZSAtIFJYX1BLVF9QVUxMX0xFTjsKKwkJaWYgKGdsLT5uZnJhZ3MgPiAxKQorCQkJbWVtY3B5KCZzc2ktPmZyYWdzWzFdLCAmZ2wtPmZyYWdzWzFdLAorCQkJICAgICAgIChnbC0+bmZyYWdzLTEpICogc2l6ZW9mKHNrYl9mcmFnX3QpKTsKKwkJc3NpLT5ucl9mcmFncyA9IGdsLT5uZnJhZ3M7CisJCXNrYi0+bGVuID0gbGVuICsgUEtUU0hJRlQ7CisJCXNrYi0+ZGF0YV9sZW4gPSBza2ItPmxlbiAtIFJYX1BLVF9QVUxMX0xFTjsKKwkJc2tiLT50cnVlc2l6ZSArPSBza2ItPmRhdGFfbGVuOworCisJCS8qIEdldCBhIHJlZmVyZW5jZSBmb3IgdGhlIGxhc3QgcGFnZSwgd2UgZG9uJ3Qgb3duIGl0ICovCisJCWdldF9wYWdlKGdsLT5mcmFnc1tnbC0+bmZyYWdzIC0gMV0ucGFnZSk7CisJfQorCisJX19za2JfcHVsbChza2IsIFBLVFNISUZUKTsKKwlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCByc3BxLT5uZXRkZXYpOworCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCByc3BxLT5pZHgpOworCXNrYi0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsgICAgICAgICAgICAgICAgICAvKiBYWFggcmVtb3ZlZCAyLjYuMjkgKi8KKwlwaSA9IG5ldGRldl9wcml2KHNrYi0+ZGV2KTsKKwlyeHEtPnN0YXRzLnBrdHMrKzsKKworCWlmIChjc3VtX29rICYmIChwaS0+cnhfb2ZmbG9hZCAmIFJYX0NTTykgJiYgIXBrdC0+ZXJyX3ZlYyAmJgorCSAgICAoYmUzMl90b19jcHUocGt0LT5sMmluZm8pICYgKFJYRl9VRFB8UlhGX1RDUCkpKSB7CisJCWlmICghcGt0LT5pcF9mcmFnKQorCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJZWxzZSB7CisJCQlfX3N1bTE2IGMgPSAoX19mb3JjZSBfX3N1bTE2KXBrdC0+Y3N1bTsKKwkJCXNrYi0+Y3N1bSA9IGNzdW1fdW5mb2xkKGMpOworCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9DT01QTEVURTsKKwkJfQorCQlyeHEtPnN0YXRzLnJ4X2NzbysrOworCX0gZWxzZQorCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisKKwlpZiAodW5saWtlbHkocGt0LT52bGFuX2V4KSkgeworCQlzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwID0gcGktPnZsYW5fZ3JwOworCisJCXJ4cS0+c3RhdHMudmxhbl9leCsrOworCQlpZiAobGlrZWx5KGdycCkpCisJCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBncnAsCisJCQkJCQkgYmUxNl90b19jcHUocGt0LT52bGFuKSk7CisJCWVsc2UKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJfSBlbHNlCisJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CisKKwlyZXR1cm4gMDsKKworbm9tZW06CisJdDR2Zl9wa3RnbF9mcmVlKGdsKTsKKwlyeHEtPnN0YXRzLnJ4X2Ryb3BzKys7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJaXNfbmV3X3Jlc3BvbnNlIC0gY2hlY2sgaWYgYSByZXNwb25zZSBpcyBuZXdseSB3cml0dGVuCisgKglAcmM6IHRoZSByZXNwb25zZSBjb250cm9sIGRlc2NyaXB0b3IKKyAqCUByc3BxOiB0aGUgcmVzcG9uc2UgcXVldWUKKyAqCisgKglSZXR1cm5zIHRydWUgaWYgYSByZXNwb25zZSBkZXNjcmlwdG9yIGNvbnRhaW5zIGEgeWV0IHVucHJvY2Vzc2VkCisgKglyZXNwb25zZS4KKyAqLworc3RhdGljIGlubGluZSBib29sIGlzX25ld19yZXNwb25zZShjb25zdCBzdHJ1Y3QgcnNwX2N0cmwgKnJjLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBzZ2VfcnNwcSAqcnNwcSkKK3sKKwlyZXR1cm4gUlNQRF9HRU4ocmMtPnR5cGVfZ2VuKSA9PSByc3BxLT5nZW47Cit9CisKKy8qKgorICoJcmVzdG9yZV9yeF9idWZzIC0gcHV0IGJhY2sgYSBwYWNrZXQncyBSWCBidWZmZXJzCisgKglAZ2w6IHRoZSBwYWNrZXQgZ2F0aGVyIGxpc3QKKyAqCUBmbDogdGhlIFNHRSBGcmVlIExpc3QKKyAqCUBuZnJhZ3M6IGhvdyBtYW55IGZyYWdtZW50cyBpbiBAc2kKKyAqCisgKglDYWxsZWQgd2hlbiB3ZSBmaW5kIG91dCB0aGF0IHRoZSBjdXJyZW50IHBhY2tldCwgQHNpLCBjYW4ndCBiZQorICoJcHJvY2Vzc2VkIHJpZ2h0IGF3YXkgZm9yIHNvbWUgcmVhc29uLiAgVGhpcyBpcyBhIHZlcnkgcmFyZSBldmVudCBhbmQKKyAqCXRoZXJlJ3Mgbm8gZWZmb3J0IHRvIG1ha2UgdGhpcyBzdXNwZW5zaW9uL3Jlc3VtcHRpb24gcHJvY2VzcworICoJcGFydGljdWxhcmx5IGVmZmljaWVudC4KKyAqCisgKglXZSBpbXBsZW1lbnQgdGhlIHN1c3BlbnNpb24gYnkgcHV0dGluZyBhbGwgb2YgdGhlIFJYIGJ1ZmZlcnMgYXNzb2NpYXRlZAorICoJd2l0aCB0aGUgY3VycmVudCBwYWNrZXQgYmFjayBvbiB0aGUgb3JpZ2luYWwgRnJlZSBMaXN0LiAgVGhlIGJ1ZmZlcnMKKyAqCWhhdmUgYWxyZWFkeSBiZWVuIHVubWFwcGVkIGFuZCBhcmUgbGVmdCB1bm1hcHBlZCwgd2UgbWFyayB0aGVtIGFzCisgKgl1bm1hcHBlZCBpbiBvcmRlciB0byBwcmV2ZW50IGZ1cnRoZXIgdW5tYXBwaW5nIGF0dGVtcHRzLiAgKEVmZmVjdGl2ZWx5CisgKgl0aGlzIGZ1bmN0aW9uIHVuZG9lcyB0aGUgc2VyaWVzIG9mIEB1bm1hcF9yeF9idWYgY2FsbHMgd2hpY2ggd2VyZSBkb25lCisgKgl0byBjcmVhdGUgdGhlIGN1cnJlbnQgcGFja2V0J3MgZ2F0aGVyIGxpc3QuKSAgVGhpcyBsZWF2ZXMgdXMgcmVhZHkgdG8KKyAqCXJlc3RhcnQgcHJvY2Vzc2luZyBvZiB0aGUgcGFja2V0IHRoZSBuZXh0IHRpbWUgd2Ugc3RhcnQgcHJvY2Vzc2luZyB0aGUKKyAqCVJYIFF1ZXVlIC4uLgorICovCitzdGF0aWMgdm9pZCByZXN0b3JlX3J4X2J1ZnMoY29uc3Qgc3RydWN0IHBrdF9nbCAqZ2wsIHN0cnVjdCBzZ2VfZmwgKmZsLAorCQkJICAgIGludCBmcmFncykKK3sKKwlzdHJ1Y3Qgcnhfc3dfZGVzYyAqc2Rlc2M7CisKKwl3aGlsZSAoZnJhZ3MtLSkgeworCQlpZiAoZmwtPmNpZHggPT0gMCkKKwkJCWZsLT5jaWR4ID0gZmwtPnNpemUgLSAxOworCQllbHNlCisJCQlmbC0+Y2lkeC0tOworCQlzZGVzYyA9ICZmbC0+c2Rlc2NbZmwtPmNpZHhdOworCQlzZGVzYy0+cGFnZSA9IGdsLT5mcmFnc1tmcmFnc10ucGFnZTsKKwkJc2Rlc2MtPmRtYV9hZGRyIHw9IFJYX1VOTUFQUEVEX0JVRjsKKwkJZmwtPmF2YWlsKys7CisJfQorfQorCisvKioKKyAqCXJzcHFfbmV4dCAtIGFkdmFuY2UgdG8gdGhlIG5leHQgZW50cnkgaW4gYSByZXNwb25zZSBxdWV1ZQorICoJQHJzcHE6IHRoZSBxdWV1ZQorICoKKyAqCVVwZGF0ZXMgdGhlIHN0YXRlIG9mIGEgcmVzcG9uc2UgcXVldWUgdG8gYWR2YW5jZSBpdCB0byB0aGUgbmV4dCBlbnRyeS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHJzcHFfbmV4dChzdHJ1Y3Qgc2dlX3JzcHEgKnJzcHEpCit7CisJcnNwcS0+Y3VyX2Rlc2MgPSAodm9pZCAqKXJzcHEtPmN1cl9kZXNjICsgcnNwcS0+aXFlX2xlbjsKKwlpZiAodW5saWtlbHkoKytyc3BxLT5jaWR4ID09IHJzcHEtPnNpemUpKSB7CisJCXJzcHEtPmNpZHggPSAwOworCQlyc3BxLT5nZW4gXj0gMTsKKwkJcnNwcS0+Y3VyX2Rlc2MgPSByc3BxLT5kZXNjOworCX0KK30KKworLyoqCisgKglwcm9jZXNzX3Jlc3BvbnNlcyAtIHByb2Nlc3MgcmVzcG9uc2VzIGZyb20gYW4gU0dFIHJlc3BvbnNlIHF1ZXVlCisgKglAcnNwcTogdGhlIGluZ3Jlc3MgcmVzcG9uc2UgcXVldWUgdG8gcHJvY2VzcworICoJQGJ1ZGdldDogaG93IG1hbnkgcmVzcG9uc2VzIGNhbiBiZSBwcm9jZXNzZWQgaW4gdGhpcyByb3VuZAorICoKKyAqCVByb2Nlc3MgcmVzcG9uc2VzIGZyb20gYSBTY2F0dGVyIEdhdGhlciBFbmdpbmUgcmVzcG9uc2UgcXVldWUgdXAgdG8KKyAqCXRoZSBzdXBwbGllZCBidWRnZXQuICBSZXNwb25zZXMgaW5jbHVkZSByZWNlaXZlZCBwYWNrZXRzIGFzIHdlbGwgYXMKKyAqCWNvbnRyb2wgbWVzc2FnZXMgZnJvbSBmaXJtd2FyZSBvciBoYXJkd2FyZS4KKyAqCisgKglBZGRpdGlvbmFsbHkgY2hvb3NlIHRoZSBpbnRlcnJ1cHQgaG9sZG9mZiB0aW1lIGZvciB0aGUgbmV4dCBpbnRlcnJ1cHQKKyAqCW9uIHRoaXMgcXVldWUuICBJZiB0aGUgc3lzdGVtIGlzIHVuZGVyIG1lbW9yeSBzaG9ydGFnZSB1c2UgYSBmYWlybHkKKyAqCWxvbmcgZGVsYXkgdG8gaGVscCByZWNvdmVyeS4KKyAqLworaW50IHByb2Nlc3NfcmVzcG9uc2VzKHN0cnVjdCBzZ2VfcnNwcSAqcnNwcSwgaW50IGJ1ZGdldCkKK3sKKwlzdHJ1Y3Qgc2dlX2V0aF9yeHEgKnJ4cSA9IGNvbnRhaW5lcl9vZihyc3BxLCBzdHJ1Y3Qgc2dlX2V0aF9yeHEsIHJzcHEpOworCWludCBidWRnZXRfbGVmdCA9IGJ1ZGdldDsKKworCXdoaWxlIChsaWtlbHkoYnVkZ2V0X2xlZnQpKSB7CisJCWludCByZXQsIHJzcF90eXBlOworCQljb25zdCBzdHJ1Y3QgcnNwX2N0cmwgKnJjOworCisJCXJjID0gKHZvaWQgKilyc3BxLT5jdXJfZGVzYyArIChyc3BxLT5pcWVfbGVuIC0gc2l6ZW9mKCpyYykpOworCQlpZiAoIWlzX25ld19yZXNwb25zZShyYywgcnNwcSkpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBGaWd1cmUgb3V0IHdoYXQga2luZCBvZiByZXNwb25zZSB3ZSd2ZSByZWNlaXZlZCBmcm9tIHRoZQorCQkgKiBTR0UuCisJCSAqLworCQlybWIoKTsKKwkJcnNwX3R5cGUgPSBSU1BEX1RZUEUocmMtPnR5cGVfZ2VuKTsKKwkJaWYgKGxpa2VseShyc3BfdHlwZSA9PSBSU1BfVFlQRV9GTEJVRikpIHsKKwkJCXNrYl9mcmFnX3QgKmZwOworCQkJc3RydWN0IHBrdF9nbCBnbDsKKwkJCWNvbnN0IHN0cnVjdCByeF9zd19kZXNjICpzZGVzYzsKKwkJCXUzMiBidWZzeiwgZnJhZzsKKwkJCXUzMiBsZW4gPSBiZTMyX3RvX2NwdShyYy0+cGxkYnVmbGVuX3FpZCk7CisKKwkJCS8qCisJCQkgKiBJZiB3ZSBnZXQgYSAibmV3IGJ1ZmZlciIgbWVzc2FnZSBmcm9tIHRoZSBTR0Ugd2UKKwkJCSAqIG5lZWQgdG8gbW92ZSBvbiB0byB0aGUgbmV4dCBGcmVlIExpc3QgYnVmZmVyLgorCQkJICovCisJCQlpZiAobGVuICYgUlNQRF9ORVdCVUYpIHsKKwkJCQkvKgorCQkJCSAqIFdlIGdldCBvbmUgIm5ldyBidWZmZXIiIG1lc3NhZ2Ugd2hlbiB3ZQorCQkJCSAqIGZpcnN0IHN0YXJ0IHVwIGEgcXVldWUgc28gd2UgbmVlZCB0byBpZ25vcmUKKwkJCQkgKiBpdCB3aGVuIG91ciBvZmZzZXQgaW50byB0aGUgYnVmZmVyIGlzIDAuCisJCQkJICovCisJCQkJaWYgKGxpa2VseShyc3BxLT5vZmZzZXQgPiAwKSkgeworCQkJCQlmcmVlX3J4X2J1ZnMocnNwcS0+YWRhcHRlciwgJnJ4cS0+ZmwsCisJCQkJCQkgICAgIDEpOworCQkJCQlyc3BxLT5vZmZzZXQgPSAwOworCQkJCX0KKwkJCQlsZW4gPSBSU1BEX0xFTihsZW4pOworCQkJfQorCisJCQkvKgorCQkJICogR2F0aGVyIHBhY2tldCBmcmFnbWVudHMuCisJCQkgKi8KKwkJCWZvciAoZnJhZyA9IDAsIGZwID0gZ2wuZnJhZ3M7IC8qKi87IGZyYWcrKywgZnArKykgeworCQkJCUJVR19PTihmcmFnID49IE1BWF9TS0JfRlJBR1MpOworCQkJCUJVR19PTihyeHEtPmZsLmF2YWlsID09IDApOworCQkJCXNkZXNjID0gJnJ4cS0+Zmwuc2Rlc2NbcnhxLT5mbC5jaWR4XTsKKwkJCQlidWZzeiA9IGdldF9idWZfc2l6ZShzZGVzYyk7CisJCQkJZnAtPnBhZ2UgPSBzZGVzYy0+cGFnZTsKKwkJCQlmcC0+cGFnZV9vZmZzZXQgPSByc3BxLT5vZmZzZXQ7CisJCQkJZnAtPnNpemUgPSBtaW4oYnVmc3osIGxlbik7CisJCQkJbGVuIC09IGZwLT5zaXplOworCQkJCWlmICghbGVuKQorCQkJCQlicmVhazsKKwkJCQl1bm1hcF9yeF9idWYocnNwcS0+YWRhcHRlciwgJnJ4cS0+ZmwpOworCQkJfQorCQkJZ2wubmZyYWdzID0gZnJhZysxOworCisJCQkvKgorCQkJICogTGFzdCBidWZmZXIgcmVtYWlucyBtYXBwZWQgc28gZXhwbGljaXRseSBtYWtlIGl0CisJCQkgKiBjb2hlcmVudCBmb3IgQ1BVIGFjY2VzcyBhbmQgc3RhcnQgcHJlbG9hZGluZyBmaXJzdAorCQkJICogY2FjaGUgbGluZSAuLi4KKwkJCSAqLworCQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUocnNwcS0+YWRhcHRlci0+cGRldl9kZXYsCisJCQkJCQlnZXRfYnVmX2FkZHIoc2Rlc2MpLAorCQkJCQkJZnAtPnNpemUsIERNQV9GUk9NX0RFVklDRSk7CisJCQlnbC52YSA9IChwYWdlX2FkZHJlc3MoZ2wuZnJhZ3NbMF0ucGFnZSkgKworCQkJCSBnbC5mcmFnc1swXS5wYWdlX29mZnNldCk7CisJCQlwcmVmZXRjaChnbC52YSk7CisKKwkJCS8qCisJCQkgKiBIYW5kIHRoZSBuZXcgaW5ncmVzcyBwYWNrZXQgdG8gdGhlIGhhbmRsZXIgZm9yCisJCQkgKiB0aGlzIFJlc3BvbnNlIFF1ZXVlLgorCQkJICovCisJCQlyZXQgPSByc3BxLT5oYW5kbGVyKHJzcHEsIHJzcHEtPmN1cl9kZXNjLCAmZ2wpOworCQkJaWYgKGxpa2VseShyZXQgPT0gMCkpCisJCQkJcnNwcS0+b2Zmc2V0ICs9IEFMSUdOKGZwLT5zaXplLCBGTF9BTElHTik7CisJCQllbHNlCisJCQkJcmVzdG9yZV9yeF9idWZzKCZnbCwgJnJ4cS0+ZmwsIGZyYWcpOworCQl9IGVsc2UgaWYgKGxpa2VseShyc3BfdHlwZSA9PSBSU1BfVFlQRV9DUEwpKSB7CisJCQlyZXQgPSByc3BxLT5oYW5kbGVyKHJzcHEsIHJzcHEtPmN1cl9kZXNjLCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCVdBUk5fT04ocnNwX3R5cGUgPiBSU1BfVFlQRV9DUEwpOworCQkJcmV0ID0gMDsKKwkJfQorCisJCWlmICh1bmxpa2VseShyZXQpKSB7CisJCQkvKgorCQkJICogQ291bGRuJ3QgcHJvY2VzcyBkZXNjcmlwdG9yLCBiYWNrIG9mZiBmb3IgcmVjb3ZlcnkuCisJCQkgKiBXZSB1c2UgdGhlIFNHRSdzIGxhc3QgdGltZXIgd2hpY2ggaGFzIHRoZSBsb25nZXN0CisJCQkgKiBpbnRlcnJ1cHQgY29hbGVzY2luZyB2YWx1ZSAuLi4KKwkJCSAqLworCQkJY29uc3QgaW50IE5PTUVNX1RJTUVSX0lEWCA9IFNHRV9OVElNRVJTLTE7CisJCQlyc3BxLT5uZXh0X2ludHJfcGFyYW1zID0KKwkJCQlRSU5UUl9USU1FUl9JRFgoTk9NRU1fVElNRVJfSURYKTsKKwkJCWJyZWFrOworCQl9CisKKwkJcnNwcV9uZXh0KHJzcHEpOworCQlidWRnZXRfbGVmdC0tOworCX0KKworCS8qCisJICogSWYgdGhpcyBpcyBhIFJlc3BvbnNlIFF1ZXVlIHdpdGggYW4gYXNzb2NpYXRlZCBGcmVlIExpc3QgYW5kCisJICogYXQgbGVhc3QgdHdvIEVncmVzcyBRdWV1ZSB1bml0cyBhdmFpbGFibGUgaW4gdGhlIEZyZWUgTGlzdAorCSAqIGZvciBuZXcgYnVmZmVyIHBvaW50ZXJzLCByZWZpbGwgdGhlIEZyZWUgTGlzdC4KKwkgKi8KKwlpZiAocnNwcS0+b2Zmc2V0ID49IDAgJiYKKwkgICAgcnhxLT5mbC5zaXplIC0gcnhxLT5mbC5hdmFpbCA+PSAyKkZMX1BFUl9FUV9VTklUKQorCQlfX3JlZmlsbF9mbChyc3BxLT5hZGFwdGVyLCAmcnhxLT5mbCk7CisJcmV0dXJuIGJ1ZGdldCAtIGJ1ZGdldF9sZWZ0OworfQorCisvKioKKyAqCW5hcGlfcnhfaGFuZGxlciAtIHRoZSBOQVBJIGhhbmRsZXIgZm9yIFJYIHByb2Nlc3NpbmcKKyAqCUBuYXBpOiB0aGUgbmFwaSBpbnN0YW5jZQorICoJQGJ1ZGdldDogaG93IG1hbnkgcGFja2V0cyB3ZSBjYW4gcHJvY2VzcyBpbiB0aGlzIHJvdW5kCisgKgorICoJSGFuZGxlciBmb3IgbmV3IGRhdGEgZXZlbnRzIHdoZW4gdXNpbmcgTkFQSS4gIFRoaXMgZG9lcyBub3QgbmVlZCBhbnkKKyAqCWxvY2tpbmcgb3IgcHJvdGVjdGlvbiBmcm9tIGludGVycnVwdHMgYXMgZGF0YSBpbnRlcnJ1cHRzIGFyZSBvZmYgYXQKKyAqCXRoaXMgcG9pbnQgYW5kIG90aGVyIGFkYXB0ZXIgaW50ZXJydXB0cyBkbyBub3QgaW50ZXJmZXJlICh0aGUgbGF0dGVyCisgKglpbiBub3QgYSBjb25jZXJuIGF0IGFsbCB3aXRoIE1TSS1YIGFzIG5vbi1kYXRhIGludGVycnVwdHMgdGhlbiBoYXZlCisgKglhIHNlcGFyYXRlIGhhbmRsZXIpLgorICovCitzdGF0aWMgaW50IG5hcGlfcnhfaGFuZGxlcihzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJdW5zaWduZWQgaW50IGludHJfcGFyYW1zOworCXN0cnVjdCBzZ2VfcnNwcSAqcnNwcSA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3Qgc2dlX3JzcHEsIG5hcGkpOworCWludCB3b3JrX2RvbmUgPSBwcm9jZXNzX3Jlc3BvbnNlcyhyc3BxLCBidWRnZXQpOworCisJaWYgKGxpa2VseSh3b3JrX2RvbmUgPCBidWRnZXQpKSB7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CisJCWludHJfcGFyYW1zID0gcnNwcS0+bmV4dF9pbnRyX3BhcmFtczsKKwkJcnNwcS0+bmV4dF9pbnRyX3BhcmFtcyA9IHJzcHEtPmludHJfcGFyYW1zOworCX0gZWxzZQorCQlpbnRyX3BhcmFtcyA9IFFJTlRSX1RJTUVSX0lEWChTR0VfVElNRVJfVVBEX0NJRFgpOworCisJaWYgKHVubGlrZWx5KHdvcmtfZG9uZSA9PSAwKSkKKwkJcnNwcS0+dW5oYW5kbGVkX2lycXMrKzsKKworCXQ0X3dyaXRlX3JlZyhyc3BxLT5hZGFwdGVyLAorCQkgICAgIFQ0VkZfU0dFX0JBU0VfQUREUiArIFNHRV9WRl9HVFMsCisJCSAgICAgQ0lEWElOQyh3b3JrX2RvbmUpIHwKKwkJICAgICBJTkdSRVNTUUlEKCh1MzIpcnNwcS0+Y250eHRfaWQpIHwKKwkJICAgICBTRUlOVEFSTShpbnRyX3BhcmFtcykpOworCXJldHVybiB3b3JrX2RvbmU7Cit9CisKKy8qCisgKiBUaGUgTVNJLVggaW50ZXJydXB0IGhhbmRsZXIgZm9yIGFuIFNHRSByZXNwb25zZSBxdWV1ZSBmb3IgdGhlIE5BUEkgY2FzZQorICogKGkuZS4sIHJlc3BvbnNlIHF1ZXVlIHNlcnZpY2VkIGJ5IE5BUEkgcG9sbGluZykuCisgKi8KK2lycXJldHVybl90IHQ0dmZfc2dlX2ludHJfbXNpeChpbnQgaXJxLCB2b2lkICpjb29raWUpCit7CisJc3RydWN0IHNnZV9yc3BxICpyc3BxID0gY29va2llOworCisJbmFwaV9zY2hlZHVsZSgmcnNwcS0+bmFwaSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKgorICogUHJvY2VzcyB0aGUgaW5kaXJlY3QgaW50ZXJydXB0IGVudHJpZXMgaW4gdGhlIGludGVycnVwdCBxdWV1ZSBhbmQga2ljayBvZmYKKyAqIE5BUEkgZm9yIGVhY2ggcXVldWUgdGhhdCBoYXMgZ2VuZXJhdGVkIGFuIGVudHJ5LgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHByb2Nlc3NfaW50cnEoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNnZSAqcyA9ICZhZGFwdGVyLT5zZ2U7CisJc3RydWN0IHNnZV9yc3BxICppbnRycSA9ICZzLT5pbnRycTsKKwl1bnNpZ25lZCBpbnQgd29ya19kb25lOworCisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5zZ2UuaW50cnFfbG9jayk7CisJZm9yICh3b3JrX2RvbmUgPSAwOyA7IHdvcmtfZG9uZSsrKSB7CisJCWNvbnN0IHN0cnVjdCByc3BfY3RybCAqcmM7CisJCXVuc2lnbmVkIGludCBxaWQsIGlxX2lkeDsKKwkJc3RydWN0IHNnZV9yc3BxICpyc3BxOworCisJCS8qCisJCSAqIEdyYWIgdGhlIG5leHQgcmVzcG9uc2UgZnJvbSB0aGUgaW50ZXJydXB0IHF1ZXVlIGFuZCBiYWlsCisJCSAqIG91dCBpZiBpdCdzIG5vdCBhIG5ldyByZXNwb25zZS4KKwkJICovCisJCXJjID0gKHZvaWQgKilpbnRycS0+Y3VyX2Rlc2MgKyAoaW50cnEtPmlxZV9sZW4gLSBzaXplb2YoKnJjKSk7CisJCWlmICghaXNfbmV3X3Jlc3BvbnNlKHJjLCBpbnRycSkpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBJZiB0aGUgcmVzcG9uc2UgaXNuJ3QgYSBmb3J3YXJkZWQgaW50ZXJydXB0IG1lc3NhZ2UgaXNzdWUgYQorCQkgKiBlcnJvciBhbmQgZ28gb24gdG8gdGhlIG5leHQgcmVzcG9uc2UgbWVzc2FnZS4gIFRoaXMgc2hvdWxkCisJCSAqIG5ldmVyIGhhcHBlbiAuLi4KKwkJICovCisJCXJtYigpOworCQlpZiAodW5saWtlbHkoUlNQRF9UWVBFKHJjLT50eXBlX2dlbikgIT0gUlNQX1RZUEVfSU5UUikpIHsKKwkJCWRldl9lcnIoYWRhcHRlci0+cGRldl9kZXYsCisJCQkJIlVuZXhwZWN0ZWQgSU5UUlEgcmVzcG9uc2UgdHlwZSAlZFxuIiwKKwkJCQlSU1BEX1RZUEUocmMtPnR5cGVfZ2VuKSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIEV4dHJhY3QgdGhlIFF1ZXVlIElEIGZyb20gdGhlIGludGVycnVwdCBtZXNzYWdlIGFuZCBwZXJmb3JtCisJCSAqIHNhbml0eSBjaGVja2luZyB0byBtYWtlIHN1cmUgaXQgcmVhbGx5IHJlZmVycyB0byBvbmUgb2Ygb3VyCisJCSAqIEluZ3Jlc3MgUXVldWVzIHdoaWNoIGlzIGFjdGl2ZSBhbmQgbWF0Y2hlcyB0aGUgcXVldWUncyBJRC4KKwkJICogTm9uZSBvZiB0aGVzZSBlcnJvciBjb25kaXRpb25zIHNob3VsZCBldmVyIGhhcHBlbiBzbyB3ZSBtYXkKKwkJICogd2FudCB0byBlaXRoZXIgbWFrZSB0aGVtIGZhdGFsIGFuZC9vciBjb25kaXRpb25hbGl6ZWQgdW5kZXIKKwkJICogREVCVUcuCisJCSAqLworCQlxaWQgPSBSU1BEX1FJRChiZTMyX3RvX2NwdShyYy0+cGxkYnVmbGVuX3FpZCkpOworCQlpcV9pZHggPSBJUV9JRFgocywgcWlkKTsKKwkJaWYgKHVubGlrZWx5KGlxX2lkeCA+PSBNQVhfSU5HUSkpIHsKKwkJCWRldl9lcnIoYWRhcHRlci0+cGRldl9kZXYsCisJCQkJIkluZ3Jlc3MgUUlEICVkIG91dCBvZiByYW5nZVxuIiwgcWlkKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXJzcHEgPSBzLT5pbmdyX21hcFtpcV9pZHhdOworCQlpZiAodW5saWtlbHkocnNwcSA9PSBOVUxMKSkgeworCQkJZGV2X2VycihhZGFwdGVyLT5wZGV2X2RldiwKKwkJCQkiSW5ncmVzcyBRSUQgJWQgUlNQUT1OVUxMXG4iLCBxaWQpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHVubGlrZWx5KHJzcHEtPmFic19pZCAhPSBxaWQpKSB7CisJCQlkZXZfZXJyKGFkYXB0ZXItPnBkZXZfZGV2LAorCQkJCSJJbmdyZXNzIFFJRCAlZCByZWZlcnMgdG8gUlNQUSAlZFxuIiwKKwkJCQlxaWQsIHJzcHEtPmFic19pZCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIFNjaGVkdWxlIE5BUEkgcHJvY2Vzc2luZyBvbiB0aGUgaW5kaWNhdGVkIFJlc3BvbnNlIFF1ZXVlCisJCSAqIGFuZCBtb3ZlIG9uIHRvIHRoZSBuZXh0IGVudHJ5IGluIHRoZSBGb3J3YXJkZWQgSW50ZXJydXB0CisJCSAqIFF1ZXVlLgorCQkgKi8KKwkJbmFwaV9zY2hlZHVsZSgmcnNwcS0+bmFwaSk7CisJCXJzcHFfbmV4dChpbnRycSk7CisJfQorCisJdDRfd3JpdGVfcmVnKGFkYXB0ZXIsIFQ0VkZfU0dFX0JBU0VfQUREUiArIFNHRV9WRl9HVFMsCisJCSAgICAgQ0lEWElOQyh3b3JrX2RvbmUpIHwKKwkJICAgICBJTkdSRVNTUUlEKGludHJxLT5jbnR4dF9pZCkgfAorCQkgICAgIFNFSU5UQVJNKGludHJxLT5pbnRyX3BhcmFtcykpOworCisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPnNnZS5pbnRycV9sb2NrKTsKKworCXJldHVybiB3b3JrX2RvbmU7Cit9CisKKy8qCisgKiBUaGUgTVNJIGludGVycnVwdCBoYW5kbGVyIGhhbmRsZXMgZGF0YSBldmVudHMgZnJvbSBTR0UgcmVzcG9uc2UgcXVldWVzIGFzCisgKiB3ZWxsIGFzIGVycm9yIGFuZCBvdGhlciBhc3luYyBldmVudHMgYXMgdGhleSBhbGwgdXNlIHRoZSBzYW1lIE1TSSB2ZWN0b3IuCisgKi8KK2lycXJldHVybl90IHQ0dmZfaW50cl9tc2koaW50IGlycSwgdm9pZCAqY29va2llKQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gY29va2llOworCisJcHJvY2Vzc19pbnRycShhZGFwdGVyKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qKgorICoJdDR2Zl9pbnRyX2hhbmRsZXIgLSBzZWxlY3QgdGhlIHRvcC1sZXZlbCBpbnRlcnJ1cHQgaGFuZGxlcgorICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCisgKgorICoJU2VsZWN0cyB0aGUgdG9wLWxldmVsIGludGVycnVwdCBoYW5kbGVyIGJhc2VkIG9uIHRoZSB0eXBlIG9mIGludGVycnVwdHMKKyAqCShNU0ktWCBvciBNU0kpLgorICovCitpcnFfaGFuZGxlcl90IHQ0dmZfaW50cl9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCUJVR19PTigoYWRhcHRlci0+ZmxhZ3MgJiAoVVNJTkdfTVNJWHxVU0lOR19NU0kpKSA9PSAwKTsKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBVU0lOR19NU0lYKQorCQlyZXR1cm4gdDR2Zl9zZ2VfaW50cl9tc2l4OworCWVsc2UKKwkJcmV0dXJuIHQ0dmZfaW50cl9tc2k7Cit9CisKKy8qKgorICoJc2dlX3J4X3RpbWVyX2NiIC0gcGVyZm9ybSBwZXJpb2RpYyBtYWludGVuYW5jZSBvZiBTR0UgUlggcXVldWVzCisgKglAZGF0YTogdGhlIGFkYXB0ZXIKKyAqCisgKglSdW5zIHBlcmlvZGljYWxseSBmcm9tIGEgdGltZXIgdG8gcGVyZm9ybSBtYWludGVuYW5jZSBvZiBTR0UgUlggcXVldWVzLgorICoKKyAqCWEpIFJlcGxlbmlzaGVzIFJYIHF1ZXVlcyB0aGF0IGhhdmUgcnVuIG91dCBkdWUgdG8gbWVtb3J5IHNob3J0YWdlLgorICoJTm9ybWFsbHkgbmV3IFJYIGJ1ZmZlcnMgYXJlIGFkZGVkIHdoZW4gZXhpc3Rpbmcgb25lcyBhcmUgY29uc3VtZWQgYnV0CisgKgl3aGVuIG91dCBvZiBtZW1vcnkgYSBxdWV1ZSBjYW4gYmVjb21lIGVtcHR5LiAgV2Ugc2NoZWR1bGUgTkFQSSB0byBkbworICoJdGhlIGFjdHVhbCByZWZpbGwuCisgKi8KK3N0YXRpYyB2b2lkIHNnZV9yeF90aW1lcl9jYih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKilkYXRhOworCXN0cnVjdCBzZ2UgKnMgPSAmYWRhcHRlci0+c2dlOworCXVuc2lnbmVkIGludCBpOworCisJLyoKKwkgKiBTY2FuIHRoZSAiU3RhcnZpbmcgRnJlZSBMaXN0cyIgZmxhZyBhcnJheSBsb29raW5nIGZvciBhbnkgRnJlZQorCSAqIExpc3RzIGluIG5lZWQgb2YgbW9yZSBmcmVlIGJ1ZmZlcnMuICBJZiB3ZSBmaW5kIG9uZSBhbmQgaXQncyBub3QKKwkgKiBiZWluZyBhY3RpdmVseSBwb2xsZWQsIHRoZW4gYnVtcCBpdHMgInN0YXJ2aW5nIiBjb3VudGVyIGFuZCBhdHRlbXB0CisJICogdG8gcmVmaWxsIGl0LiAgSWYgd2UncmUgc3VjY2Vzc2Z1bCBpbiBhZGRpbmcgZW5vdWdoIGJ1ZmZlcnMgdG8gcHVzaAorCSAqIHRoZSBGcmVlIExpc3Qgb3ZlciB0aGUgc3RhcnZpbmcgdGhyZXNob2xkLCB0aGVuIHdlIGNhbiBjbGVhciBpdHMKKwkgKiAic3RhcnZpbmciIHN0YXR1cy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzLT5zdGFydmluZ19mbCk7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIG07CisKKwkJZm9yIChtID0gcy0+c3RhcnZpbmdfZmxbaV07IG07IG0gJj0gbSAtIDEpIHsKKwkJCXVuc2lnbmVkIGludCBpZCA9IF9fZmZzKG0pICsgaSAqIEJJVFNfUEVSX0xPTkc7CisJCQlzdHJ1Y3Qgc2dlX2ZsICpmbCA9IHMtPmVncl9tYXBbaWRdOworCisJCQljbGVhcl9iaXQoaWQsIHMtPnN0YXJ2aW5nX2ZsKTsKKwkJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisKKwkJCS8qCisJCQkgKiBTaW5jZSB3ZSBhcmUgYWNjZXNzaW5nIGZsIHdpdGhvdXQgYSBsb2NrIHRoZXJlJ3MgYQorCQkJICogc21hbGwgcHJvYmFiaWxpdHkgb2YgYSBmYWxzZSBwb3NpdGl2ZSB3aGVyZSB3ZQorCQkJICogc2NoZWR1bGUgbmFwaSBidXQgdGhlIEZMIGlzIG5vIGxvbmdlciBzdGFydmluZy4KKwkJCSAqIE5vIGJpZ2dpZS4KKwkJCSAqLworCQkJaWYgKGZsX3N0YXJ2aW5nKGZsKSkgeworCQkJCXN0cnVjdCBzZ2VfZXRoX3J4cSAqcnhxOworCisJCQkJcnhxID0gY29udGFpbmVyX29mKGZsLCBzdHJ1Y3Qgc2dlX2V0aF9yeHEsIGZsKTsKKwkJCQlpZiAobmFwaV9yZXNjaGVkdWxlKCZyeHEtPnJzcHEubmFwaSkpCisJCQkJCWZsLT5zdGFydmluZysrOworCQkJCWVsc2UKKwkJCQkJc2V0X2JpdChpZCwgcy0+c3RhcnZpbmdfZmwpOworCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBSZXNjaGVkdWxlIHRoZSBuZXh0IHNjYW4gZm9yIHN0YXJ2aW5nIEZyZWUgTGlzdHMgLi4uCisJICovCisJbW9kX3RpbWVyKCZzLT5yeF90aW1lciwgamlmZmllcyArIFJYX1FDSEVDS19QRVJJT0QpOworfQorCisvKioKKyAqCXNnZV90eF90aW1lcl9jYiAtIHBlcmZvcm0gcGVyaW9kaWMgbWFpbnRlbmFuY2Ugb2YgU0dFIFR4IHF1ZXVlcworICoJQGRhdGE6IHRoZSBhZGFwdGVyCisgKgorICoJUnVucyBwZXJpb2RpY2FsbHkgZnJvbSBhIHRpbWVyIHRvIHBlcmZvcm0gbWFpbnRlbmFuY2Ugb2YgU0dFIFRYIHF1ZXVlcy4KKyAqCisgKgliKSBSZWNsYWltcyBjb21wbGV0ZWQgVHggcGFja2V0cyBmb3IgdGhlIEV0aGVybmV0IHF1ZXVlcy4gIE5vcm1hbGx5CisgKglwYWNrZXRzIGFyZSBjbGVhbmVkIHVwIGJ5IG5ldyBUeCBwYWNrZXRzLCB0aGlzIHRpbWVyIGNsZWFucyB1cCBwYWNrZXRzCisgKgl3aGVuIG5vIG5ldyBwYWNrZXRzIGFyZSBiZWluZyBzdWJtaXR0ZWQuICBUaGlzIGlzIGVzc2VudGlhbCBmb3IgcGt0Z2VuLAorICoJYXQgbGVhc3QuCisgKi8KK3N0YXRpYyB2b2lkIHNnZV90eF90aW1lcl9jYih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKilkYXRhOworCXN0cnVjdCBzZ2UgKnMgPSAmYWRhcHRlci0+c2dlOworCXVuc2lnbmVkIGludCBpLCBidWRnZXQ7CisKKwlidWRnZXQgPSBNQVhfVElNRVJfVFhfUkVDTEFJTTsKKwlpID0gcy0+ZXRodHhxX3JvdmVyOworCWRvIHsKKwkJc3RydWN0IHNnZV9ldGhfdHhxICp0eHEgPSAmcy0+ZXRodHhxW2ldOworCisJCWlmIChyZWNsYWltYWJsZSgmdHhxLT5xKSAmJiBfX25ldGlmX3R4X3RyeWxvY2sodHhxLT50eHEpKSB7CisJCQlpbnQgYXZhaWwgPSByZWNsYWltYWJsZSgmdHhxLT5xKTsKKworCQkJaWYgKGF2YWlsID4gYnVkZ2V0KQorCQkJCWF2YWlsID0gYnVkZ2V0OworCisJCQlmcmVlX3R4X2Rlc2MoYWRhcHRlciwgJnR4cS0+cSwgYXZhaWwsIHRydWUpOworCQkJdHhxLT5xLmluX3VzZSAtPSBhdmFpbDsKKwkJCV9fbmV0aWZfdHhfdW5sb2NrKHR4cS0+dHhxKTsKKworCQkJYnVkZ2V0IC09IGF2YWlsOworCQkJaWYgKCFidWRnZXQpCisJCQkJYnJlYWs7CisJCX0KKworCQlpKys7CisJCWlmIChpID49IHMtPmV0aHFzZXRzKQorCQkJaSA9IDA7CisJfSB3aGlsZSAoaSAhPSBzLT5ldGh0eHFfcm92ZXIpOworCXMtPmV0aHR4cV9yb3ZlciA9IGk7CisKKwkvKgorCSAqIElmIHdlIGZvdW5kIHRvbyBtYW55IHJlY2xhaW1hYmxlIHBhY2tldHMgc2NoZWR1bGUgYSB0aW1lciBpbiB0aGUKKwkgKiBuZWFyIGZ1dHVyZSB0byBjb250aW51ZSB3aGVyZSB3ZSBsZWZ0IG9mZi4gIE90aGVyd2lzZSB0aGUgbmV4dCB0aW1lcgorCSAqIHdpbGwgYmUgYXQgaXRzIG5vcm1hbCBpbnRlcnZhbC4KKwkgKi8KKwltb2RfdGltZXIoJnMtPnR4X3RpbWVyLCBqaWZmaWVzICsgKGJ1ZGdldCA/IFRYX1FDSEVDS19QRVJJT0QgOiAyKSk7Cit9CisKKy8qKgorICoJdDR2Zl9zZ2VfYWxsb2NfcnhxIC0gYWxsb2NhdGUgYW4gU0dFIFJYIFF1ZXVlCisgKglAYWRhcHRlcjogdGhlIGFkYXB0ZXIKKyAqCUByc3BxOiBwb2ludGVyIHRvIHRvIHRoZSBuZXcgcnhxJ3MgUmVzcG9uc2UgUXVldWUgdG8gYmUgZmlsbGVkIGluCisgKglAaXFhc3luY2g6IGlmIDAsIGEgbm9ybWFsIHJzcHE7IGlmIDEsIGFuIGFzeW5jaHJvbm91cyBldmVudCBxdWV1ZQorICoJQGRldjogdGhlIG5ldHdvcmsgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV3IHJzcHEKKyAqCUBpbnRyX2Rlc3Q6IE1TSS1YIHZlY3RvciBpbmRleCAob3ZlcnJpZGVuIGluIE1TSSBtb2RlKQorICoJQGZsOiBwb2ludGVyIHRvIHRoZSBuZXcgcnhxJ3MgRnJlZSBMaXN0IHRvIGJlIGZpbGxlZCBpbgorICoJQGhuZDogdGhlIGludGVycnVwdCBoYW5kbGVyIHRvIGludm9rZSBmb3IgdGhlIHJzcHEKKyAqLworaW50IHQ0dmZfc2dlX2FsbG9jX3J4cShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNnZV9yc3BxICpyc3BxLAorCQkgICAgICAgYm9vbCBpcWFzeW5jaCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICAgIGludCBpbnRyX2Rlc3QsCisJCSAgICAgICBzdHJ1Y3Qgc2dlX2ZsICpmbCwgcnNwcV9oYW5kbGVyX3QgaG5kKQoreworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZndfaXFfY21kIGNtZCwgcnBsOworCWludCByZXQsIGlxYW5kc3QsIGZsc3ogPSAwOworCisJLyoKKwkgKiBJZiB3ZSdyZSB1c2luZyBNU0kgaW50ZXJydXB0cyBhbmQgd2UncmUgbm90IGluaXRpYWxpemluZyB0aGUKKwkgKiBGb3J3YXJkZWQgSW50ZXJydXB0IFF1ZXVlIGl0c2VsZiwgdGhlbiBzZXQgdXAgdGhpcyBxdWV1ZSBmb3IKKwkgKiBpbmRpcmVjdCBpbnRlcnJ1cHRzIHRvIHRoZSBGb3J3YXJkZWQgSW50ZXJydXB0IFF1ZXVlLiAgT2J2aW91c2x5CisJICogdGhlIEZvcndhcmRlZCBJbnRlcnJ1cHQgUXVldWUgbXVzdCBiZSBzZXQgdXAgYmVmb3JlIGFueSBvdGhlcgorCSAqIGluZ3Jlc3MgcXVldWUgLi4uCisJICovCisJaWYgKChhZGFwdGVyLT5mbGFncyAmIFVTSU5HX01TSSkgJiYgcnNwcSAhPSAmYWRhcHRlci0+c2dlLmludHJxKSB7CisJCWlxYW5kc3QgPSBTR0VfSU5UUkRTVF9JUTsKKwkJaW50cl9kZXN0ID0gYWRhcHRlci0+c2dlLmludHJxLmFic19pZDsKKwl9IGVsc2UKKwkJaXFhbmRzdCA9IFNHRV9JTlRSRFNUX1BDSTsKKworCS8qCisJICogQWxsb2NhdGUgdGhlIGhhcmR3YXJlIHJpbmcgZm9yIHRoZSBSZXNwb25zZSBRdWV1ZS4gIFRoZSBzaXplIG5lZWRzCisJICogdG8gYmUgYSBtdWx0aXBsZSBvZiAxNiB3aGljaCBpbmNsdWRlcyB0aGUgbWFuZGF0b3J5IHN0YXR1cyBlbnRyeQorCSAqIChyZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIFN0YXR1cyBQYWdlIGNhcGFiaWxpdGllcyBhcmUgZW5hYmxlZCBvcgorCSAqIG5vdCkuCisJICovCisJcnNwcS0+c2l6ZSA9IHJvdW5kdXAocnNwcS0+c2l6ZSwgMTYpOworCXJzcHEtPmRlc2MgPSBhbGxvY19yaW5nKGFkYXB0ZXItPnBkZXZfZGV2LCByc3BxLT5zaXplLCByc3BxLT5pcWVfbGVuLAorCQkJCTAsICZyc3BxLT5waHlzX2FkZHIsIE5VTEwsIDApOworCWlmICghcnNwcS0+ZGVzYykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKgorCSAqIEZpbGwgaW4gdGhlIEluZ3Jlc3MgUXVldWUgQ29tbWFuZC4gIE5vdGU6IElkZWFsbHkgdGhpcyBjb2RlIHdvdWxkCisJICogYmUgaW4gdDR2Zl9ody5jIGJ1dCB0aGVyZSBhcmUgc28gbWFueSBwYXJhbWV0ZXJzIGFuZCBkZXBlbmRlbmNpZXMKKwkgKiBvbiBvdXIgTGludXggU0dFIHN0YXRlIHRoYXQgd2Ugd291bGQgZW5kIHVwIGhhdmluZyB0byBwYXNzIHRvbnMgb2YKKwkgKiBwYXJhbWV0ZXJzLiAgV2UnbGwgaGF2ZSB0byB0aGluayBhYm91dCBob3cgdGhpcyBtaWdodCBiZSBtaWdyYXRlZAorCSAqIGludG8gT1MtaW5kZXBlbmRlbnQgY29tbW9uIGNvZGUgLi4uCisJICovCisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQub3BfdG9fdmZuID0gY3B1X3RvX2JlMzIoRldfQ01EX09QKEZXX0lRX0NNRCkgfAorCQkJCSAgICBGV19DTURfUkVRVUVTVCB8CisJCQkJICAgIEZXX0NNRF9XUklURSB8CisJCQkJICAgIEZXX0NNRF9FWEVDKTsKKwljbWQuYWxsb2NfdG9fbGVuMTYgPSBjcHVfdG9fYmUzMihGV19JUV9DTURfQUxMT0MgfAorCQkJCQkgRldfSVFfQ01EX0lRU1RBUlQoMSkgfAorCQkJCQkgRldfTEVOMTYoY21kKSk7CisJY21kLnR5cGVfdG9faXFhbmRzdGluZGV4ID0KKwkJY3B1X3RvX2JlMzIoRldfSVFfQ01EX1RZUEUoRldfSVFfVFlQRV9GTF9JTlRfQ0FQKSB8CisJCQkgICAgRldfSVFfQ01EX0lRQVNZTkNIKGlxYXN5bmNoKSB8CisJCQkgICAgRldfSVFfQ01EX1ZJSUQocGktPnZpaWQpIHwKKwkJCSAgICBGV19JUV9DTURfSVFBTkRTVChpcWFuZHN0KSB8CisJCQkgICAgRldfSVFfQ01EX0lRQU5VUygxKSB8CisJCQkgICAgRldfSVFfQ01EX0lRQU5VRChTR0VfVVBEQVRFREVMX0lOVFIpIHwKKwkJCSAgICBGV19JUV9DTURfSVFBTkRTVElOREVYKGludHJfZGVzdCkpOworCWNtZC5pcWRyb3Byc3NfdG9faXFlc2l6ZSA9CisJCWNwdV90b19iZTE2KEZXX0lRX0NNRF9JUVBDSUVDSChwaS0+cG9ydF9pZCkgfAorCQkJICAgIEZXX0lRX0NNRF9JUUdUU01PREUgfAorCQkJICAgIEZXX0lRX0NNRF9JUUlOVENOVFRIUkVTSChyc3BxLT5wa3RjbnRfaWR4KSB8CisJCQkgICAgRldfSVFfQ01EX0lRRVNJWkUoaWxvZzIocnNwcS0+aXFlX2xlbikgLSA0KSk7CisJY21kLmlxc2l6ZSA9IGNwdV90b19iZTE2KHJzcHEtPnNpemUpOworCWNtZC5pcWFkZHIgPSBjcHVfdG9fYmU2NChyc3BxLT5waHlzX2FkZHIpOworCisJaWYgKGZsKSB7CisJCS8qCisJCSAqIEFsbG9jYXRlIHRoZSByaW5nIGZvciB0aGUgaGFyZHdhcmUgZnJlZSBsaXN0ICh3aXRoIHNwYWNlCisJCSAqIGZvciBpdHMgc3RhdHVzIHBhZ2UpIGFsb25nIHdpdGggdGhlIGFzc29jaWF0ZWQgc29mdHdhcmUKKwkJICogZGVzY3JpcHRvciByaW5nLiAgVGhlIGZyZWUgbGlzdCBzaXplIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUKKwkJICogb2YgdGhlIEVncmVzcyBRdWV1ZSBVbml0LgorCQkgKi8KKwkJZmwtPnNpemUgPSByb3VuZHVwKGZsLT5zaXplLCBGTF9QRVJfRVFfVU5JVCk7CisJCWZsLT5kZXNjID0gYWxsb2NfcmluZyhhZGFwdGVyLT5wZGV2X2RldiwgZmwtPnNpemUsCisJCQkJICAgICAgc2l6ZW9mKF9fYmU2NCksIHNpemVvZihzdHJ1Y3Qgcnhfc3dfZGVzYyksCisJCQkJICAgICAgJmZsLT5hZGRyLCAmZmwtPnNkZXNjLCBTVEFUX0xFTik7CisJCWlmICghZmwtPmRlc2MpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGVycjsKKwkJfQorCisJCS8qCisJCSAqIENhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgaGFyZHdhcmUgZnJlZSBsaXN0IHJpbmcgcGx1cworCQkgKiBzdGF0dXMgcGFnZSAod2hpY2ggdGhlIFNHRSB3aWxsIHBsYWNlIGF0IHRoZSBlbmQgb2YgdGhlCisJCSAqIGZyZWUgbGlzdCByaW5nKSBpbiBFZ3Jlc3MgUXVldWUgVW5pdHMuCisJCSAqLworCQlmbHN6ID0gKGZsLT5zaXplIC8gRkxfUEVSX0VRX1VOSVQgKworCQkJU1RBVF9MRU4gLyBFUV9VTklUKTsKKworCQkvKgorCQkgKiBGaWxsIGluIGFsbCB0aGUgcmVsZXZhbnQgZmlybXdhcmUgSW5ncmVzcyBRdWV1ZSBDb21tYW5kCisJCSAqIGZpZWxkcyBmb3IgdGhlIGZyZWUgbGlzdC4KKwkJICovCisJCWNtZC5pcW5zX3RvX2ZsMGNvbmdlbiA9CisJCQljcHVfdG9fYmUzMigKKwkJCQlGV19JUV9DTURfRkwwSE9TVEZDTU9ERShTR0VfSE9TVEZDTU9ERV9OT05FKSB8CisJCQkJRldfSVFfQ01EX0ZMMFBBQ0tFTiB8CisJCQkJRldfSVFfQ01EX0ZMMFBBREVOKTsKKwkJY21kLmZsMGRjYWVuX3RvX2ZsMGNpZHhmdGhyZXNoID0KKwkJCWNwdV90b19iZTE2KAorCQkJCUZXX0lRX0NNRF9GTDBGQk1JTihTR0VfRkVUQ0hCVVJTVE1JTl82NEIpIHwKKwkJCQlGV19JUV9DTURfRkwwRkJNQVgoU0dFX0ZFVENIQlVSU1RNQVhfNTEyQikpOworCQljbWQuZmwwc2l6ZSA9IGNwdV90b19iZTE2KGZsc3opOworCQljbWQuZmwwYWRkciA9IGNwdV90b19iZTY0KGZsLT5hZGRyKTsKKwl9CisKKwkvKgorCSAqIElzc3VlIHRoZSBmaXJtd2FyZSBJbmdyZXNzIFF1ZXVlIENvbW1hbmQgYW5kIGV4dHJhY3QgdGhlIHJlc3VsdHMgaWYKKwkgKiBpdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5LgorCSAqLworCXJldCA9IHQ0dmZfd3JfbWJveChhZGFwdGVyLCAmY21kLCBzaXplb2YoY21kKSwgJnJwbCk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwluZXRpZl9uYXBpX2FkZChkZXYsICZyc3BxLT5uYXBpLCBuYXBpX3J4X2hhbmRsZXIsIDY0KTsKKwlyc3BxLT5jdXJfZGVzYyA9IHJzcHEtPmRlc2M7CisJcnNwcS0+Y2lkeCA9IDA7CisJcnNwcS0+Z2VuID0gMTsKKwlyc3BxLT5uZXh0X2ludHJfcGFyYW1zID0gcnNwcS0+aW50cl9wYXJhbXM7CisJcnNwcS0+Y250eHRfaWQgPSBiZTE2X3RvX2NwdShycGwuaXFpZCk7CisJcnNwcS0+YWJzX2lkID0gYmUxNl90b19jcHUocnBsLnBoeXNpcWlkKTsKKwlyc3BxLT5zaXplLS07CQkJLyogc3VidHJhY3Qgc3RhdHVzIGVudHJ5ICovCisJcnNwcS0+YWRhcHRlciA9IGFkYXB0ZXI7CisJcnNwcS0+bmV0ZGV2ID0gZGV2OworCXJzcHEtPmhhbmRsZXIgPSBobmQ7CisKKwkvKiBzZXQgb2Zmc2V0IHRvIC0xIHRvIGRpc3Rpbmd1aXNoIGluZ3Jlc3MgcXVldWVzIHdpdGhvdXQgRkwgKi8KKwlyc3BxLT5vZmZzZXQgPSBmbCA/IDAgOiAtMTsKKworCWlmIChmbCkgeworCQlmbC0+Y250eHRfaWQgPSBiZTE2X3RvX2NwdShycGwuZmwwaWQpOworCQlmbC0+YXZhaWwgPSAwOworCQlmbC0+cGVuZF9jcmVkID0gMDsKKwkJZmwtPnBpZHggPSAwOworCQlmbC0+Y2lkeCA9IDA7CisJCWZsLT5hbGxvY19mYWlsZWQgPSAwOworCQlmbC0+bGFyZ2VfYWxsb2NfZmFpbGVkID0gMDsKKwkJZmwtPnN0YXJ2aW5nID0gMDsKKwkJcmVmaWxsX2ZsKGFkYXB0ZXIsIGZsLCBmbF9jYXAoZmwpLCBHRlBfS0VSTkVMKTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyOgorCS8qCisJICogQW4gZXJyb3Igb2NjdXJyZWQuICBDbGVhbiB1cCBvdXIgcGFydGlhbCBhbGxvY2F0aW9uIHN0YXRlIGFuZAorCSAqIHJldHVybiB0aGUgZXJyb3IuCisJICovCisJaWYgKHJzcHEtPmRlc2MpIHsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoYWRhcHRlci0+cGRldl9kZXYsIHJzcHEtPnNpemUgKiByc3BxLT5pcWVfbGVuLAorCQkJCSAgcnNwcS0+ZGVzYywgcnNwcS0+cGh5c19hZGRyKTsKKwkJcnNwcS0+ZGVzYyA9IE5VTEw7CisJfQorCWlmIChmbCAmJiBmbC0+ZGVzYykgeworCQlrZnJlZShmbC0+c2Rlc2MpOworCQlmbC0+c2Rlc2MgPSBOVUxMOworCQlkbWFfZnJlZV9jb2hlcmVudChhZGFwdGVyLT5wZGV2X2RldiwgZmxzeiAqIEVRX1VOSVQsCisJCQkJICBmbC0+ZGVzYywgZmwtPmFkZHIpOworCQlmbC0+ZGVzYyA9IE5VTEw7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICoJdDR2Zl9zZ2VfYWxsb2NfZXRoX3R4cSAtIGFsbG9jYXRlIGFuIFNHRSBFdGhlcm5ldCBUWCBRdWV1ZQorICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCisgKglAdHhxOiBwb2ludGVyIHRvIHRoZSBuZXcgdHhxIHRvIGJlIGZpbGxlZCBpbgorICoJQGRldnE6IHRoZSBuZXR3b3JrIFRYIHF1ZXVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV3IHR4cQorICoJQGlxaWQ6IHRoZSByZWxhdGl2ZSBpbmdyZXNzIHF1ZXVlIElEIHRvIHdoaWNoIGV2ZW50cyByZWxhdGluZyB0bworICoJCXRoZSBuZXcgdHhxIHNob3VsZCBiZSBkaXJlY3RlZAorICovCitpbnQgdDR2Zl9zZ2VfYWxsb2NfZXRoX3R4cShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNnZV9ldGhfdHhxICp0eHEsCisJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZxLAorCQkJICAgdW5zaWduZWQgaW50IGlxaWQpCit7CisJaW50IHJldCwgbmVudHJpZXM7CisJc3RydWN0IGZ3X2VxX2V0aF9jbWQgY21kLCBycGw7CisJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIGhhcmR3YXJlIFRYIFF1ZXVlIChpbmNsdWRpbmcgdGhlCisJICogc3RhdHVzIGFnZSBvbiB0aGUgZW5kKSBpbiB1bml0cyBvZiBUWCBEZXNjcmlwdG9ycy4KKwkgKi8KKwluZW50cmllcyA9IHR4cS0+cS5zaXplICsgU1RBVF9MRU4gLyBzaXplb2Yoc3RydWN0IHR4X2Rlc2MpOworCisJLyoKKwkgKiBBbGxvY2F0ZSB0aGUgaGFyZHdhcmUgcmluZyBmb3IgdGhlIFRYIHJpbmcgKHdpdGggc3BhY2UgZm9yIGl0cworCSAqIHN0YXR1cyBwYWdlKSBhbG9uZyB3aXRoIHRoZSBhc3NvY2lhdGVkIHNvZnR3YXJlIGRlc2NyaXB0b3IgcmluZy4KKwkgKi8KKwl0eHEtPnEuZGVzYyA9IGFsbG9jX3JpbmcoYWRhcHRlci0+cGRldl9kZXYsIHR4cS0+cS5zaXplLAorCQkJCSBzaXplb2Yoc3RydWN0IHR4X2Rlc2MpLAorCQkJCSBzaXplb2Yoc3RydWN0IHR4X3N3X2Rlc2MpLAorCQkJCSAmdHhxLT5xLnBoeXNfYWRkciwgJnR4cS0+cS5zZGVzYywgU1RBVF9MRU4pOworCWlmICghdHhxLT5xLmRlc2MpCisJCXJldHVybiAtRU5PTUVNOworCisJLyoKKwkgKiBGaWxsIGluIHRoZSBFZ3Jlc3MgUXVldWUgQ29tbWFuZC4gIE5vdGU6IEFzIHdpdGggdGhlIGRpcmVjdCB1c2Ugb2YKKwkgKiB0aGUgZmlybXdhcmUgSW5ncmVzcyBRdWV1ZSBDT21tYW5kIGFib3ZlIGluIG91ciBSWFEgYWxsb2NhdGlvbgorCSAqIHJvdXRpbmUsIGlkZWFsbHksIHRoaXMgY29kZSB3b3VsZCBiZSBpbiB0NHZmX2h3LmMuICBBZ2Fpbiwgd2UnbGwKKwkgKiBoYXZlIHRvIHNlZSBpZiB0aGVyZSdzIHNvbWUgcmVhc29uYWJsZSB3YXkgdG8gcGFyYW1ldGVyaXplIGl0CisJICogaW50byB0aGUgY29tbW9uIGNvZGUgLi4uCisJICovCisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQub3BfdG9fdmZuID0gY3B1X3RvX2JlMzIoRldfQ01EX09QKEZXX0VRX0VUSF9DTUQpIHwKKwkJCQkgICAgRldfQ01EX1JFUVVFU1QgfAorCQkJCSAgICBGV19DTURfV1JJVEUgfAorCQkJCSAgICBGV19DTURfRVhFQyk7CisJY21kLmFsbG9jX3RvX2xlbjE2ID0gY3B1X3RvX2JlMzIoRldfRVFfRVRIX0NNRF9BTExPQyB8CisJCQkJCSBGV19FUV9FVEhfQ01EX0VRU1RBUlQgfAorCQkJCQkgRldfTEVOMTYoY21kKSk7CisJY21kLnZpaWRfcGtkID0gY3B1X3RvX2JlMzIoRldfRVFfRVRIX0NNRF9WSUlEKHBpLT52aWlkKSk7CisJY21kLmZldGNoc3ptX3RvX2lxaWQgPQorCQljcHVfdG9fYmUzMihGV19FUV9FVEhfQ01EX0hPU1RGQ01PREUoU0dFX0hPU1RGQ01PREVfU1RQRykgfAorCQkJICAgIEZXX0VRX0VUSF9DTURfUENJRUNITihwaS0+cG9ydF9pZCkgfAorCQkJICAgIEZXX0VRX0VUSF9DTURfSVFJRChpcWlkKSk7CisJY21kLmRjYWVuX3RvX2Vxc2l6ZSA9CisJCWNwdV90b19iZTMyKEZXX0VRX0VUSF9DTURfRkJNSU4oU0dFX0ZFVENIQlVSU1RNSU5fNjRCKSB8CisJCQkgICAgRldfRVFfRVRIX0NNRF9GQk1BWChTR0VfRkVUQ0hCVVJTVE1BWF81MTJCKSB8CisJCQkgICAgRldfRVFfRVRIX0NNRF9DSURYRlRIUkVTSChTR0VfQ0lEWEZMVVNIVEhSRVNIXzMyKSB8CisJCQkgICAgRldfRVFfRVRIX0NNRF9FUVNJWkUobmVudHJpZXMpKTsKKwljbWQuZXFhZGRyID0gY3B1X3RvX2JlNjQodHhxLT5xLnBoeXNfYWRkcik7CisKKwkvKgorCSAqIElzc3VlIHRoZSBmaXJtd2FyZSBFZ3Jlc3MgUXVldWUgQ29tbWFuZCBhbmQgZXh0cmFjdCB0aGUgcmVzdWx0cyBpZgorCSAqIGl0IGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkuCisJICovCisJcmV0ID0gdDR2Zl93cl9tYm94KGFkYXB0ZXIsICZjbWQsIHNpemVvZihjbWQpLCAmcnBsKTsKKwlpZiAocmV0KSB7CisJCS8qCisJCSAqIFRoZSBnaXJtd2FyZSBJbmdyZXNzIFF1ZXVlIENvbW1hbmQgZmFpbGVkIGZvciBzb21lIHJlYXNvbi4KKwkJICogRnJlZSB1cCBvdXIgcGFydGlhbCBhbGxvY2F0aW9uIHN0YXRlIGFuZCByZXR1cm4gdGhlIGVycm9yLgorCQkgKi8KKwkJa2ZyZWUodHhxLT5xLnNkZXNjKTsKKwkJdHhxLT5xLnNkZXNjID0gTlVMTDsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoYWRhcHRlci0+cGRldl9kZXYsCisJCQkJICBuZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgdHhfZGVzYyksCisJCQkJICB0eHEtPnEuZGVzYywgdHhxLT5xLnBoeXNfYWRkcik7CisJCXR4cS0+cS5kZXNjID0gTlVMTDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl0eHEtPnEuaW5fdXNlID0gMDsKKwl0eHEtPnEuY2lkeCA9IDA7CisJdHhxLT5xLnBpZHggPSAwOworCXR4cS0+cS5zdGF0ID0gKHZvaWQgKikmdHhxLT5xLmRlc2NbdHhxLT5xLnNpemVdOworCXR4cS0+cS5jbnR4dF9pZCA9IEZXX0VRX0VUSF9DTURfRVFJRF9HRVQoYmUzMl90b19jcHUocnBsLmVxaWRfcGtkKSk7CisJdHhxLT5xLmFic19pZCA9CisJCUZXX0VRX0VUSF9DTURfUEhZU0VRSURfR0VUKGJlMzJfdG9fY3B1KHJwbC5waHlzZXFpZF9wa2QpKTsKKwl0eHEtPnR4cSA9IGRldnE7CisJdHhxLT50c28gPSAwOworCXR4cS0+dHhfY3NvID0gMDsKKwl0eHEtPnZsYW5faW5zID0gMDsKKwl0eHEtPnEuc3RvcHMgPSAwOworCXR4cS0+cS5yZXN0YXJ0cyA9IDA7CisJdHhxLT5tYXBwaW5nX2VyciA9IDA7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGcmVlIHRoZSBETUEgbWFwIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBUWCBxdWV1ZS4KKyAqLworc3RhdGljIHZvaWQgZnJlZV90eHEoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBzZ2VfdHhxICp0cSkKK3sKKwlkbWFfZnJlZV9jb2hlcmVudChhZGFwdGVyLT5wZGV2X2RldiwKKwkJCSAgdHEtPnNpemUgKiBzaXplb2YoKnRxLT5kZXNjKSArIFNUQVRfTEVOLAorCQkJICB0cS0+ZGVzYywgdHEtPnBoeXNfYWRkcik7CisJdHEtPmNudHh0X2lkID0gMDsKKwl0cS0+c2Rlc2MgPSBOVUxMOworCXRxLT5kZXNjID0gTlVMTDsKK30KKworLyoKKyAqIEZyZWUgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSByZXNwb25zZSBxdWV1ZSAocG9zc2libHkgaW5jbHVkaW5nIGEKKyAqIGZyZWUgbGlzdCkuCisgKi8KK3N0YXRpYyB2b2lkIGZyZWVfcnNwcV9mbChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNnZV9yc3BxICpyc3BxLAorCQkJIHN0cnVjdCBzZ2VfZmwgKmZsKQoreworCXVuc2lnbmVkIGludCBmbGlkID0gZmwgPyBmbC0+Y250eHRfaWQgOiAweGZmZmY7CisKKwl0NHZmX2lxX2ZyZWUoYWRhcHRlciwgRldfSVFfVFlQRV9GTF9JTlRfQ0FQLAorCQkgICAgIHJzcHEtPmNudHh0X2lkLCBmbGlkLCAweGZmZmYpOworCWRtYV9mcmVlX2NvaGVyZW50KGFkYXB0ZXItPnBkZXZfZGV2LCAocnNwcS0+c2l6ZSArIDEpICogcnNwcS0+aXFlX2xlbiwKKwkJCSAgcnNwcS0+ZGVzYywgcnNwcS0+cGh5c19hZGRyKTsKKwluZXRpZl9uYXBpX2RlbCgmcnNwcS0+bmFwaSk7CisJcnNwcS0+bmV0ZGV2ID0gTlVMTDsKKwlyc3BxLT5jbnR4dF9pZCA9IDA7CisJcnNwcS0+YWJzX2lkID0gMDsKKwlyc3BxLT5kZXNjID0gTlVMTDsKKworCWlmIChmbCkgeworCQlmcmVlX3J4X2J1ZnMoYWRhcHRlciwgZmwsIGZsLT5hdmFpbCk7CisJCWRtYV9mcmVlX2NvaGVyZW50KGFkYXB0ZXItPnBkZXZfZGV2LAorCQkJCSAgZmwtPnNpemUgKiBzaXplb2YoKmZsLT5kZXNjKSArIFNUQVRfTEVOLAorCQkJCSAgZmwtPmRlc2MsIGZsLT5hZGRyKTsKKwkJa2ZyZWUoZmwtPnNkZXNjKTsKKwkJZmwtPnNkZXNjID0gTlVMTDsKKwkJZmwtPmNudHh0X2lkID0gMDsKKwkJZmwtPmRlc2MgPSBOVUxMOworCX0KK30KKworLyoqCisgKgl0NHZmX2ZyZWVfc2dlX3Jlc291cmNlcyAtIGZyZWUgU0dFIHJlc291cmNlcworICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCisgKgorICoJRnJlZXMgcmVzb3VyY2VzIHVzZWQgYnkgdGhlIFNHRSBxdWV1ZSBzZXRzLgorICovCit2b2lkIHQ0dmZfZnJlZV9zZ2VfcmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBzZ2UgKnMgPSAmYWRhcHRlci0+c2dlOworCXN0cnVjdCBzZ2VfZXRoX3J4cSAqcnhxID0gcy0+ZXRocnhxOworCXN0cnVjdCBzZ2VfZXRoX3R4cSAqdHhxID0gcy0+ZXRodHhxOworCXN0cnVjdCBzZ2VfcnNwcSAqZXZ0cSA9ICZzLT5md19ldnRxOworCXN0cnVjdCBzZ2VfcnNwcSAqaW50cnEgPSAmcy0+aW50cnE7CisJaW50IHFzOworCisJZm9yIChxcyA9IDA7IHFzIDwgYWRhcHRlci0+c2dlLmV0aHFzZXRzOyBxcysrLCByeHErKywgdHhxKyspIHsKKwkJaWYgKHJ4cS0+cnNwcS5kZXNjKQorCQkJZnJlZV9yc3BxX2ZsKGFkYXB0ZXIsICZyeHEtPnJzcHEsICZyeHEtPmZsKTsKKwkJaWYgKHR4cS0+cS5kZXNjKSB7CisJCQl0NHZmX2V0aF9lcV9mcmVlKGFkYXB0ZXIsIHR4cS0+cS5jbnR4dF9pZCk7CisJCQlmcmVlX3R4X2Rlc2MoYWRhcHRlciwgJnR4cS0+cSwgdHhxLT5xLmluX3VzZSwgdHJ1ZSk7CisJCQlrZnJlZSh0eHEtPnEuc2Rlc2MpOworCQkJZnJlZV90eHEoYWRhcHRlciwgJnR4cS0+cSk7CisJCX0KKwl9CisJaWYgKGV2dHEtPmRlc2MpCisJCWZyZWVfcnNwcV9mbChhZGFwdGVyLCBldnRxLCBOVUxMKTsKKwlpZiAoaW50cnEtPmRlc2MpCisJCWZyZWVfcnNwcV9mbChhZGFwdGVyLCBpbnRycSwgTlVMTCk7Cit9CisKKy8qKgorICoJdDR2Zl9zZ2Vfc3RhcnQgLSBlbmFibGUgU0dFIG9wZXJhdGlvbgorICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCisgKgorICoJU3RhcnQgdGFza2xldHMgYW5kIHRpbWVycyBhc3NvY2lhdGVkIHdpdGggdGhlIERNQSBlbmdpbmUuCisgKi8KK3ZvaWQgdDR2Zl9zZ2Vfc3RhcnQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJYWRhcHRlci0+c2dlLmV0aHR4cV9yb3ZlciA9IDA7CisJbW9kX3RpbWVyKCZhZGFwdGVyLT5zZ2UucnhfdGltZXIsIGppZmZpZXMgKyBSWF9RQ0hFQ0tfUEVSSU9EKTsKKwltb2RfdGltZXIoJmFkYXB0ZXItPnNnZS50eF90aW1lciwgamlmZmllcyArIFRYX1FDSEVDS19QRVJJT0QpOworfQorCisvKioKKyAqCXQ0dmZfc2dlX3N0b3AgLSBkaXNhYmxlIFNHRSBvcGVyYXRpb24KKyAqCUBhZGFwdGVyOiB0aGUgYWRhcHRlcgorICoKKyAqCVN0b3AgdGFza2xldHMgYW5kIHRpbWVycyBhc3NvY2lhdGVkIHdpdGggdGhlIERNQSBlbmdpbmUuICBOb3RlIHRoYXQKKyAqCXRoaXMgaXMgZWZmZWN0aXZlIG9ubHkgaWYgbWVhc3VyZXMgaGF2ZSBiZWVuIHRha2VuIHRvIGRpc2FibGUgYW55IEhXCisgKglldmVudHMgdGhhdCBtYXkgcmVzdGFydCB0aGVtLgorICovCit2b2lkIHQ0dmZfc2dlX3N0b3Aoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNnZSAqcyA9ICZhZGFwdGVyLT5zZ2U7CisKKwlpZiAocy0+cnhfdGltZXIuZnVuY3Rpb24pCisJCWRlbF90aW1lcl9zeW5jKCZzLT5yeF90aW1lcik7CisJaWYgKHMtPnR4X3RpbWVyLmZ1bmN0aW9uKQorCQlkZWxfdGltZXJfc3luYygmcy0+dHhfdGltZXIpOworfQorCisvKioKKyAqCXQ0dmZfc2dlX2luaXQgLSBpbml0aWFsaXplIFNHRQorICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCisgKgorICoJUGVyZm9ybXMgU0dFIGluaXRpYWxpemF0aW9uIG5lZWRlZCBldmVyeSB0aW1lIGFmdGVyIGEgY2hpcCByZXNldC4KKyAqCVdlIGRvIG5vdCBpbml0aWFsaXplIGFueSBvZiB0aGUgcXVldWUgc2V0cyBoZXJlLCBpbnN0ZWFkIHRoZSBkcml2ZXIKKyAqCXRvcC1sZXZlbCBtdXN0IHJlcXVlc3QgdGhvc2UgaW5kaXZpZHVhbGx5LiAgV2UgYWxzbyBkbyBub3QgZW5hYmxlIERNQQorICoJaGVyZSwgdGhhdCBzaG91bGQgYmUgZG9uZSBhZnRlciB0aGUgcXVldWVzIGhhdmUgYmVlbiBzZXQgdXAuCisgKi8KK2ludCB0NHZmX3NnZV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBzZ2VfcGFyYW1zICpzZ2VfcGFyYW1zID0gJmFkYXB0ZXItPnBhcmFtcy5zZ2U7CisJdTMyIGZsMCA9IHNnZV9wYXJhbXMtPnNnZV9mbF9idWZmZXJfc2l6ZVswXTsKKwl1MzIgZmwxID0gc2dlX3BhcmFtcy0+c2dlX2ZsX2J1ZmZlcl9zaXplWzFdOworCXN0cnVjdCBzZ2UgKnMgPSAmYWRhcHRlci0+c2dlOworCisJLyoKKwkgKiBTdGFydCBieSB2ZXR0aW5nIHRoZSBiYXNpYyBTR0UgcGFyYW1ldGVycyB3aGljaCBoYXZlIGJlZW4gc2V0IHVwIGJ5CisJICogdGhlIFBoeXNpY2FsIEZ1bmN0aW9uIERyaXZlci4gIElkZWFsbHkgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZGVhbAorCSAqIHdpdGggX2FueV8gY29uZmlndXJhdGlvbi4gIFByYWN0aWNlIGlzIGRpZmZlcmVudCAuLi4KKwkgKi8KKwlpZiAoZmwwICE9IFBBR0VfU0laRSB8fCAoZmwxICE9IDAgJiYgZmwxIDw9IGZsMCkpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5wZGV2X2RldiwgImJhZCBTR0UgRkwgYnVmZmVyIHNpemVzIFslZCwgJWRdXG4iLAorCQkJZmwwLCBmbDEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKChzZ2VfcGFyYW1zLT5zZ2VfY29udHJvbCAmIFJYUEtUQ1BMTU9ERSkgPT0gMCkgeworCQlkZXZfZXJyKGFkYXB0ZXItPnBkZXZfZGV2LCAiYmFkIFNHRSBDUEwgTU9ERVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogTm93IHRyYW5zbGF0ZSB0aGUgYWRhcHRlciBwYXJhbWV0ZXJzIGludG8gb3VyIGludGVybmFsIGZvcm1zLgorCSAqLworCWlmIChmbDEpCisJCUZMX1BHX09SREVSID0gaWxvZzIoZmwxKSAtIFBBR0VfU0hJRlQ7CisJU1RBVF9MRU4gPSAoKHNnZV9wYXJhbXMtPnNnZV9jb250cm9sICYgRUdSU1RBVFVTUEFHRVNJWkUpID8gMTI4IDogNjQpOworCVBLVFNISUZUID0gUEtUU0hJRlRfR0VUKHNnZV9wYXJhbXMtPnNnZV9jb250cm9sKTsKKwlGTF9BTElHTiA9IDEgPDwgKElOR1BBREJPVU5EQVJZX0dFVChzZ2VfcGFyYW1zLT5zZ2VfY29udHJvbCkgKworCQkJIFNHRV9JTkdQQURCT1VOREFSWV9TSElGVCk7CisKKwkvKgorCSAqIFNldCB1cCB0YXNrbGV0IHRpbWVycy4KKwkgKi8KKwlzZXR1cF90aW1lcigmcy0+cnhfdGltZXIsIHNnZV9yeF90aW1lcl9jYiwgKHVuc2lnbmVkIGxvbmcpYWRhcHRlcik7CisJc2V0dXBfdGltZXIoJnMtPnR4X3RpbWVyLCBzZ2VfdHhfdGltZXJfY2IsICh1bnNpZ25lZCBsb25nKWFkYXB0ZXIpOworCisJLyoKKwkgKiBJbml0aWFsaXplIEZvcndhcmRlZCBJbnRlcnJ1cHQgUXVldWUgbG9jay4KKwkgKi8KKwlzcGluX2xvY2tfaW5pdCgmcy0+aW50cnFfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2I0dmYvdDR2Zl9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2N4Z2I0dmYvdDR2Zl9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzdiZGU3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi90NHZmX2NvbW1vbi5oCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIENoZWxzaW8gVDQgUENJLUUgU1ItSU9WIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQKKyAqIGRyaXZlciBmb3IgTGludXguCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgQ2hlbHNpbyBDb21tdW5pY2F0aW9ucywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfX1Q0VkZfQ09NTU9OX0hfXworI2RlZmluZSBfX1Q0VkZfQ09NTU9OX0hfXworCisjaW5jbHVkZSAiLi4vY3hnYjQvdDRmd19hcGkuaCIKKworLyoKKyAqIFRoZSAibGVuMTYiIGZpZWxkIG9mIGEgRmlybXdhcmUgQ29tbWFuZCBTdHJ1Y3R1cmUgLi4uCisgKi8KKyNkZWZpbmUgRldfTEVOMTYoZndfc3RydWN0KSBGV19DTURfTEVOMTYoc2l6ZW9mKGZ3X3N0cnVjdCkgLyAxNikKKworLyoKKyAqIFBlci1WRiBzdGF0aXN0aWNzLgorICovCitzdHJ1Y3QgdDR2Zl9wb3J0X3N0YXRzIHsKKwkvKgorCSAqIFRYIHN0YXRpc3RpY3MuCisJICovCisJdTY0IHR4X2JjYXN0X2J5dGVzOwkJLyogYnJvYWRjYXN0ICovCisJdTY0IHR4X2JjYXN0X2ZyYW1lczsKKwl1NjQgdHhfbWNhc3RfYnl0ZXM7CQkvKiBtdWx0aWNhc3QgKi8KKwl1NjQgdHhfbWNhc3RfZnJhbWVzOworCXU2NCB0eF91Y2FzdF9ieXRlczsJCS8qIHVuaWNhc3QgKi8KKwl1NjQgdHhfdWNhc3RfZnJhbWVzOworCXU2NCB0eF9kcm9wX2ZyYW1lczsJCS8qIFRYIGRyb3BwZWQgZnJhbWVzICovCisJdTY0IHR4X29mZmxvYWRfYnl0ZXM7CQkvKiBvZmZsb2FkICovCisJdTY0IHR4X29mZmxvYWRfZnJhbWVzOworCisJLyoKKwkgKiBSWCBzdGF0aXN0aWNzLgorCSAqLworCXU2NCByeF9iY2FzdF9ieXRlczsJCS8qIGJyb2FkY2FzdCAqLworCXU2NCByeF9iY2FzdF9mcmFtZXM7CisJdTY0IHJ4X21jYXN0X2J5dGVzOwkJLyogbXVsdGljYXN0ICovCisJdTY0IHJ4X21jYXN0X2ZyYW1lczsKKwl1NjQgcnhfdWNhc3RfYnl0ZXM7CisJdTY0IHJ4X3VjYXN0X2ZyYW1lczsJCS8qIHVuaWNhc3QgKi8KKworCXU2NCByeF9lcnJfZnJhbWVzOwkJLyogUlggZXJyb3IgZnJhbWVzICovCit9OworCisvKgorICogUGVyLSJwb3J0IiAoVmlydHVhbCBJbnRlcmZhY2UpIGxpbmsgY29uZmlndXJhdGlvbiAuLi4KKyAqLworc3RydWN0IGxpbmtfY29uZmlnIHsKKwl1bnNpZ25lZCBpbnQgICBzdXBwb3J0ZWQ7ICAgICAgICAvKiBsaW5rIGNhcGFiaWxpdGllcyAqLworCXVuc2lnbmVkIGludCAgIGFkdmVydGlzaW5nOyAgICAgIC8qIGFkdmVydGlzZWQgY2FwYWJpbGl0aWVzICovCisJdW5zaWduZWQgc2hvcnQgcmVxdWVzdGVkX3NwZWVkOyAgLyogc3BlZWQgdXNlciBoYXMgcmVxdWVzdGVkICovCisJdW5zaWduZWQgc2hvcnQgc3BlZWQ7ICAgICAgICAgICAgLyogYWN0dWFsIGxpbmsgc3BlZWQgKi8KKwl1bnNpZ25lZCBjaGFyICByZXF1ZXN0ZWRfZmM7ICAgICAvKiBmbG93IGNvbnRyb2wgdXNlciBoYXMgcmVxdWVzdGVkICovCisJdW5zaWduZWQgY2hhciAgZmM7ICAgICAgICAgICAgICAgLyogYWN0dWFsIGxpbmsgZmxvdyBjb250cm9sICovCisJdW5zaWduZWQgY2hhciAgYXV0b25lZzsgICAgICAgICAgLyogYXV0b25lZ290aWF0aW5nPyAqLworCXVuc2lnbmVkIGNoYXIgIGxpbmtfb2s7ICAgICAgICAgIC8qIGxpbmsgdXA/ICovCit9OworCitlbnVtIHsKKwlQQVVTRV9SWCAgICAgID0gMSA8PCAwLAorCVBBVVNFX1RYICAgICAgPSAxIDw8IDEsCisJUEFVU0VfQVVUT05FRyA9IDEgPDwgMgorfTsKKworLyoKKyAqIEdlbmVyYWwgZGV2aWNlIHBhcmFtZXRlcnMgLi4uCisgKi8KK3N0cnVjdCBkZXZfcGFyYW1zIHsKKwl1MzIgZndyZXY7CQkJLyogZmlybXdhcmUgdmVyc2lvbiAqLworCXUzMiB0cHJldjsJCQkvKiBUUCBNaWNyb2NvZGUgVmVyc2lvbiAqLworfTsKKworLyoKKyAqIFNjYXR0ZXIgR2F0aGVyIEVuZ2luZSBwYXJhbWV0ZXJzLiAgVGhlc2UgYXJlIGFsbW9zdCBhbGwgZGV0ZXJtaW5lZCBieSB0aGUKKyAqIFBoeXNpY2FsIEZ1bmN0aW9uIERyaXZlci4gIFdlIGp1c3QgbmVlZCB0byBncmFiIHRoZW0gdG8gc2VlIHdpdGhpbiB3aGljaAorICogZW52aXJvbm1lbnQgd2UncmUgcGxheWluZyAuLi4KKyAqLworc3RydWN0IHNnZV9wYXJhbXMgeworCXUzMiBzZ2VfY29udHJvbDsJCS8qIHBhZGRpbmcsIGJvdW5kYXJpZXMsIGxlbmd0aHMsIGV0Yy4gKi8KKwl1MzIgc2dlX2hvc3RfcGFnZV9zaXplOwkJLyogUkRNQSBwYWdlIHNpemVzICovCisJdTMyIHNnZV9xdWV1ZXNfcGVyX3BhZ2U7CS8qIFJETUEgcXVldWVzL3BhZ2UgKi8KKwl1MzIgc2dlX3VzZXJfbW9kZV9saW1pdHM7CS8qIGxpbWl0cyBmb3IgQkFSMiB1c2VyIG1vZGUgYWNjZXNzZXMgKi8KKwl1MzIgc2dlX2ZsX2J1ZmZlcl9zaXplWzE2XTsJLyogZnJlZSBsaXN0IGJ1ZmZlciBzaXplcyAqLworCXUzMiBzZ2VfaW5ncmVzc19yeF90aHJlc2hvbGQ7CS8qIFJYIGNvdW50ZXIgaW50ZXJydXB0IHRocmVzaG9sZFs0XSAqLworCXUzMiBzZ2VfdGltZXJfdmFsdWVfMF9hbmRfMTsJLyogaW50ZXJydXB0IGNvYWxlc2NpbmcgdGltZXIgdmFsdWVzICovCisJdTMyIHNnZV90aW1lcl92YWx1ZV8yX2FuZF8zOworCXUzMiBzZ2VfdGltZXJfdmFsdWVfNF9hbmRfNTsKK307CisKKy8qCisgKiBWaXRhbCBQcm9kdWN0IERhdGEgcGFyYW1ldGVycy4KKyAqLworc3RydWN0IHZwZF9wYXJhbXMgeworCXUzMiBjY2xrOwkJCS8qIENvcmUgQ2xvY2sgKEtIeikgKi8KK307CisKKy8qCisgKiBHbG9iYWwgUmVjZWl2ZSBTaWRlIFNjYWxpbmcgKFJTUykgcGFyYW1ldGVycyBpbiBob3N0LW5hdGl2ZSBmb3JtYXQuCisgKi8KK3N0cnVjdCByc3NfcGFyYW1zIHsKKwl1bnNpZ25lZCBpbnQgbW9kZTsJCS8qIFJTUyBtb2RlICovCisJdW5pb24geworCSAgICBzdHJ1Y3QgeworCQlpbnQgc3lubWFwZW46MTsJCS8qIFNZTiBNYXAgRW5hYmxlICovCisJCWludCBzeW40dHVwZW5pcHY2OjE7CS8qIGVuYWJsZSBoYXNoaW5nIDQtdHVwbGUgSVB2NiBTWU5zICovCisJCWludCBzeW4ydHVwZW5pcHY2OjE7CS8qIGVuYWJsZSBoYXNoaW5nIDItdHVwbGUgSVB2NiBTWU5zICovCisJCWludCBzeW40dHVwZW5pcHY0OjE7CS8qIGVuYWJsZSBoYXNoaW5nIDQtdHVwbGUgSVB2NCBTWU5zICovCisJCWludCBzeW4ydHVwZW5pcHY0OjE7CS8qIGVuYWJsZSBoYXNoaW5nIDItdHVwbGUgSVB2NCBTWU5zICovCisJCWludCBvZmRtYXBlbjoxOwkJLyogT2ZmbG9hZCBNYXAgRW5hYmxlICovCisJCWludCB0bmxtYXBlbjoxOwkJLyogVHVubmVsIE1hcCBFbmFibGUgKi8KKwkJaW50IHRubGFsbGxvb2t1cDoxOwkvKiBUdW5uZWwgQWxsIExvb2t1cCAqLworCQlpbnQgaGFzaHRvZXBsaXR6OjE7CS8qIHVzZSBUb2VwbGl0eiBoYXNoICovCisJICAgIH0gYmFzaWN2aXJ0dWFsOworCX0gdTsKK307CisKKy8qCisgKiBWaXJ0dWFsIEludGVyZmFjZSBSU1MgQ29uZmlndXJhdGlvbiBpbiBob3N0LW5hdGl2ZSBmb3JtYXQuCisgKi8KK3VuaW9uIHJzc192aV9jb25maWcgeworICAgIHN0cnVjdCB7CisJdTE2IGRlZmF1bHRxOwkJCS8qIEluZ3Jlc3MgUXVldWUgSUQgZm9yICF0bmxhbGxsb29rdXAgKi8KKwlpbnQgaXA2Zm91cnR1cGVuOjE7CQkvKiBoYXNoIDQtdHVwbGUgSVB2NiBpbmdyZXNzIHBhY2tldHMgKi8KKwlpbnQgaXA2dHdvdHVwZW46MTsJCS8qIGhhc2ggMi10dXBsZSBJUHY2IGluZ3Jlc3MgcGFja2V0cyAqLworCWludCBpcDRmb3VydHVwZW46MTsJCS8qIGhhc2ggNC10dXBsZSBJUHY0IGluZ3Jlc3MgcGFja2V0cyAqLworCWludCBpcDR0d290dXBlbjoxOwkJLyogaGFzaCAyLXR1cGxlIElQdjQgaW5ncmVzcyBwYWNrZXRzICovCisJaW50IHVkcGVuOwkJCS8qIGhhc2ggNC10dXBsZSBVRFAgaW5ncmVzcyBwYWNrZXRzICovCisgICAgfSBiYXNpY3ZpcnR1YWw7Cit9OworCisvKgorICogTWF4aW11bSByZXNvdXJjZXMgcHJvdmlzaW9uZWQgZm9yIGEgUENJIFZGLgorICovCitzdHJ1Y3QgdmZfcmVzb3VyY2VzIHsKKwl1bnNpZ25lZCBpbnQgbnZpOwkJLyogTiB2aXJ0dWFsIGludGVyZmFjZXMgKi8KKwl1bnNpZ25lZCBpbnQgbmVxOwkJLyogTiBlZ3Jlc3MgUXMgKi8KKwl1bnNpZ25lZCBpbnQgbmV0aGN0cmw7CQkvKiBOIGVncmVzcyBFVEggb3IgQ1RSTCBRcyAqLworCXVuc2lnbmVkIGludCBuaXFmbGludDsJCS8qIE4gaW5ncmVzcyBRcy93IGZyZWUgbGlzdChzKSAmIGludHIgKi8KKwl1bnNpZ25lZCBpbnQgbmlxOwkJLyogTiBpbmdyZXNzIFFzICovCisJdW5zaWduZWQgaW50IHRjOwkJLyogUENJLUUgdHJhZmZpYyBjbGFzcyAqLworCXVuc2lnbmVkIGludCBwbWFzazsJCS8qIHBvcnQgYWNjZXNzIHJpZ2h0cyBtYXNrICovCisJdW5zaWduZWQgaW50IG5leGFjdGY7CQkvKiBOIGV4YWN0IE1QUyBmaWx0ZXJzICovCisJdW5zaWduZWQgaW50IHJfY2FwczsJCS8qIHJlYWQgY2FwYWJpbGl0aWVzICovCisJdW5zaWduZWQgaW50IHd4X2NhcHM7CQkvKiB3cml0ZS9leGVjdXRlIGNhcGFiaWxpdGllcyAqLworfTsKKworLyoKKyAqIFBlci0iYWRhcHRlciIgKFZpcnR1YWwgRnVuY3Rpb24pIHBhcmFtZXRlcnMuCisgKi8KK3N0cnVjdCBhZGFwdGVyX3BhcmFtcyB7CisJc3RydWN0IGRldl9wYXJhbXMgZGV2OwkJLyogZ2VuZXJhbCBkZXZpY2UgcGFyYW1ldGVycyAqLworCXN0cnVjdCBzZ2VfcGFyYW1zIHNnZTsJCS8qIFNjYXR0ZXIgR2F0aGVyIEVuZ2luZSAqLworCXN0cnVjdCB2cGRfcGFyYW1zIHZwZDsJCS8qIFZpdGFsIFByb2R1Y3QgRGF0YSAqLworCXN0cnVjdCByc3NfcGFyYW1zIHJzczsJCS8qIFJlY2VpdmUgU2lkZSBTY2FsaW5nICovCisJc3RydWN0IHZmX3Jlc291cmNlcyB2ZnJlczsJLyogVmlydHVhbCBGdW5jdGlvbiBSZXNvdXJjZSBsaW1pdHMgKi8KKwl1OCBucG9ydHM7CQkJLyogIyBvZiBFdGhlcm5ldCAicG9ydHMiICovCit9OworCisjaW5jbHVkZSAiYWRhcHRlci5oIgorCisjaWZuZGVmIFBDSV9WRU5ET1JfSURfQ0hFTFNJTworIyBkZWZpbmUgUENJX1ZFTkRPUl9JRF9DSEVMU0lPIDB4MTQyNQorI2VuZGlmCisKKyNkZWZpbmUgZm9yX2VhY2hfcG9ydChhZGFwdGVyLCBpdGVyKSBcCisJZm9yIChpdGVyID0gMDsgaXRlciA8IChhZGFwdGVyKS0+cGFyYW1zLm5wb3J0czsgaXRlcisrKQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfMTBnX3BvcnQoY29uc3Qgc3RydWN0IGxpbmtfY29uZmlnICpsYykKK3sKKwlyZXR1cm4gKGxjLT5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsKSAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjb3JlX3RpY2tzX3Blcl91c2VjKGNvbnN0IHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXJldHVybiBhZGFwdGVyLT5wYXJhbXMudnBkLmNjbGsgLyAxMDAwOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB1c190b19jb3JlX3RpY2tzKGNvbnN0IHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkJCQkgICAgdW5zaWduZWQgaW50IHVzKQoreworCXJldHVybiAodXMgKiBhZGFwdGVyLT5wYXJhbXMudnBkLmNjbGspIC8gMTAwMDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY29yZV90aWNrc190b191cyhjb25zdCBzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJICAgIHVuc2lnbmVkIGludCB0aWNrcykKK3sKKwlyZXR1cm4gKHRpY2tzICogMTAwMCkgLyBhZGFwdGVyLT5wYXJhbXMudnBkLmNjbGs7Cit9CisKK2ludCB0NHZmX3dyX21ib3hfY29yZShzdHJ1Y3QgYWRhcHRlciAqLCBjb25zdCB2b2lkICosIGludCwgdm9pZCAqLCBib29sKTsKKworc3RhdGljIGlubGluZSBpbnQgdDR2Zl93cl9tYm94KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBjb25zdCB2b2lkICpjbWQsCisJCQkgICAgICAgaW50IHNpemUsIHZvaWQgKnJwbCkKK3sKKwlyZXR1cm4gdDR2Zl93cl9tYm94X2NvcmUoYWRhcHRlciwgY21kLCBzaXplLCBycGwsIHRydWUpOworfQorCitzdGF0aWMgaW5saW5lIGludCB0NHZmX3dyX21ib3hfbnMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IHZvaWQgKmNtZCwKKwkJCQkgIGludCBzaXplLCB2b2lkICpycGwpCit7CisJcmV0dXJuIHQ0dmZfd3JfbWJveF9jb3JlKGFkYXB0ZXIsIGNtZCwgc2l6ZSwgcnBsLCBmYWxzZSk7Cit9CisKK2ludCBfX2RldmluaXQgdDR2Zl93YWl0X2Rldl9yZWFkeShzdHJ1Y3QgYWRhcHRlciAqKTsKK2ludCBfX2RldmluaXQgdDR2Zl9wb3J0X2luaXQoc3RydWN0IGFkYXB0ZXIgKiwgaW50KTsKKworaW50IHQ0dmZfcXVlcnlfcGFyYW1zKHN0cnVjdCBhZGFwdGVyICosIHVuc2lnbmVkIGludCwgY29uc3QgdTMyICosIHUzMiAqKTsKK2ludCB0NHZmX3NldF9wYXJhbXMoc3RydWN0IGFkYXB0ZXIgKiwgdW5zaWduZWQgaW50LCBjb25zdCB1MzIgKiwgY29uc3QgdTMyICopOworCitpbnQgdDR2Zl9nZXRfc2dlX3BhcmFtcyhzdHJ1Y3QgYWRhcHRlciAqKTsKK2ludCB0NHZmX2dldF92cGRfcGFyYW1zKHN0cnVjdCBhZGFwdGVyICopOworaW50IHQ0dmZfZ2V0X2Rldl9wYXJhbXMoc3RydWN0IGFkYXB0ZXIgKik7CitpbnQgdDR2Zl9nZXRfcnNzX2dsYl9jb25maWcoc3RydWN0IGFkYXB0ZXIgKik7CitpbnQgdDR2Zl9nZXRfdmZyZXMoc3RydWN0IGFkYXB0ZXIgKik7CisKK2ludCB0NHZmX3JlYWRfcnNzX3ZpX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlciAqLCB1bnNpZ25lZCBpbnQsCisJCQkgICAgdW5pb24gcnNzX3ZpX2NvbmZpZyAqKTsKK2ludCB0NHZmX3dyaXRlX3Jzc192aV9jb25maWcoc3RydWN0IGFkYXB0ZXIgKiwgdW5zaWduZWQgaW50LAorCQkJICAgICB1bmlvbiByc3NfdmlfY29uZmlnICopOworaW50IHQ0dmZfY29uZmlnX3Jzc19yYW5nZShzdHJ1Y3QgYWRhcHRlciAqLCB1bnNpZ25lZCBpbnQsIGludCwgaW50LAorCQkJICBjb25zdCB1MTYgKiwgaW50KTsKKworaW50IHQ0dmZfYWxsb2Nfdmkoc3RydWN0IGFkYXB0ZXIgKiwgaW50KTsKK2ludCB0NHZmX2ZyZWVfdmkoc3RydWN0IGFkYXB0ZXIgKiwgaW50KTsKK2ludCB0NHZmX2VuYWJsZV92aShzdHJ1Y3QgYWRhcHRlciAqLCB1bnNpZ25lZCBpbnQsIGJvb2wsIGJvb2wpOworaW50IHQ0dmZfaWRlbnRpZnlfcG9ydChzdHJ1Y3QgYWRhcHRlciAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CisKK2ludCB0NHZmX3NldF9yeG1vZGUoc3RydWN0IGFkYXB0ZXIgKiwgdW5zaWduZWQgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwKKwkJICAgIGJvb2wpOworaW50IHQ0dmZfYWxsb2NfbWFjX2ZpbHQoc3RydWN0IGFkYXB0ZXIgKiwgdW5zaWduZWQgaW50LCBib29sLCB1bnNpZ25lZCBpbnQsCisJCQljb25zdCB1OCAqKiwgdTE2ICosIHU2NCAqLCBib29sKTsKK2ludCB0NHZmX2NoYW5nZV9tYWMoc3RydWN0IGFkYXB0ZXIgKiwgdW5zaWduZWQgaW50LCBpbnQsIGNvbnN0IHU4ICosIGJvb2wpOworaW50IHQ0dmZfc2V0X2FkZHJfaGFzaChzdHJ1Y3QgYWRhcHRlciAqLCB1bnNpZ25lZCBpbnQsIGJvb2wsIHU2NCwgYm9vbCk7CitpbnQgdDR2Zl9nZXRfcG9ydF9zdGF0cyhzdHJ1Y3QgYWRhcHRlciAqLCBpbnQsIHN0cnVjdCB0NHZmX3BvcnRfc3RhdHMgKik7CisKK2ludCB0NHZmX2lxX2ZyZWUoc3RydWN0IGFkYXB0ZXIgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwKKwkJIHVuc2lnbmVkIGludCk7CitpbnQgdDR2Zl9ldGhfZXFfZnJlZShzdHJ1Y3QgYWRhcHRlciAqLCB1bnNpZ25lZCBpbnQpOworCitpbnQgdDR2Zl9oYW5kbGVfZndfcnBsKHN0cnVjdCBhZGFwdGVyICosIGNvbnN0IF9fYmU2NCAqKTsKKworI2VuZGlmIC8qIF9fVDRWRl9DT01NT05fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiNHZmL3Q0dmZfZGVmcy5oIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi90NHZmX2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2IxMjdkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi90NHZmX2RlZnMuaApAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDaGVsc2lvIFQ0IFBDSS1FIFNSLUlPViBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0CisgKiBkcml2ZXIgZm9yIExpbnV4LgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIENoZWxzaW8gQ29tbXVuaWNhdGlvbnMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX19UNFZGX0RFRlNfSF9fCisjZGVmaW5lIF9fVDRWRl9ERUZTX0hfXworCisjaW5jbHVkZSAiLi4vY3hnYjQvdDRfcmVncy5oIgorCisvKgorICogVGhlIFZGIFJlZ2lzdGVyIE1hcC4KKyAqCisgKiBUaGUgU2NhdHRlciBHYXRoZXIgRW5naW5lIChTR0UpLCBNdWx0aXBvcnQgU3VwcG9ydCBtb2R1bGUgKE1QUyksIFBJTyBMb2NhbAorICogYnVzIG1vZHVsZSAoUEwpIGFuZCBDUFUgSW50ZXJmYWNlIE1vZHVsZSAoQ0lNKSBjb21wb25lbnRzIGFyZSBtYXBwZWQgdmlhCisgKiB0aGUgU2xpY2UgdG8gTW9kdWxlIE1hcCBUYWJsZSAoc2VlIGJlbG93KSBpbiB0aGUgUGh5c2ljYWwgRnVuY3Rpb24gUmVnaXN0ZXIKKyAqIE1hcC4gIFRoZSBNYWlsIEJveCBEYXRhIChNQkRBVEEpIHJhbmdlIGlzIG1hcHBlZCB2aWEgdGhlIFBDSS1FIE1haWxib3ggQmFzZQorICogYW5kIE9mZnNldCByZWdpc3RlcnMgaW4gdGhlIFBGIFJlZ2lzdGVyIE1hcC4gIFRoZSBNQkRBVEEgYmFzZSBhZGRyZXNzIGlzCisgKiBxdWl0ZSBjb25zdHJhaW5lZCBhcyBpdCBkZXRlcm1pbmVzIHRoZSBNYWlsYm94IERhdGEgYWRkcmVzc2VzIGZvciBib3RoIFBGcworICogYW5kIFZGcywgYW5kIHRoZXJlZm9yZSBtdXN0IGZpdCBpbiBib3RoIHRoZSBWRiBhbmQgUEYgUmVnaXN0ZXIgTWFwcyB3aXRob3V0CisgKiBvdmVybGFwcGluZyBvdGhlciByZWdpc3RlcnMuCisgKi8KKyNkZWZpbmUgVDRWRl9TR0VfQkFTRV9BRERSCTB4MDAwMAorI2RlZmluZSBUNFZGX01QU19CQVNFX0FERFIJMHgwMTAwCisjZGVmaW5lIFQ0VkZfUExfQkFTRV9BRERSCTB4MDIwMAorI2RlZmluZSBUNFZGX01CREFUQV9CQVNFX0FERFIJMHgwMjQwCisjZGVmaW5lIFQ0VkZfQ0lNX0JBU0VfQUREUgkweDAzMDAKKworI2RlZmluZSBUNFZGX1JFR01BUF9TVEFSVAkweDAwMDAKKyNkZWZpbmUgVDRWRl9SRUdNQVBfU0laRQkweDA0MDAKKworLyoKKyAqIFRoZXJlJ3Mgbm8gaGFyZHdhcmUgbGltaXRhdGlvbiB3aGljaCByZXF1aXJlcyB0aGF0IHRoZSBhZGRyZXNzZXMgb2YgdGhlCisgKiBNYWlsYm94IERhdGEgaW4gdGhlIGZpeGVkIENJTSBQRiBtYXAgYW5kIHRoZSBwcm9ncmFtbWFibGUgVkYgbWFwIG11c3QKKyAqIG1hdGNoLiAgSG93ZXZlciwgaXQncyBhIHVzZWZ1bCBjb252ZW50aW9uIC4uLgorICovCisjaWYgVDRWRl9NQkRBVEFfQkFTRV9BRERSICE9IENJTV9QRl9NQUlMQk9YX0RBVEEKKyNlcnJvciBUNFZGX01CREFUQV9CQVNFX0FERFIgbXVzdCBtYXRjaCBDSU1fUEZfTUFJTEJPWF9EQVRBIQorI2VuZGlmCisKKy8qCisgKiBWaXJ0dWFsIEZ1bmN0aW9uICJTbGljZSB0byBNb2R1bGUgTWFwIFRhYmxlIiBkZWZpbml0aW9ucy4KKyAqCisgKiBUaGlzIHRhYmxlIGFsbG93cyB1cyB0byBtYXAgc3Vic2V0cyBvZiB0aGUgdmFyaW91cyBtb2R1bGUgcmVnaXN0ZXIgc2V0cworICogaW50byB0aGUgVDRWRiBSZWdpc3RlciBNYXAuICBFYWNoIHRhYmxlIGVudHJ5IGlkZW50aWZpZXMgdGhlIGluZGV4IG9mIHRoZQorICogbW9kdWxlIHdob3NlIHJlZ2lzdGVycyBhcmUgYmVpbmcgbWFwcGVkLCB0aGUgb2Zmc2V0IHdpdGhpbiB0aGUgbW9kdWxlJ3MKKyAqIHJlZ2lzdGVyIHNldCB0aGF0IHRoZSBtYXBwaW5nIHNob3VsZCBzdGFydCBhdCwgdGhlIGxpbWl0IG9mIHRoZSBtYXBwaW5nLAorICogYW5kIHRoZSBvZmZzZXQgd2l0aGluIHRoZSBUNFZGIFJlZ2lzdGVyIE1hcCB0byB3aGljaCB0aGUgbW9kdWxlJ3MgcmVnaXN0ZXJzCisgKiBhcmUgYmVpbmcgbWFwcGVkLiAgQWxsIGFkZHJlc3NlcyBhbmQgcXVhbHRpdGllcyBhcmUgaW4gdGVybXMgb2YgMzItYml0CisgKiB3b3Jkcy4gIFRoZSAibGltaXQiIHZhbHVlIGlzIGFsc28gaW4gdGVybXMgb2YgMzItYml0IHdvcmRzIGFuZCBpcyBlcXVhbCB0bworICogdGhlIGxhc3QgYWRkcmVzcyBtYXBwZWQgaW4gdGhlIFQ0VkYgUmVnaXN0ZXIgTWFwIDEgKGkuZS4gaXQncyBhICI8PSIKKyAqIHJlbGF0aW9uIHJhdGhlciB0aGFuIGEgIjwiKS4KKyAqLworI2RlZmluZSBUNFZGX01PRF9NQVAobW9kdWxlLCBpbmRleCwgZmlyc3QsIGxhc3QpIFwKKwlUNFZGX01PRF9NQVBfIyNtb2R1bGUjI19JTkRFWCAgPSAoaW5kZXgpLCBcCisJVDRWRl9NT0RfTUFQXyMjbW9kdWxlIyNfRklSU1QgID0gKGZpcnN0KSwgXAorCVQ0VkZfTU9EX01BUF8jI21vZHVsZSMjX0xBU1QgICA9IChsYXN0KSwgXAorCVQ0VkZfTU9EX01BUF8jI21vZHVsZSMjX09GRlNFVCA9ICgoZmlyc3QpLzQpLCBcCisJVDRWRl9NT0RfTUFQXyMjbW9kdWxlIyNfQkFTRSA9IFwKKwkJKFQ0VkZfIyNtb2R1bGUjI19CQVNFX0FERFIvNCArIChmaXJzdCkvNCksIFwKKwlUNFZGX01PRF9NQVBfIyNtb2R1bGUjI19MSU1JVCA9IFwKKwkJKFQ0VkZfIyNtb2R1bGUjI19CQVNFX0FERFIvNCArIChsYXN0KS80KSwKKworI2RlZmluZSBTR0VfVkZfS0RPT1JCRUxMIDB4MAorI2RlZmluZSBTR0VfVkZfR1RTIDB4NAorI2RlZmluZSBNUFNfVkZfQ1RMIDB4MAorI2RlZmluZSBNUFNfVkZfU1RBVF9SWF9WRl9FUlJfRlJBTUVTX0ggMHhmYworI2RlZmluZSBQTF9WRl9XSE9BTUkgMHgwCisjZGVmaW5lIENJTV9WRl9FWFRfTUFJTEJPWF9DVFJMIDB4MAorI2RlZmluZSBDSU1fVkZfRVhUX01BSUxCT1hfU1RBVFVTIDB4NAorCitlbnVtIHsKKyAgICBUNFZGX01PRF9NQVAoU0dFLCAyLCBTR0VfVkZfS0RPT1JCRUxMLCBTR0VfVkZfR1RTKQorICAgIFQ0VkZfTU9EX01BUChNUFMsIDAsIE1QU19WRl9DVEwsIE1QU19WRl9TVEFUX1JYX1ZGX0VSUl9GUkFNRVNfSCkKKyAgICBUNFZGX01PRF9NQVAoUEwsICAzLCBQTF9WRl9XSE9BTUksIFBMX1ZGX1dIT0FNSSkKKyAgICBUNFZGX01PRF9NQVAoQ0lNLCAxLCBDSU1fVkZfRVhUX01BSUxCT1hfQ1RSTCwgQ0lNX1ZGX0VYVF9NQUlMQk9YX1NUQVRVUykKK307CisKKy8qCisgKiBUaGVyZSBpc24ndCBhIFNsaWNlIHRvIE1vZHVsZSBNYXAgVGFibGUgZW50cnkgZm9yIHRoZSBNYWlsYm94IERhdGEKKyAqIHJlZ2lzdGVycywgYnV0IGl0J3MgY29udmVuaWVudCB0byB1c2Ugc2ltaWxhciBuYW1lcyBhcyBhYm92ZS4gIFRoZXJlIGFyZSA4CisgKiBsaXR0bGUtZW5kaWFuIDY0LWJpdCBNYWlsYm94IERhdGEgcmVnaXN0ZXJzLiAgTm90ZSB0aGF0IHRoZSAiaW5zdGFuY2VzIgorICogdmFsdWUgYmVsb3cgaXMgaW4gdGVybXMgb2YgMzItYml0IHdvcmRzIHdoaWNoIG1hdGNoZXMgdGhlICJ3b3JkIiBhZGRyZXNzaW5nCisgKiBzcGFjZSB3ZSB1c2UgYWJvdmUgZm9yIHRoZSBTbGljZSB0byBNb2R1bGUgTWFwIFNwYWNlLgorICovCisjZGVmaW5lIE5VTV9DSU1fVkZfTUFJTEJPWF9EQVRBX0lOU1RBTkNFUyAxNgorCisjZGVmaW5lIFQ0VkZfTUJEQVRBX0ZJUlNUCTAKKyNkZWZpbmUgVDRWRl9NQkRBVEFfTEFTVAkoKE5VTV9DSU1fVkZfTUFJTEJPWF9EQVRBX0lOU1RBTkNFUy0xKSo0KQorCisjZW5kaWYgLyogX19UNFQ0VkZfREVGU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2I0dmYvdDR2Zl9ody5jIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi90NHZmX2h3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWExYzEyMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2I0dmYvdDR2Zl9ody5jCkBAIC0wLDAgKzEsMTMzMyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDaGVsc2lvIFQ0IFBDSS1FIFNSLUlPViBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0CisgKiBkcml2ZXIgZm9yIExpbnV4LgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIENoZWxzaW8gQ29tbXVuaWNhdGlvbnMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKyNpbmNsdWRlICJ0NHZmX2NvbW1vbi5oIgorI2luY2x1ZGUgInQ0dmZfZGVmcy5oIgorCisjaW5jbHVkZSAiLi4vY3hnYjQvdDRfcmVncy5oIgorI2luY2x1ZGUgIi4uL2N4Z2I0L3Q0ZndfYXBpLmgiCisKKy8qCisgKiBXYWl0IGZvciB0aGUgZGV2aWNlIHRvIGJlY29tZSByZWFkeSAoc2lnbmlmaWVkIGJ5IG91ciAid2hvIGFtIEkiIHJlZ2lzdGVyCisgKiByZXR1cm5pbmcgYSB2YWx1ZSBvdGhlciB0aGFuIGFsbCAxJ3MpLiAgUmV0dXJuIGFuIGVycm9yIGlmIGl0IGRvZXNuJ3QKKyAqIGJlY29tZSByZWFkeSAuLi4KKyAqLworaW50IF9fZGV2aW5pdCB0NHZmX3dhaXRfZGV2X3JlYWR5KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCWNvbnN0IHUzMiB3aG9hbWkgPSBUNFZGX1BMX0JBU0VfQUREUiArIFBMX1ZGX1dIT0FNSTsKKwljb25zdCB1MzIgbm90cmVhZHkxID0gMHhmZmZmZmZmZjsKKwljb25zdCB1MzIgbm90cmVhZHkyID0gMHhlZWVlZWVlZTsKKwl1MzIgdmFsOworCisJdmFsID0gdDRfcmVhZF9yZWcoYWRhcHRlciwgd2hvYW1pKTsKKwlpZiAodmFsICE9IG5vdHJlYWR5MSAmJiB2YWwgIT0gbm90cmVhZHkyKQorCQlyZXR1cm4gMDsKKwltc2xlZXAoNTAwKTsKKwl2YWwgPSB0NF9yZWFkX3JlZyhhZGFwdGVyLCB3aG9hbWkpOworCWlmICh2YWwgIT0gbm90cmVhZHkxICYmIHZhbCAhPSBub3RyZWFkeTIpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIC1FSU87Cit9CisKKy8qCisgKiBHZXQgdGhlIHJlcGx5IHRvIGEgbWFpbGJveCBjb21tYW5kIGFuZCBzdG9yZSBpdCBpbiBAcnBsIGluIGJpZy1lbmRpYW4gb3JkZXIKKyAqIChzaW5jZSB0aGUgZmlybXdhcmUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBzcGVjaWZpZWQgaW4gYSBiaWctZW5kaWFuIGxheW91dCkuCisgKi8KK3N0YXRpYyB2b2lkIGdldF9tYm94X3JwbChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgX19iZTY0ICpycGwsIGludCBzaXplLAorCQkJIHUzMiBtYm94X2RhdGEpCit7CisJZm9yICggOyBzaXplOyBzaXplIC09IDgsIG1ib3hfZGF0YSArPSA4KQorCQkqcnBsKysgPSBjcHVfdG9fYmU2NCh0NF9yZWFkX3JlZzY0KGFkYXB0ZXIsIG1ib3hfZGF0YSkpOworfQorCisvKgorICogRHVtcCBjb250ZW50cyBvZiBtYWlsYm94IHdpdGggYSBsZWFkaW5nIHRhZy4KKyAqLworc3RhdGljIHZvaWQgZHVtcF9tYm94KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBjb25zdCBjaGFyICp0YWcsIHUzMiBtYm94X2RhdGEpCit7CisJZGV2X2VycihhZGFwdGVyLT5wZGV2X2RldiwKKwkJIm1ib3ggJXM6ICVsbHggJWxseCAlbGx4ICVsbHggJWxseCAlbGx4ICVsbHggJWxseFxuIiwgdGFnLAorCQkodW5zaWduZWQgbG9uZyBsb25nKXQ0X3JlYWRfcmVnNjQoYWRhcHRlciwgbWJveF9kYXRhICsgIDApLAorCQkodW5zaWduZWQgbG9uZyBsb25nKXQ0X3JlYWRfcmVnNjQoYWRhcHRlciwgbWJveF9kYXRhICsgIDgpLAorCQkodW5zaWduZWQgbG9uZyBsb25nKXQ0X3JlYWRfcmVnNjQoYWRhcHRlciwgbWJveF9kYXRhICsgMTYpLAorCQkodW5zaWduZWQgbG9uZyBsb25nKXQ0X3JlYWRfcmVnNjQoYWRhcHRlciwgbWJveF9kYXRhICsgMjQpLAorCQkodW5zaWduZWQgbG9uZyBsb25nKXQ0X3JlYWRfcmVnNjQoYWRhcHRlciwgbWJveF9kYXRhICsgMzIpLAorCQkodW5zaWduZWQgbG9uZyBsb25nKXQ0X3JlYWRfcmVnNjQoYWRhcHRlciwgbWJveF9kYXRhICsgNDApLAorCQkodW5zaWduZWQgbG9uZyBsb25nKXQ0X3JlYWRfcmVnNjQoYWRhcHRlciwgbWJveF9kYXRhICsgNDgpLAorCQkodW5zaWduZWQgbG9uZyBsb25nKXQ0X3JlYWRfcmVnNjQoYWRhcHRlciwgbWJveF9kYXRhICsgNTYpKTsKK30KKworLyoqCisgKgl0NHZmX3dyX21ib3hfY29yZSAtIHNlbmQgYSBjb21tYW5kIHRvIEZXIHRocm91Z2ggdGhlIG1haWxib3gKKyAqCUBhZGFwdGVyOiB0aGUgYWRhcHRlcgorICoJQGNtZDogdGhlIGNvbW1hbmQgdG8gd3JpdGUKKyAqCUBzaXplOiBjb21tYW5kIGxlbmd0aCBpbiBieXRlcworICoJQHJwbDogd2hlcmUgdG8gb3B0aW9uYWxseSBzdG9yZSB0aGUgcmVwbHkKKyAqCUBzbGVlcF9vazogaWYgdHJ1ZSB3ZSBtYXkgc2xlZXAgd2hpbGUgYXdhaXRpbmcgY29tbWFuZCBjb21wbGV0aW9uCisgKgorICoJU2VuZHMgdGhlIGdpdmVuIGNvbW1hbmQgdG8gRlcgdGhyb3VnaCB0aGUgbWFpbGJveCBhbmQgd2FpdHMgZm9yIHRoZQorICoJRlcgdG8gZXhlY3V0ZSB0aGUgY29tbWFuZC4gIElmIEBycGwgaXMgbm90ICVOVUxMIGl0IGlzIHVzZWQgdG8gc3RvcmUKKyAqCXRoZSBGVydzIHJlcGx5IHRvIHRoZSBjb21tYW5kLiAgVGhlIGNvbW1hbmQgYW5kIGl0cyBvcHRpb25hbCByZXBseQorICoJYXJlIG9mIHRoZSBzYW1lIGxlbmd0aC4gIEZXIGNhbiB0YWtlIHVwIHRvIDUwMCBtcyB0byByZXNwb25kLgorICoJQHNsZWVwX29rIGRldGVybWluZXMgd2hldGhlciB3ZSBtYXkgc2xlZXAgd2hpbGUgYXdhaXRpbmcgdGhlIHJlc3BvbnNlLgorICoJSWYgc2xlZXBpbmcgaXMgYWxsb3dlZCB3ZSB1c2UgcHJvZ3Jlc3NpdmUgYmFja29mZiBvdGhlcndpc2Ugd2Ugc3Bpbi4KKyAqCisgKglUaGUgcmV0dXJuIHZhbHVlIGlzIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuICBBCisgKglmYWlsdXJlIGNhbiBoYXBwZW4gZWl0aGVyIGJlY2F1c2Ugd2UgYXJlIG5vdCBhYmxlIHRvIGV4ZWN1dGUgdGhlCisgKgljb21tYW5kIG9yIEZXIGV4ZWN1dGVzIGl0IGJ1dCBzaWduYWxzIGFuIGVycm9yLiAgSW4gdGhlIGxhdHRlciBjYXNlCisgKgl0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBlcnJvciBjb2RlIGluZGljYXRlZCBieSBGVyAobmVnYXRlZCkuCisgKi8KK2ludCB0NHZmX3dyX21ib3hfY29yZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgY29uc3Qgdm9pZCAqY21kLCBpbnQgc2l6ZSwKKwkJICAgICAgdm9pZCAqcnBsLCBib29sIHNsZWVwX29rKQoreworCXN0YXRpYyBpbnQgZGVsYXlbXSA9IHsKKwkJMSwgMSwgMywgNSwgMTAsIDEwLCAyMCwgNTAsIDEwMAorCX07CisKKwl1MzIgdjsKKwlpbnQgaSwgbXMsIGRlbGF5X2lkeDsKKwljb25zdCBfX2JlNjQgKnA7CisJdTMyIG1ib3hfZGF0YSA9IFQ0VkZfTUJEQVRBX0JBU0VfQUREUjsKKwl1MzIgbWJveF9jdGwgPSBUNFZGX0NJTV9CQVNFX0FERFIgKyBDSU1fVkZfRVhUX01BSUxCT1hfQ1RSTDsKKworCS8qCisJICogQ29tbWFuZHMgbXVzdCBiZSBtdWx0aXBsZXMgb2YgMTYgYnl0ZXMgaW4gbGVuZ3RoIGFuZCBtYXkgbm90IGJlCisJICogbGFyZ2VyIHRoYW4gdGhlIHNpemUgb2YgdGhlIE1haWxib3ggRGF0YSByZWdpc3RlciBhcnJheS4KKwkgKi8KKwlpZiAoKHNpemUgJSAxNikgIT0gMCB8fAorCSAgICBzaXplID4gTlVNX0NJTV9WRl9NQUlMQk9YX0RBVEFfSU5TVEFOQ0VTICogNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIExvb3AgdHJ5aW5nIHRvIGdldCBvd25lcnNoaXAgb2YgdGhlIG1haWxib3guICBSZXR1cm4gYW4gZXJyb3IKKwkgKiBpZiB3ZSBjYW4ndCBnYWluIG93bmVyc2hpcC4KKwkgKi8KKwl2ID0gTUJPV05FUl9HRVQodDRfcmVhZF9yZWcoYWRhcHRlciwgbWJveF9jdGwpKTsKKwlmb3IgKGkgPSAwOyB2ID09IE1CT1hfT1dORVJfTk9ORSAmJiBpIDwgMzsgaSsrKQorCQl2ID0gTUJPV05FUl9HRVQodDRfcmVhZF9yZWcoYWRhcHRlciwgbWJveF9jdGwpKTsKKwlpZiAodiAhPSBNQk9YX09XTkVSX0RSVikKKwkJcmV0dXJuIHYgPT0gTUJPWF9PV05FUl9GVyA/IC1FQlVTWSA6IC1FVElNRURPVVQ7CisKKwkvKgorCSAqIFdyaXRlIHRoZSBjb21tYW5kIGFycmF5IGludG8gdGhlIE1haWxib3ggRGF0YSByZWdpc3RlciBhcnJheSBhbmQKKwkgKiB0cmFuc2ZlciBvd25lcnNoaXAgb2YgdGhlIG1haWxib3ggdG8gdGhlIGZpcm13YXJlLgorCSAqLworCWZvciAoaSA9IDAsIHAgPSBjbWQ7IGkgPCBzaXplOyBpICs9IDgpCisJCXQ0X3dyaXRlX3JlZzY0KGFkYXB0ZXIsIG1ib3hfZGF0YSArIGksIGJlNjRfdG9fY3B1KCpwKyspKTsKKwl0NF93cml0ZV9yZWcoYWRhcHRlciwgbWJveF9jdGwsCisJCSAgICAgTUJNU0dWQUxJRCB8IE1CT1dORVIoTUJPWF9PV05FUl9GVykpOworCXQ0X3JlYWRfcmVnKGFkYXB0ZXIsIG1ib3hfY3RsKTsgICAgICAgICAgLyogZmx1c2ggd3JpdGUgKi8KKworCS8qCisJICogU3BpbiB3YWl0aW5nIGZvciBmaXJtd2FyZSB0byBhY2tub3dsZWRnZSBwcm9jZXNzaW5nIG91ciBjb21tYW5kLgorCSAqLworCWRlbGF5X2lkeCA9IDA7CisJbXMgPSBkZWxheVswXTsKKworCWZvciAoaSA9IDA7IGkgPCA1MDA7IGkgKz0gbXMpIHsKKwkJaWYgKHNsZWVwX29rKSB7CisJCQltcyA9IGRlbGF5W2RlbGF5X2lkeF07CisJCQlpZiAoZGVsYXlfaWR4IDwgQVJSQVlfU0laRShkZWxheSkgLSAxKQorCQkJCWRlbGF5X2lkeCsrOworCQkJbXNsZWVwKG1zKTsKKwkJfSBlbHNlCisJCQltZGVsYXkobXMpOworCisJCS8qCisJCSAqIElmIHdlJ3JlIHRoZSBvd25lciwgc2VlIGlmIHRoaXMgaXMgdGhlIHJlcGx5IHdlIHdhbnRlZC4KKwkJICovCisJCXYgPSB0NF9yZWFkX3JlZyhhZGFwdGVyLCBtYm94X2N0bCk7CisJCWlmIChNQk9XTkVSX0dFVCh2KSA9PSBNQk9YX09XTkVSX0RSVikgeworCQkJLyoKKwkJCSAqIElmIHRoZSBNZXNzYWdlIFZhbGlkIGJpdCBpc24ndCBvbiwgcmV2b2tlIG93bmVyc2hpcAorCQkJICogb2YgdGhlIG1haWxib3ggYW5kIGNvbnRpbnVlIHdhaXRpbmcgZm9yIG91ciByZXBseS4KKwkJCSAqLworCQkJaWYgKCh2ICYgTUJNU0dWQUxJRCkgPT0gMCkgeworCQkJCXQ0X3dyaXRlX3JlZyhhZGFwdGVyLCBtYm94X2N0bCwKKwkJCQkJICAgICBNQk9XTkVSKE1CT1hfT1dORVJfTk9ORSkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKgorCQkJICogV2Ugbm93IGhhdmUgb3VyIHJlcGx5LiAgRXh0cmFjdCB0aGUgY29tbWFuZCByZXR1cm4KKwkJCSAqIHZhbHVlLCBjb3B5IHRoZSByZXBseSBiYWNrIHRvIG91ciBjYWxsZXIncyBidWZmZXIKKwkJCSAqIChpZiBzcGVjaWZpZWQpIGFuZCByZXZva2Ugb3duZXJzaGlwIG9mIHRoZSBtYWlsYm94LgorCQkJICogV2UgcmV0dXJuIHRoZSAobmVnYXRlZCkgZmlybXdhcmUgY29tbWFuZCByZXR1cm4KKwkJCSAqIGNvZGUgKHRoaXMgZGVwZW5kcyBvbiBGV19TVUNDRVNTID09IDApLgorCQkJICovCisKKwkJCS8qIHJldHVybiB2YWx1ZSBpbiBsb3ctb3JkZXIgbGl0dGxlLWVuZGlhbiB3b3JkICovCisJCQl2ID0gdDRfcmVhZF9yZWcoYWRhcHRlciwgbWJveF9kYXRhKTsKKwkJCWlmIChGV19DTURfUkVUVkFMX0dFVCh2KSkKKwkJCQlkdW1wX21ib3goYWRhcHRlciwgIkZXIEVycm9yIiwgbWJveF9kYXRhKTsKKworCQkJaWYgKHJwbCkgeworCQkJCS8qIHJlcXVlc3QgYml0IGluIGhpZ2gtb3JkZXIgQkUgd29yZCAqLworCQkJCVdBUk5fT04oKGJlMzJfdG9fY3B1KCooY29uc3QgdTMyICopY21kKQorCQkJCQkgJiBGV19DTURfUkVRVUVTVCkgPT0gMCk7CisJCQkJZ2V0X21ib3hfcnBsKGFkYXB0ZXIsIHJwbCwgc2l6ZSwgbWJveF9kYXRhKTsKKwkJCQlXQVJOX09OKChiZTMyX3RvX2NwdSgqKHUzMiAqKXJwbCkKKwkJCQkJICYgRldfQ01EX1JFUVVFU1QpICE9IDApOworCQkJfQorCQkJdDRfd3JpdGVfcmVnKGFkYXB0ZXIsIG1ib3hfY3RsLAorCQkJCSAgICAgTUJPV05FUihNQk9YX09XTkVSX05PTkUpKTsKKwkJCXJldHVybiAtRldfQ01EX1JFVFZBTF9HRVQodik7CisJCX0KKwl9CisKKwkvKgorCSAqIFdlIHRpbWVkIG91dC4gIFJldHVybiB0aGUgZXJyb3IgLi4uCisJICovCisJZHVtcF9tYm94KGFkYXB0ZXIsICJGVyBUaW1lb3V0IiwgbWJveF9kYXRhKTsKKwlyZXR1cm4gLUVUSU1FRE9VVDsKK30KKworLyoqCisgKgloYXNoX21hY19hZGRyIC0gcmV0dXJuIHRoZSBoYXNoIHZhbHVlIG9mIGEgTUFDIGFkZHJlc3MKKyAqCUBhZGRyOiB0aGUgNDgtYml0IEV0aGVybmV0IE1BQyBhZGRyZXNzCisgKgorICoJSGFzaGVzIGEgTUFDIGFkZHJlc3MgYWNjb3JkaW5nIHRvIHRoZSBoYXNoIGZ1bmN0aW9uIHVzZWQgYnkgaGFyZHdhcmUKKyAqCWluZXhhY3QgKGhhc2gpIGFkZHJlc3MgbWF0Y2hpbmcuCisgKi8KK3N0YXRpYyBpbnQgaGFzaF9tYWNfYWRkcihjb25zdCB1OCAqYWRkcikKK3sKKwl1MzIgYSA9ICgodTMyKWFkZHJbMF0gPDwgMTYpIHwgKCh1MzIpYWRkclsxXSA8PCA4KSB8IGFkZHJbMl07CisJdTMyIGIgPSAoKHUzMilhZGRyWzNdIDw8IDE2KSB8ICgodTMyKWFkZHJbNF0gPDwgOCkgfCBhZGRyWzVdOworCWEgXj0gYjsKKwlhIF49IChhID4+IDEyKTsKKwlhIF49IChhID4+IDYpOworCXJldHVybiBhICYgMHgzZjsKK30KKworLyoqCisgKglpbml0X2xpbmtfY29uZmlnIC0gaW5pdGlhbGl6ZSBhIGxpbmsncyBTVyBzdGF0ZQorICoJQGxjOiBzdHJ1Y3R1cmUgaG9sZGluZyB0aGUgbGluayBzdGF0ZQorICoJQGNhcHM6IGxpbmsgY2FwYWJpbGl0aWVzCisgKgorICoJSW5pdGlhbGl6ZXMgdGhlIFNXIHN0YXRlIG1haW50YWluZWQgZm9yIGVhY2ggbGluaywgaW5jbHVkaW5nIHRoZSBsaW5rJ3MKKyAqCWNhcGFiaWxpdGllcyBhbmQgZGVmYXVsdCBzcGVlZC9mbG93LWNvbnRyb2wvYXV0b25lZ290aWF0aW9uIHNldHRpbmdzLgorICovCitzdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9saW5rX2NvbmZpZyhzdHJ1Y3QgbGlua19jb25maWcgKmxjLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY2FwcykKK3sKKwlsYy0+c3VwcG9ydGVkID0gY2FwczsKKwlsYy0+cmVxdWVzdGVkX3NwZWVkID0gMDsKKwlsYy0+c3BlZWQgPSAwOworCWxjLT5yZXF1ZXN0ZWRfZmMgPSBsYy0+ZmMgPSBQQVVTRV9SWCB8IFBBVVNFX1RYOworCWlmIChsYy0+c3VwcG9ydGVkICYgU1VQUE9SVEVEX0F1dG9uZWcpIHsKKwkJbGMtPmFkdmVydGlzaW5nID0gbGMtPnN1cHBvcnRlZDsKKwkJbGMtPmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKKwkJbGMtPnJlcXVlc3RlZF9mYyB8PSBQQVVTRV9BVVRPTkVHOworCX0gZWxzZSB7CisJCWxjLT5hZHZlcnRpc2luZyA9IDA7CisJCWxjLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOworCX0KK30KKworLyoqCisgKgl0NHZmX3BvcnRfaW5pdCAtIGluaXRpYWxpemUgcG9ydCBoYXJkd2FyZS9zb2Z0d2FyZSBzdGF0ZQorICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCisgKglAcGlkeDogdGhlIGFkYXB0ZXIgcG9ydCBpbmRleAorICovCitpbnQgX19kZXZpbml0IHQ0dmZfcG9ydF9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgcGlkeCkKK3sKKwlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IGFkYXAycGluZm8oYWRhcHRlciwgcGlkeCk7CisJc3RydWN0IGZ3X3ZpX2NtZCB2aV9jbWQsIHZpX3JwbDsKKwlzdHJ1Y3QgZndfcG9ydF9jbWQgcG9ydF9jbWQsIHBvcnRfcnBsOworCWludCB2OworCXUzMiB3b3JkOworCisJLyoKKwkgKiBFeGVjdXRlIGEgVkkgUmVhZCBjb21tYW5kIHRvIGdldCBvdXIgVmlydHVhbCBJbnRlcmZhY2UgaW5mb3JtYXRpb24KKwkgKiBsaWtlIE1BQyBhZGRyZXNzLCBldGMuCisJICovCisJbWVtc2V0KCZ2aV9jbWQsIDAsIHNpemVvZih2aV9jbWQpKTsKKwl2aV9jbWQub3BfdG9fdmZuID0gY3B1X3RvX2JlMzIoRldfQ01EX09QKEZXX1ZJX0NNRCkgfAorCQkJCSAgICAgICBGV19DTURfUkVRVUVTVCB8CisJCQkJICAgICAgIEZXX0NNRF9SRUFEKTsKKwl2aV9jbWQuYWxsb2NfdG9fbGVuMTYgPSBjcHVfdG9fYmUzMihGV19MRU4xNih2aV9jbWQpKTsKKwl2aV9jbWQudHlwZV92aWlkID0gY3B1X3RvX2JlMTYoRldfVklfQ01EX1ZJSUQocGktPnZpaWQpKTsKKwl2ID0gdDR2Zl93cl9tYm94KGFkYXB0ZXIsICZ2aV9jbWQsIHNpemVvZih2aV9jbWQpLCAmdmlfcnBsKTsKKwlpZiAodikKKwkJcmV0dXJuIHY7CisKKwlCVUdfT04ocGktPnBvcnRfaWQgIT0gRldfVklfQ01EX1BPUlRJRF9HRVQodmlfcnBsLnBvcnRpZF9wa2QpKTsKKwlwaS0+cnNzX3NpemUgPSBGV19WSV9DTURfUlNTU0laRV9HRVQoYmUxNl90b19jcHUodmlfcnBsLnJzc3NpemVfcGtkKSk7CisJdDRfb3Nfc2V0X2h3X2FkZHIoYWRhcHRlciwgcGlkeCwgdmlfcnBsLm1hYyk7CisKKwkvKgorCSAqIElmIHdlIGRvbid0IGhhdmUgcmVhZCBhY2Nlc3MgdG8gb3VyIHBvcnQgaW5mb3JtYXRpb24sIHdlJ3JlIGRvbmUKKwkgKiBub3cuICBPdGhlcndpc2UsIGV4ZWN1dGUgYSBQT1JUIFJlYWQgY29tbWFuZCB0byBnZXQgaXQgLi4uCisJICovCisJaWYgKCEoYWRhcHRlci0+cGFyYW1zLnZmcmVzLnJfY2FwcyAmIEZXX0NNRF9DQVBfUE9SVCkpCisJCXJldHVybiAwOworCisJbWVtc2V0KCZwb3J0X2NtZCwgMCwgc2l6ZW9mKHBvcnRfY21kKSk7CisJcG9ydF9jbWQub3BfdG9fcG9ydGlkID0gY3B1X3RvX2JlMzIoRldfQ01EX09QKEZXX1BPUlRfQ01EKSB8CisJCQkJCSAgICBGV19DTURfUkVRVUVTVCB8CisJCQkJCSAgICBGV19DTURfUkVBRCB8CisJCQkJCSAgICBGV19QT1JUX0NNRF9QT1JUSUQocGktPnBvcnRfaWQpKTsKKwlwb3J0X2NtZC5hY3Rpb25fdG9fbGVuMTYgPQorCQljcHVfdG9fYmUzMihGV19QT1JUX0NNRF9BQ1RJT04oRldfUE9SVF9BQ1RJT05fR0VUX1BPUlRfSU5GTykgfAorCQkJICAgIEZXX0xFTjE2KHBvcnRfY21kKSk7CisJdiA9IHQ0dmZfd3JfbWJveChhZGFwdGVyLCAmcG9ydF9jbWQsIHNpemVvZihwb3J0X2NtZCksICZwb3J0X3JwbCk7CisJaWYgKHYpCisJCXJldHVybiB2OworCisJdiA9IDA7CisJd29yZCA9IGJlMTZfdG9fY3B1KHBvcnRfcnBsLnUuaW5mby5wY2FwKTsKKwlpZiAod29yZCAmIEZXX1BPUlRfQ0FQX1NQRUVEXzEwME0pCisJCXYgfD0gU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGw7CisJaWYgKHdvcmQgJiBGV19QT1JUX0NBUF9TUEVFRF8xRykKKwkJdiB8PSBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGw7CisJaWYgKHdvcmQgJiBGV19QT1JUX0NBUF9TUEVFRF8xMEcpCisJCXYgfD0gU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbDsKKwlpZiAod29yZCAmIEZXX1BPUlRfQ0FQX0FORUcpCisJCXYgfD0gU1VQUE9SVEVEX0F1dG9uZWc7CisJaW5pdF9saW5rX2NvbmZpZygmcGktPmxpbmtfY2ZnLCB2KTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqCXQ0dmZfcXVlcnlfcGFyYW1zIC0gcXVlcnkgRlcgb3IgZGV2aWNlIHBhcmFtZXRlcnMKKyAqCUBhZGFwdGVyOiB0aGUgYWRhcHRlcgorICoJQG5wYXJhbXM6IHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycworICoJQHBhcmFtczogdGhlIHBhcmFtZXRlciBuYW1lcworICoJQHZhbHM6IHRoZSBwYXJhbWV0ZXIgdmFsdWVzCisgKgorICoJUmVhZHMgdGhlIHZhbHVlcyBvZiBmaXJtd2FyZSBvciBkZXZpY2UgcGFyYW1ldGVycy4gIFVwIHRvIDcgcGFyYW1ldGVycworICoJY2FuIGJlIHF1ZXJpZWQgYXQgb25jZS4KKyAqLworaW50IHQ0dmZfcXVlcnlfcGFyYW1zKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1bnNpZ25lZCBpbnQgbnBhcmFtcywKKwkJICAgICAgY29uc3QgdTMyICpwYXJhbXMsIHUzMiAqdmFscykKK3sKKwlpbnQgaSwgcmV0OworCXN0cnVjdCBmd19wYXJhbXNfY21kIGNtZCwgcnBsOworCXN0cnVjdCBmd19wYXJhbXNfcGFyYW0gKnA7CisJc2l6ZV90IGxlbjE2OworCisJaWYgKG5wYXJhbXMgPiA3KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLm9wX3RvX3ZmbiA9IGNwdV90b19iZTMyKEZXX0NNRF9PUChGV19QQVJBTVNfQ01EKSB8CisJCQkJICAgIEZXX0NNRF9SRVFVRVNUIHwKKwkJCQkgICAgRldfQ01EX1JFQUQpOworCWxlbjE2ID0gRElWX1JPVU5EX1VQKG9mZnNldG9mKHN0cnVjdCBmd19wYXJhbXNfY21kLAorCQkJCSAgICAgIHBhcmFtW25wYXJhbXNdLm1uZW0pLCAxNik7CisJY21kLnJldHZhbF9sZW4xNiA9IGNwdV90b19iZTMyKEZXX0NNRF9MRU4xNihsZW4xNikpOworCWZvciAoaSA9IDAsIHAgPSAmY21kLnBhcmFtWzBdOyBpIDwgbnBhcmFtczsgaSsrLCBwKyspCisJCXAtPm1uZW0gPSBodG9ubCgqcGFyYW1zKyspOworCisJcmV0ID0gdDR2Zl93cl9tYm94KGFkYXB0ZXIsICZjbWQsIHNpemVvZihjbWQpLCAmcnBsKTsKKwlpZiAocmV0ID09IDApCisJCWZvciAoaSA9IDAsIHAgPSAmcnBsLnBhcmFtWzBdOyBpIDwgbnBhcmFtczsgaSsrLCBwKyspCisJCQkqdmFscysrID0gYmUzMl90b19jcHUocC0+dmFsKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqCXQ0dmZfc2V0X3BhcmFtcyAtIHNldHMgRlcgb3IgZGV2aWNlIHBhcmFtZXRlcnMKKyAqCUBhZGFwdGVyOiB0aGUgYWRhcHRlcgorICoJQG5wYXJhbXM6IHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycworICoJQHBhcmFtczogdGhlIHBhcmFtZXRlciBuYW1lcworICoJQHZhbHM6IHRoZSBwYXJhbWV0ZXIgdmFsdWVzCisgKgorICoJU2V0cyB0aGUgdmFsdWVzIG9mIGZpcm13YXJlIG9yIGRldmljZSBwYXJhbWV0ZXJzLiAgVXAgdG8gNyBwYXJhbWV0ZXJzCisgKgljYW4gYmUgc3BlY2lmaWVkIGF0IG9uY2UuCisgKi8KK2ludCB0NHZmX3NldF9wYXJhbXMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHVuc2lnbmVkIGludCBucGFyYW1zLAorCQkgICAgY29uc3QgdTMyICpwYXJhbXMsIGNvbnN0IHUzMiAqdmFscykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZndfcGFyYW1zX2NtZCBjbWQ7CisJc3RydWN0IGZ3X3BhcmFtc19wYXJhbSAqcDsKKwlzaXplX3QgbGVuMTY7CisKKwlpZiAobnBhcmFtcyA+IDcpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQub3BfdG9fdmZuID0gY3B1X3RvX2JlMzIoRldfQ01EX09QKEZXX1BBUkFNU19DTUQpIHwKKwkJCQkgICAgRldfQ01EX1JFUVVFU1QgfAorCQkJCSAgICBGV19DTURfV1JJVEUpOworCWxlbjE2ID0gRElWX1JPVU5EX1VQKG9mZnNldG9mKHN0cnVjdCBmd19wYXJhbXNfY21kLAorCQkJCSAgICAgIHBhcmFtW25wYXJhbXNdKSwgMTYpOworCWNtZC5yZXR2YWxfbGVuMTYgPSBjcHVfdG9fYmUzMihGV19DTURfTEVOMTYobGVuMTYpKTsKKwlmb3IgKGkgPSAwLCBwID0gJmNtZC5wYXJhbVswXTsgaSA8IG5wYXJhbXM7IGkrKywgcCsrKSB7CisJCXAtPm1uZW0gPSBjcHVfdG9fYmUzMigqcGFyYW1zKyspOworCQlwLT52YWwgPSBjcHVfdG9fYmUzMigqdmFscysrKTsKKwl9CisKKwlyZXR1cm4gdDR2Zl93cl9tYm94KGFkYXB0ZXIsICZjbWQsIHNpemVvZihjbWQpLCBOVUxMKTsKK30KKworLyoqCisgKgl0NHZmX2dldF9zZ2VfcGFyYW1zIC0gcmV0cmlldmUgYWRhcHRlciBTY2F0dGVyIGdhdGhlciBFbmdpbmUgcGFyYW1ldGVycworICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCisgKgorICoJUmV0cmlldmVzIHZhcmlvdXMgY29yZSBTR0UgcGFyYW1ldGVycyBpbiB0aGUgZm9ybSBvZiBoYXJkd2FyZSBTR0UKKyAqCXJlZ2lzdGVyIHZhbHVlcy4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGRlY29kaW5nIHRoZXNlIGFzCisgKgluZWVkZWQuICBUaGUgU0dFIHBhcmFtZXRlcnMgYXJlIHN0b3JlZCBpbiBAYWRhcHRlci0+cGFyYW1zLnNnZS4KKyAqLworaW50IHQ0dmZfZ2V0X3NnZV9wYXJhbXMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNnZV9wYXJhbXMgKnNnZV9wYXJhbXMgPSAmYWRhcHRlci0+cGFyYW1zLnNnZTsKKwl1MzIgcGFyYW1zWzddLCB2YWxzWzddOworCWludCB2OworCisJcGFyYW1zWzBdID0gKEZXX1BBUkFNU19NTkVNKEZXX1BBUkFNU19NTkVNX1JFRykgfAorCQkgICAgIEZXX1BBUkFNU19QQVJBTV9YWVooU0dFX0NPTlRST0wpKTsKKwlwYXJhbXNbMV0gPSAoRldfUEFSQU1TX01ORU0oRldfUEFSQU1TX01ORU1fUkVHKSB8CisJCSAgICAgRldfUEFSQU1TX1BBUkFNX1hZWihTR0VfSE9TVF9QQUdFX1NJWkUpKTsKKwlwYXJhbXNbMl0gPSAoRldfUEFSQU1TX01ORU0oRldfUEFSQU1TX01ORU1fUkVHKSB8CisJCSAgICAgRldfUEFSQU1TX1BBUkFNX1hZWihTR0VfRkxfQlVGRkVSX1NJWkUwKSk7CisJcGFyYW1zWzNdID0gKEZXX1BBUkFNU19NTkVNKEZXX1BBUkFNU19NTkVNX1JFRykgfAorCQkgICAgIEZXX1BBUkFNU19QQVJBTV9YWVooU0dFX0ZMX0JVRkZFUl9TSVpFMSkpOworCXBhcmFtc1s0XSA9IChGV19QQVJBTVNfTU5FTShGV19QQVJBTVNfTU5FTV9SRUcpIHwKKwkJICAgICBGV19QQVJBTVNfUEFSQU1fWFlaKFNHRV9USU1FUl9WQUxVRV8wX0FORF8xKSk7CisJcGFyYW1zWzVdID0gKEZXX1BBUkFNU19NTkVNKEZXX1BBUkFNU19NTkVNX1JFRykgfAorCQkgICAgIEZXX1BBUkFNU19QQVJBTV9YWVooU0dFX1RJTUVSX1ZBTFVFXzJfQU5EXzMpKTsKKwlwYXJhbXNbNl0gPSAoRldfUEFSQU1TX01ORU0oRldfUEFSQU1TX01ORU1fUkVHKSB8CisJCSAgICAgRldfUEFSQU1TX1BBUkFNX1hZWihTR0VfVElNRVJfVkFMVUVfNF9BTkRfNSkpOworCXYgPSB0NHZmX3F1ZXJ5X3BhcmFtcyhhZGFwdGVyLCA3LCBwYXJhbXMsIHZhbHMpOworCWlmICh2KQorCQlyZXR1cm4gdjsKKwlzZ2VfcGFyYW1zLT5zZ2VfY29udHJvbCA9IHZhbHNbMF07CisJc2dlX3BhcmFtcy0+c2dlX2hvc3RfcGFnZV9zaXplID0gdmFsc1sxXTsKKwlzZ2VfcGFyYW1zLT5zZ2VfZmxfYnVmZmVyX3NpemVbMF0gPSB2YWxzWzJdOworCXNnZV9wYXJhbXMtPnNnZV9mbF9idWZmZXJfc2l6ZVsxXSA9IHZhbHNbM107CisJc2dlX3BhcmFtcy0+c2dlX3RpbWVyX3ZhbHVlXzBfYW5kXzEgPSB2YWxzWzRdOworCXNnZV9wYXJhbXMtPnNnZV90aW1lcl92YWx1ZV8yX2FuZF8zID0gdmFsc1s1XTsKKwlzZ2VfcGFyYW1zLT5zZ2VfdGltZXJfdmFsdWVfNF9hbmRfNSA9IHZhbHNbNl07CisKKwlwYXJhbXNbMF0gPSAoRldfUEFSQU1TX01ORU0oRldfUEFSQU1TX01ORU1fUkVHKSB8CisJCSAgICAgRldfUEFSQU1TX1BBUkFNX1hZWihTR0VfSU5HUkVTU19SWF9USFJFU0hPTEQpKTsKKwl2ID0gdDR2Zl9xdWVyeV9wYXJhbXMoYWRhcHRlciwgMSwgcGFyYW1zLCB2YWxzKTsKKwlpZiAodikKKwkJcmV0dXJuIHY7CisJc2dlX3BhcmFtcy0+c2dlX2luZ3Jlc3NfcnhfdGhyZXNob2xkID0gdmFsc1swXTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqCXQ0dmZfZ2V0X3ZwZF9wYXJhbXMgLSByZXRyaWV2ZSBkZXZpY2UgVlBEIHBhcmVtZXRlcnMKKyAqCUBhZGFwdGVyOiB0aGUgYWRhcHRlcgorICoKKyAqCVJldHJpdmVzIHZhcmlvdXMgZGV2aWNlIFZpdGFsIFByb2R1Y3QgRGF0YSBwYXJhbWV0ZXJzLiAgVGhlIHBhcmFtZXRlcnMKKyAqCWFyZSBzdG9yZWQgaW4gQGFkYXB0ZXItPnBhcmFtcy52cGQuCisgKi8KK2ludCB0NHZmX2dldF92cGRfcGFyYW1zKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCB2cGRfcGFyYW1zICp2cGRfcGFyYW1zID0gJmFkYXB0ZXItPnBhcmFtcy52cGQ7CisJdTMyIHBhcmFtc1s3XSwgdmFsc1s3XTsKKwlpbnQgdjsKKworCXBhcmFtc1swXSA9IChGV19QQVJBTVNfTU5FTShGV19QQVJBTVNfTU5FTV9ERVYpIHwKKwkJICAgICBGV19QQVJBTVNfUEFSQU1fWChGV19QQVJBTVNfUEFSQU1fREVWX0NDTEspKTsKKwl2ID0gdDR2Zl9xdWVyeV9wYXJhbXMoYWRhcHRlciwgMSwgcGFyYW1zLCB2YWxzKTsKKwlpZiAodikKKwkJcmV0dXJuIHY7CisJdnBkX3BhcmFtcy0+Y2NsayA9IHZhbHNbMF07CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKgl0NHZmX2dldF9kZXZfcGFyYW1zIC0gcmV0cmlldmUgZGV2aWNlIHBhcmVtZXRlcnMKKyAqCUBhZGFwdGVyOiB0aGUgYWRhcHRlcgorICoKKyAqCVJldHJpdmVzIHZhcmlvdXMgZGV2aWNlIHBhcmFtZXRlcnMuICBUaGUgcGFyYW1ldGVycyBhcmUgc3RvcmVkIGluCisgKglAYWRhcHRlci0+cGFyYW1zLmRldi4KKyAqLworaW50IHQ0dmZfZ2V0X2Rldl9wYXJhbXMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGRldl9wYXJhbXMgKmRldl9wYXJhbXMgPSAmYWRhcHRlci0+cGFyYW1zLmRldjsKKwl1MzIgcGFyYW1zWzddLCB2YWxzWzddOworCWludCB2OworCisJcGFyYW1zWzBdID0gKEZXX1BBUkFNU19NTkVNKEZXX1BBUkFNU19NTkVNX0RFVikgfAorCQkgICAgIEZXX1BBUkFNU19QQVJBTV9YKEZXX1BBUkFNU19QQVJBTV9ERVZfRldSRVYpKTsKKwlwYXJhbXNbMV0gPSAoRldfUEFSQU1TX01ORU0oRldfUEFSQU1TX01ORU1fREVWKSB8CisJCSAgICAgRldfUEFSQU1TX1BBUkFNX1goRldfUEFSQU1TX1BBUkFNX0RFVl9UUFJFVikpOworCXYgPSB0NHZmX3F1ZXJ5X3BhcmFtcyhhZGFwdGVyLCAyLCBwYXJhbXMsIHZhbHMpOworCWlmICh2KQorCQlyZXR1cm4gdjsKKwlkZXZfcGFyYW1zLT5md3JldiA9IHZhbHNbMF07CisJZGV2X3BhcmFtcy0+dHByZXYgPSB2YWxzWzFdOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJdDR2Zl9nZXRfcnNzX2dsYl9jb25maWcgLSByZXRyaWV2ZSBhZGFwdGVyIFJTUyBHbG9iYWwgQ29uZmlndXJhdGlvbgorICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCisgKgorICoJUmV0cmlldmVzIGdsb2JhbCBSU1MgbW9kZSBhbmQgcGFyYW1ldGVycyB3aXRoIHdoaWNoIHdlIGhhdmUgdG8gbGl2ZQorICoJYW5kIHN0b3JlcyB0aGVtIGluIHRoZSBAYWRhcHRlcidzIFJTUyBwYXJhbWV0ZXJzLgorICovCitpbnQgdDR2Zl9nZXRfcnNzX2dsYl9jb25maWcoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHJzc19wYXJhbXMgKnJzcyA9ICZhZGFwdGVyLT5wYXJhbXMucnNzOworCXN0cnVjdCBmd19yc3NfZ2xiX2NvbmZpZ19jbWQgY21kLCBycGw7CisJaW50IHY7CisKKwkvKgorCSAqIEV4ZWN1dGUgYW4gUlNTIEdsb2JhbCBDb25maWd1cmF0aW9uIHJlYWQgY29tbWFuZCB0byByZXRyaWV2ZQorCSAqIG91ciBSU1MgY29uZmlndXJhdGlvbi4KKwkgKi8KKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCWNtZC5vcF90b193cml0ZSA9IGNwdV90b19iZTMyKEZXX0NNRF9PUChGV19SU1NfR0xCX0NPTkZJR19DTUQpIHwKKwkJCQkgICAgICBGV19DTURfUkVRVUVTVCB8CisJCQkJICAgICAgRldfQ01EX1JFQUQpOworCWNtZC5yZXR2YWxfbGVuMTYgPSBjcHVfdG9fYmUzMihGV19MRU4xNihjbWQpKTsKKwl2ID0gdDR2Zl93cl9tYm94KGFkYXB0ZXIsICZjbWQsIHNpemVvZihjbWQpLCAmcnBsKTsKKwlpZiAodikKKwkJcmV0dXJuIHY7CisKKwkvKgorCSAqIFRyYW5zYXRlIHRoZSBiaWctZW5kaWFuIFJTUyBHbG9iYWwgQ29uZmlndXJhdGlvbiBpbnRvIG91cgorCSAqIGNwdS1lbmRpYW4gZm9ybWF0IGJhc2VkIG9uIHRoZSBSU1MgbW9kZS4gIFdlIGFsc28gZG8gZmlyc3QgbGV2ZWwKKwkgKiBmaWx0ZXJpbmcgYXQgdGhpcyBwb2ludCB0byB3ZWVkIG91dCBtb2RlcyB3aGljaCBkb24ndCBzdXBwb3J0CisJICogVkYgRHJpdmVycyAuLi4KKwkgKi8KKwlyc3MtPm1vZGUgPSBGV19SU1NfR0xCX0NPTkZJR19DTURfTU9ERV9HRVQoCisJCQliZTMyX3RvX2NwdShycGwudS5tYW51YWwubW9kZV9wa2QpKTsKKwlzd2l0Y2ggKHJzcy0+bW9kZSkgeworCWNhc2UgRldfUlNTX0dMQl9DT05GSUdfQ01EX01PREVfQkFTSUNWSVJUVUFMOiB7CisJCXUzMiB3b3JkID0gYmUzMl90b19jcHUoCisJCQkJcnBsLnUuYmFzaWN2aXJ0dWFsLnN5bm1hcGVuX3RvX2hhc2h0b2VwbGl0eik7CisKKwkJcnNzLT51LmJhc2ljdmlydHVhbC5zeW5tYXBlbiA9CisJCQkoKHdvcmQgJiBGV19SU1NfR0xCX0NPTkZJR19DTURfU1lOTUFQRU4pICE9IDApOworCQlyc3MtPnUuYmFzaWN2aXJ0dWFsLnN5bjR0dXBlbmlwdjYgPQorCQkJKCh3b3JkICYgRldfUlNTX0dMQl9DT05GSUdfQ01EX1NZTjRUVVBFTklQVjYpICE9IDApOworCQlyc3MtPnUuYmFzaWN2aXJ0dWFsLnN5bjJ0dXBlbmlwdjYgPQorCQkJKCh3b3JkICYgRldfUlNTX0dMQl9DT05GSUdfQ01EX1NZTjJUVVBFTklQVjYpICE9IDApOworCQlyc3MtPnUuYmFzaWN2aXJ0dWFsLnN5bjR0dXBlbmlwdjQgPQorCQkJKCh3b3JkICYgRldfUlNTX0dMQl9DT05GSUdfQ01EX1NZTjRUVVBFTklQVjQpICE9IDApOworCQlyc3MtPnUuYmFzaWN2aXJ0dWFsLnN5bjJ0dXBlbmlwdjQgPQorCQkJKCh3b3JkICYgRldfUlNTX0dMQl9DT05GSUdfQ01EX1NZTjJUVVBFTklQVjQpICE9IDApOworCisJCXJzcy0+dS5iYXNpY3ZpcnR1YWwub2ZkbWFwZW4gPQorCQkJKCh3b3JkICYgRldfUlNTX0dMQl9DT05GSUdfQ01EX09GRE1BUEVOKSAhPSAwKTsKKworCQlyc3MtPnUuYmFzaWN2aXJ0dWFsLnRubG1hcGVuID0KKwkJCSgod29yZCAmIEZXX1JTU19HTEJfQ09ORklHX0NNRF9UTkxNQVBFTikgIT0gMCk7CisJCXJzcy0+dS5iYXNpY3ZpcnR1YWwudG5sYWxsbG9va3VwID0KKwkJCSgod29yZCAgJiBGV19SU1NfR0xCX0NPTkZJR19DTURfVE5MQUxMTEtQKSAhPSAwKTsKKworCQlyc3MtPnUuYmFzaWN2aXJ0dWFsLmhhc2h0b2VwbGl0eiA9CisJCQkoKHdvcmQgJiBGV19SU1NfR0xCX0NPTkZJR19DTURfSEFTSFRPRVBMSVRaKSAhPSAwKTsKKworCQkvKiB3ZSBuZWVkIGF0IGxlYXN0IFR1bm5lbCBNYXAgRW5hYmxlIHRvIGJlIHNldCAqLworCQlpZiAoIXJzcy0+dS5iYXNpY3ZpcnR1YWwudG5sbWFwZW4pCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJZGVmYXVsdDoKKwkJLyogYWxsIHVua25vd24vdW5zdXBwb3J0ZWQgUlNTIG1vZGVzIHJlc3VsdCBpbiBhbiBlcnJvciAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKgl0NHZmX2dldF92ZnJlcyAtIHJldHJpZXZlIFZGIHJlc291cmNlIGxpbWl0cworICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCisgKgorICoJUmV0cmlldmVzIGNvbmZpZ3VyZWQgcmVzb3VyY2UgbGltaXRzIGFuZCBjYXBhYmlsaXRpZXMgZm9yIGEgdmlydHVhbAorICoJZnVuY3Rpb24uICBUaGUgcmVzdWx0cyBhcmUgc3RvcmVkIGluIEBhZGFwdGVyLT52ZnJlcy4KKyAqLworaW50IHQ0dmZfZ2V0X3ZmcmVzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCB2Zl9yZXNvdXJjZXMgKnZmcmVzID0gJmFkYXB0ZXItPnBhcmFtcy52ZnJlczsKKwlzdHJ1Y3QgZndfcGZ2Zl9jbWQgY21kLCBycGw7CisJaW50IHY7CisJdTMyIHdvcmQ7CisKKwkvKgorCSAqIEV4ZWN1dGUgUEZWRiBSZWFkIGNvbW1hbmQgdG8gZ2V0IFZGIHJlc291cmNlIGxpbWl0czsgYmFpbCBvdXQgZWFybHkKKwkgKiB3aXRoIGVycm9yIG9uIGNvbW1hbmQgZmFpbHVyZS4KKwkgKi8KKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCWNtZC5vcF90b192Zm4gPSBjcHVfdG9fYmUzMihGV19DTURfT1AoRldfUEZWRl9DTUQpIHwKKwkJCQkgICAgRldfQ01EX1JFUVVFU1QgfAorCQkJCSAgICBGV19DTURfUkVBRCk7CisJY21kLnJldHZhbF9sZW4xNiA9IGNwdV90b19iZTMyKEZXX0xFTjE2KGNtZCkpOworCXYgPSB0NHZmX3dyX21ib3goYWRhcHRlciwgJmNtZCwgc2l6ZW9mKGNtZCksICZycGwpOworCWlmICh2KQorCQlyZXR1cm4gdjsKKworCS8qCisJICogRXh0cmFjdCBWRiByZXNvdXJjZSBsaW1pdHMgYW5kIHJldHVybiBzdWNjZXNzLgorCSAqLworCXdvcmQgPSBiZTMyX3RvX2NwdShycGwubmlxZmxpbnRfbmlxKTsKKwl2ZnJlcy0+bmlxZmxpbnQgPSBGV19QRlZGX0NNRF9OSVFGTElOVF9HRVQod29yZCk7CisJdmZyZXMtPm5pcSA9IEZXX1BGVkZfQ01EX05JUV9HRVQod29yZCk7CisKKwl3b3JkID0gYmUzMl90b19jcHUocnBsLnR5cGVfdG9fbmVxKTsKKwl2ZnJlcy0+bmVxID0gRldfUEZWRl9DTURfTkVRX0dFVCh3b3JkKTsKKwl2ZnJlcy0+cG1hc2sgPSBGV19QRlZGX0NNRF9QTUFTS19HRVQod29yZCk7CisKKwl3b3JkID0gYmUzMl90b19jcHUocnBsLnRjX3RvX25leGFjdGYpOworCXZmcmVzLT50YyA9IEZXX1BGVkZfQ01EX1RDX0dFVCh3b3JkKTsKKwl2ZnJlcy0+bnZpID0gRldfUEZWRl9DTURfTlZJX0dFVCh3b3JkKTsKKwl2ZnJlcy0+bmV4YWN0ZiA9IEZXX1BGVkZfQ01EX05FWEFDVEZfR0VUKHdvcmQpOworCisJd29yZCA9IGJlMzJfdG9fY3B1KHJwbC5yX2NhcHNfdG9fbmV0aGN0cmwpOworCXZmcmVzLT5yX2NhcHMgPSBGV19QRlZGX0NNRF9SX0NBUFNfR0VUKHdvcmQpOworCXZmcmVzLT53eF9jYXBzID0gRldfUEZWRl9DTURfV1hfQ0FQU19HRVQod29yZCk7CisJdmZyZXMtPm5ldGhjdHJsID0gRldfUEZWRl9DTURfTkVUSENUUkxfR0VUKHdvcmQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJdDR2Zl9yZWFkX3Jzc192aV9jb25maWcgLSByZWFkIGEgVkkncyBSU1MgY29uZmlndXJhdGlvbgorICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCisgKglAdmlpZDogVmlydHVhbCBJbnRlcmZhY2UgSUQKKyAqCUBjb25maWc6IHBvaW50ZXIgdG8gaG9zdC1uYXRpdmUgVkkgUlNTIENvbmZpZ3VyYXRpb24gYnVmZmVyCisgKgorICoJUmVhZHMgdGhlIFZpcnR1YWwgSW50ZXJmYWNlJ3MgUlNTIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYW5kCisgKgl0cmFuc2xhdGVzIGl0IGludG8gQ1BVLW5hdGl2ZSBmb3JtYXQuCisgKi8KK2ludCB0NHZmX3JlYWRfcnNzX3ZpX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdW5zaWduZWQgaW50IHZpaWQsCisJCQkgICAgdW5pb24gcnNzX3ZpX2NvbmZpZyAqY29uZmlnKQoreworCXN0cnVjdCBmd19yc3NfdmlfY29uZmlnX2NtZCBjbWQsIHJwbDsKKwlpbnQgdjsKKworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLm9wX3RvX3ZpaWQgPSBjcHVfdG9fYmUzMihGV19DTURfT1AoRldfUlNTX1ZJX0NPTkZJR19DTUQpIHwKKwkJCQkgICAgIEZXX0NNRF9SRVFVRVNUIHwKKwkJCQkgICAgIEZXX0NNRF9SRUFEIHwKKwkJCQkgICAgIEZXX1JTU19WSV9DT05GSUdfQ01EX1ZJSUQodmlpZCkpOworCWNtZC5yZXR2YWxfbGVuMTYgPSBjcHVfdG9fYmUzMihGV19MRU4xNihjbWQpKTsKKwl2ID0gdDR2Zl93cl9tYm94KGFkYXB0ZXIsICZjbWQsIHNpemVvZihjbWQpLCAmcnBsKTsKKwlpZiAodikKKwkJcmV0dXJuIHY7CisKKwlzd2l0Y2ggKGFkYXB0ZXItPnBhcmFtcy5yc3MubW9kZSkgeworCWNhc2UgRldfUlNTX0dMQl9DT05GSUdfQ01EX01PREVfQkFTSUNWSVJUVUFMOiB7CisJCXUzMiB3b3JkID0gYmUzMl90b19jcHUocnBsLnUuYmFzaWN2aXJ0dWFsLmRlZmF1bHRxX3RvX3VkcGVuKTsKKworCQljb25maWctPmJhc2ljdmlydHVhbC5pcDZmb3VydHVwZW4gPQorCQkJKCh3b3JkICYgRldfUlNTX1ZJX0NPTkZJR19DTURfSVA2Rk9VUlRVUEVOKSAhPSAwKTsKKwkJY29uZmlnLT5iYXNpY3ZpcnR1YWwuaXA2dHdvdHVwZW4gPQorCQkJKCh3b3JkICYgRldfUlNTX1ZJX0NPTkZJR19DTURfSVA2VFdPVFVQRU4pICE9IDApOworCQljb25maWctPmJhc2ljdmlydHVhbC5pcDRmb3VydHVwZW4gPQorCQkJKCh3b3JkICYgRldfUlNTX1ZJX0NPTkZJR19DTURfSVA0Rk9VUlRVUEVOKSAhPSAwKTsKKwkJY29uZmlnLT5iYXNpY3ZpcnR1YWwuaXA0dHdvdHVwZW4gPQorCQkJKCh3b3JkICYgRldfUlNTX1ZJX0NPTkZJR19DTURfSVA0VFdPVFVQRU4pICE9IDApOworCQljb25maWctPmJhc2ljdmlydHVhbC51ZHBlbiA9CisJCQkoKHdvcmQgJiBGV19SU1NfVklfQ09ORklHX0NNRF9VRFBFTikgIT0gMCk7CisJCWNvbmZpZy0+YmFzaWN2aXJ0dWFsLmRlZmF1bHRxID0KKwkJCUZXX1JTU19WSV9DT05GSUdfQ01EX0RFRkFVTFRRX0dFVCh3b3JkKTsKKwkJYnJlYWs7CisJfQorCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJdDR2Zl93cml0ZV9yc3NfdmlfY29uZmlnIC0gd3JpdGUgYSBWSSdzIFJTUyBjb25maWd1cmF0aW9uCisgKglAYWRhcHRlcjogdGhlIGFkYXB0ZXIKKyAqCUB2aWlkOiBWaXJ0dWFsIEludGVyZmFjZSBJRAorICoJQGNvbmZpZzogcG9pbnRlciB0byBob3N0LW5hdGl2ZSBWSSBSU1MgQ29uZmlndXJhdGlvbiBidWZmZXIKKyAqCisgKglXcml0ZSB0aGUgVmlydHVhbCBJbnRlcmZhY2UncyBSU1MgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbgorICoJKHRyYW5zbGF0aW5nIGl0IGludG8gZmlybXdhcmUtbmF0aXZlIGZvcm1hdCBiZWZvcmUgd3JpdGluZykuCisgKi8KK2ludCB0NHZmX3dyaXRlX3Jzc192aV9jb25maWcoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHVuc2lnbmVkIGludCB2aWlkLAorCQkJICAgICB1bmlvbiByc3NfdmlfY29uZmlnICpjb25maWcpCit7CisJc3RydWN0IGZ3X3Jzc192aV9jb25maWdfY21kIGNtZCwgcnBsOworCisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQub3BfdG9fdmlpZCA9IGNwdV90b19iZTMyKEZXX0NNRF9PUChGV19SU1NfVklfQ09ORklHX0NNRCkgfAorCQkJCSAgICAgRldfQ01EX1JFUVVFU1QgfAorCQkJCSAgICAgRldfQ01EX1dSSVRFIHwKKwkJCQkgICAgIEZXX1JTU19WSV9DT05GSUdfQ01EX1ZJSUQodmlpZCkpOworCWNtZC5yZXR2YWxfbGVuMTYgPSBjcHVfdG9fYmUzMihGV19MRU4xNihjbWQpKTsKKwlzd2l0Y2ggKGFkYXB0ZXItPnBhcmFtcy5yc3MubW9kZSkgeworCWNhc2UgRldfUlNTX0dMQl9DT05GSUdfQ01EX01PREVfQkFTSUNWSVJUVUFMOiB7CisJCXUzMiB3b3JkID0gMDsKKworCQlpZiAoY29uZmlnLT5iYXNpY3ZpcnR1YWwuaXA2Zm91cnR1cGVuKQorCQkJd29yZCB8PSBGV19SU1NfVklfQ09ORklHX0NNRF9JUDZGT1VSVFVQRU47CisJCWlmIChjb25maWctPmJhc2ljdmlydHVhbC5pcDZ0d290dXBlbikKKwkJCXdvcmQgfD0gRldfUlNTX1ZJX0NPTkZJR19DTURfSVA2VFdPVFVQRU47CisJCWlmIChjb25maWctPmJhc2ljdmlydHVhbC5pcDRmb3VydHVwZW4pCisJCQl3b3JkIHw9IEZXX1JTU19WSV9DT05GSUdfQ01EX0lQNEZPVVJUVVBFTjsKKwkJaWYgKGNvbmZpZy0+YmFzaWN2aXJ0dWFsLmlwNHR3b3R1cGVuKQorCQkJd29yZCB8PSBGV19SU1NfVklfQ09ORklHX0NNRF9JUDRUV09UVVBFTjsKKwkJaWYgKGNvbmZpZy0+YmFzaWN2aXJ0dWFsLnVkcGVuKQorCQkJd29yZCB8PSBGV19SU1NfVklfQ09ORklHX0NNRF9VRFBFTjsKKwkJd29yZCB8PSBGV19SU1NfVklfQ09ORklHX0NNRF9ERUZBVUxUUSgKKwkJCQljb25maWctPmJhc2ljdmlydHVhbC5kZWZhdWx0cSk7CisJCWNtZC51LmJhc2ljdmlydHVhbC5kZWZhdWx0cV90b191ZHBlbiA9IGNwdV90b19iZTMyKHdvcmQpOworCQlicmVhazsKKwl9CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gdDR2Zl93cl9tYm94KGFkYXB0ZXIsICZjbWQsIHNpemVvZihjbWQpLCAmcnBsKTsKK30KKworLyoqCisgKgl0NHZmX2NvbmZpZ19yc3NfcmFuZ2UgLSBjb25maWd1cmUgYSBwb3J0aW9uIG9mIHRoZSBSU1MgbWFwcGluZyB0YWJsZQorICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCisgKglAdmlpZDogVmlydHVhbCBJbnRlcmZhY2Ugb2YgUlNTIFRhYmxlIFNsaWNlCisgKglAc3RhcnQ6IHN0YXJ0aW5nIGVudHJ5IGluIHRoZSB0YWJsZSB0byB3cml0ZQorICoJQG46IGhvdyBtYW55IHRhYmxlIGVudHJpZXMgdG8gd3JpdGUKKyAqCUByc3BxOiB2YWx1ZXMgZm9yIHRoZSAiUmVzcG9uc2UgUXVldWUiIChJbmdyZXNzIFF1ZXVlKSBsb29rdXAgdGFibGUKKyAqCUBucnNwcTogbnVtYmVyIG9mIHZhbHVlcyBpbiBAcnNwcQorICoKKyAqCVByb2dyYW1zIHRoZSBzZWxlY3RlZCBwYXJ0IG9mIHRoZSBWSSdzIFJTUyBtYXBwaW5nIHRhYmxlIHdpdGggdGhlCisgKglwcm92aWRlZCB2YWx1ZXMuICBJZiBAbnJzcHEgPCBAbiB0aGUgc3VwcGxpZWQgdmFsdWVzIGFyZSB1c2VkIHJlcGVhdGVkbHkKKyAqCXVudGlsIHRoZSBmdWxsIHRhYmxlIHJhbmdlIGlzIHBvcHVsYXRlZC4KKyAqCisgKglUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoZSB2YWx1ZXMgaW4gQHJzcHEgYXJlIGluIHRoZSByYW5nZSAwLi4xMDIzLgorICovCitpbnQgdDR2Zl9jb25maWdfcnNzX3JhbmdlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1bnNpZ25lZCBpbnQgdmlpZCwKKwkJCSAgaW50IHN0YXJ0LCBpbnQgbiwgY29uc3QgdTE2ICpyc3BxLCBpbnQgbnJzcHEpCit7CisJY29uc3QgdTE2ICpyc3AgPSByc3BxOworCWNvbnN0IHUxNiAqcnNwX2VuZCA9IHJzcHErbnJzcHE7CisJc3RydWN0IGZ3X3Jzc19pbmRfdGJsX2NtZCBjbWQ7CisKKwkvKgorCSAqIEluaXRpYWxpemUgZmlybXdhcmUgY29tbWFuZCB0ZW1wbGF0ZSB0byB3cml0ZSB0aGUgUlNTIHRhYmxlLgorCSAqLworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLm9wX3RvX3ZpaWQgPSBjcHVfdG9fYmUzMihGV19DTURfT1AoRldfUlNTX0lORF9UQkxfQ01EKSB8CisJCQkJICAgICBGV19DTURfUkVRVUVTVCB8CisJCQkJICAgICBGV19DTURfV1JJVEUgfAorCQkJCSAgICAgRldfUlNTX0lORF9UQkxfQ01EX1ZJSUQodmlpZCkpOworCWNtZC5yZXR2YWxfbGVuMTYgPSBjcHVfdG9fYmUzMihGV19MRU4xNihjbWQpKTsKKworCS8qCisJICogRWFjaCBmaXJtd2FyZSBSU1MgY29tbWFuZCBjYW4gYWNjb21tb2RhdGUgdXAgdG8gMzIgUlNTIEluZ3Jlc3MKKwkgKiBRdWV1ZSBJZGVudGlmaWVycy4gIFRoZXNlIEluZ3Jlc3MgUXVldWUgSURzIGFyZSBwYWNrZWQgdGhyZWUgdG8KKwkgKiBhIDMyLWJpdCB3b3JkIGFzIDEwLWJpdCB2YWx1ZXMgd2l0aCB0aGUgdXBwZXIgcmVtYWluaW5nIDIgYml0cworCSAqIHJlc2VydmVkLgorCSAqLworCXdoaWxlIChuID4gMCkgeworCQlfX2JlMzIgKnFwID0gJmNtZC5pcTBfdG9faXEyOworCQlpbnQgbnEgPSBtaW4obiwgMzIpOworCQlpbnQgcmV0OworCisJCS8qCisJCSAqIFNldCB1cCB0aGUgZmlybXdhcmUgUlNTIGNvbW1hbmQgaGVhZGVyIHRvIHNlbmQgdGhlIG5leHQKKwkJICogIm5xIiBJbmdyZXNzIFF1ZXVlIElEcyB0byB0aGUgZmlybXdhcmUuCisJCSAqLworCQljbWQubmlxaWQgPSBjcHVfdG9fYmUxNihucSk7CisJCWNtZC5zdGFydGlkeCA9IGNwdV90b19iZTE2KHN0YXJ0KTsKKworCQkvKgorCQkgKiAibnEiIG1vcmUgZG9uZSBmb3IgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGxvb3AuCisJCSAqLworCQlzdGFydCArPSBucTsKKwkJbiAtPSBucTsKKworCQkvKgorCQkgKiBXaGlsZSB0aGVyZSBhcmUgc3RpbGwgSW5ncmVzcyBRdWV1ZSBJRHMgdG8gc3R1ZmYgaW50byB0aGUKKwkJICogY3VycmVudCBmaXJtd2FyZSBSU1MgY29tbWFuZCwgcmV0cmlldmUgdGhlbSBmcm9tIHRoZQorCQkgKiBJbmdyZXNzIFF1ZXVlIElEIGFycmF5IGFuZCBpbnNlcnQgdGhlbSBpbnRvIHRoZSBjb21tYW5kLgorCQkgKi8KKwkJd2hpbGUgKG5xID4gMCkgeworCQkJLyoKKwkJCSAqIEdyYWIgdXAgdG8gdGhlIG5leHQgMyBJbmdyZXNzIFF1ZXVlIElEcyAod3JhcHBpbmcKKwkJCSAqIGFyb3VuZCB0aGUgSW5ncmVzcyBRdWV1ZSBJRCBhcnJheSBpZiBuZWNlc3NhcnkpIGFuZAorCQkJICogaW5zZXJ0IHRoZW0gaW50byB0aGUgZmlybXdhcmUgUlNTIGNvbW1hbmQgYXQgdGhlCisJCQkgKiBjdXJyZW50IDMtdHVwbGUgcG9zaXRpb24gd2l0aGluIHRoZSBjb21tYWQuCisJCQkgKi8KKwkJCXUxNiBxYnVmWzNdOworCQkJdTE2ICpxYnAgPSBxYnVmOworCQkJaW50IG5xYnVmID0gbWluKDMsIG5xKTsKKworCQkJbnEgLT0gbnFidWY7CisJCQlxYnVmWzBdID0gcWJ1ZlsxXSA9IHFidWZbMl0gPSAwOworCQkJd2hpbGUgKG5xYnVmKSB7CisJCQkJbnFidWYtLTsKKwkJCQkqcWJwKysgPSAqcnNwKys7CisJCQkJaWYgKHJzcCA+PSByc3BfZW5kKQorCQkJCQlyc3AgPSByc3BxOworCQkJfQorCQkJKnFwKysgPSBjcHVfdG9fYmUzMihGV19SU1NfSU5EX1RCTF9DTURfSVEwKHFidWZbMF0pIHwKKwkJCQkJICAgIEZXX1JTU19JTkRfVEJMX0NNRF9JUTEocWJ1ZlsxXSkgfAorCQkJCQkgICAgRldfUlNTX0lORF9UQkxfQ01EX0lRMihxYnVmWzJdKSk7CisJCX0KKworCQkvKgorCQkgKiBTZW5kIHRoaXMgcG9ydGlvbiBvZiB0aGUgUlJTIHRhYmxlIHVwZGF0ZSB0byB0aGUgZmlybXdhcmU7CisJCSAqIGJhaWwgb3V0IG9uIGFueSBlcnJvcnMuCisJCSAqLworCQlyZXQgPSB0NHZmX3dyX21ib3goYWRhcHRlciwgJmNtZCwgc2l6ZW9mKGNtZCksIE5VTEwpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJdDR2Zl9hbGxvY192aSAtIGFsbG9jYXRlIGEgdmlydHVhbCBpbnRlcmZhY2Ugb24gYSBwb3J0CisgKglAYWRhcHRlcjogdGhlIGFkYXB0ZXIKKyAqCUBwb3J0X2lkOiBwaHlzaWNhbCBwb3J0IGFzc29jaWF0ZWQgd2l0aCB0aGUgVkkKKyAqCisgKglBbGxvY2F0ZSBhIG5ldyBWaXJ0dWFsIEludGVyZmFjZSBhbmQgYmluZCBpdCB0byB0aGUgaW5kaWNhdGVkCisgKglwaHlzaWNhbCBwb3J0LiAgUmV0dXJuIHRoZSBuZXcgVmlydHVhbCBJbnRlcmZhY2UgSWRlbnRpZmllciBvbgorICoJc3VjY2Vzcywgb3IgYSBbbmVnYXRpdmVdIGVycm9yIG51bWJlciBvbiBmYWlsdXJlLgorICovCitpbnQgdDR2Zl9hbGxvY192aShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IHBvcnRfaWQpCit7CisJc3RydWN0IGZ3X3ZpX2NtZCBjbWQsIHJwbDsKKwlpbnQgdjsKKworCS8qCisJICogRXhlY3V0ZSBhIFZJIGNvbW1hbmQgdG8gYWxsb2NhdGUgVmlydHVhbCBJbnRlcmZhY2UgYW5kIHJldHVybiBpdHMKKwkgKiBWSUlELgorCSAqLworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLm9wX3RvX3ZmbiA9IGNwdV90b19iZTMyKEZXX0NNRF9PUChGV19WSV9DTUQpIHwKKwkJCQkgICAgRldfQ01EX1JFUVVFU1QgfAorCQkJCSAgICBGV19DTURfV1JJVEUgfAorCQkJCSAgICBGV19DTURfRVhFQyk7CisJY21kLmFsbG9jX3RvX2xlbjE2ID0gY3B1X3RvX2JlMzIoRldfTEVOMTYoY21kKSB8CisJCQkJCSBGV19WSV9DTURfQUxMT0MpOworCWNtZC5wb3J0aWRfcGtkID0gRldfVklfQ01EX1BPUlRJRChwb3J0X2lkKTsKKwl2ID0gdDR2Zl93cl9tYm94KGFkYXB0ZXIsICZjbWQsIHNpemVvZihjbWQpLCAmcnBsKTsKKwlpZiAodikKKwkJcmV0dXJuIHY7CisKKwlyZXR1cm4gRldfVklfQ01EX1ZJSURfR0VUKGJlMTZfdG9fY3B1KHJwbC50eXBlX3ZpaWQpKTsKK30KKworLyoqCisgKgl0NHZmX2ZyZWVfdmkgLS0gZnJlZSBhIHZpcnR1YWwgaW50ZXJmYWNlCisgKglAYWRhcHRlcjogdGhlIGFkYXB0ZXIKKyAqCUB2aWlkOiB0aGUgdmlydHVhbCBpbnRlcmZhY2UgaWRlbnRpZmllcgorICoKKyAqCUZyZWUgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBWaXJ0dWFsIEludGVyZmFjZS4gIFJldHVybiBhbiBlcnJvciBvbgorICoJZmFpbHVyZS4KKyAqLworaW50IHQ0dmZfZnJlZV92aShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IHZpaWQpCit7CisJc3RydWN0IGZ3X3ZpX2NtZCBjbWQ7CisKKwkvKgorCSAqIEV4ZWN1dGUgYSBWSSBjb21tYW5kIHRvIGZyZWUgdGhlIFZpcnR1YWwgSW50ZXJmYWNlLgorCSAqLworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLm9wX3RvX3ZmbiA9IGNwdV90b19iZTMyKEZXX0NNRF9PUChGV19WSV9DTUQpIHwKKwkJCQkgICAgRldfQ01EX1JFUVVFU1QgfAorCQkJCSAgICBGV19DTURfRVhFQyk7CisJY21kLmFsbG9jX3RvX2xlbjE2ID0gY3B1X3RvX2JlMzIoRldfTEVOMTYoY21kKSB8CisJCQkJCSBGV19WSV9DTURfRlJFRSk7CisJY21kLnR5cGVfdmlpZCA9IGNwdV90b19iZTE2KEZXX1ZJX0NNRF9WSUlEKHZpaWQpKTsKKwlyZXR1cm4gdDR2Zl93cl9tYm94KGFkYXB0ZXIsICZjbWQsIHNpemVvZihjbWQpLCBOVUxMKTsKK30KKworLyoqCisgKgl0NHZmX2VuYWJsZV92aSAtIGVuYWJsZS9kaXNhYmxlIGEgdmlydHVhbCBpbnRlcmZhY2UKKyAqCUBhZGFwdGVyOiB0aGUgYWRhcHRlcgorICoJQHZpaWQ6IHRoZSBWaXJ0dWFsIEludGVyZmFjZSBJRAorICoJQHJ4X2VuOiAxPWVuYWJsZSBSeCwgMD1kaXNhYmxlIFJ4CisgKglAdHhfZW46IDE9ZW5hYmxlIFR4LCAwPWRpc2FibGUgVHgKKyAqCisgKglFbmFibGVzL2Rpc2FibGVzIGEgdmlydHVhbCBpbnRlcmZhY2UuCisgKi8KK2ludCB0NHZmX2VuYWJsZV92aShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdW5zaWduZWQgaW50IHZpaWQsCisJCSAgIGJvb2wgcnhfZW4sIGJvb2wgdHhfZW4pCit7CisJc3RydWN0IGZ3X3ZpX2VuYWJsZV9jbWQgY21kOworCisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQub3BfdG9fdmlpZCA9IGNwdV90b19iZTMyKEZXX0NNRF9PUChGV19WSV9FTkFCTEVfQ01EKSB8CisJCQkJICAgICBGV19DTURfUkVRVUVTVCB8CisJCQkJICAgICBGV19DTURfRVhFQyB8CisJCQkJICAgICBGV19WSV9FTkFCTEVfQ01EX1ZJSUQodmlpZCkpOworCWNtZC5pZW5fdG9fbGVuMTYgPSBjcHVfdG9fYmUzMihGV19WSV9FTkFCTEVfQ01EX0lFTihyeF9lbikgfAorCQkJCSAgICAgICBGV19WSV9FTkFCTEVfQ01EX0VFTih0eF9lbikgfAorCQkJCSAgICAgICBGV19MRU4xNihjbWQpKTsKKwlyZXR1cm4gdDR2Zl93cl9tYm94KGFkYXB0ZXIsICZjbWQsIHNpemVvZihjbWQpLCBOVUxMKTsKK30KKworLyoqCisgKgl0NHZmX2lkZW50aWZ5X3BvcnQgLSBpZGVudGlmeSBhIFZJJ3MgcG9ydCBieSBibGlua2luZyBpdHMgTEVECisgKglAYWRhcHRlcjogdGhlIGFkYXB0ZXIKKyAqCUB2aWlkOiB0aGUgVmlydHVhbCBJbnRlcmZhY2UgSUQKKyAqCUBuYmxpbmtzOiBob3cgbWFueSB0aW1lcyB0byBibGluayBMRUQgYXQgMi41IEh6CisgKgorICoJSWRlbnRpZmllcyBhIFZJJ3MgcG9ydCBieSBibGlua2luZyBpdHMgTEVELgorICovCitpbnQgdDR2Zl9pZGVudGlmeV9wb3J0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1bnNpZ25lZCBpbnQgdmlpZCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBuYmxpbmtzKQoreworCXN0cnVjdCBmd192aV9lbmFibGVfY21kIGNtZDsKKworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLm9wX3RvX3ZpaWQgPSBjcHVfdG9fYmUzMihGV19DTURfT1AoRldfVklfRU5BQkxFX0NNRCkgfAorCQkJCSAgICAgRldfQ01EX1JFUVVFU1QgfAorCQkJCSAgICAgRldfQ01EX0VYRUMgfAorCQkJCSAgICAgRldfVklfRU5BQkxFX0NNRF9WSUlEKHZpaWQpKTsKKwljbWQuaWVuX3RvX2xlbjE2ID0gY3B1X3RvX2JlMzIoRldfVklfRU5BQkxFX0NNRF9MRUQgfAorCQkJCSAgICAgICBGV19MRU4xNihjbWQpKTsKKwljbWQuYmxpbmtkdXIgPSBjcHVfdG9fYmUxNihuYmxpbmtzKTsKKwlyZXR1cm4gdDR2Zl93cl9tYm94KGFkYXB0ZXIsICZjbWQsIHNpemVvZihjbWQpLCBOVUxMKTsKK30KKworLyoqCisgKgl0NHZmX3NldF9yeG1vZGUgLSBzZXQgUnggcHJvcGVydGllcyBvZiBhIHZpcnR1YWwgaW50ZXJmYWNlCisgKglAYWRhcHRlcjogdGhlIGFkYXB0ZXIKKyAqCUB2aWlkOiB0aGUgVkkgaWQKKyAqCUBtdHU6IHRoZSBuZXcgTVRVIG9yIC0xIGZvciBubyBjaGFuZ2UKKyAqCUBwcm9taXNjOiAxIHRvIGVuYWJsZSBwcm9taXNjdW91cyBtb2RlLCAwIHRvIGRpc2FibGUgaXQsIC0xIG5vIGNoYW5nZQorICoJQGFsbF9tdWx0aTogMSB0byBlbmFibGUgYWxsLW11bHRpIG1vZGUsIDAgdG8gZGlzYWJsZSBpdCwgLTEgbm8gY2hhbmdlCisgKglAYmNhc3Q6IDEgdG8gZW5hYmxlIGJyb2FkY2FzdCBSeCwgMCB0byBkaXNhYmxlIGl0LCAtMSBubyBjaGFuZ2UKKyAqCUB2bGFuZXg6IDEgdG8gZW5hYmxlIGhhcmR3YXJlIFZMQU4gVGFnIGV4dHJhY3Rpb24sIDAgdG8gZGlzYWJsZSBpdCwKKyAqCQktMSBubyBjaGFuZ2UKKyAqCisgKglTZXRzIFJ4IHByb3BlcnRpZXMgb2YgYSB2aXJ0dWFsIGludGVyZmFjZS4KKyAqLworaW50IHQ0dmZfc2V0X3J4bW9kZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdW5zaWduZWQgaW50IHZpaWQsCisJCSAgICBpbnQgbXR1LCBpbnQgcHJvbWlzYywgaW50IGFsbF9tdWx0aSwgaW50IGJjYXN0LCBpbnQgdmxhbmV4LAorCQkgICAgYm9vbCBzbGVlcF9vaykKK3sKKwlzdHJ1Y3QgZndfdmlfcnhtb2RlX2NtZCBjbWQ7CisKKwkvKiBjb252ZXJ0IHRvIEZXIHZhbHVlcyAqLworCWlmIChtdHUgPCAwKQorCQltdHUgPSBGV19WSV9SWE1PREVfQ01EX01UVV9NQVNLOworCWlmIChwcm9taXNjIDwgMCkKKwkJcHJvbWlzYyA9IEZXX1ZJX1JYTU9ERV9DTURfUFJPTUlTQ0VOX01BU0s7CisJaWYgKGFsbF9tdWx0aSA8IDApCisJCWFsbF9tdWx0aSA9IEZXX1ZJX1JYTU9ERV9DTURfQUxMTVVMVElFTl9NQVNLOworCWlmIChiY2FzdCA8IDApCisJCWJjYXN0ID0gRldfVklfUlhNT0RFX0NNRF9CUk9BRENBU1RFTl9NQVNLOworCWlmICh2bGFuZXggPCAwKQorCQl2bGFuZXggPSBGV19WSV9SWE1PREVfQ01EX1ZMQU5FWEVOX01BU0s7CisKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCWNtZC5vcF90b192aWlkID0gY3B1X3RvX2JlMzIoRldfQ01EX09QKEZXX1ZJX1JYTU9ERV9DTUQpIHwKKwkJCQkgICAgIEZXX0NNRF9SRVFVRVNUIHwKKwkJCQkgICAgIEZXX0NNRF9XUklURSB8CisJCQkJICAgICBGV19WSV9SWE1PREVfQ01EX1ZJSUQodmlpZCkpOworCWNtZC5yZXR2YWxfbGVuMTYgPSBjcHVfdG9fYmUzMihGV19MRU4xNihjbWQpKTsKKwljbWQubXR1X3RvX3ZsYW5leGVuID0KKwkJY3B1X3RvX2JlMzIoRldfVklfUlhNT0RFX0NNRF9NVFUobXR1KSB8CisJCQkgICAgRldfVklfUlhNT0RFX0NNRF9QUk9NSVNDRU4ocHJvbWlzYykgfAorCQkJICAgIEZXX1ZJX1JYTU9ERV9DTURfQUxMTVVMVElFTihhbGxfbXVsdGkpIHwKKwkJCSAgICBGV19WSV9SWE1PREVfQ01EX0JST0FEQ0FTVEVOKGJjYXN0KSB8CisJCQkgICAgRldfVklfUlhNT0RFX0NNRF9WTEFORVhFTih2bGFuZXgpKTsKKwlyZXR1cm4gdDR2Zl93cl9tYm94X2NvcmUoYWRhcHRlciwgJmNtZCwgc2l6ZW9mKGNtZCksIE5VTEwsIHNsZWVwX29rKTsKK30KKworLyoqCisgKgl0NHZmX2FsbG9jX21hY19maWx0IC0gYWxsb2NhdGVzIGV4YWN0LW1hdGNoIGZpbHRlcnMgZm9yIE1BQyBhZGRyZXNzZXMKKyAqCUBhZGFwdGVyOiB0aGUgYWRhcHRlcgorICoJQHZpaWQ6IHRoZSBWaXJ0dWFsIEludGVyZmFjZSBJZGVudGlmaWVyCisgKglAZnJlZTogaWYgdHJ1ZSBhbnkgZXhpc3RpbmcgZmlsdGVycyBmb3IgdGhpcyBWSSBpZCBhcmUgZmlyc3QgcmVtb3ZlZAorICoJQG5hZGRyOiB0aGUgbnVtYmVyIG9mIE1BQyBhZGRyZXNzZXMgdG8gYWxsb2NhdGUgZmlsdGVycyBmb3IgKHVwIHRvIDcpCisgKglAYWRkcjogdGhlIE1BQyBhZGRyZXNzKGVzKQorICoJQGlkeDogd2hlcmUgdG8gc3RvcmUgdGhlIGluZGV4IG9mIGVhY2ggYWxsb2NhdGVkIGZpbHRlcgorICoJQGhhc2g6IHBvaW50ZXIgdG8gaGFzaCBhZGRyZXNzIGZpbHRlciBiaXRtYXAKKyAqCUBzbGVlcF9vazogY2FsbCBpcyBhbGxvd2VkIHRvIHNsZWVwCisgKgorICoJQWxsb2NhdGVzIGFuIGV4YWN0LW1hdGNoIGZpbHRlciBmb3IgZWFjaCBvZiB0aGUgc3VwcGxpZWQgYWRkcmVzc2VzIGFuZAorICoJc2V0cyBpdCB0byB0aGUgY29ycmVzcG9uZGluZyBhZGRyZXNzLiAgSWYgQGlkeCBpcyBub3QgJU5VTEwgaXQgc2hvdWxkCisgKgloYXZlIGF0IGxlYXN0IEBuYWRkciBlbnRyaWVzLCBlYWNoIG9mIHdoaWNoIHdpbGwgYmUgc2V0IHRvIHRoZSBpbmRleCBvZgorICoJdGhlIGZpbHRlciBhbGxvY2F0ZWQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIE1BQyBhZGRyZXNzLiAgSWYgYSBmaWx0ZXIKKyAqCWNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQgZm9yIGFuIGFkZHJlc3MgaXRzIGluZGV4IGlzIHNldCB0byAweGZmZmYuCisgKglJZiBAaGFzaCBpcyBub3QgJU5VTEwgYWRkcmVzc2VzIHRoYXQgZmFpbCB0byBhbGxvY2F0ZSBhbiBleGFjdCBmaWx0ZXIKKyAqCWFyZSBoYXNoZWQgYW5kIHVwZGF0ZSB0aGUgaGFzaCBmaWx0ZXIgYml0bWFwIHBvaW50ZWQgYXQgYnkgQGhhc2guCisgKgorICoJUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIG51bWJlciBvciB0aGUgbnVtYmVyIG9mIGZpbHRlcnMgYWxsb2NhdGVkLgorICovCitpbnQgdDR2Zl9hbGxvY19tYWNfZmlsdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdW5zaWduZWQgaW50IHZpaWQsIGJvb2wgZnJlZSwKKwkJCXVuc2lnbmVkIGludCBuYWRkciwgY29uc3QgdTggKiphZGRyLCB1MTYgKmlkeCwKKwkJCXU2NCAqaGFzaCwgYm9vbCBzbGVlcF9vaykKK3sKKwlpbnQgaSwgcmV0OworCXN0cnVjdCBmd192aV9tYWNfY21kIGNtZCwgcnBsOworCXN0cnVjdCBmd192aV9tYWNfZXhhY3QgKnA7CisJc2l6ZV90IGxlbjE2OworCisJaWYgKG5hZGRyID4gQVJSQVlfU0laRShjbWQudS5leGFjdCkpCisJCXJldHVybiAtRUlOVkFMOworCWxlbjE2ID0gRElWX1JPVU5EX1VQKG9mZnNldG9mKHN0cnVjdCBmd192aV9tYWNfY21kLAorCQkJCSAgICAgIHUuZXhhY3RbbmFkZHJdKSwgMTYpOworCisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQub3BfdG9fdmlpZCA9IGNwdV90b19iZTMyKEZXX0NNRF9PUChGV19WSV9NQUNfQ01EKSB8CisJCQkJICAgICBGV19DTURfUkVRVUVTVCB8CisJCQkJICAgICBGV19DTURfV1JJVEUgfAorCQkJCSAgICAgKGZyZWUgPyBGV19DTURfRVhFQyA6IDApIHwKKwkJCQkgICAgIEZXX1ZJX01BQ19DTURfVklJRCh2aWlkKSk7CisJY21kLmZyZWVtYWNzX3RvX2xlbjE2ID0gY3B1X3RvX2JlMzIoRldfVklfTUFDX0NNRF9GUkVFTUFDUyhmcmVlKSB8CisJCQkJCSAgICBGV19DTURfTEVOMTYobGVuMTYpKTsKKworCWZvciAoaSA9IDAsIHAgPSBjbWQudS5leGFjdDsgaSA8IG5hZGRyOyBpKyssIHArKykgeworCQlwLT52YWxpZF90b19pZHggPQorCQkJY3B1X3RvX2JlMTYoRldfVklfTUFDX0NNRF9WQUxJRCB8CisJCQkJICAgIEZXX1ZJX01BQ19DTURfSURYKEZXX1ZJX01BQ19BRERfTUFDKSk7CisJCW1lbWNweShwLT5tYWNhZGRyLCBhZGRyW2ldLCBzaXplb2YocC0+bWFjYWRkcikpOworCX0KKworCXJldCA9IHQ0dmZfd3JfbWJveF9jb3JlKGFkYXB0ZXIsICZjbWQsIHNpemVvZihjbWQpLCAmcnBsLCBzbGVlcF9vayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoaSA9IDAsIHAgPSBycGwudS5leGFjdDsgaSA8IG5hZGRyOyBpKyssIHArKykgeworCQl1MTYgaW5kZXggPSBGV19WSV9NQUNfQ01EX0lEWF9HRVQoYmUxNl90b19jcHUocC0+dmFsaWRfdG9faWR4KSk7CisKKwkJaWYgKGlkeCkKKwkJCWlkeFtpXSA9IChpbmRleCA+PSBGV19DTFNfVENBTV9OVU1fRU5UUklFUworCQkJCSAgPyAweGZmZmYKKwkJCQkgIDogaW5kZXgpOworCQlpZiAoaW5kZXggPCBGV19DTFNfVENBTV9OVU1fRU5UUklFUykKKwkJCXJldCsrOworCQllbHNlIGlmIChoYXNoKQorCQkJKmhhc2ggfD0gKDEgPDwgaGFzaF9tYWNfYWRkcihhZGRyW2ldKSk7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICoJdDR2Zl9jaGFuZ2VfbWFjIC0gbW9kaWZpZXMgdGhlIGV4YWN0LW1hdGNoIGZpbHRlciBmb3IgYSBNQUMgYWRkcmVzcworICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCisgKglAdmlpZDogdGhlIFZpcnR1YWwgSW50ZXJmYWNlIElECisgKglAaWR4OiBpbmRleCBvZiBleGlzdGluZyBmaWx0ZXIgZm9yIG9sZCB2YWx1ZSBvZiBNQUMgYWRkcmVzcywgb3IgLTEKKyAqCUBhZGRyOiB0aGUgbmV3IE1BQyBhZGRyZXNzIHZhbHVlCisgKglAcGVyc2lzdDogaWYgaWR4IDwgMCwgdGhlIG5ldyBNQUMgYWxsb2NhdGlvbiBzaG91bGQgYmUgcGVyc2lzdGVudAorICoKKyAqCU1vZGlmaWVzIGFuIGV4YWN0LW1hdGNoIGZpbHRlciBhbmQgc2V0cyBpdCB0byB0aGUgbmV3IE1BQyBhZGRyZXNzLgorICoJTm90ZSB0aGF0IGluIGdlbmVyYWwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIG1vZGlmeSB0aGUgdmFsdWUgb2YgYSBnaXZlbgorICoJZmlsdGVyIHNvIHRoZSBnZW5lcmljIHdheSB0byBtb2RpZnkgYW4gYWRkcmVzcyBmaWx0ZXIgaXMgdG8gZnJlZSB0aGUKKyAqCW9uZSBiZWluZyB1c2VkIGJ5IHRoZSBvbGQgYWRkcmVzcyB2YWx1ZSBhbmQgYWxsb2NhdGUgYSBuZXcgZmlsdGVyIGZvcgorICoJdGhlIG5ldyBhZGRyZXNzIHZhbHVlLiAgQGlkeCBjYW4gYmUgLTEgaWYgdGhlIGFkZHJlc3MgaXMgYSBuZXcKKyAqCWFkZGl0aW9uLgorICoKKyAqCVJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIgb3IgdGhlIGluZGV4IG9mIHRoZSBmaWx0ZXIgd2l0aCB0aGUgbmV3CisgKglNQUMgdmFsdWUuCisgKi8KK2ludCB0NHZmX2NoYW5nZV9tYWMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHVuc2lnbmVkIGludCB2aWlkLAorCQkgICAgaW50IGlkeCwgY29uc3QgdTggKmFkZHIsIGJvb2wgcGVyc2lzdCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBmd192aV9tYWNfY21kIGNtZCwgcnBsOworCXN0cnVjdCBmd192aV9tYWNfZXhhY3QgKnAgPSAmY21kLnUuZXhhY3RbMF07CisJc2l6ZV90IGxlbjE2ID0gRElWX1JPVU5EX1VQKG9mZnNldG9mKHN0cnVjdCBmd192aV9tYWNfY21kLAorCQkJCQkgICAgIHUuZXhhY3RbMV0pLCAxNik7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYSBuZXcgYWxsb2NhdGlvbiwgZGV0ZXJtaW5lIHdoZXRoZXIgaXQgc2hvdWxkIGJlCisJICogcGVyc2lzdGVudCAoYWNyb3NzIGEgImZyZWVtYWNzIiBvcGVyYXRpb24pIG9yIG5vdC4KKwkgKi8KKwlpZiAoaWR4IDwgMCkKKwkJaWR4ID0gcGVyc2lzdCA/IEZXX1ZJX01BQ19BRERfUEVSU0lTVF9NQUMgOiBGV19WSV9NQUNfQUREX01BQzsKKworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLm9wX3RvX3ZpaWQgPSBjcHVfdG9fYmUzMihGV19DTURfT1AoRldfVklfTUFDX0NNRCkgfAorCQkJCSAgICAgRldfQ01EX1JFUVVFU1QgfAorCQkJCSAgICAgRldfQ01EX1dSSVRFIHwKKwkJCQkgICAgIEZXX1ZJX01BQ19DTURfVklJRCh2aWlkKSk7CisJY21kLmZyZWVtYWNzX3RvX2xlbjE2ID0gY3B1X3RvX2JlMzIoRldfQ01EX0xFTjE2KGxlbjE2KSk7CisJcC0+dmFsaWRfdG9faWR4ID0gY3B1X3RvX2JlMTYoRldfVklfTUFDX0NNRF9WQUxJRCB8CisJCQkJICAgICAgRldfVklfTUFDX0NNRF9JRFgoaWR4KSk7CisJbWVtY3B5KHAtPm1hY2FkZHIsIGFkZHIsIHNpemVvZihwLT5tYWNhZGRyKSk7CisKKwlyZXQgPSB0NHZmX3dyX21ib3goYWRhcHRlciwgJmNtZCwgc2l6ZW9mKGNtZCksICZycGwpOworCWlmIChyZXQgPT0gMCkgeworCQlwID0gJnJwbC51LmV4YWN0WzBdOworCQlyZXQgPSBGV19WSV9NQUNfQ01EX0lEWF9HRVQoYmUxNl90b19jcHUocC0+dmFsaWRfdG9faWR4KSk7CisJCWlmIChyZXQgPj0gRldfQ0xTX1RDQU1fTlVNX0VOVFJJRVMpCisJCQlyZXQgPSAtRU5PTUVNOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqCXQ0dmZfc2V0X2FkZHJfaGFzaCAtIHByb2dyYW0gdGhlIE1BQyBpbmV4YWN0LW1hdGNoIGhhc2ggZmlsdGVyCisgKglAYWRhcHRlcjogdGhlIGFkYXB0ZXIKKyAqCUB2aWlkOiB0aGUgVmlydHVhbCBJbnRlcmZhY2UgSWRlbnRpZmllcgorICoJQHVjYXN0OiB3aGV0aGVyIHRoZSBoYXNoIGZpbHRlciBzaG91bGQgYWxzbyBtYXRjaCB1bmljYXN0IGFkZHJlc3NlcworICoJQHZlYzogdGhlIHZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGhhc2ggZmlsdGVyCisgKglAc2xlZXBfb2s6IGNhbGwgaXMgYWxsb3dlZCB0byBzbGVlcAorICoKKyAqCVNldHMgdGhlIDY0LWJpdCBpbmV4YWN0LW1hdGNoIGhhc2ggZmlsdGVyIGZvciBhIHZpcnR1YWwgaW50ZXJmYWNlLgorICovCitpbnQgdDR2Zl9zZXRfYWRkcl9oYXNoKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1bnNpZ25lZCBpbnQgdmlpZCwKKwkJICAgICAgIGJvb2wgdWNhc3QsIHU2NCB2ZWMsIGJvb2wgc2xlZXBfb2spCit7CisJc3RydWN0IGZ3X3ZpX21hY19jbWQgY21kOworCXNpemVfdCBsZW4xNiA9IERJVl9ST1VORF9VUChvZmZzZXRvZihzdHJ1Y3QgZndfdmlfbWFjX2NtZCwKKwkJCQkJICAgICB1LmV4YWN0WzBdKSwgMTYpOworCisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQub3BfdG9fdmlpZCA9IGNwdV90b19iZTMyKEZXX0NNRF9PUChGV19WSV9NQUNfQ01EKSB8CisJCQkJICAgICBGV19DTURfUkVRVUVTVCB8CisJCQkJICAgICBGV19DTURfV1JJVEUgfAorCQkJCSAgICAgRldfVklfRU5BQkxFX0NNRF9WSUlEKHZpaWQpKTsKKwljbWQuZnJlZW1hY3NfdG9fbGVuMTYgPSBjcHVfdG9fYmUzMihGV19WSV9NQUNfQ01EX0hBU0hWRUNFTiB8CisJCQkJCSAgICBGV19WSV9NQUNfQ01EX0hBU0hVTklFTih1Y2FzdCkgfAorCQkJCQkgICAgRldfQ01EX0xFTjE2KGxlbjE2KSk7CisJY21kLnUuaGFzaC5oYXNodmVjID0gY3B1X3RvX2JlNjQodmVjKTsKKwlyZXR1cm4gdDR2Zl93cl9tYm94X2NvcmUoYWRhcHRlciwgJmNtZCwgc2l6ZW9mKGNtZCksIE5VTEwsIHNsZWVwX29rKTsKK30KKworLyoqCisgKgl0NHZmX2dldF9wb3J0X3N0YXRzIC0gY29sbGVjdCAicG9ydCIgc3RhdGlzdGljcworICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCisgKglAcGlkeDogdGhlIHBvcnQgaW5kZXgKKyAqCUBzOiB0aGUgc3RhdHMgc3RydWN0dXJlIHRvIGZpbGwKKyAqCisgKglDb2xsZWN0IHN0YXRpc3RpY3MgZm9yIHRoZSAicG9ydCIncyBWaXJ0dWFsIEludGVyZmFjZS4KKyAqLworaW50IHQ0dmZfZ2V0X3BvcnRfc3RhdHMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwaWR4LAorCQkJc3RydWN0IHQ0dmZfcG9ydF9zdGF0cyAqcykKK3sKKwlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IGFkYXAycGluZm8oYWRhcHRlciwgcGlkeCk7CisJc3RydWN0IGZ3X3ZpX3N0YXRzX3ZmIGZ3c3RhdHM7CisJdW5zaWduZWQgaW50IHJlbSA9IFZJX1ZGX05VTV9TVEFUUzsKKwlfX2JlNjQgKmZ3c3AgPSAoX19iZTY0ICopJmZ3c3RhdHM7CisKKwkvKgorCSAqIEdyYWIgdGhlIFZpcnR1YWwgSW50ZXJmYWNlIHN0YXRpc3RpY3MgYSBjaHVuayBhdCBhIHRpbWUgdmlhIG1haWxib3gKKwkgKiBjb21tYW5kcy4gIFdlIGNvdWxkIHVzZSBhIFdvcmsgUmVxdWVzdCBhbmQgZ2V0IGFsbCBvZiB0aGVtIGF0IG9uY2UKKwkgKiBidXQgdGhhdCdzIGFuIGFzeW5jaHJvbm91cyBpbnRlcmZhY2Ugd2hpY2ggaXMgYXdrd2FyZCB0byB1c2UuCisJICovCisJd2hpbGUgKHJlbSkgeworCQl1bnNpZ25lZCBpbnQgaXggPSBWSV9WRl9OVU1fU1RBVFMgLSByZW07CisJCXVuc2lnbmVkIGludCBuc3RhdHMgPSBtaW4oNlUsIHJlbSk7CisJCXN0cnVjdCBmd192aV9zdGF0c19jbWQgY21kLCBycGw7CisJCXNpemVfdCBsZW4gPSAob2Zmc2V0b2Yoc3RydWN0IGZ3X3ZpX3N0YXRzX2NtZCwgdSkgKworCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBmd192aV9zdGF0c19jdGwpKTsKKwkJc2l6ZV90IGxlbjE2ID0gRElWX1JPVU5EX1VQKGxlbiwgMTYpOworCQlpbnQgcmV0OworCisJCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJCWNtZC5vcF90b192aWlkID0gY3B1X3RvX2JlMzIoRldfQ01EX09QKEZXX1ZJX1NUQVRTX0NNRCkgfAorCQkJCQkgICAgIEZXX1ZJX1NUQVRTX0NNRF9WSUlEKHBpLT52aWlkKSB8CisJCQkJCSAgICAgRldfQ01EX1JFUVVFU1QgfAorCQkJCQkgICAgIEZXX0NNRF9SRUFEKTsKKwkJY21kLnJldHZhbF9sZW4xNiA9IGNwdV90b19iZTMyKEZXX0NNRF9MRU4xNihsZW4xNikpOworCQljbWQudS5jdGwubnN0YXRzX2l4ID0KKwkJCWNwdV90b19iZTE2KEZXX1ZJX1NUQVRTX0NNRF9JWChpeCkgfAorCQkJCSAgICBGV19WSV9TVEFUU19DTURfTlNUQVRTKG5zdGF0cykpOworCQlyZXQgPSB0NHZmX3dyX21ib3hfbnMoYWRhcHRlciwgJmNtZCwgbGVuLCAmcnBsKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJbWVtY3B5KGZ3c3AsICZycGwudS5jdGwuc3RhdDAsIHNpemVvZihfX2JlNjQpICogbnN0YXRzKTsKKworCQlyZW0gLT0gbnN0YXRzOworCQlmd3NwICs9IG5zdGF0czsKKwl9CisKKwkvKgorCSAqIFRyYW5zbGF0ZSBmaXJtd2FyZSBzdGF0aXN0aWNzIGludG8gaG9zdCBuYXRpdmUgc3RhdGlzdGljcy4KKwkgKi8KKwlzLT50eF9iY2FzdF9ieXRlcyA9IGJlNjRfdG9fY3B1KGZ3c3RhdHMudHhfYmNhc3RfYnl0ZXMpOworCXMtPnR4X2JjYXN0X2ZyYW1lcyA9IGJlNjRfdG9fY3B1KGZ3c3RhdHMudHhfYmNhc3RfZnJhbWVzKTsKKwlzLT50eF9tY2FzdF9ieXRlcyA9IGJlNjRfdG9fY3B1KGZ3c3RhdHMudHhfbWNhc3RfYnl0ZXMpOworCXMtPnR4X21jYXN0X2ZyYW1lcyA9IGJlNjRfdG9fY3B1KGZ3c3RhdHMudHhfbWNhc3RfZnJhbWVzKTsKKwlzLT50eF91Y2FzdF9ieXRlcyA9IGJlNjRfdG9fY3B1KGZ3c3RhdHMudHhfdWNhc3RfYnl0ZXMpOworCXMtPnR4X3VjYXN0X2ZyYW1lcyA9IGJlNjRfdG9fY3B1KGZ3c3RhdHMudHhfdWNhc3RfZnJhbWVzKTsKKwlzLT50eF9kcm9wX2ZyYW1lcyA9IGJlNjRfdG9fY3B1KGZ3c3RhdHMudHhfZHJvcF9mcmFtZXMpOworCXMtPnR4X29mZmxvYWRfYnl0ZXMgPSBiZTY0X3RvX2NwdShmd3N0YXRzLnR4X29mZmxvYWRfYnl0ZXMpOworCXMtPnR4X29mZmxvYWRfZnJhbWVzID0gYmU2NF90b19jcHUoZndzdGF0cy50eF9vZmZsb2FkX2ZyYW1lcyk7CisKKwlzLT5yeF9iY2FzdF9ieXRlcyA9IGJlNjRfdG9fY3B1KGZ3c3RhdHMucnhfYmNhc3RfYnl0ZXMpOworCXMtPnJ4X2JjYXN0X2ZyYW1lcyA9IGJlNjRfdG9fY3B1KGZ3c3RhdHMucnhfYmNhc3RfZnJhbWVzKTsKKwlzLT5yeF9tY2FzdF9ieXRlcyA9IGJlNjRfdG9fY3B1KGZ3c3RhdHMucnhfbWNhc3RfYnl0ZXMpOworCXMtPnJ4X21jYXN0X2ZyYW1lcyA9IGJlNjRfdG9fY3B1KGZ3c3RhdHMucnhfbWNhc3RfZnJhbWVzKTsKKwlzLT5yeF91Y2FzdF9ieXRlcyA9IGJlNjRfdG9fY3B1KGZ3c3RhdHMucnhfdWNhc3RfYnl0ZXMpOworCXMtPnJ4X3VjYXN0X2ZyYW1lcyA9IGJlNjRfdG9fY3B1KGZ3c3RhdHMucnhfdWNhc3RfZnJhbWVzKTsKKworCXMtPnJ4X2Vycl9mcmFtZXMgPSBiZTY0X3RvX2NwdShmd3N0YXRzLnJ4X2Vycl9mcmFtZXMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJdDR2Zl9pcV9mcmVlIC0gZnJlZSBhbiBpbmdyZXNzIHF1ZXVlIGFuZCBpdHMgZnJlZSBsaXN0cworICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCisgKglAaXF0eXBlOiB0aGUgaW5ncmVzcyBxdWV1ZSB0eXBlIChGV19JUV9UWVBFX0ZMX0lOVF9DQVAsIGV0Yy4pCisgKglAaXFpZDogaW5ncmVzcyBxdWV1ZSBJRAorICoJQGZsMGlkOiBGTDAgcXVldWUgSUQgb3IgMHhmZmZmIGlmIG5vIGF0dGFjaGVkIEZMMAorICoJQGZsMWlkOiBGTDEgcXVldWUgSUQgb3IgMHhmZmZmIGlmIG5vIGF0dGFjaGVkIEZMMQorICoKKyAqCUZyZWVzIGFuIGluZ3Jlc3MgcXVldWUgYW5kIGl0cyBhc3NvY2lhdGVkIGZyZWUgbGlzdHMsIGlmIGFueS4KKyAqLworaW50IHQ0dmZfaXFfZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdW5zaWduZWQgaW50IGlxdHlwZSwKKwkJIHVuc2lnbmVkIGludCBpcWlkLCB1bnNpZ25lZCBpbnQgZmwwaWQsIHVuc2lnbmVkIGludCBmbDFpZCkKK3sKKwlzdHJ1Y3QgZndfaXFfY21kIGNtZDsKKworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLm9wX3RvX3ZmbiA9IGNwdV90b19iZTMyKEZXX0NNRF9PUChGV19JUV9DTUQpIHwKKwkJCQkgICAgRldfQ01EX1JFUVVFU1QgfAorCQkJCSAgICBGV19DTURfRVhFQyk7CisJY21kLmFsbG9jX3RvX2xlbjE2ID0gY3B1X3RvX2JlMzIoRldfSVFfQ01EX0ZSRUUgfAorCQkJCQkgRldfTEVOMTYoY21kKSk7CisJY21kLnR5cGVfdG9faXFhbmRzdGluZGV4ID0KKwkJY3B1X3RvX2JlMzIoRldfSVFfQ01EX1RZUEUoaXF0eXBlKSk7CisKKwljbWQuaXFpZCA9IGNwdV90b19iZTE2KGlxaWQpOworCWNtZC5mbDBpZCA9IGNwdV90b19iZTE2KGZsMGlkKTsKKwljbWQuZmwxaWQgPSBjcHVfdG9fYmUxNihmbDFpZCk7CisJcmV0dXJuIHQ0dmZfd3JfbWJveChhZGFwdGVyLCAmY21kLCBzaXplb2YoY21kKSwgTlVMTCk7Cit9CisKKy8qKgorICoJdDR2Zl9ldGhfZXFfZnJlZSAtIGZyZWUgYW4gRXRoZXJuZXQgZWdyZXNzIHF1ZXVlCisgKglAYWRhcHRlcjogdGhlIGFkYXB0ZXIKKyAqCUBlcWlkOiBlZ3Jlc3MgcXVldWUgSUQKKyAqCisgKglGcmVlcyBhbiBFdGhlcm5ldCBlZ3Jlc3MgcXVldWUuCisgKi8KK2ludCB0NHZmX2V0aF9lcV9mcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1bnNpZ25lZCBpbnQgZXFpZCkKK3sKKwlzdHJ1Y3QgZndfZXFfZXRoX2NtZCBjbWQ7CisKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCWNtZC5vcF90b192Zm4gPSBjcHVfdG9fYmUzMihGV19DTURfT1AoRldfRVFfRVRIX0NNRCkgfAorCQkJCSAgICBGV19DTURfUkVRVUVTVCB8CisJCQkJICAgIEZXX0NNRF9FWEVDKTsKKwljbWQuYWxsb2NfdG9fbGVuMTYgPSBjcHVfdG9fYmUzMihGV19FUV9FVEhfQ01EX0ZSRUUgfAorCQkJCQkgRldfTEVOMTYoY21kKSk7CisJY21kLmVxaWRfcGtkID0gY3B1X3RvX2JlMzIoRldfRVFfRVRIX0NNRF9FUUlEKGVxaWQpKTsKKwlyZXR1cm4gdDR2Zl93cl9tYm94KGFkYXB0ZXIsICZjbWQsIHNpemVvZihjbWQpLCBOVUxMKTsKK30KKworLyoqCisgKgl0NHZmX2hhbmRsZV9md19ycGwgLSBwcm9jZXNzIGEgZmlybXdhcmUgcmVwbHkgbWVzc2FnZQorICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCisgKglAcnBsOiBzdGFydCBvZiB0aGUgZmlybXdhcmUgbWVzc2FnZQorICoKKyAqCVByb2Nlc3NlcyBhIGZpcm13YXJlIG1lc3NhZ2UsIHN1Y2ggYXMgbGluayBzdGF0ZSBjaGFuZ2UgbWVzc2FnZXMuCisgKi8KK2ludCB0NHZmX2hhbmRsZV9md19ycGwoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IF9fYmU2NCAqcnBsKQoreworCXN0cnVjdCBmd19jbWRfaGRyICpjbWRfaGRyID0gKHN0cnVjdCBmd19jbWRfaGRyICopcnBsOworCXU4IG9wY29kZSA9IEZXX0NNRF9PUF9HRVQoYmUzMl90b19jcHUoY21kX2hkci0+aGkpKTsKKworCXN3aXRjaCAob3Bjb2RlKSB7CisJY2FzZSBGV19QT1JUX0NNRDogeworCQkvKgorCQkgKiBMaW5rL21vZHVsZSBzdGF0ZSBjaGFuZ2UgbWVzc2FnZS4KKwkJICovCisJCWNvbnN0IHN0cnVjdCBmd19wb3J0X2NtZCAqcG9ydF9jbWQgPSAodm9pZCAqKXJwbDsKKwkJdTMyIHdvcmQ7CisJCWludCBhY3Rpb24sIHBvcnRfaWQsIGxpbmtfb2ssIHNwZWVkLCBmYywgcGlkeDsKKworCQkvKgorCQkgKiBFeHRyYWN0IHZhcmlvdXMgZmllbGRzIGZyb20gcG9ydCBzdGF0dXMgY2hhbmdlIG1lc3NhZ2UuCisJCSAqLworCQlhY3Rpb24gPSBGV19QT1JUX0NNRF9BQ1RJT05fR0VUKAorCQkJYmUzMl90b19jcHUocG9ydF9jbWQtPmFjdGlvbl90b19sZW4xNikpOworCQlpZiAoYWN0aW9uICE9IEZXX1BPUlRfQUNUSU9OX0dFVF9QT1JUX0lORk8pIHsKKwkJCWRldl9lcnIoYWRhcHRlci0+cGRldl9kZXYsCisJCQkJIlVua25vd24gZmlybXdhcmUgUE9SVCByZXBseSBhY3Rpb24gJXhcbiIsCisJCQkJYWN0aW9uKTsKKwkJCWJyZWFrOworCQl9CisKKwkJcG9ydF9pZCA9IEZXX1BPUlRfQ01EX1BPUlRJRF9HRVQoCisJCQliZTMyX3RvX2NwdShwb3J0X2NtZC0+b3BfdG9fcG9ydGlkKSk7CisKKwkJd29yZCA9IGJlMzJfdG9fY3B1KHBvcnRfY21kLT51LmluZm8ubHN0YXR1c190b19tb2R0eXBlKTsKKwkJbGlua19vayA9ICh3b3JkICYgRldfUE9SVF9DTURfTFNUQVRVUykgIT0gMDsKKwkJc3BlZWQgPSAwOworCQlmYyA9IDA7CisJCWlmICh3b3JkICYgRldfUE9SVF9DTURfUlhQQVVTRSkKKwkJCWZjIHw9IFBBVVNFX1JYOworCQlpZiAod29yZCAmIEZXX1BPUlRfQ01EX1RYUEFVU0UpCisJCQlmYyB8PSBQQVVTRV9UWDsKKwkJaWYgKHdvcmQgJiBGV19QT1JUX0NNRF9MU1BFRUQoRldfUE9SVF9DQVBfU1BFRURfMTAwTSkpCisJCQlzcGVlZCA9IFNQRUVEXzEwMDsKKwkJZWxzZSBpZiAod29yZCAmIEZXX1BPUlRfQ01EX0xTUEVFRChGV19QT1JUX0NBUF9TUEVFRF8xRykpCisJCQlzcGVlZCA9IFNQRUVEXzEwMDA7CisJCWVsc2UgaWYgKHdvcmQgJiBGV19QT1JUX0NNRF9MU1BFRUQoRldfUE9SVF9DQVBfU1BFRURfMTBHKSkKKwkJCXNwZWVkID0gU1BFRURfMTAwMDA7CisKKwkJLyoKKwkJICogU2NhbiBhbGwgb2Ygb3VyICJwb3J0cyIgKFZpcnR1YWwgSW50ZXJmYWNlcykgbG9va2luZyBmb3IKKwkJICogdGhvc2UgYm91bmQgdG8gdGhlIHBoeXNpY2FsIHBvcnQgd2hpY2ggaGFzIGNoYW5nZWQuICBJZgorCQkgKiBvdXIgcmVjb3JkZWQgc3RhdGUgZG9lc24ndCBtYXRjaCB0aGUgY3VycmVudCBzdGF0ZSwKKwkJICogc2lnbmFsIHRoYXQgY2hhbmdlIHRvIHRoZSBPUyBjb2RlLgorCQkgKi8KKwkJZm9yX2VhY2hfcG9ydChhZGFwdGVyLCBwaWR4KSB7CisJCQlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IGFkYXAycGluZm8oYWRhcHRlciwgcGlkeCk7CisJCQlzdHJ1Y3QgbGlua19jb25maWcgKmxjOworCisJCQlpZiAocGktPnBvcnRfaWQgIT0gcG9ydF9pZCkKKwkJCQljb250aW51ZTsKKworCQkJbGMgPSAmcGktPmxpbmtfY2ZnOworCQkJaWYgKGxpbmtfb2sgIT0gbGMtPmxpbmtfb2sgfHwgc3BlZWQgIT0gbGMtPnNwZWVkIHx8CisJCQkgICAgZmMgIT0gbGMtPmZjKSB7CisJCQkJLyogc29tZXRoaW5nIGNoYW5nZWQgKi8KKwkJCQlsYy0+bGlua19vayA9IGxpbmtfb2s7CisJCQkJbGMtPnNwZWVkID0gc3BlZWQ7CisJCQkJbGMtPmZjID0gZmM7CisJCQkJdDR2Zl9vc19saW5rX2NoYW5nZWQoYWRhcHRlciwgcGlkeCwgbGlua19vayk7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJfQorCisJZGVmYXVsdDoKKwkJZGV2X2VycihhZGFwdGVyLT5wZGV2X2RldiwgIlVua25vd24gZmlybXdhcmUgcmVwbHkgJVhcbiIsCisJCQlvcGNvZGUpOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jIGIvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMKaW5kZXggMDhlODJiMS4uZDA4MjRlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMKQEAgLTI5OCw2ICsyOTgsMTEgQEAKICNkZWZpbmUgRU1BQ19DVFJMX0VXQ1RMCQkoMHg0KQogI2RlZmluZSBFTUFDX0NUUkxfRVdJTlRUQ05UCSgweDgpCiAKKy8qIEVNQUMgRE02NDR4IGNvbnRyb2wgbW9kdWxlIG1hc2tzICovCisjZGVmaW5lIEVNQUNfRE02NDRYX0VXSU5UQ05UX01BU0sJMHgxRkZGRgorI2RlZmluZSBFTUFDX0RNNjQ0WF9JTlRNSU5fSU5UVkwJMHgxCisjZGVmaW5lIEVNQUNfRE02NDRYX0lOVE1BWF9JTlRWTAkoRU1BQ19ETTY0NFhfRVdJTlRDTlRfTUFTSykKKwogLyogRU1BQyBNRElPIHJlbGF0ZWQgKi8KIC8qIE1hc2sgJiBDb250cm9sIGRlZmluZXMgKi8KICNkZWZpbmUgTURJT19DT05UUk9MX0NMS0RJVgkoMHhGRikKQEAgLTMxOCw4ICszMjMsMjAgQEAKICNkZWZpbmUgTURJT19DT05UUk9MCQkoMHgwNCkKIAogLyogRU1BQyBETTY0NlggY29udHJvbCBtb2R1bGUgcmVnaXN0ZXJzICovCi0jZGVmaW5lIEVNQUNfRE02NDZYX0NNUlhJTlRFTgkoMHgxNCkKLSNkZWZpbmUgRU1BQ19ETTY0NlhfQ01UWElOVEVOCSgweDE4KQorI2RlZmluZSBFTUFDX0RNNjQ2WF9DTUlOVENUUkwJMHgwQworI2RlZmluZSBFTUFDX0RNNjQ2WF9DTVJYSU5URU4JMHgxNAorI2RlZmluZSBFTUFDX0RNNjQ2WF9DTVRYSU5URU4JMHgxOAorI2RlZmluZSBFTUFDX0RNNjQ2WF9DTVJYSU5UTUFYCTB4NzAKKyNkZWZpbmUgRU1BQ19ETTY0NlhfQ01UWElOVE1BWAkweDc0CisKKy8qIEVNQUMgRE02NDZYIGNvbnRyb2wgbW9kdWxlIG1hc2tzICovCisjZGVmaW5lIEVNQUNfRE02NDZYX0lOVFBBQ0VFTgkJKDB4MyA8PCAxNikKKyNkZWZpbmUgRU1BQ19ETTY0NlhfSU5UUFJFU0NBTEVfTUFTSwkoMHg3RkYgPDwgMCkKKyNkZWZpbmUgRU1BQ19ETTY0NlhfQ01JTlRNQVhfQ05UCTYzCisjZGVmaW5lIEVNQUNfRE02NDZYX0NNSU5UTUlOX0NOVAkyCisjZGVmaW5lIEVNQUNfRE02NDZYX0NNSU5UTUFYX0lOVFZMCSgxMDAwIC8gRU1BQ19ETTY0NlhfQ01JTlRNSU5fQ05UKQorI2RlZmluZSBFTUFDX0RNNjQ2WF9DTUlOVE1JTl9JTlRWTAkoKDEwMDAgLyBFTUFDX0RNNjQ2WF9DTUlOVE1BWF9DTlQpICsgMSkKKwogCiAvKiBFTUFDIEVPSSBjb2RlcyBmb3IgQzAgKi8KICNkZWZpbmUgRU1BQ19ETTY0NlhfTUFDX0VPSV9DMF9SWEVOCSgweDAxKQpAQCAtNDY4LDkgKzQ4NSwxMCBAQAogCXUzMiBkdXBsZXg7IC8qIExpbmsgZHVwbGV4OiAwPUhhbGYsIDE9RnVsbCAqLwogCXUzMiByeF9idWZfc2l6ZTsKIAl1MzIgaXNyX2NvdW50OworCXUzMiBjb2FsX2ludHZsOworCXUzMiBidXNfZnJlcV9taHo7CiAJdTggcm1paV9lbjsKIAl1OCB2ZXJzaW9uOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIG5ldF9kZXZfc3RhdHM7CiAJdTMyIG1hY19oYXNoMTsKIAl1MzIgbWFjX2hhc2gyOwogCXUzMiBtdWx0aWNhc3RfaGFzaF9jbnRbRU1BQ19OVU1fTVVMVElDQVNUX0JJVFNdOwpAQCAtNTQ2LDkgKzU2NCwxMSBAQAogCiAJLyogUHJpbnQgaW1wb3J0YW50IHJlZ2lzdGVycyBpbiBFTUFDICovCiAJZGV2X2luZm8oZW1hY19kZXYsICJFTUFDIEJhc2ljIHJlZ2lzdGVyc1xuIik7Ci0JZGV2X2luZm8oZW1hY19kZXYsICJFTUFDOiBFV0NUTDogJTA4WCwgRVdJTlRUQ05UOiAlMDhYXG4iLAotCQllbWFjX2N0cmxfcmVhZChFTUFDX0NUUkxfRVdDVEwpLAotCQllbWFjX2N0cmxfcmVhZChFTUFDX0NUUkxfRVdJTlRUQ05UKSk7CisJaWYgKHByaXYtPnZlcnNpb24gPT0gRU1BQ19WRVJTSU9OXzEpIHsKKwkJZGV2X2luZm8oZW1hY19kZXYsICJFTUFDOiBFV0NUTDogJTA4WCwgRVdJTlRUQ05UOiAlMDhYXG4iLAorCQkJZW1hY19jdHJsX3JlYWQoRU1BQ19DVFJMX0VXQ1RMKSwKKwkJCWVtYWNfY3RybF9yZWFkKEVNQUNfQ1RSTF9FV0lOVFRDTlQpKTsKKwl9CiAJZGV2X2luZm8oZW1hY19kZXYsICJFTUFDOiBUWElEOiAlMDhYICVzLCBSWElEOiAlMDhYICVzXG4iLAogCQllbWFjX3JlYWQoRU1BQ19UWElEVkVSKSwKIAkJKChlbWFjX3JlYWQoRU1BQ19UWENPTlRST0wpKSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpLApAQCAtNjkyLDYgKzcxMiwxMDMgQEAKIH0KIAogLyoqCisgKiBlbWFjX2dldF9jb2FsZXNjZSA6IEdldCBpbnRlcnJ1cHQgY29hbGVzY2Ugc2V0dGluZ3MgZm9yIHRoaXMgZGV2aWNlCisgKiBAbmRldiA6IFRoZSBEYVZpbmNpIEVNQUMgbmV0d29yayBhZGFwdGVyCisgKiBAY29hbCA6IGV0aHRvb2wgY29hbGVzY2Ugc2V0dGluZ3Mgc3RydWN0dXJlCisgKgorICogRmV0Y2ggdGhlIGN1cnJlbnQgaW50ZXJydXB0IGNvYWxlc2NlIHNldHRpbmdzCisgKgorICovCitzdGF0aWMgaW50IGVtYWNfZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAorCQkJCXN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjb2FsKQoreworCXN0cnVjdCBlbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKworCWNvYWwtPnJ4X2NvYWxlc2NlX3VzZWNzID0gcHJpdi0+Y29hbF9pbnR2bDsKKwlyZXR1cm4gMDsKKworfQorCisvKioKKyAqIGVtYWNfc2V0X2NvYWxlc2NlIDogU2V0IGludGVycnVwdCBjb2FsZXNjZSBzZXR0aW5ncyBmb3IgdGhpcyBkZXZpY2UKKyAqIEBuZGV2IDogVGhlIERhVmluY2kgRU1BQyBuZXR3b3JrIGFkYXB0ZXIKKyAqIEBjb2FsIDogZXRodG9vbCBjb2FsZXNjZSBzZXR0aW5ncyBzdHJ1Y3R1cmUKKyAqCisgKiBTZXQgaW50ZXJydXB0IGNvYWxlc2NlIHBhcmFtZXRlcnMKKyAqCisgKi8KK3N0YXRpYyBpbnQgZW1hY19zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCisJCQkJc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmNvYWwpCit7CisJc3RydWN0IGVtYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOworCXUzMiBpbnRfY3RybCwgbnVtX2ludGVycnVwdHMgPSAwOworCXUzMiBwcmVzY2FsZSA9IDAsIGFkZG5sX2R2ZHIgPSAxLCBjb2FsX2ludHZsID0gMDsKKworCWlmICghY29hbC0+cnhfY29hbGVzY2VfdXNlY3MpCisJCXJldHVybiAtRUlOVkFMOworCisJY29hbF9pbnR2bCA9IGNvYWwtPnJ4X2NvYWxlc2NlX3VzZWNzOworCisJc3dpdGNoIChwcml2LT52ZXJzaW9uKSB7CisJY2FzZSBFTUFDX1ZFUlNJT05fMjoKKwkJaW50X2N0cmwgPSAgZW1hY19jdHJsX3JlYWQoRU1BQ19ETTY0NlhfQ01JTlRDVFJMKTsKKwkJcHJlc2NhbGUgPSBwcml2LT5idXNfZnJlcV9taHogKiA0OworCisJCWlmIChjb2FsX2ludHZsIDwgRU1BQ19ETTY0NlhfQ01JTlRNSU5fSU5UVkwpCisJCQljb2FsX2ludHZsID0gRU1BQ19ETTY0NlhfQ01JTlRNSU5fSU5UVkw7CisKKwkJaWYgKGNvYWxfaW50dmwgPiBFTUFDX0RNNjQ2WF9DTUlOVE1BWF9JTlRWTCkgeworCQkJLyoKKwkJCSAqIEludGVycnVwdCBwYWNlciB3b3JrcyB3aXRoIDR1cyBQdWxzZSwgd2UgY2FuCisJCQkgKiB0aHJvdHRsZSBmdXJ0aGVyIGJ5IGRpbGF0aW5nIHRoZSA0dXMgcHVsc2UuCisJCQkgKi8KKwkJCWFkZG5sX2R2ZHIgPSBFTUFDX0RNNjQ2WF9JTlRQUkVTQ0FMRV9NQVNLIC8gcHJlc2NhbGU7CisKKwkJCWlmIChhZGRubF9kdmRyID4gMSkgeworCQkJCXByZXNjYWxlICo9IGFkZG5sX2R2ZHI7CisJCQkJaWYgKGNvYWxfaW50dmwgPiAoRU1BQ19ETTY0NlhfQ01JTlRNQVhfSU5UVkwKKwkJCQkJCQkqIGFkZG5sX2R2ZHIpKQorCQkJCQljb2FsX2ludHZsID0gKEVNQUNfRE02NDZYX0NNSU5UTUFYX0lOVFZMCisJCQkJCQkJKiBhZGRubF9kdmRyKTsKKwkJCX0gZWxzZSB7CisJCQkJYWRkbmxfZHZkciA9IDE7CisJCQkJY29hbF9pbnR2bCA9IEVNQUNfRE02NDZYX0NNSU5UTUFYX0lOVFZMOworCQkJfQorCQl9CisKKwkJbnVtX2ludGVycnVwdHMgPSAoMTAwMCAqIGFkZG5sX2R2ZHIpIC8gY29hbF9pbnR2bDsKKworCQlpbnRfY3RybCB8PSBFTUFDX0RNNjQ2WF9JTlRQQUNFRU47CisJCWludF9jdHJsICY9ICh+RU1BQ19ETTY0NlhfSU5UUFJFU0NBTEVfTUFTSyk7CisJCWludF9jdHJsIHw9IChwcmVzY2FsZSAmIEVNQUNfRE02NDZYX0lOVFBSRVNDQUxFX01BU0spOworCQllbWFjX2N0cmxfd3JpdGUoRU1BQ19ETTY0NlhfQ01JTlRDVFJMLCBpbnRfY3RybCk7CisKKwkJZW1hY19jdHJsX3dyaXRlKEVNQUNfRE02NDZYX0NNUlhJTlRNQVgsIG51bV9pbnRlcnJ1cHRzKTsKKwkJZW1hY19jdHJsX3dyaXRlKEVNQUNfRE02NDZYX0NNVFhJTlRNQVgsIG51bV9pbnRlcnJ1cHRzKTsKKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpbnRfY3RybCA9IGVtYWNfY3RybF9yZWFkKEVNQUNfQ1RSTF9FV0lOVFRDTlQpOworCQlpbnRfY3RybCAmPSAofkVNQUNfRE02NDRYX0VXSU5UQ05UX01BU0spOworCQlwcmVzY2FsZSA9IGNvYWxfaW50dmwgKiBwcml2LT5idXNfZnJlcV9taHo7CisJCWlmIChwcmVzY2FsZSA+IEVNQUNfRE02NDRYX0VXSU5UQ05UX01BU0spIHsKKwkJCXByZXNjYWxlID0gRU1BQ19ETTY0NFhfRVdJTlRDTlRfTUFTSzsKKwkJCWNvYWxfaW50dmwgPSBwcmVzY2FsZSAvIHByaXYtPmJ1c19mcmVxX21oejsKKwkJfQorCQllbWFjX2N0cmxfd3JpdGUoRU1BQ19DVFJMX0VXSU5UVENOVCwgKGludF9jdHJsIHwgcHJlc2NhbGUpKTsKKworCQlicmVhazsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPIlNldCBjb2FsZXNjZSB0byAlZCB1c2Vjcy5cbiIsIGNvYWxfaW50dmwpOworCXByaXYtPmNvYWxfaW50dmwgPSBjb2FsX2ludHZsOworCisJcmV0dXJuIDA7CisKK30KKworCisvKioKICAqIGV0aHRvb2xfb3BzOiBEYVZpbmNpIEVNQUMgRXRodG9vbCBzdHJ1Y3R1cmUKICAqCiAgKiBFdGh0b29sIHN1cHBvcnQgZm9yIEVNQUMgYWRhcHRlcgpAQCAtNzAyLDYgKzgxOSw4IEBACiAJLmdldF9zZXR0aW5ncyA9IGVtYWNfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MgPSBlbWFjX3NldF9zZXR0aW5ncywKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAorCS5nZXRfY29hbGVzY2UgPSBlbWFjX2dldF9jb2FsZXNjZSwKKwkuc2V0X2NvYWxlc2NlID0gIGVtYWNfc2V0X2NvYWxlc2NlLAogfTsKIAogLyoqCkBAIC0xMTgwLDE2ICsxMjk5LDE3IEBACiAJCQkJdm9pZCAqKm5ldF9kYXRhX3Rva2VucywKIAkJCQlpbnQgbnVtX3Rva2VucywgdTMyIGNoKQogeworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcHJpdi0+bmRldjsKIAl1MzIgY250OwogCi0JaWYgKHVubGlrZWx5KG51bV90b2tlbnMgJiYgbmV0aWZfcXVldWVfc3RvcHBlZChwcml2LT5uZGV2KSkpCi0JCW5ldGlmX3N0YXJ0X3F1ZXVlKHByaXYtPm5kZXYpOworCWlmICh1bmxpa2VseShudW1fdG9rZW5zICYmIG5ldGlmX3F1ZXVlX3N0b3BwZWQobmRldikpKQorCQluZXRpZl9zdGFydF9xdWV1ZShuZGV2KTsKIAlmb3IgKGNudCA9IDA7IGNudCA8IG51bV90b2tlbnM7IGNudCsrKSB7CiAJCXN0cnVjdCBza19idWZmICpza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiluZXRfZGF0YV90b2tlbnNbY250XTsKIAkJaWYgKHNrYiA9PSBOVUxMKQogCQkJY29udGludWU7Ci0JCXByaXYtPm5ldF9kZXZfc3RhdHMudHhfcGFja2V0cysrOwotCQlwcml2LT5uZXRfZGV2X3N0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCQluZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCW5kZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCX0KIAlyZXR1cm4gMDsKQEAgLTE0NzYsNyArMTU5Niw3IEBACiAJCQkJCSIgZXJyLiBPdXQgb2YgVFggQkQncyIpOwogCQkJbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5uZGV2KTsKIAkJfQotCQlwcml2LT5uZXRfZGV2X3N0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJbmRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCkBAIC0xNTAxLDcgKzE2MjEsNyBAQAogCWlmIChuZXRpZl9tc2dfdHhfZXJyKHByaXYpKQogCQlkZXZfZXJyKGVtYWNfZGV2LCAiRGFWaW5jaSBFTUFDOiB4bWl0IHRpbWVvdXQsIHJlc3RhcnRpbmcgVFgiKTsKIAotCXByaXYtPm5ldF9kZXZfc3RhdHMudHhfZXJyb3JzKys7CisJbmRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJZW1hY19pbnRfZGlzYWJsZShwcml2KTsKIAllbWFjX3N0b3BfdHhjaChwcml2LCBFTUFDX0RFRl9UWF9DSCk7CiAJZW1hY19jbGVhbnVwX3R4Y2gocHJpdiwgRU1BQ19ERUZfVFhfQ0gpOwpAQCAtMTkyNiwxNCArMjA0NiwxNCBAQAogc3RhdGljIGludCBlbWFjX25ldF9yeF9jYihzdHJ1Y3QgZW1hY19wcml2ICpwcml2LAogCQkJICBzdHJ1Y3QgZW1hY19uZXRwa3RvYmogKm5ldF9wa3RfbGlzdCkKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqcF9za2I7Ci0JcF9za2IgPSAoc3RydWN0IHNrX2J1ZmYgKiluZXRfcGt0X2xpc3QtPnBrdF90b2tlbjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHByaXYtPm5kZXY7CisJc3RydWN0IHNrX2J1ZmYgKnBfc2tiID0gbmV0X3BrdF9saXN0LT5wa3RfdG9rZW47CiAJLyogc2V0IGxlbmd0aCBvZiBwYWNrZXQgKi8KIAlza2JfcHV0KHBfc2tiLCBuZXRfcGt0X2xpc3QtPnBrdF9sZW5ndGgpOwogCXBfc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHBfc2tiLCBwcml2LT5uZGV2KTsKIAluZXRpZl9yZWNlaXZlX3NrYihwX3NrYik7Ci0JcHJpdi0+bmV0X2Rldl9zdGF0cy5yeF9ieXRlcyArPSBuZXRfcGt0X2xpc3QtPnBrdF9sZW5ndGg7Ci0JcHJpdi0+bmV0X2Rldl9zdGF0cy5yeF9wYWNrZXRzKys7CisJbmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gbmV0X3BrdF9saXN0LT5wa3RfbGVuZ3RoOworCW5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjE0OCw3ICsyMjY4LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHByaXYtPm5kZXY7CiAJc3RydWN0IGRldmljZSAqZW1hY19kZXYgPSAmbmRldi0+ZGV2OwogCXUzMiBzdGF0dXMgPSAwOwotCXUzMiBudW1fcGt0cyA9IDA7CisJdTMyIG51bV90eF9wa3RzID0gMCwgbnVtX3J4X3BrdHMgPSAwOwogCiAJLyogQ2hlY2sgaW50ZXJydXB0IHZlY3RvcnMgYW5kIGNhbGwgcGFja2V0IHByb2Nlc3NpbmcgKi8KIAlzdGF0dXMgPSBlbWFjX3JlYWQoRU1BQ19NQUNJTlZFQ1RPUik7CkBAIC0yMTU5LDI3ICsyMjc5LDE5IEBACiAJCW1hc2sgPSBFTUFDX0RNNjQ2WF9NQUNfSU5fVkVDVE9SX1RYX0lOVF9WRUM7CiAKIAlpZiAoc3RhdHVzICYgbWFzaykgewotCQludW1fcGt0cyA9IGVtYWNfdHhfYmRwcm9jKHByaXYsIEVNQUNfREVGX1RYX0NILAorCQludW1fdHhfcGt0cyA9IGVtYWNfdHhfYmRwcm9jKHByaXYsIEVNQUNfREVGX1RYX0NILAogCQkJCQkgIEVNQUNfREVGX1RYX01BWF9TRVJWSUNFKTsKIAl9IC8qIFRYIHByb2Nlc3NpbmcgKi8KIAotCWlmIChudW1fcGt0cykKLQkJcmV0dXJuIGJ1ZGdldDsKLQogCW1hc2sgPSBFTUFDX0RNNjQ0WF9NQUNfSU5fVkVDVE9SX1JYX0lOVF9WRUM7CiAKIAlpZiAocHJpdi0+dmVyc2lvbiA9PSBFTUFDX1ZFUlNJT05fMikKIAkJbWFzayA9IEVNQUNfRE02NDZYX01BQ19JTl9WRUNUT1JfUlhfSU5UX1ZFQzsKIAogCWlmIChzdGF0dXMgJiBtYXNrKSB7Ci0JCW51bV9wa3RzID0gZW1hY19yeF9iZHByb2MocHJpdiwgRU1BQ19ERUZfUlhfQ0gsIGJ1ZGdldCk7CisJCW51bV9yeF9wa3RzID0gZW1hY19yeF9iZHByb2MocHJpdiwgRU1BQ19ERUZfUlhfQ0gsIGJ1ZGdldCk7CiAJfSAvKiBSWCBwcm9jZXNzaW5nICovCiAKLQlpZiAobnVtX3BrdHMgPCBidWRnZXQpIHsKLQkJbmFwaV9jb21wbGV0ZShuYXBpKTsKLQkJZW1hY19pbnRfZW5hYmxlKHByaXYpOwotCX0KLQogCW1hc2sgPSBFTUFDX0RNNjQ0WF9NQUNfSU5fVkVDVE9SX0hPU1RfSU5UOwogCWlmIChwcml2LT52ZXJzaW9uID09IEVNQUNfVkVSU0lPTl8yKQogCQltYXNrID0gRU1BQ19ETTY0NlhfTUFDX0lOX1ZFQ1RPUl9IT1NUX0lOVDsKQEAgLTIyMTAsOSArMjMyMiwxMiBAQAogCQkJCWRldl9lcnIoZW1hY19kZXYsICJSWCBIb3N0IGVycm9yICVzIG9uIGNoPSVkXG4iLAogCQkJCQkmZW1hY19yeGhvc3RfZXJyY29kZXNbY2F1c2VdWzBdLCBjaCk7CiAJCX0KLQl9IC8qIEhvc3QgZXJyb3IgcHJvY2Vzc2luZyAqLworCX0gZWxzZSBpZiAobnVtX3J4X3BrdHMgPCBidWRnZXQpIHsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJZW1hY19pbnRfZW5hYmxlKHByaXYpOworCX0KIAotCXJldHVybiBudW1fcGt0czsKKwlyZXR1cm4gbnVtX3J4X3BrdHM7CiB9CiAKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgpAQCAtMjQzNyw2ICsyNTUyLDE0IEBACiAJLyogU3RhcnQvRW5hYmxlIEVNQUMgaGFyZHdhcmUgKi8KIAllbWFjX2h3X2VuYWJsZShwcml2KTsKIAorCS8qIEVuYWJsZSBJbnRlcnJ1cHQgcGFjaW5nIGlmIGNvbmZpZ3VyZWQgKi8KKwlpZiAocHJpdi0+Y29hbF9pbnR2bCAhPSAwKSB7CisJCXN0cnVjdCBldGh0b29sX2NvYWxlc2NlIGNvYWw7CisKKwkJY29hbC5yeF9jb2FsZXNjZV91c2VjcyA9IChwcml2LT5jb2FsX2ludHZsIDw8IDQpOworCQllbWFjX3NldF9jb2FsZXNjZShuZGV2LCAmY29hbCk7CisJfQorCiAJLyogZmluZCB0aGUgZmlyc3QgcGh5ICovCiAJcHJpdi0+cGh5ZGV2ID0gTlVMTDsKIAlpZiAocHJpdi0+cGh5X21hc2spIHsKQEAgLTI1NzAsMzkgKzI2OTMsMzkgQEAKIAllbHNlCiAJCXN0YXRzX2NsZWFyX21hc2sgPSAwOwogCi0JcHJpdi0+bmV0X2Rldl9zdGF0cy5tdWx0aWNhc3QgKz0gZW1hY19yZWFkKEVNQUNfUlhNQ0FTVEZSQU1FUyk7CisJbmRldi0+c3RhdHMubXVsdGljYXN0ICs9IGVtYWNfcmVhZChFTUFDX1JYTUNBU1RGUkFNRVMpOwogCWVtYWNfd3JpdGUoRU1BQ19SWE1DQVNURlJBTUVTLCBzdGF0c19jbGVhcl9tYXNrKTsKIAotCXByaXYtPm5ldF9kZXZfc3RhdHMuY29sbGlzaW9ucyArPSAoZW1hY19yZWFkKEVNQUNfVFhDT0xMSVNJT04pICsKKwluZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9IChlbWFjX3JlYWQoRU1BQ19UWENPTExJU0lPTikgKwogCQkJCQkgICBlbWFjX3JlYWQoRU1BQ19UWFNJTkdMRUNPTEwpICsKIAkJCQkJICAgZW1hY19yZWFkKEVNQUNfVFhNVUxUSUNPTEwpKTsKIAllbWFjX3dyaXRlKEVNQUNfVFhDT0xMSVNJT04sIHN0YXRzX2NsZWFyX21hc2spOwogCWVtYWNfd3JpdGUoRU1BQ19UWFNJTkdMRUNPTEwsIHN0YXRzX2NsZWFyX21hc2spOwogCWVtYWNfd3JpdGUoRU1BQ19UWE1VTFRJQ09MTCwgc3RhdHNfY2xlYXJfbWFzayk7CiAKLQlwcml2LT5uZXRfZGV2X3N0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgKz0gKGVtYWNfcmVhZChFTUFDX1JYT1ZFUlNJWkVEKSArCisJbmRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyArPSAoZW1hY19yZWFkKEVNQUNfUlhPVkVSU0laRUQpICsKIAkJCQkJCWVtYWNfcmVhZChFTUFDX1JYSkFCQkVSKSArCiAJCQkJCQllbWFjX3JlYWQoRU1BQ19SWFVOREVSU0laRUQpKTsKIAllbWFjX3dyaXRlKEVNQUNfUlhPVkVSU0laRUQsIHN0YXRzX2NsZWFyX21hc2spOwogCWVtYWNfd3JpdGUoRU1BQ19SWEpBQkJFUiwgc3RhdHNfY2xlYXJfbWFzayk7CiAJZW1hY193cml0ZShFTUFDX1JYVU5ERVJTSVpFRCwgc3RhdHNfY2xlYXJfbWFzayk7CiAKLQlwcml2LT5uZXRfZGV2X3N0YXRzLnJ4X292ZXJfZXJyb3JzICs9IChlbWFjX3JlYWQoRU1BQ19SWFNPRk9WRVJSVU5TKSArCisJbmRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMgKz0gKGVtYWNfcmVhZChFTUFDX1JYU09GT1ZFUlJVTlMpICsKIAkJCQkJICAgICAgIGVtYWNfcmVhZChFTUFDX1JYTU9GT1ZFUlJVTlMpKTsKIAllbWFjX3dyaXRlKEVNQUNfUlhTT0ZPVkVSUlVOUywgc3RhdHNfY2xlYXJfbWFzayk7CiAJZW1hY193cml0ZShFTUFDX1JYTU9GT1ZFUlJVTlMsIHN0YXRzX2NsZWFyX21hc2spOwogCi0JcHJpdi0+bmV0X2Rldl9zdGF0cy5yeF9maWZvX2Vycm9ycyArPSBlbWFjX3JlYWQoRU1BQ19SWERNQU9WRVJSVU5TKTsKKwluZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycyArPSBlbWFjX3JlYWQoRU1BQ19SWERNQU9WRVJSVU5TKTsKIAllbWFjX3dyaXRlKEVNQUNfUlhETUFPVkVSUlVOUywgc3RhdHNfY2xlYXJfbWFzayk7CiAKLQlwcml2LT5uZXRfZGV2X3N0YXRzLnR4X2NhcnJpZXJfZXJyb3JzICs9CisJbmRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMgKz0KIAkJZW1hY19yZWFkKEVNQUNfVFhDQVJSSUVSU0VOU0UpOwogCWVtYWNfd3JpdGUoRU1BQ19UWENBUlJJRVJTRU5TRSwgc3RhdHNfY2xlYXJfbWFzayk7CiAKLQlwcml2LT5uZXRfZGV2X3N0YXRzLnR4X2ZpZm9fZXJyb3JzID0gZW1hY19yZWFkKEVNQUNfVFhVTkRFUlJVTik7CisJbmRldi0+c3RhdHMudHhfZmlmb19lcnJvcnMgPSBlbWFjX3JlYWQoRU1BQ19UWFVOREVSUlVOKTsKIAllbWFjX3dyaXRlKEVNQUNfVFhVTkRFUlJVTiwgc3RhdHNfY2xlYXJfbWFzayk7CiAKLQlyZXR1cm4gJnByaXYtPm5ldF9kZXZfc3RhdHM7CisJcmV0dXJuICZuZGV2LT5zdGF0czsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlbWFjX25ldGRldl9vcHMgPSB7CkBAIC0yNjc3LDYgKzI4MDAsOSBAQAogCXByaXYtPmludF9lbmFibGUgPSBwZGF0YS0+aW50ZXJydXB0X2VuYWJsZTsKIAlwcml2LT5pbnRfZGlzYWJsZSA9IHBkYXRhLT5pbnRlcnJ1cHRfZGlzYWJsZTsKIAorCXByaXYtPmNvYWxfaW50dmwgPSAwOworCXByaXYtPmJ1c19mcmVxX21oeiA9ICh1MzIpKGVtYWNfYnVzX2ZyZXF1ZW5jeSAvIDEwMDAwMDApOworCiAJZW1hY19kZXYgPSAmbmRldi0+ZGV2OwogCS8qIEdldCBFTUFDIHBsYXRmb3JtIGRhdGEgKi8KIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVjbGFuY2UuYyBiL2RyaXZlcnMvbmV0L2RlY2xhbmNlLmMKaW5kZXggMWQ5NzNkYi4uZDdkZTM3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVjbGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9kZWNsYW5jZS5jCkBAIC0xMDIyLDcgKzEwMjIsNyBAQAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgZGVjX2xhbmNlX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmJkZXYsIGNvbnN0IGludCB0eXBlKQorc3RhdGljIGludCBfX2RldmluaXQgZGVjX2xhbmNlX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmJkZXYsIGNvbnN0IGludCB0eXBlKQogewogCXN0YXRpYyB1bnNpZ25lZCB2ZXJzaW9uX3ByaW50ZWQ7CiAJc3RhdGljIGNvbnN0IGNoYXIgZm10W10gPSAiZGVjbGFuY2UlZCI7CkBAIC0xMzI2LDcgKzEzMjYsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1RDCi1zdGF0aWMgaW50IF9faW5pdCBkZWNfbGFuY2VfdGNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRlY19sYW5jZV90Y19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBfX2V4aXQgZGVjX2xhbmNlX3RjX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHRjX2RldmljZV9pZCBkZWNfbGFuY2VfdGNfdGFibGVbXSA9IHsKQEAgLTEzNDUsNyArMTM0NSw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGRlY19sYW5jZV90Y19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkZWNfbGFuY2VfdGNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQogewogICAgICAgICBpbnQgc3RhdHVzID0gZGVjX2xhbmNlX3Byb2JlKGRldiwgUE1BRF9MQU5DRSk7CiAgICAgICAgIGlmICghc3RhdHVzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVwY2EuYyBiL2RyaXZlcnMvbmV0L2RlcGNhLmMKaW5kZXggYmY2NmU5Yi4uNDRjMDY5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVwY2EuYworKysgYi9kcml2ZXJzL25ldC9kZXBjYS5jCkBAIC0yMDYxLDE4ICsyMDYxLDM1IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGRlcGNhX21vZHVsZV9pbml0ICh2b2lkKQogewotICAgICAgICBpbnQgZXJyID0gMDsKKwlpbnQgZXJyID0gMDsKIAogI2lmZGVmIENPTkZJR19NQ0EKLSAgICAgICAgZXJyID0gbWNhX3JlZ2lzdGVyX2RyaXZlciAoJmRlcGNhX21jYV9kcml2ZXIpOworCWVyciA9IG1jYV9yZWdpc3Rlcl9kcml2ZXIoJmRlcGNhX21jYV9kcml2ZXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0VJU0EKLSAgICAgICAgZXJyIHw9IGVpc2FfZHJpdmVyX3JlZ2lzdGVyICgmZGVwY2FfZWlzYV9kcml2ZXIpOworCWVyciA9IGVpc2FfZHJpdmVyX3JlZ2lzdGVyKCZkZXBjYV9laXNhX2RyaXZlcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfbWNhOwogI2VuZGlmCi0JZXJyIHw9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlciAoJmRlcGNhX2lzYV9kcml2ZXIpOwotCWRlcGNhX3BsYXRmb3JtX3Byb2JlICgpOworCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZGVwY2FfaXNhX2RyaXZlcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfZWlzYTsKIAotICAgICAgICByZXR1cm4gZXJyOworCWRlcGNhX3BsYXRmb3JtX3Byb2JlKCk7CisJcmV0dXJuIDA7CisKK2Vycl9laXNhOgorI2lmZGVmIENPTkZJR19FSVNBCisJZWlzYV9kcml2ZXJfdW5yZWdpc3RlcigmZGVwY2FfZWlzYV9kcml2ZXIpOworZXJyX21jYToKKyNlbmRpZgorI2lmZGVmIENPTkZJR19NQ0EKKwltY2FfdW5yZWdpc3Rlcl9kcml2ZXIoJmRlcGNhX21jYV9kcml2ZXIpOworZXJyOgorI2VuZGlmCisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGRlcGNhX21vZHVsZV9leGl0ICh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZG05MDAwLmMgYi9kcml2ZXJzL25ldC9kbTkwMDAuYwppbmRleCBhYmNjODM4Li40ZmQ2YjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbTkwMDAuYworKysgYi9kcml2ZXJzL25ldC9kbTkwMDAuYwpAQCAtOTYxLDcgKzk2MSw3IEBACiAJdTgJUnhQa3RSZWFkeTsKIAl1OAlSeFN0YXR1czsKIAlfX2xlMTYJUnhMZW47Ci19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKK30gX19wYWNrZWQ7CiAKIC8qCiAgKiAgUmVjZWl2ZWQgYSBwYWNrZXQgYW5kIHBhc3MgdG8gdXBwZXIgbGF5ZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RuZXQuYyBiL2RyaXZlcnMvbmV0L2RuZXQuYwppbmRleCA4YjBmNTBiLi43YzA3NTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvZG5ldC5jCkBAIC03OTcsNyArNzk3LDcgQEAKIAlpZiAoIXBoeWRldikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXR1cm4gcGh5X21paV9pb2N0bChwaHlkZXYsIGlmX21paShycSksIGNtZCk7CisJcmV0dXJuIHBoeV9taWlfaW9jdGwocGh5ZGV2LCBycSwgY21kKTsKIH0KIAogc3RhdGljIHZvaWQgZG5ldF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtODU0LDcgKzg1NCw3IEBACiAJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKCpicCkpOwogCWlmICghZGV2KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImV0aGVyZGV2IGFsbG9jIGZhaWxlZCwgYWJvcnRpbmcuXG4iKTsKLQkJZ290byBlcnJfb3V0OworCQlnb3RvIGVycl9vdXRfcmVsZWFzZV9tZW07CiAJfQogCiAJLyogVE9ETzogQWN0dWFsbHksIHdlIGhhdmUgc29tZSBpbnRlcmVzdGluZyBmZWF0dXJlcy4uLiAqLwpAQCAtOTExLDcgKzkxMSw4IEBACiAJaWYgKGVycikKIAkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIkNhbm5vdCByZWdpc3RlciBQSFkgYm9hcmQgZml4dXAuXG4iKTsKIAotCWlmIChkbmV0X21paV9pbml0KGJwKSAhPSAwKQorCWVyciA9IGRuZXRfbWlpX2luaXQoYnApOworCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF91bnJlZ2lzdGVyX25ldGRldjsKIAogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJEYXZlIERORVQgYXQgMHglcCAoMHglMDh4KSBpcnEgJWQgJXBNXG4iLApAQCAtOTM2LDYgKzkzNyw4IEBACiAJaW91bm1hcChicC0+cmVncyk7CiBlcnJfb3V0X2ZyZWVfZGV2OgogCWZyZWVfbmV0ZGV2KGRldik7CitlcnJfb3V0X3JlbGVhc2VfbWVtOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW1fYmFzZSwgbWVtX3NpemUpOwogZXJyX291dDoKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaCBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmgKaW5kZXggNDBiNjJiNC4uOTkyODhiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oCkBAIC04NiwxMiArODYsMTIgQEAKIC8qIFRYL1JYIGRlc2NyaXB0b3IgZGVmaW5lcyAqLwogI2RlZmluZSBFMTAwMF9ERUZBVUxUX1RYRCAgICAgICAgICAgICAgICAgIDI1NgogI2RlZmluZSBFMTAwMF9NQVhfVFhEICAgICAgICAgICAgICAgICAgICAgIDI1NgotI2RlZmluZSBFMTAwMF9NSU5fVFhEICAgICAgICAgICAgICAgICAgICAgICA4MAorI2RlZmluZSBFMTAwMF9NSU5fVFhEICAgICAgICAgICAgICAgICAgICAgICA0OAogI2RlZmluZSBFMTAwMF9NQVhfODI1NDRfVFhEICAgICAgICAgICAgICAgNDA5NgogCiAjZGVmaW5lIEUxMDAwX0RFRkFVTFRfUlhEICAgICAgICAgICAgICAgICAgMjU2CiAjZGVmaW5lIEUxMDAwX01BWF9SWEQgICAgICAgICAgICAgICAgICAgICAgMjU2Ci0jZGVmaW5lIEUxMDAwX01JTl9SWEQgICAgICAgICAgICAgICAgICAgICAgIDgwCisjZGVmaW5lIEUxMDAwX01JTl9SWEQgICAgICAgICAgICAgICAgICAgICAgIDQ4CiAjZGVmaW5lIEUxMDAwX01BWF84MjU0NF9SWEQgICAgICAgICAgICAgICA0MDk2CiAKICNkZWZpbmUgRTEwMDBfTUlOX0lUUl9VU0VDUwkJMTAgLyogMTAwMDAwIGlycS9zZWMgKi8KQEAgLTMyNCwxOCArMzI0LDIwIEBACiBleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmUxMDAwX2dldF9od19kZXYoc3RydWN0IGUxMDAwX2h3ICpodyk7CiAjZGVmaW5lIGVfZGJnKGZvcm1hdCwgYXJnLi4uKSBcCiAJbmV0ZGV2X2RiZyhlMTAwMF9nZXRfaHdfZGV2KGh3KSwgZm9ybWF0LCAjIyBhcmcpCi0jZGVmaW5lIGVfZXJyKGZvcm1hdCwgYXJnLi4uKSBcCi0JbmV0ZGV2X2VycihhZGFwdGVyLT5uZXRkZXYsIGZvcm1hdCwgIyMgYXJnKQotI2RlZmluZSBlX2luZm8oZm9ybWF0LCBhcmcuLi4pIFwKLQluZXRkZXZfaW5mbyhhZGFwdGVyLT5uZXRkZXYsIGZvcm1hdCwgIyMgYXJnKQotI2RlZmluZSBlX3dhcm4oZm9ybWF0LCBhcmcuLi4pIFwKLQluZXRkZXZfd2FybihhZGFwdGVyLT5uZXRkZXYsIGZvcm1hdCwgIyMgYXJnKQotI2RlZmluZSBlX25vdGljZShmb3JtYXQsIGFyZy4uLikgXAotCW5ldGRldl9ub3RpY2UoYWRhcHRlci0+bmV0ZGV2LCBmb3JtYXQsICMjIGFyZykKKyNkZWZpbmUgZV9lcnIobXNnbHZsLCBmb3JtYXQsIGFyZy4uLikgXAorCW5ldGlmX2VycihhZGFwdGVyLCBtc2dsdmwsIGFkYXB0ZXItPm5ldGRldiwgZm9ybWF0LCAjIyBhcmcpCisjZGVmaW5lIGVfaW5mbyhtc2dsdmwsIGZvcm1hdCwgYXJnLi4uKSBcCisJbmV0aWZfaW5mbyhhZGFwdGVyLCBtc2dsdmwsIGFkYXB0ZXItPm5ldGRldiwgZm9ybWF0LCAjIyBhcmcpCisjZGVmaW5lIGVfd2Fybihtc2dsdmwsIGZvcm1hdCwgYXJnLi4uKSBcCisJbmV0aWZfd2FybihhZGFwdGVyLCBtc2dsdmwsIGFkYXB0ZXItPm5ldGRldiwgZm9ybWF0LCAjIyBhcmcpCisjZGVmaW5lIGVfbm90aWNlKG1zZ2x2bCwgZm9ybWF0LCBhcmcuLi4pIFwKKwluZXRpZl9ub3RpY2UoYWRhcHRlciwgbXNnbHZsLCBhZGFwdGVyLT5uZXRkZXYsIGZvcm1hdCwgIyMgYXJnKQogI2RlZmluZSBlX2Rldl9pbmZvKGZvcm1hdCwgYXJnLi4uKSBcCiAJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgZm9ybWF0LCAjIyBhcmcpCiAjZGVmaW5lIGVfZGV2X3dhcm4oZm9ybWF0LCBhcmcuLi4pIFwKIAlkZXZfd2FybigmYWRhcHRlci0+cGRldi0+ZGV2LCBmb3JtYXQsICMjIGFyZykKKyNkZWZpbmUgZV9kZXZfZXJyKGZvcm1hdCwgYXJnLi4uKSBcCisJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCBmb3JtYXQsICMjIGFyZykKIAogZXh0ZXJuIGNoYXIgZTEwMDBfZHJpdmVyX25hbWVbXTsKIGV4dGVybiBjb25zdCBjaGFyIGUxMDAwX2RyaXZlcl92ZXJzaW9uW107CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMKaW5kZXggZDVmZjAyOS4uZjRkMDkyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYwpAQCAtMzQ2LDcgKzM0Niw3IEBACiAKIAluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzY7CiAKLQllX2luZm8oIlRTTyBpcyAlc1xuIiwgZGF0YSA/ICJFbmFibGVkIiA6ICJEaXNhYmxlZCIpOworCWVfaW5mbyhwcm9iZSwgIlRTTyBpcyAlc1xuIiwgZGF0YSA/ICJFbmFibGVkIiA6ICJEaXNhYmxlZCIpOwogCWFkYXB0ZXItPnRzb19mb3JjZSA9IHRydWU7CiAJcmV0dXJuIDA7CiB9CkBAIC03MTQsOSArNzE0LDkgQEAKIAkJd3JpdGVsKHdyaXRlICYgdGVzdFtpXSwgYWRkcmVzcyk7CiAJCXJlYWQgPSByZWFkbChhZGRyZXNzKTsKIAkJaWYgKHJlYWQgIT0gKHdyaXRlICYgdGVzdFtpXSAmIG1hc2spKSB7Ci0JCQllX2luZm8oInBhdHRlcm4gdGVzdCByZWcgJTA0WCBmYWlsZWQ6ICIKLQkJCSAgICAgICAiZ290IDB4JTA4WCBleHBlY3RlZCAweCUwOFhcbiIsCi0JCQkgICAgICAgcmVnLCByZWFkLCAod3JpdGUgJiB0ZXN0W2ldICYgbWFzaykpOworCQkJZV9lcnIoZHJ2LCAicGF0dGVybiB0ZXN0IHJlZyAlMDRYIGZhaWxlZDogIgorCQkJICAgICAgImdvdCAweCUwOFggZXhwZWN0ZWQgMHglMDhYXG4iLAorCQkJICAgICAgcmVnLCByZWFkLCAod3JpdGUgJiB0ZXN0W2ldICYgbWFzaykpOwogCQkJKmRhdGEgPSByZWc7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQpAQCAtNzM0LDcgKzczNCw3IEBACiAJd3JpdGVsKHdyaXRlICYgbWFzaywgYWRkcmVzcyk7CiAJcmVhZCA9IHJlYWRsKGFkZHJlc3MpOwogCWlmICgocmVhZCAmIG1hc2spICE9ICh3cml0ZSAmIG1hc2spKSB7Ci0JCWVfZXJyKCJzZXQvY2hlY2sgcmVnICUwNFggdGVzdCBmYWlsZWQ6ICIKKwkJZV9lcnIoZHJ2LCAic2V0L2NoZWNrIHJlZyAlMDRYIHRlc3QgZmFpbGVkOiAiCiAJCSAgICAgICJnb3QgMHglMDhYIGV4cGVjdGVkIDB4JTA4WFxuIiwKIAkJICAgICAgcmVnLCAocmVhZCAmIG1hc2spLCAod3JpdGUgJiBtYXNrKSk7CiAJCSpkYXRhID0gcmVnOwpAQCAtNzc5LDcgKzc3OSw3IEBACiAJZXczMihTVEFUVVMsIHRvZ2dsZSk7CiAJYWZ0ZXIgPSBlcjMyKFNUQVRVUykgJiB0b2dnbGU7CiAJaWYgKHZhbHVlICE9IGFmdGVyKSB7Ci0JCWVfZXJyKCJmYWlsZWQgU1RBVFVTIHJlZ2lzdGVyIHRlc3QgZ290OiAiCisJCWVfZXJyKGRydiwgImZhaWxlZCBTVEFUVVMgcmVnaXN0ZXIgdGVzdCBnb3Q6ICIKIAkJICAgICAgIjB4JTA4WCBleHBlY3RlZDogMHglMDhYXG4iLCBhZnRlciwgdmFsdWUpOwogCQkqZGF0YSA9IDE7CiAJCXJldHVybiAxOwpAQCAtODk0LDcgKzg5NCw4IEBACiAJCSpkYXRhID0gMTsKIAkJcmV0dXJuIC0xOwogCX0KLQllX2luZm8oInRlc3RpbmcgJXMgaW50ZXJydXB0XG4iLCAoc2hhcmVkX2ludCA/ICJzaGFyZWQiIDogInVuc2hhcmVkIikpOworCWVfaW5mbyhodywgInRlc3RpbmcgJXMgaW50ZXJydXB0XG4iLCAoc2hhcmVkX2ludCA/CisJICAgICAgICJzaGFyZWQiIDogInVuc2hhcmVkIikpOwogCiAJLyogRGlzYWJsZSBhbGwgdGhlIGludGVycnVwdHMgKi8KIAlldzMyKElNQywgMHhGRkZGRkZGRik7CkBAIC0xNTYxLDcgKzE1NjIsNyBAQAogCQl1OCBmb3JjZWRfc3BlZWRfZHVwbGV4ID0gaHctPmZvcmNlZF9zcGVlZF9kdXBsZXg7CiAJCXU4IGF1dG9uZWcgPSBody0+YXV0b25lZzsKIAotCQllX2luZm8oIm9mZmxpbmUgdGVzdGluZyBzdGFydGluZ1xuIik7CisJCWVfaW5mbyhodywgIm9mZmxpbmUgdGVzdGluZyBzdGFydGluZ1xuIik7CiAKIAkJLyogTGluayB0ZXN0IHBlcmZvcm1lZCBiZWZvcmUgaGFyZHdhcmUgcmVzZXQgc28gYXV0b25lZyBkb2Vzbid0CiAJCSAqIGludGVyZmVyZSB3aXRoIHRlc3QgcmVzdWx0ICovCkBAIC0xNjAxLDcgKzE2MDIsNyBAQAogCQlpZiAoaWZfcnVubmluZykKIAkJCWRldl9vcGVuKG5ldGRldik7CiAJfSBlbHNlIHsKLQkJZV9pbmZvKCJvbmxpbmUgdGVzdGluZyBzdGFydGluZ1xuIik7CisJCWVfaW5mbyhodywgIm9ubGluZSB0ZXN0aW5nIHN0YXJ0aW5nXG4iKTsKIAkJLyogT25saW5lIHRlc3RzICovCiAJCWlmIChlMTAwMF9saW5rX3Rlc3QoYWRhcHRlciwgJmRhdGFbNF0pKQogCQkJZXRoX3Rlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKQEAgLTE2OTQsOCArMTY5NSw4IEBACiAJCXdvbC0+c3VwcG9ydGVkICY9IH5XQUtFX1VDQVNUOwogCiAJCWlmIChhZGFwdGVyLT53b2wgJiBFMTAwMF9XVUZDX0VYKQotCQkJZV9lcnIoIkludGVyZmFjZSBkb2VzIG5vdCBzdXBwb3J0ICIKLQkJICAgICAgICAiZGlyZWN0ZWQgKHVuaWNhc3QpIGZyYW1lIHdha2UtdXAgcGFja2V0c1xuIik7CisJCQllX2VycihkcnYsICJJbnRlcmZhY2UgZG9lcyBub3Qgc3VwcG9ydCBkaXJlY3RlZCAiCisJCQkgICAgICAiKHVuaWNhc3QpIGZyYW1lIHdha2UtdXAgcGFja2V0c1xuIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMTcyNiw4ICsxNzI3LDggQEAKIAlzd2l0Y2ggKGh3LT5kZXZpY2VfaWQpIHsKIAljYXNlIEUxMDAwX0RFVl9JRF84MjU0NkdCX1FVQURfQ09QUEVSX0tTUDM6CiAJCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX1VDQVNUKSB7Ci0JCQllX2VycigiSW50ZXJmYWNlIGRvZXMgbm90IHN1cHBvcnQgIgotCQkJICAgICAgImRpcmVjdGVkICh1bmljYXN0KSBmcmFtZSB3YWtlLXVwIHBhY2tldHNcbiIpOworCQkJZV9lcnIoZHJ2LCAiSW50ZXJmYWNlIGRvZXMgbm90IHN1cHBvcnQgZGlyZWN0ZWQgIgorCQkJICAgICAgIih1bmljYXN0KSBmcmFtZSB3YWtlLXVwIHBhY2tldHNcbiIpOwogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCQl9CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCmluZGV4IDY4YTgwODkuLjAyODMzYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYworKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKQEAgLTI3NSw3ICsyNzUsNyBAQAogCWVyciA9IHJlcXVlc3RfaXJxKGFkYXB0ZXItPnBkZXYtPmlycSwgaGFuZGxlciwgaXJxX2ZsYWdzLCBuZXRkZXYtPm5hbWUsCiAJICAgICAgICAgICAgICAgICAgbmV0ZGV2KTsKIAlpZiAoZXJyKSB7Ci0JCWVfZXJyKCJVbmFibGUgdG8gYWxsb2NhdGUgaW50ZXJydXB0IEVycm9yOiAlZFxuIiwgZXJyKTsKKwkJZV9lcnIocHJvYmUsICJVbmFibGUgdG8gYWxsb2NhdGUgaW50ZXJydXB0IEVycm9yOiAlZFxuIiwgZXJyKTsKIAl9CiAKIAlyZXR1cm4gZXJyOwpAQCAtNjU3LDcgKzY1Nyw3IEBACiAJCWV3MzIoV1VDLCAwKTsKIAogCWlmIChlMTAwMF9pbml0X2h3KGh3KSkKLQkJZV9lcnIoIkhhcmR3YXJlIEVycm9yXG4iKTsKKwkJZV9kZXZfZXJyKCJIYXJkd2FyZSBFcnJvclxuIik7CiAJZTEwMDBfdXBkYXRlX21uZ192bGFuKGFkYXB0ZXIpOwogCiAJLyogaWYgKGFkYXB0ZXItPmh3ZmxhZ3MgJiBIV0ZMQUdTX1BIWV9QV1JfQklUKSB7ICovCkBAIC05MjUsNyArOTI1LDcgQEAKIAogCS8qIGluaXRpYWxpemUgZWVwcm9tIHBhcmFtZXRlcnMgKi8KIAlpZiAoZTEwMDBfaW5pdF9lZXByb21fcGFyYW1zKGh3KSkgewotCQllX2VycigiRUVQUk9NIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7CisJCWVfZXJyKHByb2JlLCAiRUVQUk9NIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyX2VlcHJvbTsKIAl9CiAKQEAgLTkzNiw3ICs5MzYsNyBAQAogCiAJLyogbWFrZSBzdXJlIHRoZSBFRVBST00gaXMgZ29vZCAqLwogCWlmIChlMTAwMF92YWxpZGF0ZV9lZXByb21fY2hlY2tzdW0oaHcpIDwgMCkgewotCQllX2VycigiVGhlIEVFUFJPTSBDaGVja3N1bSBJcyBOb3QgVmFsaWRcbiIpOworCQllX2Vycihwcm9iZSwgIlRoZSBFRVBST00gQ2hlY2tzdW0gSXMgTm90IFZhbGlkXG4iKTsKIAkJZTEwMDBfZHVtcF9lZXByb20oYWRhcHRlcik7CiAJCS8qCiAJCSAqIHNldCBNQUMgYWRkcmVzcyB0byBhbGwgemVyb2VzIHRvIGludmFsaWRhdGUgYW5kIHRlbXBvcmFyeQpAQCAtOTUwLDE0ICs5NTAsMTQgQEAKIAl9IGVsc2UgewogCQkvKiBjb3B5IHRoZSBNQUMgYWRkcmVzcyBvdXQgb2YgdGhlIEVFUFJPTSAqLwogCQlpZiAoZTEwMDBfcmVhZF9tYWNfYWRkcihodykpCi0JCQllX2VycigiRUVQUk9NIFJlYWQgRXJyb3JcbiIpOworCQkJZV9lcnIocHJvYmUsICJFRVBST00gUmVhZCBFcnJvclxuIik7CiAJfQogCS8qIGRvbid0IGJsb2NrIGluaXRhbGl6YXRpb24gaGVyZSBkdWUgdG8gYmFkIE1BQyBhZGRyZXNzICovCiAJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGh3LT5tYWNfYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CiAJbWVtY3B5KG5ldGRldi0+cGVybV9hZGRyLCBody0+bWFjX2FkZHIsIG5ldGRldi0+YWRkcl9sZW4pOwogCiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG5ldGRldi0+cGVybV9hZGRyKSkKLQkJZV9lcnIoIkludmFsaWQgTUFDIEFkZHJlc3NcbiIpOworCQllX2Vycihwcm9iZSwgIkludmFsaWQgTUFDIEFkZHJlc3NcbiIpOwogCiAJZTEwMDBfZ2V0X2J1c19pbmZvKGh3KTsKIApAQCAtMTA0Nyw3ICsxMDQ3LDcgQEAKIAkJZ290byBlcnJfcmVnaXN0ZXI7CiAKIAkvKiBwcmludCBidXMgdHlwZS9zcGVlZC93aWR0aCBpbmZvICovCi0JZV9pbmZvKCIoUENJJXM6JWRNSHo6JWQtYml0KSAlcE1cbiIsCisJZV9pbmZvKHByb2JlLCAiKFBDSSVzOiVkTUh6OiVkLWJpdCkgJXBNXG4iLAogCSAgICAgICAoKGh3LT5idXNfdHlwZSA9PSBlMTAwMF9idXNfdHlwZV9wY2l4KSA/ICItWCIgOiAiIiksCiAJICAgICAgICgoaHctPmJ1c19zcGVlZCA9PSBlMTAwMF9idXNfc3BlZWRfMTMzKSA/IDEzMyA6CiAJCShody0+YnVzX3NwZWVkID09IGUxMDAwX2J1c19zcGVlZF8xMjApID8gMTIwIDoKQEAgLTEwNTksNyArMTA1OSw3IEBACiAJLyogY2FycmllciBvZmYgcmVwb3J0aW5nIGlzIGltcG9ydGFudCB0byBldGh0b29sIGV2ZW4gQkVGT1JFIG9wZW4gKi8KIAluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCi0JZV9pbmZvKCJJbnRlbChSKSBQUk8vMTAwMCBOZXR3b3JrIENvbm5lY3Rpb25cbiIpOworCWVfaW5mbyhwcm9iZSwgIkludGVsKFIpIFBSTy8xMDAwIE5ldHdvcmsgQ29ubmVjdGlvblxuIik7CiAKIAljYXJkc19mb3VuZCsrOwogCXJldHVybiAwOwpAQCAtMTE1OSw3ICsxMTU5LDcgQEAKIAkvKiBpZGVudGlmeSB0aGUgTUFDICovCiAKIAlpZiAoZTEwMDBfc2V0X21hY190eXBlKGh3KSkgewotCQllX2VycigiVW5rbm93biBNQUMgVHlwZVxuIik7CisJCWVfZXJyKHByb2JlLCAiVW5rbm93biBNQUMgVHlwZVxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMTE5Miw3ICsxMTkyLDcgQEAKIAlhZGFwdGVyLT5udW1fcnhfcXVldWVzID0gMTsKIAogCWlmIChlMTAwMF9hbGxvY19xdWV1ZXMoYWRhcHRlcikpIHsKLQkJZV9lcnIoIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHF1ZXVlc1xuIik7CisJCWVfZXJyKHByb2JlLCAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcXVldWVzXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xMzg2LDcgKzEzODYsOCBAQAogCXNpemUgPSBzaXplb2Yoc3RydWN0IGUxMDAwX2J1ZmZlcikgKiB0eGRyLT5jb3VudDsKIAl0eGRyLT5idWZmZXJfaW5mbyA9IHZtYWxsb2Moc2l6ZSk7CiAJaWYgKCF0eGRyLT5idWZmZXJfaW5mbykgewotCQllX2VycigiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIFR4IGRlc2NyaXB0b3IgcmluZ1xuIik7CisJCWVfZXJyKHByb2JlLCAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIFR4IGRlc2NyaXB0b3IgIgorCQkgICAgICAicmluZ1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAltZW1zZXQodHhkci0+YnVmZmVyX2luZm8sIDAsIHNpemUpOwpAQCAtMTQwMSw3ICsxNDAyLDggQEAKIAlpZiAoIXR4ZHItPmRlc2MpIHsKIHNldHVwX3R4X2Rlc2NfZGllOgogCQl2ZnJlZSh0eGRyLT5idWZmZXJfaW5mbyk7Ci0JCWVfZXJyKCJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgVHggZGVzY3JpcHRvciByaW5nXG4iKTsKKwkJZV9lcnIocHJvYmUsICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgVHggZGVzY3JpcHRvciAiCisJCSAgICAgICJyaW5nXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xNDA5LDcgKzE0MTEsNyBAQAogCWlmICghZTEwMDBfY2hlY2tfNjRrX2JvdW5kKGFkYXB0ZXIsIHR4ZHItPmRlc2MsIHR4ZHItPnNpemUpKSB7CiAJCXZvaWQgKm9sZGRlc2MgPSB0eGRyLT5kZXNjOwogCQlkbWFfYWRkcl90IG9sZGRtYSA9IHR4ZHItPmRtYTsKLQkJZV9lcnIoInR4ZHIgYWxpZ24gY2hlY2sgZmFpbGVkOiAldSBieXRlcyBhdCAlcFxuIiwKKwkJZV9lcnIodHhfZXJyLCAidHhkciBhbGlnbiBjaGVjayBmYWlsZWQ6ICV1IGJ5dGVzIGF0ICVwXG4iLAogCQkgICAgICB0eGRyLT5zaXplLCB0eGRyLT5kZXNjKTsKIAkJLyogVHJ5IGFnYWluLCB3aXRob3V0IGZyZWVpbmcgdGhlIHByZXZpb3VzICovCiAJCXR4ZHItPmRlc2MgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwgdHhkci0+c2l6ZSwKQEAgLTE0MjcsNyArMTQyOSw3IEBACiAJCQkJCSAgdHhkci0+ZG1hKTsKIAkJCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIHR4ZHItPnNpemUsIG9sZGRlc2MsCiAJCQkJCSAgb2xkZG1hKTsKLQkJCWVfZXJyKCJVbmFibGUgdG8gYWxsb2NhdGUgYWxpZ25lZCBtZW1vcnkgIgorCQkJZV9lcnIocHJvYmUsICJVbmFibGUgdG8gYWxsb2NhdGUgYWxpZ25lZCBtZW1vcnkgIgogCQkJICAgICAgImZvciB0aGUgdHJhbnNtaXQgZGVzY3JpcHRvciByaW5nXG4iKTsKIAkJCXZmcmVlKHR4ZHItPmJ1ZmZlcl9pbmZvKTsKIAkJCXJldHVybiAtRU5PTUVNOwpAQCAtMTQ2MCw3ICsxNDYyLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CiAJCWVyciA9IGUxMDAwX3NldHVwX3R4X3Jlc291cmNlcyhhZGFwdGVyLCAmYWRhcHRlci0+dHhfcmluZ1tpXSk7CiAJCWlmIChlcnIpIHsKLQkJCWVfZXJyKCJBbGxvY2F0aW9uIGZvciBUeCBRdWV1ZSAldSBmYWlsZWRcbiIsIGkpOworCQkJZV9lcnIocHJvYmUsICJBbGxvY2F0aW9uIGZvciBUeCBRdWV1ZSAldSBmYWlsZWRcbiIsIGkpOwogCQkJZm9yIChpLS0gOyBpID49IDA7IGktLSkKIAkJCQllMTAwMF9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyLAogCQkJCQkJCSZhZGFwdGVyLT50eF9yaW5nW2ldKTsKQEAgLTE1ODAsNyArMTU4Miw4IEBACiAJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZTEwMDBfYnVmZmVyKSAqIHJ4ZHItPmNvdW50OwogCXJ4ZHItPmJ1ZmZlcl9pbmZvID0gdm1hbGxvYyhzaXplKTsKIAlpZiAoIXJ4ZHItPmJ1ZmZlcl9pbmZvKSB7Ci0JCWVfZXJyKCJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgUnggZGVzY3JpcHRvciByaW5nXG4iKTsKKwkJZV9lcnIocHJvYmUsICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgUnggZGVzY3JpcHRvciAiCisJCSAgICAgICJyaW5nXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW1lbXNldChyeGRyLT5idWZmZXJfaW5mbywgMCwgc2l6ZSk7CkBAIC0xNTk2LDcgKzE1OTksOCBAQAogCQkJCQlHRlBfS0VSTkVMKTsKIAogCWlmICghcnhkci0+ZGVzYykgewotCQllX2VycigiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIFJ4IGRlc2NyaXB0b3IgcmluZ1xuIik7CisJCWVfZXJyKHByb2JlLCAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIFJ4IGRlc2NyaXB0b3IgIgorCQkgICAgICAicmluZ1xuIik7CiBzZXR1cF9yeF9kZXNjX2RpZToKIAkJdmZyZWUocnhkci0+YnVmZmVyX2luZm8pOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE2MDYsNyArMTYxMCw3IEBACiAJaWYgKCFlMTAwMF9jaGVja182NGtfYm91bmQoYWRhcHRlciwgcnhkci0+ZGVzYywgcnhkci0+c2l6ZSkpIHsKIAkJdm9pZCAqb2xkZGVzYyA9IHJ4ZHItPmRlc2M7CiAJCWRtYV9hZGRyX3Qgb2xkZG1hID0gcnhkci0+ZG1hOwotCQllX2VycigicnhkciBhbGlnbiBjaGVjayBmYWlsZWQ6ICV1IGJ5dGVzIGF0ICVwXG4iLAorCQllX2VycihyeF9lcnIsICJyeGRyIGFsaWduIGNoZWNrIGZhaWxlZDogJXUgYnl0ZXMgYXQgJXBcbiIsCiAJCSAgICAgIHJ4ZHItPnNpemUsIHJ4ZHItPmRlc2MpOwogCQkvKiBUcnkgYWdhaW4sIHdpdGhvdXQgZnJlZWluZyB0aGUgcHJldmlvdXMgKi8KIAkJcnhkci0+ZGVzYyA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LCByeGRyLT5zaXplLApAQCAtMTYxNSw4ICsxNjE5LDggQEAKIAkJaWYgKCFyeGRyLT5kZXNjKSB7CiAJCQlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCByeGRyLT5zaXplLCBvbGRkZXNjLAogCQkJCQkgIG9sZGRtYSk7Ci0JCQllX2VycigiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIFJ4IGRlc2NyaXB0b3IgIgotCQkJICAgICAgInJpbmdcbiIpOworCQkJZV9lcnIocHJvYmUsICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgUnggIgorCQkJICAgICAgImRlc2NyaXB0b3IgcmluZ1xuIik7CiAJCQlnb3RvIHNldHVwX3J4X2Rlc2NfZGllOwogCQl9CiAKQEAgLTE2MjYsOCArMTYzMCw4IEBACiAJCQkJCSAgcnhkci0+ZG1hKTsKIAkJCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIHJ4ZHItPnNpemUsIG9sZGRlc2MsCiAJCQkJCSAgb2xkZG1hKTsKLQkJCWVfZXJyKCJVbmFibGUgdG8gYWxsb2NhdGUgYWxpZ25lZCBtZW1vcnkgZm9yIHRoZSBSeCAiCi0JCQkgICAgICAiZGVzY3JpcHRvciByaW5nXG4iKTsKKwkJCWVfZXJyKHByb2JlLCAiVW5hYmxlIHRvIGFsbG9jYXRlIGFsaWduZWQgbWVtb3J5IGZvciAiCisJCQkgICAgICAidGhlIFJ4IGRlc2NyaXB0b3IgcmluZ1xuIik7CiAJCQlnb3RvIHNldHVwX3J4X2Rlc2NfZGllOwogCQl9IGVsc2UgewogCQkJLyogRnJlZSBvbGQgYWxsb2NhdGlvbiwgbmV3IGFsbG9jYXRpb24gd2FzIHN1Y2Nlc3NmdWwgKi8KQEAgLTE2NTksNyArMTY2Myw3IEBACiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgewogCQllcnIgPSBlMTAwMF9zZXR1cF9yeF9yZXNvdXJjZXMoYWRhcHRlciwgJmFkYXB0ZXItPnJ4X3JpbmdbaV0pOwogCQlpZiAoZXJyKSB7Ci0JCQllX2VycigiQWxsb2NhdGlvbiBmb3IgUnggUXVldWUgJXUgZmFpbGVkXG4iLCBpKTsKKwkJCWVfZXJyKHByb2JlLCAiQWxsb2NhdGlvbiBmb3IgUnggUXVldWUgJXUgZmFpbGVkXG4iLCBpKTsKIAkJCWZvciAoaS0tIDsgaSA+PSAwOyBpLS0pCiAJCQkJZTEwMDBfZnJlZV9yeF9yZXNvdXJjZXMoYWRhcHRlciwKIAkJCQkJCQkmYWRhcHRlci0+cnhfcmluZ1tpXSk7CkBAIC0yMTEwLDcgKzIxMTQsNyBAQAogCXUzMiAqbWNhcnJheSA9IGtjYWxsb2MobXRhX3JlZ19jb3VudCwgc2l6ZW9mKHUzMiksIEdGUF9BVE9NSUMpOwogCiAJaWYgKCFtY2FycmF5KSB7Ci0JCWVfZXJyKCJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQllX2Vycihwcm9iZSwgIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTI2NDgsNyArMjY1Miw4IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmICh1bmxpa2VseShuZXRfcmF0ZWxpbWl0KCkpKQotCQkJZV93YXJuKCJjaGVja3N1bV9wYXJ0aWFsIHByb3RvPSV4IVxuIiwgc2tiLT5wcm90b2NvbCk7CisJCQllX3dhcm4oZHJ2LCAiY2hlY2tzdW1fcGFydGlhbCBwcm90bz0leCFcbiIsCisJCQkgICAgICAgc2tiLT5wcm90b2NvbCk7CiAJCWJyZWFrOwogCX0KIApAQCAtMjk5Miw3ICsyOTk3LDggQEAKIAkJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAkJCQlwdWxsX3NpemUgPSBtaW4oKHVuc2lnbmVkIGludCk0LCBza2ItPmRhdGFfbGVuKTsKIAkJCQlpZiAoIV9fcHNrYl9wdWxsX3RhaWwoc2tiLCBwdWxsX3NpemUpKSB7Ci0JCQkJCWVfZXJyKCJfX3Bza2JfcHVsbF90YWlsIGZhaWxlZC5cbiIpOworCQkJCQllX2VycihkcnYsICJfX3Bza2JfcHVsbF90YWlsICIKKwkJCQkJICAgICAgImZhaWxlZC5cbiIpOwogCQkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQkJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQkJCX0KQEAgLTMxNDAsNyArMzE0Niw3IEBACiAKIAlpZiAoKG1heF9mcmFtZSA8IE1JTklNVU1fRVRIRVJORVRfRlJBTUVfU0laRSkgfHwKIAkgICAgKG1heF9mcmFtZSA+IE1BWF9KVU1CT19GUkFNRV9TSVpFKSkgewotCQllX2VycigiSW52YWxpZCBNVFUgc2V0dGluZ1xuIik7CisJCWVfZXJyKHByb2JlLCAiSW52YWxpZCBNVFUgc2V0dGluZ1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMzE0OCw3ICszMTU0LDcgQEAKIAlzd2l0Y2ggKGh3LT5tYWNfdHlwZSkgewogCWNhc2UgZTEwMDBfdW5kZWZpbmVkIC4uLiBlMTAwMF84MjU0Ml9yZXYyXzE6CiAJCWlmIChtYXhfZnJhbWUgPiAoRVRIX0ZSQU1FX0xFTiArIEVUSF9GQ1NfTEVOKSkgewotCQkJZV9lcnIoIkp1bWJvIEZyYW1lcyBub3Qgc3VwcG9ydGVkLlxuIik7CisJCQllX2Vycihwcm9iZSwgIkp1bWJvIEZyYW1lcyBub3Qgc3VwcG9ydGVkLlxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlicmVhazsKQEAgLTM1MDAsNyArMzUwNiw3IEBACiAJCSAgICAhKGVyMzIoU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19UWE9GRikpIHsKIAogCQkJLyogZGV0ZWN0ZWQgVHggdW5pdCBoYW5nICovCi0JCQllX2VycigiRGV0ZWN0ZWQgVHggVW5pdCBIYW5nXG4iCisJCQllX2VycihkcnYsICJEZXRlY3RlZCBUeCBVbml0IEhhbmdcbiIKIAkJCSAgICAgICIgIFR4IFF1ZXVlICAgICAgICAgICAgIDwlbHU+XG4iCiAJCQkgICAgICAiICBUREggICAgICAgICAgICAgICAgICA8JXg+XG4iCiAJCQkgICAgICAiICBURFQgICAgICAgICAgICAgICAgICA8JXg+XG4iCkBAIC0zNzQ5LDcgKzM3NTUsNyBAQAogCiAJCS8qIGV0aCB0eXBlIHRyYW5zIG5lZWRzIHNrYi0+ZGF0YSB0byBwb2ludCB0byBzb21ldGhpbmcgKi8KIAkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgRVRIX0hMRU4pKSB7Ci0JCQllX2VycigicHNrYl9tYXlfcHVsbCBmYWlsZWQuXG4iKTsKKwkJCWVfZXJyKGRydiwgInBza2JfbWF5X3B1bGwgZmFpbGVkLlxuIik7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQlnb3RvIG5leHRfZGVzYzsKIAkJfQpAQCAtMzg3NCw3ICszODgwLDcgQEAKIAogCQlpZiAoYWRhcHRlci0+ZGlzY2FyZGluZykgewogCQkJLyogQWxsIHJlY2VpdmVzIG11c3QgZml0IGludG8gYSBzaW5nbGUgYnVmZmVyICovCi0JCQllX2luZm8oIlJlY2VpdmUgcGFja2V0IGNvbnN1bWVkIG11bHRpcGxlIGJ1ZmZlcnNcbiIpOworCQkJZV9kYmcoIlJlY2VpdmUgcGFja2V0IGNvbnN1bWVkIG11bHRpcGxlIGJ1ZmZlcnNcbiIpOwogCQkJLyogcmVjeWNsZSAqLwogCQkJYnVmZmVyX2luZm8tPnNrYiA9IHNrYjsKIAkJCWlmIChzdGF0dXMgJiBFMTAwMF9SWERfU1RBVF9FT1ApCkBAIC0zOTg2LDggKzM5OTIsOCBAQAogCQkvKiBGaXggZm9yIGVycmF0YSAyMywgY2FuJ3QgY3Jvc3MgNjRrQiBib3VuZGFyeSAqLwogCQlpZiAoIWUxMDAwX2NoZWNrXzY0a19ib3VuZChhZGFwdGVyLCBza2ItPmRhdGEsIGJ1ZnN6KSkgewogCQkJc3RydWN0IHNrX2J1ZmYgKm9sZHNrYiA9IHNrYjsKLQkJCWVfZXJyKCJza2IgYWxpZ24gY2hlY2sgZmFpbGVkOiAldSBieXRlcyBhdCAlcFxuIiwKLQkJCSAgICAgIGJ1ZnN6LCBza2ItPmRhdGEpOworCQkJZV9lcnIocnhfZXJyLCAic2tiIGFsaWduIGNoZWNrIGZhaWxlZDogJXUgYnl0ZXMgYXQgIgorCQkJICAgICAgIiVwXG4iLCBidWZzeiwgc2tiLT5kYXRhKTsKIAkJCS8qIFRyeSBhZ2Fpbiwgd2l0aG91dCBmcmVlaW5nIHRoZSBwcmV2aW91cyAqLwogCQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYl9pcF9hbGlnbihuZXRkZXYsIGJ1ZnN6KTsKIAkJCS8qIEZhaWxlZCBhbGxvY2F0aW9uLCBjcml0aWNhbCBmYWlsdXJlICovCkBAIC00MDk1LDggKzQxMDEsOCBAQAogCQkvKiBGaXggZm9yIGVycmF0YSAyMywgY2FuJ3QgY3Jvc3MgNjRrQiBib3VuZGFyeSAqLwogCQlpZiAoIWUxMDAwX2NoZWNrXzY0a19ib3VuZChhZGFwdGVyLCBza2ItPmRhdGEsIGJ1ZnN6KSkgewogCQkJc3RydWN0IHNrX2J1ZmYgKm9sZHNrYiA9IHNrYjsKLQkJCWVfZXJyKCJza2IgYWxpZ24gY2hlY2sgZmFpbGVkOiAldSBieXRlcyBhdCAlcFxuIiwKLQkJCSAgICAgIGJ1ZnN6LCBza2ItPmRhdGEpOworCQkJZV9lcnIocnhfZXJyLCAic2tiIGFsaWduIGNoZWNrIGZhaWxlZDogJXUgYnl0ZXMgYXQgIgorCQkJICAgICAgIiVwXG4iLCBidWZzeiwgc2tiLT5kYXRhKTsKIAkJCS8qIFRyeSBhZ2Fpbiwgd2l0aG91dCBmcmVlaW5nIHRoZSBwcmV2aW91cyAqLwogCQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYl9pcF9hbGlnbihuZXRkZXYsIGJ1ZnN6KTsKIAkJCS8qIEZhaWxlZCBhbGxvY2F0aW9uLCBjcml0aWNhbCBmYWlsdXJlICovCkBAIC00MTQxLDggKzQxNDcsOCBAQAogCQlpZiAoIWUxMDAwX2NoZWNrXzY0a19ib3VuZChhZGFwdGVyLAogCQkJCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWJ1ZmZlcl9pbmZvLT5kbWEsCiAJCQkJCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4pKSB7Ci0JCQllX2VycigiZG1hIGFsaWduIGNoZWNrIGZhaWxlZDogJXUgYnl0ZXMgYXQgJXBcbiIsCi0JCQkgICAgICBhZGFwdGVyLT5yeF9idWZmZXJfbGVuLAorCQkJZV9lcnIocnhfZXJyLCAiZG1hIGFsaWduIGNoZWNrIGZhaWxlZDogJXUgYnl0ZXMgYXQgIgorCQkJICAgICAgIiVwXG4iLCBhZGFwdGVyLT5yeF9idWZmZXJfbGVuLAogCQkJICAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylidWZmZXJfaW5mby0+ZG1hKTsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwpAQCAtNDM1NSw3ICs0MzYxLDcgQEAKIAlpbnQgcmV0X3ZhbCA9IHBjaV9zZXRfbXdpKGFkYXB0ZXItPnBkZXYpOwogCiAJaWYgKHJldF92YWwpCi0JCWVfZXJyKCJFcnJvciBpbiBzZXR0aW5nIE1XSVxuIik7CisJCWVfZXJyKHByb2JlLCAiRXJyb3IgaW4gc2V0dGluZyBNV0lcbiIpOwogfQogCiB2b2lkIGUxMDAwX3BjaV9jbGVhcl9td2koc3RydWN0IGUxMDAwX2h3ICpodykKQEAgLTQ0ODYsNyArNDQ5Miw3IEBACiAJLyogRmliZXIgTklDcyBvbmx5IGFsbG93IDEwMDAgZ2JwcyBGdWxsIGR1cGxleCAqLwogCWlmICgoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikgJiYKIAkJc3BkZHBseCAhPSAoU1BFRURfMTAwMCArIERVUExFWF9GVUxMKSkgewotCQllX2VycigiVW5zdXBwb3J0ZWQgU3BlZWQvRHVwbGV4IGNvbmZpZ3VyYXRpb25cbiIpOworCQllX2Vycihwcm9iZSwgIlVuc3VwcG9ydGVkIFNwZWVkL0R1cGxleCBjb25maWd1cmF0aW9uXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00NTA5LDcgKzQ1MTUsNyBAQAogCQlicmVhazsKIAljYXNlIFNQRUVEXzEwMDAgKyBEVVBMRVhfSEFMRjogLyogbm90IHN1cHBvcnRlZCAqLwogCWRlZmF1bHQ6Ci0JCWVfZXJyKCJVbnN1cHBvcnRlZCBTcGVlZC9EdXBsZXggY29uZmlndXJhdGlvblxuIik7CisJCWVfZXJyKHByb2JlLCAiVW5zdXBwb3J0ZWQgU3BlZWQvRHVwbGV4IGNvbmZpZ3VyYXRpb25cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvODI1NzEuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCmluZGV4IGY2NTRkYjkuLmE0YTBkMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCBQUk8vMTAwMCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9kZWZpbmVzLmggYi9kcml2ZXJzL25ldC9lMTAwMGUvZGVmaW5lcy5oCmluZGV4IDRkYzAyYzcuLjMwN2E3MmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvZGVmaW5lcy5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9kZWZpbmVzLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIFBSTy8xMDAwIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzU5LDYgKzM1OSw3IEBACiAjZGVmaW5lIEUxMDAwX0VYVENORl9DVFJMX0xDRF9XUklURV9FTkFCTEUgICAgICAgMHgwMDAwMDAwMQogI2RlZmluZSBFMTAwMF9FWFRDTkZfQ1RSTF9PRU1fV1JJVEVfRU5BQkxFICAgICAgIDB4MDAwMDAwMDgKICNkZWZpbmUgRTEwMDBfRVhUQ05GX0NUUkxfU1dGTEFHICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEUxMDAwX0VYVENORl9DVFJMX0dBVEVfUEhZX0NGRyAgICAgICAgICAgMHgwMDAwMDA4MAogI2RlZmluZSBFMTAwMF9FWFRDTkZfU0laRV9FWFRfUENJRV9MRU5HVEhfTUFTSyAgIDB4MDBGRjAwMDAKICNkZWZpbmUgRTEwMDBfRVhUQ05GX1NJWkVfRVhUX1BDSUVfTEVOR1RIX1NISUZUICAgICAgICAgIDE2CiAjZGVmaW5lIEUxMDAwX0VYVENORl9DVFJMX0VYVF9DTkZfUE9JTlRFUl9NQVNLICAgMHgwRkZGMDAwMApAQCAtNzE0LDYgKzcxNSw3IEBACiAjZGVmaW5lIEJNRTEwMDBfRV9QSFlfSURfUjIgIDB4MDE0MTBDQjEKICNkZWZpbmUgSTgyNTc3X0VfUEhZX0lEICAgICAgMHgwMTU0MDA1MAogI2RlZmluZSBJODI1NzhfRV9QSFlfSUQgICAgICAweDAwNEREMDQwCisjZGVmaW5lIEk4MjU3OV9FX1BIWV9JRCAgICAgIDB4MDE1NDAwOTAKIAogLyogTTg4RTEwMDAgU3BlY2lmaWMgUmVnaXN0ZXJzICovCiAjZGVmaW5lIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwgICAgIDB4MTAgIC8qIFBIWSBTcGVjaWZpYyBDb250cm9sIFJlZ2lzdGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaCBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCmluZGV4IGMwYjNkYjQuLmY5YTMxYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCBQUk8vMTAwMCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTE2NCw2ICsxNjQsNyBAQAogCWJvYXJkX2ljaDlsYW4sCiAJYm9hcmRfaWNoMTBsYW4sCiAJYm9hcmRfcGNobGFuLAorCWJvYXJkX3BjaDJsYW4sCiB9OwogCiBzdHJ1Y3QgZTEwMDBfcXVldWVfc3RhdHMgewpAQCAtMzQ3LDYgKzM0OCw3IEBACiAJdTMyIHRlc3RfaWNyOwogCiAJdTMyIG1zZ19lbmFibGU7CisJdW5zaWduZWQgaW50IG51bV92ZWN0b3JzOwogCXN0cnVjdCBtc2l4X2VudHJ5ICptc2l4X2VudHJpZXM7CiAJaW50IGludF9tb2RlOwogCXUzMiBlaWFjX21hc2s7CkBAIC00MjEsNiArNDIzLDggQEAKICNkZWZpbmUgRkxBRzJfSEFTX1BIWV9XQUtFVVAgICAgICAgICAgICAgICgxIDw8IDEpCiAjZGVmaW5lIEZMQUcyX0lTX0RJU0NBUkRJTkcgICAgICAgICAgICAgICAoMSA8PCAyKQogI2RlZmluZSBGTEFHMl9ESVNBQkxFX0FTUE1fTDEgICAgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgRkxBRzJfSEFTX1BIWV9TVEFUUyAgICAgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIEZMQUcyX0hBU19FRUUgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQogCiAjZGVmaW5lIEUxMDAwX1JYX0RFU0NfUFMoUiwgaSkJICAgIFwKIAkoJigoKHVuaW9uIGUxMDAwX3J4X2Rlc2NfcGFja2V0X3NwbGl0ICopKChSKS5kZXNjKSlbaV0pKQpAQCAtNDU4LDcgKzQ2Miw2IEBACiBleHRlcm4gdm9pZCBlMTAwMGVfZnJlZV9yeF9yZXNvdXJjZXMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIHZvaWQgZTEwMDBlX2ZyZWVfdHhfcmVzb3VyY2VzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiB2b2lkIGUxMDAwZV91cGRhdGVfc3RhdHMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwotZXh0ZXJuIGJvb2wgZTEwMDBlX2hhc19saW5rKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiB2b2lkIGUxMDAwZV9zZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIHZvaWQgZTEwMDBlX3Jlc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiB2b2lkIGUxMDAwZV9kaXNhYmxlX2FzcG0oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUxNiBzdGF0ZSk7CkBAIC00NzYsNiArNDc5LDcgQEAKIGV4dGVybiBzdHJ1Y3QgZTEwMDBfaW5mbyBlMTAwMF9pY2g5X2luZm87CiBleHRlcm4gc3RydWN0IGUxMDAwX2luZm8gZTEwMDBfaWNoMTBfaW5mbzsKIGV4dGVybiBzdHJ1Y3QgZTEwMDBfaW5mbyBlMTAwMF9wY2hfaW5mbzsKK2V4dGVybiBzdHJ1Y3QgZTEwMDBfaW5mbyBlMTAwMF9wY2gyX2luZm87CiBleHRlcm4gc3RydWN0IGUxMDAwX2luZm8gZTEwMDBfZXMyX2luZm87CiAKIGV4dGVybiBzMzIgZTEwMDBlX3JlYWRfcGJhX251bShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgKnBiYV9udW0pOwpAQCAtNDk0LDYgKzQ5OCw4IEBACiBleHRlcm4gdm9pZCBlMTAwMGVfZ2lnX2Rvd25zaGlmdF93b3JrYXJvdW5kX2ljaDhsYW4oc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gdm9pZCBlMTAwMGVfZGlzYWJsZV9naWdfd29sX2ljaDhsYW4oc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gczMyIGUxMDAwX2NvbmZpZ3VyZV9rMV9pY2g4bGFuKHN0cnVjdCBlMTAwMF9odyAqaHcsIGJvb2wgazFfZW5hYmxlKTsKK2V4dGVybiBzMzIgZTEwMDBfbHZfanVtYm9fd29ya2Fyb3VuZF9pY2g4bGFuKHN0cnVjdCBlMTAwMF9odyAqaHcsIGJvb2wgZW5hYmxlKTsKK2V4dGVybiB2b2lkIGUxMDAwX2NvcHlfcnhfYWRkcnNfdG9fcGh5X2ljaDhsYW4oc3RydWN0IGUxMDAwX2h3ICpodyk7CiAKIGV4dGVybiBzMzIgZTEwMDBlX2NoZWNrX2Zvcl9jb3BwZXJfbGluayhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIGV4dGVybiBzMzIgZTEwMDBlX2NoZWNrX2Zvcl9maWJlcl9saW5rKHN0cnVjdCBlMTAwMF9odyAqaHcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2VzMmxhbi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL2VzMmxhbi5jCmluZGV4IDM4ZDc5YTYuLjQ1YWViYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9lczJsYW4uYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvZXMybGFuLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIFBSTy8xMDAwIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ldGh0b29sLmMKaW5kZXggMmM1MjEyMS4uNjM1NWExYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCBQUk8vMTAwMCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTExOCw3ICsxMTgsNiBAQAogewogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCXUzMiBzdGF0dXM7CiAKIAlpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB7CiAKQEAgLTE1NiwyMiArMTU1LDI5IEBACiAJCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKIAl9CiAKLQlzdGF0dXMgPSBlcjMyKFNUQVRVUyk7Ci0JaWYgKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19MVSkgewotCQlpZiAoc3RhdHVzICYgRTEwMDBfU1RBVFVTX1NQRUVEXzEwMDApCi0JCQllY21kLT5zcGVlZCA9IDEwMDA7Ci0JCWVsc2UgaWYgKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19TUEVFRF8xMDApCi0JCQllY21kLT5zcGVlZCA9IDEwMDsKLQkJZWxzZQotCQkJZWNtZC0+c3BlZWQgPSAxMDsKKwllY21kLT5zcGVlZCA9IC0xOworCWVjbWQtPmR1cGxleCA9IC0xOwogCi0JCWlmIChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfRkQpCi0JCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKLQkJZWxzZQotCQkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQlpZiAobmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CisJCQllY21kLT5zcGVlZCA9IGFkYXB0ZXItPmxpbmtfc3BlZWQ7CisJCQllY21kLT5kdXBsZXggPSBhZGFwdGVyLT5saW5rX2R1cGxleCAtIDE7CisJCX0KIAl9IGVsc2UgewotCQllY21kLT5zcGVlZCA9IC0xOwotCQllY21kLT5kdXBsZXggPSAtMTsKKwkJdTMyIHN0YXR1cyA9IGVyMzIoU1RBVFVTKTsKKwkJaWYgKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19MVSkgeworCQkJaWYgKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19TUEVFRF8xMDAwKQorCQkJCWVjbWQtPnNwZWVkID0gMTAwMDsKKwkJCWVsc2UgaWYgKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19TUEVFRF8xMDApCisJCQkJZWNtZC0+c3BlZWQgPSAxMDA7CisJCQllbHNlCisJCQkJZWNtZC0+c3BlZWQgPSAxMDsKKworCQkJaWYgKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19GRCkKKwkJCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJCWVsc2UKKwkJCQllY21kLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKKwkJfQogCX0KIAogCWVjbWQtPmF1dG9uZWcgPSAoKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyKSB8fApAQCAtMTc5LDcgKzE4NSw3IEBACiAKIAkvKiBNREktWCA9PiAyOyBNREkgPT4xOyBJbnZhbGlkID0+MCAqLwogCWlmICgoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSAmJgotCSAgICAhaHctPm1hYy5nZXRfbGlua19zdGF0dXMpCisJICAgIG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkKIAkJZWNtZC0+ZXRoX3RwX21kaXggPSBody0+cGh5LmlzX21kaXggPyBFVEhfVFBfTURJX1ggOgogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVUSF9UUF9NREk7CiAJZWxzZQpAQCAtMTkxLDE5ICsxOTcsMTUgQEAKIHN0YXRpYyB1MzIgZTEwMDBfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGUxMDAwX21hY19pbmZvICptYWMgPSAmYWRhcHRlci0+aHcubWFjOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAKIAkvKgotCSAqIElmIHRoZSBsaW5rIGlzIG5vdCByZXBvcnRlZCB1cCB0byBuZXRkZXYsIGludGVycnVwdHMgYXJlIGRpc2FibGVkLAotCSAqIGFuZCBzbyB0aGUgcGh5c2ljYWwgbGluayBzdGF0ZSBtYXkgaGF2ZSBjaGFuZ2VkIHNpbmNlIHdlIGxhc3QKLQkgKiBsb29rZWQuIFNldCBnZXRfbGlua19zdGF0dXMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHRydWUgbGluawotCSAqIHN0YXRlIGlzIGludGVycm9nYXRlZCwgcmF0aGVyIHRoYW4gcHVsbGluZyBhIGNhY2hlZCBhbmQgcG9zc2libHkKLQkgKiBzdGFsZSBsaW5rIHN0YXRlIGZyb20gdGhlIGRyaXZlci4KKwkgKiBBdm9pZCB0b3VjaGluZyBoYXJkd2FyZSByZWdpc3RlcnMgd2hlbiBwb3NzaWJsZSwgb3RoZXJ3aXNlCisJICogbGluayBuZWdvdGlhdGlvbiBjYW4gZ2V0IG1lc3NlZCB1cCB3aGVuIHVzZXItbGV2ZWwgc2NyaXB0cworCSAqIGFyZSByYXBpZGx5IHBvbGxpbmcgdGhlIGRyaXZlciB0byBzZWUgaWYgbGluayBpcyB1cC4KIAkgKi8KLQlpZiAoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkKLQkJbWFjLT5nZXRfbGlua19zdGF0dXMgPSAxOwotCi0JcmV0dXJuIGUxMDAwZV9oYXNfbGluayhhZGFwdGVyKTsKKwlyZXR1cm4gbmV0aWZfcnVubmluZyhuZXRkZXYpID8gbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpIDoKKwkgICAgISEoZXIzMihTVEFUVVMpICYgRTEwMDBfU1RBVFVTX0xVKTsKIH0KIAogc3RhdGljIGludCBlMTAwMF9zZXRfc3BkX2RwbHgoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBzcGRkcGx4KQpAQCAtODgwLDYgKzg4Miw3IEBACiAJc3dpdGNoIChtYWMtPnR5cGUpIHsKIAljYXNlIGUxMDAwX2ljaDEwbGFuOgogCWNhc2UgZTEwMDBfcGNobGFuOgorCWNhc2UgZTEwMDBfcGNoMmxhbjoKIAkJbWFzayB8PSAoMSA8PCAxOCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xMjYzLDMzICsxMjY2LDM2IEBACiAKIAlody0+bWFjLmF1dG9uZWcgPSAwOwogCi0JLyogV29ya2Fyb3VuZDogSzEgbXVzdCBiZSBkaXNhYmxlZCBmb3Igc3RhYmxlIDFHYnBzIG9wZXJhdGlvbiAqLwotCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfcGNobGFuKQotCQllMTAwMF9jb25maWd1cmVfazFfaWNoOGxhbihodywgZmFsc2UpOworCWlmIChody0+cGh5LnR5cGUgPT0gZTEwMDBfcGh5X2lmZSkgeworCQkvKiBmb3JjZSAxMDAsIHNldCBsb29wYmFjayAqLworCQllMWVfd3BoeShodywgUEhZX0NPTlRST0wsIDB4NjEwMCk7CiAKLQlpZiAoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV9tODgpIHsKKwkJLyogTm93IHNldCB1cCB0aGUgTUFDIHRvIHRoZSBzYW1lIHNwZWVkL2R1cGxleCBhcyB0aGUgUEhZLiAqLworCQljdHJsX3JlZyA9IGVyMzIoQ1RSTCk7CisJCWN0cmxfcmVnICY9IH5FMTAwMF9DVFJMX1NQRF9TRUw7IC8qIENsZWFyIHRoZSBzcGVlZCBzZWwgYml0cyAqLworCQljdHJsX3JlZyB8PSAoRTEwMDBfQ1RSTF9GUkNTUEQgfCAvKiBTZXQgdGhlIEZvcmNlIFNwZWVkIEJpdCAqLworCQkJICAgICBFMTAwMF9DVFJMX0ZSQ0RQWCB8IC8qIFNldCB0aGUgRm9yY2UgRHVwbGV4IEJpdCAqLworCQkJICAgICBFMTAwMF9DVFJMX1NQRF8xMDAgfC8qIEZvcmNlIFNwZWVkIHRvIDEwMCAqLworCQkJICAgICBFMTAwMF9DVFJMX0ZEKTsJIC8qIEZvcmNlIER1cGxleCB0byBGVUxMICovCisKKwkJZXczMihDVFJMLCBjdHJsX3JlZyk7CisJCXVkZWxheSg1MDApOworCisJCXJldHVybiAwOworCX0KKworCS8qIFNwZWNpZmljIFBIWSBjb25maWd1cmF0aW9uIGZvciBsb29wYmFjayAqLworCXN3aXRjaCAoaHctPnBoeS50eXBlKSB7CisJY2FzZSBlMTAwMF9waHlfbTg4OgogCQkvKiBBdXRvLU1ESS9NRElYIE9mZiAqLwogCQllMWVfd3BoeShodywgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTCwgMHgwODA4KTsKIAkJLyogcmVzZXQgdG8gdXBkYXRlIEF1dG8tTURJL01ESVggKi8KIAkJZTFlX3dwaHkoaHcsIFBIWV9DT05UUk9MLCAweDkxNDApOwogCQkvKiBhdXRvbmVnIG9mZiAqLwogCQllMWVfd3BoeShodywgUEhZX0NPTlRST0wsIDB4ODE0MCk7Ci0JfSBlbHNlIGlmIChody0+cGh5LnR5cGUgPT0gZTEwMDBfcGh5X2dnODI1NjMpCisJCWJyZWFrOworCWNhc2UgZTEwMDBfcGh5X2dnODI1NjM6CiAJCWUxZV93cGh5KGh3LCBHRzgyNTYzX1BIWV9LTVJOX01PREVfQ1RSTCwgMHgxQ0MpOwotCi0JY3RybF9yZWcgPSBlcjMyKENUUkwpOwotCi0Jc3dpdGNoIChody0+cGh5LnR5cGUpIHsKLQljYXNlIGUxMDAwX3BoeV9pZmU6Ci0JCS8qIGZvcmNlIDEwMCwgc2V0IGxvb3BiYWNrICovCi0JCWUxZV93cGh5KGh3LCBQSFlfQ09OVFJPTCwgMHg2MTAwKTsKLQotCQkvKiBOb3cgc2V0IHVwIHRoZSBNQUMgdG8gdGhlIHNhbWUgc3BlZWQvZHVwbGV4IGFzIHRoZSBQSFkuICovCi0JCWN0cmxfcmVnICY9IH5FMTAwMF9DVFJMX1NQRF9TRUw7IC8qIENsZWFyIHRoZSBzcGVlZCBzZWwgYml0cyAqLwotCQljdHJsX3JlZyB8PSAoRTEwMDBfQ1RSTF9GUkNTUEQgfCAvKiBTZXQgdGhlIEZvcmNlIFNwZWVkIEJpdCAqLwotCQkJICAgICBFMTAwMF9DVFJMX0ZSQ0RQWCB8IC8qIFNldCB0aGUgRm9yY2UgRHVwbGV4IEJpdCAqLwotCQkJICAgICBFMTAwMF9DVFJMX1NQRF8xMDAgfC8qIEZvcmNlIFNwZWVkIHRvIDEwMCAqLwotCQkJICAgICBFMTAwMF9DVFJMX0ZEKTsJIC8qIEZvcmNlIER1cGxleCB0byBGVUxMICovCiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfcGh5X2JtOgogCQkvKiBTZXQgRGVmYXVsdCBNQUMgSW50ZXJmYWNlIHNwZWVkIHRvIDFHQiAqLwpAQCAtMTMxMiwyNCArMTMxOCw0MiBAQAogCQkvKiBTZXQgRWFybHkgTGluayBFbmFibGUgKi8KIAkJZTFlX3JwaHkoaHcsIFBIWV9SRUcoNzY5LCAyMCksICZwaHlfcmVnKTsKIAkJZTFlX3dwaHkoaHcsIFBIWV9SRUcoNzY5LCAyMCksIHBoeV9yZWcgfCAweDA0MDApOwotCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJYnJlYWs7CisJY2FzZSBlMTAwMF9waHlfODI1Nzc6CisJY2FzZSBlMTAwMF9waHlfODI1Nzg6CisJCS8qIFdvcmthcm91bmQ6IEsxIG11c3QgYmUgZGlzYWJsZWQgZm9yIHN0YWJsZSAxR2JwcyBvcGVyYXRpb24gKi8KKwkJZTEwMDBfY29uZmlndXJlX2sxX2ljaDhsYW4oaHcsIGZhbHNlKTsKKwkJYnJlYWs7CisJY2FzZSBlMTAwMF9waHlfODI1Nzk6CisJCS8qIERpc2FibGUgUEhZIGVuZXJneSBkZXRlY3QgcG93ZXIgZG93biAqLworCQllMWVfcnBoeShodywgUEhZX1JFRygwLCAyMSksICZwaHlfcmVnKTsKKwkJZTFlX3dwaHkoaHcsIFBIWV9SRUcoMCwgMjEpLCBwaHlfcmVnICYgfigxIDw8IDMpKTsKKwkJLyogRGlzYWJsZSBmdWxsIGNoaXAgZW5lcmd5IGRldGVjdCAqLworCQllMWVfcnBoeShodywgUEhZX1JFRyg3NzYsIDE4KSwgJnBoeV9yZWcpOworCQllMWVfd3BoeShodywgUEhZX1JFRyg3NzYsIDE4KSwgcGh5X3JlZyB8IDEpOworCQkvKiBFbmFibGUgbG9vcGJhY2sgb24gdGhlIFBIWSAqLworI2RlZmluZSBJODI1NzdfUEhZX0xCS19DVFJMICAgICAgICAgIDE5CisJCWUxZV93cGh5KGh3LCBJODI1NzdfUEhZX0xCS19DVFJMLCAweDgwMDEpOworCQlicmVhazsKIAlkZWZhdWx0OgotCQkvKiBmb3JjZSAxMDAwLCBzZXQgbG9vcGJhY2sgKi8KLQkJZTFlX3dwaHkoaHcsIFBIWV9DT05UUk9MLCAweDQxNDApOwotCQltZGVsYXkoMjUwKTsKLQotCQkvKiBOb3cgc2V0IHVwIHRoZSBNQUMgdG8gdGhlIHNhbWUgc3BlZWQvZHVwbGV4IGFzIHRoZSBQSFkuICovCi0JCWN0cmxfcmVnID0gZXIzMihDVFJMKTsKLQkJY3RybF9yZWcgJj0gfkUxMDAwX0NUUkxfU1BEX1NFTDsgLyogQ2xlYXIgdGhlIHNwZWVkIHNlbCBiaXRzICovCi0JCWN0cmxfcmVnIHw9IChFMTAwMF9DVFJMX0ZSQ1NQRCB8IC8qIFNldCB0aGUgRm9yY2UgU3BlZWQgQml0ICovCi0JCQkgICAgIEUxMDAwX0NUUkxfRlJDRFBYIHwgLyogU2V0IHRoZSBGb3JjZSBEdXBsZXggQml0ICovCi0JCQkgICAgIEUxMDAwX0NUUkxfU1BEXzEwMDAgfC8qIEZvcmNlIFNwZWVkIHRvIDEwMDAgKi8KLQkJCSAgICAgRTEwMDBfQ1RSTF9GRCk7CSAvKiBGb3JjZSBEdXBsZXggdG8gRlVMTCAqLwotCi0JCWlmIChhZGFwdGVyLT5mbGFncyAmIEZMQUdfSVNfSUNIKQotCQkJY3RybF9yZWcgfD0gRTEwMDBfQ1RSTF9TTFU7CS8qIFNldCBMaW5rIFVwICovCisJCWJyZWFrOwogCX0KIAorCS8qIGZvcmNlIDEwMDAsIHNldCBsb29wYmFjayAqLworCWUxZV93cGh5KGh3LCBQSFlfQ09OVFJPTCwgMHg0MTQwKTsKKwltZGVsYXkoMjUwKTsKKworCS8qIE5vdyBzZXQgdXAgdGhlIE1BQyB0byB0aGUgc2FtZSBzcGVlZC9kdXBsZXggYXMgdGhlIFBIWS4gKi8KKwljdHJsX3JlZyA9IGVyMzIoQ1RSTCk7CisJY3RybF9yZWcgJj0gfkUxMDAwX0NUUkxfU1BEX1NFTDsgLyogQ2xlYXIgdGhlIHNwZWVkIHNlbCBiaXRzICovCisJY3RybF9yZWcgfD0gKEUxMDAwX0NUUkxfRlJDU1BEIHwgLyogU2V0IHRoZSBGb3JjZSBTcGVlZCBCaXQgKi8KKwkJICAgICBFMTAwMF9DVFJMX0ZSQ0RQWCB8IC8qIFNldCB0aGUgRm9yY2UgRHVwbGV4IEJpdCAqLworCQkgICAgIEUxMDAwX0NUUkxfU1BEXzEwMDAgfC8qIEZvcmNlIFNwZWVkIHRvIDEwMDAgKi8KKwkJICAgICBFMTAwMF9DVFJMX0ZEKTsJIC8qIEZvcmNlIER1cGxleCB0byBGVUxMICovCisKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX0lTX0lDSCkKKwkJY3RybF9yZWcgfD0gRTEwMDBfQ1RSTF9TTFU7CS8qIFNldCBMaW5rIFVwICovCisKIAlpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyICYmCiAJICAgIGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfbTg4KSB7CiAJCWN0cmxfcmVnIHw9IEUxMDAwX0NUUkxfSUxPUzsgLyogSW52ZXJ0IExvc3Mgb2YgU2lnbmFsICovCkBAIC0xODY4LDYgKzE4OTIsNyBAQAogCiAJaWYgKChody0+cGh5LnR5cGUgPT0gZTEwMDBfcGh5X2lmZSkgfHwKIAkgICAgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2hsYW4pIHx8CisJICAgIChody0+bWFjLnR5cGUgPT0gZTEwMDBfcGNoMmxhbikgfHwKIAkgICAgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU4MykgfHwKIAkgICAgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NCkpIHsKIAkJSU5JVF9XT1JLKCZhZGFwdGVyLT5sZWRfYmxpbmtfdGFzaywgZTEwMDBlX2xlZF9ibGlua190YXNrKTsKQEAgLTIwMjYsNyArMjA1MSw2IEBACiAJLmdldF9jb2FsZXNjZQkJPSBlMTAwMF9nZXRfY29hbGVzY2UsCiAJLnNldF9jb2FsZXNjZQkJPSBlMTAwMF9zZXRfY29hbGVzY2UsCiAJLmdldF9mbGFncwkJPSBldGh0b29sX29wX2dldF9mbGFncywKLQkuc2V0X2ZsYWdzCQk9IGV0aHRvb2xfb3Bfc2V0X2ZsYWdzLAogfTsKIAogdm9pZCBlMTAwMGVfc2V0X2V0aHRvb2xfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvaHcuaCBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ody5oCmluZGV4IDVkMTIyMGQuLjY2ZWQwOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9ody5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ody5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCBQUk8vMTAwMCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTIxNyw3ICsyMTcsMTAgQEAKIAlFMTAwMF9TV1NNICAgICAgPSAweDA1QjUwLCAvKiBTVyBTZW1hcGhvcmUgKi8KIAlFMTAwMF9GV1NNICAgICAgPSAweDA1QjU0LCAvKiBGVyBTZW1hcGhvcmUgKi8KIAlFMTAwMF9TV1NNMiAgICAgPSAweDA1QjU4LCAvKiBEcml2ZXItb25seSBTVyBzZW1hcGhvcmUgKi8KLQlFMTAwMF9DUkNfT0ZGU0VUID0gMHgwNUY1MCwgLyogQ1JDIE9mZnNldCByZWdpc3RlciAqLworCUUxMDAwX0ZGTFRfREJHICA9IDB4MDVGMDQsIC8qIERlYnVnIFJlZ2lzdGVyICovCisJRTEwMDBfUENIX1JBSUNDX0JBU0UgPSAweDA1RjUwLCAvKiBSZWNlaXZlIEFkZHJlc3MgSW5pdGlhbCBDUkMgKi8KKyNkZWZpbmUgRTEwMDBfUENIX1JBSUNDKF9uKQkoRTEwMDBfUENIX1JBSUNDX0JBU0UgKyAoKF9uKSAqIDQpKQorI2RlZmluZSBFMTAwMF9DUkNfT0ZGU0VUCUUxMDAwX1BDSF9SQUlDQ19CQVNFCiAJRTEwMDBfSElDUiAgICAgID0gMHgwOEYwMCwgLyogSG9zdCBJbnRlcmZhY2UgQ29udHJvbCAqLwogfTsKIApAQCAtMzAzLDEzICszMDYsMTQgQEAKICNkZWZpbmUgRTEwMDBfS01STkNUUkxTVEFfT0ZGU0VUCTB4MDAxRjAwMDAKICNkZWZpbmUgRTEwMDBfS01STkNUUkxTVEFfT0ZGU0VUX1NISUZUCTE2CiAjZGVmaW5lIEUxMDAwX0tNUk5DVFJMU1RBX1JFTgkJMHgwMDIwMDAwMAorI2RlZmluZSBFMTAwMF9LTVJOQ1RSTFNUQV9DVFJMX09GRlNFVAkweDEgICAgLyogS3VtZXJhbiBDb250cm9sICovCiAjZGVmaW5lIEUxMDAwX0tNUk5DVFJMU1RBX0RJQUdfT0ZGU0VUCTB4MyAgICAvKiBLdW1lcmFuIERpYWdub3N0aWMgKi8KICNkZWZpbmUgRTEwMDBfS01STkNUUkxTVEFfVElNRU9VVFMJMHg0ICAgIC8qIEt1bWVyYW4gVGltZW91dHMgKi8KICNkZWZpbmUgRTEwMDBfS01STkNUUkxTVEFfSU5CQU5EX1BBUkFNCTB4OSAgICAvKiBLdW1lcmFuIEluQmFuZCBQYXJhbWV0ZXJzICovCiAjZGVmaW5lIEUxMDAwX0tNUk5DVFJMU1RBX0RJQUdfTkVMUEJLCTB4MTAwMCAvKiBOZWFyZW5kIExvb3BiYWNrIG1vZGUgKi8KICNkZWZpbmUgRTEwMDBfS01STkNUUkxTVEFfSzFfQ09ORklHCTB4NwotI2RlZmluZSBFMTAwMF9LTVJOQ1RSTFNUQV9LMV9FTkFCTEUJMHgxNDBFCi0jZGVmaW5lIEUxMDAwX0tNUk5DVFJMU1RBX0sxX0RJU0FCTEUJMHgxNDAwCisjZGVmaW5lIEUxMDAwX0tNUk5DVFJMU1RBX0sxX0VOQUJMRQkweDAwMDIKKyNkZWZpbmUgRTEwMDBfS01STkNUUkxTVEFfSERfQ1RSTAkweDEwICAgLyogS3VtZXJhbiBIRCBDb250cm9sICovCiAKICNkZWZpbmUgSUZFX1BIWV9FWFRFTkRFRF9TVEFUVVNfQ09OVFJPTAkweDEwCiAjZGVmaW5lIElGRV9QSFlfU1BFQ0lBTF9DT05UUk9MCQkweDExIC8qIDEwMEJhc2VUeCBQSFkgU3BlY2lhbCBDb250cm9sICovCkBAIC0zODcsNiArMzkxLDggQEAKICNkZWZpbmUgRTEwMDBfREVWX0lEX1BDSF9NX0hWX0xDCQkweDEwRUIKICNkZWZpbmUgRTEwMDBfREVWX0lEX1BDSF9EX0hWX0RNCQkweDEwRUYKICNkZWZpbmUgRTEwMDBfREVWX0lEX1BDSF9EX0hWX0RDCQkweDEwRjAKKyNkZWZpbmUgRTEwMDBfREVWX0lEX1BDSDJfTFZfTE0JCQkweDE1MDIKKyNkZWZpbmUgRTEwMDBfREVWX0lEX1BDSDJfTFZfVgkJCTB4MTUwMwogCiAjZGVmaW5lIEUxMDAwX1JFVklTSU9OXzQgNAogCkBAIC00MDYsNiArNDEyLDcgQEAKIAllMTAwMF9pY2g5bGFuLAogCWUxMDAwX2ljaDEwbGFuLAogCWUxMDAwX3BjaGxhbiwKKwllMTAwMF9wY2gybGFuLAogfTsKIAogZW51bSBlMTAwMF9tZWRpYV90eXBlIHsKQEAgLTQ0Miw2ICs0NDksNyBAQAogCWUxMDAwX3BoeV9ibSwKIAllMTAwMF9waHlfODI1NzgsCiAJZTEwMDBfcGh5XzgyNTc3LAorCWUxMDAwX3BoeV84MjU3OSwKIH07CiAKIGVudW0gZTEwMDBfYnVzX3dpZHRoIHsKQEAgLTkyOSw2ICs5MzcsNyBAQAogCWJvb2wga21ybl9sb2NrX2xvc3Nfd29ya2Fyb3VuZF9lbmFibGVkOwogCXN0cnVjdCBlMTAwMF9zaGFkb3dfcmFtIHNoYWRvd19yYW1bRTEwMDBfSUNIOF9TSEFET1dfUkFNX1dPUkRTXTsKIAlib29sIG52bV9rMV9lbmFibGVkOworCWJvb2wgZWVlX2Rpc2FibGU7CiB9OwogCiBzdHJ1Y3QgZTEwMDBfaHcgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMKaW5kZXggYjI1MDdkOS4uNjM5MzBkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCBQUk8vMTAwMCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTUyLDYgKzUyLDggQEAKICAqIDgyNTc3TEMgR2lnYWJpdCBOZXR3b3JrIENvbm5lY3Rpb24KICAqIDgyNTc4RE0gR2lnYWJpdCBOZXR3b3JrIENvbm5lY3Rpb24KICAqIDgyNTc4REMgR2lnYWJpdCBOZXR3b3JrIENvbm5lY3Rpb24KKyAqIDgyNTc5TE0gR2lnYWJpdCBOZXR3b3JrIENvbm5lY3Rpb24KKyAqIDgyNTc5ViBHaWdhYml0IE5ldHdvcmsgQ29ubmVjdGlvbgogICovCiAKICNpbmNsdWRlICJlMTAwMC5oIgpAQCAtMTI2LDYgKzEyOCwxMyBAQAogI2RlZmluZSBIVl9TTUJfQUREUl9QRUNfRU4gICAgIDB4MDIwMAogI2RlZmluZSBIVl9TTUJfQUREUl9WQUxJRCAgICAgIDB4MDA4MAogCisvKiBQSFkgUG93ZXIgTWFuYWdlbWVudCBDb250cm9sICovCisjZGVmaW5lIEhWX1BNX0NUUkwJCVBIWV9SRUcoNzcwLCAxNykKKworLyogUEhZIExvdyBQb3dlciBJZGxlIENvbnRyb2wgKi8KKyNkZWZpbmUgSTgyNTc5X0xQSV9DVFJMCQkJUEhZX1JFRyg3NzIsIDIwKQorI2RlZmluZSBJODI1NzlfTFBJX0NUUkxfRU5BQkxFX01BU0sJMHg2MDAwCisKIC8qIFN0cmFwcGluZyBPcHRpb24gUmVnaXN0ZXIgLSBSTyAqLwogI2RlZmluZSBFMTAwMF9TVFJBUCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEMKICNkZWZpbmUgRTEwMDBfU1RSQVBfU01CVVNfQUREUkVTU19NQVNLICAweDAwRkUwMDAwCkBAIC0yMjYsNiArMjM1LDggQEAKIHN0YXRpYyB2b2lkIGUxMDAwX2xhbl9pbml0X2RvbmVfaWNoOGxhbihzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHN0YXRpYyBzMzIgIGUxMDAwX2sxX2dpZ193b3JrYXJvdW5kX2h2KHN0cnVjdCBlMTAwMF9odyAqaHcsIGJvb2wgbGluayk7CiBzdGF0aWMgczMyIGUxMDAwX3NldF9tZGlvX3Nsb3dfbW9kZV9odihzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3N0YXRpYyBib29sIGUxMDAwX2NoZWNrX21uZ19tb2RlX2ljaDhsYW4oc3RydWN0IGUxMDAwX2h3ICpodyk7CitzdGF0aWMgYm9vbCBlMTAwMF9jaGVja19tbmdfbW9kZV9wY2hsYW4oc3RydWN0IGUxMDAwX2h3ICpodyk7CiAKIHN0YXRpYyBpbmxpbmUgdTE2IF9fZXIxNmZsYXNoKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmVnKQogewpAQCAtMjc3LDEzICsyODgsMTMgQEAKIAlwaHktPm9wcy5wb3dlcl9kb3duICAgICAgICAgICA9IGUxMDAwX3Bvd2VyX2Rvd25fcGh5X2NvcHBlcl9pY2g4bGFuOwogCXBoeS0+YXV0b25lZ19tYXNrICAgICAgICAgICAgID0gQVVUT05FR19BRFZFUlRJU0VfU1BFRURfREVGQVVMVDsKIAorCS8qCisJICogVGhlIE1BQy1QSFkgaW50ZXJjb25uZWN0IG1heSBzdGlsbCBiZSBpbiBTTUJ1cyBtb2RlCisJICogYWZ0ZXIgU3gtPlMwLiAgSWYgdGhlIG1hbmFnZWFiaWxpdHkgZW5naW5lIChNRSkgaXMKKwkgKiBkaXNhYmxlZCwgdGhlbiB0b2dnbGUgdGhlIExBTlBIWVBDIFZhbHVlIGJpdCB0byBmb3JjZQorCSAqIHRoZSBpbnRlcmNvbm5lY3QgdG8gUENJZSBtb2RlLgorCSAqLwogCWlmICghKGVyMzIoRldTTSkgJiBFMTAwMF9JQ0hfRldTTV9GV19WQUxJRCkpIHsKLQkJLyoKLQkJICogVGhlIE1BQy1QSFkgaW50ZXJjb25uZWN0IG1heSBzdGlsbCBiZSBpbiBTTUJ1cyBtb2RlCi0JCSAqIGFmdGVyIFN4LT5TMC4gIFRvZ2dsZSB0aGUgTEFOUEhZUEMgVmFsdWUgYml0IHRvIGZvcmNlCi0JCSAqIHRoZSBpbnRlcmNvbm5lY3QgdG8gUENJZSBtb2RlLCBidXQgb25seSBpZiB0aGVyZSBpcyBubwotCQkgKiBmaXJtd2FyZSBwcmVzZW50IG90aGVyd2lzZSBmaXJtd2FyZSB3aWxsIGhhdmUgZG9uZSBpdC4KLQkJICovCiAJCWN0cmwgPSBlcjMyKENUUkwpOwogCQljdHJsIHw9ICBFMTAwMF9DVFJMX0xBTlBIWVBDX09WRVJSSURFOwogCQljdHJsICY9IH5FMTAwMF9DVFJMX0xBTlBIWVBDX1ZBTFVFOwpAQCAtMzI0LDYgKzMzNSw3IEBACiAKIAlzd2l0Y2ggKHBoeS0+dHlwZSkgewogCWNhc2UgZTEwMDBfcGh5XzgyNTc3OgorCWNhc2UgZTEwMDBfcGh5XzgyNTc5OgogCQlwaHktPm9wcy5jaGVja19wb2xhcml0eSA9IGUxMDAwX2NoZWNrX3BvbGFyaXR5XzgyNTc3OwogCQlwaHktPm9wcy5mb3JjZV9zcGVlZF9kdXBsZXggPQogCQkJZTEwMDBfcGh5X2ZvcmNlX3NwZWVkX2R1cGxleF84MjU3NzsKQEAgLTUxNSw2ICs1MjcsOCBAQAogCWNhc2UgZTEwMDBfaWNoOGxhbjoKIAljYXNlIGUxMDAwX2ljaDlsYW46CiAJY2FzZSBlMTAwMF9pY2gxMGxhbjoKKwkJLyogY2hlY2sgbWFuYWdlbWVudCBtb2RlICovCisJCW1hYy0+b3BzLmNoZWNrX21uZ19tb2RlID0gZTEwMDBfY2hlY2tfbW5nX21vZGVfaWNoOGxhbjsKIAkJLyogSUQgTEVEIGluaXQgKi8KIAkJbWFjLT5vcHMuaWRfbGVkX2luaXQgPSBlMTAwMGVfaWRfbGVkX2luaXQ7CiAJCS8qIHNldHVwIExFRCAqLwpAQCAtNTI2LDYgKzU0MCw5IEBACiAJCW1hYy0+b3BzLmxlZF9vZmYgPSBlMTAwMF9sZWRfb2ZmX2ljaDhsYW47CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfcGNobGFuOgorCWNhc2UgZTEwMDBfcGNoMmxhbjoKKwkJLyogY2hlY2sgbWFuYWdlbWVudCBtb2RlICovCisJCW1hYy0+b3BzLmNoZWNrX21uZ19tb2RlID0gZTEwMDBfY2hlY2tfbW5nX21vZGVfcGNobGFuOwogCQkvKiBJRCBMRUQgaW5pdCAqLwogCQltYWMtPm9wcy5pZF9sZWRfaW5pdCA9IGUxMDAwX2lkX2xlZF9pbml0X3BjaGxhbjsKIAkJLyogc2V0dXAgTEVEICovCkBAIC01NDQsMTAgKzU2MSw0NyBAQAogCWlmIChtYWMtPnR5cGUgPT0gZTEwMDBfaWNoOGxhbikKIAkJZTEwMDBlX3NldF9rbXJuX2xvY2tfbG9zc193b3JrYXJvdW5kX2ljaDhsYW4oaHcsIHRydWUpOwogCisJLyogRGlzYWJsZSBQSFkgY29uZmlndXJhdGlvbiBieSBoYXJkd2FyZSwgY29uZmlnIGJ5IHNvZnR3YXJlICovCisJaWYgKG1hYy0+dHlwZSA9PSBlMTAwMF9wY2gybGFuKSB7CisJCXUzMiBleHRjbmZfY3RybCA9IGVyMzIoRVhUQ05GX0NUUkwpOworCisJCWV4dGNuZl9jdHJsIHw9IEUxMDAwX0VYVENORl9DVFJMX0dBVEVfUEhZX0NGRzsKKwkJZXczMihFWFRDTkZfQ1RSTCwgZXh0Y25mX2N0cmwpOworCX0KKwogCXJldHVybiAwOwogfQogCiAvKioKKyAqICBlMTAwMF9zZXRfZWVlX3BjaGxhbiAtIEVuYWJsZS9kaXNhYmxlIEVFRSBzdXBwb3J0CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgRW5hYmxlL2Rpc2FibGUgRUVFIGJhc2VkIG9uIHNldHRpbmcgaW4gZGV2X3NwZWMgc3RydWN0dXJlLiAgVGhlIGJpdHMgaW4KKyAqICB0aGUgTFBJIENvbnRyb2wgcmVnaXN0ZXIgd2lsbCByZW1haW4gc2V0IG9ubHkgaWYvd2hlbiBsaW5rIGlzIHVwLgorICoqLworc3RhdGljIHMzMiBlMTAwMF9zZXRfZWVlX3BjaGxhbihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXMzMiByZXRfdmFsID0gMDsKKwl1MTYgcGh5X3JlZzsKKworCWlmIChody0+cGh5LnR5cGUgIT0gZTEwMDBfcGh5XzgyNTc5KQorCQlnb3RvIG91dDsKKworCXJldF92YWwgPSBlMWVfcnBoeShodywgSTgyNTc5X0xQSV9DVFJMLCAmcGh5X3JlZyk7CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0OworCisJaWYgKGh3LT5kZXZfc3BlYy5pY2g4bGFuLmVlZV9kaXNhYmxlKQorCQlwaHlfcmVnICY9IH5JODI1NzlfTFBJX0NUUkxfRU5BQkxFX01BU0s7CisJZWxzZQorCQlwaHlfcmVnIHw9IEk4MjU3OV9MUElfQ1RSTF9FTkFCTEVfTUFTSzsKKworCXJldF92YWwgPSBlMWVfd3BoeShodywgSTgyNTc5X0xQSV9DVFJMLCBwaHlfcmVnKTsKK291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCiAgKiAgZTEwMDBfY2hlY2tfZm9yX2NvcHBlcl9saW5rX2ljaDhsYW4gLSBDaGVjayBmb3IgbGluayAoQ29wcGVyKQogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgpAQCAtNjA0LDYgKzY1OCwxMSBAQAogCSAqLwogCWUxMDAwZV9jaGVja19kb3duc2hpZnQoaHcpOwogCisJLyogRW5hYmxlL0Rpc2FibGUgRUVFIGFmdGVyIGxpbmsgdXAgKi8KKwlyZXRfdmFsID0gZTEwMDBfc2V0X2VlZV9wY2hsYW4oaHcpOworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dDsKKwogCS8qCiAJICogSWYgd2UgYXJlIGZvcmNpbmcgc3BlZWQvZHVwbGV4LCB0aGVuIHdlIHNpbXBseSByZXR1cm4gc2luY2UKIAkgKiB3ZSBoYXZlIGFscmVhZHkgZGV0ZXJtaW5lZCB3aGV0aGVyIHdlIGhhdmUgbGluayBvciBub3QuCkBAIC02NDcsMTAgKzcwNiwxOSBAQAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2hsYW4pCi0JCXJjID0gZTEwMDBfaW5pdF9waHlfcGFyYW1zX3BjaGxhbihodyk7Ci0JZWxzZQorCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF9pY2g4bGFuOgorCWNhc2UgZTEwMDBfaWNoOWxhbjoKKwljYXNlIGUxMDAwX2ljaDEwbGFuOgogCQlyYyA9IGUxMDAwX2luaXRfcGh5X3BhcmFtc19pY2g4bGFuKGh3KTsKKwkJYnJlYWs7CisJY2FzZSBlMTAwMF9wY2hsYW46CisJY2FzZSBlMTAwMF9wY2gybGFuOgorCQlyYyA9IGUxMDAwX2luaXRfcGh5X3BhcmFtc19wY2hsYW4oaHcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTY2Myw2ICs3MzEsMTAgQEAKIAkgICAgKGFkYXB0ZXItPmh3LnBoeS50eXBlID09IGUxMDAwX3BoeV9pZ3BfMykpCiAJCWFkYXB0ZXItPmZsYWdzIHw9IEZMQUdfTFNDX0dJR19TUEVFRF9EUk9QOwogCisJLyogRGlzYWJsZSBFRUUgYnkgZGVmYXVsdCB1bnRpbCBJRUVFODAyLjNheiBzcGVjIGlzIGZpbmFsaXplZCAqLworCWlmIChhZGFwdGVyLT5mbGFnczIgJiBGTEFHMl9IQVNfRUVFKQorCQlhZGFwdGVyLT5ody5kZXZfc3BlYy5pY2g4bGFuLmVlZV9kaXNhYmxlID0gdHJ1ZTsKKwogCXJldHVybiAwOwogfQogCkBAIC03NzQsNyArODQ2LDcgQEAKICAqICBlMTAwMF9jaGVja19tbmdfbW9kZV9pY2g4bGFuIC0gQ2hlY2tzIG1hbmFnZW1lbnQgbW9kZQogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgotICogIFRoaXMgY2hlY2tzIGlmIHRoZSBhZGFwdGVyIGhhcyBtYW5hZ2VhYmlsaXR5IGVuYWJsZWQuCisgKiAgVGhpcyBjaGVja3MgaWYgdGhlIGFkYXB0ZXIgaGFzIGFueSBtYW5hZ2VhYmlsaXR5IGVuYWJsZWQuCiAgKiAgVGhpcyBpcyBhIGZ1bmN0aW9uIHBvaW50ZXIgZW50cnkgcG9pbnQgb25seSBjYWxsZWQgYnkgcmVhZC93cml0ZQogICogIHJvdXRpbmVzIGZvciB0aGUgUEhZIGFuZCBOVk0gcGFydHMuCiAgKiovCkBAIC03ODMsOSArODU1LDI2IEBACiAJdTMyIGZ3c207CiAKIAlmd3NtID0gZXIzMihGV1NNKTsKKwlyZXR1cm4gKGZ3c20gJiBFMTAwMF9JQ0hfRldTTV9GV19WQUxJRCkgJiYKKwkgICAgICAgKChmd3NtICYgRTEwMDBfRldTTV9NT0RFX01BU0spID09CisJCShFMTAwMF9JQ0hfTU5HX0lBTVRfTU9ERSA8PCBFMTAwMF9GV1NNX01PREVfU0hJRlQpKTsKK30KIAotCXJldHVybiAoZndzbSAmIEUxMDAwX0ZXU01fTU9ERV9NQVNLKSA9PQotCQkoRTEwMDBfSUNIX01OR19JQU1UX01PREUgPDwgRTEwMDBfRldTTV9NT0RFX1NISUZUKTsKKy8qKgorICogIGUxMDAwX2NoZWNrX21uZ19tb2RlX3BjaGxhbiAtIENoZWNrcyBtYW5hZ2VtZW50IG1vZGUKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBUaGlzIGNoZWNrcyBpZiB0aGUgYWRhcHRlciBoYXMgaUFNVCBlbmFibGVkLgorICogIFRoaXMgaXMgYSBmdW5jdGlvbiBwb2ludGVyIGVudHJ5IHBvaW50IG9ubHkgY2FsbGVkIGJ5IHJlYWQvd3JpdGUKKyAqICByb3V0aW5lcyBmb3IgdGhlIFBIWSBhbmQgTlZNIHBhcnRzLgorICoqLworc3RhdGljIGJvb2wgZTEwMDBfY2hlY2tfbW5nX21vZGVfcGNobGFuKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJdTMyIGZ3c207CisKKwlmd3NtID0gZXIzMihGV1NNKTsKKwlyZXR1cm4gKGZ3c20gJiBFMTAwMF9JQ0hfRldTTV9GV19WQUxJRCkgJiYKKwkgICAgICAgKGZ3c20gJiAoRTEwMDBfSUNIX01OR19JQU1UX01PREUgPDwgRTEwMDBfRldTTV9NT0RFX1NISUZUKSk7CiB9CiAKIC8qKgpAQCAtODIwLDE0ICs5MDksNiBAQAogCXMzMiByZXRfdmFsID0gMDsKIAl1MTYgd29yZF9hZGRyLCByZWdfZGF0YSwgcmVnX2FkZHIsIHBoeV9wYWdlID0gMDsKIAotCWlmICghKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9pY2g4bGFuICYmIHBoeS0+dHlwZSA9PSBlMTAwMF9waHlfaWdwXzMpICYmCi0JCSEoaHctPm1hYy50eXBlID09IGUxMDAwX3BjaGxhbikpCi0JCXJldHVybiByZXRfdmFsOwotCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmUoaHcpOwotCWlmIChyZXRfdmFsKQotCQlyZXR1cm4gcmV0X3ZhbDsKLQogCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgUEhZIGZyb20gdGhlIE5WTSBvbiBJQ0ggcGxhdGZvcm1zLiAgVGhpcwogCSAqIGlzIG5lZWRlZCBkdWUgdG8gYW4gaXNzdWUgd2hlcmUgdGhlIE5WTSBjb25maWd1cmF0aW9uIGlzCkBAIC04MzUsMTIgKzkxNiwyNyBAQAogCSAqIFRoZXJlZm9yZSwgYWZ0ZXIgZWFjaCBQSFkgcmVzZXQsIHdlIHdpbGwgbG9hZCB0aGUKIAkgKiBjb25maWd1cmF0aW9uIGRhdGEgb3V0IG9mIHRoZSBOVk0gbWFudWFsbHkuCiAJICovCi0JaWYgKChhZGFwdGVyLT5wZGV2LT5kZXZpY2UgPT0gRTEwMDBfREVWX0lEX0lDSDhfSUdQX01fQU1UKSB8fAotCSAgICAoYWRhcHRlci0+cGRldi0+ZGV2aWNlID09IEUxMDAwX0RFVl9JRF9JQ0g4X0lHUF9NKSB8fAotCSAgICAoaHctPm1hYy50eXBlID09IGUxMDAwX3BjaGxhbikpCisJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwljYXNlIGUxMDAwX2ljaDhsYW46CisJCWlmIChwaHktPnR5cGUgIT0gZTEwMDBfcGh5X2lncF8zKQorCQkJcmV0dXJuIHJldF92YWw7CisKKwkJaWYgKGFkYXB0ZXItPnBkZXYtPmRldmljZSA9PSBFMTAwMF9ERVZfSURfSUNIOF9JR1BfQU1UKSB7CisJCQlzd19jZmdfbWFzayA9IEUxMDAwX0ZFWFROVk1fU1dfQ09ORklHOworCQkJYnJlYWs7CisJCX0KKwkJLyogRmFsbC10aHJ1ICovCisJY2FzZSBlMTAwMF9wY2hsYW46CisJY2FzZSBlMTAwMF9wY2gybGFuOgogCQlzd19jZmdfbWFzayA9IEUxMDAwX0ZFWFROVk1fU1dfQ09ORklHX0lDSDhNOwotCWVsc2UKLQkJc3dfY2ZnX21hc2sgPSBFMTAwMF9GRVhUTlZNX1NXX0NPTkZJRzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIHJldF92YWw7CisJfQorCisJcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmUoaHcpOworCWlmIChyZXRfdmFsKQorCQlyZXR1cm4gcmV0X3ZhbDsKIAogCWRhdGEgPSBlcjMyKEZFWFROVk0pOwogCWlmICghKGRhdGEgJiBzd19jZmdfbWFzaykpCkBAIC04NTEsOCArOTQ3LDEwIEBACiAJICogZXh0ZW5kZWQgY29uZmlndXJhdGlvbiBiZWZvcmUgU1cgY29uZmlndXJhdGlvbgogCSAqLwogCWRhdGEgPSBlcjMyKEVYVENORl9DVFJMKTsKLQlpZiAoZGF0YSAmIEUxMDAwX0VYVENORl9DVFJMX0xDRF9XUklURV9FTkFCTEUpCi0JCWdvdG8gb3V0OworCWlmICghKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2gybGFuKSkgeworCQlpZiAoZGF0YSAmIEUxMDAwX0VYVENORl9DVFJMX0xDRF9XUklURV9FTkFCTEUpCisJCQlnb3RvIG91dDsKKwl9CiAKIAljbmZfc2l6ZSA9IGVyMzIoRVhUQ05GX1NJWkUpOwogCWNuZl9zaXplICY9IEUxMDAwX0VYVENORl9TSVpFX0VYVF9QQ0lFX0xFTkdUSF9NQVNLOwpAQCAtODY0LDcgKzk2Miw4IEBACiAJY25mX2Jhc2VfYWRkciA+Pj0gRTEwMDBfRVhUQ05GX0NUUkxfRVhUX0NORl9QT0lOVEVSX1NISUZUOwogCiAJaWYgKCEoZGF0YSAmIEUxMDAwX0VYVENORl9DVFJMX09FTV9XUklURV9FTkFCTEUpICYmCi0JICAgIChody0+bWFjLnR5cGUgPT0gZTEwMDBfcGNobGFuKSkgeworCSAgICAoKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2hsYW4pIHx8CisJICAgICAoaHctPm1hYy50eXBlID09IGUxMDAwX3BjaDJsYW4pKSkgewogCQkvKgogCQkgKiBIVyBjb25maWd1cmVzIHRoZSBTTUJ1cyBhZGRyZXNzIGFuZCBMRURzIHdoZW4gdGhlCiAJCSAqIE9FTSBhbmQgTENEIFdyaXRlIEVuYWJsZSBiaXRzIGFyZSBzZXQgaW4gdGhlIE5WTS4KQEAgLTEwNzEsMTYgKzExNzAsMTggQEAKIAl1MzIgbWFjX3JlZzsKIAl1MTYgb2VtX3JlZzsKIAotCWlmIChody0+bWFjLnR5cGUgIT0gZTEwMDBfcGNobGFuKQorCWlmICgoaHctPm1hYy50eXBlICE9IGUxMDAwX3BjaDJsYW4pICYmIChody0+bWFjLnR5cGUgIT0gZTEwMDBfcGNobGFuKSkKIAkJcmV0dXJuIHJldF92YWw7CiAKIAlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZShodyk7CiAJaWYgKHJldF92YWwpCiAJCXJldHVybiByZXRfdmFsOwogCi0JbWFjX3JlZyA9IGVyMzIoRVhUQ05GX0NUUkwpOwotCWlmIChtYWNfcmVnICYgRTEwMDBfRVhUQ05GX0NUUkxfT0VNX1dSSVRFX0VOQUJMRSkKLQkJZ290byBvdXQ7CisJaWYgKCEoaHctPm1hYy50eXBlID09IGUxMDAwX3BjaDJsYW4pKSB7CisJCW1hY19yZWcgPSBlcjMyKEVYVENORl9DVFJMKTsKKwkJaWYgKG1hY19yZWcgJiBFMTAwMF9FWFRDTkZfQ1RSTF9PRU1fV1JJVEVfRU5BQkxFKQorCQkJZ290byBvdXQ7CisJfQogCiAJbWFjX3JlZyA9IGVyMzIoRkVYVE5WTSk7CiAJaWYgKCEobWFjX3JlZyAmIEUxMDAwX0ZFWFROVk1fU1dfQ09ORklHX0lDSDhNKSkKQEAgLTEyMjEsNiArMTMyMiwyNDMgQEAKIH0KIAogLyoqCisgKiAgZTEwMDBfY29weV9yeF9hZGRyc190b19waHlfaWNoOGxhbiAtIENvcHkgUnggYWRkcmVzc2VzIGZyb20gTUFDIHRvIFBIWQorICogIEBodzogICBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqKi8KK3ZvaWQgZTEwMDBfY29weV9yeF9hZGRyc190b19waHlfaWNoOGxhbihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXUzMiBtYWNfcmVnOworCXUxNiBpOworCisJLyogQ29weSBib3RoIFJBTC9IIChyYXJfZW50cnlfY291bnQpIGFuZCBTSFJBTC9IICgrNCkgdG8gUEhZICovCisJZm9yIChpID0gMDsgaSA8IChody0+bWFjLnJhcl9lbnRyeV9jb3VudCArIDQpOyBpKyspIHsKKwkJbWFjX3JlZyA9IGVyMzIoUkFMKGkpKTsKKwkJZTFlX3dwaHkoaHcsIEJNX1JBUl9MKGkpLCAodTE2KShtYWNfcmVnICYgMHhGRkZGKSk7CisJCWUxZV93cGh5KGh3LCBCTV9SQVJfTShpKSwgKHUxNikoKG1hY19yZWcgPj4gMTYpICYgMHhGRkZGKSk7CisJCW1hY19yZWcgPSBlcjMyKFJBSChpKSk7CisJCWUxZV93cGh5KGh3LCBCTV9SQVJfSChpKSwgKHUxNikobWFjX3JlZyAmIDB4RkZGRikpOworCQllMWVfd3BoeShodywgQk1fUkFSX0NUUkwoaSksICh1MTYpKChtYWNfcmVnID4+IDE2KSAmIDB4ODAwMCkpOworCX0KK30KKworc3RhdGljIHUzMiBlMTAwMF9jYWxjX3J4X2RhX2NyYyh1OCBtYWNbXSkKK3sKKwl1MzIgcG9seSA9IDB4RURCODgzMjA7CS8qIFBvbHlub21pYWwgZm9yIDgwMi4zIENSQyBjYWxjdWxhdGlvbiAqLworCXUzMiBpLCBqLCBtYXNrLCBjcmM7CisKKwljcmMgPSAweGZmZmZmZmZmOworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKKwkJY3JjID0gY3JjIF4gbWFjW2ldOworCQlmb3IgKGogPSA4OyBqID4gMDsgai0tKSB7CisJCQltYXNrID0gKGNyYyAmIDEpICogKC0xKTsKKwkJCWNyYyA9IChjcmMgPj4gMSkgXiAocG9seSAmIG1hc2spOworCQl9CisJfQorCXJldHVybiB+Y3JjOworfQorCisvKioKKyAqICBlMTAwMF9sdl9qdW1ib193b3JrYXJvdW5kX2ljaDhsYW4gLSByZXF1aXJlZCBmb3IganVtYm8gZnJhbWUgb3BlcmF0aW9uCisgKiAgd2l0aCA4MjU3OSBQSFkKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBlbmFibGU6IGZsYWcgdG8gZW5hYmxlL2Rpc2FibGUgd29ya2Fyb3VuZCB3aGVuIGVuYWJsaW5nL2Rpc2FibGluZyBqdW1ib3MKKyAqKi8KK3MzMiBlMTAwMF9sdl9qdW1ib193b3JrYXJvdW5kX2ljaDhsYW4oc3RydWN0IGUxMDAwX2h3ICpodywgYm9vbCBlbmFibGUpCit7CisJczMyIHJldF92YWwgPSAwOworCXUxNiBwaHlfcmVnLCBkYXRhOworCXUzMiBtYWNfcmVnOworCXUxNiBpOworCisJaWYgKGh3LT5tYWMudHlwZSAhPSBlMTAwMF9wY2gybGFuKQorCQlnb3RvIG91dDsKKworCS8qIGRpc2FibGUgUnggcGF0aCB3aGlsZSBlbmFibGluZy9kaXNhYmxpbmcgd29ya2Fyb3VuZCAqLworCWUxZV9ycGh5KGh3LCBQSFlfUkVHKDc2OSwgMjApLCAmcGh5X3JlZyk7CisJcmV0X3ZhbCA9IGUxZV93cGh5KGh3LCBQSFlfUkVHKDc2OSwgMjApLCBwaHlfcmVnIHwgKDEgPDwgMTQpKTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXQ7CisKKwlpZiAoZW5hYmxlKSB7CisJCS8qCisJCSAqIFdyaXRlIFJ4IGFkZHJlc3NlcyAocmFyX2VudHJ5X2NvdW50IGZvciBSQUwvSCwgKzQgZm9yCisJCSAqIFNIUkFML0gpIGFuZCBpbml0aWFsIENSQyB2YWx1ZXMgdG8gdGhlIE1BQworCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IChody0+bWFjLnJhcl9lbnRyeV9jb3VudCArIDQpOyBpKyspIHsKKwkJCXU4IG1hY19hZGRyW0VUSF9BTEVOXSA9IHswfTsKKwkJCXUzMiBhZGRyX2hpZ2gsIGFkZHJfbG93OworCisJCQlhZGRyX2hpZ2ggPSBlcjMyKFJBSChpKSk7CisJCQlpZiAoIShhZGRyX2hpZ2ggJiBFMTAwMF9SQUhfQVYpKQorCQkJCWNvbnRpbnVlOworCQkJYWRkcl9sb3cgPSBlcjMyKFJBTChpKSk7CisJCQltYWNfYWRkclswXSA9IChhZGRyX2xvdyAmIDB4RkYpOworCQkJbWFjX2FkZHJbMV0gPSAoKGFkZHJfbG93ID4+IDgpICYgMHhGRik7CisJCQltYWNfYWRkclsyXSA9ICgoYWRkcl9sb3cgPj4gMTYpICYgMHhGRik7CisJCQltYWNfYWRkclszXSA9ICgoYWRkcl9sb3cgPj4gMjQpICYgMHhGRik7CisJCQltYWNfYWRkcls0XSA9IChhZGRyX2hpZ2ggJiAweEZGKTsKKwkJCW1hY19hZGRyWzVdID0gKChhZGRyX2hpZ2ggPj4gOCkgJiAweEZGKTsKKworCQkJZXczMihQQ0hfUkFJQ0MoaSksCisJCQkJCWUxMDAwX2NhbGNfcnhfZGFfY3JjKG1hY19hZGRyKSk7CisJCX0KKworCQkvKiBXcml0ZSBSeCBhZGRyZXNzZXMgdG8gdGhlIFBIWSAqLworCQllMTAwMF9jb3B5X3J4X2FkZHJzX3RvX3BoeV9pY2g4bGFuKGh3KTsKKworCQkvKiBFbmFibGUganVtYm8gZnJhbWUgd29ya2Fyb3VuZCBpbiB0aGUgTUFDICovCisJCW1hY19yZWcgPSBlcjMyKEZGTFRfREJHKTsKKwkJbWFjX3JlZyAmPSB+KDEgPDwgMTQpOworCQltYWNfcmVnIHw9ICg3IDw8IDE1KTsKKwkJZXczMihGRkxUX0RCRywgbWFjX3JlZyk7CisKKwkJbWFjX3JlZyA9IGVyMzIoUkNUTCk7CisJCW1hY19yZWcgfD0gRTEwMDBfUkNUTF9TRUNSQzsKKwkJZXczMihSQ1RMLCBtYWNfcmVnKTsKKworCQlyZXRfdmFsID0gZTEwMDBlX3JlYWRfa21ybl9yZWcoaHcsCisJCQkJCQlFMTAwMF9LTVJOQ1RSTFNUQV9DVFJMX09GRlNFVCwKKwkJCQkJCSZkYXRhKTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKKwkJcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9rbXJuX3JlZyhodywKKwkJCQkJCUUxMDAwX0tNUk5DVFJMU1RBX0NUUkxfT0ZGU0VULAorCQkJCQkJZGF0YSB8ICgxIDw8IDApKTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKKwkJcmV0X3ZhbCA9IGUxMDAwZV9yZWFkX2ttcm5fcmVnKGh3LAorCQkJCQkJRTEwMDBfS01STkNUUkxTVEFfSERfQ1RSTCwKKwkJCQkJCSZkYXRhKTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKKwkJZGF0YSAmPSB+KDB4RiA8PCA4KTsKKwkJZGF0YSB8PSAoMHhCIDw8IDgpOworCQlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX2ttcm5fcmVnKGh3LAorCQkJCQkJRTEwMDBfS01STkNUUkxTVEFfSERfQ1RSTCwKKwkJCQkJCWRhdGEpOworCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gb3V0OworCisJCS8qIEVuYWJsZSBqdW1ibyBmcmFtZSB3b3JrYXJvdW5kIGluIHRoZSBQSFkgKi8KKwkJZTFlX3JwaHkoaHcsIFBIWV9SRUcoNzY5LCAyMCksICZkYXRhKTsKKwkJcmV0X3ZhbCA9IGUxZV93cGh5KGh3LCBQSFlfUkVHKDc2OSwgMjApLCBkYXRhICYgfigxIDw8IDE0KSk7CisJCWlmIChyZXRfdmFsKQorCQkJZ290byBvdXQ7CisJCWUxZV9ycGh5KGh3LCBQSFlfUkVHKDc2OSwgMjMpLCAmZGF0YSk7CisJCWRhdGEgJj0gfigweDdGIDw8IDUpOworCQlkYXRhIHw9ICgweDM3IDw8IDUpOworCQlyZXRfdmFsID0gZTFlX3dwaHkoaHcsIFBIWV9SRUcoNzY5LCAyMyksIGRhdGEpOworCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gb3V0OworCQllMWVfcnBoeShodywgUEhZX1JFRyg3NjksIDE2KSwgJmRhdGEpOworCQlkYXRhICY9IH4oMSA8PCAxMyk7CisJCWRhdGEgfD0gKDEgPDwgMTIpOworCQlyZXRfdmFsID0gZTFlX3dwaHkoaHcsIFBIWV9SRUcoNzY5LCAxNiksIGRhdGEpOworCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gb3V0OworCQllMWVfcnBoeShodywgUEhZX1JFRyg3NzYsIDIwKSwgJmRhdGEpOworCQlkYXRhICY9IH4oMHgzRkYgPDwgMik7CisJCWRhdGEgfD0gKDB4MUEgPDwgMik7CisJCXJldF92YWwgPSBlMWVfd3BoeShodywgUEhZX1JFRyg3NzYsIDIwKSwgZGF0YSk7CisJCWlmIChyZXRfdmFsKQorCQkJZ290byBvdXQ7CisJCXJldF92YWwgPSBlMWVfd3BoeShodywgUEhZX1JFRyg3NzYsIDIzKSwgMHhGRTAwKTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKKwkJZTFlX3JwaHkoaHcsIEhWX1BNX0NUUkwsICZkYXRhKTsKKwkJcmV0X3ZhbCA9IGUxZV93cGh5KGh3LCBIVl9QTV9DVFJMLCBkYXRhIHwgKDEgPDwgMTApKTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQkvKiBXcml0ZSBNQUMgcmVnaXN0ZXIgdmFsdWVzIGJhY2sgdG8gaC93IGRlZmF1bHRzICovCisJCW1hY19yZWcgPSBlcjMyKEZGTFRfREJHKTsKKwkJbWFjX3JlZyAmPSB+KDB4RiA8PCAxNCk7CisJCWV3MzIoRkZMVF9EQkcsIG1hY19yZWcpOworCisJCW1hY19yZWcgPSBlcjMyKFJDVEwpOworCQltYWNfcmVnICY9IH5FMTAwMF9SQ1RMX1NFQ1JDOworCQlldzMyKEZGTFRfREJHLCBtYWNfcmVnKTsKKworCQlyZXRfdmFsID0gZTEwMDBlX3JlYWRfa21ybl9yZWcoaHcsCisJCQkJCQlFMTAwMF9LTVJOQ1RSTFNUQV9DVFJMX09GRlNFVCwKKwkJCQkJCSZkYXRhKTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKKwkJcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9rbXJuX3JlZyhodywKKwkJCQkJCUUxMDAwX0tNUk5DVFJMU1RBX0NUUkxfT0ZGU0VULAorCQkJCQkJZGF0YSAmIH4oMSA8PCAwKSk7CisJCWlmIChyZXRfdmFsKQorCQkJZ290byBvdXQ7CisJCXJldF92YWwgPSBlMTAwMGVfcmVhZF9rbXJuX3JlZyhodywKKwkJCQkJCUUxMDAwX0tNUk5DVFJMU1RBX0hEX0NUUkwsCisJCQkJCQkmZGF0YSk7CisJCWlmIChyZXRfdmFsKQorCQkJZ290byBvdXQ7CisJCWRhdGEgJj0gfigweEYgPDwgOCk7CisJCWRhdGEgfD0gKDB4QiA8PCA4KTsKKwkJcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9rbXJuX3JlZyhodywKKwkJCQkJCUUxMDAwX0tNUk5DVFJMU1RBX0hEX0NUUkwsCisJCQkJCQlkYXRhKTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKKworCQkvKiBXcml0ZSBQSFkgcmVnaXN0ZXIgdmFsdWVzIGJhY2sgdG8gaC93IGRlZmF1bHRzICovCisJCWUxZV9ycGh5KGh3LCBQSFlfUkVHKDc2OSwgMjApLCAmZGF0YSk7CisJCXJldF92YWwgPSBlMWVfd3BoeShodywgUEhZX1JFRyg3NjksIDIwKSwgZGF0YSAmIH4oMSA8PCAxNCkpOworCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gb3V0OworCQllMWVfcnBoeShodywgUEhZX1JFRyg3NjksIDIzKSwgJmRhdGEpOworCQlkYXRhICY9IH4oMHg3RiA8PCA1KTsKKwkJcmV0X3ZhbCA9IGUxZV93cGh5KGh3LCBQSFlfUkVHKDc2OSwgMjMpLCBkYXRhKTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKKwkJZTFlX3JwaHkoaHcsIFBIWV9SRUcoNzY5LCAxNiksICZkYXRhKTsKKwkJZGF0YSAmPSB+KDEgPDwgMTIpOworCQlkYXRhIHw9ICgxIDw8IDEzKTsKKwkJcmV0X3ZhbCA9IGUxZV93cGh5KGh3LCBQSFlfUkVHKDc2OSwgMTYpLCBkYXRhKTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKKwkJZTFlX3JwaHkoaHcsIFBIWV9SRUcoNzc2LCAyMCksICZkYXRhKTsKKwkJZGF0YSAmPSB+KDB4M0ZGIDw8IDIpOworCQlkYXRhIHw9ICgweDggPDwgMik7CisJCXJldF92YWwgPSBlMWVfd3BoeShodywgUEhZX1JFRyg3NzYsIDIwKSwgZGF0YSk7CisJCWlmIChyZXRfdmFsKQorCQkJZ290byBvdXQ7CisJCXJldF92YWwgPSBlMWVfd3BoeShodywgUEhZX1JFRyg3NzYsIDIzKSwgMHg3RTAwKTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKKwkJZTFlX3JwaHkoaHcsIEhWX1BNX0NUUkwsICZkYXRhKTsKKwkJcmV0X3ZhbCA9IGUxZV93cGh5KGh3LCBIVl9QTV9DVFJMLCBkYXRhICYgfigxIDw8IDEwKSk7CisJCWlmIChyZXRfdmFsKQorCQkJZ290byBvdXQ7CisJfQorCisJLyogcmUtZW5hYmxlIFJ4IHBhdGggYWZ0ZXIgZW5hYmxpbmcvZGlzYWJsaW5nIHdvcmthcm91bmQgKi8KKwlyZXRfdmFsID0gZTFlX3dwaHkoaHcsIFBIWV9SRUcoNzY5LCAyMCksIHBoeV9yZWcgJiB+KDEgPDwgMTQpKTsKKworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBlMTAwMF9sdl9waHlfd29ya2Fyb3VuZHNfaWNoOGxhbiAtIEEgc2VyaWVzIG9mIFBoeSB3b3JrYXJvdW5kcyB0byBiZQorICogIGRvbmUgYWZ0ZXIgZXZlcnkgUEhZIHJlc2V0LgorICoqLworc3RhdGljIHMzMiBlMTAwMF9sdl9waHlfd29ya2Fyb3VuZHNfaWNoOGxhbihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXMzMiByZXRfdmFsID0gMDsKKworCWlmIChody0+bWFjLnR5cGUgIT0gZTEwMDBfcGNoMmxhbikKKwkJZ290byBvdXQ7CisKKwkvKiBTZXQgTURJTyBzbG93IG1vZGUgYmVmb3JlIGFueSBvdGhlciBNRElPIGFjY2VzcyAqLworCXJldF92YWwgPSBlMTAwMF9zZXRfbWRpb19zbG93X21vZGVfaHYoaHcpOworCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgogICogIGUxMDAwX2xhbl9pbml0X2RvbmVfaWNoOGxhbiAtIENoZWNrIGZvciBQSFkgY29uZmlnIGNvbXBsZXRpb24KICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKQEAgLTEyNzEsMTIgKzE2MDksMTcgQEAKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKIAkJYnJlYWs7CisJY2FzZSBlMTAwMF9wY2gybGFuOgorCQlyZXRfdmFsID0gZTEwMDBfbHZfcGh5X3dvcmthcm91bmRzX2ljaDhsYW4oaHcpOworCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gb3V0OworCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CiAKIAkvKiBEdW1teSByZWFkIHRvIGNsZWFyIHRoZSBwaHkgd2FrZXVwIGJpdCBhZnRlciBsY2QgcmVzZXQgKi8KLQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwX3BjaGxhbikKKwlpZiAoaHctPm1hYy50eXBlID49IGUxMDAwX3BjaGxhbikKIAkJZTFlX3JwaHkoaHcsIEJNX1dVQywgJnJlZyk7CiAKIAkvKiBDb25maWd1cmUgdGhlIExDRCB3aXRoIHRoZSBleHRlbmRlZCBjb25maWd1cmF0aW9uIHJlZ2lvbiBpbiBOVk0gKi8KQEAgLTI4MDAsNiArMzE0Myw3IEBACiAKIAlldzMyKEZDVFRWLCBody0+ZmMucGF1c2VfdGltZSk7CiAJaWYgKChody0+cGh5LnR5cGUgPT0gZTEwMDBfcGh5XzgyNTc4KSB8fAorCSAgICAoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV84MjU3OSkgfHwKIAkgICAgKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfODI1NzcpKSB7CiAJCWV3MzIoRkNSVFZfUENILCBody0+ZmMucmVmcmVzaF90aW1lKTsKIApAQCAtMjg2Myw2ICszMjA3LDcgQEAKIAkJCXJldHVybiByZXRfdmFsOwogCQlicmVhazsKIAljYXNlIGUxMDAwX3BoeV84MjU3NzoKKwljYXNlIGUxMDAwX3BoeV84MjU3OToKIAkJcmV0X3ZhbCA9IGUxMDAwX2NvcHBlcl9saW5rX3NldHVwXzgyNTc3KGh3KTsKIAkJaWYgKHJldF92YWwpCiAJCQlyZXR1cm4gcmV0X3ZhbDsKQEAgLTMxMTYsMjEgKzM0NjEsMTIgQEAKIHsKIAl1MzIgcGh5X2N0cmw7CiAKLQlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgewotCWNhc2UgZTEwMDBfaWNoOGxhbjoKLQljYXNlIGUxMDAwX2ljaDlsYW46Ci0JY2FzZSBlMTAwMF9pY2gxMGxhbjoKLQljYXNlIGUxMDAwX3BjaGxhbjoKLQkJcGh5X2N0cmwgPSBlcjMyKFBIWV9DVFJMKTsKLQkJcGh5X2N0cmwgfD0gRTEwMDBfUEhZX0NUUkxfRDBBX0xQTFUgfAotCQkgICAgICAgICAgICBFMTAwMF9QSFlfQ1RSTF9HQkVfRElTQUJMRTsKLQkJZXczMihQSFlfQ1RSTCwgcGh5X2N0cmwpOworCXBoeV9jdHJsID0gZXIzMihQSFlfQ1RSTCk7CisJcGh5X2N0cmwgfD0gRTEwMDBfUEhZX0NUUkxfRDBBX0xQTFUgfCBFMTAwMF9QSFlfQ1RSTF9HQkVfRElTQUJMRTsKKwlldzMyKFBIWV9DVFJMLCBwaHlfY3RybCk7CiAKLQkJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2hsYW4pCi0JCQllMTAwMF9waHlfaHdfcmVzZXRfaWNoOGxhbihodyk7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQorCWlmIChody0+bWFjLnR5cGUgPj0gZTEwMDBfcGNobGFuKQorCQllMTAwMF9waHlfaHdfcmVzZXRfaWNoOGxhbihodyk7CiB9CiAKIC8qKgpAQCAtMzM3MCw2ICszNzA2LDcgQEAKIAogCS8qIENsZWFyIFBIWSBzdGF0aXN0aWNzIHJlZ2lzdGVycyAqLwogCWlmICgoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV84MjU3OCkgfHwKKwkgICAgKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfODI1NzkpIHx8CiAJICAgIChody0+cGh5LnR5cGUgPT0gZTEwMDBfcGh5XzgyNTc3KSkgewogCQlody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgSFZfU0NDX1VQUEVSLCAmcGh5X2RhdGEpOwogCQlody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgSFZfU0NDX0xPV0VSLCAmcGh5X2RhdGEpOwpAQCAtMzM5MCw3ICszNzI3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBlMTAwMF9tYWNfb3BlcmF0aW9ucyBpY2g4X21hY19vcHMgPSB7CiAJLmlkX2xlZF9pbml0CQk9IGUxMDAwZV9pZF9sZWRfaW5pdCwKLQkuY2hlY2tfbW5nX21vZGUJCT0gZTEwMDBfY2hlY2tfbW5nX21vZGVfaWNoOGxhbiwKKwkvKiBjaGVja19tbmdfbW9kZSBkZXBlbmRlbnQgb24gbWFjIHR5cGUgKi8KIAkuY2hlY2tfZm9yX2xpbmsJCT0gZTEwMDBfY2hlY2tfZm9yX2NvcHBlcl9saW5rX2ljaDhsYW4sCiAJLyogY2xlYW51cF9sZWQgZGVwZW5kZW50IG9uIG1hYyB0eXBlICovCiAJLmNsZWFyX2h3X2NudHJzCQk9IGUxMDAwX2NsZWFyX2h3X2NudHJzX2ljaDhsYW4sCkBAIC0zNDk3LDYgKzM4MzQsNyBAQAogCQkJCSAgfCBGTEFHX0hBU19KVU1CT19GUkFNRVMKIAkJCQkgIHwgRkxBR19ESVNBQkxFX0ZDX1BBVVNFX1RJTUUgLyogZXJyYXRhICovCiAJCQkJICB8IEZMQUdfQVBNRV9JTl9XVUMsCisJLmZsYWdzMgkJCT0gRkxBRzJfSEFTX1BIWV9TVEFUUywKIAkucGJhCQkJPSAyNiwKIAkubWF4X2h3X2ZyYW1lX3NpemUJPSA0MDk2LAogCS5nZXRfdmFyaWFudHMJCT0gZTEwMDBfZ2V0X3ZhcmlhbnRzX2ljaDhsYW4sCkBAIC0zNTA0LDMgKzM4NDIsMjMgQEAKIAkucGh5X29wcwkJPSAmaWNoOF9waHlfb3BzLAogCS5udm1fb3BzCQk9ICZpY2g4X252bV9vcHMsCiB9OworCitzdHJ1Y3QgZTEwMDBfaW5mbyBlMTAwMF9wY2gyX2luZm8gPSB7CisJLm1hYwkJCT0gZTEwMDBfcGNoMmxhbiwKKwkuZmxhZ3MJCQk9IEZMQUdfSVNfSUNICisJCQkJICB8IEZMQUdfSEFTX1dPTAorCQkJCSAgfCBGTEFHX1JYX0NTVU1fRU5BQkxFRAorCQkJCSAgfCBGTEFHX0hBU19DVFJMRVhUX09OX0xPQUQKKwkJCQkgIHwgRkxBR19IQVNfQU1UCisJCQkJICB8IEZMQUdfSEFTX0ZMQVNICisJCQkJICB8IEZMQUdfSEFTX0pVTUJPX0ZSQU1FUworCQkJCSAgfCBGTEFHX0FQTUVfSU5fV1VDLAorCS5mbGFnczIJCQk9IEZMQUcyX0hBU19QSFlfU1RBVFMKKwkJCQkgIHwgRkxBRzJfSEFTX0VFRSwKKwkucGJhCQkJPSAxOCwKKwkubWF4X2h3X2ZyYW1lX3NpemUJPSBERUZBVUxUX0pVTUJPLAorCS5nZXRfdmFyaWFudHMJCT0gZTEwMDBfZ2V0X3ZhcmlhbnRzX2ljaDhsYW4sCisJLm1hY19vcHMJCT0gJmljaDhfbWFjX29wcywKKwkucGh5X29wcwkJPSAmaWNoOF9waHlfb3BzLAorCS5udm1fb3BzCQk9ICZpY2g4X252bV9vcHMsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2xpYi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL2xpYi5jCmluZGV4IGE5NjhlM2EuLmRmNGEyNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9saWIuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbGliLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIFBSTy8xMDAwIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCmluZGV4IDU3YTdlNDEuLjUyMWM2ZWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCBQUk8vMTAwMCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTUyLDcgKzUyLDkgQEAKIAogI2luY2x1ZGUgImUxMDAwLmgiCiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMC4yLWs0IgorI2RlZmluZSBEUlZfRVhUUkFWRVJTSU9OICItazIiCisKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMi43IiBEUlZfRVhUUkFWRVJTSU9OCiBjaGFyIGUxMDAwZV9kcml2ZXJfbmFtZVtdID0gImUxMDAwZSI7CiBjb25zdCBjaGFyIGUxMDAwZV9kcml2ZXJfdmVyc2lvbltdID0gRFJWX1ZFUlNJT047CiAKQEAgLTY3LDYgKzY5LDcgQEAKIAlbYm9hcmRfaWNoOWxhbl0JCT0gJmUxMDAwX2ljaDlfaW5mbywKIAlbYm9hcmRfaWNoMTBsYW5dCT0gJmUxMDAwX2ljaDEwX2luZm8sCiAJW2JvYXJkX3BjaGxhbl0JCT0gJmUxMDAwX3BjaF9pbmZvLAorCVtib2FyZF9wY2gybGFuXQkJPSAmZTEwMDBfcGNoMl9pbmZvLAogfTsKIAogc3RydWN0IGUxMDAwX3JlZ19pbmZvIHsKQEAgLTIyMSwxMCArMjI0LDEwIEBACiAJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9bdHhfcmluZy0+bmV4dF90b19jbGVhbl07CiAJcHJpbnRrKEtFUk5fSU5GTyAiICU1ZCAlNVggJTVYICUwMTZsbFggJTA0WCAlM1ggJTAxNmxsWFxuIiwKIAkJMCwgdHhfcmluZy0+bmV4dF90b191c2UsIHR4X3JpbmctPm5leHRfdG9fY2xlYW4sCi0JCSh1NjQpYnVmZmVyX2luZm8tPmRtYSwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylidWZmZXJfaW5mby0+ZG1hLAogCQlidWZmZXJfaW5mby0+bGVuZ3RoLAogCQlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCwKLQkJKHU2NClidWZmZXJfaW5mby0+dGltZV9zdGFtcCk7CisJCSh1bnNpZ25lZCBsb25nIGxvbmcpYnVmZmVyX2luZm8tPnRpbWVfc3RhbXApOwogCiAJLyogUHJpbnQgVFggUmluZ3MgKi8KIAlpZiAoIW5ldGlmX21zZ190eF9kb25lKGFkYXB0ZXIpKQpAQCAtMjc2LDkgKzI3OSwxMSBAQAogCQkJIiUwNFggICUzWCAlMDE2bGxYICVwIiwKIAkJICAgICAgICghKGxlNjRfdG9fY3B1KHUwLT5iKSAmICgxPDwyOSkpID8gJ2wnIDoKIAkJCSgobGU2NF90b19jcHUodTAtPmIpICYgKDE8PDIwKSkgPyAnZCcgOiAnYycpKSwgaSwKLQkJICAgICAgIGxlNjRfdG9fY3B1KHUwLT5hKSwgbGU2NF90b19jcHUodTAtPmIpLAotCQkgICAgICAgKHU2NClidWZmZXJfaW5mby0+ZG1hLCBidWZmZXJfaW5mby0+bGVuZ3RoLAotCQkgICAgICAgYnVmZmVyX2luZm8tPm5leHRfdG9fd2F0Y2gsICh1NjQpYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWxlNjRfdG9fY3B1KHUwLT5hKSwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUodTAtPmIpLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylidWZmZXJfaW5mby0+ZG1hLAorCQkgICAgICAgYnVmZmVyX2luZm8tPmxlbmd0aCwgYnVmZmVyX2luZm8tPm5leHRfdG9fd2F0Y2gsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJ1ZmZlcl9pbmZvLT50aW1lX3N0YW1wLAogCQkgICAgICAgYnVmZmVyX2luZm8tPnNrYik7CiAJCWlmIChpID09IHR4X3JpbmctPm5leHRfdG9fdXNlICYmIGkgPT0gdHhfcmluZy0+bmV4dF90b19jbGVhbikKIAkJCXByaW50ayhLRVJOX0NPTlQgIiBOVEMvVVxuIik7CkBAIC0zNTMsMTkgKzM1OCwxOSBAQAogCQkJCXByaW50ayhLRVJOX0lORk8gIlJXQlsweCUwM1hdICAgICAlMDE2bGxYICIKIAkJCQkJIiUwMTZsbFggJTAxNmxsWCAlMDE2bGxYICIKIAkJCQkJIi0tLS0tLS0tLS0tLS0tLS0gJXAiLCBpLAotCQkJCQlsZTY0X3RvX2NwdSh1MS0+YSksCi0JCQkJCWxlNjRfdG9fY3B1KHUxLT5iKSwKLQkJCQkJbGU2NF90b19jcHUodTEtPmMpLAotCQkJCQlsZTY0X3RvX2NwdSh1MS0+ZCksCisJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUodTEtPmEpLAorCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKWxlNjRfdG9fY3B1KHUxLT5iKSwKKwkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdSh1MS0+YyksCisJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUodTEtPmQpLAogCQkJCQlidWZmZXJfaW5mby0+c2tiKTsKIAkJCX0gZWxzZSB7CiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiUiAgWzB4JTAzWF0gICAgICUwMTZsbFggIgogCQkJCQkiJTAxNmxsWCAlMDE2bGxYICUwMTZsbFggJTAxNmxsWCAlcCIsIGksCi0JCQkJCWxlNjRfdG9fY3B1KHUxLT5hKSwKLQkJCQkJbGU2NF90b19jcHUodTEtPmIpLAotCQkJCQlsZTY0X3RvX2NwdSh1MS0+YyksCi0JCQkJCWxlNjRfdG9fY3B1KHUxLT5kKSwKLQkJCQkJKHU2NClidWZmZXJfaW5mby0+ZG1hLAorCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKWxlNjRfdG9fY3B1KHUxLT5hKSwKKwkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdSh1MS0+YiksCisJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUodTEtPmMpLAorCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKWxlNjRfdG9fY3B1KHUxLT5kKSwKKwkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylidWZmZXJfaW5mby0+ZG1hLAogCQkJCQlidWZmZXJfaW5mby0+c2tiKTsKIAogCQkJCWlmIChuZXRpZl9tc2dfcGt0ZGF0YShhZGFwdGVyKSkKQEAgLTQwMiw5ICs0MDcsMTEgQEAKIAkJCWJ1ZmZlcl9pbmZvID0gJnJ4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQkJdTAgPSAoc3RydWN0IG15X3UwICopcnhfZGVzYzsKIAkJCXByaW50ayhLRVJOX0lORk8gIlJsWzB4JTAzWF0gICAgJTAxNmxsWCAlMDE2bGxYICIKLQkJCQkiJTAxNmxsWCAlcCIsCi0JCQkJaSwgbGU2NF90b19jcHUodTAtPmEpLCBsZTY0X3RvX2NwdSh1MC0+YiksCi0JCQkJKHU2NClidWZmZXJfaW5mby0+ZG1hLCBidWZmZXJfaW5mby0+c2tiKTsKKwkJCQkiJTAxNmxsWCAlcCIsIGksCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdSh1MC0+YSksCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdSh1MC0+YiksCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylidWZmZXJfaW5mby0+ZG1hLAorCQkJCWJ1ZmZlcl9pbmZvLT5za2IpOwogCQkJaWYgKGkgPT0gcnhfcmluZy0+bmV4dF90b191c2UpCiAJCQkJcHJpbnRrKEtFUk5fQ09OVCAiIE5UVVxuIik7CiAJCQllbHNlIGlmIChpID09IHJ4X3JpbmctPm5leHRfdG9fY2xlYW4pCkBAIC0xNzc4LDI1ICsxNzg1LDI1IEBACiB2b2lkIGUxMDAwZV9zZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJaW50IGVycjsKLQlpbnQgbnVtdmVjcywgaTsKLQorCWludCBpOwogCiAJc3dpdGNoIChhZGFwdGVyLT5pbnRfbW9kZSkgewogCWNhc2UgRTEwMDBFX0lOVF9NT0RFX01TSVg6CiAJCWlmIChhZGFwdGVyLT5mbGFncyAmIEZMQUdfSEFTX01TSVgpIHsKLQkJCW51bXZlY3MgPSAzOyAvKiBSeFEwLCBUeFEwIGFuZCBvdGhlciAqLwotCQkJYWRhcHRlci0+bXNpeF9lbnRyaWVzID0ga2NhbGxvYyhudW12ZWNzLAorCQkJYWRhcHRlci0+bnVtX3ZlY3RvcnMgPSAzOyAvKiBSeFEwLCBUeFEwIGFuZCBvdGhlciAqLworCQkJYWRhcHRlci0+bXNpeF9lbnRyaWVzID0ga2NhbGxvYyhhZGFwdGVyLT5udW1fdmVjdG9ycywKIAkJCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSksCiAJCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKIAkJCWlmIChhZGFwdGVyLT5tc2l4X2VudHJpZXMpIHsKLQkJCQlmb3IgKGkgPSAwOyBpIDwgbnVtdmVjczsgaSsrKQorCQkJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdmVjdG9yczsgaSsrKQogCQkJCQlhZGFwdGVyLT5tc2l4X2VudHJpZXNbaV0uZW50cnkgPSBpOwogCiAJCQkJZXJyID0gcGNpX2VuYWJsZV9tc2l4KGFkYXB0ZXItPnBkZXYsCiAJCQkJCQkgICAgICBhZGFwdGVyLT5tc2l4X2VudHJpZXMsCi0JCQkJCQkgICAgICBudW12ZWNzKTsKLQkJCQlpZiAoZXJyID09IDApCisJCQkJCQkgICAgICBhZGFwdGVyLT5udW1fdmVjdG9ycyk7CisJCQkJaWYgKGVyciA9PSAwKSB7CiAJCQkJCXJldHVybjsKKwkJCQl9CiAJCQl9CiAJCQkvKiBNU0ktWCBmYWlsZWQsIHNvIGZhbGwgdGhyb3VnaCBhbmQgdHJ5IE1TSSAqLwogCQkJZV9lcnIoIkZhaWxlZCB0byBpbml0aWFsaXplIE1TSS1YIGludGVycnVwdHMuICAiCkBAIC0xODE4LDYgKzE4MjUsOSBAQAogCQkvKiBEb24ndCBkbyBhbnl0aGluZzsgdGhpcyBpcyB0aGUgc3lzdGVtIGRlZmF1bHQgKi8KIAkJYnJlYWs7CiAJfQorCisJLyogc3RvcmUgdGhlIG51bWJlciBvZiB2ZWN0b3JzIGJlaW5nIHVzZWQgKi8KKwlhZGFwdGVyLT5udW1fdmVjdG9ycyA9IDE7CiB9CiAKIC8qKgpAQCAtMTkzOSw3ICsxOTQ5LDE0IEBACiAJaWYgKGFkYXB0ZXItPm1zaXhfZW50cmllcykKIAkJZXczMihFSUFDXzgyNTc0LCAwKTsKIAllMWVfZmx1c2goKTsKLQlzeW5jaHJvbml6ZV9pcnEoYWRhcHRlci0+cGRldi0+aXJxKTsKKworCWlmIChhZGFwdGVyLT5tc2l4X2VudHJpZXMpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdmVjdG9yczsgaSsrKQorCQkJc3luY2hyb25pemVfaXJxKGFkYXB0ZXItPm1zaXhfZW50cmllc1tpXS52ZWN0b3IpOworCX0gZWxzZSB7CisJCXN5bmNocm9uaXplX2lycShhZGFwdGVyLT5wZGV2LT5pcnEpOworCX0KIH0KIAogLyoqCkBAIC0yNzIzLDYgKzI3NDAsMTYgQEAKIAkJZTFlX3dwaHkoaHcsIDIyLCBwaHlfZGF0YSk7CiAJfQogCisJLyogV29ya2Fyb3VuZCBTaSBlcnJhdGEgb24gODI1NzkgLSBjb25maWd1cmUganVtYm8gZnJhbWUgZmxvdyAqLworCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfcGNoMmxhbikgeworCQlzMzIgcmV0X3ZhbDsKKworCQlpZiAocmN0bCAmIEUxMDAwX1JDVExfTFBFKQorCQkJcmV0X3ZhbCA9IGUxMDAwX2x2X2p1bWJvX3dvcmthcm91bmRfaWNoOGxhbihodywgdHJ1ZSk7CisJCWVsc2UKKwkJCXJldF92YWwgPSBlMTAwMF9sdl9qdW1ib193b3JrYXJvdW5kX2ljaDhsYW4oaHcsIGZhbHNlKTsKKwl9CisKIAkvKiBTZXR1cCBidWZmZXIgc2l6ZXMgKi8KIAlyY3RsICY9IH5FMTAwMF9SQ1RMX1NaXzQwOTY7CiAJcmN0bCB8PSBFMTAwMF9SQ1RMX0JTRVg7CkBAIC0yNzU5LDcgKzI3ODYsNyBAQAogCSAqIHBlciBwYWNrZXQuCiAJICovCiAJcGFnZXMgPSBQQUdFX1VTRV9DT1VOVChhZGFwdGVyLT5uZXRkZXYtPm10dSk7Ci0JaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX0lTX0lDSCkgJiYgKHBhZ2VzIDw9IDMpICYmCisJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX0hBU19FUlQpICYmIChwYWdlcyA8PSAzKSAmJgogCSAgICAoUEFHRV9TSVpFIDw9IDE2Mzg0KSAmJiAocmN0bCAmIEUxMDAwX1JDVExfTFBFKSkKIAkJYWRhcHRlci0+cnhfcHNfcGFnZXMgPSBwYWdlczsKIAllbHNlCkBAIC0yOTAxLDEwICsyOTI4LDEwIEBACiAJCQkgKiBkcm9wcGVkIHRyYW5zYWN0aW9ucy4KIAkJCSAqLwogCQkJcG1fcW9zX3VwZGF0ZV9yZXF1ZXN0KAotCQkJCWFkYXB0ZXItPm5ldGRldi0+cG1fcW9zX3JlcSwgNTUpOworCQkJCSZhZGFwdGVyLT5uZXRkZXYtPnBtX3Fvc19yZXEsIDU1KTsKIAkJfSBlbHNlIHsKIAkJCXBtX3Fvc191cGRhdGVfcmVxdWVzdCgKLQkJCQlhZGFwdGVyLT5uZXRkZXYtPnBtX3Fvc19yZXEsCisJCQkJJmFkYXB0ZXItPm5ldGRldi0+cG1fcW9zX3JlcSwKIAkJCQlQTV9RT1NfREVGQVVMVF9WQUxVRSk7CiAJCX0KIAl9CkBAIC0zMTE4LDcgKzMxNDUsMjcgQEAKIAkgKiAgIHdpdGggRVJUIHN1cHBvcnQgYXNzdW1pbmcgRVJUIHNldCB0byBFMTAwMF9FUlRfMjA0OCksIG9yCiAJICogLSB0aGUgZnVsbCBSeCBGSUZPIHNpemUgbWludXMgb25lIGZ1bGwgZnJhbWUKIAkgKi8KLQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwX3BjaGxhbikgeworCWlmIChhZGFwdGVyLT5mbGFncyAmIEZMQUdfRElTQUJMRV9GQ19QQVVTRV9USU1FKQorCQlmYy0+cGF1c2VfdGltZSA9IDB4RkZGRjsKKwllbHNlCisJCWZjLT5wYXVzZV90aW1lID0gRTEwMDBfRkNfUEFVU0VfVElNRTsKKwlmYy0+c2VuZF94b24gPSAxOworCWZjLT5jdXJyZW50X21vZGUgPSBmYy0+cmVxdWVzdGVkX21vZGU7CisKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWRlZmF1bHQ6CisJCWlmICgoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX0hBU19FUlQpICYmCisJCSAgICAoYWRhcHRlci0+bmV0ZGV2LT5tdHUgPiBFVEhfREFUQV9MRU4pKQorCQkJaHdtID0gbWluKCgocGJhIDw8IDEwKSAqIDkgLyAxMCksCisJCQkJICAoKHBiYSA8PCAxMCkgLSAoRTEwMDBfRVJUXzIwNDggPDwgMykpKTsKKwkJZWxzZQorCQkJaHdtID0gbWluKCgocGJhIDw8IDEwKSAqIDkgLyAxMCksCisJCQkJICAoKHBiYSA8PCAxMCkgLSBhZGFwdGVyLT5tYXhfZnJhbWVfc2l6ZSkpOworCisJCWZjLT5oaWdoX3dhdGVyID0gaHdtICYgRTEwMDBfRkNSVEhfUlRIOyAvKiA4LWJ5dGUgZ3JhbnVsYXJpdHkgKi8KKwkJZmMtPmxvd193YXRlciA9IGZjLT5oaWdoX3dhdGVyIC0gODsKKwkJYnJlYWs7CisJY2FzZSBlMTAwMF9wY2hsYW46CiAJCS8qCiAJCSAqIFdvcmthcm91bmQgUENIIExPTSBhZGFwdGVyIGhhbmdzIHdpdGggY2VydGFpbiBuZXR3b3JrCiAJCSAqIGxvYWRzLiAgSWYgaGFuZ3MgcGVyc2lzdCwgdHJ5IGRpc2FibGluZyBUeCBmbG93IGNvbnRyb2wuCkBAIC0zMTMxLDI2ICszMTc4LDE1IEBACiAJCQlmYy0+bG93X3dhdGVyICA9IDB4MzAwMDsKIAkJfQogCQlmYy0+cmVmcmVzaF90aW1lID0gMHgxMDAwOwotCX0gZWxzZSB7Ci0JCWlmICgoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX0hBU19FUlQpICYmCi0JCSAgICAoYWRhcHRlci0+bmV0ZGV2LT5tdHUgPiBFVEhfREFUQV9MRU4pKQotCQkJaHdtID0gbWluKCgocGJhIDw8IDEwKSAqIDkgLyAxMCksCi0JCQkJICAoKHBiYSA8PCAxMCkgLSAoRTEwMDBfRVJUXzIwNDggPDwgMykpKTsKLQkJZWxzZQotCQkJaHdtID0gbWluKCgocGJhIDw8IDEwKSAqIDkgLyAxMCksCi0JCQkJICAoKHBiYSA8PCAxMCkgLSBhZGFwdGVyLT5tYXhfZnJhbWVfc2l6ZSkpOwotCi0JCWZjLT5oaWdoX3dhdGVyID0gaHdtICYgRTEwMDBfRkNSVEhfUlRIOyAvKiA4LWJ5dGUgZ3JhbnVsYXJpdHkgKi8KLQkJZmMtPmxvd193YXRlciA9IGZjLT5oaWdoX3dhdGVyIC0gODsKKwkJYnJlYWs7CisJY2FzZSBlMTAwMF9wY2gybGFuOgorCQlmYy0+aGlnaF93YXRlciA9IDB4MDVDMjA7CisJCWZjLT5sb3dfd2F0ZXIgPSAweDA1MDQ4OworCQlmYy0+cGF1c2VfdGltZSA9IDB4MDY1MDsKKwkJZmMtPnJlZnJlc2hfdGltZSA9IDB4MDQwMDsKKwkJYnJlYWs7CiAJfQogCi0JaWYgKGFkYXB0ZXItPmZsYWdzICYgRkxBR19ESVNBQkxFX0ZDX1BBVVNFX1RJTUUpCi0JCWZjLT5wYXVzZV90aW1lID0gMHhGRkZGOwotCWVsc2UKLQkJZmMtPnBhdXNlX3RpbWUgPSBFMTAwMF9GQ19QQVVTRV9USU1FOwotCWZjLT5zZW5kX3hvbiA9IDE7Ci0JZmMtPmN1cnJlbnRfbW9kZSA9IGZjLT5yZXF1ZXN0ZWRfbW9kZTsKLQogCS8qIEFsbG93IHRpbWUgZm9yIHBlbmRpbmcgbWFzdGVyIHJlcXVlc3RzIHRvIHJ1biAqLwogCW1hYy0+b3BzLnJlc2V0X2h3KGh3KTsKIApAQCAtMzE2Miw4ICszMTk4LDYgQEAKIAkJZTEwMDBfZ2V0X2h3X2NvbnRyb2woYWRhcHRlcik7CiAKIAlldzMyKFdVQywgMCk7Ci0JaWYgKGFkYXB0ZXItPmZsYWdzMiAmIEZMQUcyX0hBU19QSFlfV0FLRVVQKQotCQllMWVfd3BoeSgmYWRhcHRlci0+aHcsIEJNX1dVQywgMCk7CiAKIAlpZiAobWFjLT5vcHMuaW5pdF9odyhodykpCiAJCWVfZXJyKCJIYXJkd2FyZSBFcnJvclxuIik7CkBAIC0zMTk0LDEyICszMjI4LDYgQEAKIHsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCi0JLyogRE1BIGxhdGVuY3kgcmVxdWlyZW1lbnQgdG8gd29ya2Fyb3VuZCBlYXJseS1yZWNlaXZlL2p1bWJvIGlzc3VlICovCi0JaWYgKGFkYXB0ZXItPmZsYWdzICYgRkxBR19IQVNfRVJUKQotCQlhZGFwdGVyLT5uZXRkZXYtPnBtX3Fvc19yZXEgPQotCQkJcG1fcW9zX2FkZF9yZXF1ZXN0KFBNX1FPU19DUFVfRE1BX0xBVEVOQ1ksCi0JCQkJICAgICAgIFBNX1FPU19ERUZBVUxUX1ZBTFVFKTsKLQogCS8qIGhhcmR3YXJlIGhhcyBiZWVuIHJlc2V0LCB3ZSBuZWVkIHRvIHJlbG9hZCBzb21lIHRoaW5ncyAqLwogCWUxMDAwX2NvbmZpZ3VyZShhZGFwdGVyKTsKIApAQCAtMzI2MywxMiArMzI5MSw2IEBACiAJZTEwMDBfY2xlYW5fdHhfcmluZyhhZGFwdGVyKTsKIAllMTAwMF9jbGVhbl9yeF9yaW5nKGFkYXB0ZXIpOwogCi0JaWYgKGFkYXB0ZXItPmZsYWdzICYgRkxBR19IQVNfRVJUKSB7Ci0JCXBtX3Fvc19yZW1vdmVfcmVxdWVzdCgKLQkJCSAgICAgIGFkYXB0ZXItPm5ldGRldi0+cG1fcW9zX3JlcSk7Ci0JCWFkYXB0ZXItPm5ldGRldi0+cG1fcW9zX3JlcSA9IE5VTEw7Ci0JfQotCiAJLyoKIAkgKiBUT0RPOiBmb3IgcG93ZXIgbWFuYWdlbWVudCwgd2UgY291bGQgZHJvcCB0aGUgbGluayBhbmQKIAkgKiBwY2lfZGlzYWJsZV9kZXZpY2UgaGVyZS4KQEAgLTM0MTksMTMgKzM0NDEsMTggQEAKIAogCS8qIGRpc2FibGUgU0VSUiBpbiBjYXNlIHRoZSBNU0kgd3JpdGUgY2F1c2VzIGEgbWFzdGVyIGFib3J0ICovCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRhcHRlci0+cGRldiwgUENJX0NPTU1BTkQsICZwY2lfY21kKTsKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoYWRhcHRlci0+cGRldiwgUENJX0NPTU1BTkQsCi0JCQkgICAgICBwY2lfY21kICYgflBDSV9DT01NQU5EX1NFUlIpOworCWlmIChwY2lfY21kICYgUENJX0NPTU1BTkRfU0VSUikKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGFkYXB0ZXItPnBkZXYsIFBDSV9DT01NQU5ELAorCQkJCSAgICAgIHBjaV9jbWQgJiB+UENJX0NPTU1BTkRfU0VSUik7CiAKIAllcnIgPSBlMTAwMF90ZXN0X21zaV9pbnRlcnJ1cHQoYWRhcHRlcik7CiAKLQkvKiByZXN0b3JlIHByZXZpb3VzIHNldHRpbmcgb2YgY29tbWFuZCB3b3JkICovCi0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKGFkYXB0ZXItPnBkZXYsIFBDSV9DT01NQU5ELCBwY2lfY21kKTsKKwkvKiByZS1lbmFibGUgU0VSUiAqLworCWlmIChwY2lfY21kICYgUENJX0NPTU1BTkRfU0VSUikgeworCQlwY2lfcmVhZF9jb25maWdfd29yZChhZGFwdGVyLT5wZGV2LCBQQ0lfQ09NTUFORCwgJnBjaV9jbWQpOworCQlwY2lfY21kIHw9IFBDSV9DT01NQU5EX1NFUlI7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChhZGFwdGVyLT5wZGV2LCBQQ0lfQ09NTUFORCwgcGNpX2NtZCk7CisJfQogCiAJLyogc3VjY2VzcyAhICovCiAJaWYgKCFlcnIpCkBAIC0zNDk4LDYgKzM1MjUsMTIgQEAKIAkgICAgIEUxMDAwX01OR19ESENQX0NPT0tJRV9TVEFUVVNfVkxBTikpCiAJCWUxMDAwX3VwZGF0ZV9tbmdfdmxhbihhZGFwdGVyKTsKIAorCS8qIERNQSBsYXRlbmN5IHJlcXVpcmVtZW50IHRvIHdvcmthcm91bmQgZWFybHktcmVjZWl2ZS9qdW1ibyBpc3N1ZSAqLworCWlmIChhZGFwdGVyLT5mbGFncyAmIEZMQUdfSEFTX0VSVCkKKwkJcG1fcW9zX2FkZF9yZXF1ZXN0KCZhZGFwdGVyLT5uZXRkZXYtPnBtX3Fvc19yZXEsCisJCQkJICAgUE1fUU9TX0NQVV9ETUFfTEFURU5DWSwKKwkJCQkgICBQTV9RT1NfREVGQVVMVF9WQUxVRSk7CisKIAkvKgogCSAqIGJlZm9yZSB3ZSBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQsIHdlIG11c3QgYmUgcmVhZHkgdG8gaGFuZGxlIGl0LgogCSAqIFNldHRpbmcgREVCVUdfU0hJUlEgaW4gdGhlIGtlcm5lbCBtYWtlcyBpdCBmaXJlIGFuIGludGVycnVwdApAQCAtMzYwMiw2ICszNjM1LDkgQEAKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX0hBU19BTVQpCiAJCWUxMDAwX3JlbGVhc2VfaHdfY29udHJvbChhZGFwdGVyKTsKIAorCWlmIChhZGFwdGVyLT5mbGFncyAmIEZMQUdfSEFTX0VSVCkKKwkJcG1fcW9zX3JlbW92ZV9yZXF1ZXN0KCZhZGFwdGVyLT5uZXRkZXYtPnBtX3Fvc19yZXEpOworCiAJcG1fcnVudGltZV9wdXRfc3luYygmcGRldi0+ZGV2KTsKIAogCXJldHVybiAwOwpAQCAtMzY3Miw2ICszNzA4LDExMCBAQAogfQogCiAvKioKKyAqIGUxMDAwZV91cGRhdGVfcGh5X3N0YXRzIC0gVXBkYXRlIHRoZSBQSFkgc3RhdGlzdGljcyBjb3VudGVycworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKiovCitzdGF0aWMgdm9pZCBlMTAwMGVfdXBkYXRlX3BoeV9zdGF0cyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXMzMiByZXRfdmFsOworCXUxNiBwaHlfZGF0YTsKKworCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlKGh3KTsKKwlpZiAocmV0X3ZhbCkKKwkJcmV0dXJuOworCisJaHctPnBoeS5hZGRyID0gMTsKKworI2RlZmluZSBIVl9QSFlfU1RBVFNfUEFHRQk3NzgKKwkvKgorCSAqIEEgcGFnZSBzZXQgaXMgZXhwZW5zaXZlIHNvIGNoZWNrIGlmIGFscmVhZHkgb24gZGVzaXJlZCBwYWdlLgorCSAqIElmIG5vdCwgc2V0IHRvIHRoZSBwYWdlIHdpdGggdGhlIFBIWSBzdGF0dXMgcmVnaXN0ZXJzLgorCSAqLworCXJldF92YWwgPSBlMTAwMGVfcmVhZF9waHlfcmVnX21kaWMoaHcsIElHUDAxRTEwMDBfUEhZX1BBR0VfU0VMRUNULAorCQkJCQkgICAmcGh5X2RhdGEpOworCWlmIChyZXRfdmFsKQorCQlnb3RvIHJlbGVhc2U7CisJaWYgKHBoeV9kYXRhICE9IChIVl9QSFlfU1RBVFNfUEFHRSA8PCBJR1BfUEFHRV9TSElGVCkpIHsKKwkJcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9waHlfcmVnX21kaWMoaHcsCisJCQkJCQkgICAgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCisJCQkJCQkgICAgKEhWX1BIWV9TVEFUU19QQUdFIDw8CisJCQkJCQkgICAgIElHUF9QQUdFX1NISUZUKSk7CisJCWlmIChyZXRfdmFsKQorCQkJZ290byByZWxlYXNlOworCX0KKworCS8qIFJlYWQvY2xlYXIgdGhlIHVwcGVyIDE2LWJpdCByZWdpc3RlcnMgYW5kIHJlYWQvYWNjdW11bGF0ZSBsb3dlciAqLworCisJLyogU2luZ2xlIENvbGxpc2lvbiBDb3VudCAqLworCWUxMDAwZV9yZWFkX3BoeV9yZWdfbWRpYyhodywgSFZfU0NDX1VQUEVSICYgTUFYX1BIWV9SRUdfQUREUkVTUywKKwkJCQkgJnBoeV9kYXRhKTsKKwlyZXRfdmFsID0gZTEwMDBlX3JlYWRfcGh5X3JlZ19tZGljKGh3LAorCQkJCQkgICBIVl9TQ0NfTE9XRVIgJiBNQVhfUEhZX1JFR19BRERSRVNTLAorCQkJCQkgICAmcGh5X2RhdGEpOworCWlmICghcmV0X3ZhbCkKKwkJYWRhcHRlci0+c3RhdHMuc2NjICs9IHBoeV9kYXRhOworCisJLyogRXhjZXNzaXZlIENvbGxpc2lvbiBDb3VudCAqLworCWUxMDAwZV9yZWFkX3BoeV9yZWdfbWRpYyhodywgSFZfRUNPTF9VUFBFUiAmIE1BWF9QSFlfUkVHX0FERFJFU1MsCisJCQkJICZwaHlfZGF0YSk7CisJcmV0X3ZhbCA9IGUxMDAwZV9yZWFkX3BoeV9yZWdfbWRpYyhodywKKwkJCQkJICAgSFZfRUNPTF9MT1dFUiAmIE1BWF9QSFlfUkVHX0FERFJFU1MsCisJCQkJCSAgICZwaHlfZGF0YSk7CisJaWYgKCFyZXRfdmFsKQorCQlhZGFwdGVyLT5zdGF0cy5lY29sICs9IHBoeV9kYXRhOworCisJLyogTXVsdGlwbGUgQ29sbGlzaW9uIENvdW50ICovCisJZTEwMDBlX3JlYWRfcGh5X3JlZ19tZGljKGh3LCBIVl9NQ0NfVVBQRVIgJiBNQVhfUEhZX1JFR19BRERSRVNTLAorCQkJCSAmcGh5X2RhdGEpOworCXJldF92YWwgPSBlMTAwMGVfcmVhZF9waHlfcmVnX21kaWMoaHcsCisJCQkJCSAgIEhWX01DQ19MT1dFUiAmIE1BWF9QSFlfUkVHX0FERFJFU1MsCisJCQkJCSAgICZwaHlfZGF0YSk7CisJaWYgKCFyZXRfdmFsKQorCQlhZGFwdGVyLT5zdGF0cy5tY2MgKz0gcGh5X2RhdGE7CisKKwkvKiBMYXRlIENvbGxpc2lvbiBDb3VudCAqLworCWUxMDAwZV9yZWFkX3BoeV9yZWdfbWRpYyhodywgSFZfTEFURUNPTF9VUFBFUiAmIE1BWF9QSFlfUkVHX0FERFJFU1MsCisJCQkJICZwaHlfZGF0YSk7CisJcmV0X3ZhbCA9IGUxMDAwZV9yZWFkX3BoeV9yZWdfbWRpYyhodywKKwkJCQkJICAgSFZfTEFURUNPTF9MT1dFUiAmCisJCQkJCSAgIE1BWF9QSFlfUkVHX0FERFJFU1MsCisJCQkJCSAgICZwaHlfZGF0YSk7CisJaWYgKCFyZXRfdmFsKQorCQlhZGFwdGVyLT5zdGF0cy5sYXRlY29sICs9IHBoeV9kYXRhOworCisJLyogQ29sbGlzaW9uIENvdW50IC0gYWxzbyB1c2VkIGZvciBhZGFwdGl2ZSBJRlMgKi8KKwllMTAwMGVfcmVhZF9waHlfcmVnX21kaWMoaHcsIEhWX0NPTENfVVBQRVIgJiBNQVhfUEhZX1JFR19BRERSRVNTLAorCQkJCSAmcGh5X2RhdGEpOworCXJldF92YWwgPSBlMTAwMGVfcmVhZF9waHlfcmVnX21kaWMoaHcsCisJCQkJCSAgIEhWX0NPTENfTE9XRVIgJiBNQVhfUEhZX1JFR19BRERSRVNTLAorCQkJCQkgICAmcGh5X2RhdGEpOworCWlmICghcmV0X3ZhbCkKKwkJaHctPm1hYy5jb2xsaXNpb25fZGVsdGEgPSBwaHlfZGF0YTsKKworCS8qIERlZmVyIENvdW50ICovCisJZTEwMDBlX3JlYWRfcGh5X3JlZ19tZGljKGh3LCBIVl9EQ19VUFBFUiAmIE1BWF9QSFlfUkVHX0FERFJFU1MsCisJCQkJICZwaHlfZGF0YSk7CisJcmV0X3ZhbCA9IGUxMDAwZV9yZWFkX3BoeV9yZWdfbWRpYyhodywKKwkJCQkJICAgSFZfRENfTE9XRVIgJiBNQVhfUEhZX1JFR19BRERSRVNTLAorCQkJCQkgICAmcGh5X2RhdGEpOworCWlmICghcmV0X3ZhbCkKKwkJYWRhcHRlci0+c3RhdHMuZGMgKz0gcGh5X2RhdGE7CisKKwkvKiBUcmFuc21pdCB3aXRoIG5vIENSUyAqLworCWUxMDAwZV9yZWFkX3BoeV9yZWdfbWRpYyhodywgSFZfVE5DUlNfVVBQRVIgJiBNQVhfUEhZX1JFR19BRERSRVNTLAorCQkJCSAmcGh5X2RhdGEpOworCXJldF92YWwgPSBlMTAwMGVfcmVhZF9waHlfcmVnX21kaWMoaHcsCisJCQkJCSAgIEhWX1ROQ1JTX0xPV0VSICYgTUFYX1BIWV9SRUdfQUREUkVTUywKKwkJCQkJICAgJnBoeV9kYXRhKTsKKwlpZiAoIXJldF92YWwpCisJCWFkYXB0ZXItPnN0YXRzLnRuY3JzICs9IHBoeV9kYXRhOworCityZWxlYXNlOgorCWh3LT5waHkub3BzLnJlbGVhc2UoaHcpOworfQorCisvKioKICAqIGUxMDAwZV91cGRhdGVfc3RhdHMgLSBVcGRhdGUgdGhlIGJvYXJkIHN0YXRpc3RpY3MgY291bnRlcnMKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICoqLwpAQCAtMzY4MCw3ICszODIwLDYgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwotCXUxNiBwaHlfZGF0YTsKIAogCS8qCiAJICogUHJldmVudCBzdGF0cyB1cGRhdGUgd2hpbGUgYWRhcHRlciBpcyBiZWluZyByZXNldCwgb3IgaWYgdGhlIHBjaQpAQCAtMzcwMCwzNCArMzgzOSwyNyBAQAogCWFkYXB0ZXItPnN0YXRzLnJvYyArPSBlcjMyKFJPQyk7CiAKIAlhZGFwdGVyLT5zdGF0cy5tcGMgKz0gZXIzMihNUEMpOwotCWlmICgoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV84MjU3OCkgfHwKLQkgICAgKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfODI1NzcpKSB7Ci0JCWUxZV9ycGh5KGh3LCBIVl9TQ0NfVVBQRVIsICZwaHlfZGF0YSk7Ci0JCWlmICghZTFlX3JwaHkoaHcsIEhWX1NDQ19MT1dFUiwgJnBoeV9kYXRhKSkKLQkJCWFkYXB0ZXItPnN0YXRzLnNjYyArPSBwaHlfZGF0YTsKIAotCQllMWVfcnBoeShodywgSFZfRUNPTF9VUFBFUiwgJnBoeV9kYXRhKTsKLQkJaWYgKCFlMWVfcnBoeShodywgSFZfRUNPTF9MT1dFUiwgJnBoeV9kYXRhKSkKLQkJCWFkYXB0ZXItPnN0YXRzLmVjb2wgKz0gcGh5X2RhdGE7CisJLyogSGFsZi1kdXBsZXggc3RhdGlzdGljcyAqLworCWlmIChhZGFwdGVyLT5saW5rX2R1cGxleCA9PSBIQUxGX0RVUExFWCkgeworCQlpZiAoYWRhcHRlci0+ZmxhZ3MyICYgRkxBRzJfSEFTX1BIWV9TVEFUUykgeworCQkJZTEwMDBlX3VwZGF0ZV9waHlfc3RhdHMoYWRhcHRlcik7CisJCX0gZWxzZSB7CisJCQlhZGFwdGVyLT5zdGF0cy5zY2MgKz0gZXIzMihTQ0MpOworCQkJYWRhcHRlci0+c3RhdHMuZWNvbCArPSBlcjMyKEVDT0wpOworCQkJYWRhcHRlci0+c3RhdHMubWNjICs9IGVyMzIoTUNDKTsKKwkJCWFkYXB0ZXItPnN0YXRzLmxhdGVjb2wgKz0gZXIzMihMQVRFQ09MKTsKKwkJCWFkYXB0ZXItPnN0YXRzLmRjICs9IGVyMzIoREMpOwogCi0JCWUxZV9ycGh5KGh3LCBIVl9NQ0NfVVBQRVIsICZwaHlfZGF0YSk7Ci0JCWlmICghZTFlX3JwaHkoaHcsIEhWX01DQ19MT1dFUiwgJnBoeV9kYXRhKSkKLQkJCWFkYXB0ZXItPnN0YXRzLm1jYyArPSBwaHlfZGF0YTsKKwkJCWh3LT5tYWMuY29sbGlzaW9uX2RlbHRhID0gZXIzMihDT0xDKTsKIAotCQllMWVfcnBoeShodywgSFZfTEFURUNPTF9VUFBFUiwgJnBoeV9kYXRhKTsKLQkJaWYgKCFlMWVfcnBoeShodywgSFZfTEFURUNPTF9MT1dFUiwgJnBoeV9kYXRhKSkKLQkJCWFkYXB0ZXItPnN0YXRzLmxhdGVjb2wgKz0gcGh5X2RhdGE7Ci0KLQkJZTFlX3JwaHkoaHcsIEhWX0RDX1VQUEVSLCAmcGh5X2RhdGEpOwotCQlpZiAoIWUxZV9ycGh5KGh3LCBIVl9EQ19MT1dFUiwgJnBoeV9kYXRhKSkKLQkJCWFkYXB0ZXItPnN0YXRzLmRjICs9IHBoeV9kYXRhOwotCX0gZWxzZSB7Ci0JCWFkYXB0ZXItPnN0YXRzLnNjYyArPSBlcjMyKFNDQyk7Ci0JCWFkYXB0ZXItPnN0YXRzLmVjb2wgKz0gZXIzMihFQ09MKTsKLQkJYWRhcHRlci0+c3RhdHMubWNjICs9IGVyMzIoTUNDKTsKLQkJYWRhcHRlci0+c3RhdHMubGF0ZWNvbCArPSBlcjMyKExBVEVDT0wpOwotCQlhZGFwdGVyLT5zdGF0cy5kYyArPSBlcjMyKERDKTsKKwkJCWlmICgoaHctPm1hYy50eXBlICE9IGUxMDAwXzgyNTc0KSAmJgorCQkJICAgIChody0+bWFjLnR5cGUgIT0gZTEwMDBfODI1ODMpKQorCQkJCWFkYXB0ZXItPnN0YXRzLnRuY3JzICs9IGVyMzIoVE5DUlMpOworCQl9CisJCWFkYXB0ZXItPnN0YXRzLmNvbGMgKz0gaHctPm1hYy5jb2xsaXNpb25fZGVsdGE7CiAJfQorCiAJYWRhcHRlci0+c3RhdHMueG9ucnhjICs9IGVyMzIoWE9OUlhDKTsKIAlhZGFwdGVyLT5zdGF0cy54b250eGMgKz0gZXIzMihYT05UWEMpOwogCWFkYXB0ZXItPnN0YXRzLnhvZmZyeGMgKz0gZXIzMihYT0ZGUlhDKTsKQEAgLTM3NDUsMjggKzM4NzcsOSBAQAogCiAJaHctPm1hYy50eF9wYWNrZXRfZGVsdGEgPSBlcjMyKFRQVCk7CiAJYWRhcHRlci0+c3RhdHMudHB0ICs9IGh3LT5tYWMudHhfcGFja2V0X2RlbHRhOwotCWlmICgoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV84MjU3OCkgfHwKLQkgICAgKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfODI1NzcpKSB7Ci0JCWUxZV9ycGh5KGh3LCBIVl9DT0xDX1VQUEVSLCAmcGh5X2RhdGEpOwotCQlpZiAoIWUxZV9ycGh5KGh3LCBIVl9DT0xDX0xPV0VSLCAmcGh5X2RhdGEpKQotCQkJaHctPm1hYy5jb2xsaXNpb25fZGVsdGEgPSBwaHlfZGF0YTsKLQl9IGVsc2UgewotCQlody0+bWFjLmNvbGxpc2lvbl9kZWx0YSA9IGVyMzIoQ09MQyk7Ci0JfQotCWFkYXB0ZXItPnN0YXRzLmNvbGMgKz0gaHctPm1hYy5jb2xsaXNpb25fZGVsdGE7CiAKIAlhZGFwdGVyLT5zdGF0cy5hbGduZXJyYyArPSBlcjMyKEFMR05FUlJDKTsKIAlhZGFwdGVyLT5zdGF0cy5yeGVycmMgKz0gZXIzMihSWEVSUkMpOwotCWlmICgoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV84MjU3OCkgfHwKLQkgICAgKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfODI1NzcpKSB7Ci0JCWUxZV9ycGh5KGh3LCBIVl9UTkNSU19VUFBFUiwgJnBoeV9kYXRhKTsKLQkJaWYgKCFlMWVfcnBoeShodywgSFZfVE5DUlNfTE9XRVIsICZwaHlfZGF0YSkpCi0JCQlhZGFwdGVyLT5zdGF0cy50bmNycyArPSBwaHlfZGF0YTsKLQl9IGVsc2UgewotCQlpZiAoKGh3LT5tYWMudHlwZSAhPSBlMTAwMF84MjU3NCkgJiYKLQkJICAgIChody0+bWFjLnR5cGUgIT0gZTEwMDBfODI1ODMpKQotCQkJYWRhcHRlci0+c3RhdHMudG5jcnMgKz0gZXIzMihUTkNSUyk7Ci0JfQogCWFkYXB0ZXItPnN0YXRzLmNleHRlcnIgKz0gZXIzMihDRVhURVJSKTsKIAlhZGFwdGVyLT5zdGF0cy50c2N0YyArPSBlcjMyKFRTQ1RDKTsKIAlhZGFwdGVyLT5zdGF0cy50c2N0ZmMgKz0gZXIzMihUU0NURkMpOwpAQCAtMzg2NSw3ICszOTc4LDcgQEAKIAkgICAgICAgKChjdHJsICYgRTEwMDBfQ1RSTF9URkNFKSA/ICJUWCIgOiAiTm9uZSIgKSkpOwogfQogCi1ib29sIGUxMDAwZV9oYXNfbGluayhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBib29sIGUxMDAwZV9oYXNfbGluayhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCWJvb2wgbGlua19hY3RpdmUgPSAwOwpAQCAtNDg0MSwxNCArNDk1NCw3IEBACiAJaW50IHJldHZhbCA9IDA7CiAKIAkvKiBjb3B5IE1BQyBSQVJzIHRvIFBIWSBSQVJzICovCi0JZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPmh3Lm1hYy5yYXJfZW50cnlfY291bnQ7IGkrKykgewotCQltYWNfcmVnID0gZXIzMihSQUwoaSkpOwotCQllMWVfd3BoeShodywgQk1fUkFSX0woaSksICh1MTYpKG1hY19yZWcgJiAweEZGRkYpKTsKLQkJZTFlX3dwaHkoaHcsIEJNX1JBUl9NKGkpLCAodTE2KSgobWFjX3JlZyA+PiAxNikgJiAweEZGRkYpKTsKLQkJbWFjX3JlZyA9IGVyMzIoUkFIKGkpKTsKLQkJZTFlX3dwaHkoaHcsIEJNX1JBUl9IKGkpLCAodTE2KShtYWNfcmVnICYgMHhGRkZGKSk7Ci0JCWUxZV93cGh5KGh3LCBCTV9SQVJfQ1RSTChpKSwgKHUxNikoKG1hY19yZWcgPj4gMTYpICYgMHhGRkZGKSk7Ci0JfQorCWUxMDAwX2NvcHlfcnhfYWRkcnNfdG9fcGh5X2ljaDhsYW4oaHcpOwogCiAJLyogY29weSBNQUMgTVRBIHRvIFBIWSBNVEEgKi8KIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+aHcubWFjLm10YV9yZWdfY291bnQ7IGkrKykgewpAQCAtNTU1MSw4ICs1NjU3LDYgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9zd19pbml0OwogCi0JZXJyID0gLUVJTzsKLQogCW1lbWNweSgmaHctPm1hYy5vcHMsIGVpLT5tYWNfb3BzLCBzaXplb2YoaHctPm1hYy5vcHMpKTsKIAltZW1jcHkoJmh3LT5udm0ub3BzLCBlaS0+bnZtX29wcywgc2l6ZW9mKGh3LT5udm0ub3BzKSk7CiAJbWVtY3B5KCZody0+cGh5Lm9wcywgZWktPnBoeV9vcHMsIHNpemVvZihody0+cGh5Lm9wcykpOwpAQCAtNTcyMSwxMSArNTgyNSw4IEBACiAKIAllMTAwMF9wcmludF9kZXZpY2VfaW5mbyhhZGFwdGVyKTsKIAotCWlmIChwY2lfZGV2X3J1bl93YWtlKHBkZXYpKSB7Ci0JCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZSgmcGRldi0+ZGV2KTsKLQkJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7Ci0JfQotCXBtX3NjaGVkdWxlX3N1c3BlbmQoJnBkZXYtPmRldiwgTVNFQ19QRVJfU0VDKTsKKwlpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSkKKwkJcG1fcnVudGltZV9wdXRfbm9pZGxlKCZwZGV2LT5kZXYpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTU3NzEsOCArNTg3Miw2IEBACiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCWJvb2wgZG93biA9IHRlc3RfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKTsKIAotCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnBkZXYtPmRldik7Ci0KIAkvKgogCSAqIGZsdXNoX3NjaGVkdWxlZCB3b3JrIG1heSByZXNjaGVkdWxlIG91ciB3YXRjaGRvZyB0YXNrLCBzbwogCSAqIGV4cGxpY2l0bHkgZGlzYWJsZSB3YXRjaGRvZyB0YXNrcyBmcm9tIGJlaW5nIHJlc2NoZWR1bGVkCkBAIC01Nzk3LDExICs1ODk2LDggQEAKIAkJY2xlYXJfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKTsKIAl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCi0JaWYgKHBjaV9kZXZfcnVuX3dha2UocGRldikpIHsKLQkJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwotCQlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoJnBkZXYtPmRldik7Ci0JfQotCXBtX3J1bnRpbWVfcHV0X25vaWRsZSgmcGRldi0+ZGV2KTsKKwlpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSkKKwkJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUoJnBkZXYtPmRldik7CiAKIAkvKgogCSAqIFJlbGVhc2UgY29udHJvbCBvZiBoL3cgdG8gZi93LiAgSWYgZi93IGlzIEFNVCBlbmFibGVkLCB0aGlzCkBAIC01ODk5LDYgKzU5OTUsOSBAQAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF9QQ0hfRF9IVl9ETSksIGJvYXJkX3BjaGxhbiB9LAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF9QQ0hfRF9IVl9EQyksIGJvYXJkX3BjaGxhbiB9LAogCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEX1BDSDJfTFZfTE0pLCBib2FyZF9wY2gybGFuIH0sCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEX1BDSDJfTFZfViksIGJvYXJkX3BjaDJsYW4gfSwKKwogCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBlMTAwMF9wY2lfdGJsKTsKQEAgLTU5MzUsNyArNjAzNCw3IEBACiAJaW50IHJldDsKIAlwcl9pbmZvKCJJbnRlbChSKSBQUk8vMTAwMCBOZXR3b3JrIERyaXZlciAtICVzXG4iLAogCQllMTAwMGVfZHJpdmVyX3ZlcnNpb24pOwotCXByX2luZm8oIkNvcHlyaWdodCAoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uXG4iKTsKKwlwcl9pbmZvKCJDb3B5cmlnaHQgKGMpIDE5OTkgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLlxuIik7CiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZTEwMDBfZHJpdmVyKTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvcGFyYW0uYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9wYXJhbS5jCmluZGV4IGExNTBlNDguLjM0YWVlYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9wYXJhbS5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9wYXJhbS5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCBQUk8vMTAwMCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9waHkuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9waHkuYwppbmRleCBiNGFjODJkLi4zZDNkYzBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL3BoeS5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCBQUk8vMTAwMCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTIzMTksNiArMjMxOSw5IEBACiAJY2FzZSBJODI1NzdfRV9QSFlfSUQ6CiAJCXBoeV90eXBlID0gZTEwMDBfcGh5XzgyNTc3OwogCQlicmVhazsKKwljYXNlIEk4MjU3OV9FX1BIWV9JRDoKKwkJcGh5X3R5cGUgPSBlMTAwMF9waHlfODI1Nzk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXBoeV90eXBlID0gZTEwMDBfcGh5X3Vua25vd247CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMKaW5kZXggOGI5MmFjYi4uM2JlYmE3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYworKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jCkBAIC0zMzUsNyArMzM1LDcgQEAKIAogCW1lbXNldChzdGF0cywgMCwgc2l6ZW9mKCpzdGF0cykpOwogCi0JY2IyID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7CisJY2IyID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYjIpIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjIiKTsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfcW1yLmggYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfcW1yLmgKaW5kZXggODgyYzUwYy4uZjYwOGE2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5oCisrKyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuaApAQCAtMTI2LDcgKzEyNiw3IEBACiAJCQl1OCBpbW1lZGlhdGVfZGF0YVtTV1FFMl9NQVhfSU1NXTsKIAkJCS8qIDB4ZDAgKi8KIAkJCXN0cnVjdCBlaGVhX3ZzZ2VudHJ5IHNnX2xpc3RbRUhFQV9NQVhfV1FFX1NHX0VOVFJJRVMtMV07Ci0JCX0gaW1tZGF0YV9kZXNjIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwkJfSBpbW1kYXRhX2Rlc2MgX19wYWNrZWQ7CiAKIAkJLyogIFNlbmQgV1FFIEZvcm1hdCAzICovCiAJCXN0cnVjdCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL2NxX2Rlc2MuaCBiL2RyaXZlcnMvbmV0L2VuaWMvY3FfZGVzYy5oCmluZGV4IDFlYjI4OWYuLmQ2ZGQxYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvY3FfZGVzYy5oCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvY3FfZGVzYy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA4IENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgMjAwNyBOdW92YSBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgbWF5IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL2NxX2VuZXRfZGVzYy5oIGIvZHJpdmVycy9uZXQvZW5pYy9jcV9lbmV0X2Rlc2MuaAppbmRleCAzMzdkMTk0Li5jMmMwNjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL2NxX2VuZXRfZGVzYy5oCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvY3FfZW5ldF9kZXNjLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDggQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAyMDA3IE51b3ZhIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBtYXkgcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTczLDcgKzczLDE2IEBACiAjZGVmaW5lIENRX0VORVRfUlFfREVTQ19GTEFHU19UUlVOQ0FURUQgICAgICAgICAgICAgKDB4MSA8PCAxNCkKICNkZWZpbmUgQ1FfRU5FVF9SUV9ERVNDX0ZMQUdTX1ZMQU5fU1RSSVBQRUQgICAgICAgICAoMHgxIDw8IDE1KQogCi0jZGVmaW5lIENRX0VORVRfUlFfREVTQ19GQ09FX1NPRl9CSVRTICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUV9FTkVUX1JRX0RFU0NfVkxBTl9UQ0lfVkxBTl9CSVRTICAgICAgICAgIDEyCisjZGVmaW5lIENRX0VORVRfUlFfREVTQ19WTEFOX1RDSV9WTEFOX01BU0sgXAorCSgoMSA8PCBDUV9FTkVUX1JRX0RFU0NfVkxBTl9UQ0lfVkxBTl9CSVRTKSAtIDEpCisjZGVmaW5lIENRX0VORVRfUlFfREVTQ19WTEFOX1RDSV9DRklfTUFTSyAgICAgICAgICAgKDB4MSA8PCAxMikKKyNkZWZpbmUgQ1FfRU5FVF9SUV9ERVNDX1ZMQU5fVENJX1VTRVJfUFJJT19CSVRTICAgICAzCisjZGVmaW5lIENRX0VORVRfUlFfREVTQ19WTEFOX1RDSV9VU0VSX1BSSU9fTUFTSyBcCisJKCgxIDw8IENRX0VORVRfUlFfREVTQ19WTEFOX1RDSV9VU0VSX1BSSU9fQklUUykgLSAxKQorI2RlZmluZSBDUV9FTkVUX1JRX0RFU0NfVkxBTl9UQ0lfVVNFUl9QUklPX1NISUZUICAgIDEzCisKKyNkZWZpbmUgQ1FfRU5FVF9SUV9ERVNDX0ZDT0VfU09GX0JJVFMgICAgICAgICAgICAgICA4CiAjZGVmaW5lIENRX0VORVRfUlFfREVTQ19GQ09FX1NPRl9NQVNLIFwKIAkoKDEgPDwgQ1FfRU5FVF9SUV9ERVNDX0ZDT0VfU09GX0JJVFMpIC0gMSkKICNkZWZpbmUgQ1FfRU5FVF9SUV9ERVNDX0ZDT0VfRU9GX0JJVFMgICAgICAgICAgICAgICA4CkBAIC05Niw3ICsxMDUsNyBAQAogCXU4ICp0eXBlLCB1OCAqY29sb3IsIHUxNiAqcV9udW1iZXIsIHUxNiAqY29tcGxldGVkX2luZGV4LAogCXU4ICppbmdyZXNzX3BvcnQsIHU4ICpmY29lLCB1OCAqZW9wLCB1OCAqc29wLCB1OCAqcnNzX3R5cGUsCiAJdTggKmNzdW1fbm90X2NhbGMsIHUzMiAqcnNzX2hhc2gsIHUxNiAqYnl0ZXNfd3JpdHRlbiwgdTggKnBhY2tldF9lcnJvciwKLQl1OCAqdmxhbl9zdHJpcHBlZCwgdTE2ICp2bGFuLCB1MTYgKmNoZWNrc3VtLCB1OCAqZmNvZV9zb2YsCisJdTggKnZsYW5fc3RyaXBwZWQsIHUxNiAqdmxhbl90Y2ksIHUxNiAqY2hlY2tzdW0sIHU4ICpmY29lX3NvZiwKIAl1OCAqZmNvZV9mY19jcmNfb2ssIHU4ICpmY29lX2VuY19lcnJvciwgdTggKmZjb2VfZW9mLAogCXU4ICp0Y3BfdWRwX2NzdW1fb2ssIHU4ICp1ZHAsIHU4ICp0Y3AsIHU4ICppcHY0X2NzdW1fb2ssCiAJdTggKmlwdjYsIHU4ICppcHY0LCB1OCAqaXB2NF9mcmFnbWVudCwgdTggKmZjc19vaykKQEAgLTEzNiw3ICsxNDUsMTAgQEAKIAkqdmxhbl9zdHJpcHBlZCA9IChieXRlc193cml0dGVuX2ZsYWdzICYKIAkJQ1FfRU5FVF9SUV9ERVNDX0ZMQUdTX1ZMQU5fU1RSSVBQRUQpID8gMSA6IDA7CiAKLQkqdmxhbiA9IGxlMTZfdG9fY3B1KGRlc2MtPnZsYW4pOworCS8qCisJICogVGFnIENvbnRyb2wgSW5mb3JtYXRpb24oMTYpID0gdXNlcl9wcmlvcml0eSgzKSArIGNmaSgxKSArIHZsYW4oMTIpCisJICovCisJKnZsYW5fdGNpID0gbGUxNl90b19jcHUoZGVzYy0+dmxhbik7CiAKIAlpZiAoKmZjb2UpIHsKIAkJKmZjb2Vfc29mID0gKHU4KShsZTE2X3RvX2NwdShkZXNjLT5jaGVja3N1bV9mY29lKSAmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL2VuaWMuaCBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pYy5oCmluZGV4IDQ1ZTg2ZDEuLmYyMzlhYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pYy5oCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pYy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA4IENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgMjAwNyBOdW92YSBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgbWF5IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yMCw4ICsyMCw2IEBACiAjaWZuZGVmIF9FTklDX0hfCiAjZGVmaW5lIF9FTklDX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9pbmV0X2xyby5oPgotCiAjaW5jbHVkZSAidm5pY19lbmV0LmgiCiAjaW5jbHVkZSAidm5pY19kZXYuaCIKICNpbmNsdWRlICJ2bmljX3dxLmgiCkBAIC0zNCwxMiArMzIsOCBAQAogCiAjZGVmaW5lIERSVl9OQU1FCQkiZW5pYyIKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCQkiQ2lzY28gVklDIEV0aGVybmV0IE5JQyBEcml2ZXIiCi0jZGVmaW5lIERSVl9WRVJTSU9OCQkiMS4zLjEuMS1wcCIKLSNkZWZpbmUgRFJWX0NPUFlSSUdIVAkJIkNvcHlyaWdodCAyMDA4LTIwMDkgQ2lzY28gU3lzdGVtcywgSW5jIgotI2RlZmluZSBQRlgJCQlEUlZfTkFNRSAiOiAiCi0KLSNkZWZpbmUgRU5JQ19MUk9fTUFYX0RFU0MJOAotI2RlZmluZSBFTklDX0xST19NQVhfQUdHUgk2NAorI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuNC4xLjEiCisjZGVmaW5lIERSVl9DT1BZUklHSFQJCSJDb3B5cmlnaHQgMjAwOC0yMDEwIENpc2NvIFN5c3RlbXMsIEluYyIKIAogI2RlZmluZSBFTklDX0JBUlNfTUFYCQk2CiAKQEAgLTExNiw2ICsxMTAsOCBAQAogCXNwaW5sb2NrX3Qgd3FfbG9ja1tFTklDX1dRX01BWF07CiAJdW5zaWduZWQgaW50IHdxX2NvdW50OwogCXN0cnVjdCB2bGFuX2dyb3VwICp2bGFuX2dyb3VwOworCXUxNiBsb29wX2VuYWJsZTsKKwl1MTYgbG9vcF90YWc7CiAKIAkvKiByZWNlaXZlIHF1ZXVlIGNhY2hlIGxpbmUgc2VjdGlvbiAqLwogCV9fX19jYWNoZWxpbmVfYWxpZ25lZCBzdHJ1Y3Qgdm5pY19ycSBycVtFTklDX1JRX01BWF07CkBAIC0xMjQsOCArMTIwLDYgQEAKIAl1NjQgcnFfdHJ1bmNhdGVkX3BrdHM7CiAJdTY0IHJxX2JhZF9mY3M7CiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7Ci0Jc3RydWN0IG5ldF9scm9fbWdyIGxyb19tZ3I7Ci0Jc3RydWN0IG5ldF9scm9fZGVzYyBscm9fZGVzY1tFTklDX0xST19NQVhfREVTQ107CiAKIAkvKiBpbnRlcnJ1cHQgcmVzb3VyY2UgY2FjaGUgbGluZSBzZWN0aW9uICovCiAJX19fX2NhY2hlbGluZV9hbGlnbmVkIHN0cnVjdCB2bmljX2ludHIgaW50cltFTklDX0lOVFJfTUFYXTsKQEAgLTEzNyw0ICsxMzEsOSBAQAogCXVuc2lnbmVkIGludCBjcV9jb3VudDsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZSAqZW5pY19nZXRfZGV2KHN0cnVjdCBlbmljICplbmljKQoreworCXJldHVybiAmKGVuaWMtPnBkZXYtPmRldik7Cit9CisKICNlbmRpZiAvKiBfRU5JQ19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy9lbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19tYWluLmMKaW5kZXggYmM3ZDZiOS4uNzdhN2Y4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy9lbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfbWFpbi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA4IENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgMjAwNyBOdW92YSBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgbWF5IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yOSwxMiArMjksMTIgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX2xpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvaXA2X2NoZWNrc3VtLmg+CiAKICNpbmNsdWRlICJjcV9lbmV0X2Rlc2MuaCIKQEAgLTE0NSwxNSArMTQ1LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZW5pY19kZXZfZndfaW5mbyhzdHJ1Y3QgZW5pYyAqZW5pYywKKwlzdHJ1Y3Qgdm5pY19kZXZjbWRfZndfaW5mbyAqKmZ3X2luZm8pCit7CisJaW50IGVycjsKKworCXNwaW5fbG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOworCWVyciA9IHZuaWNfZGV2X2Z3X2luZm8oZW5pYy0+dmRldiwgZndfaW5mbyk7CisJc3Bpbl91bmxvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyB2b2lkIGVuaWNfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAlzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICpkcnZpbmZvKQogewogCXN0cnVjdCBlbmljICplbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3Qgdm5pY19kZXZjbWRfZndfaW5mbyAqZndfaW5mbzsKIAotCXNwaW5fbG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOwotCXZuaWNfZGV2X2Z3X2luZm8oZW5pYy0+dmRldiwgJmZ3X2luZm8pOwotCXNwaW5fdW5sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CisJZW5pY19kZXZfZndfaW5mbyhlbmljLCAmZndfaW5mbyk7CiAKIAlzdHJuY3B5KGRydmluZm8tPmRyaXZlciwgRFJWX05BTUUsIHNpemVvZihkcnZpbmZvLT5kcml2ZXIpKTsKIAlzdHJuY3B5KGRydmluZm8tPnZlcnNpb24sIERSVl9WRVJTSU9OLCBzaXplb2YoZHJ2aW5mby0+dmVyc2lvbikpOwpAQCAtMTkxLDYgKzIwMSwxNyBAQAogCX0KIH0KIAorc3RhdGljIGludCBlbmljX2Rldl9zdGF0c19kdW1wKHN0cnVjdCBlbmljICplbmljLCBzdHJ1Y3Qgdm5pY19zdGF0cyAqKnZzdGF0cykKK3sKKwlpbnQgZXJyOworCisJc3Bpbl9sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CisJZXJyID0gdm5pY19kZXZfc3RhdHNfZHVtcChlbmljLT52ZGV2LCB2c3RhdHMpOworCXNwaW5fdW5sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CisKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgdm9pZCBlbmljX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgKmRhdGEpCiB7CkBAIC0xOTgsOSArMjE5LDcgQEAKIAlzdHJ1Y3Qgdm5pY19zdGF0cyAqdnN0YXRzOwogCXVuc2lnbmVkIGludCBpOwogCi0Jc3Bpbl9sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7Ci0Jdm5pY19kZXZfc3RhdHNfZHVtcChlbmljLT52ZGV2LCAmdnN0YXRzKTsKLQlzcGluX3VubG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOworCWVuaWNfZGV2X3N0YXRzX2R1bXAoZW5pYywgJnZzdGF0cyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZW5pY19uX3R4X3N0YXRzOyBpKyspCiAJCSooZGF0YSsrKSA9ICgodTY0ICopJnZzdGF0cy0+dHgpW2VuaWNfdHhfc3RhdHNbaV0ub2Zmc2V0XTsKQEAgLTM0Niw3ICszNjUsNiBAQAogCS5nZXRfY29hbGVzY2UgPSBlbmljX2dldF9jb2FsZXNjZSwKIAkuc2V0X2NvYWxlc2NlID0gZW5pY19zZXRfY29hbGVzY2UsCiAJLmdldF9mbGFncyA9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAotCS5zZXRfZmxhZ3MgPSBldGh0b29sX29wX3NldF9mbGFncywKIH07CiAKIHN0YXRpYyB2b2lkIGVuaWNfZnJlZV93cV9idWYoc3RydWN0IHZuaWNfd3EgKndxLCBzdHJ1Y3Qgdm5pY193cV9idWYgKmJ1ZikKQEAgLTM5OSwxNSArNDE3LDQxIEBACiAJZm9yIChpID0gMDsgaSA8IGVuaWMtPndxX2NvdW50OyBpKyspIHsKIAkJZXJyb3Jfc3RhdHVzID0gdm5pY193cV9lcnJvcl9zdGF0dXMoJmVuaWMtPndxW2ldKTsKIAkJaWYgKGVycm9yX3N0YXR1cykKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBXUVslZF0gZXJyb3Jfc3RhdHVzICVkXG4iLAotCQkJCWVuaWMtPm5ldGRldi0+bmFtZSwgaSwgZXJyb3Jfc3RhdHVzKTsKKwkJCW5ldGRldl9lcnIoZW5pYy0+bmV0ZGV2LCAiV1FbJWRdIGVycm9yX3N0YXR1cyAlZFxuIiwKKwkJCQlpLCBlcnJvcl9zdGF0dXMpOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBlbmljLT5ycV9jb3VudDsgaSsrKSB7CiAJCWVycm9yX3N0YXR1cyA9IHZuaWNfcnFfZXJyb3Jfc3RhdHVzKCZlbmljLT5ycVtpXSk7CiAJCWlmIChlcnJvcl9zdGF0dXMpCi0JCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogUlFbJWRdIGVycm9yX3N0YXR1cyAlZFxuIiwKLQkJCQllbmljLT5uZXRkZXYtPm5hbWUsIGksIGVycm9yX3N0YXR1cyk7CisJCQluZXRkZXZfZXJyKGVuaWMtPm5ldGRldiwgIlJRWyVkXSBlcnJvcl9zdGF0dXMgJWRcbiIsCisJCQkJaSwgZXJyb3Jfc3RhdHVzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGVuaWNfbXNnbHZsX2NoZWNrKHN0cnVjdCBlbmljICplbmljKQoreworCXUzMiBtc2dfZW5hYmxlID0gdm5pY19kZXZfbXNnX2x2bChlbmljLT52ZGV2KTsKKworCWlmIChtc2dfZW5hYmxlICE9IGVuaWMtPm1zZ19lbmFibGUpIHsKKwkJbmV0ZGV2X2luZm8oZW5pYy0+bmV0ZGV2LCAibXNnIGx2bCBjaGFuZ2VkIGZyb20gMHgleCB0byAweCV4XG4iLAorCQkJZW5pYy0+bXNnX2VuYWJsZSwgbXNnX2VuYWJsZSk7CisJCWVuaWMtPm1zZ19lbmFibGUgPSBtc2dfZW5hYmxlOworCX0KK30KKworc3RhdGljIHZvaWQgZW5pY19tdHVfY2hlY2soc3RydWN0IGVuaWMgKmVuaWMpCit7CisJdTMyIG10dSA9IHZuaWNfZGV2X210dShlbmljLT52ZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZW5pYy0+bmV0ZGV2OworCisJaWYgKG10dSAmJiBtdHUgIT0gZW5pYy0+cG9ydF9tdHUpIHsKKwkJZW5pYy0+cG9ydF9tdHUgPSBtdHU7CisJCWlmIChtdHUgPCBuZXRkZXYtPm10dSkKKwkJCW5ldGRldl93YXJuKG5ldGRldiwKKwkJCQkiaW50ZXJmYWNlIE1UVSAoJWQpIHNldCBoaWdoZXIgIgorCQkJCSJ0aGFuIHN3aXRjaCBwb3J0IE1UVSAoJWQpXG4iLAorCQkJCW5ldGRldi0+bXR1LCBtdHUpOwogCX0KIH0KIApAQCAtNDE3LDM5ICs0NjEsMTQgQEAKIAlpbnQgY2Fycmllcl9vayA9IG5ldGlmX2NhcnJpZXJfb2soZW5pYy0+bmV0ZGV2KTsKIAogCWlmIChsaW5rX3N0YXR1cyAmJiAhY2Fycmllcl9vaykgewotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IExpbmsgVVBcbiIsIGVuaWMtPm5ldGRldi0+bmFtZSk7CisJCW5ldGRldl9pbmZvKGVuaWMtPm5ldGRldiwgIkxpbmsgVVBcbiIpOwogCQluZXRpZl9jYXJyaWVyX29uKGVuaWMtPm5ldGRldik7CiAJfSBlbHNlIGlmICghbGlua19zdGF0dXMgJiYgY2Fycmllcl9vaykgewotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IExpbmsgRE9XTlxuIiwgZW5pYy0+bmV0ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2luZm8oZW5pYy0+bmV0ZGV2LCAiTGluayBET1dOXG4iKTsKIAkJbmV0aWZfY2Fycmllcl9vZmYoZW5pYy0+bmV0ZGV2KTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGVuaWNfbXR1X2NoZWNrKHN0cnVjdCBlbmljICplbmljKQotewotCXUzMiBtdHUgPSB2bmljX2Rldl9tdHUoZW5pYy0+dmRldik7Ci0KLQlpZiAobXR1ICYmIG10dSAhPSBlbmljLT5wb3J0X210dSkgewotCQllbmljLT5wb3J0X210dSA9IG10dTsKLQkJaWYgKG10dSA8IGVuaWMtPm5ldGRldi0+bXR1KQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKLQkJCQkiJXM6IGludGVyZmFjZSBNVFUgKCVkKSBzZXQgaGlnaGVyICIKLQkJCQkidGhhbiBzd2l0Y2ggcG9ydCBNVFUgKCVkKVxuIiwKLQkJCQllbmljLT5uZXRkZXYtPm5hbWUsIGVuaWMtPm5ldGRldi0+bXR1LCBtdHUpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZW5pY19tc2dsdmxfY2hlY2soc3RydWN0IGVuaWMgKmVuaWMpCi17Ci0JdTMyIG1zZ19lbmFibGUgPSB2bmljX2Rldl9tc2dfbHZsKGVuaWMtPnZkZXYpOwotCi0JaWYgKG1zZ19lbmFibGUgIT0gZW5pYy0+bXNnX2VuYWJsZSkgewotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IG1zZyBsdmwgY2hhbmdlZCBmcm9tIDB4JXggdG8gMHgleFxuIiwKLQkJCWVuaWMtPm5ldGRldi0+bmFtZSwgZW5pYy0+bXNnX2VuYWJsZSwgbXNnX2VuYWJsZSk7Ci0JCWVuaWMtPm1zZ19lbmFibGUgPSBtc2dfZW5hYmxlOwotCX0KLX0KLQogc3RhdGljIHZvaWQgZW5pY19ub3RpZnlfY2hlY2soc3RydWN0IGVuaWMgKmVuaWMpCiB7CiAJZW5pY19tc2dsdmxfY2hlY2soZW5pYyk7CkBAIC01NzQsNyArNTkzLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGVuaWNfcXVldWVfd3Ffc2tiX2NvbnQoc3RydWN0IGVuaWMgKmVuaWMsCiAJc3RydWN0IHZuaWNfd3EgKndxLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCXVuc2lnbmVkIGludCBsZW5fbGVmdCkKKwl1bnNpZ25lZCBpbnQgbGVuX2xlZnQsIGludCBsb29wYmFjaykKIHsKIAlza2JfZnJhZ190ICpmcmFnOwogCkBAIC01ODYsMTMgKzYwNSwxNCBAQAogCQkJCWZyYWctPnBhZ2Vfb2Zmc2V0LCBmcmFnLT5zaXplLAogCQkJCVBDSV9ETUFfVE9ERVZJQ0UpLAogCQkJZnJhZy0+c2l6ZSwKLQkJCShsZW5fbGVmdCA9PSAwKSk7CS8qIEVPUD8gKi8KKwkJCShsZW5fbGVmdCA9PSAwKSwJLyogRU9QPyAqLworCQkJbG9vcGJhY2spOwogCX0KIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGVuaWNfcXVldWVfd3Ffc2tiX3ZsYW4oc3RydWN0IGVuaWMgKmVuaWMsCiAJc3RydWN0IHZuaWNfd3EgKndxLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCWludCB2bGFuX3RhZ19pbnNlcnQsIHVuc2lnbmVkIGludCB2bGFuX3RhZykKKwlpbnQgdmxhbl90YWdfaW5zZXJ0LCB1bnNpZ25lZCBpbnQgdmxhbl90YWcsIGludCBsb29wYmFjaykKIHsKIAl1bnNpZ25lZCBpbnQgaGVhZF9sZW4gPSBza2JfaGVhZGxlbihza2IpOwogCXVuc2lnbmVkIGludCBsZW5fbGVmdCA9IHNrYi0+bGVuIC0gaGVhZF9sZW47CkBAIC02MDgsMTUgKzYyOCwxNSBAQAogCQkJaGVhZF9sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpLAogCQloZWFkX2xlbiwKIAkJdmxhbl90YWdfaW5zZXJ0LCB2bGFuX3RhZywKLQkJZW9wKTsKKwkJZW9wLCBsb29wYmFjayk7CiAKIAlpZiAoIWVvcCkKLQkJZW5pY19xdWV1ZV93cV9za2JfY29udChlbmljLCB3cSwgc2tiLCBsZW5fbGVmdCk7CisJCWVuaWNfcXVldWVfd3Ffc2tiX2NvbnQoZW5pYywgd3EsIHNrYiwgbGVuX2xlZnQsIGxvb3BiYWNrKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGVuaWNfcXVldWVfd3Ffc2tiX2NzdW1fbDQoc3RydWN0IGVuaWMgKmVuaWMsCiAJc3RydWN0IHZuaWNfd3EgKndxLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCWludCB2bGFuX3RhZ19pbnNlcnQsIHVuc2lnbmVkIGludCB2bGFuX3RhZykKKwlpbnQgdmxhbl90YWdfaW5zZXJ0LCB1bnNpZ25lZCBpbnQgdmxhbl90YWcsIGludCBsb29wYmFjaykKIHsKIAl1bnNpZ25lZCBpbnQgaGVhZF9sZW4gPSBza2JfaGVhZGxlbihza2IpOwogCXVuc2lnbmVkIGludCBsZW5fbGVmdCA9IHNrYi0+bGVuIC0gaGVhZF9sZW47CkBAIC02MzYsMTUgKzY1NiwxNSBAQAogCQljc3VtX29mZnNldCwKIAkJaGRyX2xlbiwKIAkJdmxhbl90YWdfaW5zZXJ0LCB2bGFuX3RhZywKLQkJZW9wKTsKKwkJZW9wLCBsb29wYmFjayk7CiAKIAlpZiAoIWVvcCkKLQkJZW5pY19xdWV1ZV93cV9za2JfY29udChlbmljLCB3cSwgc2tiLCBsZW5fbGVmdCk7CisJCWVuaWNfcXVldWVfd3Ffc2tiX2NvbnQoZW5pYywgd3EsIHNrYiwgbGVuX2xlZnQsIGxvb3BiYWNrKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGVuaWNfcXVldWVfd3Ffc2tiX3RzbyhzdHJ1Y3QgZW5pYyAqZW5pYywKIAlzdHJ1Y3Qgdm5pY193cSAqd3EsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBtc3MsCi0JaW50IHZsYW5fdGFnX2luc2VydCwgdW5zaWduZWQgaW50IHZsYW5fdGFnKQorCWludCB2bGFuX3RhZ19pbnNlcnQsIHVuc2lnbmVkIGludCB2bGFuX3RhZywgaW50IGxvb3BiYWNrKQogewogCXVuc2lnbmVkIGludCBmcmFnX2xlbl9sZWZ0ID0gc2tiX2hlYWRsZW4oc2tiKTsKIAl1bnNpZ25lZCBpbnQgbGVuX2xlZnQgPSBza2ItPmxlbiAtIGZyYWdfbGVuX2xlZnQ7CkBAIC02ODEsNyArNzAxLDcgQEAKIAkJCWxlbiwKIAkJCW1zcywgaGRyX2xlbiwKIAkJCXZsYW5fdGFnX2luc2VydCwgdmxhbl90YWcsCi0JCQllb3AgJiYgKGxlbiA9PSBmcmFnX2xlbl9sZWZ0KSk7CisJCQllb3AgJiYgKGxlbiA9PSBmcmFnX2xlbl9sZWZ0KSwgbG9vcGJhY2spOwogCQlmcmFnX2xlbl9sZWZ0IC09IGxlbjsKIAkJb2Zmc2V0ICs9IGxlbjsKIAl9CkBAIC03MDcsNyArNzI3LDggQEAKIAkJCQlkbWFfYWRkciwKIAkJCQlsZW4sCiAJCQkJKGxlbl9sZWZ0ID09IDApICYmCi0JCQkJKGxlbiA9PSBmcmFnX2xlbl9sZWZ0KSk7CS8qIEVPUD8gKi8KKwkJCQkobGVuID09IGZyYWdfbGVuX2xlZnQpLAkJLyogRU9QPyAqLworCQkJCWxvb3BiYWNrKTsKIAkJCWZyYWdfbGVuX2xlZnQgLT0gbGVuOwogCQkJb2Zmc2V0ICs9IGxlbjsKIAkJfQpAQCAtNzIwLDIyICs3NDEsMjYgQEAKIAl1bnNpZ25lZCBpbnQgbXNzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZTsKIAl1bnNpZ25lZCBpbnQgdmxhbl90YWcgPSAwOwogCWludCB2bGFuX3RhZ19pbnNlcnQgPSAwOworCWludCBsb29wYmFjayA9IDA7CiAKIAlpZiAoZW5pYy0+dmxhbl9ncm91cCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKIAkJLyogVkxBTiB0YWcgZnJvbSB0cnVua2luZyBkcml2ZXIgKi8KIAkJdmxhbl90YWdfaW5zZXJ0ID0gMTsKIAkJdmxhbl90YWcgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKKwl9IGVsc2UgaWYgKGVuaWMtPmxvb3BfZW5hYmxlKSB7CisJCXZsYW5fdGFnID0gZW5pYy0+bG9vcF90YWc7CisJCWxvb3BiYWNrID0gMTsKIAl9CiAKIAlpZiAobXNzKQogCQllbmljX3F1ZXVlX3dxX3NrYl90c28oZW5pYywgd3EsIHNrYiwgbXNzLAotCQkJdmxhbl90YWdfaW5zZXJ0LCB2bGFuX3RhZyk7CisJCQl2bGFuX3RhZ19pbnNlcnQsIHZsYW5fdGFnLCBsb29wYmFjayk7CiAJZWxzZSBpZgkoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkKIAkJZW5pY19xdWV1ZV93cV9za2JfY3N1bV9sNChlbmljLCB3cSwgc2tiLAotCQkJdmxhbl90YWdfaW5zZXJ0LCB2bGFuX3RhZyk7CisJCQl2bGFuX3RhZ19pbnNlcnQsIHZsYW5fdGFnLCBsb29wYmFjayk7CiAJZWxzZQogCQllbmljX3F1ZXVlX3dxX3NrYl92bGFuKGVuaWMsIHdxLCBza2IsCi0JCQl2bGFuX3RhZ19pbnNlcnQsIHZsYW5fdGFnKTsKKwkJCXZsYW5fdGFnX2luc2VydCwgdmxhbl90YWcsIGxvb3BiYWNrKTsKIH0KIAogLyogbmV0aWZfdHhfbG9jayBoZWxkLCBwcm9jZXNzIGNvbnRleHQgd2l0aCBCSHMgZGlzYWJsZWQsIG9yIEJIICovCkBAIC03NjksOCArNzk0LDcgQEAKIAkgICAgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIEVOSUNfREVTQ19NQVhfU1BMSVRTKSB7CiAJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKIAkJLyogVGhpcyBpcyBhIGhhcmQgZXJyb3IsIGxvZyBpdCAqLwotCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogQlVHISBUeCByaW5nIGZ1bGwgd2hlbiAiCi0JCQkicXVldWUgYXdha2UhXG4iLCBuZXRkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKG5ldGRldiwgIkJVRyEgVHggcmluZyBmdWxsIHdoZW4gcXVldWUgYXdha2UhXG4iKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5pYy0+d3FfbG9ja1swXSwgZmxhZ3MpOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQpAQCAtNzkyLDkgKzgxNiw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5ldF9zdGF0cyA9ICZuZXRkZXYtPnN0YXRzOwogCXN0cnVjdCB2bmljX3N0YXRzICpzdGF0czsKIAotCXNwaW5fbG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOwotCXZuaWNfZGV2X3N0YXRzX2R1bXAoZW5pYy0+dmRldiwgJnN0YXRzKTsKLQlzcGluX3VubG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOworCWVuaWNfZGV2X3N0YXRzX2R1bXAoZW5pYywgJnN0YXRzKTsKIAogCW5ldF9zdGF0cy0+dHhfcGFja2V0cyA9IHN0YXRzLT50eC50eF9mcmFtZXNfb2s7CiAJbmV0X3N0YXRzLT50eF9ieXRlcyA9IHN0YXRzLT50eC50eF9ieXRlc19vazsKQEAgLTgxMiw5ICs4MzQsMTAgQEAKIAlyZXR1cm4gbmV0X3N0YXRzOwogfQogCi1zdGF0aWMgdm9pZCBlbmljX3Jlc2V0X21jYWRkcnMoc3RydWN0IGVuaWMgKmVuaWMpCitzdGF0aWMgdm9pZCBlbmljX3Jlc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBlbmljICplbmljKQogewogCWVuaWMtPm1jX2NvdW50ID0gMDsKKwllbmljLT5mbGFncyA9IDA7CiB9CiAKIHN0YXRpYyBpbnQgZW5pY19zZXRfbWFjX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY2hhciAqYWRkcikKQEAgLTg5MSw2ICs5MTQsNDEgQEAKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CiAKK3N0YXRpYyBpbnQgZW5pY19kZXZfcGFja2V0X2ZpbHRlcihzdHJ1Y3QgZW5pYyAqZW5pYywgaW50IGRpcmVjdGVkLAorCWludCBtdWx0aWNhc3QsIGludCBicm9hZGNhc3QsIGludCBwcm9taXNjLCBpbnQgYWxsbXVsdGkpCit7CisJaW50IGVycjsKKworCXNwaW5fbG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOworCWVyciA9IHZuaWNfZGV2X3BhY2tldF9maWx0ZXIoZW5pYy0+dmRldiwgZGlyZWN0ZWQsCisJCW11bHRpY2FzdCwgYnJvYWRjYXN0LCBwcm9taXNjLCBhbGxtdWx0aSk7CisJc3Bpbl91bmxvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZW5pY19kZXZfYWRkX211bHRpY2FzdF9hZGRyKHN0cnVjdCBlbmljICplbmljLCB1OCAqYWRkcikKK3sKKwlpbnQgZXJyOworCisJc3Bpbl9sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CisJZXJyID0gdm5pY19kZXZfYWRkX2FkZHIoZW5pYy0+dmRldiwgYWRkcik7CisJc3Bpbl91bmxvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZW5pY19kZXZfZGVsX211bHRpY2FzdF9hZGRyKHN0cnVjdCBlbmljICplbmljLCB1OCAqYWRkcikKK3sKKwlpbnQgZXJyOworCisJc3Bpbl9sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CisJZXJyID0gdm5pY19kZXZfZGVsX2FkZHIoZW5pYy0+dmRldiwgYWRkcik7CisJc3Bpbl91bmxvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CisKIC8qIG5ldGlmX3R4X2xvY2sgaGVsZCwgQkhzIGRpc2FibGVkICovCiBzdGF0aWMgdm9pZCBlbmljX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewpAQCAtOTEwLDExICs5NjgsOSBAQAogCWlmIChtY19jb3VudCA+IEVOSUNfTVVMVElDQVNUX1BFUkZFQ1RfRklMVEVSUykKIAkJbWNfY291bnQgPSBFTklDX01VTFRJQ0FTVF9QRVJGRUNUX0ZJTFRFUlM7CiAKLQlzcGluX2xvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKLQogCWlmIChlbmljLT5mbGFncyAhPSBmbGFncykgewogCQllbmljLT5mbGFncyA9IGZsYWdzOwotCQl2bmljX2Rldl9wYWNrZXRfZmlsdGVyKGVuaWMtPnZkZXYsIGRpcmVjdGVkLAorCQllbmljX2Rldl9wYWNrZXRfZmlsdGVyKGVuaWMsIGRpcmVjdGVkLAogCQkJbXVsdGljYXN0LCBicm9hZGNhc3QsIHByb21pc2MsIGFsbG11bHRpKTsKIAl9CiAKQEAgLTkzNyw3ICs5OTMsNyBAQAogCQkJCW1jX2FkZHJbal0pID09IDApCiAJCQkJYnJlYWs7CiAJCWlmIChqID09IG1jX2NvdW50KQotCQkJZW5pY19kZWxfbXVsdGljYXN0X2FkZHIoZW5pYywgZW5pYy0+bWNfYWRkcltpXSk7CisJCQllbmljX2Rldl9kZWxfbXVsdGljYXN0X2FkZHIoZW5pYywgZW5pYy0+bWNfYWRkcltpXSk7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IG1jX2NvdW50OyBpKyspIHsKQEAgLTk0Niw3ICsxMDAyLDcgQEAKIAkJCQllbmljLT5tY19hZGRyW2pdKSA9PSAwKQogCQkJCWJyZWFrOwogCQlpZiAoaiA9PSBlbmljLT5tY19jb3VudCkKLQkJCWVuaWNfYWRkX211bHRpY2FzdF9hZGRyKGVuaWMsIG1jX2FkZHJbaV0pOworCQkJZW5pY19kZXZfYWRkX211bHRpY2FzdF9hZGRyKGVuaWMsIG1jX2FkZHJbaV0pOwogCX0KIAogCS8qIFNhdmUgdGhlIGxpc3QgdG8gY29tcGFyZSBhZ2FpbnN0IG5leHQgdGltZQpAQCAtOTU2LDggKzEwMTIsNiBAQAogCQltZW1jcHkoZW5pYy0+bWNfYWRkcltpXSwgbWNfYWRkcltpXSwgRVRIX0FMRU4pOwogCiAJZW5pYy0+bWNfY291bnQgPSBtY19jb3VudDsKLQotCXNwaW5fdW5sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CiB9CiAKIC8qIHJ0bmwgbG9jayBpcyBoZWxkICovCkBAIC0xMjI2LDcgKzEyODAsNyBAQAogCXN0cnVjdCBlbmljICplbmljID0gdm5pY19kZXZfcHJpdihycS0+dmRldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGVuaWMtPm5ldGRldjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXVuc2lnbmVkIGludCBsZW4gPSBuZXRkZXYtPm10dSArIEVUSF9ITEVOOworCXVuc2lnbmVkIGludCBsZW4gPSBuZXRkZXYtPm10dSArIFZMQU5fRVRIX0hMRU47CiAJdW5zaWduZWQgaW50IG9zX2J1Zl9pbmRleCA9IDA7CiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsKIApAQCAtMTI2MywxMiArMTMxNywyNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGVuaWNfZGV2X2h3X3ZlcnNpb24oc3RydWN0IGVuaWMgKmVuaWMsCisJZW51bSB2bmljX2Rldl9od192ZXJzaW9uICpod192ZXIpCit7CisJaW50IGVycjsKKworCXNwaW5fbG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOworCWVyciA9IHZuaWNfZGV2X2h3X3ZlcnNpb24oZW5pYy0+dmRldiwgaHdfdmVyKTsKKwlzcGluX3VubG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOworCisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIGludCBlbmljX3NldF9ycV9hbGxvY19idWYoc3RydWN0IGVuaWMgKmVuaWMpCiB7CiAJZW51bSB2bmljX2Rldl9od192ZXJzaW9uIGh3X3ZlcjsKIAlpbnQgZXJyOwogCi0JZXJyID0gdm5pY19kZXZfaHdfdmVyc2lvbihlbmljLT52ZGV2LCAmaHdfdmVyKTsKKwllcnIgPSBlbmljX2Rldl9od192ZXJzaW9uKGVuaWMsICZod192ZXIpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTEyODcsNTEgKzEzNTMsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGVuaWNfZ2V0X3NrYl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqKmlwaGRyLAotCXZvaWQgKip0Y3BoLCB1NjQgKmhkcl9mbGFncywgdm9pZCAqcHJpdikKLXsKLQlzdHJ1Y3QgY3FfZW5ldF9ycV9kZXNjICpjcV9kZXNjID0gcHJpdjsKLQl1bnNpZ25lZCBpbnQgaXBfbGVuOwotCXN0cnVjdCBpcGhkciAqaXBoOwotCi0JdTggdHlwZSwgY29sb3IsIGVvcCwgc29wLCBpbmdyZXNzX3BvcnQsIHZsYW5fc3RyaXBwZWQ7Ci0JdTggZmNvZSwgZmNvZV9zb2YsIGZjb2VfZmNfY3JjX29rLCBmY29lX2VuY19lcnJvciwgZmNvZV9lb2Y7Ci0JdTggdGNwX3VkcF9jc3VtX29rLCB1ZHAsIHRjcCwgaXB2NF9jc3VtX29rOwotCXU4IGlwdjYsIGlwdjQsIGlwdjRfZnJhZ21lbnQsIGZjc19vaywgcnNzX3R5cGUsIGNzdW1fbm90X2NhbGM7Ci0JdTggcGFja2V0X2Vycm9yOwotCXUxNiBxX251bWJlciwgY29tcGxldGVkX2luZGV4LCBieXRlc193cml0dGVuLCB2bGFuLCBjaGVja3N1bTsKLQl1MzIgcnNzX2hhc2g7Ci0KLQljcV9lbmV0X3JxX2Rlc2NfZGVjKGNxX2Rlc2MsCi0JCSZ0eXBlLCAmY29sb3IsICZxX251bWJlciwgJmNvbXBsZXRlZF9pbmRleCwKLQkJJmluZ3Jlc3NfcG9ydCwgJmZjb2UsICZlb3AsICZzb3AsICZyc3NfdHlwZSwKLQkJJmNzdW1fbm90X2NhbGMsICZyc3NfaGFzaCwgJmJ5dGVzX3dyaXR0ZW4sCi0JCSZwYWNrZXRfZXJyb3IsICZ2bGFuX3N0cmlwcGVkLCAmdmxhbiwgJmNoZWNrc3VtLAotCQkmZmNvZV9zb2YsICZmY29lX2ZjX2NyY19vaywgJmZjb2VfZW5jX2Vycm9yLAotCQkmZmNvZV9lb2YsICZ0Y3BfdWRwX2NzdW1fb2ssICZ1ZHAsICZ0Y3AsCi0JCSZpcHY0X2NzdW1fb2ssICZpcHY2LCAmaXB2NCwgJmlwdjRfZnJhZ21lbnQsCi0JCSZmY3Nfb2spOwotCi0JaWYgKCEoaXB2NCAmJiB0Y3AgJiYgIWlwdjRfZnJhZ21lbnQpKQotCQlyZXR1cm4gLTE7Ci0KLQlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKLQlpcGggPSBpcF9oZHIoc2tiKTsKLQotCWlwX2xlbiA9IGlwX2hkcmxlbihza2IpOwotCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIGlwX2xlbik7Ci0KLQkvKiBjaGVjayBpZiBpcCBoZWFkZXIgYW5kIHRjcCBoZWFkZXIgYXJlIGNvbXBsZXRlICovCi0JaWYgKG50b2hzKGlwaC0+dG90X2xlbikgPCBpcF9sZW4gKyB0Y3BfaGRybGVuKHNrYikpCi0JCXJldHVybiAtMTsKLQotCSpoZHJfZmxhZ3MgPSBMUk9fSVBWNCB8IExST19UQ1A7Ci0JKnRjcGggPSB0Y3BfaGRyKHNrYik7Ci0JKmlwaGRyID0gaXBoOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIGVuaWNfcnFfaW5kaWNhdGVfYnVmKHN0cnVjdCB2bmljX3JxICpycSwKIAlzdHJ1Y3QgY3FfZGVzYyAqY3FfZGVzYywgc3RydWN0IHZuaWNfcnFfYnVmICpidWYsCiAJaW50IHNraXBwZWQsIHZvaWQgKm9wYXF1ZSkKQEAgLTEzNDUsNyArMTM2Niw3IEBACiAJdTggdGNwX3VkcF9jc3VtX29rLCB1ZHAsIHRjcCwgaXB2NF9jc3VtX29rOwogCXU4IGlwdjYsIGlwdjQsIGlwdjRfZnJhZ21lbnQsIGZjc19vaywgcnNzX3R5cGUsIGNzdW1fbm90X2NhbGM7CiAJdTggcGFja2V0X2Vycm9yOwotCXUxNiBxX251bWJlciwgY29tcGxldGVkX2luZGV4LCBieXRlc193cml0dGVuLCB2bGFuLCBjaGVja3N1bTsKKwl1MTYgcV9udW1iZXIsIGNvbXBsZXRlZF9pbmRleCwgYnl0ZXNfd3JpdHRlbiwgdmxhbl90Y2ksIGNoZWNrc3VtOwogCXUzMiByc3NfaGFzaDsKIAogCWlmIChza2lwcGVkKQpAQCAtMTM2MCw3ICsxMzgxLDcgQEAKIAkJJnR5cGUsICZjb2xvciwgJnFfbnVtYmVyLCAmY29tcGxldGVkX2luZGV4LAogCQkmaW5ncmVzc19wb3J0LCAmZmNvZSwgJmVvcCwgJnNvcCwgJnJzc190eXBlLAogCQkmY3N1bV9ub3RfY2FsYywgJnJzc19oYXNoLCAmYnl0ZXNfd3JpdHRlbiwKLQkJJnBhY2tldF9lcnJvciwgJnZsYW5fc3RyaXBwZWQsICZ2bGFuLCAmY2hlY2tzdW0sCisJCSZwYWNrZXRfZXJyb3IsICZ2bGFuX3N0cmlwcGVkLCAmdmxhbl90Y2ksICZjaGVja3N1bSwKIAkJJmZjb2Vfc29mLCAmZmNvZV9mY19jcmNfb2ssICZmY29lX2VuY19lcnJvciwKIAkJJmZjb2VfZW9mLCAmdGNwX3VkcF9jc3VtX29rLCAmdWRwLCAmdGNwLAogCQkmaXB2NF9jc3VtX29rLCAmaXB2NiwgJmlwdjQsICZpcHY0X2ZyYWdtZW50LApAQCAtMTM5NSwyMCArMTQxNiwyMCBAQAogCiAJCXNrYi0+ZGV2ID0gbmV0ZGV2OwogCi0JCWlmIChlbmljLT52bGFuX2dyb3VwICYmIHZsYW5fc3RyaXBwZWQpIHsKKwkJaWYgKGVuaWMtPnZsYW5fZ3JvdXAgJiYgdmxhbl9zdHJpcHBlZCAmJgorCQkJKHZsYW5fdGNpICYgQ1FfRU5FVF9SUV9ERVNDX1ZMQU5fVENJX1ZMQU5fTUFTSykpIHsKIAotCQkJaWYgKChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pICYmIGlwdjQpCi0JCQkJbHJvX3ZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYigmZW5pYy0+bHJvX21nciwKLQkJCQkJc2tiLCBlbmljLT52bGFuX2dyb3VwLAotCQkJCQl2bGFuLCBjcV9kZXNjKTsKKwkJCWlmIChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9HUk8pCisJCQkJdmxhbl9ncm9fcmVjZWl2ZSgmZW5pYy0+bmFwaSwgZW5pYy0+dmxhbl9ncm91cCwKKwkJCQkJdmxhbl90Y2ksIHNrYik7CiAJCQllbHNlCiAJCQkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwKLQkJCQkJZW5pYy0+dmxhbl9ncm91cCwgdmxhbik7CisJCQkJCWVuaWMtPnZsYW5fZ3JvdXAsIHZsYW5fdGNpKTsKIAogCQl9IGVsc2UgewogCi0JCQlpZiAoKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykgJiYgaXB2NCkKLQkJCQlscm9fcmVjZWl2ZV9za2IoJmVuaWMtPmxyb19tZ3IsIHNrYiwgY3FfZGVzYyk7CisJCQlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfR1JPKQorCQkJCW5hcGlfZ3JvX3JlY2VpdmUoJmVuaWMtPm5hcGksIHNrYik7CiAJCQllbHNlCiAJCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKIApAQCAtMTQzOCw3ICsxNDU5LDYgQEAKIHN0YXRpYyBpbnQgZW5pY19wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKIAlzdHJ1Y3QgZW5pYyAqZW5pYyA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgZW5pYywgbmFwaSk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGVuaWMtPm5ldGRldjsKIAl1bnNpZ25lZCBpbnQgcnFfd29ya190b19kbyA9IGJ1ZGdldDsKIAl1bnNpZ25lZCBpbnQgd3Ffd29ya190b19kbyA9IC0xOyAvKiBubyBsaW1pdCAqLwogCXVuc2lnbmVkIGludCAgd29ya19kb25lLCBycV93b3JrX2RvbmUsIHdxX3dvcmtfZG9uZTsKQEAgLTE0NzgsMTIgKzE0OTgsOSBAQAogCWlmIChycV93b3JrX2RvbmUgPCBycV93b3JrX3RvX2RvKSB7CiAKIAkJLyogU29tZSB3b3JrIGRvbmUsIGJ1dCBub3QgZW5vdWdoIHRvIHN0YXkgaW4gcG9sbGluZywKLQkJICogZmx1c2ggYWxsIExST3MgYW5kIGV4aXQgcG9sbGluZworCQkgKiBleGl0IHBvbGxpbmcKIAkJICovCiAKLQkJaWYgKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykKLQkJCWxyb19mbHVzaF9hbGwoJmVuaWMtPmxyb19tZ3IpOwotCiAJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCXZuaWNfaW50cl91bm1hc2soJmVuaWMtPmludHJbRU5JQ19JTlRYX1dRX1JRXSk7CiAJfQpAQCAtMTQ5NCw3ICsxNTExLDYgQEAKIHN0YXRpYyBpbnQgZW5pY19wb2xsX21zaXgoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogewogCXN0cnVjdCBlbmljICplbmljID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBlbmljLCBuYXBpKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZW5pYy0+bmV0ZGV2OwogCXVuc2lnbmVkIGludCB3b3JrX3RvX2RvID0gYnVkZ2V0OwogCXVuc2lnbmVkIGludCB3b3JrX2RvbmU7CiAJaW50IGVycjsKQEAgLTE1MjgsMTIgKzE1NDQsOSBAQAogCWlmICh3b3JrX2RvbmUgPCB3b3JrX3RvX2RvKSB7CiAKIAkJLyogU29tZSB3b3JrIGRvbmUsIGJ1dCBub3QgZW5vdWdoIHRvIHN0YXkgaW4gcG9sbGluZywKLQkJICogZmx1c2ggYWxsIExST3MgYW5kIGV4aXQgcG9sbGluZworCQkgKiBleGl0IHBvbGxpbmcKIAkJICovCiAKLQkJaWYgKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykKLQkJCWxyb19mbHVzaF9hbGwoJmVuaWMtPmxyb19tZ3IpOwotCiAJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCXZuaWNfaW50cl91bm1hc2soJmVuaWMtPmludHJbRU5JQ19NU0lYX1JRXSk7CiAJfQpAQCAtMTY1NSw3ICsxNjY4LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgZW5pY19ub3RpZnlfc2V0KHN0cnVjdCBlbmljICplbmljKQorc3RhdGljIGludCBlbmljX2Rldl9ub3RpZnlfc2V0KHN0cnVjdCBlbmljICplbmljKQogewogCWludCBlcnI7CiAKQEAgLTE2NzYsNiArMTY4OSwzOSBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgZW5pY19kZXZfbm90aWZ5X3Vuc2V0KHN0cnVjdCBlbmljICplbmljKQoreworCWludCBlcnI7CisKKwlzcGluX2xvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKKwllcnIgPSB2bmljX2Rldl9ub3RpZnlfdW5zZXQoZW5pYy0+dmRldik7CisJc3Bpbl91bmxvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZW5pY19kZXZfZW5hYmxlKHN0cnVjdCBlbmljICplbmljKQoreworCWludCBlcnI7CisKKwlzcGluX2xvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKKwllcnIgPSB2bmljX2Rldl9lbmFibGUoZW5pYy0+dmRldik7CisJc3Bpbl91bmxvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZW5pY19kZXZfZGlzYWJsZShzdHJ1Y3QgZW5pYyAqZW5pYykKK3sKKwlpbnQgZXJyOworCisJc3Bpbl9sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CisJZXJyID0gdm5pY19kZXZfZGlzYWJsZShlbmljLT52ZGV2KTsKKwlzcGluX3VubG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOworCisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIHZvaWQgZW5pY19ub3RpZnlfdGltZXJfc3RhcnQoc3RydWN0IGVuaWMgKmVuaWMpCiB7CiAJc3dpdGNoICh2bmljX2Rldl9nZXRfaW50cl9tb2RlKGVuaWMtPnZkZXYpKSB7CkBAIC0xNjk3LDE2ICsxNzQzLDE0IEBACiAKIAllcnIgPSBlbmljX3JlcXVlc3RfaW50cihlbmljKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBVbmFibGUgdG8gcmVxdWVzdCBpcnEuXG4iLAotCQkJbmV0ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihuZXRkZXYsICJVbmFibGUgdG8gcmVxdWVzdCBpcnEuXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQllcnIgPSBlbmljX25vdGlmeV9zZXQoZW5pYyk7CisJZXJyID0gZW5pY19kZXZfbm90aWZ5X3NldChlbmljKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSIlczogRmFpbGVkIHRvIGFsbG9jIG5vdGlmeSBidWZmZXIsIGFib3J0aW5nLlxuIiwKLQkJCW5ldGRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIobmV0ZGV2LAorCQkJIkZhaWxlZCB0byBhbGxvYyBub3RpZnkgYnVmZmVyLCBhYm9ydGluZy5cbiIpOwogCQlnb3RvIGVycl9vdXRfZnJlZV9pbnRyOwogCX0KIApAQCAtMTcxNCw5ICsxNzU4LDcgQEAKIAkJdm5pY19ycV9maWxsKCZlbmljLT5ycVtpXSwgZW5pYy0+cnFfYWxsb2NfYnVmKTsKIAkJLyogTmVlZCBhdCBsZWFzdCBvbmUgYnVmZmVyIG9uIHJpbmcgdG8gZ2V0IGdvaW5nICovCiAJCWlmICh2bmljX3JxX2Rlc2NfdXNlZCgmZW5pYy0+cnFbaV0pID09IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCQkiJXM6IFVuYWJsZSB0byBhbGxvYyByZWNlaXZlIGJ1ZmZlcnMuXG4iLAotCQkJCW5ldGRldi0+bmFtZSk7CisJCQluZXRkZXZfZXJyKG5ldGRldiwgIlVuYWJsZSB0byBhbGxvYyByZWNlaXZlIGJ1ZmZlcnNcbiIpOwogCQkJZXJyID0gLUVOT01FTTsKIAkJCWdvdG8gZXJyX291dF9ub3RpZnlfdW5zZXQ7CiAJCX0KQEAgLTE3MzIsOSArMTc3NCw3IEBACiAKIAluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CiAJbmFwaV9lbmFibGUoJmVuaWMtPm5hcGkpOwotCXNwaW5fbG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOwotCXZuaWNfZGV2X2VuYWJsZShlbmljLT52ZGV2KTsKLQlzcGluX3VubG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOworCWVuaWNfZGV2X2VuYWJsZShlbmljKTsKIAogCWZvciAoaSA9IDA7IGkgPCBlbmljLT5pbnRyX2NvdW50OyBpKyspCiAJCXZuaWNfaW50cl91bm1hc2soJmVuaWMtPmludHJbaV0pOwpAQCAtMTc0NCw5ICsxNzg0LDcgQEAKIAlyZXR1cm4gMDsKIAogZXJyX291dF9ub3RpZnlfdW5zZXQ6Ci0Jc3Bpbl9sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7Ci0Jdm5pY19kZXZfbm90aWZ5X3Vuc2V0KGVuaWMtPnZkZXYpOwotCXNwaW5fdW5sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CisJZW5pY19kZXZfbm90aWZ5X3Vuc2V0KGVuaWMpOwogZXJyX291dF9mcmVlX2ludHI6CiAJZW5pY19mcmVlX2ludHIoZW5pYyk7CiAKQEAgLTE3NjAsMjAgKzE3OTgsMTkgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgZXJyOwogCi0JZm9yIChpID0gMDsgaSA8IGVuaWMtPmludHJfY291bnQ7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgZW5pYy0+aW50cl9jb3VudDsgaSsrKSB7CiAJCXZuaWNfaW50cl9tYXNrKCZlbmljLT5pbnRyW2ldKTsKKwkJKHZvaWQpdm5pY19pbnRyX21hc2tlZCgmZW5pYy0+aW50cltpXSk7IC8qIGZsdXNoIHdyaXRlICovCisJfQogCiAJZW5pY19zeW5jaHJvbml6ZV9pcnFzKGVuaWMpOwogCiAJZGVsX3RpbWVyX3N5bmMoJmVuaWMtPm5vdGlmeV90aW1lcik7CiAKLQlzcGluX2xvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKLQl2bmljX2Rldl9kaXNhYmxlKGVuaWMtPnZkZXYpOwotCXNwaW5fdW5sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CisJZW5pY19kZXZfZGlzYWJsZShlbmljKTsKIAluYXBpX2Rpc2FibGUoJmVuaWMtPm5hcGkpOwogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAJbmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpOwotCiAJZW5pY19kZXZfZGVsX3N0YXRpb25fYWRkcihlbmljKTsKIAogCWZvciAoaSA9IDA7IGkgPCBlbmljLT53cV9jb3VudDsgaSsrKSB7CkBAIC0xNzg3LDkgKzE4MjQsNyBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKLQlzcGluX2xvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKLQl2bmljX2Rldl9ub3RpZnlfdW5zZXQoZW5pYy0+dmRldik7Ci0Jc3Bpbl91bmxvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKKwllbmljX2Rldl9ub3RpZnlfdW5zZXQoZW5pYyk7CiAJZW5pY19mcmVlX2ludHIoZW5pYyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZW5pYy0+d3FfY291bnQ7IGkrKykKQEAgLTE4MTgsMTAgKzE4NTMsOSBAQAogCW5ldGRldi0+bXR1ID0gbmV3X210dTsKIAogCWlmIChuZXRkZXYtPm10dSA+IGVuaWMtPnBvcnRfbXR1KQotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAotCQkJIiVzOiBpbnRlcmZhY2UgTVRVICglZCkgc2V0IGhpZ2hlciAiCi0JCQkidGhhbiBwb3J0IE1UVSAoJWQpXG4iLAotCQkJbmV0ZGV2LT5uYW1lLCBuZXRkZXYtPm10dSwgZW5pYy0+cG9ydF9tdHUpOworCQluZXRkZXZfd2FybihuZXRkZXYsCisJCQkiaW50ZXJmYWNlIE1UVSAoJWQpIHNldCBoaWdoZXIgdGhhbiBwb3J0IE1UVSAoJWQpXG4iLAorCQkJbmV0ZGV2LT5tdHUsIGVuaWMtPnBvcnRfbXR1KTsKIAogCWlmIChydW5uaW5nKQogCQllbmljX29wZW4obmV0ZGV2KTsKQEAgLTE4OTQsMjEgKzE5MjgsMjEgQEAKIAllcnIgPSBlbmljX2Rldl93YWl0KGVuaWMtPnZkZXYsIHZuaWNfZGV2X29wZW4sCiAJCXZuaWNfZGV2X29wZW5fZG9uZSwgMCk7CiAJaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJInZOSUMgZGV2aWNlIG9wZW4gZmFpbGVkLCBlcnIgJWQuXG4iLCBlcnIpOworCQlkZXZfZXJyKGVuaWNfZ2V0X2RldihlbmljKSwgInZOSUMgZGV2aWNlIG9wZW4gZmFpbGVkLCBlcnIgJWRcbiIsCisJCQllcnIpOwogCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBlbmljX2Rldl9zb2Z0X3Jlc2V0KHN0cnVjdCBlbmljICplbmljKQorc3RhdGljIGludCBlbmljX2Rldl9oYW5nX3Jlc2V0KHN0cnVjdCBlbmljICplbmljKQogewogCWludCBlcnI7CiAKLQllcnIgPSBlbmljX2Rldl93YWl0KGVuaWMtPnZkZXYsIHZuaWNfZGV2X3NvZnRfcmVzZXQsCi0JCXZuaWNfZGV2X3NvZnRfcmVzZXRfZG9uZSwgMCk7CisJZXJyID0gZW5pY19kZXZfd2FpdChlbmljLT52ZGV2LCB2bmljX2Rldl9oYW5nX3Jlc2V0LAorCQl2bmljX2Rldl9oYW5nX3Jlc2V0X2RvbmUsIDApOwogCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSJ2TklDIHNvZnQgcmVzZXQgZmFpbGVkLCBlcnIgJWQuXG4iLCBlcnIpOworCQluZXRkZXZfZXJyKGVuaWMtPm5ldGRldiwgInZOSUMgaGFuZyByZXNldCBmYWlsZWQsIGVyciAlZFxuIiwKKwkJCWVycik7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTkyMiwxNSArMTk1Niw0MyBAQAogCWNvbnN0IHU4IHJzc19lbmFibGUgPSAwOwogCWNvbnN0IHU4IHRzb19pcGlkX3NwbGl0X2VuID0gMDsKIAljb25zdCB1OCBpZ192bGFuX3N0cmlwX2VuID0gMTsKKwlpbnQgZXJyOwogCiAJLyogRW5hYmxlIFZMQU4gdGFnIHN0cmlwcGluZy4gIFJTUyBub3QgZW5hYmxlZCAoeWV0KS4KIAkgKi8KIAotCXJldHVybiBlbmljX3NldF9uaWNfY2ZnKGVuaWMsCisJc3Bpbl9sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CisJZXJyID0gZW5pY19zZXRfbmljX2NmZyhlbmljLAogCQlyc3NfZGVmYXVsdF9jcHUsIHJzc19oYXNoX3R5cGUsCiAJCXJzc19oYXNoX2JpdHMsIHJzc19iYXNlX2NwdSwKIAkJcnNzX2VuYWJsZSwgdHNvX2lwaWRfc3BsaXRfZW4sCiAJCWlnX3ZsYW5fc3RyaXBfZW4pOworCXNwaW5fdW5sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGVuaWNfZGV2X2hhbmdfbm90aWZ5KHN0cnVjdCBlbmljICplbmljKQoreworCWludCBlcnI7CisKKwlzcGluX2xvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKKwllcnIgPSB2bmljX2Rldl9oYW5nX25vdGlmeShlbmljLT52ZGV2KTsKKwlzcGluX3VubG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOworCisJcmV0dXJuIGVycjsKK30KKworaW50IGVuaWNfZGV2X3NldF9pZ192bGFuX3Jld3JpdGVfbW9kZShzdHJ1Y3QgZW5pYyAqZW5pYykKK3sKKwlpbnQgZXJyOworCisJc3Bpbl9sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CisJZXJyID0gdm5pY19kZXZfc2V0X2lnX3ZsYW5fcmV3cml0ZV9tb2RlKGVuaWMtPnZkZXYsCisJCUlHX1ZMQU5fUkVXUklURV9NT0RFX1BSSU9SSVRZX1RBR19ERUZBVUxUX1ZMQU4pOworCXNwaW5fdW5sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CisKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBlbmljX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTE5NDIsMTYgKzIwMDQsMTMgQEAKIAogCXJ0bmxfbG9jaygpOwogCi0Jc3Bpbl9sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7Ci0Jdm5pY19kZXZfaGFuZ19ub3RpZnkoZW5pYy0+dmRldik7Ci0Jc3Bpbl91bmxvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKLQorCWVuaWNfZGV2X2hhbmdfbm90aWZ5KGVuaWMpOwogCWVuaWNfc3RvcChlbmljLT5uZXRkZXYpOwotCWVuaWNfZGV2X3NvZnRfcmVzZXQoZW5pYyk7Ci0Jdm5pY19kZXZfaW5pdChlbmljLT52ZGV2LCAwKTsKLQllbmljX3Jlc2V0X21jYWRkcnMoZW5pYyk7CisJZW5pY19kZXZfaGFuZ19yZXNldChlbmljKTsKKwllbmljX3Jlc2V0X211bHRpY2FzdF9saXN0KGVuaWMpOwogCWVuaWNfaW5pdF92bmljX3Jlc291cmNlcyhlbmljKTsKIAllbmljX3NldF9uaWNjZmcoZW5pYyk7CisJZW5pY19kZXZfc2V0X2lnX3ZsYW5fcmV3cml0ZV9tb2RlKGVuaWMpOwogCWVuaWNfb3BlbihlbmljLT5uZXRkZXYpOwogCiAJcnRubF91bmxvY2soKTsKQEAgLTIwODcsOCArMjE0Niw4IEBACiAJLm5kb19zdGFydF94bWl0CQk9IGVuaWNfaGFyZF9zdGFydF94bWl0LAogCS5uZG9fZ2V0X3N0YXRzCQk9IGVuaWNfZ2V0X3N0YXRzLAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAotCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gZW5pY19zZXRfbXVsdGljYXN0X2xpc3QsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBlbmljX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IGVuaWNfc2V0X211bHRpY2FzdF9saXN0LAogCS5uZG9fY2hhbmdlX210dQkJPSBlbmljX2NoYW5nZV9tdHUsCiAJLm5kb192bGFuX3J4X3JlZ2lzdGVyCT0gZW5pY192bGFuX3J4X3JlZ2lzdGVyLAogCS5uZG9fdmxhbl9yeF9hZGRfdmlkCT0gZW5pY192bGFuX3J4X2FkZF92aWQsCkBAIC0yMTA2LDggKzIxNjUsMjAgQEAKIAllbmljX2NsZWFyX2ludHJfbW9kZShlbmljKTsKIH0KIAorc3RhdGljIGludCBlbmljX2Rldl9zdGF0c19jbGVhcihzdHJ1Y3QgZW5pYyAqZW5pYykKK3sKKwlpbnQgZXJyOworCisJc3Bpbl9sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CisJZXJyID0gdm5pY19kZXZfc3RhdHNfY2xlYXIoZW5pYy0+dmRldik7CisJc3Bpbl91bmxvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CisKIGludCBlbmljX2Rldl9pbml0KHN0cnVjdCBlbmljICplbmljKQogeworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGVuaWNfZ2V0X2RldihlbmljKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZW5pYy0+bmV0ZGV2OwogCWludCBlcnI7CiAKQEAgLTIxMTYsOCArMjE4Nyw3IEBACiAKIAllcnIgPSBlbmljX2dldF92bmljX2NvbmZpZyhlbmljKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSJHZXQgdk5JQyBjb25maWd1cmF0aW9uIGZhaWxlZCwgYWJvcnRpbmcuXG4iKTsKKwkJZGV2X2VycihkZXYsICJHZXQgdk5JQyBjb25maWd1cmF0aW9uIGZhaWxlZCwgYWJvcnRpbmdcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtMjEzMiw5ICsyMjAyLDggQEAKIAogCWVyciA9IGVuaWNfc2V0X2ludHJfbW9kZShlbmljKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSJGYWlsZWQgdG8gc2V0IGludHIgbW9kZSBiYXNlZCBvbiByZXNvdXJjZSAiCi0JCQkiY291bnRzIGFuZCBzeXN0ZW0gY2FwYWJpbGl0aWVzLCBhYm9ydGluZy5cbiIpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBzZXQgaW50ciBtb2RlIGJhc2VkIG9uIHJlc291cmNlICIKKwkJCSJjb3VudHMgYW5kIHN5c3RlbSBjYXBhYmlsaXRpZXMsIGFib3J0aW5nXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTIxNDMsMjQgKzIyMTIsMzIgQEAKIAogCWVyciA9IGVuaWNfYWxsb2Nfdm5pY19yZXNvdXJjZXMoZW5pYyk7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkiRmFpbGVkIHRvIGFsbG9jIHZOSUMgcmVzb3VyY2VzLCBhYm9ydGluZy5cbiIpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhbGxvYyB2TklDIHJlc291cmNlcywgYWJvcnRpbmdcbiIpOwogCQlnb3RvIGVycl9vdXRfZnJlZV92bmljX3Jlc291cmNlczsKIAl9CiAKIAllbmljX2luaXRfdm5pY19yZXNvdXJjZXMoZW5pYyk7CiAKKwkvKiBDbGVhciBMSUYgc3RhdHMKKwkgKi8KKwllbmljX2Rldl9zdGF0c19jbGVhcihlbmljKTsKKwogCWVyciA9IGVuaWNfc2V0X3JxX2FsbG9jX2J1ZihlbmljKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSJGYWlsZWQgdG8gc2V0IFJRIGJ1ZmZlciBhbGxvY2F0b3IsIGFib3J0aW5nLlxuIik7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHNldCBSUSBidWZmZXIgYWxsb2NhdG9yLCBhYm9ydGluZ1xuIik7CiAJCWdvdG8gZXJyX291dF9mcmVlX3ZuaWNfcmVzb3VyY2VzOwogCX0KIAogCWVyciA9IGVuaWNfc2V0X25pY2NmZyhlbmljKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSJGYWlsZWQgdG8gY29uZmlnIG5pYywgYWJvcnRpbmcuXG4iKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gY29uZmlnIG5pYywgYWJvcnRpbmdcbiIpOworCQlnb3RvIGVycl9vdXRfZnJlZV92bmljX3Jlc291cmNlczsKKwl9CisKKwllcnIgPSBlbmljX2Rldl9zZXRfaWdfdmxhbl9yZXdyaXRlX21vZGUoZW5pYyk7CisJaWYgKGVycikgeworCQluZXRkZXZfZXJyKG5ldGRldiwKKwkJCSJGYWlsZWQgdG8gc2V0IGluZ3Jlc3MgdmxhbiByZXdyaXRlIG1vZGUsIGFib3J0aW5nLlxuIik7CiAJCWdvdG8gZXJyX291dF9mcmVlX3ZuaWNfcmVzb3VyY2VzOwogCX0KIApAQCAtMjE5NCw2ICsyMjcxLDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGVuaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IGVuaWMgKmVuaWM7CiAJaW50IHVzaW5nX2RhYyA9IDA7CkBAIC0yMjA2LDcgKzIyODQsNyBAQAogCiAJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBlbmljKSk7CiAJaWYgKCFuZXRkZXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRXRoZXJkZXYgYWxsb2MgZmFpbGVkLCBhYm9ydGluZy5cbiIpOworCQlwcl9lcnIoIkV0aGVyZGV2IGFsbG9jIGZhaWxlZCwgYWJvcnRpbmdcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTIyMjEsMTcgKzIyOTksMTUgQEAKIAkvKiBTZXR1cCBQQ0kgcmVzb3VyY2VzCiAJICovCiAKLQllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldik7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkiQ2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlLCBhYm9ydGluZy5cbiIpOworCQlkZXZfZXJyKGRldiwgIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSwgYWJvcnRpbmdcbiIpOwogCQlnb3RvIGVycl9vdXRfZnJlZV9uZXRkZXY7CiAJfQogCiAJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTkFNRSk7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkiQ2Fubm90IHJlcXVlc3QgUENJIHJlZ2lvbnMsIGFib3J0aW5nLlxuIik7CisJCWRldl9lcnIoZGV2LCAiQ2Fubm90IHJlcXVlc3QgUENJIHJlZ2lvbnMsIGFib3J0aW5nXG4iKTsKIAkJZ290byBlcnJfb3V0X2Rpc2FibGVfZGV2aWNlOwogCX0KIApAQCAtMjI0NiwyMyArMjMyMiwyMCBAQAogCWlmIChlcnIpIHsKIAkJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKIAkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJCSJObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb24sIGFib3J0aW5nLlxuIik7CisJCQlkZXZfZXJyKGRldiwgIk5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvbiwgYWJvcnRpbmdcbiIpOwogCQkJZ290byBlcnJfb3V0X3JlbGVhc2VfcmVnaW9uczsKIAkJfQogCQllcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CiAJCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCQkiVW5hYmxlIHRvIG9idGFpbiAzMi1iaXQgRE1BICIKLQkJCQkiZm9yIGNvbnNpc3RlbnQgYWxsb2NhdGlvbnMsIGFib3J0aW5nLlxuIik7CisJCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBvYnRhaW4gJXUtYml0IERNQSAiCisJCQkJImZvciBjb25zaXN0ZW50IGFsbG9jYXRpb25zLCBhYm9ydGluZ1xuIiwgMzIpOwogCQkJZ290byBlcnJfb3V0X3JlbGVhc2VfcmVnaW9uczsKIAkJfQogCX0gZWxzZSB7CiAJCWVyciA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soNDApKTsKIAkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJCSJVbmFibGUgdG8gb2J0YWluIDQwLWJpdCBETUEgIgotCQkJCSJmb3IgY29uc2lzdGVudCBhbGxvY2F0aW9ucywgYWJvcnRpbmcuXG4iKTsKKwkJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIG9idGFpbiAldS1iaXQgRE1BICIKKwkJCQkiZm9yIGNvbnNpc3RlbnQgYWxsb2NhdGlvbnMsIGFib3J0aW5nXG4iLCA0MCk7CiAJCQlnb3RvIGVycl9vdXRfcmVsZWFzZV9yZWdpb25zOwogCQl9CiAJCXVzaW5nX2RhYyA9IDE7CkBAIC0yMjc3LDggKzIzNTAsNyBAQAogCQllbmljLT5iYXJbaV0ubGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBpKTsKIAkJZW5pYy0+YmFyW2ldLnZhZGRyID0gcGNpX2lvbWFwKHBkZXYsIGksIGVuaWMtPmJhcltpXS5sZW4pOwogCQlpZiAoIWVuaWMtPmJhcltpXS52YWRkcikgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJCSJDYW5ub3QgbWVtb3J5LW1hcCBCQVIgJWQsIGFib3J0aW5nLlxuIiwgaSk7CisJCQlkZXZfZXJyKGRldiwgIkNhbm5vdCBtZW1vcnktbWFwIEJBUiAlZCwgYWJvcnRpbmdcbiIsIGkpOwogCQkJZXJyID0gLUVOT0RFVjsKIAkJCWdvdG8gZXJyX291dF9pb3VubWFwOwogCQl9CkBAIC0yMjkxLDggKzIzNjMsNyBAQAogCWVuaWMtPnZkZXYgPSB2bmljX2Rldl9yZWdpc3RlcihOVUxMLCBlbmljLCBwZGV2LCBlbmljLT5iYXIsCiAJCUFSUkFZX1NJWkUoZW5pYy0+YmFyKSk7CiAJaWYgKCFlbmljLT52ZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSJ2TklDIHJlZ2lzdHJhdGlvbiBmYWlsZWQsIGFib3J0aW5nLlxuIik7CisJCWRldl9lcnIoZGV2LCAidk5JQyByZWdpc3RyYXRpb24gZmFpbGVkLCBhYm9ydGluZ1xuIik7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX291dF9pb3VubWFwOwogCX0KQEAgLTIzMDIsOCArMjM3Myw3IEBACiAKIAllcnIgPSBlbmljX2Rldl9vcGVuKGVuaWMpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJInZOSUMgZGV2IG9wZW4gZmFpbGVkLCBhYm9ydGluZy5cbiIpOworCQlkZXZfZXJyKGRldiwgInZOSUMgZGV2IG9wZW4gZmFpbGVkLCBhYm9ydGluZ1xuIik7CiAJCWdvdG8gZXJyX291dF92bmljX3VucmVnaXN0ZXI7CiAJfQogCkBAIC0yMzE3LDIzICsyMzg3LDMxIEBACiAKIAluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCisJLyogRG8gbm90IGNhbGwgZGV2X2luaXQgZm9yIGEgZHluYW1pYyB2bmljLgorCSAqIEZvciBhIGR5bmFtaWMgdm5pYywgaW5pdF9wcm92X2luZm8gd2lsbCBiZQorCSAqIGNhbGxlZCBsYXRlciBieSBhbiB1cHBlciBsYXllci4KKwkgKi8KKwogCWlmICghZW5pY19pc19keW5hbWljKGVuaWMpKSB7CiAJCWVyciA9IHZuaWNfZGV2X2luaXQoZW5pYy0+dmRldiwgMCk7CiAJCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCQkidk5JQyBkZXYgaW5pdCBmYWlsZWQsIGFib3J0aW5nLlxuIik7CisJCQlkZXZfZXJyKGRldiwgInZOSUMgZGV2IGluaXQgZmFpbGVkLCBhYm9ydGluZ1xuIik7CiAJCQlnb3RvIGVycl9vdXRfZGV2X2Nsb3NlOwogCQl9CiAJfQogCisJLyogU2V0dXAgZGV2Y21kIGxvY2sKKwkgKi8KKworCXNwaW5fbG9ja19pbml0KCZlbmljLT5kZXZjbWRfbG9jayk7CisKIAllcnIgPSBlbmljX2Rldl9pbml0KGVuaWMpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJIkRldmljZSBpbml0aWFsaXphdGlvbiBmYWlsZWQsIGFib3J0aW5nLlxuIik7CisJCWRldl9lcnIoZGV2LCAiRGV2aWNlIGluaXRpYWxpemF0aW9uIGZhaWxlZCwgYWJvcnRpbmdcbiIpOwogCQlnb3RvIGVycl9vdXRfZGV2X2Nsb3NlOwogCX0KIAotCS8qIFNldHVwIG5vdGlmaWNhdGlvbiB0aW1lciwgSFcgcmVzZXQgdGFzaywgYW5kIGxvY2tzCisJLyogU2V0dXAgbm90aWZpY2F0aW9uIHRpbWVyLCBIVyByZXNldCB0YXNrLCBhbmQgd3EgbG9ja3MKIAkgKi8KIAogCWluaXRfdGltZXIoJmVuaWMtPm5vdGlmeV90aW1lcik7CkBAIC0yMzQ1LDggKzI0MjMsNiBAQAogCWZvciAoaSA9IDA7IGkgPCBlbmljLT53cV9jb3VudDsgaSsrKQogCQlzcGluX2xvY2tfaW5pdCgmZW5pYy0+d3FfbG9ja1tpXSk7CiAKLQlzcGluX2xvY2tfaW5pdCgmZW5pYy0+ZGV2Y21kX2xvY2spOwotCiAJLyogUmVnaXN0ZXIgbmV0IGRldmljZQogCSAqLwogCkBAIC0yMzU1LDggKzI0MzEsNyBAQAogCiAJZXJyID0gZW5pY19zZXRfbWFjX2FkZHIobmV0ZGV2LCBlbmljLT5tYWNfYWRkcik7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkiSW52YWxpZCBNQUMgYWRkcmVzcywgYWJvcnRpbmcuXG4iKTsKKwkJZGV2X2VycihkZXYsICJJbnZhbGlkIE1BQyBhZGRyZXNzLCBhYm9ydGluZ1xuIik7CiAJCWdvdG8gZXJyX291dF9kZXZfZGVpbml0OwogCX0KIApAQCAtMjM3MiwzMSArMjQ0NywyNyBAQAogCW5ldGRldi0+ZXRodG9vbF9vcHMgPSAmZW5pY19ldGh0b29sX29wczsKIAogCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYOworCWlmIChFTklDX1NFVFRJTkcoZW5pYywgTE9PUCkpIHsKKwkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9IV19WTEFOX1RYOworCQllbmljLT5sb29wX2VuYWJsZSA9IDE7CisJCWVuaWMtPmxvb3BfdGFnID0gZW5pYy0+Y29uZmlnLmxvb3BfdGFnOworCQlkZXZfaW5mbyhkZXYsICJsb29wYmFjayB0YWc9MHglMDR4XG4iLCBlbmljLT5sb29wX3RhZyk7CisJfQogCWlmIChFTklDX1NFVFRJTkcoZW5pYywgVFhDU1VNKSkKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9IV19DU1VNOwogCWlmIChFTklDX1NFVFRJTkcoZW5pYywgVFNPKSkKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTyB8CiAJCQlORVRJRl9GX1RTTzYgfCBORVRJRl9GX1RTT19FQ047CiAJaWYgKEVOSUNfU0VUVElORyhlbmljLCBMUk8pKQotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOworCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPOwogCWlmICh1c2luZ19kYWMpCiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCiAJZW5pYy0+Y3N1bV9yeF9lbmFibGVkID0gRU5JQ19TRVRUSU5HKGVuaWMsIFJYQ1NVTSk7CiAKLQllbmljLT5scm9fbWdyLm1heF9hZ2dyID0gRU5JQ19MUk9fTUFYX0FHR1I7Ci0JZW5pYy0+bHJvX21nci5tYXhfZGVzYyA9IEVOSUNfTFJPX01BWF9ERVNDOwotCWVuaWMtPmxyb19tZ3IubHJvX2FyciA9IGVuaWMtPmxyb19kZXNjOwotCWVuaWMtPmxyb19tZ3IuZ2V0X3NrYl9oZWFkZXIgPSBlbmljX2dldF9za2JfaGVhZGVyOwotCWVuaWMtPmxyb19tZ3IuZmVhdHVyZXMJPSBMUk9fRl9OQVBJIHwgTFJPX0ZfRVhUUkFDVF9WTEFOX0lEOwotCWVuaWMtPmxyb19tZ3IuZGV2ID0gbmV0ZGV2OwotCWVuaWMtPmxyb19tZ3IuaXBfc3VtbWVkID0gQ0hFQ0tTVU1fQ09NUExFVEU7Ci0JZW5pYy0+bHJvX21nci5pcF9zdW1tZWRfYWdnciA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkiQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UsIGFib3J0aW5nLlxuIik7CisJCWRldl9lcnIoZGV2LCAiQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UsIGFib3J0aW5nXG4iKTsKIAkJZ290byBlcnJfb3V0X2Rldl9kZWluaXQ7CiAJfQogCkBAIC0yNDUwLDcgKzI1MjEsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBlbmljX2luaXRfbW9kdWxlKHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzLCB2ZXIgJXNcbiIsIERSVl9ERVNDUklQVElPTiwgRFJWX1ZFUlNJT04pOworCXByX2luZm8oIiVzLCB2ZXIgJXNcbiIsIERSVl9ERVNDUklQVElPTiwgRFJWX1ZFUlNJT04pOwogCiAJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmVuaWNfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19yZXMuYyBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19yZXMuYwppbmRleCA5YjE4ODQwLi4yOWVkZThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL2VuaWNfcmVzLmMKKysrIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljX3Jlcy5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA4IENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgMjAwNyBOdW92YSBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgbWF5IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC00Niw3ICs0Niw4IEBACiAKIAllcnIgPSB2bmljX2Rldl9tYWNfYWRkcihlbmljLT52ZGV2LCBlbmljLT5tYWNfYWRkcik7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJFcnJvciBnZXR0aW5nIE1BQyBhZGRyLCAlZFxuIiwgZXJyKTsKKwkJZGV2X2VycihlbmljX2dldF9kZXYoZW5pYyksCisJCQkiRXJyb3IgZ2V0dGluZyBNQUMgYWRkciwgJWRcbiIsIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC01Niw3ICs1Nyw3IEBACiAJCQlvZmZzZXRvZihzdHJ1Y3Qgdm5pY19lbmV0X2NvbmZpZywgbSksIFwKIAkJCXNpemVvZihjLT5tKSwgJmMtPm0pOyBcCiAJCWlmIChlcnIpIHsgXAotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCBcCisJCQlkZXZfZXJyKGVuaWNfZ2V0X2RldihlbmljKSwgXAogCQkJCSJFcnJvciBnZXR0aW5nICVzLCAlZFxuIiwgI20sIGVycik7IFwKIAkJCXJldHVybiBlcnI7IFwKIAkJfSBcCkBAIC02OSw2ICs3MCw3IEBACiAJR0VUX0NPTkZJRyhpbnRyX3RpbWVyX3R5cGUpOwogCUdFVF9DT05GSUcoaW50cl9tb2RlKTsKIAlHRVRfQ09ORklHKGludHJfdGltZXJfdXNlYyk7CisJR0VUX0NPTkZJRyhsb29wX3RhZyk7CiAKIAljLT53cV9kZXNjX2NvdW50ID0KIAkJbWluX3QodTMyLCBFTklDX01BWF9XUV9ERVNDUywKQEAgLTkyLDEwICs5NCwxMCBAQAogCQlJTlRSX0NPQUxFU0NFX0hXX1RPX1VTRUMoVk5JQ19JTlRSX1RJTUVSX01BWCksCiAJCWMtPmludHJfdGltZXJfdXNlYyk7CiAKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAidk5JQyBNQUMgYWRkciAlcE0gd3EvcnEgJWQvJWRcbiIsCisJZGV2X2luZm8oZW5pY19nZXRfZGV2KGVuaWMpLCAidk5JQyBNQUMgYWRkciAlcE0gd3EvcnEgJWQvJWRcbiIsCiAJCWVuaWMtPm1hY19hZGRyLCBjLT53cV9kZXNjX2NvdW50LCBjLT5ycV9kZXNjX2NvdW50KTsKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAidk5JQyBtdHUgJWQgY3N1bSB0eC9yeCAlZC8lZCB0c28vbHJvICVkLyVkICIKLQkJImludHIgdGltZXIgJWQgdXNlY1xuIiwKKwlkZXZfaW5mbyhlbmljX2dldF9kZXYoZW5pYyksICJ2TklDIG10dSAlZCBjc3VtIHR4L3J4ICVkLyVkICIKKwkJInRzby9scm8gJWQvJWQgaW50ciB0aW1lciAlZCB1c2VjXG4iLAogCQljLT5tdHUsIEVOSUNfU0VUVElORyhlbmljLCBUWENTVU0pLAogCQlFTklDX1NFVFRJTkcoZW5pYywgUlhDU1VNKSwgRU5JQ19TRVRUSU5HKGVuaWMsIFRTTyksCiAJCUVOSUNfU0VUVElORyhlbmljLCBMUk8pLCBjLT5pbnRyX3RpbWVyX3VzZWMpOwpAQCAtMTAzLDE3ICsxMDUsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGVuaWNfYWRkX211bHRpY2FzdF9hZGRyKHN0cnVjdCBlbmljICplbmljLCB1OCAqYWRkcikKLXsKLQl2bmljX2Rldl9hZGRfYWRkcihlbmljLT52ZGV2LCBhZGRyKTsKLX0KLQotdm9pZCBlbmljX2RlbF9tdWx0aWNhc3RfYWRkcihzdHJ1Y3QgZW5pYyAqZW5pYywgdTggKmFkZHIpCi17Ci0Jdm5pY19kZXZfZGVsX2FkZHIoZW5pYy0+dmRldiwgYWRkcik7Ci19Ci0KLXZvaWQgZW5pY19hZGRfdmxhbihzdHJ1Y3QgZW5pYyAqZW5pYywgdTE2IHZsYW5pZCkKK2ludCBlbmljX2FkZF92bGFuKHN0cnVjdCBlbmljICplbmljLCB1MTYgdmxhbmlkKQogewogCXU2NCBhMCA9IHZsYW5pZCwgYTEgPSAwOwogCWludCB3YWl0ID0gMTAwMDsKQEAgLTEyMSwxMCArMTEzLDEyIEBACiAKIAllcnIgPSB2bmljX2Rldl9jbWQoZW5pYy0+dmRldiwgQ01EX1ZMQU5fQURELCAmYTAsICZhMSwgd2FpdCk7CiAJaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2FuJ3QgYWRkIHZsYW4gaWQsICVkXG4iLCBlcnIpOworCQlkZXZfZXJyKGVuaWNfZ2V0X2RldihlbmljKSwgIkNhbid0IGFkZCB2bGFuIGlkLCAlZFxuIiwgZXJyKTsKKworCXJldHVybiBlcnI7CiB9CiAKLXZvaWQgZW5pY19kZWxfdmxhbihzdHJ1Y3QgZW5pYyAqZW5pYywgdTE2IHZsYW5pZCkKK2ludCBlbmljX2RlbF92bGFuKHN0cnVjdCBlbmljICplbmljLCB1MTYgdmxhbmlkKQogewogCXU2NCBhMCA9IHZsYW5pZCwgYTEgPSAwOwogCWludCB3YWl0ID0gMTAwMDsKQEAgLTEzMiw3ICsxMjYsOSBAQAogCiAJZXJyID0gdm5pY19kZXZfY21kKGVuaWMtPnZkZXYsIENNRF9WTEFOX0RFTCwgJmEwLCAmYTEsIHdhaXQpOwogCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbid0IGRlbGV0ZSB2bGFuIGlkLCAlZFxuIiwgZXJyKTsKKwkJZGV2X2VycihlbmljX2dldF9kZXYoZW5pYyksICJDYW4ndCBkZWxldGUgdmxhbiBpZCwgJWRcbiIsIGVycik7CisKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgZW5pY19zZXRfbmljX2NmZyhzdHJ1Y3QgZW5pYyAqZW5pYywgdTggcnNzX2RlZmF1bHRfY3B1LCB1OCByc3NfaGFzaF90eXBlLApAQCAtMTk4LDggKzE5NCw4IEBACiAJCXZuaWNfZGV2X2dldF9yZXNfY291bnQoZW5pYy0+dmRldiwgUkVTX1RZUEVfSU5UUl9DVFJMKSwKIAkJRU5JQ19JTlRSX01BWCk7CiAKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAidk5JQyByZXNvdXJjZXMgYXZhaWw6ICIKLQkJIndxICVkIHJxICVkIGNxICVkIGludHIgJWRcbiIsCisJZGV2X2luZm8oZW5pY19nZXRfZGV2KGVuaWMpLAorCQkidk5JQyByZXNvdXJjZXMgYXZhaWw6IHdxICVkIHJxICVkIGNxICVkIGludHIgJWRcbiIsCiAJCWVuaWMtPndxX2NvdW50LCBlbmljLT5ycV9jb3VudCwKIAkJZW5pYy0+Y3FfY291bnQsIGVuaWMtPmludHJfY291bnQpOwogfQpAQCAtMzA0LDExICszMDAsNiBAQAogCQkJZW5pYy0+Y29uZmlnLmludHJfdGltZXJfdHlwZSwKIAkJCW1hc2tfb25fYXNzZXJ0aW9uKTsKIAl9Ci0KLQkvKiBDbGVhciBMSUYgc3RhdHMKLQkgKi8KLQotCXZuaWNfZGV2X3N0YXRzX2NsZWFyKGVuaWMtPnZkZXYpOwogfQogCiBpbnQgZW5pY19hbGxvY192bmljX3Jlc291cmNlcyhzdHJ1Y3QgZW5pYyAqZW5pYykKQEAgLTMxOSwxNSArMzEwLDE0IEBACiAKIAlpbnRyX21vZGUgPSB2bmljX2Rldl9nZXRfaW50cl9tb2RlKGVuaWMtPnZkZXYpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggInZOSUMgcmVzb3VyY2VzIHVzZWQ6ICAiCisJZGV2X2luZm8oZW5pY19nZXRfZGV2KGVuaWMpLCAidk5JQyByZXNvdXJjZXMgdXNlZDogICIKIAkJIndxICVkIHJxICVkIGNxICVkIGludHIgJWQgaW50ciBtb2RlICVzXG4iLAogCQllbmljLT53cV9jb3VudCwgZW5pYy0+cnFfY291bnQsCiAJCWVuaWMtPmNxX2NvdW50LCBlbmljLT5pbnRyX2NvdW50LAogCQlpbnRyX21vZGUgPT0gVk5JQ19ERVZfSU5UUl9NT0RFX0lOVFggPyAibGVnYWN5IFBDSSBJTlR4IiA6CiAJCWludHJfbW9kZSA9PSBWTklDX0RFVl9JTlRSX01PREVfTVNJID8gIk1TSSIgOgogCQlpbnRyX21vZGUgPT0gVk5JQ19ERVZfSU5UUl9NT0RFX01TSVggPyAiTVNJLVgiIDoKLQkJInVua25vd24iCi0JCSk7CisJCSJ1bmtub3duIik7CiAKIAkvKiBBbGxvY2F0ZSBxdWV1ZSByZXNvdXJjZXMKIAkgKi8KQEAgLTM3Myw3ICszNjMsOCBAQAogCWVuaWMtPmxlZ2FjeV9wYmEgPSB2bmljX2Rldl9nZXRfcmVzKGVuaWMtPnZkZXYsCiAJCVJFU19UWVBFX0lOVFJfUEJBX0xFR0FDWSwgMCk7CiAJaWYgKCFlbmljLT5sZWdhY3lfcGJhICYmIGludHJfbW9kZSA9PSBWTklDX0RFVl9JTlRSX01PREVfSU5UWCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJGYWlsZWQgdG8gaG9vayBsZWdhY3kgcGJhIHJlc291cmNlXG4iKTsKKwkJZGV2X2VycihlbmljX2dldF9kZXYoZW5pYyksCisJCQkiRmFpbGVkIHRvIGhvb2sgbGVnYWN5IHBiYSByZXNvdXJjZVxuIik7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX291dF9jbGVhbnVwOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19yZXMuaCBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19yZXMuaAppbmRleCA0OTQ2NjRmLi44M2JkMTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL2VuaWNfcmVzLmgKKysrIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljX3Jlcy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA4IENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgMjAwNyBOdW92YSBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgbWF5IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC00Myw3ICs0Myw3IEBACiAJdm9pZCAqb3NfYnVmLCBkbWFfYWRkcl90IGRtYV9hZGRyLCB1bnNpZ25lZCBpbnQgbGVuLAogCXVuc2lnbmVkIGludCBtc3Nfb3JfY3N1bV9vZmZzZXQsIHVuc2lnbmVkIGludCBoZHJfbGVuLAogCWludCB2bGFuX3RhZ19pbnNlcnQsIHVuc2lnbmVkIGludCB2bGFuX3RhZywKLQlpbnQgb2ZmbG9hZF9tb2RlLCBpbnQgY3FfZW50cnksIGludCBzb3AsIGludCBlb3ApCisJaW50IG9mZmxvYWRfbW9kZSwgaW50IGNxX2VudHJ5LCBpbnQgc29wLCBpbnQgZW9wLCBpbnQgbG9vcGJhY2spCiB7CiAJc3RydWN0IHdxX2VuZXRfZGVzYyAqZGVzYyA9IHZuaWNfd3FfbmV4dF9kZXNjKHdxKTsKIApAQCAtNTYsNjEgKzU2LDYyIEBACiAJCTAsIC8qIGZjb2VfZW5jYXAgKi8KIAkJKHU4KXZsYW5fdGFnX2luc2VydCwKIAkJKHUxNil2bGFuX3RhZywKLQkJMCAvKiBsb29wYmFjayAqLyk7CisJCSh1OClsb29wYmFjayk7CiAKIAl2bmljX3dxX3Bvc3Qod3EsIG9zX2J1ZiwgZG1hX2FkZHIsIGxlbiwgc29wLCBlb3ApOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZW5pY19xdWV1ZV93cV9kZXNjX2NvbnQoc3RydWN0IHZuaWNfd3EgKndxLAotCXZvaWQgKm9zX2J1ZiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgdW5zaWduZWQgaW50IGxlbiwgaW50IGVvcCkKKwl2b2lkICpvc19idWYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHVuc2lnbmVkIGludCBsZW4sCisJaW50IGVvcCwgaW50IGxvb3BiYWNrKQogewogCWVuaWNfcXVldWVfd3FfZGVzY19leCh3cSwgb3NfYnVmLCBkbWFfYWRkciwgbGVuLAogCQkwLCAwLCAwLCAwLCAwLAotCQllb3AsIDAgLyogIVNPUCAqLywgZW9wKTsKKwkJZW9wLCAwIC8qICFTT1AgKi8sIGVvcCwgbG9vcGJhY2spOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZW5pY19xdWV1ZV93cV9kZXNjKHN0cnVjdCB2bmljX3dxICp3cSwgdm9pZCAqb3NfYnVmLAogCWRtYV9hZGRyX3QgZG1hX2FkZHIsIHVuc2lnbmVkIGludCBsZW4sIGludCB2bGFuX3RhZ19pbnNlcnQsCi0JdW5zaWduZWQgaW50IHZsYW5fdGFnLCBpbnQgZW9wKQorCXVuc2lnbmVkIGludCB2bGFuX3RhZywgaW50IGVvcCwgaW50IGxvb3BiYWNrKQogewogCWVuaWNfcXVldWVfd3FfZGVzY19leCh3cSwgb3NfYnVmLCBkbWFfYWRkciwgbGVuLAogCQkwLCAwLCB2bGFuX3RhZ19pbnNlcnQsIHZsYW5fdGFnLAogCQlXUV9FTkVUX09GRkxPQURfTU9ERV9DU1VNLAotCQllb3AsIDEgLyogU09QICovLCBlb3ApOworCQllb3AsIDEgLyogU09QICovLCBlb3AsIGxvb3BiYWNrKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGVuaWNfcXVldWVfd3FfZGVzY19jc3VtKHN0cnVjdCB2bmljX3dxICp3cSwKIAl2b2lkICpvc19idWYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHVuc2lnbmVkIGludCBsZW4sCiAJaW50IGlwX2NzdW0sIGludCB0Y3B1ZHBfY3N1bSwgaW50IHZsYW5fdGFnX2luc2VydCwKLQl1bnNpZ25lZCBpbnQgdmxhbl90YWcsIGludCBlb3ApCisJdW5zaWduZWQgaW50IHZsYW5fdGFnLCBpbnQgZW9wLCBpbnQgbG9vcGJhY2spCiB7CiAJZW5pY19xdWV1ZV93cV9kZXNjX2V4KHdxLCBvc19idWYsIGRtYV9hZGRyLCBsZW4sCiAJCShpcF9jc3VtID8gMSA6IDApICsgKHRjcHVkcF9jc3VtID8gMiA6IDApLAogCQkwLCB2bGFuX3RhZ19pbnNlcnQsIHZsYW5fdGFnLAogCQlXUV9FTkVUX09GRkxPQURfTU9ERV9DU1VNLAotCQllb3AsIDEgLyogU09QICovLCBlb3ApOworCQllb3AsIDEgLyogU09QICovLCBlb3AsIGxvb3BiYWNrKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGVuaWNfcXVldWVfd3FfZGVzY19jc3VtX2w0KHN0cnVjdCB2bmljX3dxICp3cSwKIAl2b2lkICpvc19idWYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHVuc2lnbmVkIGludCBsZW4sCiAJdW5zaWduZWQgaW50IGNzdW1fb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaGRyX2xlbiwKLQlpbnQgdmxhbl90YWdfaW5zZXJ0LCB1bnNpZ25lZCBpbnQgdmxhbl90YWcsIGludCBlb3ApCisJaW50IHZsYW5fdGFnX2luc2VydCwgdW5zaWduZWQgaW50IHZsYW5fdGFnLCBpbnQgZW9wLCBpbnQgbG9vcGJhY2spCiB7CiAJZW5pY19xdWV1ZV93cV9kZXNjX2V4KHdxLCBvc19idWYsIGRtYV9hZGRyLCBsZW4sCiAJCWNzdW1fb2Zmc2V0LCBoZHJfbGVuLCB2bGFuX3RhZ19pbnNlcnQsIHZsYW5fdGFnLAogCQlXUV9FTkVUX09GRkxPQURfTU9ERV9DU1VNX0w0LAotCQllb3AsIDEgLyogU09QICovLCBlb3ApOworCQllb3AsIDEgLyogU09QICovLCBlb3AsIGxvb3BiYWNrKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGVuaWNfcXVldWVfd3FfZGVzY190c28oc3RydWN0IHZuaWNfd3EgKndxLAogCXZvaWQgKm9zX2J1ZiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgdW5zaWduZWQgaW50IGxlbiwKIAl1bnNpZ25lZCBpbnQgbXNzLCB1bnNpZ25lZCBpbnQgaGRyX2xlbiwgaW50IHZsYW5fdGFnX2luc2VydCwKLQl1bnNpZ25lZCBpbnQgdmxhbl90YWcsIGludCBlb3ApCisJdW5zaWduZWQgaW50IHZsYW5fdGFnLCBpbnQgZW9wLCBpbnQgbG9vcGJhY2spCiB7CiAJZW5pY19xdWV1ZV93cV9kZXNjX2V4KHdxLCBvc19idWYsIGRtYV9hZGRyLCBsZW4sCiAJCW1zcywgaGRyX2xlbiwgdmxhbl90YWdfaW5zZXJ0LCB2bGFuX3RhZywKIAkJV1FfRU5FVF9PRkZMT0FEX01PREVfVFNPLAotCQllb3AsIDEgLyogU09QICovLCBlb3ApOworCQllb3AsIDEgLyogU09QICovLCBlb3AsIGxvb3BiYWNrKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGVuaWNfcXVldWVfcnFfZGVzYyhzdHJ1Y3Qgdm5pY19ycSAqcnEsCkBAIC0xMzEsMTAgKzEzMiw4IEBACiBzdHJ1Y3QgZW5pYzsKIAogaW50IGVuaWNfZ2V0X3ZuaWNfY29uZmlnKHN0cnVjdCBlbmljICopOwotdm9pZCBlbmljX2FkZF9tdWx0aWNhc3RfYWRkcihzdHJ1Y3QgZW5pYyAqZW5pYywgdTggKmFkZHIpOwotdm9pZCBlbmljX2RlbF9tdWx0aWNhc3RfYWRkcihzdHJ1Y3QgZW5pYyAqZW5pYywgdTggKmFkZHIpOwotdm9pZCBlbmljX2FkZF92bGFuKHN0cnVjdCBlbmljICplbmljLCB1MTYgdmxhbmlkKTsKLXZvaWQgZW5pY19kZWxfdmxhbihzdHJ1Y3QgZW5pYyAqZW5pYywgdTE2IHZsYW5pZCk7CitpbnQgZW5pY19hZGRfdmxhbihzdHJ1Y3QgZW5pYyAqZW5pYywgdTE2IHZsYW5pZCk7CitpbnQgZW5pY19kZWxfdmxhbihzdHJ1Y3QgZW5pYyAqZW5pYywgdTE2IHZsYW5pZCk7CiBpbnQgZW5pY19zZXRfbmljX2NmZyhzdHJ1Y3QgZW5pYyAqZW5pYywgdTggcnNzX2RlZmF1bHRfY3B1LCB1OCByc3NfaGFzaF90eXBlLAogCXU4IHJzc19oYXNoX2JpdHMsIHU4IHJzc19iYXNlX2NwdSwgdTggcnNzX2VuYWJsZSwgdTggdHNvX2lwaWRfc3BsaXRfZW4sCiAJdTggaWdfdmxhbl9zdHJpcF9lbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL3JxX2VuZXRfZGVzYy5oIGIvZHJpdmVycy9uZXQvZW5pYy9ycV9lbmV0X2Rlc2MuaAppbmRleCBhMDZlNjQ5Li5lNmRkMzA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL3JxX2VuZXRfZGVzYy5oCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvcnFfZW5ldF9kZXNjLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDggQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAyMDA3IE51b3ZhIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBtYXkgcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19jcS5jIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2NxLmMKaW5kZXggMDIwYWU2Yy4uYjg2ZDZlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2NxLmMKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2NxLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDggQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAyMDA3IE51b3ZhIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBtYXkgcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTQyLDcgKzQyLDcgQEAKIAogCWNxLT5jdHJsID0gdm5pY19kZXZfZ2V0X3Jlcyh2ZGV2LCBSRVNfVFlQRV9DUSwgaW5kZXgpOwogCWlmICghY3EtPmN0cmwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gaG9vayBDUVslZF0gcmVzb3VyY2VcbiIsIGluZGV4KTsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gaG9vayBDUVslZF0gcmVzb3VyY2VcbiIsIGluZGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfY3EuaCBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19jcS5oCmluZGV4IDExNDc2M2MuLjU1MmQzZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19jcS5oCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19jcS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA4IENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgMjAwNyBOdW92YSBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgbWF5IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmMgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmMKaW5kZXggZTBkMzMyOC4uNmE1YjU3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwOCBDaXNjbyBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDgtMjAxMCBDaXNjbyBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IDIwMDcgTnVvdmEgU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IG1heSByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjMsMjEgKzIzLDIzIEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgInZuaWNfcmVzb3VyY2UuaCIKICNpbmNsdWRlICJ2bmljX2RldmNtZC5oIgogI2luY2x1ZGUgInZuaWNfZGV2LmgiCiAjaW5jbHVkZSAidm5pY19zdGF0cy5oIgogCitlbnVtIHZuaWNfcHJveHlfdHlwZSB7CisJUFJPWFlfTk9ORSwKKwlQUk9YWV9CWV9CREYsCit9OworCiBzdHJ1Y3Qgdm5pY19yZXMgewogCXZvaWQgX19pb21lbSAqdmFkZHI7CiAJZG1hX2FkZHJfdCBidXNfYWRkcjsKIAl1bnNpZ25lZCBpbnQgY291bnQ7CiB9OwogCi0jZGVmaW5lIFZOSUNfREVWX0NBUF9JTklUCTB4MDAwMQotCiBzdHJ1Y3Qgdm5pY19kZXYgewogCXZvaWQgKnByaXY7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CkBAIC00OCwxMyArNTAsMTQgQEAKIAlzdHJ1Y3Qgdm5pY19kZXZjbWRfbm90aWZ5IG5vdGlmeV9jb3B5OwogCWRtYV9hZGRyX3Qgbm90aWZ5X3BhOwogCXUzMiBub3RpZnlfc3o7Ci0JdTMyICpsaW5rc3RhdHVzOwogCWRtYV9hZGRyX3QgbGlua3N0YXR1c19wYTsKIAlzdHJ1Y3Qgdm5pY19zdGF0cyAqc3RhdHM7CiAJZG1hX2FkZHJfdCBzdGF0c19wYTsKIAlzdHJ1Y3Qgdm5pY19kZXZjbWRfZndfaW5mbyAqZndfaW5mbzsKIAlkbWFfYWRkcl90IGZ3X2luZm9fcGE7Ci0JdTMyIGNhcF9mbGFnczsKKwllbnVtIHZuaWNfcHJveHlfdHlwZSBwcm94eTsKKwl1MzIgcHJveHlfaW5kZXg7CisJdTY0IGFyZ3NbVk5JQ19ERVZDTURfTkFSR1NdOwogfTsKIAogI2RlZmluZSBWTklDX01BWF9SRVNfSERSX1NJWkUgXApAQCAtNzgsMTkgKzgxLDE5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGJhci0+bGVuIDwgVk5JQ19NQVhfUkVTX0hEUl9TSVpFKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAidk5JQyBCQVIwIHJlcyBoZHIgbGVuZ3RoIGVycm9yXG4iKTsKKwkJcHJfZXJyKCJ2TklDIEJBUjAgcmVzIGhkciBsZW5ndGggZXJyb3JcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlyaCA9IGJhci0+dmFkZHI7CiAJaWYgKCFyaCkgewotCQlwcmludGsoS0VSTl9FUlIgInZOSUMgQkFSMCByZXMgaGRyIG5vdCBtZW0tbWFwcGVkXG4iKTsKKwkJcHJfZXJyKCJ2TklDIEJBUjAgcmVzIGhkciBub3QgbWVtLW1hcHBlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChpb3JlYWQzMigmcmgtPm1hZ2ljKSAhPSBWTklDX1JFU19NQUdJQyB8fAogCSAgICBpb3JlYWQzMigmcmgtPnZlcnNpb24pICE9IFZOSUNfUkVTX1ZFUlNJT04pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ2TklDIEJBUjAgcmVzIG1hZ2ljL3ZlcnNpb24gZXJyb3IgIgorCQlwcl9lcnIoInZOSUMgQkFSMCByZXMgbWFnaWMvdmVyc2lvbiBlcnJvciAiCiAJCQkiZXhwICglbHgvJWx4KSBjdXJyICgleC8leClcbiIsCiAJCQlWTklDX1JFU19NQUdJQywgVk5JQ19SRVNfVkVSU0lPTiwKIAkJCWlvcmVhZDMyKCZyaC0+bWFnaWMpLCBpb3JlYWQzMigmcmgtPnZlcnNpb24pKTsKQEAgLTEyMiw3ICsxMjUsNyBAQAogCQkJLyogZWFjaCBjb3VudCBpcyBzdHJpZGUgYnl0ZXMgbG9uZyAqLwogCQkJbGVuID0gY291bnQgKiBWTklDX1JFU19TVFJJREU7CiAJCQlpZiAobGVuICsgYmFyX29mZnNldCA+IGJhcltiYXJfbnVtXS5sZW4pIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgInZOSUMgQkFSMCByZXNvdXJjZSAlZCAiCisJCQkJcHJfZXJyKCJ2TklDIEJBUjAgcmVzb3VyY2UgJWQgIgogCQkJCQkib3V0LW9mLWJvdW5kcywgb2Zmc2V0IDB4JXggKyAiCiAJCQkJCSJzaXplIDB4JXggPiBiYXIgbGVuIDB4JWx4XG4iLAogCQkJCQl0eXBlLCBiYXJfb2Zmc2V0LApAQCAtMjI5LDggKzIzMiw3IEBACiAJCSZyaW5nLT5iYXNlX2FkZHJfdW5hbGlnbmVkKTsKIAogCWlmICghcmluZy0+ZGVzY3NfdW5hbGlnbmVkKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICJGYWlsZWQgdG8gYWxsb2NhdGUgcmluZyAoc2l6ZT0lZCksIGFib3J0aW5nXG4iLAorCQlwcl9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSByaW5nIChzaXplPSVkKSwgYWJvcnRpbmdcbiIsCiAJCQkoaW50KXJpbmctPnNpemUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0yNTgsMjMgKzI2MCwyOCBAQAogCX0KIH0KIAotaW50IHZuaWNfZGV2X2NtZChzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIGVudW0gdm5pY19kZXZjbWRfY21kIGNtZCwKLQl1NjQgKmEwLCB1NjQgKmExLCBpbnQgd2FpdCkKK3N0YXRpYyBpbnQgX3ZuaWNfZGV2X2NtZChzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIGVudW0gdm5pY19kZXZjbWRfY21kIGNtZCwKKwlpbnQgd2FpdCkKIHsKIAlzdHJ1Y3Qgdm5pY19kZXZjbWQgX19pb21lbSAqZGV2Y21kID0gdmRldi0+ZGV2Y21kOworCXVuc2lnbmVkIGludCBpOwogCWludCBkZWxheTsKIAl1MzIgc3RhdHVzOwogCWludCBlcnI7CiAKIAlzdGF0dXMgPSBpb3JlYWQzMigmZGV2Y21kLT5zdGF0dXMpOworCWlmIChzdGF0dXMgPT0gMHhGRkZGRkZGRikgeworCQkvKiBQQ0ktZSB0YXJnZXQgZGV2aWNlIGlzIGdvbmUgKi8KKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCWlmIChzdGF0dXMgJiBTVEFUX0JVU1kpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJCdXN5IGRldmNtZCAlZFxuIiwgX0NNRF9OKGNtZCkpOworCQlwcl9lcnIoIkJ1c3kgZGV2Y21kICVkXG4iLCBfQ01EX04oY21kKSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJaWYgKF9DTURfRElSKGNtZCkgJiBfQ01EX0RJUl9XUklURSkgewotCQl3cml0ZXEoKmEwLCAmZGV2Y21kLT5hcmdzWzBdKTsKLQkJd3JpdGVxKCphMSwgJmRldmNtZC0+YXJnc1sxXSk7CisJCWZvciAoaSA9IDA7IGkgPCBWTklDX0RFVkNNRF9OQVJHUzsgaSsrKQorCQkJd3JpdGVxKHZkZXYtPmFyZ3NbaV0sICZkZXZjbWQtPmFyZ3NbaV0pOwogCQl3bWIoKTsKIAl9CiAKQEAgLTI4OCwzMSArMjk1LDExMCBAQAogCQl1ZGVsYXkoMTAwKTsKIAogCQlzdGF0dXMgPSBpb3JlYWQzMigmZGV2Y21kLT5zdGF0dXMpOworCQlpZiAoc3RhdHVzID09IDB4RkZGRkZGRkYpIHsKKwkJCS8qIFBDSS1lIHRhcmdldCBkZXZpY2UgaXMgZ29uZSAqLworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwogCQlpZiAoIShzdGF0dXMgJiBTVEFUX0JVU1kpKSB7CiAKIAkJCWlmIChzdGF0dXMgJiBTVEFUX0VSUk9SKSB7CiAJCQkJZXJyID0gKGludClyZWFkcSgmZGV2Y21kLT5hcmdzWzBdKTsKIAkJCQlpZiAoZXJyICE9IEVSUl9FQ01EVU5LTk9XTiB8fAogCQkJCSAgICBjbWQgIT0gQ01EX0NBUEFCSUxJVFkpCi0JCQkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgJWQgZGV2Y21kICVkXG4iLAorCQkJCQlwcl9lcnIoIkVycm9yICVkIGRldmNtZCAlZFxuIiwKIAkJCQkJCWVyciwgX0NNRF9OKGNtZCkpOwogCQkJCXJldHVybiBlcnI7CiAJCQl9CiAKIAkJCWlmIChfQ01EX0RJUihjbWQpICYgX0NNRF9ESVJfUkVBRCkgewogCQkJCXJtYigpOwotCQkJCSphMCA9IHJlYWRxKCZkZXZjbWQtPmFyZ3NbMF0pOwotCQkJCSphMSA9IHJlYWRxKCZkZXZjbWQtPmFyZ3NbMV0pOworCQkJCWZvciAoaSA9IDA7IGkgPCBWTklDX0RFVkNNRF9OQVJHUzsgaSsrKQorCQkJCQl2ZGV2LT5hcmdzW2ldID0gcmVhZHEoJmRldmNtZC0+YXJnc1tpXSk7CiAJCQl9CiAKIAkJCXJldHVybiAwOwogCQl9CiAJfQogCi0JcHJpbnRrKEtFUk5fRVJSICJUaW1lZG91dCBkZXZjbWQgJWRcbiIsIF9DTURfTihjbWQpKTsKKwlwcl9lcnIoIlRpbWVkb3V0IGRldmNtZCAlZFxuIiwgX0NNRF9OKGNtZCkpOwogCXJldHVybiAtRVRJTUVET1VUOwogfQogCitzdGF0aWMgaW50IHZuaWNfZGV2X2NtZF9wcm94eV9ieV9iZGYoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LAorCWVudW0gdm5pY19kZXZjbWRfY21kIGNtZCwgdTY0ICphMCwgdTY0ICphMSwgaW50IHdhaXQpCit7CisJdTMyIHN0YXR1czsKKwlpbnQgZXJyOworCisJbWVtc2V0KHZkZXYtPmFyZ3MsIDAsIHNpemVvZih2ZGV2LT5hcmdzKSk7CisKKwl2ZGV2LT5hcmdzWzBdID0gdmRldi0+cHJveHlfaW5kZXg7IC8qIGJkZiAqLworCXZkZXYtPmFyZ3NbMV0gPSBjbWQ7CisJdmRldi0+YXJnc1syXSA9ICphMDsKKwl2ZGV2LT5hcmdzWzNdID0gKmExOworCisJZXJyID0gX3ZuaWNfZGV2X2NtZCh2ZGV2LCBDTURfUFJPWFlfQllfQkRGLCB3YWl0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc3RhdHVzID0gKHUzMil2ZGV2LT5hcmdzWzBdOworCWlmIChzdGF0dXMgJiBTVEFUX0VSUk9SKSB7CisJCWVyciA9IChpbnQpdmRldi0+YXJnc1sxXTsKKwkJaWYgKGVyciAhPSBFUlJfRUNNRFVOS05PV04gfHwKKwkJICAgIGNtZCAhPSBDTURfQ0FQQUJJTElUWSkKKwkJCXByX2VycigiRXJyb3IgJWQgcHJveHkgZGV2Y21kICVkXG4iLCBlcnIsIF9DTURfTihjbWQpKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkqYTAgPSB2ZGV2LT5hcmdzWzFdOworCSphMSA9IHZkZXYtPmFyZ3NbMl07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2bmljX2Rldl9jbWRfbm9fcHJveHkoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LAorCWVudW0gdm5pY19kZXZjbWRfY21kIGNtZCwgdTY0ICphMCwgdTY0ICphMSwgaW50IHdhaXQpCit7CisJaW50IGVycjsKKworCXZkZXYtPmFyZ3NbMF0gPSAqYTA7CisJdmRldi0+YXJnc1sxXSA9ICphMTsKKworCWVyciA9IF92bmljX2Rldl9jbWQodmRldiwgY21kLCB3YWl0KTsKKworCSphMCA9IHZkZXYtPmFyZ3NbMF07CisJKmExID0gdmRldi0+YXJnc1sxXTsKKworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgdm5pY19kZXZfY21kX3Byb3h5X2J5X2JkZl9zdGFydChzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIHUxNiBiZGYpCit7CisJdmRldi0+cHJveHkgPSBQUk9YWV9CWV9CREY7CisJdmRldi0+cHJveHlfaW5kZXggPSBiZGY7Cit9CisKK3ZvaWQgdm5pY19kZXZfY21kX3Byb3h5X2VuZChzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpCit7CisJdmRldi0+cHJveHkgPSBQUk9YWV9OT05FOworCXZkZXYtPnByb3h5X2luZGV4ID0gMDsKK30KKworaW50IHZuaWNfZGV2X2NtZChzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIGVudW0gdm5pY19kZXZjbWRfY21kIGNtZCwKKwl1NjQgKmEwLCB1NjQgKmExLCBpbnQgd2FpdCkKK3sKKwltZW1zZXQodmRldi0+YXJncywgMCwgc2l6ZW9mKHZkZXYtPmFyZ3MpKTsKKworCXN3aXRjaCAodmRldi0+cHJveHkpIHsKKwljYXNlIFBST1hZX0JZX0JERjoKKwkJcmV0dXJuIHZuaWNfZGV2X2NtZF9wcm94eV9ieV9iZGYodmRldiwgY21kLCBhMCwgYTEsIHdhaXQpOworCWNhc2UgUFJPWFlfTk9ORToKKwlkZWZhdWx0OgorCQlyZXR1cm4gdm5pY19kZXZfY21kX25vX3Byb3h5KHZkZXYsIGNtZCwgYTAsIGExLCB3YWl0KTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgdm5pY19kZXZfY2FwYWJsZShzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIGVudW0gdm5pY19kZXZjbWRfY21kIGNtZCkKIHsKIAl1NjQgYTAgPSAodTMyKWNtZCwgYTEgPSAwOwpAQCAtNDMxLDYgKzUxNywxOSBAQAogCXJldHVybiB2bmljX2Rldl9jbWQodmRldiwgQ01EX0VOQUJMRSwgJmEwLCAmYTEsIHdhaXQpOwogfQogCitpbnQgdm5pY19kZXZfZW5hYmxlX3dhaXQoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KQoreworCXU2NCBhMCA9IDAsIGExID0gMDsKKwlpbnQgd2FpdCA9IDEwMDA7CisJaW50IGVycjsKKworCWVyciA9IHZuaWNfZGV2X2NtZCh2ZGV2LCBDTURfRU5BQkxFX1dBSVQsICZhMCwgJmExLCB3YWl0KTsKKwlpZiAoZXJyID09IEVSUl9FQ01EVU5LTk9XTikKKwkJcmV0dXJuIHZuaWNfZGV2X2NtZCh2ZGV2LCBDTURfRU5BQkxFLCAmYTAsICZhMSwgd2FpdCk7CisKKwlyZXR1cm4gZXJyOworfQorCiBpbnQgdm5pY19kZXZfZGlzYWJsZShzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpCiB7CiAJdTY0IGEwID0gMCwgYTEgPSAwOwpAQCAtNDg2LDYgKzU4NSw0NCBAQAogCXJldHVybiAwOwogfQogCitpbnQgdm5pY19kZXZfaGFuZ19yZXNldChzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIGludCBhcmcpCit7CisJdTY0IGEwID0gKHUzMilhcmcsIGExID0gMDsKKwlpbnQgd2FpdCA9IDEwMDA7CisJaW50IGVycjsKKworCWVyciA9IHZuaWNfZGV2X2NtZCh2ZGV2LCBDTURfSEFOR19SRVNFVCwgJmEwLCAmYTEsIHdhaXQpOworCWlmIChlcnIgPT0gRVJSX0VDTURVTktOT1dOKSB7CisJCWVyciA9IHZuaWNfZGV2X3NvZnRfcmVzZXQodmRldiwgYXJnKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJcmV0dXJuIHZuaWNfZGV2X2luaXQodmRldiwgMCk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworaW50IHZuaWNfZGV2X2hhbmdfcmVzZXRfZG9uZShzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIGludCAqZG9uZSkKK3sKKwl1NjQgYTAgPSAwLCBhMSA9IDA7CisJaW50IHdhaXQgPSAxMDAwOworCWludCBlcnI7CisKKwkqZG9uZSA9IDA7CisKKwllcnIgPSB2bmljX2Rldl9jbWQodmRldiwgQ01EX0hBTkdfUkVTRVRfU1RBVFVTLCAmYTAsICZhMSwgd2FpdCk7CisJaWYgKGVycikgeworCQlpZiAoZXJyID09IEVSUl9FQ01EVU5LTk9XTikKKwkJCXJldHVybiB2bmljX2Rldl9zb2Z0X3Jlc2V0X2RvbmUodmRldiwgZG9uZSk7CisJCXJldHVybiBlcnI7CisJfQorCisJKmRvbmUgPSAoYTAgPT0gMCk7CisKKwlyZXR1cm4gMDsKK30KKwogaW50IHZuaWNfZGV2X2hhbmdfbm90aWZ5KHN0cnVjdCB2bmljX2RldiAqdmRldikKIHsKIAl1NjQgYTAsIGExOwpAQCAtNTEyLDcgKzY0OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgdm5pY19kZXZfcGFja2V0X2ZpbHRlcihzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIGludCBkaXJlY3RlZCwgaW50IG11bHRpY2FzdCwKK2ludCB2bmljX2Rldl9wYWNrZXRfZmlsdGVyKHN0cnVjdCB2bmljX2RldiAqdmRldiwgaW50IGRpcmVjdGVkLCBpbnQgbXVsdGljYXN0LAogCWludCBicm9hZGNhc3QsIGludCBwcm9taXNjLCBpbnQgYWxsbXVsdGkpCiB7CiAJdTY0IGEwLCBhMSA9IDA7CkBAIC01MjcsNyArNjY0LDI5IEBACiAKIAllcnIgPSB2bmljX2Rldl9jbWQodmRldiwgQ01EX1BBQ0tFVF9GSUxURVIsICZhMCwgJmExLCB3YWl0KTsKIAlpZiAoZXJyKQotCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IHNldCBwYWNrZXQgZmlsdGVyXG4iKTsKKwkJcHJfZXJyKCJDYW4ndCBzZXQgcGFja2V0IGZpbHRlclxuIik7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgdm5pY19kZXZfcGFja2V0X2ZpbHRlcl9hbGwoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCBpbnQgZGlyZWN0ZWQsCisJaW50IG11bHRpY2FzdCwgaW50IGJyb2FkY2FzdCwgaW50IHByb21pc2MsIGludCBhbGxtdWx0aSkKK3sKKwl1NjQgYTAsIGExID0gMDsKKwlpbnQgd2FpdCA9IDEwMDA7CisJaW50IGVycjsKKworCWEwID0gKGRpcmVjdGVkID8gQ01EX1BGSUxURVJfRElSRUNURUQgOiAwKSB8CisJICAgICAobXVsdGljYXN0ID8gQ01EX1BGSUxURVJfTVVMVElDQVNUIDogMCkgfAorCSAgICAgKGJyb2FkY2FzdCA/IENNRF9QRklMVEVSX0JST0FEQ0FTVCA6IDApIHwKKwkgICAgIChwcm9taXNjID8gQ01EX1BGSUxURVJfUFJPTUlTQ1VPVVMgOiAwKSB8CisJICAgICAoYWxsbXVsdGkgPyBDTURfUEZJTFRFUl9BTExfTVVMVElDQVNUIDogMCk7CisKKwllcnIgPSB2bmljX2Rldl9jbWQodmRldiwgQ01EX1BBQ0tFVF9GSUxURVJfQUxMLCAmYTAsICZhMSwgd2FpdCk7CisJaWYgKGVycikKKwkJcHJfZXJyKCJDYW4ndCBzZXQgcGFja2V0IGZpbHRlclxuIik7CisKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgdm5pY19kZXZfYWRkX2FkZHIoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCB1OCAqYWRkcikKQEAgLTU0Miw3ICs3MDEsNyBAQAogCiAJZXJyID0gdm5pY19kZXZfY21kKHZkZXYsIENNRF9BRERSX0FERCwgJmEwLCAmYTEsIHdhaXQpOwogCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgYWRkIGFkZHIgWyVwTV0sICVkXG4iLCBhZGRyLCBlcnIpOworCQlwcl9lcnIoIkNhbid0IGFkZCBhZGRyIFslcE1dLCAlZFxuIiwgYWRkciwgZXJyKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC01NTksNyArNzE4LDIxIEBACiAKIAllcnIgPSB2bmljX2Rldl9jbWQodmRldiwgQ01EX0FERFJfREVMLCAmYTAsICZhMSwgd2FpdCk7CiAJaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBkZWwgYWRkciBbJXBNXSwgJWRcbiIsIGFkZHIsIGVycik7CisJCXByX2VycigiQ2FuJ3QgZGVsIGFkZHIgWyVwTV0sICVkXG4iLCBhZGRyLCBlcnIpOworCisJcmV0dXJuIGVycjsKK30KKworaW50IHZuaWNfZGV2X3NldF9pZ192bGFuX3Jld3JpdGVfbW9kZShzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsCisJdTggaWdfdmxhbl9yZXdyaXRlX21vZGUpCit7CisJdTY0IGEwID0gaWdfdmxhbl9yZXdyaXRlX21vZGUsIGExID0gMDsKKwlpbnQgd2FpdCA9IDEwMDA7CisJaW50IGVycjsKKworCWVyciA9IHZuaWNfZGV2X2NtZCh2ZGV2LCBDTURfSUdfVkxBTl9SRVdSSVRFX01PREUsICZhMCwgJmExLCB3YWl0KTsKKwlpZiAoZXJyID09IEVSUl9FQ01EVU5LTk9XTikKKwkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtNTcyLDggKzc0NSw3IEBACiAKIAllcnIgPSB2bmljX2Rldl9jbWQodmRldiwgQ01EX0lBUiwgJmEwLCAmYTEsIHdhaXQpOwogCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJhaXNlIElOVFJbJWRdLCBlcnIgJWRcbiIsCi0JCQlpbnRyLCBlcnIpOworCQlwcl9lcnIoIkZhaWxlZCB0byByYWlzZSBJTlRSWyVkXSwgZXJyICVkXG4iLCBpbnRyLCBlcnIpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTYwNCw4ICs3NzYsNyBAQAogCWRtYV9hZGRyX3Qgbm90aWZ5X3BhOwogCiAJaWYgKHZkZXYtPm5vdGlmeSB8fCB2ZGV2LT5ub3RpZnlfcGEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJub3RpZnkgYmxvY2sgJXAgc3RpbGwgYWxsb2NhdGVkIiwKLQkJCXZkZXYtPm5vdGlmeSk7CisJCXByX2Vycigibm90aWZ5IGJsb2NrICVwIHN0aWxsIGFsbG9jYXRlZCIsIHZkZXYtPm5vdGlmeSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNjE4LDIyICs3ODksMjUgQEAKIAlyZXR1cm4gdm5pY19kZXZfbm90aWZ5X3NldGNtZCh2ZGV2LCBub3RpZnlfYWRkciwgbm90aWZ5X3BhLCBpbnRyKTsKIH0KIAotdm9pZCB2bmljX2Rldl9ub3RpZnlfdW5zZXRjbWQoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KQoraW50IHZuaWNfZGV2X25vdGlmeV91bnNldGNtZChzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpCiB7CiAJdTY0IGEwLCBhMTsKIAlpbnQgd2FpdCA9IDEwMDA7CisJaW50IGVycjsKIAogCWEwID0gMDsgIC8qIHBhZGRyID0gMCB0byB1bnNldCBub3RpZnkgYnVmZmVyICovCiAJYTEgPSAweDAwMDBmZmZmMDAwMDAwMDBVTEw7IC8qIGludHIgbnVtID0gLTEgdG8gdW5yZWcgZm9yIGludHIgKi8KIAlhMSArPSBzaXplb2Yoc3RydWN0IHZuaWNfZGV2Y21kX25vdGlmeSk7CiAKLQl2bmljX2Rldl9jbWQodmRldiwgQ01EX05PVElGWSwgJmEwLCAmYTEsIHdhaXQpOworCWVyciA9IHZuaWNfZGV2X2NtZCh2ZGV2LCBDTURfTk9USUZZLCAmYTAsICZhMSwgd2FpdCk7CiAJdmRldi0+bm90aWZ5ID0gTlVMTDsKIAl2ZGV2LT5ub3RpZnlfcGEgPSAwOwogCXZkZXYtPm5vdGlmeV9zeiA9IDA7CisKKwlyZXR1cm4gZXJyOwogfQogCi12b2lkIHZuaWNfZGV2X25vdGlmeV91bnNldChzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpCitpbnQgdm5pY19kZXZfbm90aWZ5X3Vuc2V0KHN0cnVjdCB2bmljX2RldiAqdmRldikKIHsKIAlpZiAodmRldi0+bm90aWZ5KSB7CiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQodmRldi0+cGRldiwKQEAgLTY0Miw3ICs4MTYsNyBAQAogCQkJdmRldi0+bm90aWZ5X3BhKTsKIAl9CiAKLQl2bmljX2Rldl9ub3RpZnlfdW5zZXRjbWQodmRldik7CisJcmV0dXJuIHZuaWNfZGV2X25vdGlmeV91bnNldGNtZCh2ZGV2KTsKIH0KIAogc3RhdGljIGludCB2bmljX2Rldl9ub3RpZnlfcmVhZHkoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KQpAQCAtNjcyLDEzICs4NDYsMTQgQEAKIAlpbnQgd2FpdCA9IDEwMDA7CiAJaW50IHIgPSAwOwogCi0JaWYgKHZkZXYtPmNhcF9mbGFncyAmIFZOSUNfREVWX0NBUF9JTklUKQorCWlmICh2bmljX2Rldl9jYXBhYmxlKHZkZXYsIENNRF9JTklUKSkKIAkJciA9IHZuaWNfZGV2X2NtZCh2ZGV2LCBDTURfSU5JVCwgJmEwLCAmYTEsIHdhaXQpOwogCWVsc2UgewogCQl2bmljX2Rldl9jbWQodmRldiwgQ01EX0lOSVRfdjEsICZhMCwgJmExLCB3YWl0KTsKIAkJaWYgKGEwICYgQ01EX0lOSVRGX0RFRkFVTFRfTUFDKSB7Ci0JCQkvLyBFbXVsYXRlIHRoZXNlIGZvciBvbGQgQ01EX0lOSVRfdjEgd2hpY2gKLQkJCS8vIGRpZG4ndCBwYXNzIGEwIHNvIG5vIENNRF9JTklURl8qLgorCQkJLyogRW11bGF0ZSB0aGVzZSBmb3Igb2xkIENNRF9JTklUX3YxIHdoaWNoCisJCQkgKiBkaWRuJ3QgcGFzcyBhMCBzbyBubyBDTURfSU5JVEZfKi4KKwkJCSAqLwogCQkJdm5pY19kZXZfY21kKHZkZXYsIENNRF9NQUNfQUREUiwgJmEwLCAmYTEsIHdhaXQpOwogCQkJdm5pY19kZXZfY21kKHZkZXYsIENNRF9BRERSX0FERCwgJmEwLCAmYTEsIHdhaXQpOwogCQl9CkBAIC03MDAsNyArODc1LDcgQEAKIAogCSpkb25lID0gKGEwID09IDApOwogCi0JKmVyciA9IChhMCA9PSAwKSA/IGExIDogMDsKKwkqZXJyID0gKGEwID09IDApID8gKGludClhMTowOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03MzgsOSArOTEzLDYgQEAKIAogaW50IHZuaWNfZGV2X2xpbmtfc3RhdHVzKHN0cnVjdCB2bmljX2RldiAqdmRldikKIHsKLQlpZiAodmRldi0+bGlua3N0YXR1cykKLQkJcmV0dXJuICp2ZGV2LT5saW5rc3RhdHVzOwotCiAJaWYgKCF2bmljX2Rldl9ub3RpZnlfcmVhZHkodmRldikpCiAJCXJldHVybiAwOwogCkBAIC03ODcsNiArOTU5LDE0IEBACiAJcmV0dXJuIHZkZXYtPm5vdGlmeV9jb3B5LnN0YXR1czsKIH0KIAordTMyIHZuaWNfZGV2X3VpZihzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpCit7CisJaWYgKCF2bmljX2Rldl9ub3RpZnlfcmVhZHkodmRldikpCisJCXJldHVybiAwOworCisJcmV0dXJuIHZkZXYtPm5vdGlmeV9jb3B5LnVpZjsKK30KKwogdm9pZCB2bmljX2Rldl9zZXRfaW50cl9tb2RlKHN0cnVjdCB2bmljX2RldiAqdmRldiwKIAllbnVtIHZuaWNfZGV2X2ludHJfbW9kZSBpbnRyX21vZGUpCiB7CkBAIC04MDcsMTQgKzk4Nyw5IEBACiAJCQkJc2l6ZW9mKHN0cnVjdCB2bmljX2RldmNtZF9ub3RpZnkpLAogCQkJCXZkZXYtPm5vdGlmeSwKIAkJCQl2ZGV2LT5ub3RpZnlfcGEpOwotCQlpZiAodmRldi0+bGlua3N0YXR1cykKLQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQodmRldi0+cGRldiwKLQkJCQlzaXplb2YodTMyKSwKLQkJCQl2ZGV2LT5saW5rc3RhdHVzLAotCQkJCXZkZXYtPmxpbmtzdGF0dXNfcGEpOwogCQlpZiAodmRldi0+c3RhdHMpCiAJCQlwY2lfZnJlZV9jb25zaXN0ZW50KHZkZXYtPnBkZXYsCi0JCQkJc2l6ZW9mKHN0cnVjdCB2bmljX2RldiksCisJCQkJc2l6ZW9mKHN0cnVjdCB2bmljX3N0YXRzKSwKIAkJCQl2ZGV2LT5zdGF0cywgdmRldi0+c3RhdHNfcGEpOwogCQlpZiAodmRldi0+ZndfaW5mbykKIAkJCXBjaV9mcmVlX2NvbnNpc3RlbnQodmRldi0+cGRldiwKQEAgLTg0NCwxMSArMTAxOSw2IEBACiAJaWYgKCF2ZGV2LT5kZXZjbWQpCiAJCWdvdG8gZXJyX291dDsKIAotCXZkZXYtPmNhcF9mbGFncyA9IDA7Ci0KLQlpZiAodm5pY19kZXZfY2FwYWJsZSh2ZGV2LCBDTURfSU5JVCkpCi0JCXZkZXYtPmNhcF9mbGFncyB8PSBWTklDX0RFVl9DQVBfSU5JVDsKLQogCXJldHVybiB2ZGV2OwogCiBlcnJfb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5oIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5oCmluZGV4IGNhY2NjZTMuLjNhNjE4NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDggQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAyMDA3IE51b3ZhIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBtYXkgcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTQxLDYgKzQxLDkgQEAKIH0KICNlbmRpZgogCisjdW5kZWYgcHJfZm10CisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKIGVudW0gdm5pY19kZXZfaHdfdmVyc2lvbiB7CiAJVk5JQ19ERVZfSFdfVkVSX1VOS05PV04sCiAJVk5JQ19ERVZfSFdfVkVSX0ExLApAQCAtOTIsNiArOTUsOCBAQAogCXN0cnVjdCB2bmljX2Rldl9yaW5nICpyaW5nKTsKIGludCB2bmljX2Rldl9jbWQoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCBlbnVtIHZuaWNfZGV2Y21kX2NtZCBjbWQsCiAJdTY0ICphMCwgdTY0ICphMSwgaW50IHdhaXQpOwordm9pZCB2bmljX2Rldl9jbWRfcHJveHlfYnlfYmRmX3N0YXJ0KHN0cnVjdCB2bmljX2RldiAqdmRldiwgdTE2IGJkZik7Cit2b2lkIHZuaWNfZGV2X2NtZF9wcm94eV9lbmQoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKIGludCB2bmljX2Rldl9md19pbmZvKHN0cnVjdCB2bmljX2RldiAqdmRldiwKIAlzdHJ1Y3Qgdm5pY19kZXZjbWRfZndfaW5mbyAqKmZ3X2luZm8pOwogaW50IHZuaWNfZGV2X2h3X3ZlcnNpb24oc3RydWN0IHZuaWNfZGV2ICp2ZGV2LApAQCAtMTAxLDggKzEwNiwxMCBAQAogaW50IHZuaWNfZGV2X3N0YXRzX2NsZWFyKHN0cnVjdCB2bmljX2RldiAqdmRldik7CiBpbnQgdm5pY19kZXZfc3RhdHNfZHVtcChzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIHN0cnVjdCB2bmljX3N0YXRzICoqc3RhdHMpOwogaW50IHZuaWNfZGV2X2hhbmdfbm90aWZ5KHN0cnVjdCB2bmljX2RldiAqdmRldik7Ci12b2lkIHZuaWNfZGV2X3BhY2tldF9maWx0ZXIoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCBpbnQgZGlyZWN0ZWQsIGludCBtdWx0aWNhc3QsCitpbnQgdm5pY19kZXZfcGFja2V0X2ZpbHRlcihzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIGludCBkaXJlY3RlZCwgaW50IG11bHRpY2FzdCwKIAlpbnQgYnJvYWRjYXN0LCBpbnQgcHJvbWlzYywgaW50IGFsbG11bHRpKTsKK2ludCB2bmljX2Rldl9wYWNrZXRfZmlsdGVyX2FsbChzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIGludCBkaXJlY3RlZCwKKwlpbnQgbXVsdGljYXN0LCBpbnQgYnJvYWRjYXN0LCBpbnQgcHJvbWlzYywgaW50IGFsbG11bHRpKTsKIGludCB2bmljX2Rldl9hZGRfYWRkcihzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIHU4ICphZGRyKTsKIGludCB2bmljX2Rldl9kZWxfYWRkcihzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIHU4ICphZGRyKTsKIGludCB2bmljX2Rldl9tYWNfYWRkcihzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIHU4ICptYWNfYWRkcik7CkBAIC0xMTAsMTYgKzExNywxOCBAQAogaW50IHZuaWNfZGV2X25vdGlmeV9zZXRjbWQoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LAogCXZvaWQgKm5vdGlmeV9hZGRyLCBkbWFfYWRkcl90IG5vdGlmeV9wYSwgdTE2IGludHIpOwogaW50IHZuaWNfZGV2X25vdGlmeV9zZXQoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCB1MTYgaW50cik7Ci12b2lkIHZuaWNfZGV2X25vdGlmeV91bnNldGNtZChzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpOwotdm9pZCB2bmljX2Rldl9ub3RpZnlfdW5zZXQoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKK2ludCB2bmljX2Rldl9ub3RpZnlfdW5zZXRjbWQoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKK2ludCB2bmljX2Rldl9ub3RpZnlfdW5zZXQoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKIGludCB2bmljX2Rldl9saW5rX3N0YXR1cyhzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpOwogdTMyIHZuaWNfZGV2X3BvcnRfc3BlZWQoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKIHUzMiB2bmljX2Rldl9tc2dfbHZsKHN0cnVjdCB2bmljX2RldiAqdmRldik7CiB1MzIgdm5pY19kZXZfbXR1KHN0cnVjdCB2bmljX2RldiAqdmRldik7CiB1MzIgdm5pY19kZXZfbGlua19kb3duX2NudChzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpOwogdTMyIHZuaWNfZGV2X25vdGlmeV9zdGF0dXMoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKK3UzMiB2bmljX2Rldl91aWYoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKIGludCB2bmljX2Rldl9jbG9zZShzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpOwogaW50IHZuaWNfZGV2X2VuYWJsZShzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpOworaW50IHZuaWNfZGV2X2VuYWJsZV93YWl0KHN0cnVjdCB2bmljX2RldiAqdmRldik7CiBpbnQgdm5pY19kZXZfZGlzYWJsZShzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpOwogaW50IHZuaWNfZGV2X29wZW4oc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCBpbnQgYXJnKTsKIGludCB2bmljX2Rldl9vcGVuX2RvbmUoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCBpbnQgKmRvbmUpOwpAQCAtMTI5LDEwICsxMzgsMTQgQEAKIGludCB2bmljX2Rldl9kZWluaXQoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKIGludCB2bmljX2Rldl9zb2Z0X3Jlc2V0KHN0cnVjdCB2bmljX2RldiAqdmRldiwgaW50IGFyZyk7CiBpbnQgdm5pY19kZXZfc29mdF9yZXNldF9kb25lKHN0cnVjdCB2bmljX2RldiAqdmRldiwgaW50ICpkb25lKTsKK2ludCB2bmljX2Rldl9oYW5nX3Jlc2V0KHN0cnVjdCB2bmljX2RldiAqdmRldiwgaW50IGFyZyk7CitpbnQgdm5pY19kZXZfaGFuZ19yZXNldF9kb25lKHN0cnVjdCB2bmljX2RldiAqdmRldiwgaW50ICpkb25lKTsKIHZvaWQgdm5pY19kZXZfc2V0X2ludHJfbW9kZShzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsCiAJZW51bSB2bmljX2Rldl9pbnRyX21vZGUgaW50cl9tb2RlKTsKIGVudW0gdm5pY19kZXZfaW50cl9tb2RlIHZuaWNfZGV2X2dldF9pbnRyX21vZGUoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKIHZvaWQgdm5pY19kZXZfdW5yZWdpc3RlcihzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpOworaW50IHZuaWNfZGV2X3NldF9pZ192bGFuX3Jld3JpdGVfbW9kZShzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsCisJdTggaWdfdmxhbl9yZXdyaXRlX21vZGUpOwogc3RydWN0IHZuaWNfZGV2ICp2bmljX2Rldl9yZWdpc3RlcihzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsCiAJdm9pZCAqcHJpdiwgc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCB2bmljX2Rldl9iYXIgKmJhciwKIAl1bnNpZ25lZCBpbnQgbnVtX2JhcnMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2RldmNtZC5oIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2RldmNtZC5oCmluZGV4IGQ3OGJiY2MuLjIwNjYxNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXZjbWQuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2Y21kLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDggQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAyMDA3IE51b3ZhIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBtYXkgcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTk4LDYgKzk4LDkgQEAKIAkvKiBzZXQgUnggcGFja2V0IGZpbHRlcjogKHUzMilhMD1maWx0ZXJzIChzZWUgQ01EX1BGSUxURVJfKikgKi8KIAlDTURfUEFDS0VUX0ZJTFRFUgk9IF9DTURDTlcoX0NNRF9ESVJfV1JJVEUsIF9DTURfVlRZUEVfRU5FVCwgNyksCiAKKwkvKiBzZXQgUnggcGFja2V0IGZpbHRlciBmb3IgYWxsOiAodTMyKWEwPWZpbHRlcnMgKHNlZSBDTURfUEZJTFRFUl8qKSAqLworCUNNRF9QQUNLRVRfRklMVEVSX0FMTCAgID0gX0NNRENOVyhfQ01EX0RJUl9XUklURSwgX0NNRF9WVFlQRV9BTEwsIDcpLAorCiAJLyogaGFuZyBkZXRlY3Rpb24gbm90aWZpY2F0aW9uICovCiAJQ01EX0hBTkdfTk9USUZZICAgICAgICAgPSBfQ01EQyhfQ01EX0RJUl9OT05FLCBfQ01EX1ZUWVBFX0FMTCwgOCksCiAKQEAgLTE3MSw2ICsxNzQsOSBAQAogCS8qIGVuYWJsZSB2aXJ0dWFsIGxpbmsgKi8KIAlDTURfRU5BQkxFCQk9IF9DTURDTlcoX0NNRF9ESVJfV1JJVEUsIF9DTURfVlRZUEVfQUxMLCAyOCksCiAKKwkvKiBlbmFibGUgdmlydHVhbCBsaW5rLCB3YWl0aW5nIHZhcmlhbnQuICovCisJQ01EX0VOQUJMRV9XQUlUCQk9IF9DTURDKF9DTURfRElSX1dSSVRFLCBfQ01EX1ZUWVBFX0FMTCwgMjgpLAorCiAJLyogZGlzYWJsZSB2aXJ0dWFsIGxpbmsgKi8KIAlDTURfRElTQUJMRQkJPSBfQ01EQyhfQ01EX0RJUl9OT05FLCBfQ01EX1ZUWVBFX0FMTCwgMjkpLAogCkBAIC0yMTEsNiArMjE3LDI3IEBACiAJICogaW46ICh1MTYpYTA9aW50ZXJydXB0IG51bWJlciB0byBhc3NlcnQKIAkgKi8KIAlDTURfSUFSCQkJPSBfQ01EQ05XKF9DTURfRElSX1dSSVRFLCBfQ01EX1ZUWVBFX0FMTCwgMzgpLAorCisJLyogaW5pdGlhdGUgaGFuZ3Jlc2V0LCBsaWtlIHNvZnRyZXNldCBhZnRlciBoYW5nIGRldGVjdGVkICovCisJQ01EX0hBTkdfUkVTRVQJCT0gX0NNREMoX0NNRF9ESVJfTk9ORSwgX0NNRF9WVFlQRV9BTEwsIDM5KSwKKworCS8qIGhhbmdyZXNldCBzdGF0dXM6CisJICogICAgb3V0OiBhMD0wIHJlc2V0IGNvbXBsZXRlLCBhMD0xIHJlc2V0IGluIHByb2dyZXNzICovCisJQ01EX0hBTkdfUkVTRVRfU1RBVFVTICAgPSBfQ01EQyhfQ01EX0RJUl9SRUFELCBfQ01EX1ZUWVBFX0FMTCwgNDApLAorCisJLyoKKwkgKiBTZXQgaHcgaW5ncmVzcyBwYWNrZXQgdmxhbiByZXdyaXRlIG1vZGU6CisJICogaW46ICAodTMyKWEwPW5ldyB2bGFuIHJld3JpdGUgbW9kZQorCSAqIG91dDogKHUzMilhMD1vbGQgdmxhbiByZXdyaXRlIG1vZGUgKi8KKwlDTURfSUdfVkxBTl9SRVdSSVRFX01PREUgPSBfQ01EQyhfQ01EX0RJUl9SVywgX0NNRF9WVFlQRV9FTkVULCA0MSksCisKKwkvKgorCSAqIGluOiAgKHUxNilhMD1iZGYgb2YgdGFyZ2V0IHZuaWMKKwkgKiAgICAgICh1MzIpYTE9Y21kIHRvIHByb3h5CisJICogICAgICBhMi1hMTU9YXJncyB0byBjbWQgaW4gYTEKKwkgKiBvdXQ6ICh1MzIpYTA9c3RhdHVzIG9mIHByb3hpZWQgY21kCisJICogICAgICBhMS1hMTU9b3V0IGFyZ3Mgb2YgcHJveGllZCBjbWQgKi8KKwlDTURfUFJPWFlfQllfQkRGID0JX0NNREMoX0NNRF9ESVJfUlcsIF9DTURfVlRZUEVfQUxMLCA0MiksCiB9OwogCiAvKiBmbGFncyBmb3IgQ01EX09QRU4gKi8KQEAgLTIyNiw2ICsyNTMsMTIgQEAKICNkZWZpbmUgQ01EX1BGSUxURVJfUFJPTUlTQ1VPVVMJCTB4MDgKICNkZWZpbmUgQ01EX1BGSUxURVJfQUxMX01VTFRJQ0FTVAkweDEwCiAKKy8qIHJld3JpdGUgbW9kZXMgZm9yIENNRF9JR19WTEFOX1JFV1JJVEVfTU9ERSAqLworI2RlZmluZSBJR19WTEFOX1JFV1JJVEVfTU9ERV9ERUZBVUxUX1RSVU5LICAgICAgICAgICAgICAwCisjZGVmaW5lIElHX1ZMQU5fUkVXUklURV9NT0RFX1VOVEFHX0RFRkFVTFRfVkxBTiAgICAgICAgIDEKKyNkZWZpbmUgSUdfVkxBTl9SRVdSSVRFX01PREVfUFJJT1JJVFlfVEFHX0RFRkFVTFRfVkxBTiAgMgorI2RlZmluZSBJR19WTEFOX1JFV1JJVEVfTU9ERV9QQVNTX1RIUlUgICAgICAgICAgICAgICAgICAzCisKIGVudW0gdm5pY19kZXZjbWRfc3RhdHVzIHsKIAlTVEFUX05PTkUgPSAwLAogCVNUQVRfQlVTWSA9IDEgPDwgMCwJLyogY21kIGluIHByb2dyZXNzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZW5ldC5oIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2VuZXQuaAppbmRleCA4ZWViNjc1Li4zYjMyOTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZW5ldC5oCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19lbmV0LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDggQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAyMDA3IE51b3ZhIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBtYXkgcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTM1LDYgKzM1LDcgQEAKIAl1OCBpbnRyX21vZGU7CiAJY2hhciBkZXZuYW1lWzE2XTsKIAl1MzIgaW50cl90aW1lcl91c2VjOworCXUxNiBsb29wX3RhZzsKIH07CiAKICNkZWZpbmUgVkVORVRGX1RTTwkJMHgxCS8qIFRTTyBlbmFibGVkICovCkBAIC00OCw1ICs0OSw2IEBACiAjZGVmaW5lIFZFTkVURl9SU1NIQVNIX1RDUElQVjYJMHgxMDAJLyogSGFzaCBvbiBUQ1AgKyBJUHY2IGZpZWxkcyAqLwogI2RlZmluZSBWRU5FVEZfUlNTSEFTSF9JUFY2X0VYCTB4MjAwCS8qIEhhc2ggb24gSVB2NiBleHRlbmRlZCBmaWVsZHMgKi8KICNkZWZpbmUgVkVORVRGX1JTU0hBU0hfVENQSVBWNl9FWCAweDQwMAkvKiBIYXNoIG9uIFRDUCArIElQdjYgZXh0LiBmaWVsZHMgKi8KKyNkZWZpbmUgVkVORVRGX0xPT1AJCTB4ODAwCS8qIExvb3BiYWNrIGVuYWJsZWQgKi8KIAogI2VuZGlmIC8qIF9WTklDX0VOSUNfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19pbnRyLmMgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfaW50ci5jCmluZGV4IDM5MzQzMDkuLjUyYWI2MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19pbnRyLmMKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2ludHIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwOCBDaXNjbyBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDgtMjAxMCBDaXNjbyBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IDIwMDcgTnVvdmEgU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IG1heSByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMzksOCArMzksNyBAQAogCiAJaW50ci0+Y3RybCA9IHZuaWNfZGV2X2dldF9yZXModmRldiwgUkVTX1RZUEVfSU5UUl9DVFJMLCBpbmRleCk7CiAJaWYgKCFpbnRyLT5jdHJsKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGhvb2sgSU5UUlslZF0uY3RybCByZXNvdXJjZVxuIiwKLQkJCWluZGV4KTsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gaG9vayBJTlRSWyVkXS5jdHJsIHJlc291cmNlXG4iLCBpbmRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2ludHIuaCBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19pbnRyLmgKaW5kZXggMmZlNmM2My4uMDlkYzBiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2ludHIuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfaW50ci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA4IENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgMjAwNyBOdW92YSBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgbWF5IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC02MSw3ICs2MSwxMSBAQAogc3RhdGljIGlubGluZSB2b2lkIHZuaWNfaW50cl9tYXNrKHN0cnVjdCB2bmljX2ludHIgKmludHIpCiB7CiAJaW93cml0ZTMyKDEsICZpbnRyLT5jdHJsLT5tYXNrKTsKLQkodm9pZClpb3JlYWQzMigmaW50ci0+Y3RybC0+bWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHZuaWNfaW50cl9tYXNrZWQoc3RydWN0IHZuaWNfaW50ciAqaW50cikKK3sKKwlyZXR1cm4gaW9yZWFkMzIoJmludHItPmN0cmwtPm1hc2spOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdm5pY19pbnRyX3JldHVybl9jcmVkaXRzKHN0cnVjdCB2bmljX2ludHIgKmludHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfbmljLmggYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfbmljLmgKaW5kZXggY2Y4MGFiNC4uOTk1YTUwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX25pYy5oCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19uaWMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwOCBDaXNjbyBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDgtMjAxMCBDaXNjbyBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IDIwMDcgTnVvdmEgU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IG1heSByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX3Jlc291cmNlLmggYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfcmVzb3VyY2UuaAppbmRleCBiNjFjMjJhLi44MTAyODdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfcmVzb3VyY2UuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfcmVzb3VyY2UuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwOCBDaXNjbyBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDgtMjAxMCBDaXNjbyBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IDIwMDcgTnVvdmEgU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IG1heSByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX3JxLmMgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfcnEuYwppbmRleCBjYzU4MGNmLi5kYmIyYWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfcnEuYworKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfcnEuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwOCBDaXNjbyBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDgtMjAxMCBDaXNjbyBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IDIwMDcgTnVvdmEgU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IG1heSByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMzcsMjMgKzM3LDIzIEBACiAJdmRldiA9IHJxLT52ZGV2OwogCiAJZm9yIChpID0gMDsgaSA8IGJsa3M7IGkrKykgewotCQlycS0+YnVmc1tpXSA9IGt6YWxsb2MoVk5JQ19SUV9CVUZfQkxLX1NaLCBHRlBfQVRPTUlDKTsKKwkJcnEtPmJ1ZnNbaV0gPSBremFsbG9jKFZOSUNfUlFfQlVGX0JMS19TWihjb3VudCksIEdGUF9BVE9NSUMpOwogCQlpZiAoIXJxLT5idWZzW2ldKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBhbGxvYyBycV9idWZzXG4iKTsKKwkJCXByX2VycigiRmFpbGVkIHRvIGFsbG9jIHJxX2J1ZnNcbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgYmxrczsgaSsrKSB7CiAJCWJ1ZiA9IHJxLT5idWZzW2ldOwotCQlmb3IgKGogPSAwOyBqIDwgVk5JQ19SUV9CVUZfQkxLX0VOVFJJRVM7IGorKykgewotCQkJYnVmLT5pbmRleCA9IGkgKiBWTklDX1JRX0JVRl9CTEtfRU5UUklFUyArIGo7CisJCWZvciAoaiA9IDA7IGogPCBWTklDX1JRX0JVRl9CTEtfRU5UUklFUyhjb3VudCk7IGorKykgeworCQkJYnVmLT5pbmRleCA9IGkgKiBWTklDX1JRX0JVRl9CTEtfRU5UUklFUyhjb3VudCkgKyBqOwogCQkJYnVmLT5kZXNjID0gKHU4ICopcnEtPnJpbmcuZGVzY3MgKwogCQkJCXJxLT5yaW5nLmRlc2Nfc2l6ZSAqIGJ1Zi0+aW5kZXg7CiAJCQlpZiAoYnVmLT5pbmRleCArIDEgPT0gY291bnQpIHsKIAkJCQlidWYtPm5leHQgPSBycS0+YnVmc1swXTsKIAkJCQlicmVhazsKLQkJCX0gZWxzZSBpZiAoaiArIDEgPT0gVk5JQ19SUV9CVUZfQkxLX0VOVFJJRVMpIHsKKwkJCX0gZWxzZSBpZiAoaiArIDEgPT0gVk5JQ19SUV9CVUZfQkxLX0VOVFJJRVMoY291bnQpKSB7CiAJCQkJYnVmLT5uZXh0ID0gcnEtPmJ1ZnNbaSArIDFdOwogCQkJfSBlbHNlIHsKIAkJCQlidWYtPm5leHQgPSBidWYgKyAxOwpAQCAtOTQsNyArOTQsNyBAQAogCiAJcnEtPmN0cmwgPSB2bmljX2Rldl9nZXRfcmVzKHZkZXYsIFJFU19UWVBFX1JRLCBpbmRleCk7CiAJaWYgKCFycS0+Y3RybCkgewotCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBob29rIFJRWyVkXSByZXNvdXJjZVxuIiwgaW5kZXgpOworCQlwcl9lcnIoIkZhaWxlZCB0byBob29rIFJRWyVkXSByZXNvdXJjZVxuIiwgaW5kZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTExOSwxMCArMTE5LDExIEBACiAJdW5zaWduZWQgaW50IGVycm9yX2ludGVycnVwdF9vZmZzZXQpCiB7CiAJdTY0IHBhZGRyOworCXVuc2lnbmVkIGludCBjb3VudCA9IHJxLT5yaW5nLmRlc2NfY291bnQ7CiAKIAlwYWRkciA9ICh1NjQpcnEtPnJpbmcuYmFzZV9hZGRyIHwgVk5JQ19QQUREUl9UQVJHRVQ7CiAJd3JpdGVxKHBhZGRyLCAmcnEtPmN0cmwtPnJpbmdfYmFzZSk7Ci0JaW93cml0ZTMyKHJxLT5yaW5nLmRlc2NfY291bnQsICZycS0+Y3RybC0+cmluZ19zaXplKTsKKwlpb3dyaXRlMzIoY291bnQsICZycS0+Y3RybC0+cmluZ19zaXplKTsKIAlpb3dyaXRlMzIoY3FfaW5kZXgsICZycS0+Y3RybC0+Y3FfaW5kZXgpOwogCWlvd3JpdGUzMihlcnJvcl9pbnRlcnJ1cHRfZW5hYmxlLCAmcnEtPmN0cmwtPmVycm9yX2ludGVycnVwdF9lbmFibGUpOwogCWlvd3JpdGUzMihlcnJvcl9pbnRlcnJ1cHRfb2Zmc2V0LCAmcnEtPmN0cmwtPmVycm9yX2ludGVycnVwdF9vZmZzZXQpOwpAQCAtMTMyLDggKzEzMyw4IEBACiAJaW93cml0ZTMyKHBvc3RlZF9pbmRleCwgJnJxLT5jdHJsLT5wb3N0ZWRfaW5kZXgpOwogCiAJcnEtPnRvX3VzZSA9IHJxLT50b19jbGVhbiA9Ci0JCSZycS0+YnVmc1tmZXRjaF9pbmRleCAvIFZOSUNfUlFfQlVGX0JMS19FTlRSSUVTXQotCQkJW2ZldGNoX2luZGV4ICUgVk5JQ19SUV9CVUZfQkxLX0VOVFJJRVNdOworCQkmcnEtPmJ1ZnNbZmV0Y2hfaW5kZXggLyBWTklDX1JRX0JVRl9CTEtfRU5UUklFUyhjb3VudCldCisJCQlbZmV0Y2hfaW5kZXggJSBWTklDX1JRX0JVRl9CTEtfRU5UUklFUyhjb3VudCldOwogfQogCiB2b2lkIHZuaWNfcnFfaW5pdChzdHJ1Y3Qgdm5pY19ycSAqcnEsIHVuc2lnbmVkIGludCBjcV9pbmRleCwKQEAgLTE0NSw2ICsxNDYsMTEgQEAKIAkvKiBVc2UgY3VycmVudCBmZXRjaF9pbmRleCBhcyB0aGUgcmluZyBzdGFydGluZyBwb2ludCAqLwogCWZldGNoX2luZGV4ID0gaW9yZWFkMzIoJnJxLT5jdHJsLT5mZXRjaF9pbmRleCk7CiAKKwlpZiAoZmV0Y2hfaW5kZXggPT0gMHhGRkZGRkZGRikgeyAvKiBjaGVjayBmb3IgaGFyZHdhcmUgZ29uZSAgKi8KKwkJLyogSGFyZHdhcmUgc3VycHJpc2UgcmVtb3ZhbDogcmVzZXQgZmV0Y2hfaW5kZXggKi8KKwkJZmV0Y2hfaW5kZXggPSAwOworCX0KKwogCXZuaWNfcnFfaW5pdF9zdGFydChycSwgY3FfaW5kZXgsCiAJCWZldGNoX2luZGV4LCBmZXRjaF9pbmRleCwKIAkJZXJyb3JfaW50ZXJydXB0X2VuYWJsZSwKQEAgLTE3NCw3ICsxODAsNyBAQAogCQl1ZGVsYXkoMTApOwogCX0KIAotCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGRpc2FibGUgUlFbJWRdXG4iLCBycS0+aW5kZXgpOworCXByX2VycigiRmFpbGVkIHRvIGRpc2FibGUgUlFbJWRdXG4iLCBycS0+aW5kZXgpOwogCiAJcmV0dXJuIC1FVElNRURPVVQ7CiB9CkBAIC0xODQsOCArMTkwLDcgQEAKIHsKIAlzdHJ1Y3Qgdm5pY19ycV9idWYgKmJ1ZjsKIAl1MzIgZmV0Y2hfaW5kZXg7Ci0KLQlCVUdfT04oaW9yZWFkMzIoJnJxLT5jdHJsLT5lbmFibGUpKTsKKwl1bnNpZ25lZCBpbnQgY291bnQgPSBycS0+cmluZy5kZXNjX2NvdW50OwogCiAJYnVmID0gcnEtPnRvX2NsZWFuOwogCkBAIC0xOTksOSArMjA0LDE0IEBACiAKIAkvKiBVc2UgY3VycmVudCBmZXRjaF9pbmRleCBhcyB0aGUgcmluZyBzdGFydGluZyBwb2ludCAqLwogCWZldGNoX2luZGV4ID0gaW9yZWFkMzIoJnJxLT5jdHJsLT5mZXRjaF9pbmRleCk7CisKKwlpZiAoZmV0Y2hfaW5kZXggPT0gMHhGRkZGRkZGRikgeyAvKiBjaGVjayBmb3IgaGFyZHdhcmUgZ29uZSAgKi8KKwkJLyogSGFyZHdhcmUgc3VycHJpc2UgcmVtb3ZhbDogcmVzZXQgZmV0Y2hfaW5kZXggKi8KKwkJZmV0Y2hfaW5kZXggPSAwOworCX0KIAlycS0+dG9fdXNlID0gcnEtPnRvX2NsZWFuID0KLQkJJnJxLT5idWZzW2ZldGNoX2luZGV4IC8gVk5JQ19SUV9CVUZfQkxLX0VOVFJJRVNdCi0JCQlbZmV0Y2hfaW5kZXggJSBWTklDX1JRX0JVRl9CTEtfRU5UUklFU107CisJCSZycS0+YnVmc1tmZXRjaF9pbmRleCAvIFZOSUNfUlFfQlVGX0JMS19FTlRSSUVTKGNvdW50KV0KKwkJCVtmZXRjaF9pbmRleCAlIFZOSUNfUlFfQlVGX0JMS19FTlRSSUVTKGNvdW50KV07CiAJaW93cml0ZTMyKGZldGNoX2luZGV4LCAmcnEtPmN0cmwtPnBvc3RlZF9pbmRleCk7CiAKIAl2bmljX2Rldl9jbGVhcl9kZXNjX3JpbmcoJnJxLT5yaW5nKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19ycS5oIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX3JxLmgKaW5kZXggMzVlNzM2Yy4uMmRjNDhmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX3JxLmgKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX3JxLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDgsIDIwMDkgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAyMDA3IE51b3ZhIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBtYXkgcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTUyLDEyICs1MiwxNiBAQAogCXUzMiBwYWQxMDsKIH07CiAKLS8qIEJyZWFrIHRoZSB2bmljX3JxX2J1ZiBhbGxvY2F0aW9ucyBpbnRvIGJsb2NrcyBvZiA2NCBlbnRyaWVzICovCi0jZGVmaW5lIFZOSUNfUlFfQlVGX0JMS19FTlRSSUVTIDY0Ci0jZGVmaW5lIFZOSUNfUlFfQlVGX0JMS19TWiBcCi0JKFZOSUNfUlFfQlVGX0JMS19FTlRSSUVTICogc2l6ZW9mKHN0cnVjdCB2bmljX3JxX2J1ZikpCisvKiBCcmVhayB0aGUgdm5pY19ycV9idWYgYWxsb2NhdGlvbnMgaW50byBibG9ja3Mgb2YgMzIvNjQgZW50cmllcyAqLworI2RlZmluZSBWTklDX1JRX0JVRl9NSU5fQkxLX0VOVFJJRVMgMzIKKyNkZWZpbmUgVk5JQ19SUV9CVUZfREZMVF9CTEtfRU5UUklFUyA2NAorI2RlZmluZSBWTklDX1JRX0JVRl9CTEtfRU5UUklFUyhlbnRyaWVzKSBcCisJKCh1bnNpZ25lZCBpbnQpKChlbnRyaWVzIDwgVk5JQ19SUV9CVUZfREZMVF9CTEtfRU5UUklFUykgPyBcCisJVk5JQ19SUV9CVUZfTUlOX0JMS19FTlRSSUVTIDogVk5JQ19SUV9CVUZfREZMVF9CTEtfRU5UUklFUykpCisjZGVmaW5lIFZOSUNfUlFfQlVGX0JMS19TWihlbnRyaWVzKSBcCisJKFZOSUNfUlFfQlVGX0JMS19FTlRSSUVTKGVudHJpZXMpICogc2l6ZW9mKHN0cnVjdCB2bmljX3JxX2J1ZikpCiAjZGVmaW5lIFZOSUNfUlFfQlVGX0JMS1NfTkVFREVEKGVudHJpZXMpIFwKLQlESVZfUk9VTkRfVVAoZW50cmllcywgVk5JQ19SUV9CVUZfQkxLX0VOVFJJRVMpCisJRElWX1JPVU5EX1VQKGVudHJpZXMsIFZOSUNfUlFfQlVGX0JMS19FTlRSSUVTKGVudHJpZXMpKQogI2RlZmluZSBWTklDX1JRX0JVRl9CTEtTX01BWCBWTklDX1JRX0JVRl9CTEtTX05FRURFRCg0MDk2KQogCiBzdHJ1Y3Qgdm5pY19ycV9idWYgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX3Jzcy5oIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX3Jzcy5oCmluZGV4IDVmYmIzYzkuLmY2MmQxODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19yc3MuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfcnNzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDggQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAyMDA3IE51b3ZhIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBtYXkgcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19zdGF0cy5oIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX3N0YXRzLmgKaW5kZXggOWZmOTYxNC4uNzc3NTBlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX3N0YXRzLmgKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX3N0YXRzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDggQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAyMDA3IE51b3ZhIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBtYXkgcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY192aWMuYyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY192aWMuYwppbmRleCBkNzY5NzcyLi4xOTdjOWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfdmljLmMKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX3ZpYy5jCkBAIC0yNSw5ICsyNSwxMyBAQAogCiBzdHJ1Y3QgdmljX3Byb3ZpbmZvICp2aWNfcHJvdmluZm9fYWxsb2MoZ2ZwX3QgZmxhZ3MsIHU4ICpvdWksIHU4IHR5cGUpCiB7Ci0Jc3RydWN0IHZpY19wcm92aW5mbyAqdnAgPSBremFsbG9jKFZJQ19QUk9WSU5GT19NQVhfREFUQSwgZmxhZ3MpOworCXN0cnVjdCB2aWNfcHJvdmluZm8gKnZwOwogCi0JaWYgKCF2cCB8fCAhb3VpKQorCWlmICghb3VpKQorCQlyZXR1cm4gTlVMTDsKKworCXZwID0ga3phbGxvYyhWSUNfUFJPVklORk9fTUFYX0RBVEEsIGZsYWdzKTsKKwlpZiAoIXZwKQogCQlyZXR1cm4gTlVMTDsKIAogCW1lbWNweSh2cC0+b3VpLCBvdWksIHNpemVvZih2cC0+b3VpKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfdmljLmggYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfdmljLmgKaW5kZXggMDg1YzJhMjcuLjdlNDZlNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY192aWMuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfdmljLmgKQEAgLTQ0LDcgKzQ0LDcgQEAKIAkJdTE2IGxlbmd0aDsKIAkJdTggdmFsdWVbMF07CiAJfSB0bHZbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgVklDX1BST1ZJTkZPX01BWF9EQVRBCQkxMzg1CiAjZGVmaW5lIFZJQ19QUk9WSU5GT19NQVhfVExWX0RBVEEgKFZJQ19QUk9WSU5GT19NQVhfREFUQSAtIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY193cS5jIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX3dxLmMKaW5kZXggMTM3OGFmYi4uMTIyZTMzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX3dxLmMKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX3dxLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDggQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAyMDA3IE51b3ZhIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBtYXkgcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTM3LDIzICszNywyMyBAQAogCXZkZXYgPSB3cS0+dmRldjsKIAogCWZvciAoaSA9IDA7IGkgPCBibGtzOyBpKyspIHsKLQkJd3EtPmJ1ZnNbaV0gPSBremFsbG9jKFZOSUNfV1FfQlVGX0JMS19TWiwgR0ZQX0FUT01JQyk7CisJCXdxLT5idWZzW2ldID0ga3phbGxvYyhWTklDX1dRX0JVRl9CTEtfU1ooY291bnQpLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCF3cS0+YnVmc1tpXSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gYWxsb2Mgd3FfYnVmc1xuIik7CisJCQlwcl9lcnIoIkZhaWxlZCB0byBhbGxvYyB3cV9idWZzXG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IGJsa3M7IGkrKykgewogCQlidWYgPSB3cS0+YnVmc1tpXTsKLQkJZm9yIChqID0gMDsgaiA8IFZOSUNfV1FfQlVGX0JMS19FTlRSSUVTOyBqKyspIHsKLQkJCWJ1Zi0+aW5kZXggPSBpICogVk5JQ19XUV9CVUZfQkxLX0VOVFJJRVMgKyBqOworCQlmb3IgKGogPSAwOyBqIDwgVk5JQ19XUV9CVUZfQkxLX0VOVFJJRVMoY291bnQpOyBqKyspIHsKKwkJCWJ1Zi0+aW5kZXggPSBpICogVk5JQ19XUV9CVUZfQkxLX0VOVFJJRVMoY291bnQpICsgajsKIAkJCWJ1Zi0+ZGVzYyA9ICh1OCAqKXdxLT5yaW5nLmRlc2NzICsKIAkJCQl3cS0+cmluZy5kZXNjX3NpemUgKiBidWYtPmluZGV4OwogCQkJaWYgKGJ1Zi0+aW5kZXggKyAxID09IGNvdW50KSB7CiAJCQkJYnVmLT5uZXh0ID0gd3EtPmJ1ZnNbMF07CiAJCQkJYnJlYWs7Ci0JCQl9IGVsc2UgaWYgKGogKyAxID09IFZOSUNfV1FfQlVGX0JMS19FTlRSSUVTKSB7CisJCQl9IGVsc2UgaWYgKGogKyAxID09IFZOSUNfV1FfQlVGX0JMS19FTlRSSUVTKGNvdW50KSkgewogCQkJCWJ1Zi0+bmV4dCA9IHdxLT5idWZzW2kgKyAxXTsKIAkJCX0gZWxzZSB7CiAJCQkJYnVmLT5uZXh0ID0gYnVmICsgMTsKQEAgLTk0LDcgKzk0LDcgQEAKIAogCXdxLT5jdHJsID0gdm5pY19kZXZfZ2V0X3Jlcyh2ZGV2LCBSRVNfVFlQRV9XUSwgaW5kZXgpOwogCWlmICghd3EtPmN0cmwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gaG9vayBXUVslZF0gcmVzb3VyY2VcbiIsIGluZGV4KTsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gaG9vayBXUVslZF0gcmVzb3VyY2VcbiIsIGluZGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMTksMTAgKzExOSwxMSBAQAogCXVuc2lnbmVkIGludCBlcnJvcl9pbnRlcnJ1cHRfb2Zmc2V0KQogewogCXU2NCBwYWRkcjsKKwl1bnNpZ25lZCBpbnQgY291bnQgPSB3cS0+cmluZy5kZXNjX2NvdW50OwogCiAJcGFkZHIgPSAodTY0KXdxLT5yaW5nLmJhc2VfYWRkciB8IFZOSUNfUEFERFJfVEFSR0VUOwogCXdyaXRlcShwYWRkciwgJndxLT5jdHJsLT5yaW5nX2Jhc2UpOwotCWlvd3JpdGUzMih3cS0+cmluZy5kZXNjX2NvdW50LCAmd3EtPmN0cmwtPnJpbmdfc2l6ZSk7CisJaW93cml0ZTMyKGNvdW50LCAmd3EtPmN0cmwtPnJpbmdfc2l6ZSk7CiAJaW93cml0ZTMyKGZldGNoX2luZGV4LCAmd3EtPmN0cmwtPmZldGNoX2luZGV4KTsKIAlpb3dyaXRlMzIocG9zdGVkX2luZGV4LCAmd3EtPmN0cmwtPnBvc3RlZF9pbmRleCk7CiAJaW93cml0ZTMyKGNxX2luZGV4LCAmd3EtPmN0cmwtPmNxX2luZGV4KTsKQEAgLTEzMSw4ICsxMzIsOCBAQAogCWlvd3JpdGUzMigwLCAmd3EtPmN0cmwtPmVycm9yX3N0YXR1cyk7CiAKIAl3cS0+dG9fdXNlID0gd3EtPnRvX2NsZWFuID0KLQkJJndxLT5idWZzW2ZldGNoX2luZGV4IC8gVk5JQ19XUV9CVUZfQkxLX0VOVFJJRVNdCi0JCQlbZmV0Y2hfaW5kZXggJSBWTklDX1dRX0JVRl9CTEtfRU5UUklFU107CisJCSZ3cS0+YnVmc1tmZXRjaF9pbmRleCAvIFZOSUNfV1FfQlVGX0JMS19FTlRSSUVTKGNvdW50KV0KKwkJCVtmZXRjaF9pbmRleCAlIFZOSUNfV1FfQlVGX0JMS19FTlRSSUVTKGNvdW50KV07CiB9CiAKIHZvaWQgdm5pY193cV9pbml0KHN0cnVjdCB2bmljX3dxICp3cSwgdW5zaWduZWQgaW50IGNxX2luZGV4LApAQCAtMTY3LDcgKzE2OCw3IEBACiAJCXVkZWxheSgxMCk7CiAJfQogCi0JcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gZGlzYWJsZSBXUVslZF1cbiIsIHdxLT5pbmRleCk7CisJcHJfZXJyKCJGYWlsZWQgdG8gZGlzYWJsZSBXUVslZF1cbiIsIHdxLT5pbmRleCk7CiAKIAlyZXR1cm4gLUVUSU1FRE9VVDsKIH0KQEAgLTE3Nyw4ICsxNzgsNiBAQAogewogCXN0cnVjdCB2bmljX3dxX2J1ZiAqYnVmOwogCi0JQlVHX09OKGlvcmVhZDMyKCZ3cS0+Y3RybC0+ZW5hYmxlKSk7Ci0KIAlidWYgPSB3cS0+dG9fY2xlYW47CiAKIAl3aGlsZSAodm5pY193cV9kZXNjX3VzZWQod3EpID4gMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX3dxLmggYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfd3EuaAppbmRleCA5YzM0ZDQxLi45NGFjNDYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfd3EuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfd3EuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwOCBDaXNjbyBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDgtMjAxMCBDaXNjbyBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IDIwMDcgTnVvdmEgU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IG1heSByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNjAsMTIgKzYwLDE2IEBACiAJdm9pZCAqZGVzYzsKIH07CiAKLS8qIEJyZWFrIHRoZSB2bmljX3dxX2J1ZiBhbGxvY2F0aW9ucyBpbnRvIGJsb2NrcyBvZiA2NCBlbnRyaWVzICovCi0jZGVmaW5lIFZOSUNfV1FfQlVGX0JMS19FTlRSSUVTIDY0Ci0jZGVmaW5lIFZOSUNfV1FfQlVGX0JMS19TWiBcCi0JKFZOSUNfV1FfQlVGX0JMS19FTlRSSUVTICogc2l6ZW9mKHN0cnVjdCB2bmljX3dxX2J1ZikpCisvKiBCcmVhayB0aGUgdm5pY193cV9idWYgYWxsb2NhdGlvbnMgaW50byBibG9ja3Mgb2YgMzIvNjQgZW50cmllcyAqLworI2RlZmluZSBWTklDX1dRX0JVRl9NSU5fQkxLX0VOVFJJRVMgMzIKKyNkZWZpbmUgVk5JQ19XUV9CVUZfREZMVF9CTEtfRU5UUklFUyA2NAorI2RlZmluZSBWTklDX1dRX0JVRl9CTEtfRU5UUklFUyhlbnRyaWVzKSBcCisJKCh1bnNpZ25lZCBpbnQpKChlbnRyaWVzIDwgVk5JQ19XUV9CVUZfREZMVF9CTEtfRU5UUklFUykgPyBcCisJVk5JQ19XUV9CVUZfTUlOX0JMS19FTlRSSUVTIDogVk5JQ19XUV9CVUZfREZMVF9CTEtfRU5UUklFUykpCisjZGVmaW5lIFZOSUNfV1FfQlVGX0JMS19TWihlbnRyaWVzKSBcCisJKFZOSUNfV1FfQlVGX0JMS19FTlRSSUVTKGVudHJpZXMpICogc2l6ZW9mKHN0cnVjdCB2bmljX3dxX2J1ZikpCiAjZGVmaW5lIFZOSUNfV1FfQlVGX0JMS1NfTkVFREVEKGVudHJpZXMpIFwKLQlESVZfUk9VTkRfVVAoZW50cmllcywgVk5JQ19XUV9CVUZfQkxLX0VOVFJJRVMpCisJRElWX1JPVU5EX1VQKGVudHJpZXMsIFZOSUNfV1FfQlVGX0JMS19FTlRSSUVTKGVudHJpZXMpKQogI2RlZmluZSBWTklDX1dRX0JVRl9CTEtTX01BWCBWTklDX1dRX0JVRl9CTEtTX05FRURFRCg0MDk2KQogCiBzdHJ1Y3Qgdm5pY193cSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL3dxX2VuZXRfZGVzYy5oIGIvZHJpdmVycy9uZXQvZW5pYy93cV9lbmV0X2Rlc2MuaAppbmRleCA0ODM1OTZjLi5jNzAyMWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL3dxX2VuZXRfZGVzYy5oCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvd3FfZW5ldF9kZXNjLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDggQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAyMDA3IE51b3ZhIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBtYXkgcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VwaWMxMDAuYyBiL2RyaXZlcnMvbmV0L2VwaWMxMDAuYwppbmRleCA0YzI3NDY1Li41N2M4YWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lcGljMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvZXBpYzEwMC5jCkBAIC0yNzgsNyArMjc4LDYgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsJCQkvKiBQQ0kgYnVzIGxvY2F0aW9uLiAqLwogCWludCBjaGlwX2lkLCBjaGlwX2ZsYWdzOwogCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CQkJLyogTWVkaWEgc2VsZWN0aW9uIHRpbWVyLiAqLwogCWludCB0eF90aHJlc2hvbGQ7CiAJdW5zaWduZWQgY2hhciBtY19maWx0ZXJbOF07CkBAIC03NzAsNyArNzY5LDYgQEAKIHN0YXRpYyB2b2lkIGVwaWNfcGF1c2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwotCXN0cnVjdCBlcGljX3ByaXZhdGUgKmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCW5ldGlmX3N0b3BfcXVldWUgKGRldik7CiAKQEAgLTc4MSw5ICs3NzksOSBAQAogCiAJLyogVXBkYXRlIHRoZSBlcnJvciBjb3VudHMuICovCiAJaWYgKGludyhpb2FkZHIgKyBDT01NQU5EKSAhPSAweGZmZmYpIHsKLQkJZXAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gaW5iKGlvYWRkciArIE1QQ05UKTsKLQkJZXAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyArPSBpbmIoaW9hZGRyICsgQUxJQ05UKTsKLQkJZXAtPnN0YXRzLnJ4X2NyY19lcnJvcnMgKz0gaW5iKGlvYWRkciArIENSQ0NOVCk7CisJCWRldi0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycyArPSBpbmIoaW9hZGRyICsgTVBDTlQpOworCQlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyArPSBpbmIoaW9hZGRyICsgQUxJQ05UKTsKKwkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzICs9IGluYihpb2FkZHIgKyBDUkNDTlQpOwogCX0KIAogCS8qIFJlbW92ZSB0aGUgcGFja2V0cyBvbiB0aGUgUnggcXVldWUuICovCkBAIC05MDAsNyArODk4LDcgQEAKIAkJfQogCX0KIAlpZiAoaW53KGlvYWRkciArIFR4U1RBVCkgJiAweDEwKSB7CQkvKiBUeCBGSUZPIHVuZGVyZmxvdy4gKi8KLQkJZXAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKIAkJb3V0bChSZXN0YXJ0VHgsIGlvYWRkciArIENPTU1BTkQpOwogCX0gZWxzZSB7CiAJCWVwaWNfcmVzdGFydChkZXYpOwpAQCAtOTA4LDcgKzkwNiw3IEBACiAJfQogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7IC8qIHByZXZlbnQgdHggdGltZW91dCAqLwotCWVwLT5zdGF0cy50eF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCWlmICghZXAtPnR4X2Z1bGwpCiAJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KQEAgLTEwMTYsNyArMTAxNCw3IEBACiBzdGF0aWMgdm9pZCBlcGljX3R4X2Vycm9yKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBlcGljX3ByaXZhdGUgKmVwLAogCQkJICBpbnQgc3RhdHVzKQogewotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZlcC0+c3RhdHM7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmRldi0+c3RhdHM7CiAKICNpZm5kZWYgZmluYWxfdmVyc2lvbgogCS8qIFRoZXJlIHdhcyBhbiBtYWpvciBlcnJvciwgbG9nIGl0LiAqLwpAQCAtMTA1Myw5ICsxMDUxLDkgQEAKIAkJCWJyZWFrOwkvKiBJdCBzdGlsbCBoYXNuJ3QgYmVlbiBUeGVkICovCiAKIAkJaWYgKGxpa2VseSh0eHN0YXR1cyAmIDB4MDAwMSkpIHsKLQkJCWVwLT5zdGF0cy5jb2xsaXNpb25zICs9ICh0eHN0YXR1cyA+PiA4KSAmIDE1OwotCQkJZXAtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQkJCWVwLT5zdGF0cy50eF9ieXRlcyArPSBlcC0+dHhfc2tidWZmW2VudHJ5XS0+bGVuOworCQkJZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9ICh0eHN0YXR1cyA+PiA4KSAmIDE1OworCQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGVwLT50eF9za2J1ZmZbZW50cnldLT5sZW47CiAJCX0gZWxzZQogCQkJZXBpY190eF9lcnJvcihkZXYsIGVwLCB0eHN0YXR1cyk7CiAKQEAgLTExMjUsMTIgKzExMjMsMTIgQEAKIAkJCWdvdG8gb3V0OwogCiAJCS8qIEFsd2F5cyB1cGRhdGUgdGhlIGVycm9yIGNvdW50cyB0byBhdm9pZCBvdmVyaGVhZCBsYXRlci4gKi8KLQkJZXAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gaW5iKGlvYWRkciArIE1QQ05UKTsKLQkJZXAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyArPSBpbmIoaW9hZGRyICsgQUxJQ05UKTsKLQkJZXAtPnN0YXRzLnJ4X2NyY19lcnJvcnMgKz0gaW5iKGlvYWRkciArIENSQ0NOVCk7CisJCWRldi0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycyArPSBpbmIoaW9hZGRyICsgTVBDTlQpOworCQlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyArPSBpbmIoaW9hZGRyICsgQUxJQ05UKTsKKwkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzICs9IGluYihpb2FkZHIgKyBDUkNDTlQpOwogCiAJCWlmIChzdGF0dXMgJiBUeFVuZGVycnVuKSB7IC8qIFR4IEZJRk8gdW5kZXJmbG93LiAqLwotCQkJZXAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CiAJCQlvdXRsKGVwLT50eF90aHJlc2hvbGQgKz0gMTI4LCBpb2FkZHIgKyBUeFRocmVzaCk7CiAJCQkvKiBSZXN0YXJ0IHRoZSB0cmFuc21pdCBwcm9jZXNzLiAqLwogCQkJb3V0bChSZXN0YXJ0VHgsIGlvYWRkciArIENPTU1BTkQpOwpAQCAtMTE4MywxMCArMTE4MSwxMCBAQAogCQkJaWYgKHN0YXR1cyAmIDB4MjAwMCkgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBPdmVyc2l6ZWQgRXRoZXJuZXQgZnJhbWUgc3Bhbm5lZCAiCiAJCQkJCSAgICJtdWx0aXBsZSBidWZmZXJzLCBzdGF0dXMgJTQuNHghXG4iLCBkZXYtPm5hbWUsIHN0YXR1cyk7Ci0JCQkJZXAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJCX0gZWxzZSBpZiAoc3RhdHVzICYgMHgwMDA2KQogCQkJCS8qIFJ4IEZyYW1lIGVycm9ycyBhcmUgY291bnRlZCBpbiBoYXJkd2FyZS4gKi8KLQkJCQllcC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJfSBlbHNlIHsKIAkJCS8qIE1hbGxvYyB1cCBuZXcgYnVmZmVyLCBjb21wYXRpYmxlIHdpdGggbmV0LTJlLiAqLwogCQkJLyogT21pdCB0aGUgZm91ciBvY3RldCBDUkMgZnJvbSB0aGUgbGVuZ3RoLiAqLwpAQCAtMTIyMyw4ICsxMjIxLDggQEAKIAkJCX0KIAkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwotCQkJZXAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJCWVwLT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOworCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAJCX0KIAkJd29ya19kb25lKys7CiAJCWVudHJ5ID0gKCsrZXAtPmN1cl9yeCkgJSBSWF9SSU5HX1NJWkU7CkBAIC0xMjU5LDcgKzEyNTcsNyBAQAogCWlmIChzdGF0dXMgPT0gRXBpY1JlbW92ZWQpCiAJCXJldHVybjsKIAlpZiAoc3RhdHVzICYgUnhPdmVyZmxvdykgCS8qIE1pc3NlZCBhIFJ4IGZyYW1lLiAqLwotCQllcC0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJaWYgKHN0YXR1cyAmIChSeE92ZXJmbG93IHwgUnhGdWxsKSkKIAkJb3V0dyhSeFF1ZXVlZCwgaW9hZGRyICsgQ09NTUFORCk7CiB9CkBAIC0xMzU3LDE3ICsxMzU1LDE2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZXBpY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZXBpY19wcml2YXRlICplcCA9IG5ldGRldl9wcml2KGRldik7CiAJbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJLyogVXBkYXRlIHRoZSBlcnJvciBjb3VudHMuICovCi0JCWVwLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzICs9IGluYihpb2FkZHIgKyBNUENOVCk7Ci0JCWVwLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgKz0gaW5iKGlvYWRkciArIEFMSUNOVCk7Ci0JCWVwLT5zdGF0cy5yeF9jcmNfZXJyb3JzICs9IGluYihpb2FkZHIgKyBDUkNDTlQpOworCQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gaW5iKGlvYWRkciArIE1QQ05UKTsKKwkJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgKz0gaW5iKGlvYWRkciArIEFMSUNOVCk7CisJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycyArPSBpbmIoaW9hZGRyICsgQ1JDQ05UKTsKIAl9CiAKLQlyZXR1cm4gJmVwLT5zdGF0czsKKwlyZXR1cm4gJmRldi0+c3RhdHM7CiB9CiAKIC8qIFNldCBvciBjbGVhciB0aGUgbXVsdGljYXN0IGZpbHRlciBmb3IgdGhpcyBhZGFwdG9yLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoMTZpLmMgYi9kcml2ZXJzL25ldC9ldGgxNmkuYwppbmRleCA4NzQ5NzNmLi4xMGUzOWYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGgxNmkuYworKysgYi9kcml2ZXJzL25ldC9ldGgxNmkuYwpAQCAtMTQ0Miw4ICsxNDQyLDEwIEBACiAJCWRldi0+aWZfcG9ydCA9IGV0aDE2aV9wYXJzZV9tZWRpYXR5cGUobWVkaWF0eXBlW3RoaXNfZGV2XSk7CiAKIAkJaWYoaW9bdGhpc19kZXZdID09IDApIHsKLQkJCWlmKHRoaXNfZGV2ICE9IDApIC8qIE9ubHkgYXV0b3Byb2JlIDFzdCBvbmUgKi8KKwkJCWlmICh0aGlzX2RldiAhPSAwKSB7IC8qIE9ubHkgYXV0b3Byb2JlIDFzdCBvbmUgKi8KKwkJCQlmcmVlX25ldGRldihkZXYpOwogCQkJCWJyZWFrOworCQkJfQogCiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgImV0aDE2aS5jOiBQcmVzZW50bHkgYXV0b3Byb2JpbmcgKG5vdCByZWNvbW1lbmRlZCkgZm9yIGEgc2luZ2xlIGNhcmQuXG4iKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRob2MuYyBiL2RyaXZlcnMvbmV0L2V0aG9jLmMKaW5kZXggNmVkMmRmMS4uNmQ2NTNjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRob2MuYworKysgYi9kcml2ZXJzL25ldC9ldGhvYy5jCkBAIC0xODAsOSArMTgwLDkgQEAKICAqIEBkdHlfdHg6CWxhc3QgYnVmZmVyIGFjdHVhbGx5IHNlbnQKICAqIEBudW1fcng6CW51bWJlciBvZiByZWNlaXZlIGJ1ZmZlcnMKICAqIEBjdXJfcng6CWN1cnJlbnQgcmVjZWl2ZSBidWZmZXIKKyAqIEB2bWE6ICAgICAgICBwb2ludGVyIHRvIGFycmF5IG9mIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3NlcyBmb3IgYnVmZmVycwogICogQG5ldGRldjoJcG9pbnRlciB0byBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBuYXBpOglOQVBJIHN0cnVjdHVyZQotICogQHN0YXRzOgluZXR3b3JrIGRldmljZSBzdGF0aXN0aWNzCiAgKiBAbXNnX2VuYWJsZToJZGV2aWNlIHN0YXRlIGZsYWdzCiAgKiBAcnhfbG9jazoJcmVjZWl2ZSBsb2NrCiAgKiBAbG9jazoJZGV2aWNlIGxvY2sKQEAgLTIwMyw5ICsyMDMsMTAgQEAKIAl1bnNpZ25lZCBpbnQgbnVtX3J4OwogCXVuc2lnbmVkIGludCBjdXJfcng7CiAKKwl2b2lkKiogdm1hOworCiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAl1MzIgbXNnX2VuYWJsZTsKIAogCXNwaW5sb2NrX3QgcnhfbG9jazsKQEAgLTI4NSwxOCArMjg2LDIyIEBACiAJZXRob2Nfd3JpdGUoZGV2LCBNT0RFUiwgbW9kZSk7CiB9CiAKLXN0YXRpYyBpbnQgZXRob2NfaW5pdF9yaW5nKHN0cnVjdCBldGhvYyAqZGV2KQorc3RhdGljIGludCBldGhvY19pbml0X3Jpbmcoc3RydWN0IGV0aG9jICpkZXYsIHVuc2lnbmVkIGxvbmcgbWVtX3N0YXJ0KQogewogCXN0cnVjdCBldGhvY19iZCBiZDsKIAlpbnQgaTsKKwl2b2lkKiB2bWE7CiAKIAlkZXYtPmN1cl90eCA9IDA7CiAJZGV2LT5kdHlfdHggPSAwOwogCWRldi0+Y3VyX3J4ID0gMDsKIAorCWV0aG9jX3dyaXRlKGRldiwgVFhfQkRfTlVNLCBkZXYtPm51bV90eCk7CisKIAkvKiBzZXR1cCB0cmFuc21pc3Npb24gYnVmZmVycyAqLwotCWJkLmFkZHIgPSB2aXJ0X3RvX3BoeXMoZGV2LT5tZW1iYXNlKTsKKwliZC5hZGRyID0gbWVtX3N0YXJ0OwogCWJkLnN0YXQgPSBUWF9CRF9JUlEgfCBUWF9CRF9DUkM7CisJdm1hID0gZGV2LT5tZW1iYXNlOwogCiAJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX3R4OyBpKyspIHsKIAkJaWYgKGkgPT0gZGV2LT5udW1fdHggLSAxKQpAQCAtMzA0LDYgKzMwOSw5IEBACiAKIAkJZXRob2Nfd3JpdGVfYmQoZGV2LCBpLCAmYmQpOwogCQliZC5hZGRyICs9IEVUSE9DX0JVRlNJWjsKKworCQlkZXYtPnZtYVtpXSA9IHZtYTsKKwkJdm1hICs9IEVUSE9DX0JVRlNJWjsKIAl9CiAKIAliZC5zdGF0ID0gUlhfQkRfRU1QVFkgfCBSWF9CRF9JUlE7CkBAIC0zMTQsNiArMzIyLDkgQEAKIAogCQlldGhvY193cml0ZV9iZChkZXYsIGRldi0+bnVtX3R4ICsgaSwgJmJkKTsKIAkJYmQuYWRkciArPSBFVEhPQ19CVUZTSVo7CisKKwkJZGV2LT52bWFbZGV2LT5udW1fdHggKyBpXSA9IHZtYTsKKwkJdm1hICs9IEVUSE9DX0JVRlNJWjsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTM1NCwzOSArMzY1LDM5IEBACiAKIAlpZiAoYmQtPnN0YXQgJiBSWF9CRF9UTCkgewogCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwgIlJYOiBmcmFtZSB0b28gbG9uZ1xuIik7Ci0JCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQluZXRkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJcmV0Kys7CiAJfQogCiAJaWYgKGJkLT5zdGF0ICYgUlhfQkRfU0YpIHsKIAkJZGV2X2VycigmbmV0ZGV2LT5kZXYsICJSWDogZnJhbWUgdG9vIHNob3J0XG4iKTsKLQkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCW5ldGRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQlyZXQrKzsKIAl9CiAKIAlpZiAoYmQtPnN0YXQgJiBSWF9CRF9ETikgewogCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwgIlJYOiBkcmliYmxlIG5pYmJsZVxuIik7Ci0JCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CisJCW5ldGRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CiAJfQogCiAJaWYgKGJkLT5zdGF0ICYgUlhfQkRfQ1JDKSB7CiAJCWRldl9lcnIoJm5ldGRldi0+ZGV2LCAiUlg6IHdyb25nIENSQ1xuIik7Ci0JCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQluZXRkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKIAkJcmV0Kys7CiAJfQogCiAJaWYgKGJkLT5zdGF0ICYgUlhfQkRfT1IpIHsKIAkJZGV2X2VycigmbmV0ZGV2LT5kZXYsICJSWDogb3ZlcnJ1blxuIik7Ci0JCWRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJbmV0ZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwogCQlyZXQrKzsKIAl9CiAKIAlpZiAoYmQtPnN0YXQgJiBSWF9CRF9NSVNTKQotCQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKKwkJbmV0ZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CiAKIAlpZiAoYmQtPnN0YXQgJiBSWF9CRF9MQykgewogCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwgIlJYOiBsYXRlIGNvbGxpc2lvblxuIik7Ci0JCWRldi0+c3RhdHMuY29sbGlzaW9ucysrOworCQluZXRkZXYtPnN0YXRzLmNvbGxpc2lvbnMrKzsKIAkJcmV0Kys7CiAJfQogCkBAIC00MTUsMTggKzQyNiwxOCBAQAogCQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYl9pcF9hbGlnbihkZXYsIHNpemUpOwogCiAJCQlpZiAobGlrZWx5KHNrYikpIHsKLQkJCQl2b2lkICpzcmMgPSBwaHlzX3RvX3ZpcnQoYmQuYWRkcik7CisJCQkJdm9pZCAqc3JjID0gcHJpdi0+dm1hW2VudHJ5XTsKIAkJCQltZW1jcHlfZnJvbWlvKHNrYl9wdXQoc2tiLCBzaXplKSwgc3JjLCBzaXplKTsKIAkJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwotCQkJCXByaXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJCQlwcml2LT5zdGF0cy5yeF9ieXRlcyArPSBzaXplOworCQkJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQkJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2l6ZTsKIAkJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCQkJfSBlbHNlIHsKIAkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJCQlkZXZfd2FybigmZGV2LT5kZXYsICJsb3cgb24gbWVtb3J5IC0gIgogCQkJCQkJCSJwYWNrZXQgZHJvcHBlZFxuIik7CiAKLQkJCQlwcml2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTQ0NywzMCArNDU4LDMwIEBACiAKIAlpZiAoYmQtPnN0YXQgJiBUWF9CRF9MQykgewogCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwgIlRYOiBsYXRlIGNvbGxpc2lvblxuIik7Ci0JCWRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOworCQluZXRkZXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKIAl9CiAKIAlpZiAoYmQtPnN0YXQgJiBUWF9CRF9STCkgewogCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwgIlRYOiByZXRyYW5zbWl0IGxpbWl0XG4iKTsKLQkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQluZXRkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJfQogCiAJaWYgKGJkLT5zdGF0ICYgVFhfQkRfVVIpIHsKIAkJZGV2X2VycigmbmV0ZGV2LT5kZXYsICJUWDogdW5kZXJydW5cbiIpOwotCQlkZXYtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisJCW5ldGRldi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKIAl9CiAKIAlpZiAoYmQtPnN0YXQgJiBUWF9CRF9DUykgewogCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwgIlRYOiBjYXJyaWVyIHNlbnNlIGxvc3RcbiIpOwotCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCW5ldGRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAl9CiAKIAlpZiAoYmQtPnN0YXQgJiBUWF9CRF9TVEFUUykKLQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJbmV0ZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAotCWRldi0+c3RhdHMuY29sbGlzaW9ucyArPSAoYmQtPnN0YXQgPj4gNCkgJiAweGY7Ci0JZGV2LT5zdGF0cy50eF9ieXRlcyArPSBiZC0+c3RhdCA+PiAxNjsKLQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwluZXRkZXYtPnN0YXRzLmNvbGxpc2lvbnMgKz0gKGJkLT5zdGF0ID4+IDQpICYgMHhmOworCW5ldGRldi0+c3RhdHMudHhfYnl0ZXMgKz0gYmQtPnN0YXQgPj4gMTY7CisJbmV0ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUwMSw3ICs1MTIsNyBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZXRob2NfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2lkOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7CiAJc3RydWN0IGV0aG9jICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MzIgcGVuZGluZzsKIApAQCAtNTE2LDcgKzUyNyw3IEBACiAKIAlpZiAocGVuZGluZyAmIElOVF9NQVNLX0JVU1kpIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJwYWNrZXQgZHJvcHBlZFxuIik7Ci0JCXByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJfQogCiAJaWYgKHBlbmRpbmcgJiBJTlRfTUFTS19SWCkgewpAQCAtNjAwLDggKzYxMSwxMSBAQAogCiAJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7CiAJCXUzMiBzdGF0ID0gZXRob2NfcmVhZChwcml2LCBNSUlTVEFUVVMpOwotCQlpZiAoIShzdGF0ICYgTUlJU1RBVFVTX0JVU1kpKQorCQlpZiAoIShzdGF0ICYgTUlJU1RBVFVTX0JVU1kpKSB7CisJCQkvKiByZXNldCBNSUkgY29tbWFuZCByZWdpc3RlciAqLworCQkJZXRob2Nfd3JpdGUocHJpdiwgTUlJQ09NTUFORCwgMCk7CiAJCQlyZXR1cm4gMDsKKwkJfQogCiAJCXNjaGVkdWxlKCk7CiAJfQpAQCAtNjE4LDI1ICs2MzIsMTYgQEAKIHsKIH0KIAotc3RhdGljIGludCBldGhvY19tZGlvX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBldGhvY19tZGlvX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGV0aG9jICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5OwotCWludCBpOworCWludCBlcnI7CiAKLQlmb3IgKGkgPSAwOyBpIDwgUEhZX01BWF9BRERSOyBpKyspIHsKLQkJcGh5ID0gcHJpdi0+bWRpby0+cGh5X21hcFtpXTsKLQkJaWYgKHBoeSkgewotCQkJaWYgKHByaXYtPnBoeV9pZCAhPSAtMSkgewotCQkJCS8qIGF0dGFjaCB0byBzcGVjaWZpZWQgUEhZICovCi0JCQkJaWYgKHByaXYtPnBoeV9pZCA9PSBwaHktPmFkZHIpCi0JCQkJCWJyZWFrOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBhdXRvc2VsZWN0IFBIWSBpZiBub25lIHdhcyBzcGVjaWZpZWQgKi8KLQkJCQlpZiAocGh5LT5hZGRyICE9IDApCi0JCQkJCWJyZWFrOwotCQkJfQotCQl9CisJaWYgKHByaXYtPnBoeV9pZCAhPSAtMSkgeworCQlwaHkgPSBwcml2LT5tZGlvLT5waHlfbWFwW3ByaXYtPnBoeV9pZF07CisJfSBlbHNlIHsKKwkJcGh5ID0gcGh5X2ZpbmRfZmlyc3QocHJpdi0+bWRpbyk7CiAJfQogCiAJaWYgKCFwaHkpIHsKQEAgLTY0NCwxMSArNjQ5LDExIEBACiAJCXJldHVybiAtRU5YSU87CiAJfQogCi0JcGh5ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmcGh5LT5kZXYpLCBldGhvY19tZGlvX3BvbGwsIDAsCisJZXJyID0gcGh5X2Nvbm5lY3RfZGlyZWN0KGRldiwgcGh5LCBldGhvY19tZGlvX3BvbGwsIDAsCiAJCQlQSFlfSU5URVJGQUNFX01PREVfR01JSSk7Ci0JaWYgKElTX0VSUihwaHkpKSB7CisJaWYgKGVycikgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgImNvdWxkIG5vdCBhdHRhY2ggdG8gUEhZXG4iKTsKLQkJcmV0dXJuIFBUUl9FUlIocGh5KTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKIAlwcml2LT5waHkgPSBwaHk7CkBAIC02NTgsOCArNjYzLDYgQEAKIHN0YXRpYyBpbnQgZXRob2Nfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBldGhvYyAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgaW50IG1pbl90eCA9IDI7Ci0JdW5zaWduZWQgaW50IG51bV9iZDsKIAlpbnQgcmV0OwogCiAJcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGV0aG9jX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCkBAIC02NjcsMTQgKzY3MCw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCS8qIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIFRYL1JYIGJ1ZmZlcnMsIG1heGltdW0gMTI4IHN1cHBvcnRlZCAqLwotCW51bV9iZCA9IG1pbl90KHVuc2lnbmVkIGludCwKLQkJMTI4LCAoZGV2LT5tZW1fZW5kIC0gZGV2LT5tZW1fc3RhcnQgKyAxKSAvIEVUSE9DX0JVRlNJWik7Ci0JcHJpdi0+bnVtX3R4ID0gbWF4KG1pbl90eCwgbnVtX2JkIC8gNCk7Ci0JcHJpdi0+bnVtX3J4ID0gbnVtX2JkIC0gcHJpdi0+bnVtX3R4OwotCWV0aG9jX3dyaXRlKHByaXYsIFRYX0JEX05VTSwgcHJpdi0+bnVtX3R4KTsKLQotCWV0aG9jX2luaXRfcmluZyhwcml2KTsKKwlldGhvY19pbml0X3JpbmcocHJpdiwgZGV2LT5tZW1fc3RhcnQpOwogCWV0aG9jX3Jlc2V0KHByaXYpOwogCiAJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkgewpAQCAtNzM0LDcgKzczMCw3IEBACiAJCXBoeSA9IHByaXYtPnBoeTsKIAl9CiAKLQlyZXR1cm4gcGh5X21paV9pb2N0bChwaHksIG1kaW8sIGNtZCk7CisJcmV0dXJuIHBoeV9taWlfaW9jdGwocGh5LCBpZnIsIGNtZCk7CiB9CiAKIHN0YXRpYyBpbnQgZXRob2NfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZm1hcCAqbWFwKQpAQCAtODEyLDggKzgwOCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZXRob2Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZXRob2MgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiAmcHJpdi0+c3RhdHM7CisJcmV0dXJuICZkZXYtPnN0YXRzOwogfQogCiBzdGF0aWMgbmV0ZGV2X3R4X3QgZXRob2Nfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtODI0LDcgKzgxOSw3IEBACiAJdm9pZCAqZGVzdDsKIAogCWlmICh1bmxpa2VseShza2ItPmxlbiA+IEVUSE9DX0JVRlNJWikpIHsKLQkJcHJpdi0+c3RhdHMudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtODM4LDcgKzgzMyw3IEBACiAJZWxzZQogCQliZC5zdGF0ICY9IH5UWF9CRF9QQUQ7CiAKLQlkZXN0ID0gcGh5c190b192aXJ0KGJkLmFkZHIpOworCWRlc3QgPSBwcml2LT52bWFbZW50cnldOwogCW1lbWNweV90b2lvKGRlc3QsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCiAJYmQuc3RhdCAmPSB+KFRYX0JEX1NUQVRTIHwgVFhfQkRfTEVOX01BU0spOwpAQCAtODc2LDcgKzg3MSw3IEBACiAgKiBldGhvY19wcm9iZSgpIC0gaW5pdGlhbGl6ZSBPcGVuQ29yZXMgZXRoZXJuZXQgTUFDCiAgKiBwZGV2OglwbGF0Zm9ybSBkZXZpY2UKICAqLwotc3RhdGljIGludCBldGhvY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgZXRob2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IE5VTEw7CkBAIC04ODQsNiArODc5LDcgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKm1lbSA9IE5VTEw7CiAJc3RydWN0IGV0aG9jICpwcml2ID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgcGh5OworCWludCBudW1fYmQ7CiAJaW50IHJldCA9IDA7CiAKIAkvKiBhbGxvY2F0ZSBuZXR3b3JraW5nIGRldmljZSAqLwpAQCAtOTY1LDcgKzk2MSw3IEBACiAJCX0KIAl9IGVsc2UgewogCQkvKiBBbGxvY2F0ZSBidWZmZXIgbWVtb3J5ICovCi0JCXByaXYtPm1lbWJhc2UgPSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwKKwkJcHJpdi0+bWVtYmFzZSA9IGRtYW1fYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwKIAkJCWJ1ZmZlcl9zaXplLCAodm9pZCAqKSZuZXRkZXYtPm1lbV9zdGFydCwKIAkJCUdGUF9LRVJORUwpOwogCQlpZiAoIXByaXYtPm1lbWJhc2UpIHsKQEAgLTk3OCw2ICs5NzQsMTggQEAKIAkJcHJpdi0+ZG1hX2FsbG9jID0gYnVmZmVyX3NpemU7CiAJfQogCisJLyogY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgVFgvUlggYnVmZmVycywgbWF4aW11bSAxMjggc3VwcG9ydGVkICovCisJbnVtX2JkID0gbWluX3QodW5zaWduZWQgaW50LAorCQkxMjgsIChuZXRkZXYtPm1lbV9lbmQgLSBuZXRkZXYtPm1lbV9zdGFydCArIDEpIC8gRVRIT0NfQlVGU0laKTsKKwlwcml2LT5udW1fdHggPSBtYXgoMiwgbnVtX2JkIC8gNCk7CisJcHJpdi0+bnVtX3J4ID0gbnVtX2JkIC0gcHJpdi0+bnVtX3R4OworCisJcHJpdi0+dm1hID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIG51bV9iZCpzaXplb2Yodm9pZCopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYtPnZtYSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKwogCS8qIEFsbG93IHRoZSBwbGF0Zm9ybSBzZXR1cCBjb2RlIHRvIHBhc3MgaW4gYSBNQUMgYWRkcmVzcy4gKi8KIAlpZiAocGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpIHsKIAkJc3RydWN0IGV0aG9jX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0KQEAgLTEwNjMsMjEgKzEwNzEsNiBAQAogCWtmcmVlKHByaXYtPm1kaW8tPmlycSk7CiAJbWRpb2J1c19mcmVlKHByaXYtPm1kaW8pOwogZnJlZToKLQlpZiAocHJpdikgewotCQlpZiAocHJpdi0+ZG1hX2FsbG9jKQotCQkJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgcHJpdi0+ZG1hX2FsbG9jLCBwcml2LT5tZW1iYXNlLAotCQkJCQkgIG5ldGRldi0+bWVtX3N0YXJ0KTsKLQkJZWxzZSBpZiAocHJpdi0+bWVtYmFzZSkKLQkJCWRldm1faW91bm1hcCgmcGRldi0+ZGV2LCBwcml2LT5tZW1iYXNlKTsKLQkJaWYgKHByaXYtPmlvYmFzZSkKLQkJCWRldm1faW91bm1hcCgmcGRldi0+ZGV2LCBwcml2LT5pb2Jhc2UpOwotCX0KLQlpZiAobWVtKQotCQlkZXZtX3JlbGVhc2VfbWVtX3JlZ2lvbigmcGRldi0+ZGV2LCBtZW0tPnN0YXJ0LAotCQkJCQltZW0tPmVuZCAtIG1lbS0+c3RhcnQgKyAxKTsKLQlpZiAobW1pbykKLQkJZGV2bV9yZWxlYXNlX21lbV9yZWdpb24oJnBkZXYtPmRldiwgbW1pby0+c3RhcnQsCi0JCQkJCW1taW8tPmVuZCAtIG1taW8tPnN0YXJ0ICsgMSk7CiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKIG91dDoKIAlyZXR1cm4gcmV0OwpAQCAtMTA4Nyw3ICsxMDgwLDcgQEAKICAqIGV0aG9jX3JlbW92ZSgpIC0gc2h1dGRvd24gT3BlbkNvcmVzIGV0aGVybmV0IE1BQwogICogQHBkZXY6CXBsYXRmb3JtIGRldmljZQogICovCi1zdGF0aWMgaW50IGV0aG9jX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgZXRob2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBldGhvYyAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CkBAIC0xMTA0LDE3ICsxMDk3LDYgQEAKIAkJCWtmcmVlKHByaXYtPm1kaW8tPmlycSk7CiAJCQltZGlvYnVzX2ZyZWUocHJpdi0+bWRpbyk7CiAJCX0KLQkJaWYgKHByaXYtPmRtYV9hbGxvYykKLQkJCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIHByaXYtPmRtYV9hbGxvYywgcHJpdi0+bWVtYmFzZSwKLQkJCQluZXRkZXYtPm1lbV9zdGFydCk7Ci0JCWVsc2UgewotCQkJZGV2bV9pb3VubWFwKCZwZGV2LT5kZXYsIHByaXYtPm1lbWJhc2UpOwotCQkJZGV2bV9yZWxlYXNlX21lbV9yZWdpb24oJnBkZXYtPmRldiwgbmV0ZGV2LT5tZW1fc3RhcnQsCi0JCQkJbmV0ZGV2LT5tZW1fZW5kIC0gbmV0ZGV2LT5tZW1fc3RhcnQgKyAxKTsKLQkJfQotCQlkZXZtX2lvdW5tYXAoJnBkZXYtPmRldiwgcHJpdi0+aW9iYXNlKTsKLQkJZGV2bV9yZWxlYXNlX21lbV9yZWdpb24oJnBkZXYtPmRldiwgbmV0ZGV2LT5iYXNlX2FkZHIsCi0JCQlwcml2LT5pb19yZWdpb25fc2l6ZSk7CiAJCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiAJCWZyZWVfbmV0ZGV2KG5ldGRldik7CiAJfQpAQCAtMTEzOSw3ICsxMTIxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZXRob2NfZHJpdmVyID0gewogCS5wcm9iZSAgID0gZXRob2NfcHJvYmUsCi0JLnJlbW92ZSAgPSBldGhvY19yZW1vdmUsCisJLnJlbW92ZSAgPSBfX2RldmV4aXRfcChldGhvY19yZW1vdmUpLAogCS5zdXNwZW5kID0gZXRob2Nfc3VzcGVuZCwKIAkucmVzdW1lICA9IGV0aG9jX3Jlc3VtZSwKIAkuZHJpdmVyICA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZlYWxueC5jIGIvZHJpdmVycy9uZXQvZmVhbG54LmMKaW5kZXggMTVmNGY4ZC4uZDdlOGY2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZmVhbG54LmMKKysrIGIvZHJpdmVycy9uZXQvZmVhbG54LmMKQEAgLTM4Miw4ICszODIsNiBAQAogCiAJc3BpbmxvY2tfdCBsb2NrOwogCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7Ci0KIAkvKiBNZWRpYSBtb25pdG9yaW5nIHRpbWVyLiAqLwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwogCkBAIC0xMjM0LDcgKzEyMzIsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5wLT5sb2NrLCBmbGFncyk7CiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsgLyogcHJldmVudCB0eCB0aW1lb3V0ICovCi0JbnAtPnN0YXRzLnR4X2Vycm9ycysrOworCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOyAvKiBvciAuLl9zdGFydF8uLiA/PyAqLwogfQogCkBAIC0xNDc5LDEwICsxNDc3LDExIEBACiAKIAkJaWYgKGludHJfc3RhdHVzICYgQ05UT1ZGKSB7CiAJCQkvKiBtaXNzZWQgcGt0cyAqLwotCQkJbnAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gaW9yZWFkMzIoaW9hZGRyICsgVEFMTFkpICYgMHg3ZmZmOworCQkJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzICs9CisJCQkJaW9yZWFkMzIoaW9hZGRyICsgVEFMTFkpICYgMHg3ZmZmOwogCiAJCQkvKiBjcmMgZXJyb3IgKi8KLQkJCW5wLT5zdGF0cy5yeF9jcmNfZXJyb3JzICs9CisJCQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMgKz0KIAkJCSAgICAoaW9yZWFkMzIoaW9hZGRyICsgVEFMTFkpICYgMHg3ZmZmMDAwMCkgPj4gMTY7CiAJCX0KIApAQCAtMTUxMywzMCArMTUxMiwzMCBAQAogCiAJCQlpZiAoIShucC0+Y3J2YWx1ZSAmIENSX1dfRU5IKSkgewogCQkJCWlmICh0eF9zdGF0dXMgJiAoQ1NMIHwgTEMgfCBFQyB8IFVERiB8IEhGKSkgewotCQkJCQlucC0+c3RhdHMudHhfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCQkJCWlmICh0eF9zdGF0dXMgJiBFQykKLQkJCQkJCW5wLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQkJCQkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCQkJCQlpZiAodHhfc3RhdHVzICYgQ1NMKQotCQkJCQkJbnAtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCQkJCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAJCQkJCWlmICh0eF9zdGF0dXMgJiBMQykKLQkJCQkJCW5wLT5zdGF0cy50eF93aW5kb3dfZXJyb3JzKys7CisJCQkJCQlkZXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKIAkJCQkJaWYgKHR4X3N0YXR1cyAmIFVERikKLQkJCQkJCW5wLT5zdGF0cy50eF9maWZvX2Vycm9ycysrOworCQkJCQkJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCQkJCQlpZiAoKHR4X3N0YXR1cyAmIEhGKSAmJiBucC0+bWlpLmZ1bGxfZHVwbGV4ID09IDApCi0JCQkJCQlucC0+c3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycysrOworCQkJCQkJZGV2LT5zdGF0cy50eF9oZWFydGJlYXRfZXJyb3JzKys7CiAKIAkJCQl9IGVsc2UgewotCQkJCQlucC0+c3RhdHMudHhfYnl0ZXMgKz0KKwkJCQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPQogCQkJCQkgICAgKCh0eF9jb250cm9sICYgUEtUU01hc2spID4+IFBLVFNTaGlmdCk7CiAKLQkJCQkJbnAtPnN0YXRzLmNvbGxpc2lvbnMgKz0KKwkJCQkJZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9CiAJCQkJCSAgICAoKHR4X3N0YXR1cyAmIE5DUk1hc2spID4+IE5DUlNoaWZ0KTsKLQkJCQkJbnAtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJCQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCQkJfQogCQkJfSBlbHNlIHsKLQkJCQlucC0+c3RhdHMudHhfYnl0ZXMgKz0KKwkJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9CiAJCQkJICAgICgodHhfY29udHJvbCAmIFBLVFNNYXNrKSA+PiBQS1RTU2hpZnQpOwotCQkJCW5wLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCQl9CiAKIAkJCS8qIEZyZWUgdGhlIG9yaWdpbmFsIHNrYi4gKi8KQEAgLTE1NjQsMTAgKzE1NjMsMTIgQEAKIAkJCWxvbmcgZGF0YTsKIAogCQkJZGF0YSA9IGlvcmVhZDMyKGlvYWRkciArIFRTUik7Ci0JCQlucC0+c3RhdHMudHhfZXJyb3JzICs9IChkYXRhICYgMHhmZjAwMDAwMCkgPj4gMjQ7Ci0JCQlucC0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgKz0gKGRhdGEgJiAweGZmMDAwMDAwKSA+PiAyNDsKLQkJCW5wLT5zdGF0cy50eF93aW5kb3dfZXJyb3JzICs9IChkYXRhICYgMHgwMGZmMDAwMCkgPj4gMTY7Ci0JCQlucC0+c3RhdHMuY29sbGlzaW9ucyArPSAoZGF0YSAmIDB4MDAwMGZmZmYpOworCQkJZGV2LT5zdGF0cy50eF9lcnJvcnMgKz0gKGRhdGEgJiAweGZmMDAwMDAwKSA+PiAyNDsKKwkJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgKz0KKwkJCQkoZGF0YSAmIDB4ZmYwMDAwMDApID4+IDI0OworCQkJZGV2LT5zdGF0cy50eF93aW5kb3dfZXJyb3JzICs9CisJCQkJKGRhdGEgJiAweDAwZmYwMDAwKSA+PiAxNjsKKwkJCWRldi0+c3RhdHMuY29sbGlzaW9ucyArPSAoZGF0YSAmIDB4MDAwMGZmZmYpOwogCQl9CiAKIAkJaWYgKC0tYm9ndXNjbnQgPCAwKSB7CkBAIC0xNTkzLDEwICsxNTk0LDExIEBACiAKIAkvKiByZWFkIHRoZSB0YWxseSBjb3VudGVycyAqLwogCS8qIG1pc3NlZCBwa3RzICovCi0JbnAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gaW9yZWFkMzIoaW9hZGRyICsgVEFMTFkpICYgMHg3ZmZmOworCWRldi0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycyArPSBpb3JlYWQzMihpb2FkZHIgKyBUQUxMWSkgJiAweDdmZmY7CiAKIAkvKiBjcmMgZXJyb3IgKi8KLQlucC0+c3RhdHMucnhfY3JjX2Vycm9ycyArPSAoaW9yZWFkMzIoaW9hZGRyICsgVEFMTFkpICYgMHg3ZmZmMDAwMCkgPj4gMTY7CisJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzICs9CisJCShpb3JlYWQzMihpb2FkZHIgKyBUQUxMWSkgJiAweDdmZmYwMDAwKSA+PiAxNjsKIAogCWlmIChkZWJ1ZykKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBleGl0aW5nIGludGVycnVwdCwgc3RhdHVzPSUjNC40eC5cbiIsCkBAIC0xNjM1LDEzICsxNjM3LDEzIEBACiAJCQkJCSAgICAgICAiJXM6IFJlY2VpdmUgZXJyb3IsIFJ4IHN0YXR1cyAlOC44eC5cbiIsCiAJCQkJCSAgICAgICBkZXYtPm5hbWUsIHJ4X3N0YXR1cyk7CiAKLQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7CS8qIGVuZCBvZiBhIHBhY2tldC4gKi8KKwkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwkvKiBlbmQgb2YgYSBwYWNrZXQuICovCiAJCQkJaWYgKHJ4X3N0YXR1cyAmIChMT05HIHwgUlVOVCkpCi0JCQkJCW5wLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQkJCWlmIChyeF9zdGF0dXMgJiBSWEVSKQotCQkJCQlucC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CiAJCQkJaWYgKHJ4X3N0YXR1cyAmIENSQykKLQkJCQkJbnAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJCQl9IGVsc2UgewogCQkJCWludCBuZWVkX3RvX3Jlc2V0ID0gMDsKIAkJCQlpbnQgZGVzbm8gPSAwOwpAQCAtMTY2Nyw3ICsxNjY5LDcgQEAKIAkJCQlpZiAobmVlZF90b19yZXNldCA9PSAwKSB7CiAJCQkJCWludCBpOwogCi0JCQkJCW5wLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCiAJCQkJCS8qIGZyZWUgYWxsIHJ4IGRlc2NyaXB0b3JzIHJlbGF0ZWQgdGhpcyBsb25nIHBrdCAqLwogCQkJCQlmb3IgKGkgPSAwOyBpIDwgZGVzbm87ICsraSkgewpAQCAtMTczMyw4ICsxNzM1LDggQEAKIAkJCX0KIAkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAJCQluZXRpZl9yeChza2IpOwotCQkJbnAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJCW5wLT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOworCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAJCX0KIAogCQlucC0+Y3VyX3J4ID0gbnAtPmN1cl9yeC0+bmV4dF9kZXNjX2xvZ2ljYWw7CkBAIC0xNzU0LDExICsxNzU2LDEzIEBACiAKIAkvKiBUaGUgY2hpcCBvbmx5IG5lZWQgcmVwb3J0IGZyYW1lIHNpbGVudGx5IGRyb3BwZWQuICovCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQlucC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycyArPSBpb3JlYWQzMihpb2FkZHIgKyBUQUxMWSkgJiAweDdmZmY7Ci0JCW5wLT5zdGF0cy5yeF9jcmNfZXJyb3JzICs9IChpb3JlYWQzMihpb2FkZHIgKyBUQUxMWSkgJiAweDdmZmYwMDAwKSA+PiAxNjsKKwkJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzICs9CisJCQlpb3JlYWQzMihpb2FkZHIgKyBUQUxMWSkgJiAweDdmZmY7CisJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycyArPQorCQkJKGlvcmVhZDMyKGlvYWRkciArIFRBTExZKSAmIDB4N2ZmZjAwMDApID4+IDE2OwogCX0KIAotCXJldHVybiAmbnAtPnN0YXRzOworCXJldHVybiAmZGV2LT5zdGF0czsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWMuYyBiL2RyaXZlcnMvbmV0L2ZlYy5jCmluZGV4IGVkZmZmOTIuLjc2OGI4NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlYy5jCisrKyBiL2RyaXZlcnMvbmV0L2ZlYy5jCkBAIC0xMTgsNiArMTE4LDggQEAKICNkZWZpbmUgRkVDX0VORVRfTUlJCSgodWludCkweDAwODAwMDAwKQkvKiBNSUkgaW50ZXJydXB0ICovCiAjZGVmaW5lIEZFQ19FTkVUX0VCRVJSCSgodWludCkweDAwNDAwMDAwKQkvKiBTRE1BIGJ1cyBlcnJvciAqLwogCisjZGVmaW5lIEZFQ19ERUZBVUxUX0lNQVNLIChGRUNfRU5FVF9UWEYgfCBGRUNfRU5FVF9SWEYgfCBGRUNfRU5FVF9NSUkpCisKIC8qIFRoZSBGRUMgc3RvcmVzIGRlc3Qvc3JjL3R5cGUsIGRhdGEsIGFuZCBjaGVja3N1bSBmb3IgcmVjZWl2ZSBwYWNrZXRzLgogICovCiAjZGVmaW5lIFBLVF9NQVhCVUZfU0laRQkJMTUxOApAQCAtMTg3LDYgKzE4OSw3IEBACiAJaW50CWluZGV4OwogCWludAlsaW5rOwogCWludAlmdWxsX2R1cGxleDsKKwlzdHJ1Y3QJY29tcGxldGlvbiBtZGlvX2RvbmU7CiB9OwogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZmVjX2VuZXRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKiBkZXZfaWQpOwpAQCAtMjA1LDEyICsyMDgsMTIgQEAKICNkZWZpbmUgRkVDX01NRlJfVEEJCSgyIDw8IDE2KQogI2RlZmluZSBGRUNfTU1GUl9EQVRBKHYpCSh2ICYgMHhmZmZmKQogCi0jZGVmaW5lIEZFQ19NSUlfVElNRU9VVAkJMTAwMDAKKyNkZWZpbmUgRkVDX01JSV9USU1FT1VUCQkxMDAwIC8qIHVzICovCiAKIC8qIFRyYW5zbWl0dGVyIHRpbWVvdXQgKi8KICNkZWZpbmUgVFhfVElNRU9VVCAoMiAqIEhaKQogCi1zdGF0aWMgaW50CitzdGF0aWMgbmV0ZGV2X3R4X3QKIGZlY19lbmV0X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTMzNCw2ICszMzcsMTEgQEAKIAkJCXJldCA9IElSUV9IQU5ETEVEOwogCQkJZmVjX2VuZXRfdHgoZGV2KTsKIAkJfQorCisJCWlmIChpbnRfZXZlbnRzICYgRkVDX0VORVRfTUlJKSB7CisJCQlyZXQgPSBJUlFfSEFORExFRDsKKwkJCWNvbXBsZXRlKCZmZXAtPm1kaW9fZG9uZSk7CisJCX0KIAl9IHdoaWxlIChpbnRfZXZlbnRzKTsKIAogCXJldHVybiByZXQ7CkBAIC02MDgsMTggKzYxNiwxMyBAQAogCQlwaHlfcHJpbnRfc3RhdHVzKHBoeV9kZXYpOwogfQogCi0vKgotICogTk9URTogYSBNSUkgdHJhbnNhY3Rpb24gaXMgZHVyaW5nIGFyb3VuZCAyNSB1cywgc28gcG9sbGluZyBpdC4uLgotICovCiBzdGF0aWMgaW50IGZlY19lbmV0X21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKQogewogCXN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXAgPSBidXMtPnByaXY7Ci0JaW50IHRpbWVvdXQgPSBGRUNfTUlJX1RJTUVPVVQ7CisJdW5zaWduZWQgbG9uZyB0aW1lX2xlZnQ7CiAKIAlmZXAtPm1paV90aW1lb3V0ID0gMDsKLQotCS8qIGNsZWFyIE1JSSBlbmQgb2YgdHJhbnNmZXIgYml0Ki8KLQl3cml0ZWwoRkVDX0VORVRfTUlJLCBmZXAtPmh3cCArIEZFQ19JRVZFTlQpOworCWluaXRfY29tcGxldGlvbigmZmVwLT5tZGlvX2RvbmUpOwogCiAJLyogc3RhcnQgYSByZWFkIG9wICovCiAJd3JpdGVsKEZFQ19NTUZSX1NUIHwgRkVDX01NRlJfT1BfUkVBRCB8CkBAIC02MjcsMTMgKzYzMCwxMiBAQAogCQlGRUNfTU1GUl9UQSwgZmVwLT5od3AgKyBGRUNfTUlJX0RBVEEpOwogCiAJLyogd2FpdCBmb3IgZW5kIG9mIHRyYW5zZmVyICovCi0Jd2hpbGUgKCEocmVhZGwoZmVwLT5od3AgKyBGRUNfSUVWRU5UKSAmIEZFQ19FTkVUX01JSSkpIHsKLQkJY3B1X3JlbGF4KCk7Ci0JCWlmICh0aW1lb3V0LS0gPCAwKSB7Ci0JCQlmZXAtPm1paV90aW1lb3V0ID0gMTsKLQkJCXByaW50ayhLRVJOX0VSUiAiRkVDOiBNRElPIHJlYWQgdGltZW91dFxuIik7Ci0JCQlyZXR1cm4gLUVUSU1FRE9VVDsKLQkJfQorCXRpbWVfbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmZmVwLT5tZGlvX2RvbmUsCisJCQl1c2Vjc190b19qaWZmaWVzKEZFQ19NSUlfVElNRU9VVCkpOworCWlmICh0aW1lX2xlZnQgPT0gMCkgeworCQlmZXAtPm1paV90aW1lb3V0ID0gMTsKKwkJcHJpbnRrKEtFUk5fRVJSICJGRUM6IE1ESU8gcmVhZCB0aW1lb3V0XG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CiAJfQogCiAJLyogcmV0dXJuIHZhbHVlICovCkBAIC02NDQsMTIgKzY0NiwxMCBAQAogCQkJICAgdTE2IHZhbHVlKQogewogCXN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXAgPSBidXMtPnByaXY7Ci0JaW50IHRpbWVvdXQgPSBGRUNfTUlJX1RJTUVPVVQ7CisJdW5zaWduZWQgbG9uZyB0aW1lX2xlZnQ7CiAKIAlmZXAtPm1paV90aW1lb3V0ID0gMDsKLQotCS8qIGNsZWFyIE1JSSBlbmQgb2YgdHJhbnNmZXIgYml0Ki8KLQl3cml0ZWwoRkVDX0VORVRfTUlJLCBmZXAtPmh3cCArIEZFQ19JRVZFTlQpOworCWluaXRfY29tcGxldGlvbigmZmVwLT5tZGlvX2RvbmUpOwogCiAJLyogc3RhcnQgYSByZWFkIG9wICovCiAJd3JpdGVsKEZFQ19NTUZSX1NUIHwgRkVDX01NRlJfT1BfUkVBRCB8CkBAIC02NTgsMTMgKzY1OCwxMiBAQAogCQlmZXAtPmh3cCArIEZFQ19NSUlfREFUQSk7CiAKIAkvKiB3YWl0IGZvciBlbmQgb2YgdHJhbnNmZXIgKi8KLQl3aGlsZSAoIShyZWFkbChmZXAtPmh3cCArIEZFQ19JRVZFTlQpICYgRkVDX0VORVRfTUlJKSkgewotCQljcHVfcmVsYXgoKTsKLQkJaWYgKHRpbWVvdXQtLSA8IDApIHsKLQkJCWZlcC0+bWlpX3RpbWVvdXQgPSAxOwotCQkJcHJpbnRrKEtFUk5fRVJSICJGRUM6IE1ESU8gd3JpdGUgdGltZW91dFxuIik7Ci0JCQlyZXR1cm4gLUVUSU1FRE9VVDsKLQkJfQorCXRpbWVfbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmZmVwLT5tZGlvX2RvbmUsCisJCQl1c2Vjc190b19qaWZmaWVzKEZFQ19NSUlfVElNRU9VVCkpOworCWlmICh0aW1lX2xlZnQgPT0gMCkgeworCQlmZXAtPm1paV90aW1lb3V0ID0gMTsKKwkJcHJpbnRrKEtFUk5fRVJSICJGRUM6IE1ESU8gd3JpdGUgdGltZW91dFxuIik7CisJCXJldHVybiAtRVRJTUVET1VUOwogCX0KIAogCXJldHVybiAwOwpAQCAtNjc5LDMwICs2NzgsMjQgQEAKIHsKIAlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5X2RldiA9IE5VTEw7Ci0JaW50IHBoeV9hZGRyOworCWludCByZXQ7CiAKIAlmZXAtPnBoeV9kZXYgPSBOVUxMOwogCiAJLyogZmluZCB0aGUgZmlyc3QgcGh5ICovCi0JZm9yIChwaHlfYWRkciA9IDA7IHBoeV9hZGRyIDwgUEhZX01BWF9BRERSOyBwaHlfYWRkcisrKSB7Ci0JCWlmIChmZXAtPm1paV9idXMtPnBoeV9tYXBbcGh5X2FkZHJdKSB7Ci0JCQlwaHlfZGV2ID0gZmVwLT5taWlfYnVzLT5waHlfbWFwW3BoeV9hZGRyXTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCisJcGh5X2RldiA9IHBoeV9maW5kX2ZpcnN0KGZlcC0+bWlpX2J1cyk7CiAJaWYgKCFwaHlfZGV2KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIFBIWSBmb3VuZFxuIiwgZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJLyogYXR0YWNoIHRoZSBtYWMgdG8gdGhlIHBoeSAqLwotCXBoeV9kZXYgPSBwaHlfY29ubmVjdChkZXYsIGRldl9uYW1lKCZwaHlfZGV2LT5kZXYpLAorCXJldCA9IHBoeV9jb25uZWN0X2RpcmVjdChkZXYsIHBoeV9kZXYsCiAJCQkgICAgICZmZWNfZW5ldF9hZGp1c3RfbGluaywgMCwKIAkJCSAgICAgUEhZX0lOVEVSRkFDRV9NT0RFX01JSSk7Ci0JaWYgKElTX0VSUihwaHlfZGV2KSkgeworCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogQ291bGQgbm90IGF0dGFjaCB0byBQSFlcbiIsIGRldi0+bmFtZSk7Ci0JCXJldHVybiBQVFJfRVJSKHBoeV9kZXYpOworCQlyZXR1cm4gcmV0OwogCX0KIAogCS8qIG1hc2sgd2l0aCBNQUMgc3VwcG9ydGVkIGZlYXR1cmVzICovCkBAIC04MzQsNyArODI3LDcgQEAKIAlpZiAoIXBoeWRldikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXR1cm4gcGh5X21paV9pb2N0bChwaHlkZXYsIGlmX21paShycSksIGNtZCk7CisJcmV0dXJuIHBoeV9taWlfaW9jdGwocGh5ZGV2LCBycSwgY21kKTsKIH0KIAogc3RhdGljIHZvaWQgZmVjX2VuZXRfZnJlZV9idWZmZXJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0xMjIyLDcgKzEyMTUsNyBAQAogCXdyaXRlbCgwLCBmZXAtPmh3cCArIEZFQ19SX0RFU19BQ1RJVkUpOwogCiAJLyogRW5hYmxlIGludGVycnVwdHMgd2Ugd2lzaCB0byBzZXJ2aWNlICovCi0Jd3JpdGVsKEZFQ19FTkVUX1RYRiB8IEZFQ19FTkVUX1JYRiwgZmVwLT5od3AgKyBGRUNfSU1BU0spOworCXdyaXRlbChGRUNfREVGQVVMVF9JTUFTSywgZmVwLT5od3AgKyBGRUNfSU1BU0spOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTI0MSwxMSArMTIzNCw4IEBACiAJLyogV2hhY2sgYSByZXNldC4gIFdlIHNob3VsZCB3YWl0IGZvciB0aGlzLiAqLwogCXdyaXRlbCgxLCBmZXAtPmh3cCArIEZFQ19FQ05UUkwpOwogCXVkZWxheSgxMCk7Ci0KLQkvKiBDbGVhciBvdXRzdGFuZGluZyBNSUkgY29tbWFuZCBpbnRlcnJ1cHRzLiAqLwotCXdyaXRlbChGRUNfRU5FVF9NSUksIGZlcC0+aHdwICsgRkVDX0lFVkVOVCk7Ci0KIAl3cml0ZWwoZmVwLT5waHlfc3BlZWQsIGZlcC0+aHdwICsgRkVDX01JSV9TUEVFRCk7CisJd3JpdGVsKEZFQ19ERUZBVUxUX0lNQVNLLCBmZXAtPmh3cCArIEZFQ19JTUFTSyk7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0CkBAIC0xMzY1LDEwICsxMzU1LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQKLWZlY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorZmVjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXA7CiAKIAlpZiAobmRldikgewpAQCAtMTM4MSw5ICsxMzcyLDkgQEAKIH0KIAogc3RhdGljIGludAotZmVjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitmZWNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwOwogCiAJaWYgKG5kZXYpIHsKQEAgLTEzOTUsMTUgKzEzODYsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGZlY19wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBmZWNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGZlY19yZXN1bWUsCisJLmZyZWV6ZQkJPSBmZWNfc3VzcGVuZCwKKwkudGhhdwkJPSBmZWNfcmVzdW1lLAorCS5wb3dlcm9mZgk9IGZlY19zdXNwZW5kLAorCS5yZXN0b3JlCT0gZmVjX3Jlc3VtZSwKK307CisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZmVjX2RyaXZlciA9IHsKIAkuZHJpdmVyCT0gewotCQkubmFtZSAgICA9ICJmZWMiLAotCQkub3duZXIJID0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gImZlYyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0JPSAmZmVjX3BtX29wcywKKyNlbmRpZgogCX0sCi0JLnByb2JlICAgPSBmZWNfcHJvYmUsCi0JLnJlbW92ZSAgPSBfX2RldmV4aXRfcChmZWNfZHJ2X3JlbW92ZSksCi0JLnN1c3BlbmQgPSBmZWNfc3VzcGVuZCwKLQkucmVzdW1lICA9IGZlY19yZXN1bWUsCisJLnByb2JlCT0gZmVjX3Byb2JlLAorCS5yZW1vdmUJPSBfX2RldmV4aXRfcChmZWNfZHJ2X3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVjX21wYzUyeHguYyBiL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4LmMKaW5kZXggMjVlNmNjNi4uZDFhNWIxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZmVjX21wYzUyeHguYworKysgYi9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eC5jCkBAIC04MjYsNyArODI2LDcgQEAKIAlpZiAoIXByaXYtPnBoeWRldikKIAkJcmV0dXJuIC1FTk9UU1VQUDsKIAotCXJldHVybiBwaHlfbWlpX2lvY3RsKHByaXYtPnBoeWRldiwgaWZfbWlpKHJxKSwgY21kKTsKKwlyZXR1cm4gcGh5X21paV9pb2N0bChwcml2LT5waHlkZXYsIHJxLCBjbWQpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1wYzUyeHhfZmVjX25ldGRldl9vcHMgPSB7CkBAIC04NzUsMTcgKzg3NSwyMSBAQAogCWlmIChydikgewogCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUgIjogIgogCQkJCSJFcnJvciB3aGlsZSBwYXJzaW5nIGRldmljZSBub2RlIHJlc291cmNlXG4iICk7Ci0JCXJldHVybiBydjsKKwkJZ290byBlcnJfbmV0ZGV2OwogCX0KIAlpZiAoKG1lbS5lbmQgLSBtZW0uc3RhcnQgKyAxKSA8IHNpemVvZihzdHJ1Y3QgbXBjNTJ4eF9mZWMpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBEUklWRVJfTkFNRQogCQkJIiAtIGludmFsaWQgcmVzb3VyY2Ugc2l6ZSAoJWx4IDwgJXgpLCBjaGVjayBtcGM1Mnh4X2RldmljZXMuY1xuIiwKIAkJCSh1bnNpZ25lZCBsb25nKShtZW0uZW5kIC0gbWVtLnN0YXJ0ICsgMSksIHNpemVvZihzdHJ1Y3QgbXBjNTJ4eF9mZWMpKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJ2ID0gLUVJTlZBTDsKKwkJZ290byBlcnJfbmV0ZGV2OwogCX0KIAotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKG1lbS5zdGFydCwgc2l6ZW9mKHN0cnVjdCBtcGM1Mnh4X2ZlYyksIERSSVZFUl9OQU1FKSkKLQkJcmV0dXJuIC1FQlVTWTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihtZW0uc3RhcnQsIHNpemVvZihzdHJ1Y3QgbXBjNTJ4eF9mZWMpLAorCQkJCURSSVZFUl9OQU1FKSkgeworCQlydiA9IC1FQlVTWTsKKwkJZ290byBlcnJfbmV0ZGV2OworCX0KIAogCS8qIEluaXQgZXRoZXIgbmRldiB3aXRoIHdoYXQgd2UgaGF2ZSAqLwogCW5kZXYtPm5ldGRldl9vcHMJPSAmbXBjNTJ4eF9mZWNfbmV0ZGV2X29wczsKQEAgLTkwMSw3ICs5MDUsNyBAQAogCiAJaWYgKCFwcml2LT5mZWMpIHsKIAkJcnYgPSAtRU5PTUVNOwotCQlnb3RvIHByb2JlX2Vycm9yOworCQlnb3RvIGVycl9tZW1fcmVnaW9uOwogCX0KIAogCS8qIEJlc3Rjb21tIGluaXQgKi8KQEAgLTkxNCw3ICs5MTgsNyBAQAogCWlmICghcHJpdi0+cnhfZG1hdHNrIHx8ICFwcml2LT50eF9kbWF0c2spIHsKIAkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FICI6IENhbiBub3QgaW5pdCBTRE1BIHRhc2tzXG4iICk7CiAJCXJ2ID0gLUVOT01FTTsKLQkJZ290byBwcm9iZV9lcnJvcjsKKwkJZ290byBlcnJfcnhfdHhfZG1hdHNrOwogCX0KIAogCS8qIEdldCB0aGUgSVJRIHdlIG5lZWQgb25lIGJ5IG9uZSAqLwpAQCAtOTY2LDMzICs5NzAsMjUgQEAKIAogCXJ2ID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwogCWlmIChydiA8IDApCi0JCWdvdG8gcHJvYmVfZXJyb3I7CisJCWdvdG8gZXJyX25vZGU7CiAKIAkvKiBXZSdyZSBkb25lICEgKi8KIAlkZXZfc2V0X2RydmRhdGEoJm9wLT5kZXYsIG5kZXYpOwogCiAJcmV0dXJuIDA7CiAKLQotCS8qIEVycm9yIGhhbmRsaW5nIC0gZnJlZSBldmVyeXRoaW5nIHRoYXQgbWlnaHQgYmUgYWxsb2NhdGVkICovCi1wcm9iZV9lcnJvcjoKLQotCWlmIChwcml2LT5waHlfbm9kZSkKLQkJb2Zfbm9kZV9wdXQocHJpdi0+cGh5X25vZGUpOwotCXByaXYtPnBoeV9ub2RlID0gTlVMTDsKLQorZXJyX25vZGU6CisJb2Zfbm9kZV9wdXQocHJpdi0+cGh5X25vZGUpOwogCWlycV9kaXNwb3NlX21hcHBpbmcobmRldi0+aXJxKTsKLQorZXJyX3J4X3R4X2RtYXRzazoKIAlpZiAocHJpdi0+cnhfZG1hdHNrKQogCQliY29tX2ZlY19yeF9yZWxlYXNlKHByaXYtPnJ4X2RtYXRzayk7CiAJaWYgKHByaXYtPnR4X2RtYXRzaykKIAkJYmNvbV9mZWNfdHhfcmVsZWFzZShwcml2LT50eF9kbWF0c2spOwotCi0JaWYgKHByaXYtPmZlYykKLQkJaW91bm1hcChwcml2LT5mZWMpOwotCisJaW91bm1hcChwcml2LT5mZWMpOworZXJyX21lbV9yZWdpb246CiAJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS5zdGFydCwgc2l6ZW9mKHN0cnVjdCBtcGM1Mnh4X2ZlYykpOwotCitlcnJfbmV0ZGV2OgogCWZyZWVfbmV0ZGV2KG5kZXYpOwogCiAJcmV0dXJuIHJ2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVjX21wYzUyeHhfcGh5LmMgYi9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eF9waHkuYwppbmRleCAwMDZmNjRkLi5kYmFmNzJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eF9waHkuYworKysgYi9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eF9waHkuYwpAQCAtMjksMTUgKzI5LDE0IEBACiAJCWludCByZWcsIHUzMiB2YWx1ZSkKIHsKIAlzdHJ1Y3QgbXBjNTJ4eF9mZWNfbWRpb19wcml2ICpwcml2ID0gYnVzLT5wcml2OwotCXN0cnVjdCBtcGM1Mnh4X2ZlYyBfX2lvbWVtICpmZWM7CisJc3RydWN0IG1wYzUyeHhfZmVjIF9faW9tZW0gKmZlYyA9IHByaXYtPnJlZ3M7CiAJaW50IHRyaWVzID0gMzsKIAogCXZhbHVlIHw9IChwaHlfaWQgPDwgRkVDX01JSV9EQVRBX1BBX1NISUZUKSAmIEZFQ19NSUlfREFUQV9QQV9NU0s7CiAJdmFsdWUgfD0gKHJlZyA8PCBGRUNfTUlJX0RBVEFfUkFfU0hJRlQpICYgRkVDX01JSV9EQVRBX1JBX01TSzsKIAotCWZlYyA9IHByaXYtPnJlZ3M7CiAJb3V0X2JlMzIoJmZlYy0+aWV2ZW50LCBGRUNfSUVWRU5UX01JSSk7Ci0Jb3V0X2JlMzIoJnByaXYtPnJlZ3MtPm1paV9kYXRhLCB2YWx1ZSk7CisJb3V0X2JlMzIoJmZlYy0+bWlpX2RhdGEsIHZhbHVlKTsKIAogCS8qIHdhaXQgZm9yIGl0IHRvIGZpbmlzaCwgdGhpcyB0YWtlcyBhYm91dCAyMyB1cyBvbiBsaXRlNTIwMGIgKi8KIAl3aGlsZSAoIShpbl9iZTMyKCZmZWMtPmlldmVudCkgJiBGRUNfSUVWRU5UX01JSSkgJiYgLS10cmllcykKQEAgLTQ3LDcgKzQ2LDcgQEAKIAkJcmV0dXJuIC1FVElNRURPVVQ7CiAKIAlyZXR1cm4gdmFsdWUgJiBGRUNfTUlJX0RBVEFfT1BfUkQgPwotCQlpbl9iZTMyKCZwcml2LT5yZWdzLT5taWlfZGF0YSkgJiBGRUNfTUlJX0RBVEFfREFUQU1TSyA6IDA7CisJCWluX2JlMzIoJmZlYy0+bWlpX2RhdGEpICYgRkVDX01JSV9EQVRBX0RBVEFNU0sgOiAwOwogfQogCiBzdGF0aWMgaW50IG1wYzUyeHhfZmVjX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnKQpAQCAtNjksOSArNjgsOCBAQAogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvZi0+ZGV2Lm9mX25vZGU7CiAJc3RydWN0IG1paV9idXMgKmJ1czsKIAlzdHJ1Y3QgbXBjNTJ4eF9mZWNfbWRpb19wcml2ICpwcml2OwotCXN0cnVjdCByZXNvdXJjZSByZXMgPSB7fTsKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzOwogCWludCBlcnI7Ci0JaW50IGk7CiAKIAlidXMgPSBtZGlvYnVzX2FsbG9jKCk7CiAJaWYgKGJ1cyA9PSBOVUxMKQpAQCAtOTMsNyArOTEsNyBAQAogCWVyciA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyZXMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZyZWU7Ci0JcHJpdi0+cmVncyA9IGlvcmVtYXAocmVzLnN0YXJ0LCByZXMuZW5kIC0gcmVzLnN0YXJ0ICsgMSk7CisJcHJpdi0+cmVncyA9IGlvcmVtYXAocmVzLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZyZXMpKTsKIAlpZiAocHJpdi0+cmVncyA9PSBOVUxMKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X2ZyZWU7CkBAIC0xMTgsMTAgKzExNiw2IEBACiAgb3V0X3VubWFwOgogCWlvdW5tYXAocHJpdi0+cmVncyk7CiAgb3V0X2ZyZWU6Ci0JZm9yIChpPTA7IGk8UEhZX01BWF9BRERSOyBpKyspCi0JCWlmIChidXMtPmlycVtpXSAhPSBQSFlfUE9MTCkKLQkJCWlycV9kaXNwb3NlX21hcHBpbmcoYnVzLT5pcnFbaV0pOwotCWtmcmVlKGJ1cy0+aXJxKTsKIAlrZnJlZShwcml2KTsKIAltZGlvYnVzX2ZyZWUoYnVzKTsKIApAQCAtMTMzLDIzICsxMjcsMTYgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmb2YtPmRldjsKIAlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IG1wYzUyeHhfZmVjX21kaW9fcHJpdiAqcHJpdiA9IGJ1cy0+cHJpdjsKLQlpbnQgaTsKIAogCW1kaW9idXNfdW5yZWdpc3RlcihidXMpOwogCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwotCiAJaW91bm1hcChwcml2LT5yZWdzKTsKLQlmb3IgKGk9MDsgaTxQSFlfTUFYX0FERFI7IGkrKykKLQkJaWYgKGJ1cy0+aXJxW2ldICE9IFBIWV9QT0xMKQotCQkJaXJxX2Rpc3Bvc2VfbWFwcGluZyhidXMtPmlycVtpXSk7CiAJa2ZyZWUocHJpdik7Ci0Ja2ZyZWUoYnVzLT5pcnEpOwogCW1kaW9idXNfZnJlZShidXMpOwogCiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjNTJ4eF9mZWNfbWRpb19tYXRjaFtdID0gewogCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1kaW8iLCB9LAogCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtbWRpbyIsIH0sCkBAIC0xNzEsNSArMTU4LDQgQEAKIC8qIGxldCBmZWMgZHJpdmVyIGNhbGwgaXQsIHNpbmNlIHRoaXMgaGFzIHRvIGJlIHJlZ2lzdGVyZWQgYmVmb3JlIGl0ICovCiBFWFBPUlRfU1lNQk9MX0dQTChtcGM1Mnh4X2ZlY19tZGlvX2RyaXZlcik7CiAKLQogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwppbmRleCAyNjhlYTRkLi40ZGEwNWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYworKysgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwpAQCAtODksOCArODksMTAgQEAKICNkZWZpbmUgREVWX0hBU19NU0lfWCAgICAgICAgICAgICAgMHgwMDAwMDgwICAvKiBkZXZpY2Ugc3VwcG9ydHMgTVNJLVggKi8KICNkZWZpbmUgREVWX0hBU19QT1dFUl9DTlRSTCAgICAgICAgMHgwMDAwMTAwICAvKiBkZXZpY2Ugc3VwcG9ydHMgcG93ZXIgc2F2aW5ncyAqLwogI2RlZmluZSBERVZfSEFTX1NUQVRJU1RJQ1NfVjEgICAgICAweDAwMDAyMDAgIC8qIGRldmljZSBzdXBwb3J0cyBodyBzdGF0aXN0aWNzIHZlcnNpb24gMSAqLwotI2RlZmluZSBERVZfSEFTX1NUQVRJU1RJQ1NfVjIgICAgICAweDAwMDA2MDAgIC8qIGRldmljZSBzdXBwb3J0cyBodyBzdGF0aXN0aWNzIHZlcnNpb24gMiAqLwotI2RlZmluZSBERVZfSEFTX1NUQVRJU1RJQ1NfVjMgICAgICAweDAwMDBlMDAgIC8qIGRldmljZSBzdXBwb3J0cyBodyBzdGF0aXN0aWNzIHZlcnNpb24gMyAqLworI2RlZmluZSBERVZfSEFTX1NUQVRJU1RJQ1NfVjIgICAgICAweDAwMDA0MDAgIC8qIGRldmljZSBzdXBwb3J0cyBodyBzdGF0aXN0aWNzIHZlcnNpb24gMiAqLworI2RlZmluZSBERVZfSEFTX1NUQVRJU1RJQ1NfVjMgICAgICAweDAwMDA4MDAgIC8qIGRldmljZSBzdXBwb3J0cyBodyBzdGF0aXN0aWNzIHZlcnNpb24gMyAqLworI2RlZmluZSBERVZfSEFTX1NUQVRJU1RJQ1NfVjEyICAgICAweDAwMDA2MDAgIC8qIGRldmljZSBzdXBwb3J0cyBodyBzdGF0aXN0aWNzIHZlcnNpb24gMSBhbmQgMiAqLworI2RlZmluZSBERVZfSEFTX1NUQVRJU1RJQ1NfVjEyMyAgICAweDAwMDBlMDAgIC8qIGRldmljZSBzdXBwb3J0cyBodyBzdGF0aXN0aWNzIHZlcnNpb24gMSwgMiwgYW5kIDMgKi8KICNkZWZpbmUgREVWX0hBU19URVNUX0VYVEVOREVEICAgICAgMHgwMDAxMDAwICAvKiBkZXZpY2Ugc3VwcG9ydHMgZXh0ZW5kZWQgZGlhZ25vc3RpYyB0ZXN0ICovCiAjZGVmaW5lIERFVl9IQVNfTUdNVF9VTklUICAgICAgICAgIDB4MDAwMjAwMCAgLyogZGV2aWNlIHN1cHBvcnRzIG1hbmFnZW1lbnQgdW5pdCAqLwogI2RlZmluZSBERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiAgICAweDAwMDQwMDAgIC8qIGRldmljZSBzdXBwb3J0cyBjb3JyZWN0IG1hYyBhZGRyZXNzIG9yZGVyICovCkBAIC0yNDY4LDcgKzI0NzAsNyBAQAogCXN0cnVjdCByaW5nX2Rlc2NfZXgqIG9yaWdfZ2V0X3R4ID0gbnAtPmdldF90eC5leDsKIAogCXdoaWxlICgobnAtPmdldF90eC5leCAhPSBucC0+cHV0X3R4LmV4KSAmJgotCSAgICAgICAhKChmbGFncyA9IGxlMzJfdG9fY3B1KG5wLT5nZXRfdHguZXgtPmZsYWdsZW4pKSAmIE5WX1RYX1ZBTElEKSAmJgorCSAgICAgICAhKChmbGFncyA9IGxlMzJfdG9fY3B1KG5wLT5nZXRfdHguZXgtPmZsYWdsZW4pKSAmIE5WX1RYMl9WQUxJRCkgJiYKIAkgICAgICAgKHR4X3dvcmsgPCBsaW1pdCkpIHsKIAogCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl90eF9kb25lX29wdGltaXplZDogZmxhZ3MgMHgleC5cbiIsCkBAIC02MDY3LDExMSArNjA2OSwxMTEgQEAKIAl9LAogCXsJLyogTUNQNTUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKDB4MTBERSwgMHgwMzcyKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWHxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9ORUVEX1RYX0xJTUlUfERFVl9ORUVEX01TSV9GSVgsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19WTEFOfERFVl9IQVNfTVNJfERFVl9IQVNfTVNJX1h8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YxMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX05FRURfVFhfTElNSVR8REVWX05FRURfTVNJX0ZJWCwKIAl9LAogCXsJLyogTUNQNTUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKDB4MTBERSwgMHgwMzczKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWHxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9ORUVEX1RYX0xJTUlUfERFVl9ORUVEX01TSV9GSVgsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19WTEFOfERFVl9IQVNfTVNJfERFVl9IQVNfTVNJX1h8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YxMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX05FRURfVFhfTElNSVR8REVWX05FRURfTVNJX0ZJWCwKIAl9LAogCXsJLyogTUNQNjEgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKDB4MTBERSwgMHgwM0U1KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9NU0lfRklYLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjEyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9NU0lfRklYLAogCX0sCiAJewkvKiBNQ1A2MSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoMHgxMERFLCAweDAzRTYpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX01TSV9GSVgsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMTJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX01TSV9GSVgsCiAJfSwKIAl7CS8qIE1DUDYxIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRSgweDEwREUsIDB4MDNFRSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX05FRURfTVNJX0ZJWCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YxMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX05FRURfTVNJX0ZJWCwKIAl9LAogCXsJLyogTUNQNjEgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKDB4MTBERSwgMHgwM0VGKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9NU0lfRklYLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjEyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9NU0lfRklYLAogCX0sCiAJewkvKiBNQ1A2NSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoMHgxMERFLCAweDA0NTApLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFfERFVl9ORUVEX01TSV9GSVgsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMTJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFfERFVl9ORUVEX01TSV9GSVgsCiAJfSwKIAl7CS8qIE1DUDY1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRSgweDEwREUsIDB4MDQ1MSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREV8REVWX05FRURfTVNJX0ZJWCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YxMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREV8REVWX05FRURfTVNJX0ZJWCwKIAl9LAogCXsJLyogTUNQNjUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKDB4MTBERSwgMHgwNDUyKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERXxERVZfTkVFRF9NU0lfRklYLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjEyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERXxERVZfTkVFRF9NU0lfRklYLAogCX0sCiAJewkvKiBNQ1A2NSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoMHgxMERFLCAweDA0NTMpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFfERFVl9ORUVEX01TSV9GSVgsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMTJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFfERFVl9ORUVEX01TSV9GSVgsCiAJfSwKIAl7CS8qIE1DUDY3IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRSgweDEwREUsIDB4MDU0QyksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19HRUFSX01PREV8REVWX05FRURfTVNJX0ZJWCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YxMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19HRUFSX01PREV8REVWX05FRURfTVNJX0ZJWCwKIAl9LAogCXsJLyogTUNQNjcgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKDB4MTBERSwgMHgwNTREKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0dFQVJfTU9ERXxERVZfTkVFRF9NU0lfRklYLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjEyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0dFQVJfTU9ERXxERVZfTkVFRF9NU0lfRklYLAogCX0sCiAJewkvKiBNQ1A2NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoMHgxMERFLCAweDA1NEUpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfR0VBUl9NT0RFfERFVl9ORUVEX01TSV9GSVgsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMTJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfR0VBUl9NT0RFfERFVl9ORUVEX01TSV9GSVgsCiAJfSwKIAl7CS8qIE1DUDY3IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRSgweDEwREUsIDB4MDU0RiksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19HRUFSX01PREV8REVWX05FRURfTVNJX0ZJWCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YxMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19HRUFSX01PREV8REVWX05FRURfTVNJX0ZJWCwKIAl9LAogCXsJLyogTUNQNzMgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKDB4MTBERSwgMHgwN0RDKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX0hBU19HRUFSX01PREV8REVWX05FRURfTVNJX0ZJWCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YxMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9IQVNfR0VBUl9NT0RFfERFVl9ORUVEX01TSV9GSVgsCiAJfSwKIAl7CS8qIE1DUDczIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRSgweDEwREUsIDB4MDdERCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9IQVNfR0VBUl9NT0RFfERFVl9ORUVEX01TSV9GSVgsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMTJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfSEFTX0dFQVJfTU9ERXxERVZfTkVFRF9NU0lfRklYLAogCX0sCiAJewkvKiBNQ1A3MyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoMHgxMERFLCAweDA3REUpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfSEFTX0dFQVJfTU9ERXxERVZfTkVFRF9NU0lfRklYLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjEyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX0hBU19HRUFSX01PREV8REVWX05FRURfTVNJX0ZJWCwKIAl9LAogCXsJLyogTUNQNzMgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKDB4MTBERSwgMHgwN0RGKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX0hBU19HRUFSX01PREV8REVWX05FRURfTVNJX0ZJWCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YxMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9IQVNfR0VBUl9NT0RFfERFVl9ORUVEX01TSV9GSVgsCiAJfSwKIAl7CS8qIE1DUDc3IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRSgweDEwREUsIDB4MDc2MCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVQyfERFVl9IQVNfR0VBUl9NT0RFfERFVl9ORUVEX1BIWV9JTklUX0ZJWHxERVZfTkVFRF9NU0lfRklYLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YyfERFVl9IQVNfU1RBVElTVElDU19WMTIzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVQyfERFVl9IQVNfR0VBUl9NT0RFfERFVl9ORUVEX1BIWV9JTklUX0ZJWHxERVZfTkVFRF9NU0lfRklYLAogCX0sCiAJewkvKiBNQ1A3NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoMHgxMERFLCAweDA3NjEpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YyfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUMnxERVZfSEFTX0dFQVJfTU9ERXxERVZfTkVFRF9QSFlfSU5JVF9GSVh8REVWX05FRURfTVNJX0ZJWCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMnxERVZfSEFTX1NUQVRJU1RJQ1NfVjEyM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUMnxERVZfSEFTX0dFQVJfTU9ERXxERVZfTkVFRF9QSFlfSU5JVF9GSVh8REVWX05FRURfTVNJX0ZJWCwKIAl9LAogCXsJLyogTUNQNzcgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKDB4MTBERSwgMHgwNzYyKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMnxERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVDJ8REVWX0hBU19HRUFSX01PREV8REVWX05FRURfUEhZX0lOSVRfRklYfERFVl9ORUVEX01TSV9GSVgsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YxMjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVDJ8REVWX0hBU19HRUFSX01PREV8REVWX05FRURfUEhZX0lOSVRfRklYfERFVl9ORUVEX01TSV9GSVgsCiAJfSwKIAl7CS8qIE1DUDc3IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRSgweDEwREUsIDB4MDc2MyksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVQyfERFVl9IQVNfR0VBUl9NT0RFfERFVl9ORUVEX1BIWV9JTklUX0ZJWHxERVZfTkVFRF9NU0lfRklYLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YyfERFVl9IQVNfU1RBVElTVElDU19WMTIzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVQyfERFVl9IQVNfR0VBUl9NT0RFfERFVl9ORUVEX1BIWV9JTklUX0ZJWHxERVZfTkVFRF9NU0lfRklYLAogCX0sCiAJewkvKiBNQ1A3OSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoMHgxMERFLCAweDBBQjApLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YzfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUMnxERVZfSEFTX0dFQVJfTU9ERXxERVZfTkVFRF9QSFlfSU5JVF9GSVh8REVWX05FRURfTVNJX0ZJWCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WM3xERVZfSEFTX1NUQVRJU1RJQ1NfVjEyM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUMnxERVZfSEFTX0dFQVJfTU9ERXxERVZfTkVFRF9QSFlfSU5JVF9GSVh8REVWX05FRURfTVNJX0ZJWCwKIAl9LAogCXsJLyogTUNQNzkgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKDB4MTBERSwgMHgwQUIxKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WM3xERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVDJ8REVWX0hBU19HRUFSX01PREV8REVWX05FRURfUEhZX0lOSVRfRklYfERFVl9ORUVEX01TSV9GSVgsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjN8REVWX0hBU19TVEFUSVNUSUNTX1YxMjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVDJ8REVWX0hBU19HRUFSX01PREV8REVWX05FRURfUEhZX0lOSVRfRklYfERFVl9ORUVEX01TSV9GSVgsCiAJfSwKIAl7CS8qIE1DUDc5IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRSgweDEwREUsIDB4MEFCMiksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjN8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVQyfERFVl9IQVNfR0VBUl9NT0RFfERFVl9ORUVEX1BIWV9JTklUX0ZJWHxERVZfTkVFRF9NU0lfRklYLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YzfERFVl9IQVNfU1RBVElTVElDU19WMTIzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVQyfERFVl9IQVNfR0VBUl9NT0RFfERFVl9ORUVEX1BIWV9JTklUX0ZJWHxERVZfTkVFRF9NU0lfRklYLAogCX0sCiAJewkvKiBNQ1A3OSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoMHgxMERFLCAweDBBQjMpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YzfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUMnxERVZfSEFTX0dFQVJfTU9ERXxERVZfTkVFRF9QSFlfSU5JVF9GSVh8REVWX05FRURfTVNJX0ZJWCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WM3xERVZfSEFTX1NUQVRJU1RJQ1NfVjEyM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUMnxERVZfSEFTX0dFQVJfTU9ERXxERVZfTkVFRF9QSFlfSU5JVF9GSVh8REVWX05FRURfTVNJX0ZJWCwKIAl9LAogCXsJLyogTUNQODkgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKDB4MTBERSwgMHgwRDdEKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WM3xERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfSEFTX0dFQVJfTU9ERXxERVZfTkVFRF9QSFlfSU5JVF9GSVgsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjN8REVWX0hBU19TVEFUSVNUSUNTX1YxMjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfSEFTX0dFQVJfTU9ERXxERVZfTkVFRF9QSFlfSU5JVF9GSVgsCiAJfSwKIAl7MCx9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jCmluZGV4IDMwOWEwZWEuLmYwOGNmZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYwpAQCAtOTYzLDEyICs5NjMsMTEgQEAKIHN0YXRpYyBpbnQgZnNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKIHsKIAlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqbWlpID0gKHN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqKSZycS0+aWZyX2RhdGE7CiAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gcGh5X21paV9pb2N0bChmZXAtPnBoeWRldiwgbWlpLCBjbWQpOworCXJldHVybiBwaHlfbWlpX2lvY3RsKGZlcC0+cGh5ZGV2LCBycSwgY21kKTsKIH0KIAogZXh0ZXJuIGludCBmc19taWlfY29ubmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmMgYi9kcml2ZXJzL25ldC9mc2xfcHFfbWRpby5jCmluZGV4IGI0YzQxZDcuLmY1M2Y4NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmMKKysrIGIvZHJpdmVycy9uZXQvZnNsX3BxX21kaW8uYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L29mX21kaW8uaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc2xfcHFfbWRpby5oIGIvZHJpdmVycy9uZXQvZnNsX3BxX21kaW8uaAppbmRleCAxZjdkODY1Li5iZDE3YTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc2xfcHFfbWRpby5oCisrKyBiL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmgKQEAgLTM5LDcgKzM5LDcgQEAKIAl1OCByZXNlcnZlZFsyOF07CS8qIFNwYWNlIGhvbGRlciAqLwogCXUzMiB1dGJpcGFyOwkJLyogVEJJIHBoeSBhZGRyZXNzIHJlZyAob25seSBvbiBVQ0MpICovCiAJdTggcmVzNFsyNzI4XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogaW50IGZzbF9wcV9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSk7CiBpbnQgZnNsX3BxX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwppbmRleCAyOGI1M2QxLi5hMWI2MzAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyLmMKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCkBAIC04NSw2ICs4NSw3IEBACiAjaW5jbHVkZSA8bGludXgvbmV0X3RzdGFtcC5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3JlZy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNjg1LDggKzY4Niw4IEBACiAJCXByaXYtPnJ4X3F1ZXVlW2ldID0gTlVMTDsKIAogCWZvciAoaSA9IDA7IGkgPCBwcml2LT5udW1fdHhfcXVldWVzOyBpKyspIHsKLQkJcHJpdi0+dHhfcXVldWVbaV0gPSAgKHN0cnVjdCBnZmFyX3ByaXZfdHhfcSAqKWt6YWxsb2MoCi0JCQkJc2l6ZW9mIChzdHJ1Y3QgZ2Zhcl9wcml2X3R4X3EpLCBHRlBfS0VSTkVMKTsKKwkJcHJpdi0+dHhfcXVldWVbaV0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZ2Zhcl9wcml2X3R4X3EpLAorCQkJCQkgICAgR0ZQX0tFUk5FTCk7CiAJCWlmICghcHJpdi0+dHhfcXVldWVbaV0pIHsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQlnb3RvIHR4X2FsbG9jX2ZhaWxlZDsKQEAgLTY5OCw4ICs2OTksOCBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBwcml2LT5udW1fcnhfcXVldWVzOyBpKyspIHsKLQkJcHJpdi0+cnhfcXVldWVbaV0gPSAoc3RydWN0IGdmYXJfcHJpdl9yeF9xICopa3phbGxvYygKLQkJCQkJc2l6ZW9mIChzdHJ1Y3QgZ2Zhcl9wcml2X3J4X3EpLCBHRlBfS0VSTkVMKTsKKwkJcHJpdi0+cnhfcXVldWVbaV0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZ2Zhcl9wcml2X3J4X3EpLAorCQkJCQkgICAgR0ZQX0tFUk5FTCk7CiAJCWlmICghcHJpdi0+cnhfcXVldWVbaV0pIHsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQlnb3RvIHJ4X2FsbG9jX2ZhaWxlZDsKQEAgLTg0Niw3ICs4NDcsNyBAQAogCWlmICghcHJpdi0+cGh5ZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldHVybiBwaHlfbWlpX2lvY3RsKHByaXYtPnBoeWRldiwgaWZfbWlpKHJxKSwgY21kKTsKKwlyZXR1cm4gcGh5X21paV9pb2N0bChwcml2LT5waHlkZXYsIHJxLCBjbWQpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IHJldmVyc2VfYml0bWFwKHVuc2lnbmVkIGludCBiaXRfbWFwLCB1bnNpZ25lZCBpbnQgbWF4X3FzKQpAQCAtOTE2LDcgKzkxNyw3IEBACiAJcnFmYXIgPSBjbHVzdGVyX2VudHJ5X3Blcl9jbGFzcyhwcml2LCBycWZhciwgUlFGUFJfSVBWNCB8IFJRRlBSX1VEUCk7CiAJcnFmYXIgPSBjbHVzdGVyX2VudHJ5X3Blcl9jbGFzcyhwcml2LCBycWZhciwgUlFGUFJfSVBWNCB8IFJRRlBSX1RDUCk7CiAKLQkvKiBjdXJfZmlsZXJfaWR4IGluZGljYXRlZCB0aGUgZmlzcnQgbm9uLW1hc2tlZCBydWxlICovCisJLyogY3VyX2ZpbGVyX2lkeCBpbmRpY2F0ZWQgdGhlIGZpcnN0IG5vbi1tYXNrZWQgcnVsZSAqLwogCXByaXYtPmN1cl9maWxlcl9pZHggPSBycWZhcjsKIAogCS8qIFJlc3QgYXJlIG1hc2tlZCBydWxlcyAqLwpAQCAtOTI4LDYgKzkyOSwzNCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgZ2Zhcl9kZXRlY3RfZXJyYXRhKHN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnByaXYtPm9mZGV2LT5kZXY7CisJdW5zaWduZWQgaW50IHB2ciA9IG1mc3ByKFNQUk5fUFZSKTsKKwl1bnNpZ25lZCBpbnQgc3ZyID0gbWZzcHIoU1BSTl9TVlIpOworCXVuc2lnbmVkIGludCBtb2QgPSAoc3ZyID4+IDE2KSAmIDB4ZmZmNjsgLyogdy9vIEUgc3VmZml4ICovCisJdW5zaWduZWQgaW50IHJldiA9IHN2ciAmIDB4ZmZmZjsKKworCS8qIE1QQzgzMTMgUmV2IDIuMCBhbmQgaGlnaGVyOyBBbGwgTVBDODM3eCAqLworCWlmICgocHZyID09IDB4ODA4NTAwMTAgJiYgbW9kID09IDB4ODBiMCAmJiByZXYgPj0gMHgwMDIwKSB8fAorCQkJKHB2ciA9PSAweDgwODYxMDEwICYmIChtb2QgJiAweGZmZjkpID09IDB4ODBjMCkpCisJCXByaXYtPmVycmF0YSB8PSBHRkFSX0VSUkFUQV83NDsKKworCS8qIE1QQzgzMTMgYW5kIE1QQzgzN3ggYWxsIHJldiAqLworCWlmICgocHZyID09IDB4ODA4NTAwMTAgJiYgbW9kID09IDB4ODBiMCkgfHwKKwkJCShwdnIgPT0gMHg4MDg2MTAxMCAmJiAobW9kICYgMHhmZmY5KSA9PSAweDgwYzApKQorCQlwcml2LT5lcnJhdGEgfD0gR0ZBUl9FUlJBVEFfNzY7CisKKwkvKiBNUEM4MzEzIGFuZCBNUEM4Mzd4IGFsbCByZXYgKi8KKwlpZiAoKHB2ciA9PSAweDgwODUwMDEwICYmIG1vZCA9PSAweDgwYjApIHx8CisJCQkocHZyID09IDB4ODA4NjEwMTAgJiYgKG1vZCAmIDB4ZmZmOSkgPT0gMHg4MGMwKSkKKwkJcHJpdi0+ZXJyYXRhIHw9IEdGQVJfRVJSQVRBX0EwMDI7CisKKwlpZiAocHJpdi0+ZXJyYXRhKQorCQlkZXZfaW5mbyhkZXYsICJlbmFibGVkIGVycmF0YSB3b3JrYXJvdW5kcywgZmxhZ3M6IDB4JXhcbiIsCisJCQkgcHJpdi0+ZXJyYXRhKTsKK30KKwogLyogU2V0IHVwIHRoZSBldGhlcm5ldCBkZXZpY2Ugc3RydWN0dXJlLCBwcml2YXRlIGRhdGEsCiAgKiBhbmQgYW55dGhpbmcgZWxzZSB3ZSBuZWVkIGJlZm9yZSB3ZSBzdGFydCAqLwogc3RhdGljIGludCBnZmFyX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LApAQCAtOTYwLDYgKzk4OSw4IEBACiAJZGV2X3NldF9kcnZkYXRhKCZvZmRldi0+ZGV2LCBwcml2KTsKIAlyZWdzID0gcHJpdi0+Z2ZhcmdycFswXS5yZWdzOwogCisJZ2Zhcl9kZXRlY3RfZXJyYXRhKHByaXYpOworCiAJLyogU3RvcCB0aGUgRE1BIGVuZ2luZSBub3csIGluIGNhc2UgaXQgd2FzIHJ1bm5pbmcgYmVmb3JlICovCiAJLyogKFRoZSBmaXJtd2FyZSBjb3VsZCBoYXZlIHVzZWQgaXQsIGFuZCBsZWZ0IGl0IHJ1bm5pbmcpLiAqLwogCWdmYXJfaGFsdChkZXYpOwpAQCAtOTc0LDcgKzEwMDUsMTAgQEAKIAlnZmFyX3dyaXRlKCZyZWdzLT5tYWNjZmcxLCB0ZW1wdmFsKTsKIAogCS8qIEluaXRpYWxpemUgTUFDQ0ZHMi4gKi8KLQlnZmFyX3dyaXRlKCZyZWdzLT5tYWNjZmcyLCBNQUNDRkcyX0lOSVRfU0VUVElOR1MpOworCXRlbXB2YWwgPSBNQUNDRkcyX0lOSVRfU0VUVElOR1M7CisJaWYgKGdmYXJfaGFzX2VycmF0YShwcml2LCBHRkFSX0VSUkFUQV83NCkpCisJCXRlbXB2YWwgfD0gTUFDQ0ZHMl9IVUdFRlJBTUUgfCBNQUNDRkcyX0xFTkdUSENIRUNLOworCWdmYXJfd3JpdGUoJnJlZ3MtPm1hY2NmZzIsIHRlbXB2YWwpOwogCiAJLyogSW5pdGlhbGl6ZSBFQ05UUkwgKi8KIAlnZmFyX3dyaXRlKCZyZWdzLT5lY250cmwsIEVDTlRSTF9JTklUX1NFVFRJTkdTKTsKQEAgLTE1NDEsNiArMTU3NSwyOSBAQAogCWdmYXJfd3JpdGUoJnJlZ3MtPm1pbmZsciwgTUlORkxSX0lOSVRfU0VUVElOR1MpOwogfQogCitzdGF0aWMgaW50IF9fZ2Zhcl9pc19yeF9pZGxlKHN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYpCit7CisJdTMyIHJlczsKKworCS8qCisJICogTm9ybWFseSBUU0VDIHNob3VsZCBub3QgaGFuZyBvbiBHUlMgY29tbWFuZHMsIHNvIHdlIHNob3VsZAorCSAqIGFjdHVhbGx5IHdhaXQgZm9yIElFVkVOVF9HUlNDIGZsYWcuCisJICovCisJaWYgKGxpa2VseSghZ2Zhcl9oYXNfZXJyYXRhKHByaXYsIEdGQVJfRVJSQVRBX0EwMDIpKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFJlYWQgdGhlIGVUU0VDIHJlZ2lzdGVyIGF0IG9mZnNldCAweEQxQy4gSWYgYml0cyA3LTE0IGFyZQorCSAqIHRoZSBzYW1lIGFzIGJpdHMgMjMtMzAsIHRoZSBlVFNFQyBSeCBpcyBhc3N1bWVkIHRvIGJlIGlkbGUKKwkgKiBhbmQgdGhlIFJ4IGNhbiBiZSBzYWZlbHkgcmVzZXQuCisJICovCisJcmVzID0gZ2Zhcl9yZWFkKCh2b2lkIF9faW9tZW0gKilwcml2LT5nZmFyZ3JwWzBdLnJlZ3MgKyAweGQxYyk7CisJcmVzICY9IDB4N2Y4MDdmODA7CisJaWYgKChyZXMgJiAweGZmZmYpID09IChyZXMgPj4gMTYpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQogCiAvKiBIYWx0IHRoZSByZWNlaXZlIGFuZCB0cmFuc21pdCBxdWV1ZXMgKi8KIHN0YXRpYyB2b2lkIGdmYXJfaGFsdF9ub2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTE1NjQsMTIgKzE2MjEsMTggQEAKIAl0ZW1wdmFsID0gZ2Zhcl9yZWFkKCZyZWdzLT5kbWFjdHJsKTsKIAlpZiAoKHRlbXB2YWwgJiAoRE1BQ1RSTF9HUlMgfCBETUFDVFJMX0dUUykpCiAJICAgICE9IChETUFDVFJMX0dSUyB8IERNQUNUUkxfR1RTKSkgeworCQlpbnQgcmV0OworCiAJCXRlbXB2YWwgfD0gKERNQUNUUkxfR1JTIHwgRE1BQ1RSTF9HVFMpOwogCQlnZmFyX3dyaXRlKCZyZWdzLT5kbWFjdHJsLCB0ZW1wdmFsKTsKIAotCQlzcGluX2V2ZW50X3RpbWVvdXQoKChnZmFyX3JlYWQoJnJlZ3MtPmlldmVudCkgJgotCQkJIChJRVZFTlRfR1JTQyB8IElFVkVOVF9HVFNDKSkgPT0KLQkJCSAoSUVWRU5UX0dSU0MgfCBJRVZFTlRfR1RTQykpLCAtMSwgMCk7CisJCWRvIHsKKwkJCXJldCA9IHNwaW5fZXZlbnRfdGltZW91dCgoKGdmYXJfcmVhZCgmcmVncy0+aWV2ZW50KSAmCisJCQkJIChJRVZFTlRfR1JTQyB8IElFVkVOVF9HVFNDKSkgPT0KKwkJCQkgKElFVkVOVF9HUlNDIHwgSUVWRU5UX0dUU0MpKSwgMTAwMDAwMCwgMCk7CisJCQlpZiAoIXJldCAmJiAhKGdmYXJfcmVhZCgmcmVncy0+aWV2ZW50KSAmIElFVkVOVF9HUlNDKSkKKwkJCQlyZXQgPSBfX2dmYXJfaXNfcnhfaWRsZShwcml2KTsKKwkJfSB3aGlsZSAoIXJldCk7CiAJfQogfQogCkBAIC0xOTg3LDYgKzIwNTAsMjAgQEAKIAl1bnNpZ25lZCBpbnQgbnJfZnJhZ3MsIG5yX3R4YmRzLCBsZW5ndGg7CiAJdW5pb24gc2tiX3NoYXJlZF90eCAqc2h0eDsKIAorCS8qCisJICogVE9FPTEgZnJhbWVzIGxhcmdlciB0aGFuIDI1MDAgYnl0ZXMgbWF5IHNlZSBleGNlc3MgZGVsYXlzCisJICogYmVmb3JlIHN0YXJ0IG9mIHRyYW5zbWlzc2lvbi4KKwkgKi8KKwlpZiAodW5saWtlbHkoZ2Zhcl9oYXNfZXJyYXRhKHByaXYsIEdGQVJfRVJSQVRBXzc2KSAmJgorCQkJc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCAmJgorCQkJc2tiLT5sZW4gPiAyNTAwKSkgeworCQlpbnQgcmV0OworCisJCXJldCA9IHNrYl9jaGVja3N1bV9oZWxwKHNrYik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwogCXJxID0gc2tiLT5xdWV1ZV9tYXBwaW5nOwogCXR4X3F1ZXVlID0gcHJpdi0+dHhfcXVldWVbcnFdOwogCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBycSk7CkBAIC0yMzAwLDcgKzIzNzcsOCBAQAogCSAqIHRvIGFsbG93IGh1Z2UgZnJhbWVzLCBhbmQgdG8gY2hlY2sgdGhlIGxlbmd0aCAqLwogCXRlbXB2YWwgPSBnZmFyX3JlYWQoJnJlZ3MtPm1hY2NmZzIpOwogCi0JaWYgKHByaXYtPnJ4X2J1ZmZlcl9zaXplID4gREVGQVVMVF9SWF9CVUZGRVJfU0laRSkKKwlpZiAocHJpdi0+cnhfYnVmZmVyX3NpemUgPiBERUZBVUxUX1JYX0JVRkZFUl9TSVpFIHx8CisJCQlnZmFyX2hhc19lcnJhdGEocHJpdiwgR0ZBUl9FUlJBVEFfNzQpKQogCQl0ZW1wdmFsIHw9IChNQUNDRkcyX0hVR0VGUkFNRSB8IE1BQ0NGRzJfTEVOR1RIQ0hFQ0spOwogCWVsc2UKIAkJdGVtcHZhbCAmPSB+KE1BQ0NGRzJfSFVHRUZSQU1FIHwgTUFDQ0ZHMl9MRU5HVEhDSEVDSyk7CkBAIC0yMzQyLDYgKzI0MjAsMTUgQEAKIAlzY2hlZHVsZV93b3JrKCZwcml2LT5yZXNldF90YXNrKTsKIH0KIAorc3RhdGljIHZvaWQgZ2Zhcl9hbGlnbl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwkvKiBXZSBuZWVkIHRoZSBkYXRhIGJ1ZmZlciB0byBiZSBhbGlnbmVkIHByb3Blcmx5LiAgV2Ugd2lsbCByZXNlcnZlCisJICogYXMgbWFueSBieXRlcyBhcyBuZWVkZWQgdG8gYWxpZ24gdGhlIGRhdGEgcHJvcGVybHkKKwkgKi8KKwlza2JfcmVzZXJ2ZShza2IsIFJYQlVGX0FMSUdOTUVOVCAtCisJCSgoKHVuc2lnbmVkIGxvbmcpIHNrYi0+ZGF0YSkgJiAoUlhCVUZfQUxJR05NRU5UIC0gMSkpKTsKK30KKwogLyogSW50ZXJydXB0IEhhbmRsZXIgZm9yIFRyYW5zbWl0IGNvbXBsZXRlICovCiBzdGF0aWMgaW50IGdmYXJfY2xlYW5fdHhfcmluZyhzdHJ1Y3QgZ2Zhcl9wcml2X3R4X3EgKnR4X3F1ZXVlKQogewpAQCAtMjQyNiw5ICsyNTEzLDEwIEBACiAJCSAqLwogCQlpZiAoc2tiX3F1ZXVlX2xlbigmcHJpdi0+cnhfcmVjeWNsZSkgPCByeF9xdWV1ZS0+cnhfcmluZ19zaXplICYmCiAJCQkJc2tiX3JlY3ljbGVfY2hlY2soc2tiLCBwcml2LT5yeF9idWZmZXJfc2l6ZSArCi0JCQkJCVJYQlVGX0FMSUdOTUVOVCkpCisJCQkJCVJYQlVGX0FMSUdOTUVOVCkpIHsKKwkJCWdmYXJfYWxpZ25fc2tiKHNrYik7CiAJCQlfX3NrYl9xdWV1ZV9oZWFkKCZwcml2LT5yeF9yZWN5Y2xlLCBza2IpOwotCQllbHNlCisJCX0gZWxzZQogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAogCQl0eF9xdWV1ZS0+dHhfc2tidWZmW3NrYl9kaXJ0eXR4XSA9IE5VTEw7CkBAIC0yNDkxLDI5ICsyNTc5LDI4IEBACiAJZ2Zhcl9pbml0X3J4YmRwKHJ4X3F1ZXVlLCBiZHAsIGJ1Zik7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqIGdmYXJfYWxsb2Nfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisKKwlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGRldiwgcHJpdi0+cnhfYnVmZmVyX3NpemUgKyBSWEJVRl9BTElHTk1FTlQpOworCWlmICghc2tiKQorCQlyZXR1cm4gTlVMTDsKKworCWdmYXJfYWxpZ25fc2tiKHNrYik7CisKKwlyZXR1cm4gc2tiOworfQogCiBzdHJ1Y3Qgc2tfYnVmZiAqIGdmYXJfbmV3X3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXVuc2lnbmVkIGludCBhbGlnbmFtb3VudDsKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKIAogCXNrYiA9IF9fc2tiX2RlcXVldWUoJnByaXYtPnJ4X3JlY3ljbGUpOwogCWlmICghc2tiKQotCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGRldiwKLQkJCQlwcml2LT5yeF9idWZmZXJfc2l6ZSArIFJYQlVGX0FMSUdOTUVOVCk7Ci0KLQlpZiAoIXNrYikKLQkJcmV0dXJuIE5VTEw7Ci0KLQlhbGlnbmFtb3VudCA9IFJYQlVGX0FMSUdOTUVOVCAtCi0JCSgoKHVuc2lnbmVkIGxvbmcpIHNrYi0+ZGF0YSkgJiAoUlhCVUZfQUxJR05NRU5UIC0gMSkpOwotCi0JLyogV2UgbmVlZCB0aGUgZGF0YSBidWZmZXIgdG8gYmUgYWxpZ25lZCBwcm9wZXJseS4gIFdlIHdpbGwgcmVzZXJ2ZQotCSAqIGFzIG1hbnkgYnl0ZXMgYXMgbmVlZGVkIHRvIGFsaWduIHRoZSBkYXRhIHByb3Blcmx5Ci0JICovCi0Jc2tiX3Jlc2VydmUoc2tiLCBhbGlnbmFtb3VudCk7Ci0JR0ZBUl9DQihza2IpLT5hbGlnbmFtb3VudCA9IGFsaWduYW1vdW50OworCQlza2IgPSBnZmFyX2FsbG9jX3NrYihkZXYpOwogCiAJcmV0dXJuIHNrYjsKIH0KQEAgLTI2NjYsMTcgKzI3NTMsOCBAQAogCiAJCQlpZiAodW5saWtlbHkoIW5ld3NrYikpCiAJCQkJbmV3c2tiID0gc2tiOwotCQkJZWxzZSBpZiAoc2tiKSB7Ci0JCQkJLyoKLQkJCQkgKiBXZSBuZWVkIHRvIHVuLXJlc2VydmUoKSB0aGUgc2tiIHRvIHdoYXQgaXQKLQkJCQkgKiB3YXMgYmVmb3JlIGdmYXJfbmV3X3NrYigpIHJlLWFsaWduZWQKLQkJCQkgKiBpdCB0byBhbiBSWEJVRl9BTElHTk1FTlQgYm91bmRhcnkKLQkJCQkgKiBiZWZvcmUgd2UgcHV0IHRoZSBza2IgYmFjayBvbiB0aGUKLQkJCQkgKiByZWN5Y2xlIGxpc3QuCi0JCQkJICovCi0JCQkJc2tiX3Jlc2VydmUoc2tiLCAtR0ZBUl9DQihza2IpLT5hbGlnbmFtb3VudCk7CisJCQllbHNlIGlmIChza2IpCiAJCQkJX19za2JfcXVldWVfaGVhZCgmcHJpdi0+cnhfcmVjeWNsZSwgc2tiKTsKLQkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qIEluY3JlbWVudCB0aGUgbnVtYmVyIG9mIHBhY2tldHMgKi8KIAkJCXJ4X3F1ZXVlLT5zdGF0cy5yeF9wYWNrZXRzKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmggYi9kcml2ZXJzL25ldC9naWFuZmFyLmgKaW5kZXggYWM0YTkyZS4uNzEwODEwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5oCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuaApAQCAtMTAyNSw2ICsxMDI1LDEyIEBACiAJY2hhciBpbnRfbmFtZV9lcltHRkFSX0lOVF9OQU1FX01BWF07CiB9OwogCitlbnVtIGdmYXJfZXJyYXRhIHsKKwlHRkFSX0VSUkFUQV83NAkJPSAweDAxLAorCUdGQVJfRVJSQVRBXzc2CQk9IDB4MDIsCisJR0ZBUl9FUlJBVEFfQTAwMgk9IDB4MDQsCit9OworCiAvKiBTdHJ1Y3Qgc3RvbGVuIGFsbW9zdCBjb21wbGV0ZWx5IChhbmQgc2hhbWVsZXNzbHkpIGZyb20gdGhlIEZDQyBlbmV0IHNvdXJjZQogICogKE9rLCB0aGF0J3Mgbm90IHNvIHRydWUgYW55bW9yZSwgYnV0IHRoZXJlIGlzIGEgZmFtaWx5IHJlc2VtYmxlbmNlKQogICogVGhlIEdGQVIgYnVmZmVyIGRlc2NyaXB0b3JzIHRyYWNrIHRoZSByaW5nIGJ1ZmZlcnMuICBUaGUgcnhfYmRfYmFzZQpAQCAtMTA0OSw2ICsxMDU1LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CiAJc3RydWN0IG9mX2RldmljZSAqb2ZkZXY7CisJZW51bSBnZmFyX2VycmF0YSBlcnJhdGE7CiAKIAlzdHJ1Y3QgZ2Zhcl9wcml2X2dycCBnZmFyZ3JwW01BWEdST1VQU107CiAJc3RydWN0IGdmYXJfcHJpdl90eF9xICp0eF9xdWV1ZVtNQVhfVFhfUVNdOwpAQCAtMTExMSw2ICsxMTE4LDEyIEBACiBleHRlcm4gdW5zaWduZWQgaW50IGZ0cF9ycWZwcltNQVhfRklMRVJfSURYICsgMV07CiBleHRlcm4gdW5zaWduZWQgaW50IGZ0cF9ycWZjcltNQVhfRklMRVJfSURYICsgMV07CiAKK3N0YXRpYyBpbmxpbmUgaW50IGdmYXJfaGFzX2VycmF0YShzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2LAorCQkJCSAgZW51bSBnZmFyX2VycmF0YSBlcnIpCit7CisJcmV0dXJuIHByaXYtPmVycmF0YSAmIGVycjsKK30KKwogc3RhdGljIGlubGluZSB1MzIgZ2Zhcl9yZWFkKHZvbGF0aWxlIHVuc2lnbmVkIF9faW9tZW0gKmFkZHIpCiB7CiAJdTMyIHZhbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dyZXRoLmMgYi9kcml2ZXJzL25ldC9ncmV0aC5jCmluZGV4IDNhMDI5ZDAuLjRkMDllYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dyZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvZ3JldGguYwpAQCAtMTU1NSw3ICsxNTU1LDYgQEAKIAl9CiAKIAkvKiBzZXR1cCBOQVBJICovCi0JbWVtc2V0KCZncmV0aC0+bmFwaSwgMCwgc2l6ZW9mKGdyZXRoLT5uYXBpKSk7CiAJbmV0aWZfbmFwaV9hZGQoZGV2LCAmZ3JldGgtPm5hcGksIGdyZXRoX3BvbGwsIDY0KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtYWNoaS5jIGIvZHJpdmVycy9uZXQvaGFtYWNoaS5jCmluZGV4IDYxZjJiMWMuLjQ5YWFjNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbWFjaGkuYworKysgYi9kcml2ZXJzL25ldC9oYW1hY2hpLmMKQEAgLTQ5Miw3ICs0OTIsNiBAQAogCXN0cnVjdCBza19idWZmKiB0eF9za2J1ZmZbVFhfUklOR19TSVpFXTsKIAlkbWFfYWRkcl90IHR4X3JpbmdfZG1hOwogCWRtYV9hZGRyX3QgcnhfcmluZ19kbWE7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CQkvKiBNZWRpYSBzZWxlY3Rpb24gdGltZXIuICovCiAJLyogRnJlcXVlbnRseSB1c2VkIGFuZCBwYWlyZWQgdmFsdWU6IGtlZXAgYWRqYWNlbnQgZm9yIGNhY2hlIGVmZmVjdC4gKi8KIAlzcGlubG9ja190IGxvY2s7CkBAIC0xMDM2LDcgKzEwMzUsNyBAQAogCQlpZiAoZW50cnkgPj0gVFhfUklOR19TSVpFLTEpCiAJCQlobXAtPnR4X3JpbmdbVFhfUklOR19TSVpFLTFdLnN0YXR1c19uX2xlbmd0aCB8PQogCQkJCWNwdV90b19sZTMyKERlc2NFbmRSaW5nKTsKLQkJaG1wLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTE2Nyw3ICsxMTY2LDcgQEAKIAogCS8qIFRyaWdnZXIgYW4gaW1tZWRpYXRlIHRyYW5zbWl0IGRlbWFuZC4gKi8KIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsgLyogcHJldmVudCB0eCB0aW1lb3V0ICovCi0JaG1wLT5zdGF0cy50eF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCiAJLyogUmVzdGFydCB0aGUgY2hpcCdzIFR4L1J4IHByb2Nlc3NlcyAuICovCiAJd3JpdGV3KDB4MDAwMiwgaW9hZGRyICsgVHhDbWQpOyAvKiBTVE9QIFR4ICovCkBAIC0xNDM0LDcgKzE0MzMsNyBAQAogCQkJCQlpZiAoZW50cnkgPj0gVFhfUklOR19TSVpFLTEpCiAJCQkJCQlobXAtPnR4X3JpbmdbVFhfUklOR19TSVpFLTFdLnN0YXR1c19uX2xlbmd0aCB8PQogCQkJCQkJCWNwdV90b19sZTMyKERlc2NFbmRSaW5nKTsKLQkJCQkJaG1wLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCQkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJCX0KIAkJCQlpZiAoaG1wLT5jdXJfdHggLSBobXAtPmRpcnR5X3R4IDwgVFhfUklOR19TSVpFIC0gNCl7CiAJCQkJCS8qIFRoZSByaW5nIGlzIG5vIGxvbmdlciBmdWxsICovCkBAIC0xNTI1LDE4ICsxNTI0LDIyIEBACiAJCQkJICAgbGUzMl90b19jcHUoaG1wLT5yeF9yaW5nWyhobXAtPmN1cl9yeCsxKSAlIFJYX1JJTkdfU0laRV0uc3RhdHVzX25fbGVuZ3RoKSAmIDB4ZmZmZjAwMDAsCiAJCQkJICAgbGUzMl90b19jcHUoaG1wLT5yeF9yaW5nWyhobXAtPmN1cl9yeCsxKSAlIFJYX1JJTkdfU0laRV0uc3RhdHVzX25fbGVuZ3RoKSAmIDB4MDAwMGZmZmYsCiAJCQkJICAgbGUzMl90b19jcHUoaG1wLT5yeF9yaW5nWyhobXAtPmN1cl9yeC0xKSAlIFJYX1JJTkdfU0laRV0uc3RhdHVzX25fbGVuZ3RoKSk7Ci0JCQlobXAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQl9IC8qIGVsc2UgIE9taXQgZm9yIHByb3RvdHlwZSBlcnJhdGE/Pz8gKi8KIAkJaWYgKGZyYW1lX3N0YXR1cyAmIDB4MDAzODAwMDApIHsKIAkJCS8qIFRoZXJlIHdhcyBhbiBlcnJvci4gKi8KIAkJCWlmIChoYW1hY2hpX2RlYnVnID4gMikKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiICBoYW1hY2hpX3J4KCkgUnggZXJyb3Igd2FzICU4Ljh4LlxuIiwKIAkJCQkJICAgZnJhbWVfc3RhdHVzKTsKLQkJCWhtcC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQlpZiAoZnJhbWVfc3RhdHVzICYgMHgwMDYwMDAwMCkgaG1wLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JCQlpZiAoZnJhbWVfc3RhdHVzICYgMHgwMDA4MDAwMCkgaG1wLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKLQkJCWlmIChmcmFtZV9zdGF0dXMgJiAweDAwMTAwMDAwKSBobXAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKLQkJCWlmIChmcmFtZV9zdGF0dXMgPCAwKSBobXAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQlpZiAoZnJhbWVfc3RhdHVzICYgMHgwMDYwMDAwMCkKKwkJCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJCWlmIChmcmFtZV9zdGF0dXMgJiAweDAwMDgwMDAwKQorCQkJCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CisJCQlpZiAoZnJhbWVfc3RhdHVzICYgMHgwMDEwMDAwMCkKKwkJCQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJCWlmIChmcmFtZV9zdGF0dXMgPCAwKQorCQkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQl9IGVsc2UgewogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJCS8qIE9taXQgQ1JDICovCkBAIC0xNjU0LDcgKzE2NTcsNyBAQAogI2VuZGlmICAvKiBSWF9DSEVDS1NVTSAqLwogCiAJCQluZXRpZl9yeChza2IpOwotCQkJaG1wLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAkJfQogCQllbnRyeSA9ICgrK2htcC0+Y3VyX3J4KSAlIFJYX1JJTkdfU0laRTsKIAl9CkBAIC0xNzI0LDkgKzE3MjcsOSBAQAogCQkgICAgICAgZGV2LT5uYW1lLCBpbnRyX3N0YXR1cyk7CiAJLyogSG1tbW1tLCBpdCdzIG5vdCBjbGVhciBob3cgdG8gcmVjb3ZlciBmcm9tIFBDSSBmYXVsdHMuICovCiAJaWYgKGludHJfc3RhdHVzICYgKEludHJUeFBDSUVyciB8IEludHJUeFBDSUZhdWx0KSkKLQkJaG1wLT5zdGF0cy50eF9maWZvX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CiAJaWYgKGludHJfc3RhdHVzICYgKEludHJSeFBDSUVyciB8IEludHJSeFBDSUZhdWx0KSkKLQkJaG1wLT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CiB9CiAKIHN0YXRpYyBpbnQgaGFtYWNoaV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMTgyOCwxOSArMTgzMSwyNyBAQAogICAgICAgICAgICBzbyBJIHRoaW5rIEknbGwgY29tbWVudCBpdCBvdXQgaGVyZSBhbmQgc2VlIGlmIGJldHRlciB0aGluZ3MKICAgICAgICAgICAgaGFwcGVuLgogICAgICAgICAqLwotCS8qIGhtcC0+c3RhdHMudHhfcGFja2V0cwk9IHJlYWRsKGlvYWRkciArIDB4MDAwKTsgKi8KKwkvKiBkZXYtPnN0YXRzLnR4X3BhY2tldHMJPSByZWFkbChpb2FkZHIgKyAweDAwMCk7ICovCiAKLQlobXAtPnN0YXRzLnJ4X2J5dGVzID0gcmVhZGwoaW9hZGRyICsgMHgzMzApOyAvKiBUb3RhbCBVbmkrQnJkK011bHRpICovCi0JaG1wLT5zdGF0cy50eF9ieXRlcyA9IHJlYWRsKGlvYWRkciArIDB4M0IwKTsgLyogVG90YWwgVW5pK0JyZCtNdWx0aSAqLwotCWhtcC0+c3RhdHMubXVsdGljYXN0CQk9IHJlYWRsKGlvYWRkciArIDB4MzIwKTsgLyogTXVsdGljYXN0IFJ4ICovCisJLyogVG90YWwgVW5pK0JyZCtNdWx0aSAqLworCWRldi0+c3RhdHMucnhfYnl0ZXMgPSByZWFkbChpb2FkZHIgKyAweDMzMCk7CisJLyogVG90YWwgVW5pK0JyZCtNdWx0aSAqLworCWRldi0+c3RhdHMudHhfYnl0ZXMgPSByZWFkbChpb2FkZHIgKyAweDNCMCk7CisJLyogTXVsdGljYXN0IFJ4ICovCisJZGV2LT5zdGF0cy5tdWx0aWNhc3QgPSByZWFkbChpb2FkZHIgKyAweDMyMCk7CiAKLQlobXAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMJPSByZWFkbChpb2FkZHIgKyAweDM2OCk7IC8qIE92ZXIrVW5kZXJzaXplZCAqLwotCWhtcC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMJPSByZWFkbChpb2FkZHIgKyAweDM1Qyk7IC8qIEphYmJlciAqLwotCWhtcC0+c3RhdHMucnhfY3JjX2Vycm9ycwk9IHJlYWRsKGlvYWRkciArIDB4MzYwKTsgLyogSmFiYmVyICovCi0JaG1wLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMJPSByZWFkbChpb2FkZHIgKyAweDM2NCk7IC8qIFN5bWJvbCBFcnJzICovCi0JaG1wLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzCT0gcmVhZGwoaW9hZGRyICsgMHgzNkMpOyAvKiBEcm9wcGVkICovCisJLyogT3ZlcitVbmRlcnNpemVkICovCisJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzID0gcmVhZGwoaW9hZGRyICsgMHgzNjgpOworCS8qIEphYmJlciAqLworCWRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMgPSByZWFkbChpb2FkZHIgKyAweDM1Qyk7CisJLyogSmFiYmVyICovCisJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzID0gcmVhZGwoaW9hZGRyICsgMHgzNjApOworCS8qIFN5bWJvbCBFcnJzICovCisJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgPSByZWFkbChpb2FkZHIgKyAweDM2NCk7CisJLyogRHJvcHBlZCAqLworCWRldi0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycyA9IHJlYWRsKGlvYWRkciArIDB4MzZDKTsKIAotCXJldHVybiAmaG1wLT5zdGF0czsKKwlyZXR1cm4gJmRldi0+c3RhdHM7CiB9CiAKIHN0YXRpYyB2b2lkIHNldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ocDEwMC5jIGIvZHJpdmVycy9uZXQvaHAxMDAuYwppbmRleCA2OGU1YWM4Li4wOTViMTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ocDEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2hwMTAwLmMKQEAgLTE2OCw3ICsxNjgsNiBAQAogCXVfY2hhciBtYWMxX21vZGU7CiAJdV9jaGFyIG1hYzJfbW9kZTsKIAl1X2NoYXIgaGFzaF9ieXRlc1s4XTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAogCS8qIFJpbmdzIGZvciBidXNtYXN0ZXIgbW9kZTogKi8KIAlocDEwMF9yaW5nX3QgKnJ4cmhlYWQ7CS8qIEhlYWQgKG9sZGVzdCkgaW5kZXggaW50byByeHJpbmcgKi8KQEAgLTcyMSw5ICs3MjAsMTAgQEAKIAkJLyogQ29udmVyc2lvbiB0byBuZXcgUENJIEFQSSA6CiAJCSAqIFBhZ2VzIGFyZSBhbHdheXMgYWxpZ25lZCBhbmQgemVyb2VkLCBubyBuZWVkIHRvIGl0IG91cnNlbGYuCiAJCSAqIERvYyBzYXlzIHNob3VsZCBiZSBPSyBmb3IgRUlTQSBidXMgYXMgd2VsbCAtIEplYW4gSUkgKi8KLQkJaWYgKChscC0+cGFnZV92YWRkcl9hbGduID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQobHAtPnBjaV9kZXYsIE1BWF9SSU5HU0laRSwgJnBhZ2VfYmFkZHIpKSA9PSBOVUxMKSB7CisJCWxwLT5wYWdlX3ZhZGRyX2FsZ24gPSBwY2lfYWxsb2NfY29uc2lzdGVudChscC0+cGNpX2RldiwgTUFYX1JJTkdTSVpFLCAmcGFnZV9iYWRkcik7CisJCWlmICghbHAtPnBhZ2VfdmFkZHJfYWxnbikgewogCQkJZXJyID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0MjsKKwkJCWdvdG8gb3V0X21lbV9wdHI7CiAJCX0KIAkJbHAtPndoYXRldmVyX29mZnNldCA9ICgodV9sb25nKSBwYWdlX2JhZGRyKSAtICgodV9sb25nKSBscC0+cGFnZV92YWRkcl9hbGduKTsKIApAQCAtNzk5LDYgKzc5OSw3IEBACiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQobHAtPnBjaV9kZXYsIE1BWF9SSU5HU0laRSArIDB4MGYsCiAJCQkJICAgIGxwLT5wYWdlX3ZhZGRyX2FsZ24sCiAJCQkJICAgIHZpcnRfdG9fd2hhdGV2ZXIoZGV2LCBscC0+cGFnZV92YWRkcl9hbGduKSk7CitvdXRfbWVtX3B0cjoKIAlpZiAobWVtX3B0cl92aXJ0KQogCQlpb3VubWFwKG1lbV9wdHJfdmlydCk7CiBvdXQyOgpAQCAtMTA3MSw3ICsxMDcyLDcgQEAKIAlpZiAobHAtPm1vZGUgPT0gMSkKIAkJaHAxMDBfaW5pdF9wZGxzKGRldik7CiAKLQkvKiBHbyB0byBwZXJmb3JtYW5jZSBwYWdlIGFuZCBpbml0YWxpemUgaXNyIGFuZCBpbXIgcmVnaXN0ZXJzICovCisJLyogR28gdG8gcGVyZm9ybWFuY2UgcGFnZSBhbmQgaW5pdGlhbGl6ZSBpc3IgYW5kIGltciByZWdpc3RlcnMgKi8KIAlocDEwMF9wYWdlKFBFUkZPUk1BTkNFKTsKIAlocDEwMF9vdXR3KDB4ZmVmZSwgSVJRX01BU0spOwkvKiBtYXNrIG9mZiBhbGwgaW50cyAqLwogCWhwMTAwX291dHcoMHhmZmZmLCBJUlFfU1RBVFVTKTsJLyogYWNrIElSUSAqLwpAQCAtMTU4Miw4ICsxNTgzLDggQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwogCiAJLyogVXBkYXRlIHN0YXRpc3RpY3MgKi8KLQlscC0+c3RhdHMudHhfcGFja2V0cysrOwotCWxwLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIApAQCAtMTc0MCw4ICsxNzQxLDggQEAKIAogCWhwMTAwX291dGIoSFAxMDBfVFhfQ01EIHwgSFAxMDBfU0VUX0xCLCBPUFRJT05fTVNXKTsJLyogc2VuZCBwYWNrZXQgKi8KIAotCWxwLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JbHAtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJaHAxMDBfaW50c19vbigpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CiAKQEAgLTE4MjIsNyArMTgyMyw3IEBACiAJCQlwcmludGsoImhwMTAwOiAlczogcng6IGNvdWxkbid0IGFsbG9jYXRlIGEgc2tfYnVmZiBvZiBzaXplICVkXG4iLAogCQkJCQkgICAgIGRldi0+bmFtZSwgcGt0X2xlbik7CiAjZW5kaWYKLQkJCWxwLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJfSBlbHNlIHsJLyogc2tiIHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQgKi8KIAogCQkJdV9jaGFyICpwdHI7CkBAIC0xODQ4LDggKzE4NDksOCBAQAogCQkJCQlwdHJbOV0sIHB0clsxMF0sIHB0clsxMV0pOwogI2VuZGlmCiAJCQluZXRpZl9yeChza2IpOwotCQkJbHAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJCWxwLT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOworCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAJCX0KIAogCQkvKiBJbmRpY2F0ZSB0aGUgY2FyZCB0aGF0IHdlIGhhdmUgZ290IHRoZSBwYWNrZXQgKi8KQEAgLTE4NTgsNyArMTg1OSw3IEBACiAJCXN3aXRjaCAoaGVhZGVyICYgMHgwMDA3MDAwMCkgewogCQljYXNlIChIUDEwMF9NVUxUSV9BRERSX0hBU0ggPDwgMTYpOgogCQljYXNlIChIUDEwMF9NVUxUSV9BRERSX05PX0hBU0ggPDwgMTYpOgotCQkJbHAtPnN0YXRzLm11bHRpY2FzdCsrOworCQkJZGV2LT5zdGF0cy5tdWx0aWNhc3QrKzsKIAkJCWJyZWFrOwogCQl9CiAJfQkJCS8qIGVuZCBvZiB3aGlsZSh0aGVyZSBhcmUgcGFja2V0cykgbG9vcCAqLwpAQCAtMTkzMCw3ICsxOTMxLDcgQEAKIAkJCWlmIChwdHItPnNrYiA9PSBOVUxMKSB7CiAJCQkJcHJpbnRrKCJocDEwMDogJXM6IHJ4X2JtOiBza2IgbnVsbFxuIiwgZGV2LT5uYW1lKTsKIAkJCQkvKiBjYW4gaGFwcGVuIGlmIHdlIG9ubHkgYWxsb2NhdGVkIHJvb20gZm9yIHRoZSBwZGggZHVlIHRvIG1lbW9yeSBzaG9ydGFnZS4gKi8KLQkJCQlscC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkJfSBlbHNlIHsKIAkJCQlza2JfdHJpbShwdHItPnNrYiwgcGt0X2xlbik7CS8qIFNob3J0ZW4gaXQgKi8KIAkJCQlwdHItPnNrYi0+cHJvdG9jb2wgPQpAQCAtMTkzOCwxNCArMTkzOSwxNCBAQAogCiAJCQkJbmV0aWZfcngocHRyLT5za2IpOwkvKiBVcCBhbmQgYXdheS4uLiAqLwogCi0JCQkJbHAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJCQlscC0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKKwkJCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAJCQl9CiAKIAkJCXN3aXRjaCAoaGVhZGVyICYgMHgwMDA3MDAwMCkgewogCQkJY2FzZSAoSFAxMDBfTVVMVElfQUREUl9IQVNIIDw8IDE2KToKIAkJCWNhc2UgKEhQMTAwX01VTFRJX0FERFJfTk9fSEFTSCA8PCAxNik6Ci0JCQkJbHAtPnN0YXRzLm11bHRpY2FzdCsrOworCQkJCWRldi0+c3RhdHMubXVsdGljYXN0Kys7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0gZWxzZSB7CkBAIC0xOTU0LDcgKzE5NTUsNyBAQAogI2VuZGlmCiAJCQlpZiAocHRyLT5za2IgIT0gTlVMTCkKIAkJCQlkZXZfa2ZyZWVfc2tiX2FueShwdHItPnNrYik7Ci0JCQlscC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQl9CiAKIAkJbHAtPnJ4cmhlYWQgPSBscC0+cnhyaGVhZC0+bmV4dDsKQEAgLTE5OTIsMTQgKzE5OTMsMTMgQEAKIAlocDEwMF91cGRhdGVfc3RhdHMoZGV2KTsKIAlocDEwMF9pbnRzX29uKCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gJihscC0+c3RhdHMpOworCXJldHVybiAmKGRldi0+c3RhdHMpOwogfQogCiBzdGF0aWMgdm9pZCBocDEwMF91cGRhdGVfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAJdV9zaG9ydCB2YWw7Ci0Jc3RydWN0IGhwMTAwX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogI2lmZGVmIEhQMTAwX0RFQlVHX0IKIAlocDEwMF9vdXR3KDB4NDIxNiwgVFJBQ0UpOwpAQCAtMjAwOSwxNCArMjAwOSwxNCBAQAogCS8qIE5vdGU6IFN0YXRpc3RpY3MgY291bnRlcnMgY2xlYXIgd2hlbiByZWFkLiAqLwogCWhwMTAwX3BhZ2UoTUFDX0NUUkwpOwogCXZhbCA9IGhwMTAwX2ludyhEUk9QUEVEKSAmIDB4MGZmZjsKLQlscC0+c3RhdHMucnhfZXJyb3JzICs9IHZhbDsKLQlscC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMgKz0gdmFsOworCWRldi0+c3RhdHMucnhfZXJyb3JzICs9IHZhbDsKKwlkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzICs9IHZhbDsKIAl2YWwgPSBocDEwMF9pbmIoQ1JDKTsKLQlscC0+c3RhdHMucnhfZXJyb3JzICs9IHZhbDsKLQlscC0+c3RhdHMucnhfY3JjX2Vycm9ycyArPSB2YWw7CisJZGV2LT5zdGF0cy5yeF9lcnJvcnMgKz0gdmFsOworCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycyArPSB2YWw7CiAJdmFsID0gaHAxMDBfaW5iKEFCT1JUKTsKLQlscC0+c3RhdHMudHhfZXJyb3JzICs9IHZhbDsKLQlscC0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgKz0gdmFsOworCWRldi0+c3RhdHMudHhfZXJyb3JzICs9IHZhbDsKKwlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzICs9IHZhbDsKIAlocDEwMF9wYWdlKFBFUkZPUk1BTkNFKTsKIH0KIApAQCAtMjAyNSw3ICsyMDI1LDYgQEAKICNpZmRlZiBIUDEwMF9ERUJVR19CCiAJaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogI2VuZGlmCi0Jc3RydWN0IGhwMTAwX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogI2lmZGVmIEhQMTAwX0RFQlVHX0IKIAlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CkBAIC0yMDM0LDggKzIwMzMsOCBAQAogI2VuZGlmCiAKIAkvKiBOb3RlOiBTdGF0aXN0aWNzIGNvdW50ZXJzIGNsZWFyIHdoZW4gcmVhZC4gKi8KLQlscC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JbHAtPnN0YXRzLnR4X2Vycm9ycysrOworCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIH0KIAogc3RhdGljIHZvaWQgaHAxMDBfY2xlYXJfc3RhdHMoc3RydWN0IGhwMTAwX3ByaXZhdGUgKmxwLCBpbnQgaW9hZGRyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCmluZGV4IGIxNTBjMTAuLmVlZWM3YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYworKysgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMKQEAgLTEwNDUsNyArMTA0NSw3IEBACiAJREJHKGRldiwgImNoYW5nZV9tdHUoJWQpIiBOTCwgbmV3X210dSk7CiAKIAlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkgewotCQkvKiBDaGVjayBpZiB3ZSByZWFsbHkgbmVlZCB0byByZWluaXRhbGl6ZSBSWCByaW5nICovCisJCS8qIENoZWNrIGlmIHdlIHJlYWxseSBuZWVkIHRvIHJlaW5pdGlhbGl6ZSBSWCByaW5nICovCiAJCWlmIChlbWFjX3J4X3NrYl9zaXplKG5kZXYtPm10dSkgIT0gZW1hY19yeF9za2Jfc2l6ZShuZXdfbXR1KSkKIAkJCXJldCA9IGVtYWNfcmVzaXplX3J4X3JpbmcoZGV2LCBuZXdfbXR1KTsKIAl9CkBAIC0yMzM5LDExICsyMzM5LDExIEBACiAJCWRlcHNbRU1BQ19ERVBfTURJT19JRFhdLnBoYW5kbGUgPSBkZXYtPm1kaW9fcGg7CiAJaWYgKGRldi0+Ymxpc3QgJiYgZGV2LT5ibGlzdCA+IGVtYWNfYm9vdF9saXN0KQogCQlkZXBzW0VNQUNfREVQX1BSRVZfSURYXS5waGFuZGxlID0gMHhmZmZmZmZmZnU7Ci0JYnVzX3JlZ2lzdGVyX25vdGlmaWVyKCZvZl9wbGF0Zm9ybV9idXNfdHlwZSwgJmVtYWNfb2ZfYnVzX25vdGlmaWVyKTsKKwlidXNfcmVnaXN0ZXJfbm90aWZpZXIoJnBsYXRmb3JtX2J1c190eXBlLCAmZW1hY19vZl9idXNfbm90aWZpZXIpOwogCXdhaXRfZXZlbnRfdGltZW91dChlbWFjX3Byb2JlX3dhaXQsCiAJCQkgICBlbWFjX2NoZWNrX2RlcHMoZGV2LCBkZXBzKSwKIAkJCSAgIEVNQUNfUFJPQkVfREVQX1RJTUVPVVQpOwotCWJ1c191bnJlZ2lzdGVyX25vdGlmaWVyKCZvZl9wbGF0Zm9ybV9idXNfdHlwZSwgJmVtYWNfb2ZfYnVzX25vdGlmaWVyKTsKKwlidXNfdW5yZWdpc3Rlcl9ub3RpZmllcigmcGxhdGZvcm1fYnVzX3R5cGUsICZlbWFjX29mX2J1c19ub3RpZmllcik7CiAJZXJyID0gZW1hY19jaGVja19kZXBzKGRldiwgZGVwcykgPyAwIDogLUVOT0RFVjsKIAlmb3IgKGkgPSAwOyBpIDwgRU1BQ19ERVBfQ09VTlQ7IGkrKykgewogCQlpZiAoZGVwc1tpXS5ub2RlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtdmV0aC5jIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5jCmluZGV4IDdhY2IzZWQuLjI2MDI4NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libXZldGguYworKysgYi9kcml2ZXJzL25ldC9pYm12ZXRoLmMKQEAgLTY3Nyw3ICs2NzcsNyBAQAogCWlmICghYWRhcHRlci0+cG9vbF9jb25maWcpCiAJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKIAotCWZyZWVfaXJxKG5ldGRldi0+aXJxLCBuZXRkZXYpOworCWhfdmlvX3NpZ25hbChhZGFwdGVyLT52ZGV2LT51bml0X2FkZHJlc3MsIFZJT19JUlFfRElTQUJMRSk7CiAKIAlkbyB7CiAJCWxwYXJfcmMgPSBoX2ZyZWVfbG9naWNhbF9sYW4oYWRhcHRlci0+dmRldi0+dW5pdF9hZGRyZXNzKTsKQEAgLTY4OSw2ICs2ODksOCBAQAogCQkJCSAgICAgbHBhcl9yYyk7CiAJfQogCisJZnJlZV9pcnEobmV0ZGV2LT5pcnEsIG5ldGRldik7CisKIAlhZGFwdGVyLT5yeF9ub19idWZmZXIgPSAqKHU2NCopKCgoY2hhciopYWRhcHRlci0+YnVmZmVyX2xpc3RfYWRkcikgKyA0MDk2IC0gOCk7CiAKIAlpYm12ZXRoX2NsZWFudXAoYWRhcHRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5jCmluZGV4IDg2NDM4YjUuLjE4NzYyMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5jCkBAIC02Myw2ICs2Myw3IEBACiBzdGF0aWMgczMyICBpZ2JfcmVzZXRfaW5pdF9zY3JpcHRfODI1NzUoc3RydWN0IGUxMDAwX2h3ICopOwogc3RhdGljIHMzMiAgaWdiX3JlYWRfbWFjX2FkZHJfODI1NzUoc3RydWN0IGUxMDAwX2h3ICopOwogc3RhdGljIHMzMiAgaWdiX3NldF9wY2llX2NvbXBsZXRpb25fdGltZW91dChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3N0YXRpYyBzMzIgIGlnYl9yZXNldF9tZGljbmZnXzgyNTgwKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogCiBzdGF0aWMgY29uc3QgdTE2IGUxMDAwXzgyNTgwX3J4cGJzX3RhYmxlW10gPQogCXsgMzYsIDcyLCAxNDQsIDEsIDIsIDQsIDgsIDE2LApAQCAtNzAsNiArNzEsMzUgQEAKICNkZWZpbmUgRTEwMDBfODI1ODBfUlhQQlNfVEFCTEVfU0laRSBcCiAJKHNpemVvZihlMTAwMF84MjU4MF9yeHBic190YWJsZSkvc2l6ZW9mKHUxNikpCiAKKy8qKgorICogIGlnYl9zZ21paV91c2VzX21kaW9fODI1NzUgLSBEZXRlcm1pbmUgaWYgSTJDIHBpbnMgYXJlIGZvciBleHRlcm5hbCBNRElPCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgQ2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgSTJDIHBpbnMgYXJlIGJlaW5nIHVzZWQgZm9yIEkyQyBvciBhcyBhbgorICogIGV4dGVybmFsIE1ESU8gaW50ZXJmYWNlIHNpbmNlIHRoZSB0d28gb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgorICoqLworc3RhdGljIGJvb2wgaWdiX3NnbWlpX3VzZXNfbWRpb184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXUzMiByZWcgPSAwOworCWJvb2wgZXh0X21kaW8gPSBmYWxzZTsKKworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3NToKKwljYXNlIGUxMDAwXzgyNTc2OgorCQlyZWcgPSByZDMyKEUxMDAwX01ESUMpOworCQlleHRfbWRpbyA9ICEhKHJlZyAmIEUxMDAwX01ESUNfREVTVCk7CisJCWJyZWFrOworCWNhc2UgZTEwMDBfODI1ODA6CisJY2FzZSBlMTAwMF9pMzUwOgorCQlyZWcgPSByZDMyKEUxMDAwX01ESUNORkcpOworCQlleHRfbWRpbyA9ICEhKHJlZyAmIEUxMDAwX01ESUNORkdfRVhUX01ESU8pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIGV4dF9tZGlvOworfQorCiBzdGF0aWMgczMyIGlnYl9nZXRfaW52YXJpYW50c184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogCXN0cnVjdCBlMTAwMF9waHlfaW5mbyAqcGh5ID0gJmh3LT5waHk7CkBAIC0xMzAsMjcgKzE2MCwxNSBAQAogCXN3aXRjaCAoY3RybF9leHQgJiBFMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfTUFTSykgewogCWNhc2UgRTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX1NHTUlJOgogCQlkZXZfc3BlYy0+c2dtaWlfYWN0aXZlID0gdHJ1ZTsKLQkJY3RybF9leHQgfD0gRTEwMDBfQ1RSTF9JMkNfRU5BOwogCQlicmVhazsKIAljYXNlIEUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV8xMDAwQkFTRV9LWDoKIAljYXNlIEUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9QQ0lFX1NFUkRFUzoKIAkJaHctPnBoeS5tZWRpYV90eXBlID0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXM7Ci0JCWN0cmxfZXh0IHw9IEUxMDAwX0NUUkxfSTJDX0VOQTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJY3RybF9leHQgJj0gfkUxMDAwX0NUUkxfSTJDX0VOQTsKIAkJYnJlYWs7CiAJfQogCi0Jd3IzMihFMTAwMF9DVFJMX0VYVCwgY3RybF9leHQpOwotCi0JLyoKLQkgKiBpZiB1c2luZyBpMmMgbWFrZSBjZXJ0YWluIHRoZSBNRElDTkZHIHJlZ2lzdGVyIGlzIGNsZWFyZWQgdG8gcHJldmVudAotCSAqIGNvbW11bmljYXRpb25zIGZyb20gYmVpbmcgbWlzcm91dGVkIHRvIHRoZSBtZGljIHJlZ2lzdGVycwotCSAqLwotCWlmICgoY3RybF9leHQgJiBFMTAwMF9DVFJMX0kyQ19FTkEpICYmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1ODApKQotCQl3cjMyKEUxMDAwX01ESUNORkcsIDApOwotCiAJLyogU2V0IG10YSByZWdpc3RlciBjb3VudCAqLwogCW1hYy0+bXRhX3JlZ19jb3VudCA9IDEyODsKIAkvKiBTZXQgcmFyIGVudHJ5IGNvdW50ICovCkBAIC0yMjgsMTkgKzI0NiwyOSBAQAogCXBoeS0+YXV0b25lZ19tYXNrICAgICAgICA9IEFVVE9ORUdfQURWRVJUSVNFX1NQRUVEX0RFRkFVTFQ7CiAJcGh5LT5yZXNldF9kZWxheV91cyAgICAgID0gMTAwOwogCisJY3RybF9leHQgPSByZDMyKEUxMDAwX0NUUkxfRVhUKTsKKwogCS8qIFBIWSBmdW5jdGlvbiBwb2ludGVycyAqLwogCWlmIChpZ2Jfc2dtaWlfYWN0aXZlXzgyNTc1KGh3KSkgewotCQlwaHktPm9wcy5yZXNldCAgICAgICAgICAgICAgPSBpZ2JfcGh5X2h3X3Jlc2V0X3NnbWlpXzgyNTc1OwotCQlwaHktPm9wcy5yZWFkX3JlZyAgICAgICAgICAgPSBpZ2JfcmVhZF9waHlfcmVnX3NnbWlpXzgyNTc1OwotCQlwaHktPm9wcy53cml0ZV9yZWcgICAgICAgICAgPSBpZ2Jfd3JpdGVfcGh5X3JlZ19zZ21paV84MjU3NTsKLQl9IGVsc2UgaWYgKGh3LT5tYWMudHlwZSA+PSBlMTAwMF84MjU4MCkgewotCQlwaHktPm9wcy5yZXNldCAgICAgICAgICAgICAgPSBpZ2JfcGh5X2h3X3Jlc2V0OwotCQlwaHktPm9wcy5yZWFkX3JlZyAgICAgICAgICAgPSBpZ2JfcmVhZF9waHlfcmVnXzgyNTgwOwotCQlwaHktPm9wcy53cml0ZV9yZWcgICAgICAgICAgPSBpZ2Jfd3JpdGVfcGh5X3JlZ184MjU4MDsKKwkJcGh5LT5vcHMucmVzZXQgICAgICA9IGlnYl9waHlfaHdfcmVzZXRfc2dtaWlfODI1NzU7CisJCWN0cmxfZXh0IHw9IEUxMDAwX0NUUkxfSTJDX0VOQTsKIAl9IGVsc2UgewotCQlwaHktPm9wcy5yZXNldCAgICAgICAgICAgICAgPSBpZ2JfcGh5X2h3X3Jlc2V0OwotCQlwaHktPm9wcy5yZWFkX3JlZyAgICAgICAgICAgPSBpZ2JfcmVhZF9waHlfcmVnX2lncDsKLQkJcGh5LT5vcHMud3JpdGVfcmVnICAgICAgICAgID0gaWdiX3dyaXRlX3BoeV9yZWdfaWdwOworCQlwaHktPm9wcy5yZXNldCAgICAgID0gaWdiX3BoeV9od19yZXNldDsKKwkJY3RybF9leHQgJj0gfkUxMDAwX0NUUkxfSTJDX0VOQTsKKwl9CisKKwl3cjMyKEUxMDAwX0NUUkxfRVhULCBjdHJsX2V4dCk7CisJaWdiX3Jlc2V0X21kaWNuZmdfODI1ODAoaHcpOworCisJaWYgKGlnYl9zZ21paV9hY3RpdmVfODI1NzUoaHcpICYmICFpZ2Jfc2dtaWlfdXNlc19tZGlvXzgyNTc1KGh3KSkgeworCQlwaHktPm9wcy5yZWFkX3JlZyAgID0gaWdiX3JlYWRfcGh5X3JlZ19zZ21paV84MjU3NTsKKwkJcGh5LT5vcHMud3JpdGVfcmVnICA9IGlnYl93cml0ZV9waHlfcmVnX3NnbWlpXzgyNTc1OworCX0gZWxzZSBpZiAoaHctPm1hYy50eXBlID49IGUxMDAwXzgyNTgwKSB7CisJCXBoeS0+b3BzLnJlYWRfcmVnICAgPSBpZ2JfcmVhZF9waHlfcmVnXzgyNTgwOworCQlwaHktPm9wcy53cml0ZV9yZWcgID0gaWdiX3dyaXRlX3BoeV9yZWdfODI1ODA7CisJfSBlbHNlIHsKKwkJcGh5LT5vcHMucmVhZF9yZWcgICA9IGlnYl9yZWFkX3BoeV9yZWdfaWdwOworCQlwaHktPm9wcy53cml0ZV9yZWcgID0gaWdiX3dyaXRlX3BoeV9yZWdfaWdwOwogCX0KIAogCS8qIHNldCBsYW4gaWQgKi8KQEAgLTI5NSw2ICszMjMsMTAgQEAKIAogCWlmIChody0+YnVzLmZ1bmMgPT0gRTEwMDBfRlVOQ18xKQogCQltYXNrID0gRTEwMDBfU1dGV19QSFkxX1NNOworCWVsc2UgaWYgKGh3LT5idXMuZnVuYyA9PSBFMTAwMF9GVU5DXzIpCisJCW1hc2sgPSBFMTAwMF9TV0ZXX1BIWTJfU007CisJZWxzZSBpZiAoaHctPmJ1cy5mdW5jID09IEUxMDAwX0ZVTkNfMykKKwkJbWFzayA9IEUxMDAwX1NXRldfUEhZM19TTTsKIAogCXJldHVybiBpZ2JfYWNxdWlyZV9zd2Z3X3N5bmNfODI1NzUoaHcsIG1hc2spOwogfQpAQCAtMzEyLDYgKzM0NCwxMCBAQAogCiAJaWYgKGh3LT5idXMuZnVuYyA9PSBFMTAwMF9GVU5DXzEpCiAJCW1hc2sgPSBFMTAwMF9TV0ZXX1BIWTFfU007CisJZWxzZSBpZiAoaHctPmJ1cy5mdW5jID09IEUxMDAwX0ZVTkNfMikKKwkJbWFzayA9IEUxMDAwX1NXRldfUEhZMl9TTTsKKwllbHNlIGlmIChody0+YnVzLmZ1bmMgPT0gRTEwMDBfRlVOQ18zKQorCQltYXNrID0gRTEwMDBfU1dGV19QSFkzX1NNOwogCiAJaWdiX3JlbGVhc2Vfc3dmd19zeW5jXzgyNTc1KGh3LCBtYXNrKTsKIH0KQEAgLTM5Miw2ICs0MjgsNyBAQAogCXMzMiAgcmV0X3ZhbCA9IDA7CiAJdTE2IHBoeV9pZDsKIAl1MzIgY3RybF9leHQ7CisJdTMyIG1kaWM7CiAKIAkvKgogCSAqIEZvciBTR01JSSBQSFlzLCB3ZSB0cnkgdGhlIGxpc3Qgb2YgcG9zc2libGUgYWRkcmVzc2VzIHVudGlsCkBAIC00MDYsNiArNDQzLDI5IEBACiAJCWdvdG8gb3V0OwogCX0KIAorCWlmIChpZ2Jfc2dtaWlfdXNlc19tZGlvXzgyNTc1KGh3KSkgeworCQlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCQljYXNlIGUxMDAwXzgyNTc1OgorCQljYXNlIGUxMDAwXzgyNTc2OgorCQkJbWRpYyA9IHJkMzIoRTEwMDBfTURJQyk7CisJCQltZGljICY9IEUxMDAwX01ESUNfUEhZX01BU0s7CisJCQlwaHktPmFkZHIgPSBtZGljID4+IEUxMDAwX01ESUNfUEhZX1NISUZUOworCQkJYnJlYWs7CisJCWNhc2UgZTEwMDBfODI1ODA6CisJCWNhc2UgZTEwMDBfaTM1MDoKKwkJCW1kaWMgPSByZDMyKEUxMDAwX01ESUNORkcpOworCQkJbWRpYyAmPSBFMTAwMF9NRElDTkZHX1BIWV9NQVNLOworCQkJcGh5LT5hZGRyID0gbWRpYyA+PiBFMTAwMF9NRElDTkZHX1BIWV9TSElGVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0X3ZhbCA9IC1FMTAwMF9FUlJfUEhZOworCQkJZ290byBvdXQ7CisJCQlicmVhazsKKwkJfQorCQlyZXRfdmFsID0gaWdiX2dldF9waHlfaWQoaHcpOworCQlnb3RvIG91dDsKKwl9CisKIAkvKiBQb3dlciBvbiBzZ21paSBwaHkgaWYgaXQgaXMgZGlzYWJsZWQgKi8KIAljdHJsX2V4dCA9IHJkMzIoRTEwMDBfQ1RSTF9FWFQpOwogCXdyMzIoRTEwMDBfQ1RSTF9FWFQsIGN0cmxfZXh0ICYgfkUxMDAwX0NUUkxfRVhUX1NEUDNfREFUQSk7CkBAIC0xNDkzLDYgKzE1NTMsNDMgQEAKIH0KIAogLyoqCisgKiAgaWdiX3Jlc2V0X21kaWNuZmdfODI1ODAgLSBSZXNldCBNRElDTkZHIGRlc3RpbmF0aW9uIGFuZCBjb21fbWRpbyBiaXRzCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgVGhpcyByZXNldHMgdGhlIHRoZSBNRElDTkZHLkRlc3RpbmF0aW9uIGFuZCBNRElDTkZHLkNvbV9NRElPIGJpdHMgYmFzZWQgb24KKyAqICB0aGUgdmFsdWVzIGZvdW5kIGluIHRoZSBFRVBST00uICBUaGlzIGFkZHJlc3NlcyBhbiBpc3N1ZSBpbiB3aGljaCB0aGVzZQorICogIGJpdHMgYXJlIG5vdCByZXN0b3JlZCBmcm9tIEVFUFJPTSBhZnRlciByZXNldC4KKyAqKi8KK3N0YXRpYyBzMzIgaWdiX3Jlc2V0X21kaWNuZmdfODI1ODAoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwlzMzIgcmV0X3ZhbCA9IDA7CisJdTMyIG1kaWNuZmc7CisJdTE2IG52bV9kYXRhOworCisJaWYgKGh3LT5tYWMudHlwZSAhPSBlMTAwMF84MjU4MCkKKwkJZ290byBvdXQ7CisJaWYgKCFpZ2Jfc2dtaWlfYWN0aXZlXzgyNTc1KGh3KSkKKwkJZ290byBvdXQ7CisKKwlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZChodywgTlZNX0lOSVRfQ09OVFJPTDNfUE9SVF9BICsKKwkJCQkgICBOVk1fODI1ODBfTEFOX0ZVTkNfT0ZGU0VUKGh3LT5idXMuZnVuYyksIDEsCisJCQkJICAgJm52bV9kYXRhKTsKKwlpZiAocmV0X3ZhbCkgeworCQlod19kYmcoIk5WTSBSZWFkIEVycm9yXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJbWRpY25mZyA9IHJkMzIoRTEwMDBfTURJQ05GRyk7CisJaWYgKG52bV9kYXRhICYgTlZNX1dPUkQyNF9FWFRfTURJTykKKwkJbWRpY25mZyB8PSBFMTAwMF9NRElDTkZHX0VYVF9NRElPOworCWlmIChudm1fZGF0YSAmIE5WTV9XT1JEMjRfQ09NX01ESU8pCisJCW1kaWNuZmcgfD0gRTEwMDBfTURJQ05GR19DT01fTURJTzsKKwl3cjMyKEUxMDAwX01ESUNORkcsIG1kaWNuZmcpOworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKICAqICBpZ2JfcmVzZXRfaHdfODI1ODAgLSBSZXNldCBoYXJkd2FyZQogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgpAQCAtMTU2Nyw2ICsxNjY0LDEwIEBACiAJd3IzMihFMTAwMF9JTUMsIDB4ZmZmZmZmZmYpOwogCWljciA9IHJkMzIoRTEwMDBfSUNSKTsKIAorCXJldF92YWwgPSBpZ2JfcmVzZXRfbWRpY25mZ184MjU4MChodyk7CisJaWYgKHJldF92YWwpCisJCWh3X2RiZygiQ291bGQgbm90IHJlc2V0IE1ESUNORkcgYmFzZWQgb24gRUVQUk9NXG4iKTsKKwogCS8qIEluc3RhbGwgYW55IGFsdGVybmF0ZSBNQUMgYWRkcmVzcyBpbnRvIFJBUjAgKi8KIAlyZXRfdmFsID0gaWdiX2NoZWNrX2FsdF9tYWNfYWRkcihodyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9kZWZpbmVzLmggYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfZGVmaW5lcy5oCmluZGV4IDI0ZDliZTYuLmJiZDJlYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9kZWZpbmVzLmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX2RlZmluZXMuaApAQCAtMTY0LDYgKzE2NCw4IEBACiAjZGVmaW5lIEUxMDAwX1NXRldfRUVQX1NNICAgMHgxCiAjZGVmaW5lIEUxMDAwX1NXRldfUEhZMF9TTSAgMHgyCiAjZGVmaW5lIEUxMDAwX1NXRldfUEhZMV9TTSAgMHg0CisjZGVmaW5lIEUxMDAwX1NXRldfUEhZMl9TTSAgMHgyMAorI2RlZmluZSBFMTAwMF9TV0ZXX1BIWTNfU00gIDB4NDAKIAogLyogRkFDVFBTIERlZmluaXRpb25zICovCiAvKiBEZXZpY2UgQ29udHJvbCAqLwpAQCAtNDY2LDYgKzQ2OCwxMSBAQAogCiAjZGVmaW5lIEUxMDAwX1RJTUlOQ0FfMTZOU19TSElGVCAyNAogCisjZGVmaW5lIEUxMDAwX01ESUNORkdfRVhUX01ESU8gICAgMHg4MDAwMDAwMCAgICAgIC8qIE1ESSBleHQvaW50IGRlc3RpbmF0aW9uICovCisjZGVmaW5lIEUxMDAwX01ESUNORkdfQ09NX01ESU8gICAgMHg0MDAwMDAwMCAgICAgIC8qIE1ESSBzaGFyZWQgdy8gbGFuIDAgKi8KKyNkZWZpbmUgRTEwMDBfTURJQ05GR19QSFlfTUFTSyAgICAweDAzRTAwMDAwCisjZGVmaW5lIEUxMDAwX01ESUNORkdfUEhZX1NISUZUICAgMjEKKwogLyogUENJIEV4cHJlc3MgQ29udHJvbCAqLwogI2RlZmluZSBFMTAwMF9HQ1JfQ01QTF9UTU9VVF9NQVNLICAgICAgIDB4MDAwMEYwMDAKICNkZWZpbmUgRTEwMDBfR0NSX0NNUExfVE1PVVRfMTBtcyAgICAgICAweDAwMDAxMDAwCkBAIC01NjMsNiArNTcwLDEwIEBACiAKICNkZWZpbmUgTlZNXzgyNTgwX0xBTl9GVU5DX09GRlNFVChhKSAoYSA/ICgweDQwICsgKDB4NDAgKiBhKSkgOiAwKQogCisvKiBNYXNrIGJpdHMgZm9yIGZpZWxkcyBpbiBXb3JkIDB4MjQgb2YgdGhlIE5WTSAqLworI2RlZmluZSBOVk1fV09SRDI0X0NPTV9NRElPICAgICAgICAgMHgwMDA4IC8qIE1ESU8gaW50ZXJmYWNlIHNoYXJlZCAqLworI2RlZmluZSBOVk1fV09SRDI0X0VYVF9NRElPICAgICAgICAgMHgwMDA0IC8qIE1ESU8gYWNjZXNzZXMgcm91dGVkIGV4dGVybmFsICovCisKIC8qIE1hc2sgYml0cyBmb3IgZmllbGRzIGluIFdvcmQgMHgwZiBvZiB0aGUgTlZNICovCiAjZGVmaW5lIE5WTV9XT1JEMEZfUEFVU0VfTUFTSyAgICAgICAweDMwMDAKICNkZWZpbmUgTlZNX1dPUkQwRl9BU01fRElSICAgICAgICAgIDB4MjAwMApAQCAtNjk2LDEyICs3MDcsMTcgQEAKICNkZWZpbmUgTTg4RUMwMThfRVBTQ1JfRE9XTlNISUZUX0NPVU5URVJfNVggICAgMHgwODAwCiAKIC8qIE1ESSBDb250cm9sICovCisjZGVmaW5lIEUxMDAwX01ESUNfREFUQV9NQVNLIDB4MDAwMEZGRkYKKyNkZWZpbmUgRTEwMDBfTURJQ19SRUdfTUFTSyAgMHgwMDFGMDAwMAogI2RlZmluZSBFMTAwMF9NRElDX1JFR19TSElGVCAxNgorI2RlZmluZSBFMTAwMF9NRElDX1BIWV9NQVNLICAweDAzRTAwMDAwCiAjZGVmaW5lIEUxMDAwX01ESUNfUEhZX1NISUZUIDIxCiAjZGVmaW5lIEUxMDAwX01ESUNfT1BfV1JJVEUgIDB4MDQwMDAwMDAKICNkZWZpbmUgRTEwMDBfTURJQ19PUF9SRUFEICAgMHgwODAwMDAwMAogI2RlZmluZSBFMTAwMF9NRElDX1JFQURZICAgICAweDEwMDAwMDAwCisjZGVmaW5lIEUxMDAwX01ESUNfSU5UX0VOICAgIDB4MjAwMDAwMDAKICNkZWZpbmUgRTEwMDBfTURJQ19FUlJPUiAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBFMTAwMF9NRElDX0RFU1QgICAgICAweDgwMDAwMDAwCiAKIC8qIFNlckRlcyBDb250cm9sICovCiAjZGVmaW5lIEUxMDAwX0dFTl9DVExfUkVBRFkgICAgICAgICAgICAgMHg4MDAwMDAwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYwppbmRleCBmMmViZjkyNy4uMjZiZjZhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMKQEAgLTE4MjMsMTIgKzE4MjMsMTAgQEAKIAkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIm9ubGluZSB0ZXN0aW5nIHN0YXJ0aW5nXG4iKTsKIAogCQkvKiBQSFkgaXMgcG93ZXJlZCBkb3duIHdoZW4gaW50ZXJmYWNlIGlzIGRvd24gKi8KLQkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKKwkJaWYgKGlmX3J1bm5pbmcgJiYgaWdiX2xpbmtfdGVzdChhZGFwdGVyLCAmZGF0YVs0XSkpCisJCQlldGhfdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOworCQllbHNlCiAJCQlkYXRhWzRdID0gMDsKLQkJfSBlbHNlIHsKLQkJCWlmIChpZ2JfbGlua190ZXN0KGFkYXB0ZXIsICZkYXRhWzRdKSkKLQkJCQlldGhfdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwotCQl9CiAKIAkJLyogT25saW5lIHRlc3RzIGFyZW4ndCBydW47IHBhc3MgYnkgZGVmYXVsdCAqLwogCQlkYXRhWzBdID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKaW5kZXggMzg4MTkxOC4uZGY1ZGNkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKQEAgLTYzMCw5ICs2MzAsNiBAQAogCQkJZm9yICg7IGkgPCBhZGFwdGVyLT5yc3NfcXVldWVzOyBpKyspCiAJCQkJYWRhcHRlci0+cnhfcmluZ1tpXS0+cmVnX2lkeCA9IHJiYXNlX29mZnNldCArCiAJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFfSURYXzgyNTc2KGkpOwotCQkJZm9yICg7IGogPCBhZGFwdGVyLT5yc3NfcXVldWVzOyBqKyspCi0JCQkJYWRhcHRlci0+dHhfcmluZ1tqXS0+cmVnX2lkeCA9IHJiYXNlX29mZnNldCArCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFfSURYXzgyNTc2KGopOwogCQl9CiAJY2FzZSBlMTAwMF84MjU3NToKIAljYXNlIGUxMDAwXzgyNTgwOgpAQCAtOTk2LDcgKzk5MywxMCBAQAogCiAJLyogTnVtYmVyIG9mIHN1cHBvcnRlZCBxdWV1ZXMuICovCiAJYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9IGFkYXB0ZXItPnJzc19xdWV1ZXM7Ci0JYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyA9IGFkYXB0ZXItPnJzc19xdWV1ZXM7CisJaWYgKGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpCisJCWFkYXB0ZXItPm51bV90eF9xdWV1ZXMgPSAxOworCWVsc2UKKwkJYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyA9IGFkYXB0ZXItPnJzc19xdWV1ZXM7CiAKIAkvKiBzdGFydCB3aXRoIG9uZSB2ZWN0b3IgZm9yIGV2ZXJ5IHJ4IHF1ZXVlICovCiAJbnVtdmVjcyA9IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7CkBAIC0xMjkwLDcgKzEyOTAsMTMgQEAKIAl3cjMyKEUxMDAwX0lBTSwgMCk7CiAJd3IzMihFMTAwMF9JTUMsIH4wKTsKIAl3cmZsKCk7Ci0Jc3luY2hyb25pemVfaXJxKGFkYXB0ZXItPnBkZXYtPmlycSk7CisJaWYgKGFkYXB0ZXItPm1zaXhfZW50cmllcykgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9xX3ZlY3RvcnM7IGkrKykKKwkJCXN5bmNocm9uaXplX2lycShhZGFwdGVyLT5tc2l4X2VudHJpZXNbaV0udmVjdG9yKTsKKwl9IGVsc2UgeworCQlzeW5jaHJvbml6ZV9pcnEoYWRhcHRlci0+cGRldi0+aXJxKTsKKwl9CiB9CiAKIC8qKgpAQCAtMTcyMiw2ICsxNzI4LDE1IEBACiAJdTE2IGVlcHJvbV9hcG1lX21hc2sgPSBJR0JfRUVQUk9NX0FQTUU7CiAJdTMyIHBhcnRfbnVtOwogCisJLyogQ2F0Y2ggYnJva2VuIGhhcmR3YXJlIHRoYXQgcHV0IHRoZSB3cm9uZyBWRiBkZXZpY2UgSUQgaW4KKwkgKiB0aGUgUENJZSBTUi1JT1YgY2FwYWJpbGl0eS4KKwkgKi8KKwlpZiAocGRldi0+aXNfdmlydGZuKSB7CisJCVdBUk4oMSwgS0VSTl9FUlIgIiVzICglaHg6JWh4KSBzaG91bGQgbm90IGJlIGEgVkYhXG4iLAorCQkgICAgIHBjaV9uYW1lKHBkZXYpLCBwZGV2LT52ZW5kb3IsIHBkZXYtPmRldmljZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMjA5MSw5ICsyMTA2LDYgQEAKICNpZmRlZiBDT05GSUdfUENJX0lPVgogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAotCWlmIChhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50ID4gNykKLQkJYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCA9IDc7Ci0KIAlpZiAoYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCkgewogCQlhZGFwdGVyLT52Zl9kYXRhID0ga2NhbGxvYyhhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50LAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHZmX2RhdGFfc3RvcmFnZSksCkBAIC0yMjU4LDcgKzIyNzAsNyBAQAogCiAjaWZkZWYgQ09ORklHX1BDSV9JT1YKIAlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTc2KQotCQlhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50ID0gbWF4X3ZmczsKKwkJYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCA9IChtYXhfdmZzID4gNykgPyA3IDogbWF4X3ZmczsKIAogI2VuZGlmIC8qIENPTkZJR19QQ0lfSU9WICovCiAJYWRhcHRlci0+cnNzX3F1ZXVlcyA9IG1pbl90KHUzMiwgSUdCX01BWF9SWF9RVUVVRVMsIG51bV9vbmxpbmVfY3B1cygpKTsKQEAgLTI3MjAsMTQgKzI3MzIsMTYgQEAKIAl9CiAJaWdiX3ZtbV9jb250cm9sKGFkYXB0ZXIpOwogCi0JbXJxYyB8PSAoRTEwMDBfTVJRQ19SU1NfRklFTERfSVBWNCB8Ci0JCSBFMTAwMF9NUlFDX1JTU19GSUVMRF9JUFY0X1RDUCk7Ci0JbXJxYyB8PSAoRTEwMDBfTVJRQ19SU1NfRklFTERfSVBWNiB8Ci0JCSBFMTAwMF9NUlFDX1JTU19GSUVMRF9JUFY2X1RDUCk7Ci0JbXJxYyB8PSAoRTEwMDBfTVJRQ19SU1NfRklFTERfSVBWNF9VRFAgfAotCQkgRTEwMDBfTVJRQ19SU1NfRklFTERfSVBWNl9VRFApOwotCW1ycWMgfD0gKEUxMDAwX01SUUNfUlNTX0ZJRUxEX0lQVjZfVURQX0VYIHwKLQkJIEUxMDAwX01SUUNfUlNTX0ZJRUxEX0lQVjZfVENQX0VYKTsKKwkvKgorCSAqIEdlbmVyYXRlIFJTUyBoYXNoIGJhc2VkIG9uIFRDUCBwb3J0IG51bWJlcnMgYW5kL29yCisJICogSVB2NC92NiBzcmMgYW5kIGRzdCBhZGRyZXNzZXMgc2luY2UgVURQIGNhbm5vdCBiZQorCSAqIGhhc2hlZCByZWxpYWJseSBkdWUgdG8gSVAgZnJhZ21lbnRhdGlvbgorCSAqLworCW1ycWMgfD0gRTEwMDBfTVJRQ19SU1NfRklFTERfSVBWNCB8CisJCUUxMDAwX01SUUNfUlNTX0ZJRUxEX0lQVjRfVENQIHwKKwkJRTEwMDBfTVJRQ19SU1NfRklFTERfSVBWNiB8CisJCUUxMDAwX01SUUNfUlNTX0ZJRUxEX0lQVjZfVENQIHwKKwkJRTEwMDBfTVJRQ19SU1NfRklFTERfSVBWNl9UQ1BfRVg7CiAKIAl3cjMyKEUxMDAwX01SUUMsIG1ycWMpOwogfQpAQCAtNDk3Nyw2ICs0OTkxLDEwIEBACiAKIHN0YXRpYyBpbnQgaWdiX3NldF92Zl9tYWNfYWRkcihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqbXNnLCBpbnQgdmYpCiB7CisJLyoKKwkgKiBUaGUgVkYgTUFDIEFkZHJlc3MgaXMgc3RvcmVkIGluIGEgcGFja2VkIGFycmF5IG9mIGJ5dGVzCisJICogc3RhcnRpbmcgYXQgdGhlIHNlY29uZCAzMiBiaXQgd29yZCBvZiB0aGUgbXNnIGFycmF5CisJICovCiAJdW5zaWduZWQgY2hhciAqYWRkciA9IChjaGFyICopJm1zZ1sxXTsKIAlpbnQgZXJyID0gLTE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYnZmL25ldGRldi5jIGIvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMKaW5kZXggNWUyYjJhOC4uZWM4MDhmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMKQEAgLTQ4LDcgKzQ4LDcgQEAKICNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMC4wLWswIgogY2hhciBpZ2J2Zl9kcml2ZXJfbmFtZVtdID0gImlnYnZmIjsKIGNvbnN0IGNoYXIgaWdidmZfZHJpdmVyX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OOwotc3RydWN0IHBtX3Fvc19yZXF1ZXN0X2xpc3QgKmlnYnZmX2RyaXZlcl9wbV9xb3NfcmVxOworc3RhdGljIHN0cnVjdCBwbV9xb3NfcmVxdWVzdF9saXN0IGlnYnZmX2RyaXZlcl9wbV9xb3NfcmVxOwogc3RhdGljIGNvbnN0IGNoYXIgaWdidmZfZHJpdmVyX3N0cmluZ1tdID0KIAkJCQkiSW50ZWwoUikgVmlydHVhbCBGdW5jdGlvbiBOZXR3b3JrIERyaXZlciI7CiBzdGF0aWMgY29uc3QgY2hhciBpZ2J2Zl9jb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgKGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIjsKQEAgLTI3NTEsNyArMjc1MSw3IEBACiAJCWRldl9pbmZvKCZwZGV2LT5kZXYsCiAJCQkgIlBGIHN0aWxsIGluIHJlc2V0IHN0YXRlLCBhc3NpZ25pbmcgbmV3IGFkZHJlc3MuIgogCQkJICIgSXMgdGhlIFBGIGludGVyZmFjZSB1cD9cbiIpOwotCQlyYW5kb21fZXRoZXJfYWRkcihody0+bWFjLmFkZHIpOworCQlkZXZfaHdfYWRkcl9yYW5kb20oYWRhcHRlci0+bmV0ZGV2LCBody0+bWFjLmFkZHIpOwogCX0gZWxzZSB7CiAJCWVyciA9IGh3LT5tYWMub3BzLnJlYWRfbWFjX2FkZHIoaHcpOwogCQlpZiAoZXJyKSB7CkBAIC0yOTAyLDggKzI5MDIsOCBAQAogCXByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBpZ2J2Zl9jb3B5cmlnaHQpOwogCiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmaWdidmZfZHJpdmVyKTsKLQlpZ2J2Zl9kcml2ZXJfcG1fcW9zX3JlcSA9IHBtX3Fvc19hZGRfcmVxdWVzdChQTV9RT1NfQ1BVX0RNQV9MQVRFTkNZLAotCSAgICAgICAgICAgICAgICAgICAgICAgUE1fUU9TX0RFRkFVTFRfVkFMVUUpOworCXBtX3Fvc19hZGRfcmVxdWVzdCgmaWdidmZfZHJpdmVyX3BtX3Fvc19yZXEsIFBNX1FPU19DUFVfRE1BX0xBVEVOQ1ksCisJCQkgICBQTV9RT1NfREVGQVVMVF9WQUxVRSk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjkxOCw4ICsyOTE4LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpZ2J2Zl9leGl0X21vZHVsZSh2b2lkKQogewogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaWdidmZfZHJpdmVyKTsKLQlwbV9xb3NfcmVtb3ZlX3JlcXVlc3QoaWdidmZfZHJpdmVyX3BtX3Fvc19yZXEpOwotCWlnYnZmX2RyaXZlcl9wbV9xb3NfcmVxID0gTlVMTDsKKwlwbV9xb3NfcmVtb3ZlX3JlcXVlc3QoJmlnYnZmX2RyaXZlcl9wbV9xb3NfcmVxKTsKIH0KIG1vZHVsZV9leGl0KGlnYnZmX2V4aXRfbW9kdWxlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaW9jMy1ldGguYyBiL2RyaXZlcnMvbmV0L2lvYzMtZXRoLmMKaW5kZXggZTNiNWU5NC4uMGIzZjZkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaW9jMy1ldGguYworKysgYi9kcml2ZXJzL25ldC9pb2MzLWV0aC5jCkBAIC04Miw3ICs4Miw2IEBACiAJc3RydWN0IGlvYzNfZXR4ZCAqdHhyOwogCXN0cnVjdCBza19idWZmICpyeF9za2JzWzUxMl07CiAJc3RydWN0IHNrX2J1ZmYgKnR4X3NrYnNbMTI4XTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAlpbnQgcnhfY2k7CQkJLyogUlggY29uc3VtZXIgaW5kZXggKi8KIAlpbnQgcnhfcGk7CQkJLyogUlggcHJvZHVjZXIgaW5kZXggKi8KIAlpbnQgdHhfY2k7CQkJLyogVFggY29uc3VtZXIgaW5kZXggKi8KQEAgLTUwNCw4ICs1MDMsOCBAQAogCXN0cnVjdCBpb2MzX3ByaXZhdGUgKmlwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaW9jMyAqaW9jMyA9IGlwLT5yZWdzOwogCi0JaXAtPnN0YXRzLmNvbGxpc2lvbnMgKz0gKGlvYzNfcl9ldGNkYygpICYgRVRDRENfQ09MTENOVF9NQVNLKTsKLQlyZXR1cm4gJmlwLT5zdGF0czsKKwlkZXYtPnN0YXRzLmNvbGxpc2lvbnMgKz0gKGlvYzNfcl9ldGNkYygpICYgRVRDRENfQ09MTENOVF9NQVNLKTsKKwlyZXR1cm4gJmRldi0+c3RhdHM7CiB9CiAKIHN0YXRpYyB2b2lkIGlvYzNfdGNwdWRwX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVpbnQzMl90IGh3c3VtLCBpbnQgbGVuKQpAQCAtNTc2LDggKzU3NSw5IEBACiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpb2MzX3J4KHN0cnVjdCBpb2MzX3ByaXZhdGUgKmlwKQorc3RhdGljIGlubGluZSB2b2lkIGlvYzNfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgaW9jM19wcml2YXRlICppcCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKm5ld19za2I7CiAJc3RydWN0IGlvYzMgKmlvYzMgPSBpcC0+cmVnczsKIAlpbnQgcnhfZW50cnksIG5fZW50cnksIGxlbjsKQEAgLTU5OCwxMyArNTk4LDEzIEBACiAJCWlmIChlcnIgJiBFUlhCVUZfR09PRFBLVCkgewogCQkJbGVuID0gKCh3MCA+PiBFUlhCVUZfQllURUNOVF9TSElGVCkgJiAweDdmZikgLSA0OwogCQkJc2tiX3RyaW0oc2tiLCBsZW4pOwotCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgcHJpdl9uZXRkZXYoaXApKTsKKwkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAKIAkJCW5ld19za2IgPSBpb2MzX2FsbG9jX3NrYihSWF9CVUZfQUxMT0NfU0laRSwgR0ZQX0FUT01JQyk7CiAJCQlpZiAoIW5ld19za2IpIHsKIAkJCQkvKiBPdWNoLCBkcm9wIHBhY2tldCBhbmQganVzdCByZWN5Y2xlIHBhY2tldAogCQkJCSAgIHRvIGtlZXAgdGhlIHJpbmcgZmlsbGVkLiAgKi8KLQkJCQlpcC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkJCW5ld19za2IgPSBza2I7CiAJCQkJZ290byBuZXh0OwogCQkJfQpAQCAtNjIyLDE5ICs2MjIsMTkgQEAKIAkJCXJ4YiA9IChzdHJ1Y3QgaW9jM19lcnhidWYgKikgbmV3X3NrYi0+ZGF0YTsKIAkJCXNrYl9yZXNlcnZlKG5ld19za2IsIFJYX09GRlNFVCk7CiAKLQkJCWlwLT5zdGF0cy5yeF9wYWNrZXRzKys7CQkvKiBTdGF0aXN0aWNzICovCi0JCQlpcC0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuOworCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CQkvKiBTdGF0aXN0aWNzICovCisJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKIAkJfSBlbHNlIHsKLSAJCQkvKiBUaGUgZnJhbWUgaXMgaW52YWxpZCBhbmQgdGhlIHNrYiBuZXZlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhY2hlZCB0aGUgbmV0d29yayBsYXllciBzbyB3ZSBjYW4ganVzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjeWNsZSBpdC4gICovCi0gCQkJbmV3X3NrYiA9IHNrYjsKLSAJCQlpcC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkvKiBUaGUgZnJhbWUgaXMgaW52YWxpZCBhbmQgdGhlIHNrYiBuZXZlcgorCQkJICAgcmVhY2hlZCB0aGUgbmV0d29yayBsYXllciBzbyB3ZSBjYW4ganVzdAorCQkJICAgcmVjeWNsZSBpdC4gICovCisJCQluZXdfc2tiID0gc2tiOworCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJfQogCQlpZiAoZXJyICYgRVJYQlVGX0NSQ0VSUikJLyogU3RhdGlzdGljcyAqLwotCQkJaXAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogCQlpZiAoZXJyICYgRVJYQlVGX0ZSQU1FUlIpCi0JCQlpcC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwogbmV4dDoKIAkJaXAtPnJ4X3NrYnNbbl9lbnRyeV0gPSBuZXdfc2tiOwogCQlyeHJbbl9lbnRyeV0gPSBjcHVfdG9fYmU2NChpb2MzX21hcChyeGIsIDEpKTsKQEAgLTY1Miw4ICs2NTIsOSBAQAogCWlwLT5yeF9jaSA9IHJ4X2VudHJ5OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaW9jM190eChzdHJ1Y3QgaW9jM19wcml2YXRlICppcCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb2MzX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGlvYzNfcHJpdmF0ZSAqaXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgcGFja2V0cywgYnl0ZXM7CiAJc3RydWN0IGlvYzMgKmlvYzMgPSBpcC0+cmVnczsKIAlpbnQgdHhfZW50cnksIG9fZW50cnk7CkBAIC02ODEsMTIgKzY4MiwxMiBAQAogCQl0eF9lbnRyeSA9IChldGNpciA+PiA3KSAmIDEyNzsKIAl9CiAKLQlpcC0+c3RhdHMudHhfcGFja2V0cyArPSBwYWNrZXRzOwotCWlwLT5zdGF0cy50eF9ieXRlcyArPSBieXRlczsKKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMgKz0gcGFja2V0czsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGJ5dGVzOwogCWlwLT50eHFsZW4gLT0gcGFja2V0czsKIAogCWlmIChpcC0+dHhxbGVuIDwgMTI4KQotCQluZXRpZl93YWtlX3F1ZXVlKHByaXZfbmV0ZGV2KGlwKSk7CisJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAogCWlwLT50eF9jaSA9IG9fZW50cnk7CiAJc3Bpbl91bmxvY2soJmlwLT5pb2MzX2xvY2spOwpAQCAtNjk5LDkgKzcwMCw5IEBACiAgKiB3aXRoIHN1Y2ggZXJyb3IgaW50ZXJydXB0cyBpZiBzb21ldGhpbmcgcmVhbGx5IGdvZXMgd3JvbmcsIHNvIHdlIG1pZ2h0CiAgKiBhbHNvIGNvbnNpZGVyIHRvIHRha2UgdGhlIGludGVyZmFjZSBkb3duLgogICovCi1zdGF0aWMgdm9pZCBpb2MzX2Vycm9yKHN0cnVjdCBpb2MzX3ByaXZhdGUgKmlwLCB1MzIgZWlzcikKK3N0YXRpYyB2b2lkIGlvYzNfZXJyb3Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGVpc3IpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXZfbmV0ZGV2KGlwKTsKKwlzdHJ1Y3QgaW9jM19wcml2YXRlICppcCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgY2hhciAqaWZhY2UgPSBkZXYtPm5hbWU7CiAKIAlzcGluX2xvY2soJmlwLT5pb2MzX2xvY2spOwpAQCAtNzQ3LDExICs3NDgsMTEgQEAKIAogCWlmIChlaXNyICYgKEVJU1JfUlhPRkxPIHwgRUlTUl9SWEJVRk9GTE8gfCBFSVNSX1JYTUVNRVJSIHwKIAkgICAgICAgICAgICBFSVNSX1JYUEFSRVJSIHwgRUlTUl9UWEJVRlVGTE8gfCBFSVNSX1RYTUVNRVJSKSkKLQkJaW9jM19lcnJvcihpcCwgZWlzcik7CisJCWlvYzNfZXJyb3IoZGV2LCBlaXNyKTsKIAlpZiAoZWlzciAmIEVJU1JfUlhUSU1FUklOVCkKLQkJaW9jM19yeChpcCk7CisJCWlvYzNfcngoZGV2KTsKIAlpZiAoZWlzciAmIEVJU1JfVFhFWFBMSUNJVCkKLQkJaW9jM190eChpcCk7CisJCWlvYzNfdHgoZGV2KTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuaCBiL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuaAppbmRleCAwZGJkMTkzLi4zNmMzMDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmgKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5oCkBAIC0yNzMsNyArMjczLDcgQEAKICAgX191OCBjb250cm9sOyAgICAgICAgICAgICAgICAgLypTbG90IGNvbnRyb2wvc3RhdHVzIHNlZSBiZWxvdyAqLwogICBfX3UzMiBhZGRyZXNzOyAgICAgICAgICAgICAgICAvKlNsb3QgYnVmZmVyIGFkZHJlc3MgKi8KIH0KLV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK19fcGFja2VkOwogCiAjZGVmaW5lIE9CT0VfTlRBU0tTIE9CT0VfVFhSSU5HX09GRlNFVF9JTl9TTE9UUwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmggYi9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmgKaW5kZXggYWMwNDQzZC4uNThkZGI1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5oCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuaApAQCAtMTI1LDcgKzEyNSw3IEBACiAJX191OCAgYm1BZGRpdGlvbmFsQk9GczsKIAlfX3U4ICBiSXJkYVJhdGVTbmlmZjsKIAlfX3U4ICBiTWF4VW5pY2FzdExpc3Q7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIGNsYXNzIHNwZWNpZmljIGludGVyZmFjZSByZXF1ZXN0IHRvIGdldCB0aGUgSXJEQS1VU0IgY2xhc3MgZGVzY3JpcHRvcgogICogKDYuMi41LCBVU0ItSXJEQSBjbGFzcyBzcGVjIDEuMCkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEva3M5NTktc2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jCmluZGV4IGI1NGQzYjQuLjEwNDYwMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEva3M5NTktc2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYwpAQCAtMTU0LDcgKzE1NCw3IEBACiAJX19sZTMyIGJhdWRyYXRlOwkvKiBiYXVkIHJhdGUsIGxpdHRsZSBlbmRpYW4gKi8KIAlfX3U4IGZsYWdzOwogCV9fdTggcmVzZXJ2ZWRbM107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgS1NfREFUQV81X0JJVFMgMHgwMAogI2RlZmluZSBLU19EQVRBXzZfQklUUyAweDAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2tzZGF6emxlLXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYwppbmRleCA4ZDcxM2ViLi45Y2MxNDJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2tzZGF6emxlLXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEva3NkYXp6bGUtc2lyLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogCV9fbGUzMiBiYXVkcmF0ZTsJLyogYmF1ZCByYXRlLCBsaXR0bGUgZW5kaWFuICovCiAJX191OCBmbGFnczsKIAlfX3U4IHJlc2VydmVkWzNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEtTX0RBVEFfNV9CSVRTIDB4MDAKICNkZWZpbmUgS1NfREFUQV82X0JJVFMgMHgwMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zaF9pcmRhLmMgYi9kcml2ZXJzL25ldC9pcmRhL3NoX2lyZGEuYwppbmRleCA5YTgyOGIwLi5lZGQ1NjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3NoX2lyZGEuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3NoX2lyZGEuYwpAQCAtNzQ5LDcgKzc0OSw3IEBACiAJc3RydWN0IHNoX2lyZGFfc2VsZiAqc2VsZjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAljaGFyIGNsa19uYW1lWzhdOwotCXVuc2lnbmVkIGludCBpcnE7CisJaW50IGlycTsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3NoX3Npci5jIGIvZHJpdmVycy9uZXQvaXJkYS9zaF9zaXIuYwppbmRleCA1YzVmOTlkLi4wMGIzOGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3NoX3Npci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc2hfc2lyLmMKQEAgLTcwOSw3ICs3MDksNyBAQAogCXN0cnVjdCBzaF9zaXJfc2VsZiAqc2VsZjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAljaGFyIGNsa19uYW1lWzhdOwotCXVuc2lnbmVkIGludCBpcnE7CisJaW50IGlycTsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jCmluZGV4IGQ2N2U0ODQuLjg1MGNhMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jCkBAIC0yODQ4LDkgKzI4NDgsNyBAQAogCXVuc2lnbmVkIHNob3J0IHNzX2RldmljZSA9IDB4MDAwMDsKIAlpbnQgcmV0ID0gMDsKIAotCWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGRldik7Ci0KLQl3aGlsZSAoZGV2ICE9IE5VTEwpIHsKKwlmb3JfZWFjaF9wY2lfZGV2KGRldikgewogCQlzdHJ1Y3Qgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uICpjb25mOwogCiAJCS8qCkBAIC0yODk5LDcgKzI4OTcsNiBAQAogCQkJCQlyZXQgPSAtRU5PREVWOwogCQkJfQogCQl9Ci0JCWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGRldik7CiAJfQogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5oIGIvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmgKaW5kZXggMzA1MGQxYS4uM2YyNGExZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5oCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5oCkBAIC01NDQsOSArNTQ0LDkgQEAKIAkJc3RydWN0IHsKIAkJCXU4CQlhZGRyX3Jlc1szXTsKIAkJCXZvbGF0aWxlIHU4CXN0YXR1czsJCS8qIGRlc2NyaXB0b3Igc3RhdHVzICovCi0JCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgcmRfczsKLQl9IF9fYXR0cmlidXRlKChwYWNrZWQpKSByZF91OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJCX0gX19wYWNrZWQgcmRfczsKKwl9IF9fcGFja2VkIHJkX3U7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIHJkX2FkZHIJCXJkX3UuYWRkcgogI2RlZmluZSByZF9zdGF0dXMJcmRfdS5yZF9zLnN0YXR1cwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmgKaW5kZXggZmZhZTQ4MC4uOWUxNWViOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oCkBAIC00NCwxMSArNDQsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2RjYS5oPgogI2VuZGlmCiAKLSNkZWZpbmUgUEZYICJpeGdiZTogIgotI2RlZmluZSBEUFJJTlRLKG5sZXZlbCwga2xldmVsLCBmbXQsIGFyZ3MuLi4pIFwKLQkoKHZvaWQpKChORVRJRl9NU0dfIyNubGV2ZWwgJiBhZGFwdGVyLT5tc2dfZW5hYmxlKSAmJiBcCi0JcHJpbnRrKEtFUk5fIyNrbGV2ZWwgUEZYICIlczogJXM6ICIgZm10LCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIFwKLQkJX19mdW5jX18gLCAjIyBhcmdzKSkpCisvKiBjb21tb24gcHJlZml4IHVzZWQgYnkgcHJfPD4gbWFjcm9zICovCisjdW5kZWYgcHJfZm10CisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CiAKIC8qIFRYL1JYIGRlc2NyaXB0b3IgZGVmaW5lcyAqLwogI2RlZmluZSBJWEdCRV9ERUZBVUxUX1RYRAkJICAgIDUxMgpAQCAtMTEyLDcgKzExMCw2IEBACiAJdTE2IHZsYW5zX2VuYWJsZWQ7CiAJYm9vbCBjbGVhcl90b19zZW5kOwogCWJvb2wgcGZfc2V0X21hYzsKLQlpbnQgcmFyOwogCXUxNiBwZl92bGFuOyAvKiBXaGVuIHNldCwgZ3Vlc3QgVkxBTiBjb25maWcgbm90IGFsbG93ZWQuICovCiAJdTE2IHBmX3FvczsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OS5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTkuYwppbmRleCBhNGUyOTAxLi4zZTA2YTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk5LmMKQEAgLTIwNiw2ICsyMDYsMTQgQEAKIAlzMzIgc3RhdHVzID0gMDsKIAl1MzIgYXV0b2MgPSAwOwogCisJLyogRGV0ZXJtaW5lIDFHIGxpbmsgY2FwYWJpbGl0aWVzIG9mZiBvZiBTRlArIHR5cGUgKi8KKwlpZiAoaHctPnBoeS5zZnBfdHlwZSA9PSBpeGdiZV9zZnBfdHlwZV8xZ19jdV9jb3JlMCB8fAorCSAgICBody0+cGh5LnNmcF90eXBlID09IGl4Z2JlX3NmcF90eXBlXzFnX2N1X2NvcmUxKSB7CisJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEw7CisJCSpuZWdvdGlhdGlvbiA9IHRydWU7CisJCWdvdG8gb3V0OworCX0KKwogCS8qCiAJICogRGV0ZXJtaW5lIGxpbmsgY2FwYWJpbGl0aWVzIGJhc2VkIG9uIHRoZSBzdG9yZWQgdmFsdWUgb2YgQVVUT0MsCiAJICogd2hpY2ggcmVwcmVzZW50cyBFRVBST00gZGVmYXVsdHMuICBJZiBBVVRPQyB2YWx1ZSBoYXMgbm90IGJlZW4KQEAgLTcwNyw5ICs3MTUsOCBAQAogCiBvdXQ6CiAJaWYgKGxpbmtfdXAgJiYgKGxpbmtfc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCkpCi0JCW5ldGlmX2luZm8oYWRhcHRlciwgaHcsIGFkYXB0ZXItPm5ldGRldiwgIlNtYXJ0c3BlZWQgaGFzIgotCQkJIiBkb3duZ3JhZGVkIHRoZSBsaW5rIHNwZWVkIGZyb20gdGhlIG1heGltdW0iCi0JCQkiIGFkdmVydGlzZWRcbiIpOworCQllX2luZm8oaHcsICJTbWFydHNwZWVkIGhhcyBkb3duZ3JhZGVkIHRoZSBsaW5rIHNwZWVkIGZyb20gIgorCQkgICAgICAgInRoZSBtYXhpbXVtIGFkdmVydGlzZWRcbiIpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTIwODgsNiArMjA5NSw3IEBACiAJdTMyIHBtYV9wbWRfMWcgPSBhdXRvYyAmIElYR0JFX0FVVE9DXzFHX1BNQV9QTURfTUFTSzsKIAl1MTYgZXh0X2FiaWxpdHkgPSAwOwogCXU4IGNvbXBfY29kZXNfMTBnID0gMDsKKwl1OCBjb21wX2NvZGVzXzFnID0gMDsKIAogCWh3LT5waHkub3BzLmlkZW50aWZ5KGh3KTsKIApAQCAtMjE2OCwxMSArMjE3NiwxNSBAQAogCWNhc2UgaXhnYmVfcGh5X3NmcF9pbnRlbDoKIAljYXNlIGl4Z2JlX3BoeV9zZnBfdW5rbm93bjoKIAkJaHctPnBoeS5vcHMucmVhZF9pMmNfZWVwcm9tKGh3LAorCQkgICAgICBJWEdCRV9TRkZfMUdCRV9DT01QX0NPREVTLCAmY29tcF9jb2Rlc18xZyk7CisJCWh3LT5waHkub3BzLnJlYWRfaTJjX2VlcHJvbShodywKIAkJICAgICAgSVhHQkVfU0ZGXzEwR0JFX0NPTVBfQ09ERVMsICZjb21wX2NvZGVzXzEwZyk7CiAJCWlmIChjb21wX2NvZGVzXzEwZyAmIElYR0JFX1NGRl8xMEdCQVNFU1JfQ0FQQUJMRSkKIAkJCXBoeXNpY2FsX2xheWVyID0gSVhHQkVfUEhZU0lDQUxfTEFZRVJfMTBHQkFTRV9TUjsKIAkJZWxzZSBpZiAoY29tcF9jb2Rlc18xMGcgJiBJWEdCRV9TRkZfMTBHQkFTRUxSX0NBUEFCTEUpCiAJCQlwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwR0JBU0VfTFI7CisJCWVsc2UgaWYgKGNvbXBfY29kZXNfMWcgJiBJWEdCRV9TRkZfMUdCQVNFVF9DQVBBQkxFKQorCQkJcGh5c2ljYWxfbGF5ZXIgPSBJWEdCRV9QSFlTSUNBTF9MQVlFUl8xMDAwQkFTRV9UOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmgKaW5kZXggMzA4MGFmYi4uNWNmMTVhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmgKQEAgLTEwNSwxMiArMTA1LDIzIEBACiAKICNkZWZpbmUgSVhHQkVfV1JJVEVfRkxVU0goYSkgSVhHQkVfUkVBRF9SRUcoYSwgSVhHQkVfU1RBVFVTKQogCi0jaWZkZWYgREVCVUcKLWV4dGVybiBjaGFyICppeGdiZV9nZXRfaHdfZGV2X25hbWUoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKml4Z2JlX2dldF9od19kZXYoc3RydWN0IGl4Z2JlX2h3ICpodyk7CiAjZGVmaW5lIGh3X2RiZyhodywgZm9ybWF0LCBhcmcuLi4pIFwKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm9ybWF0LCBpeGdiZV9nZXRfaHdfZGV2X25hbWUoaHcpLCAjI2FyZykKLSNlbHNlCi0jZGVmaW5lIGh3X2RiZyhodywgZm9ybWF0LCBhcmcuLi4pIGRvIHt9IHdoaWxlICgwKQotI2VuZGlmCi0KKwluZXRkZXZfZGJnKGl4Z2JlX2dldF9od19kZXYoaHcpLCBmb3JtYXQsICMjYXJnKQorI2RlZmluZSBlX2Rldl9pbmZvKGZvcm1hdCwgYXJnLi4uKSBcCisJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgZm9ybWF0LCAjIyBhcmcpCisjZGVmaW5lIGVfZGV2X3dhcm4oZm9ybWF0LCBhcmcuLi4pIFwKKwlkZXZfd2FybigmYWRhcHRlci0+cGRldi0+ZGV2LCBmb3JtYXQsICMjIGFyZykKKyNkZWZpbmUgZV9kZXZfZXJyKGZvcm1hdCwgYXJnLi4uKSBcCisJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCBmb3JtYXQsICMjIGFyZykKKyNkZWZpbmUgZV9kZXZfbm90aWNlKGZvcm1hdCwgYXJnLi4uKSBcCisJZGV2X25vdGljZSgmYWRhcHRlci0+cGRldi0+ZGV2LCBmb3JtYXQsICMjIGFyZykKKyNkZWZpbmUgZV9pbmZvKG1zZ2x2bCwgZm9ybWF0LCBhcmcuLi4pIFwKKwluZXRpZl9pbmZvKGFkYXB0ZXIsIG1zZ2x2bCwgYWRhcHRlci0+bmV0ZGV2LCBmb3JtYXQsICMjIGFyZykKKyNkZWZpbmUgZV9lcnIobXNnbHZsLCBmb3JtYXQsIGFyZy4uLikgXAorCW5ldGlmX2VycihhZGFwdGVyLCBtc2dsdmwsIGFkYXB0ZXItPm5ldGRldiwgZm9ybWF0LCAjIyBhcmcpCisjZGVmaW5lIGVfd2Fybihtc2dsdmwsIGZvcm1hdCwgYXJnLi4uKSBcCisJbmV0aWZfd2FybihhZGFwdGVyLCBtc2dsdmwsIGFkYXB0ZXItPm5ldGRldiwgZm9ybWF0LCAjIyBhcmcpCisjZGVmaW5lIGVfY3JpdChtc2dsdmwsIGZvcm1hdCwgYXJnLi4uKSBcCisJbmV0aWZfY3JpdChhZGFwdGVyLCBtc2dsdmwsIGFkYXB0ZXItPm5ldGRldiwgZm9ybWF0LCAjIyBhcmcpCiAjZW5kaWYgLyogSVhHQkVfQ09NTU9OICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTkuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5jCmluZGV4IDRmN2EyNmEuLjI1YjAyZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5jCkBAIC0zNDYsNyArMzQ2LDcgQEAKIAkgKi8KIAlyZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTUZMQ04pOwogCXJlZyAmPSB+SVhHQkVfTUZMQ05fUkZDRTsKLQlyZWcgfD0gSVhHQkVfTUZMQ05fUlBGQ0U7CisJcmVnIHw9IElYR0JFX01GTENOX1JQRkNFIHwgSVhHQkVfTUZMQ05fRFBGOwogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTUZMQ04sIHJlZyk7CiBvdXQ6CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl9ubC5jCmluZGV4IDcxZGEzMjUuLmI1M2I0NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl9ubC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl9ubC5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAkJCWdvdG8gb3V0OwogCiAJCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQpKSB7Ci0JCQlEUFJJTlRLKERSViwgRVJSLCAiRW5hYmxlIGZhaWxlZCwgbmVlZHMgTVNJLVhcbiIpOworCQkJZV9lcnIoZHJ2LCAiRW5hYmxlIGZhaWxlZCwgbmVlZHMgTVNJLVhcbiIpOwogCQkJZXJyID0gMTsKIAkJCWdvdG8gb3V0OwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMKaW5kZXggM2E5M2E4MS4uZGNlYmM4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYwpAQCAtNTQsMTQgKzU0LDE0IEBACiAJCQkJc2l6ZW9mKCgoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKikwKS0+bSksIFwKIAkJCQlvZmZzZXRvZihzdHJ1Y3QgaXhnYmVfYWRhcHRlciwgbSkKICNkZWZpbmUgSVhHQkVfTkVUREVWX1NUQVQobSkJTkVUREVWX1NUQVRTLCBcCi0JCQkJc2l6ZW9mKCgoc3RydWN0IG5ldF9kZXZpY2UgKikwKS0+bSksIFwKLQkJCQlvZmZzZXRvZihzdHJ1Y3QgbmV0X2RldmljZSwgbSkKKwkJCQlzaXplb2YoKChzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKikwKS0+bSksIFwKKwkJCQlvZmZzZXRvZihzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQsIG0pCiAKIHN0YXRpYyBzdHJ1Y3QgaXhnYmVfc3RhdHMgaXhnYmVfZ3N0cmluZ3Nfc3RhdHNbXSA9IHsKLQl7InJ4X3BhY2tldHMiLCBJWEdCRV9ORVRERVZfU1RBVChzdGF0cy5yeF9wYWNrZXRzKX0sCi0JeyJ0eF9wYWNrZXRzIiwgSVhHQkVfTkVUREVWX1NUQVQoc3RhdHMudHhfcGFja2V0cyl9LAotCXsicnhfYnl0ZXMiLCBJWEdCRV9ORVRERVZfU1RBVChzdGF0cy5yeF9ieXRlcyl9LAotCXsidHhfYnl0ZXMiLCBJWEdCRV9ORVRERVZfU1RBVChzdGF0cy50eF9ieXRlcyl9LAorCXsicnhfcGFja2V0cyIsIElYR0JFX05FVERFVl9TVEFUKHJ4X3BhY2tldHMpfSwKKwl7InR4X3BhY2tldHMiLCBJWEdCRV9ORVRERVZfU1RBVCh0eF9wYWNrZXRzKX0sCisJeyJyeF9ieXRlcyIsIElYR0JFX05FVERFVl9TVEFUKHJ4X2J5dGVzKX0sCisJeyJ0eF9ieXRlcyIsIElYR0JFX05FVERFVl9TVEFUKHR4X2J5dGVzKX0sCiAJeyJyeF9wa3RzX25pYyIsIElYR0JFX1NUQVQoc3RhdHMuZ3ByYyl9LAogCXsidHhfcGt0c19uaWMiLCBJWEdCRV9TVEFUKHN0YXRzLmdwdGMpfSwKIAl7InJ4X2J5dGVzX25pYyIsIElYR0JFX1NUQVQoc3RhdHMuZ29yYyl9LApAQCAtNjksMjcgKzY5LDI3IEBACiAJeyJsc2NfaW50IiwgSVhHQkVfU1RBVChsc2NfaW50KX0sCiAJeyJ0eF9idXN5IiwgSVhHQkVfU1RBVCh0eF9idXN5KX0sCiAJeyJub25fZW9wX2Rlc2NzIiwgSVhHQkVfU1RBVChub25fZW9wX2Rlc2NzKX0sCi0JeyJyeF9lcnJvcnMiLCBJWEdCRV9ORVRERVZfU1RBVChzdGF0cy5yeF9lcnJvcnMpfSwKLQl7InR4X2Vycm9ycyIsIElYR0JFX05FVERFVl9TVEFUKHN0YXRzLnR4X2Vycm9ycyl9LAotCXsicnhfZHJvcHBlZCIsIElYR0JFX05FVERFVl9TVEFUKHN0YXRzLnJ4X2Ryb3BwZWQpfSwKLQl7InR4X2Ryb3BwZWQiLCBJWEdCRV9ORVRERVZfU1RBVChzdGF0cy50eF9kcm9wcGVkKX0sCi0JeyJtdWx0aWNhc3QiLCBJWEdCRV9ORVRERVZfU1RBVChzdGF0cy5tdWx0aWNhc3QpfSwKKwl7InJ4X2Vycm9ycyIsIElYR0JFX05FVERFVl9TVEFUKHJ4X2Vycm9ycyl9LAorCXsidHhfZXJyb3JzIiwgSVhHQkVfTkVUREVWX1NUQVQodHhfZXJyb3JzKX0sCisJeyJyeF9kcm9wcGVkIiwgSVhHQkVfTkVUREVWX1NUQVQocnhfZHJvcHBlZCl9LAorCXsidHhfZHJvcHBlZCIsIElYR0JFX05FVERFVl9TVEFUKHR4X2Ryb3BwZWQpfSwKKwl7Im11bHRpY2FzdCIsIElYR0JFX05FVERFVl9TVEFUKG11bHRpY2FzdCl9LAogCXsiYnJvYWRjYXN0IiwgSVhHQkVfU1RBVChzdGF0cy5icHJjKX0sCiAJeyJyeF9ub19idWZmZXJfY291bnQiLCBJWEdCRV9TVEFUKHN0YXRzLnJuYmNbMF0pIH0sCi0JeyJjb2xsaXNpb25zIiwgSVhHQkVfTkVUREVWX1NUQVQoc3RhdHMuY29sbGlzaW9ucyl9LAotCXsicnhfb3Zlcl9lcnJvcnMiLCBJWEdCRV9ORVRERVZfU1RBVChzdGF0cy5yeF9vdmVyX2Vycm9ycyl9LAotCXsicnhfY3JjX2Vycm9ycyIsIElYR0JFX05FVERFVl9TVEFUKHN0YXRzLnJ4X2NyY19lcnJvcnMpfSwKLQl7InJ4X2ZyYW1lX2Vycm9ycyIsIElYR0JFX05FVERFVl9TVEFUKHN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyl9LAorCXsiY29sbGlzaW9ucyIsIElYR0JFX05FVERFVl9TVEFUKGNvbGxpc2lvbnMpfSwKKwl7InJ4X292ZXJfZXJyb3JzIiwgSVhHQkVfTkVUREVWX1NUQVQocnhfb3Zlcl9lcnJvcnMpfSwKKwl7InJ4X2NyY19lcnJvcnMiLCBJWEdCRV9ORVRERVZfU1RBVChyeF9jcmNfZXJyb3JzKX0sCisJeyJyeF9mcmFtZV9lcnJvcnMiLCBJWEdCRV9ORVRERVZfU1RBVChyeF9mcmFtZV9lcnJvcnMpfSwKIAl7Imh3X3JzY19hZ2dyZWdhdGVkIiwgSVhHQkVfU1RBVChyc2NfdG90YWxfY291bnQpfSwKIAl7Imh3X3JzY19mbHVzaGVkIiwgSVhHQkVfU1RBVChyc2NfdG90YWxfZmx1c2gpfSwKIAl7ImZkaXJfbWF0Y2giLCBJWEdCRV9TVEFUKHN0YXRzLmZkaXJtYXRjaCl9LAogCXsiZmRpcl9taXNzIiwgSVhHQkVfU1RBVChzdGF0cy5mZGlybWlzcyl9LAotCXsicnhfZmlmb19lcnJvcnMiLCBJWEdCRV9ORVRERVZfU1RBVChzdGF0cy5yeF9maWZvX2Vycm9ycyl9LAotCXsicnhfbWlzc2VkX2Vycm9ycyIsIElYR0JFX05FVERFVl9TVEFUKHN0YXRzLnJ4X21pc3NlZF9lcnJvcnMpfSwKLQl7InR4X2Fib3J0ZWRfZXJyb3JzIiwgSVhHQkVfTkVUREVWX1NUQVQoc3RhdHMudHhfYWJvcnRlZF9lcnJvcnMpfSwKLQl7InR4X2NhcnJpZXJfZXJyb3JzIiwgSVhHQkVfTkVUREVWX1NUQVQoc3RhdHMudHhfY2Fycmllcl9lcnJvcnMpfSwKLQl7InR4X2ZpZm9fZXJyb3JzIiwgSVhHQkVfTkVUREVWX1NUQVQoc3RhdHMudHhfZmlmb19lcnJvcnMpfSwKLQl7InR4X2hlYXJ0YmVhdF9lcnJvcnMiLCBJWEdCRV9ORVRERVZfU1RBVChzdGF0cy50eF9oZWFydGJlYXRfZXJyb3JzKX0sCisJeyJyeF9maWZvX2Vycm9ycyIsIElYR0JFX05FVERFVl9TVEFUKHJ4X2ZpZm9fZXJyb3JzKX0sCisJeyJyeF9taXNzZWRfZXJyb3JzIiwgSVhHQkVfTkVUREVWX1NUQVQocnhfbWlzc2VkX2Vycm9ycyl9LAorCXsidHhfYWJvcnRlZF9lcnJvcnMiLCBJWEdCRV9ORVRERVZfU1RBVCh0eF9hYm9ydGVkX2Vycm9ycyl9LAorCXsidHhfY2Fycmllcl9lcnJvcnMiLCBJWEdCRV9ORVRERVZfU1RBVCh0eF9jYXJyaWVyX2Vycm9ycyl9LAorCXsidHhfZmlmb19lcnJvcnMiLCBJWEdCRV9ORVRERVZfU1RBVCh0eF9maWZvX2Vycm9ycyl9LAorCXsidHhfaGVhcnRiZWF0X2Vycm9ycyIsIElYR0JFX05FVERFVl9TVEFUKHR4X2hlYXJ0YmVhdF9lcnJvcnMpfSwKIAl7InR4X3RpbWVvdXRfY291bnQiLCBJWEdCRV9TVEFUKHR4X3RpbWVvdXRfY291bnQpfSwKIAl7InR4X3Jlc3RhcnRfcXVldWUiLCBJWEdCRV9TVEFUKHJlc3RhcnRfcXVldWUpfSwKIAl7InJ4X2xvbmdfbGVuZ3RoX2Vycm9ycyIsIElYR0JFX1NUQVQoc3RhdHMucm9jKX0sCkBAIC0yMzQsNiArMjM0LDEzIEBACiAJCWNhc2UgaXhnYmVfc2ZwX3R5cGVfbm90X3ByZXNlbnQ6CiAJCQllY21kLT5wb3J0ID0gUE9SVF9OT05FOwogCQkJYnJlYWs7CisJCWNhc2UgaXhnYmVfc2ZwX3R5cGVfMWdfY3VfY29yZTA6CisJCWNhc2UgaXhnYmVfc2ZwX3R5cGVfMWdfY3VfY29yZTE6CisJCQllY21kLT5wb3J0ID0gUE9SVF9UUDsKKwkJCWVjbWQtPnN1cHBvcnRlZCA9IFNVUFBPUlRFRF9UUDsKKwkJCWVjbWQtPmFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJICAgICAgICAgICAgICAgICAgICAgQURWRVJUSVNFRF9UUCk7CisJCQlicmVhazsKIAkJY2FzZSBpeGdiZV9zZnBfdHlwZV91bmtub3duOgogCQlkZWZhdWx0OgogCQkJZWNtZC0+cG9ydCA9IFBPUlRfT1RIRVI7CkBAIC0yOTQsOCArMzAxLDcgQEAKIAkJaHctPm1hYy5hdXRvdHJ5X3Jlc3RhcnQgPSB0cnVlOwogCQllcnIgPSBody0+bWFjLm9wcy5zZXR1cF9saW5rKGh3LCBhZHZlcnRpc2VkLCB0cnVlLCB0cnVlKTsKIAkJaWYgKGVycikgewotCQkJRFBSSU5USyhQUk9CRSwgSU5GTywKLQkJCSAgICAgICAgInNldHVwIGxpbmsgZmFpbGVkIHdpdGggY29kZSAlZFxuIiwgZXJyKTsKKwkJCWVfaW5mbyhwcm9iZSwgInNldHVwIGxpbmsgZmFpbGVkIHdpdGggY29kZSAlZFxuIiwgZXJyKTsKIAkJCWh3LT5tYWMub3BzLnNldHVwX2xpbmsoaHcsIG9sZCwgdHJ1ZSwgdHJ1ZSk7CiAJCX0KIAl9IGVsc2UgewpAQCAtOTkyLDE2ICs5OTgsMTggQEAKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdTY0ICpxdWV1ZV9zdGF0OwogCWludCBzdGF0X2NvdW50ID0gc2l6ZW9mKHN0cnVjdCBpeGdiZV9xdWV1ZV9zdGF0cykgLyBzaXplb2YodTY0KTsKKwlzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgdGVtcDsKKwljb25zdCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKm5ldF9zdGF0czsKIAlpbnQgaiwgazsKIAlpbnQgaTsKIAljaGFyICpwID0gTlVMTDsKIAogCWl4Z2JlX3VwZGF0ZV9zdGF0cyhhZGFwdGVyKTsKLQlkZXZfZ2V0X3N0YXRzKG5ldGRldik7CisJbmV0X3N0YXRzID0gZGV2X2dldF9zdGF0cyhuZXRkZXYsICZ0ZW1wKTsKIAlmb3IgKGkgPSAwOyBpIDwgSVhHQkVfR0xPQkFMX1NUQVRTX0xFTjsgaSsrKSB7CiAJCXN3aXRjaCAoaXhnYmVfZ3N0cmluZ3Nfc3RhdHNbaV0udHlwZSkgewogCQljYXNlIE5FVERFVl9TVEFUUzoKLQkJCXAgPSAoY2hhciAqKSBuZXRkZXYgKworCQkJcCA9IChjaGFyICopIG5ldF9zdGF0cyArCiAJCQkJCWl4Z2JlX2dzdHJpbmdzX3N0YXRzW2ldLnN0YXRfb2Zmc2V0OwogCQkJYnJlYWs7CiAJCWNhc2UgSVhHQkVfU1RBVFM6CkBAIC0xMTg4LDkgKzExOTYsOSBAQAogCQl3cml0ZWwoKF90ZXN0W3BhdF0gJiBXKSwgKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSKSk7ICAgICAgICAgIFwKIAkJdmFsID0gcmVhZGwoYWRhcHRlci0+aHcuaHdfYWRkciArIFIpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJCWlmICh2YWwgIT0gKF90ZXN0W3BhdF0gJiBXICYgTSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJRFBSSU5USyhEUlYsIEVSUiwgInBhdHRlcm4gdGVzdCByZWcgJTA0WCBmYWlsZWQ6IGdvdCAiXAotCQkJCQkgICIweCUwOFggZXhwZWN0ZWQgMHglMDhYXG4iLCAgICAgICAgIFwKLQkJCQlSLCB2YWwsIChfdGVzdFtwYXRdICYgVyAmIE0pKTsgICAgICAgICAgICAgICAgXAorCQkJZV9lcnIoZHJ2LCAicGF0dGVybiB0ZXN0IHJlZyAlMDRYIGZhaWxlZDogZ290ICIgICBcCisJCQkgICAgICAiMHglMDhYIGV4cGVjdGVkIDB4JTA4WFxuIiwJCSAgICAgIFwKKwkJCSAgICAgIFIsIHZhbCwgKF90ZXN0W3BhdF0gJiBXICYgTSkpOyAgICAgICAgICAgICAgICBcCiAJCQkqZGF0YSA9IFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJCQl3cml0ZWwoYmVmb3JlLCBhZGFwdGVyLT5ody5od19hZGRyICsgUik7ICAgICAgICAgICAgICBcCiAJCQlyZXR1cm4gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xMjA2LDggKzEyMTQsOCBAQAogCXdyaXRlbCgoVyAmIE0pLCAoYWRhcHRlci0+aHcuaHdfYWRkciArIFIpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJdmFsID0gcmVhZGwoYWRhcHRlci0+aHcuaHdfYWRkciArIFIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAlpZiAoKFcgJiBNKSAhPSAodmFsICYgTSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlEUFJJTlRLKERSViwgRVJSLCAic2V0L2NoZWNrIHJlZyAlMDRYIHRlc3QgZmFpbGVkOiBnb3QgMHglMDhYICJcCi0JCQkJICJleHBlY3RlZCAweCUwOFhcbiIsIFIsICh2YWwgJiBNKSwgKFcgJiBNKSk7IFwKKwkJZV9lcnIoZHJ2LCAic2V0L2NoZWNrIHJlZyAlMDRYIHRlc3QgZmFpbGVkOiBnb3QgMHglMDhYICIgIFwKKwkJICAgICAgImV4cGVjdGVkIDB4JTA4WFxuIiwgUiwgKHZhbCAmIE0pLCAoVyAmIE0pKTsgICAgICAgIFwKIAkJKmRhdGEgPSBSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJCXdyaXRlbChiZWZvcmUsIChhZGFwdGVyLT5ody5od19hZGRyICsgUikpOyAgICAgICAgICAgICAgICAgICAgXAogCQlyZXR1cm4gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTEyNDAsOCArMTI0OCw4IEBACiAJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfU1RBVFVTLCB0b2dnbGUpOwogCWFmdGVyID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9TVEFUVVMpICYgdG9nZ2xlOwogCWlmICh2YWx1ZSAhPSBhZnRlcikgewotCQlEUFJJTlRLKERSViwgRVJSLCAiZmFpbGVkIFNUQVRVUyByZWdpc3RlciB0ZXN0IGdvdDogIgotCQkgICAgICAgICIweCUwOFggZXhwZWN0ZWQ6IDB4JTA4WFxuIiwgYWZ0ZXIsIHZhbHVlKTsKKwkJZV9lcnIoZHJ2LCAiZmFpbGVkIFNUQVRVUyByZWdpc3RlciB0ZXN0IGdvdDogMHglMDhYICIKKwkJICAgICAgImV4cGVjdGVkOiAweCUwOFhcbiIsIGFmdGVyLCB2YWx1ZSk7CiAJCSpkYXRhID0gMTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMTM0MSw4ICsxMzQ5LDggQEAKIAkJKmRhdGEgPSAxOwogCQlyZXR1cm4gLTE7CiAJfQotCURQUklOVEsoSFcsIElORk8sICJ0ZXN0aW5nICVzIGludGVycnVwdFxuIiwKLQkJKHNoYXJlZF9pbnQgPyAic2hhcmVkIiA6ICJ1bnNoYXJlZCIpKTsKKwllX2luZm8oaHcsICJ0ZXN0aW5nICVzIGludGVycnVwdFxuIiwgc2hhcmVkX2ludCA/CisJICAgICAgICJzaGFyZWQiIDogInVuc2hhcmVkIik7CiAKIAkvKiBEaXNhYmxlIGFsbCB0aGUgaW50ZXJydXB0cyAqLwogCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTUMsIDB4RkZGRkZGRkYpOwpAQCAtMTg0Nyw3ICsxODU1LDcgQEAKIAlpZiAoZXRoX3Rlc3QtPmZsYWdzID09IEVUSF9URVNUX0ZMX09GRkxJTkUpIHsKIAkJLyogT2ZmbGluZSB0ZXN0cyAqLwogCi0JCURQUklOVEsoSFcsIElORk8sICJvZmZsaW5lIHRlc3Rpbmcgc3RhcnRpbmdcbiIpOworCQllX2luZm8oaHcsICJvZmZsaW5lIHRlc3Rpbmcgc3RhcnRpbmdcbiIpOwogCiAJCS8qIExpbmsgdGVzdCBwZXJmb3JtZWQgYmVmb3JlIGhhcmR3YXJlIHJlc2V0IHNvIGF1dG9uZWcgZG9lc24ndAogCQkgKiBpbnRlcmZlcmUgd2l0aCB0ZXN0IHJlc3VsdCAqLwpAQCAtMTg4MCwxNyArMTg4OCwxNyBAQAogCQllbHNlCiAJCQlpeGdiZV9yZXNldChhZGFwdGVyKTsKIAotCQlEUFJJTlRLKEhXLCBJTkZPLCAicmVnaXN0ZXIgdGVzdGluZyBzdGFydGluZ1xuIik7CisJCWVfaW5mbyhodywgInJlZ2lzdGVyIHRlc3Rpbmcgc3RhcnRpbmdcbiIpOwogCQlpZiAoaXhnYmVfcmVnX3Rlc3QoYWRhcHRlciwgJmRhdGFbMF0pKQogCQkJZXRoX3Rlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKIAogCQlpeGdiZV9yZXNldChhZGFwdGVyKTsKLQkJRFBSSU5USyhIVywgSU5GTywgImVlcHJvbSB0ZXN0aW5nIHN0YXJ0aW5nXG4iKTsKKwkJZV9pbmZvKGh3LCAiZWVwcm9tIHRlc3Rpbmcgc3RhcnRpbmdcbiIpOwogCQlpZiAoaXhnYmVfZWVwcm9tX3Rlc3QoYWRhcHRlciwgJmRhdGFbMV0pKQogCQkJZXRoX3Rlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKIAogCQlpeGdiZV9yZXNldChhZGFwdGVyKTsKLQkJRFBSSU5USyhIVywgSU5GTywgImludGVycnVwdCB0ZXN0aW5nIHN0YXJ0aW5nXG4iKTsKKwkJZV9pbmZvKGh3LCAiaW50ZXJydXB0IHRlc3Rpbmcgc3RhcnRpbmdcbiIpOwogCQlpZiAoaXhnYmVfaW50cl90ZXN0KGFkYXB0ZXIsICZkYXRhWzJdKSkKIAkJCWV0aF90ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CiAKQEAgLTE4OTgsMTQgKzE5MDYsMTQgQEAKIAkJICogbG9vcGJhY2sgZGlhZ25vc3RpYy4gKi8KIAkJaWYgKGFkYXB0ZXItPmZsYWdzICYgKElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRCB8CiAJCQkJICAgICAgSVhHQkVfRkxBR19WTURRX0VOQUJMRUQpKSB7Ci0JCQlEUFJJTlRLKEhXLCBJTkZPLCAiU2tpcCBNQUMgbG9vcGJhY2sgZGlhZ25vc3RpYyBpbiBWVCAiCi0JCQkJIm1vZGVcbiIpOworCQkJZV9pbmZvKGh3LCAiU2tpcCBNQUMgbG9vcGJhY2sgZGlhZ25vc3RpYyBpbiBWVCAiCisJCQkgICAgICAgIm1vZGVcbiIpOwogCQkJZGF0YVszXSA9IDA7CiAJCQlnb3RvIHNraXBfbG9vcGJhY2s7CiAJCX0KIAogCQlpeGdiZV9yZXNldChhZGFwdGVyKTsKLQkJRFBSSU5USyhIVywgSU5GTywgImxvb3BiYWNrIHRlc3Rpbmcgc3RhcnRpbmdcbiIpOworCQllX2luZm8oaHcsICJsb29wYmFjayB0ZXN0aW5nIHN0YXJ0aW5nXG4iKTsKIAkJaWYgKGl4Z2JlX2xvb3BiYWNrX3Rlc3QoYWRhcHRlciwgJmRhdGFbM10pKQogCQkJZXRoX3Rlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKIApAQCAtMTkxNiw3ICsxOTI0LDcgQEAKIAkJaWYgKGlmX3J1bm5pbmcpCiAJCQlkZXZfb3BlbihuZXRkZXYpOwogCX0gZWxzZSB7Ci0JCURQUklOVEsoSFcsIElORk8sICJvbmxpbmUgdGVzdGluZyBzdGFydGluZ1xuIik7CisJCWVfaW5mbyhodywgIm9ubGluZSB0ZXN0aW5nIHN0YXJ0aW5nXG4iKTsKIAkJLyogT25saW5lIHRlc3RzICovCiAJCWlmIChpeGdiZV9saW5rX3Rlc3QoYWRhcHRlciwgJmRhdGFbNF0pKQogCQkJZXRoX3Rlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKQEAgLTIxMzQsOCArMjE0Miw4IEBACiAJCQlhZGFwdGVyLT5mbGFnczIgJj0gfklYR0JFX0ZMQUcyX1JTQ19FTkFCTEVEOwogCQkJaWYgKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykgewogCQkJCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfTFJPOwotCQkJCURQUklOVEsoUFJPQkUsIElORk8sICJyeC11c2VjcyBzZXQgdG8gMCwgIgotCQkJCQkiZGlzYWJsaW5nIExSTy9SU0NcbiIpOworCQkJCWVfaW5mbyhwcm9iZSwgInJ4LXVzZWNzIHNldCB0byAwLCAiCisJCQkJICAgICAgICJkaXNhYmxpbmcgUlNDXG4iKTsKIAkJCX0KIAkJCW5lZWRfcmVzZXQgPSB0cnVlOwogCQl9CkBAIC0yMjA4LDggKzIyMTYsMTEgQEAKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJYm9vbCBuZWVkX3Jlc2V0ID0gZmFsc2U7CisJaW50IHJjOwogCi0JZXRodG9vbF9vcF9zZXRfZmxhZ3MobmV0ZGV2LCBkYXRhKTsKKwlyYyA9IGV0aHRvb2xfb3Bfc2V0X2ZsYWdzKG5ldGRldiwgZGF0YSwgRVRIX0ZMQUdfTFJPIHwgRVRIX0ZMQUdfTlRVUExFKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAogCS8qIGlmIHN0YXRlIGNoYW5nZXMgd2UgbmVlZCB0byB1cGRhdGUgYWRhcHRlci0+ZmxhZ3MgYW5kIHJlc2V0ICovCiAJaWYgKGFkYXB0ZXItPmZsYWdzMiAmIElYR0JFX0ZMQUcyX1JTQ19DQVBBQkxFKSB7CkBAIC0yMjMwLDEwICsyMjQxLDEwIEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0gZWxzZSBpZiAoIWFkYXB0ZXItPnJ4X2l0cl9zZXR0aW5nKSB7Ci0JCQluZXRkZXYtPmZlYXR1cmVzICY9IH5FVEhfRkxBR19MUk87CisJCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0xSTzsKIAkJCWlmIChkYXRhICYgRVRIX0ZMQUdfTFJPKQotCQkJCURQUklOVEsoUFJPQkUsIElORk8sICJyeC11c2VjcyBzZXQgdG8gMCwgIgotCQkJCQkiTFJPL1JTQyBjYW5ub3QgYmUgZW5hYmxlZC5cbiIpOworCQkJCWVfaW5mbyhwcm9iZSwgInJ4LXVzZWNzIHNldCB0byAwLCAiCisJCQkJICAgICAgICJMUk8vUlNDIGNhbm5vdCBiZSBlbmFibGVkLlxuIik7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2Zjb2UuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2Zjb2UuYwppbmRleCA0NTE4MmFiLi4wNzIzMjdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZmNvZS5jCkBAIC0yNSw3ICsyNSw2IEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLQogI2luY2x1ZGUgIml4Z2JlLmgiCiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQgogI2luY2x1ZGUgIml4Z2JlX2RjYl84MjU5OS5oIgpAQCAtMTY1LDIwICsxNjQsMjAgQEAKIAogCWFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCWlmICh4aWQgPj0gSVhHQkVfRkNPRV9ERFBfTUFYKSB7Ci0JCURQUklOVEsoRFJWLCBXQVJOSU5HLCAieGlkPTB4JXggb3V0LW9mLXJhbmdlXG4iLCB4aWQpOworCQllX3dhcm4oZHJ2LCAieGlkPTB4JXggb3V0LW9mLXJhbmdlXG4iLCB4aWQpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlmY29lID0gJmFkYXB0ZXItPmZjb2U7CiAJaWYgKCFmY29lLT5wb29sKSB7Ci0JCURQUklOVEsoRFJWLCBXQVJOSU5HLCAieGlkPTB4JXggbm8gZGRwIHBvb2wgZm9yIGZjb2VcbiIsIHhpZCk7CisJCWVfd2FybihkcnYsICJ4aWQ9MHgleCBubyBkZHAgcG9vbCBmb3IgZmNvZVxuIiwgeGlkKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJZGRwID0gJmZjb2UtPmRkcFt4aWRdOwogCWlmIChkZHAtPnNnbCkgewotCQlEUFJJTlRLKERSViwgRVJSLCAieGlkIDB4JXggdy8gbm9uLW51bGwgc2dsPSVwIG5lbnRzPSVkXG4iLAotCQkJeGlkLCBkZHAtPnNnbCwgZGRwLT5zZ2MpOworCQllX2VycihkcnYsICJ4aWQgMHgleCB3LyBub24tbnVsbCBzZ2w9JXAgbmVudHM9JWRcbiIsCisJCSAgICAgIHhpZCwgZGRwLT5zZ2wsIGRkcC0+c2djKTsKIAkJcmV0dXJuIDA7CiAJfQogCWl4Z2JlX2Zjb2VfY2xlYXJfZGRwKGRkcCk7CkBAIC0xODYsMTQgKzE4NSwxNCBAQAogCS8qIHNldHVwIGRtYSBmcm9tIHNjc2kgY29tbWFuZCBzZ2wgKi8KIAlkbWFjb3VudCA9IHBjaV9tYXBfc2coYWRhcHRlci0+cGRldiwgc2dsLCBzZ2MsIERNQV9GUk9NX0RFVklDRSk7CiAJaWYgKGRtYWNvdW50ID09IDApIHsKLQkJRFBSSU5USyhEUlYsIEVSUiwgInhpZCAweCV4IERNQSBtYXAgZXJyb3JcbiIsIHhpZCk7CisJCWVfZXJyKGRydiwgInhpZCAweCV4IERNQSBtYXAgZXJyb3JcbiIsIHhpZCk7CiAJCXJldHVybiAwOwogCX0KIAogCS8qIGFsbG9jIHRoZSB1ZGwgZnJvbSBvdXIgZGRwIHBvb2wgKi8KLQlkZHAtPnVkbCA9IHBjaV9wb29sX2FsbG9jKGZjb2UtPnBvb2wsIEdGUF9LRVJORUwsICZkZHAtPnVkcCk7CisJZGRwLT51ZGwgPSBwY2lfcG9vbF9hbGxvYyhmY29lLT5wb29sLCBHRlBfQVRPTUlDLCAmZGRwLT51ZHApOwogCWlmICghZGRwLT51ZGwpIHsKLQkJRFBSSU5USyhEUlYsIEVSUiwgImZhaWxlZCBhbGxvY2F0ZWQgZGRwIGNvbnRleHRcbiIpOworCQllX2VycihkcnYsICJmYWlsZWQgYWxsb2NhdGVkIGRkcCBjb250ZXh0XG4iKTsKIAkJZ290byBvdXRfbm9kZHBfdW5tYXA7CiAJfQogCWRkcC0+c2dsID0gc2dsOwpAQCAtMjA2LDEwICsyMDUsOSBAQAogCQl3aGlsZSAobGVuKSB7CiAJCQkvKiBtYXggbnVtYmVyIG9mIGJ1ZmZlcnMgYWxsb3dlZCBpbiBvbmUgRERQIGNvbnRleHQgKi8KIAkJCWlmIChqID49IElYR0JFX0JVRkZDTlRfTUFYKSB7Ci0JCQkJbmV0aWZfZXJyKGFkYXB0ZXIsIGRydiwgYWRhcHRlci0+bmV0ZGV2LAotCQkJCQkgICJ4aWQ9JXg6JWQsJWQsJWQ6YWRkcj0lbGx4ICIKLQkJCQkJICAibm90IGVub3VnaCBkZXNjcmlwdG9yc1xuIiwKLQkJCQkJICB4aWQsIGksIGosIGRtYWNvdW50LCAodTY0KWFkZHIpOworCQkJCWVfZXJyKGRydiwgInhpZD0leDolZCwlZCwlZDphZGRyPSVsbHggIgorCQkJCSAgICAgICJub3QgZW5vdWdoIGRlc2NyaXB0b3JzXG4iLAorCQkJCSAgICAgIHhpZCwgaSwgaiwgZG1hY291bnQsICh1NjQpYWRkcik7CiAJCQkJZ290byBvdXRfbm9kZHBfZnJlZTsKIAkJCX0KIApAQCAtMzg3LDggKzM4NSw4IEBACiAJc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqZmg7CiAKIAlpZiAoc2tiX2lzX2dzbyhza2IpICYmIChza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlICE9IFNLQl9HU09fRkNPRSkpIHsKLQkJRFBSSU5USyhEUlYsIEVSUiwgIldyb25nIGdzbyB0eXBlICVkOmV4cGVjdGluZyBTS0JfR1NPX0ZDT0VcbiIsCi0JCQlza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlKTsKKwkJZV9lcnIoZHJ2LCAiV3JvbmcgZ3NvIHR5cGUgJWQ6ZXhwZWN0aW5nIFNLQl9HU09fRkNPRVxuIiwKKwkJICAgICAgc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNDE0LDcgKzQxMiw3IEBACiAJCWZjb2Vfc29mX2VvZiB8PSBJWEdCRV9BRFZUWERfRkNPRUZfU09GOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlEUFJJTlRLKERSViwgV0FSTklORywgInVua25vd24gc29mID0gMHgleFxuIiwgc29mKTsKKwkJZV93YXJuKGRydiwgInVua25vd24gc29mID0gMHgleFxuIiwgc29mKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00NDEsNyArNDM5LDcgQEAKIAkJZmNvZV9zb2ZfZW9mIHw9IElYR0JFX0FEVlRYRF9GQ09FRl9FT0ZfQTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJRFBSSU5USyhEUlYsIFdBUk5JTkcsICJ1bmtub3duIGVvZiA9IDB4JXhcbiIsIGVvZik7CisJCWVfd2FybihkcnYsICJ1bmtub3duIGVvZiA9IDB4JXhcbiIsIGVvZik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNTE3LDggKzUxNSw3IEBACiAJCQkJCSAgICAgYWRhcHRlci0+cGRldiwgSVhHQkVfRkNQVFJfTUFYLAogCQkJCQkgICAgIElYR0JFX0ZDUFRSX0FMSUdOLCBQQUdFX1NJWkUpOwogCQlpZiAoIWZjb2UtPnBvb2wpCi0JCQlEUFJJTlRLKERSViwgRVJSLAotCQkJCSJmYWlsZWQgdG8gYWxsb2NhdGVkIEZDb0UgRERQIHBvb2xcbiIpOworCQkJZV9lcnIoZHJ2LCAiZmFpbGVkIHRvIGFsbG9jYXRlZCBGQ29FIEREUCBwb29sXG4iKTsKIAogCQlzcGluX2xvY2tfaW5pdCgmZmNvZS0+bG9jayk7CiAJfQpAQCAtNjE0LDcgKzYxMSw3IEBACiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GQ09FX0VOQUJMRUQpCiAJCWdvdG8gb3V0X2VuYWJsZTsKIAotCURQUklOVEsoRFJWLCBJTkZPLCAiRW5hYmxpbmcgRkNvRSBvZmZsb2FkIGZlYXR1cmVzLlxuIik7CisJZV9pbmZvKGRydiwgIkVuYWJsaW5nIEZDb0Ugb2ZmbG9hZCBmZWF0dXJlcy5cbiIpOwogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCW5ldGRldi0+bmV0ZGV2X29wcy0+bmRvX3N0b3AobmV0ZGV2KTsKIApAQCAtNjI1LDkgKzYyMiw2IEBACiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0ZDT0VfQ1JDOwogCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9GU087CiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0ZDT0VfTVRVOwotCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0ZDT0VfQ1JDOwotCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0ZTTzsKLQluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9GQ09FX01UVTsKIAluZXRkZXYtPmZjb2VfZGRwX3hpZCA9IElYR0JFX0ZDT0VfRERQX01BWCAtIDE7CiAKIAlpeGdiZV9pbml0X2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7CkBAIC02NjAsMjUgKzY1NCwyMSBAQAogCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GQ09FX0VOQUJMRUQpKQogCQlnb3RvIG91dF9kaXNhYmxlOwogCi0JRFBSSU5USyhEUlYsIElORk8sICJEaXNhYmxpbmcgRkNvRSBvZmZsb2FkIGZlYXR1cmVzLlxuIik7CisJZV9pbmZvKGRydiwgIkRpc2FibGluZyBGQ29FIG9mZmxvYWQgZmVhdHVyZXMuXG4iKTsKKwluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0ZDT0VfQ1JDOworCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfRlNPOworCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfRkNPRV9NVFU7CisJbmV0ZGV2LT5mY29lX2RkcF94aWQgPSAwOworCW5ldGRldl9mZWF0dXJlc19jaGFuZ2UobmV0ZGV2KTsKKwogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCW5ldGRldi0+bmV0ZGV2X29wcy0+bmRvX3N0b3AobmV0ZGV2KTsKIAogCWl4Z2JlX2NsZWFyX2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7Ci0KIAlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19GQ09FX0VOQUJMRUQ7CiAJYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9GQ09FXS5pbmRpY2VzID0gMDsKLQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0ZDT0VfQ1JDOwotCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfRlNPOwotCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfRkNPRV9NVFU7Ci0JbmV0ZGV2LT52bGFuX2ZlYXR1cmVzICY9IH5ORVRJRl9GX0ZDT0VfQ1JDOwotCW5ldGRldi0+dmxhbl9mZWF0dXJlcyAmPSB+TkVUSUZfRl9GU087Ci0JbmV0ZGV2LT52bGFuX2ZlYXR1cmVzICY9IH5ORVRJRl9GX0ZDT0VfTVRVOwotCW5ldGRldi0+ZmNvZV9kZHBfeGlkID0gMDsKLQogCWl4Z2JlX2NsZWFudXBfZmNvZShhZGFwdGVyKTsKIAlpeGdiZV9pbml0X2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7Ci0JbmV0ZGV2X2ZlYXR1cmVzX2NoYW5nZShuZXRkZXYpOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKIAkJbmV0ZGV2LT5uZXRkZXZfb3BzLT5uZG9fb3BlbihuZXRkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCmluZGV4IDdiNWQ5NzYuLjdkNmE0MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTUyLDcgKzUyLDcgQEAKIHN0YXRpYyBjb25zdCBjaGFyIGl4Z2JlX2RyaXZlcl9zdHJpbmdbXSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW50ZWwoUikgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBOZXR3b3JrIERyaXZlciI7CiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjIuMC42Mi1rMiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjIuMC44NC1rMiIKIGNvbnN0IGNoYXIgaXhnYmVfZHJpdmVyX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OOwogc3RhdGljIGNoYXIgaXhnYmVfY29weXJpZ2h0W10gPSAiQ29weXJpZ2h0IChjKSAxOTk5LTIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIjsKIApAQCAtNjk2LDE5ICs2OTYsMTkgQEAKIAkJLyogZGV0ZWN0ZWQgVHggdW5pdCBoYW5nICovCiAJCXVuaW9uIGl4Z2JlX2Fkdl90eF9kZXNjICp0eF9kZXNjOwogCQl0eF9kZXNjID0gSVhHQkVfVFhfREVTQ19BRFYoKnR4X3JpbmcsIGVvcCk7Ci0JCURQUklOVEsoRFJWLCBFUlIsICJEZXRlY3RlZCBUeCBVbml0IEhhbmdcbiIKLQkJCSIgIFR4IFF1ZXVlICAgICAgICAgICAgIDwlZD5cbiIKLQkJCSIgIFRESCwgVERUICAgICAgICAgICAgIDwleD4sIDwleD5cbiIKLQkJCSIgIG5leHRfdG9fdXNlICAgICAgICAgIDwleD5cbiIKLQkJCSIgIG5leHRfdG9fY2xlYW4gICAgICAgIDwleD5cbiIKLQkJCSJ0eF9idWZmZXJfaW5mb1tuZXh0X3RvX2NsZWFuXVxuIgotCQkJIiAgdGltZV9zdGFtcCAgICAgICAgICAgPCVseD5cbiIKLQkJCSIgIGppZmZpZXMgICAgICAgICAgICAgIDwlbHg+XG4iLAotCQkJdHhfcmluZy0+cXVldWVfaW5kZXgsCi0JCQlJWEdCRV9SRUFEX1JFRyhodywgdHhfcmluZy0+aGVhZCksCi0JCQlJWEdCRV9SRUFEX1JFRyhodywgdHhfcmluZy0+dGFpbCksCi0JCQl0eF9yaW5nLT5uZXh0X3RvX3VzZSwgZW9wLAotCQkJdHhfcmluZy0+dHhfYnVmZmVyX2luZm9bZW9wXS50aW1lX3N0YW1wLCBqaWZmaWVzKTsKKwkJZV9lcnIoZHJ2LCAiRGV0ZWN0ZWQgVHggVW5pdCBIYW5nXG4iCisJCSAgICAgICIgIFR4IFF1ZXVlICAgICAgICAgICAgIDwlZD5cbiIKKwkJICAgICAgIiAgVERILCBURFQgICAgICAgICAgICAgPCV4PiwgPCV4PlxuIgorCQkgICAgICAiICBuZXh0X3RvX3VzZSAgICAgICAgICA8JXg+XG4iCisJCSAgICAgICIgIG5leHRfdG9fY2xlYW4gICAgICAgIDwleD5cbiIKKwkJICAgICAgInR4X2J1ZmZlcl9pbmZvW25leHRfdG9fY2xlYW5dXG4iCisJCSAgICAgICIgIHRpbWVfc3RhbXAgICAgICAgICAgIDwlbHg+XG4iCisJCSAgICAgICIgIGppZmZpZXMgICAgICAgICAgICAgIDwlbHg+XG4iLAorCQkgICAgICB0eF9yaW5nLT5xdWV1ZV9pbmRleCwKKwkJICAgICAgSVhHQkVfUkVBRF9SRUcoaHcsIHR4X3JpbmctPmhlYWQpLAorCQkgICAgICBJWEdCRV9SRUFEX1JFRyhodywgdHhfcmluZy0+dGFpbCksCisJCSAgICAgIHR4X3JpbmctPm5leHRfdG9fdXNlLCBlb3AsCisJCSAgICAgIHR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcCwgamlmZmllcyk7CiAJCXJldHVybiB0cnVlOwogCX0KIApAQCAtODEyLDkgKzgxMiw4IEBACiAJaWYgKGFkYXB0ZXItPmRldGVjdF90eF9odW5nKSB7CiAJCWlmIChpeGdiZV9jaGVja190eF9oYW5nKGFkYXB0ZXIsIHR4X3JpbmcsIGkpKSB7CiAJCQkvKiBzY2hlZHVsZSBpbW1lZGlhdGUgcmVzZXQgaWYgd2UgYmVsaWV2ZSB3ZSBodW5nICovCi0JCQlEUFJJTlRLKFBST0JFLCBJTkZPLAotCQkJICAgICAgICAidHggaGFuZyAlZCBkZXRlY3RlZCwgcmVzZXR0aW5nIGFkYXB0ZXJcbiIsCi0JCQkgICAgICAgIGFkYXB0ZXItPnR4X3RpbWVvdXRfY291bnQgKyAxKTsKKwkJCWVfaW5mbyhwcm9iZSwgInR4IGhhbmcgJWQgZGV0ZWN0ZWQsIHJlc2V0dGluZyAiCisJCQkgICAgICAgImFkYXB0ZXJcbiIsIGFkYXB0ZXItPnR4X3RpbWVvdXRfY291bnQgKyAxKTsKIAkJCWl4Z2JlX3R4X3RpbWVvdXQoYWRhcHRlci0+bmV0ZGV2KTsKIAkJfQogCX0KQEAgLTE2NTMsMTAgKzE2NTIsMTAgQEAKIAkJCQlyZXR1cm47CiAJCQlicmVhazsKIAkJfQotCQlEUFJJTlRLKERSViwgRVJSLCAiTmV0d29yayBhZGFwdGVyIGhhcyBiZWVuIHN0b3BwZWQgYmVjYXVzZSBpdCAiCi0JCSAgICAgICAgImhhcyBvdmVyIGhlYXRlZC4gUmVzdGFydCB0aGUgY29tcHV0ZXIuIElmIHRoZSBwcm9ibGVtICIKLQkJICAgICAgICAicGVyc2lzdHMsIHBvd2VyIG9mZiB0aGUgc3lzdGVtIGFuZCByZXBsYWNlIHRoZSAiCi0JCSAgICAgICAgImFkYXB0ZXJcbiIpOworCQllX2NyaXQoZHJ2LCAiTmV0d29yayBhZGFwdGVyIGhhcyBiZWVuIHN0b3BwZWQgYmVjYXVzZSBpdCBoYXMgIgorCQkgICAgICAgIm92ZXIgaGVhdGVkLiBSZXN0YXJ0IHRoZSBjb21wdXRlci4gSWYgdGhlIHByb2JsZW0gIgorCQkgICAgICAgInBlcnNpc3RzLCBwb3dlciBvZmYgdGhlIHN5c3RlbSBhbmQgcmVwbGFjZSB0aGUgIgorCQkgICAgICAgImFkYXB0ZXJcbiIpOwogCQkvKiB3cml0ZSB0byBjbGVhciB0aGUgaW50ZXJydXB0ICovCiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDUiwgSVhHQkVfRUlDUl9HUElfU0RQMCk7CiAJfQpAQCAtMTY2OCw3ICsxNjY3LDcgQEAKIAogCWlmICgoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZBTl9GQUlMX0NBUEFCTEUpICYmCiAJICAgIChlaWNyICYgSVhHQkVfRUlDUl9HUElfU0RQMSkpIHsKLQkJRFBSSU5USyhQUk9CRSwgQ1JJVCwgIkZhbiBoYXMgc3RvcHBlZCwgcmVwbGFjZSB0aGUgYWRhcHRlclxuIik7CisJCWVfY3JpdChwcm9iZSwgIkZhbiBoYXMgc3RvcHBlZCwgcmVwbGFjZSB0aGUgYWRhcHRlclxuIik7CiAJCS8qIHdyaXRlIHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgKi8KIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNSLCBJWEdCRV9FSUNSX0dQSV9TRFAxKTsKIAl9CkBAIC0yMTU0LDkgKzIxNTMsOCBAQAogCQkgICAgICAgICAgICAgICAgICBoYW5kbGVyLCAwLCBhZGFwdGVyLT5uYW1lW3ZlY3Rvcl0sCiAJCSAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnFfdmVjdG9yW3ZlY3Rvcl0pOwogCQlpZiAoZXJyKSB7Ci0JCQlEUFJJTlRLKFBST0JFLCBFUlIsCi0JCQkgICAgICAgICJyZXF1ZXN0X2lycSBmYWlsZWQgZm9yIE1TSVggaW50ZXJydXB0ICIKLQkJCSAgICAgICAgIkVycm9yOiAlZFxuIiwgZXJyKTsKKwkJCWVfZXJyKHByb2JlLCAicmVxdWVzdF9pcnEgZmFpbGVkIGZvciBNU0lYIGludGVycnVwdCAiCisJCQkgICAgICAiRXJyb3I6ICVkXG4iLCBlcnIpOwogCQkJZ290byBmcmVlX3F1ZXVlX2lycXM7CiAJCX0KIAl9CkBAIC0yMTY1LDggKzIxNjMsNyBAQAogCWVyciA9IHJlcXVlc3RfaXJxKGFkYXB0ZXItPm1zaXhfZW50cmllc1t2ZWN0b3JdLnZlY3RvciwKIAkgICAgICAgICAgICAgICAgICBpeGdiZV9tc2l4X2xzYywgMCwgYWRhcHRlci0+bmFtZVt2ZWN0b3JdLCBuZXRkZXYpOwogCWlmIChlcnIpIHsKLQkJRFBSSU5USyhQUk9CRSwgRVJSLAotCQkJInJlcXVlc3RfaXJxIGZvciBtc2l4X2xzYyBmYWlsZWQ6ICVkXG4iLCBlcnIpOworCQllX2Vycihwcm9iZSwgInJlcXVlc3RfaXJxIGZvciBtc2l4X2xzYyBmYWlsZWQ6ICVkXG4iLCBlcnIpOwogCQlnb3RvIGZyZWVfcXVldWVfaXJxczsKIAl9CiAKQEAgLTIzNTIsNyArMjM0OSw3IEBACiAJfQogCiAJaWYgKGVycikKLQkJRFBSSU5USyhQUk9CRSwgRVJSLCAicmVxdWVzdF9pcnEgZmFpbGVkLCBFcnJvciAlZFxuIiwgZXJyKTsKKwkJZV9lcnIocHJvYmUsICJyZXF1ZXN0X2lycSBmYWlsZWQsIEVycm9yICVkXG4iLCBlcnIpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTI0MjMsNyArMjQyMCw3IEBACiAJbWFwX3ZlY3Rvcl90b19yeHEoYWRhcHRlciwgMCwgMCk7CiAJbWFwX3ZlY3Rvcl90b190eHEoYWRhcHRlciwgMCwgMCk7CiAKLQlEUFJJTlRLKEhXLCBJTkZPLCAiTGVnYWN5IGludGVycnVwdCBJVkFSIHNldHVwIGRvbmVcbiIpOworCWVfaW5mbyhodywgIkxlZ2FjeSBpbnRlcnJ1cHQgSVZBUiBzZXR1cCBkb25lXG4iKTsKIH0KIAogLyoqCkBAIC0yODAzLDEwICsyODAwLDggQEAKIAkJICAgIC8qIFBlcmZvcm0gaGFzaCBvbiB0aGVzZSBwYWNrZXQgdHlwZXMgKi8KIAkJbXJxYyB8PSBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY0CiAJCSAgICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNF9UQ1AKLQkJICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY0X1VEUAogCQkgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjYKLQkJICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY2X1RDUAotCQkgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjZfVURQOworCQkgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjZfVENQOwogCX0KIAlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01SUUMsIG1ycWMpOwogCkBAIC0yOTk1LDYgKzI5OTAsNDggQEAKIH0KIAogLyoqCisgKiBpeGdiZV93cml0ZV91Y19hZGRyX2xpc3QgLSB3cml0ZSB1bmljYXN0IGFkZHJlc3NlcyB0byBSQVIgdGFibGUKKyAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBXcml0ZXMgdW5pY2FzdCBhZGRyZXNzIGxpc3QgdG8gdGhlIFJBUiB0YWJsZS4KKyAqIFJldHVybnM6IC1FTk9NRU0gb24gZmFpbHVyZS9pbnN1ZmZpY2llbnQgYWRkcmVzcyBzcGFjZQorICogICAgICAgICAgICAgICAgMCBvbiBubyBhZGRyZXNzZXMgd3JpdHRlbgorICogICAgICAgICAgICAgICAgWCBvbiB3cml0aW5nIFggYWRkcmVzc2VzIHRvIHRoZSBSQVIgdGFibGUKKyAqKi8KK3N0YXRpYyBpbnQgaXhnYmVfd3JpdGVfdWNfYWRkcl9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdW5zaWduZWQgaW50IHZmbiA9IGFkYXB0ZXItPm51bV92ZnM7CisJdW5zaWduZWQgaW50IHJhcl9lbnRyaWVzID0gaHctPm1hYy5udW1fcmFyX2VudHJpZXMgLSAodmZuICsgMSk7CisJaW50IGNvdW50ID0gMDsKKworCS8qIHJldHVybiBFTk9NRU0gaW5kaWNhdGluZyBpbnN1ZmZpY2llbnQgbWVtb3J5IGZvciBhZGRyZXNzZXMgKi8KKwlpZiAobmV0ZGV2X3VjX2NvdW50KG5ldGRldikgPiByYXJfZW50cmllcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoIW5ldGRldl91Y19lbXB0eShuZXRkZXYpICYmIHJhcl9lbnRyaWVzKSB7CisJCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7CisJCS8qIHJldHVybiBlcnJvciBpZiB3ZSBkbyBub3Qgc3VwcG9ydCB3cml0aW5nIHRvIFJBUiB0YWJsZSAqLworCQlpZiAoIWh3LT5tYWMub3BzLnNldF9yYXIpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQluZXRkZXZfZm9yX2VhY2hfdWNfYWRkcihoYSwgbmV0ZGV2KSB7CisJCQlpZiAoIXJhcl9lbnRyaWVzKQorCQkJCWJyZWFrOworCQkJaHctPm1hYy5vcHMuc2V0X3JhcihodywgcmFyX2VudHJpZXMtLSwgaGEtPmFkZHIsCisJCQkJCSAgICB2Zm4sIElYR0JFX1JBSF9BVik7CisJCQljb3VudCsrOworCQl9CisJfQorCS8qIHdyaXRlIHRoZSBhZGRyZXNzZXMgaW4gcmV2ZXJzZSBvcmRlciB0byBhdm9pZCB3cml0ZSBjb21iaW5pbmcgKi8KKwlmb3IgKDsgcmFyX2VudHJpZXMgPiAwIDsgcmFyX2VudHJpZXMtLSkKKwkJaHctPm1hYy5vcHMuY2xlYXJfcmFyKGh3LCByYXJfZW50cmllcyk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qKgogICogaXhnYmVfc2V0X3J4X21vZGUgLSBVbmljYXN0LCBNdWx0aWNhc3QgYW5kIFByb21pc2N1b3VzIG1vZGUgc2V0CiAgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCiAgKgpAQCAtMzAwNywzOCArMzA0NCw1OCBAQAogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCXUzMiBmY3RybDsKKwl1MzIgZmN0cmwsIHZtb2xyID0gSVhHQkVfVk1PTFJfQkFNIHwgSVhHQkVfVk1PTFJfQVVQRTsKKwlpbnQgY291bnQ7CiAKIAkvKiBDaGVjayBmb3IgUHJvbWlzY3VvdXMgYW5kIEFsbCBNdWx0aWNhc3QgbW9kZXMgKi8KIAogCWZjdHJsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDVFJMKTsKIAorCS8qIGNsZWFyIHRoZSBiaXRzIHdlIGFyZSBjaGFuZ2luZyB0aGUgc3RhdHVzIG9mICovCisJZmN0cmwgJj0gfihJWEdCRV9GQ1RSTF9VUEUgfCBJWEdCRV9GQ1RSTF9NUEUpOworCiAJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogCQlody0+YWRkcl9jdHJsLnVzZXJfc2V0X3Byb21pc2MgPSB0cnVlOwogCQlmY3RybCB8PSAoSVhHQkVfRkNUUkxfVVBFIHwgSVhHQkVfRkNUUkxfTVBFKTsKKwkJdm1vbHIgfD0gKElYR0JFX1ZNT0xSX1JPUEUgfCBJWEdCRV9WTU9MUl9NUEUpOwogCQkvKiBkb24ndCBoYXJkd2FyZSBmaWx0ZXIgdmxhbnMgaW4gcHJvbWlzYyBtb2RlICovCiAJCWl4Z2JlX3ZsYW5fZmlsdGVyX2Rpc2FibGUoYWRhcHRlcik7CiAJfSBlbHNlIHsKIAkJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKIAkJCWZjdHJsIHw9IElYR0JFX0ZDVFJMX01QRTsKLQkJCWZjdHJsICY9IH5JWEdCRV9GQ1RSTF9VUEU7Ci0JCX0gZWxzZSBpZiAoIWh3LT5hZGRyX2N0cmwudWNfc2V0X3Byb21pc2MpIHsKLQkJCWZjdHJsICY9IH4oSVhHQkVfRkNUUkxfVVBFIHwgSVhHQkVfRkNUUkxfTVBFKTsKKwkJCXZtb2xyIHw9IElYR0JFX1ZNT0xSX01QRTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBXcml0ZSBhZGRyZXNzZXMgdG8gdGhlIE1UQSwgaWYgdGhlIGF0dGVtcHQgZmFpbHMKKwkJCSAqIHRoZW4gd2Ugc2hvdWxkIGp1c3QgdHVybiBvbiBwcm9taXNjb3VzIG1vZGUgc28KKwkJCSAqIHRoYXQgd2UgY2FuIGF0IGxlYXN0IHJlY2VpdmUgbXVsdGljYXN0IHRyYWZmaWMKKwkJCSAqLworCQkJaHctPm1hYy5vcHMudXBkYXRlX21jX2FkZHJfbGlzdChodywgbmV0ZGV2KTsKKwkJCXZtb2xyIHw9IElYR0JFX1ZNT0xSX1JPTVBFOwogCQl9CiAJCWl4Z2JlX3ZsYW5fZmlsdGVyX2VuYWJsZShhZGFwdGVyKTsKIAkJaHctPmFkZHJfY3RybC51c2VyX3NldF9wcm9taXNjID0gZmFsc2U7CisJCS8qCisJCSAqIFdyaXRlIGFkZHJlc3NlcyB0byBhdmFpbGFibGUgUkFSIHJlZ2lzdGVycywgaWYgdGhlcmUgaXMgbm90CisJCSAqIHN1ZmZpY2llbnQgc3BhY2UgdG8gc3RvcmUgYWxsIHRoZSBhZGRyZXNzZXMgdGhlbiBlbmFibGUKKwkJICogdW5pY2FzdCBwcm9taXNjb3VzIG1vZGUKKwkJICovCisJCWNvdW50ID0gaXhnYmVfd3JpdGVfdWNfYWRkcl9saXN0KG5ldGRldik7CisJCWlmIChjb3VudCA8IDApIHsKKwkJCWZjdHJsIHw9IElYR0JFX0ZDVFJMX1VQRTsKKwkJCXZtb2xyIHw9IElYR0JFX1ZNT0xSX1JPUEU7CisJCX0KKwl9CisKKwlpZiAoYWRhcHRlci0+bnVtX3ZmcykgeworCQlpeGdiZV9yZXN0b3JlX3ZmX211bHRpY2FzdHMoYWRhcHRlcik7CisJCXZtb2xyIHw9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WTU9MUihhZGFwdGVyLT5udW1fdmZzKSkgJgorCQkJIH4oSVhHQkVfVk1PTFJfTVBFIHwgSVhHQkVfVk1PTFJfUk9NUEUgfAorCQkJICAgSVhHQkVfVk1PTFJfUk9QRSk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVk1PTFIoYWRhcHRlci0+bnVtX3ZmcyksIHZtb2xyKTsKIAl9CiAKIAlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDVFJMLCBmY3RybCk7Ci0KLQkvKiByZXByb2dyYW0gc2Vjb25kYXJ5IHVuaWNhc3QgbGlzdCAqLwotCWh3LT5tYWMub3BzLnVwZGF0ZV91Y19hZGRyX2xpc3QoaHcsIG5ldGRldik7Ci0KLQkvKiByZXByb2dyYW0gbXVsdGljYXN0IGxpc3QgKi8KLQlody0+bWFjLm9wcy51cGRhdGVfbWNfYWRkcl9saXN0KGh3LCBuZXRkZXYpOwotCi0JaWYgKGFkYXB0ZXItPm51bV92ZnMpCi0JCWl4Z2JlX3Jlc3RvcmVfdmZfbXVsdGljYXN0cyhhZGFwdGVyKTsKIH0KIAogc3RhdGljIHZvaWQgaXhnYmVfbmFwaV9lbmFibGVfYWxsKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQpAQCAtMzI1Nyw4ICszMzE0LDggQEAKIAkJCW1zbGVlcCgxKTsKIAl9CiAJaWYgKGsgPj0gSVhHQkVfTUFYX1JYX0RFU0NfUE9MTCkgewotCQlEUFJJTlRLKERSViwgRVJSLCAiUlhEQ1RMLkVOQUJMRSBvbiBSeCBxdWV1ZSAlZCAiCi0JCSAgICAgICAgIm5vdCBzZXQgd2l0aGluIHRoZSBwb2xsaW5nIHBlcmlvZFxuIiwgcnhyKTsKKwkJZV9lcnIoZHJ2LCAiUlhEQ1RMLkVOQUJMRSBvbiBSeCBxdWV1ZSAlZCBub3Qgc2V0IHdpdGhpbiAiCisJCSAgICAgICJ0aGUgcG9sbGluZyBwZXJpb2RcbiIsIHJ4cik7CiAJfQogCWl4Z2JlX3JlbGVhc2VfcnhfZGVzYygmYWRhcHRlci0+aHcsIGFkYXB0ZXItPnJ4X3JpbmdbcnhyXSwKIAkgICAgICAgICAgICAgICAgICAgICAgKGFkYXB0ZXItPnJ4X3JpbmdbcnhyXS0+Y291bnQgLSAxKSk7CkBAIC0zMzg3LDggKzM0NDQsNyBAQAogCQkJfSB3aGlsZSAoLS13YWl0X2xvb3AgJiYKIAkJCSAgICAgICAgICEodHhkY3RsICYgSVhHQkVfVFhEQ1RMX0VOQUJMRSkpOwogCQkJaWYgKCF3YWl0X2xvb3ApCi0JCQkJRFBSSU5USyhEUlYsIEVSUiwgIkNvdWxkIG5vdCBlbmFibGUgIgotCQkJCSAgICAgICAgIlR4IFF1ZXVlICVkXG4iLCBqKTsKKwkJCQllX2VycihkcnYsICJDb3VsZCBub3QgZW5hYmxlIFR4IFF1ZXVlICVkXG4iLCBqKTsKIAkJfQogCX0KIApAQCAtMzQzNiw4ICszNDkyLDcgQEAKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZBTl9GQUlMX0NBUEFCTEUpIHsKIAkJdTMyIGVzZHAgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRVNEUCk7CiAJCWlmIChlc2RwICYgSVhHQkVfRVNEUF9TRFAxKQotCQkJRFBSSU5USyhEUlYsIENSSVQsCi0JCQkJIkZhbiBoYXMgc3RvcHBlZCwgcmVwbGFjZSB0aGUgYWRhcHRlclxuIik7CisJCQllX2NyaXQoZHJ2LCAiRmFuIGhhcyBzdG9wcGVkLCByZXBsYWNlIHRoZSBhZGFwdGVyXG4iKTsKIAl9CiAKIAkvKgpAQCAtMzQ2Niw3ICszNTIxLDcgQEAKIAl9IGVsc2UgewogCQllcnIgPSBpeGdiZV9ub25fc2ZwX2xpbmtfY29uZmlnKGh3KTsKIAkJaWYgKGVycikKLQkJCURQUklOVEsoUFJPQkUsIEVSUiwgImxpbmtfY29uZmlnIEZBSUxFRCAlZFxuIiwgZXJyKTsKKwkJCWVfZXJyKHByb2JlLCAibGlua19jb25maWcgRkFJTEVEICVkXG4iLCBlcnIpOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCkBAIC0zNTI3LDE5ICszNTgyLDE5IEBACiAJY2FzZSBJWEdCRV9FUlJfU0ZQX05PVF9QUkVTRU5UOgogCQlicmVhazsKIAljYXNlIElYR0JFX0VSUl9NQVNURVJfUkVRVUVTVFNfUEVORElORzoKLQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAibWFzdGVyIGRpc2FibGUgdGltZWQgb3V0XG4iKTsKKwkJZV9kZXZfZXJyKCJtYXN0ZXIgZGlzYWJsZSB0aW1lZCBvdXRcbiIpOwogCQlicmVhazsKIAljYXNlIElYR0JFX0VSUl9FRVBST01fVkVSU0lPTjoKIAkJLyogV2UgYXJlIHJ1bm5pbmcgb24gYSBwcmUtcHJvZHVjdGlvbiBkZXZpY2UsIGxvZyBhIHdhcm5pbmcgKi8KLQkJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwgIlRoaXMgZGV2aWNlIGlzIGEgcHJlLXByb2R1Y3Rpb24gIgotCQkgICAgICAgICAiYWRhcHRlci9MT00uICBQbGVhc2UgYmUgYXdhcmUgdGhlcmUgbWF5IGJlIGlzc3VlcyAiCi0JCSAgICAgICAgICJhc3NvY2lhdGVkIHdpdGggeW91ciBoYXJkd2FyZS4gIElmIHlvdSBhcmUgIgotCQkgICAgICAgICAiZXhwZXJpZW5jaW5nIHByb2JsZW1zIHBsZWFzZSBjb250YWN0IHlvdXIgSW50ZWwgb3IgIgotCQkgICAgICAgICAiaGFyZHdhcmUgcmVwcmVzZW50YXRpdmUgd2hvIHByb3ZpZGVkIHlvdSB3aXRoIHRoaXMgIgotCQkgICAgICAgICAiaGFyZHdhcmUuXG4iKTsKKwkJZV9kZXZfd2FybigiVGhpcyBkZXZpY2UgaXMgYSBwcmUtcHJvZHVjdGlvbiBhZGFwdGVyL0xPTS4gIgorCQkJICAgIlBsZWFzZSBiZSBhd2FyZSB0aGVyZSBtYXkgYmUgaXNzdWVzYXNzb2NpYXRlZCB3aXRoICIKKwkJCSAgICJ5b3VyIGhhcmR3YXJlLiAgSWYgeW91IGFyZSBleHBlcmllbmNpbmcgcHJvYmxlbXMgIgorCQkJICAgInBsZWFzZSBjb250YWN0IHlvdXIgSW50ZWwgb3IgaGFyZHdhcmUgIgorCQkJICAgInJlcHJlc2VudGF0aXZlIHdobyBwcm92aWRlZCB5b3Ugd2l0aCB0aGlzICIKKwkJCSAgICJoYXJkd2FyZS5cbiIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJIYXJkd2FyZSBFcnJvcjogJWRcbiIsIGVycik7CisJCWVfZGV2X2VycigiSGFyZHdhcmUgRXJyb3I6ICVkXG4iLCBlcnIpOwogCX0KIAogCS8qIHJlcHJvZ3JhbSB0aGUgUkFSWzBdIGluIGNhc2UgdXNlciBjaGFuZ2VkIGl0LiAqLwpAQCAtMzkyMCwxMiArMzk3NSwxMiBAQAogCQlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0gMTsKICNpZmRlZiBDT05GSUdfSVhHQkVfRENCCiAJCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpIHsKLQkJCURQUklOVEsoUFJPQkUsIElORk8sICJGQ29FIGVuYWJsZWQgd2l0aCBEQ0JcbiIpOworCQkJZV9pbmZvKHByb2JlLCAiRkNvRSBlbmFibGVkIHdpdGggRENCXG4iKTsKIAkJCWl4Z2JlX3NldF9kY2JfcXVldWVzKGFkYXB0ZXIpOwogCQl9CiAjZW5kaWYKIAkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SU1NfRU5BQkxFRCkgewotCQkJRFBSSU5USyhQUk9CRSwgSU5GTywgIkZDb0UgZW5hYmxlZCB3aXRoIFJTU1xuIik7CisJCQllX2luZm8ocHJvYmUsICJGQ29FIGVuYWJsZWQgd2l0aCBSU1NcbiIpOwogCQkJaWYgKChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkRJUl9IQVNIX0NBUEFCTEUpIHx8CiAJCQkgICAgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GRElSX1BFUkZFQ1RfQ0FQQUJMRSkpCiAJCQkJaXhnYmVfc2V0X2ZkaXJfcXVldWVzKGFkYXB0ZXIpOwpAQCAtNDAzOCw3ICs0MDkzLDggQEAKIAkJICogVGhpcyBqdXN0IG1lYW5zIHdlJ2xsIGdvIHdpdGggZWl0aGVyIGEgc2luZ2xlIE1TSQogCQkgKiB2ZWN0b3Igb3IgZmFsbCBiYWNrIHRvIGxlZ2FjeSBpbnRlcnJ1cHRzLgogCQkgKi8KLQkJRFBSSU5USyhIVywgREVCVUcsICJVbmFibGUgdG8gYWxsb2NhdGUgTVNJLVggaW50ZXJydXB0c1xuIik7CisJCW5ldGlmX3ByaW50ayhhZGFwdGVyLCBodywgS0VSTl9ERUJVRywgYWRhcHRlci0+bmV0ZGV2LAorCQkJICAgICAiVW5hYmxlIHRvIGFsbG9jYXRlIE1TSS1YIGludGVycnVwdHNcbiIpOwogCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19NU0lYX0VOQUJMRUQ7CiAJCWtmcmVlKGFkYXB0ZXItPm1zaXhfZW50cmllcyk7CiAJCWFkYXB0ZXItPm1zaXhfZW50cmllcyA9IE5VTEw7CkBAIC00NDM1LDggKzQ0OTEsOSBAQAogCWlmICghZXJyKSB7CiAJCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfTVNJX0VOQUJMRUQ7CiAJfSBlbHNlIHsKLQkJRFBSSU5USyhIVywgREVCVUcsICJVbmFibGUgdG8gYWxsb2NhdGUgTVNJIGludGVycnVwdCwgIgotCQkgICAgICAgICJmYWxsaW5nIGJhY2sgdG8gbGVnYWN5LiAgRXJyb3I6ICVkXG4iLCBlcnIpOworCQluZXRpZl9wcmludGsoYWRhcHRlciwgaHcsIEtFUk5fREVCVUcsIGFkYXB0ZXItPm5ldGRldiwKKwkJCSAgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBNU0kgaW50ZXJydXB0LCAiCisJCQkgICAgICJmYWxsaW5nIGJhY2sgdG8gbGVnYWN5LiAgRXJyb3I6ICVkXG4iLCBlcnIpOwogCQkvKiByZXNldCBlcnIgKi8KIAkJZXJyID0gMDsKIAl9CkBAIC00NTU3LDI3ICs0NjE0LDI1IEBACiAKIAllcnIgPSBpeGdiZV9zZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7CiAJaWYgKGVycikgewotCQlEUFJJTlRLKFBST0JFLCBFUlIsICJVbmFibGUgdG8gc2V0dXAgaW50ZXJydXB0IGNhcGFiaWxpdGllc1xuIik7CisJCWVfZGV2X2VycigiVW5hYmxlIHRvIHNldHVwIGludGVycnVwdCBjYXBhYmlsaXRpZXNcbiIpOwogCQlnb3RvIGVycl9zZXRfaW50ZXJydXB0OwogCX0KIAogCWVyciA9IGl4Z2JlX2FsbG9jX3FfdmVjdG9ycyhhZGFwdGVyKTsKIAlpZiAoZXJyKSB7Ci0JCURQUklOVEsoUFJPQkUsIEVSUiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHF1ZXVlICIKLQkJICAgICAgICAidmVjdG9yc1xuIik7CisJCWVfZGV2X2VycigiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcXVldWUgdmVjdG9yc1xuIik7CiAJCWdvdG8gZXJyX2FsbG9jX3FfdmVjdG9yczsKIAl9CiAKIAllcnIgPSBpeGdiZV9hbGxvY19xdWV1ZXMoYWRhcHRlcik7CiAJaWYgKGVycikgewotCQlEUFJJTlRLKFBST0JFLCBFUlIsICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBxdWV1ZXNcbiIpOworCQllX2Rldl9lcnIoIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHF1ZXVlc1xuIik7CiAJCWdvdG8gZXJyX2FsbG9jX3F1ZXVlczsKIAl9CiAKLQlEUFJJTlRLKERSViwgSU5GTywgIk11bHRpcXVldWUgJXM6IFJ4IFF1ZXVlIGNvdW50ID0gJXUsICIKLQkgICAgICAgICJUeCBRdWV1ZSBjb3VudCA9ICV1XG4iLAotCSAgICAgICAgKGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPiAxKSA/ICJFbmFibGVkIiA6Ci0JICAgICAgICAiRGlzYWJsZWQiLCBhZGFwdGVyLT5udW1fcnhfcXVldWVzLCBhZGFwdGVyLT5udW1fdHhfcXVldWVzKTsKKwllX2Rldl9pbmZvKCJNdWx0aXF1ZXVlICVzOiBSeCBRdWV1ZSBjb3VudCA9ICV1LCBUeCBRdWV1ZSBjb3VudCA9ICV1XG4iLAorCQkgICAoYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA+IDEpID8gIkVuYWJsZWQiIDogIkRpc2FibGVkIiwKKwkJICAgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcywgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyk7CiAKIAlzZXRfYml0KF9fSVhHQkVfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKTsKIApAQCAtNDY0OCwxNSArNDcwMywxMyBAQAogCQkJZ290byByZXNjaGVkdWxlOwogCQlyZXQgPSBody0+cGh5Lm9wcy5yZXNldChodyk7CiAJCWlmIChyZXQgPT0gSVhHQkVfRVJSX1NGUF9OT1RfU1VQUE9SVEVEKSB7Ci0JCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSAiCi0JCQkJImJlY2F1c2UgYW4gdW5zdXBwb3J0ZWQgU0ZQKyBtb2R1bGUgdHlwZSAiCi0JCQkJIndhcyBkZXRlY3RlZC5cbiIKLQkJCQkiUmVsb2FkIHRoZSBkcml2ZXIgYWZ0ZXIgaW5zdGFsbGluZyBhICIKLQkJCQkic3VwcG9ydGVkIG1vZHVsZS5cbiIpOworCQkJZV9kZXZfZXJyKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBiZWNhdXNlIGFuIHVuc3VwcG9ydGVkICIKKwkJCQkgICJTRlArIG1vZHVsZSB0eXBlIHdhcyBkZXRlY3RlZC5cbiIpOworCQkJZV9kZXZfZXJyKCJSZWxvYWQgdGhlIGRyaXZlciBhZnRlciBpbnN0YWxsaW5nIGEgIgorCQkJCSAgInN1cHBvcnRlZCBtb2R1bGUuXG4iKTsKIAkJCXVucmVnaXN0ZXJfbmV0ZGV2KGFkYXB0ZXItPm5ldGRldik7CiAJCX0gZWxzZSB7Ci0JCQlEUFJJTlRLKFBST0JFLCBJTkZPLCAiZGV0ZWN0ZWQgU0ZQKzogJWRcbiIsCi0JCQkgICAgICAgIGh3LT5waHkuc2ZwX3R5cGUpOworCQkJZV9pbmZvKHByb2JlLCAiZGV0ZWN0ZWQgU0ZQKzogJWRcbiIsIGh3LT5waHkuc2ZwX3R5cGUpOwogCQl9CiAJCS8qIGRvbid0IG5lZWQgdGhpcyByb3V0aW5lIGFueSBtb3JlICovCiAJCWNsZWFyX2JpdChfX0lYR0JFX1NGUF9NT0RVTEVfTk9UX0ZPVU5ELCAmYWRhcHRlci0+c3RhdGUpOwpAQCAtNDczMCw2ICs0NzgzLDcgQEAKICNpZmRlZiBDT05GSUdfSVhHQkVfRENCCiAJCS8qIERlZmF1bHQgdHJhZmZpYyBjbGFzcyB0byB1c2UgZm9yIEZDb0UgKi8KIAkJYWRhcHRlci0+ZmNvZS50YyA9IElYR0JFX0ZDT0VfREVGVEM7CisJCWFkYXB0ZXItPmZjb2UudXAgPSBJWEdCRV9GQ09FX0RFRlRDOwogI2VuZGlmCiAjZW5kaWYgLyogSVhHQkVfRkNPRSAqLwogCX0KQEAgLTQ3ODMsNyArNDgzNyw3IEBACiAKIAkvKiBpbml0aWFsaXplIGVlcHJvbSBwYXJhbWV0ZXJzICovCiAJaWYgKGl4Z2JlX2luaXRfZWVwcm9tX3BhcmFtc19nZW5lcmljKGh3KSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFRVBST00gaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKKwkJZV9kZXZfZXJyKCJFRVBST00gaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC00ODM2LDggKzQ4OTAsNyBAQAogZXJyOgogCXZmcmVlKHR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvKTsKIAl0eF9yaW5nLT50eF9idWZmZXJfaW5mbyA9IE5VTEw7Ci0JRFBSSU5USyhQUk9CRSwgRVJSLCAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHRyYW5zbWl0ICIKLQkgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdG9yIHJpbmdcbiIpOworCWVfZXJyKHByb2JlLCAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIFR4IGRlc2NyaXB0b3IgcmluZ1xuIik7CiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKQEAgLTQ4NTksNyArNDkxMiw3IEBACiAJCWVyciA9IGl4Z2JlX3NldHVwX3R4X3Jlc291cmNlcyhhZGFwdGVyLCBhZGFwdGVyLT50eF9yaW5nW2ldKTsKIAkJaWYgKCFlcnIpCiAJCQljb250aW51ZTsKLQkJRFBSSU5USyhQUk9CRSwgRVJSLCAiQWxsb2NhdGlvbiBmb3IgVHggUXVldWUgJXUgZmFpbGVkXG4iLCBpKTsKKwkJZV9lcnIocHJvYmUsICJBbGxvY2F0aW9uIGZvciBUeCBRdWV1ZSAldSBmYWlsZWRcbiIsIGkpOwogCQlicmVhazsKIAl9CiAKQEAgLTQ4ODQsOCArNDkzNyw4IEBACiAJaWYgKCFyeF9yaW5nLT5yeF9idWZmZXJfaW5mbykKIAkJcnhfcmluZy0+cnhfYnVmZmVyX2luZm8gPSB2bWFsbG9jKHNpemUpOwogCWlmICghcnhfcmluZy0+cnhfYnVmZmVyX2luZm8pIHsKLQkJRFBSSU5USyhQUk9CRSwgRVJSLAotCQkgICAgICAgICJ2bWFsbG9jIGFsbG9jYXRpb24gZmFpbGVkIGZvciB0aGUgcnggZGVzYyByaW5nXG4iKTsKKwkJZV9lcnIocHJvYmUsICJ2bWFsbG9jIGFsbG9jYXRpb24gZmFpbGVkIGZvciB0aGUgUnggIgorCQkgICAgICAiZGVzY3JpcHRvciByaW5nXG4iKTsKIAkJZ290byBhbGxvY19mYWlsZWQ7CiAJfQogCW1lbXNldChyeF9yaW5nLT5yeF9idWZmZXJfaW5mbywgMCwgc2l6ZSk7CkBAIC00ODk4LDggKzQ5NTEsOCBAQAogCQkJCQkgICAmcnhfcmluZy0+ZG1hLCBHRlBfS0VSTkVMKTsKIAogCWlmICghcnhfcmluZy0+ZGVzYykgewotCQlEUFJJTlRLKFBST0JFLCBFUlIsCi0JCSAgICAgICAgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCBmb3IgdGhlIHJ4IGRlc2MgcmluZ1xuIik7CisJCWVfZXJyKHByb2JlLCAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIGZvciB0aGUgUnggIgorCQkgICAgICAiZGVzY3JpcHRvciByaW5nXG4iKTsKIAkJdmZyZWUocnhfcmluZy0+cnhfYnVmZmVyX2luZm8pOwogCQlnb3RvIGFsbG9jX2ZhaWxlZDsKIAl9CkBAIC00OTMyLDcgKzQ5ODUsNyBAQAogCQllcnIgPSBpeGdiZV9zZXR1cF9yeF9yZXNvdXJjZXMoYWRhcHRlciwgYWRhcHRlci0+cnhfcmluZ1tpXSk7CiAJCWlmICghZXJyKQogCQkJY29udGludWU7Ci0JCURQUklOVEsoUFJPQkUsIEVSUiwgIkFsbG9jYXRpb24gZm9yIFJ4IFF1ZXVlICV1IGZhaWxlZFxuIiwgaSk7CisJCWVfZXJyKHByb2JlLCAiQWxsb2NhdGlvbiBmb3IgUnggUXVldWUgJXUgZmFpbGVkXG4iLCBpKTsKIAkJYnJlYWs7CiAJfQogCkBAIC01MDMxLDggKzUwODQsNyBAQAogCWlmICgobmV3X210dSA8IDY4KSB8fCAobWF4X2ZyYW1lID4gSVhHQkVfTUFYX0pVTUJPX0ZSQU1FX1NJWkUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCURQUklOVEsoUFJPQkUsIElORk8sICJjaGFuZ2luZyBNVFUgZnJvbSAlZCB0byAlZFxuIiwKLQkgICAgICAgIG5ldGRldi0+bXR1LCBuZXdfbXR1KTsKKwllX2luZm8ocHJvYmUsICJjaGFuZ2luZyBNVFUgZnJvbSAlZCB0byAlZFxuIiwgbmV0ZGV2LT5tdHUsIG5ld19tdHUpOwogCS8qIG11c3Qgc2V0IG5ldyBNVFUgYmVmb3JlIGNhbGxpbmcgZG93biBvciB1cCAqLwogCW5ldGRldi0+bXR1ID0gbmV3X210dTsKIApAQCAtNTE0NSw4ICs1MTk3LDcgQEAKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaXhnYmU6IENhbm5vdCBlbmFibGUgUENJIGRldmljZSBmcm9tICIKLQkJCQkic3VzcGVuZFxuIik7CisJCWVfZGV2X2VycigiQ2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlIGZyb20gc3VzcGVuZFxuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwpAQCAtNTE1NSw4ICs1MjA2LDcgQEAKIAogCWVyciA9IGl4Z2JlX2luaXRfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaXhnYmU6IENhbm5vdCBpbml0aWFsaXplIGludGVycnVwdHMgZm9yICIKLQkJICAgICAgICAgICAgICAgICJkZXZpY2VcbiIpOworCQllX2Rldl9lcnIoIkNhbm5vdCBpbml0aWFsaXplIGludGVycnVwdHMgZm9yIGRldmljZVxuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC01NTE3LDEwICs1NTY3LDEwIEBACiAJZXJyID0gaHctPnBoeS5vcHMuaWRlbnRpZnlfc2ZwKGh3KTsKIAogCWlmIChlcnIgPT0gSVhHQkVfRVJSX1NGUF9OT1RfU1VQUE9SVEVEKSB7Ci0JCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIGJlY2F1c2UgIgotCQkJImFuIHVuc3VwcG9ydGVkIFNGUCsgbW9kdWxlIHR5cGUgd2FzIGRldGVjdGVkLlxuIgotCQkJIlJlbG9hZCB0aGUgZHJpdmVyIGFmdGVyIGluc3RhbGxpbmcgYSBzdXBwb3J0ZWQgIgotCQkJIm1vZHVsZS5cbiIpOworCQllX2Rldl9lcnIoImZhaWxlZCB0byBpbml0aWFsaXplIGJlY2F1c2UgYW4gdW5zdXBwb3J0ZWQgU0ZQKyAiCisJCQkgICJtb2R1bGUgdHlwZSB3YXMgZGV0ZWN0ZWQuXG4iKTsKKwkJZV9kZXZfZXJyKCJSZWxvYWQgdGhlIGRyaXZlciBhZnRlciBpbnN0YWxsaW5nIGEgc3VwcG9ydGVkICIKKwkJCSAgIm1vZHVsZS5cbiIpOwogCQl1bnJlZ2lzdGVyX25ldGRldihhZGFwdGVyLT5uZXRkZXYpOwogCQlyZXR1cm47CiAJfQpAQCAtNTU0OSw4ICs1NTk5LDggQEAKIAkJCXNldF9iaXQoX19JWEdCRV9GRElSX0lOSVRfRE9ORSwKIAkJCSAgICAgICAgJihhZGFwdGVyLT50eF9yaW5nW2ldLT5yZWluaXRfc3RhdGUpKTsKIAl9IGVsc2UgewotCQlEUFJJTlRLKFBST0JFLCBFUlIsICJmYWlsZWQgdG8gZmluaXNoIEZESVIgcmUtaW5pdGlhbGl6YXRpb24sICIKLQkJCSJpZ25vcmVkIGFkZGluZyBGRElSIEFUUiBmaWx0ZXJzXG4iKTsKKwkJZV9lcnIocHJvYmUsICJmYWlsZWQgdG8gZmluaXNoIEZESVIgcmUtaW5pdGlhbGl6YXRpb24sICIKKwkJICAgICAgImlnbm9yZWQgYWRkaW5nIEZESVIgQVRSIGZpbHRlcnNcbiIpOwogCX0KIAkvKiBEb25lIEZESVIgUmUtaW5pdGlhbGl6YXRpb24sIGVuYWJsZSB0cmFuc21pdHMgKi8KIAluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKGFkYXB0ZXItPm5ldGRldik7CkBAIC01NjIxLDE2ICs1NjcxLDE0IEBACiAJCQkJZmxvd190eCA9ICEhKHJtY3MgJiBJWEdCRV9STUNTX1RGQ0VfODAyXzNYKTsKIAkJCX0KIAotCQkJcHJpbnRrKEtFUk5fSU5GTyAiaXhnYmU6ICVzIE5JQyBMaW5rIGlzIFVwICVzLCAiCi0JCQkgICAgICAgIkZsb3cgQ29udHJvbDogJXNcbiIsCi0JCQkgICAgICAgbmV0ZGV2LT5uYW1lLAorCQkJZV9pbmZvKGRydiwgIk5JQyBMaW5rIGlzIFVwICVzLCBGbG93IENvbnRyb2w6ICVzXG4iLAogCQkJICAgICAgIChsaW5rX3NwZWVkID09IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMID8KLQkJCSAgICAgICAgIjEwIEdicHMiIDoKLQkJCSAgICAgICAgKGxpbmtfc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCA/Ci0JCQkgICAgICAgICAiMSBHYnBzIiA6ICJ1bmtub3duIHNwZWVkIikpLAorCQkJICAgICAgICIxMCBHYnBzIiA6CisJCQkgICAgICAgKGxpbmtfc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCA/CisJCQkgICAgICAgIjEgR2JwcyIgOiAidW5rbm93biBzcGVlZCIpKSwKIAkJCSAgICAgICAoKGZsb3dfcnggJiYgZmxvd190eCkgPyAiUlgvVFgiIDoKLQkJCSAgICAgICAgKGZsb3dfcnggPyAiUlgiIDoKLQkJCSAgICAgICAgKGZsb3dfdHggPyAiVFgiIDogIk5vbmUiKSkpKTsKKwkJCSAgICAgICAoZmxvd19yeCA/ICJSWCIgOgorCQkJICAgICAgIChmbG93X3R4ID8gIlRYIiA6ICJOb25lIikpKSk7CiAKIAkJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKIAkJfSBlbHNlIHsKQEAgLTU2NDEsOCArNTY4OSw3IEBACiAJCWFkYXB0ZXItPmxpbmtfdXAgPSBmYWxzZTsKIAkJYWRhcHRlci0+bGlua19zcGVlZCA9IDA7CiAJCWlmIChuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIml4Z2JlOiAlcyBOSUMgTGluayBpcyBEb3duXG4iLAotCQkJICAgICAgIG5ldGRldi0+bmFtZSk7CisJCQllX2luZm8oZHJ2LCAiTklDIExpbmsgaXMgRG93blxuIik7CiAJCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCQl9CiAJfQpAQCAtNTgxOCw5ICs1ODY1LDkgQEAKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJaWYgKHVubGlrZWx5KG5ldF9yYXRlbGltaXQoKSkpIHsKLQkJCQkJRFBSSU5USyhQUk9CRSwgV0FSTklORywKLQkJCQkJICJwYXJ0aWFsIGNoZWNrc3VtIGJ1dCBwcm90bz0leCFcbiIsCi0JCQkJCSBza2ItPnByb3RvY29sKTsKKwkJCQkJZV93YXJuKHByb2JlLCAicGFydGlhbCBjaGVja3N1bSAiCisJCQkJCSAgICAgICAiYnV0IHByb3RvPSV4IVxuIiwKKwkJCQkJICAgICAgIHNrYi0+cHJvdG9jb2wpOwogCQkJCX0KIAkJCQlicmVhazsKIAkJCX0KQEAgLTU5MzEsNyArNTk3OCw3IEBACiAJcmV0dXJuIGNvdW50OwogCiBkbWFfZXJyb3I6Ci0JZGV2X2VycigmcGRldi0+ZGV2LCAiVFggRE1BIG1hcCBmYWlsZWRcbiIpOworCWVfZGV2X2VycigiVFggRE1BIG1hcCBmYWlsZWRcbiIpOwogCiAJLyogY2xlYXIgdGltZXN0YW1wIGFuZCBkbWEgbWFwcGluZ3MgZm9yIGZhaWxlZCB0eF9idWZmZXJfaW5mbyBtYXAgKi8KIAl0eF9idWZmZXJfaW5mby0+ZG1hID0gMDsKQEAgLTYxMDEsMjEgKzYxNDgsMjYgQEAKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHR4cSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAorI2lmZGVmIElYR0JFX0ZDT0UKKwlpZiAoKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfRkNPRSkpIHx8CisJICAgIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0ZJUCkpKSB7CisJCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkNPRV9FTkFCTEVEKSB7CisJCQl0eHEgJj0gKGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRkNPRV0uaW5kaWNlcyAtIDEpOworCQkJdHhxICs9IGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRkNPRV0ubWFzazsKKwkJCXJldHVybiB0eHE7CisJCX0gZWxzZSBpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKSB7CisJCQl0eHEgPSBhZGFwdGVyLT5mY29lLnVwOworCQkJcmV0dXJuIHR4cTsKKwkJfQorCX0KKyNlbmRpZgorCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GRElSX0hBU0hfQ0FQQUJMRSkgewogCQl3aGlsZSAodW5saWtlbHkodHhxID49IGRldi0+cmVhbF9udW1fdHhfcXVldWVzKSkKIAkJCXR4cSAtPSBkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlczsKIAkJcmV0dXJuIHR4cTsKIAl9CiAKLSNpZmRlZiBJWEdCRV9GQ09FCi0JaWYgKChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkNPRV9FTkFCTEVEKSAmJgotCSAgICAoKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfRkNPRSkpIHx8Ci0JICAgICAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9GSVApKSkpIHsKLQkJdHhxICY9IChhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0ZDT0VdLmluZGljZXMgLSAxKTsKLQkJdHhxICs9IGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRkNPRV0ubWFzazsKLQkJcmV0dXJuIHR4cTsKLQl9Ci0jZW5kaWYKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKSB7CiAJCWlmIChza2ItPnByaW9yaXR5ID09IFRDX1BSSU9fQ09OVFJPTCkKIAkJCXR4cSA9IGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRENCXS5pbmRpY2VzLTE7CkBAIC02MTU5LDE4ICs2MjExLDE1IEBACiAJdHhfcmluZyA9IGFkYXB0ZXItPnR4X3Jpbmdbc2tiLT5xdWV1ZV9tYXBwaW5nXTsKIAogI2lmZGVmIElYR0JFX0ZDT0UKLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZDT0VfRU5BQkxFRCkgewotI2lmZGVmIENPTkZJR19JWEdCRV9EQ0IKLQkJLyogZm9yIEZDb0Ugd2l0aCBEQ0IsIHdlIGZvcmNlIHRoZSBwcmlvcml0eSB0byB3aGF0Ci0JCSAqIHdhcyBzcGVjaWZpZWQgYnkgdGhlIHN3aXRjaCAqLwotCQlpZiAoKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfRkNPRSkpIHx8Ci0JCSAgICAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9GSVApKSkgewotCQkJdHhfZmxhZ3MgJj0gfihJWEdCRV9UWF9GTEFHU19WTEFOX1BSSU9fTUFTSwotCQkJCSAgICAgIDw8IElYR0JFX1RYX0ZMQUdTX1ZMQU5fU0hJRlQpOwotCQkJdHhfZmxhZ3MgfD0gKChhZGFwdGVyLT5mY29lLnVwIDw8IDEzKQotCQkJCSAgICAgPDwgSVhHQkVfVFhfRkxBR1NfVkxBTl9TSElGVCk7Ci0JCX0KLSNlbmRpZgorCS8qIGZvciBGQ29FIHdpdGggRENCLCB3ZSBmb3JjZSB0aGUgcHJpb3JpdHkgdG8gd2hhdAorCSAqIHdhcyBzcGVjaWZpZWQgYnkgdGhlIHN3aXRjaCAqLworCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkNPRV9FTkFCTEVEICYmCisJICAgIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0ZDT0UpIHx8CisJICAgICBza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0ZJUCkpKSB7CisJCXR4X2ZsYWdzICY9IH4oSVhHQkVfVFhfRkxBR1NfVkxBTl9QUklPX01BU0sKKwkJCSAgICAgIDw8IElYR0JFX1RYX0ZMQUdTX1ZMQU5fU0hJRlQpOworCQl0eF9mbGFncyB8PSAoKGFkYXB0ZXItPmZjb2UudXAgPDwgMTMpCisJCQkgICAgICA8PCBJWEdCRV9UWF9GTEFHU19WTEFOX1NISUZUKTsKIAkJLyogZmxhZyBmb3IgRkNvRSBvZmZsb2FkcyAqLwogCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9GQ09FKSkKIAkJCXR4X2ZsYWdzIHw9IElYR0JFX1RYX0ZMQUdTX0ZDT0U7CkBAIC02NDMwLDggKzY0NzksNyBAQAogCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRDsKIAllcnIgPSBwY2lfZW5hYmxlX3NyaW92KGFkYXB0ZXItPnBkZXYsIGFkYXB0ZXItPm51bV92ZnMpOwogCWlmIChlcnIpIHsKLQkJRFBSSU5USyhQUk9CRSwgRVJSLAotCQkJIkZhaWxlZCB0byBlbmFibGUgUENJIHNyaW92OiAlZFxuIiwgZXJyKTsKKwkJZV9lcnIocHJvYmUsICJGYWlsZWQgdG8gZW5hYmxlIFBDSSBzcmlvdjogJWRcbiIsIGVycik7CiAJCWdvdG8gZXJyX25vdmZzOwogCX0KIAkvKiBJZiBjYWxsIHRvIGVuYWJsZSBWRnMgc3VjY2VlZGVkIHRoZW4gYWxsb2NhdGUgbWVtb3J5CkBAIC02NDU1LDkgKzY1MDMsOCBAQAogCX0KIAogCS8qIE9oIG9oICovCi0JRFBSSU5USyhQUk9CRSwgRVJSLAotCQkiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgVkYgIgotCQkiRGF0YSBTdG9yYWdlIC0gU1JJT1YgZGlzYWJsZWRcbiIpOworCWVfZXJyKHByb2JlLCAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgVkYgRGF0YSBTdG9yYWdlIC0gIgorCSAgICAgICJTUklPViBkaXNhYmxlZFxuIik7CiAJcGNpX2Rpc2FibGVfc3Jpb3YoYWRhcHRlci0+cGRldik7CiAKIGVycl9ub3ZmczoKQEAgLTY0OTIsNiArNjUzOSwxNSBAQAogI2VuZGlmCiAJdTMyIHBhcnRfbnVtLCBlZWM7CiAKKwkvKiBDYXRjaCBicm9rZW4gaGFyZHdhcmUgdGhhdCBwdXQgdGhlIHdyb25nIFZGIGRldmljZSBJRCBpbgorCSAqIHRoZSBQQ0llIFNSLUlPViBjYXBhYmlsaXR5LgorCSAqLworCWlmIChwZGV2LT5pc192aXJ0Zm4pIHsKKwkJV0FSTigxLCBLRVJOX0VSUiAiJXMgKCVoeDolaHgpIHNob3VsZCBub3QgYmUgYSBWRiFcbiIsCisJCSAgICAgcGNpX25hbWUocGRldiksIHBkZXYtPnZlbmRvciwgcGRldi0+ZGV2aWNlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC02NTA1LDggKzY1NjEsOCBAQAogCQkJZXJyID0gZG1hX3NldF9jb2hlcmVudF9tYXNrKCZwZGV2LT5kZXYsCiAJCQkJCQkgICAgRE1BX0JJVF9NQVNLKDMyKSk7CiAJCQlpZiAoZXJyKSB7Ci0JCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gdXNhYmxlIERNQSAiCi0JCQkJICAgICAgICAiY29uZmlndXJhdGlvbiwgYWJvcnRpbmdcbiIpOworCQkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkJIk5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvbiwgYWJvcnRpbmdcbiIpOwogCQkJCWdvdG8gZXJyX2RtYTsKIAkJCX0KIAkJfQpAQCAtNjUxNyw3ICs2NTczLDcgQEAKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPUkVTT1VSQ0VfTUVNKSwgaXhnYmVfZHJpdmVyX25hbWUpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkgICAgICAgICJwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zIGZhaWxlZCAweCV4XG4iLCBlcnIpOworCQkJInBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMgZmFpbGVkIDB4JXhcbiIsIGVycik7CiAJCWdvdG8gZXJyX3BjaV9yZWc7CiAJfQogCkBAIC02NjI4LDggKzY2ODQsNyBAQAogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkFOX0ZBSUxfQ0FQQUJMRSkgewogCQl1MzIgZXNkcCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9FU0RQKTsKIAkJaWYgKGVzZHAgJiBJWEdCRV9FU0RQX1NEUDEpCi0JCQlEUFJJTlRLKFBST0JFLCBDUklULAotCQkJCSJGYW4gaGFzIHN0b3BwZWQsIHJlcGxhY2UgdGhlIGFkYXB0ZXJcbiIpOworCQkJZV9jcml0KHByb2JlLCAiRmFuIGhhcyBzdG9wcGVkLCByZXBsYWNlIHRoZSBhZGFwdGVyXG4iKTsKIAl9CiAKIAkvKiByZXNldF9odyBmaWxscyBpbiB0aGUgcGVybV9hZGRyIGFzIHdlbGwgKi8KQEAgLTY2NDgsMTMgKzY3MDMsMTMgQEAKIAkJCSAgcm91bmRfamlmZmllcyhqaWZmaWVzICsgKDIgKiBIWikpKTsKIAkJZXJyID0gMDsKIAl9IGVsc2UgaWYgKGVyciA9PSBJWEdCRV9FUlJfU0ZQX05PVF9TVVBQT1JURUQpIHsKLQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgYmVjYXVzZSAiCi0JCQkiYW4gdW5zdXBwb3J0ZWQgU0ZQKyBtb2R1bGUgdHlwZSB3YXMgZGV0ZWN0ZWQuXG4iCi0JCQkiUmVsb2FkIHRoZSBkcml2ZXIgYWZ0ZXIgaW5zdGFsbGluZyBhIHN1cHBvcnRlZCAiCi0JCQkibW9kdWxlLlxuIik7CisJCWVfZGV2X2VycigiZmFpbGVkIHRvIGluaXRpYWxpemUgYmVjYXVzZSBhbiB1bnN1cHBvcnRlZCBTRlArICIKKwkJCSAgIm1vZHVsZSB0eXBlIHdhcyBkZXRlY3RlZC5cbiIpOworCQllX2Rldl9lcnIoIlJlbG9hZCB0aGUgZHJpdmVyIGFmdGVyIGluc3RhbGxpbmcgYSBzdXBwb3J0ZWQgIgorCQkJICAibW9kdWxlLlxuIik7CiAJCWdvdG8gZXJyX3N3X2luaXQ7CiAJfSBlbHNlIGlmIChlcnIpIHsKLQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiSFcgSW5pdCBmYWlsZWQ6ICVkXG4iLCBlcnIpOworCQllX2Rldl9lcnIoIkhXIEluaXQgZmFpbGVkOiAlZFxuIiwgZXJyKTsKIAkJZ290byBlcnJfc3dfaW5pdDsKIAl9CiAKQEAgLTY2OTgsNiArNjc1MywxMSBAQAogCQkJCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0ZDT0VfQ0FQQUJMRTsKIAkJfQogCX0KKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZDT0VfQ0FQQUJMRSkgeworCQluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9GQ09FX0NSQzsKKwkJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfRlNPOworCQluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9GQ09FX01UVTsKKwl9CiAjZW5kaWYgLyogSVhHQkVfRkNPRSAqLwogCWlmIChwY2lfdXNpbmdfZGFjKQogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKQEAgLTY3MDcsNyArNjc2Nyw3IEBACiAKIAkvKiBtYWtlIHN1cmUgdGhlIEVFUFJPTSBpcyBnb29kICovCiAJaWYgKGh3LT5lZXByb20ub3BzLnZhbGlkYXRlX2NoZWNrc3VtKGh3LCBOVUxMKSA8IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiVGhlIEVFUFJPTSBDaGVja3N1bSBJcyBOb3QgVmFsaWRcbiIpOworCQllX2Rldl9lcnIoIlRoZSBFRVBST00gQ2hlY2tzdW0gSXMgTm90IFZhbGlkXG4iKTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBlcnJfZWVwcm9tOwogCX0KQEAgLTY3MTYsNyArNjc3Niw3IEBACiAJbWVtY3B5KG5ldGRldi0+cGVybV9hZGRyLCBody0+bWFjLnBlcm1fYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CiAKIAlpZiAoaXhnYmVfdmFsaWRhdGVfbWFjX2FkZHIobmV0ZGV2LT5wZXJtX2FkZHIpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgTUFDIGFkZHJlc3NcbiIpOworCQllX2Rldl9lcnIoImludmFsaWQgTUFDIGFkZHJlc3NcbiIpOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIGVycl9lZXByb207CiAJfQpAQCAtNjc1MSw3ICs2ODExLDcgQEAKIAlody0+bWFjLm9wcy5nZXRfYnVzX2luZm8oaHcpOwogCiAJLyogcHJpbnQgYnVzIHR5cGUvc3BlZWQvd2lkdGggaW5mbyAqLwotCWRldl9pbmZvKCZwZGV2LT5kZXYsICIoUENJIEV4cHJlc3M6JXM6JXMpICVwTVxuIiwKKwllX2Rldl9pbmZvKCIoUENJIEV4cHJlc3M6JXM6JXMpICVwTVxuIiwKIAkgICAgICAgICgoaHctPmJ1cy5zcGVlZCA9PSBpeGdiZV9idXNfc3BlZWRfNTAwMCkgPyAiNS4wR2IvcyI6CiAJICAgICAgICAgKGh3LT5idXMuc3BlZWQgPT0gaXhnYmVfYnVzX3NwZWVkXzI1MDApID8gIjIuNUdiL3MiOiJVbmtub3duIiksCiAJICAgICAgICAoKGh3LT5idXMud2lkdGggPT0gaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDgpID8gIldpZHRoIHg4IiA6CkBAIC02NzYxLDIwICs2ODIxLDIwIEBACiAJICAgICAgICBuZXRkZXYtPmRldl9hZGRyKTsKIAlpeGdiZV9yZWFkX3BiYV9udW1fZ2VuZXJpYyhodywgJnBhcnRfbnVtKTsKIAlpZiAoaXhnYmVfaXNfc2ZwKGh3KSAmJiBody0+cGh5LnNmcF90eXBlICE9IGl4Z2JlX3NmcF90eXBlX25vdF9wcmVzZW50KQotCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiTUFDOiAlZCwgUEhZOiAlZCwgU0ZQKzogJWQsIFBCQSBObzogJTA2eC0lMDN4XG4iLAotCQkgICAgICAgICBody0+bWFjLnR5cGUsIGh3LT5waHkudHlwZSwgaHctPnBoeS5zZnBfdHlwZSwKLQkJICAgICAgICAgKHBhcnRfbnVtID4+IDgpLCAocGFydF9udW0gJiAweGZmKSk7CisJCWVfZGV2X2luZm8oIk1BQzogJWQsIFBIWTogJWQsIFNGUCs6ICVkLCAiCisJCQkgICAiUEJBIE5vOiAlMDZ4LSUwM3hcbiIsCisJCQkgICBody0+bWFjLnR5cGUsIGh3LT5waHkudHlwZSwgaHctPnBoeS5zZnBfdHlwZSwKKwkJCSAgIChwYXJ0X251bSA+PiA4KSwgKHBhcnRfbnVtICYgMHhmZikpOwogCWVsc2UKLQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIk1BQzogJWQsIFBIWTogJWQsIFBCQSBObzogJTA2eC0lMDN4XG4iLAotCQkgICAgICAgICBody0+bWFjLnR5cGUsIGh3LT5waHkudHlwZSwKLQkJICAgICAgICAgKHBhcnRfbnVtID4+IDgpLCAocGFydF9udW0gJiAweGZmKSk7CisJCWVfZGV2X2luZm8oIk1BQzogJWQsIFBIWTogJWQsIFBCQSBObzogJTA2eC0lMDN4XG4iLAorCQkJICAgaHctPm1hYy50eXBlLCBody0+cGh5LnR5cGUsCisJCQkgICAocGFydF9udW0gPj4gOCksIChwYXJ0X251bSAmIDB4ZmYpKTsKIAogCWlmIChody0+YnVzLndpZHRoIDw9IGl4Z2JlX2J1c193aWR0aF9wY2llX3g0KSB7Ci0JCWRldl93YXJuKCZwZGV2LT5kZXYsICJQQ0ktRXhwcmVzcyBiYW5kd2lkdGggYXZhaWxhYmxlIGZvciAiCi0JCSAgICAgICAgICJ0aGlzIGNhcmQgaXMgbm90IHN1ZmZpY2llbnQgZm9yIG9wdGltYWwgIgotCQkgICAgICAgICAicGVyZm9ybWFuY2UuXG4iKTsKLQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIkZvciBvcHRpbWFsIHBlcmZvcm1hbmNlIGEgeDggIgotCQkgICAgICAgICAiUENJLUV4cHJlc3Mgc2xvdCBpcyByZXF1aXJlZC5cbiIpOworCQllX2Rldl93YXJuKCJQQ0ktRXhwcmVzcyBiYW5kd2lkdGggYXZhaWxhYmxlIGZvciB0aGlzIGNhcmQgaXMgIgorCQkJICAgIm5vdCBzdWZmaWNpZW50IGZvciBvcHRpbWFsIHBlcmZvcm1hbmNlLlxuIik7CisJCWVfZGV2X3dhcm4oIkZvciBvcHRpbWFsIHBlcmZvcm1hbmNlIGEgeDggUENJLUV4cHJlc3Mgc2xvdCAiCisJCQkgICAiaXMgcmVxdWlyZWQuXG4iKTsKIAl9CiAKIAkvKiBzYXZlIG9mZiBFRVBST00gdmVyc2lvbiBudW1iZXIgKi8KQEAgLTY3ODUsMTIgKzY4NDUsMTIgQEAKIAogCWlmIChlcnIgPT0gSVhHQkVfRVJSX0VFUFJPTV9WRVJTSU9OKSB7CiAJCS8qIFdlIGFyZSBydW5uaW5nIG9uIGEgcHJlLXByb2R1Y3Rpb24gZGV2aWNlLCBsb2cgYSB3YXJuaW5nICovCi0JCWRldl93YXJuKCZwZGV2LT5kZXYsICJUaGlzIGRldmljZSBpcyBhIHByZS1wcm9kdWN0aW9uICIKLQkJICAgICAgICAgImFkYXB0ZXIvTE9NLiAgUGxlYXNlIGJlIGF3YXJlIHRoZXJlIG1heSBiZSBpc3N1ZXMgIgotCQkgICAgICAgICAiYXNzb2NpYXRlZCB3aXRoIHlvdXIgaGFyZHdhcmUuICBJZiB5b3UgYXJlICIKLQkJICAgICAgICAgImV4cGVyaWVuY2luZyBwcm9ibGVtcyBwbGVhc2UgY29udGFjdCB5b3VyIEludGVsIG9yICIKLQkJICAgICAgICAgImhhcmR3YXJlIHJlcHJlc2VudGF0aXZlIHdobyBwcm92aWRlZCB5b3Ugd2l0aCB0aGlzICIKLQkJICAgICAgICAgImhhcmR3YXJlLlxuIik7CisJCWVfZGV2X3dhcm4oIlRoaXMgZGV2aWNlIGlzIGEgcHJlLXByb2R1Y3Rpb24gYWRhcHRlci9MT00uICIKKwkJCSAgICJQbGVhc2UgYmUgYXdhcmUgdGhlcmUgbWF5IGJlIGlzc3VlcyBhc3NvY2lhdGVkICIKKwkJCSAgICJ3aXRoIHlvdXIgaGFyZHdhcmUuICBJZiB5b3UgYXJlIGV4cGVyaWVuY2luZyAiCisJCQkgICAicHJvYmxlbXMgcGxlYXNlIGNvbnRhY3QgeW91ciBJbnRlbCBvciBoYXJkd2FyZSAiCisJCQkgICAicmVwcmVzZW50YXRpdmUgd2hvIHByb3ZpZGVkIHlvdSB3aXRoIHRoaXMgIgorCQkJICAgImhhcmR3YXJlLlxuIik7CiAJfQogCXN0cmNweShuZXRkZXYtPm5hbWUsICJldGglZCIpOwogCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwpAQCAtNjgxMyw4ICs2ODczLDcgQEAKIAl9CiAjZW5kaWYKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1NSSU9WX0VOQUJMRUQpIHsKLQkJRFBSSU5USyhQUk9CRSwgSU5GTywgIklPViBpcyBlbmFibGVkIHdpdGggJWQgVkZzXG4iLAotCQkJYWRhcHRlci0+bnVtX3Zmcyk7CisJCWVfaW5mbyhwcm9iZSwgIklPViBpcyBlbmFibGVkIHdpdGggJWQgVkZzXG4iLCBhZGFwdGVyLT5udW1fdmZzKTsKIAkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV92ZnM7IGkrKykKIAkJCWl4Z2JlX3ZmX2NvbmZpZ3VyYXRpb24ocGRldiwgKGkgfCAweDEwMDAwMDAwKSk7CiAJfQpAQCAtNjgyMiw3ICs2ODgxLDcgQEAKIAkvKiBhZGQgc2FuIG1hYyBhZGRyIHRvIG5ldGRldiAqLwogCWl4Z2JlX2FkZF9zYW5tYWNfbmV0ZGV2KG5ldGRldik7CiAKLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiSW50ZWwoUikgMTAgR2lnYWJpdCBOZXR3b3JrIENvbm5lY3Rpb25cbiIpOworCWVfZGV2X2luZm8oIkludGVsKFIpIDEwIEdpZ2FiaXQgTmV0d29yayBDb25uZWN0aW9uXG4iKTsKIAljYXJkc19mb3VuZCsrOwogCXJldHVybiAwOwogCkBAIC02OTEyLDcgKzY5NzEsNyBAQAogCXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMocGRldiwgcGNpX3NlbGVjdF9iYXJzKHBkZXYsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT1JFU09VUkNFX01FTSkpOwogCi0JRFBSSU5USyhQUk9CRSwgSU5GTywgImNvbXBsZXRlXG4iKTsKKwllX2Rldl9pbmZvKCJjb21wbGV0ZVxuIik7CiAKIAlmcmVlX25ldGRldihuZXRkZXYpOwogCkBAIC02OTYyLDggKzcwMjEsNyBAQAogCWludCBlcnI7CiAKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKSB7Ci0JCURQUklOVEsoUFJPQkUsIEVSUiwKLQkJICAgICAgICAiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuIik7CisJCWVfZXJyKHByb2JlLCAiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuIik7CiAJCXJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CiAJfSBlbHNlIHsKIAkJcGNpX3NldF9tYXN0ZXIocGRldik7CkBAIC02OTc5LDggKzcwMzcsOCBAQAogCiAJZXJyID0gcGNpX2NsZWFudXBfYWVyX3VuY29ycmVjdF9lcnJvcl9zdGF0dXMocGRldik7CiAJaWYgKGVycikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCSAgInBjaV9jbGVhbnVwX2Flcl91bmNvcnJlY3RfZXJyb3Jfc3RhdHVzIGZhaWxlZCAweCUweFxuIiwgZXJyKTsKKwkJZV9kZXZfZXJyKCJwY2lfY2xlYW51cF9hZXJfdW5jb3JyZWN0X2Vycm9yX3N0YXR1cyAiCisJCQkgICJmYWlsZWQgMHglMHhcbiIsIGVycik7CiAJCS8qIG5vbi1mYXRhbCwgY29udGludWUgKi8KIAl9CiAKQEAgLTcwMDEsNyArNzA1OSw3IEBACiAKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiAJCWlmIChpeGdiZV91cChhZGFwdGVyKSkgewotCQkJRFBSSU5USyhQUk9CRSwgSU5GTywgIml4Z2JlX3VwIGZhaWxlZCBhZnRlciByZXNldFxuIik7CisJCQllX2luZm8ocHJvYmUsICJpeGdiZV91cCBmYWlsZWQgYWZ0ZXIgcmVzZXRcbiIpOwogCQkJcmV0dXJuOwogCQl9CiAJfQpAQCAtNzAzNywxMCArNzA5NSw5IEBACiBzdGF0aWMgaW50IF9faW5pdCBpeGdiZV9pbml0X21vZHVsZSh2b2lkKQogewogCWludCByZXQ7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIC0gdmVyc2lvbiAlc1xuIiwgaXhnYmVfZHJpdmVyX25hbWUsCi0JICAgICAgIGl4Z2JlX2RyaXZlcl9zdHJpbmcsIGl4Z2JlX2RyaXZlcl92ZXJzaW9uKTsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiAlc1xuIiwgaXhnYmVfZHJpdmVyX25hbWUsIGl4Z2JlX2NvcHlyaWdodCk7CisJcHJfaW5mbygiJXMgLSB2ZXJzaW9uICVzXG4iLCBpeGdiZV9kcml2ZXJfc3RyaW5nLAorCQkgICBpeGdiZV9kcml2ZXJfdmVyc2lvbik7CisJcHJfaW5mbygiJXNcbiIsIGl4Z2JlX2NvcHlyaWdodCk7CiAKICNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiAJZGNhX3JlZ2lzdGVyX25vdGlmeSgmZGNhX25vdGlmaWVyKTsKQEAgLTcwNzksMTggKzcxMzYsMTcgQEAKIH0KIAogI2VuZGlmIC8qIENPTkZJR19JWEdCRV9EQ0EgKi8KLSNpZmRlZiBERUJVRworCiAvKioKLSAqIGl4Z2JlX2dldF9od19kZXZfbmFtZSAtIHJldHVybiBkZXZpY2UgbmFtZSBzdHJpbmcKKyAqIGl4Z2JlX2dldF9od19kZXYgcmV0dXJuIGRldmljZQogICogdXNlZCBieSBoYXJkd2FyZSBsYXllciB0byBwcmludCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24KICAqKi8KLWNoYXIgKml4Z2JlX2dldF9od19kZXZfbmFtZShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQorc3RydWN0IG5ldF9kZXZpY2UgKml4Z2JlX2dldF9od19kZXYoc3RydWN0IGl4Z2JlX2h3ICpodykKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGh3LT5iYWNrOwotCXJldHVybiBhZGFwdGVyLT5uZXRkZXYtPm5hbWU7CisJcmV0dXJuIGFkYXB0ZXItPm5ldGRldjsKIH0KIAotI2VuZGlmCiBtb2R1bGVfZXhpdChpeGdiZV9leGl0X21vZHVsZSk7CiAKIC8qIGl4Z2JlX21haW4uYyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfcGh5LmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuYwppbmRleCA0ODMyNWE1Li42YzBkNDJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuYwpAQCAtNTc3LDYgKzU3Nyw4IEBACiAJCSAqIDYgICAgU0ZQX1NSL0xSX0NPUkUxIC0gODI1OTktc3BlY2lmaWMKIAkJICogNyAgICBTRlBfYWN0X2xtdF9EQV9DT1JFMCAtIDgyNTk5LXNwZWNpZmljCiAJCSAqIDggICAgU0ZQX2FjdF9sbXRfREFfQ09SRTEgLSA4MjU5OS1zcGVjaWZpYworCQkgKiA5ICAgIFNGUF8xZ19jdV9DT1JFMCAtIDgyNTk5LXNwZWNpZmljCisJCSAqIDEwICAgU0ZQXzFnX2N1X0NPUkUxIC0gODI1OTktc3BlY2lmaWMKIAkJICovCiAJCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpIHsKIAkJCWlmIChjYWJsZV90ZWNoICYgSVhHQkVfU0ZGX0RBX1BBU1NJVkVfQ0FCTEUpCkBAIC02MjUsNiArNjI3LDEzIEBACiAJCQkJZWxzZQogCQkJCQlody0+cGh5LnNmcF90eXBlID0KIAkJCQkJICAgICAgICAgICAgICBpeGdiZV9zZnBfdHlwZV9zcmxyX2NvcmUxOworCQkJZWxzZSBpZiAoY29tcF9jb2Rlc18xZyAmIElYR0JFX1NGRl8xR0JBU0VUX0NBUEFCTEUpCisJCQkJaWYgKGh3LT5idXMubGFuX2lkID09IDApCisJCQkJCWh3LT5waHkuc2ZwX3R5cGUgPQorCQkJCQkJaXhnYmVfc2ZwX3R5cGVfMWdfY3VfY29yZTA7CisJCQkJZWxzZQorCQkJCQlody0+cGh5LnNmcF90eXBlID0KKwkJCQkJCWl4Z2JlX3NmcF90eXBlXzFnX2N1X2NvcmUxOwogCQkJZWxzZQogCQkJCWh3LT5waHkuc2ZwX3R5cGUgPSBpeGdiZV9zZnBfdHlwZV91bmtub3duOwogCQl9CkBAIC02OTYsOCArNzA1LDEwIEBACiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCS8qIDFHIFNGUCBtb2R1bGVzIGFyZSBub3Qgc3VwcG9ydGVkICovCi0JCWlmIChjb21wX2NvZGVzXzEwZyA9PSAwKSB7CisJCS8qIFZlcmlmeSBzdXBwb3J0ZWQgMUcgU0ZQIG1vZHVsZXMgKi8KKwkJaWYgKGNvbXBfY29kZXNfMTBnID09IDAgJiYKKwkJICAgICEoaHctPnBoeS5zZnBfdHlwZSA9PSBpeGdiZV9zZnBfdHlwZV8xZ19jdV9jb3JlMSB8fAorCQkgICAgICBody0+cGh5LnNmcF90eXBlID09IGl4Z2JlX3NmcF90eXBlXzFnX2N1X2NvcmUwKSkgewogCQkJaHctPnBoeS50eXBlID0gaXhnYmVfcGh5X3NmcF91bnN1cHBvcnRlZDsKIAkJCXN0YXR1cyA9IElYR0JFX0VSUl9TRlBfTk9UX1NVUFBPUlRFRDsKIAkJCWdvdG8gb3V0OwpAQCAtNzExLDcgKzcyMiw5IEBACiAKIAkJLyogVGhpcyBpcyBndWFyYW50ZWVkIHRvIGJlIDgyNTk5LCBubyBuZWVkIHRvIGNoZWNrIGZvciBOVUxMICovCiAJCWh3LT5tYWMub3BzLmdldF9kZXZpY2VfY2FwcyhodywgJmVuZm9yY2Vfc2ZwKTsKLQkJaWYgKCEoZW5mb3JjZV9zZnAgJiBJWEdCRV9ERVZJQ0VfQ0FQU19BTExPV19BTllfU0ZQKSkgeworCQlpZiAoIShlbmZvcmNlX3NmcCAmIElYR0JFX0RFVklDRV9DQVBTX0FMTE9XX0FOWV9TRlApICYmCisJCSAgICAhKChody0+cGh5LnNmcF90eXBlID09IGl4Z2JlX3NmcF90eXBlXzFnX2N1X2NvcmUwKSB8fAorCQkgICAgICAoaHctPnBoeS5zZnBfdHlwZSA9PSBpeGdiZV9zZnBfdHlwZV8xZ19jdV9jb3JlMSkpKSB7CiAJCQkvKiBNYWtlIHN1cmUgd2UncmUgYSBzdXBwb3J0ZWQgUEhZIHR5cGUgKi8KIAkJCWlmIChody0+cGh5LnR5cGUgPT0gaXhnYmVfcGh5X3NmcF9pbnRlbCkgewogCQkJCXN0YXR1cyA9IDA7CkBAIC03NDIsNiArNzU1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKmRhdGFfb2Zmc2V0KQogewogCXUxNiBzZnBfaWQ7CisJdTE2IHNmcF90eXBlID0gaHctPnBoeS5zZnBfdHlwZTsKIAogCWlmIChody0+cGh5LnNmcF90eXBlID09IGl4Z2JlX3NmcF90eXBlX3Vua25vd24pCiAJCXJldHVybiBJWEdCRV9FUlJfU0ZQX05PVF9TVVBQT1JURUQ7CkBAIC03NTMsNiArNzY3LDE3IEBACiAJICAgIChody0+cGh5LnNmcF90eXBlID09IGl4Z2JlX3NmcF90eXBlX2RhX2N1KSkKIAkJcmV0dXJuIElYR0JFX0VSUl9TRlBfTk9UX1NVUFBPUlRFRDsKIAorCS8qCisJICogTGltaXRpbmcgYWN0aXZlIGNhYmxlcyBhbmQgMUcgUGh5cyBtdXN0IGJlIGluaXRpYWxpemVkIGFzCisJICogU1IgbW9kdWxlcworCSAqLworCWlmIChzZnBfdHlwZSA9PSBpeGdiZV9zZnBfdHlwZV9kYV9hY3RfbG10X2NvcmUwIHx8CisJICAgIHNmcF90eXBlID09IGl4Z2JlX3NmcF90eXBlXzFnX2N1X2NvcmUwKQorCQlzZnBfdHlwZSA9IGl4Z2JlX3NmcF90eXBlX3NybHJfY29yZTA7CisJZWxzZSBpZiAoc2ZwX3R5cGUgPT0gaXhnYmVfc2ZwX3R5cGVfZGFfYWN0X2xtdF9jb3JlMSB8fAorCSAgICAgICAgIHNmcF90eXBlID09IGl4Z2JlX3NmcF90eXBlXzFnX2N1X2NvcmUxKQorCQlzZnBfdHlwZSA9IGl4Z2JlX3NmcF90eXBlX3NybHJfY29yZTE7CisKIAkvKiBSZWFkIG9mZnNldCB0byBQSFkgaW5pdCBjb250ZW50cyAqLwogCWh3LT5lZXByb20ub3BzLnJlYWQoaHcsIElYR0JFX1BIWV9JTklUX09GRlNFVF9OTCwgbGlzdF9vZmZzZXQpOwogCkBAIC03NjksNyArNzk0LDcgQEAKIAlody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCAqbGlzdF9vZmZzZXQsICZzZnBfaWQpOwogCiAJd2hpbGUgKHNmcF9pZCAhPSBJWEdCRV9QSFlfSU5JVF9FTkRfTkwpIHsKLQkJaWYgKHNmcF9pZCA9PSBody0+cGh5LnNmcF90eXBlKSB7CisJCWlmIChzZnBfaWQgPT0gc2ZwX3R5cGUpIHsKIAkJCSgqbGlzdF9vZmZzZXQpKys7CiAJCQlody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCAqbGlzdF9vZmZzZXQsIGRhdGFfb2Zmc2V0KTsKIAkJCWlmICgoISpkYXRhX29mZnNldCkgfHwgKCpkYXRhX29mZnNldCA9PSAweEZGRkYpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5oCmluZGV4IGVmNGJhODMuLmZiMzg5OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5oCkBAIC00OCw2ICs0OCw3IEBACiAjZGVmaW5lIElYR0JFX1NGRl9EQV9TUEVDX0FDVElWRV9MSU1JVElORyAgICAweDQKICNkZWZpbmUgSVhHQkVfU0ZGXzFHQkFTRVNYX0NBUEFCTEUgICAgICAgICAgIDB4MQogI2RlZmluZSBJWEdCRV9TRkZfMUdCQVNFTFhfQ0FQQUJMRSAgICAgICAgICAgMHgyCisjZGVmaW5lIElYR0JFX1NGRl8xR0JBU0VUX0NBUEFCTEUgICAgICAgICAgICAweDgKICNkZWZpbmUgSVhHQkVfU0ZGXzEwR0JBU0VTUl9DQVBBQkxFICAgICAgICAgIDB4MTAKICNkZWZpbmUgSVhHQkVfU0ZGXzEwR0JBU0VMUl9DQVBBQkxFICAgICAgICAgIDB4MjAKICNkZWZpbmUgSVhHQkVfSTJDX0VFUFJPTV9SRUFEX01BU0sgICAgICAgICAgIDB4MTAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9zcmlvdi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfc3Jpb3YuYwppbmRleCBmNmNlZTk0Li40OTY2MWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9zcmlvdi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3NyaW92LmMKQEAgLTI1LDcgKzI1LDYgQEAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTEzOCw2ICsxMzcsNyBAQAogaW5saW5lIHZvaWQgaXhnYmVfdmZfcmVzZXRfZXZlbnQoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB2ZikKIHsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCWludCByYXJfZW50cnkgPSBody0+bWFjLm51bV9yYXJfZW50cmllcyAtICh2ZiArIDEpOwogCiAJLyogcmVzZXQgb2ZmbG9hZHMgdG8gZGVmYXVsdHMgKi8KIAlpZiAoYWRhcHRlci0+dmZpbmZvW3ZmXS5wZl92bGFuKSB7CkBAIC0xNTksMjYgKzE1OSwxNyBAQAogCS8qIEZsdXNoIGFuZCByZXNldCB0aGUgbXRhIHdpdGggdGhlIG5ldyB2YWx1ZXMgKi8KIAlpeGdiZV9zZXRfcnhfbW9kZShhZGFwdGVyLT5uZXRkZXYpOwogCi0JaWYgKGFkYXB0ZXItPnZmaW5mb1t2Zl0ucmFyID4gMCkgewotCQlhZGFwdGVyLT5ody5tYWMub3BzLmNsZWFyX3JhcigmYWRhcHRlci0+aHcsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnZmaW5mb1t2Zl0ucmFyKTsKLQkJYWRhcHRlci0+dmZpbmZvW3ZmXS5yYXIgPSAtMTsKLQl9CisJaHctPm1hYy5vcHMuY2xlYXJfcmFyKGh3LCByYXJfZW50cnkpOwogfQogCiBpbnQgaXhnYmVfc2V0X3ZmX21hYyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZmLCB1bnNpZ25lZCBjaGFyICptYWNfYWRkcikKIHsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCi0JYWRhcHRlci0+dmZpbmZvW3ZmXS5yYXIgPSBody0+bWFjLm9wcy5zZXRfcmFyKGh3LCB2ZiArIDEsIG1hY19hZGRyLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZiwgSVhHQkVfUkFIX0FWKTsKLQlpZiAoYWRhcHRlci0+dmZpbmZvW3ZmXS5yYXIgPCAwKSB7Ci0JCURQUklOVEsoRFJWLCBFUlIsICJDb3VsZCBub3Qgc2V0IE1BQyBGaWx0ZXIgZm9yIFZGICVkXG4iLCB2Zik7Ci0JCXJldHVybiAtMTsKLQl9CisJaW50IHJhcl9lbnRyeSA9IGh3LT5tYWMubnVtX3Jhcl9lbnRyaWVzIC0gKHZmICsgMSk7CiAKIAltZW1jcHkoYWRhcHRlci0+dmZpbmZvW3ZmXS52Zl9tYWNfYWRkcmVzc2VzLCBtYWNfYWRkciwgNik7CisJaHctPm1hYy5vcHMuc2V0X3JhcihodywgcmFyX2VudHJ5LCBtYWNfYWRkciwgdmYsIElYR0JFX1JBSF9BVik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE5NCwxMSArMTg1LDggQEAKIAogCWlmIChlbmFibGUpIHsKIAkJcmFuZG9tX2V0aGVyX2FkZHIodmZfbWFjX2FkZHIpOwotCQlEUFJJTlRLKFBST0JFLCBJTkZPLCAiSU9WOiBWRiAlZCBpcyBlbmFibGVkICIKLQkJICAgICAgICJtYWMgJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlhcbiIsCi0JCSAgICAgICB2Zm4sCi0JCSAgICAgICB2Zl9tYWNfYWRkclswXSwgdmZfbWFjX2FkZHJbMV0sIHZmX21hY19hZGRyWzJdLAotCQkgICAgICAgdmZfbWFjX2FkZHJbM10sIHZmX21hY19hZGRyWzRdLCB2Zl9tYWNfYWRkcls1XSk7CisJCWVfaW5mbyhwcm9iZSwgIklPVjogVkYgJWQgaXMgZW5hYmxlZCBNQUMgJXBNXG4iLAorCQkgICAgICAgdmZuLCB2Zl9tYWNfYWRkcik7CiAJCS8qCiAJCSAqIFN0b3JlIGF3YXkgdGhlIFZGICJwZXJtYW5hbmV0IiBNQUMgYWRkcmVzcywgaXQgd2lsbCBhc2sKIAkJICogZm9yIGl0IGxhdGVyLgpAQCAtMjQzLDcgKzIzMSw3IEBACiAJcmV0dmFsID0gaXhnYmVfcmVhZF9tYngoaHcsIG1zZ2J1ZiwgbWJ4X3NpemUsIHZmKTsKIAogCWlmIChyZXR2YWwpCi0JCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgcmVjZWl2aW5nIG1lc3NhZ2UgZnJvbSBWRlxuIik7CisJCXByX2VycigiRXJyb3IgcmVjZWl2aW5nIG1lc3NhZ2UgZnJvbSBWRlxuIik7CiAKIAkvKiB0aGlzIGlzIGEgbWVzc2FnZSB3ZSBhbHJlYWR5IHByb2Nlc3NlZCwgZG8gbm90aGluZyAqLwogCWlmIChtc2didWZbMF0gJiAoSVhHQkVfVlRfTVNHVFlQRV9BQ0sgfCBJWEdCRV9WVF9NU0dUWVBFX05BQ0spKQpAQCAtMjU3LDcgKzI0NSw3IEBACiAJaWYgKG1zZ2J1ZlswXSA9PSBJWEdCRV9WRl9SRVNFVCkgewogCQl1bnNpZ25lZCBjaGFyICp2Zl9tYWMgPSBhZGFwdGVyLT52ZmluZm9bdmZdLnZmX21hY19hZGRyZXNzZXM7CiAJCXU4ICphZGRyID0gKHU4ICopKCZtc2didWZbMV0pOwotCQlEUFJJTlRLKFBST0JFLCBJTkZPLCAiVkYgUmVzZXQgbXNnIHJlY2VpdmVkIGZyb20gdmYgJWRcbiIsIHZmKTsKKwkJZV9pbmZvKHByb2JlLCAiVkYgUmVzZXQgbXNnIHJlY2VpdmVkIGZyb20gdmYgJWRcbiIsIHZmKTsKIAkJYWRhcHRlci0+dmZpbmZvW3ZmXS5jbGVhcl90b19zZW5kID0gZmFsc2U7CiAJCWl4Z2JlX3ZmX3Jlc2V0X21zZyhhZGFwdGVyLCB2Zik7CiAJCWFkYXB0ZXItPnZmaW5mb1t2Zl0uY2xlYXJfdG9fc2VuZCA9IHRydWU7CkBAIC0zMTAsNyArMjk4LDcgQEAKIAkJcmV0dmFsID0gaXhnYmVfc2V0X3ZmX3ZsYW4oYWRhcHRlciwgYWRkLCB2aWQsIHZmKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJRFBSSU5USyhEUlYsIEVSUiwgIlVuaGFuZGxlZCBNc2cgJTguOHhcbiIsIG1zZ2J1ZlswXSk7CisJCWVfZXJyKGRydiwgIlVuaGFuZGxlZCBNc2cgJTguOHhcbiIsIG1zZ2J1ZlswXSk7CiAJCXJldHZhbCA9IElYR0JFX0VSUl9NQlg7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaAppbmRleCBjZGQxOTk4Li45NTg3ZDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV90eXBlLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfdHlwZS5oCkBAIC0yMjE0LDYgKzIyMTQsOCBAQAogCWl4Z2JlX3NmcF90eXBlX3NybHJfY29yZTEgPSA2LAogCWl4Z2JlX3NmcF90eXBlX2RhX2FjdF9sbXRfY29yZTAgPSA3LAogCWl4Z2JlX3NmcF90eXBlX2RhX2FjdF9sbXRfY29yZTEgPSA4LAorCWl4Z2JlX3NmcF90eXBlXzFnX2N1X2NvcmUwID0gOSwKKwlpeGdiZV9zZnBfdHlwZV8xZ19jdV9jb3JlMSA9IDEwLAogCWl4Z2JlX3NmcF90eXBlX25vdF9wcmVzZW50ID0gMHhGRkZFLAogCWl4Z2JlX3NmcF90eXBlX3Vua25vd24gPSAweEZGRkYKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9peGdiZXZmX21haW4uYwppbmRleCBhMTZjZmY3Li4zZTI5MWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMKQEAgLTE0NjMsMTggKzE0NjMsMTAgQEAKIHsKIAlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCXN0cnVjdCBuZXRfZGV2aWNlICp2X25ldGRldjsKIAogCS8qIGFkZCBWSUQgdG8gZmlsdGVyIHRhYmxlICovCiAJaWYgKGh3LT5tYWMub3BzLnNldF92ZnRhKQogCQlody0+bWFjLm9wcy5zZXRfdmZ0YShodywgdmlkLCAwLCB0cnVlKTsKLQkvKgotCSAqIENvcHkgZmVhdHVyZSBmbGFncyBmcm9tIG5ldGRldiB0byB0aGUgdmxhbiBuZXRkZXYgZm9yIHRoaXMgdmlkLgotCSAqIFRoaXMgYWxsb3dzIHRoaW5ncyBsaWtlIFRTTyB0byBidWJibGUgZG93biB0byBvdXIgdmxhbiBkZXZpY2UuCi0JICovCi0Jdl9uZXRkZXYgPSB2bGFuX2dyb3VwX2dldF9kZXZpY2UoYWRhcHRlci0+dmxncnAsIHZpZCk7Ci0Jdl9uZXRkZXYtPmZlYXR1cmVzIHw9IGFkYXB0ZXItPm5ldGRldi0+ZmVhdHVyZXM7Ci0Jdmxhbl9ncm91cF9zZXRfZGV2aWNlKGFkYXB0ZXItPnZsZ3JwLCB2aWQsIHZfbmV0ZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgaXhnYmV2Zl92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiB2aWQpCkBAIC0yMjI5LDcgKzIyMjEsNyBAQAogCWlmIChlcnIpIHsKIAkJZGV2X2luZm8oJnBkZXYtPmRldiwKIAkJICAgICAgICAgIlBGIHN0aWxsIGluIHJlc2V0IHN0YXRlLCBhc3NpZ25pbmcgbmV3IGFkZHJlc3NcbiIpOwotCQlyYW5kb21fZXRoZXJfYWRkcihody0+bWFjLmFkZHIpOworCQlkZXZfaHdfYWRkcl9yYW5kb20oYWRhcHRlci0+bmV0ZGV2LCBody0+bWFjLmFkZHIpOwogCX0gZWxzZSB7CiAJCWVyciA9IGh3LT5tYWMub3BzLmluaXRfaHcoaHcpOwogCQlpZiAoZXJyKSB7CkBAIC0yOTM1LDcgKzI5MjcsOCBAQAogCXN0cnVjdCBpeGdiZXZmX3R4X2J1ZmZlciAqdHhfYnVmZmVyX2luZm87CiAJdW5zaWduZWQgaW50IGxlbjsKIAl1bnNpZ25lZCBpbnQgdG90YWwgPSBza2ItPmxlbjsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMCwgc2l6ZSwgY291bnQgPSAwOworCXVuc2lnbmVkIGludCBvZmZzZXQgPSAwLCBzaXplOworCWludCBjb3VudCA9IDA7CiAJdW5zaWduZWQgaW50IG5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKIAl1bnNpZ25lZCBpbnQgZjsKIAlpbnQgaTsKQEAgLTM0MDEsNyArMzM5NCw2IEBACiAJLyogc2V0dXAgdGhlIHByaXZhdGUgc3RydWN0dXJlICovCiAJZXJyID0gaXhnYmV2Zl9zd19pbml0KGFkYXB0ZXIpOwogCi0jaWZkZWYgTUFYX1NLQl9GUkFHUwogCW5ldGRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwKIAkJCSAgIE5FVElGX0ZfSVBfQ1NVTSB8CiAJCQkgICBORVRJRl9GX0hXX1ZMQU5fVFggfApAQCAtMzQxMSwxNiArMzQwMywxNiBAQAogCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUFY2X0NTVU07CiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKIAluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKKwluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPOwogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKIAluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU07CisJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfSVBWNl9DU1VNOwogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1NHOwogCiAJaWYgKHBjaV91c2luZ19kYWMpCiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCi0jZW5kaWYgLyogTUFYX1NLQl9GUkFHUyAqLwotCiAJLyogVGhlIEhXIE1BQyBhZGRyZXNzIHdhcyBzZXQgYW5kL29yIGRldGVybWluZWQgaW4gc3dfaW5pdCAqLwogCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBhZGFwdGVyLT5ody5tYWMuYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CiAJbWVtY3B5KG5ldGRldi0+cGVybV9hZGRyLCBhZGFwdGVyLT5ody5tYWMuYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9qYXp6c29uaWMuYyBiL2RyaXZlcnMvbmV0L2phenpzb25pYy5jCmluZGV4IDNlNmFhZjkuLjk0OWMxZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2phenpzb25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L2phenpzb25pYy5jCkBAIC04MiwxMSArODIsMjAgQEAKIAogc3RhdGljIGludCBqYXp6c29uaWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQogewotCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgc29uaWNfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCAic29uaWMiLCBkZXYpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBnZXQgSVJRICVkLlxuIiwgZGV2LT5uYW1lLCBkZXYtPmlycSk7Ci0JCXJldHVybiAtRUFHQUlOOworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgc29uaWNfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELAorCQkJCSJzb25pYyIsIGRldik7CisJaWYgKHJldHZhbCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gZ2V0IElSUSAlZC5cbiIsCisJCQkJZGV2LT5uYW1lLCBkZXYtPmlycSk7CisJCXJldHVybiByZXR2YWw7CiAJfQotCXJldHVybiBzb25pY19vcGVuKGRldik7CisKKwlyZXR2YWwgPSBzb25pY19vcGVuKGRldik7CisJaWYgKHJldHZhbCkKKwkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIGludCBqYXp6c29uaWNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2tzODg0Mi5jIGIvZHJpdmVycy9uZXQva3M4ODQyLmMKaW5kZXggZjg1MmFiMy4uOTI4YjJiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQva3M4ODQyLmMKKysrIGIvZHJpdmVycy9uZXQva3M4ODQyLmMKQEAgLTE4LDYgKzE4LDcgQEAKIAogLyogU3VwcG9ydHM6CiAgKiBUaGUgTWljcmVsIEtTODg0MiBiZWhpbmQgdGhlIHRpbWJlcmRhbGUgRlBHQQorICogVGhlIGdlbnVpbmUgTWljcmVsIEtTODg0MS80MiBkZXZpY2Ugd2l0aCBJU0EgMTYvMzJiaXQgYnVzIGludGVyZmFjZQogICovCiAKICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKQEAgLTI5LDExICszMCwxOSBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2tzODg0Mi5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KIAogI2RlZmluZSBEUlZfTkFNRSAia3M4ODQyIgogCiAvKiBUaW1iZXJkYWxlIHNwZWNpZmljIFJlZ2lzdGVycyAqLwotI2RlZmluZSBSRUdfVElNQl9SU1QJMHgxYworI2RlZmluZSBSRUdfVElNQl9SU1QJCTB4MWMKKyNkZWZpbmUgUkVHX1RJTUJfRklGTwkJMHgyMAorI2RlZmluZSBSRUdfVElNQl9JU1IJCTB4MjQKKyNkZWZpbmUgUkVHX1RJTUJfSUVSCQkweDI4CisjZGVmaW5lIFJFR19USU1CX0lBUgkJMHgyQworI2RlZmluZSBSRVFfVElNQl9ETUFfUkVTVU1FCTB4MzAKIAogLyogS1M4ODQyIHJlZ2lzdGVycyAqLwogCkBAIC03Niw2ICs4NSwxNSBAQAogI2RlZmluZSBJUlFfUlhfRVJST1IJMHgwMDgwCiAjZGVmaW5lIEVOQUJMRURfSVJRUwkoSVJRX0xJTktfQ0hBTkdFIHwgSVJRX1RYIHwgSVJRX1JYIHwgSVJRX1JYX1NUT1BQRUQgfCBcCiAJCUlSUV9UWF9TVE9QUEVEIHwgSVJRX1JYX09WRVJSVU4gfCBJUlFfUlhfRVJST1IpCisvKiBXaGVuIHJ1bm5pbmcgdmlhIHRpbWJlcmRhbGUgaW4gRE1BIG1vZGUsIHRoZSBSWCBpbnRlcnJ1cHQgc2hvdWxkIGJlCisgICBlbmFibGVkIGluIHRoZSBLUzg4NDIsIGJ1dCBub3QgaW4gdGhlIEZQR0EgSVAsIHNpbmNlIHRoZSBJUCBoYW5kbGVzCisgICBSWCBETUEgaW50ZXJuYWxseS4KKyAgIFRYIGludGVycnVwdHMgYXJlIG5vdCBuZWVkZWQgaXQgaXMgaGFuZGxlZCBieSB0aGUgRlBHQSB0aGUgZHJpdmVyIGlzCisgICBub3RpZmllZCB2aWEgRE1BIGNhbGxiYWNrcy4KKyovCisjZGVmaW5lIEVOQUJMRURfSVJRU19ETUFfSVAJKElSUV9MSU5LX0NIQU5HRSB8IElSUV9SWF9TVE9QUEVEIHwgXAorCUlSUV9UWF9TVE9QUEVEIHwgSVJRX1JYX09WRVJSVU4gfCBJUlFfUlhfRVJST1IpCisjZGVmaW5lIEVOQUJMRURfSVJRU19ETUEJKEVOQUJMRURfSVJRU19ETUFfSVAgfCBJUlFfUlgpCiAjZGVmaW5lIFJFR19JU1IJCTB4MDIKICNkZWZpbmUgUkVHX1JYU1IJMHgwNAogI2RlZmluZSBSWFNSX1ZBTElECTB4ODAwMApAQCAtMTE0LDE0ICsxMzIsNTMgQEAKICNkZWZpbmUgUkVHX1AxQ1I0CQkweDAyCiAjZGVmaW5lIFJFR19QMVNSCQkweDA0CiAKKy8qIGZsYWdzIHBhc3NlZCBieSBwbGF0Zm9ybV9kZXZpY2UgZm9yIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUJTUlDUkVMX0tTODg0WAkJMHgwMQkvKiAwPVRpbWViZXJkYWxlKEZQR0EpLCAxPU1pY3JlbCAqLworI2RlZmluZQlLUzg4NFhfMTZCSVQJCTB4MDIJLyogIDE9MTZiaXQsIDA9MzJiaXQgKi8KKworI2RlZmluZSBETUFfQlVGRkVSX1NJWkUJCTIwNDgKKworc3RydWN0IGtzODg0Ml90eF9kbWFfY3RsIHsKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICphZGVzYzsKKwl2b2lkICpidWY7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOworCWludCBjaGFubmVsOworfTsKKworc3RydWN0IGtzODg0Ml9yeF9kbWFfY3RsIHsKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICphZGVzYzsKKwlzdHJ1Y3Qgc2tfYnVmZiAgKnNrYjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHRhc2tsZXQ7CisJaW50IGNoYW5uZWw7Cit9OworCisjZGVmaW5lIEtTODg0Ml9VU0VfRE1BKGFkYXB0ZXIpICgoKGFkYXB0ZXIpLT5kbWFfdHguY2hhbm5lbCAhPSAtMSkgJiYgXAorCSAoKGFkYXB0ZXIpLT5kbWFfcnguY2hhbm5lbCAhPSAtMSkpCisKIHN0cnVjdCBrczg4NDJfYWRhcHRlciB7CiAJdm9pZCBfX2lvbWVtCSpod19hZGRyOwogCWludAkJaXJxOworCXVuc2lnbmVkIGxvbmcJY29uZl9mbGFnczsJLyogY29weSBvZiBwbGF0Zm9ybV9kZXZpY2UgY29uZmlnICovCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0CXRhc2tsZXQ7CiAJc3BpbmxvY2tfdAlsb2NrOyAvKiBzcGlubG9jayB0byBiZSBpbnRlcnJ1cHQgc2FmZSAqLwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHdvcmtfc3RydWN0IHRpbWVvdXRfd29yazsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3Qga3M4ODQyX3R4X2RtYV9jdGwJZG1hX3R4OworCXN0cnVjdCBrczg4NDJfcnhfZG1hX2N0bAlkbWFfcng7CiB9OwogCitzdGF0aWMgdm9pZCBrczg4NDJfZG1hX3J4X2NiKHZvaWQgKmRhdGEpOworc3RhdGljIHZvaWQga3M4ODQyX2RtYV90eF9jYih2b2lkICpkYXRhKTsKKworc3RhdGljIGlubGluZSB2b2lkIGtzODg0Ml9yZXN1bWVfZG1hKHN0cnVjdCBrczg4NDJfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpb3dyaXRlMzIoMSwgYWRhcHRlci0+aHdfYWRkciArIFJFUV9USU1CX0RNQV9SRVNVTUUpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQga3M4ODQyX3NlbGVjdF9iYW5rKHN0cnVjdCBrczg4NDJfYWRhcHRlciAqYWRhcHRlciwgdTE2IGJhbmspCiB7CiAJaW93cml0ZTE2KGJhbmssIGFkYXB0ZXItPmh3X2FkZHIgKyBSRUdfU0VMRUNUX0JBTkspOwpAQCAtMTkxLDE2ICsyNDgsMjEgQEAKIAogc3RhdGljIHZvaWQga3M4ODQyX3Jlc2V0KHN0cnVjdCBrczg4NDJfYWRhcHRlciAqYWRhcHRlcikKIHsKLQkvKiBUaGUgS1M4ODQyIGdvZXMgaGF5d2lyZSB3aGVuIGRvaW5nIHNvZnRhcmUgcmVzZXQKLQkgKiBhIHdvcmsgYXJvdW5kIGluIHRoZSB0aW1iZXJkYWxlIElQIGlzIGltcGxlbWVudGVkIHRvCi0JICogZG8gYSBoYXJkd2FyZSByZXNldCBpbnN0ZWFkCi0Ja3M4ODQyX3dyaXRlMTYoYWRhcHRlciwgMywgMSwgUkVHX0dSUik7Ci0JbXNsZWVwKDEwKTsKLQlpb3dyaXRlMTYoMCwgYWRhcHRlci0+aHdfYWRkciArIFJFR19HUlIpOwotCSovCi0JaW93cml0ZTE2KDMyLCBhZGFwdGVyLT5od19hZGRyICsgUkVHX1NFTEVDVF9CQU5LKTsKLQlpb3dyaXRlMzIoMHgxLCBhZGFwdGVyLT5od19hZGRyICsgUkVHX1RJTUJfUlNUKTsKLQltc2xlZXAoMjApOworCWlmIChhZGFwdGVyLT5jb25mX2ZsYWdzICYgTUlDUkVMX0tTODg0WCkgeworCQlrczg4NDJfd3JpdGUxNihhZGFwdGVyLCAzLCAxLCBSRUdfR1JSKTsKKwkJbXNsZWVwKDEwKTsKKwkJaW93cml0ZTE2KDAsIGFkYXB0ZXItPmh3X2FkZHIgKyBSRUdfR1JSKTsKKwl9IGVsc2UgeworCQkvKiBUaGUgS1M4ODQyIGdvZXMgaGF5d2lyZSB3aGVuIGRvaW5nIHNvZnRhcmUgcmVzZXQKKwkJKiBhIHdvcmsgYXJvdW5kIGluIHRoZSB0aW1iZXJkYWxlIElQIGlzIGltcGxlbWVudGVkIHRvCisJCSogZG8gYSBoYXJkd2FyZSByZXNldCBpbnN0ZWFkCisJCWtzODg0Ml93cml0ZTE2KGFkYXB0ZXIsIDMsIDEsIFJFR19HUlIpOworCQltc2xlZXAoMTApOworCQlpb3dyaXRlMTYoMCwgYWRhcHRlci0+aHdfYWRkciArIFJFR19HUlIpOworCQkqLworCQlpb3dyaXRlMzIoMHgxLCBhZGFwdGVyLT5od19hZGRyICsgUkVHX1RJTUJfUlNUKTsKKwkJbXNsZWVwKDIwKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGtzODg0Ml91cGRhdGVfbGlua19zdGF0dXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKQEAgLTI2OSw4ICszMzEsNiBAQAogCiAJLyogcmVzdGFydCBwb3J0IGF1dG8tbmVnb3RpYXRpb24gKi8KIAlrczg4NDJfZW5hYmxlX2JpdHMoYWRhcHRlciwgNDksIDEgPDwgMTMsIFJFR19QMUNSNCk7Ci0JLyogb25seSBhZHZlcnRpc2UgMTBNYnBzICovCi0Ja3M4ODQyX2NsZWFyX2JpdHMoYWRhcHRlciwgNDksIDMgPDwgMiwgUkVHX1AxQ1I0KTsKIAogCS8qIEVuYWJsZSB0aGUgdHJhbnNtaXR0ZXIgKi8KIAlrczg4NDJfZW5hYmxlX3R4KGFkYXB0ZXIpOwpAQCAtMjgyLDggKzM0MiwxOSBAQAogCWtzODg0Ml93cml0ZTE2KGFkYXB0ZXIsIDE4LCAweGZmZmYsIFJFR19JU1IpOwogCiAJLyogZW5hYmxlIGludGVycnVwdHMgKi8KLQlrczg4NDJfd3JpdGUxNihhZGFwdGVyLCAxOCwgRU5BQkxFRF9JUlFTLCBSRUdfSUVSKTsKLQorCWlmIChLUzg4NDJfVVNFX0RNQShhZGFwdGVyKSkgeworCQkvKiBXaGVuIHJ1bm5pbmcgaW4gRE1BIE1vZGUgdGhlIFJYIGludGVycnVwdCBpcyBub3QgZW5hYmxlZCBpbgorCQkgICB0aW1iZXJkYWxlIGJlY2F1c2UgUlggZGF0YSBpcyByZWNlaXZlZCBieSBETUEgY2FsbGJhY2tzCisJCSAgIGl0IG11c3Qgc3RpbGwgYmUgZW5hYmxlZCBpbiB0aGUgS1M4ODQyIGJlY2F1c2UgaXQgaW5kaWNhdGVzCisJCSAgIHRvIHRpbWJlcmRhbGUgd2hlbiB0aGVyZSBpcyBSWCBkYXRhIGZvciBpdCdzIERNQSBGSUZPcyAqLworCQlpb3dyaXRlMTYoRU5BQkxFRF9JUlFTX0RNQV9JUCwgYWRhcHRlci0+aHdfYWRkciArIFJFR19USU1CX0lFUik7CisJCWtzODg0Ml93cml0ZTE2KGFkYXB0ZXIsIDE4LCBFTkFCTEVEX0lSUVNfRE1BLCBSRUdfSUVSKTsKKwl9IGVsc2UgeworCQlpZiAoIShhZGFwdGVyLT5jb25mX2ZsYWdzICYgTUlDUkVMX0tTODg0WCkpCisJCQlpb3dyaXRlMTYoRU5BQkxFRF9JUlFTLAorCQkJCWFkYXB0ZXItPmh3X2FkZHIgKyBSRUdfVElNQl9JRVIpOworCQlrczg4NDJfd3JpdGUxNihhZGFwdGVyLCAxOCwgRU5BQkxFRF9JUlFTLCBSRUdfSUVSKTsKKwl9CiAJLyogZW5hYmxlIHRoZSBzd2l0Y2ggKi8KIAlrczg4NDJfd3JpdGUxNihhZGFwdGVyLCAzMiwgMHgxLCBSRUdfU1dfSURfQU5EX0VOQUJMRSk7CiB9CkBAIC0yOTYsMTMgKzM2NywyOCBAQAogCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQogCQlkZXN0W0VUSF9BTEVOIC0gaSAtIDFdID0ga3M4ODQyX3JlYWQ4KGFkYXB0ZXIsIDIsIFJFR19NQVJMICsgaSk7CiAKLQkvKiBtYWtlIHN1cmUgdGhlIHN3aXRjaCBwb3J0IHVzZXMgdGhlIHNhbWUgTUFDIGFzIHRoZSBRTVUgKi8KLQltYWMgPSBrczg4NDJfcmVhZDE2KGFkYXB0ZXIsIDIsIFJFR19NQVJMKTsKLQlrczg4NDJfd3JpdGUxNihhZGFwdGVyLCAzOSwgbWFjLCBSRUdfTUFDQVIxKTsKLQltYWMgPSBrczg4NDJfcmVhZDE2KGFkYXB0ZXIsIDIsIFJFR19NQVJNKTsKLQlrczg4NDJfd3JpdGUxNihhZGFwdGVyLCAzOSwgbWFjLCBSRUdfTUFDQVIyKTsKLQltYWMgPSBrczg4NDJfcmVhZDE2KGFkYXB0ZXIsIDIsIFJFR19NQVJIKTsKLQlrczg4NDJfd3JpdGUxNihhZGFwdGVyLCAzOSwgbWFjLCBSRUdfTUFDQVIzKTsKKwlpZiAoYWRhcHRlci0+Y29uZl9mbGFncyAmIE1JQ1JFTF9LUzg4NFgpIHsKKwkJLyoKKwkJdGhlIHNlcXVlbmNlIG9mIHNhdmluZyBtYWMgYWRkciBiZXR3ZWVuIE1BQyBhbmQgU3dpdGNoIGlzCisJCWRpZmZlcmVudC4KKwkJKi8KKworCQltYWMgPSBrczg4NDJfcmVhZDE2KGFkYXB0ZXIsIDIsIFJFR19NQVJMKTsKKwkJa3M4ODQyX3dyaXRlMTYoYWRhcHRlciwgMzksIG1hYywgUkVHX01BQ0FSMyk7CisJCW1hYyA9IGtzODg0Ml9yZWFkMTYoYWRhcHRlciwgMiwgUkVHX01BUk0pOworCQlrczg4NDJfd3JpdGUxNihhZGFwdGVyLCAzOSwgbWFjLCBSRUdfTUFDQVIyKTsKKwkJbWFjID0ga3M4ODQyX3JlYWQxNihhZGFwdGVyLCAyLCBSRUdfTUFSSCk7CisJCWtzODg0Ml93cml0ZTE2KGFkYXB0ZXIsIDM5LCBtYWMsIFJFR19NQUNBUjEpOworCX0gZWxzZSB7CisKKwkJLyogbWFrZSBzdXJlIHRoZSBzd2l0Y2ggcG9ydCB1c2VzIHRoZSBzYW1lIE1BQyBhcyB0aGUgUU1VICovCisJCW1hYyA9IGtzODg0Ml9yZWFkMTYoYWRhcHRlciwgMiwgUkVHX01BUkwpOworCQlrczg4NDJfd3JpdGUxNihhZGFwdGVyLCAzOSwgbWFjLCBSRUdfTUFDQVIxKTsKKwkJbWFjID0ga3M4ODQyX3JlYWQxNihhZGFwdGVyLCAyLCBSRUdfTUFSTSk7CisJCWtzODg0Ml93cml0ZTE2KGFkYXB0ZXIsIDM5LCBtYWMsIFJFR19NQUNBUjIpOworCQltYWMgPSBrczg4NDJfcmVhZDE2KGFkYXB0ZXIsIDIsIFJFR19NQVJIKTsKKwkJa3M4ODQyX3dyaXRlMTYoYWRhcHRlciwgMzksIG1hYywgUkVHX01BQ0FSMyk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBrczg4NDJfd3JpdGVfbWFjX2FkZHIoc3RydWN0IGtzODg0Ml9hZGFwdGVyICphZGFwdGVyLCB1OCAqbWFjKQpAQCAtMzEzLDggKzM5OSwyNSBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5sb2NrLCBmbGFncyk7CiAJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspIHsKIAkJa3M4ODQyX3dyaXRlOChhZGFwdGVyLCAyLCBtYWNbRVRIX0FMRU4gLSBpIC0gMV0sIFJFR19NQVJMICsgaSk7Ci0JCWtzODg0Ml93cml0ZTgoYWRhcHRlciwgMzksIG1hY1tFVEhfQUxFTiAtIGkgLSAxXSwKLQkJCVJFR19NQUNBUjEgKyBpKTsKKwkJaWYgKCEoYWRhcHRlci0+Y29uZl9mbGFncyAmIE1JQ1JFTF9LUzg4NFgpKQorCQkJa3M4ODQyX3dyaXRlOChhZGFwdGVyLCAzOSwgbWFjW0VUSF9BTEVOIC0gaSAtIDFdLAorCQkJCVJFR19NQUNBUjEgKyBpKTsKKwl9CisKKwlpZiAoYWRhcHRlci0+Y29uZl9mbGFncyAmIE1JQ1JFTF9LUzg4NFgpIHsKKwkJLyoKKwkJdGhlIHNlcXVlbmNlIG9mIHNhdmluZyBtYWMgYWRkciBiZXR3ZWVuIE1BQyBhbmQgU3dpdGNoIGlzCisJCWRpZmZlcmVudC4KKwkJKi8KKworCQl1MTYgbWFjOworCisJCW1hYyA9IGtzODg0Ml9yZWFkMTYoYWRhcHRlciwgMiwgUkVHX01BUkwpOworCQlrczg4NDJfd3JpdGUxNihhZGFwdGVyLCAzOSwgbWFjLCBSRUdfTUFDQVIzKTsKKwkJbWFjID0ga3M4ODQyX3JlYWQxNihhZGFwdGVyLCAyLCBSRUdfTUFSTSk7CisJCWtzODg0Ml93cml0ZTE2KGFkYXB0ZXIsIDM5LCBtYWMsIFJFR19NQUNBUjIpOworCQltYWMgPSBrczg4NDJfcmVhZDE2KGFkYXB0ZXIsIDIsIFJFR19NQVJIKTsKKwkJa3M4ODQyX3dyaXRlMTYoYWRhcHRlciwgMzksIG1hYywgUkVHX01BQ0FSMSk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmxvY2ssIGZsYWdzKTsKIH0KQEAgLTMyNCwxNSArNDI3LDU5IEBACiAJcmV0dXJuIGtzODg0Ml9yZWFkMTYoYWRhcHRlciwgMTYsIFJFR19UWE1JUikgJiAweDFmZmY7CiB9CiAKK3N0YXRpYyBpbnQga3M4ODQyX3R4X2ZyYW1lX2RtYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBrczg4NDJfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGtzODg0Ml90eF9kbWFfY3RsICpjdGwgPSAmYWRhcHRlci0+ZG1hX3R4OworCXU4ICpidWYgPSBjdGwtPmJ1ZjsKKworCWlmIChjdGwtPmFkZXNjKSB7CisJCW5ldGRldl9kYmcobmV0ZGV2LCAiJXM6IFRYIG9uZ29pbmdcbiIsIF9fZnVuY19fKTsKKwkJLyogdHJhbnNmZXIgb25nb2luZyAqLworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJfQorCisJc2dfZG1hX2xlbigmY3RsLT5zZykgPSBza2ItPmxlbiArIHNpemVvZih1MzIpOworCisJLyogY29weSBkYXRhIHRvIHRoZSBUWCBidWZmZXIgKi8KKwkvKiB0aGUgY29udHJvbCB3b3JkLCBlbmFibGUgSVJRLCBwb3J0IDEgYW5kIHRoZSBsZW5ndGggKi8KKwkqYnVmKysgPSAweDAwOworCSpidWYrKyA9IDB4MDE7IC8qIFBvcnQgMSAqLworCSpidWYrKyA9IHNrYi0+bGVuICYgMHhmZjsKKwkqYnVmKysgPSAoc2tiLT5sZW4gPj4gOCkgJiAweGZmOworCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBidWYsIHNrYi0+bGVuKTsKKworCWRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKGFkYXB0ZXItPmRldiwKKwkJc2dfZG1hX2FkZHJlc3MoJmN0bC0+c2cpLCAwLCBzZ19kbWFfbGVuKCZjdGwtPnNnKSwKKwkJRE1BX1RPX0RFVklDRSk7CisKKwkvKiBtYWtlIHN1cmUgdGhlIGxlbmd0aCBpcyBhIG11bHRpcGxlIG9mIDQgKi8KKwlpZiAoc2dfZG1hX2xlbigmY3RsLT5zZykgJSA0KQorCQlzZ19kbWFfbGVuKCZjdGwtPnNnKSArPSA0IC0gc2dfZG1hX2xlbigmY3RsLT5zZykgJSA0OworCisJY3RsLT5hZGVzYyA9IGN0bC0+Y2hhbi0+ZGV2aWNlLT5kZXZpY2VfcHJlcF9zbGF2ZV9zZyhjdGwtPmNoYW4sCisJCSZjdGwtPnNnLCAxLCBETUFfVE9fREVWSUNFLAorCQlETUFfUFJFUF9JTlRFUlJVUFQgfCBETUFfQ09NUExfU0tJUF9TUkNfVU5NQVApOworCWlmICghY3RsLT5hZGVzYykKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCisJY3RsLT5hZGVzYy0+Y2FsbGJhY2tfcGFyYW0gPSBuZXRkZXY7CisJY3RsLT5hZGVzYy0+Y2FsbGJhY2sgPSBrczg4NDJfZG1hX3R4X2NiOworCWN0bC0+YWRlc2MtPnR4X3N1Ym1pdChjdGwtPmFkZXNjKTsKKworCW5ldGRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCiBzdGF0aWMgaW50IGtzODg0Ml90eF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBrczg4NDJfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJaW50IGxlbiA9IHNrYi0+bGVuOwotCXUzMiAqcHRyID0gKHUzMiAqKXNrYi0+ZGF0YTsKLQl1MzIgY3RybDsKIAotCWRldl9kYmcoJmFkYXB0ZXItPnBkZXYtPmRldiwKLQkJIiVzOiBsZW4gJXUgaGVhZCAlcCBkYXRhICVwIHRhaWwgJXAgZW5kICVwXG4iLAorCW5ldGRldl9kYmcobmV0ZGV2LCAiJXM6IGxlbiAldSBoZWFkICVwIGRhdGEgJXAgdGFpbCAlcCBlbmQgJXBcbiIsCiAJCV9fZnVuY19fLCBza2ItPmxlbiwgc2tiLT5oZWFkLCBza2ItPmRhdGEsCiAJCXNrYl90YWlsX3BvaW50ZXIoc2tiKSwgc2tiX2VuZF9wb2ludGVyKHNrYikpOwogCkBAIC0zNDAsMTcgKzQ4NywzNCBAQAogCWlmIChrczg4NDJfdHhfZmlmb19zcGFjZShhZGFwdGVyKSA8IGxlbiArIDgpCiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAotCS8qIHRoZSBjb250cm9sIHdvcmQsIGVuYWJsZSBJUlEsIHBvcnQgMSBhbmQgdGhlIGxlbmd0aCAqLwotCWN0cmwgPSAweDgwMDAgfCAweDEwMCB8IChsZW4gPDwgMTYpOwotCWtzODg0Ml93cml0ZTMyKGFkYXB0ZXIsIDE3LCBjdHJsLCBSRUdfUU1VX0RBVEFfTE8pOworCWlmIChhZGFwdGVyLT5jb25mX2ZsYWdzICYgS1M4ODRYXzE2QklUKSB7CisJCXUxNiAqcHRyMTYgPSAodTE2ICopc2tiLT5kYXRhOworCQlrczg4NDJfd3JpdGUxNihhZGFwdGVyLCAxNywgMHg4MDAwIHwgMHgxMDAsIFJFR19RTVVfREFUQV9MTyk7CisJCWtzODg0Ml93cml0ZTE2KGFkYXB0ZXIsIDE3LCAodTE2KWxlbiwgUkVHX1FNVV9EQVRBX0hJKTsKKwkJbmV0ZGV2LT5zdGF0cy50eF9ieXRlcyArPSBsZW47CiAKLQluZXRkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGxlbjsKKwkJLyogY29weSBidWZmZXIgKi8KKwkJd2hpbGUgKGxlbiA+IDApIHsKKwkJCWlvd3JpdGUxNigqcHRyMTYrKywgYWRhcHRlci0+aHdfYWRkciArIFJFR19RTVVfREFUQV9MTyk7CisJCQlpb3dyaXRlMTYoKnB0cjE2KyssIGFkYXB0ZXItPmh3X2FkZHIgKyBSRUdfUU1VX0RBVEFfSEkpOworCQkJbGVuIC09IHNpemVvZih1MzIpOworCQl9CisJfSBlbHNlIHsKIAotCS8qIGNvcHkgYnVmZmVyICovCi0Jd2hpbGUgKGxlbiA+IDApIHsKLQkJaW93cml0ZTMyKCpwdHIsIGFkYXB0ZXItPmh3X2FkZHIgKyBSRUdfUU1VX0RBVEFfTE8pOwotCQlsZW4gLT0gc2l6ZW9mKHUzMik7Ci0JCXB0cisrOworCQl1MzIgKnB0ciA9ICh1MzIgKilza2ItPmRhdGE7CisJCXUzMiBjdHJsOworCQkvKiB0aGUgY29udHJvbCB3b3JkLCBlbmFibGUgSVJRLCBwb3J0IDEgYW5kIHRoZSBsZW5ndGggKi8KKwkJY3RybCA9IDB4ODAwMCB8IDB4MTAwIHwgKGxlbiA8PCAxNik7CisJCWtzODg0Ml93cml0ZTMyKGFkYXB0ZXIsIDE3LCBjdHJsLCBSRUdfUU1VX0RBVEFfTE8pOworCisJCW5ldGRldi0+c3RhdHMudHhfYnl0ZXMgKz0gbGVuOworCisJCS8qIGNvcHkgYnVmZmVyICovCisJCXdoaWxlIChsZW4gPiAwKSB7CisJCQlpb3dyaXRlMzIoKnB0ciwgYWRhcHRlci0+aHdfYWRkciArIFJFR19RTVVfREFUQV9MTyk7CisJCQlsZW4gLT0gc2l6ZW9mKHUzMik7CisJCQlwdHIrKzsKKwkJfQogCX0KIAogCS8qIGVucXVldWUgcGFja2V0ICovCkBAIC0zNjEsNTQgKzUyNSwxNzQgQEAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCitzdGF0aWMgdm9pZCBrczg4NDJfdXBkYXRlX3J4X2Vycl9jb3VudGVycyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgc3RhdHVzKQoreworCW5ldGRldl9kYmcobmV0ZGV2LCAiUlggZXJyb3IsIHN0YXR1czogJXhcbiIsIHN0YXR1cyk7CisKKwluZXRkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCWlmIChzdGF0dXMgJiBSWFNSX1RPT19MT05HKQorCQluZXRkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwlpZiAoc3RhdHVzICYgUlhTUl9DUkNfRVJST1IpCisJCW5ldGRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCWlmIChzdGF0dXMgJiBSWFNSX1JVTlQpCisJCW5ldGRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7Cit9CisKK3N0YXRpYyB2b2lkIGtzODg0Ml91cGRhdGVfcnhfY291bnRlcnMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIHN0YXR1cywKKwlpbnQgbGVuKQoreworCW5ldGRldl9kYmcobmV0ZGV2LCAiUlggcGFja2V0LCBsZW46ICVkXG4iLCBsZW4pOworCisJbmV0ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJbmV0ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBsZW47CisJaWYgKHN0YXR1cyAmIFJYU1JfTVVMVElDQVNUKQorCQluZXRkZXYtPnN0YXRzLm11bHRpY2FzdCsrOworfQorCitzdGF0aWMgaW50IF9fa3M4ODQyX3N0YXJ0X25ld19yeF9kbWEoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qga3M4ODQyX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBrczg4NDJfcnhfZG1hX2N0bCAqY3RsID0gJmFkYXB0ZXItPmRtYV9yeDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gJmN0bC0+c2c7CisJaW50IGVycjsKKworCWN0bC0+c2tiID0gbmV0ZGV2X2FsbG9jX3NrYihuZXRkZXYsIERNQV9CVUZGRVJfU0laRSk7CisJaWYgKGN0bC0+c2tiKSB7CisJCXNnX2luaXRfdGFibGUoc2csIDEpOworCQlzZ19kbWFfYWRkcmVzcyhzZykgPSBkbWFfbWFwX3NpbmdsZShhZGFwdGVyLT5kZXYsCisJCQljdGwtPnNrYi0+ZGF0YSwgRE1BX0JVRkZFUl9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOworCQllcnIgPSBkbWFfbWFwcGluZ19lcnJvcihhZGFwdGVyLT5kZXYsIHNnX2RtYV9hZGRyZXNzKHNnKSk7CisJCWlmICh1bmxpa2VseShlcnIpKSB7CisJCQlzZ19kbWFfYWRkcmVzcyhzZykgPSAwOworCQkJZ290byBvdXQ7CisJCX0KKworCQlzZ19kbWFfbGVuKHNnKSA9IERNQV9CVUZGRVJfU0laRTsKKworCQljdGwtPmFkZXNjID0gY3RsLT5jaGFuLT5kZXZpY2UtPmRldmljZV9wcmVwX3NsYXZlX3NnKGN0bC0+Y2hhbiwKKwkJCXNnLCAxLCBETUFfRlJPTV9ERVZJQ0UsCisJCQlETUFfUFJFUF9JTlRFUlJVUFQgfCBETUFfQ09NUExfU0tJUF9TUkNfVU5NQVApOworCisJCWlmICghY3RsLT5hZGVzYykKKwkJCWdvdG8gb3V0OworCisJCWN0bC0+YWRlc2MtPmNhbGxiYWNrX3BhcmFtID0gbmV0ZGV2OworCQljdGwtPmFkZXNjLT5jYWxsYmFjayA9IGtzODg0Ml9kbWFfcnhfY2I7CisJCWN0bC0+YWRlc2MtPnR4X3N1Ym1pdChjdGwtPmFkZXNjKTsKKwl9IGVsc2UgeworCQllcnIgPSAtRU5PTUVNOworCQlzZ19kbWFfYWRkcmVzcyhzZykgPSAwOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXR1cm4gZXJyOworb3V0OgorCWlmIChzZ19kbWFfYWRkcmVzcyhzZykpCisJCWRtYV91bm1hcF9zaW5nbGUoYWRhcHRlci0+ZGV2LCBzZ19kbWFfYWRkcmVzcyhzZyksCisJCQlETUFfQlVGRkVSX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CisJc2dfZG1hX2FkZHJlc3Moc2cpID0gMDsKKwlpZiAoY3RsLT5za2IpCisJCWRldl9rZnJlZV9za2IoY3RsLT5za2IpOworCisJY3RsLT5za2IgPSBOVUxMOworCisJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FIjogRmFpbGVkIHRvIHN0YXJ0IFJYIERNQTogJWRcbiIsIGVycik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQga3M4ODQyX3J4X2ZyYW1lX2RtYV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilhcmc7CisJc3RydWN0IGtzODg0Ml9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3Qga3M4ODQyX3J4X2RtYV9jdGwgKmN0bCA9ICZhZGFwdGVyLT5kbWFfcng7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGN0bC0+c2tiOworCWRtYV9hZGRyX3QgYWRkciA9IHNnX2RtYV9hZGRyZXNzKCZjdGwtPnNnKTsKKwl1MzIgc3RhdHVzOworCisJY3RsLT5hZGVzYyA9IE5VTEw7CisKKwkvKiBraWNrIG5leHQgdHJhbnNmZXIgZ29pbmcgKi8KKwlfX2tzODg0Ml9zdGFydF9uZXdfcnhfZG1hKG5ldGRldik7CisKKwkvKiBub3cgaGFuZGxlIHRoZSBkYXRhIHdlIGdvdCAqLworCWRtYV91bm1hcF9zaW5nbGUoYWRhcHRlci0+ZGV2LCBhZGRyLCBETUFfQlVGRkVSX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CisKKwlzdGF0dXMgPSAqKCh1MzIgKilza2ItPmRhdGEpOworCisJbmV0ZGV2X2RiZyhuZXRkZXYsICIlcyAtIHJ4X2RhdGE6IHN0YXR1czogJXhcbiIsCisJCV9fZnVuY19fLCBzdGF0dXMgJiAweGZmZmYpOworCisJLyogY2hlY2sgdGhlIHN0YXR1cyAqLworCWlmICgoc3RhdHVzICYgUlhTUl9WQUxJRCkgJiYgIShzdGF0dXMgJiBSWFNSX0VSUk9SKSkgeworCQlpbnQgbGVuID0gKHN0YXR1cyA+PiAxNikgJiAweDdmZjsKKworCQlrczg4NDJfdXBkYXRlX3J4X2NvdW50ZXJzKG5ldGRldiwgc3RhdHVzLCBsZW4pOworCisJCS8qIHJlc2VydmUgNCBieXRlcyB3aGljaCBpcyB0aGUgc3RhdHVzIHdvcmQgKi8KKwkJc2tiX3Jlc2VydmUoc2tiLCA0KTsKKwkJc2tiX3B1dChza2IsIGxlbik7CisKKwkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmV0ZGV2KTsKKwkJbmV0aWZfcngoc2tiKTsKKwl9IGVsc2UgeworCQlrczg4NDJfdXBkYXRlX3J4X2Vycl9jb3VudGVycyhuZXRkZXYsIHN0YXR1cyk7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIGtzODg0Ml9yeF9mcmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCXN0cnVjdCBrczg4NDJfYWRhcHRlciAqYWRhcHRlcikKIHsKLQl1MzIgc3RhdHVzID0ga3M4ODQyX3JlYWQzMihhZGFwdGVyLCAxNywgUkVHX1FNVV9EQVRBX0xPKTsKLQlpbnQgbGVuID0gKHN0YXR1cyA+PiAxNikgJiAweDdmZjsKKwl1MzIgc3RhdHVzOworCWludCBsZW47CiAKLQlzdGF0dXMgJj0gMHhmZmZmOwotCi0JZGV2X2RiZygmYWRhcHRlci0+cGRldi0+ZGV2LCAiJXMgLSByeF9kYXRhOiBzdGF0dXM6ICV4XG4iLAotCQlfX2Z1bmNfXywgc3RhdHVzKTsKKwlpZiAoYWRhcHRlci0+Y29uZl9mbGFncyAmIEtTODg0WF8xNkJJVCkgeworCQlzdGF0dXMgPSBrczg4NDJfcmVhZDE2KGFkYXB0ZXIsIDE3LCBSRUdfUU1VX0RBVEFfTE8pOworCQlsZW4gPSBrczg4NDJfcmVhZDE2KGFkYXB0ZXIsIDE3LCBSRUdfUU1VX0RBVEFfSEkpOworCQluZXRkZXZfZGJnKG5ldGRldiwgIiVzIC0gcnhfZGF0YTogc3RhdHVzOiAleFxuIiwKKwkJCSAgIF9fZnVuY19fLCBzdGF0dXMpOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IGtzODg0Ml9yZWFkMzIoYWRhcHRlciwgMTcsIFJFR19RTVVfREFUQV9MTyk7CisJCWxlbiA9IChzdGF0dXMgPj4gMTYpICYgMHg3ZmY7CisJCXN0YXR1cyAmPSAweGZmZmY7CisJCW5ldGRldl9kYmcobmV0ZGV2LCAiJXMgLSByeF9kYXRhOiBzdGF0dXM6ICV4XG4iLAorCQkJICAgX19mdW5jX18sIHN0YXR1cyk7CisJfQogCiAJLyogY2hlY2sgdGhlIHN0YXR1cyAqLwogCWlmICgoc3RhdHVzICYgUlhTUl9WQUxJRCkgJiYgIShzdGF0dXMgJiBSWFNSX0VSUk9SKSkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gbmV0ZGV2X2FsbG9jX3NrYl9pcF9hbGlnbihuZXRkZXYsIGxlbik7CiAKLQkJZGV2X2RiZygmYWRhcHRlci0+cGRldi0+ZGV2LCAiJXMsIGdvdCBwYWNrYWdlLCBsZW46ICVkXG4iLAotCQkJX19mdW5jX18sIGxlbik7CiAJCWlmIChza2IpIHsKLQkJCXUzMiAqZGF0YTsKIAotCQkJbmV0ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCQluZXRkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKLQkJCWlmIChzdGF0dXMgJiBSWFNSX01VTFRJQ0FTVCkKLQkJCQluZXRkZXYtPnN0YXRzLm11bHRpY2FzdCsrOworCQkJa3M4ODQyX3VwZGF0ZV9yeF9jb3VudGVycyhuZXRkZXYsIHN0YXR1cywgbGVuKTsKIAotCQkJZGF0YSA9ICh1MzIgKilza2JfcHV0KHNrYiwgbGVuKTsKKwkJCWlmIChhZGFwdGVyLT5jb25mX2ZsYWdzICYgS1M4ODRYXzE2QklUKSB7CisJCQkJdTE2ICpkYXRhMTYgPSAodTE2ICopc2tiX3B1dChza2IsIGxlbik7CisJCQkJa3M4ODQyX3NlbGVjdF9iYW5rKGFkYXB0ZXIsIDE3KTsKKwkJCQl3aGlsZSAobGVuID4gMCkgeworCQkJCQkqZGF0YTE2KysgPSBpb3JlYWQxNihhZGFwdGVyLT5od19hZGRyICsKKwkJCQkJCVJFR19RTVVfREFUQV9MTyk7CisJCQkJCSpkYXRhMTYrKyA9IGlvcmVhZDE2KGFkYXB0ZXItPmh3X2FkZHIgKworCQkJCQkJUkVHX1FNVV9EQVRBX0hJKTsKKwkJCQkJbGVuIC09IHNpemVvZih1MzIpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJdTMyICpkYXRhID0gKHUzMiAqKXNrYl9wdXQoc2tiLCBsZW4pOwogCi0JCQlrczg4NDJfc2VsZWN0X2JhbmsoYWRhcHRlciwgMTcpOwotCQkJd2hpbGUgKGxlbiA+IDApIHsKLQkJCQkqZGF0YSsrID0gaW9yZWFkMzIoYWRhcHRlci0+aHdfYWRkciArCi0JCQkJCVJFR19RTVVfREFUQV9MTyk7Ci0JCQkJbGVuIC09IHNpemVvZih1MzIpOworCQkJCWtzODg0Ml9zZWxlY3RfYmFuayhhZGFwdGVyLCAxNyk7CisJCQkJd2hpbGUgKGxlbiA+IDApIHsKKwkJCQkJKmRhdGErKyA9IGlvcmVhZDMyKGFkYXB0ZXItPmh3X2FkZHIgKworCQkJCQkJUkVHX1FNVV9EQVRBX0xPKTsKKwkJCQkJbGVuIC09IHNpemVvZih1MzIpOworCQkJCX0KIAkJCX0KLQogCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmV0ZGV2KTsKIAkJCW5ldGlmX3J4KHNrYik7CiAJCX0gZWxzZQogCQkJbmV0ZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7Ci0JfSBlbHNlIHsKLQkJZGV2X2RiZygmYWRhcHRlci0+cGRldi0+ZGV2LCAiUlggZXJyb3IsIHN0YXR1czogJXhcbiIsIHN0YXR1cyk7Ci0JCW5ldGRldi0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCWlmIChzdGF0dXMgJiBSWFNSX1RPT19MT05HKQotCQkJbmV0ZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JCWlmIChzdGF0dXMgJiBSWFNSX0NSQ19FUlJPUikKLQkJCW5ldGRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwotCQlpZiAoc3RhdHVzICYgUlhTUl9SVU5UKQotCQkJbmV0ZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKLQl9CisJfSBlbHNlCisJCWtzODg0Ml91cGRhdGVfcnhfZXJyX2NvdW50ZXJzKG5ldGRldiwgc3RhdHVzKTsKIAogCS8qIHNldCBoaWdoIHdhdGVybWFyayB0byAzSyAqLwogCWtzODg0Ml9jbGVhcl9iaXRzKGFkYXB0ZXIsIDAsIDEgPDwgMTIsIFJFR19RUkZDUik7CkBAIC00MjMsOCArNzA3LDcgQEAKIHZvaWQga3M4ODQyX2hhbmRsZV9yeChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qga3M4ODQyX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJdTE2IHJ4X2RhdGEgPSBrczg4NDJfcmVhZDE2KGFkYXB0ZXIsIDE2LCBSRUdfUlhNSVIpICYgMHgxZmZmOwotCWRldl9kYmcoJmFkYXB0ZXItPnBkZXYtPmRldiwgIiVzIEVudHJ5IC0gcnhfZGF0YTogJWRcbiIsCi0JCV9fZnVuY19fLCByeF9kYXRhKTsKKwluZXRkZXZfZGJnKG5ldGRldiwgIiVzIEVudHJ5IC0gcnhfZGF0YTogJWRcbiIsIF9fZnVuY19fLCByeF9kYXRhKTsKIAl3aGlsZSAocnhfZGF0YSkgewogCQlrczg4NDJfcnhfZnJhbWUobmV0ZGV2LCBhZGFwdGVyKTsKIAkJcnhfZGF0YSA9IGtzODg0Ml9yZWFkMTYoYWRhcHRlciwgMTYsIFJFR19SWE1JUikgJiAweDFmZmY7CkBAIC00MzQsNyArNzE3LDcgQEAKIHZvaWQga3M4ODQyX2hhbmRsZV90eChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qga3M4ODQyX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJdTE2IHNyID0ga3M4ODQyX3JlYWQxNihhZGFwdGVyLCAxNiwgUkVHX1RYU1IpOwotCWRldl9kYmcoJmFkYXB0ZXItPnBkZXYtPmRldiwgIiVzIC0gZW50cnksIHNyOiAleFxuIiwgX19mdW5jX18sIHNyKTsKKwluZXRkZXZfZGJnKG5ldGRldiwgIiVzIC0gZW50cnksIHNyOiAleFxuIiwgX19mdW5jX18sIHNyKTsKIAluZXRkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChuZXRkZXYpKQogCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CkBAIC00NDMsNyArNzI2LDcgQEAKIHZvaWQga3M4ODQyX2hhbmRsZV9yeF9vdmVycnVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJc3RydWN0IGtzODg0Ml9hZGFwdGVyICphZGFwdGVyKQogewotCWRldl9kYmcoJmFkYXB0ZXItPnBkZXYtPmRldiwgIiVzOiBlbnRyeVxuIiwgX19mdW5jX18pOworCW5ldGRldl9kYmcobmV0ZGV2LCAiJXM6IGVudHJ5XG4iLCBfX2Z1bmNfXyk7CiAJbmV0ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAluZXRkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CiB9CkBAIC00NjIsMjAgKzc0NSwzMiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmxvY2ssIGZsYWdzKTsKIAogCWlzciA9IGtzODg0Ml9yZWFkMTYoYWRhcHRlciwgMTgsIFJFR19JU1IpOwotCWRldl9kYmcoJmFkYXB0ZXItPnBkZXYtPmRldiwgIiVzIC0gSVNSOiAweCV4XG4iLCBfX2Z1bmNfXywgaXNyKTsKKwluZXRkZXZfZGJnKG5ldGRldiwgIiVzIC0gSVNSOiAweCV4XG4iLCBfX2Z1bmNfXywgaXNyKTsKKworCS8qIHdoZW4gcnVubmluZyBpbiBETUEgbW9kZSwgZG8gbm90IGFjayBSWCBpbnRlcnJ1cHRzLCBpdCBpcyBoYW5kbGVkCisJICAgaW50ZXJuYWxseSBieSB0aW1iZXJkYWxlLCBvdGhlcndpc2UgaXQncyBETUEgRklGTzpzIHdvdWxkIHN0b3AKKwkqLworCWlmIChLUzg4NDJfVVNFX0RNQShhZGFwdGVyKSkKKwkJaXNyICY9IH5JUlFfUlg7CiAKIAkvKiBBY2sgKi8KIAlrczg4NDJfd3JpdGUxNihhZGFwdGVyLCAxOCwgaXNyLCBSRUdfSVNSKTsKIAorCWlmICghKGFkYXB0ZXItPmNvbmZfZmxhZ3MgJiBNSUNSRUxfS1M4ODRYKSkKKwkJLyogQWNrIGluIHRoZSB0aW1iZXJkYWxlIElQIGFzIHdlbGwgKi8KKwkJaW93cml0ZTMyKDB4MSwgYWRhcHRlci0+aHdfYWRkciArIFJFR19USU1CX0lBUik7CisKIAlpZiAoIW5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKIAkJcmV0dXJuOwogCiAJaWYgKGlzciAmIElSUV9MSU5LX0NIQU5HRSkKIAkJa3M4ODQyX3VwZGF0ZV9saW5rX3N0YXR1cyhuZXRkZXYsIGFkYXB0ZXIpOwogCi0JaWYgKGlzciAmIChJUlFfUlggfCBJUlFfUlhfRVJST1IpKQorCS8qIHNob3VsZCBub3QgZ2V0IElSUV9SWCB3aGVuIHJ1bm5pbmcgRE1BIG1vZGUgKi8KKwlpZiAoaXNyICYgKElSUV9SWCB8IElSUV9SWF9FUlJPUikgJiYgIUtTODg0Ml9VU0VfRE1BKGFkYXB0ZXIpKQogCQlrczg4NDJfaGFuZGxlX3J4KG5ldGRldiwgYWRhcHRlcik7CiAKKwkvKiBzaG91bGQgb25seSBoYXBwZW4gd2hlbiBpbiBQSU8gbW9kZSAqLwogCWlmIChpc3IgJiBJUlFfVFgpCiAJCWtzODg0Ml9oYW5kbGVfdHgobmV0ZGV2LCBhZGFwdGVyKTsKIApAQCAtNDk0LDI0ICs3ODksMzggQEAKIAogCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzLCBwdXQgYmFjayB0aGUgYmFuayBzZWxlY3Rpb24gcmVnaXN0ZXIgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+bG9jaywgZmxhZ3MpOwotCWtzODg0Ml93cml0ZTE2KGFkYXB0ZXIsIDE4LCBFTkFCTEVEX0lSUVMsIFJFR19JRVIpOworCWlmIChLUzg4NDJfVVNFX0RNQShhZGFwdGVyKSkKKwkJa3M4ODQyX3dyaXRlMTYoYWRhcHRlciwgMTgsIEVOQUJMRURfSVJRU19ETUEsIFJFR19JRVIpOworCWVsc2UKKwkJa3M4ODQyX3dyaXRlMTYoYWRhcHRlciwgMTgsIEVOQUJMRURfSVJRUywgUkVHX0lFUik7CiAJaW93cml0ZTE2KGVudHJ5X2JhbmssIGFkYXB0ZXItPmh3X2FkZHIgKyBSRUdfU0VMRUNUX0JBTkspOworCisJLyogTWFrZSBzdXJlIHRpbWJlcmRhbGUgY29udGludWVzIERNQSBvcGVyYXRpb25zLCB0aGV5IGFyZSBzdG9wcGVkIHdoaWxlCisJICAgd2UgYXJlIGhhbmRsaW5nIHRoZSBrczg4NDIgYmVjYXVzZSB3ZSBtaWdodCBjaGFuZ2UgYmFuayAqLworCWlmIChLUzg4NDJfVVNFX0RNQShhZGFwdGVyKSkKKwkJa3M4ODQyX3Jlc3VtZV9kbWEoYWRhcHRlcik7CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBrczg4NDJfaXJxKGludCBpcnEsIHZvaWQgKmRldmlkKQogewotCXN0cnVjdCBrczg4NDJfYWRhcHRlciAqYWRhcHRlciA9IGRldmlkOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBkZXZpZDsKKwlzdHJ1Y3Qga3M4ODQyX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXUxNiBpc3I7CiAJdTE2IGVudHJ5X2JhbmsgPSBpb3JlYWQxNihhZGFwdGVyLT5od19hZGRyICsgUkVHX1NFTEVDVF9CQU5LKTsKIAlpcnFyZXR1cm5fdCByZXQgPSBJUlFfTk9ORTsKIAogCWlzciA9IGtzODg0Ml9yZWFkMTYoYWRhcHRlciwgMTgsIFJFR19JU1IpOwotCWRldl9kYmcoJmFkYXB0ZXItPnBkZXYtPmRldiwgIiVzIC0gSVNSOiAweCV4XG4iLCBfX2Z1bmNfXywgaXNyKTsKKwluZXRkZXZfZGJnKG5ldGRldiwgIiVzIC0gSVNSOiAweCV4XG4iLCBfX2Z1bmNfXywgaXNyKTsKIAogCWlmIChpc3IpIHsKLQkJLyogZGlzYWJsZSBJUlEgKi8KLQkJa3M4ODQyX3dyaXRlMTYoYWRhcHRlciwgMTgsIDB4MDAsIFJFR19JRVIpOworCQlpZiAoS1M4ODQyX1VTRV9ETUEoYWRhcHRlcikpCisJCQkvKiBkaXNhYmxlIGFsbCBidXQgUlggSVJRLCBzaW5jZSB0aGUgRlBHQSByZWxpZXMgb24gaXQqLworCQkJa3M4ODQyX3dyaXRlMTYoYWRhcHRlciwgMTgsIElSUV9SWCwgUkVHX0lFUik7CisJCWVsc2UKKwkJCS8qIGRpc2FibGUgSVJRICovCisJCQlrczg4NDJfd3JpdGUxNihhZGFwdGVyLCAxOCwgMHgwMCwgUkVHX0lFUik7CiAKIAkJLyogc2NoZWR1bGUgdGFza2xldCAqLwogCQl0YXNrbGV0X3NjaGVkdWxlKCZhZGFwdGVyLT50YXNrbGV0KTsKQEAgLTUyMSw5ICs4MzAsMTUxIEBACiAKIAlpb3dyaXRlMTYoZW50cnlfYmFuaywgYWRhcHRlci0+aHdfYWRkciArIFJFR19TRUxFQ1RfQkFOSyk7CiAKKwkvKiBBZnRlciBhbiBpbnRlcnJ1cHQsIHRlbGwgdGltYmVyZGFsZSB0byBjb250aW51ZSBETUEgb3BlcmF0aW9ucy4KKwkgICBETUEgaXMgZGlzYWJsZWQgd2hpbGUgd2UgYXJlIGhhbmRsaW5nIHRoZSBrczg4NDIgYmVjYXVzZSB3ZSBtaWdodAorCSAgIGNoYW5nZSBiYW5rICovCisJa3M4ODQyX3Jlc3VtZV9kbWEoYWRhcHRlcik7CisKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBrczg4NDJfZG1hX3J4X2NiKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG5ldF9kZXZpY2UJKm5ldGRldiA9IGRhdGE7CisJc3RydWN0IGtzODg0Ml9hZGFwdGVyCSphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCW5ldGRldl9kYmcobmV0ZGV2LCAiUlggRE1BIGZpbmlzaGVkXG4iKTsKKwkvKiBzY2hlZHVsZSB0YXNrbGV0ICovCisJaWYgKGFkYXB0ZXItPmRtYV9yeC5hZGVzYykKKwkJdGFza2xldF9zY2hlZHVsZSgmYWRhcHRlci0+ZG1hX3J4LnRhc2tsZXQpOworfQorCitzdGF0aWMgdm9pZCBrczg4NDJfZG1hX3R4X2NiKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG5ldF9kZXZpY2UJCSpuZXRkZXYgPSBkYXRhOworCXN0cnVjdCBrczg4NDJfYWRhcHRlcgkJKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBrczg4NDJfdHhfZG1hX2N0bAkqY3RsID0gJmFkYXB0ZXItPmRtYV90eDsKKworCW5ldGRldl9kYmcobmV0ZGV2LCAiVFggRE1BIGZpbmlzaGVkXG4iKTsKKworCWlmICghY3RsLT5hZGVzYykKKwkJcmV0dXJuOworCisJbmV0ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJY3RsLT5hZGVzYyA9IE5VTEw7CisKKwlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChuZXRkZXYpKQorCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7Cit9CisKK3N0YXRpYyB2b2lkIGtzODg0Ml9zdG9wX2RtYShzdHJ1Y3Qga3M4ODQyX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGtzODg0Ml90eF9kbWFfY3RsICp0eF9jdGwgPSAmYWRhcHRlci0+ZG1hX3R4OworCXN0cnVjdCBrczg4NDJfcnhfZG1hX2N0bCAqcnhfY3RsID0gJmFkYXB0ZXItPmRtYV9yeDsKKworCXR4X2N0bC0+YWRlc2MgPSBOVUxMOworCWlmICh0eF9jdGwtPmNoYW4pCisJCXR4X2N0bC0+Y2hhbi0+ZGV2aWNlLT5kZXZpY2VfY29udHJvbCh0eF9jdGwtPmNoYW4sCisJCQlETUFfVEVSTUlOQVRFX0FMTCwgMCk7CisKKwlyeF9jdGwtPmFkZXNjID0gTlVMTDsKKwlpZiAocnhfY3RsLT5jaGFuKQorCQlyeF9jdGwtPmNoYW4tPmRldmljZS0+ZGV2aWNlX2NvbnRyb2wocnhfY3RsLT5jaGFuLAorCQkJRE1BX1RFUk1JTkFURV9BTEwsIDApOworCisJaWYgKHNnX2RtYV9hZGRyZXNzKCZyeF9jdGwtPnNnKSkKKwkJZG1hX3VubWFwX3NpbmdsZShhZGFwdGVyLT5kZXYsIHNnX2RtYV9hZGRyZXNzKCZyeF9jdGwtPnNnKSwKKwkJCURNQV9CVUZGRVJfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwlzZ19kbWFfYWRkcmVzcygmcnhfY3RsLT5zZykgPSAwOworCisJZGV2X2tmcmVlX3NrYihyeF9jdGwtPnNrYik7CisJcnhfY3RsLT5za2IgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBrczg4NDJfZGVhbGxvY19kbWFfYnVmcyhzdHJ1Y3Qga3M4ODQyX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGtzODg0Ml90eF9kbWFfY3RsICp0eF9jdGwgPSAmYWRhcHRlci0+ZG1hX3R4OworCXN0cnVjdCBrczg4NDJfcnhfZG1hX2N0bCAqcnhfY3RsID0gJmFkYXB0ZXItPmRtYV9yeDsKKworCWtzODg0Ml9zdG9wX2RtYShhZGFwdGVyKTsKKworCWlmICh0eF9jdGwtPmNoYW4pCisJCWRtYV9yZWxlYXNlX2NoYW5uZWwodHhfY3RsLT5jaGFuKTsKKwl0eF9jdGwtPmNoYW4gPSBOVUxMOworCisJaWYgKHJ4X2N0bC0+Y2hhbikKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbChyeF9jdGwtPmNoYW4pOworCXJ4X2N0bC0+Y2hhbiA9IE5VTEw7CisKKwl0YXNrbGV0X2tpbGwoJnJ4X2N0bC0+dGFza2xldCk7CisKKwlpZiAoc2dfZG1hX2FkZHJlc3MoJnR4X2N0bC0+c2cpKQorCQlkbWFfdW5tYXBfc2luZ2xlKGFkYXB0ZXItPmRldiwgc2dfZG1hX2FkZHJlc3MoJnR4X2N0bC0+c2cpLAorCQkJRE1BX0JVRkZFUl9TSVpFLCBETUFfVE9fREVWSUNFKTsKKwlzZ19kbWFfYWRkcmVzcygmdHhfY3RsLT5zZykgPSAwOworCisJa2ZyZWUodHhfY3RsLT5idWYpOworCXR4X2N0bC0+YnVmID0gTlVMTDsKK30KKworc3RhdGljIGJvb2wga3M4ODQyX2RtYV9maWx0ZXJfZm4oc3RydWN0IGRtYV9jaGFuICpjaGFuLCB2b2lkICpmaWx0ZXJfcGFyYW0pCit7CisJcmV0dXJuIGNoYW4tPmNoYW5faWQgPT0gKGxvbmcpZmlsdGVyX3BhcmFtOworfQorCitzdGF0aWMgaW50IGtzODg0Ml9hbGxvY19kbWFfYnVmcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBrczg4NDJfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGtzODg0Ml90eF9kbWFfY3RsICp0eF9jdGwgPSAmYWRhcHRlci0+ZG1hX3R4OworCXN0cnVjdCBrczg4NDJfcnhfZG1hX2N0bCAqcnhfY3RsID0gJmFkYXB0ZXItPmRtYV9yeDsKKwlpbnQgZXJyOworCisJZG1hX2NhcF9tYXNrX3QgbWFzazsKKworCWRtYV9jYXBfemVybyhtYXNrKTsKKwlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOworCWRtYV9jYXBfc2V0KERNQV9QUklWQVRFLCBtYXNrKTsKKworCXNnX2luaXRfdGFibGUoJnR4X2N0bC0+c2csIDEpOworCisJdHhfY3RsLT5jaGFuID0gZG1hX3JlcXVlc3RfY2hhbm5lbChtYXNrLCBrczg4NDJfZG1hX2ZpbHRlcl9mbiwKKwkJCQkJICAgKHZvaWQgKikobG9uZyl0eF9jdGwtPmNoYW5uZWwpOworCWlmICghdHhfY3RsLT5jaGFuKSB7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyOworCX0KKworCS8qIGFsbG9jYXRlIERNQSBidWZmZXIgKi8KKwl0eF9jdGwtPmJ1ZiA9IGttYWxsb2MoRE1BX0JVRkZFUl9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXR4X2N0bC0+YnVmKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCXNnX2RtYV9hZGRyZXNzKCZ0eF9jdGwtPnNnKSA9IGRtYV9tYXBfc2luZ2xlKGFkYXB0ZXItPmRldiwKKwkJdHhfY3RsLT5idWYsIERNQV9CVUZGRVJfU0laRSwgRE1BX1RPX0RFVklDRSk7CisJZXJyID0gZG1hX21hcHBpbmdfZXJyb3IoYWRhcHRlci0+ZGV2LAorCQlzZ19kbWFfYWRkcmVzcygmdHhfY3RsLT5zZykpOworCWlmIChlcnIpIHsKKwkJc2dfZG1hX2FkZHJlc3MoJnR4X2N0bC0+c2cpID0gMDsKKwkJZ290byBlcnI7CisJfQorCisJcnhfY3RsLT5jaGFuID0gZG1hX3JlcXVlc3RfY2hhbm5lbChtYXNrLCBrczg4NDJfZG1hX2ZpbHRlcl9mbiwKKwkJCQkJICAgKHZvaWQgKikobG9uZylyeF9jdGwtPmNoYW5uZWwpOworCWlmICghcnhfY3RsLT5jaGFuKSB7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyOworCX0KKworCXRhc2tsZXRfaW5pdCgmcnhfY3RsLT50YXNrbGV0LCBrczg4NDJfcnhfZnJhbWVfZG1hX3Rhc2tsZXQsCisJCSh1bnNpZ25lZCBsb25nKW5ldGRldik7CisKKwlyZXR1cm4gMDsKK2VycjoKKwlrczg4NDJfZGVhbGxvY19kbWFfYnVmcyhhZGFwdGVyKTsKKwlyZXR1cm4gZXJyOworfQogCiAvKiBOZXRkZXZpY2Ugb3BlcmF0aW9ucyAqLwogCkBAIC01MzIsNyArOTgzLDI2IEBACiAJc3RydWN0IGtzODg0Ml9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlpbnQgZXJyOwogCi0JZGV2X2RiZygmYWRhcHRlci0+cGRldi0+ZGV2LCAiJXMgLSBlbnRyeVxuIiwgX19mdW5jX18pOworCW5ldGRldl9kYmcobmV0ZGV2LCAiJXMgLSBlbnRyeVxuIiwgX19mdW5jX18pOworCisJaWYgKEtTODg0Ml9VU0VfRE1BKGFkYXB0ZXIpKSB7CisJCWVyciA9IGtzODg0Ml9hbGxvY19kbWFfYnVmcyhuZXRkZXYpOworCisJCWlmICghZXJyKSB7CisJCQkvKiBzdGFydCBSWCBkbWEgKi8KKwkJCWVyciA9IF9fa3M4ODQyX3N0YXJ0X25ld19yeF9kbWEobmV0ZGV2KTsKKwkJCWlmIChlcnIpCisJCQkJa3M4ODQyX2RlYWxsb2NfZG1hX2J1ZnMoYWRhcHRlcik7CisJCX0KKworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCisJCQkJIjogRmFpbGVkIHRvIGluaXRpYXRlIERNQSwgcnVubmluZyBQSU9cbiIpOworCQkJa3M4ODQyX2RlYWxsb2NfZG1hX2J1ZnMoYWRhcHRlcik7CisJCQlhZGFwdGVyLT5kbWFfcnguY2hhbm5lbCA9IC0xOworCQkJYWRhcHRlci0+ZG1hX3R4LmNoYW5uZWwgPSAtMTsKKwkJfQorCX0KIAogCS8qIHJlc2V0IHRoZSBIVyAqLwogCWtzODg0Ml9yZXNldF9odyhhZGFwdGVyKTsKQEAgLTU0Miw3ICsxMDEyLDcgQEAKIAlrczg4NDJfdXBkYXRlX2xpbmtfc3RhdHVzKG5ldGRldiwgYWRhcHRlcik7CiAKIAllcnIgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5pcnEsIGtzODg0Ml9pcnEsIElSUUZfU0hBUkVELCBEUlZfTkFNRSwKLQkJYWRhcHRlcik7CisJCW5ldGRldik7CiAJaWYgKGVycikgewogCQlwcl9lcnIoIkZhaWxlZCB0byByZXF1ZXN0IElSUTogJWQ6ICVkXG4iLCBhZGFwdGVyLT5pcnEsIGVycik7CiAJCXJldHVybiBlcnI7CkBAIC01NTUsMTAgKzEwMjUsMTUgQEAKIHsKIAlzdHJ1Y3Qga3M4ODQyX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JZGV2X2RiZygmYWRhcHRlci0+cGRldi0+ZGV2LCAiJXMgLSBlbnRyeVxuIiwgX19mdW5jX18pOworCW5ldGRldl9kYmcobmV0ZGV2LCAiJXMgLSBlbnRyeVxuIiwgX19mdW5jX18pOworCisJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+dGltZW91dF93b3JrKTsKKworCWlmIChLUzg4NDJfVVNFX0RNQShhZGFwdGVyKSkKKwkJa3M4ODQyX2RlYWxsb2NfZG1hX2J1ZnMoYWRhcHRlcik7CiAKIAkvKiBmcmVlIHRoZSBpcnEgKi8KLQlmcmVlX2lycShhZGFwdGVyLT5pcnEsIGFkYXB0ZXIpOworCWZyZWVfaXJxKGFkYXB0ZXItPmlycSwgbmV0ZGV2KTsKIAogCS8qIGRpc2FibGUgdGhlIHN3aXRjaCAqLwogCWtzODg0Ml93cml0ZTE2KGFkYXB0ZXIsIDMyLCAweDAsIFJFR19TV19JRF9BTkRfRU5BQkxFKTsKQEAgLTU3Miw3ICsxMDQ3LDE4IEBACiAJaW50IHJldDsKIAlzdHJ1Y3Qga3M4ODQyX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JZGV2X2RiZygmYWRhcHRlci0+cGRldi0+ZGV2LCAiJXM6IGVudHJ5XG4iLCBfX2Z1bmNfXyk7CisJbmV0ZGV2X2RiZyhuZXRkZXYsICIlczogZW50cnlcbiIsIF9fZnVuY19fKTsKKworCWlmIChLUzg4NDJfVVNFX0RNQShhZGFwdGVyKSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlyZXQgPSBrczg4NDJfdHhfZnJhbWVfZG1hKHNrYiwgbmV0ZGV2KTsKKwkJLyogZm9yIG5vdyBvbmx5IGFsbG93IG9uZSB0cmFuc2ZlciBhdCB0aGUgdGltZSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+bG9jaywgZmxhZ3MpOworCQlpZiAoYWRhcHRlci0+ZG1hX3R4LmFkZXNjKQorCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiByZXQ7CisJfQogCiAJcmV0ID0ga3M4ODQyX3R4X2ZyYW1lKHNrYiwgbmV0ZGV2KTsKIApAQCAtNTg4LDcgKzEwNzQsNyBAQAogCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CiAJY2hhciAqbWFjID0gKHU4ICopYWRkci0+c2FfZGF0YTsKIAotCWRldl9kYmcoJmFkYXB0ZXItPnBkZXYtPmRldiwgIiVzOiBlbnRyeVxuIiwgX19mdW5jX18pOworCW5ldGRldl9kYmcobmV0ZGV2LCAiJXM6IGVudHJ5XG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKQEAgLTU5OSwxNyArMTA4NSwyNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBrczg4NDJfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIHZvaWQga3M4ODQyX3R4X3RpbWVvdXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGtzODg0Ml9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3Qga3M4ODQyX2FkYXB0ZXIgKmFkYXB0ZXIgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGtzODg0Ml9hZGFwdGVyLCB0aW1lb3V0X3dvcmspOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRldl9kYmcoJmFkYXB0ZXItPnBkZXYtPmRldiwgIiVzOiBlbnRyeVxuIiwgX19mdW5jX18pOworCW5ldGRldl9kYmcobmV0ZGV2LCAiJXM6IGVudHJ5XG4iLCBfX2Z1bmNfXyk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+bG9jaywgZmxhZ3MpOworCisJaWYgKEtTODg0Ml9VU0VfRE1BKGFkYXB0ZXIpKQorCQlrczg4NDJfc3RvcF9kbWEoYWRhcHRlcik7CisKIAkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KIAlrczg4NDJfd3JpdGUxNihhZGFwdGVyLCAxOCwgMCwgUkVHX0lFUik7CiAJa3M4ODQyX3dyaXRlMTYoYWRhcHRlciwgMTgsIDB4RkZGRiwgUkVHX0lTUik7CisKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5sb2NrLCBmbGFncyk7CiAKIAlrczg4NDJfcmVzZXRfaHcoYWRhcHRlcik7CkBAIC02MTcsNiArMTExMiwxOCBAQAogCWtzODg0Ml93cml0ZV9tYWNfYWRkcihhZGFwdGVyLCBuZXRkZXYtPmRldl9hZGRyKTsKIAogCWtzODg0Ml91cGRhdGVfbGlua19zdGF0dXMobmV0ZGV2LCBhZGFwdGVyKTsKKworCWlmIChLUzg4NDJfVVNFX0RNQShhZGFwdGVyKSkKKwkJX19rczg4NDJfc3RhcnRfbmV3X3J4X2RtYShuZXRkZXYpOworfQorCitzdGF0aWMgdm9pZCBrczg4NDJfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBrczg4NDJfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwluZXRkZXZfZGJnKG5ldGRldiwgIiVzOiBlbnRyeVxuIiwgX19mdW5jX18pOworCisJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+dGltZW91dF93b3JrKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBrczg4NDJfbmV0ZGV2X29wcyA9IHsKQEAgLTY1Myw3ICsxMTYwLDExIEBACiAJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmcGRldi0+ZGV2KTsKIAogCWFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWFkYXB0ZXItPm5ldGRldiA9IG5ldGRldjsKKwlJTklUX1dPUksoJmFkYXB0ZXItPnRpbWVvdXRfd29yaywga3M4ODQyX3R4X3RpbWVvdXRfd29yayk7CiAJYWRhcHRlci0+aHdfYWRkciA9IGlvcmVtYXAoaW9tZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKGlvbWVtKSk7CisJYWRhcHRlci0+Y29uZl9mbGFncyA9IGlvbWVtLT5mbGFnczsKKwogCWlmICghYWRhcHRlci0+aHdfYWRkcikKIAkJZ290byBlcnJfaW9yZW1hcDsKIApAQCAtNjYzLDcgKzExNzQsMTggQEAKIAkJZ290byBlcnJfZ2V0X2lycTsKIAl9CiAKLQlhZGFwdGVyLT5wZGV2ID0gcGRldjsKKwlhZGFwdGVyLT5kZXYgPSAocGRldi0+ZGV2LnBhcmVudCkgPyBwZGV2LT5kZXYucGFyZW50IDogJnBkZXYtPmRldjsKKworCS8qIERNQSBpcyBvbmx5IHN1cHBvcnRlZCB3aGVuIGFjY2Vzc2VkIHZpYSB0aW1iZXJkYWxlICovCisJaWYgKCEoYWRhcHRlci0+Y29uZl9mbGFncyAmIE1JQ1JFTF9LUzg4NFgpICYmIHBkYXRhICYmCisJCShwZGF0YS0+dHhfZG1hX2NoYW5uZWwgIT0gLTEpICYmCisJCShwZGF0YS0+cnhfZG1hX2NoYW5uZWwgIT0gLTEpKSB7CisJCWFkYXB0ZXItPmRtYV9yeC5jaGFubmVsID0gcGRhdGEtPnJ4X2RtYV9jaGFubmVsOworCQlhZGFwdGVyLT5kbWFfdHguY2hhbm5lbCA9IHBkYXRhLT50eF9kbWFfY2hhbm5lbDsKKwl9IGVsc2UgeworCQlhZGFwdGVyLT5kbWFfcnguY2hhbm5lbCA9IC0xOworCQlhZGFwdGVyLT5kbWFfdHguY2hhbm5lbCA9IC0xOworCX0KIAogCXRhc2tsZXRfaW5pdCgmYWRhcHRlci0+dGFza2xldCwga3M4ODQyX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKW5ldGRldik7CiAJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQva3N6ODg0eC5jIGIvZHJpdmVycy9uZXQva3N6ODg0eC5jCmluZGV4IDc4MDViYmYuLjM3NTA0YTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9rc3o4ODR4LmMKKysrIGIvZHJpdmVycy9uZXQva3N6ODg0eC5jCkBAIC0xNDU3LDcgKzE0NTcsNiBAQAogICogQGFkYXB0ZXI6CQlBZGFwdGVyIGRldmljZSBpbmZvcm1hdGlvbi4KICAqIEBwb3J0OgkJUG9ydCBpbmZvcm1hdGlvbi4KICAqIEBtb25pdG9yX3RpbWVfaW5mbzoJVGltZXIgdG8gbW9uaXRvciBwb3J0cy4KLSAqIEBzdGF0czoJCU5ldHdvcmsgc3RhdGlzdGljcy4KICAqIEBwcm9jX3NlbToJCVNlbWFwaG9yZSBmb3IgcHJvYyBhY2Nlc3NpbmcuCiAgKiBAaWQ6CQkJRGV2aWNlIElELgogICogQG1paV9pZjoJCU1JSSBpbnRlcmZhY2UgaW5mb3JtYXRpb24uCkBAIC0xNDcxLDcgKzE0NzAsNiBAQAogCXN0cnVjdCBkZXZfaW5mbyAqYWRhcHRlcjsKIAlzdHJ1Y3Qga3N6X3BvcnQgcG9ydDsKIAlzdHJ1Y3Qga3N6X3RpbWVyX2luZm8gbW9uaXRvcl90aW1lcl9pbmZvOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCiAJc3RydWN0IHNlbWFwaG9yZSBwcm9jX3NlbTsKIAlpbnQgaWQ7CkBAIC00NzUxLDggKzQ3NDksOCBAQAogCWh3X3NlbmRfcGt0KGh3KTsKIAogCS8qIFVwZGF0ZSB0cmFuc21pdCBzdGF0aXN0aWNzLiAqLwotCXByaXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQlwcml2LT5zdGF0cy50eF9ieXRlcyArPSBsZW47CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBsZW47CiB9CiAKIC8qKgpAQCAtNTAzMCw3ICs1MDI4LDcgQEAKIAkJLyogc2tiLT5kYXRhICE9IHNrYi0+aGVhZCAqLwogCQlza2IgPSBkZXZfYWxsb2Nfc2tiKHBhY2tldF9sZW4gKyAyKTsKIAkJaWYgKCFza2IpIHsKLQkJCXByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIApAQCAtNTA1MCw4ICs1MDQ4LDggQEAKIAkJY3N1bV92ZXJpZmllZChza2IpOwogCiAJLyogVXBkYXRlIHJlY2VpdmUgc3RhdGlzdGljcy4gKi8KLQlwcml2LT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JcHJpdi0+c3RhdHMucnhfYnl0ZXMgKz0gcGFja2V0X2xlbjsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBhY2tldF9sZW47CiAKIAkvKiBOb3RpZnkgdXBwZXIgbGF5ZXIgZm9yIHJlY2VpdmVkIHBhY2tldC4gKi8KIAlyeF9zdGF0dXMgPSBuZXRpZl9yeChza2IpOwpAQCAtNTI5MSw3ICs1Mjg5LDcgQEAKIAkJfQogCiAJCWlmICh1bmxpa2VseShpbnRfZW5hYmxlICYgS1M4ODRYX0lOVF9SWF9PVkVSUlVOKSkgewotCQkJcHJpdi0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKIAkJCWh3X3Jlc3VtZV9yeChodyk7CiAJCX0KIApAQCAtNTUyMiw3ICs1NTIwLDcgQEAKIAlwcml2LT5wcm9taXNjdW91cyA9IDA7CiAKIAkvKiBSZXNldCBkZXZpY2Ugc3RhdGlzdGljcy4gKi8KLQltZW1zZXQoJnByaXYtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpKTsKKwltZW1zZXQoJmRldi0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykpOwogCW1lbXNldCgodm9pZCAqKSBwb3J0LT5jb3VudGVyLCAwLAogCQkoc2l6ZW9mKHU2NCkgKiBPSURfQ09VTlRFUl9MQVNUKSk7CiAKQEAgLTU2MjIsNDIgKzU2MjAsNDIgQEAKIAlpbnQgaTsKIAlpbnQgcDsKIAotCXByaXYtPnN0YXRzLnJ4X2Vycm9ycyA9IHBvcnQtPmNvdW50ZXJbT0lEX0NPVU5URVJfUkNWX0VSUk9SXTsKLQlwcml2LT5zdGF0cy50eF9lcnJvcnMgPSBwb3J0LT5jb3VudGVyW09JRF9DT1VOVEVSX1hNSVRfRVJST1JdOworCWRldi0+c3RhdHMucnhfZXJyb3JzID0gcG9ydC0+Y291bnRlcltPSURfQ09VTlRFUl9SQ1ZfRVJST1JdOworCWRldi0+c3RhdHMudHhfZXJyb3JzID0gcG9ydC0+Y291bnRlcltPSURfQ09VTlRFUl9YTUlUX0VSUk9SXTsKIAogCS8qIFJlc2V0IHRvIHplcm8gdG8gYWRkIGNvdW50IGxhdGVyLiAqLwotCXByaXYtPnN0YXRzLm11bHRpY2FzdCA9IDA7Ci0JcHJpdi0+c3RhdHMuY29sbGlzaW9ucyA9IDA7Ci0JcHJpdi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyA9IDA7Ci0JcHJpdi0+c3RhdHMucnhfY3JjX2Vycm9ycyA9IDA7Ci0JcHJpdi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzID0gMDsKLQlwcml2LT5zdGF0cy50eF93aW5kb3dfZXJyb3JzID0gMDsKKwlkZXYtPnN0YXRzLm11bHRpY2FzdCA9IDA7CisJZGV2LT5zdGF0cy5jb2xsaXNpb25zID0gMDsKKwlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgPSAwOworCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycyA9IDA7CisJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgPSAwOworCWRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycyA9IDA7CiAKIAlmb3IgKGkgPSAwLCBwID0gcG9ydC0+Zmlyc3RfcG9ydDsgaSA8IHBvcnQtPm1pYl9wb3J0X2NudDsgaSsrLCBwKyspIHsKIAkJbWliID0gJmh3LT5wb3J0X21pYltwXTsKIAotCQlwcml2LT5zdGF0cy5tdWx0aWNhc3QgKz0gKHVuc2lnbmVkIGxvbmcpCisJCWRldi0+c3RhdHMubXVsdGljYXN0ICs9ICh1bnNpZ25lZCBsb25nKQogCQkJbWliLT5jb3VudGVyW01JQl9DT1VOVEVSX1JYX01VTFRJQ0FTVF07CiAKLQkJcHJpdi0+c3RhdHMuY29sbGlzaW9ucyArPSAodW5zaWduZWQgbG9uZykKKwkJZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9ICh1bnNpZ25lZCBsb25nKQogCQkJbWliLT5jb3VudGVyW01JQl9DT1VOVEVSX1RYX1RPVEFMX0NPTExJU0lPTl07CiAKLQkJcHJpdi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyArPSAodW5zaWduZWQgbG9uZykoCisJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyArPSAodW5zaWduZWQgbG9uZykoCiAJCQltaWItPmNvdW50ZXJbTUlCX0NPVU5URVJfUlhfVU5ERVJTSVpFXSArCiAJCQltaWItPmNvdW50ZXJbTUlCX0NPVU5URVJfUlhfRlJBR01FTlRdICsKIAkJCW1pYi0+Y291bnRlcltNSUJfQ09VTlRFUl9SWF9PVkVSU0laRV0gKwogCQkJbWliLT5jb3VudGVyW01JQl9DT1VOVEVSX1JYX0pBQkJFUl0pOwotCQlwcml2LT5zdGF0cy5yeF9jcmNfZXJyb3JzICs9ICh1bnNpZ25lZCBsb25nKQorCQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMgKz0gKHVuc2lnbmVkIGxvbmcpCiAJCQltaWItPmNvdW50ZXJbTUlCX0NPVU5URVJfUlhfQ1JDX0VSUl07Ci0JCXByaXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyArPSAodW5zaWduZWQgbG9uZykoCisJCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzICs9ICh1bnNpZ25lZCBsb25nKSgKIAkJCW1pYi0+Y291bnRlcltNSUJfQ09VTlRFUl9SWF9BTElHTk1FTlRfRVJSXSArCiAJCQltaWItPmNvdW50ZXJbTUlCX0NPVU5URVJfUlhfU1lNQk9MX0VSUl0pOwogCi0JCXByaXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMgKz0gKHVuc2lnbmVkIGxvbmcpCisJCWRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycyArPSAodW5zaWduZWQgbG9uZykKIAkJCW1pYi0+Y291bnRlcltNSUJfQ09VTlRFUl9UWF9MQVRFX0NPTExJU0lPTl07CiAJfQogCi0JcmV0dXJuICZwcml2LT5zdGF0czsKKwlyZXR1cm4gJmRldi0+c3RhdHM7CiB9CiAKIC8qKgpAQCAtNTcxOCw3ICs1NzE2LDcgQEAKIAkJICogZnJvbSB0aGUgYnJpZGdlLgogCQkgKi8KIAkJaWYgKChody0+ZmVhdHVyZXMgJiBTVFBfU1VQUE9SVCkgJiYgIXByb21pc2N1b3VzICYmCi0JCQkJZGV2LT5icl9wb3J0KSB7CisJCSAgICAoZGV2LT5wcml2X2ZsYWdzICYgSUZGX0JSSURHRV9QT1JUKSkgewogCQkJc3RydWN0IGtzel9zd2l0Y2ggKnN3ID0gaHctPmtzel9zd2l0Y2g7CiAJCQlpbnQgcG9ydCA9IHByaXYtPnBvcnQuZmlyc3RfcG9ydDsKIApAQCAtNjgxMiw3ICs2ODEwLDcgQEAKIHN0YXRpYyBpbnQgZmFzdF9hZ2luZzsKIAogLyoqCi0gKiBuZXRkZXZfaW5pdCAtIGluaXRhbGl6ZSBuZXR3b3JrIGRldmljZS4KKyAqIG5ldGRldl9pbml0IC0gaW5pdGlhbGl6ZSBuZXR3b3JrIGRldmljZS4KICAqIEBkZXY6CU5ldHdvcmsgZGV2aWNlLgogICoKICAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIG5ldHdvcmsgZGV2aWNlLgpAQCAtNjg5NiwxMyArNjg5NCwxMiBAQAogCWkgPSBqID0gbnVtID0gZ290X251bSA9IDA7CiAJd2hpbGUgKGogPCBNQUNfQUREUl9MRU4pIHsKIAkJaWYgKG1hY2FkZHJbaV0pIHsKKwkJCWludCBkaWdpdDsKKwogCQkJZ290X251bSA9IDE7Ci0JCQlpZiAoJzAnIDw9IG1hY2FkZHJbaV0gJiYgbWFjYWRkcltpXSA8PSAnOScpCi0JCQkJbnVtID0gbnVtICogMTYgKyBtYWNhZGRyW2ldIC0gJzAnOwotCQkJZWxzZSBpZiAoJ0EnIDw9IG1hY2FkZHJbaV0gJiYgbWFjYWRkcltpXSA8PSAnRicpCi0JCQkJbnVtID0gbnVtICogMTYgKyAxMCArIG1hY2FkZHJbaV0gLSAnQSc7Ci0JCQllbHNlIGlmICgnYScgPD0gbWFjYWRkcltpXSAmJiBtYWNhZGRyW2ldIDw9ICdmJykKLQkJCQludW0gPSBudW0gKiAxNiArIDEwICsgbWFjYWRkcltpXSAtICdhJzsKKwkJCWRpZ2l0ID0gaGV4X3RvX2JpbihtYWNhZGRyW2ldKTsKKwkJCWlmIChkaWdpdCA+PSAwKQorCQkJCW51bSA9IG51bSAqIDE2ICsgZGlnaXQ7CiAJCQllbHNlIGlmICgnOicgPT0gbWFjYWRkcltpXSkKIAkJCQlnb3RfbnVtID0gMjsKIAkJCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xhbmNlLmMgYi9kcml2ZXJzL25ldC9sYW5jZS5jCmluZGV4IDIxZjhhZGEuLmYwNjI5NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xhbmNlLmMKKysrIGIvZHJpdmVycy9uZXQvbGFuY2UuYwpAQCAtMjQ4LDcgKzI0OCw2IEBACiAJaW50IGN1cl9yeCwgY3VyX3R4OwkJCS8qIFRoZSBuZXh0IGZyZWUgcmluZyBlbnRyeSAqLwogCWludCBkaXJ0eV9yeCwgZGlydHlfdHg7CQkvKiBUaGUgcmluZyBlbnRyaWVzIHRvIGJlIGZyZWUoKWVkLiAqLwogCWludCBkbWE7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJdW5zaWduZWQgY2hhciBjaGlwX3ZlcnNpb247CS8qIFNlZSBsYW5jZV9jaGlwX3R5cGUuICovCiAJc3BpbmxvY2tfdCBkZXZsb2NrOwogfTsKQEAgLTkyNSw3ICs5MjQsNyBAQAogCXByaW50ayAoIiVzOiB0cmFuc21pdCB0aW1lZCBvdXQsIHN0YXR1cyAlNC40eCwgcmVzZXR0aW5nLlxuIiwKIAkJZGV2LT5uYW1lLCBpbncgKGlvYWRkciArIExBTkNFX0RBVEEpKTsKIAlvdXR3ICgweDAwMDQsIGlvYWRkciArIExBTkNFX0RBVEEpOwotCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogI2lmbmRlZiBmaW5hbF92ZXJzaW9uCiAJaWYgKGxhbmNlX2RlYnVnID4gMykgewogCQlpbnQgaTsKQEAgLTk4OSw3ICs5ODgsNyBAQAogCiAJbHAtPnR4X3JpbmdbZW50cnldLm1pc2MgPSAweDAwMDA7CiAKLQlscC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAogCS8qIElmIGFueSBwYXJ0IG9mIHRoaXMgYnVmZmVyIGlzID4xNk0gd2UgbXVzdCBjb3B5IGl0IHRvIGEgbG93LW1lbW9yeQogCSAgIGJ1ZmZlci4gKi8KQEAgLTEwNjIsMTMgKzEwNjEsMTYgQEAKIAkJCQlpZiAoc3RhdHVzICYgMHg0MDAwMDAwMCkgewogCQkJCQkvKiBUaGVyZSB3YXMgYW4gbWFqb3IgZXJyb3IsIGxvZyBpdC4gKi8KIAkJCQkJaW50IGVycl9zdGF0dXMgPSBscC0+dHhfcmluZ1tlbnRyeV0ubWlzYzsKLQkJCQkJbHAtPnN0YXRzLnR4X2Vycm9ycysrOwotCQkJCQlpZiAoZXJyX3N0YXR1cyAmIDB4MDQwMCkgbHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7Ci0JCQkJCWlmIChlcnJfc3RhdHVzICYgMHgwODAwKSBscC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKLQkJCQkJaWYgKGVycl9zdGF0dXMgJiAweDEwMDApIGxwLT5zdGF0cy50eF93aW5kb3dfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCQkJCWlmIChlcnJfc3RhdHVzICYgMHgwNDAwKQorCQkJCQkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQkJCQlpZiAoZXJyX3N0YXR1cyAmIDB4MDgwMCkKKwkJCQkJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJCQkJaWYgKGVycl9zdGF0dXMgJiAweDEwMDApCisJCQkJCQlkZXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKIAkJCQkJaWYgKGVycl9zdGF0dXMgJiAweDQwMDApIHsKIAkJCQkJCS8qIEFja2shICBPbiBGSUZPIGVycm9ycyB0aGUgVHggdW5pdCBpcyB0dXJuZWQgb2ZmISAqLwotCQkJCQkJbHAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisJCQkJCQlkZXYtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CiAJCQkJCQkvKiBSZW1vdmUgdGhpcyB2ZXJib3NpdHkgbGF0ZXIhICovCiAJCQkJCQlwcmludGsoIiVzOiBUeCBGSUZPIGVycm9yISBTdGF0dXMgJTQuNHguXG4iLAogCQkJCQkJCSAgIGRldi0+bmFtZSwgY3NyMCk7CkBAIC0xMDc3LDggKzEwNzksOCBAQAogCQkJCQl9CiAJCQkJfSBlbHNlIHsKIAkJCQkJaWYgKHN0YXR1cyAmIDB4MTgwMDAwMDApCi0JCQkJCQlscC0+c3RhdHMuY29sbGlzaW9ucysrOwotCQkJCQlscC0+c3RhdHMudHhfcGFja2V0cysrOworCQkJCQkJZGV2LT5zdGF0cy5jb2xsaXNpb25zKys7CisJCQkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJCX0KIAogCQkJCS8qIFdlIG11c3QgZnJlZSB0aGUgb3JpZ2luYWwgc2tiIGlmIGl0J3Mgbm90IGEgZGF0YS1vbmx5IGNvcHkKQEAgLTExMDgsOCArMTExMCwxMCBAQAogCQl9CiAKIAkJLyogTG9nIG1pc2MgZXJyb3JzLiAqLwotCQlpZiAoY3NyMCAmIDB4NDAwMCkgbHAtPnN0YXRzLnR4X2Vycm9ycysrOyAvKiBUeCBiYWJibGUuICovCi0JCWlmIChjc3IwICYgMHgxMDAwKSBscC0+c3RhdHMucnhfZXJyb3JzKys7IC8qIE1pc3NlZCBhIFJ4IGZyYW1lLiAqLworCQlpZiAoY3NyMCAmIDB4NDAwMCkKKwkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7IC8qIFR4IGJhYmJsZS4gKi8KKwkJaWYgKGNzcjAgJiAweDEwMDApCisJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOyAvKiBNaXNzZWQgYSBSeCBmcmFtZS4gKi8KIAkJaWYgKGNzcjAgJiAweDA4MDApIHsKIAkJCXByaW50aygiJXM6IEJ1cyBtYXN0ZXIgYXJiaXRyYXRpb24gZmFpbHVyZSwgc3RhdHVzICU0LjR4LlxuIiwKIAkJCQkgICBkZXYtPm5hbWUsIGNzcjApOwpAQCAtMTE1NSwxMSArMTE1OSwxNSBAQAogCQkJICAgYnVmZmVycyBpdCdzIHBvc3NpYmxlIGZvciBhIGphYmJlciBwYWNrZXQgdG8gdXNlIHR3bwogCQkJICAgYnVmZmVycywgd2l0aCBvbmx5IHRoZSBsYXN0IGNvcnJlY3RseSBub3RpbmcgdGhlIGVycm9yLiAqLwogCQkJaWYgKHN0YXR1cyAmIDB4MDEpCS8qIE9ubHkgY291bnQgYSBnZW5lcmFsIGVycm9yIGF0IHRoZSAqLwotCQkJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsgLyogZW5kIG9mIGEgcGFja2V0LiovCi0JCQlpZiAoc3RhdHVzICYgMHgyMCkgbHAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwotCQkJaWYgKHN0YXR1cyAmIDB4MTApIGxwLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwotCQkJaWYgKHN0YXR1cyAmIDB4MDgpIGxwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7Ci0JCQlpZiAoc3RhdHVzICYgMHgwNCkgbHAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsgLyogZW5kIG9mIGEgcGFja2V0LiovCisJCQlpZiAoc3RhdHVzICYgMHgyMCkKKwkJCQlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCQkJaWYgKHN0YXR1cyAmIDB4MTApCisJCQkJZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCQkJaWYgKHN0YXR1cyAmIDB4MDgpCisJCQkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCQlpZiAoc3RhdHVzICYgMHgwNCkKKwkJCQlkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CiAJCQlscC0+cnhfcmluZ1tlbnRyeV0uYmFzZSAmPSAweDAzZmZmZmZmOwogCQl9CiAJCWVsc2UKQEAgLTExNzEsNyArMTE3OSw3IEBACiAJCQlpZihwa3RfbGVuPDYwKQogCQkJewogCQkJCXByaW50aygiJXM6IFJ1bnQgcGFja2V0IVxuIixkZXYtPm5hbWUpOwotCQkJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJfQogCQkJZWxzZQogCQkJewpAQCAtMTE4NSw3ICsxMTkzLDcgQEAKIAogCQkJCQlpZiAoaSA+IFJYX1JJTkdfU0laRSAtMikKIAkJCQkJewotCQkJCQkJbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCQkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkJCQkJbHAtPnJ4X3JpbmdbZW50cnldLmJhc2UgfD0gMHg4MDAwMDAwMDsKIAkJCQkJCWxwLT5jdXJfcngrKzsKIAkJCQkJfQpAQCAtMTE5OCw4ICsxMjA2LDggQEAKIAkJCQkJcGt0X2xlbik7CiAJCQkJc2tiLT5wcm90b2NvbD1ldGhfdHlwZV90cmFucyhza2IsZGV2KTsKIAkJCQluZXRpZl9yeChza2IpOwotCQkJCWxwLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCQkJbHAtPnN0YXRzLnJ4X2J5dGVzKz1wa3RfbGVuOworCQkJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQkJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKIAkJCX0KIAkJfQogCQkvKiBUaGUgZG9jcyBzYXkgdGhhdCB0aGUgYnVmZmVyIGxlbmd0aCBpc24ndCB0b3VjaGVkLCBidXQgQW5kcmV3IEJveWQKQEAgLTEyMjUsNyArMTIzMyw3IEBACiAKIAlpZiAoY2hpcF90YWJsZVtscC0+Y2hpcF92ZXJzaW9uXS5mbGFncyAmIExBTkNFX0hBU19NSVNTRURfRlJBTUUpIHsKIAkJb3V0dygxMTIsIGlvYWRkcitMQU5DRV9BRERSKTsKLQkJbHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPSBpbncoaW9hZGRyK0xBTkNFX0RBVEEpOworCQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPSBpbncoaW9hZGRyK0xBTkNFX0RBVEEpOwogCX0KIAlvdXR3KDAsIGlvYWRkcitMQU5DRV9BRERSKTsKIApAQCAtMTI2MiwxMiArMTI3MCwxMiBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmRldmxvY2ssIGZsYWdzKTsKIAkJc2F2ZWRfYWRkciA9IGludyhpb2FkZHIrTEFOQ0VfQUREUik7CiAJCW91dHcoMTEyLCBpb2FkZHIrTEFOQ0VfQUREUik7Ci0JCWxwLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzID0gaW53KGlvYWRkcitMQU5DRV9EQVRBKTsKKwkJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzID0gaW53KGlvYWRkcitMQU5DRV9EQVRBKTsKIAkJb3V0dyhzYXZlZF9hZGRyLCBpb2FkZHIrTEFOQ0VfQUREUik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5kZXZsb2NrLCBmbGFncyk7CiAJfQogCi0JcmV0dXJuICZscC0+c3RhdHM7CisJcmV0dXJuICZkZXYtPnN0YXRzOwogfQogCiAvKiBTZXQgb3IgY2xlYXIgdGhlIG11bHRpY2FzdCBmaWx0ZXIgZm9yIHRoaXMgYWRhcHRvci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xsX3RlbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2xsX3RlbWFjX21haW4uYwppbmRleCA2NDc0YzQ5Li40ZWVhM2Y3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9sbF90ZW1hY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvbGxfdGVtYWNfbWFpbi5jCkBAIC0xOTMsNiArMTkzLDM1IEBACiAjZW5kaWYKIAogLyoqCisgKiAgKiB0ZW1hY19kbWFfYmRfcmVsZWFzZSAtIFJlbGVhc2UgYnVmZmVyIGRlc2NyaXB0b3IgcmluZ3MKKyAqLworc3RhdGljIHZvaWQgdGVtYWNfZG1hX2JkX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJc3RydWN0IHRlbWFjX2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFJYX0JEX05VTTsgaSsrKSB7CisJCWlmICghbHAtPnJ4X3NrYltpXSkKKwkJCWJyZWFrOworCQllbHNlIHsKKwkJCWRtYV91bm1hcF9zaW5nbGUobmRldi0+ZGV2LnBhcmVudCwgbHAtPnJ4X2JkX3ZbaV0ucGh5cywKKwkJCQkJWFRFX01BWF9KVU1CT19GUkFNRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOworCQkJZGV2X2tmcmVlX3NrYihscC0+cnhfc2tiW2ldKTsKKwkJfQorCX0KKwlpZiAobHAtPnJ4X2JkX3YpCisJCWRtYV9mcmVlX2NvaGVyZW50KG5kZXYtPmRldi5wYXJlbnQsCisJCQkJc2l6ZW9mKCpscC0+cnhfYmRfdikgKiBSWF9CRF9OVU0sCisJCQkJbHAtPnJ4X2JkX3YsIGxwLT5yeF9iZF9wKTsKKwlpZiAobHAtPnR4X2JkX3YpCisJCWRtYV9mcmVlX2NvaGVyZW50KG5kZXYtPmRldi5wYXJlbnQsCisJCQkJc2l6ZW9mKCpscC0+dHhfYmRfdikgKiBUWF9CRF9OVU0sCisJCQkJbHAtPnR4X2JkX3YsIGxwLT50eF9iZF9wKTsKKwlpZiAobHAtPnJ4X3NrYikKKwkJa2ZyZWUobHAtPnJ4X3NrYik7Cit9CisKKy8qKgogICogdGVtYWNfZG1hX2JkX2luaXQgLSBTZXR1cCBidWZmZXIgZGVzY3JpcHRvciByaW5ncwogICovCiBzdGF0aWMgaW50IHRlbWFjX2RtYV9iZF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQpAQCAtMjAyLDE0ICsyMzEsMjkgQEAKIAlpbnQgaTsKIAogCWxwLT5yeF9za2IgPSBremFsbG9jKHNpemVvZigqbHAtPnJ4X3NrYikgKiBSWF9CRF9OVU0sIEdGUF9LRVJORUwpOworCWlmICghbHAtPnJ4X3NrYikgeworCQlkZXZfZXJyKCZuZGV2LT5kZXYsCisJCQkJImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgRE1BIFJYIGJ1ZmZlclxuIik7CisJCWdvdG8gb3V0OworCX0KIAkvKiBhbGxvY2F0ZSB0aGUgdHggYW5kIHJ4IHJpbmcgYnVmZmVyIGRlc2NyaXB0b3JzLiAqLwogCS8qIHJldHVybnMgYSB2aXJ0dWFsIGFkZHJlcyBhbmQgYSBwaHlzaWNhbCBhZGRyZXNzLiAqLwogCWxwLT50eF9iZF92ID0gZG1hX2FsbG9jX2NvaGVyZW50KG5kZXYtPmRldi5wYXJlbnQsCiAJCQkJCSBzaXplb2YoKmxwLT50eF9iZF92KSAqIFRYX0JEX05VTSwKIAkJCQkJICZscC0+dHhfYmRfcCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFscC0+dHhfYmRfdikgeworCQlkZXZfZXJyKCZuZGV2LT5kZXYsCisJCQkJInVuYWJsZSB0byBhbGxvY2F0ZSBETUEgVFggYnVmZmVyIGRlc2NyaXB0b3JzIik7CisJCWdvdG8gb3V0OworCX0KIAlscC0+cnhfYmRfdiA9IGRtYV9hbGxvY19jb2hlcmVudChuZGV2LT5kZXYucGFyZW50LAogCQkJCQkgc2l6ZW9mKCpscC0+cnhfYmRfdikgKiBSWF9CRF9OVU0sCiAJCQkJCSAmbHAtPnJ4X2JkX3AsIEdGUF9LRVJORUwpOworCWlmICghbHAtPnJ4X2JkX3YpIHsKKwkJZGV2X2VycigmbmRldi0+ZGV2LAorCQkJCSJ1bmFibGUgdG8gYWxsb2NhdGUgRE1BIFJYIGJ1ZmZlciBkZXNjcmlwdG9ycyIpOworCQlnb3RvIG91dDsKKwl9CiAKIAltZW1zZXQobHAtPnR4X2JkX3YsIDAsIHNpemVvZigqbHAtPnR4X2JkX3YpICogVFhfQkRfTlVNKTsKIAlmb3IgKGkgPSAwOyBpIDwgVFhfQkRfTlVNOyBpKyspIHsKQEAgLTIyNyw3ICsyNzEsNyBAQAogCiAJCWlmIChza2IgPT0gMCkgewogCQkJZGV2X2VycigmbmRldi0+ZGV2LCAiYWxsb2Nfc2tiIGVycm9yICVkXG4iLCBpKTsKLQkJCXJldHVybiAtMTsKKwkJCWdvdG8gb3V0OwogCQl9CiAJCWxwLT5yeF9za2JbaV0gPSBza2I7CiAJCS8qIHJldHVybnMgcGh5c2ljYWwgYWRkcmVzcyBvZiBza2ItPmRhdGEgKi8KQEAgLTI1OCw2ICszMDIsMTAgQEAKIAlscC0+ZG1hX291dChscCwgVFhfQ1VSREVTQ19QVFIsIGxwLT50eF9iZF9wKTsKIAogCXJldHVybiAwOworCitvdXQ6CisJdGVtYWNfZG1hX2JkX3JlbGVhc2UobmRldik7CisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDQ5LDcgKzQ5Nyw3IEBACiAJcmV0dXJuICgwKTsKIH0KIAotLyogSW5pdGlsaXplIHRlbWFjICovCisvKiBJbml0aWFsaXplIHRlbWFjICovCiBzdGF0aWMgdm9pZCB0ZW1hY19kZXZpY2VfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJc3RydWN0IHRlbWFjX2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpOwpAQCAtNTA1LDcgKzU1MywxMCBAQAogCX0KIAlscC0+ZG1hX291dChscCwgRE1BX0NPTlRST0xfUkVHLCBETUFfVEFJTF9FTkFCTEUpOwogCi0JdGVtYWNfZG1hX2JkX2luaXQobmRldik7CisJaWYgKHRlbWFjX2RtYV9iZF9pbml0KG5kZXYpKSB7CisJCWRldl9lcnIoJm5kZXYtPmRldiwKKwkJCQkidGVtYWNfZGV2aWNlX3Jlc2V0IGRlc2NyaXB0b3IgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCX0KIAogCXRlbWFjX2luZGlyZWN0X291dDMyKGxwLCBYVEVfUlhDMF9PRkZTRVQsIDApOwogCXRlbWFjX2luZGlyZWN0X291dDMyKGxwLCBYVEVfUlhDMV9PRkZTRVQsIDApOwpAQCAtODM3LDYgKzg4OCw4IEBACiAJCXBoeV9kaXNjb25uZWN0KGxwLT5waHlfZGV2KTsKIAlscC0+cGh5X2RldiA9IE5VTEw7CiAKKwl0ZW1hY19kbWFfYmRfcmVsZWFzZShuZGV2KTsKKwogCXJldHVybiAwOwogfQogCkBAIC04NjIsNiArOTE1LDcgQEAKIAkubmRvX3N0b3AgPSB0ZW1hY19zdG9wLAogCS5uZG9fc3RhcnRfeG1pdCA9IHRlbWFjX3N0YXJ0X3htaXQsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBuZXRkZXZfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fdmFsaWRhdGVfYWRkciA9IGV0aF92YWxpZGF0ZV9hZGRyLAogCS8vLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSB0ZW1hY19zZXRfbXVsdGljYXN0X2xpc3QsCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAkubmRvX3BvbGxfY29udHJvbGxlciA9IHRlbWFjX3BvbGxfY29udHJvbGxlciwKQEAgLTk3OCwxOSArMTAzMiwyMiBAQAogCQkJZGV2X2RiZygmb3AtPmRldiwgIk1FTSBiYXNlOiAlcFxuIiwgbHAtPnNkbWFfcmVncyk7CiAJCX0gZWxzZSB7CiAJCQlkZXZfZXJyKCZvcC0+ZGV2LCAidW5hYmxlIHRvIG1hcCBETUEgcmVnaXN0ZXJzXG4iKTsKKwkJCW9mX25vZGVfcHV0KG5wKTsKIAkJCWdvdG8gZXJyX2lvdW5tYXA7CiAJCX0KIAl9CiAKIAlscC0+cnhfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOwogCWxwLT50eF9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMSk7CisKKwlvZl9ub2RlX3B1dChucCk7IC8qIEZpbmlzaGVkIHdpdGggdGhlIERNQSBub2RlOyBkcm9wIHRoZSByZWZlcmVuY2UgKi8KKwogCWlmICgobHAtPnJ4X2lycSA9PSBOT19JUlEpIHx8IChscC0+dHhfaXJxID09IE5PX0lSUSkpIHsKIAkJZGV2X2Vycigmb3AtPmRldiwgImNvdWxkIG5vdCBkZXRlcm1pbmUgaXJxc1xuIik7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBlcnJfaW91bm1hcF8yOwogCX0KIAotCW9mX25vZGVfcHV0KG5wKTsgLyogRmluaXNoZWQgd2l0aCB0aGUgRE1BIG5vZGU7IGRyb3AgdGhlIHJlZmVyZW5jZSAqLwogCiAJLyogUmV0cmlldmUgdGhlIE1BQyBhZGRyZXNzICovCiAJYWRkciA9IG9mX2dldF9wcm9wZXJ0eShvcC0+ZGV2Lm9mX25vZGUsICJsb2NhbC1tYWMtYWRkcmVzcyIsICZzaXplKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMgYi9kcml2ZXJzL25ldC9sb29wYmFjay5jCmluZGV4IDcyYjc5NDkuLjlhMDk5NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMKKysrIGIvZHJpdmVycy9uZXQvbG9vcGJhY2suYwpAQCAtNTgsMTEgKzU4LDEzIEBACiAjaW5jbHVkZSA8bGludXgvdGNwLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91NjRfc3RhdHNfc3luYy5oPgogCiBzdHJ1Y3QgcGNwdV9sc3RhdHMgewotCXVuc2lnbmVkIGxvbmcgcGFja2V0czsKLQl1bnNpZ25lZCBsb25nIGJ5dGVzOwotCXVuc2lnbmVkIGxvbmcgZHJvcHM7CisJdTY0CQkJcGFja2V0czsKKwl1NjQJCQlieXRlczsKKwlzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMJc3luY3A7CisJdW5zaWduZWQgbG9uZwkJZHJvcHM7CiB9OwogCiAvKgpAQCAtODYsMzEgKzg4LDQwIEBACiAKIAlsZW4gPSBza2ItPmxlbjsKIAlpZiAobGlrZWx5KG5ldGlmX3J4KHNrYikgPT0gTkVUX1JYX1NVQ0NFU1MpKSB7CisJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmxiX3N0YXRzLT5zeW5jcCk7CiAJCWxiX3N0YXRzLT5ieXRlcyArPSBsZW47CiAJCWxiX3N0YXRzLT5wYWNrZXRzKys7CisJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZsYl9zdGF0cy0+c3luY3ApOwogCX0gZWxzZQogCQlsYl9zdGF0cy0+ZHJvcHMrKzsKIAogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbG9vcGJhY2tfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpsb29wYmFja19nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkJICAgICAgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cykKIHsKIAljb25zdCBzdHJ1Y3QgcGNwdV9sc3RhdHMgX19wZXJjcHUgKnBjcHVfbHN0YXRzOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZkZXYtPnN0YXRzOwotCXVuc2lnbmVkIGxvbmcgYnl0ZXMgPSAwOwotCXVuc2lnbmVkIGxvbmcgcGFja2V0cyA9IDA7Ci0JdW5zaWduZWQgbG9uZyBkcm9wcyA9IDA7CisJdTY0IGJ5dGVzID0gMDsKKwl1NjQgcGFja2V0cyA9IDA7CisJdTY0IGRyb3BzID0gMDsKIAlpbnQgaTsKIAogCXBjcHVfbHN0YXRzID0gKHZvaWQgX19wZXJjcHUgX19mb3JjZSAqKWRldi0+bWxfcHJpdjsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQljb25zdCBzdHJ1Y3QgcGNwdV9sc3RhdHMgKmxiX3N0YXRzOworCQl1NjQgdGJ5dGVzLCB0cGFja2V0czsKKwkJdW5zaWduZWQgaW50IHN0YXJ0OwogCiAJCWxiX3N0YXRzID0gcGVyX2NwdV9wdHIocGNwdV9sc3RhdHMsIGkpOwotCQlieXRlcyAgICs9IGxiX3N0YXRzLT5ieXRlczsKLQkJcGFja2V0cyArPSBsYl9zdGF0cy0+cGFja2V0czsKKwkJZG8geworCQkJc3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oJmxiX3N0YXRzLT5zeW5jcCk7CisJCQl0Ynl0ZXMgPSBsYl9zdGF0cy0+Ynl0ZXM7CisJCQl0cGFja2V0cyA9IGxiX3N0YXRzLT5wYWNrZXRzOworCQl9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoJmxiX3N0YXRzLT5zeW5jcCwgc3RhcnQpKTsKIAkJZHJvcHMgICArPSBsYl9zdGF0cy0+ZHJvcHM7CisJCWJ5dGVzICAgKz0gdGJ5dGVzOworCQlwYWNrZXRzICs9IHRwYWNrZXRzOwogCX0KIAlzdGF0cy0+cnhfcGFja2V0cyA9IHBhY2tldHM7CiAJc3RhdHMtPnR4X3BhY2tldHMgPSBwYWNrZXRzOwpAQCAtMTU4LDcgKzE2OSw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGxvb3BiYWNrX29wcyA9IHsKIAkubmRvX2luaXQgICAgICA9IGxvb3BiYWNrX2Rldl9pbml0LAogCS5uZG9fc3RhcnRfeG1pdD0gbG9vcGJhY2tfeG1pdCwKLQkubmRvX2dldF9zdGF0cyA9IGxvb3BiYWNrX2dldF9zdGF0cywKKwkubmRvX2dldF9zdGF0czY0ID0gbG9vcGJhY2tfZ2V0X3N0YXRzNjQsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjODM5MC5jIGIvZHJpdmVycy9uZXQvbWFjODM5MC5jCmluZGV4IDExMzZjOWEuLjM4MzJmYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hYzgzOTAuYworKysgYi9kcml2ZXJzL25ldC9tYWM4MzkwLmMKQEAgLTE1Nyw2ICsxNTcsOCBAQAogI2RlZmluZSBtZW1jcHlfZnJvbWlvKGEsIGIsIGMpCW1lbWNweSgoYSksICh2b2lkICopKGIpLCAoYykpCiAjZGVmaW5lIG1lbWNweV90b2lvKGEsIGIsIGMpCW1lbWNweSgodm9pZCAqKShhKSwgKGIpLCAoYykpCiAKKyNkZWZpbmUgbWVtY21wX3dpdGhpbyhhLCBiLCBjKQltZW1jbXAoKGEpLCAodm9pZCAqKShiKSwgKGMpKQorCiAvKiBTbG93IFNhbmUgKDE2LWJpdCBjaHVuayBtZW1vcnkgcmVhZC93cml0ZSkgQ2FibGV0cm9uIHVzZXMgdGhpcyAqLwogc3RhdGljIHZvaWQgc2xvd19zYW5lX2dldF84MzkwX2hkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgIHN0cnVjdCBlODM5MF9wa3RfaGRyICpoZHIsIGludCByaW5nX3BhZ2UpOwpAQCAtMTY0LDggKzE2Niw4IEBACiAJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcmluZ19vZmZzZXQpOwogc3RhdGljIHZvaWQgc2xvd19zYW5lX2Jsb2NrX291dHB1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY291bnQsCiAJCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgc3RhcnRfcGFnZSk7Ci1zdGF0aWMgdm9pZCB3b3JkX21lbWNweV90b2NhcmQodm9pZCAqdHAsIGNvbnN0IHZvaWQgKmZwLCBpbnQgY291bnQpOwotc3RhdGljIHZvaWQgd29yZF9tZW1jcHlfZnJvbWNhcmQodm9pZCAqdHAsIGNvbnN0IHZvaWQgKmZwLCBpbnQgY291bnQpOworc3RhdGljIHZvaWQgd29yZF9tZW1jcHlfdG9jYXJkKHVuc2lnbmVkIGxvbmcgdHAsIGNvbnN0IHZvaWQgKmZwLCBpbnQgY291bnQpOworc3RhdGljIHZvaWQgd29yZF9tZW1jcHlfZnJvbWNhcmQodm9pZCAqdHAsIHVuc2lnbmVkIGxvbmcgZnAsIGludCBjb3VudCk7CiAKIHN0YXRpYyBlbnVtIG1hYzgzOTBfdHlwZSBfX2luaXQgbWFjODM5MF9pZGVudChzdHJ1Y3QgbnVidXNfZGV2ICpkZXYpCiB7CkBAIC0yNDUsOSArMjQ3LDkgQEAKIAl1bnNpZ25lZCBsb25nIG91dGRhdGEgPSAweEE1QTBCNUIwOwogCXVuc2lnbmVkIGxvbmcgaW5kYXRhID0gIDB4MDAwMDAwMDA7CiAJLyogVHJ5IHdyaXRpbmcgMzIgYml0cyAqLwotCW1lbWNweShtZW1iYXNlLCAmb3V0ZGF0YSwgNCk7CisJbWVtY3B5X3RvaW8obWVtYmFzZSwgJm91dGRhdGEsIDQpOwogCS8qIE5vdyBjb21wYXJlIHRoZW0gKi8KLQlpZiAobWVtY21wKChjaGFyICopJm91dGRhdGEsIChjaGFyICopbWVtYmFzZSwgNCkgPT0gMCkKKwlpZiAobWVtY21wX3dpdGhpbygmb3V0ZGF0YSwgbWVtYmFzZSwgNCkgPT0gMCkKIAkJcmV0dXJuIEFDQ0VTU18zMjsKIAkvKiBXcml0ZSAxNiBiaXQgb3V0cHV0ICovCiAJd29yZF9tZW1jcHlfdG9jYXJkKG1lbWJhc2UsICZvdXRkYXRhLCA0KTsKQEAgLTU1NCw3ICs1NTYsNyBAQAogCWNhc2UgTUFDODM5MF9BUFBMRToKIAkJc3dpdGNoIChtYWM4MzkwX3Rlc3RpbyhkZXYtPm1lbV9zdGFydCkpIHsKIAkJY2FzZSBBQ0NFU1NfVU5LTk9XTjoKLQkJCXByX2luZm8oIkRvbid0IGtub3cgaG93IHRvIGFjY2VzcyBjYXJkIG1lbW9yeSFcbiIpOworCQkJcHJfZXJyKCJEb24ndCBrbm93IGhvdyB0byBhY2Nlc3MgY2FyZCBtZW1vcnkhXG4iKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQkJYnJlYWs7CiAKQEAgLTY0MSwxMiArNjQzLDEzIEBACiAKIHN0YXRpYyBpbnQgbWFjODM5MF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJaW50IGVycjsKKwogCV9fZWlfb3BlbihkZXYpOwotCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgX19laV9pbnRlcnJ1cHQsIDAsICI4MzkwIEV0aGVybmV0IiwgZGV2KSkgewotCQlwcl9pbmZvKCIlczogdW5hYmxlIHRvIGdldCBJUlEgJWQuXG4iLCBkZXYtPm5hbWUsIGRldi0+aXJxKTsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCXJldHVybiAwOworCWVyciA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBfX2VpX2ludGVycnVwdCwgMCwgIjgzOTAgRXRoZXJuZXQiLCBkZXYpOworCWlmIChlcnIpCisJCXByX2VycigiJXM6IHVuYWJsZSB0byBnZXQgSVJRICVkXG4iLCBkZXYtPm5hbWUsIGRldi0+aXJxKTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IG1hYzgzOTBfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTczMSw3ICs3MzQsNyBAQAogCQkJICAgICAgc3RydWN0IGU4MzkwX3BrdF9oZHIgKmhkciwgaW50IHJpbmdfcGFnZSkKIHsKIAl1bnNpZ25lZCBsb25nIGhkcl9zdGFydCA9IChyaW5nX3BhZ2UgLSBXRF9TVEFSVF9QRyk8PDg7Ci0JbWVtY3B5X2Zyb21pbygodm9pZCAqKWhkciwgKGNoYXIgKilkZXYtPm1lbV9zdGFydCArIGhkcl9zdGFydCwgNCk7CisJbWVtY3B5X2Zyb21pbyhoZHIsIGRldi0+bWVtX3N0YXJ0ICsgaGRyX3N0YXJ0LCA0KTsKIAkvKiBGaXggZW5kaWFubmVzcyAqLwogCWhkci0+Y291bnQgPSBzd2FiMTYoaGRyLT5jb3VudCk7CiB9CkBAIC03NDUsMTQgKzc0OCwxMyBAQAogCWlmICh4ZmVyX3N0YXJ0ICsgY291bnQgPiBlaV9zdGF0dXMucm1lbV9lbmQpIHsKIAkJLyogV2UgbXVzdCB3cmFwIHRoZSBpbnB1dCBtb3ZlLiAqLwogCQlpbnQgc2VtaV9jb3VudCA9IGVpX3N0YXR1cy5ybWVtX2VuZCAtIHhmZXJfc3RhcnQ7Ci0JCW1lbWNweV9mcm9taW8oc2tiLT5kYXRhLCAoY2hhciAqKWRldi0+bWVtX3N0YXJ0ICsgeGZlcl9iYXNlLAorCQltZW1jcHlfZnJvbWlvKHNrYi0+ZGF0YSwgZGV2LT5tZW1fc3RhcnQgKyB4ZmVyX2Jhc2UsCiAJCQkgICAgICBzZW1pX2NvdW50KTsKIAkJY291bnQgLT0gc2VtaV9jb3VudDsKLQkJbWVtY3B5X3RvaW8oc2tiLT5kYXRhICsgc2VtaV9jb3VudCwKLQkJCSAgICAoY2hhciAqKWVpX3N0YXR1cy5ybWVtX3N0YXJ0LCBjb3VudCk7Ci0JfSBlbHNlIHsKLQkJbWVtY3B5X2Zyb21pbyhza2ItPmRhdGEsIChjaGFyICopZGV2LT5tZW1fc3RhcnQgKyB4ZmVyX2Jhc2UsCisJCW1lbWNweV9mcm9taW8oc2tiLT5kYXRhICsgc2VtaV9jb3VudCwgZWlfc3RhdHVzLnJtZW1fc3RhcnQsCiAJCQkgICAgICBjb3VudCk7CisJfSBlbHNlIHsKKwkJbWVtY3B5X2Zyb21pbyhza2ItPmRhdGEsIGRldi0+bWVtX3N0YXJ0ICsgeGZlcl9iYXNlLCBjb3VudCk7CiAJfQogfQogCkBAIC03NjEsNyArNzYzLDcgQEAKIHsKIAlsb25nIHNobWVtID0gKHN0YXJ0X3BhZ2UgLSBXRF9TVEFSVF9QRyk8PDg7CiAKLQltZW1jcHlfdG9pbygoY2hhciAqKWRldi0+bWVtX3N0YXJ0ICsgc2htZW0sIGJ1ZiwgY291bnQpOworCW1lbWNweV90b2lvKGRldi0+bWVtX3N0YXJ0ICsgc2htZW0sIGJ1ZiwgY291bnQpOwogfQogCiAvKiBkYXluYSBibG9jayBpbnB1dC9vdXRwdXQgKi8KQEAgLTgxMiw3ICs4MTQsNyBAQAogCQkJCSAgIGludCByaW5nX3BhZ2UpCiB7CiAJdW5zaWduZWQgbG9uZyBoZHJfc3RhcnQgPSAocmluZ19wYWdlIC0gV0RfU1RBUlRfUEcpPDw4OwotCXdvcmRfbWVtY3B5X2Zyb21jYXJkKGhkciwgKGNoYXIgKilkZXYtPm1lbV9zdGFydCArIGhkcl9zdGFydCwgNCk7CisJd29yZF9tZW1jcHlfZnJvbWNhcmQoaGRyLCBkZXYtPm1lbV9zdGFydCArIGhkcl9zdGFydCwgNCk7CiAJLyogUmVnaXN0ZXIgZW5kaWFuaXNtIC0gZml4IGhlcmUgcmF0aGVyIHRoYW4gODM5MC5jICovCiAJaGRyLT5jb3VudCA9IChoZHItPmNvdW50JjB4RkYpPDw4fChoZHItPmNvdW50Pj44KTsKIH0KQEAgLTgyNiwxNSArODI4LDE0IEBACiAJaWYgKHhmZXJfc3RhcnQgKyBjb3VudCA+IGVpX3N0YXR1cy5ybWVtX2VuZCkgewogCQkvKiBXZSBtdXN0IHdyYXAgdGhlIGlucHV0IG1vdmUuICovCiAJCWludCBzZW1pX2NvdW50ID0gZWlfc3RhdHVzLnJtZW1fZW5kIC0geGZlcl9zdGFydDsKLQkJd29yZF9tZW1jcHlfZnJvbWNhcmQoc2tiLT5kYXRhLAotCQkJCSAgICAgKGNoYXIgKilkZXYtPm1lbV9zdGFydCArIHhmZXJfYmFzZSwKKwkJd29yZF9tZW1jcHlfZnJvbWNhcmQoc2tiLT5kYXRhLCBkZXYtPm1lbV9zdGFydCArIHhmZXJfYmFzZSwKIAkJCQkgICAgIHNlbWlfY291bnQpOwogCQljb3VudCAtPSBzZW1pX2NvdW50OwogCQl3b3JkX21lbWNweV9mcm9tY2FyZChza2ItPmRhdGEgKyBzZW1pX2NvdW50LAotCQkJCSAgICAgKGNoYXIgKillaV9zdGF0dXMucm1lbV9zdGFydCwgY291bnQpOworCQkJCSAgICAgZWlfc3RhdHVzLnJtZW1fc3RhcnQsIGNvdW50KTsKIAl9IGVsc2UgewotCQl3b3JkX21lbWNweV9mcm9tY2FyZChza2ItPmRhdGEsCi0JCQkJICAgICAoY2hhciAqKWRldi0+bWVtX3N0YXJ0ICsgeGZlcl9iYXNlLCBjb3VudCk7CisJCXdvcmRfbWVtY3B5X2Zyb21jYXJkKHNrYi0+ZGF0YSwgZGV2LT5tZW1fc3RhcnQgKyB4ZmVyX2Jhc2UsCisJCQkJICAgICBjb3VudCk7CiAJfQogfQogCkBAIC04NDMsMTIgKzg0NCwxMiBAQAogewogCWxvbmcgc2htZW0gPSAoc3RhcnRfcGFnZSAtIFdEX1NUQVJUX1BHKTw8ODsKIAotCXdvcmRfbWVtY3B5X3RvY2FyZCgoY2hhciAqKWRldi0+bWVtX3N0YXJ0ICsgc2htZW0sIGJ1ZiwgY291bnQpOworCXdvcmRfbWVtY3B5X3RvY2FyZChkZXYtPm1lbV9zdGFydCArIHNobWVtLCBidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIHZvaWQgd29yZF9tZW1jcHlfdG9jYXJkKHZvaWQgKnRwLCBjb25zdCB2b2lkICpmcCwgaW50IGNvdW50KQorc3RhdGljIHZvaWQgd29yZF9tZW1jcHlfdG9jYXJkKHVuc2lnbmVkIGxvbmcgdHAsIGNvbnN0IHZvaWQgKmZwLCBpbnQgY291bnQpCiB7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKnRvID0gdHA7CisJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKnRvID0gKHZvaWQgKil0cDsKIAljb25zdCB1bnNpZ25lZCBzaG9ydCAqZnJvbSA9IGZwOwogCiAJY291bnQrKzsKQEAgLTg1OCwxMCArODU5LDEwIEBACiAJCSp0bysrID0gKmZyb20rKzsKIH0KIAotc3RhdGljIHZvaWQgd29yZF9tZW1jcHlfZnJvbWNhcmQodm9pZCAqdHAsIGNvbnN0IHZvaWQgKmZwLCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCB3b3JkX21lbWNweV9mcm9tY2FyZCh2b2lkICp0cCwgdW5zaWduZWQgbG9uZyBmcCwgaW50IGNvdW50KQogewogCXVuc2lnbmVkIHNob3J0ICp0byA9IHRwOwotCWNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpmcm9tID0gZnA7CisJY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKmZyb20gPSAoY29uc3Qgdm9pZCAqKWZwOwogCiAJY291bnQrKzsKIAljb3VudCAvPSAyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjODl4MC5jIGIvZHJpdmVycy9uZXQvbWFjODl4MC5jCmluZGV4IDY5ZmE0ZWY2Li42NjliMzE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWM4OXgwLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjODl4MC5jCkBAIC0xMTAsNyArMTEwLDYgQEAKIAogLyogSW5mb3JtYXRpb24gdGhhdCBuZWVkIHRvIGJlIGtlcHQgZm9yIGVhY2ggYm9hcmQuICovCiBzdHJ1Y3QgbmV0X2xvY2FsIHsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAlpbnQgY2hpcF90eXBlOwkJLyogb25lIG9mOiBDUzg5MDAsIENTODkyMCwgQ1M4OTIwTSAqLwogCWNoYXIgY2hpcF9yZXZpc2lvbjsJLyogcmV2aXNpb24gbGV0dGVyIG9mIHRoZSBjaGlwICgnQScuLi4pICovCiAJaW50IHNlbmRfY21kOwkJLyogdGhlIHByb3BlcmNvbW1hbmQgdXNlZCB0byBzZW5kIGEgcGFja2V0LiAqLwpAQCAtNDQ0LDEzICs0NDMsMTggQEAKIAkJCW5ldF9yeChkZXYpOwogCQkJYnJlYWs7CiAJCWNhc2UgSVNRX1RSQU5TTUlUVEVSX0VWRU5UOgotCQkJbHAtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQkJaWYgKChzdGF0dXMgJiBUWF9PSykgPT0gMCkgbHAtPnN0YXRzLnR4X2Vycm9ycysrOwotCQkJaWYgKHN0YXR1cyAmIFRYX0xPU1RfQ1JTKSBscC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKLQkJCWlmIChzdGF0dXMgJiBUWF9TUUVfRVJST1IpIGxwLT5zdGF0cy50eF9oZWFydGJlYXRfZXJyb3JzKys7Ci0JCQlpZiAoc3RhdHVzICYgVFhfTEFURV9DT0wpIGxwLT5zdGF0cy50eF93aW5kb3dfZXJyb3JzKys7Ci0JCQlpZiAoc3RhdHVzICYgVFhfMTZfQ09MKSBscC0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJCWlmICgoc3RhdHVzICYgVFhfT0spID09IDApCisJCQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJCWlmIChzdGF0dXMgJiBUWF9MT1NUX0NSUykKKwkJCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCQlpZiAoc3RhdHVzICYgVFhfU1FFX0VSUk9SKQorCQkJCWRldi0+c3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycysrOworCQkJaWYgKHN0YXR1cyAmIFRYX0xBVEVfQ09MKQorCQkJCWRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOworCQkJaWYgKHN0YXR1cyAmIFRYXzE2X0NPTCkKKwkJCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJCQlicmVhazsKIAkJY2FzZSBJU1FfQlVGRkVSX0VWRU5UOgogCQkJaWYgKHN0YXR1cyAmIFJFQURZX0ZPUl9UWCkgewpAQCAtNDY5LDEwICs0NzMsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAkJCWJyZWFrOwogCQljYXNlIElTUV9SWF9NSVNTX0VWRU5UOgotCQkJbHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gKHN0YXR1cyA+PjYpOworCQkJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzICs9IChzdGF0dXMgPj4gNik7CiAJCQlicmVhazsKIAkJY2FzZSBJU1FfVFhfQ09MX0VWRU5UOgotCQkJbHAtPnN0YXRzLmNvbGxpc2lvbnMgKz0gKHN0YXR1cyA+PjYpOworCQkJZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9IChzdGF0dXMgPj4gNik7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTQ4MywxOSArNDg3LDIyIEBACiBzdGF0aWMgdm9pZAogbmV0X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IHN0YXR1cywgbGVuZ3RoOwogCiAJc3RhdHVzID0gcmVhZHJlZyhkZXYsIFBQX1J4U3RhdHVzKTsKIAlpZiAoKHN0YXR1cyAmIFJYX09LKSA9PSAwKSB7Ci0JCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJaWYgKHN0YXR1cyAmIFJYX1JVTlQpIGxwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JCWlmIChzdGF0dXMgJiBSWF9FWFRSQV9EQVRBKSBscC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwotCQlpZiAoc3RhdHVzICYgUlhfQ1JDX0VSUk9SKSBpZiAoIShzdGF0dXMgJiAoUlhfRVhUUkFfREFUQXxSWF9SVU5UKSkpCisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCWlmIChzdGF0dXMgJiBSWF9SVU5UKQorCQkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQlpZiAoc3RhdHVzICYgUlhfRVhUUkFfREFUQSkKKwkJCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJaWYgKChzdGF0dXMgJiBSWF9DUkNfRVJST1IpICYmCisJCSAgICAhKHN0YXR1cyAmIChSWF9FWFRSQV9EQVRBfFJYX1JVTlQpKSkKIAkJCS8qIHBlciBzdHIgMTcyICovCi0JCQlscC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwotCQlpZiAoc3RhdHVzICYgUlhfRFJJQkJMRSkgbHAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCWlmIChzdGF0dXMgJiBSWF9EUklCQkxFKQorCQkJCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CiAJCXJldHVybjsKIAl9CiAKQEAgLTUwNCw3ICs1MTEsNyBAQAogCXNrYiA9IGFsbG9jX3NrYihsZW5ndGgsIEdGUF9BVE9NSUMpOwogCWlmIChza2IgPT0gTlVMTCkgewogCQlwcmludGsoIiVzOiBNZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0LlxuIiwgZGV2LT5uYW1lKTsKLQkJbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybjsKIAl9CiAJc2tiX3B1dChza2IsIGxlbmd0aCk7CkBAIC01MTksOCArNTI2LDggQEAKIAogICAgICAgICBza2ItPnByb3RvY29sPWV0aF90eXBlX3RyYW5zKHNrYixkZXYpOwogCW5ldGlmX3J4KHNrYik7Ci0JbHAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQlscC0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuZ3RoOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuZ3RoOwogfQogCiAvKiBUaGUgaW52ZXJzZSByb3V0aW5lIHRvIG5ldF9vcGVuKCkuICovCkBAIC01NDgsMTYgKzU1NSwxNSBAQAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICoKIG5ldF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkvKiBVcGRhdGUgdGhlIHN0YXRpc3RpY3MgZnJvbSB0aGUgZGV2aWNlIHJlZ2lzdGVycy4gKi8KLQlscC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycyArPSAocmVhZHJlZyhkZXYsIFBQX1J4TWlzcykgPj4gNik7Ci0JbHAtPnN0YXRzLmNvbGxpc2lvbnMgKz0gKHJlYWRyZWcoZGV2LCBQUF9UeENvbCkgPj4gNik7CisJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzICs9IChyZWFkcmVnKGRldiwgUFBfUnhNaXNzKSA+PiA2KTsKKwlkZXYtPnN0YXRzLmNvbGxpc2lvbnMgKz0gKHJlYWRyZWcoZGV2LCBQUF9UeENvbCkgPj4gNik7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0JcmV0dXJuICZscC0+c3RhdHM7CisJcmV0dXJuICZkZXYtPnN0YXRzOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY2IuYyBiL2RyaXZlcnMvbmV0L21hY2IuYwppbmRleCA0MDc5N2ZiLi5mZjJmMTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNiLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjYi5jCkBAIC0xMDgyLDcgKzEwODIsNyBAQAogCWlmICghcGh5ZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldHVybiBwaHlfbWlpX2lvY3RsKHBoeWRldiwgaWZfbWlpKHJxKSwgY21kKTsKKwlyZXR1cm4gcGh5X21paV9pb2N0bChwaHlkZXYsIHJxLCBjbWQpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1hY2JfbmV0ZGV2X29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY3NvbmljLmMgYi9kcml2ZXJzL25ldC9tYWNzb25pYy5jCmluZGV4IGFkYjU0ZmUuLmM5MzY3OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY3NvbmljLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjc29uaWMuYwpAQCAtMTQwLDIxICsxNDAsNDAgQEAKIAogc3RhdGljIGludCBtYWNzb25pY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCiB7Ci0JaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBzb25pY19pbnRlcnJ1cHQsIElSUV9GTEdfRkFTVCwgInNvbmljIiwgZGV2KSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gZ2V0IElSUSAlZC5cbiIsIGRldi0+bmFtZSwgZGV2LT5pcnEpOwotCQlyZXR1cm4gLUVBR0FJTjsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHNvbmljX2ludGVycnVwdCwgSVJRX0ZMR19GQVNULAorCQkJCSJzb25pYyIsIGRldik7CisJaWYgKHJldHZhbCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gZ2V0IElSUSAlZC5cbiIsCisJCQkJZGV2LT5uYW1lLCBkZXYtPmlycSk7CisJCWdvdG8gZXJyOwogCX0KIAkvKiBVbmRlciB0aGUgQS9VWCBpbnRlcnJ1cHQgc2NoZW1lLCB0aGUgb25ib2FyZCBTT05JQyBpbnRlcnJ1cHQgY29tZXMKIAkgKiBpbiBhdCBwcmlvcml0eSBsZXZlbCAzLiBIb3dldmVyLCB3ZSBzb21ldGltZXMgZ2V0IHRoZSBsZXZlbCAyIGludGVyLQogCSAqIHJ1cHQgYXMgd2VsbCwgd2hpY2ggbXVzdCBwcmV2ZW50IHJlLWVudHJhbmNlIG9mIHRoZSBzb25pYyBoYW5kbGVyLgogCSAqLwotCWlmIChkZXYtPmlycSA9PSBJUlFfQVVUT18zKQotCQlpZiAocmVxdWVzdF9pcnEoSVJRX05VQlVTXzksIG1hY3NvbmljX2ludGVycnVwdCwgSVJRX0ZMR19GQVNULCAic29uaWMiLCBkZXYpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gZ2V0IElSUSAlZC5cbiIsIGRldi0+bmFtZSwgSVJRX05VQlVTXzkpOwotCQkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7Ci0JCQlyZXR1cm4gLUVBR0FJTjsKKwlpZiAoZGV2LT5pcnEgPT0gSVJRX0FVVE9fMykgeworCQlyZXR2YWwgPSByZXF1ZXN0X2lycShJUlFfTlVCVVNfOSwgbWFjc29uaWNfaW50ZXJydXB0LAorCQkJCQlJUlFfRkxHX0ZBU1QsICJzb25pYyIsIGRldik7CisJCWlmIChyZXR2YWwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBnZXQgSVJRICVkLlxuIiwKKwkJCQkJZGV2LT5uYW1lLCBJUlFfTlVCVVNfOSk7CisJCQlnb3RvIGVycl9pcnE7CiAJCX0KLQlyZXR1cm4gc29uaWNfb3BlbihkZXYpOworCX0KKwlyZXR2YWwgPSBzb25pY19vcGVuKGRldik7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJfaXJxX251YnVzOworCXJldHVybiAwOworCitlcnJfaXJxX251YnVzOgorCWlmIChkZXYtPmlycSA9PSBJUlFfQVVUT18zKQorCQlmcmVlX2lycShJUlFfTlVCVVNfOSwgZGV2KTsKK2Vycl9pcnE6CisJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CitlcnI6CisJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIGludCBtYWNzb25pY19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjdmxhbi5jIGIvZHJpdmVycy9uZXQvbWFjdmxhbi5jCmluZGV4IDg3ZThkNGMuLjBlZjBlYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY3ZsYW4uYworKysgYi9kcml2ZXJzL25ldC9tYWN2bGFuLmMKQEAgLTM3LDggKzM3LDE0IEBACiAJc3RydWN0IG5ldF9kZXZpY2UJKmRldjsKIAlzdHJ1Y3QgaGxpc3RfaGVhZAl2bGFuX2hhc2hbTUFDVkxBTl9IQVNIX1NJWkVdOwogCXN0cnVjdCBsaXN0X2hlYWQJdmxhbnM7CisJc3RydWN0IHJjdV9oZWFkCQlyY3U7CiB9OwogCisjZGVmaW5lIG1hY3ZsYW5fcG9ydF9nZXRfcmN1KGRldikgXAorCSgoc3RydWN0IG1hY3ZsYW5fcG9ydCAqKSByY3VfZGVyZWZlcmVuY2UoZGV2LT5yeF9oYW5kbGVyX2RhdGEpKQorI2RlZmluZSBtYWN2bGFuX3BvcnRfZ2V0KGRldikgKChzdHJ1Y3QgbWFjdmxhbl9wb3J0ICopIGRldi0+cnhfaGFuZGxlcl9kYXRhKQorI2RlZmluZSBtYWN2bGFuX3BvcnRfZXhpc3RzKGRldikgKGRldi0+cHJpdl9mbGFncyAmIElGRl9NQUNWTEFOX1BPUlQpCisKIHN0YXRpYyBzdHJ1Y3QgbWFjdmxhbl9kZXYgKm1hY3ZsYW5faGFzaF9sb29rdXAoY29uc3Qgc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydCwKIAkJCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpCiB7CkBAIC0xNDUsMTUgKzE1MSwxNyBAQAogfQogCiAvKiBjYWxsZWQgdW5kZXIgcmN1X3JlYWRfbG9jaygpIGZyb20gbmV0aWZfcmVjZWl2ZV9za2IgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbWFjdmxhbl9oYW5kbGVfZnJhbWUoc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydCwKLQkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm1hY3ZsYW5faGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IpCiB7CisJc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydDsKIAljb25zdCBzdHJ1Y3QgZXRoaGRyICpldGggPSBldGhfaGRyKHNrYik7CiAJY29uc3Qgc3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuOwogCWNvbnN0IHN0cnVjdCBtYWN2bGFuX2RldiAqc3JjOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JdW5zaWduZWQgaW50IGxlbjsKKwl1bnNpZ25lZCBpbnQgbGVuID0gMDsKKwlpbnQgcmV0ID0gTkVUX1JYX0RST1A7CiAKKwlwb3J0ID0gbWFjdmxhbl9wb3J0X2dldF9yY3Uoc2tiLT5kZXYpOwogCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGgtPmhfZGVzdCkpIHsKIAkJc3JjID0gbWFjdmxhbl9oYXNoX2xvb2t1cChwb3J0LCBldGgtPmhfc291cmNlKTsKIAkJaWYgKCFzcmMpCkBAIC0xODgsMTQgKzE5NiwxNiBAQAogCX0KIAlsZW4gPSBza2ItPmxlbiArIEVUSF9ITEVOOwogCXNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpOwotCW1hY3ZsYW5fY291bnRfcngodmxhbiwgbGVuLCBza2IgIT0gTlVMTCwgMCk7CiAJaWYgKCFza2IpCi0JCXJldHVybiBOVUxMOworCQlnb3RvIG91dDsKIAogCXNrYi0+ZGV2ID0gZGV2OwogCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKIAotCXZsYW4tPnJlY2VpdmUoc2tiKTsKKwlyZXQgPSB2bGFuLT5yZWNlaXZlKHNrYik7CisKK291dDoKKwltYWN2bGFuX2NvdW50X3J4KHZsYW4sIGxlbiwgcmV0ID09IE5FVF9SWF9TVUNDRVNTLCAwKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtNDI0LDI5ICs0MzQsMzggQEAKIAlmcmVlX3BlcmNwdSh2bGFuLT5yeF9zdGF0cyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbWFjdmxhbl9kZXZfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICptYWN2bGFuX2Rldl9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkJCSBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKQogewotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZkZXYtPnN0YXRzOwogCXN0cnVjdCBtYWN2bGFuX2RldiAqdmxhbiA9IG5ldGRldl9wcml2KGRldik7CiAKIAlkZXZfdHhxX3N0YXRzX2ZvbGQoZGV2LCBzdGF0cyk7CiAKIAlpZiAodmxhbi0+cnhfc3RhdHMpIHsKLQkJc3RydWN0IG1hY3ZsYW5fcnhfc3RhdHMgKnAsIHJ4ID0gezB9OworCQlzdHJ1Y3QgbWFjdmxhbl9yeF9zdGF0cyAqcCwgYWNjdW0gPSB7MH07CisJCXU2NCByeF9wYWNrZXRzLCByeF9ieXRlcywgcnhfbXVsdGljYXN0OworCQl1bnNpZ25lZCBpbnQgc3RhcnQ7CiAJCWludCBpOwogCiAJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCQlwID0gcGVyX2NwdV9wdHIodmxhbi0+cnhfc3RhdHMsIGkpOwotCQkJcngucnhfcGFja2V0cyArPSBwLT5yeF9wYWNrZXRzOwotCQkJcngucnhfYnl0ZXMgICArPSBwLT5yeF9ieXRlczsKLQkJCXJ4LnJ4X2Vycm9ycyAgKz0gcC0+cnhfZXJyb3JzOwotCQkJcngubXVsdGljYXN0ICArPSBwLT5tdWx0aWNhc3Q7CisJCQlkbyB7CisJCQkJc3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW5fYmgoJnAtPnN5bmNwKTsKKwkJCQlyeF9wYWNrZXRzCT0gcC0+cnhfcGFja2V0czsKKwkJCQlyeF9ieXRlcwk9IHAtPnJ4X2J5dGVzOworCQkJCXJ4X211bHRpY2FzdAk9IHAtPnJ4X211bHRpY2FzdDsKKwkJCX0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeV9iaCgmcC0+c3luY3AsIHN0YXJ0KSk7CisJCQlhY2N1bS5yeF9wYWNrZXRzCSs9IHJ4X3BhY2tldHM7CisJCQlhY2N1bS5yeF9ieXRlcwkJKz0gcnhfYnl0ZXM7CisJCQlhY2N1bS5yeF9tdWx0aWNhc3QJKz0gcnhfbXVsdGljYXN0OworCQkJLyogcnhfZXJyb3JzIGlzIGFuIHVsb25nLCB1cGRhdGVkIHdpdGhvdXQgc3luY3AgcHJvdGVjdGlvbiAqLworCQkJYWNjdW0ucnhfZXJyb3JzCQkrPSBwLT5yeF9lcnJvcnM7CiAJCX0KLQkJc3RhdHMtPnJ4X3BhY2tldHMgPSByeC5yeF9wYWNrZXRzOwotCQlzdGF0cy0+cnhfYnl0ZXMgICA9IHJ4LnJ4X2J5dGVzOwotCQlzdGF0cy0+cnhfZXJyb3JzICA9IHJ4LnJ4X2Vycm9yczsKLQkJc3RhdHMtPnJ4X2Ryb3BwZWQgPSByeC5yeF9lcnJvcnM7Ci0JCXN0YXRzLT5tdWx0aWNhc3QgID0gcngubXVsdGljYXN0OworCQlzdGF0cy0+cnhfcGFja2V0cyA9IGFjY3VtLnJ4X3BhY2tldHM7CisJCXN0YXRzLT5yeF9ieXRlcyAgID0gYWNjdW0ucnhfYnl0ZXM7CisJCXN0YXRzLT5yeF9lcnJvcnMgID0gYWNjdW0ucnhfZXJyb3JzOworCQlzdGF0cy0+cnhfZHJvcHBlZCA9IGFjY3VtLnJ4X2Vycm9yczsKKwkJc3RhdHMtPm11bHRpY2FzdCAgPSBhY2N1bS5yeF9tdWx0aWNhc3Q7CiAJfQogCXJldHVybiBzdGF0czsKIH0KQEAgLTQ5NSwxMSArNTE0LDExIEBACiAJLm5kb19jaGFuZ2VfcnhfZmxhZ3MJPSBtYWN2bGFuX2NoYW5nZV9yeF9mbGFncywKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IG1hY3ZsYW5fc2V0X21hY19hZGRyZXNzLAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gbWFjdmxhbl9zZXRfbXVsdGljYXN0X2xpc3QsCi0JLm5kb19nZXRfc3RhdHMJCT0gbWFjdmxhbl9kZXZfZ2V0X3N0YXRzLAorCS5uZG9fZ2V0X3N0YXRzNjQJPSBtYWN2bGFuX2Rldl9nZXRfc3RhdHM2NCwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIH07CiAKLXN0YXRpYyB2b2lkIG1hY3ZsYW5fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3ZvaWQgbWFjdmxhbl9jb21tb25fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlldGhlcl9zZXR1cChkZXYpOwogCkBAIC01MDgsNiArNTI3LDEyIEBACiAJZGV2LT5kZXN0cnVjdG9yCQk9IGZyZWVfbmV0ZGV2OwogCWRldi0+aGVhZGVyX29wcwkJPSAmbWFjdmxhbl9oYXJkX2hlYWRlcl9vcHMsCiAJZGV2LT5ldGh0b29sX29wcwk9ICZtYWN2bGFuX2V0aHRvb2xfb3BzOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWFjdmxhbl9jb21tb25fc2V0dXApOworCitzdGF0aWMgdm9pZCBtYWN2bGFuX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJbWFjdmxhbl9jb21tb25fc2V0dXAoZGV2KTsKIAlkZXYtPnR4X3F1ZXVlX2xlbgk9IDA7CiB9CiAKQEAgLTUxNSw2ICs1NDAsNyBAQAogewogCXN0cnVjdCBtYWN2bGFuX3BvcnQgKnBvcnQ7CiAJdW5zaWduZWQgaW50IGk7CisJaW50IGVycjsKIAogCWlmIChkZXYtPnR5cGUgIT0gQVJQSFJEX0VUSEVSIHx8IGRldi0+ZmxhZ3MgJiBJRkZfTE9PUEJBQ0spCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNTI3LDE3ICs1NTMsMzAgQEAKIAlJTklUX0xJU1RfSEVBRCgmcG9ydC0+dmxhbnMpOwogCWZvciAoaSA9IDA7IGkgPCBNQUNWTEFOX0hBU0hfU0laRTsgaSsrKQogCQlJTklUX0hMSVNUX0hFQUQoJnBvcnQtPnZsYW5faGFzaFtpXSk7Ci0JcmN1X2Fzc2lnbl9wb2ludGVyKGRldi0+bWFjdmxhbl9wb3J0LCBwb3J0KTsKLQlyZXR1cm4gMDsKKworCWVyciA9IG5ldGRldl9yeF9oYW5kbGVyX3JlZ2lzdGVyKGRldiwgbWFjdmxhbl9oYW5kbGVfZnJhbWUsIHBvcnQpOworCWlmIChlcnIpCisJCWtmcmVlKHBvcnQpOworCisJZGV2LT5wcml2X2ZsYWdzIHw9IElGRl9NQUNWTEFOX1BPUlQ7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgbWFjdmxhbl9wb3J0X3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0OworCisJcG9ydCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgbWFjdmxhbl9wb3J0LCByY3UpOworCWtmcmVlKHBvcnQpOwogfQogCiBzdGF0aWMgdm9pZCBtYWN2bGFuX3BvcnRfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBtYWN2bGFuX3BvcnQgKnBvcnQgPSBkZXYtPm1hY3ZsYW5fcG9ydDsKKwlzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0ID0gbWFjdmxhbl9wb3J0X2dldChkZXYpOwogCi0JcmN1X2Fzc2lnbl9wb2ludGVyKGRldi0+bWFjdmxhbl9wb3J0LCBOVUxMKTsKLQlzeW5jaHJvbml6ZV9yY3UoKTsKLQlrZnJlZShwb3J0KTsKKwlkZXYtPnByaXZfZmxhZ3MgJj0gfklGRl9NQUNWTEFOX1BPUlQ7CisJbmV0ZGV2X3J4X2hhbmRsZXJfdW5yZWdpc3RlcihkZXYpOworCWNhbGxfcmN1KCZwb3J0LT5yY3UsIG1hY3ZsYW5fcG9ydF9yY3VfZnJlZSk7CiB9CiAKIHN0YXRpYyBpbnQgbWFjdmxhbl92YWxpZGF0ZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10pCkBAIC02MTUsMTIgKzY1NCwxMiBAQAogCWlmICghdGJbSUZMQV9BRERSRVNTXSkKIAkJcmFuZG9tX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcik7CiAKLQlpZiAobG93ZXJkZXYtPm1hY3ZsYW5fcG9ydCA9PSBOVUxMKSB7CisJaWYgKCFtYWN2bGFuX3BvcnRfZXhpc3RzKGxvd2VyZGV2KSkgewogCQllcnIgPSBtYWN2bGFuX3BvcnRfY3JlYXRlKGxvd2VyZGV2KTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCX0KLQlwb3J0ID0gbG93ZXJkZXYtPm1hY3ZsYW5fcG9ydDsKKwlwb3J0ID0gbWFjdmxhbl9wb3J0X2dldChsb3dlcmRldik7CiAKIAl2bGFuLT5sb3dlcmRldiA9IGxvd2VyZGV2OwogCXZsYW4tPmRldiAgICAgID0gZGV2OwpAQCAtNzA1LDcgKzc0NCw2IEBACiAJLyogY29tbW9uIGZpZWxkcyAqLwogCW9wcy0+cHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgbWFjdmxhbl9kZXYpOwogCW9wcy0+Z2V0X3R4X3F1ZXVlcwk9IG1hY3ZsYW5fZ2V0X3R4X3F1ZXVlczsKLQlvcHMtPnNldHVwCQk9IG1hY3ZsYW5fc2V0dXA7CiAJb3BzLT52YWxpZGF0ZQkJPSBtYWN2bGFuX3ZhbGlkYXRlOwogCW9wcy0+bWF4dHlwZQkJPSBJRkxBX01BQ1ZMQU5fTUFYOwogCW9wcy0+cG9saWN5CQk9IG1hY3ZsYW5fcG9saWN5OwpAQCAtNzE5LDYgKzc1Nyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBtYWN2bGFuX2xpbmtfb3BzID0gewogCS5raW5kCQk9ICJtYWN2bGFuIiwKKwkuc2V0dXAJCT0gbWFjdmxhbl9zZXR1cCwKIAkubmV3bGluawk9IG1hY3ZsYW5fbmV3bGluaywKIAkuZGVsbGluawk9IG1hY3ZsYW5fZGVsbGluaywKIH07CkBAIC03MzAsMTAgKzc2OSwxMSBAQAogCXN0cnVjdCBtYWN2bGFuX2RldiAqdmxhbiwgKm5leHQ7CiAJc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydDsKIAotCXBvcnQgPSBkZXYtPm1hY3ZsYW5fcG9ydDsKLQlpZiAocG9ydCA9PSBOVUxMKQorCWlmICghbWFjdmxhbl9wb3J0X2V4aXN0cyhkZXYpKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKKwlwb3J0ID0gbWFjdmxhbl9wb3J0X2dldChkZXYpOworCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgTkVUREVWX0NIQU5HRToKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bGFuLCAmcG9ydC0+dmxhbnMsIGxpc3QpCkBAIC03NjcsMTQgKzgwNywxMiBAQAogCWludCBlcnI7CiAKIAlyZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJm1hY3ZsYW5fbm90aWZpZXJfYmxvY2spOwotCW1hY3ZsYW5faGFuZGxlX2ZyYW1lX2hvb2sgPSBtYWN2bGFuX2hhbmRsZV9mcmFtZTsKIAogCWVyciA9IG1hY3ZsYW5fbGlua19yZWdpc3RlcigmbWFjdmxhbl9saW5rX29wcyk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyMTsKIAlyZXR1cm4gMDsKIGVycjE6Ci0JbWFjdmxhbl9oYW5kbGVfZnJhbWVfaG9vayA9IE5VTEw7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJm1hY3ZsYW5fbm90aWZpZXJfYmxvY2spOwogCXJldHVybiBlcnI7CiB9CkBAIC03ODIsNyArODIwLDYgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtYWN2bGFuX2NsZWFudXBfbW9kdWxlKHZvaWQpCiB7CiAJcnRubF9saW5rX3VucmVnaXN0ZXIoJm1hY3ZsYW5fbGlua19vcHMpOwotCW1hY3ZsYW5faGFuZGxlX2ZyYW1lX2hvb2sgPSBOVUxMOwogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZtYWN2bGFuX25vdGlmaWVyX2Jsb2NrKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjdnRhcC5jIGIvZHJpdmVycy9uZXQvbWFjdnRhcC5jCmluZGV4IGE4YTk0ZTIuLjNiMWM1NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY3Z0YXAuYworKysgYi9kcml2ZXJzL25ldC9tYWN2dGFwLmMKQEAgLTU4LDcgKzU4LDcgQEAKICAqIG9ubHkgaGFzIG9uZSB0YXAsIHRoZSBpbnRlcmZhY2UgbnVtYmVycyBhc3N1cmUgdGhhdCB0aGUKICAqIGRldmljZSBub2RlcyBhcmUgdW5pcXVlLgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IG1hY3Z0YXBfbWFqb3I7CitzdGF0aWMgZGV2X3QgbWFjdnRhcF9tYWpvcjsKICNkZWZpbmUgTUFDVlRBUF9OVU1fREVWUyA2NTUzNgogc3RhdGljIHN0cnVjdCBjbGFzcyAqbWFjdnRhcF9jbGFzczsKIHN0YXRpYyBzdHJ1Y3QgY2RldiBtYWN2dGFwX2NkZXY7CkBAIC0xODAsMTEgKzE4MCwxOCBAQAogewogCXN0cnVjdCBtYWN2dGFwX3F1ZXVlICpxID0gbWFjdnRhcF9nZXRfcXVldWUoZGV2LCBza2IpOwogCWlmICghcSkKLQkJcmV0dXJuIC1FTk9MSU5LOworCQlnb3RvIGRyb3A7CisKKwlpZiAoc2tiX3F1ZXVlX2xlbigmcS0+c2suc2tfcmVjZWl2ZV9xdWV1ZSkgPj0gZGV2LT50eF9xdWV1ZV9sZW4pCisJCWdvdG8gZHJvcDsKIAogCXNrYl9xdWV1ZV90YWlsKCZxLT5zay5za19yZWNlaXZlX3F1ZXVlLCBza2IpOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKHNrX3NsZWVwKCZxLT5zayksIFBPTExJTiB8IFBPTExSRE5PUk0gfCBQT0xMUkRCQU5EKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7CisKK2Ryb3A6CisJa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIE5FVF9SWF9EUk9QOwogfQogCiAvKgpAQCAtMjM1LDggKzI0MiwxNSBAQAogCW1hY3ZsYW5fZGVsbGluayhkZXYsIGhlYWQpOwogfQogCitzdGF0aWMgdm9pZCBtYWN2dGFwX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJbWFjdmxhbl9jb21tb25fc2V0dXAoZGV2KTsKKwlkZXYtPnR4X3F1ZXVlX2xlbiA9IFRVTl9SRUFEUV9TSVpFOworfQorCiBzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgbWFjdnRhcF9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0gewogCS5raW5kCQk9ICJtYWN2dGFwIiwKKwkuc2V0dXAJCT0gbWFjdnRhcF9zZXR1cCwKIAkubmV3bGluawk9IG1hY3Z0YXBfbmV3bGluaywKIAkuZGVsbGluawk9IG1hY3Z0YXBfZGVsbGluaywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2NhdGFzLmMgYi9kcml2ZXJzL25ldC9tbHg0L2NhdGFzLmMKaW5kZXggZjU5OTI5NC4uNjhhYWE0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9jYXRhcy5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvY2F0YXMuYwpAQCAtMTAxLDggKzEwMSw4IEBACiAJCXJldCA9IG1seDRfcmVzdGFydF9vbmUocHJpdi0+ZGV2LnBkZXYpOwogCQkvKiAncHJpdicgbm93IGlzIG5vdCB2YWxpZCAqLwogCQlpZiAocmV0KQotCQkJcHJpbnRrKEtFUk5fRVJSICJtbHg0ICVzOiBSZXNldCBmYWlsZWQgKCVkKVxuIiwKLQkJCQlwY2lfbmFtZShwZGV2KSwgcmV0KTsKKwkJCXByX2VycigibWx4NCAlczogUmVzZXQgZmFpbGVkICglZClcbiIsCisJCQkgICAgICAgcGNpX25hbWUocGRldiksIHJldCk7CiAJCWVsc2UgewogCQkJZGV2ICA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAkJCW1seDRfZGJnKGRldiwgIlJlc2V0IHN1Y2NlZWRlZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2VuX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L21seDQvZW5fZXRodG9vbC5jCmluZGV4IGQ1YWZkMDMuLmIyNzUyMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZW5fZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvZW5fZXRodG9vbC5jCkBAIC0zODcsNiArMzg3LDQyIEBACiAJcGFyYW0tPnR4X3BlbmRpbmcgPSBtZGV2LT5wcm9maWxlLnByb2ZbcHJpdi0+cG9ydF0udHhfcmluZ19zaXplOwogfQogCitzdGF0aWMgaW50IG1seDRfZXRodG9vbF9vcF9zZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCit7CisJc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKKwlpbnQgcmMgPSAwOworCWludCBjaGFuZ2VkID0gMDsKKworCWlmIChkYXRhICYgfkVUSF9GTEFHX0xSTykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKGRhdGEgJiBFVEhfRkxBR19MUk8pIHsKKwkJaWYgKG1kZXYtPnByb2ZpbGUubnVtX2xybyA9PSAwKQorCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQlpZiAoIShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pKQorCQkJY2hhbmdlZCA9IDE7CisJfSBlbHNlIGlmIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pIHsKKwkJY2hhbmdlZCA9IDE7CisJfQorCisJaWYgKGNoYW5nZWQpIHsKKwkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQkJbXV0ZXhfbG9jaygmbWRldi0+c3RhdGVfbG9jayk7CisJCQltbHg0X2VuX3N0b3BfcG9ydChkZXYpOworCQl9CisJCWRldi0+ZmVhdHVyZXMgXj0gTkVUSUZfRl9MUk87CisJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJCXJjID0gbWx4NF9lbl9zdGFydF9wb3J0KGRldik7CisJCQlpZiAocmMpCisJCQkJZW5fZXJyKHByaXYsICJGYWlsZWQgdG8gcmVzdGFydCBwb3J0XG4iKTsKKwkJCW11dGV4X3VubG9jaygmbWRldi0+c3RhdGVfbG9jayk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtbHg0X2VuX2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbyA9IG1seDRfZW5fZ2V0X2RydmluZm8sCiAJLmdldF9zZXR0aW5ncyA9IG1seDRfZW5fZ2V0X3NldHRpbmdzLApAQCAtNDE1LDcgKzQ1MSw3IEBACiAJLmdldF9yaW5ncGFyYW0gPSBtbHg0X2VuX2dldF9yaW5ncGFyYW0sCiAJLnNldF9yaW5ncGFyYW0gPSBtbHg0X2VuX3NldF9yaW5ncGFyYW0sCiAJLmdldF9mbGFncyA9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAotCS5zZXRfZmxhZ3MgPSBldGh0b29sX29wX3NldF9mbGFncywKKwkuc2V0X2ZsYWdzID0gbWx4NF9ldGh0b29sX29wX3NldF9mbGFncywKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9lbl9tYWluLmMgYi9kcml2ZXJzL25ldC9tbHg0L2VuX21haW4uYwppbmRleCBjYmFiZjE0Li45NzkzNGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L2VuX21haW4uYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2VuX21haW4uYwpAQCAtNzksNiArNzksMjkgQEAKIE1MWDRfRU5fUEFSTV9JTlQocGZjcngsIDAsICJQcmlvcml0eSBiYXNlZCBGbG93IENvbnRyb2wgcG9saWN5IG9uIFJYWzc6MF0uIgogCQkJICAgIiBQZXIgcHJpb3JpdHkgYml0IG1hc2siKTsKIAoraW50IGVuX3ByaW50KGNvbnN0IGNoYXIgKmxldmVsLCBjb25zdCBzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2LAorCSAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCXN0cnVjdCB2YV9mb3JtYXQgdmFmOworCWludCBpOworCisJdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKworCXZhZi5mbXQgPSBmb3JtYXQ7CisJdmFmLnZhID0gJmFyZ3M7CisJaWYgKHByaXYtPnJlZ2lzdGVyZWQpCisJCWkgPSBwcmludGsoIiVzJXM6ICVzOiAlcFYiLAorCQkJICAgbGV2ZWwsIERSVl9OQU1FLCBwcml2LT5kZXYtPm5hbWUsICZ2YWYpOworCWVsc2UKKwkJaSA9IHByaW50aygiJXMlczogJXM6IFBvcnQgJWQ6ICVwViIsCisJCQkgICBsZXZlbCwgRFJWX05BTUUsIGRldl9uYW1lKCZwcml2LT5tZGV2LT5wZGV2LT5kZXYpLAorCQkJICAgcHJpdi0+cG9ydCwgJnZhZik7CisJdmFfZW5kKGFyZ3MpOworCisJcmV0dXJuIGk7Cit9CisKIHN0YXRpYyBpbnQgbWx4NF9lbl9nZXRfcHJvZmlsZShzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYpCiB7CiAJc3RydWN0IG1seDRfZW5fcHJvZmlsZSAqcGFyYW1zID0gJm1kZXYtPnByb2ZpbGU7CkBAIC0xNTIsMTUgKzE3NSwxMSBAQAogCiBzdGF0aWMgdm9pZCAqbWx4NF9lbl9hZGQoc3RydWN0IG1seDRfZGV2ICpkZXYpCiB7Ci0Jc3RhdGljIGludCBtbHg0X2VuX3ZlcnNpb25fcHJpbnRlZDsKIAlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXY7CiAJaW50IGk7CiAJaW50IGVycjsKIAotCWlmICghbWx4NF9lbl92ZXJzaW9uX3ByaW50ZWQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMiLCBtbHg0X2VuX3ZlcnNpb24pOwotCQltbHg0X2VuX3ZlcnNpb25fcHJpbnRlZCsrOwotCX0KKwlwcmludGtfb25jZShLRVJOX0lORk8gIiVzIiwgbWx4NF9lbl92ZXJzaW9uKTsKIAogCW1kZXYgPSBremFsbG9jKHNpemVvZiAqbWRldiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtZGV2KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2VuX25ldGRldi5jIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9uZXRkZXYuYwppbmRleCA5NjE4MGMwLi5hMGQ4YTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L2VuX25ldGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvZW5fbmV0ZGV2LmMKQEAgLTk2MSw2ICs5NjEsNyBAQAogCX0KIAogCVNFVF9ORVRERVZfREVWKGRldiwgJm1kZXYtPmRldi0+cGRldi0+ZGV2KTsKKwlkZXYtPmRldl9pZCA9ICBwb3J0IC0gMTsKIAogCS8qCiAJICogSW5pdGlhbGl6ZSBkcml2ZXIgcHJpdmF0ZSBkYXRhCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2VxLmMgYi9kcml2ZXJzL25ldC9tbHg0L2VxLmMKaW5kZXggNDIzMDUzNC4uNmQ3YjJiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9lcS5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvZXEuYwpAQCAtMTEwLDcgKzExMCw3IEBACiAJCXUzMgkJcmF3WzZdOwogCQlzdHJ1Y3QgewogCQkJX19iZTMyCWNxbjsKLQkJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBjb21wOworCQl9IF9fcGFja2VkIGNvbXA7CiAJCXN0cnVjdCB7CiAJCQl1MTYJcmVzZXJ2ZWQxOwogCQkJX19iZTE2CXRva2VuOwpAQCAtMTE4LDI3ICsxMTgsMjcgQEAKIAkJCXU4CXJlc2VydmVkM1szXTsKIAkJCXU4CXN0YXR1czsKIAkJCV9fYmU2NAlvdXRfcGFyYW07Ci0JCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgY21kOworCQl9IF9fcGFja2VkIGNtZDsKIAkJc3RydWN0IHsKIAkJCV9fYmUzMglxcG47Ci0JCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgcXA7CisJCX0gX19wYWNrZWQgcXA7CiAJCXN0cnVjdCB7CiAJCQlfX2JlMzIJc3JxbjsKLQkJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzcnE7CisJCX0gX19wYWNrZWQgc3JxOwogCQlzdHJ1Y3QgewogCQkJX19iZTMyCWNxbjsKIAkJCXUzMglyZXNlcnZlZDE7CiAJCQl1OAlyZXNlcnZlZDJbM107CiAJCQl1OAlzeW5kcm9tZTsKLQkJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBjcV9lcnI7CisJCX0gX19wYWNrZWQgY3FfZXJyOwogCQlzdHJ1Y3QgewogCQkJdTMyCXJlc2VydmVkMVsyXTsKIAkJCV9fYmUzMglwb3J0OwotCQl9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHBvcnRfY2hhbmdlOworCQl9IF9fcGFja2VkIHBvcnRfY2hhbmdlOwogCX0JCQlldmVudDsKIAl1OAkJCXJlc2VydmVkM1szXTsKIAl1OAkJCW93bmVyOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0YXRpYyB2b2lkIGVxX3NldF9jaShzdHJ1Y3QgbWx4NF9lcSAqZXEsIGludCByZXFfbm90KQogewpAQCAtNDc1LDEwICs0NzUsMTAgQEAKIAkJbWx4NF9kYmcoZGV2LCAiRHVtcGluZyBFUSBjb250ZXh0ICUwMng6XG4iLCBlcS0+ZXFuKTsKIAkJZm9yIChpID0gMDsgaSA8IHNpemVvZiAoc3RydWN0IG1seDRfZXFfY29udGV4dCkgLyA0OyArK2kpIHsKIAkJCWlmIChpICUgNCA9PSAwKQotCQkJCXByaW50aygiWyUwMnhdICIsIGkgKiA0KTsKLQkJCXByaW50aygiICUwOHgiLCBiZTMyX3RvX2NwdXAobWFpbGJveC0+YnVmICsgaSAqIDQpKTsKKwkJCQlwcl9jb250KCJbJTAyeF0gIiwgaSAqIDQpOworCQkJcHJfY29udCgiICUwOHgiLCBiZTMyX3RvX2NwdXAobWFpbGJveC0+YnVmICsgaSAqIDQpKTsKIAkJCWlmICgoaSArIDEpICUgNCA9PSAwKQotCQkJCXByaW50aygiXG4iKTsKKwkJCQlwcl9jb250KCJcbiIpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L21haW4uYyBiL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCmluZGV4IGUzZTBkNTQuLjUxMDJhYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCkBAIC0xMDUwLDggKzEwNTAsNyBAQAogCWludCBlcnI7CiAJaW50IHBvcnQ7CiAKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiSW5pdGlhbGl6aW5nICVzXG4iLAotCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJcHJfaW5mbyhEUlZfTkFNRSAiOiBJbml0aWFsaXppbmcgJXNcbiIsIHBjaV9uYW1lKHBkZXYpKTsKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChlcnIpIHsKQEAgLTEyMTYsMTIgKzEyMTUsNyBAQAogc3RhdGljIGludCBfX2RldmluaXQgbWx4NF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7Ci0Jc3RhdGljIGludCBtbHg0X3ZlcnNpb25fcHJpbnRlZDsKLQotCWlmICghbWx4NF92ZXJzaW9uX3ByaW50ZWQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMiLCBtbHg0X3ZlcnNpb24pOwotCQkrK21seDRfdmVyc2lvbl9wcmludGVkOwotCX0KKwlwcmludGtfb25jZShLRVJOX0lORk8gIiVzIiwgbWx4NF92ZXJzaW9uKTsKIAogCXJldHVybiBfX21seDRfaW5pdF9vbmUocGRldiwgaWQpOwogfQpAQCAtMTMwMSwxNyArMTI5NSwxNyBAQAogc3RhdGljIGludCBfX2luaXQgbWx4NF92ZXJpZnlfcGFyYW1zKHZvaWQpCiB7CiAJaWYgKChsb2dfbnVtX21hYyA8IDApIHx8IChsb2dfbnVtX21hYyA+IDcpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIm1seDRfY29yZTogYmFkIG51bV9tYWM6ICVkXG4iLCBsb2dfbnVtX21hYyk7CisJCXByX3dhcm5pbmcoIm1seDRfY29yZTogYmFkIG51bV9tYWM6ICVkXG4iLCBsb2dfbnVtX21hYyk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlpZiAoKGxvZ19udW1fdmxhbiA8IDApIHx8IChsb2dfbnVtX3ZsYW4gPiA3KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJtbHg0X2NvcmU6IGJhZCBudW1fdmxhbjogJWRcbiIsIGxvZ19udW1fdmxhbik7CisJCXByX3dhcm5pbmcoIm1seDRfY29yZTogYmFkIG51bV92bGFuOiAlZFxuIiwgbG9nX251bV92bGFuKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCWlmICgobG9nX210dHNfcGVyX3NlZyA8IDEpIHx8IChsb2dfbXR0c19wZXJfc2VnID4gNSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAibWx4NF9jb3JlOiBiYWQgbG9nX210dHNfcGVyX3NlZzogJWRcbiIsIGxvZ19tdHRzX3Blcl9zZWcpOworCQlwcl93YXJuaW5nKCJtbHg0X2NvcmU6IGJhZCBsb2dfbXR0c19wZXJfc2VnOiAlZFxuIiwgbG9nX210dHNfcGVyX3NlZyk7CiAJCXJldHVybiAtMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvbWx4NC5oIGIvZHJpdmVycy9uZXQvbWx4NC9tbHg0LmgKaW5kZXggMTMzNDNlOC4uMGRhNWJiNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvbWx4NC5oCisrKyBiL2RyaXZlcnMvbmV0L21seDQvbWx4NC5oCkBAIC00OCw3ICs0OCw2IEBACiAjaW5jbHVkZSA8bGludXgvbWx4NC9kb29yYmVsbC5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJtbHg0X2NvcmUiCi0jZGVmaW5lIFBGWAkJRFJWX05BTUUgIjogIgogI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4wMSIKICNkZWZpbmUgRFJWX1JFTERBVEUJIk1heSAxLCAyMDA3IgogCkBAIC04OCwxNyArODcsMTcgQEAKICNlbmRpZiAvKiBDT05GSUdfTUxYNF9ERUJVRyAqLwogCiAjZGVmaW5lIG1seDRfZGJnKG1kZXYsIGZvcm1hdCwgYXJnLi4uKQkJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJaWYgKG1seDRfZGVidWdfbGV2ZWwpCQkJCQlcCi0JCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZtZGV2LT5wZGV2LT5kZXYsIGZvcm1hdCwgIyMgYXJnKTsgXAotCX0gd2hpbGUgKDApCitkbyB7CQkJCQkJCQkJXAorCWlmIChtbHg0X2RlYnVnX2xldmVsKQkJCQkJCVwKKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmbWRldi0+cGRldi0+ZGV2LCBmb3JtYXQsICMjYXJnKTsgXAorfSB3aGlsZSAoMCkKIAogI2RlZmluZSBtbHg0X2VycihtZGV2LCBmb3JtYXQsIGFyZy4uLikgXAotCWRldl9lcnIoJm1kZXYtPnBkZXYtPmRldiwgZm9ybWF0LCAjIyBhcmcpCisJZGV2X2VycigmbWRldi0+cGRldi0+ZGV2LCBmb3JtYXQsICMjYXJnKQogI2RlZmluZSBtbHg0X2luZm8obWRldiwgZm9ybWF0LCBhcmcuLi4pIFwKLQlkZXZfaW5mbygmbWRldi0+cGRldi0+ZGV2LCBmb3JtYXQsICMjIGFyZykKKwlkZXZfaW5mbygmbWRldi0+cGRldi0+ZGV2LCBmb3JtYXQsICMjYXJnKQogI2RlZmluZSBtbHg0X3dhcm4obWRldiwgZm9ybWF0LCBhcmcuLi4pIFwKLQlkZXZfd2FybigmbWRldi0+cGRldi0+ZGV2LCBmb3JtYXQsICMjIGFyZykKKwlkZXZfd2FybigmbWRldi0+cGRldi0+ZGV2LCBmb3JtYXQsICMjYXJnKQogCiBzdHJ1Y3QgbWx4NF9iaXRtYXAgewogCXUzMgkJCWxhc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L21seDRfZW4uaCBiL2RyaXZlcnMvbmV0L21seDQvbWx4NF9lbi5oCmluZGV4IGI1NWU0NmMuLjQ0OTIxMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvbWx4NF9lbi5oCisrKyBiL2RyaXZlcnMvbmV0L21seDQvbWx4NF9lbi5oCkBAIC01Miw0MCArNTIsOCBAQAogI2RlZmluZSBEUlZfVkVSU0lPTgkiMS40LjEuMSIKICNkZWZpbmUgRFJWX1JFTERBVEUJIkp1bmUgMjAwOSIKIAotCiAjZGVmaW5lIE1MWDRfRU5fTVNHX0xFVkVMCShORVRJRl9NU0dfTElOSyB8IE5FVElGX01TR19JRkRPV04pCiAKLSNkZWZpbmUgZW5fcHJpbnQobGV2ZWwsIHByaXYsIGZvcm1hdCwgYXJnLi4uKQkJCVwKLQl7CQkJCQkJCVwKLQlpZiAoKHByaXYpLT5yZWdpc3RlcmVkKQkJCQkJXAotCQlwcmludGsobGV2ZWwgIiVzOiAlczogIiBmb3JtYXQsIERSVl9OQU1FLAlcCi0JCQkocHJpdi0+ZGV2KS0+bmFtZSwgIyMgYXJnKTsJCVwKLQllbHNlCQkJCQkJCVwKLQkJcHJpbnRrKGxldmVsICIlczogJXM6IFBvcnQgJWQ6ICIgZm9ybWF0LAlcCi0JCQlEUlZfTkFNRSwgZGV2X25hbWUoJnByaXYtPm1kZXYtPnBkZXYtPmRldiksIFwKLQkJCShwcml2KS0+cG9ydCwgIyMgYXJnKTsJCQlcCi0JfQotCi0jZGVmaW5lIGVuX2RiZyhtbGV2ZWwsIHByaXYsIGZvcm1hdCwgYXJnLi4uKQkJCVwKLQl7CQkJCQkJCVwKLQlpZiAoTkVUSUZfTVNHXyMjbWxldmVsICYgcHJpdi0+bXNnX2VuYWJsZSkJCVwKLQkJZW5fcHJpbnQoS0VSTl9ERUJVRywgcHJpdiwgZm9ybWF0LCAjIyBhcmcpCVwKLQl9Ci0jZGVmaW5lIGVuX3dhcm4ocHJpdiwgZm9ybWF0LCBhcmcuLi4pCQkJCVwKLQllbl9wcmludChLRVJOX1dBUk5JTkcsIHByaXYsIGZvcm1hdCwgIyMgYXJnKQotI2RlZmluZSBlbl9lcnIocHJpdiwgZm9ybWF0LCBhcmcuLi4pCQkJCVwKLQllbl9wcmludChLRVJOX0VSUiwgcHJpdiwgZm9ybWF0LCAjIyBhcmcpCi0KLSNkZWZpbmUgbWx4NF9lcnIobWRldiwgZm9ybWF0LCBhcmcuLi4pIFwKLQlwcmludGsoS0VSTl9FUlIgIiVzICVzOiAiIGZvcm1hdCAsIERSVl9OQU1FICxcCi0JCWRldl9uYW1lKCZtZGV2LT5wZGV2LT5kZXYpICwgIyMgYXJnKQotI2RlZmluZSBtbHg0X2luZm8obWRldiwgZm9ybWF0LCBhcmcuLi4pIFwKLQlwcmludGsoS0VSTl9JTkZPICIlcyAlczogIiBmb3JtYXQgLCBEUlZfTkFNRSAsXAotCQlkZXZfbmFtZSgmbWRldi0+cGRldi0+ZGV2KSAsICMjIGFyZykKLSNkZWZpbmUgbWx4NF93YXJuKG1kZXYsIGZvcm1hdCwgYXJnLi4uKSBcCi0JcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgJXM6ICIgZm9ybWF0ICwgRFJWX05BTUUgLFwKLQkJZGV2X25hbWUoJm1kZXYtPnBkZXYtPmRldikgLCAjIyBhcmcpCi0KIC8qCiAgKiBEZXZpY2UgY29uc3RhbnRzCiAgKi8KQEAgLTU2OCw0ICs1MzYsMzQgQEAKICAqIEdsb2JhbHMKICAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtbHg0X2VuX2V0aHRvb2xfb3BzOworCisKKworLyoKKyAqIHByaW50ayAvIGxvZ2dpbmcgZnVuY3Rpb25zCisgKi8KKworaW50IGVuX3ByaW50KGNvbnN0IGNoYXIgKmxldmVsLCBjb25zdCBzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2LAorCSAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKTsKKworI2RlZmluZSBlbl9kYmcobWxldmVsLCBwcml2LCBmb3JtYXQsIGFyZy4uLikJCQlcCitkbyB7CQkJCQkJCQlcCisJaWYgKE5FVElGX01TR18jI21sZXZlbCAmIHByaXYtPm1zZ19lbmFibGUpCQlcCisJCWVuX3ByaW50KEtFUk5fREVCVUcsIHByaXYsIGZvcm1hdCwgIyNhcmcpOwlcCit9IHdoaWxlICgwKQorI2RlZmluZSBlbl93YXJuKHByaXYsIGZvcm1hdCwgYXJnLi4uKQkJCVwKKwllbl9wcmludChLRVJOX1dBUk5JTkcsIHByaXYsIGZvcm1hdCwgIyNhcmcpCisjZGVmaW5lIGVuX2Vycihwcml2LCBmb3JtYXQsIGFyZy4uLikJCQlcCisJZW5fcHJpbnQoS0VSTl9FUlIsIHByaXYsIGZvcm1hdCwgIyNhcmcpCisKKyNkZWZpbmUgbWx4NF9lcnIobWRldiwgZm9ybWF0LCBhcmcuLi4pCQkJXAorCXByX2VycigiJXMgJXM6ICIgZm9ybWF0LCBEUlZfTkFNRSwJCVwKKwkgICAgICAgZGV2X25hbWUoJm1kZXYtPnBkZXYtPmRldiksICMjYXJnKQorI2RlZmluZSBtbHg0X2luZm8obWRldiwgZm9ybWF0LCBhcmcuLi4pCQkJXAorCXByX2luZm8oIiVzICVzOiAiIGZvcm1hdCwgRFJWX05BTUUsCQlcCisJCWRldl9uYW1lKCZtZGV2LT5wZGV2LT5kZXYpLCAjI2FyZykKKyNkZWZpbmUgbWx4NF93YXJuKG1kZXYsIGZvcm1hdCwgYXJnLi4uKQkJCVwKKwlwcl93YXJuaW5nKCIlcyAlczogIiBmb3JtYXQsIERSVl9OQU1FLAkJXAorCQkgICBkZXZfbmFtZSgmbWRldi0+cGRldi0+ZGV2KSwgIyNhcmcpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9tci5jIGIvZHJpdmVycy9uZXQvbWx4NC9tci5jCmluZGV4IDNkYzY5YmUuLjljMTg4YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvbXIuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L21yLmMKQEAgLTU4LDcgKzU4LDcgQEAKIAlfX2JlMzIgbXR0X3N6OwogCV9fYmUzMiBlbnRpdHlfc2l6ZTsKIAlfX2JlMzIgZmlyc3RfYnl0ZV9vZmZzZXQ7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBNTFg0X01QVF9GTEFHX1NXX09XTlMJICAgICgweGZVTCA8PCAyOCkKICNkZWZpbmUgTUxYNF9NUFRfRkxBR19GUkVFCSAgICAoMHgzVUwgPDwgMjgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jIGIvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYwppbmRleCA3M2JiOGVhNi4uMmQ0ODhhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYworKysgYi9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCkBAIC0xNjQwLDYgKzE2NDAsMTEgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgbXY2NDN4eF9ldGhfc2V0X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQoreworCXJldHVybiBldGh0b29sX29wX3NldF9mbGFncyhkZXYsIGRhdGEsIEVUSF9GTEFHX0xSTyk7Cit9CisKIHN0YXRpYyBpbnQgbXY2NDN4eF9ldGhfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNzZXQpCiB7CiAJaWYgKHNzZXQgPT0gRVRIX1NTX1NUQVRTKQpAQCAtMTY2NSw3ICsxNjcwLDcgQEAKIAkuZ2V0X3N0cmluZ3MJCT0gbXY2NDN4eF9ldGhfZ2V0X3N0cmluZ3MsCiAJLmdldF9ldGh0b29sX3N0YXRzCT0gbXY2NDN4eF9ldGhfZ2V0X2V0aHRvb2xfc3RhdHMsCiAJLmdldF9mbGFncwkJPSBldGh0b29sX29wX2dldF9mbGFncywKLQkuc2V0X2ZsYWdzCQk9IGV0aHRvb2xfb3Bfc2V0X2ZsYWdzLAorCS5zZXRfZmxhZ3MJCT0gbXY2NDN4eF9ldGhfc2V0X2ZsYWdzLAogCS5nZXRfc3NldF9jb3VudAkJPSBtdjY0M3h4X2V0aF9nZXRfc3NldF9jb3VudCwKIH07CiAKQEAgLTI0NTYsNyArMjQ2MSw3IEBACiAJc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCWlmIChtcC0+cGh5ICE9IE5VTEwpCi0JCXJldHVybiBwaHlfbWlpX2lvY3RsKG1wLT5waHksIGlmX21paShpZnIpLCBjbWQpOworCQlyZXR1cm4gcGh5X21paV9pb2N0bChtcC0+cGh5LCBpZnIsIGNtZCk7CiAKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CkBAIC0yNjcwLDcgKzI2NzUsOCBAQAogCSAqIERldGVjdCBoYXJkd2FyZSBwYXJhbWV0ZXJzLgogCSAqLwogCW1zcC0+dF9jbGsgPSAocGQgIT0gTlVMTCAmJiBwZC0+dF9jbGsgIT0gMCkgPyBwZC0+dF9jbGsgOiAxMzMwMDAwMDA7Ci0JbXNwLT50eF9jc3VtX2xpbWl0ID0gcGQtPnR4X2NzdW1fbGltaXQgPyBwZC0+dHhfY3N1bV9saW1pdCA6IDkgKiAxMDI0OworCW1zcC0+dHhfY3N1bV9saW1pdCA9IChwZCAhPSBOVUxMICYmIHBkLT50eF9jc3VtX2xpbWl0KSA/CisJCQkJCXBkLT50eF9jc3VtX2xpbWl0IDogOSAqIDEwMjQ7CiAJaW5mZXJfaHdfcGFyYW1zKG1zcCk7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtc3ApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYyBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKaW5kZXggZTBiNDdjYy4uZDc3MWQxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYworKysgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCkBAIC0xNzMwLDggKzE3MzAsNyBAQAogCWlmIChjc3VtX2VuYWJsZWQpCiAJCW1ncC0+Y3N1bV9mbGFnID0gTVhHRUZXX0ZMQUdTX0NLU1VNOwogCWVsc2UgewotCQl1MzIgZmxhZ3MgPSBldGh0b29sX29wX2dldF9mbGFncyhuZXRkZXYpOwotCQllcnIgPSBldGh0b29sX29wX3NldF9mbGFncyhuZXRkZXYsIChmbGFncyAmIH5FVEhfRkxBR19MUk8pKTsKKwkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9MUk87CiAJCW1ncC0+Y3N1bV9mbGFnID0gMDsKIAogCX0KQEAgLTE5MDAsNiArMTg5OSwxMSBAQAogCXJldHVybiBtZ3AtPm1zZ19lbmFibGU7CiB9CiAKK3N0YXRpYyBpbnQgbXlyaTEwZ2Vfc2V0X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiB2YWx1ZSkKK3sKKwlyZXR1cm4gZXRodG9vbF9vcF9zZXRfZmxhZ3MobmV0ZGV2LCB2YWx1ZSwgRVRIX0ZMQUdfTFJPKTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBteXJpMTBnZV9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzID0gbXlyaTEwZ2VfZ2V0X3NldHRpbmdzLAogCS5nZXRfZHJ2aW5mbyA9IG15cmkxMGdlX2dldF9kcnZpbmZvLApAQCAtMTkyMCw3ICsxOTI0LDcgQEAKIAkuc2V0X21zZ2xldmVsID0gbXlyaTEwZ2Vfc2V0X21zZ2xldmVsLAogCS5nZXRfbXNnbGV2ZWwgPSBteXJpMTBnZV9nZXRfbXNnbGV2ZWwsCiAJLmdldF9mbGFncyA9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAotCS5zZXRfZmxhZ3MgPSBldGh0b29sX29wX3NldF9mbGFncworCS5zZXRfZmxhZ3MgPSBteXJpMTBnZV9zZXRfZmxhZ3MKIH07CiAKIHN0YXRpYyBpbnQgbXlyaTEwZ2VfYWxsb2NhdGVfcmluZ3Moc3RydWN0IG15cmkxMGdlX3NsaWNlX3N0YXRlICpzcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L215cmlfc2J1cy5jIGIvZHJpdmVycy9uZXQvbXlyaV9zYnVzLmMKaW5kZXggMWE1N2MzZC4uMDRlNTUyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXlyaV9zYnVzLmMKKysrIGIvZHJpdmVycy9uZXQvbXlyaV9zYnVzLmMKQEAgLTEwNzksNyArMTA3OSw3IEBACiAKIAltcC0+ZGV2ID0gZGV2OwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSA1KkhaOwotCWRldi0+aXJxID0gb3AtPmlycXNbMF07CisJZGV2LT5pcnEgPSBvcC0+YXJjaGRhdGEuaXJxc1swXTsKIAlkZXYtPm5ldGRldl9vcHMgPSAmbXlyaV9vcHM7CiAKIAkvKiBSZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlciBub3cuICovCkBAIC0xMTcyLDEyICsxMTcyLDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG15cmlfc2J1c19pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIG9mX3JlZ2lzdGVyX2RyaXZlcigmbXlyaV9zYnVzX2RyaXZlciwgJm9mX2J1c190eXBlKTsKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZteXJpX3NidXNfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG15cmlfc2J1c19leGl0KHZvaWQpCiB7Ci0Jb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoJm15cmlfc2J1c19kcml2ZXIpOworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZteXJpX3NidXNfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQobXlyaV9zYnVzX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmF0c2VtaS5jIGIvZHJpdmVycy9uZXQvbmF0c2VtaS5jCmluZGV4IDJhMTdiNTAuLmE2MDMzZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25hdHNlbWkuYworKysgYi9kcml2ZXJzL25ldC9uYXRzZW1pLmMKQEAgLTU0OCw3ICs1NDgsNiBAQAogCWRtYV9hZGRyX3QgdHhfZG1hW1RYX1JJTkdfU0laRV07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAkvKiBNZWRpYSBtb25pdG9yaW5nIHRpbWVyICovCiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiAJLyogRnJlcXVlbnRseSB1c2VkIHZhbHVlczoga2VlcCBzb21lIGFkamFjZW50IGZvciBjYWNoZSBlZmZlY3QgKi8KQEAgLTE5MDYsNyArMTkwNSw3IEBACiAJZW5hYmxlX2lycShkZXYtPmlycSk7CiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsgLyogcHJldmVudCB0eCB0aW1lb3V0ICovCi0JbnAtPnN0YXRzLnR4X2Vycm9ycysrOworCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQogCkBAIC0yMDA5LDcgKzIwMDgsNyBAQAogCQkJCW5wLT50eF9kbWFbaV0sIG5wLT50eF9za2J1ZmZbaV0tPmxlbiwKIAkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKIAkJCWRldl9rZnJlZV9za2IobnAtPnR4X3NrYnVmZltpXSk7Ci0JCQlucC0+c3RhdHMudHhfZHJvcHBlZCsrOworCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCX0KIAkJbnAtPnR4X3NrYnVmZltpXSA9IE5VTEw7CiAJfQpAQCAtMjExNSw3ICsyMTE0LDcgQEAKIAkJd3JpdGVsKFR4T24sIGlvYWRkciArIENoaXBDbWQpOwogCX0gZWxzZSB7CiAJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci0JCW5wLT5zdGF0cy50eF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZucC0+bG9jaywgZmxhZ3MpOwogCkBAIC0yMTQwLDIwICsyMTM5LDIwIEBACiAJCQkJCWRldi0+bmFtZSwgbnAtPmRpcnR5X3R4LAogCQkJCQlsZTMyX3RvX2NwdShucC0+dHhfcmluZ1tlbnRyeV0uY21kX3N0YXR1cykpOwogCQlpZiAobnAtPnR4X3JpbmdbZW50cnldLmNtZF9zdGF0dXMgJiBjcHVfdG9fbGUzMihEZXNjUGt0T0spKSB7Ci0JCQlucC0+c3RhdHMudHhfcGFja2V0cysrOwotCQkJbnAtPnN0YXRzLnR4X2J5dGVzICs9IG5wLT50eF9za2J1ZmZbZW50cnldLT5sZW47CisJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gbnAtPnR4X3NrYnVmZltlbnRyeV0tPmxlbjsKIAkJfSBlbHNlIHsgLyogVmFyaW91cyBUeCBlcnJvcnMgKi8KIAkJCWludCB0eF9zdGF0dXMgPQogCQkJCWxlMzJfdG9fY3B1KG5wLT50eF9yaW5nW2VudHJ5XS5jbWRfc3RhdHVzKTsKIAkJCWlmICh0eF9zdGF0dXMgJiAoRGVzY1R4QWJvcnR8RGVzY1R4RXhjQ29sbCkpCi0JCQkJbnAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCQkJaWYgKHR4X3N0YXR1cyAmIERlc2NUeEZJRk8pCi0JCQkJbnAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCQkJaWYgKHR4X3N0YXR1cyAmIERlc2NUeENhcnJpZXIpCi0JCQkJbnAtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCQkJaWYgKHR4X3N0YXR1cyAmIERlc2NUeE9PV0NvbCkKLQkJCQlucC0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOwotCQkJbnAtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJfQogCQlwY2lfdW5tYXBfc2luZ2xlKG5wLT5wY2lfZGV2LG5wLT50eF9kbWFbZW50cnldLAogCQkJCQlucC0+dHhfc2tidWZmW2VudHJ5XS0+bGVuLApAQCAtMjMwMSw3ICsyMzAwLDcgQEAKIAkJCQkJCSJidWZmZXJzLCBlbnRyeSAlIzA4eCAiCiAJCQkJCQkic3RhdHVzICUjMDh4LlxuIiwgZGV2LT5uYW1lLAogCQkJCQkJbnAtPmN1cl9yeCwgZGVzY19zdGF0dXMpOwotCQkJCW5wLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAKIAkJCQkvKiBUaGUgUlggc3RhdGUgbWFjaGluZSBoYXMgcHJvYmFibHkKIAkJCQkgKiBsb2NrZWQgdXAgYmVuZWF0aCB1cy4gIEZvbGxvdyB0aGUKQEAgLTIzMjEsMTUgKzIzMjAsMTUgQEAKIAogCQkJfSBlbHNlIHsKIAkJCQkvKiBUaGVyZSB3YXMgYW4gZXJyb3IuICovCi0JCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJaWYgKGRlc2Nfc3RhdHVzICYgKERlc2NSeEFib3J0fERlc2NSeE92ZXIpKQotCQkJCQlucC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwogCQkJCWlmIChkZXNjX3N0YXR1cyAmIChEZXNjUnhMb25nfERlc2NSeFJ1bnQpKQotCQkJCQlucC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJCQlpZiAoZGVzY19zdGF0dXMgJiAoRGVzY1J4SW52YWxpZHxEZXNjUnhBbGlnbikpCi0JCQkJCW5wLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKIAkJCQlpZiAoZGVzY19zdGF0dXMgJiBEZXNjUnhDUkMpCi0JCQkJCW5wLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogCQkJfQogCQl9IGVsc2UgaWYgKHBrdF9sZW4gPiBucC0+cnhfYnVmX3N6KSB7CiAJCQkvKiBpZiB0aGlzIGlzIHRoZSB0YWlsIG9mIGEgZG91YmxlIGJ1ZmZlcgpAQCAtMjM2NCw4ICsyMzYzLDggQEAKIAkJCX0KIAkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwotCQkJbnAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJCW5wLT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOworCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAJCX0KIAkJZW50cnkgPSAoKytucC0+Y3VyX3J4KSAlIFJYX1JJTkdfU0laRTsKIAkJbnAtPnJ4X2hlYWRfZGVzYyA9ICZucC0+cnhfcmluZ1tlbnRyeV07CkBAIC0yNDI4LDE3ICsyNDI3LDE3IEBACiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBSeCBzdGF0dXMgRklGTyBvdmVycnVuXG4iLAogCQkJCWRldi0+bmFtZSk7CiAJCX0KLQkJbnAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7Ci0JCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCX0KIAkvKiBIbW1tbW0sIGl0J3Mgbm90IGNsZWFyIGhvdyB0byByZWNvdmVyIGZyb20gUENJIGZhdWx0cy4gKi8KIAlpZiAoaW50cl9zdGF0dXMgJiBJbnRyUENJRXJyKSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IFBDSSBlcnJvciAlIzA4eFxuIiwgZGV2LT5uYW1lLAogCQkJaW50cl9zdGF0dXMgJiBJbnRyUENJRXJyKTsKLQkJbnAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7Ci0JCW5wLT5zdGF0cy50eF9lcnJvcnMrKzsKLQkJbnAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7Ci0JCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJfQogCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CiB9CkBAIC0yNDQ2LDExICsyNDQ1LDEwIEBACiBzdGF0aWMgdm9pZCBfX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXZvaWQgX19pb21lbSAqIGlvYWRkciA9IG5zX2lvYWRkcihkZXYpOwotCXN0cnVjdCBuZXRkZXZfcHJpdmF0ZSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyogVGhlIGNoaXAgb25seSBuZWVkIHJlcG9ydCBmcmFtZSBzaWxlbnRseSBkcm9wcGVkLiAqLwotCW5wLT5zdGF0cy5yeF9jcmNfZXJyb3JzCSs9IHJlYWRsKGlvYWRkciArIFJ4Q1JDRXJycyk7Ci0JbnAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gcmVhZGwoaW9hZGRyICsgUnhNaXNzZWQpOworCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycyArPSByZWFkbChpb2FkZHIgKyBSeENSQ0VycnMpOworCWRldi0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycyArPSByZWFkbChpb2FkZHIgKyBSeE1pc3NlZCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0yNDYzLDcgKzI0NjEsNyBAQAogCQlfX2dldF9zdGF0cyhkZXYpOwogCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCi0JcmV0dXJuICZucC0+c3RhdHM7CisJcmV0dXJuICZkZXYtPnN0YXRzOwogfQogCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2N0eC5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfY3R4LmMKaW5kZXggM2E0MWI2YS4uMTI2MTIxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfY3R4LmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfY3R4LmMKQEAgLTI1NSw2ICsyNTUsMTkgQEAKIH0KIAogc3RhdGljIHZvaWQKK254X2Z3X2NtZF9yZXNldF9jdHgoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCisJbmV0eGVuX2lzc3VlX2NtZChhZGFwdGVyLCBhZGFwdGVyLT5haHcucGNpX2Z1bmMsIE5YSEFMX1ZFUlNJT04sCisJCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsIE5YX0RFU1RST1lfQ1RYX1JFU0VULCAwLAorCQkJTlhfQ0RSUF9DTURfREVTVFJPWV9SWF9DVFgpOworCisJbmV0eGVuX2lzc3VlX2NtZChhZGFwdGVyLCBhZGFwdGVyLT5haHcucGNpX2Z1bmMsIE5YSEFMX1ZFUlNJT04sCisJCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsIE5YX0RFU1RST1lfQ1RYX1JFU0VULCAwLAorCQkJTlhfQ0RSUF9DTURfREVTVFJPWV9UWF9DVFgpOworfQorCitzdGF0aWMgdm9pZAogbnhfZndfY21kX2Rlc3Ryb3lfcnhfY3R4KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CkBAIC02ODUsNyArNjk4LDggQEAKIAlpZiAoIU5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpIHsKIAkJaWYgKHRlc3RfYW5kX3NldF9iaXQoX19OWF9GV19BVFRBQ0hFRCwgJmFkYXB0ZXItPnN0YXRlKSkKIAkJCWdvdG8gZG9uZTsKLQorCQlpZiAocmVzZXRfZGV2aWNlcykKKwkJCW54X2Z3X2NtZF9yZXNldF9jdHgoYWRhcHRlcik7CiAJCWVyciA9IG54X2Z3X2NtZF9jcmVhdGVfcnhfY3R4KGFkYXB0ZXIpOwogCQlpZiAoZXJyKQogCQkJZ290byBlcnJfb3V0X2ZyZWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMKaW5kZXggMjBmN2M1OC4uYjMwZGUyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2V0aHRvb2wuYwpAQCAtODg3LDEyICs4ODcsMTkgQEAKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCWludCBod19scm87CiAKKwlpZiAoZGF0YSAmIH5FVEhfRkxBR19MUk8pCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKCEoYWRhcHRlci0+Y2FwYWJpbGl0aWVzICYgTlhfRldfQ0FQQUJJTElUWV9IV19MUk8pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWV0aHRvb2xfb3Bfc2V0X2ZsYWdzKG5ldGRldiwgZGF0YSk7Ci0KLQlod19scm8gPSAoZGF0YSAmIEVUSF9GTEFHX0xSTykgPyBORVRYRU5fTklDX0xST19FTkFCTEVEIDogMDsKKwlpZiAoZGF0YSAmIEVUSF9GTEFHX0xSTykgeworCQlod19scm8gPSBORVRYRU5fTklDX0xST19FTkFCTEVEOworCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOworCX0gZWxzZSB7CisJCWh3X2xybyA9IDA7CisJCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfTFJPOworCX0KIAogCWlmIChuZXR4ZW5fY29uZmlnX2h3X2xybyhhZGFwdGVyLCBod19scm8pKQogCQlyZXR1cm4gLUVJTzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25pNTIuYyBiL2RyaXZlcnMvbmV0L25pNTIuYwppbmRleCA5YmRkYjVmLi4zMzYxOGVkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmk1Mi5jCisrKyBiL2RyaXZlcnMvbmV0L25pNTIuYwpAQCAtMTg1LDcgKzE4NSw2IEBACiBzdGF0aWMgdm9pZCAgICBuaTUyX3Jucl9pbnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIHN0cnVjdCBwcml2IHsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAljaGFyIF9faW9tZW0gKmJhc2U7CiAJY2hhciBfX2lvbWVtICptYXBwZWQ7CiAJY2hhciBfX2lvbWVtICptZW10b3A7CkBAIC05NzIsMTAgKzk3MSwxMCBAQAogCQkJCQltZW1jcHlfZnJvbWlvKHNrYi0+ZGF0YSwgcC0+YmFzZSArIHJlYWRsKCZyYmQtPmJ1ZmZlciksIHRvdGxlbik7CiAJCQkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAJCQkJCW5ldGlmX3J4KHNrYik7Ci0JCQkJCXAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJCQkJcC0+c3RhdHMucnhfYnl0ZXMgKz0gdG90bGVuOworCQkJCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSB0b3RsZW47CiAJCQkJfSBlbHNlCi0JCQkJCXAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQl9IGVsc2UgewogCQkJCWludCByc3RhdDsKIAkJCQkgLyogZnJlZSBhbGwgUkJEJ3MgdW50aWwgUkJEX0xBU1QgaXMgc2V0ICovCkBAIC05OTMsMTIgKzk5MiwxMiBAQAogCQkJCXdyaXRldygwLCAmcmJkLT5zdGF0dXMpOwogCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlY2VpdmVkIG92ZXJzaXplZCBmcmFtZSEgbGVuZ3RoOiAlZFxuIiwKIAkJCQkJZGV2LT5uYW1lLCB0b3RsZW4pOwotCQkJCXAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJCSB9CiAJCX0gZWxzZSB7LyogZnJhbWUgIShvayksIG9ubHkgd2l0aCAnc2F2ZS1iYWQtZnJhbWVzJyAqLwogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogb29wcyEgcmZkLWVycm9yLXN0YXR1czogJTA0eFxuIiwKIAkJCQlkZXYtPm5hbWUsIHN0YXR1cyk7Ci0JCQlwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCX0KIAkJd3JpdGViKDAsICZwLT5yZmRfdG9wLT5zdGF0X2hpZ2gpOwogCQl3cml0ZWIoUkZEX1NVU1AsICZwLT5yZmRfdG9wLT5sYXN0KTsgLyogbWF5YmUgZXhjaGFuZ2UgYnkgUkZEX0xBU1QgKi8KQEAgLTEwNDMsNyArMTA0Miw3IEBACiB7CiAJc3RydWN0IHByaXYgKnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JcC0+c3RhdHMucnhfZXJyb3JzKys7CisJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAogCXdhaXRfZm9yX3NjYl9jbWQoZGV2KTsJCS8qIHdhaXQgZm9yIHRoZSBsYXN0IGNtZCwgV0FJVF80X0ZVTExTVEFUPz8gKi8KIAl3cml0ZWIoUlVDX0FCT1JULCAmcC0+c2NiLT5jbWRfcnVjKTsgLyogdXN1YWxseSB0aGUgUlUgaXMgaW4gdGhlICdubyByZXNvdXJjZSctc3RhdGUgLi4gYWJvcnQgaXQgbm93LiAqLwpAQCAtMTA3NiwyOSArMTA3NSwyOSBAQAogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzdHJhbmdlIC4uIHhtaXQtaW50IHdpdGhvdXQgYSAnQ09NUExFVEUnXG4iLCBkZXYtPm5hbWUpOwogCiAJaWYgKHN0YXR1cyAmIFNUQVRfT0spIHsKLQkJcC0+c3RhdHMudHhfcGFja2V0cysrOwotCQlwLT5zdGF0cy5jb2xsaXNpb25zICs9IChzdGF0dXMgJiBUQ01EX01BWENPTExNQVNLKTsKKwkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMuY29sbGlzaW9ucyArPSAoc3RhdHVzICYgVENNRF9NQVhDT0xMTUFTSyk7CiAJfSBlbHNlIHsKLQkJcC0+c3RhdHMudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCWlmIChzdGF0dXMgJiBUQ01EX0xBVEVDT0xMKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBsYXRlIGNvbGxpc2lvbiBkZXRlY3RlZC5cbiIsCiAJCQkJZGV2LT5uYW1lKTsKLQkJCXAtPnN0YXRzLmNvbGxpc2lvbnMrKzsKKwkJCWRldi0+c3RhdHMuY29sbGlzaW9ucysrOwogCQl9IGVsc2UgaWYgKHN0YXR1cyAmIFRDTURfTk9DQVJSSUVSKSB7Ci0JCQlwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gY2FycmllciBkZXRlY3RlZC5cbiIsCiAJCQkJZGV2LT5uYW1lKTsKIAkJfSBlbHNlIGlmIChzdGF0dXMgJiBUQ01EX0xPU1RDVFMpCiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBsb3NzIG9mIENUUyBkZXRlY3RlZC5cbiIsCiAJCQkJZGV2LT5uYW1lKTsKIAkJZWxzZSBpZiAoc3RhdHVzICYgVENNRF9VTkRFUlJVTikgewotCQkJcC0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IERNQSB1bmRlcnJ1biBkZXRlY3RlZC5cbiIsCiAJCQkJZGV2LT5uYW1lKTsKIAkJfSBlbHNlIGlmIChzdGF0dXMgJiBUQ01EX01BWENPTEwpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IE1heC4gY29sbGlzaW9ucyBleGNlZWRlZC5cbiIsCiAJCQkJZGV2LT5uYW1lKTsKLQkJCXAtPnN0YXRzLmNvbGxpc2lvbnMgKz0gMTY7CisJCQlkZXYtPnN0YXRzLmNvbGxpc2lvbnMgKz0gMTY7CiAJCX0KIAl9CiAjaWYgKE5VTV9YTUlUX0JVRkZTID4gMSkKQEAgLTEyODYsMTIgKzEyODUsMTIgQEAKIAlvdnJuID0gcmVhZHcoJnAtPnNjYi0+b3Zybl9lcnJzKTsKIAl3cml0ZXcoMCwgJnAtPnNjYi0+b3Zybl9lcnJzKTsKIAotCXAtPnN0YXRzLnJ4X2NyY19lcnJvcnMgKz0gY3JjOwotCXAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzICs9IG92cm47Ci0JcC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzICs9IGFsbjsKLQlwLT5zdGF0cy5yeF9kcm9wcGVkICs9IHJzYzsKKwlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMgKz0gY3JjOworCWRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMgKz0gb3ZybjsKKwlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyArPSBhbG47CisJZGV2LT5zdGF0cy5yeF9kcm9wcGVkICs9IHJzYzsKIAotCXJldHVybiAmcC0+c3RhdHM7CisJcmV0dXJuICZkZXYtPnN0YXRzOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25pdS5jIGIvZHJpdmVycy9uZXQvbml1LmMKaW5kZXggNjNlOGUzOC4uNDA0ZjJkNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25pdS5jCisrKyBiL2RyaXZlcnMvbmV0L25pdS5jCkBAIC0yOCwxMCArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpZmRlZiBDT05GSUdfU1BBUkM2NAogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgotI2VuZGlmCiAKICNpbmNsdWRlICJuaXUuaCIKIApAQCAtMzMzMCwxMCArMzMyNywxMiBAQAogCWZvciAoOyAocCA9ICpwcCkgIT0gTlVMTDsgcHAgPSAoc3RydWN0IHBhZ2UgKiopICZwLT5tYXBwaW5nKSB7CiAJCWlmIChwLT5pbmRleCA9PSBhZGRyKSB7CiAJCQkqbGluayA9IHBwOwotCQkJYnJlYWs7CisJCQlnb3RvIGZvdW5kOwogCQl9CiAJfQorCUJVRygpOwogCitmb3VuZDoKIAlyZXR1cm4gcDsKIH0KIApAQCAtNzkyMCwxNCArNzkxOSw3IEBACiAKIHN0YXRpYyBpbnQgbml1X3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKIHsKLQlpZiAoZGF0YSAmIChFVEhfRkxBR19MUk8gfCBFVEhfRkxBR19OVFVQTEUpKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlpZiAoZGF0YSAmIEVUSF9GTEFHX1JYSEFTSCkKLQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1JYSEFTSDsKLQllbHNlCi0JCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfUlhIQVNIOwotCXJldHVybiAwOworCXJldHVybiBldGh0b29sX29wX3NldF9mbGFncyhkZXYsIGRhdGEsIEVUSF9GTEFHX1JYSEFTSCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbml1X2V0aHRvb2xfb3BzID0gewpAQCAtOTExOSwxMiArOTExMSwxMiBAQAogCWlmICghaW50X3Byb3ApCiAJCXJldHVybiAtRU5PREVWOwogCi0JZm9yIChpID0gMDsgaSA8IG9wLT5udW1faXJxczsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG9wLT5hcmNoZGF0YS5udW1faXJxczsgaSsrKSB7CiAJCWxkZ19udW1fbWFwW2ldID0gaW50X3Byb3BbaV07Ci0JCW5wLT5sZGdbaV0uaXJxID0gb3AtPmlycXNbaV07CisJCW5wLT5sZGdbaV0uaXJxID0gb3AtPmFyY2hkYXRhLmlycXNbaV07CiAJfQogCi0JbnAtPm51bV9sZGcgPSBvcC0+bnVtX2lycXM7CisJbnAtPm51bV9sZGcgPSBvcC0+YXJjaGRhdGEubnVtX2lycXM7CiAKIAlyZXR1cm4gMDsKICNlbHNlCkBAIC0xMDI1NCwxNCArMTAyNDYsMTQgQEAKIAluaXVfZGVidWcgPSBuZXRpZl9tc2dfaW5pdChkZWJ1ZywgTklVX01TR19ERUZBVUxUKTsKIAogI2lmZGVmIENPTkZJR19TUEFSQzY0Ci0JZXJyID0gb2ZfcmVnaXN0ZXJfZHJpdmVyKCZuaXVfb2ZfZHJpdmVyLCAmb2ZfYnVzX3R5cGUpOworCWVyciA9IG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmbml1X29mX2RyaXZlcik7CiAjZW5kaWYKIAogCWlmICghZXJyKSB7CiAJCWVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJm5pdV9wY2lfZHJpdmVyKTsKICNpZmRlZiBDT05GSUdfU1BBUkM2NAogCQlpZiAoZXJyKQotCQkJb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoJm5pdV9vZl9kcml2ZXIpOworCQkJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm5pdV9vZl9kcml2ZXIpOwogI2VuZGlmCiAJfQogCkBAIC0xMDI3Miw3ICsxMDI2NCw3IEBACiB7CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZuaXVfcGNpX2RyaXZlcik7CiAjaWZkZWYgQ09ORklHX1NQQVJDNjQKLQlvZl91bnJlZ2lzdGVyX2RyaXZlcigmbml1X29mX2RyaXZlcik7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm5pdV9vZl9kcml2ZXIpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25pdS5oIGIvZHJpdmVycy9uZXQvbml1LmgKaW5kZXggZDY3MTU0Ni4uYTQxZmE4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbml1LmgKKysrIGIvZHJpdmVycy9uZXQvbml1LmgKQEAgLTMyMzYsNyArMzIzNiw3IEBACiAJaW50ICgqbGlua19zdGF0dXMpKHN0cnVjdCBuaXUgKm5wLCBpbnQgKik7CiB9OwogCi1zdHJ1Y3Qgb2ZfZGV2aWNlOworc3RydWN0IHBsYXRmb3JtX2RldmljZTsKIHN0cnVjdCBuaXUgewogCXZvaWQgX19pb21lbQkJCSpyZWdzOwogCXN0cnVjdCBuZXRfZGV2aWNlCQkqZGV2OwpAQCAtMzI5Nyw3ICszMjk3LDcgQEAKIAlzdHJ1Y3Qgbml1X3ZwZAkJCXZwZDsKIAl1MzIJCQkJZWVwcm9tX2xlbjsKIAotCXN0cnVjdCBvZl9kZXZpY2UJCSpvcDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqb3A7CiAJdm9pZCBfX2lvbWVtCQkJKnZpcl9yZWdzXzE7CiAJdm9pZCBfX2lvbWVtCQkJKnZpcl9yZWdzXzI7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbnM4MzgyMC5jIGIvZHJpdmVycy9uZXQvbnM4MzgyMC5jCmluZGV4IGU4OGU5N2MuLjVhMzQ4OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25zODM4MjAuYworKysgYi9kcml2ZXJzL25ldC9uczgzODIwLmMKQEAgLTQyNCw3ICs0MjQsNiBAQAogCiAKIHN0cnVjdCBuczgzODIwIHsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwlzdGF0czsKIAl1OAkJCV9faW9tZW0gKmJhc2U7CiAKIAlzdHJ1Y3QgcGNpX2RldgkJKnBjaV9kZXY7CkBAIC05MTgsOSArOTE3LDkgQEAKIAkJCWlmICh1bmxpa2VseSghc2tiKSkKIAkJCQlnb3RvIG5ldGRldl9tYW5nbGVfbWVfaGFyZGVyX2ZhaWxlZDsKIAkJCWlmIChjbWRzdHMgJiBDTURTVFNfREVTVF9NVUxUSSkKLQkJCQlkZXYtPnN0YXRzLm11bHRpY2FzdCArKzsKLQkJCWRldi0+c3RhdHMucnhfcGFja2V0cyArKzsKLQkJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuOworCQkJCW5kZXYtPnN0YXRzLm11bHRpY2FzdCsrOworCQkJbmRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQkJbmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuOwogCQkJaWYgKChleHRzdHMgJiAweDAwMmEwMDAwKSAmJiAhKGV4dHN0cyAmIDB4MDA1NDAwMDApKSB7CiAJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAkJCX0gZWxzZSB7CkBAIC05NDAsNyArOTM5LDcgQEAKICNlbmRpZgogCQkJaWYgKE5FVF9SWF9EUk9QID09IHJ4X3JjKSB7CiBuZXRkZXZfbWFuZ2xlX21lX2hhcmRlcl9mYWlsZWQ6Ci0JCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkICsrOworCQkJCW5kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWtmcmVlX3NrYihza2IpOwpAQCAtMTAwOCwxMSArMTAwNywxMSBAQAogCQlkbWFfYWRkcl90IGFkZHI7CiAKIAkJaWYgKGNtZHN0cyAmIENNRFNUU19FUlIpCi0JCQlkZXYtPnN0YXRzLnR4X2Vycm9ycyArKzsKKwkJCW5kZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQlpZiAoY21kc3RzICYgQ01EU1RTX09LKQotCQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzICsrOworCQkJbmRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQlpZiAoY21kc3RzICYgQ01EU1RTX09LKQotCQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBjbWRzdHMgJiAweGZmZmY7CisJCQluZGV2LT5zdGF0cy50eF9ieXRlcyArPSBjbWRzdHMgJiAweGZmZmY7CiAKIAkJZHByaW50aygidHhfZG9uZV9pZHg9JWQgZnJlZV9pZHg9JWQgY21kc3RzPSUwOHhcbiIsCiAJCQl0eF9kb25lX2lkeCwgZGV2LT50eF9mcmVlX2lkeCwgY21kc3RzKTsKQEAgLTEyMTIsMjAgKzEyMTEsMjEgQEAKIAogc3RhdGljIHZvaWQgbnM4MzgyMF91cGRhdGVfc3RhdHMoc3RydWN0IG5zODM4MjAgKmRldikKIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRldi0+bmRldjsKIAl1OCBfX2lvbWVtICpiYXNlID0gZGV2LT5iYXNlOwogCiAJLyogdGhlIERQODM4MjAgd2lsbCBmcmVlemUgY291bnRlcnMsIHNvIHdlIG5lZWQgdG8gcmVhZCBhbGwgb2YgdGhlbSAqLwotCWRldi0+c3RhdHMucnhfZXJyb3JzCQkrPSByZWFkbChiYXNlICsgMHg2MCkgJiAweGZmZmY7Ci0JZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzCSs9IHJlYWRsKGJhc2UgKyAweDY0KSAmIDB4ZmZmZjsKLQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMJKz0gcmVhZGwoYmFzZSArIDB4NjgpICYgMHhmZmZmOwotCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzCSs9IHJlYWRsKGJhc2UgKyAweDZjKSAmIDB4ZmZmZjsKLQkvKmRldi0+c3RhdHMucnhfc3ltYm9sX2Vycm9ycyArPSovIHJlYWRsKGJhc2UgKyAweDcwKTsKLQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMJKz0gcmVhZGwoYmFzZSArIDB4NzQpICYgMHhmZmZmOwotCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycwkrPSByZWFkbChiYXNlICsgMHg3OCkgJiAweGZmZmY7Ci0JLypkZXYtPnN0YXRzLnJ4X2JhZG9wY29kZV9lcnJvcnMgKz0gKi8gcmVhZGwoYmFzZSArIDB4N2MpOwotCS8qZGV2LT5zdGF0cy5yeF9wYXVzZV9jb3VudCArPSAqLyAgcmVhZGwoYmFzZSArIDB4ODApOwotCS8qZGV2LT5zdGF0cy50eF9wYXVzZV9jb3VudCArPSAqLyAgcmVhZGwoYmFzZSArIDB4ODQpOwotCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMJKz0gcmVhZGwoYmFzZSArIDB4ODgpICYgMHhmZjsKKwluZGV2LT5zdGF0cy5yeF9lcnJvcnMJCSs9IHJlYWRsKGJhc2UgKyAweDYwKSAmIDB4ZmZmZjsKKwluZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzCSs9IHJlYWRsKGJhc2UgKyAweDY0KSAmIDB4ZmZmZjsKKwluZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzCSs9IHJlYWRsKGJhc2UgKyAweDY4KSAmIDB4ZmZmZjsKKwluZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMJKz0gcmVhZGwoYmFzZSArIDB4NmMpICYgMHhmZmZmOworCS8qbmRldi0+c3RhdHMucnhfc3ltYm9sX2Vycm9ycyArPSovIHJlYWRsKGJhc2UgKyAweDcwKTsKKwluZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzCSs9IHJlYWRsKGJhc2UgKyAweDc0KSAmIDB4ZmZmZjsKKwluZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzCSs9IHJlYWRsKGJhc2UgKyAweDc4KSAmIDB4ZmZmZjsKKwkvKm5kZXYtPnN0YXRzLnJ4X2JhZG9wY29kZV9lcnJvcnMgKz0gKi8gcmVhZGwoYmFzZSArIDB4N2MpOworCS8qbmRldi0+c3RhdHMucnhfcGF1c2VfY291bnQgKz0gKi8gIHJlYWRsKGJhc2UgKyAweDgwKTsKKwkvKm5kZXYtPnN0YXRzLnR4X3BhdXNlX2NvdW50ICs9ICovICByZWFkbChiYXNlICsgMHg4NCk7CisJbmRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMJKz0gcmVhZGwoYmFzZSArIDB4ODgpICYgMHhmZjsKIH0KIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuczgzODIwX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKQEAgLTEyMzcsNyArMTIzNyw3IEBACiAJbnM4MzgyMF91cGRhdGVfc3RhdHMoZGV2KTsKIAlzcGluX3VubG9ja19pcnEoJmRldi0+bWlzY19sb2NrKTsKIAotCXJldHVybiAmZGV2LT5zdGF0czsKKwlyZXR1cm4gJm5kZXYtPnN0YXRzOwogfQogCiAvKiBMZXQgZXRodG9vbCByZXRyaWV2ZSBpbmZvICovCkBAIC0xNDY0LDEyICsxNDY0LDEyIEBACiAKIAlpZiAodW5saWtlbHkoSVNSX1JYU09WUiAmIGlzcikpIHsKIAkJLy9wcmludGsoIm92ZXJydW46IHJ4c292clxuIik7Ci0JCWRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMgKys7CisJCW5kZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CiAJfQogCiAJaWYgKHVubGlrZWx5KElTUl9SWE9STiAmIGlzcikpIHsKIAkJLy9wcmludGsoIm92ZXJydW46IHJ4b3JuXG4iKTsKLQkJZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycyArKzsKKwkJbmRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKIAl9CiAKIAlpZiAoKElTUl9SWFJDTVAgJiBpc3IpICYmIGRldi0+cnhfaW5mby51cCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L29jdGVvbi9vY3Rlb25fbWdtdC5jIGIvZHJpdmVycy9uZXQvb2N0ZW9uL29jdGVvbl9tZ210LmMKaW5kZXggMDAwZTc5Mi4uYjI2NGYwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvb2N0ZW9uL29jdGVvbl9tZ210LmMKKysrIGIvZHJpdmVycy9uZXQvb2N0ZW9uL29jdGVvbl9tZ210LmMKQEAgLTYyMCw3ICs2MjAsNyBAQAogCWlmICghcC0+cGh5ZGV2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBwaHlfbWlpX2lvY3RsKHAtPnBoeWRldiwgaWZfbWlpKHJxKSwgY21kKTsKKwlyZXR1cm4gcGh5X21paV9pb2N0bChwLT5waHlkZXYsIHJxLCBjbWQpOwogfQogCiBzdGF0aWMgdm9pZCBvY3Rlb25fbWdtdF9hZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpAQCAtMTA2Nyw3ICsxMDY3LDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIGludCBfX2luaXQgb2N0ZW9uX21nbXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IG9jdGVvbl9tZ210X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHJlc291cmNlICpyZXNfaXJxOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CkBAIC0xMTI0LDcgKzExMjQsNyBAQAogCXJldHVybiAtRU5PRU5UOwogfQogCi1zdGF0aWMgaW50IF9fZXhpdCBvY3Rlb25fbWdtdF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IG9jdGVvbl9tZ210X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CiAKQEAgLTExMzksNyArMTEzOSw3IEBACiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAl9LAogCS5wcm9iZQkJPSBvY3Rlb25fbWdtdF9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZXhpdF9wKG9jdGVvbl9tZ210X3JlbW92ZSksCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChvY3Rlb25fbWdtdF9yZW1vdmUpLAogfTsKIAogZXh0ZXJuIHZvaWQgb2N0ZW9uX21kaW9idXNfZm9yY2VfbW9kX2RlcGVuY2VuY3kodm9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCmluZGV4IDEwZWUxMDYuLmM2ODNmNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCkBAIC04Nyw3ICs4Nyw2IEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgpAQCAtMjc5LDggKzI3OCw4IEBACiAJbHAtPnBfZGV2ID0gbGluazsKIAogCXNwaW5fbG9ja19pbml0KCZscC0+d2luZG93X2xvY2spOwotCWxpbmstPmlvLk51bVBvcnRzMSA9IDMyOwotCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OworCWxpbmstPnJlc291cmNlWzBdLT5lbmQgPSAzMjsKKwlsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OwogCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKQEAgLTMzOCwxMCArMzM3LDExIEBACiAKIAlkZXZfZGJnKCZsaW5rLT5kZXYsICIzYzU3NF9jb25maWcoKVxuIik7CiAKLQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDE2OworCWxpbmstPmlvX2xpbmVzID0gMTY7CisKIAlmb3IgKGkgPSBqID0gMDsgaiA8IDB4NDAwOyBqICs9IDB4MjApIHsKLQkJbGluay0+aW8uQmFzZVBvcnQxID0gaiBeIDB4MzAwOwotCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKKwkJbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gaiBeIDB4MzAwOworCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluayk7CiAJCWlmIChpID09IDApCiAJCQlicmVhazsKIAl9CkBAIC0zNTcsNyArMzU3LDcgQEAKIAkJZ290byBmYWlsZWQ7CiAKIAlkZXYtPmlycSA9IGxpbmstPmlycTsKLQlkZXYtPmJhc2VfYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKwlkZXYtPmJhc2VfYWRkciA9IGxpbmstPnJlc291cmNlWzBdLT5zdGFydDsKIAogCWlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCmluZGV4IGNlNjNjMzcuLjYxZjljZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCkBAIC00MSw3ICs0MSw2IEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KQEAgLTIxNCw4ICsyMTMsOCBAQAogICAgIGxwLT5wX2RldiA9IGxpbms7CiAKICAgICBzcGluX2xvY2tfaW5pdCgmbHAtPmxvY2spOwotICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IDE2OwotICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OworICAgIGxpbmstPnJlc291cmNlWzBdLT5lbmQgPSAxNjsKKyAgICBsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OwogCiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwpAQCAtMjc4LDEyICsyNzcsMTMgQEAKIAkJICAgIjNDb20gY2FyZD8/XG4iKTsKICAgICBtdWx0aSA9IChsaW5rLT5jYXJkX2lkID09IFBST0RJRF8zQ09NXzNDNTYyKTsKIAorICAgIGxpbmstPmlvX2xpbmVzID0gMTY7CisKICAgICAvKiBGb3IgdGhlIDNjNTYyLCB0aGUgYmFzZSBhZGRyZXNzIG11c3QgYmUgeHgwMC14eDdmICovCi0gICAgbGluay0+aW8uSU9BZGRyTGluZXMgPSAxNjsKICAgICBmb3IgKGkgPSBqID0gMDsgaiA8IDB4NDAwOyBqICs9IDB4MTApIHsKIAlpZiAobXVsdGkgJiYgKGogJiAweDgwKSkgY29udGludWU7Ci0JbGluay0+aW8uQmFzZVBvcnQxID0gaiBeIDB4MzAwOwotCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOworCWxpbmstPnJlc291cmNlWzBdLT5zdGFydCA9IGogXiAweDMwMDsKKwlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluayk7CiAJaWYgKGkgPT0gMCkKIAkJYnJlYWs7CiAgICAgfQpAQCAtMjk5LDcgKzI5OSw3IEBACiAJICAgIGdvdG8gZmFpbGVkOwogCiAgICAgZGV2LT5pcnEgPSBsaW5rLT5pcnE7Ci0gICAgZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisgICAgZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAgICAgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAgICAgRUwzV0lORE9XKDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCmluZGV4IDViM2RmYjQuLjVmMDVmZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSAiLi4vODM5MC5oIgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNjb2RlLmg+CkBAIC0yNjAsMjggKzI1OSwzMCBAQAogc3RhdGljIGludCB0cnlfaW9fcG9ydChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBpbnQgaiwgcmV0OwotICAgIGlmIChsaW5rLT5pby5OdW1Qb3J0czEgPT0gMzIpIHsKLQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOworICAgIGxpbmstPnJlc291cmNlWzBdLT5mbGFncyAmPSB+SU9fREFUQV9QQVRIX1dJRFRIOworICAgIGxpbmstPnJlc291cmNlWzFdLT5mbGFncyAmPSB+SU9fREFUQV9QQVRIX1dJRFRIOworICAgIGlmIChsaW5rLT5yZXNvdXJjZVswXS0+ZW5kID09IDMyKSB7CisJbGluay0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwogCS8qIGZvciBtYXN0ZXIvc2xhdmUgbXVsdGlmdW5jdGlvbiBjYXJkcyAqLwotCWlmIChsaW5rLT5pby5OdW1Qb3J0czIgPiAwKQotCSAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IElPX0RBVEFfUEFUSF9XSURUSF84OworCWlmIChsaW5rLT5yZXNvdXJjZVsxXS0+ZW5kID4gMCkKKwkgICAgbGluay0+cmVzb3VyY2VbMV0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF84OwogICAgIH0gZWxzZSB7CiAJLyogVGhpcyBzaG91bGQgYmUgdHdvIDE2LXBvcnQgd2luZG93cyAqLwotCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JbGluay0+aW8uQXR0cmlidXRlczIgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7CisJbGluay0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF84OworCWxpbmstPnJlc291cmNlWzFdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7CiAgICAgfQotICAgIGlmIChsaW5rLT5pby5CYXNlUG9ydDEgPT0gMCkgewotCWxpbmstPmlvLklPQWRkckxpbmVzID0gMTY7CisgICAgaWYgKGxpbmstPnJlc291cmNlWzBdLT5zdGFydCA9PSAwKSB7CiAJZm9yIChqID0gMDsgaiA8IDB4NDAwOyBqICs9IDB4MjApIHsKLQkgICAgbGluay0+aW8uQmFzZVBvcnQxID0gaiBeIDB4MzAwOwotCSAgICBsaW5rLT5pby5CYXNlUG9ydDIgPSAoaiBeIDB4MzAwKSArIDB4MTA7Ci0JICAgIHJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CisJICAgIGxpbmstPnJlc291cmNlWzBdLT5zdGFydCA9IGogXiAweDMwMDsKKwkgICAgbGluay0+cmVzb3VyY2VbMV0tPnN0YXJ0ID0gKGogXiAweDMwMCkgKyAweDEwOworCSAgICBsaW5rLT5pb19saW5lcyA9IDE2OworCSAgICByZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rKTsKIAkgICAgaWYgKHJldCA9PSAwKQogCQkgICAgcmV0dXJuIHJldDsKIAl9CiAJcmV0dXJuIHJldDsKICAgICB9IGVsc2UgewotCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOworCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhsaW5rKTsKICAgICB9CiB9CiAKQEAgLTMwMiwxNSArMzAzLDE1IEBACiAJICAgbmV0d29yayBmdW5jdGlvbiB3aXRoIHdpbmRvdyAwLCBhbmQgc2VyaWFsIHdpdGggd2luZG93IDEgKi8KIAlpZiAoaW8tPm53aW4gPiAxKSB7CiAJCWkgPSAoaW8tPndpblsxXS5sZW4gPiBpby0+d2luWzBdLmxlbik7Ci0JCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzEtaV0uYmFzZTsKLQkJcF9kZXYtPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMS1pXS5sZW47CisJCXBfZGV2LT5yZXNvdXJjZVsxXS0+c3RhcnQgPSBpby0+d2luWzEtaV0uYmFzZTsKKwkJcF9kZXYtPnJlc291cmNlWzFdLT5lbmQgPSBpby0+d2luWzEtaV0ubGVuOwogCX0gZWxzZSB7Ci0JCWkgPSBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwkJaSA9IHBfZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gMDsKIAl9Ci0JcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5baV0uYmFzZTsKLQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpbltpXS5sZW47Ci0JcF9kZXYtPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JaWYgKHBfZGV2LT5pby5OdW1Qb3J0czEgKyBwX2Rldi0+aW8uTnVtUG9ydHMyID49IDMyKQorCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBpby0+d2luW2ldLmJhc2U7CisJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBpby0+d2luW2ldLmxlbjsKKwlwX2Rldi0+aW9fbGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwlpZiAocF9kZXYtPnJlc291cmNlWzBdLT5lbmQgKyBwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA+PSAzMikKIAkJcmV0dXJuIHRyeV9pb19wb3J0KHBfZGV2KTsKIAogCXJldHVybiAtRU5PREVWOwpAQCAtMzMzLDcgKzMzNCw3IEBACiAgICAgaWYgKCFsaW5rLT5pcnEpCiAJICAgIGdvdG8gZmFpbGVkOwogICAgIAotICAgIGlmIChsaW5rLT5pby5OdW1Qb3J0czIgPT0gOCkgeworICAgIGlmIChyZXNvdXJjZV9zaXplKGxpbmstPnJlc291cmNlWzFdKSA9PSA4KSB7CiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX1NQS1I7CiAJbGluay0+Y29uZi5TdGF0dXMgPSBDQ1NSX0FVRElPX0VOQTsKICAgICB9CkBAIC0zNDMsNyArMzQ0LDcgQEAKIAkgICAgZ290byBmYWlsZWQ7CiAKICAgICBkZXYtPmlycSA9IGxpbmstPmlycTsKLSAgICBkZXYtPmJhc2VfYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKyAgICBkZXYtPmJhc2VfYWRkciA9IGxpbmstPnJlc291cmNlWzBdLT5zdGFydDsKIAogICAgIGlmICghZ2V0X3Byb20obGluaykpIHsKIAlwcmludGsoS0VSTl9OT1RJQ0UgImF4bmV0X2NzOiB0aGlzIGlzIG5vdCBhbiBBWDg4MTkwIGNhcmQhXG4iKTsKQEAgLTM3OSw4ICszODAsNyBAQAogICAgIC8qIE1heWJlIFBIWSBpcyBpbiBwb3dlciBkb3duIG1vZGUuIChQUERfU0VUID0gMSkgCiAgICAgICAgQml0IDIgb2YgQ0NTUiBpcyBhY3RpdmUgbG93LiAqLyAKICAgICBpZiAoaSA9PSAzMikgewotCWNvbmZfcmVnX3QgcmVnID0geyAwLCBDU19XUklURSwgQ0lTUkVHX0NDU1IsIDB4MDQgfTsKLSAJcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpOworCXBjbWNpYV93cml0ZV9jb25maWdfYnl0ZShsaW5rLCBDSVNSRUdfQ0NTUiwgMHgwNCk7CiAJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKIAkgICAgaiA9IG1kaW9fcmVhZChkZXYtPmJhc2VfYWRkciArIEFYTkVUX01JSV9FRVAsIGksIDEpOwogCSAgICBqMiA9IG1kaW9fcmVhZChkZXYtPmJhc2VfYWRkciArIEFYTkVUX01JSV9FRVAsIGksIDIpOwpAQCAtMTE2OCw2ICsxMTY4LDcgQEAKIAlpbnQgaW50ZXJydXB0cywgbnJfc2VydmljZWQgPSAwLCBpOwogCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsOwogICAgIAlpbnQgaGFuZGxlZCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWU4MzkwX2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKIAllaV9sb2NhbCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xMTc2LDcgKzExNzcsNyBAQAogCSAqCVByb3RlY3QgdGhlIGlycSB0ZXN0IHRvby4KIAkgKi8KIAkgCi0Jc3Bpbl9sb2NrKCZlaV9sb2NhbC0+cGFnZV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWlfbG9jYWwtPnBhZ2VfbG9jaywgZmxhZ3MpOwogCiAJaWYgKGVpX2xvY2FsLT5pcnFsb2NrKSAKIAl7CkBAIC0xMTg4LDcgKzExODksNyBAQAogCQkJICAgZGV2LT5uYW1lLCBpbmJfcChlODM5MF9iYXNlICsgRU4wX0lTUiksCiAJCQkgICBpbmJfcChlODM5MF9iYXNlICsgRU4wX0lNUikpOwogI2VuZGlmCi0JCXNwaW5fdW5sb2NrKCZlaV9sb2NhbC0+cGFnZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWlfbG9jYWwtPnBhZ2VfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gSVJRX05PTkU7CiAJfQogICAgIApAQCAtMTI2MSw3ICsxMjYyLDcgQEAKIAllaV9sb2NhbC0+aXJxbG9jayA9IDA7CiAJb3V0Yl9wKEVOSVNSX0FMTCwgZTgzOTBfYmFzZSArIEVOMF9JTVIpOwogCi0Jc3Bpbl91bmxvY2soJmVpX2xvY2FsLT5wYWdlX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVpX2xvY2FsLT5wYWdlX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2NvbTIwMDIwX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvY29tMjAwMjBfY3MuYwppbmRleCA1NjQzZjk0Li4zYzQwMGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvY29tMjAwMjBfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvY29tMjAwMjBfY3MuYwpAQCAtNDMsNyArNDMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2FyY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbTIwMDIwLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CkBAIC0xNTksOSArMTU4LDggQEAKICAgICAvKiBmaWxsIGluIG91ciBtb2R1bGUgcGFyYW1ldGVycyBhcyBkZWZhdWx0cyAqLwogICAgIGRldi0+ZGV2X2FkZHJbMF0gPSBub2RlOwogCi0gICAgcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0gICAgcF9kZXYtPmlvLk51bVBvcnRzMSA9IDE2OwotICAgIHBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IDE2OworICAgIHBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisgICAgcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSAxNjsKICAgICBwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogICAgIHBfZGV2LT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIApAQCAtMjQ2LDIwICsyNDQsMjQgQEAKIAogICAgIGRldl9kYmcoJmxpbmstPmRldiwgImNvbTIwMDIwX2NvbmZpZ1xuIik7CiAKLSAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJiYXNlcG9ydDEgaXMgJVhoXG4iLCBsaW5rLT5pby5CYXNlUG9ydDEpOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgImJhc2Vwb3J0MSBpcyAlWGhcbiIsCisJICAgICh1bnNpZ25lZCBpbnQpIGxpbmstPnJlc291cmNlWzBdLT5zdGFydCk7CisKICAgICBpID0gLUVOT0RFVjsKLSAgICBpZiAoIWxpbmstPmlvLkJhc2VQb3J0MSkKKyAgICBsaW5rLT5pb19saW5lcyA9IDE2OworCisgICAgaWYgKCFsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQpCiAgICAgewogCWZvciAoaW9hZGRyID0gMHgxMDA7IGlvYWRkciA8IDB4NDAwOyBpb2FkZHIgKz0gMHgxMCkKIAl7Ci0JICAgIGxpbmstPmlvLkJhc2VQb3J0MSA9IGlvYWRkcjsKLQkgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CisJICAgIGxpbmstPnJlc291cmNlWzBdLT5zdGFydCA9IGlvYWRkcjsKKwkgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmspOwogCSAgICBpZiAoaSA9PSAwKQogCQlicmVhazsKIAl9CiAgICAgfQogICAgIGVsc2UKLQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKKwlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluayk7CiAgICAgCiAgICAgaWYgKGkgIT0gMCkKICAgICB7CkBAIC0yNjcsNyArMjY5LDcgQEAKIAlnb3RvIGZhaWxlZDsKICAgICB9CiAJCi0gICAgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisgICAgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAgICAgZGV2X2RiZygmbGluay0+ZGV2LCAiZ290IGlvYWRkciAlWGhcbiIsIGlvYWRkcik7CiAKICAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJyZXF1ZXN0IElSUSAlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jCmluZGV4IDdjMjdjNTAuLjk4ZmZmYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYwpAQCAtNDksNyArNDksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc2NvZGUuaD4KQEAgLTI0OSw5ICsyNDgsOCBAQAogICAgIGxwLT5iYXNlID0gTlVMTDsKIAogICAgIC8qIFRoZSBpbyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIElPIHBvcnQgbWFwcGluZyAqLwotICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IDMyOwotICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0gICAgbGluay0+aW8uSU9BZGRyTGluZXMgPSA1OworICAgIGxpbmstPnJlc291cmNlWzBdLT5lbmQgPSAzMjsKKyAgICBsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CiAKICAgICAvKiBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uICovCiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwpAQCAtMjg5LDEzICsyODcsMTMgQEAKIAl7IDB4M2Y4LCAweDJmOCwgMHgzZTgsIDB4MmU4LCAweDAgfTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKLQlsaW5rLT5pby5CYXNlUG9ydDIgPSBzZXJpYWxfYmFzZVtpXTsKLQlsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotCWlmIChsaW5rLT5pby5CYXNlUG9ydDIgPT0gMCkgewotCSAgICBsaW5rLT5pby5OdW1Qb3J0czIgPSAwOworCWxpbmstPnJlc291cmNlWzFdLT5zdGFydCA9IHNlcmlhbF9iYXNlW2ldOworCWxpbmstPnJlc291cmNlWzFdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwlpZiAobGluay0+cmVzb3VyY2VbMV0tPnN0YXJ0ID09IDApIHsKKwkgICAgbGluay0+cmVzb3VyY2VbMV0tPmVuZCA9IDA7CiAJICAgIHByaW50ayhLRVJOX05PVElDRSAiZm12ajE4eF9jczogb3V0IG9mIHJlc291cmNlIGZvciBzZXJpYWxcbiIpOwogCX0KLQlyZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmspOwogCWlmIChyZXQgPT0gMCkKIAkJcmV0dXJuIHJldDsKICAgICB9CkBAIC0zMTEsMTIgKzMwOSwxMiBAQAogCTB4MzgwLDB4M2MwIG9ubHkgZm9yIGlvcG9ydC4KICAgICAqLwogICAgIGZvciAoaW9hZGRyID0gMHgzMDA7IGlvYWRkciA8IDB4M2UwOyBpb2FkZHIgKz0gMHgyMCkgewotCWxpbmstPmlvLkJhc2VQb3J0MSA9IGlvYWRkcjsKLQlyZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOworCWxpbmstPnJlc291cmNlWzBdLT5zdGFydCA9IGlvYWRkcjsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rKTsKIAlpZiAocmV0ID09IDApIHsKIAkgICAgLyogY2FsY3VsYXRlIENvbmZpZ0luZGV4IHZhbHVlICovCiAJICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAKLQkJKChsaW5rLT5pby5CYXNlUG9ydDEgJiAweDBmMCkgPj4gMykgfCAweDIyOworCQkoKGxpbmstPnJlc291cmNlWzBdLT5zdGFydCAmIDB4MGYwKSA+PiAzKSB8IDB4MjI7CiAJICAgIHJldHVybiByZXQ7CiAJfQogICAgIH0KQEAgLTM0Niw2ICszNDQsOCBAQAogCiAgICAgZGV2X2RiZygmbGluay0+ZGV2LCAiZm12ajE4eF9jb25maWdcbiIpOwogCisgICAgbGluay0+aW9fbGluZXMgPSA1OworCiAgICAgbGVuID0gcGNtY2lhX2dldF90dXBsZShsaW5rLCBDSVNUUExfRlVOQ0UsICZidWYpOwogICAgIGtmcmVlKGJ1Zik7CiAKQEAgLTM2NCwyMCArMzY0LDIwIEBACiAJCS8qIE11bHRpRnVuY3Rpb24gQ2FyZCAqLwogCQlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSAweDgwMDsKIAkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IDB4NDc7Ci0JCWxpbmstPmlvLk51bVBvcnRzMiA9IDg7CisJCWxpbmstPnJlc291cmNlWzFdLT5lbmQgPSA4OwogCSAgICB9CiAJICAgIGJyZWFrOwogCWNhc2UgTUFORklEX05FQzoKIAkgICAgY2FyZHR5cGUgPSBORUM7IC8qIE11bHRpRnVuY3Rpb24gQ2FyZCAqLwogCSAgICBsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSAweDgwMDsKIAkgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IDB4NDc7Ci0JICAgIGxpbmstPmlvLk51bVBvcnRzMiA9IDg7CisJICAgIGxpbmstPnJlc291cmNlWzFdLT5lbmQgPSA4OwogCSAgICBicmVhazsKIAljYXNlIE1BTkZJRF9LTUU6CiAJICAgIGNhcmR0eXBlID0gS01FOyAvKiBNdWx0aUZ1bmN0aW9uIENhcmQgKi8KIAkgICAgbGluay0+Y29uZi5Db25maWdCYXNlID0gMHg4MDA7CiAJICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAweDQ3OwotCSAgICBsaW5rLT5pby5OdW1Qb3J0czIgPSA4OworCSAgICBsaW5rLT5yZXNvdXJjZVsxXS0+ZW5kID0gODsKIAkgICAgYnJlYWs7CiAJY2FzZSBNQU5GSURfQ09OVEVDOgogCSAgICBjYXJkdHlwZSA9IENPTlRFQzsKQEAgLTQxOCwxNCArNDE4LDE0IEBACiAJfQogICAgIH0KIAotICAgIGlmIChsaW5rLT5pby5OdW1Qb3J0czIgIT0gMCkgeworICAgIGlmIChsaW5rLT5yZXNvdXJjZVsxXS0+ZW5kICE9IDApIHsKIAlyZXQgPSBtZmNfdHJ5X2lvX3BvcnQobGluayk7CiAJaWYgKHJldCAhPSAwKSBnb3RvIGZhaWxlZDsKICAgICB9IGVsc2UgaWYgKGNhcmR0eXBlID09IFVOR0VSTUFOTikgewogCXJldCA9IHVuZ2VybWFubl90cnlfaW9fcG9ydChsaW5rKTsKIAlpZiAocmV0ICE9IDApIGdvdG8gZmFpbGVkOwogICAgIH0gZWxzZSB7IAotCSAgICByZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOworCSAgICByZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rKTsKIAkgICAgaWYgKHJldCkKIAkJICAgIGdvdG8gZmFpbGVkOwogICAgIH0KQEAgLTQzNyw5ICs0MzcsOSBAQAogCSAgICBnb3RvIGZhaWxlZDsKIAogICAgIGRldi0+aXJxID0gbGluay0+aXJxOwotICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOworICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCi0gICAgaWYgKGxpbmstPmlvLkJhc2VQb3J0MiAhPSAwKSB7CisgICAgaWYgKHJlc291cmNlX3NpemUobGluay0+cmVzb3VyY2VbMV0pICE9IDApIHsKIAlyZXQgPSBmbXZqMTh4X3NldHVwX21mYyhsaW5rKTsKIAlpZiAocmV0ICE9IDApIGdvdG8gZmFpbGVkOwogICAgIH0KQEAgLTU0NSw3ICs1NDUsNiBAQAogc3RhdGljIGludCBmbXZqMTh4X2dldF9od2luZm8oc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIHVfY2hhciAqbm9kZV9pZCkKIHsKICAgICB3aW5fcmVxX3QgcmVxOwotICAgIG1lbXJlcV90IG1lbTsKICAgICB1X2NoYXIgX19pb21lbSAqYmFzZTsKICAgICBpbnQgaSwgajsKIApAQCAtNTU4LDkgKzU1Nyw3IEBACiAJcmV0dXJuIC0xOwogCiAgICAgYmFzZSA9IGlvcmVtYXAocmVxLkJhc2UsIHJlcS5TaXplKTsKLSAgICBtZW0uUGFnZSA9IDA7Ci0gICAgbWVtLkNhcmRPZmZzZXQgPSAwOwotICAgIHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluaywgbGluay0+d2luLCAmbWVtKTsKKyAgICBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmssIGxpbmstPndpbiwgMCk7CiAKICAgICAvKgogICAgICAqICBNQkgxMDMwNCBDSVNUUExfRlVOQ0VfTEFOX05PREVfSUQgZm9ybWF0CkBAIC01OTQsNyArNTkxLDYgQEAKIHN0YXRpYyBpbnQgZm12ajE4eF9zZXR1cF9tZmMoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgd2luX3JlcV90IHJlcTsKLSAgICBtZW1yZXFfdCBtZW07CiAgICAgaW50IGk7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAgICAgdW5zaWduZWQgaW50IGlvYWRkcjsKQEAgLTYxNCw5ICs2MTAsNyBAQAogCXJldHVybiAtMTsKICAgICB9CiAKLSAgICBtZW0uUGFnZSA9IDA7Ci0gICAgbWVtLkNhcmRPZmZzZXQgPSAwOwotICAgIGkgPSBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmssIGxpbmstPndpbiwgJm1lbSk7CisgICAgaSA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluaywgbGluay0+d2luLCAwKTsKICAgICBpZiAoaSAhPSAwKSB7CiAJaW91bm1hcChscC0+YmFzZSk7CiAJbHAtPmJhc2UgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2libXRyX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvaWJtdHJfY3MuYwppbmRleCA2N2VlOTg1Li5iMGQwNmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvaWJtdHJfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvaWJtdHJfY3MuYwpAQCAtNTcsNyArNTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3RyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaWJtdHIuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KQEAgLTE1Miw5ICsxNTEsOCBAQAogICAgIGxpbmstPnByaXYgPSBpbmZvOwogICAgIGluZm8tPnRpID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0gICAgbGluay0+aW8uTnVtUG9ydHMxID0gNDsKLSAgICBsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDE2OworICAgIGxpbmstPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKyAgICBsaW5rLT5yZXNvdXJjZVswXS0+ZW5kID0gNDsKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAgICAgbGluay0+Y29uZi5QcmVzZW50ID0gUFJFU0VOVF9PUFRJT047CkBAIC0yMTMsMjYgKzIxMSwyNiBAQAogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLT5kZXY7CiAgICAgc3RydWN0IHRva19pbmZvICp0aSA9IG5ldGRldl9wcml2KGRldik7CiAgICAgd2luX3JlcV90IHJlcTsKLSAgICBtZW1yZXFfdCBtZW07CiAgICAgaW50IGksIHJldDsKIAogICAgIGRldl9kYmcoJmxpbmstPmRldiwgImlibXRyX2NvbmZpZ1xuIik7CiAKICAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMHg2MTsKKyAgICBsaW5rLT5pb19saW5lcyA9IDE2OwogCiAgICAgLyogRGV0ZXJtaW5lIGlmIHRoaXMgaXMgUFJJTUFSWSBvciBBTFRFUk5BVEUuICovCiAKICAgICAvKiBUcnkgUFJJTUFSWSBjYXJkIGF0IDB4QTIwLTB4QTIzICovCi0gICAgbGluay0+aW8uQmFzZVBvcnQxID0gMHhBMjA7Ci0gICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CisgICAgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gMHhBMjA7CisgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmspOwogICAgIGlmIChpICE9IDApIHsKIAkvKiBDb3VsZG4ndCBnZXQgMHhBMjAtMHhBMjMuICBUcnkgQUxURVJOQVRFIGF0IDB4QTI0LTB4QTI3LiAqLwotCWxpbmstPmlvLkJhc2VQb3J0MSA9IDB4QTI0OwotCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CisJbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gMHhBMjQ7CisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluayk7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsZWQ7CiAgICAgfQotICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOworICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCiAgICAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfZXhjbHVzaXZlX2lycShsaW5rLCBpYm10cl9pbnRlcnJ1cHQpOwogICAgIGlmIChyZXQpCkBAIC0yNTEsOSArMjQ5LDcgQEAKICAgICBpZiAocmV0KQogCSAgICBnb3RvIGZhaWxlZDsKIAotICAgIG1lbS5DYXJkT2Zmc2V0ID0gbW1pb2Jhc2U7Ci0gICAgbWVtLlBhZ2UgPSAwOwotICAgIHJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluaywgbGluay0+d2luLCAmbWVtKTsKKyAgICByZXQgPSBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmssIGxpbmstPndpbiwgbW1pb2Jhc2UpOwogICAgIGlmIChyZXQpCiAJICAgIGdvdG8gZmFpbGVkOwogICAgIHRpLT5tbWlvID0gaW9yZW1hcChyZXEuQmFzZSwgcmVxLlNpemUpOwpAQCAtMjY4LDEzICsyNjQsMTEgQEAKICAgICBpZiAocmV0KQogCSAgICBnb3RvIGZhaWxlZDsKIAotICAgIG1lbS5DYXJkT2Zmc2V0ID0gc3JhbWJhc2U7Ci0gICAgbWVtLlBhZ2UgPSAwOwotICAgIHJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluaywgaW5mby0+c3JhbV93aW5faGFuZGxlLCAmbWVtKTsKKyAgICByZXQgPSBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmssIGluZm8tPnNyYW1fd2luX2hhbmRsZSwgc3JhbWJhc2UpOwogICAgIGlmIChyZXQpCiAJICAgIGdvdG8gZmFpbGVkOwogCi0gICAgdGktPnNyYW1fYmFzZSA9IG1lbS5DYXJkT2Zmc2V0ID4+IDEyOworICAgIHRpLT5zcmFtX2Jhc2UgPSBzcmFtYmFzZSA+PiAxMjsKICAgICB0aS0+c3JhbV92aXJ0ID0gaW9yZW1hcChyZXEuQmFzZSwgcmVxLlNpemUpOwogICAgIHRpLT5zcmFtX3BoeXMgPSByZXEuQmFzZTsKIApAQCAtMzI1LDcgKzMxOSw2IEBACiAJaWYgKGxpbmstPndpbikgewogCQlzdHJ1Y3QgdG9rX2luZm8gKnRpID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAkJaW91bm1hcCh0aS0+bW1pbyk7Ci0JCXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLCBpbmZvLT5zcmFtX3dpbl9oYW5kbGUpOwogCX0KIAlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMKaW5kZXggOWI2M2RlYy4uNjhmMmRlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL25tY2xhbl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYwpAQCAtMTQ2LDcgKzE0Niw2IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgpAQCAtNDU5LDkgKzQ1OCw4IEBACiAgICAgbGluay0+cHJpdiA9IGRldjsKICAgICAKICAgICBzcGluX2xvY2tfaW5pdCgmbHAtPmJhbmtfbG9jayk7Ci0gICAgbGluay0+aW8uTnVtUG9ydHMxID0gMzI7Ci0gICAgbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLSAgICBsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDU7CisgICAgbGluay0+cmVzb3VyY2VbMF0tPmVuZCA9IDMyOworICAgIGxpbmstPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IDE7CkBAIC02NDUsNyArNjQzLDggQEAKIAogICBkZXZfZGJnKCZsaW5rLT5kZXYsICJubWNsYW5fY29uZmlnXG4iKTsKIAotICByZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOworICBsaW5rLT5pb19saW5lcyA9IDU7CisgIHJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmspOwogICBpZiAocmV0KQogCSAgZ290byBmYWlsZWQ7CiAgIHJldCA9IHBjbWNpYV9yZXF1ZXN0X2V4Y2x1c2l2ZV9pcnEobGluaywgbWFjZV9pbnRlcnJ1cHQpOwpAQCAtNjU2LDcgKzY1NSw3IEBACiAJICBnb3RvIGZhaWxlZDsKIAogICBkZXYtPmlycSA9IGxpbmstPmlycTsKLSAgZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisgIGRldi0+YmFzZV9hZGRyID0gbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCiAgIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCkBAIC03NTgsMjkgKzc1NywyMCBAQAogCiAjaWYgUkVTRVRfWElMSU5YCiAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gJmxwLT5saW5rOwotICBjb25mX3JlZ190IHJlZzsKLSAgdV9sb25nIE9yaWdDb3JWYWx1ZTsgCisgIHU4IE9yaWdDb3JWYWx1ZTsKIAogICAvKiBTYXZlIG9yaWdpbmFsIENPUiB2YWx1ZSAqLwotICByZWcuRnVuY3Rpb24gPSAwOwotICByZWcuQWN0aW9uID0gQ1NfUkVBRDsKLSAgcmVnLk9mZnNldCA9IENJU1JFR19DT1I7Ci0gIHJlZy5WYWx1ZSA9IDA7Ci0gIHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKTsKLSAgT3JpZ0NvclZhbHVlID0gcmVnLlZhbHVlOworICBwY21jaWFfcmVhZF9jb25maWdfYnl0ZShsaW5rLCBDSVNSRUdfQ09SLCAmT3JpZ0NvclZhbHVlKTsKIAogICAvKiBSZXNldCBYaWxpbnggKi8KLSAgcmVnLkFjdGlvbiA9IENTX1dSSVRFOwotICByZWcuT2Zmc2V0ID0gQ0lTUkVHX0NPUjsKLSAgZGV2X2RiZygmbGluay0+ZGV2LCAibm1jbGFuX3Jlc2V0OiBPcmlnQ29yVmFsdWU9MHglbFgsIHJlc2V0dGluZy4uLlxuIiwKKyAgZGV2X2RiZygmbGluay0+ZGV2LCAibm1jbGFuX3Jlc2V0OiBPcmlnQ29yVmFsdWU9MHgleCwgcmVzZXR0aW5nLi4uXG4iLAogCU9yaWdDb3JWYWx1ZSk7Ci0gIHJlZy5WYWx1ZSA9IENPUl9TT0ZUX1JFU0VUOwotICBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluaywgJnJlZyk7CisgIHBjbWNpYV93cml0ZV9jb25maWdfYnl0ZShsaW5rLCBDSVNSRUdfQ09SLCBDT1JfU09GVF9SRVNFVCk7CiAgIC8qIE5lZWQgdG8gd2FpdCBmb3IgMjAgbXMgZm9yIFBDTUNJQSB0byBmaW5pc2ggcmVzZXQuICovCiAKICAgLyogUmVzdG9yZSBvcmlnaW5hbCBDT1IgY29uZmlndXJhdGlvbiBpbmRleCAqLwotICByZWcuVmFsdWUgPSBDT1JfTEVWRUxfUkVRIHwgKE9yaWdDb3JWYWx1ZSAmIENPUl9DT05GSUdfTUFTSyk7Ci0gIHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKTsKKyAgcGNtY2lhX3dyaXRlX2NvbmZpZ19ieXRlKGxpbmssIENJU1JFR19DT1IsCisJCQkgIChDT1JfTEVWRUxfUkVRIHwgKE9yaWdDb3JWYWx1ZSAmIENPUl9DT05GSUdfTUFTSykpKTsKICAgLyogWGlsaW54IGlzIG5vdyBjb21wbGV0ZWx5IHJlc2V0IGFsb25nIHdpdGggdGhlIE1BQ0UgY2hpcC4gKi8KICAgbHAtPnR4X2ZyZWVfZnJhbWVzPUFNMjE1MF9NQVhfVFhfRlJBTUVTOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jCmluZGV4IGJmZGVmNzIuLmMzZWRmZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSAiLi4vODM5MC5oIgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNjb2RlLmg+CkBAIC0xMTMsOCArMTEyLDYgQEAKIAogc3RhdGljIHZvaWQgcGNuZXRfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CiAKLXN0YXRpYyBkZXZfaW5mb190IGRldl9pbmZvID0gInBjbmV0X2NzIjsKLQogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHR5cGVkZWYgc3RydWN0IGh3X2luZm9fdCB7CkBAIC0zMDQsNyArMzAxLDYgQEAKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKICAgICB3aW5fcmVxX3QgcmVxOwotICAgIG1lbXJlcV90IG1lbTsKICAgICB1X2NoYXIgX19pb21lbSAqYmFzZSwgKnZpcnQ7CiAgICAgaW50IGksIGo7CiAKQEAgLTMxNywxMCArMzEzLDggQEAKIAlyZXR1cm4gTlVMTDsKIAogICAgIHZpcnQgPSBpb3JlbWFwKHJlcS5CYXNlLCByZXEuU2l6ZSk7Ci0gICAgbWVtLlBhZ2UgPSAwOwogICAgIGZvciAoaSA9IDA7IGkgPCBOUl9JTkZPOyBpKyspIHsKLQltZW0uQ2FyZE9mZnNldCA9IGh3X2luZm9baV0ub2Zmc2V0ICYgfihyZXEuU2l6ZS0xKTsKLQlwY21jaWFfbWFwX21lbV9wYWdlKGxpbmssIGxpbmstPndpbiwgJm1lbSk7CisJcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsaW5rLT53aW4sIGh3X2luZm9baV0ub2Zmc2V0ICYgfihyZXEuU2l6ZS0xKSk7CiAJYmFzZSA9ICZ2aXJ0W2h3X2luZm9baV0ub2Zmc2V0ICYgKHJlcS5TaXplLTEpXTsKIAlpZiAoKHJlYWRiKGJhc2UrMCkgPT0gaHdfaW5mb1tpXS5hMCkgJiYKIAkgICAgKHJlYWRiKGJhc2UrMikgPT0gaHdfaW5mb1tpXS5hMSkgJiYKQEAgLTQ4MCwyOSArNDc0LDMxIEBACiBzdGF0aWMgaW50IHRyeV9pb19wb3J0KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIGludCBqLCByZXQ7Ci0gICAgaWYgKGxpbmstPmlvLk51bVBvcnRzMSA9PSAzMikgewotCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JaWYgKGxpbmstPmlvLk51bVBvcnRzMiA+IDApIHsKKyAgICBsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgJj0gfklPX0RBVEFfUEFUSF9XSURUSDsKKyAgICBsaW5rLT5yZXNvdXJjZVsxXS0+ZmxhZ3MgJj0gfklPX0RBVEFfUEFUSF9XSURUSDsKKyAgICBpZiAobGluay0+cmVzb3VyY2VbMF0tPmVuZCA9PSAzMikgeworCWxpbmstPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKKwlpZiAobGluay0+cmVzb3VyY2VbMV0tPmVuZCA+IDApIHsKIAkgICAgLyogZm9yIG1hc3Rlci9zbGF2ZSBtdWx0aWZ1bmN0aW9uIGNhcmRzICovCi0JICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMyID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJICAgIGxpbmstPnJlc291cmNlWzFdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfODsKIAl9CiAgICAgfSBlbHNlIHsKIAkvKiBUaGlzIHNob3VsZCBiZSB0d28gMTYtcG9ydCB3aW5kb3dzICovCi0JbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQlsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKKwlsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJbGluay0+cmVzb3VyY2VbMV0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKICAgICB9Ci0gICAgaWYgKGxpbmstPmlvLkJhc2VQb3J0MSA9PSAwKSB7Ci0JbGluay0+aW8uSU9BZGRyTGluZXMgPSAxNjsKKyAgICBpZiAobGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ID09IDApIHsKIAlmb3IgKGogPSAwOyBqIDwgMHg0MDA7IGogKz0gMHgyMCkgewotCSAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBqIF4gMHgzMDA7Ci0JICAgIGxpbmstPmlvLkJhc2VQb3J0MiA9IChqIF4gMHgzMDApICsgMHgxMDsKLQkgICAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKKwkgICAgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gaiBeIDB4MzAwOworCSAgICBsaW5rLT5yZXNvdXJjZVsxXS0+c3RhcnQgPSAoaiBeIDB4MzAwKSArIDB4MTA7CisJICAgIGxpbmstPmlvX2xpbmVzID0gMTY7CisJICAgIHJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmspOwogCSAgICBpZiAocmV0ID09IDApCiAJCSAgICByZXR1cm4gcmV0OwogCX0KIAlyZXR1cm4gcmV0OwogICAgIH0gZWxzZSB7Ci0JcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CisJcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmspOwogICAgIH0KIH0KIApAQCAtNTIzLDE4ICs1MTksMTggQEAKIAkgICBuZXR3b3JrIGZ1bmN0aW9uIHdpdGggd2luZG93IDAsIGFuZCBzZXJpYWwgd2l0aCB3aW5kb3cgMSAqLwogCWlmIChpby0+bndpbiA+IDEpIHsKIAkJaSA9IChpby0+d2luWzFdLmxlbiA+IGlvLT53aW5bMF0ubGVuKTsKLQkJcF9kZXYtPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMS1pXS5iYXNlOwotCQlwX2Rldi0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxLWldLmxlbjsKKwkJcF9kZXYtPnJlc291cmNlWzFdLT5zdGFydCA9IGlvLT53aW5bMS1pXS5iYXNlOworCQlwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA9IGlvLT53aW5bMS1pXS5sZW47CiAJfSBlbHNlIHsKLQkJaSA9IHBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOworCQlpID0gcF9kZXYtPnJlc291cmNlWzFdLT5lbmQgPSAwOwogCX0KIAogCSpoYXNfc2htZW0gPSAoKGNmZy0+bWVtLm53aW4gPT0gMSkgJiYKIAkJICAgICAgKGNmZy0+bWVtLndpblswXS5sZW4gPj0gMHg0MDAwKSk7Ci0JcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5baV0uYmFzZTsKLQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpbltpXS5sZW47Ci0JcF9kZXYtPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JaWYgKHBfZGV2LT5pby5OdW1Qb3J0czEgKyBwX2Rldi0+aW8uTnVtUG9ydHMyID49IDMyKQorCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBpby0+d2luW2ldLmJhc2U7CisJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBpby0+d2luW2ldLmxlbjsKKwlwX2Rldi0+aW9fbGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwlpZiAocF9kZXYtPnJlc291cmNlWzBdLT5lbmQgKyBwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA+PSAzMikKIAkJcmV0dXJuIHRyeV9pb19wb3J0KHBfZGV2KTsKIAogCXJldHVybiAwOwpAQCAtNTU3LDcgKzU1Myw3IEBACiAgICAgaWYgKCFsaW5rLT5pcnEpCiAJICAgIGdvdG8gZmFpbGVkOwogCi0gICAgaWYgKGxpbmstPmlvLk51bVBvcnRzMiA9PSA4KSB7CisgICAgaWYgKHJlc291cmNlX3NpemUobGluay0+cmVzb3VyY2VbMV0pID09IDgpIHsKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKIAlsaW5rLT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOwogICAgIH0KQEAgLTU2OSw3ICs1NjUsNyBAQAogICAgIGlmIChyZXQpCiAJICAgIGdvdG8gZmFpbGVkOwogICAgIGRldi0+aXJxID0gbGluay0+aXJxOwotICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOworICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogICAgIGlmIChpbmZvLT5mbGFncyAmIEhBU19NSVNDX1JFRykgewogCWlmICgoaWZfcG9ydCA9PSAxKSB8fCAoaWZfcG9ydCA9PSAyKSkKIAkgICAgZGV2LT5pZl9wb3J0ID0gaWZfcG9ydDsKQEAgLTk1Niw3ICs5NTIsNyBAQAogICAgIHNldF9taXNjX3JlZyhkZXYpOwogCiAgICAgb3V0Yl9wKDB4RkYsIG5pY19iYXNlICsgRU4wX0lTUik7IC8qIENsZWFyIGJvZ3VzIGludHIuICovCi0gICAgcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGVpX2lycV93cmFwcGVyLCBJUlFGX1NIQVJFRCwgZGV2X2luZm8sIGRldik7CisgICAgcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGVpX2lycV93cmFwcGVyLCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpOwogICAgIGlmIChyZXQpCiAJICAgIHJldHVybiByZXQ7CiAKQEAgLTE0NjQsNyArMTQ2MCw2IEBACiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAgICAgcGNuZXRfZGV2X3QgKmluZm8gPSBQUklWKGRldik7CiAgICAgd2luX3JlcV90IHJlcTsKLSAgICBtZW1yZXFfdCBtZW07CiAgICAgaW50IGksIHdpbmRvd19zaXplLCBvZmZzZXQsIHJldDsKIAogICAgIHdpbmRvd19zaXplID0gKHN0b3BfcGcgLSBzdGFydF9wZykgPDwgODsKQEAgLTE0ODMsMTEgKzE0NzgsOSBAQAogICAgIGlmIChyZXQpCiAJICAgIGdvdG8gZmFpbGVkOwogCi0gICAgbWVtLkNhcmRPZmZzZXQgPSAoc3RhcnRfcGcgPDwgOCkgKyBjbV9vZmZzZXQ7Ci0gICAgb2Zmc2V0ID0gbWVtLkNhcmRPZmZzZXQgJSB3aW5kb3dfc2l6ZTsKLSAgICBtZW0uQ2FyZE9mZnNldCAtPSBvZmZzZXQ7Ci0gICAgbWVtLlBhZ2UgPSAwOwotICAgIHJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluaywgbGluay0+d2luLCAmbWVtKTsKKyAgICBvZmZzZXQgPSAoc3RhcnRfcGcgPDwgOCkgKyBjbV9vZmZzZXQ7CisgICAgb2Zmc2V0IC09IG9mZnNldCAlIHdpbmRvd19zaXplOworICAgIHJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluaywgbGluay0+d2luLCBvZmZzZXQpOwogICAgIGlmIChyZXQpCiAJICAgIGdvdG8gZmFpbGVkOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCmluZGV4IDMwN2NkMTcuLjM3NzM2N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCkBAIC00NCw3ICs0NCw2IEBACiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgpAQCAtMzI1LDkgKzMyNCw4IEBACiAgICAgbGluay0+cHJpdiA9IGRldjsKIAogICAgIHNwaW5fbG9ja19pbml0KCZzbWMtPmxvY2spOwotICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IDE2OwotICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0gICAgbGluay0+aW8uSU9BZGRyTGluZXMgPSA0OworICAgIGxpbmstPnJlc291cmNlWzBdLT5lbmQgPSAxNjsKKyAgICBsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCkBAIC00MjgsMTIgKzQyNiwxMyBAQAogCQkJCXZvaWQgKnByaXZfZGF0YSkKIHsKIAlpbnQgazsKLQlwX2Rldi0+aW8uQmFzZVBvcnQyID0gY2YtPmlvLndpblswXS5iYXNlOworCXBfZGV2LT5yZXNvdXJjZVsxXS0+c3RhcnQgPSBjZi0+aW8ud2luWzBdLmJhc2U7CiAJZm9yIChrID0gMDsgayA8IDB4NDAwOyBrICs9IDB4MTApIHsKIAkJaWYgKGsgJiAweDgwKQogCQkJY29udGludWU7Ci0JCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBrIF4gMHgzMDA7Ci0JCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKQorCQlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gayBeIDB4MzAwOworCQlwX2Rldi0+aW9fbGluZXMgPSAxNjsKKwkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldikpCiAJCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FTk9ERVY7CkBAIC00NDQsMjEgKzQ0MywyMCBAQAogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIHN0cnVjdCBzbWNfcHJpdmF0ZSAqc21jID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICB3aW5fcmVxX3QgcmVxOwotICAgIG1lbXJlcV90IG1lbTsKKyAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0OwogICAgIGludCBpOwogCiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX1NQS1I7CiAgICAgbGluay0+Y29uZi5TdGF0dXMgPSBDQ1NSX0FVRElPX0VOQTsKLSAgICBsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDE2OwotICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMyID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0gICAgbGluay0+aW8uTnVtUG9ydHMyID0gODsKKyAgICBsaW5rLT5yZXNvdXJjZVsxXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisgICAgbGluay0+cmVzb3VyY2VbMV0tPmVuZCA9IDg7CiAKICAgICAvKiBUaGUgTWVnYWhlcnR6IGNvbWJvIGNhcmRzIGhhdmUgbW9kZW0tbGlrZSBDSVMgZW50cmllcywgc28KICAgICAgICB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkgdHJ5IGEgYnVuY2ggb2YgcG9ydCBjb21iaW5hdGlvbnMuICovCiAgICAgaWYgKHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBtaHpfbWZjX2NvbmZpZ19jaGVjaywgTlVMTCkpCiAJICAgIHJldHVybiAtRU5PREVWOwogCi0gICAgZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisgICAgZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAKICAgICAvKiBBbGxvY2F0ZSBhIG1lbW9yeSB3aW5kb3csIGZvciBhY2Nlc3NpbmcgdGhlIElTUiAqLwogICAgIHJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfOHxXSU5fTUVNT1JZX1RZUEVfQU18V0lOX0VOQUJMRTsKQEAgLTQ2OSwxMSArNDY3LDggQEAKIAkgICAgcmV0dXJuIC1FTk9ERVY7CiAKICAgICBzbWMtPmJhc2UgPSBpb3JlbWFwKHJlcS5CYXNlLCByZXEuU2l6ZSk7Ci0gICAgbWVtLkNhcmRPZmZzZXQgPSBtZW0uUGFnZSA9IDA7Ci0gICAgaWYgKHNtYy0+bWFuZmlkID09IE1BTkZJRF9NT1RPUk9MQSkKLQltZW0uQ2FyZE9mZnNldCA9IGxpbmstPmNvbmYuQ29uZmlnQmFzZTsKLSAgICBpID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsaW5rLT53aW4sICZtZW0pOwotCisgICAgb2Zmc2V0ID0gKHNtYy0+bWFuZmlkID09IE1BTkZJRF9NT1RPUk9MQSkgPyBsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgOiAwOworICAgIGkgPSBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmssIGxpbmstPndpbiwgb2Zmc2V0KTsKICAgICBpZiAoKGkgPT0gMCkgJiYKIAkoc21jLT5tYW5maWQgPT0gTUFORklEX01FR0FIRVJUWikgJiYKIAkoc21jLT5jYXJkaWQgPT0gUFJPRElEX01FR0FIRVJUWl9FTTMyODgpKQpAQCAtNTQ2LDcgKzU0MSw3IEBACiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAgICAgc3RydWN0IHNtY19wcml2YXRlICpzbWMgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgIHVuc2lnbmVkIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLSAgICB1bnNpZ25lZCBpbnQgaW91YXJ0ID0gbGluay0+aW8uQmFzZVBvcnQyOworICAgIHVuc2lnbmVkIGludCBpb3VhcnQgPSBsaW5rLT5yZXNvdXJjZVsxXS0+c3RhcnQ7CiAKICAgICAvKiBTZXQgVUFSVCBiYXNlIGFkZHJlc3MgYW5kIGZvcmNlIG1hcCB3aXRoIENPUiBiaXQgMSAqLwogICAgIHdyaXRlYihpb3VhcnQgJiAweGZmLCAgICAgICAgc21jLT5iYXNlICsgTU9UX1VBUlQgKyBDSVNSRUdfSU9CQVNFXzApOwpAQCAtNjAyLDkgKzU5Nyw5IEBACiAJCQkgICB1bnNpZ25lZCBpbnQgdmNjLAogCQkJICAgdm9pZCAqcHJpdl9kYXRhKQogewotCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7Ci0JcF9kZXYtPmlvLklPQWRkckxpbmVzID0gY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKTsKKwlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gY2YtPmlvLndpblswXS5iYXNlOworCXBfZGV2LT5pb19saW5lcyA9IGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2Rldik7CiB9CiAKIHN0YXRpYyBpbnQgc21jX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKQEAgLTYxMiwxMCArNjA3LDEwIEBACiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAgICAgaW50IGk7CiAKLSAgICBsaW5rLT5pby5OdW1Qb3J0czEgPSAxNjsKKyAgICBsaW5rLT5yZXNvdXJjZVswXS0+ZW5kID0gMTY7CiAgICAgaSA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBzbWNfY29uZmlnY2hlY2ssIE5VTEwpOwogICAgIGlmICghaSkKLQkgICAgZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisJICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCiAgICAgcmV0dXJuIGk7CiB9CkBAIC02NDcsMjcgKzY0MiwyNyBAQAogCiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX1NQS1I7CiAgICAgbGluay0+Y29uZi5TdGF0dXMgPSBDQ1NSX0FVRElPX0VOQTsKLSAgICBsaW5rLT5pby5OdW1Qb3J0czEgPSA2NDsKLSAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotICAgIGxpbmstPmlvLk51bVBvcnRzMiA9IDg7Ci0gICAgbGluay0+aW8uSU9BZGRyTGluZXMgPSAxNjsKKyAgICBsaW5rLT5yZXNvdXJjZVswXS0+ZW5kID0gNjQ7CisgICAgbGluay0+cmVzb3VyY2VbMV0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF84OworICAgIGxpbmstPnJlc291cmNlWzFdLT5lbmQgPSA4OwogCiAgICAgLyogRW5hYmxlIEhhcmQgRGVjb2RlLCBMQU4sIE1vZGVtICovCiAgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IDB4MjM7CisgICAgbGluay0+aW9fbGluZXMgPSAxNjsKIAogICAgIGZvciAoaSA9IGogPSAwOyBqIDwgNDsgaisrKSB7Ci0JbGluay0+aW8uQmFzZVBvcnQyID0gY29tW2pdOwotCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOworCWxpbmstPnJlc291cmNlWzFdLT5zdGFydCA9IGNvbVtqXTsKKwlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluayk7CiAJaWYgKGkgPT0gMCkKIAkJYnJlYWs7CiAgICAgfQogICAgIGlmIChpICE9IDApIHsKIAkvKiBGYWxsYmFjazogdHVybiBvZmYgaGFyZCBkZWNvZGUgKi8KIAlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMHgwMzsKLQlsaW5rLT5pby5OdW1Qb3J0czIgPSAwOwotCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOworCWxpbmstPnJlc291cmNlWzFdLT5lbmQgPSAwOworCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rKTsKICAgICB9Ci0gICAgZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDEgKyAweDEwOworICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ICsgMHgxMDsKICAgICByZXR1cm4gaTsKIH0KIApAQCAtNjg0LDcgKzY3OSw3IEBACiAKIAkvKiBEb3dubG9hZCB0aGUgU2V2ZW4gb2YgRGlhbW9uZHMgZmlybXdhcmUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZnctPnNpemU7IGkrKykgewotCSAgICBvdXRiKGZ3LT5kYXRhW2ldLCBsaW5rLT5pby5CYXNlUG9ydDEgKyAyKTsKKwkgICAgb3V0Yihmdy0+ZGF0YVtpXSwgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ICsgMik7CiAJICAgIHVkZWxheSg1MCk7CiAJfQogCXJlbGVhc2VfZmlybXdhcmUoZncpOwpAQCAtNzI2LDEyICs3MjEsMTIgQEAKIAkJcmV0dXJuIHJjOwogICAgIH0gZWxzZSBpZiAobWFuZmlkID09IE1BTkZJRF9PU0lURUNIKSB7CiAJLyogTWFrZSBzdXJlIGJvdGggZnVuY3Rpb25zIGFyZSBwb3dlcmVkIHVwICovCi0Jc2V0X2JpdHMoMHgzMDAsIGxpbmstPmlvLkJhc2VQb3J0MSArIE9TSVRFQ0hfQVVJX1BXUik7CisJc2V0X2JpdHMoMHgzMDAsIGxpbmstPnJlc291cmNlWzBdLT5zdGFydCArIE9TSVRFQ0hfQVVJX1BXUik7CiAJLyogTm93LCB0dXJuIG9uIHRoZSBpbnRlcnJ1cHQgZm9yIGJvdGggY2FyZCBmdW5jdGlvbnMgKi8KLQlzZXRfYml0cygweDMwMCwgbGluay0+aW8uQmFzZVBvcnQxICsgT1NJVEVDSF9SRVNFVF9JU1IpOworCXNldF9iaXRzKDB4MzAwLCBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQgKyBPU0lURUNIX1JFU0VUX0lTUik7CiAJZGV2X2RiZygmbGluay0+ZGV2LCAiQVVJL1BXUjogJTQuNHggUkVTRVQvSVNSOiAlNC40eFxuIiwKLQkgICAgICBpbncobGluay0+aW8uQmFzZVBvcnQxICsgT1NJVEVDSF9BVUlfUFdSKSwKLQkgICAgICBpbncobGluay0+aW8uQmFzZVBvcnQxICsgT1NJVEVDSF9SRVNFVF9JU1IpKTsKKwkgICAgICBpbncobGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ICsgT1NJVEVDSF9BVUlfUFdSKSwKKwkgICAgICBpbncobGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ICsgT1NJVEVDSF9SRVNFVF9JU1IpKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBAIC04MDQsNyArNzk5LDcgQEAKICAgICB9CiAKICAgICAvKiBUcnkgc2V0dGluZyBidXMgd2lkdGggKi8KLSAgICB3aWR0aCA9IChsaW5rLT5pby5BdHRyaWJ1dGVzMSA9PSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTyk7CisgICAgd2lkdGggPSAobGluay0+cmVzb3VyY2VbMF0tPmZsYWdzID09IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPKTsKICAgICBzID0gaW5iKGlvYWRkciArIENPTkZJRyk7CiAgICAgaWYgKHdpZHRoKQogCXMgfD0gQ0ZHXzE2QklUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMKaW5kZXggYjZjMzY0NDguLjRlYjZmOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYwpAQCAtODIsNyArODIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L21paS5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KQEAgLTY3OCw5ICs2NzcsOSBAQAogCiAJaWYgKGNmLT5pby5ud2luID4gMCAgJiYgIChjZi0+aW8ud2luWzBdLmJhc2UgJiAweGYpID09IDgpIHsKIAkJZm9yIChpb2FkZHIgPSAweDMwMDsgaW9hZGRyIDwgMHg0MDA7IGlvYWRkciArPSAweDEwKSB7Ci0JCQlwX2Rldi0+aW8uQmFzZVBvcnQyID0gY2YtPmlvLndpblswXS5iYXNlOwotCQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvYWRkcjsKLQkJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKQorCQkJcF9kZXYtPnJlc291cmNlWzFdLT5zdGFydCA9IGNmLT5pby53aW5bMF0uYmFzZTsKKwkJCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBpb2FkZHI7CisJCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2KSkKIAkJCQlyZXR1cm4gMDsKIAkJfQogCX0KQEAgLTY5NywxMSArNjk2LDExIEBACiAJaW50ICpwYXNzID0gcHJpdl9kYXRhOwogCiAJaWYgKGNmLT5pby5ud2luID4gMCAmJiAoY2YtPmlvLndpblswXS5iYXNlICYgMHhmKSA9PSA4KSB7Ci0JCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBjZi0+aW8ud2luWzBdLmJhc2U7Ci0JCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBwX2Rldi0+aW8uQmFzZVBvcnQyCisJCXBfZGV2LT5yZXNvdXJjZVsxXS0+c3RhcnQgPSBjZi0+aW8ud2luWzBdLmJhc2U7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBwX2Rldi0+cmVzb3VyY2VbMV0tPnN0YXJ0CiAJCQkrICgqcGFzcyA/IChjZi0+aW5kZXggJiAweDIwID8gLTI0OjgpCiAJCQkgICA6IChjZi0+aW5kZXggJiAweDIwID8gICA4Oi0yNCkpOwotCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkKKwkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldikpCiAJCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FTk9ERVY7CkBAIC04MDgsOCArODA3LDcgQEAKIAlnb3RvIGZhaWx1cmU7CiAgICAgfQogCi0gICAgbGluay0+aW8uSU9BZGRyTGluZXMgPTEwOwotICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OworICAgIGxpbmstPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7CiAgICAgaWYgKGxvY2FsLT5tb2RlbSkgewogCWludCBwYXNzOwogCkBAIC04MTcsMTYgKzgxNSwxNiBAQAogCSAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKIAkgICAgbGluay0+Y29uZi5TdGF0dXMgfD0gQ0NTUl9BVURJT19FTkE7CiAJfQotCWxpbmstPmlvLk51bVBvcnRzMiA9IDg7Ci0JbGluay0+aW8uQXR0cmlidXRlczIgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwlsaW5rLT5yZXNvdXJjZVsxXS0+ZW5kID0gODsKKwlsaW5rLT5yZXNvdXJjZVsxXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CiAJaWYgKGxvY2FsLT5kaW5nbykgewogCSAgICAvKiBUYWtlIHRoZSBNb2RlbSBJTyBwb3J0IGZyb20gdGhlIENJUyBhbmQgc2NhbiBmb3IgYSBmcmVlCiAJICAgICAqIEV0aGVybmV0IHBvcnQgKi8KLQkgICAgbGluay0+aW8uTnVtUG9ydHMxID0gMTY7IC8qIG5vIE1ha28gc3R1ZmYgYW55bW9yZSAqLworCSAgICBsaW5rLT5yZXNvdXJjZVswXS0+ZW5kID0gMTY7IC8qIG5vIE1ha28gc3R1ZmYgYW55bW9yZSAqLwogCSAgICBpZiAoIXBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCB4aXJjMnBzX2NvbmZpZ19tb2RlbSwgTlVMTCkpCiAJCSAgICBnb3RvIHBvcnRfZm91bmQ7CiAJfSBlbHNlIHsKLQkgICAgbGluay0+aW8uTnVtUG9ydHMxID0gMTg7CisJICAgIGxpbmstPnJlc291cmNlWzBdLT5lbmQgPSAxODsKIAkgICAgLyogV2UgZG8gMiBwYXNzZXMgaGVyZTogVGhlIGZpcnN0IG9uZSB1c2VzIHRoZSByZWd1bGFyIG1hcHBpbmcgYW5kCiAJICAgICAqIHRoZSBzZWNvbmQgdHJpZXMgYWdhaW4sIHRoZXJlYnkgY29uc2lkZXJpbmcgdGhhdCB0aGUgMzIgcG9ydHMgYXJlCiAJICAgICAqIG1pcnJvcmVkIGV2ZXJ5IDMyIGJ5dGVzLiBBY3R1YWxseSB3ZSB1c2UgYSBtaXJyb3JlZCBwb3J0IGZvcgpAQCAtODQxLDE0ICs4MzksMTUgQEAKIAl9CiAJcHJpbnRrKEtOT1RfWElSQyAibm8gcG9ydHMgYXZhaWxhYmxlXG4iKTsKICAgICB9IGVsc2UgewotCWxpbmstPmlvLk51bVBvcnRzMSA9IDE2OworCWxpbmstPmlvX2xpbmVzID0gMTA7CisJbGluay0+cmVzb3VyY2VbMF0tPmVuZCA9IDE2OwogCWZvciAoaW9hZGRyID0gMHgzMDA7IGlvYWRkciA8IDB4NDAwOyBpb2FkZHIgKz0gMHgxMCkgewotCSAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBpb2FkZHI7Ci0JICAgIGlmICghKGVycj1wY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pKSkKKwkgICAgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gaW9hZGRyOworCSAgICBpZiAoIShlcnIgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rKSkpCiAJCWdvdG8gcG9ydF9mb3VuZDsKIAl9Ci0JbGluay0+aW8uQmFzZVBvcnQxID0gMDsgLyogbGV0IENTIGRlY2lkZSAqLwotCWlmICgoZXJyPXBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykpKQorCWxpbmstPnJlc291cmNlWzBdLT5zdGFydCA9IDA7IC8qIGxldCBDUyBkZWNpZGUgKi8KKwlpZiAoKGVyciA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmspKSkKIAkgICAgZ290byBjb25maWdfZXJyb3I7CiAgICAgfQogICBwb3J0X2ZvdW5kOgpAQCAtODcwLDI0ICs4NjksMjEgQEAKIAlnb3RvIGNvbmZpZ19lcnJvcjsKIAogICAgIGlmIChsb2NhbC0+ZGluZ28pIHsKLQljb25mX3JlZ190IHJlZzsKIAl3aW5fcmVxX3QgcmVxOwotCW1lbXJlcV90IG1lbTsKIAogCS8qIFJlc2V0IHRoZSBtb2RlbSdzIEJBUiB0byB0aGUgY29ycmVjdCB2YWx1ZQogCSAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgaW4gdGhlIFJlcXVlc3RDb25maWd1cmF0aW9uIGNhbGwsCiAJICogdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgZXRoZXJuZXQgcG9ydCAoQmFzZVBvcnQxKSBpcyB3cml0dGVuCiAJICogdG8gdGhlIEJBUiByZWdpc3RlcnMgb2YgdGhlIG1vZGVtLgogCSAqLwotCXJlZy5BY3Rpb24gPSBDU19XUklURTsKLQlyZWcuT2Zmc2V0ID0gQ0lTUkVHX0lPQkFTRV8wOwotCXJlZy5WYWx1ZSA9IGxpbmstPmlvLkJhc2VQb3J0MiAmIDB4ZmY7Ci0JaWYgKChlcnIgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluaywgJnJlZykpKQorCWVyciA9IHBjbWNpYV93cml0ZV9jb25maWdfYnl0ZShsaW5rLCBDSVNSRUdfSU9CQVNFXzAsICh1OCkKKwkJCQlsaW5rLT5yZXNvdXJjZVsxXS0+c3RhcnQgJiAweGZmKTsKKwlpZiAoZXJyKQogCSAgICBnb3RvIGNvbmZpZ19lcnJvcjsKLQlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7Ci0JcmVnLk9mZnNldCA9IENJU1JFR19JT0JBU0VfMTsKLQlyZWcuVmFsdWUgPSAobGluay0+aW8uQmFzZVBvcnQyID4+IDgpICYgMHhmZjsKLQlpZiAoKGVyciA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKSkpCisKKwllcnIgPSBwY21jaWFfd3JpdGVfY29uZmlnX2J5dGUobGluaywgQ0lTUkVHX0lPQkFTRV8xLAorCQkJCShsaW5rLT5yZXNvdXJjZVsxXS0+c3RhcnQgPj4gOCkgJiAweGZmKTsKKwlpZiAoZXJyKQogCSAgICBnb3RvIGNvbmZpZ19lcnJvcjsKIAogCS8qIFRoZXJlIGlzIG5vIGNvbmZpZyBlbnRyeSBmb3IgdGhlIEV0aGVybmV0IHBhcnQgd2hpY2gKQEAgLTkwMSwxNiArODk3LDE0IEBACiAJICAgIGdvdG8gY29uZmlnX2Vycm9yOwogCiAJbG9jYWwtPmRpbmdvX2NjciA9IGlvcmVtYXAocmVxLkJhc2UsMHgxMDAwKSArIDB4MDgwMDsKLQltZW0uQ2FyZE9mZnNldCA9IDB4MDsKLQltZW0uUGFnZSA9IDA7Ci0JaWYgKChlcnIgPSBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmssIGxpbmstPndpbiwgJm1lbSkpKQorCWlmICgoZXJyID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsaW5rLT53aW4sIDApKSkKIAkgICAgZ290byBjb25maWdfZXJyb3I7CiAKIAkvKiBTZXR1cCB0aGUgQ0NSczsgdGhlcmUgYXJlIG5vIGluZm9zIGluIHRoZSBDSVMgYWJvdXQgdGhlIEV0aGVybmV0CiAJICogcGFydC4KIAkgKi8KIAl3cml0ZWIoMHg0NywgbG9jYWwtPmRpbmdvX2NjciArIENJU1JFR19DT1IpOwotCWlvYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKwlpb2FkZHIgPSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAJd3JpdGViKGlvYWRkciAmIDB4ZmYJICAsIGxvY2FsLT5kaW5nb19jY3IgKyBDSVNSRUdfSU9CQVNFXzApOwogCXdyaXRlYigoaW9hZGRyID4+IDgpJjB4ZmYgLCBsb2NhbC0+ZGluZ29fY2NyICsgQ0lTUkVHX0lPQkFTRV8xKTsKIApAQCAtOTU3LDcgKzk1MSw3IEBACiAKICAgICAvKiB3ZSBjYW4gbm93IHJlZ2lzdGVyIHRoZSBkZXZpY2Ugd2l0aCB0aGUgbmV0IHN1YnN5c3RlbSAqLwogICAgIGRldi0+aXJxID0gbGluay0+aXJxOwotICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOworICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCiAgICAgaWYgKGxvY2FsLT5kaW5nbykKIAlkb19yZXNldChkZXYsIDEpOyAvKiBhIGtsdWRnZSB0byBtYWtlIHRoZSBjZW01NiB3b3JrICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvYnJvYWRjb20uYyBiL2RyaXZlcnMvbmV0L3BoeS9icm9hZGNvbS5jCmluZGV4IGNlY2RiYmQuLjRhY2NkODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9icm9hZGNvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9icm9hZGNvbS5jCkBAIC02ODUsNyArNjg1LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGJjbTU0MTFfZHJpdmVyID0gewotCS5waHlfaWQJCT0gMHgwMDIwNjA3MCwKKwkucGh5X2lkCQk9IFBIWV9JRF9CQ001NDExLAogCS5waHlfaWRfbWFzawk9IDB4ZmZmZmZmZjAsCiAJLm5hbWUJCT0gIkJyb2FkY29tIEJDTTU0MTEiLAogCS5mZWF0dXJlcwk9IFBIWV9HQklUX0ZFQVRVUkVTIHwKQEAgLTcwMCw3ICs3MDAsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGJjbTU0MjFfZHJpdmVyID0gewotCS5waHlfaWQJCT0gMHgwMDIwNjBlMCwKKwkucGh5X2lkCQk9IFBIWV9JRF9CQ001NDIxLAogCS5waHlfaWRfbWFzawk9IDB4ZmZmZmZmZjAsCiAJLm5hbWUJCT0gIkJyb2FkY29tIEJDTTU0MjEiLAogCS5mZWF0dXJlcwk9IFBIWV9HQklUX0ZFQVRVUkVTIHwKQEAgLTcxNSw3ICs3MTUsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGJjbTU0NjFfZHJpdmVyID0gewotCS5waHlfaWQJCT0gMHgwMDIwNjBjMCwKKwkucGh5X2lkCQk9IFBIWV9JRF9CQ001NDYxLAogCS5waHlfaWRfbWFzawk9IDB4ZmZmZmZmZjAsCiAJLm5hbWUJCT0gIkJyb2FkY29tIEJDTTU0NjEiLAogCS5mZWF0dXJlcwk9IFBIWV9HQklUX0ZFQVRVUkVTIHwKQEAgLTczMCw3ICs3MzAsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGJjbTU0NjRfZHJpdmVyID0gewotCS5waHlfaWQJCT0gMHgwMDIwNjBiMCwKKwkucGh5X2lkCQk9IFBIWV9JRF9CQ001NDY0LAogCS5waHlfaWRfbWFzawk9IDB4ZmZmZmZmZjAsCiAJLm5hbWUJCT0gIkJyb2FkY29tIEJDTTU0NjQiLAogCS5mZWF0dXJlcwk9IFBIWV9HQklUX0ZFQVRVUkVTIHwKQEAgLTc0NSw3ICs3NDUsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGJjbTU0ODFfZHJpdmVyID0gewotCS5waHlfaWQJCT0gMHgwMTQzYmNhMCwKKwkucGh5X2lkCQk9IFBIWV9JRF9CQ001NDgxLAogCS5waHlfaWRfbWFzawk9IDB4ZmZmZmZmZjAsCiAJLm5hbWUJCT0gIkJyb2FkY29tIEJDTTU0ODEiLAogCS5mZWF0dXJlcwk9IFBIWV9HQklUX0ZFQVRVUkVTIHwKQEAgLTc2MCw3ICs3NjAsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGJjbTU0ODJfZHJpdmVyID0gewotCS5waHlfaWQJCT0gMHgwMTQzYmNiMCwKKwkucGh5X2lkCQk9IFBIWV9JRF9CQ001NDgyLAogCS5waHlfaWRfbWFzawk9IDB4ZmZmZmZmZjAsCiAJLm5hbWUJCT0gIkJyb2FkY29tIEJDTTU0ODIiLAogCS5mZWF0dXJlcwk9IFBIWV9HQklUX0ZFQVRVUkVTIHwKQEAgLTgzNCw2ICs4MzQsMjEgQEAKIAkuZHJpdmVyCQk9IHsgLm93bmVyID0gVEhJU19NT0RVTEUgfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBiY201MjQxX2RyaXZlciA9IHsKKwkucGh5X2lkCQk9IFBIWV9JRF9CQ001MjQxLAorCS5waHlfaWRfbWFzawk9IDB4ZmZmZmZmZjAsCisJLm5hbWUJCT0gIkJyb2FkY29tIEJDTTUyNDEiLAorCS5mZWF0dXJlcwk9IFBIWV9CQVNJQ19GRUFUVVJFUyB8CisJCQkgIFNVUFBPUlRFRF9QYXVzZSB8IFNVUFBPUlRFRF9Bc3ltX1BhdXNlLAorCS5mbGFncwkJPSBQSFlfSEFTX01BR0lDQU5FRyB8IFBIWV9IQVNfSU5URVJSVVBULAorCS5jb25maWdfaW5pdAk9IGJyY21fZmV0X2NvbmZpZ19pbml0LAorCS5jb25maWdfYW5lZwk9IGdlbnBoeV9jb25maWdfYW5lZywKKwkucmVhZF9zdGF0dXMJPSBnZW5waHlfcmVhZF9zdGF0dXMsCisJLmFja19pbnRlcnJ1cHQJPSBicmNtX2ZldF9hY2tfaW50ZXJydXB0LAorCS5jb25maWdfaW50cgk9IGJyY21fZmV0X2NvbmZpZ19pbnRyLAorCS5kcml2ZXIJCT0geyAub3duZXIgPSBUSElTX01PRFVMRSB9LAorfTsKKwogc3RhdGljIGludCBfX2luaXQgYnJvYWRjb21faW5pdCh2b2lkKQogewogCWludCByZXQ7CkBAIC04NjgsOCArODgzLDEzIEBACiAJcmV0ID0gcGh5X2RyaXZlcl9yZWdpc3RlcigmYmNtYWMxMzFfZHJpdmVyKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9hYzEzMTsKKwlyZXQgPSBwaHlfZHJpdmVyX3JlZ2lzdGVyKCZiY201MjQxX2RyaXZlcik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfNTI0MTsKIAlyZXR1cm4gcmV0OwogCitvdXRfNTI0MToKKwlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmJjbWFjMTMxX2RyaXZlcik7CiBvdXRfYWMxMzE6CiAJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZiY201Nzc4MF9kcml2ZXIpOwogb3V0XzU3NzgwOgpAQCAtODk0LDYgKzkxNCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBicm9hZGNvbV9leGl0KHZvaWQpCiB7CisJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZiY201MjQxX2RyaXZlcik7CiAJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZiY21hYzEzMV9kcml2ZXIpOwogCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmYmNtNTc3ODBfZHJpdmVyKTsKIAlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmJjbTUwNjEwbV9kcml2ZXIpOwpAQCAtOTEwLDE2ICs5MzEsMTcgQEAKIG1vZHVsZV9leGl0KGJyb2FkY29tX2V4aXQpOwogCiBzdGF0aWMgc3RydWN0IG1kaW9fZGV2aWNlX2lkIGJyb2FkY29tX3RibFtdID0gewotCXsgMHgwMDIwNjA3MCwgMHhmZmZmZmZmMCB9LAotCXsgMHgwMDIwNjBlMCwgMHhmZmZmZmZmMCB9LAotCXsgMHgwMDIwNjBjMCwgMHhmZmZmZmZmMCB9LAotCXsgMHgwMDIwNjBiMCwgMHhmZmZmZmZmMCB9LAotCXsgMHgwMTQzYmNhMCwgMHhmZmZmZmZmMCB9LAotCXsgMHgwMTQzYmNiMCwgMHhmZmZmZmZmMCB9LAorCXsgUEhZX0lEX0JDTTU0MTEsIDB4ZmZmZmZmZjAgfSwKKwl7IFBIWV9JRF9CQ001NDIxLCAweGZmZmZmZmYwIH0sCisJeyBQSFlfSURfQkNNNTQ2MSwgMHhmZmZmZmZmMCB9LAorCXsgUEhZX0lEX0JDTTU0NjQsIDB4ZmZmZmZmZjAgfSwKKwl7IFBIWV9JRF9CQ001NDgyLCAweGZmZmZmZmYwIH0sCisJeyBQSFlfSURfQkNNNTQ4MiwgMHhmZmZmZmZmMCB9LAogCXsgUEhZX0lEX0JDTTUwNjEwLCAweGZmZmZmZmYwIH0sCiAJeyBQSFlfSURfQkNNNTA2MTBNLCAweGZmZmZmZmYwIH0sCiAJeyBQSFlfSURfQkNNNTc3ODAsIDB4ZmZmZmZmZjAgfSwKIAl7IFBIWV9JRF9CQ01BQzEzMSwgMHhmZmZmZmZmMCB9LAorCXsgUEhZX0lEX0JDTTUyNDEsIDB4ZmZmZmZmZjAgfSwKIAl7IH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9pY3BsdXMuYyBiL2RyaXZlcnMvbmV0L3BoeS9pY3BsdXMuYwppbmRleCA0MzlhZGFmLi4zZjI1ODNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvaWNwbHVzLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L2ljcGx1cy5jCkBAIC0xMTYsNiArMTE2LDggQEAKIAkuY29uZmlnX2luaXQJPSAmaXAxNzVjX2NvbmZpZ19pbml0LAogCS5jb25maWdfYW5lZwk9ICZpcDE3NWNfY29uZmlnX2FuZWcsCiAJLnJlYWRfc3RhdHVzCT0gJmlwMTc1Y19yZWFkX3N0YXR1cywKKwkuc3VzcGVuZAk9IGdlbnBoeV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gZ2VucGh5X3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsgLm93bmVyID0gVEhJU19NT0RVTEUsfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLmMgYi9kcml2ZXJzL25ldC9waHkvbWFydmVsbC5jCmluZGV4IDc4Yjc0ZTgzLi4wMTAxZjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbWFydmVsbC5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9taWkuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvbWFydmVsbF9waHkuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KQEAgLTQ4LDggKzQ5LDYgQEAKICNkZWZpbmUgTUlJX00xMTQ1X1JHTUlJX1JYX0RFTEFZCTB4MDA4MAogI2RlZmluZSBNSUlfTTExNDVfUkdNSUlfVFhfREVMQVkJMHgwMDAyCiAKLSNkZWZpbmUgTTExNDVfREVWX0ZMQUdTX1JFU0lTVEFOQ0UJMHgwMDAwMDAwMQotCiAjZGVmaW5lIE1JSV9NMTExMV9QSFlfTEVEX0NPTlRST0wJMHgxOAogI2RlZmluZSBNSUlfTTExMTFfUEhZX0xFRF9ESVJFQ1QJMHg0MTAwCiAjZGVmaW5lIE1JSV9NMTExMV9QSFlfTEVEX0NPTUJJTkUJMHg0MTFjCkBAIC02OSw2ICs2OCwxNSBAQAogI2RlZmluZSBNSUlfTTExMTFfQ09QUEVSCQkwCiAjZGVmaW5lIE1JSV9NMTExMV9GSUJFUgkJCTEKIAorI2RlZmluZSBNSUlfODhFMTEyMV9QSFlfTVNDUl9QQUdFCTIKKyNkZWZpbmUgTUlJXzg4RTExMjFfUEhZX01TQ1JfUkVHCTIxCisjZGVmaW5lIE1JSV84OEUxMTIxX1BIWV9NU0NSX1JYX0RFTEFZCUJJVCg1KQorI2RlZmluZSBNSUlfODhFMTEyMV9QSFlfTVNDUl9UWF9ERUxBWQlCSVQoNCkKKyNkZWZpbmUgTUlJXzg4RTExMjFfUEhZX01TQ1JfREVMQVlfTUFTSwkofigweDMgPDwgNCkpCisKKyNkZWZpbmUgTUlJXzg4RUMwNDhfUEhZX01TQ1IxX1JFRwkxNgorI2RlZmluZSBNSUlfODhFQzA0OF9QSFlfTVNDUjFfUEFEX09ERAlCSVQoNikKKwogI2RlZmluZSBNSUlfODhFMTEyMV9QSFlfTEVEX0NUUkwJMTYKICNkZWZpbmUgTUlJXzg4RTExMjFfUEhZX0xFRF9QQUdFCTMKICNkZWZpbmUgTUlJXzg4RTExMjFfUEhZX0xFRF9ERUYJCTB4MDAzMApAQCAtMTgwLDcgKzE4OCwzMCBAQAogCiBzdGF0aWMgaW50IG04OGUxMTIxX2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7Ci0JaW50IGVyciwgdGVtcDsKKwlpbnQgZXJyLCBvbGRwYWdlLCBtc2NyOworCisJb2xkcGFnZSA9IHBoeV9yZWFkKHBoeWRldiwgTUlJXzg4RTExMjFfUEhZX1BBR0UpOworCisJZXJyID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJXzg4RTExMjFfUEhZX1BBR0UsCisJCQlNSUlfODhFMTEyMV9QSFlfTVNDUl9QQUdFKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwltc2NyID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfODhFMTEyMV9QSFlfTVNDUl9SRUcpICYKKwkJTUlJXzg4RTExMjFfUEhZX01TQ1JfREVMQVlfTUFTSzsKKworCWlmIChwaHlkZXYtPmludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfSUQpCisJCW1zY3IgfD0gKE1JSV84OEUxMTIxX1BIWV9NU0NSX1JYX0RFTEFZIHwKKwkJCSBNSUlfODhFMTEyMV9QSFlfTVNDUl9UWF9ERUxBWSk7CisJZWxzZSBpZiAocGh5ZGV2LT5pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1JYSUQpCisJCW1zY3IgfD0gTUlJXzg4RTExMjFfUEhZX01TQ1JfUlhfREVMQVk7CisJZWxzZSBpZiAocGh5ZGV2LT5pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQpCisJCW1zY3IgfD0gTUlJXzg4RTExMjFfUEhZX01TQ1JfVFhfREVMQVk7CisKKwllcnIgPSBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfODhFMTEyMV9QSFlfTVNDUl9SRUcsIG1zY3IpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJcGh5X3dyaXRlKHBoeWRldiwgTUlJXzg4RTExMjFfUEhZX1BBR0UsIG9sZHBhZ2UpOwogCiAJZXJyID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQpOwogCWlmIChlcnIgPCAwKQpAQCAtMTkxLDE3ICsyMjIsNDIgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCXRlbXAgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV84OEUxMTIxX1BIWV9QQUdFKTsKKwlvbGRwYWdlID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfODhFMTEyMV9QSFlfUEFHRSk7CiAKIAlwaHlfd3JpdGUocGh5ZGV2LCBNSUlfODhFMTEyMV9QSFlfUEFHRSwgTUlJXzg4RTExMjFfUEhZX0xFRF9QQUdFKTsKIAlwaHlfd3JpdGUocGh5ZGV2LCBNSUlfODhFMTEyMV9QSFlfTEVEX0NUUkwsIE1JSV84OEUxMTIxX1BIWV9MRURfREVGKTsKLQlwaHlfd3JpdGUocGh5ZGV2LCBNSUlfODhFMTEyMV9QSFlfUEFHRSwgdGVtcCk7CisJcGh5X3dyaXRlKHBoeWRldiwgTUlJXzg4RTExMjFfUEhZX1BBR0UsIG9sZHBhZ2UpOwogCiAJZXJyID0gZ2VucGh5X2NvbmZpZ19hbmVnKHBoeWRldik7CiAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IG04OGVjMDQ4X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJaW50IGVyciwgb2xkcGFnZSwgbXNjcjsKKworCW9sZHBhZ2UgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV84OEUxMTIxX1BIWV9QQUdFKTsKKworCWVyciA9IHBoeV93cml0ZShwaHlkZXYsIE1JSV84OEUxMTIxX1BIWV9QQUdFLAorCQkJTUlJXzg4RTExMjFfUEhZX01TQ1JfUEFHRSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwltc2NyID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfODhFQzA0OF9QSFlfTVNDUjFfUkVHKTsKKwltc2NyIHw9IE1JSV84OEVDMDQ4X1BIWV9NU0NSMV9QQURfT0REOworCisJZXJyID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJXzg4RTExMjFfUEhZX01TQ1JfUkVHLCBtc2NyKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHBoeV93cml0ZShwaHlkZXYsIE1JSV84OEUxMTIxX1BIWV9QQUdFLCBvbGRwYWdlKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBtODhlMTEyMV9jb25maWdfYW5lZyhwaHlkZXYpOworfQorCiBzdGF0aWMgaW50IG04OGUxMTExX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJaW50IGVycjsKQEAgLTM1MCw3ICs0MDYsMTAgQEAKIAkJcmV0dXJuIGVycjsKIAogCS8qIEFkanVzdCBMRUQgQ29udHJvbCAqLwotCWVyciA9IHBoeV93cml0ZShwaHlkZXYsIDB4MTAsIDB4MDIxZSk7CisJaWYgKHBoeWRldi0+ZGV2X2ZsYWdzICYgTUFSVkVMTF9QSFlfTTExMThfRE5TMzIzX0xFRFMpCisJCWVyciA9IHBoeV93cml0ZShwaHlkZXYsIDB4MTAsIDB4MTEwMCk7CisJZWxzZQorCQllcnIgPSBwaHlfd3JpdGUocGh5ZGV2LCAweDEwLCAweDAyMWUpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCkBAIC0zOTgsNyArNDU3LDcgQEAKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCi0JCWlmIChwaHlkZXYtPmRldl9mbGFncyAmIE0xMTQ1X0RFVl9GTEFHU19SRVNJU1RBTkNFKSB7CisJCWlmIChwaHlkZXYtPmRldl9mbGFncyAmIE1BUlZFTExfUEhZX00xMTQ1X0ZMQUdTX1JFU0lTVEFOQ0UpIHsKIAkJCWVyciA9IHBoeV93cml0ZShwaHlkZXYsIDB4MWQsIDB4MDAxMik7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwpAQCAtNTI5LDggKzU4OCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtYXJ2ZWxsX2RyaXZlcnNbXSA9IHsKIAl7Ci0JCS5waHlfaWQgPSAweDAxNDEwYzYwLAotCQkucGh5X2lkX21hc2sgPSAweGZmZmZmZmYwLAorCQkucGh5X2lkID0gTUFSVkVMTF9QSFlfSURfODhFMTEwMSwKKwkJLnBoeV9pZF9tYXNrID0gTUFSVkVMTF9QSFlfSURfTUFTSywKIAkJLm5hbWUgPSAiTWFydmVsbCA4OEUxMTAxIiwKIAkJLmZlYXR1cmVzID0gUEhZX0dCSVRfRkVBVFVSRVMsCiAJCS5mbGFncyA9IFBIWV9IQVNfSU5URVJSVVBULApAQCAtNTQxLDggKzYwMCw4IEBACiAJCS5kcml2ZXIgPSB7IC5vd25lciA9IFRISVNfTU9EVUxFIH0sCiAJfSwKIAl7Ci0JCS5waHlfaWQgPSAweDAxNDEwYzkwLAotCQkucGh5X2lkX21hc2sgPSAweGZmZmZmZmYwLAorCQkucGh5X2lkID0gTUFSVkVMTF9QSFlfSURfODhFMTExMiwKKwkJLnBoeV9pZF9tYXNrID0gTUFSVkVMTF9QSFlfSURfTUFTSywKIAkJLm5hbWUgPSAiTWFydmVsbCA4OEUxMTEyIiwKIAkJLmZlYXR1cmVzID0gUEhZX0dCSVRfRkVBVFVSRVMsCiAJCS5mbGFncyA9IFBIWV9IQVNfSU5URVJSVVBULApAQCAtNTU0LDggKzYxMyw4IEBACiAJCS5kcml2ZXIgPSB7IC5vd25lciA9IFRISVNfTU9EVUxFIH0sCiAJfSwKIAl7Ci0JCS5waHlfaWQgPSAweDAxNDEwY2MwLAotCQkucGh5X2lkX21hc2sgPSAweGZmZmZmZmYwLAorCQkucGh5X2lkID0gTUFSVkVMTF9QSFlfSURfODhFMTExMSwKKwkJLnBoeV9pZF9tYXNrID0gTUFSVkVMTF9QSFlfSURfTUFTSywKIAkJLm5hbWUgPSAiTWFydmVsbCA4OEUxMTExIiwKIAkJLmZlYXR1cmVzID0gUEhZX0dCSVRfRkVBVFVSRVMsCiAJCS5mbGFncyA9IFBIWV9IQVNfSU5URVJSVVBULApAQCAtNTY3LDggKzYyNiw4IEBACiAJCS5kcml2ZXIgPSB7IC5vd25lciA9IFRISVNfTU9EVUxFIH0sCiAJfSwKIAl7Ci0JCS5waHlfaWQgPSAweDAxNDEwZTEwLAotCQkucGh5X2lkX21hc2sgPSAweGZmZmZmZmYwLAorCQkucGh5X2lkID0gTUFSVkVMTF9QSFlfSURfODhFMTExOCwKKwkJLnBoeV9pZF9tYXNrID0gTUFSVkVMTF9QSFlfSURfTUFTSywKIAkJLm5hbWUgPSAiTWFydmVsbCA4OEUxMTE4IiwKIAkJLmZlYXR1cmVzID0gUEhZX0dCSVRfRkVBVFVSRVMsCiAJCS5mbGFncyA9IFBIWV9IQVNfSU5URVJSVVBULApAQCAtNTgwLDggKzYzOSw4IEBACiAJCS5kcml2ZXIgPSB7Lm93bmVyID0gVEhJU19NT0RVTEUsfSwKIAl9LAogCXsKLQkJLnBoeV9pZCA9IDB4MDE0MTBjYjAsCi0JCS5waHlfaWRfbWFzayA9IDB4ZmZmZmZmZjAsCisJCS5waHlfaWQgPSBNQVJWRUxMX1BIWV9JRF84OEUxMTIxUiwKKwkJLnBoeV9pZF9tYXNrID0gTUFSVkVMTF9QSFlfSURfTUFTSywKIAkJLm5hbWUgPSAiTWFydmVsbCA4OEUxMTIxUiIsCiAJCS5mZWF0dXJlcyA9IFBIWV9HQklUX0ZFQVRVUkVTLAogCQkuZmxhZ3MgPSBQSFlfSEFTX0lOVEVSUlVQVCwKQEAgLTU5Myw4ICs2NTIsMjEgQEAKIAkJLmRyaXZlciA9IHsgLm93bmVyID0gVEhJU19NT0RVTEUgfSwKIAl9LAogCXsKLQkJLnBoeV9pZCA9IDB4MDE0MTBjZDAsCi0JCS5waHlfaWRfbWFzayA9IDB4ZmZmZmZmZjAsCisJCS5waHlfaWQgPSBNQVJWRUxMX1BIWV9JRF84OEVDMDQ4LAorCQkucGh5X2lkX21hc2sgPSBNQVJWRUxMX1BIWV9JRF9NQVNLLAorCQkubmFtZSA9ICJNYXJ2ZWxsIDg4RUMwNDgiLAorCQkuZmVhdHVyZXMgPSBQSFlfR0JJVF9GRUFUVVJFUywKKwkJLmZsYWdzID0gUEhZX0hBU19JTlRFUlJVUFQsCisJCS5jb25maWdfYW5lZyA9ICZtODhlYzA0OF9jb25maWdfYW5lZywKKwkJLnJlYWRfc3RhdHVzID0gJm1hcnZlbGxfcmVhZF9zdGF0dXMsCisJCS5hY2tfaW50ZXJydXB0ID0gJm1hcnZlbGxfYWNrX2ludGVycnVwdCwKKwkJLmNvbmZpZ19pbnRyID0gJm1hcnZlbGxfY29uZmlnX2ludHIsCisJCS5kaWRfaW50ZXJydXB0ID0gJm04OGUxMTIxX2RpZF9pbnRlcnJ1cHQsCisJCS5kcml2ZXIgPSB7IC5vd25lciA9IFRISVNfTU9EVUxFIH0sCisJfSwKKwl7CisJCS5waHlfaWQgPSBNQVJWRUxMX1BIWV9JRF84OEUxMTQ1LAorCQkucGh5X2lkX21hc2sgPSBNQVJWRUxMX1BIWV9JRF9NQVNLLAogCQkubmFtZSA9ICJNYXJ2ZWxsIDg4RTExNDUiLAogCQkuZmVhdHVyZXMgPSBQSFlfR0JJVF9GRUFUVVJFUywKIAkJLmZsYWdzID0gUEhZX0hBU19JTlRFUlJVUFQsCkBAIC02MDYsOCArNjc4LDggQEAKIAkJLmRyaXZlciA9IHsgLm93bmVyID0gVEhJU19NT0RVTEUgfSwKIAl9LAogCXsKLQkJLnBoeV9pZCA9IDB4MDE0MTBlMzAsCi0JCS5waHlfaWRfbWFzayA9IDB4ZmZmZmZmZjAsCisJCS5waHlfaWQgPSBNQVJWRUxMX1BIWV9JRF84OEUxMjQwLAorCQkucGh5X2lkX21hc2sgPSBNQVJWRUxMX1BIWV9JRF9NQVNLLAogCQkubmFtZSA9ICJNYXJ2ZWxsIDg4RTEyNDAiLAogCQkuZmVhdHVyZXMgPSBQSFlfR0JJVF9GRUFUVVJFUywKIAkJLmZsYWdzID0gUEhZX0hBU19JTlRFUlJVUFQsCkBAIC02NTcsNiArNzI5LDcgQEAKIAl7IDB4MDE0MTBjYjAsIDB4ZmZmZmZmZjAgfSwKIAl7IDB4MDE0MTBjZDAsIDB4ZmZmZmZmZjAgfSwKIAl7IDB4MDE0MTBlMzAsIDB4ZmZmZmZmZjAgfSwKKwl7IDB4MDE0MTBlOTAsIDB4ZmZmZmZmZjAgfSwKIAl7IH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvLW9jdGVvbi5jIGIvZHJpdmVycy9uZXQvcGh5L21kaW8tb2N0ZW9uLmMKaW5kZXggZjQ0M2Q0My4uYmQxMmJhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L21kaW8tb2N0ZW9uLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L21kaW8tb2N0ZW9uLmMKQEAgLTg1LDcgKzg1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgb2N0ZW9uX21kaW9idXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IG9jdGVvbl9tZGlvYnVzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG9jdGVvbl9tZGlvYnVzICpidXM7CiAJdW5pb24gY3ZteF9zbWl4X2VuIHNtaV9lbjsKQEAgLTE0Myw3ICsxNDMsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgX19leGl0IG9jdGVvbl9tZGlvYnVzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgb2N0ZW9uX21kaW9idXNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG9jdGVvbl9tZGlvYnVzICpidXM7CiAJdW5pb24gY3ZteF9zbWl4X2VuIHNtaV9lbjsKQEAgLTE2Myw3ICsxNjMsNyBAQAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJfSwKIAkucHJvYmUJCT0gb2N0ZW9uX21kaW9idXNfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2V4aXRfcChvY3Rlb25fbWRpb2J1c19yZW1vdmUpLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aob2N0ZW9uX21kaW9idXNfcmVtb3ZlKSwKIH07CiAKIHZvaWQgb2N0ZW9uX21kaW9idXNfZm9yY2VfbW9kX2RlcGVuY2VuY3kodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9taWNyZWwuYyBiL2RyaXZlcnMvbmV0L3BoeS9taWNyZWwuYwppbmRleCAwNjkyZjc1Li44YmI3ZGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbWljcmVsLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L21pY3JlbC5jCkBAIC0xMiw3ICsxMiw4IEBACiAgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogU3VwcG9ydCA6IGtzejkwMjEgLCB2c2M4MjAxLCBrczgwMDEKKyAqIFN1cHBvcnQgOiBrc3o5MDIxIDEwMDAvMTAwLzEwIHBoeSBmcm9tIE1pY3JlbAorICoJCWtzODAwMSwga3M4NzM3LCBrczg3MjEsIGtzODA0MSwga3M4MDUxIDEwMC8xMCBwaHkKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yMCwzNyArMjEsMTQ2IEBACiAjaW5jbHVkZSA8bGludXgvcGh5Lmg+CiAKICNkZWZpbmUJUEhZX0lEX0tTWjkwMjEJCQkweDAwMjIxNjExCi0jZGVmaW5lCVBIWV9JRF9WU0M4MjAxCQkJMHgwMDBGQzQxMworI2RlZmluZQlQSFlfSURfS1M4NzM3CQkJMHgwMDIyMTcyMAorI2RlZmluZQlQSFlfSURfS1M4MDQxCQkJMHgwMDIyMTUxMAorI2RlZmluZQlQSFlfSURfS1M4MDUxCQkJMHgwMDIyMTU1MAorLyogYm90aCBmb3Iga3M4MDAxIFJldi4gQS9CLCBhbmQgZm9yIGtzODcyMSBSZXYgMy4gKi8KICNkZWZpbmUJUEhZX0lEX0tTODAwMQkJCTB4MDAyMjE2MUEKIAorLyogZ2VuZXJhbCBJbnRlcnJ1cHQgY29udHJvbC9zdGF0dXMgcmVnIGluIHZlbmRvciBzcGVjaWZpYyBibG9jay4gKi8KKyNkZWZpbmUgTUlJX0tTWlBIWV9JTlRDUwkJCTB4MUIKKyNkZWZpbmUJS1NaUEhZX0lOVENTX0pBQkJFUgkJCSgxIDw8IDE1KQorI2RlZmluZQlLU1pQSFlfSU5UQ1NfUkVDRUlWRV9FUlIJCSgxIDw8IDE0KQorI2RlZmluZQlLU1pQSFlfSU5UQ1NfUEFHRV9SRUNFSVZFCQkoMSA8PCAxMykKKyNkZWZpbmUJS1NaUEhZX0lOVENTX1BBUkVMTEVMCQkJKDEgPDwgMTIpCisjZGVmaW5lCUtTWlBIWV9JTlRDU19MSU5LX1BBUlRORVJfQUNLCQkoMSA8PCAxMSkKKyNkZWZpbmUJS1NaUEhZX0lOVENTX0xJTktfRE9XTgkJCSgxIDw8IDEwKQorI2RlZmluZQlLU1pQSFlfSU5UQ1NfUkVNT1RFX0ZBVUxUCQkoMSA8PCA5KQorI2RlZmluZQlLU1pQSFlfSU5UQ1NfTElOS19VUAkJCSgxIDw8IDgpCisjZGVmaW5lCUtTWlBIWV9JTlRDU19BTEwJCQkoS1NaUEhZX0lOVENTX0xJTktfVVAgfFwKKwkJCQkJCUtTWlBIWV9JTlRDU19MSU5LX0RPV04pCisKKy8qIGdlbmVyYWwgUEhZIGNvbnRyb2wgcmVnIGluIHZlbmRvciBzcGVjaWZpYyBibG9jay4gKi8KKyNkZWZpbmUJTUlJX0tTWlBIWV9DVFJMCQkJMHgxRgorLyogYml0bWFwIG9mIFBIWSByZWdpc3RlciB0byBzZXQgaW50ZXJydXB0IG1vZGUgKi8KKyNkZWZpbmUgS1NaUEhZX0NUUkxfSU5UX0FDVElWRV9ISUdICQkoMSA8PCA5KQorI2RlZmluZSBLU1o5MDIxX0NUUkxfSU5UX0FDVElWRV9ISUdICQkoMSA8PCAxNCkKKyNkZWZpbmUgS1M4NzM3X0NUUkxfSU5UX0FDVElWRV9ISUdICQkoMSA8PCAxNCkKKworc3RhdGljIGludCBrc3pwaHlfYWNrX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCS8qIGJpdFs3Li4wXSBpbnQgc3RhdHVzLCB3aGljaCBpcyBhIHJlYWQgYW5kIGNsZWFyIHJlZ2lzdGVyLiAqLworCWludCByYzsKKworCXJjID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfS1NaUEhZX0lOVENTKTsKKworCXJldHVybiAocmMgPCAwKSA/IHJjIDogMDsKK30KKworc3RhdGljIGludCBrc3pwaHlfc2V0X2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCWludCB0ZW1wOworCXRlbXAgPSAoUEhZX0lOVEVSUlVQVF9FTkFCTEVEID09IHBoeWRldi0+aW50ZXJydXB0cykgPworCQlLU1pQSFlfSU5UQ1NfQUxMIDogMDsKKwlyZXR1cm4gcGh5X3dyaXRlKHBoeWRldiwgTUlJX0tTWlBIWV9JTlRDUywgdGVtcCk7Cit9CisKK3N0YXRpYyBpbnQga3N6cGh5X2NvbmZpZ19pbnRyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJaW50IHRlbXAsIHJjOworCisJLyogc2V0IHRoZSBpbnRlcnJ1cHQgcGluIGFjdGl2ZSBsb3cgKi8KKwl0ZW1wID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfS1NaUEhZX0NUUkwpOworCXRlbXAgJj0gfktTWlBIWV9DVFJMX0lOVF9BQ1RJVkVfSElHSDsKKwlwaHlfd3JpdGUocGh5ZGV2LCBNSUlfS1NaUEhZX0NUUkwsIHRlbXApOworCXJjID0ga3N6cGh5X3NldF9pbnRlcnJ1cHQocGh5ZGV2KTsKKwlyZXR1cm4gcmMgPCAwID8gcmMgOiAwOworfQorCitzdGF0aWMgaW50IGtzejkwMjFfY29uZmlnX2ludHIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKK3sKKwlpbnQgdGVtcCwgcmM7CisKKwkvKiBzZXQgdGhlIGludGVycnVwdCBwaW4gYWN0aXZlIGxvdyAqLworCXRlbXAgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9LU1pQSFlfQ1RSTCk7CisJdGVtcCAmPSB+S1NaOTAyMV9DVFJMX0lOVF9BQ1RJVkVfSElHSDsKKwlwaHlfd3JpdGUocGh5ZGV2LCBNSUlfS1NaUEhZX0NUUkwsIHRlbXApOworCXJjID0ga3N6cGh5X3NldF9pbnRlcnJ1cHQocGh5ZGV2KTsKKwlyZXR1cm4gcmMgPCAwID8gcmMgOiAwOworfQorCitzdGF0aWMgaW50IGtzODczN19jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCWludCB0ZW1wLCByYzsKKworCS8qIHNldCB0aGUgaW50ZXJydXB0IHBpbiBhY3RpdmUgbG93ICovCisJdGVtcCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0tTWlBIWV9DVFJMKTsKKwl0ZW1wICY9IH5LUzg3MzdfQ1RSTF9JTlRfQUNUSVZFX0hJR0g7CisJcGh5X3dyaXRlKHBoeWRldiwgTUlJX0tTWlBIWV9DVFJMLCB0ZW1wKTsKKwlyYyA9IGtzenBoeV9zZXRfaW50ZXJydXB0KHBoeWRldik7CisJcmV0dXJuIHJjIDwgMCA/IHJjIDogMDsKK30KIAogc3RhdGljIGludCBrc3pwaHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIga3M4MDAxX2RyaXZlciA9IHsKLQkucGh5X2lkCQk9IFBIWV9JRF9LUzgwMDEsCi0JLm5hbWUJCT0gIk1pY3JlbCBLUzgwMDEiLAorc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGtzODczN19kcml2ZXIgPSB7CisJLnBoeV9pZAkJPSBQSFlfSURfS1M4NzM3LAogCS5waHlfaWRfbWFzawk9IDB4MDBmZmZmZjAsCi0JLmZlYXR1cmVzCT0gUEhZX0JBU0lDX0ZFQVRVUkVTLAotCS5mbGFncwkJPSBQSFlfUE9MTCwKKwkubmFtZQkJPSAiTWljcmVsIEtTODczNyIsCisJLmZlYXR1cmVzCT0gKFBIWV9CQVNJQ19GRUFUVVJFUyB8IFNVUFBPUlRFRF9QYXVzZSksCisJLmZsYWdzCQk9IFBIWV9IQVNfTUFHSUNBTkVHIHwgUEhZX0hBU19JTlRFUlJVUFQsCiAJLmNvbmZpZ19pbml0CT0ga3N6cGh5X2NvbmZpZ19pbml0LAogCS5jb25maWdfYW5lZwk9IGdlbnBoeV9jb25maWdfYW5lZywKIAkucmVhZF9zdGF0dXMJPSBnZW5waHlfcmVhZF9zdGF0dXMsCisJLmFja19pbnRlcnJ1cHQJPSBrc3pwaHlfYWNrX2ludGVycnVwdCwKKwkuY29uZmlnX2ludHIJPSBrczg3MzdfY29uZmlnX2ludHIsCiAJLmRyaXZlcgkJPSB7IC5vd25lciA9IFRISVNfTU9EVUxFLH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgdnNjODIwMV9kcml2ZXIgPSB7Ci0JLnBoeV9pZAkJPSBQSFlfSURfVlNDODIwMSwKLQkubmFtZQkJPSAiTWljcmVsIFZTQzgyMDEiLAorc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGtzODA0MV9kcml2ZXIgPSB7CisJLnBoeV9pZAkJPSBQSFlfSURfS1M4MDQxLAogCS5waHlfaWRfbWFzawk9IDB4MDBmZmZmZjAsCi0JLmZlYXR1cmVzCT0gUEhZX0JBU0lDX0ZFQVRVUkVTLAotCS5mbGFncwkJPSBQSFlfUE9MTCwKKwkubmFtZQkJPSAiTWljcmVsIEtTODA0MSIsCisJLmZlYXR1cmVzCT0gKFBIWV9CQVNJQ19GRUFUVVJFUyB8IFNVUFBPUlRFRF9QYXVzZQorCQkJCXwgU1VQUE9SVEVEX0FzeW1fUGF1c2UpLAorCS5mbGFncwkJPSBQSFlfSEFTX01BR0lDQU5FRyB8IFBIWV9IQVNfSU5URVJSVVBULAogCS5jb25maWdfaW5pdAk9IGtzenBoeV9jb25maWdfaW5pdCwKIAkuY29uZmlnX2FuZWcJPSBnZW5waHlfY29uZmlnX2FuZWcsCiAJLnJlYWRfc3RhdHVzCT0gZ2VucGh5X3JlYWRfc3RhdHVzLAorCS5hY2tfaW50ZXJydXB0CT0ga3N6cGh5X2Fja19pbnRlcnJ1cHQsCisJLmNvbmZpZ19pbnRyCT0ga3N6cGh5X2NvbmZpZ19pbnRyLAorCS5kcml2ZXIJCT0geyAub3duZXIgPSBUSElTX01PRFVMRSx9LAorfTsKKworc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGtzODA1MV9kcml2ZXIgPSB7CisJLnBoeV9pZAkJPSBQSFlfSURfS1M4MDUxLAorCS5waHlfaWRfbWFzawk9IDB4MDBmZmZmZjAsCisJLm5hbWUJCT0gIk1pY3JlbCBLUzgwNTEiLAorCS5mZWF0dXJlcwk9IChQSFlfQkFTSUNfRkVBVFVSRVMgfCBTVVBQT1JURURfUGF1c2UKKwkJCQl8IFNVUFBPUlRFRF9Bc3ltX1BhdXNlKSwKKwkuZmxhZ3MJCT0gUEhZX0hBU19NQUdJQ0FORUcgfCBQSFlfSEFTX0lOVEVSUlVQVCwKKwkuY29uZmlnX2luaXQJPSBrc3pwaHlfY29uZmlnX2luaXQsCisJLmNvbmZpZ19hbmVnCT0gZ2VucGh5X2NvbmZpZ19hbmVnLAorCS5yZWFkX3N0YXR1cwk9IGdlbnBoeV9yZWFkX3N0YXR1cywKKwkuYWNrX2ludGVycnVwdAk9IGtzenBoeV9hY2tfaW50ZXJydXB0LAorCS5jb25maWdfaW50cgk9IGtzenBoeV9jb25maWdfaW50ciwKKwkuZHJpdmVyCQk9IHsgLm93bmVyID0gVEhJU19NT0RVTEUsfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBrczgwMDFfZHJpdmVyID0geworCS5waHlfaWQJCT0gUEhZX0lEX0tTODAwMSwKKwkubmFtZQkJPSAiTWljcmVsIEtTODAwMSBvciBLUzg3MjEiLAorCS5waHlfaWRfbWFzawk9IDB4MDBmZmZmZjAsCisJLmZlYXR1cmVzCT0gKFBIWV9CQVNJQ19GRUFUVVJFUyB8IFNVUFBPUlRFRF9QYXVzZSksCisJLmZsYWdzCQk9IFBIWV9IQVNfTUFHSUNBTkVHIHwgUEhZX0hBU19JTlRFUlJVUFQsCisJLmNvbmZpZ19pbml0CT0ga3N6cGh5X2NvbmZpZ19pbml0LAorCS5jb25maWdfYW5lZwk9IGdlbnBoeV9jb25maWdfYW5lZywKKwkucmVhZF9zdGF0dXMJPSBnZW5waHlfcmVhZF9zdGF0dXMsCisJLmFja19pbnRlcnJ1cHQJPSBrc3pwaHlfYWNrX2ludGVycnVwdCwKKwkuY29uZmlnX2ludHIJPSBrc3pwaHlfY29uZmlnX2ludHIsCiAJLmRyaXZlcgkJPSB7IC5vd25lciA9IFRISVNfTU9EVUxFLH0sCiB9OwogCkBAIC01OCwxMSArMTY4LDE0IEBACiAJLnBoeV9pZAkJPSBQSFlfSURfS1NaOTAyMSwKIAkucGh5X2lkX21hc2sJPSAweDAwMGZmZjEwLAogCS5uYW1lCQk9ICJNaWNyZWwgS1NaOTAyMSBHaWdhYml0IFBIWSIsCi0JLmZlYXR1cmVzCT0gUEhZX0dCSVRfRkVBVFVSRVMgfCBTVVBQT1JURURfUGF1c2UsCi0JLmZsYWdzCQk9IFBIWV9QT0xMLAorCS5mZWF0dXJlcwk9IChQSFlfR0JJVF9GRUFUVVJFUyB8IFNVUFBPUlRFRF9QYXVzZQorCQkJCXwgU1VQUE9SVEVEX0FzeW1fUGF1c2UpLAorCS5mbGFncwkJPSBQSFlfSEFTX01BR0lDQU5FRyB8IFBIWV9IQVNfSU5URVJSVVBULAogCS5jb25maWdfaW5pdAk9IGtzenBoeV9jb25maWdfaW5pdCwKIAkuY29uZmlnX2FuZWcJPSBnZW5waHlfY29uZmlnX2FuZWcsCiAJLnJlYWRfc3RhdHVzCT0gZ2VucGh5X3JlYWRfc3RhdHVzLAorCS5hY2tfaW50ZXJydXB0CT0ga3N6cGh5X2Fja19pbnRlcnJ1cHQsCisJLmNvbmZpZ19pbnRyCT0ga3N6OTAyMV9jb25maWdfaW50ciwKIAkuZHJpdmVyCQk9IHsgLm93bmVyID0gVEhJU19NT0RVTEUsIH0sCiB9OwogCkBAIC03MywxNyArMTg2LDI5IEBACiAJcmV0ID0gcGh5X2RyaXZlcl9yZWdpc3Rlcigma3M4MDAxX2RyaXZlcik7CiAJaWYgKHJldCkKIAkJZ290byBlcnIxOwotCXJldCA9IHBoeV9kcml2ZXJfcmVnaXN0ZXIoJnZzYzgyMDFfZHJpdmVyKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjI7CiAKIAlyZXQgPSBwaHlfZHJpdmVyX3JlZ2lzdGVyKCZrc3o5MDIxX2RyaXZlcik7CiAJaWYgKHJldCkKKwkJZ290byBlcnIyOworCisJcmV0ID0gcGh5X2RyaXZlcl9yZWdpc3Rlcigma3M4NzM3X2RyaXZlcik7CisJaWYgKHJldCkKIAkJZ290byBlcnIzOworCXJldCA9IHBoeV9kcml2ZXJfcmVnaXN0ZXIoJmtzODA0MV9kcml2ZXIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyNDsKKwlyZXQgPSBwaHlfZHJpdmVyX3JlZ2lzdGVyKCZrczgwNTFfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjU7CisKIAlyZXR1cm4gMDsKIAorZXJyNToKKwlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmtzODA0MV9kcml2ZXIpOworZXJyNDoKKwlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmtzODczN19kcml2ZXIpOwogZXJyMzoKLQlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJnZzYzgyMDFfZHJpdmVyKTsKKwlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmtzejkwMjFfZHJpdmVyKTsKIGVycjI6CiAJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZrczgwMDFfZHJpdmVyKTsKIGVycjE6CkBAIC05Myw4ICsyMTgsMTAgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBrc3BoeV9leGl0KHZvaWQpCiB7CiAJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZrczgwMDFfZHJpdmVyKTsKLQlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJnZzYzgyMDFfZHJpdmVyKTsKKwlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmtzODczN19kcml2ZXIpOwogCXBoeV9kcml2ZXJfdW5yZWdpc3Rlcigma3N6OTAyMV9kcml2ZXIpOworCXBoeV9kcml2ZXJfdW5yZWdpc3Rlcigma3M4MDQxX2RyaXZlcik7CisJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZrczgwNTFfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoa3NwaHlfaW5pdCk7CkBAIC0xMDYsOCArMjMzLDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgbWljcmVsX3RibFtdID0gewogCXsgUEhZX0lEX0tTWjkwMjEsIDB4MDAwZmZmMTAgfSwKLQl7IFBIWV9JRF9WU0M4MjAxLCAweDAwZmZmZmYwIH0sCiAJeyBQSFlfSURfS1M4MDAxLCAweDAwZmZmZmYwIH0sCisJeyBQSFlfSURfS1M4NzM3LCAweDAwZmZmZmYwIH0sCisJeyBQSFlfSURfS1M4MDQxLCAweDAwZmZmZmYwIH0sCisJeyBQSFlfSURfS1M4MDUxLCAweDAwZmZmZmYwIH0sCiAJeyB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LmMKaW5kZXggNjRiZTQ2Ni4uNTEzMGRiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHkuYwpAQCAtMzA5LDggKzMwOSw5IEBACiAgKiBjdXJyZW50IHN0YXRlLiAgVXNlIGF0IG93biByaXNrLgogICovCiBpbnQgcGh5X21paV9pb2N0bChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAotCQlzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgKm1paV9kYXRhLCBpbnQgY21kKQorCQlzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKIHsKKwlzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgKm1paV9kYXRhID0gaWZfbWlpKGlmcik7CiAJdTE2IHZhbCA9IG1paV9kYXRhLT52YWxfaW47CiAKIAlzd2l0Y2ggKGNtZCkgewpAQCAtMzYwLDYgKzM2MSwxMSBAQAogCQl9CiAJCWJyZWFrOwogCisJY2FzZSBTSU9DU0hXVFNUQU1QOgorCQlpZiAocGh5ZGV2LT5kcnYtPmh3dHN0YW1wKQorCQkJcmV0dXJuIHBoeWRldi0+ZHJ2LT5od3RzdGFtcChwaHlkZXYsIGlmcik7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCmluZGV4IDFhOTliYjIuLmMwNzYxMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwpAQCAtNDYwLDYgKzQ2MCw3IEBACiAJfQogCiAJcGh5ZGV2LT5hdHRhY2hlZF9kZXYgPSBkZXY7CisJZGV2LT5waHlkZXYgPSBwaHlkZXY7CiAKIAlwaHlkZXYtPmRldl9mbGFncyA9IGZsYWdzOwogCkBAIC01MTMsNiArNTE0LDcgQEAKICAqLwogdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CisJcGh5ZGV2LT5hdHRhY2hlZF9kZXYtPnBoeWRldiA9IE5VTEw7CiAJcGh5ZGV2LT5hdHRhY2hlZF9kZXYgPSBOVUxMOwogCiAJLyogSWYgdGhlIGRldmljZSBoYWQgbm8gc3BlY2lmaWMgZHJpdmVyIGJlZm9yZSAoaS5lLiAtIGl0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYwppbmRleCAxYjJjMjkxLi42Njk1YTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgpAQCAtNjksNyArNjgsNiBAQAogCiAjZGVmaW5lIE1QSERSTEVOCTYJLyogbXVsdGlsaW5rIHByb3RvY29sIGhlYWRlciBsZW5ndGggKi8KICNkZWZpbmUgTVBIRFJMRU5fU1NOCTQJLyogZGl0dG8gd2l0aCBzaG9ydCBzZXF1ZW5jZSBudW1iZXJzICovCi0jZGVmaW5lIE1JTl9GUkFHX1NJWkUJNjQKIAogLyoKICAqIEFuIGluc3RhbmNlIG9mIC9kZXYvcHBwIGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggZWl0aGVyIGEgcHBwCkBAIC0xODEsNiArMTc5LDcgQEAKICAqIGNoYW5uZWwuZG93bmwuCiAgKi8KIAorc3RhdGljIERFRklORV9NVVRFWChwcHBfbXV0ZXgpOwogc3RhdGljIGF0b21pY190IHBwcF91bml0X2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7CiBzdGF0aWMgYXRvbWljX3QgY2hhbm5lbF9jb3VudCA9IEFUT01JQ19JTklUKDApOwogCkBAIC0zNjMsNyArMzYyLDYgQEAKICAqLwogc3RhdGljIGludCBwcHBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQljeWNsZV9rZXJuZWxfbG9jaygpOwogCS8qCiAJICogVGhpcyBjb3VsZCAoc2hvdWxkPykgYmUgZW5mb3JjZWQgYnkgdGhlIHBlcm1pc3Npb25zIG9uIC9kZXYvcHBwLgogCSAqLwpAQCAtNTM5LDE0ICs1MzcsOSBAQAogCX0KIAogCWxlbiA9IHVwcm9nLmxlbiAqIHNpemVvZihzdHJ1Y3Qgc29ja19maWx0ZXIpOwotCWNvZGUgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNvZGUgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoY29kZSwgdXByb2cuZmlsdGVyLCBsZW4pKSB7Ci0JCWtmcmVlKGNvZGUpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9CisJY29kZSA9IG1lbWR1cF91c2VyKHVwcm9nLmZpbHRlciwgbGVuKTsKKwlpZiAoSVNfRVJSKGNvZGUpKQorCQlyZXR1cm4gUFRSX0VSUihjb2RlKTsKIAogCWVyciA9IHNrX2Noa19maWx0ZXIoY29kZSwgdXByb2cubGVuKTsKIAlpZiAoZXJyKSB7CkBAIC01ODgsNyArNTgxLDcgQEAKIAkJICogdGhpcyBmZCBhbmQgcmVvcGVuaW5nIC9kZXYvcHBwLgogCQkgKi8KIAkJZXJyID0gLUVJTlZBTDsKLQkJbG9ja19rZXJuZWwoKTsKKwkJbXV0ZXhfbG9jaygmcHBwX211dGV4KTsKIAkJaWYgKHBmLT5raW5kID09IElOVEVSRkFDRSkgewogCQkJcHBwID0gUEZfVE9fUFBQKHBmKTsKIAkJCWlmIChmaWxlID09IHBwcC0+b3duZXIpCkBAIC02MDAsNyArNTkzLDcgQEAKIAkJfSBlbHNlCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiUFBQSU9DREVUQUNIIGZpbGUtPmZfY291bnQ9JWxkXG4iLAogCQkJICAgICAgIGF0b21pY19sb25nX3JlYWQoJmZpbGUtPmZfY291bnQpKTsKLQkJdW5sb2NrX2tlcm5lbCgpOworCQltdXRleF91bmxvY2soJnBwcF9tdXRleCk7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC02MDgsNyArNjAxLDcgQEAKIAkJc3RydWN0IGNoYW5uZWwgKnBjaDsKIAkJc3RydWN0IHBwcF9jaGFubmVsICpjaGFuOwogCi0JCWxvY2tfa2VybmVsKCk7CisJCW11dGV4X2xvY2soJnBwcF9tdXRleCk7CiAJCXBjaCA9IFBGX1RPX0NIQU5ORUwocGYpOwogCiAJCXN3aXRjaCAoY21kKSB7CkBAIC02MzAsNyArNjIzLDcgQEAKIAkJCQllcnIgPSBjaGFuLT5vcHMtPmlvY3RsKGNoYW4sIGNtZCwgYXJnKTsKIAkJCXVwX3JlYWQoJnBjaC0+Y2hhbl9zZW0pOwogCQl9Ci0JCXVubG9ja19rZXJuZWwoKTsKKwkJbXV0ZXhfdW5sb2NrKCZwcHBfbXV0ZXgpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtNjQwLDcgKzYzMyw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmcHBwX211dGV4KTsKIAlwcHAgPSBQRl9UT19QUFAocGYpOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBQUFBJT0NTTVJVOgpAQCAtNzg4LDcgKzc4MSw3IEBACiAJZGVmYXVsdDoKIAkJZXJyID0gLUVOT1RUWTsKIAl9Ci0JdW5sb2NrX2tlcm5lbCgpOworCW11dGV4X3VubG9jaygmcHBwX211dGV4KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC04MDEsNyArNzk0LDcgQEAKIAlzdHJ1Y3QgcHBwX25ldCAqcG47CiAJaW50IF9fdXNlciAqcCA9IChpbnQgX191c2VyICopYXJnOwogCi0JbG9ja19rZXJuZWwoKTsKKwltdXRleF9sb2NrKCZwcHBfbXV0ZXgpOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBQUFBJT0NORVdVTklUOgogCQkvKiBDcmVhdGUgYSBuZXcgcHBwIHVuaXQgKi8KQEAgLTg1Miw3ICs4NDUsNyBAQAogCWRlZmF1bHQ6CiAJCWVyciA9IC1FTk9UVFk7CiAJfQotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJnBwcF9tdXRleCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTkzMyw5ICsxOTI2LDkgQEAKIAkvKiBJZiB0aGUgcXVldWUgaXMgZ2V0dGluZyBsb25nLCBkb24ndCB3YWl0IGFueSBsb25nZXIgZm9yIHBhY2tldHMKIAkgICBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBxdWV1ZS4gKi8KIAlpZiAoc2tiX3F1ZXVlX2xlbigmcHBwLT5tcnEpID49IFBQUF9NUF9NQVhfUUxFTikgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX3BlZWsoJnBwcC0+bXJxKTsKLQkJaWYgKHNlcV9iZWZvcmUocHBwLT5taW5zZXEsIHNrYi0+c2VxdWVuY2UpKQotCQkJcHBwLT5taW5zZXEgPSBza2ItPnNlcXVlbmNlOworCQlzdHJ1Y3Qgc2tfYnVmZiAqbXNrYiA9IHNrYl9wZWVrKCZwcHAtPm1ycSk7CisJCWlmIChzZXFfYmVmb3JlKHBwcC0+bWluc2VxLCBtc2tiLT5zZXF1ZW5jZSkpCisJCQlwcHAtPm1pbnNlcSA9IG1za2ItPnNlcXVlbmNlOwogCX0KIAogCS8qIFB1bGwgY29tcGxldGVkIHBhY2tldHMgb2ZmIHRoZSBxdWV1ZSBhbmQgcmVjZWl2ZSB0aGVtLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcG9lLmMKaW5kZXggODA1YjY0ZC4uMzQ0ZWYzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwb2UuYworKysgYi9kcml2ZXJzL25ldC9wcHBvZS5jCkBAIC04OSw3ICs4OSw2IEBACiAjZGVmaW5lIFBQUE9FX0hBU0hfU0laRSAoMSA8PCBQUFBPRV9IQVNIX0JJVFMpCiAjZGVmaW5lIFBQUE9FX0hBU0hfTUFTSwkoUFBQT0VfSEFTSF9TSVpFIC0gMSkKIAotc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBzdGF0aWMgaW50IF9fcHBwb2VfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHBvZV9vcHM7CkBAIC05NDksNyArOTQ4LDcgQEAKIAogYWJvcnQ6CiAJa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIDA7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzM19nZWxpY193aXJlbGVzcy5oIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmgKaW5kZXggMGE4OGI1My4uZjdlNTFiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmgKKysrIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmgKQEAgLTc0LDcgKzc0LDcgQEAKIAl1MTYgYnNzX3R5cGU7ICAgIC8qIGluZnJhIG9yIGFkaG9jICovCiAJdTE2IGF1dGhfbWV0aG9kOyAvKiBzaGFyZWQga2V5IG9yIG9wZW4gKi8KIAl1MTYgb3BfbW9kZTsgLyogQi9HICovCi19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogCiAvKiBmb3IgR0VMSUNfRVVSVVNfQ01EX1dFUF9DRkcgKi8KQEAgLTg4LDcgKzg4LDcgQEAKIAkvKiBhbGwgZmllbGRzIGFyZSBiaWcgZW5kaWFuICovCiAJdTE2IHNlY3VyaXR5OwogCXU4IGtleVs0XVsxNl07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogZm9yIEdFTElDX0VVUlVTX0NNRF9XUEFfQ0ZHICovCiBlbnVtIGdlbGljX2V1cnVzX3dwYV9zZWN1cml0eSB7CkBAIC0xMjAsNyArMTIwLDcgQEAKIAl1MTYgc2VjdXJpdHk7CiAJdTE2IHBza190eXBlOyAvKiBwc2sga2V5IGVuY29kaW5nIHR5cGUgKi8KIAl1OCBwc2tbR0VMSUNfV0xfRVVSVVNfUFNLX01BWF9MRU5dOyAvKiBwc2sga2V5OyBoZXggb3IgcGFzc3BocmFzZSAqLwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIGZvciBHRUxJQ19FVVJVU19DTURfe1NUQVJULEdFVH1fU0NBTiAqLwogZW51bSBnZWxpY19ldXJ1c19zY2FuX2NhcGFiaWxpdHkgewpAQCAtMTcxLDcgKzE3MSw3IEBACiAJX19iZTMyIHJlc2VydmVkMzsKIAlfX2JlMzIgcmVzZXJ2ZWQ0OwogCXU4IGVsZW1lbnRzWzBdOyAvKiBpZSAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiB0aGUgaHlwZXJ2aXNvciByZXR1cm5zIGJicyB1cCB0byAxNiAqLwogI2RlZmluZSBHRUxJQ19FVVJVU19NQVhfU0NBTiAgKDE2KQpAQCAtMTkzLDcgKzE5Myw3IEBACiBzdHJ1Y3QgZ2VsaWNfZXVydXNfcnNzaV9pbmZvIHsKIAkvKiBiaWcgZW5kaWFuICovCiAJX19iZTE2IHJzc2k7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIAogLyogZm9yICdzdGF0JyBtZW1iZXIgb2YgZ2VsaWNfd2xfaW5mbyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxhM3h4eC5jIGIvZHJpdmVycy9uZXQvcWxhM3h4eC5jCmluZGV4IDU0ZWJiNjUuLjYxNjhhMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsYTN4eHguYworKysgYi9kcml2ZXJzL25ldC9xbGEzeHh4LmMKQEAgLTUsNiArNSw4IEBACiAgKiBTZWUgTElDRU5TRS5xbGEzeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtMzYsMTQgKzM4LDE2IEBACiAKICNpbmNsdWRlICJxbGEzeHh4LmgiCiAKLSNkZWZpbmUgRFJWX05BTUUgIAkicWxhM3h4eCIKLSNkZWZpbmUgRFJWX1NUUklORyAJIlFMb2dpYyBJU1AzWFhYIE5ldHdvcmsgRHJpdmVyIgorI2RlZmluZSBEUlZfTkFNRQkicWxhM3h4eCIKKyNkZWZpbmUgRFJWX1NUUklORwkiUUxvZ2ljIElTUDNYWFggTmV0d29yayBEcml2ZXIiCiAjZGVmaW5lIERSVl9WRVJTSU9OCSJ2Mi4wMy4wMC1rNSIKLSNkZWZpbmUgUEZYCQlEUlZfTkFNRSAiICIKIAogc3RhdGljIGNvbnN0IGNoYXIgcWwzeHh4X2RyaXZlcl9uYW1lW10gPSBEUlZfTkFNRTsKIHN0YXRpYyBjb25zdCBjaGFyIHFsM3h4eF9kcml2ZXJfdmVyc2lvbltdID0gRFJWX1ZFUlNJT047CiAKKyNkZWZpbmUgVElNRURfT1VUX01TRwkJCQkJCQlcCisiVGltZWQgb3V0IHdhaXRpbmcgZm9yIG1hbmFnZW1lbnQgcG9ydCB0byBnZXQgZnJlZSBiZWZvcmUgaXNzdWluZyBjb21tYW5kXG4iCisKIE1PRFVMRV9BVVRIT1IoIlFMb2dpYyBDb3Jwb3JhdGlvbiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJRTG9naWMgSVNQM1hYWCBOZXR3b3JrIERyaXZlciAiIERSVl9WRVJTSU9OICIgIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC03MywyNCArNzcsMjQgQEAKIC8qCiAgKiAgVGhlc2UgYXJlIHRoZSBrbm93biBQSFkncyB3aGljaCBhcmUgdXNlZAogICovCi10eXBlZGVmIGVudW0geworZW51bSBQSFlfREVWSUNFX1RZUEUgewogICAgUEhZX1RZUEVfVU5LTk9XTiAgID0gMCwKICAgIFBIWV9WSVRFU1NFX1ZTQzgyMTEsCiAgICBQSFlfQUdFUkVfRVQxMDExQywKICAgIE1BWF9QSFlfREVWX1RZUEVTCi19IFBIWV9ERVZJQ0VfZXQ7Cit9OwogCi10eXBlZGVmIHN0cnVjdCB7Ci0JUEhZX0RFVklDRV9ldCBwaHlEZXZpY2U7Ci0JdTMyCQlwaHlJZE9VSTsKLQl1MTYJCXBoeUlkTW9kZWw7Ci0JY2hhciAJCSpuYW1lOwotfSBQSFlfREVWSUNFX0lORk9fdDsKK3N0cnVjdCBQSFlfREVWSUNFX0lORk8geworCWNvbnN0IGVudW0gUEhZX0RFVklDRV9UWVBFCXBoeURldmljZTsKKwljb25zdCB1MzIJCXBoeUlkT1VJOworCWNvbnN0IHUxNgkJcGh5SWRNb2RlbDsKKwljb25zdCBjaGFyCQkqbmFtZTsKK307CiAKLXN0YXRpYyBjb25zdCBQSFlfREVWSUNFX0lORk9fdCBQSFlfREVWSUNFU1tdID0KLQl7e1BIWV9UWVBFX1VOS05PV04sICAgIDB4MDAwMDAwLCAweDAsICJQSFlfVFlQRV9VTktOT1dOIn0sCi0JIHtQSFlfVklURVNTRV9WU0M4MjExLCAweDAwMDNmMSwgMHhiLCAiUEhZX1ZJVEVTU0VfVlNDODIxMSJ9LAotCSB7UEhZX0FHRVJFX0VUMTAxMUMsICAgMHgwMGEwYmMsIDB4MSwgIlBIWV9BR0VSRV9FVDEwMTFDIn0sCitzdGF0aWMgY29uc3Qgc3RydWN0IFBIWV9ERVZJQ0VfSU5GTyBQSFlfREVWSUNFU1tdID0geworCXtQSFlfVFlQRV9VTktOT1dOLCAgICAweDAwMDAwMCwgMHgwLCAiUEhZX1RZUEVfVU5LTk9XTiJ9LAorCXtQSFlfVklURVNTRV9WU0M4MjExLCAweDAwMDNmMSwgMHhiLCAiUEhZX1ZJVEVTU0VfVlNDODIxMSJ9LAorCXtQSFlfQUdFUkVfRVQxMDExQywgICAweDAwYTBiYywgMHgxLCAiUEhZX0FHRVJFX0VUMTAxMUMifSwKIH07CiAKIApAQCAtMTAwLDcgKzEwNCw4IEBACiBzdGF0aWMgaW50IHFsX3NlbV9zcGlubG9jayhzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYsCiAJCQkgICAgdTMyIHNlbV9tYXNrLCB1MzIgc2VtX2JpdHMpCiB7Ci0Jc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPSBxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9CisJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOwogCXUzMiB2YWx1ZTsKIAl1bnNpZ25lZCBpbnQgc2Vjb25kcyA9IDM7CiAKQEAgLTExMSwyMCArMTE2LDIyIEBACiAJCWlmICgodmFsdWUgJiAoc2VtX21hc2sgPj4gMTYpKSA9PSBzZW1fYml0cykKIAkJCXJldHVybiAwOwogCQlzc2xlZXAoMSk7Ci0JfSB3aGlsZSgtLXNlY29uZHMpOworCX0gd2hpbGUgKC0tc2Vjb25kcyk7CiAJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgdm9pZCBxbF9zZW1fdW5sb2NrKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwgdTMyIHNlbV9tYXNrKQogewotCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0gcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPQorCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKIAl3cml0ZWwoc2VtX21hc2ssICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3Muc2VtYXBob3JlUmVnKTsKIAlyZWFkbCgmcG9ydF9yZWdzLT5Db21tb25SZWdzLnNlbWFwaG9yZVJlZyk7CiB9CiAKIHN0YXRpYyBpbnQgcWxfc2VtX2xvY2soc3RydWN0IHFsM19hZGFwdGVyICpxZGV2LCB1MzIgc2VtX21hc2ssIHUzMiBzZW1fYml0cykKIHsKLQlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9IHFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOworCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0KKwkJcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CiAJdTMyIHZhbHVlOwogCiAJd3JpdGVsKChzZW1fbWFzayB8IHNlbV9iaXRzKSwgJnBvcnRfcmVncy0+Q29tbW9uUmVncy5zZW1hcGhvcmVSZWcpOwpAQCAtMTM5LDMyICsxNDYsMjggQEAKIHsKIAlpbnQgaSA9IDA7CiAKLQl3aGlsZSAoMSkgewotCQlpZiAoIXFsX3NlbV9sb2NrKHFkZXYsCi0JCQkJIFFMX0RSVlJfU0VNX01BU0ssCi0JCQkJIChRTF9SRVNPVVJDRV9CSVRTX0JBU0VfQ09ERSB8IChxZGV2LT5tYWNfaW5kZXgpCi0JCQkJICAqIDIpIDw8IDEpKSB7Ci0JCQlpZiAoaSA8IDEwKSB7Ci0JCQkJc3NsZWVwKDEpOwotCQkJCWkrKzsKLQkJCX0gZWxzZSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IFRpbWVkIG91dCB3YWl0aW5nIGZvciAiCi0JCQkJICAgICAgICJkcml2ZXIgbG9jay4uLlxuIiwKLQkJCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyBQRlgKLQkJCSAgICAgICAiJXM6IGRyaXZlciBsb2NrIGFjcXVpcmVkLlxuIiwKLQkJCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKKwl3aGlsZSAoaSA8IDEwKSB7CisJCWlmIChpKQorCQkJc3NsZWVwKDEpOworCisJCWlmIChxbF9zZW1fbG9jayhxZGV2LAorCQkJCVFMX0RSVlJfU0VNX01BU0ssCisJCQkJKFFMX1JFU09VUkNFX0JJVFNfQkFTRV9DT0RFIHwgKHFkZXYtPm1hY19pbmRleCkKKwkJCQkgKiAyKSA8PCAxKSkgeworCQkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJCSAgICAgICJkcml2ZXIgbG9jayBhY3F1aXJlZFxuIik7CiAJCQlyZXR1cm4gMTsKIAkJfQogCX0KKworCW5ldGRldl9lcnIocWRldi0+bmRldiwgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBkcml2ZXIgbG9jay4uLlxuIik7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHFsX3NldF9yZWdpc3Rlcl9wYWdlKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwgdTMyIHBhZ2UpCiB7Ci0Jc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPSBxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9CisJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOwogCiAJd3JpdGVsKCgoSVNQX0NPTlRST0xfTlBfTUFTSyA8PCAxNikgfCBwYWdlKSwKIAkJCSZwb3J0X3JlZ3MtPkNvbW1vblJlZ3MuaXNwQ29udHJvbFN0YXR1cyk7CkBAIC0xNzIsOCArMTc1LDcgQEAKIAlxZGV2LT5jdXJyZW50X3BhZ2UgPSBwYWdlOwogfQogCi1zdGF0aWMgdTMyIHFsX3JlYWRfY29tbW9uX3JlZ19sKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwKLQkJCSAgICAgIHUzMiBfX2lvbWVtICogcmVnKQorc3RhdGljIHUzMiBxbF9yZWFkX2NvbW1vbl9yZWdfbChzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYsIHUzMiBfX2lvbWVtICpyZWcpCiB7CiAJdTMyIHZhbHVlOwogCXVuc2lnbmVkIGxvbmcgaHdfZmxhZ3M7CkBAIC0xODUsOCArMTg3LDcgQEAKIAlyZXR1cm4gdmFsdWU7CiB9CiAKLXN0YXRpYyB1MzIgcWxfcmVhZF9jb21tb25fcmVnKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwKLQkJCSAgICAgIHUzMiBfX2lvbWVtICogcmVnKQorc3RhdGljIHUzMiBxbF9yZWFkX2NvbW1vbl9yZWcoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2LCB1MzIgX19pb21lbSAqcmVnKQogewogCXJldHVybiByZWFkbChyZWcpOwogfQpAQCAtMTk5LDcgKzIwMCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnFkZXYtPmh3X2xvY2ssIGh3X2ZsYWdzKTsKIAogCWlmIChxZGV2LT5jdXJyZW50X3BhZ2UgIT0gMCkKLQkJcWxfc2V0X3JlZ2lzdGVyX3BhZ2UocWRldiwwKTsKKwkJcWxfc2V0X3JlZ2lzdGVyX3BhZ2UocWRldiwgMCk7CiAJdmFsdWUgPSByZWFkbChyZWcpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcWRldi0+aHdfbG9jaywgaHdfZmxhZ3MpOwpAQCAtMjA5LDcgKzIxMCw3IEBACiBzdGF0aWMgdTMyIHFsX3JlYWRfcGFnZTBfcmVnKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwgdTMyIF9faW9tZW0gKnJlZykKIHsKIAlpZiAocWRldi0+Y3VycmVudF9wYWdlICE9IDApCi0JCXFsX3NldF9yZWdpc3Rlcl9wYWdlKHFkZXYsMCk7CisJCXFsX3NldF9yZWdpc3Rlcl9wYWdlKHFkZXYsIDApOwogCXJldHVybiByZWFkbChyZWcpOwogfQogCkBAIC0yNDMsNyArMjQ0LDcgQEAKIAkJCSAgICAgICB1MzIgX19pb21lbSAqcmVnLCB1MzIgdmFsdWUpCiB7CiAJaWYgKHFkZXYtPmN1cnJlbnRfcGFnZSAhPSAwKQotCQlxbF9zZXRfcmVnaXN0ZXJfcGFnZShxZGV2LDApOworCQlxbF9zZXRfcmVnaXN0ZXJfcGFnZShxZGV2LCAwKTsKIAl3cml0ZWwodmFsdWUsIHJlZyk7CiAJcmVhZGwocmVnKTsKIH0KQEAgLTI1NSw3ICsyNTYsNyBAQAogCQkJICAgICAgIHUzMiBfX2lvbWVtICpyZWcsIHUzMiB2YWx1ZSkKIHsKIAlpZiAocWRldi0+Y3VycmVudF9wYWdlICE9IDEpCi0JCXFsX3NldF9yZWdpc3Rlcl9wYWdlKHFkZXYsMSk7CisJCXFsX3NldF9yZWdpc3Rlcl9wYWdlKHFkZXYsIDEpOwogCXdyaXRlbCh2YWx1ZSwgcmVnKTsKIAlyZWFkbChyZWcpOwogfQpAQCAtMjY3LDE0ICsyNjgsMTUgQEAKIAkJCSAgICAgICB1MzIgX19pb21lbSAqcmVnLCB1MzIgdmFsdWUpCiB7CiAJaWYgKHFkZXYtPmN1cnJlbnRfcGFnZSAhPSAyKQotCQlxbF9zZXRfcmVnaXN0ZXJfcGFnZShxZGV2LDIpOworCQlxbF9zZXRfcmVnaXN0ZXJfcGFnZShxZGV2LCAyKTsKIAl3cml0ZWwodmFsdWUsIHJlZyk7CiAJcmVhZGwocmVnKTsKIH0KIAogc3RhdGljIHZvaWQgcWxfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldikKIHsKLQlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9IHFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOworCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0KKwkJcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CiAKIAlxbF93cml0ZV9jb21tb25fcmVnX2wocWRldiwgJnBvcnRfcmVncy0+Q29tbW9uUmVncy5pc3BJbnRlcnJ1cHRNYXNrUmVnLAogCQkJICAgIChJU1BfSU1SX0VOQUJMRV9JTlQgPDwgMTYpKTsKQEAgLTI4Myw3ICsyODUsOCBAQAogCiBzdGF0aWMgdm9pZCBxbF9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCiB7Ci0Jc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPSBxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9CisJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOwogCiAJcWxfd3JpdGVfY29tbW9uX3JlZ19sKHFkZXYsICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3MuaXNwSW50ZXJydXB0TWFza1JlZywKIAkJCSAgICAoKDB4ZmYgPDwgMTYpIHwgSVNQX0lNUl9FTkFCTEVfSU5UKSk7CkBAIC0zMDgsOCArMzExLDcgQEAKIAkJbHJnX2J1Zl9jYi0+c2tiID0gbmV0ZGV2X2FsbG9jX3NrYihxZGV2LT5uZGV2LAogCQkJCQkJICAgcWRldi0+bHJnX2J1ZmZlcl9sZW4pOwogCQlpZiAodW5saWtlbHkoIWxyZ19idWZfY2ItPnNrYikpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBmYWlsZWQgbmV0ZGV2X2FsbG9jX3NrYigpLlxuIiwKLQkJCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9lcnIocWRldi0+bmRldiwgImZhaWxlZCBuZXRkZXZfYWxsb2Nfc2tiKClcbiIpOwogCQkJcWRldi0+bHJnX2J1Zl9za2JfY2hlY2srKzsKIAkJfSBlbHNlIHsKIAkJCS8qCkBAIC0zMjMsOSArMzI1LDEwIEBACiAJCQkJCSAgICAgUUxfSEVBREVSX1NQQUNFLAogCQkJCQkgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQllcnIgPSBwY2lfZG1hX21hcHBpbmdfZXJyb3IocWRldi0+cGRldiwgbWFwKTsKLQkJCWlmKGVycikgewotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFBDSSBtYXBwaW5nIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwKLQkJCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSwgZXJyKTsKKwkJCWlmIChlcnIpIHsKKwkJCQluZXRkZXZfZXJyKHFkZXYtPm5kZXYsCisJCQkJCSAgICJQQ0kgbWFwcGluZyBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsCisJCQkJCSAgIGVycik7CiAJCQkJZGV2X2tmcmVlX3NrYihscmdfYnVmX2NiLT5za2IpOwogCQkJCWxyZ19idWZfY2ItPnNrYiA9IE5VTEw7CiAKQEAgLTM1MCwxMCArMzUzLDExIEBACiBzdGF0aWMgc3RydWN0IHFsX3Jjdl9idWZfY2IgKnFsX2dldF9mcm9tX2xyZ19idWZfZnJlZV9saXN0KHN0cnVjdCBxbDNfYWRhcHRlcgogCQkJCQkJCSAgICpxZGV2KQogewotCXN0cnVjdCBxbF9yY3ZfYnVmX2NiICpscmdfYnVmX2NiOworCXN0cnVjdCBxbF9yY3ZfYnVmX2NiICpscmdfYnVmX2NiID0gcWRldi0+bHJnX2J1Zl9mcmVlX2hlYWQ7CiAKLQlpZiAoKGxyZ19idWZfY2IgPSBxZGV2LT5scmdfYnVmX2ZyZWVfaGVhZCkgIT0gTlVMTCkgewotCQlpZiAoKHFkZXYtPmxyZ19idWZfZnJlZV9oZWFkID0gbHJnX2J1Zl9jYi0+bmV4dCkgPT0gTlVMTCkKKwlpZiAobHJnX2J1Zl9jYiAhPSBOVUxMKSB7CisJCXFkZXYtPmxyZ19idWZfZnJlZV9oZWFkID0gbHJnX2J1Zl9jYi0+bmV4dDsKKwkJaWYgKHFkZXYtPmxyZ19idWZfZnJlZV9oZWFkID09IE5VTEwpCiAJCQlxZGV2LT5scmdfYnVmX2ZyZWVfdGFpbCA9IE5VTEw7CiAJCXFkZXYtPmxyZ19idWZfZnJlZV9jb3VudC0tOwogCX0KQEAgLTM3NCwxMyArMzc4LDEzIEBACiBzdGF0aWMgdm9pZCBmbTkzYzU2YV9zZWxlY3Qoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQogewogCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0KLQkgICAgCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwkJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOworCXUzMiAqc3BpciA9ICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3Muc2VyaWFsUG9ydEludGVyZmFjZVJlZzsKIAogCXFkZXYtPmVlcHJvbV9jbWRfZGF0YSA9IEFVQlVSTl9FRVBST01fQ1NfMTsKLQlxbF93cml0ZV9udnJhbV9yZWcocWRldiwgJnBvcnRfcmVncy0+Q29tbW9uUmVncy5zZXJpYWxQb3J0SW50ZXJmYWNlUmVnLAotCQkJICAgIElTUF9OVlJBTV9NQVNLIHwgcWRldi0+ZWVwcm9tX2NtZF9kYXRhKTsKLQlxbF93cml0ZV9udnJhbV9yZWcocWRldiwgJnBvcnRfcmVncy0+Q29tbW9uUmVncy5zZXJpYWxQb3J0SW50ZXJmYWNlUmVnLAotCQkJICAgICgoSVNQX05WUkFNX01BU0sgPDwgMTYpIHwgcWRldi0+ZWVwcm9tX2NtZF9kYXRhKSk7CisJcWxfd3JpdGVfbnZyYW1fcmVnKHFkZXYsIHNwaXIsIElTUF9OVlJBTV9NQVNLIHwgcWRldi0+ZWVwcm9tX2NtZF9kYXRhKTsKKwlxbF93cml0ZV9udnJhbV9yZWcocWRldiwgc3BpciwKKwkJCSAgICgoSVNQX05WUkFNX01BU0sgPDwgMTYpIHwgcWRldi0+ZWVwcm9tX2NtZF9kYXRhKSk7CiB9CiAKIC8qCkBAIC0zOTMsNTEgKzM5Nyw0MCBAQAogCXUzMiBkYXRhQml0OwogCXUzMiBwcmV2aW91c0JpdDsKIAlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9Ci0JICAgIAkJcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwl1MzIgKnNwaXIgPSAmcG9ydF9yZWdzLT5Db21tb25SZWdzLnNlcmlhbFBvcnRJbnRlcmZhY2VSZWc7CiAKIAkvKiBDbG9jayBpbiBhIHplcm8sIHRoZW4gZG8gdGhlIHN0YXJ0IGJpdCAqLwotCXFsX3dyaXRlX252cmFtX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5Db21tb25SZWdzLnNlcmlhbFBvcnRJbnRlcmZhY2VSZWcsCi0JCQkgICAgSVNQX05WUkFNX01BU0sgfCBxZGV2LT5lZXByb21fY21kX2RhdGEgfAotCQkJICAgIEFVQlVSTl9FRVBST01fRE9fMSk7Ci0JcWxfd3JpdGVfbnZyYW1fcmVnKHFkZXYsICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3Muc2VyaWFsUG9ydEludGVyZmFjZVJlZywKLQkJCSAgICBJU1BfTlZSQU1fTUFTSyB8IHFkZXYtPgotCQkJICAgIGVlcHJvbV9jbWRfZGF0YSB8IEFVQlVSTl9FRVBST01fRE9fMSB8Ci0JCQkgICAgQVVCVVJOX0VFUFJPTV9DTEtfUklTRSk7Ci0JcWxfd3JpdGVfbnZyYW1fcmVnKHFkZXYsICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3Muc2VyaWFsUG9ydEludGVyZmFjZVJlZywKLQkJCSAgICBJU1BfTlZSQU1fTUFTSyB8IHFkZXYtPgotCQkJICAgIGVlcHJvbV9jbWRfZGF0YSB8IEFVQlVSTl9FRVBST01fRE9fMSB8Ci0JCQkgICAgQVVCVVJOX0VFUFJPTV9DTEtfRkFMTCk7CisJcWxfd3JpdGVfbnZyYW1fcmVnKHFkZXYsIHNwaXIsCisJCQkgICAoSVNQX05WUkFNX01BU0sgfCBxZGV2LT5lZXByb21fY21kX2RhdGEgfAorCQkJICAgIEFVQlVSTl9FRVBST01fRE9fMSkpOworCXFsX3dyaXRlX252cmFtX3JlZyhxZGV2LCBzcGlyLAorCQkJICAgKElTUF9OVlJBTV9NQVNLIHwgcWRldi0+ZWVwcm9tX2NtZF9kYXRhIHwKKwkJCSAgICBBVUJVUk5fRUVQUk9NX0RPXzEgfCBBVUJVUk5fRUVQUk9NX0NMS19SSVNFKSk7CisJcWxfd3JpdGVfbnZyYW1fcmVnKHFkZXYsIHNwaXIsCisJCQkgICAoSVNQX05WUkFNX01BU0sgfCBxZGV2LT5lZXByb21fY21kX2RhdGEgfAorCQkJICAgIEFVQlVSTl9FRVBST01fRE9fMSB8IEFVQlVSTl9FRVBST01fQ0xLX0ZBTEwpKTsKIAogCW1hc2sgPSAxIDw8IChGTTkzQzU2QV9DTURfQklUUyAtIDEpOwogCS8qIEZvcmNlIHRoZSBwcmV2aW91cyBkYXRhIGJpdCB0byBiZSBkaWZmZXJlbnQgKi8KIAlwcmV2aW91c0JpdCA9IDB4ZmZmZjsKIAlmb3IgKGkgPSAwOyBpIDwgRk05M0M1NkFfQ01EX0JJVFM7IGkrKykgewotCQlkYXRhQml0ID0KLQkJICAgIChjbWQgJiBtYXNrKSA/IEFVQlVSTl9FRVBST01fRE9fMSA6IEFVQlVSTl9FRVBST01fRE9fMDsKKwkJZGF0YUJpdCA9IChjbWQgJiBtYXNrKQorCQkJPyBBVUJVUk5fRUVQUk9NX0RPXzEKKwkJCTogQVVCVVJOX0VFUFJPTV9ET18wOwogCQlpZiAocHJldmlvdXNCaXQgIT0gZGF0YUJpdCkgewotCQkJLyoKLQkJCSAqIElmIHRoZSBiaXQgY2hhbmdlZCwgdGhlbiBjaGFuZ2UgdGhlIERPIHN0YXRlIHRvCi0JCQkgKiBtYXRjaAotCQkJICovCi0JCQlxbF93cml0ZV9udnJhbV9yZWcocWRldiwKLQkJCQkJICAgICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3MuCi0JCQkJCSAgICBzZXJpYWxQb3J0SW50ZXJmYWNlUmVnLAotCQkJCQkgICAgSVNQX05WUkFNX01BU0sgfCBxZGV2LT4KLQkJCQkJICAgIGVlcHJvbV9jbWRfZGF0YSB8IGRhdGFCaXQpOworCQkJLyogSWYgdGhlIGJpdCBjaGFuZ2VkLCBjaGFuZ2UgdGhlIERPIHN0YXRlIHRvIG1hdGNoICovCisJCQlxbF93cml0ZV9udnJhbV9yZWcocWRldiwgc3BpciwKKwkJCQkJICAgKElTUF9OVlJBTV9NQVNLIHwKKwkJCQkJICAgIHFkZXYtPmVlcHJvbV9jbWRfZGF0YSB8IGRhdGFCaXQpKTsKIAkJCXByZXZpb3VzQml0ID0gZGF0YUJpdDsKIAkJfQotCQlxbF93cml0ZV9udnJhbV9yZWcocWRldiwKLQkJCQkgICAgJnBvcnRfcmVncy0+Q29tbW9uUmVncy4KLQkJCQkgICAgc2VyaWFsUG9ydEludGVyZmFjZVJlZywKLQkJCQkgICAgSVNQX05WUkFNX01BU0sgfCBxZGV2LT4KLQkJCQkgICAgZWVwcm9tX2NtZF9kYXRhIHwgZGF0YUJpdCB8Ci0JCQkJICAgIEFVQlVSTl9FRVBST01fQ0xLX1JJU0UpOwotCQlxbF93cml0ZV9udnJhbV9yZWcocWRldiwKLQkJCQkgICAgJnBvcnRfcmVncy0+Q29tbW9uUmVncy4KLQkJCQkgICAgc2VyaWFsUG9ydEludGVyZmFjZVJlZywKLQkJCQkgICAgSVNQX05WUkFNX01BU0sgfCBxZGV2LT4KLQkJCQkgICAgZWVwcm9tX2NtZF9kYXRhIHwgZGF0YUJpdCB8Ci0JCQkJICAgIEFVQlVSTl9FRVBST01fQ0xLX0ZBTEwpOworCQlxbF93cml0ZV9udnJhbV9yZWcocWRldiwgc3BpciwKKwkJCQkgICAoSVNQX05WUkFNX01BU0sgfCBxZGV2LT5lZXByb21fY21kX2RhdGEgfAorCQkJCSAgICBkYXRhQml0IHwgQVVCVVJOX0VFUFJPTV9DTEtfUklTRSkpOworCQlxbF93cml0ZV9udnJhbV9yZWcocWRldiwgc3BpciwKKwkJCQkgICAoSVNQX05WUkFNX01BU0sgfCBxZGV2LT5lZXByb21fY21kX2RhdGEgfAorCQkJCSAgICBkYXRhQml0IHwgQVVCVVJOX0VFUFJPTV9DTEtfRkFMTCkpOwogCQljbWQgPSBjbWQgPDwgMTsKIAl9CiAKQEAgLTQ0NSwzMyArNDM4LDI0IEBACiAJLyogRm9yY2UgdGhlIHByZXZpb3VzIGRhdGEgYml0IHRvIGJlIGRpZmZlcmVudCAqLwogCXByZXZpb3VzQml0ID0gMHhmZmZmOwogCWZvciAoaSA9IDA7IGkgPCBhZGRyQml0czsgaSsrKSB7Ci0JCWRhdGFCaXQgPQotCQkgICAgKGVlcHJvbUFkZHIgJiBtYXNrKSA/IEFVQlVSTl9FRVBST01fRE9fMSA6Ci0JCSAgICBBVUJVUk5fRUVQUk9NX0RPXzA7CisJCWRhdGFCaXQgPSAoZWVwcm9tQWRkciAmIG1hc2spID8gQVVCVVJOX0VFUFJPTV9ET18xCisJCQk6IEFVQlVSTl9FRVBST01fRE9fMDsKIAkJaWYgKHByZXZpb3VzQml0ICE9IGRhdGFCaXQpIHsKIAkJCS8qCiAJCQkgKiBJZiB0aGUgYml0IGNoYW5nZWQsIHRoZW4gY2hhbmdlIHRoZSBETyBzdGF0ZSB0bwogCQkJICogbWF0Y2gKIAkJCSAqLwotCQkJcWxfd3JpdGVfbnZyYW1fcmVnKHFkZXYsCi0JCQkJCSAgICAmcG9ydF9yZWdzLT5Db21tb25SZWdzLgotCQkJCQkgICAgc2VyaWFsUG9ydEludGVyZmFjZVJlZywKLQkJCQkJICAgIElTUF9OVlJBTV9NQVNLIHwgcWRldi0+Ci0JCQkJCSAgICBlZXByb21fY21kX2RhdGEgfCBkYXRhQml0KTsKKwkJCXFsX3dyaXRlX252cmFtX3JlZyhxZGV2LCBzcGlyLAorCQkJCQkgICAoSVNQX05WUkFNX01BU0sgfAorCQkJCQkgICAgcWRldi0+ZWVwcm9tX2NtZF9kYXRhIHwgZGF0YUJpdCkpOwogCQkJcHJldmlvdXNCaXQgPSBkYXRhQml0OwogCQl9Ci0JCXFsX3dyaXRlX252cmFtX3JlZyhxZGV2LAotCQkJCSAgICAmcG9ydF9yZWdzLT5Db21tb25SZWdzLgotCQkJCSAgICBzZXJpYWxQb3J0SW50ZXJmYWNlUmVnLAotCQkJCSAgICBJU1BfTlZSQU1fTUFTSyB8IHFkZXYtPgotCQkJCSAgICBlZXByb21fY21kX2RhdGEgfCBkYXRhQml0IHwKLQkJCQkgICAgQVVCVVJOX0VFUFJPTV9DTEtfUklTRSk7Ci0JCXFsX3dyaXRlX252cmFtX3JlZyhxZGV2LAotCQkJCSAgICAmcG9ydF9yZWdzLT5Db21tb25SZWdzLgotCQkJCSAgICBzZXJpYWxQb3J0SW50ZXJmYWNlUmVnLAotCQkJCSAgICBJU1BfTlZSQU1fTUFTSyB8IHFkZXYtPgotCQkJCSAgICBlZXByb21fY21kX2RhdGEgfCBkYXRhQml0IHwKLQkJCQkgICAgQVVCVVJOX0VFUFJPTV9DTEtfRkFMTCk7CisJCXFsX3dyaXRlX252cmFtX3JlZyhxZGV2LCBzcGlyLAorCQkJCSAgIChJU1BfTlZSQU1fTUFTSyB8IHFkZXYtPmVlcHJvbV9jbWRfZGF0YSB8CisJCQkJICAgIGRhdGFCaXQgfCBBVUJVUk5fRUVQUk9NX0NMS19SSVNFKSk7CisJCXFsX3dyaXRlX252cmFtX3JlZyhxZGV2LCBzcGlyLAorCQkJCSAgIChJU1BfTlZSQU1fTUFTSyB8IHFkZXYtPmVlcHJvbV9jbWRfZGF0YSB8CisJCQkJICAgIGRhdGFCaXQgfCBBVUJVUk5fRUVQUk9NX0NMS19GQUxMKSk7CiAJCWVlcHJvbUFkZHIgPSBlZXByb21BZGRyIDw8IDE7CiAJfQogfQpAQCAtNDgyLDEwICs0NjYsMTEgQEAKIHN0YXRpYyB2b2lkIGZtOTNjNTZhX2Rlc2VsZWN0KHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldikKIHsKIAlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9Ci0JICAgIAkJcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwl1MzIgKnNwaXIgPSAmcG9ydF9yZWdzLT5Db21tb25SZWdzLnNlcmlhbFBvcnRJbnRlcmZhY2VSZWc7CisKIAlxZGV2LT5lZXByb21fY21kX2RhdGEgPSBBVUJVUk5fRUVQUk9NX0NTXzA7Ci0JcWxfd3JpdGVfbnZyYW1fcmVnKHFkZXYsICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3Muc2VyaWFsUG9ydEludGVyZmFjZVJlZywKLQkJCSAgICBJU1BfTlZSQU1fTUFTSyB8IHFkZXYtPmVlcHJvbV9jbWRfZGF0YSk7CisJcWxfd3JpdGVfbnZyYW1fcmVnKHFkZXYsIHNwaXIsIElTUF9OVlJBTV9NQVNLIHwgcWRldi0+ZWVwcm9tX2NtZF9kYXRhKTsKIH0KIAogLyoKQEAgLTQ5NywyOSArNDgyLDIzIEBACiAJdTMyIGRhdGEgPSAwOwogCXUzMiBkYXRhQml0OwogCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0KLQkgICAgCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwkJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOworCXUzMiAqc3BpciA9ICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3Muc2VyaWFsUG9ydEludGVyZmFjZVJlZzsKIAogCS8qIFJlYWQgdGhlIGRhdGEgYml0cyAqLwogCS8qIFRoZSBmaXJzdCBiaXQgaXMgYSBkdW1teS4gIENsb2NrIHJpZ2h0IG92ZXIgaXQuICovCiAJZm9yIChpID0gMDsgaSA8IGRhdGFCaXRzOyBpKyspIHsKLQkJcWxfd3JpdGVfbnZyYW1fcmVnKHFkZXYsCi0JCQkJICAgICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3MuCi0JCQkJICAgIHNlcmlhbFBvcnRJbnRlcmZhY2VSZWcsCi0JCQkJICAgIElTUF9OVlJBTV9NQVNLIHwgcWRldi0+ZWVwcm9tX2NtZF9kYXRhIHwKLQkJCQkgICAgQVVCVVJOX0VFUFJPTV9DTEtfUklTRSk7Ci0JCXFsX3dyaXRlX252cmFtX3JlZyhxZGV2LAotCQkJCSAgICAmcG9ydF9yZWdzLT5Db21tb25SZWdzLgotCQkJCSAgICBzZXJpYWxQb3J0SW50ZXJmYWNlUmVnLAotCQkJCSAgICBJU1BfTlZSQU1fTUFTSyB8IHFkZXYtPmVlcHJvbV9jbWRfZGF0YSB8Ci0JCQkJICAgIEFVQlVSTl9FRVBST01fQ0xLX0ZBTEwpOwotCQlkYXRhQml0ID0KLQkJICAgIChxbF9yZWFkX2NvbW1vbl9yZWcKLQkJICAgICAocWRldiwKLQkJICAgICAgJnBvcnRfcmVncy0+Q29tbW9uUmVncy4KLQkJICAgICAgc2VyaWFsUG9ydEludGVyZmFjZVJlZykgJiBBVUJVUk5fRUVQUk9NX0RJXzEpID8gMSA6IDA7CisJCXFsX3dyaXRlX252cmFtX3JlZyhxZGV2LCBzcGlyLAorCQkJCSAgIElTUF9OVlJBTV9NQVNLIHwgcWRldi0+ZWVwcm9tX2NtZF9kYXRhIHwKKwkJCQkgICBBVUJVUk5fRUVQUk9NX0NMS19SSVNFKTsKKwkJcWxfd3JpdGVfbnZyYW1fcmVnKHFkZXYsIHNwaXIsCisJCQkJICAgSVNQX05WUkFNX01BU0sgfCBxZGV2LT5lZXByb21fY21kX2RhdGEgfAorCQkJCSAgIEFVQlVSTl9FRVBST01fQ0xLX0ZBTEwpOworCQlkYXRhQml0ID0gKHFsX3JlYWRfY29tbW9uX3JlZyhxZGV2LCBzcGlyKSAmCisJCQkgICBBVUJVUk5fRUVQUk9NX0RJXzEpID8gMSA6IDA7CiAJCWRhdGEgPSAoZGF0YSA8PCAxKSB8IGRhdGFCaXQ7CiAJfQotCSp2YWx1ZSA9ICh1MTYpIGRhdGE7CisJKnZhbHVlID0gKHUxNilkYXRhOwogfQogCiAvKgpAQCAtNTUxLDEzICs1MzAsMTIgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7CiAKLQlwRUVQUk9NRGF0YSA9ICh1MTYgKikgJiBxZGV2LT5udnJhbV9kYXRhOworCXBFRVBST01EYXRhID0gKHUxNiAqKSZxZGV2LT5udnJhbV9kYXRhOwogCXFkZXYtPmVlcHJvbV9jbWRfZGF0YSA9IDA7Ci0JaWYocWxfc2VtX3NwaW5sb2NrKHFkZXYsIFFMX05WUkFNX1NFTV9NQVNLLAorCWlmIChxbF9zZW1fc3BpbmxvY2socWRldiwgUUxfTlZSQU1fU0VNX01BU0ssCiAJCQkoUUxfUkVTT1VSQ0VfQklUU19CQVNFX0NPREUgfCAocWRldi0+bWFjX2luZGV4KSAqCiAJCQkgMikgPDwgMTApKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlgiJXM6IEZhaWxlZCBxbF9zZW1fc3BpbmxvY2soKS5cbiIsCi0JCQlfX2Z1bmNfXyk7CisJCXByX2VycigiJXM6IEZhaWxlZCBxbF9zZW1fc3BpbmxvY2soKVxuIiwgX19mdW5jX18pOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC01NzAsOCArNTQ4LDggQEAKIAlxbF9zZW1fdW5sb2NrKHFkZXYsIFFMX05WUkFNX1NFTV9NQVNLKTsKIAogCWlmIChjaGVja3N1bSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBjaGVja3N1bSBzaG91bGQgYmUgemVybywgaXMgJXghIVxuIiwKLQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUsIGNoZWNrc3VtKTsKKwkJbmV0ZGV2X2VycihxZGV2LT5uZGV2LCAiY2hlY2tzdW0gc2hvdWxkIGJlIHplcm8sIGlzICV4ISFcbiIsCisJCQkgICBjaGVja3N1bSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFkZXYtPmh3X2xvY2ssIGh3X2ZsYWdzKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTU4Nyw3ICs1NjUsNyBAQAogc3RhdGljIGludCBxbF93YWl0X2Zvcl9taWlfcmVhZHkoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQogewogCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0KLQkgICAgCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwkJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOwogCXUzMiB0ZW1wOwogCWludCBjb3VudCA9IDEwMDA7CiAKQEAgLTYwNCw3ICs1ODIsNyBAQAogc3RhdGljIHZvaWQgcWxfbWlpX2VuYWJsZV9zY2FuX21vZGUoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQogewogCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0KLQkgICAgCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwkJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOwogCXUzMiBzY2FuQ29udHJvbDsKIAogCWlmIChxZGV2LT5udW1Qb3J0cyA+IDEpIHsKQEAgLTYzMiw3ICs2MTAsNyBAQAogewogCXU4IHJldDsKIAlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9Ci0JICAgIAkJCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwkJCQkJcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CiAKIAkvKiBTZWUgaWYgc2NhbiBtb2RlIGlzIGVuYWJsZWQgYmVmb3JlIHdlIHR1cm4gaXQgb2ZmICovCiAJaWYgKHFsX3JlYWRfcGFnZTBfcmVnKHFkZXYsICZwb3J0X3JlZ3MtPm1hY01JSU1nbXRDb250cm9sUmVnKSAmCkBAIC02NjIsMTcgKzY0MCwxMyBAQAogCQkJICAgICAgIHUxNiByZWdBZGRyLCB1MTYgdmFsdWUsIHUzMiBwaHlBZGRyKQogewogCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0KLQkgICAgCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwkJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOwogCXU4IHNjYW5XYXNFbmFibGVkOwogCiAJc2Nhbldhc0VuYWJsZWQgPSBxbF9taWlfZGlzYWJsZV9zY2FuX21vZGUocWRldik7CiAKIAlpZiAocWxfd2FpdF9mb3JfbWlpX3JlYWR5KHFkZXYpKSB7Ci0JCWlmIChuZXRpZl9tc2dfbGluayhxZGV2KSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCi0JCQkgICAgICAgIiVzIFRpbWVkIG91dCB3YWl0aW5nIGZvciBtYW5hZ2VtZW50IHBvcnQgdG8gIgotCQkJICAgICAgICJnZXQgZnJlZSBiZWZvcmUgaXNzdWluZyBjb21tYW5kLlxuIiwKLQkJCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJbmV0aWZfd2FybihxZGV2LCBsaW5rLCBxZGV2LT5uZGV2LCBUSU1FRF9PVVRfTVNHKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtNjgzLDExICs2NTcsNyBAQAogCiAJLyogV2FpdCBmb3Igd3JpdGUgdG8gY29tcGxldGUgOS8xMC8wNCBTSlAgKi8KIAlpZiAocWxfd2FpdF9mb3JfbWlpX3JlYWR5KHFkZXYpKSB7Ci0JCWlmIChuZXRpZl9tc2dfbGluayhxZGV2KSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCi0JCQkgICAgICAgIiVzOiBUaW1lZCBvdXQgd2FpdGluZyBmb3IgbWFuYWdlbWVudCBwb3J0IHRvICIKLQkJCSAgICAgICAiZ2V0IGZyZWUgYmVmb3JlIGlzc3VpbmcgY29tbWFuZC5cbiIsCi0JCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSk7CisJCW5ldGlmX3dhcm4ocWRldiwgbGluaywgcWRldi0+bmRldiwgVElNRURfT1VUX01TRyk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTY5OCwyMSArNjY4LDE3IEBACiB9CiAKIHN0YXRpYyBpbnQgcWxfbWlpX3JlYWRfcmVnX2V4KHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwgdTE2IHJlZ0FkZHIsCi0JCQkgICAgICB1MTYgKiB2YWx1ZSwgdTMyIHBoeUFkZHIpCisJCQkgICAgICB1MTYgKnZhbHVlLCB1MzIgcGh5QWRkcikKIHsKIAlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9Ci0JICAgIAkJcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKIAl1OCBzY2FuV2FzRW5hYmxlZDsKIAl1MzIgdGVtcDsKIAogCXNjYW5XYXNFbmFibGVkID0gcWxfbWlpX2Rpc2FibGVfc2Nhbl9tb2RlKHFkZXYpOwogCiAJaWYgKHFsX3dhaXRfZm9yX21paV9yZWFkeShxZGV2KSkgewotCQlpZiAobmV0aWZfbXNnX2xpbmsocWRldikpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAotCQkJICAgICAgICIlczogVGltZWQgb3V0IHdhaXRpbmcgZm9yIG1hbmFnZW1lbnQgcG9ydCB0byAiCi0JCQkgICAgICAgImdldCBmcmVlIGJlZm9yZSBpc3N1aW5nIGNvbW1hbmQuXG4iLAotCQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUpOworCQluZXRpZl93YXJuKHFkZXYsIGxpbmssIHFkZXYtPm5kZXYsIFRJTUVEX09VVF9NU0cpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC03MjcsMTEgKzY5Myw3IEBACiAKIAkvKiBXYWl0IGZvciB0aGUgcmVhZCB0byBjb21wbGV0ZSAqLwogCWlmIChxbF93YWl0X2Zvcl9taWlfcmVhZHkocWRldikpIHsKLQkJaWYgKG5ldGlmX21zZ19saW5rKHFkZXYpKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKLQkJCSAgICAgICAiJXM6IFRpbWVkIG91dCB3YWl0aW5nIGZvciBtYW5hZ2VtZW50IHBvcnQgdG8gIgotCQkJICAgICAgICJnZXQgZnJlZSBhZnRlciBpc3N1aW5nIGNvbW1hbmQuXG4iLAotCQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUpOworCQluZXRpZl93YXJuKHFkZXYsIGxpbmssIHFkZXYtPm5kZXYsIFRJTUVEX09VVF9NU0cpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC03NDcsMTYgKzcwOSwxMiBAQAogc3RhdGljIGludCBxbF9taWlfd3JpdGVfcmVnKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwgdTE2IHJlZ0FkZHIsIHUxNiB2YWx1ZSkKIHsKIAlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9Ci0JICAgIAkJcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKIAogCXFsX21paV9kaXNhYmxlX3NjYW5fbW9kZShxZGV2KTsKIAogCWlmIChxbF93YWl0X2Zvcl9taWlfcmVhZHkocWRldikpIHsKLQkJaWYgKG5ldGlmX21zZ19saW5rKHFkZXYpKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKLQkJCSAgICAgICAiJXM6IFRpbWVkIG91dCB3YWl0aW5nIGZvciBtYW5hZ2VtZW50IHBvcnQgdG8gIgotCQkJICAgICAgICJnZXQgZnJlZSBiZWZvcmUgaXNzdWluZyBjb21tYW5kLlxuIiwKLQkJCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJbmV0aWZfd2FybihxZGV2LCBsaW5rLCBxZGV2LT5uZGV2LCBUSU1FRF9PVVRfTVNHKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtNzY3LDExICs3MjUsNyBAQAogCiAJLyogV2FpdCBmb3Igd3JpdGUgdG8gY29tcGxldGUuICovCiAJaWYgKHFsX3dhaXRfZm9yX21paV9yZWFkeShxZGV2KSkgewotCQlpZiAobmV0aWZfbXNnX2xpbmsocWRldikpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAotCQkJICAgICAgICIlczogVGltZWQgb3V0IHdhaXRpbmcgZm9yIG1hbmFnZW1lbnQgcG9ydCB0byAiCi0JCQkgICAgICAgImdldCBmcmVlIGJlZm9yZSBpc3N1aW5nIGNvbW1hbmQuXG4iLAotCQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUpOworCQluZXRpZl93YXJuKHFkZXYsIGxpbmssIHFkZXYtPm5kZXYsIFRJTUVEX09VVF9NU0cpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC03ODQsMTYgKzczOCwxMiBAQAogewogCXUzMiB0ZW1wOwogCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0KLQkgICAgCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwkJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOwogCiAJcWxfbWlpX2Rpc2FibGVfc2Nhbl9tb2RlKHFkZXYpOwogCiAJaWYgKHFsX3dhaXRfZm9yX21paV9yZWFkeShxZGV2KSkgewotCQlpZiAobmV0aWZfbXNnX2xpbmsocWRldikpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAotCQkJICAgICAgICIlczogVGltZWQgb3V0IHdhaXRpbmcgZm9yIG1hbmFnZW1lbnQgcG9ydCB0byAiCi0JCQkgICAgICAgImdldCBmcmVlIGJlZm9yZSBpc3N1aW5nIGNvbW1hbmQuXG4iLAotCQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUpOworCQluZXRpZl93YXJuKHFkZXYsIGxpbmssIHFkZXYtPm5kZXYsIFRJTUVEX09VVF9NU0cpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC04MDgsMTEgKzc1OCw3IEBACiAKIAkvKiBXYWl0IGZvciB0aGUgcmVhZCB0byBjb21wbGV0ZSAqLwogCWlmIChxbF93YWl0X2Zvcl9taWlfcmVhZHkocWRldikpIHsKLQkJaWYgKG5ldGlmX21zZ19saW5rKHFkZXYpKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKLQkJCSAgICAgICAiJXM6IFRpbWVkIG91dCB3YWl0aW5nIGZvciBtYW5hZ2VtZW50IHBvcnQgdG8gIgotCQkJICAgICAgICJnZXQgZnJlZSBiZWZvcmUgaXNzdWluZyBjb21tYW5kLlxuIiwKLQkJCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJbmV0aWZfd2FybihxZGV2LCBsaW5rLCBxZGV2LT5uZGV2LCBUSU1FRF9PVVRfTVNHKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtODk4LDcgKzg0NCw3IEBACiAKIHN0YXRpYyB2b2lkIHBoeUFnZXJlU3BlY2lmaWNJbml0KHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwgdTMyIG1paUFkZHIpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGVuYWJsaW5nIEFnZXJlIHNwZWNpZmljIFBIWVxuIiwgcWRldi0+bmRldi0+bmFtZSk7CisJbmV0ZGV2X2luZm8ocWRldi0+bmRldiwgImVuYWJsaW5nIEFnZXJlIHNwZWNpZmljIFBIWVxuIik7CiAJLyogcG93ZXIgZG93biBkZXZpY2UgYml0IDExID0gMSAqLwogCXFsX21paV93cml0ZV9yZWdfZXgocWRldiwgMHgwMCwgMHgxOTQwLCBtaWlBZGRyKTsKIAkvKiBlbmFibGUgZGlhZ25vc3RpYyBtb2RlIGJpdCAyID0gMSAqLwpAQCAtOTE4LDcgKzg2NCw4IEBACiAJLyogcG9pbnQgdG8gaGlkZGVuIHJlZyAweDI4MDYgKi8KIAlxbF9taWlfd3JpdGVfcmVnX2V4KHFkZXYsIDB4MTAsIDB4MjgwNiwgbWlpQWRkcik7CiAJLyogV3JpdGUgbmV3IFBIWUFEIHcvYml0IDUgc2V0ICovCi0JcWxfbWlpX3dyaXRlX3JlZ19leChxZGV2LCAweDExLCAweDAwMjAgfCAoUEhZQWRkcltxZGV2LT5tYWNfaW5kZXhdID4+IDgpLCBtaWlBZGRyKTsKKwlxbF9taWlfd3JpdGVfcmVnX2V4KHFkZXYsIDB4MTEsCisJCQkgICAgMHgwMDIwIHwgKFBIWUFkZHJbcWRldi0+bWFjX2luZGV4XSA+PiA4KSwgbWlpQWRkcik7CiAJLyoKIAkgKiBEaXNhYmxlIGRpYWdub3N0aWMgbW9kZSBiaXQgMiA9IDAKIAkgKiBQb3dlciB1cCBkZXZpY2UgYml0IDExID0gMApAQCAtOTI5LDIxICs4NzYsMTkgQEAKIAlxbF9taWlfd3JpdGVfcmVnKHFkZXYsIDB4MWMsIDB4ZmFmMCk7CiB9CiAKLXN0YXRpYyBQSFlfREVWSUNFX2V0IGdldFBoeVR5cGUgKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwKLQkJCQkgdTE2IHBoeUlkUmVnMCwgdTE2IHBoeUlkUmVnMSkKK3N0YXRpYyBlbnVtIFBIWV9ERVZJQ0VfVFlQRSBnZXRQaHlUeXBlKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwKKwkJCQkgICAgICAgdTE2IHBoeUlkUmVnMCwgdTE2IHBoeUlkUmVnMSkKIHsKLQlQSFlfREVWSUNFX2V0IHJlc3VsdCA9IFBIWV9UWVBFX1VOS05PV047CisJZW51bSBQSFlfREVWSUNFX1RZUEUgcmVzdWx0ID0gUEhZX1RZUEVfVU5LTk9XTjsKIAl1MzIgICBvdWk7CiAJdTE2ICAgbW9kZWw7CiAJaW50IGk7CiAKLQlpZiAocGh5SWRSZWcwID09IDB4ZmZmZikgeworCWlmIChwaHlJZFJlZzAgPT0gMHhmZmZmKQogCQlyZXR1cm4gcmVzdWx0OwotCX0KIAotCWlmIChwaHlJZFJlZzEgPT0gMHhmZmZmKSB7CisJaWYgKHBoeUlkUmVnMSA9PSAweGZmZmYpCiAJCXJldHVybiByZXN1bHQ7Ci0JfQogCiAJLyogb3VpIGlzIHNwbGl0IGJldHdlZW4gdHdvIHJlZ2lzdGVycyAqLwogCW91aSA9IChwaHlJZFJlZzAgPDwgNikgfCAoKHBoeUlkUmVnMSAmIFBIWV9PVUlfMV9NQVNLKSA+PiAxMCk7CkBAIC05NTEsMTUgKzg5NiwxMyBAQAogCW1vZGVsID0gKHBoeUlkUmVnMSAmIFBIWV9NT0RFTF9NQVNLKSA+PiA0OwogCiAJLyogU2NhbiB0YWJsZSBmb3IgdGhpcyBQSFkgKi8KLQlmb3IoaSA9IDA7IGkgPCBNQVhfUEhZX0RFVl9UWVBFUzsgaSsrKSB7Ci0JCWlmICgob3VpID09IFBIWV9ERVZJQ0VTW2ldLnBoeUlkT1VJKSAmJiAobW9kZWwgPT0gUEhZX0RFVklDRVNbaV0ucGh5SWRNb2RlbCkpCi0JCXsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1BIWV9ERVZfVFlQRVM7IGkrKykgeworCQlpZiAoKG91aSA9PSBQSFlfREVWSUNFU1tpXS5waHlJZE9VSSkgJiYKKwkJICAgIChtb2RlbCA9PSBQSFlfREVWSUNFU1tpXS5waHlJZE1vZGVsKSkgeworCQkJbmV0ZGV2X2luZm8ocWRldi0+bmRldiwgIlBoeTogJXNcbiIsCisJCQkJICAgIFBIWV9ERVZJQ0VTW2ldLm5hbWUpOwogCQkJcmVzdWx0ID0gUEhZX0RFVklDRVNbaV0ucGh5RGV2aWNlOwotCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUGh5OiAlc1xuIiwKLQkJCQlxZGV2LT5uZGV2LT5uYW1lLCBQSFlfREVWSUNFU1tpXS5uYW1lKTsKLQotCQkgICAgICAgIGJyZWFrOworCQkJYnJlYWs7CiAJCX0KIAl9CiAKQEAgLTk3MCw5ICs5MTMsOCBAQAogewogCXUxNiByZWc7CiAKLQlzd2l0Y2gocWRldi0+cGh5VHlwZSkgewotCWNhc2UgUEhZX0FHRVJFX0VUMTAxMUM6Ci0JeworCXN3aXRjaCAocWRldi0+cGh5VHlwZSkgeworCWNhc2UgUEhZX0FHRVJFX0VUMTAxMUM6IHsKIAkJaWYgKHFsX21paV9yZWFkX3JlZyhxZGV2LCAweDFBLCAmcmVnKSA8IDApCiAJCQlyZXR1cm4gMDsKIApAQCAtOTgwLDIwICs5MjIsMjAgQEAKIAkJYnJlYWs7CiAJfQogCWRlZmF1bHQ6Ci0JaWYgKHFsX21paV9yZWFkX3JlZyhxZGV2LCBBVVhfQ09OVFJPTF9TVEFUVVMsICZyZWcpIDwgMCkKLQkJcmV0dXJuIDA7CisJCWlmIChxbF9taWlfcmVhZF9yZWcocWRldiwgQVVYX0NPTlRST0xfU1RBVFVTLCAmcmVnKSA8IDApCisJCQlyZXR1cm4gMDsKIAotCXJlZyA9ICgoKHJlZyAmIDB4MTgpID4+IDMpICYgMyk7CisJCXJlZyA9ICgoKHJlZyAmIDB4MTgpID4+IDMpICYgMyk7CiAJfQogCi0Jc3dpdGNoKHJlZykgewotCQljYXNlIDI6CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIDI6CiAJCXJldHVybiBTUEVFRF8xMDAwOwotCQljYXNlIDE6CisJY2FzZSAxOgogCQlyZXR1cm4gU1BFRURfMTAwOwotCQljYXNlIDA6CisJY2FzZSAwOgogCQlyZXR1cm4gU1BFRURfMTA7Ci0JCWRlZmF1bHQ6CisJZGVmYXVsdDoKIAkJcmV0dXJuIC0xOwogCX0KIH0KQEAgLTEwMDIsMTcgKzk0NCwxNSBAQAogewogCXUxNiByZWc7CiAKLQlzd2l0Y2gocWRldi0+cGh5VHlwZSkgewotCWNhc2UgUEhZX0FHRVJFX0VUMTAxMUM6Ci0JeworCXN3aXRjaCAocWRldi0+cGh5VHlwZSkgeworCWNhc2UgUEhZX0FHRVJFX0VUMTAxMUM6IHsKIAkJaWYgKHFsX21paV9yZWFkX3JlZyhxZGV2LCAweDFBLCAmcmVnKSkKIAkJCXJldHVybiAwOwogCiAJCXJldHVybiAoKHJlZyAmIDB4MDA4MCkgJiYgKHJlZyAmIDB4MTAwMCkpICE9IDA7CiAJfQogCWNhc2UgUEhZX1ZJVEVTU0VfVlNDODIxMToKLQlkZWZhdWx0OgotCXsKKwlkZWZhdWx0OiB7CiAJCWlmIChxbF9taWlfcmVhZF9yZWcocWRldiwgQVVYX0NPTlRST0xfU1RBVFVTLCAmcmVnKSA8IDApCiAJCQlyZXR1cm4gMDsKIAkJcmV0dXJuIChyZWcgJiBQSFlfQVVYX0RVUExFWF9TVEFUKSAhPSAwOwpAQCAtMTA0MCwxNyArOTgwLDE1IEBACiAKIAkvKiAgRGV0ZXJtaW5lIHRoZSBQSFkgd2UgYXJlIHVzaW5nIGJ5IHJlYWRpbmcgdGhlIElEJ3MgKi8KIAllcnIgPSBxbF9taWlfcmVhZF9yZWcocWRldiwgUEhZX0lEXzBfUkVHLCAmcmVnMSk7Ci0JaWYoZXJyICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ291bGQgbm90IHJlYWQgZnJvbSByZWcgUEhZX0lEXzBfUkVHXG4iLAotCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKwlpZiAoZXJyICE9IDApIHsKKwkJbmV0ZGV2X2VycihxZGV2LT5uZGV2LCAiQ291bGQgbm90IHJlYWQgZnJvbSByZWcgUEhZX0lEXzBfUkVHXG4iKTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKIAllcnIgPSBxbF9taWlfcmVhZF9yZWcocWRldiwgUEhZX0lEXzFfUkVHLCAmcmVnMik7Ci0JaWYoZXJyICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ291bGQgbm90IHJlYWQgZnJvbSByZWcgUEhZX0lEXzBfUkVHXG4iLAotCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKwlpZiAoZXJyICE9IDApIHsKKwkJbmV0ZGV2X2VycihxZGV2LT5uZGV2LCAiQ291bGQgbm90IHJlYWQgZnJvbSByZWcgUEhZX0lEXzFfUkVHXG4iKTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKIAkvKiAgQ2hlY2sgaWYgd2UgaGF2ZSBhIEFnZXJlIFBIWSAqLwpAQCAtMTA1OCwyNCArOTk2LDIyIEBACiAKIAkJLyogRGV0ZXJtaW5lIHdoaWNoIE1JSSBhZGRyZXNzIHdlIHNob3VsZCBiZSB1c2luZwogCQkgICBkZXRlcm1pbmVkIGJ5IHRoZSBpbmRleCBvZiB0aGUgY2FyZCAqLwotCQlpZiAocWRldi0+bWFjX2luZGV4ID09IDApIHsKKwkJaWYgKHFkZXYtPm1hY19pbmRleCA9PSAwKQogCQkJbWlpQWRkciA9IE1JSV9BR0VSRV9BRERSXzE7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCW1paUFkZHIgPSBNSUlfQUdFUkVfQUREUl8yOwotCQl9CiAKLQkJZXJyID1xbF9taWlfcmVhZF9yZWdfZXgocWRldiwgUEhZX0lEXzBfUkVHLCAmcmVnMSwgbWlpQWRkcik7Ci0JCWlmKGVyciAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDb3VsZCBub3QgcmVhZCBmcm9tIHJlZyBQSFlfSURfMF9SRUcgYWZ0ZXIgQWdlcmUgZGV0ZWN0ZWRcbiIsCi0JCSAgICAgICAJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUpOworCQllcnIgPSBxbF9taWlfcmVhZF9yZWdfZXgocWRldiwgUEhZX0lEXzBfUkVHLCAmcmVnMSwgbWlpQWRkcik7CisJCWlmIChlcnIgIT0gMCkgeworCQkJbmV0ZGV2X2VycihxZGV2LT5uZGV2LAorCQkJCSAgICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlZyBQSFlfSURfMF9SRUcgYWZ0ZXIgQWdlcmUgZGV0ZWN0ZWRcbiIpOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCiAJCWVyciA9IHFsX21paV9yZWFkX3JlZ19leChxZGV2LCBQSFlfSURfMV9SRUcsICZyZWcyLCBtaWlBZGRyKTsKLQkJaWYoZXJyICE9IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENvdWxkIG5vdCByZWFkIGZyb20gcmVnIFBIWV9JRF8wX1JFRyBhZnRlciBBZ2VyZSBkZXRlY3RlZFxuIiwKLQkJCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKLSAgICAgICAgCSAgICAgICAgcmV0dXJuIGVycjsKKwkJaWYgKGVyciAhPSAwKSB7CisJCQluZXRkZXZfZXJyKHFkZXYtPm5kZXYsICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlZyBQSFlfSURfMV9SRUcgYWZ0ZXIgQWdlcmUgZGV0ZWN0ZWRcbiIpOworCQkJcmV0dXJuIGVycjsKIAkJfQogCiAJCS8qICBXZSBuZWVkIHRvIHJlbWVtYmVyIHRvIGluaXRpYWxpemUgdGhlIEFnZXJlIFBIWSAqLwpAQCAtMTA5MCw3ICsxMDI2LDcgQEAKIAkJLyogbmVlZCB0aGlzIGhlcmUgc28gYWRkcmVzcyBnZXRzIGNoYW5nZWQgKi8KIAkJcGh5QWdlcmVTcGVjaWZpY0luaXQocWRldiwgbWlpQWRkcik7CiAJfSBlbHNlIGlmIChxZGV2LT5waHlUeXBlID09IFBIWV9UWVBFX1VOS05PV04pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogUEhZIGlzIHVua25vd25cbiIsIHFkZXYtPm5kZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKHFkZXYtPm5kZXYsICJQSFkgaXMgdW5rbm93blxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMTEwMyw3ICsxMDM5LDcgQEAKIHN0YXRpYyB2b2lkIHFsX21hY19lbmFibGUoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2LCB1MzIgZW5hYmxlKQogewogCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0KLQkgICAgCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwkJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOwogCXUzMiB2YWx1ZTsKIAogCWlmIChlbmFibGUpCkBAIC0xMTIzLDcgKzEwNTksNyBAQAogc3RhdGljIHZvaWQgcWxfbWFjX2NmZ19zb2Z0X3Jlc2V0KHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwgdTMyIGVuYWJsZSkKIHsKIAlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9Ci0JICAgIAkJcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKIAl1MzIgdmFsdWU7CiAKIAlpZiAoZW5hYmxlKQpAQCAtMTE0Myw3ICsxMDc5LDcgQEAKIHN0YXRpYyB2b2lkIHFsX21hY19jZmdfZ2lnKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwgdTMyIGVuYWJsZSkKIHsKIAlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9Ci0JICAgIAkJcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKIAl1MzIgdmFsdWU7CiAKIAlpZiAoZW5hYmxlKQpAQCAtMTE2Myw3ICsxMDk5LDcgQEAKIHN0YXRpYyB2b2lkIHFsX21hY19jZmdfZnVsbF9kdXAoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2LCB1MzIgZW5hYmxlKQogewogCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0KLQkgICAgCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwkJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOwogCXUzMiB2YWx1ZTsKIAogCWlmIChlbmFibGUpCkBAIC0xMTgzLDcgKzExMTksNyBAQAogc3RhdGljIHZvaWQgcWxfbWFjX2NmZ19wYXVzZShzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYsIHUzMiBlbmFibGUpCiB7CiAJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPQotCSAgICAJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOworCQkJcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CiAJdTMyIHZhbHVlOwogCiAJaWYgKGVuYWJsZSkKQEAgLTEyMDUsNyArMTE0MSw3IEBACiBzdGF0aWMgaW50IHFsX2lzX2ZpYmVyKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldikKIHsKIAlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9Ci0JICAgIAkJcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKIAl1MzIgYml0VG9DaGVjayA9IDA7CiAJdTMyIHRlbXA7CiAKQEAgLTEyMzUsNyArMTE3MSw3IEBACiBzdGF0aWMgaW50IHFsX2lzX2F1dG9fbmVnX2NvbXBsZXRlKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldikKIHsKIAlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9Ci0JICAgIAkJcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKIAl1MzIgYml0VG9DaGVjayA9IDA7CiAJdTMyIHRlbXA7CiAKQEAgLTEyNTAsMTggKzExODYsMTEgQEAKIAogCXRlbXAgPSBxbF9yZWFkX3BhZ2UwX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5wb3J0U3RhdHVzKTsKIAlpZiAodGVtcCAmIGJpdFRvQ2hlY2spIHsKLQkJaWYgKG5ldGlmX21zZ19saW5rKHFkZXYpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKLQkJCSAgICAgICAiJXM6IEF1dG8tTmVnb3RpYXRlIGNvbXBsZXRlLlxuIiwKLQkJCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJbmV0aWZfaW5mbyhxZGV2LCBsaW5rLCBxZGV2LT5uZGV2LCAiQXV0by1OZWdvdGlhdGUgY29tcGxldGVcbiIpOwogCQlyZXR1cm4gMTsKLQl9IGVsc2UgewotCQlpZiAobmV0aWZfbXNnX2xpbmsocWRldikpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAotCQkJICAgICAgICIlczogQXV0by1OZWdvdGlhdGUgaW5jb21wbGV0ZS5cbiIsCi0JCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSk7Ci0JCXJldHVybiAwOwogCX0KKwluZXRpZl9pbmZvKHFkZXYsIGxpbmssIHFkZXYtPm5kZXYsICJBdXRvLU5lZ290aWF0ZSBpbmNvbXBsZXRlXG4iKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTEyNzgsNyArMTIwNyw3IEBACiBzdGF0aWMgaW50IHFsX2F1dG9fbmVnX2Vycm9yKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldikKIHsKIAlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9Ci0JICAgIAkJcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKIAl1MzIgYml0VG9DaGVjayA9IDA7CiAJdTMyIHRlbXA7CiAKQEAgLTEzMTYsNyArMTI0NSw3IEBACiBzdGF0aWMgaW50IHFsX2xpbmtfZG93bl9kZXRlY3Qoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQogewogCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0KLQkgICAgCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwkJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOwogCXUzMiBiaXRUb0NoZWNrID0gMDsKIAl1MzIgdGVtcDsKIApAQCAtMTM0MCw3ICsxMjY5LDcgQEAKIHN0YXRpYyBpbnQgcWxfbGlua19kb3duX2RldGVjdF9jbGVhcihzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCiB7CiAJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPQotCSAgICAJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOworCQkJcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CiAKIAlzd2l0Y2ggKHFkZXYtPm1hY19pbmRleCkgewogCWNhc2UgMDoKQEAgLTEzNzAsNyArMTI5OSw3IEBACiBzdGF0aWMgaW50IHFsX3RoaXNfYWRhcHRlcl9jb250cm9sc19wb3J0KHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldikKIHsKIAlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9Ci0JICAgIAkJcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKIAl1MzIgYml0VG9DaGVjayA9IDA7CiAJdTMyIHRlbXA7CiAKQEAgLTEzODcsMTYgKzEzMTYsMTMgQEAKIAogCXRlbXAgPSBxbF9yZWFkX3BhZ2UwX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5wb3J0U3RhdHVzKTsKIAlpZiAodGVtcCAmIGJpdFRvQ2hlY2spIHsKLQkJaWYgKG5ldGlmX21zZ19saW5rKHFkZXYpKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYCi0JCQkgICAgICAgIiVzOiBpcyBub3QgbGluayBtYXN0ZXIuXG4iLCBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJbmV0aWZfcHJpbnRrKHFkZXYsIGxpbmssIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkgICAgICJub3QgbGluayBtYXN0ZXJcbiIpOwogCQlyZXR1cm4gMDsKLQl9IGVsc2UgewotCQlpZiAobmV0aWZfbXNnX2xpbmsocWRldikpCi0JCQlwcmludGsoS0VSTl9ERUJVRyBQRlgKLQkJCSAgICAgICAiJXM6IGlzIGxpbmsgbWFzdGVyLlxuIiwgcWRldi0+bmRldi0+bmFtZSk7Ci0JCXJldHVybiAxOwogCX0KKworCW5ldGlmX3ByaW50ayhxZGV2LCBsaW5rLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LCAibGluayBtYXN0ZXJcbiIpOworCXJldHVybiAxOwogfQogCiBzdGF0aWMgdm9pZCBxbF9waHlfcmVzZXRfZXgoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQpAQCAtMTQxMCwxOSArMTMzNiwyMCBAQAogCXUxNiByZWc7CiAJdTE2IHBvcnRDb25maWd1cmF0aW9uOwogCi0JaWYocWRldi0+cGh5VHlwZSA9PSBQSFlfQUdFUkVfRVQxMDExQykgewotCQkvKiB0dXJuIG9mZiBleHRlcm5hbCBsb29wYmFjayAqLworCWlmIChxZGV2LT5waHlUeXBlID09IFBIWV9BR0VSRV9FVDEwMTFDKQogCQlxbF9taWlfd3JpdGVfcmVnKHFkZXYsIDB4MTMsIDB4MDAwMCk7Ci0JfQorCQkJCQkvKiB0dXJuIG9mZiBleHRlcm5hbCBsb29wYmFjayAqLwogCi0JaWYocWRldi0+bWFjX2luZGV4ID09IDApCi0JCXBvcnRDb25maWd1cmF0aW9uID0gcWRldi0+bnZyYW1fZGF0YS5tYWNDZmdfcG9ydDAucG9ydENvbmZpZ3VyYXRpb247CisJaWYgKHFkZXYtPm1hY19pbmRleCA9PSAwKQorCQlwb3J0Q29uZmlndXJhdGlvbiA9CisJCQlxZGV2LT5udnJhbV9kYXRhLm1hY0NmZ19wb3J0MC5wb3J0Q29uZmlndXJhdGlvbjsKIAllbHNlCi0JCXBvcnRDb25maWd1cmF0aW9uID0gcWRldi0+bnZyYW1fZGF0YS5tYWNDZmdfcG9ydDEucG9ydENvbmZpZ3VyYXRpb247CisJCXBvcnRDb25maWd1cmF0aW9uID0KKwkJCXFkZXYtPm52cmFtX2RhdGEubWFjQ2ZnX3BvcnQxLnBvcnRDb25maWd1cmF0aW9uOwogCiAJLyogIFNvbWUgSEJBJ3MgaW4gdGhlIGZpZWxkIGFyZSBzZXQgdG8gMCBhbmQgdGhleSBuZWVkIHRvCiAJICAgIGJlIHJlaW50ZXJwcmV0ZWQgd2l0aCBhIGRlZmF1bHQgdmFsdWUgKi8KLQlpZihwb3J0Q29uZmlndXJhdGlvbiA9PSAwKQorCWlmIChwb3J0Q29uZmlndXJhdGlvbiA9PSAwKQogCQlwb3J0Q29uZmlndXJhdGlvbiA9IFBPUlRfQ09ORklHX0RFRkFVTFQ7CiAKIAkvKiBTZXQgdGhlIDEwMDAgYWR2ZXJ0aXNlbWVudHMgKi8KQEAgLTE0MzAsOCArMTM1Nyw4IEBACiAJCQkgICBQSFlBZGRyW3FkZXYtPm1hY19pbmRleF0pOwogCXJlZyAmPSB+UEhZX0dJR19BTExfUEFSQU1TOwogCi0JaWYocG9ydENvbmZpZ3VyYXRpb24gJiBQT1JUX0NPTkZJR18xMDAwTUJfU1BFRUQpIHsKLQkJaWYocG9ydENvbmZpZ3VyYXRpb24gJiBQT1JUX0NPTkZJR19GVUxMX0RVUExFWF9FTkFCTEVEKQorCWlmIChwb3J0Q29uZmlndXJhdGlvbiAmIFBPUlRfQ09ORklHXzEwMDBNQl9TUEVFRCkgeworCQlpZiAocG9ydENvbmZpZ3VyYXRpb24gJiBQT1JUX0NPTkZJR19GVUxMX0RVUExFWF9FTkFCTEVEKQogCQkJcmVnIHw9IFBIWV9HSUdfQURWXzEwMDBGOwogCQllbHNlCiAJCQlyZWcgfD0gUEhZX0dJR19BRFZfMTAwMEg7CkBAIC0xNDQ1LDI5ICsxMzcyLDI3IEBACiAJCQkgICBQSFlBZGRyW3FkZXYtPm1hY19pbmRleF0pOwogCXJlZyAmPSB+UEhZX05FR19BTExfUEFSQU1TOwogCi0JaWYocG9ydENvbmZpZ3VyYXRpb24gJiBQT1JUX0NPTkZJR19TWU1fUEFVU0VfRU5BQkxFRCkKKwlpZiAocG9ydENvbmZpZ3VyYXRpb24gJiBQT1JUX0NPTkZJR19TWU1fUEFVU0VfRU5BQkxFRCkKIAkJcmVnIHw9IFBIWV9ORUdfQVNZX1BBVVNFIHwgUEhZX05FR19TWU1fUEFVU0U7CiAKLQlpZihwb3J0Q29uZmlndXJhdGlvbiAmIFBPUlRfQ09ORklHX0ZVTExfRFVQTEVYX0VOQUJMRUQpIHsKLQkJaWYocG9ydENvbmZpZ3VyYXRpb24gJiBQT1JUX0NPTkZJR18xMDBNQl9TUEVFRCkKKwlpZiAocG9ydENvbmZpZ3VyYXRpb24gJiBQT1JUX0NPTkZJR19GVUxMX0RVUExFWF9FTkFCTEVEKSB7CisJCWlmIChwb3J0Q29uZmlndXJhdGlvbiAmIFBPUlRfQ09ORklHXzEwME1CX1NQRUVEKQogCQkJcmVnIHw9IFBIWV9ORUdfQURWXzEwMEY7CiAKLQkJaWYocG9ydENvbmZpZ3VyYXRpb24gJiBQT1JUX0NPTkZJR18xME1CX1NQRUVEKQorCQlpZiAocG9ydENvbmZpZ3VyYXRpb24gJiBQT1JUX0NPTkZJR18xME1CX1NQRUVEKQogCQkJcmVnIHw9IFBIWV9ORUdfQURWXzEwRjsKIAl9CiAKLQlpZihwb3J0Q29uZmlndXJhdGlvbiAmIFBPUlRfQ09ORklHX0hBTEZfRFVQTEVYX0VOQUJMRUQpIHsKLQkJaWYocG9ydENvbmZpZ3VyYXRpb24gJiBQT1JUX0NPTkZJR18xMDBNQl9TUEVFRCkKKwlpZiAocG9ydENvbmZpZ3VyYXRpb24gJiBQT1JUX0NPTkZJR19IQUxGX0RVUExFWF9FTkFCTEVEKSB7CisJCWlmIChwb3J0Q29uZmlndXJhdGlvbiAmIFBPUlRfQ09ORklHXzEwME1CX1NQRUVEKQogCQkJcmVnIHw9IFBIWV9ORUdfQURWXzEwMEg7CiAKLQkJaWYocG9ydENvbmZpZ3VyYXRpb24gJiBQT1JUX0NPTkZJR18xME1CX1NQRUVEKQorCQlpZiAocG9ydENvbmZpZ3VyYXRpb24gJiBQT1JUX0NPTkZJR18xME1CX1NQRUVEKQogCQkJcmVnIHw9IFBIWV9ORUdfQURWXzEwSDsKIAl9CiAKLQlpZihwb3J0Q29uZmlndXJhdGlvbiAmCi0JICAgUE9SVF9DT05GSUdfMTAwME1CX1NQRUVEKSB7CisJaWYgKHBvcnRDb25maWd1cmF0aW9uICYgUE9SVF9DT05GSUdfMTAwME1CX1NQRUVEKQogCQlyZWcgfD0gMTsKLQl9CiAKIAlxbF9taWlfd3JpdGVfcmVnX2V4KHFkZXYsIFBIWV9ORUdfQURWRVIsIHJlZywKIAkJCSAgICBQSFlBZGRyW3FkZXYtPm1hY19pbmRleF0pOwpAQCAtMTQ5Miw3ICsxNDE3LDcgQEAKIHN0YXRpYyB1MzIgcWxfZ2V0X2xpbmtfc3RhdGUoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQogewogCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0KLQkgICAgCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwkJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOwogCXUzMiBiaXRUb0NoZWNrID0gMDsKIAl1MzIgdGVtcCwgbGlua1N0YXRlOwogCkBAIC0xNTA0LDIyICsxNDI5LDIyIEBACiAJCWJpdFRvQ2hlY2sgPSBQT1JUX1NUQVRVU19VUDE7CiAJCWJyZWFrOwogCX0KKwogCXRlbXAgPSBxbF9yZWFkX3BhZ2UwX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5wb3J0U3RhdHVzKTsKLQlpZiAodGVtcCAmIGJpdFRvQ2hlY2spIHsKKwlpZiAodGVtcCAmIGJpdFRvQ2hlY2spCiAJCWxpbmtTdGF0ZSA9IExTX1VQOwotCX0gZWxzZSB7CisJZWxzZQogCQlsaW5rU3RhdGUgPSBMU19ET1dOOwotCX0KKwogCXJldHVybiBsaW5rU3RhdGU7CiB9CiAKIHN0YXRpYyBpbnQgcWxfcG9ydF9zdGFydChzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCiB7Ci0JaWYocWxfc2VtX3NwaW5sb2NrKHFkZXYsIFFMX1BIWV9HSU9fU0VNX01BU0ssCisJaWYgKHFsX3NlbV9zcGlubG9jayhxZGV2LCBRTF9QSFlfR0lPX1NFTV9NQVNLLAogCQkoUUxfUkVTT1VSQ0VfQklUU19CQVNFX0NPREUgfCAocWRldi0+bWFjX2luZGV4KSAqCiAJCQkgMikgPDwgNykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ291bGQgbm90IGdldCBodyBsb2NrIGZvciBHSU9cbiIsCi0JCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihxZGV2LT5uZGV2LCAiQ291bGQgbm90IGdldCBodyBsb2NrIGZvciBHSU9cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xNTM3LDE5ICsxNDYyLDE2IEBACiBzdGF0aWMgaW50IHFsX2ZpbmlzaF9hdXRvX25lZyhzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCiB7CiAKLQlpZihxbF9zZW1fc3BpbmxvY2socWRldiwgUUxfUEhZX0dJT19TRU1fTUFTSywKKwlpZiAocWxfc2VtX3NwaW5sb2NrKHFkZXYsIFFMX1BIWV9HSU9fU0VNX01BU0ssCiAJCShRTF9SRVNPVVJDRV9CSVRTX0JBU0VfQ09ERSB8IChxZGV2LT5tYWNfaW5kZXgpICoKIAkJCSAyKSA8PCA3KSkKIAkJcmV0dXJuIC0xOwogCiAJaWYgKCFxbF9hdXRvX25lZ19lcnJvcihxZGV2KSkgewotCQlpZiAodGVzdF9iaXQoUUxfTElOS19NQVNURVIsJnFkZXYtPmZsYWdzKSkgeworCQlpZiAodGVzdF9iaXQoUUxfTElOS19NQVNURVIsICZxZGV2LT5mbGFncykpIHsKIAkJCS8qIGNvbmZpZ3VyZSB0aGUgTUFDICovCi0JCQlpZiAobmV0aWZfbXNnX2xpbmsocWRldikpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYCi0JCQkJICAgICAgICIlczogQ29uZmlndXJpbmcgbGluay5cbiIsCi0JCQkJICAgICAgIHFkZXYtPm5kZXYtPgotCQkJCSAgICAgICBuYW1lKTsKKwkJCW5ldGlmX3ByaW50ayhxZGV2LCBsaW5rLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJCSAgICAgIkNvbmZpZ3VyaW5nIGxpbmtcbiIpOwogCQkJcWxfbWFjX2NmZ19zb2Z0X3Jlc2V0KHFkZXYsIDEpOwogCQkJcWxfbWFjX2NmZ19naWcocWRldiwKIAkJCQkgICAgICAgKHFsX2dldF9saW5rX3NwZWVkCkBAIC0xNTY0LDQzICsxNDg2LDMyIEBACiAJCQlxbF9tYWNfY2ZnX3NvZnRfcmVzZXQocWRldiwgMCk7CiAKIAkJCS8qIGVuYWJsZSB0aGUgTUFDICovCi0JCQlpZiAobmV0aWZfbXNnX2xpbmsocWRldikpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYCi0JCQkJICAgICAgICIlczogRW5hYmxpbmcgbWFjLlxuIiwKLQkJCQkgICAgICAgcWRldi0+bmRldi0+Ci0JCQkJCSAgICAgICBuYW1lKTsKKwkJCW5ldGlmX3ByaW50ayhxZGV2LCBsaW5rLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJCSAgICAgIkVuYWJsaW5nIG1hY1xuIik7CiAJCQlxbF9tYWNfZW5hYmxlKHFkZXYsIDEpOwogCQl9CiAKIAkJcWRldi0+cG9ydF9saW5rX3N0YXRlID0gTFNfVVA7CiAJCW5ldGlmX3N0YXJ0X3F1ZXVlKHFkZXYtPm5kZXYpOwogCQluZXRpZl9jYXJyaWVyX29uKHFkZXYtPm5kZXYpOwotCQlpZiAobmV0aWZfbXNnX2xpbmsocWRldikpCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWAotCQkJICAgICAgICIlczogTGluayBpcyB1cCBhdCAlZCBNYnBzLCAlcyBkdXBsZXguXG4iLAotCQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUsCi0JCQkgICAgICAgcWxfZ2V0X2xpbmtfc3BlZWQocWRldiksCi0JCQkgICAgICAgcWxfaXNfbGlua19mdWxsX2R1cChxZGV2KQotCQkJICAgICAgID8gImZ1bGwiIDogImhhbGYiKTsKKwkJbmV0aWZfaW5mbyhxZGV2LCBsaW5rLCBxZGV2LT5uZGV2LAorCQkJICAgIkxpbmsgaXMgdXAgYXQgJWQgTWJwcywgJXMgZHVwbGV4XG4iLAorCQkJICAgcWxfZ2V0X2xpbmtfc3BlZWQocWRldiksCisJCQkgICBxbF9pc19saW5rX2Z1bGxfZHVwKHFkZXYpID8gImZ1bGwiIDogImhhbGYiKTsKIAogCX0gZWxzZSB7CS8qIFJlbW90ZSBlcnJvciBkZXRlY3RlZCAqLwogCi0JCWlmICh0ZXN0X2JpdChRTF9MSU5LX01BU1RFUiwmcWRldi0+ZmxhZ3MpKSB7Ci0JCQlpZiAobmV0aWZfbXNnX2xpbmsocWRldikpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYCi0JCQkJICAgICAgICIlczogUmVtb3RlIGVycm9yIGRldGVjdGVkLiAiCi0JCQkJICAgICAgICJDYWxsaW5nIHFsX3BvcnRfc3RhcnQoKS5cbiIsCi0JCQkJICAgICAgIHFkZXYtPm5kZXYtPgotCQkJCSAgICAgICBuYW1lKTsKKwkJaWYgKHRlc3RfYml0KFFMX0xJTktfTUFTVEVSLCAmcWRldi0+ZmxhZ3MpKSB7CisJCQluZXRpZl9wcmludGsocWRldiwgbGluaywgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCQkgICAgICJSZW1vdGUgZXJyb3IgZGV0ZWN0ZWQuIENhbGxpbmcgcWxfcG9ydF9zdGFydCgpXG4iKTsKIAkJCS8qCiAJCQkgKiBxbF9wb3J0X3N0YXJ0KCkgaXMgc2hhcmVkIGNvZGUgYW5kIG5lZWRzCiAJCQkgKiB0byBsb2NrIHRoZSBQSFkgb24gaXQncyBvd24uCiAJCQkgKi8KIAkJCXFsX3NlbV91bmxvY2socWRldiwgUUxfUEhZX0dJT19TRU1fTUFTSyk7Ci0JCQlpZihxbF9wb3J0X3N0YXJ0KHFkZXYpKQl7LyogUmVzdGFydCBwb3J0ICovCisJCQlpZiAocWxfcG9ydF9zdGFydChxZGV2KSkJLyogUmVzdGFydCBwb3J0ICovCiAJCQkJcmV0dXJuIC0xOwotCQkJfSBlbHNlCi0JCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAlxbF9zZW1fdW5sb2NrKHFkZXYsIFFMX1BIWV9HSU9fU0VNX01BU0spOwpAQCAtMTYxOSwzMyArMTUzMCwyOCBAQAogCiAJY3Vycl9saW5rX3N0YXRlID0gcWxfZ2V0X2xpbmtfc3RhdGUocWRldik7CiAKLQlpZiAodGVzdF9iaXQoUUxfUkVTRVRfQUNUSVZFLCZxZGV2LT5mbGFncykpIHsKLQkJaWYgKG5ldGlmX21zZ19saW5rKHFkZXYpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKLQkJCSAgICAgICAiJXM6IFJlc2V0IGluIHByb2dyZXNzLCBza2lwIHByb2Nlc3NpbmcgbGluayAiCi0JCQkgICAgICAgInN0YXRlLlxuIiwgcWRldi0+bmRldi0+bmFtZSk7CisJaWYgKHRlc3RfYml0KFFMX1JFU0VUX0FDVElWRSwgJnFkZXYtPmZsYWdzKSkgeworCQluZXRpZl9pbmZvKHFkZXYsIGxpbmssIHFkZXYtPm5kZXYsCisJCQkgICAiUmVzZXQgaW4gcHJvZ3Jlc3MsIHNraXAgcHJvY2Vzc2luZyBsaW5rIHN0YXRlXG4iKTsKIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7CiAKIAkJLyogUmVzdGFydCB0aW1lciBvbiAyIHNlY29uZCBpbnRlcnZhbC4gKi8KLQkJbW9kX3RpbWVyKCZxZGV2LT5hZGFwdGVyX3RpbWVyLCBqaWZmaWVzICsgSFogKiAxKTtcCisJCW1vZF90aW1lcigmcWRldi0+YWRhcHRlcl90aW1lciwgamlmZmllcyArIEhaICogMSk7CiAKIAkJcmV0dXJuOwogCX0KIAogCXN3aXRjaCAocWRldi0+cG9ydF9saW5rX3N0YXRlKSB7CiAJZGVmYXVsdDoKLQkJaWYgKHRlc3RfYml0KFFMX0xJTktfTUFTVEVSLCZxZGV2LT5mbGFncykpIHsKKwkJaWYgKHRlc3RfYml0KFFMX0xJTktfTUFTVEVSLCAmcWRldi0+ZmxhZ3MpKQogCQkJcWxfcG9ydF9zdGFydChxZGV2KTsKLQkJfQogCQlxZGV2LT5wb3J0X2xpbmtfc3RhdGUgPSBMU19ET1dOOwogCQkvKiBGYWxsIFRocm91Z2ggKi8KIAogCWNhc2UgTFNfRE9XTjoKIAkJaWYgKGN1cnJfbGlua19zdGF0ZSA9PSBMU19VUCkgewotCQkJaWYgKG5ldGlmX21zZ19saW5rKHFkZXYpKQotCQkJCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogTGluayBpcyB1cC5cbiIsCi0JCQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUpOworCQkJbmV0aWZfaW5mbyhxZGV2LCBsaW5rLCBxZGV2LT5uZGV2LCAiTGluayBpcyB1cFxuIik7CiAJCQlpZiAocWxfaXNfYXV0b19uZWdfY29tcGxldGUocWRldikpCiAJCQkJcWxfZmluaXNoX2F1dG9fbmVnKHFkZXYpOwogCkBAIC0xNjYyLDkgKzE1NjgsNyBAQAogCQkgKiBiYWNrIHVwCiAJCSAqLwogCQlpZiAoY3Vycl9saW5rX3N0YXRlID09IExTX0RPV04pIHsKLQkJCWlmIChuZXRpZl9tc2dfbGluayhxZGV2KSkKLQkJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IExpbmsgaXMgZG93bi5cbiIsCi0JCQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUpOworCQkJbmV0aWZfaW5mbyhxZGV2LCBsaW5rLCBxZGV2LT5uZGV2LCAiTGluayBpcyBkb3duXG4iKTsKIAkJCXFkZXYtPnBvcnRfbGlua19zdGF0ZSA9IExTX0RPV047CiAJCX0KIAkJaWYgKHFsX2xpbmtfZG93bl9kZXRlY3QocWRldikpCkBAIC0xNjgzLDkgKzE1ODcsOSBAQAogc3RhdGljIHZvaWQgcWxfZ2V0X3BoeV9vd25lcihzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCiB7CiAJaWYgKHFsX3RoaXNfYWRhcHRlcl9jb250cm9sc19wb3J0KHFkZXYpKQotCQlzZXRfYml0KFFMX0xJTktfTUFTVEVSLCZxZGV2LT5mbGFncyk7CisJCXNldF9iaXQoUUxfTElOS19NQVNURVIsICZxZGV2LT5mbGFncyk7CiAJZWxzZQotCQljbGVhcl9iaXQoUUxfTElOS19NQVNURVIsJnFkZXYtPmZsYWdzKTsKKwkJY2xlYXJfYml0KFFMX0xJTktfTUFTVEVSLCAmcWRldi0+ZmxhZ3MpOwogfQogCiAvKgpAQCAtMTY5NSw3ICsxNTk5LDcgQEAKIHsKIAlxbF9taWlfZW5hYmxlX3NjYW5fbW9kZShxZGV2KTsKIAotCWlmICh0ZXN0X2JpdChRTF9MSU5LX09QVElDQUwsJnFkZXYtPmZsYWdzKSkgeworCWlmICh0ZXN0X2JpdChRTF9MSU5LX09QVElDQUwsICZxZGV2LT5mbGFncykpIHsKIAkJaWYgKHFsX3RoaXNfYWRhcHRlcl9jb250cm9sc19wb3J0KHFkZXYpKQogCQkJcWxfcGV0YmlfaW5pdF9leChxZGV2KTsKIAl9IGVsc2UgewpAQCAtMTcwNSwxOCArMTYwOSwxOCBAQAogfQogCiAvKgotICogTUlJX1NldHVwIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgdGFraW5nIHRoZSBQSFkgb3V0IG9mIHJlc2V0IHNvIHRoYXQgdGhlCi0gKiBtYW5hZ2VtZW50IGludGVyZmFjZSBjbG9jayBzcGVlZCBjYW4gYmUgc2V0IHByb3Blcmx5LiAgSXQgd291bGQgYmUgYmV0dGVyIGlmCi0gKiB3ZSBoYWQgYSB3YXkgdG8gZGlzYWJsZSBNREMgdW50aWwgYWZ0ZXIgdGhlIFBIWSBpcyBvdXQgb2YgcmVzZXQsIGJ1dCB3ZQotICogZG9uJ3QgaGF2ZSB0aGF0IGNhcGFiaWxpdHkuCisgKiBNSUlfU2V0dXAgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSB0YWtpbmcgdGhlIFBIWSBvdXQgb2YgcmVzZXQKKyAqIHNvIHRoYXQgdGhlIG1hbmFnZW1lbnQgaW50ZXJmYWNlIGNsb2NrIHNwZWVkIGNhbiBiZSBzZXQgcHJvcGVybHkuCisgKiBJdCB3b3VsZCBiZSBiZXR0ZXIgaWYgd2UgaGFkIGEgd2F5IHRvIGRpc2FibGUgTURDIHVudGlsIGFmdGVyIHRoZQorICogUEhZIGlzIG91dCBvZiByZXNldCwgYnV0IHdlIGRvbid0IGhhdmUgdGhhdCBjYXBhYmlsaXR5LgogICovCiBzdGF0aWMgaW50IHFsX21paV9zZXR1cChzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCiB7CiAJdTMyIHJlZzsKIAlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9Ci0JICAgIAkJcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKIAotCWlmKHFsX3NlbV9zcGlubG9jayhxZGV2LCBRTF9QSFlfR0lPX1NFTV9NQVNLLAorCWlmIChxbF9zZW1fc3BpbmxvY2socWRldiwgUUxfUEhZX0dJT19TRU1fTUFTSywKIAkJCShRTF9SRVNPVVJDRV9CSVRTX0JBU0VfQ09ERSB8IChxZGV2LT5tYWNfaW5kZXgpICoKIAkJCSAyKSA8PCA3KSkKIAkJcmV0dXJuIC0xOwpAQCAtMTczNSwyNCArMTYzOSwyNCBAQAogCXJldHVybiAwOwogfQogCisjZGVmaW5lIFNVUFBPUlRFRF9PUFRJQ0FMX01PREVTCShTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAlcCisJCQkJIFNVUFBPUlRFRF9GSUJSRSB8CQlcCisJCQkJIFNVUFBPUlRFRF9BdXRvbmVnKQorI2RlZmluZSBTVVBQT1JURURfVFBfTU9ERVMJKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfAlcCisJCQkJIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfAlcCisJCQkJIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwJXAorCQkJCSBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCB8CVwKKwkJCQkgU1VQUE9SVEVEXzEwMDBiYXNlVF9IYWxmIHwJXAorCQkJCSBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAlcCisJCQkJIFNVUFBPUlRFRF9BdXRvbmVnIHwJCVwKKwkJCQkgU1VQUE9SVEVEX1RQKTsJCQlcCisKIHN0YXRpYyB1MzIgcWxfc3VwcG9ydGVkX21vZGVzKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldikKIHsKLQl1MzIgc3VwcG9ydGVkOworCWlmICh0ZXN0X2JpdChRTF9MSU5LX09QVElDQUwsICZxZGV2LT5mbGFncykpCisJCXJldHVybiBTVVBQT1JURURfT1BUSUNBTF9NT0RFUzsKIAotCWlmICh0ZXN0X2JpdChRTF9MSU5LX09QVElDQUwsJnFkZXYtPmZsYWdzKSkgewotCQlzdXBwb3J0ZWQgPSBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfCBTVVBQT1JURURfRklCUkUKLQkJICAgIHwgU1VQUE9SVEVEX0F1dG9uZWc7Ci0JfSBlbHNlIHsKLQkJc3VwcG9ydGVkID0gU1VQUE9SVEVEXzEwYmFzZVRfSGFsZgotCQkgICAgfCBTVVBQT1JURURfMTBiYXNlVF9GdWxsCi0JCSAgICB8IFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmCi0JCSAgICB8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsCi0JCSAgICB8IFNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZgotCQkgICAgfCBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwKLQkJICAgIHwgU1VQUE9SVEVEX0F1dG9uZWcgfCBTVVBQT1JURURfVFA7Ci0JfQotCi0JcmV0dXJuIHN1cHBvcnRlZDsKKwlyZXR1cm4gU1VQUE9SVEVEX1RQX01PREVTOwogfQogCiBzdGF0aWMgaW50IHFsX2dldF9hdXRvX2NmZ19zdGF0dXMoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQpAQCAtMTc2MCw5ICsxNjY0LDkgQEAKIAlpbnQgc3RhdHVzOwogCXVuc2lnbmVkIGxvbmcgaHdfZmxhZ3M7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnFkZXYtPmh3X2xvY2ssIGh3X2ZsYWdzKTsKLQlpZihxbF9zZW1fc3BpbmxvY2socWRldiwgUUxfUEhZX0dJT19TRU1fTUFTSywKLQkJKFFMX1JFU09VUkNFX0JJVFNfQkFTRV9DT0RFIHwgKHFkZXYtPm1hY19pbmRleCkgKgotCQkJIDIpIDw8IDcpKSB7CisJaWYgKHFsX3NlbV9zcGlubG9jayhxZGV2LCBRTF9QSFlfR0lPX1NFTV9NQVNLLAorCQkJICAgIChRTF9SRVNPVVJDRV9CSVRTX0JBU0VfQ09ERSB8CisJCQkgICAgIChxZGV2LT5tYWNfaW5kZXgpICogMikgPDwgNykpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcWRldi0+aHdfbG9jaywgaHdfZmxhZ3MpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNzc3LDkgKzE2ODEsOSBAQAogCXUzMiBzdGF0dXM7CiAJdW5zaWduZWQgbG9uZyBod19mbGFnczsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcWRldi0+aHdfbG9jaywgaHdfZmxhZ3MpOwotCWlmKHFsX3NlbV9zcGlubG9jayhxZGV2LCBRTF9QSFlfR0lPX1NFTV9NQVNLLAotCQkoUUxfUkVTT1VSQ0VfQklUU19CQVNFX0NPREUgfCAocWRldi0+bWFjX2luZGV4KSAqCi0JCQkgMikgPDwgNykpIHsKKwlpZiAocWxfc2VtX3NwaW5sb2NrKHFkZXYsIFFMX1BIWV9HSU9fU0VNX01BU0ssCisJCQkgICAgKFFMX1JFU09VUkNFX0JJVFNfQkFTRV9DT0RFIHwKKwkJCSAgICAgKHFkZXYtPm1hY19pbmRleCkgKiAyKSA8PCA3KSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7CiAJCXJldHVybiAwOwogCX0KQEAgLTE3OTQsOSArMTY5OCw5IEBACiAJaW50IHN0YXR1czsKIAl1bnNpZ25lZCBsb25nIGh3X2ZsYWdzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7Ci0JaWYocWxfc2VtX3NwaW5sb2NrKHFkZXYsIFFMX1BIWV9HSU9fU0VNX01BU0ssCi0JCShRTF9SRVNPVVJDRV9CSVRTX0JBU0VfQ09ERSB8IChxZGV2LT5tYWNfaW5kZXgpICoKLQkJCSAyKSA8PCA3KSkgeworCWlmIChxbF9zZW1fc3BpbmxvY2socWRldiwgUUxfUEhZX0dJT19TRU1fTUFTSywKKwkJCSAgICAoUUxfUkVTT1VSQ0VfQklUU19CQVNFX0NPREUgfAorCQkJICAgICAocWRldi0+bWFjX2luZGV4KSAqIDIpIDw8IDcpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFkZXYtPmh3X2xvY2ssIGh3X2ZsYWdzKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTgwNiw3ICsxNzEwLDYgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi0KIHN0YXRpYyBpbnQgcWxfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpCiB7CiAJc3RydWN0IHFsM19hZGFwdGVyICpxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CkBAIC0xODE0LDcgKzE3MTcsNyBAQAogCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKIAllY21kLT5zdXBwb3J0ZWQgPSBxbF9zdXBwb3J0ZWRfbW9kZXMocWRldik7CiAKLQlpZiAodGVzdF9iaXQoUUxfTElOS19PUFRJQ0FMLCZxZGV2LT5mbGFncykpIHsKKwlpZiAodGVzdF9iaXQoUUxfTElOS19PUFRJQ0FMLCAmcWRldi0+ZmxhZ3MpKSB7CiAJCWVjbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOwogCX0gZWxzZSB7CiAJCWVjbWQtPnBvcnQgPSBQT1JUX1RQOwpAQCAtMTg1NSwxMCArMTc1OCwxMSBAQAogCQkJICAgICAgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpCiB7CiAJc3RydWN0IHFsM19hZGFwdGVyICpxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7Ci0Jc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPSBxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9CisJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOwogCiAJdTMyIHJlZzsKLQlpZihxZGV2LT5tYWNfaW5kZXggPT0gMCkKKwlpZiAocWRldi0+bWFjX2luZGV4ID09IDApCiAJCXJlZyA9IHFsX3JlYWRfcGFnZTBfcmVnKHFkZXYsICZwb3J0X3JlZ3MtPm1hYzBDb25maWdSZWcpOwogCWVsc2UKIAkJcmVnID0gcWxfcmVhZF9wYWdlMF9yZWcocWRldiwgJnBvcnRfcmVncy0+bWFjMUNvbmZpZ1JlZyk7CkBAIC0xODg1LDEyICsxNzg5LDEyIEBACiAKIAl3aGlsZSAobHJnX2J1Zl9jYikgewogCQlpZiAoIWxyZ19idWZfY2ItPnNrYikgewotCQkJbHJnX2J1Zl9jYi0+c2tiID0gbmV0ZGV2X2FsbG9jX3NrYihxZGV2LT5uZGV2LAotCQkJCQkJCSAgIHFkZXYtPmxyZ19idWZmZXJfbGVuKTsKKwkJCWxyZ19idWZfY2ItPnNrYiA9CisJCQkJbmV0ZGV2X2FsbG9jX3NrYihxZGV2LT5uZGV2LAorCQkJCQkJIHFkZXYtPmxyZ19idWZmZXJfbGVuKTsKIAkJCWlmICh1bmxpa2VseSghbHJnX2J1Zl9jYi0+c2tiKSkgewotCQkJCXByaW50ayhLRVJOX0RFQlVHIFBGWAotCQkJCSAgICAgICAiJXM6IEZhaWxlZCBuZXRkZXZfYWxsb2Nfc2tiKCkuXG4iLAotCQkJCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJCSAgICAgICJGYWlsZWQgbmV0ZGV2X2FsbG9jX3NrYigpXG4iKTsKIAkJCQlicmVhazsKIAkJCX0gZWxzZSB7CiAJCQkJLyoKQEAgLTE5MDUsOSArMTgwOSwxMCBAQAogCQkJCQkJICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCiAJCQkJZXJyID0gcGNpX2RtYV9tYXBwaW5nX2Vycm9yKHFkZXYtPnBkZXYsIG1hcCk7Ci0JCQkJaWYoZXJyKSB7Ci0JCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFBDSSBtYXBwaW5nIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwKLQkJCQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUsIGVycik7CisJCQkJaWYgKGVycikgeworCQkJCQluZXRkZXZfZXJyKHFkZXYtPm5kZXYsCisJCQkJCQkgICAiUENJIG1hcHBpbmcgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLAorCQkJCQkJICAgZXJyKTsKIAkJCQkJZGV2X2tmcmVlX3NrYihscmdfYnVmX2NiLT5za2IpOwogCQkJCQlscmdfYnVmX2NiLT5za2IgPSBOVUxMOwogCQkJCQlicmVhazsKQEAgLTE5MTUsOSArMTgyMCw5IEBACiAKIAogCQkJCWxyZ19idWZfY2ItPmJ1Zl9waHlfYWRkcl9sb3cgPQotCQkJCSAgICBjcHVfdG9fbGUzMihMU182NEJJVFMobWFwKSk7CisJCQkJCWNwdV90b19sZTMyKExTXzY0QklUUyhtYXApKTsKIAkJCQlscmdfYnVmX2NiLT5idWZfcGh5X2FkZHJfaGlnaCA9Ci0JCQkJICAgIGNwdV90b19sZTMyKE1TXzY0QklUUyhtYXApKTsKKwkJCQkJY3B1X3RvX2xlMzIoTVNfNjRCSVRTKG1hcCkpOwogCQkJCWRtYV91bm1hcF9hZGRyX3NldChscmdfYnVmX2NiLCBtYXBhZGRyLCBtYXApOwogCQkJCWRtYV91bm1hcF9sZW5fc2V0KGxyZ19idWZfY2IsIG1hcGxlbiwKIAkJCQkJCSAgcWRldi0+bHJnX2J1ZmZlcl9sZW4gLQpAQCAtMTkzNyw3ICsxODQyLDkgQEAKICAqLwogc3RhdGljIHZvaWQgcWxfdXBkYXRlX3NtYWxsX2J1ZnFfcHJvZF9pbmRleChzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCiB7Ci0Jc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPSBxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9CisJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOworCiAJaWYgKHFkZXYtPnNtYWxsX2J1Zl9yZWxlYXNlX2NudCA+PSAxNikgewogCQl3aGlsZSAocWRldi0+c21hbGxfYnVmX3JlbGVhc2VfY250ID49IDE2KSB7CiAJCQlxZGV2LT5zbWFsbF9idWZfcV9wcm9kdWNlcl9pbmRleCsrOwpAQCAtMTk2MSw3ICsxODY4LDggQEAKIAlzdHJ1Y3QgYnVmcV9hZGRyX2VsZW1lbnQgKmxyZ19idWZfcV9lbGU7CiAJaW50IGk7CiAJc3RydWN0IHFsX3Jjdl9idWZfY2IgKmxyZ19idWZfY2I7Ci0Jc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPSBxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9CisJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOwogCiAJaWYgKChxZGV2LT5scmdfYnVmX2ZyZWVfY291bnQgPj0gOCkgJiYKIAkgICAgKHFkZXYtPmxyZ19idWZfcmVsZWFzZV9jbnQgPj0gMTYpKSB7CkBAIC0xOTg5LDcgKzE4OTcsOCBAQAogCiAJCQlxZGV2LT5scmdfYnVmX3FfcHJvZHVjZXJfaW5kZXgrKzsKIAotCQkJaWYgKHFkZXYtPmxyZ19idWZfcV9wcm9kdWNlcl9pbmRleCA9PSBxZGV2LT5udW1fbGJ1ZnFfZW50cmllcykKKwkJCWlmIChxZGV2LT5scmdfYnVmX3FfcHJvZHVjZXJfaW5kZXggPT0KKwkJCSAgICBxZGV2LT5udW1fbGJ1ZnFfZW50cmllcykKIAkJCQlxZGV2LT5scmdfYnVmX3FfcHJvZHVjZXJfaW5kZXggPSAwOwogCiAJCQlpZiAocWRldi0+bHJnX2J1Zl9xX3Byb2R1Y2VyX2luZGV4ID09CkBAIC0yMDExLDIzICsxOTIwLDI2IEBACiAJaW50IGk7CiAJaW50IHJldHZhbCA9IDA7CiAKLQlpZihtYWNfcnNwLT5mbGFncyAmIE9CX01BQ19JT0NCX1JTUF9TKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZyYW1lIHNob3J0IGJ1dCwgZnJhbWUgd2FzIHBhZGRlZCBhbmQgc2VudC5cbiIpOworCWlmIChtYWNfcnNwLT5mbGFncyAmIE9CX01BQ19JT0NCX1JTUF9TKSB7CisJCW5ldGRldl93YXJuKHFkZXYtPm5kZXYsCisJCQkgICAgIkZyYW1lIHRvbyBzaG9ydCBidXQgaXQgd2FzIHBhZGRlZCBhbmQgc2VudFxuIik7CiAJfQogCiAJdHhfY2IgPSAmcWRldi0+dHhfYnVmW21hY19yc3AtPnRyYW5zYWN0aW9uX2lkXTsKIAogCS8qICBDaGVjayB0aGUgdHJhbnNtaXQgcmVzcG9uc2UgZmxhZ3MgZm9yIGFueSBlcnJvcnMgKi8KLQlpZihtYWNfcnNwLT5mbGFncyAmIE9CX01BQ19JT0NCX1JTUF9TKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRnJhbWUgdG9vIHNob3J0IHRvIGJlIGxlZ2FsLCBmcmFtZSBub3Qgc2VudC5cbiIpOworCWlmIChtYWNfcnNwLT5mbGFncyAmIE9CX01BQ19JT0NCX1JTUF9TKSB7CisJCW5ldGRldl9lcnIocWRldi0+bmRldiwKKwkJCSAgICJGcmFtZSB0b28gc2hvcnQgdG8gYmUgbGVnYWwsIGZyYW1lIG5vdCBzZW50XG4iKTsKIAogCQlxZGV2LT5uZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJcmV0dmFsID0gLUVJTzsKIAkJZ290byBmcmFtZV9ub3Rfc2VudDsKIAl9CiAKLQlpZih0eF9jYi0+c2VnX2NvdW50ID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ0eF9jYi0+c2VnX2NvdW50ID09IDA6ICVkXG4iLCBtYWNfcnNwLT50cmFuc2FjdGlvbl9pZCk7CisJaWYgKHR4X2NiLT5zZWdfY291bnQgPT0gMCkgeworCQluZXRkZXZfZXJyKHFkZXYtPm5kZXYsICJ0eF9jYi0+c2VnX2NvdW50ID09IDA6ICVkXG4iLAorCQkJICAgbWFjX3JzcC0+dHJhbnNhY3Rpb25faWQpOwogCiAJCXFkZXYtPm5kZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQlyZXR2YWwgPSAtRUlPOwpAQCAtMjA3Myw3ICsxOTg1LDcgQEAKIAlxZGV2LT5scmdfYnVmX3JlbGVhc2VfY250Kys7CiAJaWYgKCsrcWRldi0+bHJnX2J1Zl9pbmRleCA9PSBxZGV2LT5udW1fbGFyZ2VfYnVmZmVycykKIAkJcWRldi0+bHJnX2J1Zl9pbmRleCA9IDA7Ci0JcmV0dXJuKGxyZ19idWZfY2IpOworCXJldHVybiBscmdfYnVmX2NiOwogfQogCiAvKgpAQCAtMjE3NywxMiArMjA4OSwxMSBAQAogCQlpZiAoY2hlY2tzdW0gJgogCQkJKElCX0lQX0lPQ0JfUlNQXzMwMzJfSUNFIHwKIAkJCSBJQl9JUF9JT0NCX1JTUF8zMDMyX0NFKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIiVzOiBCYWQgY2hlY2tzdW0gZm9yIHRoaXMgJXMgcGFja2V0LCBjaGVja3N1bSA9ICV4LlxuIiwKLQkJCSAgICAgICBfX2Z1bmNfXywKLQkJCSAgICAgICAoKGNoZWNrc3VtICYKLQkJCQlJQl9JUF9JT0NCX1JTUF8zMDMyX1RDUCkgPyAiVENQIiA6Ci0JCQkJIlVEUCIpLGNoZWNrc3VtKTsKKwkJCW5ldGRldl9lcnIobmRldiwKKwkJCQkgICAiJXM6IEJhZCBjaGVja3N1bSBmb3IgdGhpcyAlcyBwYWNrZXQsIGNoZWNrc3VtID0gJXhcbiIsCisJCQkJICAgX19mdW5jX18sCisJCQkJICAgKChjaGVja3N1bSAmIElCX0lQX0lPQ0JfUlNQXzMwMzJfVENQKSA/CisJCQkJICAgICJUQ1AiIDogIlVEUCIpLCBjaGVja3N1bSk7CiAJCX0gZWxzZSBpZiAoKGNoZWNrc3VtICYgSUJfSVBfSU9DQl9SU1BfMzAzMl9UQ1ApIHx8CiAJCQkJKGNoZWNrc3VtICYgSUJfSVBfSU9DQl9SU1BfMzAzMl9VRFAgJiYKIAkJCQkhKGNoZWNrc3VtICYgSUJfSVBfSU9DQl9SU1BfMzAzMl9OVUMpKSkgewpAQCAtMjIxNSw4ICsyMTI2LDggQEAKIAkJbmV0X3JzcCA9IHFkZXYtPnJzcF9jdXJyZW50OwogCQlybWIoKTsKIAkJLyoKLQkJICogRml4IDQwMzIgY2hpcGUgdW5kb2N1bWVudGVkICJmZWF0dXJlIiB3aGVyZSBiaXQtOCBpcyBzZXQgaWYgdGhlCi0JCSAqIGluYm91bmQgY29tcGxldGlvbiBpcyBmb3IgYSBWTEFOLgorCQkgKiBGaXggNDAzMiBjaGlwJ3MgdW5kb2N1bWVudGVkICJmZWF0dXJlIiB3aGVyZSBiaXQtOCBpcyBzZXQKKwkJICogaWYgdGhlIGluYm91bmQgY29tcGxldGlvbiBpcyBmb3IgYSBWTEFOLgogCQkgKi8KIAkJaWYgKHFkZXYtPmRldmljZV9pZCA9PSBRTDMwMzJfREVWSUNFX0lEKQogCQkJbmV0X3JzcC0+b3Bjb2RlICY9IDB4N2Y7CkBAIC0yMjQyLDIyICsyMTUzLDE4IEBACiAJCQkJCQkgbmV0X3JzcCk7CiAJCQkoKnJ4X2NsZWFuZWQpKys7CiAJCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXsKLQkJCQl1MzIgKnRtcCA9ICh1MzIgKikgbmV0X3JzcDsKLQkJCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkJICAgICAgICIlczogSGl0IGRlZmF1bHQgY2FzZSwgbm90ICIKLQkJCQkgICAgICAgImhhbmRsZWQhXG4iCi0JCQkJICAgICAgICIJZHJvcHBpbmcgdGhlIHBhY2tldCwgb3Bjb2RlID0gIgotCQkJCSAgICAgICAiJXguXG4iLAotCQkJCSAgICAgICBuZGV2LT5uYW1lLCBuZXRfcnNwLT5vcGNvZGUpOwotCQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCQkgICAgICAgIjB4JTA4bHggMHglMDhseCAweCUwOGx4IDB4JTA4bHhcbiIsCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGludCl0bXBbMF0sCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGludCl0bXBbMV0sCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGludCl0bXBbMl0sCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGludCl0bXBbM10pOwotCQkJfQorCQlkZWZhdWx0OiB7CisJCQl1MzIgKnRtcCA9ICh1MzIgKiluZXRfcnNwOworCQkJbmV0ZGV2X2VycihuZGV2LAorCQkJCSAgICJIaXQgZGVmYXVsdCBjYXNlLCBub3QgaGFuZGxlZCFcbiIKKwkJCQkgICAiCWRyb3BwaW5nIHRoZSBwYWNrZXQsIG9wY29kZSA9ICV4XG4iCisJCQkJICAgIjB4JTA4bHggMHglMDhseCAweCUwOGx4IDB4JTA4bHhcbiIsCisJCQkJICAgbmV0X3JzcC0+b3Bjb2RlLAorCQkJCSAgICh1bnNpZ25lZCBsb25nIGludCl0bXBbMF0sCisJCQkJICAgKHVuc2lnbmVkIGxvbmcgaW50KXRtcFsxXSwKKwkJCQkgICAodW5zaWduZWQgbG9uZyBpbnQpdG1wWzJdLAorCQkJCSAgICh1bnNpZ25lZCBsb25nIGludCl0bXBbM10pOworCQl9CiAJCX0KIAogCQlxZGV2LT5yc3BfY29uc3VtZXJfaW5kZXgrKzsKQEAgLTIyODAsNyArMjE4Nyw4IEBACiAJc3RydWN0IHFsM19hZGFwdGVyICpxZGV2ID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBxbDNfYWRhcHRlciwgbmFwaSk7CiAJaW50IHJ4X2NsZWFuZWQgPSAwLCB0eF9jbGVhbmVkID0gMDsKIAl1bnNpZ25lZCBsb25nIGh3X2ZsYWdzOwotCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0gcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPQorCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKIAogCXFsX3R4X3J4X2NsZWFuKHFkZXYsICZ0eF9jbGVhbmVkLCAmcnhfY2xlYW5lZCwgYnVkZ2V0KTsKIApAQCAtMjMwMywxNSArMjIxMSwxNCBAQAogCiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXZfaWQ7CiAJc3RydWN0IHFsM19hZGFwdGVyICpxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7Ci0Jc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPSBxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9CisJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOwogCXUzMiB2YWx1ZTsKIAlpbnQgaGFuZGxlZCA9IDE7CiAJdTMyIHZhcjsKIAotCXBvcnRfcmVncyA9IHFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOwotCi0JdmFsdWUgPQotCSAgICBxbF9yZWFkX2NvbW1vbl9yZWdfbChxZGV2LCAmcG9ydF9yZWdzLT5Db21tb25SZWdzLmlzcENvbnRyb2xTdGF0dXMpOworCXZhbHVlID0gcWxfcmVhZF9jb21tb25fcmVnX2wocWRldiwKKwkJCQkgICAgICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3MuaXNwQ29udHJvbFN0YXR1cyk7CiAKIAlpZiAodmFsdWUgJiAoSVNQX0NPTlRST0xfRkUgfCBJU1BfQ09OVFJPTF9SSSkpIHsKIAkJc3Bpbl9sb2NrKCZxZGV2LT5hZGFwdGVyX2xvY2spOwpAQCAtMjMxOSw3ICsyMjI2LDcgQEAKIAkJbmV0aWZfY2Fycmllcl9vZmYocWRldi0+bmRldik7CiAJCXFsX2Rpc2FibGVfaW50ZXJydXB0cyhxZGV2KTsKIAkJcWRldi0+cG9ydF9saW5rX3N0YXRlID0gTFNfRE9XTjsKLQkJc2V0X2JpdChRTF9SRVNFVF9BQ1RJVkUsJnFkZXYtPmZsYWdzKSA7CisJCXNldF9iaXQoUUxfUkVTRVRfQUNUSVZFLCAmcWRldi0+ZmxhZ3MpIDsKIAogCQlpZiAodmFsdWUgJiBJU1BfQ09OVFJPTF9GRSkgewogCQkJLyoKQEAgLTIzMjgsNjkgKzIyMzUsNTMgQEAKIAkJCXZhciA9CiAJCQkgICAgcWxfcmVhZF9wYWdlMF9yZWdfbChxZGV2LAogCQkJCQkgICAgICAmcG9ydF9yZWdzLT5Qb3J0RmF0YWxFcnJTdGF0dXMpOwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKLQkJCSAgICAgICAiJXM6IFJlc2V0dGluZyBjaGlwLiBQb3J0RmF0YWxFcnJTdGF0dXMgIgotCQkJICAgICAgICJyZWdpc3RlciA9IDB4JXhcbiIsIG5kZXYtPm5hbWUsIHZhcik7Ci0JCQlzZXRfYml0KFFMX1JFU0VUX1NUQVJULCZxZGV2LT5mbGFncykgOworCQkJbmV0ZGV2X3dhcm4obmRldiwKKwkJCQkgICAgIlJlc2V0dGluZyBjaGlwLiBQb3J0RmF0YWxFcnJTdGF0dXMgcmVnaXN0ZXIgPSAweCV4XG4iLAorCQkJCSAgICB2YXIpOworCQkJc2V0X2JpdChRTF9SRVNFVF9TVEFSVCwgJnFkZXYtPmZsYWdzKSA7CiAJCX0gZWxzZSB7CiAJCQkvKgogCQkJICogU29mdCBSZXNldCBSZXF1ZXN0ZWQuCiAJCQkgKi8KLQkJCXNldF9iaXQoUUxfUkVTRVRfUEVSX1NDU0ksJnFkZXYtPmZsYWdzKSA7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkgICAgICAgIiVzOiBBbm90aGVyIGZ1bmN0aW9uIGlzc3VlZCBhIHJlc2V0IHRvIHRoZSAiCi0JCQkgICAgICAgImNoaXAuIElTUiB2YWx1ZSA9ICV4LlxuIiwgbmRldi0+bmFtZSwgdmFsdWUpOworCQkJc2V0X2JpdChRTF9SRVNFVF9QRVJfU0NTSSwgJnFkZXYtPmZsYWdzKSA7CisJCQluZXRkZXZfZXJyKG5kZXYsCisJCQkJICAgIkFub3RoZXIgZnVuY3Rpb24gaXNzdWVkIGEgcmVzZXQgdG8gdGhlIGNoaXAuIElTUiB2YWx1ZSA9ICV4XG4iLAorCQkJCSAgIHZhbHVlKTsKIAkJfQogCQlxdWV1ZV9kZWxheWVkX3dvcmsocWRldi0+d29ya3F1ZXVlLCAmcWRldi0+cmVzZXRfd29yaywgMCk7CiAJCXNwaW5fdW5sb2NrKCZxZGV2LT5hZGFwdGVyX2xvY2spOwogCX0gZWxzZSBpZiAodmFsdWUgJiBJU1BfSU1SX0RJU0FCTEVfQ01QTF9JTlQpIHsKIAkJcWxfZGlzYWJsZV9pbnRlcnJ1cHRzKHFkZXYpOwotCQlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmcWRldi0+bmFwaSkpKSB7CisJCWlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKCZxZGV2LT5uYXBpKSkpCiAJCQlfX25hcGlfc2NoZWR1bGUoJnFkZXYtPm5hcGkpOwotCQl9Ci0JfSBlbHNlIHsKKwl9IGVsc2UKIAkJcmV0dXJuIElSUV9OT05FOwotCX0KIAogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQogCiAvKgotICogR2V0IHRoZSB0b3RhbCBudW1iZXIgb2Ygc2VnbWVudHMgbmVlZGVkIGZvciB0aGUKLSAqIGdpdmVuIG51bWJlciBvZiBmcmFnbWVudHMuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlCi0gKiBvdXRib3VuZCBhZGRyZXNzIGxpc3RzIChPQUwpIHdpbGwgYmUgdXNlZCB3aGVuIG1vcmUgdGhhbgotICogdHdvIGZyYWdzIGFyZSBnaXZlbi4gIEVhY2ggYWRkcmVzcyBsaXN0IGhhcyA1IGFkZHIvbGVuCi0gKiBwYWlycy4gIFRoZSA1dGggcGFpciBpbiBlYWNoIEFPTCBpcyB1c2VkIHRvICBwb2ludCB0bwotICogdGhlIG5leHQgQU9MIGlmIG1vcmUgZnJhZ3MgYXJlIGNvbWluZy4KLSAqIFRoYXQgaXMgd2h5IHRoZSBmcmFnczpzZWdtZW50IGNvdW50ICByYXRpbyBpcyBub3QgbGluZWFyLgorICogR2V0IHRoZSB0b3RhbCBudW1iZXIgb2Ygc2VnbWVudHMgbmVlZGVkIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGZyYWdtZW50cy4KKyAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugb3V0Ym91bmQgYWRkcmVzcyBsaXN0cyAoT0FMKSB3aWxsIGJlIHVzZWQgd2hlbgorICogbW9yZSB0aGFuIHR3byBmcmFncyBhcmUgZ2l2ZW4uICBFYWNoIGFkZHJlc3MgbGlzdCBoYXMgNSBhZGRyL2xlbiBwYWlycy4KKyAqIFRoZSA1dGggcGFpciBpbiBlYWNoIE9BTCBpcyB1c2VkIHRvICBwb2ludCB0byB0aGUgbmV4dCBPQUwgaWYgbW9yZSBmcmFncworICogYXJlIGNvbWluZy4gIFRoYXQgaXMgd2h5IHRoZSBmcmFnczpzZWdtZW50IGNvdW50IHJhdGlvIGlzIG5vdCBsaW5lYXIuCiAgKi8KLXN0YXRpYyBpbnQgcWxfZ2V0X3NlZ19jb3VudChzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYsCi0JCQkgICAgdW5zaWduZWQgc2hvcnQgZnJhZ3MpCitzdGF0aWMgaW50IHFsX2dldF9zZWdfY291bnQoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2LCB1bnNpZ25lZCBzaG9ydCBmcmFncykKIHsKIAlpZiAocWRldi0+ZGV2aWNlX2lkID09IFFMMzAyMl9ERVZJQ0VfSUQpCiAJCXJldHVybiAxOwogCi0Jc3dpdGNoKGZyYWdzKSB7Ci0JY2FzZSAwOglyZXR1cm4gMTsJLyoganVzdCB0aGUgc2tiLT5kYXRhIHNlZyAqLwotCWNhc2UgMToJcmV0dXJuIDI7CS8qIHNrYi0+ZGF0YSArIDEgZnJhZyAqLwotCWNhc2UgMjoJcmV0dXJuIDM7CS8qIHNrYi0+ZGF0YSArIDIgZnJhZ3MgKi8KLQljYXNlIDM6CXJldHVybiA1OwkvKiBza2ItPmRhdGEgKyAxIGZyYWcgKyAxIEFPTCBjb250YWludGluZyAyIGZyYWdzICovCi0JY2FzZSA0OglyZXR1cm4gNjsKLQljYXNlIDU6CXJldHVybiA3OwotCWNhc2UgNjoJcmV0dXJuIDg7Ci0JY2FzZSA3OglyZXR1cm4gMTA7Ci0JY2FzZSA4OglyZXR1cm4gMTE7Ci0JY2FzZSA5OglyZXR1cm4gMTI7Ci0JY2FzZSAxMDogcmV0dXJuIDEzOwotCWNhc2UgMTE6IHJldHVybiAxNTsKLQljYXNlIDEyOiByZXR1cm4gMTY7Ci0JY2FzZSAxMzogcmV0dXJuIDE3OwotCWNhc2UgMTQ6IHJldHVybiAxODsKLQljYXNlIDE1OiByZXR1cm4gMjA7Ci0JY2FzZSAxNjogcmV0dXJuIDIxOwotCWNhc2UgMTc6IHJldHVybiAyMjsKLQljYXNlIDE4OiByZXR1cm4gMjM7Ci0JfQorCWlmIChmcmFncyA8PSAyKQorCQlyZXR1cm4gZnJhZ3MgKyAxOworCWVsc2UgaWYgKGZyYWdzIDw9IDYpCisJCXJldHVybiBmcmFncyArIDI7CisJZWxzZSBpZiAoZnJhZ3MgPD0gMTApCisJCXJldHVybiBmcmFncyArIDM7CisJZWxzZSBpZiAoZnJhZ3MgPD0gMTQpCisJCXJldHVybiBmcmFncyArIDQ7CisJZWxzZSBpZiAoZnJhZ3MgPD0gMTgpCisJCXJldHVybiBmcmFncyArIDU7CiAJcmV0dXJuIC0xOwogfQogCkBAIC0yNDEzLDggKzIzMDQsOCBAQAogfQogCiAvKgotICogTWFwIHRoZSBidWZmZXJzIGZvciB0aGlzIHRyYW5zbWl0LiAgVGhpcyB3aWxsIHJldHVybgotICogTkVUREVWX1RYX0JVU1kgb3IgTkVUREVWX1RYX09LIGJhc2VkIG9uIHN1Y2Nlc3MuCisgKiBNYXAgdGhlIGJ1ZmZlcnMgZm9yIHRoaXMgdHJhbnNtaXQuCisgKiBUaGlzIHdpbGwgcmV0dXJuIE5FVERFVl9UWF9CVVNZIG9yIE5FVERFVl9UWF9PSyBiYXNlZCBvbiBzdWNjZXNzLgogICovCiBzdGF0aWMgaW50IHFsX3NlbmRfbWFwKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwKIAkJCQlzdHJ1Y3Qgb2JfbWFjX2lvY2JfcmVxICptYWNfaW9jYl9wdHIsCkBAIC0yNDM3LDkgKzIzMjgsOSBAQAogCW1hcCA9IHBjaV9tYXBfc2luZ2xlKHFkZXYtPnBkZXYsIHNrYi0+ZGF0YSwgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAogCWVyciA9IHBjaV9kbWFfbWFwcGluZ19lcnJvcihxZGV2LT5wZGV2LCBtYXApOwotCWlmKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBQQ0kgbWFwcGluZyBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsCi0JCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lLCBlcnIpOworCWlmIChlcnIpIHsKKwkJbmV0ZGV2X2VycihxZGV2LT5uZGV2LCAiUENJIG1hcHBpbmcgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLAorCQkJICAgZXJyKTsKIAogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQpAQCAtMjQ1NSw2NSArMjM0Niw2NyBAQAogCWlmIChzZWdfY250ID09IDEpIHsKIAkJLyogVGVybWluYXRlIHRoZSBsYXN0IHNlZ21lbnQuICovCiAJCW9hbF9lbnRyeS0+bGVuIHw9IGNwdV90b19sZTMyKE9BTF9MQVNUX0VOVFJZKTsKLQl9IGVsc2UgewotCQlvYWwgPSB0eF9jYi0+b2FsOwotCQlmb3IgKGNvbXBsZXRlZF9zZWdzPTA7IGNvbXBsZXRlZF9zZWdzPGZyYWdfY250OyBjb21wbGV0ZWRfc2VncysrLHNlZysrKSB7Ci0JCQlza2JfZnJhZ190ICpmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbY29tcGxldGVkX3NlZ3NdOwotCQkJb2FsX2VudHJ5Kys7Ci0JCQlpZiAoKHNlZyA9PSAyICYmIHNlZ19jbnQgPiAzKSB8fAkvKiBDaGVjayBmb3IgY29udGludWF0aW9uICovCi0JCQkgICAgKHNlZyA9PSA3ICYmIHNlZ19jbnQgPiA4KSB8fAkvKiByZXF1aXJlbWVudHMuIEl0J3Mgc3RyYW5nZSAqLwotCQkJICAgIChzZWcgPT0gMTIgJiYgc2VnX2NudCA+IDEzKSB8fAkvKiBidXQgbmVjZXNzYXJ5LiAqLwotCQkJICAgIChzZWcgPT0gMTcgJiYgc2VnX2NudCA+IDE4KSkgewotCQkJCS8qIENvbnRpbnVhdGlvbiBlbnRyeSBwb2ludHMgdG8gb3V0Ym91bmQgYWRkcmVzcyBsaXN0LiAqLwotCQkJCW1hcCA9IHBjaV9tYXBfc2luZ2xlKHFkZXYtPnBkZXYsIG9hbCwKLQkJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBvYWwpLAotCQkJCQkJICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKLQotCQkJCWVyciA9IHBjaV9kbWFfbWFwcGluZ19lcnJvcihxZGV2LT5wZGV2LCBtYXApOwotCQkJCWlmKGVycikgewotCi0JCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFBDSSBtYXBwaW5nIG91dGJvdW5kIGFkZHJlc3MgbGlzdCB3aXRoIGVycm9yOiAlZFxuIiwKLQkJCQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUsIGVycik7Ci0JCQkJCWdvdG8gbWFwX2Vycm9yOwotCQkJCX0KLQotCQkJCW9hbF9lbnRyeS0+ZG1hX2xvID0gY3B1X3RvX2xlMzIoTFNfNjRCSVRTKG1hcCkpOwotCQkJCW9hbF9lbnRyeS0+ZG1hX2hpID0gY3B1X3RvX2xlMzIoTVNfNjRCSVRTKG1hcCkpOwotCQkJCW9hbF9lbnRyeS0+bGVuID0KLQkJCQkgICAgY3B1X3RvX2xlMzIoc2l6ZW9mKHN0cnVjdCBvYWwpIHwKLQkJCQkJCU9BTF9DT05UX0VOVFJZKTsKLQkJCQlkbWFfdW5tYXBfYWRkcl9zZXQoJnR4X2NiLT5tYXBbc2VnXSwgbWFwYWRkciwKLQkJCQkJCSAgIG1hcCk7Ci0JCQkJZG1hX3VubWFwX2xlbl9zZXQoJnR4X2NiLT5tYXBbc2VnXSwgbWFwbGVuLAotCQkJCQkJICBzaXplb2Yoc3RydWN0IG9hbCkpOwotCQkJCW9hbF9lbnRyeSA9IChzdHJ1Y3Qgb2FsX2VudHJ5ICopb2FsOwotCQkJCW9hbCsrOwotCQkJCXNlZysrOwotCQkJfQotCi0JCQltYXAgPQotCQkJICAgIHBjaV9tYXBfcGFnZShxZGV2LT5wZGV2LCBmcmFnLT5wYWdlLAotCQkJCQkgZnJhZy0+cGFnZV9vZmZzZXQsIGZyYWctPnNpemUsCi0JCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CisJb2FsID0gdHhfY2ItPm9hbDsKKwlmb3IgKGNvbXBsZXRlZF9zZWdzID0gMDsKKwkgICAgIGNvbXBsZXRlZF9zZWdzIDwgZnJhZ19jbnQ7CisJICAgICBjb21wbGV0ZWRfc2VncysrLCBzZWcrKykgeworCQlza2JfZnJhZ190ICpmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbY29tcGxldGVkX3NlZ3NdOworCQlvYWxfZW50cnkrKzsKKwkJLyoKKwkJICogQ2hlY2sgZm9yIGNvbnRpbnVhdGlvbiByZXF1aXJlbWVudHMuCisJCSAqIEl0J3Mgc3RyYW5nZSBidXQgbmVjZXNzYXJ5LgorCQkgKiBDb250aW51YXRpb24gZW50cnkgcG9pbnRzIHRvIG91dGJvdW5kIGFkZHJlc3MgbGlzdC4KKwkJICovCisJCWlmICgoc2VnID09IDIgJiYgc2VnX2NudCA+IDMpIHx8CisJCSAgICAoc2VnID09IDcgJiYgc2VnX2NudCA+IDgpIHx8CisJCSAgICAoc2VnID09IDEyICYmIHNlZ19jbnQgPiAxMykgfHwKKwkJICAgIChzZWcgPT0gMTcgJiYgc2VnX2NudCA+IDE4KSkgeworCQkJbWFwID0gcGNpX21hcF9zaW5nbGUocWRldi0+cGRldiwgb2FsLAorCQkJCQkgICAgIHNpemVvZihzdHJ1Y3Qgb2FsKSwKKwkJCQkJICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKIAogCQkJZXJyID0gcGNpX2RtYV9tYXBwaW5nX2Vycm9yKHFkZXYtPnBkZXYsIG1hcCk7Ci0JCQlpZihlcnIpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBQQ0kgbWFwcGluZyBmcmFncyBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsCi0JCQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUsIGVycik7CisJCQlpZiAoZXJyKSB7CisJCQkJbmV0ZGV2X2VycihxZGV2LT5uZGV2LAorCQkJCQkgICAiUENJIG1hcHBpbmcgb3V0Ym91bmQgYWRkcmVzcyBsaXN0IHdpdGggZXJyb3I6ICVkXG4iLAorCQkJCQkgICBlcnIpOwogCQkJCWdvdG8gbWFwX2Vycm9yOwogCQkJfQogCiAJCQlvYWxfZW50cnktPmRtYV9sbyA9IGNwdV90b19sZTMyKExTXzY0QklUUyhtYXApKTsKIAkJCW9hbF9lbnRyeS0+ZG1hX2hpID0gY3B1X3RvX2xlMzIoTVNfNjRCSVRTKG1hcCkpOwotCQkJb2FsX2VudHJ5LT5sZW4gPSBjcHVfdG9fbGUzMihmcmFnLT5zaXplKTsKKwkJCW9hbF9lbnRyeS0+bGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mKHN0cnVjdCBvYWwpIHwKKwkJCQkJCSAgICAgT0FMX0NPTlRfRU5UUlkpOwogCQkJZG1hX3VubWFwX2FkZHJfc2V0KCZ0eF9jYi0+bWFwW3NlZ10sIG1hcGFkZHIsIG1hcCk7CiAJCQlkbWFfdW5tYXBfbGVuX3NldCgmdHhfY2ItPm1hcFtzZWddLCBtYXBsZW4sCi0JCQkJCSAgZnJhZy0+c2l6ZSk7CisJCQkJCSAgc2l6ZW9mKHN0cnVjdCBvYWwpKTsKKwkJCW9hbF9lbnRyeSA9IChzdHJ1Y3Qgb2FsX2VudHJ5ICopb2FsOworCQkJb2FsKys7CisJCQlzZWcrKzsKIAkJfQotCQkvKiBUZXJtaW5hdGUgdGhlIGxhc3Qgc2VnbWVudC4gKi8KLQkJb2FsX2VudHJ5LT5sZW4gfD0gY3B1X3RvX2xlMzIoT0FMX0xBU1RfRU5UUlkpOwotCX0KIAorCQltYXAgPSBwY2lfbWFwX3BhZ2UocWRldi0+cGRldiwgZnJhZy0+cGFnZSwKKwkJCQkgICBmcmFnLT5wYWdlX29mZnNldCwgZnJhZy0+c2l6ZSwKKwkJCQkgICBQQ0lfRE1BX1RPREVWSUNFKTsKKworCQllcnIgPSBwY2lfZG1hX21hcHBpbmdfZXJyb3IocWRldi0+cGRldiwgbWFwKTsKKwkJaWYgKGVycikgeworCQkJbmV0ZGV2X2VycihxZGV2LT5uZGV2LAorCQkJCSAgICJQQ0kgbWFwcGluZyBmcmFncyBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsCisJCQkJICAgZXJyKTsKKwkJCWdvdG8gbWFwX2Vycm9yOworCQl9CisKKwkJb2FsX2VudHJ5LT5kbWFfbG8gPSBjcHVfdG9fbGUzMihMU182NEJJVFMobWFwKSk7CisJCW9hbF9lbnRyeS0+ZG1hX2hpID0gY3B1X3RvX2xlMzIoTVNfNjRCSVRTKG1hcCkpOworCQlvYWxfZW50cnktPmxlbiA9IGNwdV90b19sZTMyKGZyYWctPnNpemUpOworCQlkbWFfdW5tYXBfYWRkcl9zZXQoJnR4X2NiLT5tYXBbc2VnXSwgbWFwYWRkciwgbWFwKTsKKwkJZG1hX3VubWFwX2xlbl9zZXQoJnR4X2NiLT5tYXBbc2VnXSwgbWFwbGVuLCBmcmFnLT5zaXplKTsKKwkJfQorCS8qIFRlcm1pbmF0ZSB0aGUgbGFzdCBzZWdtZW50LiAqLworCW9hbF9lbnRyeS0+bGVuIHw9IGNwdV90b19sZTMyKE9BTF9MQVNUX0VOVFJZKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogCiBtYXBfZXJyb3I6CkBAIC0yNTI1LDEzICsyNDE4LDE4IEBACiAJc2VnID0gMTsKIAlvYWxfZW50cnkgPSAoc3RydWN0IG9hbF9lbnRyeSAqKSZtYWNfaW9jYl9wdHItPmJ1Zl9hZGRyMF9sb3c7CiAJb2FsID0gdHhfY2ItPm9hbDsKLQlmb3IgKGk9MDsgaTxjb21wbGV0ZWRfc2VnczsgaSsrLHNlZysrKSB7CisJZm9yIChpID0gMDsgaSA8IGNvbXBsZXRlZF9zZWdzOyBpKyssIHNlZysrKSB7CiAJCW9hbF9lbnRyeSsrOwogCi0JCWlmKChzZWcgPT0gMiAmJiBzZWdfY250ID4gMykgfHwgICAgICAgIC8qIENoZWNrIGZvciBjb250aW51YXRpb24gKi8KLQkJICAgKHNlZyA9PSA3ICYmIHNlZ19jbnQgPiA4KSB8fCAgICAgICAgLyogcmVxdWlyZW1lbnRzLiBJdCdzIHN0cmFuZ2UgKi8KLQkJICAgKHNlZyA9PSAxMiAmJiBzZWdfY250ID4gMTMpIHx8ICAgICAgLyogYnV0IG5lY2Vzc2FyeS4gKi8KLQkJICAgKHNlZyA9PSAxNyAmJiBzZWdfY250ID4gMTgpKSB7CisJCS8qCisJCSAqIENoZWNrIGZvciBjb250aW51YXRpb24gcmVxdWlyZW1lbnRzLgorCQkgKiBJdCdzIHN0cmFuZ2UgYnV0IG5lY2Vzc2FyeS4KKwkJICovCisKKwkJaWYgKChzZWcgPT0gMiAmJiBzZWdfY250ID4gMykgfHwKKwkJICAgIChzZWcgPT0gNyAmJiBzZWdfY250ID4gOCkgfHwKKwkJICAgIChzZWcgPT0gMTIgJiYgc2VnX2NudCA+IDEzKSB8fAorCQkgICAgKHNlZyA9PSAxNyAmJiBzZWdfY250ID4gMTgpKSB7CiAJCQlwY2lfdW5tYXBfc2luZ2xlKHFkZXYtPnBkZXYsCiAJCQkJZG1hX3VubWFwX2FkZHIoJnR4X2NiLT5tYXBbc2VnXSwgbWFwYWRkciksCiAJCQkJZG1hX3VubWFwX2xlbigmdHhfY2ItPm1hcFtzZWddLCBtYXBsZW4pLApAQCAtMjU3MCwxOSArMjQ2OCwyMCBAQAogCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiA9IChzdHJ1Y3QgcWwzX2FkYXB0ZXIgKiluZXRkZXZfcHJpdihuZGV2KTsKLQlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9IHFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOworCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0KKwkJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOwogCXN0cnVjdCBxbF90eF9idWZfY2IgKnR4X2NiOwogCXUzMiB0b3RfbGVuID0gc2tiLT5sZW47CiAJc3RydWN0IG9iX21hY19pb2NiX3JlcSAqbWFjX2lvY2JfcHRyOwogCi0JaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZxZGV2LT50eF9jb3VudCkgPCAyKSkgeworCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmcWRldi0+dHhfY291bnQpIDwgMikpCiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKLQl9CiAKLQl0eF9jYiA9ICZxZGV2LT50eF9idWZbcWRldi0+cmVxX3Byb2R1Y2VyX2luZGV4XSA7Ci0JaWYoKHR4X2NiLT5zZWdfY291bnQgPSBxbF9nZXRfc2VnX2NvdW50KHFkZXYsCi0JCQkJCQkoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncykpKSA9PSAtMSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYIiVzOiBpbnZhbGlkIHNlZ21lbnQgY291bnQhXG4iLF9fZnVuY19fKTsKKwl0eF9jYiA9ICZxZGV2LT50eF9idWZbcWRldi0+cmVxX3Byb2R1Y2VyX2luZGV4XTsKKwl0eF9jYi0+c2VnX2NvdW50ID0gcWxfZ2V0X3NlZ19jb3VudChxZGV2LAorCQkJCQkgICAgIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MpOworCWlmICh0eF9jYi0+c2VnX2NvdW50ID09IC0xKSB7CisJCW5ldGRldl9lcnIobmRldiwgIiVzOiBpbnZhbGlkIHNlZ21lbnQgY291bnQhXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCkBAIC0yNTk4LDggKzI0OTcsOCBAQAogCSAgICBza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKQogCQlxbF9od19jc3VtX3NldHVwKHNrYiwgbWFjX2lvY2JfcHRyKTsKIAotCWlmKHFsX3NlbmRfbWFwKHFkZXYsbWFjX2lvY2JfcHRyLHR4X2NiLHNrYikgIT0gTkVUREVWX1RYX09LKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlgiJXM6IENvdWxkIG5vdCBtYXAgdGhlIHNlZ21lbnRzIVxuIixfX2Z1bmNfXyk7CisJaWYgKHFsX3NlbmRfbWFwKHFkZXYsIG1hY19pb2NiX3B0ciwgdHhfY2IsIHNrYikgIT0gTkVUREVWX1RYX09LKSB7CisJCW5ldGRldl9lcnIobmRldiwgIiVzOiBDb3VsZCBub3QgbWFwIHRoZSBzZWdtZW50cyFcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KIApAQCAtMjYxMiw5ICsyNTExLDkgQEAKIAkJCSAgICAmcG9ydF9yZWdzLT5Db21tb25SZWdzLnJlcVFQcm9kdWNlckluZGV4LAogCQkJICAgIHFkZXYtPnJlcV9wcm9kdWNlcl9pbmRleCk7CiAKLQlpZiAobmV0aWZfbXNnX3R4X3F1ZXVlZChxZGV2KSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICIlczogdHggcXVldWVkLCBzbG90ICVkLCBsZW4gJWRcbiIsCi0JCSAgICAgICBuZGV2LT5uYW1lLCBxZGV2LT5yZXFfcHJvZHVjZXJfaW5kZXgsIHNrYi0+bGVuKTsKKwluZXRpZl9wcmludGsocWRldiwgdHhfcXVldWVkLCBLRVJOX0RFQlVHLCBuZGV2LAorCQkgICAgICJ0eCBxdWV1ZWQsIHNsb3QgJWQsIGxlbiAlZFxuIiwKKwkJICAgICBxZGV2LT5yZXFfcHJvZHVjZXJfaW5kZXgsIHNrYi0+bGVuKTsKIAogCWF0b21pY19kZWMoJnFkZXYtPnR4X2NvdW50KTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwpAQCAtMjYzMiw4ICsyNTMxLDcgQEAKIAogCWlmICgocWRldi0+cmVxX3FfdmlydF9hZGRyID09IE5VTEwpIHx8CiAJICAgIExTXzY0QklUUyhxZGV2LT5yZXFfcV9waHlfYWRkcikgJiAocWRldi0+cmVxX3Ffc2l6ZSAtIDEpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiByZXFRIGZhaWxlZC5cbiIsCi0JCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihxZGV2LT5uZGV2LCAicmVxUSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTI2NDYsMjUgKzI1NDQsMjIgQEAKIAogCWlmICgocWRldi0+cnNwX3FfdmlydF9hZGRyID09IE5VTEwpIHx8CiAJICAgIExTXzY0QklUUyhxZGV2LT5yc3BfcV9waHlfYWRkcikgJiAocWRldi0+cnNwX3Ffc2l6ZSAtIDEpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJICAgICAgICIlczogcnNwUSBhbGxvY2F0aW9uIGZhaWxlZFxuIiwKLQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKHFkZXYtPm5kZXYsICJyc3BRIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChxZGV2LT5wZGV2LCAoc2l6ZV90KSBxZGV2LT5yZXFfcV9zaXplLAogCQkJCSAgICBxZGV2LT5yZXFfcV92aXJ0X2FkZHIsCiAJCQkJICAgIHFkZXYtPnJlcV9xX3BoeV9hZGRyKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0Jc2V0X2JpdChRTF9BTExPQ19SRVFfUlNQX1FfRE9ORSwmcWRldi0+ZmxhZ3MpOworCXNldF9iaXQoUUxfQUxMT0NfUkVRX1JTUF9RX0RPTkUsICZxZGV2LT5mbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgcWxfZnJlZV9uZXRfcmVxX3JzcF9xdWV1ZXMoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQogewotCWlmICghdGVzdF9iaXQoUUxfQUxMT0NfUkVRX1JTUF9RX0RPTkUsJnFkZXYtPmZsYWdzKSkgewotCQlwcmludGsoS0VSTl9JTkZPIFBGWAotCQkgICAgICAgIiVzOiBBbHJlYWR5IGRvbmUuXG4iLCBxZGV2LT5uZGV2LT5uYW1lKTsKKwlpZiAoIXRlc3RfYml0KFFMX0FMTE9DX1JFUV9SU1BfUV9ET05FLCAmcWRldi0+ZmxhZ3MpKSB7CisJCW5ldGRldl9pbmZvKHFkZXYtPm5kZXYsICJBbHJlYWR5IGRvbmVcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yNjgwLDM0ICsyNTc1LDM0IEBACiAKIAlxZGV2LT5yc3BfcV92aXJ0X2FkZHIgPSBOVUxMOwogCi0JY2xlYXJfYml0KFFMX0FMTE9DX1JFUV9SU1BfUV9ET05FLCZxZGV2LT5mbGFncyk7CisJY2xlYXJfYml0KFFMX0FMTE9DX1JFUV9SU1BfUV9ET05FLCAmcWRldi0+ZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IHFsX2FsbG9jX2J1ZmZlcl9xdWV1ZXMoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQogewogCS8qIENyZWF0ZSBMYXJnZSBCdWZmZXIgUXVldWUgKi8KIAlxZGV2LT5scmdfYnVmX3Ffc2l6ZSA9Ci0JICAgIHFkZXYtPm51bV9sYnVmcV9lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBscmdfYnVmX3FfZW50cnkpOworCQlxZGV2LT5udW1fbGJ1ZnFfZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgbHJnX2J1Zl9xX2VudHJ5KTsKIAlpZiAocWRldi0+bHJnX2J1Zl9xX3NpemUgPCBQQUdFX1NJWkUpCiAJCXFkZXYtPmxyZ19idWZfcV9hbGxvY19zaXplID0gUEFHRV9TSVpFOwogCWVsc2UKIAkJcWRldi0+bHJnX2J1Zl9xX2FsbG9jX3NpemUgPSBxZGV2LT5scmdfYnVmX3Ffc2l6ZSAqIDI7CiAKLQlxZGV2LT5scmdfYnVmID0ga21hbGxvYyhxZGV2LT5udW1fbGFyZ2VfYnVmZmVycyAqIHNpemVvZihzdHJ1Y3QgcWxfcmN2X2J1Zl9jYiksR0ZQX0tFUk5FTCk7CisJcWRldi0+bHJnX2J1ZiA9CisJCWttYWxsb2MocWRldi0+bnVtX2xhcmdlX2J1ZmZlcnMgKiBzaXplb2Yoc3RydWN0IHFsX3Jjdl9idWZfY2IpLAorCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKHFkZXYtPmxyZ19idWYgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCSAgICAgICAiJXM6IHFkZXYtPmxyZ19idWYgYWxsb2MgZmFpbGVkLlxuIiwgcWRldi0+bmRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIocWRldi0+bmRldiwgInFkZXYtPmxyZ19idWYgYWxsb2MgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJcWRldi0+bHJnX2J1Zl9xX2FsbG9jX3ZpcnRfYWRkciA9Ci0JICAgIHBjaV9hbGxvY19jb25zaXN0ZW50KHFkZXYtPnBkZXYsCi0JCQkJIHFkZXYtPmxyZ19idWZfcV9hbGxvY19zaXplLAotCQkJCSAmcWRldi0+bHJnX2J1Zl9xX2FsbG9jX3BoeV9hZGRyKTsKKwkJcGNpX2FsbG9jX2NvbnNpc3RlbnQocWRldi0+cGRldiwKKwkJCQkgICAgIHFkZXYtPmxyZ19idWZfcV9hbGxvY19zaXplLAorCQkJCSAgICAgJnFkZXYtPmxyZ19idWZfcV9hbGxvY19waHlfYWRkcik7CiAKIAlpZiAocWRldi0+bHJnX2J1Zl9xX2FsbG9jX3ZpcnRfYWRkciA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJICAgICAgICIlczogbEJ1ZlEgZmFpbGVkXG4iLCBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihxZGV2LT5uZGV2LCAibEJ1ZlEgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXFkZXYtPmxyZ19idWZfcV92aXJ0X2FkZHIgPSBxZGV2LT5scmdfYnVmX3FfYWxsb2NfdmlydF9hZGRyOwpAQCAtMjcxNSwyMSArMjYxMCwxOSBAQAogCiAJLyogQ3JlYXRlIFNtYWxsIEJ1ZmZlciBRdWV1ZSAqLwogCXFkZXYtPnNtYWxsX2J1Zl9xX3NpemUgPQotCSAgICBOVU1fU0JVRlFfRU5UUklFUyAqIHNpemVvZihzdHJ1Y3QgbHJnX2J1Zl9xX2VudHJ5KTsKKwkJTlVNX1NCVUZRX0VOVFJJRVMgKiBzaXplb2Yoc3RydWN0IGxyZ19idWZfcV9lbnRyeSk7CiAJaWYgKHFkZXYtPnNtYWxsX2J1Zl9xX3NpemUgPCBQQUdFX1NJWkUpCiAJCXFkZXYtPnNtYWxsX2J1Zl9xX2FsbG9jX3NpemUgPSBQQUdFX1NJWkU7CiAJZWxzZQogCQlxZGV2LT5zbWFsbF9idWZfcV9hbGxvY19zaXplID0gcWRldi0+c21hbGxfYnVmX3Ffc2l6ZSAqIDI7CiAKIAlxZGV2LT5zbWFsbF9idWZfcV9hbGxvY192aXJ0X2FkZHIgPQotCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChxZGV2LT5wZGV2LAotCQkJCSBxZGV2LT5zbWFsbF9idWZfcV9hbGxvY19zaXplLAotCQkJCSAmcWRldi0+c21hbGxfYnVmX3FfYWxsb2NfcGh5X2FkZHIpOworCQlwY2lfYWxsb2NfY29uc2lzdGVudChxZGV2LT5wZGV2LAorCQkJCSAgICAgcWRldi0+c21hbGxfYnVmX3FfYWxsb2Nfc2l6ZSwKKwkJCQkgICAgICZxZGV2LT5zbWFsbF9idWZfcV9hbGxvY19waHlfYWRkcik7CiAKIAlpZiAocWRldi0+c21hbGxfYnVmX3FfYWxsb2NfdmlydF9hZGRyID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkgICAgICAgIiVzOiBTbWFsbCBCdWZmZXIgUXVldWUgYWxsb2NhdGlvbiBmYWlsZWQuXG4iLAotCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIocWRldi0+bmRldiwgIlNtYWxsIEJ1ZmZlciBRdWV1ZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQocWRldi0+cGRldiwgcWRldi0+bHJnX2J1Zl9xX2FsbG9jX3NpemUsCiAJCQkJICAgIHFkZXYtPmxyZ19idWZfcV9hbGxvY192aXJ0X2FkZHIsCiAJCQkJICAgIHFkZXYtPmxyZ19idWZfcV9hbGxvY19waHlfYWRkcik7CkBAIC0yNzM4LDE4ICsyNjMxLDE3IEBACiAKIAlxZGV2LT5zbWFsbF9idWZfcV92aXJ0X2FkZHIgPSBxZGV2LT5zbWFsbF9idWZfcV9hbGxvY192aXJ0X2FkZHI7CiAJcWRldi0+c21hbGxfYnVmX3FfcGh5X2FkZHIgPSBxZGV2LT5zbWFsbF9idWZfcV9hbGxvY19waHlfYWRkcjsKLQlzZXRfYml0KFFMX0FMTE9DX0JVRlFTX0RPTkUsJnFkZXYtPmZsYWdzKTsKKwlzZXRfYml0KFFMX0FMTE9DX0JVRlFTX0RPTkUsICZxZGV2LT5mbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHFsX2ZyZWVfYnVmZmVyX3F1ZXVlcyhzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCiB7Ci0JaWYgKCF0ZXN0X2JpdChRTF9BTExPQ19CVUZRU19ET05FLCZxZGV2LT5mbGFncykpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKLQkJICAgICAgICIlczogQWxyZWFkeSBkb25lLlxuIiwgcWRldi0+bmRldi0+bmFtZSk7CisJaWYgKCF0ZXN0X2JpdChRTF9BTExPQ19CVUZRU19ET05FLCAmcWRldi0+ZmxhZ3MpKSB7CisJCW5ldGRldl9pbmZvKHFkZXYtPm5kZXYsICJBbHJlYWR5IGRvbmVcbiIpOwogCQlyZXR1cm47CiAJfQotCWlmKHFkZXYtPmxyZ19idWYpIGtmcmVlKHFkZXYtPmxyZ19idWYpOworCWtmcmVlKHFkZXYtPmxyZ19idWYpOwogCXBjaV9mcmVlX2NvbnNpc3RlbnQocWRldi0+cGRldiwKIAkJCSAgICBxZGV2LT5scmdfYnVmX3FfYWxsb2Nfc2l6ZSwKIAkJCSAgICBxZGV2LT5scmdfYnVmX3FfYWxsb2NfdmlydF9hZGRyLApAQCAtMjc2NCw3ICsyNjU2LDcgQEAKIAogCXFkZXYtPnNtYWxsX2J1Zl9xX3ZpcnRfYWRkciA9IE5VTEw7CiAKLQljbGVhcl9iaXQoUUxfQUxMT0NfQlVGUVNfRE9ORSwmcWRldi0+ZmxhZ3MpOworCWNsZWFyX2JpdChRTF9BTExPQ19CVUZRU19ET05FLCAmcWRldi0+ZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IHFsX2FsbG9jX3NtYWxsX2J1ZmZlcnMoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQpAQCAtMjc3NCwxOCArMjY2NiwxNiBAQAogCiAJLyogQ3VycmVudGx5IHdlIGFsbG9jYXRlIG9uIG9uZSBvZiBtZW1vcnkgYW5kIHVzZSBpdCBmb3Igc21hbGxidWZmZXJzICovCiAJcWRldi0+c21hbGxfYnVmX3RvdGFsX3NpemUgPQotCSAgICAoUUxfQUREUl9FTEVfUEVSX0JVRlFfRU5UUlkgKiBOVU1fU0JVRlFfRU5UUklFUyAqCi0JICAgICBRTF9TTUFMTF9CVUZGRVJfU0laRSk7CisJCShRTF9BRERSX0VMRV9QRVJfQlVGUV9FTlRSWSAqIE5VTV9TQlVGUV9FTlRSSUVTICoKKwkJIFFMX1NNQUxMX0JVRkZFUl9TSVpFKTsKIAogCXFkZXYtPnNtYWxsX2J1Zl92aXJ0X2FkZHIgPQotCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChxZGV2LT5wZGV2LAotCQkJCSBxZGV2LT5zbWFsbF9idWZfdG90YWxfc2l6ZSwKLQkJCQkgJnFkZXYtPnNtYWxsX2J1Zl9waHlfYWRkcik7CisJCXBjaV9hbGxvY19jb25zaXN0ZW50KHFkZXYtPnBkZXYsCisJCQkJICAgICBxZGV2LT5zbWFsbF9idWZfdG90YWxfc2l6ZSwKKwkJCQkgICAgICZxZGV2LT5zbWFsbF9idWZfcGh5X2FkZHIpOwogCiAJaWYgKHFkZXYtPnNtYWxsX2J1Zl92aXJ0X2FkZHIgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCSAgICAgICAiJXM6IEZhaWxlZCB0byBnZXQgc21hbGwgYnVmZmVyIG1lbW9yeS5cbiIsCi0JCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihxZGV2LT5uZGV2LCAiRmFpbGVkIHRvIGdldCBzbWFsbCBidWZmZXIgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0yODA0LDE1ICsyNjk0LDE0IEBACiAJCXNtYWxsX2J1Zl9xX2VudHJ5Kys7CiAJfQogCXFkZXYtPnNtYWxsX2J1Zl9pbmRleCA9IDA7Ci0Jc2V0X2JpdChRTF9BTExPQ19TTUFMTF9CVUZfRE9ORSwmcWRldi0+ZmxhZ3MpOworCXNldF9iaXQoUUxfQUxMT0NfU01BTExfQlVGX0RPTkUsICZxZGV2LT5mbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHFsX2ZyZWVfc21hbGxfYnVmZmVycyhzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCiB7Ci0JaWYgKCF0ZXN0X2JpdChRTF9BTExPQ19TTUFMTF9CVUZfRE9ORSwmcWRldi0+ZmxhZ3MpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYCi0JCSAgICAgICAiJXM6IEFscmVhZHkgZG9uZS5cbiIsIHFkZXYtPm5kZXYtPm5hbWUpOworCWlmICghdGVzdF9iaXQoUUxfQUxMT0NfU01BTExfQlVGX0RPTkUsICZxZGV2LT5mbGFncykpIHsKKwkJbmV0ZGV2X2luZm8ocWRldi0+bmRldiwgIkFscmVhZHkgZG9uZVxuIik7CiAJCXJldHVybjsKIAl9CiAJaWYgKHFkZXYtPnNtYWxsX2J1Zl92aXJ0X2FkZHIgIT0gTlVMTCkgewpAQCAtMjg3NCwxMSArMjc2Myw5IEBACiAJCQkJICAgICAgIHFkZXYtPmxyZ19idWZmZXJfbGVuKTsKIAkJaWYgKHVubGlrZWx5KCFza2IpKSB7CiAJCQkvKiBCZXR0ZXIgbHVjayBuZXh0IHJvdW5kICovCi0JCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkgICAgICAgIiVzOiBsYXJnZSBidWZmIGFsbG9jIGZhaWxlZCwgIgotCQkJICAgICAgICJmb3IgJWQgYnl0ZXMgYXQgaW5kZXggJWQuXG4iLAotCQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUsCi0JCQkgICAgICAgcWRldi0+bHJnX2J1ZmZlcl9sZW4gKiAyLCBpKTsKKwkJCW5ldGRldl9lcnIocWRldi0+bmRldiwKKwkJCQkgICAibGFyZ2UgYnVmZiBhbGxvYyBmYWlsZWQgZm9yICVkIGJ5dGVzIGF0IGluZGV4ICVkXG4iLAorCQkJCSAgIHFkZXYtPmxyZ19idWZmZXJfbGVuICogMiwgaSk7CiAJCQlxbF9mcmVlX2xhcmdlX2J1ZmZlcnMocWRldik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfSBlbHNlIHsKQEAgLTI4OTksOSArMjc4NiwxMCBAQAogCQkJCQkgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKIAkJCWVyciA9IHBjaV9kbWFfbWFwcGluZ19lcnJvcihxZGV2LT5wZGV2LCBtYXApOwotCQkJaWYoZXJyKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogUENJIG1hcHBpbmcgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLAotCQkJCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lLCBlcnIpOworCQkJaWYgKGVycikgeworCQkJCW5ldGRldl9lcnIocWRldi0+bmRldiwKKwkJCQkJICAgIlBDSSBtYXBwaW5nIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwKKwkJCQkJICAgZXJyKTsKIAkJCQlxbF9mcmVlX2xhcmdlX2J1ZmZlcnMocWRldik7CiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQl9CkBAIC0yOTI2LDEwICsyODE0LDggQEAKIAogCXR4X2NiID0gJnFkZXYtPnR4X2J1ZlswXTsKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX1JFUV9RX0VOVFJJRVM7IGkrKykgewotCQlpZiAodHhfY2ItPm9hbCkgewotCQkJa2ZyZWUodHhfY2ItPm9hbCk7Ci0JCQl0eF9jYi0+b2FsID0gTlVMTDsKLQkJfQorCQlrZnJlZSh0eF9jYi0+b2FsKTsKKwkJdHhfY2ItPm9hbCA9IE5VTEw7CiAJCXR4X2NiKys7CiAJfQogfQpAQCAtMjkzOCw4ICsyODI0LDcgQEAKIHsKIAlzdHJ1Y3QgcWxfdHhfYnVmX2NiICp0eF9jYjsKIAlpbnQgaTsKLQlzdHJ1Y3Qgb2JfbWFjX2lvY2JfcmVxICpyZXFfcV9jdXJyID0KLQkJCQkJcWRldi0+cmVxX3FfdmlydF9hZGRyOworCXN0cnVjdCBvYl9tYWNfaW9jYl9yZXEgKnJlcV9xX2N1cnIgPSBxZGV2LT5yZXFfcV92aXJ0X2FkZHI7CiAKIAkvKiBDcmVhdGUgZnJlZSBsaXN0IG9mIHRyYW5zbWl0IGJ1ZmZlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTlVNX1JFUV9RX0VOVFJJRVM7IGkrKykgewpAQCAtMjk2MCwyMyArMjg0NSwyMiBAQAogCWlmIChxZGV2LT5uZGV2LT5tdHUgPT0gTk9STUFMX01UVV9TSVpFKSB7CiAJCXFkZXYtPm51bV9sYnVmcV9lbnRyaWVzID0gTlVNX0xCVUZRX0VOVFJJRVM7CiAJCXFkZXYtPmxyZ19idWZmZXJfbGVuID0gTk9STUFMX01UVV9TSVpFOwotCX0KLQllbHNlIGlmIChxZGV2LT5uZGV2LT5tdHUgPT0gSlVNQk9fTVRVX1NJWkUpIHsKKwl9IGVsc2UgaWYgKHFkZXYtPm5kZXYtPm10dSA9PSBKVU1CT19NVFVfU0laRSkgewogCQkvKgogCQkgKiBCaWdnZXIgYnVmZmVycywgc28gbGVzcyBvZiB0aGVtLgogCQkgKi8KIAkJcWRldi0+bnVtX2xidWZxX2VudHJpZXMgPSBKVU1CT19OVU1fTEJVRlFfRU5UUklFUzsKIAkJcWRldi0+bHJnX2J1ZmZlcl9sZW4gPSBKVU1CT19NVFVfU0laRTsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCSAgICAgICAiJXM6IEludmFsaWQgbXR1IHNpemUuICBPbmx5IDE1MDAgYW5kIDkwMDAgYXJlIGFjY2VwdGVkLlxuIiwKLQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKHFkZXYtPm5kZXYsICJJbnZhbGlkIG10dSBzaXplOiAlZC4gIE9ubHkgJWQgYW5kICVkIGFyZSBhY2NlcHRlZC5cbiIsCisJCQkgICBxZGV2LT5uZGV2LT5tdHUsIE5PUk1BTF9NVFVfU0laRSwgSlVNQk9fTVRVX1NJWkUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JcWRldi0+bnVtX2xhcmdlX2J1ZmZlcnMgPSBxZGV2LT5udW1fbGJ1ZnFfZW50cmllcyAqIFFMX0FERFJfRUxFX1BFUl9CVUZRX0VOVFJZOworCXFkZXYtPm51bV9sYXJnZV9idWZmZXJzID0KKwkJcWRldi0+bnVtX2xidWZxX2VudHJpZXMgKiBRTF9BRERSX0VMRV9QRVJfQlVGUV9FTlRSWTsKIAlxZGV2LT5scmdfYnVmZmVyX2xlbiArPSBWTEFOX0VUSF9ITEVOICsgVkxBTl9JRF9MRU4gKyBRTF9IRUFERVJfU1BBQ0U7CiAJcWRldi0+bWF4X2ZyYW1lX3NpemUgPQotCSAgICAocWRldi0+bHJnX2J1ZmZlcl9sZW4gLSBRTF9IRUFERVJfU1BBQ0UpICsgRVRIRVJORVRfQ1JDX1NJWkU7CisJCShxZGV2LT5scmdfYnVmZmVyX2xlbiAtIFFMX0hFQURFUl9TUEFDRSkgKyBFVEhFUk5FVF9DUkNfU0laRTsKIAogCS8qCiAJICogRmlyc3QgYWxsb2NhdGUgYSBwYWdlIG9mIHNoYXJlZCBtZW1vcnkgYW5kIHVzZSBpdCBmb3Igc2hhZG93CkBAIC0yOTg0LDUxICsyODY4LDQ0IEBACiAJICogTmV0d29yayBDb21wbGV0aW9uIFF1ZXVlIFByb2R1Y2VyIEluZGV4IFJlZ2lzdGVyCiAJICovCiAJcWRldi0+c2hhZG93X3JlZ192aXJ0X2FkZHIgPQotCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChxZGV2LT5wZGV2LAotCQkJCSBQQUdFX1NJWkUsICZxZGV2LT5zaGFkb3dfcmVnX3BoeV9hZGRyKTsKKwkJcGNpX2FsbG9jX2NvbnNpc3RlbnQocWRldi0+cGRldiwKKwkJCQkgICAgIFBBR0VfU0laRSwgJnFkZXYtPnNoYWRvd19yZWdfcGh5X2FkZHIpOwogCiAJaWYgKHFkZXYtPnNoYWRvd19yZWdfdmlydF9hZGRyICE9IE5VTEwpIHsKIAkJcWRldi0+cHJlcV9jb25zdW1lcl9pbmRleCA9ICh1MTYgKikgcWRldi0+c2hhZG93X3JlZ192aXJ0X2FkZHI7CiAJCXFkZXYtPnJlcV9jb25zdW1lcl9pbmRleF9waHlfYWRkcl9oaWdoID0KLQkJICAgIE1TXzY0QklUUyhxZGV2LT5zaGFkb3dfcmVnX3BoeV9hZGRyKTsKKwkJCU1TXzY0QklUUyhxZGV2LT5zaGFkb3dfcmVnX3BoeV9hZGRyKTsKIAkJcWRldi0+cmVxX2NvbnN1bWVyX2luZGV4X3BoeV9hZGRyX2xvdyA9Ci0JCSAgICBMU182NEJJVFMocWRldi0+c2hhZG93X3JlZ19waHlfYWRkcik7CisJCQlMU182NEJJVFMocWRldi0+c2hhZG93X3JlZ19waHlfYWRkcik7CiAKIAkJcWRldi0+cHJzcF9wcm9kdWNlcl9pbmRleCA9Ci0JCSAgICAoX19sZTMyICopICgoKHU4ICopIHFkZXYtPnByZXFfY29uc3VtZXJfaW5kZXgpICsgOCk7CisJCQkoX19sZTMyICopICgoKHU4ICopIHFkZXYtPnByZXFfY29uc3VtZXJfaW5kZXgpICsgOCk7CiAJCXFkZXYtPnJzcF9wcm9kdWNlcl9pbmRleF9waHlfYWRkcl9oaWdoID0KLQkJICAgIHFkZXYtPnJlcV9jb25zdW1lcl9pbmRleF9waHlfYWRkcl9oaWdoOworCQkJcWRldi0+cmVxX2NvbnN1bWVyX2luZGV4X3BoeV9hZGRyX2hpZ2g7CiAJCXFkZXYtPnJzcF9wcm9kdWNlcl9pbmRleF9waHlfYWRkcl9sb3cgPQotCQkgICAgcWRldi0+cmVxX2NvbnN1bWVyX2luZGV4X3BoeV9hZGRyX2xvdyArIDg7CisJCQlxZGV2LT5yZXFfY29uc3VtZXJfaW5kZXhfcGh5X2FkZHJfbG93ICsgODsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCSAgICAgICAiJXM6IHNoYWRvd1JlZyBBbGxvYyBmYWlsZWQuXG4iLCBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihxZGV2LT5uZGV2LCAic2hhZG93UmVnIEFsbG9jIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWlmIChxbF9hbGxvY19uZXRfcmVxX3JzcF9xdWV1ZXMocWRldikgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCSAgICAgICAiJXM6IHFsX2FsbG9jX25ldF9yZXFfcnNwX3F1ZXVlcyBmYWlsZWQuXG4iLAotCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIocWRldi0+bmRldiwgInFsX2FsbG9jX25ldF9yZXFfcnNwX3F1ZXVlcyBmYWlsZWRcbiIpOwogCQlnb3RvIGVycl9yZXFfcnNwOwogCX0KIAogCWlmIChxbF9hbGxvY19idWZmZXJfcXVldWVzKHFkZXYpICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkgICAgICAgIiVzOiBxbF9hbGxvY19idWZmZXJfcXVldWVzIGZhaWxlZC5cbiIsCi0JCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihxZGV2LT5uZGV2LCAicWxfYWxsb2NfYnVmZmVyX3F1ZXVlcyBmYWlsZWRcbiIpOwogCQlnb3RvIGVycl9idWZmZXJfcXVldWVzOwogCX0KIAogCWlmIChxbF9hbGxvY19zbWFsbF9idWZmZXJzKHFkZXYpICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkgICAgICAgIiVzOiBxbF9hbGxvY19zbWFsbF9idWZmZXJzIGZhaWxlZFxuIiwgcWRldi0+bmRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIocWRldi0+bmRldiwgInFsX2FsbG9jX3NtYWxsX2J1ZmZlcnMgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfc21hbGxfYnVmZmVyczsKIAl9CiAKIAlpZiAocWxfYWxsb2NfbGFyZ2VfYnVmZmVycyhxZGV2KSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJICAgICAgICIlczogcWxfYWxsb2NfbGFyZ2VfYnVmZmVycyBmYWlsZWRcbiIsIHFkZXYtPm5kZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKHFkZXYtPm5kZXYsICJxbF9hbGxvY19sYXJnZV9idWZmZXJzIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyX3NtYWxsX2J1ZmZlcnM7CiAJfQogCkBAIC0zMDc2LDcgKzI5NTMsNyBAQAogCXN0cnVjdCBxbDN4eHhfbG9jYWxfcmFtX3JlZ2lzdGVycyBfX2lvbWVtICpsb2NhbF9yYW0gPQogCSAgICAodm9pZCBfX2lvbWVtICopcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CiAKLQlpZihxbF9zZW1fc3BpbmxvY2socWRldiwgUUxfRERSX1JBTV9TRU1fTUFTSywKKwlpZiAocWxfc2VtX3NwaW5sb2NrKHFkZXYsIFFMX0REUl9SQU1fU0VNX01BU0ssCiAJCQkoUUxfUkVTT1VSQ0VfQklUU19CQVNFX0NPREUgfCAocWRldi0+bWFjX2luZGV4KSAqCiAJCQkgMikgPDwgNCkpCiAJCXJldHVybiAtMTsKQEAgLTMxMzIsMTggKzMwMDksMjAgQEAKIHN0YXRpYyBpbnQgcWxfYWRhcHRlcl9pbml0aWFsaXplKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldikKIHsKIAl1MzIgdmFsdWU7Ci0Jc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPSBxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9CisJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOworCXUzMiAqc3BpciA9ICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3Muc2VyaWFsUG9ydEludGVyZmFjZVJlZzsKIAlzdHJ1Y3QgcWwzeHh4X2hvc3RfbWVtb3J5X3JlZ2lzdGVycyBfX2lvbWVtICpobWVtX3JlZ3MgPQotCQkJCQkJKHZvaWQgX19pb21lbSAqKXBvcnRfcmVnczsKKwkJKHZvaWQgX19pb21lbSAqKXBvcnRfcmVnczsKIAl1MzIgZGVsYXkgPSAxMDsKIAlpbnQgc3RhdHVzID0gMDsKIAl1bnNpZ25lZCBsb25nIGh3X2ZsYWdzID0gMDsKIAotCWlmKHFsX21paV9zZXR1cChxZGV2KSkKKwlpZiAocWxfbWlpX3NldHVwKHFkZXYpKQogCQlyZXR1cm4gLTE7CiAKIAkvKiBCcmluZyBvdXQgUEhZIG91dCBvZiByZXNldCAqLwotCXFsX3dyaXRlX2NvbW1vbl9yZWcocWRldiwgJnBvcnRfcmVncy0+Q29tbW9uUmVncy5zZXJpYWxQb3J0SW50ZXJmYWNlUmVnLAorCXFsX3dyaXRlX2NvbW1vbl9yZWcocWRldiwgc3BpciwKIAkJCSAgICAoSVNQX1NFUklBTF9QT1JUX0lGX1dFIHwKIAkJCSAgICAgKElTUF9TRVJJQUxfUE9SVF9JRl9XRSA8PCAxNikpKTsKIAkvKiBHaXZlIHRoZSBQSFkgdGltZSB0byBjb21lIG91dCBvZiByZXNldC4gKi8KQEAgLTMxNTIsMTMgKzMwMzEsMTMgQEAKIAluZXRpZl9jYXJyaWVyX29mZihxZGV2LT5uZGV2KTsKIAogCS8qIFYyIGNoaXAgZml4IGZvciBBUlMtMzkxNjguICovCi0JcWxfd3JpdGVfY29tbW9uX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5Db21tb25SZWdzLnNlcmlhbFBvcnRJbnRlcmZhY2VSZWcsCisJcWxfd3JpdGVfY29tbW9uX3JlZyhxZGV2LCBzcGlyLAogCQkJICAgIChJU1BfU0VSSUFMX1BPUlRfSUZfU0RFIHwKIAkJCSAgICAgKElTUF9TRVJJQUxfUE9SVF9JRl9TREUgPDwgMTYpKSk7CiAKIAkvKiBSZXF1ZXN0IFF1ZXVlIFJlZ2lzdGVycyAqLwotCSooKHUzMiAqKSAocWRldi0+cHJlcV9jb25zdW1lcl9pbmRleCkpID0gMDsKLQlhdG9taWNfc2V0KCZxZGV2LT50eF9jb3VudCxOVU1fUkVRX1FfRU5UUklFUyk7CisJKigodTMyICopKHFkZXYtPnByZXFfY29uc3VtZXJfaW5kZXgpKSA9IDA7CisJYXRvbWljX3NldCgmcWRldi0+dHhfY291bnQsIE5VTV9SRVFfUV9FTlRSSUVTKTsKIAlxZGV2LT5yZXFfcHJvZHVjZXJfaW5kZXggPSAwOwogCiAJcWxfd3JpdGVfcGFnZTFfcmVnKHFkZXYsCkBAIC0zMjA4LDcgKzMwODcsOSBAQAogCQkJICAgJmhtZW1fcmVncy0+cnhMYXJnZVFCYXNlQWRkckxvdywKIAkJCSAgIExTXzY0QklUUyhxZGV2LT5scmdfYnVmX3FfcGh5X2FkZHIpKTsKIAotCXFsX3dyaXRlX3BhZ2UxX3JlZyhxZGV2LCAmaG1lbV9yZWdzLT5yeExhcmdlUUxlbmd0aCwgcWRldi0+bnVtX2xidWZxX2VudHJpZXMpOworCXFsX3dyaXRlX3BhZ2UxX3JlZyhxZGV2LAorCQkJICAgJmhtZW1fcmVncy0+cnhMYXJnZVFMZW5ndGgsCisJCQkgICBxZGV2LT5udW1fbGJ1ZnFfZW50cmllcyk7CiAKIAlxbF93cml0ZV9wYWdlMV9yZWcocWRldiwKIAkJCSAgICZobWVtX3JlZ3MtPnJ4TGFyZ2VCdWZmZXJMZW5ndGgsCkBAIC0zMjU4LDcgKzMxMzksNyBAQAogCWlmICgodmFsdWUgJiBQT1JUX1NUQVRVU19JQykgPT0gMCkgewogCiAJCS8qIENoaXAgaGFzIG5vdCBiZWVuIGNvbmZpZ3VyZWQgeWV0LCBzbyBsZXQgaXQgcmlwLiAqLwotCQlpZihxbF9pbml0X21pc2NfcmVnaXN0ZXJzKHFkZXYpKSB7CisJCWlmIChxbF9pbml0X21pc2NfcmVnaXN0ZXJzKHFkZXYpKSB7CiAJCQlzdGF0dXMgPSAtMTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0zMjY4LDcgKzMxNDksNyBAQAogCiAJCXZhbHVlID0gKDB4RkZGRiA8PCAxNikgfCBxZGV2LT5udnJhbV9kYXRhLmV4dEh3Q29uZmlnOwogCi0JCWlmKHFsX3NlbV9zcGlubG9jayhxZGV2LCBRTF9GTEFTSF9TRU1fTUFTSywKKwkJaWYgKHFsX3NlbV9zcGlubG9jayhxZGV2LCBRTF9GTEFTSF9TRU1fTUFTSywKIAkJCQkoUUxfUkVTT1VSQ0VfQklUU19CQVNFX0NPREUgfCAocWRldi0+bWFjX2luZGV4KQogCQkJCSAqIDIpIDw8IDEzKSkgewogCQkJc3RhdHVzID0gLTE7CkBAIC0zMjkxLDcgKzMxNzIsNyBAQAogCQkJCQkgICAmcG9ydF9yZWdzLT5tYWMwTWF4RnJhbWVMZW5ndGhSZWcsCiAJCQkJCSAgIHFkZXYtPm1heF9mcmFtZV9zaXplKTsKIAotCWlmKHFsX3NlbV9zcGlubG9jayhxZGV2LCBRTF9QSFlfR0lPX1NFTV9NQVNLLAorCWlmIChxbF9zZW1fc3BpbmxvY2socWRldiwgUUxfUEhZX0dJT19TRU1fTUFTSywKIAkJCShRTF9SRVNPVVJDRV9CSVRTX0JBU0VfQ09ERSB8IChxZGV2LT5tYWNfaW5kZXgpICoKIAkJCSAyKSA8PCA3KSkgewogCQlzdGF0dXMgPSAtMTsKQEAgLTMzNTMsOCArMzIzNCw3IEBACiAJfSB3aGlsZSAoLS1kZWxheSk7CiAKIAlpZiAoZGVsYXkgPT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCSAgICAgICAiJXM6IEh3IEluaXRpYWxpemF0aW9uIHRpbWVvdXQuXG4iLCBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihxZGV2LT5uZGV2LCAiSHcgSW5pdGlhbGl6YXRpb24gdGltZW91dFxuIik7CiAJCXN0YXR1cyA9IC0xOwogCQlnb3RvIG91dDsKIAl9CkBAIC0zMzg1LDcgKzMyNjUsOCBAQAogICovCiBzdGF0aWMgaW50IHFsX2FkYXB0ZXJfcmVzZXQoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQogewotCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0gcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPQorCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKIAlpbnQgc3RhdHVzID0gMDsKIAl1MTYgdmFsdWU7CiAJaW50IG1heF93YWl0X3RpbWU7CkBAIC0zMzk2LDE3ICszMjc3LDE0IEBACiAJLyoKIAkgKiBJc3N1ZSBzb2Z0IHJlc2V0IHRvIGNoaXAuCiAJICovCi0JcHJpbnRrKEtFUk5fREVCVUcgUEZYCi0JICAgICAgICIlczogSXNzdWUgc29mdCByZXNldCB0byBjaGlwLlxuIiwKLQkgICAgICAgcWRldi0+bmRldi0+bmFtZSk7CisJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LCAiSXNzdWUgc29mdCByZXNldCB0byBjaGlwXG4iKTsKIAlxbF93cml0ZV9jb21tb25fcmVnKHFkZXYsCiAJCQkgICAgJnBvcnRfcmVncy0+Q29tbW9uUmVncy5pc3BDb250cm9sU3RhdHVzLAogCQkJICAgICgoSVNQX0NPTlRST0xfU1IgPDwgMTYpIHwgSVNQX0NPTlRST0xfU1IpKTsKIAogCS8qIFdhaXQgMyBzZWNvbmRzIGZvciByZXNldCB0byBjb21wbGV0ZS4gKi8KLQlwcmludGsoS0VSTl9ERUJVRyBQRlgKLQkgICAgICAgIiVzOiBXYWl0IDEwIG1pbGxpc2Vjb25kcyBmb3IgcmVzZXQgdG8gY29tcGxldGUuXG4iLAotCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKKwluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCSAgICAgICJXYWl0IDEwIG1pbGxpc2Vjb25kcyBmb3IgcmVzZXQgdG8gY29tcGxldGVcbiIpOwogCiAJLyogV2FpdCB1bnRpbCB0aGUgZmlybXdhcmUgdGVsbHMgdXMgdGhlIFNvZnQgUmVzZXQgaXMgZG9uZSAqLwogCW1heF93YWl0X3RpbWUgPSA1OwpAQCAtMzQyNyw4ICszMzA1LDggQEAKIAl2YWx1ZSA9CiAJICAgIHFsX3JlYWRfY29tbW9uX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5Db21tb25SZWdzLmlzcENvbnRyb2xTdGF0dXMpOwogCWlmICh2YWx1ZSAmIElTUF9DT05UUk9MX1JJKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHIFBGWAotCQkgICAgICAgInFsX2FkYXB0ZXJfcmVzZXQ6IGNsZWFyaW5nIFJJIGFmdGVyIHJlc2V0LlxuIik7CisJCW5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCSAgICAgICJjbGVhcmluZyBSSSBhZnRlciByZXNldFxuIik7CiAJCXFsX3dyaXRlX2NvbW1vbl9yZWcocWRldiwKIAkJCQkgICAgJnBvcnRfcmVncy0+Q29tbW9uUmVncy4KIAkJCQkgICAgaXNwQ29udHJvbFN0YXR1cywKQEAgLTM0NDgsMTMgKzMzMjYsMTEgQEAKIAkJICovCiAJCW1heF93YWl0X3RpbWUgPSA1OwogCQlkbyB7Ci0JCQl2YWx1ZSA9Ci0JCQkgICAgcWxfcmVhZF9jb21tb25fcmVnKHFkZXYsCi0JCQkJCSAgICAgICAmcG9ydF9yZWdzLT5Db21tb25SZWdzLgotCQkJCQkgICAgICAgaXNwQ29udHJvbFN0YXR1cyk7Ci0JCQlpZiAoKHZhbHVlICYgSVNQX0NPTlRST0xfRlNSKSA9PSAwKSB7CisJCQl2YWx1ZSA9IHFsX3JlYWRfY29tbW9uX3JlZyhxZGV2LAorCQkJCQkJICAgJnBvcnRfcmVncy0+Q29tbW9uUmVncy4KKwkJCQkJCSAgIGlzcENvbnRyb2xTdGF0dXMpOworCQkJaWYgKCh2YWx1ZSAmIElTUF9DT05UUk9MX0ZTUikgPT0gMCkKIAkJCQlicmVhazsKLQkJCX0KIAkJCXNzbGVlcCgxKTsKIAkJfSB3aGlsZSAoKC0tbWF4X3dhaXRfdGltZSkpOwogCX0KQEAgLTM0NjgsNyArMzM0NCw4IEBACiAKIHN0YXRpYyB2b2lkIHFsX3NldF9tYWNfaW5mbyhzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCiB7Ci0Jc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPSBxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9CisJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOwogCXUzMiB2YWx1ZSwgcG9ydF9zdGF0dXM7CiAJdTggZnVuY19udW1iZXI7CiAKQEAgLTM0ODQsOSArMzM2MSw5IEBACiAJCXFkZXYtPm1iX2JpdF9tYXNrID0gRk4wX01BX0JJVFNfTUFTSzsKIAkJcWRldi0+UEhZQWRkciA9IFBPUlQwX1BIWV9BRERSRVNTOwogCQlpZiAocG9ydF9zdGF0dXMgJiBQT1JUX1NUQVRVU19TTTApCi0JCQlzZXRfYml0KFFMX0xJTktfT1BUSUNBTCwmcWRldi0+ZmxhZ3MpOworCQkJc2V0X2JpdChRTF9MSU5LX09QVElDQUwsICZxZGV2LT5mbGFncyk7CiAJCWVsc2UKLQkJCWNsZWFyX2JpdChRTF9MSU5LX09QVElDQUwsJnFkZXYtPmZsYWdzKTsKKwkJCWNsZWFyX2JpdChRTF9MSU5LX09QVElDQUwsICZxZGV2LT5mbGFncyk7CiAJCWJyZWFrOwogCiAJY2FzZSBJU1BfQ09OVFJPTF9GTjFfTkVUOgpAQCAtMzQ5NSwxNyArMzM3MiwxNyBAQAogCQlxZGV2LT5tYl9iaXRfbWFzayA9IEZOMV9NQV9CSVRTX01BU0s7CiAJCXFkZXYtPlBIWUFkZHIgPSBQT1JUMV9QSFlfQUREUkVTUzsKIAkJaWYgKHBvcnRfc3RhdHVzICYgUE9SVF9TVEFUVVNfU00xKQotCQkJc2V0X2JpdChRTF9MSU5LX09QVElDQUwsJnFkZXYtPmZsYWdzKTsKKwkJCXNldF9iaXQoUUxfTElOS19PUFRJQ0FMLCAmcWRldi0+ZmxhZ3MpOwogCQllbHNlCi0JCQljbGVhcl9iaXQoUUxfTElOS19PUFRJQ0FMLCZxZGV2LT5mbGFncyk7CisJCQljbGVhcl9iaXQoUUxfTElOS19PUFRJQ0FMLCAmcWRldi0+ZmxhZ3MpOwogCQlicmVhazsKIAogCWNhc2UgSVNQX0NPTlRST0xfRk4wX1NDU0k6CiAJY2FzZSBJU1BfQ09OVFJPTF9GTjFfU0NTSToKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9ERUJVRyBQRlgKLQkJICAgICAgICIlczogSW52YWxpZCBmdW5jdGlvbiBudW1iZXIsIGlzcENvbnRyb2xTdGF0dXMgPSAweCV4XG4iLAotCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSx2YWx1ZSk7CisJCW5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCSAgICAgICJJbnZhbGlkIGZ1bmN0aW9uIG51bWJlciwgaXNwQ29udHJvbFN0YXR1cyA9IDB4JXhcbiIsCisJCQkgICAgICB2YWx1ZSk7CiAJCWJyZWFrOwogCX0KIAlxZGV2LT5udW1Qb3J0cyA9IHFkZXYtPm52cmFtX2RhdGEudmVyc2lvbl9hbmRfbnVtUG9ydHMgPj4gODsKQEAgLTM1MTYsMzIgKzMzOTMsMjYgQEAKIAlzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYgPSAoc3RydWN0IHFsM19hZGFwdGVyICopbmV0ZGV2X3ByaXYobmRldik7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBxZGV2LT5wZGV2OwogCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlgKLQkgICAgICAgIlxuJXMgQWRhcHRlciAlZCBSZXZpc2lvbklEICVkIGZvdW5kICVzIG9uIFBDSSBzbG90ICVkLlxuIiwKLQkgICAgICAgRFJWX05BTUUsIHFkZXYtPmluZGV4LCBxZGV2LT5jaGlwX3Jldl9pZCwKLQkgICAgICAgKHFkZXYtPmRldmljZV9pZCA9PSBRTDMwMzJfREVWSUNFX0lEKSA/ICJRTEEzMDMyIiA6ICJRTEEzMDIyIiwKLQkgICAgICAgcWRldi0+cGNpX3Nsb3QpOwotCXByaW50ayhLRVJOX0lORk8gUEZYCi0JICAgICAgICIlcyBJbnRlcmZhY2UuXG4iLAotCSAgICAgICB0ZXN0X2JpdChRTF9MSU5LX09QVElDQUwsJnFkZXYtPmZsYWdzKSA/ICJPUFRJQ0FMIiA6ICJDT1BQRVIiKTsKKwluZXRkZXZfaW5mbyhuZGV2LAorCQkgICAgIiVzIEFkYXB0ZXIgJWQgUmV2aXNpb25JRCAlZCBmb3VuZCAlcyBvbiBQQ0kgc2xvdCAlZFxuIiwKKwkJICAgIERSVl9OQU1FLCBxZGV2LT5pbmRleCwgcWRldi0+Y2hpcF9yZXZfaWQsCisJCSAgICBxZGV2LT5kZXZpY2VfaWQgPT0gUUwzMDMyX0RFVklDRV9JRCA/ICJRTEEzMDMyIiA6ICJRTEEzMDIyIiwKKwkJICAgIHFkZXYtPnBjaV9zbG90KTsKKwluZXRkZXZfaW5mbyhuZGV2LCAiJXMgSW50ZXJmYWNlXG4iLAorCQl0ZXN0X2JpdChRTF9MSU5LX09QVElDQUwsICZxZGV2LT5mbGFncykgPyAiT1BUSUNBTCIgOiAiQ09QUEVSIik7CiAKIAkvKgogCSAqIFByaW50IFBDSSBidXMgd2lkdGgvdHlwZS4KIAkgKi8KLQlwcmludGsoS0VSTl9JTkZPIFBGWAotCSAgICAgICAiQnVzIGludGVyZmFjZSBpcyAlcyAlcy5cbiIsCi0JICAgICAgICgocWRldi0+cGNpX3dpZHRoID09IDY0KSA/ICI2NC1iaXQiIDogIjMyLWJpdCIpLAotCSAgICAgICAoKHFkZXYtPnBjaV94KSA/ICJQQ0ktWCIgOiAiUENJIikpOworCW5ldGRldl9pbmZvKG5kZXYsICJCdXMgaW50ZXJmYWNlIGlzICVzICVzXG4iLAorCQkgICAgKChxZGV2LT5wY2lfd2lkdGggPT0gNjQpID8gIjY0LWJpdCIgOiAiMzItYml0IiksCisJCSAgICAoKHFkZXYtPnBjaV94KSA/ICJQQ0ktWCIgOiAiUENJIikpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlgKLQkgICAgICAgIm1lbSAgSU8gYmFzZSBhZGRyZXNzIGFkanVzdGVkID0gMHglcFxuIiwKLQkgICAgICAgcWRldi0+bWVtX21hcF9yZWdpc3RlcnMpOwotCXByaW50ayhLRVJOX0lORk8gUEZYICJJbnRlcnJ1cHQgbnVtYmVyID0gJWRcbiIsIHBkZXYtPmlycSk7CisJbmV0ZGV2X2luZm8obmRldiwgIm1lbSAgSU8gYmFzZSBhZGRyZXNzIGFkanVzdGVkID0gMHglcFxuIiwKKwkJICAgIHFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzKTsKKwluZXRkZXZfaW5mbyhuZGV2LCAiSW50ZXJydXB0IG51bWJlciA9ICVkXG4iLCBwZGV2LT5pcnEpOwogCi0JaWYgKG5ldGlmX21zZ19wcm9iZShxZGV2KSkKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKLQkJICAgICAgICIlczogTUFDIGFkZHJlc3MgJXBNXG4iLAotCQkgICAgICAgbmRldi0+bmFtZSwgbmRldi0+ZGV2X2FkZHIpOworCW5ldGlmX2luZm8ocWRldiwgcHJvYmUsIG5kZXYsICJNQUMgYWRkcmVzcyAlcE1cbiIsIG5kZXYtPmRldl9hZGRyKTsKIH0KIAogc3RhdGljIGludCBxbF9hZGFwdGVyX2Rvd24oc3RydWN0IHFsM19hZGFwdGVyICpxZGV2LCBpbnQgZG9fcmVzZXQpCkBAIC0zNTUyLDE3ICszNDIzLDE2IEBACiAJbmV0aWZfc3RvcF9xdWV1ZShuZGV2KTsKIAluZXRpZl9jYXJyaWVyX29mZihuZGV2KTsKIAotCWNsZWFyX2JpdChRTF9BREFQVEVSX1VQLCZxZGV2LT5mbGFncyk7Ci0JY2xlYXJfYml0KFFMX0xJTktfTUFTVEVSLCZxZGV2LT5mbGFncyk7CisJY2xlYXJfYml0KFFMX0FEQVBURVJfVVAsICZxZGV2LT5mbGFncyk7CisJY2xlYXJfYml0KFFMX0xJTktfTUFTVEVSLCAmcWRldi0+ZmxhZ3MpOwogCiAJcWxfZGlzYWJsZV9pbnRlcnJ1cHRzKHFkZXYpOwogCiAJZnJlZV9pcnEocWRldi0+cGRldi0+aXJxLCBuZGV2KTsKIAotCWlmIChxZGV2LT5tc2kgJiYgdGVzdF9iaXQoUUxfTVNJX0VOQUJMRUQsJnFkZXYtPmZsYWdzKSkgewotCQlwcmludGsoS0VSTl9JTkZPIFBGWAotCQkgICAgICAgIiVzOiBjYWxsaW5nIHBjaV9kaXNhYmxlX21zaSgpLlxuIiwgcWRldi0+bmRldi0+bmFtZSk7Ci0JCWNsZWFyX2JpdChRTF9NU0lfRU5BQkxFRCwmcWRldi0+ZmxhZ3MpOworCWlmIChxZGV2LT5tc2kgJiYgdGVzdF9iaXQoUUxfTVNJX0VOQUJMRUQsICZxZGV2LT5mbGFncykpIHsKKwkJbmV0ZGV2X2luZm8ocWRldi0+bmRldiwgImNhbGxpbmcgcGNpX2Rpc2FibGVfbXNpKClcbiIpOworCQljbGVhcl9iaXQoUUxfTVNJX0VOQUJMRUQsICZxZGV2LT5mbGFncyk7CiAJCXBjaV9kaXNhYmxlX21zaShxZGV2LT5wZGV2KTsKIAl9CiAKQEAgLTM1NzYsMTcgKzM0NDYsMTYgQEAKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcWRldi0+aHdfbG9jaywgaHdfZmxhZ3MpOwogCQlpZiAocWxfd2FpdF9mb3JfZHJ2cl9sb2NrKHFkZXYpKSB7Ci0JCQlpZiAoKHNvZnRfcmVzZXQgPSBxbF9hZGFwdGVyX3Jlc2V0KHFkZXYpKSkgewotCQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCQkgICAgICAgIiVzOiBxbF9hZGFwdGVyX3Jlc2V0KCVkKSBGQUlMRUQhXG4iLAotCQkJCSAgICAgICBuZGV2LT5uYW1lLCBxZGV2LT5pbmRleCk7CisJCQlzb2Z0X3Jlc2V0ID0gcWxfYWRhcHRlcl9yZXNldChxZGV2KTsKKwkJCWlmIChzb2Z0X3Jlc2V0KSB7CisJCQkJbmV0ZGV2X2VycihuZGV2LCAicWxfYWRhcHRlcl9yZXNldCglZCkgRkFJTEVEIVxuIiwKKwkJCQkJICAgcWRldi0+aW5kZXgpOwogCQkJfQotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJCSIlczogUmVsZWFzZWluZyBkcml2ZXIgbG9jayB2aWEgY2hpcCByZXNldC5cbiIsbmRldi0+bmFtZSk7CisJCQluZXRkZXZfZXJyKG5kZXYsCisJCQkJICAgIlJlbGVhc2luZyBkcml2ZXIgbG9jayB2aWEgY2hpcCByZXNldFxuIik7CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkgICAgICAgIiVzOiBDb3VsZCBub3QgYWNxdWlyZSBkcml2ZXIgbG9jayB0byBkbyAiCi0JCQkgICAgICAgInJlc2V0IVxuIiwgbmRldi0+bmFtZSk7CisJCQluZXRkZXZfZXJyKG5kZXYsCisJCQkJICAgIkNvdWxkIG5vdCBhY3F1aXJlIGRyaXZlciBsb2NrIHRvIGRvIHJlc2V0IVxuIik7CiAJCQlyZXR2YWwgPSAtMTsKIAkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7CkBAIC0zNjAzLDU2ICszNDcyLDUwIEBACiAJdW5zaWduZWQgbG9uZyBod19mbGFnczsKIAogCWlmIChxbF9hbGxvY19tZW1fcmVzb3VyY2VzKHFkZXYpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJICAgICAgICIlcyBVbmFibGUgdG8gIGFsbG9jYXRlIGJ1ZmZlcnMuXG4iLCBuZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihuZGV2LCAiVW5hYmxlIHRvICBhbGxvY2F0ZSBidWZmZXJzXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJaWYgKHFkZXYtPm1zaSkgewogCQlpZiAocGNpX2VuYWJsZV9tc2kocWRldi0+cGRldikpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSAgICAgICAiJXM6IFVzZXIgcmVxdWVzdGVkIE1TSSwgYnV0IE1TSSBmYWlsZWQgdG8gIgotCQkJICAgICAgICJpbml0aWFsaXplLiAgQ29udGludWluZyB3aXRob3V0IE1TSS5cbiIsCi0JCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSk7CisJCQluZXRkZXZfZXJyKG5kZXYsCisJCQkJICAgIlVzZXIgcmVxdWVzdGVkIE1TSSwgYnV0IE1TSSBmYWlsZWQgdG8gaW5pdGlhbGl6ZS4gIENvbnRpbnVpbmcgd2l0aG91dCBNU0kuXG4iKTsKIAkJCXFkZXYtPm1zaSA9IDA7CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IE1TSSBFbmFibGVkLi4uXG4iLCBxZGV2LT5uZGV2LT5uYW1lKTsKLQkJCXNldF9iaXQoUUxfTVNJX0VOQUJMRUQsJnFkZXYtPmZsYWdzKTsKKwkJCW5ldGRldl9pbmZvKG5kZXYsICJNU0kgRW5hYmxlZC4uLlxuIik7CisJCQlzZXRfYml0KFFMX01TSV9FTkFCTEVELCAmcWRldi0+ZmxhZ3MpOwogCQkJaXJxX2ZsYWdzICY9IH5JUlFGX1NIQVJFRDsKIAkJfQogCX0KIAotCWlmICgoZXJyID0gcmVxdWVzdF9pcnEocWRldi0+cGRldi0+aXJxLAotCQkJICAgICAgIHFsM3h4eF9pc3IsCi0JCQkgICAgICAgaXJxX2ZsYWdzLCBuZGV2LT5uYW1lLCBuZGV2KSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkgICAgICAgIiVzOiBGYWlsZWQgdG8gcmVzZXJ2ZSBpbnRlcnJ1cHQgJWQgYWxyZWFkeSBpbiB1c2UuXG4iLAotCQkgICAgICAgbmRldi0+bmFtZSwgcWRldi0+cGRldi0+aXJxKTsKKwllcnIgPSByZXF1ZXN0X2lycShxZGV2LT5wZGV2LT5pcnEsIHFsM3h4eF9pc3IsCisJCQkgIGlycV9mbGFncywgbmRldi0+bmFtZSwgbmRldik7CisJaWYgKGVycikgeworCQluZXRkZXZfZXJyKG5kZXYsCisJCQkgICAiRmFpbGVkIHRvIHJlc2VydmUgaW50ZXJydXB0ICVkIC0gYWxyZWFkeSBpbiB1c2VcbiIsCisJCQkgICBxZGV2LT5wZGV2LT5pcnEpOwogCQlnb3RvIGVycl9pcnE7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnFkZXYtPmh3X2xvY2ssIGh3X2ZsYWdzKTsKIAotCWlmICgoZXJyID0gcWxfd2FpdF9mb3JfZHJ2cl9sb2NrKHFkZXYpKSkgewotCQlpZiAoKGVyciA9IHFsX2FkYXB0ZXJfaW5pdGlhbGl6ZShxZGV2KSkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSAgICAgICAiJXM6IFVuYWJsZSB0byBpbml0aWFsaXplIGFkYXB0ZXIuXG4iLAotCQkJICAgICAgIG5kZXYtPm5hbWUpOworCWVyciA9IHFsX3dhaXRfZm9yX2RydnJfbG9jayhxZGV2KTsKKwlpZiAoZXJyKSB7CisJCWVyciA9IHFsX2FkYXB0ZXJfaW5pdGlhbGl6ZShxZGV2KTsKKwkJaWYgKGVycikgeworCQkJbmV0ZGV2X2VycihuZGV2LCAiVW5hYmxlIHRvIGluaXRpYWxpemUgYWRhcHRlclxuIik7CiAJCQlnb3RvIGVycl9pbml0OwogCQl9Ci0JCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCQkiJXM6IFJlbGVhc2VpbmcgZHJpdmVyIGxvY2suXG4iLG5kZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKG5kZXYsICJSZWxlYXNpbmcgZHJpdmVyIGxvY2tcbiIpOwogCQlxbF9zZW1fdW5sb2NrKHFkZXYsIFFMX0RSVlJfU0VNX01BU0spOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJICAgICAgICIlczogQ291bGQgbm90IGFjcXVpcmUgZHJpdmVyIGxvY2suXG4iLAotCQkgICAgICAgbmRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIobmRldiwgIkNvdWxkIG5vdCBhY3F1aXJlIGRyaXZlciBsb2NrXG4iKTsKIAkJZ290byBlcnJfbG9jazsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7CiAKLQlzZXRfYml0KFFMX0FEQVBURVJfVVAsJnFkZXYtPmZsYWdzKTsKKwlzZXRfYml0KFFMX0FEQVBURVJfVVAsICZxZGV2LT5mbGFncyk7CiAKIAltb2RfdGltZXIoJnFkZXYtPmFkYXB0ZXJfdGltZXIsIGppZmZpZXMgKyBIWiAqIDEpOwogCkBAIC0zNjY2LDExICszNTI5LDkgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7CiAJZnJlZV9pcnEocWRldi0+cGRldi0+aXJxLCBuZGV2KTsKIGVycl9pcnE6Ci0JaWYgKHFkZXYtPm1zaSAmJiB0ZXN0X2JpdChRTF9NU0lfRU5BQkxFRCwmcWRldi0+ZmxhZ3MpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYCi0JCSAgICAgICAiJXM6IGNhbGxpbmcgcGNpX2Rpc2FibGVfbXNpKCkuXG4iLAotCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSk7Ci0JCWNsZWFyX2JpdChRTF9NU0lfRU5BQkxFRCwmcWRldi0+ZmxhZ3MpOworCWlmIChxZGV2LT5tc2kgJiYgdGVzdF9iaXQoUUxfTVNJX0VOQUJMRUQsICZxZGV2LT5mbGFncykpIHsKKwkJbmV0ZGV2X2luZm8obmRldiwgImNhbGxpbmcgcGNpX2Rpc2FibGVfbXNpKClcbiIpOworCQljbGVhcl9iaXQoUUxfTVNJX0VOQUJMRUQsICZxZGV2LT5mbGFncyk7CiAJCXBjaV9kaXNhYmxlX21zaShxZGV2LT5wZGV2KTsKIAl9CiAJcmV0dXJuIGVycjsKQEAgLTM2NzgsMTAgKzM1MzksOSBAQAogCiBzdGF0aWMgaW50IHFsX2N5Y2xlX2FkYXB0ZXIoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2LCBpbnQgcmVzZXQpCiB7Ci0JaWYoIHFsX2FkYXB0ZXJfZG93bihxZGV2LHJlc2V0KSB8fCBxbF9hZGFwdGVyX3VwKHFkZXYpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCQkiJXM6IERyaXZlciB1cC9kb3duIGN5Y2xlIGZhaWxlZCwgIgotCQkJCSJjbG9zaW5nIGRldmljZVxuIixxZGV2LT5uZGV2LT5uYW1lKTsKKwlpZiAocWxfYWRhcHRlcl9kb3duKHFkZXYsIHJlc2V0KSB8fCBxbF9hZGFwdGVyX3VwKHFkZXYpKSB7CisJCW5ldGRldl9lcnIocWRldi0+bmRldiwKKwkJCSAgICJEcml2ZXIgdXAvZG93biBjeWNsZSBmYWlsZWQsIGNsb3NpbmcgZGV2aWNlXG4iKTsKIAkJcnRubF9sb2NrKCk7CiAJCWRldl9jbG9zZShxZGV2LT5uZGV2KTsKIAkJcnRubF91bmxvY2soKTsKQEAgLTM2OTgsMjQgKzM1NTgsMjQgQEAKIAkgKiBXYWl0IGZvciBkZXZpY2UgdG8gcmVjb3ZlciBmcm9tIGEgcmVzZXQuCiAJICogKFJhcmVseSBoYXBwZW5zLCBidXQgcG9zc2libGUuKQogCSAqLwotCXdoaWxlICghdGVzdF9iaXQoUUxfQURBUFRFUl9VUCwmcWRldi0+ZmxhZ3MpKQorCXdoaWxlICghdGVzdF9iaXQoUUxfQURBUFRFUl9VUCwgJnFkZXYtPmZsYWdzKSkKIAkJbXNsZWVwKDUwKTsKIAotCXFsX2FkYXB0ZXJfZG93bihxZGV2LFFMX0RPX1JFU0VUKTsKKwlxbF9hZGFwdGVyX2Rvd24ocWRldiwgUUxfRE9fUkVTRVQpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHFsM3h4eF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiA9IG5ldGRldl9wcml2KG5kZXYpOwotCXJldHVybiAocWxfYWRhcHRlcl91cChxZGV2KSk7CisJcmV0dXJuIHFsX2FkYXB0ZXJfdXAocWRldik7CiB9CiAKIHN0YXRpYyBpbnQgcWwzeHh4X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdm9pZCAqcCkKIHsKIAlzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYgPSAoc3RydWN0IHFsM19hZGFwdGVyICopbmV0ZGV2X3ByaXYobmRldik7CiAJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPQotCSAgICAJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOworCQkJcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CiAJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKIAl1bnNpZ25lZCBsb25nIGh3X2ZsYWdzOwogCkBAIC0zNzUwLDcgKzM2MTAsNyBAQAogewogCXN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiA9IChzdHJ1Y3QgcWwzX2FkYXB0ZXIgKiluZXRkZXZfcHJpdihuZGV2KTsKIAotCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBSZXNldHRpbmcuLi5cbiIsIG5kZXYtPm5hbWUpOworCW5ldGRldl9lcnIobmRldiwgIlJlc2V0dGluZy4uLlxuIik7CiAJLyoKIAkgKiBTdG9wIHRoZSBxdWV1ZXMsIHdlJ3ZlIGdvdCBhIHByb2JsZW0uCiAJICovCkBAIC0zNzcwLDExICszNjMwLDEyIEBACiAJdTMyIHZhbHVlOwogCXN0cnVjdCBxbF90eF9idWZfY2IgKnR4X2NiOwogCWludCBtYXhfd2FpdF90aW1lLCBpOwotCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0gcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPQorCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKIAl1bnNpZ25lZCBsb25nIGh3X2ZsYWdzOwogCi0JaWYgKHRlc3RfYml0KChRTF9SRVNFVF9QRVJfU0NTSSB8IFFMX1JFU0VUX1NUQVJUKSwmcWRldi0+ZmxhZ3MpKSB7Ci0JCWNsZWFyX2JpdChRTF9MSU5LX01BU1RFUiwmcWRldi0+ZmxhZ3MpOworCWlmICh0ZXN0X2JpdCgoUUxfUkVTRVRfUEVSX1NDU0kgfCBRTF9SRVNFVF9TVEFSVCksICZxZGV2LT5mbGFncykpIHsKKwkJY2xlYXJfYml0KFFMX0xJTktfTUFTVEVSLCAmcWRldi0+ZmxhZ3MpOwogCiAJCS8qCiAJCSAqIExvb3AgdGhyb3VnaCB0aGUgYWN0aXZlIGxpc3QgYW5kIHJldHVybiB0aGUgc2tiLgpAQCAtMzc4MywxNyArMzY0NCwxOSBAQAogCQkJaW50IGo7CiAJCQl0eF9jYiA9ICZxZGV2LT50eF9idWZbaV07CiAJCQlpZiAodHhfY2ItPnNrYikgewotCQkJCXByaW50ayhLRVJOX0RFQlVHIFBGWAotCQkJCSAgICAgICAiJXM6IEZyZWVpbmcgbG9zdCBTS0IuXG4iLAotCQkJCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIG5kZXYsCisJCQkJCSAgICAgICJGcmVlaW5nIGxvc3QgU0tCXG4iKTsKIAkJCQlwY2lfdW5tYXBfc2luZ2xlKHFkZXYtPnBkZXYsCi0JCQkJCSBkbWFfdW5tYXBfYWRkcigmdHhfY2ItPm1hcFswXSwgbWFwYWRkciksCisJCQkJCSBkbWFfdW5tYXBfYWRkcigmdHhfY2ItPm1hcFswXSwKKwkJCQkJCQltYXBhZGRyKSwKIAkJCQkJIGRtYV91bm1hcF9sZW4oJnR4X2NiLT5tYXBbMF0sIG1hcGxlbiksCiAJCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJCQlmb3Ioaj0xO2o8dHhfY2ItPnNlZ19jb3VudDtqKyspIHsKKwkJCQlmb3IgKGogPSAxOyBqIDwgdHhfY2ItPnNlZ19jb3VudDsgaisrKSB7CiAJCQkJCXBjaV91bm1hcF9wYWdlKHFkZXYtPnBkZXYsCi0JCQkJCSAgICAgICBkbWFfdW5tYXBfYWRkcigmdHhfY2ItPm1hcFtqXSxtYXBhZGRyKSwKLQkJCQkJICAgICAgIGRtYV91bm1hcF9sZW4oJnR4X2NiLT5tYXBbal0sbWFwbGVuKSwKKwkJCQkJICAgICAgIGRtYV91bm1hcF9hZGRyKCZ0eF9jYi0+bWFwW2pdLAorCQkJCQkJCSAgICAgIG1hcGFkZHIpLAorCQkJCQkgICAgICAgZG1hX3VubWFwX2xlbigmdHhfY2ItPm1hcFtqXSwKKwkJCQkJCQkgICAgIG1hcGxlbiksCiAJCQkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJCQl9CiAJCQkJZGV2X2tmcmVlX3NrYih0eF9jYi0+c2tiKTsKQEAgLTM4MDEsOCArMzY2NCw3IEBACiAJCQl9CiAJCX0KIAotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCSAgICAgICAiJXM6IENsZWFyaW5nIE5SSSBhZnRlciByZXNldC5cbiIsIHFkZXYtPm5kZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKG5kZXYsICJDbGVhcmluZyBOUkkgYWZ0ZXIgcmVzZXRcbiIpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcWRldi0+aHdfbG9jaywgaHdfZmxhZ3MpOwogCQlxbF93cml0ZV9jb21tb25fcmVnKHFkZXYsCiAJCQkJICAgICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3MuCkBAIC0zODE4LDE2ICszNjgwLDE0IEBACiAKIAkJCQkJCSAgIGlzcENvbnRyb2xTdGF0dXMpOwogCQkJaWYgKCh2YWx1ZSAmIElTUF9DT05UUk9MX1NSKSA9PSAwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYCi0JCQkJICAgICAgICIlczogcmVzZXQgY29tcGxldGVkLlxuIiwKLQkJCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSk7CisJCQkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBuZGV2LAorCQkJCQkgICAgICAicmVzZXQgY29tcGxldGVkXG4iKTsKIAkJCQlicmVhazsKIAkJCX0KIAogCQkJaWYgKHZhbHVlICYgSVNQX0NPTlRST0xfUkkpIHsKLQkJCQlwcmludGsoS0VSTl9ERUJVRyBQRlgKLQkJCQkgICAgICAgIiVzOiBjbGVhcmluZyBOUkkgYWZ0ZXIgcmVzZXQuXG4iLAotCQkJCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIG5kZXYsCisJCQkJCSAgICAgICJjbGVhcmluZyBOUkkgYWZ0ZXIgcmVzZXRcbiIpOwogCQkJCXFsX3dyaXRlX2NvbW1vbl9yZWcocWRldiwKIAkJCQkJCSAgICAmcG9ydF9yZWdzLT4KIAkJCQkJCSAgICBDb21tb25SZWdzLgpAQCAtMzg0OCwyMSArMzcwOCwxOSBAQAogCQkJICogU2V0IHRoZSByZXNldCBmbGFncyBhbmQgY2xlYXIgdGhlIGJvYXJkIGFnYWluLgogCQkJICogTm90aGluZyBlbHNlIHRvIGRvLi4uCiAJCQkgKi8KLQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSAgICAgICAiJXM6IFRpbWVkIG91dCB3YWl0aW5nIGZvciByZXNldCB0byAiCi0JCQkgICAgICAgImNvbXBsZXRlLlxuIiwgbmRldi0+bmFtZSk7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkgICAgICAgIiVzOiBEbyBhIHJlc2V0LlxuIiwgbmRldi0+bmFtZSk7Ci0JCQljbGVhcl9iaXQoUUxfUkVTRVRfUEVSX1NDU0ksJnFkZXYtPmZsYWdzKTsKLQkJCWNsZWFyX2JpdChRTF9SRVNFVF9TVEFSVCwmcWRldi0+ZmxhZ3MpOwotCQkJcWxfY3ljbGVfYWRhcHRlcihxZGV2LFFMX0RPX1JFU0VUKTsKKwkJCW5ldGRldl9lcnIobmRldiwKKwkJCQkgICAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIHJlc2V0IHRvIGNvbXBsZXRlXG4iKTsKKwkJCW5ldGRldl9lcnIobmRldiwgIkRvIGEgcmVzZXRcbiIpOworCQkJY2xlYXJfYml0KFFMX1JFU0VUX1BFUl9TQ1NJLCAmcWRldi0+ZmxhZ3MpOworCQkJY2xlYXJfYml0KFFMX1JFU0VUX1NUQVJULCAmcWRldi0+ZmxhZ3MpOworCQkJcWxfY3ljbGVfYWRhcHRlcihxZGV2LCBRTF9ET19SRVNFVCk7CiAJCQlyZXR1cm47CiAJCX0KIAotCQljbGVhcl9iaXQoUUxfUkVTRVRfQUNUSVZFLCZxZGV2LT5mbGFncyk7Ci0JCWNsZWFyX2JpdChRTF9SRVNFVF9QRVJfU0NTSSwmcWRldi0+ZmxhZ3MpOwotCQljbGVhcl9iaXQoUUxfUkVTRVRfU1RBUlQsJnFkZXYtPmZsYWdzKTsKLQkJcWxfY3ljbGVfYWRhcHRlcihxZGV2LFFMX05PX1JFU0VUKTsKKwkJY2xlYXJfYml0KFFMX1JFU0VUX0FDVElWRSwgJnFkZXYtPmZsYWdzKTsKKwkJY2xlYXJfYml0KFFMX1JFU0VUX1BFUl9TQ1NJLCAmcWRldi0+ZmxhZ3MpOworCQljbGVhcl9iaXQoUUxfUkVTRVRfU1RBUlQsICZxZGV2LT5mbGFncyk7CisJCXFsX2N5Y2xlX2FkYXB0ZXIocWRldiwgUUxfTk9fUkVTRVQpOwogCX0KIH0KIApAQCAtMzg3Niw3ICszNzM0LDggQEAKIAogc3RhdGljIHZvaWQgcWxfZ2V0X2JvYXJkX2luZm8oc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQogewotCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0gcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPQorCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKIAl1MzIgdmFsdWU7CiAKIAl2YWx1ZSA9IHFsX3JlYWRfcGFnZTBfcmVnX2wocWRldiwgJnBvcnRfcmVncy0+cG9ydFN0YXR1cyk7CkBAIC0zOTE1LDIwICszNzc0LDE4IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBOVUxMOwogCXN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiA9IE5VTEw7Ci0Jc3RhdGljIGludCBjYXJkc19mb3VuZCA9IDA7CisJc3RhdGljIGludCBjYXJkc19mb3VuZDsKIAlpbnQgdW5pbml0aWFsaXplZF92YXIocGNpX3VzaW5nX2RhYyksIGVycjsKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXMgY2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlwcl9lcnIoIiVzIGNhbm5vdCBlbmFibGUgUENJIGRldmljZVxuIiwgcGNpX25hbWUocGRldikpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCiAJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTkFNRSk7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICIlcyBjYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCXByX2VycigiJXMgY2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzXG4iLCBwY2lfbmFtZShwZGV2KSk7CiAJCWdvdG8gZXJyX291dF9kaXNhYmxlX3BkZXY7CiAJfQogCkBAIC0zOTQzLDE1ICszODAwLDEzIEBACiAJfQogCiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICIlcyBubyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb25cbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCXByX2VycigiJXMgbm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uXG4iLCBwY2lfbmFtZShwZGV2KSk7CiAJCWdvdG8gZXJyX291dF9mcmVlX3JlZ2lvbnM7CiAJfQogCiAJbmRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgcWwzX2FkYXB0ZXIpKTsKIAlpZiAoIW5kZXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXMgY291bGQgbm90IGFsbG9jIGV0aGVyZGV2XG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlwcl9lcnIoIiVzIGNvdWxkIG5vdCBhbGxvYyBldGhlcmRldlxuIiwgcGNpX25hbWUocGRldikpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9vdXRfZnJlZV9yZWdpb25zOwogCX0KQEAgLTM5NzgsOCArMzgzMyw3IEBACiAKIAlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVycyA9IHBjaV9pb3JlbWFwX2JhcihwZGV2LCAxKTsKIAlpZiAoIXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBjYW5ub3QgbWFwIGRldmljZSByZWdpc3RlcnNcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCXByX2VycigiJXM6IGNhbm5vdCBtYXAgZGV2aWNlIHJlZ2lzdGVyc1xuIiwgcGNpX25hbWUocGRldikpOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIGVycl9vdXRfZnJlZV9uZGV2OwogCX0KQEAgLTM5OTgsOSArMzg1Miw4IEBACiAKIAkvKiBtYWtlIHN1cmUgdGhlIEVFUFJPTSBpcyBnb29kICovCiAJaWYgKHFsX2dldF9udnJhbV9wYXJhbXMocWRldikpIHsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgUEZYCi0JCSAgICAgICAicWwzeHh4X3Byb2JlOiBBZGFwdGVyICMlZCwgSW52YWxpZCBOVlJBTSBwYXJhbWV0ZXJzLlxuIiwKLQkJICAgICAgIHFkZXYtPmluZGV4KTsKKwkJcHJfYWxlcnQoIiVzOiBBZGFwdGVyICMlZCwgSW52YWxpZCBOVlJBTSBwYXJhbWV0ZXJzXG4iLAorCQkJIF9fZnVuY19fLCBxZGV2LT5pbmRleCk7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gZXJyX291dF9pb3VubWFwOwogCX0KQEAgLTQwMjYsMTQgKzM4NzksMTIgQEAKIAkgKiBTZXQgdGhlIE1heGltdW0gTWVtb3J5IFJlYWQgQnl0ZSBDb3VudCB2YWx1ZS4gV2UgZG8gdGhpcyB0byBoYW5kbGUKIAkgKiBqdW1ibyBmcmFtZXMuCiAJICovCi0JaWYgKHFkZXYtPnBjaV94KSB7CisJaWYgKHFkZXYtPnBjaV94KQogCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgKGludCkweDRlLCAodTE2KSAweDAwMzYpOwotCX0KIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBjYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZVxuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJcHJfZXJyKCIlczogY2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2VcbiIsIHBjaV9uYW1lKHBkZXYpKTsKIAkJZ290byBlcnJfb3V0X2lvdW5tYXA7CiAJfQogCkBAIC00MDUyLDEwICszOTAzLDEwIEBACiAJcWRldi0+YWRhcHRlcl90aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaICogMjsJLyogdHdvIHNlY29uZCBkZWxheSAqLwogCXFkZXYtPmFkYXB0ZXJfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXFkZXY7CiAKLQlpZighY2FyZHNfZm91bmQpIHsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgUEZYICIlc1xuIiwgRFJWX1NUUklORyk7Ci0JCXByaW50ayhLRVJOX0FMRVJUIFBGWCAiRHJpdmVyIG5hbWU6ICVzLCBWZXJzaW9uOiAlcy5cbiIsCi0JICAgIAkgICBEUlZfTkFNRSwgRFJWX1ZFUlNJT04pOworCWlmICghY2FyZHNfZm91bmQpIHsKKwkJcHJfYWxlcnQoIiVzXG4iLCBEUlZfU1RSSU5HKTsKKwkJcHJfYWxlcnQoIkRyaXZlciBuYW1lOiAlcywgVmVyc2lvbjogJXNcbiIsCisJCQkgRFJWX05BTUUsIERSVl9WRVJTSU9OKTsKIAl9CiAJcWxfZGlzcGxheV9kZXZfaW5mbyhuZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pYy5oIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pYy5oCmluZGV4IDg5NmQ0MGQuLjk3MDM4OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWMuaAorKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljLmgKQEAgLTUxLDggKzUxLDggQEAKIAogI2RlZmluZSBfUUxDTklDX0xJTlVYX01BSk9SIDUKICNkZWZpbmUgX1FMQ05JQ19MSU5VWF9NSU5PUiAwCi0jZGVmaW5lIF9RTENOSUNfTElOVVhfU1VCVkVSU0lPTiAyCi0jZGVmaW5lIFFMQ05JQ19MSU5VWF9WRVJTSU9OSUQgICI1LjAuMiIKKyNkZWZpbmUgX1FMQ05JQ19MSU5VWF9TVUJWRVJTSU9OIDcKKyNkZWZpbmUgUUxDTklDX0xJTlVYX1ZFUlNJT05JRCAgIjUuMC43IgogI2RlZmluZSBRTENOSUNfRFJWX0lEQ19WRVIgIDB4MDEKIAogI2RlZmluZSBRTENOSUNfVkVSU0lPTl9DT0RFKGEsIGIsIGMpCSgoKGEpIDw8IDI0KSArICgoYikgPDwgMTYpICsgKGMpKQpAQCAtNjgsNiArNjgsNyBAQAogI2RlZmluZSBRTENOSUNfREVDT0RFX1ZFUlNJT04odikgXAogCVFMQ05JQ19WRVJTSU9OX0NPREUoKCh2KSAmIDB4ZmYpLCAoKCh2KSA+PiA4KSAmIDB4ZmYpLCAoKHYpID4+IDE2KSkKIAorI2RlZmluZSBRTENOSUNfTUlOX0ZXX1ZFUlNJT04gICAgIFFMQ05JQ19WRVJTSU9OX0NPREUoNCwgNCwgMikKICNkZWZpbmUgUUxDTklDX05VTV9GTEFTSF9TRUNUT1JTICg2NCkKICNkZWZpbmUgUUxDTklDX0ZMQVNIX1NFQ1RPUl9TSVpFICg2NCAqIDEwMjQpCiAjZGVmaW5lIFFMQ05JQ19GTEFTSF9UT1RBTF9TSVpFICAoUUxDTklDX05VTV9GTEFTSF9TRUNUT1JTIFwKQEAgLTExMiw4ICsxMTMsMTAgQEAKICNkZWZpbmUgVFhfVURQVjZfUEtUCTB4MGMKIAogLyogVHggZGVmaW5lcyAqLwotI2RlZmluZSBNQVhfQlVGRkVSU19QRVJfQ01ECTMyCi0jZGVmaW5lIFRYX1NUT1BfVEhSRVNICQkoKE1BWF9TS0JfRlJBR1MgPj4gMikgKyA0KQorI2RlZmluZSBNQVhfVFNPX0hFQURFUl9ERVNDCTIKKyNkZWZpbmUgTUdNVF9DTURfREVTQ19SRVNWCTQKKyNkZWZpbmUgVFhfU1RPUF9USFJFU0gJCSgoTUFYX1NLQl9GUkFHUyA+PiAyKSArIE1BWF9UU09fSEVBREVSX0RFU0MgXAorCQkJCQkJCSsgTUdNVF9DTURfREVTQ19SRVNWKQogI2RlZmluZSBRTENOSUNfTUFYX1RYX1RJTUVPVVRTCTIKIAogLyoKQEAgLTE5Nyw4ICsyMDAsNyBAQAogCiAJX19sZTY0IGFkZHJfYnVmZmVyNDsKIAotCV9fbGUzMiByZXNlcnZlZDI7Ci0JX19sZTE2IHJlc2VydmVkOworCXU4IGV0aF9hZGRyW0VUSF9BTEVOXTsKIAlfX2xlMTYgdmxhbl9UQ0k7CiAKIH0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoNjQpKSk7CkBAIC0zMTUsNiArMzE3LDggQEAKICNkZWZpbmUgUUxDTklDX0JSRFRZUEVfUDNfMTBHX1hGUAkweDAwMzIKICNkZWZpbmUgUUxDTklDX0JSRFRZUEVfUDNfMTBHX1RQCTB4MDA4MAogCisjZGVmaW5lIFFMQ05JQ19NU0lYX1RBQkxFX09GRlNFVAkweDQ0CisKIC8qIEZsYXNoIG1lbW9yeSBtYXAgKi8KICNkZWZpbmUgUUxDTklDX0JSRENGR19TVEFSVAkweDQwMDAJCS8qIGJvYXJkIGNvbmZpZyAqLwogI2RlZmluZSBRTENOSUNfQk9PVExEX1NUQVJUCTB4MTAwMDAJCS8qIGJvb3RsZCAqLwpAQCAtMzY3LDcgKzM3MSw3IEBACiAgKi8KIHN0cnVjdCBxbGNuaWNfY21kX2J1ZmZlciB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgcWxjbmljX3NrYl9mcmFnIGZyYWdfYXJyYXlbTUFYX0JVRkZFUlNfUEVSX0NNRCArIDFdOworCXN0cnVjdCBxbGNuaWNfc2tiX2ZyYWcgZnJhZ19hcnJheVtNQVhfU0tCX0ZSQUdTICsgMV07CiAJdTMyIGZyYWdfY291bnQ7CiB9OwogCkBAIC0zNzcsNyArMzgxLDYgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXU2NCBkbWE7CiAJdTE2IHJlZl9oYW5kbGU7Ci0JdTE2IHN0YXRlOwogfTsKIAogLyogQm9hcmQgdHlwZXMgKi8KQEAgLTQxOSw3ICs0MjIsNiBAQAogCXU2NCAgeG1pdF9vbjsKIAl1NjQgIHhtaXRfb2ZmOwogCXU2NCAgc2tiX2FsbG9jX2ZhaWx1cmU7Ci0JdTY0ICBudWxsX3NrYjsKIAl1NjQgIG51bGxfcnhidWY7CiAJdTY0ICByeF9kbWFfbWFwX2Vycm9yOwogCXU2NCAgdHhfZG1hX21hcF9lcnJvcjsKQEAgLTU0Miw3ICs1NDQsMTcgQEAKICNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1JFQURfUEVYUV9QQVJBTUVURVJTCTB4MDAwMDAwMWMKICNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX0dFVF9MSUNfQ0FQQUJJTElUSUVTCTB4MDAwMDAwMWQKICNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1JFQURfTUFYX0xST19QRVJfQk9BUkQJMHgwMDAwMDAxZQotI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfTUFYCQkJMHgwMDAwMDAxZgorI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfTUFDX0FERFJFU1MJCTB4MDAwMDAwMWYKKworI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfR0VUX1BDSV9JTkZPCQkweDAwMDAwMDIwCisjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9HRVRfTklDX0lORk8JCTB4MDAwMDAwMjEKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1NFVF9OSUNfSU5GTwkJMHgwMDAwMDAyMgorI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfUkVTRVRfTlBBUgkJMHgwMDAwMDAyMworI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfR0VUX0VTV0lUQ0hfQ0FQQUJJTElUWQkweDAwMDAwMDI0CisjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9UT0dHTEVfRVNXSVRDSAkJMHgwMDAwMDAyNQorI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfR0VUX0VTV0lUQ0hfU1RBVFVTCTB4MDAwMDAwMjYKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1NFVF9QT1JUTUlSUk9SSU5HCTB4MDAwMDAwMjcKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX0NPTkZJR1VSRV9FU1dJVENICTB4MDAwMDAwMjgKIAogI2RlZmluZSBRTENOSUNfUkNPREVfU1VDQ0VTUwkJMAogI2RlZmluZSBRTENOSUNfUkNPREVfVElNRU9VVAkJMTcKQEAgLTU1NiwxMiArNTY4LDEyIEBACiAjZGVmaW5lIFFMQ05JQ19DQVAwX0xTTyAJCSgxIDw8IDYpCiAjZGVmaW5lIFFMQ05JQ19DQVAwX0pVTUJPX0NPTlRJR1VPVVMJKDEgPDwgNykKICNkZWZpbmUgUUxDTklDX0NBUDBfTFJPX0NPTlRJR1VPVVMJKDEgPDwgOCkKKyNkZWZpbmUgUUxDTklDX0NBUDBfVkFMSURPRkYJCSgxIDw8IDExKQogCiAvKgogICogQ29udGV4dCBzdGF0ZQogICovCi0jZGVmaW5lIFFMQ0hBTF9WRVJTSU9OCTEKLQorI2RlZmluZSBRTENOSUNfSE9TVF9DVFhfU1RBVEVfRlJFRUQJMAogI2RlZmluZSBRTENOSUNfSE9TVF9DVFhfU1RBVEVfQUNUSVZFCTIKIAogLyoKQEAgLTU5Miw5ICs2MDQsMTAgQEAKIAlfX2xlMzIgc2RzX3Jpbmdfb2Zmc2V0OwkvKiBPZmZzZXQgdG8gU0RTIGNvbmZpZyAqLwogCV9fbGUxNiBudW1fcmRzX3JpbmdzOwkvKiBDb3VudCBvZiBSRFMgcmluZ3MgKi8KIAlfX2xlMTYgbnVtX3Nkc19yaW5nczsJLyogQ291bnQgb2YgU0RTIHJpbmdzICovCi0JX19sZTE2IHJzdmQxOwkJLyogUGFkZGluZyAqLwotCV9fbGUxNiByc3ZkMjsJCS8qIFBhZGRpbmcgKi8KLQl1OCAgcmVzZXJ2ZWRbMTI4XTsgCS8qIHJlc2VydmUgc3BhY2UgZm9yIGZ1dHVyZSBleHBhbnNpb24qLworCV9fbGUxNiB2YWxpZF9maWVsZF9vZmZzZXQ7CisJdTggIHR4cnhfc2RzX2JpbmRpbmc7CisJdTggIG1zaXhfaGFuZGxlcjsKKwl1OCAgcmVzZXJ2ZWRbMTI4XTsgICAgICAvKiByZXNlcnZlIHNwYWNlIGZvciBmdXR1cmUgZXhwYW5zaW9uKi8KIAkvKiBNVVNUIEJFIDY0LWJpdCBhbGlnbmVkLgogCSAgIFRoZSBmb2xsb3dpbmcgaXMgcGFja2VkOgogCSAgIC0gTiBob3N0cnFfcmRzX3JpbmdzCkBAIC04MDgsOSArODIxLDEwIEBACiAjZGVmaW5lIFFMQ05JQ19MUk9fUkVRVUVTVF9DTEVBTlVQCTQKIAogLyogQ2FwYWJpbGl0ZXMgcmVjZWl2ZWQgKi8KLSNkZWZpbmUgUUxDTklDX0ZXX0NBUEFCSUxJVFlfQkRHCQkoMSA8PCA4KQotI2RlZmluZSBRTENOSUNfRldfQ0FQQUJJTElUWV9GVkxBTlRYCQkoMSA8PCA5KQotI2RlZmluZSBRTENOSUNfRldfQ0FQQUJJTElUWV9IV19MUk8JCSgxIDw8IDEwKQorI2RlZmluZSBRTENOSUNfRldfQ0FQQUJJTElUWV9UU08JCUJJVF8xCisjZGVmaW5lIFFMQ05JQ19GV19DQVBBQklMSVRZX0JERwkJQklUXzgKKyNkZWZpbmUgUUxDTklDX0ZXX0NBUEFCSUxJVFlfRlZMQU5UWAkJQklUXzkKKyNkZWZpbmUgUUxDTklDX0ZXX0NBUEFCSUxJVFlfSFdfTFJPCQlCSVRfMTAKIAogLyogbW9kdWxlIHR5cGVzICovCiAjZGVmaW5lIExJTktFVkVOVF9NT0RVTEVfTk9UX1BSRVNFTlQJCQkxCkBAIC04ODEsMTIgKzg5NSwxNCBAQAogI2RlZmluZSBRTENOSUNfTFJPX0VOQUJMRUQJCTB4MDgKICNkZWZpbmUgUUxDTklDX0JSSURHRV9FTkFCTEVEICAgICAgIAkwWDEwCiAjZGVmaW5lIFFMQ05JQ19ESUFHX0VOQUJMRUQJCTB4MjAKKyNkZWZpbmUgUUxDTklDX0VTV0lUQ0hfRU5BQkxFRAkJMHg0MAogI2RlZmluZSBRTENOSUNfSVNfTVNJX0ZBTUlMWShhZGFwdGVyKSBcCiAJKChhZGFwdGVyKS0+ZmxhZ3MgJiAoUUxDTklDX01TSV9FTkFCTEVEIHwgUUxDTklDX01TSVhfRU5BQkxFRCkpCiAKICNkZWZpbmUgTVNJWF9FTlRSSUVTX1BFUl9BREFQVEVSCU5VTV9TVFNfREVTQ19SSU5HUwogI2RlZmluZSBRTENOSUNfTVNJWF9UQkxfU1BBQ0UJCTgxOTIKICNkZWZpbmUgUUxDTklDX1BDSV9SRUdfTVNJWF9UQkwgCTB4NDQKKyNkZWZpbmUgUUxDTklDX01TSVhfVEJMX1BHU0laRQkJNDA5NgogCiAjZGVmaW5lIFFMQ05JQ19ORVRERVZfV0VJR0hUCTEyOAogI2RlZmluZSBRTENOSUNfQURBUFRFUl9VUF9NQUdJQyA3NzcKQEAgLTg5NSw2ICs5MTEsNyBAQAogI2RlZmluZSBfX1FMQ05JQ19ERVZfVVAgCQkxCiAjZGVmaW5lIF9fUUxDTklDX1JFU0VUVElORwkJMgogI2RlZmluZSBfX1FMQ05JQ19TVEFSVF9GVyAJCTQKKyNkZWZpbmUgX19RTENOSUNfQUVSCQkJNQogCiAjZGVmaW5lIFFMQ05JQ19JTlRFUlJVUFRfVEVTVAkJMQogI2RlZmluZSBRTENOSUNfTE9PUEJBQ0tfVEVTVAkJMgpAQCAtOTE5LDExICs5MzYsMTEgQEAKIAl1OCByeF9jc3VtOwogCXU4IHBvcnRudW07CiAJdTggcGh5c2ljYWxfcG9ydDsKKwl1OCByZXNldF9jb250ZXh0OwogCiAJdTggbWNfZW5hYmxlZDsKIAl1OCBtYXhfbWNfY291bnQ7CiAJdTggcnNzX3N1cHBvcnRlZDsKLQl1OCByc3J2ZDE7CiAJdTggZndfd2FpdF9jbnQ7CiAJdTggZndfZmFpbF9jbnQ7CiAJdTggdHhfdGltZW9fY250OwpAQCAtOTMyLDcgKzk0OSw2IEBACiAJdTggaGFzX2xpbmtfZXZlbnRzOwogCXU4IGZ3X3R5cGU7CiAJdTE2IHR4X2NvbnRleHRfaWQ7Ci0JdTE2IG10dTsKIAl1MTYgaXNfdXA7CiAKIAl1MTYgbGlua19zcGVlZDsKQEAgLTk0MCw2ICs5NTYsMTMgQEAKIAl1MTYgbGlua19hdXRvbmVnOwogCXUxNiBtb2R1bGVfdHlwZTsKIAorCXUxNiBvcF9tb2RlOworCXUxNiBzd2l0Y2hfbW9kZTsKKwl1MTYgbWF4X3R4X3F1ZXM7CisJdTE2IG1heF9yeF9xdWVzOworCXUxNiBtYXhfbXR1OworCisJdTMyIGZ3X2hhbF92ZXJzaW9uOwogCXUzMiBjYXBhYmlsaXRpZXM7CiAJdTMyIGZsYWdzOwogCXUzMiBpcnE7CkBAIC05NDgsMTggKzk3MSwyMiBAQAogCXUzMiBpbnRfdmVjX2JpdDsKIAl1MzIgaGVhcnRiaXQ7CiAKKwl1OCBtYXhfbWFjX2ZpbHRlcnM7CiAJdTggZGV2X3N0YXRlOwogCXU4IGRpYWdfdGVzdDsKIAl1OCBkaWFnX2NudDsKIAl1OCByZXNldF9hY2tfdGltZW87CiAJdTggZGV2X2luaXRfdGltZW87Ci0JdTggcnNyZDE7CiAJdTE2IG1zZ19lbmFibGU7CiAKIAl1OCBtYWNfYWRkcltFVEhfQUxFTl07CiAKIAl1NjQgZGV2X3JzdF90aW1lOwogCisJc3RydWN0IHFsY25pY19ucGFyX2luZm8gKm5wYXJzOworCXN0cnVjdCBxbGNuaWNfZXN3aXRjaCAqZXN3aXRjaDsKKwlzdHJ1Y3QgcWxjbmljX25pY190ZW1wbGF0ZSAqbmljX29wczsKKwogCXN0cnVjdCBxbGNuaWNfYWRhcHRlcl9zdGF0cyBzdGF0czsKIAogCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0IHJlY3ZfY3R4OwpAQCAtOTc0LDggKzEwMDEsNiBAQAogCiAJc3RydWN0IGRlbGF5ZWRfd29yayBmd193b3JrOwogCi0Jc3RydWN0IHdvcmtfc3RydWN0ICB0eF90aW1lb3V0X3Rhc2s7Ci0KIAlzdHJ1Y3QgcWxjbmljX25pY19pbnRyX2NvYWxlc2NlIGNvYWw7CiAKIAl1bnNpZ25lZCBsb25nIHN0YXRlOwpAQCAtOTg0LDYgKzEwMDksMTIzIEBACiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKIH07CiAKK3N0cnVjdCBxbGNuaWNfaW5mbyB7CisJX19sZTE2CXBjaV9mdW5jOworCV9fbGUxNglvcF9tb2RlOyAvKiAxID0gUHJpdiwgMiA9IE5QLCAzID0gTlAgcGFzc3RocnUgKi8KKwlfX2xlMTYJcGh5c19wb3J0OworCV9fbGUxNglzd2l0Y2hfbW9kZTsgLyogMCA9IGRpc2FibGVkLCAxID0gaW50LCAyID0gZXh0ICovCisKKwlfX2xlMzIJY2FwYWJpbGl0aWVzOworCXU4CW1heF9tYWNfZmlsdGVyczsKKwl1OAlyZXNlcnZlZDE7CisJX19sZTE2CW1heF9tdHU7CisKKwlfX2xlMTYJbWF4X3R4X3F1ZXM7CisJX19sZTE2CW1heF9yeF9xdWVzOworCV9fbGUxNgltaW5fdHhfYnc7CisJX19sZTE2CW1heF90eF9idzsKKwl1OAlyZXNlcnZlZDJbMTA0XTsKK307CisKK3N0cnVjdCBxbGNuaWNfcGNpX2luZm8geworCV9fbGUxNglpZDsgLyogcGNpIGZ1bmN0aW9uIGlkICovCisJX19sZTE2CWFjdGl2ZTsgLyogMSA9IEVuYWJsZWQgKi8KKwlfX2xlMTYJdHlwZTsgLyogMSA9IE5JQywgMiA9IEZDb0UsIDMgPSBpU0NTSSAqLworCV9fbGUxNglkZWZhdWx0X3BvcnQ7IC8qIGRlZmF1bHQgcG9ydCBudW1iZXIgKi8KKworCV9fbGUxNgl0eF9taW5fYnc7IC8qIE11bHRpcGxlIG9mIDEwMG1icGMgKi8KKwlfX2xlMTYJdHhfbWF4X2J3OworCV9fbGUxNglyZXNlcnZlZDFbMl07CisKKwl1OAltYWNbRVRIX0FMRU5dOworCXU4CXJlc2VydmVkMlsxMDZdOworfTsKKworc3RydWN0IHFsY25pY19ucGFyX2luZm8geworCXUxNgl2bGFuX2lkOworCXUxNgltaW5fYnc7CisJdTE2CW1heF9idzsKKwl1OAlwaHlfcG9ydDsKKwl1OAl0eXBlOworCXU4CWFjdGl2ZTsKKwl1OAllbmFibGVfcG07CisJdTgJZGVzdF9ucGFyOworCXU4CWhvc3Rfdmxhbl90YWc7CisJdTgJcHJvbWlzY19tb2RlOworCXU4CWRpc2NhcmRfdGFnZ2VkOworCXU4CW1hY19sZWFybmluZzsKK307CitzdHJ1Y3QgcWxjbmljX2Vzd2l0Y2ggeworCXU4CXBvcnQ7CisJdTgJYWN0aXZlX3Zwb3J0czsKKwl1OAlhY3RpdmVfdmxhbnM7CisJdTgJYWN0aXZlX3VjYXN0X2ZpbHRlcnM7CisJdTgJbWF4X3VjYXN0X2ZpbHRlcnM7CisJdTgJbWF4X2FjdGl2ZV92bGFuczsKKworCXUzMglmbGFnczsKKyNkZWZpbmUgUUxDTklDX1NXSVRDSF9FTkFCTEUJCUJJVF8xCisjZGVmaW5lIFFMQ05JQ19TV0lUQ0hfVkxBTl9GSUxURVJJTkcJQklUXzIKKyNkZWZpbmUgUUxDTklDX1NXSVRDSF9QUk9NSVNDX01PREUJQklUXzMKKyNkZWZpbmUgUUxDTklDX1NXSVRDSF9QT1JUX01JUlJPUklORwlCSVRfNAorfTsKKworCisvKiBSZXR1cm4gY29kZXMgZm9yIEVycm9yIGhhbmRsaW5nICovCisjZGVmaW5lIFFMX1NUQVRVU19JTlZBTElEX1BBUkFNCS0xCisKKyNkZWZpbmUgTUFYX0JXCQkJMTAwCisjZGVmaW5lIE1JTl9CVwkJCTEKKyNkZWZpbmUgTUFYX1ZMQU5fSUQJCTQwOTUKKyNkZWZpbmUgTUlOX1ZMQU5fSUQJCTIKKyNkZWZpbmUgTUFYX1RYX1FVRVVFUwkJMQorI2RlZmluZSBNQVhfUlhfUVVFVUVTCQk0CisjZGVmaW5lIERFRkFVTFRfTUFDX0xFQVJOCTEKKworI2RlZmluZSBJU19WQUxJRF9WTEFOKHZsYW4pCSh2bGFuID49IE1JTl9WTEFOX0lEICYmIHZsYW4gPD0gTUFYX1ZMQU5fSUQpCisjZGVmaW5lIElTX1ZBTElEX0JXKGJ3KQkJKGJ3ID49IE1JTl9CVyAmJiBidyA8PSBNQVhfQlcpCisjZGVmaW5lIElTX1ZBTElEX1RYX1FVRVVFUyhxdWUpCShxdWUgPiAwICYmIHF1ZSA8PSBNQVhfVFhfUVVFVUVTKQorI2RlZmluZSBJU19WQUxJRF9SWF9RVUVVRVMocXVlKQkocXVlID4gMCAmJiBxdWUgPD0gTUFYX1JYX1FVRVVFUykKKyNkZWZpbmUgSVNfVkFMSURfTU9ERShtb2RlKQkobW9kZSA9PSAwIHx8IG1vZGUgPT0gMSkKKworc3RydWN0IHFsY25pY19wY2lfZnVuY19jZmcgeworCXUxNglmdW5jX3R5cGU7CisJdTE2CW1pbl9idzsKKwl1MTYJbWF4X2J3OworCXUxNglwb3J0X251bTsKKwl1OAlwY2lfZnVuYzsKKwl1OAlmdW5jX3N0YXRlOworCXU4CWRlZl9tYWNfYWRkcls2XTsKK307CisKK3N0cnVjdCBxbGNuaWNfbnBhcl9mdW5jX2NmZyB7CisJdTMyCWZ3X2NhcGFiOworCXUxNglwb3J0X251bTsKKwl1MTYJbWluX2J3OworCXUxNgltYXhfYnc7CisJdTE2CW1heF90eF9xdWV1ZXM7CisJdTE2CW1heF9yeF9xdWV1ZXM7CisJdTgJcGNpX2Z1bmM7CisJdTgJb3BfbW9kZTsKK307CisKK3N0cnVjdCBxbGNuaWNfcG1fZnVuY19jZmcgeworCXU4CXBjaV9mdW5jOworCXU4CWFjdGlvbjsKKwl1OAlkZXN0X25wYXI7CisJdTgJcmVzZXJ2ZWRbNV07Cit9OworCitzdHJ1Y3QgcWxjbmljX2Vzd19mdW5jX2NmZyB7CisJdTE2CXZsYW5faWQ7CisJdTgJcGNpX2Z1bmM7CisJdTgJaG9zdF92bGFuX3RhZzsKKwl1OAlwcm9taXNjX21vZGU7CisJdTgJZGlzY2FyZF90YWdnZWQ7CisJdTgJbWFjX2xlYXJuaW5nOworCXU4CXJlc2VydmVkOworfTsKKwogaW50IHFsY25pY19md19jbWRfcXVlcnlfcGh5KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTMyIHJlZywgdTMyICp2YWwpOwogaW50IHFsY25pY19md19jbWRfc2V0X3BoeShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiByZWcsIHUzMiB2YWwpOwogCkBAIC0xMDMxLDEzICsxMTczLDEzIEBACiBpbnQgcWxjbmljX2NvbmZpZ19sZWQoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1MzIgc3RhdGUsIHUzMiByYXRlKTsKIAogLyogRnVuY3Rpb25zIGZyb20gcWxjbmljX2luaXQuYyAqLwotaW50IHFsY25pY19waGFudG9tX2luaXQoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKTsKIGludCBxbGNuaWNfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOwogaW50IHFsY25pY19uZWVkX2Z3X3Jlc2V0KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIHFsY25pY19yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIHFsY25pY19yZWxlYXNlX2Zpcm13YXJlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CiBpbnQgcWxjbmljX3Bpbml0X2Zyb21fcm9tKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CiBpbnQgcWxjbmljX3NldHVwX2lkY19wYXJhbShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IHFsY25pY19jaGVja19mbGFzaF9md192ZXIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKTsKIAogaW50IHFsY25pY19yb21fZmFzdF9yZWFkKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHIsIGludCAqdmFscCk7CiBpbnQgcWxjbmljX3JvbV9mYXN0X3JlYWRfd29yZHMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwKQEAgLTEwNTAsNiArMTE5MiwxMCBAQAogaW50IHFsY25pY19hbGxvY19od19yZXNvdXJjZXMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgcWxjbmljX2ZyZWVfaHdfcmVzb3VyY2VzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CiAKK2ludCBxbGNuaWNfZndfY3JlYXRlX2N0eChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBxbGNuaWNfZndfZGVzdHJveV9jdHgoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKTsKKwordm9pZCBxbGNuaWNfcmVzZXRfcnhfYnVmZmVyc19saXN0KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIHFsY25pY19yZWxlYXNlX3J4X2J1ZmZlcnMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgcWxjbmljX3JlbGVhc2VfdHhfYnVmZmVycyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOwogCkBAIC0xMDcwLDEzICsxMjE2LDE0IEBACiBpbnQgcWxjbmljX2Z3X2NtZF9zZXRfbXR1KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgaW50IG10dSk7CiBpbnQgcWxjbmljX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpOwogaW50IHFsY25pY19jb25maWdfaHdfbHJvKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgaW50IGVuYWJsZSk7Ci1pbnQgcWxjbmljX2NvbmZpZ19icmlkZ2VkX21vZGUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBpbnQgZW5hYmxlKTsKK2ludCBxbGNuaWNfY29uZmlnX2JyaWRnZWRfbW9kZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBlbmFibGUpOwogaW50IHFsY25pY19zZW5kX2xyb19jbGVhbnVwKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIHFsY25pY191cGRhdGVfY21kX3Byb2R1Y2VyKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKIAkJc3RydWN0IHFsY25pY19ob3N0X3R4X3JpbmcgKnR4X3JpbmcpOwotaW50IHFsY25pY19nZXRfbWFjX2FkZHIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1NjQgKm1hYyk7CitpbnQgcWxjbmljX2dldF9tYWNfYWRkcihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICptYWMpOwogdm9pZCBxbGNuaWNfY2xlYXJfaWxiX21vZGUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKTsKIGludCBxbGNuaWNfc2V0X2lsYl9tb2RlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIHFsY25pY19mZXRjaF9tYWMoc3RydWN0IHFsY25pY19hZGFwdGVyICosIHUzMiwgdTMyLCB1OCwgdTggKik7CiAKIC8qIEZ1bmN0aW9ucyBmcm9tIHFsY25pY19tYWluLmMgKi8KIGludCBxbGNuaWNfcmVzZXRfY29udGV4dChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKik7CkBAIC0xMDg4LDYgKzEyMzUsMjUgQEAKIG5ldGRldl90eF90IHFsY25pY194bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogdm9pZCBxbGNuaWNfcHJvY2Vzc19yY3ZfcmluZ19kaWFnKHN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcpOwogCisvKiBNYW5hZ2VtZW50IGZ1bmN0aW9ucyAqLworaW50IHFsY25pY19zZXRfbWFjX2FkZHJlc3Moc3RydWN0IHFsY25pY19hZGFwdGVyICosIHU4Kik7CitpbnQgcWxjbmljX2dldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKiwgdTgqKTsKK2ludCBxbGNuaWNfZ2V0X25pY19pbmZvKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqLCBzdHJ1Y3QgcWxjbmljX2luZm8gKiwgdTgpOworaW50IHFsY25pY19zZXRfbmljX2luZm8oc3RydWN0IHFsY25pY19hZGFwdGVyICosIHN0cnVjdCBxbGNuaWNfaW5mbyAqKTsKK2ludCBxbGNuaWNfZ2V0X3BjaV9pbmZvKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqLCBzdHJ1Y3QgcWxjbmljX3BjaV9pbmZvKik7CitpbnQgcWxjbmljX3Jlc2V0X3BhcnRpdGlvbihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKiwgdTgpOworCisvKiAgZVN3aXRjaCBtYW5hZ2VtZW50IGZ1bmN0aW9ucyAqLworaW50IHFsY25pY19nZXRfZXN3aXRjaF9jYXBhYmlsaXRpZXMoc3RydWN0IHFsY25pY19hZGFwdGVyICosIHU4LAorCQkJCXN0cnVjdCBxbGNuaWNfZXN3aXRjaCAqKTsKK2ludCBxbGNuaWNfZ2V0X2Vzd2l0Y2hfc3RhdHVzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqLCB1OCwKKwkJCQlzdHJ1Y3QgcWxjbmljX2Vzd2l0Y2ggKik7CitpbnQgcWxjbmljX3RvZ2dsZV9lc3dpdGNoKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqLCB1OCwgdTgpOworaW50IHFsY25pY19jb25maWdfc3dpdGNoX3BvcnQoc3RydWN0IHFsY25pY19hZGFwdGVyICosIHU4LCBpbnQsIHU4LCB1OCwKKwkJCXU4LCB1OCwgdTE2KTsKK2ludCBxbGNuaWNfY29uZmlnX3BvcnRfbWlycm9yaW5nKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqLCB1OCwgdTgsIHU4KTsKK2V4dGVybiBpbnQgcWxjbmljX2NvbmZpZ190c287CisKIC8qCiAgKiBRTE9HSUMgQm9hcmQgaW5mb3JtYXRpb24KICAqLwpAQCAtMTEzMSw2ICsxMjk3LDEzIEBACiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcWxjbmljX2V0aHRvb2xfb3BzOwogCitzdHJ1Y3QgcWxjbmljX25pY190ZW1wbGF0ZSB7CisJaW50ICgqZ2V0X21hY19hZGRyKSAoc3RydWN0IHFsY25pY19hZGFwdGVyICosIHU4Kik7CisJaW50ICgqY29uZmlnX2JyaWRnZWRfbW9kZSkgKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqLCB1MzIpOworCWludCAoKmNvbmZpZ19sZWQpIChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKiwgdTMyLCB1MzIpOworCWludCAoKnN0YXJ0X2Zpcm13YXJlKSAoc3RydWN0IHFsY25pY19hZGFwdGVyICopOworfTsKKwogI2RlZmluZSBRTENEQihhZGFwdGVyLCBsdmwsIF9mbXQsIF9hcmdzLi4uKSBkbyB7CVwKIAlpZiAoTkVUSUZfTVNHXyMjbHZsICYgYWRhcHRlci0+bXNnX2VuYWJsZSkJXAogCQlwcmludGsoS0VSTl9JTkZPICIlczogJXM6ICIgX2ZtdCwJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19jdHguYyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfY3R4LmMKaW5kZXggYzJjMWY1Yy4uY2M1ZDg2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19jdHguYworKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2N0eC5jCkBAIC04OCwxMiArODgsMTIgQEAKIAogCWlmIChyZWN2X2N0eC0+c3RhdGUgPT0gUUxDTklDX0hPU1RfQ1RYX1NUQVRFX0FDVElWRSkgewogCQlpZiAocWxjbmljX2lzc3VlX2NtZChhZGFwdGVyLAotCQkJCWFkYXB0ZXItPmFody5wY2lfZnVuYywKLQkJCQlRTENIQUxfVkVSU0lPTiwKLQkJCQlyZWN2X2N0eC0+Y29udGV4dF9pZCwKLQkJCQltdHUsCi0JCQkJMCwKLQkJCQlRTENOSUNfQ0RSUF9DTURfU0VUX01UVSkpIHsKKwkJCWFkYXB0ZXItPmFody5wY2lfZnVuYywKKwkJCWFkYXB0ZXItPmZ3X2hhbF92ZXJzaW9uLAorCQkJcmVjdl9jdHgtPmNvbnRleHRfaWQsCisJCQltdHUsCisJCQkwLAorCQkJUUxDTklDX0NEUlBfQ01EX1NFVF9NVFUpKSB7CiAKIAkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIkZhaWxlZCB0byBzZXQgbXR1XG4iKTsKIAkJCXJldHVybiAtRUlPOwpAQCAtMTIxLDcgKzEyMSw3IEBACiAKIAlpbnQgaSwgbnJkc19yaW5ncywgbnNkc19yaW5nczsKIAlzaXplX3QgcnFfc2l6ZSwgcnNwX3NpemU7Ci0JdTMyIGNhcCwgcmVnLCB2YWw7CisJdTMyIGNhcCwgcmVnLCB2YWwsIHJlZzI7CiAJaW50IGVycjsKIAogCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKQEAgLTE1Miw5ICsxNTIsMTQgQEAKIAogCXBycS0+aG9zdF9yc3BfZG1hX2FkZHIgPSBjcHVfdG9fbGU2NChjYXJkcnNwX3BoeXNfYWRkcik7CiAKLQljYXAgPSAoUUxDTklDX0NBUDBfTEVHQUNZX0NPTlRFWFQgfCBRTENOSUNfQ0FQMF9MRUdBQ1lfTU4pOworCWNhcCA9IChRTENOSUNfQ0FQMF9MRUdBQ1lfQ09OVEVYVCB8IFFMQ05JQ19DQVAwX0xFR0FDWV9NTgorCQkJCQkJfCBRTENOSUNfQ0FQMF9WQUxJRE9GRik7CiAJY2FwIHw9IChRTENOSUNfQ0FQMF9KVU1CT19DT05USUdVT1VTIHwgUUxDTklDX0NBUDBfTFJPX0NPTlRJR1VPVVMpOwogCisJcHJxLT52YWxpZF9maWVsZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcWxjbmljX2hvc3RycV9yeF9jdHgsCisJCQkJCQkJIG1zaXhfaGFuZGxlcik7CisJcHJxLT50eHJ4X3Nkc19iaW5kaW5nID0gbnNkc19yaW5ncyAtIDE7CisKIAlwcnEtPmNhcGFiaWxpdGllc1swXSA9IGNwdV90b19sZTMyKGNhcCk7CiAJcHJxLT5ob3N0X2ludF9jcmJfbW9kZSA9CiAJCWNwdV90b19sZTMyKFFMQ05JQ19IT1NUX0lOVF9DUkJfTU9ERV9TSEFSRUQpOwpAQCAtMTc1LDYgKzE4MCw3IEBACiAJZm9yIChpID0gMDsgaSA8IG5yZHNfcmluZ3M7IGkrKykgewogCiAJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbaV07CisJCXJkc19yaW5nLT5wcm9kdWNlciA9IDA7CiAKIAkJcHJxX3Jkc1tpXS5ob3N0X3BoeXNfYWRkciA9IGNwdV90b19sZTY0KHJkc19yaW5nLT5waHlzX2FkZHIpOwogCQlwcnFfcmRzW2ldLnJpbmdfc2l6ZSA9IGNwdV90b19sZTMyKHJkc19yaW5nLT5udW1fZGVzYyk7CkBAIC0xODgsNiArMTk0LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnNkc19yaW5nczsgaSsrKSB7CiAKIAkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tpXTsKKwkJc2RzX3JpbmctPmNvbnN1bWVyID0gMDsKKwkJbWVtc2V0KHNkc19yaW5nLT5kZXNjX2hlYWQsIDAsIFNUQVRVU19ERVNDX1JJTkdTSVpFKHNkc19yaW5nKSk7CiAKIAkJcHJxX3Nkc1tpXS5ob3N0X3BoeXNfYWRkciA9IGNwdV90b19sZTY0KHNkc19yaW5nLT5waHlzX2FkZHIpOwogCQlwcnFfc2RzW2ldLnJpbmdfc2l6ZSA9IGNwdV90b19sZTMyKHNkc19yaW5nLT5udW1fZGVzYyk7CkBAIC0xOTcsNyArMjA1LDcgQEAKIAlwaHlzX2FkZHIgPSBob3N0cnFfcGh5c19hZGRyOwogCWVyciA9IHFsY25pY19pc3N1ZV9jbWQoYWRhcHRlciwKIAkJCWFkYXB0ZXItPmFody5wY2lfZnVuYywKLQkJCVFMQ0hBTF9WRVJTSU9OLAorCQkJYWRhcHRlci0+ZndfaGFsX3ZlcnNpb24sCiAJCQkodTMyKShwaHlzX2FkZHIgPj4gMzIpLAogCQkJKHUzMikocGh5c19hZGRyICYgMHhmZmZmZmZmZiksCiAJCQlycV9zaXplLApAQCAtMjE2LDggKzIyNCw3IEBACiAJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbaV07CiAKIAkJcmVnID0gbGUzMl90b19jcHUocHJzcF9yZHNbaV0uaG9zdF9wcm9kdWNlcl9jcmIpOwotCQlyZHNfcmluZy0+Y3JiX3Jjdl9wcm9kdWNlciA9IHFsY25pY19nZXRfaW9hZGRyKGFkYXB0ZXIsCi0JCQkJUUxDTklDX1JFRyhyZWcgLSAweDIwMCkpOworCQlyZHNfcmluZy0+Y3JiX3Jjdl9wcm9kdWNlciA9IGFkYXB0ZXItPmFody5wY2lfYmFzZTAgKyByZWc7CiAJfQogCiAJcHJzcF9zZHMgPSAoKHN0cnVjdCBxbGNuaWNfY2FyZHJzcF9zZHNfcmluZyAqKQpAQCAtMjI3LDEyICsyMzQsMTAgQEAKIAkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tpXTsKIAogCQlyZWcgPSBsZTMyX3RvX2NwdShwcnNwX3Nkc1tpXS5ob3N0X2NvbnN1bWVyX2NyYik7Ci0JCXNkc19yaW5nLT5jcmJfc3RzX2NvbnN1bWVyID0gcWxjbmljX2dldF9pb2FkZHIoYWRhcHRlciwKLQkJCQlRTENOSUNfUkVHKHJlZyAtIDB4MjAwKSk7CisJCXJlZzIgPSBsZTMyX3RvX2NwdShwcnNwX3Nkc1tpXS5pbnRlcnJ1cHRfY3JiKTsKIAotCQlyZWcgPSBsZTMyX3RvX2NwdShwcnNwX3Nkc1tpXS5pbnRlcnJ1cHRfY3JiKTsKLQkJc2RzX3JpbmctPmNyYl9pbnRyX21hc2sgPSBxbGNuaWNfZ2V0X2lvYWRkcihhZGFwdGVyLAotCQkJCVFMQ05JQ19SRUcocmVnIC0gMHgyMDApKTsKKwkJc2RzX3JpbmctPmNyYl9zdHNfY29uc3VtZXIgPSBhZGFwdGVyLT5haHcucGNpX2Jhc2UwICsgcmVnOworCQlzZHNfcmluZy0+Y3JiX2ludHJfbWFzayA9IGFkYXB0ZXItPmFody5wY2lfYmFzZTAgKyByZWcyOwogCX0KIAogCXJlY3ZfY3R4LT5zdGF0ZSA9IGxlMzJfdG9fY3B1KHByc3AtPmhvc3RfY3R4X3N0YXRlKTsKQEAgLTI1Myw3ICsyNTgsNyBAQAogCiAJaWYgKHFsY25pY19pc3N1ZV9jbWQoYWRhcHRlciwKIAkJCWFkYXB0ZXItPmFody5wY2lfZnVuYywKLQkJCVFMQ0hBTF9WRVJTSU9OLAorCQkJYWRhcHRlci0+ZndfaGFsX3ZlcnNpb24sCiAJCQlyZWN2X2N0eC0+Y29udGV4dF9pZCwKIAkJCVFMQ05JQ19ERVNUUk9ZX0NUWF9SRVNFVCwKIAkJCTAsCkBAIC0yNjIsNiArMjY3LDggQEAKIAkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAogCQkJIkZhaWxlZCB0byBkZXN0cm95IHJ4IGN0eCBpbiBmaXJtd2FyZVxuIik7CiAJfQorCisJcmVjdl9jdHgtPnN0YXRlID0gUUxDTklDX0hPU1RfQ1RYX1NUQVRFX0ZSRUVEOwogfQogCiBzdGF0aWMgaW50CkBAIC0yNzgsNiArMjg1LDExIEBACiAJZG1hX2FkZHJfdAlycV9waHlzX2FkZHIsIHJzcF9waHlzX2FkZHI7CiAJc3RydWN0IHFsY25pY19ob3N0X3R4X3JpbmcgKnR4X3JpbmcgPSBhZGFwdGVyLT50eF9yaW5nOwogCisJLyogcmVzZXQgaG9zdCByZXNvdXJjZXMgKi8KKwl0eF9yaW5nLT5wcm9kdWNlciA9IDA7CisJdHhfcmluZy0+c3dfY29uc3VtZXIgPSAwOworCSoodHhfcmluZy0+aHdfY29uc3VtZXIpID0gMDsKKwogCXJxX3NpemUgPSBTSVpFT0ZfSE9TVFJRX1RYKHN0cnVjdCBxbGNuaWNfaG9zdHJxX3R4X2N0eCk7CiAJcnFfYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCiAJCXJxX3NpemUsICZycV9waHlzX2FkZHIpOwpAQCAtMzE5LDcgKzMzMSw3IEBACiAJcGh5c19hZGRyID0gcnFfcGh5c19hZGRyOwogCWVyciA9IHFsY25pY19pc3N1ZV9jbWQoYWRhcHRlciwKIAkJCWFkYXB0ZXItPmFody5wY2lfZnVuYywKLQkJCVFMQ0hBTF9WRVJTSU9OLAorCQkJYWRhcHRlci0+ZndfaGFsX3ZlcnNpb24sCiAJCQkodTMyKShwaHlzX2FkZHIgPj4gMzIpLAogCQkJKCh1MzIpcGh5c19hZGRyICYgMHhmZmZmZmZmZiksCiAJCQlycV9zaXplLApAQCAtMzI3LDggKzMzOSw3IEBACiAKIAlpZiAoZXJyID09IFFMQ05JQ19SQ09ERV9TVUNDRVNTKSB7CiAJCXRlbXAgPSBsZTMyX3RvX2NwdShwcnNwLT5jZHNfcmluZy5ob3N0X3Byb2R1Y2VyX2NyYik7Ci0JCXR4X3JpbmctPmNyYl9jbWRfcHJvZHVjZXIgPSBxbGNuaWNfZ2V0X2lvYWRkcihhZGFwdGVyLAotCQkJCVFMQ05JQ19SRUcodGVtcCAtIDB4MjAwKSk7CisJCXR4X3JpbmctPmNyYl9jbWRfcHJvZHVjZXIgPSBhZGFwdGVyLT5haHcucGNpX2Jhc2UwICsgdGVtcDsKIAogCQlhZGFwdGVyLT50eF9jb250ZXh0X2lkID0KIAkJCWxlMTZfdG9fY3B1KHByc3AtPmNvbnRleHRfaWQpOwpAQCAtMzUxLDcgKzM2Miw3IEBACiB7CiAJaWYgKHFsY25pY19pc3N1ZV9jbWQoYWRhcHRlciwKIAkJCWFkYXB0ZXItPmFody5wY2lfZnVuYywKLQkJCVFMQ0hBTF9WRVJTSU9OLAorCQkJYWRhcHRlci0+ZndfaGFsX3ZlcnNpb24sCiAJCQlhZGFwdGVyLT50eF9jb250ZXh0X2lkLAogCQkJUUxDTklDX0RFU1RST1lfQ1RYX1JFU0VULAogCQkJMCwKQEAgLTM2OCw3ICszNzksNyBAQAogCiAJaWYgKHFsY25pY19pc3N1ZV9jbWQoYWRhcHRlciwKIAkJCWFkYXB0ZXItPmFody5wY2lfZnVuYywKLQkJCVFMQ0hBTF9WRVJTSU9OLAorCQkJYWRhcHRlci0+ZndfaGFsX3ZlcnNpb24sCiAJCQlyZWcsCiAJCQkwLAogCQkJMCwKQEAgLTM4NSw3ICszOTYsNyBAQAogewogCXJldHVybiBxbGNuaWNfaXNzdWVfY21kKGFkYXB0ZXIsCiAJCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCi0JCQlRTENIQUxfVkVSU0lPTiwKKwkJCWFkYXB0ZXItPmZ3X2hhbF92ZXJzaW9uLAogCQkJcmVnLAogCQkJdmFsLAogCQkJMCwKQEAgLTQ1NywxNSArNDY4LDYgQEAKIAkJc2RzX3JpbmctPmRlc2NfaGVhZCA9IChzdHJ1Y3Qgc3RhdHVzX2Rlc2MgKilhZGRyOwogCX0KIAotCi0JZXJyID0gcWxjbmljX2Z3X2NtZF9jcmVhdGVfcnhfY3R4KGFkYXB0ZXIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9mcmVlOwotCWVyciA9IHFsY25pY19md19jbWRfY3JlYXRlX3R4X2N0eChhZGFwdGVyKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZnJlZTsKLQotCXNldF9iaXQoX19RTENOSUNfRldfQVRUQUNIRUQsICZhZGFwdGVyLT5zdGF0ZSk7CiAJcmV0dXJuIDA7CiAKIGVycl9vdXRfZnJlZToKQEAgLTQ3Myw2ICs0NzUsMzYgQEAKIAlyZXR1cm4gZXJyOwogfQogCisKK2ludCBxbGNuaWNfZndfY3JlYXRlX2N0eChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGVycjsKKworCWVyciA9IHFsY25pY19md19jbWRfY3JlYXRlX3J4X2N0eChhZGFwdGVyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gcWxjbmljX2Z3X2NtZF9jcmVhdGVfdHhfY3R4KGFkYXB0ZXIpOworCWlmIChlcnIpIHsKKwkJcWxjbmljX2Z3X2NtZF9kZXN0cm95X3J4X2N0eChhZGFwdGVyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlzZXRfYml0KF9fUUxDTklDX0ZXX0FUVEFDSEVELCAmYWRhcHRlci0+c3RhdGUpOworCXJldHVybiAwOworfQorCit2b2lkIHFsY25pY19md19kZXN0cm95X2N0eChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChfX1FMQ05JQ19GV19BVFRBQ0hFRCwgJmFkYXB0ZXItPnN0YXRlKSkgeworCQlxbGNuaWNfZndfY21kX2Rlc3Ryb3lfcnhfY3R4KGFkYXB0ZXIpOworCQlxbGNuaWNfZndfY21kX2Rlc3Ryb3lfdHhfY3R4KGFkYXB0ZXIpOworCisJCS8qIEFsbG93IGRtYSBxdWV1ZXMgdG8gZHJhaW4gYWZ0ZXIgY29udGV4dCByZXNldCAqLworCQltc2xlZXAoMjApOworCX0KK30KKwogdm9pZCBxbGNuaWNfZnJlZV9od19yZXNvdXJjZXMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eDsKQEAgLTQ4MSwxNSArNTEzLDYgQEAKIAlzdHJ1Y3QgcWxjbmljX2hvc3RfdHhfcmluZyAqdHhfcmluZzsKIAlpbnQgcmluZzsKIAotCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChfX1FMQ05JQ19GV19BVFRBQ0hFRCwgJmFkYXB0ZXItPnN0YXRlKSkgewotCQlxbGNuaWNfZndfY21kX2Rlc3Ryb3lfcnhfY3R4KGFkYXB0ZXIpOwotCQlxbGNuaWNfZndfY21kX2Rlc3Ryb3lfdHhfY3R4KGFkYXB0ZXIpOwotCi0JCS8qIEFsbG93IGRtYSBxdWV1ZXMgdG8gZHJhaW4gYWZ0ZXIgY29udGV4dCByZXNldCAqLwotCQltc2xlZXAoMjApOwotCX0KLQogCXJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OwogCiAJdHhfcmluZyA9IGFkYXB0ZXItPnR4X3Jpbmc7CkBAIC01MzMsMyArNTU2LDQzMCBAQAogCX0KIH0KIAorLyogU2V0IE1BQyBhZGRyZXNzIG9mIGEgTklDIHBhcnRpdGlvbiAqLworaW50IHFsY25pY19zZXRfbWFjX2FkZHJlc3Moc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1OCogbWFjKQoreworCWludCBlcnIgPSAwOworCXUzMiBhcmcxLCBhcmcyLCBhcmczOworCisJYXJnMSA9IGFkYXB0ZXItPmFody5wY2lfZnVuYyB8IEJJVF85OworCWFyZzIgPSBtYWNbMF0gfCAobWFjWzFdIDw8IDgpIHwgKG1hY1syXSA8PCAxNikgfCAobWFjWzNdIDw8IDI0KTsKKwlhcmczID0gbWFjWzRdIHwgKG1hY1s1XSA8PCAxNik7CisKKwllcnIgPSBxbGNuaWNfaXNzdWVfY21kKGFkYXB0ZXIsCisJCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCisJCQlhZGFwdGVyLT5md19oYWxfdmVyc2lvbiwKKwkJCWFyZzEsCisJCQlhcmcyLAorCQkJYXJnMywKKwkJCVFMQ05JQ19DRFJQX0NNRF9NQUNfQUREUkVTUyk7CisKKwlpZiAoZXJyICE9IFFMQ05JQ19SQ09ERV9TVUNDRVNTKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJGYWlsZWQgdG8gc2V0IG1hYyBhZGRyZXNzJWRcbiIsIGVycik7CisJCWVyciA9IC1FSU87CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyogR2V0IE1BQyBhZGRyZXNzIG9mIGEgTklDIHBhcnRpdGlvbiAqLworaW50IHFsY25pY19nZXRfbWFjX2FkZHJlc3Moc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1OCAqbWFjKQoreworCWludCBlcnI7CisJdTMyIGFyZzE7CisKKwlhcmcxID0gYWRhcHRlci0+YWh3LnBjaV9mdW5jIHwgQklUXzg7CisJZXJyID0gcWxjbmljX2lzc3VlX2NtZChhZGFwdGVyLAorCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jLAorCQkJYWRhcHRlci0+ZndfaGFsX3ZlcnNpb24sCisJCQlhcmcxLAorCQkJMCwKKwkJCTAsCisJCQlRTENOSUNfQ0RSUF9DTURfTUFDX0FERFJFU1MpOworCisJaWYgKGVyciA9PSBRTENOSUNfUkNPREVfU1VDQ0VTUykKKwkJcWxjbmljX2ZldGNoX21hYyhhZGFwdGVyLCBRTENOSUNfQVJHMV9DUkJfT0ZGU0VULAorCQkJCVFMQ05JQ19BUkcyX0NSQl9PRkZTRVQsIDAsIG1hYyk7CisJZWxzZSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJGYWlsZWQgdG8gZ2V0IG1hYyBhZGRyZXNzJWRcbiIsIGVycik7CisJCWVyciA9IC1FSU87CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyogR2V0IGluZm8gb2YgYSBOSUMgcGFydGl0aW9uICovCitpbnQgcWxjbmljX2dldF9uaWNfaW5mbyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJc3RydWN0IHFsY25pY19pbmZvICpucGFyX2luZm8sIHU4IGZ1bmNfaWQpCit7CisJaW50CWVycjsKKwlkbWFfYWRkcl90IG5pY19kbWFfdDsKKwlzdHJ1Y3QgcWxjbmljX2luZm8gKm5pY19pbmZvOworCXZvaWQgKm5pY19pbmZvX2FkZHI7CisJc2l6ZV90CW5pY19zaXplID0gc2l6ZW9mKHN0cnVjdCBxbGNuaWNfaW5mbyk7CisKKwluaWNfaW5mb19hZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJbmljX3NpemUsICZuaWNfZG1hX3QpOworCWlmICghbmljX2luZm9fYWRkcikKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KG5pY19pbmZvX2FkZHIsIDAsIG5pY19zaXplKTsKKworCW5pY19pbmZvID0gKHN0cnVjdCBxbGNuaWNfaW5mbyAqKSBuaWNfaW5mb19hZGRyOworCWVyciA9IHFsY25pY19pc3N1ZV9jbWQoYWRhcHRlciwKKwkJCWFkYXB0ZXItPmFody5wY2lfZnVuYywKKwkJCWFkYXB0ZXItPmZ3X2hhbF92ZXJzaW9uLAorCQkJTVNEKG5pY19kbWFfdCksCisJCQlMU0QobmljX2RtYV90KSwKKwkJCShmdW5jX2lkIDw8IDE2IHwgbmljX3NpemUpLAorCQkJUUxDTklDX0NEUlBfQ01EX0dFVF9OSUNfSU5GTyk7CisKKwlpZiAoZXJyID09IFFMQ05JQ19SQ09ERV9TVUNDRVNTKSB7CisJCW5wYXJfaW5mby0+cGNpX2Z1bmMgPSBsZTE2X3RvX2NwdShuaWNfaW5mby0+cGNpX2Z1bmMpOworCQlucGFyX2luZm8tPm9wX21vZGUgPSBsZTE2X3RvX2NwdShuaWNfaW5mby0+b3BfbW9kZSk7CisJCW5wYXJfaW5mby0+cGh5c19wb3J0ID0gbGUxNl90b19jcHUobmljX2luZm8tPnBoeXNfcG9ydCk7CisJCW5wYXJfaW5mby0+c3dpdGNoX21vZGUgPSBsZTE2X3RvX2NwdShuaWNfaW5mby0+c3dpdGNoX21vZGUpOworCQlucGFyX2luZm8tPm1heF90eF9xdWVzID0gbGUxNl90b19jcHUobmljX2luZm8tPm1heF90eF9xdWVzKTsKKwkJbnBhcl9pbmZvLT5tYXhfcnhfcXVlcyA9IGxlMTZfdG9fY3B1KG5pY19pbmZvLT5tYXhfcnhfcXVlcyk7CisJCW5wYXJfaW5mby0+bWluX3R4X2J3ID0gbGUxNl90b19jcHUobmljX2luZm8tPm1pbl90eF9idyk7CisJCW5wYXJfaW5mby0+bWF4X3R4X2J3ID0gbGUxNl90b19jcHUobmljX2luZm8tPm1heF90eF9idyk7CisJCW5wYXJfaW5mby0+Y2FwYWJpbGl0aWVzID0gbGUzMl90b19jcHUobmljX2luZm8tPmNhcGFiaWxpdGllcyk7CisJCW5wYXJfaW5mby0+bWF4X210dSA9IGxlMTZfdG9fY3B1KG5pY19pbmZvLT5tYXhfbXR1KTsKKworCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJInBoeSBwb3J0OiAlZCBzd2l0Y2hfbW9kZTogJWQsXG4iCisJCQkiXHRtYXhfdHhfcTogJWQgbWF4X3J4X3E6ICVkIG1pbl90eF9idzogMHgleCxcbiIKKwkJCSJcdG1heF90eF9idzogMHgleCBtYXhfbXR1OjB4JXgsIGNhcGFiaWxpdGllczogMHgleFxuIiwKKwkJCW5wYXJfaW5mby0+cGh5c19wb3J0LCBucGFyX2luZm8tPnN3aXRjaF9tb2RlLAorCQkJbnBhcl9pbmZvLT5tYXhfdHhfcXVlcywgbnBhcl9pbmZvLT5tYXhfcnhfcXVlcywKKwkJCW5wYXJfaW5mby0+bWluX3R4X2J3LCBucGFyX2luZm8tPm1heF90eF9idywKKwkJCW5wYXJfaW5mby0+bWF4X210dSwgbnBhcl9pbmZvLT5jYXBhYmlsaXRpZXMpOworCX0gZWxzZSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJGYWlsZWQgdG8gZ2V0IG5pYyBpbmZvJWRcbiIsIGVycik7CisJCWVyciA9IC1FSU87CisJfQorCisJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBuaWNfc2l6ZSwgbmljX2luZm9fYWRkciwgbmljX2RtYV90KTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBDb25maWd1cmUgYSBOSUMgcGFydGl0aW9uICovCitpbnQgcWxjbmljX3NldF9uaWNfaW5mbyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBxbGNuaWNfaW5mbyAqbmljKQoreworCWludCBlcnIgPSAtRUlPOworCWRtYV9hZGRyX3QgbmljX2RtYV90OworCXZvaWQgKm5pY19pbmZvX2FkZHI7CisJc3RydWN0IHFsY25pY19pbmZvICpuaWNfaW5mbzsKKwlzaXplX3QgbmljX3NpemUgPSBzaXplb2Yoc3RydWN0IHFsY25pY19pbmZvKTsKKworCWlmIChhZGFwdGVyLT5vcF9tb2RlICE9IFFMQ05JQ19NR01UX0ZVTkMpCisJCXJldHVybiBlcnI7CisKKwluaWNfaW5mb19hZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgbmljX3NpemUsCisJCQkmbmljX2RtYV90KTsKKwlpZiAoIW5pY19pbmZvX2FkZHIpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtc2V0KG5pY19pbmZvX2FkZHIsIDAsIG5pY19zaXplKTsKKwluaWNfaW5mbyA9IChzdHJ1Y3QgcWxjbmljX2luZm8gKiluaWNfaW5mb19hZGRyOworCisJbmljX2luZm8tPnBjaV9mdW5jID0gY3B1X3RvX2xlMTYobmljLT5wY2lfZnVuYyk7CisJbmljX2luZm8tPm9wX21vZGUgPSBjcHVfdG9fbGUxNihuaWMtPm9wX21vZGUpOworCW5pY19pbmZvLT5waHlzX3BvcnQgPSBjcHVfdG9fbGUxNihuaWMtPnBoeXNfcG9ydCk7CisJbmljX2luZm8tPnN3aXRjaF9tb2RlID0gY3B1X3RvX2xlMTYobmljLT5zd2l0Y2hfbW9kZSk7CisJbmljX2luZm8tPmNhcGFiaWxpdGllcyA9IGNwdV90b19sZTMyKG5pYy0+Y2FwYWJpbGl0aWVzKTsKKwluaWNfaW5mby0+bWF4X21hY19maWx0ZXJzID0gbmljLT5tYXhfbWFjX2ZpbHRlcnM7CisJbmljX2luZm8tPm1heF90eF9xdWVzID0gY3B1X3RvX2xlMTYobmljLT5tYXhfdHhfcXVlcyk7CisJbmljX2luZm8tPm1heF9yeF9xdWVzID0gY3B1X3RvX2xlMTYobmljLT5tYXhfcnhfcXVlcyk7CisJbmljX2luZm8tPm1pbl90eF9idyA9IGNwdV90b19sZTE2KG5pYy0+bWluX3R4X2J3KTsKKwluaWNfaW5mby0+bWF4X3R4X2J3ID0gY3B1X3RvX2xlMTYobmljLT5tYXhfdHhfYncpOworCisJZXJyID0gcWxjbmljX2lzc3VlX2NtZChhZGFwdGVyLAorCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jLAorCQkJYWRhcHRlci0+ZndfaGFsX3ZlcnNpb24sCisJCQlNU0QobmljX2RtYV90KSwKKwkJCUxTRChuaWNfZG1hX3QpLAorCQkJKChuaWMtPnBjaV9mdW5jIDw8IDE2KSB8IG5pY19zaXplKSwKKwkJCVFMQ05JQ19DRFJQX0NNRF9TRVRfTklDX0lORk8pOworCisJaWYgKGVyciAhPSBRTENOSUNfUkNPREVfU1VDQ0VTUykgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiRmFpbGVkIHRvIHNldCBuaWMgaW5mbyVkXG4iLCBlcnIpOworCQllcnIgPSAtRUlPOworCX0KKworCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgbmljX3NpemUsIG5pY19pbmZvX2FkZHIsIG5pY19kbWFfdCk7CisJcmV0dXJuIGVycjsKK30KKworLyogR2V0IFBDSSBJbmZvIG9mIGEgcGFydGl0aW9uICovCitpbnQgcWxjbmljX2dldF9wY2lfaW5mbyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJc3RydWN0IHFsY25pY19wY2lfaW5mbyAqcGNpX2luZm8pCit7CisJaW50IGVyciA9IDAsIGk7CisJZG1hX2FkZHJfdCBwY2lfaW5mb19kbWFfdDsKKwlzdHJ1Y3QgcWxjbmljX3BjaV9pbmZvICpucGFyOworCXZvaWQgKnBjaV9pbmZvX2FkZHI7CisJc2l6ZV90IG5wYXJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcWxjbmljX3BjaV9pbmZvKTsKKwlzaXplX3QgcGNpX3NpemUgPSBucGFyX3NpemUgKiBRTENOSUNfTUFYX1BDSV9GVU5DOworCisJcGNpX2luZm9fYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHBjaV9zaXplLAorCQkJJnBjaV9pbmZvX2RtYV90KTsKKwlpZiAoIXBjaV9pbmZvX2FkZHIpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChwY2lfaW5mb19hZGRyLCAwLCBwY2lfc2l6ZSk7CisKKwlucGFyID0gKHN0cnVjdCBxbGNuaWNfcGNpX2luZm8gKikgcGNpX2luZm9fYWRkcjsKKwllcnIgPSBxbGNuaWNfaXNzdWVfY21kKGFkYXB0ZXIsCisJCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCisJCQlhZGFwdGVyLT5md19oYWxfdmVyc2lvbiwKKwkJCU1TRChwY2lfaW5mb19kbWFfdCksCisJCQlMU0QocGNpX2luZm9fZG1hX3QpLAorCQkJcGNpX3NpemUsCisJCQlRTENOSUNfQ0RSUF9DTURfR0VUX1BDSV9JTkZPKTsKKworCWlmIChlcnIgPT0gUUxDTklDX1JDT0RFX1NVQ0NFU1MpIHsKKwkJZm9yIChpID0gMDsgaSA8IFFMQ05JQ19NQVhfUENJX0ZVTkM7IGkrKywgbnBhcisrLCBwY2lfaW5mbysrKSB7CisJCQlwY2lfaW5mby0+aWQgPSBsZTMyX3RvX2NwdShucGFyLT5pZCk7CisJCQlwY2lfaW5mby0+YWN0aXZlID0gbGUzMl90b19jcHUobnBhci0+YWN0aXZlKTsKKwkJCXBjaV9pbmZvLT50eXBlID0gbGUzMl90b19jcHUobnBhci0+dHlwZSk7CisJCQlwY2lfaW5mby0+ZGVmYXVsdF9wb3J0ID0KKwkJCQlsZTMyX3RvX2NwdShucGFyLT5kZWZhdWx0X3BvcnQpOworCQkJcGNpX2luZm8tPnR4X21pbl9idyA9CisJCQkJbGUzMl90b19jcHUobnBhci0+dHhfbWluX2J3KTsKKwkJCXBjaV9pbmZvLT50eF9tYXhfYncgPQorCQkJCWxlMzJfdG9fY3B1KG5wYXItPnR4X21heF9idyk7CisJCQltZW1jcHkocGNpX2luZm8tPm1hYywgbnBhci0+bWFjLCBFVEhfQUxFTik7CisJCX0KKwl9IGVsc2UgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiRmFpbGVkIHRvIGdldCBQQ0kgSW5mbyVkXG4iLCBlcnIpOworCQllcnIgPSAtRUlPOworCX0KKworCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgcGNpX3NpemUsIHBjaV9pbmZvX2FkZHIsCisJCXBjaV9pbmZvX2RtYV90KTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBSZXNldCBhIE5JQyBwYXJ0aXRpb24gKi8KKworaW50IHFsY25pY19yZXNldF9wYXJ0aXRpb24oc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1OCBmdW5jX25vKQoreworCWludCBlcnIgPSAtRUlPOworCisJaWYgKGFkYXB0ZXItPm9wX21vZGUgIT0gUUxDTklDX01HTVRfRlVOQykKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHFsY25pY19pc3N1ZV9jbWQoYWRhcHRlciwKKwkJCWFkYXB0ZXItPmFody5wY2lfZnVuYywKKwkJCWFkYXB0ZXItPmZ3X2hhbF92ZXJzaW9uLAorCQkJZnVuY19ubywKKwkJCTAsCisJCQkwLAorCQkJUUxDTklDX0NEUlBfQ01EX1JFU0VUX05QQVIpOworCisJaWYgKGVyciAhPSBRTENOSUNfUkNPREVfU1VDQ0VTUykgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiRmFpbGVkIHRvIGlzc3VlIHJlc2V0IHBhcnRpdGlvbiVkXG4iLCBlcnIpOworCQllcnIgPSAtRUlPOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKy8qIEdldCBlU3dpdGNoIENhcGFiaWxpdGllcyAqLworaW50IHFsY25pY19nZXRfZXN3aXRjaF9jYXBhYmlsaXRpZXMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1OCBwb3J0LAorCQkJCQlzdHJ1Y3QgcWxjbmljX2Vzd2l0Y2ggKmVzd2l0Y2gpCit7CisJaW50IGVyciA9IC1FSU87CisJdTMyIGFyZzEsIGFyZzI7CisKKwlpZiAoYWRhcHRlci0+b3BfbW9kZSA9PSBRTENOSUNfTk9OX1BSSVZfRlVOQykKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHFsY25pY19pc3N1ZV9jbWQoYWRhcHRlciwKKwkJCWFkYXB0ZXItPmFody5wY2lfZnVuYywKKwkJCWFkYXB0ZXItPmZ3X2hhbF92ZXJzaW9uLAorCQkJcG9ydCwKKwkJCTAsCisJCQkwLAorCQkJUUxDTklDX0NEUlBfQ01EX0dFVF9FU1dJVENIX0NBUEFCSUxJVFkpOworCisJaWYgKGVyciA9PSBRTENOSUNfUkNPREVfU1VDQ0VTUykgeworCQlhcmcxID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfQVJHMV9DUkJfT0ZGU0VUKTsKKwkJYXJnMiA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX0FSRzJfQ1JCX09GRlNFVCk7CisKKwkJZXN3aXRjaC0+cG9ydCA9IGFyZzEgJiAweGY7CisJCWVzd2l0Y2gtPmFjdGl2ZV92cG9ydHMgPSBMU0IoYXJnMik7CisJCWVzd2l0Y2gtPm1heF91Y2FzdF9maWx0ZXJzID0gTVNCKGFyZzIpOworCQllc3dpdGNoLT5tYXhfYWN0aXZlX3ZsYW5zID0gTFNCKE1TVyhhcmcyKSk7CisJCWlmIChhcmcxICYgQklUXzYpCisJCQllc3dpdGNoLT5mbGFncyB8PSBRTENOSUNfU1dJVENIX1ZMQU5fRklMVEVSSU5HOworCQlpZiAoYXJnMSAmIEJJVF83KQorCQkJZXN3aXRjaC0+ZmxhZ3MgfD0gUUxDTklDX1NXSVRDSF9QUk9NSVNDX01PREU7CisJCWlmIChhcmcxICYgQklUXzgpCisJCQllc3dpdGNoLT5mbGFncyB8PSBRTENOSUNfU1dJVENIX1BPUlRfTUlSUk9SSU5HOworCX0gZWxzZSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJGYWlsZWQgdG8gZ2V0IGVzd2l0Y2ggY2FwYWJpbGl0aWVzJWRcbiIsIGVycik7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyogR2V0IGN1cnJlbnQgc3RhdHVzIG9mIGVzd2l0Y2ggKi8KK2ludCBxbGNuaWNfZ2V0X2Vzd2l0Y2hfc3RhdHVzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTggcG9ydCwKKwkJCQlzdHJ1Y3QgcWxjbmljX2Vzd2l0Y2ggKmVzd2l0Y2gpCit7CisJaW50IGVyciA9IC1FSU87CisJdTMyIGFyZzEsIGFyZzI7CisKKwlpZiAoYWRhcHRlci0+b3BfbW9kZSAhPSBRTENOSUNfTUdNVF9GVU5DKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gcWxjbmljX2lzc3VlX2NtZChhZGFwdGVyLAorCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jLAorCQkJYWRhcHRlci0+ZndfaGFsX3ZlcnNpb24sCisJCQlwb3J0LAorCQkJMCwKKwkJCTAsCisJCQlRTENOSUNfQ0RSUF9DTURfR0VUX0VTV0lUQ0hfU1RBVFVTKTsKKworCWlmIChlcnIgPT0gUUxDTklDX1JDT0RFX1NVQ0NFU1MpIHsKKwkJYXJnMSA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX0FSRzFfQ1JCX09GRlNFVCk7CisJCWFyZzIgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19BUkcyX0NSQl9PRkZTRVQpOworCisJCWVzd2l0Y2gtPnBvcnQgPSBhcmcxICYgMHhmOworCQllc3dpdGNoLT5hY3RpdmVfdnBvcnRzID0gTFNCKGFyZzIpOworCQllc3dpdGNoLT5hY3RpdmVfdWNhc3RfZmlsdGVycyA9IE1TQihhcmcyKTsKKwkJZXN3aXRjaC0+YWN0aXZlX3ZsYW5zID0gTFNCKE1TVyhhcmcyKSk7CisJCWlmIChhcmcxICYgQklUXzYpCisJCQllc3dpdGNoLT5mbGFncyB8PSBRTENOSUNfU1dJVENIX1ZMQU5fRklMVEVSSU5HOworCQlpZiAoYXJnMSAmIEJJVF84KQorCQkJZXN3aXRjaC0+ZmxhZ3MgfD0gUUxDTklDX1NXSVRDSF9QT1JUX01JUlJPUklORzsKKworCX0gZWxzZSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJGYWlsZWQgdG8gZ2V0IGVzd2l0Y2ggc3RhdHVzJWRcbiIsIGVycik7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyogRW5hYmxlL0Rpc2FibGUgZVN3aXRjaCAqLworaW50IHFsY25pY190b2dnbGVfZXN3aXRjaChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IGlkLCB1OCBlbmFibGUpCit7CisJaW50IGVyciA9IC1FSU87CisJdTMyIGFyZzEsIGFyZzI7CisJc3RydWN0IHFsY25pY19lc3dpdGNoICplc3dpdGNoOworCisJaWYgKGFkYXB0ZXItPm9wX21vZGUgIT0gUUxDTklDX01HTVRfRlVOQykKKwkJcmV0dXJuIGVycjsKKworCWVzd2l0Y2ggPSAmYWRhcHRlci0+ZXN3aXRjaFtpZF07CisJaWYgKCFlc3dpdGNoKQorCQlyZXR1cm4gZXJyOworCisJYXJnMSA9IGVzd2l0Y2gtPnBvcnQgfCAoZW5hYmxlID8gQklUXzQgOiAwKTsKKwlhcmcyID0gZXN3aXRjaC0+YWN0aXZlX3Zwb3J0cyB8IChlc3dpdGNoLT5tYXhfdWNhc3RfZmlsdGVycyA8PCA4KSB8CisJCShlc3dpdGNoLT5tYXhfYWN0aXZlX3ZsYW5zIDw8IDE2KTsKKwllcnIgPSBxbGNuaWNfaXNzdWVfY21kKGFkYXB0ZXIsCisJCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCisJCQlhZGFwdGVyLT5md19oYWxfdmVyc2lvbiwKKwkJCWFyZzEsCisJCQlhcmcyLAorCQkJMCwKKwkJCVFMQ05JQ19DRFJQX0NNRF9UT0dHTEVfRVNXSVRDSCk7CisKKwlpZiAoZXJyICE9IFFMQ05JQ19SQ09ERV9TVUNDRVNTKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJGYWlsZWQgdG8gZW5hYmxlIGVzd2l0Y2glZFxuIiwgZXN3aXRjaC0+cG9ydCk7CisJCWVzd2l0Y2gtPmZsYWdzICY9IH5RTENOSUNfU1dJVENIX0VOQUJMRTsKKwkJZXJyID0gLUVJTzsKKwl9IGVsc2UgeworCQllc3dpdGNoLT5mbGFncyB8PSBRTENOSUNfU1dJVENIX0VOQUJMRTsKKwkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJFbmFibGVkIGVTd2l0Y2ggZm9yIHBvcnQgJWRcbiIsIGVzd2l0Y2gtPnBvcnQpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKy8qIENvbmZpZ3VyZSBlU3dpdGNoIGZvciBwb3J0IG1pcnJvcmluZyAqLworaW50IHFsY25pY19jb25maWdfcG9ydF9taXJyb3Jpbmcoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1OCBpZCwKKwkJCQl1OCBlbmFibGVfbWlycm9yaW5nLCB1OCBwY2lfZnVuYykKK3sKKwlpbnQgZXJyID0gLUVJTzsKKwl1MzIgYXJnMTsKKworCWlmIChhZGFwdGVyLT5vcF9tb2RlICE9IFFMQ05JQ19NR01UX0ZVTkMgfHwKKwkJIShhZGFwdGVyLT5lc3dpdGNoW2lkXS5mbGFncyAmIFFMQ05JQ19TV0lUQ0hfRU5BQkxFKSkKKwkJcmV0dXJuIGVycjsKKworCWFyZzEgPSBpZCB8IChlbmFibGVfbWlycm9yaW5nID8gQklUXzQgOiAwKTsKKwlhcmcxIHw9IHBjaV9mdW5jIDw8IDg7CisKKwllcnIgPSBxbGNuaWNfaXNzdWVfY21kKGFkYXB0ZXIsCisJCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCisJCQlhZGFwdGVyLT5md19oYWxfdmVyc2lvbiwKKwkJCWFyZzEsCisJCQkwLAorCQkJMCwKKwkJCVFMQ05JQ19DRFJQX0NNRF9TRVRfUE9SVE1JUlJPUklORyk7CisKKwlpZiAoZXJyICE9IFFMQ05JQ19SQ09ERV9TVUNDRVNTKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJGYWlsZWQgdG8gY29uZmlndXJlIHBvcnQgbWlycm9yaW5nJWQgb24gZXN3aXRjaDolZFxuIiwKKwkJCXBjaV9mdW5jLCBpZCk7CisJfSBlbHNlIHsKKwkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJDb25maWd1cmVkIGVTd2l0Y2ggJWQgZm9yIHBvcnQgbWlycm9yaW5nOiVkXG4iLAorCQkJaWQsIHBjaV9mdW5jKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKiBDb25maWd1cmUgZVN3aXRjaCBwb3J0ICovCitpbnQgcWxjbmljX2NvbmZpZ19zd2l0Y2hfcG9ydChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IGlkLAorCQlpbnQgdmxhbl90YWdnaW5nLCB1OCBkaXNjYXJkX3RhZ2dlZCwgdTggcHJvbXNjX21vZGUsCisJCXU4IG1hY19sZWFybiwgdTggcGNpX2Z1bmMsIHUxNiB2bGFuX2lkKQoreworCWludCBlcnIgPSAtRUlPOworCXUzMiBhcmcxOworCXN0cnVjdCBxbGNuaWNfZXN3aXRjaCAqZXN3aXRjaDsKKworCWlmIChhZGFwdGVyLT5vcF9tb2RlICE9IFFMQ05JQ19NR01UX0ZVTkMpCisJCXJldHVybiBlcnI7CisKKwllc3dpdGNoID0gJmFkYXB0ZXItPmVzd2l0Y2hbaWRdOworCWlmICghKGVzd2l0Y2gtPmZsYWdzICYgUUxDTklDX1NXSVRDSF9FTkFCTEUpKQorCQlyZXR1cm4gZXJyOworCisJYXJnMSA9IGVzd2l0Y2gtPnBvcnQgfCAoZGlzY2FyZF90YWdnZWQgPyBCSVRfNCA6IDApOworCWFyZzEgfD0gKHByb21zY19tb2RlID8gQklUXzYgOiAwKSB8IChtYWNfbGVhcm4gPyBCSVRfNyA6IDApOworCWFyZzEgfD0gcGNpX2Z1bmMgPDwgODsKKwlpZiAodmxhbl90YWdnaW5nKQorCQlhcmcxIHw9IEJJVF81IHwgKHZsYW5faWQgPDwgMTYpOworCisJZXJyID0gcWxjbmljX2lzc3VlX2NtZChhZGFwdGVyLAorCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jLAorCQkJYWRhcHRlci0+ZndfaGFsX3ZlcnNpb24sCisJCQlhcmcxLAorCQkJMCwKKwkJCTAsCisJCQlRTENOSUNfQ0RSUF9DTURfQ09ORklHVVJFX0VTV0lUQ0gpOworCisJaWYgKGVyciAhPSBRTENOSUNfUkNPREVfU1VDQ0VTUykgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiRmFpbGVkIHRvIGNvbmZpZ3VyZSBlc3dpdGNoIHBvcnQlZFxuIiwgZXN3aXRjaC0+cG9ydCk7CisJfSBlbHNlIHsKKwkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJDb25maWd1cmVkIGVTd2l0Y2ggZm9yIHBvcnQgJWRcbiIsIGVzd2l0Y2gtPnBvcnQpOworCX0KKworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfZXRodG9vbC5jCmluZGV4IDNiZDUxNGUuLjkzMjhkNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfZXRodG9vbC5jCkBAIC02OSw4ICs2OSw2IEBACiAJCVFMQ19TSVpFT0Yoc3RhdHMueG1pdF9vZmYpLCBRTENfT0ZGKHN0YXRzLnhtaXRfb2ZmKX0sCiAJeyJza2JfYWxsb2NfZmFpbHVyZSIsIFFMQ19TSVpFT0Yoc3RhdHMuc2tiX2FsbG9jX2ZhaWx1cmUpLAogCQlRTENfT0ZGKHN0YXRzLnNrYl9hbGxvY19mYWlsdXJlKX0sCi0JeyJudWxsIHNrYiIsCi0JCVFMQ19TSVpFT0Yoc3RhdHMubnVsbF9za2IpLCBRTENfT0ZGKHN0YXRzLm51bGxfc2tiKX0sCiAJeyJudWxsIHJ4YnVmIiwKIAkJUUxDX1NJWkVPRihzdGF0cy5udWxsX3J4YnVmKSwgUUxDX09GRihzdGF0cy5udWxsX3J4YnVmKX0sCiAJeyJyeCBkbWEgbWFwIGVycm9yIiwgUUxDX1NJWkVPRihzdGF0cy5yeF9kbWFfbWFwX2Vycm9yKSwKQEAgLTM1MCw3ICszNDgsNyBAQAogCWZvciAoaSA9IDA7IGRpYWdfcmVnaXN0ZXJzW2ldICE9IC0xOyBpKyspCiAJCXJlZ3NfYnVmZltpXSA9IFFMQ1JEMzIoYWRhcHRlciwgZGlhZ19yZWdpc3RlcnNbaV0pOwogCi0JaWYgKGFkYXB0ZXItPmlzX3VwICE9IFFMQ05JQ19BREFQVEVSX1VQX01BR0lDKQorCWlmICghdGVzdF9iaXQoX19RTENOSUNfREVWX1VQLCAmYWRhcHRlci0+c3RhdGUpKQogCQlyZXR1cm47CiAKIAlyZWdzX2J1ZmZbaSsrXSA9IDB4RkZFRkNEQUI7IC8qIE1hcmtlciBidHcgcmVncyBhbmQgcmluZyBjb3VudCovCkBAIC01ODAsOCArNTc4LDEyIEBACiAJCX0KIAkJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfTklVX0dCX1BBVVNFX0NUTCwgdmFsKTsKIAl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gUUxDTklDX1hHQkUpIHsKKwkJaWYgKCFwYXVzZS0+cnhfcGF1c2UgfHwgcGF1c2UtPmF1dG9uZWcpCisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKIAkJaWYgKChwb3J0IDwgMCkgfHwgKHBvcnQgPiBRTENOSUNfTklVX01BWF9YR19QT1JUUykpCiAJCQlyZXR1cm4gLUVJTzsKKwogCQl2YWwgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19OSVVfWEdfUEFVU0VfQ1RMKTsKIAkJaWYgKHBvcnQgPT0gMCkgewogCQkJaWYgKHBhdXNlLT50eF9wYXVzZSkKQEAgLTY3Niw2ICs2NzgsMTIgQEAKIAlpbnQgbWF4X3Nkc19yaW5ncyA9IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7CiAJaW50IHJldDsKIAorCWlmIChhZGFwdGVyLT5vcF9tb2RlID09IFFMQ05JQ19OT05fUFJJVl9GVU5DKSB7CisJCWRldl93YXJuKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJMb29wYmFjayB0ZXN0IG5vdCBzdXBwb3J0ZWQiCisJCQkJImZvciBub24gcHJpdmlsZWdlIGZ1bmN0aW9uXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoX19RTENOSUNfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtNzE1LDcgKzcyMyw4IEBACiAKIAlhZGFwdGVyLT5kaWFnX2NudCA9IDA7CiAJcmV0ID0gcWxjbmljX2lzc3VlX2NtZChhZGFwdGVyLCBhZGFwdGVyLT5haHcucGNpX2Z1bmMsCi0JCQlRTENIQUxfVkVSU0lPTiwgYWRhcHRlci0+cG9ydG51bSwgMCwgMCwgMHgwMDAwMDAxMSk7CisJCQlhZGFwdGVyLT5md19oYWxfdmVyc2lvbiwgYWRhcHRlci0+cG9ydG51bSwKKwkJCTAsIDAsIDB4MDAwMDAwMTEpOwogCWlmIChyZXQpCiAJCWdvdG8gZG9uZTsKIApAQCAtODIxLDYgKzgzMCw5IEBACiAKIHN0YXRpYyBpbnQgcWxjbmljX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCiB7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpZiAoIShhZGFwdGVyLT5jYXBhYmlsaXRpZXMgJiBRTENOSUNfRldfQ0FQQUJJTElUWV9UU08pKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJaWYgKGRhdGEpCiAJCWRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082KTsKIAllbHNlCkBAIC04MzQsNyArODQ2LDEwIEBACiAJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gcWxjbmljX2NvbmZpZ19sZWQoYWRhcHRlciwgMSwgMHhmKTsKKwlpZiAoIXRlc3RfYml0KF9fUUxDTklDX0RFVl9VUCwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXQgPSBhZGFwdGVyLT5uaWNfb3BzLT5jb25maWdfbGVkKGFkYXB0ZXIsIDEsIDB4Zik7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCiAJCQkiRmFpbGVkIHRvIHNldCBMRUQgYmxpbmsgc3RhdGUuXG4iKTsKQEAgLTg0Myw3ICs4NTgsNyBAQAogCiAJbXNsZWVwX2ludGVycnVwdGlibGUodmFsICogMTAwMCk7CiAKLQlyZXQgPSBxbGNuaWNfY29uZmlnX2xlZChhZGFwdGVyLCAwLCAweGYpOworCXJldCA9IGFkYXB0ZXItPm5pY19vcHMtPmNvbmZpZ19sZWQoYWRhcHRlciwgMCwgMHhmKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKIAkJCSJGYWlsZWQgdG8gcmVzZXQgTEVEIGJsaW5rIHN0YXRlLlxuIik7CkBAIC05MDUsNyArOTIwLDcgQEAKIHsKIAlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JaWYgKGFkYXB0ZXItPmlzX3VwICE9IFFMQ05JQ19BREFQVEVSX1VQX01BR0lDKQorCWlmICghdGVzdF9iaXQoX19RTENOSUNfREVWX1VQLCAmYWRhcHRlci0+c3RhdGUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qCkBAIC05ODEsMTIgKzk5NiwxOSBAQAogCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJaW50IGh3X2xybzsKIAorCWlmIChkYXRhICYgfkVUSF9GTEFHX0xSTykKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpZiAoIShhZGFwdGVyLT5jYXBhYmlsaXRpZXMgJiBRTENOSUNfRldfQ0FQQUJJTElUWV9IV19MUk8pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWV0aHRvb2xfb3Bfc2V0X2ZsYWdzKG5ldGRldiwgZGF0YSk7Ci0KLQlod19scm8gPSAoZGF0YSAmIEVUSF9GTEFHX0xSTykgPyBRTENOSUNfTFJPX0VOQUJMRUQgOiAwOworCWlmIChkYXRhICYgRVRIX0ZMQUdfTFJPKSB7CisJCWh3X2xybyA9IFFMQ05JQ19MUk9fRU5BQkxFRDsKKwkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKKwl9IGVsc2UgeworCQlod19scm8gPSAwOworCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0xSTzsKKwl9CiAKIAlpZiAocWxjbmljX2NvbmZpZ19od19scm8oYWRhcHRlciwgaHdfbHJvKSkKIAkJcmV0dXJuIC1FSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2hkci5oIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19oZHIuaAppbmRleCBhZDlkMTY3Li4xNWZjMzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2hkci5oCisrKyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaGRyLmgKQEAgLTIwOCw2ICsyMDgsMzkgQEAKIAlRTENOSUNfSFdfUFhfTUFQX0NSQl9QR1IwCiB9OwogCisjZGVmaW5lCUJJVF8wCTB4MQorI2RlZmluZQlCSVRfMQkweDIKKyNkZWZpbmUJQklUXzIJMHg0CisjZGVmaW5lCUJJVF8zCTB4OAorI2RlZmluZQlCSVRfNAkweDEwCisjZGVmaW5lCUJJVF81CTB4MjAKKyNkZWZpbmUJQklUXzYJMHg0MAorI2RlZmluZQlCSVRfNwkweDgwCisjZGVmaW5lCUJJVF84CTB4MTAwCisjZGVmaW5lCUJJVF85CTB4MjAwCisjZGVmaW5lCUJJVF8xMAkweDQwMAorI2RlZmluZQlCSVRfMTEJMHg4MDAKKyNkZWZpbmUJQklUXzEyCTB4MTAwMAorI2RlZmluZQlCSVRfMTMJMHgyMDAwCisjZGVmaW5lCUJJVF8xNAkweDQwMDAKKyNkZWZpbmUJQklUXzE1CTB4ODAwMAorI2RlZmluZQlCSVRfMTYJMHgxMDAwMAorI2RlZmluZQlCSVRfMTcJMHgyMDAwMAorI2RlZmluZQlCSVRfMTgJMHg0MDAwMAorI2RlZmluZQlCSVRfMTkJMHg4MDAwMAorI2RlZmluZQlCSVRfMjAJMHgxMDAwMDAKKyNkZWZpbmUJQklUXzIxCTB4MjAwMDAwCisjZGVmaW5lCUJJVF8yMgkweDQwMDAwMAorI2RlZmluZQlCSVRfMjMJMHg4MDAwMDAKKyNkZWZpbmUJQklUXzI0CTB4MTAwMDAwMAorI2RlZmluZQlCSVRfMjUJMHgyMDAwMDAwCisjZGVmaW5lCUJJVF8yNgkweDQwMDAwMDAKKyNkZWZpbmUJQklUXzI3CTB4ODAwMDAwMAorI2RlZmluZQlCSVRfMjgJMHgxMDAwMDAwMAorI2RlZmluZQlCSVRfMjkJMHgyMDAwMDAwMAorI2RlZmluZQlCSVRfMzAJMHg0MDAwMDAwMAorI2RlZmluZQlCSVRfMzEJMHg4MDAwMDAwMAorCiAvKiAgVGhpcyBmaWVsZCBkZWZpbmVzIENSQiBhZHIgWzMxOjIwXSBvZiB0aGUgYWdlbnRzICovCiAKICNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9NTglcCkBAIC02NjgsMTAgKzcwMSwxMSBAQAogI2RlZmluZSBRTENOSUNfQ1JCX0RFVl9SRUZfQ09VTlQJKFFMQ05JQ19DQU1fUkFNKDB4MTM4KSkKICNkZWZpbmUgUUxDTklDX0NSQl9ERVZfU1RBVEUJCShRTENOSUNfQ0FNX1JBTSgweDE0MCkpCiAKLSNkZWZpbmUgUUxDTklDX0NSQl9EUlZfU1RBVEUgICAgICAgICAgICAgICAoUUxDTklDX0NBTV9SQU0oMHgxNDQpKQotI2RlZmluZSBRTENOSUNfQ1JCX0RSVl9TQ1JBVENIICAgICAgICAgICAgIChRTENOSUNfQ0FNX1JBTSgweDE0OCkpCi0jZGVmaW5lIFFMQ05JQ19DUkJfREVWX1BBUlRJVElPTl9JTkZPICAgICAgKFFMQ05JQ19DQU1fUkFNKDB4MTRjKSkKKyNkZWZpbmUgUUxDTklDX0NSQl9EUlZfU1RBVEUJCShRTENOSUNfQ0FNX1JBTSgweDE0NCkpCisjZGVmaW5lIFFMQ05JQ19DUkJfRFJWX1NDUkFUQ0gJCShRTENOSUNfQ0FNX1JBTSgweDE0OCkpCisjZGVmaW5lIFFMQ05JQ19DUkJfREVWX1BBUlRJVElPTl9JTkZPCShRTENOSUNfQ0FNX1JBTSgweDE0YykpCiAjZGVmaW5lIFFMQ05JQ19DUkJfRFJWX0lEQ19WRVIJCShRTENOSUNfQ0FNX1JBTSgweDE3NCkpCisjZGVmaW5lIFFMQ05JQ19DUkJfREVWX05QQVJfU1RBVEUJKFFMQ05JQ19DQU1fUkFNKDB4MTljKSkKICNkZWZpbmUgUUxDTklDX1JPTV9ERVZfSU5JVF9USU1FT1VUCSgweDNlODg1YykKICNkZWZpbmUgUUxDTklDX1JPTV9EUlZfUkVTRVRfVElNRU9VVAkoMHgzZTg4NjApCiAKQEAgLTY4NCwxNSArNzE4LDI2IEBACiAjZGVmaW5lIFFMQ05JQ19ERVZfRkFJTEVECQkweDYKICNkZWZpbmUgUUxDTklDX0RFVl9RVUlTQ0VOVAkJMHg3CiAKKyNkZWZpbmUgUUxDTklDX0RFVl9OUEFSX05PVF9SRFkJMAorI2RlZmluZSBRTENOSUNfREVWX05QQVJfUkRZCQkxCisKKyNkZWZpbmUgUUxDX0RFVl9DSEVDS19BQ1RJVkUoVkFMLCBGTikJCSgoVkFMKSAmPSAoMSA8PCAoRk4gKiA0KSkpCiAjZGVmaW5lIFFMQ19ERVZfU0VUX1JFRl9DTlQoVkFMLCBGTikJCSgoVkFMKSB8PSAoMSA8PCAoRk4gKiA0KSkpCiAjZGVmaW5lIFFMQ19ERVZfQ0xSX1JFRl9DTlQoVkFMLCBGTikJCSgoVkFMKSAmPSB+KDEgPDwgKEZOICogNCkpKQogI2RlZmluZSBRTENfREVWX1NFVF9SU1RfUkRZKFZBTCwgRk4pCQkoKFZBTCkgfD0gKDEgPDwgKEZOICogNCkpKQogI2RlZmluZSBRTENfREVWX1NFVF9RU0NOVF9SRFkoVkFMLCBGTikJCSgoVkFMKSB8PSAoMiA8PCAoRk4gKiA0KSkpCiAjZGVmaW5lIFFMQ19ERVZfQ0xSX1JTVF9RU0NOVChWQUwsIEZOKQkJKChWQUwpICY9IH4oMyA8PCAoRk4gKiA0KSkpCiAKKyNkZWZpbmUgUUxDX0RFVl9HRVRfRFJWKFZBTCwgRk4pCQkoMHhmICYgKChWQUwpID4+IChGTiAqIDQpKSkKKyNkZWZpbmUgUUxDX0RFVl9TRVRfRFJWKFZBTCwgRk4pCQkoKFZBTCkgPDwgKEZOICogNCkpCisKKyNkZWZpbmUgUUxDTklDX1RZUEVfTklDCQkxCisjZGVmaW5lIFFMQ05JQ19UWVBFX0ZDT0UJCTIKKyNkZWZpbmUgUUxDTklDX1RZUEVfSVNDU0kJCTMKKwogI2RlZmluZSBRTENOSUNfUkNPREVfRFJJVkVSX0lORk8JCTB4MjAwMDAwMDAKLSNkZWZpbmUgUUxDTklDX1JDT0RFX0RSSVZFUl9DQU5fUkVMT0FECQkweDQwMDAwMDAwCi0jZGVmaW5lIFFMQ05JQ19SQ09ERV9GQVRBTF9FUlJPUgkJMHg4MDAwMDAwMAorI2RlZmluZSBRTENOSUNfUkNPREVfRFJJVkVSX0NBTl9SRUxPQUQJCUJJVF8zMAorI2RlZmluZSBRTENOSUNfUkNPREVfRkFUQUxfRVJST1IJCUJJVF8zMQogI2RlZmluZSBRTENOSUNfRldFUlJPUl9QRUdOVU0oY29kZSkJCSgoY29kZSkgJiAweGZmKQogI2RlZmluZSBRTENOSUNfRldFUlJPUl9DT0RFKGNvZGUpCQkoKGNvZGUgPj4gOCkgJiAweGZmZmZmKQogCkBAIC03MjEsNiArNzY2LDI5IEBACiAJdTMyCXBjaV9pbnRfcmVnOwogfTsKIAorI2RlZmluZSBRTENOSUNfRldfQVBJCQkweDFiMjE2YworI2RlZmluZSBRTENOSUNfRFJWX09QX01PREUJMHgxYjIxNzAKKyNkZWZpbmUgUUxDTklDX01TSVhfQkFTRQkweDEzMjExMAorI2RlZmluZSBRTENOSUNfTUFYX1BDSV9GVU5DCTgKKworLyogUENJIGZ1bmN0aW9uIG9wZXJhdGlvbmFsIG1vZGUgKi8KK2VudW0geworCVFMQ05JQ19NR01UX0ZVTkMJPSAwLAorCVFMQ05JQ19QUklWX0ZVTkMJPSAxLAorCVFMQ05JQ19OT05fUFJJVl9GVU5DCT0gMgorfTsKKworI2RlZmluZSBRTENfREVWX0RSVl9ERUZBVUxUIDB4MTExMTExMTEKKworI2RlZmluZSBMU0IoeCkJKCh1aW50OF90KSh4KSkKKyNkZWZpbmUgTVNCKHgpCSgodWludDhfdCkoKHVpbnQxNl90KSh4KSA+PiA4KSkKKworI2RlZmluZSBMU1coeCkgICgodWludDE2X3QpKCh1aW50MzJfdCkoeCkpKQorI2RlZmluZSBNU1coeCkgICgodWludDE2X3QpKCh1aW50MzJfdCkoeCkgPj4gMTYpKQorCisjZGVmaW5lIExTRCh4KSAgKCh1aW50MzJfdCkoKHVpbnQ2NF90KSh4KSkpCisjZGVmaW5lIE1TRCh4KSAgKCh1aW50MzJfdCkoKCgodWludDY0X3QpKHgpKSA+PiAxNikgPj4gMTYpKQorCiAjZGVmaW5lCVFMQ05JQ19MRUdBQ1lfSU5UUl9DT05GSUcJCQkJCVwKIHsJCQkJCQkJCQlcCiAJewkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19ody5jIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19ody5jCmluZGV4IDBjMmUxZjAuLmUwOGM4YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaHcuYworKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2h3LmMKQEAgLTMyNyw3ICszMjcsNyBAQAogCiAJaSA9IDA7CiAKLQlpZiAoYWRhcHRlci0+aXNfdXAgIT0gUUxDTklDX0FEQVBURVJfVVBfTUFHSUMpCisJaWYgKCF0ZXN0X2JpdChfX1FMQ05JQ19GV19BVFRBQ0hFRCwgJmFkYXB0ZXItPnN0YXRlKSkKIAkJcmV0dXJuIC1FSU87CiAKIAl0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZzsKQEAgLTMzOCw5ICszMzgsMTUgQEAKIAogCWlmIChucl9kZXNjID49IHFsY25pY190eF9hdmFpbCh0eF9yaW5nKSkgewogCQluZXRpZl90eF9zdG9wX3F1ZXVlKHR4X3JpbmctPnR4cSk7Ci0JCV9fbmV0aWZfdHhfdW5sb2NrX2JoKHR4X3JpbmctPnR4cSk7Ci0JCWFkYXB0ZXItPnN0YXRzLnhtaXRfb2ZmKys7Ci0JCXJldHVybiAtRUJVU1k7CisJCXNtcF9tYigpOworCQlpZiAocWxjbmljX3R4X2F2YWlsKHR4X3JpbmcpID4gbnJfZGVzYykgeworCQkJaWYgKHFsY25pY190eF9hdmFpbCh0eF9yaW5nKSA+IFRYX1NUT1BfVEhSRVNIKQorCQkJCW5ldGlmX3R4X3dha2VfcXVldWUodHhfcmluZy0+dHhxKTsKKwkJfSBlbHNlIHsKKwkJCWFkYXB0ZXItPnN0YXRzLnhtaXRfb2ZmKys7CisJCQlfX25ldGlmX3R4X3VubG9ja19iaCh0eF9yaW5nLT50eHEpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQogCX0KIAogCWRvIHsKQEAgLTQwNywxMCArNDEzLDE1IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAltZW1jcHkoY3VyLT5tYWNfYWRkciwgYWRkciwgRVRIX0FMRU4pOwotCWxpc3RfYWRkX3RhaWwoJmN1ci0+bGlzdCwgJmFkYXB0ZXItPm1hY19saXN0KTsKIAotCXJldHVybiBxbGNuaWNfc3JlX21hY2FkZHJfY2hhbmdlKGFkYXB0ZXIsCi0JCQkJY3VyLT5tYWNfYWRkciwgUUxDTklDX01BQ19BREQpOworCWlmIChxbGNuaWNfc3JlX21hY2FkZHJfY2hhbmdlKGFkYXB0ZXIsCisJCQkJY3VyLT5tYWNfYWRkciwgUUxDTklDX01BQ19BREQpKSB7CisJCWtmcmVlKGN1cik7CisJCXJldHVybiAtRUlPOworCX0KKworCWxpc3RfYWRkX3RhaWwoJmN1ci0+bGlzdCwgJmFkYXB0ZXItPm1hY19saXN0KTsKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBxbGNuaWNfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCkBAIC00MjAsNyArNDMxLDcgQEAKIAl1OCBiY2FzdF9hZGRyW0VUSF9BTEVOXSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OwogCXUzMiBtb2RlID0gVlBPUlRfTUlTU19NT0RFX0RST1A7CiAKLQlpZiAoYWRhcHRlci0+aXNfdXAgIT0gUUxDTklDX0FEQVBURVJfVVBfTUFHSUMpCisJaWYgKCF0ZXN0X2JpdChfX1FMQ05JQ19GV19BVFRBQ0hFRCwgJmFkYXB0ZXItPnN0YXRlKSkKIAkJcmV0dXJuOwogCiAJcWxjbmljX25pY19hZGRfbWFjKGFkYXB0ZXIsIGFkYXB0ZXItPm1hY19hZGRyKTsKQEAgLTUzOCw3ICs1NDksNyBAQAogCXJldHVybiBydjsKIH0KIAotaW50IHFsY25pY19jb25maWdfYnJpZGdlZF9tb2RlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgaW50IGVuYWJsZSkKK2ludCBxbGNuaWNfY29uZmlnX2JyaWRnZWRfbW9kZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBlbmFibGUpCiB7CiAJc3RydWN0IHFsY25pY19uaWNfcmVxIHJlcTsKIAl1NjQgd29yZDsKQEAgLTcwNCwyMSArNzE1LDE1IEBACiAJcmV0dXJuIHJjOwogfQogCi1pbnQgcWxjbmljX2dldF9tYWNfYWRkcihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCAqbWFjKQoraW50IHFsY25pY19nZXRfbWFjX2FkZHIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1OCAqbWFjKQogewotCXUzMiBjcmJhZGRyLCBtYWNfaGksIG1hY19sbzsKKwl1MzIgY3JiYWRkcjsKIAlpbnQgcGNpX2Z1bmMgPSBhZGFwdGVyLT5haHcucGNpX2Z1bmM7CiAKIAljcmJhZGRyID0gQ1JCX01BQ19CTE9DS19TVEFSVCArCiAJCSg0ICogKChwY2lfZnVuYy8yKSAqIDMpKSArICg0ICogKHBjaV9mdW5jICYgMSkpOwogCi0JbWFjX2xvID0gUUxDUkQzMihhZGFwdGVyLCBjcmJhZGRyKTsKLQltYWNfaGkgPSBRTENSRDMyKGFkYXB0ZXIsIGNyYmFkZHIrNCk7Ci0KLQlpZiAocGNpX2Z1bmMgJiAxKQotCQkqbWFjID0gbGU2NF90b19jcHUoKG1hY19sbyA+PiAxNikgfCAoKHU2NCltYWNfaGkgPDwgMTYpKTsKLQllbHNlCi0JCSptYWMgPSBsZTY0X3RvX2NwdSgodTY0KW1hY19sbyB8ICgodTY0KW1hY19oaSA8PCAzMikpOworCXFsY25pY19mZXRjaF9tYWMoYWRhcHRlciwgY3JiYWRkciwgY3JiYWRkcis0LCBwY2lfZnVuYyAmIDEsIG1hYyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTc2Niw3ICs3NzEsNyBAQAogICogT3V0OiAnb2ZmJyBpcyAyTSBwY2kgbWFwIGFkZHIKICAqIHNpZGUgZWZmZWN0OiBsb2NrIGNyYiB3aW5kb3cKICAqLwotc3RhdGljIHZvaWQKK3N0YXRpYyBpbnQKIHFsY25pY19wY2lfc2V0X2NyYndpbmRvd18yTShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHVsb25nIG9mZikKIHsKIAl1MzIgd2luZG93OwpAQCAtNzc1LDYgKzc4MCwxMCBAQAogCW9mZiAtPSBRTENOSUNfUENJX0NSQlNQQUNFOwogCiAJd2luZG93ID0gQ1JCX0hJKG9mZik7CisJaWYgKHdpbmRvdyA9PSAwKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIkludmFsaWQgb2Zmc2V0IDB4JWx4XG4iLCBvZmYpOworCQlyZXR1cm4gLUVJTzsKKwl9CiAKIAl3cml0ZWwod2luZG93LCBhZGRyKTsKIAlpZiAocmVhZGwoYWRkcikgIT0gd2luZG93KSB7CkBAIC03ODIsNyArNzkxLDkgQEAKIAkJCWRldl93YXJuKCZhZGFwdGVyLT5wZGV2LT5kZXYsCiAJCQkJImZhaWxlZCB0byBzZXQgQ1JCIHdpbmRvdyB0byAlZCBvZmYgMHglbHhcbiIsCiAJCQkJd2luZG93LCBvZmYpOworCQlyZXR1cm4gLUVJTzsKIAl9CisJcmV0dXJuIDA7CiB9CiAKIGludApAQCAtODAzLDExICs4MTQsMTIgQEAKIAkJLyogaW5kaXJlY3QgYWNjZXNzICovCiAJCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+YWh3LmNyYl9sb2NrLCBmbGFncyk7CiAJCWNyYl93aW5fbG9jayhhZGFwdGVyKTsKLQkJcWxjbmljX3BjaV9zZXRfY3Jid2luZG93XzJNKGFkYXB0ZXIsIG9mZik7Ci0JCXdyaXRlbChkYXRhLCBhZGRyKTsKKwkJcnYgPSBxbGNuaWNfcGNpX3NldF9jcmJ3aW5kb3dfMk0oYWRhcHRlciwgb2ZmKTsKKwkJaWYgKCFydikKKwkJCXdyaXRlbChkYXRhLCBhZGRyKTsKIAkJY3JiX3dpbl91bmxvY2soYWRhcHRlcik7CiAJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5haHcuY3JiX2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBydjsKIAl9CiAKIAlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCkBAIC04MjEsNyArODMzLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBydjsKLQl1MzIgZGF0YTsKKwl1MzIgZGF0YSA9IC0xOwogCXZvaWQgX19pb21lbSAqYWRkciA9IE5VTEw7CiAKIAlydiA9IHFsY25pY19wY2lfZ2V0X2NyYl9hZGRyXzJNKGFkYXB0ZXIsIG9mZiwgJmFkZHIpOwpAQCAtODMzLDggKzg0NSw4IEBACiAJCS8qIGluZGlyZWN0IGFjY2VzcyAqLwogCQl3cml0ZV9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmFody5jcmJfbG9jaywgZmxhZ3MpOwogCQljcmJfd2luX2xvY2soYWRhcHRlcik7Ci0JCXFsY25pY19wY2lfc2V0X2NyYndpbmRvd18yTShhZGFwdGVyLCBvZmYpOwotCQlkYXRhID0gcmVhZGwoYWRkcik7CisJCWlmICghcWxjbmljX3BjaV9zZXRfY3Jid2luZG93XzJNKGFkYXB0ZXIsIG9mZikpCisJCQlkYXRhID0gcmVhZGwoYWRkcik7CiAJCWNyYl93aW5fdW5sb2NrKGFkYXB0ZXIpOwogCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWh3LmNyYl9sb2NrLCBmbGFncyk7CiAJCXJldHVybiBkYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19pbml0LmMgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2luaXQuYwppbmRleCA3MWE0ZTY2Li43NWJhNzQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2luaXQuYworKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2luaXQuYwpAQCAtMTEyLDE4ICsxMTIsNDUgQEAKIAkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKIAkJZm9yIChpID0gMDsgaSA8IHJkc19yaW5nLT5udW1fZGVzYzsgKytpKSB7CiAJCQlyeF9idWYgPSAmKHJkc19yaW5nLT5yeF9idWZfYXJyW2ldKTsKLQkJCWlmIChyeF9idWYtPnN0YXRlID09IFFMQ05JQ19CVUZGRVJfRlJFRSkKKwkJCWlmIChyeF9idWYtPnNrYiA9PSBOVUxMKQogCQkJCWNvbnRpbnVlOworCiAJCQlwY2lfdW5tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsCiAJCQkJCXJ4X2J1Zi0+ZG1hLAogCQkJCQlyZHNfcmluZy0+ZG1hX3NpemUsCiAJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlpZiAocnhfYnVmLT5za2IgIT0gTlVMTCkKLQkJCQlkZXZfa2ZyZWVfc2tiX2FueShyeF9idWYtPnNrYik7CisKKwkJCWRldl9rZnJlZV9za2JfYW55KHJ4X2J1Zi0+c2tiKTsKIAkJfQogCX0KIH0KIAordm9pZCBxbGNuaWNfcmVzZXRfcnhfYnVmZmVyc19saXN0KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHg7CisJc3RydWN0IHFsY25pY19ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKKwlzdHJ1Y3QgcWxjbmljX3J4X2J1ZmZlciAqcnhfYnVmOworCWludCBpLCByaW5nOworCisJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOworCisJCXNwaW5fbG9jaygmcmRzX3JpbmctPmxvY2spOworCisJCUlOSVRfTElTVF9IRUFEKCZyZHNfcmluZy0+ZnJlZV9saXN0KTsKKworCQlyeF9idWYgPSByZHNfcmluZy0+cnhfYnVmX2FycjsKKwkJZm9yIChpID0gMDsgaSA8IHJkc19yaW5nLT5udW1fZGVzYzsgaSsrKSB7CisJCQlsaXN0X2FkZF90YWlsKCZyeF9idWYtPmxpc3QsCisJCQkJCSZyZHNfcmluZy0+ZnJlZV9saXN0KTsKKwkJCXJ4X2J1ZisrOworCQl9CisKKwkJc3Bpbl91bmxvY2soJnJkc19yaW5nLT5sb2NrKTsKKwl9Cit9CisKIHZvaWQgcWxjbmljX3JlbGVhc2VfdHhfYnVmZmVycyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IHFsY25pY19jbWRfYnVmZmVyICpjbWRfYnVmOwpAQCAtMTgxLDcgKzIwOCw5IEBACiAKIAl0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZzsKIAl2ZnJlZSh0eF9yaW5nLT5jbWRfYnVmX2Fycik7CisJdHhfcmluZy0+Y21kX2J1Zl9hcnIgPSBOVUxMOwogCWtmcmVlKGFkYXB0ZXItPnR4X3JpbmcpOworCWFkYXB0ZXItPnR4X3JpbmcgPSBOVUxMOwogfQogCiBpbnQgcWxjbmljX2FsbG9jX3N3X3Jlc291cmNlcyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC0yNjQsNyArMjkzLDYgQEAKIAkJCWxpc3RfYWRkX3RhaWwoJnJ4X2J1Zi0+bGlzdCwKIAkJCQkJJnJkc19yaW5nLT5mcmVlX2xpc3QpOwogCQkJcnhfYnVmLT5yZWZfaGFuZGxlID0gaTsKLQkJCXJ4X2J1Zi0+c3RhdGUgPSBRTENOSUNfQlVGRkVSX0ZSRUU7CiAJCQlyeF9idWYrKzsKIAkJfQogCQlzcGluX2xvY2tfaW5pdCgmcmRzX3JpbmctPmxvY2spOwpAQCAtNDEzLDcgKzQ0MSw3IEBACiAKIAkvKiByZXNldGFsbCAqLwogCXFsY25pY19yb21fbG9jayhhZGFwdGVyKTsKLQlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19ST01VU0JfR0xCX1NXX1JFU0VULCAweGZmZmZmZmZmKTsKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19ST01VU0JfR0xCX1NXX1JFU0VULCAweGZlZmZmZmZmKTsKIAlxbGNuaWNfcm9tX3VubG9jayhhZGFwdGVyKTsKIAogCWlmIChxbGNuaWNfcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCAwLCAmbikgIT0gMCB8fCAobiAhPSAweGNhZmVjYWZlKSB8fApAQCAtNTIxLDE2ICs1NDksMTMgQEAKIAl1MzIgdmFsOwogCiAJdmFsID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfQ1JCX0RFVl9QQVJUSVRJT05fSU5GTyk7Ci0JdmFsID0gKHZhbCA+PiAoYWRhcHRlci0+cG9ydG51bSAqIDQpKSAmIDB4ZjsKLQotCWlmICgodmFsICYgMHgzKSAhPSAxKSB7Ci0JCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIk5vdCBhbiBFdGhlcm5ldCBOSUMgZnVuYz0ldVxuIiwKLQkJCQkJCQkJCXZhbCk7CisJdmFsID0gUUxDX0RFVl9HRVRfRFJWKHZhbCwgYWRhcHRlci0+cG9ydG51bSk7CisJaWYgKCh2YWwgJiAweDMpICE9IFFMQ05JQ19UWVBFX05JQykgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiTm90IGFuIEV0aGVybmV0IE5JQyBmdW5jPSV1XG4iLCB2YWwpOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0KIAlhZGFwdGVyLT5waHlzaWNhbF9wb3J0ID0gKHZhbCA+PiAyKTsKLQogCWlmIChxbGNuaWNfcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBRTENOSUNfUk9NX0RFVl9JTklUX1RJTUVPVVQsICZ0aW1lbykpCiAJCXRpbWVvID0gMzA7CiAKQEAgLTU0NCwxNiArNTY5LDM0IEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludAorcWxjbmljX2NoZWNrX2ZsYXNoX2Z3X3ZlcihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIHZlciA9IC0xLCBtaW5fdmVyOworCisJcWxjbmljX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgUUxDTklDX0ZXX1ZFUlNJT05fT0ZGU0VULCAoaW50ICopJnZlcik7CisKKwl2ZXIgPSBRTENOSUNfREVDT0RFX1ZFUlNJT04odmVyKTsKKwltaW5fdmVyID0gUUxDTklDX01JTl9GV19WRVJTSU9OOworCisJaWYgKHZlciA8IG1pbl92ZXIpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJImZpcm13YXJlIHZlcnNpb24gJWQuJWQuJWQgdW5zdXBwb3J0ZWQuIgorCQkJIk1pbiBzdXBwb3J0ZWQgdmVyc2lvbiAlZC4lZC4lZFxuIiwKKwkJCV9tYWpvcih2ZXIpLCBfbWlub3IodmVyKSwgX2J1aWxkKHZlciksCisJCQlfbWFqb3IobWluX3ZlciksIF9taW5vcihtaW5fdmVyKSwgX2J1aWxkKG1pbl92ZXIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQKIHFsY25pY19oYXNfbW4oc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQogewotCXUzMiBjYXBhYmlsaXR5LCBmbGFzaGVkX3ZlcjsKKwl1MzIgY2FwYWJpbGl0eTsKIAljYXBhYmlsaXR5ID0gMDsKIAotCXFsY25pY19yb21fZmFzdF9yZWFkKGFkYXB0ZXIsCi0JCQlRTENOSUNfRldfVkVSU0lPTl9PRkZTRVQsIChpbnQgKikmZmxhc2hlZF92ZXIpOwotCWZsYXNoZWRfdmVyID0gUUxDTklDX0RFQ09ERV9WRVJTSU9OKGZsYXNoZWRfdmVyKTsKLQogCWNhcGFiaWxpdHkgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19QRUdfVFVORV9DQVBBQklMSVRZKTsKIAlpZiAoY2FwYWJpbGl0eSAmIFFMQ05JQ19QRUdfVFVORV9NTl9QUkVTRU5UKQogCQlyZXR1cm4gMTsKQEAgLTEwMDcsNyArMTA1MCw3IEBACiBxbGNuaWNfdmFsaWRhdGVfZmlybXdhcmUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQogewogCV9fbGUzMiB2YWw7Ci0JdTMyIHZlciwgbWluX3ZlciwgYmlvcywgbWluX3NpemU7CisJdTMyIHZlciwgYmlvcywgbWluX3NpemU7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBhZGFwdGVyLT5mdzsKIAl1OCBmd190eXBlID0gYWRhcHRlci0+ZndfdHlwZTsKQEAgLTEwMjksMTIgKzEwNzIsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXZhbCA9IHFsY25pY19nZXRfZndfdmVyc2lvbihhZGFwdGVyKTsKLQotCW1pbl92ZXIgPSBRTENOSUNfVkVSU0lPTl9DT0RFKDQsIDAsIDIxNik7Ci0KIAl2ZXIgPSBRTENOSUNfREVDT0RFX1ZFUlNJT04odmFsKTsKIAotCWlmICgoX21ham9yKHZlcikgPiBfUUxDTklDX0xJTlVYX01BSk9SKSB8fCAodmVyIDwgbWluX3ZlcikpIHsKKwlpZiAodmVyIDwgUUxDTklDX01JTl9GV19WRVJTSU9OKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwKIAkJCQkiJXM6IGZpcm13YXJlIHZlcnNpb24gJWQuJWQuJWQgdW5zdXBwb3J0ZWRcbiIsCiAJCWZ3X25hbWVbZndfdHlwZV0sIF9tYWpvcih2ZXIpLCBfbWlub3IodmVyKSwgX2J1aWxkKHZlcikpOwpAQCAtMTEyMiw3ICsxMTYyLDcgQEAKIAlhZGFwdGVyLT5mdyA9IE5VTEw7CiB9CiAKLWludCBxbGNuaWNfcGhhbnRvbV9pbml0KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgcWxjbmljX2NtZF9wZWdfcmVhZHkoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQogewogCXUzMiB2YWw7CiAJaW50IHJldHJpZXMgPSA2MDsKQEAgLTExNDcsNyArMTE4Nyw4IEBACiAJUUxDV1IzMihhZGFwdGVyLCBDUkJfQ01EUEVHX1NUQVRFLCBQSEFOX0lOSVRJQUxJWkVfRkFJTEVEKTsKIAogb3V0X2VycjoKLQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJmaXJtd2FyZSBpbml0IGZhaWxlZFxuIik7CisJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiQ29tbWFuZCBQZWcgaW5pdGlhbGl6YXRpb24gbm90ICIKKwkJICAgICAgImNvbXBsZXRlLCBzdGF0ZTogMHgleC5cbiIsIHZhbCk7CiAJcmV0dXJuIC1FSU87CiB9CiAKQEAgLTExODAsNiArMTIyMSwxMCBAQAogewogCWludCBlcnI7CiAKKwllcnIgPSBxbGNuaWNfY21kX3BlZ19yZWFkeShhZGFwdGVyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCiAJZXJyID0gcWxjbmljX3JlY2VpdmVfcGVnX3JlYWR5KGFkYXB0ZXIpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0xMjY1LDE0ICsxMzEwLDEyIEBACiAJZG1hX2FkZHJfdCBkbWE7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCi0JYnVmZmVyLT5za2IgPSBkZXZfYWxsb2Nfc2tiKHJkc19yaW5nLT5za2Jfc2l6ZSk7Ci0JaWYgKCFidWZmZXItPnNrYikgeworCXNrYiA9IGRldl9hbGxvY19za2IocmRzX3JpbmctPnNrYl9zaXplKTsKKwlpZiAoIXNrYikgewogCQlhZGFwdGVyLT5zdGF0cy5za2JfYWxsb2NfZmFpbHVyZSsrOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlza2IgPSBidWZmZXItPnNrYjsKLQogCXNrYl9yZXNlcnZlKHNrYiwgMik7CiAKIAlkbWEgPSBwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsCkBAIC0xMjgxLDEzICsxMzI0LDExIEBACiAJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihwZGV2LCBkbWEpKSB7CiAJCWFkYXB0ZXItPnN0YXRzLnJ4X2RtYV9tYXBfZXJyb3IrKzsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJYnVmZmVyLT5za2IgPSBOVUxMOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlidWZmZXItPnNrYiA9IHNrYjsKIAlidWZmZXItPmRtYSA9IGRtYTsKLQlidWZmZXItPnN0YXRlID0gUUxDTklDX0JVRkZFUl9CVVNZOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzAwLDE0ICsxMzQxLDE1IEBACiAKIAlidWZmZXIgPSAmcmRzX3JpbmctPnJ4X2J1Zl9hcnJbaW5kZXhdOwogCisJaWYgKHVubGlrZWx5KGJ1ZmZlci0+c2tiID09IE5VTEwpKSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybiBOVUxMOworCX0KKwogCXBjaV91bm1hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwgYnVmZmVyLT5kbWEsIHJkc19yaW5nLT5kbWFfc2l6ZSwKIAkJCVBDSV9ETUFfRlJPTURFVklDRSk7CiAKIAlza2IgPSBidWZmZXItPnNrYjsKLQlpZiAoIXNrYikgewotCQlhZGFwdGVyLT5zdGF0cy5udWxsX3NrYisrOwotCQlnb3RvIG5vX3NrYjsKLQl9CiAKIAlpZiAobGlrZWx5KGFkYXB0ZXItPnJ4X2NzdW0gJiYgY2tzdW0gPT0gU1RBVFVTX0NLU1VNX09LKSkgewogCQlhZGFwdGVyLT5zdGF0cy5jc3VtbWVkKys7CkBAIC0xMzE5LDggKzEzNjEsNyBAQAogCXNrYi0+ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCiAJYnVmZmVyLT5za2IgPSBOVUxMOwotbm9fc2tiOgotCWJ1ZmZlci0+c3RhdGUgPSBRTENOSUNfQlVGRkVSX0ZSRUU7CisKIAlyZXR1cm4gc2tiOwogfQogCkBAIC0xNDk1LDcgKzE1MzYsNyBAQAogCiAJCVdBUk5fT04oZGVzY19jbnQgPiAxKTsKIAotCQlpZiAocnhidWYpCisJCWlmIChsaWtlbHkocnhidWYpKQogCQkJbGlzdF9hZGRfdGFpbCgmcnhidWYtPmxpc3QsICZzZHNfcmluZy0+ZnJlZV9saXN0W3JpbmddKTsKIAkJZWxzZQogCQkJYWRhcHRlci0+c3RhdHMubnVsbF9yeGJ1ZisrOwpAQCAtMTcwMSwzICsxNzQyLDI0IEBACiAJc2RzX3JpbmctPmNvbnN1bWVyID0gY29uc3VtZXI7CiAJd3JpdGVsKGNvbnN1bWVyLCBzZHNfcmluZy0+Y3JiX3N0c19jb25zdW1lcik7CiB9CisKK3ZvaWQKK3FsY25pY19mZXRjaF9tYWMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1MzIgb2ZmMSwgdTMyIG9mZjIsCisJCQl1OCBhbHRfbWFjLCB1OCAqbWFjKQoreworCXUzMiBtYWNfbG93LCBtYWNfaGlnaDsKKwlpbnQgaTsKKworCW1hY19sb3cgPSBRTENSRDMyKGFkYXB0ZXIsIG9mZjEpOworCW1hY19oaWdoID0gUUxDUkQzMihhZGFwdGVyLCBvZmYyKTsKKworCWlmIChhbHRfbWFjKSB7CisJCW1hY19sb3cgfD0gKG1hY19sb3cgPj4gMTYpIHwgKG1hY19oaWdoIDw8IDE2KTsKKwkJbWFjX2hpZ2ggPj49IDE2OworCX0KKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCW1hY1tpXSA9ICh1OCkobWFjX2hpZ2ggPj4gKCgxIC0gaSkgKiA4KSk7CisJZm9yIChpID0gMjsgaSA8IDY7IGkrKykKKwkJbWFjW2ldID0gKHU4KShtYWNfbG93ID4+ICgoNSAtIGkpICogOCkpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19tYWluLmMgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX21haW4uYwppbmRleCAyM2VhOWNhLi5iOTYxNWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX21haW4uYwpAQCAtMzQsMTUgKzM0LDE2IEBACiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Flci5oPgogCi1NT0RVTEVfREVTQ1JJUFRJT04oIlFMb2dpYyAxMCBHYkUgQ29udmVyZ2VkIEV0aGVybmV0IERyaXZlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJRTG9naWMgMS8xMCBHYkUgQ29udmVyZ2VkL0ludGVsbGlnZW50IEV0aGVybmV0IERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1ZFUlNJT04oUUxDTklDX0xJTlVYX1ZFUlNJT05JRCk7CiBNT0RVTEVfRklSTVdBUkUoUUxDTklDX1VOSUZJRURfUk9NSU1BR0VfTkFNRSk7CiAKIGNoYXIgcWxjbmljX2RyaXZlcl9uYW1lW10gPSAicWxjbmljIjsKLXN0YXRpYyBjb25zdCBjaGFyIHFsY25pY19kcml2ZXJfc3RyaW5nW10gPSAiUUxvZ2ljIENvbnZlcmdlZCBFdGhlcm5ldCBEcml2ZXIgdiIKLSAgICBRTENOSUNfTElOVVhfVkVSU0lPTklEOworc3RhdGljIGNvbnN0IGNoYXIgcWxjbmljX2RyaXZlcl9zdHJpbmdbXSA9ICJRTG9naWMgMS8xMCBHYkUgIgorCSJDb252ZXJnZWQvSW50ZWxsaWdlbnQgRXRoZXJuZXQgRHJpdmVyIHYiIFFMQ05JQ19MSU5VWF9WRVJTSU9OSUQ7CiAKIHN0YXRpYyBpbnQgcG9ydF9tb2RlID0gUUxDTklDX1BPUlRfTU9ERV9BVVRPX05FRzsKIApAQCAtNjUsMTMgKzY2LDE2IEBACiBtb2R1bGVfcGFyYW0obG9hZF9md19maWxlLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhsb2FkX2Z3X2ZpbGUsICJMb2FkIGZpcm13YXJlIGZyb20gKDA9Zmxhc2gsIDE9ZmlsZSIpOwogCitzdGF0aWMgaW50IHFsY25pY19jb25maWdfbnBhcnM7Cittb2R1bGVfcGFyYW0ocWxjbmljX2NvbmZpZ19ucGFycywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocWxjbmljX2NvbmZpZ19ucGFycywgIkNvbmZpZ3VyZSBOUEFScyAoMD1kaXNhYmxlZCwgMT1lbmFibGVkIik7CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IHFsY25pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCk7CiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgcWxjbmljX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiBzdGF0aWMgaW50IHFsY25pY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogc3RhdGljIGludCBxbGNuaWNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiBzdGF0aWMgdm9pZCBxbGNuaWNfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKLXN0YXRpYyB2b2lkIHFsY25pY190eF90aW1lb3V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHN0YXRpYyB2b2lkIHFsY25pY19hdHRhY2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogc3RhdGljIHZvaWQgcWxjbmljX2Z3aW5pdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBzdGF0aWMgdm9pZCBxbGNuaWNfZndfcG9sbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CkBAIC03OSw2ICs4Myw3IEBACiAJCXdvcmtfZnVuY190IGZ1bmMsIGludCBkZWxheSk7CiBzdGF0aWMgdm9pZCBxbGNuaWNfY2FuY2VsX2Z3X3dvcmsoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKTsKIHN0YXRpYyBpbnQgcWxjbmljX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KTsKK3N0YXRpYyBpbnQgcWxjbmljX3J4X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KTsKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogc3RhdGljIHZvaWQgcWxjbmljX3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKICNlbmRpZgpAQCAtOTksNyArMTA0LDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcWxjbmljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIHN0YXRpYyB2b2lkIHFsY25pY19jb25maWdfaW5kZXZfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyBpbnQgcWxjbmljX3N0YXJ0X2Zpcm13YXJlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqKTsKIAorc3RhdGljIHZvaWQgcWxjbmljX2Rldl9zZXRfbnBhcl9yZWFkeShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKik7CitzdGF0aWMgaW50IHFsY25pY3ZmX2NvbmZpZ19sZWQoc3RydWN0IHFsY25pY19hZGFwdGVyICosIHUzMiwgdTMyKTsKK3N0YXRpYyBpbnQgcWxjbmljdmZfY29uZmlnX2JyaWRnZWRfbW9kZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKiwgdTMyKTsKK3N0YXRpYyBpbnQgcWxjbmljdmZfc3RhcnRfZmlybXdhcmUoc3RydWN0IHFsY25pY19hZGFwdGVyICopOwogLyogIFBDSSBEZXZpY2UgSUQgVGFibGUgICovCiAjZGVmaW5lIEVOVFJZKGRldmljZSkgXAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUUxPR0lDLCAoZGV2aWNlKSksIFwKQEAgLTEyMCwxMiArMTMwLDYgQEAKIAkJc3RydWN0IHFsY25pY19ob3N0X3R4X3JpbmcgKnR4X3JpbmcpCiB7CiAJd3JpdGVsKHR4X3JpbmctPnByb2R1Y2VyLCB0eF9yaW5nLT5jcmJfY21kX3Byb2R1Y2VyKTsKLQotCWlmIChxbGNuaWNfdHhfYXZhaWwodHhfcmluZykgPD0gVFhfU1RPUF9USFJFU0gpIHsKLQkJbmV0aWZfc3RvcF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOwotCQlzbXBfbWIoKTsKLQkJYWRhcHRlci0+c3RhdHMueG1pdF9vZmYrKzsKLQl9CiB9CiAKIHN0YXRpYyBjb25zdCB1MzIgbXNpX3RndF9zdGF0dXNbOF0gPSB7CkBAIC0xODQsOCArMTg4LDEzIEBACiAKIAlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Nkc19yaW5nczsgcmluZysrKSB7CiAJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbcmluZ107Ci0JCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJnNkc19yaW5nLT5uYXBpLAotCQkJCXFsY25pY19wb2xsLCBRTENOSUNfTkVUREVWX1dFSUdIVCk7CisKKwkJaWYgKHJpbmcgPT0gYWRhcHRlci0+bWF4X3Nkc19yaW5ncyAtIDEpCisJCQluZXRpZl9uYXBpX2FkZChuZXRkZXYsICZzZHNfcmluZy0+bmFwaSwgcWxjbmljX3BvbGwsCisJCQkJUUxDTklDX05FVERFVl9XRUlHSFQvYWRhcHRlci0+bWF4X3Nkc19yaW5ncyk7CisJCWVsc2UKKwkJCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJnNkc19yaW5nLT5uYXBpLAorCQkJCXFsY25pY19yeF9wb2xsLCBRTENOSUNfTkVUREVWX1dFSUdIVCoyKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTMwNywxOSArMzE2LDE0IEBACiBzdGF0aWMgaW50CiBxbGNuaWNfcmVhZF9tYWNfYWRkcihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JaW50IGk7Ci0JdW5zaWduZWQgY2hhciAqcDsKLQl1NjQgbWFjX2FkZHI7CisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCi0JaWYgKHFsY25pY19nZXRfbWFjX2FkZHIoYWRhcHRlciwgJm1hY19hZGRyKSAhPSAwKQorCWlmIChhZGFwdGVyLT5uaWNfb3BzLT5nZXRfbWFjX2FkZHIoYWRhcHRlciwgbWFjX2FkZHIpICE9IDApCiAJCXJldHVybiAtRUlPOwogCi0JcCA9ICh1bnNpZ25lZCBjaGFyICopJm1hY19hZGRyOwotCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0JCW5ldGRldi0+ZGV2X2FkZHJbaV0gPSAqKHAgKyA1IC0gaSk7Ci0KKwltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgbWFjX2FkZHIsIEVUSF9BTEVOKTsKIAltZW1jcHkobmV0ZGV2LT5wZXJtX2FkZHIsIG5ldGRldi0+ZGV2X2FkZHIsIG5ldGRldi0+YWRkcl9sZW4pOwogCW1lbWNweShhZGFwdGVyLT5tYWNfYWRkciwgbmV0ZGV2LT5kZXZfYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CiAKQEAgLTM0MCw3ICszNDQsNyBAQAogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLT5zYV9kYXRhKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJaWYgKHRlc3RfYml0KF9fUUxDTklDX0RFVl9VUCwgJmFkYXB0ZXItPnN0YXRlKSkgewogCQluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CiAJCXFsY25pY19uYXBpX2Rpc2FibGUoYWRhcHRlcik7CiAJfQpAQCAtMzQ5LDcgKzM1Myw3IEBACiAJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOwogCXFsY25pY19zZXRfbXVsdGkoYWRhcHRlci0+bmV0ZGV2KTsKIAotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwlpZiAodGVzdF9iaXQoX19RTENOSUNfREVWX1VQLCAmYWRhcHRlci0+c3RhdGUpKSB7CiAJCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKIAkJcWxjbmljX25hcGlfZW5hYmxlKGFkYXB0ZXIpOwogCX0KQEAgLTM3MSw2ICszNzUsMjAgQEAKICNlbmRpZgogfTsKIAorc3RhdGljIHN0cnVjdCBxbGNuaWNfbmljX3RlbXBsYXRlIHFsY25pY19vcHMgPSB7CisJLmdldF9tYWNfYWRkciA9IHFsY25pY19nZXRfbWFjX2FkZHJlc3MsCisJLmNvbmZpZ19icmlkZ2VkX21vZGUgPSBxbGNuaWNfY29uZmlnX2JyaWRnZWRfbW9kZSwKKwkuY29uZmlnX2xlZCA9IHFsY25pY19jb25maWdfbGVkLAorCS5zdGFydF9maXJtd2FyZSA9IHFsY25pY19zdGFydF9maXJtd2FyZQorfTsKKworc3RhdGljIHN0cnVjdCBxbGNuaWNfbmljX3RlbXBsYXRlIHFsY25pY192Zl9vcHMgPSB7CisJLmdldF9tYWNfYWRkciA9IHFsY25pY19nZXRfbWFjX2FkZHJlc3MsCisJLmNvbmZpZ19icmlkZ2VkX21vZGUgPSBxbGNuaWN2Zl9jb25maWdfYnJpZGdlZF9tb2RlLAorCS5jb25maWdfbGVkID0gcWxjbmljdmZfY29uZmlnX2xlZCwKKwkuc3RhcnRfZmlybXdhcmUgPSBxbGNuaWN2Zl9zdGFydF9maXJtd2FyZQorfTsKKwogc3RhdGljIHZvaWQKIHFsY25pY19zZXR1cF9pbnRyKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKIHsKQEAgLTQ1Myw2ICs0NzEsMTY5IEBACiB9CiAKIHN0YXRpYyBpbnQKK3FsY25pY19pbml0X3BjaV9pbmZvKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgcWxjbmljX3BjaV9pbmZvIHBjaV9pbmZvW1FMQ05JQ19NQVhfUENJX0ZVTkNdOworCWludCBpLCByZXQgPSAwLCBlcnI7CisJdTggcGZuOworCisJaWYgKCFhZGFwdGVyLT5ucGFycykKKwkJYWRhcHRlci0+bnBhcnMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcWxjbmljX25wYXJfaW5mbykgKgorCQkJCVFMQ05JQ19NQVhfUENJX0ZVTkMsIEdGUF9LRVJORUwpOworCWlmICghYWRhcHRlci0+bnBhcnMpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKCFhZGFwdGVyLT5lc3dpdGNoKQorCQlhZGFwdGVyLT5lc3dpdGNoID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHFsY25pY19lc3dpdGNoKSAqCisJCQkJUUxDTklDX05JVV9NQVhfWEdfUE9SVFMsIEdGUF9LRVJORUwpOworCWlmICghYWRhcHRlci0+ZXN3aXRjaCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9lc3dpdGNoOworCX0KKworCXJldCA9IHFsY25pY19nZXRfcGNpX2luZm8oYWRhcHRlciwgcGNpX2luZm8pOworCWlmICghcmV0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBRTENOSUNfTUFYX1BDSV9GVU5DOyBpKyspIHsKKwkJCXBmbiA9IHBjaV9pbmZvW2ldLmlkOworCQkJaWYgKHBmbiA+IFFMQ05JQ19NQVhfUENJX0ZVTkMpCisJCQkJcmV0dXJuIFFMX1NUQVRVU19JTlZBTElEX1BBUkFNOworCQkJYWRhcHRlci0+bnBhcnNbcGZuXS5hY3RpdmUgPSBwY2lfaW5mb1tpXS5hY3RpdmU7CisJCQlhZGFwdGVyLT5ucGFyc1twZm5dLnR5cGUgPSBwY2lfaW5mb1tpXS50eXBlOworCQkJYWRhcHRlci0+bnBhcnNbcGZuXS5waHlfcG9ydCA9IHBjaV9pbmZvW2ldLmRlZmF1bHRfcG9ydDsKKwkJCWFkYXB0ZXItPm5wYXJzW3Bmbl0ubWFjX2xlYXJuaW5nID0gREVGQVVMVF9NQUNfTEVBUk47CisJCQlhZGFwdGVyLT5ucGFyc1twZm5dLm1pbl9idyA9IHBjaV9pbmZvW2ldLnR4X21pbl9idzsKKwkJCWFkYXB0ZXItPm5wYXJzW3Bmbl0ubWF4X2J3ID0gcGNpX2luZm9baV0udHhfbWF4X2J3OworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IFFMQ05JQ19OSVVfTUFYX1hHX1BPUlRTOyBpKyspCisJCQlhZGFwdGVyLT5lc3dpdGNoW2ldLmZsYWdzIHw9IFFMQ05JQ19TV0lUQ0hfRU5BQkxFOworCisJCXJldHVybiByZXQ7CisJfQorCisJa2ZyZWUoYWRhcHRlci0+ZXN3aXRjaCk7CisJYWRhcHRlci0+ZXN3aXRjaCA9IE5VTEw7CitlcnJfZXN3aXRjaDoKKwlrZnJlZShhZGFwdGVyLT5ucGFycyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitxbGNuaWNfc2V0X2Z1bmN0aW9uX21vZGVzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1OCBpZDsKKwl1MzIgcmVmX2NvdW50OworCWludCBpLCByZXQgPSAxOworCXUzMiBkYXRhID0gUUxDTklDX01HTVRfRlVOQzsKKwl2b2lkIF9faW9tZW0gKnByaXZfb3AgPSBhZGFwdGVyLT5haHcucGNpX2Jhc2UwICsgUUxDTklDX0RSVl9PUF9NT0RFOworCisJLyogSWYgb3RoZXIgZHJpdmVycyBhcmUgbm90IGluIHVzZSBzZXQgdGhlaXIgcHJpdmlsZWdlIGxldmVsICovCisJcmVmX2NvdW50ID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfQ1JCX0RFVl9SRUZfQ09VTlQpOworCXJldCA9IHFsY25pY19hcGlfbG9jayhhZGFwdGVyKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9sb2NrOworCWlmIChRTENfREVWX0NMUl9SRUZfQ05UKHJlZl9jb3VudCwgYWRhcHRlci0+YWh3LnBjaV9mdW5jKSkKKwkJZ290byBlcnJfbnBhcjsKKworCWlmIChxbGNuaWNfY29uZmlnX25wYXJzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBRTENOSUNfTUFYX1BDSV9GVU5DOyBpKyspIHsKKwkJCWlkID0gaTsKKwkJCWlmIChhZGFwdGVyLT5ucGFyc1tpXS50eXBlICE9IFFMQ05JQ19UWVBFX05JQyB8fAorCQkJCWlkID09IGFkYXB0ZXItPmFody5wY2lfZnVuYykKKwkJCQljb250aW51ZTsKKwkJCWRhdGEgfD0gKHFsY25pY19jb25maWdfbnBhcnMgJgorCQkJCQlRTENfREVWX1NFVF9EUlYoMHhmLCBpZCkpOworCQl9CisJfSBlbHNlIHsKKwkJZGF0YSA9IHJlYWRsKHByaXZfb3ApOworCQlkYXRhID0gKGRhdGEgJiB+UUxDX0RFVl9TRVRfRFJWKDB4ZiwgYWRhcHRlci0+YWh3LnBjaV9mdW5jKSkgfAorCQkJKFFMQ19ERVZfU0VUX0RSVihRTENOSUNfTUdNVF9GVU5DLAorCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jKSk7CisJfQorCXdyaXRlbChkYXRhLCBwcml2X29wKTsKK2Vycl9ucGFyOgorCXFsY25pY19hcGlfdW5sb2NrKGFkYXB0ZXIpOworZXJyX2xvY2s6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHUzMgorcWxjbmljX2dldF9kcml2ZXJfbW9kZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdm9pZCBfX2lvbWVtICptc2l4X2Jhc2VfYWRkcjsKKwl2b2lkIF9faW9tZW0gKnByaXZfb3A7CisJc3RydWN0IHFsY25pY19pbmZvIG5pY19pbmZvOworCXUzMiBmdW5jOworCXUzMiBtc2l4X2Jhc2U7CisJdTMyIG9wX21vZGUsIHByaXZfbGV2ZWw7CisKKwkvKiBEZXRlcm1pbmUgRlcgQVBJIHZlcnNpb24gKi8KKwlhZGFwdGVyLT5md19oYWxfdmVyc2lvbiA9IHJlYWRsKGFkYXB0ZXItPmFody5wY2lfYmFzZTAgKyBRTENOSUNfRldfQVBJKTsKKworCS8qIEZpbmQgUENJIGZ1bmN0aW9uIG51bWJlciAqLworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChhZGFwdGVyLT5wZGV2LCBRTENOSUNfTVNJWF9UQUJMRV9PRkZTRVQsICZmdW5jKTsKKwltc2l4X2Jhc2VfYWRkciA9IGFkYXB0ZXItPmFody5wY2lfYmFzZTAgKyBRTENOSUNfTVNJWF9CQVNFOworCW1zaXhfYmFzZSA9IHJlYWRsKG1zaXhfYmFzZV9hZGRyKTsKKwlmdW5jID0gKGZ1bmMgLSBtc2l4X2Jhc2UpL1FMQ05JQ19NU0lYX1RCTF9QR1NJWkU7CisJYWRhcHRlci0+YWh3LnBjaV9mdW5jID0gZnVuYzsKKworCWlmICghcWxjbmljX2dldF9uaWNfaW5mbyhhZGFwdGVyLCAmbmljX2luZm8sIGFkYXB0ZXItPmFody5wY2lfZnVuYykpIHsKKwkJYWRhcHRlci0+Y2FwYWJpbGl0aWVzID0gbmljX2luZm8uY2FwYWJpbGl0aWVzOworCisJCWlmIChhZGFwdGVyLT5jYXBhYmlsaXRpZXMgJiBCSVRfNikKKwkJCWFkYXB0ZXItPmZsYWdzIHw9IFFMQ05JQ19FU1dJVENIX0VOQUJMRUQ7CisJCWVsc2UKKwkJCWFkYXB0ZXItPmZsYWdzICY9IH5RTENOSUNfRVNXSVRDSF9FTkFCTEVEOworCX0KKworCWlmICghKGFkYXB0ZXItPmZsYWdzICYgUUxDTklDX0VTV0lUQ0hfRU5BQkxFRCkpCXsKKwkJYWRhcHRlci0+bmljX29wcyA9ICZxbGNuaWNfb3BzOworCQlyZXR1cm4gYWRhcHRlci0+ZndfaGFsX3ZlcnNpb247CisJfQorCisJLyogRGV0ZXJtaW5lIGZ1bmN0aW9uIHByaXZpbGVnZSBsZXZlbCAqLworCXByaXZfb3AgPSBhZGFwdGVyLT5haHcucGNpX2Jhc2UwICsgUUxDTklDX0RSVl9PUF9NT0RFOworCW9wX21vZGUgPSByZWFkbChwcml2X29wKTsKKwlpZiAob3BfbW9kZSA9PSBRTENfREVWX0RSVl9ERUZBVUxUKQorCQlwcml2X2xldmVsID0gUUxDTklDX01HTVRfRlVOQzsKKwllbHNlCisJCXByaXZfbGV2ZWwgPSBRTENfREVWX0dFVF9EUlYob3BfbW9kZSwgYWRhcHRlci0+YWh3LnBjaV9mdW5jKTsKKworCXN3aXRjaCAocHJpdl9sZXZlbCkgeworCWNhc2UgUUxDTklDX01HTVRfRlVOQzoKKwkJYWRhcHRlci0+b3BfbW9kZSA9IFFMQ05JQ19NR01UX0ZVTkM7CisJCWFkYXB0ZXItPm5pY19vcHMgPSAmcWxjbmljX29wczsKKwkJcWxjbmljX2luaXRfcGNpX2luZm8oYWRhcHRlcik7CisJCS8qIFNldCBwcml2aWxlZ2UgbGV2ZWwgZm9yIG90aGVyIGZ1bmN0aW9ucyAqLworCQlxbGNuaWNfc2V0X2Z1bmN0aW9uX21vZGVzKGFkYXB0ZXIpOworCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIkhBTCBWZXJzaW9uOiAlZCwgTWFuYWdlbWVudCBmdW5jdGlvblxuIiwKKwkJCWFkYXB0ZXItPmZ3X2hhbF92ZXJzaW9uKTsKKwkJYnJlYWs7CisJY2FzZSBRTENOSUNfUFJJVl9GVU5DOgorCQlhZGFwdGVyLT5vcF9tb2RlID0gUUxDTklDX1BSSVZfRlVOQzsKKwkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJIQUwgVmVyc2lvbjogJWQsIFByaXZpbGVnZWQgZnVuY3Rpb25cbiIsCisJCQlhZGFwdGVyLT5md19oYWxfdmVyc2lvbik7CisJCWFkYXB0ZXItPm5pY19vcHMgPSAmcWxjbmljX29wczsKKwkJYnJlYWs7CisJY2FzZSBRTENOSUNfTk9OX1BSSVZfRlVOQzoKKwkJYWRhcHRlci0+b3BfbW9kZSA9IFFMQ05JQ19OT05fUFJJVl9GVU5DOworCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIkhBTCBWZXJzaW9uOiAlZCBOb24gUHJpdmlsZWdlZCBmdW5jdGlvblxuIiwKKwkJCWFkYXB0ZXItPmZ3X2hhbF92ZXJzaW9uKTsKKwkJYWRhcHRlci0+bmljX29wcyA9ICZxbGNuaWNfdmZfb3BzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAiVW5rbm93biBmdW5jdGlvbiBtb2RlOiAlZFxuIiwKKwkJCXByaXZfbGV2ZWwpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGFkYXB0ZXItPmZ3X2hhbF92ZXJzaW9uOworfQorCitzdGF0aWMgaW50CiBxbGNuaWNfc2V0dXBfcGNpX21hcChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJdm9pZCBfX2lvbWVtICptZW1fcHRyMCA9IE5VTEw7CkBAIC00NjAsNyArNjQxLDYgQEAKIAl1bnNpZ25lZCBsb25nIG1lbV9sZW4sIHBjaV9sZW4wID0gMDsKIAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKLQlpbnQgcGNpX2Z1bmMgPSBhZGFwdGVyLT5haHcucGNpX2Z1bmM7CiAKIAkvKiByZW1hcCBwaHlzIGFkZHJlc3MgKi8KIAltZW1fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsJLyogMCBpcyBmb3IgQkFSIDAgKi8KQEAgLTQ4Myw4ICs2NjMsMTMgQEAKIAlhZGFwdGVyLT5haHcucGNpX2Jhc2UwID0gbWVtX3B0cjA7CiAJYWRhcHRlci0+YWh3LnBjaV9sZW4wID0gcGNpX2xlbjA7CiAKKwlpZiAoIXFsY25pY19nZXRfZHJpdmVyX21vZGUoYWRhcHRlcikpIHsKKwkJaW91bm1hcChhZGFwdGVyLT5haHcucGNpX2Jhc2UwKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCiAJYWRhcHRlci0+YWh3Lm9jbV93aW5fY3JiID0gcWxjbmljX2dldF9pb2FkZHIoYWRhcHRlciwKLQkJUUxDTklDX1BDSVhfUFNfUkVHKFBDSVhfT0NNX1dJTkRPV19SRUcocGNpX2Z1bmMpKSk7CisJCVFMQ05JQ19QQ0lYX1BTX1JFRyhQQ0lYX09DTV9XSU5ET1dfUkVHKGFkYXB0ZXItPmFody5wY2lfZnVuYykpKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTA5LDcgKzY5NCw3IEBACiAJfQogCiAJaWYgKCFmb3VuZCkKLQkJbmFtZSA9ICJVbmtub3duIjsKKwkJc3ByaW50ZihuYW1lLCAiJXBNIEdpZ2FiaXQgRXRoZXJuZXQiLCBhZGFwdGVyLT5tYWNfYWRkcik7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC01MjEsNyArNzA2LDcgQEAKIAlpbnQgaSwgb2Zmc2V0LCB2YWw7CiAJaW50ICpwdHIzMjsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0KKwlzdHJ1Y3QgcWxjbmljX2luZm8gbmljX2luZm87CiAJYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoID0gMDsKIAogCXB0cjMyID0gKGludCAqKSZzZXJpYWxfbnVtOwpAQCAtNTUzLDggKzczOCw2IEBACiAJZGV2X2luZm8oJnBkZXYtPmRldiwgImZpcm13YXJlIHYlZC4lZC4lZFxuIiwKIAkJCWZ3X21ham9yLCBmd19taW5vciwgZndfYnVpbGQpOwogCi0JYWRhcHRlci0+Y2FwYWJpbGl0aWVzID0gUUxDUkQzMihhZGFwdGVyLCBDUkJfRldfQ0FQQUJJTElUSUVTXzEpOwotCiAJYWRhcHRlci0+ZmxhZ3MgJj0gflFMQ05JQ19MUk9fRU5BQkxFRDsKIAogCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IFFMQ05JQ19YR0JFKSB7CkBAIC01NjUsNiArNzQ4LDE2IEBACiAJCWFkYXB0ZXItPm51bV9qdW1ib19yeGQgPSBNQVhfSlVNQk9fUkNWX0RFU0NSSVBUT1JTXzFHOwogCX0KIAorCWlmICghcWxjbmljX2dldF9uaWNfaW5mbyhhZGFwdGVyLCAmbmljX2luZm8sIGFkYXB0ZXItPmFody5wY2lfZnVuYykpIHsKKwkJYWRhcHRlci0+cGh5c2ljYWxfcG9ydCA9IG5pY19pbmZvLnBoeXNfcG9ydDsKKwkJYWRhcHRlci0+c3dpdGNoX21vZGUgPSBuaWNfaW5mby5zd2l0Y2hfbW9kZTsKKwkJYWRhcHRlci0+bWF4X3R4X3F1ZXMgPSBuaWNfaW5mby5tYXhfdHhfcXVlczsKKwkJYWRhcHRlci0+bWF4X3J4X3F1ZXMgPSBuaWNfaW5mby5tYXhfcnhfcXVlczsKKwkJYWRhcHRlci0+Y2FwYWJpbGl0aWVzID0gbmljX2luZm8uY2FwYWJpbGl0aWVzOworCQlhZGFwdGVyLT5tYXhfbWFjX2ZpbHRlcnMgPSBuaWNfaW5mby5tYXhfbWFjX2ZpbHRlcnM7CisJCWFkYXB0ZXItPm1heF9tdHUgPSBuaWNfaW5mby5tYXhfbXR1OworCX0KKwogCWFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkID0gISF1c2VfbXNpX3g7CiAJYWRhcHRlci0+cnNzX3N1cHBvcnRlZCA9ICEhdXNlX21zaV94OwogCkBAIC01NzQsNiArNzY3LDUwIEBACiB9CiAKIHN0YXRpYyBpbnQKK3FsY25pY19yZXNldF9ucGFyX2NvbmZpZyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGksIGVyciA9IDA7CisJc3RydWN0IHFsY25pY19ucGFyX2luZm8gKm5wYXI7CisJc3RydWN0IHFsY25pY19pbmZvIG5pY19pbmZvOworCisJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBRTENOSUNfRVNXSVRDSF9FTkFCTEVEKSB8fAorCSAgICAhYWRhcHRlci0+bmVlZF9md19yZXNldCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoYWRhcHRlci0+b3BfbW9kZSA9PSBRTENOSUNfTUdNVF9GVU5DKSB7CisJCS8qIFNldCB0aGUgTlBBUiBjb25maWcgZGF0YSBhZnRlciBGVyByZXNldCAqLworCQlmb3IgKGkgPSAwOyBpIDwgUUxDTklDX01BWF9QQ0lfRlVOQzsgaSsrKSB7CisJCQlucGFyID0gJmFkYXB0ZXItPm5wYXJzW2ldOworCQkJaWYgKG5wYXItPnR5cGUgIT0gUUxDTklDX1RZUEVfTklDKQorCQkJCWNvbnRpbnVlOworCQkJZXJyID0gcWxjbmljX2dldF9uaWNfaW5mbyhhZGFwdGVyLCAmbmljX2luZm8sIGkpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGVycl9vdXQ7CisJCQluaWNfaW5mby5taW5fdHhfYncgPSBucGFyLT5taW5fYnc7CisJCQluaWNfaW5mby5tYXhfdHhfYncgPSBucGFyLT5tYXhfYnc7CisJCQllcnIgPSBxbGNuaWNfc2V0X25pY19pbmZvKGFkYXB0ZXIsICZuaWNfaW5mbyk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gZXJyX291dDsKKworCQkJaWYgKG5wYXItPmVuYWJsZV9wbSkgeworCQkJCWVyciA9IHFsY25pY19jb25maWdfcG9ydF9taXJyb3JpbmcoYWRhcHRlciwKKwkJCQkJCW5wYXItPmRlc3RfbnBhciwgMSwgaSk7CisJCQkJaWYgKGVycikKKwkJCQkJZ290byBlcnJfb3V0OworCisJCQl9CisJCQlucGFyLT5tYWNfbGVhcm5pbmcgPSBERUZBVUxUX01BQ19MRUFSTjsKKwkJCW5wYXItPmhvc3Rfdmxhbl90YWcgPSAwOworCQkJbnBhci0+cHJvbWlzY19tb2RlID0gMDsKKwkJCW5wYXItPmRpc2NhcmRfdGFnZ2VkID0gMDsKKwkJCW5wYXItPnZsYW5faWQgPSAwOworCQl9CisJfQorZXJyX291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50CiBxbGNuaWNfc3RhcnRfZmlybXdhcmUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQogewogCWludCB2YWwsIGVyciwgZmlyc3RfYm9vdDsKQEAgLTU5MSw4ICs4MjgsMTIgQEAKIAogCWlmIChsb2FkX2Z3X2ZpbGUpCiAJCXFsY25pY19yZXF1ZXN0X2Zpcm13YXJlKGFkYXB0ZXIpOwotCWVsc2UKKwllbHNlIHsKKwkJaWYgKHFsY25pY19jaGVja19mbGFzaF9md192ZXIoYWRhcHRlcikpCisJCQlnb3RvIGVycl9vdXQ7CisKIAkJYWRhcHRlci0+ZndfdHlwZSA9IFFMQ05JQ19GTEFTSF9ST01JTUFHRTsKKwl9CiAKIAllcnIgPSBxbGNuaWNfbmVlZF9md19yZXNldChhZGFwdGVyKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTYwMiw2ICs4NDMsNyBAQAogCiAJaWYgKGZpcnN0X2Jvb3QgIT0gMHg1NTU1NTU1NSkgewogCQlRTENXUjMyKGFkYXB0ZXIsIENSQl9DTURQRUdfU1RBVEUsIDApOworCQlRTENXUjMyKGFkYXB0ZXIsIENSQl9SQ1ZQRUdfU1RBVEUsIDApOwogCQlxbGNuaWNfcGluaXRfZnJvbV9yb20oYWRhcHRlcik7CiAJCW1zbGVlcCgxKTsKIAl9CkBAIC02MjQsNyArODY2LDcgQEAKIAogd2FpdF9pbml0OgogCS8qIEhhbmRzaGFrZSB3aXRoIHRoZSBjYXJkIGJlZm9yZSB3ZSByZWdpc3RlciB0aGUgZGV2aWNlcy4gKi8KLQllcnIgPSBxbGNuaWNfcGhhbnRvbV9pbml0KGFkYXB0ZXIpOworCWVyciA9IHFsY25pY19pbml0X2Zpcm13YXJlKGFkYXB0ZXIpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dDsKIApAQCAtNjMyLDYgKzg3NCw5IEBACiAJcWxjbmljX2lkY19kZWJ1Z19pbmZvKGFkYXB0ZXIsIDEpOwogCiAJcWxjbmljX2NoZWNrX29wdGlvbnMoYWRhcHRlcik7CisJaWYgKHFsY25pY19yZXNldF9ucGFyX2NvbmZpZyhhZGFwdGVyKSkKKwkJZ290byBlcnJfb3V0OworCXFsY25pY19kZXZfc2V0X25wYXJfcmVhZHkoYWRhcHRlcik7CiAKIAlhZGFwdGVyLT5uZWVkX2Z3X3Jlc2V0ID0gMDsKIApAQCAtNzE2LDkgKzk2MSwyMyBAQAogc3RhdGljIGludAogX19xbGNuaWNfdXAoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogeworCWludCByaW5nOworCXN0cnVjdCBxbGNuaWNfaG9zdF9yZHNfcmluZyAqcmRzX3Jpbmc7CisKIAlpZiAoYWRhcHRlci0+aXNfdXAgIT0gUUxDTklDX0FEQVBURVJfVVBfTUFHSUMpCiAJCXJldHVybiAtRUlPOwogCisJaWYgKHRlc3RfYml0KF9fUUxDTklDX0RFVl9VUCwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocWxjbmljX2Z3X2NyZWF0ZV9jdHgoYWRhcHRlcikpCisJCXJldHVybiAtRUlPOworCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQlyZHNfcmluZyA9ICZhZGFwdGVyLT5yZWN2X2N0eC5yZHNfcmluZ3NbcmluZ107CisJCXFsY25pY19wb3N0X3J4X2J1ZmZlcnMoYWRhcHRlciwgcmluZywgcmRzX3JpbmcpOworCX0KKwogCXFsY25pY19zZXRfbXVsdGkobmV0ZGV2KTsKIAlxbGNuaWNfZndfY21kX3NldF9tdHUoYWRhcHRlciwgbmV0ZGV2LT5tdHUpOwogCkBAIC03MzYsNiArOTk1LDcgQEAKIAogCXFsY25pY19saW5rZXZlbnRfcmVxdWVzdChhZGFwdGVyLCAxKTsKIAorCWFkYXB0ZXItPnJlc2V0X2NvbnRleHQgPSAwOwogCXNldF9iaXQoX19RTENOSUNfREVWX1VQLCAmYWRhcHRlci0+c3RhdGUpOwogCXJldHVybiAwOwogfQpAQCAtNzc1LDYgKzEwMzUsOSBAQAogCiAJcWxjbmljX25hcGlfZGlzYWJsZShhZGFwdGVyKTsKIAorCXFsY25pY19md19kZXN0cm95X2N0eChhZGFwdGVyKTsKKworCXFsY25pY19yZXNldF9yeF9idWZmZXJzX2xpc3QoYWRhcHRlcik7CiAJcWxjbmljX3JlbGVhc2VfdHhfYnVmZmVycyhhZGFwdGVyKTsKIAlzcGluX3VubG9jaygmYWRhcHRlci0+dHhfY2xlYW5fbG9jayk7CiB9CkBAIC03OTYsMTYgKzEwNTksMTEgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKLQlpbnQgZXJyLCByaW5nOwotCXN0cnVjdCBxbGNuaWNfaG9zdF9yZHNfcmluZyAqcmRzX3Jpbmc7CisJaW50IGVycjsKIAogCWlmIChhZGFwdGVyLT5pc191cCA9PSBRTENOSUNfQURBUFRFUl9VUF9NQUdJQykKIAkJcmV0dXJuIDA7CiAKLQllcnIgPSBxbGNuaWNfaW5pdF9maXJtd2FyZShhZGFwdGVyKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCiAJZXJyID0gcWxjbmljX25hcGlfYWRkKGFkYXB0ZXIsIG5ldGRldik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTgxMyw3ICsxMDcxLDcgQEAKIAllcnIgPSBxbGNuaWNfYWxsb2Nfc3dfcmVzb3VyY2VzKGFkYXB0ZXIpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiRXJyb3IgaW4gc2V0dGluZyBzdyByZXNvdXJjZXNcbiIpOwotCQlyZXR1cm4gZXJyOworCQlnb3RvIGVycl9vdXRfbmFwaV9kZWw7CiAJfQogCiAJZXJyID0gcWxjbmljX2FsbG9jX2h3X3Jlc291cmNlcyhhZGFwdGVyKTsKQEAgLTgyMiwxNiArMTA4MCwxMCBAQAogCQlnb3RvIGVycl9vdXRfZnJlZV9zdzsKIAl9CiAKLQotCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspIHsKLQkJcmRzX3JpbmcgPSAmYWRhcHRlci0+cmVjdl9jdHgucmRzX3JpbmdzW3JpbmddOwotCQlxbGNuaWNfcG9zdF9yeF9idWZmZXJzKGFkYXB0ZXIsIHJpbmcsIHJkc19yaW5nKTsKLQl9Ci0KIAllcnIgPSBxbGNuaWNfcmVxdWVzdF9pcnEoYWRhcHRlcik7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gc2V0dXAgaW50ZXJydXB0XG4iKTsKLQkJZ290byBlcnJfb3V0X2ZyZWVfcnhidWY7CisJCWdvdG8gZXJyX291dF9mcmVlX2h3OwogCX0KIAogCXFsY25pY19pbml0X2NvYWxlc2NlX2RlZmF1bHRzKGFkYXB0ZXIpOwpAQCAtODQxLDExICsxMDkzLDEyIEBACiAJYWRhcHRlci0+aXNfdXAgPSBRTENOSUNfQURBUFRFUl9VUF9NQUdJQzsKIAlyZXR1cm4gMDsKIAotZXJyX291dF9mcmVlX3J4YnVmOgotCXFsY25pY19yZWxlYXNlX3J4X2J1ZmZlcnMoYWRhcHRlcik7CitlcnJfb3V0X2ZyZWVfaHc6CiAJcWxjbmljX2ZyZWVfaHdfcmVzb3VyY2VzKGFkYXB0ZXIpOwogZXJyX291dF9mcmVlX3N3OgogCXFsY25pY19mcmVlX3N3X3Jlc291cmNlcyhhZGFwdGVyKTsKK2Vycl9vdXRfbmFwaV9kZWw6CisJcWxjbmljX25hcGlfZGVsKGFkYXB0ZXIpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTg4MCw2ICsxMTMzLDggQEAKIAkJfQogCX0KIAorCXFsY25pY19md19kZXN0cm95X2N0eChhZGFwdGVyKTsKKwogCXFsY25pY19kZXRhY2goYWRhcHRlcik7CiAKIAlhZGFwdGVyLT5kaWFnX3Rlc3QgPSAwOwpAQCAtODk4LDYgKzExNTMsNyBAQAogewogCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZzsKKwlzdHJ1Y3QgcWxjbmljX2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOwogCWludCByaW5nOwogCWludCByZXQ7CiAKQEAgLTkxNyw2ICsxMTczLDE4IEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJcmV0ID0gcWxjbmljX2Z3X2NyZWF0ZV9jdHgoYWRhcHRlcik7CisJaWYgKHJldCkgeworCQlxbGNuaWNfZGV0YWNoKGFkYXB0ZXIpOworCQluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CisJCXJldHVybiByZXQ7CisJfQorCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQlyZHNfcmluZyA9ICZhZGFwdGVyLT5yZWN2X2N0eC5yZHNfcmluZ3NbcmluZ107CisJCXFsY25pY19wb3N0X3J4X2J1ZmZlcnMoYWRhcHRlciwgcmluZywgcmRzX3JpbmcpOworCX0KKwogCWlmIChhZGFwdGVyLT5kaWFnX3Rlc3QgPT0gUUxDTklDX0lOVEVSUlVQVF9URVNUKSB7CiAJCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKIAkJCXNkc19yaW5nID0gJmFkYXB0ZXItPnJlY3ZfY3R4LnNkc19yaW5nc1tyaW5nXTsKQEAgLTkyOCw2ICsxMTk2LDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIFJlc2V0IGNvbnRleHQgaW4gaGFyZHdhcmUgb25seSAqLworc3RhdGljIGludAorcWxjbmljX3Jlc2V0X2h3X2NvbnRleHQoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChfX1FMQ05JQ19SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybiAtRUJVU1k7CisKKwluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CisKKwlxbGNuaWNfZG93bihhZGFwdGVyLCBuZXRkZXYpOworCisJcWxjbmljX3VwKGFkYXB0ZXIsIG5ldGRldik7CisKKwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CisKKwljbGVhcl9iaXQoX19RTENOSUNfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOworCXJldHVybiAwOworfQorCiBpbnQKIHFsY25pY19yZXNldF9jb250ZXh0KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKIHsKQEAgLTk3MSwxOCArMTI2MCwyMSBAQAogCWFkYXB0ZXItPm1heF9tY19jb3VudCA9IDM4OwogCiAJbmV0ZGV2LT5uZXRkZXZfb3BzCSAgID0gJnFsY25pY19uZXRkZXZfb3BzOwotCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gICAgID0gMipIWjsKKwluZXRkZXYtPndhdGNoZG9nX3RpbWVvICAgICA9IDUqSFo7CiAKIAlxbGNuaWNfY2hhbmdlX210dShuZXRkZXYsIG5ldGRldi0+bXR1KTsKIAogCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZxbGNuaWNfZXRodG9vbF9vcHMpOwogCi0JbmV0ZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfVFNPKTsKLQluZXRkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX0dSTyk7Ci0JbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IChORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9UU08pOworCW5ldGRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfAorCQlORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfR1JPKTsKKwluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gKE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfAorCQlORVRJRl9GX0lQVjZfQ1NVTSk7CiAKLQluZXRkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfVFNPNik7Ci0JbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IChORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfVFNPNik7CisJaWYgKGFkYXB0ZXItPmNhcGFiaWxpdGllcyAmIFFMQ05JQ19GV19DQVBBQklMSVRZX1RTTykgeworCQluZXRkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNik7CisJCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSAoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYpOworCX0KIAogCWlmIChwY2lfdXNpbmdfZGFjKSB7CiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwpAQCAtOTk3LDggKzEyODksNiBAQAogCiAJbmV0ZGV2LT5pcnEgPSBhZGFwdGVyLT5tc2l4X2VudHJpZXNbMF0udmVjdG9yOwogCi0JSU5JVF9XT1JLKCZhZGFwdGVyLT50eF90aW1lb3V0X3Rhc2ssIHFsY25pY190eF90aW1lb3V0X3Rhc2spOwotCiAJaWYgKHFsY25pY19yZWFkX21hY19hZGRyKGFkYXB0ZXIpKQogCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlYWQgbWFjIGFkZHJcbiIpOwogCkBAIC0xMDM2LDcgKzEzMjYsNiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBOVUxMOwogCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IE5VTEw7CiAJaW50IGVycjsKLQlpbnQgcGNpX2Z1bmNfaWQgPSBQQ0lfRlVOQyhwZGV2LT5kZXZmbik7CiAJdWludDhfdCByZXZpc2lvbl9pZDsKIAl1aW50OF90IHBjaV91c2luZ19kYWM7CiAKQEAgLTEwNTgsNiArMTM0Nyw3IEBACiAJCWdvdG8gZXJyX291dF9kaXNhYmxlX3BkZXY7CiAKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKKwlwY2lfZW5hYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHBkZXYpOwogCiAJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBxbGNuaWNfYWRhcHRlcikpOwogCWlmICghbmV0ZGV2KSB7CkBAIC0xMDcyLDcgKzEzNjIsNiBAQAogCWFkYXB0ZXItPm5ldGRldiAgPSBuZXRkZXY7CiAJYWRhcHRlci0+cGRldiAgICA9IHBkZXY7CiAJYWRhcHRlci0+ZGV2X3JzdF90aW1lID0gamlmZmllczsKLQlhZGFwdGVyLT5haHcucGNpX2Z1bmMgID0gcGNpX2Z1bmNfaWQ7CiAKIAlyZXZpc2lvbl9pZCA9IHBkZXYtPnJldmlzaW9uOwogCWFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCA9IHJldmlzaW9uX2lkOwpAQCAtMTA4OCw3ICsxMzc3LDcgQEAKIAkJZ290byBlcnJfb3V0X2ZyZWVfbmV0ZGV2OwogCiAJLyogVGhpcyB3aWxsIGJlIHJlc2V0IGZvciBtZXp6IGNhcmRzICAqLwotCWFkYXB0ZXItPnBvcnRudW0gPSBwY2lfZnVuY19pZDsKKwlhZGFwdGVyLT5wb3J0bnVtID0gYWRhcHRlci0+YWh3LnBjaV9mdW5jOwogCiAJZXJyID0gcWxjbmljX2dldF9ib2FyZF9pbmZvKGFkYXB0ZXIpOwogCWlmIChlcnIpIHsKQEAgLTExMDIsNyArMTM5MSw3IEBACiAJaWYgKHFsY25pY19zZXR1cF9pZGNfcGFyYW0oYWRhcHRlcikpCiAJCWdvdG8gZXJyX291dF9pb3VubWFwOwogCi0JZXJyID0gcWxjbmljX3N0YXJ0X2Zpcm13YXJlKGFkYXB0ZXIpOworCWVyciA9IGFkYXB0ZXItPm5pY19vcHMtPnN0YXJ0X2Zpcm13YXJlKGFkYXB0ZXIpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiTG9hZGluZyBmdyBmYWlsZWQuUGxlYXNlIFJlYm9vdFxuIik7CiAJCWdvdG8gZXJyX291dF9kZWNyX3JlZjsKQEAgLTExNzEsMTAgKzE0NjAsMTMgQEAKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiAKLQljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT50eF90aW1lb3V0X3Rhc2spOwotCiAJcWxjbmljX2RldGFjaChhZGFwdGVyKTsKIAorCWlmIChhZGFwdGVyLT5ucGFycyAhPSBOVUxMKQorCQlrZnJlZShhZGFwdGVyLT5ucGFycyk7CisJaWYgKGFkYXB0ZXItPmVzd2l0Y2ggIT0gTlVMTCkKKwkJa2ZyZWUoYWRhcHRlci0+ZXN3aXRjaCk7CisKIAlxbGNuaWNfY2xyX2FsbF9kcnZfc3RhdGUoYWRhcHRlcik7CiAKIAljbGVhcl9iaXQoX19RTENOSUNfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOwpAQCAtMTE4Nyw2ICsxNDc5LDcgQEAKIAogCXFsY25pY19yZWxlYXNlX2Zpcm13YXJlKGFkYXB0ZXIpOwogCisJcGNpX2Rpc2FibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcocGRldik7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwpAQCAtMTIwNiwxMCArMTQ5OSw2IEBACiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKIAkJcWxjbmljX2Rvd24oYWRhcHRlciwgbmV0ZGV2KTsKIAotCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnR4X3RpbWVvdXRfdGFzayk7Ci0KLQlxbGNuaWNfZGV0YWNoKGFkYXB0ZXIpOwotCiAJcWxjbmljX2Nscl9hbGxfZHJ2X3N0YXRlKGFkYXB0ZXIpOwogCiAJY2xlYXJfYml0KF9fUUxDTklDX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKQEAgLTEyNjMsMzUgKzE1NTIsMjMgQEAKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKIAotCWVyciA9IHFsY25pY19zdGFydF9maXJtd2FyZShhZGFwdGVyKTsKKwllcnIgPSBhZGFwdGVyLT5uaWNfb3BzLT5zdGFydF9maXJtd2FyZShhZGFwdGVyKTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBzdGFydCBmaXJtd2FyZVxuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQllcnIgPSBxbGNuaWNfYXR0YWNoKGFkYXB0ZXIpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0OwotCiAJCWVyciA9IHFsY25pY191cChhZGFwdGVyLCBuZXRkZXYpOwogCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2RldGFjaDsKLQorCQkJZ290byBkb25lOwogCiAJCXFsY25pY19jb25maWdfaW5kZXZfYWRkcihuZXRkZXYsIE5FVERFVl9VUCk7CiAJfQotCitkb25lOgogCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKIAlxbGNuaWNfc2NoZWR1bGVfd29yayhhZGFwdGVyLCBxbGNuaWNfZndfcG9sbF93b3JrLCBGV19QT0xMX0RFTEFZKTsKIAlyZXR1cm4gMDsKLQotZXJyX291dF9kZXRhY2g6Ci0JcWxjbmljX2RldGFjaChhZGFwdGVyKTsKLWVycl9vdXQ6Ci0JcWxjbmljX2Nscl9hbGxfZHJ2X3N0YXRlKGFkYXB0ZXIpOwotCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKLQlyZXR1cm4gZXJyOwogfQogI2VuZGlmCiAKQEAgLTEzNDAsMTEgKzE2MTcsMTEgQEAKIAl1OCBvcGNvZGUgPSBUWF9FVEhFUl9QS1Q7CiAJX19iZTE2IHByb3RvY29sID0gc2tiLT5wcm90b2NvbDsKIAl1MTYgZmxhZ3MgPSAwLCB2aWQgPSAwOwotCXUzMiBwcm9kdWNlcjsKIAlpbnQgY29waWVkLCBvZmZzZXQsIGNvcHlfbGVuLCBoZHJfbGVuID0gMCwgdHNvID0gMCwgdmxhbl9vb2IgPSAwOwogCXN0cnVjdCBjbWRfZGVzY190eXBlMCAqaHdkZXNjOwogCXN0cnVjdCB2bGFuX2V0aGhkciAqdmg7CiAJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1MzIgcHJvZHVjZXIgPSB0eF9yaW5nLT5wcm9kdWNlcjsKIAogCWlmIChwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF84MDIxUSkpIHsKIApAQCAtMTM2MCw2ICsxNjM3LDExIEBACiAJCXZsYW5fb29iID0gMTsKIAl9CiAKKwlpZiAoKihza2ItPmRhdGEpICYgQklUXzApIHsKKwkJZmxhZ3MgfD0gQklUXzA7CisJCW1lbWNweSgmZmlyc3RfZGVzYy0+ZXRoX2FkZHIsIHNrYi0+ZGF0YSwgRVRIX0FMRU4pOworCX0KKwogCWlmICgobmV0ZGV2LT5mZWF0dXJlcyAmIChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNikpICYmCiAJCQlza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplID4gMCkgewogCkBAIC0xNDA5LDcgKzE2OTEsNiBAQAogCS8qIEZvciBMU08sIHdlIG5lZWQgdG8gY29weSB0aGUgTUFDL0lQL1RDUCBoZWFkZXJzIGludG8KIAkgKiB0aGUgZGVzY3JpcHRvciByaW5nCiAJICovCi0JcHJvZHVjZXIgPSB0eF9yaW5nLT5wcm9kdWNlcjsKIAljb3BpZWQgPSAwOwogCW9mZnNldCA9IDI7CiAKQEAgLTE1MzcsMTAgKzE4MTgsMTUgQEAKIAkvKiA0IGZyYWdtZW50cyBwZXIgY21kIGRlcyAqLwogCW5vX29mX2Rlc2MgPSAoZnJhZ19jb3VudCArIDMpID4+IDI7CiAKLQlpZiAodW5saWtlbHkobm9fb2ZfZGVzYyArIDIgPiBxbGNuaWNfdHhfYXZhaWwodHhfcmluZykpKSB7CisJaWYgKHVubGlrZWx5KHFsY25pY190eF9hdmFpbCh0eF9yaW5nKSA8PSBUWF9TVE9QX1RIUkVTSCkpIHsKIAkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwotCQlhZGFwdGVyLT5zdGF0cy54bWl0X29mZisrOwotCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJCXNtcF9tYigpOworCQlpZiAocWxjbmljX3R4X2F2YWlsKHR4X3JpbmcpID4gVFhfU1RPUF9USFJFU0gpCisJCQluZXRpZl9zdGFydF9xdWV1ZShuZXRkZXYpOworCQllbHNlIHsKKwkJCWFkYXB0ZXItPnN0YXRzLnhtaXRfb2ZmKys7CisJCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJCX0KIAl9CiAKIAlwcm9kdWNlciA9IHR4X3JpbmctPnByb2R1Y2VyOwpAQCAtMTY3NSwzNSArMTk2MSwxMSBAQAogCQlyZXR1cm47CiAKIAlkZXZfZXJyKCZuZXRkZXYtPmRldiwgInRyYW5zbWl0IHRpbWVvdXQsIHJlc2V0dGluZy5cbiIpOwotCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnR4X3RpbWVvdXRfdGFzayk7Ci19Ci0KLXN0YXRpYyB2b2lkIHFsY25pY190eF90aW1lb3V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIsIHR4X3RpbWVvdXRfdGFzayk7Ci0KLQlpZiAoIW5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkKLQkJcmV0dXJuOwotCi0JaWYgKHRlc3RfYW5kX3NldF9iaXQoX19RTENOSUNfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQotCQlyZXR1cm47CiAKIAlpZiAoKythZGFwdGVyLT50eF90aW1lb19jbnQgPj0gUUxDTklDX01BWF9UWF9USU1FT1VUUykKLQkJZ290byByZXF1ZXN0X3Jlc2V0OwotCi0JY2xlYXJfYml0KF9fUUxDTklDX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKLQlpZiAoIXFsY25pY19yZXNldF9jb250ZXh0KGFkYXB0ZXIpKSB7Ci0JCWFkYXB0ZXItPm5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCQlyZXR1cm47Ci0KLQkJLyogY29udGV4dCByZXNldCBmYWlsZWQsIGZhbGwgdGhyb3VnaCBmb3IgZncgcmVzZXQgKi8KLQl9Ci0KLXJlcXVlc3RfcmVzZXQ6Ci0JYWRhcHRlci0+bmVlZF9md19yZXNldCA9IDE7Ci0JY2xlYXJfYml0KF9fUUxDTklDX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKLQlRTENEQihhZGFwdGVyLCBEUlYsICJSZXNldHRpbmcgYWRhcHRlclxuIik7CisJCWFkYXB0ZXItPm5lZWRfZndfcmVzZXQgPSAxOworCWVsc2UKKwkJYWRhcHRlci0+cmVzZXRfY29udGV4dCA9IDE7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcWxjbmljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpAQCAtMTg0NiwxNCArMjEwOCwxMiBAQAogCQlzbXBfbWIoKTsKIAogCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChuZXRkZXYpICYmIG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewotCQkJX19uZXRpZl90eF9sb2NrKHR4X3JpbmctPnR4cSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAkJCWlmIChxbGNuaWNfdHhfYXZhaWwodHhfcmluZykgPiBUWF9TVE9QX1RIUkVTSCkgewogCQkJCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKLQkJCQlhZGFwdGVyLT50eF90aW1lb19jbnQgPSAwOwogCQkJCWFkYXB0ZXItPnN0YXRzLnhtaXRfb24rKzsKIAkJCX0KLQkJCV9fbmV0aWZfdHhfdW5sb2NrKHR4X3JpbmctPnR4cSk7CiAJCX0KKwkJYWRhcHRlci0+dHhfdGltZW9fY250ID0gMDsKIAl9CiAJLyoKIAkgKiBJZiBldmVyeXRoaW5nIGlzIGZyZWVkIHVwIHRvIGNvbnN1bWVyIHRoZW4gY2hlY2sgaWYgdGhlIHJpbmcgaXMgZnVsbApAQCAtMTg5OCw2ICsyMTU4LDI1IEBACiAJcmV0dXJuIHdvcmtfZG9uZTsKIH0KIAorc3RhdGljIGludCBxbGNuaWNfcnhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZyA9CisJCWNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcsIG5hcGkpOworCisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gc2RzX3JpbmctPmFkYXB0ZXI7CisJaW50IHdvcmtfZG9uZTsKKworCXdvcmtfZG9uZSA9IHFsY25pY19wcm9jZXNzX3Jjdl9yaW5nKHNkc19yaW5nLCBidWRnZXQpOworCisJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgeworCQluYXBpX2NvbXBsZXRlKCZzZHNfcmluZy0+bmFwaSk7CisJCWlmICh0ZXN0X2JpdChfX1FMQ05JQ19ERVZfVVAsICZhZGFwdGVyLT5zdGF0ZSkpCisJCQlxbGNuaWNfZW5hYmxlX2ludChzZHNfcmluZyk7CisJfQorCisJcmV0dXJuIHdvcmtfZG9uZTsKK30KKwogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiBzdGF0aWMgdm9pZCBxbGNuaWNfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CkBAIC0yMTA5LDcgKzIzODgsNyBAQAogewogCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLAogCQkJc3RydWN0IHFsY25pY19hZGFwdGVyLCBmd193b3JrLndvcmspOwotCXUzMiBkZXZfc3RhdGUgPSAweGY7CisJdTMyIGRldl9zdGF0ZSA9IDB4ZiwgbnBhcl9zdGF0ZTsKIAogCWlmIChxbGNuaWNfYXBpX2xvY2soYWRhcHRlcikpCiAJCWdvdG8gZXJyX3JldDsKQEAgLTIxMjIsNiArMjQwMSwxOSBAQAogCQlyZXR1cm47CiAJfQogCisJaWYgKGFkYXB0ZXItPm9wX21vZGUgPT0gUUxDTklDX05PTl9QUklWX0ZVTkMpIHsKKwkJbnBhcl9zdGF0ZSA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX0NSQl9ERVZfTlBBUl9TVEFURSk7CisJCWlmIChucGFyX3N0YXRlID09IFFMQ05JQ19ERVZfTlBBUl9SRFkpIHsKKwkJCXFsY25pY19hcGlfdW5sb2NrKGFkYXB0ZXIpOworCQkJZ290byB3YWl0X25wYXI7CisJCX0gZWxzZSB7CisJCQlxbGNuaWNfc2NoZWR1bGVfd29yayhhZGFwdGVyLCBxbGNuaWNfZndpbml0X3dvcmssCisJCQkJRldfUE9MTF9ERUxBWSk7CisJCQlxbGNuaWNfYXBpX3VubG9jayhhZGFwdGVyKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwogCWlmIChhZGFwdGVyLT5md193YWl0X2NudCsrID4gYWRhcHRlci0+cmVzZXRfYWNrX3RpbWVvKSB7CiAJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlJlc2V0OkZhaWxlZCB0byBnZXQgYWNrICVkIHNlY1xuIiwKIAkJCQkJYWRhcHRlci0+cmVzZXRfYWNrX3RpbWVvKTsKQEAgLTIxNTQsNyArMjQ0Niw3IEBACiAKIAkJcWxjbmljX2FwaV91bmxvY2soYWRhcHRlcik7CiAKLQkJaWYgKCFxbGNuaWNfc3RhcnRfZmlybXdhcmUoYWRhcHRlcikpIHsKKwkJaWYgKCFhZGFwdGVyLT5uaWNfb3BzLT5zdGFydF9maXJtd2FyZShhZGFwdGVyKSkgewogCQkJcWxjbmljX3NjaGVkdWxlX3dvcmsoYWRhcHRlciwgcWxjbmljX2F0dGFjaF93b3JrLCAwKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtMjE2Myw2ICsyNDU1LDcgQEAKIAogCXFsY25pY19hcGlfdW5sb2NrKGFkYXB0ZXIpOwogCit3YWl0X25wYXI6CiAJZGV2X3N0YXRlID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfQ1JCX0RFVl9TVEFURSk7CiAJUUxDREIoYWRhcHRlciwgSFcsICJGdW5jIHdhaXRpbmc6IERldmljZSBzdGF0ZT0ldVxuIiwgZGV2X3N0YXRlKTsKIApAQCAtMjE3Nyw3ICsyNDcwLDcgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlpZiAoIXFsY25pY19zdGFydF9maXJtd2FyZShhZGFwdGVyKSkgeworCQlpZiAoIWFkYXB0ZXItPm5pY19vcHMtPnN0YXJ0X2Zpcm13YXJlKGFkYXB0ZXIpKSB7CiAJCQlxbGNuaWNfc2NoZWR1bGVfd29yayhhZGFwdGVyLCBxbGNuaWNfYXR0YWNoX3dvcmssIDApOwogCQkJcmV0dXJuOwogCQl9CkBAIC0yMjAyLDEwICsyNDk1LDYgQEAKIAogCXFsY25pY19kb3duKGFkYXB0ZXIsIG5ldGRldik7CiAKLQlydG5sX2xvY2soKTsKLQlxbGNuaWNfZGV0YWNoKGFkYXB0ZXIpOwotCXJ0bmxfdW5sb2NrKCk7Ci0KIAlzdGF0dXMgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19QRUdfSEFMVF9TVEFUVVMxKTsKIAogCWlmIChzdGF0dXMgJiBRTENOSUNfUkNPREVfRkFUQUxfRVJST1IpCkBAIC0yMjM3LDYgKzI1MjYsNyBAQAogewogCXUzMiBzdGF0ZTsKIAorCWFkYXB0ZXItPm5lZWRfZndfcmVzZXQgPSAxOwogCWlmIChxbGNuaWNfYXBpX2xvY2soYWRhcHRlcikpCiAJCXJldHVybjsKIApAQCAtMjI1MSwxMCArMjU0MSwzNiBAQAogCXFsY25pY19hcGlfdW5sb2NrKGFkYXB0ZXIpOwogfQogCisvKiBUcmFuc2l0IHRvIE5QQVIgUkVBRFkgc3RhdGUgZnJvbSBOUEFSIE5PVCBSRUFEWSBzdGF0ZSAqLworc3RhdGljIHZvaWQKK3FsY25pY19kZXZfc2V0X25wYXJfcmVhZHkoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBzdGF0ZTsKKworCWlmICghKGFkYXB0ZXItPmZsYWdzICYgUUxDTklDX0VTV0lUQ0hfRU5BQkxFRCkgfHwKKwkJYWRhcHRlci0+b3BfbW9kZSA9PSBRTENOSUNfTk9OX1BSSVZfRlVOQykKKwkJcmV0dXJuOworCWlmIChxbGNuaWNfYXBpX2xvY2soYWRhcHRlcikpCisJCXJldHVybjsKKworCXN0YXRlID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfQ1JCX0RFVl9OUEFSX1NUQVRFKTsKKworCWlmIChzdGF0ZSAhPSBRTENOSUNfREVWX05QQVJfUkRZKSB7CisJCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX0NSQl9ERVZfTlBBUl9TVEFURSwKKwkJCVFMQ05JQ19ERVZfTlBBUl9SRFkpOworCQlRTENEQihhZGFwdGVyLCBEUlYsICJOUEFSIFJFQURZIHN0YXRlIHNldFxuIik7CisJfQorCisJcWxjbmljX2FwaV91bmxvY2soYWRhcHRlcik7Cit9CisKIHN0YXRpYyB2b2lkCiBxbGNuaWNfc2NoZWR1bGVfd29yayhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXdvcmtfZnVuY190IGZ1bmMsIGludCBkZWxheSkKIHsKKwlpZiAodGVzdF9iaXQoX19RTENOSUNfQUVSLCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm47CisKIAlJTklUX0RFTEFZRURfV09SSygmYWRhcHRlci0+Zndfd29yaywgZnVuYyk7CiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhZGFwdGVyLT5md193b3JrLCByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKGRlbGF5KSk7CiB9CkBAIC0yMjc0LDE5ICsyNTkwLDExIEBACiAJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCiAJCQkJc3RydWN0IHFsY25pY19hZGFwdGVyLCBmd193b3JrLndvcmspOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JaW50IGVycjsKIAogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKLQkJZXJyID0gcWxjbmljX2F0dGFjaChhZGFwdGVyKTsKLQkJaWYgKGVycikKKwkJaWYgKHFsY25pY191cChhZGFwdGVyLCBuZXRkZXYpKQogCQkJZ290byBkb25lOwogCi0JCWVyciA9IHFsY25pY191cChhZGFwdGVyLCBuZXRkZXYpOwotCQlpZiAoZXJyKSB7Ci0JCQlxbGNuaWNfZGV0YWNoKGFkYXB0ZXIpOwotCQkJZ290byBkb25lOwotCQl9Ci0KIAkJcWxjbmljX2NvbmZpZ19pbmRldl9hZGRyKG5ldGRldiwgTkVUREVWX1VQKTsKIAl9CiAKQEAgLTIzMjIsNiArMjYzMCwxMyBAQAogCQlhZGFwdGVyLT5md19mYWlsX2NudCA9IDA7CiAJCWlmIChhZGFwdGVyLT5uZWVkX2Z3X3Jlc2V0KQogCQkJZ290byBkZXRhY2g7CisKKwkJaWYgKGFkYXB0ZXItPnJlc2V0X2NvbnRleHQgJiYKKwkJICAgIGF1dG9fZndfcmVzZXQgPT0gQVVUT19GV19SRVNFVF9FTkFCTEVEKSB7CisJCQlxbGNuaWNfcmVzZXRfaHdfY29udGV4dChhZGFwdGVyKTsKKwkJCWFkYXB0ZXItPm5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQl9CisKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yMzMwLDcgKzI2NDUsOCBAQAogCiAJcWxjbmljX2Rldl9yZXF1ZXN0X3Jlc2V0KGFkYXB0ZXIpOwogCi0JY2xlYXJfYml0KF9fUUxDTklDX0ZXX0FUVEFDSEVELCAmYWRhcHRlci0+c3RhdGUpOworCWlmICgoYXV0b19md19yZXNldCA9PSBBVVRPX0ZXX1JFU0VUX0VOQUJMRUQpKQorCQljbGVhcl9iaXQoX19RTENOSUNfRldfQVRUQUNIRUQsICZhZGFwdGVyLT5zdGF0ZSk7CiAKIAlkZXZfaW5mbygmbmV0ZGV2LT5kZXYsICJmaXJtd2FyZSBoYW5nIGRldGVjdGVkXG4iKTsKIApAQCAtMjM2NSw2ICsyNjgxLDE2MSBAQAogCXFsY25pY19zY2hlZHVsZV93b3JrKGFkYXB0ZXIsIHFsY25pY19md19wb2xsX3dvcmssIEZXX1BPTExfREVMQVkpOwogfQogCitzdGF0aWMgaW50IHFsY25pY19pc19maXJzdF9mdW5jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBwY2lfZGV2ICpvdGhfcGRldjsKKwlpbnQgdmFsID0gcGRldi0+ZGV2Zm47CisKKwl3aGlsZSAodmFsLS0gPiAwKSB7CisJCW90aF9wZGV2ID0gcGNpX2dldF9kb21haW5fYnVzX2FuZF9zbG90KHBjaV9kb21haW5fbnIKKwkJCShwZGV2LT5idXMpLCBwZGV2LT5idXMtPm51bWJlciwKKwkJCVBDSV9ERVZGTihQQ0lfU0xPVChwZGV2LT5kZXZmbiksIHZhbCkpOworCQlpZiAoIW90aF9wZGV2KQorCQkJY29udGludWU7CisKKwkJaWYgKG90aF9wZGV2LT5jdXJyZW50X3N0YXRlICE9IFBDSV9EM2NvbGQpIHsKKwkJCXBjaV9kZXZfcHV0KG90aF9wZGV2KTsKKwkJCXJldHVybiAwOworCQl9CisJCXBjaV9kZXZfcHV0KG90aF9wZGV2KTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcWxjbmljX2F0dGFjaF9mdW5jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCBlcnIsIGZpcnN0X2Z1bmM7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisKKwlwZGV2LT5lcnJvcl9zdGF0ZSA9IHBjaV9jaGFubmVsX2lvX25vcm1hbDsKKworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcGNpX3NldF9tYXN0ZXIocGRldik7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwlmaXJzdF9mdW5jID0gcWxjbmljX2lzX2ZpcnN0X2Z1bmMocGRldik7CisKKwlpZiAocWxjbmljX2FwaV9sb2NrKGFkYXB0ZXIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChmaXJzdF9mdW5jKSB7CisJCWFkYXB0ZXItPm5lZWRfZndfcmVzZXQgPSAxOworCQlzZXRfYml0KF9fUUxDTklDX1NUQVJUX0ZXLCAmYWRhcHRlci0+c3RhdGUpOworCQlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfREVWX1NUQVRFLCBRTENOSUNfREVWX0lOSVRJQUxJWklORyk7CisJCVFMQ0RCKGFkYXB0ZXIsIERSViwgIlJlc3RhcnRpbmcgZndcbiIpOworCX0KKwlxbGNuaWNfYXBpX3VubG9jayhhZGFwdGVyKTsKKworCWVyciA9IGFkYXB0ZXItPm5pY19vcHMtPnN0YXJ0X2Zpcm13YXJlKGFkYXB0ZXIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlxbGNuaWNfY2xyX2Rydl9zdGF0ZShhZGFwdGVyKTsKKwlxbGNuaWNfc2V0dXBfaW50cihhZGFwdGVyKTsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJZXJyID0gcWxjbmljX2F0dGFjaChhZGFwdGVyKTsKKwkJaWYgKGVycikgeworCQkJcWxjbmljX2Nscl9hbGxfZHJ2X3N0YXRlKGFkYXB0ZXIpOworCQkJY2xlYXJfYml0KF9fUUxDTklDX0FFUiwgJmFkYXB0ZXItPnN0YXRlKTsKKwkJCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKKwkJCXJldHVybiBlcnI7CisJCX0KKworCQllcnIgPSBxbGNuaWNfdXAoYWRhcHRlciwgbmV0ZGV2KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZG9uZTsKKworCQlxbGNuaWNfY29uZmlnX2luZGV2X2FkZHIobmV0ZGV2LCBORVRERVZfVVApOworCX0KKyBkb25lOgorCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBxbGNuaWNfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCQlwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCisJaWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisKKwlpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fbm9ybWFsKQorCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEOworCisJc2V0X2JpdChfX1FMQ05JQ19BRVIsICZhZGFwdGVyLT5zdGF0ZSk7CisJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOworCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhZGFwdGVyLT5md193b3JrKTsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCXFsY25pY19kb3duKGFkYXB0ZXIsIG5ldGRldik7CisKKwlxbGNuaWNfZGV0YWNoKGFkYXB0ZXIpOworCXFsY25pY190ZWFyZG93bl9pbnRyKGFkYXB0ZXIpOworCisJY2xlYXJfYml0KF9fUUxDTklDX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUOworfQorCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBxbGNuaWNfaW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlyZXR1cm4gcWxjbmljX2F0dGFjaF9mdW5jKHBkZXYpID8gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVCA6CisJCQkJUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEOworfQorCitzdGF0aWMgdm9pZCBxbGNuaWNfaW9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXBjaV9jbGVhbnVwX2Flcl91bmNvcnJlY3RfZXJyb3Jfc3RhdHVzKHBkZXYpOworCisJaWYgKFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX0NSQl9ERVZfU1RBVEUpID09IFFMQ05JQ19ERVZfUkVBRFkgJiYKKwkgICAgdGVzdF9hbmRfY2xlYXJfYml0KF9fUUxDTklDX0FFUiwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJcWxjbmljX3NjaGVkdWxlX3dvcmsoYWRhcHRlciwgcWxjbmljX2Z3X3BvbGxfd29yaywKKwkJCQkJCUZXX1BPTExfREVMQVkpOworfQorCisKK3N0YXRpYyBpbnQKK3FsY25pY3ZmX3N0YXJ0X2Zpcm13YXJlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgZXJyOworCisJZXJyID0gcWxjbmljX2Nhbl9zdGFydF9maXJtd2FyZShhZGFwdGVyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcWxjbmljX2NoZWNrX29wdGlvbnMoYWRhcHRlcik7CisKKwlhZGFwdGVyLT5uZWVkX2Z3X3Jlc2V0ID0gMDsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQKK3FsY25pY3ZmX2NvbmZpZ19icmlkZ2VkX21vZGUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1MzIgZW5hYmxlKQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIGludAorcWxjbmljdmZfY29uZmlnX2xlZChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBzdGF0ZSwgdTMyIHJhdGUpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCiBzdGF0aWMgc3NpemVfdAogcWxjbmljX3N0b3JlX2JyaWRnZWRfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCkBAIC0yMzc2LDEzICsyODQ3LDEzIEBACiAJaWYgKCEoYWRhcHRlci0+Y2FwYWJpbGl0aWVzICYgUUxDTklDX0ZXX0NBUEFCSUxJVFlfQkRHKSkKIAkJZ290byBlcnJfb3V0OwogCi0JaWYgKGFkYXB0ZXItPmlzX3VwICE9IFFMQ05JQ19BREFQVEVSX1VQX01BR0lDKQorCWlmICghdGVzdF9iaXQoX19RTENOSUNfREVWX1VQLCAmYWRhcHRlci0+c3RhdGUpKQogCQlnb3RvIGVycl9vdXQ7CiAKIAlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAyLCAmbmV3KSkKIAkJZ290byBlcnJfb3V0OwogCi0JaWYgKCFxbGNuaWNfY29uZmlnX2JyaWRnZWRfbW9kZShhZGFwdGVyLCAhIW5ldykpCisJaWYgKCFhZGFwdGVyLT5uaWNfb3BzLT5jb25maWdfYnJpZGdlZF9tb2RlKGFkYXB0ZXIsICEhbmV3KSkKIAkJcmV0ID0gbGVuOwogCiBlcnJfb3V0OgpAQCAtMjU4NSw2ICszMDU2LDM2MSBAQAogCS53cml0ZSA9IHFsY25pY19zeXNmc193cml0ZV9tZW0sCiB9OwogCitzdGF0aWMgaW50Cit2YWxpZGF0ZV9wbV9jb25maWcoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLAorCQkJc3RydWN0IHFsY25pY19wbV9mdW5jX2NmZyAqcG1fY2ZnLCBpbnQgY291bnQpCit7CisKKwl1OCBzcmNfcGNpX2Z1bmMsIHNfZXN3X2lkLCBkX2Vzd19pZDsKKwl1OCBkZXN0X3BjaV9mdW5jOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJc3JjX3BjaV9mdW5jID0gcG1fY2ZnW2ldLnBjaV9mdW5jOworCQlkZXN0X3BjaV9mdW5jID0gcG1fY2ZnW2ldLmRlc3RfbnBhcjsKKwkJaWYgKHNyY19wY2lfZnVuYyA+PSBRTENOSUNfTUFYX1BDSV9GVU5DCisJCQkJfHwgZGVzdF9wY2lfZnVuYyA+PSBRTENOSUNfTUFYX1BDSV9GVU5DKQorCQkJcmV0dXJuIFFMX1NUQVRVU19JTlZBTElEX1BBUkFNOworCisJCWlmIChhZGFwdGVyLT5ucGFyc1tzcmNfcGNpX2Z1bmNdLnR5cGUgIT0gUUxDTklDX1RZUEVfTklDKQorCQkJcmV0dXJuIFFMX1NUQVRVU19JTlZBTElEX1BBUkFNOworCisJCWlmIChhZGFwdGVyLT5ucGFyc1tkZXN0X3BjaV9mdW5jXS50eXBlICE9IFFMQ05JQ19UWVBFX05JQykKKwkJCXJldHVybiBRTF9TVEFUVVNfSU5WQUxJRF9QQVJBTTsKKworCQlpZiAoIUlTX1ZBTElEX01PREUocG1fY2ZnW2ldLmFjdGlvbikpCisJCQlyZXR1cm4gUUxfU1RBVFVTX0lOVkFMSURfUEFSQU07CisKKwkJc19lc3dfaWQgPSBhZGFwdGVyLT5ucGFyc1tzcmNfcGNpX2Z1bmNdLnBoeV9wb3J0OworCQlkX2Vzd19pZCA9IGFkYXB0ZXItPm5wYXJzW2Rlc3RfcGNpX2Z1bmNdLnBoeV9wb3J0OworCisJCWlmIChzX2Vzd19pZCAhPSBkX2Vzd19pZCkKKwkJCXJldHVybiBRTF9TVEFUVVNfSU5WQUxJRF9QQVJBTTsKKworCX0KKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgc3NpemVfdAorcWxjbmljX3N5c2ZzX3dyaXRlX3BtX2NvbmZpZyhzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosCisJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZnNldCwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopOworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBxbGNuaWNfcG1fZnVuY19jZmcgKnBtX2NmZzsKKwl1MzIgaWQsIGFjdGlvbiwgcGNpX2Z1bmM7CisJaW50IGNvdW50LCByZW0sIGksIHJldDsKKworCWNvdW50CT0gc2l6ZSAvIHNpemVvZihzdHJ1Y3QgcWxjbmljX3BtX2Z1bmNfY2ZnKTsKKwlyZW0JPSBzaXplICUgc2l6ZW9mKHN0cnVjdCBxbGNuaWNfcG1fZnVuY19jZmcpOworCWlmIChyZW0pCisJCXJldHVybiBRTF9TVEFUVVNfSU5WQUxJRF9QQVJBTTsKKworCXBtX2NmZyA9IChzdHJ1Y3QgcWxjbmljX3BtX2Z1bmNfY2ZnICopIGJ1ZjsKKworCXJldCA9IHZhbGlkYXRlX3BtX2NvbmZpZyhhZGFwdGVyLCBwbV9jZmcsIGNvdW50KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXBjaV9mdW5jID0gcG1fY2ZnW2ldLnBjaV9mdW5jOworCQlhY3Rpb24gPSBwbV9jZmdbaV0uYWN0aW9uOworCQlpZCA9IGFkYXB0ZXItPm5wYXJzW3BjaV9mdW5jXS5waHlfcG9ydDsKKwkJcmV0ID0gcWxjbmljX2NvbmZpZ19wb3J0X21pcnJvcmluZyhhZGFwdGVyLCBpZCwKKwkJCQkJCWFjdGlvbiwgcGNpX2Z1bmMpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlwY2lfZnVuYyA9IHBtX2NmZ1tpXS5wY2lfZnVuYzsKKwkJaWQgPSBhZGFwdGVyLT5ucGFyc1twY2lfZnVuY10ucGh5X3BvcnQ7CisJCWFkYXB0ZXItPm5wYXJzW3BjaV9mdW5jXS5lbmFibGVfcG0gPSBwbV9jZmdbaV0uYWN0aW9uOworCQlhZGFwdGVyLT5ucGFyc1twY2lfZnVuY10uZGVzdF9ucGFyID0gaWQ7CisJfQorCXJldHVybiBzaXplOworfQorCitzdGF0aWMgc3NpemVfdAorcWxjbmljX3N5c2ZzX3JlYWRfcG1fY29uZmlnKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLCBsb2ZmX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHFsY25pY19wbV9mdW5jX2NmZyBwbV9jZmdbUUxDTklDX01BWF9QQ0lfRlVOQ107CisJaW50IGk7CisKKwlpZiAoc2l6ZSAhPSBzaXplb2YocG1fY2ZnKSkKKwkJcmV0dXJuIFFMX1NUQVRVU19JTlZBTElEX1BBUkFNOworCisJZm9yIChpID0gMDsgaSA8IFFMQ05JQ19NQVhfUENJX0ZVTkM7IGkrKykgeworCQlpZiAoYWRhcHRlci0+bnBhcnNbaV0udHlwZSAhPSBRTENOSUNfVFlQRV9OSUMpCisJCQljb250aW51ZTsKKwkJcG1fY2ZnW2ldLmFjdGlvbiA9IGFkYXB0ZXItPm5wYXJzW2ldLmVuYWJsZV9wbTsKKwkJcG1fY2ZnW2ldLmRlc3RfbnBhciA9IDA7CisJCXBtX2NmZ1tpXS5wY2lfZnVuYyA9IGk7CisJfQorCW1lbWNweShidWYsICZwbV9jZmcsIHNpemUpOworCisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBpbnQKK3ZhbGlkYXRlX2Vzd19jb25maWcoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLAorCQkJc3RydWN0IHFsY25pY19lc3dfZnVuY19jZmcgKmVzd19jZmcsIGludCBjb3VudCkKK3sKKwl1OCBwY2lfZnVuYzsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXBjaV9mdW5jID0gZXN3X2NmZ1tpXS5wY2lfZnVuYzsKKwkJaWYgKHBjaV9mdW5jID49IFFMQ05JQ19NQVhfUENJX0ZVTkMpCisJCQlyZXR1cm4gUUxfU1RBVFVTX0lOVkFMSURfUEFSQU07CisKKwkJaWYgKGFkYXB0ZXItPm5wYXJzW2ldLnR5cGUgIT0gUUxDTklDX1RZUEVfTklDKQorCQkJcmV0dXJuIFFMX1NUQVRVU19JTlZBTElEX1BBUkFNOworCisJCWlmIChlc3dfY2ZnLT5ob3N0X3ZsYW5fdGFnID09IDEpCisJCQlpZiAoIUlTX1ZBTElEX1ZMQU4oZXN3X2NmZ1tpXS52bGFuX2lkKSkKKwkJCQlyZXR1cm4gUUxfU1RBVFVTX0lOVkFMSURfUEFSQU07CisKKwkJaWYgKCFJU19WQUxJRF9NT0RFKGVzd19jZmdbaV0ucHJvbWlzY19tb2RlKQorCQkJCXx8ICFJU19WQUxJRF9NT0RFKGVzd19jZmdbaV0uaG9zdF92bGFuX3RhZykKKwkJCQl8fCAhSVNfVkFMSURfTU9ERShlc3dfY2ZnW2ldLm1hY19sZWFybmluZykKKwkJCQl8fCAhSVNfVkFMSURfTU9ERShlc3dfY2ZnW2ldLmRpc2NhcmRfdGFnZ2VkKSkKKwkJCXJldHVybiBRTF9TVEFUVVNfSU5WQUxJRF9QQVJBTTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QKK3FsY25pY19zeXNmc193cml0ZV9lc3dfY29uZmlnKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLCBsb2ZmX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHFsY25pY19lc3dfZnVuY19jZmcgKmVzd19jZmc7CisJaW50IGNvdW50LCByZW0sIGksIHJldDsKKwl1OCBpZCwgcGNpX2Z1bmM7CisKKwljb3VudAk9IHNpemUgLyBzaXplb2Yoc3RydWN0IHFsY25pY19lc3dfZnVuY19jZmcpOworCXJlbQk9IHNpemUgJSBzaXplb2Yoc3RydWN0IHFsY25pY19lc3dfZnVuY19jZmcpOworCWlmIChyZW0pCisJCXJldHVybiBRTF9TVEFUVVNfSU5WQUxJRF9QQVJBTTsKKworCWVzd19jZmcgPSAoc3RydWN0IHFsY25pY19lc3dfZnVuY19jZmcgKikgYnVmOworCXJldCA9IHZhbGlkYXRlX2Vzd19jb25maWcoYWRhcHRlciwgZXN3X2NmZywgY291bnQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlwY2lfZnVuYyA9IGVzd19jZmdbaV0ucGNpX2Z1bmM7CisJCWlkID0gYWRhcHRlci0+bnBhcnNbcGNpX2Z1bmNdLnBoeV9wb3J0OworCQlyZXQgPSBxbGNuaWNfY29uZmlnX3N3aXRjaF9wb3J0KGFkYXB0ZXIsIGlkLAorCQkJCQkJZXN3X2NmZ1tpXS5ob3N0X3ZsYW5fdGFnLAorCQkJCQkJZXN3X2NmZ1tpXS5kaXNjYXJkX3RhZ2dlZCwKKwkJCQkJCWVzd19jZmdbaV0ucHJvbWlzY19tb2RlLAorCQkJCQkJZXN3X2NmZ1tpXS5tYWNfbGVhcm5pbmcsCisJCQkJCQllc3dfY2ZnW2ldLnBjaV9mdW5jLAorCQkJCQkJZXN3X2NmZ1tpXS52bGFuX2lkKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJcGNpX2Z1bmMgPSBlc3dfY2ZnW2ldLnBjaV9mdW5jOworCQlhZGFwdGVyLT5ucGFyc1twY2lfZnVuY10ucHJvbWlzY19tb2RlID0gZXN3X2NmZ1tpXS5wcm9taXNjX21vZGU7CisJCWFkYXB0ZXItPm5wYXJzW3BjaV9mdW5jXS5tYWNfbGVhcm5pbmcgPQllc3dfY2ZnW2ldLm1hY19sZWFybmluZzsKKwkJYWRhcHRlci0+bnBhcnNbcGNpX2Z1bmNdLnZsYW5faWQgPSBlc3dfY2ZnW2ldLnZsYW5faWQ7CisJCWFkYXB0ZXItPm5wYXJzW3BjaV9mdW5jXS5kaXNjYXJkX3RhZ2dlZAk9CisJCQkJCQllc3dfY2ZnW2ldLmRpc2NhcmRfdGFnZ2VkOworCQlhZGFwdGVyLT5ucGFyc1twY2lfZnVuY10uaG9zdF92bGFuX3RhZyA9CisJCQkJCQllc3dfY2ZnW2ldLmhvc3Rfdmxhbl90YWc7CisJfQorCisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitxbGNuaWNfc3lzZnNfcmVhZF9lc3dfY29uZmlnKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLCBsb2ZmX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHFsY25pY19lc3dfZnVuY19jZmcgZXN3X2NmZ1tRTENOSUNfTUFYX1BDSV9GVU5DXTsKKwlpbnQgaTsKKworCWlmIChzaXplICE9IHNpemVvZihlc3dfY2ZnKSkKKwkJcmV0dXJuIFFMX1NUQVRVU19JTlZBTElEX1BBUkFNOworCisJZm9yIChpID0gMDsgaSA8IFFMQ05JQ19NQVhfUENJX0ZVTkM7IGkrKykgeworCQlpZiAoYWRhcHRlci0+bnBhcnNbaV0udHlwZSAhPSBRTENOSUNfVFlQRV9OSUMpCisJCQljb250aW51ZTsKKworCQllc3dfY2ZnW2ldLmhvc3Rfdmxhbl90YWcgPSBhZGFwdGVyLT5ucGFyc1tpXS5ob3N0X3ZsYW5fdGFnOworCQllc3dfY2ZnW2ldLnByb21pc2NfbW9kZSA9IGFkYXB0ZXItPm5wYXJzW2ldLnByb21pc2NfbW9kZTsKKwkJZXN3X2NmZ1tpXS5kaXNjYXJkX3RhZ2dlZCA9IGFkYXB0ZXItPm5wYXJzW2ldLmRpc2NhcmRfdGFnZ2VkOworCQllc3dfY2ZnW2ldLnZsYW5faWQgPSBhZGFwdGVyLT5ucGFyc1tpXS52bGFuX2lkOworCQllc3dfY2ZnW2ldLm1hY19sZWFybmluZyA9IGFkYXB0ZXItPm5wYXJzW2ldLm1hY19sZWFybmluZzsKKwl9CisJbWVtY3B5KGJ1ZiwgJmVzd19jZmcsIHNpemUpOworCisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBpbnQKK3ZhbGlkYXRlX25wYXJfY29uZmlnKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKKwkJCQlzdHJ1Y3QgcWxjbmljX25wYXJfZnVuY19jZmcgKm5wX2NmZywgaW50IGNvdW50KQoreworCXU4IHBjaV9mdW5jLCBpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJcGNpX2Z1bmMgPSBucF9jZmdbaV0ucGNpX2Z1bmM7CisJCWlmIChwY2lfZnVuYyA+PSBRTENOSUNfTUFYX1BDSV9GVU5DKQorCQkJcmV0dXJuIFFMX1NUQVRVU19JTlZBTElEX1BBUkFNOworCisJCWlmIChhZGFwdGVyLT5ucGFyc1twY2lfZnVuY10udHlwZSAhPSBRTENOSUNfVFlQRV9OSUMpCisJCQlyZXR1cm4gUUxfU1RBVFVTX0lOVkFMSURfUEFSQU07CisKKwkJaWYgKCFJU19WQUxJRF9CVyhucF9jZmdbaV0ubWluX2J3KQorCQkJCXx8ICFJU19WQUxJRF9CVyhucF9jZmdbaV0ubWF4X2J3KQorCQkJCXx8ICFJU19WQUxJRF9SWF9RVUVVRVMobnBfY2ZnW2ldLm1heF9yeF9xdWV1ZXMpCisJCQkJfHwgIUlTX1ZBTElEX1RYX1FVRVVFUyhucF9jZmdbaV0ubWF4X3R4X3F1ZXVlcykpCisJCQlyZXR1cm4gUUxfU1RBVFVTX0lOVkFMSURfUEFSQU07CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdAorcWxjbmljX3N5c2ZzX3dyaXRlX25wYXJfY29uZmlnKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLCBsb2ZmX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHFsY25pY19pbmZvIG5pY19pbmZvOworCXN0cnVjdCBxbGNuaWNfbnBhcl9mdW5jX2NmZyAqbnBfY2ZnOworCWludCBpLCBjb3VudCwgcmVtLCByZXQ7CisJdTggcGNpX2Z1bmM7CisKKwljb3VudAk9IHNpemUgLyBzaXplb2Yoc3RydWN0IHFsY25pY19ucGFyX2Z1bmNfY2ZnKTsKKwlyZW0JPSBzaXplICUgc2l6ZW9mKHN0cnVjdCBxbGNuaWNfbnBhcl9mdW5jX2NmZyk7CisJaWYgKHJlbSkKKwkJcmV0dXJuIFFMX1NUQVRVU19JTlZBTElEX1BBUkFNOworCisJbnBfY2ZnID0gKHN0cnVjdCBxbGNuaWNfbnBhcl9mdW5jX2NmZyAqKSBidWY7CisJcmV0ID0gdmFsaWRhdGVfbnBhcl9jb25maWcoYWRhcHRlciwgbnBfY2ZnLCBjb3VudCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudCA7IGkrKykgeworCQlwY2lfZnVuYyA9IG5wX2NmZ1tpXS5wY2lfZnVuYzsKKwkJcmV0ID0gcWxjbmljX2dldF9uaWNfaW5mbyhhZGFwdGVyLCAmbmljX2luZm8sIHBjaV9mdW5jKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCW5pY19pbmZvLnBjaV9mdW5jID0gcGNpX2Z1bmM7CisJCW5pY19pbmZvLm1pbl90eF9idyA9IG5wX2NmZ1tpXS5taW5fYnc7CisJCW5pY19pbmZvLm1heF90eF9idyA9IG5wX2NmZ1tpXS5tYXhfYnc7CisJCXJldCA9IHFsY25pY19zZXRfbmljX2luZm8oYWRhcHRlciwgJm5pY19pbmZvKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCWFkYXB0ZXItPm5wYXJzW2ldLm1pbl9idyA9IG5pY19pbmZvLm1pbl90eF9idzsKKwkJYWRhcHRlci0+bnBhcnNbaV0ubWF4X2J3ID0gbmljX2luZm8ubWF4X3R4X2J3OworCX0KKworCXJldHVybiBzaXplOworCit9CitzdGF0aWMgc3NpemVfdAorcWxjbmljX3N5c2ZzX3JlYWRfbnBhcl9jb25maWcoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCXN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsIGxvZmZfdCBvZmZzZXQsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcWxjbmljX2luZm8gbmljX2luZm87CisJc3RydWN0IHFsY25pY19ucGFyX2Z1bmNfY2ZnIG5wX2NmZ1tRTENOSUNfTUFYX1BDSV9GVU5DXTsKKwlpbnQgaSwgcmV0OworCisJaWYgKHNpemUgIT0gc2l6ZW9mKG5wX2NmZykpCisJCXJldHVybiBRTF9TVEFUVVNfSU5WQUxJRF9QQVJBTTsKKworCWZvciAoaSA9IDA7IGkgPCBRTENOSUNfTUFYX1BDSV9GVU5DIDsgaSsrKSB7CisJCWlmIChhZGFwdGVyLT5ucGFyc1tpXS50eXBlICE9IFFMQ05JQ19UWVBFX05JQykKKwkJCWNvbnRpbnVlOworCQlyZXQgPSBxbGNuaWNfZ2V0X25pY19pbmZvKGFkYXB0ZXIsICZuaWNfaW5mbywgaSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCW5wX2NmZ1tpXS5wY2lfZnVuYyA9IGk7CisJCW5wX2NmZ1tpXS5vcF9tb2RlID0gbmljX2luZm8ub3BfbW9kZTsKKwkJbnBfY2ZnW2ldLnBvcnRfbnVtID0gbmljX2luZm8ucGh5c19wb3J0OworCQlucF9jZmdbaV0uZndfY2FwYWIgPSBuaWNfaW5mby5jYXBhYmlsaXRpZXM7CisJCW5wX2NmZ1tpXS5taW5fYncgPSBuaWNfaW5mby5taW5fdHhfYncgOworCQlucF9jZmdbaV0ubWF4X2J3ID0gbmljX2luZm8ubWF4X3R4X2J3OworCQlucF9jZmdbaV0ubWF4X3R4X3F1ZXVlcyA9IG5pY19pbmZvLm1heF90eF9xdWVzOworCQlucF9jZmdbaV0ubWF4X3J4X3F1ZXVlcyA9IG5pY19pbmZvLm1heF9yeF9xdWVzOworCX0KKwltZW1jcHkoYnVmLCAmbnBfY2ZnLCBzaXplKTsKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIHNzaXplX3QKK3FsY25pY19zeXNmc19yZWFkX3BjaV9jb25maWcoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCXN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsIGxvZmZfdCBvZmZzZXQsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcWxjbmljX3BjaV9mdW5jX2NmZyBwY2lfY2ZnW1FMQ05JQ19NQVhfUENJX0ZVTkNdOworCXN0cnVjdCBxbGNuaWNfcGNpX2luZm8JcGNpX2luZm9bUUxDTklDX01BWF9QQ0lfRlVOQ107CisJaW50IGksIHJldDsKKworCWlmIChzaXplICE9IHNpemVvZihwY2lfY2ZnKSkKKwkJcmV0dXJuIFFMX1NUQVRVU19JTlZBTElEX1BBUkFNOworCisJcmV0ID0gcWxjbmljX2dldF9wY2lfaW5mbyhhZGFwdGVyLCBwY2lfaW5mbyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBRTENOSUNfTUFYX1BDSV9GVU5DIDsgaSsrKSB7CisJCXBjaV9jZmdbaV0ucGNpX2Z1bmMgPSBwY2lfaW5mb1tpXS5pZDsKKwkJcGNpX2NmZ1tpXS5mdW5jX3R5cGUgPSBwY2lfaW5mb1tpXS50eXBlOworCQlwY2lfY2ZnW2ldLnBvcnRfbnVtID0gcGNpX2luZm9baV0uZGVmYXVsdF9wb3J0OworCQlwY2lfY2ZnW2ldLm1pbl9idyA9IHBjaV9pbmZvW2ldLnR4X21pbl9idzsKKwkJcGNpX2NmZ1tpXS5tYXhfYncgPSBwY2lfaW5mb1tpXS50eF9tYXhfYnc7CisJCW1lbWNweSgmcGNpX2NmZ1tpXS5kZWZfbWFjX2FkZHIsICZwY2lfaW5mb1tpXS5tYWMsIEVUSF9BTEVOKTsKKwl9CisJbWVtY3B5KGJ1ZiwgJnBjaV9jZmcsIHNpemUpOworCXJldHVybiBzaXplOworCit9CitzdGF0aWMgc3RydWN0IGJpbl9hdHRyaWJ1dGUgYmluX2F0dHJfbnBhcl9jb25maWcgPSB7CisJLmF0dHIgPSB7Lm5hbWUgPSAibnBhcl9jb25maWciLCAubW9kZSA9IChTX0lSVUdPIHwgU19JV1VTUil9LAorCS5zaXplID0gMCwKKwkucmVhZCA9IHFsY25pY19zeXNmc19yZWFkX25wYXJfY29uZmlnLAorCS53cml0ZSA9IHFsY25pY19zeXNmc193cml0ZV9ucGFyX2NvbmZpZywKK307CisKK3N0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBiaW5fYXR0cl9wY2lfY29uZmlnID0geworCS5hdHRyID0gey5uYW1lID0gInBjaV9jb25maWciLCAubW9kZSA9IChTX0lSVUdPIHwgU19JV1VTUil9LAorCS5zaXplID0gMCwKKwkucmVhZCA9IHFsY25pY19zeXNmc19yZWFkX3BjaV9jb25maWcsCisJLndyaXRlID0gTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBiaW5fYXR0cl9lc3dfY29uZmlnID0geworCS5hdHRyID0gey5uYW1lID0gImVzd19jb25maWciLCAubW9kZSA9IChTX0lSVUdPIHwgU19JV1VTUil9LAorCS5zaXplID0gMCwKKwkucmVhZCA9IHFsY25pY19zeXNmc19yZWFkX2Vzd19jb25maWcsCisJLndyaXRlID0gcWxjbmljX3N5c2ZzX3dyaXRlX2Vzd19jb25maWcsCit9OworCitzdGF0aWMgc3RydWN0IGJpbl9hdHRyaWJ1dGUgYmluX2F0dHJfcG1fY29uZmlnID0geworCS5hdHRyID0gey5uYW1lID0gInBtX2NvbmZpZyIsIC5tb2RlID0gKFNfSVJVR08gfCBTX0lXVVNSKX0sCisJLnNpemUgPSAwLAorCS5yZWFkID0gcWxjbmljX3N5c2ZzX3JlYWRfcG1fY29uZmlnLAorCS53cml0ZSA9IHFsY25pY19zeXNmc193cml0ZV9wbV9jb25maWcsCit9OworCiBzdGF0aWMgdm9pZAogcWxjbmljX2NyZWF0ZV9zeXNmc19lbnRyaWVzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKIHsKQEAgLTI2MTAsMjMgKzM0MzYsNDUgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYWRhcHRlci0+cGRldi0+ZGV2OwogCisJaWYgKGFkYXB0ZXItPm9wX21vZGUgPT0gUUxDTklDX05PTl9QUklWX0ZVTkMpCisJCXJldHVybjsKIAlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RpYWdfbW9kZSkpCiAJCWRldl9pbmZvKGRldiwgImZhaWxlZCB0byBjcmVhdGUgZGlhZ19tb2RlIHN5c2ZzIGVudHJ5XG4iKTsKIAlpZiAoZGV2aWNlX2NyZWF0ZV9iaW5fZmlsZShkZXYsICZiaW5fYXR0cl9jcmIpKQogCQlkZXZfaW5mbyhkZXYsICJmYWlsZWQgdG8gY3JlYXRlIGNyYiBzeXNmcyBlbnRyeVxuIik7CiAJaWYgKGRldmljZV9jcmVhdGVfYmluX2ZpbGUoZGV2LCAmYmluX2F0dHJfbWVtKSkKIAkJZGV2X2luZm8oZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBtZW0gc3lzZnMgZW50cnlcbiIpOwotfQorCWlmICghKGFkYXB0ZXItPmZsYWdzICYgUUxDTklDX0VTV0lUQ0hfRU5BQkxFRCkgfHwKKwkJCWFkYXB0ZXItPm9wX21vZGUgIT0gUUxDTklDX01HTVRfRlVOQykKKwkJcmV0dXJuOworCWlmIChkZXZpY2VfY3JlYXRlX2Jpbl9maWxlKGRldiwgJmJpbl9hdHRyX3BjaV9jb25maWcpKQorCQlkZXZfaW5mbyhkZXYsICJmYWlsZWQgdG8gY3JlYXRlIHBjaSBjb25maWcgc3lzZnMgZW50cnkiKTsKKwlpZiAoZGV2aWNlX2NyZWF0ZV9iaW5fZmlsZShkZXYsICZiaW5fYXR0cl9ucGFyX2NvbmZpZykpCisJCWRldl9pbmZvKGRldiwgImZhaWxlZCB0byBjcmVhdGUgbnBhciBjb25maWcgc3lzZnMgZW50cnkiKTsKKwlpZiAoZGV2aWNlX2NyZWF0ZV9iaW5fZmlsZShkZXYsICZiaW5fYXR0cl9lc3dfY29uZmlnKSkKKwkJZGV2X2luZm8oZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBlc3cgY29uZmlnIHN5c2ZzIGVudHJ5Iik7CisJaWYgKGRldmljZV9jcmVhdGVfYmluX2ZpbGUoZGV2LCAmYmluX2F0dHJfcG1fY29uZmlnKSkKKwkJZGV2X2luZm8oZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwbSBjb25maWcgc3lzZnMgZW50cnkiKTsKIAorfQogCiBzdGF0aWMgdm9pZAogcWxjbmljX3JlbW92ZV9kaWFnX2VudHJpZXMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhZGFwdGVyLT5wZGV2LT5kZXY7CiAKKwlpZiAoYWRhcHRlci0+b3BfbW9kZSA9PSBRTENOSUNfTk9OX1BSSVZfRlVOQykKKwkJcmV0dXJuOwogCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kaWFnX21vZGUpOwogCWRldmljZV9yZW1vdmVfYmluX2ZpbGUoZGV2LCAmYmluX2F0dHJfY3JiKTsKIAlkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKGRldiwgJmJpbl9hdHRyX21lbSk7CisJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBRTENOSUNfRVNXSVRDSF9FTkFCTEVEKSB8fAorCQkJYWRhcHRlci0+b3BfbW9kZSAhPSBRTENOSUNfTUdNVF9GVU5DKQorCQlyZXR1cm47CisJZGV2aWNlX3JlbW92ZV9iaW5fZmlsZShkZXYsICZiaW5fYXR0cl9wY2lfY29uZmlnKTsKKwlkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKGRldiwgJmJpbl9hdHRyX25wYXJfY29uZmlnKTsKKwlkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKGRldiwgJmJpbl9hdHRyX2Vzd19jb25maWcpOworCWRldmljZV9yZW1vdmVfYmluX2ZpbGUoZGV2LCAmYmluX2F0dHJfcG1fY29uZmlnKTsKIH0KIAogI2lmZGVmIENPTkZJR19JTkVUCkBAIC0yNjg0LDcgKzM1MzIsNyBAQAogCWlmICghYWRhcHRlcikKIAkJZ290byBkb25lOwogCi0JaWYgKGFkYXB0ZXItPmlzX3VwICE9IFFMQ05JQ19BREFQVEVSX1VQX01BR0lDKQorCWlmICghdGVzdF9iaXQoX19RTENOSUNfREVWX1VQLCAmYWRhcHRlci0+c3RhdGUpKQogCQlnb3RvIGRvbmU7CiAKIAlxbGNuaWNfY29uZmlnX2luZGV2X2FkZHIoZGV2LCBldmVudCk7CkBAIC0yNzIwLDcgKzM1NjgsNyBAQAogCWlmICghYWRhcHRlcikKIAkJZ290byBkb25lOwogCi0JaWYgKGFkYXB0ZXItPmlzX3VwICE9IFFMQ05JQ19BREFQVEVSX1VQX01BR0lDKQorCWlmICghdGVzdF9iaXQoX19RTENOSUNfREVWX1VQLCAmYWRhcHRlci0+c3RhdGUpKQogCQlnb3RvIGRvbmU7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CkBAIC0yNzUwLDYgKzM1OTgsMTEgQEAKIHFsY25pY19jb25maWdfaW5kZXZfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KQogeyB9CiAjZW5kaWYKK3N0YXRpYyBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHFsY25pY19lcnJfaGFuZGxlciA9IHsKKwkuZXJyb3JfZGV0ZWN0ZWQgPSBxbGNuaWNfaW9fZXJyb3JfZGV0ZWN0ZWQsCisJLnNsb3RfcmVzZXQgPSBxbGNuaWNfaW9fc2xvdF9yZXNldCwKKwkucmVzdW1lID0gcWxjbmljX2lvX3Jlc3VtZSwKK307CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBxbGNuaWNfZHJpdmVyID0gewogCS5uYW1lID0gcWxjbmljX2RyaXZlcl9uYW1lLApAQCAtMjc2MCwxMSArMzYxMywxNCBAQAogCS5zdXNwZW5kID0gcWxjbmljX3N1c3BlbmQsCiAJLnJlc3VtZSA9IHFsY25pY19yZXN1bWUsCiAjZW5kaWYKLQkuc2h1dGRvd24gPSBxbGNuaWNfc2h1dGRvd24KKwkuc2h1dGRvd24gPSBxbGNuaWNfc2h1dGRvd24sCisJLmVycl9oYW5kbGVyID0gJnFsY25pY19lcnJfaGFuZGxlcgorCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBxbGNuaWNfaW5pdF9tb2R1bGUodm9pZCkKIHsKKwlpbnQgcmV0OwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIHFsY25pY19kcml2ZXJfc3RyaW5nKTsKIApAQCAtMjc3Myw4ICszNjI5LDE1IEBACiAJcmVnaXN0ZXJfaW5ldGFkZHJfbm90aWZpZXIoJnFsY25pY19pbmV0YWRkcl9jYik7CiAjZW5kaWYKIAorCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnFsY25pY19kcml2ZXIpOworCWlmIChyZXQpIHsKKyNpZmRlZiBDT05GSUdfSU5FVAorCQl1bnJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKCZxbGNuaWNfaW5ldGFkZHJfY2IpOworCQl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmcWxjbmljX25ldGRldl9jYik7CisjZW5kaWYKKwl9CiAKLQlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcWxjbmljX2RyaXZlcik7CisJcmV0dXJuIHJldDsKIH0KIAogbW9kdWxlX2luaXQocWxjbmljX2luaXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlLmgKaW5kZXggMjA2MjRiYS4uYTQ3ODc4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlLmgKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlLmgKQEAgLTE2LDkgKzE2LDcgQEAKICAqLwogI2RlZmluZSBEUlZfTkFNRSAgCSJxbGdlIgogI2RlZmluZSBEUlZfU1RSSU5HIAkiUUxvZ2ljIDEwIEdpZ2FiaXQgUENJLUUgRXRoZXJuZXQgRHJpdmVyICIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JInYxLjAwLjAwLjIzLjAwLjAwLTAxIgotCi0jZGVmaW5lIFBGWCAicWxnZTogIgorI2RlZmluZSBEUlZfVkVSU0lPTgkidjEuMDAuMDAuMjUuMDAuMDAtMDEiCiAKICNkZWZpbmUgV1FfQUREUl9BTElHTgkweDMJLyogNCBieXRlIGFsaWdubWVudCAqLwogCkBAIC0xMDYyLDcgKzEwNjAsNyBAQAogI2RlZmluZSBUWF9ERVNDX0xFTl9NQVNLCTB4MDAwZmZmZmYKICNkZWZpbmUgVFhfREVTQ19DCTB4NDAwMDAwMDAKICNkZWZpbmUgVFhfREVTQ19FCTB4ODAwMDAwMDAKLX0gX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoKICAqIElPQ0IgRGVmaW5pdGlvbnMuLi4KQEAgLTEwOTUsNyArMTA5Myw3IEBACiAJX19sZTE2IHZsYW5fdGNpOwogCV9fbGUxNiByZXNlcnZlZDQ7CiAJc3RydWN0IHR4X2J1Zl9kZXNjIHRiZFtUWF9ERVNDX1BFUl9JT0NCXTsKLX0gX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IG9iX21hY19pb2NiX3JzcCB7CiAJdTggb3Bjb2RlOwkJLyogKi8KQEAgLTExMTIsNyArMTExMCw3IEBACiAJdTMyIHRpZDsKIAl1MzIgdHhxX2lkeDsKIAlfX2xlMzIgcmVzZXJ2ZWRbMTNdOwotfSBfX2F0dHJpYnV0ZSgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3Qgb2JfbWFjX3Rzb19pb2NiX3JlcSB7CiAJdTggb3Bjb2RlOwpAQCAtMTE0MCw3ICsxMTM4LDcgQEAKIAlfX2xlMTYgdmxhbl90Y2k7CiAJX19sZTE2IG1zczsKIAlzdHJ1Y3QgdHhfYnVmX2Rlc2MgdGJkW1RYX0RFU0NfUEVSX0lPQ0JdOwotfSBfX2F0dHJpYnV0ZSgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3Qgb2JfbWFjX3Rzb19pb2NiX3JzcCB7CiAJdTggb3Bjb2RlOwpAQCAtMTE1Nyw3ICsxMTU1LDcgQEAKIAl1MzIgdGlkOwogCXUzMiB0eHFfaWR4OwogCV9fbGUzMiByZXNlcnZlZDJbMTNdOwotfSBfX2F0dHJpYnV0ZSgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaWJfbWFjX2lvY2JfcnNwIHsKIAl1OCBvcGNvZGU7CQkvKiAweDIwICovCkBAIC0xMjE2LDcgKzEyMTQsNyBAQAogI2RlZmluZSBJQl9NQUNfSU9DQl9SU1BfSEwJMHg4MAogCV9fbGUzMiBoZHJfbGVuOwkJLyogKi8KIAlfX2xlNjQgaGRyX2FkZHI7CS8qICovCi19IF9fYXR0cmlidXRlKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpYl9hZV9pb2NiX3JzcCB7CiAJdTggb3Bjb2RlOwpAQCAtMTIzNyw3ICsxMjM1LDcgQEAKICNkZWZpbmUgUENJX0VSUl9BTk9OX0JVRl9SRCAgICAgICAgMHg0MAogCXU4IHFfaWQ7CiAJX19sZTMyIHJlc2VydmVkWzE1XTsKLX0gX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoKICAqIFRoZXNlIHRocmVlIHN0cnVjdHVyZXMgYXJlIGZvciBnZW5lcmljCkBAIC0xMjQ5LDcgKzEyNDcsNyBAQAogCV9fbGUxNiBsZW5ndGg7CiAJX19sZTMyIHRpZDsKIAlfX2xlMzIgcmVzZXJ2ZWRbMTRdOwotfSBfX2F0dHJpYnV0ZSgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbmV0X3JlcV9pb2NiIHsKIAl1OCBvcGNvZGU7CkBAIC0xMjU3LDcgKzEyNTUsNyBAQAogCV9fbGUxNiBmbGFnczE7CiAJX19sZTMyIHRpZDsKIAlfX2xlMzIgcmVzZXJ2ZWQxWzMwXTsKLX0gX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoKICAqIHR4IHJpbmcgaW5pdGlhbGl6YXRpb24gY29udHJvbCBibG9jayBmb3IgY2hpcC4KQEAgLTEyODMsNyArMTI4MSw3IEBACiAJX19sZTE2IHJpZDsKIAlfX2xlNjQgYWRkcjsKIAlfX2xlNjQgY25zbXJfaWR4X2FkZHI7Ci19IF9fYXR0cmlidXRlKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qCiAgKiByeCByaW5nIGluaXRpYWxpemF0aW9uIGNvbnRyb2wgYmxvY2sgZm9yIGNoaXAuCkBAIC0xMzE3LDcgKzEzMTUsNyBAQAogCV9fbGU2NCBzYnFfYWRkcjsKIAlfX2xlMTYgc2JxX2J1Zl9zaXplOwogCV9fbGUxNiBzYnFfbGVuOwkJLyogZW50cnkgY291bnQgKi8KLX0gX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHJpY2IgewogCXU4IGJhc2VfY3E7CkBAIC0xMzM1LDcgKzEzMzMsNyBAQAogCXU4IGhhc2hfY3FfaWRbMTAyNF07CiAJX19sZTMyIGlwdjZfaGFzaF9rZXlbMTBdOwogCV9fbGUzMiBpcHY0X2hhc2hfa2V5WzRdOwotfSBfX2F0dHJpYnV0ZSgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBTT0ZUV0FSRS9EUklWRVIgREFUQSBTVFJVQ1RVUkVTLiAqLwogCkBAIC0yMjI3LDcgKzIyMjUsNiBAQAogCQl1MzIgcmFtX2FkZHIsIGludCB3b3JkX2NvdW50KTsKIGludCBxbF9jb3JlX2R1bXAoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCiAJCXN0cnVjdCBxbF9tcGlfY29yZWR1bXAgKm1waV9jb3JlZHVtcCk7Ci1pbnQgcWxfbWJfc3lzX2VycihzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldik7CiBpbnQgcWxfbWJfYWJvdXRfZncoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpOwogaW50IHFsX3dvbChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldik7CiBpbnQgcWxfbWJfd29sX3NldF9tYWdpYyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIGVuYWJsZV93b2wpOwpAQCAtMjI0Niw2ICsyMjQzLDcgQEAKIHZvaWQgcWxfY2hlY2tfbGJfZnJhbWUoc3RydWN0IHFsX2FkYXB0ZXIgKiwgc3RydWN0IHNrX2J1ZmYgKik7CiBpbnQgcWxfb3duX2Zpcm13YXJlKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KTsKIGludCBxbF9jbGVhbl9sYl9yeF9yaW5nKHN0cnVjdCByeF9yaW5nICpyeF9yaW5nLCBpbnQgYnVkZ2V0KTsKK3ZvaWQgcWxnZV9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwogCiAjaWYgMQogI2RlZmluZSBRTF9BTExfRFVNUApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2RiZy5jIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2RiZy5jCmluZGV4IDY4YTFjOWIuLjQ3NDc0OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9kYmcuYworKysgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZGJnLmMKQEAgLTEsMyArMSw1IEBACisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlICJxbGdlLmgiCkBAIC00NDYsNyArNDQ4LDcgQEAKIAkJCQkJTUFDX0FERFJfVFlQRV9DQU1fTUFDLCBpLCB2YWx1ZSk7CiAJCWlmIChzdGF0dXMpIHsKIAkJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCi0JCQkJICAiRmFpbGVkIHJlYWQgb2YgbWFjIGluZGV4IHJlZ2lzdGVyLlxuIik7CisJCQkJICAiRmFpbGVkIHJlYWQgb2YgbWFjIGluZGV4IHJlZ2lzdGVyXG4iKTsKIAkJCWdvdG8gZXJyOwogCQl9CiAJCSpidWYrKyA9IHZhbHVlWzBdOwkvKiBsb3dlciBNQUMgYWRkcmVzcyAqLwpAQCAtNDU4LDcgKzQ2MCw3IEBACiAJCQkJCU1BQ19BRERSX1RZUEVfTVVMVElfTUFDLCBpLCB2YWx1ZSk7CiAJCWlmIChzdGF0dXMpIHsKIAkJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCi0JCQkJICAiRmFpbGVkIHJlYWQgb2YgbWFjIGluZGV4IHJlZ2lzdGVyLlxuIik7CisJCQkJICAiRmFpbGVkIHJlYWQgb2YgbWFjIGluZGV4IHJlZ2lzdGVyXG4iKTsKIAkJCWdvdG8gZXJyOwogCQl9CiAJCSpidWYrKyA9IHZhbHVlWzBdOwkvKiBsb3dlciBNY2FzdCBhZGRyZXNzICovCkBAIC00ODIsNyArNDg0LDcgQEAKIAkJc3RhdHVzID0gcWxfZ2V0X3JvdXRpbmdfcmVnKHFkZXYsIGksICZ2YWx1ZSk7CiAJCWlmIChzdGF0dXMpIHsKIAkJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCi0JCQkJICAiRmFpbGVkIHJlYWQgb2Ygcm91dGluZyBpbmRleCByZWdpc3Rlci5cbiIpOworCQkJCSAgIkZhaWxlZCByZWFkIG9mIHJvdXRpbmcgaW5kZXggcmVnaXN0ZXJcbiIpOwogCQkJZ290byBlcnI7CiAJCX0gZWxzZSB7CiAJCQkqYnVmKysgPSB2YWx1ZTsKQEAgLTY2OCw3ICs2NzAsNyBAQAogCQkJbWF4X29mZnNldCA9IE1BQ19BRERSX01BWF9NR01UX1RVX0RQX1dDT1VOVDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRVJSIkJhZCB0eXBlISEhIDB4JTA4eFxuIiwgdHlwZSk7CisJCQlwcl9lcnIoIkJhZCB0eXBlISEhIDB4JTA4eFxuIiwgdHlwZSk7CiAJCQltYXhfaW5kZXggPSAwOwogCQkJbWF4X29mZnNldCA9IDA7CiAJCQlicmVhazsKQEAgLTczOCw3ICs3NDAsNyBAQAogCWludCBpOwogCiAJaWYgKCFtcGlfY29yZWR1bXApIHsKLQkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIk5vIG1lbW9yeSBhdmFpbGFibGUuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIk5vIG1lbW9yeSBhdmFpbGFibGVcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTEyMzQsMTUgKzEyMzYsMTAgQEAKIAogCWlmICghbmV0aWZfcnVubmluZyhxZGV2LT5uZGV2KSkgewogCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKLQkJCSAgIkZvcmNlIENvcmVkdW1wIGNhbiBvbmx5IGJlIGRvbmUgZnJvbSBpbnRlcmZhY2UgdGhhdCBpcyB1cC5cbiIpOworCQkJICAiRm9yY2UgQ29yZWR1bXAgY2FuIG9ubHkgYmUgZG9uZSBmcm9tIGludGVyZmFjZSB0aGF0IGlzIHVwXG4iKTsKIAkJcmV0dXJuOwogCX0KLQotCWlmIChxbF9tYl9zeXNfZXJyKHFkZXYpKSB7Ci0JCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAotCQkJICAiRmFpbCBmb3JjZSBjb3JlZHVtcCB3aXRoIHFsX21iX3N5c19lcnIoKS5cbiIpOwotCQlyZXR1cm47Ci0JfQorCXFsX3F1ZXVlX2Z3X2Vycm9yKHFkZXYpOwogfQogCiB2b2lkIHFsX2dlbl9yZWdfZHVtcChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwKQEAgLTEzMzksNyArMTMzNiw3IEBACiAJCSAgICAgIkNvcmUgaXMgZHVtcGluZyB0byBsb2cgZmlsZSFcbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpICs9IDgpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlLjA4eDogJS4wOHggJS4wOHggJS4wOHggJS4wOHggJS4wOHggIgorCQlwcl9lcnIoIiUuMDh4OiAlLjA4eCAlLjA4eCAlLjA4eCAlLjA4eCAlLjA4eCAiCiAJCQkiJS4wOHggJS4wOHggJS4wOHhcbiIsIGksCiAJCQl0bXBbaSArIDBdLAogCQkJdG1wW2kgKyAxXSwKQEAgLTEzNjEsNzEgKzEzNTgsNDMgQEAKIAlmb3IgKGkgPSAwOyBpIDwgcWRldi0+aW50cl9jb3VudDsgaSsrKSB7CiAJCXFsX3dyaXRlMzIocWRldiwgSU5UUl9FTiwgcWRldi0+aW50cl9jb250ZXh0W2ldLmludHJfcmVhZF9tYXNrKTsKIAkJdmFsdWUgPSBxbF9yZWFkMzIocWRldiwgSU5UUl9FTik7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJICAgICAgICIlczogSW50ZXJydXB0ICVkIGlzICVzLlxuIiwKKwkJcHJfZXJyKCIlczogSW50ZXJydXB0ICVkIGlzICVzXG4iLAogCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSwgaSwKIAkJICAgICAgICh2YWx1ZSAmIElOVFJfRU5fRU4gPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSk7CiAJfQogfQogCisjZGVmaW5lIERVTVBfWEdNQUMocWRldiwgcmVnKQkJCQkJXAorZG8gewkJCQkJCQkJXAorCXUzMiBkYXRhOwkJCQkJCVwKKwlxbF9yZWFkX3hnbWFjX3JlZyhxZGV2LCByZWcsICZkYXRhKTsJCQlcCisJcHJfZXJyKCIlczogJXMgPSAweCUuMDh4XG4iLCBxZGV2LT5uZGV2LT5uYW1lLCAjcmVnLCBkYXRhKTsgXAorfSB3aGlsZSAoMCkKKwogdm9pZCBxbF9kdW1wX3hnbWFjX2NvbnRyb2xfcmVncyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKIHsKLQl1MzIgZGF0YTsKIAlpZiAocWxfc2VtX3NwaW5sb2NrKHFkZXYsIHFkZXYtPnhnX3NlbV9tYXNrKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDb3VsZG4ndCBnZXQgeGdtYWMgc2VtLlxuIiwgX19mdW5jX18pOworCQlwcl9lcnIoIiVzOiBDb3VsZG4ndCBnZXQgeGdtYWMgc2VtXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9Ci0JcWxfcmVhZF94Z21hY19yZWcocWRldiwgUEFVU0VfU1JDX0xPLCAmZGF0YSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IFBBVVNFX1NSQ19MTyA9IDB4JS4wOHguXG4iLCBxZGV2LT5uZGV2LT5uYW1lLAotCSAgICAgICBkYXRhKTsKLQlxbF9yZWFkX3hnbWFjX3JlZyhxZGV2LCBQQVVTRV9TUkNfSEksICZkYXRhKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogUEFVU0VfU1JDX0hJID0gMHglLjA4eC5cbiIsIHFkZXYtPm5kZXYtPm5hbWUsCi0JICAgICAgIGRhdGEpOwotCXFsX3JlYWRfeGdtYWNfcmVnKHFkZXYsIEdMT0JBTF9DRkcsICZkYXRhKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogR0xPQkFMX0NGRyA9IDB4JS4wOHguXG4iLCBxZGV2LT5uZGV2LT5uYW1lLAotCSAgICAgICBkYXRhKTsKLQlxbF9yZWFkX3hnbWFjX3JlZyhxZGV2LCBUWF9DRkcsICZkYXRhKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogVFhfQ0ZHID0gMHglLjA4eC5cbiIsIHFkZXYtPm5kZXYtPm5hbWUsIGRhdGEpOwotCXFsX3JlYWRfeGdtYWNfcmVnKHFkZXYsIFJYX0NGRywgJmRhdGEpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBSWF9DRkcgPSAweCUuMDh4LlxuIiwgcWRldi0+bmRldi0+bmFtZSwgZGF0YSk7Ci0JcWxfcmVhZF94Z21hY19yZWcocWRldiwgRkxPV19DVEwsICZkYXRhKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogRkxPV19DVEwgPSAweCUuMDh4LlxuIiwgcWRldi0+bmRldi0+bmFtZSwKLQkgICAgICAgZGF0YSk7Ci0JcWxfcmVhZF94Z21hY19yZWcocWRldiwgUEFVU0VfT1BDT0RFLCAmZGF0YSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IFBBVVNFX09QQ09ERSA9IDB4JS4wOHguXG4iLCBxZGV2LT5uZGV2LT5uYW1lLAotCSAgICAgICBkYXRhKTsKLQlxbF9yZWFkX3hnbWFjX3JlZyhxZGV2LCBQQVVTRV9USU1FUiwgJmRhdGEpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBQQVVTRV9USU1FUiA9IDB4JS4wOHguXG4iLCBxZGV2LT5uZGV2LT5uYW1lLAotCSAgICAgICBkYXRhKTsKLQlxbF9yZWFkX3hnbWFjX3JlZyhxZGV2LCBQQVVTRV9GUk1fREVTVF9MTywgJmRhdGEpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBQQVVTRV9GUk1fREVTVF9MTyA9IDB4JS4wOHguXG4iLAotCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lLCBkYXRhKTsKLQlxbF9yZWFkX3hnbWFjX3JlZyhxZGV2LCBQQVVTRV9GUk1fREVTVF9ISSwgJmRhdGEpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBQQVVTRV9GUk1fREVTVF9ISSA9IDB4JS4wOHguXG4iLAotCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lLCBkYXRhKTsKLQlxbF9yZWFkX3hnbWFjX3JlZyhxZGV2LCBNQUNfVFhfUEFSQU1TLCAmZGF0YSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IE1BQ19UWF9QQVJBTVMgPSAweCUuMDh4LlxuIiwgcWRldi0+bmRldi0+bmFtZSwKLQkgICAgICAgZGF0YSk7Ci0JcWxfcmVhZF94Z21hY19yZWcocWRldiwgTUFDX1JYX1BBUkFNUywgJmRhdGEpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBNQUNfUlhfUEFSQU1TID0gMHglLjA4eC5cbiIsIHFkZXYtPm5kZXYtPm5hbWUsCi0JICAgICAgIGRhdGEpOwotCXFsX3JlYWRfeGdtYWNfcmVnKHFkZXYsIE1BQ19TWVNfSU5ULCAmZGF0YSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IE1BQ19TWVNfSU5UID0gMHglLjA4eC5cbiIsIHFkZXYtPm5kZXYtPm5hbWUsCi0JICAgICAgIGRhdGEpOwotCXFsX3JlYWRfeGdtYWNfcmVnKHFkZXYsIE1BQ19TWVNfSU5UX01BU0ssICZkYXRhKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogTUFDX1NZU19JTlRfTUFTSyA9IDB4JS4wOHguXG4iLAotCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lLCBkYXRhKTsKLQlxbF9yZWFkX3hnbWFjX3JlZyhxZGV2LCBNQUNfTUdNVF9JTlQsICZkYXRhKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogTUFDX01HTVRfSU5UID0gMHglLjA4eC5cbiIsIHFkZXYtPm5kZXYtPm5hbWUsCi0JICAgICAgIGRhdGEpOwotCXFsX3JlYWRfeGdtYWNfcmVnKHFkZXYsIE1BQ19NR01UX0lOX01BU0ssICZkYXRhKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogTUFDX01HTVRfSU5fTUFTSyA9IDB4JS4wOHguXG4iLAotCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lLCBkYXRhKTsKLQlxbF9yZWFkX3hnbWFjX3JlZyhxZGV2LCBFWFRfQVJCX01PREUsICZkYXRhKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogRVhUX0FSQl9NT0RFID0gMHglLjA4eC5cbiIsIHFkZXYtPm5kZXYtPm5hbWUsCi0JICAgICAgIGRhdGEpOworCURVTVBfWEdNQUMocWRldiwgUEFVU0VfU1JDX0xPKTsKKwlEVU1QX1hHTUFDKHFkZXYsIFBBVVNFX1NSQ19ISSk7CisJRFVNUF9YR01BQyhxZGV2LCBHTE9CQUxfQ0ZHKTsKKwlEVU1QX1hHTUFDKHFkZXYsIFRYX0NGRyk7CisJRFVNUF9YR01BQyhxZGV2LCBSWF9DRkcpOworCURVTVBfWEdNQUMocWRldiwgRkxPV19DVEwpOworCURVTVBfWEdNQUMocWRldiwgUEFVU0VfT1BDT0RFKTsKKwlEVU1QX1hHTUFDKHFkZXYsIFBBVVNFX1RJTUVSKTsKKwlEVU1QX1hHTUFDKHFkZXYsIFBBVVNFX0ZSTV9ERVNUX0xPKTsKKwlEVU1QX1hHTUFDKHFkZXYsIFBBVVNFX0ZSTV9ERVNUX0hJKTsKKwlEVU1QX1hHTUFDKHFkZXYsIE1BQ19UWF9QQVJBTVMpOworCURVTVBfWEdNQUMocWRldiwgTUFDX1JYX1BBUkFNUyk7CisJRFVNUF9YR01BQyhxZGV2LCBNQUNfU1lTX0lOVCk7CisJRFVNUF9YR01BQyhxZGV2LCBNQUNfU1lTX0lOVF9NQVNLKTsKKwlEVU1QX1hHTUFDKHFkZXYsIE1BQ19NR01UX0lOVCk7CisJRFVNUF9YR01BQyhxZGV2LCBNQUNfTUdNVF9JTl9NQVNLKTsKKwlEVU1QX1hHTUFDKHFkZXYsIEVYVF9BUkJfTU9ERSk7CiAJcWxfc2VtX3VubG9jayhxZGV2LCBxZGV2LT54Z19zZW1fbWFzayk7Ci0KIH0KIAogc3RhdGljIHZvaWQgcWxfZHVtcF9ldHNfcmVncyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKQEAgLTE0NDIsMTQgKzE0MTEsMTIgQEAKIAkJcmV0dXJuOwogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJaWYgKHFsX2dldF9tYWNfYWRkcl9yZWcocWRldiwgTUFDX0FERFJfVFlQRV9DQU1fTUFDLCBpLCB2YWx1ZSkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSAgICAgICAiJXM6IEZhaWxlZCByZWFkIG9mIG1hYyBpbmRleCByZWdpc3Rlci5cbiIsCisJCQlwcl9lcnIoIiVzOiBGYWlsZWQgcmVhZCBvZiBtYWMgaW5kZXggcmVnaXN0ZXJcbiIsCiAJCQkgICAgICAgX19mdW5jX18pOwogCQkJcmV0dXJuOwogCQl9IGVsc2UgewogCQkJaWYgKHZhbHVlWzBdKQotCQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCQkgICAgICAgIiVzOiBDQU0gaW5kZXggJWQgQ0FNIExvb2t1cCBMb3dlciA9IDB4JS4wOHg6JS4wOHgsIE91dHB1dCA9IDB4JS4wOHguXG4iLAorCQkJCXByX2VycigiJXM6IENBTSBpbmRleCAlZCBDQU0gTG9va3VwIExvd2VyID0gMHglLjA4eDolLjA4eCwgT3V0cHV0ID0gMHglLjA4eFxuIiwKIAkJCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSwgaSwgdmFsdWVbMV0sIHZhbHVlWzBdLAogCQkJCSAgICAgICB2YWx1ZVsyXSk7CiAJCX0KQEAgLTE0NTcsMTQgKzE0MjQsMTIgQEAKIAlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgewogCQlpZiAocWxfZ2V0X21hY19hZGRyX3JlZwogCQkgICAgKHFkZXYsIE1BQ19BRERSX1RZUEVfTVVMVElfTUFDLCBpLCB2YWx1ZSkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSAgICAgICAiJXM6IEZhaWxlZCByZWFkIG9mIG1hYyBpbmRleCByZWdpc3Rlci5cbiIsCisJCQlwcl9lcnIoIiVzOiBGYWlsZWQgcmVhZCBvZiBtYWMgaW5kZXggcmVnaXN0ZXJcbiIsCiAJCQkgICAgICAgX19mdW5jX18pOwogCQkJcmV0dXJuOwogCQl9IGVsc2UgewogCQkJaWYgKHZhbHVlWzBdKQotCQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCQkgICAgICAgIiVzOiBNQ0FTVCBpbmRleCAlZCBDQU0gTG9va3VwIExvd2VyID0gMHglLjA4eDolLjA4eC5cbiIsCisJCQkJcHJfZXJyKCIlczogTUNBU1QgaW5kZXggJWQgQ0FNIExvb2t1cCBMb3dlciA9IDB4JS4wOHg6JS4wOHhcbiIsCiAJCQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUsIGksIHZhbHVlWzFdLCB2YWx1ZVswXSk7CiAJCX0KIAl9CkBAIC0xNDgxLDEyOSArMTQ0Niw3NyBAQAogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAJCXZhbHVlID0gMDsKIAkJaWYgKHFsX2dldF9yb3V0aW5nX3JlZyhxZGV2LCBpLCAmdmFsdWUpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkgICAgICAgIiVzOiBGYWlsZWQgcmVhZCBvZiByb3V0aW5nIGluZGV4IHJlZ2lzdGVyLlxuIiwKKwkJCXByX2VycigiJXM6IEZhaWxlZCByZWFkIG9mIHJvdXRpbmcgaW5kZXggcmVnaXN0ZXJcbiIsCiAJCQkgICAgICAgX19mdW5jX18pOwogCQkJcmV0dXJuOwogCQl9IGVsc2UgewogCQkJaWYgKHZhbHVlKQotCQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCQkgICAgICAgIiVzOiBSb3V0aW5nIE1hc2sgJWQgPSAweCUuMDh4LlxuIiwKKwkJCQlwcl9lcnIoIiVzOiBSb3V0aW5nIE1hc2sgJWQgPSAweCUuMDh4XG4iLAogCQkJCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lLCBpLCB2YWx1ZSk7CiAJCX0KIAl9CiAJcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fUlRfSURYX01BU0spOwogfQogCisjZGVmaW5lIERVTVBfUkVHKHFkZXYsIHJlZykJCQlcCisJcHJfZXJyKCIlLTMycz0gMHgleFxuIiwgI3JlZywgcWxfcmVhZDMyKHFkZXYsIHJlZykpCisKIHZvaWQgcWxfZHVtcF9yZWdzKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQogewotCXByaW50ayhLRVJOX0VSUiBQRlggInJlZyBkdW1wIGZvciBmdW5jdGlvbiAjJWQuXG4iLCBxZGV2LT5mdW5jKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJTWVMJIAkJCT0gMHgleC5cbiIsCi0JICAgICAgIHFsX3JlYWQzMihxZGV2LCBTWVMpKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJSU1RfRk8gCQkJPSAweCV4LlxuIiwKLQkgICAgICAgcWxfcmVhZDMyKHFkZXYsIFJTVF9GTykpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIkZTQyAJCQkJPSAweCV4LlxuIiwKLQkgICAgICAgcWxfcmVhZDMyKHFkZXYsIEZTQykpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIkNTUiAJCQkJPSAweCV4LlxuIiwKLQkgICAgICAgcWxfcmVhZDMyKHFkZXYsIENTUikpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIklDQl9SSUQgCQkJPSAweCV4LlxuIiwKLQkgICAgICAgcWxfcmVhZDMyKHFkZXYsIElDQl9SSUQpKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJJQ0JfTCAJCQkJPSAweCV4LlxuIiwKLQkgICAgICAgcWxfcmVhZDMyKHFkZXYsIElDQl9MKSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiSUNCX0ggCQkJCT0gMHgleC5cbiIsCi0JICAgICAgIHFsX3JlYWQzMihxZGV2LCBJQ0JfSCkpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIkNGRyAJCQkJPSAweCV4LlxuIiwKLQkgICAgICAgcWxfcmVhZDMyKHFkZXYsIENGRykpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIkJJT1NfQUREUiAJCQk9IDB4JXguXG4iLAotCSAgICAgICBxbF9yZWFkMzIocWRldiwgQklPU19BRERSKSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiU1RTIAkJCQk9IDB4JXguXG4iLAotCSAgICAgICBxbF9yZWFkMzIocWRldiwgU1RTKSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiSU5UUl9FTgkJCT0gMHgleC5cbiIsCi0JICAgICAgIHFsX3JlYWQzMihxZGV2LCBJTlRSX0VOKSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiSU5UUl9NQVNLIAkJCT0gMHgleC5cbiIsCi0JICAgICAgIHFsX3JlYWQzMihxZGV2LCBJTlRSX01BU0spKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJJU1IxIAkJCQk9IDB4JXguXG4iLAotCSAgICAgICBxbF9yZWFkMzIocWRldiwgSVNSMSkpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIklTUjIgCQkJCT0gMHgleC5cbiIsCi0JICAgICAgIHFsX3JlYWQzMihxZGV2LCBJU1IyKSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiSVNSMyAJCQkJPSAweCV4LlxuIiwKLQkgICAgICAgcWxfcmVhZDMyKHFkZXYsIElTUjMpKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJJU1I0IAkJCQk9IDB4JXguXG4iLAotCSAgICAgICBxbF9yZWFkMzIocWRldiwgSVNSNCkpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIlJFVl9JRCAJCQk9IDB4JXguXG4iLAotCSAgICAgICBxbF9yZWFkMzIocWRldiwgUkVWX0lEKSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiRlJDX0VDQ19FUlIgCQkJPSAweCV4LlxuIiwKLQkgICAgICAgcWxfcmVhZDMyKHFkZXYsIEZSQ19FQ0NfRVJSKSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiRVJSX1NUUyAJCQk9IDB4JXguXG4iLAotCSAgICAgICBxbF9yZWFkMzIocWRldiwgRVJSX1NUUykpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIlJBTV9EQkdfQUREUiAJCQk9IDB4JXguXG4iLAotCSAgICAgICBxbF9yZWFkMzIocWRldiwgUkFNX0RCR19BRERSKSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiUkFNX0RCR19EQVRBIAkJCT0gMHgleC5cbiIsCi0JICAgICAgIHFsX3JlYWQzMihxZGV2LCBSQU1fREJHX0RBVEEpKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJFQ0NfRVJSX0NOVCAJCQk9IDB4JXguXG4iLAotCSAgICAgICBxbF9yZWFkMzIocWRldiwgRUNDX0VSUl9DTlQpKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJTRU0gCQkJCT0gMHgleC5cbiIsCi0JICAgICAgIHFsX3JlYWQzMihxZGV2LCBTRU0pKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJHUElPXzEgCQkJPSAweCV4LlxuIiwKLQkgICAgICAgcWxfcmVhZDMyKHFkZXYsIEdQSU9fMSkpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIkdQSU9fMiAJCQk9IDB4JXguXG4iLAotCSAgICAgICBxbF9yZWFkMzIocWRldiwgR1BJT18yKSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiR1BJT18zIAkJCT0gMHgleC5cbiIsCi0JICAgICAgIHFsX3JlYWQzMihxZGV2LCBHUElPXzMpKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJYR01BQ19BRERSIAkJCT0gMHgleC5cbiIsCi0JICAgICAgIHFsX3JlYWQzMihxZGV2LCBYR01BQ19BRERSKSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiWEdNQUNfREFUQSAJCQk9IDB4JXguXG4iLAotCSAgICAgICBxbF9yZWFkMzIocWRldiwgWEdNQUNfREFUQSkpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIk5JQ19FVFMgCQkJPSAweCV4LlxuIiwKLQkgICAgICAgcWxfcmVhZDMyKHFkZXYsIE5JQ19FVFMpKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJDTkFfRVRTIAkJCT0gMHgleC5cbiIsCi0JICAgICAgIHFsX3JlYWQzMihxZGV2LCBDTkFfRVRTKSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiRkxBU0hfQUREUiAJCQk9IDB4JXguXG4iLAotCSAgICAgICBxbF9yZWFkMzIocWRldiwgRkxBU0hfQUREUikpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIkZMQVNIX0RBVEEgCQkJPSAweCV4LlxuIiwKLQkgICAgICAgcWxfcmVhZDMyKHFkZXYsIEZMQVNIX0RBVEEpKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJDUV9TVE9QIAkJCT0gMHgleC5cbiIsCi0JICAgICAgIHFsX3JlYWQzMihxZGV2LCBDUV9TVE9QKSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiUEFHRV9UQkxfUklEIAkJCT0gMHgleC5cbiIsCi0JICAgICAgIHFsX3JlYWQzMihxZGV2LCBQQUdFX1RCTF9SSUQpKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJXUV9QQUdFX1RCTF9MTyAJCT0gMHgleC5cbiIsCi0JICAgICAgIHFsX3JlYWQzMihxZGV2LCBXUV9QQUdFX1RCTF9MTykpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIldRX1BBR0VfVEJMX0hJIAkJPSAweCV4LlxuIiwKLQkgICAgICAgcWxfcmVhZDMyKHFkZXYsIFdRX1BBR0VfVEJMX0hJKSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ1FfUEFHRV9UQkxfTE8gCQk9IDB4JXguXG4iLAotCSAgICAgICBxbF9yZWFkMzIocWRldiwgQ1FfUEFHRV9UQkxfTE8pKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJDUV9QQUdFX1RCTF9ISSAJCT0gMHgleC5cbiIsCi0JICAgICAgIHFsX3JlYWQzMihxZGV2LCBDUV9QQUdFX1RCTF9ISSkpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIkNPU19ERkxUX0NRMSAJCQk9IDB4JXguXG4iLAotCSAgICAgICBxbF9yZWFkMzIocWRldiwgQ09TX0RGTFRfQ1ExKSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ09TX0RGTFRfQ1EyIAkJCT0gMHgleC5cbiIsCi0JICAgICAgIHFsX3JlYWQzMihxZGV2LCBDT1NfREZMVF9DUTIpKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJTUExUX0hEUiAJCQk9IDB4JXguXG4iLAotCSAgICAgICBxbF9yZWFkMzIocWRldiwgU1BMVF9IRFIpKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJGQ19QQVVTRV9USFJFUyAJCT0gMHgleC5cbiIsCi0JICAgICAgIHFsX3JlYWQzMihxZGV2LCBGQ19QQVVTRV9USFJFUykpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIk5JQ19QQVVTRV9USFJFUyAJCT0gMHgleC5cbiIsCi0JICAgICAgIHFsX3JlYWQzMihxZGV2LCBOSUNfUEFVU0VfVEhSRVMpKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJGQ19FVEhFUlRZUEUgCQkJPSAweCV4LlxuIiwKLQkgICAgICAgcWxfcmVhZDMyKHFkZXYsIEZDX0VUSEVSVFlQRSkpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIkZDX1JDVl9DRkcgCQkJPSAweCV4LlxuIiwKLQkgICAgICAgcWxfcmVhZDMyKHFkZXYsIEZDX1JDVl9DRkcpKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJOSUNfUkNWX0NGRyAJCQk9IDB4JXguXG4iLAotCSAgICAgICBxbF9yZWFkMzIocWRldiwgTklDX1JDVl9DRkcpKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJGQ19DT1NfVEFHUyAJCQk9IDB4JXguXG4iLAotCSAgICAgICBxbF9yZWFkMzIocWRldiwgRkNfQ09TX1RBR1MpKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJOSUNfQ09TX1RBR1MgCQkJPSAweCV4LlxuIiwKLQkgICAgICAgcWxfcmVhZDMyKHFkZXYsIE5JQ19DT1NfVEFHUykpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIk1HTVRfUkNWX0NGRyAJCQk9IDB4JXguXG4iLAotCSAgICAgICBxbF9yZWFkMzIocWRldiwgTUdNVF9SQ1ZfQ0ZHKSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiWEdfU0VSREVTX0FERFIgCQk9IDB4JXguXG4iLAotCSAgICAgICBxbF9yZWFkMzIocWRldiwgWEdfU0VSREVTX0FERFIpKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJYR19TRVJERVNfREFUQSAJCT0gMHgleC5cbiIsCi0JICAgICAgIHFsX3JlYWQzMihxZGV2LCBYR19TRVJERVNfREFUQSkpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIlBSQl9NWF9BRERSIAkJCT0gMHgleC5cbiIsCi0JICAgICAgIHFsX3JlYWQzMihxZGV2LCBQUkJfTVhfQUREUikpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIlBSQl9NWF9EQVRBIAkJCT0gMHgleC5cbiIsCi0JICAgICAgIHFsX3JlYWQzMihxZGV2LCBQUkJfTVhfREFUQSkpOworCXByX2VycigicmVnIGR1bXAgZm9yIGZ1bmN0aW9uICMlZFxuIiwgcWRldi0+ZnVuYyk7CisJRFVNUF9SRUcocWRldiwgU1lTKTsKKwlEVU1QX1JFRyhxZGV2LCBSU1RfRk8pOworCURVTVBfUkVHKHFkZXYsIEZTQyk7CisJRFVNUF9SRUcocWRldiwgQ1NSKTsKKwlEVU1QX1JFRyhxZGV2LCBJQ0JfUklEKTsKKwlEVU1QX1JFRyhxZGV2LCBJQ0JfTCk7CisJRFVNUF9SRUcocWRldiwgSUNCX0gpOworCURVTVBfUkVHKHFkZXYsIENGRyk7CisJRFVNUF9SRUcocWRldiwgQklPU19BRERSKTsKKwlEVU1QX1JFRyhxZGV2LCBTVFMpOworCURVTVBfUkVHKHFkZXYsIElOVFJfRU4pOworCURVTVBfUkVHKHFkZXYsIElOVFJfTUFTSyk7CisJRFVNUF9SRUcocWRldiwgSVNSMSk7CisJRFVNUF9SRUcocWRldiwgSVNSMik7CisJRFVNUF9SRUcocWRldiwgSVNSMyk7CisJRFVNUF9SRUcocWRldiwgSVNSNCk7CisJRFVNUF9SRUcocWRldiwgUkVWX0lEKTsKKwlEVU1QX1JFRyhxZGV2LCBGUkNfRUNDX0VSUik7CisJRFVNUF9SRUcocWRldiwgRVJSX1NUUyk7CisJRFVNUF9SRUcocWRldiwgUkFNX0RCR19BRERSKTsKKwlEVU1QX1JFRyhxZGV2LCBSQU1fREJHX0RBVEEpOworCURVTVBfUkVHKHFkZXYsIEVDQ19FUlJfQ05UKTsKKwlEVU1QX1JFRyhxZGV2LCBTRU0pOworCURVTVBfUkVHKHFkZXYsIEdQSU9fMSk7CisJRFVNUF9SRUcocWRldiwgR1BJT18yKTsKKwlEVU1QX1JFRyhxZGV2LCBHUElPXzMpOworCURVTVBfUkVHKHFkZXYsIFhHTUFDX0FERFIpOworCURVTVBfUkVHKHFkZXYsIFhHTUFDX0RBVEEpOworCURVTVBfUkVHKHFkZXYsIE5JQ19FVFMpOworCURVTVBfUkVHKHFkZXYsIENOQV9FVFMpOworCURVTVBfUkVHKHFkZXYsIEZMQVNIX0FERFIpOworCURVTVBfUkVHKHFkZXYsIEZMQVNIX0RBVEEpOworCURVTVBfUkVHKHFkZXYsIENRX1NUT1ApOworCURVTVBfUkVHKHFkZXYsIFBBR0VfVEJMX1JJRCk7CisJRFVNUF9SRUcocWRldiwgV1FfUEFHRV9UQkxfTE8pOworCURVTVBfUkVHKHFkZXYsIFdRX1BBR0VfVEJMX0hJKTsKKwlEVU1QX1JFRyhxZGV2LCBDUV9QQUdFX1RCTF9MTyk7CisJRFVNUF9SRUcocWRldiwgQ1FfUEFHRV9UQkxfSEkpOworCURVTVBfUkVHKHFkZXYsIENPU19ERkxUX0NRMSk7CisJRFVNUF9SRUcocWRldiwgQ09TX0RGTFRfQ1EyKTsKKwlEVU1QX1JFRyhxZGV2LCBTUExUX0hEUik7CisJRFVNUF9SRUcocWRldiwgRkNfUEFVU0VfVEhSRVMpOworCURVTVBfUkVHKHFkZXYsIE5JQ19QQVVTRV9USFJFUyk7CisJRFVNUF9SRUcocWRldiwgRkNfRVRIRVJUWVBFKTsKKwlEVU1QX1JFRyhxZGV2LCBGQ19SQ1ZfQ0ZHKTsKKwlEVU1QX1JFRyhxZGV2LCBOSUNfUkNWX0NGRyk7CisJRFVNUF9SRUcocWRldiwgRkNfQ09TX1RBR1MpOworCURVTVBfUkVHKHFkZXYsIE5JQ19DT1NfVEFHUyk7CisJRFVNUF9SRUcocWRldiwgTUdNVF9SQ1ZfQ0ZHKTsKKwlEVU1QX1JFRyhxZGV2LCBYR19TRVJERVNfQUREUik7CisJRFVNUF9SRUcocWRldiwgWEdfU0VSREVTX0RBVEEpOworCURVTVBfUkVHKHFkZXYsIFBSQl9NWF9BRERSKTsKKwlEVU1QX1JFRyhxZGV2LCBQUkJfTVhfREFUQSk7CiAJcWxfZHVtcF9pbnRyX3N0YXRlcyhxZGV2KTsKIAlxbF9kdW1wX3hnbWFjX2NvbnRyb2xfcmVncyhxZGV2KTsKIAlxbF9kdW1wX2V0c19yZWdzKHFkZXYpOwpAQCAtMTYxMywxOTEgKzE1MjYsMTI0IEBACiAjZW5kaWYKIAogI2lmZGVmIFFMX1NUQVRfRFVNUAorCisjZGVmaW5lIERVTVBfU1RBVChxZGV2LCBzdGF0KQlcCisJcHJfZXJyKCIlcyA9ICVsZFxuIiwgI3N0YXQsICh1bnNpZ25lZCBsb25nKXFkZXYtPm5pY19zdGF0cy5zdGF0KQorCiB2b2lkIHFsX2R1bXBfc3RhdChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKIHsKLQlwcmludGsoS0VSTl9FUlIgIiVzOiBFbnRlci5cbiIsIF9fZnVuY19fKTsKLQlwcmludGsoS0VSTl9FUlIgInR4X3BrdHMgPSAlbGRcbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKXFkZXYtPm5pY19zdGF0cy50eF9wa3RzKTsKLQlwcmludGsoS0VSTl9FUlIgInR4X2J5dGVzID0gJWxkXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZylxZGV2LT5uaWNfc3RhdHMudHhfYnl0ZXMpOwotCXByaW50ayhLRVJOX0VSUiAidHhfbWNhc3RfcGt0cyA9ICVsZC5cbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKXFkZXYtPm5pY19zdGF0cy50eF9tY2FzdF9wa3RzKTsKLQlwcmludGsoS0VSTl9FUlIgInR4X2JjYXN0X3BrdHMgPSAlbGQuXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZylxZGV2LT5uaWNfc3RhdHMudHhfYmNhc3RfcGt0cyk7Ci0JcHJpbnRrKEtFUk5fRVJSICJ0eF91Y2FzdF9wa3RzID0gJWxkLlxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcpcWRldi0+bmljX3N0YXRzLnR4X3VjYXN0X3BrdHMpOwotCXByaW50ayhLRVJOX0VSUiAidHhfY3RsX3BrdHMgPSAlbGQuXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZylxZGV2LT5uaWNfc3RhdHMudHhfY3RsX3BrdHMpOwotCXByaW50ayhLRVJOX0VSUiAidHhfcGF1c2VfcGt0cyA9ICVsZC5cbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKXFkZXYtPm5pY19zdGF0cy50eF9wYXVzZV9wa3RzKTsKLQlwcmludGsoS0VSTl9FUlIgInR4XzY0X3BrdCA9ICVsZC5cbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKXFkZXYtPm5pY19zdGF0cy50eF82NF9wa3QpOwotCXByaW50ayhLRVJOX0VSUiAidHhfNjVfdG9fMTI3X3BrdCA9ICVsZC5cbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKXFkZXYtPm5pY19zdGF0cy50eF82NV90b18xMjdfcGt0KTsKLQlwcmludGsoS0VSTl9FUlIgInR4XzEyOF90b18yNTVfcGt0ID0gJWxkLlxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcpcWRldi0+bmljX3N0YXRzLnR4XzEyOF90b18yNTVfcGt0KTsKLQlwcmludGsoS0VSTl9FUlIgInR4XzI1Nl81MTFfcGt0ID0gJWxkLlxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcpcWRldi0+bmljX3N0YXRzLnR4XzI1Nl81MTFfcGt0KTsKLQlwcmludGsoS0VSTl9FUlIgInR4XzUxMl90b18xMDIzX3BrdCA9ICVsZC5cbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKXFkZXYtPm5pY19zdGF0cy50eF81MTJfdG9fMTAyM19wa3QpOwotCXByaW50ayhLRVJOX0VSUiAidHhfMTAyNF90b18xNTE4X3BrdCA9ICVsZC5cbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKXFkZXYtPm5pY19zdGF0cy50eF8xMDI0X3RvXzE1MThfcGt0KTsKLQlwcmludGsoS0VSTl9FUlIgInR4XzE1MTlfdG9fbWF4X3BrdCA9ICVsZC5cbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKXFkZXYtPm5pY19zdGF0cy50eF8xNTE5X3RvX21heF9wa3QpOwotCXByaW50ayhLRVJOX0VSUiAidHhfdW5kZXJzaXplX3BrdCA9ICVsZC5cbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKXFkZXYtPm5pY19zdGF0cy50eF91bmRlcnNpemVfcGt0KTsKLQlwcmludGsoS0VSTl9FUlIgInR4X292ZXJzaXplX3BrdCA9ICVsZC5cbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKXFkZXYtPm5pY19zdGF0cy50eF9vdmVyc2l6ZV9wa3QpOwotCXByaW50ayhLRVJOX0VSUiAicnhfYnl0ZXMgPSAlbGQuXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZylxZGV2LT5uaWNfc3RhdHMucnhfYnl0ZXMpOwotCXByaW50ayhLRVJOX0VSUiAicnhfYnl0ZXNfb2sgPSAlbGQuXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZylxZGV2LT5uaWNfc3RhdHMucnhfYnl0ZXNfb2spOwotCXByaW50ayhLRVJOX0VSUiAicnhfcGt0cyA9ICVsZC5cbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKXFkZXYtPm5pY19zdGF0cy5yeF9wa3RzKTsKLQlwcmludGsoS0VSTl9FUlIgInJ4X3BrdHNfb2sgPSAlbGQuXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZylxZGV2LT5uaWNfc3RhdHMucnhfcGt0c19vayk7Ci0JcHJpbnRrKEtFUk5fRVJSICJyeF9iY2FzdF9wa3RzID0gJWxkLlxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcpcWRldi0+bmljX3N0YXRzLnJ4X2JjYXN0X3BrdHMpOwotCXByaW50ayhLRVJOX0VSUiAicnhfbWNhc3RfcGt0cyA9ICVsZC5cbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKXFkZXYtPm5pY19zdGF0cy5yeF9tY2FzdF9wa3RzKTsKLQlwcmludGsoS0VSTl9FUlIgInJ4X3VjYXN0X3BrdHMgPSAlbGQuXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZylxZGV2LT5uaWNfc3RhdHMucnhfdWNhc3RfcGt0cyk7Ci0JcHJpbnRrKEtFUk5fRVJSICJyeF91bmRlcnNpemVfcGt0cyA9ICVsZC5cbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKXFkZXYtPm5pY19zdGF0cy5yeF91bmRlcnNpemVfcGt0cyk7Ci0JcHJpbnRrKEtFUk5fRVJSICJyeF9vdmVyc2l6ZV9wa3RzID0gJWxkLlxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcpcWRldi0+bmljX3N0YXRzLnJ4X292ZXJzaXplX3BrdHMpOwotCXByaW50ayhLRVJOX0VSUiAicnhfamFiYmVyX3BrdHMgPSAlbGQuXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZylxZGV2LT5uaWNfc3RhdHMucnhfamFiYmVyX3BrdHMpOwotCXByaW50ayhLRVJOX0VSUiAicnhfdW5kZXJzaXplX2ZjZXJyX3BrdHMgPSAlbGQuXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZylxZGV2LT5uaWNfc3RhdHMucnhfdW5kZXJzaXplX2ZjZXJyX3BrdHMpOwotCXByaW50ayhLRVJOX0VSUiAicnhfZHJvcF9ldmVudHMgPSAlbGQuXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZylxZGV2LT5uaWNfc3RhdHMucnhfZHJvcF9ldmVudHMpOwotCXByaW50ayhLRVJOX0VSUiAicnhfZmNlcnJfcGt0cyA9ICVsZC5cbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKXFkZXYtPm5pY19zdGF0cy5yeF9mY2Vycl9wa3RzKTsKLQlwcmludGsoS0VSTl9FUlIgInJ4X2FsaWduX2VyciA9ICVsZC5cbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKXFkZXYtPm5pY19zdGF0cy5yeF9hbGlnbl9lcnIpOwotCXByaW50ayhLRVJOX0VSUiAicnhfc3ltYm9sX2VyciA9ICVsZC5cbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKXFkZXYtPm5pY19zdGF0cy5yeF9zeW1ib2xfZXJyKTsKLQlwcmludGsoS0VSTl9FUlIgInJ4X21hY19lcnIgPSAlbGQuXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZylxZGV2LT5uaWNfc3RhdHMucnhfbWFjX2Vycik7Ci0JcHJpbnRrKEtFUk5fRVJSICJyeF9jdGxfcGt0cyA9ICVsZC5cbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKXFkZXYtPm5pY19zdGF0cy5yeF9jdGxfcGt0cyk7Ci0JcHJpbnRrKEtFUk5fRVJSICJyeF9wYXVzZV9wa3RzID0gJWxkLlxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcpcWRldi0+bmljX3N0YXRzLnJ4X3BhdXNlX3BrdHMpOwotCXByaW50ayhLRVJOX0VSUiAicnhfNjRfcGt0cyA9ICVsZC5cbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKXFkZXYtPm5pY19zdGF0cy5yeF82NF9wa3RzKTsKLQlwcmludGsoS0VSTl9FUlIgInJ4XzY1X3RvXzEyN19wa3RzID0gJWxkLlxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcpcWRldi0+bmljX3N0YXRzLnJ4XzY1X3RvXzEyN19wa3RzKTsKLQlwcmludGsoS0VSTl9FUlIgInJ4XzEyOF8yNTVfcGt0cyA9ICVsZC5cbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKXFkZXYtPm5pY19zdGF0cy5yeF8xMjhfMjU1X3BrdHMpOwotCXByaW50ayhLRVJOX0VSUiAicnhfMjU2XzUxMV9wa3RzID0gJWxkLlxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcpcWRldi0+bmljX3N0YXRzLnJ4XzI1Nl81MTFfcGt0cyk7Ci0JcHJpbnRrKEtFUk5fRVJSICJyeF81MTJfdG9fMTAyM19wa3RzID0gJWxkLlxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcpcWRldi0+bmljX3N0YXRzLnJ4XzUxMl90b18xMDIzX3BrdHMpOwotCXByaW50ayhLRVJOX0VSUiAicnhfMTAyNF90b18xNTE4X3BrdHMgPSAlbGQuXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZylxZGV2LT5uaWNfc3RhdHMucnhfMTAyNF90b18xNTE4X3BrdHMpOwotCXByaW50ayhLRVJOX0VSUiAicnhfMTUxOV90b19tYXhfcGt0cyA9ICVsZC5cbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKXFkZXYtPm5pY19zdGF0cy5yeF8xNTE5X3RvX21heF9wa3RzKTsKLQlwcmludGsoS0VSTl9FUlIgInJ4X2xlbl9lcnJfcGt0cyA9ICVsZC5cbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKXFkZXYtPm5pY19zdGF0cy5yeF9sZW5fZXJyX3BrdHMpOworCXByX2VycigiJXM6IEVudGVyXG4iLCBfX2Z1bmNfXyk7CisJRFVNUF9TVEFUKHFkZXYsIHR4X3BrdHMpOworCURVTVBfU1RBVChxZGV2LCB0eF9ieXRlcyk7CisJRFVNUF9TVEFUKHFkZXYsIHR4X21jYXN0X3BrdHMpOworCURVTVBfU1RBVChxZGV2LCB0eF9iY2FzdF9wa3RzKTsKKwlEVU1QX1NUQVQocWRldiwgdHhfdWNhc3RfcGt0cyk7CisJRFVNUF9TVEFUKHFkZXYsIHR4X2N0bF9wa3RzKTsKKwlEVU1QX1NUQVQocWRldiwgdHhfcGF1c2VfcGt0cyk7CisJRFVNUF9TVEFUKHFkZXYsIHR4XzY0X3BrdCk7CisJRFVNUF9TVEFUKHFkZXYsIHR4XzY1X3RvXzEyN19wa3QpOworCURVTVBfU1RBVChxZGV2LCB0eF8xMjhfdG9fMjU1X3BrdCk7CisJRFVNUF9TVEFUKHFkZXYsIHR4XzI1Nl81MTFfcGt0KTsKKwlEVU1QX1NUQVQocWRldiwgdHhfNTEyX3RvXzEwMjNfcGt0KTsKKwlEVU1QX1NUQVQocWRldiwgdHhfMTAyNF90b18xNTE4X3BrdCk7CisJRFVNUF9TVEFUKHFkZXYsIHR4XzE1MTlfdG9fbWF4X3BrdCk7CisJRFVNUF9TVEFUKHFkZXYsIHR4X3VuZGVyc2l6ZV9wa3QpOworCURVTVBfU1RBVChxZGV2LCB0eF9vdmVyc2l6ZV9wa3QpOworCURVTVBfU1RBVChxZGV2LCByeF9ieXRlcyk7CisJRFVNUF9TVEFUKHFkZXYsIHJ4X2J5dGVzX29rKTsKKwlEVU1QX1NUQVQocWRldiwgcnhfcGt0cyk7CisJRFVNUF9TVEFUKHFkZXYsIHJ4X3BrdHNfb2spOworCURVTVBfU1RBVChxZGV2LCByeF9iY2FzdF9wa3RzKTsKKwlEVU1QX1NUQVQocWRldiwgcnhfbWNhc3RfcGt0cyk7CisJRFVNUF9TVEFUKHFkZXYsIHJ4X3VjYXN0X3BrdHMpOworCURVTVBfU1RBVChxZGV2LCByeF91bmRlcnNpemVfcGt0cyk7CisJRFVNUF9TVEFUKHFkZXYsIHJ4X292ZXJzaXplX3BrdHMpOworCURVTVBfU1RBVChxZGV2LCByeF9qYWJiZXJfcGt0cyk7CisJRFVNUF9TVEFUKHFkZXYsIHJ4X3VuZGVyc2l6ZV9mY2Vycl9wa3RzKTsKKwlEVU1QX1NUQVQocWRldiwgcnhfZHJvcF9ldmVudHMpOworCURVTVBfU1RBVChxZGV2LCByeF9mY2Vycl9wa3RzKTsKKwlEVU1QX1NUQVQocWRldiwgcnhfYWxpZ25fZXJyKTsKKwlEVU1QX1NUQVQocWRldiwgcnhfc3ltYm9sX2Vycik7CisJRFVNUF9TVEFUKHFkZXYsIHJ4X21hY19lcnIpOworCURVTVBfU1RBVChxZGV2LCByeF9jdGxfcGt0cyk7CisJRFVNUF9TVEFUKHFkZXYsIHJ4X3BhdXNlX3BrdHMpOworCURVTVBfU1RBVChxZGV2LCByeF82NF9wa3RzKTsKKwlEVU1QX1NUQVQocWRldiwgcnhfNjVfdG9fMTI3X3BrdHMpOworCURVTVBfU1RBVChxZGV2LCByeF8xMjhfMjU1X3BrdHMpOworCURVTVBfU1RBVChxZGV2LCByeF8yNTZfNTExX3BrdHMpOworCURVTVBfU1RBVChxZGV2LCByeF81MTJfdG9fMTAyM19wa3RzKTsKKwlEVU1QX1NUQVQocWRldiwgcnhfMTAyNF90b18xNTE4X3BrdHMpOworCURVTVBfU1RBVChxZGV2LCByeF8xNTE5X3RvX21heF9wa3RzKTsKKwlEVU1QX1NUQVQocWRldiwgcnhfbGVuX2Vycl9wa3RzKTsKIH07CiAjZW5kaWYKIAogI2lmZGVmIFFMX0RFVl9EVU1QCisKKyNkZWZpbmUgRFVNUF9RREVWX0ZJRUxEKHFkZXYsIHR5cGUsIGZpZWxkKQkJXAorCXByX2VycigicWRldi0+JS0yNHMgPSAiIHR5cGUgIlxuIiwgI2ZpZWxkLCBxZGV2LT5maWVsZCkKKyNkZWZpbmUgRFVNUF9RREVWX0RNQV9GSUVMRChxZGV2LCBmaWVsZCkJCVwKKwlwcl9lcnIoInFkZXYtPiUtMjRzID0gJWxseFxuIiwgI2ZpZWxkLCAodW5zaWduZWQgbG9uZyBsb25nKXFkZXYtPmZpZWxkKQorI2RlZmluZSBEVU1QX1FERVZfQVJSQVkocWRldiwgdHlwZSwgYXJyYXksIGluZGV4LCBmaWVsZCkgXAorCXByX2VycigiJXNbJWRdLiVzID0gIiB0eXBlICJcbiIsCQkgXAorCSAgICAgICAjYXJyYXksIGluZGV4LCAjZmllbGQsIHFkZXYtPmFycmF5W2luZGV4XS5maWVsZCk7CiB2b2lkIHFsX2R1bXBfcWRldihzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKIHsKIAlpbnQgaTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJxZGV2LT5mbGFncyAJCQk9ICVseC5cbiIsCi0JICAgICAgIHFkZXYtPmZsYWdzKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJxZGV2LT52bGdycCAJCQk9ICVwLlxuIiwKLQkgICAgICAgcWRldi0+dmxncnApOwotCXByaW50ayhLRVJOX0VSUiBQRlggInFkZXYtPnBkZXYgCQkJPSAlcC5cbiIsCi0JICAgICAgIHFkZXYtPnBkZXYpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInFkZXYtPm5kZXYgCQkJPSAlcC5cbiIsCi0JICAgICAgIHFkZXYtPm5kZXYpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInFkZXYtPmNoaXBfcmV2X2lkIAkJPSAlZC5cbiIsCi0JICAgICAgIHFkZXYtPmNoaXBfcmV2X2lkKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJxZGV2LT5yZWdfYmFzZSAJCT0gJXAuXG4iLAotCSAgICAgICBxZGV2LT5yZWdfYmFzZSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAicWRldi0+ZG9vcmJlbGxfYXJlYSAJPSAlcC5cbiIsCi0JICAgICAgIHFkZXYtPmRvb3JiZWxsX2FyZWEpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInFkZXYtPmRvb3JiZWxsX2FyZWFfc2l6ZSAJPSAlZC5cbiIsCi0JICAgICAgIHFkZXYtPmRvb3JiZWxsX2FyZWFfc2l6ZSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAibXNnX2VuYWJsZSAJCT0gJXguXG4iLAotCSAgICAgICBxZGV2LT5tc2dfZW5hYmxlKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJxZGV2LT5yeF9yaW5nX3NoYWRvd19yZWdfYXJlYQk9ICVwLlxuIiwKLQkgICAgICAgcWRldi0+cnhfcmluZ19zaGFkb3dfcmVnX2FyZWEpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInFkZXYtPnJ4X3Jpbmdfc2hhZG93X3JlZ19kbWEgCT0gJWxseC5cbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHFkZXYtPnJ4X3Jpbmdfc2hhZG93X3JlZ19kbWEpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInFkZXYtPnR4X3Jpbmdfc2hhZG93X3JlZ19hcmVhCT0gJXAuXG4iLAotCSAgICAgICBxZGV2LT50eF9yaW5nX3NoYWRvd19yZWdfYXJlYSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAicWRldi0+dHhfcmluZ19zaGFkb3dfcmVnX2RtYQk9ICVsbHguXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBxZGV2LT50eF9yaW5nX3NoYWRvd19yZWdfZG1hKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJxZGV2LT5pbnRyX2NvdW50IAkJPSAlZC5cbiIsCi0JICAgICAgIHFkZXYtPmludHJfY291bnQpOworCURVTVBfUURFVl9GSUVMRChxZGV2LCAiJWx4IiwgZmxhZ3MpOworCURVTVBfUURFVl9GSUVMRChxZGV2LCAiJXAiLCB2bGdycCk7CisJRFVNUF9RREVWX0ZJRUxEKHFkZXYsICIlcCIsIHBkZXYpOworCURVTVBfUURFVl9GSUVMRChxZGV2LCAiJXAiLCBuZGV2KTsKKwlEVU1QX1FERVZfRklFTEQocWRldiwgIiVkIiwgY2hpcF9yZXZfaWQpOworCURVTVBfUURFVl9GSUVMRChxZGV2LCAiJXAiLCByZWdfYmFzZSk7CisJRFVNUF9RREVWX0ZJRUxEKHFkZXYsICIlcCIsIGRvb3JiZWxsX2FyZWEpOworCURVTVBfUURFVl9GSUVMRChxZGV2LCAiJWQiLCBkb29yYmVsbF9hcmVhX3NpemUpOworCURVTVBfUURFVl9GSUVMRChxZGV2LCAiJXgiLCBtc2dfZW5hYmxlKTsKKwlEVU1QX1FERVZfRklFTEQocWRldiwgIiVwIiwgcnhfcmluZ19zaGFkb3dfcmVnX2FyZWEpOworCURVTVBfUURFVl9ETUFfRklFTEQocWRldiwgcnhfcmluZ19zaGFkb3dfcmVnX2RtYSk7CisJRFVNUF9RREVWX0ZJRUxEKHFkZXYsICIlcCIsIHR4X3Jpbmdfc2hhZG93X3JlZ19hcmVhKTsKKwlEVU1QX1FERVZfRE1BX0ZJRUxEKHFkZXYsIHR4X3Jpbmdfc2hhZG93X3JlZ19kbWEpOworCURVTVBfUURFVl9GSUVMRChxZGV2LCAiJWQiLCBpbnRyX2NvdW50KTsKIAlpZiAocWRldi0+bXNpX3hfZW50cnkpCiAJCWZvciAoaSA9IDA7IGkgPCBxZGV2LT5pbnRyX2NvdW50OyBpKyspIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSAgICAgICAibXNpX3hfZW50cnkuWyVkXXZlY3Rvcgk9ICVkLlxuIiwgaSwKLQkJCSAgICAgICBxZGV2LT5tc2lfeF9lbnRyeVtpXS52ZWN0b3IpOwotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJICAgICAgICJtc2lfeF9lbnRyeS5bJWRdZW50cnkJPSAlZC5cbiIsIGksCi0JCQkgICAgICAgcWRldi0+bXNpX3hfZW50cnlbaV0uZW50cnkpOworCQkJRFVNUF9RREVWX0FSUkFZKHFkZXYsICIlZCIsIG1zaV94X2VudHJ5LCBpLCB2ZWN0b3IpOworCQkJRFVNUF9RREVWX0FSUkFZKHFkZXYsICIlZCIsIG1zaV94X2VudHJ5LCBpLCBlbnRyeSk7CiAJCX0KIAlmb3IgKGkgPSAwOyBpIDwgcWRldi0+aW50cl9jb3VudDsgaSsrKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJICAgICAgICJpbnRyX2NvbnRleHRbJWRdLnFkZXYJCT0gJXAuXG4iLCBpLAotCQkgICAgICAgcWRldi0+aW50cl9jb250ZXh0W2ldLnFkZXYpOwotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCSAgICAgICAiaW50cl9jb250ZXh0WyVkXS5pbnRyCQk9ICVkLlxuIiwgaSwKLQkJICAgICAgIHFkZXYtPmludHJfY29udGV4dFtpXS5pbnRyKTsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkgICAgICAgImludHJfY29udGV4dFslZF0uaG9va2VkCQk9ICVkLlxuIiwgaSwKLQkJICAgICAgIHFkZXYtPmludHJfY29udGV4dFtpXS5ob29rZWQpOwotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCSAgICAgICAiaW50cl9jb250ZXh0WyVkXS5pbnRyX2VuX21hc2sJPSAweCUwOHguXG4iLCBpLAotCQkgICAgICAgcWRldi0+aW50cl9jb250ZXh0W2ldLmludHJfZW5fbWFzayk7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJICAgICAgICJpbnRyX2NvbnRleHRbJWRdLmludHJfZGlzX21hc2sJPSAweCUwOHguXG4iLCBpLAotCQkgICAgICAgcWRldi0+aW50cl9jb250ZXh0W2ldLmludHJfZGlzX21hc2spOwotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCSAgICAgICAiaW50cl9jb250ZXh0WyVkXS5pbnRyX3JlYWRfbWFzawk9IDB4JTA4eC5cbiIsIGksCi0JCSAgICAgICBxZGV2LT5pbnRyX2NvbnRleHRbaV0uaW50cl9yZWFkX21hc2spOworCQlEVU1QX1FERVZfQVJSQVkocWRldiwgIiVwIiwgaW50cl9jb250ZXh0LCBpLCBxZGV2KTsKKwkJRFVNUF9RREVWX0FSUkFZKHFkZXYsICIlZCIsIGludHJfY29udGV4dCwgaSwgaW50cik7CisJCURVTVBfUURFVl9BUlJBWShxZGV2LCAiJWQiLCBpbnRyX2NvbnRleHQsIGksIGhvb2tlZCk7CisJCURVTVBfUURFVl9BUlJBWShxZGV2LCAiMHglMDh4IiwgaW50cl9jb250ZXh0LCBpLCBpbnRyX2VuX21hc2spOworCQlEVU1QX1FERVZfQVJSQVkocWRldiwgIjB4JTA4eCIsIGludHJfY29udGV4dCwgaSwgaW50cl9kaXNfbWFzayk7CisJCURVTVBfUURFVl9BUlJBWShxZGV2LCAiMHglMDh4IiwgaW50cl9jb250ZXh0LCBpLCBpbnRyX3JlYWRfbWFzayk7CiAJfQotCXByaW50ayhLRVJOX0VSUiBQRlggInFkZXYtPnR4X3JpbmdfY291bnQgPSAlZC5cbiIsIHFkZXYtPnR4X3JpbmdfY291bnQpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInFkZXYtPnJ4X3JpbmdfY291bnQgPSAlZC5cbiIsIHFkZXYtPnJ4X3JpbmdfY291bnQpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInFkZXYtPnJpbmdfbWVtX3NpemUgPSAlZC5cbiIsIHFkZXYtPnJpbmdfbWVtX3NpemUpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInFkZXYtPnJpbmdfbWVtIAk9ICVwLlxuIiwgcWRldi0+cmluZ19tZW0pOwotCXByaW50ayhLRVJOX0VSUiBQRlggInFkZXYtPmludHJfY291bnQgCT0gJWQuXG4iLCBxZGV2LT5pbnRyX2NvdW50KTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJxZGV2LT50eF9yaW5nCQk9ICVwLlxuIiwKLQkgICAgICAgcWRldi0+dHhfcmluZyk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAicWRldi0+cnNzX3JpbmdfY291bnQgCT0gJWQuXG4iLAotCSAgICAgICBxZGV2LT5yc3NfcmluZ19jb3VudCk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAicWRldi0+cnhfcmluZwk9ICVwLlxuIiwgcWRldi0+cnhfcmluZyk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAicWRldi0+ZGVmYXVsdF9yeF9xdWV1ZQk9ICVkLlxuIiwKLQkgICAgICAgcWRldi0+ZGVmYXVsdF9yeF9xdWV1ZSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAicWRldi0+eGdfc2VtX21hc2sJCT0gMHglMDh4LlxuIiwKLQkgICAgICAgcWRldi0+eGdfc2VtX21hc2spOwotCXByaW50ayhLRVJOX0VSUiBQRlggInFkZXYtPnBvcnRfbGlua191cAkJPSAweCUwOHguXG4iLAotCSAgICAgICBxZGV2LT5wb3J0X2xpbmtfdXApOwotCXByaW50ayhLRVJOX0VSUiBQRlggInFkZXYtPnBvcnRfaW5pdAkJPSAweCUwOHguXG4iLAotCSAgICAgICBxZGV2LT5wb3J0X2luaXQpOwotCisJRFVNUF9RREVWX0ZJRUxEKHFkZXYsICIlZCIsIHR4X3JpbmdfY291bnQpOworCURVTVBfUURFVl9GSUVMRChxZGV2LCAiJWQiLCByeF9yaW5nX2NvdW50KTsKKwlEVU1QX1FERVZfRklFTEQocWRldiwgIiVkIiwgcmluZ19tZW1fc2l6ZSk7CisJRFVNUF9RREVWX0ZJRUxEKHFkZXYsICIlcCIsIHJpbmdfbWVtKTsKKwlEVU1QX1FERVZfRklFTEQocWRldiwgIiVkIiwgaW50cl9jb3VudCk7CisJRFVNUF9RREVWX0ZJRUxEKHFkZXYsICIlcCIsIHR4X3JpbmcpOworCURVTVBfUURFVl9GSUVMRChxZGV2LCAiJWQiLCByc3NfcmluZ19jb3VudCk7CisJRFVNUF9RREVWX0ZJRUxEKHFkZXYsICIlcCIsIHJ4X3JpbmcpOworCURVTVBfUURFVl9GSUVMRChxZGV2LCAiJWQiLCBkZWZhdWx0X3J4X3F1ZXVlKTsKKwlEVU1QX1FERVZfRklFTEQocWRldiwgIjB4JTA4eCIsIHhnX3NlbV9tYXNrKTsKKwlEVU1QX1FERVZfRklFTEQocWRldiwgIjB4JTA4eCIsIHBvcnRfbGlua191cCk7CisJRFVNUF9RREVWX0ZJRUxEKHFkZXYsICIweCUwOHgiLCBwb3J0X2luaXQpOwogfQogI2VuZGlmCiAKICNpZmRlZiBRTF9DQl9EVU1QCiB2b2lkIHFsX2R1bXBfd3FpY2Ioc3RydWN0IHdxaWNiICp3cWljYikKIHsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJEdW1waW5nIHdxaWNiIHN0dWZmLi4uXG4iKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJ3cWljYi0+bGVuID0gMHgleC5cbiIsIGxlMTZfdG9fY3B1KHdxaWNiLT5sZW4pKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJ3cWljYi0+ZmxhZ3MgPSAleC5cbiIsIGxlMTZfdG9fY3B1KHdxaWNiLT5mbGFncykpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIndxaWNiLT5jcV9pZF9yc3MgPSAlZC5cbiIsCisJcHJfZXJyKCJEdW1waW5nIHdxaWNiIHN0dWZmLi4uXG4iKTsKKwlwcl9lcnIoIndxaWNiLT5sZW4gPSAweCV4XG4iLCBsZTE2X3RvX2NwdSh3cWljYi0+bGVuKSk7CisJcHJfZXJyKCJ3cWljYi0+ZmxhZ3MgPSAleFxuIiwgbGUxNl90b19jcHUod3FpY2ItPmZsYWdzKSk7CisJcHJfZXJyKCJ3cWljYi0+Y3FfaWRfcnNzID0gJWRcbiIsCiAJICAgICAgIGxlMTZfdG9fY3B1KHdxaWNiLT5jcV9pZF9yc3MpKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJ3cWljYi0+cmlkID0gMHgleC5cbiIsIGxlMTZfdG9fY3B1KHdxaWNiLT5yaWQpKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJ3cWljYi0+d3FfYWRkciA9IDB4JWxseC5cbiIsCisJcHJfZXJyKCJ3cWljYi0+cmlkID0gMHgleFxuIiwgbGUxNl90b19jcHUod3FpY2ItPnJpZCkpOworCXByX2Vycigid3FpY2ItPndxX2FkZHIgPSAweCVsbHhcbiIsCiAJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGxlNjRfdG9fY3B1KHdxaWNiLT5hZGRyKSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAid3FpY2ItPndxX2Nuc21yX2lkeF9hZGRyID0gMHglbGx4LlxuIiwKKwlwcl9lcnIoIndxaWNiLT53cV9jbnNtcl9pZHhfYWRkciA9IDB4JWxseFxuIiwKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgbGU2NF90b19jcHUod3FpY2ItPmNuc21yX2lkeF9hZGRyKSk7CiB9CiAKQEAgLTE4MDUsNDAgKzE2NTEsMzQgQEAKIHsKIAlpZiAodHhfcmluZyA9PSBOVUxMKQogCQlyZXR1cm47Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWAotCSAgICAgICAiPT09PT09PT09PT09PT09PT09PT09IER1bXBpbmcgdHhfcmluZyAlZCA9PT09PT09PT09PT09PT0uXG4iLAorCXByX2VycigiPT09PT09PT09PT09PT09PT09PT09IER1bXBpbmcgdHhfcmluZyAlZCA9PT09PT09PT09PT09PT1cbiIsCiAJICAgICAgIHR4X3JpbmctPndxX2lkKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJ0eF9yaW5nLT5iYXNlID0gJXAuXG4iLCB0eF9yaW5nLT53cV9iYXNlKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJ0eF9yaW5nLT5iYXNlX2RtYSA9IDB4JWxseC5cbiIsCisJcHJfZXJyKCJ0eF9yaW5nLT5iYXNlID0gJXBcbiIsIHR4X3JpbmctPndxX2Jhc2UpOworCXByX2VycigidHhfcmluZy0+YmFzZV9kbWEgPSAweCVsbHhcbiIsCiAJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHR4X3JpbmctPndxX2Jhc2VfZG1hKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYCi0JICAgICAgICJ0eF9yaW5nLT5jbnNtcl9pZHhfc2hfcmVnLCBhZGRyID0gMHglcCwgdmFsdWUgPSAlZC5cbiIsCisJcHJfZXJyKCJ0eF9yaW5nLT5jbnNtcl9pZHhfc2hfcmVnLCBhZGRyID0gMHglcCwgdmFsdWUgPSAlZFxuIiwKIAkgICAgICAgdHhfcmluZy0+Y25zbXJfaWR4X3NoX3JlZywKIAkgICAgICAgdHhfcmluZy0+Y25zbXJfaWR4X3NoX3JlZwogCQkJPyBxbF9yZWFkX3NoX3JlZyh0eF9yaW5nLT5jbnNtcl9pZHhfc2hfcmVnKSA6IDApOwotCXByaW50ayhLRVJOX0VSUiBQRlggInR4X3JpbmctPnNpemUgPSAlZC5cbiIsIHR4X3JpbmctPndxX3NpemUpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInR4X3JpbmctPmxlbiA9ICVkLlxuIiwgdHhfcmluZy0+d3FfbGVuKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJ0eF9yaW5nLT5wcm9kX2lkeF9kYl9yZWcgPSAlcC5cbiIsCi0JICAgICAgIHR4X3JpbmctPnByb2RfaWR4X2RiX3JlZyk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAidHhfcmluZy0+dmFsaWRfZGJfcmVnID0gJXAuXG4iLAotCSAgICAgICB0eF9yaW5nLT52YWxpZF9kYl9yZWcpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInR4X3JpbmctPnByb2RfaWR4ID0gJWQuXG4iLCB0eF9yaW5nLT5wcm9kX2lkeCk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAidHhfcmluZy0+Y3FfaWQgPSAlZC5cbiIsIHR4X3JpbmctPmNxX2lkKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJ0eF9yaW5nLT53cV9pZCA9ICVkLlxuIiwgdHhfcmluZy0+d3FfaWQpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInR4X3JpbmctPnEgPSAlcC5cbiIsIHR4X3JpbmctPnEpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInR4X3JpbmctPnR4X2NvdW50ID0gJWQuXG4iLAotCSAgICAgICBhdG9taWNfcmVhZCgmdHhfcmluZy0+dHhfY291bnQpKTsKKwlwcl9lcnIoInR4X3JpbmctPnNpemUgPSAlZFxuIiwgdHhfcmluZy0+d3Ffc2l6ZSk7CisJcHJfZXJyKCJ0eF9yaW5nLT5sZW4gPSAlZFxuIiwgdHhfcmluZy0+d3FfbGVuKTsKKwlwcl9lcnIoInR4X3JpbmctPnByb2RfaWR4X2RiX3JlZyA9ICVwXG4iLCB0eF9yaW5nLT5wcm9kX2lkeF9kYl9yZWcpOworCXByX2VycigidHhfcmluZy0+dmFsaWRfZGJfcmVnID0gJXBcbiIsIHR4X3JpbmctPnZhbGlkX2RiX3JlZyk7CisJcHJfZXJyKCJ0eF9yaW5nLT5wcm9kX2lkeCA9ICVkXG4iLCB0eF9yaW5nLT5wcm9kX2lkeCk7CisJcHJfZXJyKCJ0eF9yaW5nLT5jcV9pZCA9ICVkXG4iLCB0eF9yaW5nLT5jcV9pZCk7CisJcHJfZXJyKCJ0eF9yaW5nLT53cV9pZCA9ICVkXG4iLCB0eF9yaW5nLT53cV9pZCk7CisJcHJfZXJyKCJ0eF9yaW5nLT5xID0gJXBcbiIsIHR4X3JpbmctPnEpOworCXByX2VycigidHhfcmluZy0+dHhfY291bnQgPSAlZFxuIiwgYXRvbWljX3JlYWQoJnR4X3JpbmctPnR4X2NvdW50KSk7CiB9CiAKIHZvaWQgcWxfZHVtcF9yaWNiKHN0cnVjdCByaWNiICpyaWNiKQogewogCWludCBpOwotCXByaW50ayhLRVJOX0VSUiBQRlgKLQkgICAgICAgIj09PT09PT09PT09PT09PT09PT09PSBEdW1waW5nIHJpY2IgPT09PT09PT09PT09PT09LlxuIik7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiRHVtcGluZyByaWNiIHN0dWZmLi4uXG4iKTsKKwlwcl9lcnIoIj09PT09PT09PT09PT09PT09PT09PSBEdW1waW5nIHJpY2IgPT09PT09PT09PT09PT09XG4iKTsKKwlwcl9lcnIoIkR1bXBpbmcgcmljYiBzdHVmZi4uLlxuIik7CiAKLQlwcmludGsoS0VSTl9FUlIgUEZYICJyaWNiLT5iYXNlX2NxID0gJWQuXG4iLCByaWNiLT5iYXNlX2NxICYgMHgxZik7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAicmljYi0+ZmxhZ3MgPSAlcyVzJXMlcyVzJXMlcyVzJXMuXG4iLAorCXByX2VycigicmljYi0+YmFzZV9jcSA9ICVkXG4iLCByaWNiLT5iYXNlX2NxICYgMHgxZik7CisJcHJfZXJyKCJyaWNiLT5mbGFncyA9ICVzJXMlcyVzJXMlcyVzJXMlc1xuIiwKIAkgICAgICAgcmljYi0+YmFzZV9jcSAmIFJTU19MNEsgPyAiUlNTX0w0SyAiIDogIiIsCiAJICAgICAgIHJpY2ItPmZsYWdzICYgUlNTX0w2SyA/ICJSU1NfTDZLICIgOiAiIiwKIAkgICAgICAgcmljYi0+ZmxhZ3MgJiBSU1NfTEkgPyAiUlNTX0xJICIgOiAiIiwKQEAgLTE4NDgsNDQgKzE2ODgsNDQgQEAKIAkgICAgICAgcmljYi0+ZmxhZ3MgJiBSU1NfUlQ0ID8gIlJTU19SVDQgIiA6ICIiLAogCSAgICAgICByaWNiLT5mbGFncyAmIFJTU19SSTYgPyAiUlNTX1JJNiAiIDogIiIsCiAJICAgICAgIHJpY2ItPmZsYWdzICYgUlNTX1JUNiA/ICJSU1NfUlQ2ICIgOiAiIik7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAicmljYi0+bWFzayA9IDB4JS4wNHguXG4iLCBsZTE2X3RvX2NwdShyaWNiLT5tYXNrKSk7CisJcHJfZXJyKCJyaWNiLT5tYXNrID0gMHglLjA0eFxuIiwgbGUxNl90b19jcHUocmljYi0+bWFzaykpOwogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotCQlwcmludGsoS0VSTl9FUlIgUEZYICJyaWNiLT5oYXNoX2NxX2lkWyVkXSA9IDB4JS4wOHguXG4iLCBpLAorCQlwcl9lcnIoInJpY2ItPmhhc2hfY3FfaWRbJWRdID0gMHglLjA4eFxuIiwgaSwKIAkJICAgICAgIGxlMzJfdG9fY3B1KHJpY2ItPmhhc2hfY3FfaWRbaV0pKTsKIAlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAicmljYi0+aXB2Nl9oYXNoX2tleVslZF0gPSAweCUuMDh4LlxuIiwgaSwKKwkJcHJfZXJyKCJyaWNiLT5pcHY2X2hhc2hfa2V5WyVkXSA9IDB4JS4wOHhcbiIsIGksCiAJCSAgICAgICBsZTMyX3RvX2NwdShyaWNiLT5pcHY2X2hhc2hfa2V5W2ldKSk7CiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAicmljYi0+aXB2NF9oYXNoX2tleVslZF0gPSAweCUuMDh4LlxuIiwgaSwKKwkJcHJfZXJyKCJyaWNiLT5pcHY0X2hhc2hfa2V5WyVkXSA9IDB4JS4wOHhcbiIsIGksCiAJCSAgICAgICBsZTMyX3RvX2NwdShyaWNiLT5pcHY0X2hhc2hfa2V5W2ldKSk7CiB9CiAKIHZvaWQgcWxfZHVtcF9jcWljYihzdHJ1Y3QgY3FpY2IgKmNxaWNiKQogewotCXByaW50ayhLRVJOX0VSUiBQRlggIkR1bXBpbmcgY3FpY2Igc3R1ZmYuLi5cbiIpOworCXByX2VycigiRHVtcGluZyBjcWljYiBzdHVmZi4uLlxuIik7CiAKLQlwcmludGsoS0VSTl9FUlIgUEZYICJjcWljYi0+bXNpeF92ZWN0ID0gJWQuXG4iLCBjcWljYi0+bXNpeF92ZWN0KTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJjcWljYi0+ZmxhZ3MgPSAleC5cbiIsIGNxaWNiLT5mbGFncyk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiY3FpY2ItPmxlbiA9ICVkLlxuIiwgbGUxNl90b19jcHUoY3FpY2ItPmxlbikpOwotCXByaW50ayhLRVJOX0VSUiBQRlggImNxaWNiLT5hZGRyID0gMHglbGx4LlxuIiwKKwlwcl9lcnIoImNxaWNiLT5tc2l4X3ZlY3QgPSAlZFxuIiwgY3FpY2ItPm1zaXhfdmVjdCk7CisJcHJfZXJyKCJjcWljYi0+ZmxhZ3MgPSAleFxuIiwgY3FpY2ItPmZsYWdzKTsKKwlwcl9lcnIoImNxaWNiLT5sZW4gPSAlZFxuIiwgbGUxNl90b19jcHUoY3FpY2ItPmxlbikpOworCXByX2VycigiY3FpY2ItPmFkZHIgPSAweCVsbHhcbiIsCiAJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGxlNjRfdG9fY3B1KGNxaWNiLT5hZGRyKSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiY3FpY2ItPnByb2RfaWR4X2FkZHIgPSAweCVsbHguXG4iLAorCXByX2VycigiY3FpY2ItPnByb2RfaWR4X2FkZHIgPSAweCVsbHhcbiIsCiAJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGxlNjRfdG9fY3B1KGNxaWNiLT5wcm9kX2lkeF9hZGRyKSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiY3FpY2ItPnBrdF9kZWxheSA9IDB4JS4wNHguXG4iLAorCXByX2VycigiY3FpY2ItPnBrdF9kZWxheSA9IDB4JS4wNHhcbiIsCiAJICAgICAgIGxlMTZfdG9fY3B1KGNxaWNiLT5wa3RfZGVsYXkpKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJjcWljYi0+aXJxX2RlbGF5ID0gMHglLjA0eC5cbiIsCisJcHJfZXJyKCJjcWljYi0+aXJxX2RlbGF5ID0gMHglLjA0eFxuIiwKIAkgICAgICAgbGUxNl90b19jcHUoY3FpY2ItPmlycV9kZWxheSkpOwotCXByaW50ayhLRVJOX0VSUiBQRlggImNxaWNiLT5sYnFfYWRkciA9IDB4JWxseC5cbiIsCisJcHJfZXJyKCJjcWljYi0+bGJxX2FkZHIgPSAweCVsbHhcbiIsCiAJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGxlNjRfdG9fY3B1KGNxaWNiLT5sYnFfYWRkcikpOwotCXByaW50ayhLRVJOX0VSUiBQRlggImNxaWNiLT5sYnFfYnVmX3NpemUgPSAweCUuMDR4LlxuIiwKKwlwcl9lcnIoImNxaWNiLT5sYnFfYnVmX3NpemUgPSAweCUuMDR4XG4iLAogCSAgICAgICBsZTE2X3RvX2NwdShjcWljYi0+bGJxX2J1Zl9zaXplKSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiY3FpY2ItPmxicV9sZW4gPSAweCUuMDR4LlxuIiwKKwlwcl9lcnIoImNxaWNiLT5sYnFfbGVuID0gMHglLjA0eFxuIiwKIAkgICAgICAgbGUxNl90b19jcHUoY3FpY2ItPmxicV9sZW4pKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJjcWljYi0+c2JxX2FkZHIgPSAweCVsbHguXG4iLAorCXByX2VycigiY3FpY2ItPnNicV9hZGRyID0gMHglbGx4XG4iLAogCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBsZTY0X3RvX2NwdShjcWljYi0+c2JxX2FkZHIpKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJjcWljYi0+c2JxX2J1Zl9zaXplID0gMHglLjA0eC5cbiIsCisJcHJfZXJyKCJjcWljYi0+c2JxX2J1Zl9zaXplID0gMHglLjA0eFxuIiwKIAkgICAgICAgbGUxNl90b19jcHUoY3FpY2ItPnNicV9idWZfc2l6ZSkpOwotCXByaW50ayhLRVJOX0VSUiBQRlggImNxaWNiLT5zYnFfbGVuID0gMHglLjA0eC5cbiIsCisJcHJfZXJyKCJjcWljYi0+c2JxX2xlbiA9IDB4JS4wNHhcbiIsCiAJICAgICAgIGxlMTZfdG9fY3B1KGNxaWNiLT5zYnFfbGVuKSk7CiB9CiAKQEAgLTE4OTMsMTAwICsxNzMzLDg1IEBACiB7CiAJaWYgKHJ4X3JpbmcgPT0gTlVMTCkKIAkJcmV0dXJuOwotCXByaW50ayhLRVJOX0VSUiBQRlgKLQkgICAgICAgIj09PT09PT09PT09PT09PT09PT09PSBEdW1waW5nIHJ4X3JpbmcgJWQgPT09PT09PT09PT09PT09LlxuIiwKKwlwcl9lcnIoIj09PT09PT09PT09PT09PT09PT09PSBEdW1waW5nIHJ4X3JpbmcgJWQgPT09PT09PT09PT09PT09XG4iLAogCSAgICAgICByeF9yaW5nLT5jcV9pZCk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiRHVtcGluZyByeF9yaW5nICVkLCB0eXBlID0gJXMlcyVzLlxuIiwKKwlwcl9lcnIoIkR1bXBpbmcgcnhfcmluZyAlZCwgdHlwZSA9ICVzJXMlc1xuIiwKIAkgICAgICAgcnhfcmluZy0+Y3FfaWQsIHJ4X3JpbmctPnR5cGUgPT0gREVGQVVMVF9RID8gIkRFRkFVTFQiIDogIiIsCiAJICAgICAgIHJ4X3JpbmctPnR5cGUgPT0gVFhfUSA/ICJPVVRCT1VORCBDT01QTEVUSU9OUyIgOiAiIiwKIAkgICAgICAgcnhfcmluZy0+dHlwZSA9PSBSWF9RID8gIklOQk9VTkRfQ09NUExFVElPTlMiIDogIiIpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInJ4X3JpbmctPmNxaWNiID0gJXAuXG4iLCAmcnhfcmluZy0+Y3FpY2IpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInJ4X3JpbmctPmNxX2Jhc2UgPSAlcC5cbiIsIHJ4X3JpbmctPmNxX2Jhc2UpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInJ4X3JpbmctPmNxX2Jhc2VfZG1hID0gJWxseC5cbiIsCisJcHJfZXJyKCJyeF9yaW5nLT5jcWljYiA9ICVwXG4iLCAmcnhfcmluZy0+Y3FpY2IpOworCXByX2VycigicnhfcmluZy0+Y3FfYmFzZSA9ICVwXG4iLCByeF9yaW5nLT5jcV9iYXNlKTsKKwlwcl9lcnIoInJ4X3JpbmctPmNxX2Jhc2VfZG1hID0gJWxseFxuIiwKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcnhfcmluZy0+Y3FfYmFzZV9kbWEpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInJ4X3JpbmctPmNxX3NpemUgPSAlZC5cbiIsIHJ4X3JpbmctPmNxX3NpemUpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInJ4X3JpbmctPmNxX2xlbiA9ICVkLlxuIiwgcnhfcmluZy0+Y3FfbGVuKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYCi0JICAgICAgICJyeF9yaW5nLT5wcm9kX2lkeF9zaF9yZWcsIGFkZHIgPSAweCVwLCB2YWx1ZSA9ICVkLlxuIiwKKwlwcl9lcnIoInJ4X3JpbmctPmNxX3NpemUgPSAlZFxuIiwgcnhfcmluZy0+Y3Ffc2l6ZSk7CisJcHJfZXJyKCJyeF9yaW5nLT5jcV9sZW4gPSAlZFxuIiwgcnhfcmluZy0+Y3FfbGVuKTsKKwlwcl9lcnIoInJ4X3JpbmctPnByb2RfaWR4X3NoX3JlZywgYWRkciA9IDB4JXAsIHZhbHVlID0gJWRcbiIsCiAJICAgICAgIHJ4X3JpbmctPnByb2RfaWR4X3NoX3JlZywKIAkgICAgICAgcnhfcmluZy0+cHJvZF9pZHhfc2hfcmVnCiAJCQk/IHFsX3JlYWRfc2hfcmVnKHJ4X3JpbmctPnByb2RfaWR4X3NoX3JlZykgOiAwKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJyeF9yaW5nLT5wcm9kX2lkeF9zaF9yZWdfZG1hID0gJWxseC5cbiIsCisJcHJfZXJyKCJyeF9yaW5nLT5wcm9kX2lkeF9zaF9yZWdfZG1hID0gJWxseFxuIiwKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcnhfcmluZy0+cHJvZF9pZHhfc2hfcmVnX2RtYSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAicnhfcmluZy0+Y25zbXJfaWR4X2RiX3JlZyA9ICVwLlxuIiwKKwlwcl9lcnIoInJ4X3JpbmctPmNuc21yX2lkeF9kYl9yZWcgPSAlcFxuIiwKIAkgICAgICAgcnhfcmluZy0+Y25zbXJfaWR4X2RiX3JlZyk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAicnhfcmluZy0+Y25zbXJfaWR4ID0gJWQuXG4iLCByeF9yaW5nLT5jbnNtcl9pZHgpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInJ4X3JpbmctPmN1cnJfZW50cnkgPSAlcC5cbiIsIHJ4X3JpbmctPmN1cnJfZW50cnkpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInJ4X3JpbmctPnZhbGlkX2RiX3JlZyA9ICVwLlxuIiwKLQkgICAgICAgcnhfcmluZy0+dmFsaWRfZGJfcmVnKTsKKwlwcl9lcnIoInJ4X3JpbmctPmNuc21yX2lkeCA9ICVkXG4iLCByeF9yaW5nLT5jbnNtcl9pZHgpOworCXByX2VycigicnhfcmluZy0+Y3Vycl9lbnRyeSA9ICVwXG4iLCByeF9yaW5nLT5jdXJyX2VudHJ5KTsKKwlwcl9lcnIoInJ4X3JpbmctPnZhbGlkX2RiX3JlZyA9ICVwXG4iLCByeF9yaW5nLT52YWxpZF9kYl9yZWcpOwogCi0JcHJpbnRrKEtFUk5fRVJSIFBGWCAicnhfcmluZy0+bGJxX2Jhc2UgPSAlcC5cbiIsIHJ4X3JpbmctPmxicV9iYXNlKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJyeF9yaW5nLT5sYnFfYmFzZV9kbWEgPSAlbGx4LlxuIiwKKwlwcl9lcnIoInJ4X3JpbmctPmxicV9iYXNlID0gJXBcbiIsIHJ4X3JpbmctPmxicV9iYXNlKTsKKwlwcl9lcnIoInJ4X3JpbmctPmxicV9iYXNlX2RtYSA9ICVsbHhcbiIsCiAJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHJ4X3JpbmctPmxicV9iYXNlX2RtYSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAicnhfcmluZy0+bGJxX2Jhc2VfaW5kaXJlY3QgPSAlcC5cbiIsCisJcHJfZXJyKCJyeF9yaW5nLT5sYnFfYmFzZV9pbmRpcmVjdCA9ICVwXG4iLAogCSAgICAgICByeF9yaW5nLT5sYnFfYmFzZV9pbmRpcmVjdCk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAicnhfcmluZy0+bGJxX2Jhc2VfaW5kaXJlY3RfZG1hID0gJWxseC5cbiIsCisJcHJfZXJyKCJyeF9yaW5nLT5sYnFfYmFzZV9pbmRpcmVjdF9kbWEgPSAlbGx4XG4iLAogCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSByeF9yaW5nLT5sYnFfYmFzZV9pbmRpcmVjdF9kbWEpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInJ4X3JpbmctPmxicSA9ICVwLlxuIiwgcnhfcmluZy0+bGJxKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJyeF9yaW5nLT5sYnFfbGVuID0gJWQuXG4iLCByeF9yaW5nLT5sYnFfbGVuKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJyeF9yaW5nLT5sYnFfc2l6ZSA9ICVkLlxuIiwgcnhfcmluZy0+bGJxX3NpemUpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInJ4X3JpbmctPmxicV9wcm9kX2lkeF9kYl9yZWcgPSAlcC5cbiIsCisJcHJfZXJyKCJyeF9yaW5nLT5sYnEgPSAlcFxuIiwgcnhfcmluZy0+bGJxKTsKKwlwcl9lcnIoInJ4X3JpbmctPmxicV9sZW4gPSAlZFxuIiwgcnhfcmluZy0+bGJxX2xlbik7CisJcHJfZXJyKCJyeF9yaW5nLT5sYnFfc2l6ZSA9ICVkXG4iLCByeF9yaW5nLT5sYnFfc2l6ZSk7CisJcHJfZXJyKCJyeF9yaW5nLT5sYnFfcHJvZF9pZHhfZGJfcmVnID0gJXBcbiIsCiAJICAgICAgIHJ4X3JpbmctPmxicV9wcm9kX2lkeF9kYl9yZWcpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInJ4X3JpbmctPmxicV9wcm9kX2lkeCA9ICVkLlxuIiwKLQkgICAgICAgcnhfcmluZy0+bGJxX3Byb2RfaWR4KTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJyeF9yaW5nLT5sYnFfY3Vycl9pZHggPSAlZC5cbiIsCi0JICAgICAgIHJ4X3JpbmctPmxicV9jdXJyX2lkeCk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAicnhfcmluZy0+bGJxX2NsZWFuX2lkeCA9ICVkLlxuIiwKLQkgICAgICAgcnhfcmluZy0+bGJxX2NsZWFuX2lkeCk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAicnhfcmluZy0+bGJxX2ZyZWVfY250ID0gJWQuXG4iLAotCSAgICAgICByeF9yaW5nLT5sYnFfZnJlZV9jbnQpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInJ4X3JpbmctPmxicV9idWZfc2l6ZSA9ICVkLlxuIiwKLQkgICAgICAgcnhfcmluZy0+bGJxX2J1Zl9zaXplKTsKKwlwcl9lcnIoInJ4X3JpbmctPmxicV9wcm9kX2lkeCA9ICVkXG4iLCByeF9yaW5nLT5sYnFfcHJvZF9pZHgpOworCXByX2VycigicnhfcmluZy0+bGJxX2N1cnJfaWR4ID0gJWRcbiIsIHJ4X3JpbmctPmxicV9jdXJyX2lkeCk7CisJcHJfZXJyKCJyeF9yaW5nLT5sYnFfY2xlYW5faWR4ID0gJWRcbiIsIHJ4X3JpbmctPmxicV9jbGVhbl9pZHgpOworCXByX2VycigicnhfcmluZy0+bGJxX2ZyZWVfY250ID0gJWRcbiIsIHJ4X3JpbmctPmxicV9mcmVlX2NudCk7CisJcHJfZXJyKCJyeF9yaW5nLT5sYnFfYnVmX3NpemUgPSAlZFxuIiwgcnhfcmluZy0+bGJxX2J1Zl9zaXplKTsKIAotCXByaW50ayhLRVJOX0VSUiBQRlggInJ4X3JpbmctPnNicV9iYXNlID0gJXAuXG4iLCByeF9yaW5nLT5zYnFfYmFzZSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAicnhfcmluZy0+c2JxX2Jhc2VfZG1hID0gJWxseC5cbiIsCisJcHJfZXJyKCJyeF9yaW5nLT5zYnFfYmFzZSA9ICVwXG4iLCByeF9yaW5nLT5zYnFfYmFzZSk7CisJcHJfZXJyKCJyeF9yaW5nLT5zYnFfYmFzZV9kbWEgPSAlbGx4XG4iLAogCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSByeF9yaW5nLT5zYnFfYmFzZV9kbWEpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInJ4X3JpbmctPnNicV9iYXNlX2luZGlyZWN0ID0gJXAuXG4iLAorCXByX2VycigicnhfcmluZy0+c2JxX2Jhc2VfaW5kaXJlY3QgPSAlcFxuIiwKIAkgICAgICAgcnhfcmluZy0+c2JxX2Jhc2VfaW5kaXJlY3QpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInJ4X3JpbmctPnNicV9iYXNlX2luZGlyZWN0X2RtYSA9ICVsbHguXG4iLAorCXByX2VycigicnhfcmluZy0+c2JxX2Jhc2VfaW5kaXJlY3RfZG1hID0gJWxseFxuIiwKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcnhfcmluZy0+c2JxX2Jhc2VfaW5kaXJlY3RfZG1hKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJyeF9yaW5nLT5zYnEgPSAlcC5cbiIsIHJ4X3JpbmctPnNicSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAicnhfcmluZy0+c2JxX2xlbiA9ICVkLlxuIiwgcnhfcmluZy0+c2JxX2xlbik7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAicnhfcmluZy0+c2JxX3NpemUgPSAlZC5cbiIsIHJ4X3JpbmctPnNicV9zaXplKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJyeF9yaW5nLT5zYnFfcHJvZF9pZHhfZGJfcmVnIGFkZHIgPSAlcC5cbiIsCisJcHJfZXJyKCJyeF9yaW5nLT5zYnEgPSAlcFxuIiwgcnhfcmluZy0+c2JxKTsKKwlwcl9lcnIoInJ4X3JpbmctPnNicV9sZW4gPSAlZFxuIiwgcnhfcmluZy0+c2JxX2xlbik7CisJcHJfZXJyKCJyeF9yaW5nLT5zYnFfc2l6ZSA9ICVkXG4iLCByeF9yaW5nLT5zYnFfc2l6ZSk7CisJcHJfZXJyKCJyeF9yaW5nLT5zYnFfcHJvZF9pZHhfZGJfcmVnIGFkZHIgPSAlcFxuIiwKIAkgICAgICAgcnhfcmluZy0+c2JxX3Byb2RfaWR4X2RiX3JlZyk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAicnhfcmluZy0+c2JxX3Byb2RfaWR4ID0gJWQuXG4iLAotCSAgICAgICByeF9yaW5nLT5zYnFfcHJvZF9pZHgpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInJ4X3JpbmctPnNicV9jdXJyX2lkeCA9ICVkLlxuIiwKLQkgICAgICAgcnhfcmluZy0+c2JxX2N1cnJfaWR4KTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJyeF9yaW5nLT5zYnFfY2xlYW5faWR4ID0gJWQuXG4iLAotCSAgICAgICByeF9yaW5nLT5zYnFfY2xlYW5faWR4KTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJyeF9yaW5nLT5zYnFfZnJlZV9jbnQgPSAlZC5cbiIsCi0JICAgICAgIHJ4X3JpbmctPnNicV9mcmVlX2NudCk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAicnhfcmluZy0+c2JxX2J1Zl9zaXplID0gJWQuXG4iLAotCSAgICAgICByeF9yaW5nLT5zYnFfYnVmX3NpemUpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInJ4X3JpbmctPmNxX2lkID0gJWQuXG4iLCByeF9yaW5nLT5jcV9pZCk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAicnhfcmluZy0+aXJxID0gJWQuXG4iLCByeF9yaW5nLT5pcnEpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInJ4X3JpbmctPmNwdSA9ICVkLlxuIiwgcnhfcmluZy0+Y3B1KTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJyeF9yaW5nLT5xZGV2ID0gJXAuXG4iLCByeF9yaW5nLT5xZGV2KTsKKwlwcl9lcnIoInJ4X3JpbmctPnNicV9wcm9kX2lkeCA9ICVkXG4iLCByeF9yaW5nLT5zYnFfcHJvZF9pZHgpOworCXByX2VycigicnhfcmluZy0+c2JxX2N1cnJfaWR4ID0gJWRcbiIsIHJ4X3JpbmctPnNicV9jdXJyX2lkeCk7CisJcHJfZXJyKCJyeF9yaW5nLT5zYnFfY2xlYW5faWR4ID0gJWRcbiIsIHJ4X3JpbmctPnNicV9jbGVhbl9pZHgpOworCXByX2VycigicnhfcmluZy0+c2JxX2ZyZWVfY250ID0gJWRcbiIsIHJ4X3JpbmctPnNicV9mcmVlX2NudCk7CisJcHJfZXJyKCJyeF9yaW5nLT5zYnFfYnVmX3NpemUgPSAlZFxuIiwgcnhfcmluZy0+c2JxX2J1Zl9zaXplKTsKKwlwcl9lcnIoInJ4X3JpbmctPmNxX2lkID0gJWRcbiIsIHJ4X3JpbmctPmNxX2lkKTsKKwlwcl9lcnIoInJ4X3JpbmctPmlycSA9ICVkXG4iLCByeF9yaW5nLT5pcnEpOworCXByX2VycigicnhfcmluZy0+Y3B1ID0gJWRcbiIsIHJ4X3JpbmctPmNwdSk7CisJcHJfZXJyKCJyeF9yaW5nLT5xZGV2ID0gJXBcbiIsIHJ4X3JpbmctPnFkZXYpOwogfQogCiB2b2lkIHFsX2R1bXBfaHdfY2Ioc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIGludCBzaXplLCB1MzIgYml0LCB1MTYgcV9pZCkKIHsKIAl2b2lkICpwdHI7CiAKLQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogRW50ZXIuXG4iLCBfX2Z1bmNfXyk7CisJcHJfZXJyKCIlczogRW50ZXJcbiIsIF9fZnVuY19fKTsKIAogCXB0ciA9IGttYWxsb2Moc2l6ZSwgR0ZQX0FUT01JQyk7CiAJaWYgKHB0ciA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBDb3VsZG4ndCBhbGxvY2F0ZSBhIGJ1ZmZlci5cbiIsCi0JCSAgICAgICBfX2Z1bmNfXyk7CisJCXByX2VycigiJXM6IENvdWxkbid0IGFsbG9jYXRlIGEgYnVmZmVyXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAocWxfd3JpdGVfY2ZnKHFkZXYsIHB0ciwgc2l6ZSwgYml0LCBxX2lkKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gdXBsb2FkIGNvbnRyb2wgYmxvY2shXG4iLAotCQkgICAgICAgX19mdW5jX18pOworCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gdXBsb2FkIGNvbnRyb2wgYmxvY2shXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gZmFpbF9pdDsKIAl9CiAJc3dpdGNoIChiaXQpIHsKQEAgLTIwMDAsOCArMTgyNSw3IEBACiAJCXFsX2R1bXBfcmljYigoc3RydWN0IHJpY2IgKilwdHIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogSW52YWxpZCBiaXQgdmFsdWUgPSAleC5cbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgYml0KTsKKwkJcHJfZXJyKCIlczogSW52YWxpZCBiaXQgdmFsdWUgPSAleFxuIiwgX19mdW5jX18sIGJpdCk7CiAJCWJyZWFrOwogCX0KIGZhaWxfaXQ6CkBAIC0yMDEyLDI3ICsxODM2LDI3IEBACiAjaWZkZWYgUUxfT0JfRFVNUAogdm9pZCBxbF9kdW1wX3R4X2Rlc2Moc3RydWN0IHR4X2J1Zl9kZXNjICp0YmQpCiB7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAidGJkLT5hZGRyICA9IDB4JWxseFxuIiwKKwlwcl9lcnIoInRiZC0+YWRkciAgPSAweCVsbHhcbiIsCiAJICAgICAgIGxlNjRfdG9fY3B1KCh1NjQpIHRiZC0+YWRkcikpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInRiZC0+bGVuICAgPSAlZFxuIiwKKwlwcl9lcnIoInRiZC0+bGVuICAgPSAlZFxuIiwKIAkgICAgICAgbGUzMl90b19jcHUodGJkLT5sZW4gJiBUWF9ERVNDX0xFTl9NQVNLKSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAidGJkLT5mbGFncyA9ICVzICVzXG4iLAorCXByX2VycigidGJkLT5mbGFncyA9ICVzICVzXG4iLAogCSAgICAgICB0YmQtPmxlbiAmIFRYX0RFU0NfQyA/ICJDIiA6ICIuIiwKIAkgICAgICAgdGJkLT5sZW4gJiBUWF9ERVNDX0UgPyAiRSIgOiAiLiIpOwogCXRiZCsrOwotCXByaW50ayhLRVJOX0VSUiBQRlggInRiZC0+YWRkciAgPSAweCVsbHhcbiIsCisJcHJfZXJyKCJ0YmQtPmFkZHIgID0gMHglbGx4XG4iLAogCSAgICAgICBsZTY0X3RvX2NwdSgodTY0KSB0YmQtPmFkZHIpKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJ0YmQtPmxlbiAgID0gJWRcbiIsCisJcHJfZXJyKCJ0YmQtPmxlbiAgID0gJWRcbiIsCiAJICAgICAgIGxlMzJfdG9fY3B1KHRiZC0+bGVuICYgVFhfREVTQ19MRU5fTUFTSykpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInRiZC0+ZmxhZ3MgPSAlcyAlc1xuIiwKKwlwcl9lcnIoInRiZC0+ZmxhZ3MgPSAlcyAlc1xuIiwKIAkgICAgICAgdGJkLT5sZW4gJiBUWF9ERVNDX0MgPyAiQyIgOiAiLiIsCiAJICAgICAgIHRiZC0+bGVuICYgVFhfREVTQ19FID8gIkUiIDogIi4iKTsKIAl0YmQrKzsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJ0YmQtPmFkZHIgID0gMHglbGx4XG4iLAorCXByX2VycigidGJkLT5hZGRyICA9IDB4JWxseFxuIiwKIAkgICAgICAgbGU2NF90b19jcHUoKHU2NCkgdGJkLT5hZGRyKSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAidGJkLT5sZW4gICA9ICVkXG4iLAorCXByX2VycigidGJkLT5sZW4gICA9ICVkXG4iLAogCSAgICAgICBsZTMyX3RvX2NwdSh0YmQtPmxlbiAmIFRYX0RFU0NfTEVOX01BU0spKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJ0YmQtPmZsYWdzID0gJXMgJXNcbiIsCisJcHJfZXJyKCJ0YmQtPmZsYWdzID0gJXMgJXNcbiIsCiAJICAgICAgIHRiZC0+bGVuICYgVFhfREVTQ19DID8gIkMiIDogIi4iLAogCSAgICAgICB0YmQtPmxlbiAmIFRYX0RFU0NfRSA/ICJFIiA6ICIuIik7CiAKQEAgLTIwNDUsMzggKzE4NjksMzggQEAKIAlzdHJ1Y3QgdHhfYnVmX2Rlc2MgKnRiZDsKIAl1MTYgZnJhbWVfbGVuOwogCi0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXNcbiIsIF9fZnVuY19fKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJvcGNvZGUgICAgICAgICA9ICVzXG4iLAorCXByX2VycigiJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9lcnIoIm9wY29kZSAgICAgICAgID0gJXNcbiIsCiAJICAgICAgIChvYl9tYWNfaW9jYi0+b3Bjb2RlID09IE9QQ09ERV9PQl9NQUNfSU9DQikgPyAiTUFDIiA6ICJUU08iKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJmbGFnczEgICAgICAgICAgPSAlcyAlcyAlcyAlcyAlc1xuIiwKKwlwcl9lcnIoImZsYWdzMSAgICAgICAgICA9ICVzICVzICVzICVzICVzXG4iLAogCSAgICAgICBvYl9tYWNfdHNvX2lvY2ItPmZsYWdzMSAmIE9CX01BQ19UU09fSU9DQl9PSSA/ICJPSSIgOiAiIiwKIAkgICAgICAgb2JfbWFjX3Rzb19pb2NiLT5mbGFnczEgJiBPQl9NQUNfVFNPX0lPQ0JfSSA/ICJJIiA6ICIiLAogCSAgICAgICBvYl9tYWNfdHNvX2lvY2ItPmZsYWdzMSAmIE9CX01BQ19UU09fSU9DQl9EID8gIkQiIDogIiIsCiAJICAgICAgIG9iX21hY190c29faW9jYi0+ZmxhZ3MxICYgT0JfTUFDX1RTT19JT0NCX0lQNCA/ICJJUDQiIDogIiIsCiAJICAgICAgIG9iX21hY190c29faW9jYi0+ZmxhZ3MxICYgT0JfTUFDX1RTT19JT0NCX0lQNiA/ICJJUDYiIDogIiIpOwotCXByaW50ayhLRVJOX0VSUiBQRlggImZsYWdzMiAgICAgICAgICA9ICVzICVzICVzXG4iLAorCXByX2VycigiZmxhZ3MyICAgICAgICAgID0gJXMgJXMgJXNcbiIsCiAJICAgICAgIG9iX21hY190c29faW9jYi0+ZmxhZ3MyICYgT0JfTUFDX1RTT19JT0NCX0xTTyA/ICJMU08iIDogIiIsCiAJICAgICAgIG9iX21hY190c29faW9jYi0+ZmxhZ3MyICYgT0JfTUFDX1RTT19JT0NCX1VDID8gIlVDIiA6ICIiLAogCSAgICAgICBvYl9tYWNfdHNvX2lvY2ItPmZsYWdzMiAmIE9CX01BQ19UU09fSU9DQl9UQyA/ICJUQyIgOiAiIik7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmxhZ3MzICAgICAgICAgID0gJXMgJXMgJXNcbiIsCisJcHJfZXJyKCJmbGFnczMgICAgICAgICAgPSAlcyAlcyAlc1xuIiwKIAkgICAgICAgb2JfbWFjX3Rzb19pb2NiLT5mbGFnczMgJiBPQl9NQUNfVFNPX0lPQ0JfSUMgPyAiSUMiIDogIiIsCiAJICAgICAgIG9iX21hY190c29faW9jYi0+ZmxhZ3MzICYgT0JfTUFDX1RTT19JT0NCX0RGUCA/ICJERlAiIDogIiIsCiAJICAgICAgIG9iX21hY190c29faW9jYi0+ZmxhZ3MzICYgT0JfTUFDX1RTT19JT0NCX1YgPyAiViIgOiAiIik7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAidGlkID0gJXhcbiIsIG9iX21hY19pb2NiLT50aWQpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInR4cV9pZHggPSAlZFxuIiwgb2JfbWFjX2lvY2ItPnR4cV9pZHgpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInZsYW5fdGNpICAgICAgPSAleFxuIiwgb2JfbWFjX3Rzb19pb2NiLT52bGFuX3RjaSk7CisJcHJfZXJyKCJ0aWQgPSAleFxuIiwgb2JfbWFjX2lvY2ItPnRpZCk7CisJcHJfZXJyKCJ0eHFfaWR4ID0gJWRcbiIsIG9iX21hY19pb2NiLT50eHFfaWR4KTsKKwlwcl9lcnIoInZsYW5fdGNpICAgICAgPSAleFxuIiwgb2JfbWFjX3Rzb19pb2NiLT52bGFuX3RjaSk7CiAJaWYgKG9iX21hY19pb2NiLT5vcGNvZGUgPT0gT1BDT0RFX09CX01BQ19UU09fSU9DQikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJmcmFtZV9sZW4gICAgICA9ICVkXG4iLAorCQlwcl9lcnIoImZyYW1lX2xlbiAgICAgID0gJWRcbiIsCiAJCSAgICAgICBsZTMyX3RvX2NwdShvYl9tYWNfdHNvX2lvY2ItPmZyYW1lX2xlbikpOwotCQlwcmludGsoS0VSTl9FUlIgUEZYICJtc3MgICAgICA9ICVkXG4iLAorCQlwcl9lcnIoIm1zcyAgICAgID0gJWRcbiIsCiAJCSAgICAgICBsZTE2X3RvX2NwdShvYl9tYWNfdHNvX2lvY2ItPm1zcykpOwotCQlwcmludGsoS0VSTl9FUlIgUEZYICJwcm90X2hkcl9sZW4gICA9ICVkXG4iLAorCQlwcl9lcnIoInByb3RfaGRyX2xlbiAgID0gJWRcbiIsCiAJCSAgICAgICBsZTE2X3RvX2NwdShvYl9tYWNfdHNvX2lvY2ItPnRvdGFsX2hkcnNfbGVuKSk7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImhkcl9vZmZzZXQgICAgID0gMHglLjA0eFxuIiwKKwkJcHJfZXJyKCJoZHJfb2Zmc2V0ICAgICA9IDB4JS4wNHhcbiIsCiAJCSAgICAgICBsZTE2X3RvX2NwdShvYl9tYWNfdHNvX2lvY2ItPm5ldF90cmFuc19vZmZzZXQpKTsKIAkJZnJhbWVfbGVuID0gbGUzMl90b19jcHUob2JfbWFjX3Rzb19pb2NiLT5mcmFtZV9sZW4pOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImZyYW1lX2xlbiAgICAgID0gJWRcbiIsCisJCXByX2VycigiZnJhbWVfbGVuICAgICAgPSAlZFxuIiwKIAkJICAgICAgIGxlMTZfdG9fY3B1KG9iX21hY19pb2NiLT5mcmFtZV9sZW4pKTsKIAkJZnJhbWVfbGVuID0gbGUxNl90b19jcHUob2JfbWFjX2lvY2ItPmZyYW1lX2xlbik7CiAJfQpAQCAtMjA4Niw5ICsxOTEwLDkgQEAKIAogdm9pZCBxbF9kdW1wX29iX21hY19yc3Aoc3RydWN0IG9iX21hY19pb2NiX3JzcCAqb2JfbWFjX3JzcCkKIHsKLQlwcmludGsoS0VSTl9FUlIgUEZYICIlc1xuIiwgX19mdW5jX18pOwotCXByaW50ayhLRVJOX0VSUiBQRlggIm9wY29kZSAgICAgICAgID0gJWRcbiIsIG9iX21hY19yc3AtPm9wY29kZSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmxhZ3MgICAgICAgICAgPSAlcyAlcyAlcyAlcyAlcyAlcyAlc1xuIiwKKwlwcl9lcnIoIiVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZXJyKCJvcGNvZGUgICAgICAgICA9ICVkXG4iLCBvYl9tYWNfcnNwLT5vcGNvZGUpOworCXByX2VycigiZmxhZ3MgICAgICAgICAgPSAlcyAlcyAlcyAlcyAlcyAlcyAlc1xuIiwKIAkgICAgICAgb2JfbWFjX3JzcC0+ZmxhZ3MxICYgT0JfTUFDX0lPQ0JfUlNQX09JID8gIk9JIiA6ICIuIiwKIAkgICAgICAgb2JfbWFjX3JzcC0+ZmxhZ3MxICYgT0JfTUFDX0lPQ0JfUlNQX0kgPyAiSSIgOiAiLiIsCiAJICAgICAgIG9iX21hY19yc3AtPmZsYWdzMSAmIE9CX01BQ19JT0NCX1JTUF9FID8gIkUiIDogIi4iLApAQCAtMjA5NiwxNiArMTkyMCwxNiBAQAogCSAgICAgICBvYl9tYWNfcnNwLT5mbGFnczEgJiBPQl9NQUNfSU9DQl9SU1BfTCA/ICJMIiA6ICIuIiwKIAkgICAgICAgb2JfbWFjX3JzcC0+ZmxhZ3MxICYgT0JfTUFDX0lPQ0JfUlNQX1AgPyAiUCIgOiAiLiIsCiAJICAgICAgIG9iX21hY19yc3AtPmZsYWdzMiAmIE9CX01BQ19JT0NCX1JTUF9CID8gIkIiIDogIi4iKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJ0aWQgPSAleFxuIiwgb2JfbWFjX3JzcC0+dGlkKTsKKwlwcl9lcnIoInRpZCA9ICV4XG4iLCBvYl9tYWNfcnNwLT50aWQpOwogfQogI2VuZGlmCiAKICNpZmRlZiBRTF9JQl9EVU1QCiB2b2lkIHFsX2R1bXBfaWJfbWFjX3JzcChzdHJ1Y3QgaWJfbWFjX2lvY2JfcnNwICppYl9tYWNfcnNwKQogewotCXByaW50ayhLRVJOX0VSUiBQRlggIiVzXG4iLCBfX2Z1bmNfXyk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAib3Bjb2RlICAgICAgICAgPSAweCV4XG4iLCBpYl9tYWNfcnNwLT5vcGNvZGUpOwotCXByaW50ayhLRVJOX0VSUiBQRlggImZsYWdzMSA9ICVzJXMlcyVzJXMlc1xuIiwKKwlwcl9lcnIoIiVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZXJyKCJvcGNvZGUgICAgICAgICA9IDB4JXhcbiIsIGliX21hY19yc3AtPm9wY29kZSk7CisJcHJfZXJyKCJmbGFnczEgPSAlcyVzJXMlcyVzJXNcbiIsCiAJICAgICAgIGliX21hY19yc3AtPmZsYWdzMSAmIElCX01BQ19JT0NCX1JTUF9PSSA/ICJPSSAiIDogIiIsCiAJICAgICAgIGliX21hY19yc3AtPmZsYWdzMSAmIElCX01BQ19JT0NCX1JTUF9JID8gIkkgIiA6ICIiLAogCSAgICAgICBpYl9tYWNfcnNwLT5mbGFnczEgJiBJQl9NQUNfSU9DQl9SU1BfVEUgPyAiVEUgIiA6ICIiLApAQCAtMjExNCw3ICsxOTM4LDcgQEAKIAkgICAgICAgaWJfbWFjX3JzcC0+ZmxhZ3MxICYgSUJfTUFDX0lPQ0JfUlNQX0IgPyAiQiAiIDogIiIpOwogCiAJaWYgKGliX21hY19yc3AtPmZsYWdzMSAmIElCX01BQ19JT0NCX1JTUF9NX01BU0spCi0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzJXMlcyBNdWx0aWNhc3QuXG4iLAorCQlwcl9lcnIoIiVzJXMlcyBNdWx0aWNhc3RcbiIsCiAJCSAgICAgICAoaWJfbWFjX3JzcC0+ZmxhZ3MxICYgSUJfTUFDX0lPQ0JfUlNQX01fTUFTSykgPT0KIAkJICAgICAgIElCX01BQ19JT0NCX1JTUF9NX0hBU0ggPyAiSGFzaCIgOiAiIiwKIAkJICAgICAgIChpYl9tYWNfcnNwLT5mbGFnczEgJiBJQl9NQUNfSU9DQl9SU1BfTV9NQVNLKSA9PQpAQCAtMjEyMiw3ICsxOTQ2LDcgQEAKIAkJICAgICAgIChpYl9tYWNfcnNwLT5mbGFnczEgJiBJQl9NQUNfSU9DQl9SU1BfTV9NQVNLKSA9PQogCQkgICAgICAgSUJfTUFDX0lPQ0JfUlNQX01fUFJPTSA/ICJQcm9taXNjdW91cyIgOiAiIik7CiAKLQlwcmludGsoS0VSTl9FUlIgUEZYICJmbGFnczIgPSAlcyVzJXMlcyVzXG4iLAorCXByX2VycigiZmxhZ3MyID0gJXMlcyVzJXMlc1xuIiwKIAkgICAgICAgKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9QKSA/ICJQICIgOiAiIiwKIAkgICAgICAgKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9WKSA/ICJWICIgOiAiIiwKIAkgICAgICAgKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9VKSA/ICJVICIgOiAiIiwKQEAgLTIxMzAsNyArMTk1NCw3IEBACiAJICAgICAgIChpYl9tYWNfcnNwLT5mbGFnczIgJiBJQl9NQUNfSU9DQl9SU1BfRk8pID8gIkZPICIgOiAiIik7CiAKIAlpZiAoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX0VSUl9NQVNLKQotCQlwcmludGsoS0VSTl9FUlIgUEZYICIlcyVzJXMlcyVzIGVycm9yLlxuIiwKKwkJcHJfZXJyKCIlcyVzJXMlcyVzIGVycm9yXG4iLAogCQkgICAgICAgKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9FUlJfTUFTSykgPT0KIAkJICAgICAgIElCX01BQ19JT0NCX1JTUF9FUlJfT1ZFUlNJWkUgPyAib3ZlcnNpemUiIDogIiIsCiAJCSAgICAgICAoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX0VSUl9NQVNLKSA9PQpAQCAtMjE0MiwxMiArMTk2NiwxMiBAQAogCQkgICAgICAgKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9FUlJfTUFTSykgPT0KIAkJICAgICAgIElCX01BQ19JT0NCX1JTUF9FUlJfQ1JDID8gIkNSQyIgOiAiIik7CiAKLQlwcmludGsoS0VSTl9FUlIgUEZYICJmbGFnczMgPSAlcyVzLlxuIiwKKwlwcl9lcnIoImZsYWdzMyA9ICVzJXNcbiIsCiAJICAgICAgIGliX21hY19yc3AtPmZsYWdzMyAmIElCX01BQ19JT0NCX1JTUF9EUyA/ICJEUyAiIDogIiIsCiAJICAgICAgIGliX21hY19yc3AtPmZsYWdzMyAmIElCX01BQ19JT0NCX1JTUF9ETCA/ICJETCAiIDogIiIpOwogCiAJaWYgKGliX21hY19yc3AtPmZsYWdzMyAmIElCX01BQ19JT0NCX1JTUF9SU1NfTUFTSykKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiUlNTIGZsYWdzID0gJXMlcyVzJXMuXG4iLAorCQlwcl9lcnIoIlJTUyBmbGFncyA9ICVzJXMlcyVzXG4iLAogCQkgICAgICAgKChpYl9tYWNfcnNwLT5mbGFnczMgJiBJQl9NQUNfSU9DQl9SU1BfUlNTX01BU0spID09CiAJCQlJQl9NQUNfSU9DQl9SU1BfTV9JUFY0KSA/ICJJUHY0IFJTUyIgOiAiIiwKIAkJICAgICAgICgoaWJfbWFjX3JzcC0+ZmxhZ3MzICYgSUJfTUFDX0lPQ0JfUlNQX1JTU19NQVNLKSA9PQpAQCAtMjE1NywyNiArMTk4MSwyNiBAQAogCQkgICAgICAgKChpYl9tYWNfcnNwLT5mbGFnczMgJiBJQl9NQUNfSU9DQl9SU1BfUlNTX01BU0spID09CiAJCQlJQl9NQUNfSU9DQl9SU1BfTV9UQ1BfVjYpID8gIlRDUC9JUHY2IFJTUyIgOiAiIik7CiAKLQlwcmludGsoS0VSTl9FUlIgUEZYICJkYXRhX2xlbgk9ICVkXG4iLAorCXByX2VycigiZGF0YV9sZW4JPSAlZFxuIiwKIAkgICAgICAgbGUzMl90b19jcHUoaWJfbWFjX3JzcC0+ZGF0YV9sZW4pKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJkYXRhX2FkZHIgICAgPSAweCVsbHhcbiIsCisJcHJfZXJyKCJkYXRhX2FkZHIgICAgPSAweCVsbHhcbiIsCiAJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGxlNjRfdG9fY3B1KGliX21hY19yc3AtPmRhdGFfYWRkcikpOwogCWlmIChpYl9tYWNfcnNwLT5mbGFnczMgJiBJQl9NQUNfSU9DQl9SU1BfUlNTX01BU0spCi0JCXByaW50ayhLRVJOX0VSUiBQRlggInJzcyAgICA9ICV4XG4iLAorCQlwcl9lcnIoInJzcyAgICA9ICV4XG4iLAogCQkgICAgICAgbGUzMl90b19jcHUoaWJfbWFjX3JzcC0+cnNzKSk7CiAJaWYgKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9WKQotCQlwcmludGsoS0VSTl9FUlIgUEZYICJ2bGFuX2lkICAgID0gJXhcbiIsCisJCXByX2Vycigidmxhbl9pZCAgICA9ICV4XG4iLAogCQkgICAgICAgbGUxNl90b19jcHUoaWJfbWFjX3JzcC0+dmxhbl9pZCkpOwogCi0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmxhZ3M0ID0gJXMlcyVzLlxuIiwKKwlwcl9lcnIoImZsYWdzNCA9ICVzJXMlc1xuIiwKIAkJaWJfbWFjX3JzcC0+ZmxhZ3M0ICYgSUJfTUFDX0lPQ0JfUlNQX0hWID8gIkhWICIgOiAiIiwKIAkJaWJfbWFjX3JzcC0+ZmxhZ3M0ICYgSUJfTUFDX0lPQ0JfUlNQX0hTID8gIkhTICIgOiAiIiwKIAkJaWJfbWFjX3JzcC0+ZmxhZ3M0ICYgSUJfTUFDX0lPQ0JfUlNQX0hMID8gIkhMICIgOiAiIik7CiAKIAlpZiAoaWJfbWFjX3JzcC0+ZmxhZ3M0ICYgSUJfTUFDX0lPQ0JfUlNQX0hWKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImhkciBsZW5ndGgJPSAlZC5cbiIsCisJCXByX2VycigiaGRyIGxlbmd0aAk9ICVkXG4iLAogCQkgICAgICAgbGUzMl90b19jcHUoaWJfbWFjX3JzcC0+aGRyX2xlbikpOwotCQlwcmludGsoS0VSTl9FUlIgUEZYICJoZHIgYWRkciAgICA9IDB4JWxseC5cbiIsCisJCXByX2VycigiaGRyIGFkZHIgICAgPSAweCVsbHhcbiIsCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBsZTY0X3RvX2NwdShpYl9tYWNfcnNwLT5oZHJfYWRkcikpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jCmluZGV4IGQxMGJjZWYuLjhkNjNmNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYwpAQCAtNTc0LDYgKzU3NCwyMiBAQAogCQkJICAgIChSVF9JRFhfQUxMX0VSUl9TTE9UIDw8IFJUX0lEWF9JRFhfU0hJRlQpOy8qIGluZGV4ICovCiAJCQlicmVhazsKIAkJfQorCWNhc2UgUlRfSURYX0lQX0NTVU1fRVJSOiAvKiBQYXNzIHVwIElQIENTVU0gZXJyb3IgZnJhbWVzLiAqLworCQl7CisJCQl2YWx1ZSA9IFJUX0lEWF9EU1RfREZMVF9RIHwgLyogZGVzdCAqLworCQkJCVJUX0lEWF9UWVBFX05JQ1EgfCAvKiB0eXBlICovCisJCQkJKFJUX0lEWF9JUF9DU1VNX0VSUl9TTE9UIDw8CisJCQkJUlRfSURYX0lEWF9TSElGVCk7IC8qIGluZGV4ICovCisJCQlicmVhazsKKwkJfQorCWNhc2UgUlRfSURYX1RVX0NTVU1fRVJSOiAvKiBQYXNzIHVwIFRDUC9VRFAgQ1NVTSBlcnJvciBmcmFtZXMuICovCisJCXsKKwkJCXZhbHVlID0gUlRfSURYX0RTVF9ERkxUX1EgfCAvKiBkZXN0ICovCisJCQkJUlRfSURYX1RZUEVfTklDUSB8IC8qIHR5cGUgKi8KKwkJCQkoUlRfSURYX1RDUF9VRFBfQ1NVTV9FUlJfU0xPVCA8PAorCQkJCVJUX0lEWF9JRFhfU0hJRlQpOyAvKiBpbmRleCAqLworCQkJYnJlYWs7CisJCX0KIAljYXNlIFJUX0lEWF9CQ0FTVDoJLyogUGFzcyB1cCBCcm9hZGNhc3QgZnJhbWVzIHRvIGRlZmF1bHQgUS4gKi8KIAkJewogCQkJdmFsdWUgPSBSVF9JRFhfRFNUX0RGTFRfUSB8CS8qIGRlc3QgKi8KQEAgLTE1MjEsNyArMTUzNyw3IEBACiAKIAkvKiBGcmFtZSBlcnJvciwgc28gZHJvcCB0aGUgcGFja2V0LiAqLwogCWlmIChpYl9tYWNfcnNwLT5mbGFnczIgJiBJQl9NQUNfSU9DQl9SU1BfRVJSX01BU0spIHsKLQkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJbmV0aWZfaW5mbyhxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCiAJCQkgICJSZWNlaXZlIGVycm9yLCBmbGFnczIgPSAweCV4XG4iLCBpYl9tYWNfcnNwLT5mbGFnczIpOwogCQlyeF9yaW5nLT5yeF9lcnJvcnMrKzsKIAkJZ290byBlcnJfb3V0OwpAQCAtMTYxOCw3ICsxNjM0LDcgQEAKIAogCS8qIEZyYW1lIGVycm9yLCBzbyBkcm9wIHRoZSBwYWNrZXQuICovCiAJaWYgKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9FUlJfTUFTSykgewotCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQluZXRpZl9pbmZvKHFkZXYsIGRydiwgcWRldi0+bmRldiwKIAkJCSAgIlJlY2VpdmUgZXJyb3IsIGZsYWdzMiA9IDB4JXhcbiIsIGliX21hY19yc3AtPmZsYWdzMik7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXJ4X3JpbmctPnJ4X2Vycm9ycysrOwpAQCAtMTY3Nyw3ICsxNjkzLDcgQEAKIAkJCS8qIFVuZnJhZ21lbnRlZCBpcHY0IFVEUCBmcmFtZS4gKi8KIAkJCXN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKSBza2ItPmRhdGE7CiAJCQlpZiAoIShpcGgtPmZyYWdfb2ZmICYKLQkJCQljcHVfdG9fYmUxNihJUF9NRnxJUF9PRkZTRVQpKSkgeworCQkJCW50b2hzKElQX01GfElQX09GRlNFVCkpKSB7CiAJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAkJCQluZXRpZl9wcmludGsocWRldiwgcnhfc3RhdHVzLCBLRVJOX0RFQlVHLAogCQkJCQkgICAgIHFkZXYtPm5kZXYsCkBAIC0xOTM5LDcgKzE5NTUsNyBAQAogCiAJLyogRnJhbWUgZXJyb3IsIHNvIGRyb3AgdGhlIHBhY2tldC4gKi8KIAlpZiAoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX0VSUl9NQVNLKSB7Ci0JCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCW5ldGlmX2luZm8ocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAogCQkJICAiUmVjZWl2ZSBlcnJvciwgZmxhZ3MyID0gMHgleFxuIiwgaWJfbWFjX3JzcC0+ZmxhZ3MyKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcnhfcmluZy0+cnhfZXJyb3JzKys7CkBAIC0xOTk3LDcgKzIwMTMsNyBAQAogCQkvKiBVbmZyYWdtZW50ZWQgaXB2NCBVRFAgZnJhbWUuICovCiAJCQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikgc2tiLT5kYXRhOwogCQkJaWYgKCEoaXBoLT5mcmFnX29mZiAmCi0JCQkJY3B1X3RvX2JlMTYoSVBfTUZ8SVBfT0ZGU0VUKSkpIHsKKwkJCQludG9ocyhJUF9NRnxJUF9PRkZTRVQpKSkgewogCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJCQkJbmV0aWZfcHJpbnRrKHFkZXYsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKIAkJCQkJICAgICAiVENQIGNoZWNrc3VtIGRvbmUhXG4iKTsKQEAgLTM1ODcsMTAgKzM2MDMsMjAgQEAKIAlpZiAoc3RhdHVzKQogCQlyZXR1cm4gc3RhdHVzOwogCi0Jc3RhdHVzID0gcWxfc2V0X3JvdXRpbmdfcmVnKHFkZXYsIFJUX0lEWF9BTExfRVJSX1NMT1QsIFJUX0lEWF9FUlIsIDEpOworCXN0YXR1cyA9IHFsX3NldF9yb3V0aW5nX3JlZyhxZGV2LCBSVF9JRFhfSVBfQ1NVTV9FUlJfU0xPVCwKKwkJCQkJCVJUX0lEWF9JUF9DU1VNX0VSUiwgMSk7CiAJaWYgKHN0YXR1cykgewogCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKLQkJCSAgIkZhaWxlZCB0byBpbml0IHJvdXRpbmcgcmVnaXN0ZXIgZm9yIGVycm9yIHBhY2tldHMuXG4iKTsKKwkJCSJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHJlZ2lzdGVyICIKKwkJCSJmb3IgSVAgQ1NVTSBlcnJvciBwYWNrZXRzLlxuIik7CisJCWdvdG8gZXhpdDsKKwl9CisJc3RhdHVzID0gcWxfc2V0X3JvdXRpbmdfcmVnKHFkZXYsIFJUX0lEWF9UQ1BfVURQX0NTVU1fRVJSX1NMT1QsCisJCQkJCQlSVF9JRFhfVFVfQ1NVTV9FUlIsIDEpOworCWlmIChzdGF0dXMpIHsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkiRmFpbGVkIHRvIGluaXQgcm91dGluZyByZWdpc3RlciAiCisJCQkiZm9yIFRDUC9VRFAgQ1NVTSBlcnJvciBwYWNrZXRzLlxuIik7CiAJCWdvdG8gZXhpdDsKIAl9CiAJc3RhdHVzID0gcWxfc2V0X3JvdXRpbmdfcmVnKHFkZXYsIFJUX0lEWF9CQ0FTVF9TTE9ULCBSVF9JRFhfQkNBU1QsIDEpOwpAQCAtMzkxOSw2ICszOTQ1LDExIEBACiAJaWYgKChxbF9yZWFkMzIocWRldiwgU1RTKSAmIHFkZXYtPnBvcnRfaW5pdCkgJiYKIAkJCShxbF9yZWFkMzIocWRldiwgU1RTKSAmIHFkZXYtPnBvcnRfbGlua191cCkpCiAJCXFsX2xpbmtfb24ocWRldik7CisJLyogUmVzdG9yZSByeCBtb2RlLiAqLworCWNsZWFyX2JpdChRTF9BTExNVUxUSSwgJnFkZXYtPmZsYWdzKTsKKwljbGVhcl9iaXQoUUxfUFJPTUlTQ1VPVVMsICZxZGV2LT5mbGFncyk7CisJcWxnZV9zZXRfbXVsdGljYXN0X2xpc3QocWRldi0+bmRldik7CisKIAlxbF9lbmFibGVfaW50ZXJydXB0cyhxZGV2KTsKIAlxbF9lbmFibGVfYWxsX2NvbXBsZXRpb25faW50ZXJydXB0cyhxZGV2KTsKIAluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKHFkZXYtPm5kZXYpOwpAQCAtNDIwNCw3ICs0MjM1LDcgQEAKIAlyZXR1cm4gJm5kZXYtPnN0YXRzOwogfQogCi1zdGF0aWMgdm9pZCBxbGdlX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3ZvaWQgcWxnZV9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSAoc3RydWN0IHFsX2FkYXB0ZXIgKiluZXRkZXZfcHJpdihuZGV2KTsKIAlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21waS5jIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21waS5jCmluZGV4IDNjMDA0NjIuLmY4NGU4NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tcGkuYworKysgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbXBpLmMKQEAgLTYwNiwyMyArNjA2LDYgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1pbnQgcWxfbWJfc3lzX2VycihzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKLXsKLQlzdHJ1Y3QgbWJveF9wYXJhbXMgbWJjOwotCXN0cnVjdCBtYm94X3BhcmFtcyAqbWJjcCA9ICZtYmM7Ci0JaW50IHN0YXR1czsKLQotCW1lbXNldChtYmNwLCAwLCBzaXplb2Yoc3RydWN0IG1ib3hfcGFyYW1zKSk7Ci0KLQltYmNwLT5pbl9jb3VudCA9IDE7Ci0JbWJjcC0+b3V0X2NvdW50ID0gMDsKLQotCW1iY3AtPm1ib3hfaW5bMF0gPSBNQl9DTURfTUFLRV9TWVNfRVJSOwotCi0Jc3RhdHVzID0gcWxfbWFpbGJveF9jb21tYW5kKHFkZXYsIG1iY3ApOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KIC8qIEdldCBNUEkgZmlybXdhcmUgdmVyc2lvbi4gVGhpcyB3aWxsIGJlIHVzZWQgZm9yCiAgKiBkcml2ZXIgYmFubmVyIGFuZCBmb3IgZXRodG9vbCBpbmZvLgogICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9yNjA0MC5jIGIvZHJpdmVycy9uZXQvcjYwNDAuYwppbmRleCA5YTI1MWFjLi4xNDJjMzgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yNjA0MC5jCisrKyBiL2RyaXZlcnMvbmV0L3I2MDQwLmMKQEAgLTQ0LDEyICs0NCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgogCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJyNjA0MCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuMjUiCi0jZGVmaW5lIERSVl9SRUxEQVRFCSIyMEF1ZzIwMDkiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjI2IgorI2RlZmluZSBEUlZfUkVMREFURQkiMzBNYXkyMDEwIgogCiAvKiBQSFkgQ0hJUCBBZGRyZXNzICovCiAjZGVmaW5lIFBIWTFfQUREUgkxCS8qIEZvciBNQUMxICovCkBAIC0xNzksNyArMTgwLDYgQEAKIAogc3RydWN0IHI2MDQwX3ByaXZhdGUgewogCXNwaW5sb2NrX3QgbG9jazsJCS8qIGRyaXZlciBsb2NrICovCi0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJc3RydWN0IHI2MDQwX2Rlc2NyaXB0b3IgKnJ4X2luc2VydF9wdHI7CiAJc3RydWN0IHI2MDQwX2Rlc2NyaXB0b3IgKnJ4X3JlbW92ZV9wdHI7CkBAIC0xODksMTMgKzE4OSwxNSBAQAogCXN0cnVjdCByNjA0MF9kZXNjcmlwdG9yICp0eF9yaW5nOwogCWRtYV9hZGRyX3QgcnhfcmluZ19kbWE7CiAJZG1hX2FkZHJfdCB0eF9yaW5nX2RtYTsKLQl1MTYJdHhfZnJlZV9kZXNjLCBwaHlfYWRkciwgcGh5X21vZGU7CisJdTE2CXR4X2ZyZWVfZGVzYywgcGh5X2FkZHI7CiAJdTE2CW1jcjAsIG1jcjE7Ci0JdTE2CXN3aXRjaF9zaWc7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgbWlpX2lmX2luZm8gbWlpX2lmOworCXN0cnVjdCBtaWlfYnVzICptaWlfYnVzOwogCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOwogCXZvaWQgX19pb21lbSAqYmFzZTsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OworCWludCBvbGRfbGluazsKKwlpbnQgb2xkX2R1cGxleDsKIH07CiAKIHN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0gS0VSTl9JTkZPIERSVl9OQU1FCkBAIC0yMzgsMjAgKzI0MCwzMCBAQAogCX0KIH0KIAotc3RhdGljIGludCByNjA0MF9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG1paV9pZCwgaW50IHJlZykKK3N0YXRpYyBpbnQgcjYwNDBfbWRpb2J1c19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZykKIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYnVzLT5wcml2OwogCXN0cnVjdCByNjA0MF9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBscC0+YmFzZTsKIAotCXJldHVybiAocjYwNDBfcGh5X3JlYWQoaW9hZGRyLCBscC0+cGh5X2FkZHIsIHJlZykpOworCXJldHVybiByNjA0MF9waHlfcmVhZChpb2FkZHIsIHBoeV9hZGRyLCByZWcpOwogfQogCi1zdGF0aWMgdm9pZCByNjA0MF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBtaWlfaWQsIGludCByZWcsIGludCB2YWwpCitzdGF0aWMgaW50IHI2MDQwX21kaW9idXNfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLAorCQkJCQkJaW50IHJlZywgdTE2IHZhbHVlKQogeworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBidXMtPnByaXY7CiAJc3RydWN0IHI2MDQwX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IGxwLT5iYXNlOwogCi0JcjYwNDBfcGh5X3dyaXRlKGlvYWRkciwgbHAtPnBoeV9hZGRyLCByZWcsIHZhbCk7CisJcjYwNDBfcGh5X3dyaXRlKGlvYWRkciwgcGh5X2FkZHIsIHJlZywgdmFsdWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcjYwNDBfbWRpb2J1c19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQoreworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCByNjA0MF9mcmVlX3R4YnVmcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtNDA4LDEwICs0MjAsOSBAQAogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcHJpdi0+YmFzZTsKIAogCW5ldGRldl93YXJuKGRldiwgInRyYW5zbWl0IHRpbWVkIG91dCwgaW50IGVuYWJsZSAlNC40eCAiCi0JCSJzdGF0dXMgJTQuNHgsIFBIWSBzdGF0dXMgJTQuNHhcbiIsCisJCSJzdGF0dXMgJTQuNHhcbiIsCiAJCWlvcmVhZDE2KGlvYWRkciArIE1JRVIpLAotCQlpb3JlYWQxNihpb2FkZHIgKyBNSVNSKSwKLQkJcjYwNDBfbWRpb19yZWFkKGRldiwgcHJpdi0+bWlpX2lmLnBoeV9pZCwgTUlJX0JNU1IpKTsKKwkJaW9yZWFkMTYoaW9hZGRyICsgTUlTUikpOwogCiAJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIApAQCAtNDYzLDkgKzQ3NCw2IEBACiAJc3RydWN0IHI2MDQwX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGxwLT5wZGV2OwogCi0JLyogZGVsZXRlZCB0aW1lciAqLwotCWRlbF90aW1lcl9zeW5jKCZscC0+dGltZXIpOwotCiAJc3Bpbl9sb2NrX2lycSgmbHAtPmxvY2spOwogCW5hcGlfZGlzYWJsZSgmbHAtPm5hcGkpOwogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKQEAgLTQ5NSw2NCArNTAzLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIFN0YXR1cyBvZiBQSFkgQ0hJUCAqLwotc3RhdGljIGludCByNjA0MF9waHlfbW9kZV9jaGsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcjYwNDBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXZvaWQgX19pb21lbSAqaW9hZGRyID0gbHAtPmJhc2U7Ci0JaW50IHBoeV9kYXQ7Ci0KLQkvKiBQSFkgTGluayBTdGF0dXMgQ2hlY2sgKi8KLQlwaHlfZGF0ID0gcjYwNDBfcGh5X3JlYWQoaW9hZGRyLCBscC0+cGh5X2FkZHIsIDEpOwotCWlmICghKHBoeV9kYXQgJiAweDQpKQotCQlwaHlfZGF0ID0gMHg4MDAwOwkvKiBMaW5rIEZhaWxlZCwgZnVsbCBkdXBsZXggKi8KLQotCS8qIFBIWSBDaGlwIEF1dG8tTmVnb3RpYXRpb24gU3RhdHVzICovCi0JcGh5X2RhdCA9IHI2MDQwX3BoeV9yZWFkKGlvYWRkciwgbHAtPnBoeV9hZGRyLCAxKTsKLQlpZiAocGh5X2RhdCAmIDB4MDAyMCkgewotCQkvKiBBdXRvIE5lZ290aWF0aW9uIE1vZGUgKi8KLQkJcGh5X2RhdCA9IHI2MDQwX3BoeV9yZWFkKGlvYWRkciwgbHAtPnBoeV9hZGRyLCA1KTsKLQkJcGh5X2RhdCAmPSByNjA0MF9waHlfcmVhZChpb2FkZHIsIGxwLT5waHlfYWRkciwgNCk7Ci0JCWlmIChwaHlfZGF0ICYgMHgxNDApCi0JCQkvKiBGb3JjZSBmdWxsIGR1cGxleCAqLwotCQkJcGh5X2RhdCA9IDB4ODAwMDsKLQkJZWxzZQotCQkJcGh5X2RhdCA9IDA7Ci0JfSBlbHNlIHsKLQkJLyogRm9yY2UgTW9kZSAqLwotCQlwaHlfZGF0ID0gcjYwNDBfcGh5X3JlYWQoaW9hZGRyLCBscC0+cGh5X2FkZHIsIDApOwotCQlpZiAocGh5X2RhdCAmIDB4MTAwKQotCQkJcGh5X2RhdCA9IDB4ODAwMDsKLQkJZWxzZQotCQkJcGh5X2RhdCA9IDB4MDAwMDsKLQl9Ci0KLQlyZXR1cm4gcGh5X2RhdDsKLX07Ci0KLXN0YXRpYyB2b2lkIHI2MDQwX3NldF9jYXJyaWVyKHN0cnVjdCBtaWlfaWZfaW5mbyAqbWlpKQotewotCWlmIChyNjA0MF9waHlfbW9kZV9jaGsobWlpLT5kZXYpKSB7Ci0JCS8qIGF1dG9uZWcgaXMgb2ZmOiBMaW5rIGlzIGFsd2F5cyBhc3N1bWVkIHRvIGJlIHVwICovCi0JCWlmICghbmV0aWZfY2Fycmllcl9vayhtaWktPmRldikpCi0JCQluZXRpZl9jYXJyaWVyX29uKG1paS0+ZGV2KTsKLQl9IGVsc2UKLQkJcjYwNDBfcGh5X21vZGVfY2hrKG1paS0+ZGV2KTsKLX0KLQogc3RhdGljIGludCByNjA0MF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQogewogCXN0cnVjdCByNjA0MF9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG1paV9pb2N0bF9kYXRhICpkYXRhID0gaWZfbWlpKHJxKTsKLQlpbnQgcmM7CiAKLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwlpZiAoIWxwLT5waHlkZXYpCiAJCXJldHVybiAtRUlOVkFMOwotCXNwaW5fbG9ja19pcnEoJmxwLT5sb2NrKTsKLQlyYyA9IGdlbmVyaWNfbWlpX2lvY3RsKCZscC0+bWlpX2lmLCBkYXRhLCBjbWQsIE5VTEwpOwotCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOwotCXI2MDQwX3NldF9jYXJyaWVyKCZscC0+bWlpX2lmKTsKLQlyZXR1cm4gcmM7CisKKwlyZXR1cm4gcGh5X21paV9pb2N0bChscC0+cGh5ZGV2LCBycSwgY21kKTsKIH0KIAogc3RhdGljIGludCByNjA0MF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbGltaXQpCkBAIC03NTEsMjYgKzcwOSw2IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCS8qIFJlYWQgdGhlIFBIWSBJRCAqLwotCWxwLT5zd2l0Y2hfc2lnID0gcjYwNDBfcGh5X3JlYWQoaW9hZGRyLCAwLCAyKTsKLQotCWlmIChscC0+c3dpdGNoX3NpZyAgPT0gSUNQTFVTX1BIWV9JRCkgewotCQlyNjA0MF9waHlfd3JpdGUoaW9hZGRyLCAyOSwgMzEsIDB4MTc1Qyk7IC8qIEVuYWJsZSByZWdpc3RlcnMgKi8KLQkJbHAtPnBoeV9tb2RlID0gMHg4MDAwOwotCX0gZWxzZSB7Ci0JCS8qIFBIWSBNb2RlIENoZWNrICovCi0JCXI2MDQwX3BoeV93cml0ZShpb2FkZHIsIGxwLT5waHlfYWRkciwgNCwgUEhZX0NBUCk7Ci0JCXI2MDQwX3BoeV93cml0ZShpb2FkZHIsIGxwLT5waHlfYWRkciwgMCwgUEhZX01PREUpOwotCi0JCWlmIChQSFlfTU9ERSA9PSAweDMxMDApCi0JCQlscC0+cGh5X21vZGUgPSByNjA0MF9waHlfbW9kZV9jaGsoZGV2KTsKLQkJZWxzZQotCQkJbHAtPnBoeV9tb2RlID0gKFBIWV9NT0RFICYgMHgwMTAwKSA/IDB4ODAwMDoweDA7Ci0JfQotCi0JLyogU2V0IGR1cGxleCBtb2RlICovCi0JbHAtPm1jcjAgfD0gbHAtPnBoeV9tb2RlOwotCiAJLyogaW1wcm92ZSBwZXJmb3JtYW5jZSAoYnkgUkRDIGd1eXMpICovCiAJcjYwNDBfcGh5X3dyaXRlKGlvYWRkciwgMzAsIDE3LCAocjYwNDBfcGh5X3JlYWQoaW9hZGRyLCAzMCwgMTcpIHwgMHg0MDAwKSk7CiAJcjYwNDBfcGh5X3dyaXRlKGlvYWRkciwgMzAsIDE3LCB+KCh+cjYwNDBfcGh5X3JlYWQoaW9hZGRyLCAzMCwgMTcpKSB8IDB4MjAwMCkpOwpAQCAtNzgzLDM1ICs3MjEsNiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICBBIHBlcmlvZGljIHRpbWVyIHJvdXRpbmUKLQlQb2xsaW5nIFBIWSBDaGlwIExpbmsgU3RhdHVzCi0qLwotc3RhdGljIHZvaWQgcjYwNDBfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkYXRhOwotCXN0cnVjdCByNjA0MF9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSBscC0+YmFzZTsKLQl1MTYgcGh5X21vZGU7Ci0KLQkvKiBQb2xsaW5nIFBIWSBDaGlwIFN0YXR1cyAqLwotCWlmIChQSFlfTU9ERSA9PSAweDMxMDApCi0JCXBoeV9tb2RlID0gcjYwNDBfcGh5X21vZGVfY2hrKGRldik7Ci0JZWxzZQotCQlwaHlfbW9kZSA9IChQSFlfTU9ERSAmIDB4MDEwMCkgPyAweDgwMDA6MHgwOwotCi0JaWYgKHBoeV9tb2RlICE9IGxwLT5waHlfbW9kZSkgewotCQlscC0+cGh5X21vZGUgPSBwaHlfbW9kZTsKLQkJbHAtPm1jcjAgPSAobHAtPm1jcjAgJiAweDdmZmYpIHwgcGh5X21vZGU7Ci0JCWlvd3JpdGUxNihscC0+bWNyMCwgaW9hZGRyKTsKLQl9Ci0KLQkvKiBUaW1lciBhY3RpdmUgYWdhaW4gKi8KLQltb2RfdGltZXIoJmxwLT50aW1lciwgcm91bmRfamlmZmllcyhqaWZmaWVzICsgSFopKTsKLQotCS8qIENoZWNrIG1lZGlhICovCi0JbWlpX2NoZWNrX21lZGlhKCZscC0+bWlpX2lmLCAxLCAxKTsKLX0KIAogLyogUmVhZC9zZXQgTUFDIGFkZHJlc3Mgcm91dGluZXMgKi8KIHN0YXRpYyB2b2lkIHI2MDQwX21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC04NzMsMTAgKzc4Miw2IEBACiAJbmFwaV9lbmFibGUoJmxwLT5uYXBpKTsKIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCi0JLyogc2V0IGFuZCBhY3RpdmUgYSB0aW1lciBwcm9jZXNzICovCi0Jc2V0dXBfdGltZXIoJmxwLT50aW1lciwgcjYwNDBfdGltZXIsICh1bnNpZ25lZCBsb25nKSBkZXYpOwotCWlmIChscC0+c3dpdGNoX3NpZyAhPSBJQ1BMVVNfUEhZX0lEKQotCQltb2RfdGltZXIoJmxwLT50aW1lciwgamlmZmllcyArIEhaKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTAxNSw0MCArOTIwLDIyIEBACiBzdGF0aWMgaW50IG5ldGRldl9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7CiAJc3RydWN0IHI2MDQwX3ByaXZhdGUgKnJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgcmM7CiAKLQlzcGluX2xvY2tfaXJxKCZycC0+bG9jayk7Ci0JcmMgPSBtaWlfZXRodG9vbF9nc2V0KCZycC0+bWlpX2lmLCBjbWQpOwotCXNwaW5fdW5sb2NrX2lycSgmcnAtPmxvY2spOwotCi0JcmV0dXJuIHJjOworCXJldHVybiAgcGh5X2V0aHRvb2xfZ3NldChycC0+cGh5ZGV2LCBjbWQpOwogfQogCiBzdGF0aWMgaW50IG5ldGRldl9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7CiAJc3RydWN0IHI2MDQwX3ByaXZhdGUgKnJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgcmM7CiAKLQlzcGluX2xvY2tfaXJxKCZycC0+bG9jayk7Ci0JcmMgPSBtaWlfZXRodG9vbF9zc2V0KCZycC0+bWlpX2lmLCBjbWQpOwotCXNwaW5fdW5sb2NrX2lycSgmcnAtPmxvY2spOwotCXI2MDQwX3NldF9jYXJyaWVyKCZycC0+bWlpX2lmKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHUzMiBuZXRkZXZfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcjYwNDBfcHJpdmF0ZSAqcnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcmV0dXJuIG1paV9saW5rX29rKCZycC0+bWlpX2lmKTsKKwlyZXR1cm4gcGh5X2V0aHRvb2xfc3NldChycC0+cGh5ZGV2LCBjbWQpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JCT0gbmV0ZGV2X2dldF9kcnZpbmZvLAogCS5nZXRfc2V0dGluZ3MJCT0gbmV0ZGV2X2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCQk9IG5ldGRldl9zZXRfc2V0dGluZ3MsCi0JLmdldF9saW5rCQk9IG5ldGRldl9nZXRfbGluaywKKwkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcjYwNDBfbmV0ZGV2X29wcyA9IHsKQEAgLTEwNjcsNiArOTU0LDc5IEBACiAjZW5kaWYKIH07CiAKK3N0YXRpYyB2b2lkIHI2MDQwX2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHI2MDQwX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gbHAtPnBoeWRldjsKKwlpbnQgc3RhdHVzX2NoYW5nZWQgPSAwOworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gbHAtPmJhc2U7CisKKwlCVUdfT04oIXBoeWRldik7CisKKwlpZiAobHAtPm9sZF9saW5rICE9IHBoeWRldi0+bGluaykgeworCQlzdGF0dXNfY2hhbmdlZCA9IDE7CisJCWxwLT5vbGRfbGluayA9IHBoeWRldi0+bGluazsKKwl9CisKKwkvKiByZWZsZWN0IGR1cGxleCBjaGFuZ2UgKi8KKwlpZiAocGh5ZGV2LT5saW5rICYmIChscC0+b2xkX2R1cGxleCAhPSBwaHlkZXYtPmR1cGxleCkpIHsKKwkJbHAtPm1jcjAgfD0gKHBoeWRldi0+ZHVwbGV4ID09IERVUExFWF9GVUxMID8gMHg4MDAwIDogMCk7CisJCWlvd3JpdGUxNihscC0+bWNyMCwgaW9hZGRyKTsKKworCQlzdGF0dXNfY2hhbmdlZCA9IDE7CisJCWxwLT5vbGRfZHVwbGV4ID0gcGh5ZGV2LT5kdXBsZXg7CisJfQorCisJaWYgKHN0YXR1c19jaGFuZ2VkKSB7CisJCXByX2luZm8oIiVzOiBsaW5rICVzIiwgZGV2LT5uYW1lLCBwaHlkZXYtPmxpbmsgPworCQkJIlVQIiA6ICJET1dOIik7CisJCWlmIChwaHlkZXYtPmxpbmspCisJCQlwcl9jb250KCIgLSAlZC8lcyIsIHBoeWRldi0+c3BlZWQsCisJCQlEVVBMRVhfRlVMTCA9PSBwaHlkZXYtPmR1cGxleCA/ICJmdWxsIiA6ICJoYWxmIik7CisJCXByX2NvbnQoIlxuIik7CisJfQorfQorCitzdGF0aWMgaW50IHI2MDQwX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCByNjA0MF9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IE5VTEw7CisKKwlwaHlkZXYgPSBwaHlfZmluZF9maXJzdChscC0+bWlpX2J1cyk7CisJaWYgKCFwaHlkZXYpIHsKKwkJZGV2X2VycigmbHAtPnBkZXYtPmRldiwgIm5vIFBIWSBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwgJnI2MDQwX2FkanVzdF9saW5rLAorCQkJCTAsIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpOworCisJaWYgKElTX0VSUihwaHlkZXYpKSB7CisJCWRldl9lcnIoJmxwLT5wZGV2LT5kZXYsICJjb3VsZCBub3QgYXR0YWNoIHRvIFBIWVxuIik7CisJCXJldHVybiBQVFJfRVJSKHBoeWRldik7CisJfQorCisJLyogbWFzayB3aXRoIE1BQyBzdXBwb3J0ZWQgZmVhdHVyZXMgKi8KKwlwaHlkZXYtPnN1cHBvcnRlZCAmPSAoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZgorCQkJCXwgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbAorCQkJCXwgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYKKwkJCQl8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsCisJCQkJfCBTVVBQT1JURURfQXV0b25lZworCQkJCXwgU1VQUE9SVEVEX01JSQorCQkJCXwgU1VQUE9SVEVEX1RQKTsKKworCXBoeWRldi0+YWR2ZXJ0aXNpbmcgPSBwaHlkZXYtPnN1cHBvcnRlZDsKKwlscC0+cGh5ZGV2ID0gcGh5ZGV2OworCWxwLT5vbGRfbGluayA9IDA7CisJbHAtPm9sZF9kdXBsZXggPSAtMTsKKworCWRldl9pbmZvKCZscC0+cGRldi0+ZGV2LCAiYXR0YWNoZWQgUEhZIGRyaXZlciBbJXNdICIKKwkJIihtaWlfYnVzOnBoeV9hZGRyPSVzKVxuIiwKKwkJcGh5ZGV2LT5kcnYtPm5hbWUsIGRldl9uYW1lKCZwaHlkZXYtPmRldikpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IHI2MDQwX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCQkgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKQEAgLTEwNzcsNiArMTAzNyw3IEBACiAJc3RhdGljIGludCBjYXJkX2lkeCA9IC0xOwogCWludCBiYXIgPSAwOwogCXUxNiAqYWRycDsKKwlpbnQgaTsKIAogCXByaW50aygiJXNcbiIsIHZlcnNpb24pOwogCkBAIC0xMTYzLDcgKzExMjQsNiBAQAogCS8qIEluaXQgUkRDIHByaXZhdGUgZGF0YSAqLwogCWxwLT5tY3IwID0gMHgxMDAyOwogCWxwLT5waHlfYWRkciA9IHBoeV90YWJsZVtjYXJkX2lkeF07Ci0JbHAtPnN3aXRjaF9zaWcgPSAwOwogCiAJLyogVGhlIFJEQy1zcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwogCWRldi0+bmV0ZGV2X29wcyA9ICZyNjA0MF9uZXRkZXZfb3BzOwpAQCAtMTE3MSwyOCArMTEzMSw1NCBAQAogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwogCiAJbmV0aWZfbmFwaV9hZGQoZGV2LCAmbHAtPm5hcGksIHI2MDQwX3BvbGwsIDY0KTsKLQlscC0+bWlpX2lmLmRldiA9IGRldjsKLQlscC0+bWlpX2lmLm1kaW9fcmVhZCA9IHI2MDQwX21kaW9fcmVhZDsKLQlscC0+bWlpX2lmLm1kaW9fd3JpdGUgPSByNjA0MF9tZGlvX3dyaXRlOwotCWxwLT5taWlfaWYucGh5X2lkID0gbHAtPnBoeV9hZGRyOwotCWxwLT5taWlfaWYucGh5X2lkX21hc2sgPSAweDFmOwotCWxwLT5taWlfaWYucmVnX251bV9tYXNrID0gMHgxZjsKIAotCS8qIENoZWNrIHRoZSB2ZW5kb3IgSUQgb24gdGhlIFBIWSwgaWYgMHhmZmZmIGFzc3VtZSBub25lIGF0dGFjaGVkICovCi0JaWYgKHI2MDQwX3BoeV9yZWFkKGlvYWRkciwgbHAtPnBoeV9hZGRyLCAyKSA9PSAweGZmZmYpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGRldGVjdCBhbiBhdHRhY2hlZCBQSFlcbiIpOwotCQllcnIgPSAtRU5PREVWOworCWxwLT5taWlfYnVzID0gbWRpb2J1c19hbGxvYygpOworCWlmICghbHAtPm1paV9idXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibWRpb2J1c19hbGxvYygpIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyX291dF91bm1hcDsKIAl9CiAKKwlscC0+bWlpX2J1cy0+cHJpdiA9IGRldjsKKwlscC0+bWlpX2J1cy0+cmVhZCA9IHI2MDQwX21kaW9idXNfcmVhZDsKKwlscC0+bWlpX2J1cy0+d3JpdGUgPSByNjA0MF9tZGlvYnVzX3dyaXRlOworCWxwLT5taWlfYnVzLT5yZXNldCA9IHI2MDQwX21kaW9idXNfcmVzZXQ7CisJbHAtPm1paV9idXMtPm5hbWUgPSAicjYwNDBfZXRoX21paSI7CisJc25wcmludGYobHAtPm1paV9idXMtPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIleCIsIGNhcmRfaWR4KTsKKwlscC0+bWlpX2J1cy0+aXJxID0ga21hbGxvYyhzaXplb2YoaW50KSpQSFlfTUFYX0FERFIsIEdGUF9LRVJORUwpOworCWlmICghbHAtPm1paV9idXMtPmlycSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJtaWlfYnVzIGlycSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX291dF9tZGlvOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBQSFlfTUFYX0FERFI7IGkrKykKKwkJbHAtPm1paV9idXMtPmlycVtpXSA9IFBIWV9QT0xMOworCisJZXJyID0gbWRpb2J1c19yZWdpc3RlcihscC0+bWlpX2J1cyk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgTUlJIGJ1c1xuIik7CisJCWdvdG8gZXJyX291dF9tZGlvX2lycTsKKwl9CisKKwllcnIgPSByNjA0MF9taWlfcHJvYmUoZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBwcm9iZSBNSUkgYnVzXG4iKTsKKwkJZ290byBlcnJfb3V0X21kaW9fdW5yZWdpc3RlcjsKKwl9CisKIAkvKiBSZWdpc3RlciBuZXQgZGV2aWNlLiBBZnRlciB0aGlzIGRldi0+bmFtZSBhc3NpZ24gKi8KIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBuZXQgZGV2aWNlXG4iKTsKLQkJZ290byBlcnJfb3V0X3VubWFwOworCQlnb3RvIGVycl9vdXRfbWRpb191bnJlZ2lzdGVyOwogCX0KIAlyZXR1cm4gMDsKIAorZXJyX291dF9tZGlvX3VucmVnaXN0ZXI6CisJbWRpb2J1c191bnJlZ2lzdGVyKGxwLT5taWlfYnVzKTsKK2Vycl9vdXRfbWRpb19pcnE6CisJa2ZyZWUobHAtPm1paV9idXMtPmlycSk7CitlcnJfb3V0X21kaW86CisJbWRpb2J1c19mcmVlKGxwLT5taWlfYnVzKTsKIGVycl9vdXRfdW5tYXA6CiAJcGNpX2lvdW5tYXAocGRldiwgaW9hZGRyKTsKIGVycl9vdXRfZnJlZV9yZXM6CkBAIC0xMjA2LDggKzExOTIsMTIgQEAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCByNjA0MF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHI2MDQwX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJbWRpb2J1c191bnJlZ2lzdGVyKGxwLT5taWlfYnVzKTsKKwlrZnJlZShscC0+bWlpX2J1cy0+aXJxKTsKKwltZGlvYnVzX2ZyZWUobHAtPm1paV9idXMpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJZnJlZV9uZXRkZXYoZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9yODE2OS5jIGIvZHJpdmVycy9uZXQvcjgxNjkuYwppbmRleCA5NmI2Y2ZiLi4wNzhiYmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yODE2OS5jCisrKyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKQEAgLTg4LDcgKzg4LDcgQEAKICNkZWZpbmUgUlRMX1czMihyZWcsIHZhbDMyKQl3cml0ZWwgKCh2YWwzMiksIGlvYWRkciArIChyZWcpKQogI2RlZmluZSBSVExfUjgocmVnKQkJcmVhZGIgKGlvYWRkciArIChyZWcpKQogI2RlZmluZSBSVExfUjE2KHJlZykJCXJlYWR3IChpb2FkZHIgKyAocmVnKSkKLSNkZWZpbmUgUlRMX1IzMihyZWcpCQkoKHVuc2lnbmVkIGxvbmcpIHJlYWRsIChpb2FkZHIgKyAocmVnKSkpCisjZGVmaW5lIFJUTF9SMzIocmVnKQkJcmVhZGwgKGlvYWRkciArIChyZWcpKQogCiBlbnVtIG1hY192ZXJzaW9uIHsKIAlSVExfR0lHQV9NQUNfTk9ORSAgID0gMHgwMCwKQEAgLTEzMTYsNyArMTMxNiw3IEBACiAJCXsgMHg3YzgwMDAwMCwgMHgyODAwMDAwMCwJUlRMX0dJR0FfTUFDX1ZFUl8yNiB9LAogCiAJCS8qIDgxNjhDIGZhbWlseS4gKi8KLQkJeyAweDdjZjAwMDAwLCAweDNjYTAwMDAwLAlSVExfR0lHQV9NQUNfVkVSXzI0IH0sCisJCXsgMHg3Y2YwMDAwMCwgMHgzY2IwMDAwMCwJUlRMX0dJR0FfTUFDX1ZFUl8yNCB9LAogCQl7IDB4N2NmMDAwMDAsIDB4M2M5MDAwMDAsCVJUTF9HSUdBX01BQ19WRVJfMjMgfSwKIAkJeyAweDdjZjAwMDAwLCAweDNjODAwMDAwLAlSVExfR0lHQV9NQUNfVkVSXzE4IH0sCiAJCXsgMHg3YzgwMDAwMCwgMHgzYzgwMDAwMCwJUlRMX0dJR0FfTUFDX1ZFUl8yNCB9LApAQCAtMzIxOSwxMSArMzIxOSw4IEBACiAKIAlkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoJnBkZXYtPmRldiwgdHAtPmZlYXR1cmVzICYgUlRMX0ZFQVRVUkVfV09MKTsKIAotCWlmIChwY2lfZGV2X3J1bl93YWtlKHBkZXYpKSB7Ci0JCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZSgmcGRldi0+ZGV2KTsKLQkJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7Ci0JfQotCXBtX3J1bnRpbWVfaWRsZSgmcGRldi0+ZGV2KTsKKwlpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSkKKwkJcG1fcnVudGltZV9wdXRfbm9pZGxlKCZwZGV2LT5kZXYpOwogCiBvdXQ6CiAJcmV0dXJuIHJjOwpAQCAtMzI0NiwxNyArMzI0MywxMiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JcG1fcnVudGltZV9nZXRfc3luYygmcGRldi0+ZGV2KTsKLQogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCi0JaWYgKHBjaV9kZXZfcnVuX3dha2UocGRldikpIHsKLQkJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwotCQlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoJnBkZXYtPmRldik7Ci0JfQotCXBtX3J1bnRpbWVfcHV0X25vaWRsZSgmcGRldi0+ZGV2KTsKKwlpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSkKKwkJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUoJnBkZXYtPmRldik7CiAKIAkvKiByZXN0b3JlIG9yaWdpbmFsIE1BQyBhZGRyZXNzICovCiAJcnRsX3Jhcl9zZXQodHAsIGRldi0+cGVybV9hZGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3MyaW8tcmVncy5oIGIvZHJpdmVycy9uZXQvczJpby1yZWdzLmgKaW5kZXggNDE2NjY5Zi4uMzY4ODMyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvczJpby1yZWdzLmgKKysrIGIvZHJpdmVycy9uZXQvczJpby1yZWdzLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiByZWdzLmg6IEEgTGludXggUENJLVggRXRoZXJuZXQgZHJpdmVyIGZvciBOZXRlcmlvbiAxMEdiRSBTZXJ2ZXIgTklDCi0gKiBDb3B5cmlnaHQoYykgMjAwMi0yMDA3IE5ldGVyaW9uIEluYy4KKyAqIENvcHlyaWdodChjKSAyMDAyLTIwMTAgRXhhciBDb3JwLgogCiAgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIG9mCiAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvczJpby5jIGIvZHJpdmVycy9uZXQvczJpby5jCmluZGV4IDFkMzdmMGMuLjE4YmM1YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3MyaW8uYworKysgYi9kcml2ZXJzL25ldC9zMmlvLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBzMmlvLmM6IEEgTGludXggUENJLVggRXRoZXJuZXQgZHJpdmVyIGZvciBOZXRlcmlvbiAxMEdiRSBTZXJ2ZXIgTklDCi0gKiBDb3B5cmlnaHQoYykgMjAwMi0yMDA3IE5ldGVyaW9uIEluYy4KKyAqIENvcHlyaWdodChjKSAyMDAyLTIwMTAgRXhhciBDb3JwLgogICoKICAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMgb2YKICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCkBAIC0zOCw3ICszOCw3IEBACiAgKiBUeCBkZXNjcmlwdG9ycyB0aGF0IGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggZWFjaCBjb3JyZXNwb25kaW5nIEZJRk8uCiAgKiBpbnRyX3R5cGU6IFRoaXMgZGVmaW5lcyB0aGUgdHlwZSBvZiBpbnRlcnJ1cHQuIFRoZSB2YWx1ZXMgY2FuIGJlIDAoSU5UQSksCiAgKiAgICAgMihNU0lfWCkuIERlZmF1bHQgdmFsdWUgaXMgJzIoTVNJX1gpJwotICogbHJvX2VuYWJsZTogU3BlY2lmaWVzIHdoZXRoZXIgdG8gZW5hYmxlIExhcmdlIFJlY2VpdmUgT2ZmbG9hZCAoTFJPKSBvciBub3QuCisgKiBscm86IFNwZWNpZmllcyB3aGV0aGVyIHRvIGVuYWJsZSBMYXJnZSBSZWNlaXZlIE9mZmxvYWQgKExSTykgb3Igbm90LgogICogICAgIFBvc3NpYmxlIHZhbHVlcyAnMScgZm9yIGVuYWJsZSAnMCcgZm9yIGRpc2FibGUuIERlZmF1bHQgaXMgJzAnCiAgKiBscm9fbWF4X3BrdHM6IFRoaXMgcGFyYW1ldGVyIGRlZmluZXMgbWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyBjYW4gYmUKICAqICAgICBhZ2dyZWdhdGVkIGFzIGEgc2luZ2xlIGxhcmdlIHBhY2tldApAQCAtOTAsNyArOTAsNyBAQAogI2luY2x1ZGUgInMyaW8uaCIKICNpbmNsdWRlICJzMmlvLXJlZ3MuaCIKIAotI2RlZmluZSBEUlZfVkVSU0lPTiAiMi4wLjI2LjI1IgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMi4wLjI2LjI2IgogCiAvKiBTMmlvIERyaXZlciBuYW1lICYgdmVyc2lvbi4gKi8KIHN0YXRpYyBjaGFyIHMyaW9fZHJpdmVyX25hbWVbXSA9ICJOZXRlcmlvbiI7CkBAIC00OTYsNyArNDk2LDcgQEAKIC8qIEludGVycnVwdCB0eXBlLiBWYWx1ZXMgY2FuIGJlIDAoSU5UQSksIDIoTVNJX1gpICovCiBTMklPX1BBUk1fSU5UKGludHJfdHlwZSwgMik7CiAvKiBMYXJnZSByZWNlaXZlIG9mZmxvYWQgZmVhdHVyZSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBscm9fZW5hYmxlOworc3RhdGljIHVuc2lnbmVkIGludCBscm9fZW5hYmxlID0gMTsKIG1vZHVsZV9wYXJhbV9uYW1lZChscm8sIGxyb19lbmFibGUsIHVpbnQsIDApOwogCiAvKiBNYXggcGt0cyB0byBiZSBhZ2dyZWdhdGVkIGJ5IExSTyBhdCBvbmUgdGltZS4gSWYgbm90IHNwZWNpZmllZCwKQEAgLTc5NSw3ICs3OTUsNiBAQAogCQlyaW5nLT5yeF9jdXJyX3B1dF9pbmZvLnJpbmdfbGVuID0gcnhfY2ZnLT5udW1fcnhkIC0gMTsKIAkJcmluZy0+bmljID0gbmljOwogCQlyaW5nLT5yaW5nX25vID0gaTsKLQkJcmluZy0+bHJvID0gbHJvX2VuYWJsZTsKIAogCQlibGtfY250ID0gcnhfY2ZnLT5udW1fcnhkIC8gKHJ4ZF9jb3VudFtuaWMtPnJ4ZF9tb2RlXSArIDEpOwogCQkvKiAgQWxsb2NhdGluZyBhbGwgdGhlIFJ4IGJsb2NrcyAqLwpAQCAtNTc5Nyw3ICs1Nzk2LDcgQEAKIHsKIAl1OCAqdnBkX2RhdGE7CiAJdTggZGF0YTsKLQlpbnQgaSA9IDAsIGNudCwgZmFpbCA9IDA7CisJaW50IGkgPSAwLCBjbnQsIGxlbiwgZmFpbCA9IDA7CiAJaW50IHZwZF9hZGRyID0gMHg4MDsKIAlzdHJ1Y3Qgc3dTdGF0ICpzd3N0YXRzID0gJm5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdDsKIApAQCAtNTgzOCwyMCArNTgzNywyOCBAQAogCiAJaWYgKCFmYWlsKSB7CiAJCS8qIHJlYWQgc2VyaWFsIG51bWJlciBvZiBhZGFwdGVyICovCi0JCWZvciAoY250ID0gMDsgY250IDwgMjU2OyBjbnQrKykgeworCQlmb3IgKGNudCA9IDA7IGNudCA8IDI1MjsgY250KyspIHsKIAkJCWlmICgodnBkX2RhdGFbY250XSA9PSAnUycpICYmCi0JCQkgICAgKHZwZF9kYXRhW2NudCsxXSA9PSAnTicpICYmCi0JCQkgICAgKHZwZF9kYXRhW2NudCsyXSA8IFZQRF9TVFJJTkdfTEVOKSkgewotCQkJCW1lbXNldChuaWMtPnNlcmlhbF9udW0sIDAsIFZQRF9TVFJJTkdfTEVOKTsKLQkJCQltZW1jcHkobmljLT5zZXJpYWxfbnVtLCAmdnBkX2RhdGFbY250ICsgM10sCi0JCQkJICAgICAgIHZwZF9kYXRhW2NudCsyXSk7Ci0JCQkJYnJlYWs7CisJCQkgICAgKHZwZF9kYXRhW2NudCsxXSA9PSAnTicpKSB7CisJCQkJbGVuID0gdnBkX2RhdGFbY250KzJdOworCQkJCWlmIChsZW4gPCBtaW4oVlBEX1NUUklOR19MRU4sIDI1Ni1jbnQtMikpIHsKKwkJCQkJbWVtY3B5KG5pYy0+c2VyaWFsX251bSwKKwkJCQkJICAgICAgICZ2cGRfZGF0YVtjbnQgKyAzXSwKKwkJCQkJICAgICAgIGxlbik7CisJCQkJCW1lbXNldChuaWMtPnNlcmlhbF9udW0rbGVuLAorCQkJCQkgICAgICAgMCwKKwkJCQkJICAgICAgIFZQRF9TVFJJTkdfTEVOLWxlbik7CisJCQkJCWJyZWFrOworCQkJCX0KIAkJCX0KIAkJfQogCX0KIAotCWlmICgoIWZhaWwpICYmICh2cGRfZGF0YVsxXSA8IFZQRF9TVFJJTkdfTEVOKSkKLQkJbWVtY3B5KG5pYy0+cHJvZHVjdF9uYW1lLCAmdnBkX2RhdGFbM10sIHZwZF9kYXRhWzFdKTsKKwlpZiAoKCFmYWlsKSAmJiAodnBkX2RhdGFbMV0gPCBWUERfU1RSSU5HX0xFTikpIHsKKwkJbGVuID0gdnBkX2RhdGFbMV07CisJCW1lbWNweShuaWMtPnByb2R1Y3RfbmFtZSwgJnZwZF9kYXRhWzNdLCBsZW4pOworCQluaWMtPnByb2R1Y3RfbmFtZVtsZW5dID0gMDsKKwl9CiAJa2ZyZWUodnBkX2RhdGEpOwogCXN3c3RhdHMtPm1lbV9mcmVlZCArPSAyNTY7CiB9CkBAIC02NzA3LDYgKzY3MTQsNyBAQAogewogCXJldHVybiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfVFNPKSAhPSAwOwogfQorCiBzdGF0aWMgaW50IHMyaW9fZXRodG9vbF9vcF9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQogewogCWlmIChkYXRhKQpAQCAtNjcxNyw2ICs2NzI1LDQyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgczJpb19ldGh0b29sX3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgczJpb19uaWMgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgcmMgPSAwOworCWludCBjaGFuZ2VkID0gMDsKKworCWlmIChkYXRhICYgfkVUSF9GTEFHX0xSTykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGF0YSAmIEVUSF9GTEFHX0xSTykgeworCQlpZiAobHJvX2VuYWJsZSkgeworCQkJaWYgKCEoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKSkgeworCQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87CisJCQkJY2hhbmdlZCA9IDE7CisJCQl9CisJCX0gZWxzZQorCQkJcmMgPSAtRUlOVkFMOworCX0gZWxzZSBpZiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKSB7CisJCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfTFJPOworCQljaGFuZ2VkID0gMTsKKwl9CisKKwlpZiAoY2hhbmdlZCAmJiBuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJczJpb19zdG9wX2FsbF90eF9xdWV1ZShzcCk7CisJCXMyaW9fY2FyZF9kb3duKHNwKTsKKwkJc3AtPmxybyA9ICEhKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTyk7CisJCXJjID0gczJpb19jYXJkX3VwKHNwKTsKKwkJaWYgKHJjKQorCQkJczJpb19yZXNldChzcCk7CisJCWVsc2UKKwkJCXMyaW9fc3RhcnRfYWxsX3R4X3F1ZXVlKHNwKTsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MgPSBzMmlvX2V0aHRvb2xfZ3NldCwKIAkuc2V0X3NldHRpbmdzID0gczJpb19ldGh0b29sX3NzZXQsCkBAIC02NzMzLDYgKzY3NzcsOCBAQAogCS5nZXRfcnhfY3N1bSA9IHMyaW9fZXRodG9vbF9nZXRfcnhfY3N1bSwKIAkuc2V0X3J4X2NzdW0gPSBzMmlvX2V0aHRvb2xfc2V0X3J4X2NzdW0sCiAJLnNldF90eF9jc3VtID0gczJpb19ldGh0b29sX29wX3NldF90eF9jc3VtLAorCS5zZXRfZmxhZ3MgPSBzMmlvX2V0aHRvb2xfc2V0X2ZsYWdzLAorCS5nZXRfZmxhZ3MgPSBldGh0b29sX29wX2dldF9mbGFncywKIAkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCiAJLmdldF90c28gPSBzMmlvX2V0aHRvb2xfb3BfZ2V0X3RzbywKIAkuc2V0X3RzbyA9IHMyaW9fZXRodG9vbF9vcF9zZXRfdHNvLApAQCAtNzI2MSw2ICs3MzA3LDcgQEAKIAkJc3RydWN0IHJpbmdfaW5mbyAqcmluZyA9ICZtYWNfY29udHJvbC0+cmluZ3NbaV07CiAKIAkJcmluZy0+bXR1ID0gZGV2LT5tdHU7CisJCXJpbmctPmxybyA9IHNwLT5scm87CiAJCXJldCA9IGZpbGxfcnhfYnVmZmVycyhzcCwgcmluZywgMSk7CiAJCWlmIChyZXQpIHsKIAkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IE91dCBvZiBtZW1vcnkgaW4gT3BlblxuIiwKQEAgLTc4NDcsNyArNzg5NCw2IEBACiAKIAkvKiAgUHJpdmF0ZSBtZW1iZXIgdmFyaWFibGUgaW5pdGlhbGl6ZWQgdG8gczJpbyBOSUMgc3RydWN0dXJlICovCiAJc3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCW1lbXNldChzcCwgMCwgc2l6ZW9mKHN0cnVjdCBzMmlvX25pYykpOwogCXNwLT5kZXYgPSBkZXY7CiAJc3AtPnBkZXYgPSBwZGV2OwogCXNwLT5oaWdoX2RtYV9mbGFnID0gZG1hX2ZsYWc7CkBAIC04MDAxLDcgKzgwNDcsOCBAQAogCWRldi0+bmV0ZGV2X29wcyA9ICZzMmlvX25ldGRldl9vcHM7CiAJU0VUX0VUSFRPT0xfT1BTKGRldiwgJm5ldGRldl9ldGh0b29sX29wcyk7CiAJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7Ci0KKwlpZiAobHJvX2VuYWJsZSkKKwkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKIAlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU07CiAJaWYgKHNwLT5oaWdoX2RtYV9mbGFnID09IHRydWUpCiAJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwpAQCAtODE1OSw3ICs4MjA2LDcgQEAKIAkJZ290byByZWdpc3Rlcl9mYWlsZWQ7CiAJfQogCXMyaW9fdnBkX3JlYWQoc3ApOwotCURCR19QUklOVChFUlJfREJHLCAiQ29weXJpZ2h0KGMpIDIwMDItMjAwNyBOZXRlcmlvbiBJbmMuXG4iKTsKKwlEQkdfUFJJTlQoRVJSX0RCRywgIkNvcHlyaWdodChjKSAyMDAyLTIwMTAgRXhhciBDb3JwLlxuIik7CiAJREJHX1BSSU5UKEVSUl9EQkcsICIlczogTmV0ZXJpb24gJXMgKHJldiAlZClcbiIsIGRldi0+bmFtZSwKIAkJICBzcC0+cHJvZHVjdF9uYW1lLCBwZGV2LT5yZXZpc2lvbik7CiAJREJHX1BSSU5UKEVSUl9EQkcsICIlczogRHJpdmVyIHZlcnNpb24gJXNcbiIsIGRldi0+bmFtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3MyaW8uaCBiL2RyaXZlcnMvbmV0L3MyaW8uaAppbmRleCA1ZTUyYzc1Li4wYWYwMzM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zMmlvLmgKKysrIGIvZHJpdmVycy9uZXQvczJpby5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogczJpby5oOiBBIExpbnV4IFBDSS1YIEV0aGVybmV0IGRyaXZlciBmb3IgTmV0ZXJpb24gMTBHYkUgU2VydmVyIE5JQwotICogQ29weXJpZ2h0KGMpIDIwMDItMjAwNyBOZXRlcmlvbiBJbmMuCisgKiBDb3B5cmlnaHQoYykgMjAwMi0yMDEwIEV4YXIgQ29ycC4KIAogICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcyBvZgogICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KQEAgLTY1LDcgKzY1LDcgQEAKIAogLyogREVCVUcgbWVzc2FnZSBwcmludC4gKi8KICNkZWZpbmUgREJHX1BSSU5UKGRiZ19sZXZlbCwgZm10LCBhcmdzLi4uKSBkbyB7CQkJXAotCWlmIChkYmdfbGV2ZWwgPj0gZGVidWdfbGV2ZWwpCQkJCVwKKwlpZiAoZGJnX2xldmVsIDw9IGRlYnVnX2xldmVsKQkJCQlcCiAJCXByX2luZm8oZm10LCAjI2FyZ3MpOwkJCQlcCiAJfSB3aGlsZSAoMCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2IxMjUwLW1hYy5jIGIvZHJpdmVycy9uZXQvc2IxMjUwLW1hYy5jCmluZGV4IDc5ZWVlMzAuLjhlNmJkNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYworKysgYi9kcml2ZXJzL25ldC9zYjEyNTAtbWFjLmMKQEAgLTI1MzIsNyArMjUzMiw3IEBACiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikgfHwgIXNjLT5waHlfZGV2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBwaHlfbWlpX2lvY3RsKHNjLT5waHlfZGV2LCBpZl9taWkocnEpLCBjbWQpOworCXJldHVybiBwaHlfbWlpX2lvY3RsKHNjLT5waHlfZGV2LCBycSwgY21kKTsKIH0KIAogc3RhdGljIGludCBzYm1hY19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5jIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCmluZGV4IDE1NjQ2MDUuLmJhNjc0YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9lZnguYworKysgYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJuaWMuaCIKIAogI2luY2x1ZGUgIm1jZGkuaCIKKyNpbmNsdWRlICJ3b3JrYXJvdW5kcy5oIgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC05MiwxMyArOTMsNiBAQAogCiAjZGVmaW5lIEVGWF9NQVhfTVRVICg5ICogMTAyNCkKIAotLyogUlggc2xvdyBmaWxsIHdvcmtxdWV1ZS4gSWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMgaW4gdGhlIGZhc3QgcGF0aCwKLSAqIGEgd29yayBpdGVtIGlzIHB1c2hlZCBvbnRvIHRoaXMgd29yayBxdWV1ZSB0byByZXRyeSB0aGUgYWxsb2NhdGlvbiBsYXRlciwKLSAqIHRvIGF2b2lkIHRoZSBOSUMgYmVpbmcgc3RhcnZlZCBvZiBSWCBidWZmZXJzLiBTaW5jZSB0aGlzIGlzIGEgcGVyIGNwdQotICogd29ya3F1ZXVlLCB0aGVyZSBpcyBub3RoaW5nIHRvIGJlIGdhaW5lZCBpbiBtYWtpbmcgaXQgcGVyIE5JQwotICovCi1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJlZmlsbF93b3JrcXVldWU7Ci0KIC8qIFJlc2V0IHdvcmtxdWV1ZS4gSWYgYW55IE5JQyBoYXMgYSBoYXJkd2FyZSBmYWlsdXJlIHRoZW4gYSByZXNldCB3aWxsIGJlCiAgKiBxdWV1ZWQgb250byB0aGlzIHdvcmsgcXVldWUuIFRoaXMgaXMgbm90IGEgcGVyLW5pYyB3b3JrIHF1ZXVlLCBiZWNhdXNlCiAgKiBlZnhfcmVzZXRfd29yaygpIGFjcXVpcmVzIHRoZSBydG5sIGxvY2ssIHNvIHJlc2V0cyBhcmUgbmF0dXJhbGx5IHNlcmlhbGlzZWQuCkBAIC0xOTUsNiArMTg5LDEzIEBACiBNT0RVTEVfUEFSTV9ERVNDKGlycV9hZGFwdF9oaWdoX3RocmVzaCwKIAkJICJUaHJlc2hvbGQgc2NvcmUgZm9yIGluY3JlYXNpbmcgSVJRIG1vZGVyYXRpb24iKTsKIAorc3RhdGljIHVuc2lnbmVkIGRlYnVnID0gKE5FVElGX01TR19EUlYgfCBORVRJRl9NU0dfUFJPQkUgfAorCQkJIE5FVElGX01TR19MSU5LIHwgTkVUSUZfTVNHX0lGRE9XTiB8CisJCQkgTkVUSUZfTVNHX0lGVVAgfCBORVRJRl9NU0dfUlhfRVJSIHwKKwkJCSBORVRJRl9NU0dfVFhfRVJSIHwgTkVUSUZfTVNHX0hXKTsKK21vZHVsZV9wYXJhbShkZWJ1ZywgdWludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiQml0bWFwcGVkIGRlYnVnZ2luZyBtZXNzYWdlIGVuYWJsZSB2YWx1ZSIpOworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBVdGlsaXR5IGZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcwpAQCAtMjc4LDE2ICsyNzksMTYgQEAKIHsKIAlzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwgPQogCQljb250YWluZXJfb2YobmFwaSwgc3RydWN0IGVmeF9jaGFubmVsLCBuYXBpX3N0cik7CisJc3RydWN0IGVmeF9uaWMgKmVmeCA9IGNoYW5uZWwtPmVmeDsKIAlpbnQgc3BlbnQ7CiAKLQlFRlhfVFJBQ0UoY2hhbm5lbC0+ZWZ4LCAiY2hhbm5lbCAlZCBOQVBJIHBvbGwgZXhlY3V0aW5nIG9uIENQVSAlZFxuIiwKLQkJICBjaGFubmVsLT5jaGFubmVsLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwluZXRpZl92ZGJnKGVmeCwgaW50ciwgZWZ4LT5uZXRfZGV2LAorCQkgICAiY2hhbm5lbCAlZCBOQVBJIHBvbGwgZXhlY3V0aW5nIG9uIENQVSAlZFxuIiwKKwkJICAgY2hhbm5lbC0+Y2hhbm5lbCwgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CiAKIAlzcGVudCA9IGVmeF9wcm9jZXNzX2NoYW5uZWwoY2hhbm5lbCwgYnVkZ2V0KTsKIAogCWlmIChzcGVudCA8IGJ1ZGdldCkgewotCQlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gY2hhbm5lbC0+ZWZ4OwotCiAJCWlmIChjaGFubmVsLT5jaGFubmVsIDwgZWZ4LT5uX3J4X2NoYW5uZWxzICYmCiAJCSAgICBlZngtPmlycV9yeF9hZGFwdGl2ZSAmJgogCQkgICAgdW5saWtlbHkoKytjaGFubmVsLT5pcnFfY291bnQgPT0gMTAwMCkpIHsKQEAgLTM2Myw3ICszNjQsOCBAQAogICovCiBzdGF0aWMgaW50IGVmeF9wcm9iZV9ldmVudHEoc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsKQogewotCUVGWF9MT0coY2hhbm5lbC0+ZWZ4LCAiY2hhbiAlZCBjcmVhdGUgZXZlbnQgcXVldWVcbiIsIGNoYW5uZWwtPmNoYW5uZWwpOworCW5ldGlmX2RiZyhjaGFubmVsLT5lZngsIHByb2JlLCBjaGFubmVsLT5lZngtPm5ldF9kZXYsCisJCSAgImNoYW4gJWQgY3JlYXRlIGV2ZW50IHF1ZXVlXG4iLCBjaGFubmVsLT5jaGFubmVsKTsKIAogCXJldHVybiBlZnhfbmljX3Byb2JlX2V2ZW50cShjaGFubmVsKTsKIH0KQEAgLTM3MSw3ICszNzMsOCBAQAogLyogUHJlcGFyZSBjaGFubmVsJ3MgZXZlbnQgcXVldWUgKi8KIHN0YXRpYyB2b2lkIGVmeF9pbml0X2V2ZW50cShzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwpCiB7Ci0JRUZYX0xPRyhjaGFubmVsLT5lZngsICJjaGFuICVkIGluaXQgZXZlbnQgcXVldWVcbiIsIGNoYW5uZWwtPmNoYW5uZWwpOworCW5ldGlmX2RiZyhjaGFubmVsLT5lZngsIGRydiwgY2hhbm5lbC0+ZWZ4LT5uZXRfZGV2LAorCQkgICJjaGFuICVkIGluaXQgZXZlbnQgcXVldWVcbiIsIGNoYW5uZWwtPmNoYW5uZWwpOwogCiAJY2hhbm5lbC0+ZXZlbnRxX3JlYWRfcHRyID0gMDsKIApAQCAtMzgwLDE0ICszODMsMTYgQEAKIAogc3RhdGljIHZvaWQgZWZ4X2ZpbmlfZXZlbnRxKHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCkKIHsKLQlFRlhfTE9HKGNoYW5uZWwtPmVmeCwgImNoYW4gJWQgZmluaSBldmVudCBxdWV1ZVxuIiwgY2hhbm5lbC0+Y2hhbm5lbCk7CisJbmV0aWZfZGJnKGNoYW5uZWwtPmVmeCwgZHJ2LCBjaGFubmVsLT5lZngtPm5ldF9kZXYsCisJCSAgImNoYW4gJWQgZmluaSBldmVudCBxdWV1ZVxuIiwgY2hhbm5lbC0+Y2hhbm5lbCk7CiAKIAllZnhfbmljX2ZpbmlfZXZlbnRxKGNoYW5uZWwpOwogfQogCiBzdGF0aWMgdm9pZCBlZnhfcmVtb3ZlX2V2ZW50cShzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwpCiB7Ci0JRUZYX0xPRyhjaGFubmVsLT5lZngsICJjaGFuICVkIHJlbW92ZSBldmVudCBxdWV1ZVxuIiwgY2hhbm5lbC0+Y2hhbm5lbCk7CisJbmV0aWZfZGJnKGNoYW5uZWwtPmVmeCwgZHJ2LCBjaGFubmVsLT5lZngtPm5ldF9kZXYsCisJCSAgImNoYW4gJWQgcmVtb3ZlIGV2ZW50IHF1ZXVlXG4iLCBjaGFubmVsLT5jaGFubmVsKTsKIAogCWVmeF9uaWNfcmVtb3ZlX2V2ZW50cShjaGFubmVsKTsKIH0KQEAgLTQwNCw3ICs0MDksOCBAQAogCXN0cnVjdCBlZnhfcnhfcXVldWUgKnJ4X3F1ZXVlOwogCWludCByYzsKIAotCUVGWF9MT0coY2hhbm5lbC0+ZWZ4LCAiY3JlYXRpbmcgY2hhbm5lbCAlZFxuIiwgY2hhbm5lbC0+Y2hhbm5lbCk7CisJbmV0aWZfZGJnKGNoYW5uZWwtPmVmeCwgcHJvYmUsIGNoYW5uZWwtPmVmeC0+bmV0X2RldiwKKwkJICAiY3JlYXRpbmcgY2hhbm5lbCAlZFxuIiwgY2hhbm5lbC0+Y2hhbm5lbCk7CiAKIAlyYyA9IGVmeF9wcm9iZV9ldmVudHEoY2hhbm5lbCk7CiAJaWYgKHJjKQpAQCAtNDc0LDEyICs0ODAsMTUgQEAKIAkgKi8KIAllZngtPnJ4X2J1ZmZlcl9sZW4gPSAobWF4KEVGWF9QQUdFX0lQX0FMSUdOLCBORVRfSVBfQUxJR04pICsKIAkJCSAgICAgIEVGWF9NQVhfRlJBTUVfTEVOKGVmeC0+bmV0X2Rldi0+bXR1KSArCisJCQkgICAgICBlZngtPnR5cGUtPnJ4X2J1ZmZlcl9oYXNoX3NpemUgKwogCQkJICAgICAgZWZ4LT50eXBlLT5yeF9idWZmZXJfcGFkZGluZyk7Ci0JZWZ4LT5yeF9idWZmZXJfb3JkZXIgPSBnZXRfb3JkZXIoZWZ4LT5yeF9idWZmZXJfbGVuKTsKKwllZngtPnJ4X2J1ZmZlcl9vcmRlciA9IGdldF9vcmRlcihlZngtPnJ4X2J1ZmZlcl9sZW4gKworCQkJCQkgc2l6ZW9mKHN0cnVjdCBlZnhfcnhfcGFnZV9zdGF0ZSkpOwogCiAJLyogSW5pdGlhbGlzZSB0aGUgY2hhbm5lbHMgKi8KIAllZnhfZm9yX2VhY2hfY2hhbm5lbChjaGFubmVsLCBlZngpIHsKLQkJRUZYX0xPRyhjaGFubmVsLT5lZngsICJpbml0IGNoYW4gJWRcbiIsIGNoYW5uZWwtPmNoYW5uZWwpOworCQluZXRpZl9kYmcoY2hhbm5lbC0+ZWZ4LCBkcnYsIGNoYW5uZWwtPmVmeC0+bmV0X2RldiwKKwkJCSAgImluaXQgY2hhbiAlZFxuIiwgY2hhbm5lbC0+Y2hhbm5lbCk7CiAKIAkJZWZ4X2luaXRfZXZlbnRxKGNoYW5uZWwpOwogCkBAIC01MDYsNyArNTE1LDggQEAKIHsKIAlzdHJ1Y3QgZWZ4X3J4X3F1ZXVlICpyeF9xdWV1ZTsKIAotCUVGWF9MT0coY2hhbm5lbC0+ZWZ4LCAic3RhcnRpbmcgY2hhbiAlZFxuIiwgY2hhbm5lbC0+Y2hhbm5lbCk7CisJbmV0aWZfZGJnKGNoYW5uZWwtPmVmeCwgaWZ1cCwgY2hhbm5lbC0+ZWZ4LT5uZXRfZGV2LAorCQkgICJzdGFydGluZyBjaGFuICVkXG4iLCBjaGFubmVsLT5jaGFubmVsKTsKIAogCS8qIFRoZSBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhpcyBjaGFubmVsIG1heSBzZXQgd29ya19wZW5kaW5nCiAJICogYXMgc29vbiBhcyB3ZSBlbmFibGUgaXQuICBNYWtlIHN1cmUgaXQncyBjbGVhcmVkIGJlZm9yZQpAQCAtNTE1LDExICs1MjUsMTEgQEAKIAljaGFubmVsLT5lbmFibGVkID0gdHJ1ZTsKIAlzbXBfd21iKCk7CiAKLQluYXBpX2VuYWJsZSgmY2hhbm5lbC0+bmFwaV9zdHIpOwotCi0JLyogTG9hZCB1cCBSWCBkZXNjcmlwdG9ycyAqLworCS8qIEZpbGwgdGhlIHF1ZXVlcyBiZWZvcmUgZW5hYmxpbmcgTkFQSSAqLwogCWVmeF9mb3JfZWFjaF9jaGFubmVsX3J4X3F1ZXVlKHJ4X3F1ZXVlLCBjaGFubmVsKQogCQllZnhfZmFzdF9wdXNoX3J4X2Rlc2NyaXB0b3JzKHJ4X3F1ZXVlKTsKKworCW5hcGlfZW5hYmxlKCZjaGFubmVsLT5uYXBpX3N0cik7CiB9CiAKIC8qIFRoaXMgZGlzYWJsZXMgZXZlbnQgcXVldWUgcHJvY2Vzc2luZyBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbi4KQEAgLTUyOCwyMSArNTM4LDE0IEBACiAgKi8KIHN0YXRpYyB2b2lkIGVmeF9zdG9wX2NoYW5uZWwoc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsKQogewotCXN0cnVjdCBlZnhfcnhfcXVldWUgKnJ4X3F1ZXVlOwotCiAJaWYgKCFjaGFubmVsLT5lbmFibGVkKQogCQlyZXR1cm47CiAKLQlFRlhfTE9HKGNoYW5uZWwtPmVmeCwgInN0b3AgY2hhbiAlZFxuIiwgY2hhbm5lbC0+Y2hhbm5lbCk7CisJbmV0aWZfZGJnKGNoYW5uZWwtPmVmeCwgaWZkb3duLCBjaGFubmVsLT5lZngtPm5ldF9kZXYsCisJCSAgInN0b3AgY2hhbiAlZFxuIiwgY2hhbm5lbC0+Y2hhbm5lbCk7CiAKIAljaGFubmVsLT5lbmFibGVkID0gZmFsc2U7CiAJbmFwaV9kaXNhYmxlKCZjaGFubmVsLT5uYXBpX3N0cik7Ci0KLQkvKiBFbnN1cmUgdGhhdCBhbnkgd29ya2VyIHRocmVhZHMgaGF2ZSBleGl0ZWQgb3Igd2lsbCBiZSBuby1vcHMgKi8KLQllZnhfZm9yX2VhY2hfY2hhbm5lbF9yeF9xdWV1ZShyeF9xdWV1ZSwgY2hhbm5lbCkgewotCQlzcGluX2xvY2tfYmgoJnJ4X3F1ZXVlLT5hZGRfbG9jayk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZyeF9xdWV1ZS0+YWRkX2xvY2spOwotCX0KIH0KIAogc3RhdGljIHZvaWQgZWZ4X2ZpbmlfY2hhbm5lbHMoc3RydWN0IGVmeF9uaWMgKmVmeCkKQEAgLTU1NiwxMyArNTU5LDI0IEBACiAJQlVHX09OKGVmeC0+cG9ydF9lbmFibGVkKTsKIAogCXJjID0gZWZ4X25pY19mbHVzaF9xdWV1ZXMoZWZ4KTsKLQlpZiAocmMpCi0JCUVGWF9FUlIoZWZ4LCAiZmFpbGVkIHRvIGZsdXNoIHF1ZXVlc1xuIik7Ci0JZWxzZQotCQlFRlhfTE9HKGVmeCwgInN1Y2Nlc3NmdWxseSBmbHVzaGVkIGFsbCBxdWV1ZXNcbiIpOworCWlmIChyYyAmJiBFRlhfV09SS0FST1VORF83ODAzKGVmeCkpIHsKKwkJLyogU2NoZWR1bGUgYSByZXNldCB0byByZWNvdmVyIGZyb20gdGhlIGZsdXNoIGZhaWx1cmUuIFRoZQorCQkgKiBkZXNjcmlwdG9yIGNhY2hlcyByZWZlcmVuY2UgbWVtb3J5IHdlJ3JlIGFib3V0IHRvIGZyZWUsCisJCSAqIGJ1dCBmYWxjb25fcmVjb25maWd1cmVfbWFjX3dyYXBwZXIoKSB3b24ndCByZWNvbm5lY3QKKwkJICogdGhlIE1BQ3MgYmVjYXVzZSBvZiB0aGUgcGVuZGluZyByZXNldC4gKi8KKwkJbmV0aWZfZXJyKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsCisJCQkgICJSZXNldHRpbmcgdG8gcmVjb3ZlciBmcm9tIGZsdXNoIGZhaWx1cmVcbiIpOworCQllZnhfc2NoZWR1bGVfcmVzZXQoZWZ4LCBSRVNFVF9UWVBFX0FMTCk7CisJfSBlbHNlIGlmIChyYykgeworCQluZXRpZl9lcnIoZWZ4LCBkcnYsIGVmeC0+bmV0X2RldiwgImZhaWxlZCB0byBmbHVzaCBxdWV1ZXNcbiIpOworCX0gZWxzZSB7CisJCW5ldGlmX2RiZyhlZngsIGRydiwgZWZ4LT5uZXRfZGV2LAorCQkJICAic3VjY2Vzc2Z1bGx5IGZsdXNoZWQgYWxsIHF1ZXVlc1xuIik7CisJfQogCiAJZWZ4X2Zvcl9lYWNoX2NoYW5uZWwoY2hhbm5lbCwgZWZ4KSB7Ci0JCUVGWF9MT0coY2hhbm5lbC0+ZWZ4LCAic2h1dCBkb3duIGNoYW4gJWRcbiIsIGNoYW5uZWwtPmNoYW5uZWwpOworCQluZXRpZl9kYmcoY2hhbm5lbC0+ZWZ4LCBkcnYsIGNoYW5uZWwtPmVmeC0+bmV0X2RldiwKKwkJCSAgInNodXQgZG93biBjaGFuICVkXG4iLCBjaGFubmVsLT5jaGFubmVsKTsKIAogCQllZnhfZm9yX2VhY2hfY2hhbm5lbF9yeF9xdWV1ZShyeF9xdWV1ZSwgY2hhbm5lbCkKIAkJCWVmeF9maW5pX3J4X3F1ZXVlKHJ4X3F1ZXVlKTsKQEAgLTU3Nyw3ICs1OTEsOCBAQAogCXN0cnVjdCBlZnhfdHhfcXVldWUgKnR4X3F1ZXVlOwogCXN0cnVjdCBlZnhfcnhfcXVldWUgKnJ4X3F1ZXVlOwogCi0JRUZYX0xPRyhjaGFubmVsLT5lZngsICJkZXN0cm95IGNoYW4gJWRcbiIsIGNoYW5uZWwtPmNoYW5uZWwpOworCW5ldGlmX2RiZyhjaGFubmVsLT5lZngsIGRydiwgY2hhbm5lbC0+ZWZ4LT5uZXRfZGV2LAorCQkgICJkZXN0cm95IGNoYW4gJWRcbiIsIGNoYW5uZWwtPmNoYW5uZWwpOwogCiAJZWZ4X2Zvcl9lYWNoX2NoYW5uZWxfcnhfcXVldWUocnhfcXVldWUsIGNoYW5uZWwpCiAJCWVmeF9yZW1vdmVfcnhfcXVldWUocnhfcXVldWUpOwpAQCAtNTg2LDkgKzYwMSw5IEBACiAJZWZ4X3JlbW92ZV9ldmVudHEoY2hhbm5lbCk7CiB9CiAKLXZvaWQgZWZ4X3NjaGVkdWxlX3Nsb3dfZmlsbChzdHJ1Y3QgZWZ4X3J4X3F1ZXVlICpyeF9xdWV1ZSwgaW50IGRlbGF5KQordm9pZCBlZnhfc2NoZWR1bGVfc2xvd19maWxsKHN0cnVjdCBlZnhfcnhfcXVldWUgKnJ4X3F1ZXVlKQogewotCXF1ZXVlX2RlbGF5ZWRfd29yayhyZWZpbGxfd29ya3F1ZXVlLCAmcnhfcXVldWUtPndvcmssIGRlbGF5KTsKKwltb2RfdGltZXIoJnJ4X3F1ZXVlLT5zbG93X2ZpbGwsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMCkpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTYyOCwxMiArNjQzLDEzIEBACiAKIAkvKiBTdGF0dXMgbWVzc2FnZSBmb3Iga2VybmVsIGxvZyAqLwogCWlmIChsaW5rX3N0YXRlLT51cCkgewotCQlFRlhfSU5GTyhlZngsICJsaW5rIHVwIGF0ICV1TWJwcyAlcy1kdXBsZXggKE1UVSAlZCklc1xuIiwKLQkJCSBsaW5rX3N0YXRlLT5zcGVlZCwgbGlua19zdGF0ZS0+ZmQgPyAiZnVsbCIgOiAiaGFsZiIsCi0JCQkgZWZ4LT5uZXRfZGV2LT5tdHUsCi0JCQkgKGVmeC0+cHJvbWlzY3VvdXMgPyAiIFtQUk9NSVNDXSIgOiAiIikpOworCQluZXRpZl9pbmZvKGVmeCwgbGluaywgZWZ4LT5uZXRfZGV2LAorCQkJICAgImxpbmsgdXAgYXQgJXVNYnBzICVzLWR1cGxleCAoTVRVICVkKSVzXG4iLAorCQkJICAgbGlua19zdGF0ZS0+c3BlZWQsIGxpbmtfc3RhdGUtPmZkID8gImZ1bGwiIDogImhhbGYiLAorCQkJICAgZWZ4LT5uZXRfZGV2LT5tdHUsCisJCQkgICAoZWZ4LT5wcm9taXNjdW91cyA/ICIgW1BST01JU0NdIiA6ICIiKSk7CiAJfSBlbHNlIHsKLQkJRUZYX0lORk8oZWZ4LCAibGluayBkb3duXG4iKTsKKwkJbmV0aWZfaW5mbyhlZngsIGxpbmssIGVmeC0+bmV0X2RldiwgImxpbmsgZG93blxuIik7CiAJfQogCiB9CkBAIC03MzcsNyArNzUzLDcgQEAKIHsKIAlpbnQgcmM7CiAKLQlFRlhfTE9HKGVmeCwgImNyZWF0ZSBwb3J0XG4iKTsKKwluZXRpZl9kYmcoZWZ4LCBwcm9iZSwgZWZ4LT5uZXRfZGV2LCAiY3JlYXRlIHBvcnRcbiIpOwogCiAJaWYgKHBoeV9mbGFzaF9jZmcpCiAJCWVmeC0+cGh5X21vZGUgPSBQSFlfTU9ERV9TUEVDSUFMOwpAQCAtNzUxLDE1ICs3NjcsMTYgQEAKIAlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihlZngtPm1hY19hZGRyZXNzKSkgewogCQltZW1jcHkoZWZ4LT5uZXRfZGV2LT5kZXZfYWRkciwgZWZ4LT5tYWNfYWRkcmVzcywgRVRIX0FMRU4pOwogCX0gZWxzZSB7Ci0JCUVGWF9FUlIoZWZ4LCAiaW52YWxpZCBNQUMgYWRkcmVzcyAlcE1cbiIsCi0JCQllZngtPm1hY19hZGRyZXNzKTsKKwkJbmV0aWZfZXJyKGVmeCwgcHJvYmUsIGVmeC0+bmV0X2RldiwgImludmFsaWQgTUFDIGFkZHJlc3MgJXBNXG4iLAorCQkJICBlZngtPm1hY19hZGRyZXNzKTsKIAkJaWYgKCFhbGxvd19iYWRfaHdhZGRyKSB7CiAJCQlyYyA9IC1FSU5WQUw7CiAJCQlnb3RvIGVycjsKIAkJfQogCQlyYW5kb21fZXRoZXJfYWRkcihlZngtPm5ldF9kZXYtPmRldl9hZGRyKTsKLQkJRUZYX0lORk8oZWZ4LCAidXNpbmcgbG9jYWxseS1nZW5lcmF0ZWQgTUFDICVwTVxuIiwKLQkJCSBlZngtPm5ldF9kZXYtPmRldl9hZGRyKTsKKwkJbmV0aWZfaW5mbyhlZngsIHByb2JlLCBlZngtPm5ldF9kZXYsCisJCQkgICAidXNpbmcgbG9jYWxseS1nZW5lcmF0ZWQgTUFDICVwTVxuIiwKKwkJCSAgIGVmeC0+bmV0X2Rldi0+ZGV2X2FkZHIpOwogCX0KIAogCXJldHVybiAwOwpAQCAtNzczLDcgKzc5MCw3IEBACiB7CiAJaW50IHJjOwogCi0JRUZYX0xPRyhlZngsICJpbml0IHBvcnRcbiIpOworCW5ldGlmX2RiZyhlZngsIGRydiwgZWZ4LT5uZXRfZGV2LCAiaW5pdCBwb3J0XG4iKTsKIAogCW11dGV4X2xvY2soJmVmeC0+bWFjX2xvY2spOwogCkBAIC04MDQsNyArODIxLDcgQEAKIAogc3RhdGljIHZvaWQgZWZ4X3N0YXJ0X3BvcnQoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKLQlFRlhfTE9HKGVmeCwgInN0YXJ0IHBvcnRcbiIpOworCW5ldGlmX2RiZyhlZngsIGlmdXAsIGVmeC0+bmV0X2RldiwgInN0YXJ0IHBvcnRcbiIpOwogCUJVR19PTihlZngtPnBvcnRfZW5hYmxlZCk7CiAKIAltdXRleF9sb2NrKCZlZngtPm1hY19sb2NrKTsKQEAgLTgyMSw3ICs4MzgsNyBAQAogLyogUHJldmVudCBlZnhfbWFjX3dvcmsoKSBhbmQgZWZ4X21vbml0b3IoKSBmcm9tIHdvcmtpbmcgKi8KIHN0YXRpYyB2b2lkIGVmeF9zdG9wX3BvcnQoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKLQlFRlhfTE9HKGVmeCwgInN0b3AgcG9ydFxuIik7CisJbmV0aWZfZGJnKGVmeCwgaWZkb3duLCBlZngtPm5ldF9kZXYsICJzdG9wIHBvcnRcbiIpOwogCiAJbXV0ZXhfbG9jaygmZWZ4LT5tYWNfbG9jayk7CiAJZWZ4LT5wb3J0X2VuYWJsZWQgPSBmYWxzZTsKQEAgLTgzNiw3ICs4NTMsNyBAQAogCiBzdGF0aWMgdm9pZCBlZnhfZmluaV9wb3J0KHN0cnVjdCBlZnhfbmljICplZngpCiB7Ci0JRUZYX0xPRyhlZngsICJzaHV0IGRvd24gcG9ydFxuIik7CisJbmV0aWZfZGJnKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsICJzaHV0IGRvd24gcG9ydFxuIik7CiAKIAlpZiAoIWVmeC0+cG9ydF9pbml0aWFsaXplZCkKIAkJcmV0dXJuOwpAQCAtODUwLDcgKzg2Nyw3IEBACiAKIHN0YXRpYyB2b2lkIGVmeF9yZW1vdmVfcG9ydChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewotCUVGWF9MT0coZWZ4LCAiZGVzdHJveWluZyBwb3J0XG4iKTsKKwluZXRpZl9kYmcoZWZ4LCBkcnYsIGVmeC0+bmV0X2RldiwgImRlc3Ryb3lpbmcgcG9ydFxuIik7CiAKIAllZngtPnR5cGUtPnJlbW92ZV9wb3J0KGVmeCk7CiB9CkBAIC04NjgsMTEgKzg4NSwxMiBAQAogCWRtYV9hZGRyX3QgZG1hX21hc2sgPSBlZngtPnR5cGUtPm1heF9kbWFfbWFzazsKIAlpbnQgcmM7CiAKLQlFRlhfTE9HKGVmeCwgImluaXRpYWxpc2luZyBJL09cbiIpOworCW5ldGlmX2RiZyhlZngsIHByb2JlLCBlZngtPm5ldF9kZXYsICJpbml0aWFsaXNpbmcgSS9PXG4iKTsKIAogCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpX2Rldik7CiAJaWYgKHJjKSB7Ci0JCUVGWF9FUlIoZWZ4LCAiZmFpbGVkIHRvIGVuYWJsZSBQQ0kgZGV2aWNlXG4iKTsKKwkJbmV0aWZfZXJyKGVmeCwgcHJvYmUsIGVmeC0+bmV0X2RldiwKKwkJCSAgImZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZVxuIik7CiAJCWdvdG8gZmFpbDE7CiAJfQogCkBAIC04OTAsMzkgKzkwOCw0NSBAQAogCQlkbWFfbWFzayA+Pj0gMTsKIAl9CiAJaWYgKHJjKSB7Ci0JCUVGWF9FUlIoZWZ4LCAiY291bGQgbm90IGZpbmQgYSBzdWl0YWJsZSBETUEgbWFza1xuIik7CisJCW5ldGlmX2VycihlZngsIHByb2JlLCBlZngtPm5ldF9kZXYsCisJCQkgICJjb3VsZCBub3QgZmluZCBhIHN1aXRhYmxlIERNQSBtYXNrXG4iKTsKIAkJZ290byBmYWlsMjsKIAl9Ci0JRUZYX0xPRyhlZngsICJ1c2luZyBETUEgbWFzayAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKSBkbWFfbWFzayk7CisJbmV0aWZfZGJnKGVmeCwgcHJvYmUsIGVmeC0+bmV0X2RldiwKKwkJICAidXNpbmcgRE1BIG1hc2sgJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgZG1hX21hc2spOwogCXJjID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaV9kZXYsIGRtYV9tYXNrKTsKIAlpZiAocmMpIHsKIAkJLyogcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKCkgaXMgbm90ICphbGxvd2VkKiB0bwogCQkgKiBmYWlsIHdpdGggYSBtYXNrIHRoYXQgcGNpX3NldF9kbWFfbWFzaygpIGFjY2VwdGVkLAogCQkgKiBidXQganVzdCBpbiBjYXNlLi4uCiAJCSAqLwotCQlFRlhfRVJSKGVmeCwgImZhaWxlZCB0byBzZXQgY29uc2lzdGVudCBETUEgbWFza1xuIik7CisJCW5ldGlmX2VycihlZngsIHByb2JlLCBlZngtPm5ldF9kZXYsCisJCQkgICJmYWlsZWQgdG8gc2V0IGNvbnNpc3RlbnQgRE1BIG1hc2tcbiIpOwogCQlnb3RvIGZhaWwyOwogCX0KIAogCWVmeC0+bWVtYmFzZV9waHlzID0gcGNpX3Jlc291cmNlX3N0YXJ0KGVmeC0+cGNpX2RldiwgRUZYX01FTV9CQVIpOwogCXJjID0gcGNpX3JlcXVlc3RfcmVnaW9uKHBjaV9kZXYsIEVGWF9NRU1fQkFSLCAic2ZjIik7CiAJaWYgKHJjKSB7Ci0JCUVGWF9FUlIoZWZ4LCAicmVxdWVzdCBmb3IgbWVtb3J5IEJBUiBmYWlsZWRcbiIpOworCQluZXRpZl9lcnIoZWZ4LCBwcm9iZSwgZWZ4LT5uZXRfZGV2LAorCQkJICAicmVxdWVzdCBmb3IgbWVtb3J5IEJBUiBmYWlsZWRcbiIpOwogCQlyYyA9IC1FSU87CiAJCWdvdG8gZmFpbDM7CiAJfQogCWVmeC0+bWVtYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShlZngtPm1lbWJhc2VfcGh5cywKIAkJCQkgICAgICAgZWZ4LT50eXBlLT5tZW1fbWFwX3NpemUpOwogCWlmICghZWZ4LT5tZW1iYXNlKSB7Ci0JCUVGWF9FUlIoZWZ4LCAiY291bGQgbm90IG1hcCBtZW1vcnkgQkFSIGF0ICVsbHgrJXhcbiIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKWVmeC0+bWVtYmFzZV9waHlzLAotCQkJZWZ4LT50eXBlLT5tZW1fbWFwX3NpemUpOworCQluZXRpZl9lcnIoZWZ4LCBwcm9iZSwgZWZ4LT5uZXRfZGV2LAorCQkJICAiY291bGQgbm90IG1hcCBtZW1vcnkgQkFSIGF0ICVsbHgrJXhcbiIsCisJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpZWZ4LT5tZW1iYXNlX3BoeXMsCisJCQkgIGVmeC0+dHlwZS0+bWVtX21hcF9zaXplKTsKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWw0OwogCX0KLQlFRlhfTE9HKGVmeCwgIm1lbW9yeSBCQVIgYXQgJWxseCsleCAodmlydHVhbCAlcClcbiIsCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpZWZ4LT5tZW1iYXNlX3BoeXMsCi0JCWVmeC0+dHlwZS0+bWVtX21hcF9zaXplLCBlZngtPm1lbWJhc2UpOworCW5ldGlmX2RiZyhlZngsIHByb2JlLCBlZngtPm5ldF9kZXYsCisJCSAgIm1lbW9yeSBCQVIgYXQgJWxseCsleCAodmlydHVhbCAlcClcbiIsCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZyllZngtPm1lbWJhc2VfcGh5cywKKwkJICBlZngtPnR5cGUtPm1lbV9tYXBfc2l6ZSwgZWZ4LT5tZW1iYXNlKTsKIAogCXJldHVybiAwOwogCkBAIC05MzgsNyArOTYyLDcgQEAKIAogc3RhdGljIHZvaWQgZWZ4X2ZpbmlfaW8oc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKLQlFRlhfTE9HKGVmeCwgInNodXR0aW5nIGRvd24gSS9PXG4iKTsKKwluZXRpZl9kYmcoZWZ4LCBkcnYsIGVmeC0+bmV0X2RldiwgInNodXR0aW5nIGRvd24gSS9PXG4iKTsKIAogCWlmIChlZngtPm1lbWJhc2UpIHsKIAkJaW91bm1hcChlZngtPm1lbWJhc2UpOwpAQCAtMTAwMiw5ICsxMDI2LDExIEBACiAJCQl4ZW50cmllc1tpXS5lbnRyeSA9IGk7CiAJCXJjID0gcGNpX2VuYWJsZV9tc2l4KGVmeC0+cGNpX2RldiwgeGVudHJpZXMsIG5fY2hhbm5lbHMpOwogCQlpZiAocmMgPiAwKSB7Ci0JCQlFRlhfRVJSKGVmeCwgIldBUk5JTkc6IEluc3VmZmljaWVudCBNU0ktWCB2ZWN0b3JzIgotCQkJCSIgYXZhaWxhYmxlICglZCA8ICVkKS5cbiIsIHJjLCBuX2NoYW5uZWxzKTsKLQkJCUVGWF9FUlIoZWZ4LCAiV0FSTklORzogUGVyZm9ybWFuY2UgbWF5IGJlIHJlZHVjZWQuXG4iKTsKKwkJCW5ldGlmX2VycihlZngsIGRydiwgZWZ4LT5uZXRfZGV2LAorCQkJCSAgIldBUk5JTkc6IEluc3VmZmljaWVudCBNU0ktWCB2ZWN0b3JzIgorCQkJCSAgIiBhdmFpbGFibGUgKCVkIDwgJWQpLlxuIiwgcmMsIG5fY2hhbm5lbHMpOworCQkJbmV0aWZfZXJyKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsCisJCQkJICAiV0FSTklORzogUGVyZm9ybWFuY2UgbWF5IGJlIHJlZHVjZWQuXG4iKTsKIAkJCUVGWF9CVUdfT05fUEFSQU5PSUQocmMgPj0gbl9jaGFubmVscyk7CiAJCQluX2NoYW5uZWxzID0gcmM7CiAJCQlyYyA9IHBjaV9lbmFibGVfbXNpeChlZngtPnBjaV9kZXYsIHhlbnRyaWVzLApAQCAtMTAyOCw3ICsxMDU0LDggQEAKIAkJfSBlbHNlIHsKIAkJCS8qIEZhbGwgYmFjayB0byBzaW5nbGUgY2hhbm5lbCBNU0kgKi8KIAkJCWVmeC0+aW50ZXJydXB0X21vZGUgPSBFRlhfSU5UX01PREVfTVNJOwotCQkJRUZYX0VSUihlZngsICJjb3VsZCBub3QgZW5hYmxlIE1TSS1YXG4iKTsKKwkJCW5ldGlmX2VycihlZngsIGRydiwgZWZ4LT5uZXRfZGV2LAorCQkJCSAgImNvdWxkIG5vdCBlbmFibGUgTVNJLVhcbiIpOwogCQl9CiAJfQogCkBAIC0xMDQxLDcgKzEwNjgsOCBAQAogCQlpZiAocmMgPT0gMCkgewogCQkJZWZ4LT5jaGFubmVsWzBdLmlycSA9IGVmeC0+cGNpX2Rldi0+aXJxOwogCQl9IGVsc2UgewotCQkJRUZYX0VSUihlZngsICJjb3VsZCBub3QgZW5hYmxlIE1TSVxuIik7CisJCQluZXRpZl9lcnIoZWZ4LCBkcnYsIGVmeC0+bmV0X2RldiwKKwkJCQkgICJjb3VsZCBub3QgZW5hYmxlIE1TSVxuIik7CiAJCQllZngtPmludGVycnVwdF9tb2RlID0gRUZYX0lOVF9NT0RFX0xFR0FDWTsKIAkJfQogCX0KQEAgLTEwOTMsOSArMTEyMSwxMCBAQAogCiBzdGF0aWMgaW50IGVmeF9wcm9iZV9uaWMoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKKwlzaXplX3QgaTsKIAlpbnQgcmM7CiAKLQlFRlhfTE9HKGVmeCwgImNyZWF0aW5nIE5JQ1xuIik7CisJbmV0aWZfZGJnKGVmeCwgcHJvYmUsIGVmeC0+bmV0X2RldiwgImNyZWF0aW5nIE5JQ1xuIik7CiAKIAkvKiBDYXJyeSBvdXQgaGFyZHdhcmUtdHlwZSBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbiAqLwogCXJjID0gZWZ4LT50eXBlLT5wcm9iZShlZngpOwpAQCAtMTEwNiw2ICsxMTM1LDExIEBACiAJICogaW4gTVNJLVggaW50ZXJydXB0cy4gKi8KIAllZnhfcHJvYmVfaW50ZXJydXB0cyhlZngpOwogCisJaWYgKGVmeC0+bl9jaGFubmVscyA+IDEpCisJCWdldF9yYW5kb21fYnl0ZXMoJmVmeC0+cnhfaGFzaF9rZXksIHNpemVvZihlZngtPnJ4X2hhc2hfa2V5KSk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZWZ4LT5yeF9pbmRpcl90YWJsZSk7IGkrKykKKwkJZWZ4LT5yeF9pbmRpcl90YWJsZVtpXSA9IGkgJSBlZngtPm5fcnhfY2hhbm5lbHM7CisKIAllZnhfc2V0X2NoYW5uZWxzKGVmeCk7CiAJZWZ4LT5uZXRfZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPSBlZngtPm5fdHhfY2hhbm5lbHM7CiAKQEAgLTExMTcsNyArMTE1MSw3IEBACiAKIHN0YXRpYyB2b2lkIGVmeF9yZW1vdmVfbmljKHN0cnVjdCBlZnhfbmljICplZngpCiB7Ci0JRUZYX0xPRyhlZngsICJkZXN0cm95aW5nIE5JQ1xuIik7CisJbmV0aWZfZGJnKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsICJkZXN0cm95aW5nIE5JQ1xuIik7CiAKIAllZnhfcmVtb3ZlX2ludGVycnVwdHMoZWZ4KTsKIAllZngtPnR5cGUtPnJlbW92ZShlZngpOwpAQCAtMTEzNywxNCArMTE3MSwxNCBAQAogCS8qIENyZWF0ZSBOSUMgKi8KIAlyYyA9IGVmeF9wcm9iZV9uaWMoZWZ4KTsKIAlpZiAocmMpIHsKLQkJRUZYX0VSUihlZngsICJmYWlsZWQgdG8gY3JlYXRlIE5JQ1xuIik7CisJCW5ldGlmX2VycihlZngsIHByb2JlLCBlZngtPm5ldF9kZXYsICJmYWlsZWQgdG8gY3JlYXRlIE5JQ1xuIik7CiAJCWdvdG8gZmFpbDE7CiAJfQogCiAJLyogQ3JlYXRlIHBvcnQgKi8KIAlyYyA9IGVmeF9wcm9iZV9wb3J0KGVmeCk7CiAJaWYgKHJjKSB7Ci0JCUVGWF9FUlIoZWZ4LCAiZmFpbGVkIHRvIGNyZWF0ZSBwb3J0XG4iKTsKKwkJbmV0aWZfZXJyKGVmeCwgcHJvYmUsIGVmeC0+bmV0X2RldiwgImZhaWxlZCB0byBjcmVhdGUgcG9ydFxuIik7CiAJCWdvdG8gZmFpbDI7CiAJfQogCkBAIC0xMTUyLDggKzExODYsOSBAQAogCWVmeF9mb3JfZWFjaF9jaGFubmVsKGNoYW5uZWwsIGVmeCkgewogCQlyYyA9IGVmeF9wcm9iZV9jaGFubmVsKGNoYW5uZWwpOwogCQlpZiAocmMpIHsKLQkJCUVGWF9FUlIoZWZ4LCAiZmFpbGVkIHRvIGNyZWF0ZSBjaGFubmVsICVkXG4iLAotCQkJCWNoYW5uZWwtPmNoYW5uZWwpOworCQkJbmV0aWZfZXJyKGVmeCwgcHJvYmUsIGVmeC0+bmV0X2RldiwKKwkJCQkgICJmYWlsZWQgdG8gY3JlYXRlIGNoYW5uZWwgJWRcbiIsCisJCQkJICBjaGFubmVsLT5jaGFubmVsKTsKIAkJCWdvdG8gZmFpbDM7CiAJCX0KIAl9CkBAIC0xMjMzLDE1ICsxMjY4LDggQEAKICAqIHNpbmNlIHdlJ3JlIGhvbGRpbmcgdGhlIHJ0bmxfbG9jayBhdCB0aGlzIHBvaW50LiAqLwogc3RhdGljIHZvaWQgZWZ4X2ZsdXNoX2FsbChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewotCXN0cnVjdCBlZnhfcnhfcXVldWUgKnJ4X3F1ZXVlOwotCiAJLyogTWFrZSBzdXJlIHRoZSBoYXJkd2FyZSBtb25pdG9yIGlzIHN0b3BwZWQgKi8KIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmVmeC0+bW9uaXRvcl93b3JrKTsKLQotCS8qIEVuc3VyZSB0aGF0IGFsbCBSWCBzbG93IHJlZmlsbHMgYXJlIGNvbXBsZXRlLiAqLwotCWVmeF9mb3JfZWFjaF9yeF9xdWV1ZShyeF9xdWV1ZSwgZWZ4KQotCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnJ4X3F1ZXVlLT53b3JrKTsKLQogCS8qIFN0b3Agc2NoZWR1bGVkIHBvcnQgcmVjb25maWd1cmF0aW9ucyAqLwogCWNhbmNlbF93b3JrX3N5bmMoJmVmeC0+bWFjX3dvcmspOwogfQpAQCAtMTM1Niw4ICsxMzg0LDkgQEAKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBlZnhfbmljLAogCQkJCQkgICBtb25pdG9yX3dvcmsud29yayk7CiAKLQlFRlhfVFJBQ0UoZWZ4LCAiaGFyZHdhcmUgbW9uaXRvciBleGVjdXRpbmcgb24gQ1BVICVkXG4iLAotCQkgIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOworCW5ldGlmX3ZkYmcoZWZ4LCB0aW1lciwgZWZ4LT5uZXRfZGV2LAorCQkgICAiaGFyZHdhcmUgbW9uaXRvciBleGVjdXRpbmcgb24gQ1BVICVkXG4iLAorCQkgICByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlCVUdfT04oZWZ4LT50eXBlLT5tb25pdG9yID09IE5VTEwpOwogCiAJLyogSWYgdGhlIG1hY19sb2NrIGlzIGFscmVhZHkgaGVsZCB0aGVuIGl0IGlzIGxpa2VseSBhIHBvcnQKQEAgLTE0NjQsOCArMTQ5Myw4IEBACiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwogCUVGWF9BU1NFUlRfUkVTRVRfU0VSSUFMSVNFRChlZngpOwogCi0JRUZYX0xPRyhlZngsICJvcGVuaW5nIGRldmljZSAlcyBvbiBDUFUgJWRcbiIsIG5ldF9kZXYtPm5hbWUsCi0JCXJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOworCW5ldGlmX2RiZyhlZngsIGlmdXAsIGVmeC0+bmV0X2RldiwgIm9wZW5pbmcgZGV2aWNlIG9uIENQVSAlZFxuIiwKKwkJICByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAogCWlmIChlZngtPnN0YXRlID09IFNUQVRFX0RJU0FCTEVEKQogCQlyZXR1cm4gLUVJTzsKQEAgLTE0OTAsOCArMTUxOSw4IEBACiB7CiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwogCi0JRUZYX0xPRyhlZngsICJjbG9zaW5nICVzIG9uIENQVSAlZFxuIiwgbmV0X2Rldi0+bmFtZSwKLQkJcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CisJbmV0aWZfZGJnKGVmeCwgaWZkb3duLCBlZngtPm5ldF9kZXYsICJjbG9zaW5nIG9uIENQVSAlZFxuIiwKKwkJICByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAogCWlmIChlZngtPnN0YXRlICE9IFNUQVRFX0RJU0FCTEVEKSB7CiAJCS8qIFN0b3AgdGhlIGRldmljZSBhbmQgZmx1c2ggYWxsIHRoZSBjaGFubmVscyAqLwpAQCAtMTUwNCwxMSArMTUzMywxMCBAQAogfQogCiAvKiBDb250ZXh0OiBwcm9jZXNzLCBkZXZfYmFzZV9sb2NrIG9yIFJUTkwgaGVsZCwgbm9uLWJsb2NraW5nLiAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICplZnhfbmV0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQorc3RhdGljIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqZWZ4X25ldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldiwgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cykKIHsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CiAJc3RydWN0IGVmeF9tYWNfc3RhdHMgKm1hY19zdGF0cyA9ICZlZngtPm1hY19zdGF0czsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmbmV0X2Rldi0+c3RhdHM7CiAKIAlzcGluX2xvY2tfYmgoJmVmeC0+c3RhdHNfbG9jayk7CiAJZWZ4LT50eXBlLT51cGRhdGVfc3RhdHMoZWZ4KTsKQEAgLTE1MzAsMTEgKzE1NTgsOCBAQAogCXN0YXRzLT50eF93aW5kb3dfZXJyb3JzID0gbWFjX3N0YXRzLT50eF9sYXRlX2NvbGxpc2lvbjsKIAogCXN0YXRzLT5yeF9lcnJvcnMgPSAoc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMgKwotCQkJICAgIHN0YXRzLT5yeF9vdmVyX2Vycm9ycyArCiAJCQkgICAgc3RhdHMtPnJ4X2NyY19lcnJvcnMgKwogCQkJICAgIHN0YXRzLT5yeF9mcmFtZV9lcnJvcnMgKwotCQkJICAgIHN0YXRzLT5yeF9maWZvX2Vycm9ycyArCi0JCQkgICAgc3RhdHMtPnJ4X21pc3NlZF9lcnJvcnMgKwogCQkJICAgIG1hY19zdGF0cy0+cnhfc3ltYm9sX2Vycm9yKTsKIAlzdGF0cy0+dHhfZXJyb3JzID0gKHN0YXRzLT50eF93aW5kb3dfZXJyb3JzICsKIAkJCSAgICBtYWNfc3RhdHMtPnR4X2JhZCk7CkBAIC0xNTQ3LDggKzE1NzIsOSBAQAogewogCXN0cnVjdCBlZnhfbmljICplZnggPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKIAotCUVGWF9FUlIoZWZ4LCAiVFggc3R1Y2sgd2l0aCBwb3J0X2VuYWJsZWQ9JWQ6IHJlc2V0dGluZyBjaGFubmVsc1xuIiwKLQkJZWZ4LT5wb3J0X2VuYWJsZWQpOworCW5ldGlmX2VycihlZngsIHR4X2VyciwgZWZ4LT5uZXRfZGV2LAorCQkgICJUWCBzdHVjayB3aXRoIHBvcnRfZW5hYmxlZD0lZDogcmVzZXR0aW5nIGNoYW5uZWxzXG4iLAorCQkgIGVmeC0+cG9ydF9lbmFibGVkKTsKIAogCWVmeF9zY2hlZHVsZV9yZXNldChlZngsIFJFU0VUX1RZUEVfVFhfV0FUQ0hET0cpOwogfQpAQCAtMTU2Nyw3ICsxNTkzLDcgQEAKIAogCWVmeF9zdG9wX2FsbChlZngpOwogCi0JRUZYX0xPRyhlZngsICJjaGFuZ2luZyBNVFUgdG8gJWRcbiIsIG5ld19tdHUpOworCW5ldGlmX2RiZyhlZngsIGRydiwgZWZ4LT5uZXRfZGV2LCAiY2hhbmdpbmcgTVRVIHRvICVkXG4iLCBuZXdfbXR1KTsKIAogCWVmeF9maW5pX2NoYW5uZWxzKGVmeCk7CiAKQEAgLTE1OTMsOCArMTYxOSw5IEBACiAJRUZYX0FTU0VSVF9SRVNFVF9TRVJJQUxJU0VEKGVmeCk7CiAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmV3X2FkZHIpKSB7Ci0JCUVGWF9FUlIoZWZ4LCAiaW52YWxpZCBldGhlcm5ldCBNQUMgYWRkcmVzcyByZXF1ZXN0ZWQ6ICVwTVxuIiwKLQkJCW5ld19hZGRyKTsKKwkJbmV0aWZfZXJyKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsCisJCQkgICJpbnZhbGlkIGV0aGVybmV0IE1BQyBhZGRyZXNzIHJlcXVlc3RlZDogJXBNXG4iLAorCQkJICBuZXdfYWRkcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTY0NSw3ICsxNjcyLDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZWZ4X25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuCQk9IGVmeF9uZXRfb3BlbiwKIAkubmRvX3N0b3AJCT0gZWZ4X25ldF9zdG9wLAotCS5uZG9fZ2V0X3N0YXRzCQk9IGVmeF9uZXRfc3RhdHMsCisJLm5kb19nZXRfc3RhdHM2NAk9IGVmeF9uZXRfc3RhdHMsCiAJLm5kb190eF90aW1lb3V0CQk9IGVmeF93YXRjaGRvZywKIAkubmRvX3N0YXJ0X3htaXQJCT0gZWZ4X2hhcmRfc3RhcnRfeG1pdCwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKQEAgLTE2OTcsNyArMTcyNCw2IEBACiAJbmV0X2Rldi0+d2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7CiAJbmV0X2Rldi0+aXJxID0gZWZ4LT5wY2lfZGV2LT5pcnE7CiAJbmV0X2Rldi0+bmV0ZGV2X29wcyA9ICZlZnhfbmV0ZGV2X29wczsKLQlTRVRfTkVUREVWX0RFVihuZXRfZGV2LCAmZWZ4LT5wY2lfZGV2LT5kZXYpOwogCVNFVF9FVEhUT09MX09QUyhuZXRfZGV2LCAmZWZ4X2V0aHRvb2xfb3BzKTsKIAogCS8qIENsZWFyIE1BQyBzdGF0aXN0aWNzICovCkBAIC0xNzIyLDcgKzE3NDgsOCBAQAogCiAJcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmVmeC0+cGNpX2Rldi0+ZGV2LCAmZGV2X2F0dHJfcGh5X3R5cGUpOwogCWlmIChyYykgewotCQlFRlhfRVJSKGVmeCwgImZhaWxlZCB0byBpbml0IG5ldCBkZXYgYXR0cmlidXRlc1xuIik7CisJCW5ldGlmX2VycihlZngsIGRydiwgZWZ4LT5uZXRfZGV2LAorCQkJICAiZmFpbGVkIHRvIGluaXQgbmV0IGRldiBhdHRyaWJ1dGVzXG4iKTsKIAkJZ290byBmYWlsX3JlZ2lzdGVyZWQ7CiAJfQogCkBAIC0xNzMwLDcgKzE3NTcsNyBAQAogCiBmYWlsX2xvY2tlZDoKIAlydG5sX3VubG9jaygpOwotCUVGWF9FUlIoZWZ4LCAiY291bGQgbm90IHJlZ2lzdGVyIG5ldCBkZXZcbiIpOworCW5ldGlmX2VycihlZngsIGRydiwgZWZ4LT5uZXRfZGV2LCAiY291bGQgbm90IHJlZ2lzdGVyIG5ldCBkZXZcbiIpOwogCXJldHVybiByYzsKIAogZmFpbF9yZWdpc3RlcmVkOgpAQCAtMTc5NSw3ICsxODIyLDcgQEAKIAogCXJjID0gZWZ4LT50eXBlLT5pbml0KGVmeCk7CiAJaWYgKHJjKSB7Ci0JCUVGWF9FUlIoZWZ4LCAiZmFpbGVkIHRvIGluaXRpYWxpc2UgTklDXG4iKTsKKwkJbmV0aWZfZXJyKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGlzZSBOSUNcbiIpOwogCQlnb3RvIGZhaWw7CiAJfQogCkBAIC0xODA3LDcgKzE4MzQsOCBAQAogCQlpZiAocmMpCiAJCQlnb3RvIGZhaWw7CiAJCWlmIChlZngtPnBoeV9vcC0+cmVjb25maWd1cmUoZWZ4KSkKLQkJCUVGWF9FUlIoZWZ4LCAiY291bGQgbm90IHJlc3RvcmUgUEhZIHNldHRpbmdzXG4iKTsKKwkJCW5ldGlmX2VycihlZngsIGRydiwgZWZ4LT5uZXRfZGV2LAorCQkJCSAgImNvdWxkIG5vdCByZXN0b3JlIFBIWSBzZXR0aW5nc1xuIik7CiAJfQogCiAJZWZ4LT5tYWNfb3AtPnJlY29uZmlndXJlKGVmeCk7CkBAIC0xODQwLDEzICsxODY4LDE0IEBACiAJaW50IHJjLCByYzI7CiAJYm9vbCBkaXNhYmxlZDsKIAotCUVGWF9JTkZPKGVmeCwgInJlc2V0dGluZyAoJXMpXG4iLCBSRVNFVF9UWVBFKG1ldGhvZCkpOworCW5ldGlmX2luZm8oZWZ4LCBkcnYsIGVmeC0+bmV0X2RldiwgInJlc2V0dGluZyAoJXMpXG4iLAorCQkgICBSRVNFVF9UWVBFKG1ldGhvZCkpOwogCiAJZWZ4X3Jlc2V0X2Rvd24oZWZ4LCBtZXRob2QpOwogCiAJcmMgPSBlZngtPnR5cGUtPnJlc2V0KGVmeCwgbWV0aG9kKTsKIAlpZiAocmMpIHsKLQkJRUZYX0VSUihlZngsICJmYWlsZWQgdG8gcmVzZXQgaGFyZHdhcmVcbiIpOworCQluZXRpZl9lcnIoZWZ4LCBkcnYsIGVmeC0+bmV0X2RldiwgImZhaWxlZCB0byByZXNldCBoYXJkd2FyZVxuIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTg3MSwxMCArMTkwMCwxMCBAQAogCiAJaWYgKGRpc2FibGVkKSB7CiAJCWRldl9jbG9zZShlZngtPm5ldF9kZXYpOwotCQlFRlhfRVJSKGVmeCwgImhhcyBiZWVuIGRpc2FibGVkXG4iKTsKKwkJbmV0aWZfZXJyKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsICJoYXMgYmVlbiBkaXNhYmxlZFxuIik7CiAJCWVmeC0+c3RhdGUgPSBTVEFURV9ESVNBQkxFRDsKIAl9IGVsc2UgewotCQlFRlhfTE9HKGVmeCwgInJlc2V0IGNvbXBsZXRlXG4iKTsKKwkJbmV0aWZfZGJnKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsICJyZXNldCBjb21wbGV0ZVxuIik7CiAJfQogCXJldHVybiByYzsKIH0KQEAgLTE4ODYsMTAgKzE5MTUsMTQgQEAKIHsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBlZnhfbmljLCByZXNldF93b3JrKTsKIAorCWlmIChlZngtPnJlc2V0X3BlbmRpbmcgPT0gUkVTRVRfVFlQRV9OT05FKQorCQlyZXR1cm47CisKIAkvKiBJZiB3ZSdyZSBub3QgUlVOTklORyB0aGVuIGRvbid0IHJlc2V0LiBMZWF2ZSB0aGUgcmVzZXRfcGVuZGluZwogCSAqIGZsYWcgc2V0IHNvIHRoYXQgZWZ4X3BjaV9wcm9iZV9tYWluIHdpbGwgYmUgcmV0cmllZCAqLwogCWlmIChlZngtPnN0YXRlICE9IFNUQVRFX1JVTk5JTkcpIHsKLQkJRUZYX0lORk8oZWZ4LCAic2NoZWR1bGVkIHJlc2V0IHF1ZW5jaGVkLiBOSUMgbm90IFJVTk5JTkdcbiIpOworCQluZXRpZl9pbmZvKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsCisJCQkgICAic2NoZWR1bGVkIHJlc2V0IHF1ZW5jaGVkLiBOSUMgbm90IFJVTk5JTkdcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xOTAzLDcgKzE5MzYsOCBAQAogCWVudW0gcmVzZXRfdHlwZSBtZXRob2Q7CiAKIAlpZiAoZWZ4LT5yZXNldF9wZW5kaW5nICE9IFJFU0VUX1RZUEVfTk9ORSkgewotCQlFRlhfSU5GTyhlZngsICJxdWVuY2hpbmcgYWxyZWFkeSBzY2hlZHVsZWQgcmVzZXRcbiIpOworCQluZXRpZl9pbmZvKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsCisJCQkgICAicXVlbmNoaW5nIGFscmVhZHkgc2NoZWR1bGVkIHJlc2V0XG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTkyNywxMCArMTk2MSwxMiBAQAogCX0KIAogCWlmIChtZXRob2QgIT0gdHlwZSkKLQkJRUZYX0xPRyhlZngsICJzY2hlZHVsaW5nICVzIHJlc2V0IGZvciAlc1xuIiwKLQkJCVJFU0VUX1RZUEUobWV0aG9kKSwgUkVTRVRfVFlQRSh0eXBlKSk7CisJCW5ldGlmX2RiZyhlZngsIGRydiwgZWZ4LT5uZXRfZGV2LAorCQkJICAic2NoZWR1bGluZyAlcyByZXNldCBmb3IgJXNcbiIsCisJCQkgIFJFU0VUX1RZUEUobWV0aG9kKSwgUkVTRVRfVFlQRSh0eXBlKSk7CiAJZWxzZQotCQlFRlhfTE9HKGVmeCwgInNjaGVkdWxpbmcgJXMgcmVzZXRcbiIsIFJFU0VUX1RZUEUobWV0aG9kKSk7CisJCW5ldGlmX2RiZyhlZngsIGRydiwgZWZ4LT5uZXRfZGV2LCAic2NoZWR1bGluZyAlcyByZXNldFxuIiwKKwkJCSAgUkVTRVRfVFlQRShtZXRob2QpKTsKIAogCWVmeC0+cmVzZXRfcGVuZGluZyA9IG1ldGhvZDsKIApAQCAtMjAxNyw2ICsyMDUzLDcgQEAKIAlJTklUX1dPUksoJmVmeC0+cmVzZXRfd29yaywgZWZ4X3Jlc2V0X3dvcmspOwogCUlOSVRfREVMQVlFRF9XT1JLKCZlZngtPm1vbml0b3Jfd29yaywgZWZ4X21vbml0b3IpOwogCWVmeC0+cGNpX2RldiA9IHBjaV9kZXY7CisJZWZ4LT5tc2dfZW5hYmxlID0gZGVidWc7CiAJZWZ4LT5zdGF0ZSA9IFNUQVRFX0lOSVQ7CiAJZWZ4LT5yZXNldF9wZW5kaW5nID0gUkVTRVRfVFlQRV9OT05FOwogCXN0cmxjcHkoZWZ4LT5uYW1lLCBwY2lfbmFtZShwY2lfZGV2KSwgc2l6ZW9mKGVmeC0+bmFtZSkpOwpAQCAtMjA1Miw4ICsyMDg5LDggQEAKIAkJcnhfcXVldWUtPnF1ZXVlID0gaTsKIAkJcnhfcXVldWUtPmNoYW5uZWwgPSAmZWZ4LT5jaGFubmVsWzBdOyAvKiBmb3Igc2FmZXR5ICovCiAJCXJ4X3F1ZXVlLT5idWZmZXIgPSBOVUxMOwotCQlzcGluX2xvY2tfaW5pdCgmcnhfcXVldWUtPmFkZF9sb2NrKTsKLQkJSU5JVF9ERUxBWUVEX1dPUksoJnJ4X3F1ZXVlLT53b3JrLCBlZnhfcnhfd29yayk7CisJCXNldHVwX3RpbWVyKCZyeF9xdWV1ZS0+c2xvd19maWxsLCBlZnhfcnhfc2xvd19maWxsLAorCQkJICAgICh1bnNpZ25lZCBsb25nKXJ4X3F1ZXVlKTsKIAl9CiAKIAllZngtPnR5cGUgPSB0eXBlOwpAQCAtMjEzNiw3ICsyMTczLDcgQEAKIAllZnhfcGNpX3JlbW92ZV9tYWluKGVmeCk7CiAKIAllZnhfZmluaV9pbyhlZngpOwotCUVGWF9MT0coZWZ4LCAic2h1dGRvd24gc3VjY2Vzc2Z1bFxuIik7CisJbmV0aWZfZGJnKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsICJzaHV0ZG93biBzdWNjZXNzZnVsXG4iKTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwY2lfZGV2LCBOVUxMKTsKIAllZnhfZmluaV9zdHJ1Y3QoZWZ4KTsKQEAgLTIxNjEsMTMgKzIxOTgsMTUgQEAKIAogCXJjID0gZWZ4LT50eXBlLT5pbml0KGVmeCk7CiAJaWYgKHJjKSB7Ci0JCUVGWF9FUlIoZWZ4LCAiZmFpbGVkIHRvIGluaXRpYWxpc2UgTklDXG4iKTsKKwkJbmV0aWZfZXJyKGVmeCwgcHJvYmUsIGVmeC0+bmV0X2RldiwKKwkJCSAgImZhaWxlZCB0byBpbml0aWFsaXNlIE5JQ1xuIik7CiAJCWdvdG8gZmFpbDM7CiAJfQogCiAJcmMgPSBlZnhfaW5pdF9wb3J0KGVmeCk7CiAJaWYgKHJjKSB7Ci0JCUVGWF9FUlIoZWZ4LCAiZmFpbGVkIHRvIGluaXRpYWxpc2UgcG9ydFxuIik7CisJCW5ldGlmX2VycihlZngsIHByb2JlLCBlZngtPm5ldF9kZXYsCisJCQkgICJmYWlsZWQgdG8gaW5pdGlhbGlzZSBwb3J0XG4iKTsKIAkJZ290byBmYWlsNDsKIAl9CiAKQEAgLTIyMjMsMTEgKzIyNjIsMTMgQEAKIAkJCQkgICBORVRJRl9GX0hJR0hETUEgfCBORVRJRl9GX1RTTyk7CiAJZWZ4ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CiAJcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIGVmeCk7CisJU0VUX05FVERFVl9ERVYobmV0X2RldiwgJnBjaV9kZXYtPmRldik7CiAJcmMgPSBlZnhfaW5pdF9zdHJ1Y3QoZWZ4LCB0eXBlLCBwY2lfZGV2LCBuZXRfZGV2KTsKIAlpZiAocmMpCiAJCWdvdG8gZmFpbDE7CiAKLQlFRlhfSU5GTyhlZngsICJTb2xhcmZsYXJlIENvbW11bmljYXRpb25zIE5JQyBkZXRlY3RlZFxuIik7CisJbmV0aWZfaW5mbyhlZngsIHByb2JlLCBlZngtPm5ldF9kZXYsCisJCSAgICJTb2xhcmZsYXJlIENvbW11bmljYXRpb25zIE5JQyBkZXRlY3RlZFxuIik7CiAKIAkvKiBTZXQgdXAgYmFzaWMgSS9PIChCQVIgbWFwcGluZ3MgZXRjKSAqLwogCXJjID0gZWZ4X2luaXRfaW8oZWZ4KTsKQEAgLTIyNjUsNyArMjMwNiw3IEBACiAJfQogCiAJaWYgKHJjKSB7Ci0JCUVGWF9FUlIoZWZ4LCAiQ291bGQgbm90IHJlc2V0IE5JQ1xuIik7CisJCW5ldGlmX2VycihlZngsIHByb2JlLCBlZngtPm5ldF9kZXYsICJDb3VsZCBub3QgcmVzZXQgTklDXG4iKTsKIAkJZ290byBmYWlsNDsKIAl9CiAKQEAgLTIyNzcsNyArMjMxOCw3IEBACiAJaWYgKHJjKQogCQlnb3RvIGZhaWw1OwogCi0JRUZYX0xPRyhlZngsICJpbml0aWFsaXNhdGlvbiBzdWNjZXNzZnVsXG4iKTsKKwluZXRpZl9kYmcoZWZ4LCBwcm9iZSwgZWZ4LT5uZXRfZGV2LCAiaW5pdGlhbGlzYXRpb24gc3VjY2Vzc2Z1bFxuIik7CiAKIAlydG5sX2xvY2soKTsKIAllZnhfbXRkX3Byb2JlKGVmeCk7IC8qIGFsbG93ZWQgdG8gZmFpbCAqLwpAQCAtMjI5Myw3ICsyMzM0LDcgQEAKIAllZnhfZmluaV9zdHJ1Y3QoZWZ4KTsKICBmYWlsMToKIAlXQVJOX09OKHJjID4gMCk7Ci0JRUZYX0xPRyhlZngsICJpbml0aWFsaXNhdGlvbiBmYWlsZWQuIHJjPSVkXG4iLCByYyk7CisJbmV0aWZfZGJnKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsICJpbml0aWFsaXNhdGlvbiBmYWlsZWQuIHJjPSVkXG4iLCByYyk7CiAJZnJlZV9uZXRkZXYobmV0X2Rldik7CiAJcmV0dXJuIHJjOwogfQpAQCAtMjMzMiw2ICsyMzczLDkgQEAKIAogCWVmeC0+dHlwZS0+cmVzdW1lX3dvbChlZngpOwogCisJLyogUmVzY2hlZHVsZSBhbnkgcXVlbmNoZWQgcmVzZXRzIHNjaGVkdWxlZCBkdXJpbmcgZWZ4X3BtX2ZyZWV6ZSgpICovCisJcXVldWVfd29yayhyZXNldF93b3JrcXVldWUsICZlZngtPnJlc2V0X3dvcmspOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzOTQsNyArMjQzOCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZWZ4X3BjaV9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gRUZYX0RSSVZFUl9OQU1FLAorCS5uYW1lCQk9IEtCVUlMRF9NT0ROQU1FLAogCS5pZF90YWJsZQk9IGVmeF9wY2lfdGFibGUsCiAJLnByb2JlCQk9IGVmeF9wY2lfcHJvYmUsCiAJLnJlbW92ZQkJPSBlZnhfcGNpX3JlbW92ZSwKQEAgLTI0MjEsMTEgKzI0NjUsNiBAQAogCWlmIChyYykKIAkJZ290byBlcnJfbm90aWZpZXI7CiAKLQlyZWZpbGxfd29ya3F1ZXVlID0gY3JlYXRlX3dvcmtxdWV1ZSgic2ZjX3JlZmlsbCIpOwotCWlmICghcmVmaWxsX3dvcmtxdWV1ZSkgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX3JlZmlsbDsKLQl9CiAJcmVzZXRfd29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoInNmY19yZXNldCIpOwogCWlmICghcmVzZXRfd29ya3F1ZXVlKSB7CiAJCXJjID0gLUVOT01FTTsKQEAgLTI0NDEsOCArMjQ4MCw2IEBACiAgZXJyX3BjaToKIAlkZXN0cm95X3dvcmtxdWV1ZShyZXNldF93b3JrcXVldWUpOwogIGVycl9yZXNldDoKLQlkZXN0cm95X3dvcmtxdWV1ZShyZWZpbGxfd29ya3F1ZXVlKTsKLSBlcnJfcmVmaWxsOgogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZlZnhfbmV0ZGV2X25vdGlmaWVyKTsKICBlcnJfbm90aWZpZXI6CiAJcmV0dXJuIHJjOwpAQCAtMjQ1NCw3ICsyNDkxLDYgQEAKIAogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZWZ4X3BjaV9kcml2ZXIpOwogCWRlc3Ryb3lfd29ya3F1ZXVlKHJlc2V0X3dvcmtxdWV1ZSk7Ci0JZGVzdHJveV93b3JrcXVldWUocmVmaWxsX3dvcmtxdWV1ZSk7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmVmeF9uZXRkZXZfbm90aWZpZXIpOwogCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZWZ4LmggYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmgKaW5kZXggZmZkNzA4Yy4uMDYwZGM5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9lZnguaApAQCAtNDcsMTIgKzQ3LDEyIEBACiBleHRlcm4gdm9pZCBlZnhfZmluaV9yeF9xdWV1ZShzdHJ1Y3QgZWZ4X3J4X3F1ZXVlICpyeF9xdWV1ZSk7CiBleHRlcm4gdm9pZCBlZnhfcnhfc3RyYXRlZ3koc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsKTsKIGV4dGVybiB2b2lkIGVmeF9mYXN0X3B1c2hfcnhfZGVzY3JpcHRvcnMoc3RydWN0IGVmeF9yeF9xdWV1ZSAqcnhfcXVldWUpOwotZXh0ZXJuIHZvaWQgZWZ4X3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKTsKK2V4dGVybiB2b2lkIGVmeF9yeF9zbG93X2ZpbGwodW5zaWduZWQgbG9uZyBjb250ZXh0KTsKIGV4dGVybiB2b2lkIF9fZWZ4X3J4X3BhY2tldChzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwsCiAJCQkgICAgc3RydWN0IGVmeF9yeF9idWZmZXIgKnJ4X2J1ZiwgYm9vbCBjaGVja3N1bW1lZCk7CiBleHRlcm4gdm9pZCBlZnhfcnhfcGFja2V0KHN0cnVjdCBlZnhfcnhfcXVldWUgKnJ4X3F1ZXVlLCB1bnNpZ25lZCBpbnQgaW5kZXgsCiAJCQkgIHVuc2lnbmVkIGludCBsZW4sIGJvb2wgY2hlY2tzdW1tZWQsIGJvb2wgZGlzY2FyZCk7Ci1leHRlcm4gdm9pZCBlZnhfc2NoZWR1bGVfc2xvd19maWxsKHN0cnVjdCBlZnhfcnhfcXVldWUgKnJ4X3F1ZXVlLCBpbnQgZGVsYXkpOworZXh0ZXJuIHZvaWQgZWZ4X3NjaGVkdWxlX3Nsb3dfZmlsbChzdHJ1Y3QgZWZ4X3J4X3F1ZXVlICpyeF9xdWV1ZSk7CiAjZGVmaW5lIEVGWF9SWFFfU0laRSAxMDI0CiAjZGVmaW5lIEVGWF9SWFFfTUFTSyAoRUZYX1JYUV9TSVpFIC0gMSkKIApAQCAtMTA2LDggKzEwNiw5IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlZnhfc2NoZWR1bGVfY2hhbm5lbChzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwpCiB7Ci0JRUZYX1RSQUNFKGNoYW5uZWwtPmVmeCwgImNoYW5uZWwgJWQgc2NoZWR1bGluZyBOQVBJIHBvbGwgb24gQ1BVJWRcbiIsCi0JCSAgY2hhbm5lbC0+Y2hhbm5lbCwgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CisJbmV0aWZfdmRiZyhjaGFubmVsLT5lZngsIGludHIsIGNoYW5uZWwtPmVmeC0+bmV0X2RldiwKKwkJICAgImNoYW5uZWwgJWQgc2NoZWR1bGluZyBOQVBJIHBvbGwgb24gQ1BVJWRcbiIsCisJCSAgIGNoYW5uZWwtPmNoYW5uZWwsIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOwogCWNoYW5uZWwtPndvcmtfcGVuZGluZyA9IHRydWU7CiAKIAluYXBpX3NjaGVkdWxlKCZjaGFubmVsLT5uYXBpX3N0cik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvc2ZjL2V0aHRvb2wuYwppbmRleCAyMjAyNmJmLi5mZDE5ZDZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9ldGh0b29sLmMKQEAgLTIxOCw4ICsyMTgsOCBAQAogCiAJLyogR01BQyBkb2VzIG5vdCBzdXBwb3J0IDEwMDBNYnBzIEhEICovCiAJaWYgKGVjbWQtPnNwZWVkID09IFNQRUVEXzEwMDAgJiYgZWNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKSB7Ci0JCUVGWF9MT0coZWZ4LCAicmVqZWN0aW5nIHVuc3VwcG9ydGVkIDEwMDBNYnBzIEhEIgotCQkJIiBzZXR0aW5nXG4iKTsKKwkJbmV0aWZfZGJnKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsCisJCQkgICJyZWplY3RpbmcgdW5zdXBwb3J0ZWQgMTAwME1icHMgSEQgc2V0dGluZ1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMjM0LDcgKzIzNCw3IEBACiB7CiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwogCi0Jc3RybGNweShpbmZvLT5kcml2ZXIsIEVGWF9EUklWRVJfTkFNRSwgc2l6ZW9mKGluZm8tPmRyaXZlcikpOworCXN0cmxjcHkoaW5mby0+ZHJpdmVyLCBLQlVJTERfTU9ETkFNRSwgc2l6ZW9mKGluZm8tPmRyaXZlcikpOwogCXN0cmxjcHkoaW5mby0+dmVyc2lvbiwgRUZYX0RSSVZFUl9WRVJTSU9OLCBzaXplb2YoaW5mby0+dmVyc2lvbikpOwogCWlmIChlZnhfbmljX3JldihlZngpID49IEVGWF9SRVZfU0lFTkFfQTApCiAJCXNpZW5hX3ByaW50X2Z3dmVyKGVmeCwgaW5mby0+ZndfdmVyc2lvbiwKQEAgLTI0Miw2ICsyNDIsMzIgQEAKIAlzdHJsY3B5KGluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShlZngtPnBjaV9kZXYpLCBzaXplb2YoaW5mby0+YnVzX2luZm8pKTsKIH0KIAorc3RhdGljIGludCBlZnhfZXRodG9vbF9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCit7CisJcmV0dXJuIGVmeF9uaWNfZ2V0X3JlZ3NfbGVuKG5ldGRldl9wcml2KG5ldF9kZXYpKTsKK30KKworc3RhdGljIHZvaWQgZWZ4X2V0aHRvb2xfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCisJCQkJIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsIHZvaWQgKmJ1ZikKK3sKKwlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CisKKwlyZWdzLT52ZXJzaW9uID0gZWZ4LT50eXBlLT5yZXZpc2lvbjsKKwllZnhfbmljX2dldF9yZWdzKGVmeCwgYnVmKTsKK30KKworc3RhdGljIHUzMiBlZnhfZXRodG9vbF9nZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCit7CisJc3RydWN0IGVmeF9uaWMgKmVmeCA9IG5ldGRldl9wcml2KG5ldF9kZXYpOworCXJldHVybiBlZngtPm1zZ19lbmFibGU7Cit9CisKK3N0YXRpYyB2b2lkIGVmeF9ldGh0b29sX3NldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwgdTMyIG1zZ19lbmFibGUpCit7CisJc3RydWN0IGVmeF9uaWMgKmVmeCA9IG5ldGRldl9wcml2KG5ldF9kZXYpOworCWVmeC0+bXNnX2VuYWJsZSA9IG1zZ19lbmFibGU7Cit9CisKIC8qKgogICogZWZ4X2ZpbGxfdGVzdCAtIGZpbGwgaW4gYW4gaW5kaXZpZHVhbCBzZWxmLXRlc3QgZW50cnkKICAqIEB0ZXN0X2luZGV4OgkJSW5kZXggb2YgdGhlIHRlc3QKQEAgLTQ0MywxMiArNDY5LDEzIEBACiAJc3RydWN0IGVmeF9tYWNfc3RhdHMgKm1hY19zdGF0cyA9ICZlZngtPm1hY19zdGF0czsKIAlzdHJ1Y3QgZWZ4X2V0aHRvb2xfc3RhdCAqc3RhdDsKIAlzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWw7CisJc3RydWN0IHJ0bmxfbGlua19zdGF0czY0IHRlbXA7CiAJaW50IGk7CiAKIAlFRlhfQlVHX09OX1BBUkFOT0lEKHN0YXRzLT5uX3N0YXRzICE9IEVGWF9FVEhUT09MX05VTV9TVEFUUyk7CiAKIAkvKiBVcGRhdGUgTUFDIGFuZCBOSUMgc3RhdGlzdGljcyAqLwotCWRldl9nZXRfc3RhdHMobmV0X2Rldik7CisJZGV2X2dldF9zdGF0cyhuZXRfZGV2LCAmdGVtcCk7CiAKIAkvKiBGaWxsIGRldGFpbGVkIHN0YXRpc3RpY3MgYnVmZmVyICovCiAJZm9yIChpID0gMDsgaSA8IEVGWF9FVEhUT09MX05VTV9TVEFUUzsgaSsrKSB7CkBAIC01MjAsNiArNTQ3LDE0IEBACiAJcmV0dXJuIGVmeC0+cnhfY2hlY2tzdW1fZW5hYmxlZDsKIH0KIAorc3RhdGljIGludCBlZnhfZXRodG9vbF9zZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsIHUzMiBkYXRhKQoreworCXN0cnVjdCBlZnhfbmljICplZnggPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKKwl1MzIgc3VwcG9ydGVkID0gZWZ4LT50eXBlLT5vZmZsb2FkX2ZlYXR1cmVzICYgRVRIX0ZMQUdfUlhIQVNIOworCisJcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X2ZsYWdzKG5ldF9kZXYsIGRhdGEsIHN1cHBvcnRlZCk7Cit9CisKIHN0YXRpYyB2b2lkIGVmeF9ldGh0b29sX3NlbGZfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKIAkJCQkgIHN0cnVjdCBldGh0b29sX3Rlc3QgKnRlc3QsIHU2NCAqZGF0YSkKIHsKQEAgLTUzOSw3ICs1NzQsOCBAQAogCWlmICghYWxyZWFkeV91cCkgewogCQlyYyA9IGRldl9vcGVuKGVmeC0+bmV0X2Rldik7CiAJCWlmIChyYykgewotCQkJRUZYX0VSUihlZngsICJmYWlsZWQgb3BlbmluZyBkZXZpY2UuXG4iKTsKKwkJCW5ldGlmX2VycihlZngsIGRydiwgZWZ4LT5uZXRfZGV2LAorCQkJCSAgImZhaWxlZCBvcGVuaW5nIGRldmljZS5cbiIpOwogCQkJZ290byBmYWlsMjsKIAkJfQogCX0KQEAgLTU1MSw5ICs1ODcsOSBAQAogCWlmICghYWxyZWFkeV91cCkKIAkJZGV2X2Nsb3NlKGVmeC0+bmV0X2Rldik7CiAKLQlFRlhfTE9HKGVmeCwgIiVzICVzbGluZSBzZWxmLXRlc3RzXG4iLAotCQlyYyA9PSAwID8gInBhc3NlZCIgOiAiZmFpbGVkIiwKLQkJKHRlc3QtPmZsYWdzICYgRVRIX1RFU1RfRkxfT0ZGTElORSkgPyAib2ZmIiA6ICJvbiIpOworCW5ldGlmX2RiZyhlZngsIGRydiwgZWZ4LT5uZXRfZGV2LCAiJXMgJXNsaW5lIHNlbGYtdGVzdHNcbiIsCisJCSAgcmMgPT0gMCA/ICJwYXNzZWQiIDogImZhaWxlZCIsCisJCSAgKHRlc3QtPmZsYWdzICYgRVRIX1RFU1RfRkxfT0ZGTElORSkgPyAib2ZmIiA6ICJvbiIpOwogCiAgZmFpbDI6CiAgZmFpbDE6CkBAIC02NzksOCArNzE1LDggQEAKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKGNvYWxlc2NlLT5yeF9jb2FsZXNjZV91c2VjcyB8fCBjb2FsZXNjZS0+dHhfY29hbGVzY2VfdXNlY3MpIHsKLQkJRUZYX0VSUihlZngsICJpbnZhbGlkIGNvYWxlc2Npbmcgc2V0dGluZy4gIgotCQkJIk9ubHkgcngvdHhfY29hbGVzY2VfdXNlY3NfaXJxIGFyZSBzdXBwb3J0ZWRcbiIpOworCQluZXRpZl9lcnIoZWZ4LCBkcnYsIGVmeC0+bmV0X2RldiwgImludmFsaWQgY29hbGVzY2luZyBzZXR0aW5nLiAiCisJCQkgICJPbmx5IHJ4L3R4X2NvYWxlc2NlX3VzZWNzX2lycSBhcmUgc3VwcG9ydGVkXG4iKTsKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIApAQCAtNjkyLDggKzcyOCw4IEBACiAJZWZ4X2Zvcl9lYWNoX3R4X3F1ZXVlKHR4X3F1ZXVlLCBlZngpIHsKIAkJaWYgKCh0eF9xdWV1ZS0+Y2hhbm5lbC0+Y2hhbm5lbCA8IGVmeC0+bl9yeF9jaGFubmVscykgJiYKIAkJICAgIHR4X3VzZWNzKSB7Ci0JCQlFRlhfRVJSKGVmeCwgIkNoYW5uZWwgaXMgc2hhcmVkLiAiCi0JCQkJIk9ubHkgUlggY29hbGVzY2luZyBtYXkgYmUgc2V0XG4iKTsKKwkJCW5ldGlmX2VycihlZngsIGRydiwgZWZ4LT5uZXRfZGV2LCAiQ2hhbm5lbCBpcyBzaGFyZWQuICIKKwkJCQkgICJPbmx5IFJYIGNvYWxlc2NpbmcgbWF5IGJlIHNldFxuIik7CiAJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJCX0KIAl9CkBAIC03MjEsMTMgKzc1NywxNSBAQAogCQkgICAgIChwYXVzZS0+YXV0b25lZyA/IEVGWF9GQ19BVVRPIDogMCkpOwogCiAJaWYgKCh3YW50ZWRfZmMgJiBFRlhfRkNfVFgpICYmICEod2FudGVkX2ZjICYgRUZYX0ZDX1JYKSkgewotCQlFRlhfTE9HKGVmeCwgIkZsb3cgY29udHJvbCB1bnN1cHBvcnRlZDogdHggT04gcnggT0ZGXG4iKTsKKwkJbmV0aWZfZGJnKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsCisJCQkgICJGbG93IGNvbnRyb2wgdW5zdXBwb3J0ZWQ6IHR4IE9OIHJ4IE9GRlxuIik7CiAJCXJjID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQogCiAJaWYgKCh3YW50ZWRfZmMgJiBFRlhfRkNfQVVUTykgJiYgIWVmeC0+bGlua19hZHZlcnRpc2luZykgewotCQlFRlhfTE9HKGVmeCwgIkF1dG9uZWdvdGlhdGlvbiBpcyBkaXNhYmxlZFxuIik7CisJCW5ldGlmX2RiZyhlZngsIGRydiwgZWZ4LT5uZXRfZGV2LAorCQkJICAiQXV0b25lZ290aWF0aW9uIGlzIGRpc2FibGVkXG4iKTsKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CkBAIC03NTgsOCArNzk2LDkgQEAKIAkgICAgKGVmeC0+d2FudGVkX2ZjIF4gb2xkX2ZjKSAmIEVGWF9GQ19BVVRPKSB7CiAJCXJjID0gZWZ4LT5waHlfb3AtPnJlY29uZmlndXJlKGVmeCk7CiAJCWlmIChyYykgewotCQkJRUZYX0VSUihlZngsICJVbmFibGUgdG8gYWR2ZXJ0aXNlIHJlcXVlc3RlZCBmbG93ICIKLQkJCQkiY29udHJvbCBzZXR0aW5nXG4iKTsKKwkJCW5ldGlmX2VycihlZngsIGRydiwgZWZ4LT5uZXRfZGV2LAorCQkJCSAgIlVuYWJsZSB0byBhZHZlcnRpc2UgcmVxdWVzdGVkIGZsb3cgIgorCQkJCSAgImNvbnRyb2wgc2V0dGluZ1xuIik7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KQEAgLTgzMCwxMCArODY5LDEwMSBAQAogCXJldHVybiBlZnhfcmVzZXQoZWZ4LCBtZXRob2QpOwogfQogCitzdGF0aWMgaW50CitlZnhfZXRodG9vbF9nZXRfcnhuZmMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCisJCSAgICAgIHN0cnVjdCBldGh0b29sX3J4bmZjICppbmZvLCB2b2lkICpydWxlcyBfX2Fsd2F5c191bnVzZWQpCit7CisJc3RydWN0IGVmeF9uaWMgKmVmeCA9IG5ldGRldl9wcml2KG5ldF9kZXYpOworCisJc3dpdGNoIChpbmZvLT5jbWQpIHsKKwljYXNlIEVUSFRPT0xfR1JYUklOR1M6CisJCWluZm8tPmRhdGEgPSBlZngtPm5fcnhfY2hhbm5lbHM7CisJCXJldHVybiAwOworCisJY2FzZSBFVEhUT09MX0dSWEZIOiB7CisJCXVuc2lnbmVkIG1pbl9yZXZpc2lvbiA9IDA7CisKKwkJaW5mby0+ZGF0YSA9IDA7CisJCXN3aXRjaCAoaW5mby0+Zmxvd190eXBlKSB7CisJCWNhc2UgVENQX1Y0X0ZMT1c6CisJCQlpbmZvLT5kYXRhIHw9IFJYSF9MNF9CXzBfMSB8IFJYSF9MNF9CXzJfMzsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFVEUF9WNF9GTE9XOgorCQljYXNlIFNDVFBfVjRfRkxPVzoKKwkJY2FzZSBBSF9FU1BfVjRfRkxPVzoKKwkJY2FzZSBJUFY0X0ZMT1c6CisJCQlpbmZvLT5kYXRhIHw9IFJYSF9JUF9TUkMgfCBSWEhfSVBfRFNUOworCQkJbWluX3JldmlzaW9uID0gRUZYX1JFVl9GQUxDT05fQjA7CisJCQlicmVhazsKKwkJY2FzZSBUQ1BfVjZfRkxPVzoKKwkJCWluZm8tPmRhdGEgfD0gUlhIX0w0X0JfMF8xIHwgUlhIX0w0X0JfMl8zOworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgVURQX1Y2X0ZMT1c6CisJCWNhc2UgU0NUUF9WNl9GTE9XOgorCQljYXNlIEFIX0VTUF9WNl9GTE9XOgorCQljYXNlIElQVjZfRkxPVzoKKwkJCWluZm8tPmRhdGEgfD0gUlhIX0lQX1NSQyB8IFJYSF9JUF9EU1Q7CisJCQltaW5fcmV2aXNpb24gPSBFRlhfUkVWX1NJRU5BX0EwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlpZiAoZWZ4X25pY19yZXYoZWZ4KSA8IG1pbl9yZXZpc2lvbikKKwkJCWluZm8tPmRhdGEgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorfQorCitzdGF0aWMgaW50IGVmeF9ldGh0b29sX2dldF9yeGZoX2luZGlyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAorCQkJCSAgICAgIHN0cnVjdCBldGh0b29sX3J4ZmhfaW5kaXIgKmluZGlyKQoreworCXN0cnVjdCBlZnhfbmljICplZnggPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKKwlzaXplX3QgY29weV9zaXplID0KKwkJbWluX3Qoc2l6ZV90LCBpbmRpci0+c2l6ZSwgQVJSQVlfU0laRShlZngtPnJ4X2luZGlyX3RhYmxlKSk7CisKKwlpZiAoZWZ4X25pY19yZXYoZWZ4KSA8IEVGWF9SRVZfRkFMQ09OX0IwKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpbmRpci0+c2l6ZSA9IEFSUkFZX1NJWkUoZWZ4LT5yeF9pbmRpcl90YWJsZSk7CisJbWVtY3B5KGluZGlyLT5yaW5nX2luZGV4LCBlZngtPnJ4X2luZGlyX3RhYmxlLAorCSAgICAgICBjb3B5X3NpemUgKiBzaXplb2YoaW5kaXItPnJpbmdfaW5kZXhbMF0pKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlZnhfZXRodG9vbF9zZXRfcnhmaF9pbmRpcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9yeGZoX2luZGlyICppbmRpcikKK3sKKwlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CisJc2l6ZV90IGk7CisKKwlpZiAoZWZ4X25pY19yZXYoZWZ4KSA8IEVGWF9SRVZfRkFMQ09OX0IwKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwkvKiBWYWxpZGF0ZSBzaXplIGFuZCBpbmRpY2VzICovCisJaWYgKGluZGlyLT5zaXplICE9IEFSUkFZX1NJWkUoZWZ4LT5yeF9pbmRpcl90YWJsZSkpCisJCXJldHVybiAtRUlOVkFMOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVmeC0+cnhfaW5kaXJfdGFibGUpOyBpKyspCisJCWlmIChpbmRpci0+cmluZ19pbmRleFtpXSA+PSBlZngtPm5fcnhfY2hhbm5lbHMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbWNweShlZngtPnJ4X2luZGlyX3RhYmxlLCBpbmRpci0+cmluZ19pbmRleCwKKwkgICAgICAgc2l6ZW9mKGVmeC0+cnhfaW5kaXJfdGFibGUpKTsKKwllZnhfbmljX3B1c2hfcnhfaW5kaXJfdGFibGUoZWZ4KTsKKwlyZXR1cm4gMDsKK30KKwogY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGVmeF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzCQk9IGVmeF9ldGh0b29sX2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCQk9IGVmeF9ldGh0b29sX3NldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8JCT0gZWZ4X2V0aHRvb2xfZ2V0X2RydmluZm8sCisJLmdldF9yZWdzX2xlbgkJPSBlZnhfZXRodG9vbF9nZXRfcmVnc19sZW4sCisJLmdldF9yZWdzCQk9IGVmeF9ldGh0b29sX2dldF9yZWdzLAorCS5nZXRfbXNnbGV2ZWwJCT0gZWZ4X2V0aHRvb2xfZ2V0X21zZ2xldmVsLAorCS5zZXRfbXNnbGV2ZWwJCT0gZWZ4X2V0aHRvb2xfc2V0X21zZ2xldmVsLAogCS5ud2F5X3Jlc2V0CQk9IGVmeF9ldGh0b29sX253YXlfcmVzZXQsCiAJLmdldF9saW5rCQk9IGVmeF9ldGh0b29sX2dldF9saW5rLAogCS5nZXRfZWVwcm9tX2xlbgkJPSBlZnhfZXRodG9vbF9nZXRfZWVwcm9tX2xlbiwKQEAgLTg1NCw3ICs5ODQsNyBAQAogCS8qIE5lZWQgdG8gZW5hYmxlL2Rpc2FibGUgVFNPLUlQdjYgdG9vICovCiAJLnNldF90c28JCT0gZWZ4X2V0aHRvb2xfc2V0X3RzbywKIAkuZ2V0X2ZsYWdzCQk9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAotCS5zZXRfZmxhZ3MJCT0gZXRodG9vbF9vcF9zZXRfZmxhZ3MsCisJLnNldF9mbGFncwkJPSBlZnhfZXRodG9vbF9zZXRfZmxhZ3MsCiAJLmdldF9zc2V0X2NvdW50CQk9IGVmeF9ldGh0b29sX2dldF9zc2V0X2NvdW50LAogCS5zZWxmX3Rlc3QJCT0gZWZ4X2V0aHRvb2xfc2VsZl90ZXN0LAogCS5nZXRfc3RyaW5ncwkJPSBlZnhfZXRodG9vbF9nZXRfc3RyaW5ncywKQEAgLTg2Myw0ICs5OTMsNyBAQAogCS5nZXRfd29sICAgICAgICAgICAgICAgID0gZWZ4X2V0aHRvb2xfZ2V0X3dvbCwKIAkuc2V0X3dvbCAgICAgICAgICAgICAgICA9IGVmeF9ldGh0b29sX3NldF93b2wsCiAJLnJlc2V0CQkJPSBlZnhfZXRodG9vbF9yZXNldCwKKwkuZ2V0X3J4bmZjCQk9IGVmeF9ldGh0b29sX2dldF9yeG5mYywKKwkuZ2V0X3J4ZmhfaW5kaXIJCT0gZWZ4X2V0aHRvb2xfZ2V0X3J4ZmhfaW5kaXIsCisJLnNldF9yeGZoX2luZGlyCQk9IGVmeF9ldGh0b29sX3NldF9yeGZoX2luZGlyLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uYyBiL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uYwppbmRleCA2NTViNjk3Li40ZjlkMzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5jCkBAIC0xNjcsMTMgKzE2NywxNSBAQAogCSAqIGV4aXQgd2l0aG91dCBoYXZpbmcgdG91Y2hlZCB0aGUgaGFyZHdhcmUuCiAJICovCiAJaWYgKHVubGlrZWx5KEVGWF9PV09SRF9JU19aRVJPKCppbnRfa2VyKSkpIHsKLQkJRUZYX1RSQUNFKGVmeCwgIklSUSAlZCBvbiBDUFUgJWQgbm90IGZvciBtZVxuIiwgaXJxLAotCQkJICByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJbmV0aWZfdmRiZyhlZngsIGludHIsIGVmeC0+bmV0X2RldiwKKwkJCSAgICJJUlEgJWQgb24gQ1BVICVkIG5vdCBmb3IgbWVcbiIsIGlycSwKKwkJCSAgIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOwogCQlyZXR1cm4gSVJRX05PTkU7CiAJfQogCWVmeC0+bGFzdF9pcnFfY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKLQlFRlhfVFJBQ0UoZWZ4LCAiSVJRICVkIG9uIENQVSAlZCBzdGF0dXMgIiBFRlhfT1dPUkRfRk1UICJcbiIsCi0JCSAgaXJxLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCBFRlhfT1dPUkRfVkFMKCppbnRfa2VyKSk7CisJbmV0aWZfdmRiZyhlZngsIGludHIsIGVmeC0+bmV0X2RldiwKKwkJICAgIklSUSAlZCBvbiBDUFUgJWQgc3RhdHVzICIgRUZYX09XT1JEX0ZNVCAiXG4iLAorCQkgICBpcnEsIHJhd19zbXBfcHJvY2Vzc29yX2lkKCksIEVGWF9PV09SRF9WQUwoKmludF9rZXIpKTsKIAogCS8qIERldGVybWluZSBpbnRlcnJ1cHRpbmcgcXVldWVzLCBjbGVhciBpbnRlcnJ1cHQgc3RhdHVzCiAJICogcmVnaXN0ZXIgYW5kIGFja25vd2xlZGdlIHRoZSBkZXZpY2UgaW50ZXJydXB0LgpAQCAtMjM5LDcgKzI0MSw4IEBACiAJCWlmICghZmFsY29uX3NwaV9wb2xsKGVmeCkpCiAJCQlyZXR1cm4gMDsKIAkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdGltZW91dCkpIHsKLQkJCUVGWF9FUlIoZWZ4LCAidGltZWQgb3V0IHdhaXRpbmcgZm9yIFNQSVxuIik7CisJCQluZXRpZl9lcnIoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LAorCQkJCSAgInRpbWVkIG91dCB3YWl0aW5nIGZvciBTUElcbiIpOwogCQkJcmV0dXJuIC1FVElNRURPVVQ7CiAJCX0KIAkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CkBAIC0zMzMsOSArMzM2LDEwIEBACiAJCWlmICghKHN0YXR1cyAmIFNQSV9TVEFUVVNfTlJEWSkpCiAJCQlyZXR1cm4gMDsKIAkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdGltZW91dCkpIHsKLQkJCUVGWF9FUlIoZWZ4LCAiU1BJIHdyaXRlIHRpbWVvdXQgb24gZGV2aWNlICVkIgotCQkJCSIgbGFzdCBzdGF0dXM9MHglMDJ4XG4iLAotCQkJCXNwaS0+ZGV2aWNlX2lkLCBzdGF0dXMpOworCQkJbmV0aWZfZXJyKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJCQkgICJTUEkgd3JpdGUgdGltZW91dCBvbiBkZXZpY2UgJWQiCisJCQkJICAiIGxhc3Qgc3RhdHVzPTB4JTAyeFxuIiwKKwkJCQkgIHNwaS0+ZGV2aWNlX2lkLCBzdGF0dXMpOwogCQkJcmV0dXJuIC1FVElNRURPVVQ7CiAJCX0KIAkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CkBAIC00NjksNyArNDczLDggQEAKIAkJCQl1ZGVsYXkoMTApOwogCQkJfQogCi0JCQlFRlhfRVJSKGVmeCwgInRpbWVkIG91dCB3YWl0aW5nIGZvciBYTUFDIGNvcmUgcmVzZXRcbiIpOworCQkJbmV0aWZfZXJyKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJCQkgICJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgWE1BQyBjb3JlIHJlc2V0XG4iKTsKIAkJfQogCX0KIApAQCAtNDkyLDEyICs0OTcsMTMgQEAKIAkJaWYgKCFFRlhfT1dPUkRfRklFTEQocmVnLCBGUkZfQUJfUlNUX1hHVFgpICYmCiAJCSAgICAhRUZYX09XT1JEX0ZJRUxEKHJlZywgRlJGX0FCX1JTVF9YR1JYKSAmJgogCQkgICAgIUVGWF9PV09SRF9GSUVMRChyZWcsIEZSRl9BQl9SU1RfRU0pKSB7Ci0JCQlFRlhfTE9HKGVmeCwgIkNvbXBsZXRlZCBNQUMgcmVzZXQgYWZ0ZXIgJWQgbG9vcHNcbiIsCi0JCQkJY291bnQpOworCQkJbmV0aWZfZGJnKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJCQkgICJDb21wbGV0ZWQgTUFDIHJlc2V0IGFmdGVyICVkIGxvb3BzXG4iLAorCQkJCSAgY291bnQpOwogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKGNvdW50ID4gMjApIHsKLQkJCUVGWF9FUlIoZWZ4LCAiTUFDIHJlc2V0IGZhaWxlZFxuIik7CisJCQluZXRpZl9lcnIoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LCAiTUFDIHJlc2V0IGZhaWxlZFxuIik7CiAJCQlicmVhazsKIAkJfQogCQljb3VudCsrOwpAQCAtNTQ4LDcgKzU1NCw5IEBACiB7CiAJc3RydWN0IGVmeF9saW5rX3N0YXRlICpsaW5rX3N0YXRlID0gJmVmeC0+bGlua19zdGF0ZTsKIAllZnhfb3dvcmRfdCByZWc7Ci0JaW50IGxpbmtfc3BlZWQ7CisJaW50IGxpbmtfc3BlZWQsIGlzb2xhdGU7CisKKwlpc29sYXRlID0gKGVmeC0+cmVzZXRfcGVuZGluZyAhPSBSRVNFVF9UWVBFX05PTkUpOwogCiAJc3dpdGNoIChsaW5rX3N0YXRlLT5zcGVlZCkgewogCWNhc2UgMTAwMDA6IGxpbmtfc3BlZWQgPSAzOyBicmVhazsKQEAgLTU3MCw3ICs1NzgsNyBAQAogCSAqIGRpc2NhcmRlZC4gKi8KIAlpZiAoZWZ4X25pY19yZXYoZWZ4KSA+PSBFRlhfUkVWX0ZBTENPTl9CMCkgewogCQlFRlhfU0VUX09XT1JEX0ZJRUxEKHJlZywgRlJGX0JCX1RYRklGT19EUkFJTl9FTiwKLQkJCQkgICAgIWxpbmtfc3RhdGUtPnVwKTsKKwkJCQkgICAgIWxpbmtfc3RhdGUtPnVwIHx8IGlzb2xhdGUpOwogCX0KIAogCWVmeF93cml0ZW8oZWZ4LCAmcmVnLCBGUl9BQl9NQUNfQ1RSTCk7CkBAIC01ODQsNyArNTkyLDcgQEAKIAlFRlhfU0VUX09XT1JEX0ZJRUxEKHJlZywgRlJGX0FaX1JYX1hPRkZfTUFDX0VOLCAxKTsKIAkvKiBVbmlzb2xhdGUgdGhlIE1BQyAtPiBSWCAqLwogCWlmIChlZnhfbmljX3JldihlZngpID49IEVGWF9SRVZfRkFMQ09OX0IwKQotCQlFRlhfU0VUX09XT1JEX0ZJRUxEKHJlZywgRlJGX0JaX1JYX0lOR1JfRU4sIDEpOworCQlFRlhfU0VUX09XT1JEX0ZJRUxEKHJlZywgRlJGX0JaX1JYX0lOR1JfRU4sICFpc29sYXRlKTsKIAllZnhfd3JpdGVvKGVmeCwgJnJlZywgRlJfQVpfUlhfQ0ZHKTsKIH0KIApAQCAtNjI1LDcgKzYzMyw4IEBACiAJCXJtYigpOyAvKiByZWFkIHRoZSBkb25lIGZsYWcgYmVmb3JlIHRoZSBzdGF0cyAqLwogCQllZngtPm1hY19vcC0+dXBkYXRlX3N0YXRzKGVmeCk7CiAJfSBlbHNlIHsKLQkJRUZYX0VSUihlZngsICJ0aW1lZCBvdXQgd2FpdGluZyBmb3Igc3RhdGlzdGljc1xuIik7CisJCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsCisJCQkgICJ0aW1lZCBvdXQgd2FpdGluZyBmb3Igc3RhdGlzdGljc1xuIik7CiAJfQogfQogCkBAIC03MTUsMTYgKzcyNCwxNyBAQAogCQlpZiAoRUZYX09XT1JEX0ZJRUxEKG1kX3N0YXQsIEZSRl9BQl9NRF9CU1kpID09IDApIHsKIAkJCWlmIChFRlhfT1dPUkRfRklFTEQobWRfc3RhdCwgRlJGX0FCX01EX0xORkwpICE9IDAgfHwKIAkJCSAgICBFRlhfT1dPUkRfRklFTEQobWRfc3RhdCwgRlJGX0FCX01EX0JTRVJSKSAhPSAwKSB7Ci0JCQkJRUZYX0VSUihlZngsICJlcnJvciBmcm9tIEdNSUkgYWNjZXNzICIKLQkJCQkJRUZYX09XT1JEX0ZNVCJcbiIsCi0JCQkJCUVGWF9PV09SRF9WQUwobWRfc3RhdCkpOworCQkJCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsCisJCQkJCSAgImVycm9yIGZyb20gR01JSSBhY2Nlc3MgIgorCQkJCQkgIEVGWF9PV09SRF9GTVQiXG4iLAorCQkJCQkgIEVGWF9PV09SRF9WQUwobWRfc3RhdCkpOwogCQkJCXJldHVybiAtRUlPOwogCQkJfQogCQkJcmV0dXJuIDA7CiAJCX0KIAkJdWRlbGF5KDEwKTsKIAl9Ci0JRUZYX0VSUihlZngsICJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgR01JSVxuIik7CisJbmV0aWZfZXJyKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwgInRpbWVkIG91dCB3YWl0aW5nIGZvciBHTUlJXG4iKTsKIAlyZXR1cm4gLUVUSU1FRE9VVDsKIH0KIApAQCAtNzM2LDcgKzc0Niw4IEBACiAJZWZ4X293b3JkX3QgcmVnOwogCWludCByYzsKIAotCUVGWF9SRUdEVU1QKGVmeCwgIndyaXRpbmcgTURJTyAlZCByZWdpc3RlciAlZC4lZCB3aXRoIDB4JTA0eFxuIiwKKwluZXRpZl92ZGJnKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJICAgIndyaXRpbmcgTURJTyAlZCByZWdpc3RlciAlZC4lZCB3aXRoIDB4JTA0eFxuIiwKIAkJICAgIHBydGFkLCBkZXZhZCwgYWRkciwgdmFsdWUpOwogCiAJbXV0ZXhfbG9jaygmZWZ4LT5tZGlvX2xvY2spOwpAQCAtODEwLDggKzgyMSw5IEBACiAJaWYgKHJjID09IDApIHsKIAkJZWZ4X3JlYWRvKGVmeCwgJnJlZywgRlJfQUJfTURfUlhEKTsKIAkJcmMgPSBFRlhfT1dPUkRfRklFTEQocmVnLCBGUkZfQUJfTURfUlhEKTsKLQkJRUZYX1JFR0RVTVAoZWZ4LCAicmVhZCBmcm9tIE1ESU8gJWQgcmVnaXN0ZXIgJWQuJWQsIGdvdCAlMDR4XG4iLAotCQkJICAgIHBydGFkLCBkZXZhZCwgYWRkciwgcmMpOworCQluZXRpZl92ZGJnKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJCSAgICJyZWFkIGZyb20gTURJTyAlZCByZWdpc3RlciAlZC4lZCwgZ290ICUwNHhcbiIsCisJCQkgICBwcnRhZCwgZGV2YWQsIGFkZHIsIHJjKTsKIAl9IGVsc2UgewogCQkvKiBBYm9ydCB0aGUgcmVhZCBvcGVyYXRpb24gKi8KIAkJRUZYX1BPUFVMQVRFX09XT1JEXzIocmVnLApAQCAtODE5LDggKzgzMSw5IEBACiAJCQkJICAgICBGUkZfQUJfTURfR0MsIDEpOwogCQllZnhfd3JpdGVvKGVmeCwgJnJlZywgRlJfQUJfTURfQ1MpOwogCi0JCUVGWF9MT0coZWZ4LCAicmVhZCBmcm9tIE1ESU8gJWQgcmVnaXN0ZXIgJWQuJWQsIGdvdCBlcnJvciAlZFxuIiwKLQkJCXBydGFkLCBkZXZhZCwgYWRkciwgcmMpOworCQluZXRpZl9kYmcoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LAorCQkJICAicmVhZCBmcm9tIE1ESU8gJWQgcmVnaXN0ZXIgJWQuJWQsIGdvdCBlcnJvciAlZFxuIiwKKwkJCSAgcHJ0YWQsIGRldmFkLCBhZGRyLCByYyk7CiAJfQogCiBvdXQ6CkBAIC04NzEsNyArODg0LDggQEAKIAogCWZhbGNvbl9jbG9ja19tYWMoZWZ4KTsKIAotCUVGWF9MT0coZWZ4LCAic2VsZWN0ZWQgJWNNQUNcbiIsIEVGWF9JUzEwRyhlZngpID8gJ1gnIDogJ0cnKTsKKwluZXRpZl9kYmcoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LCAic2VsZWN0ZWQgJWNNQUNcbiIsCisJCSAgRUZYX0lTMTBHKGVmeCkgPyAnWCcgOiAnRycpOwogCS8qIE5vdCBhbGwgbWFjcyBzdXBwb3J0IGEgbWFjLWxldmVsIGxpbmsgc3RhdGUgKi8KIAllZngtPnhtYWNfcG9sbF9yZXF1aXJlZCA9IGZhbHNlOwogCWZhbGNvbl9yZXNldF9tYWNzKGVmeCk7CkBAIC04OTUsOCArOTA5LDggQEAKIAkJZWZ4LT5waHlfb3AgPSAmZmFsY29uX3F0MjAyeF9waHlfb3BzOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlFRlhfRVJSKGVmeCwgIlVua25vd24gUEhZIHR5cGUgJWRcbiIsCi0JCQllZngtPnBoeV90eXBlKTsKKwkJbmV0aWZfZXJyKGVmeCwgcHJvYmUsIGVmeC0+bmV0X2RldiwgIlVua25vd24gUEhZIHR5cGUgJWRcbiIsCisJCQkgIGVmeC0+cGh5X3R5cGUpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTkyNCwxMCArOTM4LDExIEBACiAJCQkJICBGQUxDT05fTUFDX1NUQVRTX1NJWkUpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwotCUVGWF9MT0coZWZ4LCAic3RhdHMgYnVmZmVyIGF0ICVsbHggKHZpcnQgJXAgcGh5cyAlbGx4KVxuIiwKLQkJKHU2NCllZngtPnN0YXRzX2J1ZmZlci5kbWFfYWRkciwKLQkJZWZ4LT5zdGF0c19idWZmZXIuYWRkciwKLQkJKHU2NCl2aXJ0X3RvX3BoeXMoZWZ4LT5zdGF0c19idWZmZXIuYWRkcikpOworCW5ldGlmX2RiZyhlZngsIHByb2JlLCBlZngtPm5ldF9kZXYsCisJCSAgInN0YXRzIGJ1ZmZlciBhdCAlbGx4ICh2aXJ0ICVwIHBoeXMgJWxseClcbiIsCisJCSAgKHU2NCllZngtPnN0YXRzX2J1ZmZlci5kbWFfYWRkciwKKwkJICBlZngtPnN0YXRzX2J1ZmZlci5hZGRyLAorCQkgICh1NjQpdmlydF90b19waHlzKGVmeC0+c3RhdHNfYnVmZmVyLmFkZHIpKTsKIAogCXJldHVybiAwOwogfQpAQCAtOTY3LDggKzk4Miw4IEBACiAJcmMgPSBmYWxjb25fc3BpX3JlYWQoZWZ4LCBzcGksIDAsIEZBTENPTl9OVkNPTkZJR19FTkQsIE5VTEwsIHJlZ2lvbik7CiAJbXV0ZXhfdW5sb2NrKCZlZngtPnNwaV9sb2NrKTsKIAlpZiAocmMpIHsKLQkJRUZYX0VSUihlZngsICJGYWlsZWQgdG8gcmVhZCAlc1xuIiwKLQkJCWVmeC0+c3BpX2ZsYXNoID8gImZsYXNoIiA6ICJFRVBST00iKTsKKwkJbmV0aWZfZXJyKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwgIkZhaWxlZCB0byByZWFkICVzXG4iLAorCQkJICBlZngtPnNwaV9mbGFzaCA/ICJmbGFzaCIgOiAiRUVQUk9NIik7CiAJCXJjID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQpAQCAtOTc4LDExICs5OTMsMTMgQEAKIAogCXJjID0gLUVJTlZBTDsKIAlpZiAobWFnaWNfbnVtICE9IEZBTENPTl9OVkNPTkZJR19CT0FSRF9NQUdJQ19OVU0pIHsKLQkJRUZYX0VSUihlZngsICJOVlJBTSBiYWQgbWFnaWMgMHgleFxuIiwgbWFnaWNfbnVtKTsKKwkJbmV0aWZfZXJyKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJCSAgIk5WUkFNIGJhZCBtYWdpYyAweCV4XG4iLCBtYWdpY19udW0pOwogCQlnb3RvIG91dDsKIAl9CiAJaWYgKHN0cnVjdF92ZXIgPCAyKSB7Ci0JCUVGWF9FUlIoZWZ4LCAiTlZSQU0gaGFzIGFuY2llbnQgdmVyc2lvbiAweCV4XG4iLCBzdHJ1Y3RfdmVyKTsKKwkJbmV0aWZfZXJyKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJCSAgIk5WUkFNIGhhcyBhbmNpZW50IHZlcnNpb24gMHgleFxuIiwgc3RydWN0X3Zlcik7CiAJCWdvdG8gb3V0OwogCX0gZWxzZSBpZiAoc3RydWN0X3ZlciA8IDQpIHsKIAkJd29yZCA9ICZudmNvbmZpZy0+Ym9hcmRfbWFnaWNfbnVtOwpAQCAtOTk1LDcgKzEwMTIsOCBAQAogCQljc3VtICs9IGxlMTZfdG9fY3B1KCp3b3JkKTsKIAogCWlmICh+Y3N1bSAmIDB4ZmZmZikgewotCQlFRlhfRVJSKGVmeCwgIk5WUkFNIGhhcyBpbmNvcnJlY3QgY2hlY2tzdW1cbiIpOworCQluZXRpZl9lcnIoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LAorCQkJICAiTlZSQU0gaGFzIGluY29ycmVjdCBjaGVja3N1bVxuIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTA3MywyMiArMTA5MSwyNSBAQAogCWVmeF9vd29yZF90IGdsYl9jdGxfcmVnX2tlcjsKIAlpbnQgcmM7CiAKLQlFRlhfTE9HKGVmeCwgInBlcmZvcm1pbmcgJXMgaGFyZHdhcmUgcmVzZXRcbiIsIFJFU0VUX1RZUEUobWV0aG9kKSk7CisJbmV0aWZfZGJnKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwgInBlcmZvcm1pbmcgJXMgaGFyZHdhcmUgcmVzZXRcbiIsCisJCSAgUkVTRVRfVFlQRShtZXRob2QpKTsKIAogCS8qIEluaXRpYXRlIGRldmljZSByZXNldCAqLwogCWlmIChtZXRob2QgPT0gUkVTRVRfVFlQRV9XT1JMRCkgewogCQlyYyA9IHBjaV9zYXZlX3N0YXRlKGVmeC0+cGNpX2Rldik7CiAJCWlmIChyYykgewotCQkJRUZYX0VSUihlZngsICJmYWlsZWQgdG8gYmFja3VwIFBDSSBzdGF0ZSBvZiBwcmltYXJ5ICIKLQkJCQkiZnVuY3Rpb24gcHJpb3IgdG8gaGFyZHdhcmUgcmVzZXRcbiIpOworCQkJbmV0aWZfZXJyKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsCisJCQkJICAiZmFpbGVkIHRvIGJhY2t1cCBQQ0kgc3RhdGUgb2YgcHJpbWFyeSAiCisJCQkJICAiZnVuY3Rpb24gcHJpb3IgdG8gaGFyZHdhcmUgcmVzZXRcbiIpOwogCQkJZ290byBmYWlsMTsKIAkJfQogCQlpZiAoZWZ4X25pY19pc19kdWFsX2Z1bmMoZWZ4KSkgewogCQkJcmMgPSBwY2lfc2F2ZV9zdGF0ZShuaWNfZGF0YS0+cGNpX2RldjIpOwogCQkJaWYgKHJjKSB7Ci0JCQkJRUZYX0VSUihlZngsICJmYWlsZWQgdG8gYmFja3VwIFBDSSBzdGF0ZSBvZiAiCi0JCQkJCSJzZWNvbmRhcnkgZnVuY3Rpb24gcHJpb3IgdG8gIgotCQkJCQkiaGFyZHdhcmUgcmVzZXRcbiIpOworCQkJCW5ldGlmX2VycihlZngsIGRydiwgZWZ4LT5uZXRfZGV2LAorCQkJCQkgICJmYWlsZWQgdG8gYmFja3VwIFBDSSBzdGF0ZSBvZiAiCisJCQkJCSAgInNlY29uZGFyeSBmdW5jdGlvbiBwcmlvciB0byAiCisJCQkJCSAgImhhcmR3YXJlIHJlc2V0XG4iKTsKIAkJCQlnb3RvIGZhaWwyOwogCQkJfQogCQl9CkBAIC0xMTEzLDcgKzExMzQsNyBAQAogCX0KIAllZnhfd3JpdGVvKGVmeCwgJmdsYl9jdGxfcmVnX2tlciwgRlJfQUJfR0xCX0NUTCk7CiAKLQlFRlhfTE9HKGVmeCwgIndhaXRpbmcgZm9yIGhhcmR3YXJlIHJlc2V0XG4iKTsKKwluZXRpZl9kYmcoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LCAid2FpdGluZyBmb3IgaGFyZHdhcmUgcmVzZXRcbiIpOwogCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKEhaIC8gMjApOwogCiAJLyogUmVzdG9yZSBQQ0kgY29uZmlndXJhdGlvbiBpZiBuZWVkZWQgKi8KQEAgLTExMjEsMjggKzExNDIsMzIgQEAKIAkJaWYgKGVmeF9uaWNfaXNfZHVhbF9mdW5jKGVmeCkpIHsKIAkJCXJjID0gcGNpX3Jlc3RvcmVfc3RhdGUobmljX2RhdGEtPnBjaV9kZXYyKTsKIAkJCWlmIChyYykgewotCQkJCUVGWF9FUlIoZWZ4LCAiZmFpbGVkIHRvIHJlc3RvcmUgUENJIGNvbmZpZyBmb3IgIgotCQkJCQkidGhlIHNlY29uZGFyeSBmdW5jdGlvblxuIik7CisJCQkJbmV0aWZfZXJyKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsCisJCQkJCSAgImZhaWxlZCB0byByZXN0b3JlIFBDSSBjb25maWcgZm9yICIKKwkJCQkJICAidGhlIHNlY29uZGFyeSBmdW5jdGlvblxuIik7CiAJCQkJZ290byBmYWlsMzsKIAkJCX0KIAkJfQogCQlyYyA9IHBjaV9yZXN0b3JlX3N0YXRlKGVmeC0+cGNpX2Rldik7CiAJCWlmIChyYykgewotCQkJRUZYX0VSUihlZngsICJmYWlsZWQgdG8gcmVzdG9yZSBQQ0kgY29uZmlnIGZvciB0aGUgIgotCQkJCSJwcmltYXJ5IGZ1bmN0aW9uXG4iKTsKKwkJCW5ldGlmX2VycihlZngsIGRydiwgZWZ4LT5uZXRfZGV2LAorCQkJCSAgImZhaWxlZCB0byByZXN0b3JlIFBDSSBjb25maWcgZm9yIHRoZSAiCisJCQkJICAicHJpbWFyeSBmdW5jdGlvblxuIik7CiAJCQlnb3RvIGZhaWw0OwogCQl9Ci0JCUVGWF9MT0coZWZ4LCAic3VjY2Vzc2Z1bGx5IHJlc3RvcmVkIFBDSSBjb25maWdcbiIpOworCQluZXRpZl9kYmcoZWZ4LCBkcnYsIGVmeC0+bmV0X2RldiwKKwkJCSAgInN1Y2Nlc3NmdWxseSByZXN0b3JlZCBQQ0kgY29uZmlnXG4iKTsKIAl9CiAKIAkvKiBBc3NlcnQgdGhhdCByZXNldCBjb21wbGV0ZSAqLwogCWVmeF9yZWFkbyhlZngsICZnbGJfY3RsX3JlZ19rZXIsIEZSX0FCX0dMQl9DVEwpOwogCWlmIChFRlhfT1dPUkRfRklFTEQoZ2xiX2N0bF9yZWdfa2VyLCBGUkZfQUJfU1dSU1QpICE9IDApIHsKIAkJcmMgPSAtRVRJTUVET1VUOwotCQlFRlhfRVJSKGVmeCwgInRpbWVkIG91dCB3YWl0aW5nIGZvciBoYXJkd2FyZSByZXNldFxuIik7CisJCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsCisJCQkgICJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgaGFyZHdhcmUgcmVzZXRcbiIpOwogCQlnb3RvIGZhaWw1OwogCX0KLQlFRlhfTE9HKGVmeCwgImhhcmR3YXJlIHJlc2V0IGNvbXBsZXRlXG4iKTsKKwluZXRpZl9kYmcoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LCAiaGFyZHdhcmUgcmVzZXQgY29tcGxldGVcbiIpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTExNjUsOCArMTE5MCw5IEBACiAKIAlyYyA9IGZhbGNvbl9ib2FyZChlZngpLT50eXBlLT5tb25pdG9yKGVmeCk7CiAJaWYgKHJjKSB7Ci0JCUVGWF9FUlIoZWZ4LCAiQm9hcmQgc2Vuc29yICVzOyBzaHV0dGluZyBkb3duIFBIWVxuIiwKLQkJCShyYyA9PSAtRVJBTkdFKSA/ICJyZXBvcnRlZCBmYXVsdCIgOiAiZmFpbGVkIik7CisJCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsCisJCQkgICJCb2FyZCBzZW5zb3IgJXM7IHNodXR0aW5nIGRvd24gUEhZXG4iLAorCQkJICAocmMgPT0gLUVSQU5HRSkgPyAicmVwb3J0ZWQgZmF1bHQiIDogImZhaWxlZCIpOwogCQllZngtPnBoeV9tb2RlIHw9IFBIWV9NT0RFX0xPV19QT1dFUjsKIAkJcmMgPSBfX2VmeF9yZWNvbmZpZ3VyZV9wb3J0KGVmeCk7CiAJCVdBUk5fT04ocmMpOwpAQCAtMTIxNyw3ICsxMjQzLDggQEAKIAkvKiBXYWl0IGZvciBTUkFNIHJlc2V0IHRvIGNvbXBsZXRlICovCiAJY291bnQgPSAwOwogCWRvIHsKLQkJRUZYX0xPRyhlZngsICJ3YWl0aW5nIGZvciBTUkFNIHJlc2V0IChhdHRlbXB0ICVkKS4uLlxuIiwgY291bnQpOworCQluZXRpZl9kYmcoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LAorCQkJICAid2FpdGluZyBmb3IgU1JBTSByZXNldCAoYXR0ZW1wdCAlZCkuLi5cbiIsIGNvdW50KTsKIAogCQkvKiBTUkFNIHJlc2V0IGlzIHNsb3c7IGV4cGVjdCBhcm91bmQgMTZtcyAqLwogCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShIWiAvIDUwKTsKQEAgLTEyMjUsMTMgKzEyNTIsMTQgQEAKIAkJLyogQ2hlY2sgZm9yIHJlc2V0IGNvbXBsZXRlICovCiAJCWVmeF9yZWFkbyhlZngsICZzcm1fY2ZnX3JlZ19rZXIsIEZSX0FaX1NSTV9DRkcpOwogCQlpZiAoIUVGWF9PV09SRF9GSUVMRChzcm1fY2ZnX3JlZ19rZXIsIEZSRl9BWl9TUk1fSU5JVF9FTikpIHsKLQkJCUVGWF9MT0coZWZ4LCAiU1JBTSByZXNldCBjb21wbGV0ZVxuIik7CisJCQluZXRpZl9kYmcoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LAorCQkJCSAgIlNSQU0gcmVzZXQgY29tcGxldGVcbiIpOwogCiAJCQlyZXR1cm4gMDsKIAkJfQogCX0gd2hpbGUgKCsrY291bnQgPCAyMCk7CS8qIHdhaXQgdXB0byAwLjQgc2VjICovCiAKLQlFRlhfRVJSKGVmeCwgInRpbWVkIG91dCB3YWl0aW5nIGZvciBTUkFNIHJlc2V0XG4iKTsKKwluZXRpZl9lcnIoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LCAidGltZWQgb3V0IHdhaXRpbmcgZm9yIFNSQU0gcmVzZXRcbiIpOwogCXJldHVybiAtRVRJTUVET1VUOwogfQogCkBAIC0xMjkwLDcgKzEzMTgsOCBAQAogCiAJcmMgPSBmYWxjb25fcmVhZF9udnJhbShlZngsIG52Y29uZmlnKTsKIAlpZiAocmMgPT0gLUVJTlZBTCkgewotCQlFRlhfRVJSKGVmeCwgIk5WUkFNIGlzIGludmFsaWQgdGhlcmVmb3JlIHVzaW5nIGRlZmF1bHRzXG4iKTsKKwkJbmV0aWZfZXJyKGVmeCwgcHJvYmUsIGVmeC0+bmV0X2RldiwKKwkJCSAgIk5WUkFNIGlzIGludmFsaWQgdGhlcmVmb3JlIHVzaW5nIGRlZmF1bHRzXG4iKTsKIAkJZWZ4LT5waHlfdHlwZSA9IFBIWV9UWVBFX05PTkU7CiAJCWVmeC0+bWRpby5wcnRhZCA9IE1ESU9fUFJUQURfTk9ORTsKIAkJYm9hcmRfcmV2ID0gMDsKQEAgLTEzMjQsNyArMTM1Myw4IEBACiAJLyogUmVhZCB0aGUgTUFDIGFkZHJlc3NlcyAqLwogCW1lbWNweShlZngtPm1hY19hZGRyZXNzLCBudmNvbmZpZy0+bWFjX2FkZHJlc3NbMF0sIEVUSF9BTEVOKTsKIAotCUVGWF9MT0coZWZ4LCAiUEhZIGlzICVkIHBoeV9pZCAlZFxuIiwgZWZ4LT5waHlfdHlwZSwgZWZ4LT5tZGlvLnBydGFkKTsKKwluZXRpZl9kYmcoZWZ4LCBwcm9iZSwgZWZ4LT5uZXRfZGV2LCAiUEhZIGlzICVkIHBoeV9pZCAlZFxuIiwKKwkJICBlZngtPnBoeV90eXBlLCBlZngtPm1kaW8ucHJ0YWQpOwogCiAJcmMgPSBmYWxjb25fcHJvYmVfYm9hcmQoZWZ4LCBib2FyZF9yZXYpOwogCWlmIChyYykKQEAgLTEzNTMsMTQgKzEzODMsMTYgQEAKIAlpZiAoRUZYX09XT1JEX0ZJRUxEKGdwaW9fY3RsLCBGUkZfQUJfR1BJTzNfUFdSVVBfVkFMVUUpKSB7CiAJCWJvb3RfZGV2ID0gKEVGWF9PV09SRF9GSUVMRChuaWNfc3RhdCwgRlJGX0FCX1NGX1BSU1QpID8KIAkJCSAgICBGRkVfQUJfU1BJX0RFVklDRV9GTEFTSCA6IEZGRV9BQl9TUElfREVWSUNFX0VFUFJPTSk7Ci0JCUVGWF9MT0coZWZ4LCAiQm9vdGVkIGZyb20gJXNcbiIsCi0JCQlib290X2RldiA9PSBGRkVfQUJfU1BJX0RFVklDRV9GTEFTSCA/ICJmbGFzaCIgOiAiRUVQUk9NIik7CisJCW5ldGlmX2RiZyhlZngsIHByb2JlLCBlZngtPm5ldF9kZXYsICJCb290ZWQgZnJvbSAlc1xuIiwKKwkJCSAgYm9vdF9kZXYgPT0gRkZFX0FCX1NQSV9ERVZJQ0VfRkxBU0ggPworCQkJICAiZmxhc2giIDogIkVFUFJPTSIpOwogCX0gZWxzZSB7CiAJCS8qIERpc2FibGUgVlBEIGFuZCBzZXQgY2xvY2sgZGl2aWRlcnMgdG8gc2FmZQogCQkgKiB2YWx1ZXMgZm9yIGluaXRpYWwgcHJvZ3JhbW1pbmcuICovCiAJCWJvb3RfZGV2ID0gLTE7Ci0JCUVGWF9MT0coZWZ4LCAiQm9vdGVkIGZyb20gaW50ZXJuYWwgQVNJQyBzZXR0aW5nczsiCi0JCQkiIHNldHRpbmcgU1BJIGNvbmZpZ1xuIik7CisJCW5ldGlmX2RiZyhlZngsIHByb2JlLCBlZngtPm5ldF9kZXYsCisJCQkgICJCb290ZWQgZnJvbSBpbnRlcm5hbCBBU0lDIHNldHRpbmdzOyIKKwkJCSAgIiBzZXR0aW5nIFNQSSBjb25maWdcbiIpOwogCQlFRlhfUE9QVUxBVEVfT1dPUkRfMyhlZV92cGRfY2ZnLCBGUkZfQUJfRUVfVlBEX0VOLCAwLAogCQkJCSAgICAgLyogMTI1IE1IeiAvIDcgfj0gMjAgTUh6ICovCiAJCQkJICAgICBGUkZfQUJfRUVfU0ZfQ0xPQ0tfRElWLCA3LApAQCAtMTM5NCw3ICsxNDI2LDggQEAKIAlyYyA9IC1FTk9ERVY7CiAKIAlpZiAoZWZ4X25pY19mcGdhX3ZlcihlZngpICE9IDApIHsKLQkJRUZYX0VSUihlZngsICJGYWxjb24gRlBHQSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJbmV0aWZfZXJyKGVmeCwgcHJvYmUsIGVmeC0+bmV0X2RldiwKKwkJCSAgIkZhbGNvbiBGUEdBIG5vdCBzdXBwb3J0ZWRcbiIpOwogCQlnb3RvIGZhaWwxOwogCX0KIApAQCAtMTQwNCwxNiArMTQzNywxOSBAQAogCQl1OCBwY2lfcmV2ID0gZWZ4LT5wY2lfZGV2LT5yZXZpc2lvbjsKIAogCQlpZiAoKHBjaV9yZXYgPT0gMHhmZikgfHwgKHBjaV9yZXYgPT0gMCkpIHsKLQkJCUVGWF9FUlIoZWZ4LCAiRmFsY29uIHJldiBBMCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCW5ldGlmX2VycihlZngsIHByb2JlLCBlZngtPm5ldF9kZXYsCisJCQkJICAiRmFsY29uIHJldiBBMCBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJCWdvdG8gZmFpbDE7CiAJCX0KIAkJZWZ4X3JlYWRvKGVmeCwgJm5pY19zdGF0LCBGUl9BQl9OSUNfU1RBVCk7CiAJCWlmIChFRlhfT1dPUkRfRklFTEQobmljX3N0YXQsIEZSRl9BQl9TVFJBUF8xMEcpID09IDApIHsKLQkJCUVGWF9FUlIoZWZ4LCAiRmFsY29uIHJldiBBMSAxRyBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCW5ldGlmX2VycihlZngsIHByb2JlLCBlZngtPm5ldF9kZXYsCisJCQkJICAiRmFsY29uIHJldiBBMSAxRyBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJCWdvdG8gZmFpbDE7CiAJCX0KIAkJaWYgKEVGWF9PV09SRF9GSUVMRChuaWNfc3RhdCwgRlJGX0FBX1NUUkFQX1BDSUUpID09IDApIHsKLQkJCUVGWF9FUlIoZWZ4LCAiRmFsY29uIHJldiBBMSBQQ0ktWCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCW5ldGlmX2VycihlZngsIHByb2JlLCBlZngtPm5ldF9kZXYsCisJCQkJICAiRmFsY29uIHJldiBBMSBQQ0ktWCBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJCWdvdG8gZmFpbDE7CiAJCX0KIApAQCAtMTQyNyw3ICsxNDYzLDggQEAKIAkJCX0KIAkJfQogCQlpZiAoIW5pY19kYXRhLT5wY2lfZGV2MikgewotCQkJRUZYX0VSUihlZngsICJmYWlsZWQgdG8gZmluZCBzZWNvbmRhcnkgZnVuY3Rpb25cbiIpOworCQkJbmV0aWZfZXJyKGVmeCwgcHJvYmUsIGVmeC0+bmV0X2RldiwKKwkJCQkgICJmYWlsZWQgdG8gZmluZCBzZWNvbmRhcnkgZnVuY3Rpb25cbiIpOwogCQkJcmMgPSAtRU5PREVWOwogCQkJZ290byBmYWlsMjsKIAkJfQpAQCAtMTQzNiw3ICsxNDczLDcgQEAKIAkvKiBOb3cgd2UgY2FuIHJlc2V0IHRoZSBOSUMgKi8KIAlyYyA9IGZhbGNvbl9yZXNldF9odyhlZngsIFJFU0VUX1RZUEVfQUxMKTsKIAlpZiAocmMpIHsKLQkJRUZYX0VSUihlZngsICJmYWlsZWQgdG8gcmVzZXQgTklDXG4iKTsKKwkJbmV0aWZfZXJyKGVmeCwgcHJvYmUsIGVmeC0+bmV0X2RldiwgImZhaWxlZCB0byByZXNldCBOSUNcbiIpOwogCQlnb3RvIGZhaWwzOwogCX0KIApAQCAtMTQ0Niw5ICsxNDgzLDExIEBACiAJCWdvdG8gZmFpbDQ7CiAJQlVHX09OKGVmeC0+aXJxX3N0YXR1cy5kbWFfYWRkciAmIDB4MGYpOwogCi0JRUZYX0xPRyhlZngsICJJTlRfS0VSIGF0ICVsbHggKHZpcnQgJXAgcGh5cyAlbGx4KVxuIiwKLQkJKHU2NCllZngtPmlycV9zdGF0dXMuZG1hX2FkZHIsCi0JCWVmeC0+aXJxX3N0YXR1cy5hZGRyLCAodTY0KXZpcnRfdG9fcGh5cyhlZngtPmlycV9zdGF0dXMuYWRkcikpOworCW5ldGlmX2RiZyhlZngsIHByb2JlLCBlZngtPm5ldF9kZXYsCisJCSAgIklOVF9LRVIgYXQgJWxseCAodmlydCAlcCBwaHlzICVsbHgpXG4iLAorCQkgICh1NjQpZWZ4LT5pcnFfc3RhdHVzLmRtYV9hZGRyLAorCQkgIGVmeC0+aXJxX3N0YXR1cy5hZGRyLAorCQkgICh1NjQpdmlydF90b19waHlzKGVmeC0+aXJxX3N0YXR1cy5hZGRyKSk7CiAKIAlmYWxjb25fcHJvYmVfc3BpX2RldmljZXMoZWZ4KTsKIApAQCAtMTQ3Miw3ICsxNTExLDggQEAKIAogCXJjID0gZmFsY29uX2JvYXJkKGVmeCktPnR5cGUtPmluaXQoZWZ4KTsKIAlpZiAocmMpIHsKLQkJRUZYX0VSUihlZngsICJmYWlsZWQgdG8gaW5pdGlhbGlzZSBib2FyZFxuIik7CisJCW5ldGlmX2VycihlZngsIHByb2JlLCBlZngtPm5ldF9kZXYsCisJCQkgICJmYWlsZWQgdG8gaW5pdGlhbGlzZSBib2FyZFxuIik7CiAJCWdvdG8gZmFpbDY7CiAJfQogCkBAIC0xNTQyLDYgKzE1ODIsMTMgQEAKIAkJRUZYX1NFVF9PV09SRF9GSUVMRChyZWcsIEZSRl9CWl9SWF9YT05fVFhfVEgsIGN0cmxfeG9uX3Rocik7CiAJCUVGWF9TRVRfT1dPUkRfRklFTEQocmVnLCBGUkZfQlpfUlhfWE9GRl9UWF9USCwgY3RybF94b2ZmX3Rocik7CiAJCUVGWF9TRVRfT1dPUkRfRklFTEQocmVnLCBGUkZfQlpfUlhfSU5HUl9FTiwgMSk7CisKKwkJLyogRW5hYmxlIGhhc2ggaW5zZXJ0aW9uLiBUaGlzIGlzIGJyb2tlbiBmb3IgdGhlCisJCSAqICdGYWxjb24nIGhhc2ggc28gYWxzbyBzZWxlY3QgVG9lcGxpdHogVENQL0lQdjQgYW5kCisJCSAqIElQdjQgaGFzaGVzLiAqLworCQlFRlhfU0VUX09XT1JEX0ZJRUxEKHJlZywgRlJGX0JaX1JYX0hBU0hfSU5TUlRfSERSLCAxKTsKKwkJRUZYX1NFVF9PV09SRF9GSUVMRChyZWcsIEZSRl9CWl9SWF9IQVNIX0FMRywgMSk7CisJCUVGWF9TRVRfT1dPUkRfRklFTEQocmVnLCBGUkZfQlpfUlhfSVBfSEFTSCwgMSk7CiAJfQogCS8qIEFsd2F5cyBlbmFibGUgWE9GRiBzaWduYWwgZnJvbSBSWCBGSUZPLiAgV2UgZW5hYmxlCiAJICogb3IgZGlzYWJsZSB0cmFuc21pc3Npb24gb2YgcGF1c2UgZnJhbWVzIGF0IHRoZSBNQUMuICovCkBAIC0xNjE1LDggKzE2NjIsMTIgQEAKIAogCWZhbGNvbl9pbml0X3J4X2NmZyhlZngpOwogCi0JLyogU2V0IGRlc3RpbmF0aW9uIG9mIGJvdGggVFggYW5kIFJYIEZsdXNoIGV2ZW50cyAqLwogCWlmIChlZnhfbmljX3JldihlZngpID49IEVGWF9SRVZfRkFMQ09OX0IwKSB7CisJCS8qIFNldCBoYXNoIGtleSBmb3IgSVB2NCAqLworCQltZW1jcHkoJnRlbXAsIGVmeC0+cnhfaGFzaF9rZXksIHNpemVvZih0ZW1wKSk7CisJCWVmeF93cml0ZW8oZWZ4LCAmdGVtcCwgRlJfQlpfUlhfUlNTX1RLRVkpOworCisJCS8qIFNldCBkZXN0aW5hdGlvbiBvZiBib3RoIFRYIGFuZCBSWCBGbHVzaCBldmVudHMgKi8KIAkJRUZYX1BPUFVMQVRFX09XT1JEXzEodGVtcCwgRlJGX0JaX0ZMU19FVlFfSUQsIDApOwogCQllZnhfd3JpdGVvKGVmeCwgJnRlbXAsIEZSX0JaX0RQX0NUUkwpOwogCX0KQEAgLTE4MjEsNiArMTg3Miw3IEBACiAJLmV2cV9wdHJfdGJsX2Jhc2UgPSBGUl9CWl9FVlFfUFRSX1RCTCwKIAkuZXZxX3JwdHJfdGJsX2Jhc2UgPSBGUl9CWl9FVlFfUlBUUiwKIAkubWF4X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKEZTRl9BWl9UWF9LRVJfQlVGX0FERFJfV0lEVEgpLAorCS5yeF9idWZmZXJfaGFzaF9zaXplID0gMHgxMCwKIAkucnhfYnVmZmVyX3BhZGRpbmcgPSAwLAogCS5tYXhfaW50ZXJydXB0X21vZGUgPSBFRlhfSU5UX01PREVfTVNJWCwKIAkucGh5c19hZGRyX2NoYW5uZWxzID0gMzIsIC8qIEhhcmR3YXJlIGxpbWl0IGlzIDY0LCBidXQgdGhlIGxlZ2FjeQpAQCAtMTgyOCw3ICsxODgwLDcgQEAKIAkJCQkgICAqIGNoYW5uZWxzICovCiAJLnR4X2RjX2Jhc2UgPSAweDEzMDAwMCwKIAkucnhfZGNfYmFzZSA9IDB4MTAwMDAwLAotCS5vZmZsb2FkX2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNLAorCS5vZmZsb2FkX2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWEhBU0gsCiAJLnJlc2V0X3dvcmxkX2ZsYWdzID0gRVRIX1JFU0VUX0lSUSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25fYm9hcmRzLmMgYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uX2JvYXJkcy5jCmluZGV4IGM3YTkzM2EuLjNkOTUwYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25fYm9hcmRzLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl9ib2FyZHMuYwpAQCAtMTA2LDEyICsxMDYsMTcgQEAKIAlhbGFybXMxICY9IG1hc2s7CiAJYWxhcm1zMiAmPSBtYXNrID4+IDg7CiAJaWYgKGFsYXJtczEgfHwgYWxhcm1zMikgewotCQlFRlhfRVJSKGVmeCwKLQkJCSJMTTg3IGRldGVjdGVkIGEgaGFyZHdhcmUgZmFpbHVyZSAoc3RhdHVzICUwMng6JTAyeCkiCi0JCQkiJXMlc1xuIiwKLQkJCWFsYXJtczEsIGFsYXJtczIsCi0JCQkoYWxhcm1zMSAmIExNODdfQUxBUk1fVEVNUF9JTlQpID8gIiBJTlRFUk5BTCIgOiAiIiwKLQkJCShhbGFybXMxICYgTE04N19BTEFSTV9URU1QX0VYVDEpID8gIiBFWFRFUk5BTCIgOiAiIik7CisJCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsCisJCQkgICJMTTg3IGRldGVjdGVkIGEgaGFyZHdhcmUgZmFpbHVyZSAoc3RhdHVzICUwMng6JTAyeCkiCisJCQkgICIlcyVzJXNcbiIsCisJCQkgIGFsYXJtczEsIGFsYXJtczIsCisJCQkgIChhbGFybXMxICYgTE04N19BTEFSTV9URU1QX0lOVCkgPworCQkJICAiOyBib2FyZCBpcyBvdmVyaGVhdGluZyIgOiAiIiwKKwkJCSAgKGFsYXJtczEgJiBMTTg3X0FMQVJNX1RFTVBfRVhUMSkgPworCQkJICAiOyBjb250cm9sbGVyIGlzIG92ZXJoZWF0aW5nIiA6ICIiLAorCQkJICAoYWxhcm1zMSAmIH4oTE04N19BTEFSTV9URU1QX0lOVCB8IExNODdfQUxBUk1fVEVNUF9FWFQxKQorCQkJICAgfHwgYWxhcm1zMikgPworCQkJICAiOyBlbGVjdHJpY2FsIGZhdWx0IiA6ICIiKTsKIAkJcmV0dXJuIC1FUkFOR0U7CiAJfQogCkBAIC0yNDMsNyArMjQ4LDcgQEAKIAkJICAgICAgICgwIDw8IFAwX0VOXzNWM1hfTEJOKSB8ICgwIDw8IFAwX0VOXzVWX0xCTikgfAogCQkgICAgICAgKDAgPDwgUDBfRU5fMVYwWF9MQk4pKTsKIAlpZiAocmMgIT0gb3V0KSB7Ci0JCUVGWF9JTkZPKGVmeCwgInBvd2VyLWN5Y2xpbmcgUEhZXG4iKTsKKwkJbmV0aWZfaW5mbyhlZngsIGh3LCBlZngtPm5ldF9kZXYsICJwb3dlci1jeWNsaW5nIFBIWVxuIik7CiAJCXJjID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShpb2V4cF9jbGllbnQsIFAwX09VVCwgb3V0KTsKIAkJaWYgKHJjKQogCQkJZ290byBmYWlsX29uOwpAQCAtMjY5LDcgKzI3NCw4IEBACiAJCWlmIChyYykKIAkJCWdvdG8gZmFpbF9vbjsKIAotCQlFRlhfSU5GTyhlZngsICJ3YWl0aW5nIGZvciBEU1AgYm9vdCAoYXR0ZW1wdCAlZCkuLi5cbiIsIGkpOworCQluZXRpZl9pbmZvKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJCSAgICJ3YWl0aW5nIGZvciBEU1AgYm9vdCAoYXR0ZW1wdCAlZCkuLi5cbiIsIGkpOwogCiAJCS8qIEluIGZsYXNoIGNvbmZpZyBtb2RlLCBEU1AgZG9lcyBub3QgdHVybiBvbiBBRkUsIHNvCiAJCSAqIGp1c3Qgd2FpdCAxIHNlY29uZC4KQEAgLTI5MSw3ICsyOTcsNyBAQAogCQl9CiAJfQogCi0JRUZYX0lORk8oZWZ4LCAidGltZWQgb3V0IHdhaXRpbmcgZm9yIERTUCBib290XG4iKTsKKwluZXRpZl9pbmZvKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwgInRpbWVkIG91dCB3YWl0aW5nIGZvciBEU1AgYm9vdFxuIik7CiAJcmMgPSAtRVRJTUVET1VUOwogZmFpbF9vbjoKIAlzZmU0MDAxX3Bvd2Vyb2ZmKGVmeCk7CkBAIC0zNzcsNyArMzgzLDcgQEAKIHsKIAlzdHJ1Y3QgZmFsY29uX2JvYXJkICpib2FyZCA9IGZhbGNvbl9ib2FyZChlZngpOwogCi0JRUZYX0lORk8oZWZ4LCAiJXNcbiIsIF9fZnVuY19fKTsKKwluZXRpZl9pbmZvKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsICIlc1xuIiwgX19mdW5jX18pOwogCiAJZGV2aWNlX3JlbW92ZV9maWxlKCZlZngtPnBjaV9kZXYtPmRldiwgJmRldl9hdHRyX3BoeV9mbGFzaF9jZmcpOwogCXNmZTQwMDFfcG93ZXJvZmYoZWZ4KTsKQEAgLTQ2MSw3ICs0NjcsNyBAQAogCWlmIChyYykKIAkJZ290byBmYWlsX29uOwogCi0JRUZYX0lORk8oZWZ4LCAiUEhZIGlzIHBvd2VyZWQgb25cbiIpOworCW5ldGlmX2luZm8oZWZ4LCBodywgZWZ4LT5uZXRfZGV2LCAiUEhZIGlzIHBvd2VyZWQgb25cbiIpOwogCXJldHVybiAwOwogCiBmYWlsX29uOgpAQCAtNDkzLDcgKzQ5OSw3IEBACiAKIHN0YXRpYyB2b2lkIHNmbjQxMTF0X2Zpbmkoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKLQlFRlhfSU5GTyhlZngsICIlc1xuIiwgX19mdW5jX18pOworCW5ldGlmX2luZm8oZWZ4LCBkcnYsIGVmeC0+bmV0X2RldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmVmeC0+cGNpX2Rldi0+ZGV2LCAmZGV2X2F0dHJfcGh5X2ZsYXNoX2NmZyk7CiAJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGZhbGNvbl9ib2FyZChlZngpLT5od21vbl9jbGllbnQpOwpAQCAtNzQyLDEzICs3NDgsMTQgQEAKIAkJCWJvYXJkLT50eXBlID0gJmJvYXJkX3R5cGVzW2ldOwogCiAJaWYgKGJvYXJkLT50eXBlKSB7Ci0JCUVGWF9JTkZPKGVmeCwgImJvYXJkIGlzICVzIHJldiAlYyVkXG4iLAorCQluZXRpZl9pbmZvKGVmeCwgcHJvYmUsIGVmeC0+bmV0X2RldiwgImJvYXJkIGlzICVzIHJldiAlYyVkXG4iLAogCQkJIChlZngtPnBjaV9kZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gRUZYX1ZFTkRJRF9TRkMpCiAJCQkgPyBib2FyZC0+dHlwZS0+cmVmX21vZGVsIDogYm9hcmQtPnR5cGUtPmdlbl90eXBlLAogCQkJICdBJyArIGJvYXJkLT5tYWpvciwgYm9hcmQtPm1pbm9yKTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlIHsKLQkJRUZYX0VSUihlZngsICJ1bmtub3duIGJvYXJkIHR5cGUgJWRcbiIsIHR5cGVfaWQpOworCQluZXRpZl9lcnIoZWZ4LCBwcm9iZSwgZWZ4LT5uZXRfZGV2LCAidW5rbm93biBib2FyZCB0eXBlICVkXG4iLAorCQkJICB0eXBlX2lkKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl94bWFjLmMgYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uX3htYWMuYwppbmRleCBjODRhMmNlLi5iYWU2NTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZmFsY29uX3htYWMuYworKysgYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uX3htYWMuYwpAQCAtODEsNyArODEsOCBAQAogCQl9CiAJCXVkZWxheSgxMCk7CiAJfQotCUVGWF9FUlIoZWZ4LCAidGltZWQgb3V0IHdhaXRpbmcgZm9yIFhBVUkvWEdYUyByZXNldFxuIik7CisJbmV0aWZfZXJyKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJICAidGltZWQgb3V0IHdhaXRpbmcgZm9yIFhBVUkvWEdYUyByZXNldFxuIik7CiAJcmV0dXJuIC1FVElNRURPVVQ7CiB9CiAKQEAgLTI1Niw3ICsyNTcsNyBAQAogCWZhbGNvbl9zdG9wX25pY19zdGF0cyhlZngpOwogCiAJd2hpbGUgKCFtYWNfdXAgJiYgdHJpZXMpIHsKLQkJRUZYX0xPRyhlZngsICJiYXNoaW5nIHhhdWlcbiIpOworCQluZXRpZl9kYmcoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LCAiYmFzaGluZyB4YXVpXG4iKTsKIAkJZmFsY29uX3Jlc2V0X3hhdWkoZWZ4KTsKIAkJdWRlbGF5KDIwMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9pby5oIGIvZHJpdmVycy9uZXQvc2ZjL2lvLmgKaW5kZXggYjg5MTc3Yy4uODVhOTlmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2lvLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2lvLmgKQEAgLTc4LDggKzc4LDkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKIAotCUVGWF9SRUdEVU1QKGVmeCwgIndyaXRpbmcgcmVnaXN0ZXIgJXggd2l0aCAiIEVGWF9PV09SRF9GTVQgIlxuIiwgcmVnLAotCQkgICAgRUZYX09XT1JEX1ZBTCgqdmFsdWUpKTsKKwluZXRpZl92ZGJnKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJICAgIndyaXRpbmcgcmVnaXN0ZXIgJXggd2l0aCAiIEVGWF9PV09SRF9GTVQgIlxuIiwgcmVnLAorCQkgICBFRlhfT1dPUkRfVkFMKCp2YWx1ZSkpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmVmeC0+Yml1X2xvY2ssIGZsYWdzKTsKICNpZmRlZiBFRlhfVVNFX1FXT1JEX0lPCkBAIC0xMDUsOCArMTA2LDkgQEAKIAl1bnNpZ25lZCBpbnQgYWRkciA9IGluZGV4ICogc2l6ZW9mKCp2YWx1ZSk7CiAJdW5zaWduZWQgbG9uZyBmbGFncyBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CiAKLQlFRlhfUkVHRFVNUChlZngsICJ3cml0aW5nIFNSQU0gYWRkcmVzcyAleCB3aXRoICIgRUZYX1FXT1JEX0ZNVCAiXG4iLAotCQkgICAgYWRkciwgRUZYX1FXT1JEX1ZBTCgqdmFsdWUpKTsKKwluZXRpZl92ZGJnKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJICAgIndyaXRpbmcgU1JBTSBhZGRyZXNzICV4IHdpdGggIiBFRlhfUVdPUkRfRk1UICJcbiIsCisJCSAgIGFkZHIsIEVGWF9RV09SRF9WQUwoKnZhbHVlKSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZWZ4LT5iaXVfbG9jaywgZmxhZ3MpOwogI2lmZGVmIEVGWF9VU0VfUVdPUkRfSU8KQEAgLTEyOSw4ICsxMzEsOSBAQAogc3RhdGljIGlubGluZSB2b2lkIGVmeF93cml0ZWQoc3RydWN0IGVmeF9uaWMgKmVmeCwgZWZ4X2R3b3JkX3QgKnZhbHVlLAogCQkJICAgICAgdW5zaWduZWQgaW50IHJlZykKIHsKLQlFRlhfUkVHRFVNUChlZngsICJ3cml0aW5nIHBhcnRpYWwgcmVnaXN0ZXIgJXggd2l0aCAiRUZYX0RXT1JEX0ZNVCJcbiIsCi0JCSAgICByZWcsIEVGWF9EV09SRF9WQUwoKnZhbHVlKSk7CisJbmV0aWZfdmRiZyhlZngsIGh3LCBlZngtPm5ldF9kZXYsCisJCSAgICJ3cml0aW5nIHBhcnRpYWwgcmVnaXN0ZXIgJXggd2l0aCAiRUZYX0RXT1JEX0ZNVCJcbiIsCisJCSAgIHJlZywgRUZYX0RXT1JEX1ZBTCgqdmFsdWUpKTsKIAogCS8qIE5vIGxvY2sgcmVxdWlyZWQgKi8KIAlfZWZ4X3dyaXRlZChlZngsIHZhbHVlLT51MzJbMF0sIHJlZyk7CkBAIC0xNTUsOCArMTU4LDkgQEAKIAl2YWx1ZS0+dTMyWzNdID0gX2VmeF9yZWFkZChlZngsIHJlZyArIDEyKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZngtPmJpdV9sb2NrLCBmbGFncyk7CiAKLQlFRlhfUkVHRFVNUChlZngsICJyZWFkIGZyb20gcmVnaXN0ZXIgJXgsIGdvdCAiIEVGWF9PV09SRF9GTVQgIlxuIiwgcmVnLAotCQkgICAgRUZYX09XT1JEX1ZBTCgqdmFsdWUpKTsKKwluZXRpZl92ZGJnKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJICAgInJlYWQgZnJvbSByZWdpc3RlciAleCwgZ290ICIgRUZYX09XT1JEX0ZNVCAiXG4iLCByZWcsCisJCSAgIEVGWF9PV09SRF9WQUwoKnZhbHVlKSk7CiB9CiAKIC8qIFJlYWQgYW4gOC1ieXRlIFNSQU0gZW50cnkgdGhyb3VnaCBzdXBwbGllZCBtYXBwaW5nLApAQCAtMTc3LDggKzE4MSw5IEBACiAjZW5kaWYKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZngtPmJpdV9sb2NrLCBmbGFncyk7CiAKLQlFRlhfUkVHRFVNUChlZngsICJyZWFkIGZyb20gU1JBTSBhZGRyZXNzICV4LCBnb3QgIkVGWF9RV09SRF9GTVQiXG4iLAotCQkgICAgYWRkciwgRUZYX1FXT1JEX1ZBTCgqdmFsdWUpKTsKKwluZXRpZl92ZGJnKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJICAgInJlYWQgZnJvbSBTUkFNIGFkZHJlc3MgJXgsIGdvdCAiRUZYX1FXT1JEX0ZNVCJcbiIsCisJCSAgIGFkZHIsIEVGWF9RV09SRF9WQUwoKnZhbHVlKSk7CiB9CiAKIC8qIFJlYWQgZHdvcmQgZnJvbSByZWdpc3RlciB0aGF0IGFsbG93cyBwYXJ0aWFsIHdyaXRlcyAoc2ljKSAqLwpAQCAtMTg2LDggKzE5MSw5IEBACiAJCQkJdW5zaWduZWQgaW50IHJlZykKIHsKIAl2YWx1ZS0+dTMyWzBdID0gX2VmeF9yZWFkZChlZngsIHJlZyk7Ci0JRUZYX1JFR0RVTVAoZWZ4LCAicmVhZCBmcm9tIHJlZ2lzdGVyICV4LCBnb3QgIkVGWF9EV09SRF9GTVQiXG4iLAotCQkgICAgcmVnLCBFRlhfRFdPUkRfVkFMKCp2YWx1ZSkpOworCW5ldGlmX3ZkYmcoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LAorCQkgICAicmVhZCBmcm9tIHJlZ2lzdGVyICV4LCBnb3QgIkVGWF9EV09SRF9GTVQiXG4iLAorCQkgICByZWcsIEVGWF9EV09SRF9WQUwoKnZhbHVlKSk7CiB9CiAKIC8qIFdyaXRlIHRvIGEgcmVnaXN0ZXIgZm9ybWluZyBwYXJ0IG9mIGEgdGFibGUgKi8KQEAgLTIxMSw2ICsyMTcsMTMgQEAKIAllZnhfd3JpdGVkKGVmeCwgdmFsdWUsIHJlZyArIGluZGV4ICogc2l6ZW9mKGVmeF9vd29yZF90KSk7CiB9CiAKKy8qIFJlYWQgZnJvbSBhIGR3b3JkIHJlZ2lzdGVyIGZvcm1pbmcgcGFydCBvZiBhIHRhYmxlICovCitzdGF0aWMgaW5saW5lIHZvaWQgZWZ4X3JlYWRkX3RhYmxlKHN0cnVjdCBlZnhfbmljICplZngsIGVmeF9kd29yZF90ICp2YWx1ZSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJZWZ4X3JlYWRkKGVmeCwgdmFsdWUsIHJlZyArIGluZGV4ICogc2l6ZW9mKGVmeF9kd29yZF90KSk7Cit9CisKIC8qIFBhZ2UtbWFwcGVkIHJlZ2lzdGVyIGJsb2NrIHNpemUgKi8KICNkZWZpbmUgRUZYX1BBR0VfQkxPQ0tfU0laRSAweDIwMDAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL21jZGkuYyBiL2RyaXZlcnMvbmV0L3NmYy9tY2RpLmMKaW5kZXggOTNjYzNjMS4uMzkxMmI4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL21jZGkuYworKysgYi9kcml2ZXJzL25ldC9zZmMvbWNkaS5jCkBAIC0xNjgsMTEgKzE2OCwxMiBAQAogCWVycm9yID0gRUZYX0RXT1JEX0ZJRUxEKHJlZywgTUNESV9IRUFERVJfRVJST1IpOwogCiAJaWYgKGVycm9yICYmIG1jZGktPnJlc3BsZW4gPT0gMCkgewotCQlFRlhfRVJSKGVmeCwgIk1DIHJlYm9vdGVkXG4iKTsKKwkJbmV0aWZfZXJyKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwgIk1DIHJlYm9vdGVkXG4iKTsKIAkJcmMgPSBFSU87CiAJfSBlbHNlIGlmICgocmVzcHNlcSBeIG1jZGktPnNlcW5vKSAmIFNFUV9NQVNLKSB7Ci0JCUVGWF9FUlIoZWZ4LCAiTUMgcmVzcG9uc2UgbWlzbWF0Y2ggdHggc2VxIDB4JXggcnggc2VxIDB4JXhcbiIsCi0JCQlyZXNwc2VxLCBtY2RpLT5zZXFubyk7CisJCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsCisJCQkgICJNQyByZXNwb25zZSBtaXNtYXRjaCB0eCBzZXEgMHgleCByeCBzZXEgMHgleFxuIiwKKwkJCSAgcmVzcHNlcSwgbWNkaS0+c2Vxbm8pOwogCQlyYyA9IEVJTzsKIAl9IGVsc2UgaWYgKGVycm9yKSB7CiAJCWVmeF9yZWFkZChlZngsICZyZWcsIHBkdSArIDQpOwpAQCAtMzAzLDggKzMwNCw5IEBACiAJCQkvKiBUaGUgcmVxdWVzdCBoYXMgYmVlbiBjYW5jZWxsZWQgKi8KIAkJCS0tbWNkaS0+Y3JlZGl0czsKIAkJZWxzZQotCQkJRUZYX0VSUihlZngsICJNQyByZXNwb25zZSBtaXNtYXRjaCB0eCBzZXEgMHgleCByeCAiCi0JCQkJInNlcSAweCV4XG4iLCBzZXFubywgbWNkaS0+c2Vxbm8pOworCQkJbmV0aWZfZXJyKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJCQkgICJNQyByZXNwb25zZSBtaXNtYXRjaCB0eCBzZXEgMHgleCByeCAiCisJCQkJICAic2VxIDB4JXhcbiIsIHNlcW5vLCBtY2RpLT5zZXFubyk7CiAJfSBlbHNlIHsKIAkJbWNkaS0+cmVzcHJjID0gZXJybm87CiAJCW1jZGktPnJlc3BsZW4gPSBkYXRhbGVuOwpAQCAtMzUyLDggKzM1NCw5IEBACiAJCSsrbWNkaS0+Y3JlZGl0czsKIAkJc3Bpbl91bmxvY2tfYmgoJm1jZGktPmlmYWNlX2xvY2spOwogCi0JCUVGWF9FUlIoZWZ4LCAiTUMgY29tbWFuZCAweCV4IGlubGVuICVkIG1vZGUgJWQgdGltZWQgb3V0XG4iLAotCQkJY21kLCAoaW50KWlubGVuLCBtY2RpLT5tb2RlKTsKKwkJbmV0aWZfZXJyKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJCSAgIk1DIGNvbW1hbmQgMHgleCBpbmxlbiAlZCBtb2RlICVkIHRpbWVkIG91dFxuIiwKKwkJCSAgY21kLCAoaW50KWlubGVuLCBtY2RpLT5tb2RlKTsKIAl9IGVsc2UgewogCQlzaXplX3QgcmVzcGxlbjsKIApAQCAtMzc0LDExICszNzcsMTMgQEAKIAkJfSBlbHNlIGlmIChjbWQgPT0gTUNfQ01EX1JFQk9PVCAmJiByYyA9PSAtRUlPKQogCQkJOyAvKiBEb24ndCByZXNldCBpZiBNQ19DTURfUkVCT09UIHJldHVybnMgRUlPICovCiAJCWVsc2UgaWYgKHJjID09IC1FSU8gfHwgcmMgPT0gLUVJTlRSKSB7Ci0JCQlFRlhfRVJSKGVmeCwgIk1DIGZhdGFsIGVycm9yICVkXG4iLCAtcmMpOworCQkJbmV0aWZfZXJyKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwgIk1DIGZhdGFsIGVycm9yICVkXG4iLAorCQkJCSAgLXJjKTsKIAkJCWVmeF9zY2hlZHVsZV9yZXNldChlZngsIFJFU0VUX1RZUEVfTUNfRkFJTFVSRSk7CiAJCX0gZWxzZQotCQkJRUZYX0VSUihlZngsICJNQyBjb21tYW5kIDB4JXggaW5sZW4gJWQgZmFpbGVkIHJjPSVkXG4iLAotCQkJCWNtZCwgKGludClpbmxlbiwgLXJjKTsKKwkJCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsCisJCQkJICAiTUMgY29tbWFuZCAweCV4IGlubGVuICVkIGZhaWxlZCByYz0lZFxuIiwKKwkJCQkgIGNtZCwgKGludClpbmxlbiwgLXJjKTsKIAl9CiAKIAllZnhfbWNkaV9yZWxlYXNlKG1jZGkpOwpAQCAtNTM0LDggKzUzOSw5IEBACiAJRUZYX0JVR19PTl9QQVJBTk9JRChzdGF0ZSA+PSBBUlJBWV9TSVpFKHNlbnNvcl9zdGF0dXNfbmFtZXMpKTsKIAlzdGF0ZV90eHQgPSBzZW5zb3Jfc3RhdHVzX25hbWVzW3N0YXRlXTsKIAotCUVGWF9FUlIoZWZ4LCAiU2Vuc29yICVkICglcykgcmVwb3J0cyBjb25kaXRpb24gJyVzJyBmb3IgcmF3IHZhbHVlICVkXG4iLAotCQltb25pdG9yLCBuYW1lLCBzdGF0ZV90eHQsIHZhbHVlKTsKKwluZXRpZl9lcnIoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LAorCQkgICJTZW5zb3IgJWQgKCVzKSByZXBvcnRzIGNvbmRpdGlvbiAnJXMnIGZvciByYXcgdmFsdWUgJWRcbiIsCisJCSAgbW9uaXRvciwgbmFtZSwgc3RhdGVfdHh0LCB2YWx1ZSk7CiB9CiAKIC8qIENhbGxlZCBmcm9tICBmYWxjb25fcHJvY2Vzc19ldmVudHEgZm9yIE1DREkgZXZlbnRzICovCkBAIC01NDgsMTIgKzU1NCwxMyBAQAogCiAJc3dpdGNoIChjb2RlKSB7CiAJY2FzZSBNQ0RJX0VWRU5UX0NPREVfQkFEU1NFUlQ6Ci0JCUVGWF9FUlIoZWZ4LCAiTUMgd2F0Y2hkb2cgb3IgYXNzZXJ0aW9uIGZhaWx1cmUgYXQgMHgleFxuIiwgZGF0YSk7CisJCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsCisJCQkgICJNQyB3YXRjaGRvZyBvciBhc3NlcnRpb24gZmFpbHVyZSBhdCAweCV4XG4iLCBkYXRhKTsKIAkJZWZ4X21jZGlfZXZfZGVhdGgoZWZ4LCBFSU5UUik7CiAJCWJyZWFrOwogCiAJY2FzZSBNQ0RJX0VWRU5UX0NPREVfUE1OT1RJQ0U6Ci0JCUVGWF9JTkZPKGVmeCwgIk1DREkgUE0gZXZlbnQuXG4iKTsKKwkJbmV0aWZfaW5mbyhlZngsIHdvbCwgZWZ4LT5uZXRfZGV2LCAiTUNESSBQTSBldmVudC5cbiIpOwogCQlicmVhazsKIAogCWNhc2UgTUNESV9FVkVOVF9DT0RFX0NNRERPTkU6CkBAIC01NzAsMTAgKzU3NywxMSBAQAogCQllZnhfbWNkaV9zZW5zb3JfZXZlbnQoZWZ4LCBldmVudCk7CiAJCWJyZWFrOwogCWNhc2UgTUNESV9FVkVOVF9DT0RFX1NDSEVERVJSOgotCQlFRlhfSU5GTyhlZngsICJNQyBTY2hlZHVsZXIgZXJyb3IgYWRkcmVzcz0weCV4XG4iLCBkYXRhKTsKKwkJbmV0aWZfaW5mbyhlZngsIGh3LCBlZngtPm5ldF9kZXYsCisJCQkgICAiTUMgU2NoZWR1bGVyIGVycm9yIGFkZHJlc3M9MHgleFxuIiwgZGF0YSk7CiAJCWJyZWFrOwogCWNhc2UgTUNESV9FVkVOVF9DT0RFX1JFQk9PVDoKLQkJRUZYX0lORk8oZWZ4LCAiTUMgUmVib290XG4iKTsKKwkJbmV0aWZfaW5mbyhlZngsIGh3LCBlZngtPm5ldF9kZXYsICJNQyBSZWJvb3RcbiIpOwogCQllZnhfbWNkaV9ldl9kZWF0aChlZngsIEVJTyk7CiAJCWJyZWFrOwogCWNhc2UgTUNESV9FVkVOVF9DT0RFX01BQ19TVEFUU19ETUE6CkBAIC01ODEsNyArNTg5LDggQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlFRlhfRVJSKGVmeCwgIlVua25vd24gTUNESSBldmVudCAweCV4XG4iLCBjb2RlKTsKKwkJbmV0aWZfZXJyKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwgIlVua25vd24gTUNESSBldmVudCAweCV4XG4iLAorCQkJICBjb2RlKTsKIAl9CiB9CiAKQEAgLTYyNyw3ICs2MzYsNyBAQAogCXJldHVybiAwOwogCiBmYWlsOgotCUVGWF9FUlIoZWZ4LCAiJXM6IGZhaWxlZCByYz0lZFxuIiwgX19mdW5jX18sIHJjKTsKKwluZXRpZl9lcnIoZWZ4LCBwcm9iZSwgZWZ4LT5uZXRfZGV2LCAiJXM6IGZhaWxlZCByYz0lZFxuIiwgX19mdW5jX18sIHJjKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTY1Nyw3ICs2NjYsNyBAQAogCXJldHVybiAwOwogCiBmYWlsOgotCUVGWF9FUlIoZWZ4LCAiJXM6IGZhaWxlZCByYz0lZFxuIiwgX19mdW5jX18sIHJjKTsKKwluZXRpZl9lcnIoZWZ4LCBwcm9iZSwgZWZ4LT5uZXRfZGV2LCAiJXM6IGZhaWxlZCByYz0lZFxuIiwgX19mdW5jX18sIHJjKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTY5NSw3ICs3MDQsOCBAQAogCXJldHVybiAwOwogCiBmYWlsOgotCUVGWF9FUlIoZWZ4LCAiJXM6IGZhaWxlZCByYz0lZCBsZW49JWRcbiIsIF9fZnVuY19fLCByYywgKGludClvdXRsZW4pOworCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsICIlczogZmFpbGVkIHJjPSVkIGxlbj0lZFxuIiwKKwkJICBfX2Z1bmNfXywgcmMsIChpbnQpb3V0bGVuKTsKIAogCXJldHVybiByYzsKIH0KQEAgLTcyNCw3ICs3MzQsNyBAQAogCXJldHVybiAwOwogCiBmYWlsOgotCUVGWF9FUlIoZWZ4LCAiJXM6IGZhaWxlZCByYz0lZFxuIiwgX19mdW5jX18sIHJjKTsKKwluZXRpZl9lcnIoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LCAiJXM6IGZhaWxlZCByYz0lZFxuIiwgX19mdW5jX18sIHJjKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTc0OSw4ICs3NTksOCBAQAogCXJldHVybiAwOwogCiBmYWlsOgotCUVGWF9FUlIoZWZ4LCAiJXM6IGZhaWxlZCByYz0lZFxuIiwKLQkJX19mdW5jX18sIHJjKTsKKwluZXRpZl9lcnIoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LCAiJXM6IGZhaWxlZCByYz0lZFxuIiwKKwkJICBfX2Z1bmNfXywgcmMpOwogCXJldHVybiByYzsKIH0KIApAQCAtNzgxLDcgKzc5MSw3IEBACiAJcmV0dXJuIDA7CiAKIGZhaWw6Ci0JRUZYX0VSUihlZngsICIlczogZmFpbGVkIHJjPSVkXG4iLCBfX2Z1bmNfXywgcmMpOworCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsICIlczogZmFpbGVkIHJjPSVkXG4iLCBfX2Z1bmNfXywgcmMpOwogCXJldHVybiByYzsKIH0KIApAQCAtODAyLDcgKzgxMiw3IEBACiAJcmV0dXJuIDA7CiAKIGZhaWw6Ci0JRUZYX0VSUihlZngsICIlczogZmFpbGVkIHJjPSVkXG4iLCBfX2Z1bmNfXywgcmMpOworCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsICIlczogZmFpbGVkIHJjPSVkXG4iLCBfX2Z1bmNfXywgcmMpOwogCXJldHVybiByYzsKIH0KIApAQCAtODI3LDcgKzgzNyw3IEBACiAJcmV0dXJuIDA7CiAKIGZhaWw6Ci0JRUZYX0VSUihlZngsICIlczogZmFpbGVkIHJjPSVkXG4iLCBfX2Z1bmNfXywgcmMpOworCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsICIlczogZmFpbGVkIHJjPSVkXG4iLCBfX2Z1bmNfXywgcmMpOwogCXJldHVybiByYzsKIH0KIApAQCAtODUzLDcgKzg2Myw3IEBACiAJcmV0dXJuIDA7CiAKIGZhaWw6Ci0JRUZYX0VSUihlZngsICIlczogZmFpbGVkIHJjPSVkXG4iLCBfX2Z1bmNfXywgcmMpOworCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsICIlczogZmFpbGVkIHJjPSVkXG4iLCBfX2Z1bmNfXywgcmMpOwogCXJldHVybiByYzsKIH0KIApAQCAtODc3LDcgKzg4Nyw3IEBACiAJcmV0dXJuIDA7CiAKIGZhaWw6Ci0JRUZYX0VSUihlZngsICIlczogZmFpbGVkIHJjPSVkXG4iLCBfX2Z1bmNfXywgcmMpOworCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsICIlczogZmFpbGVkIHJjPSVkXG4iLCBfX2Z1bmNfXywgcmMpOwogCXJldHVybiByYzsKIH0KIApAQCAtODk4LDcgKzkwOCw3IEBACiAJcmV0dXJuIDA7CiAKIGZhaWw6Ci0JRUZYX0VSUihlZngsICIlczogZmFpbGVkIHJjPSVkXG4iLCBfX2Z1bmNfXywgcmMpOworCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsICIlczogZmFpbGVkIHJjPSVkXG4iLCBfX2Z1bmNfXywgcmMpOwogCXJldHVybiByYzsKIH0KIApAQCAtOTQ4LDkgKzk1OCwxMCBAQAogCXJldHVybiAwOwogCiBmYWlsMjoKLQlFRlhfRVJSKGVmeCwgIiVzOiBmYWlsZWQgdHlwZT0ldVxuIiwgX19mdW5jX18sIHR5cGUpOworCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsICIlczogZmFpbGVkIHR5cGU9JXVcbiIsCisJCSAgX19mdW5jX18sIHR5cGUpOwogZmFpbDE6Ci0JRUZYX0VSUihlZngsICIlczogZmFpbGVkIHJjPSVkXG4iLCBfX2Z1bmNfXywgcmMpOworCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsICIlczogZmFpbGVkIHJjPSVkXG4iLCBfX2Z1bmNfXywgcmMpOwogCXJldHVybiByYzsKIH0KIApAQCAtOTk0LDE0ICsxMDA1LDE1IEBACiAJCTogKGZsYWdzID09IE1DX0NNRF9HRVRfQVNTRVJUU19GTEFHU19XRE9HX0ZJUkVEKQogCQk/ICJ3YXRjaGRvZyByZXNldCIKIAkJOiAidW5rbm93biBhc3NlcnRpb24iOwotCUVGWF9FUlIoZWZ4LCAiTUNQVSAlcyBhdCBQQyA9IDB4JS44eCBpbiB0aHJlYWQgMHglLjh4XG4iLCByZWFzb24sCi0JCU1DRElfRFdPUkQob3V0YnVmLCBHRVRfQVNTRVJUU19PVVRfU0FWRURfUENfT0ZGUyksCi0JCU1DRElfRFdPUkQob3V0YnVmLCBHRVRfQVNTRVJUU19PVVRfVEhSRUFEX09GRlMpKTsKKwluZXRpZl9lcnIoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LAorCQkgICJNQ1BVICVzIGF0IFBDID0gMHglLjh4IGluIHRocmVhZCAweCUuOHhcbiIsIHJlYXNvbiwKKwkJICBNQ0RJX0RXT1JEKG91dGJ1ZiwgR0VUX0FTU0VSVFNfT1VUX1NBVkVEX1BDX09GRlMpLAorCQkgIE1DRElfRFdPUkQob3V0YnVmLCBHRVRfQVNTRVJUU19PVVRfVEhSRUFEX09GRlMpKTsKIAogCS8qIFByaW50IG91dCB0aGUgcmVnaXN0ZXJzICovCiAJb2ZzdCA9IE1DX0NNRF9HRVRfQVNTRVJUU19PVVRfR1BfUkVHU19PRkZTX09GU1Q7CiAJZm9yIChpbmRleCA9IDE7IGluZGV4IDwgMzI7IGluZGV4KyspIHsKLQkJRUZYX0VSUihlZngsICJSJS4yZCAoPyk6IDB4JS44eFxuIiwgaW5kZXgsCisJCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsICJSJS4yZCAoPyk6IDB4JS44eFxuIiwgaW5kZXgsCiAJCQlNQ0RJX0RXT1JEMihvdXRidWYsIG9mc3QpKTsKIAkJb2ZzdCArPSBzaXplb2YoZWZ4X2R3b3JkX3QpOwogCX0KQEAgLTEwNTAsMTQgKzEwNjIsMTYgQEAKIAlyYyA9IGVmeF9tY2RpX3JwYyhlZngsIE1DX0NNRF9TRVRfSURfTEVELCBpbmJ1Ziwgc2l6ZW9mKGluYnVmKSwKIAkJCSAgTlVMTCwgMCwgTlVMTCk7CiAJaWYgKHJjKQotCQlFRlhfRVJSKGVmeCwgIiVzOiBmYWlsZWQgcmM9JWRcbiIsIF9fZnVuY19fLCByYyk7CisJCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsICIlczogZmFpbGVkIHJjPSVkXG4iLAorCQkJICBfX2Z1bmNfXywgcmMpOwogfQogCiBpbnQgZWZ4X21jZGlfcmVzZXRfcG9ydChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewogCWludCByYyA9IGVmeF9tY2RpX3JwYyhlZngsIE1DX0NNRF9QT1JUX1JFU0VULCBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMKTsKIAlpZiAocmMpCi0JCUVGWF9FUlIoZWZ4LCAiJXM6IGZhaWxlZCByYz0lZFxuIiwgX19mdW5jX18sIHJjKTsKKwkJbmV0aWZfZXJyKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwgIiVzOiBmYWlsZWQgcmM9JWRcbiIsCisJCQkgIF9fZnVuY19fLCByYyk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xMDc1LDcgKzEwODksNyBAQAogCQlyZXR1cm4gMDsKIAlpZiAocmMgPT0gMCkKIAkJcmMgPSAtRUlPOwotCUVGWF9FUlIoZWZ4LCAiJXM6IGZhaWxlZCByYz0lZFxuIiwgX19mdW5jX18sIHJjKTsKKwluZXRpZl9lcnIoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LCAiJXM6IGZhaWxlZCByYz0lZFxuIiwgX19mdW5jX18sIHJjKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTExMDgsNyArMTEyMiw3IEBACiAKIGZhaWw6CiAJKmlkX291dCA9IC0xOwotCUVGWF9FUlIoZWZ4LCAiJXM6IGZhaWxlZCByYz0lZFxuIiwgX19mdW5jX18sIHJjKTsKKwluZXRpZl9lcnIoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LCAiJXM6IGZhaWxlZCByYz0lZFxuIiwgX19mdW5jX18sIHJjKTsKIAlyZXR1cm4gcmM7CiAKIH0KQEAgLTExNDMsNyArMTE1Nyw3IEBACiAKIGZhaWw6CiAJKmlkX291dCA9IC0xOwotCUVGWF9FUlIoZWZ4LCAiJXM6IGZhaWxlZCByYz0lZFxuIiwgX19mdW5jX18sIHJjKTsKKwluZXRpZl9lcnIoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LCAiJXM6IGZhaWxlZCByYz0lZFxuIiwgX19mdW5jX18sIHJjKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTExNjMsNyArMTE3Nyw3IEBACiAJcmV0dXJuIDA7CiAKIGZhaWw6Ci0JRUZYX0VSUihlZngsICIlczogZmFpbGVkIHJjPSVkXG4iLCBfX2Z1bmNfXywgcmMpOworCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsICIlczogZmFpbGVkIHJjPSVkXG4iLCBfX2Z1bmNfXywgcmMpOwogCXJldHVybiByYzsKIH0KIApAQCAtMTE3OSw3ICsxMTkzLDcgQEAKIAlyZXR1cm4gMDsKIAogZmFpbDoKLQlFRlhfRVJSKGVmeCwgIiVzOiBmYWlsZWQgcmM9JWRcbiIsIF9fZnVuY19fLCByYyk7CisJbmV0aWZfZXJyKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwgIiVzOiBmYWlsZWQgcmM9JWRcbiIsIF9fZnVuY19fLCByYyk7CiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbWNkaV9tYWMuYyBiL2RyaXZlcnMvbmV0L3NmYy9tY2RpX21hYy5jCmluZGV4IDM5MTgyNjMuLmY4OGY0YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9tY2RpX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9tY2RpX21hYy5jCkBAIC02OSw4ICs2OSw4IEBACiAJcmV0dXJuIDA7CiAKIGZhaWw6Ci0JRUZYX0VSUihlZngsICIlczogZmFpbGVkIHJjPSVkXG4iLAotCQlfX2Z1bmNfXywgcmMpOworCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsICIlczogZmFpbGVkIHJjPSVkXG4iLAorCQkgIF9fZnVuY19fLCByYyk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xMTAsOCArMTEwLDggQEAKIAlyZXR1cm4gMDsKIAogZmFpbDoKLQlFRlhfRVJSKGVmeCwgIiVzOiAlcyBmYWlsZWQgcmM9JWRcbiIsCi0JCV9fZnVuY19fLCBlbmFibGUgPyAiZW5hYmxlIiA6ICJkaXNhYmxlIiwgcmMpOworCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsICIlczogJXMgZmFpbGVkIHJjPSVkXG4iLAorCQkgIF9fZnVuY19fLCBlbmFibGUgPyAiZW5hYmxlIiA6ICJkaXNhYmxlIiwgcmMpOwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL21jZGlfcGh5LmMgYi9kcml2ZXJzL25ldC9zZmMvbWNkaV9waHkuYwppbmRleCA2MDMyYzBlLi4wMTIxZTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbWNkaV9waHkuYworKysgYi9kcml2ZXJzL25ldC9zZmMvbWNkaV9waHkuYwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgIm5pYy5oIgogI2luY2x1ZGUgInNlbGZ0ZXN0LmgiCiAKLXN0cnVjdCBlZnhfbWNkaV9waHlfY2ZnIHsKK3N0cnVjdCBlZnhfbWNkaV9waHlfZGF0YSB7CiAJdTMyIGZsYWdzOwogCXUzMiB0eXBlOwogCXUzMiBzdXBwb3J0ZWRfY2FwOwpAQCAtMzUsNyArMzUsNyBAQAogfTsKIAogc3RhdGljIGludAotZWZ4X21jZGlfZ2V0X3BoeV9jZmcoc3RydWN0IGVmeF9uaWMgKmVmeCwgc3RydWN0IGVmeF9tY2RpX3BoeV9jZmcgKmNmZykKK2VmeF9tY2RpX2dldF9waHlfY2ZnKHN0cnVjdCBlZnhfbmljICplZngsIHN0cnVjdCBlZnhfbWNkaV9waHlfZGF0YSAqY2ZnKQogewogCXU4IG91dGJ1ZltNQ19DTURfR0VUX1BIWV9DRkdfT1VUX0xFTl07CiAJc2l6ZV90IG91dGxlbjsKQEAgLTcxLDcgKzcxLDcgQEAKIAlyZXR1cm4gMDsKIAogZmFpbDoKLQlFRlhfRVJSKGVmeCwgIiVzOiBmYWlsZWQgcmM9JWRcbiIsIF9fZnVuY19fLCByYyk7CisJbmV0aWZfZXJyKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwgIiVzOiBmYWlsZWQgcmM9JWRcbiIsIF9fZnVuY19fLCByYyk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC05Nyw3ICs5Nyw3IEBACiAJcmV0dXJuIDA7CiAKIGZhaWw6Ci0JRUZYX0VSUihlZngsICIlczogZmFpbGVkIHJjPSVkXG4iLCBfX2Z1bmNfXywgcmMpOworCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsICIlczogZmFpbGVkIHJjPSVkXG4iLCBfX2Z1bmNfXywgcmMpOwogCXJldHVybiByYzsKIH0KIApAQCAtMTIyLDcgKzEyMiw3IEBACiAJcmV0dXJuIDA7CiAKIGZhaWw6Ci0JRUZYX0VSUihlZngsICIlczogZmFpbGVkIHJjPSVkXG4iLCBfX2Z1bmNfXywgcmMpOworCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsICIlczogZmFpbGVkIHJjPSVkXG4iLCBfX2Z1bmNfXywgcmMpOwogCXJldHVybiByYzsKIH0KIApAQCAtMTUwLDcgKzE1MCw3IEBACiAJcmV0dXJuIDA7CiAKIGZhaWw6Ci0JRUZYX0VSUihlZngsICIlczogZmFpbGVkIHJjPSVkXG4iLCBfX2Z1bmNfXywgcmMpOworCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsICIlczogZmFpbGVkIHJjPSVkXG4iLCBfX2Z1bmNfXywgcmMpOwogCXJldHVybiByYzsKIH0KIApAQCAtMTc4LDcgKzE3OCw3IEBACiAJcmV0dXJuIDA7CiAKIGZhaWw6Ci0JRUZYX0VSUihlZngsICIlczogZmFpbGVkIHJjPSVkXG4iLCBfX2Z1bmNfXywgcmMpOworCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsICIlczogZmFpbGVkIHJjPSVkXG4iLCBfX2Z1bmNfXywgcmMpOwogCXJldHVybiByYzsKIH0KIApAQCAtMjU5LDcgKzI1OSw3IEBACiAKIHN0YXRpYyB1MzIgZWZ4X2dldF9tY2RpX3BoeV9mbGFncyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewotCXN0cnVjdCBlZnhfbWNkaV9waHlfY2ZnICpwaHlfY2ZnID0gZWZ4LT5waHlfZGF0YTsKKwlzdHJ1Y3QgZWZ4X21jZGlfcGh5X2RhdGEgKnBoeV9jZmcgPSBlZngtPnBoeV9kYXRhOwogCWVudW0gZWZ4X3BoeV9tb2RlIG1vZGUsIHN1cHBvcnRlZDsKIAl1MzIgZmxhZ3M7CiAKQEAgLTMwNyw3ICszMDcsNyBAQAogCiBzdGF0aWMgaW50IGVmeF9tY2RpX3BoeV9wcm9iZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewotCXN0cnVjdCBlZnhfbWNkaV9waHlfY2ZnICpwaHlfZGF0YTsKKwlzdHJ1Y3QgZWZ4X21jZGlfcGh5X2RhdGEgKnBoeV9kYXRhOwogCXU4IG91dGJ1ZltNQ19DTURfR0VUX0xJTktfT1VUX0xFTl07CiAJdTMyIGNhcHM7CiAJaW50IHJjOwpAQCAtMzk1LDYgKzM5NSw3IEBACiAJZWZ4LT53YW50ZWRfZmMgPSBFRlhfRkNfUlggfCBFRlhfRkNfVFg7CiAJaWYgKHBoeV9kYXRhLT5zdXBwb3J0ZWRfY2FwICYgKDEgPDwgTUNfQ01EX1BIWV9DQVBfQU5fTEJOKSkKIAkJZWZ4LT53YW50ZWRfZmMgfD0gRUZYX0ZDX0FVVE87CisJZWZ4X2xpbmtfc2V0X3dhbnRlZF9mYyhlZngsIGVmeC0+d2FudGVkX2ZjKTsKIAogCXJldHVybiAwOwogCkBAIC00MDUsNyArNDA2LDcgQEAKIAogaW50IGVmeF9tY2RpX3BoeV9yZWNvbmZpZ3VyZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewotCXN0cnVjdCBlZnhfbWNkaV9waHlfY2ZnICpwaHlfY2ZnID0gZWZ4LT5waHlfZGF0YTsKKwlzdHJ1Y3QgZWZ4X21jZGlfcGh5X2RhdGEgKnBoeV9jZmcgPSBlZngtPnBoeV9kYXRhOwogCXUzMiBjYXBzID0gKGVmeC0+bGlua19hZHZlcnRpc2luZyA/CiAJCSAgICBldGh0b29sX3RvX21jZGlfY2FwKGVmeC0+bGlua19hZHZlcnRpc2luZykgOgogCQkgICAgcGh5X2NmZy0+Zm9yY2VkX2NhcCk7CkBAIC00NDYsNyArNDQ3LDcgQEAKICAqLwogdm9pZCBlZnhfbWNkaV9waHlfY2hlY2tfZmNudGwoc3RydWN0IGVmeF9uaWMgKmVmeCwgdTMyIGxwYSkKIHsKLQlzdHJ1Y3QgZWZ4X21jZGlfcGh5X2NmZyAqcGh5X2NmZyA9IGVmeC0+cGh5X2RhdGE7CisJc3RydWN0IGVmeF9tY2RpX3BoeV9kYXRhICpwaHlfY2ZnID0gZWZ4LT5waHlfZGF0YTsKIAl1MzIgcm10YWR2OwogCiAJLyogVGhlIGxpbmsgcGFydG5lciBjYXBhYmlsaXRpZXMgYXJlIG9ubHkgcmVsZXZlbnQgaWYgdGhlCkBAIC00NjUsOCArNDY2LDggQEAKIAkJcm10YWR2IHw9ICBBRFZFUlRJU0VEX0FzeW1fUGF1c2U7CiAKIAlpZiAoKGVmeC0+d2FudGVkX2ZjICYgRUZYX0ZDX1RYKSAmJiBybXRhZHYgPT0gQURWRVJUSVNFRF9Bc3ltX1BhdXNlKQotCQlFRlhfRVJSKGVmeCwgIndhcm5pbmc6IGxpbmsgcGFydG5lciBkb2Vzbid0IHN1cHBvcnQgIgotCQkJInBhdXNlIGZyYW1lcyIpOworCQluZXRpZl9lcnIoZWZ4LCBsaW5rLCBlZngtPm5ldF9kZXYsCisJCQkgICJ3YXJuaW5nOiBsaW5rIHBhcnRuZXIgZG9lc24ndCBzdXBwb3J0IHBhdXNlIGZyYW1lcyIpOwogfQogCiBzdGF0aWMgYm9vbCBlZnhfbWNkaV9waHlfcG9sbChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQpAQCAtNDgyLDcgKzQ4Myw4IEBACiAJcmMgPSBlZnhfbWNkaV9ycGMoZWZ4LCBNQ19DTURfR0VUX0xJTkssIE5VTEwsIDAsCiAJCQkgIG91dGJ1Ziwgc2l6ZW9mKG91dGJ1ZiksIE5VTEwpOwogCWlmIChyYykgewotCQlFRlhfRVJSKGVmeCwgIiVzOiBmYWlsZWQgcmM9JWRcbiIsIF9fZnVuY19fLCByYyk7CisJCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsICIlczogZmFpbGVkIHJjPSVkXG4iLAorCQkJICBfX2Z1bmNfXywgcmMpOwogCQllZngtPmxpbmtfc3RhdGUudXAgPSBmYWxzZTsKIAl9IGVsc2UgewogCQllZnhfbWNkaV9waHlfZGVjb2RlX2xpbmsoCkBAIC01MDUsNyArNTA3LDcgQEAKIAogc3RhdGljIHZvaWQgZWZ4X21jZGlfcGh5X2dldF9zZXR0aW5ncyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpCiB7Ci0Jc3RydWN0IGVmeF9tY2RpX3BoeV9jZmcgKnBoeV9jZmcgPSBlZngtPnBoeV9kYXRhOworCXN0cnVjdCBlZnhfbWNkaV9waHlfZGF0YSAqcGh5X2NmZyA9IGVmeC0+cGh5X2RhdGE7CiAJdTggb3V0YnVmW01DX0NNRF9HRVRfTElOS19PVVRfTEVOXTsKIAlpbnQgcmM7CiAKQEAgLTUyNSw3ICs1MjcsOCBAQAogCXJjID0gZWZ4X21jZGlfcnBjKGVmeCwgTUNfQ01EX0dFVF9MSU5LLCBOVUxMLCAwLAogCQkJICBvdXRidWYsIHNpemVvZihvdXRidWYpLCBOVUxMKTsKIAlpZiAocmMpIHsKLQkJRUZYX0VSUihlZngsICIlczogZmFpbGVkIHJjPSVkXG4iLCBfX2Z1bmNfXywgcmMpOworCQluZXRpZl9lcnIoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LCAiJXM6IGZhaWxlZCByYz0lZFxuIiwKKwkJCSAgX19mdW5jX18sIHJjKTsKIAkJcmV0dXJuOwogCX0KIAllY21kLT5scF9hZHZlcnRpc2luZyA9CkBAIC01MzUsNyArNTM4LDcgQEAKIAogc3RhdGljIGludCBlZnhfbWNkaV9waHlfc2V0X3NldHRpbmdzKHN0cnVjdCBlZnhfbmljICplZngsIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKIHsKLQlzdHJ1Y3QgZWZ4X21jZGlfcGh5X2NmZyAqcGh5X2NmZyA9IGVmeC0+cGh5X2RhdGE7CisJc3RydWN0IGVmeF9tY2RpX3BoeV9kYXRhICpwaHlfY2ZnID0gZWZ4LT5waHlfZGF0YTsKIAl1MzIgY2FwczsKIAlpbnQgcmM7CiAKQEAgLTY3NCw3ICs2NzcsNyBAQAogc3RhdGljIGludCBlZnhfbWNkaV9waHlfcnVuX3Rlc3RzKHN0cnVjdCBlZnhfbmljICplZngsIGludCAqcmVzdWx0cywKIAkJCQkgIHVuc2lnbmVkIGZsYWdzKQogewotCXN0cnVjdCBlZnhfbWNkaV9waHlfY2ZnICpwaHlfY2ZnID0gZWZ4LT5waHlfZGF0YTsKKwlzdHJ1Y3QgZWZ4X21jZGlfcGh5X2RhdGEgKnBoeV9jZmcgPSBlZngtPnBoeV9kYXRhOwogCXUzMiBtb2RlOwogCWludCByYzsKIApAQCAtNzEyLDcgKzcxNSw3IEBACiAKIGNvbnN0IGNoYXIgKmVmeF9tY2RpX3BoeV90ZXN0X25hbWUoc3RydWN0IGVmeF9uaWMgKmVmeCwgdW5zaWduZWQgaW50IGluZGV4KQogewotCXN0cnVjdCBlZnhfbWNkaV9waHlfY2ZnICpwaHlfY2ZnID0gZWZ4LT5waHlfZGF0YTsKKwlzdHJ1Y3QgZWZ4X21jZGlfcGh5X2RhdGEgKnBoeV9jZmcgPSBlZngtPnBoeV9kYXRhOwogCiAJaWYgKHBoeV9jZmctPmZsYWdzICYgKDEgPDwgTUNfQ01EX0dFVF9QSFlfQ0ZHX0JJU1RfTEJOKSkgewogCQlpZiAoaW5kZXggPT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5jIGIvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmMKaW5kZXggMDU0OGZjYi4uZWVhZjBiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmMKQEAgLTYzLDcgKzYzLDggQEAKIAkJLyogUmVhZCBNTUQgU1RBVFVTMiB0byBjaGVjayBpdCBpcyByZXNwb25kaW5nLiAqLwogCQlzdGF0dXMgPSBlZnhfbWRpb19yZWFkKGVmeCwgbW1kLCBNRElPX1NUQVQyKTsKIAkJaWYgKChzdGF0dXMgJiBNRElPX1NUQVQyX0RFVlBSU1QpICE9IE1ESU9fU1RBVDJfREVWUFJTVF9WQUwpIHsKLQkJCUVGWF9FUlIoZWZ4LCAiUEhZIE1NRCAlZCBub3QgcmVzcG9uZGluZy5cbiIsIG1tZCk7CisJCQluZXRpZl9lcnIoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LAorCQkJCSAgIlBIWSBNTUQgJWQgbm90IHJlc3BvbmRpbmcuXG4iLCBtbWQpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAl9CkBAIC03MiwxMiArNzMsMTQgQEAKIAlzdGF0dXMgPSBlZnhfbWRpb19yZWFkKGVmeCwgbW1kLCBNRElPX1NUQVQxKTsKIAlpZiAoc3RhdHVzICYgTURJT19TVEFUMV9GQVVMVCkgewogCQlpZiAoZmF1bHRfZmF0YWwpIHsKLQkJCUVGWF9FUlIoZWZ4LCAiUEhZIE1NRCAlZCByZXBvcnRpbmcgZmF0YWwiCi0JCQkJIiBmYXVsdDogc3RhdHVzICV4XG4iLCBtbWQsIHN0YXR1cyk7CisJCQluZXRpZl9lcnIoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LAorCQkJCSAgIlBIWSBNTUQgJWQgcmVwb3J0aW5nIGZhdGFsIgorCQkJCSAgIiBmYXVsdDogc3RhdHVzICV4XG4iLCBtbWQsIHN0YXR1cyk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfSBlbHNlIHsKLQkJCUVGWF9MT0coZWZ4LCAiUEhZIE1NRCAlZCByZXBvcnRpbmcgc3RhdHVzIgotCQkJCSIgJXggKGV4cGVjdGVkKVxuIiwgbW1kLCBzdGF0dXMpOworCQkJbmV0aWZfZGJnKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJCQkgICJQSFkgTU1EICVkIHJlcG9ydGluZyBzdGF0dXMiCisJCQkJICAiICV4IChleHBlY3RlZClcbiIsIG1tZCwgc3RhdHVzKTsKIAkJfQogCX0KIAlyZXR1cm4gMDsKQEAgLTEwMyw4ICsxMDYsOSBAQAogCQkJaWYgKG1hc2sgJiAxKSB7CiAJCQkJc3RhdCA9IGVmeF9tZGlvX3JlYWQoZWZ4LCBtbWQsIE1ESU9fQ1RSTDEpOwogCQkJCWlmIChzdGF0IDwgMCkgewotCQkJCQlFRlhfRVJSKGVmeCwgImZhaWxlZCB0byByZWFkIHN0YXR1cyBvZiIKLQkJCQkJCSIgTU1EICVkXG4iLCBtbWQpOworCQkJCQluZXRpZl9lcnIoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LAorCQkJCQkJICAiZmFpbGVkIHRvIHJlYWQgc3RhdHVzIG9mIgorCQkJCQkJICAiIE1NRCAlZFxuIiwgbW1kKTsKIAkJCQkJcmV0dXJuIC1FSU87CiAJCQkJfQogCQkJCWlmIChzdGF0ICYgTURJT19DVFJMMV9SRVNFVCkKQEAgLTExOSw4ICsxMjMsOSBAQAogCQltc2xlZXAoc3BpbnRpbWUpOwogCX0KIAlpZiAoaW5fcmVzZXQgIT0gMCkgewotCQlFRlhfRVJSKGVmeCwgIm5vdCBhbGwgTU1EcyBjYW1lIG91dCBvZiByZXNldCBpbiB0aW1lLiIKLQkJCSIgTU1EcyBzdGlsbCBpbiByZXNldDogJXhcbiIsIGluX3Jlc2V0KTsKKwkJbmV0aWZfZXJyKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJCSAgIm5vdCBhbGwgTU1EcyBjYW1lIG91dCBvZiByZXNldCBpbiB0aW1lLiIKKwkJCSAgIiBNTURzIHN0aWxsIGluIHJlc2V0OiAleFxuIiwgaW5fcmVzZXQpOwogCQlyYyA9IC1FVElNRURPVVQ7CiAJfQogCXJldHVybiByYzsKQEAgLTE0MiwxNiArMTQ3LDE4IEBACiAJZGV2czEgPSBlZnhfbWRpb19yZWFkKGVmeCwgcHJvYmVfbW1kLCBNRElPX0RFVlMxKTsKIAlkZXZzMiA9IGVmeF9tZGlvX3JlYWQoZWZ4LCBwcm9iZV9tbWQsIE1ESU9fREVWUzIpOwogCWlmIChkZXZzMSA8IDAgfHwgZGV2czIgPCAwKSB7Ci0JCUVGWF9FUlIoZWZ4LCAiZmFpbGVkIHRvIHJlYWQgZGV2aWNlcyBwcmVzZW50XG4iKTsKKwkJbmV0aWZfZXJyKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJCSAgImZhaWxlZCB0byByZWFkIGRldmljZXMgcHJlc2VudFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAlkZXZpY2VzID0gZGV2czEgfCAoZGV2czIgPDwgMTYpOwogCWlmICgoZGV2aWNlcyAmIG1tZF9tYXNrKSAhPSBtbWRfbWFzaykgewotCQlFRlhfRVJSKGVmeCwgInJlcXVpcmVkIE1NRHMgbm90IHByZXNlbnQ6IGdvdCAleCwgIgotCQkJIndhbnRlZCAleFxuIiwgZGV2aWNlcywgbW1kX21hc2spOworCQluZXRpZl9lcnIoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LAorCQkJICAicmVxdWlyZWQgTU1EcyBub3QgcHJlc2VudDogZ290ICV4LCB3YW50ZWQgJXhcbiIsCisJCQkgIGRldmljZXMsIG1tZF9tYXNrKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCUVGWF9UUkFDRShlZngsICJEZXZpY2VzIHByZXNlbnQ6ICV4XG4iLCBkZXZpY2VzKTsKKwluZXRpZl92ZGJnKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwgIkRldmljZXMgcHJlc2VudDogJXhcbiIsIGRldmljZXMpOwogCiAJLyogQ2hlY2sgYWxsIHJlcXVpcmVkIE1NRHMgYXJlIHJlc3BvbmRpbmcgYW5kIGhhcHB5LiAqLwogCXdoaWxlIChtbWRfbWFzaykgewpAQCAtMjE5LDcgKzIyNiw3IEBACiB7CiAJaW50IHN0YXQgPSBlZnhfbWRpb19yZWFkKGVmeCwgbW1kLCBNRElPX1NUQVQxKTsKIAotCUVGWF9UUkFDRShlZngsICJTZXR0aW5nIGxvdyBwb3dlciBtb2RlIGZvciBNTUQgJWQgdG8gJWRcbiIsCisJbmV0aWZfdmRiZyhlZngsIGRydiwgZWZ4LT5uZXRfZGV2LCAiU2V0dGluZyBsb3cgcG93ZXIgbW9kZSBmb3IgTU1EICVkIHRvICVkXG4iLAogCQkgIG1tZCwgbHBvd2VyKTsKIAogCWlmIChzdGF0ICYgTURJT19TVEFUMV9MUE9XRVJBQkxFKSB7CkBAIC0zNDksOCArMzU2LDggQEAKIAogCWlmICgocGh5c2lkMSA9PSAweDAwMDApIHx8IChwaHlzaWQxID09IDB4ZmZmZikgfHwKIAkgICAgKHBoeXNpZDIgPT0gMHgwMDAwKSB8fCAocGh5c2lkMiA9PSAweGZmZmYpKSB7Ci0JCUVGWF9FUlIoZWZ4LCAibm8gTURJTyBQSFkgcHJlc2VudCB3aXRoIElEICVkXG4iLAotCQkJZWZ4LT5tZGlvLnBydGFkKTsKKwkJbmV0aWZfZXJyKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJCSAgIm5vIE1ESU8gUEhZIHByZXNlbnQgd2l0aCBJRCAlZFxuIiwgZWZ4LT5tZGlvLnBydGFkKTsKIAkJcmMgPSAtRUlOVkFMOwogCX0gZWxzZSB7CiAJCXJjID0gZWZ4X21kaW9fY2hlY2tfbW1kcyhlZngsIGVmeC0+bWRpby5tbWRzLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5oIGIvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmgKaW5kZXggZjg5ZTcxOS4uNzU3OTFkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmgKQEAgLTUxLDcgKzUxLDggQEAKIAogCXN5bmMgPSAhIShsYW5lX3N0YXR1cyAmIE1ESU9fUEhZWFNfTE5TVEFUX0FMSUdOKTsKIAlpZiAoIXN5bmMpCi0JCUVGWF9MT0coZWZ4LCAiWEdYUyBsYW5lIHN0YXR1czogJXhcbiIsIGxhbmVfc3RhdHVzKTsKKwkJbmV0aWZfZGJnKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwgIlhHWFMgbGFuZSBzdGF0dXM6ICV4XG4iLAorCQkJICBsYW5lX3N0YXR1cyk7CiAJcmV0dXJuIHN5bmM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9tdGQuYyBiL2RyaXZlcnMvbmV0L3NmYy9tdGQuYwppbmRleCBmM2FjN2YzLi4wMmU1NGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbXRkLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL210ZC5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogCi0jZGVmaW5lIEVGWF9EUklWRVJfTkFNRSAic2ZjX210ZCIKICNpbmNsdWRlICJuZXRfZHJpdmVyLmgiCiAjaW5jbHVkZSAic3BpLmgiCiAjaW5jbHVkZSAiZWZ4LmgiCkBAIC03MSw4ICs3MCwxMCBAQAogCiAvKiBTUEkgdXRpbGl0aWVzICovCiAKLXN0YXRpYyBpbnQgZWZ4X3NwaV9zbG93X3dhaXQoc3RydWN0IGVmeF9tdGQgKmVmeF9tdGQsIGJvb2wgdW5pbnRlcnJ1cHRpYmxlKQorc3RhdGljIGludAorZWZ4X3NwaV9zbG93X3dhaXQoc3RydWN0IGVmeF9tdGRfcGFydGl0aW9uICpwYXJ0LCBib29sIHVuaW50ZXJydXB0aWJsZSkKIHsKKwlzdHJ1Y3QgZWZ4X210ZCAqZWZ4X210ZCA9IHBhcnQtPm10ZC5wcml2OwogCWNvbnN0IHN0cnVjdCBlZnhfc3BpX2RldmljZSAqc3BpID0gZWZ4X210ZC0+c3BpOwogCXN0cnVjdCBlZnhfbmljICplZnggPSBlZnhfbXRkLT5lZng7CiAJdTggc3RhdHVzOwpAQCAtOTIsNyArOTMsNyBAQAogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQlyZXR1cm4gLUVJTlRSOwogCX0KLQlFRlhfRVJSKGVmeCwgInRpbWVkIG91dCB3YWl0aW5nIGZvciAlc1xuIiwgZWZ4X210ZC0+bmFtZSk7CisJcHJfZXJyKCIlczogdGltZWQgb3V0IHdhaXRpbmcgZm9yICVzXG4iLCBwYXJ0LT5uYW1lLCBlZnhfbXRkLT5uYW1lKTsKIAlyZXR1cm4gLUVUSU1FRE9VVDsKIH0KIApAQCAtMTMxLDggKzEzMiwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGVmeF9zcGlfZXJhc2Uoc3RydWN0IGVmeF9tdGQgKmVmeF9tdGQsIGxvZmZfdCBzdGFydCwgc2l6ZV90IGxlbikKK3N0YXRpYyBpbnQKK2VmeF9zcGlfZXJhc2Uoc3RydWN0IGVmeF9tdGRfcGFydGl0aW9uICpwYXJ0LCBsb2ZmX3Qgc3RhcnQsIHNpemVfdCBsZW4pCiB7CisJc3RydWN0IGVmeF9tdGQgKmVmeF9tdGQgPSBwYXJ0LT5tdGQucHJpdjsKIAljb25zdCBzdHJ1Y3QgZWZ4X3NwaV9kZXZpY2UgKnNwaSA9IGVmeF9tdGQtPnNwaTsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gZWZ4X210ZC0+ZWZ4OwogCXVuc2lnbmVkIHBvcywgYmxvY2tfbGVuOwpAQCAtMTU2LDcgKzE1OSw3IEBACiAJCQkgICAgTlVMTCwgMCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7Ci0JcmMgPSBlZnhfc3BpX3Nsb3dfd2FpdChlZnhfbXRkLCBmYWxzZSk7CisJcmMgPSBlZnhfc3BpX3Nsb3dfd2FpdChwYXJ0LCBmYWxzZSk7CiAKIAkvKiBWZXJpZnkgdGhlIGVudGlyZSByZWdpb24gaGFzIGJlZW4gd2lwZWQgKi8KIAltZW1zZXQoZW1wdHksIDB4ZmYsIHNpemVvZihlbXB0eSkpOwpAQCAtMTk4LDEzICsyMDEsMTQgQEAKIAogc3RhdGljIHZvaWQgZWZ4X210ZF9zeW5jKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogeworCXN0cnVjdCBlZnhfbXRkX3BhcnRpdGlvbiAqcGFydCA9IHRvX2VmeF9tdGRfcGFydGl0aW9uKG10ZCk7CiAJc3RydWN0IGVmeF9tdGQgKmVmeF9tdGQgPSBtdGQtPnByaXY7Ci0Jc3RydWN0IGVmeF9uaWMgKmVmeCA9IGVmeF9tdGQtPmVmeDsKIAlpbnQgcmM7CiAKIAlyYyA9IGVmeF9tdGQtPm9wcy0+c3luYyhtdGQpOwogCWlmIChyYykKLQkJRUZYX0VSUihlZngsICIlcyBzeW5jIGZhaWxlZCAoJWQpXG4iLCBlZnhfbXRkLT5uYW1lLCByYyk7CisJCXByX2VycigiJXM6ICVzIHN5bmMgZmFpbGVkICglZClcbiIsCisJCSAgICAgICBwYXJ0LT5uYW1lLCBlZnhfbXRkLT5uYW1lLCByYyk7CiB9CiAKIHN0YXRpYyB2b2lkIGVmeF9tdGRfcmVtb3ZlX3BhcnRpdGlvbihzdHJ1Y3QgZWZ4X210ZF9wYXJ0aXRpb24gKnBhcnQpCkBAIC0zMzgsNyArMzQyLDcgQEAKIAlyYyA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZWZ4LT5zcGlfbG9jayk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7Ci0JcmMgPSBlZnhfc3BpX2VyYXNlKGVmeF9tdGQsIHBhcnQtPm9mZnNldCArIHN0YXJ0LCBsZW4pOworCXJjID0gZWZ4X3NwaV9lcmFzZShwYXJ0LCBwYXJ0LT5vZmZzZXQgKyBzdGFydCwgbGVuKTsKIAltdXRleF91bmxvY2soJmVmeC0+c3BpX2xvY2spOwogCXJldHVybiByYzsKIH0KQEAgLTM2MywxMiArMzY3LDEzIEBACiAKIHN0YXRpYyBpbnQgZmFsY29uX210ZF9zeW5jKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogeworCXN0cnVjdCBlZnhfbXRkX3BhcnRpdGlvbiAqcGFydCA9IHRvX2VmeF9tdGRfcGFydGl0aW9uKG10ZCk7CiAJc3RydWN0IGVmeF9tdGQgKmVmeF9tdGQgPSBtdGQtPnByaXY7CiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IGVmeF9tdGQtPmVmeDsKIAlpbnQgcmM7CiAKIAltdXRleF9sb2NrKCZlZngtPnNwaV9sb2NrKTsKLQlyYyA9IGVmeF9zcGlfc2xvd193YWl0KGVmeF9tdGQsIHRydWUpOworCXJjID0gZWZ4X3NwaV9zbG93X3dhaXQocGFydCwgdHJ1ZSk7CiAJbXV0ZXhfdW5sb2NrKCZlZngtPnNwaV9sb2NrKTsKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oIGIvZHJpdmVycy9uZXQvc2ZjL25ldF9kcml2ZXIuaAppbmRleCA0NzYyYzkxLi42NGU3Y2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmgKQEAgLTEzLDExICsxMywxNiBAQAogI2lmbmRlZiBFRlhfTkVUX0RSSVZFUl9ICiAjZGVmaW5lIEVGWF9ORVRfRFJJVkVSX0gKIAorI2lmIGRlZmluZWQoRUZYX0VOQUJMRV9ERUJVRykgJiYgIWRlZmluZWQoREVCVUcpCisjZGVmaW5lIERFQlVHCisjZW5kaWYKKwogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tZGlvLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpAQCAtMzQsOSArMzksNyBAQAogICogQnVpbGQgZGVmaW5pdGlvbnMKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmIEVGWF9EUklWRVJfTkFNRQotI2RlZmluZSBFRlhfRFJJVkVSX05BTUUJInNmYyIKLSNlbmRpZgorCiAjZGVmaW5lIEVGWF9EUklWRVJfVkVSU0lPTgkiMy4wIgogCiAjaWZkZWYgRUZYX0VOQUJMRV9ERUJVRwpAQCAtNDcsMzUgKzUwLDYgQEAKICNkZWZpbmUgRUZYX1dBUk5fT05fUEFSQU5PSUQoeCkgZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAotLyogVW4tcmF0ZS1saW1pdGVkIGxvZ2dpbmcgKi8KLSNkZWZpbmUgRUZYX0VSUihlZngsIGZtdCwgYXJncy4uLikgXAotZGV2X2VycigmKChlZngpLT5wY2lfZGV2LT5kZXYpLCAiRVJSOiAlcyAiIGZtdCwgZWZ4X2Rldl9uYW1lKGVmeCksICMjYXJncykKLQotI2RlZmluZSBFRlhfSU5GTyhlZngsIGZtdCwgYXJncy4uLikgXAotZGV2X2luZm8oJigoZWZ4KS0+cGNpX2Rldi0+ZGV2KSwgIklORk86ICVzICIgZm10LCBlZnhfZGV2X25hbWUoZWZ4KSwgIyNhcmdzKQotCi0jaWZkZWYgRUZYX0VOQUJMRV9ERUJVRwotI2RlZmluZSBFRlhfTE9HKGVmeCwgZm10LCBhcmdzLi4uKSBcCi1kZXZfaW5mbygmKChlZngpLT5wY2lfZGV2LT5kZXYpLCAiREJHOiAlcyAiIGZtdCwgZWZ4X2Rldl9uYW1lKGVmeCksICMjYXJncykKLSNlbHNlCi0jZGVmaW5lIEVGWF9MT0coZWZ4LCBmbXQsIGFyZ3MuLi4pIFwKLWRldl9kYmcoJigoZWZ4KS0+cGNpX2Rldi0+ZGV2KSwgIkRCRzogJXMgIiBmbXQsIGVmeF9kZXZfbmFtZShlZngpLCAjI2FyZ3MpCi0jZW5kaWYKLQotI2RlZmluZSBFRlhfVFJBQ0UoZWZ4LCBmbXQsIGFyZ3MuLi4pIGRvIHt9IHdoaWxlICgwKQotCi0jZGVmaW5lIEVGWF9SRUdEVU1QKGVmeCwgZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSAoMCkKLQotLyogUmF0ZS1saW1pdGVkIGxvZ2dpbmcgKi8KLSNkZWZpbmUgRUZYX0VSUl9STChlZngsIGZtdCwgYXJncy4uLikgXAotZG8ge2lmIChuZXRfcmF0ZWxpbWl0KCkpIEVGWF9FUlIoZWZ4LCBmbXQsICMjYXJncyk7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRUZYX0lORk9fUkwoZWZ4LCBmbXQsIGFyZ3MuLi4pIFwKLWRvIHtpZiAobmV0X3JhdGVsaW1pdCgpKSBFRlhfSU5GTyhlZngsIGZtdCwgIyNhcmdzKTsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBFRlhfTE9HX1JMKGVmeCwgZm10LCBhcmdzLi4uKSBcCi1kbyB7aWYgKG5ldF9yYXRlbGltaXQoKSkgRUZYX0xPRyhlZngsIGZtdCwgIyNhcmdzKTsgfSB3aGlsZSAoMCkKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRWZ4IGRhdGEgc3RydWN0dXJlcwpAQCAtMjIxLDcgKzE5NSw2IEBACiAgKglJZiBib3RoIHRoaXMgYW5kIHNrYiBhcmUgJU5VTEwsIHRoZSBidWZmZXIgc2xvdCBpcyBjdXJyZW50bHkgZnJlZS4KICAqIEBkYXRhOiBQb2ludGVyIHRvIGV0aGVybmV0IGhlYWRlcgogICogQGxlbjogQnVmZmVyIGxlbmd0aCwgaW4gYnl0ZXMuCi0gKiBAdW5tYXBfYWRkcjogRE1BIGFkZHJlc3MgdG8gdW5tYXAKICAqLwogc3RydWN0IGVmeF9yeF9idWZmZXIgewogCWRtYV9hZGRyX3QgZG1hX2FkZHI7CkBAIC0yMjksNyArMjAyLDI0IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJY2hhciAqZGF0YTsKIAl1bnNpZ25lZCBpbnQgbGVuOwotCWRtYV9hZGRyX3QgdW5tYXBfYWRkcjsKK307CisKKy8qKgorICogc3RydWN0IGVmeF9yeF9wYWdlX3N0YXRlIC0gUGFnZS1iYXNlZCByeCBidWZmZXIgc3RhdGUKKyAqCisgKiBJbnNlcnRlZCBhdCB0aGUgc3RhcnQgb2YgZXZlcnkgcGFnZSBhbGxvY2F0ZWQgZm9yIHJlY2VpdmUgYnVmZmVycy4KKyAqIFVzZWQgdG8gZmFjaWxpdGF0ZSBzaGFyaW5nIGRtYSBtYXBwaW5ncyBiZXR3ZWVuIHJlY3ljbGVkIHJ4IGJ1ZmZlcnMKKyAqIGFuZCB0aG9zZSBwYXNzZWQgdXAgdG8gdGhlIGtlcm5lbC4KKyAqCisgKiBAcmVmY250OiBOdW1iZXIgb2Ygc3RydWN0IGVmeF9yeF9idWZmZXIncyByZWZlcmVuY2luZyB0aGlzIHBhZ2UuCisgKglXaGVuIHJlZmNudCBmYWxscyB0byB6ZXJvLCB0aGUgcGFnZSBpcyB1bm1hcHBlZCBmb3IgZG1hCisgKiBAZG1hX2FkZHI6IFRoZSBkbWEgYWRkcmVzcyBvZiB0aGlzIHBhZ2UuCisgKi8KK3N0cnVjdCBlZnhfcnhfcGFnZV9zdGF0ZSB7CisJdW5zaWduZWQgcmVmY250OworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisKKwl1bnNpZ25lZCBpbnQgX19wYWRbMF0gX19fX2NhY2hlbGluZV9hbGlnbmVkOwogfTsKIAogLyoqCkBAIC0yNDIsMTAgKzIzMiw2IEBACiAgKiBAYWRkZWRfY291bnQ6IE51bWJlciBvZiBidWZmZXJzIGFkZGVkIHRvIHRoZSByZWNlaXZlIHF1ZXVlLgogICogQG5vdGlmaWVkX2NvdW50OiBOdW1iZXIgb2YgYnVmZmVycyBnaXZlbiB0byBOSUMgKDw9IEBhZGRlZF9jb3VudCkuCiAgKiBAcmVtb3ZlZF9jb3VudDogTnVtYmVyIG9mIGJ1ZmZlcnMgcmVtb3ZlZCBmcm9tIHRoZSByZWNlaXZlIHF1ZXVlLgotICogQGFkZF9sb2NrOiBSZWNlaXZlIHF1ZXVlIGRlc2NyaXB0b3IgYWRkIHNwaW4gbG9jay4KLSAqCVRoaXMgbG9jayBtdXN0IGJlIGhlbGQgaW4gb3JkZXIgdG8gYWRkIGJ1ZmZlcnMgdG8gdGhlIFJYCi0gKglkZXNjcmlwdG9yIHJpbmcgKHJ4ZCBhbmQgYnVmZmVyKSBhbmQgdG8gdXBkYXRlIGFkZGVkX2NvdW50IChidXQKLSAqCW5vdCByZW1vdmVkX2NvdW50KS4KICAqIEBtYXhfZmlsbDogUlggZGVzY3JpcHRvciBtYXhpbXVtIGZpbGwgbGV2ZWwgKDw9IHJpbmcgc2l6ZSkKICAqIEBmYXN0X2ZpbGxfdHJpZ2dlcjogUlggZGVzY3JpcHRvciBmaWxsIGxldmVsIHRoYXQgd2lsbCB0cmlnZ2VyIGEgZmFzdCBmaWxsCiAgKgkoPD0gQG1heF9maWxsKQpAQCAtMjU5LDEyICsyNDUsNyBAQAogICoJb3ZlcmZsb3cgd2FzIG9ic2VydmVkLiAgSXQgc2hvdWxkIG5ldmVyIGJlIHNldC4KICAqIEBhbGxvY19wYWdlX2NvdW50OiBSWCBhbGxvY2F0aW9uIHN0cmF0ZWd5IGNvdW50ZXIuCiAgKiBAYWxsb2Nfc2tiX2NvdW50OiBSWCBhbGxvY2F0aW9uIHN0cmF0ZWd5IGNvdW50ZXIuCi0gKiBAd29yazogRGVzY3JpcHRvciBwdXNoIHdvcmsgdGhyZWFkCi0gKiBAYnVmX3BhZ2U6IFBhZ2UgZm9yIG5leHQgUlggYnVmZmVyLgotICoJV2UgY2FuIHVzZSBhIHNpbmdsZSBwYWdlIGZvciBtdWx0aXBsZSBSWCBidWZmZXJzLiBUaGlzIHRyYWNrcwotICoJdGhlIHJlbWFpbmluZyBzcGFjZSBpbiB0aGUgYWxsb2NhdGlvbi4KLSAqIEBidWZfZG1hX2FkZHI6IFBhZ2UncyBETUEgYWRkcmVzcy4KLSAqIEBidWZfZGF0YTogUGFnZSdzIGhvc3QgYWRkcmVzcy4KKyAqIEBzbG93X2ZpbGw6IFRpbWVyIHVzZWQgdG8gZGVmZXIgZWZ4X25pY19nZW5lcmF0ZV9maWxsX2V2ZW50KCkuCiAgKiBAZmx1c2hlZDogVXNlIHdoZW4gaGFuZGxpbmcgcXVldWUgZmx1c2hpbmcKICAqLwogc3RydWN0IGVmeF9yeF9xdWV1ZSB7CkBAIC0yNzcsNyArMjU4LDYgQEAKIAlpbnQgYWRkZWRfY291bnQ7CiAJaW50IG5vdGlmaWVkX2NvdW50OwogCWludCByZW1vdmVkX2NvdW50OwotCXNwaW5sb2NrX3QgYWRkX2xvY2s7CiAJdW5zaWduZWQgaW50IG1heF9maWxsOwogCXVuc2lnbmVkIGludCBmYXN0X2ZpbGxfdHJpZ2dlcjsKIAl1bnNpZ25lZCBpbnQgZmFzdF9maWxsX2xpbWl0OwpAQCAtMjg1LDEyICsyNjUsOSBAQAogCXVuc2lnbmVkIGludCBtaW5fb3ZlcmZpbGw7CiAJdW5zaWduZWQgaW50IGFsbG9jX3BhZ2VfY291bnQ7CiAJdW5zaWduZWQgaW50IGFsbG9jX3NrYl9jb3VudDsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CisJc3RydWN0IHRpbWVyX2xpc3Qgc2xvd19maWxsOwogCXVuc2lnbmVkIGludCBzbG93X2ZpbGxfY291bnQ7CiAKLQlzdHJ1Y3QgcGFnZSAqYnVmX3BhZ2U7Ci0JZG1hX2FkZHJfdCBidWZfZG1hX2FkZHI7Ci0JY2hhciAqYnVmX2RhdGE7CiAJZW51bSBlZnhfZmx1c2hfc3RhdGUgZmx1c2hlZDsKIH07CiAKQEAgLTMzNiw3ICszMTMsNyBAQAogICogQGV2ZW50cTogRXZlbnQgcXVldWUgYnVmZmVyCiAgKiBAZXZlbnRxX3JlYWRfcHRyOiBFdmVudCBxdWV1ZSByZWFkIHBvaW50ZXIKICAqIEBsYXN0X2V2ZW50cV9yZWFkX3B0cjogTGFzdCBldmVudCBxdWV1ZSByZWFkIHBvaW50ZXIgdmFsdWUuCi0gKiBAZXZlbnRxX21hZ2ljOiBFdmVudCBxdWV1ZSBtYWdpYyB2YWx1ZSBmb3IgZHJpdmVyLWdlbmVyYXRlZCB0ZXN0IGV2ZW50cworICogQG1hZ2ljX2NvdW50OiBFdmVudCBxdWV1ZSB0ZXN0IGV2ZW50IGNvdW50CiAgKiBAaXJxX2NvdW50OiBOdW1iZXIgb2YgSVJRcyBzaW5jZSBsYXN0IGFkYXB0aXZlIG1vZGVyYXRpb24gZGVjaXNpb24KICAqIEBpcnFfbW9kX3Njb3JlOiBJUlEgbW9kZXJhdGlvbiBzY29yZQogICogQHJ4X2FsbG9jX2xldmVsOiBXYXRlcm1hcmsgYmFzZWQgaGV1cmlzdGljIGNvdW50ZXIgZm9yIHB1c2hpbmcgZGVzY3JpcHRvcnMKQEAgLTM2Nyw3ICszNDQsNyBAQAogCXN0cnVjdCBlZnhfc3BlY2lhbF9idWZmZXIgZXZlbnRxOwogCXVuc2lnbmVkIGludCBldmVudHFfcmVhZF9wdHI7CiAJdW5zaWduZWQgaW50IGxhc3RfZXZlbnRxX3JlYWRfcHRyOwotCXVuc2lnbmVkIGludCBldmVudHFfbWFnaWM7CisJdW5zaWduZWQgaW50IG1hZ2ljX2NvdW50OwogCiAJdW5zaWduZWQgaW50IGlycV9jb3VudDsKIAl1bnNpZ25lZCBpbnQgaXJxX21vZF9zY29yZTsKQEAgLTY1OCw2ICs2MzUsNyBAQAogICogQGludGVycnVwdF9tb2RlOiBJbnRlcnJ1cHQgbW9kZQogICogQGlycV9yeF9hZGFwdGl2ZTogQWRhcHRpdmUgSVJRIG1vZGVyYXRpb24gZW5hYmxlZCBmb3IgUlggZXZlbnQgcXVldWVzCiAgKiBAaXJxX3J4X21vZGVyYXRpb246IElSUSBtb2RlcmF0aW9uIHRpbWUgZm9yIFJYIGV2ZW50IHF1ZXVlcworICogQG1zZ19lbmFibGU6IExvZyBtZXNzYWdlIGVuYWJsZSBmbGFncwogICogQHN0YXRlOiBEZXZpY2Ugc3RhdGUgZmxhZy4gU2VyaWFsaXNlZCBieSB0aGUgcnRubF9sb2NrLgogICogQHJlc2V0X3BlbmRpbmc6IFBlbmRpbmcgcmVzZXQgbWV0aG9kIChub3JtYWxseSBSRVNFVF9UWVBFX05PTkUpCiAgKiBAdHhfcXVldWU6IFRYIERNQSBxdWV1ZXMKQEAgLTY2OSw2ICs2NDcsNyBAQAogICogQG5fdHhfY2hhbm5lbHM6IE51bWJlciBvZiBjaGFubmVscyB1c2VkIGZvciBUWAogICogQHJ4X2J1ZmZlcl9sZW46IFJYIGJ1ZmZlciBsZW5ndGgKICAqIEByeF9idWZmZXJfb3JkZXI6IE9yZGVyIChsb2cyKSBvZiBudW1iZXIgb2YgcGFnZXMgZm9yIGVhY2ggUlggYnVmZmVyCisgKiBAcnhfaW5kaXJfdGFibGU6IEluZGlyZWN0aW9uIHRhYmxlIGZvciBSU1MKICAqIEBpbnRfZXJyb3JfY291bnQ6IE51bWJlciBvZiBpbnRlcm5hbCBlcnJvcnMgc2VlbiByZWNlbnRseQogICogQGludF9lcnJvcl9leHBpcmU6IFRpbWUgYXQgd2hpY2ggZXJyb3IgY291bnQgd2lsbCBiZSBleHBpcmVkCiAgKiBAaXJxX3N0YXR1czogSW50ZXJydXB0IHN0YXR1cyBidWZmZXIKQEAgLTc0MCw2ICs3MTksNyBAQAogCWVudW0gZWZ4X2ludF9tb2RlIGludGVycnVwdF9tb2RlOwogCWJvb2wgaXJxX3J4X2FkYXB0aXZlOwogCXVuc2lnbmVkIGludCBpcnFfcnhfbW9kZXJhdGlvbjsKKwl1MzIgbXNnX2VuYWJsZTsKIAogCWVudW0gbmljX3N0YXRlIHN0YXRlOwogCWVudW0gcmVzZXRfdHlwZSByZXNldF9wZW5kaW5nOwpAQCAtNzU0LDYgKzczNCw4IEBACiAJdW5zaWduZWQgbl90eF9jaGFubmVsczsKIAl1bnNpZ25lZCBpbnQgcnhfYnVmZmVyX2xlbjsKIAl1bnNpZ25lZCBpbnQgcnhfYnVmZmVyX29yZGVyOworCXU4IHJ4X2hhc2hfa2V5WzQwXTsKKwl1MzIgcnhfaW5kaXJfdGFibGVbMTI4XTsKIAogCXVuc2lnbmVkIGludF9lcnJvcl9jb3VudDsKIAl1bnNpZ25lZCBsb25nIGludF9lcnJvcl9leHBpcmU7CkBAIC04NjYsNyArODQ4LDggQEAKICAqIEBldnFfcHRyX3RibF9iYXNlOiBFdmVudCBxdWV1ZSBwb2ludGVyIHRhYmxlIGJhc2UgYWRkcmVzcwogICogQGV2cV9ycHRyX3RibF9iYXNlOiBFdmVudCBxdWV1ZSByZWFkLXBvaW50ZXIgdGFibGUgYmFzZSBhZGRyZXNzCiAgKiBAbWF4X2RtYV9tYXNrOiBNYXhpbXVtIHBvc3NpYmxlIERNQSBtYXNrCi0gKiBAcnhfYnVmZmVyX3BhZGRpbmc6IFBhZGRpbmcgYWRkZWQgdG8gZWFjaCBSWCBidWZmZXIKKyAqIEByeF9idWZmZXJfaGFzaF9zaXplOiBTaXplIG9mIGhhc2ggYXQgc3RhcnQgb2YgUlggYnVmZmVyCisgKiBAcnhfYnVmZmVyX3BhZGRpbmc6IFNpemUgb2YgcGFkZGluZyBhdCBlbmQgb2YgUlggYnVmZmVyCiAgKiBAbWF4X2ludGVycnVwdF9tb2RlOiBIaWdoZXN0IGNhcGFiaWxpdHkgaW50ZXJydXB0IG1vZGUgc3VwcG9ydGVkCiAgKglmcm9tICZlbnVtIGVmeF9pbml0X21vZGUuCiAgKiBAcGh5c19hZGRyX2NoYW5uZWxzOiBOdW1iZXIgb2YgY2hhbm5lbHMgd2l0aCBwaHlzaWNhbGx5IGFkZHJlc3NlZApAQCAtOTEwLDYgKzg5Myw3IEBACiAJdW5zaWduZWQgaW50IGV2cV9wdHJfdGJsX2Jhc2U7CiAJdW5zaWduZWQgaW50IGV2cV9ycHRyX3RibF9iYXNlOwogCXU2NCBtYXhfZG1hX21hc2s7CisJdW5zaWduZWQgaW50IHJ4X2J1ZmZlcl9oYXNoX3NpemU7CiAJdW5zaWduZWQgaW50IHJ4X2J1ZmZlcl9wYWRkaW5nOwogCXVuc2lnbmVkIGludCBtYXhfaW50ZXJydXB0X21vZGU7CiAJdW5zaWduZWQgaW50IHBoeXNfYWRkcl9jaGFubmVsczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9uaWMuYyBiL2RyaXZlcnMvbmV0L3NmYy9uaWMuYwppbmRleCA1ZDNhYWVjLi5mNTk1ZDkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbmljLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL25pYy5jCkBAIC03OSw2ICs3OSwxNCBAQAogLyogRGVwdGggb2YgUlggZmx1c2ggcmVxdWVzdCBmaWZvICovCiAjZGVmaW5lIEVGWF9SWF9GTFVTSF9DT1VOVCA0CiAKKy8qIEdlbmVyYXRlZCBldmVudCBjb2RlIGZvciBlZnhfZ2VuZXJhdGVfdGVzdF9ldmVudCgpICovCisjZGVmaW5lIEVGWF9DSEFOTkVMX01BR0lDX1RFU1QoX2NoYW5uZWwpCVwKKwkoMHgwMDAxMDEwMCArIChfY2hhbm5lbCktPmNoYW5uZWwpCisKKy8qIEdlbmVyYXRlZCBldmVudCBjb2RlIGZvciBlZnhfZ2VuZXJhdGVfZmlsbF9ldmVudCgpICovCisjZGVmaW5lIEVGWF9DSEFOTkVMX01BR0lDX0ZJTEwoX2NoYW5uZWwpCVwKKwkoMHgwMDAxMDIwMCArIChfY2hhbm5lbCktPmNoYW5uZWwpCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFNvbGFyc3Rvcm0gaGFyZHdhcmUgYWNjZXNzCkBAIC0xNzEsOSArMTc5LDEwIEBACiAJcmV0dXJuIDA7CiAKIGZhaWw6Ci0JRUZYX0VSUihlZngsICJ3cm90ZSAiRUZYX09XT1JEX0ZNVCIgcmVhZCAiRUZYX09XT1JEX0ZNVAotCQkiIGF0IGFkZHJlc3MgMHgleCBtYXNrICJFRlhfT1dPUkRfRk1UIlxuIiwgRUZYX09XT1JEX1ZBTChyZWcpLAotCQlFRlhfT1dPUkRfVkFMKGJ1ZiksIGFkZHJlc3MsIEVGWF9PV09SRF9WQUwobWFzaykpOworCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsCisJCSAgIndyb3RlICJFRlhfT1dPUkRfRk1UIiByZWFkICJFRlhfT1dPUkRfRk1UCisJCSAgIiBhdCBhZGRyZXNzIDB4JXggbWFzayAiRUZYX09XT1JEX0ZNVCJcbiIsIEVGWF9PV09SRF9WQUwocmVnKSwKKwkJICBFRlhfT1dPUkRfVkFMKGJ1ZiksIGFkZHJlc3MsIEVGWF9PV09SRF9WQUwobWFzaykpOwogCXJldHVybiAtRUlPOwogfQogCkBAIC0yMDYsOCArMjE1LDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgYnVmZmVyLT5lbnRyaWVzOyBpKyspIHsKIAkJaW5kZXggPSBidWZmZXItPmluZGV4ICsgaTsKIAkJZG1hX2FkZHIgPSBidWZmZXItPmRtYV9hZGRyICsgKGkgKiA0MDk2KTsKLQkJRUZYX0xPRyhlZngsICJtYXBwaW5nIHNwZWNpYWwgYnVmZmVyICVkIGF0ICVsbHhcbiIsCi0JCQlpbmRleCwgKHVuc2lnbmVkIGxvbmcgbG9uZylkbWFfYWRkcik7CisJCW5ldGlmX2RiZyhlZngsIHByb2JlLCBlZngtPm5ldF9kZXYsCisJCQkgICJtYXBwaW5nIHNwZWNpYWwgYnVmZmVyICVkIGF0ICVsbHhcbiIsCisJCQkgIGluZGV4LCAodW5zaWduZWQgbG9uZyBsb25nKWRtYV9hZGRyKTsKIAkJRUZYX1BPUFVMQVRFX1FXT1JEXzMoYnVmX2Rlc2MsCiAJCQkJICAgICBGUkZfQVpfQlVGX0FEUl9SRUdJT04sIDAsCiAJCQkJICAgICBGUkZfQVpfQlVGX0FEUl9GQlVGLCBkbWFfYWRkciA+PiAxMiwKQEAgLTIyNyw4ICsyMzcsOCBAQAogCWlmICghYnVmZmVyLT5lbnRyaWVzKQogCQlyZXR1cm47CiAKLQlFRlhfTE9HKGVmeCwgInVubWFwcGluZyBzcGVjaWFsIGJ1ZmZlcnMgJWQtJWRcbiIsCi0JCWJ1ZmZlci0+aW5kZXgsIGJ1ZmZlci0+aW5kZXggKyBidWZmZXItPmVudHJpZXMgLSAxKTsKKwluZXRpZl9kYmcoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LCAidW5tYXBwaW5nIHNwZWNpYWwgYnVmZmVycyAlZC0lZFxuIiwKKwkJICBidWZmZXItPmluZGV4LCBidWZmZXItPmluZGV4ICsgYnVmZmVyLT5lbnRyaWVzIC0gMSk7CiAKIAlFRlhfUE9QVUxBVEVfT1dPUkRfNChidWZfdGJsX3VwZCwKIAkJCSAgICAgRlJGX0FaX0JVRl9VUERfQ01ELCAwLApAQCAtMjY4LDExICsyNzgsMTIgQEAKIAlidWZmZXItPmluZGV4ID0gZWZ4LT5uZXh0X2J1ZmZlcl90YWJsZTsKIAllZngtPm5leHRfYnVmZmVyX3RhYmxlICs9IGJ1ZmZlci0+ZW50cmllczsKIAotCUVGWF9MT0coZWZ4LCAiYWxsb2NhdGluZyBzcGVjaWFsIGJ1ZmZlcnMgJWQtJWQgYXQgJWxseCsleCAiCi0JCSIodmlydCAlcCBwaHlzICVsbHgpXG4iLCBidWZmZXItPmluZGV4LAotCQlidWZmZXItPmluZGV4ICsgYnVmZmVyLT5lbnRyaWVzIC0gMSwKLQkJKHU2NClidWZmZXItPmRtYV9hZGRyLCBsZW4sCi0JCWJ1ZmZlci0+YWRkciwgKHU2NCl2aXJ0X3RvX3BoeXMoYnVmZmVyLT5hZGRyKSk7CisJbmV0aWZfZGJnKGVmeCwgcHJvYmUsIGVmeC0+bmV0X2RldiwKKwkJICAiYWxsb2NhdGluZyBzcGVjaWFsIGJ1ZmZlcnMgJWQtJWQgYXQgJWxseCsleCAiCisJCSAgIih2aXJ0ICVwIHBoeXMgJWxseClcbiIsIGJ1ZmZlci0+aW5kZXgsCisJCSAgYnVmZmVyLT5pbmRleCArIGJ1ZmZlci0+ZW50cmllcyAtIDEsCisJCSAgKHU2NClidWZmZXItPmRtYV9hZGRyLCBsZW4sCisJCSAgYnVmZmVyLT5hZGRyLCAodTY0KXZpcnRfdG9fcGh5cyhidWZmZXItPmFkZHIpKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjgzLDExICsyOTQsMTIgQEAKIAlpZiAoIWJ1ZmZlci0+YWRkcikKIAkJcmV0dXJuOwogCi0JRUZYX0xPRyhlZngsICJkZWFsbG9jYXRpbmcgc3BlY2lhbCBidWZmZXJzICVkLSVkIGF0ICVsbHgrJXggIgotCQkiKHZpcnQgJXAgcGh5cyAlbGx4KVxuIiwgYnVmZmVyLT5pbmRleCwKLQkJYnVmZmVyLT5pbmRleCArIGJ1ZmZlci0+ZW50cmllcyAtIDEsCi0JCSh1NjQpYnVmZmVyLT5kbWFfYWRkciwgYnVmZmVyLT5sZW4sCi0JCWJ1ZmZlci0+YWRkciwgKHU2NCl2aXJ0X3RvX3BoeXMoYnVmZmVyLT5hZGRyKSk7CisJbmV0aWZfZGJnKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJICAiZGVhbGxvY2F0aW5nIHNwZWNpYWwgYnVmZmVycyAlZC0lZCBhdCAlbGx4KyV4ICIKKwkJICAiKHZpcnQgJXAgcGh5cyAlbGx4KVxuIiwgYnVmZmVyLT5pbmRleCwKKwkJICBidWZmZXItPmluZGV4ICsgYnVmZmVyLT5lbnRyaWVzIC0gMSwKKwkJICAodTY0KWJ1ZmZlci0+ZG1hX2FkZHIsIGJ1ZmZlci0+bGVuLAorCQkgIGJ1ZmZlci0+YWRkciwgKHU2NCl2aXJ0X3RvX3BoeXMoYnVmZmVyLT5hZGRyKSk7CiAKIAlwY2lfZnJlZV9jb25zaXN0ZW50KGVmeC0+cGNpX2RldiwgYnVmZmVyLT5sZW4sIGJ1ZmZlci0+YWRkciwKIAkJCSAgICBidWZmZXItPmRtYV9hZGRyKTsKQEAgLTU0Nyw5ICs1NTksMTAgQEAKIAlib29sIGlzX2IwID0gZWZ4X25pY19yZXYoZWZ4KSA+PSBFRlhfUkVWX0ZBTENPTl9CMDsKIAlib29sIGlzY3NpX2RpZ2VzdF9lbiA9IGlzX2IwOwogCi0JRUZYX0xPRyhlZngsICJSWCBxdWV1ZSAlZCByaW5nIGluIHNwZWNpYWwgYnVmZmVycyAlZC0lZFxuIiwKLQkJcnhfcXVldWUtPnF1ZXVlLCByeF9xdWV1ZS0+cnhkLmluZGV4LAotCQlyeF9xdWV1ZS0+cnhkLmluZGV4ICsgcnhfcXVldWUtPnJ4ZC5lbnRyaWVzIC0gMSk7CisJbmV0aWZfZGJnKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJICAiUlggcXVldWUgJWQgcmluZyBpbiBzcGVjaWFsIGJ1ZmZlcnMgJWQtJWRcbiIsCisJCSAgcnhfcXVldWUtPnF1ZXVlLCByeF9xdWV1ZS0+cnhkLmluZGV4LAorCQkgIHJ4X3F1ZXVlLT5yeGQuaW5kZXggKyByeF9xdWV1ZS0+cnhkLmVudHJpZXMgLSAxKTsKIAogCXJ4X3F1ZXVlLT5mbHVzaGVkID0gRkxVU0hfTk9ORTsKIApAQCAtNjg2LDkgKzY5OSwxMCBAQAogCQkgICBFRlhfV09SS0FST1VORF8xMDcyNyhlZngpKSB7CiAJCWVmeF9zY2hlZHVsZV9yZXNldChlZngsIFJFU0VUX1RZUEVfVFhfREVTQ19GRVRDSCk7CiAJfSBlbHNlIHsKLQkJRUZYX0VSUihlZngsICJjaGFubmVsICVkIHVuZXhwZWN0ZWQgVFggZXZlbnQgIgotCQkJRUZYX1FXT1JEX0ZNVCJcbiIsIGNoYW5uZWwtPmNoYW5uZWwsCi0JCQlFRlhfUVdPUkRfVkFMKCpldmVudCkpOworCQluZXRpZl9lcnIoZWZ4LCB0eF9lcnIsIGVmeC0+bmV0X2RldiwKKwkJCSAgImNoYW5uZWwgJWQgdW5leHBlY3RlZCBUWCBldmVudCAiCisJCQkgIEVGWF9RV09SRF9GTVQiXG4iLCBjaGFubmVsLT5jaGFubmVsLAorCQkJICBFRlhfUVdPUkRfVkFMKCpldmVudCkpOwogCX0KIAogCXJldHVybiB0eF9wYWNrZXRzOwpAQCAtNzUxLDIwICs3NjUsMjEgQEAKIAkgKiB0byBhIEZJRk8gb3ZlcmZsb3cuCiAJICovCiAjaWZkZWYgRUZYX0VOQUJMRV9ERUJVRwotCWlmIChyeF9ldl9vdGhlcl9lcnIpIHsKLQkJRUZYX0lORk9fUkwoZWZ4LCAiIFJYIHF1ZXVlICVkIHVuZXhwZWN0ZWQgUlggZXZlbnQgIgotCQkJICAgIEVGWF9RV09SRF9GTVQgIiVzJXMlcyVzJXMlcyVzJXNcbiIsCi0JCQkgICAgcnhfcXVldWUtPnF1ZXVlLCBFRlhfUVdPUkRfVkFMKCpldmVudCksCi0JCQkgICAgcnhfZXZfYnVmX293bmVyX2lkX2VyciA/ICIgW09XTkVSX0lEX0VSUl0iIDogIiIsCi0JCQkgICAgcnhfZXZfaXBfaGRyX2Noa3N1bV9lcnIgPwotCQkJICAgICIgW0lQX0hEUl9DSEtTVU1fRVJSXSIgOiAiIiwKLQkJCSAgICByeF9ldl90Y3BfdWRwX2Noa3N1bV9lcnIgPwotCQkJICAgICIgW1RDUF9VRFBfQ0hLU1VNX0VSUl0iIDogIiIsCi0JCQkgICAgcnhfZXZfZXRoX2NyY19lcnIgPyAiIFtFVEhfQ1JDX0VSUl0iIDogIiIsCi0JCQkgICAgcnhfZXZfZnJtX3RydW5jID8gIiBbRlJNX1RSVU5DXSIgOiAiIiwKLQkJCSAgICByeF9ldl9kcmliX25pYiA/ICIgW0RSSUJfTklCXSIgOiAiIiwKLQkJCSAgICByeF9ldl90b2JlX2Rpc2MgPyAiIFtUT0JFX0RJU0NdIiA6ICIiLAotCQkJICAgIHJ4X2V2X3BhdXNlX2ZybSA/ICIgW1BBVVNFXSIgOiAiIik7CisJaWYgKHJ4X2V2X290aGVyX2VyciAmJiBuZXRfcmF0ZWxpbWl0KCkpIHsKKwkJbmV0aWZfZGJnKGVmeCwgcnhfZXJyLCBlZngtPm5ldF9kZXYsCisJCQkgICIgUlggcXVldWUgJWQgdW5leHBlY3RlZCBSWCBldmVudCAiCisJCQkgIEVGWF9RV09SRF9GTVQgIiVzJXMlcyVzJXMlcyVzJXNcbiIsCisJCQkgIHJ4X3F1ZXVlLT5xdWV1ZSwgRUZYX1FXT1JEX1ZBTCgqZXZlbnQpLAorCQkJICByeF9ldl9idWZfb3duZXJfaWRfZXJyID8gIiBbT1dORVJfSURfRVJSXSIgOiAiIiwKKwkJCSAgcnhfZXZfaXBfaGRyX2Noa3N1bV9lcnIgPworCQkJICAiIFtJUF9IRFJfQ0hLU1VNX0VSUl0iIDogIiIsCisJCQkgIHJ4X2V2X3RjcF91ZHBfY2hrc3VtX2VyciA/CisJCQkgICIgW1RDUF9VRFBfQ0hLU1VNX0VSUl0iIDogIiIsCisJCQkgIHJ4X2V2X2V0aF9jcmNfZXJyID8gIiBbRVRIX0NSQ19FUlJdIiA6ICIiLAorCQkJICByeF9ldl9mcm1fdHJ1bmMgPyAiIFtGUk1fVFJVTkNdIiA6ICIiLAorCQkJICByeF9ldl9kcmliX25pYiA/ICIgW0RSSUJfTklCXSIgOiAiIiwKKwkJCSAgcnhfZXZfdG9iZV9kaXNjID8gIiBbVE9CRV9ESVNDXSIgOiAiIiwKKwkJCSAgcnhfZXZfcGF1c2VfZnJtID8gIiBbUEFVU0VdIiA6ICIiKTsKIAl9CiAjZW5kaWYKIH0KQEAgLTc3OCw4ICs3OTMsOSBAQAogCiAJZXhwZWN0ZWQgPSByeF9xdWV1ZS0+cmVtb3ZlZF9jb3VudCAmIEVGWF9SWFFfTUFTSzsKIAlkcm9wcGVkID0gKGluZGV4IC0gZXhwZWN0ZWQpICYgRUZYX1JYUV9NQVNLOwotCUVGWF9JTkZPKGVmeCwgImRyb3BwZWQgJWQgZXZlbnRzIChpbmRleD0lZCBleHBlY3RlZD0lZClcbiIsCi0JCWRyb3BwZWQsIGluZGV4LCBleHBlY3RlZCk7CisJbmV0aWZfaW5mbyhlZngsIHJ4X2VyciwgZWZ4LT5uZXRfZGV2LAorCQkgICAiZHJvcHBlZCAlZCBldmVudHMgKGluZGV4PSVkIGV4cGVjdGVkPSVkKVxuIiwKKwkJICAgZHJvcHBlZCwgaW5kZXgsIGV4cGVjdGVkKTsKIAogCWVmeF9zY2hlZHVsZV9yZXNldChlZngsIEVGWF9XT1JLQVJPVU5EXzU2NzYoZWZ4KSA/CiAJCQkgICBSRVNFVF9UWVBFX1JYX1JFQ09WRVJZIDogUkVTRVRfVFlQRV9ESVNBQkxFKTsKQEAgLTg1MCw2ICs4NjYsMjYgQEAKIAkJICAgICAgY2hlY2tzdW1tZWQsIGRpc2NhcmQpOwogfQogCitzdGF0aWMgdm9pZAorZWZ4X2hhbmRsZV9nZW5lcmF0ZWRfZXZlbnQoc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsLCBlZnhfcXdvcmRfdCAqZXZlbnQpCit7CisJc3RydWN0IGVmeF9uaWMgKmVmeCA9IGNoYW5uZWwtPmVmeDsKKwl1bnNpZ25lZCBjb2RlOworCisJY29kZSA9IEVGWF9RV09SRF9GSUVMRCgqZXZlbnQsIEZTRl9BWl9EUlZfR0VOX0VWX01BR0lDKTsKKwlpZiAoY29kZSA9PSBFRlhfQ0hBTk5FTF9NQUdJQ19URVNUKGNoYW5uZWwpKQorCQkrK2NoYW5uZWwtPm1hZ2ljX2NvdW50OworCWVsc2UgaWYgKGNvZGUgPT0gRUZYX0NIQU5ORUxfTUFHSUNfRklMTChjaGFubmVsKSkKKwkJLyogVGhlIHF1ZXVlIG11c3QgYmUgZW1wdHksIHNvIHdlIHdvbid0IHJlY2VpdmUgYW55IHJ4CisJCSAqIGV2ZW50cywgc28gZWZ4X3Byb2Nlc3NfY2hhbm5lbCgpIHdvbid0IHJlZmlsbCB0aGUKKwkJICogcXVldWUuIFJlZmlsbCBpdCBoZXJlICovCisJCWVmeF9mYXN0X3B1c2hfcnhfZGVzY3JpcHRvcnMoJmVmeC0+cnhfcXVldWVbY2hhbm5lbC0+Y2hhbm5lbF0pOworCWVsc2UKKwkJbmV0aWZfZGJnKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwgImNoYW5uZWwgJWQgcmVjZWl2ZWQgIgorCQkJICAiZ2VuZXJhdGVkIGV2ZW50ICJFRlhfUVdPUkRfRk1UIlxuIiwKKwkJCSAgY2hhbm5lbC0+Y2hhbm5lbCwgRUZYX1FXT1JEX1ZBTCgqZXZlbnQpKTsKK30KKwogLyogR2xvYmFsIGV2ZW50cyBhcmUgYmFzaWNhbGx5IFBIWSBldmVudHMgKi8KIHN0YXRpYyB2b2lkCiBlZnhfaGFuZGxlX2dsb2JhbF9ldmVudChzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwsIGVmeF9xd29yZF90ICpldmVudCkKQEAgLTg3Myw4ICs5MDksOSBAQAogCWlmIChlZnhfbmljX3JldihlZngpIDw9IEVGWF9SRVZfRkFMQ09OX0ExID8KIAkgICAgRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwgRlNGX0FBX0dMQl9FVl9SWF9SRUNPVkVSWSkgOgogCSAgICBFRlhfUVdPUkRfRklFTEQoKmV2ZW50LCBGU0ZfQkJfR0xCX0VWX1JYX1JFQ09WRVJZKSkgewotCQlFRlhfRVJSKGVmeCwgImNoYW5uZWwgJWQgc2VlbiBnbG9iYWwgUlhfUkVTRVQgIgotCQkJImV2ZW50LiBSZXNldHRpbmcuXG4iLCBjaGFubmVsLT5jaGFubmVsKTsKKwkJbmV0aWZfZXJyKGVmeCwgcnhfZXJyLCBlZngtPm5ldF9kZXYsCisJCQkgICJjaGFubmVsICVkIHNlZW4gZ2xvYmFsIFJYX1JFU0VUIGV2ZW50LiBSZXNldHRpbmcuXG4iLAorCQkJICBjaGFubmVsLT5jaGFubmVsKTsKIAogCQlhdG9taWNfaW5jKCZlZngtPnJ4X3Jlc2V0KTsKIAkJZWZ4X3NjaGVkdWxlX3Jlc2V0KGVmeCwgRUZYX1dPUktBUk9VTkRfNjU1NShlZngpID8KQEAgLTg4Myw5ICs5MjAsMTAgQEAKIAl9CiAKIAlpZiAoIWhhbmRsZWQpCi0JCUVGWF9FUlIoZWZ4LCAiY2hhbm5lbCAlZCB1bmtub3duIGdsb2JhbCBldmVudCAiCi0JCQlFRlhfUVdPUkRfRk1UICJcbiIsIGNoYW5uZWwtPmNoYW5uZWwsCi0JCQlFRlhfUVdPUkRfVkFMKCpldmVudCkpOworCQluZXRpZl9lcnIoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LAorCQkJICAiY2hhbm5lbCAlZCB1bmtub3duIGdsb2JhbCBldmVudCAiCisJCQkgIEVGWF9RV09SRF9GTVQgIlxuIiwgY2hhbm5lbC0+Y2hhbm5lbCwKKwkJCSAgRUZYX1FXT1JEX1ZBTCgqZXZlbnQpKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTkwMCwzMSArOTM4LDM1IEBACiAKIAlzd2l0Y2ggKGV2X3N1Yl9jb2RlKSB7CiAJY2FzZSBGU0VfQVpfVFhfREVTQ1FfRkxTX0RPTkVfRVY6Ci0JCUVGWF9UUkFDRShlZngsICJjaGFubmVsICVkIFRYUSAlZCBmbHVzaGVkXG4iLAotCQkJICBjaGFubmVsLT5jaGFubmVsLCBldl9zdWJfZGF0YSk7CisJCW5ldGlmX3ZkYmcoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LCAiY2hhbm5lbCAlZCBUWFEgJWQgZmx1c2hlZFxuIiwKKwkJCSAgIGNoYW5uZWwtPmNoYW5uZWwsIGV2X3N1Yl9kYXRhKTsKIAkJYnJlYWs7CiAJY2FzZSBGU0VfQVpfUlhfREVTQ1FfRkxTX0RPTkVfRVY6Ci0JCUVGWF9UUkFDRShlZngsICJjaGFubmVsICVkIFJYUSAlZCBmbHVzaGVkXG4iLAotCQkJICBjaGFubmVsLT5jaGFubmVsLCBldl9zdWJfZGF0YSk7CisJCW5ldGlmX3ZkYmcoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LCAiY2hhbm5lbCAlZCBSWFEgJWQgZmx1c2hlZFxuIiwKKwkJCSAgIGNoYW5uZWwtPmNoYW5uZWwsIGV2X3N1Yl9kYXRhKTsKIAkJYnJlYWs7CiAJY2FzZSBGU0VfQVpfRVZRX0lOSVRfRE9ORV9FVjoKLQkJRUZYX0xPRyhlZngsICJjaGFubmVsICVkIEVWUSAlZCBpbml0aWFsaXNlZFxuIiwKLQkJCWNoYW5uZWwtPmNoYW5uZWwsIGV2X3N1Yl9kYXRhKTsKKwkJbmV0aWZfZGJnKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJCSAgImNoYW5uZWwgJWQgRVZRICVkIGluaXRpYWxpc2VkXG4iLAorCQkJICBjaGFubmVsLT5jaGFubmVsLCBldl9zdWJfZGF0YSk7CiAJCWJyZWFrOwogCWNhc2UgRlNFX0FaX1NSTV9VUERfRE9ORV9FVjoKLQkJRUZYX1RSQUNFKGVmeCwgImNoYW5uZWwgJWQgU1JBTSB1cGRhdGUgZG9uZVxuIiwKLQkJCSAgY2hhbm5lbC0+Y2hhbm5lbCk7CisJCW5ldGlmX3ZkYmcoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LAorCQkJICAgImNoYW5uZWwgJWQgU1JBTSB1cGRhdGUgZG9uZVxuIiwgY2hhbm5lbC0+Y2hhbm5lbCk7CiAJCWJyZWFrOwogCWNhc2UgRlNFX0FaX1dBS0VfVVBfRVY6Ci0JCUVGWF9UUkFDRShlZngsICJjaGFubmVsICVkIFJYUSAlZCB3YWtldXAgZXZlbnRcbiIsCi0JCQkgIGNoYW5uZWwtPmNoYW5uZWwsIGV2X3N1Yl9kYXRhKTsKKwkJbmV0aWZfdmRiZyhlZngsIGh3LCBlZngtPm5ldF9kZXYsCisJCQkgICAiY2hhbm5lbCAlZCBSWFEgJWQgd2FrZXVwIGV2ZW50XG4iLAorCQkJICAgY2hhbm5lbC0+Y2hhbm5lbCwgZXZfc3ViX2RhdGEpOwogCQlicmVhazsKIAljYXNlIEZTRV9BWl9USU1FUl9FVjoKLQkJRUZYX1RSQUNFKGVmeCwgImNoYW5uZWwgJWQgUlggcXVldWUgJWQgdGltZXIgZXhwaXJlZFxuIiwKLQkJCSAgY2hhbm5lbC0+Y2hhbm5lbCwgZXZfc3ViX2RhdGEpOworCQluZXRpZl92ZGJnKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJCSAgICJjaGFubmVsICVkIFJYIHF1ZXVlICVkIHRpbWVyIGV4cGlyZWRcbiIsCisJCQkgICBjaGFubmVsLT5jaGFubmVsLCBldl9zdWJfZGF0YSk7CiAJCWJyZWFrOwogCWNhc2UgRlNFX0FBX1JYX1JFQ09WRVJfRVY6Ci0JCUVGWF9FUlIoZWZ4LCAiY2hhbm5lbCAlZCBzZWVuIERSSVZFUiBSWF9SRVNFVCBldmVudC4gIgorCQluZXRpZl9lcnIoZWZ4LCByeF9lcnIsIGVmeC0+bmV0X2RldiwKKwkJCSAgImNoYW5uZWwgJWQgc2VlbiBEUklWRVIgUlhfUkVTRVQgZXZlbnQuICIKIAkJCSJSZXNldHRpbmcuXG4iLCBjaGFubmVsLT5jaGFubmVsKTsKIAkJYXRvbWljX2luYygmZWZ4LT5yeF9yZXNldCk7CiAJCWVmeF9zY2hlZHVsZV9yZXNldChlZngsCkBAIC05MzMsMTkgKzk3NSwyMiBAQAogCQkJCSAgIFJFU0VUX1RZUEVfRElTQUJMRSk7CiAJCWJyZWFrOwogCWNhc2UgRlNFX0JaX1JYX0RTQ19FUlJPUl9FVjoKLQkJRUZYX0VSUihlZngsICJSWCBETUEgUSAlZCByZXBvcnRzIGRlc2NyaXB0b3IgZmV0Y2ggZXJyb3IuIgotCQkJIiBSWCBRICVkIGlzIGRpc2FibGVkLlxuIiwgZXZfc3ViX2RhdGEsIGV2X3N1Yl9kYXRhKTsKKwkJbmV0aWZfZXJyKGVmeCwgcnhfZXJyLCBlZngtPm5ldF9kZXYsCisJCQkgICJSWCBETUEgUSAlZCByZXBvcnRzIGRlc2NyaXB0b3IgZmV0Y2ggZXJyb3IuIgorCQkJICAiIFJYIFEgJWQgaXMgZGlzYWJsZWQuXG4iLCBldl9zdWJfZGF0YSwgZXZfc3ViX2RhdGEpOwogCQllZnhfc2NoZWR1bGVfcmVzZXQoZWZ4LCBSRVNFVF9UWVBFX1JYX0RFU0NfRkVUQ0gpOwogCQlicmVhazsKIAljYXNlIEZTRV9CWl9UWF9EU0NfRVJST1JfRVY6Ci0JCUVGWF9FUlIoZWZ4LCAiVFggRE1BIFEgJWQgcmVwb3J0cyBkZXNjcmlwdG9yIGZldGNoIGVycm9yLiIKLQkJCSIgVFggUSAlZCBpcyBkaXNhYmxlZC5cbiIsIGV2X3N1Yl9kYXRhLCBldl9zdWJfZGF0YSk7CisJCW5ldGlmX2VycihlZngsIHR4X2VyciwgZWZ4LT5uZXRfZGV2LAorCQkJICAiVFggRE1BIFEgJWQgcmVwb3J0cyBkZXNjcmlwdG9yIGZldGNoIGVycm9yLiIKKwkJCSAgIiBUWCBRICVkIGlzIGRpc2FibGVkLlxuIiwgZXZfc3ViX2RhdGEsIGV2X3N1Yl9kYXRhKTsKIAkJZWZ4X3NjaGVkdWxlX3Jlc2V0KGVmeCwgUkVTRVRfVFlQRV9UWF9ERVNDX0ZFVENIKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJRUZYX1RSQUNFKGVmeCwgImNoYW5uZWwgJWQgdW5rbm93biBkcml2ZXIgZXZlbnQgY29kZSAlZCAiCi0JCQkgICJkYXRhICUwNHhcbiIsIGNoYW5uZWwtPmNoYW5uZWwsIGV2X3N1Yl9jb2RlLAotCQkJICBldl9zdWJfZGF0YSk7CisJCW5ldGlmX3ZkYmcoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LAorCQkJICAgImNoYW5uZWwgJWQgdW5rbm93biBkcml2ZXIgZXZlbnQgY29kZSAlZCAiCisJCQkgICAiZGF0YSAlMDR4XG4iLCBjaGFubmVsLT5jaGFubmVsLCBldl9zdWJfY29kZSwKKwkJCSAgIGV2X3N1Yl9kYXRhKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtOTY4LDggKzEwMTMsOSBAQAogCQkJLyogRW5kIG9mIGV2ZW50cyAqLwogCQkJYnJlYWs7CiAKLQkJRUZYX1RSQUNFKGNoYW5uZWwtPmVmeCwgImNoYW5uZWwgJWQgZXZlbnQgaXMgIkVGWF9RV09SRF9GTVQiXG4iLAotCQkJICBjaGFubmVsLT5jaGFubmVsLCBFRlhfUVdPUkRfVkFMKGV2ZW50KSk7CisJCW5ldGlmX3ZkYmcoY2hhbm5lbC0+ZWZ4LCBpbnRyLCBjaGFubmVsLT5lZngtPm5ldF9kZXYsCisJCQkgICAiY2hhbm5lbCAlZCBldmVudCBpcyAiRUZYX1FXT1JEX0ZNVCJcbiIsCisJCQkgICBjaGFubmVsLT5jaGFubmVsLCBFRlhfUVdPUkRfVkFMKGV2ZW50KSk7CiAKIAkJLyogQ2xlYXIgdGhpcyBldmVudCBieSBtYXJraW5nIGl0IGFsbCBvbmVzICovCiAJCUVGWF9TRVRfUVdPUkQoKnBfZXZlbnQpOwpAQCAtOTkzLDExICsxMDM5LDcgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIEZTRV9BWl9FVl9DT0RFX0RSVl9HRU5fRVY6Ci0JCQljaGFubmVsLT5ldmVudHFfbWFnaWMgPSBFRlhfUVdPUkRfRklFTEQoCi0JCQkJZXZlbnQsIEZTRl9BWl9EUlZfR0VOX0VWX01BR0lDKTsKLQkJCUVGWF9MT0coY2hhbm5lbC0+ZWZ4LCAiY2hhbm5lbCAlZCByZWNlaXZlZCBnZW5lcmF0ZWQgIgotCQkJCSJldmVudCAiRUZYX1FXT1JEX0ZNVCJcbiIsIGNoYW5uZWwtPmNoYW5uZWwsCi0JCQkJRUZYX1FXT1JEX1ZBTChldmVudCkpOworCQkJZWZ4X2hhbmRsZV9nZW5lcmF0ZWRfZXZlbnQoY2hhbm5lbCwgJmV2ZW50KTsKIAkJCWJyZWFrOwogCQljYXNlIEZTRV9BWl9FVl9DT0RFX0dMT0JBTF9FVjoKIAkJCWVmeF9oYW5kbGVfZ2xvYmFsX2V2ZW50KGNoYW5uZWwsICZldmVudCk7CkBAIC0xMDA5LDkgKzEwNTEsMTAgQEAKIAkJCWVmeF9tY2RpX3Byb2Nlc3NfZXZlbnQoY2hhbm5lbCwgJmV2ZW50KTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJRUZYX0VSUihjaGFubmVsLT5lZngsICJjaGFubmVsICVkIHVua25vd24gZXZlbnQgdHlwZSAlZCIKLQkJCQkiIChkYXRhICIgRUZYX1FXT1JEX0ZNVCAiKVxuIiwgY2hhbm5lbC0+Y2hhbm5lbCwKLQkJCQlldl9jb2RlLCBFRlhfUVdPUkRfVkFMKGV2ZW50KSk7CisJCQluZXRpZl9lcnIoY2hhbm5lbC0+ZWZ4LCBodywgY2hhbm5lbC0+ZWZ4LT5uZXRfZGV2LAorCQkJCSAgImNoYW5uZWwgJWQgdW5rbm93biBldmVudCB0eXBlICVkIChkYXRhICIKKwkJCQkgIEVGWF9RV09SRF9GTVQgIilcbiIsIGNoYW5uZWwtPmNoYW5uZWwsCisJCQkJICBldl9jb2RlLCBFRlhfUVdPUkRfVkFMKGV2ZW50KSk7CiAJCX0KIAl9CiAKQEAgLTEwMzYsOSArMTA3OSwxMCBAQAogCWVmeF9vd29yZF90IHJlZzsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gY2hhbm5lbC0+ZWZ4OwogCi0JRUZYX0xPRyhlZngsICJjaGFubmVsICVkIGV2ZW50IHF1ZXVlIGluIHNwZWNpYWwgYnVmZmVycyAlZC0lZFxuIiwKLQkJY2hhbm5lbC0+Y2hhbm5lbCwgY2hhbm5lbC0+ZXZlbnRxLmluZGV4LAotCQljaGFubmVsLT5ldmVudHEuaW5kZXggKyBjaGFubmVsLT5ldmVudHEuZW50cmllcyAtIDEpOworCW5ldGlmX2RiZyhlZngsIGh3LCBlZngtPm5ldF9kZXYsCisJCSAgImNoYW5uZWwgJWQgZXZlbnQgcXVldWUgaW4gc3BlY2lhbCBidWZmZXJzICVkLSVkXG4iLAorCQkgIGNoYW5uZWwtPmNoYW5uZWwsIGNoYW5uZWwtPmV2ZW50cS5pbmRleCwKKwkJICBjaGFubmVsLT5ldmVudHEuaW5kZXggKyBjaGFubmVsLT5ldmVudHEuZW50cmllcyAtIDEpOwogCiAJaWYgKGVmeF9uaWNfcmV2KGVmeCkgPj0gRUZYX1JFVl9TSUVOQV9BMCkgewogCQlFRlhfUE9QVUxBVEVfT1dPUkRfMyhyZWcsCkBAIC0xMDg4LDEyICsxMTMyLDIwIEBACiB9CiAKIAotLyogR2VuZXJhdGVzIGEgdGVzdCBldmVudCBvbiB0aGUgZXZlbnQgcXVldWUuICBBIHN1YnNlcXVlbnQgY2FsbCB0bwotICogcHJvY2Vzc19ldmVudHEoKSBzaG91bGQgcGljayB1cCB0aGUgZXZlbnQgYW5kIHBsYWNlIHRoZSB2YWx1ZSBvZgotICogIm1hZ2ljIiBpbnRvIGNoYW5uZWwtPmV2ZW50cV9tYWdpYzsKLSAqLwotdm9pZCBlZnhfbmljX2dlbmVyYXRlX3Rlc3RfZXZlbnQoc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsLCB1bnNpZ25lZCBpbnQgbWFnaWMpCit2b2lkIGVmeF9uaWNfZ2VuZXJhdGVfdGVzdF9ldmVudChzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwpCiB7CisJdW5zaWduZWQgaW50IG1hZ2ljID0gRUZYX0NIQU5ORUxfTUFHSUNfVEVTVChjaGFubmVsKTsKKwllZnhfcXdvcmRfdCB0ZXN0X2V2ZW50OworCisJRUZYX1BPUFVMQVRFX1FXT1JEXzIodGVzdF9ldmVudCwgRlNGX0FaX0VWX0NPREUsCisJCQkgICAgIEZTRV9BWl9FVl9DT0RFX0RSVl9HRU5fRVYsCisJCQkgICAgIEZTRl9BWl9EUlZfR0VOX0VWX01BR0lDLCBtYWdpYyk7CisJZWZ4X2dlbmVyYXRlX2V2ZW50KGNoYW5uZWwsICZ0ZXN0X2V2ZW50KTsKK30KKwordm9pZCBlZnhfbmljX2dlbmVyYXRlX2ZpbGxfZXZlbnQoc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsKQoreworCXVuc2lnbmVkIGludCBtYWdpYyA9IEVGWF9DSEFOTkVMX01BR0lDX0ZJTEwoY2hhbm5lbCk7CiAJZWZ4X3F3b3JkX3QgdGVzdF9ldmVudDsKIAogCUVGWF9QT1BVTEFURV9RV09SRF8yKHRlc3RfZXZlbnQsIEZTRl9BWl9FVl9DT0RFLApAQCAtMTIwOCwyMCArMTI2MCwxOSBAQAogCSAqIGxlYWRpbmcgdG8gYSByZXNldCwgb3IgZmFrZSB1cCBzdWNjZXNzIGFueXdheSAqLwogCWVmeF9mb3JfZWFjaF90eF9xdWV1ZSh0eF9xdWV1ZSwgZWZ4KSB7CiAJCWlmICh0eF9xdWV1ZS0+Zmx1c2hlZCAhPSBGTFVTSF9ET05FKQotCQkJRUZYX0VSUihlZngsICJ0eCBxdWV1ZSAlZCBmbHVzaCBjb21tYW5kIHRpbWVkIG91dFxuIiwKLQkJCQl0eF9xdWV1ZS0+cXVldWUpOworCQkJbmV0aWZfZXJyKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJCQkgICJ0eCBxdWV1ZSAlZCBmbHVzaCBjb21tYW5kIHRpbWVkIG91dFxuIiwKKwkJCQkgIHR4X3F1ZXVlLT5xdWV1ZSk7CiAJCXR4X3F1ZXVlLT5mbHVzaGVkID0gRkxVU0hfRE9ORTsKIAl9CiAJZWZ4X2Zvcl9lYWNoX3J4X3F1ZXVlKHJ4X3F1ZXVlLCBlZngpIHsKIAkJaWYgKHJ4X3F1ZXVlLT5mbHVzaGVkICE9IEZMVVNIX0RPTkUpCi0JCQlFRlhfRVJSKGVmeCwgInJ4IHF1ZXVlICVkIGZsdXNoIGNvbW1hbmQgdGltZWQgb3V0XG4iLAotCQkJCXJ4X3F1ZXVlLT5xdWV1ZSk7CisJCQluZXRpZl9lcnIoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LAorCQkJCSAgInJ4IHF1ZXVlICVkIGZsdXNoIGNvbW1hbmQgdGltZWQgb3V0XG4iLAorCQkJCSAgcnhfcXVldWUtPnF1ZXVlKTsKIAkJcnhfcXVldWUtPmZsdXNoZWQgPSBGTFVTSF9ET05FOwogCX0KIAotCWlmIChFRlhfV09SS0FST1VORF83ODAzKGVmeCkpCi0JCXJldHVybiAwOwotCiAJcmV0dXJuIC1FVElNRURPVVQ7CiB9CiAKQEAgLTEyOTAsMTAgKzEzNDEsMTAgQEAKIAllZnhfcmVhZG8oZWZ4LCAmZmF0YWxfaW50ciwgRlJfQVpfRkFUQUxfSU5UUl9LRVIpOwogCWVycm9yID0gRUZYX09XT1JEX0ZJRUxEKGZhdGFsX2ludHIsIEZSRl9BWl9GQVRBTF9JTlRSKTsKIAotCUVGWF9FUlIoZWZ4LCAiU1lTVEVNIEVSUk9SICIgRUZYX09XT1JEX0ZNVCAiIHN0YXR1cyAiCi0JCUVGWF9PV09SRF9GTVQgIjogJXNcbiIsIEVGWF9PV09SRF9WQUwoKmludF9rZXIpLAotCQlFRlhfT1dPUkRfVkFMKGZhdGFsX2ludHIpLAotCQllcnJvciA/ICJkaXNhYmxpbmcgYnVzIG1hc3RlcmluZyIgOiAibm8gcmVjb2duaXNlZCBlcnJvciIpOworCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsICJTWVNURU0gRVJST1IgIkVGWF9PV09SRF9GTVQiIHN0YXR1cyAiCisJCSAgRUZYX09XT1JEX0ZNVCAiOiAlc1xuIiwgRUZYX09XT1JEX1ZBTCgqaW50X2tlciksCisJCSAgRUZYX09XT1JEX1ZBTChmYXRhbF9pbnRyKSwKKwkJICBlcnJvciA/ICJkaXNhYmxpbmcgYnVzIG1hc3RlcmluZyIgOiAibm8gcmVjb2duaXNlZCBlcnJvciIpOwogCiAJLyogSWYgdGhpcyBpcyBhIG1lbW9yeSBwYXJpdHkgZXJyb3IgZHVtcCB3aGljaCBibG9ja3MgYXJlIG9mZmVuZGluZyAqLwogCW1lbV9wZXJyID0gKEVGWF9PV09SRF9GSUVMRChmYXRhbF9pbnRyLCBGUkZfQVpfTUVNX1BFUlJfSU5UX0tFUikgfHwKQEAgLTEzMDEsOCArMTM1Miw5IEBACiAJaWYgKG1lbV9wZXJyKSB7CiAJCWVmeF9vd29yZF90IHJlZzsKIAkJZWZ4X3JlYWRvKGVmeCwgJnJlZywgRlJfQVpfTUVNX1NUQVQpOwotCQlFRlhfRVJSKGVmeCwgIlNZU1RFTSBFUlJPUjogbWVtb3J5IHBhcml0eSBlcnJvciAiCi0JCQlFRlhfT1dPUkRfRk1UICJcbiIsIEVGWF9PV09SRF9WQUwocmVnKSk7CisJCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsCisJCQkgICJTWVNURU0gRVJST1I6IG1lbW9yeSBwYXJpdHkgZXJyb3IgIkVGWF9PV09SRF9GTVQiXG4iLAorCQkJICBFRlhfT1dPUkRfVkFMKHJlZykpOwogCX0KIAogCS8qIERpc2FibGUgYm90aCBkZXZpY2VzICovCkBAIC0xMzE5LDExICsxMzcxLDEzIEBACiAJCQlqaWZmaWVzICsgRUZYX0lOVF9FUlJPUl9FWFBJUkUgKiBIWjsKIAl9CiAJaWYgKCsrZWZ4LT5pbnRfZXJyb3JfY291bnQgPCBFRlhfTUFYX0lOVF9FUlJPUlMpIHsKLQkJRUZYX0VSUihlZngsICJTWVNURU0gRVJST1IgLSByZXNldCBzY2hlZHVsZWRcbiIpOworCQluZXRpZl9lcnIoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LAorCQkJICAiU1lTVEVNIEVSUk9SIC0gcmVzZXQgc2NoZWR1bGVkXG4iKTsKIAkJZWZ4X3NjaGVkdWxlX3Jlc2V0KGVmeCwgUkVTRVRfVFlQRV9JTlRfRVJST1IpOwogCX0gZWxzZSB7Ci0JCUVGWF9FUlIoZWZ4LCAiU1lTVEVNIEVSUk9SIC0gbWF4IG51bWJlciBvZiBlcnJvcnMgc2Vlbi4iCi0JCQkiTklDIHdpbGwgYmUgZGlzYWJsZWRcbiIpOworCQluZXRpZl9lcnIoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LAorCQkJICAiU1lTVEVNIEVSUk9SIC0gbWF4IG51bWJlciBvZiBlcnJvcnMgc2Vlbi4iCisJCQkgICJOSUMgd2lsbCBiZSBkaXNhYmxlZFxuIik7CiAJCWVmeF9zY2hlZHVsZV9yZXNldChlZngsIFJFU0VUX1RZUEVfRElTQUJMRSk7CiAJfQogCkBAIC0xMzg2LDggKzE0NDAsOSBAQAogCiAJaWYgKHJlc3VsdCA9PSBJUlFfSEFORExFRCkgewogCQllZngtPmxhc3RfaXJxX2NwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7Ci0JCUVGWF9UUkFDRShlZngsICJJUlEgJWQgb24gQ1BVICVkIHN0YXR1cyAiIEVGWF9EV09SRF9GTVQgIlxuIiwKLQkJCSAgaXJxLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCBFRlhfRFdPUkRfVkFMKHJlZykpOworCQluZXRpZl92ZGJnKGVmeCwgaW50ciwgZWZ4LT5uZXRfZGV2LAorCQkJICAgIklSUSAlZCBvbiBDUFUgJWQgc3RhdHVzICIgRUZYX0RXT1JEX0ZNVCAiXG4iLAorCQkJICAgaXJxLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCBFRlhfRFdPUkRfVkFMKHJlZykpOwogCX0KIAogCXJldHVybiByZXN1bHQ7CkBAIC0xNDA4LDggKzE0NjMsOSBAQAogCWludCBzeXNlcnI7CiAKIAllZngtPmxhc3RfaXJxX2NwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7Ci0JRUZYX1RSQUNFKGVmeCwgIklSUSAlZCBvbiBDUFUgJWQgc3RhdHVzICIgRUZYX09XT1JEX0ZNVCAiXG4iLAotCQkgIGlycSwgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwgRUZYX09XT1JEX1ZBTCgqaW50X2tlcikpOworCW5ldGlmX3ZkYmcoZWZ4LCBpbnRyLCBlZngtPm5ldF9kZXYsCisJCSAgICJJUlEgJWQgb24gQ1BVICVkIHN0YXR1cyAiIEVGWF9PV09SRF9GTVQgIlxuIiwKKwkJICAgaXJxLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCBFRlhfT1dPUkRfVkFMKCppbnRfa2VyKSk7CiAKIAkvKiBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHNlcmlvdXMgZXJyb3IgY29uZGl0aW9uICovCiAJaWYgKGNoYW5uZWwtPmNoYW5uZWwgPT0gZWZ4LT5mYXRhbF9pcnFfbGV2ZWwpIHsKQEAgLTE0MjgsMjIgKzE0ODQsMjEgQEAKIC8qIFNldHVwIFJTUyBpbmRpcmVjdGlvbiB0YWJsZS4KICAqIFRoaXMgbWFwcyBmcm9tIHRoZSBoYXNoIHZhbHVlIG9mIHRoZSBwYWNrZXQgdG8gUlhRCiAgKi8KLXN0YXRpYyB2b2lkIGVmeF9zZXR1cF9yc3NfaW5kaXJfdGFibGUoc3RydWN0IGVmeF9uaWMgKmVmeCkKK3ZvaWQgZWZ4X25pY19wdXNoX3J4X2luZGlyX3RhYmxlKHN0cnVjdCBlZnhfbmljICplZngpCiB7Ci0JaW50IGkgPSAwOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCXNpemVfdCBpID0gMDsKIAllZnhfZHdvcmRfdCBkd29yZDsKIAogCWlmIChlZnhfbmljX3JldihlZngpIDwgRUZYX1JFVl9GQUxDT05fQjApCiAJCXJldHVybjsKIAotCWZvciAob2Zmc2V0ID0gRlJfQlpfUlhfSU5ESVJFQ1RJT05fVEJMOwotCSAgICAgb2Zmc2V0IDwgRlJfQlpfUlhfSU5ESVJFQ1RJT05fVEJMICsgMHg4MDA7Ci0JICAgICBvZmZzZXQgKz0gMHgxMCkgeworCUJVSUxEX0JVR19PTihBUlJBWV9TSVpFKGVmeC0+cnhfaW5kaXJfdGFibGUpICE9CisJCSAgICAgRlJfQlpfUlhfSU5ESVJFQ1RJT05fVEJMX1JPV1MpOworCisJZm9yIChpID0gMDsgaSA8IEZSX0JaX1JYX0lORElSRUNUSU9OX1RCTF9ST1dTOyBpKyspIHsKIAkJRUZYX1BPUFVMQVRFX0RXT1JEXzEoZHdvcmQsIEZSRl9CWl9JVF9RVUVVRSwKLQkJCQkgICAgIGkgJSBlZngtPm5fcnhfY2hhbm5lbHMpOwotCQllZnhfd3JpdGVkKGVmeCwgJmR3b3JkLCBvZmZzZXQpOwotCQlpKys7CisJCQkJICAgICBlZngtPnJ4X2luZGlyX3RhYmxlW2ldKTsKKwkJZWZ4X3dyaXRlZF90YWJsZShlZngsICZkd29yZCwgRlJfQlpfUlhfSU5ESVJFQ1RJT05fVEJMLCBpKTsKIAl9CiB9CiAKQEAgLTE0NjUsOCArMTUyMCw5IEBACiAJCXJjID0gcmVxdWVzdF9pcnEoZWZ4LT5sZWdhY3lfaXJxLCBoYW5kbGVyLCBJUlFGX1NIQVJFRCwKIAkJCQkgZWZ4LT5uYW1lLCBlZngpOwogCQlpZiAocmMpIHsKLQkJCUVGWF9FUlIoZWZ4LCAiZmFpbGVkIHRvIGhvb2sgbGVnYWN5IElSUSAlZFxuIiwKLQkJCQllZngtPnBjaV9kZXYtPmlycSk7CisJCQluZXRpZl9lcnIoZWZ4LCBkcnYsIGVmeC0+bmV0X2RldiwKKwkJCQkgICJmYWlsZWQgdG8gaG9vayBsZWdhY3kgSVJRICVkXG4iLAorCQkJCSAgZWZ4LT5wY2lfZGV2LT5pcnEpOwogCQkJZ290byBmYWlsMTsKIAkJfQogCQlyZXR1cm4gMDsKQEAgLTE0NzgsNyArMTUzNCw4IEBACiAJCQkJIElSUUZfUFJPQkVfU0hBUkVELCAvKiBOb3Qgc2hhcmVkICovCiAJCQkJIGNoYW5uZWwtPm5hbWUsIGNoYW5uZWwpOwogCQlpZiAocmMpIHsKLQkJCUVGWF9FUlIoZWZ4LCAiZmFpbGVkIHRvIGhvb2sgSVJRICVkXG4iLCBjaGFubmVsLT5pcnEpOworCQkJbmV0aWZfZXJyKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsCisJCQkJICAiZmFpbGVkIHRvIGhvb2sgSVJRICVkXG4iLCBjaGFubmVsLT5pcnEpOwogCQkJZ290byBmYWlsMjsKIAkJfQogCX0KQEAgLTE1NzYsNyArMTYzMyw3IEBACiAJRUZYX0lOVkVSVF9PV09SRCh0ZW1wKTsKIAllZnhfd3JpdGVvKGVmeCwgJnRlbXAsIEZSX0FaX0ZBVEFMX0lOVFJfS0VSKTsKIAotCWVmeF9zZXR1cF9yc3NfaW5kaXJfdGFibGUoZWZ4KTsKKwllZnhfbmljX3B1c2hfcnhfaW5kaXJfdGFibGUoZWZ4KTsKIAogCS8qIERpc2FibGUgdGhlIHVnbHkgdGltZXItYmFzZWQgVFggRE1BIGJhY2tvZmYgYW5kIGFsbG93IFRYIERNQSB0byBiZQogCSAqIGNvbnRyb2xsZWQgYnkgdGhlIFJYIEZJRk8gZmlsbCBsZXZlbC4gU2V0IGFyYml0cmF0aW9uIHRvIG9uZSBwa3QvUS4KQEAgLTE1OTgsMyArMTY1NSwyNjkgQEAKIAkJRUZYX1NFVF9PV09SRF9GSUVMRCh0ZW1wLCBGUkZfQlpfVFhfRkxVU0hfTUlOX0xFTl9FTiwgMSk7CiAJZWZ4X3dyaXRlbyhlZngsICZ0ZW1wLCBGUl9BWl9UWF9SRVNFUlZFRCk7CiB9CisKKy8qIFJlZ2lzdGVyIGR1bXAgKi8KKworI2RlZmluZSBSRUdJU1RFUl9SRVZJU0lPTl9BCTEKKyNkZWZpbmUgUkVHSVNURVJfUkVWSVNJT05fQgkyCisjZGVmaW5lIFJFR0lTVEVSX1JFVklTSU9OX0MJMworI2RlZmluZSBSRUdJU1RFUl9SRVZJU0lPTl9aCTMJLyogbGF0ZXN0IHJldmlzaW9uICovCisKK3N0cnVjdCBlZnhfbmljX3JlZyB7CisJdTMyIG9mZnNldDoyNDsKKwl1MzIgbWluX3JldmlzaW9uOjIsIG1heF9yZXZpc2lvbjoyOworfTsKKworI2RlZmluZSBSRUdJU1RFUihuYW1lLCBtaW5fcmV2LCBtYXhfcmV2KSB7CQkJCVwKKwlGUl8gIyMgbWluX3JldiAjIyBtYXhfcmV2ICMjIF8gIyMgbmFtZSwJCQkJXAorCVJFR0lTVEVSX1JFVklTSU9OXyAjIyBtaW5fcmV2LCBSRUdJU1RFUl9SRVZJU0lPTl8gIyMgbWF4X3JldglcCit9CisjZGVmaW5lIFJFR0lTVEVSX0FBKG5hbWUpIFJFR0lTVEVSKG5hbWUsIEEsIEEpCisjZGVmaW5lIFJFR0lTVEVSX0FCKG5hbWUpIFJFR0lTVEVSKG5hbWUsIEEsIEIpCisjZGVmaW5lIFJFR0lTVEVSX0FaKG5hbWUpIFJFR0lTVEVSKG5hbWUsIEEsIFopCisjZGVmaW5lIFJFR0lTVEVSX0JCKG5hbWUpIFJFR0lTVEVSKG5hbWUsIEIsIEIpCisjZGVmaW5lIFJFR0lTVEVSX0JaKG5hbWUpIFJFR0lTVEVSKG5hbWUsIEIsIFopCisjZGVmaW5lIFJFR0lTVEVSX0NaKG5hbWUpIFJFR0lTVEVSKG5hbWUsIEMsIFopCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWZ4X25pY19yZWcgZWZ4X25pY19yZWdzW10gPSB7CisJUkVHSVNURVJfQVooQURSX1JFR0lPTiksCisJUkVHSVNURVJfQVooSU5UX0VOX0tFUiksCisJUkVHSVNURVJfQlooSU5UX0VOX0NIQVIpLAorCVJFR0lTVEVSX0FaKElOVF9BRFJfS0VSKSwKKwlSRUdJU1RFUl9CWihJTlRfQURSX0NIQVIpLAorCS8qIElOVF9BQ0tfS0VSIGlzIFdPICovCisJLyogSU5UX0lTUjAgaXMgUkMgKi8KKwlSRUdJU1RFUl9BWihIV19JTklUKSwKKwlSRUdJU1RFUl9DWihVU1JfRVZfQ0ZHKSwKKwlSRUdJU1RFUl9BQihFRV9TUElfSENNRCksCisJUkVHSVNURVJfQUIoRUVfU1BJX0hBRFIpLAorCVJFR0lTVEVSX0FCKEVFX1NQSV9IREFUQSksCisJUkVHSVNURVJfQUIoRUVfQkFTRV9QQUdFKSwKKwlSRUdJU1RFUl9BQihFRV9WUERfQ0ZHMCksCisJLyogRUVfVlBEX1NXX0NOVEwgYW5kIEVFX1ZQRF9TV19EQVRBIGFyZSBub3QgdXNlZCAqLworCS8qIFBNQlhfREJHX0lBRERSIGFuZCBQQk1YX0RCR19JREFUQSBhcmUgaW5kaXJlY3QgKi8KKwkvKiBQQ0lFX0NPUkVfSU5ESVJFQ1QgaXMgaW5kaXJlY3QgKi8KKwlSRUdJU1RFUl9BQihOSUNfU1RBVCksCisJUkVHSVNURVJfQUIoR1BJT19DVEwpLAorCVJFR0lTVEVSX0FCKEdMQl9DVEwpLAorCS8qIEZBVEFMX0lOVFJfS0VSIGFuZCBGQVRBTF9JTlRSX0NIQVIgYXJlIHBhcnRseSBSQyAqLworCVJFR0lTVEVSX0JaKERQX0NUUkwpLAorCVJFR0lTVEVSX0FaKE1FTV9TVEFUKSwKKwlSRUdJU1RFUl9BWihDU19ERUJVRyksCisJUkVHSVNURVJfQVooQUxURVJBX0JVSUxEKSwKKwlSRUdJU1RFUl9BWihDU1JfU1BBUkUpLAorCVJFR0lTVEVSX0FCKFBDSUVfU0RfQ1RMMDEyMyksCisJUkVHSVNURVJfQUIoUENJRV9TRF9DVEw0NSksCisJUkVHSVNURVJfQUIoUENJRV9QQ1NfQ1RMX1NUQVQpLAorCS8qIERFQlVHX0RBVEFfT1VUIGlzIG5vdCB1c2VkICovCisJLyogRFJWX0VWIGlzIFdPICovCisJUkVHSVNURVJfQVooRVZRX0NUTCksCisJUkVHSVNURVJfQVooRVZRX0NOVDEpLAorCVJFR0lTVEVSX0FaKEVWUV9DTlQyKSwKKwlSRUdJU1RFUl9BWihCVUZfVEJMX0NGRyksCisJUkVHSVNURVJfQVooU1JNX1JYX0RDX0NGRyksCisJUkVHSVNURVJfQVooU1JNX1RYX0RDX0NGRyksCisJUkVHSVNURVJfQVooU1JNX0NGRyksCisJLyogQlVGX1RCTF9VUEQgaXMgV08gKi8KKwlSRUdJU1RFUl9BWihTUk1fVVBEX0VWUSksCisJUkVHSVNURVJfQVooU1JBTV9QQVJJVFkpLAorCVJFR0lTVEVSX0FaKFJYX0NGRyksCisJUkVHSVNURVJfQlooUlhfRklMVEVSX0NUTCksCisJLyogUlhfRkxVU0hfREVTQ1EgaXMgV08gKi8KKwlSRUdJU1RFUl9BWihSWF9EQ19DRkcpLAorCVJFR0lTVEVSX0FaKFJYX0RDX1BGX1dNKSwKKwlSRUdJU1RFUl9CWihSWF9SU1NfVEtFWSksCisJLyogUlhfTk9ERVNDX0RST1AgaXMgUkMgKi8KKwlSRUdJU1RFUl9BQShSWF9TRUxGX1JTVCksCisJLyogUlhfREVCVUcsIFJYX1BVU0hfRFJPUCBhcmUgbm90IHVzZWQgKi8KKwlSRUdJU1RFUl9DWihSWF9SU1NfSVBWNl9SRUcxKSwKKwlSRUdJU1RFUl9DWihSWF9SU1NfSVBWNl9SRUcyKSwKKwlSRUdJU1RFUl9DWihSWF9SU1NfSVBWNl9SRUczKSwKKwkvKiBUWF9GTFVTSF9ERVNDUSBpcyBXTyAqLworCVJFR0lTVEVSX0FaKFRYX0RDX0NGRyksCisJUkVHSVNURVJfQUEoVFhfQ0hLU01fQ0ZHKSwKKwlSRUdJU1RFUl9BWihUWF9DRkcpLAorCS8qIFRYX1BVU0hfRFJPUCBpcyBub3QgdXNlZCAqLworCVJFR0lTVEVSX0FaKFRYX1JFU0VSVkVEKSwKKwlSRUdJU1RFUl9CWihUWF9QQUNFKSwKKwkvKiBUWF9QQUNFX0RST1BfUUlEIGlzIFJDICovCisJUkVHSVNURVJfQkIoVFhfVkxBTiksCisJUkVHSVNURVJfQlooVFhfSVBGSUxfUE9SVEVOKSwKKwlSRUdJU1RFUl9BQihNRF9UWEQpLAorCVJFR0lTVEVSX0FCKE1EX1JYRCksCisJUkVHSVNURVJfQUIoTURfQ1MpLAorCVJFR0lTVEVSX0FCKE1EX1BIWV9BRFIpLAorCVJFR0lTVEVSX0FCKE1EX0lEKSwKKwkvKiBNRF9TVEFUIGlzIFJDICovCisJUkVHSVNURVJfQUIoTUFDX1NUQVRfRE1BKSwKKwlSRUdJU1RFUl9BQihNQUNfQ1RSTCksCisJUkVHSVNURVJfQkIoR0VOX01PREUpLAorCVJFR0lTVEVSX0FCKE1BQ19NQ19IQVNIX1JFRzApLAorCVJFR0lTVEVSX0FCKE1BQ19NQ19IQVNIX1JFRzEpLAorCVJFR0lTVEVSX0FCKEdNX0NGRzEpLAorCVJFR0lTVEVSX0FCKEdNX0NGRzIpLAorCS8qIEdNX0lQRyBhbmQgR01fSEQgYXJlIG5vdCB1c2VkICovCisJUkVHSVNURVJfQUIoR01fTUFYX0ZMRU4pLAorCS8qIEdNX1RFU1QgaXMgbm90IHVzZWQgKi8KKwlSRUdJU1RFUl9BQihHTV9BRFIxKSwKKwlSRUdJU1RFUl9BQihHTV9BRFIyKSwKKwlSRUdJU1RFUl9BQihHTUZfQ0ZHMCksCisJUkVHSVNURVJfQUIoR01GX0NGRzEpLAorCVJFR0lTVEVSX0FCKEdNRl9DRkcyKSwKKwlSRUdJU1RFUl9BQihHTUZfQ0ZHMyksCisJUkVHSVNURVJfQUIoR01GX0NGRzQpLAorCVJFR0lTVEVSX0FCKEdNRl9DRkc1KSwKKwlSRUdJU1RFUl9CQihUWF9TUkNfTUFDX0NUTCksCisJUkVHSVNURVJfQUIoWE1fQURSX0xPKSwKKwlSRUdJU1RFUl9BQihYTV9BRFJfSEkpLAorCVJFR0lTVEVSX0FCKFhNX0dMQl9DRkcpLAorCVJFR0lTVEVSX0FCKFhNX1RYX0NGRyksCisJUkVHSVNURVJfQUIoWE1fUlhfQ0ZHKSwKKwlSRUdJU1RFUl9BQihYTV9NR1RfSU5UX01BU0spLAorCVJFR0lTVEVSX0FCKFhNX0ZDKSwKKwlSRUdJU1RFUl9BQihYTV9QQVVTRV9USU1FKSwKKwlSRUdJU1RFUl9BQihYTV9UWF9QQVJBTSksCisJUkVHSVNURVJfQUIoWE1fUlhfUEFSQU0pLAorCS8qIFhNX01HVF9JTlRfTVNLIChub3RlIG5vICdBJykgaXMgUkMgKi8KKwlSRUdJU1RFUl9BQihYWF9QV1JfUlNUKSwKKwlSRUdJU1RFUl9BQihYWF9TRF9DVEwpLAorCVJFR0lTVEVSX0FCKFhYX1RYRFJWX0NUTCksCisJLyogWFhfUFJCU19DVEwsIFhYX1BSQlNfQ0hLIGFuZCBYWF9QUkJTX0VSUiBhcmUgbm90IHVzZWQgKi8KKwkvKiBYWF9DT1JFX1NUQVQgaXMgcGFydGx5IFJDICovCit9OworCitzdHJ1Y3QgZWZ4X25pY19yZWdfdGFibGUgeworCXUzMiBvZmZzZXQ6MjQ7CisJdTMyIG1pbl9yZXZpc2lvbjoyLCBtYXhfcmV2aXNpb246MjsKKwl1MzIgc3RlcDo2LCByb3dzOjIxOworfTsKKworI2RlZmluZSBSRUdJU1RFUl9UQUJMRV9ESU1FTlNJT05TKF8sIG9mZnNldCwgbWluX3JldiwgbWF4X3Jldiwgc3RlcCwgcm93cykgeyBcCisJb2Zmc2V0LAkJCQkJCQkJXAorCVJFR0lTVEVSX1JFVklTSU9OXyAjIyBtaW5fcmV2LCBSRUdJU1RFUl9SRVZJU0lPTl8gIyMgbWF4X3JldiwJXAorCXN0ZXAsIHJvd3MJCQkJCQkJXAorfQorI2RlZmluZSBSRUdJU1RFUl9UQUJMRShuYW1lLCBtaW5fcmV2LCBtYXhfcmV2KSAJCQkJXAorCVJFR0lTVEVSX1RBQkxFX0RJTUVOU0lPTlMoCQkJCQlcCisJCW5hbWUsIEZSXyAjIyBtaW5fcmV2ICMjIG1heF9yZXYgIyMgXyAjIyBuYW1lLAkJXAorCQltaW5fcmV2LCBtYXhfcmV2LAkJCQkJXAorCQlGUl8gIyMgbWluX3JldiAjIyBtYXhfcmV2ICMjIF8gIyMgbmFtZSAjIyBfU1RFUCwJXAorCQlGUl8gIyMgbWluX3JldiAjIyBtYXhfcmV2ICMjIF8gIyMgbmFtZSAjIyBfUk9XUykKKyNkZWZpbmUgUkVHSVNURVJfVEFCTEVfQUEobmFtZSkgUkVHSVNURVJfVEFCTEUobmFtZSwgQSwgQSkKKyNkZWZpbmUgUkVHSVNURVJfVEFCTEVfQVoobmFtZSkgUkVHSVNURVJfVEFCTEUobmFtZSwgQSwgWikKKyNkZWZpbmUgUkVHSVNURVJfVEFCTEVfQkIobmFtZSkgUkVHSVNURVJfVEFCTEUobmFtZSwgQiwgQikKKyNkZWZpbmUgUkVHSVNURVJfVEFCTEVfQloobmFtZSkgUkVHSVNURVJfVEFCTEUobmFtZSwgQiwgWikKKyNkZWZpbmUgUkVHSVNURVJfVEFCTEVfQkJfQ1oobmFtZSkJCQkJCVwKKwlSRUdJU1RFUl9UQUJMRV9ESU1FTlNJT05TKG5hbWUsIEZSX0JaXyAjIyBuYW1lLCBCLCBCLAkJXAorCQkJCSAgRlJfQlpfICMjIG5hbWUgIyMgX1NURVAsCQlcCisJCQkJICBGUl9CQl8gIyMgbmFtZSAjIyBfUk9XUyksCQlcCisJUkVHSVNURVJfVEFCTEVfRElNRU5TSU9OUyhuYW1lLCBGUl9CWl8gIyMgbmFtZSwgQywgWiwJCVwKKwkJCQkgIEZSX0JaXyAjIyBuYW1lICMjIF9TVEVQLAkJXAorCQkJCSAgRlJfQ1pfICMjIG5hbWUgIyMgX1JPV1MpCisjZGVmaW5lIFJFR0lTVEVSX1RBQkxFX0NaKG5hbWUpIFJFR0lTVEVSX1RBQkxFKG5hbWUsIEMsIFopCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWZ4X25pY19yZWdfdGFibGUgZWZ4X25pY19yZWdfdGFibGVzW10gPSB7CisJLyogRFJJVkVSIGlzIG5vdCB1c2VkICovCisJLyogRVZRX1JQVFIsIFRJTUVSX0NPTU1BTkQsIFVTUl9FViBhbmQge1JYLFRYfV9ERVNDX1VQRCBhcmUgV08gKi8KKwlSRUdJU1RFUl9UQUJMRV9CQihUWF9JUEZJTF9UQkwpLAorCVJFR0lTVEVSX1RBQkxFX0JCKFRYX1NSQ19NQUNfVEJMKSwKKwlSRUdJU1RFUl9UQUJMRV9BQShSWF9ERVNDX1BUUl9UQkxfS0VSKSwKKwlSRUdJU1RFUl9UQUJMRV9CQl9DWihSWF9ERVNDX1BUUl9UQkwpLAorCVJFR0lTVEVSX1RBQkxFX0FBKFRYX0RFU0NfUFRSX1RCTF9LRVIpLAorCVJFR0lTVEVSX1RBQkxFX0JCX0NaKFRYX0RFU0NfUFRSX1RCTCksCisJUkVHSVNURVJfVEFCTEVfQUEoRVZRX1BUUl9UQkxfS0VSKSwKKwlSRUdJU1RFUl9UQUJMRV9CQl9DWihFVlFfUFRSX1RCTCksCisJLyogVGhlIHJlZ2lzdGVyIGJ1ZmZlciBpcyBhbGxvY2F0ZWQgd2l0aCBzbGFiLCBzbyB3ZSBjYW4ndAorCSAqIHJlYXNvbmFibHkgcmVhZCBhbGwgb2YgdGhlIGJ1ZmZlciB0YWJsZSAodXAgdG8gOE1CISkuCisJICogSG93ZXZlciB0aGlzIGRyaXZlciB3aWxsIG9ubHkgdXNlIGEgZmV3IGVudHJpZXMuICBSZWFkaW5nCisJICogMUsgZW50cmllcyBhbGxvd3MgZm9yIHNvbWUgZXhwYW5zaW9uIG9mIHF1ZXVlIGNvdW50IGFuZAorCSAqIHNpemUgYmVmb3JlIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSB2ZXJzaW9uLiAqLworCVJFR0lTVEVSX1RBQkxFX0RJTUVOU0lPTlMoQlVGX0ZVTExfVEJMX0tFUiwgRlJfQUFfQlVGX0ZVTExfVEJMX0tFUiwKKwkJCQkgIEEsIEEsIDgsIDEwMjQpLAorCVJFR0lTVEVSX1RBQkxFX0RJTUVOU0lPTlMoQlVGX0ZVTExfVEJMLCBGUl9CWl9CVUZfRlVMTF9UQkwsCisJCQkJICBCLCBaLCA4LCAxMDI0KSwKKwkvKiBSWF9GSUxURVJfVEJMezAsMX0gaXMgaHVnZSBhbmQgbm90IHVzZWQgYnkgdGhpcyBkcml2ZXIgKi8KKwlSRUdJU1RFUl9UQUJMRV9DWihSWF9NQUNfRklMVEVSX1RCTDApLAorCVJFR0lTVEVSX1RBQkxFX0JCX0NaKFRJTUVSX1RCTCksCisJUkVHSVNURVJfVEFCTEVfQkJfQ1ooVFhfUEFDRV9UQkwpLAorCVJFR0lTVEVSX1RBQkxFX0JaKFJYX0lORElSRUNUSU9OX1RCTCksCisJLyogVFhfRklMVEVSX1RCTDAgaXMgaHVnZSBhbmQgbm90IHVzZWQgYnkgdGhpcyBkcml2ZXIgKi8KKwlSRUdJU1RFUl9UQUJMRV9DWihUWF9NQUNfRklMVEVSX1RCTDApLAorCVJFR0lTVEVSX1RBQkxFX0NaKE1DX1RSRUdfU01FTSksCisJLyogTVNJWF9QQkFfVEFCTEUgaXMgbm90IG1hcHBlZCAqLworCS8qIFNSTV9EQkcgaXMgbm90IG1hcHBlZCAoYW5kIGlzIHJlZHVuZGFudCB3aXRoIEJVRl9GTExfVEJMKSAqLworfTsKKworc2l6ZV90IGVmeF9uaWNfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBlZnhfbmljICplZngpCit7CisJY29uc3Qgc3RydWN0IGVmeF9uaWNfcmVnICpyZWc7CisJY29uc3Qgc3RydWN0IGVmeF9uaWNfcmVnX3RhYmxlICp0YWJsZTsKKwlzaXplX3QgbGVuID0gMDsKKworCWZvciAocmVnID0gZWZ4X25pY19yZWdzOworCSAgICAgcmVnIDwgZWZ4X25pY19yZWdzICsgQVJSQVlfU0laRShlZnhfbmljX3JlZ3MpOworCSAgICAgcmVnKyspCisJCWlmIChlZngtPnR5cGUtPnJldmlzaW9uID49IHJlZy0+bWluX3JldmlzaW9uICYmCisJCSAgICBlZngtPnR5cGUtPnJldmlzaW9uIDw9IHJlZy0+bWF4X3JldmlzaW9uKQorCQkJbGVuICs9IHNpemVvZihlZnhfb3dvcmRfdCk7CisKKwlmb3IgKHRhYmxlID0gZWZ4X25pY19yZWdfdGFibGVzOworCSAgICAgdGFibGUgPCBlZnhfbmljX3JlZ190YWJsZXMgKyBBUlJBWV9TSVpFKGVmeF9uaWNfcmVnX3RhYmxlcyk7CisJICAgICB0YWJsZSsrKQorCQlpZiAoZWZ4LT50eXBlLT5yZXZpc2lvbiA+PSB0YWJsZS0+bWluX3JldmlzaW9uICYmCisJCSAgICBlZngtPnR5cGUtPnJldmlzaW9uIDw9IHRhYmxlLT5tYXhfcmV2aXNpb24pCisJCQlsZW4gKz0gdGFibGUtPnJvd3MgKiBtaW5fdChzaXplX3QsIHRhYmxlLT5zdGVwLCAxNik7CisKKwlyZXR1cm4gbGVuOworfQorCit2b2lkIGVmeF9uaWNfZ2V0X3JlZ3Moc3RydWN0IGVmeF9uaWMgKmVmeCwgdm9pZCAqYnVmKQoreworCWNvbnN0IHN0cnVjdCBlZnhfbmljX3JlZyAqcmVnOworCWNvbnN0IHN0cnVjdCBlZnhfbmljX3JlZ190YWJsZSAqdGFibGU7CisKKwlmb3IgKHJlZyA9IGVmeF9uaWNfcmVnczsKKwkgICAgIHJlZyA8IGVmeF9uaWNfcmVncyArIEFSUkFZX1NJWkUoZWZ4X25pY19yZWdzKTsKKwkgICAgIHJlZysrKSB7CisJCWlmIChlZngtPnR5cGUtPnJldmlzaW9uID49IHJlZy0+bWluX3JldmlzaW9uICYmCisJCSAgICBlZngtPnR5cGUtPnJldmlzaW9uIDw9IHJlZy0+bWF4X3JldmlzaW9uKSB7CisJCQllZnhfcmVhZG8oZWZ4LCAoZWZ4X293b3JkX3QgKilidWYsIHJlZy0+b2Zmc2V0KTsKKwkJCWJ1ZiArPSBzaXplb2YoZWZ4X293b3JkX3QpOworCQl9CisJfQorCisJZm9yICh0YWJsZSA9IGVmeF9uaWNfcmVnX3RhYmxlczsKKwkgICAgIHRhYmxlIDwgZWZ4X25pY19yZWdfdGFibGVzICsgQVJSQVlfU0laRShlZnhfbmljX3JlZ190YWJsZXMpOworCSAgICAgdGFibGUrKykgeworCQlzaXplX3Qgc2l6ZSwgaTsKKworCQlpZiAoIShlZngtPnR5cGUtPnJldmlzaW9uID49IHRhYmxlLT5taW5fcmV2aXNpb24gJiYKKwkJICAgICAgZWZ4LT50eXBlLT5yZXZpc2lvbiA8PSB0YWJsZS0+bWF4X3JldmlzaW9uKSkKKwkJCWNvbnRpbnVlOworCisJCXNpemUgPSBtaW5fdChzaXplX3QsIHRhYmxlLT5zdGVwLCAxNik7CisKKwkJZm9yIChpID0gMDsgaSA8IHRhYmxlLT5yb3dzOyBpKyspIHsKKwkJCXN3aXRjaCAodGFibGUtPnN0ZXApIHsKKwkJCWNhc2UgNDogLyogMzItYml0IHJlZ2lzdGVyIG9yIFNSQU0gKi8KKwkJCQllZnhfcmVhZGRfdGFibGUoZWZ4LCBidWYsIHRhYmxlLT5vZmZzZXQsIGkpOworCQkJCWJyZWFrOworCQkJY2FzZSA4OiAvKiA2NC1iaXQgU1JBTSAqLworCQkJCWVmeF9zcmFtX3JlYWRxKGVmeCwKKwkJCQkJICAgICAgIGVmeC0+bWVtYmFzZSArIHRhYmxlLT5vZmZzZXQsCisJCQkJCSAgICAgICBidWYsIGkpOworCQkJCWJyZWFrOworCQkJY2FzZSAxNjogLyogMTI4LWJpdCByZWdpc3RlciAqLworCQkJCWVmeF9yZWFkb190YWJsZShlZngsIGJ1ZiwgdGFibGUtPm9mZnNldCwgaSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDMyOiAvKiAxMjgtYml0IHJlZ2lzdGVyLCBpbnRlcmxlYXZlZCAqLworCQkJCWVmeF9yZWFkb190YWJsZShlZngsIGJ1ZiwgdGFibGUtPm9mZnNldCwgMiAqIGkpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlXQVJOX09OKDEpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWJ1ZiArPSBzaXplOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL25pYy5oIGIvZHJpdmVycy9uZXQvc2ZjL25pYy5oCmluZGV4IGJiYzJjMGMuLjA0MzhkYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9uaWMuaAorKysgYi9kcml2ZXJzL25ldC9zZmMvbmljLmgKQEAgLTE0Miw3ICsxNDIsNiBAQAogCXUzMiBmd19idWlsZDsKIAlzdHJ1Y3QgZWZ4X21jZGlfaWZhY2UgbWNkaTsKIAlpbnQgd29sX2ZpbHRlcl9pZDsKLQl1OCBpcHY2X3Jzc19rZXlbNDBdOwogfTsKIAogZXh0ZXJuIHZvaWQgc2llbmFfcHJpbnRfZnd2ZXIoc3RydWN0IGVmeF9uaWMgKmVmeCwgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKQEAgLTE5MCw4ICsxODksOCBAQAogLyogSW50ZXJydXB0cyBhbmQgdGVzdCBldmVudHMgKi8KIGV4dGVybiBpbnQgZWZ4X25pY19pbml0X2ludGVycnVwdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIGV4dGVybiB2b2lkIGVmeF9uaWNfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IGVmeF9uaWMgKmVmeCk7Ci1leHRlcm4gdm9pZCBlZnhfbmljX2dlbmVyYXRlX3Rlc3RfZXZlbnQoc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsLAotCQkJCQl1bnNpZ25lZCBpbnQgbWFnaWMpOworZXh0ZXJuIHZvaWQgZWZ4X25pY19nZW5lcmF0ZV90ZXN0X2V2ZW50KHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCk7CitleHRlcm4gdm9pZCBlZnhfbmljX2dlbmVyYXRlX2ZpbGxfZXZlbnQoc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsKTsKIGV4dGVybiB2b2lkIGVmeF9uaWNfZ2VuZXJhdGVfaW50ZXJydXB0KHN0cnVjdCBlZnhfbmljICplZngpOwogZXh0ZXJuIHZvaWQgZWZ4X25pY19kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IGVmeF9uaWMgKmVmeCk7CiBleHRlcm4gdm9pZCBlZnhfbmljX2ZpbmlfaW50ZXJydXB0KHN0cnVjdCBlZnhfbmljICplZngpOwpAQCAtMjA4LDYgKzIwNyw3IEBACiBleHRlcm4gdm9pZCBmYWxjb25fc2V0dXBfeGF1aShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIGV4dGVybiBpbnQgZmFsY29uX3Jlc2V0X3hhdWkoc3RydWN0IGVmeF9uaWMgKmVmeCk7CiBleHRlcm4gdm9pZCBlZnhfbmljX2luaXRfY29tbW9uKHN0cnVjdCBlZnhfbmljICplZngpOworZXh0ZXJuIHZvaWQgZWZ4X25pY19wdXNoX3J4X2luZGlyX3RhYmxlKHN0cnVjdCBlZnhfbmljICplZngpOwogCiBpbnQgZWZ4X25pY19hbGxvY19idWZmZXIoc3RydWN0IGVmeF9uaWMgKmVmeCwgc3RydWN0IGVmeF9idWZmZXIgKmJ1ZmZlciwKIAkJCSB1bnNpZ25lZCBpbnQgbGVuKTsKQEAgLTIyMiw2ICsyMjIsOSBAQAogCQkJCSAgY29uc3Qgc3RydWN0IGVmeF9uaWNfcmVnaXN0ZXJfdGVzdCAqcmVncywKIAkJCQkgIHNpemVfdCBuX3JlZ3MpOwogCitleHRlcm4gc2l6ZV90IGVmeF9uaWNfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBlZnhfbmljICplZngpOworZXh0ZXJuIHZvaWQgZWZ4X25pY19nZXRfcmVncyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCB2b2lkICpidWYpOworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGYWxjb24gTUFDIHN0YXRzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvcXQyMDJ4X3BoeS5jIGIvZHJpdmVycy9uZXQvc2ZjL3F0MjAyeF9waHkuYwppbmRleCBlMDc3YmVmLi42ODgxM2QxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvcXQyMDJ4X3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9xdDIwMnhfcGh5LmMKQEAgLTkxLDkgKzkxLDEwIEBACiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CiAJCQkvKiBTb21lIGNhYmxlcyBoYXZlIEVFUFJPTXMgdGhhdCBjb25mbGljdCB3aXRoIHRoZQogCQkJICogUEhZJ3Mgb24tYm9hcmQgRUVQUk9NIHNvIGl0IGNhbm5vdCBsb2FkIGZpcm13YXJlICovCi0JCQlFRlhfRVJSKGVmeCwgIklmIGFuIFNGUCsgZGlyZWN0IGF0dGFjaCBjYWJsZSBpcyIKLQkJCQkiIGNvbm5lY3RlZCwgcGxlYXNlIGNoZWNrIHRoYXQgaXQgY29tcGxpZXMiCi0JCQkJIiB3aXRoIHRoZSBTRlArIHNwZWNpZmljYXRpb25cbiIpOworCQkJbmV0aWZfZXJyKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJCQkgICJJZiBhbiBTRlArIGRpcmVjdCBhdHRhY2ggY2FibGUgaXMiCisJCQkJICAiIGNvbm5lY3RlZCwgcGxlYXNlIGNoZWNrIHRoYXQgaXQgY29tcGxpZXMiCisJCQkJICAiIHdpdGggdGhlIFNGUCsgc3BlY2lmaWNhdGlvblxuIik7CiAJCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAkJfQogCQltc2xlZXAoUVQyMDI1Q19IRUFSVEJfV0FJVCk7CkBAIC0xNDUsNyArMTQ2LDggQEAKIAkJLyogQnVnIDE3Njg5OiBvY2Nhc2lvbmFsbHkgaGVhcnRiZWF0IHN0YXJ0cyBidXQgZmlybXdhcmUgc3RhdHVzCiAJCSAqIGNvZGUgbmV2ZXIgcHJvZ3Jlc3NlcyBiZXlvbmQgMHgwMC4gIFRyeSBhZ2Fpbiwgb25jZSwgYWZ0ZXIKIAkJICogcmVzdGFydGluZyBleGVjdXRpb24gb2YgdGhlIGZpcm13YXJlIGltYWdlLiAqLwotCQlFRlhfTE9HKGVmeCwgImJhc2hpbmcgUVQyMDI1QyBtaWNyb2NvbnRyb2xsZXJcbiIpOworCQluZXRpZl9kYmcoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LAorCQkJICAiYmFzaGluZyBRVDIwMjVDIG1pY3JvY29udHJvbGxlclxuIik7CiAJCXF0MjAyNWNfcmVzdGFydF9maXJtd2FyZShlZngpOwogCQlyYyA9IHF0MjAyNWNfd2FpdF9oZWFydGJlYXQoZWZ4KTsKIAkJaWYgKHJjICE9IDApCkBAIC0xNjUsMTEgKzE2NywxMiBAQAogCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZmlybXdhcmVfaWQpOyBpKyspCiAJCWZpcm13YXJlX2lkW2ldID0gZWZ4X21kaW9fcmVhZChlZngsIE1ESU9fTU1EX1BDUywKIAkJCQkJICAgICAgIFBDU19GV19QUk9EVUNUX0NPREVfMSArIGkpOwotCUVGWF9JTkZPKGVmeCwgIlFUMjAyNUMgZmlybXdhcmUgJXhyJWQgdiVkLiVkLiVkLiVkIFsyMCUwMmQtJTAyZC0lMDJkXVxuIiwKLQkJIChmaXJtd2FyZV9pZFswXSA8PCA4KSB8IGZpcm13YXJlX2lkWzFdLCBmaXJtd2FyZV9pZFsyXSwKLQkJIGZpcm13YXJlX2lkWzNdID4+IDQsIGZpcm13YXJlX2lkWzNdICYgMHhmLAotCQkgZmlybXdhcmVfaWRbNF0sIGZpcm13YXJlX2lkWzVdLAotCQkgZmlybXdhcmVfaWRbNl0sIGZpcm13YXJlX2lkWzddLCBmaXJtd2FyZV9pZFs4XSk7CisJbmV0aWZfaW5mbyhlZngsIHByb2JlLCBlZngtPm5ldF9kZXYsCisJCSAgICJRVDIwMjVDIGZpcm13YXJlICV4ciVkIHYlZC4lZC4lZC4lZCBbMjAlMDJkLSUwMmQtJTAyZF1cbiIsCisJCSAgIChmaXJtd2FyZV9pZFswXSA8PCA4KSB8IGZpcm13YXJlX2lkWzFdLCBmaXJtd2FyZV9pZFsyXSwKKwkJICAgZmlybXdhcmVfaWRbM10gPj4gNCwgZmlybXdhcmVfaWRbM10gJiAweGYsCisJCSAgIGZpcm13YXJlX2lkWzRdLCBmaXJtd2FyZV9pZFs1XSwKKwkJICAgZmlybXdhcmVfaWRbNl0sIGZpcm13YXJlX2lkWzddLCBmaXJtd2FyZV9pZFs4XSk7CiAJcGh5X2RhdGEtPmZpcm13YXJlX3ZlciA9ICgoZmlybXdhcmVfaWRbM10gJiAweGYwKSA8PCAyMCkgfAogCQkJCSAoKGZpcm13YXJlX2lkWzNdICYgMHgwZikgPDwgMTYpIHwKIAkJCQkgKGZpcm13YXJlX2lkWzRdIDw8IDgpIHwgZmlybXdhcmVfaWRbNV07CkBAIC0xOTgsNyArMjAxLDcgQEAKIAl9CiAKIAlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBwaHlfZGF0YS0+YnVnMTcxOTBfdGltZXIpKSB7Ci0JCUVGWF9MT0coZWZ4LCAiYmFzaGluZyBRVDIwMjVDIFBNQS9QTURcbiIpOworCQluZXRpZl9kYmcoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LCAiYmFzaGluZyBRVDIwMjVDIFBNQS9QTURcbiIpOwogCQllZnhfbWRpb19zZXRfZmxhZyhlZngsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19DVFJMMSwKIAkJCQkgIE1ESU9fUE1BX0NUUkwxX0xPT1BCQUNLLCB0cnVlKTsKIAkJbXNsZWVwKDEwMCk7CkBAIC0yMzEsNyArMjM0LDggQEAKIAlyZWcgPSBlZnhfbWRpb19yZWFkKGVmeCwgMSwgMHhjMzE5KTsKIAlpZiAoKHJlZyAmIDB4MDAzOCkgPT0gcGh5X29wX21vZGUpCiAJCXJldHVybiAwOwotCUVGWF9MT0coZWZ4LCAiU3dpdGNoaW5nIFBIWSB0byBtb2RlIDB4JTA0eFxuIiwgcGh5X29wX21vZGUpOworCW5ldGlmX2RiZyhlZngsIGh3LCBlZngtPm5ldF9kZXYsICJTd2l0Y2hpbmcgUEhZIHRvIG1vZGUgMHglMDR4XG4iLAorCQkgIHBoeV9vcF9tb2RlKTsKIAogCS8qIFRoaXMgc2VxdWVuY2UgcmVwbGljYXRlcyB0aGUgcmVnaXN0ZXIgd3JpdGVzIGNvbmZpZ3VyZWQgaW4gdGhlIGJvb3QKIAkgKiBFRVBST00gKGluY2x1ZGluZyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBib2FyZCByZXZpc2lvbnMpLCBleGNlcHQKQEAgLTI4Nyw4ICsyOTEsOSBAQAogCS8qIFdhaXQgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgdG8gYmUgcmVhZHkgYWdhaW4gKi8KIAlyYyA9IHF0MjAyNWNfd2FpdF9yZXNldChlZngpOwogCWlmIChyYyA8IDApIHsKLQkJRUZYX0VSUihlZngsICJQSFkgbWljcm9jb250cm9sbGVyIHJlc2V0IGR1cmluZyBtb2RlIHN3aXRjaCAiCi0JCQkJInRpbWVkIG91dFxuIik7CisJCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsCisJCQkgICJQSFkgbWljcm9jb250cm9sbGVyIHJlc2V0IGR1cmluZyBtb2RlIHN3aXRjaCAiCisJCQkgICJ0aW1lZCBvdXRcbiIpOwogCQlyZXR1cm4gcmM7CiAJfQogCkBAIC0zMjQsNyArMzI5LDcgQEAKIAlyZXR1cm4gMDsKIAogIGZhaWw6Ci0JRUZYX0VSUihlZngsICJQSFkgcmVzZXQgdGltZWQgb3V0XG4iKTsKKwluZXRpZl9lcnIoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LCAiUEhZIHJlc2V0IHRpbWVkIG91dFxuIik7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0zNTMsMTQgKzM1OCwxNSBAQAogCiAJcmMgPSBxdDIwMnhfcmVzZXRfcGh5KGVmeCk7CiAJaWYgKHJjKSB7Ci0JCUVGWF9FUlIoZWZ4LCAiUEhZIGluaXQgZmFpbGVkXG4iKTsKKwkJbmV0aWZfZXJyKGVmeCwgcHJvYmUsIGVmeC0+bmV0X2RldiwgIlBIWSBpbml0IGZhaWxlZFxuIik7CiAJCXJldHVybiByYzsKIAl9CiAKIAlkZXZpZCA9IGVmeF9tZGlvX3JlYWRfaWQoZWZ4LCBNRElPX01NRF9QSFlYUyk7Ci0JRUZYX0lORk8oZWZ4LCAiUEhZIElEIHJlZyAleCAoT1VJICUwNnggbW9kZWwgJTAyeCByZXZpc2lvbiAleClcbiIsCi0JCSBkZXZpZCwgZWZ4X21kaW9faWRfb3VpKGRldmlkKSwgZWZ4X21kaW9faWRfbW9kZWwoZGV2aWQpLAotCQkgZWZ4X21kaW9faWRfcmV2KGRldmlkKSk7CisJbmV0aWZfaW5mbyhlZngsIHByb2JlLCBlZngtPm5ldF9kZXYsCisJCSAgICJQSFkgSUQgcmVnICV4IChPVUkgJTA2eCBtb2RlbCAlMDJ4IHJldmlzaW9uICV4KVxuIiwKKwkJICAgZGV2aWQsIGVmeF9tZGlvX2lkX291aShkZXZpZCksIGVmeF9tZGlvX2lkX21vZGVsKGRldmlkKSwKKwkJICAgZWZ4X21kaW9faWRfcmV2KGRldmlkKSk7CiAKIAlpZiAoZWZ4LT5waHlfdHlwZSA9PSBQSFlfVFlQRV9RVDIwMjVDKQogCQlxdDIwMjVjX2Zpcm13YXJlX2lkKGVmeCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvcnguYyBiL2RyaXZlcnMvbmV0L3NmYy9yeC5jCmluZGV4IGUzMDg4MTguLjc5OWM0NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9yeC5jCkBAIC0yNSw2ICsyNSw5IEBACiAvKiBOdW1iZXIgb2YgUlggZGVzY3JpcHRvcnMgcHVzaGVkIGF0IG9uY2UuICovCiAjZGVmaW5lIEVGWF9SWF9CQVRDSCAgOAogCisvKiBNYXhpbXVtIHNpemUgb2YgYSBidWZmZXIgc2hhcmluZyBhIHBhZ2UgKi8KKyNkZWZpbmUgRUZYX1JYX0hBTEZfUEFHRSAoKFBBR0VfU0laRSA+PiAxKSAtIHNpemVvZihzdHJ1Y3QgZWZ4X3J4X3BhZ2Vfc3RhdGUpKQorCiAvKiBTaXplIG9mIGJ1ZmZlciBhbGxvY2F0ZWQgZm9yIHNrYiBoZWFkZXIgYXJlYS4gKi8KICNkZWZpbmUgRUZYX1NLQl9IRUFERVJTICA2NHUKIApAQCAtOTgsMTU1ICsxMDEsMTUxIEBACiAJcmV0dXJuIFBBR0VfU0laRSA8PCBlZngtPnJ4X2J1ZmZlcl9vcmRlcjsKIH0KIAorc3RhdGljIGlubGluZSB1MzIgZWZ4X3J4X2J1Zl9oYXNoKHN0cnVjdCBlZnhfcnhfYnVmZmVyICpidWYpCit7CisjaWYgZGVmaW5lZChDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUykgfHwgTkVUX0lQX0FMSUdOICUgNCA9PSAwCisJcmV0dXJuIF9fbGUzMl90b19jcHVwKChjb25zdCBfX2xlMzIgKikoYnVmLT5kYXRhIC0gNCkpOworI2Vsc2UKKwljb25zdCB1OCAqZGF0YSA9IChjb25zdCB1OCAqKShidWYtPmRhdGEgLSA0KTsKKwlyZXR1cm4gKCh1MzIpZGF0YVswXSAgICAgICB8CisJCSh1MzIpZGF0YVsxXSA8PCA4ICB8CisJCSh1MzIpZGF0YVsyXSA8PCAxNiB8CisJCSh1MzIpZGF0YVszXSA8PCAyNCk7CisjZW5kaWYKK30KIAogLyoqCi0gKiBlZnhfaW5pdF9yeF9idWZmZXJfc2tiIC0gY3JlYXRlIG5ldyBSWCBidWZmZXIgdXNpbmcgc2tiLWJhc2VkIGFsbG9jYXRpb24KKyAqIGVmeF9pbml0X3J4X2J1ZmZlcnNfc2tiIC0gY3JlYXRlIEVGWF9SWF9CQVRDSCBza2ItYmFzZWQgUlggYnVmZmVycwogICoKICAqIEByeF9xdWV1ZToJCUVmeCBSWCBxdWV1ZQotICogQHJ4X2J1ZjoJCVJYIGJ1ZmZlciBzdHJ1Y3R1cmUgdG8gcG9wdWxhdGUKICAqCi0gKiBUaGlzIGFsbG9jYXRlcyBtZW1vcnkgZm9yIGEgbmV3IHJlY2VpdmUgYnVmZmVyLCBtYXBzIGl0IGZvciBETUEsCi0gKiBhbmQgcG9wdWxhdGVzIGEgc3RydWN0IGVmeF9yeF9idWZmZXIgd2l0aCB0aGUgcmVsZXZhbnQKLSAqIGluZm9ybWF0aW9uLiAgUmV0dXJuIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvciAwIG9uIHN1Y2Nlc3MuCisgKiBUaGlzIGFsbG9jYXRlcyBFRlhfUlhfQkFUQ0ggc2ticywgbWFwcyB0aGVtIGZvciBETUEsIGFuZCBwb3B1bGF0ZXMgYQorICogc3RydWN0IGVmeF9yeF9idWZmZXIgZm9yIGVhY2ggb25lLiBSZXR1cm4gYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9yIDAKKyAqIG9uIHN1Y2Nlc3MuIE1heSBmYWlsIGhhdmluZyBvbmx5IGluc2VydGVkIGZld2VyIHRoYW4gRUZYX1JYX0JBVENICisgKiBidWZmZXJzLgogICovCi1zdGF0aWMgaW50IGVmeF9pbml0X3J4X2J1ZmZlcl9za2Ioc3RydWN0IGVmeF9yeF9xdWV1ZSAqcnhfcXVldWUsCi0JCQkJICBzdHJ1Y3QgZWZ4X3J4X2J1ZmZlciAqcnhfYnVmKQorc3RhdGljIGludCBlZnhfaW5pdF9yeF9idWZmZXJzX3NrYihzdHJ1Y3QgZWZ4X3J4X3F1ZXVlICpyeF9xdWV1ZSkKIHsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gcnhfcXVldWUtPmVmeDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IGVmeC0+bmV0X2RldjsKKwlzdHJ1Y3QgZWZ4X3J4X2J1ZmZlciAqcnhfYnVmOwogCWludCBza2JfbGVuID0gZWZ4LT5yeF9idWZmZXJfbGVuOworCXVuc2lnbmVkIGluZGV4LCBjb3VudDsKIAotCXJ4X2J1Zi0+c2tiID0gbmV0ZGV2X2FsbG9jX3NrYihuZXRfZGV2LCBza2JfbGVuKTsKLQlpZiAodW5saWtlbHkoIXJ4X2J1Zi0+c2tiKSkKLQkJcmV0dXJuIC1FTk9NRU07CisJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgRUZYX1JYX0JBVENIOyArK2NvdW50KSB7CisJCWluZGV4ID0gcnhfcXVldWUtPmFkZGVkX2NvdW50ICYgRUZYX1JYUV9NQVNLOworCQlyeF9idWYgPSBlZnhfcnhfYnVmZmVyKHJ4X3F1ZXVlLCBpbmRleCk7CiAKLQkvKiBBZGp1c3QgdGhlIFNLQiBmb3IgcGFkZGluZyBhbmQgY2hlY2tzdW0gKi8KLQlza2JfcmVzZXJ2ZShyeF9idWYtPnNrYiwgTkVUX0lQX0FMSUdOKTsKLQlyeF9idWYtPmxlbiA9IHNrYl9sZW4gLSBORVRfSVBfQUxJR047Ci0JcnhfYnVmLT5kYXRhID0gKGNoYXIgKilyeF9idWYtPnNrYi0+ZGF0YTsKLQlyeF9idWYtPnNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJCXJ4X2J1Zi0+c2tiID0gbmV0ZGV2X2FsbG9jX3NrYihuZXRfZGV2LCBza2JfbGVuKTsKKwkJaWYgKHVubGlrZWx5KCFyeF9idWYtPnNrYikpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJcnhfYnVmLT5wYWdlID0gTlVMTDsKIAotCXJ4X2J1Zi0+ZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShlZngtPnBjaV9kZXYsCi0JCQkJCSAgcnhfYnVmLT5kYXRhLCByeF9idWYtPmxlbiwKLQkJCQkJICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkvKiBBZGp1c3QgdGhlIFNLQiBmb3IgcGFkZGluZyBhbmQgY2hlY2tzdW0gKi8KKwkJc2tiX3Jlc2VydmUocnhfYnVmLT5za2IsIE5FVF9JUF9BTElHTik7CisJCXJ4X2J1Zi0+bGVuID0gc2tiX2xlbiAtIE5FVF9JUF9BTElHTjsKKwkJcnhfYnVmLT5kYXRhID0gKGNoYXIgKilyeF9idWYtPnNrYi0+ZGF0YTsKKwkJcnhfYnVmLT5za2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCi0JaWYgKHVubGlrZWx5KHBjaV9kbWFfbWFwcGluZ19lcnJvcihlZngtPnBjaV9kZXYsIHJ4X2J1Zi0+ZG1hX2FkZHIpKSkgewotCQlkZXZfa2ZyZWVfc2tiX2FueShyeF9idWYtPnNrYik7Ci0JCXJ4X2J1Zi0+c2tiID0gTlVMTDsKLQkJcmV0dXJuIC1FSU87CisJCXJ4X2J1Zi0+ZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShlZngtPnBjaV9kZXYsCisJCQkJCQkgIHJ4X2J1Zi0+ZGF0YSwgcnhfYnVmLT5sZW4sCisJCQkJCQkgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCWlmICh1bmxpa2VseShwY2lfZG1hX21hcHBpbmdfZXJyb3IoZWZ4LT5wY2lfZGV2LAorCQkJCQkJICAgcnhfYnVmLT5kbWFfYWRkcikpKSB7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShyeF9idWYtPnNrYik7CisJCQlyeF9idWYtPnNrYiA9IE5VTEw7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCSsrcnhfcXVldWUtPmFkZGVkX2NvdW50OworCQkrK3J4X3F1ZXVlLT5hbGxvY19za2JfY291bnQ7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogZWZ4X2luaXRfcnhfYnVmZmVyX3BhZ2UgLSBjcmVhdGUgbmV3IFJYIGJ1ZmZlciB1c2luZyBwYWdlLWJhc2VkIGFsbG9jYXRpb24KKyAqIGVmeF9pbml0X3J4X2J1ZmZlcnNfcGFnZSAtIGNyZWF0ZSBFRlhfUlhfQkFUQ0ggcGFnZS1iYXNlZCBSWCBidWZmZXJzCiAgKgogICogQHJ4X3F1ZXVlOgkJRWZ4IFJYIHF1ZXVlCi0gKiBAcnhfYnVmOgkJUlggYnVmZmVyIHN0cnVjdHVyZSB0byBwb3B1bGF0ZQogICoKLSAqIFRoaXMgYWxsb2NhdGVzIG1lbW9yeSBmb3IgYSBuZXcgcmVjZWl2ZSBidWZmZXIsIG1hcHMgaXQgZm9yIERNQSwKLSAqIGFuZCBwb3B1bGF0ZXMgYSBzdHJ1Y3QgZWZ4X3J4X2J1ZmZlciB3aXRoIHRoZSByZWxldmFudAotICogaW5mb3JtYXRpb24uICBSZXR1cm4gYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9yIDAgb24gc3VjY2Vzcy4KKyAqIFRoaXMgYWxsb2NhdGVzIG1lbW9yeSBmb3IgRUZYX1JYX0JBVENIIHJlY2VpdmUgYnVmZmVycywgbWFwcyB0aGVtIGZvciBETUEsCisgKiBhbmQgcG9wdWxhdGVzIHN0cnVjdCBlZnhfcnhfYnVmZmVycyBmb3IgZWFjaCBvbmUuIFJldHVybiBhIG5lZ2F0aXZlIGVycm9yCisgKiBjb2RlIG9yIDAgb24gc3VjY2Vzcy4gSWYgYSBzaW5nbGUgcGFnZSBjYW4gYmUgc3BsaXQgYmV0d2VlbiB0d28gYnVmZmVycywKKyAqIHRoZW4gdGhlIHBhZ2Ugd2lsbCBlaXRoZXIgYmUgaW5zZXJ0ZWQgZnVsbHksIG9yIG5vdCBhdCBhdCBhbGwuCiAgKi8KLXN0YXRpYyBpbnQgZWZ4X2luaXRfcnhfYnVmZmVyX3BhZ2Uoc3RydWN0IGVmeF9yeF9xdWV1ZSAqcnhfcXVldWUsCi0JCQkJICAgc3RydWN0IGVmeF9yeF9idWZmZXIgKnJ4X2J1ZikKK3N0YXRpYyBpbnQgZWZ4X2luaXRfcnhfYnVmZmVyc19wYWdlKHN0cnVjdCBlZnhfcnhfcXVldWUgKnJ4X3F1ZXVlKQogewogCXN0cnVjdCBlZnhfbmljICplZnggPSByeF9xdWV1ZS0+ZWZ4OwotCWludCBieXRlcywgc3BhY2UsIG9mZnNldDsKKwlzdHJ1Y3QgZWZ4X3J4X2J1ZmZlciAqcnhfYnVmOworCXN0cnVjdCBwYWdlICpwYWdlOworCXZvaWQgKnBhZ2VfYWRkcjsKKwlzdHJ1Y3QgZWZ4X3J4X3BhZ2Vfc3RhdGUgKnN0YXRlOworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisJdW5zaWduZWQgaW5kZXgsIGNvdW50OwogCi0JYnl0ZXMgPSBlZngtPnJ4X2J1ZmZlcl9sZW4gLSBFRlhfUEFHRV9JUF9BTElHTjsKKwkvKiBXZSBjYW4gc3BsaXQgYSBwYWdlIGJldHdlZW4gdHdvIGJ1ZmZlcnMgKi8KKwlCVUlMRF9CVUdfT04oRUZYX1JYX0JBVENIICYgMSk7CiAKLQkvKiBJZiB0aGVyZSBpcyBzcGFjZSBsZWZ0IGluIHRoZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBwYWdlLAotCSAqIHRoZW4gdXNlIGl0LiBPdGhlcndpc2UgYWxsb2NhdGUgYSBuZXcgb25lICovCi0JcnhfYnVmLT5wYWdlID0gcnhfcXVldWUtPmJ1Zl9wYWdlOwotCWlmIChyeF9idWYtPnBhZ2UgPT0gTlVMTCkgewotCQlkbWFfYWRkcl90IGRtYV9hZGRyOwotCi0JCXJ4X2J1Zi0+cGFnZSA9IGFsbG9jX3BhZ2VzKF9fR0ZQX0NPTEQgfCBfX0dGUF9DT01QIHwgR0ZQX0FUT01JQywKLQkJCQkJICAgZWZ4LT5yeF9idWZmZXJfb3JkZXIpOwotCQlpZiAodW5saWtlbHkocnhfYnVmLT5wYWdlID09IE5VTEwpKQorCWZvciAoY291bnQgPSAwOyBjb3VudCA8IEVGWF9SWF9CQVRDSDsgKytjb3VudCkgeworCQlwYWdlID0gYWxsb2NfcGFnZXMoX19HRlBfQ09MRCB8IF9fR0ZQX0NPTVAgfCBHRlBfQVRPTUlDLAorCQkJCSAgIGVmeC0+cnhfYnVmZmVyX29yZGVyKTsKKwkJaWYgKHVubGlrZWx5KHBhZ2UgPT0gTlVMTCkpCiAJCQlyZXR1cm4gLUVOT01FTTsKLQotCQlkbWFfYWRkciA9IHBjaV9tYXBfcGFnZShlZngtPnBjaV9kZXYsIHJ4X2J1Zi0+cGFnZSwKLQkJCQkJMCwgZWZ4X3J4X2J1Zl9zaXplKGVmeCksCisJCWRtYV9hZGRyID0gcGNpX21hcF9wYWdlKGVmeC0+cGNpX2RldiwgcGFnZSwgMCwKKwkJCQkJZWZ4X3J4X2J1Zl9zaXplKGVmeCksCiAJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7Ci0KIAkJaWYgKHVubGlrZWx5KHBjaV9kbWFfbWFwcGluZ19lcnJvcihlZngtPnBjaV9kZXYsIGRtYV9hZGRyKSkpIHsKLQkJCV9fZnJlZV9wYWdlcyhyeF9idWYtPnBhZ2UsIGVmeC0+cnhfYnVmZmVyX29yZGVyKTsKLQkJCXJ4X2J1Zi0+cGFnZSA9IE5VTEw7CisJCQlfX2ZyZWVfcGFnZXMocGFnZSwgZWZ4LT5yeF9idWZmZXJfb3JkZXIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KKwkJcGFnZV9hZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOworCQlzdGF0ZSA9IHBhZ2VfYWRkcjsKKwkJc3RhdGUtPnJlZmNudCA9IDA7CisJCXN0YXRlLT5kbWFfYWRkciA9IGRtYV9hZGRyOwogCi0JCXJ4X3F1ZXVlLT5idWZfcGFnZSA9IHJ4X2J1Zi0+cGFnZTsKLQkJcnhfcXVldWUtPmJ1Zl9kbWFfYWRkciA9IGRtYV9hZGRyOwotCQlyeF9xdWV1ZS0+YnVmX2RhdGEgPSAocGFnZV9hZGRyZXNzKHJ4X2J1Zi0+cGFnZSkgKwotCQkJCSAgICAgIEVGWF9QQUdFX0lQX0FMSUdOKTsKLQl9CisJCXBhZ2VfYWRkciArPSBzaXplb2Yoc3RydWN0IGVmeF9yeF9wYWdlX3N0YXRlKTsKKwkJZG1hX2FkZHIgKz0gc2l6ZW9mKHN0cnVjdCBlZnhfcnhfcGFnZV9zdGF0ZSk7CiAKLQlyeF9idWYtPmxlbiA9IGJ5dGVzOwotCXJ4X2J1Zi0+ZGF0YSA9IHJ4X3F1ZXVlLT5idWZfZGF0YTsKLQlvZmZzZXQgPSBlZnhfcnhfYnVmX29mZnNldChyeF9idWYpOwotCXJ4X2J1Zi0+ZG1hX2FkZHIgPSByeF9xdWV1ZS0+YnVmX2RtYV9hZGRyICsgb2Zmc2V0OworCXNwbGl0OgorCQlpbmRleCA9IHJ4X3F1ZXVlLT5hZGRlZF9jb3VudCAmIEVGWF9SWFFfTUFTSzsKKwkJcnhfYnVmID0gZWZ4X3J4X2J1ZmZlcihyeF9xdWV1ZSwgaW5kZXgpOworCQlyeF9idWYtPmRtYV9hZGRyID0gZG1hX2FkZHIgKyBFRlhfUEFHRV9JUF9BTElHTjsKKwkJcnhfYnVmLT5za2IgPSBOVUxMOworCQlyeF9idWYtPnBhZ2UgPSBwYWdlOworCQlyeF9idWYtPmRhdGEgPSBwYWdlX2FkZHIgKyBFRlhfUEFHRV9JUF9BTElHTjsKKwkJcnhfYnVmLT5sZW4gPSBlZngtPnJ4X2J1ZmZlcl9sZW4gLSBFRlhfUEFHRV9JUF9BTElHTjsKKwkJKytyeF9xdWV1ZS0+YWRkZWRfY291bnQ7CisJCSsrcnhfcXVldWUtPmFsbG9jX3BhZ2VfY291bnQ7CisJCSsrc3RhdGUtPnJlZmNudDsKIAotCS8qIFRyeSB0byBwYWNrIG11bHRpcGxlIGJ1ZmZlcnMgcGVyIHBhZ2UgKi8KLQlpZiAoZWZ4LT5yeF9idWZmZXJfb3JkZXIgPT0gMCkgewotCQkvKiBUaGUgbmV4dCBidWZmZXIgc3RhcnRzIG9uIHRoZSBuZXh0IDUxMiBieXRlIGJvdW5kYXJ5ICovCi0JCXJ4X3F1ZXVlLT5idWZfZGF0YSArPSAoKGJ5dGVzICsgMHgxZmYpICYgfjB4MWZmKTsKLQkJb2Zmc2V0ICs9ICgoYnl0ZXMgKyAweDFmZikgJiB+MHgxZmYpOwotCi0JCXNwYWNlID0gZWZ4X3J4X2J1Zl9zaXplKGVmeCkgLSBvZmZzZXQ7Ci0JCWlmIChzcGFjZSA+PSBieXRlcykgewotCQkJLyogUmVmcyBkcm9wcGVkIG9uIGtlcm5lbCByZWxlYXNpbmcgZWFjaCBza2IgKi8KLQkJCWdldF9wYWdlKHJ4X3F1ZXVlLT5idWZfcGFnZSk7Ci0JCQlnb3RvIG91dDsKKwkJaWYgKCh+Y291bnQgJiAxKSAmJiAoZWZ4LT5yeF9idWZmZXJfbGVuIDw9IEVGWF9SWF9IQUxGX1BBR0UpKSB7CisJCQkvKiBVc2UgdGhlIHNlY29uZCBoYWxmIG9mIHRoZSBwYWdlICovCisJCQlnZXRfcGFnZShwYWdlKTsKKwkJCWRtYV9hZGRyICs9IChQQUdFX1NJWkUgPj4gMSk7CisJCQlwYWdlX2FkZHIgKz0gKFBBR0VfU0laRSA+PiAxKTsKKwkJCSsrY291bnQ7CisJCQlnb3RvIHNwbGl0OwogCQl9CiAJfQogCi0JLyogVGhpcyBpcyB0aGUgZmluYWwgUlggYnVmZmVyIGZvciB0aGlzIHBhZ2UsIHNvIG1hcmsgaXQgZm9yCi0JICogdW5tYXBwaW5nICovCi0JcnhfcXVldWUtPmJ1Zl9wYWdlID0gTlVMTDsKLQlyeF9idWYtPnVubWFwX2FkZHIgPSByeF9xdWV1ZS0+YnVmX2RtYV9hZGRyOwotCi0gb3V0OgogCXJldHVybiAwOwogfQogCi0vKiBUaGlzIGFsbG9jYXRlcyBtZW1vcnkgZm9yIGEgbmV3IHJlY2VpdmUgYnVmZmVyLCBtYXBzIGl0IGZvciBETUEsCi0gKiBhbmQgcG9wdWxhdGVzIGEgc3RydWN0IGVmeF9yeF9idWZmZXIgd2l0aCB0aGUgcmVsZXZhbnQKLSAqIGluZm9ybWF0aW9uLgotICovCi1zdGF0aWMgaW50IGVmeF9pbml0X3J4X2J1ZmZlcihzdHJ1Y3QgZWZ4X3J4X3F1ZXVlICpyeF9xdWV1ZSwKLQkJCSAgICAgIHN0cnVjdCBlZnhfcnhfYnVmZmVyICpuZXdfcnhfYnVmKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAocnhfcXVldWUtPmNoYW5uZWwtPnJ4X2FsbG9jX3B1c2hfcGFnZXMpIHsKLQkJbmV3X3J4X2J1Zi0+c2tiID0gTlVMTDsKLQkJcmMgPSBlZnhfaW5pdF9yeF9idWZmZXJfcGFnZShyeF9xdWV1ZSwgbmV3X3J4X2J1Zik7Ci0JCXJ4X3F1ZXVlLT5hbGxvY19wYWdlX2NvdW50Kys7Ci0JfSBlbHNlIHsKLQkJbmV3X3J4X2J1Zi0+cGFnZSA9IE5VTEw7Ci0JCXJjID0gZWZ4X2luaXRfcnhfYnVmZmVyX3NrYihyeF9xdWV1ZSwgbmV3X3J4X2J1Zik7Ci0JCXJ4X3F1ZXVlLT5hbGxvY19za2JfY291bnQrKzsKLQl9Ci0KLQlpZiAodW5saWtlbHkocmMgPCAwKSkKLQkJRUZYX0xPR19STChyeF9xdWV1ZS0+ZWZ4LCAiJXMgUlhRWyVkXSA9JWRcbiIsIF9fZnVuY19fLAotCQkJICAgcnhfcXVldWUtPnF1ZXVlLCByYyk7Ci0JcmV0dXJuIHJjOwotfQotCiBzdGF0aWMgdm9pZCBlZnhfdW5tYXBfcnhfYnVmZmVyKHN0cnVjdCBlZnhfbmljICplZngsCiAJCQkJc3RydWN0IGVmeF9yeF9idWZmZXIgKnJ4X2J1ZikKIHsKIAlpZiAocnhfYnVmLT5wYWdlKSB7CisJCXN0cnVjdCBlZnhfcnhfcGFnZV9zdGF0ZSAqc3RhdGU7CisKIAkJRUZYX0JVR19PTl9QQVJBTk9JRChyeF9idWYtPnNrYik7Ci0JCWlmIChyeF9idWYtPnVubWFwX2FkZHIpIHsKLQkJCXBjaV91bm1hcF9wYWdlKGVmeC0+cGNpX2RldiwgcnhfYnVmLT51bm1hcF9hZGRyLAorCisJCXN0YXRlID0gcGFnZV9hZGRyZXNzKHJ4X2J1Zi0+cGFnZSk7CisJCWlmICgtLXN0YXRlLT5yZWZjbnQgPT0gMCkgeworCQkJcGNpX3VubWFwX3BhZ2UoZWZ4LT5wY2lfZGV2LAorCQkJCSAgICAgICBzdGF0ZS0+ZG1hX2FkZHIsCiAJCQkJICAgICAgIGVmeF9yeF9idWZfc2l6ZShlZngpLAogCQkJCSAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQkJcnhfYnVmLT51bm1hcF9hZGRyID0gMDsKIAkJfQogCX0gZWxzZSBpZiAobGlrZWx5KHJ4X2J1Zi0+c2tiKSkgewogCQlwY2lfdW5tYXBfc2luZ2xlKGVmeC0+cGNpX2RldiwgcnhfYnVmLT5kbWFfYWRkciwKQEAgLTI3MywzMSArMjcyLDg0IEBACiAJZWZ4X2ZyZWVfcnhfYnVmZmVyKHJ4X3F1ZXVlLT5lZngsIHJ4X2J1Zik7CiB9CiAKKy8qIEF0dGVtcHQgdG8gcmVzdXJyZWN0IHRoZSBvdGhlciByZWNlaXZlIGJ1ZmZlciB0aGF0IHVzZWQgdG8gc2hhcmUgdGhpcyBwYWdlLAorICogd2hpY2ggaGFkIHByZXZpb3VzbHkgYmVlbiBwYXNzZWQgdXAgdG8gdGhlIGtlcm5lbCBhbmQgZnJlZWQuICovCitzdGF0aWMgdm9pZCBlZnhfcmVzdXJyZWN0X3J4X2J1ZmZlcihzdHJ1Y3QgZWZ4X3J4X3F1ZXVlICpyeF9xdWV1ZSwKKwkJCQkgICAgc3RydWN0IGVmeF9yeF9idWZmZXIgKnJ4X2J1ZikKK3sKKwlzdHJ1Y3QgZWZ4X3J4X3BhZ2Vfc3RhdGUgKnN0YXRlID0gcGFnZV9hZGRyZXNzKHJ4X2J1Zi0+cGFnZSk7CisJc3RydWN0IGVmeF9yeF9idWZmZXIgKm5ld19idWY7CisJdW5zaWduZWQgZmlsbF9sZXZlbCwgaW5kZXg7CisKKwkvKiArMSBiZWNhdXNlIGVmeF9yeF9wYWNrZXQoKSBpbmNyZW1lbnRlZCByZW1vdmVkX2NvdW50LiArMSBiZWNhdXNlCisJICogd2UnZCBsaWtlIHRvIGluc2VydCBhbiBhZGRpdGlvbmFsIGRlc2NyaXB0b3Igd2hpbHN0IGxlYXZpbmcKKwkgKiBFRlhfUlhEX0hFQURfUk9PTSBmb3IgdGhlIG5vbi1yZWN5Y2xlIHBhdGggKi8KKwlmaWxsX2xldmVsID0gKHJ4X3F1ZXVlLT5hZGRlZF9jb3VudCAtIHJ4X3F1ZXVlLT5yZW1vdmVkX2NvdW50ICsgMik7CisJaWYgKHVubGlrZWx5KGZpbGxfbGV2ZWwgPj0gRUZYX1JYUV9TSVpFIC0gRUZYX1JYRF9IRUFEX1JPT00pKSB7CisJCS8qIFdlIGNvdWxkIHBsYWNlICJzdGF0ZSIgb24gYSBsaXN0LCBhbmQgZHJhaW4gdGhlIGxpc3QgaW4KKwkJICogZWZ4X2Zhc3RfcHVzaF9yeF9kZXNjcmlwdG9ycygpLiBGb3Igbm93LCB0aGlzIHdpbGwgZG8uICovCisJCXJldHVybjsKKwl9CisKKwkrK3N0YXRlLT5yZWZjbnQ7CisJZ2V0X3BhZ2UocnhfYnVmLT5wYWdlKTsKKworCWluZGV4ID0gcnhfcXVldWUtPmFkZGVkX2NvdW50ICYgRUZYX1JYUV9NQVNLOworCW5ld19idWYgPSBlZnhfcnhfYnVmZmVyKHJ4X3F1ZXVlLCBpbmRleCk7CisJbmV3X2J1Zi0+ZG1hX2FkZHIgPSByeF9idWYtPmRtYV9hZGRyIF4gKFBBR0VfU0laRSA+PiAxKTsKKwluZXdfYnVmLT5za2IgPSBOVUxMOworCW5ld19idWYtPnBhZ2UgPSByeF9idWYtPnBhZ2U7CisJbmV3X2J1Zi0+ZGF0YSA9ICh2b2lkICopCisJCSgoX19mb3JjZSB1bnNpZ25lZCBsb25nKXJ4X2J1Zi0+ZGF0YSBeIChQQUdFX1NJWkUgPj4gMSkpOworCW5ld19idWYtPmxlbiA9IHJ4X2J1Zi0+bGVuOworCSsrcnhfcXVldWUtPmFkZGVkX2NvdW50OworfQorCisvKiBSZWN5Y2xlIHRoZSBnaXZlbiByeCBidWZmZXIgZGlyZWN0bHkgYmFjayBpbnRvIHRoZSByeF9xdWV1ZS4gVGhlcmUgaXMKKyAqIGFsd2F5cyByb29tIHRvIGFkZCB0aGlzIGJ1ZmZlciwgYmVjYXVzZSB3ZSd2ZSBqdXN0IHBvcHBlZCBhIGJ1ZmZlci4gKi8KK3N0YXRpYyB2b2lkIGVmeF9yZWN5Y2xlX3J4X2J1ZmZlcihzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwsCisJCQkJICBzdHJ1Y3QgZWZ4X3J4X2J1ZmZlciAqcnhfYnVmKQoreworCXN0cnVjdCBlZnhfbmljICplZnggPSBjaGFubmVsLT5lZng7CisJc3RydWN0IGVmeF9yeF9xdWV1ZSAqcnhfcXVldWUgPSAmZWZ4LT5yeF9xdWV1ZVtjaGFubmVsLT5jaGFubmVsXTsKKwlzdHJ1Y3QgZWZ4X3J4X2J1ZmZlciAqbmV3X2J1ZjsKKwl1bnNpZ25lZCBpbmRleDsKKworCWlmIChyeF9idWYtPnBhZ2UgIT0gTlVMTCAmJiBlZngtPnJ4X2J1ZmZlcl9sZW4gPD0gRUZYX1JYX0hBTEZfUEFHRSAmJgorCSAgICBwYWdlX2NvdW50KHJ4X2J1Zi0+cGFnZSkgPT0gMSkKKwkJZWZ4X3Jlc3VycmVjdF9yeF9idWZmZXIocnhfcXVldWUsIHJ4X2J1Zik7CisKKwlpbmRleCA9IHJ4X3F1ZXVlLT5hZGRlZF9jb3VudCAmIEVGWF9SWFFfTUFTSzsKKwluZXdfYnVmID0gZWZ4X3J4X2J1ZmZlcihyeF9xdWV1ZSwgaW5kZXgpOworCisJbWVtY3B5KG5ld19idWYsIHJ4X2J1Ziwgc2l6ZW9mKCpuZXdfYnVmKSk7CisJcnhfYnVmLT5wYWdlID0gTlVMTDsKKwlyeF9idWYtPnNrYiA9IE5VTEw7CisJKytyeF9xdWV1ZS0+YWRkZWRfY291bnQ7Cit9CisKIC8qKgogICogZWZ4X2Zhc3RfcHVzaF9yeF9kZXNjcmlwdG9ycyAtIHB1c2ggbmV3IFJYIGRlc2NyaXB0b3JzIHF1aWNrbHkKICAqIEByeF9xdWV1ZToJCVJYIGRlc2NyaXB0b3IgcXVldWUKLSAqIEByZXRyeTogICAgICAgICAgICAgIFJlY2hlY2sgdGhlIGZpbGwgbGV2ZWwKICAqIFRoaXMgd2lsbCBhaW0gdG8gZmlsbCB0aGUgUlggZGVzY3JpcHRvciBxdWV1ZSB1cCB0bwogICogQHJ4X3F1ZXVlLT5AZmFzdF9maWxsX2xpbWl0LiBJZiB0aGVyZSBpcyBpbnN1ZmZpY2llbnQgYXRvbWljCi0gKiBtZW1vcnkgdG8gZG8gc28sIHRoZSBjYWxsZXIgc2hvdWxkIHJldHJ5LgorICogbWVtb3J5IHRvIGRvIHNvLCBhIHNsb3cgZmlsbCB3aWxsIGJlIHNjaGVkdWxlZC4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3QgcHJvdmlkZSBzZXJpYWxpc2F0aW9uIChub25lIGlzIHVzZWQgaGVyZSkuIEluIHByYWN0aXNlLAorICogdGhpcyBtZWFucyB0aGlzIGZ1bmN0aW9uIG11c3QgcnVuIGZyb20gdGhlIE5BUEkgaGFuZGxlciwgb3IgYmUgY2FsbGVkCisgKiB3aGVuIE5BUEkgaXMgZGlzYWJsZWQuCiAgKi8KLXN0YXRpYyBpbnQgX19lZnhfZmFzdF9wdXNoX3J4X2Rlc2NyaXB0b3JzKHN0cnVjdCBlZnhfcnhfcXVldWUgKnJ4X3F1ZXVlLAotCQkJCQkgIGludCByZXRyeSkKK3ZvaWQgZWZ4X2Zhc3RfcHVzaF9yeF9kZXNjcmlwdG9ycyhzdHJ1Y3QgZWZ4X3J4X3F1ZXVlICpyeF9xdWV1ZSkKIHsKLQlzdHJ1Y3QgZWZ4X3J4X2J1ZmZlciAqcnhfYnVmOwotCXVuc2lnbmVkIGZpbGxfbGV2ZWwsIGluZGV4OwotCWludCBpLCBzcGFjZSwgcmMgPSAwOworCXN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCA9IHJ4X3F1ZXVlLT5jaGFubmVsOworCXVuc2lnbmVkIGZpbGxfbGV2ZWw7CisJaW50IHNwYWNlLCByYyA9IDA7CiAKLQkvKiBDYWxjdWxhdGUgY3VycmVudCBmaWxsIGxldmVsLiAgRG8gdGhpcyBvdXRzaWRlIHRoZSBsb2NrLAotCSAqIGJlY2F1c2UgbW9zdCBvZiB0aGUgdGltZSB3ZSdsbCBlbmQgdXAgbm90IHdhbnRpbmcgdG8gZG8gdGhlCi0JICogZmlsbCBhbnl3YXkuCi0JICovCisJLyogQ2FsY3VsYXRlIGN1cnJlbnQgZmlsbCBsZXZlbCwgYW5kIGV4aXQgaWYgd2UgZG9uJ3QgbmVlZCB0byBmaWxsICovCiAJZmlsbF9sZXZlbCA9IChyeF9xdWV1ZS0+YWRkZWRfY291bnQgLSByeF9xdWV1ZS0+cmVtb3ZlZF9jb3VudCk7CiAJRUZYX0JVR19PTl9QQVJBTk9JRChmaWxsX2xldmVsID4gRUZYX1JYUV9TSVpFKTsKLQotCS8qIERvbid0IGZpbGwgaWYgd2UgZG9uJ3QgbmVlZCB0byAqLwogCWlmIChmaWxsX2xldmVsID49IHJ4X3F1ZXVlLT5mYXN0X2ZpbGxfdHJpZ2dlcikKLQkJcmV0dXJuIDA7CisJCWdvdG8gb3V0OwogCiAJLyogUmVjb3JkIG1pbmltdW0gZmlsbCBsZXZlbCAqLwogCWlmICh1bmxpa2VseShmaWxsX2xldmVsIDwgcnhfcXVldWUtPm1pbl9maWxsKSkgewpAQCAtMzA1LDk5ICszNTcsNDcgQEAKIAkJCXJ4X3F1ZXVlLT5taW5fZmlsbCA9IGZpbGxfbGV2ZWw7CiAJfQogCi0JLyogQWNxdWlyZSBSWCBhZGQgbG9jay4gIElmIHRoaXMgbG9jayBpcyBjb250ZW5kZWQsIHRoZW4gYSBmYXN0Ci0JICogZmlsbCBtdXN0IGFscmVhZHkgYmUgaW4gcHJvZ3Jlc3MgKGUuZy4gaW4gdGhlIHJlZmlsbAotCSAqIHRhc2tsZXQpLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nCi0JICovCi0JaWYgKCFzcGluX3RyeWxvY2tfYmgoJnJ4X3F1ZXVlLT5hZGRfbG9jaykpCi0JCXJldHVybiAtMTsKLQotIHJldHJ5OgotCS8qIFJlY2FsY3VsYXRlIGN1cnJlbnQgZmlsbCBsZXZlbCBub3cgdGhhdCB3ZSBoYXZlIHRoZSBsb2NrICovCi0JZmlsbF9sZXZlbCA9IChyeF9xdWV1ZS0+YWRkZWRfY291bnQgLSByeF9xdWV1ZS0+cmVtb3ZlZF9jb3VudCk7Ci0JRUZYX0JVR19PTl9QQVJBTk9JRChmaWxsX2xldmVsID4gRUZYX1JYUV9TSVpFKTsKIAlzcGFjZSA9IHJ4X3F1ZXVlLT5mYXN0X2ZpbGxfbGltaXQgLSBmaWxsX2xldmVsOwogCWlmIChzcGFjZSA8IEVGWF9SWF9CQVRDSCkKLQkJZ290byBvdXRfdW5sb2NrOworCQlnb3RvIG91dDsKIAotCUVGWF9UUkFDRShyeF9xdWV1ZS0+ZWZ4LCAiUlggcXVldWUgJWQgZmFzdC1maWxsaW5nIGRlc2NyaXB0b3IgcmluZyBmcm9tIgotCQkgICIgbGV2ZWwgJWQgdG8gbGV2ZWwgJWQgdXNpbmcgJXMgYWxsb2NhdGlvblxuIiwKLQkJICByeF9xdWV1ZS0+cXVldWUsIGZpbGxfbGV2ZWwsIHJ4X3F1ZXVlLT5mYXN0X2ZpbGxfbGltaXQsCi0JCSAgcnhfcXVldWUtPmNoYW5uZWwtPnJ4X2FsbG9jX3B1c2hfcGFnZXMgPyAicGFnZSIgOiAic2tiIik7CisJbmV0aWZfdmRiZyhyeF9xdWV1ZS0+ZWZ4LCByeF9zdGF0dXMsIHJ4X3F1ZXVlLT5lZngtPm5ldF9kZXYsCisJCSAgICJSWCBxdWV1ZSAlZCBmYXN0LWZpbGxpbmcgZGVzY3JpcHRvciByaW5nIGZyb20iCisJCSAgICIgbGV2ZWwgJWQgdG8gbGV2ZWwgJWQgdXNpbmcgJXMgYWxsb2NhdGlvblxuIiwKKwkJICAgcnhfcXVldWUtPnF1ZXVlLCBmaWxsX2xldmVsLCByeF9xdWV1ZS0+ZmFzdF9maWxsX2xpbWl0LAorCQkgICBjaGFubmVsLT5yeF9hbGxvY19wdXNoX3BhZ2VzID8gInBhZ2UiIDogInNrYiIpOwogCiAJZG8gewotCQlmb3IgKGkgPSAwOyBpIDwgRUZYX1JYX0JBVENIOyArK2kpIHsKLQkJCWluZGV4ID0gcnhfcXVldWUtPmFkZGVkX2NvdW50ICYgRUZYX1JYUV9NQVNLOwotCQkJcnhfYnVmID0gZWZ4X3J4X2J1ZmZlcihyeF9xdWV1ZSwgaW5kZXgpOwotCQkJcmMgPSBlZnhfaW5pdF9yeF9idWZmZXIocnhfcXVldWUsIHJ4X2J1Zik7Ci0JCQlpZiAodW5saWtlbHkocmMpKQotCQkJCWdvdG8gb3V0OwotCQkJKytyeF9xdWV1ZS0+YWRkZWRfY291bnQ7CisJCWlmIChjaGFubmVsLT5yeF9hbGxvY19wdXNoX3BhZ2VzKQorCQkJcmMgPSBlZnhfaW5pdF9yeF9idWZmZXJzX3BhZ2UocnhfcXVldWUpOworCQllbHNlCisJCQlyYyA9IGVmeF9pbml0X3J4X2J1ZmZlcnNfc2tiKHJ4X3F1ZXVlKTsKKwkJaWYgKHVubGlrZWx5KHJjKSkgeworCQkJLyogRW5zdXJlIHRoYXQgd2UgZG9uJ3QgbGVhdmUgdGhlIHJ4IHF1ZXVlIGVtcHR5ICovCisJCQlpZiAocnhfcXVldWUtPmFkZGVkX2NvdW50ID09IHJ4X3F1ZXVlLT5yZW1vdmVkX2NvdW50KQorCQkJCWVmeF9zY2hlZHVsZV9zbG93X2ZpbGwocnhfcXVldWUpOworCQkJZ290byBvdXQ7CiAJCX0KIAl9IHdoaWxlICgoc3BhY2UgLT0gRUZYX1JYX0JBVENIKSA+PSBFRlhfUlhfQkFUQ0gpOwogCi0JRUZYX1RSQUNFKHJ4X3F1ZXVlLT5lZngsICJSWCBxdWV1ZSAlZCBmYXN0LWZpbGxlZCBkZXNjcmlwdG9yIHJpbmcgIgotCQkgICJ0byBsZXZlbCAlZFxuIiwgcnhfcXVldWUtPnF1ZXVlLAotCQkgIHJ4X3F1ZXVlLT5hZGRlZF9jb3VudCAtIHJ4X3F1ZXVlLT5yZW1vdmVkX2NvdW50KTsKKwluZXRpZl92ZGJnKHJ4X3F1ZXVlLT5lZngsIHJ4X3N0YXR1cywgcnhfcXVldWUtPmVmeC0+bmV0X2RldiwKKwkJICAgIlJYIHF1ZXVlICVkIGZhc3QtZmlsbGVkIGRlc2NyaXB0b3IgcmluZyAiCisJCSAgICJ0byBsZXZlbCAlZFxuIiwgcnhfcXVldWUtPnF1ZXVlLAorCQkgICByeF9xdWV1ZS0+YWRkZWRfY291bnQgLSByeF9xdWV1ZS0+cmVtb3ZlZF9jb3VudCk7CiAKICBvdXQ6Ci0JLyogU2VuZCB3cml0ZSBwb2ludGVyIHRvIGNhcmQuICovCi0JZWZ4X25pY19ub3RpZnlfcnhfZGVzYyhyeF9xdWV1ZSk7Ci0KLQkvKiBJZiB0aGUgZmFzdCBmaWxsIGlzIHJ1bm5pbmcgaW5zaWRlIGZyb20gdGhlIHJlZmlsbCB0YXNrbGV0LCB0aGVuCi0JICogZm9yIFNNUCBzeXN0ZW1zIGl0IG1heSBiZSBydW5uaW5nIG9uIGEgZGlmZmVyZW50IENQVSB0bwotCSAqIFJYIGV2ZW50IHByb2Nlc3NpbmcsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGZpbGwgbGV2ZWwgbWF5IG5vdyBiZQotCSAqIG91dCBvZiBkYXRlLiAqLwotCWlmICh1bmxpa2VseShyZXRyeSAmJiAocmMgPT0gMCkpKQotCQlnb3RvIHJldHJ5OwotCi0gb3V0X3VubG9jazoKLQlzcGluX3VubG9ja19iaCgmcnhfcXVldWUtPmFkZF9sb2NrKTsKLQotCXJldHVybiByYzsKKwlpZiAocnhfcXVldWUtPm5vdGlmaWVkX2NvdW50ICE9IHJ4X3F1ZXVlLT5hZGRlZF9jb3VudCkKKwkJZWZ4X25pY19ub3RpZnlfcnhfZGVzYyhyeF9xdWV1ZSk7CiB9CiAKLS8qKgotICogZWZ4X2Zhc3RfcHVzaF9yeF9kZXNjcmlwdG9ycyAtIHB1c2ggbmV3IFJYIGRlc2NyaXB0b3JzIHF1aWNrbHkKLSAqIEByeF9xdWV1ZToJCVJYIGRlc2NyaXB0b3IgcXVldWUKLSAqCi0gKiBUaGlzIHdpbGwgYWltIHRvIGZpbGwgdGhlIFJYIGRlc2NyaXB0b3IgcXVldWUgdXAgdG8KLSAqIEByeF9xdWV1ZS0+QGZhc3RfZmlsbF9saW1pdC4gIElmIHRoZXJlIGlzIGluc3VmZmljaWVudCBtZW1vcnkgdG8gZG8gc28sCi0gKiBpdCB3aWxsIHNjaGVkdWxlIGEgd29yayBpdGVtIHRvIGltbWVkaWF0ZWx5IGNvbnRpbnVlIHRoZSBmYXN0IGZpbGwKLSAqLwotdm9pZCBlZnhfZmFzdF9wdXNoX3J4X2Rlc2NyaXB0b3JzKHN0cnVjdCBlZnhfcnhfcXVldWUgKnJ4X3F1ZXVlKQordm9pZCBlZnhfcnhfc2xvd19maWxsKHVuc2lnbmVkIGxvbmcgY29udGV4dCkKIHsKLQlpbnQgcmM7CisJc3RydWN0IGVmeF9yeF9xdWV1ZSAqcnhfcXVldWUgPSAoc3RydWN0IGVmeF9yeF9xdWV1ZSAqKWNvbnRleHQ7CisJc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsID0gcnhfcXVldWUtPmNoYW5uZWw7CiAKLQlyYyA9IF9fZWZ4X2Zhc3RfcHVzaF9yeF9kZXNjcmlwdG9ycyhyeF9xdWV1ZSwgMCk7Ci0JaWYgKHVubGlrZWx5KHJjKSkgewotCQkvKiBTY2hlZHVsZSB0aGUgd29yayBpdGVtIHRvIHJ1biBpbW1lZGlhdGVseS4gVGhlIGhvcGUgaXMKLQkJICogdGhhdCB3b3JrIGlzIGltbWVkaWF0ZWx5IHBlbmRpbmcgdG8gZnJlZSBzb21lIG1lbW9yeQotCQkgKiAoZS5nLiBhbiBSWCBldmVudCBvciBUWCBjb21wbGV0aW9uKQotCQkgKi8KLQkJZWZ4X3NjaGVkdWxlX3Nsb3dfZmlsbChyeF9xdWV1ZSwgMCk7Ci0JfQotfQotCi12b2lkIGVmeF9yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZWZ4X3J4X3F1ZXVlICpyeF9xdWV1ZTsKLQlpbnQgcmM7Ci0KLQlyeF9xdWV1ZSA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgZWZ4X3J4X3F1ZXVlLCB3b3JrLndvcmspOwotCi0JaWYgKHVubGlrZWx5KCFyeF9xdWV1ZS0+Y2hhbm5lbC0+ZW5hYmxlZCkpCi0JCXJldHVybjsKLQotCUVGWF9UUkFDRShyeF9xdWV1ZS0+ZWZ4LCAiUlggcXVldWUgJWQgd29ya2VyIHRocmVhZCBleGVjdXRpbmcgb24gQ1BVICIKLQkJICAiJWRcbiIsIHJ4X3F1ZXVlLT5xdWV1ZSwgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7Ci0KKwkvKiBQb3N0IGFuIGV2ZW50IHRvIGNhdXNlIE5BUEkgdG8gcnVuIGFuZCByZWZpbGwgdGhlIHF1ZXVlICovCisJZWZ4X25pY19nZW5lcmF0ZV9maWxsX2V2ZW50KGNoYW5uZWwpOwogCSsrcnhfcXVldWUtPnNsb3dfZmlsbF9jb3VudDsKLQkvKiBQdXNoIG5ldyBSWCBkZXNjcmlwdG9ycywgYWxsb3dpbmcgYXQgbGVhc3QgMSBqaWZmeSBmb3IKLQkgKiB0aGUga2VybmVsIHRvIGZyZWUgc29tZSBtb3JlIG1lbW9yeS4gKi8KLQlyYyA9IF9fZWZ4X2Zhc3RfcHVzaF9yeF9kZXNjcmlwdG9ycyhyeF9xdWV1ZSwgMSk7Ci0JaWYgKHJjKQotCQllZnhfc2NoZWR1bGVfc2xvd19maWxsKHJ4X3F1ZXVlLCAxKTsKIH0KIAogc3RhdGljIHZvaWQgZWZ4X3J4X3BhY2tldF9fY2hlY2tfbGVuKHN0cnVjdCBlZnhfcnhfcXVldWUgKnJ4X3F1ZXVlLApAQCAtNDE3LDEwICs0MTcsMTIgQEAKIAkqZGlzY2FyZCA9IHRydWU7CiAKIAlpZiAoKGxlbiA+IHJ4X2J1Zi0+bGVuKSAmJiBFRlhfV09SS0FST1VORF84MDcxKGVmeCkpIHsKLQkJRUZYX0VSUl9STChlZngsICIgUlggcXVldWUgJWQgc2VyaW91c2x5IG92ZXJsZW5ndGggIgotCQkJICAgIlJYIGV2ZW50ICgweCV4ID4gMHgleCsweCV4KS4gTGVha2luZ1xuIiwKLQkJCSAgIHJ4X3F1ZXVlLT5xdWV1ZSwgbGVuLCBtYXhfbGVuLAotCQkJICAgZWZ4LT50eXBlLT5yeF9idWZmZXJfcGFkZGluZyk7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQluZXRpZl9lcnIoZWZ4LCByeF9lcnIsIGVmeC0+bmV0X2RldiwKKwkJCQkgICIgUlggcXVldWUgJWQgc2VyaW91c2x5IG92ZXJsZW5ndGggIgorCQkJCSAgIlJYIGV2ZW50ICgweCV4ID4gMHgleCsweCV4KS4gTGVha2luZ1xuIiwKKwkJCQkgIHJ4X3F1ZXVlLT5xdWV1ZSwgbGVuLCBtYXhfbGVuLAorCQkJCSAgZWZ4LT50eXBlLT5yeF9idWZmZXJfcGFkZGluZyk7CiAJCS8qIElmIHRoaXMgYnVmZmVyIHdhcyBza2ItYWxsb2NhdGVkLCB0aGVuIHRoZSBtZXRhCiAJCSAqIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgc2tiIHdpbGwgYmUgdHJhc2hlZC4gU28KIAkJICogd2UgaGF2ZSBubyBjaG9pY2UgYnV0IHRvIGxlYWsgdGhlIGZyYWdtZW50LgpAQCAtNDI4LDggKzQzMCwxMSBAQAogCQkqbGVha19wYWNrZXQgPSAocnhfYnVmLT5za2IgIT0gTlVMTCk7CiAJCWVmeF9zY2hlZHVsZV9yZXNldChlZngsIFJFU0VUX1RZUEVfUlhfUkVDT1ZFUlkpOwogCX0gZWxzZSB7Ci0JCUVGWF9FUlJfUkwoZWZ4LCAiIFJYIHF1ZXVlICVkIG92ZXJsZW5ndGggUlggZXZlbnQgIgotCQkJICAgIigweCV4ID4gMHgleClcbiIsIHJ4X3F1ZXVlLT5xdWV1ZSwgbGVuLCBtYXhfbGVuKTsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCW5ldGlmX2VycihlZngsIHJ4X2VyciwgZWZ4LT5uZXRfZGV2LAorCQkJCSAgIiBSWCBxdWV1ZSAlZCBvdmVybGVuZ3RoIFJYIGV2ZW50ICIKKwkJCQkgICIoMHgleCA+IDB4JXgpXG4iLAorCQkJCSAgcnhfcXVldWUtPnF1ZXVlLCBsZW4sIG1heF9sZW4pOwogCX0KIAogCXJ4X3F1ZXVlLT5jaGFubmVsLT5uX3J4X292ZXJsZW5ndGgrKzsKQEAgLTQ0OSw2ICs0NTQsNyBAQAogCiAJLyogUGFzcyB0aGUgc2tiL3BhZ2UgaW50byB0aGUgTFJPIGVuZ2luZSAqLwogCWlmIChyeF9idWYtPnBhZ2UpIHsKKwkJc3RydWN0IGVmeF9uaWMgKmVmeCA9IGNoYW5uZWwtPmVmeDsKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSByeF9idWYtPnBhZ2U7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAKQEAgLTQ2MSw2ICs0NjcsOSBAQAogCQkJcmV0dXJuOwogCQl9CiAKKwkJaWYgKGVmeC0+bmV0X2Rldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYSEFTSCkKKwkJCXNrYi0+cnhoYXNoID0gZWZ4X3J4X2J1Zl9oYXNoKHJ4X2J1Zik7CisKIAkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5wYWdlID0gcGFnZTsKIAkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5wYWdlX29mZnNldCA9CiAJCQllZnhfcnhfYnVmX29mZnNldChyeF9idWYpOwpAQCAtNDk4LDYgKzUwNyw3IEBACiAJCSAgIHVuc2lnbmVkIGludCBsZW4sIGJvb2wgY2hlY2tzdW1tZWQsIGJvb2wgZGlzY2FyZCkKIHsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gcnhfcXVldWUtPmVmeDsKKwlzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwgPSByeF9xdWV1ZS0+Y2hhbm5lbDsKIAlzdHJ1Y3QgZWZ4X3J4X2J1ZmZlciAqcnhfYnVmOwogCWJvb2wgbGVha19wYWNrZXQgPSBmYWxzZTsKIApAQCAtNTE2LDIxICs1MjYsMjMgQEAKIAllZnhfcnhfcGFja2V0X19jaGVja19sZW4ocnhfcXVldWUsIHJ4X2J1ZiwgbGVuLAogCQkJCSAmZGlzY2FyZCwgJmxlYWtfcGFja2V0KTsKIAotCUVGWF9UUkFDRShlZngsICJSWCBxdWV1ZSAlZCByZWNlaXZlZCBpZCAleCBhdCAlbGx4KyV4ICVzJXNcbiIsCi0JCSAgcnhfcXVldWUtPnF1ZXVlLCBpbmRleCwKLQkJICAodW5zaWduZWQgbG9uZyBsb25nKXJ4X2J1Zi0+ZG1hX2FkZHIsIGxlbiwKLQkJICAoY2hlY2tzdW1tZWQgPyAiIFtTVU1NRURdIiA6ICIiKSwKLQkJICAoZGlzY2FyZCA/ICIgW0RJU0NBUkRdIiA6ICIiKSk7CisJbmV0aWZfdmRiZyhlZngsIHJ4X3N0YXR1cywgZWZ4LT5uZXRfZGV2LAorCQkgICAiUlggcXVldWUgJWQgcmVjZWl2ZWQgaWQgJXggYXQgJWxseCsleCAlcyVzXG4iLAorCQkgICByeF9xdWV1ZS0+cXVldWUsIGluZGV4LAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKXJ4X2J1Zi0+ZG1hX2FkZHIsIGxlbiwKKwkJICAgKGNoZWNrc3VtbWVkID8gIiBbU1VNTUVEXSIgOiAiIiksCisJCSAgIChkaXNjYXJkID8gIiBbRElTQ0FSRF0iIDogIiIpKTsKIAogCS8qIERpc2NhcmQgcGFja2V0LCBpZiBpbnN0cnVjdGVkIHRvIGRvIHNvICovCiAJaWYgKHVubGlrZWx5KGRpc2NhcmQpKSB7CiAJCWlmICh1bmxpa2VseShsZWFrX3BhY2tldCkpCi0JCQlyeF9xdWV1ZS0+Y2hhbm5lbC0+bl9za2J1ZmZfbGVha3MrKzsKKwkJCWNoYW5uZWwtPm5fc2tidWZmX2xlYWtzKys7CiAJCWVsc2UKLQkJCS8qIFdlIGhhdmVuJ3QgY2FsbGVkIGVmeF91bm1hcF9yeF9idWZmZXIgeWV0LAotCQkJICogc28gZmluaSB0aGUgZW50aXJlIHJ4X2J1ZmZlciBoZXJlICovCi0JCQllZnhfZmluaV9yeF9idWZmZXIocnhfcXVldWUsIHJ4X2J1Zik7Ci0JCXJldHVybjsKKwkJCWVmeF9yZWN5Y2xlX3J4X2J1ZmZlcihjaGFubmVsLCByeF9idWYpOworCisJCS8qIERvbid0IGhvbGQgb2ZmIHRoZSBwcmV2aW91cyByZWNlaXZlICovCisJCXJ4X2J1ZiA9IE5VTEw7CisJCWdvdG8gb3V0OwogCX0KIAogCS8qIFJlbGVhc2UgY2FyZCByZXNvdXJjZXMgLSBhc3N1bWVzIGFsbCBSWCBidWZmZXJzIGNvbnN1bWVkIGluLW9yZGVyCkBAIC01NDcsNiArNTU5LDcgQEAKIAkgKiBwcmVmZXRjaGVkIGludG8gY2FjaGUuCiAJICovCiAJcnhfYnVmLT5sZW4gPSBsZW47CitvdXQ6CiAJaWYgKHJ4X3F1ZXVlLT5jaGFubmVsLT5yeF9wa3QpCiAJCV9fZWZ4X3J4X3BhY2tldChyeF9xdWV1ZS0+Y2hhbm5lbCwKIAkJCQlyeF9xdWV1ZS0+Y2hhbm5lbC0+cnhfcGt0LApAQCAtNTYyLDYgKzU3NSw5IEBACiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IGNoYW5uZWwtPmVmeDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCisJcnhfYnVmLT5kYXRhICs9IGVmeC0+dHlwZS0+cnhfYnVmZmVyX2hhc2hfc2l6ZTsKKwlyeF9idWYtPmxlbiAtPSBlZngtPnR5cGUtPnJ4X2J1ZmZlcl9oYXNoX3NpemU7CisKIAkvKiBJZiB3ZSdyZSBpbiBsb29wYmFjayB0ZXN0LCB0aGVuIHBhc3MgdGhlIHBhY2tldCBkaXJlY3RseSB0byB0aGUKIAkgKiBsb29wYmFjayBsYXllciwgYW5kIGZyZWUgdGhlIHJ4X2J1ZiBoZXJlCiAJICovCkBAIC01NzQsOCArNTkwLDEyIEBACiAJaWYgKHJ4X2J1Zi0+c2tiKSB7CiAJCXByZWZldGNoKHNrYl9zaGluZm8ocnhfYnVmLT5za2IpKTsKIAorCQlza2JfcmVzZXJ2ZShyeF9idWYtPnNrYiwgZWZ4LT50eXBlLT5yeF9idWZmZXJfaGFzaF9zaXplKTsKIAkJc2tiX3B1dChyeF9idWYtPnNrYiwgcnhfYnVmLT5sZW4pOwogCisJCWlmIChlZngtPm5ldF9kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWEhBU0gpCisJCQlyeF9idWYtPnNrYi0+cnhoYXNoID0gZWZ4X3J4X2J1Zl9oYXNoKHJ4X2J1Zik7CisKIAkJLyogTW92ZSBwYXN0IHRoZSBldGhlcm5ldCBoZWFkZXIuIHJ4X2J1Zi0+ZGF0YSBzdGlsbCBwb2ludHMKIAkJICogYXQgdGhlIGV0aGVybmV0IGhlYWRlciAqLwogCQlyeF9idWYtPnNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhyeF9idWYtPnNrYiwKQEAgLTYzMyw3ICs2NTMsOCBAQAogCXVuc2lnbmVkIGludCByeHFfc2l6ZTsKIAlpbnQgcmM7CiAKLQlFRlhfTE9HKGVmeCwgImNyZWF0aW5nIFJYIHF1ZXVlICVkXG4iLCByeF9xdWV1ZS0+cXVldWUpOworCW5ldGlmX2RiZyhlZngsIHByb2JlLCBlZngtPm5ldF9kZXYsCisJCSAgImNyZWF0aW5nIFJYIHF1ZXVlICVkXG4iLCByeF9xdWV1ZS0+cXVldWUpOwogCiAJLyogQWxsb2NhdGUgUlggYnVmZmVycyAqLwogCXJ4cV9zaXplID0gRUZYX1JYUV9TSVpFICogc2l6ZW9mKCpyeF9xdWV1ZS0+YnVmZmVyKTsKQEAgLTY1Myw3ICs2NzQsOCBAQAogewogCXVuc2lnbmVkIGludCBtYXhfZmlsbCwgdHJpZ2dlciwgbGltaXQ7CiAKLQlFRlhfTE9HKHJ4X3F1ZXVlLT5lZngsICJpbml0aWFsaXNpbmcgUlggcXVldWUgJWRcbiIsIHJ4X3F1ZXVlLT5xdWV1ZSk7CisJbmV0aWZfZGJnKHJ4X3F1ZXVlLT5lZngsIGRydiwgcnhfcXVldWUtPmVmeC0+bmV0X2RldiwKKwkJICAiaW5pdGlhbGlzaW5nIFJYIHF1ZXVlICVkXG4iLCByeF9xdWV1ZS0+cXVldWUpOwogCiAJLyogSW5pdGlhbGlzZSBwdHIgZmllbGRzICovCiAJcnhfcXVldWUtPmFkZGVkX2NvdW50ID0gMDsKQEAgLTY4MCw4ICs3MDIsMTAgQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgZWZ4X3J4X2J1ZmZlciAqcnhfYnVmOwogCi0JRUZYX0xPRyhyeF9xdWV1ZS0+ZWZ4LCAic2h1dHRpbmcgZG93biBSWCBxdWV1ZSAlZFxuIiwgcnhfcXVldWUtPnF1ZXVlKTsKKwluZXRpZl9kYmcocnhfcXVldWUtPmVmeCwgZHJ2LCByeF9xdWV1ZS0+ZWZ4LT5uZXRfZGV2LAorCQkgICJzaHV0dGluZyBkb3duIFJYIHF1ZXVlICVkXG4iLCByeF9xdWV1ZS0+cXVldWUpOwogCisJZGVsX3RpbWVyX3N5bmMoJnJ4X3F1ZXVlLT5zbG93X2ZpbGwpOwogCWVmeF9uaWNfZmluaV9yeChyeF9xdWV1ZSk7CiAKIAkvKiBSZWxlYXNlIFJYIGJ1ZmZlcnMgTkIgc3RhcnQgYXQgaW5kZXggMCBub3QgY3VycmVudCBIVyBwdHIgKi8KQEAgLTY5MSwyMSArNzE1LDEyIEBACiAJCQllZnhfZmluaV9yeF9idWZmZXIocnhfcXVldWUsIHJ4X2J1Zik7CiAJCX0KIAl9Ci0KLQkvKiBGb3IgYSBwYWdlIHRoYXQgaXMgcGFydC13YXkgdGhyb3VnaCBzcGxpdHRpbmcgaW50byBSWCBidWZmZXJzICovCi0JaWYgKHJ4X3F1ZXVlLT5idWZfcGFnZSAhPSBOVUxMKSB7Ci0JCXBjaV91bm1hcF9wYWdlKHJ4X3F1ZXVlLT5lZngtPnBjaV9kZXYsIHJ4X3F1ZXVlLT5idWZfZG1hX2FkZHIsCi0JCQkgICAgICAgZWZ4X3J4X2J1Zl9zaXplKHJ4X3F1ZXVlLT5lZngpLAotCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCV9fZnJlZV9wYWdlcyhyeF9xdWV1ZS0+YnVmX3BhZ2UsCi0JCQkgICAgIHJ4X3F1ZXVlLT5lZngtPnJ4X2J1ZmZlcl9vcmRlcik7Ci0JCXJ4X3F1ZXVlLT5idWZfcGFnZSA9IE5VTEw7Ci0JfQogfQogCiB2b2lkIGVmeF9yZW1vdmVfcnhfcXVldWUoc3RydWN0IGVmeF9yeF9xdWV1ZSAqcnhfcXVldWUpCiB7Ci0JRUZYX0xPRyhyeF9xdWV1ZS0+ZWZ4LCAiZGVzdHJveWluZyBSWCBxdWV1ZSAlZFxuIiwgcnhfcXVldWUtPnF1ZXVlKTsKKwluZXRpZl9kYmcocnhfcXVldWUtPmVmeCwgZHJ2LCByeF9xdWV1ZS0+ZWZ4LT5uZXRfZGV2LAorCQkgICJkZXN0cm95aW5nIFJYIHF1ZXVlICVkXG4iLCByeF9xdWV1ZS0+cXVldWUpOwogCiAJZWZ4X25pY19yZW1vdmVfcngocnhfcXVldWUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvc2VsZnRlc3QuYyBiL2RyaXZlcnMvbmV0L3NmYy9zZWxmdGVzdC5jCmluZGV4IDM3MWU4NmMuLjg1ZjAxNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9zZWxmdGVzdC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9zZWxmdGVzdC5jCkBAIC0zOCw3ICszOCw3IEBACiAJc3RydWN0IHVkcGhkciB1ZHA7CiAJX19iZTE2IGl0ZXJhdGlvbjsKIAljb25zdCBjaGFyIG1zZ1s2NF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIExvb3BiYWNrIHRlc3Qgc291cmNlIE1BQyBhZGRyZXNzICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwYXlsb2FkX3NvdXJjZVtFVEhfQUxFTl0gPSB7CkBAIC0xMjMsNyArMTIzLDcgQEAKIHsKIAlzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWw7CiAKLQlFRlhfTE9HKGVmeCwgInRlc3RpbmcgaW50ZXJydXB0c1xuIik7CisJbmV0aWZfZGJnKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsICJ0ZXN0aW5nIGludGVycnVwdHNcbiIpOwogCXRlc3RzLT5pbnRlcnJ1cHQgPSAtMTsKIAogCS8qIFJlc2V0IGludGVycnVwdCBmbGFnICovCkBAIC0xNDIsMTYgKzE0MiwxNyBAQAogCWVmeF9uaWNfZ2VuZXJhdGVfaW50ZXJydXB0KGVmeCk7CiAKIAkvKiBXYWl0IGZvciBhcnJpdmFsIG9mIHRlc3QgaW50ZXJydXB0LiAqLwotCUVGWF9MT0coZWZ4LCAid2FpdGluZyBmb3IgdGVzdCBpbnRlcnJ1cHRcbiIpOworCW5ldGlmX2RiZyhlZngsIGRydiwgZWZ4LT5uZXRfZGV2LCAid2FpdGluZyBmb3IgdGVzdCBpbnRlcnJ1cHRcbiIpOwogCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKEhaIC8gMTApOwogCWlmIChlZngtPmxhc3RfaXJxX2NwdSA+PSAwKQogCQlnb3RvIHN1Y2Nlc3M7CiAKLQlFRlhfRVJSKGVmeCwgInRpbWVkIG91dCB3YWl0aW5nIGZvciBpbnRlcnJ1cHRcbiIpOworCW5ldGlmX2VycihlZngsIGRydiwgZWZ4LT5uZXRfZGV2LCAidGltZWQgb3V0IHdhaXRpbmcgZm9yIGludGVycnVwdFxuIik7CiAJcmV0dXJuIC1FVElNRURPVVQ7CiAKICBzdWNjZXNzOgotCUVGWF9MT0coZWZ4LCAiJXMgdGVzdCBpbnRlcnJ1cHQgc2VlbiBvbiBDUFUlZFxuIiwgSU5UX01PREUoZWZ4KSwKKwluZXRpZl9kYmcoZWZ4LCBkcnYsIGVmeC0+bmV0X2RldiwgIiVzIHRlc3QgaW50ZXJydXB0IHNlZW4gb24gQ1BVJWRcbiIsCisJCSAgSU5UX01PREUoZWZ4KSwKIAkJZWZ4LT5sYXN0X2lycV9jcHUpOwogCXRlc3RzLT5pbnRlcnJ1cHQgPSAxOwogCXJldHVybiAwOwpAQCAtMTYxLDIzICsxNjIsMTggQEAKIHN0YXRpYyBpbnQgZWZ4X3Rlc3RfZXZlbnRxX2lycShzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwsCiAJCQkgICAgICAgc3RydWN0IGVmeF9zZWxmX3Rlc3RzICp0ZXN0cykKIHsKLQl1bnNpZ25lZCBpbnQgbWFnaWMsIGNvdW50OwotCi0JLyogQ2hhbm5lbCBzcGVjaWZpYyBjb2RlLCBsaW1pdGVkIHRvIDIwIGJpdHMgKi8KLQltYWdpYyA9ICgweDAwMDEwMTUwICsgY2hhbm5lbC0+Y2hhbm5lbCk7Ci0JRUZYX0xPRyhjaGFubmVsLT5lZngsICJjaGFubmVsICVkIHRlc3RpbmcgZXZlbnQgcXVldWUgd2l0aCBjb2RlICV4XG4iLAotCQljaGFubmVsLT5jaGFubmVsLCBtYWdpYyk7CisJc3RydWN0IGVmeF9uaWMgKmVmeCA9IGNoYW5uZWwtPmVmeDsKKwl1bnNpZ25lZCBpbnQgbWFnaWNfY291bnQsIGNvdW50OwogCiAJdGVzdHMtPmV2ZW50cV9kbWFbY2hhbm5lbC0+Y2hhbm5lbF0gPSAtMTsKIAl0ZXN0cy0+ZXZlbnRxX2ludFtjaGFubmVsLT5jaGFubmVsXSA9IC0xOwogCXRlc3RzLT5ldmVudHFfcG9sbFtjaGFubmVsLT5jaGFubmVsXSA9IC0xOwogCi0JLyogUmVzZXQgZmxhZyBhbmQgemVybyBtYWdpYyB3b3JkICovCisJbWFnaWNfY291bnQgPSBjaGFubmVsLT5tYWdpY19jb3VudDsKIAljaGFubmVsLT5lZngtPmxhc3RfaXJxX2NwdSA9IC0xOwotCWNoYW5uZWwtPmV2ZW50cV9tYWdpYyA9IDA7CiAJc21wX3dtYigpOwogCi0JZWZ4X25pY19nZW5lcmF0ZV90ZXN0X2V2ZW50KGNoYW5uZWwsIG1hZ2ljKTsKKwllZnhfbmljX2dlbmVyYXRlX3Rlc3RfZXZlbnQoY2hhbm5lbCk7CiAKIAkvKiBXYWl0IGZvciBhcnJpdmFsIG9mIGludGVycnVwdCAqLwogCWNvdW50ID0gMDsKQEAgLTE4NywzMyArMTgzLDM2IEBACiAJCWlmIChjaGFubmVsLT53b3JrX3BlbmRpbmcpCiAJCQllZnhfcHJvY2Vzc19jaGFubmVsX25vdyhjaGFubmVsKTsKIAotCQlpZiAoY2hhbm5lbC0+ZXZlbnRxX21hZ2ljID09IG1hZ2ljKQorCQlpZiAoY2hhbm5lbC0+bWFnaWNfY291bnQgIT0gbWFnaWNfY291bnQpCiAJCQlnb3RvIGV2ZW50cV9vazsKIAl9IHdoaWxlICgrK2NvdW50IDwgMik7CiAKLQlFRlhfRVJSKGNoYW5uZWwtPmVmeCwgImNoYW5uZWwgJWQgdGltZWQgb3V0IHdhaXRpbmcgZm9yIGV2ZW50IHF1ZXVlXG4iLAotCQljaGFubmVsLT5jaGFubmVsKTsKKwluZXRpZl9lcnIoZWZ4LCBkcnYsIGVmeC0+bmV0X2RldiwKKwkJICAiY2hhbm5lbCAlZCB0aW1lZCBvdXQgd2FpdGluZyBmb3IgZXZlbnQgcXVldWVcbiIsCisJCSAgY2hhbm5lbC0+Y2hhbm5lbCk7CiAKIAkvKiBTZWUgaWYgaW50ZXJydXB0IGFycml2ZWQgKi8KIAlpZiAoY2hhbm5lbC0+ZWZ4LT5sYXN0X2lycV9jcHUgPj0gMCkgewotCQlFRlhfRVJSKGNoYW5uZWwtPmVmeCwgImNoYW5uZWwgJWQgc2F3IGludGVycnVwdCBvbiBDUFUlZCAiCi0JCQkiZHVyaW5nIGV2ZW50IHF1ZXVlIHRlc3RcbiIsIGNoYW5uZWwtPmNoYW5uZWwsCi0JCQlyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJbmV0aWZfZXJyKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsCisJCQkgICJjaGFubmVsICVkIHNhdyBpbnRlcnJ1cHQgb24gQ1BVJWQgIgorCQkJICAiZHVyaW5nIGV2ZW50IHF1ZXVlIHRlc3RcbiIsIGNoYW5uZWwtPmNoYW5uZWwsCisJCQkgIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOwogCQl0ZXN0cy0+ZXZlbnRxX2ludFtjaGFubmVsLT5jaGFubmVsXSA9IDE7CiAJfQogCiAJLyogQ2hlY2sgdG8gc2VlIGlmIGV2ZW50IHdhcyByZWNlaXZlZCBldmVuIGlmIGludGVycnVwdCB3YXNuJ3QgKi8KIAllZnhfcHJvY2Vzc19jaGFubmVsX25vdyhjaGFubmVsKTsKLQlpZiAoY2hhbm5lbC0+ZXZlbnRxX21hZ2ljID09IG1hZ2ljKSB7Ci0JCUVGWF9FUlIoY2hhbm5lbC0+ZWZ4LCAiY2hhbm5lbCAlZCBldmVudCB3YXMgZ2VuZXJhdGVkLCBidXQgIgotCQkJImZhaWxlZCB0byB0cmlnZ2VyIGFuIGludGVycnVwdFxuIiwgY2hhbm5lbC0+Y2hhbm5lbCk7CisJaWYgKGNoYW5uZWwtPm1hZ2ljX2NvdW50ICE9IG1hZ2ljX2NvdW50KSB7CisJCW5ldGlmX2VycihlZngsIGRydiwgZWZ4LT5uZXRfZGV2LAorCQkJICAiY2hhbm5lbCAlZCBldmVudCB3YXMgZ2VuZXJhdGVkLCBidXQgIgorCQkJICAiZmFpbGVkIHRvIHRyaWdnZXIgYW4gaW50ZXJydXB0XG4iLCBjaGFubmVsLT5jaGFubmVsKTsKIAkJdGVzdHMtPmV2ZW50cV9kbWFbY2hhbm5lbC0+Y2hhbm5lbF0gPSAxOwogCX0KIAogCXJldHVybiAtRVRJTUVET1VUOwogIGV2ZW50cV9vazoKLQlFRlhfTE9HKGNoYW5uZWwtPmVmeCwgImNoYW5uZWwgJWQgZXZlbnQgcXVldWUgcGFzc2VkXG4iLAotCQljaGFubmVsLT5jaGFubmVsKTsKKwluZXRpZl9kYmcoZWZ4LCBkcnYsIGVmeC0+bmV0X2RldiwgImNoYW5uZWwgJWQgZXZlbnQgcXVldWUgcGFzc2VkXG4iLAorCQkgIGNoYW5uZWwtPmNoYW5uZWwpOwogCXRlc3RzLT5ldmVudHFfZG1hW2NoYW5uZWwtPmNoYW5uZWxdID0gMTsKIAl0ZXN0cy0+ZXZlbnRxX2ludFtjaGFubmVsLT5jaGFubmVsXSA9IDE7CiAJdGVzdHMtPmV2ZW50cV9wb2xsW2NoYW5uZWwtPmNoYW5uZWxdID0gMTsKQEAgLTI2Niw1MSArMjY1LDU3IEBACiAKIAkvKiBDaGVjayB0aGF0IGhlYWRlciBleGlzdHMgKi8KIAlpZiAocGt0X2xlbiA8IHNpemVvZihyZWNlaXZlZC0+aGVhZGVyKSkgewotCQlFRlhfRVJSKGVmeCwgInNhdyBydW50IFJYIHBhY2tldCAobGVuZ3RoICVkKSBpbiAlcyBsb29wYmFjayAiCi0JCQkidGVzdFxuIiwgcGt0X2xlbiwgTE9PUEJBQ0tfTU9ERShlZngpKTsKKwkJbmV0aWZfZXJyKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsCisJCQkgICJzYXcgcnVudCBSWCBwYWNrZXQgKGxlbmd0aCAlZCkgaW4gJXMgbG9vcGJhY2sgIgorCQkJICAidGVzdFxuIiwgcGt0X2xlbiwgTE9PUEJBQ0tfTU9ERShlZngpKTsKIAkJZ290byBlcnI7CiAJfQogCiAJLyogQ2hlY2sgdGhhdCB0aGUgZXRoZXJuZXQgaGVhZGVyIGV4aXN0cyAqLwogCWlmIChtZW1jbXAoJnJlY2VpdmVkLT5oZWFkZXIsICZwYXlsb2FkLT5oZWFkZXIsIEVUSF9ITEVOKSAhPSAwKSB7Ci0JCUVGWF9FUlIoZWZ4LCAic2F3IG5vbi1sb29wYmFjayBSWCBwYWNrZXQgaW4gJXMgbG9vcGJhY2sgdGVzdFxuIiwKLQkJCUxPT1BCQUNLX01PREUoZWZ4KSk7CisJCW5ldGlmX2VycihlZngsIGRydiwgZWZ4LT5uZXRfZGV2LAorCQkJICAic2F3IG5vbi1sb29wYmFjayBSWCBwYWNrZXQgaW4gJXMgbG9vcGJhY2sgdGVzdFxuIiwKKwkJCSAgTE9PUEJBQ0tfTU9ERShlZngpKTsKIAkJZ290byBlcnI7CiAJfQogCiAJLyogQ2hlY2sgcGFja2V0IGxlbmd0aCAqLwogCWlmIChwa3RfbGVuICE9IHNpemVvZigqcGF5bG9hZCkpIHsKLQkJRUZYX0VSUihlZngsICJzYXcgaW5jb3JyZWN0IFJYIHBhY2tldCBsZW5ndGggJWQgKHdhbnRlZCAlZCkgaW4gIgotCQkJIiVzIGxvb3BiYWNrIHRlc3RcbiIsIHBrdF9sZW4sIChpbnQpc2l6ZW9mKCpwYXlsb2FkKSwKLQkJCUxPT1BCQUNLX01PREUoZWZ4KSk7CisJCW5ldGlmX2VycihlZngsIGRydiwgZWZ4LT5uZXRfZGV2LAorCQkJICAic2F3IGluY29ycmVjdCBSWCBwYWNrZXQgbGVuZ3RoICVkICh3YW50ZWQgJWQpIGluICIKKwkJCSAgIiVzIGxvb3BiYWNrIHRlc3RcbiIsIHBrdF9sZW4sIChpbnQpc2l6ZW9mKCpwYXlsb2FkKSwKKwkJCSAgTE9PUEJBQ0tfTU9ERShlZngpKTsKIAkJZ290byBlcnI7CiAJfQogCiAJLyogQ2hlY2sgdGhhdCBJUCBoZWFkZXIgbWF0Y2hlcyAqLwogCWlmIChtZW1jbXAoJnJlY2VpdmVkLT5pcCwgJnBheWxvYWQtPmlwLCBzaXplb2YocGF5bG9hZC0+aXApKSAhPSAwKSB7Ci0JCUVGWF9FUlIoZWZ4LCAic2F3IGNvcnJ1cHRlZCBJUCBoZWFkZXIgaW4gJXMgbG9vcGJhY2sgdGVzdFxuIiwKLQkJCUxPT1BCQUNLX01PREUoZWZ4KSk7CisJCW5ldGlmX2VycihlZngsIGRydiwgZWZ4LT5uZXRfZGV2LAorCQkJICAic2F3IGNvcnJ1cHRlZCBJUCBoZWFkZXIgaW4gJXMgbG9vcGJhY2sgdGVzdFxuIiwKKwkJCSAgTE9PUEJBQ0tfTU9ERShlZngpKTsKIAkJZ290byBlcnI7CiAJfQogCiAJLyogQ2hlY2sgdGhhdCBtc2cgYW5kIHBhZGRpbmcgbWF0Y2hlcyAqLwogCWlmIChtZW1jbXAoJnJlY2VpdmVkLT5tc2csICZwYXlsb2FkLT5tc2csIHNpemVvZihyZWNlaXZlZC0+bXNnKSkgIT0gMCkgewotCQlFRlhfRVJSKGVmeCwgInNhdyBjb3JydXB0ZWQgUlggcGFja2V0IGluICVzIGxvb3BiYWNrIHRlc3RcbiIsCi0JCQlMT09QQkFDS19NT0RFKGVmeCkpOworCQluZXRpZl9lcnIoZWZ4LCBkcnYsIGVmeC0+bmV0X2RldiwKKwkJCSAgInNhdyBjb3JydXB0ZWQgUlggcGFja2V0IGluICVzIGxvb3BiYWNrIHRlc3RcbiIsCisJCQkgIExPT1BCQUNLX01PREUoZWZ4KSk7CiAJCWdvdG8gZXJyOwogCX0KIAogCS8qIENoZWNrIHRoYXQgaXRlcmF0aW9uIG1hdGNoZXMgKi8KIAlpZiAocmVjZWl2ZWQtPml0ZXJhdGlvbiAhPSBwYXlsb2FkLT5pdGVyYXRpb24pIHsKLQkJRUZYX0VSUihlZngsICJzYXcgUlggcGFja2V0IGZyb20gaXRlcmF0aW9uICVkICh3YW50ZWQgJWQpIGluICIKLQkJCSIlcyBsb29wYmFjayB0ZXN0XG4iLCBudG9ocyhyZWNlaXZlZC0+aXRlcmF0aW9uKSwKLQkJCW50b2hzKHBheWxvYWQtPml0ZXJhdGlvbiksIExPT1BCQUNLX01PREUoZWZ4KSk7CisJCW5ldGlmX2VycihlZngsIGRydiwgZWZ4LT5uZXRfZGV2LAorCQkJICAic2F3IFJYIHBhY2tldCBmcm9tIGl0ZXJhdGlvbiAlZCAod2FudGVkICVkKSBpbiAiCisJCQkgICIlcyBsb29wYmFjayB0ZXN0XG4iLCBudG9ocyhyZWNlaXZlZC0+aXRlcmF0aW9uKSwKKwkJCSAgbnRvaHMocGF5bG9hZC0+aXRlcmF0aW9uKSwgTE9PUEJBQ0tfTU9ERShlZngpKTsKIAkJZ290byBlcnI7CiAJfQogCiAJLyogSW5jcmVhc2UgY29ycmVjdCBSWCBjb3VudCAqLwotCUVGWF9UUkFDRShlZngsICJnb3QgbG9vcGJhY2sgUlggaW4gJXMgbG9vcGJhY2sgdGVzdFxuIiwKLQkJICBMT09QQkFDS19NT0RFKGVmeCkpOworCW5ldGlmX3ZkYmcoZWZ4LCBkcnYsIGVmeC0+bmV0X2RldiwKKwkJICAgImdvdCBsb29wYmFjayBSWCBpbiAlcyBsb29wYmFjayB0ZXN0XG4iLCBMT09QQkFDS19NT0RFKGVmeCkpOwogCiAJYXRvbWljX2luYygmc3RhdGUtPnJ4X2dvb2QpOwogCXJldHVybjsKQEAgLTMxOCwxMCArMzIzLDEwIEBACiAgZXJyOgogI2lmZGVmIEVGWF9FTkFCTEVfREVCVUcKIAlpZiAoYXRvbWljX3JlYWQoJnN0YXRlLT5yeF9iYWQpID09IDApIHsKLQkJRUZYX0VSUihlZngsICJyZWNlaXZlZCBwYWNrZXQ6XG4iKTsKKwkJbmV0aWZfZXJyKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsICJyZWNlaXZlZCBwYWNrZXQ6XG4iKTsKIAkJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsICIiLCBEVU1QX1BSRUZJWF9PRkZTRVQsIDB4MTAsIDEsCiAJCQkgICAgICAgYnVmX3B0ciwgcGt0X2xlbiwgMCk7Ci0JCUVGWF9FUlIoZWZ4LCAiZXhwZWN0ZWQgcGFja2V0OlxuIik7CisJCW5ldGlmX2VycihlZngsIGRydiwgZWZ4LT5uZXRfZGV2LCAiZXhwZWN0ZWQgcGFja2V0OlxuIik7CiAJCXByaW50X2hleF9kdW1wKEtFUk5fRVJSLCAiIiwgRFVNUF9QUkVGSVhfT0ZGU0VULCAweDEwLCAxLAogCQkJICAgICAgICZzdGF0ZS0+cGF5bG9hZCwgc2l6ZW9mKHN0YXRlLT5wYXlsb2FkKSwgMCk7CiAJfQpAQCAtNDAyLDkgKzQwNywxMSBAQAogCQkJbmV0aWZfdHhfdW5sb2NrX2JoKGVmeC0+bmV0X2Rldik7CiAKIAkJaWYgKHJjICE9IE5FVERFVl9UWF9PSykgewotCQkJRUZYX0VSUihlZngsICJUWCBxdWV1ZSAlZCBjb3VsZCBub3QgdHJhbnNtaXQgcGFja2V0ICVkICIKLQkJCQkib2YgJWQgaW4gJXMgbG9vcGJhY2sgdGVzdFxuIiwgdHhfcXVldWUtPnF1ZXVlLAotCQkJCWkgKyAxLCBzdGF0ZS0+cGFja2V0X2NvdW50LCBMT09QQkFDS19NT0RFKGVmeCkpOworCQkJbmV0aWZfZXJyKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsCisJCQkJICAiVFggcXVldWUgJWQgY291bGQgbm90IHRyYW5zbWl0IHBhY2tldCAlZCBvZiAiCisJCQkJICAiJWQgaW4gJXMgbG9vcGJhY2sgdGVzdFxuIiwgdHhfcXVldWUtPnF1ZXVlLAorCQkJCSAgaSArIDEsIHN0YXRlLT5wYWNrZXRfY291bnQsCisJCQkJICBMT09QQkFDS19NT0RFKGVmeCkpOwogCiAJCQkvKiBEZWZlciBjbGVhbmluZyB1cCB0aGUgb3RoZXIgc2ticyBmb3IgdGhlIGNhbGxlciAqLwogCQkJa2ZyZWVfc2tiKHNrYik7CkBAIC00NjAsMjAgKzQ2NywyMiBAQAogCQkvKiBEb24ndCBmcmVlIHRoZSBza2JzOyB0aGV5IHdpbGwgYmUgcGlja2VkIHVwIG9uIFRYCiAJCSAqIG92ZXJmbG93IG9yIGNoYW5uZWwgdGVhcmRvd24uCiAJCSAqLwotCQlFRlhfRVJSKGVmeCwgIlRYIHF1ZXVlICVkIHNhdyBvbmx5ICVkIG91dCBvZiBhbiBleHBlY3RlZCAlZCAiCi0JCQkiVFggY29tcGxldGlvbiBldmVudHMgaW4gJXMgbG9vcGJhY2sgdGVzdFxuIiwKLQkJCXR4X3F1ZXVlLT5xdWV1ZSwgdHhfZG9uZSwgc3RhdGUtPnBhY2tldF9jb3VudCwKLQkJCUxPT1BCQUNLX01PREUoZWZ4KSk7CisJCW5ldGlmX2VycihlZngsIGRydiwgZWZ4LT5uZXRfZGV2LAorCQkJICAiVFggcXVldWUgJWQgc2F3IG9ubHkgJWQgb3V0IG9mIGFuIGV4cGVjdGVkICVkICIKKwkJCSAgIlRYIGNvbXBsZXRpb24gZXZlbnRzIGluICVzIGxvb3BiYWNrIHRlc3RcbiIsCisJCQkgIHR4X3F1ZXVlLT5xdWV1ZSwgdHhfZG9uZSwgc3RhdGUtPnBhY2tldF9jb3VudCwKKwkJCSAgTE9PUEJBQ0tfTU9ERShlZngpKTsKIAkJcmMgPSAtRVRJTUVET1VUOwogCQkvKiBBbGxvdyB0byBmYWxsIHRocm91Z2ggc28gd2Ugc2VlIHRoZSBSWCBlcnJvcnMgYXMgd2VsbCAqLwogCX0KIAogCS8qIFdlIG1heSBhbHdheXMgYmUgdXAgdG8gYSBmbHVzaCBhd2F5IGZyb20gb3VyIGRlc2lyZWQgcGFja2V0IHRvdGFsICovCiAJaWYgKHJ4X2dvb2QgIT0gc3RhdGUtPnBhY2tldF9jb3VudCkgewotCQlFRlhfTE9HKGVmeCwgIlRYIHF1ZXVlICVkIHNhdyBvbmx5ICVkIG91dCBvZiBhbiBleHBlY3RlZCAlZCAiCi0JCQkicmVjZWl2ZWQgcGFja2V0cyBpbiAlcyBsb29wYmFjayB0ZXN0XG4iLAotCQkJdHhfcXVldWUtPnF1ZXVlLCByeF9nb29kLCBzdGF0ZS0+cGFja2V0X2NvdW50LAotCQkJTE9PUEJBQ0tfTU9ERShlZngpKTsKKwkJbmV0aWZfZGJnKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsCisJCQkgICJUWCBxdWV1ZSAlZCBzYXcgb25seSAlZCBvdXQgb2YgYW4gZXhwZWN0ZWQgJWQgIgorCQkJICAicmVjZWl2ZWQgcGFja2V0cyBpbiAlcyBsb29wYmFjayB0ZXN0XG4iLAorCQkJICB0eF9xdWV1ZS0+cXVldWUsIHJ4X2dvb2QsIHN0YXRlLT5wYWNrZXRfY291bnQsCisJCQkgIExPT1BCQUNLX01PREUoZWZ4KSk7CiAJCXJjID0gLUVUSU1FRE9VVDsKIAkJLyogRmFsbCB0aHJvdWdoICovCiAJfQpAQCAtNTA1LDkgKzUxNCwxMCBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCXN0YXRlLT5mbHVzaCA9IGZhbHNlOwogCi0JCUVGWF9MT0coZWZ4LCAiVFggcXVldWUgJWQgdGVzdGluZyAlcyBsb29wYmFjayB3aXRoICVkICIKLQkJCSJwYWNrZXRzXG4iLCB0eF9xdWV1ZS0+cXVldWUsIExPT1BCQUNLX01PREUoZWZ4KSwKLQkJCXN0YXRlLT5wYWNrZXRfY291bnQpOworCQluZXRpZl9kYmcoZWZ4LCBkcnYsIGVmeC0+bmV0X2RldiwKKwkJCSAgIlRYIHF1ZXVlICVkIHRlc3RpbmcgJXMgbG9vcGJhY2sgd2l0aCAlZCBwYWNrZXRzXG4iLAorCQkJICB0eF9xdWV1ZS0+cXVldWUsIExPT1BCQUNLX01PREUoZWZ4KSwKKwkJCSAgc3RhdGUtPnBhY2tldF9jb3VudCk7CiAKIAkJZWZ4X2l0ZXJhdGVfc3RhdGUoZWZ4KTsKIAkJYmVnaW5fcmMgPSBlZnhfYmVnaW5fbG9vcGJhY2sodHhfcXVldWUpOwpAQCAtNTMxLDkgKzU0MSwxMCBAQAogCQl9CiAJfQogCi0JRUZYX0xPRyhlZngsICJUWCBxdWV1ZSAlZCBwYXNzZWQgJXMgbG9vcGJhY2sgdGVzdCB3aXRoIGEgYnVyc3QgbGVuZ3RoICIKLQkJIm9mICVkIHBhY2tldHNcbiIsIHR4X3F1ZXVlLT5xdWV1ZSwgTE9PUEJBQ0tfTU9ERShlZngpLAotCQlzdGF0ZS0+cGFja2V0X2NvdW50KTsKKwluZXRpZl9kYmcoZWZ4LCBkcnYsIGVmeC0+bmV0X2RldiwKKwkJICAiVFggcXVldWUgJWQgcGFzc2VkICVzIGxvb3BiYWNrIHRlc3Qgd2l0aCBhIGJ1cnN0IGxlbmd0aCAiCisJCSAgIm9mICVkIHBhY2tldHNcbiIsIHR4X3F1ZXVlLT5xdWV1ZSwgTE9PUEJBQ0tfTU9ERShlZngpLAorCQkgIHN0YXRlLT5wYWNrZXRfY291bnQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NDUsNyArNTU2LDcgQEAKIHN0YXRpYyBpbnQgZWZ4X3dhaXRfZm9yX2xpbmsoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKIAlzdHJ1Y3QgZWZ4X2xpbmtfc3RhdGUgKmxpbmtfc3RhdGUgPSAmZWZ4LT5saW5rX3N0YXRlOwotCWludCBjb3VudDsKKwlpbnQgY291bnQsIGxpbmtfdXBfY291bnQgPSAwOwogCWJvb2wgbGlua191cDsKIAogCWZvciAoY291bnQgPSAwOyBjb3VudCA8IDQwOyBjb3VudCsrKSB7CkBAIC01NjcsOCArNTc4LDEyIEBACiAJCQlsaW5rX3VwID0gIWVmeC0+bWFjX29wLT5jaGVja19mYXVsdChlZngpOwogCQltdXRleF91bmxvY2soJmVmeC0+bWFjX2xvY2spOwogCi0JCWlmIChsaW5rX3VwKQotCQkJcmV0dXJuIDA7CisJCWlmIChsaW5rX3VwKSB7CisJCQlpZiAoKytsaW5rX3VwX2NvdW50ID09IDIpCisJCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQlsaW5rX3VwX2NvdW50ID0gMDsKKwkJfQogCX0KIAogCXJldHVybiAtRVRJTUVET1VUOwpAQCAtNjA0LDE1ICs2MTksMTcgQEAKIAkJcmMgPSBfX2VmeF9yZWNvbmZpZ3VyZV9wb3J0KGVmeCk7CiAJCW11dGV4X3VubG9jaygmZWZ4LT5tYWNfbG9jayk7CiAJCWlmIChyYykgewotCQkJRUZYX0VSUihlZngsICJ1bmFibGUgdG8gbW92ZSBpbnRvICVzIGxvb3BiYWNrXG4iLAotCQkJCUxPT1BCQUNLX01PREUoZWZ4KSk7CisJCQluZXRpZl9lcnIoZWZ4LCBkcnYsIGVmeC0+bmV0X2RldiwKKwkJCQkgICJ1bmFibGUgdG8gbW92ZSBpbnRvICVzIGxvb3BiYWNrXG4iLAorCQkJCSAgTE9PUEJBQ0tfTU9ERShlZngpKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKIAkJcmMgPSBlZnhfd2FpdF9mb3JfbGluayhlZngpOwogCQlpZiAocmMpIHsKLQkJCUVGWF9FUlIoZWZ4LCAibG9vcGJhY2sgJXMgbmV2ZXIgY2FtZSB1cFxuIiwKLQkJCQlMT09QQkFDS19NT0RFKGVmeCkpOworCQkJbmV0aWZfZXJyKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsCisJCQkJICAibG9vcGJhY2sgJXMgbmV2ZXIgY2FtZSB1cFxuIiwKKwkJCQkgIExPT1BCQUNLX01PREUoZWZ4KSk7CiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC03MjAsNyArNzM3LDggQEAKIAkJcmNfcmVzZXQgPSByYzsKIAogCWlmIChyY19yZXNldCkgewotCQlFRlhfRVJSKGVmeCwgIlVuYWJsZSB0byByZWNvdmVyIGZyb20gY2hpcCB0ZXN0XG4iKTsKKwkJbmV0aWZfZXJyKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsCisJCQkgICJVbmFibGUgdG8gcmVjb3ZlciBmcm9tIGNoaXAgdGVzdFxuIik7CiAJCWVmeF9zY2hlZHVsZV9yZXNldChlZngsIFJFU0VUX1RZUEVfRElTQUJMRSk7CiAJCXJldHVybiByY19yZXNldDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvc2llbmEuYyBiL2RyaXZlcnMvbmV0L3NmYy9zaWVuYS5jCmluZGV4IGYyYjFlNjEuLjNmYWIwMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9zaWVuYS5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9zaWVuYS5jCkBAIC0xMTgsMTAgKzExOCwxMSBAQAogCQkJCSAgTUNfQ01EX01BQ19OU1RBVFMgKiBzaXplb2YodTY0KSk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7Ci0JRUZYX0xPRyhlZngsICJzdGF0cyBidWZmZXIgYXQgJWxseCAodmlydCAlcCBwaHlzICVsbHgpXG4iLAotCQkodTY0KWVmeC0+c3RhdHNfYnVmZmVyLmRtYV9hZGRyLAotCQllZngtPnN0YXRzX2J1ZmZlci5hZGRyLAotCQkodTY0KXZpcnRfdG9fcGh5cyhlZngtPnN0YXRzX2J1ZmZlci5hZGRyKSk7CisJbmV0aWZfZGJnKGVmeCwgcHJvYmUsIGVmeC0+bmV0X2RldiwKKwkJICAic3RhdHMgYnVmZmVyIGF0ICVsbHggKHZpcnQgJXAgcGh5cyAlbGx4KVxuIiwKKwkJICAodTY0KWVmeC0+c3RhdHNfYnVmZmVyLmRtYV9hZGRyLAorCQkgIGVmeC0+c3RhdHNfYnVmZmVyLmFkZHIsCisJCSAgKHU2NCl2aXJ0X3RvX3BoeXMoZWZ4LT5zdGF0c19idWZmZXIuYWRkcikpOwogCiAJZWZ4X21jZGlfbWFjX3N0YXRzKGVmeCwgZWZ4LT5zdGF0c19idWZmZXIuZG1hX2FkZHIsIDAsIDAsIDEpOwogCkBAIC0yMTYsNyArMjE3LDggQEAKIAllZngtPm5pY19kYXRhID0gbmljX2RhdGE7CiAKIAlpZiAoZWZ4X25pY19mcGdhX3ZlcihlZngpICE9IDApIHsKLQkJRUZYX0VSUihlZngsICJTaWVuYSBGUEdBIG5vdCBzdXBwb3J0ZWRcbiIpOworCQluZXRpZl9lcnIoZWZ4LCBwcm9iZSwgZWZ4LT5uZXRfZGV2LAorCQkJICAiU2llbmEgRlBHQSBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJcmMgPSAtRU5PREVWOwogCQlnb3RvIGZhaWwxOwogCX0KQEAgLTIzMyw4ICsyMzUsOCBAQAogCiAJcmMgPSBlZnhfbWNkaV9md3ZlcihlZngsICZuaWNfZGF0YS0+ZndfdmVyc2lvbiwgJm5pY19kYXRhLT5md19idWlsZCk7CiAJaWYgKHJjKSB7Ci0JCUVGWF9FUlIoZWZ4LCAiRmFpbGVkIHRvIHJlYWQgTUNQVSBmaXJtd2FyZSB2ZXJzaW9uIC0gIgotCQkJInJjICVkXG4iLCByYyk7CisJCW5ldGlmX2VycihlZngsIHByb2JlLCBlZngtPm5ldF9kZXYsCisJCQkgICJGYWlsZWQgdG8gcmVhZCBNQ1BVIGZpcm13YXJlIHZlcnNpb24gLSByYyAlZFxuIiwgcmMpOwogCQlnb3RvIGZhaWwxOyAvKiBNQ1BVIGFic2VudD8gKi8KIAl9CiAKQEAgLTI0MiwxNyArMjQ0LDE5IEBACiAJICogZmlsdGVyIHNldHRpbmdzLiBXZSBtdXN0IGRvIHRoaXMgYmVmb3JlIHdlIHJlc2V0IHRoZSBOSUMgKi8KIAlyYyA9IGVmeF9tY2RpX2Rydl9hdHRhY2goZWZ4LCB0cnVlLCAmYWxyZWFkeV9hdHRhY2hlZCk7CiAJaWYgKHJjKSB7Ci0JCUVGWF9FUlIoZWZ4LCAiVW5hYmxlIHRvIHJlZ2lzdGVyIGRyaXZlciB3aXRoIE1DUFVcbiIpOworCQluZXRpZl9lcnIoZWZ4LCBwcm9iZSwgZWZ4LT5uZXRfZGV2LAorCQkJICAiVW5hYmxlIHRvIHJlZ2lzdGVyIGRyaXZlciB3aXRoIE1DUFVcbiIpOwogCQlnb3RvIGZhaWwyOwogCX0KIAlpZiAoYWxyZWFkeV9hdHRhY2hlZCkKIAkJLyogTm90IGEgZmF0YWwgZXJyb3IgKi8KLQkJRUZYX0VSUihlZngsICJIb3N0IGFscmVhZHkgcmVnaXN0ZXJlZCB3aXRoIE1DUFVcbiIpOworCQluZXRpZl9lcnIoZWZ4LCBwcm9iZSwgZWZ4LT5uZXRfZGV2LAorCQkJICAiSG9zdCBhbHJlYWR5IHJlZ2lzdGVyZWQgd2l0aCBNQ1BVXG4iKTsKIAogCS8qIE5vdyB3ZSBjYW4gcmVzZXQgdGhlIE5JQyAqLwogCXJjID0gc2llbmFfcmVzZXRfaHcoZWZ4LCBSRVNFVF9UWVBFX0FMTCk7CiAJaWYgKHJjKSB7Ci0JCUVGWF9FUlIoZWZ4LCAiZmFpbGVkIHRvIHJlc2V0IE5JQ1xuIik7CisJCW5ldGlmX2VycihlZngsIHByb2JlLCBlZngtPm5ldF9kZXYsICJmYWlsZWQgdG8gcmVzZXQgTklDXG4iKTsKIAkJZ290byBmYWlsMzsKIAl9CiAKQEAgLTI2NCwyNCArMjY4LDIzIEBACiAJCWdvdG8gZmFpbDQ7CiAJQlVHX09OKGVmeC0+aXJxX3N0YXR1cy5kbWFfYWRkciAmIDB4MGYpOwogCi0JRUZYX0xPRyhlZngsICJJTlRfS0VSIGF0ICVsbHggKHZpcnQgJXAgcGh5cyAlbGx4KVxuIiwKLQkJKHVuc2lnbmVkIGxvbmcgbG9uZyllZngtPmlycV9zdGF0dXMuZG1hX2FkZHIsCi0JCWVmeC0+aXJxX3N0YXR1cy5hZGRyLAotCQkodW5zaWduZWQgbG9uZyBsb25nKXZpcnRfdG9fcGh5cyhlZngtPmlycV9zdGF0dXMuYWRkcikpOworCW5ldGlmX2RiZyhlZngsIHByb2JlLCBlZngtPm5ldF9kZXYsCisJCSAgIklOVF9LRVIgYXQgJWxseCAodmlydCAlcCBwaHlzICVsbHgpXG4iLAorCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpZWZ4LT5pcnFfc3RhdHVzLmRtYV9hZGRyLAorCQkgIGVmeC0+aXJxX3N0YXR1cy5hZGRyLAorCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpdmlydF90b19waHlzKGVmeC0+aXJxX3N0YXR1cy5hZGRyKSk7CiAKIAkvKiBSZWFkIGluIHRoZSBub24tdm9sYXRpbGUgY29uZmlndXJhdGlvbiAqLwogCXJjID0gc2llbmFfcHJvYmVfbnZjb25maWcoZWZ4KTsKIAlpZiAocmMgPT0gLUVJTlZBTCkgewotCQlFRlhfRVJSKGVmeCwgIk5WUkFNIGlzIGludmFsaWQgdGhlcmVmb3JlIHVzaW5nIGRlZmF1bHRzXG4iKTsKKwkJbmV0aWZfZXJyKGVmeCwgcHJvYmUsIGVmeC0+bmV0X2RldiwKKwkJCSAgIk5WUkFNIGlzIGludmFsaWQgdGhlcmVmb3JlIHVzaW5nIGRlZmF1bHRzXG4iKTsKIAkJZWZ4LT5waHlfdHlwZSA9IFBIWV9UWVBFX05PTkU7CiAJCWVmeC0+bWRpby5wcnRhZCA9IE1ESU9fUFJUQURfTk9ORTsKIAl9IGVsc2UgaWYgKHJjKSB7CiAJCWdvdG8gZmFpbDU7CiAJfQogCi0JZ2V0X3JhbmRvbV9ieXRlcygmbmljX2RhdGEtPmlwdjZfcnNzX2tleSwKLQkJCSBzaXplb2YobmljX2RhdGEtPmlwdjZfcnNzX2tleSkpOwotCiAJcmV0dXJuIDA7CiAKIGZhaWw1OgpAQCAtMzAxLDcgKzMwNCw2IEBACiAgKi8KIHN0YXRpYyBpbnQgc2llbmFfaW5pdF9uaWMoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKLQlzdHJ1Y3Qgc2llbmFfbmljX2RhdGEgKm5pY19kYXRhID0gZWZ4LT5uaWNfZGF0YTsKIAllZnhfb3dvcmRfdCB0ZW1wOwogCWludCByYzsKIApAQCAtMzI2LDI1ICszMjgsMzYgQEAKIAllZnhfcmVhZG8oZWZ4LCAmdGVtcCwgRlJfQVpfUlhfQ0ZHKTsKIAlFRlhfU0VUX09XT1JEX0ZJRUxEKHRlbXAsIEZSRl9CWl9SWF9ERVNDX1BVU0hfRU4sIDApOwogCUVGWF9TRVRfT1dPUkRfRklFTEQodGVtcCwgRlJGX0JaX1JYX0lOR1JfRU4sIDEpOworCS8qIEVuYWJsZSBoYXNoIGluc2VydGlvbi4gVGhpcyBpcyBicm9rZW4gZm9yIHRoZSAnRmFsY29uJyBoYXNoCisJICogaWYgSVB2NiBoYXNoaW5nIGlzIGFsc28gZW5hYmxlZCwgc28gYWxzbyBzZWxlY3QgVG9lcGxpdHoKKwkgKiBUQ1AvSVB2NCBhbmQgSVB2NCBoYXNoZXMuICovCisJRUZYX1NFVF9PV09SRF9GSUVMRCh0ZW1wLCBGUkZfQlpfUlhfSEFTSF9JTlNSVF9IRFIsIDEpOworCUVGWF9TRVRfT1dPUkRfRklFTEQodGVtcCwgRlJGX0JaX1JYX0hBU0hfQUxHLCAxKTsKKwlFRlhfU0VUX09XT1JEX0ZJRUxEKHRlbXAsIEZSRl9CWl9SWF9JUF9IQVNILCAxKTsKIAllZnhfd3JpdGVvKGVmeCwgJnRlbXAsIEZSX0FaX1JYX0NGRyk7CiAKKwkvKiBTZXQgaGFzaCBrZXkgZm9yIElQdjQgKi8KKwltZW1jcHkoJnRlbXAsIGVmeC0+cnhfaGFzaF9rZXksIHNpemVvZih0ZW1wKSk7CisJZWZ4X3dyaXRlbyhlZngsICZ0ZW1wLCBGUl9CWl9SWF9SU1NfVEtFWSk7CisKIAkvKiBFbmFibGUgSVB2NiBSU1MgKi8KLQlCVUlMRF9CVUdfT04oc2l6ZW9mKG5pY19kYXRhLT5pcHY2X3Jzc19rZXkpICE9CisJQlVJTERfQlVHX09OKHNpemVvZihlZngtPnJ4X2hhc2hfa2V5KSA8CiAJCSAgICAgMiAqIHNpemVvZih0ZW1wKSArIEZSRl9DWl9SWF9SU1NfSVBWNl9US0VZX0hJX1dJRFRIIC8gOCB8fAogCQkgICAgIEZSRl9DWl9SWF9SU1NfSVBWNl9US0VZX0hJX0xCTiAhPSAwKTsKLQltZW1jcHkoJnRlbXAsIG5pY19kYXRhLT5pcHY2X3Jzc19rZXksIHNpemVvZih0ZW1wKSk7CisJbWVtY3B5KCZ0ZW1wLCBlZngtPnJ4X2hhc2hfa2V5LCBzaXplb2YodGVtcCkpOwogCWVmeF93cml0ZW8oZWZ4LCAmdGVtcCwgRlJfQ1pfUlhfUlNTX0lQVjZfUkVHMSk7Ci0JbWVtY3B5KCZ0ZW1wLCBuaWNfZGF0YS0+aXB2Nl9yc3Nfa2V5ICsgc2l6ZW9mKHRlbXApLCBzaXplb2YodGVtcCkpOworCW1lbWNweSgmdGVtcCwgZWZ4LT5yeF9oYXNoX2tleSArIHNpemVvZih0ZW1wKSwgc2l6ZW9mKHRlbXApKTsKIAllZnhfd3JpdGVvKGVmeCwgJnRlbXAsIEZSX0NaX1JYX1JTU19JUFY2X1JFRzIpOwogCUVGWF9QT1BVTEFURV9PV09SRF8yKHRlbXAsIEZSRl9DWl9SWF9SU1NfSVBWNl9USEFTSF9FTkFCTEUsIDEsCiAJCQkgICAgIEZSRl9DWl9SWF9SU1NfSVBWNl9JUF9USEFTSF9FTkFCTEUsIDEpOwotCW1lbWNweSgmdGVtcCwgbmljX2RhdGEtPmlwdjZfcnNzX2tleSArIDIgKiBzaXplb2YodGVtcCksCisJbWVtY3B5KCZ0ZW1wLCBlZngtPnJ4X2hhc2hfa2V5ICsgMiAqIHNpemVvZih0ZW1wKSwKIAkgICAgICAgRlJGX0NaX1JYX1JTU19JUFY2X1RLRVlfSElfV0lEVEggLyA4KTsKIAllZnhfd3JpdGVvKGVmeCwgJnRlbXAsIEZSX0NaX1JYX1JTU19JUFY2X1JFRzMpOwogCiAJaWYgKGVmeF9uaWNfcnhfeG9mZl90aHJlc2ggPj0gMCB8fCBlZnhfbmljX3J4X3hvbl90aHJlc2ggPj0gMCkKIAkJLyogTm8gTUNESSBvcGVyYXRpb24gaGFzIGJlZW4gZGVmaW5lZCB0byBzZXQgdGhyZXNob2xkcyAqLwotCQlFRlhfRVJSKGVmeCwgImlnbm9yaW5nIFJYIGZsb3cgY29udHJvbCB0aHJlc2hvbGRzXG4iKTsKKwkJbmV0aWZfZXJyKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJCSAgImlnbm9yaW5nIFJYIGZsb3cgY29udHJvbCB0aHJlc2hvbGRzXG4iKTsKIAogCS8qIEVuYWJsZSBldmVudCBsb2dnaW5nICovCiAJcmMgPSBlZnhfbWNkaV9sb2dfY3RybChlZngsIHRydWUsIGZhbHNlLCAwKTsKQEAgLTU2NSw3ICs1NzgsOCBAQAogCiAJcmV0dXJuIDA7CiAgZmFpbDoKLQlFRlhfRVJSKGVmeCwgIiVzIGZhaWxlZDogdHlwZT0lZCByYz0lZFxuIiwgX19mdW5jX18sIHR5cGUsIHJjKTsKKwluZXRpZl9lcnIoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LCAiJXMgZmFpbGVkOiB0eXBlPSVkIHJjPSVkXG4iLAorCQkgIF9fZnVuY19fLCB0eXBlLCByYyk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC02MjgsNiArNjQyLDcgQEAKIAkuZXZxX3B0cl90YmxfYmFzZSA9IEZSX0JaX0VWUV9QVFJfVEJMLAogCS5ldnFfcnB0cl90YmxfYmFzZSA9IEZSX0JaX0VWUV9SUFRSLAogCS5tYXhfZG1hX21hc2sgPSBETUFfQklUX01BU0soRlNGX0FaX1RYX0tFUl9CVUZfQUREUl9XSURUSCksCisJLnJ4X2J1ZmZlcl9oYXNoX3NpemUgPSAweDEwLAogCS5yeF9idWZmZXJfcGFkZGluZyA9IDAsCiAJLm1heF9pbnRlcnJ1cHRfbW9kZSA9IEVGWF9JTlRfTU9ERV9NU0lYLAogCS5waHlzX2FkZHJfY2hhbm5lbHMgPSAzMiwgLyogSGFyZHdhcmUgbGltaXQgaXMgNjQsIGJ1dCB0aGUgbGVnYWN5CkBAIC02MzUsNiArNjUwLDcgQEAKIAkJCQkgICAqIGNoYW5uZWxzICovCiAJLnR4X2RjX2Jhc2UgPSAweDg4MDAwLAogCS5yeF9kY19iYXNlID0gMHg2ODAwMCwKLQkub2ZmbG9hZF9mZWF0dXJlcyA9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNLAorCS5vZmZsb2FkX2ZlYXR1cmVzID0gKE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNIHwKKwkJCSAgICAgTkVUSUZfRl9SWEhBU0gpLAogCS5yZXNldF93b3JsZF9mbGFncyA9IEVUSF9SRVNFVF9NR01UIDw8IEVUSF9SRVNFVF9TSEFSRURfU0hJRlQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3RlbnhwcmVzcy5jIGIvZHJpdmVycy9uZXQvc2ZjL3RlbnhwcmVzcy5jCmluZGV4IGYyMWVmZTcuLjY3OTFiZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy90ZW54cHJlc3MuYworKysgYi9kcml2ZXJzL25ldC9zZmMvdGVueHByZXNzLmMKQEAgLTIyOCw3ICsyMjgsOCBAQAogCQlib290X3N0YXQgPSBlZnhfbWRpb19yZWFkKGVmeCwgTURJT19NTURfUENTLAogCQkJCQkgIFBDU19CT09UX1NUQVRVU19SRUcpOwogCQlpZiAoYm9vdF9zdGF0ID49IDApIHsKLQkJCUVGWF9MT0coZWZ4LCAiUEhZIGJvb3Qgc3RhdHVzID0gJSN4XG4iLCBib290X3N0YXQpOworCQkJbmV0aWZfZGJnKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJCQkgICJQSFkgYm9vdCBzdGF0dXMgPSAlI3hcbiIsIGJvb3Rfc3RhdCk7CiAJCQlzd2l0Y2ggKGJvb3Rfc3RhdCAmCiAJCQkJKCgxIDw8IFBDU19CT09UX0ZBVEFMX0VSUk9SX0xCTikgfAogCQkJCSAoMyA8PCBQQ1NfQk9PVF9QUk9HUkVTU19MQk4pIHwKQEAgLTQ2MywxMCArNDY0LDExIEBACiAJCQlyZWcgfD0gUE1BX1BNRF9MRURfT0ZGIDw8IFBNQV9QTURfTEVEX1JYX0xCTjsKIAkJfSBlbHNlIHsKIAkJCXJlZyB8PSBQTUFfUE1EX0xFRF9GTEFTSCA8PCBQTUFfUE1EX0xFRF9SWF9MQk47Ci0JCQlFRlhfRVJSKGVmeCwgImFwcGVhcnMgdG8gYmUgcGx1Z2dlZCBpbnRvIGEgcG9ydCIKLQkJCQkiIHRoYXQgaXMgbm90IDEwR0JBU0UtVCBjYXBhYmxlLiBUaGUgUEhZIgotCQkJCSIgc3VwcG9ydHMgMTBHQkFTRS1UIE9OTFksIHNvIG5vIGxpbmsgY2FuIgotCQkJCSIgYmUgZXN0YWJsaXNoZWRcbiIpOworCQkJbmV0aWZfZXJyKGVmeCwgbGluaywgZWZ4LT5uZXRfZGV2LAorCQkJCSAgImFwcGVhcnMgdG8gYmUgcGx1Z2dlZCBpbnRvIGEgcG9ydCIKKwkJCQkgICIgdGhhdCBpcyBub3QgMTBHQkFTRS1UIGNhcGFibGUuIFRoZSBQSFkiCisJCQkJICAiIHN1cHBvcnRzIDEwR0JBU0UtVCBPTkxZLCBzbyBubyBsaW5rIGNhbiIKKwkJCQkgICIgYmUgZXN0YWJsaXNoZWRcbiIpOwogCQl9CiAJCWVmeF9tZGlvX3dyaXRlKGVmeCwgTURJT19NTURfUE1BUE1ELAogCQkJICAgICAgIFBNQV9QTURfTEVEX09WRVJSX1JFRywgcmVnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy90eC5jIGIvZHJpdmVycy9uZXQvc2ZjL3R4LmMKaW5kZXggNmJiMTJhOC4uYzY5NDJkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3R4LmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3R4LmMKQEAgLTQyLDcgKzQyLDcgQEAKIAkJcmV0dXJuOwogCiAJc3Bpbl9sb2NrX2JoKCZjaGFubmVsLT50eF9zdG9wX2xvY2spOwotCUVGWF9UUkFDRShlZngsICJzdG9wIFRYIHF1ZXVlXG4iKTsKKwluZXRpZl92ZGJnKGVmeCwgdHhfcXVldWVkLCBlZngtPm5ldF9kZXYsICJzdG9wIFRYIHF1ZXVlXG4iKTsKIAogCWF0b21pY19pbmMoJmNoYW5uZWwtPnR4X3N0b3BfY291bnQpOwogCW5ldGlmX3R4X3N0b3BfcXVldWUoCkBAIC02NCw3ICs2NCw3IEBACiAJbG9jYWxfYmhfZGlzYWJsZSgpOwogCWlmIChhdG9taWNfZGVjX2FuZF9sb2NrKCZjaGFubmVsLT50eF9zdG9wX2NvdW50LAogCQkJCSZjaGFubmVsLT50eF9zdG9wX2xvY2spKSB7Ci0JCUVGWF9UUkFDRShlZngsICJ3YWtpbmcgVFggcXVldWVcbiIpOworCQluZXRpZl92ZGJnKGVmeCwgdHhfcXVldWVkLCBlZngtPm5ldF9kZXYsICJ3YWtpbmcgVFggcXVldWVcbiIpOwogCQluZXRpZl90eF93YWtlX3F1ZXVlKAogCQkJbmV0ZGV2X2dldF90eF9xdWV1ZSgKIAkJCQllZngtPm5ldF9kZXYsCkBAIC05NCw4ICs5NCw5IEBACiAJaWYgKGJ1ZmZlci0+c2tiKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KChzdHJ1Y3Qgc2tfYnVmZiAqKSBidWZmZXItPnNrYik7CiAJCWJ1ZmZlci0+c2tiID0gTlVMTDsKLQkJRUZYX1RSQUNFKHR4X3F1ZXVlLT5lZngsICJUWCBxdWV1ZSAlZCB0cmFuc21pc3Npb24gaWQgJXggIgotCQkJICAiY29tcGxldGVcbiIsIHR4X3F1ZXVlLT5xdWV1ZSwgcmVhZF9wdHIpOworCQluZXRpZl92ZGJnKHR4X3F1ZXVlLT5lZngsIHR4X2RvbmUsIHR4X3F1ZXVlLT5lZngtPm5ldF9kZXYsCisJCQkgICAiVFggcXVldWUgJWQgdHJhbnNtaXNzaW9uIGlkICV4IGNvbXBsZXRlXG4iLAorCQkJICAgdHhfcXVldWUtPnF1ZXVlLCB0eF9xdWV1ZS0+cmVhZF9jb3VudCk7CiAJfQogfQogCkBAIC0zMDAsOSArMzAxLDEwIEBACiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogIHBjaV9lcnI6Ci0JRUZYX0VSUl9STChlZngsICIgVFggcXVldWUgJWQgY291bGQgbm90IG1hcCBza2Igd2l0aCAlZCBieXRlcyAlZCAiCi0JCSAgICJmcmFnbWVudHMgZm9yIERNQVxuIiwgdHhfcXVldWUtPnF1ZXVlLCBza2ItPmxlbiwKLQkJICAgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDEpOworCW5ldGlmX2VycihlZngsIHR4X2VyciwgZWZ4LT5uZXRfZGV2LAorCQkgICIgVFggcXVldWUgJWQgY291bGQgbm90IG1hcCBza2Igd2l0aCAlZCBieXRlcyAlZCAiCisJCSAgImZyYWdtZW50cyBmb3IgRE1BXG4iLCB0eF9xdWV1ZS0+cXVldWUsIHNrYi0+bGVuLAorCQkgIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxKTsKIAogCS8qIE1hcmsgdGhlIHBhY2tldCBhcyB0cmFuc21pdHRlZCwgYW5kIGZyZWUgdGhlIFNLQiBvdXJzZWx2ZXMgKi8KIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwpAQCAtMzU0LDkgKzM1Niw5IEBACiAJd2hpbGUgKHJlYWRfcHRyICE9IHN0b3BfaW5kZXgpIHsKIAkJc3RydWN0IGVmeF90eF9idWZmZXIgKmJ1ZmZlciA9ICZ0eF9xdWV1ZS0+YnVmZmVyW3JlYWRfcHRyXTsKIAkJaWYgKHVubGlrZWx5KGJ1ZmZlci0+bGVuID09IDApKSB7Ci0JCQlFRlhfRVJSKHR4X3F1ZXVlLT5lZngsICJUWCBxdWV1ZSAlZCBzcHVyaW91cyBUWCAiCi0JCQkJImNvbXBsZXRpb24gaWQgJXhcbiIsIHR4X3F1ZXVlLT5xdWV1ZSwKLQkJCQlyZWFkX3B0cik7CisJCQluZXRpZl9lcnIoZWZ4LCB0eF9lcnIsIGVmeC0+bmV0X2RldiwKKwkJCQkgICJUWCBxdWV1ZSAlZCBzcHVyaW91cyBUWCBjb21wbGV0aW9uIGlkICV4XG4iLAorCQkJCSAgdHhfcXVldWUtPnF1ZXVlLCByZWFkX3B0cik7CiAJCQllZnhfc2NoZWR1bGVfcmVzZXQoZWZ4LCBSRVNFVF9UWVBFX1RYX1NLSVApOwogCQkJcmV0dXJuOwogCQl9CkBAIC00MzEsNyArNDMzLDggQEAKIAl1bnNpZ25lZCBpbnQgdHhxX3NpemU7CiAJaW50IGksIHJjOwogCi0JRUZYX0xPRyhlZngsICJjcmVhdGluZyBUWCBxdWV1ZSAlZFxuIiwgdHhfcXVldWUtPnF1ZXVlKTsKKwluZXRpZl9kYmcoZWZ4LCBwcm9iZSwgZWZ4LT5uZXRfZGV2LCAiY3JlYXRpbmcgVFggcXVldWUgJWRcbiIsCisJCSAgdHhfcXVldWUtPnF1ZXVlKTsKIAogCS8qIEFsbG9jYXRlIHNvZnR3YXJlIHJpbmcgKi8KIAl0eHFfc2l6ZSA9IEVGWF9UWFFfU0laRSAqIHNpemVvZigqdHhfcXVldWUtPmJ1ZmZlcik7CkBAIC00NTYsNyArNDU5LDggQEAKIAogdm9pZCBlZnhfaW5pdF90eF9xdWV1ZShzdHJ1Y3QgZWZ4X3R4X3F1ZXVlICp0eF9xdWV1ZSkKIHsKLQlFRlhfTE9HKHR4X3F1ZXVlLT5lZngsICJpbml0aWFsaXNpbmcgVFggcXVldWUgJWRcbiIsIHR4X3F1ZXVlLT5xdWV1ZSk7CisJbmV0aWZfZGJnKHR4X3F1ZXVlLT5lZngsIGRydiwgdHhfcXVldWUtPmVmeC0+bmV0X2RldiwKKwkJICAiaW5pdGlhbGlzaW5nIFRYIHF1ZXVlICVkXG4iLCB0eF9xdWV1ZS0+cXVldWUpOwogCiAJdHhfcXVldWUtPmluc2VydF9jb3VudCA9IDA7CiAJdHhfcXVldWUtPndyaXRlX2NvdW50ID0gMDsKQEAgLTQ4OCw3ICs0OTIsOCBAQAogCiB2b2lkIGVmeF9maW5pX3R4X3F1ZXVlKHN0cnVjdCBlZnhfdHhfcXVldWUgKnR4X3F1ZXVlKQogewotCUVGWF9MT0codHhfcXVldWUtPmVmeCwgInNodXR0aW5nIGRvd24gVFggcXVldWUgJWRcbiIsIHR4X3F1ZXVlLT5xdWV1ZSk7CisJbmV0aWZfZGJnKHR4X3F1ZXVlLT5lZngsIGRydiwgdHhfcXVldWUtPmVmeC0+bmV0X2RldiwKKwkJICAic2h1dHRpbmcgZG93biBUWCBxdWV1ZSAlZFxuIiwgdHhfcXVldWUtPnF1ZXVlKTsKIAogCS8qIEZsdXNoIFRYIHF1ZXVlLCByZW1vdmUgZGVzY3JpcHRvciByaW5nICovCiAJZWZ4X25pY19maW5pX3R4KHR4X3F1ZXVlKTsKQEAgLTUwNyw3ICs1MTIsOCBAQAogCiB2b2lkIGVmeF9yZW1vdmVfdHhfcXVldWUoc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWUpCiB7Ci0JRUZYX0xPRyh0eF9xdWV1ZS0+ZWZ4LCAiZGVzdHJveWluZyBUWCBxdWV1ZSAlZFxuIiwgdHhfcXVldWUtPnF1ZXVlKTsKKwluZXRpZl9kYmcodHhfcXVldWUtPmVmeCwgZHJ2LCB0eF9xdWV1ZS0+ZWZ4LT5uZXRfZGV2LAorCQkgICJkZXN0cm95aW5nIFRYIHF1ZXVlICVkXG4iLCB0eF9xdWV1ZS0+cXVldWUpOwogCWVmeF9uaWNfcmVtb3ZlX3R4KHR4X3F1ZXVlKTsKIAogCWtmcmVlKHR4X3F1ZXVlLT5idWZmZXIpOwpAQCAtNjM5LDggKzY0NSw4IEBACiAKIAliYXNlX2t2YSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBjaV9kZXYsIFBBR0VfU0laRSwgJmRtYV9hZGRyKTsKIAlpZiAoYmFzZV9rdmEgPT0gTlVMTCkgewotCQlFRlhfRVJSKHR4X3F1ZXVlLT5lZngsICJVbmFibGUgdG8gYWxsb2NhdGUgcGFnZSBmb3IgVFNPIgotCQkJIiBoZWFkZXJzXG4iKTsKKwkJbmV0aWZfZXJyKHR4X3F1ZXVlLT5lZngsIHR4X2VyciwgdHhfcXVldWUtPmVmeC0+bmV0X2RldiwKKwkJCSAgIlVuYWJsZSB0byBhbGxvY2F0ZSBwYWdlIGZvciBUU08gaGVhZGVyc1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTEyNCw3ICsxMTMwLDggQEAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogCiAgbWVtX2VycjoKLQlFRlhfRVJSKGVmeCwgIk91dCBvZiBtZW1vcnkgZm9yIFRTTyBoZWFkZXJzLCBvciBQQ0kgbWFwcGluZyBlcnJvclxuIik7CisJbmV0aWZfZXJyKGVmeCwgdHhfZXJyLCBlZngtPm5ldF9kZXYsCisJCSAgIk91dCBvZiBtZW1vcnkgZm9yIFRTTyBoZWFkZXJzLCBvciBQQ0kgbWFwcGluZyBlcnJvclxuIik7CiAJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAlnb3RvIHVud2luZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3dvcmthcm91bmRzLmggYi9kcml2ZXJzL25ldC9zZmMvd29ya2Fyb3VuZHMuaAppbmRleCA1MThmN2ZjLi43ODJlNDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvd29ya2Fyb3VuZHMuaAorKysgYi9kcml2ZXJzL25ldC9zZmMvd29ya2Fyb3VuZHMuaApAQCAtNTQsNyArNTQsNyBAQAogLyogSW5jcmVhc2UgZmlsdGVyIGRlcHRoIHRvIGF2b2lkIFJYX1JFU0VUICovCiAjZGVmaW5lIEVGWF9XT1JLQVJPVU5EXzcyNDQgRUZYX1dPUktBUk9VTkRfRkFMQ09OX0EKIC8qIEZsdXNoZXMgbWF5IG5ldmVyIGNvbXBsZXRlICovCi0jZGVmaW5lIEVGWF9XT1JLQVJPVU5EXzc4MDMgRUZYX1dPUktBUk9VTkRfRkFMQ09OX0EKKyNkZWZpbmUgRUZYX1dPUktBUk9VTkRfNzgwMyBFRlhfV09SS0FST1VORF9GQUxDT05fQUIKIC8qIExlYWsgb3Zlcmxlbmd0aCBwYWNrZXRzIHJhdGhlciB0aGFuIGZyZWUgKi8KICNkZWZpbmUgRUZYX1dPUktBUk9VTkRfODA3MSBFRlhfV09SS0FST1VORF9GQUxDT05fQQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaF9ldGguYyBiL2RyaXZlcnMvbmV0L3NoX2V0aC5jCmluZGV4IDUwMWE1NWYuLmY1YTllYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NoX2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3NoX2V0aC5jCkBAIC04OCw2ICs4OCw1NSBAQAogCS5ycGFkaXIJCT0gMSwKIAkucnBhZGlyX3ZhbHVlCT0gMHgwMDAyMDAwMCwgLyogTkVUX0lQX0FMSUdOIGFzc3VtZWQgdG8gYmUgMiAqLwogfTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NykKKyNkZWZpbmUgU0hfRVRIX1JFU0VUX0RFRkFVTFQJMQorc3RhdGljIHZvaWQgc2hfZXRoX3NldF9kdXBsZXgoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJc3RydWN0IHNoX2V0aF9wcml2YXRlICptZHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwl1MzIgaW9hZGRyID0gbmRldi0+YmFzZV9hZGRyOworCisJaWYgKG1kcC0+ZHVwbGV4KSAvKiBGdWxsICovCisJCWN0cmxfb3V0bChjdHJsX2lubChpb2FkZHIgKyBFQ01SKSB8IEVDTVJfRE0sIGlvYWRkciArIEVDTVIpOworCWVsc2UJCS8qIEhhbGYgKi8KKwkJY3RybF9vdXRsKGN0cmxfaW5sKGlvYWRkciArIEVDTVIpICYgfkVDTVJfRE0sIGlvYWRkciArIEVDTVIpOworfQorCitzdGF0aWMgdm9pZCBzaF9ldGhfc2V0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJc3RydWN0IHNoX2V0aF9wcml2YXRlICptZHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwl1MzIgaW9hZGRyID0gbmRldi0+YmFzZV9hZGRyOworCisJc3dpdGNoIChtZHAtPnNwZWVkKSB7CisJY2FzZSAxMDogLyogMTBCQVNFICovCisJCWN0cmxfb3V0bCgwLCBpb2FkZHIgKyBSVFJBVEUpOworCQlicmVhazsKKwljYXNlIDEwMDovKiAxMDBCQVNFICovCisJCWN0cmxfb3V0bCgxLCBpb2FkZHIgKyBSVFJBVEUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKy8qIFNINzc1NyAqLworc3RhdGljIHN0cnVjdCBzaF9ldGhfY3B1X2RhdGEgc2hfZXRoX215X2NwdV9kYXRhID0geworCS5zZXRfZHVwbGV4CQk9IHNoX2V0aF9zZXRfZHVwbGV4LAorCS5zZXRfcmF0ZQkJPSBzaF9ldGhfc2V0X3JhdGUsCisKKwkuZWVzaXByX3ZhbHVlCT0gRE1BQ19NX1JGUk1FUiB8IERNQUNfTV9FQ0kgfCAweDAwM2ZmZmZmLAorCS5ybWNyX3ZhbHVlCT0gMHgwMDAwMDAwMSwKKworCS50eF9jaGVjawk9IEVFU1JfRlRDIHwgRUVTUl9DTkQgfCBFRVNSX0RMQyB8IEVFU1JfQ0QgfCBFRVNSX1JUTywKKwkuZWVzcl9lcnJfY2hlY2sJPSBFRVNSX1RXQiB8IEVFU1JfVEFCVCB8IEVFU1JfUkFCVCB8IEVFU1JfUkRFIHwKKwkJCSAgRUVTUl9SRlJNRVIgfCBFRVNSX1RGRSB8IEVFU1JfVERFIHwgRUVTUl9FQ0ksCisJLnR4X2Vycm9yX2NoZWNrCT0gRUVTUl9UV0IgfCBFRVNSX1RBQlQgfCBFRVNSX1RERSB8IEVFU1JfVEZFLAorCisJLmFwcgkJPSAxLAorCS5tcHIJCT0gMSwKKwkudHBhdXNlcgk9IDEsCisJLmh3X3N3YXAJPSAxLAorCS5ub19hZGUJCT0gMSwKK307CiAKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MykKICNkZWZpbmUgU0hfRVRIX0hBU19UU1UJMQpAQCAtMTAyMyw3ICsxMDcyLDkgQEAKIAlwbV9ydW50aW1lX2dldF9zeW5jKCZtZHAtPnBkZXYtPmRldik7CiAKIAlyZXQgPSByZXF1ZXN0X2lycShuZGV2LT5pcnEsIHNoX2V0aF9pbnRlcnJ1cHQsCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjQpCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzY0KSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3KQogCQkJCUlSUUZfU0hBUkVELAogI2Vsc2UKIAkJCQkwLApAQCAtMTIzMyw3ICsxMjg0LDcgQEAKIAlpZiAoIXBoeWRldikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXR1cm4gcGh5X21paV9pb2N0bChwaHlkZXYsIGlmX21paShycSksIGNtZCk7CisJcmV0dXJuIHBoeV9taWlfaW9jdGwocGh5ZGV2LCBycSwgY21kKTsKIH0KIAogI2lmIGRlZmluZWQoU0hfRVRIX0hBU19UU1UpCkBAIC0xMzI1LDcgKzEzNzYsNyBAQAogCWJpdGJhbmctPm1kY19tc2sgPSAweDAxOwogCWJpdGJhbmctPmN0cmwub3BzID0gJmJiX29wczsKIAotCS8qIE1JSSBjb250b3JsbGVyIHNldHRpbmcgKi8KKwkvKiBNSUkgY29udHJvbGxlciBzZXR0aW5nICovCiAJbWRwLT5taWlfYnVzID0gYWxsb2NfbWRpb19iaXRiYW5nKCZiaXRiYW5nLT5jdHJsKTsKIAlpZiAoIW1kcC0+bWlpX2J1cykgewogCQlyZXQgPSAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2t5Mi5jIGIvZHJpdmVycy9uZXQvc2t5Mi5jCmluZGV4IDc5ODUxNjUuLjE5NGU1Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NreTIuYworKysgYi9kcml2ZXJzL25ldC9za3kyLmMKQEAgLTc5LDcgKzc5LDcgQEAKIAogI2RlZmluZSBTS1kyX0VFUFJPTV9NQUdJQwkweDk5NTVhYWJiCiAKLSNkZWZpbmUgUklOR19ORVhUKHgscykJKCgoeCkrMSkgJiAoKHMpLTEpKQorI2RlZmluZSBSSU5HX05FWFQoeCwgcykJKCgoeCkrMSkgJiAoKHMpLTEpKQogCiBzdGF0aWMgY29uc3QgdTMyIGRlZmF1bHRfbXNnID0KICAgICBORVRJRl9NU0dfRFJWIHwgTkVUSUZfTVNHX1BST0JFIHwgTkVUSUZfTVNHX0xJTksKQEAgLTE3Miw3ICsxNzIsNyBAQAogCQl1ZGVsYXkoMTApOwogCX0KIAotCWRldl93YXJuKCZody0+cGRldi0+ZGV2LCIlczogcGh5IHdyaXRlIHRpbWVvdXRcbiIsIGh3LT5kZXZbcG9ydF0tPm5hbWUpOworCWRldl93YXJuKCZody0+cGRldi0+ZGV2LCAiJXM6IHBoeSB3cml0ZSB0aW1lb3V0XG4iLCBody0+ZGV2W3BvcnRdLT5uYW1lKTsKIAlyZXR1cm4gLUVUSU1FRE9VVDsKIAogaW9fZXJyb3I6CkBAIC0xMDY3LDcgKzEwNjcsNyBAQAogCXJldHVybiBsZTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIHNreTJfZ2V0X3J4X3RocmVzaG9sZChzdHJ1Y3Qgc2t5Ml9wb3J0KiBza3kyKQorc3RhdGljIHVuc2lnbmVkIHNreTJfZ2V0X3J4X3RocmVzaG9sZChzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyKQogewogCXVuc2lnbmVkIHNpemU7CiAKQEAgLTEwNzgsNyArMTA3OCw3IEBACiAJcmV0dXJuIChzaXplIC0gOCkgLyBzaXplb2YodTMyKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIHNreTJfZ2V0X3J4X2RhdGFfc2l6ZShzdHJ1Y3Qgc2t5Ml9wb3J0KiBza3kyKQorc3RhdGljIHVuc2lnbmVkIHNreTJfZ2V0X3J4X2RhdGFfc2l6ZShzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyKQogewogCXN0cnVjdCByeF9yaW5nX2luZm8gKnJlOwogCXVuc2lnbmVkIHNpemU7CkBAIC0xMTAyLDcgKzExMDIsNyBAQAogfQogCiAvKiBCdWlsZCBkZXNjcmlwdGlvbiB0byBoYXJkd2FyZSBmb3Igb25lIHJlY2VpdmUgc2VnbWVudCAqLwotc3RhdGljIHZvaWQgc2t5Ml9yeF9hZGQoc3RydWN0IHNreTJfcG9ydCAqc2t5MiwgIHU4IG9wLAorc3RhdGljIHZvaWQgc2t5Ml9yeF9hZGQoc3RydWN0IHNreTJfcG9ydCAqc2t5MiwgdTggb3AsCiAJCQlkbWFfYWRkcl90IG1hcCwgdW5zaWduZWQgbGVuKQogewogCXN0cnVjdCBza3kyX3J4X2xlICpsZTsKQEAgLTMwMTQsNyArMzAxNCw3IEBACiAJaHctPmNoaXBfaWQgPSBza3kyX3JlYWQ4KGh3LCBCMl9DSElQX0lEKTsKIAlody0+Y2hpcF9yZXYgPSAoc2t5Ml9yZWFkOChodywgQjJfTUFDX0NGRykgJiBDRkdfQ0hJUF9SX01TSykgPj4gNDsKIAotCXN3aXRjaChody0+Y2hpcF9pZCkgeworCXN3aXRjaCAoaHctPmNoaXBfaWQpIHsKIAljYXNlIENISVBfSURfWVVLT05fWEw6CiAJCWh3LT5mbGFncyA9IFNLWTJfSFdfR0lHQUJJVCB8IFNLWTJfSFdfTkVXRVJfUEhZOwogCQlpZiAoaHctPmNoaXBfcmV2IDwgQ0hJUF9SRVZfWVVfWExfQTIpCkBAIC0zNjg1LDcgKzM2ODUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpbmxpbmUgc2t5Ml9hZGRfZmlsdGVyKHU4IGZpbHRlcls4XSwgY29uc3QgdTggKmFkZHIpCitzdGF0aWMgaW5saW5lIHZvaWQgc2t5Ml9hZGRfZmlsdGVyKHU4IGZpbHRlcls4XSwgY29uc3QgdTggKmFkZHIpCiB7CiAJdTMyIGJpdDsKIApAQCAtMzkxMSw3ICszOTExLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGVjbWQtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzID4gUlhfTUFYX1BFTkRJTkcpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmIChlY21kLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnEgPlJYX01BWF9QRU5ESU5HKQorCWlmIChlY21kLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnEgPiBSWF9NQVhfUEVORElORykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoZWNtZC0+dHhfY29hbGVzY2VfdXNlY3MgPT0gMCkKQEAgLTQxODgsMTcgKzQxODgsMTMgQEAKIHN0YXRpYyBpbnQgc2t5Ml9zZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCiB7CiAJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIHN1cHBvcnRlZCA9CisJCShza3kyLT5ody0+ZmxhZ3MgJiBTS1kyX0hXX1JTU19CUk9LRU4pID8gMCA6IEVUSF9GTEFHX1JYSEFTSDsKKwlpbnQgcmM7CiAKLQlpZiAoZGF0YSAmIH5FVEhfRkxBR19SWEhBU0gpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCWlmIChkYXRhICYgRVRIX0ZMQUdfUlhIQVNIKSB7Ci0JCWlmIChza3kyLT5ody0+ZmxhZ3MgJiBTS1kyX0hXX1JTU19CUk9LRU4pCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfUlhIQVNIOwotCX0gZWxzZQotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1JYSEFTSDsKKwlyYyA9IGV0aHRvb2xfb3Bfc2V0X2ZsYWdzKGRldiwgZGF0YSwgc3VwcG9ydGVkKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAogCXJ4X3NldF9yc3MoZGV2KTsKIApAQCAtNDM3Niw3ICs0MzcyLDcgQEAKIAkJCXNlcV9wcmludGYoc2VxLCAiJXU6IiwgaWR4KTsKIAkJc29wID0gMDsKIAotCQlzd2l0Y2gobGUtPm9wY29kZSAmIH5IV19PV05FUikgeworCQlzd2l0Y2ggKGxlLT5vcGNvZGUgJiB+SFdfT1dORVIpIHsKIAkJY2FzZSBPUF9BRERSNjQ6CiAJCQlzZXFfcHJpbnRmKHNlcSwgIiAlI3g6IiwgYSk7CiAJCQlicmVhazsKQEAgLTQ0NDUsNyArNDQ0MSw3IEBACiAJaWYgKGRldi0+bmV0ZGV2X29wcy0+bmRvX29wZW4gIT0gc2t5Ml91cCB8fCAhc2t5Ml9kZWJ1ZykKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCi0Jc3dpdGNoKGV2ZW50KSB7CisJc3dpdGNoIChldmVudCkgewogCWNhc2UgTkVUREVWX0NIQU5HRU5BTUU6CiAJCWlmIChza3kyLT5kZWJ1Z2ZzKSB7CiAJCQlza3kyLT5kZWJ1Z2ZzID0gZGVidWdmc19yZW5hbWUoc2t5Ml9kZWJ1Zywgc2t5Mi0+ZGVidWdmcywKQEAgLTQ2NDAsNyArNDYzNiw3IEBACiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBody0+cGRldjsKIAlpbnQgZXJyOwogCi0JaW5pdF93YWl0cXVldWVfaGVhZCAoJmh3LT5tc2lfd2FpdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmaHctPm1zaV93YWl0KTsKIAogCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgWTJfSVNfSVJRX1NXKTsKIApAQCAtNDc1Nyw3ICs0NzUzLDcgQEAKIAkgKiB0aGlzIGRyaXZlciB1c2VzIHNvZnR3YXJlIHN3YXBwaW5nLgogCSAqLwogCXJlZyAmPSB+UENJX1JFVl9ERVNDOwotCWVyciA9IHBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldixQQ0lfREVWX1JFRzIsIHJlZyk7CisJZXJyID0gcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfREVWX1JFRzIsIHJlZyk7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJQQ0kgd3JpdGUgY29uZmlnIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyX291dF9mcmVlX3JlZ2lvbnM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za3kyLmggYi9kcml2ZXJzL25ldC9za3kyLmgKaW5kZXggMDg0ZWZmMi4uNjE4OTFhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2t5Mi5oCisrKyBiL2RyaXZlcnMvbmV0L3NreTIuaApAQCAtMjE2MSwyMSArMjE2MSwyMSBAQAogCV9fbGUxNglsZW5ndGg7CS8qIGFsc28gdmxhbiB0YWcgb3IgY2hlY2tzdW0gc3RhcnQgKi8KIAl1OAljdHJsOwogCXU4CW9wY29kZTsKLX0gX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHNreTJfcnhfbGUgewogCV9fbGUzMglhZGRyOwogCV9fbGUxNglsZW5ndGg7CiAJdTgJY3RybDsKIAl1OAlvcGNvZGU7Ci19IF9fYXR0cmlidXRlKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBza3kyX3N0YXR1c19sZSB7CiAJX19sZTMyCXN0YXR1czsJLyogYWxzbyBjaGVja3N1bSAqLwogCV9fbGUxNglsZW5ndGg7CS8qIGFsc28gdmxhbiB0YWcgKi8KIAl1OAljc3M7CiAJdTgJb3Bjb2RlOwotfSBfX2F0dHJpYnV0ZSgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgdHhfcmluZ19pbmZvIHsKIAlzdHJ1Y3Qgc2tfYnVmZgkqc2tiOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTF4LmggYi9kcml2ZXJzL25ldC9zbWM5MXguaAppbmRleCA4ZDI3NzJjLi5lZTc0NzkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MXguaAorKysgYi9kcml2ZXJzL25ldC9zbWM5MXguaApAQCAtODMsNDMgKzgzLDYgQEAKIAl9CiB9CiAKLSNlbGlmIGRlZmluZWQoQ09ORklHX1JFRFdPT0RfNSkgfHwgZGVmaW5lZChDT05GSUdfUkVEV09PRF82KQotCi0vKiBXZSBjYW4gb25seSBkbyAxNi1iaXQgcmVhZHMgYW5kIHdyaXRlcyBpbiB0aGUgc3RhdGljIG1lbW9yeSBzcGFjZS4gKi8KLSNkZWZpbmUgU01DX0NBTl9VU0VfOEJJVAkwCi0jZGVmaW5lIFNNQ19DQU5fVVNFXzE2QklUCTEKLSNkZWZpbmUgU01DX0NBTl9VU0VfMzJCSVQJMAotI2RlZmluZSBTTUNfTk9XQUlUCQkxCi0KLSNkZWZpbmUgU01DX0lPX1NISUZUCQkwCi0KLSNkZWZpbmUgU01DX2ludyhhLCByKQkJaW5fYmUxNigodm9sYXRpbGUgdTE2ICopKChhKSArIChyKSkpCi0jZGVmaW5lIFNNQ19vdXR3KHYsIGEsIHIpCW91dF9iZTE2KCh2b2xhdGlsZSB1MTYgKikoKGEpICsgKHIpKSwgdikKLSNkZWZpbmUgU01DX2luc3coYSwgciwgcCwgbCkgCQkJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJdW5zaWduZWQgbG9uZyBfX3BvcnQgPSAoYSkgKyAocik7CQkJXAotCQl1MTYgKl9fcCA9ICh1MTYgKikocCk7CQkJCQlcCi0JCWludCBfX2wgPSAobCk7CQkJCQkJXAotCQlpbnN3KF9fcG9ydCwgX19wLCBfX2wpOwkJCQkJXAotCQl3aGlsZSAoX19sID4gMCkgewkJCQkJXAotCQkJKl9fcCA9IHN3YWIxNigqX19wKTsJCQkJXAotCQkJX19wKys7CQkJCQkJXAotCQkJX19sLS07CQkJCQkJXAotCQl9CQkJCQkJCVwKLQl9IHdoaWxlICgwKQotI2RlZmluZSBTTUNfb3V0c3coYSwgciwgcCwgbCkgCQkJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJdW5zaWduZWQgbG9uZyBfX3BvcnQgPSAoYSkgKyAocik7CQkJXAotCQl1MTYgKl9fcCA9ICh1MTYgKikocCk7CQkJCQlcCi0JCWludCBfX2wgPSAobCk7CQkJCQkJXAotCQl3aGlsZSAoX19sID4gMCkgewkJCQkJXAotCQkJLyogQmVsaWV2ZSBpdCBvciBub3QsIHRoZSBzd2FiIGlzbid0IG5lZWRlZC4gKi8JXAotCQkJb3V0dyggLyogc3dhYjE2ICovICgqX19wKyspLCBfX3BvcnQpOwkJXAotCQkJX19sLS07CQkJCQkJXAotCQl9CQkJCQkJCVwKLQl9IHdoaWxlICgwKQotI2RlZmluZSBTTUNfSVJRX0ZMQUdTCQkoMCkKLQogI2VsaWYgZGVmaW5lZChDT05GSUdfU0ExMTAwX1BMRUIpCiAvKiBXZSBjYW4gb25seSBkbyAxNi1iaXQgcmVhZHMgYW5kIHdyaXRlcyBpbiB0aGUgc3RhdGljIG1lbW9yeSBzcGFjZS4gKi8KICNkZWZpbmUgU01DX0NBTl9VU0VfOEJJVAkxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbXNjOTExeC5jIGIvZHJpdmVycy9uZXQvc21zYzkxMXguYwppbmRleCBjYzU1OTc0Li4wOTA5YWU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbXNjOTExeC5jCisrKyBiL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmMKQEAgLTg0LDggKzg0LDcgQEAKIAkgKi8KIAlzcGlubG9ja190IG1hY19sb2NrOwogCi0JLyogc3BpbmxvY2sgdG8gZW5zdXJlIDE2LWJpdCBhY2Nlc3NlcyBhcmUgc2VyaWFsaXNlZC4KLQkgKiB1bnVzZWQgd2l0aCBhIDMyLWJpdCBidXMgKi8KKwkvKiBzcGlubG9jayB0byBlbnN1cmUgcmVnaXN0ZXIgYWNjZXNzZXMgYXJlIHNlcmlhbGlzZWQgKi8KIAlzcGlubG9ja190IGRldl9sb2NrOwogCiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeV9kZXY7CkBAIC0xMTgsMzcgKzExNywzMyBAQAogCXVuc2lnbmVkIGludCBoYXNobG87CiB9OwogCi0vKiBUaGUgMTYtYml0IGFjY2VzcyBmdW5jdGlvbnMgYXJlIHNpZ25pZmljYW50bHkgc2xvd2VyLCBkdWUgdG8gdGhlIGxvY2tpbmcKLSAqIG5lY2Vzc2FyeS4gIElmIHlvdXIgYnVzIGhhcmR3YXJlIGNhbiBiZSBjb25maWd1cmVkIHRvIGRvIHRoaXMgZm9yIHlvdQotICogKGluIHJlc3BvbnNlIHRvIGEgc2luZ2xlIDMyLWJpdCBvcGVyYXRpb24gZnJvbSBzb2Z0d2FyZSksIHlvdSBzaG91bGQgdXNlCi0gKiB0aGUgMzItYml0IGFjY2VzcyBmdW5jdGlvbnMgaW5zdGVhZC4gKi8KLQotc3RhdGljIGlubGluZSB1MzIgc21zYzkxMXhfcmVnX3JlYWQoc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhLCB1MzIgcmVnKQorc3RhdGljIGlubGluZSB1MzIgX19zbXNjOTExeF9yZWdfcmVhZChzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEsIHUzMiByZWcpCiB7CiAJaWYgKHBkYXRhLT5jb25maWcuZmxhZ3MgJiBTTVNDOTExWF9VU0VfMzJCSVQpCiAJCXJldHVybiByZWFkbChwZGF0YS0+aW9hZGRyICsgcmVnKTsKIAotCWlmIChwZGF0YS0+Y29uZmlnLmZsYWdzICYgU01TQzkxMVhfVVNFXzE2QklUKSB7Ci0JCXUzMiBkYXRhOwotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCS8qIHRoZXNlIHR3byAxNi1iaXQgcmVhZHMgbXVzdCBiZSBwZXJmb3JtZWQgY29uc2VjdXRpdmVseSwgc28KLQkJICogbXVzdCBub3QgYmUgaW50ZXJydXB0ZWQgYnkgb3VyIG93biBJU1IgKHdoaWNoIHdvdWxkIHN0YXJ0Ci0JCSAqIGFub3RoZXIgcmVhZCBvcGVyYXRpb24pICovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZwZGF0YS0+ZGV2X2xvY2ssIGZsYWdzKTsKLQkJZGF0YSA9ICgocmVhZHcocGRhdGEtPmlvYWRkciArIHJlZykgJiAweEZGRkYpIHwKKwlpZiAocGRhdGEtPmNvbmZpZy5mbGFncyAmIFNNU0M5MTFYX1VTRV8xNkJJVCkKKwkJcmV0dXJuICgocmVhZHcocGRhdGEtPmlvYWRkciArIHJlZykgJiAweEZGRkYpIHwKIAkJCSgocmVhZHcocGRhdGEtPmlvYWRkciArIHJlZyArIDIpICYgMHhGRkZGKSA8PCAxNikpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZGF0YS0+ZGV2X2xvY2ssIGZsYWdzKTsKLQotCQlyZXR1cm4gZGF0YTsKLQl9CiAKIAlCVUcoKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNtc2M5MTF4X3JlZ193cml0ZShzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEsIHUzMiByZWcsCi0JCQkJICAgICAgdTMyIHZhbCkKK3N0YXRpYyBpbmxpbmUgdTMyIHNtc2M5MTF4X3JlZ19yZWFkKHN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSwgdTMyIHJlZykKK3sKKwl1MzIgZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBkYXRhLT5kZXZfbG9jaywgZmxhZ3MpOworCWRhdGEgPSBfX3Ntc2M5MTF4X3JlZ19yZWFkKHBkYXRhLCByZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBkYXRhLT5kZXZfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Ntc2M5MTF4X3JlZ193cml0ZShzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEsIHUzMiByZWcsCisJCQkJCXUzMiB2YWwpCiB7CiAJaWYgKHBkYXRhLT5jb25maWcuZmxhZ3MgJiBTTVNDOTExWF9VU0VfMzJCSVQpIHsKIAkJd3JpdGVsKHZhbCwgcGRhdGEtPmlvYWRkciArIHJlZyk7CkBAIC0xNTYsNDQgKzE1MSw1NCBAQAogCX0KIAogCWlmIChwZGF0YS0+Y29uZmlnLmZsYWdzICYgU01TQzkxMVhfVVNFXzE2QklUKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJLyogdGhlc2UgdHdvIDE2LWJpdCB3cml0ZXMgbXVzdCBiZSBwZXJmb3JtZWQgY29uc2VjdXRpdmVseSwgc28KLQkJICogbXVzdCBub3QgYmUgaW50ZXJydXB0ZWQgYnkgb3VyIG93biBJU1IgKHdoaWNoIHdvdWxkIHN0YXJ0Ci0JCSAqIGFub3RoZXIgcmVhZCBvcGVyYXRpb24pICovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZwZGF0YS0+ZGV2X2xvY2ssIGZsYWdzKTsKIAkJd3JpdGV3KHZhbCAmIDB4RkZGRiwgcGRhdGEtPmlvYWRkciArIHJlZyk7CiAJCXdyaXRldygodmFsID4+IDE2KSAmIDB4RkZGRiwgcGRhdGEtPmlvYWRkciArIHJlZyArIDIpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZGF0YS0+ZGV2X2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAogCUJVRygpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc21zYzkxMXhfcmVnX3dyaXRlKHN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSwgdTMyIHJlZywKKwkJCQkgICAgICB1MzIgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGRhdGEtPmRldl9sb2NrLCBmbGFncyk7CisJX19zbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIHJlZywgdmFsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZGF0YS0+ZGV2X2xvY2ssIGZsYWdzKTsKK30KKwogLyogV3JpdGVzIGEgcGFja2V0IHRvIHRoZSBUWF9EQVRBX0ZJRk8gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAogc21zYzkxMXhfdHhfd3JpdGVmaWZvKHN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSwgdW5zaWduZWQgaW50ICpidWYsCiAJCSAgICAgIHVuc2lnbmVkIGludCB3b3JkY291bnQpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwZGF0YS0+ZGV2X2xvY2ssIGZsYWdzKTsKKwogCWlmIChwZGF0YS0+Y29uZmlnLmZsYWdzICYgU01TQzkxMVhfU1dBUF9GSUZPKSB7CiAJCXdoaWxlICh3b3JkY291bnQtLSkKLQkJCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgVFhfREFUQV9GSUZPLCBzd2FiMzIoKmJ1ZisrKSk7Ci0JCXJldHVybjsKKwkJCV9fc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBUWF9EQVRBX0ZJRk8sCisJCQkJCSAgICAgc3dhYjMyKCpidWYrKykpOworCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAocGRhdGEtPmNvbmZpZy5mbGFncyAmIFNNU0M5MTFYX1VTRV8zMkJJVCkgewogCQl3cml0ZXNsKHBkYXRhLT5pb2FkZHIgKyBUWF9EQVRBX0ZJRk8sIGJ1Ziwgd29yZGNvdW50KTsKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAocGRhdGEtPmNvbmZpZy5mbGFncyAmIFNNU0M5MTFYX1VTRV8xNkJJVCkgewogCQl3aGlsZSAod29yZGNvdW50LS0pCi0JCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIFRYX0RBVEFfRklGTywgKmJ1ZisrKTsKLQkJcmV0dXJuOworCQkJX19zbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIFRYX0RBVEFfRklGTywgKmJ1ZisrKTsKKwkJZ290byBvdXQ7CiAJfQogCiAJQlVHKCk7CitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRhdGEtPmRldl9sb2NrLCBmbGFncyk7CiB9CiAKIC8qIFJlYWRzIGEgcGFja2V0IG91dCBvZiB0aGUgUlhfREFUQV9GSUZPICovCkBAIC0yMDEsMjQgKzIwNiwzMSBAQAogc21zYzkxMXhfcnhfcmVhZGZpZm8oc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhLCB1bnNpZ25lZCBpbnQgKmJ1ZiwKIAkJICAgICB1bnNpZ25lZCBpbnQgd29yZGNvdW50KQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGRhdGEtPmRldl9sb2NrLCBmbGFncyk7CisKIAlpZiAocGRhdGEtPmNvbmZpZy5mbGFncyAmIFNNU0M5MTFYX1NXQVBfRklGTykgewogCQl3aGlsZSAod29yZGNvdW50LS0pCi0JCQkqYnVmKysgPSBzd2FiMzIoc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIFJYX0RBVEFfRklGTykpOwotCQlyZXR1cm47CisJCQkqYnVmKysgPSBzd2FiMzIoX19zbXNjOTExeF9yZWdfcmVhZChwZGF0YSwKKwkJCQkJCQkgICAgUlhfREFUQV9GSUZPKSk7CisJCWdvdG8gb3V0OwogCX0KIAogCWlmIChwZGF0YS0+Y29uZmlnLmZsYWdzICYgU01TQzkxMVhfVVNFXzMyQklUKSB7CiAJCXJlYWRzbChwZGF0YS0+aW9hZGRyICsgUlhfREFUQV9GSUZPLCBidWYsIHdvcmRjb3VudCk7Ci0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKHBkYXRhLT5jb25maWcuZmxhZ3MgJiBTTVNDOTExWF9VU0VfMTZCSVQpIHsKIAkJd2hpbGUgKHdvcmRjb3VudC0tKQotCQkJKmJ1ZisrID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIFJYX0RBVEFfRklGTyk7Ci0JCXJldHVybjsKKwkJCSpidWYrKyA9IF9fc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIFJYX0RBVEFfRklGTyk7CisJCWdvdG8gb3V0OwogCX0KIAogCUJVRygpOworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBkYXRhLT5kZXZfbG9jaywgZmxhZ3MpOwogfQogCiAvKiB3YWl0cyBmb3IgTUFDIG5vdCBidXN5LCB3aXRoIHRpbWVvdXQuICBPbmx5IGNhbGxlZCBieSBzbXNjOTExeF9tYWNfcmVhZApAQCAtMTUzOCw3ICsxNTUwLDcgQEAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSB8fCAhcGRhdGEtPnBoeV9kZXYpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIHBoeV9taWlfaW9jdGwocGRhdGEtPnBoeV9kZXYsIGlmX21paShpZnIpLCBjbWQpOworCXJldHVybiBwaHlfbWlpX2lvY3RsKHBkYXRhLT5waHlfZGV2LCBpZnIsIGNtZCk7CiB9CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Ntc2M5NDIwLmMgYi9kcml2ZXJzL25ldC9zbXNjOTQyMC5jCmluZGV4IDZjZGVlNmEuLmIwOWVlMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Ntc2M5NDIwLmMKKysrIGIvZHJpdmVycy9uZXQvc21zYzk0MjAuYwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikgfHwgIXBkLT5waHlfZGV2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBwaHlfbWlpX2lvY3RsKHBkLT5waHlfZGV2LCBpZl9taWkoaWZyKSwgY21kKTsKKwlyZXR1cm4gcGh5X21paV9pb2N0bChwZC0+cGh5X2RldiwgaWZyLCBjbWQpOwogfQogCiBzdGF0aWMgaW50IHNtc2M5NDIwX2V0aHRvb2xfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdGFyZmlyZS5jIGIvZHJpdmVycy9uZXQvc3RhcmZpcmUuYwppbmRleCA3NGI3YWU3Li5hNDJiNjg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKQEAgLTU2Miw3ICs1NjIsNiBAQAogCXVuc2lnbmVkIGludCB0eF9kb25lOwogCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CiAjaWZkZWYgVkxBTl9TVVBQT1JUCiAJc3RydWN0IHZsYW5fZ3JvdXAgKnZsZ3JwOwpAQCAtMTE3NCw3ICsxMTczLDcgQEAKIAkvKiBUcmlnZ2VyIGFuIGltbWVkaWF0ZSB0cmFuc21pdCBkZW1hbmQuICovCiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsgLyogcHJldmVudCB0eCB0aW1lb3V0ICovCi0JbnAtPnN0YXRzLnR4X2Vycm9ycysrOworCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQogCkBAIC0xMjY1LDcgKzEyNjQsNyBAQAogCQkJfQogCQkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKIAkJCQlzdGF0dXMgfD0gVHhDYWxUQ1A7Ci0JCQkJbnAtPnN0YXRzLnR4X2NvbXByZXNzZWQrKzsKKwkJCQlkZXYtPnN0YXRzLnR4X2NvbXByZXNzZWQrKzsKIAkJCX0KIAkJCXN0YXR1cyB8PSBza2JfZmlyc3RfZnJhZ19sZW4oc2tiKSB8IChza2JfbnVtX2ZyYWdzKHNrYikgPDwgMTYpOwogCkBAIC0xMzc0LDcgKzEzNzMsNyBAQAogCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVHggY29tcGxldGlvbiAjJWQgZW50cnkgJWQgaXMgJSM4Ljh4LlxuIiwKIAkJCQkgICAgICAgZGV2LT5uYW1lLCBucC0+ZGlydHlfdHgsIG5wLT50eF9kb25lLCB0eF9zdGF0dXMpOwogCQkJaWYgKCh0eF9zdGF0dXMgJiAweGUwMDAwMDAwKSA9PSAweGEwMDAwMDAwKSB7Ci0JCQkJbnAtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJCX0gZWxzZSBpZiAoKHR4X3N0YXR1cyAmIDB4ZTAwMDAwMDApID09IDB4ODAwMDAwMDApIHsKIAkJCQl1MTYgZW50cnkgPSAodHhfc3RhdHVzICYgMHg3ZmZmKSAvIHNpemVvZihzdGFyZmlyZV90eF9kZXNjKTsKIAkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gbnAtPnR4X2luZm9bZW50cnldLnNrYjsKQEAgLTE0NjIsOSArMTQ2MSw5IEBACiAJCQkvKiBUaGVyZSB3YXMgYW4gZXJyb3IuICovCiAJCQlpZiAoZGVidWcgPiAyKQogCQkJCXByaW50ayhLRVJOX0RFQlVHICIgIG5ldGRldl9yeCgpIFJ4IGVycm9yIHdhcyAlIzguOHguXG4iLCBkZXNjX3N0YXR1cyk7Ci0JCQlucC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJaWYgKGRlc2Nfc3RhdHVzICYgUnhGSUZPRXJyKQotCQkJCW5wLT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKIAkJCWdvdG8gbmV4dF9yeDsKIAkJfQogCkBAIC0xNTE1LDcgKzE1MTQsNyBAQAogI2VuZGlmCiAJCWlmIChsZTE2X3RvX2NwdShkZXNjLT5zdGF0dXMyKSAmIDB4MDEwMCkgewogCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQkJCW5wLT5zdGF0cy5yeF9jb21wcmVzc2VkKys7CisJCQlkZXYtPnN0YXRzLnJ4X2NvbXByZXNzZWQrKzsKIAkJfQogCQkvKgogCQkgKiBUaGlzIGZlYXR1cmUgZG9lc24ndCBzZWVtIHRvIGJlIHdvcmtpbmcsIGF0IGxlYXN0CkBAIC0xNTQ3LDcgKzE1NDYsNyBAQAogCQl9IGVsc2UKICNlbmRpZiAvKiBWTEFOX1NVUFBPUlQgKi8KIAkJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7Ci0JCW5wLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCiAJbmV4dF9yeDoKIAkJbnAtPmN1cl9yeCsrOwpAQCAtMTcxNywxMiArMTcxNiwxMiBAQAogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFBDSSBUeCB1bmRlcmZsb3cgLS0gYWRhcHRlciBpcyBwcm9iYWJseSBtYWxmdW5jdGlvbmluZ1xuIiwgZGV2LT5uYW1lKTsKIAl9CiAJaWYgKGludHJfc3RhdHVzICYgSW50clJ4R0ZQRGVhZCkgewotCQlucC0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKLQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJfQogCWlmIChpbnRyX3N0YXR1cyAmIChJbnRyTm9UeENzdW0gfCBJbnRyRE1BRXJyKSkgewotCQlucC0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKLQkJbnAtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJfQogCWlmICgoaW50cl9zdGF0dXMgJiB+KEludHJOb3JtYWxNYXNrIHwgSW50ckFibm9ybWFsU3VtbWFyeSB8IEludHJMaW5rQ2hhbmdlIHwgSW50clN0YXRzTWF4IHwgSW50clR4RGF0YUxvdyB8IEludHJSeEdGUERlYWQgfCBJbnRyTm9UeENzdW0gfCBJbnRyUENJUGFkKSkgJiYgZGVidWcpCiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IFNvbWV0aGluZyBXaWNrZWQgaGFwcGVuZWQhICUjOC44eC5cbiIsCkBAIC0xNzM2LDI0ICsxNzM1LDI0IEBACiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBucC0+YmFzZTsKIAogCS8qIFRoaXMgYWRhcHRlciBhcmNoaXRlY3R1cmUgbmVlZHMgbm8gU01QIGxvY2tzLiAqLwotCW5wLT5zdGF0cy50eF9ieXRlcyA9IHJlYWRsKGlvYWRkciArIDB4NTcwMTApOwotCW5wLT5zdGF0cy5yeF9ieXRlcyA9IHJlYWRsKGlvYWRkciArIDB4NTcwNDQpOwotCW5wLT5zdGF0cy50eF9wYWNrZXRzID0gcmVhZGwoaW9hZGRyICsgMHg1NzAwMCk7Ci0JbnAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzID0KKwlkZXYtPnN0YXRzLnR4X2J5dGVzID0gcmVhZGwoaW9hZGRyICsgMHg1NzAxMCk7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyA9IHJlYWRsKGlvYWRkciArIDB4NTcwNDQpOworCWRldi0+c3RhdHMudHhfcGFja2V0cyA9IHJlYWRsKGlvYWRkciArIDB4NTcwMDApOworCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgPQogCQlyZWFkbChpb2FkZHIgKyAweDU3MDI0KSArIHJlYWRsKGlvYWRkciArIDB4NTcwMjgpOwotCW5wLT5zdGF0cy50eF93aW5kb3dfZXJyb3JzID0gcmVhZGwoaW9hZGRyICsgMHg1NzAxOCk7Ci0JbnAtPnN0YXRzLmNvbGxpc2lvbnMgPQorCWRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycyA9IHJlYWRsKGlvYWRkciArIDB4NTcwMTgpOworCWRldi0+c3RhdHMuY29sbGlzaW9ucyA9CiAJCXJlYWRsKGlvYWRkciArIDB4NTcwMDQpICsgcmVhZGwoaW9hZGRyICsgMHg1NzAwOCk7CiAKIAkvKiBUaGUgY2hpcCBvbmx5IG5lZWQgcmVwb3J0IGZyYW1lIHNpbGVudGx5IGRyb3BwZWQuICovCi0JbnAtPnN0YXRzLnJ4X2Ryb3BwZWQgKz0gcmVhZHcoaW9hZGRyICsgUnhETUFTdGF0dXMpOworCWRldi0+c3RhdHMucnhfZHJvcHBlZCArPSByZWFkdyhpb2FkZHIgKyBSeERNQVN0YXR1cyk7CiAJd3JpdGV3KDAsIGlvYWRkciArIFJ4RE1BU3RhdHVzKTsKLQlucC0+c3RhdHMucnhfY3JjX2Vycm9ycyA9IHJlYWRsKGlvYWRkciArIDB4NTcwM0MpOwotCW5wLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgPSByZWFkbChpb2FkZHIgKyAweDU3MDQwKTsKLQlucC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyA9IHJlYWRsKGlvYWRkciArIDB4NTcwNTgpOwotCW5wLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzID0gcmVhZGwoaW9hZGRyICsgMHg1NzA3Qyk7CisJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzID0gcmVhZGwoaW9hZGRyICsgMHg1NzAzQyk7CisJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgPSByZWFkbChpb2FkZHIgKyAweDU3MDQwKTsKKwlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgPSByZWFkbChpb2FkZHIgKyAweDU3MDU4KTsKKwlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPSByZWFkbChpb2FkZHIgKyAweDU3MDdDKTsKIAotCXJldHVybiAmbnAtPnN0YXRzOworCXJldHVybiAmZGV2LT5zdGF0czsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvY29tbW9uLmggYi9kcml2ZXJzL25ldC9zdG1tYWMvY29tbW9uLmgKaW5kZXggMTQ0Zjc2Zi4uNjZiOWRhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9jb21tb24uaApAQCAtMTA4LDYgKzEwOCw3IEBACiAJZ29vZF9mcmFtZSA9IDAsCiAJZGlzY2FyZF9mcmFtZSA9IDEsCiAJY3N1bV9ub25lID0gMiwKKwlsbGNfc25hcCA9IDQsCiB9OwogCiBlbnVtIHR4X2RtYV9pcnFfc3RhdHVzIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hYzEwMDAuaCBiL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hYzEwMDAuaAppbmRleCBkOGQwZjM1NS4uOGIyMGIxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwMC5oCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hYzEwMDAuaApAQCAtOTMsNyArOTMsNyBAQAogI2RlZmluZSBHTUFDX0NPTlRST0xfSVBDCTB4MDAwMDA0MDAgLyogQ2hlY2tzdW0gT2ZmbG9hZCAqLwogI2RlZmluZSBHTUFDX0NPTlRST0xfRFIJCTB4MDAwMDAyMDAgLyogRGlzYWJsZSBSZXRyeSAqLwogI2RlZmluZSBHTUFDX0NPTlRST0xfTFVECTB4MDAwMDAxMDAgLyogTGluayB1cC9kb3duICovCi0jZGVmaW5lIEdNQUNfQ09OVFJPTF9BQ1MJMHgwMDAwMDA4MCAvKiBBdXRvbWF0aWMgUGFkIFN0cmlwcGluZyAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfQUNTCTB4MDAwMDAwODAgLyogQXV0b21hdGljIFBhZC9GQ1MgU3RyaXBwaW5nICovCiAjZGVmaW5lIEdNQUNfQ09OVFJPTF9EQwkJMHgwMDAwMDAxMCAvKiBEZWZlcnJhbCBDaGVjayAqLwogI2RlZmluZSBHTUFDX0NPTlRST0xfVEUJCTB4MDAwMDAwMDggLyogVHJhbnNtaXR0ZXIgRW5hYmxlICovCiAjZGVmaW5lIEdNQUNfQ09OVFJPTF9SRQkJMHgwMDAwMDAwNCAvKiBSZWNlaXZlciBFbmFibGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hYzEwMDBfY29yZS5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwMF9jb3JlLmMKaW5kZXggOTE3YjRlMS4uMmIyZjVjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwMF9jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwMF9jb3JlLmMKQEAgLTIyMCw2ICsyMjAsOCBAQAogCQkoKHVpZCAmIDB4MDAwMGZmMDApID4+IDgpLCAodWlkICYgMHgwMDAwMDBmZikpOwogCiAJbWFjID0ga3phbGxvYyhzaXplb2YoY29uc3Qgc3RydWN0IG1hY19kZXZpY2VfaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghbWFjKQorCQlyZXR1cm4gTlVMTDsKIAogCW1hYy0+bWFjID0gJmR3bWFjMTAwMF9vcHM7CiAJbWFjLT5kbWEgPSAmZHdtYWMxMDAwX2RtYV9vcHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWMxMDBfY29yZS5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwX2NvcmUuYwppbmRleCA2ZjI3MGEwLi4yZmIxNjVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWMxMDBfY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hYzEwMF9jb3JlLmMKQEAgLTE3OSw2ICsxNzksOCBAQAogCXN0cnVjdCBtYWNfZGV2aWNlX2luZm8gKm1hYzsKIAogCW1hYyA9IGt6YWxsb2Moc2l6ZW9mKGNvbnN0IHN0cnVjdCBtYWNfZGV2aWNlX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1hYykKKwkJcmV0dXJuIE5VTEw7CiAKIAlwcl9pbmZvKCJcdERXTUFDMTAwXG4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL2VuaF9kZXNjLmMgYi9kcml2ZXJzL25ldC9zdG1tYWMvZW5oX2Rlc2MuYwppbmRleCAzYzE4ZWJlLi5mNjEyZjk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdG1tYWMvZW5oX2Rlc2MuYworKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvZW5oX2Rlc2MuYwpAQCAtMTIzLDcgKzEyMyw3IEBACiAJICovCiAJaWYgKHN0YXR1cyA9PSAweDApIHsKIAkJQ0hJUF9EQkcoS0VSTl9JTkZPICJSWCBEZXMwIHN0YXR1czogSUVFRSA4MDIuMyBUeXBlIGZyYW1lLlxuIik7Ci0JCXJldCA9IGdvb2RfZnJhbWU7CisJCXJldCA9IGxsY19zbmFwOwogCX0gZWxzZSBpZiAoc3RhdHVzID09IDB4NCkgewogCQlDSElQX0RCRyhLRVJOX0lORk8gIlJYIERlczAgc3RhdHVzOiBJUHY0LzYgTm8gQ1NVTSBlcnJvclMuXG4iKTsKIAkJcmV0ID0gZ29vZF9mcmFtZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKaW5kZXggYTMxZDU4MC4uYmJiNzk1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKQEAgLTgyOSw3ICs4MjksNiBAQAogCSAqIEluIGNhc2Ugb2YgZmFpbHVyZSBjb250aW51ZSB3aXRob3V0IHRpbWVyLiAqLwogCWlmICh1bmxpa2VseSgoc3RtbWFjX29wZW5fZXh0X3RpbWVyKGRldiwgcHJpdi0+dG0pKSA8IDApKSB7CiAJCXByX3dhcm5pbmcoInN0bW1hY2V0aDogY2Fubm90IGF0dGFjaCB0aGUgZXh0ZXJuYWwgdGltZXIuXG4iKTsKLQkJdG1yYXRlID0gMDsKIAkJcHJpdi0+dG0tPmZyZXEgPSAwOwogCQlwcml2LT50bS0+dGltZXJfc3RhcnQgPSBzdG1tYWNfbm9fdGltZXJfc3RhcnRlZDsKIAkJcHJpdi0+dG0tPnRpbWVyX3N0b3AgPSBzdG1tYWNfbm9fdGltZXJfc3RvcHBlZDsKQEAgLTEyMTcsOSArMTIxNiwxMyBAQAogCQkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJZWxzZSB7CiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCQkJLyogTGVuZ3RoIHNob3VsZCBvbWl0IHRoZSBDUkMgKi8KLQkJCWludCBmcmFtZV9sZW4gPSBwcml2LT5ody0+ZGVzYy0+Z2V0X3J4X2ZyYW1lX2xlbihwKSAtIDQ7CisJCQlpbnQgZnJhbWVfbGVuOwogCisJCQlmcmFtZV9sZW4gPSBwcml2LT5ody0+ZGVzYy0+Z2V0X3J4X2ZyYW1lX2xlbihwKTsKKwkJCS8qIEFDUyBpcyBzZXQ7IEdNQUMgY29yZSBzdHJpcHMgUEFEL0ZDUyBmb3IgSUVFRSA4MDIuMworCQkJICogVHlwZSBmcmFtZXMgKExMQy9MTEMtU05BUCkgKi8KKwkJCWlmICh1bmxpa2VseShzdGF0dXMgIT0gbGxjX3NuYXApKQorCQkJCWZyYW1lX2xlbiAtPSBFVEhfRkNTX0xFTjsKICNpZmRlZiBTVE1NQUNfUlhfREVCVUcKIAkJCWlmIChmcmFtZV9sZW4gPiBFVEhfRlJBTUVfTEVOKQogCQkJCXByX2RlYnVnKCJcdFJYIGZyYW1lIHNpemUgJWQsIENPRSBzdGF0dXM6ICVkXG4iLApAQCAtMTQzNywyNCArMTQ0MCwxOCBAQAogc3RhdGljIGludCBzdG1tYWNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKIHsKIAlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCByZXQgPSAtRU9QTk9UU1VQUDsKKwlpbnQgcmV0OwogCiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFNJT0NHTUlJUEhZOgotCWNhc2UgU0lPQ0dNSUlSRUc6Ci0JY2FzZSBTSU9DU01JSVJFRzoKLQkJaWYgKCFwcml2LT5waHlkZXYpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXByaXYtPnBoeWRldikKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKLQkJcmV0ID0gcGh5X21paV9pb2N0bChwcml2LT5waHlkZXYsIGlmX21paShycSksIGNtZCk7Ci0JCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9CisJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKwlyZXQgPSBwaHlfbWlpX2lvY3RsKHByaXYtPnBoeWRldiwgcnEsIGNtZCk7CisJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTU2NCwxNSArMTU2MSwxNSBAQAogCWVsc2UKIAkJZGV2aWNlID0gZHdtYWMxMDBfc2V0dXAoaW9hZGRyKTsKIAorCWlmICghZGV2aWNlKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCWlmIChwcml2LT5lbmhfZGVzYykgewogCQlkZXZpY2UtPmRlc2MgPSAmZW5oX2Rlc2Nfb3BzOwogCQlwcl9pbmZvKCJcdEVuaGFuY2VkIGRlc2NyaXB0b3Igc3RydWN0dXJlXG4iKTsKIAl9IGVsc2UKIAkJZGV2aWNlLT5kZXNjID0gJm5kZXNjX29wczsKIAotCWlmICghZGV2aWNlKQotCQlyZXR1cm4gLUVOT01FTTsKLQogCXByaXYtPmh3ID0gZGV2aWNlOwogCiAJcHJpdi0+d29sZW5hYmxlZCA9IHByaXYtPmh3LT5wbXQ7CS8qIFBNVCBzdXBwb3J0ZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bjNfODI1ODYuYyBiL2RyaXZlcnMvbmV0L3N1bjNfODI1ODYuYwppbmRleCAxNTEzMTIzLi5iNmFlNTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW4zXzgyNTg2LmMKKysrIGIvZHJpdmVycy9uZXQvc3VuM184MjU4Ni5jCkBAIC0xNDIsNyArMTQyLDYgQEAKIAogc3RydWN0IHByaXYKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAl1bnNpZ25lZCBsb25nIGJhc2U7CiAJY2hhciAqbWVtdG9wOwogCWxvbmcgaW50IGxvY2s7CkBAIC03ODgsMTAgKzc4NywxMCBAQAogCQkJCQkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLChjaGFyICopIHAtPmJhc2Urc3dhYjMyKCh1bnNpZ25lZCBsb25nKSByYmQtPmJ1ZmZlciksdG90bGVuKTsKIAkJCQkJCXNrYi0+cHJvdG9jb2w9ZXRoX3R5cGVfdHJhbnMoc2tiLGRldik7CiAJCQkJCQluZXRpZl9yeChza2IpOwotCQkJCQkJcC0+c3RhdHMucnhfcGFja2V0cysrOworCQkJCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJCQkJCX0KIAkJCQkJZWxzZQotCQkJCQkJcC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQl7CkBAIC04MTIsMTMgKzgxMSwxMyBAQAogCQkJCQl0b3RsZW4gKz0gcnN0YXQgJiBSQkRfTUFTSzsKIAkJCQkJcmJkLT5zdGF0dXMgPSAwOwogCQkJCQlwcmludGsoIiVzOiByZWNlaXZlZCBvdmVyc2l6ZWQgZnJhbWUhIGxlbmd0aDogJWRcbiIsZGV2LT5uYW1lLHRvdGxlbik7Ci0JCQkJCXAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQkgfQogCQl9CiAJCWVsc2UgLyogZnJhbWUgIShvayksIG9ubHkgd2l0aCAnc2F2ZS1iYWQtZnJhbWVzJyAqLwogCQl7CiAJCQlwcmludGsoIiVzOiBvb3BzISByZmQtZXJyb3Itc3RhdHVzOiAlMDR4XG4iLGRldi0+bmFtZSxzdGF0dXMpOwotCQkJcC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQl9CiAJCXAtPnJmZF90b3AtPnN0YXRfaGlnaCA9IDA7CiAJCXAtPnJmZF90b3AtPmxhc3QgPSBSRkRfU1VTUDsgLyogbWF5YmUgZXhjaGFuZ2UgYnkgUkZEX0xBU1QgKi8KQEAgLTg4NSw3ICs4ODQsNyBAQAogewogCXN0cnVjdCBwcml2ICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCXAtPnN0YXRzLnJ4X2Vycm9ycysrOworCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAKIAlXQUlUXzRfU0NCX0NNRCgpOwkJLyogd2FpdCBmb3IgdGhlIGxhc3QgY21kLCBXQUlUXzRfRlVMTFNUQVQ/PyAqLwogCXAtPnNjYi0+Y21kX3J1YyA9IFJVQ19BQk9SVDsgLyogdXN1YWxseSB0aGUgUlUgaXMgaW4gdGhlICdubyByZXNvdXJjZSctc3RhdGUgLi4gYWJvcnQgaXQgbm93LiAqLwpAQCAtOTE4LDI5ICs5MTcsMjkgQEAKIAogCWlmKHN0YXR1cyAmIFNUQVRfT0spCiAJewotCQlwLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JCXAtPnN0YXRzLmNvbGxpc2lvbnMgKz0gKHN0YXR1cyAmIFRDTURfTUFYQ09MTE1BU0spOworCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9IChzdGF0dXMgJiBUQ01EX01BWENPTExNQVNLKTsKIAl9CiAJZWxzZQogCXsKLQkJcC0+c3RhdHMudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCWlmKHN0YXR1cyAmIFRDTURfTEFURUNPTEwpIHsKIAkJCXByaW50aygiJXM6IGxhdGUgY29sbGlzaW9uIGRldGVjdGVkLlxuIixkZXYtPm5hbWUpOwotCQkJcC0+c3RhdHMuY29sbGlzaW9ucysrOworCQkJZGV2LT5zdGF0cy5jb2xsaXNpb25zKys7CiAJCX0KIAkJZWxzZSBpZihzdGF0dXMgJiBUQ01EX05PQ0FSUklFUikgewotCQkJcC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAkJCXByaW50aygiJXM6IG5vIGNhcnJpZXIgZGV0ZWN0ZWQuXG4iLGRldi0+bmFtZSk7CiAJCX0KIAkJZWxzZSBpZihzdGF0dXMgJiBUQ01EX0xPU1RDVFMpCiAJCQlwcmludGsoIiVzOiBsb3NzIG9mIENUUyBkZXRlY3RlZC5cbiIsZGV2LT5uYW1lKTsKIAkJZWxzZSBpZihzdGF0dXMgJiBUQ01EX1VOREVSUlVOKSB7Ci0JCQlwLT5zdGF0cy50eF9maWZvX2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCQkJcHJpbnRrKCIlczogRE1BIHVuZGVycnVuIGRldGVjdGVkLlxuIixkZXYtPm5hbWUpOwogCQl9CiAJCWVsc2UgaWYoc3RhdHVzICYgVENNRF9NQVhDT0xMKSB7CiAJCQlwcmludGsoIiVzOiBNYXguIGNvbGxpc2lvbnMgZXhjZWVkZWQuXG4iLGRldi0+bmFtZSk7Ci0JCQlwLT5zdGF0cy5jb2xsaXNpb25zICs9IDE2OworCQkJZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9IDE2OwogCQl9CiAJfQogCkBAIC0xMTI5LDEyICsxMTI4LDEyIEBACiAJb3ZybiA9IHN3YWIxNihwLT5zY2ItPm92cm5fZXJycyk7CiAJcC0+c2NiLT5vdnJuX2VycnMgPSAwOwogCi0JcC0+c3RhdHMucnhfY3JjX2Vycm9ycyArPSBjcmM7Ci0JcC0+c3RhdHMucnhfZmlmb19lcnJvcnMgKz0gb3ZybjsKLQlwLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgKz0gYWxuOwotCXAtPnN0YXRzLnJ4X2Ryb3BwZWQgKz0gcnNjOworCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycyArPSBjcmM7CisJZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycyArPSBvdnJuOworCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzICs9IGFsbjsKKwlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQgKz0gcnNjOwogCi0JcmV0dXJuICZwLT5zdGF0czsKKwlyZXR1cm4gJmRldi0+c3RhdHM7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuYm1hYy5jIGIvZHJpdmVycy9uZXQvc3VuYm1hYy5jCmluZGV4IDM2N2U5NmYuLjA5YzA3MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmJtYWMuYworKysgYi9kcml2ZXJzL25ldC9zdW5ibWFjLmMKQEAgLTEyMDEsNyArMTIwMSw3IEBACiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IDUqSFo7CiAKIAkvKiBGaW5pc2ggbmV0IGRldmljZSByZWdpc3RyYXRpb24uICovCi0JZGV2LT5pcnEgPSBicC0+YmlnbWFjX29wLT5pcnFzWzBdOworCWRldi0+aXJxID0gYnAtPmJpZ21hY19vcC0+YXJjaGRhdGEuaXJxc1swXTsKIAlkZXYtPmRtYSA9IDA7CiAKIAlpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikpIHsKQEAgLTEzMDEsMTIgKzEzMDEsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgYmlnbWFjX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gb2ZfcmVnaXN0ZXJfZHJpdmVyKCZiaWdtYWNfc2J1c19kcml2ZXIsICZvZl9idXNfdHlwZSk7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmYmlnbWFjX3NidXNfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGJpZ21hY19leGl0KHZvaWQpCiB7Ci0Jb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoJmJpZ21hY19zYnVzX2RyaXZlcik7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmJpZ21hY19zYnVzX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGJpZ21hY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmhtZS5jIGIvZHJpdmVycy9uZXQvc3VuaG1lLmMKaW5kZXggM2Q5NjUwYi4uZWVjNDQzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuaG1lLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuaG1lLmMKQEAgLTI1NjEsNyArMjU2MSw3IEBACiAJCWlmIChza2lwKQogCQkJY29udGludWU7CiAKLQkJZXJyID0gcmVxdWVzdF9pcnEob3AtPmlycXNbMF0sCisJCWVyciA9IHJlcXVlc3RfaXJxKG9wLT5hcmNoZGF0YS5pcnFzWzBdLAogCQkJCSAgcXVhdHRyb19zYnVzX2ludGVycnVwdCwKIAkJCQkgIElSUUZfU0hBUkVELCAiUXVhdHRybyIsCiAJCQkJICBxcCk7CkBAIC0yNTkwLDcgKzI1OTAsNyBAQAogCQlpZiAoc2tpcCkKIAkJCWNvbnRpbnVlOwogCi0JCWZyZWVfaXJxKG9wLT5pcnFzWzBdLCBxcCk7CisJCWZyZWVfaXJxKG9wLT5hcmNoZGF0YS5pcnFzWzBdLCBxcCk7CiAJfQogfQogI2VuZGlmIC8qIENPTkZJR19TQlVTICovCkBAIC0yNzkwLDcgKzI3OTAsNyBAQAogCS8qIEhhcHB5IE1lYWwgY2FuIGRvIGl0IGFsbC4uLiAqLwogCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSFdfQ1NVTTsKIAotCWRldi0+aXJxID0gb3AtPmlycXNbMF07CisJZGV2LT5pcnEgPSBvcC0+YXJjaGRhdGEuaXJxc1swXTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1NCVVMpICYmIGRlZmluZWQoQ09ORklHX1BDSSkKIAkvKiBIb29rIHVwIFNCVVMgcmVnaXN0ZXIvZGVzY3JpcHRvciBhY2Nlc3NvcnMuICovCkBAIC0zMzA0LDcgKzMzMDQsNyBAQAogewogCWludCBlcnI7CiAKLQllcnIgPSBvZl9yZWdpc3Rlcl9kcml2ZXIoJmhtZV9zYnVzX2RyaXZlciwgJm9mX2J1c190eXBlKTsKKwllcnIgPSBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmhtZV9zYnVzX2RyaXZlcik7CiAJaWYgKCFlcnIpCiAJCWVyciA9IHF1YXR0cm9fc2J1c19yZWdpc3Rlcl9pcnFzKCk7CiAKQEAgLTMzMTMsNyArMzMxMyw3IEBACiAKIHN0YXRpYyB2b2lkIGhhcHB5X21lYWxfc2J1c19leGl0KHZvaWQpCiB7Ci0Jb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoJmhtZV9zYnVzX2RyaXZlcik7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmhtZV9zYnVzX2RyaXZlcik7CiAJcXVhdHRyb19zYnVzX2ZyZWVfaXJxcygpOwogCiAJd2hpbGUgKHFmZV9zYnVzX2xpc3QpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmxhbmNlLmMgYi9kcml2ZXJzL25ldC9zdW5sYW5jZS5jCmluZGV4IDdkOWMzM2QuLmVlMzY0ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmxhbmNlLmMKKysrIGIvZHJpdmVycy9uZXQvc3VubGFuY2UuYwpAQCAtMTQ3NCw3ICsxNDc0LDcgQEAKIAlkZXYtPmV0aHRvb2xfb3BzID0gJnNwYXJjX2xhbmNlX2V0aHRvb2xfb3BzOwogCWRldi0+bmV0ZGV2X29wcyA9ICZzcGFyY19sYW5jZV9vcHM7CiAKLQlkZXYtPmlycSA9IG9wLT5pcnFzWzBdOworCWRldi0+aXJxID0gb3AtPmFyY2hkYXRhLmlycXNbMF07CiAKIAkvKiBXZSBjYW5ub3Qgc2xlZXAgaWYgdGhlIGNoaXAgaXMgYnVzeSBkdXJpbmcgYQogCSAqIG11bHRpY2FzdCBsaXN0IHVwZGF0ZSBldmVudCwgYmVjYXVzZSBzdWNoIGV2ZW50cwpAQCAtMTU1OCwxMiArMTU1OCwxMiBAQAogLyogRmluZCBhbGwgdGhlIGxhbmNlIGNhcmRzIG9uIHRoZSBzeXN0ZW0gYW5kIGluaXRpYWxpemUgdGhlbSAqLwogc3RhdGljIGludCBfX2luaXQgc3BhcmNfbGFuY2VfaW5pdCh2b2lkKQogewotCXJldHVybiBvZl9yZWdpc3Rlcl9kcml2ZXIoJnN1bmxhbmNlX3NidXNfZHJpdmVyLCAmb2ZfYnVzX3R5cGUpOworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnN1bmxhbmNlX3NidXNfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNwYXJjX2xhbmNlX2V4aXQodm9pZCkKIHsKLQlvZl91bnJlZ2lzdGVyX2RyaXZlcigmc3VubGFuY2Vfc2J1c19kcml2ZXIpOworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZzdW5sYW5jZV9zYnVzX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHNwYXJjX2xhbmNlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VucWUuYyBiL2RyaXZlcnMvbmV0L3N1bnFlLmMKaW5kZXggNzJiNTc5Yy4uNWY4NGE1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VucWUuYworKysgYi9kcml2ZXJzL25ldC9zdW5xZS5jCkBAIC04MDMsNyArODAzLDcgQEAKIAogCQkJcWVjX2luaXRfb25jZShxZWNwLCBvcCk7CiAKLQkJCWlmIChyZXF1ZXN0X2lycShvcC0+aXJxc1swXSwgcWVjX2ludGVycnVwdCwKKwkJCWlmIChyZXF1ZXN0X2lycShvcC0+YXJjaGRhdGEuaXJxc1swXSwgcWVjX2ludGVycnVwdCwKIAkJCQkJSVJRRl9TSEFSRUQsICJxZWMiLCAodm9pZCAqKSBxZWNwKSkgewogCQkJCXByaW50ayhLRVJOX0VSUiAicWVjOiBDYW4ndCByZWdpc3RlciBpcnEuXG4iKTsKIAkJCQlnb3RvIGZhaWw7CkBAIC05MDEsNyArOTAxLDcgQEAKIAlTRVRfTkVUREVWX0RFVihkZXYsICZvcC0+ZGV2KTsKIAogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSA1KkhaOwotCWRldi0+aXJxID0gb3AtPmlycXNbMF07CisJZGV2LT5pcnEgPSBvcC0+YXJjaGRhdGEuaXJxc1swXTsKIAlkZXYtPmRtYSA9IDA7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZxZV9ldGh0b29sX29wczsKIAlkZXYtPm5ldGRldl9vcHMgPSAmcWVjX29wczsKQEAgLTk4OCwxOCArOTg4LDE4IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHFlY19pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIG9mX3JlZ2lzdGVyX2RyaXZlcigmcWVjX3NidXNfZHJpdmVyLCAmb2ZfYnVzX3R5cGUpOworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnFlY19zYnVzX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBxZWNfZXhpdCh2b2lkKQogewotCW9mX3VucmVnaXN0ZXJfZHJpdmVyKCZxZWNfc2J1c19kcml2ZXIpOworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZxZWNfc2J1c19kcml2ZXIpOwogCiAJd2hpbGUgKHJvb3RfcWVjX2RldikgewogCQlzdHJ1Y3Qgc3VucWVjICpuZXh0ID0gcm9vdF9xZWNfZGV2LT5uZXh0X21vZHVsZTsKIAkJc3RydWN0IG9mX2RldmljZSAqb3AgPSByb290X3FlY19kZXYtPm9wOwogCi0JCWZyZWVfaXJxKG9wLT5pcnFzWzBdLCAodm9pZCAqKSByb290X3FlY19kZXYpOworCQlmcmVlX2lycShvcC0+YXJjaGRhdGEuaXJxc1swXSwgKHZvaWQgKikgcm9vdF9xZWNfZGV2KTsKIAkJb2ZfaW91bm1hcCgmb3AtPnJlc291cmNlWzBdLCByb290X3FlY19kZXYtPmdyZWdzLAogCQkJICAgR0xPQl9SRUdfU0laRSk7CiAJCWtmcmVlKHJvb3RfcWVjX2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90YzM1ODE1LmMgYi9kcml2ZXJzL25ldC90YzM1ODE1LmMKaW5kZXggYmUwOGI3NS4uOTllNDIzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGMzNTgxNS5jCisrKyBiL2RyaXZlcnMvbmV0L3RjMzU4MTUuYwpAQCAtMjA2Niw3ICsyMDY2LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCFscC0+cGh5X2RldikKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JcmV0dXJuIHBoeV9taWlfaW9jdGwobHAtPnBoeV9kZXYsIGlmX21paShycSksIGNtZCk7CisJcmV0dXJuIHBoeV9taWlfaW9jdGwobHAtPnBoeV9kZXYsIHJxLCBjbWQpOwogfQogCiBzdGF0aWMgdm9pZCB0YzM1ODE1X2NoaXBfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RlaHV0aS5oIGIvZHJpdmVycy9uZXQvdGVodXRpLmgKaW5kZXggY2ZmOThkMC4uNjdlM2I3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGVodXRpLmgKKysrIGIvZHJpdmVycy9uZXQvdGVodXRpLmgKQEAgLTMzNCw3ICszMzQsNyBAQAogCXUzMiB2YV9sbzsKIAl1MzIgdmFfaGk7CiAJc3RydWN0IHBibCBwYmxbMF07CS8qIEZyYWdtZW50cyAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBSZWdpc3RlciByZWdpb24gc2l6ZSAqLwogI2RlZmluZSBCRFhfUkVHU19TSVpFCSAgMHgxMDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuYyBiL2RyaXZlcnMvbmV0L3RnMy5jCmluZGV4IDU3MzA1NGEuLmJjM2FmNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5jCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5jCkBAIC0xOCw2ICsxOCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KQEAgLTY3LDggKzY4LDExIEBACiAjaW5jbHVkZSAidGczLmgiCiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkidGczIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjMuMTEwIgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkFwcmlsIDksIDIwMTAiCisjZGVmaW5lIFRHM19NQUpfTlVNCQkJMworI2RlZmluZSBURzNfTUlOX05VTQkJCTExMworI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JXAorCV9fc3RyaW5naWZ5KFRHM19NQUpfTlVNKSAiLiIgX19zdHJpbmdpZnkoVEczX01JTl9OVU0pCisjZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiQXVndXN0IDIsIDIwMTAiCiAKICNkZWZpbmUgVEczX0RFRl9NQUNfTU9ERQkwCiAjZGVmaW5lIFRHM19ERUZfUlhfTU9ERQkJMApAQCAtMTQ1LDggKzE0OSw2IEBACiAjZGVmaW5lIFRHM19SWF9KTUJfQlVGRl9SSU5HX1NJWkUgXAogCShzaXplb2Yoc3RydWN0IHJpbmdfaW5mbykgKiBURzNfUlhfSlVNQk9fUklOR19TSVpFKQogCi0jZGVmaW5lIFRHM19SU1NfTUlOX05VTV9NU0lYX1ZFQ1MJMgotCiAvKiBEdWUgdG8gYSBoYXJkd2FyZSBidWcsIHRoZSA1NzAxIGNhbiBvbmx5IERNQSB0byBtZW1vcnkgYWRkcmVzc2VzCiAgKiB0aGF0IGFyZSBhdCBsZWFzdCBkd29yZCBhbGlnbmVkIHdoZW4gdXNlZCBpbiBQQ0lYIG1vZGUuICBUaGUgZHJpdmVyCiAgKiB3b3JrcyBhcm91bmQgdGhpcyBidWcgYnkgZG91YmxlIGNvcHlpbmcgdGhlIHBhY2tldC4gIFRoaXMgd29ya2Fyb3VuZApAQCAtMjE5LDEyICsyMjEsOSBAQAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU5MDFfMil9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDRTXzIpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX1RJR09OM181NzA1Ril9LAotCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MjApfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX1RJR09OM181NzIxKX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9USUdPTjNfNTcyMil9LAotCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTApfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX1RJR09OM181NzUxKX0sCi0Je1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1ME0pfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX1RJR09OM181NzUxTSl9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTFGKX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1Mil9LApAQCAtMjcyLDYgKzI3MSw3IEBACiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgVEczUENJX0RFVklDRV9USUdPTjNfNTc3NjUpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBURzNQQ0lfREVWSUNFX1RJR09OM181Nzc5MSl9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3Nzk1KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgVEczUENJX0RFVklDRV9USUdPTjNfNTcxOSl9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU1lTS09OTkVDVCwgUENJX0RFVklDRV9JRF9TWVNLT05ORUNUXzlEWFgpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NZU0tPTk5FQ1QsIFBDSV9ERVZJQ0VfSURfU1lTS09OTkVDVF85TVhYKX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTFRJTUEsIFBDSV9ERVZJQ0VfSURfQUxUSU1BX0FDMTAwMCl9LApAQCAtNTg1LDE4ICs1ODUsMjMgQEAKIHN0YXRpYyB2b2lkIHRnM19hcGVfbG9ja19pbml0KHN0cnVjdCB0ZzMgKnRwKQogewogCWludCBpOworCXUzMiByZWdiYXNlOworCisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzYxKQorCQlyZWdiYXNlID0gVEczX0FQRV9MT0NLX0dSQU5UOworCWVsc2UKKwkJcmVnYmFzZSA9IFRHM19BUEVfUEVSX0xPQ0tfR1JBTlQ7CiAKIAkvKiBNYWtlIHN1cmUgdGhlIGRyaXZlciBoYXNuJ3QgYW55IHN0YWxlIGxvY2tzLiAqLwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCXRnM19hcGVfd3JpdGUzMih0cCwgVEczX0FQRV9MT0NLX0dSQU5UICsgNCAqIGksCi0JCQkJQVBFX0xPQ0tfR1JBTlRfRFJJVkVSKTsKKwkJdGczX2FwZV93cml0ZTMyKHRwLCByZWdiYXNlICsgNCAqIGksIEFQRV9MT0NLX0dSQU5UX0RSSVZFUik7CiB9CiAKIHN0YXRpYyBpbnQgdGczX2FwZV9sb2NrKHN0cnVjdCB0ZzMgKnRwLCBpbnQgbG9ja251bSkKIHsKIAlpbnQgaSwgb2ZmOwogCWludCByZXQgPSAwOwotCXUzMiBzdGF0dXM7CisJdTMyIHN0YXR1cywgcmVxLCBnbnQ7CiAKIAlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpKQogCQlyZXR1cm4gMDsKQEAgLTYwOSwxMyArNjE0LDIxIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc2MSkgeworCQlyZXEgPSBURzNfQVBFX0xPQ0tfUkVROworCQlnbnQgPSBURzNfQVBFX0xPQ0tfR1JBTlQ7CisJfSBlbHNlIHsKKwkJcmVxID0gVEczX0FQRV9QRVJfTE9DS19SRVE7CisJCWdudCA9IFRHM19BUEVfUEVSX0xPQ0tfR1JBTlQ7CisJfQorCiAJb2ZmID0gNCAqIGxvY2tudW07CiAKLQl0ZzNfYXBlX3dyaXRlMzIodHAsIFRHM19BUEVfTE9DS19SRVEgKyBvZmYsIEFQRV9MT0NLX1JFUV9EUklWRVIpOworCXRnM19hcGVfd3JpdGUzMih0cCwgcmVxICsgb2ZmLCBBUEVfTE9DS19SRVFfRFJJVkVSKTsKIAogCS8qIFdhaXQgZm9yIHVwIHRvIDEgbWlsbGlzZWNvbmQgdG8gYWNxdWlyZSBsb2NrLiAqLwogCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgewotCQlzdGF0dXMgPSB0ZzNfYXBlX3JlYWQzMih0cCwgVEczX0FQRV9MT0NLX0dSQU5UICsgb2ZmKTsKKwkJc3RhdHVzID0gdGczX2FwZV9yZWFkMzIodHAsIGdudCArIG9mZik7CiAJCWlmIChzdGF0dXMgPT0gQVBFX0xPQ0tfR1JBTlRfRFJJVkVSKQogCQkJYnJlYWs7CiAJCXVkZWxheSgxMCk7CkBAIC02MjMsNyArNjM2LDcgQEAKIAogCWlmIChzdGF0dXMgIT0gQVBFX0xPQ0tfR1JBTlRfRFJJVkVSKSB7CiAJCS8qIFJldm9rZSB0aGUgbG9jayByZXF1ZXN0LiAqLwotCQl0ZzNfYXBlX3dyaXRlMzIodHAsIFRHM19BUEVfTE9DS19HUkFOVCArIG9mZiwKKwkJdGczX2FwZV93cml0ZTMyKHRwLCBnbnQgKyBvZmYsCiAJCQkJQVBFX0xPQ0tfR1JBTlRfRFJJVkVSKTsKIAogCQlyZXQgPSAtRUJVU1k7CkBAIC02MzQsNyArNjQ3LDcgQEAKIAogc3RhdGljIHZvaWQgdGczX2FwZV91bmxvY2soc3RydWN0IHRnMyAqdHAsIGludCBsb2NrbnVtKQogewotCWludCBvZmY7CisJdTMyIGdudDsKIAogCWlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkpCiAJCXJldHVybjsKQEAgLTY0Nyw4ICs2NjAsMTIgQEAKIAkJcmV0dXJuOwogCX0KIAotCW9mZiA9IDQgKiBsb2NrbnVtOwotCXRnM19hcGVfd3JpdGUzMih0cCwgVEczX0FQRV9MT0NLX0dSQU5UICsgb2ZmLCBBUEVfTE9DS19HUkFOVF9EUklWRVIpOworCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc2MSkKKwkJZ250ID0gVEczX0FQRV9MT0NLX0dSQU5UOworCWVsc2UKKwkJZ250ID0gVEczX0FQRV9QRVJfTE9DS19HUkFOVDsKKworCXRnM19hcGVfd3JpdGUzMih0cCwgZ250ICsgNCAqIGxvY2tudW0sIEFQRV9MT0NLX0dSQU5UX0RSSVZFUik7CiB9CiAKIHN0YXRpYyB2b2lkIHRnM19kaXNhYmxlX2ludHMoc3RydWN0IHRnMyAqdHApCkBAIC04NjIsNyArODc5LDcgQEAKIAl1bnNpZ25lZCBpbnQgbG9vcHM7CiAJaW50IHJldDsKIAotCWlmICgodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfSVNfRkVUKSAmJgorCWlmICgodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfRkVUKSAmJgogCSAgICAocmVnID09IE1JSV9URzNfQ1RSTCB8fCByZWcgPT0gTUlJX1RHM19BVVhfQ1RSTCkpCiAJCXJldHVybiAwOwogCkBAIC0xMDY5LDE0ICsxMDg2LDExIEBACiAJdTMyIHJlZzsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwogCi0JaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3KSB7Ci0JCXUzMiBmdW5jbnVtLCBpc19zZXJkZXM7CisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3IHx8CisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE5KSB7CisJCXUzMiBpc19zZXJkZXM7CiAKLQkJZnVuY251bSA9IHRyMzIoVEczX0NQTVVfU1RBVFVTKSAmIFRHM19DUE1VX1NUQVRVU19QQ0lFX0ZVTkM7Ci0JCWlmIChmdW5jbnVtKQotCQkJdHAtPnBoeV9hZGRyID0gMjsKLQkJZWxzZQotCQkJdHAtPnBoeV9hZGRyID0gMTsKKwkJdHAtPnBoeV9hZGRyID0gUENJX0ZVTkModHAtPnBkZXYtPmRldmZuKSArIDE7CiAKIAkJaWYgKHRwLT5wY2lfY2hpcF9yZXZfaWQgIT0gQ0hJUFJFVl9JRF81NzE3X0EwKQogCQkJaXNfc2VyZGVzID0gdHIzMihTR19ESUdfU1RBVFVTKSAmIFNHX0RJR19JU19TRVJERVM7CkBAIC0xMTYxLDcgKzExNzUsNyBAQAogCWNhc2UgUEhZX0lEX0JDTUFDMTMxOgogCQlwaHlkZXYtPmludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7CiAJCXBoeWRldi0+ZGV2X2ZsYWdzIHw9IFBIWV9CUkNNX0FVVE9fUFdSRFdOX0VOQUJMRTsKLQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfUEhZX0lTX0ZFVDsKKwkJdHAtPnBoeV9mbGFncyB8PSBURzNfUEhZRkxHX0lTX0ZFVDsKIAkJYnJlYWs7CiAJfQogCkBAIC0xMjU0LDcgKzEyNjgsNyBAQAogCXRnM193cml0ZV9tZW0odHAsIE5JQ19TUkFNX0ZXX0NNRF9EQVRBX01CT1ggKyA0LCB2YWwpOwogCiAJdmFsID0gMDsKLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX01JSV9TRVJERVMpKSB7CisJaWYgKCEodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfTUlJX1NFUkRFUykpIHsKIAkJaWYgKCF0ZzNfcmVhZHBoeSh0cCwgTUlJX0NUUkwxMDAwLCAmcmVnKSkKIAkJCXZhbCA9IHJlZyA8PCAxNjsKIAkJaWYgKCF0ZzNfcmVhZHBoeSh0cCwgTUlJX1NUQVQxMDAwLCAmcmVnKSkKQEAgLTEzNjIsNyArMTM3Niw3IEBACiAKIAlpZiAoYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSAmJgogCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1BBVVNFX0FVVE9ORUcpKSB7Ci0JCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0FOWV9TRVJERVMpCisJCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19BTllfU0VSREVTKQogCQkJZmxvd2N0cmwgPSB0ZzNfcmVzb2x2ZV9mbG93Y3RybF8xMDAwWChsY2xhZHYsIHJtdGFkdik7CiAJCWVsc2UKIAkJCWZsb3djdHJsID0gbWlpX3Jlc29sdmVfZmxvd2N0cmxfZmR4KGxjbGFkdiwgcm10YWR2KTsKQEAgLTE0NzYsNyArMTQ5MCw3IEBACiB7CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKIAotCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9DT05ORUNURUQpCisJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0NPTk5FQ1RFRCkKIAkJcmV0dXJuIDA7CiAKIAkvKiBCcmluZyB0aGUgUEhZIGJhY2sgdG8gYSBrbm93biBzdGF0ZS4gKi8KQEAgLTE0OTYsNyArMTUxMCw3IEBACiAJc3dpdGNoIChwaHlkZXYtPmludGVyZmFjZSkgewogCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUk6CiAJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6Ci0JCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR18xMF8xMDBfT05MWSkpIHsKKwkJaWYgKCEodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfMTBfMTAwX09OTFkpKSB7CiAJCQlwaHlkZXYtPnN1cHBvcnRlZCAmPSAoUEhZX0dCSVRfRkVBVFVSRVMgfAogCQkJCQkgICAgICBTVVBQT1JURURfUGF1c2UgfAogCQkJCQkgICAgICBTVVBQT1JURURfQXN5bV9QYXVzZSk7CkBAIC0xNTEzLDcgKzE1MjcsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19QSFlfQ09OTkVDVEVEOworCXRwLT5waHlfZmxhZ3MgfD0gVEczX1BIWUZMR19JU19DT05ORUNURUQ7CiAKIAlwaHlkZXYtPmFkdmVydGlzaW5nID0gcGh5ZGV2LT5zdXBwb3J0ZWQ7CiAKQEAgLTE1MjQsMTMgKzE1MzgsMTMgQEAKIHsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwogCi0JaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfQ09OTkVDVEVEKSkKKwlpZiAoISh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19DT05ORUNURUQpKQogCQlyZXR1cm47CiAKIAlwaHlkZXYgPSB0cC0+bWRpb19idXMtPnBoeV9tYXBbVEczX1BIWV9NSUlfQUREUl07CiAKLQlpZiAodHAtPmxpbmtfY29uZmlnLnBoeV9pc19sb3dfcG93ZXIpIHsKLQkJdHAtPmxpbmtfY29uZmlnLnBoeV9pc19sb3dfcG93ZXIgPSAwOworCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19MT1dfUE9XRVIpIHsKKwkJdHAtPnBoeV9mbGFncyAmPSB+VEczX1BIWUZMR19JU19MT1dfUE9XRVI7CiAJCXBoeWRldi0+c3BlZWQgPSB0cC0+bGlua19jb25maWcub3JpZ19zcGVlZDsKIAkJcGh5ZGV2LT5kdXBsZXggPSB0cC0+bGlua19jb25maWcub3JpZ19kdXBsZXg7CiAJCXBoeWRldi0+YXV0b25lZyA9IHRwLT5saW5rX2NvbmZpZy5vcmlnX2F1dG9uZWc7CkBAIC0xNTQ0LDcgKzE1NTgsNyBAQAogCiBzdGF0aWMgdm9pZCB0ZzNfcGh5X3N0b3Aoc3RydWN0IHRnMyAqdHApCiB7Ci0JaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfQ09OTkVDVEVEKSkKKwlpZiAoISh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19DT05ORUNURUQpKQogCQlyZXR1cm47CiAKIAlwaHlfc3RvcCh0cC0+bWRpb19idXMtPnBoeV9tYXBbVEczX1BIWV9NSUlfQUREUl0pOwpAQCAtMTU1MiwxNiArMTU2NiwyMSBAQAogCiBzdGF0aWMgdm9pZCB0ZzNfcGh5X2Zpbmkoc3RydWN0IHRnMyAqdHApCiB7Ci0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUEhZX0NPTk5FQ1RFRCkgeworCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19DT05ORUNURUQpIHsKIAkJcGh5X2Rpc2Nvbm5lY3QodHAtPm1kaW9fYnVzLT5waHlfbWFwW1RHM19QSFlfTUlJX0FERFJdKTsKLQkJdHAtPnRnM19mbGFnczMgJj0gflRHM19GTEczX1BIWV9DT05ORUNURUQ7CisJCXRwLT5waHlfZmxhZ3MgJj0gflRHM19QSFlGTEdfSVNfQ09OTkVDVEVEOwogCX0KIH0KIAotc3RhdGljIHZvaWQgdGczX3BoeWRzcF93cml0ZShzdHJ1Y3QgdGczICp0cCwgdTMyIHJlZywgdTMyIHZhbCkKK3N0YXRpYyBpbnQgdGczX3BoeWRzcF93cml0ZShzdHJ1Y3QgdGczICp0cCwgdTMyIHJlZywgdTMyIHZhbCkKIHsKLQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRFNQX0FERFJFU1MsIHJlZyk7Ci0JdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9SV19QT1JULCB2YWwpOworCWludCBlcnI7CisKKwllcnIgPSB0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRFNQX0FERFJFU1MsIHJlZyk7CisJaWYgKCFlcnIpCisJCWVyciA9IHRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfUldfUE9SVCwgdmFsKTsKKworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIHRnM19waHlfZmV0X3RvZ2dsZV9hcGQoc3RydWN0IHRnMyAqdHAsIGJvb2wgZW5hYmxlKQpAQCAtMTU4OSwxMSArMTYwOCwxMiBAQAogCXUzMiByZWc7CiAKIAlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykgfHwKLQkJKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3ICYmCi0JICAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9NSUlfU0VSREVTKSkpCisJICAgICgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcgfHwKKwkgICAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxOSkgJiYKKwkgICAgICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19NSUlfU0VSREVTKSkpCiAJCXJldHVybjsKIAotCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9JU19GRVQpIHsKKwlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfRkVUKSB7CiAJCXRnM19waHlfZmV0X3RvZ2dsZV9hcGQodHAsIGVuYWJsZSk7CiAJCXJldHVybjsKIAl9CkBAIC0xNjI0LDEwICsxNjQ0LDEwIEBACiAJdTMyIHBoeTsKIAogCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSB8fAotCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9BTllfU0VSREVTKSkKKwkgICAgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0FOWV9TRVJERVMpKQogCQlyZXR1cm47CiAKLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfSVNfRkVUKSB7CisJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0ZFVCkgewogCQl1MzIgZXBoeTsKIAogCQlpZiAoIXRnM19yZWFkcGh5KHRwLCBNSUlfVEczX0ZFVF9URVNULCAmZXBoeSkpIHsKQEAgLTE2NjMsNyArMTY4Myw3IEBACiB7CiAJdTMyIHZhbDsKIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX05PX0VUSF9XSVJFX1NQRUVEKQorCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19OT19FVEhfV0lSRV9TUEVFRCkKIAkJcmV0dXJuOwogCiAJaWYgKCF0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIDB4NzAwNykgJiYKQEAgLTE3MjIsNyArMTc0Miw3IEBACiAJd2hpbGUgKGxpbWl0LS0pIHsKIAkJdTMyIHRtcDMyOwogCi0JCWlmICghdGczX3JlYWRwaHkodHAsIDB4MTYsICZ0bXAzMikpIHsKKwkJaWYgKCF0ZzNfcmVhZHBoeSh0cCwgTUlJX1RHM19EU1BfQ09OVFJPTCwgJnRtcDMyKSkgewogCQkJaWYgKCh0bXAzMiAmIDB4MTAwMCkgPT0gMCkKIAkJCQlicmVhazsKIAkJfQpAQCAtMTc0OCwxMyArMTc2OCwxMyBAQAogCiAJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfQUREUkVTUywKIAkJCSAgICAgKGNoYW4gKiAweDIwMDApIHwgMHgwMjAwKTsKLQkJdGczX3dyaXRlcGh5KHRwLCAweDE2LCAweDAwMDIpOworCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRFNQX0NPTlRST0wsIDB4MDAwMik7CiAKIAkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKIAkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfUldfUE9SVCwKIAkJCQkgICAgIHRlc3RfcGF0W2NoYW5dW2ldKTsKIAotCQl0ZzNfd3JpdGVwaHkodHAsIDB4MTYsIDB4MDIwMik7CisJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfQ09OVFJPTCwgMHgwMjAyKTsKIAkJaWYgKHRnM193YWl0X21hY3JvX2RvbmUodHApKSB7CiAJCQkqcmVzZXRwID0gMTsKIAkJCXJldHVybiAtRUJVU1k7CkBAIC0xNzYyLDEzICsxNzgyLDEzIEBACiAKIAkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9BRERSRVNTLAogCQkJICAgICAoY2hhbiAqIDB4MjAwMCkgfCAweDAyMDApOwotCQl0ZzNfd3JpdGVwaHkodHAsIDB4MTYsIDB4MDA4Mik7CisJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfQ09OVFJPTCwgMHgwMDgyKTsKIAkJaWYgKHRnM193YWl0X21hY3JvX2RvbmUodHApKSB7CiAJCQkqcmVzZXRwID0gMTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAotCQl0ZzNfd3JpdGVwaHkodHAsIDB4MTYsIDB4MDgwMik7CisJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfQ09OVFJPTCwgMHgwODAyKTsKIAkJaWYgKHRnM193YWl0X21hY3JvX2RvbmUodHApKSB7CiAJCQkqcmVzZXRwID0gMTsKIAkJCXJldHVybiAtRUJVU1k7CkBAIC0xODA4LDEwICsxODI4LDEwIEBACiAKIAkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9BRERSRVNTLAogCQkJICAgICAoY2hhbiAqIDB4MjAwMCkgfCAweDAyMDApOwotCQl0ZzNfd3JpdGVwaHkodHAsIDB4MTYsIDB4MDAwMik7CisJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfQ09OVFJPTCwgMHgwMDAyKTsKIAkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKIAkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfUldfUE9SVCwgMHgwMDApOwotCQl0ZzNfd3JpdGVwaHkodHAsIDB4MTYsIDB4MDIwMik7CisJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfQ09OVFJPTCwgMHgwMjAyKTsKIAkJaWYgKHRnM193YWl0X21hY3JvX2RvbmUodHApKQogCQkJcmV0dXJuIC1FQlVTWTsKIAl9CkBAIC0xODU3LDggKzE4NzcsNyBAQAogCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIDB4MGMwMCk7CiAKIAkJLyogQmxvY2sgdGhlIFBIWSBjb250cm9sIGFjY2Vzcy4gICovCi0JCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfQUREUkVTUywgMHg4MDA1KTsKLQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9SV19QT1JULCAweDA4MDApOworCQl0ZzNfcGh5ZHNwX3dyaXRlKHRwLCAweDgwMDUsIDB4MDgwMCk7CiAKIAkJZXJyID0gdGczX3BoeV93cml0ZV9hbmRfY2hlY2tfdGVzdHBhdCh0cCwgJmRvX3BoeV9yZXNldCk7CiAJCWlmICghZXJyKQpAQCAtMTg2OSwxMSArMTg4OCwxMCBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRFNQX0FERFJFU1MsIDB4ODAwNSk7Ci0JdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9SV19QT1JULCAweDAwMDApOworCXRnM19waHlkc3Bfd3JpdGUodHAsIDB4ODAwNSwgMHgwMDAwKTsKIAogCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfQUREUkVTUywgMHg4MjAwKTsKLQl0ZzNfd3JpdGVwaHkodHAsIDB4MTYsIDB4MDAwMCk7CisJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9DT05UUk9MLCAweDAwMDApOwogCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAzIHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzA0KSB7CkBAIC0xOTY0LDQzICsxOTgyLDM5IEBACiAJCX0KIAl9CiAKLQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcgJiYKLQkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfTUlJX1NFUkRFUykpCisJaWYgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyB8fAorCSAgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTkpICYmCisJICAgICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19NSUlfU0VSREVTKSkKIAkJcmV0dXJuIDA7CiAKIAl0ZzNfcGh5X2FwcGx5X290cCh0cCk7CiAKLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfRU5BQkxFX0FQRCkKKwlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfRU5BQkxFX0FQRCkKIAkJdGczX3BoeV90b2dnbGVfYXBkKHRwLCB0cnVlKTsKIAllbHNlCiAJCXRnM19waHlfdG9nZ2xlX2FwZCh0cCwgZmFsc2UpOwogCiBvdXQ6Ci0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUEhZX0FEQ19CVUcpIHsKKwlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfQURDX0JVRykgewogCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIDB4MGMwMCk7Ci0JCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfQUREUkVTUywgMHgyMDFmKTsKLQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9SV19QT1JULCAweDJhYWEpOwotCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRFNQX0FERFJFU1MsIDB4MDAwYSk7Ci0JCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfUldfUE9SVCwgMHgwMzIzKTsKKwkJdGczX3BoeWRzcF93cml0ZSh0cCwgMHgyMDFmLCAweDJhYWEpOworCQl0ZzNfcGh5ZHNwX3dyaXRlKHRwLCAweDAwMGEsIDB4MDMyMyk7CiAJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgMHgwNDAwKTsKIAl9Ci0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUEhZXzU3MDRfQTBfQlVHKSB7Ci0JCXRnM193cml0ZXBoeSh0cCwgMHgxYywgMHg4ZDY4KTsKLQkJdGczX3dyaXRlcGh5KHRwLCAweDFjLCAweDhkNjgpOworCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR181NzA0X0EwX0JVRykgeworCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfTUlTQ19TSERXLCAweDhkNjgpOworCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfTUlTQ19TSERXLCAweDhkNjgpOwogCX0KLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QSFlfQkVSX0JVRykgeworCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19CRVJfQlVHKSB7CiAJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgMHgwYzAwKTsKLQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9BRERSRVNTLCAweDAwMGEpOwotCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRFNQX1JXX1BPUlQsIDB4MzEwYik7Ci0JCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfQUREUkVTUywgMHgyMDFmKTsKLQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9SV19QT1JULCAweDk1MDYpOwotCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRFNQX0FERFJFU1MsIDB4NDAxZik7Ci0JCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfUldfUE9SVCwgMHgxNGUyKTsKKwkJdGczX3BoeWRzcF93cml0ZSh0cCwgMHgwMDBhLCAweDMxMGIpOworCQl0ZzNfcGh5ZHNwX3dyaXRlKHRwLCAweDIwMWYsIDB4OTUwNik7CisJCXRnM19waHlkc3Bfd3JpdGUodHAsIDB4NDAxZiwgMHgxNGUyKTsKIAkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCAweDA0MDApOwotCX0gZWxzZSBpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QSFlfSklUVEVSX0JVRykgeworCX0gZWxzZSBpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSklUVEVSX0JVRykgewogCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIDB4MGMwMCk7CiAJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfQUREUkVTUywgMHgwMDBhKTsKLQkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUEhZX0FESlVTVF9UUklNKSB7CisJCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19BREpVU1RfVFJJTSkgewogCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9SV19QT1JULCAweDExMGIpOwogCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX1RFU1QxLAogCQkJCSAgICAgTUlJX1RHM19URVNUMV9UUklNX0VOIHwgMHg0KTsKQEAgLTIwNDksNiArMjA2Myw3IEBACiAKIAkvKiBUaGUgR1BJT3MgZG8gc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50IG9uIDU3NzY1LiAqLwogCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9JU19OSUMpID09IDAgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTkgfHwKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzY1KQogCQlyZXR1cm47CiAKQEAgLTIxODQsNyArMjE5OSw3IEBACiB7CiAJdTMyIHZhbDsKIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BIWV9TRVJERVMpIHsKKwlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfUEhZX1NFUkRFUykgewogCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDQpIHsKIAkJCXUzMiBzZ19kaWdfY3RybCA9IHRyMzIoU0dfRElHX0NUUkwpOwogCQkJdTMyIHNlcmRlc19jZmcgPSB0cjMyKE1BQ19TRVJERVNfQ0ZHKTsKQEAgLTIyMDMsNyArMjIxOCw3IEBACiAJCXR3MzJfZihHUkNfTUlTQ19DRkcsIHZhbCB8IEdSQ19NSVNDX0NGR19FUEhZX0lERFEpOwogCQl1ZGVsYXkoNDApOwogCQlyZXR1cm47Ci0JfSBlbHNlIGlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9JU19GRVQpIHsKKwl9IGVsc2UgaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0ZFVCkgewogCQl1MzIgcGh5dGVzdDsKIAkJaWYgKCF0ZzNfcmVhZHBoeSh0cCwgTUlJX1RHM19GRVRfVEVTVCwgJnBoeXRlc3QpKSB7CiAJCQl1MzIgcGh5OwpAQCAtMjI0MCw3ICsyMjU1LDcgQEAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDAgfHwKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDQgfHwKIAkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzgwICYmCi0JICAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9NSUlfU0VSREVTKSkpCisJICAgICAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfTUlJX1NFUkRFUykpKQogCQlyZXR1cm47CiAKIAlpZiAoR0VUX0NISVBfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IENISVBSRVZfNTc4NF9BWCB8fApAQCAtMjU0MywxNCArMjU1OCwxNCBAQAogCiAJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfVVNFX1BIWUxJQikgewogCQlkb19sb3dfcG93ZXIgPSBmYWxzZTsKLQkJaWYgKCh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9DT05ORUNURUQpICYmCi0JCSAgICAhdHAtPmxpbmtfY29uZmlnLnBoeV9pc19sb3dfcG93ZXIpIHsKKwkJaWYgKCh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19DT05ORUNURUQpICYmCisJCSAgICAhKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0xPV19QT1dFUikpIHsKIAkJCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CiAJCQl1MzIgcGh5aWQsIGFkdmVydGlzaW5nOwogCiAJCQlwaHlkZXYgPSB0cC0+bWRpb19idXMtPnBoeV9tYXBbVEczX1BIWV9NSUlfQUREUl07CiAKLQkJCXRwLT5saW5rX2NvbmZpZy5waHlfaXNfbG93X3Bvd2VyID0gMTsKKwkJCXRwLT5waHlfZmxhZ3MgfD0gVEczX1BIWUZMR19JU19MT1dfUE9XRVI7CiAKIAkJCXRwLT5saW5rX2NvbmZpZy5vcmlnX3NwZWVkID0gcGh5ZGV2LT5zcGVlZDsKIAkJCXRwLT5saW5rX2NvbmZpZy5vcmlnX2R1cGxleCA9IHBoeWRldi0+ZHVwbGV4OwpAQCAtMjU4OSwxNCArMjYwNCwxNCBAQAogCX0gZWxzZSB7CiAJCWRvX2xvd19wb3dlciA9IHRydWU7CiAKLQkJaWYgKHRwLT5saW5rX2NvbmZpZy5waHlfaXNfbG93X3Bvd2VyID09IDApIHsKLQkJCXRwLT5saW5rX2NvbmZpZy5waHlfaXNfbG93X3Bvd2VyID0gMTsKKwkJaWYgKCEodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfTE9XX1BPV0VSKSkgeworCQkJdHAtPnBoeV9mbGFncyB8PSBURzNfUEhZRkxHX0lTX0xPV19QT1dFUjsKIAkJCXRwLT5saW5rX2NvbmZpZy5vcmlnX3NwZWVkID0gdHAtPmxpbmtfY29uZmlnLnNwZWVkOwogCQkJdHAtPmxpbmtfY29uZmlnLm9yaWdfZHVwbGV4ID0gdHAtPmxpbmtfY29uZmlnLmR1cGxleDsKIAkJCXRwLT5saW5rX2NvbmZpZy5vcmlnX2F1dG9uZWcgPSB0cC0+bGlua19jb25maWcuYXV0b25lZzsKIAkJfQogCi0JCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfQU5ZX1NFUkRFUykpIHsKKwkJaWYgKCEodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfQU5ZX1NFUkRFUykpIHsKIAkJCXRwLT5saW5rX2NvbmZpZy5zcGVlZCA9IFNQRUVEXzEwOwogCQkJdHAtPmxpbmtfY29uZmlnLmR1cGxleCA9IERVUExFWF9IQUxGOwogCQkJdHAtPmxpbmtfY29uZmlnLmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKQEAgLTI2MjksMTMgKzI2NDQsMTMgQEAKIAlpZiAoZGV2aWNlX3Nob3VsZF93YWtlKSB7CiAJCXUzMiBtYWNfbW9kZTsKIAotCQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BIWV9TRVJERVMpKSB7CisJCWlmICghKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX1BIWV9TRVJERVMpKSB7CiAJCQlpZiAoZG9fbG93X3Bvd2VyKSB7CiAJCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCAweDVhKTsKIAkJCQl1ZGVsYXkoNDApOwogCQkJfQogCi0JCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9NSUlfU0VSREVTKQorCQkJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX01JSV9TRVJERVMpCiAJCQkJbWFjX21vZGUgPSBNQUNfTU9ERV9QT1JUX01PREVfR01JSTsKIAkJCWVsc2UKIAkJCQltYWNfbW9kZSA9IE1BQ19NT0RFX1BPUlRfTU9ERV9NSUk7CkBAIC0yODAzLDcgKzI4MTgsNyBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9JU19GRVQpIHsKKwkJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0ZFVCkgewogCQkJKnNwZWVkID0gKHZhbCAmIE1JSV9URzNfQVVYX1NUQVRfMTAwKSA/IFNQRUVEXzEwMCA6CiAJCQkJIFNQRUVEXzEwOwogCQkJKmR1cGxleCA9ICh2YWwgJiBNSUlfVEczX0FVWF9TVEFUX0ZVTEwpID8gRFVQTEVYX0ZVTEwgOgpAQCAtMjgyMSw3ICsyODM2LDcgQEAKIAl1MzIgbmV3X2FkdjsKIAlpbnQgaTsKIAotCWlmICh0cC0+bGlua19jb25maWcucGh5X2lzX2xvd19wb3dlcikgeworCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19MT1dfUE9XRVIpIHsKIAkJLyogRW50ZXJpbmcgbG93IHBvd2VyIG1vZGUuICBEaXNhYmxlIGdpZ2FiaXQgYW5kCiAJCSAqIDEwMGJhc2VUIGFkdmVydGlzZW1lbnRzLgogCQkgKi8KQEAgLTI4MzQsNyArMjg0OSw3IEBACiAKIAkJdGczX3dyaXRlcGh5KHRwLCBNSUlfQURWRVJUSVNFLCBuZXdfYWR2KTsKIAl9IGVsc2UgaWYgKHRwLT5saW5rX2NvbmZpZy5zcGVlZCA9PSBTUEVFRF9JTlZBTElEKSB7Ci0JCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfMTBfMTAwX09OTFkpCisJCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR18xMF8xMDBfT05MWSkKIAkJCXRwLT5saW5rX2NvbmZpZy5hZHZlcnRpc2luZyAmPQogCQkJCX4oQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZiB8CiAJCQkJICBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsKTsKQEAgLTI4NjAsNyArMjg3NSw3IEBACiAJCQkJbmV3X2FkdiB8PSBNSUlfVEczX0NUUkxfQURWXzEwMDBfSEFMRjsKIAkJCWlmICh0cC0+bGlua19jb25maWcuYWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsKQogCQkJCW5ld19hZHYgfD0gTUlJX1RHM19DVFJMX0FEVl8xMDAwX0ZVTEw7Ci0JCQlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfMTBfMTAwX09OTFkpICYmCisJCQlpZiAoISh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR18xMF8xMDBfT05MWSkgJiYKIAkJCSAgICAodHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MDFfQTAgfHwKIAkJCSAgICAgdHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MDFfQjApKQogCQkJCW5ld19hZHYgfD0gKE1JSV9URzNfQ1RSTF9BU19NQVNURVIgfApAQCAtMjk2MiwyMCArMjk3NywxMSBAQAogCS8qIFNldCBFeHRlbmRlZCBwYWNrZXQgbGVuZ3RoIGJpdCAqLwogCWVyciAgPSB0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIDB4NGMyMCk7CiAKLQllcnIgfD0gdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9BRERSRVNTLCAweDAwMTIpOwotCWVyciB8PSB0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRFNQX1JXX1BPUlQsIDB4MTgwNCk7Ci0KLQllcnIgfD0gdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9BRERSRVNTLCAweDAwMTMpOwotCWVyciB8PSB0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRFNQX1JXX1BPUlQsIDB4MTIwNCk7Ci0KLQllcnIgfD0gdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9BRERSRVNTLCAweDgwMDYpOwotCWVyciB8PSB0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRFNQX1JXX1BPUlQsIDB4MDEzMik7Ci0KLQllcnIgfD0gdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9BRERSRVNTLCAweDgwMDYpOwotCWVyciB8PSB0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRFNQX1JXX1BPUlQsIDB4MDIzMik7Ci0KLQllcnIgfD0gdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9BRERSRVNTLCAweDIwMWYpOwotCWVyciB8PSB0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRFNQX1JXX1BPUlQsIDB4MGEyMCk7CisJZXJyIHw9IHRnM19waHlkc3Bfd3JpdGUodHAsIDB4MDAxMiwgMHgxODA0KTsKKwllcnIgfD0gdGczX3BoeWRzcF93cml0ZSh0cCwgMHgwMDEzLCAweDEyMDQpOworCWVyciB8PSB0ZzNfcGh5ZHNwX3dyaXRlKHRwLCAweDgwMDYsIDB4MDEzMik7CisJZXJyIHw9IHRnM19waHlkc3Bfd3JpdGUodHAsIDB4ODAwNiwgMHgwMjMyKTsKKwllcnIgfD0gdGczX3BoeWRzcF93cml0ZSh0cCwgMHgyMDFmLCAweDBhMjApOwogCiAJdWRlbGF5KDQwKTsKIApAQCAtMzAwMCw3ICszMDA2LDcgQEAKIAogCWlmICgoYWR2X3JlZyAmIGFsbF9tYXNrKSAhPSBhbGxfbWFzaykKIAkJcmV0dXJuIDA7Ci0JaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHXzEwXzEwMF9PTkxZKSkgeworCWlmICghKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHXzEwXzEwMF9PTkxZKSkgewogCQl1MzIgdGczX2N0cmw7CiAKIAkJYWxsX21hc2sgPSAwOwpAQCAtMzEyOCwxOCArMzEzNCwxOCBAQAogCQkgICB0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTcwMV9CMCkgewogCQkvKiA1NzAxIHtBMCxCMH0gQ1JDIGJ1ZyB3b3JrYXJvdW5kICovCiAJCXRnM193cml0ZXBoeSh0cCwgMHgxNSwgMHgwYTc1KTsKLQkJdGczX3dyaXRlcGh5KHRwLCAweDFjLCAweDhjNjgpOwotCQl0ZzNfd3JpdGVwaHkodHAsIDB4MWMsIDB4OGQ2OCk7Ci0JCXRnM193cml0ZXBoeSh0cCwgMHgxYywgMHg4YzY4KTsKKwkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX01JU0NfU0hEVywgMHg4YzY4KTsKKwkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX01JU0NfU0hEVywgMHg4ZDY4KTsKKwkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX01JU0NfU0hEVywgMHg4YzY4KTsKIAl9CiAKIAkvKiBDbGVhciBwZW5kaW5nIGludGVycnVwdHMuLi4gKi8KIAl0ZzNfcmVhZHBoeSh0cCwgTUlJX1RHM19JU1RBVCwgJmR1bW15KTsKIAl0ZzNfcmVhZHBoeSh0cCwgTUlJX1RHM19JU1RBVCwgJmR1bW15KTsKIAotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVVNFX01JX0lOVEVSUlVQVCkKKwlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfVVNFX01JX0lOVEVSUlVQVCkKIAkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0lNQVNLLCB+TUlJX1RHM19JTlRfTElOS0NIRyk7Ci0JZWxzZSBpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9JU19GRVQpKQorCWVsc2UgaWYgKCEodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfRkVUKSkKIAkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0lNQVNLLCB+MCk7CiAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDAgfHwKQEAgLTMxNTUsNyArMzE2MSw3IEBACiAJY3VycmVudF9zcGVlZCA9IFNQRUVEX0lOVkFMSUQ7CiAJY3VycmVudF9kdXBsZXggPSBEVVBMRVhfSU5WQUxJRDsKIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0NBUEFDSVRJVkVfQ09VUExJTkcpIHsKKwlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfQ0FQQUNJVElWRV9DT1VQTElORykgewogCQl1MzIgdmFsOwogCiAJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgMHg0MDA3KTsKQEAgLTMyMzEsNyArMzIzNyw3IEBACiAJfQogCiByZWxpbms6Ci0JaWYgKGN1cnJlbnRfbGlua191cCA9PSAwIHx8IHRwLT5saW5rX2NvbmZpZy5waHlfaXNfbG93X3Bvd2VyKSB7CisJaWYgKGN1cnJlbnRfbGlua191cCA9PSAwIHx8ICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19MT1dfUE9XRVIpKSB7CiAJCXUzMiB0bXA7CiAKIAkJdGczX3BoeV9jb3BwZXJfYmVnaW4odHApOwpAQCAtMzI0OSw3ICszMjU1LDcgQEAKIAkJCXRwLT5tYWNfbW9kZSB8PSBNQUNfTU9ERV9QT1JUX01PREVfTUlJOwogCQllbHNlCiAJCQl0cC0+bWFjX21vZGUgfD0gTUFDX01PREVfUE9SVF9NT0RFX0dNSUk7Ci0JfSBlbHNlIGlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9JU19GRVQpCisJfSBlbHNlIGlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19GRVQpCiAJCXRwLT5tYWNfbW9kZSB8PSBNQUNfTU9ERV9QT1JUX01PREVfTUlJOwogCWVsc2UKIAkJdHAtPm1hY19tb2RlIHw9IE1BQ19NT0RFX1BPUlRfTU9ERV9HTUlJOwpAQCAtMzgwMCw3ICszODA2LDcgQEAKIAkJZXhwZWN0ZWRfc2dfZGlnX2N0cmwgfD0gU0dfRElHX0FTWU1fUEFVU0U7CiAKIAlpZiAoc2dfZGlnX2N0cmwgIT0gZXhwZWN0ZWRfc2dfZGlnX2N0cmwpIHsKLQkJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BBUkFMTEVMX0RFVEVDVCkgJiYKKwkJaWYgKCh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19QQVJBTExFTF9ERVRFQ1QpICYmCiAJCSAgICB0cC0+c2VyZGVzX2NvdW50ZXIgJiYKIAkJICAgICgobWFjX3N0YXR1cyAmIChNQUNfU1RBVFVTX1BDU19TWU5DRUQgfAogCQkJCSAgICBNQUNfU1RBVFVTX1JDVkRfQ0ZHKSkgPT0KQEAgLTM4MTcsNyArMzgyMyw3IEBACiAJCXR3MzJfZihTR19ESUdfQ1RSTCwgZXhwZWN0ZWRfc2dfZGlnX2N0cmwpOwogCiAJCXRwLT5zZXJkZXNfY291bnRlciA9IFNFUkRFU19BTl9USU1FT1VUXzU3MDRTOwotCQl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfUEFSQUxMRUxfREVURUNUOworCQl0cC0+cGh5X2ZsYWdzICY9IH5URzNfUEhZRkxHX1BBUkFMTEVMX0RFVEVDVDsKIAl9IGVsc2UgaWYgKG1hY19zdGF0dXMgJiAoTUFDX1NUQVRVU19QQ1NfU1lOQ0VEIHwKIAkJCQkgTUFDX1NUQVRVU19TSUdOQUxfREVUKSkgewogCQlzZ19kaWdfc3RhdHVzID0gdHIzMihTR19ESUdfU1RBVFVTKTsKQEAgLTM4NDAsNyArMzg0Niw3IEBACiAJCQl0ZzNfc2V0dXBfZmxvd19jb250cm9sKHRwLCBsb2NhbF9hZHYsIHJlbW90ZV9hZHYpOwogCQkJY3VycmVudF9saW5rX3VwID0gMTsKIAkJCXRwLT5zZXJkZXNfY291bnRlciA9IDA7Ci0JCQl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfUEFSQUxMRUxfREVURUNUOworCQkJdHAtPnBoeV9mbGFncyAmPSB+VEczX1BIWUZMR19QQVJBTExFTF9ERVRFQ1Q7CiAJCX0gZWxzZSBpZiAoIShzZ19kaWdfc3RhdHVzICYgU0dfRElHX0FVVE9ORUdfQ09NUExFVEUpKSB7CiAJCQlpZiAodHAtPnNlcmRlc19jb3VudGVyKQogCQkJCXRwLT5zZXJkZXNfY291bnRlci0tOwpAQCAtMzg2Nyw4ICszODczLDggQEAKIAkJCQkgICAgIShtYWNfc3RhdHVzICYgTUFDX1NUQVRVU19SQ1ZEX0NGRykpIHsKIAkJCQkJdGczX3NldHVwX2Zsb3dfY29udHJvbCh0cCwgMCwgMCk7CiAJCQkJCWN1cnJlbnRfbGlua191cCA9IDE7Ci0JCQkJCXRwLT50ZzNfZmxhZ3MyIHw9Ci0JCQkJCQlURzNfRkxHMl9QQVJBTExFTF9ERVRFQ1Q7CisJCQkJCXRwLT5waHlfZmxhZ3MgfD0KKwkJCQkJCVRHM19QSFlGTEdfUEFSQUxMRUxfREVURUNUOwogCQkJCQl0cC0+c2VyZGVzX2NvdW50ZXIgPQogCQkJCQkJU0VSREVTX1BBUkFMTEVMX0RFVF9USU1FT1VUOwogCQkJCX0gZWxzZQpAQCAtMzg3Nyw3ICszODgzLDcgQEAKIAkJfQogCX0gZWxzZSB7CiAJCXRwLT5zZXJkZXNfY291bnRlciA9IFNFUkRFU19BTl9USU1FT1VUXzU3MDRTOwotCQl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfUEFSQUxMRUxfREVURUNUOworCQl0cC0+cGh5X2ZsYWdzICY9IH5URzNfUEhZRkxHX1BBUkFMTEVMX0RFVEVDVDsKIAl9CiAKIG91dDoKQEAgLTQwOTQsNyArNDEwMCw3IEBACiAJZXJyIHw9IHRnM19yZWFkcGh5KHRwLCBNSUlfQk1DUiwgJmJtY3IpOwogCiAJaWYgKCh0cC0+bGlua19jb25maWcuYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgJiYgIWZvcmNlX3Jlc2V0ICYmCi0JICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BBUkFMTEVMX0RFVEVDVCkpIHsKKwkgICAgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX1BBUkFMTEVMX0RFVEVDVCkpIHsKIAkJLyogZG8gbm90aGluZywganVzdCBjaGVjayBmb3IgbGluayB1cCBhdCB0aGUgZW5kICovCiAJfSBlbHNlIGlmICh0cC0+bGlua19jb25maWcuYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgewogCQl1MzIgYWR2LCBuZXdfYWR2OwpAQCAtNDExOSw3ICs0MTI1LDcgQEAKIAogCQkJdHczMl9mKE1BQ19FVkVOVCwgTUFDX0VWRU5UX0xOS1NUQVRFX0NIQU5HRUQpOwogCQkJdHAtPnNlcmRlc19jb3VudGVyID0gU0VSREVTX0FOX1RJTUVPVVRfNTcxNFM7Ci0JCQl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfUEFSQUxMRUxfREVURUNUOworCQkJdHAtPnBoeV9mbGFncyAmPSB+VEczX1BIWUZMR19QQVJBTExFTF9ERVRFQ1Q7CiAKIAkJCXJldHVybiBlcnI7CiAJCX0KQEAgLTQxNjQsNyArNDE3MCw3IEBACiAJCQkJZWxzZQogCQkJCQlibXNyICY9IH5CTVNSX0xTVEFUVVM7CiAJCQl9Ci0JCQl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfUEFSQUxMRUxfREVURUNUOworCQkJdHAtPnBoeV9mbGFncyAmPSB+VEczX1BIWUZMR19QQVJBTExFTF9ERVRFQ1Q7CiAJCX0KIAl9CiAKQEAgLTQxOTEsNiArNDE5Nyw4IEBACiAJCQkJCWN1cnJlbnRfZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJCQkJZWxzZQogCQkJCQljdXJyZW50X2R1cGxleCA9IERVUExFWF9IQUxGOworCQkJfSBlbHNlIGlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykpIHsKKwkJCQkvKiBMaW5rIGlzIHVwIHZpYSBwYXJhbGxlbCBkZXRlY3QgKi8KIAkJCX0gZWxzZSB7CiAJCQkJY3VycmVudF9saW5rX3VwID0gMDsKIAkJCX0KQEAgLTQyMTcsNyArNDIyNSw3IEBACiAJCQluZXRpZl9jYXJyaWVyX29uKHRwLT5kZXYpOwogCQllbHNlIHsKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKHRwLT5kZXYpOwotCQkJdHAtPnRnM19mbGFnczIgJj0gflRHM19GTEcyX1BBUkFMTEVMX0RFVEVDVDsKKwkJCXRwLT5waHlfZmxhZ3MgJj0gflRHM19QSFlGTEdfUEFSQUxMRUxfREVURUNUOwogCQl9CiAJCXRnM19saW5rX3JlcG9ydCh0cCk7CiAJfQpAQCAtNDI0MSwxMyArNDI0OSwxNCBAQAogCQkJdTMyIHBoeTEsIHBoeTI7CiAKIAkJCS8qIFNlbGVjdCBzaGFkb3cgcmVnaXN0ZXIgMHgxZiAqLwotCQkJdGczX3dyaXRlcGh5KHRwLCAweDFjLCAweDdjMDApOwotCQkJdGczX3JlYWRwaHkodHAsIDB4MWMsICZwaHkxKTsKKwkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19NSVNDX1NIRFcsIDB4N2MwMCk7CisJCQl0ZzNfcmVhZHBoeSh0cCwgTUlJX1RHM19NSVNDX1NIRFcsICZwaHkxKTsKIAogCQkJLyogU2VsZWN0IGV4cGFuc2lvbiBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCi0JCQl0ZzNfd3JpdGVwaHkodHAsIDB4MTcsIDB4MGYwMSk7Ci0JCQl0ZzNfcmVhZHBoeSh0cCwgMHgxNSwgJnBoeTIpOwotCQkJdGczX3JlYWRwaHkodHAsIDB4MTUsICZwaHkyKTsKKwkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfQUREUkVTUywKKwkJCQkJIE1JSV9URzNfRFNQX0VYUDFfSU5UX1NUQVQpOworCQkJdGczX3JlYWRwaHkodHAsIE1JSV9URzNfRFNQX1JXX1BPUlQsICZwaHkyKTsKKwkJCXRnM19yZWFkcGh5KHRwLCBNSUlfVEczX0RTUF9SV19QT1JULCAmcGh5Mik7CiAKIAkJCWlmICgocGh5MSAmIDB4MTApICYmICEocGh5MiAmIDB4MjApKSB7CiAJCQkJLyogV2UgaGF2ZSBzaWduYWwgZGV0ZWN0IGFuZCBub3QgcmVjZWl2aW5nCkBAIC00MjU4LDE3ICs0MjY3LDE4IEBACiAJCQkJYm1jciAmPSB+Qk1DUl9BTkVOQUJMRTsKIAkJCQlibWNyIHw9IEJNQ1JfU1BFRUQxMDAwIHwgQk1DUl9GVUxMRFBMWDsKIAkJCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9CTUNSLCBibWNyKTsKLQkJCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9QQVJBTExFTF9ERVRFQ1Q7CisJCQkJdHAtPnBoeV9mbGFncyB8PSBURzNfUEhZRkxHX1BBUkFMTEVMX0RFVEVDVDsKIAkJCX0KIAkJfQogCX0gZWxzZSBpZiAobmV0aWZfY2Fycmllcl9vayh0cC0+ZGV2KSAmJgogCQkgICAodHAtPmxpbmtfY29uZmlnLmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpICYmCi0JCSAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BBUkFMTEVMX0RFVEVDVCkpIHsKKwkJICAgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX1BBUkFMTEVMX0RFVEVDVCkpIHsKIAkJdTMyIHBoeTI7CiAKIAkJLyogU2VsZWN0IGV4cGFuc2lvbiBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCi0JCXRnM193cml0ZXBoeSh0cCwgMHgxNywgMHgwZjAxKTsKLQkJdGczX3JlYWRwaHkodHAsIDB4MTUsICZwaHkyKTsKKwkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9BRERSRVNTLAorCQkJCSBNSUlfVEczX0RTUF9FWFAxX0lOVF9TVEFUKTsKKwkJdGczX3JlYWRwaHkodHAsIE1JSV9URzNfRFNQX1JXX1BPUlQsICZwaHkyKTsKIAkJaWYgKHBoeTIgJiAweDIwKSB7CiAJCQl1MzIgYm1jcjsKIApAQCAtNDI3Niw3ICs0Mjg2LDcgQEAKIAkJCXRnM19yZWFkcGh5KHRwLCBNSUlfQk1DUiwgJmJtY3IpOwogCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfQk1DUiwgYm1jciB8IEJNQ1JfQU5FTkFCTEUpOwogCi0JCQl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfUEFSQUxMRUxfREVURUNUOworCQkJdHAtPnBoeV9mbGFncyAmPSB+VEczX1BIWUZMR19QQVJBTExFTF9ERVRFQ1Q7CiAKIAkJfQogCX0KQEAgLTQyODYsOSArNDI5Niw5IEBACiB7CiAJaW50IGVycjsKIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BIWV9TRVJERVMpCisJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX1BIWV9TRVJERVMpCiAJCWVyciA9IHRnM19zZXR1cF9maWJlcl9waHkodHAsIGZvcmNlX3Jlc2V0KTsKLQllbHNlIGlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX01JSV9TRVJERVMpCisJZWxzZSBpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfTUlJX1NFUkRFUykKIAkJZXJyID0gdGczX3NldHVwX2ZpYmVyX21paV9waHkodHAsIGZvcmNlX3Jlc2V0KTsKIAllbHNlCiAJCWVyciA9IHRnM19zZXR1cF9jb3BwZXJfcGh5KHRwLCBmb3JjZV9yZXNldCk7CkBAIC00MzY3LDcgKzQzNzcsOCBAQAogCiBzdGF0aWMgaW5saW5lIHUzMiB0ZzNfdHhfYXZhaWwoc3RydWN0IHRnM19uYXBpICp0bmFwaSkKIHsKLQlzbXBfbWIoKTsKKwkvKiBUZWxsIGNvbXBpbGVyIHRvIGZldGNoIHR4IGluZGljZXMgZnJvbSBtZW1vcnkuICovCisJYmFycmllcigpOwogCXJldHVybiB0bmFwaS0+dHhfcGVuZGluZyAtCiAJICAgICAgICgodG5hcGktPnR4X3Byb2QgLSB0bmFwaS0+dHhfY29ucykgJiAoVEczX1RYX1JJTkdfU0laRSAtIDEpKTsKIH0KQEAgLTU1NTIsOCArNTU2Myw4IEBACiAKIAllbnRyeSA9IHRuYXBpLT50eF9wcm9kOwogCWJhc2VfZmxhZ3MgPSAwOwotCW1zcyA9IDA7Ci0JaWYgKChtc3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplKSAhPSAwKSB7CisJbXNzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZTsKKwlpZiAobXNzKSB7CiAJCWludCB0Y3Bfb3B0X2xlbiwgaXBfdGNwX2xlbjsKIAkJdTMyIGhkcmxlbjsKIApAQCAtNTY1MSw2ICs1NjYyLDEzIEBACiAJdG5hcGktPnR4X3Byb2QgPSBlbnRyeTsKIAlpZiAodW5saWtlbHkodGczX3R4X2F2YWlsKHRuYXBpKSA8PSAoTUFYX1NLQl9GUkFHUyArIDEpKSkgewogCQluZXRpZl90eF9zdG9wX3F1ZXVlKHR4cSk7CisKKwkJLyogbmV0aWZfdHhfc3RvcF9xdWV1ZSgpIG11c3QgYmUgZG9uZSBiZWZvcmUgY2hlY2tpbmcKKwkJICogY2hlY2tpbmcgdHggaW5kZXggaW4gdGczX3R4X2F2YWlsKCkgYmVsb3csIGJlY2F1c2UgaW4KKwkJICogdGczX3R4KCksIHdlIHVwZGF0ZSB0eCBpbmRleCBiZWZvcmUgY2hlY2tpbmcgZm9yCisJCSAqIG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQoKS4KKwkJICovCisJCXNtcF9tYigpOwogCQlpZiAodGczX3R4X2F2YWlsKHRuYXBpKSA+IFRHM19UWF9XQUtFVVBfVEhSRVNIKHRuYXBpKSkKIAkJCW5ldGlmX3R4X3dha2VfcXVldWUodHhxKTsKIAl9CkBAIC01Njk2LDYgKzU3MTQsMTMgQEAKIAkvKiBFc3RpbWF0ZSB0aGUgbnVtYmVyIG9mIGZyYWdtZW50cyBpbiB0aGUgd29yc3QgY2FzZSAqLwogCWlmICh1bmxpa2VseSh0ZzNfdHhfYXZhaWwoJnRwLT5uYXBpWzBdKSA8PSBmcmFnX2NudF9lc3QpKSB7CiAJCW5ldGlmX3N0b3BfcXVldWUodHAtPmRldik7CisKKwkJLyogbmV0aWZfdHhfc3RvcF9xdWV1ZSgpIG11c3QgYmUgZG9uZSBiZWZvcmUgY2hlY2tpbmcKKwkJICogY2hlY2tpbmcgdHggaW5kZXggaW4gdGczX3R4X2F2YWlsKCkgYmVsb3csIGJlY2F1c2UgaW4KKwkJICogdGczX3R4KCksIHdlIHVwZGF0ZSB0eCBpbmRleCBiZWZvcmUgY2hlY2tpbmcgZm9yCisJCSAqIG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQoKS4KKwkJICovCisJCXNtcF9tYigpOwogCQlpZiAodGczX3R4X2F2YWlsKCZ0cC0+bmFwaVswXSkgPD0gZnJhZ19jbnRfZXN0KQogCQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCkBAIC01NzU5LDkgKzU3ODQsMTAgQEAKIAlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkKIAkJYmFzZV9mbGFncyB8PSBUWERfRkxBR19UQ1BVRFBfQ1NVTTsKIAotCWlmICgobXNzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSkgIT0gMCkgeworCW1zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7CisJaWYgKG1zcykgewogCQlzdHJ1Y3QgaXBoZHIgKmlwaDsKLQkJdTMyIHRjcF9vcHRfbGVuLCBpcF90Y3BfbGVuLCBoZHJfbGVuOworCQl1MzIgdGNwX29wdF9sZW4sIGhkcl9sZW47CiAKIAkJaWYgKHNrYl9oZWFkZXJfY2xvbmVkKHNrYikgJiYKIAkJICAgIHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkgewpAQCAtNTc2OSwxMCArNTc5NSwyMSBAQAogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CiAKKwkJaXBoID0gaXBfaGRyKHNrYik7CiAJCXRjcF9vcHRfbGVuID0gdGNwX29wdGxlbihza2IpOwotCQlpcF90Y3BfbGVuID0gaXBfaGRybGVuKHNrYikgKyBzaXplb2Yoc3RydWN0IHRjcGhkcik7CiAKLQkJaGRyX2xlbiA9IGlwX3RjcF9sZW4gKyB0Y3Bfb3B0X2xlbjsKKwkJaWYgKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgJiBTS0JfR1NPX1RDUFY2KSB7CisJCQloZHJfbGVuID0gc2tiX2hlYWRsZW4oc2tiKSAtIEVUSF9ITEVOOworCQl9IGVsc2UgeworCQkJdTMyIGlwX3RjcF9sZW47CisKKwkJCWlwX3RjcF9sZW4gPSBpcF9oZHJsZW4oc2tiKSArIHNpemVvZihzdHJ1Y3QgdGNwaGRyKTsKKwkJCWhkcl9sZW4gPSBpcF90Y3BfbGVuICsgdGNwX29wdF9sZW47CisKKwkJCWlwaC0+Y2hlY2sgPSAwOworCQkJaXBoLT50b3RfbGVuID0gaHRvbnMobXNzICsgaGRyX2xlbik7CisJCX0KKwogCQlpZiAodW5saWtlbHkoKEVUSF9ITEVOICsgaGRyX2xlbikgPiA4MCkgJiYKIAkJCSAgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVFNPX0JVRykpCiAJCQlyZXR1cm4gdGczX3Rzb19idWcodHAsIHNrYik7CkBAIC01NzgwLDkgKzU4MTcsNiBAQAogCQliYXNlX2ZsYWdzIHw9IChUWERfRkxBR19DUFVfUFJFX0RNQSB8CiAJCQkgICAgICAgVFhEX0ZMQUdfQ1BVX1BPU1RfRE1BKTsKIAotCQlpcGggPSBpcF9oZHIoc2tiKTsKLQkJaXBoLT5jaGVjayA9IDA7Ci0JCWlwaC0+dG90X2xlbiA9IGh0b25zKG1zcyArIGhkcl9sZW4pOwogCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9IV19UU08pIHsKIAkJCXRjcF9oZHIoc2tiKS0+Y2hlY2sgPSAwOwogCQkJYmFzZV9mbGFncyAmPSB+VFhEX0ZMQUdfVENQVURQX0NTVU07CkBAIC01OTIyLDYgKzU5NTYsMTMgQEAKIAl0bmFwaS0+dHhfcHJvZCA9IGVudHJ5OwogCWlmICh1bmxpa2VseSh0ZzNfdHhfYXZhaWwodG5hcGkpIDw9IChNQVhfU0tCX0ZSQUdTICsgMSkpKSB7CiAJCW5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTsKKworCQkvKiBuZXRpZl90eF9zdG9wX3F1ZXVlKCkgbXVzdCBiZSBkb25lIGJlZm9yZSBjaGVja2luZworCQkgKiBjaGVja2luZyB0eCBpbmRleCBpbiB0ZzNfdHhfYXZhaWwoKSBiZWxvdywgYmVjYXVzZSBpbgorCQkgKiB0ZzNfdHgoKSwgd2UgdXBkYXRlIHR4IGluZGV4IGJlZm9yZSBjaGVja2luZyBmb3IKKwkJICogbmV0aWZfdHhfcXVldWVfc3RvcHBlZCgpLgorCQkgKi8KKwkJc21wX21iKCk7CiAJCWlmICh0ZzNfdHhfYXZhaWwodG5hcGkpID4gVEczX1RYX1dBS0VVUF9USFJFU0godG5hcGkpKQogCQkJbmV0aWZfdHhfd2FrZV9xdWV1ZSh0eHEpOwogCX0KQEAgLTYyMTIsNiArNjI1Myw4IEBACiAJZm9yIChqID0gMDsgaiA8IHRwLT5pcnFfY250OyBqKyspIHsKIAkJc3RydWN0IHRnM19uYXBpICp0bmFwaSA9ICZ0cC0+bmFwaVtqXTsKIAorCQl0ZzNfcnhfcHJvZHJpbmdfZnJlZSh0cCwgJnRwLT5wcm9kcmluZ1tqXSk7CisKIAkJaWYgKCF0bmFwaS0+dHhfYnVmZmVycykKIAkJCWNvbnRpbnVlOwogCkBAIC02MjQ3LDggKzYyOTAsNiBAQAogCiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQl9Ci0KLQkJdGczX3J4X3Byb2RyaW5nX2ZyZWUodHAsICZ0cC0+cHJvZHJpbmdbal0pOwogCX0KIH0KIApAQCAtNjYwMyw3ICs2NjQ0LDcgQEAKIAkJYXBlZGF0YSA9IHRnM19hcGVfcmVhZDMyKHRwLCBURzNfQVBFX0hPU1RfSU5JVF9DT1VOVCk7CiAJCXRnM19hcGVfd3JpdGUzMih0cCwgVEczX0FQRV9IT1NUX0lOSVRfQ09VTlQsICsrYXBlZGF0YSk7CiAJCXRnM19hcGVfd3JpdGUzMih0cCwgVEczX0FQRV9IT1NUX0RSSVZFUl9JRCwKLQkJCQlBUEVfSE9TVF9EUklWRVJfSURfTUFHSUMpOworCQkJQVBFX0hPU1RfRFJJVkVSX0lEX01BR0lDKFRHM19NQUpfTlVNLCBURzNfTUlOX05VTSkpOwogCQl0ZzNfYXBlX3dyaXRlMzIodHAsIFRHM19BUEVfSE9TVF9CRUhBVklPUiwKIAkJCQlBUEVfSE9TVF9CRUhBVl9OT19QSFlMT0NLKTsKIApAQCAtNjc4Miw3ICs2ODIzLDggQEAKIAkvKiBBbGxvdyByZWFkcyBhbmQgd3JpdGVzIHRvIHRoZSBBUEUgcmVnaXN0ZXIgYW5kIG1lbW9yeSBzcGFjZS4gKi8KIAlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfQVBFKQogCQl2YWwgfD0gUENJU1RBVEVfQUxMT1dfQVBFX0NUTFNQQ19XUiB8Ci0JCSAgICAgICBQQ0lTVEFURV9BTExPV19BUEVfU0hNRU1fV1I7CisJCSAgICAgICBQQ0lTVEFURV9BTExPV19BUEVfU0hNRU1fV1IgfAorCQkgICAgICAgUENJU1RBVEVfQUxMT1dfQVBFX1BTUEFDRV9XUjsKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCBURzNQQ0lfUENJU1RBVEUsIHZhbCk7CiAKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQodHAtPnBkZXYsIFBDSV9DT01NQU5ELCB0cC0+cGNpX2NtZCk7CkBAIC02ODk3LDkgKzY5MzksMTMgQEAKIAl2YWwgPSBHUkNfTUlTQ19DRkdfQ09SRUNMS19SRVNFVDsKIAogCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BDSV9FWFBSRVNTKSB7Ci0JCWlmICh0cjMyKDB4N2UyYykgPT0gMHg2MCkgewotCQkJdHczMigweDdlMmMsIDB4MjApOwotCQl9CisJCS8qIEZvcmNlIFBDSWUgMS4wYSBtb2RlICovCisJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTc4NSAmJgorCQkgICAgISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3MTdfUExVUykgJiYKKwkJICAgIHRyMzIoVEczX1BDSUVfUEhZX1RTVENUTCkgPT0KKwkJICAgIChURzNfUENJRV9QSFlfVFNUQ1RMX1BDSUUxMCB8IFRHM19QQ0lFX1BIWV9UU1RDVExfUFNDUkFNKSkKKwkJCXR3MzIoVEczX1BDSUVfUEhZX1RTVENUTCwgVEczX1BDSUVfUEhZX1RTVENUTF9QU0NSQU0pOworCiAJCWlmICh0cC0+cGNpX2NoaXBfcmV2X2lkICE9IENISVBSRVZfSURfNTc1MF9BMCkgewogCQkJdHczMihHUkNfTUlTQ19DRkcsICgxIDw8IDI5KSk7CiAJCQl2YWwgfD0gKDEgPDwgMjkpOwpAQCAtNjkxMiw4ICs2OTU4LDExIEBACiAJCSAgICAgdHIzMihHUkNfVkNQVV9FWFRfQ1RSTCkgJiB+R1JDX1ZDUFVfRVhUX0NUUkxfSEFMVF9DUFUpOwogCX0KIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykKKwkvKiBNYW5hZ2UgZ3BoeSBwb3dlciBmb3IgYWxsIENQTVUgYWJzZW50IFBDSWUgZGV2aWNlcy4gKi8KKwlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSAmJgorCSAgICAhKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19DUE1VX1BSRVNFTlQpKQogCQl2YWwgfD0gR1JDX01JU0NfQ0ZHX0tFRVBfR1BIWV9QT1dFUjsKKwogCXR3MzIoR1JDX01JU0NfQ0ZHLCB2YWwpOwogCiAJLyogcmVzdG9yZSA1NzAxIGhhcmR3YXJlIGJ1ZyB3b3JrYXJvdW5kIHdyaXRlIG1ldGhvZCAqLwpAQCAtNjk3MCw4ICs3MDE5LDcgQEAKIAkJICogT2xkZXIgUENJZSBkZXZpY2VzIG9ubHkgc3VwcG9ydCB0aGUgMTI4IGJ5dGUKIAkJICogTVBTIHNldHRpbmcuICBFbmZvcmNlIHRoZSByZXN0cmljdGlvbi4KIAkJICovCi0JCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19DUE1VX1BSRVNFTlQpIHx8Ci0JCSAgICAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODQpKQorCQlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfQ1BNVV9QUkVTRU5UKSkKIAkJCXZhbDE2ICY9IH5QQ0lfRVhQX0RFVkNUTF9QQVlMT0FEOwogCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQodHAtPnBkZXYsCiAJCQkJICAgICAgdHAtPnBjaWVfY2FwICsgUENJX0VYUF9ERVZDVEwsCkBAIC03MDE4LDEwICs3MDY2LDEwIEBACiAJCXR3MzIoVEczUENJX0NMT0NLX0NUUkwsIHRwLT5wY2lfY2xvY2tfY3RybCk7CiAJfQogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUEhZX1NFUkRFUykgeworCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19QSFlfU0VSREVTKSB7CiAJCXRwLT5tYWNfbW9kZSA9IE1BQ19NT0RFX1BPUlRfTU9ERV9UQkk7CiAJCXR3MzJfZihNQUNfTU9ERSwgdHAtPm1hY19tb2RlKTsKLQl9IGVsc2UgaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfTUlJX1NFUkRFUykgeworCX0gZWxzZSBpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfTUlJX1NFUkRFUykgewogCQl0cC0+bWFjX21vZGUgPSBNQUNfTU9ERV9QT1JUX01PREVfR01JSTsKIAkJdHczMl9mKE1BQ19NT0RFLCB0cC0+bWFjX21vZGUpOwogCX0gZWxzZSBpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfQVBFKSB7CkBAIC03MDQxLDM1ICs3MDg5LDEwIEBACiAKIAl0ZzNfbWRpb19zdGFydCh0cCk7CiAKLQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzgwKSB7Ci0JCXU4IHBoeV9hZGRyOwotCi0JCXBoeV9hZGRyID0gdHAtPnBoeV9hZGRyOwotCQl0cC0+cGh5X2FkZHIgPSBURzNfUEhZX1BDSUVfQUREUjsKLQotCQl0ZzNfd3JpdGVwaHkodHAsIFRHM19QQ0lFUEhZX0JMT0NLX0FERFIsCi0JCQkgICAgIFRHM19QQ0lFUEhZX1RYQl9CTEsgPDwgVEczX1BDSUVQSFlfQkxPQ0tfU0hJRlQpOwotCQl2YWwgPSBURzNfUENJRVBIWV9UWDBDVFJMMV9UWE9DTSB8IFRHM19QQ0lFUEhZX1RYMENUUkwxX1JEQ1RMIHwKLQkJICAgICAgVEczX1BDSUVQSFlfVFgwQ1RSTDFfVFhDTVYgfCBURzNfUENJRVBIWV9UWDBDVFJMMV9US1NFTCB8Ci0JCSAgICAgIFRHM19QQ0lFUEhZX1RYMENUUkwxX05CX0VOOwotCQl0ZzNfd3JpdGVwaHkodHAsIFRHM19QQ0lFUEhZX1RYMENUUkwxLCB2YWwpOwotCQl1ZGVsYXkoMTApOwotCi0JCXRnM193cml0ZXBoeSh0cCwgVEczX1BDSUVQSFlfQkxPQ0tfQUREUiwKLQkJCSAgICAgVEczX1BDSUVQSFlfWEdYU19CTEsxIDw8IFRHM19QQ0lFUEhZX0JMT0NLX1NISUZUKTsKLQkJdmFsID0gVEczX1BDSUVQSFlfUFdSTUdNVDRfTE9XUFdSX0VOIHwKLQkJICAgICAgVEczX1BDSUVQSFlfUFdSTUdNVDRfTDFQTExQRF9FTjsKLQkJdGczX3dyaXRlcGh5KHRwLCBURzNfUENJRVBIWV9QV1JNR01UNCwgdmFsKTsKLQkJdWRlbGF5KDEwKTsKLQotCQl0cC0+cGh5X2FkZHIgPSBwaHlfYWRkcjsKLQl9Ci0KIAlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUENJX0VYUFJFU1MpICYmCiAJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgIT0gQ0hJUFJFVl9JRF81NzUwX0EwICYmCiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81Nzg1ICYmCi0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzE3ICYmCi0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81Nzc2NSkgeworCSAgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTcxN19QTFVTKSkgewogCQl2YWwgPSB0cjMyKDB4N2MwMCk7CiAKIAkJdHczMigweDdjMDAsIHZhbCB8ICgxIDw8IDI1KSk7CkBAIC03NDI3LDcgKzc0NTAsNyBAQAogCQl0dzMyKEhPU1RDQ19UWENPQUxfTUFYRl9JTlQsIDApOwogCX0KIAotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJWCkpIHsKKwlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9SU1MpKSB7CiAJCXR3MzIoSE9TVENDX1JYQ09MX1RJQ0tTLCBlYy0+cnhfY29hbGVzY2VfdXNlY3MpOwogCQl0dzMyKEhPU1RDQ19SWE1BWF9GUkFNRVMsIGVjLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyk7CiAJCXR3MzIoSE9TVENDX1JYQ09BTF9NQVhGX0lOVCwgZWMtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycSk7CkBAIC03NTA0LDcgKzc1MjcsOCBAQAogCiAKIAkvKiBEaXNhYmxlIGFsbCByZWNlaXZlIHJldHVybiByaW5ncyBidXQgdGhlIGZpcnN0LiAqLwotCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNykKKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTkpCiAJCWxpbWl0ID0gTklDX1NSQU1fUkNWX1JFVF9SQ0IgKyBURzNfQkRJTkZPX1NJWkUgKiAxNzsKIAllbHNlIGlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkKIAkJbGltaXQgPSBOSUNfU1JBTV9SQ1ZfUkVUX1JDQiArIFRHM19CRElORk9fU0laRSAqIDE2OwpAQCAtNzcyMCw3ICs3NzQ0LDggQEAKIAkJICovCiAJCXZhbCA9IHRyMzIoVEczUENJX1BDSVNUQVRFKTsKIAkJdmFsIHw9IFBDSVNUQVRFX0FMTE9XX0FQRV9DVExTUENfV1IgfAotCQkgICAgICAgUENJU1RBVEVfQUxMT1dfQVBFX1NITUVNX1dSOworCQkgICAgICAgUENJU1RBVEVfQUxMT1dfQVBFX1NITUVNX1dSIHwKKwkJICAgICAgIFBDSVNUQVRFX0FMTE9XX0FQRV9QU1BBQ0VfV1I7CiAJCXR3MzIoVEczUENJX1BDSVNUQVRFLCB2YWwpOwogCX0KIApAQCAtNzc0MCw4ICs3NzY1LDcgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3IHx8Ci0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc2NSkgeworCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3MTdfUExVUykgewogCQl2YWwgPSB0cjMyKFRHM1BDSV9ETUFfUldfQ1RSTCkgJgogCQkgICAgICB+RE1BX1JXQ1RSTF9ESVNfQ0FDSEVfQUxJR05NRU5UOwogCQlpZiAodHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3NzY1X0EwKQpAQCAtNzg2OSw3ICs3ODkzLDggQEAKIAkgICAgICgodTY0KSB0cHItPnJ4X3N0ZF9tYXBwaW5nID4+IDMyKSk7CiAJdHczMihSQ1ZEQkRJX1NURF9CRCArIFRHM19CRElORk9fSE9TVF9BRERSICsgVEczXzY0QklUX1JFR19MT1csCiAJICAgICAoKHU2NCkgdHByLT5yeF9zdGRfbWFwcGluZyAmIDB4ZmZmZmZmZmYpKTsKLQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MTcpCisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzE3ICYmCisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzE5KQogCQl0dzMyKFJDVkRCRElfU1REX0JEICsgVEczX0JESU5GT19OSUNfQUREUiwKIAkJICAgICBOSUNfU1JBTV9SWF9CVUZGRVJfREVTQyk7CiAKQEAgLTc4OTQsNyArNzkxOSw4IEBACiAJCQl0dzMyKFJDVkRCRElfSlVNQk9fQkQgKyBURzNfQkRJTkZPX01BWExFTl9GTEFHUywKIAkJCSAgICAgKFJYX0pVTUJPX01BWF9TSVpFIDw8IEJESU5GT19GTEFHU19NQVhMRU5fU0hJRlQpIHwKIAkJCSAgICAgQkRJTkZPX0ZMQUdTX1VTRV9FWFRfUkVDVik7Ci0JCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MTcpCisJCQlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1VTRV9KVU1CT19CREZMQUcpIHx8CisJCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzY1KQogCQkJCXR3MzIoUkNWREJESV9KVU1CT19CRCArIFRHM19CRElORk9fTklDX0FERFIsCiAJCQkJICAgICBOSUNfU1JBTV9SWF9KVU1CT19CVUZGRVJfREVTQyk7CiAJCX0gZWxzZSB7CkBAIC03OTAyLDggKzc5MjgsNyBAQAogCQkJICAgICBCRElORk9fRkxBR1NfRElTQUJMRUQpOwogCQl9CiAKLQkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3IHx8Ci0JCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3NjUpCisJCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3MTdfUExVUykKIAkJCXZhbCA9IChSWF9TVERfTUFYX1NJWkVfNTcwNSA8PCBCRElORk9fRkxBR1NfTUFYTEVOX1NISUZUKSB8CiAJCQkgICAgICAoVEczX1JYX1NURF9ETUFfU1ogPDwgMik7CiAJCWVsc2UKQEAgLTc5MjAsOCArNzk0NSw3IEBACiAJCQkgIHRwLT5yeF9qdW1ib19wZW5kaW5nIDogMDsKIAl0dzMyX3J4X21ib3goVEczX1JYX0pNQl9QUk9EX0lEWF9SRUcsIHRwci0+cnhfam1iX3Byb2RfaWR4KTsKIAotCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyB8fAotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3NjUpIHsKKwlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM181NzE3X1BMVVMpIHsKIAkJdHczMihTVERfUkVQTEVOSVNIX0xXTSwgMzIpOwogCQl0dzMyKEpNQl9SRVBMRU5JU0hfTFdNLCAxNik7CiAJfQpAQCAtNzk1Niw3ICs3OTgwLDggQEAKIAkJICAgICAgUkRNQUNfTU9ERV9GSUZPVVJVTl9FTkFCIHwgUkRNQUNfTU9ERV9GSUZPT1JFQURfRU5BQiB8CiAJCSAgICAgIFJETUFDX01PREVfTE5HUkVBRF9FTkFCKTsKIAotCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNykKKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTkpCiAJCXJkbWFjX21vZGUgfD0gUkRNQUNfTU9ERV9NVUxUX0RNQV9SRF9ESVM7CiAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODQgfHwKQEAgLTgwNDgsOCArODA3Myw4IEBACiAJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKQogCQl0dzMyKFJDVkxTQ19NT0RFLCBSQ1ZMU0NfTU9ERV9FTkFCTEUgfCBSQ1ZMU0NfTU9ERV9BVFROX0VOQUJMRSk7CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9NSUlfU0VSREVTKSB7Ci0JCXRwLT50ZzNfZmxhZ3MyICY9IH5URzNfRkxHMl9QQVJBTExFTF9ERVRFQ1Q7CisJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX01JSV9TRVJERVMpIHsKKwkJdHAtPnBoeV9mbGFncyAmPSB+VEczX1BIWUZMR19QQVJBTExFTF9ERVRFQ1Q7CiAJCS8qIHJlc2V0IHRvIHByZXZlbnQgbG9zaW5nIDFzdCByeCBwYWNrZXQgaW50ZXJtaXR0ZW50bHkgKi8KIAkJdHczMl9mKE1BQ19SWF9NT0RFLCBSWF9NT0RFX1JFU0VUKTsKIAkJdWRlbGF5KDEwKTsKQEAgLTgwNjIsNyArODA4Nyw3IEBACiAJdHAtPm1hY19tb2RlIHw9IE1BQ19NT0RFX1RYU1RBVF9FTkFCTEUgfCBNQUNfTU9ERV9SWFNUQVRfRU5BQkxFIHwKIAkJTUFDX01PREVfVERFX0VOQUJMRSB8IE1BQ19NT0RFX1JERV9FTkFCTEUgfCBNQUNfTU9ERV9GSERFX0VOQUJMRTsKIAlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BIWV9TRVJERVMpICYmCisJICAgICEodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfUEhZX1NFUkRFUykgJiYKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDApCiAJCXRwLT5tYWNfbW9kZSB8PSBNQUNfTU9ERV9MSU5LX1BPTEFSSVRZOwogCXR3MzJfZihNQUNfTU9ERSwgdHAtPm1hY19tb2RlIHwgTUFDX01PREVfUlhTVEFUX0NMRUFSIHwgTUFDX01PREVfVFhTVEFUX0NMRUFSKTsKQEAgLTgxOTUsNiArODIyMCw5IEBACiAJfQogCiAJdHAtPnR4X21vZGUgPSBUWF9NT0RFX0VOQUJMRTsKKwlpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTc1NV9QTFVTKSB8fAorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikKKwkJdHAtPnR4X21vZGUgfD0gVFhfTU9ERV9NQlVGX0xPQ0tVUF9GSVg7CiAJdHczMl9mKE1BQ19UWF9NT0RFLCB0cC0+dHhfbW9kZSk7CiAJdWRlbGF5KDEwMCk7CiAKQEAgLTgyNDQsMTYgKzgyNzIsMTYgQEAKIAl0dzMyKE1BQ19MRURfQ1RSTCwgdHAtPmxlZF9jdHJsKTsKIAogCXR3MzIoTUFDX01JX1NUQVQsIE1BQ19NSV9TVEFUX0xOS1NUQVRfQVRUTl9FTkFCKTsKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QSFlfU0VSREVTKSB7CisJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX1BIWV9TRVJERVMpIHsKIAkJdHczMl9mKE1BQ19SWF9NT0RFLCBSWF9NT0RFX1JFU0VUKTsKIAkJdWRlbGF5KDEwKTsKIAl9CiAJdHczMl9mKE1BQ19SWF9NT0RFLCB0cC0+cnhfbW9kZSk7CiAJdWRlbGF5KDEwKTsKIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BIWV9TRVJERVMpIHsKKwlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfUEhZX1NFUkRFUykgewogCQlpZiAoKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzA0KSAmJgotCQkJISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1NFUkRFU19QUkVFTVBIQVNJUykpIHsKKwkJCSEodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfU0VSREVTX1BSRUVNUEhBU0lTKSkgewogCQkJLyogU2V0IGRyaXZlIHRyYW5zbWlzc2lvbiBsZXZlbCB0byAxLjJWICAqLwogCQkJLyogb25seSBpZiB0aGUgc2lnbmFsIHByZS1lbXBoYXNpcyBiaXQgaXMgbm90IHNldCAgKi8KIAkJCXZhbCA9IHRyMzIoTUFDX1NFUkRFU19DRkcpOwpAQCAtODI3NSwxMiArODMwMywxMiBAQAogCXR3MzJfZihNQUNfTE9XX1dNQVJLX01BWF9SWF9GUkFNRSwgdmFsKTsKIAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwNCAmJgotCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QSFlfU0VSREVTKSkgeworCSAgICAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfUEhZX1NFUkRFUykpIHsKIAkJLyogVXNlIGhhcmR3YXJlIGxpbmsgYXV0by1uZWdvdGlhdGlvbiAqLwogCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9IV19BVVRPTkVHOwogCX0KIAotCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9NSUlfU0VSREVTKSAmJgorCWlmICgodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfTUlJX1NFUkRFUykgJiYKIAkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE0KSkgewogCQl1MzIgdG1wOwogCkBAIC04MjkyLDggKzgzMjAsOCBAQAogCX0KIAogCWlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfVVNFX1BIWUxJQikpIHsKLQkJaWYgKHRwLT5saW5rX2NvbmZpZy5waHlfaXNfbG93X3Bvd2VyKSB7Ci0JCQl0cC0+bGlua19jb25maWcucGh5X2lzX2xvd19wb3dlciA9IDA7CisJCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19MT1dfUE9XRVIpIHsKKwkJCXRwLT5waHlfZmxhZ3MgJj0gflRHM19QSFlGTEdfSVNfTE9XX1BPV0VSOwogCQkJdHAtPmxpbmtfY29uZmlnLnNwZWVkID0gdHAtPmxpbmtfY29uZmlnLm9yaWdfc3BlZWQ7CiAJCQl0cC0+bGlua19jb25maWcuZHVwbGV4ID0gdHAtPmxpbmtfY29uZmlnLm9yaWdfZHVwbGV4OwogCQkJdHAtPmxpbmtfY29uZmlnLmF1dG9uZWcgPSB0cC0+bGlua19jb25maWcub3JpZ19hdXRvbmVnOwpAQCAtODMwMywxNSArODMzMSwxNSBAQAogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAotCQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BIWV9TRVJERVMpICYmCi0JCSAgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUEhZX0lTX0ZFVCkpIHsKKwkJaWYgKCEodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfUEhZX1NFUkRFUykgJiYKKwkJICAgICEodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfRkVUKSkgewogCQkJdTMyIHRtcDsKIAogCQkJLyogQ2xlYXIgQ1JDIHN0YXRzLiAqLwogCQkJaWYgKCF0ZzNfcmVhZHBoeSh0cCwgTUlJX1RHM19URVNUMSwgJnRtcCkpIHsKIAkJCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfVEVTVDEsCiAJCQkJCSAgICAgdG1wIHwgTUlJX1RHM19URVNUMV9DUkNfRU4pOwotCQkJCXRnM19yZWFkcGh5KHRwLCAweDE0LCAmdG1wKTsKKwkJCQl0ZzNfcmVhZHBoeSh0cCwgTUlJX1RHM19SWFJfQ09VTlRFUlMsICZ0bXApOwogCQkJfQogCQl9CiAJfQpAQCAtODQ3OSw3ICs4NTA3LDcgQEAKIAkJCW1hY19zdGF0ID0gdHIzMihNQUNfU1RBVFVTKTsKIAogCQkJcGh5X2V2ZW50ID0gMDsKLQkJCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVVNFX01JX0lOVEVSUlVQVCkgeworCQkJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX1VTRV9NSV9JTlRFUlJVUFQpIHsKIAkJCQlpZiAobWFjX3N0YXQgJiBNQUNfU1RBVFVTX01JX0lOVEVSUlVQVCkKIAkJCQkJcGh5X2V2ZW50ID0gMTsKIAkJCX0gZWxzZSBpZiAobWFjX3N0YXQgJiBNQUNfU1RBVFVTX0xOS1NUQVRFX0NIQU5HRUQpCkBAIC04NDk1LDcgKzg1MjMsNyBAQAogCQkJICAgIChtYWNfc3RhdCAmIE1BQ19TVEFUVVNfTE5LU1RBVEVfQ0hBTkdFRCkpIHsKIAkJCQluZWVkX3NldHVwID0gMTsKIAkJCX0KLQkJCWlmICghIG5ldGlmX2NhcnJpZXJfb2sodHAtPmRldikgJiYKKwkJCWlmICghbmV0aWZfY2Fycmllcl9vayh0cC0+ZGV2KSAmJgogCQkJICAgIChtYWNfc3RhdCAmIChNQUNfU1RBVFVTX1BDU19TWU5DRUQgfAogCQkJCQkgTUFDX1NUQVRVU19TSUdOQUxfREVUKSkpIHsKIAkJCQluZWVkX3NldHVwID0gMTsKQEAgLTg1MTEsOCArODUzOSwxMCBAQAogCQkJCX0KIAkJCQl0ZzNfc2V0dXBfcGh5KHRwLCAwKTsKIAkJCX0KLQkJfSBlbHNlIGlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX01JSV9TRVJERVMpCisJCX0gZWxzZSBpZiAoKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX01JSV9TRVJERVMpICYmCisJCQkgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzgwX0NMQVNTKSkgewogCQkJdGczX3NlcmRlc19wYXJhbGxlbF9kZXRlY3QodHApOworCQl9CiAKIAkJdHAtPnRpbWVyX2NvdW50ZXIgPSB0cC0+dGltZXJfbXVsdGlwbGllcjsKIAl9CkBAIC04NjA1LDggKzg2MzUsNyBAQAogCSAqIFR1cm4gb2ZmIE1TSSBvbmUgc2hvdCBtb2RlLiAgT3RoZXJ3aXNlIHRoaXMgdGVzdCBoYXMgbm8KIAkgKiBvYnNlcnZhYmxlIHdheSB0byBrbm93IHdoZXRoZXIgdGhlIGludGVycnVwdCB3YXMgZGVsaXZlcmVkLgogCSAqLwotCWlmICgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcgfHwKLQkgICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc2NSkgJiYKKwlpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTcxN19QTFVTKSAmJgogCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0kpKSB7CiAJCXZhbCA9IHRyMzIoTVNHSU5UX01PREUpIHwgTVNHSU5UX01PREVfT05FX1NIT1RfRElTQUJMRTsKIAkJdHczMihNU0dJTlRfTU9ERSwgdmFsKTsKQEAgLTg2NDksOCArODY3OCw3IEBACiAKIAlpZiAoaW50cl9vaykgewogCQkvKiBSZWVuYWJsZSBNU0kgb25lIHNob3QgbW9kZS4gKi8KLQkJaWYgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyB8fAotCQkgICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc2NSkgJiYKKwkJaWYgKCh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3MTdfUExVUykgJiYKIAkJICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSSkpIHsKIAkJCXZhbCA9IHRyMzIoTVNHSU5UX01PREUpICYgfk1TR0lOVF9NT0RFX09ORV9TSE9UX0RJU0FCTEU7CiAJCQl0dzMyKE1TR0lOVF9NT0RFLCB2YWwpOwpAQCAtODc3NSw5ICs4ODAzLDkgQEAKIAl9CiAKIAlyYyA9IHBjaV9lbmFibGVfbXNpeCh0cC0+cGRldiwgbXNpeF9lbnQsIHRwLT5pcnFfY250KTsKLQlpZiAocmMgIT0gMCkgewotCQlpZiAocmMgPCBURzNfUlNTX01JTl9OVU1fTVNJWF9WRUNTKQotCQkJcmV0dXJuIGZhbHNlOworCWlmIChyYyA8IDApIHsKKwkJcmV0dXJuIGZhbHNlOworCX0gZWxzZSBpZiAocmMgIT0gMCkgewogCQlpZiAocGNpX2VuYWJsZV9tc2l4KHRwLT5wZGV2LCBtc2l4X2VudCwgcmMpKQogCQkJcmV0dXJuIGZhbHNlOwogCQluZXRkZXZfbm90aWNlKHRwLT5kZXYsICJSZXF1ZXN0ZWQgJWQgTVNJLVggdmVjdG9ycywgcmVjZWl2ZWQgJWRcbiIsCkBAIC04Nzg1LDE2ICs4ODEzLDE5IEBACiAJCXRwLT5pcnFfY250ID0gcmM7CiAJfQogCi0JdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfRU5BQkxFX1JTUzsKLQogCWZvciAoaSA9IDA7IGkgPCB0cC0+aXJxX21heDsgaSsrKQogCQl0cC0+bmFwaVtpXS5pcnFfdmVjID0gbXNpeF9lbnRbaV0udmVjdG9yOwogCi0JaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3KSB7Ci0JCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX0VOQUJMRV9UU1M7Ci0JCXRwLT5kZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcyA9IHRwLT5pcnFfY250IC0gMTsKLQl9IGVsc2UKLQkJdHAtPmRldi0+cmVhbF9udW1fdHhfcXVldWVzID0gMTsKKwl0cC0+ZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPSAxOworCWlmICh0cC0+aXJxX2NudCA+IDEpIHsKKwkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfRU5BQkxFX1JTUzsKKworCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcgfHwKKwkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE5KSB7CisJCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19FTkFCTEVfVFNTOworCQkJdHAtPmRldi0+cmVhbF9udW1fdHhfcXVldWVzID0gdHAtPmlycV9jbnQgLSAxOworCQl9CisJfQogCiAJcmV0dXJuIHRydWU7CiB9CkBAIC04ODM4LDcgKzg4NjksNyBAQAogCWVsc2UgaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJKQogCQlwY2lfZGlzYWJsZV9tc2kodHAtPnBkZXYpOwogCXRwLT50ZzNfZmxhZ3MyICY9IH5URzNfRkxHMl9VU0lOR19NU0lfT1JfTVNJWDsKLQl0cC0+dGczX2ZsYWdzMyAmPSB+VEczX0ZMRzNfRU5BQkxFX1JTUzsKKwl0cC0+dGczX2ZsYWdzMyAmPSB+KFRHM19GTEczX0VOQUJMRV9SU1MgfCBURzNfRkxHM19FTkFCTEVfVFNTKTsKIH0KIAogc3RhdGljIGludCB0ZzNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtODk0MiwxMCArODk3Myw4IEBACiAJCQlnb3RvIGVycl9vdXQyOwogCQl9CiAKLQkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzE3ICYmCi0JCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTc3NjUgJiYKLQkJICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSSkgJiYKLQkJICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzFTSE9UX01TSSkpIHsKKwkJaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM181NzE3X1BMVVMpICYmCisJCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0kpKSB7CiAJCQl1MzIgdmFsID0gdHIzMihQQ0lFX1RSQU5TQUNUSU9OX0NGRyk7CiAKIAkJCXR3MzIoUENJRV9UUkFOU0FDVElPTl9DRkcsCkBAIC04OTgyLDcgKzkwMTEsOCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqdGczX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK3N0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnRnM19nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqLAorCQkJCQkJIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqKTsKIHN0YXRpYyBzdHJ1Y3QgdGczX2V0aHRvb2xfc3RhdHMgKnRnM19nZXRfZXN0YXRzKHN0cnVjdCB0ZzMgKik7CiAKIHN0YXRpYyBpbnQgdGczX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC05MDE2LDggKzkwNDYsOCBAQAogCiAJdGczX2ludHNfZmluaSh0cCk7CiAKLQltZW1jcHkoJnRwLT5uZXRfc3RhdHNfcHJldiwgdGczX2dldF9zdGF0cyh0cC0+ZGV2KSwKLQkgICAgICAgc2l6ZW9mKHRwLT5uZXRfc3RhdHNfcHJldikpOworCXRnM19nZXRfc3RhdHM2NCh0cC0+ZGV2LCAmdHAtPm5ldF9zdGF0c19wcmV2KTsKKwogCW1lbWNweSgmdHAtPmVzdGF0c19wcmV2LCB0ZzNfZ2V0X2VzdGF0cyh0cCksCiAJICAgICAgIHNpemVvZih0cC0+ZXN0YXRzX3ByZXYpKTsKIApAQCAtOTAzMCwyOCArOTA2MCwxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X3N0YXQ2NCh0ZzNfc3RhdDY0X3QgKnZhbCkKLXsKLQl1bnNpZ25lZCBsb25nIHJldDsKLQotI2lmIChCSVRTX1BFUl9MT05HID09IDMyKQotCXJldCA9IHZhbC0+bG93OwotI2Vsc2UKLQlyZXQgPSAoKHU2NCl2YWwtPmhpZ2ggPDwgMzIpIHwgKCh1NjQpdmFsLT5sb3cpOwotI2VuZGlmCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSB1NjQgZ2V0X2VzdGF0NjQodGczX3N0YXQ2NF90ICp2YWwpCitzdGF0aWMgaW5saW5lIHU2NCBnZXRfc3RhdDY0KHRnM19zdGF0NjRfdCAqdmFsKQogewogICAgICAgIHJldHVybiAoKHU2NCl2YWwtPmhpZ2ggPDwgMzIpIHwgKCh1NjQpdmFsLT5sb3cpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjYWxjX2NyY19lcnJvcnMoc3RydWN0IHRnMyAqdHApCitzdGF0aWMgdTY0IGNhbGNfY3JjX2Vycm9ycyhzdHJ1Y3QgdGczICp0cCkKIHsKIAlzdHJ1Y3QgdGczX2h3X3N0YXRzICpod19zdGF0cyA9IHRwLT5od19zdGF0czsKIAotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUEhZX1NFUkRFUykgJiYKKwlpZiAoISh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19QSFlfU0VSREVTKSAmJgogCSAgICAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDAgfHwKIAkgICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAxKSkgewogCQl1MzIgdmFsOwpAQCAtOTA2MCw3ICs5MDc4LDcgQEAKIAkJaWYgKCF0ZzNfcmVhZHBoeSh0cCwgTUlJX1RHM19URVNUMSwgJnZhbCkpIHsKIAkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19URVNUMSwKIAkJCQkgICAgIHZhbCB8IE1JSV9URzNfVEVTVDFfQ1JDX0VOKTsKLQkJCXRnM19yZWFkcGh5KHRwLCAweDE0LCAmdmFsKTsKKwkJCXRnM19yZWFkcGh5KHRwLCBNSUlfVEczX1JYUl9DT1VOVEVSUywgJnZhbCk7CiAJCX0gZWxzZQogCQkJdmFsID0gMDsKIAkJc3Bpbl91bmxvY2tfYmgoJnRwLT5sb2NrKTsKQEAgLTkwNzUsNyArOTA5Myw3IEBACiAKICNkZWZpbmUgRVNUQVRfQUREKG1lbWJlcikgXAogCWVzdGF0cy0+bWVtYmVyID0Jb2xkX2VzdGF0cy0+bWVtYmVyICsgXAotCQkJCWdldF9lc3RhdDY0KCZod19zdGF0cy0+bWVtYmVyKQorCQkJCWdldF9zdGF0NjQoJmh3X3N0YXRzLT5tZW1iZXIpCiAKIHN0YXRpYyBzdHJ1Y3QgdGczX2V0aHRvb2xfc3RhdHMgKnRnM19nZXRfZXN0YXRzKHN0cnVjdCB0ZzMgKnRwKQogewpAQCAtOTE2NSwxMSArOTE4MywxMSBAQAogCXJldHVybiBlc3RhdHM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqdGczX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqdGczX2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQkgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cykKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnRwLT5uZXRfc3RhdHM7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm9sZF9zdGF0cyA9ICZ0cC0+bmV0X3N0YXRzX3ByZXY7CisJc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpvbGRfc3RhdHMgPSAmdHAtPm5ldF9zdGF0c19wcmV2OwogCXN0cnVjdCB0ZzNfaHdfc3RhdHMgKmh3X3N0YXRzID0gdHAtPmh3X3N0YXRzOwogCiAJaWYgKCFod19zdGF0cykKQEAgLTkzNTAsMTMgKzkzNjgsMTMgQEAKIAogCW1lbXNldChwLCAwLCBURzNfUkVHRFVNUF9MRU4pOwogCi0JaWYgKHRwLT5saW5rX2NvbmZpZy5waHlfaXNfbG93X3Bvd2VyKQorCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19MT1dfUE9XRVIpCiAJCXJldHVybjsKIAogCXRnM19mdWxsX2xvY2sodHAsIDApOwogCiAjZGVmaW5lIF9fR0VUX1JFRzMyKHJlZykJKCoocCkrKyA9IHRyMzIocmVnKSkKLSNkZWZpbmUgR0VUX1JFRzMyX0xPT1AoYmFzZSxsZW4pCQlcCisjZGVmaW5lIEdFVF9SRUczMl9MT09QKGJhc2UsIGxlbikJCVwKIGRvIHsJcCA9ICh1MzIgKikob3JpZ19wICsgKGJhc2UpKTsJCVwKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpCQlcCiAJCV9fR0VUX1JFRzMyKChiYXNlKSArIGkpOwlcCkBAIC05NDI5LDcgKzk0NDcsNyBAQAogCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX05PX05WUkFNKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICh0cC0+bGlua19jb25maWcucGh5X2lzX2xvd19wb3dlcikKKwlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfTE9XX1BPV0VSKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCW9mZnNldCA9IGVlcHJvbS0+b2Zmc2V0OwpAQCAtOTQ0OSw3ICs5NDY3LDcgQEAKIAkJcmV0ID0gdGczX252cmFtX3JlYWRfYmUzMih0cCwgb2Zmc2V0LWJfb2Zmc2V0LCAmdmFsKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7Ci0JCW1lbWNweShkYXRhLCAoKGNoYXIqKSZ2YWwpICsgYl9vZmZzZXQsIGJfY291bnQpOworCQltZW1jcHkoZGF0YSwgKChjaGFyICopJnZhbCkgKyBiX29mZnNldCwgYl9jb3VudCk7CiAJCWxlbiAtPSBiX2NvdW50OwogCQlvZmZzZXQgKz0gYl9jb3VudDsKIAkJZWVwcm9tLT5sZW4gKz0gYl9jb3VudDsKQEAgLTk0OTEsNyArOTUwOSw3IEBACiAJdTggKmJ1ZjsKIAlfX2JlMzIgc3RhcnQsIGVuZDsKIAotCWlmICh0cC0+bGlua19jb25maWcucGh5X2lzX2xvd19wb3dlcikKKwlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfTE9XX1BPV0VSKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCWlmICgodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19OT19OVlJBTSkgfHwKQEAgLTk1NDgsNyArOTU2Niw3IEBACiAKIAlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfUEhZTElCKSB7CiAJCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7Ci0JCWlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUEhZX0NPTk5FQ1RFRCkpCisJCWlmICghKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0NPTk5FQ1RFRCkpCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJcGh5ZGV2ID0gdHAtPm1kaW9fYnVzLT5waHlfbWFwW1RHM19QSFlfTUlJX0FERFJdOwogCQlyZXR1cm4gcGh5X2V0aHRvb2xfZ3NldChwaHlkZXYsIGNtZCk7CkBAIC05NTU2LDExICs5NTc0LDExIEBACiAKIAljbWQtPnN1cHBvcnRlZCA9IChTVVBQT1JURURfQXV0b25lZyk7CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfMTBfMTAwX09OTFkpKQorCWlmICghKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHXzEwXzEwMF9PTkxZKSkKIAkJY21kLT5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZiB8CiAJCQkJICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsKTsKIAotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfQU5ZX1NFUkRFUykpIHsKKwlpZiAoISh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19BTllfU0VSREVTKSkgewogCQljbWQtPnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfAogCQkJCSAgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfAogCQkJCSAgU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8CkBAIC05NTkxLDcgKzk2MDksNyBAQAogCiAJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfVVNFX1BIWUxJQikgewogCQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwotCQlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9DT05ORUNURUQpKQorCQlpZiAoISh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19DT05ORUNURUQpKQogCQkJcmV0dXJuIC1FQUdBSU47CiAJCXBoeWRldiA9IHRwLT5tZGlvX2J1cy0+cGh5X21hcFtURzNfUEhZX01JSV9BRERSXTsKIAkJcmV0dXJuIHBoeV9ldGh0b29sX3NzZXQocGh5ZGV2LCBjbWQpOwpAQCAtOTYxMSwxMSArOTYyOSwxMSBAQAogCQkJICAgQURWRVJUSVNFRF9QYXVzZSB8CiAJCQkgICBBRFZFUlRJU0VEX0FzeW1fUGF1c2U7CiAKLQkJaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHXzEwXzEwMF9PTkxZKSkKKwkJaWYgKCEodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfMTBfMTAwX09OTFkpKQogCQkJbWFzayB8PSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmIHwKIAkJCQlBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsOwogCi0JCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfQU5ZX1NFUkRFUykpCisJCWlmICghKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0FOWV9TRVJERVMpKQogCQkJbWFzayB8PSBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgfAogCQkJCUFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCB8CiAJCQkJQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYgfApAQCAtOTYzNiw3ICs5NjU0LDcgQEAKIAogCQljbWQtPmFkdmVydGlzaW5nICY9IG1hc2s7CiAJfSBlbHNlIHsKLQkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfQU5ZX1NFUkRFUykgeworCQlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfQU5ZX1NFUkRFUykgewogCQkJaWYgKGNtZC0+c3BlZWQgIT0gU1BFRURfMTAwMCkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtOTc3MiwxMSArOTc5MCwxMSBAQAogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BIWV9TRVJERVMpCisJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX1BIWV9TRVJERVMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfVVNFX1BIWUxJQikgewotCQlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9DT05ORUNURUQpKQorCQlpZiAoISh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19DT05ORUNURUQpKQogCQkJcmV0dXJuIC1FQUdBSU47CiAJCXIgPSBwaHlfc3RhcnRfYW5lZyh0cC0+bWRpb19idXMtPnBoeV9tYXBbVEczX1BIWV9NSUlfQUREUl0pOwogCX0gZWxzZSB7CkBAIC05Nzg3LDcgKzk4MDUsNyBAQAogCQl0ZzNfcmVhZHBoeSh0cCwgTUlJX0JNQ1IsICZibWNyKTsKIAkJaWYgKCF0ZzNfcmVhZHBoeSh0cCwgTUlJX0JNQ1IsICZibWNyKSAmJgogCQkgICAgKChibWNyICYgQk1DUl9BTkVOQUJMRSkgfHwKLQkJICAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QQVJBTExFTF9ERVRFQ1QpKSkgeworCQkgICAgICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19QQVJBTExFTF9ERVRFQ1QpKSkgewogCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfQk1DUiwgYm1jciB8IEJNQ1JfQU5SRVNUQVJUIHwKIAkJCQkJCSAgIEJNQ1JfQU5FTkFCTEUpOwogCQkJciA9IDA7CkBAIC05OTIyLDcgKzk5NDAsNyBAQAogCQllbHNlCiAJCQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19QQVVTRV9BVVRPTkVHOwogCi0JCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9DT05ORUNURUQpIHsKKwkJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0NPTk5FQ1RFRCkgewogCQkJdTMyIG9sZGFkdiA9IHBoeWRldi0+YWR2ZXJ0aXNpbmcgJgogCQkJCSAgICAgKEFEVkVSVElTRURfUGF1c2UgfCBBRFZFUlRJU0VEX0FzeW1fUGF1c2UpOwogCQkJaWYgKG9sZGFkdiAhPSBuZXdhZHYpIHsKQEAgLTEwMjUxLDcgKzEwMjY5LDcgQEAKIAlpZiAoIW5ldGlmX3J1bm5pbmcodHAtPmRldikpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfQU5ZX1NFUkRFUykKKwlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfQU5ZX1NFUkRFUykKIAkJbWF4ID0gVEczX1NFUkRFU19USU1FT1VUX1NFQzsKIAllbHNlCiAJCW1heCA9IFRHM19DT1BQRVJfVElNRU9VVF9TRUM7CkBAIC0xMDU1NCw3ICsxMDU3Miw4IEBACiAJaW50IGVyciA9IDA7CiAJaW50IGk7CiAKLQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcpCisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3IHx8CisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE5KQogCQltZW1fdGJsID0gbWVtX3RibF81NzE3OwogCWVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc2NSkKIAkJbWVtX3RibCA9IG1lbV90YmxfNTc3NjU7CkBAIC0xMDU2OCw4ICsxMDU4Nyw4IEBACiAJCW1lbV90YmwgPSBtZW1fdGJsXzU3MHg7CiAKIAlmb3IgKGkgPSAwOyBtZW1fdGJsW2ldLm9mZnNldCAhPSAweGZmZmZmZmZmOyBpKyspIHsKLQkJaWYgKChlcnIgPSB0ZzNfZG9fbWVtX3Rlc3QodHAsIG1lbV90YmxbaV0ub2Zmc2V0LAotCQkgICAgbWVtX3RibFtpXS5sZW4pKSAhPSAwKQorCQllcnIgPSB0ZzNfZG9fbWVtX3Rlc3QodHAsIG1lbV90YmxbaV0ub2Zmc2V0LCBtZW1fdGJsW2ldLmxlbik7CisJCWlmIChlcnIpCiAJCQlicmVhazsKIAl9CiAKQEAgLTEwNjEyLDcgKzEwNjMxLDcgQEAKIAkJCSAgIE1BQ19NT0RFX1BPUlRfSU5UX0xQQkFDSzsKIAkJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKQogCQkJbWFjX21vZGUgfD0gTUFDX01PREVfTElOS19QT0xBUklUWTsKLQkJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR18xMF8xMDBfT05MWSkKKwkJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHXzEwXzEwMF9PTkxZKQogCQkJbWFjX21vZGUgfD0gTUFDX01PREVfUE9SVF9NT0RFX01JSTsKIAkJZWxzZQogCQkJbWFjX21vZGUgfD0gTUFDX01PREVfUE9SVF9NT0RFX0dNSUk7CkBAIC0xMDYyMCw3ICsxMDYzOSw3IEBACiAJfSBlbHNlIGlmIChsb29wYmFja19tb2RlID09IFRHM19QSFlfTE9PUEJBQ0spIHsKIAkJdTMyIHZhbDsKIAotCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfSVNfRkVUKSB7CisJCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19GRVQpIHsKIAkJCXRnM19waHlfZmV0X3RvZ2dsZV9hcGQodHAsIGZhbHNlKTsKIAkJCXZhbCA9IEJNQ1JfTE9PUEJBQ0sgfCBCTUNSX0ZVTExEUExYIHwgQk1DUl9TUEVFRDEwMDsKIAkJfSBlbHNlCkBAIC0xMDYzMiw3ICsxMDY1MSw3IEBACiAJCXVkZWxheSg0MCk7CiAKIAkJbWFjX21vZGUgPSB0cC0+bWFjX21vZGUgJiB+TUFDX01PREVfUE9SVF9NT0RFX01BU0s7Ci0JCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9JU19GRVQpIHsKKwkJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0ZFVCkgewogCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0ZFVF9QVEVTVCwKIAkJCQkgICAgIE1JSV9URzNfRkVUX1BURVNUX0ZSQ19UWF9MSU5LIHwKIAkJCQkgICAgIE1JSV9URzNfRkVUX1BURVNUX0ZSQ19UWF9MT0NLKTsKQEAgLTEwNjQ0LDcgKzEwNjYzLDcgQEAKIAkJCW1hY19tb2RlIHw9IE1BQ19NT0RFX1BPUlRfTU9ERV9HTUlJOwogCiAJCS8qIHJlc2V0IHRvIHByZXZlbnQgbG9zaW5nIDFzdCByeCBwYWNrZXQgaW50ZXJtaXR0ZW50bHkgKi8KLQkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfTUlJX1NFUkRFUykgeworCQlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfTUlJX1NFUkRFUykgewogCQkJdHczMl9mKE1BQ19SWF9NT0RFLCBSWF9NT0RFX1JFU0VUKTsKIAkJCXVkZWxheSgxMCk7CiAJCQl0dzMyX2YoTUFDX1JYX01PREUsIHRwLT5yeF9tb2RlKTsKQEAgLTEwNzc1LDcgKzEwNzk0LDcgQEAKIAkJcmV0dXJuIFRHM19MT09QQkFDS19GQUlMRUQ7CiAKIAkvKiBUdXJuIG9mZiBncGh5IGF1dG9wb3dlcmRvd24uICovCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUEhZX0VOQUJMRV9BUEQpCisJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0VOQUJMRV9BUEQpCiAJCXRnM19waHlfdG9nZ2xlX2FwZCh0cCwgZmFsc2UpOwogCiAJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19DUE1VX1BSRVNFTlQpIHsKQEAgLTEwODEyLDE0ICsxMDgzMSwxNCBAQAogCQl0dzMyKFRHM19DUE1VX01VVEVYX0dOVCwgQ1BNVV9NVVRFWF9HTlRfRFJJVkVSKTsKIAl9CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BIWV9TRVJERVMpICYmCisJaWYgKCEodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfUEhZX1NFUkRFUykgJiYKIAkgICAgISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1VTRV9QSFlMSUIpKSB7CiAJCWlmICh0ZzNfcnVuX2xvb3BiYWNrKHRwLCBURzNfUEhZX0xPT1BCQUNLKSkKIAkJCWVyciB8PSBURzNfUEhZX0xPT1BCQUNLX0ZBSUxFRDsKIAl9CiAKIAkvKiBSZS1lbmFibGUgZ3BoeSBhdXRvcG93ZXJkb3duLiAqLwotCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9FTkFCTEVfQVBEKQorCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19FTkFCTEVfQVBEKQogCQl0ZzNfcGh5X3RvZ2dsZV9hcGQodHAsIHRydWUpOwogCiAJcmV0dXJuIGVycjsKQEAgLTEwODMwLDcgKzEwODQ5LDcgQEAKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZiAodHAtPmxpbmtfY29uZmlnLnBoeV9pc19sb3dfcG93ZXIpCisJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0xPV19QT1dFUikKIAkJdGczX3NldF9wb3dlcl9zdGF0ZSh0cCwgUENJX0QwKTsKIAogCW1lbXNldChkYXRhLCAwLCBzaXplb2YodTY0KSAqIFRHM19OVU1fVEVTVCk7CkBAIC0xMDg2Miw3ICsxMDg4MSw3IEBACiAJCWlmICghZXJyKQogCQkJdGczX252cmFtX3VubG9jayh0cCk7CiAKLQkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfTUlJX1NFUkRFUykKKwkJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX01JSV9TRVJERVMpCiAJCQl0ZzNfcGh5X3Jlc2V0KHRwKTsKIAogCQlpZiAodGczX3Rlc3RfcmVnaXN0ZXJzKHRwKSAhPSAwKSB7CkBAIC0xMDg5OCw3ICsxMDkxNyw3IEBACiAJCWlmIChpcnFfc3luYyAmJiAhZXJyMikKIAkJCXRnM19waHlfc3RhcnQodHApOwogCX0KLQlpZiAodHAtPmxpbmtfY29uZmlnLnBoeV9pc19sb3dfcG93ZXIpCisJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0xPV19QT1dFUikKIAkJdGczX3NldF9wb3dlcl9zdGF0ZSh0cCwgUENJX0QzaG90KTsKIAogfQpAQCAtMTA5MTEsMTAgKzEwOTMwLDEwIEBACiAKIAlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfUEhZTElCKSB7CiAJCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7Ci0JCWlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUEhZX0NPTk5FQ1RFRCkpCisJCWlmICghKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0NPTk5FQ1RFRCkpCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJcGh5ZGV2ID0gdHAtPm1kaW9fYnVzLT5waHlfbWFwW1RHM19QSFlfTUlJX0FERFJdOwotCQlyZXR1cm4gcGh5X21paV9pb2N0bChwaHlkZXYsIGRhdGEsIGNtZCk7CisJCXJldHVybiBwaHlfbWlpX2lvY3RsKHBoeWRldiwgaWZyLCBjbWQpOwogCX0KIAogCXN3aXRjaCAoY21kKSB7CkBAIC0xMDkyNSwxMCArMTA5NDQsMTAgQEAKIAljYXNlIFNJT0NHTUlJUkVHOiB7CiAJCXUzMiBtaWlfcmVndmFsOwogCi0JCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BIWV9TRVJERVMpCisJCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19QSFlfU0VSREVTKQogCQkJYnJlYWs7CQkJLyogV2UgaGF2ZSBubyBQSFkgKi8KIAotCQlpZiAodHAtPmxpbmtfY29uZmlnLnBoeV9pc19sb3dfcG93ZXIpCisJCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19MT1dfUE9XRVIpCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAogCQlzcGluX2xvY2tfYmgoJnRwLT5sb2NrKTsKQEAgLTEwOTQxLDEwICsxMDk2MCwxMCBAQAogCX0KIAogCWNhc2UgU0lPQ1NNSUlSRUc6Ci0JCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BIWV9TRVJERVMpCisJCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19QSFlfU0VSREVTKQogCQkJYnJlYWs7CQkJLyogV2UgaGF2ZSBubyBQSFkgKi8KIAotCQlpZiAodHAtPmxpbmtfY29uZmlnLnBoeV9pc19sb3dfcG93ZXIpCisJCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19MT1dfUE9XRVIpCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAogCQlzcGluX2xvY2tfYmgoJnRwLT5sb2NrKTsKQEAgLTExNjM0LDcgKzExNjUzLDggQEAKIAkJZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzgwIHx8CiAJCQkgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzY1KQogCQkJdGczX2dldF81Nzc4MF9udnJhbV9pbmZvKHRwKTsKLQkJZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcpCisJCWVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3IHx8CisJCQkgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTkpCiAJCQl0ZzNfZ2V0XzU3MTdfbnZyYW1faW5mbyh0cCk7CiAJCWVsc2UKIAkJCXRnM19nZXRfbnZyYW1faW5mbyh0cCk7CkBAIC0xMjA3MCwxMSArMTIwOTAsMTAgQEAKIAogCQl0cC0+cGh5X2lkID0gZWVwcm9tX3BoeV9pZDsKIAkJaWYgKGVlcHJvbV9waHlfc2VyZGVzKSB7Ci0JCQlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykgfHwKLQkJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNykKLQkJCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9NSUlfU0VSREVTOworCQkJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKQorCQkJCXRwLT5waHlfZmxhZ3MgfD0gVEczX1BIWUZMR19QSFlfU0VSREVTOwogCQkJZWxzZQotCQkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX1BIWV9TRVJERVM7CisJCQkJdHAtPnBoeV9mbGFncyB8PSBURzNfUEhZRkxHX01JSV9TRVJERVM7CiAJCX0KIAogCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpCkBAIC0xMjE1OCw3ICsxMjE3Nyw3IEBACiAJCQkodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpKQogCQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfRU5BQkxFX0FQRTsKIAotCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9BTllfU0VSREVTICYmCisJCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19BTllfU0VSREVTICYmCiAJCSAgICAhKG5pY19jZmcgJiBOSUNfU1JBTV9EQVRBX0NGR19GSUJFUl9XT0wpKQogCQkJdHAtPnRnM19mbGFncyAmPSB+VEczX0ZMQUdfV09MX0NBUDsKIApAQCAtMTIxNjcsMTkgKzEyMTg2LDIxIEBACiAJCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1dPTF9FTkFCTEU7CiAKIAkJaWYgKGNmZzIgJiAoMSA8PCAxNykpCi0JCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9DQVBBQ0lUSVZFX0NPVVBMSU5HOworCQkJdHAtPnBoeV9mbGFncyB8PSBURzNfUEhZRkxHX0NBUEFDSVRJVkVfQ09VUExJTkc7CiAKIAkJLyogc2VyZGVzIHNpZ25hbCBwcmUtZW1waGFzaXMgaW4gcmVnaXN0ZXIgMHg1OTAgc2V0IGJ5ICovCiAJCS8qIGJvb3Rjb2RlIGlmIGJpdCAxOCBpcyBzZXQgKi8KIAkJaWYgKGNmZzIgJiAoMSA8PCAxOCkpCi0JCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9TRVJERVNfUFJFRU1QSEFTSVM7CisJCQl0cC0+cGh5X2ZsYWdzIHw9IFRHM19QSFlGTEdfU0VSREVTX1BSRUVNUEhBU0lTOwogCiAJCWlmICgoKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg0ICYmCiAJCSAgICAgIEdFVF9DSElQX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBDSElQUkVWXzU3ODRfQVgpKSAmJgogCQkgICAgKGNmZzIgJiBOSUNfU1JBTV9EQVRBX0NGR18yX0FQRF9FTikpCi0JCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19QSFlfRU5BQkxFX0FQRDsKKwkJCXRwLT5waHlfZmxhZ3MgfD0gVEczX1BIWUZMR19FTkFCTEVfQVBEOwogCi0JCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BDSV9FWFBSRVNTKSB7CisJCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QQ0lfRVhQUkVTUykgJiYKKwkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81Nzg1ICYmCisJCSAgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTcxN19QTFVTKSkgewogCQkJdTMyIGNmZzM7CiAKIAkJCXRnM19yZWFkX21lbSh0cCwgTklDX1NSQU1fREFUQV9DRkdfMywgJmNmZzMpOwpAQCAtMTIyODQsOSArMTIzMDUsOSBAQAogCWlmICghZXJyICYmIFRHM19LTk9XTl9QSFlfSUQoaHdfcGh5X2lkX21hc2tlZCkpIHsKIAkJdHAtPnBoeV9pZCA9IGh3X3BoeV9pZDsKIAkJaWYgKGh3X3BoeV9pZF9tYXNrZWQgPT0gVEczX1BIWV9JRF9CQ004MDAyKQotCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfUEhZX1NFUkRFUzsKKwkJCXRwLT5waHlfZmxhZ3MgfD0gVEczX1BIWUZMR19QSFlfU0VSREVTOwogCQllbHNlCi0JCQl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfUEhZX1NFUkRFUzsKKwkJCXRwLT5waHlfZmxhZ3MgJj0gflRHM19QSFlGTEdfUEhZX1NFUkRFUzsKIAl9IGVsc2UgewogCQlpZiAodHAtPnBoeV9pZCAhPSBURzNfUEhZX0lEX0lOVkFMSUQpIHsKIAkJCS8qIERvIG5vdGhpbmcsIHBoeSBJRCBhbHJlYWR5IHNldCB1cCBpbgpAQCAtMTIzMDUsMTEgKzEyMzI2LDExIEBACiAJCQl0cC0+cGh5X2lkID0gcC0+cGh5X2lkOwogCQkJaWYgKCF0cC0+cGh5X2lkIHx8CiAJCQkgICAgdHAtPnBoeV9pZCA9PSBURzNfUEhZX0lEX0JDTTgwMDIpCi0JCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfUEhZX1NFUkRFUzsKKwkJCQl0cC0+cGh5X2ZsYWdzIHw9IFRHM19QSFlGTEdfUEhZX1NFUkRFUzsKIAkJfQogCX0KIAotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfQU5ZX1NFUkRFUykgJiYKKwlpZiAoISh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19BTllfU0VSREVTKSAmJgogCSAgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkgJiYKIAkgICAgISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikpIHsKIAkJdTMyIGJtc3IsIGFkdl9yZWcsIHRnM19jdHJsLCBtYXNrOwpAQCAtMTIzMjcsNyArMTIzNDgsNyBAQAogCQkJICAgQURWRVJUSVNFXzEwMEhBTEYgfCBBRFZFUlRJU0VfMTAwRlVMTCB8CiAJCQkgICBBRFZFUlRJU0VfQ1NNQSB8IEFEVkVSVElTRV9QQVVTRV9DQVApOwogCQl0ZzNfY3RybCA9IDA7Ci0JCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR18xMF8xMDBfT05MWSkpIHsKKwkJaWYgKCEodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfMTBfMTAwX09OTFkpKSB7CiAJCQl0ZzNfY3RybCA9IChNSUlfVEczX0NUUkxfQURWXzEwMDBfSEFMRiB8CiAJCQkJICAgIE1JSV9URzNfQ1RSTF9BRFZfMTAwMF9GVUxMKTsKIAkJCWlmICh0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTcwMV9BMCB8fApAQCAtMTIzNDIsNyArMTIzNjMsNyBAQAogCQlpZiAoIXRnM19jb3BwZXJfaXNfYWR2ZXJ0aXNpbmdfYWxsKHRwLCBtYXNrKSkgewogCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfQURWRVJUSVNFLCBhZHZfcmVnKTsKIAotCQkJaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHXzEwXzEwMF9PTkxZKSkKKwkJCWlmICghKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHXzEwXzEwMF9PTkxZKSkKIAkJCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQ1RSTCwgdGczX2N0cmwpOwogCiAJCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9CTUNSLApAQCAtMTIzNTEsNyArMTIzNzIsNyBAQAogCQl0ZzNfcGh5X3NldF93aXJlc3BlZWQodHApOwogCiAJCXRnM193cml0ZXBoeSh0cCwgTUlJX0FEVkVSVElTRSwgYWR2X3JlZyk7Ci0JCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR18xMF8xMDBfT05MWSkpCisJCWlmICghKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHXzEwXzEwMF9PTkxZKSkKIAkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19DVFJMLCB0ZzNfY3RybCk7CiAJfQogCkBAIC0xMjM2NCwxMyArMTIzODUsMTMgQEAKIAkJZXJyID0gdGczX2luaXRfNTQwMXBoeV9kc3AodHApOwogCX0KIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0FOWV9TRVJERVMpCisJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0FOWV9TRVJERVMpCiAJCXRwLT5saW5rX2NvbmZpZy5hZHZlcnRpc2luZyA9CiAJCQkoQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZiB8CiAJCQkgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8CiAJCQkgQURWRVJUSVNFRF9BdXRvbmVnIHwKIAkJCSBBRFZFUlRJU0VEX0ZJQlJFKTsKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHXzEwXzEwMF9PTkxZKQorCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR18xMF8xMDBfT05MWSkKIAkJdHAtPmxpbmtfY29uZmlnLmFkdmVydGlzaW5nICY9CiAJCQl+KEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYgfAogCQkJICBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsKTsKQEAgLTEyNjk5LDYgKzEyNzIwLDcgQEAKIHsKIAlpbnQgdmxlbjsKIAl1MzIgYXBlZGF0YTsKKwljaGFyICpmd3R5cGU7CiAKIAlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpIHx8CiAJICAgICEodHAtPnRnM19mbGFncyAgJiBURzNfRkxBR19FTkFCTEVfQVNGKSkKQEAgLTEyNzE0LDkgKzEyNzM2LDE1IEBACiAKIAlhcGVkYXRhID0gdGczX2FwZV9yZWFkMzIodHAsIFRHM19BUEVfRldfVkVSU0lPTik7CiAKKwlpZiAodGczX2FwZV9yZWFkMzIodHAsIFRHM19BUEVfRldfRkVBVFVSRVMpICYgVEczX0FQRV9GV19GRUFUVVJFX05DU0kpCisJCWZ3dHlwZSA9ICJOQ1NJIjsKKwllbHNlCisJCWZ3dHlwZSA9ICJEQVNIIjsKKwogCXZsZW4gPSBzdHJsZW4odHAtPmZ3X3Zlcik7CiAKLQlzbnByaW50ZigmdHAtPmZ3X3Zlclt2bGVuXSwgVEczX1ZFUl9TSVpFIC0gdmxlbiwgIiBEQVNIIHYlZC4lZC4lZC4lZCIsCisJc25wcmludGYoJnRwLT5md192ZXJbdmxlbl0sIFRHM19WRVJfU0laRSAtIHZsZW4sICIgJXMgdiVkLiVkLiVkLiVkIiwKKwkJIGZ3dHlwZSwKIAkJIChhcGVkYXRhICYgQVBFX0ZXX1ZFUlNJT05fTUFKTVNLKSA+PiBBUEVfRldfVkVSU0lPTl9NQUpTRlQsCiAJCSAoYXBlZGF0YSAmIEFQRV9GV19WRVJTSU9OX01JTk1TSykgPj4gQVBFX0ZXX1ZFUlNJT05fTUlOU0ZULAogCQkgKGFwZWRhdGEgJiBBUEVfRldfVkVSU0lPTl9SRVZNU0spID4+IEFQRV9GV19WRVJTSU9OX1JFVlNGVCwKQEAgLTEyNzYwLDYgKzEyNzg4LDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqIF9fZGV2aW5pdCB0ZzNfZmluZF9wZWVyKHN0cnVjdCB0ZzMgKik7CiAKK3N0YXRpYyB2b2lkIGlubGluZSB2bGFuX2ZlYXR1cmVzX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworI2lmIFRHM19WTEFOX1RBR19VU0VECisJZGV2LT52bGFuX2ZlYXR1cmVzIHw9IGZsYWdzOworI2VuZGlmCit9CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IHRnM19nZXRfaW52YXJpYW50cyhzdHJ1Y3QgdGczICp0cCkKIHsKIAlzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgd3JpdGVfcmVvcmRlcl9jaGlwc2V0c1tdID0gewpAQCAtMTI4MDQsNyArMTI4MzksOCBAQAogCiAJCWlmICh0cC0+cGRldi0+ZGV2aWNlID09IFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3MTcgfHwKIAkJICAgIHRwLT5wZGV2LT5kZXZpY2UgPT0gVEczUENJX0RFVklDRV9USUdPTjNfNTcxOCB8fAotCQkgICAgdHAtPnBkZXYtPmRldmljZSA9PSBURzNQQ0lfREVWSUNFX1RJR09OM181NzI0KQorCQkgICAgdHAtPnBkZXYtPmRldmljZSA9PSBURzNQQ0lfREVWSUNFX1RJR09OM181NzI0IHx8CisJCSAgICB0cC0+cGRldi0+ZGV2aWNlID09IFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3MTkpCiAJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQodHAtPnBkZXYsCiAJCQkJCSAgICAgIFRHM1BDSV9HRU4yX1BST0RJRF9BU0lDUkVWLAogCQkJCQkgICAgICAmcHJvZF9pZF9hc2ljX3Jldik7CkBAIC0xMjk2Miw2ICsxMjk5OCwxMSBAQAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNykKIAkJdHAtPnBkZXZfcGVlciA9IHRnM19maW5kX3BlZXIodHApOwogCisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3IHx8CisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE5IHx8CisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc2NSkKKwkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfNTcxN19QTFVTOworCiAJLyogSW50ZW50aW9uYWxseSBleGNsdWRlIEFTSUNfUkVWXzU5MDYgKi8KIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTUgfHwKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODcgfHwKQEAgLTEyOTY5LDggKzEzMDEwLDcgQEAKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NjEgfHwKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODUgfHwKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzgwIHx8Ci0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3IHx8Ci0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc2NSkKKwkgICAgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTcxN19QTFVTKSkKIAkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfNTc1NV9QTFVTOwogCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzUwIHx8CkBAIC0xMjk5MCwxNiArMTMwMzAsMTcgQEAKIAlpZiAodHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MDBfQjApCiAJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfQlJPS0VOX0NIRUNLU1VNUzsKIAllbHNlIHsKKwkJdW5zaWduZWQgbG9uZyBmZWF0dXJlcyA9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0cgfCBORVRJRl9GX0dSTzsKKwogCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1JYX0NIRUNLU1VNUzsKLQkJdHAtPmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRzsKIAkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTc1NV9QTFVTKQotCQkJdHAtPmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUFY2X0NTVU07Ci0JCXRwLT5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPOworCQkJZmVhdHVyZXMgfD0gTkVUSUZfRl9JUFY2X0NTVU07CisJCXRwLT5kZXYtPmZlYXR1cmVzIHw9IGZlYXR1cmVzOworCQl2bGFuX2ZlYXR1cmVzX2FkZCh0cC0+ZGV2LCBmZWF0dXJlcyk7CiAJfQogCiAJLyogRGV0ZXJtaW5lIFRTTyBjYXBhYmlsaXRpZXMgKi8KLQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcgfHwKLQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzY1KQorCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3MTdfUExVUykKIAkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfSFdfVFNPXzM7CiAJZWxzZSBpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTc1NV9QTFVTKSB8fAogCQkgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpCkBAIC0xMzAzNSwxNCArMTMwNzYsMTQgQEAKIAkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyXzFTSE9UX01TSTsKIAkJfQogCi0JCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyB8fAotCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzY1KSB7CisJCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3MTdfUExVUykgewogCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19TVVBQT1JUX01TSVg7CiAJCQl0cC0+aXJxX21heCA9IFRHM19JUlFfTUFYX1ZFQ1M7CiAJCX0KIAl9CiAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTkgfHwKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpCiAJCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX1NIT1JUX0RNQV9CVUc7CiAJZWxzZSBpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3NTVfUExVUykpIHsKQEAgLTEzMDUwLDggKzEzMDkxLDcgQEAKIAkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfNDBCSVRfRE1BX0xJTUlUX0JVRzsKIAl9CiAKLQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcgfHwKLQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzY1KQorCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3MTdfUExVUykKIAkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfVVNFX0pVTUJPX0JERkxBRzsKIAogCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSB8fApAQCAtMTMyNDIsNyArMTMyODIsOCBAQAogCQkgKiBBUEUgcmVnaXN0ZXIgYW5kIG1lbW9yeSBzcGFjZS4KIAkJICovCiAJCXBjaV9zdGF0ZV9yZWcgfD0gUENJU1RBVEVfQUxMT1dfQVBFX0NUTFNQQ19XUiB8Ci0JCQkJIFBDSVNUQVRFX0FMTE9XX0FQRV9TSE1FTV9XUjsKKwkJCQkgUENJU1RBVEVfQUxMT1dfQVBFX1NITUVNX1dSIHwKKwkJCQkgUENJU1RBVEVfQUxMT1dfQVBFX1BTUEFDRV9XUjsKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgVEczUENJX1BDSVNUQVRFLAogCQkJCSAgICAgICBwY2lfc3RhdGVfcmVnKTsKIAl9CkBAIC0xMzI1MSw4ICsxMzI5Miw3IEBACiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzYxIHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg1IHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc4MCB8fAotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyB8fAotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3NjUpCisJICAgICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3MTdfUExVUykpCiAJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfQ1BNVV9QUkVTRU5UOwogCiAJLyogU2V0IHVwIHRwLT5ncmNfbG9jYWxfY3RybCBiZWZvcmUgY2FsbGluZyB0ZzNfc2V0X3Bvd2VyX3N0YXRlKCkuCkBAIC0xMzMxMCw0MCArMTMzNTAsMzkgQEAKIAl9CiAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpCi0JCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX1BIWV9JU19GRVQ7CisJCXRwLT5waHlfZmxhZ3MgfD0gVEczX1BIWUZMR19JU19GRVQ7CiAKIAkvKiBBIGZldyBib2FyZHMgZG9uJ3Qgd2FudCBFdGhlcm5ldEBXaXJlU3BlZWQgcGh5IGZlYXR1cmUgKi8KIAlpZiAoKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAwKSB8fAogCSAgICAoKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzA1KSAmJgogCSAgICAgKHRwLT5wY2lfY2hpcF9yZXZfaWQgIT0gQ0hJUFJFVl9JRF81NzA1X0EwKSAmJgogCSAgICAgKHRwLT5wY2lfY2hpcF9yZXZfaWQgIT0gQ0hJUFJFVl9JRF81NzA1X0ExKSkgfHwKLQkgICAgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUEhZX0lTX0ZFVCkgfHwKLQkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfQU5ZX1NFUkRFUykpCi0JCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX05PX0VUSF9XSVJFX1NQRUVEOworCSAgICAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfRkVUKSB8fAorCSAgICAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfQU5ZX1NFUkRFUykpCisJCXRwLT5waHlfZmxhZ3MgfD0gVEczX1BIWUZMR19OT19FVEhfV0lSRV9TUEVFRDsKIAogCWlmIChHRVRfQ0hJUF9SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQ0hJUFJFVl81NzAzX0FYIHx8CiAJICAgIEdFVF9DSElQX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBDSElQUkVWXzU3MDRfQVgpCi0JCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX1BIWV9BRENfQlVHOworCQl0cC0+cGh5X2ZsYWdzIHw9IFRHM19QSFlGTEdfQURDX0JVRzsKIAlpZiAodHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MDRfQTApCi0JCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX1BIWV81NzA0X0EwX0JVRzsKKwkJdHAtPnBoeV9mbGFncyB8PSBURzNfUEhZRkxHXzU3MDRfQTBfQlVHOwogCiAJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9JU19GRVQpICYmCisJICAgICEodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfRkVUKSAmJgogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTc4NSAmJgogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTc3ODAgJiYKLQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MTcgJiYKLQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3NzY1KSB7CisJICAgICEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM181NzE3X1BMVVMpKSB7CiAJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSB8fAogCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODcgfHwKIAkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg0IHx8CiAJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc2MSkgewogCQkJaWYgKHRwLT5wZGV2LT5kZXZpY2UgIT0gUENJX0RFVklDRV9JRF9USUdPTjNfNTc1NiAmJgogCQkJICAgIHRwLT5wZGV2LT5kZXZpY2UgIT0gUENJX0RFVklDRV9JRF9USUdPTjNfNTcyMikKLQkJCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9QSFlfSklUVEVSX0JVRzsKKwkJCQl0cC0+cGh5X2ZsYWdzIHw9IFRHM19QSFlGTEdfSklUVEVSX0JVRzsKIAkJCWlmICh0cC0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTVNKQotCQkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX1BIWV9BREpVU1RfVFJJTTsKKwkJCQl0cC0+cGh5X2ZsYWdzIHw9IFRHM19QSFlGTEdfQURKVVNUX1RSSU07CiAJCX0gZWxzZQotCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfUEhZX0JFUl9CVUc7CisJCQl0cC0+cGh5X2ZsYWdzIHw9IFRHM19QSFlGTEdfQkVSX0JVRzsKIAl9CiAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODQgJiYKQEAgLTEzMzcyLDggKzEzNDExLDcgQEAKIAkJcmV0dXJuIGVycjsKIAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyAmJgotCSAgICAodHAtPnBjaV9jaGlwX3Jldl9pZCAhPSBDSElQUkVWX0lEXzU3MTdfQTAgfHwKLQkJICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX01JSV9TRVJERVMpKSkKKwkgICAgdHAtPnBjaV9jaGlwX3Jldl9pZCAhPSBDSElQUkVWX0lEXzU3MTdfQTApCiAJCXJldHVybiAtRU5PVFNVUFA7CiAKIAkvKiBJbml0aWFsaXplIGRhdGEvZGVzY3JpcHRvciBieXRlL3dvcmQgc3dhcHBpbmcuICovCkBAIC0xMzQ1Nyw4ICsxMzQ5NSw4IEBACiAJICAgIHRwLT5wZGV2LT5kZXZpY2UgPT0gVEczUENJX0RFVklDRV9USUdPTjNfNTc3OTAgfHwKIAkgICAgdHAtPnBkZXYtPmRldmljZSA9PSBURzNQQ0lfREVWSUNFX1RJR09OM181Nzc5MSB8fAogCSAgICB0cC0+cGRldi0+ZGV2aWNlID09IFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3Nzk1IHx8Ci0JICAgICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9JU19GRVQpKQotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHXzEwXzEwMF9PTkxZOworCSAgICAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfRkVUKSkKKwkJdHAtPnBoeV9mbGFncyB8PSBURzNfUEhZRkxHXzEwXzEwMF9PTkxZOwogCiAJZXJyID0gdGczX3BoeV9wcm9iZSh0cCk7CiAJaWYgKGVycikgewpAQCAtMTM0NzAsMTMgKzEzNTA4LDEzIEBACiAJdGczX3JlYWRfdnBkKHRwKTsKIAl0ZzNfcmVhZF9md192ZXIodHApOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUEhZX1NFUkRFUykgewotCQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19VU0VfTUlfSU5URVJSVVBUOworCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19QSFlfU0VSREVTKSB7CisJCXRwLT5waHlfZmxhZ3MgJj0gflRHM19QSFlGTEdfVVNFX01JX0lOVEVSUlVQVDsKIAl9IGVsc2UgewogCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDApCi0JCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1VTRV9NSV9JTlRFUlJVUFQ7CisJCQl0cC0+cGh5X2ZsYWdzIHw9IFRHM19QSFlGTEdfVVNFX01JX0lOVEVSUlVQVDsKIAkJZWxzZQotCQkJdHAtPnRnM19mbGFncyAmPSB+VEczX0ZMQUdfVVNFX01JX0lOVEVSUlVQVDsKKwkJCXRwLT5waHlfZmxhZ3MgJj0gflRHM19QSFlGTEdfVVNFX01JX0lOVEVSUlVQVDsKIAl9CiAKIAkvKiA1NzAwIHtBWCxCWH0gY2hpcHMgaGF2ZSBhIGJyb2tlbiBzdGF0dXMgYmxvY2sgbGluawpAQCAtMTM0OTQsMTMgKzEzNTMyLDEzIEBACiAJICovCiAJaWYgKHRwLT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfREVMTCAmJgogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMSAmJgotCSAgICAhKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUEhZX1NFUkRFUykpIHsKLQkJdHAtPnRnM19mbGFncyB8PSAoVEczX0ZMQUdfVVNFX01JX0lOVEVSUlVQVCB8Ci0JCQkJICBURzNfRkxBR19VU0VfTElOS0NIR19SRUcpOworCSAgICAhKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX1BIWV9TRVJERVMpKSB7CisJCXRwLT5waHlfZmxhZ3MgfD0gVEczX1BIWUZMR19VU0VfTUlfSU5URVJSVVBUOworCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1VTRV9MSU5LQ0hHX1JFRzsKIAl9CiAKIAkvKiBGb3IgYWxsIFNFUkRFUyB3ZSBwb2xsIHRoZSBNQUMgc3RhdHVzIHJlZ2lzdGVyLiAqLwotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BIWV9TRVJERVMpCisJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX1BIWV9TRVJERVMpCiAJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfUE9MTF9TRVJERVM7CiAJZWxzZQogCQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19QT0xMX1NFUkRFUzsKQEAgLTEzNTgwLDkgKzEzNjE4LDEyIEBACiAJCQl0dzMyX2YoTlZSQU1fQ01ELCBOVlJBTV9DTURfUkVTRVQpOwogCQllbHNlCiAJCQl0ZzNfbnZyYW1fdW5sb2NrKHRwKTsKLQl9IGVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3KSB7Ci0JCWlmICh0cjMyKFRHM19DUE1VX1NUQVRVUykgJiBURzNfQ1BNVV9TVEFUVVNfUENJRV9GVU5DKQorCX0gZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcgfHwKKwkJICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTkpIHsKKwkJaWYgKFBDSV9GVU5DKHRwLT5wZGV2LT5kZXZmbikgJiAxKQogCQkJbWFjX29mZnNldCA9IDB4Y2M7CisJCWlmIChQQ0lfRlVOQyh0cC0+cGRldi0+ZGV2Zm4pID4gMSkKKwkJCW1hY19vZmZzZXQgKz0gMHgxOGM7CiAJfSBlbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikKIAkJbWFjX29mZnNldCA9IDB4MTA7CiAKQEAgLTEzNjY3LDggKzEzNzA4LDcgQEAKICNlbmRpZgogI2VuZGlmCiAKLQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcgfHwKLQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzY1KSB7CisJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTcxN19QTFVTKSB7CiAJCXZhbCA9IGdvYWwgPyAwIDogRE1BX1JXQ1RSTF9ESVNfQ0FDSEVfQUxJR05NRU5UOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xMzg3OSw4ICsxMzkxOSw3IEBACiAKIAl0cC0+ZG1hX3J3Y3RybCA9IHRnM19jYWxjX2RtYV9ibmRyeSh0cCwgdHAtPmRtYV9yd2N0cmwpOwogCi0JaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3IHx8Ci0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc2NSkKKwlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM181NzE3X1BMVVMpCiAJCWdvdG8gb3V0OwogCiAJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUENJX0VYUFJFU1MpIHsKQEAgLTE0MDcwLDcgKzE0MTA5LDYgQEAKIAl0cC0+bGlua19jb25maWcuYXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOwogCXRwLT5saW5rX2NvbmZpZy5hY3RpdmVfc3BlZWQgPSBTUEVFRF9JTlZBTElEOwogCXRwLT5saW5rX2NvbmZpZy5hY3RpdmVfZHVwbGV4ID0gRFVQTEVYX0lOVkFMSUQ7Ci0JdHAtPmxpbmtfY29uZmlnLnBoeV9pc19sb3dfcG93ZXIgPSAwOwogCXRwLT5saW5rX2NvbmZpZy5vcmlnX3NwZWVkID0gU1BFRURfSU5WQUxJRDsKIAl0cC0+bGlua19jb25maWcub3JpZ19kdXBsZXggPSBEVVBMRVhfSU5WQUxJRDsKIAl0cC0+bGlua19jb25maWcub3JpZ19hdXRvbmVnID0gQVVUT05FR19JTlZBTElEOwpAQCAtMTQwNzgsOCArMTQxMTYsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX2luaXRfYnVmbWdyX2NvbmZpZyhzdHJ1Y3QgdGczICp0cCkKIHsKLQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcgfHwKLQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzY1KSB7CisJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTcxN19QTFVTKSB7CiAJCXRwLT5idWZtZ3JfY29uZmlnLm1idWZfcmVhZF9kbWFfbG93X3dhdGVyID0KIAkJCURFRkFVTFRfTUJfUkRNQV9MT1dfV0FURVJfNTcwNTsKIAkJdHAtPmJ1Zm1ncl9jb25maWcubWJ1Zl9tYWNfcnhfbG93X3dhdGVyID0KQEAgLTE0MTU2LDYgKzE0MTkzLDcgQEAKIAljYXNlIFRHM19QSFlfSURfQkNNNTcxOEM6CXJldHVybiAiNTcxOEMiOwogCWNhc2UgVEczX1BIWV9JRF9CQ001NzE4UzoJcmV0dXJuICI1NzE4UyI7CiAJY2FzZSBURzNfUEhZX0lEX0JDTTU3NzY1OglyZXR1cm4gIjU3NzY1IjsKKwljYXNlIFRHM19QSFlfSURfQkNNNTcxOUM6CXJldHVybiAiNTcxOUMiOwogCWNhc2UgVEczX1BIWV9JRF9CQ004MDAyOglyZXR1cm4gIjgwMDIvc2VyZGVzIjsKIAljYXNlIDA6CQkJcmV0dXJuICJzZXJkZXMiOwogCWRlZmF1bHQ6CQlyZXR1cm4gInVua25vd24iOwpAQCAtMTQyNjEsNyArMTQyOTksNyBAQAogCS5uZG9fb3BlbgkJPSB0ZzNfb3BlbiwKIAkubmRvX3N0b3AJCT0gdGczX2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdAkJPSB0ZzNfc3RhcnRfeG1pdCwKLQkubmRvX2dldF9zdGF0cwkJPSB0ZzNfZ2V0X3N0YXRzLAorCS5uZG9fZ2V0X3N0YXRzNjQJPSB0ZzNfZ2V0X3N0YXRzNjQsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSB0ZzNfc2V0X3J4X21vZGUsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSB0ZzNfc2V0X21hY19hZGRyLApAQCAtMTQyODAsNyArMTQzMTgsNyBAQAogCS5uZG9fb3BlbgkJPSB0ZzNfb3BlbiwKIAkubmRvX3N0b3AJCT0gdGczX2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdAkJPSB0ZzNfc3RhcnRfeG1pdF9kbWFfYnVnLAotCS5uZG9fZ2V0X3N0YXRzCQk9IHRnM19nZXRfc3RhdHMsCisJLm5kb19nZXRfc3RhdHM2NAk9IHRnM19nZXRfc3RhdHM2NCwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHRnM19zZXRfcnhfbW9kZSwKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHRnM19zZXRfbWFjX2FkZHIsCkBAIC0xNDQwNCw3ICsxNDQ0Miw4IEBACiAJfQogCiAJaWYgKCh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3NTVfUExVUykgJiYKLQkgICAgdHAtPnBjaV9jaGlwX3Jldl9pZCAhPSBDSElQUkVWX0lEXzU3MTdfQTApCisJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgIT0gQ0hJUFJFVl9JRF81NzE3X0EwICYmCisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzE5KQogCQlkZXYtPm5ldGRldl9vcHMgPSAmdGczX25ldGRldl9vcHM7CiAJZWxzZQogCQlkZXYtPm5ldGRldl9vcHMgPSAmdGczX25ldGRldl9vcHNfZG1hX2J1ZzsKQEAgLTE0NDY4LDIwICsxNDUwNywyNSBAQAogCSAqIGlzIG9mZiBieSBkZWZhdWx0LCBidXQgY2FuIGJlIGVuYWJsZWQgdXNpbmcgZXRodG9vbC4KIAkgKi8KIAlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSFdfVFNPKSAmJgotCSAgICAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSVBfQ1NVTSkpCisJICAgIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9JUF9DU1VNKSkgewogCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwotCisJCXZsYW5fZmVhdHVyZXNfYWRkKGRldiwgTkVUSUZfRl9UU08pOworCX0KIAlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSFdfVFNPXzIpIHx8CiAJICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTT18zKSkgewotCQlpZiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSVBWNl9DU1VNKQorCQlpZiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSVBWNl9DU1VNKSB7CiAJCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKKwkJCXZsYW5fZmVhdHVyZXNfYWRkKGRldiwgTkVUSUZfRl9UU082KTsKKwkJfQogCQlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSFdfVFNPXzMpIHx8CiAJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc2MSB8fAogCQkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg0ICYmCiAJCSAgICAgR0VUX0NISVBfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IENISVBSRVZfNTc4NF9BWCkgfHwKIAkJCUdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg1IHx8Ci0JCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3ODApCisJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3ODApIHsKIAkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU09fRUNOOworCQkJdmxhbl9mZWF0dXJlc19hZGQoZGV2LCBORVRJRl9GX1RTT19FQ04pOworCQl9CiAJfQogCiAJaWYgKHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzA1X0ExICYmCkBAIC0xNDU5NywyNCArMTQ2NDEsMzEgQEAKIAkJICAgIHRnM19idXNfc3RyaW5nKHRwLCBzdHIpLAogCQkgICAgZGV2LT5kZXZfYWRkcik7CiAKLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfQ09OTkVDVEVEKSB7CisJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0NPTk5FQ1RFRCkgewogCQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwogCQlwaHlkZXYgPSB0cC0+bWRpb19idXMtPnBoeV9tYXBbVEczX1BIWV9NSUlfQUREUl07CiAJCW5ldGRldl9pbmZvKGRldiwKIAkJCSAgICAiYXR0YWNoZWQgUEhZIGRyaXZlciBbJXNdIChtaWlfYnVzOnBoeV9hZGRyPSVzKVxuIiwKIAkJCSAgICBwaHlkZXYtPmRydi0+bmFtZSwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSk7Ci0JfSBlbHNlCisJfSBlbHNlIHsKKwkJY2hhciAqZXRodHlwZTsKKworCQlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfMTBfMTAwX09OTFkpCisJCQlldGh0eXBlID0gIjEwLzEwMEJhc2UtVFgiOworCQllbHNlIGlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19BTllfU0VSREVTKQorCQkJZXRodHlwZSA9ICIxMDAwQmFzZS1TWCI7CisJCWVsc2UKKwkJCWV0aHR5cGUgPSAiMTAvMTAwLzEwMDBCYXNlLVQiOworCiAJCW5ldGRldl9pbmZvKGRldiwgImF0dGFjaGVkIFBIWSBpcyAlcyAoJXMgRXRoZXJuZXQpICIKLQkJCSAgICAiKFdpcmVTcGVlZFslZF0pXG4iLCB0ZzNfcGh5X3N0cmluZyh0cCksCi0JCQkgICAgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfMTBfMTAwX09OTFkpID8gIjEwLzEwMEJhc2UtVFgiIDoKLQkJCSAgICAgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0FOWV9TRVJERVMpID8gIjEwMDBCYXNlLVNYIiA6Ci0JCQkgICAgICAiMTAvMTAwLzEwMDBCYXNlLVQiKSksCi0JCQkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfTk9fRVRIX1dJUkVfU1BFRUQpID09IDApOworCQkJICAgICIoV2lyZVNwZWVkWyVkXSlcbiIsIHRnM19waHlfc3RyaW5nKHRwKSwgZXRodHlwZSwKKwkJCSAgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX05PX0VUSF9XSVJFX1NQRUVEKSA9PSAwKTsKKwl9CiAKIAluZXRkZXZfaW5mbyhkZXYsICJSWGNzdW1zWyVkXSBMaW5rQ2hnUkVHWyVkXSBNSWlycVslZF0gQVNGWyVkXSBUU09jYXBbJWRdXG4iLAogCQkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19SWF9DSEVDS1NVTVMpICE9IDAsCiAJCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1VTRV9MSU5LQ0hHX1JFRykgIT0gMCwKLQkJICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVVNFX01JX0lOVEVSUlVQVCkgIT0gMCwKKwkJICAgICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19VU0VfTUlfSU5URVJSVVBUKSAhPSAwLAogCQkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSAhPSAwLAogCQkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVFNPX0NBUEFCTEUpICE9IDApOwogCW5ldGRldl9pbmZvKGRldiwgImRtYV9yd2N0cmxbJTA4eF0gZG1hX21hc2tbJWQtYml0XVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5oIGIvZHJpdmVycy9uZXQvdGczLmgKaW5kZXggY2U5YzQ5MS4uNDkzN2JkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmgKKysrIGIvZHJpdmVycy9uZXQvdGczLmgKQEAgLTUzLDYgKzUzLDcgQEAKICNkZWZpbmUgIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3NzY1CSAweDE2YjQKICNkZWZpbmUgIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3NzkxCSAweDE2YjIKICNkZWZpbmUgIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3Nzk1CSAweDE2YjYKKyNkZWZpbmUgIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3MTkJIDB4MTY1NwogLyogMHgwNCAtLT4gMHgyYyB1bnVzZWQgKi8KICNkZWZpbmUgVEczUENJX1NVQlZFTkRPUl9JRF9CUk9BRENPTQkJUENJX1ZFTkRPUl9JRF9CUk9BRENPTQogI2RlZmluZSBURzNQQ0lfU1VCREVWSUNFX0lEX0JST0FEQ09NXzk1NzAwQTYJMHgxNjQ0CkBAIC0xNjAsNiArMTYxLDcgQEAKICNkZWZpbmUgICBBU0lDX1JFVl81Nzc4MAkJIDB4NTc3ODAKICNkZWZpbmUgICBBU0lDX1JFVl81NzE3CQkJIDB4NTcxNwogI2RlZmluZSAgIEFTSUNfUkVWXzU3NzY1CQkgMHg1Nzc4NQorI2RlZmluZSAgIEFTSUNfUkVWXzU3MTkJCQkgMHg1NzE5CiAjZGVmaW5lICBHRVRfQ0hJUF9SRVYoQ0hJUF9SRVZfSUQpCSgoQ0hJUF9SRVZfSUQpID4+IDgpCiAjZGVmaW5lICAgQ0hJUFJFVl81NzAwX0FYCQkgMHg3MAogI2RlZmluZSAgIENISVBSRVZfNTcwMF9CWAkJIDB4NzEKQEAgLTIzMSw2ICsyMzMsNyBAQAogI2RlZmluZSAgUENJU1RBVEVfUkVUUllfU0FNRV9ETUEJIDB4MDAwMDIwMDAKICNkZWZpbmUgIFBDSVNUQVRFX0FMTE9XX0FQRV9DVExTUENfV1IJIDB4MDAwMTAwMDAKICNkZWZpbmUgIFBDSVNUQVRFX0FMTE9XX0FQRV9TSE1FTV9XUgkgMHgwMDAyMDAwMAorI2RlZmluZSAgUENJU1RBVEVfQUxMT1dfQVBFX1BTUEFDRV9XUgkgMHgwMDA0MDAwMAogI2RlZmluZSBURzNQQ0lfQ0xPQ0tfQ1RSTAkJMHgwMDAwMDA3NAogI2RlZmluZSAgQ0xPQ0tfQ1RSTF9DT1JFQ0xLX0RJU0FCTEUJIDB4MDAwMDAyMDAKICNkZWZpbmUgIENMT0NLX0NUUkxfUlhDTEtfRElTQUJMRQkgMHgwMDAwMDQwMApAQCAtNDY4LDYgKzQ3MSw3IEBACiAjZGVmaW5lICBUWF9NT0RFX0ZMT1dfQ1RSTF9FTkFCTEUJIDB4MDAwMDAwMTAKICNkZWZpbmUgIFRYX01PREVfQklHX0JDS09GRl9FTkFCTEUJIDB4MDAwMDAwMjAKICNkZWZpbmUgIFRYX01PREVfTE9OR19QQVVTRV9FTkFCTEUJIDB4MDAwMDAwNDAKKyNkZWZpbmUgIFRYX01PREVfTUJVRl9MT0NLVVBfRklYCSAweDAwMDAwMTAwCiAjZGVmaW5lIE1BQ19UWF9TVEFUVVMJCQkweDAwMDAwNDYwCiAjZGVmaW5lICBUWF9TVEFUVVNfWE9GRkVECQkgMHgwMDAwMDAwMQogI2RlZmluZSAgVFhfU1RBVFVTX1NFTlRfWE9GRgkJIDB4MDAwMDAwMDIKQEAgLTEwNzEsMTAgKzEwNzUsOCBAQAogI2RlZmluZSBURzNfQ1BNVV9IU1RfQUNDCQkweDAwMDAzNjFjCiAjZGVmaW5lICBDUE1VX0hTVF9BQ0NfTUFDQ0xLX01BU0sJIDB4MDAxZjAwMDAKICNkZWZpbmUgIENQTVVfSFNUX0FDQ19NQUNDTEtfNl8yNQkgMHgwMDEzMDAwMAotLyogMHgzNjIwIC0tPiAweDM2MmMgdW51c2VkICovCisvKiAweDM2MjAgLS0+IDB4MzYzMCB1bnVzZWQgKi8KIAotI2RlZmluZSBURzNfQ1BNVV9TVEFUVVMJCQkweDAwMDAzNjJjCi0jZGVmaW5lICBURzNfQ1BNVV9TVEFUVVNfUENJRV9GVU5DCSAweDIwMDAwMDAwCiAjZGVmaW5lIFRHM19DUE1VX0NMQ0tfU1RBVAkJMHgwMDAwMzYzMAogI2RlZmluZSAgQ1BNVV9DTENLX1NUQVRfTUFDX0NMQ0tfTUFTSwkgMHgwMDFmMDAwMAogI2RlZmluZSAgQ1BNVV9DTENLX1NUQVRfTUFDX0NMQ0tfNjJfNQkgMHgwMDAwMDAwMApAQCAtMTg0Miw2ICsxODQ0LDEwIEBACiAjZGVmaW5lICBURzNfUENJRV9MTktDVExfTDFfUExMX1BEX0RJUwkgMHgwMDAwMDA4MAogLyogMHg3ZDU4IC0tPiAweDdlNzAgdW51c2VkICovCiAKKyNkZWZpbmUgVEczX1BDSUVfUEhZX1RTVENUTAkJMHgwMDAwN2UyYworI2RlZmluZSAgVEczX1BDSUVfUEhZX1RTVENUTF9QQ0lFMTAJIDB4MDAwMDAwNDAKKyNkZWZpbmUgIFRHM19QQ0lFX1BIWV9UU1RDVExfUFNDUkFNCSAweDAwMDAwMDIwCisKICNkZWZpbmUgVEczX1BDSUVfRUlETEVfREVMQVkJCTB4MDAwMDdlNzAKICNkZWZpbmUgIFRHM19QQ0lFX0VJRExFX0RFTEFZX01BU0sJIDB4MDAwMDAwMWYKICNkZWZpbmUgIFRHM19QQ0lFX0VJRExFX0RFTEFZXzEzX0NMS1MJIDB4MDAwMDAwMGMKQEAgLTIwMzAsMzEgKzIwMzYsOSBAQAogCiAKIC8qIEN1cnJlbnRseSB0aGlzIGlzIGZpeGVkLiAqLwotI2RlZmluZSBURzNfUEhZX1BDSUVfQUREUgkJMHgwMAogI2RlZmluZSBURzNfUEhZX01JSV9BRERSCQkweDAxCiAKIAotLyoqKiBUaWdvbjMgc3BlY2lmaWMgUEhZIFBDSUUgcmVnaXN0ZXJzLiAqKiovCi0KLSNkZWZpbmUgVEczX1BDSUVQSFlfQkxPQ0tfQUREUgkJMHgxZgotI2RlZmluZSAgVEczX1BDSUVQSFlfWEdYU19CTEsxCQkweDA4MDEKLSNkZWZpbmUgIFRHM19QQ0lFUEhZX1RYQl9CTEsJCTB4MDg2MQotI2RlZmluZSAgVEczX1BDSUVQSFlfQkxPQ0tfU0hJRlQJNAotCi0vKiBURzNfUENJRVBIWV9UWEJfQkxLICovCi0jZGVmaW5lIFRHM19QQ0lFUEhZX1RYMENUUkwxCQkweDE1Ci0jZGVmaW5lICBURzNfUENJRVBIWV9UWDBDVFJMMV9UWE9DTQkweDAwMDMKLSNkZWZpbmUgIFRHM19QQ0lFUEhZX1RYMENUUkwxX1JEQ1RMCTB4MDAwOAotI2RlZmluZSAgVEczX1BDSUVQSFlfVFgwQ1RSTDFfVFhDTVYJMHgwMDMwCi0jZGVmaW5lICBURzNfUENJRVBIWV9UWDBDVFJMMV9US1NFTAkweDAwNDAKLSNkZWZpbmUgIFRHM19QQ0lFUEhZX1RYMENUUkwxX05CX0VOCTB4MDQwMAotCi0vKiBURzNfUENJRVBIWV9YR1hTX0JMSzEgKi8KLSNkZWZpbmUgVEczX1BDSUVQSFlfUFdSTUdNVDQJCTB4MWEKLSNkZWZpbmUgVEczX1BDSUVQSFlfUFdSTUdNVDRfTDFQTExQRF9FTgkweDAwMzgKLSNkZWZpbmUgVEczX1BDSUVQSFlfUFdSTUdNVDRfTE9XUFdSX0VOCTB4NDAwMAotCi0KIC8qKiogVGlnb24zIHNwZWNpZmljIFBIWSBNSUkgcmVnaXN0ZXJzLiAqKiovCiAjZGVmaW5lICBURzNfQk1DUl9TUEVFRDEwMDAJCTB4MDA0MAogCkBAIC0yMDczLDggKzIwNTcsOSBAQAogI2RlZmluZSBNSUlfVEczX0VYVF9TVEFUCQkweDExIC8qIEV4dGVuZGVkIHN0YXR1cyByZWdpc3RlciAqLwogI2RlZmluZSAgTUlJX1RHM19FWFRfU1RBVF9MUEFTUwkJMHgwMTAwCiAKKyNkZWZpbmUgTUlJX1RHM19SWFJfQ09VTlRFUlMJCTB4MTQgLyogTG9jYWwvUmVtb3RlIFJlY2VpdmVyIENvdW50cyAqLwogI2RlZmluZSBNSUlfVEczX0RTUF9SV19QT1JUCQkweDE1IC8qIERTUCBjb2VmZmljaWVudCByZWFkL3dyaXRlIHBvcnQgKi8KLQorI2RlZmluZSBNSUlfVEczX0RTUF9DT05UUk9MCQkweDE2IC8qIERTUCBjb250cm9sIHJlZ2lzdGVyICovCiAjZGVmaW5lIE1JSV9URzNfRFNQX0FERFJFU1MJCTB4MTcgLyogRFNQIGFkZHJlc3MgcmVnaXN0ZXIgKi8KIAogI2RlZmluZSBNSUlfVEczX0RTUF9UQVAxCQkweDAwMDEKQEAgLTIwODIsNiArMjA2Nyw3IEBACiAjZGVmaW5lIE1JSV9URzNfRFNQX0FBREoxQ0gwCQkweDAwMWYKICNkZWZpbmUgTUlJX1RHM19EU1BfQUFESjFDSDMJCTB4NjAxZgogI2RlZmluZSAgTUlJX1RHM19EU1BfQUFESjFDSDNfQURDQ0tBREoJMHgwMDAyCisjZGVmaW5lIE1JSV9URzNfRFNQX0VYUDFfSU5UX1NUQVQJMHgwZjAxCiAjZGVmaW5lIE1JSV9URzNfRFNQX0VYUDgJCTB4MGYwOAogI2RlZmluZSAgTUlJX1RHM19EU1BfRVhQOF9SRUoyTUh6CTB4MDAwMQogI2RlZmluZSAgTUlJX1RHM19EU1BfRVhQOF9BRURXCQkweDAyMDAKQEAgLTIxNzcsNiArMjE2Myw4IEBACiAvKiBBUEUgc2hhcmVkIG1lbW9yeS4gIEFjY2Vzc2libGUgdGhyb3VnaCBCQVIxICovCiAjZGVmaW5lIFRHM19BUEVfRldfU1RBVFVTCQkweDQwMGMKICNkZWZpbmUgIEFQRV9GV19TVEFUVVNfUkVBRFkJCSAweDAwMDAwMTAwCisjZGVmaW5lIFRHM19BUEVfRldfRkVBVFVSRVMJCTB4NDAxMAorI2RlZmluZSAgVEczX0FQRV9GV19GRUFUVVJFX05DU0kJIDB4MDAwMDAwMDIKICNkZWZpbmUgVEczX0FQRV9GV19WRVJTSU9OCQkweDQwMTgKICNkZWZpbmUgIEFQRV9GV19WRVJTSU9OX01BSk1TSwkJIDB4ZmYwMDAwMDAKICNkZWZpbmUgIEFQRV9GV19WRVJTSU9OX01BSlNGVAkJIDI0CkBAIC0yMTkxLDcgKzIxNzksOSBAQAogI2RlZmluZSAgQVBFX0hPU1RfU0VHX0xFTl9NQUdJQwkJIDB4MDAwMDAwMWMKICNkZWZpbmUgVEczX0FQRV9IT1NUX0lOSVRfQ09VTlQJCTB4NDIwOAogI2RlZmluZSBURzNfQVBFX0hPU1RfRFJJVkVSX0lECQkweDQyMGMKLSNkZWZpbmUgIEFQRV9IT1NUX0RSSVZFUl9JRF9NQUdJQwkgMHhmMDAzNTEwMAorI2RlZmluZSAgQVBFX0hPU1RfRFJJVkVSX0lEX0xJTlVYCSAweGYwMDAwMDAwCisjZGVmaW5lICBBUEVfSE9TVF9EUklWRVJfSURfTUFHSUMobWFqLCBtaW4pCVwKKwkoQVBFX0hPU1RfRFJJVkVSX0lEX0xJTlVYIHwgKG1haiAmIDB4ZmYpIDw8IDE2IHwgKG1pbiAmIDB4ZmYpIDw8IDgpCiAjZGVmaW5lIFRHM19BUEVfSE9TVF9CRUhBVklPUgkJMHg0MjEwCiAjZGVmaW5lICBBUEVfSE9TVF9CRUhBVl9OT19QSFlMT0NLCSAweDAwMDAwMDAxCiAjZGVmaW5lIFRHM19BUEVfSE9TVF9IRUFSVEJFQVRfSU5UX01TCTB4NDIxNApAQCAtMjIwOSw2ICsyMTk5LDExIEBACiAjZGVmaW5lICBBUEVfRVZFTlRfU1RBVFVTX1NUQVRFX1NVU1BFTkQJIDB4MDAwNDAwMDAKICNkZWZpbmUgIEFQRV9FVkVOVF9TVEFUVVNfRVZFTlRfUEVORElORwkgMHg4MDAwMDAwMAogCisjZGVmaW5lIFRHM19BUEVfUEVSX0xPQ0tfUkVRCQkweDg0MDAKKyNkZWZpbmUgIEFQRV9MT0NLX1BFUl9SRVFfRFJJVkVSCSAweDAwMDAxMDAwCisjZGVmaW5lIFRHM19BUEVfUEVSX0xPQ0tfR1JBTlQJCTB4ODQyMAorI2RlZmluZSAgQVBFX1BFUl9MT0NLX0dSQU5UX0RSSVZFUgkgMHgwMDAwMTAwMAorCiAvKiBBUEUgY29udmVuaWVuY2UgZW51bWVyYXRpb25zLiAqLwogI2RlZmluZSBURzNfQVBFX0xPQ0tfR1JDICAgICAgICAgICAgICAgIDEKICNkZWZpbmUgVEczX0FQRV9MT0NLX01FTSAgICAgICAgICAgICAgICA0CkBAIC0yNTM5LDcgKzI1MzQsNiBAQAogCS8qIFdoZW4gd2UgZ28gaW4gYW5kIG91dCBvZiBsb3cgcG93ZXIgbW9kZSB3ZSBuZWVkCiAJICogdG8gc3dhcCB3aXRoIHRoaXMgc3RhdGUuCiAJICovCi0JaW50CQkJCXBoeV9pc19sb3dfcG93ZXI7CiAJdTE2CQkJCW9yaWdfc3BlZWQ7CiAJdTgJCQkJb3JpZ19kdXBsZXg7CiAJdTgJCQkJb3JpZ19hdXRvbmVnOwpAQCAtMjc2NSw4ICsyNzU5LDggQEAKIAogCiAJLyogYmVnaW4gImV2ZXJ5dGhpbmcgZWxzZSIgY2FjaGVsaW5lKHMpIHNlY3Rpb24gKi8KLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwkJbmV0X3N0YXRzOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCQluZXRfc3RhdHNfcHJldjsKKwlzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQJbmV0X3N0YXRzOworCXN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NAluZXRfc3RhdHNfcHJldjsKIAlzdHJ1Y3QgdGczX2V0aHRvb2xfc3RhdHMJZXN0YXRzOwogCXN0cnVjdCB0ZzNfZXRodG9vbF9zdGF0cwllc3RhdHNfcHJldjsKIApAQCAtMjc4MCw3ICsyNzc0LDYgQEAKICNkZWZpbmUgVEczX0ZMQUdfVFhEX01CT1hfSFdCVUcJCTB4MDAwMDAwMDIKICNkZWZpbmUgVEczX0ZMQUdfUlhfQ0hFQ0tTVU1TCQkweDAwMDAwMDA0CiAjZGVmaW5lIFRHM19GTEFHX1VTRV9MSU5LQ0hHX1JFRwkweDAwMDAwMDA4Ci0jZGVmaW5lIFRHM19GTEFHX1VTRV9NSV9JTlRFUlJVUFQJMHgwMDAwMDAxMAogI2RlZmluZSBURzNfRkxBR19FTkFCTEVfQVNGCQkweDAwMDAwMDIwCiAjZGVmaW5lIFRHM19GTEFHX0FTUE1fV09SS0FST1VORAkweDAwMDAwMDQwCiAjZGVmaW5lIFRHM19GTEFHX1BPTExfU0VSREVTCQkweDAwMDAwMDgwCkBAIC0yODAyLDcgKzI3OTUsNiBAQAogI2RlZmluZSBURzNfRkxBR19UWF9SRUNPVkVSWV9QRU5ESU5HCTB4MDAyMDAwMDAKICNkZWZpbmUgVEczX0ZMQUdfV09MX0NBUAkJMHgwMDQwMDAwMAogI2RlZmluZSBURzNfRkxBR19KVU1CT19SSU5HX0VOQUJMRQkweDAwODAwMDAwCi0jZGVmaW5lIFRHM19GTEFHXzEwXzEwMF9PTkxZCQkweDAxMDAwMDAwCiAjZGVmaW5lIFRHM19GTEFHX1BBVVNFX0FVVE9ORUcJCTB4MDIwMDAwMDAKICNkZWZpbmUgVEczX0ZMQUdfQ1BNVV9QUkVTRU5UCQkweDA0MDAwMDAwCiAjZGVmaW5lIFRHM19GTEFHXzQwQklUX0RNQV9CVUcJCTB4MDgwMDAwMDAKQEAgLTI4MTMsMjIgKzI4MDUsMTUgQEAKIAl1MzIJCQkJdGczX2ZsYWdzMjsKICNkZWZpbmUgVEczX0ZMRzJfUkVTVEFSVF9USU1FUgkJMHgwMDAwMDAwMQogI2RlZmluZSBURzNfRkxHMl9UU09fQlVHCQkweDAwMDAwMDAyCi0jZGVmaW5lIFRHM19GTEcyX05PX0VUSF9XSVJFX1NQRUVECTB4MDAwMDAwMDQKICNkZWZpbmUgVEczX0ZMRzJfSVNfNTc4OAkJMHgwMDAwMDAwOAogI2RlZmluZSBURzNfRkxHMl9NQVhfUlhQRU5EXzY0CQkweDAwMDAwMDEwCiAjZGVmaW5lIFRHM19GTEcyX1RTT19DQVBBQkxFCQkweDAwMDAwMDIwCi0jZGVmaW5lIFRHM19GTEcyX1BIWV9BRENfQlVHCQkweDAwMDAwMDQwCi0jZGVmaW5lIFRHM19GTEcyX1BIWV81NzA0X0EwX0JVRwkweDAwMDAwMDgwCi0jZGVmaW5lIFRHM19GTEcyX1BIWV9CRVJfQlVHCQkweDAwMDAwMTAwCiAjZGVmaW5lIFRHM19GTEcyX1BDSV9FWFBSRVNTCQkweDAwMDAwMjAwCiAjZGVmaW5lIFRHM19GTEcyX0FTRl9ORVdfSEFORFNIQUtFCTB4MDAwMDA0MDAKICNkZWZpbmUgVEczX0ZMRzJfSFdfQVVUT05FRwkJMHgwMDAwMDgwMAogI2RlZmluZSBURzNfRkxHMl9JU19OSUMJCQkweDAwMDAxMDAwCi0jZGVmaW5lIFRHM19GTEcyX1BIWV9TRVJERVMJCTB4MDAwMDIwMDAKLSNkZWZpbmUgVEczX0ZMRzJfQ0FQQUNJVElWRV9DT1VQTElORwkweDAwMDA0MDAwCiAjZGVmaW5lIFRHM19GTEcyX0ZMQVNICQkJMHgwMDAwODAwMAogI2RlZmluZSBURzNfRkxHMl9IV19UU09fMQkJMHgwMDAxMDAwMAotI2RlZmluZSBURzNfRkxHMl9TRVJERVNfUFJFRU1QSEFTSVMJMHgwMDAyMDAwMAogI2RlZmluZSBURzNfRkxHMl81NzA1X1BMVVMJCTB4MDAwNDAwMDAKICNkZWZpbmUgVEczX0ZMRzJfNTc1MF9QTFVTCQkweDAwMDgwMDAwCiAjZGVmaW5lIFRHM19GTEcyX0hXX1RTT18zCQkweDAwMTAwMDAwCkBAIC0yODM2LDEwICsyODIxLDYgQEAKICNkZWZpbmUgVEczX0ZMRzJfVVNJTkdfTVNJWAkJMHgwMDQwMDAwMAogI2RlZmluZSBURzNfRkxHMl9VU0lOR19NU0lfT1JfTVNJWAkoVEczX0ZMRzJfVVNJTkdfTVNJIHwgXAogCQkJCQlURzNfRkxHMl9VU0lOR19NU0lYKQotI2RlZmluZSBURzNfRkxHMl9NSUlfU0VSREVTCQkweDAwODAwMDAwCi0jZGVmaW5lIFRHM19GTEcyX0FOWV9TRVJERVMJCShURzNfRkxHMl9QSFlfU0VSREVTIHwJXAotCQkJCQlURzNfRkxHMl9NSUlfU0VSREVTKQotI2RlZmluZSBURzNfRkxHMl9QQVJBTExFTF9ERVRFQ1QJMHgwMTAwMDAwMAogI2RlZmluZSBURzNfRkxHMl9JQ0hfV09SS0FST1VORAkJMHgwMjAwMDAwMAogI2RlZmluZSBURzNfRkxHMl81NzgwX0NMQVNTCQkweDA0MDAwMDAwCiAjZGVmaW5lIFRHM19GTEcyX0hXX1RTT18yCQkweDA4MDAwMDAwCkBAIC0yODQ3LDkgKzI4MjgsNyBAQAogCQkJCQkgVEczX0ZMRzJfSFdfVFNPXzIgfCBcCiAJCQkJCSBURzNfRkxHMl9IV19UU09fMykKICNkZWZpbmUgVEczX0ZMRzJfMVNIT1RfTVNJCQkweDEwMDAwMDAwCi0jZGVmaW5lIFRHM19GTEcyX1BIWV9KSVRURVJfQlVHCQkweDIwMDAwMDAwCiAjZGVmaW5lIFRHM19GTEcyX05PX0ZXQVJFX1JFUE9SVEVECTB4NDAwMDAwMDAKLSNkZWZpbmUgVEczX0ZMRzJfUEhZX0FESlVTVF9UUklNCTB4ODAwMDAwMDAKIAl1MzIJCQkJdGczX2ZsYWdzMzsKICNkZWZpbmUgVEczX0ZMRzNfTk9fTlZSQU1fQUREUl9UUkFOUwkweDAwMDAwMDAxCiAjZGVmaW5lIFRHM19GTEczX0VOQUJMRV9BUEUJCTB4MDAwMDAwMDIKQEAgLTI4NTcsMTUgKzI4MzYsMTIgQEAKICNkZWZpbmUgVEczX0ZMRzNfNTcwMV9ETUFfQlVHCQkweDAwMDAwMDA4CiAjZGVmaW5lIFRHM19GTEczX1VTRV9QSFlMSUIJCTB4MDAwMDAwMTAKICNkZWZpbmUgVEczX0ZMRzNfTURJT0JVU19JTklURUQJCTB4MDAwMDAwMjAKLSNkZWZpbmUgVEczX0ZMRzNfUEhZX0NPTk5FQ1RFRAkJMHgwMDAwMDA4MAogI2RlZmluZSBURzNfRkxHM19SR01JSV9JTkJBTkRfRElTQUJMRQkweDAwMDAwMTAwCiAjZGVmaW5lIFRHM19GTEczX1JHTUlJX0VYVF9JQk5EX1JYX0VOCTB4MDAwMDAyMDAKICNkZWZpbmUgVEczX0ZMRzNfUkdNSUlfRVhUX0lCTkRfVFhfRU4JMHgwMDAwMDQwMAogI2RlZmluZSBURzNfRkxHM19DTEtSRVFfQlVHCQkweDAwMDAwODAwCi0jZGVmaW5lIFRHM19GTEczX1BIWV9FTkFCTEVfQVBECQkweDAwMDAxMDAwCiAjZGVmaW5lIFRHM19GTEczXzU3NTVfUExVUwkJMHgwMDAwMjAwMAogI2RlZmluZSBURzNfRkxHM19OT19OVlJBTQkJMHgwMDAwNDAwMAotI2RlZmluZSBURzNfRkxHM19QSFlfSVNfRkVUCQkweDAwMDEwMDAwCiAjZGVmaW5lIFRHM19GTEczX0VOQUJMRV9SU1MJCTB4MDAwMjAwMDAKICNkZWZpbmUgVEczX0ZMRzNfRU5BQkxFX1RTUwkJMHgwMDA0MDAwMAogI2RlZmluZSBURzNfRkxHM180R19ETUFfQk5EUllfQlVHCTB4MDAwODAwMDAKQEAgLTI4NzMsNiArMjg0OSw3IEBACiAjZGVmaW5lIFRHM19GTEczX1NIT1JUX0RNQV9CVUcJCTB4MDAyMDAwMDAKICNkZWZpbmUgVEczX0ZMRzNfVVNFX0pVTUJPX0JERkxBRwkweDAwNDAwMDAwCiAjZGVmaW5lIFRHM19GTEczX0wxUExMUERfRU4JCTB4MDA4MDAwMDAKKyNkZWZpbmUgVEczX0ZMRzNfNTcxN19QTFVTCQkweDAxMDAwMDAwCiAKIAlzdHJ1Y3QgdGltZXJfbGlzdAkJdGltZXI7CiAJdTE2CQkJCXRpbWVyX2NvdW50ZXI7CkBAIC0yOTQyLDYgKzI5MTksNyBAQAogI2RlZmluZSBURzNfUEhZX0lEX0JDTTU3MThDCQkweDVjMGQ4YTAwCiAjZGVmaW5lIFRHM19QSFlfSURfQkNNNTcxOFMJCTB4YmMwNTBmZjAKICNkZWZpbmUgVEczX1BIWV9JRF9CQ001Nzc2NQkJMHg1YzBkOGE0MAorI2RlZmluZSBURzNfUEhZX0lEX0JDTTU3MTlDCQkweDVjMGQ4YTIwCiAjZGVmaW5lIFRHM19QSFlfSURfQkNNNTkwNgkJMHhkYzAwYWM0MAogI2RlZmluZSBURzNfUEhZX0lEX0JDTTgwMDIJCTB4NjAwMTAxNDAKICNkZWZpbmUgVEczX1BIWV9JRF9JTlZBTElECQkweGZmZmZmZmZmCkBAIC0yOTY1LDcgKzI5NDMsMjkgQEAKIAkgKFgpID09IFRHM19QSFlfSURfQkNNNTc1NSB8fCAoWCkgPT0gVEczX1BIWV9JRF9CQ001NzU2IHx8IFwKIAkgKFgpID09IFRHM19QSFlfSURfQkNNNTkwNiB8fCAoWCkgPT0gVEczX1BIWV9JRF9CQ001NzYxIHx8IFwKIAkgKFgpID09IFRHM19QSFlfSURfQkNNNTcxOEMgfHwgKFgpID09IFRHM19QSFlfSURfQkNNNTcxOFMgfHwgXAotCSAoWCkgPT0gVEczX1BIWV9JRF9CQ001Nzc2NSB8fCAoWCkgPT0gVEczX1BIWV9JRF9CQ004MDAyKQorCSAoWCkgPT0gVEczX1BIWV9JRF9CQ001Nzc2NSB8fCAoWCkgPT0gVEczX1BIWV9JRF9CQ001NzE5QyB8fCBcCisJIChYKSA9PSBURzNfUEhZX0lEX0JDTTgwMDIpCisKKwl1MzIJCQkJcGh5X2ZsYWdzOworI2RlZmluZSBURzNfUEhZRkxHX0lTX0xPV19QT1dFUgkJMHgwMDAwMDAwMQorI2RlZmluZSBURzNfUEhZRkxHX0lTX0NPTk5FQ1RFRAkJMHgwMDAwMDAwMgorI2RlZmluZSBURzNfUEhZRkxHX1VTRV9NSV9JTlRFUlJVUFQJMHgwMDAwMDAwNAorI2RlZmluZSBURzNfUEhZRkxHX1BIWV9TRVJERVMJCTB4MDAwMDAwMTAKKyNkZWZpbmUgVEczX1BIWUZMR19NSUlfU0VSREVTCQkweDAwMDAwMDIwCisjZGVmaW5lIFRHM19QSFlGTEdfQU5ZX1NFUkRFUwkJKFRHM19QSFlGTEdfUEhZX1NFUkRFUyB8CVwKKwkJCQkJVEczX1BIWUZMR19NSUlfU0VSREVTKQorI2RlZmluZSBURzNfUEhZRkxHX0lTX0ZFVAkJMHgwMDAwMDA0MAorI2RlZmluZSBURzNfUEhZRkxHXzEwXzEwMF9PTkxZCQkweDAwMDAwMDgwCisjZGVmaW5lIFRHM19QSFlGTEdfRU5BQkxFX0FQRAkJMHgwMDAwMDEwMAorI2RlZmluZSBURzNfUEhZRkxHX0NBUEFDSVRJVkVfQ09VUExJTkcJMHgwMDAwMDIwMAorI2RlZmluZSBURzNfUEhZRkxHX05PX0VUSF9XSVJFX1NQRUVECTB4MDAwMDA0MDAKKyNkZWZpbmUgVEczX1BIWUZMR19KSVRURVJfQlVHCQkweDAwMDAwODAwCisjZGVmaW5lIFRHM19QSFlGTEdfQURKVVNUX1RSSU0JCTB4MDAwMDEwMDAKKyNkZWZpbmUgVEczX1BIWUZMR19BRENfQlVHCQkweDAwMDAyMDAwCisjZGVmaW5lIFRHM19QSFlGTEdfNTcwNF9BMF9CVUcJCTB4MDAwMDQwMDAKKyNkZWZpbmUgVEczX1BIWUZMR19CRVJfQlVHCQkweDAwMDA4MDAwCisjZGVmaW5lIFRHM19QSFlGTEdfU0VSREVTX1BSRUVNUEhBU0lTCTB4MDAwMTAwMDAKKyNkZWZpbmUgVEczX1BIWUZMR19QQVJBTExFTF9ERVRFQ1QJMHgwMDAyMDAwMAogCiAJdTMyCQkJCWxlZF9jdHJsOwogCXUzMgkJCQlwaHlfb3RwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jCmluZGV4IDA2YjU1MmYuLjVlZmE1NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlMjEwNHguYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMKQEAgLTI2MiwxMyArMjYyLDEzIEBACiAJdTE2CQkJY3NyMTM7CiAJdTE2CQkJY3NyMTQ7CiAJdTE2CQkJY3NyMTU7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGRlX3Nyb21faW5mb19sZWFmIHsKIAl1MTYJCQlkZWZhdWx0X21lZGlhOwogCXU4CQkJbl9ibG9ja3M7CiAJdTgJCQl1bnVzZWQ7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGRlX2Rlc2MgewogCV9fbGUzMgkJCW9wdHMxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jCmluZGV4IDI5ZTZjNjMuLjBiYzRmMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMKQEAgLTU4OSw3ICs1ODksNyBAQAogCQlkYi0+ZG05MTB4X2Noa19tb2RlID0gMTsJLyogRW50ZXIgdGhlIGNoZWNrIG1vZGUgKi8KIAl9CiAKLQkvKiBJbml0aWxpemUgRE05MTBYIGJvYXJkICovCisJLyogSW5pdGlhbGl6ZSBETTkxMFggYm9hcmQgKi8KIAlkbWZlX2luaXRfZG05MTB4KGRldik7CiAKIAkvKiBBY3RpdmUgU3lzdGVtIEludGVyZmFjZSAqLwpAQCAtNjA2LDkgKzYwNiw5IEBACiB9CiAKIAotLyoJSW5pdGlsaXplIERNOTEwWCBib2FyZAorLyoJSW5pdGlhbGl6ZSBETTkxMFggYm9hcmQKICAqCVJlc2V0IERNOTEwWCBib2FyZAotICoJSW5pdGlsaXplIFRYL1J4IGRlc2NyaXB0b3IgY2hhaW4gc3RydWN0dXJlCisgKglJbml0aWFsaXplIFRYL1J4IGRlc2NyaXB0b3IgY2hhaW4gc3RydWN0dXJlCiAgKglTZW5kIHRoZSBzZXQtdXAgZnJhbWUKICAqCUVuYWJsZSBUeC9SeCBtYWNoaW5lCiAgKi8KQEAgLTY0OSw3ICs2NDksNyBAQAogCWlmICggIShkYi0+bWVkaWFfbW9kZSAmIERNRkVfQVVUTykgKQogCQlkYi0+b3BfbW9kZSA9IGRiLT5tZWRpYV9tb2RlOyAJLyogRm9yY2UgTW9kZSAqLwogCi0JLyogSW5pdGlsaWF6ZSBUcmFuc21pdC9SZWNlaXZlIGRlY3JpcHRvciBhbmQgQ1IzLzQgKi8KKwkvKiBJbml0aWFsaXplIFRyYW5zbWl0L1JlY2VpdmUgZGVjcmlwdG9yIGFuZCBDUjMvNCAqLwogCWRtZmVfZGVzY3JpcHRvcl9pbml0KGRiLCBpb2FkZHIpOwogCiAJLyogSW5pdCBDUjYgdG8gcHJvZ3JhbSBETTkxMHggb3BlcmF0aW9uICovCkBAIC0xMjg4LDcgKzEyODgsNyBAQAogICoJU3RvcCBETTkxMFggYm9hcmQKICAqCUZyZWUgVHgvUnggYWxsb2NhdGVkIG1lbW9yeQogICoJUmVzZXQgRE05MTBYIGJvYXJkCi0gKglSZS1pbml0aWxpemUgRE05MTBYIGJvYXJkCisgKglSZS1pbml0aWFsaXplIERNOTEwWCBib2FyZAogICovCiAKIHN0YXRpYyB2b2lkIGRtZmVfZHluYW1pY19yZXNldChzdHJ1Y3QgREVWSUNFICpkZXYpCkBAIC0xMzE2LDcgKzEzMTYsNyBAQAogCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAJZGItPndhaXRfcmVzZXQgPSAwOwogCi0JLyogUmUtaW5pdGlsaXplIERNOTEwWCBib2FyZCAqLworCS8qIFJlLWluaXRpYWxpemUgRE05MTBYIGJvYXJkICovCiAJZG1mZV9pbml0X2RtOTEweChkZXYpOwogCiAJLyogUmVzdGFydCB1cHBlciBsYXllciBpbnRlcmZhY2UgKi8KQEAgLTE0NDcsNyArMTQ0Nyw3IEBACiAKIC8qCiAgKglTZW5kIGEgc2V0dXAgZnJhbWUgZm9yIERNOTEzMgotICoJVGhpcyBzZXR1cCBmcmFtZSBpbml0aWxpemUgRE05MTBYIGFkZHJlc3MgZmlsdGVyIG1vZGUKKyAqCVRoaXMgc2V0dXAgZnJhbWUgaW5pdGlhbGl6ZSBETTkxMFggYWRkcmVzcyBmaWx0ZXIgbW9kZQogKi8KIAogc3RhdGljIHZvaWQgZG05MTMyX2lkX3RhYmxlKHN0cnVjdCBERVZJQ0UgKmRldikKQEAgLTE0ODksNyArMTQ4OSw3IEBACiAKIC8qCiAgKglTZW5kIGEgc2V0dXAgZnJhbWUgZm9yIERNOTEwMi9ETTkxMDJBCi0gKglUaGlzIHNldHVwIGZyYW1lIGluaXRpbGl6ZSBETTkxMFggYWRkcmVzcyBmaWx0ZXIgbW9kZQorICoJVGhpcyBzZXR1cCBmcmFtZSBpbml0aWFsaXplIERNOTEwWCBhZGRyZXNzIGZpbHRlciBtb2RlCiAgKi8KIAogc3RhdGljIHZvaWQgc2VuZF9maWx0ZXJfZnJhbWUoc3RydWN0IERFVklDRSAqZGV2KQpAQCAtMjE0Miw3ICsyMTQyLDcgQEAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaV9kZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGNpX2Rldik7CiAKLQkvKiBSZS1pbml0aWxpemUgRE05MTBYIGJvYXJkICovCisJLyogUmUtaW5pdGlhbGl6ZSBETTkxMFggYm9hcmQgKi8KIAlkbWZlX2luaXRfZG05MTB4KGRldik7CiAKIAkvKiBEaXNhYmxlIFdPTCAqLwpAQCAtMjE5Niw3ICsyMTk2LDcgQEAKIAogLyoJRGVzY3JpcHRpb246CiAgKgl3aGVuIHVzZXIgdXNlZCBpbnNtb2QgdG8gYWRkIG1vZHVsZSwgc3lzdGVtIGludm9rZWQgaW5pdF9tb2R1bGUoKQotICoJdG8gaW5pdGlsaXplIGFuZCByZWdpc3Rlci4KKyAqCXRvIGluaXRpYWxpemUgYW5kIHJlZ2lzdGVyLgogICovCiAKIHN0YXRpYyBpbnQgX19pbml0IGRtZmVfaW5pdF9tb2R1bGUodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2VlcHJvbS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZWVwcm9tLmMKaW5kZXggNjAwMmU2NS4uMzAzMWVkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvZWVwcm9tLmMKQEAgLTEyMCw4ICsxMjAsOCBAQAogCQkJICAweDAwLCAweDA2ICAvKiB0dG0gYml0IG1hcCAqLwogCQkJfTsKIAotCQl0cC0+bXRhYmxlID0gKHN0cnVjdCBtZWRpYXRhYmxlICopCi0JCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWVkaWF0YWJsZSkgKyBzaXplb2Yoc3RydWN0IG1lZGlhbGVhZiksIEdGUF9LRVJORUwpOworCQl0cC0+bXRhYmxlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1lZGlhdGFibGUpICsKKwkJCQkgICAgIHNpemVvZihzdHJ1Y3QgbWVkaWFsZWFmKSwgR0ZQX0tFUk5FTCk7CiAKIAkJaWYgKHRwLT5tdGFibGUgPT0gTlVMTCkKIAkJCXJldHVybjsgLyogSG9ycmlibGUsIGltcG9zc2libGUgZmFpbHVyZS4gKi8KQEAgLTIyNyw5ICsyMjcsOSBAQAogCQkgICAgICAgIHJldHVybjsKIAkJfQogCi0JCW10YWJsZSA9IChzdHJ1Y3QgbWVkaWF0YWJsZSAqKQotCQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IG1lZGlhdGFibGUpICsgY291bnQqc2l6ZW9mKHN0cnVjdCBtZWRpYWxlYWYpLAotCQkJCQlHRlBfS0VSTkVMKTsKKwkJbXRhYmxlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1lZGlhdGFibGUpICsKKwkJCQkgY291bnQgKiBzaXplb2Yoc3RydWN0IG1lZGlhbGVhZiksCisJCQkJIEdGUF9LRVJORUwpOwogCQlpZiAobXRhYmxlID09IE5VTEwpCiAJCQlyZXR1cm47CQkJCS8qIEhvcnJpYmxlLCBpbXBvc3NpYmxlIGZhaWx1cmUuICovCiAJCWxhc3RfbWVkaWF0YWJsZSA9IHRwLT5tdGFibGUgPSBtdGFibGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC90dWxpcC5oIGIvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXAuaAppbmRleCAwYWZhMmQ0Li5lNTI1ODc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC90dWxpcC5oCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwLmgKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTUxLDIyICs1MiwyMyBAQAogCiAKIGVudW0gdGJsX2ZsYWcgewotCUhBU19NSUkJCQk9IDB4MDAwMSwKLQlIQVNfTUVESUFfVEFCTEUJCT0gMHgwMDAyLAotCUNTUjEyX0lOX1NST00JCT0gMHgwMDA0LAotCUFMV0FZU19DSEVDS19NSUkJPSAweDAwMDgsCi0JSEFTX0FDUEkJCT0gMHgwMDEwLAotCU1DX0hBU0hfT05MWQkJPSAweDAwMjAsIC8qIEhhc2gtb25seSBtdWx0aWNhc3QgZmlsdGVyLiAqLwotCUhBU19QTklDTldBWQkJPSAweDAwODAsCi0JSEFTX05XQVkJCT0gMHgwMDQwLCAvKiBVc2VzIGludGVybmFsIE5XYXkgeGN2ci4gKi8KLQlIQVNfSU5UUl9NSVRJR0FUSU9OCT0gMHgwMTAwLAotCUlTX0FTSVgJCQk9IDB4MDIwMCwKLQlIQVNfODAyM1gJCT0gMHgwNDAwLAotCUNPTUVUX01BQ19BRERSCQk9IDB4MDgwMCwKLQlIQVNfUENJX01XSQkJPSAweDEwMDAsCi0JSEFTX1BIWV9JUlEJCT0gMHgyMDAwLAotCUhBU19TV0FQUEVEX1NFRVBST00JPSAweDQwMDAsCi0JTkVFRFNfRkFLRV9NRURJQV9UQUJMRQk9IDB4ODAwMCwKKwlIQVNfTUlJCQkJPSAweDAwMDAxLAorCUhBU19NRURJQV9UQUJMRQkJPSAweDAwMDAyLAorCUNTUjEyX0lOX1NST00JCT0gMHgwMDAwNCwKKwlBTFdBWVNfQ0hFQ0tfTUlJCT0gMHgwMDAwOCwKKwlIQVNfQUNQSQkJPSAweDAwMDEwLAorCU1DX0hBU0hfT05MWQkJPSAweDAwMDIwLCAvKiBIYXNoLW9ubHkgbXVsdGljYXN0IGZpbHRlci4gKi8KKwlIQVNfUE5JQ05XQVkJCT0gMHgwMDA4MCwKKwlIQVNfTldBWQkJPSAweDAwMDQwLCAvKiBVc2VzIGludGVybmFsIE5XYXkgeGN2ci4gKi8KKwlIQVNfSU5UUl9NSVRJR0FUSU9OCT0gMHgwMDEwMCwKKwlJU19BU0lYCQkJPSAweDAwMjAwLAorCUhBU184MDIzWAkJPSAweDAwNDAwLAorCUNPTUVUX01BQ19BRERSCQk9IDB4MDA4MDAsCisJSEFTX1BDSV9NV0kJCT0gMHgwMTAwMCwKKwlIQVNfUEhZX0lSUQkJPSAweDAyMDAwLAorCUhBU19TV0FQUEVEX1NFRVBST00JPSAweDA0MDAwLAorCU5FRURTX0ZBS0VfTUVESUFfVEFCTEUJPSAweDA4MDAwLAorCUNPTUVUX1BNCQk9IDB4MTAwMDAsCiB9OwogCiAKQEAgLTEyMCw2ICsxMjIsMTEgQEAKIAlDU1IxMyA9IDB4NjgsCiAJQ1NSMTQgPSAweDcwLAogCUNTUjE1ID0gMHg3OCwKKwlDU1IxOCA9IDB4ODgsCisJQ1NSMTkgPSAweDhjLAorCUNTUjIwID0gMHg5MCwKKwlDU1IyNyA9IDB4QUMsCisJQ1NSMjggPSAweEIwLAogfTsKIAogLyogcmVnaXN0ZXIgb2Zmc2V0IGFuZCBiaXRzIGZvciBDRkREIFBDSSBjb25maWcgcmVnICovCkBAIC0yODksNiArMjk2LDMwIEBACiAJY3NyNl9tYXNrXzEwMGJ0ID0gKGNzcjZfc2NyIHwgY3NyNl9wY3MgfCBjc3I2X2hiZCksCiB9OwogCitlbnVtIHR1bGlwX2NvbWV0X2NzcjEzX2JpdHMgeworLyogVGhlIExJTktPRkZFIGFuZCBMSU5LT05FIHdvcmsgaW4gY29uanVuY3Rpb24gd2l0aCBMU0NFLCBpLmUuIHRoZXkKKyAqIGRldGVybWluZSB3aGljaCBsaW5rIHN0YXR1cyB0cmFuc2l0aW9uIHdha2VzIHVwIGlmIExTQ0UgaXMKKyAqIGVuYWJsZWQgKi8KKyAgICAgICAgY29tZXRfY3NyMTNfbGlua29mZmUgPSAoMSA8PCAxNyksCisgICAgICAgIGNvbWV0X2NzcjEzX2xpbmtvbmUgPSAoMSA8PCAxNiksCisgICAgICAgIGNvbWV0X2NzcjEzX3dmcmUgPSAoMSA8PCAxMCksCisgICAgICAgIGNvbWV0X2NzcjEzX21wcmUgPSAoMSA8PCA5KSwKKyAgICAgICAgY29tZXRfY3NyMTNfbHNjZSA9ICgxIDw8IDgpLAorICAgICAgICBjb21ldF9jc3IxM193ZnIgPSAoMSA8PCAyKSwKKyAgICAgICAgY29tZXRfY3NyMTNfbXByID0gKDEgPDwgMSksCisgICAgICAgIGNvbWV0X2NzcjEzX2xzYyA9ICgxIDw8IDApLAorfTsKKworZW51bSB0dWxpcF9jb21ldF9jc3IxOF9iaXRzIHsKKyAgICAgICAgY29tZXRfY3NyMThfcG1lc19zdGlja3kgPSAoMSA8PCAyNCksCisgICAgICAgIGNvbWV0X2NzcjE4X3BtX21vZGUgPSAoMSA8PCAxOSksCisgICAgICAgIGNvbWV0X2NzcjE4X2FwbV9tb2RlID0gKDEgPDwgMTgpLAorICAgICAgICBjb21ldF9jc3IxOF9kM2EgPSAoMSA8PCA3KQorfTsKKworZW51bSB0dWxpcF9jb21ldF9jc3IyMF9iaXRzIHsKKyAgICAgICAgY29tZXRfY3NyMjBfcG1lcyA9ICgxIDw8IDE1KSwKK307CiAKIC8qIEtlZXAgdGhlIHJpbmcgc2l6ZXMgYSBwb3dlciBvZiB0d28gZm9yIGVmZmljaWVuY3kuCiAgICBNYWtpbmcgdGhlIFR4IHJpbmcgdG9vIGxhcmdlIGRlY3JlYXNlcyB0aGUgZWZmZWN0aXZlbmVzcyBvZiBjaGFubmVsCkBAIC00MTEsNiArNDQyLDcgQEAKIAl1bnNpZ25lZCBpbnQgY3NyNjsJLyogQ3VycmVudCBDU1I2IGNvbnRyb2wgc2V0dGluZ3MuICovCiAJdW5zaWduZWQgY2hhciBlZXByb21bRUVQUk9NX1NJWkVdOwkvKiBTZXJpYWwgRUVQUk9NIGNvbnRlbnRzLiAqLwogCXZvaWQgKCpsaW5rX2NoYW5nZSkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LCBpbnQgY3NyNSk7CisgICAgICAgIHN0cnVjdCBldGh0b29sX3dvbGluZm8gd29saW5mbzsgICAgICAgIC8qIFdPTCBzZXR0aW5ncyAqLwogCXUxNiBzeW1fYWR2ZXJ0aXNlLCBtaWlfYWR2ZXJ0aXNlOyAvKiBOV2F5IGNhcGFiaWxpdGllcyBhZHZlcnRpc2VkLiAgKi8KIAl1MTYgbHBhcjsJCS8qIDIxMTQzIExpbmsgcGFydG5lciBhYmlsaXR5LiAqLwogCXUxNiBhZHZlcnRpc2luZ1s0XTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwX2NvcmUuYwppbmRleCAyNTQ2NDNlLi4zYThkN2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC90dWxpcF9jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXBfY29yZS5jCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L21paS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMjcyLDYgKzI3MSw3IEBACiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnR1bGlwX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgcHJpdmF0ZV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKIHN0YXRpYyB2b2lkIHNldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgdHVsaXBfc2V0X3dvbG9wdHMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUzMiB3b2xvcHRzKTsKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogc3RhdGljIHZvaWQgcG9sbF90dWxpcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKICNlbmRpZgpAQCAtMzA5LDYgKzMwOSwxMSBAQAogCS8qIFdha2UgdGhlIGNoaXAgZnJvbSBzbGVlcC9zbm9vemUgbW9kZS4gKi8KIAl0dWxpcF9zZXRfcG93ZXJfc3RhdGUgKHRwLCAwLCAwKTsKIAorCS8qIERpc2FibGUgYWxsIFdPTCBldmVudHMgKi8KKwlwY2lfZW5hYmxlX3dha2UodHAtPnBkZXYsIFBDSV9EM2hvdCwgMCk7CisJcGNpX2VuYWJsZV93YWtlKHRwLT5wZGV2LCBQQ0lfRDNjb2xkLCAwKTsKKwl0dWxpcF9zZXRfd29sb3B0cyh0cC0+cGRldiwgMCk7CisKIAkvKiBPbiBzb21lIGNoaXAgcmV2cyB3ZSBtdXN0IHNldCB0aGUgTUlJL1NZTSBwb3J0IGJlZm9yZSB0aGUgcmVzZXQhPyAqLwogCWlmICh0cC0+bWlpX2NudCAgfHwgICh0cC0+bXRhYmxlICAmJiAgdHAtPm10YWJsZS0+aGFzX21paSkpCiAJCWlvd3JpdGUzMigweDAwMDQwMDAwLCBpb2FkZHIgKyBDU1I2KTsKQEAgLTM0NSw4ICszNTAsOCBAQAogCQl9IGVsc2UgaWYgKHRwLT5mbGFncyAmIENPTUVUX01BQ19BRERSKSB7CiAJCQlpb3dyaXRlMzIoYWRkcl9sb3csICBpb2FkZHIgKyAweEE0KTsKIAkJCWlvd3JpdGUzMihhZGRyX2hpZ2gsIGlvYWRkciArIDB4QTgpOwotCQkJaW93cml0ZTMyKDAsIGlvYWRkciArIDB4QUMpOwotCQkJaW93cml0ZTMyKDAsIGlvYWRkciArIDB4QjApOworCQkJaW93cml0ZTMyKDAsIGlvYWRkciArIENTUjI3KTsKKwkJCWlvd3JpdGUzMigwLCBpb2FkZHIgKyBDU1IyOCk7CiAJCX0KIAl9IGVsc2UgewogCQkvKiBUaGlzIGlzIHNldF9yeF9tb2RlKCksIGJ1dCB3aXRob3V0IHN0YXJ0aW5nIHRoZSB0cmFuc21pdHRlci4gKi8KQEAgLTU5MSwxMCArNTk2LDEwIEBACiAJCQkJCXByX2NvbnQoIiAlMDJ4IiwgYnVmW2pdKTsKIAkJCXByX2NvbnQoIiBqPSVkXG4iLCBqKTsKIAkJfQotCQlwcmludGsoS0VSTl9ERUJVRyAiICBSeCByaW5nICUwOHg6ICIsIChpbnQpdHAtPnJ4X3JpbmcpOworCQlwcmludGsoS0VSTl9ERUJVRyAiICBSeCByaW5nICVwOiAiLCB0cC0+cnhfcmluZyk7CiAJCWZvciAoaSA9IDA7IGkgPCBSWF9SSU5HX1NJWkU7IGkrKykKIAkJCXByX2NvbnQoIiAlMDh4IiwgKHVuc2lnbmVkIGludCl0cC0+cnhfcmluZ1tpXS5zdGF0dXMpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiICBUeCByaW5nICUwOHg6ICIsIChpbnQpdHAtPnR4X3JpbmcpOworCQlwcmludGsoS0VSTl9ERUJVRyAiICBUeCByaW5nICVwOiAiLCB0cC0+dHhfcmluZyk7CiAJCWZvciAoaSA9IDA7IGkgPCBUWF9SSU5HX1NJWkU7IGkrKykKIAkJCXByX2NvbnQoIiAlMDh4IiwgKHVuc2lnbmVkIGludCl0cC0+dHhfcmluZ1tpXS5zdGF0dXMpOwogCQlwcl9jb250KCJcbiIpOwpAQCAtODc2LDggKzg4MSwzNSBAQAogCXN0cmNweShpbmZvLT5idXNfaW5mbywgcGNpX25hbWUobnAtPnBkZXYpKTsKIH0KIAorCitzdGF0aWMgaW50IHR1bGlwX2V0aHRvb2xfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2xpbmZvKQoreworCXN0cnVjdCB0dWxpcF9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAod29saW5mby0+d29sb3B0cyAmICh+dHAtPndvbGluZm8uc3VwcG9ydGVkKSkKKwkJICAgcmV0dXJuIC1FT1BOT1RTVVBQOworCisJdHAtPndvbGluZm8ud29sb3B0cyA9IHdvbGluZm8tPndvbG9wdHM7CisJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZ0cC0+cGRldi0+ZGV2LCB0cC0+d29saW5mby53b2xvcHRzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdHVsaXBfZXRodG9vbF9nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2xpbmZvKQoreworCXN0cnVjdCB0dWxpcF9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CisKKwl3b2xpbmZvLT5zdXBwb3J0ZWQgPSB0cC0+d29saW5mby5zdXBwb3J0ZWQ7CisJd29saW5mby0+d29sb3B0cyA9IHRwLT53b2xpbmZvLndvbG9wdHM7CisJcmV0dXJuOworfQorCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0gewotCS5nZXRfZHJ2aW5mbyA9IHR1bGlwX2dldF9kcnZpbmZvCisJLmdldF9kcnZpbmZvID0gdHVsaXBfZ2V0X2RydmluZm8sCisJLnNldF93b2wgICAgID0gdHVsaXBfZXRodG9vbF9zZXRfd29sLAorCS5nZXRfd29sICAgICA9IHR1bGlwX2V0aHRvb2xfZ2V0X3dvbCwKIH07CiAKIC8qIFByb3ZpZGUgaW9jdGwoKSBjYWxscyB0byBleGFtaW5lIHRoZSBNSUkgeGN2ciBzdGF0ZS4gKi8KQEAgLTEwOTMsOCArMTEyNSw4IEBACiAJCQkJaW93cml0ZTMyKDMsIGlvYWRkciArIENTUjEzKTsKIAkJCQlpb3dyaXRlMzIobWNfZmlsdGVyWzFdLCBpb2FkZHIgKyBDU1IxNCk7CiAJCQl9IGVsc2UgaWYgKHRwLT5mbGFncyAmIENPTUVUX01BQ19BRERSKSB7Ci0JCQkJaW93cml0ZTMyKG1jX2ZpbHRlclswXSwgaW9hZGRyICsgMHhBQyk7Ci0JCQkJaW93cml0ZTMyKG1jX2ZpbHRlclsxXSwgaW9hZGRyICsgMHhCMCk7CisJCQkJaW93cml0ZTMyKG1jX2ZpbHRlclswXSwgaW9hZGRyICsgQ1NSMjcpOworCQkJCWlvd3JpdGUzMihtY19maWx0ZXJbMV0sIGlvYWRkciArIENTUjI4KTsKIAkJCX0KIAkJCXRwLT5tY19maWx0ZXJbMF0gPSBtY19maWx0ZXJbMF07CiAJCQl0cC0+bWNfZmlsdGVyWzFdID0gbWNfZmlsdGVyWzFdOwpAQCAtMTMwOSw2ICsxMzQxLDEyIEBACiAgICAgICAgIGlmIChwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfTE1DKSB7CiAJCXByX2VycihQRlggInNraXBwaW5nIExNQyBjYXJkXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CisJfSBlbHNlIGlmIChwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfU0JFICYmCisJCSAgIChwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IFBDSV9TVUJERVZJQ0VfSURfU0JFX1QzRTMgfHwKKwkJICAgIHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gUENJX1NVQkRFVklDRV9JRF9TQkVfMlQzRTNfUDAgfHwKKwkJICAgIHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gUENJX1NVQkRFVklDRV9JRF9TQkVfMlQzRTNfUDEpKSB7CisJCXByX2VycihQRlggInNraXBwaW5nIFNCRSBUM0UzIHBvcnRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAkvKgpAQCAtMTM4MSw2ICsxNDE5LDEzIEBACiAJCXJldHVybiBpOwogCX0KIAorCS8qIFRoZSBjaGlwIHdpbGwgZmFpbCB0byBlbnRlciBhIGxvdy1wb3dlciBzdGF0ZSBsYXRlciB1bmxlc3MKKwkgKiBmaXJzdCBleHBsaWNpdGx5IGNvbW1hbmRlZCBpbnRvIEQwICovCisJaWYgKHBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKSkgeworCQlwcmludGsgKEtFUk5fTk9USUNFIFBGWAorCQkJIkZhaWxlZCB0byBzZXQgcG93ZXIgc3RhdGUgdG8gRDBcbiIpOworCX0KKwogCWlycSA9IHBkZXYtPmlycTsKIAogCS8qIGFsbG9jX2V0aGVyZGV2IGVuc3VyZXMgYWxpZ25lZCBhbmQgemVyb2VkIHByaXZhdGUgc3RydWN0dXJlcyAqLwpAQCAtMTQyNyw2ICsxNDcyLDE5IEBACiAKIAl0cC0+Y2hpcF9pZCA9IGNoaXBfaWR4OwogCXRwLT5mbGFncyA9IHR1bGlwX3RibFtjaGlwX2lkeF0uZmxhZ3M7CisKKwl0cC0+d29saW5mby5zdXBwb3J0ZWQgPSAwOworCXRwLT53b2xpbmZvLndvbG9wdHMgPSAwOworCS8qIENPTUVUOiBFbmFibGUgcG93ZXIgbWFuYWdlbWVudCBvbmx5IGZvciBBTjk4M0IgKi8KKwlpZiAoY2hpcF9pZHggPT0gQ09NRVQgKSB7CisJCXUzMiBzaWc7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZCAocGRldiwgMHg4MCwgJnNpZyk7CisJCWlmIChzaWcgPT0gMHgwOTgxMTMxNykgeworCQkJdHAtPmZsYWdzIHw9IENPTUVUX1BNOworCQkJdHAtPndvbGluZm8uc3VwcG9ydGVkID0gV0FLRV9QSFkgfCBXQUtFX01BR0lDOworCQkJcHJpbnRrKEtFUk5fSU5GTyAidHVsaXBfaW5pdF9vbmU6IEVuYWJsZWQgV09MIHN1cHBvcnQgZm9yIEFOOTgzQlxuIik7CisJCX0KKwl9CiAJdHAtPnBkZXYgPSBwZGV2OwogCXRwLT5iYXNlX2FkZHIgPSBpb2FkZHI7CiAJdHAtPnJldmlzaW9uID0gcGRldi0+cmV2aXNpb247CkBAIC0xNzU5LDExICsxODE3LDQzIEBACiB9CiAKIAorLyogc2V0IHRoZSByZWdpc3RlcnMgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiB3b2xvcHRzICovCitzdGF0aWMgdm9pZCB0dWxpcF9zZXRfd29sb3B0cyAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUzMiB3b2xvcHRzKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHR1bGlwX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5iYXNlX2FkZHI7CisKKwlpZiAodHAtPmZsYWdzICYgQ09NRVRfUE0pIHsKKwkgIAorCQl1bnNpZ25lZCBpbnQgdG1wOworCQkJCisJCXRtcCA9IGlvcmVhZDMyKGlvYWRkciArIENTUjE4KTsKKwkJdG1wICY9IH4oY29tZXRfY3NyMThfcG1lc19zdGlja3kgfCBjb21ldF9jc3IxOF9hcG1fbW9kZSB8IGNvbWV0X2NzcjE4X2QzYSk7CisJCXRtcCB8PSBjb21ldF9jc3IxOF9wbV9tb2RlOworCQlpb3dyaXRlMzIodG1wLCBpb2FkZHIgKyBDU1IxOCk7CisJCQkKKwkJLyogU2V0IHRoZSBXYWtlLXVwIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyIHRvIHRoZSBnaXZlbiBXT0wgb3B0aW9ucyovCisJCXRtcCA9IGlvcmVhZDMyKGlvYWRkciArIENTUjEzKTsKKwkJdG1wICY9IH4oY29tZXRfY3NyMTNfbGlua29mZmUgfCBjb21ldF9jc3IxM19saW5rb25lIHwgY29tZXRfY3NyMTNfd2ZyZSB8IGNvbWV0X2NzcjEzX2xzY2UgfCBjb21ldF9jc3IxM19tcHJlKTsKKwkJaWYgKHdvbG9wdHMgJiBXQUtFX01BR0lDKQorCQkJdG1wIHw9IGNvbWV0X2NzcjEzX21wcmU7CisJCWlmICh3b2xvcHRzICYgV0FLRV9QSFkpCisJCQl0bXAgfD0gY29tZXRfY3NyMTNfbGlua29mZmUgfCBjb21ldF9jc3IxM19saW5rb25lIHwgY29tZXRfY3NyMTNfbHNjZTsKKwkJLyogQ2xlYXIgdGhlIGV2ZW50IGZsYWdzICovCisJCXRtcCB8PSBjb21ldF9jc3IxM193ZnIgfCBjb21ldF9jc3IxM19tcHIgfCBjb21ldF9jc3IxM19sc2M7CisJCWlvd3JpdGUzMih0bXAsIGlvYWRkciArIENTUjEzKTsKKwl9Cit9CisKICNpZmRlZiBDT05GSUdfUE0KIAorCiBzdGF0aWMgaW50IHR1bGlwX3N1c3BlbmQgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CisJcGNpX3Bvd2VyX3QgcHN0YXRlOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHR1bGlwX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCWlmICghZGV2KQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE3NzksNyArMTg2OSwxNiBAQAogc2F2ZV9zdGF0ZToKIAlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSk7CisJcHN0YXRlID0gcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSk7CisJaWYgKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQgJiYgcHN0YXRlICE9IFBDSV9EMCkgeworCQlpbnQgcmM7CisKKwkJdHVsaXBfc2V0X3dvbG9wdHMocGRldiwgdHAtPndvbGluZm8ud29sb3B0cyk7CisJCXJjID0gcGNpX2VuYWJsZV93YWtlKHBkZXYsIHBzdGF0ZSwgdHAtPndvbGluZm8ud29sb3B0cyk7CisJCWlmIChyYykKKwkJCXByaW50aygidHVsaXA6IHBjaV9lbmFibGVfd2FrZSBmYWlsZWQgKCVkKVxuIiwgcmMpOworCX0KKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBzdGF0ZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE3ODgsNyArMTg4NywxMCBAQAogc3RhdGljIGludCB0dWxpcF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdHVsaXBfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPmJhc2VfYWRkcjsKIAlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGludCB0bXA7CiAKIAlpZiAoIWRldikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xODA5LDYgKzE5MTEsMTggQEAKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKKwlpZiAodHAtPmZsYWdzICYgQ09NRVRfUE0pIHsKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKKworCQkvKiBDbGVhciB0aGUgUE1FUyBmbGFnICovCisJCXRtcCA9IGlvcmVhZDMyKGlvYWRkciArIENTUjIwKTsKKwkJdG1wIHw9IGNvbWV0X2NzcjIwX3BtZXM7CisJCWlvd3JpdGUzMih0bXAsIGlvYWRkciArIENTUjIwKTsKKworCQkvKiBEaXNhYmxlIGFsbCB3YWtlLXVwIGV2ZW50cyAqLworCQl0dWxpcF9zZXRfd29sb3B0cyhwZGV2LCAwKTsKKwl9CiAJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMgYi9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jCmluZGV4IDYwOGIyNzkuLjY2ZDQxY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYwpAQCAtMTUxNCwxMiArMTUxNCwxMiBAQAogCWlmIChkZWJ1ZyA+IDIpIHsKIAkJaW50IGk7CiAKLQkJcHJpbnRrKEtFUk5fREVCVUciICBUeCByaW5nIGF0ICUwOHg6XG4iLCAoaW50KW5wLT50eF9yaW5nKTsKKwkJcHJpbnRrKEtFUk5fREVCVUciICBUeCByaW5nIGF0ICVwOlxuIiwgbnAtPnR4X3JpbmcpOwogCQlmb3IgKGkgPSAwOyBpIDwgVFhfUklOR19TSVpFOyBpKyspCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiICMlZCBkZXNjLiAlMDR4ICUwNHggJTA4eFxuIiwKIAkJCSAgICAgICBpLCBucC0+dHhfcmluZ1tpXS5sZW5ndGgsCiAJCQkgICAgICAgbnAtPnR4X3JpbmdbaV0uc3RhdHVzLCBucC0+dHhfcmluZ1tpXS5idWZmZXIxKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgUnggcmluZyAlMDh4OlxuIiwgKGludClucC0+cnhfcmluZyk7CisJCXByaW50ayhLRVJOX0RFQlVHICIgIFJ4IHJpbmcgJXA6XG4iLCBucC0+cnhfcmluZyk7CiAJCWZvciAoaSA9IDA7IGkgPCBSWF9SSU5HX1NJWkU7IGkrKykgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAjJWQgZGVzYy4gJTA0eCAlMDR4ICUwOHhcbiIsCiAJCQkgICAgICAgaSwgbnAtPnJ4X3JpbmdbaV0ubGVuZ3RoLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVuLmMgYi9kcml2ZXJzL25ldC90dW4uYwppbmRleCA2YWQ2ZmU3Li41NWYzYTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dW4uYworKysgYi9kcml2ZXJzL25ldC90dW4uYwpAQCAtMTQ5LDYgKzE0OSw3IEBACiAJdGZpbGUtPnR1biA9IHR1bjsKIAl0dW4tPnRmaWxlID0gdGZpbGU7CiAJdHVuLT5zb2NrZXQuZmlsZSA9IGZpbGU7CisJbmV0aWZfY2Fycmllcl9vbih0dW4tPmRldik7CiAJZGV2X2hvbGQodHVuLT5kZXYpOwogCXNvY2tfaG9sZCh0dW4tPnNvY2tldC5zayk7CiAJYXRvbWljX2luYygmdGZpbGUtPmNvdW50KTsKQEAgLTE2Miw2ICsxNjMsNyBAQAogewogCS8qIERldGFjaCBmcm9tIG5ldCBkZXZpY2UgKi8KIAluZXRpZl90eF9sb2NrX2JoKHR1bi0+ZGV2KTsKKwluZXRpZl9jYXJyaWVyX29mZih0dW4tPmRldik7CiAJdHVuLT50ZmlsZSA9IE5VTEw7CiAJdHVuLT5zb2NrZXQuZmlsZSA9IE5VTEw7CiAJbmV0aWZfdHhfdW5sb2NrX2JoKHR1bi0+ZGV2KTsKQEAgLTczNiw4ICs3MzgsMTggQEAKIAkJCQlnc28uZ3NvX3R5cGUgPSBWSVJUSU9fTkVUX0hEUl9HU09fVENQVjY7CiAJCQllbHNlIGlmIChzaW5mby0+Z3NvX3R5cGUgJiBTS0JfR1NPX1VEUCkKIAkJCQlnc28uZ3NvX3R5cGUgPSBWSVJUSU9fTkVUX0hEUl9HU09fVURQOwotCQkJZWxzZQotCQkJCUJVRygpOworCQkJZWxzZSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJ0dW46IHVuZXhwZWN0ZWQgR1NPIHR5cGU6ICIKKwkJCQkgICAgICAgIjB4JXgsIGdzb19zaXplICVkLCBoZHJfbGVuICVkXG4iLAorCQkJCSAgICAgICBzaW5mby0+Z3NvX3R5cGUsIGdzby5nc29fc2l6ZSwKKwkJCQkgICAgICAgZ3NvLmhkcl9sZW4pOworCQkJCXByaW50X2hleF9kdW1wKEtFUk5fRVJSLCAidHVuOiAiLAorCQkJCQkgICAgICAgRFVNUF9QUkVGSVhfTk9ORSwKKwkJCQkJICAgICAgIDE2LCAxLCBza2ItPmhlYWQsCisJCQkJCSAgICAgICBtaW4oKGludClnc28uaGRyX2xlbiwgNjQpLCB0cnVlKTsKKwkJCQlXQVJOX09OX09OQ0UoMSk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CiAJCQlpZiAoc2luZm8tPmdzb190eXBlICYgU0tCX0dTT19UQ1BfRUNOKQogCQkJCWdzby5nc29fdHlwZSB8PSBWSVJUSU9fTkVUX0hEUl9HU09fRUNOOwogCQl9IGVsc2UKQEAgLTE1NjQsMTIgKzE1NzYsNiBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyB1MzIgdHVuX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuICEhdHVuLT50ZmlsZTsKLX0KLQogc3RhdGljIHUzMiB0dW5fZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTE1OTEsNyArMTU5Nyw3IEBACiAJLmdldF9kcnZpbmZvCT0gdHVuX2dldF9kcnZpbmZvLAogCS5nZXRfbXNnbGV2ZWwJPSB0dW5fZ2V0X21zZ2xldmVsLAogCS5zZXRfbXNnbGV2ZWwJPSB0dW5fc2V0X21zZ2xldmVsLAotCS5nZXRfbGluawk9IHR1bl9nZXRfbGluaywKKwkuZ2V0X2xpbmsJPSBldGh0b29sX29wX2dldF9saW5rLAogCS5nZXRfcnhfY3N1bQk9IHR1bl9nZXRfcnhfY3N1bSwKIAkuc2V0X3J4X2NzdW0JPSB0dW5fc2V0X3J4X2NzdW0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90eXBob29uLmMgYi9kcml2ZXJzL25ldC90eXBob29uLmMKaW5kZXggMjJiZGU0OS4uMmU1MDA3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHlwaG9vbi5jCisrKyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uYwpAQCAtMjU1LDcgKzI1NSw3IEBACiAJc3RydWN0IHJ4X2ZyZWUJCQlyeEJ1ZmZbUlhGUkVFX0VOVFJJRVNdCV9fM3hwX2FsaWduZWQ7CiAJdTMyCQkJCXplcm9Xb3JkOwogCXN0cnVjdCB0eF9kZXNjCQkJdHhIaVtUWEhJX0VOVFJJRVNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgcnhidWZmX2VudCB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R5cGhvb24uaCBiL2RyaXZlcnMvbmV0L3R5cGhvb24uaAppbmRleCA2NzNmZDUxLi44ODE4N2ZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90eXBob29uLmgKKysrIGIvZHJpdmVycy9uZXQvdHlwaG9vbi5oCkBAIC03Nyw3ICs3Nyw3IEBACiAJdm9sYXRpbGUgX19sZTMyIGNtZENsZWFyZWQ7CiAJdm9sYXRpbGUgX19sZTMyIHJlc3BSZWFkeTsKIAl2b2xhdGlsZSBfX2xlMzIgcnhIaVJlYWR5OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBUaGUgaG9zdDwtPlR5cGhvb24gaW50ZXJmYWNlCiAgKiBPdXIgbWVhbnMgb2YgY29tbXVuaWNhdGluZyB3aGVyZSB0aGluZ3MgYXJlCkBAIC0xMjUsNyArMTI1LDcgQEAKIAlfX2xlMzIgcnhIaUFkZHI7CiAJX19sZTMyIHJ4SGlBZGRySGk7CiAJX19sZTMyIHJ4SGlTaXplOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBUaGUgVHlwaG9vbiB0cmFuc21pdC9mcmFnbWVudCBkZXNjcmlwdG9yCiAgKgpAQCAtMTg3LDcgKzE4Nyw3IEBACiAjZGVmaW5lIFRZUEhPT05fVFhfUEZfVkxBTl9NQVNLCQljcHVfdG9fbGUzMigweDBmZmZmMDAwKQogI2RlZmluZSBUWVBIT09OX1RYX1BGX0lOVEVSTkFMCQljcHVfdG9fbGUzMigweGYwMDAwMDAwKQogI2RlZmluZSBUWVBIT09OX1RYX1BGX1ZMQU5fVEFHX1NISUZUCTEyCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIFRoZSBUQ1AgU2VnbWVudGF0aW9uIG9mZmxvYWQgb3B0aW9uIGRlc2NyaXB0b3IKICAqCkBAIC0yMDgsNyArMjA4LDcgQEAKIAlfX2xlMzIgcmVzcEFkZHJMbzsKIAlfX2xlMzIgYnl0ZXNUeDsKIAlfX2xlMzIgc3RhdHVzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBUaGUgSVBTRUMgT2ZmbG9hZCBkZXNjcmlwdG9yCiAgKgpAQCAtMjI3LDcgKzIyNyw3IEBACiAJX19sZTMyIHNhMTsKIAlfX2xlMzIgc2EyOwogCV9fbGUzMiByZXNlcnZlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogVGhlIFR5cGhvb24gcmVjZWl2ZSBkZXNjcmlwdG9yIChVcGRhdGVkIGJ5IE5JQykKICAqCkBAIC0yODQsNyArMjg0LDcgQEAKICNkZWZpbmUgVFlQSE9PTl9SWF9VTktOT1dOX1NBCQljcHVfdG9fbGUxNigweDAxMDApCiAjZGVmaW5lIFRZUEhPT05fUlhfRVNQX0ZPUk1BVF9FUlIJY3B1X3RvX2xlMTYoMHgwMjAwKQogCV9fYmUzMiB2bGFuVGFnOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBUaGUgVHlwaG9vbiBmcmVlIGJ1ZmZlciBkZXNjcmlwdG9yLCB1c2VkIHRvIGdpdmUgYSBidWZmZXIgdG8gdGhlIE5JQwogICoKQEAgLTMwMSw3ICszMDEsNyBAQAogCV9fbGUzMiBwaHlzQWRkckhpOwogCXUzMiB2aXJ0QWRkcjsKIAl1MzIgdmlydEFkZHJIaTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogVGhlIFR5cGhvb24gY29tbWFuZCBkZXNjcmlwdG9yLCB1c2VkIGZvciBjb21tYW5kcyBhbmQgcmVzcG9uc2VzCiAgKgpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAJX19sZTE2IHBhcm0xOwogCV9fbGUzMiBwYXJtMjsKIAlfX2xlMzIgcGFybTM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIFRoZSBUeXBob29uIHJlc3BvbnNlIGRlc2NyaXB0b3IsIHNlZSBjb21tYW5kIGRlc2NyaXB0b3IgZm9yIGRldGFpbHMKICAqLwpAQCAtMzU5LDcgKzM1OSw3IEBACiAJX19sZTE2IHBhcm0xOwogCV9fbGUzMiBwYXJtMjsKIAlfX2xlMzIgcGFybTM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSU5JVF9DT01NQU5EX05PX1JFU1BPTlNFKHgsIGNvbW1hbmQpCQkJCVwKIAlkbyB7IHN0cnVjdCBjbWRfZGVzYyAqX3B0ciA9ICh4KTsJCQkJXApAQCAtNDI3LDcgKzQyNyw3IEBACiAjZGVmaW5lIFRZUEhPT05fTElOS19IQUxGX0RVUExFWAljcHVfdG9fbGUzMigweDAwMDAwMDAwKQogCV9fbGUzMiB1bnVzZWQyOwogCV9fbGUzMiB1bnVzZWQzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBUWVBIT09OX0NNRF9YQ1ZSX1NFTEVDVCB4Y3ZyIHZhbHVlcyAocmVzcC5wYXJtMSkKICAqLwpAQCAtNDg4LDcgKzQ4OCw3IEBACiAJdTMyIGluZGV4OwogCXUzMiB1bnVzZWQ7CiAJdTMyIHVudXNlZDI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIFRZUEhPT05fQ01EX1NFVF9PRkZMT0FEX1RBU0tTIGJpdHMgKGNtZC5wYXJtMiAoVHgpICYgY21kLnBhcm0zIChSeCkpCiAgKiBUaGlzIGlzIGFsbCBmb3IgSVB2NC4KQEAgLTUxOCwxNCArNTE4LDE0IEBACiAJX19sZTMyIG51bVNlY3Rpb25zOwogCV9fbGUzMiBzdGFydEFkZHI7CiAJX19sZTMyIGhtYWNEaWdlc3RbNV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCB0eXBob29uX3NlY3Rpb25faGVhZGVyIHsKIAlfX2xlMzIgbGVuOwogCXUxNiBjaGVja3N1bTsKIAl1MTYgcmVzZXJ2ZWQ7CiAJX19sZTMyIHN0YXJ0QWRkcjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogVGhlIFR5cGhvb24gUmVnaXN0ZXIgb2Zmc2V0cwogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jIGIvZHJpdmVycy9uZXQvdWNjX2dldGguYwppbmRleCA4MDc0NzBlLi44ZDUzMmY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMKQEAgLTU5NCw3ICs1OTQsNyBAQAogewogCWludCBpOwogCi0JdWdldGhfaW5mbygiVUNDJWQgR2V0aCByZWdpc3RlcnM6IiwgdWdldGgtPnVnX2luZm8tPnVmX2luZm8udWNjX251bSk7CisJdWdldGhfaW5mbygiVUNDJWQgR2V0aCByZWdpc3RlcnM6IiwgdWdldGgtPnVnX2luZm8tPnVmX2luZm8udWNjX251bSArIDEpOwogCXVnZXRoX2luZm8oIkJhc2UgYWRkcmVzczogMHglMDh4IiwgKHUzMikgdWdldGgtPnVnX3JlZ3MpOwogCiAJdWdldGhfaW5mbygibWFjY2ZnMSAgICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCkBAIC0zNzA0LDYgKzM3MDQsMTkgQEAKIAlyZXR1cm4gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTsKIH0KIAorc3RhdGljIGludCB1Y2NfZ2V0aF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQoreworCXN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXVnZXRoLT5waHlkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIHBoeV9taWlfaW9jdGwodWdldGgtPnBoeWRldiwgcnEsIGNtZCk7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdWNjX2dldGhfbmV0ZGV2X29wcyA9IHsKIAkubmRvX29wZW4JCT0gdWNjX2dldGhfb3BlbiwKIAkubmRvX3N0b3AJCT0gdWNjX2dldGhfY2xvc2UsCkBAIC0zNzEzLDYgKzM3MjYsNyBAQAogCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHVjY19nZXRoX3NldF9tdWx0aSwKIAkubmRvX3R4X3RpbWVvdXQJCT0gdWNjX2dldGhfdGltZW91dCwKKwkubmRvX2RvX2lvY3RsCQk9IHVjY19nZXRoX2lvY3RsLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSB1Y2NfbmV0cG9sbCwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGguaCBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmgKaW5kZXggZWYxZmJlYi4uMDVhOTU1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdWNjX2dldGguaAorKysgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aC5oCkBAIC0xMDYsNyArMTA2LDcgQEAKIAl1MzIgc2NhcjsJCS8qIFN0YXRpc3RpY3MgY2FycnkgcmVnaXN0ZXIgKi8KIAl1MzIgc2NhbTsJCS8qIFN0YXRpc3RpY3MgY2FyeXkgbWFzayByZWdpc3RlciAqLwogCXU4IHJlczVbMHgyMDAgLSAweDFjNF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIFVDQyBHRVRIIFRFTU9EUiBSZWdpc3RlciAqLwogI2RlZmluZSBURU1PREVSX1RYX1JNT05fU1RBVElTVElDU19FTkFCTEUgICAgICAgMHgwMTAwCS8qIGVuYWJsZSBUeCBzdGF0aXN0aWNzCkBAIC00MjAsMTEgKzQyMCwxMSBAQAogCiBzdHJ1Y3QgdWNjX2dldGhfdGhyZWFkX2RhdGFfdHggewogCXU4IHJlczBbMTA0XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHVjY19nZXRoX3RocmVhZF9kYXRhX3J4IHsKIAl1OCByZXMwWzQwXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogU2VuZCBRdWV1ZSBRdWV1ZS1EZXNjcmlwdG9yICovCiBzdHJ1Y3QgdWNjX2dldGhfc2VuZF9xdWV1ZV9xZCB7CkBAIC00MzIsMTkgKzQzMiwxOSBAQAogCXU4IHJlczBbMHg4XTsKIAl1MzIgbGFzdF9iZF9jb21wbGV0ZWRfYWRkcmVzczsvKiBpbml0aWFsaXplIHRvIGxhc3QgZW50cnkgaW4gQkQgcmluZyAqLwogCXU4IHJlczFbMHgzMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCB1Y2NfZ2V0aF9zZW5kX3F1ZXVlX21lbV9yZWdpb24gewogCXN0cnVjdCB1Y2NfZ2V0aF9zZW5kX3F1ZXVlX3FkIHNxcWRbTlVNX1RYX1FVRVVFU107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCB1Y2NfZ2V0aF90aHJlYWRfdHhfcHJhbSB7CiAJdTggcmVzMFs2NF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCB1Y2NfZ2V0aF90aHJlYWRfcnhfcHJhbSB7CiAJdTggcmVzMFsxMjhdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIFRIUkVBRF9SWF9QUkFNX0FERElUSU9OQUxfRk9SX0VYVEVOREVEX0ZJTFRFUklORyAgICAgICAgNjQKICNkZWZpbmUgVEhSRUFEX1JYX1BSQU1fQURESVRJT05BTF9GT1JfRVhURU5ERURfRklMVEVSSU5HXzggICAgICA2NApAQCAtNDg0LDcgKzQ4NCw3IEBACiAJCQkJICAgICAgLyoqPCB3ZWlnaHQgZmFjdG9yIGZvciBxdWV1ZXMgICAqLwogCXUzMiBtaW53OwkJLyogdGVtcG9yYXJ5IHZhcmlhYmxlIGhhbmRsZWQgYnkgUUUgKi8KIAl1OCByZXMxWzB4NzAgLSAweDY0XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHVjY19nZXRoX3R4X2Zpcm13YXJlX3N0YXRpc3RpY3NfcHJhbSB7CiAJdTMyIHNpY29sdHg7CQkvKiBzaW5nbGUgY29sbGlzaW9uICovCkBAIC01MDYsNyArNTA2LDcgQEAKIAkJCQkgICBhbmQgMTUxOCBvY3RldHMgKi8KIAl1MzIgdHhwa3RzanVtYm87CS8qIHRvdGFsIHBhY2tldHMgKGluY2x1ZGluZyBiYWQpIGJldHdlZW4gMTAyNAogCQkJCSAgIGFuZCBNQVhMZW5ndGggb2N0ZXRzICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCB1Y2NfZ2V0aF9yeF9maXJtd2FyZV9zdGF0aXN0aWNzX3ByYW0gewogCXUzMiBmcnJ4ZmNzZXI7CQkvKiBmcmFtZXMgd2l0aCBjcmMgZXJyb3IgKi8KQEAgLTU0MCw3ICs1NDAsNyBAQAogCQkJCSAgIHJlcGxhY2VkICovCiAJdTMyIGluc2VydHZsYW47CQkvKiB0b3RhbCBmcmFtZXMgdGhhdCBoYWQgdGhlaXIgVkxBTiB0YWcKIAkJCQkgICBpbnNlcnRlZCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgdWNjX2dldGhfcnhfaW50ZXJydXB0X2NvYWxlc2NpbmdfZW50cnkgewogCXUzMiBpbnRlcnJ1cHRjb2FsZXNjaW5nbWF4dmFsdWU7CS8qIGludGVycnVwdCBjb2FsZXNjaW5nIG1heApAQCAtNTQ4LDIzICs1NDgsMjMgQEAKIAl1MzIgaW50ZXJydXB0Y29hbGVzY2luZ2NvdW50ZXI7CS8qIGludGVycnVwdCBjb2FsZXNjaW5nIGNvdW50ZXIsCiAJCQkJCSAgIGluaXRpYWxpemUgdG8KIAkJCQkJICAgaW50ZXJydXB0Y29hbGVzY2luZ21heHZhbHVlICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCB1Y2NfZ2V0aF9yeF9pbnRlcnJ1cHRfY29hbGVzY2luZ190YWJsZSB7CiAJc3RydWN0IHVjY19nZXRoX3J4X2ludGVycnVwdF9jb2FsZXNjaW5nX2VudHJ5IGNvYWxlc2NpbmdlbnRyeVtOVU1fUlhfUVVFVUVTXTsKIAkJCQkgICAgICAgLyoqPCBpbnRlcnJ1cHQgY29hbGVzY2luZyBlbnRyeSAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgdWNjX2dldGhfcnhfcHJlZmV0Y2hlZF9iZHMgewogCXN0cnVjdCBxZV9iZCBiZFtOVU1fQkRTX0lOX1BSRUZFVENIRURfQkRTXTsJLyogcHJlZmV0Y2hlZCBiZCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgdWNjX2dldGhfcnhfYmRfcXVldWVzX2VudHJ5IHsKIAl1MzIgYmRiYXNlcHRyOwkJLyogQkQgYmFzZSBwb2ludGVyICovCiAJdTMyIGJkcHRyOwkJLyogQkQgcG9pbnRlciAqLwogCXUzMiBleHRlcm5hbGJkYmFzZXB0cjsJLyogZXh0ZXJuYWwgQkQgYmFzZSBwb2ludGVyICovCiAJdTMyIGV4dGVybmFsYmRwdHI7CS8qIGV4dGVybmFsIEJEIHBvaW50ZXIgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHVjY19nZXRoX3R4X2dsb2JhbF9wcmFtIHsKIAl1MTYgdGVtb2RlcjsKQEAgLTU4MCwxMyArNTgwLDEzIEBACiAJdTMyIHRxcHRyOwkJLyogYSBiYXNlIHBvaW50ZXIgdG8gdGhlIFR4IFF1ZXVlcyBNZW1vcnkKIAkJCQkgICBSZWdpb24gKi8KIAl1OCByZXMyWzB4ODAgLSAweDc0XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogc3RydWN0dXJlIHJlcHJlc2VudGluZyBFeHRlbmRlZCBGaWx0ZXJpbmcgR2xvYmFsIFBhcmFtZXRlcnMgaW4gUFJBTSAqLwogc3RydWN0IHVjY19nZXRoX2V4Zl9nbG9iYWxfcHJhbSB7CiAJdTMyIGwycGNkcHRyOwkJLyogaW5kaXZpZHVhbCBhZGRyZXNzIGZpbHRlciwgaGlnaCAqLwogCXU4IHJlczBbMHgxMCAtIDB4MDRdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgdWNjX2dldGhfcnhfZ2xvYmFsX3ByYW0gewogCXUzMiByZW1vZGVyOwkJLyogZXRoZXJuZXQgbW9kZSByZWcuICovCkBAIC02MjAsNyArNjIwLDcgQEAKIAl1MzIgZXhmR2xvYmFsUGFyYW07CS8qIGJhc2UgYWRkcmVzcyBmb3IgZXh0ZW5kZWQgZmlsdGVyaW5nIGdsb2JhbAogCQkJCSAgIHBhcmFtZXRlcnMgKi8KIAl1OCByZXM2WzB4MTAwIC0gMHhDNF07CS8qIEluaXRpYWxpemUgdG8gemVybyAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEdSQUNFRlVMX1NUT1BfQUNLTk9XTEVER0VfUlggICAgICAgICAgICAweDAxCiAKQEAgLTYzOSw3ICs2MzksNyBAQAogCXUzMiB0eGdsb2JhbDsJCS8qIHR4IGdsb2JhbCAqLwogCXUzMiB0eHRocmVhZFtFTkVUX0lOSVRfUEFSQU1fTUFYX0VOVFJJRVNfVFhdOwkvKiB0eCB0aHJlYWRzICovCiAJdTggcmVzM1sweDFdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEVORVRfSU5JVF9QQVJBTV9SR0ZfU0hJRlQgICAgICAgICAgICAgICAoMzIgLSA0KQogI2RlZmluZSBFTkVUX0lOSVRfUEFSQU1fVEdGX1NISUZUICAgICAgICAgICAgICAgKDMyIC0gOCkKQEAgLTY2MSw3ICs2NjEsNyBAQAogCXUxNiBoOwkJCS8qIGFkZHJlc3MgKE1TQikgKi8KIAl1MTYgbTsJCQkvKiBhZGRyZXNzICovCiAJdTE2IGw7CQkJLyogYWRkcmVzcyAoTFNCKSAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIDgyeHggQWRkcmVzcyBGaWx0ZXJpbmcgUFJBTSAqLwogc3RydWN0IHVjY19nZXRoXzgyeHhfYWRkcmVzc19maWx0ZXJpbmdfcHJhbSB7CkBAIC02NzIsNyArNjcyLDcgQEAKIAlzdHJ1Y3QgdWNjX2dldGhfODJ4eF9lbmV0X2FkZHJlc3MgX19pb21lbSB0YWRkcjsKIAlzdHJ1Y3QgdWNjX2dldGhfODJ4eF9lbmV0X2FkZHJlc3MgX19pb21lbSBwYWRkcltOVU1fT0ZfUEFERFJTXTsKIAl1OCByZXMwWzB4NDAgLSAweDM4XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogR0VUSCBUeCBmaXJtd2FyZSBzdGF0aXN0aWNzIHN0cnVjdHVyZSwgdXNlZCB3aGVuIGNhbGxpbmcKICAgIFVDQ19HRVRIX0dldFN0YXRpc3RpY3MuICovCkBAIC02OTYsNyArNjk2LDcgQEAKIAkJCQkgICBhbmQgMTUxOCBvY3RldHMgKi8KIAl1MzIgdHhwa3RzanVtYm87CS8qIHRvdGFsIHBhY2tldHMgKGluY2x1ZGluZyBiYWQpIGJldHdlZW4gMTAyNAogCQkJCSAgIGFuZCBNQVhMZW5ndGggb2N0ZXRzICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIEdFVEggUnggZmlybXdhcmUgc3RhdGlzdGljcyBzdHJ1Y3R1cmUsIHVzZWQgd2hlbiBjYWxsaW5nCiAgICBVQ0NfR0VUSF9HZXRTdGF0aXN0aWNzLiAqLwpAQCAtNzMyLDcgKzczMiw3IEBACiAJCQkJICAgcmVwbGFjZWQgKi8KIAl1MzIgaW5zZXJ0dmxhbjsJCS8qIHRvdGFsIGZyYW1lcyB0aGF0IGhhZCB0aGVpciBWTEFOIHRhZwogCQkJCSAgIGluc2VydGVkICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIEdFVEggaGFyZHdhcmUgc3RhdGlzdGljcyBzdHJ1Y3R1cmUsIHVzZWQgd2hlbiBjYWxsaW5nCiAgICBVQ0NfR0VUSF9HZXRTdGF0aXN0aWNzLiAqLwpAQCAtNzgxLDcgKzc4MSw3IEBACiAJdTMyIHJiY2E7CQkvKiBUb3RhbCBudW1iZXIgb2YgZnJhbWVzIHJlY2VpdmVkIHN1Y2Nlc3NmdWxseQogCQkJCSAgIHRoYXQgaGFkIGRlc3RpbmF0aW9uIGFkZHJlc3MgZXF1YWwgdG8gdGhlCiAJCQkJICAgYnJvYWRjYXN0IGFkZHJlc3MgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogVUNDIEdFVEggVHggZXJyb3JzIHJldHVybmVkIHZpYSBUeENvbmYgY2FsbGJhY2sgKi8KICNkZWZpbmUgVFhfRVJST1JTX0RFRiAgICAgIDB4MDIwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2FzaXguYyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4LmMKaW5kZXggOTUxNmYzOC4uYWVhNDY0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2FzaXguYworKysgYi9kcml2ZXJzL25ldC91c2IvYXNpeC5jCkBAIC0xNzksNyArMTc5LDcgQEAKIAlfX2xlMTYgcmVzMjsKIAl1OCBzdGF0dXM7CiAJX19sZTE2IHJlczM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0YXRpYyBpbnQgYXNpeF9yZWFkX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsCiAJCQkgICAgdTE2IHNpemUsIHZvaWQgKmRhdGEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2RjLXBob25ldC5jIGIvZHJpdmVycy9uZXQvdXNiL2NkYy1waG9uZXQuYwppbmRleCBkYzk0NDQ1Li4xMDk3NTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvY2RjLXBob25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jZGMtcGhvbmV0LmMKQEAgLTk3LDggKzk3LDkgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcmVxLT5jb250ZXh0OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItPmRldjsKIAlzdHJ1Y3QgdXNicG5fZGV2ICpwbmQgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBzdGF0dXMgPSByZXEtPnN0YXR1czsKIAotCXN3aXRjaCAocmVxLT5zdGF0dXMpIHsKKwlzd2l0Y2ggKHN0YXR1cykgewogCWNhc2UgMDoKIAkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAkJYnJlYWs7CkBAIC0xMDksNyArMTEwLDcgQEAKIAkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCWRlZmF1bHQ6CiAJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7Ci0JCWRldl9kYmcoJmRldi0+ZGV2LCAiVFggZXJyb3IgKCVkKVxuIiwgcmVxLT5zdGF0dXMpOworCQlkZXZfZGJnKCZkZXYtPmRldiwgIlRYIGVycm9yICglZClcbiIsIHN0YXR1cyk7CiAJfQogCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCkBAIC0xNTAsOCArMTUxLDkgQEAKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZpcnRfdG9fcGFnZShyZXEtPnRyYW5zZmVyX2J1ZmZlcik7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBzdGF0dXMgPSByZXEtPnN0YXR1czsKIAotCXN3aXRjaCAocmVxLT5zdGF0dXMpIHsKKwlzd2l0Y2ggKHN0YXR1cykgewogCWNhc2UgMDoKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnBuZC0+cnhfbG9jaywgZmxhZ3MpOwogCQlza2IgPSBwbmQtPnJ4X3NrYjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9oc28uYyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uYwppbmRleCA0ZGQyMzUxLi42ZWZjYTY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvaHNvLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2hzby5jCkBAIC03Myw3ICs3Myw2IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAKIAotI2RlZmluZSBEUklWRVJfVkVSU0lPTgkJCSIxLjIiCiAjZGVmaW5lIE1PRF9BVVRIT1IJCQkiT3B0aW9uIFdpcmVsZXNzIgogI2RlZmluZSBNT0RfREVTQ1JJUFRJT04JCQkiVVNCIEhpZ2ggU3BlZWQgT3B0aW9uIGRyaXZlciIKICNkZWZpbmUgTU9EX0xJQ0VOU0UJCQkiR1BMIgpAQCAtMjExLDcgKzIxMCw3IEBACiAJdTE2IHdJbmRleDsKIAl1MTYgd0xlbmd0aDsKIAl1MTYgVUFSVF9zdGF0ZV9iaXRtYXA7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGhzb190aW9jbWdldCB7CiAJc3RydWN0IG11dGV4IG11dGV4OwpAQCAtNDAxLDcgKzQwMCw3IEBACiAvKiBkcml2ZXIgaW5mbyAqLwogc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWVbXSA9ICJoc28iOwogc3RhdGljIGNvbnN0IGNoYXIgdHR5X2ZpbGVuYW1lW10gPSAidHR5SFMiOwotc3RhdGljIGNvbnN0IGNoYXIgKnZlcnNpb24gPSBfX0ZJTEVfXyAiOiAiIERSSVZFUl9WRVJTSU9OICIgIiBNT0RfQVVUSE9SOworc3RhdGljIGNvbnN0IGNoYXIgKnZlcnNpb24gPSBfX0ZJTEVfXyAiOiAiIE1PRF9BVVRIT1I7CiAvKiB0aGUgdXNiIGRyaXZlciBpdHNlbGYgKHJlZ2lzdGVyZWQgaW4gaHNvX2luaXQpICovCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaHNvX2RyaXZlcjsKIC8qIHNlcmlhbCBzdHJ1Y3R1cmVzICovCkBAIC00NzgsNiArNDc3LDcgQEAKIAl7VVNCX0RFVklDRSgweDBhZjAsIDB4ODYwMCl9LAogCXtVU0JfREVWSUNFKDB4MGFmMCwgMHg4ODAwKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYWYwLCAweDg5MDApfSwKKwl7VVNCX0RFVklDRSgweDBhZjAsIDB4OTAwMCl9LAogCXtVU0JfREVWSUNFKDB4MGFmMCwgMHhkMDM1KX0sCiAJe1VTQl9ERVZJQ0UoMHgwYWYwLCAweGQwNTUpfSwKIAl7VVNCX0RFVklDRSgweDBhZjAsIDB4ZDE1NSl9LApAQCAtODQ4LDcgKzg0OCw2IEBACiAJc3RydWN0IGhzb19uZXQgKm9kZXYgPSBuZXRkZXZfcHJpdihuZXQpOwogCiAJc3RybmNweShpbmZvLT5kcml2ZXIsIGRyaXZlcl9uYW1lLCBFVEhUT09MX0JVU0lORk9fTEVOKTsKLQlzdHJuY3B5KGluZm8tPnZlcnNpb24sIERSSVZFUl9WRVJTSU9OLCBFVEhUT09MX0JVU0lORk9fTEVOKTsKIAl1c2JfbWFrZV9wYXRoKG9kZXYtPnBhcmVudC0+dXNiLCBpbmZvLT5idXNfaW5mbywgc2l6ZW9mIGluZm8tPmJ1c19pbmZvKTsKIH0KIApAQCAtMzM4OCw3ICszMzg3LDYgQEAKIE1PRFVMRV9BVVRIT1IoTU9EX0FVVEhPUik7CiBNT0RVTEVfREVTQ1JJUFRJT04oTU9EX0RFU0NSSVBUSU9OKTsKIE1PRFVMRV9MSUNFTlNFKE1PRF9MSUNFTlNFKTsKLU1PRFVMRV9JTkZPKFZlcnNpb24sIERSSVZFUl9WRVJTSU9OKTsKIAogLyogY2hhbmdlIHRoZSBkZWJ1ZyBsZXZlbCAoZWc6IGluc21vZCBoc28ua28gZGVidWc9MHgwNCkgKi8KIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJMZXZlbCBvZiBkZWJ1ZyBbMHgwMSB8IDB4MDIgfCAweDA0IHwgMHgwOCB8IDB4MTBdIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMgYi9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMKaW5kZXggMTk3YzM1Mi4uMDhlN2I2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9pcGhldGguYwpAQCAtMTkzLDcgKzE5Myw3IEBACiAJY2FzZSAwOgogCQlicmVhazsKIAlkZWZhdWx0OgotCQllcnIoIiVzOiB1cmIgc3RhdHVzOiAlZCIsIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7CisJCWVycigiJXM6IHVyYiBzdGF0dXM6ICVkIiwgX19mdW5jX18sIHN0YXR1cyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTIyMiwxNiArMjIyLDE3IEBACiBzdGF0aWMgdm9pZCBpcGhldGhfc25kYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldjsKKwlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CiAKIAlkZXYgPSB1cmItPmNvbnRleHQ7CiAJaWYgKGRldiA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQlpZiAodXJiLT5zdGF0dXMgIT0gMCAmJgotCSAgICB1cmItPnN0YXR1cyAhPSAtRU5PRU5UICYmCi0JICAgIHVyYi0+c3RhdHVzICE9IC1FQ09OTlJFU0VUICYmCi0JICAgIHVyYi0+c3RhdHVzICE9IC1FU0hVVERPV04pCi0JCWVycigiJXM6IHVyYiBzdGF0dXM6ICVkIiwgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKKwlpZiAoc3RhdHVzICE9IDAgJiYKKwkgICAgc3RhdHVzICE9IC1FTk9FTlQgJiYKKwkgICAgc3RhdHVzICE9IC1FQ09OTlJFU0VUICYmCisJICAgIHN0YXR1cyAhPSAtRVNIVVRET1dOKQorCQllcnIoIiVzOiB1cmIgc3RhdHVzOiAlZCIsIF9fZnVuY19fLCBzdGF0dXMpOwogCiAJZGV2X2tmcmVlX3NrYl9pcnEoZGV2LT50eF9za2IpOwogCW5ldGlmX3dha2VfcXVldWUoZGV2LT5uZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jIGIvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jCmluZGV4IGQ2MDc4YjguLjJiN2IzOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYworKysgYi9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMKQEAgLTIwNyw3ICsyMDcsNyBAQAogCV9fbGUxNiBzZWdtZW50X3NpemU7CiAJX191MTYgbWF4X211bHRpY2FzdF9maWx0ZXJzOwogCV9fdTggcmVzZXJ2ZWQzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgIGthd2V0aF9kZXZpY2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMgYi9kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jCmluZGV4IDk2MWE4ZWQuLmJhNzJhNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYwpAQCAtNjQsMTMgKzY0LDEzIEBACiAJLy8gYWxsIGVsc2UgaXMgb3B0aW9uYWwsIGFuZCBtdXN0IHN0YXJ0IHdpdGg6CiAJLy8gX19sZTE2CXZlbmRvcklkOwkvLyBmcm9tIHVzYi1pZgogCS8vIF9fbGUxNglwcm9kdWN0SWQ7Ci19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUJUEFEX0JZVEUJKCh1bnNpZ25lZCBjaGFyKTB4QUMpCiAKIHN0cnVjdCBuY190cmFpbGVyIHsKIAlfX2xlMTYJcGFja2V0X2lkOwotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Cit9IF9fcGFja2VkOwogCiAvLyBwYWNrZXRzIG1heSB1c2UgRkxBR19GUkFNSU5HX05DIGFuZCBvcHRpb25hbCBwYWQKICNkZWZpbmUgRlJBTUVEX1NJWkUobXR1KSAoc2l6ZW9mIChzdHJ1Y3QgbmNfaGVhZGVyKSBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuYwppbmRleCA5NzRkMTdmLi42NzEwZjA5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuYworKysgYi9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jCkBAIC0yMSwxMSArMjEsMTEgQEAKICAqCQkJYmVoYXZlcy4gUGVnYXN1cyBJSSBzdXBwb3J0IGFkZGVkIHNpbmNlIHRoaXMgdmVyc2lvbi4KICAqCQkJVE9ETzogc3VwcHJlc3NpbmcgSENEIHdhcm5pbmdzIHNwZXdhZ2Ugb24gZGlzY29ubmVjdC4KICAqCQl2MC40LjEzCUV0aGVybmV0IGFkZHJlc3MgaXMgbm93IHNldCBhdCBwcm9iZSgpLCBub3QgYXQgb3BlbigpCi0gKgkJCXRpbWUgYXMgdGhpcyBzZWVtcyB0byBicmVhayBkaGNwZC4gCisgKgkJCXRpbWUgYXMgdGhpcyBzZWVtcyB0byBicmVhayBkaGNwZC4KICAqCQl2MC41LjAJYnJhbmNoIHRvIDIuNS54IGtlcm5lbHMKICAqCQl2MC41LjEJZXRodG9vbCBzdXBwb3J0IGFkZGVkCiAgKgkJdjAuNS41CXJ4IHNvY2tldCBidWZmZXJzIGFyZSBpbiBhIHBvb2wgYW5kIHRoZSB0aGVpciBhbGxvY2F0aW9uCi0gKiAJCQlpcyBvdXQgb2YgdGhlIGludGVycnVwdCByb3V0aW5lLgorICoJCQlpcyBvdXQgb2YgdGhlIGludGVycnVwdCByb3V0aW5lLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtNTUsOSArNTUsOSBAQAogI2RlZmluZQlCTVNSX01FRElBCShCTVNSXzEwSEFMRiB8IEJNU1JfMTBGVUxMIHwgQk1TUl8xMDBIQUxGIHwgXAogCQkJQk1TUl8xMDBGVUxMIHwgQk1TUl9BTkVHQ0FQQUJMRSkKIAotc3RhdGljIGludCBsb29wYmFjayA9IDA7Ci1zdGF0aWMgaW50IG1paV9tb2RlID0gMDsKLXN0YXRpYyBjaGFyICpkZXZpZD1OVUxMOworc3RhdGljIGludCBsb29wYmFjazsKK3N0YXRpYyBpbnQgbWlpX21vZGU7CitzdGF0aWMgY2hhciAqZGV2aWQ7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2V0aF9kZXYgdXNiX2Rldl9pZFtdID0gewogI2RlZmluZQlQRUdBU1VTX0RFVihwbiwgdmlkLCBwaWQsIGZsYWdzKQlcCkBAIC0xMDIsOCArMTAyLDggQEAKIAogLyogdXNlIGV0aHRvb2wgdG8gY2hhbmdlIHRoZSBsZXZlbCBmb3IgYW55IGdpdmVuIGRldmljZSAqLwogc3RhdGljIGludCBtc2dfbGV2ZWwgPSAtMTsKLW1vZHVsZV9wYXJhbSAobXNnX2xldmVsLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyAobXNnX2xldmVsLCAiT3ZlcnJpZGUgZGVmYXVsdCBtZXNzYWdlIGxldmVsIik7Cittb2R1bGVfcGFyYW0obXNnX2xldmVsLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtc2dfbGV2ZWwsICJPdmVycmlkZSBkZWZhdWx0IG1lc3NhZ2UgbGV2ZWwiKTsKIAogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHBlZ2FzdXNfaWRzKTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcGVnYXN1c19uZXRkZXZfb3BzOwpAQCAtMTQxLDcgKzE0MSw3IEBACiAJd2FrZV91cCgmcGVnYXN1cy0+Y3RybF93YWl0KTsKIH0KIAotc3RhdGljIGludCBnZXRfcmVnaXN0ZXJzKHBlZ2FzdXNfdCAqIHBlZ2FzdXMsIF9fdTE2IGluZHgsIF9fdTE2IHNpemUsCitzdGF0aWMgaW50IGdldF9yZWdpc3RlcnMocGVnYXN1c190ICpwZWdhc3VzLCBfX3UxNiBpbmR4LCBfX3UxNiBzaXplLAogCQkJIHZvaWQgKmRhdGEpCiB7CiAJaW50IHJldDsKQEAgLTE5Niw3ICsxOTYsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgc2V0X3JlZ2lzdGVycyhwZWdhc3VzX3QgKiBwZWdhc3VzLCBfX3UxNiBpbmR4LCBfX3UxNiBzaXplLAorc3RhdGljIGludCBzZXRfcmVnaXN0ZXJzKHBlZ2FzdXNfdCAqcGVnYXN1cywgX191MTYgaW5keCwgX191MTYgc2l6ZSwKIAkJCSB2b2lkICpkYXRhKQogewogCWludCByZXQ7CkBAIC0yNDgsNyArMjQ4LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHNldF9yZWdpc3RlcihwZWdhc3VzX3QgKiBwZWdhc3VzLCBfX3UxNiBpbmR4LCBfX3U4IGRhdGEpCitzdGF0aWMgaW50IHNldF9yZWdpc3RlcihwZWdhc3VzX3QgKnBlZ2FzdXMsIF9fdTE2IGluZHgsIF9fdTggZGF0YSkKIHsKIAlpbnQgcmV0OwogCWNoYXIgKnRtcDsKQEAgLTI5OSw3ICsyOTksNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdXBkYXRlX2V0aF9yZWdzX2FzeW5jKHBlZ2FzdXNfdCAqIHBlZ2FzdXMpCitzdGF0aWMgaW50IHVwZGF0ZV9ldGhfcmVnc19hc3luYyhwZWdhc3VzX3QgKnBlZ2FzdXMpCiB7CiAJaW50IHJldDsKIApAQCAtMzI2LDcgKzMyNiw3IEBACiB9CiAKIC8qIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJvciBvbiBmYWlsdXJlICovCi1zdGF0aWMgaW50IHJlYWRfbWlpX3dvcmQocGVnYXN1c190ICogcGVnYXN1cywgX191OCBwaHksIF9fdTggaW5keCwgX191MTYgKiByZWdkKQorc3RhdGljIGludCByZWFkX21paV93b3JkKHBlZ2FzdXNfdCAqcGVnYXN1cywgX191OCBwaHksIF9fdTggaW5keCwgX191MTYgKnJlZ2QpCiB7CiAJaW50IGk7CiAJX191OCBkYXRhWzRdID0geyBwaHksIDAsIDAsIGluZHggfTsKQEAgLTMzNCw3ICszMzQsNyBAQAogCWludCByZXQ7CiAKIAlzZXRfcmVnaXN0ZXIocGVnYXN1cywgUGh5Q3RybCwgMCk7Ci0Jc2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBQaHlBZGRyLCBzaXplb2YgKGRhdGEpLCBkYXRhKTsKKwlzZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIFBoeUFkZHIsIHNpemVvZihkYXRhKSwgZGF0YSk7CiAJc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIFBoeUN0cmwsIChpbmR4IHwgUEhZX1JFQUQpKTsKIAlmb3IgKGkgPSAwOyBpIDwgUkVHX1RJTUVPVVQ7IGkrKykgewogCQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIFBoeUN0cmwsIDEsIGRhdGEpOwpAQCAtMzY2LDcgKzM2Niw3IEBACiAJcmV0dXJuIChpbnQpcmVzOwogfQogCi1zdGF0aWMgaW50IHdyaXRlX21paV93b3JkKHBlZ2FzdXNfdCAqIHBlZ2FzdXMsIF9fdTggcGh5LCBfX3U4IGluZHgsIF9fdTE2IHJlZ2QpCitzdGF0aWMgaW50IHdyaXRlX21paV93b3JkKHBlZ2FzdXNfdCAqcGVnYXN1cywgX191OCBwaHksIF9fdTggaW5keCwgX191MTYgcmVnZCkKIHsKIAlpbnQgaTsKIAlfX3U4IGRhdGFbNF0gPSB7IHBoeSwgMCwgMCwgaW5keCB9OwpAQCAtNDAyLDcgKzQwMiw3IEBACiAJd3JpdGVfbWlpX3dvcmQocGVnYXN1cywgcGh5X2lkLCBsb2MsIHZhbCk7CiB9CiAKLXN0YXRpYyBpbnQgcmVhZF9lcHJvbV93b3JkKHBlZ2FzdXNfdCAqIHBlZ2FzdXMsIF9fdTggaW5kZXgsIF9fdTE2ICogcmV0ZGF0YSkKK3N0YXRpYyBpbnQgcmVhZF9lcHJvbV93b3JkKHBlZ2FzdXNfdCAqcGVnYXN1cywgX191OCBpbmRleCwgX191MTYgKnJldGRhdGEpCiB7CiAJaW50IGk7CiAJX191OCB0bXA7CkBAIC00MzMsNyArNDMzLDcgQEAKIH0KIAogI2lmZGVmCVBFR0FTVVNfV1JJVEVfRUVQUk9NCi1zdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2Vwcm9tX3dyaXRlKHBlZ2FzdXNfdCAqIHBlZ2FzdXMpCitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2Vwcm9tX3dyaXRlKHBlZ2FzdXNfdCAqcGVnYXN1cykKIHsKIAlfX3U4IHRtcDsKIAlpbnQgcmV0OwpAQCAtNDQyLDcgKzQ0Miw3IEBACiAJc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIEV0aEN0cmwyLCB0bXAgfCBFUFJPTV9XUl9FTkFCTEUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9lcHJvbV93cml0ZShwZWdhc3VzX3QgKiBwZWdhc3VzKQorc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfZXByb21fd3JpdGUocGVnYXN1c190ICpwZWdhc3VzKQogewogCV9fdTggdG1wOwogCWludCByZXQ7CkBAIC00NTIsNyArNDUyLDcgQEAKIAlzZXRfcmVnaXN0ZXIocGVnYXN1cywgRXRoQ3RybDIsIHRtcCAmIH5FUFJPTV9XUl9FTkFCTEUpOwogfQogCi1zdGF0aWMgaW50IHdyaXRlX2Vwcm9tX3dvcmQocGVnYXN1c190ICogcGVnYXN1cywgX191OCBpbmRleCwgX191MTYgZGF0YSkKK3N0YXRpYyBpbnQgd3JpdGVfZXByb21fd29yZChwZWdhc3VzX3QgKnBlZ2FzdXMsIF9fdTggaW5kZXgsIF9fdTE2IGRhdGEpCiB7CiAJaW50IGk7CiAJX191OCB0bXAsIGRbNF0gPSB7IDB4M2YsIDAsIDAsIEVQUk9NX1dSSVRFIH07CkBAIC00ODQsNyArNDg0LDcgQEAKIH0KICNlbmRpZgkJCQkvKiBQRUdBU1VTX1dSSVRFX0VFUFJPTSAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vZGVfaWQocGVnYXN1c190ICogcGVnYXN1cywgX191OCAqIGlkKQorc3RhdGljIGlubGluZSB2b2lkIGdldF9ub2RlX2lkKHBlZ2FzdXNfdCAqcGVnYXN1cywgX191OCAqaWQpCiB7CiAJaW50IGk7CiAJX191MTYgdzE2OwpAQCAtNDk1LDcgKzQ5NSw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzZXRfZXRoZXJuZXRfYWRkcihwZWdhc3VzX3QgKiBwZWdhc3VzKQorc3RhdGljIHZvaWQgc2V0X2V0aGVybmV0X2FkZHIocGVnYXN1c190ICpwZWdhc3VzKQogewogCV9fdTggbm9kZV9pZFs2XTsKIApAQCAtNTAzLDEyICs1MDMsMTIgQEAKIAkJZ2V0X3JlZ2lzdGVycyhwZWdhc3VzLCAweDEwLCBzaXplb2Yobm9kZV9pZCksIG5vZGVfaWQpOwogCX0gZWxzZSB7CiAJCWdldF9ub2RlX2lkKHBlZ2FzdXMsIG5vZGVfaWQpOwotCQlzZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEV0aElELCBzaXplb2YgKG5vZGVfaWQpLCBub2RlX2lkKTsKKwkJc2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBFdGhJRCwgc2l6ZW9mKG5vZGVfaWQpLCBub2RlX2lkKTsKIAl9Ci0JbWVtY3B5KHBlZ2FzdXMtPm5ldC0+ZGV2X2FkZHIsIG5vZGVfaWQsIHNpemVvZiAobm9kZV9pZCkpOworCW1lbWNweShwZWdhc3VzLT5uZXQtPmRldl9hZGRyLCBub2RlX2lkLCBzaXplb2Yobm9kZV9pZCkpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCByZXNldF9tYWMocGVnYXN1c190ICogcGVnYXN1cykKK3N0YXRpYyBpbmxpbmUgaW50IHJlc2V0X21hYyhwZWdhc3VzX3QgKnBlZ2FzdXMpCiB7CiAJX191OCBkYXRhID0gMHg4OwogCWludCBpOwpAQCAtNTYzLDcgKzU2Myw3IEBACiAJCWRhdGFbMV0gPSAwOwogCWRhdGFbMl0gPSAobG9vcGJhY2sgJiAxKSA/IDB4MDkgOiAweDAxOwogCi0JbWVtY3B5KHBlZ2FzdXMtPmV0aF9yZWdzLCBkYXRhLCBzaXplb2YgKGRhdGEpKTsKKwltZW1jcHkocGVnYXN1cy0+ZXRoX3JlZ3MsIGRhdGEsIHNpemVvZihkYXRhKSk7CiAJcmV0ID0gc2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBFdGhDdHJsMCwgMywgZGF0YSk7CiAKIAlpZiAodXNiX2Rldl9pZFtwZWdhc3VzLT5kZXZfaW5kZXhdLnZlbmRvciA9PSBWRU5ET1JfTElOS1NZUyB8fApAQCAtNTc3LDcgKzU3Nyw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgZmlsbF9za2JfcG9vbChwZWdhc3VzX3QgKiBwZWdhc3VzKQorc3RhdGljIHZvaWQgZmlsbF9za2JfcG9vbChwZWdhc3VzX3QgKnBlZ2FzdXMpCiB7CiAJaW50IGk7CiAKQEAgLTU5NSw3ICs1OTUsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgZnJlZV9za2JfcG9vbChwZWdhc3VzX3QgKiBwZWdhc3VzKQorc3RhdGljIHZvaWQgZnJlZV9za2JfcG9vbChwZWdhc3VzX3QgKnBlZ2FzdXMpCiB7CiAJaW50IGk7CiAKQEAgLTY2NywxMSArNjY3LDExIEBACiAJCW5ldGlmX2RiZyhwZWdhc3VzLCByeF9lcnIsIG5ldCwKIAkJCSAgIlJYIHBhY2tldCBlcnJvciAleFxuIiwgcnhfc3RhdHVzKTsKIAkJcGVnYXN1cy0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCWlmIChyeF9zdGF0dXMgJiAweDA2KQkvLyBsb25nIG9yIHJ1bnQKKwkJaWYgKHJ4X3N0YXR1cyAmIDB4MDYpCS8qIGxvbmcgb3IgcnVudAkqLwogCQkJcGVnYXN1cy0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQlpZiAocnhfc3RhdHVzICYgMHgwOCkKIAkJCXBlZ2FzdXMtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKLQkJaWYgKHJ4X3N0YXR1cyAmIDB4MTApCS8vIGV4dHJhIGJpdHMKKwkJaWYgKHJ4X3N0YXR1cyAmIDB4MTApCS8qIGV4dHJhIGJpdHMJKi8KIAkJCXBlZ2FzdXMtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwogCQlnb3RvIGdvb247CiAJfQpAQCAtNzQ4LDkgKzc0OCw4IEBACiAJaWYgKHBlZ2FzdXMtPmZsYWdzICYgUEVHQVNVU19SWF9VUkJfRkFJTCkKIAkJaWYgKHBlZ2FzdXMtPnJ4X3NrYikKIAkJCWdvdG8gdHJ5X2FnYWluOwotCWlmIChwZWdhc3VzLT5yeF9za2IgPT0gTlVMTCkgeworCWlmIChwZWdhc3VzLT5yeF9za2IgPT0gTlVMTCkKIAkJcGVnYXN1cy0+cnhfc2tiID0gcHVsbF9za2IocGVnYXN1cyk7Ci0JfQogCWlmIChwZWdhc3VzLT5yeF9za2IgPT0gTlVMTCkgewogCQluZXRpZl93YXJuKHBlZ2FzdXMsIHJ4X2VyciwgcGVnYXN1cy0+bmV0LCAibG93IG9uIG1lbW9yeVxuIik7CiAJCXRhc2tsZXRfc2NoZWR1bGUoJnBlZ2FzdXMtPnJ4X3RsKTsKQEAgLTgzNSw3ICs4MzQsNyBAQAogCX0KIAogCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPj0gNikgewotCQl1OAkqIGQgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwkJdTggKmQgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAogCQkvKiBieXRlIDAgPT0gdHhfc3RhdHVzMSwgcmVnIDJCICovCiAJCWlmIChkWzBdICYgKFRYX1VOREVSUlVOfEVYQ0VTU0lWRV9DT0wKQEAgLTkxOCwxNCArOTE3LDE0IEBACiAJcmV0dXJuICYoKHBlZ2FzdXNfdCAqKSBuZXRkZXZfcHJpdihkZXYpKS0+c3RhdHM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX25ldF90cmFmZmljKHBlZ2FzdXNfdCAqIHBlZ2FzdXMpCitzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9uZXRfdHJhZmZpYyhwZWdhc3VzX3QgKnBlZ2FzdXMpCiB7CiAJX19sZTE2IHRtcCA9IGNwdV90b19sZTE2KDApOwogCiAJc2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBFdGhDdHJsMCwgc2l6ZW9mKHRtcCksICZ0bXApOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2ludGVycnVwdF9pbnRlcnZhbChwZWdhc3VzX3QgKiBwZWdhc3VzKQorc3RhdGljIGlubGluZSB2b2lkIGdldF9pbnRlcnJ1cHRfaW50ZXJ2YWwocGVnYXN1c190ICpwZWdhc3VzKQogewogCXUxNiBkYXRhOwogCXU4IGludGVydmFsOwpAQCAtOTYxLDcgKzk2MCw3IEBACiAJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldCk7CiB9CiAKLXN0YXRpYyB2b2lkIGZyZWVfYWxsX3VyYnMocGVnYXN1c190ICogcGVnYXN1cykKK3N0YXRpYyB2b2lkIGZyZWVfYWxsX3VyYnMocGVnYXN1c190ICpwZWdhc3VzKQogewogCXVzYl9mcmVlX3VyYihwZWdhc3VzLT5pbnRyX3VyYik7CiAJdXNiX2ZyZWVfdXJiKHBlZ2FzdXMtPnR4X3VyYik7CkBAIC05NjksNyArOTY4LDcgQEAKIAl1c2JfZnJlZV91cmIocGVnYXN1cy0+Y3RybF91cmIpOwogfQogCi1zdGF0aWMgdm9pZCB1bmxpbmtfYWxsX3VyYnMocGVnYXN1c190ICogcGVnYXN1cykKK3N0YXRpYyB2b2lkIHVubGlua19hbGxfdXJicyhwZWdhc3VzX3QgKnBlZ2FzdXMpCiB7CiAJdXNiX2tpbGxfdXJiKHBlZ2FzdXMtPmludHJfdXJiKTsKIAl1c2Jfa2lsbF91cmIocGVnYXN1cy0+dHhfdXJiKTsKQEAgLTk3NywxMiArOTc2LDExIEBACiAJdXNiX2tpbGxfdXJiKHBlZ2FzdXMtPmN0cmxfdXJiKTsKIH0KIAotc3RhdGljIGludCBhbGxvY191cmJzKHBlZ2FzdXNfdCAqIHBlZ2FzdXMpCitzdGF0aWMgaW50IGFsbG9jX3VyYnMocGVnYXN1c190ICpwZWdhc3VzKQogewogCXBlZ2FzdXMtPmN0cmxfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBlZ2FzdXMtPmN0cmxfdXJiKSB7CisJaWYgKCFwZWdhc3VzLT5jdHJsX3VyYikKIAkJcmV0dXJuIDA7Ci0JfQogCXBlZ2FzdXMtPnJ4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwZWdhc3VzLT5yeF91cmIpIHsKIAkJdXNiX2ZyZWVfdXJiKHBlZ2FzdXMtPmN0cmxfdXJiKTsKQEAgLTEwMTksNyArMTAxNyw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJcmVzID0gc2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBFdGhJRCwgNiwgbmV0LT5kZXZfYWRkcik7Ci0JCisKIAl1c2JfZmlsbF9idWxrX3VyYihwZWdhc3VzLT5yeF91cmIsIHBlZ2FzdXMtPnVzYiwKIAkJCSAgdXNiX3JjdmJ1bGtwaXBlKHBlZ2FzdXMtPnVzYiwgMSksCiAJCQkgIHBlZ2FzdXMtPnJ4X3NrYi0+ZGF0YSwgUEVHQVNVU19NVFUgKyA4LApAQCAtMTAzMyw3ICsxMDMxLDcgQEAKIAogCXVzYl9maWxsX2ludF91cmIocGVnYXN1cy0+aW50cl91cmIsIHBlZ2FzdXMtPnVzYiwKIAkJCSB1c2JfcmN2aW50cGlwZShwZWdhc3VzLT51c2IsIDMpLAotCQkJIHBlZ2FzdXMtPmludHJfYnVmZiwgc2l6ZW9mIChwZWdhc3VzLT5pbnRyX2J1ZmYpLAorCQkJIHBlZ2FzdXMtPmludHJfYnVmZiwgc2l6ZW9mKHBlZ2FzdXMtPmludHJfYnVmZiksCiAJCQkgaW50cl9jYWxsYmFjaywgcGVnYXN1cywgcGVnYXN1cy0+aW50cl9pbnRlcnZhbCk7CiAJaWYgKChyZXMgPSB1c2Jfc3VibWl0X3VyYihwZWdhc3VzLT5pbnRyX3VyYiwgR0ZQX0tFUk5FTCkpKSB7CiAJCWlmIChyZXMgPT0gLUVOT0RFVikKQEAgLTEwNzYsOSArMTA3NCw5IEBACiAJCQkJc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKIHsKIAlwZWdhc3VzX3QgKnBlZ2FzdXMgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cm5jcHkoaW5mby0+ZHJpdmVyLCBkcml2ZXJfbmFtZSwgc2l6ZW9mIChpbmZvLT5kcml2ZXIpIC0gMSk7Ci0Jc3RybmNweShpbmZvLT52ZXJzaW9uLCBEUklWRVJfVkVSU0lPTiwgc2l6ZW9mIChpbmZvLT52ZXJzaW9uKSAtIDEpOwotCXVzYl9tYWtlX3BhdGgocGVnYXN1cy0+dXNiLCBpbmZvLT5idXNfaW5mbywgc2l6ZW9mIChpbmZvLT5idXNfaW5mbykpOworCXN0cm5jcHkoaW5mby0+ZHJpdmVyLCBkcml2ZXJfbmFtZSwgc2l6ZW9mKGluZm8tPmRyaXZlcikgLSAxKTsKKwlzdHJuY3B5KGluZm8tPnZlcnNpb24sIERSSVZFUl9WRVJTSU9OLCBzaXplb2YoaW5mby0+dmVyc2lvbikgLSAxKTsKKwl1c2JfbWFrZV9wYXRoKHBlZ2FzdXMtPnVzYiwgaW5mby0+YnVzX2luZm8sIHNpemVvZihpbmZvLT5idXNfaW5mbykpOwogfQogCiAvKiBhbHNvIGhhbmRsZXMgdGhyZWUgcGF0dGVybnMgb2Ygc29tZSBraW5kIGluIGhhcmR3YXJlICovCkBAIC0xMDk4LDcgKzEwOTYsNyBAQAogewogCXBlZ2FzdXNfdAkqcGVnYXN1cyA9IG5ldGRldl9wcml2KGRldik7CiAJdTgJCXJlZzc4ID0gMHgwNDsKLQkKKwogCWlmICh3b2wtPndvbG9wdHMgJiB+V09MX1NVUFBPUlRFRCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTExMTgsNyArMTExNiw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgcGVnYXN1c19yZXNldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZXRodG9vbF93b2xpbmZvIHdvbDsKLQkKKwogCW1lbXNldCgmd29sLCAwLCBzaXplb2Ygd29sKTsKIAkodm9pZCkgcGVnYXN1c19zZXRfd29sKGRldiwgJndvbCk7CiB9CkBAIC0xMTc4LDcgKzExNzYsNyBAQAogCiBzdGF0aWMgaW50IHBlZ2FzdXNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKIHsKLQlfX3UxNiAqZGF0YSA9IChfX3UxNiAqKSAmIHJxLT5pZnJfaWZydTsKKwlfX3UxNiAqZGF0YSA9IChfX3UxNiAqKSAmcnEtPmlmcl9pZnJ1OwogCXBlZ2FzdXNfdCAqcGVnYXN1cyA9IG5ldGRldl9wcml2KG5ldCk7CiAJaW50IHJlczsKIApAQCAtMTIyMyw3ICsxMjIxLDcgQEAKIAljdHJsX2NhbGxiYWNrKHBlZ2FzdXMtPmN0cmxfdXJiKTsKIH0KIAotc3RhdGljIF9fdTggbWlpX3BoeV9wcm9iZShwZWdhc3VzX3QgKiBwZWdhc3VzKQorc3RhdGljIF9fdTggbWlpX3BoeV9wcm9iZShwZWdhc3VzX3QgKnBlZ2FzdXMpCiB7CiAJaW50IGk7CiAJX191MTYgdG1wOwpAQCAtMTIzOSwxMCArMTIzNywxMCBAQAogCXJldHVybiAweGZmOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfcGVnYXN1c19JSShwZWdhc3VzX3QgKiBwZWdhc3VzKQorc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3BlZ2FzdXNfSUkocGVnYXN1c190ICpwZWdhc3VzKQogewogCV9fdTggZGF0YSA9IDB4YTU7Ci0JCisKIAlzZXRfcmVnaXN0ZXIocGVnYXN1cywgUmVnMWQsIDApOwogCXNldF9yZWdpc3RlcihwZWdhc3VzLCBSZWc3YiwgMSk7CiAJbWRlbGF5KDEwMCk7CkBAIC0xMjU0LDE2ICsxMjUyLDE1IEBACiAJc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIDB4ODMsIGRhdGEpOwogCWdldF9yZWdpc3RlcnMocGVnYXN1cywgMHg4MywgMSwgJmRhdGEpOwogCi0JaWYgKGRhdGEgPT0gMHhhNSkgeworCWlmIChkYXRhID09IDB4YTUpCiAJCXBlZ2FzdXMtPmNoaXAgPSAweDg1MTM7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCXBlZ2FzdXMtPmNoaXAgPSAwOwotCX0KIAogCXNldF9yZWdpc3RlcihwZWdhc3VzLCAweDgwLCAweGMwKTsKIAlzZXRfcmVnaXN0ZXIocGVnYXN1cywgMHg4MywgMHhmZik7CiAJc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIDB4ODQsIDB4MDEpOwotCQorCiAJaWYgKHBlZ2FzdXMtPmZlYXR1cmVzICYgSEFTX0hPTUVfUE5BICYmIG1paV9tb2RlKQogCQlzZXRfcmVnaXN0ZXIocGVnYXN1cywgUmVnODEsIDYpOwogCWVsc2UKQEAgLTEyNzIsNyArMTI2OSw3IEBACiAKIAogc3RhdGljIGludCBwZWdhc3VzX2NvdW50Owotc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpwZWdhc3VzX3dvcmtxdWV1ZSA9IE5VTEw7CitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnBlZ2FzdXNfd29ya3F1ZXVlOwogI2RlZmluZSBDQVJSSUVSX0NIRUNLX0RFTEFZICgyICogSFopCiAKIHN0YXRpYyB2b2lkIGNoZWNrX2NhcnJpZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtMTM2Nyw3ICsxMzY0LDcgQEAKIAlwZWdhc3VzLT5taWkucGh5X2lkX21hc2sgPSAweDFmOwogCXBlZ2FzdXMtPm1paS5yZWdfbnVtX21hc2sgPSAweDFmOwogCXNwaW5fbG9ja19pbml0KCZwZWdhc3VzLT5yeF9wb29sX2xvY2spOwotCXBlZ2FzdXMtPm1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdCAobXNnX2xldmVsLCBORVRJRl9NU0dfRFJWCisJcGVnYXN1cy0+bXNnX2VuYWJsZSA9IG5ldGlmX21zZ19pbml0KG1zZ19sZXZlbCwgTkVUSUZfTVNHX0RSVgogCQkJCXwgTkVUSUZfTVNHX1BST0JFIHwgTkVUSUZfTVNHX0xJTkspOwogCiAJcGVnYXN1cy0+ZmVhdHVyZXMgPSB1c2JfZGV2X2lkW2Rldl9pbmRleF0ucHJpdmF0ZTsKQEAgLTE0NDIsMTEgKzE0MzksMTEgQEAKIAlwZWdhc3VzX2RlY193b3JrcXVldWUoKTsKIH0KIAotc3RhdGljIGludCBwZWdhc3VzX3N1c3BlbmQgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3N0YXRpYyBpbnQgcGVnYXN1c19zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKIHsKIAlzdHJ1Y3QgcGVnYXN1cyAqcGVnYXN1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0JCi0JbmV0aWZfZGV2aWNlX2RldGFjaCAocGVnYXN1cy0+bmV0KTsKKworCW5ldGlmX2RldmljZV9kZXRhY2gocGVnYXN1cy0+bmV0KTsKIAljYW5jZWxfZGVsYXllZF93b3JrKCZwZWdhc3VzLT5jYXJyaWVyX2NoZWNrKTsKIAlpZiAobmV0aWZfcnVubmluZyhwZWdhc3VzLT5uZXQpKSB7CiAJCXVzYl9raWxsX3VyYihwZWdhc3VzLT5yeF91cmIpOwpAQCAtMTQ1NSwxMSArMTQ1MiwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBlZ2FzdXNfcmVzdW1lIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3N0YXRpYyBpbnQgcGVnYXN1c19yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IHBlZ2FzdXMgKnBlZ2FzdXMgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCi0JbmV0aWZfZGV2aWNlX2F0dGFjaCAocGVnYXN1cy0+bmV0KTsKKwluZXRpZl9kZXZpY2VfYXR0YWNoKHBlZ2FzdXMtPm5ldCk7CiAJaWYgKG5ldGlmX3J1bm5pbmcocGVnYXN1cy0+bmV0KSkgewogCQlwZWdhc3VzLT5yeF91cmItPnN0YXR1cyA9IDA7CiAJCXBlZ2FzdXMtPnJ4X3VyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CkBAIC0xNDk4LDggKzE0OTUsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgcGFyc2VfaWQoY2hhciAqaWQpCiB7Ci0JdW5zaWduZWQgaW50IHZlbmRvcl9pZD0wLCBkZXZpY2VfaWQ9MCwgZmxhZ3M9MCwgaT0wOwotCWNoYXIgKnRva2VuLCAqbmFtZT1OVUxMOworCXVuc2lnbmVkIGludCB2ZW5kb3JfaWQgPSAwLCBkZXZpY2VfaWQgPSAwLCBmbGFncyA9IDAsIGkgPSAwOworCWNoYXIgKnRva2VuLCAqbmFtZSA9IE5VTEw7CiAKIAlpZiAoKHRva2VuID0gc3Ryc2VwKCZpZCwgIjoiKSkgIT0gTlVMTCkKIAkJbmFtZSA9IHRva2VuOwpAQCAtMTUxMCwxNCArMTUwNywxNCBAQAogCQlkZXZpY2VfaWQgPSBzaW1wbGVfc3RydG91bCh0b2tlbiwgTlVMTCwgMTYpOwogCWZsYWdzID0gc2ltcGxlX3N0cnRvdWwoaWQsIE5VTEwsIDE2KTsKIAlwcl9pbmZvKCIlczogbmV3IGRldmljZSAlcywgdmVuZG9yIElEIDB4JTA0eCwgZGV2aWNlIElEIDB4JTA0eCwgZmxhZ3M6IDB4JXhcbiIsCi0JICAgICAgICBkcml2ZXJfbmFtZSwgbmFtZSwgdmVuZG9yX2lkLCBkZXZpY2VfaWQsIGZsYWdzKTsKKwkJZHJpdmVyX25hbWUsIG5hbWUsIHZlbmRvcl9pZCwgZGV2aWNlX2lkLCBmbGFncyk7CiAKIAlpZiAodmVuZG9yX2lkID4gMHgxMDAwMCB8fCB2ZW5kb3JfaWQgPT0gMCkKIAkJcmV0dXJuOwogCWlmIChkZXZpY2VfaWQgPiAweDEwMDAwIHx8IGRldmljZV9pZCA9PSAwKQogCQlyZXR1cm47CiAKLQlmb3IgKGk9MDsgdXNiX2Rldl9pZFtpXS5uYW1lOyBpKyspOworCWZvciAoaSA9IDA7IHVzYl9kZXZfaWRbaV0ubmFtZTsgaSsrKTsKIAl1c2JfZGV2X2lkW2ldLm5hbWUgPSBuYW1lOwogCXVzYl9kZXZfaWRbaV0udmVuZG9yID0gdmVuZG9yX2lkOwogCXVzYl9kZXZfaWRbaV0uZGV2aWNlID0gZGV2aWNlX2lkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuaCBiL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmgKaW5kZXggMjlmNTIxMS4uNjViNzhiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuaAorKysgYi9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5oCkBAIC02OCw3ICs2OCw3IEBACiAJRXByb21EYXRhID0gMHgyMSwJLyogMHgyMSBsb3csIDB4MjIgaGlnaCBieXRlICovCiAJRXByb21DdHJsID0gMHgyMywKIAlQaHlBZGRyID0gMHgyNSwKLQlQaHlEYXRhID0gMHgyNiwgCS8qIDB4MjYgbG93LCAweDI3IGhpZ2ggYnl0ZSAqLworCVBoeURhdGEgPSAweDI2LAkJLyogMHgyNiBsb3csIDB4MjcgaGlnaCBieXRlICovCiAJUGh5Q3RybCA9IDB4MjgsCiAJVXNiU3RzdCA9IDB4MmEsCiAJRXRoVHhTdGF0MCA9IDB4MmIsCkBAIC0xNTQsMTYyICsxNTQsMTYyIEBACiAKICNlbHNlCS8qIFBFR0FTVVNfREVWICovCiAKLVBFR0FTVVNfREVWKCAiM0NvbSBVU0IgRXRoZXJuZXQgM0M0NjBCIiwgVkVORE9SXzNDT00sIDB4NDYwMSwKLQkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCi1QRUdBU1VTX0RFViggIkFURU4gVVNCIEV0aGVybmV0IFVDLTExMFQiLCBWRU5ET1JfQVRFTiwgMHgyMDA3LAotCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKLVBFR0FTVVNfREVWKCAiVVNCIEhQTkEvRXRoZXJuZXQiLCBWRU5ET1JfQUJPQ09NLCAweDExMGMsCi0JCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgfCBIQVNfSE9NRV9QTkEgKQotUEVHQVNVU19ERVYoICJVU0IgSFBOQS9FdGhlcm5ldCIsIFZFTkRPUl9BQk9DT00sIDB4NDEwNCwKLQkJREVGQVVMVF9HUElPX1JFU0VUIHwgSEFTX0hPTUVfUE5BICkKLVBFR0FTVVNfREVWKCAiVVNCIEhQTkEvRXRoZXJuZXQiLCBWRU5ET1JfQUJPQ09NLCAweDQwMDQsCi0JCURFRkFVTFRfR1BJT19SRVNFVCB8IEhBU19IT01FX1BOQSApCi1QRUdBU1VTX0RFViggIlVTQiBIUE5BL0V0aGVybmV0IiwgVkVORE9SX0FCT0NPTSwgMHg0MDA3LAotCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBIQVNfSE9NRV9QTkEgKQotUEVHQVNVU19ERVYoICJVU0IgMTAvMTAwIEZhc3QgRXRoZXJuZXQiLCBWRU5ET1JfQUJPQ09NLCAweDQxMDIsCi0JCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQotUEVHQVNVU19ERVYoICJVU0IgMTAvMTAwIEZhc3QgRXRoZXJuZXQiLCBWRU5ET1JfQUJPQ09NLCAweDQwMDIsCi0JCURFRkFVTFRfR1BJT19SRVNFVCApCi1QRUdBU1VTX0RFViggIlVTQiAxMC8xMDAgRmFzdCBFdGhlcm5ldCIsIFZFTkRPUl9BQk9DT00sIDB4NDAwYiwKLQkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCi1QRUdBU1VTX0RFViggIlVTQiAxMC8xMDAgRmFzdCBFdGhlcm5ldCIsIFZFTkRPUl9BQk9DT00sIDB4NDAwYywKLQkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCi1QRUdBU1VTX0RFViggIlVTQiAxMC8xMDAgRmFzdCBFdGhlcm5ldCIsIFZFTkRPUl9BQk9DT00sIDB4YWJjMSwKLQkJREVGQVVMVF9HUElPX1JFU0VUICkKLVBFR0FTVVNfREVWKCAiVVNCIDEwLzEwMCBGYXN0IEV0aGVybmV0IiwgVkVORE9SX0FCT0NPTSwgMHgyMDBjLAotCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKLVBFR0FTVVNfREVWKCAiQWNjdG9uIFVTQiAxMC8xMDAgRXRoZXJuZXQgQWRhcHRlciIsIFZFTkRPUl9BQ0NUT04sIDB4MTA0NiwKLQkJREVGQVVMVF9HUElPX1JFU0VUICkKLVBFR0FTVVNfREVWKCAiU3BlZWRTdHJlYW0gVVNCIDEwLzEwMCBFdGhlcm5ldCIsIFZFTkRPUl9BQ0NUT04sIDB4NTA0NiwKLQkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCi1QRUdBU1VTX0RFViggIlBoaWxpcHMgVVNCIDEwLzEwMCBFdGhlcm5ldCIsIFZFTkRPUl9BQ0NUT04sIDB4YjAwNCwKLQkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCi1QRUdBU1VTX0RFViggIkFETXRlayBBRE04NTExIFwiUGVnYXN1cyBJSVwiIFVTQiBFdGhlcm5ldCIsCitQRUdBU1VTX0RFVigiM0NvbSBVU0IgRXRoZXJuZXQgM0M0NjBCIiwgVkVORE9SXzNDT00sIDB4NDYwMSwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSkKK1BFR0FTVVNfREVWKCJBVEVOIFVTQiBFdGhlcm5ldCBVQy0xMTBUIiwgVkVORE9SX0FURU4sIDB4MjAwNywKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSkKK1BFR0FTVVNfREVWKCJVU0IgSFBOQS9FdGhlcm5ldCIsIFZFTkRPUl9BQk9DT00sIDB4MTEwYywKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSB8IEhBU19IT01FX1BOQSkKK1BFR0FTVVNfREVWKCJVU0IgSFBOQS9FdGhlcm5ldCIsIFZFTkRPUl9BQk9DT00sIDB4NDEwNCwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgSEFTX0hPTUVfUE5BKQorUEVHQVNVU19ERVYoIlVTQiBIUE5BL0V0aGVybmV0IiwgVkVORE9SX0FCT0NPTSwgMHg0MDA0LAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBIQVNfSE9NRV9QTkEpCitQRUdBU1VTX0RFVigiVVNCIEhQTkEvRXRoZXJuZXQiLCBWRU5ET1JfQUJPQ09NLCAweDQwMDcsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IEhBU19IT01FX1BOQSkKK1BFR0FTVVNfREVWKCJVU0IgMTAvMTAwIEZhc3QgRXRoZXJuZXQiLCBWRU5ET1JfQUJPQ09NLCAweDQxMDIsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkpCitQRUdBU1VTX0RFVigiVVNCIDEwLzEwMCBGYXN0IEV0aGVybmV0IiwgVkVORE9SX0FCT0NPTSwgMHg0MDAyLAorCQlERUZBVUxUX0dQSU9fUkVTRVQpCitQRUdBU1VTX0RFVigiVVNCIDEwLzEwMCBGYXN0IEV0aGVybmV0IiwgVkVORE9SX0FCT0NPTSwgMHg0MDBiLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJKQorUEVHQVNVU19ERVYoIlVTQiAxMC8xMDAgRmFzdCBFdGhlcm5ldCIsIFZFTkRPUl9BQk9DT00sIDB4NDAwYywKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSkKK1BFR0FTVVNfREVWKCJVU0IgMTAvMTAwIEZhc3QgRXRoZXJuZXQiLCBWRU5ET1JfQUJPQ09NLCAweGFiYzEsCisJCURFRkFVTFRfR1BJT19SRVNFVCkKK1BFR0FTVVNfREVWKCJVU0IgMTAvMTAwIEZhc3QgRXRoZXJuZXQiLCBWRU5ET1JfQUJPQ09NLCAweDIwMGMsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkpCitQRUdBU1VTX0RFVigiQWNjdG9uIFVTQiAxMC8xMDAgRXRoZXJuZXQgQWRhcHRlciIsIFZFTkRPUl9BQ0NUT04sIDB4MTA0NiwKKwkJREVGQVVMVF9HUElPX1JFU0VUKQorUEVHQVNVU19ERVYoIlNwZWVkU3RyZWFtIFVTQiAxMC8xMDAgRXRoZXJuZXQiLCBWRU5ET1JfQUNDVE9OLCAweDUwNDYsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkpCitQRUdBU1VTX0RFVigiUGhpbGlwcyBVU0IgMTAvMTAwIEV0aGVybmV0IiwgVkVORE9SX0FDQ1RPTiwgMHhiMDA0LAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJKQorUEVHQVNVU19ERVYoIkFETXRlayBBRE04NTExIFwiUGVnYXN1cyBJSVwiIFVTQiBFdGhlcm5ldCIsCiAJCVZFTkRPUl9BRE1URUssIDB4ODUxMSwKLQkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSB8IEhBU19IT01FX1BOQSApCi1QRUdBU1VTX0RFViggIkFETXRlayBBRE04NTEzIFwiUGVnYXN1cyBJSVwiIFVTQiBFdGhlcm5ldCIsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgfCBIQVNfSE9NRV9QTkEpCitQRUdBU1VTX0RFVigiQURNdGVrIEFETTg1MTMgXCJQZWdhc3VzIElJXCIgVVNCIEV0aGVybmV0IiwKIAkJVkVORE9SX0FETVRFSywgMHg4NTEzLAotCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKLVBFR0FTVVNfREVWKCAiQURNdGVrIEFETTg1MTUgXCJQZWdhc3VzIElJXCIgVVNCLTIuMCBFdGhlcm5ldCIsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkpCitQRUdBU1VTX0RFVigiQURNdGVrIEFETTg1MTUgXCJQZWdhc3VzIElJXCIgVVNCLTIuMCBFdGhlcm5ldCIsCiAJCVZFTkRPUl9BRE1URUssIDB4ODUxNSwKLQkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCi1QRUdBU1VTX0RFViggIkFETXRlayBBTjk4NiBcIlBlZ2FzdXNcIiBVU0IgRXRoZXJuZXQgKGV2YWx1YXRpb24gYm9hcmQpIiwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSkKK1BFR0FTVVNfREVWKCJBRE10ZWsgQU45ODYgXCJQZWdhc3VzXCIgVVNCIEV0aGVybmV0IChldmFsdWF0aW9uIGJvYXJkKSIsCiAJCVZFTkRPUl9BRE1URUssIDB4MDk4NiwKLQkJREVGQVVMVF9HUElPX1JFU0VUIHwgSEFTX0hPTUVfUE5BICkKLVBFR0FTVVNfREVWKCAiQU45ODZBIFVTQiBNQUMiLCBWRU5ET1JfQURNVEVLLCAxOTg2LAotCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKLVBFR0FTVVNfREVWKCAiQUVJIFVTQiBGYXN0IEV0aGVybmV0IEFkYXB0ZXIiLCBWRU5ET1JfQUVJTEFCLCAweDE3MDEsCi0JCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQotUEVHQVNVU19ERVYoICJBbGxpZWQgVGVsZXN5biBJbnQuIEFULVVTQjEwMCIsIFZFTkRPUl9BTExJRURURUwsIDB4YjEwMCwKLQkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IEhBU19IT01FX1BOQSkKK1BFR0FTVVNfREVWKCJBTjk4NkEgVVNCIE1BQyIsIFZFTkRPUl9BRE1URUssIDE5ODYsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkpCitQRUdBU1VTX0RFVigiQUVJIFVTQiBGYXN0IEV0aGVybmV0IEFkYXB0ZXIiLCBWRU5ET1JfQUVJTEFCLCAweDE3MDEsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkpCitQRUdBU1VTX0RFVigiQWxsaWVkIFRlbGVzeW4gSW50LiBBVC1VU0IxMDAiLCBWRU5ET1JfQUxMSUVEVEVMLCAweGIxMDAsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkpCiAvKgogICogRGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGlzIEJlbGtpbiBhZGFwdG9yIGFuZCB0aGUgQmVsa2luIGJsdWV0b290aCBhZGFwdG9ycwogICogd2l0aCB0aGUgc2FtZSBwcm9kdWN0IElEcyBieSBjaGVja2luZyB0aGUgZGV2aWNlIGNsYXNzIHRvby4KICAqLwotUEVHQVNVU19ERVZfQ0xBU1MoICJCZWxraW4gRjVENTA1MCBVU0IgRXRoZXJuZXQiLCBWRU5ET1JfQkVMS0lOLCAweDAxMjEsIDB4MDAsCi0JCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQotUEVHQVNVU19ERVYoICJCZWxraW4gRjVVMTIyIDEwLzEwMCBVU0IgRXRoZXJuZXQiLCBWRU5ET1JfQkVMS0lOLCAweDAxMjIsCi0JCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQotUEVHQVNVU19ERVYoICJCaWxsaW9udG9uIFVTQi0xMDAiLCBWRU5ET1JfQklMTElPTlRPTiwgMHgwOTg2LAotCQlERUZBVUxUX0dQSU9fUkVTRVQgKQotUEVHQVNVU19ERVYoICJCaWxsaW9udG9uIFVTQkxQLTEwMCIsIFZFTkRPUl9CSUxMSU9OVE9OLCAweDA5ODcsCi0JCURFRkFVTFRfR1BJT19SRVNFVCB8IEhBU19IT01FX1BOQSApCi1QRUdBU1VTX0RFViggImlQQVEgTmV0d29ya2luZyAxMC8xMDAgVVNCIiwgVkVORE9SX0NPTVBBUSwgMHg4NTExLAotCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKLVBFR0FTVVNfREVWKCAiQmlsbGlvbnRvbiBVU0JFTC0xMDAiLCBWRU5ET1JfQklMTElPTlRPTiwgMHgwOTg4LAotCQlERUZBVUxUX0dQSU9fUkVTRVQgKQotUEVHQVNVU19ERVYoICJCaWxsaW9udG9uIFVTQkUtMTAwIiwgVkVORE9SX0JJTExJT05UT04sIDB4ODUxMSwKLQkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCi1QRUdBU1VTX0RFViggIkNvcmVnYSBGRXRoZXIgVVNCLVRYIiwgVkVORE9SX0NPUkVHQSwgMHgwMDA0LAotCQlERUZBVUxUX0dQSU9fUkVTRVQgKQotUEVHQVNVU19ERVYoICJDb3JlZ2EgRkV0aGVyIFVTQi1UWFMiLCBWRU5ET1JfQ09SRUdBLCAweDAwMGQsCi0JCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQotUEVHQVNVU19ERVYoICJELUxpbmsgRFNCLTY1MFRYIiwgVkVORE9SX0RMSU5LLCAweDQwMDEsCi0JCURFRkFVTFRfR1BJT19SRVNFVCApCi1QRUdBU1VTX0RFViggIkQtTGluayBEU0ItNjUwVFgiLCBWRU5ET1JfRExJTkssIDB4NDAwMiwKLQkJREVGQVVMVF9HUElPX1JFU0VUICkKLVBFR0FTVVNfREVWKCAiRC1MaW5rIERTQi02NTBUWCIsIFZFTkRPUl9ETElOSywgMHg0MTAyLAotCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKLVBFR0FTVVNfREVWKCAiRC1MaW5rIERTQi02NTBUWCIsIFZFTkRPUl9ETElOSywgMHg0MDBiLAotCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKLVBFR0FTVVNfREVWKCAiRC1MaW5rIERTQi02NTBUWCIsIFZFTkRPUl9ETElOSywgMHgyMDBjLAotCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKLVBFR0FTVVNfREVWKCAiRC1MaW5rIERTQi02NTBUWChQTkEpIiwgVkVORE9SX0RMSU5LLCAweDQwMDMsCi0JCURFRkFVTFRfR1BJT19SRVNFVCB8IEhBU19IT01FX1BOQSApCi1QRUdBU1VTX0RFViggIkQtTGluayBEU0ItNjUwIiwgVkVORE9SX0RMSU5LLCAweGFiYzEsCi0JCURFRkFVTFRfR1BJT19SRVNFVCApCi1QRUdBU1VTX0RFViggIkdPTERQRkVJTCBVU0IgQWRhcHRlciIsIFZFTkRPUl9FTENPTiwgMHgwMDAyLAotCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJIHwgSEFTX0hPTUVfUE5BICkKLVBFR0FTVVNfREVWKCAiRUxFQ09NIFVTQiBFdGhlcm5ldCBMRC1VU0IyMCIsIFZFTkRPUl9FTEVDT00sICAweDQwMTAsCi0JCURFRkFVTFRfR1BJT19SRVNFVCAgfCBQRUdBU1VTX0lJICkKLVBFR0FTVVNfREVWKCAiRWFzaURvY2sgRXRoZXJuZXQiLCBWRU5ET1JfTU9CSUxJVFksIDB4MDMwNCwKLQkJREVGQVVMVF9HUElPX1JFU0VUICkKLVBFR0FTVVNfREVWKCAiRWxzYSBNaWNvbGluayBVU0IyRXRoZXJuZXQiLCBWRU5ET1JfRUxTQSwgMHgzMDAwLAotCQlERUZBVUxUX0dQSU9fUkVTRVQgKQotUEVHQVNVU19ERVYoICJHSUdBQllURSBHTi1CUjQwMlcgV2lyZWxlc3MgUm91dGVyIiwgVkVORE9SX0dJR0FCWVRFLCAweDgwMDIsCi0JCURFRkFVTFRfR1BJT19SRVNFVCApCi1QRUdBU1VTX0RFViggIkhhd2tpbmcgVUYxMDAgMTAvMTAwIEV0aGVybmV0IiwgVkVORE9SX0hBV0tJTkcsIDB4NDAwYywKLQkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCi1QRUdBU1VTX0RFViggIkhQIGhuMjEwYyBFdGhlcm5ldCBVU0IiLCBWRU5ET1JfSFAsIDB4ODExYywKLQkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCi1QRUdBU1VTX0RFViggIklPIERBVEEgVVNCIEVUL1RYIiwgVkVORE9SX0lPREFUQSwgMHgwOTA0LAotCQlERUZBVUxUX0dQSU9fUkVTRVQgKQotUEVHQVNVU19ERVYoICJJTyBEQVRBIFVTQiBFVC9UWC1TIiwgVkVORE9SX0lPREFUQSwgMHgwOTEzLAotCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKLVBFR0FTVVNfREVWKCAiSU8gREFUQSBVU0IgRVRYLVVTMiIsIFZFTkRPUl9JT0RBVEEsIDB4MDkzYSwKLQkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCi1QRUdBU1VTX0RFViggIktpbmdzdG9uIEtOVTEwMVRYIEV0aGVybmV0IiwgVkVORE9SX0tJTkdTVE9OLCAweDAwMGEsCitQRUdBU1VTX0RFVl9DTEFTUygiQmVsa2luIEY1RDUwNTAgVVNCIEV0aGVybmV0IiwgVkVORE9SX0JFTEtJTiwgMHgwMTIxLCAweDAwLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJKQorUEVHQVNVU19ERVYoIkJlbGtpbiBGNVUxMjIgMTAvMTAwIFVTQiBFdGhlcm5ldCIsIFZFTkRPUl9CRUxLSU4sIDB4MDEyMiwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSkKK1BFR0FTVVNfREVWKCJCaWxsaW9udG9uIFVTQi0xMDAiLCBWRU5ET1JfQklMTElPTlRPTiwgMHgwOTg2LAogCQlERUZBVUxUX0dQSU9fUkVTRVQpCi1QRUdBU1VTX0RFViggIkxBTkVFRCBVU0IgRXRoZXJuZXQgTEQtVVNCL1RYIiwgVkVORE9SX0xBTkVFRCwgMHg0MDAyLAotCQlERUZBVUxUX0dQSU9fUkVTRVQgKQotUEVHQVNVU19ERVYoICJMQU5FRUQgVVNCIEV0aGVybmV0IExELVVTQkwvVFgiLCBWRU5ET1JfTEFORUVELCAweDQwMDUsCitQRUdBU1VTX0RFVigiQmlsbGlvbnRvbiBVU0JMUC0xMDAiLCBWRU5ET1JfQklMTElPTlRPTiwgMHgwOTg3LAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBIQVNfSE9NRV9QTkEpCitQRUdBU1VTX0RFVigiaVBBUSBOZXR3b3JraW5nIDEwLzEwMCBVU0IiLCBWRU5ET1JfQ09NUEFRLCAweDg1MTEsCiAJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkpCi1QRUdBU1VTX0RFViggIkxBTkVFRCBVU0IgRXRoZXJuZXQgTEQtVVNCL1RYIiwgVkVORE9SX0xBTkVFRCwgMHg0MDBiLAotCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKLVBFR0FTVVNfREVWKCAiTEFORUVEIFVTQiBFdGhlcm5ldCBMRC1VU0IvVCIsIFZFTkRPUl9MQU5FRUQsIDB4YWJjMSwKLQkJREVGQVVMVF9HUElPX1JFU0VUICkKLVBFR0FTVVNfREVWKCAiTEFORUVEIFVTQiBFdGhlcm5ldCBMRC1VU0IvVFgiLCBWRU5ET1JfTEFORUVELCAweDIwMGMsCi0JCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQotUEVHQVNVU19ERVYoICJMaW5rc3lzIFVTQjEwVFgiLCBWRU5ET1JfTElOS1NZUywgMHgyMjAyLAotCQlERUZBVUxUX0dQSU9fUkVTRVQgKQotUEVHQVNVU19ERVYoICJMaW5rc3lzIFVTQjEwMFRYIiwgVkVORE9SX0xJTktTWVMsIDB4MjIwMywKLQkJREVGQVVMVF9HUElPX1JFU0VUICkKLVBFR0FTVVNfREVWKCAiTGlua3N5cyBVU0IxMDBUWCIsIFZFTkRPUl9MSU5LU1lTLCAweDIyMDQsCi0JCURFRkFVTFRfR1BJT19SRVNFVCB8IEhBU19IT01FX1BOQSApCi1QRUdBU1VTX0RFViggIkxpbmtzeXMgVVNCMTBUIEV0aGVybmV0IEFkYXB0ZXIiLCBWRU5ET1JfTElOS1NZUywgMHgyMjA2LAorUEVHQVNVU19ERVYoIkJpbGxpb250b24gVVNCRUwtMTAwIiwgVkVORE9SX0JJTExJT05UT04sIDB4MDk4OCwKKwkJREVGQVVMVF9HUElPX1JFU0VUKQorUEVHQVNVU19ERVYoIkJpbGxpb250b24gVVNCRS0xMDAiLCBWRU5ET1JfQklMTElPTlRPTiwgMHg4NTExLAogCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJKQotUEVHQVNVU19ERVYoICJMaW5rc3lzIFVTQlZQTjEiLCBWRU5ET1JfTElOS1NZUzIsIDB4MDhiNCwKLQkJREVGQVVMVF9HUElPX1JFU0VUICkKLVBFR0FTVVNfREVWKCAiTGlua3N5cyBVU0IgVVNCMTAwVFgiLCBWRU5ET1JfTElOS1NZUywgMHg0MDBiLAotCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKLVBFR0FTVVNfREVWKCAiTGlua3N5cyBVU0IxMFRYIiwgVkVORE9SX0xJTktTWVMsIDB4MjAwYywKLQkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCi1QRUdBU1VTX0RFViggIk1FTENPL0JVRkZBTE8gTFVBLVRYIiwgVkVORE9SX01FTENPLCAweDAwMDEsCi0JCURFRkFVTFRfR1BJT19SRVNFVCApCi1QRUdBU1VTX0RFViggIk1FTENPL0JVRkZBTE8gTFVBLVRYIiwgVkVORE9SX01FTENPLCAweDAwMDUsCi0JCURFRkFVTFRfR1BJT19SRVNFVCApCi1QRUdBU1VTX0RFViggIk1FTENPL0JVRkZBTE8gTFVBMi1UWCIsIFZFTkRPUl9NRUxDTywgMHgwMDA5LAotCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKLVBFR0FTVVNfREVWKCAiTWljcm9zb2Z0IE1OLTExMCIsIFZFTkRPUl9NSUNST1NPRlQsIDB4MDA3YSwKLQkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCi1QRUdBU1VTX0RFViggIk5FVEdFQVIgRkExMDEiLCBWRU5ET1JfTkVUR0VBUiwgMHgxMDIwLAotCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKLVBFR0FTVVNfREVWKCAiT0NUIEluYy4iLCBWRU5ET1JfT0NULCAweDAxMDksCi0JCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQotUEVHQVNVU19ERVYoICJPQ1QgVVNCIFRPIEV0aGVybmV0IiwgVkVORE9SX09DVCwgMHgwOTAxLAotCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKLVBFR0FTVVNfREVWKCAic21hcnROSUMgMiBQblAgQWRhcHRlciIsIFZFTkRPUl9TTUFSVEJSSURHRVMsIDB4MDAwMywKLQkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCi1QRUdBU1VTX0RFViggIlNNQyAyMDIgVVNCIEV0aGVybmV0IiwgVkVORE9SX1NNQywgMHgwMjAwLAotCQlERUZBVUxUX0dQSU9fUkVTRVQgKQotUEVHQVNVU19ERVYoICJTTUMgMjIwNiBVU0IgRXRoZXJuZXQiLCBWRU5ET1JfU01DLCAweDAyMDEsCitQRUdBU1VTX0RFVigiQ29yZWdhIEZFdGhlciBVU0ItVFgiLCBWRU5ET1JfQ09SRUdBLCAweDAwMDQsCisJCURFRkFVTFRfR1BJT19SRVNFVCkKK1BFR0FTVVNfREVWKCJDb3JlZ2EgRkV0aGVyIFVTQi1UWFMiLCBWRU5ET1JfQ09SRUdBLCAweDAwMGQsCiAJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkpCi1QRUdBU1VTX0RFViggIlNPSE93YXJlIE5VQjEwMCBFdGhlcm5ldCIsIFZFTkRPUl9TT0hPV0FSRSwgMHg5MTAwLAotCQlERUZBVUxUX0dQSU9fUkVTRVQgKQotUEVHQVNVU19ERVYoICJTT0hPd2FyZSBOVUIxMTAgRXRoZXJuZXQiLCBWRU5ET1JfU09IT1dBUkUsIDB4OTExMCwKLQkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCi1QRUdBU1VTX0RFViggIlNwZWVkU3RyZWFtIFVTQiAxMC8xMDAgRXRoZXJuZXQiLCBWRU5ET1JfU0lFTUVOUywgMHgxMDAxLAotCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCJELUxpbmsgRFNCLTY1MFRYIiwgVkVORE9SX0RMSU5LLCAweDQwMDEsCisJCURFRkFVTFRfR1BJT19SRVNFVCkKK1BFR0FTVVNfREVWKCJELUxpbmsgRFNCLTY1MFRYIiwgVkVORE9SX0RMSU5LLCAweDQwMDIsCisJCURFRkFVTFRfR1BJT19SRVNFVCkKK1BFR0FTVVNfREVWKCJELUxpbmsgRFNCLTY1MFRYIiwgVkVORE9SX0RMSU5LLCAweDQxMDIsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkpCitQRUdBU1VTX0RFVigiRC1MaW5rIERTQi02NTBUWCIsIFZFTkRPUl9ETElOSywgMHg0MDBiLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJKQorUEVHQVNVU19ERVYoIkQtTGluayBEU0ItNjUwVFgiLCBWRU5ET1JfRExJTkssIDB4MjAwYywKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSkKK1BFR0FTVVNfREVWKCJELUxpbmsgRFNCLTY1MFRYKFBOQSkiLCBWRU5ET1JfRExJTkssIDB4NDAwMywKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgSEFTX0hPTUVfUE5BKQorUEVHQVNVU19ERVYoIkQtTGluayBEU0ItNjUwIiwgVkVORE9SX0RMSU5LLCAweGFiYzEsCisJCURFRkFVTFRfR1BJT19SRVNFVCkKK1BFR0FTVVNfREVWKCJHT0xEUEZFSUwgVVNCIEFkYXB0ZXIiLCBWRU5ET1JfRUxDT04sIDB4MDAwMiwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSB8IEhBU19IT01FX1BOQSkKK1BFR0FTVVNfREVWKCJFTEVDT00gVVNCIEV0aGVybmV0IExELVVTQjIwIiwgVkVORE9SX0VMRUNPTSwgIDB4NDAxMCwKKwkJREVGQVVMVF9HUElPX1JFU0VUICB8IFBFR0FTVVNfSUkpCitQRUdBU1VTX0RFVigiRWFzaURvY2sgRXRoZXJuZXQiLCBWRU5ET1JfTU9CSUxJVFksIDB4MDMwNCwKKwkJREVGQVVMVF9HUElPX1JFU0VUKQorUEVHQVNVU19ERVYoIkVsc2EgTWljb2xpbmsgVVNCMkV0aGVybmV0IiwgVkVORE9SX0VMU0EsIDB4MzAwMCwKKwkJREVGQVVMVF9HUElPX1JFU0VUKQorUEVHQVNVU19ERVYoIkdJR0FCWVRFIEdOLUJSNDAyVyBXaXJlbGVzcyBSb3V0ZXIiLCBWRU5ET1JfR0lHQUJZVEUsIDB4ODAwMiwKKwkJREVGQVVMVF9HUElPX1JFU0VUKQorUEVHQVNVU19ERVYoIkhhd2tpbmcgVUYxMDAgMTAvMTAwIEV0aGVybmV0IiwgVkVORE9SX0hBV0tJTkcsIDB4NDAwYywKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSkKK1BFR0FTVVNfREVWKCJIUCBobjIxMGMgRXRoZXJuZXQgVVNCIiwgVkVORE9SX0hQLCAweDgxMWMsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkpCitQRUdBU1VTX0RFVigiSU8gREFUQSBVU0IgRVQvVFgiLCBWRU5ET1JfSU9EQVRBLCAweDA5MDQsCisJCURFRkFVTFRfR1BJT19SRVNFVCkKK1BFR0FTVVNfREVWKCJJTyBEQVRBIFVTQiBFVC9UWC1TIiwgVkVORE9SX0lPREFUQSwgMHgwOTEzLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJKQorUEVHQVNVU19ERVYoIklPIERBVEEgVVNCIEVUWC1VUzIiLCBWRU5ET1JfSU9EQVRBLCAweDA5M2EsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkpCitQRUdBU1VTX0RFVigiS2luZ3N0b24gS05VMTAxVFggRXRoZXJuZXQiLCBWRU5ET1JfS0lOR1NUT04sIDB4MDAwYSwKKwkJREVGQVVMVF9HUElPX1JFU0VUKQorUEVHQVNVU19ERVYoIkxBTkVFRCBVU0IgRXRoZXJuZXQgTEQtVVNCL1RYIiwgVkVORE9SX0xBTkVFRCwgMHg0MDAyLAorCQlERUZBVUxUX0dQSU9fUkVTRVQpCitQRUdBU1VTX0RFVigiTEFORUVEIFVTQiBFdGhlcm5ldCBMRC1VU0JML1RYIiwgVkVORE9SX0xBTkVFRCwgMHg0MDA1LAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJKQorUEVHQVNVU19ERVYoIkxBTkVFRCBVU0IgRXRoZXJuZXQgTEQtVVNCL1RYIiwgVkVORE9SX0xBTkVFRCwgMHg0MDBiLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJKQorUEVHQVNVU19ERVYoIkxBTkVFRCBVU0IgRXRoZXJuZXQgTEQtVVNCL1QiLCBWRU5ET1JfTEFORUVELCAweGFiYzEsCisJCURFRkFVTFRfR1BJT19SRVNFVCkKK1BFR0FTVVNfREVWKCJMQU5FRUQgVVNCIEV0aGVybmV0IExELVVTQi9UWCIsIFZFTkRPUl9MQU5FRUQsIDB4MjAwYywKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSkKK1BFR0FTVVNfREVWKCJMaW5rc3lzIFVTQjEwVFgiLCBWRU5ET1JfTElOS1NZUywgMHgyMjAyLAorCQlERUZBVUxUX0dQSU9fUkVTRVQpCitQRUdBU1VTX0RFVigiTGlua3N5cyBVU0IxMDBUWCIsIFZFTkRPUl9MSU5LU1lTLCAweDIyMDMsCisJCURFRkFVTFRfR1BJT19SRVNFVCkKK1BFR0FTVVNfREVWKCJMaW5rc3lzIFVTQjEwMFRYIiwgVkVORE9SX0xJTktTWVMsIDB4MjIwNCwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgSEFTX0hPTUVfUE5BKQorUEVHQVNVU19ERVYoIkxpbmtzeXMgVVNCMTBUIEV0aGVybmV0IEFkYXB0ZXIiLCBWRU5ET1JfTElOS1NZUywgMHgyMjA2LAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJKQorUEVHQVNVU19ERVYoIkxpbmtzeXMgVVNCVlBOMSIsIFZFTkRPUl9MSU5LU1lTMiwgMHgwOGI0LAorCQlERUZBVUxUX0dQSU9fUkVTRVQpCitQRUdBU1VTX0RFVigiTGlua3N5cyBVU0IgVVNCMTAwVFgiLCBWRU5ET1JfTElOS1NZUywgMHg0MDBiLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJKQorUEVHQVNVU19ERVYoIkxpbmtzeXMgVVNCMTBUWCIsIFZFTkRPUl9MSU5LU1lTLCAweDIwMGMsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkpCitQRUdBU1VTX0RFVigiTUVMQ08vQlVGRkFMTyBMVUEtVFgiLCBWRU5ET1JfTUVMQ08sIDB4MDAwMSwKKwkJREVGQVVMVF9HUElPX1JFU0VUKQorUEVHQVNVU19ERVYoIk1FTENPL0JVRkZBTE8gTFVBLVRYIiwgVkVORE9SX01FTENPLCAweDAwMDUsCisJCURFRkFVTFRfR1BJT19SRVNFVCkKK1BFR0FTVVNfREVWKCJNRUxDTy9CVUZGQUxPIExVQTItVFgiLCBWRU5ET1JfTUVMQ08sIDB4MDAwOSwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSkKK1BFR0FTVVNfREVWKCJNaWNyb3NvZnQgTU4tMTEwIiwgVkVORE9SX01JQ1JPU09GVCwgMHgwMDdhLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJKQorUEVHQVNVU19ERVYoIk5FVEdFQVIgRkExMDEiLCBWRU5ET1JfTkVUR0VBUiwgMHgxMDIwLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJKQorUEVHQVNVU19ERVYoIk9DVCBJbmMuIiwgVkVORE9SX09DVCwgMHgwMTA5LAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJKQorUEVHQVNVU19ERVYoIk9DVCBVU0IgVE8gRXRoZXJuZXQiLCBWRU5ET1JfT0NULCAweDA5MDEsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkpCitQRUdBU1VTX0RFVigic21hcnROSUMgMiBQblAgQWRhcHRlciIsIFZFTkRPUl9TTUFSVEJSSURHRVMsIDB4MDAwMywKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSkKK1BFR0FTVVNfREVWKCJTTUMgMjAyIFVTQiBFdGhlcm5ldCIsIFZFTkRPUl9TTUMsIDB4MDIwMCwKKwkJREVGQVVMVF9HUElPX1JFU0VUKQorUEVHQVNVU19ERVYoIlNNQyAyMjA2IFVTQiBFdGhlcm5ldCIsIFZFTkRPUl9TTUMsIDB4MDIwMSwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSkKK1BFR0FTVVNfREVWKCJTT0hPd2FyZSBOVUIxMDAgRXRoZXJuZXQiLCBWRU5ET1JfU09IT1dBUkUsIDB4OTEwMCwKKwkJREVGQVVMVF9HUElPX1JFU0VUKQorUEVHQVNVU19ERVYoIlNPSE93YXJlIE5VQjExMCBFdGhlcm5ldCIsIFZFTkRPUl9TT0hPV0FSRSwgMHg5MTEwLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJKQorUEVHQVNVU19ERVYoIlNwZWVkU3RyZWFtIFVTQiAxMC8xMDAgRXRoZXJuZXQiLCBWRU5ET1JfU0lFTUVOUywgMHgxMDAxLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJKQogCiAKICNlbmRpZgkvKiBQRUdBU1VTX0RFViAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3NpZXJyYV9uZXQuYyBiL2RyaXZlcnMvbmV0L3VzYi9zaWVycmFfbmV0LmMKaW5kZXggZjE5NDJkNi4uZWU4NWM4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3NpZXJyYV9uZXQuYworKysgYi9kcml2ZXJzL25ldC91c2Ivc2llcnJhX25ldC5jCkBAIC0xNjUsNyArMTY1LDcgQEAKIAl1OCBnd19hZGRyX2xlbjsgLyogTlctc3VwcGxpZWQgR1cgYWRkcmVzcyBsZW4gKi8KIAl1OCBnd19hZGRyWzE2XTsgLyogTlctc3VwcGxpZWQgR1cgYWRkcmVzcyAoYmlnZW5kaWFuKSAqLwogCXU4IHJlc2VydmVkWzhdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIFNJRVJSQV9ORVRfTFNJX0NPTU1PTl9MRU4gICAgICA0CiAjZGVmaW5lIFNJRVJSQV9ORVRfTFNJX1VNVFNfTEVOICAgICAgICAoc2l6ZW9mKHN0cnVjdCBsc2lfdW10cykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKaW5kZXggODFjNzZhZC4uM2IwMzc5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi91c2JuZXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKICNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCSIyMi1BdWctMjAwNSIKIApAQCAtMTU4LDE2ICsxNTksNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X2dldF9lbmRwb2ludHMpOwogCi1zdGF0aWMgdTggbmliYmxlKHVuc2lnbmVkIGNoYXIgYykKLXsKLQlpZiAobGlrZWx5KGlzZGlnaXQoYykpKQotCQlyZXR1cm4gYyAtICcwJzsKLQljID0gdG91cHBlcihjKTsKLQlpZiAobGlrZWx5KGlzeGRpZ2l0KGMpKSkKLQkJcmV0dXJuIDEwICsgYyAtICdBJzsKLQlyZXR1cm4gMDsKLX0KLQogaW50IHVzYm5ldF9nZXRfZXRoZXJuZXRfYWRkcihzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBpTUFDQWRkcmVzcykKIHsKIAlpbnQgCQl0bXAsIGk7CkBAIC0xODMsNyArMTc0LDcgQEAKIAl9CiAJZm9yIChpID0gdG1wID0gMDsgaSA8IDY7IGkrKywgdG1wICs9IDIpCiAJCWRldi0+bmV0LT5kZXZfYWRkciBbaV0gPQotCQkJKG5pYmJsZShidWYgW3RtcF0pIDw8IDQpICsgbmliYmxlKGJ1ZiBbdG1wICsgMV0pOworCQkJKGhleF90b19iaW4oYnVmW3RtcF0pIDw8IDQpICsgaGV4X3RvX2JpbihidWZbdG1wICsgMV0pOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X2dldF9ldGhlcm5ldF9hZGRyKTsKQEAgLTYyNCw3ICs2MTUsNyBAQAogCXdoaWxlICghc2tiX3F1ZXVlX2VtcHR5KCZkZXYtPnJ4cSkKIAkJJiYgIXNrYl9xdWV1ZV9lbXB0eSgmZGV2LT50eHEpCiAJCSYmICFza2JfcXVldWVfZW1wdHkoJmRldi0+ZG9uZSkpIHsKLQkJCXNjaGVkdWxlX3RpbWVvdXQoVU5MSU5LX1RJTUVPVVRfTVMpOworCQkJc2NoZWR1bGVfdGltZW91dChtc2Vjc190b19qaWZmaWVzKFVOTElOS19USU1FT1VUX01TKSk7CiAJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJCQluZXRpZl9kYmcoZGV2LCBpZmRvd24sIGRldi0+bmV0LAogCQkJCSAgIndhaXRlZCBmb3IgJWQgdXJiIGNvbXBsZXRpb25zXG4iLCB0ZW1wKTsKQEAgLTY0Myw3ICs2MzQsNyBAQAogCW5ldGlmX3N0b3BfcXVldWUgKG5ldCk7CiAKIAluZXRpZl9pbmZvKGRldiwgaWZkb3duLCBkZXYtPm5ldCwKLQkJICAgInN0b3Agc3RhdHM6IHJ4L3R4ICVsZC8lbGQsIGVycnMgJWxkLyVsZFxuIiwKKwkJICAgInN0b3Agc3RhdHM6IHJ4L3R4ICVsdS8lbHUsIGVycnMgJWx1LyVsdVxuIiwKIAkJICAgbmV0LT5zdGF0cy5yeF9wYWNrZXRzLCBuZXQtPnN0YXRzLnR4X3BhY2tldHMsCiAJCSAgIG5ldC0+c3RhdHMucnhfZXJyb3JzLCBuZXQtPnN0YXRzLnR4X2Vycm9ycyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5oIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmgKaW5kZXggYzM4MTkxMS4uZjdiMzNhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmgKKysrIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmgKQEAgLTE5Myw3ICsxOTMsNyBAQAogCV9fbGUzMiBwYV9sb3c7CQkvKiBMb3cgMzIgYml0IFBDSSBhZGRyZXNzICovCiAJX19sZTE2IHBhX2hpZ2g7CQkvKiBOZXh0IDE2IGJpdCBQQ0kgYWRkcmVzcyAoNDggdG90YWwpICovCiAJX19sZTE2IHNpemU7CQkvKiBiaXRzIDAtLTE0IC0gZnJhbWUgc2l6ZSwgYml0IDE1IC0gZW5hYmxlIGludC4gKi8KLX0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKK30gX19wYWNrZWQ7CiAKIC8qCiAgKglUcmFuc21pdCBkZXNjcmlwdG9yCkBAIC0yMDgsNyArMjA4LDcgQEAKIAlfX2xlMTYgdmxhbjsKIAl1OCBUQ1I7CiAJdTggY21kOwkJCS8qIGJpdHMgMC0tMSAtIFRDUExTLCBiaXRzIDQtLTcgLSBDTURaICovCi19IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7Cit9IF9fcGFja2VkOwogCiBlbnVtIHsKIAlURF9RVUVVRSA9IGNwdV90b19sZTE2KDB4ODAwMCkKQEAgLTIxOCw3ICsyMTgsNyBAQAogCV9fbGUzMiBwYV9sb3c7CiAJX19sZTE2IHBhX2hpZ2g7CiAJX19sZTE2IHNpemU7CQkvKiBiaXRzIDAtLTEzIC0gc2l6ZSwgYml0IDE1IC0gcXVldWUgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCB0eF9kZXNjIHsKIAlzdHJ1Y3QgdGRlc2MwIHRkZXNjMDsKQEAgLTEwOTYsNyArMTA5Niw3IEBACiAKIAl2b2xhdGlsZSBfX2xlMTYgUGF0dGVybkNSQ1s4XTsJLyogMHhCMCAqLwogCXZvbGF0aWxlIF9fbGUzMiBCeXRlTWFza1s0XVs0XTsJLyogMHhDMCAqLwotfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworfSBfX3BhY2tlZDsKIAogCiBlbnVtIGh3X21pYiB7CkBAIC0xMjE2LDcgKzEyMTYsNyBAQAogCXU4IGFyX3NpcFs0XTsKIAl1OCBhcl90aGFbRVRIX0FMRU5dOwogCXU4IGFyX3RpcFs0XTsKLX0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBfbWFnaWNfcGFja2V0IHsKIAl1OCBkZXN0X21hY1s2XTsKQEAgLTEyMjQsNyArMTIyNCw3IEBACiAJX19iZTE2IHR5cGU7CiAJdTggTUFDWzE2XVs2XTsKIAl1OCBwYXNzd29yZFs2XTsKLX0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKK30gX19wYWNrZWQ7CiAKIC8qCiAgKglTdG9yZSBmb3IgY2hpcCBjb250ZXh0IHdoZW4gc2F2aW5nIGFuZCByZXN0b3Jpbmcgc3RhdHVzLiBOb3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kZWZzLmggYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZGVmcy5oCmluZGV4IGI0ODg5ZTYuLmNhNzcyN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kZWZzLmgKKysrIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2RlZnMuaApAQCAtNDY0LDYgKzQ2NCw5IEBACiAvKiBhZGRpdGlvbiAxIGZvciBldmVudHMgKi8KICNkZWZpbmUgVk1YTkVUM19NQVhfSU5UUlMgICAgICAyNQogCisvKiB2YWx1ZSBvZiBpbnRyQ3RybCAqLworI2RlZmluZSBWTVhORVQzX0lDX0RJU0FCTEVfQUxMICAweDEgICAvKiBiaXQgMCAqLworCiAKIHN0cnVjdCBWbXhuZXQzX0ludHJDb25mIHsKIAlib29sCQlhdXRvTWFzazsKQEAgLTQ3MSw3ICs0NzQsOCBAQAogCXU4CQlldmVudEludHJJZHg7CiAJdTgJCW1vZExldmVsc1tWTVhORVQzX01BWF9JTlRSU107CS8qIG1vZGVyYXRpb24gbGV2ZWwgZm9yCiAJCQkJCQkJICogZWFjaCBpbnRyICovCi0JX19sZTMyCQlyZXNlcnZlZFszXTsKKwlfX2xlMzIJCWludHJDdHJsOworCV9fbGUzMgkJcmVzZXJ2ZWRbMl07CiB9OwogCiAvKiBvbmUgYml0IHBlciBWTEFOIElELCB0aGUgc2l6ZSBpcyBpbiB0aGUgdW5pdHMgb2YgdTMyCSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZHJ2LmMgYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZHJ2LmMKaW5kZXggOTg5Yjc0Mi4uYWJlMGZmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2Rydi5jCisrKyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYwpAQCAtNzIsNiArNzIsOCBAQAogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPmludHIubnVtX2ludHJzOyBpKyspCiAJCXZteG5ldDNfZW5hYmxlX2ludHIoYWRhcHRlciwgaSk7CisJYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLmludHJDb25mLmludHJDdHJsICY9CisJCQkJCWNwdV90b19sZTMyKH5WTVhORVQzX0lDX0RJU0FCTEVfQUxMKTsKIH0KIAogCkBAIC04MCw2ICs4Miw4IEBACiB7CiAJaW50IGk7CiAKKwlhZGFwdGVyLT5zaGFyZWQtPmRldlJlYWQuaW50ckNvbmYuaW50ckN0cmwgfD0KKwkJCQkJY3B1X3RvX2xlMzIoVk1YTkVUM19JQ19ESVNBQkxFX0FMTCk7CiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPmludHIubnVtX2ludHJzOyBpKyspCiAJCXZteG5ldDNfZGlzYWJsZV9pbnRyKGFkYXB0ZXIsIGkpOwogfQpAQCAtMTI4LDcgKzEzMiw3IEBACiAgKiBDaGVjayB0aGUgbGluayBzdGF0ZS4gVGhpcyBtYXkgc3RhcnQgb3Igc3RvcCB0aGUgdHggcXVldWUuCiAgKi8KIHN0YXRpYyB2b2lkCi12bXhuZXQzX2NoZWNrX2xpbmsoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3ZteG5ldDNfY2hlY2tfbGluayhzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyLCBib29sIGFmZmVjdFR4UXVldWUpCiB7CiAJdTMyIHJldDsKIApAQCAtMTQxLDE0ICsxNDUsMTYgQEAKIAkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGFkYXB0ZXItPm5ldGRldikpCiAJCQluZXRpZl9jYXJyaWVyX29uKGFkYXB0ZXItPm5ldGRldik7CiAKLQkJdm14bmV0M190cV9zdGFydCgmYWRhcHRlci0+dHhfcXVldWUsIGFkYXB0ZXIpOworCQlpZiAoYWZmZWN0VHhRdWV1ZSkKKwkJCXZteG5ldDNfdHFfc3RhcnQoJmFkYXB0ZXItPnR4X3F1ZXVlLCBhZGFwdGVyKTsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9JTkZPICIlczogTklDIExpbmsgaXMgRG93blxuIiwKIAkJICAgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CiAJCWlmIChuZXRpZl9jYXJyaWVyX29rKGFkYXB0ZXItPm5ldGRldikpCiAJCQluZXRpZl9jYXJyaWVyX29mZihhZGFwdGVyLT5uZXRkZXYpOwogCi0JCXZteG5ldDNfdHFfc3RvcCgmYWRhcHRlci0+dHhfcXVldWUsIGFkYXB0ZXIpOworCQlpZiAoYWZmZWN0VHhRdWV1ZSkKKwkJCXZteG5ldDNfdHFfc3RvcCgmYWRhcHRlci0+dHhfcXVldWUsIGFkYXB0ZXIpOwogCX0KIH0KIApAQCAtMTYzLDcgKzE2OSw3IEBACiAKIAkvKiBDaGVjayBpZiBsaW5rIHN0YXRlIGhhcyBjaGFuZ2VkICovCiAJaWYgKGV2ZW50cyAmIFZNWE5FVDNfRUNSX0xJTkspCi0JCXZteG5ldDNfY2hlY2tfbGluayhhZGFwdGVyKTsKKwkJdm14bmV0M19jaGVja19saW5rKGFkYXB0ZXIsIHRydWUpOwogCiAJLyogQ2hlY2sgaWYgdGhlcmUgaXMgYW4gZXJyb3Igb24geG1pdC9yZWN2IHF1ZXVlcyAqLwogCWlmIChldmVudHMgJiAoVk1YTkVUM19FQ1JfVFFFUlIgfCBWTVhORVQzX0VDUl9SUUVSUikpIHsKQEAgLTY1OCw4ICs2NjQsMTMgQEAKIAl3aGlsZSAobGVuKSB7CiAJCXUzMiBidWZfc2l6ZTsKIAotCQlidWZfc2l6ZSA9IGxlbiA+IFZNWE5FVDNfTUFYX1RYX0JVRl9TSVpFID8KLQkJCSAgIFZNWE5FVDNfTUFYX1RYX0JVRl9TSVpFIDogbGVuOworCQlpZiAobGVuIDwgVk1YTkVUM19NQVhfVFhfQlVGX1NJWkUpIHsKKwkJCWJ1Zl9zaXplID0gbGVuOworCQkJZHcyIHw9IGxlbjsKKwkJfSBlbHNlIHsKKwkJCWJ1Zl9zaXplID0gVk1YTkVUM19NQVhfVFhfQlVGX1NJWkU7CisJCQkvKiBzcGVjIHNheXMgdGhhdCBmb3IgVHhEZXNjLmxlbiwgMCA9PSAyXjE0ICovCisJCX0KIAogCQl0YmkgPSB0cS0+YnVmX2luZm8gKyB0cS0+dHhfcmluZy5uZXh0MmZpbGw7CiAJCXRiaS0+bWFwX3R5cGUgPSBWTVhORVQzX01BUF9TSU5HTEU7CkBAIC02NjcsMTMgKzY3OCwxMyBAQAogCQkJCXNrYi0+ZGF0YSArIGJ1Zl9vZmZzZXQsIGJ1Zl9zaXplLAogCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOwogCi0JCXRiaS0+bGVuID0gYnVmX3NpemU7IC8qIHRoaXMgYXV0b21hdGljYWxseSBjb252ZXJ0IDJeMTQgdG8gMCAqLworCQl0YmktPmxlbiA9IGJ1Zl9zaXplOwogCiAJCWdkZXNjID0gdHEtPnR4X3JpbmcuYmFzZSArIHRxLT50eF9yaW5nLm5leHQyZmlsbDsKIAkJQlVHX09OKGdkZXNjLT50eGQuZ2VuID09IHRxLT50eF9yaW5nLmdlbik7CiAKIAkJZ2Rlc2MtPnR4ZC5hZGRyID0gY3B1X3RvX2xlNjQodGJpLT5kbWFfYWRkcik7Ci0JCWdkZXNjLT5kd29yZFsyXSA9IGNwdV90b19sZTMyKGR3MiB8IGJ1Zl9zaXplKTsKKwkJZ2Rlc2MtPmR3b3JkWzJdID0gY3B1X3RvX2xlMzIoZHcyKTsKIAkJZ2Rlc2MtPmR3b3JkWzNdID0gMDsKIAogCQlkZXZfZGJnKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKQEAgLTE4MjUsNiArMTgzNiw3IEBACiAJCWRldlJlYWQtPmludHJDb25mLm1vZExldmVsc1tpXSA9IGFkYXB0ZXItPmludHIubW9kX2xldmVsc1tpXTsKIAogCWRldlJlYWQtPmludHJDb25mLmV2ZW50SW50cklkeCA9IGFkYXB0ZXItPmludHIuZXZlbnRfaW50cl9pZHg7CisJZGV2UmVhZC0+aW50ckNvbmYuaW50ckN0cmwgfD0gY3B1X3RvX2xlMzIoVk1YTkVUM19JQ19ESVNBQkxFX0FMTCk7CiAKIAkvKiByeCBmaWx0ZXIgc2V0dGluZ3MgKi8KIAlkZXZSZWFkLT5yeEZpbHRlckNvbmYucnhNb2RlID0gMDsKQEAgLTE4ODksNyArMTkwMSw3IEBACiAJICogQ2hlY2sgbGluayBzdGF0ZSB3aGVuIGZpcnN0IGFjdGl2YXRpbmcgZGV2aWNlLiBJdCB3aWxsIHN0YXJ0IHRoZQogCSAqIHR4IHF1ZXVlIGlmIHRoZSBsaW5rIGlzIHVwLgogCSAqLwotCXZteG5ldDNfY2hlY2tfbGluayhhZGFwdGVyKTsKKwl2bXhuZXQzX2NoZWNrX2xpbmsoYWRhcHRlciwgdHJ1ZSk7CiAKIAluYXBpX2VuYWJsZSgmYWRhcHRlci0+bmFwaSk7CiAJdm14bmV0M19lbmFibGVfYWxsX2ludHJzKGFkYXB0ZXIpOwpAQCAtMjI5NSw5ICsyMzA3LDEzIEBACiAJYWRhcHRlci0+aW50ci5tYXNrX21vZGUgPSAoY2ZnID4+IDIpICYgMHgzOwogCiAJaWYgKGFkYXB0ZXItPmludHIudHlwZSA9PSBWTVhORVQzX0lUX0FVVE8pIHsKLQkJaW50IGVycjsKKwkJYWRhcHRlci0+aW50ci50eXBlID0gVk1YTkVUM19JVF9NU0lYOworCX0KIAogI2lmZGVmIENPTkZJR19QQ0lfTVNJCisJaWYgKGFkYXB0ZXItPmludHIudHlwZSA9PSBWTVhORVQzX0lUX01TSVgpIHsKKwkJaW50IGVycjsKKwogCQlhZGFwdGVyLT5pbnRyLm1zaXhfZW50cmllc1swXS5lbnRyeSA9IDA7CiAJCWVyciA9IHBjaV9lbmFibGVfbXNpeChhZGFwdGVyLT5wZGV2LCBhZGFwdGVyLT5pbnRyLm1zaXhfZW50cmllcywKIAkJCQkgICAgICBWTVhORVQzX0xJTlVYX01BWF9NU0lYX1ZFQ1QpOwpAQCAtMjMwNiwxNSArMjMyMiwxOCBAQAogCQkJYWRhcHRlci0+aW50ci50eXBlID0gVk1YTkVUM19JVF9NU0lYOwogCQkJcmV0dXJuOwogCQl9Ci0jZW5kaWYKKwkJYWRhcHRlci0+aW50ci50eXBlID0gVk1YTkVUM19JVF9NU0k7CisJfQogCisJaWYgKGFkYXB0ZXItPmludHIudHlwZSA9PSBWTVhORVQzX0lUX01TSSkgeworCQlpbnQgZXJyOwogCQllcnIgPSBwY2lfZW5hYmxlX21zaShhZGFwdGVyLT5wZGV2KTsKIAkJaWYgKCFlcnIpIHsKIAkJCWFkYXB0ZXItPmludHIubnVtX2ludHJzID0gMTsKLQkJCWFkYXB0ZXItPmludHIudHlwZSA9IFZNWE5FVDNfSVRfTVNJOwogCQkJcmV0dXJuOwogCQl9CiAJfQorI2VuZGlmIC8qIENPTkZJR19QQ0lfTVNJICovCiAKIAlhZGFwdGVyLT5pbnRyLnR5cGUgPSBWTVhORVQzX0lUX0lOVFg7CiAKQEAgLTIzNTgsNiArMjM3Nyw3IEBACiAJCXJldHVybjsKIAogCS8qIGlmIHRoZSBkZXZpY2UgaXMgY2xvc2VkLCB3ZSBtdXN0IGxlYXZlIGl0IGFsb25lICovCisJcnRubF9sb2NrKCk7CiAJaWYgKG5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkgewogCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVzZXR0aW5nXG4iLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOwogCQl2bXhuZXQzX3F1aWVzY2VfZGV2KGFkYXB0ZXIpOwpAQCAtMjM2Niw2ICsyMzg2LDcgQEAKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9JTkZPICIlczogYWxyZWFkeSBjbG9zZWRcbiIsIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CiAJfQorCXJ0bmxfdW5sb2NrKCk7CiAKIAljbGVhcl9iaXQoVk1YTkVUM19TVEFURV9CSVRfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOwogfQpAQCAtMjQ5MSw2ICsyNTEyLDcgQEAKIAl9CiAKIAlzZXRfYml0KFZNWE5FVDNfU1RBVEVfQklUX1FVSUVTQ0VELCAmYWRhcHRlci0+c3RhdGUpOworCXZteG5ldDNfY2hlY2tfbGluayhhZGFwdGVyLCBmYWxzZSk7CiAJYXRvbWljX2luYygmZGV2aWNlc19mb3VuZCk7CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZXRodG9vbC5jCmluZGV4IDM5MzVjNDQuLjdlNGI1YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2V0aHRvb2wuYwpAQCAtMjc1LDI3ICsyNzUsMjcgQEAKIAl9CiB9CiAKLXN0YXRpYyB1MzIKLXZteG5ldDNfZ2V0X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpIHsKLQlyZXR1cm4gbmV0ZGV2LT5mZWF0dXJlczsKLX0KLQogc3RhdGljIGludAotdm14bmV0M19zZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGRhdGEpIHsKK3ZteG5ldDNfc2V0X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQorewogCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXU4IGxyb19yZXF1ZXN0ZWQgPSAoZGF0YSAmIEVUSF9GTEFHX0xSTykgPT0gMCA/IDAgOiAxOwogCXU4IGxyb19wcmVzZW50ID0gKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykgPT0gMCA/IDAgOiAxOwogCisJaWYgKGRhdGEgJiB+RVRIX0ZMQUdfTFJPKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKIAlpZiAobHJvX3JlcXVlc3RlZCBeIGxyb19wcmVzZW50KSB7CiAJCS8qIHRvZ2dsZSB0aGUgTFJPIGZlYXR1cmUqLwogCQluZXRkZXYtPmZlYXR1cmVzIF49IE5FVElGX0ZfTFJPOwogCiAJCS8qIHVwZGF0ZSBoYXJ3YXJlIExSTyBjYXBhYmlsaXR5IGFjY29yZGluZ2x5ICovCiAJCWlmIChscm9fcmVxdWVzdGVkKQotCQkJYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLm1pc2MudXB0RmVhdHVyZXMgJj0gVVBUMV9GX0xSTzsKKwkJCWFkYXB0ZXItPnNoYXJlZC0+ZGV2UmVhZC5taXNjLnVwdEZlYXR1cmVzIHw9CisJCQkJCQljcHVfdG9fbGU2NChVUFQxX0ZfTFJPKTsKIAkJZWxzZQogCQkJYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLm1pc2MudXB0RmVhdHVyZXMgJj0KLQkJCQkJCQkJflVQVDFfRl9MUk87CisJCQkJCQljcHVfdG9fbGU2NCh+VVBUMV9GX0xSTyk7CiAJCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAogCQkJCSAgICAgICBWTVhORVQzX0NNRF9VUERBVEVfRkVBVFVSRSk7CiAJfQpAQCAtNTU0LDcgKzU1NCw3IEBACiAJLmdldF90c28gICAgICAgICAgID0gZXRodG9vbF9vcF9nZXRfdHNvLAogCS5zZXRfdHNvICAgICAgICAgICA9IGV0aHRvb2xfb3Bfc2V0X3RzbywKIAkuZ2V0X3N0cmluZ3MgICAgICAgPSB2bXhuZXQzX2dldF9zdHJpbmdzLAotCS5nZXRfZmxhZ3MJICAgPSB2bXhuZXQzX2dldF9mbGFncywKKwkuZ2V0X2ZsYWdzCSAgID0gZXRodG9vbF9vcF9nZXRfZmxhZ3MsCiAJLnNldF9mbGFncwkgICA9IHZteG5ldDNfc2V0X2ZsYWdzLAogCS5nZXRfc3NldF9jb3VudAkgICA9IHZteG5ldDNfZ2V0X3NzZXRfY291bnQsCiAJLmdldF9ldGh0b29sX3N0YXRzID0gdm14bmV0M19nZXRfZXRodG9vbF9zdGF0cywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19pbnQuaCBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19pbnQuaAppbmRleCAzNGYzOTJmNC4uMjEyMWM3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2ludC5oCisrKyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19pbnQuaApAQCAtNjgsMTAgKzY4LDEwIEBACiAvKgogICogVmVyc2lvbiBudW1iZXJzCiAgKi8KLSNkZWZpbmUgVk1YTkVUM19EUklWRVJfVkVSU0lPTl9TVFJJTkcgICAiMS4wLjUuMC1rIgorI2RlZmluZSBWTVhORVQzX0RSSVZFUl9WRVJTSU9OX1NUUklORyAgICIxLjAuMTQuMC1rIgogCiAvKiBhIDMyLWJpdCBpbnQsIGVhY2ggYnl0ZSBlbmNvZGUgYSB2ZXJpb24gbnVtYmVyIGluIFZNWE5FVDNfRFJJVkVSX1ZFUlNJT04gKi8KLSNkZWZpbmUgVk1YTkVUM19EUklWRVJfVkVSU0lPTl9OVU0gICAgICAweDAxMDAwNTAwCisjZGVmaW5lIFZNWE5FVDNfRFJJVkVSX1ZFUlNJT05fTlVNICAgICAgMHgwMTAwMEUwMAogCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvdnhnZS9NYWtlZmlsZQppbmRleCA4OTkyY2EyLi5iNjI1ZTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIE1ha2VmaWxlIGZvciBOZXRlcmlvbiBJbmMncyBYMzEwMCBTZXJpZXMgMTAgR2JFIFBDSWUgIyBJL08KKyMgTWFrZWZpbGUgZm9yIEV4YXIgQ29ycCdzIFgzMTAwIFNlcmllcyAxMCBHYkUgUENJZSBJL08KICMgVmlydHVhbGl6ZWQgU2VydmVyIEFkYXB0ZXIgbGludXggZHJpdmVyCiAKIG9iai0kKENPTkZJR19WWEdFKSArPSB2eGdlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuYyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuYwppbmRleCAyOTdmMGQyLi4wZTZkYjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmMKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5jCkBAIC03LDkgKzcsOSBAQAogICogc3lzdGVtIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwuCiAgKiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAqCi0gKiB2eGdlLWNvbmZpZy5jOiBEcml2ZXIgZm9yIE5ldGVyaW9uIEluYydzIFgzMTAwIFNlcmllcyAxMEdiRSBQQ0llIEkvTworICogdnhnZS1jb25maWcuYzogRHJpdmVyIGZvciBFeGFyIENvcnAncyBYMzEwMCBTZXJpZXMgMTBHYkUgUENJZSBJL08KICAqICAgICAgICAgICAgICAgIFZpcnR1YWxpemVkIFNlcnZlciBBZGFwdGVyLgotICogQ29weXJpZ2h0KGMpIDIwMDItMjAwOSBOZXRlcmlvbiBJbmMuCisgKiBDb3B5cmlnaHQoYykgMjAwMi0yMDEwIEV4YXIgQ29ycC4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmggYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmgKaW5kZXggNGFlMjYyNS4uMWE5NDM0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5oCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuaApAQCAtNyw5ICs3LDkgQEAKICAqIHN5c3RlbSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMLgogICogU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhpcyBkaXN0cmlidXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgKgotICogdnhnZS1jb25maWcuaDogRHJpdmVyIGZvciBOZXRlcmlvbiBJbmMncyBYMzEwMCBTZXJpZXMgMTBHYkUgUENJZSBJL08KKyAqIHZ4Z2UtY29uZmlnLmg6IERyaXZlciBmb3IgRXhhciBDb3JwJ3MgWDMxMDAgU2VyaWVzIDEwR2JFIFBDSWUgSS9PCiAgKiAgICAgICAgICAgICAgICBWaXJ0dWFsaXplZCBTZXJ2ZXIgQWRhcHRlci4KLSAqIENvcHlyaWdodChjKSAyMDAyLTIwMDkgTmV0ZXJpb24gSW5jLgorICogQ29weXJpZ2h0KGMpIDIwMDItMjAxMCBFeGFyIENvcnAuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBWWEdFX0NPTkZJR19ICiAjZGVmaW5lIFZYR0VfQ09ORklHX0gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1ldGh0b29sLmMgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtZXRodG9vbC5jCmluZGV4IGNhZGVmODUuLjA1Njc5ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLWV0aHRvb2wuYwpAQCAtNyw5ICs3LDkgQEAKICAqIHN5c3RlbSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMLgogICogU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhpcyBkaXN0cmlidXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgKgotICogdnhnZS1ldGh0b29sLmM6IERyaXZlciBmb3IgTmV0ZXJpb24gSW5jJ3MgWDMxMDAgU2VyaWVzIDEwR2JFIFBDSWUgSS9PCisgKiB2eGdlLWV0aHRvb2wuYzogRHJpdmVyIGZvciBFeGFyIENvcnAncyBYMzEwMCBTZXJpZXMgMTBHYkUgUENJZSBJL08KICAqICAgICAgICAgICAgICAgICBWaXJ0dWFsaXplZCBTZXJ2ZXIgQWRhcHRlci4KLSAqIENvcHlyaWdodChjKSAyMDAyLTIwMDkgTmV0ZXJpb24gSW5jLgorICogQ29weXJpZ2h0KGMpIDIwMDItMjAxMCBFeGFyIENvcnAuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGU8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1ldGh0b29sLmggYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtZXRodG9vbC5oCmluZGV4IDFjM2RmMGEuLjZjZjMwNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1ldGh0b29sLmgKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLWV0aHRvb2wuaApAQCAtNyw5ICs3LDkgQEAKICAqIHN5c3RlbSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMLgogICogU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhpcyBkaXN0cmlidXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgKgotICogdnhnZS1ldGh0b29sLmg6IERyaXZlciBmb3IgTmV0ZXJpb24gSW5jJ3MgWDMxMDAgU2VyaWVzIDEwR2JFIFBDSWUgSS9PCisgKiB2eGdlLWV0aHRvb2wuaDogRHJpdmVyIGZvciBFeGFyIENvcnAncyBYMzEwMCBTZXJpZXMgMTBHYkUgUENJZSBJL08KICAqICAgICAgICAgICAgICAgICBWaXJ0dWFsaXplZCBTZXJ2ZXIgQWRhcHRlci4KLSAqIENvcHlyaWdodChjKSAyMDAyLTIwMDkgTmV0ZXJpb24gSW5jLgorICogQ29weXJpZ2h0KGMpIDIwMDItMjAxMCBFeGFyIENvcnAuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfVlhHRV9FVEhUT09MX0gKICNkZWZpbmUgX1ZYR0VfRVRIVE9PTF9ICmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5jIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uYwppbmRleCBmYzhiMmQ3Li5jN2M1NjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmMKQEAgLTcsOSArNyw5IEBACiAqIHN5c3RlbSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMLgogKiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICoKLSogdnhnZS1tYWluLmM6IERyaXZlciBmb3IgTmV0ZXJpb24gSW5jJ3MgWDMxMDAgU2VyaWVzIDEwR2JFIFBDSWUgSS9PCisqIHZ4Z2UtbWFpbi5jOiBEcml2ZXIgZm9yIEV4YXIgQ29ycCdzIFgzMTAwIFNlcmllcyAxMEdiRSBQQ0llIEkvTwogKiAgICAgICAgICAgICAgVmlydHVhbGl6ZWQgU2VydmVyIEFkYXB0ZXIuCi0qIENvcHlyaWdodChjKSAyMDAyLTIwMDkgTmV0ZXJpb24gSW5jLgorKiBDb3B5cmlnaHQoYykgMjAwMi0yMDEwIEV4YXIgQ29ycC4KICoKICogVGhlIG1vZHVsZSBsb2FkYWJsZSBwYXJhbWV0ZXJzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyIGFuZCBhIGJyaWVmCiAqIGV4cGxhbmF0aW9uIG9mIGFsbCB0aGUgdmFyaWFibGVzOgpAQCAtNDEsNiArNDEsOCBAQAogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtODcsNyArODksNiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgVlhHRV9DT01QTEVURV9WUEFUSF9UWChzdHJ1Y3QgdnhnZV9maWZvICpmaWZvKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCXN0cnVjdCBza19idWZmICoqc2tiX3B0ciA9IE5VTEw7CiAJc3RydWN0IHNrX2J1ZmYgKip0ZW1wOwogI2RlZmluZSBOUl9TS0JfQ09NUExFVEVEIDEyOApAQCAtOTgsMTUgKzk5LDE2IEBACiAJCW1vcmUgPSAwOwogCQlza2JfcHRyID0gY29tcGxldGVkOwogCi0JCWlmIChzcGluX3RyeWxvY2tfaXJxc2F2ZSgmZmlmby0+dHhfbG9jaywgZmxhZ3MpKSB7CisJCWlmIChfX25ldGlmX3R4X3RyeWxvY2soZmlmby0+dHhxKSkgewogCQkJdnhnZV9od192cGF0aF9wb2xsX3R4KGZpZm8tPmhhbmRsZSwgJnNrYl9wdHIsCiAJCQkJCQlOUl9TS0JfQ09NUExFVEVELCAmbW9yZSk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmaWZvLT50eF9sb2NrLCBmbGFncyk7CisJCQlfX25ldGlmX3R4X3VubG9jayhmaWZvLT50eHEpOwogCQl9CisKIAkJLyogZnJlZSBTS0JzICovCiAJCWZvciAodGVtcCA9IGNvbXBsZXRlZDsgdGVtcCAhPSBza2JfcHRyOyB0ZW1wKyspCiAJCQlkZXZfa2ZyZWVfc2tiX2lycSgqdGVtcCk7Ci0JfSB3aGlsZSAobW9yZSkgOworCX0gd2hpbGUgKG1vcmUpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgVlhHRV9DT01QTEVURV9BTExfVFgoc3RydWN0IHZ4Z2VkZXYgKnZkZXYpCkBAIC0xMzEsODAgKzEzMyw2IEBACiB9CiAKIC8qCi0gKiBNdWx0aVEgbWFuaXB1bGF0aW9uIGhlbHBlciBmdW5jdGlvbnMKLSAqLwotdm9pZCB2eGdlX3N0b3BfYWxsX3R4X3F1ZXVlKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KQotewotCWludCBpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB2ZGV2LT5uZGV2OwotCi0JaWYgKHZkZXYtPmNvbmZpZy50eF9zdGVlcmluZ190eXBlICE9IFRYX01VTFRJUV9TVEVFUklORykgewotCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykKLQkJCXZkZXYtPnZwYXRoc1tpXS5maWZvLnF1ZXVlX3N0YXRlID0gVlBBVEhfUVVFVUVfU1RPUDsKLQl9Ci0JbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKGRldik7Ci19Ci0KLXZvaWQgdnhnZV9zdG9wX3R4X3F1ZXVlKHN0cnVjdCB2eGdlX2ZpZm8gKmZpZm8pCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGZpZm8tPm5kZXY7Ci0KLQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEgPSBOVUxMOwotCWlmIChmaWZvLT50eF9zdGVlcmluZ190eXBlID09IFRYX01VTFRJUV9TVEVFUklORykKLQkJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIGZpZm8tPmRyaXZlcl9pZCk7Ci0JZWxzZSB7Ci0JCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCAwKTsKLQkJZmlmby0+cXVldWVfc3RhdGUgPSBWUEFUSF9RVUVVRV9TVE9QOwotCX0KLQotCW5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTsKLX0KLQotdm9pZCB2eGdlX3N0YXJ0X2FsbF90eF9xdWV1ZShzdHJ1Y3QgdnhnZWRldiAqdmRldikKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdmRldi0+bmRldjsKLQotCWlmICh2ZGV2LT5jb25maWcudHhfc3RlZXJpbmdfdHlwZSAhPSBUWF9NVUxUSVFfU1RFRVJJTkcpIHsKLQkJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspCi0JCQl2ZGV2LT52cGF0aHNbaV0uZmlmby5xdWV1ZV9zdGF0ZSA9IFZQQVRIX1FVRVVFX1NUQVJUOwotCX0KLQluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKGRldik7Ci19Ci0KLXN0YXRpYyB2b2lkIHZ4Z2Vfd2FrZV9hbGxfdHhfcXVldWUoc3RydWN0IHZ4Z2VkZXYgKnZkZXYpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHZkZXYtPm5kZXY7Ci0KLQlpZiAodmRldi0+Y29uZmlnLnR4X3N0ZWVyaW5nX3R5cGUgIT0gVFhfTVVMVElRX1NURUVSSU5HKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKQotCQkJdmRldi0+dnBhdGhzW2ldLmZpZm8ucXVldWVfc3RhdGUgPSBWUEFUSF9RVUVVRV9TVEFSVDsKLQl9Ci0JbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKGRldik7Ci19Ci0KLXZvaWQgdnhnZV93YWtlX3R4X3F1ZXVlKHN0cnVjdCB2eGdlX2ZpZm8gKmZpZm8sIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGZpZm8tPm5kZXY7Ci0KLQlpbnQgdnBhdGhfbm8gPSBmaWZvLT5kcml2ZXJfaWQ7Ci0Jc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gTlVMTDsKLQlpZiAoZmlmby0+dHhfc3RlZXJpbmdfdHlwZSA9PSBUWF9NVUxUSVFfU1RFRVJJTkcpIHsKLQkJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHZwYXRoX25vKTsKLQkJaWYgKG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkKLQkJCW5ldGlmX3R4X3dha2VfcXVldWUodHhxKTsKLQl9IGVsc2UgewotCQl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgMCk7Ci0JCWlmIChmaWZvLT5xdWV1ZV9zdGF0ZSA9PSBWUEFUSF9RVUVVRV9TVE9QKQotCQkJaWYgKG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkgewotCQkJCWZpZm8tPnF1ZXVlX3N0YXRlID0gVlBBVEhfUVVFVUVfU1RBUlQ7Ci0JCQkJbmV0aWZfdHhfd2FrZV9xdWV1ZSh0eHEpOwotCQkJfQotCX0KLX0KLQotLyoKICAqIHZ4Z2VfY2FsbGJhY2tfbGlua191cAogICoKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBpbnRlcnJ1cHQgY29udGV4dCB0byBub3RpZnkgbGluayB1cCBzdGF0ZQpAQCAtMjE4LDExICsxNDYsMTEgQEAKIAogCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsICIlczogJXM6JWQiLAogCQl2ZGV2LT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOwotCXByaW50ayhLRVJOX05PVElDRSAiJXM6IExpbmsgVXBcbiIsIHZkZXYtPm5kZXYtPm5hbWUpOworCW5ldGRldl9ub3RpY2UodmRldi0+bmRldiwgIkxpbmsgVXBcbiIpOwogCXZkZXYtPnN0YXRzLmxpbmtfdXArKzsKIAogCW5ldGlmX2NhcnJpZXJfb24odmRldi0+bmRldik7Ci0JdnhnZV93YWtlX2FsbF90eF9xdWV1ZSh2ZGV2KTsKKwluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXModmRldi0+bmRldik7CiAKIAl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAogCQkiJXM6ICVzOiVkIEV4aXRpbmcuLi4iLCB2ZGV2LT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOwpAQCAtMjQyLDExICsxNzAsMTEgQEAKIAogCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCiAJCSIlczogJXM6JWQiLCB2ZGV2LT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOwotCXByaW50ayhLRVJOX05PVElDRSAiJXM6IExpbmsgRG93blxuIiwgdmRldi0+bmRldi0+bmFtZSk7CisJbmV0ZGV2X25vdGljZSh2ZGV2LT5uZGV2LCAiTGluayBEb3duXG4iKTsKIAogCXZkZXYtPnN0YXRzLmxpbmtfZG93bisrOwogCW5ldGlmX2NhcnJpZXJfb2ZmKHZkZXYtPm5kZXYpOwotCXZ4Z2Vfc3RvcF9hbGxfdHhfcXVldWUodmRldik7CisJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHZkZXYtPm5kZXYpOwogCiAJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKIAkJIiVzOiAlczolZCBFeGl0aW5nLi4uIiwgdmRldi0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKQEAgLTY3Nyw3ICs2MDUsOCBAQAogCQkJCSZkdHIsICZ0X2NvZGUpID09IFZYR0VfSFdfT0spOwogCiAJKnNrYl9wdHIgPSBkb25lX3NrYjsKLQl2eGdlX3dha2VfdHhfcXVldWUoZmlmbywgc2tiKTsKKwlpZiAobmV0aWZfdHhfcXVldWVfc3RvcHBlZChmaWZvLT50eHEpKQorCQluZXRpZl90eF93YWtlX3F1ZXVlKGZpZm8tPnR4cSk7CiAKIAl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAogCQkJCSIlczogJXM6JWQgIEV4aXRpbmcuLi4iLApAQCAtNjg2LDggKzYxNSw3IEBACiB9CiAKIC8qIHNlbGVjdCBhIHZwYXRoIHRvIHRyYW5zbWl0IHRoZSBwYWNrZXQgKi8KLXN0YXRpYyB1MzIgdnhnZV9nZXRfdnBhdGhfbm8oc3RydWN0IHZ4Z2VkZXYgKnZkZXYsIHN0cnVjdCBza19idWZmICpza2IsCi0JaW50ICpkb19sb2NrKQorc3RhdGljIHUzMiB2eGdlX2dldF92cGF0aF9ubyhzdHJ1Y3QgdnhnZWRldiAqdmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAl1MTYgcXVldWVfbGVuLCBjb3VudGVyID0gMDsKIAlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKQEAgLTcwNiwxMiArNjM0LDYgQEAKIAkJCQl2ZGV2LT52cGF0aF9zZWxlY3RvcltxdWV1ZV9sZW4gLSAxXTsKIAkJCWlmIChjb3VudGVyID49IHF1ZXVlX2xlbikKIAkJCQljb3VudGVyID0gcXVldWVfbGVuIC0gMTsKLQotCQkJaWYgKGlwLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgewotI2lmZGVmIE5FVElGX0ZfTExUWAotCQkJCSpkb19sb2NrID0gMDsKLSNlbmRpZgotCQkJfQogCQl9CiAJfQogCXJldHVybiBjb3VudGVyOwpAQCAtODA4LDggKzczMCw2IEBACiAgKgogICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgVHggZW50cnkgcG9pbnQgb2YgdGhlIGRyaXZlci4gTmV0ZXJpb24gTklDIHN1cHBvcnRzCiAgKiBjZXJ0YWluIHByb3RvY29sIGFzc2lzdCBmZWF0dXJlcyBvbiBUeCBzaWRlLCBuYW1lbHkgIENTTywgUy9HLCBMU08uCi0gKiBOT1RFOiB3aGVuIGRldmljZSBjYW50IHF1ZXVlIHRoZSBwa3QsIGp1c3QgdGhlIHRyYW5zX3N0YXJ0IHZhcmlhYmxlIHdpbGwKLSAqIG5vdCBiZSB1cGFkdGVkLgogKi8KIHN0YXRpYyBuZXRkZXZfdHhfdAogdnhnZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC04MjYsOSArNzQ2LDcgQEAKIAlzdHJ1Y3QgdnhnZV90eF9wcml2ICp0eGRsX3ByaXYgPSBOVUxMOwogCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmb19odzsKIAlpbnQgb2ZmbG9hZF90eXBlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCWludCB2cGF0aF9ubyA9IDA7Ci0JaW50IGRvX3NwaW5fdHhfbG9jayA9IDE7CiAKIAl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLCAiJXM6ICVzOiVkIiwKIAkJCWRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKQEAgLTg2NCw3ICs3ODIsNyBAQAogCWlmICh2ZGV2LT5jb25maWcudHhfc3RlZXJpbmdfdHlwZSA9PSBUWF9NVUxUSVFfU1RFRVJJTkcpCiAJCXZwYXRoX25vID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CiAJZWxzZSBpZiAodmRldi0+Y29uZmlnLnR4X3N0ZWVyaW5nX3R5cGUgPT0gVFhfUE9SVF9TVEVFUklORykKLQkJdnBhdGhfbm8gPSB2eGdlX2dldF92cGF0aF9ubyh2ZGV2LCBza2IsICZkb19zcGluX3R4X2xvY2spOworCQl2cGF0aF9ubyA9IHZ4Z2VfZ2V0X3ZwYXRoX25vKHZkZXYsIHNrYik7CiAKIAl2eGdlX2RlYnVnX3R4KFZYR0VfVFJBQ0UsICIlczogdnBhdGhfbm89ICVkIiwgZGV2LT5uYW1lLCB2cGF0aF9ubyk7CiAKQEAgLTg3NCw0NiArNzkyLDI5IEBACiAJZmlmbyA9ICZ2ZGV2LT52cGF0aHNbdnBhdGhfbm9dLmZpZm87CiAJZmlmb19odyA9IGZpZm8tPmhhbmRsZTsKIAotCWlmIChkb19zcGluX3R4X2xvY2spCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZmaWZvLT50eF9sb2NrLCBmbGFncyk7Ci0JZWxzZSB7Ci0JCWlmICh1bmxpa2VseSghc3Bpbl90cnlsb2NrX2lycXNhdmUoJmZpZm8tPnR4X2xvY2ssIGZsYWdzKSkpCi0JCQlyZXR1cm4gTkVUREVWX1RYX0xPQ0tFRDsKLQl9CisJaWYgKG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQoZmlmby0+dHhxKSkKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCi0JaWYgKHZkZXYtPmNvbmZpZy50eF9zdGVlcmluZ190eXBlID09IFRYX01VTFRJUV9TVEVFUklORykgewotCQlpZiAobmV0aWZfc3VicXVldWVfc3RvcHBlZChkZXYsIHNrYikpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZpZm8tPnR4X2xvY2ssIGZsYWdzKTsKLQkJCXJldHVybiBORVRERVZfVFhfQlVTWTsKLQkJfQotCX0gZWxzZSBpZiAodW5saWtlbHkoZmlmby0+cXVldWVfc3RhdGUgPT0gVlBBVEhfUVVFVUVfU1RPUCkpIHsKLQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmlmby0+dHhfbG9jaywgZmxhZ3MpOwotCQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwotCQl9Ci0JfQogCWF2YWlsID0gdnhnZV9od19maWZvX2ZyZWVfdHhkbF9jb3VudF9nZXQoZmlmb19odyk7CiAJaWYgKGF2YWlsID09IDApIHsKIAkJdnhnZV9kZWJ1Z190eChWWEdFX0VSUiwKIAkJCSIlczogTm8gZnJlZSBUWERzIGF2YWlsYWJsZSIsIGRldi0+bmFtZSk7CiAJCWZpZm8tPnN0YXRzLnR4ZF9ub3RfZnJlZSsrOwotCQl2eGdlX3N0b3BfdHhfcXVldWUoZmlmbyk7Ci0JCWdvdG8gX2V4aXQyOworCQlnb3RvIF9leGl0MDsKIAl9CiAKIAkvKiBMYXN0IFRYRD8gIFN0b3AgdHggcXVldWUgdG8gYXZvaWQgZHJvcHBpbmcgcGFja2V0cy4gIFRYCiAJICogY29tcGxldGlvbiB3aWxsIHJlc3VtZSB0aGUgcXVldWUuCiAJICovCiAJaWYgKGF2YWlsID09IDEpCi0JCXZ4Z2Vfc3RvcF90eF9xdWV1ZShmaWZvKTsKKwkJbmV0aWZfdHhfc3RvcF9xdWV1ZShmaWZvLT50eHEpOwogCiAJc3RhdHVzID0gdnhnZV9od19maWZvX3R4ZGxfcmVzZXJ2ZShmaWZvX2h3LCAmZHRyLCAmZHRyX3ByaXYpOwogCWlmICh1bmxpa2VseShzdGF0dXMgIT0gVlhHRV9IV19PSykpIHsKIAkJdnhnZV9kZWJ1Z190eChWWEdFX0VSUiwKIAkJICAgIiVzOiBPdXQgb2YgZGVzY3JpcHRvcnMgLiIsIGRldi0+bmFtZSk7CiAJCWZpZm8tPnN0YXRzLnR4ZF9vdXRfb2ZfZGVzYysrOwotCQl2eGdlX3N0b3BfdHhfcXVldWUoZmlmbyk7Ci0JCWdvdG8gX2V4aXQyOworCQlnb3RvIF9leGl0MDsKIAl9CiAKIAl2eGdlX2RlYnVnX3R4KFZYR0VfVFJBQ0UsCkBAIC05MzMsOSArODM0LDggQEAKIAogCWlmICh1bmxpa2VseShwY2lfZG1hX21hcHBpbmdfZXJyb3IoZmlmby0+cGRldiwgZG1hX3BvaW50ZXIpKSkgewogCQl2eGdlX2h3X2ZpZm9fdHhkbF9mcmVlKGZpZm9faHcsIGR0cik7Ci0JCXZ4Z2Vfc3RvcF90eF9xdWV1ZShmaWZvKTsKIAkJZmlmby0+c3RhdHMucGNpX21hcF9mYWlsKys7Ci0JCWdvdG8gX2V4aXQyOworCQlnb3RvIF9leGl0MDsKIAl9CiAKIAl0eGRsX3ByaXYgPSB2eGdlX2h3X2ZpZm9fdHhkbF9wcml2YXRlX2dldChkdHIpOwpAQCAtOTU4LDEzICs4NTgsMTIgQEAKIAkJaWYgKCFmcmFnLT5zaXplKQogCQkJY29udGludWU7CiAKLQkJZG1hX3BvaW50ZXIgPQotCQkJKHU2NClwY2lfbWFwX3BhZ2UoZmlmby0+cGRldiwgZnJhZy0+cGFnZSwKKwkJZG1hX3BvaW50ZXIgPSAodTY0KSBwY2lfbWFwX3BhZ2UoZmlmby0+cGRldiwgZnJhZy0+cGFnZSwKIAkJCQlmcmFnLT5wYWdlX29mZnNldCwgZnJhZy0+c2l6ZSwKIAkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKIAogCQlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGZpZm8tPnBkZXYsIGRtYV9wb2ludGVyKSkpCi0JCQlnb3RvIF9leGl0MDsKKwkJCWdvdG8gX2V4aXQyOwogCQl2eGdlX2RlYnVnX3R4KFZYR0VfVFJBQ0UsCiAJCQkiJXM6ICVzOiVkIGZyYWcgPSAlZCBkbWFfcG9pbnRlciA9IDB4JWxseCIsCiAJCQkJZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18sIGksCkBAIC05NzksMTEgKzg3OCw5IEBACiAJb2ZmbG9hZF90eXBlID0gdnhnZV9vZmZsb2FkX3R5cGUoc2tiKTsKIAogCWlmIChvZmZsb2FkX3R5cGUgJiAoU0tCX0dTT19UQ1BWNCB8IFNLQl9HU09fVENQVjYpKSB7Ci0KIAkJaW50IG1zcyA9IHZ4Z2VfdGNwX21zcyhza2IpOwogCQlpZiAobXNzKSB7Ci0JCQl2eGdlX2RlYnVnX3R4KFZYR0VfVFJBQ0UsCi0JCQkJIiVzOiAlczolZCBtc3MgPSAlZCIsCisJCQl2eGdlX2RlYnVnX3R4KFZYR0VfVFJBQ0UsICIlczogJXM6JWQgbXNzID0gJWQiLAogCQkJCWRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fLCBtc3MpOwogCQkJdnhnZV9od19maWZvX3R4ZGxfbXNzX3NldChkdHIsIG1zcyk7CiAJCX0gZWxzZSB7CkBAIC0xMDAxLDE5ICs4OTgsMTMgQEAKIAkJCQkJVlhHRV9IV19GSUZPX1RYRF9UWF9DS09fVURQX0VOKTsKIAogCXZ4Z2VfaHdfZmlmb190eGRsX3Bvc3QoZmlmb19odywgZHRyKTsKLSNpZmRlZiBORVRJRl9GX0xMVFgKLQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsgLyogTkVUSUZfRl9MTFRYIGRyaXZlciA6KCAqLwotI2VuZGlmCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmlmby0+dHhfbG9jaywgZmxhZ3MpOwogCi0JVlhHRV9DT01QTEVURV9WUEFUSF9UWChmaWZvKTsKIAl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLCAiJXM6ICVzOiVkICBFeGl0aW5nLi4uIiwKIAkJZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCXJldHVybiBORVRERVZfVFhfT0s7CiAKLV9leGl0MDoKK19leGl0MjoKIAl2eGdlX2RlYnVnX3R4KFZYR0VfVFJBQ0UsICIlczogcGNpX21hcF9wYWdlIGZhaWxlZCIsIGRldi0+bmFtZSk7Ci0KIF9leGl0MToKIAlqID0gMDsKIAlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF07CkBAIC0xMDI4LDEwICs5MTksOSBAQAogCX0KIAogCXZ4Z2VfaHdfZmlmb190eGRsX2ZyZWUoZmlmb19odywgZHRyKTsKLV9leGl0MjoKK19leGl0MDoKKwluZXRpZl90eF9zdG9wX3F1ZXVlKGZpZm8tPnR4cSk7CiAJZGV2X2tmcmVlX3NrYihza2IpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZpZm8tPnR4X2xvY2ssIGZsYWdzKTsKLQlWWEdFX0NPTVBMRVRFX1ZQQVRIX1RYKGZpZm8pOwogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KQEAgLTExMjEsNyArMTAxMSw4IEBACiAJc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKIAlzdHJ1Y3QgdnhnZWRldiAqdmRldjsKIAlpbnQgaSwgbWNhc3RfY250ID0gMDsKLQlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2OworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldjsKKwlzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGg7CiAJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOwogCXN0cnVjdCBtYWNJbmZvIG1hY19pbmZvOwogCWludCB2cGF0aF9pZHggPSAwOwpAQCAtMTE0MSw0NiArMTAzMiw0OCBAQAogCiAJaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSAmJiAoIXZkZXYtPmFsbF9tdWx0aV9mbGcpKSB7CiAJCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7Ci0JCQl2eGdlX2Fzc2VydCh2ZGV2LT52cGF0aHNbaV0uaXNfb3Blbik7Ci0JCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX21jYXN0X2VuYWJsZSgKLQkJCQkJCXZkZXYtPnZwYXRoc1tpXS5oYW5kbGUpOworCQkJdnBhdGggPSAmdmRldi0+dnBhdGhzW2ldOworCQkJdnhnZV9hc3NlcnQodnBhdGgtPmlzX29wZW4pOworCQkJc3RhdHVzID0gdnhnZV9od192cGF0aF9tY2FzdF9lbmFibGUodnBhdGgtPmhhbmRsZSk7CisJCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLCAiZmFpbGVkIHRvIGVuYWJsZSAiCisJCQkJCQkibXVsdGljYXN0LCBzdGF0dXMgJWQiLCBzdGF0dXMpOwogCQkJdmRldi0+YWxsX211bHRpX2ZsZyA9IDE7CiAJCX0KLQl9IGVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSAmJiAodmRldi0+YWxsX211bHRpX2ZsZykpIHsKKwl9IGVsc2UgaWYgKCEoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgJiYgKHZkZXYtPmFsbF9tdWx0aV9mbGcpKSB7CiAJCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7Ci0JCQl2eGdlX2Fzc2VydCh2ZGV2LT52cGF0aHNbaV0uaXNfb3Blbik7Ci0JCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX21jYXN0X2Rpc2FibGUoCi0JCQkJCQl2ZGV2LT52cGF0aHNbaV0uaGFuZGxlKTsKLQkJCXZkZXYtPmFsbF9tdWx0aV9mbGcgPSAxOworCQkJdnBhdGggPSAmdmRldi0+dnBhdGhzW2ldOworCQkJdnhnZV9hc3NlcnQodnBhdGgtPmlzX29wZW4pOworCQkJc3RhdHVzID0gdnhnZV9od192cGF0aF9tY2FzdF9kaXNhYmxlKHZwYXRoLT5oYW5kbGUpOworCQkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwgImZhaWxlZCB0byBkaXNhYmxlICIKKwkJCQkJCSJtdWx0aWNhc3QsIHN0YXR1cyAlZCIsIHN0YXR1cyk7CisJCQl2ZGV2LT5hbGxfbXVsdGlfZmxnID0gMDsKIAkJfQogCX0KIAotCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKLQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAotCQkJImZhaWxlZCB0byAlcyBtdWx0aWNhc3QsIHN0YXR1cyAlZCIsCi0JCQlkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJID8KLQkJCSJlbmFibGUiIDogImRpc2FibGUiLCBzdGF0dXMpOwogCiAJaWYgKCF2ZGV2LT5jb25maWcuYWRkcl9sZWFybl9lbikgewotCQlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgewotCQkJCXZ4Z2VfYXNzZXJ0KHZkZXYtPnZwYXRoc1tpXS5pc19vcGVuKTsKKwkJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKKwkJCXZwYXRoID0gJnZkZXYtPnZwYXRoc1tpXTsKKwkJCXZ4Z2VfYXNzZXJ0KHZwYXRoLT5pc19vcGVuKTsKKworCQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKIAkJCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX3Byb21pc2NfZW5hYmxlKAotCQkJCQkJdmRldi0+dnBhdGhzW2ldLmhhbmRsZSk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgewotCQkJCXZ4Z2VfYXNzZXJ0KHZkZXYtPnZwYXRoc1tpXS5pc19vcGVuKTsKKwkJCQkJdnBhdGgtPmhhbmRsZSk7CisJCQllbHNlCiAJCQkJc3RhdHVzID0gdnhnZV9od192cGF0aF9wcm9taXNjX2Rpc2FibGUoCi0JCQkJCQl2ZGV2LT52cGF0aHNbaV0uaGFuZGxlKTsKLQkJCX0KKwkJCQkJdnBhdGgtPmhhbmRsZSk7CisJCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLCAiZmFpbGVkIHRvICVzIHByb21pc2MiCisJCQkJCSIsIHN0YXR1cyAlZCIsIGRldi0+ZmxhZ3MmSUZGX1BST01JU0MgPworCQkJCQkiZW5hYmxlIiA6ICJkaXNhYmxlIiwgc3RhdHVzKTsKIAkJfQogCX0KIAogCW1lbXNldCgmbWFjX2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgbWFjSW5mbykpOwogCS8qIFVwZGF0ZSBpbmRpdmlkdWFsIE1fQ0FTVCBhZGRyZXNzIGxpc3QgKi8KIAlpZiAoKCF2ZGV2LT5hbGxfbXVsdGlfZmxnKSAmJiBuZXRkZXZfbWNfY291bnQoZGV2KSkgewotCiAJCW1jYXN0X2NudCA9IHZkZXYtPnZwYXRoc1swXS5tY2FzdF9hZGRyX2NudDsKIAkJbGlzdF9oZWFkID0gJnZkZXYtPnZwYXRoc1swXS5tYWNfYWRkcl9saXN0OwogCQlpZiAoKG5ldGRldl9tY19jb3VudChkZXYpICsKQEAgLTExOTAsMTQgKzEwODMsNyBAQAogCiAJCS8qIERlbGV0ZSBwcmV2aW91cyBNQydzICovCiAJCWZvciAoaSA9IDA7IGkgPCBtY2FzdF9jbnQ7IGkrKykgewotCQkJaWYgKCFsaXN0X2VtcHR5KGxpc3RfaGVhZCkpCi0JCQkJbWFjX2VudHJ5ID0gKHN0cnVjdCB2eGdlX21hY19hZGRycyAqKQotCQkJCQlsaXN0X2ZpcnN0X2VudHJ5KGxpc3RfaGVhZCwKLQkJCQkJCXN0cnVjdCB2eGdlX21hY19hZGRycywKLQkJCQkJCWl0ZW0pOwotCiAJCQlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cnksIG5leHQsIGxpc3RfaGVhZCkgewotCiAJCQkJbWFjX2VudHJ5ID0gKHN0cnVjdCB2eGdlX21hY19hZGRycyAqKSBlbnRyeTsKIAkJCQkvKiBDb3B5IHRoZSBtYWMgYWRkcmVzcyB0byBkZWxldGUgKi8KIAkJCQltYWNfYWRkcmVzcyA9ICh1OCAqKSZtYWNfZW50cnktPm1hY2FkZHI7CkBAIC0xMjQwLDkgKzExMjYsNyBAQAogCQltY2FzdF9jbnQgPSB2ZGV2LT52cGF0aHNbMF0ubWNhc3RfYWRkcl9jbnQ7CiAJCS8qIERlbGV0ZSBwcmV2aW91cyBNQydzICovCiAJCWZvciAoaSA9IDA7IGkgPCBtY2FzdF9jbnQ7IGkrKykgewotCiAJCQlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cnksIG5leHQsIGxpc3RfaGVhZCkgewotCiAJCQkJbWFjX2VudHJ5ID0gKHN0cnVjdCB2eGdlX21hY19hZGRycyAqKSBlbnRyeTsKIAkJCQkvKiBDb3B5IHRoZSBtYWMgYWRkcmVzcyB0byBkZWxldGUgKi8KIAkJCQltYWNfYWRkcmVzcyA9ICh1OCAqKSZtYWNfZW50cnktPm1hY2FkZHI7CkBAIC0xMjYyLDkgKzExNDYsMTAgQEAKIAogCQkvKiBFbmFibGUgYWxsIG11bHRpY2FzdCAqLwogCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgewotCQkJdnhnZV9hc3NlcnQodmRldi0+dnBhdGhzW2ldLmlzX29wZW4pOwotCQkJc3RhdHVzID0gdnhnZV9od192cGF0aF9tY2FzdF9lbmFibGUoCi0JCQkJCQl2ZGV2LT52cGF0aHNbaV0uaGFuZGxlKTsKKwkJCXZwYXRoID0gJnZkZXYtPnZwYXRoc1tpXTsKKwkJCXZ4Z2VfYXNzZXJ0KHZwYXRoLT5pc19vcGVuKTsKKworCQkJc3RhdHVzID0gdnhnZV9od192cGF0aF9tY2FzdF9lbmFibGUodnBhdGgtPmhhbmRsZSk7CiAJCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKIAkJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCiAJCQkJCSIlczolZCBFbmFibGluZyBhbGwgbXVsdGljYXN0cyBmYWlsZWQiLApAQCAtMTQyNSw2ICsxMzEwLDcgQEAKIHN0YXRpYyBpbnQgdnhnZV9yZXNldF92cGF0aChzdHJ1Y3QgdnhnZWRldiAqdmRldiwgaW50IHZwX2lkKQogewogCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGggPSAmdmRldi0+dnBhdGhzW3ZwX2lkXTsKIAlpbnQgcmV0ID0gMDsKIAogCS8qIGNoZWNrIGlmIGRldmljZSBpcyBkb3duIGFscmVhZHkgKi8KQEAgLTE0MzUsMTIgKzEzMjEsMTAgQEAKIAlpZiAodGVzdF9iaXQoX19WWEdFX1NUQVRFX1JFU0VUX0NBUkQsICZ2ZGV2LT5zdGF0ZSkpCiAJCXJldHVybiAwOwogCi0JaWYgKHZkZXYtPnZwYXRoc1t2cF9pZF0uaGFuZGxlKSB7Ci0JCWlmICh2eGdlX2h3X3ZwYXRoX3Jlc2V0KHZkZXYtPnZwYXRoc1t2cF9pZF0uaGFuZGxlKQotCQkJCT09IFZYR0VfSFdfT0spIHsKKwlpZiAodnBhdGgtPmhhbmRsZSkgeworCQlpZiAodnhnZV9od192cGF0aF9yZXNldCh2cGF0aC0+aGFuZGxlKSA9PSBWWEdFX0hXX09LKSB7CiAJCQlpZiAoaXNfdnhnZV9jYXJkX3VwKHZkZXYpICYmCi0JCQkJdnhnZV9od192cGF0aF9yZWNvdmVyX2Zyb21fcmVzZXQoCi0JCQkJCXZkZXYtPnZwYXRoc1t2cF9pZF0uaGFuZGxlKQorCQkJCXZ4Z2VfaHdfdnBhdGhfcmVjb3Zlcl9mcm9tX3Jlc2V0KHZwYXRoLT5oYW5kbGUpCiAJCQkJCSE9IFZYR0VfSFdfT0spIHsKIAkJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCiAJCQkJCSJ2eGdlX2h3X3ZwYXRoX3JlY292ZXJfZnJvbV9yZXNldCIKQEAgLTE0NTYsMTEgKzEzNDAsMjAgQEAKIAl9IGVsc2UKIAkJcmV0dXJuIFZYR0VfSFdfRkFJTDsKIAotCXZ4Z2VfcmVzdG9yZV92cGF0aF9tYWNfYWRkcigmdmRldi0+dnBhdGhzW3ZwX2lkXSk7Ci0JdnhnZV9yZXN0b3JlX3ZwYXRoX3ZpZF90YWJsZSgmdmRldi0+dnBhdGhzW3ZwX2lkXSk7CisJdnhnZV9yZXN0b3JlX3ZwYXRoX21hY19hZGRyKHZwYXRoKTsKKwl2eGdlX3Jlc3RvcmVfdnBhdGhfdmlkX3RhYmxlKHZwYXRoKTsKIAogCS8qIEVuYWJsZSBhbGwgYnJvYWRjYXN0ICovCi0JdnhnZV9od192cGF0aF9iY2FzdF9lbmFibGUodmRldi0+dnBhdGhzW3ZwX2lkXS5oYW5kbGUpOworCXZ4Z2VfaHdfdnBhdGhfYmNhc3RfZW5hYmxlKHZwYXRoLT5oYW5kbGUpOworCisJLyogRW5hYmxlIGFsbCBtdWx0aWNhc3QgKi8KKwlpZiAodmRldi0+YWxsX211bHRpX2ZsZykgeworCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX21jYXN0X2VuYWJsZSh2cGF0aC0+aGFuZGxlKTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCSIlczolZCBFbmFibGluZyBtdWx0aWNhc3QgZmFpbGVkIiwKKwkJCQlfX2Z1bmNfXywgX19MSU5FX18pOworCX0KIAogCS8qIEVuYWJsZSB0aGUgaW50ZXJydXB0cyAqLwogCXZ4Z2VfdnBhdGhfaW50cl9lbmFibGUodmRldiwgdnBfaWQpOwpAQCAtMTQ2OCwxNyArMTM2MSwxOCBAQAogCXNtcF93bWIoKTsKIAogCS8qIEVuYWJsZSB0aGUgZmxvdyBvZiB0cmFmZmljIHRocm91Z2ggdGhlIHZwYXRoICovCi0JdnhnZV9od192cGF0aF9lbmFibGUodmRldi0+dnBhdGhzW3ZwX2lkXS5oYW5kbGUpOworCXZ4Z2VfaHdfdnBhdGhfZW5hYmxlKHZwYXRoLT5oYW5kbGUpOwogCiAJc21wX3dtYigpOwotCXZ4Z2VfaHdfdnBhdGhfcnhfZG9vcmJlbGxfaW5pdCh2ZGV2LT52cGF0aHNbdnBfaWRdLmhhbmRsZSk7Ci0JdmRldi0+dnBhdGhzW3ZwX2lkXS5yaW5nLmxhc3Rfc3RhdHVzID0gVlhHRV9IV19PSzsKKwl2eGdlX2h3X3ZwYXRoX3J4X2Rvb3JiZWxsX2luaXQodnBhdGgtPmhhbmRsZSk7CisJdnBhdGgtPnJpbmcubGFzdF9zdGF0dXMgPSBWWEdFX0hXX09LOwogCiAJLyogVnBhdGggcmVzZXQgZG9uZSAqLwogCWNsZWFyX2JpdCh2cF9pZCwgJnZkZXYtPnZwX3Jlc2V0KTsKIAogCS8qIFN0YXJ0IHRoZSB2cGF0aCBxdWV1ZSAqLwotCXZ4Z2Vfd2FrZV90eF9xdWV1ZSgmdmRldi0+dnBhdGhzW3ZwX2lkXS5maWZvLCBOVUxMKTsKKwlpZiAobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh2cGF0aC0+Zmlmby50eHEpKQorCQluZXRpZl90eF93YWtlX3F1ZXVlKHZwYXRoLT5maWZvLnR4cSk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTUxMiw5ICsxNDA2LDkgQEAKIAkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKIAkJCQkiJXM6IGV4ZWN1dGlvbiBtb2RlIGlzIGRlYnVnLCByZXR1cm5pbmcuLiIsCiAJCQkJdmRldi0+bmRldi0+bmFtZSk7Ci0JCWNsZWFyX2JpdChfX1ZYR0VfU1RBVEVfQ0FSRF9VUCwgJnZkZXYtPnN0YXRlKTsKLQkJdnhnZV9zdG9wX2FsbF90eF9xdWV1ZSh2ZGV2KTsKLQkJcmV0dXJuIDA7CisJCQljbGVhcl9iaXQoX19WWEdFX1NUQVRFX0NBUkRfVVAsICZ2ZGV2LT5zdGF0ZSk7CisJCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXModmRldi0+bmRldik7CisJCQlyZXR1cm4gMDsKIAkJfQogCX0KIApAQCAtMTUyMyw3ICsxNDE3LDcgQEAKIAogCQlzd2l0Y2ggKHZkZXYtPmNyaWNfZXJyX2V2ZW50KSB7CiAJCWNhc2UgVlhHRV9IV19FVkVOVF9VTktOT1dOOgotCQkJdnhnZV9zdG9wX2FsbF90eF9xdWV1ZSh2ZGV2KTsKKwkJCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyh2ZGV2LT5uZGV2KTsKIAkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKIAkJCQkiZmF0YWw6ICVzOiBEaXNhYmxpbmcgZGV2aWNlIGR1ZSB0byIKIAkJCQkidW5rbm93biBlcnJvciIsCkBAIC0xNTQ0LDcgKzE0MzgsNyBAQAogCQljYXNlIFZYR0VfSFdfRVZFTlRfVlBBVEhfRVJSOgogCQkJYnJlYWs7CiAJCWNhc2UgVlhHRV9IV19FVkVOVF9DUklUSUNBTF9FUlI6Ci0JCQl2eGdlX3N0b3BfYWxsX3R4X3F1ZXVlKHZkZXYpOworCQkJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHZkZXYtPm5kZXYpOwogCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAogCQkJCSJmYXRhbDogJXM6IERpc2FibGluZyBkZXZpY2UgZHVlIHRvIgogCQkJCSJzZXJpb3VzIGVycm9yIiwKQEAgLTE1NTQsNyArMTQ0OCw3IEBACiAJCQlyZXQgPSAtRVBFUk07CiAJCQlnb3RvIG91dDsKIAkJY2FzZSBWWEdFX0hXX0VWRU5UX1NFUlI6Ci0JCQl2eGdlX3N0b3BfYWxsX3R4X3F1ZXVlKHZkZXYpOworCQkJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHZkZXYtPm5kZXYpOwogCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAogCQkJCSJmYXRhbDogJXM6IERpc2FibGluZyBkZXZpY2UgZHVlIHRvIgogCQkJCSJzZXJpb3VzIGVycm9yIiwKQEAgLTE1NjYsNyArMTQ2MCw3IEBACiAJCQlyZXQgPSAtRVBFUk07CiAJCQlnb3RvIG91dDsKIAkJY2FzZSBWWEdFX0hXX0VWRU5UX1NMT1RfRlJFRVpFOgotCQkJdnhnZV9zdG9wX2FsbF90eF9xdWV1ZSh2ZGV2KTsKKwkJCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyh2ZGV2LT5uZGV2KTsKIAkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKIAkJCQkiZmF0YWw6ICVzOiBEaXNhYmxpbmcgZGV2aWNlIGR1ZSB0byIKIAkJCQkic2xvdCBmcmVlemUiLApAQCAtMTU4MCw3ICsxNDc0LDcgQEAKIAl9CiAKIAlpZiAoKGV2ZW50ID09IFZYR0VfTExfRlVMTF9SRVNFVCkgfHwgKGV2ZW50ID09IFZYR0VfTExfU1RBUlRfUkVTRVQpKQotCQl2eGdlX3N0b3BfYWxsX3R4X3F1ZXVlKHZkZXYpOworCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXModmRldi0+bmRldik7CiAKIAlpZiAoZXZlbnQgPT0gVlhHRV9MTF9GVUxMX1JFU0VUKSB7CiAJCXN0YXR1cyA9IHZ4Z2VfcmVzZXRfYWxsX3ZwYXRocyh2ZGV2KTsKQEAgLTE2NDAsNyArMTUzNCw3IEBACiAJCQl2eGdlX2h3X3ZwYXRoX3J4X2Rvb3JiZWxsX2luaXQodmRldi0+dnBhdGhzW2ldLmhhbmRsZSk7CiAJCX0KIAotCQl2eGdlX3dha2VfYWxsX3R4X3F1ZXVlKHZkZXYpOworCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXModmRldi0+bmRldik7CiAJfQogCiBvdXQ6CkBAIC0xNjYxLDggKzE1NTUsNyBAQAogICovCiBpbnQgdnhnZV9yZXNldChzdHJ1Y3QgdnhnZWRldiAqdmRldikKIHsKLQlkb192eGdlX3Jlc2V0KHZkZXYsIFZYR0VfTExfRlVMTF9SRVNFVCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGRvX3Z4Z2VfcmVzZXQodmRldiwgVlhHRV9MTF9GVUxMX1JFU0VUKTsKIH0KIAogLyoqCkBAIC0yMDI1LDE3ICsxOTE4LDE3IEBACiAvKiByZXNldCB2cGF0aHMgKi8KIGVudW0gdnhnZV9od19zdGF0dXMgdnhnZV9yZXNldF9hbGxfdnBhdGhzKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KQogewotCWludCBpOwogCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGg7CisJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykKLQkJaWYgKHZkZXYtPnZwYXRoc1tpXS5oYW5kbGUpIHsKLQkJCWlmICh2eGdlX2h3X3ZwYXRoX3Jlc2V0KHZkZXYtPnZwYXRoc1tpXS5oYW5kbGUpCi0JCQkJCT09IFZYR0VfSFdfT0spIHsKKwlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCQl2cGF0aCA9ICZ2ZGV2LT52cGF0aHNbaV07CisJCWlmICh2cGF0aC0+aGFuZGxlKSB7CisJCQlpZiAodnhnZV9od192cGF0aF9yZXNldCh2cGF0aC0+aGFuZGxlKSA9PSBWWEdFX0hXX09LKSB7CiAJCQkJaWYgKGlzX3Z4Z2VfY2FyZF91cCh2ZGV2KSAmJgogCQkJCQl2eGdlX2h3X3ZwYXRoX3JlY292ZXJfZnJvbV9yZXNldCgKLQkJCQkJCXZkZXYtPnZwYXRoc1tpXS5oYW5kbGUpCi0JCQkJCQkhPSBWWEdFX0hXX09LKSB7CisJCQkJCQl2cGF0aC0+aGFuZGxlKSAhPSBWWEdFX0hXX09LKSB7CiAJCQkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKIAkJCQkJCSJ2eGdlX2h3X3ZwYXRoX3JlY292ZXJfIgogCQkJCQkJImZyb21fcmVzZXQgZmFpbGVkIGZvciB2cGF0aDogIgpAQCAtMjA0OSw4MyArMTk0Miw5MyBAQAogCQkJCQlyZXR1cm4gc3RhdHVzOwogCQkJfQogCQl9CisJfQorCiAJcmV0dXJuIHN0YXR1czsKIH0KIAogLyogY2xvc2UgdnBhdGhzICovCiB2b2lkIHZ4Z2VfY2xvc2VfdnBhdGhzKHN0cnVjdCB2eGdlZGV2ICp2ZGV2LCBpbnQgaW5kZXgpCiB7CisJc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoOwogCWludCBpOworCiAJZm9yIChpID0gaW5kZXg7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7Ci0JCWlmICh2ZGV2LT52cGF0aHNbaV0uaGFuZGxlICYmIHZkZXYtPnZwYXRoc1tpXS5pc19vcGVuKSB7Ci0JCQl2eGdlX2h3X3ZwYXRoX2Nsb3NlKHZkZXYtPnZwYXRoc1tpXS5oYW5kbGUpOworCQl2cGF0aCA9ICZ2ZGV2LT52cGF0aHNbaV07CisKKwkJaWYgKHZwYXRoLT5oYW5kbGUgJiYgdnBhdGgtPmlzX29wZW4pIHsKKwkJCXZ4Z2VfaHdfdnBhdGhfY2xvc2UodnBhdGgtPmhhbmRsZSk7CiAJCQl2ZGV2LT5zdGF0cy52cGF0aHNfb3Blbi0tOwogCQl9Ci0JCXZkZXYtPnZwYXRoc1tpXS5pc19vcGVuID0gMDsKLQkJdmRldi0+dnBhdGhzW2ldLmhhbmRsZSAgPSBOVUxMOworCQl2cGF0aC0+aXNfb3BlbiA9IDA7CisJCXZwYXRoLT5oYW5kbGUgPSBOVUxMOwogCX0KIH0KIAogLyogb3BlbiB2cGF0aHMgKi8KIGludCB2eGdlX29wZW5fdnBhdGhzKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KQogewotCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOwotCWludCBpOwotCXUzMiB2cF9pZCA9IDA7CiAJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfYXR0ciBhdHRyOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCXN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aDsKKwl1MzIgdnBfaWQgPSAwOworCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKLQkJdnhnZV9hc3NlcnQodmRldi0+dnBhdGhzW2ldLmlzX2NvbmZpZ3VyZWQpOwotCQlhdHRyLnZwX2lkID0gdmRldi0+dnBhdGhzW2ldLmRldmljZV9pZDsKKwkJdnBhdGggPSAmdmRldi0+dnBhdGhzW2ldOworCisJCXZ4Z2VfYXNzZXJ0KHZwYXRoLT5pc19jb25maWd1cmVkKTsKKwkJYXR0ci52cF9pZCA9IHZwYXRoLT5kZXZpY2VfaWQ7CiAJCWF0dHIuZmlmb19hdHRyLmNhbGxiYWNrID0gdnhnZV94bWl0X2NvbXBsOwogCQlhdHRyLmZpZm9fYXR0ci50eGRsX3Rlcm0gPSB2eGdlX3R4X3Rlcm07CiAJCWF0dHIuZmlmb19hdHRyLnBlcl90eGRsX3NwYWNlID0gc2l6ZW9mKHN0cnVjdCB2eGdlX3R4X3ByaXYpOwotCQlhdHRyLmZpZm9fYXR0ci51c2VyZGF0YSA9ICh2b2lkICopJnZkZXYtPnZwYXRoc1tpXS5maWZvOworCQlhdHRyLmZpZm9fYXR0ci51c2VyZGF0YSA9ICZ2cGF0aC0+ZmlmbzsKIAogCQlhdHRyLnJpbmdfYXR0ci5jYWxsYmFjayA9IHZ4Z2VfcnhfMWJfY29tcGw7CiAJCWF0dHIucmluZ19hdHRyLnJ4ZF9pbml0ID0gdnhnZV9yeF9pbml0aWFsX3JlcGxlbmlzaDsKIAkJYXR0ci5yaW5nX2F0dHIucnhkX3Rlcm0gPSB2eGdlX3J4X3Rlcm07CiAJCWF0dHIucmluZ19hdHRyLnBlcl9yeGRfc3BhY2UgPSBzaXplb2Yoc3RydWN0IHZ4Z2VfcnhfcHJpdik7Ci0JCWF0dHIucmluZ19hdHRyLnVzZXJkYXRhID0gKHZvaWQgKikmdmRldi0+dnBhdGhzW2ldLnJpbmc7CisJCWF0dHIucmluZ19hdHRyLnVzZXJkYXRhID0gJnZwYXRoLT5yaW5nOwogCi0JCXZkZXYtPnZwYXRoc1tpXS5yaW5nLm5kZXYgPSB2ZGV2LT5uZGV2OwotCQl2ZGV2LT52cGF0aHNbaV0ucmluZy5wZGV2ID0gdmRldi0+cGRldjsKLQkJc3RhdHVzID0gdnhnZV9od192cGF0aF9vcGVuKHZkZXYtPmRldmgsICZhdHRyLAotCQkJCSYodmRldi0+dnBhdGhzW2ldLmhhbmRsZSkpOworCQl2cGF0aC0+cmluZy5uZGV2ID0gdmRldi0+bmRldjsKKwkJdnBhdGgtPnJpbmcucGRldiA9IHZkZXYtPnBkZXY7CisJCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfb3Blbih2ZGV2LT5kZXZoLCAmYXR0ciwgJnZwYXRoLT5oYW5kbGUpOwogCQlpZiAoc3RhdHVzID09IFZYR0VfSFdfT0spIHsKLQkJCXZkZXYtPnZwYXRoc1tpXS5maWZvLmhhbmRsZSA9CisJCQl2cGF0aC0+Zmlmby5oYW5kbGUgPQogCQkJICAgIChzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKilhdHRyLmZpZm9fYXR0ci51c2VyZGF0YTsKLQkJCXZkZXYtPnZwYXRoc1tpXS5yaW5nLmhhbmRsZSA9CisJCQl2cGF0aC0+cmluZy5oYW5kbGUgPQogCQkJICAgIChzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKilhdHRyLnJpbmdfYXR0ci51c2VyZGF0YTsKLQkJCXZkZXYtPnZwYXRoc1tpXS5maWZvLnR4X3N0ZWVyaW5nX3R5cGUgPQorCQkJdnBhdGgtPmZpZm8udHhfc3RlZXJpbmdfdHlwZSA9CiAJCQkJdmRldi0+Y29uZmlnLnR4X3N0ZWVyaW5nX3R5cGU7Ci0JCQl2ZGV2LT52cGF0aHNbaV0uZmlmby5uZGV2ID0gdmRldi0+bmRldjsKLQkJCXZkZXYtPnZwYXRoc1tpXS5maWZvLnBkZXYgPSB2ZGV2LT5wZGV2OwotCQkJdmRldi0+dnBhdGhzW2ldLmZpZm8uaW5kaWNhdGVfbWF4X3BrdHMgPQorCQkJdnBhdGgtPmZpZm8ubmRldiA9IHZkZXYtPm5kZXY7CisJCQl2cGF0aC0+Zmlmby5wZGV2ID0gdmRldi0+cGRldjsKKwkJCWlmICh2ZGV2LT5jb25maWcudHhfc3RlZXJpbmdfdHlwZSkKKwkJCQl2cGF0aC0+Zmlmby50eHEgPQorCQkJCQluZXRkZXZfZ2V0X3R4X3F1ZXVlKHZkZXYtPm5kZXYsIGkpOworCQkJZWxzZQorCQkJCXZwYXRoLT5maWZvLnR4cSA9CisJCQkJCW5ldGRldl9nZXRfdHhfcXVldWUodmRldi0+bmRldiwgMCk7CisJCQl2cGF0aC0+Zmlmby5pbmRpY2F0ZV9tYXhfcGt0cyA9CiAJCQkJdmRldi0+Y29uZmlnLmZpZm9faW5kaWNhdGVfbWF4X3BrdHM7Ci0JCQl2ZGV2LT52cGF0aHNbaV0ucmluZy5yeF92ZWN0b3Jfbm8gPSAwOwotCQkJdmRldi0+dnBhdGhzW2ldLnJpbmcucnhfY3N1bSA9IHZkZXYtPnJ4X2NzdW07Ci0JCQl2ZGV2LT52cGF0aHNbaV0uaXNfb3BlbiA9IDE7Ci0JCQl2ZGV2LT52cF9oYW5kbGVzW2ldID0gdmRldi0+dnBhdGhzW2ldLmhhbmRsZTsKLQkJCXZkZXYtPnZwYXRoc1tpXS5yaW5nLmdyb19lbmFibGUgPQotCQkJCQkJdmRldi0+Y29uZmlnLmdyb19lbmFibGU7Ci0JCQl2ZGV2LT52cGF0aHNbaV0ucmluZy52bGFuX3RhZ19zdHJpcCA9Ci0JCQkJCQl2ZGV2LT52bGFuX3RhZ19zdHJpcDsKKwkJCXZwYXRoLT5yaW5nLnJ4X3ZlY3Rvcl9ubyA9IDA7CisJCQl2cGF0aC0+cmluZy5yeF9jc3VtID0gdmRldi0+cnhfY3N1bTsKKwkJCXZwYXRoLT5pc19vcGVuID0gMTsKKwkJCXZkZXYtPnZwX2hhbmRsZXNbaV0gPSB2cGF0aC0+aGFuZGxlOworCQkJdnBhdGgtPnJpbmcuZ3JvX2VuYWJsZSA9IHZkZXYtPmNvbmZpZy5ncm9fZW5hYmxlOworCQkJdnBhdGgtPnJpbmcudmxhbl90YWdfc3RyaXAgPSB2ZGV2LT52bGFuX3RhZ19zdHJpcDsKIAkJCXZkZXYtPnN0YXRzLnZwYXRoc19vcGVuKys7CiAJCX0gZWxzZSB7CiAJCQl2ZGV2LT5zdGF0cy52cGF0aF9vcGVuX2ZhaWwrKzsKIAkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKIAkJCQkiJXM6IHZwYXRoOiAlZCBmYWlsZWQgdG8gb3BlbiAiCiAJCQkJIndpdGggc3RhdHVzOiAlZCIsCi0JCQkgICAgdmRldi0+bmRldi0+bmFtZSwgdmRldi0+dnBhdGhzW2ldLmRldmljZV9pZCwKKwkJCSAgICB2ZGV2LT5uZGV2LT5uYW1lLCB2cGF0aC0+ZGV2aWNlX2lkLAogCQkJCXN0YXR1cyk7CiAJCQl2eGdlX2Nsb3NlX3ZwYXRocyh2ZGV2LCAwKTsKIAkJCXJldHVybiAtRVBFUk07CiAJCX0KIAotCQl2cF9pZCA9Ci0JCSAgKChzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqKXZkZXYtPnZwYXRoc1tpXS5oYW5kbGUpLT4KLQkJICB2cGF0aC0+dnBfaWQ7CisJCXZwX2lkID0gdnBhdGgtPmhhbmRsZS0+dnBhdGgtPnZwX2lkOwogCQl2ZGV2LT52cGF0aHNfZGVwbG95ZWQgfD0gdnhnZV9tQklUKHZwX2lkKTsKIAl9CiAJcmV0dXJuIFZYR0VfSFdfT0s7CkBAIC0yMjk5LDcgKzIyMDIsNiBAQAogCXZkZXYtPnZ4Z2VfZW50cmllc1tqXS5pbl91c2UgPSAwOwogCiAJcmV0ID0gcGNpX2VuYWJsZV9tc2l4KHZkZXYtPnBkZXYsIHZkZXYtPmVudHJpZXMsIHZkZXYtPmludHJfY250KTsKLQogCWlmIChyZXQgPiAwKSB7CiAJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKIAkJCSIlczogTVNJLVggZW5hYmxlIGZhaWxlZCBmb3IgJWQgdmVjdG9ycywgcmV0OiAlZCIsCkBAIC0yMzQ1LDE3ICsyMjQ3LDE2IEBACiAJcmV0ID0gdnhnZV9hbGxvY19tc2l4KHZkZXYpOwogCWlmICghcmV0KSB7CiAJCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCQlzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGggPSAmdmRldi0+dnBhdGhzW2ldOwogCi0JCQkvKiBJZiBmaWZvIG9yIHJpbmcgYXJlIG5vdCBlbmFibGVkCi0JCQkgICB0aGUgTVNJWCB2ZWN0b3IgZm9yIHRoYXQgc2hvdWxkIGJlIHNldCB0byAwCi0JCQkgICBIZW5jZSBpbml0aWFsaXplaW5nIHRoaXMgYXJyYXkgdG8gYWxsIDBzLgotCQkJKi8KLQkJCXZkZXYtPnZwYXRoc1tpXS5yaW5nLnJ4X3ZlY3Rvcl9ubyA9Ci0JCQkJKHZkZXYtPnZwYXRoc1tpXS5kZXZpY2VfaWQgKgotCQkJCQlWWEdFX0hXX1ZQQVRIX01TSVhfQUNUSVZFKSArIDE7CisJCQkvKiBJZiBmaWZvIG9yIHJpbmcgYXJlIG5vdCBlbmFibGVkLCB0aGUgTVNJWCB2ZWN0b3IgZm9yCisJCQkgKiBpdCBzaG91bGQgYmUgc2V0IHRvIDAuCisJCQkgKi8KKwkJCXZwYXRoLT5yaW5nLnJ4X3ZlY3Rvcl9ubyA9ICh2cGF0aC0+ZGV2aWNlX2lkICoKKwkJCQkJCVZYR0VfSFdfVlBBVEhfTVNJWF9BQ1RJVkUpICsgMTsKIAotCQkJdnhnZV9od192cGF0aF9tc2l4X3NldCh2ZGV2LT52cGF0aHNbaV0uaGFuZGxlLAotCQkJCQl0aW1fbXNpeF9pZCwgVlhHRV9BTEFSTV9NU0lYX0lEKTsKKwkJCXZ4Z2VfaHdfdnBhdGhfbXNpeF9zZXQodnBhdGgtPmhhbmRsZSwgdGltX21zaXhfaWQsCisJCQkJCSAgICAgICBWWEdFX0FMQVJNX01TSVhfSUQpOwogCQl9CiAJfQogCkBAIC0yNTcwLDkgKzI0NzEsMTAgQEAKIHN0YXRpYyB2b2lkIHZ4Z2VfcG9sbF92cF9sb2NrdXAodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopZGF0YTsKLQlpbnQgaTsKLQlzdHJ1Y3QgdnhnZV9yaW5nICpyaW5nOwogCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGg7CisJc3RydWN0IHZ4Z2VfcmluZyAqcmluZzsKKwlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CiAJCXJpbmcgPSAmdmRldi0+dnBhdGhzW2ldLnJpbmc7CkBAIC0yNTg2LDEzICsyNDg4LDEzIEBACiAKIAkJCQkvKiBzY2hlZHVsZSB2cGF0aCByZXNldCAqLwogCQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChpLCAmdmRldi0+dnBfcmVzZXQpKSB7CisJCQkJCXZwYXRoID0gJnZkZXYtPnZwYXRoc1tpXTsKIAogCQkJCQkvKiBkaXNhYmxlIGludGVycnVwdHMgZm9yIHRoaXMgdnBhdGggKi8KIAkJCQkJdnhnZV92cGF0aF9pbnRyX2Rpc2FibGUodmRldiwgaSk7CiAKIAkJCQkJLyogc3RvcCB0aGUgcXVldWUgZm9yIHRoaXMgdnBhdGggKi8KLQkJCQkJdnhnZV9zdG9wX3R4X3F1ZXVlKCZ2ZGV2LT52cGF0aHNbaV0uCi0JCQkJCQkJCWZpZm8pOworCQkJCQluZXRpZl90eF9zdG9wX3F1ZXVlKHZwYXRoLT5maWZvLnR4cSk7CiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KIAkJCX0KQEAgLTI2MjEsNiArMjUyMyw3IEBACiAJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IHZ4Z2VkZXYgKnZkZXY7CiAJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2OworCXN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aDsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgaTsKIAl1NjQgdmFsNjQsIGZ1bmN0aW9uX21vZGU7CkBAIC0yNjU0LDIwICsyNTU3LDIxIEBACiAJCWdvdG8gb3V0MTsKIAl9CiAKLQogCWlmICh2ZGV2LT5jb25maWcuaW50cl90eXBlICE9IE1TSV9YKSB7CiAJCW5ldGlmX25hcGlfYWRkKGRldiwgJnZkZXYtPm5hcGksIHZ4Z2VfcG9sbF9pbnRhLAogCQkJdmRldi0+Y29uZmlnLm5hcGlfd2VpZ2h0KTsKIAkJbmFwaV9lbmFibGUoJnZkZXYtPm5hcGkpOwotCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykKLQkJCXZkZXYtPnZwYXRoc1tpXS5yaW5nLm5hcGlfcCA9ICZ2ZGV2LT5uYXBpOworCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCQkJdnBhdGggPSAmdmRldi0+dnBhdGhzW2ldOworCQkJdnBhdGgtPnJpbmcubmFwaV9wID0gJnZkZXYtPm5hcGk7CisJCX0KIAl9IGVsc2UgewogCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgewotCQkJbmV0aWZfbmFwaV9hZGQoZGV2LCAmdmRldi0+dnBhdGhzW2ldLnJpbmcubmFwaSwKKwkJCXZwYXRoID0gJnZkZXYtPnZwYXRoc1tpXTsKKwkJCW5ldGlmX25hcGlfYWRkKGRldiwgJnZwYXRoLT5yaW5nLm5hcGksCiAJCQkgICAgdnhnZV9wb2xsX21zaXgsIHZkZXYtPmNvbmZpZy5uYXBpX3dlaWdodCk7Ci0JCQluYXBpX2VuYWJsZSgmdmRldi0+dnBhdGhzW2ldLnJpbmcubmFwaSk7Ci0JCQl2ZGV2LT52cGF0aHNbaV0ucmluZy5uYXBpX3AgPQotCQkJCSZ2ZGV2LT52cGF0aHNbaV0ucmluZy5uYXBpOworCQkJbmFwaV9lbmFibGUoJnZwYXRoLT5yaW5nLm5hcGkpOworCQkJdnBhdGgtPnJpbmcubmFwaV9wID0gJnZwYXRoLT5yaW5nLm5hcGk7CiAJCX0KIAl9CiAKQEAgLTI2ODQsOSArMjU4OCwxMCBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCXZwYXRoID0gJnZkZXYtPnZwYXRoc1tpXTsKKwogCQkvKiBzZXQgaW5pdGlhbCBtdHUgYmVmb3JlIGVuYWJsaW5nIHRoZSBkZXZpY2UgKi8KLQkJc3RhdHVzID0gdnhnZV9od192cGF0aF9tdHVfc2V0KHZkZXYtPnZwYXRoc1tpXS5oYW5kbGUsCi0JCQkJCQl2ZGV2LT5tdHUpOworCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX210dV9zZXQodnBhdGgtPmhhbmRsZSwgdmRldi0+bXR1KTsKIAkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CiAJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCiAJCQkJIiVzOiBmYXRhbDogY2FuIG5vdCBzZXQgbmV3IE1UVSIsIGRldi0+bmFtZSk7CkBAIC0yNzAwLDEwICsyNjA1LDIxIEBACiAJCSIlczogTVRVIGlzICVkIiwgdmRldi0+bmRldi0+bmFtZSwgdmRldi0+bXR1KTsKIAlWWEdFX0RFVklDRV9ERUJVR19MRVZFTF9TRVQoVlhHRV9FUlIsIFZYR0VfQ09NUE9ORU5UX0xMLCB2ZGV2KTsKIAotCS8qIFJlcHJvZ3JhbSB0aGUgREEgdGFibGUgd2l0aCBwb3B1bGF0ZWQgbWFjIGFkZHJlc3NlcyAqLwotCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7Ci0JCXZ4Z2VfcmVzdG9yZV92cGF0aF9tYWNfYWRkcigmdmRldi0+dnBhdGhzW2ldKTsKLQkJdnhnZV9yZXN0b3JlX3ZwYXRoX3ZpZF90YWJsZSgmdmRldi0+dnBhdGhzW2ldKTsKKwkvKiBSZXN0b3JlIHRoZSBEQSwgVklEIHRhYmxlIGFuZCBhbHNvIG11bHRpY2FzdCBhbmQgcHJvbWlzY3VvdXMgbW9kZQorCSAqIHN0YXRlcworCSAqLworCWlmICh2ZGV2LT5hbGxfbXVsdGlfZmxnKSB7CisJCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCQl2cGF0aCA9ICZ2ZGV2LT52cGF0aHNbaV07CisJCQl2eGdlX3Jlc3RvcmVfdnBhdGhfbWFjX2FkZHIodnBhdGgpOworCQkJdnhnZV9yZXN0b3JlX3ZwYXRoX3ZpZF90YWJsZSh2cGF0aCk7CisKKwkJCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfbWNhc3RfZW5hYmxlKHZwYXRoLT5oYW5kbGUpOworCQkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkJIiVzOiVkIEVuYWJsaW5nIG11bHRpY2FzdCBmYWlsZWQiLAorCQkJCQlfX2Z1bmNfXywgX19MSU5FX18pOworCQl9CiAJfQogCiAJLyogRW5hYmxlIHZwYXRoIHRvIHNuaWZmIGFsbCB1bmljYXN0L211bHRpY2FzdCB0cmFmZmljIHRoYXQgbm90CkBAIC0yNzMyLDE0ICsyNjQ4LDE0IEBACiAKIAkvKiBFbmFibGluZyBCY2FzdCBhbmQgbWNhc3QgZm9yIGFsbCB2cGF0aCAqLwogCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7Ci0JCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfYmNhc3RfZW5hYmxlKHZkZXYtPnZwYXRoc1tpXS5oYW5kbGUpOworCQl2cGF0aCA9ICZ2ZGV2LT52cGF0aHNbaV07CisJCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfYmNhc3RfZW5hYmxlKHZwYXRoLT5oYW5kbGUpOwogCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCiAJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCiAJCQkJIiVzIDogQ2FuIG5vdCBlbmFibGUgYmNhc3QgZm9yIHZwYXRoICIKIAkJCQkiaWQgJWQiLCBkZXYtPm5hbWUsIGkpOwogCQlpZiAodmRldi0+Y29uZmlnLmFkZHJfbGVhcm5fZW4pIHsKLQkJCXN0YXR1cyA9Ci0JCQkgICAgdnhnZV9od192cGF0aF9tY2FzdF9lbmFibGUodmRldi0+dnBhdGhzW2ldLmhhbmRsZSk7CisJCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX21jYXN0X2VuYWJsZSh2cGF0aC0+aGFuZGxlKTsKIAkJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKIAkJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCiAJCQkJCSIlcyA6IENhbiBub3QgZW5hYmxlIG1jYXN0IGZvciB2cGF0aCAiCkBAIC0yNzY1LDcgKzI2ODEsNyBAQAogCiAJaWYgKHZ4Z2VfaHdfZGV2aWNlX2xpbmtfc3RhdGVfZ2V0KHZkZXYtPmRldmgpID09IFZYR0VfSFdfTElOS19VUCkgewogCQluZXRpZl9jYXJyaWVyX29uKHZkZXYtPm5kZXYpOwotCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBMaW5rIFVwXG4iLCB2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X25vdGljZSh2ZGV2LT5uZGV2LCAiTGluayBVcFxuIik7CiAJCXZkZXYtPnN0YXRzLmxpbmtfdXArKzsKIAl9CiAKQEAgLTI3NzQsMTIgKzI2OTAsMTQgQEAKIAlzbXBfd21iKCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgewotCQl2eGdlX2h3X3ZwYXRoX2VuYWJsZSh2ZGV2LT52cGF0aHNbaV0uaGFuZGxlKTsKKwkJdnBhdGggPSAmdmRldi0+dnBhdGhzW2ldOworCisJCXZ4Z2VfaHdfdnBhdGhfZW5hYmxlKHZwYXRoLT5oYW5kbGUpOwogCQlzbXBfd21iKCk7Ci0JCXZ4Z2VfaHdfdnBhdGhfcnhfZG9vcmJlbGxfaW5pdCh2ZGV2LT52cGF0aHNbaV0uaGFuZGxlKTsKKwkJdnhnZV9od192cGF0aF9yeF9kb29yYmVsbF9pbml0KHZwYXRoLT5oYW5kbGUpOwogCX0KIAotCXZ4Z2Vfc3RhcnRfYWxsX3R4X3F1ZXVlKHZkZXYpOworCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXModmRldi0+bmRldik7CiAJZ290byBvdXQwOwogCiBvdXQyOgpAQCAtMjkwMSw4ICsyODE5LDggQEAKIAl9CiAKIAluZXRpZl9jYXJyaWVyX29mZih2ZGV2LT5uZGV2KTsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBMaW5rIERvd25cbiIsIHZkZXYtPm5kZXYtPm5hbWUpOwotCXZ4Z2Vfc3RvcF9hbGxfdHhfcXVldWUodmRldik7CisJbmV0ZGV2X25vdGljZSh2ZGV2LT5uZGV2LCAiTGluayBEb3duXG4iKTsKKwluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXModmRldi0+bmRldik7CiAKIAkvKiBOb3RlIHRoYXQgYXQgdGhpcyBwb2ludCB4bWl0KCkgaXMgc3RvcHBlZCBieSB1cHBlciBsYXllciAqLwogCWlmIChkb19pbykKQEAgLTMyMTEsMTEgKzMxMjksMTEgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKIAllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CiAJc3RydWN0IHZ4Z2VkZXYgKnZkZXY7Ci0JaW50IGksIHJldCA9IDAsIG5vX29mX3F1ZXVlID0gMTsKKwlpbnQgcmV0ID0gMCwgbm9fb2ZfcXVldWUgPSAxOwogCXU2NCBzdGF0OwogCiAJKnZkZXZfb3V0ID0gTlVMTDsKLQlpZiAoY29uZmlnLT50eF9zdGVlcmluZ190eXBlID09IFRYX01VTFRJUV9TVEVFUklORykKKwlpZiAoY29uZmlnLT50eF9zdGVlcmluZ190eXBlKQogCQlub19vZl9xdWV1ZSA9IG5vX29mX3ZwYXRoOwogCiAJbmRldiA9IGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZihzdHJ1Y3QgdnhnZWRldiksCkBAIC0zMjg0LDE2ICszMjAyLDYgQEAKIAlpZiAodmRldi0+Y29uZmlnLmdyb19lbmFibGUpCiAJCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPOwogCi0JaWYgKHZkZXYtPmNvbmZpZy50eF9zdGVlcmluZ190eXBlID09IFRYX01VTFRJUV9TVEVFUklORykKLQkJbmRldi0+cmVhbF9udW1fdHhfcXVldWVzID0gbm9fb2ZfdnBhdGg7Ci0KLSNpZmRlZiBORVRJRl9GX0xMVFgKLQluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xMVFg7Ci0jZW5kaWYKLQotCWZvciAoaSA9IDA7IGkgPCBub19vZl92cGF0aDsgaSsrKQotCQlzcGluX2xvY2tfaW5pdCgmdmRldi0+dnBhdGhzW2ldLmZpZm8udHhfbG9jayk7Ci0KIAlpZiAocmVnaXN0ZXJfbmV0ZGV2KG5kZXYpKSB7CiAJCXZ4Z2VfZGVidWdfaW5pdCh2eGdlX2h3X2RldmljZV90cmFjZV9sZXZlbF9nZXQoaGxkZXYpLAogCQkJIiVzOiAlcyA6IGRldmljZSByZWdpc3RyYXRpb24gZmFpbGVkISIsCkBAIC0zMzkzLDYgKzMzMDEsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBobGRldi0+bmRldjsKIAlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoID0gTlVMTDsKIAlpbnQgdnBhdGhfaWR4OwogCiAJdnhnZV9kZWJ1Z19lbnRyeWV4aXQodmRldi0+bGV2ZWxfdHJhY2UsCkBAIC0zNDAzLDkgKzMzMTIsMTEgQEAKIAkgKi8KIAl2ZGV2LT5jcmljX2Vycl9ldmVudCA9IHR5cGU7CiAKLQlmb3IgKHZwYXRoX2lkeCA9IDA7IHZwYXRoX2lkeCA8IHZkZXYtPm5vX29mX3ZwYXRoOyB2cGF0aF9pZHgrKykKLQkJaWYgKHZkZXYtPnZwYXRoc1t2cGF0aF9pZHhdLmRldmljZV9pZCA9PSB2cF9pZCkKKwlmb3IgKHZwYXRoX2lkeCA9IDA7IHZwYXRoX2lkeCA8IHZkZXYtPm5vX29mX3ZwYXRoOyB2cGF0aF9pZHgrKykgeworCQl2cGF0aCA9ICZ2ZGV2LT52cGF0aHNbdnBhdGhfaWR4XTsKKwkJaWYgKHZwYXRoLT5kZXZpY2VfaWQgPT0gdnBfaWQpCiAJCQlicmVhazsKKwl9CiAKIAlpZiAoIXRlc3RfYml0KF9fVlhHRV9TVEFURV9SRVNFVF9DQVJELCAmdmRldi0+c3RhdGUpKSB7CiAJCWlmICh0eXBlID09IFZYR0VfSFdfRVZFTlRfU0xPVF9GUkVFWkUpIHsKQEAgLTM0NDIsOCArMzM1Myw3IEBACiAJCQkJdnhnZV92cGF0aF9pbnRyX2Rpc2FibGUodmRldiwgdnBhdGhfaWR4KTsKIAogCQkJCS8qIHN0b3AgdGhlIHF1ZXVlIGZvciB0aGlzIHZwYXRoICovCi0JCQkJdnhnZV9zdG9wX3R4X3F1ZXVlKCZ2ZGV2LT52cGF0aHNbdnBhdGhfaWR4XS4KLQkJCQkJCQlmaWZvKTsKKwkJCQluZXRpZl90eF9zdG9wX3F1ZXVlKHZwYXRoLT5maWZvLnR4cSk7CiAJCQl9CiAJCX0KIAl9CkBAIC0zOTM2LDkgKzM4NDYsNyBAQAogCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAogCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiAiCi0JCQkiQ2Fubm90IHJlLWVuYWJsZSBkZXZpY2UgYWZ0ZXIgcmVzZXRcbiIsCi0JCQlWWEdFX0RSSVZFUl9OQU1FKTsKKwkJbmV0ZGV2X2VycihuZXRkZXYsICJDYW5ub3QgcmUtZW5hYmxlIGRldmljZSBhZnRlciByZXNldFxuIik7CiAJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwogCX0KIApAQCAtMzk2Myw5ICszODcxLDggQEAKIAogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKIAkJaWYgKHZ4Z2Vfb3BlbihuZXRkZXYpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiAiCi0JCQkJIkNhbid0IGJyaW5nIGRldmljZSBiYWNrIHVwIGFmdGVyIHJlc2V0XG4iLAotCQkJCVZYR0VfRFJJVkVSX05BTUUpOworCQkJbmV0ZGV2X2VycihuZXRkZXYsCisJCQkJICAgIkNhbid0IGJyaW5nIGRldmljZSBiYWNrIHVwIGFmdGVyIHJlc2V0XG4iKTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTQwMjMsNyArMzkzMCw3IEBACiAJaW50IGhpZ2hfZG1hID0gMDsKIAl1NjQgdnBhdGhfbWFzayA9IDA7CiAJc3RydWN0IHZ4Z2VkZXYgKnZkZXY7Ci0Jc3RydWN0IHZ4Z2VfY29uZmlnIGxsX2NvbmZpZzsKKwlzdHJ1Y3QgdnhnZV9jb25maWcgKmxsX2NvbmZpZyA9IE5VTEw7CiAJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2NvbmZpZyAqZGV2aWNlX2NvbmZpZyA9IE5VTEw7CiAJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2F0dHIgYXR0cjsKIAlpbnQgaSwgaiwgbm9fb2ZfdnBhdGggPSAwLCBtYXhfdnBhdGhfc3VwcG9ydGVkID0gMDsKQEAgLTQwODIsMTcgKzM5ODksMjQgQEAKIAkJZ290byBfZXhpdDA7CiAJfQogCi0JbWVtc2V0KCZsbF9jb25maWcsIDAsIHNpemVvZihzdHJ1Y3QgdnhnZV9jb25maWcpKTsKLQlsbF9jb25maWcudHhfc3RlZXJpbmdfdHlwZSA9IFRYX01VTFRJUV9TVEVFUklORzsKLQlsbF9jb25maWcuaW50cl90eXBlID0gTVNJX1g7Ci0JbGxfY29uZmlnLm5hcGlfd2VpZ2h0ID0gTkVXX05BUElfV0VJR0hUOwotCWxsX2NvbmZpZy5ydGhfc3RlZXJpbmcgPSBSVEhfU1RFRVJJTkc7CisJbGxfY29uZmlnID0ga3phbGxvYyhzaXplb2YoKmxsX2NvbmZpZyksIEdGUF9LRVJORUwpOworCWlmICghbGxfY29uZmlnKSB7CisJCXJldCA9IC1FTk9NRU07CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSJsbF9jb25maWcgOiBtYWxsb2MgZmFpbGVkICVzICVkIiwKKwkJCV9fRklMRV9fLCBfX0xJTkVfXyk7CisJCWdvdG8gX2V4aXQwOworCX0KKwlsbF9jb25maWctPnR4X3N0ZWVyaW5nX3R5cGUgPSBUWF9NVUxUSVFfU1RFRVJJTkc7CisJbGxfY29uZmlnLT5pbnRyX3R5cGUgPSBNU0lfWDsKKwlsbF9jb25maWctPm5hcGlfd2VpZ2h0ID0gTkVXX05BUElfV0VJR0hUOworCWxsX2NvbmZpZy0+cnRoX3N0ZWVyaW5nID0gUlRIX1NURUVSSU5HOwogCiAJLyogZ2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAqLwogCXZ4Z2VfaHdfZGV2aWNlX2NvbmZpZ19kZWZhdWx0X2dldChkZXZpY2VfY29uZmlnKTsKIAogCS8qIGluaXRpYWxpemUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovCi0JdnhnZV9kZXZpY2VfY29uZmlnX2luaXQoZGV2aWNlX2NvbmZpZywgJmxsX2NvbmZpZy5pbnRyX3R5cGUpOworCXZ4Z2VfZGV2aWNlX2NvbmZpZ19pbml0KGRldmljZV9jb25maWcsICZsbF9jb25maWctPmludHJfdHlwZSk7CiAKIAlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAocmV0KSB7CkBAIC00MTQ1LDcgKzQwNTksNyBAQAogCQkodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSk7CiAKIAlzdGF0dXMgPSB2eGdlX2h3X2RldmljZV9od19pbmZvX2dldChhdHRyLmJhcjAsCi0JCQkmbGxfY29uZmlnLmRldmljZV9od19pbmZvKTsKKwkJCSZsbF9jb25maWctPmRldmljZV9od19pbmZvKTsKIAlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKIAkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAogCQkJIiVzOiBSZWFkaW5nIG9mIGhhcmR3YXJlIGluZm8gZmFpbGVkLiIKQEAgLTQxNTQsNyArNDA2OCw3IEBACiAJCWdvdG8gX2V4aXQzOwogCX0KIAotCWlmIChsbF9jb25maWcuZGV2aWNlX2h3X2luZm8uZndfdmVyc2lvbi5tYWpvciAhPQorCWlmIChsbF9jb25maWctPmRldmljZV9od19pbmZvLmZ3X3ZlcnNpb24ubWFqb3IgIT0KIAkJVlhHRV9EUklWRVJfRldfVkVSU0lPTl9NQUpPUikgewogCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCiAJCQkiJXM6IEluY29ycmVjdCBmaXJtd2FyZSB2ZXJzaW9uLiIKQEAgLTQxNjQsNyArNDA3OCw3IEBACiAJCWdvdG8gX2V4aXQzOwogCX0KIAotCXZwYXRoX21hc2sgPSBsbF9jb25maWcuZGV2aWNlX2h3X2luZm8udnBhdGhfbWFzazsKKwl2cGF0aF9tYXNrID0gbGxfY29uZmlnLT5kZXZpY2VfaHdfaW5mby52cGF0aF9tYXNrOwogCWlmICh2cGF0aF9tYXNrID09IDApIHsKIAkJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwKIAkJCSIlczogTm8gdnBhdGhzIGF2YWlsYWJsZSBpbiBkZXZpY2UiLCBWWEdFX0RSSVZFUl9OQU1FKTsKQEAgLTQxNzYsMTAgKzQwOTAsMTAgQEAKIAkJIiVzOiVkICBWcGF0aCBtYXNrID0gJWxseCIsIF9fZnVuY19fLCBfX0xJTkVfXywKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZyl2cGF0aF9tYXNrKTsKIAotCWZ1bmN0aW9uX21vZGUgPSBsbF9jb25maWcuZGV2aWNlX2h3X2luZm8uZnVuY3Rpb25fbW9kZTsKLQlob3N0X3R5cGUgPSBsbF9jb25maWcuZGV2aWNlX2h3X2luZm8uaG9zdF90eXBlOworCWZ1bmN0aW9uX21vZGUgPSBsbF9jb25maWctPmRldmljZV9od19pbmZvLmZ1bmN0aW9uX21vZGU7CisJaG9zdF90eXBlID0gbGxfY29uZmlnLT5kZXZpY2VfaHdfaW5mby5ob3N0X3R5cGU7CiAJaXNfcHJpdmlsZWdlZCA9IF9fdnhnZV9od19kZXZpY2VfaXNfcHJpdmlsYWdlZChob3N0X3R5cGUsCi0JCWxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby5mdW5jX2lkKTsKKwkJbGxfY29uZmlnLT5kZXZpY2VfaHdfaW5mby5mdW5jX2lkKTsKIAogCS8qIENoZWNrIGhvdyBtYW55IHZwYXRocyBhcmUgYXZhaWxhYmxlICovCiAJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykgewpAQCAtNDE5Myw3ICs0MTA3LDcgQEAKIAogCS8qIEVuYWJsZSBTUklPViBtb2RlLCBpZiBmaXJtd2FyZSBoYXMgU1JJT1Ygc3VwcG9ydCBhbmQgaWYgaXQgaXMgYSBQRiAqLwogCWlmIChpc19zcmlvdihmdW5jdGlvbl9tb2RlKSAmJiAobWF4X2NvbmZpZ19kZXYgPiAxKSAmJgotCQkobGxfY29uZmlnLmludHJfdHlwZSAhPSBJTlRBKSAmJgorCQkobGxfY29uZmlnLT5pbnRyX3R5cGUgIT0gSU5UQSkgJiYKIAkJKGlzX3ByaXZpbGVnZWQgPT0gVlhHRV9IV19PSykpIHsKIAkJcmV0ID0gcGNpX2VuYWJsZV9zcmlvdihwZGV2LCAoKG1heF9jb25maWdfZGV2IC0gMSkgPCBudW1fdmZzKQogCQkJPyAobWF4X2NvbmZpZ19kZXYgLSAxKSA6IG51bV92ZnMpOwpAQCAtNDIwNiw3ICs0MTIwLDcgQEAKIAkgKiBDb25maWd1cmUgdnBhdGhzIGFuZCBnZXQgZHJpdmVyIGNvbmZpZ3VyZWQgbnVtYmVyIG9mIHZwYXRocwogCSAqIHdoaWNoIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgbWF4aW11bSB2cGF0aHMgcGVyIGZ1bmN0aW9uLgogCSAqLwotCW5vX29mX3ZwYXRoID0gdnhnZV9jb25maWdfdnBhdGhzKGRldmljZV9jb25maWcsIHZwYXRoX21hc2ssICZsbF9jb25maWcpOworCW5vX29mX3ZwYXRoID0gdnhnZV9jb25maWdfdnBhdGhzKGRldmljZV9jb25maWcsIHZwYXRoX21hc2ssIGxsX2NvbmZpZyk7CiAJaWYgKCFub19vZl92cGF0aCkgewogCQl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX0VSUiwKIAkJCSIlczogTm8gbW9yZSB2cGF0aHMgdG8gY29uZmlndXJlIiwgVlhHRV9EUklWRVJfTkFNRSk7CkBAIC00MjQxLDIxICs0MTU1LDIxIEBACiAJLyogc2V0IHByaXZhdGUgZGV2aWNlIGluZm8gKi8KIAlwY2lfc2V0X2RydmRhdGEocGRldiwgaGxkZXYpOwogCi0JbGxfY29uZmlnLmdyb19lbmFibGUgPSBWWEdFX0dST19BTFdBWVNfQUdHUkVHQVRFOwotCWxsX2NvbmZpZy5maWZvX2luZGljYXRlX21heF9wa3RzID0gVlhHRV9GSUZPX0lORElDQVRFX01BWF9QS1RTOwotCWxsX2NvbmZpZy5hZGRyX2xlYXJuX2VuID0gYWRkcl9sZWFybl9lbjsKLQlsbF9jb25maWcucnRoX2FsZ29yaXRobSA9IFJUSF9BTEdfSkVOS0lOUzsKLQlsbF9jb25maWcucnRoX2hhc2hfdHlwZV90Y3BpcHY0ID0gVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9UQ1BfSVBWNDsKLQlsbF9jb25maWcucnRoX2hhc2hfdHlwZV9pcHY0ID0gVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9OT05FOwotCWxsX2NvbmZpZy5ydGhfaGFzaF90eXBlX3RjcGlwdjYgPSBWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX05PTkU7Ci0JbGxfY29uZmlnLnJ0aF9oYXNoX3R5cGVfaXB2NiA9IFZYR0VfSFdfUklOR19IQVNIX1RZUEVfTk9ORTsKLQlsbF9jb25maWcucnRoX2hhc2hfdHlwZV90Y3BpcHY2ZXggPSBWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX05PTkU7Ci0JbGxfY29uZmlnLnJ0aF9oYXNoX3R5cGVfaXB2NmV4ID0gVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9OT05FOwotCWxsX2NvbmZpZy5ydGhfYmt0X3N6ID0gUlRIX0JVQ0tFVF9TSVpFOwotCWxsX2NvbmZpZy50eF9wYXVzZV9lbmFibGUgPSBWWEdFX1BBVVNFX0NUUkxfRU5BQkxFOwotCWxsX2NvbmZpZy5yeF9wYXVzZV9lbmFibGUgPSBWWEdFX1BBVVNFX0NUUkxfRU5BQkxFOworCWxsX2NvbmZpZy0+Z3JvX2VuYWJsZSA9IFZYR0VfR1JPX0FMV0FZU19BR0dSRUdBVEU7CisJbGxfY29uZmlnLT5maWZvX2luZGljYXRlX21heF9wa3RzID0gVlhHRV9GSUZPX0lORElDQVRFX01BWF9QS1RTOworCWxsX2NvbmZpZy0+YWRkcl9sZWFybl9lbiA9IGFkZHJfbGVhcm5fZW47CisJbGxfY29uZmlnLT5ydGhfYWxnb3JpdGhtID0gUlRIX0FMR19KRU5LSU5TOworCWxsX2NvbmZpZy0+cnRoX2hhc2hfdHlwZV90Y3BpcHY0ID0gVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9UQ1BfSVBWNDsKKwlsbF9jb25maWctPnJ0aF9oYXNoX3R5cGVfaXB2NCA9IFZYR0VfSFdfUklOR19IQVNIX1RZUEVfTk9ORTsKKwlsbF9jb25maWctPnJ0aF9oYXNoX3R5cGVfdGNwaXB2NiA9IFZYR0VfSFdfUklOR19IQVNIX1RZUEVfTk9ORTsKKwlsbF9jb25maWctPnJ0aF9oYXNoX3R5cGVfaXB2NiA9IFZYR0VfSFdfUklOR19IQVNIX1RZUEVfTk9ORTsKKwlsbF9jb25maWctPnJ0aF9oYXNoX3R5cGVfdGNwaXB2NmV4ID0gVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9OT05FOworCWxsX2NvbmZpZy0+cnRoX2hhc2hfdHlwZV9pcHY2ZXggPSBWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX05PTkU7CisJbGxfY29uZmlnLT5ydGhfYmt0X3N6ID0gUlRIX0JVQ0tFVF9TSVpFOworCWxsX2NvbmZpZy0+dHhfcGF1c2VfZW5hYmxlID0gVlhHRV9QQVVTRV9DVFJMX0VOQUJMRTsKKwlsbF9jb25maWctPnJ4X3BhdXNlX2VuYWJsZSA9IFZYR0VfUEFVU0VfQ1RSTF9FTkFCTEU7CiAKLQlpZiAodnhnZV9kZXZpY2VfcmVnaXN0ZXIoaGxkZXYsICZsbF9jb25maWcsIGhpZ2hfZG1hLCBub19vZl92cGF0aCwKKwlpZiAodnhnZV9kZXZpY2VfcmVnaXN0ZXIoaGxkZXYsIGxsX2NvbmZpZywgaGlnaF9kbWEsIG5vX29mX3ZwYXRoLAogCQkmdmRldikpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBfZXhpdDQ7CkBAIC00MjgxLDEyICs0MTk1LDExIEBACiAKIAkJdmRldi0+dnBhdGhzW2pdLmlzX2NvbmZpZ3VyZWQgPSAxOwogCQl2ZGV2LT52cGF0aHNbal0uZGV2aWNlX2lkID0gaTsKLQkJdmRldi0+dnBhdGhzW2pdLmZpZm8uZHJpdmVyX2lkID0gajsKIAkJdmRldi0+dnBhdGhzW2pdLnJpbmcuZHJpdmVyX2lkID0gajsKIAkJdmRldi0+dnBhdGhzW2pdLnZkZXYgPSB2ZGV2OwogCQl2ZGV2LT52cGF0aHNbal0ubWF4X21hY19hZGRyX2NudCA9IG1heF9tYWNfdnBhdGg7CiAJCW1lbWNweSgodTggKil2ZGV2LT52cGF0aHNbal0ubWFjYWRkciwKLQkJCQkodTggKilsbF9jb25maWcuZGV2aWNlX2h3X2luZm8ubWFjX2FkZHJzW2ldLAorCQkJCWxsX2NvbmZpZy0+ZGV2aWNlX2h3X2luZm8ubWFjX2FkZHJzW2ldLAogCQkJCUVUSF9BTEVOKTsKIAogCQkvKiBJbml0aWFsaXplIHRoZSBtYWMgYWRkcmVzcyBsaXN0IGhlYWRlciAqLwpAQCAtNDMwNywxOCArNDIyMCwxOCBAQAogCiAJbWFjYWRkciA9ICh1OCAqKXZkZXYtPnZwYXRoc1swXS5tYWNhZGRyOwogCi0JbGxfY29uZmlnLmRldmljZV9od19pbmZvLnNlcmlhbF9udW1iZXJbVlhHRV9IV19JTkZPX0xFTiAtIDFdID0gJ1wwJzsKLQlsbF9jb25maWcuZGV2aWNlX2h3X2luZm8ucHJvZHVjdF9kZXNjW1ZYR0VfSFdfSU5GT19MRU4gLSAxXSA9ICdcMCc7Ci0JbGxfY29uZmlnLmRldmljZV9od19pbmZvLnBhcnRfbnVtYmVyW1ZYR0VfSFdfSU5GT19MRU4gLSAxXSA9ICdcMCc7CisJbGxfY29uZmlnLT5kZXZpY2VfaHdfaW5mby5zZXJpYWxfbnVtYmVyW1ZYR0VfSFdfSU5GT19MRU4gLSAxXSA9ICdcMCc7CisJbGxfY29uZmlnLT5kZXZpY2VfaHdfaW5mby5wcm9kdWN0X2Rlc2NbVlhHRV9IV19JTkZPX0xFTiAtIDFdID0gJ1wwJzsKKwlsbF9jb25maWctPmRldmljZV9od19pbmZvLnBhcnRfbnVtYmVyW1ZYR0VfSFdfSU5GT19MRU4gLSAxXSA9ICdcMCc7CiAKIAl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwgIiVzOiBTRVJJQUwgTlVNQkVSOiAlcyIsCi0JCXZkZXYtPm5kZXYtPm5hbWUsIGxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby5zZXJpYWxfbnVtYmVyKTsKKwkJdmRldi0+bmRldi0+bmFtZSwgbGxfY29uZmlnLT5kZXZpY2VfaHdfaW5mby5zZXJpYWxfbnVtYmVyKTsKIAogCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLCAiJXM6IFBBUlQgTlVNQkVSOiAlcyIsCi0JCXZkZXYtPm5kZXYtPm5hbWUsIGxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby5wYXJ0X251bWJlcik7CisJCXZkZXYtPm5kZXYtPm5hbWUsIGxsX2NvbmZpZy0+ZGV2aWNlX2h3X2luZm8ucGFydF9udW1iZXIpOwogCiAJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsICIlczogTmV0ZXJpb24gJXMgU2VydmVyIEFkYXB0ZXIiLAotCQl2ZGV2LT5uZGV2LT5uYW1lLCBsbF9jb25maWcuZGV2aWNlX2h3X2luZm8ucHJvZHVjdF9kZXNjKTsKKwkJdmRldi0+bmRldi0+bmFtZSwgbGxfY29uZmlnLT5kZXZpY2VfaHdfaW5mby5wcm9kdWN0X2Rlc2MpOwogCiAJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsICIlczogTUFDIEFERFI6ICVwTSIsCiAJCXZkZXYtPm5kZXYtPm5hbWUsIG1hY2FkZHIpOwpAQCAtNDMyOCwxMSArNDI0MSwxMSBAQAogCiAJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCiAJCSIlczogRmlybXdhcmUgdmVyc2lvbiA6ICVzIERhdGUgOiAlcyIsIHZkZXYtPm5kZXYtPm5hbWUsCi0JCWxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby5md192ZXJzaW9uLnZlcnNpb24sCi0JCWxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby5md19kYXRlLmRhdGUpOworCQlsbF9jb25maWctPmRldmljZV9od19pbmZvLmZ3X3ZlcnNpb24udmVyc2lvbiwKKwkJbGxfY29uZmlnLT5kZXZpY2VfaHdfaW5mby5md19kYXRlLmRhdGUpOwogCiAJaWYgKG5ld19kZXZpY2UpIHsKLQkJc3dpdGNoIChsbF9jb25maWcuZGV2aWNlX2h3X2luZm8uZnVuY3Rpb25fbW9kZSkgeworCQlzd2l0Y2ggKGxsX2NvbmZpZy0+ZGV2aWNlX2h3X2luZm8uZnVuY3Rpb25fbW9kZSkgewogCQljYXNlIFZYR0VfSFdfRlVOQ1RJT05fTU9ERV9TSU5HTEVfRlVOQ1RJT046CiAJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKIAkJCSIlczogU2luZ2xlIEZ1bmN0aW9uIE1vZGUgRW5hYmxlZCIsIHZkZXYtPm5kZXYtPm5hbWUpOwpAQCAtNDM1NSw3ICs0MjY4LDcgQEAKIAl2eGdlX3ByaW50X3Bhcm0odmRldiwgdnBhdGhfbWFzayk7CiAKIAkvKiBTdG9yZSB0aGUgZncgdmVyc2lvbiBmb3IgZXRodHRvb2wgb3B0aW9uICovCi0Jc3RyY3B5KHZkZXYtPmZ3X3ZlcnNpb24sIGxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby5md192ZXJzaW9uLnZlcnNpb24pOworCXN0cmNweSh2ZGV2LT5md192ZXJzaW9uLCBsbF9jb25maWctPmRldmljZV9od19pbmZvLmZ3X3ZlcnNpb24udmVyc2lvbik7CiAJbWVtY3B5KHZkZXYtPm5kZXYtPmRldl9hZGRyLCAodTggKil2ZGV2LT52cGF0aHNbMF0ubWFjYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweSh2ZGV2LT5uZGV2LT5wZXJtX2FkZHIsIHZkZXYtPm5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAKQEAgLTQzOTQsNyArNDMwNyw3IEBACiAJICogcHJlc2VudCB0byBwcmV2ZW50IHN1Y2ggYSBmYWlsdXJlLgogCSAqLwogCi0JaWYgKGxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby5mdW5jdGlvbl9tb2RlID09CisJaWYgKGxsX2NvbmZpZy0+ZGV2aWNlX2h3X2luZm8uZnVuY3Rpb25fbW9kZSA9PQogCQlWWEdFX0hXX0ZVTkNUSU9OX01PREVfTVVMVElfRlVOQ1RJT04pCiAJCWlmICh2ZGV2LT5jb25maWcuaW50cl90eXBlID09IElOVEEpCiAJCQl2eGdlX2h3X2RldmljZV91bm1hc2tfYWxsKGhsZGV2KTsKQEAgLTQ0MDYsNiArNDMxOSw3IEBACiAJVlhHRV9DT1BZX0RFQlVHX0lORk9fVE9fTEwodmRldiwgdnhnZV9od19kZXZpY2VfZXJyb3JfbGV2ZWxfZ2V0KGhsZGV2KSwKIAkJdnhnZV9od19kZXZpY2VfdHJhY2VfbGV2ZWxfZ2V0KGhsZGV2KSk7CiAKKwlrZnJlZShsbF9jb25maWcpOwogCXJldHVybiAwOwogCiBfZXhpdDU6CkBAIC00NDIzLDYgKzQzMzcsNyBAQAogX2V4aXQxOgogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIF9leGl0MDoKKwlrZnJlZShsbF9jb25maWcpOwogCWtmcmVlKGRldmljZV9jb25maWcpOwogCWRyaXZlcl9jb25maWctPmNvbmZpZ19kZXZfY250LS07CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwpAQCAtNDUxNCwxMyArNDQyOSw5IEBACiB2eGdlX3N0YXJ0ZXIodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKLQljaGFyIHZlcnNpb25bMzJdOwotCXNucHJpbnRmKHZlcnNpb24sIDMyLCAiJXMiLCBEUlZfVkVSU0lPTik7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogQ29weXJpZ2h0KGMpIDIwMDItMjAwOSBOZXRlcmlvbiBJbmNcbiIsCi0JCVZYR0VfRFJJVkVSX05BTUUpOwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBEcml2ZXIgdmVyc2lvbjogJXNcbiIsCi0JCQlWWEdFX0RSSVZFUl9OQU1FLCB2ZXJzaW9uKTsKKwlwcl9pbmZvKCJDb3B5cmlnaHQoYykgMjAwMi0yMDEwIEV4YXIgQ29ycC5cbiIpOworCXByX2luZm8oIkRyaXZlciB2ZXJzaW9uOiAlc1xuIiwgRFJWX1ZFUlNJT04pOwogCiAJdmVyaWZ5X2JhbmR3aWR0aCgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5oIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uaAppbmRleCA2MDI3NmIyLi4yZTNiMDY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5oCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmgKQEAgLTcsOSArNyw5IEBACiAgKiBzeXN0ZW0gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTC4KICAqIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoaXMgZGlzdHJpYnV0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICoKLSAqIHZ4Z2UtbWFpbi5oOiBEcml2ZXIgZm9yIE5ldGVyaW9uIEluYydzIFgzMTAwIFNlcmllcyAxMEdiRSBQQ0llIEkvTworICogdnhnZS1tYWluLmg6IERyaXZlciBmb3IgRXhhciBDb3JwJ3MgWDMxMDAgU2VyaWVzIDEwR2JFIFBDSWUgSS9PCiAgKiAgICAgICAgICAgICAgVmlydHVhbGl6ZWQgU2VydmVyIEFkYXB0ZXIuCi0gKiBDb3B5cmlnaHQoYykgMjAwMi0yMDA5IE5ldGVyaW9uIEluYy4KKyAqIENvcHlyaWdodChjKSAyMDAyLTIwMTAgRXhhciBDb3JwLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgVlhHRV9NQUlOX0gKICNkZWZpbmUgVlhHRV9NQUlOX0gKQEAgLTIxNywyMSArMjE3LDEzIEBACiB9OwogCiBzdHJ1Y3QgdnhnZV9maWZvIHsKLQlzdHJ1Y3QgbmV0X2RldmljZQkqbmRldjsKLQlzdHJ1Y3QgcGNpX2RldgkJKnBkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJc3RydWN0IF9fdnhnZV9od19maWZvICpoYW5kbGU7CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwogCi0JLyogVGhlIHZwYXRoIGlkIG1haW50YWluZWQgaW4gdGhlIGRyaXZlciAtCi0JICogMCB0byAnbWF4aW11bV92cGF0aHNfaW5fZnVuY3Rpb24gLSAxJwotCSAqLwotCWludCBkcml2ZXJfaWQ7CiAJaW50IHR4X3N0ZWVyaW5nX3R5cGU7CiAJaW50IGluZGljYXRlX21heF9wa3RzOwotCXNwaW5sb2NrX3QgdHhfbG9jazsKLQkvKiBmbGFnIHVzZWQgdG8gbWFpbnRhaW4gcXVldWUgc3RhdGUgd2hlbiBNVUxUSVEgaXMgbm90IGVuYWJsZWQgKi8KLSNkZWZpbmUgVlBBVEhfUVVFVUVfU1RBUlQgICAgICAgMAotI2RlZmluZSBWUEFUSF9RVUVVRV9TVE9QICAgICAgICAxCi0JaW50IHF1ZXVlX3N0YXRlOwogCiAJLyogVHggc3RhdHMgKi8KIAlzdHJ1Y3QgdnhnZV9maWZvX3N0YXRzIHN0YXRzOwpAQCAtMjc5LDcgKzI3MSw2IEBACiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIAogc3RydWN0IHZ4Z2VfdnBhdGggewotCiAJc3RydWN0IHZ4Z2VfZmlmbyBmaWZvOwogCXN0cnVjdCB2eGdlX3JpbmcgcmluZzsKIApAQCAtNDQ3LDE0ICs0MzgsNiBAQAogCiBlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfcmVzZXRfYWxsX3ZwYXRocyhzdHJ1Y3QgdnhnZWRldiAqdmRldik7CiAKLXZvaWQgdnhnZV9zdG9wX2FsbF90eF9xdWV1ZShzdHJ1Y3QgdnhnZWRldiAqdmRldik7Ci0KLXZvaWQgdnhnZV9zdG9wX3R4X3F1ZXVlKHN0cnVjdCB2eGdlX2ZpZm8gKmZpZm8pOwotCi12b2lkIHZ4Z2Vfc3RhcnRfYWxsX3R4X3F1ZXVlKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KTsKLQotdm9pZCB2eGdlX3dha2VfdHhfcXVldWUoc3RydWN0IHZ4Z2VfZmlmbyAqZmlmbywgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0KIGVudW0gdnhnZV9od19zdGF0dXMgdnhnZV9hZGRfbWFjX2FkZHIoc3RydWN0IHZ4Z2VkZXYgKnZkZXYsCiAJc3RydWN0IG1hY0luZm8gKm1hYyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1yZWcuaCBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1yZWcuaAppbmRleCA5YTBjZjhlLi4zZGQ1Yzk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLXJlZy5oCkBAIC03LDkgKzcsOSBAQAogICogc3lzdGVtIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwuCiAgKiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAqCi0gKiB2eGdlLXJlZy5oOiBEcml2ZXIgZm9yIE5ldGVyaW9uIEluYydzIFgzMTAwIFNlcmllcyAxMEdiRSBQQ0llIEkvTyBWaXJ0dWFsaXplZAorICogdnhnZS1yZWcuaDogRHJpdmVyIGZvciBFeGFyIENvcnAncyBYMzEwMCBTZXJpZXMgMTBHYkUgUENJZSBJL08gVmlydHVhbGl6ZWQKICAqICAgICAgICAgICAgIFNlcnZlciBBZGFwdGVyLgotICogQ29weXJpZ2h0KGMpIDIwMDItMjAwOSBOZXRlcmlvbiBJbmMuCisgKiBDb3B5cmlnaHQoYykgMjAwMi0yMDEwIEV4YXIgQ29ycC4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIFZYR0VfUkVHX0gKICNkZWZpbmUgVlhHRV9SRUdfSApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuYyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmMKaW5kZXggNmNjMWRkNy4uY2VkZjA4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuYworKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdHJhZmZpYy5jCkBAIC03LDkgKzcsOSBAQAogICogc3lzdGVtIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwuCiAgKiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAqCi0gKiB2eGdlLXRyYWZmaWMuYzogRHJpdmVyIGZvciBOZXRlcmlvbiBJbmMncyBYMzEwMCBTZXJpZXMgMTBHYkUgUENJZSBJL08KKyAqIHZ4Z2UtdHJhZmZpYy5jOiBEcml2ZXIgZm9yIEV4YXIgQ29ycCdzIFgzMTAwIFNlcmllcyAxMEdiRSBQQ0llIEkvTwogICogICAgICAgICAgICAgICAgIFZpcnR1YWxpemVkIFNlcnZlciBBZGFwdGVyLgotICogQ29weXJpZ2h0KGMpIDIwMDItMjAwOSBOZXRlcmlvbiBJbmMuCisgKiBDb3B5cmlnaHQoYykgMjAwMi0yMDEwIEV4YXIgQ29ycC4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KIApAQCAtMjQ2NiwxNCArMjQ2NiwxMiBAQAogICogdGhlIHNhbWUuCiAgKiBAZmlmbzogSGFuZGxlIHRvIHRoZSBmaWZvIG9iamVjdCB1c2VkIGZvciBub24gb2ZmbG9hZCBzZW5kCiAgKgotICogVGhlIGZ1bmN0aW9uCXBvbGxzIHRoZSBUeCBmb3IgdGhlIGNvbXBsZXRlZAlkZXNjcmlwdG9ycyBhbmQJY2FsbHMKKyAqIFRoZSBmdW5jdGlvbiBwb2xscyB0aGUgVHggZm9yIHRoZSBjb21wbGV0ZWQgZGVzY3JpcHRvcnMgYW5kIGNhbGxzCiAgKiB0aGUgZHJpdmVyIHZpYSBzdXBwbGllZCBjb21wbGV0aW9uIGNhbGxiYWNrLgogICoKICAqIFJldHVybnM6IFZYR0VfSFdfT0ssIGlmIHRoZSBwb2xsaW5nIGlzIGNvbXBsZXRlZCBzdWNjZXNzZnVsLgogICogVlhHRV9IV19DT01QTEVUSU9OU19SRU1BSU46IFRoZXJlIGFyZSBzdGlsbCBtb3JlIGNvbXBsZXRlZAogICogZGVzY3JpcHRvcnMgYXZhaWxhYmxlIHdoaWNoIGFyZSB5ZXQgdG8gYmUgcHJvY2Vzc2VkLgotICoKLSAqIFNlZSBhbHNvOiB2eGdlX2h3X3ZwYXRoX3BvbGxfdHgoKS4KICAqLwogZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX3BvbGxfdHgoc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvLAogCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqKipza2JfcHRyLCBpbnQgbnJfc2tiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuaCBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmgKaW5kZXggYzI1MmYzZC4uNmZhMDdkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuaAorKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdHJhZmZpYy5oCkBAIC03LDkgKzcsOSBAQAogICogc3lzdGVtIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwuCiAgKiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAqCi0gKiB2eGdlLXRyYWZmaWMuaDogRHJpdmVyIGZvciBOZXRlcmlvbiBJbmMncyBYMzEwMCBTZXJpZXMgMTBHYkUgUENJZSBJL08KKyAqIHZ4Z2UtdHJhZmZpYy5oOiBEcml2ZXIgZm9yIEV4YXIgQ29ycCdzIFgzMTAwIFNlcmllcyAxMEdiRSBQQ0llIEkvTwogICogICAgICAgICAgICAgICAgIFZpcnR1YWxpemVkIFNlcnZlciBBZGFwdGVyLgotICogQ29weXJpZ2h0KGMpIDIwMDItMjAwOSBOZXRlcmlvbiBJbmMuCisgKiBDb3B5cmlnaHQoYykgMjAwMi0yMDEwIEV4YXIgQ29ycC4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIFZYR0VfVFJBRkZJQ19ICiAjZGVmaW5lIFZYR0VfVFJBRkZJQ19ICmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdmVyc2lvbi5oIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLXZlcnNpb24uaAppbmRleCA1ZGE3YWIxLi41M2ZlZmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS12ZXJzaW9uLmgKQEAgLTcsMTcgKzcsMTYgQEAKICAqIHN5c3RlbSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMLgogICogU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhpcyBkaXN0cmlidXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgKgotICogdnhnZS12ZXJzaW9uLmg6IERyaXZlciBmb3IgTmV0ZXJpb24gSW5jJ3MgWDMxMDAgU2VyaWVzIDEwR2JFIFBDSWUgSS9PCisgKiB2eGdlLXZlcnNpb24uaDogRHJpdmVyIGZvciBFeGFyIENvcnAncyBYMzEwMCBTZXJpZXMgMTBHYkUgUENJZSBJL08KICAqICAgICAgICAgICAgICAgICBWaXJ0dWFsaXplZCBTZXJ2ZXIgQWRhcHRlci4KLSAqIENvcHlyaWdodChjKSAyMDAyLTIwMDkgTmV0ZXJpb24gSW5jLgorICogQ29weXJpZ2h0KGMpIDIwMDItMjAxMCBFeGFyIENvcnAuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBWWEdFX1ZFUlNJT05fSAotCiAjZGVmaW5lIFZYR0VfVkVSU0lPTl9ICiAKICNkZWZpbmUgVlhHRV9WRVJTSU9OX01BSk9SCSIyIgogI2RlZmluZSBWWEdFX1ZFUlNJT05fTUlOT1IJIjAiCi0jZGVmaW5lIFZYR0VfVkVSU0lPTl9GSVgJIjgiCi0jZGVmaW5lIFZYR0VfVkVSU0lPTl9CVUlMRAkiMjAxODIiCisjZGVmaW5lIFZYR0VfVkVSU0lPTl9GSVgJIjkiCisjZGVmaW5lIFZYR0VfVkVSU0lPTl9CVUlMRAkiMjA4NDAiCiAjZGVmaW5lIFZYR0VfVkVSU0lPTl9GT1IJImsiCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMgYi9kcml2ZXJzL25ldC93YW4vY29zYS5jCmluZGV4IGYwYmQ3MGYuLjA0YzZjZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYwpAQCAtODksNyArODksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CkBAIC0xNzQsNiArMTczLDcgQEAKICAqIENoYXJhY3RlciBkZXZpY2UgbWFqb3IgbnVtYmVyLiAxMTcgd2FzIGFsbG9jYXRlZCBmb3IgdXMuCiAgKiBUaGUgdmFsdWUgb2YgMCBtZWFucyB0byBhbGxvY2F0ZSBhIGZpcnN0IGZyZWUgb25lLgogICovCitzdGF0aWMgREVGSU5FX01VVEVYKGNvc2FfY2hhcmRldl9tdXRleCk7CiBzdGF0aWMgaW50IGNvc2FfbWFqb3IgPSAxMTc7CiAKIC8qCkBAIC05NDQsNyArOTQ0LDcgQEAKIAlpbnQgbjsKIAlpbnQgcmV0ID0gMDsKIAotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmY29zYV9jaGFyZGV2X211dGV4KTsKIAlpZiAoKG49aW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpPj5DQVJEX01JTk9SX0JJVFMpCiAJCT49IG5yX2NhcmRzKSB7CiAJCXJldCA9IC1FTk9ERVY7CkBAIC05NzYsNyArOTc2LDcgQEAKIAljaGFuLT5yeF9kb25lID0gY2hyZGV2X3J4X2RvbmU7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29zYS0+bG9jaywgZmxhZ3MpOwogb3V0OgotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJmNvc2FfY2hhcmRldl9tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTIxMiwxMCArMTIxMiwxMCBAQAogCXN0cnVjdCBjb3NhX2RhdGEgKmNvc2E7CiAJbG9uZyByZXQ7CiAKLQlsb2NrX2tlcm5lbCgpOworCW11dGV4X2xvY2soJmNvc2FfY2hhcmRldl9tdXRleCk7CiAJY29zYSA9IGNoYW5uZWwtPmNvc2E7CiAJcmV0ID0gY29zYV9pb2N0bF9jb21tb24oY29zYSwgY2hhbm5lbCwgY21kLCBhcmcpOwotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJmNvc2FfY2hhcmRldl9tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYyBiL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMKaW5kZXggZTA4N2I5YS4uYWQ3NzE5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYworKysgYi9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jCkBAIC0xNSw2ICsxNSw4IEBACiAgKiAgICAgIE1haW50YWluZXI6ICBLZXZpbiBDdXJ0aXMgIDxrZXZpbi5jdXJ0aXNAZmFyc2l0ZS5jby51az4KICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CkBAIC01MTEsMjEgKzUxMywxOSBAQAogICogc3VwcG9ydCB2YXJpYWJsZSBudW1iZXJzIG9mIG1hY3JvIHBhcmFtZXRlcnMuIFRoZSBpbnZlcnRlZCBpZiBwcmV2ZW50cyB1cwogICogZWF0aW5nIHNvbWVvbmUgZWxzZSdzIGVsc2UgY2xhdXNlLgogICovCi0jZGVmaW5lIGRiZyhGLGZtdCxBLi4uKSBpZiAoICEgKCBmc3RfZGVidWdfbWFzayAmIChGKSkpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrICggS0VSTl9ERUJVRyBGU1RfTkFNRSAiOiAiIGZtdCwgIyMgQSApCi0KKyNkZWZpbmUgZGJnKEYsIGZtdCwgYXJncy4uLikJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlpZiAoZnN0X2RlYnVnX21hc2sgJiAoRikpCQkJCVwKKwkJcHJpbnRrKEtFUk5fREVCVUcgcHJfZm10KGZtdCksICMjYXJncyk7CQlcCit9IHdoaWxlICgwKQogI2Vsc2UKLSNkZWZpbmUgZGJnKFguLi4pCQkvKiBOT1AgKi8KKyNkZWZpbmUgZGJnKEYsIGZtdCwgYXJncy4uLikJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlpZiAoMCkJCQkJCQkJXAorCQlwcmludGsoS0VSTl9ERUJVRyBwcl9mbXQoZm10KSwgIyNhcmdzKTsJCVwKK30gd2hpbGUgKDApCiAjZW5kaWYKIAotLyogICAgICBQcmludGluZyBzaG9ydCBjdXRzCi0gKi8KLSNkZWZpbmUgcHJpbnRrX2VycihmbXQsQS4uLikgICAgcHJpbnRrICggS0VSTl9FUlIgICAgIEZTVF9OQU1FICI6ICIgZm10LCAjIyBBICkKLSNkZWZpbmUgcHJpbnRrX3dhcm4oZm10LEEuLi4pICAgcHJpbnRrICggS0VSTl9XQVJOSU5HIEZTVF9OQU1FICI6ICIgZm10LCAjIyBBICkKLSNkZWZpbmUgcHJpbnRrX2luZm8oZm10LEEuLi4pICAgcHJpbnRrICggS0VSTl9JTkZPICAgIEZTVF9OQU1FICI6ICIgZm10LCAjIyBBICkKLQogLyoKICAqICAgICAgUENJIElEIGxvb2t1cCB0YWJsZQogICovCkBAIC05NjEsNyArOTYxLDcgQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCiAJCWlmICgrK3NhZmV0eSA+IDIwMDApIHsKLQkJCXByaW50a19lcnIoIk1haWxib3ggc2FmZXR5IHRpbWVvdXRcbiIpOworCQkJcHJfZXJyKCJNYWlsYm94IHNhZmV0eSB0aW1lb3V0XG4iKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTEyNDEsOCArMTI0MSw4IEBACiAJCSAqIFRoaXMgc2VlbXMgdG8gaGFwcGVuIG9uIHRoZSBURTEgaW50ZXJmYWNlIHNvbWV0aW1lcwogCQkgKiBzbyB0aHJvdyB0aGUgZnJhbWUgYXdheSBhbmQgbG9nIHRoZSBldmVudC4KIAkJICovCi0JCXByaW50a19lcnIoIkZyYW1lIHJlY2VpdmVkIHdpdGggMCBsZW5ndGguIENhcmQgJWQgUG9ydCAlZFxuIiwKLQkJCSAgIGNhcmQtPmNhcmRfbm8sIHBvcnQtPmluZGV4KTsKKwkJcHJfZXJyKCJGcmFtZSByZWNlaXZlZCB3aXRoIDAgbGVuZ3RoLiBDYXJkICVkIFBvcnQgJWRcbiIsCisJCSAgICAgICBjYXJkLT5jYXJkX25vLCBwb3J0LT5pbmRleCk7CiAJCS8qIFJldHVybiBkZXNjcmlwdG9yIHRvIGNhcmQgKi8KIAkJRlNUX1dSQihjYXJkLCByeERlc2NyUmluZ1twaV1bcnhwXS5iaXRzLCBETUFfT1dOKTsKIApAQCAtMTQ4Niw5ICsxNDg2LDggQEAKIAkgKi8KIAlkYmcoREJHX0lOVFIsICJpbnRyOiAlZCAlcFxuIiwgY2FyZC0+aXJxLCBjYXJkKTsKIAlpZiAoY2FyZC0+c3RhdGUgIT0gRlNUX1JVTk5JTkcpIHsKLQkJcHJpbnRrX2VycgotCQkgICAgKCJJbnRlcnJ1cHQgcmVjZWl2ZWQgZm9yIGNhcmQgJWQgaW4gYSBub24gcnVubmluZyBzdGF0ZSAoJWQpXG4iLAotCQkgICAgIGNhcmQtPmNhcmRfbm8sIGNhcmQtPnN0YXRlKTsKKwkJcHJfZXJyKCJJbnRlcnJ1cHQgcmVjZWl2ZWQgZm9yIGNhcmQgJWQgaW4gYSBub24gcnVubmluZyBzdGF0ZSAoJWQpXG4iLAorCQkgICAgICAgY2FyZC0+Y2FyZF9ubywgY2FyZC0+c3RhdGUpOwogCiAJCS8qIAogCQkgKiBJdCBpcyBwb3NzaWJsZSB0byByZWFsbHkgYmUgcnVubmluZywgaS5lLiB3ZSBoYXZlIHJlLWxvYWRlZApAQCAtMTYxNCw4ICsxNjEzLDcgQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlwcmludGtfZXJyKCJpbnRyOiB1bmtub3duIGNhcmQgZXZlbnQgJWQuIGlnbm9yZWRcbiIsCi0JCQkJICAgZXZlbnQpOworCQkJcHJfZXJyKCJpbnRyOiB1bmtub3duIGNhcmQgZXZlbnQgJWQuIGlnbm9yZWRcbiIsIGV2ZW50KTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTE2MzcsMTMgKzE2MzUsMTMgQEAKIAogCS8qIENoZWNrIHN0cnVjdHVyZSB2ZXJzaW9uIGFuZCBlbmQgbWFya2VyICovCiAJaWYgKEZTVF9SRFcoY2FyZCwgc21jVmVyc2lvbikgIT0gU01DX1ZFUlNJT04pIHsKLQkJcHJpbnRrX2VycigiQmFkIHNoYXJlZCBtZW1vcnkgdmVyc2lvbiAlZCBleHBlY3RlZCAlZFxuIiwKLQkJCSAgIEZTVF9SRFcoY2FyZCwgc21jVmVyc2lvbiksIFNNQ19WRVJTSU9OKTsKKwkJcHJfZXJyKCJCYWQgc2hhcmVkIG1lbW9yeSB2ZXJzaW9uICVkIGV4cGVjdGVkICVkXG4iLAorCQkgICAgICAgRlNUX1JEVyhjYXJkLCBzbWNWZXJzaW9uKSwgU01DX1ZFUlNJT04pOwogCQljYXJkLT5zdGF0ZSA9IEZTVF9CQURWRVJTSU9OOwogCQlyZXR1cm47CiAJfQogCWlmIChGU1RfUkRMKGNhcmQsIGVuZE9mU21jU2lnbmF0dXJlKSAhPSBFTkRfU0lHKSB7Ci0JCXByaW50a19lcnIoIk1pc3Npbmcgc2hhcmVkIG1lbW9yeSBzaWduYXR1cmVcbiIpOworCQlwcl9lcnIoIk1pc3Npbmcgc2hhcmVkIG1lbW9yeSBzaWduYXR1cmVcbiIpOwogCQljYXJkLT5zdGF0ZSA9IEZTVF9CQURWRVJTSU9OOwogCQlyZXR1cm47CiAJfQpAQCAtMTY1MSwxMSArMTY0OSwxMSBAQAogCWlmICgoaSA9IEZTVF9SREIoY2FyZCwgdGFza1N0YXR1cykpID09IDB4MDEpIHsKIAkJY2FyZC0+c3RhdGUgPSBGU1RfUlVOTklORzsKIAl9IGVsc2UgaWYgKGkgPT0gMHhGRikgewotCQlwcmludGtfZXJyKCJGaXJtd2FyZSBpbml0aWFsaXNhdGlvbiBmYWlsZWQuIENhcmQgaGFsdGVkXG4iKTsKKwkJcHJfZXJyKCJGaXJtd2FyZSBpbml0aWFsaXNhdGlvbiBmYWlsZWQuIENhcmQgaGFsdGVkXG4iKTsKIAkJY2FyZC0+c3RhdGUgPSBGU1RfSEFMVEVEOwogCQlyZXR1cm47CiAJfSBlbHNlIGlmIChpICE9IDB4MDApIHsKLQkJcHJpbnRrX2VycigiVW5rbm93biBmaXJtd2FyZSBzdGF0dXMgMHgleFxuIiwgaSk7CisJCXByX2VycigiVW5rbm93biBmaXJtd2FyZSBzdGF0dXMgMHgleFxuIiwgaSk7CiAJCWNhcmQtPnN0YXRlID0gRlNUX0hBTFRFRDsKIAkJcmV0dXJuOwogCX0KQEAgLTE2NjUsOSArMTY2MywxMCBAQAogCSAqIGV4aXN0aW5nIGZpcm13YXJlIGV0YyBzbyB3ZSBqdXN0IHJlcG9ydCBpdCBmb3IgdGhlIG1vbWVudC4KIAkgKi8KIAlpZiAoRlNUX1JETChjYXJkLCBudW1iZXJPZlBvcnRzKSAhPSBjYXJkLT5ucG9ydHMpIHsKLQkJcHJpbnRrX3dhcm4oIlBvcnQgY291bnQgbWlzbWF0Y2ggb24gY2FyZCAlZC4iCi0JCQkgICAgIiBGaXJtd2FyZSB0aGlua3MgJWQgd2Ugc2F5ICVkXG4iLCBjYXJkLT5jYXJkX25vLAotCQkJICAgIEZTVF9SREwoY2FyZCwgbnVtYmVyT2ZQb3J0cyksIGNhcmQtPm5wb3J0cyk7CisJCXByX3dhcm5pbmcoIlBvcnQgY291bnQgbWlzbWF0Y2ggb24gY2FyZCAlZC4gIgorCQkJICAgIkZpcm13YXJlIHRoaW5rcyAlZCB3ZSBzYXkgJWRcbiIsCisJCQkgICBjYXJkLT5jYXJkX25vLAorCQkJICAgRlNUX1JETChjYXJkLCBudW1iZXJPZlBvcnRzKSwgY2FyZC0+bnBvcnRzKTsKIAl9CiB9CiAKQEAgLTIwMzgsMTYgKzIwMzcsMTAgQEAKIAogCQkvKiBOb3cgY29weSB0aGUgZGF0YSB0byB0aGUgY2FyZC4gKi8KIAotCQlidWYgPSBrbWFsbG9jKHdydGhkci5zaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFidWYpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQlpZiAoY29weV9mcm9tX3VzZXIoYnVmLAotCQkJCSAgIGlmci0+aWZyX2RhdGEgKyBzaXplb2YgKHN0cnVjdCBmc3Rpb2Nfd3JpdGUpLAotCQkJCSAgIHdydGhkci5zaXplKSkgewotCQkJa2ZyZWUoYnVmKTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9CisJCWJ1ZiA9IG1lbWR1cF91c2VyKGlmci0+aWZyX2RhdGEgKyBzaXplb2Yoc3RydWN0IGZzdGlvY193cml0ZSksCisJCQkJICB3cnRoZHIuc2l6ZSk7CisJCWlmIChJU19FUlIoYnVmKSkKKwkJCXJldHVybiBQVFJfRVJSKGJ1Zik7CiAKIAkJbWVtY3B5X3RvaW8oY2FyZC0+bWVtICsgd3J0aGRyLm9mZnNldCwgYnVmLCB3cnRoZHIuc2l6ZSk7CiAJCWtmcmVlKGJ1Zik7CkBAIC0yMDk2LDkgKzIwODksOCBAQAogCQkgKi8KIAogCQlpZiAoY2FyZC0+c3RhdGUgIT0gRlNUX1JVTk5JTkcpIHsKLQkJCXByaW50a19lcnIKLQkJCSAgICAoIkF0dGVtcHQgdG8gY29uZmlndXJlIGNhcmQgJWQgaW4gbm9uLXJ1bm5pbmcgc3RhdGUgKCVkKVxuIiwKLQkJCSAgICAgY2FyZC0+Y2FyZF9ubywgY2FyZC0+c3RhdGUpOworCQkJcHJfZXJyKCJBdHRlbXB0IHRvIGNvbmZpZ3VyZSBjYXJkICVkIGluIG5vbi1ydW5uaW5nIHN0YXRlICglZClcbiIsCisJCQkgICAgICAgY2FyZC0+Y2FyZF9ubywgY2FyZC0+c3RhdGUpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZpbmZvLCBpZnItPmlmcl9kYXRhLCBzaXplb2YgKGluZm8pKSkgewpAQCAtMjM5MCw4ICsyMzgyLDggQEAKICAgICAgICAgICAgICAgICBlcnIgPSByZWdpc3Rlcl9oZGxjX2RldmljZShjYXJkLT5wb3J0c1tpXS5kZXYpOwogICAgICAgICAgICAgICAgIGlmIChlcnIgPCAwKSB7CiAJCQlpbnQgajsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50a19lcnIgKCJDYW5ub3QgcmVnaXN0ZXIgSERMQyBkZXZpY2UgZm9yIHBvcnQgJWQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIChlcnJubyAlZClcbiIsIGksIC1lcnIgKTsKKwkJCXByX2VycigiQ2Fubm90IHJlZ2lzdGVyIEhETEMgZGV2aWNlIGZvciBwb3J0ICVkIChlcnJubyAlZClcbiIsCisJCQkgICAgICAgaSwgLWVycik7CiAJCQlmb3IgKGogPSBpOyBqIDwgY2FyZC0+bnBvcnRzOyBqKyspIHsKIAkJCQlmcmVlX25ldGRldihjYXJkLT5wb3J0c1tqXS5kZXYpOwogCQkJCWNhcmQtPnBvcnRzW2pdLmRldiA9IE5VTEw7CkBAIC0yNDAxLDEwICsyMzkzLDEwIEBACiAgICAgICAgICAgICAgICAgfQogCX0KIAotCXByaW50a19pbmZvKCIlcy0lczogJXMgSVJRJWQsICVkIHBvcnRzXG4iLAotCSAgICAgICBwb3J0X3RvX2RldigmY2FyZC0+cG9ydHNbMF0pLT5uYW1lLAotCSAgICAgICBwb3J0X3RvX2RldigmY2FyZC0+cG9ydHNbY2FyZC0+bnBvcnRzIC0gMV0pLT5uYW1lLAotCSAgICAgICB0eXBlX3N0cmluZ3NbY2FyZC0+dHlwZV0sIGNhcmQtPmlycSwgY2FyZC0+bnBvcnRzKTsKKwlwcl9pbmZvKCIlcy0lczogJXMgSVJRJWQsICVkIHBvcnRzXG4iLAorCQlwb3J0X3RvX2RldigmY2FyZC0+cG9ydHNbMF0pLT5uYW1lLAorCQlwb3J0X3RvX2RldigmY2FyZC0+cG9ydHNbY2FyZC0+bnBvcnRzIC0gMV0pLT5uYW1lLAorCQl0eXBlX3N0cmluZ3NbY2FyZC0+dHlwZV0sIGNhcmQtPmlycSwgY2FyZC0+bnBvcnRzKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBmc3Rfb3BzID0gewpAQCAtMjQyMywxOSArMjQxNSwxNyBAQAogc3RhdGljIGludCBfX2RldmluaXQKIGZzdF9hZGRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewotCXN0YXRpYyBpbnQgZmlyc3R0aW1lX2RvbmUgPSAwOwogCXN0YXRpYyBpbnQgbm9fb2ZfY2FyZHNfYWRkZWQgPSAwOwogCXN0cnVjdCBmc3RfY2FyZF9pbmZvICpjYXJkOwogCWludCBlcnIgPSAwOwogCWludCBpOwogCi0JaWYgKCFmaXJzdHRpbWVfZG9uZSkgewotCQlwcmludGtfaW5mbygiRmFyU3luYyBXQU4gZHJpdmVyICIgRlNUX1VTRVJfVkVSU0lPTgotCQkgICAgICAgIiAoYykgMjAwMS0yMDA0IEZhclNpdGUgQ29tbXVuaWNhdGlvbnMgTHRkLlxuIik7Ci0JCWZpcnN0dGltZV9kb25lID0gMTsKLQkJZGJnKERCR19BU1MsICJUaGUgdmFsdWUgb2YgZGVidWcgbWFzayBpcyAleFxuIiwgZnN0X2RlYnVnX21hc2spOwotCX0KLQorCXByaW50a19vbmNlKEtFUk5fSU5GTworCQkgICAgcHJfZm10KCJGYXJTeW5jIFdBTiBkcml2ZXIgIiBGU1RfVVNFUl9WRVJTSU9OCisJCQkgICAiIChjKSAyMDAxLTIwMDQgRmFyU2l0ZSBDb21tdW5pY2F0aW9ucyBMdGQuXG4iKSk7CisjaWYgRlNUX0RFQlVHCisJZGJnKERCR19BU1MsICJUaGUgdmFsdWUgb2YgZGVidWcgbWFzayBpcyAleFxuIiwgZnN0X2RlYnVnX21hc2spOworI2VuZGlmCiAJLyoKIAkgKiBXZSBhcmUgZ29pbmcgdG8gYmUgY2xldmVyIGFuZCBhbGxvdyBjZXJ0YWluIGNhcmRzIG5vdCB0byBiZQogCSAqIGNvbmZpZ3VyZWQuICBBbiBleGNsdWRlIGxpc3QgY2FuIGJlIHByb3ZpZGVkIGluIC9ldGMvbW9kdWxlcy5jb25mCkBAIC0yNDQ3LDggKzI0MzcsOCBAQAogCQkgKi8KIAkJZm9yIChpID0gMDsgaSA8IGZzdF9leGNsdWRlZF9jYXJkczsgaSsrKSB7CiAJCQlpZiAoKHBkZXYtPmRldmZuKSA+PiAzID09IGZzdF9leGNsdWRlZF9saXN0W2ldKSB7Ci0JCQkJcHJpbnRrX2luZm8oIkZhclN5bmMgUENJIGRldmljZSAlZCBub3QgYXNzaWduZWRcbiIsCi0JCQkJICAgICAgIChwZGV2LT5kZXZmbikgPj4gMyk7CisJCQkJcHJfaW5mbygiRmFyU3luYyBQQ0kgZGV2aWNlICVkIG5vdCBhc3NpZ25lZFxuIiwKKwkJCQkJKHBkZXYtPmRldmZuKSA+PiAzKTsKIAkJCQlyZXR1cm4gLUVCVVNZOwogCQkJfQogCQl9CkBAIC0yNDU3LDIwICsyNDQ3LDE5IEBACiAJLyogQWxsb2NhdGUgZHJpdmVyIHByaXZhdGUgZGF0YSAqLwogCWNhcmQgPSBremFsbG9jKHNpemVvZiAoc3RydWN0IGZzdF9jYXJkX2luZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2FyZCA9PSBOVUxMKSB7Ci0JCXByaW50a19lcnIoIkZhclN5bmMgY2FyZCBmb3VuZCBidXQgaW5zdWZmaWNpZW50IG1lbW9yeSBmb3IiCi0JCQkgICAiIGRyaXZlciBzdG9yYWdlXG4iKTsKKwkJcHJfZXJyKCJGYXJTeW5jIGNhcmQgZm91bmQgYnV0IGluc3VmZmljaWVudCBtZW1vcnkgZm9yIGRyaXZlciBzdG9yYWdlXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJLyogVHJ5IHRvIGVuYWJsZSB0aGUgZGV2aWNlICovCiAJaWYgKChlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgIT0gMCkgewotCQlwcmludGtfZXJyKCJGYWlsZWQgdG8gZW5hYmxlIGNhcmQuIEVyciAlZFxuIiwgLWVycik7CisJCXByX2VycigiRmFpbGVkIHRvIGVuYWJsZSBjYXJkLiBFcnIgJWRcbiIsIC1lcnIpOwogCQlrZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKIAlpZiAoKGVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgIkZhclN5bmMiKSkgIT0wKSB7Ci0JICAgICAgICBwcmludGtfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgcmVnaW9ucy4gRXJyICVkXG4iLCAtZXJyKTsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgcmVnaW9ucy4gRXJyICVkXG4iLCAtZXJyKTsKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCQlrZnJlZShjYXJkKTsKIAkgICAgICAgIHJldHVybiBlcnI7CkBAIC0yNDgxLDE0ICsyNDcwLDE0IEBACiAJY2FyZC0+cGh5c19tZW0gPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMik7CiAJY2FyZC0+cGh5c19jdGxtZW0gPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMyk7CiAJaWYgKChjYXJkLT5tZW0gPSBpb3JlbWFwKGNhcmQtPnBoeXNfbWVtLCBGU1RfTUVNU0laRSkpID09IE5VTEwpIHsKLQkJcHJpbnRrX2VycigiUGh5c2ljYWwgbWVtb3J5IHJlbWFwIGZhaWxlZFxuIik7CisJCXByX2VycigiUGh5c2ljYWwgbWVtb3J5IHJlbWFwIGZhaWxlZFxuIik7CiAJCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAkJa2ZyZWUoY2FyZCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlpZiAoKGNhcmQtPmN0bG1lbSA9IGlvcmVtYXAoY2FyZC0+cGh5c19jdGxtZW0sIDB4MTApKSA9PSBOVUxMKSB7Ci0JCXByaW50a19lcnIoIkNvbnRyb2wgbWVtb3J5IHJlbWFwIGZhaWxlZFxuIik7CisJCXByX2VycigiQ29udHJvbCBtZW1vcnkgcmVtYXAgZmFpbGVkXG4iKTsKIAkJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCQlrZnJlZShjYXJkKTsKQEAgLTI0OTgsNyArMjQ4Nyw3IEBACiAKIAkvKiBSZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIgKi8KIAlpZiAocmVxdWVzdF9pcnEocGRldi0+aXJxLCBmc3RfaW50ciwgSVJRRl9TSEFSRUQsIEZTVF9ERVZfTkFNRSwgY2FyZCkpIHsKLQkJcHJpbnRrX2VycigiVW5hYmxlIHRvIHJlZ2lzdGVyIGludGVycnVwdCAlZFxuIiwgY2FyZC0+aXJxKTsKKwkJcHJfZXJyKCJVbmFibGUgdG8gcmVnaXN0ZXIgaW50ZXJydXB0ICVkXG4iLCBjYXJkLT5pcnEpOwogCQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJCWlvdW5tYXAoY2FyZC0+Y3RsbWVtKTsKQEAgLTI1MjksNyArMjUxOCw3IEBACiAJCWlmICghZGV2KSB7CiAJCQl3aGlsZSAoaS0tKQogCQkJCWZyZWVfbmV0ZGV2KGNhcmQtPnBvcnRzW2ldLmRldik7Ci0JCQlwcmludGtfZXJyICgiRmFyU3luYzogb3V0IG9mIG1lbW9yeVxuIik7CisJCQlwcl9lcnIoIkZhclN5bmM6IG91dCBvZiBtZW1vcnlcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgZnJlZV9pcnEoY2FyZC0+aXJxLCBjYXJkKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CkBAIC0yNTkzLDcgKzI1ODIsNyBAQAogCQkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQoY2FyZC0+ZGV2aWNlLCBGU1RfTUFYX01UVSwKIAkJCQkJICZjYXJkLT5yeF9kbWFfaGFuZGxlX2NhcmQpOwogCQlpZiAoY2FyZC0+cnhfZG1hX2hhbmRsZV9ob3N0ID09IE5VTEwpIHsKLQkJCXByaW50a19lcnIoIkNvdWxkIG5vdCBhbGxvY2F0ZSByeCBkbWEgYnVmZmVyXG4iKTsKKwkJCXByX2VycigiQ291bGQgbm90IGFsbG9jYXRlIHJ4IGRtYSBidWZmZXJcbiIpOwogCQkJZnN0X2Rpc2FibGVfaW50cihjYXJkKTsKIAkJCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CkBAIC0yNjA2LDcgKzI1OTUsNyBAQAogCQkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQoY2FyZC0+ZGV2aWNlLCBGU1RfTUFYX01UVSwKIAkJCQkJICZjYXJkLT50eF9kbWFfaGFuZGxlX2NhcmQpOwogCQlpZiAoY2FyZC0+dHhfZG1hX2hhbmRsZV9ob3N0ID09IE5VTEwpIHsKLQkJCXByaW50a19lcnIoIkNvdWxkIG5vdCBhbGxvY2F0ZSB0eCBkbWEgYnVmZmVyXG4iKTsKKwkJCXByX2VycigiQ291bGQgbm90IGFsbG9jYXRlIHR4IGRtYSBidWZmZXJcbiIpOwogCQkJZnN0X2Rpc2FibGVfaW50cihjYXJkKTsKIAkJCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CkBAIC0yNjc4LDcgKzI2NjcsNyBAQAogc3RhdGljIHZvaWQgX19leGl0CiBmc3RfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKLQlwcmludGtfaW5mbygiRmFyU3luYyBXQU4gZHJpdmVyIHVubG9hZGluZ1xuIik7CisJcHJfaW5mbygiRmFyU3luYyBXQU4gZHJpdmVyIHVubG9hZGluZ1xuIik7CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZmc3RfZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkNjQ1NzAuaCBiL2RyaXZlcnMvbmV0L3dhbi9oZDY0NTcwLmgKaW5kZXggMzgzOTY2Mi4uZTRmNTM5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkNjQ1NzAuaAorKysgYi9kcml2ZXJzL25ldC93YW4vaGQ2NDU3MC5oCkBAIC0xNTMsNyArMTUzLDcgQEAKIAl1MTYgbGVuOwkJLyogRGF0YSBMZW5ndGggKi8KIAl1OCBzdGF0OwkJLyogU3RhdHVzICovCiAJdTggdW51c2VkOwkJLyogcGFkcyB0byAyLWJ5dGUgYm91bmRhcnkgKi8KLX1fX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcGt0X2Rlc2M7Cit9X19wYWNrZWQgcGt0X2Rlc2M7CiAKIAogLyogUGFja2V0IERlc2NyaXB0b3IgU3RhdHVzIGJpdHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2Npc2NvLmMgYi9kcml2ZXJzL25ldC93YW4vaGRsY19jaXNjby5jCmluZGV4IGVlNzA4M2YuLmIzOGZmYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2Npc2NvLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfY2lzY28uYwpAQCAtMzYsNyArMzYsNyBAQAogCXU4IGFkZHJlc3M7CiAJdTggY29udHJvbDsKIAlfX2JlMTYgcHJvdG9jb2w7Ci19X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfV9fcGFja2VkOwogCiAKIHN0cnVjdCBjaXNjb19wYWNrZXQgewpAQCAtNDUsNyArNDUsNyBAQAogCV9fYmUzMiBwYXIyOwogCV9fYmUxNiByZWw7CQkvKiByZWxpYWJpbGl0eSAqLwogCV9fYmUzMiB0aW1lOwotfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK31fX3BhY2tlZDsKICNkZWZpbmUJQ0lTQ09fUEFDS0VUX0xFTgkxOAogI2RlZmluZQlDSVNDT19CSUdfUEFDS0VUX0xFTgkyMAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaGRsY19mci5jIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfZnIuYwppbmRleCAwZTUyOTkzLi4wZWRiNTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY19mci5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2ZyLmMKQEAgLTExMiw3ICsxMTIsNyBAQAogCXVuc2lnbmVkIGRlOgkxOwogCXVuc2lnbmVkIGVhMjoJMTsKICNlbmRpZgotfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBmcl9oZHI7Cit9X19wYWNrZWQgZnJfaGRyOwogCiAKIHR5cGVkZWYgc3RydWN0IHB2Y19kZXZpY2Vfc3RydWN0IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9zZGxhLmMgYi9kcml2ZXJzL25ldC93YW4vc2RsYS5jCmluZGV4IDQzYWU2ZjQuLmY0MTI1ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9zZGxhLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3NkbGEuYwpAQCAtMzMwLDcgKzMzMCw3IEBACiB7CiAJc2hvcnQgZGxjaTsKIAljaGFyICBmbGFnczsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgX2ZyYWRfc3RhdCAKIHsKQEAgLTEyMTEsMTQgKzEyMTEsOSBAQAogCX0KIAllbHNlCiAJewotCQl0ZW1wID0ga21hbGxvYyhtZW0ubGVuLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF0ZW1wKQotCQkJcmV0dXJuKC1FTk9NRU0pOwotCQlpZihjb3B5X2Zyb21fdXNlcih0ZW1wLCBtZW0uZGF0YSwgbWVtLmxlbikpCi0JCXsKLQkJCWtmcmVlKHRlbXApOwotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KKwkJdGVtcCA9IG1lbWR1cF91c2VyKG1lbS5kYXRhLCBtZW0ubGVuKTsKKwkJaWYgKElTX0VSUih0ZW1wKSkKKwkJCXJldHVybiBQVFJfRVJSKHRlbXApOwogCQlzZGxhX3dyaXRlKGRldiwgbWVtLmFkZHIsIHRlbXAsIG1lbS5sZW4pOwogCQlrZnJlZSh0ZW1wKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93ZC5jIGIvZHJpdmVycy9uZXQvd2QuYwppbmRleCA3NDZhNWVlLi5lYjcyYzY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93ZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dkLmMKQEAgLTM1OCw4ICszNTgsMTAgQEAKICNlbmRpZgogCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JaWYgKGVycikKKwlpZiAoZXJyKSB7CiAJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCQlpb3VubWFwKGVpX3N0YXR1cy5tZW0pOworCX0KIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vY29udHJvbC5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2NvbnRyb2wuYwppbmRleCBkODZlOGYzLi45ZmIwMzA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vY29udHJvbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9jb250cm9sLmMKQEAgLTUwLDcgKzUwLDcgQEAKICAqCiAgKiBST0FETUFQCiAgKgotICogaTI0MDBtX2Rldl9pbml0YWxpemUoKSAgICAgICBDYWxsZWQgYnkgaTI0MDBtX2Rldl9zdGFydCgpCisgKiBpMjQwMG1fZGV2X2luaXRpYWxpemUoKSAgICAgICBDYWxsZWQgYnkgaTI0MDBtX2Rldl9zdGFydCgpCiAgKiAgIGkyNDAwbV9zZXRfaW5pdF9jb25maWcoKQogICogICBpMjQwMG1fY21kX2dldF9zdGF0ZSgpCiAgKiBpMjQwMG1fZGV2X3NodXRkb3duKCkgICAgICAgIENhbGxlZCBieSBpMjQwMG1fZGV2X3N0b3AoKQpAQCAtODQ4LDcgKzg0OCw3IEBACiAJc3RydWN0IGkyNDAwbV9sM2w0X2hkciBoZHI7CiAJc3RydWN0IGkyNDAwbV90bHZfaGRyIHRsdjsKIAlfX2xlMzIgdmFsOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9mdy5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2Z3LmMKaW5kZXggMTE0OTEzNS4uOGI1NWE1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2Z3LmMKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2Z3LmMKQEAgLTY1MSw3ICs2NTEsNyBAQAogCXN0cnVjdCB7CiAJCXN0cnVjdCBpMjQwMG1fYm9vdHJvbV9oZWFkZXIgY21kOwogCQl1OCBjbWRfcGF5bG9hZFtjaHVua19sZW5dOwotCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgKmJ1ZjsKKwl9IF9fcGFja2VkICpidWY7CiAJc3RydWN0IGkyNDAwbV9ib290cm9tX2hlYWRlciBhY2s7CiAKIAlkX2Zuc3RhcnQoNSwgZGV2LCAiKGkyNDAwbSAlcCBjaHVuayAlcCBfX2NodW5rX2xlbiAlenUgYWRkciAweCUwOGx4ICIKQEAgLTc5NCw3ICs3OTQsNyBAQAogCXN0cnVjdCB7CiAJCXN0cnVjdCBpMjQwMG1fYm9vdHJvbV9oZWFkZXIgY21kOwogCQl1OCBjbWRfcGxbMF07Ci0JfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSAqY21kX2J1ZjsKKwl9IF9fcGFja2VkICpjbWRfYnVmOwogCXNpemVfdCBzaWduYXR1cmVfYmxvY2tfb2Zmc2V0LCBzaWduYXR1cmVfYmxvY2tfc2l6ZTsKIAogCWRfZm5zdGFydCgzLCBkZXYsICJvZmZzZXQgJXp1XG4iLCBvZmZzZXQpOwpAQCAtMTAyOSw3ICsxMDI5LDcgQEAKIAlzdHJ1Y3QgewogCQlzdHJ1Y3QgaTI0MDBtX2Jvb3Ryb21faGVhZGVyIGFjazsKIAkJdTggYWNrX3BsWzE2XTsKLQl9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGFja19idWY7CisJfSBfX3BhY2tlZCBhY2tfYnVmOwogCiAJZF9mbnN0YXJ0KDUsIGRldiwgIihpMjQwMG0gJXApXG4iLCBpMjQwMG0pOwogCWNtZCA9IGkyNDAwbS0+Ym1fY21kX2J1ZjsKQEAgLTExMTUsNyArMTExNSw3IEBACiAJc3RydWN0IHsKIAkJc3RydWN0IGkyNDAwbV9ib290cm9tX2hlYWRlciBjbWQ7CiAJCXN0cnVjdCBpMjQwMG1fYmNmX2hkciBjbWRfcGw7Ci0JfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSAqY21kX2J1ZjsKKwl9IF9fcGFja2VkICpjbWRfYnVmOwogCXN0cnVjdCBpMjQwMG1fYm9vdHJvbV9oZWFkZXIgYWNrOwogCiAJZF9mbnN0YXJ0KDUsIGRldiwgIihpMjQwMG0gJXAgYmNmX2hkciAlcClcbiIsIGkyNDAwbSwgYmNmX2hkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vaTI0MDBtLXVzYi5oIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2kyNDAwbS11c2IuaAppbmRleCAyZDdjOTZkLi5lYjgwMjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vaTI0MDBtLXVzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9pMjQwMG0tdXNiLmgKQEAgLTE1Miw2ICsxNTIsNyBAQAogCS8qIERldmljZSBJRHMgKi8KIAlVU0JfREVWSUNFX0lEX0k2MDUwID0gMHgwMTg2LAogCVVTQl9ERVZJQ0VfSURfSTYwNTBfMiA9IDB4MDE4OCwKKwlVU0JfREVWSUNFX0lEX0k2MjUwID0gMHgwMTg3LAogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vb3AtcmZraWxsLmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vb3AtcmZraWxsLmMKaW5kZXggMDM1ZTRjZi4uOWUwMmI5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL29wLXJma2lsbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9vcC1yZmtpbGwuYwpAQCAtOTEsNyArOTEsNyBAQAogCXN0cnVjdCB7CiAJCXN0cnVjdCBpMjQwMG1fbDNsNF9oZHIgaGRyOwogCQlzdHJ1Y3QgaTI0MDBtX3Rsdl9yZl9vcGVyYXRpb24gc3dfcmY7Ci0JfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSAqY21kOworCX0gX19wYWNrZWQgKmNtZDsKIAljaGFyIHN0cmVyclszMl07CiAKIAlkX2Zuc3RhcnQoNCwgZGV2LCAiKHdpbWF4X2RldiAlcCBzdGF0ZSAlZClcbiIsIHdpbWF4X2Rldiwgc3RhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi5jCmluZGV4IDBkNTA4MWQuLmQzMzY1YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2IuYworKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vdXNiLmMKQEAgLTQ5MSw2ICs0OTEsNyBAQAogCXN3aXRjaCAoaWQtPmlkUHJvZHVjdCkgewogCWNhc2UgVVNCX0RFVklDRV9JRF9JNjA1MDoKIAljYXNlIFVTQl9ERVZJQ0VfSURfSTYwNTBfMjoKKwljYXNlIFVTQl9ERVZJQ0VfSURfSTYyNTA6CiAJCWkyNDAwbXUtPmk2MDUwID0gMTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTczOSw2ICs3NDAsNyBAQAogc3RydWN0IHVzYl9kZXZpY2VfaWQgaTI0MDBtdV9pZF90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRSgweDgwODYsIFVTQl9ERVZJQ0VfSURfSTYwNTApIH0sCiAJeyBVU0JfREVWSUNFKDB4ODA4NiwgVVNCX0RFVklDRV9JRF9JNjA1MF8yKSB9LAorCXsgVVNCX0RFVklDRSgweDgwODYsIFVTQl9ERVZJQ0VfSURfSTYyNTApIH0sCiAJeyBVU0JfREVWSUNFKDB4ODA4NiwgMHgwMTgxKSB9LAogCXsgVVNCX0RFVklDRSgweDgwODYsIDB4MTQwMykgfSwKIAl7IFVTQl9ERVZJQ0UoMHg4MDg2LCAweDE0MDUpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hZG04MjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hZG04MjExLmMKaW5kZXggODgwYWQ5ZC4uYTEwNTA4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWRtODIxMS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FkbTgyMTEuYwpAQCAtMzczLDggKzM3Myw4IEBACiAJCXBrdGxlbiA9IHN0YXR1cyAmIFJERVMwX1NUQVRVU19GTDsKIAkJaWYgKHBrdGxlbiA+IFJYX1BLVF9TSVpFKSB7CiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZnJhbWUgdG9vIGxvbmcgKCVkKVxuIiwKLQkJCQkgICAgICAgd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgcGt0bGVuKTsKKwkJCQl3aXBoeV9kZWJ1ZyhkZXYtPndpcGh5LCAiZnJhbWUgdG9vIGxvbmcgKCVkKVxuIiwKKwkJCQkJICAgIHBrdGxlbik7CiAJCQlwa3RsZW4gPSBSWF9QS1RfU0laRTsKIAkJfQogCkBAIC00NTQsMTAgKzQ1NCwxMCBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgYWRtODIxMV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotI2RlZmluZSBBRE04MjExX0lOVCh4KQkJCQkJCQkgICBcCi1kbyB7CQkJCQkJCQkJICAgXAotCWlmICh1bmxpa2VseShzdHNyICYgQURNODIxMV9TVFNSXyAjIyB4KSkJCQkgICBcCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogIiAjeCAiXG4iLCB3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsgXAorI2RlZmluZSBBRE04MjExX0lOVCh4KQkJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlpZiAodW5saWtlbHkoc3RzciAmIEFETTgyMTFfU1RTUl8gIyMgeCkpCQlcCisJCXdpcGh5X2RlYnVnKGRldi0+d2lwaHksICIlc1xuIiwgI3gpOwkJXAogfSB3aGlsZSAoMCkKIAogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IGRldl9pZDsKQEAgLTU3MCw5ICs1NzAsOSBAQAogCX0KIAogCWlmICh0aW1lb3V0ID09IDApIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhZG04MjExX3dyaXRlX2JicCglZCwlZCkgZmFpbGVkIgotCQkgICAgICAgIiBwcmV3cml0ZSAocmVnPTB4JTA4eClcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKGRldi0+d2lwaHkpLCBhZGRyLCBkYXRhLCByZWcpOworCQl3aXBoeV9kZWJ1ZyhkZXYtPndpcGh5LAorCQkJICAgICJhZG04MjExX3dyaXRlX2JicCglZCwlZCkgZmFpbGVkIHByZXdyaXRlIChyZWc9MHglMDh4KVxuIiwKKwkJCSAgICBhZGRyLCBkYXRhLCByZWcpOwogCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAl9CiAKQEAgLTYwNSw5ICs2MDUsOSBAQAogCWlmICh0aW1lb3V0ID09IDApIHsKIAkJQURNODIxMV9DU1JfV1JJVEUoQkJQQ1RMLCBBRE04MjExX0NTUl9SRUFEKEJCUENUTCkgJgogCQkJCSAgfkFETTgyMTFfQkJQQ1RMX1dSKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhZG04MjExX3dyaXRlX2JicCglZCwlZCkgZmFpbGVkIgotCQkgICAgICAgIiBwb3N0d3JpdGUgKHJlZz0weCUwOHgpXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgYWRkciwgZGF0YSwgcmVnKTsKKwkJd2lwaHlfZGVidWcoZGV2LT53aXBoeSwKKwkJCSAgICAiYWRtODIxMV93cml0ZV9iYnAoJWQsJWQpIGZhaWxlZCBwb3N0d3JpdGUgKHJlZz0weCUwOHgpXG4iLAorCQkJICAgIGFkZHIsIGRhdGEsIHJlZyk7CiAJCXJldHVybiAtRVRJTUVET1VUOwogCX0KIApAQCAtNjc1LDggKzY3NSw4IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB1bnN1cHBvcnRlZCB0cmFuc2NlaXZlciB0eXBlICVkXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgcHJpdi0+dHJhbnNjZWl2ZXJfdHlwZSk7CisJCXdpcGh5X2RlYnVnKGRldi0+d2lwaHksICJ1bnN1cHBvcnRlZCB0cmFuc2NlaXZlciB0eXBlICVkXG4iLAorCQkJICAgIHByaXYtPnRyYW5zY2VpdmVyX3R5cGUpOwogCQlicmVhazsKIAl9CiAKQEAgLTczMiw4ICs3MzIsOCBAQAogCiAJLyogTm90aGluZyB0byBkbyBmb3IgQURNdGVrIEJCUCAqLwogCX0gZWxzZSBpZiAocHJpdi0+YmJwX3R5cGUgIT0gQURNODIxMV9UWVBFX0FETVRFSykKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB1bnN1cHBvcnRlZCBCQlAgdHlwZSAlZFxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoZGV2LT53aXBoeSksIHByaXYtPmJicF90eXBlKTsKKwkJd2lwaHlfZGVidWcoZGV2LT53aXBoeSwgInVuc3VwcG9ydGVkIGJicCB0eXBlICVkXG4iLAorCQkJICAgIHByaXYtPmJicF90eXBlKTsKIAogCUFETTgyMTFfUkVTVE9SRSgpOwogCkBAIC0xMDI3LDEzICsxMDI3LDEyIEBACiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB1bnN1cHBvcnRlZCB0cmFuc2NlaXZlciAlZFxuIiwKLQkJCSAgICAgICB3aXBoeV9uYW1lKGRldi0+d2lwaHkpLCBwcml2LT50cmFuc2NlaXZlcl90eXBlKTsKKwkJCXdpcGh5X2RlYnVnKGRldi0+d2lwaHksICJ1bnN1cHBvcnRlZCB0cmFuc2NlaXZlciAlZFxuIiwKKwkJCQkgICAgcHJpdi0+dHJhbnNjZWl2ZXJfdHlwZSk7CiAJCQlicmVhazsKIAkJfQogCX0gZWxzZQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHVuc3VwcG9ydGVkIEJCUCAlZFxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoZGV2LT53aXBoeSksIHByaXYtPmJicF90eXBlKTsKKwkJd2lwaHlfZGVidWcoZGV2LT53aXBoeSwgInVuc3VwcG9ydGVkIGJicCAlZFxuIiwgcHJpdi0+YmJwX3R5cGUpOwogCiAJQURNODIxMV9DU1JfV1JJVEUoU1lOUkYsIDApOwogCkBAIC0xNTA5LDE1ICsxNTA4LDEzIEBACiAJLyogUG93ZXIgdXAgTUFDIGFuZCBSRiBjaGlwcyAqLwogCXJldHZhbCA9IGFkbTgyMTFfaHdfcmVzZXQoZGV2KTsKIAlpZiAocmV0dmFsKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGhhcmR3YXJlIHJlc2V0IGZhaWxlZFxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoZGV2LT53aXBoeSkpOworCQl3aXBoeV9lcnIoZGV2LT53aXBoeSwgImhhcmR3YXJlIHJlc2V0IGZhaWxlZFxuIik7CiAJCWdvdG8gZmFpbDsKIAl9CiAKIAlyZXR2YWwgPSBhZG04MjExX2luaXRfcmluZ3MoZGV2KTsKIAlpZiAocmV0dmFsKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBpbml0aWFsaXplIHJpbmdzXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7CisJCXdpcGh5X2VycihkZXYtPndpcGh5LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgcmluZ3NcbiIpOwogCQlnb3RvIGZhaWw7CiAJfQogCkBAIC0xNTI4LDggKzE1MjUsNyBAQAogCXJldHZhbCA9IHJlcXVlc3RfaXJxKHByaXYtPnBkZXYtPmlycSwgYWRtODIxMV9pbnRlcnJ1cHQsCiAJCQkgICAgIElSUUZfU0hBUkVELCAiYWRtODIxMSIsIGRldik7CiAJaWYgKHJldHZhbCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgSVJRIGhhbmRsZXJcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKKwkJd2lwaHlfZXJyKGRldi0+d2lwaHksICJmYWlsZWQgdG8gcmVnaXN0ZXIgaXJxIGhhbmRsZXJcbiIpOwogCQlnb3RvIGZhaWw7CiAJfQogCkBAIC0xOTAzLDE1ICsxODk5LDE3IEBACiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzIChhZG04MjExKTogQ2Fubm90IHJlZ2lzdGVyIGRldmljZVxuIiwKIAkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKLQkJZ290byBlcnJfZnJlZV9kZXNjOworCQlnb3RvIGVycl9mcmVlX2VlcHJvbTsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogaHdhZGRyICVwTSwgUmV2IDB4JTAyeFxuIiwKLQkgICAgICAgd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgZGV2LT53aXBoeS0+cGVybV9hZGRyLAotCSAgICAgICBwZGV2LT5yZXZpc2lvbik7CisJd2lwaHlfaW5mbyhkZXYtPndpcGh5LCAiaHdhZGRyICVwbSwgcmV2IDB4JTAyeFxuIiwKKwkJICAgZGV2LT53aXBoeS0+cGVybV9hZGRyLCBwZGV2LT5yZXZpc2lvbik7CiAKIAlyZXR1cm4gMDsKIAorIGVycl9mcmVlX2VlcHJvbToKKwlrZnJlZShwcml2LT5lZXByb20pOworCiAgZXJyX2ZyZWVfZGVzYzoKIAlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsCiAJCQkgICAgc2l6ZW9mKHN0cnVjdCBhZG04MjExX2Rlc2MpICogcHJpdi0+cnhfcmluZ19zaXplICsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FkbTgyMTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FkbTgyMTEuaAppbmRleCBiMDdlNGQzLi5iYmMxMGIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hZG04MjExLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWRtODIxMS5oCkBAIC04MCw3ICs4MCw3IEBACiAJX19sZTMyIEZFTVI7CQkvKiAweDEwNCAqLwogCV9fbGUzMiBGUFNSOwkJLyogMHgxMDggKi8KIAlfX2xlMzIgRkZFUjsJCS8qIDB4MTBDICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIENTUjAgLSBQQVIgKFBDSSBBZGRyZXNzIFJlZ2lzdGVyKSAqLwogI2RlZmluZSBBRE04MjExX1BBUl9NV0lFCSgxIDw8IDI0KQpAQCAtNDg0LDcgKzQ4NCw3IEBACiAJdTggZW50cnlfY29udHJvbDsJLy8gaHVoPz8KIAl1MTYgcmVzZXJ2ZWRfMTsKIAl1MzIgcmVzZXJ2ZWRfMjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogCiAjZGVmaW5lIFJYX0NPUFlfQlJFQUsgMTI4CkBAIC01MzEsNyArNTMxLDcgQEAKIAl1OAlsbmFnc190aHJlc2hvbGRbMTRdOwkvKiAweDcwICovCiAJX19sZTE2CWNoZWNrc3VtOwkJLyogMHg3RSAqLwogCXU4CWNpc19kYXRhWzBdOwkJLyogMHg4MCwgMzg0IGJ5dGVzICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBhZG04MjExX3ByaXYgewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCmluZGV4IDNiN2FiMjAuLjFkMDU0NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKQEAgLTUwNiwyMCArNTA2LDIwIEBACiAJdTggbWFjW0VUSF9BTEVOXTsKIAlfX2xlMTYga2xlbjsKIAl1OCBrZXlbMTZdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBUaGVzZSBzdHJ1Y3R1cmVzIGFyZSBmcm9tIHRoZSBBaXJvbmV0J3MgUEM0NTAwIERldmVsb3BlcnMgTWFudWFsICovCiB0eXBlZGVmIHN0cnVjdCBTc2lkIFNzaWQ7CiBzdHJ1Y3QgU3NpZCB7CiAJX19sZTE2IGxlbjsKIAl1OCBzc2lkWzMyXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogdHlwZWRlZiBzdHJ1Y3QgU3NpZFJpZCBTc2lkUmlkOwogc3RydWN0IFNzaWRSaWQgewogCV9fbGUxNiBsZW47CiAJU3NpZCBzc2lkc1szXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogdHlwZWRlZiBzdHJ1Y3QgTW9kdWxhdGlvblJpZCBNb2R1bGF0aW9uUmlkOwogc3RydWN0IE1vZHVsYXRpb25SaWQgewpAQCAtNTI4LDcgKzUyOCw3IEBACiAjZGVmaW5lIE1PRF9ERUZBVUxUIGNwdV90b19sZTE2KDApCiAjZGVmaW5lIE1PRF9DQ0sgY3B1X3RvX2xlMTYoMSkKICNkZWZpbmUgTU9EX01PSyBjcHVfdG9fbGUxNigyKQotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiB0eXBlZGVmIHN0cnVjdCBDb25maWdSaWQgQ29uZmlnUmlkOwogc3RydWN0IENvbmZpZ1JpZCB7CkBAIC02NTIsNyArNjUyLDcgQEAKICNkZWZpbmUgTUFHSUNfU1RBWV9JTl9DQU0gKDE8PDEwKQogCXU4IG1hZ2ljQ29udHJvbDsKIAlfX2xlMTYgYXV0b1dha2U7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHR5cGVkZWYgc3RydWN0IFN0YXR1c1JpZCBTdGF0dXNSaWQ7CiBzdHJ1Y3QgU3RhdHVzUmlkIHsKQEAgLTcxMSwyMCArNzExLDIwIEBACiAjZGVmaW5lIFNUQVRfTEVBUEZBSUxFRCA5MQogI2RlZmluZSBTVEFUX0xFQVBUSU1FRE9VVCA5MgogI2RlZmluZSBTVEFUX0xFQVBDT01QTEVURSA5MwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiB0eXBlZGVmIHN0cnVjdCBTdGF0c1JpZCBTdGF0c1JpZDsKIHN0cnVjdCBTdGF0c1JpZCB7CiAJX19sZTE2IGxlbjsKIAlfX2xlMTYgc3BhY2VyOwogCV9fbGUzMiB2YWxzWzEwMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHR5cGVkZWYgc3RydWN0IEFQTGlzdFJpZCBBUExpc3RSaWQ7CiBzdHJ1Y3QgQVBMaXN0UmlkIHsKIAlfX2xlMTYgbGVuOwogCXU4IGFwWzRdW0VUSF9BTEVOXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogdHlwZWRlZiBzdHJ1Y3QgQ2FwYWJpbGl0eVJpZCBDYXBhYmlsaXR5UmlkOwogc3RydWN0IENhcGFiaWxpdHlSaWQgewpAQCAtNzU0LDcgKzc1NCw3IEBACiAJX19sZTE2IGJvb3RCbG9ja1ZlcjsKIAlfX2xlMTYgcmVxdWlyZWRIYXJkOwogCV9fbGUxNiBleHRTb2Z0Q2FwOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBPbmx5IHByZXNlbnQgb24gZmlybXdhcmUgPj0gNS4zMC4xNyAqLwogdHlwZWRlZiBzdHJ1Y3QgQlNTTGlzdFJpZEV4dHJhIEJTU0xpc3RSaWRFeHRyYTsKQEAgLTc2Miw3ICs3NjIsNyBAQAogICBfX2xlMTYgdW5rbm93bls0XTsKICAgdTggZml4ZWRbMTJdOyAvKiBXTEFOIG1hbmFnZW1lbnQgZnJhbWUgKi8KICAgdTggaWVwWzYyNF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHR5cGVkZWYgc3RydWN0IEJTU0xpc3RSaWQgQlNTTGlzdFJpZDsKIHN0cnVjdCBCU1NMaXN0UmlkIHsKQEAgLTc5Niw3ICs3OTYsNyBAQAogCiAgIC8qIE9ubHkgcHJlc2VudCBvbiBmaXJtd2FyZSA+PSA1LjMwLjE3ICovCiAgIEJTU0xpc3RSaWRFeHRyYSBleHRyYTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICBCU1NMaXN0UmlkIGJzczsKQEAgLTgwNywxMyArODA3LDEzIEBACiBzdHJ1Y3QgdGRzUnNzaUVudHJ5IHsKICAgdTggcnNzaXBjdDsKICAgdTggcnNzaWRCbTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogdHlwZWRlZiBzdHJ1Y3QgdGRzUnNzaVJpZCB0ZHNSc3NpUmlkOwogc3RydWN0IHRkc1Jzc2lSaWQgewogICB1MTYgbGVuOwogICB0ZHNSc3NpRW50cnkgeFsyNTZdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiB0eXBlZGVmIHN0cnVjdCBNSUNSaWQgTUlDUmlkOwogc3RydWN0IE1JQ1JpZCB7CkBAIC04MjMsNyArODIzLDcgQEAKIAl1OCAgbXVsdGljYXN0WzE2XTsKIAlfX2xlMTYgdW5pY2FzdFZhbGlkOwogCXU4ICB1bmljYXN0WzE2XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogdHlwZWRlZiBzdHJ1Y3QgTUlDQnVmZmVyIE1JQ0J1ZmZlcjsKIHN0cnVjdCBNSUNCdWZmZXIgewpAQCAtODQxLDcgKzg0MSw3IEBACiAJfSB1OwogCV9fYmUzMiBtaWM7CiAJX19iZTMyIHNlcTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCXU4IGRhW0VUSF9BTEVOXTsKQEAgLTk5Niw3ICs5OTYsNyBAQAogCXU4IHJhdGU7CiAJdTggZnJlcTsKIAlfX2xlMTYgdG1wWzRdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdW5zaWduZWQgaW50ICBjdGw6IDE1OwpAQCAtMjkzMSw4ICsyOTMxLDggQEAKIAkgICAgICAgIHJlbGVhc2VfcmVnaW9uKCBkZXYtPmJhc2VfYWRkciwgNjQgKTsKIGVycl9vdXRfbmV0czoKIAlhaXJvX25ldHdvcmtzX2ZyZWUoYWkpOwotCWRlbF9haXJvX2RldihhaSk7CiBlcnJfb3V0X2ZyZWU6CisJZGVsX2Fpcm9fZGV2KGFpKTsKIAlmcmVlX25ldGRldihkZXYpOwogCXJldHVybiBOVUxMOwogfQpAQCAtNDY1Nyw3ICs0NjU3LDcgQEAKIAkJCSAgIGxvZmZfdCAqb2Zmc2V0ICkKIHsKIAlsb2ZmX3QgcG9zID0gKm9mZnNldDsKLQlzdHJ1Y3QgcHJvY19kYXRhICpwcml2ID0gKHN0cnVjdCBwcm9jX2RhdGEqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcHJvY19kYXRhICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKCFwcml2LT53YnVmZmVyKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ2ODksNyArNDY4OSw3IEBACiAKIAlpZiAoKGZpbGUtPnByaXZhdGVfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9jX2RhdGEgKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWRhdGEgPSAoc3RydWN0IHByb2NfZGF0YSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlkYXRhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWlmICgoZGF0YS0+cmJ1ZmZlciA9IGttYWxsb2MoIDIwNDgsIEdGUF9LRVJORUwgKSkgPT0gTlVMTCkgewogCQlrZnJlZSAoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC00NzcyLDcgKzQ3NzIsNyBAQAogCiAJaWYgKChmaWxlLT5wcml2YXRlX2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvY19kYXRhICksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQlkYXRhID0gKHN0cnVjdCBwcm9jX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpZiAoKGRhdGEtPnJidWZmZXIgPSBrbWFsbG9jKCA0MDk2LCBHRlBfS0VSTkVMICkpID09IE5VTEwpIHsKIAkJa2ZyZWUgKGZpbGUtPnByaXZhdGVfZGF0YSk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNTA0NSw3ICs1MDQ1LDcgQEAKIAogCWlmICgoZmlsZS0+cHJpdmF0ZV9kYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHByb2NfZGF0YSApLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JZGF0YSA9IChzdHJ1Y3QgcHJvY19kYXRhICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCWRhdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJaWYgKChkYXRhLT5yYnVmZmVyID0ga21hbGxvYyggMjA0OCwgR0ZQX0tFUk5FTCApKSA9PSBOVUxMKSB7CiAJCWtmcmVlIChmaWxlLT5wcml2YXRlX2RhdGEpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTUxMjcsNyArNTEyNyw3IEBACiAKIHN0YXRpYyB2b2lkIHByb2NfU1NJRF9vbl9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgcHJvY19kYXRhICpkYXRhID0gKHN0cnVjdCBwcm9jX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHByb2NfZGF0YSAqZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRwID0gUERFKGlub2RlKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZHAtPmRhdGE7CiAJc3RydWN0IGFpcm9faW5mbyAqYWkgPSBkZXYtPm1sX3ByaXY7CkBAIC01MTYzLDcgKzUxNjMsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBwcm9jX0FQTGlzdF9vbl9jbG9zZSggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUgKSB7Ci0Jc3RydWN0IHByb2NfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgcHJvY19kYXRhICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBwcm9jX2RhdGEgKmRhdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkcCA9IFBERShpbm9kZSk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRwLT5kYXRhOwogCXN0cnVjdCBhaXJvX2luZm8gKmFpID0gZGV2LT5tbF9wcml2OwpAQCAtNTMwOSw3ICs1MzA5LDcgQEAKIAogCW1lbXNldChrZXksIDAsIHNpemVvZihrZXkpKTsKIAotCWRhdGEgPSAoc3RydWN0IHByb2NfZGF0YSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlkYXRhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWlmICggIWRhdGEtPndyaXRlbGVuICkgcmV0dXJuOwogCiAJaWYgKGRhdGEtPndidWZmZXJbMF0gPj0gJzAnICYmIGRhdGEtPndidWZmZXJbMF0gPD0gJzMnICYmCkBAIC01MzYzLDcgKzUzNjMsNyBAQAogCWlmICgoZmlsZS0+cHJpdmF0ZV9kYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHByb2NfZGF0YSApLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJbWVtc2V0KCZ3a3IsIDAsIHNpemVvZih3a3IpKTsKLQlkYXRhID0gKHN0cnVjdCBwcm9jX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpZiAoKGRhdGEtPnJidWZmZXIgPSBremFsbG9jKCAxODAsIEdGUF9LRVJORUwgKSkgPT0gTlVMTCkgewogCQlrZnJlZSAoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC01NDA5LDcgKzU0MDksNyBAQAogCiAJaWYgKChmaWxlLT5wcml2YXRlX2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvY19kYXRhICksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQlkYXRhID0gKHN0cnVjdCBwcm9jX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpZiAoKGRhdGEtPnJidWZmZXIgPSBrbWFsbG9jKCAxMDQsIEdGUF9LRVJORUwgKSkgPT0gTlVMTCkgewogCQlrZnJlZSAoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC01NDUzLDcgKzU0NTMsNyBAQAogCiAJaWYgKChmaWxlLT5wcml2YXRlX2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvY19kYXRhICksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQlkYXRhID0gKHN0cnVjdCBwcm9jX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpZiAoKGRhdGEtPnJidWZmZXIgPSBrbWFsbG9jKCAxMDQsIEdGUF9LRVJORUwgKSkgPT0gTlVMTCkgewogCQlrZnJlZSAoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC01NDk1LDcgKzU0OTUsNyBAQAogCiAJaWYgKChmaWxlLT5wcml2YXRlX2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvY19kYXRhICksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQlkYXRhID0gKHN0cnVjdCBwcm9jX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpZiAoKGRhdGEtPnJidWZmZXIgPSBrbWFsbG9jKCAxMDI0LCBHRlBfS0VSTkVMICkpID09IE5VTEwpIHsKIAkJa2ZyZWUgKGZpbGUtPnByaXZhdGVfZGF0YSk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyb19jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyb19jcy5jCmluZGV4IDMzYmRjNmEuLjlhMTIxYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm9fY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvX2NzLmMKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KQEAgLTE1NSw4ICsxNTQsNiBAQAogCQkJCXVuc2lnbmVkIGludCB2Y2MsCiAJCQkJdm9pZCAqcHJpdl9kYXRhKQogewotCXdpbl9yZXFfdCAqcmVxID0gcHJpdl9kYXRhOwotCiAJaWYgKGNmZy0+aW5kZXggPT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTE3Niw1MiArMTczLDI1IEBACiAJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7CiAKIAkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KLQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gcF9kZXYtPmlvLk51bVBvcnRzMiA9IDA7CisJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA9IDA7CiAJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC0+aW8ubndpbiA+IDApKSB7CiAJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC0+aW87Ci0JCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCi0JCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7Ci0JCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCi0JCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKLQkJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzICY9IH5JT19EQVRBX1BBVEhfV0lEVEg7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0KKwkJCQkJcGNtY2lhX2lvX2NmZ19kYXRhX3dpZHRoKGlvLT5mbGFncyk7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBpby0+d2luWzBdLmJhc2U7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gaW8tPndpblswXS5sZW47CiAJCWlmIChpby0+bndpbiA+IDEpIHsKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMiA9IHBfZGV2LT5pby5BdHRyaWJ1dGVzMTsKLQkJCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7Ci0JCQlwX2Rldi0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPmZsYWdzID0gcF9kZXYtPnJlc291cmNlWzBdLT5mbGFnczsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+c3RhcnQgPSBpby0+d2luWzFdLmJhc2U7CisJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA9IGlvLT53aW5bMV0ubGVuOwogCQl9CiAJfQogCiAJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KLQlpZiAocGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pICE9IDApCisJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2KSAhPSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qCi0JICBOb3cgc2V0IHVwIGEgY29tbW9uIG1lbW9yeSB3aW5kb3csIGlmIG5lZWRlZC4gIFRoZXJlIGlzIHJvb20KLQkgIGluIHRoZSBzdHJ1Y3QgcGNtY2lhX2RldmljZSBzdHJ1Y3R1cmUgZm9yIG9uZSBtZW1vcnkgd2luZG93IGhhbmRsZSwKLQkgIGJ1dCBpZiB0aGUgYmFzZSBhZGRyZXNzZXMgbmVlZCB0byBiZSBzYXZlZCwgb3IgaWYgbXVsdGlwbGUKLQkgIHdpbmRvd3MgYXJlIG5lZWRlZCwgdGhlIGluZm8gc2hvdWxkIGdvIGluIHRoZSBwcml2YXRlIGRhdGEKLQkgIHN0cnVjdHVyZSBmb3IgdGhpcyBkZXZpY2UuCi0KLQkgIE5vdGUgdGhhdCB0aGUgbWVtb3J5IHdpbmRvdyBiYXNlIGlzIGEgcGh5c2ljYWwgYWRkcmVzcywgYW5kCi0JICBuZWVkcyB0byBiZSBtYXBwZWQgdG8gdmlydHVhbCBzcGFjZSB3aXRoIGlvcmVtYXAoKSBiZWZvcmUgaXQKLQkgIGlzIHVzZWQuCi0JKi8KLQlpZiAoKGNmZy0+bWVtLm53aW4gPiAwKSB8fCAoZGZsdC0+bWVtLm53aW4gPiAwKSkgewotCQljaXN0cGxfbWVtX3QgKm1lbSA9IChjZmctPm1lbS5ud2luKSA/ICZjZmctPm1lbSA6ICZkZmx0LT5tZW07Ci0JCW1lbXJlcV90IG1hcDsKLQkJcmVxLT5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfMTZ8V0lOX01FTU9SWV9UWVBFX0NNOwotCQlyZXEtPkJhc2UgPSBtZW0tPndpblswXS5ob3N0X2FkZHI7Ci0JCXJlcS0+U2l6ZSA9IG1lbS0+d2luWzBdLmxlbjsKLQkJcmVxLT5BY2Nlc3NTcGVlZCA9IDA7Ci0JCWlmIChwY21jaWFfcmVxdWVzdF93aW5kb3cocF9kZXYsIHJlcSwgJnBfZGV2LT53aW4pICE9IDApCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJbWFwLlBhZ2UgPSAwOwotCQltYXAuQ2FyZE9mZnNldCA9IG1lbS0+d2luWzBdLmNhcmRfYWRkcjsKLQkJaWYgKHBjbWNpYV9tYXBfbWVtX3BhZ2UocF9kZXYsIHBfZGV2LT53aW4sICZtYXApICE9IDApCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQl9CiAJLyogSWYgd2UgZ290IHRoaXMgZmFyLCB3ZSdyZSBjb29sISAqLwogCXJldHVybiAwOwogfQpAQCAtMjMwLDE3ICsyMDAsMTIgQEAKIHN0YXRpYyBpbnQgYWlyb19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJbG9jYWxfaW5mb190ICpkZXY7Ci0Jd2luX3JlcV90ICpyZXE7CiAJaW50IHJldDsKIAogCWRldiA9IGxpbmstPnByaXY7CiAKIAlkZXZfZGJnKCZsaW5rLT5kZXYsICJhaXJvX2NvbmZpZ1xuIik7CiAKLQlyZXEgPSBremFsbG9jKHNpemVvZih3aW5fcmVxX3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KIAkvKgogCSAqIEluIHRoaXMgbG9vcCwgd2Ugc2NhbiB0aGUgQ0lTIGZvciBjb25maWd1cmF0aW9uIHRhYmxlCiAJICogZW50cmllcywgZWFjaCBvZiB3aGljaCBkZXNjcmliZXMgYSB2YWxpZCBjYXJkCkBAIC0yNTUsNyArMjIwLDcgQEAKIAkgKiBhbmQgbW9zdCBjbGllbnQgZHJpdmVycyB3aWxsIG9ubHkgdXNlIHRoZSBDSVMgdG8gZmlsbCBpbgogCSAqIGltcGxlbWVudGF0aW9uLWRlZmluZWQgZGV0YWlscy4KIAkgKi8KLQlyZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgYWlyb19jc19jb25maWdfY2hlY2ssIHJlcSk7CisJcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIGFpcm9fY3NfY29uZmlnX2NoZWNrLCBOVUxMKTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZDsKIApAQCAtMjcyLDcgKzIzNyw3IEBACiAJCWdvdG8gZmFpbGVkOwogCSgobG9jYWxfaW5mb190ICopbGluay0+cHJpdiktPmV0aF9kZXYgPQogCQlpbml0X2Fpcm9fY2FyZChsaW5rLT5pcnEsCi0JCQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQxLCAxLCAmbGluay0+ZGV2KTsKKwkJCSAgICAgICBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQsIDEsICZsaW5rLT5kZXYpOwogCWlmICghKChsb2NhbF9pbmZvX3QgKilsaW5rLT5wcml2KS0+ZXRoX2RldikKIAkJZ290byBmYWlsZWQ7CiAKQEAgLTI4MiwyMiArMjQ3LDE1IEBACiAJaWYgKGxpbmstPmNvbmYuVnBwKQogCQlwcmludGsoIiwgVnBwICVkLiVkIiwgbGluay0+Y29uZi5WcHAvMTAsIGxpbmstPmNvbmYuVnBwJTEwKTsKIAlwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxKTsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMxKQotCQlwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKLQkJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MStsaW5rLT5pby5OdW1Qb3J0czEtMSk7Ci0JaWYgKGxpbmstPmlvLk51bVBvcnRzMikKLQkJcHJpbnRrKCIgJiAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQyLAotCQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQyK2xpbmstPmlvLk51bVBvcnRzMi0xKTsKLQlpZiAobGluay0+d2luKQotCQlwcmludGsoIiwgbWVtIDB4JTA2bHgtMHglMDZseCIsIHJlcS0+QmFzZSwKLQkJICAgICAgIHJlcS0+QmFzZStyZXEtPlNpemUtMSk7CisJaWYgKGxpbmstPnJlc291cmNlWzBdKQorCQlwcmludGsoIiAmICVwUiIsIGxpbmstPnJlc291cmNlWzBdKTsKKwlpZiAobGluay0+cmVzb3VyY2VbMV0pCisJCXByaW50aygiICYgJXBSIiwgbGluay0+cmVzb3VyY2VbMV0pOwogCXByaW50aygiXG4iKTsKLQlrZnJlZShyZXEpOwogCXJldHVybiAwOwogCiAgZmFpbGVkOgogCWFpcm9fcmVsZWFzZShsaW5rKTsKLQlrZnJlZShyZXEpOwogCXJldHVybiAtRU5PREVWOwogfSAvKiBhaXJvX2NvbmZpZyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdDc2YzUweC11c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0NzZjNTB4LXVzYi5jCmluZGV4IDhhMmQ0YWYuLmQ1MTQwYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0NzZjNTB4LXVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0NzZjNTB4LXVzYi5jCkBAIC03LDYgKzcsNyBAQAogICogQ29weXJpZ2h0IChjKSAyMDA0IEJhbGludCBTZWViZXIgPG4wXzVwNG1fcDEzNDUzQGhvdG1haWwuY29tPgogICogQ29weXJpZ2h0IChjKSAyMDA3IEd1aWRvIEd1ZW50aGVyIDxhZ3hAc2lneGNwdS5vcmc+CiAgKiBDb3B5cmlnaHQgKGMpIDIwMDcgS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bpa2kuZmk+CisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2ViYXN0aWFuIFNtb2xvcnogPHNlc21vQGdteC5uZXQ+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTg4LDIyICs4OSwxOSBAQAogI2RlZmluZSBEQkdfREVGQVVMVFMJCTAKIAogLyogVXNlIG91ciBvd24gZGJnIG1hY3JvICovCi0jZGVmaW5lIGF0NzZfZGJnKGJpdHMsIGZvcm1hdCwgYXJnLi4uKSBcCi0JZG8geyBcCi0JCWlmIChhdDc2X2RlYnVnICYgKGJpdHMpKQkJCQkgXAotCQkJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogIiBmb3JtYXQgIlxuIiAsIFwKLQkJCSAgICAgICAjIyBhcmcpOwkJCQkJIFwKLQl9IHdoaWxlICgwKQorI2RlZmluZSBhdDc2X2RiZyhiaXRzLCBmb3JtYXQsIGFyZy4uLikJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKGF0NzZfZGVidWcgJiAoYml0cykpCQkJCQlcCisJCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6ICIgZm9ybWF0ICJcbiIsICMjYXJnKTsJXAorfSB3aGlsZSAoMCkKIAotI2RlZmluZSBhdDc2X2RiZ19kdW1wKGJpdHMsIGJ1ZiwgbGVuLCBmb3JtYXQsIGFyZy4uLikJXAotCWRvIHsgXAotCQlpZiAoYXQ3Nl9kZWJ1ZyAmIChiaXRzKSkgeyBcCi0JCQlwcmludGsoS0VSTl9ERUJVRyBEUklWRVJfTkFNRSAiOiAiIGZvcm1hdCAiXG4iICwgXAotCQkJICAgICAgICMjIGFyZyk7CQkJCQkgXAotCQkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoIiIsIERVTVBfUFJFRklYX09GRlNFVCwgICAgIFwKLQkJCQkJICAgICBidWYsIGxlbik7CQkJIFwKLQkJfQkJCQkJCQkgXAotCX0gd2hpbGUgKDApCisjZGVmaW5lIGF0NzZfZGJnX2R1bXAoYml0cywgYnVmLCBsZW4sIGZvcm1hdCwgYXJnLi4uKQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKGF0NzZfZGVidWcgJiAoYml0cykpIHsJCQkJCVwKKwkJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogIiBmb3JtYXQgIlxuIiwgIyNhcmcpOwlcCisJCXByaW50X2hleF9kdW1wX2J5dGVzKCIiLCBEVU1QX1BSRUZJWF9PRkZTRVQsIGJ1ZiwgbGVuKTsJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCiAKIHN0YXRpYyB1aW50IGF0NzZfZGVidWcgPSBEQkdfREVGQVVMVFM7CiAKQEAgLTMwNSw3ICszMDMsNyBAQAogCXVuc2lnbmVkIGNoYXIgcG9sbF90aW1lb3V0WzNdOwogCXVuc2lnbmVkIGNoYXIgc3RhdGU7CiAJdW5zaWduZWQgY2hhciBzdHJpbmc7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9pc19pbnRlcnNpbChlbnVtIGJvYXJkX3R5cGUgYm9hcmQpCiB7CkBAIC02NTcsOCArNjU1LDggQEAKIGV4aXQ6CiAJa2ZyZWUoaHdjZmcpOwogCWlmIChyZXQgPCAwKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgZ2V0IEhXIENvbmZpZyAoZXJyb3IgJWQpXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LCAiY2Fubm90IGdldCBodyBjb25maWcgKGVycm9yICVkKVxuIiwKKwkJCSAgcmV0KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC03OTMsOCArNzkxLDkgQEAKIAlkbyB7CiAJCXN0YXR1cyA9IGF0NzZfZ2V0X2NtZF9zdGF0dXMocHJpdi0+dWRldiwgY21kKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfZ2V0X2NtZF9zdGF0dXMgZmFpbGVkOiAlZFxuIiwKLQkJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHN0YXR1cyk7CisJCQl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LAorCQkJCSAgImF0NzZfZ2V0X2NtZF9zdGF0dXMgZmFpbGVkOiAlZFxuIiwKKwkJCQkgIHN0YXR1cyk7CiAJCQlicmVhazsKIAkJfQogCkBAIC04MDksOSArODA4LDggQEAKIAogCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoSFogLyAxMCk7CS8qIDEwMCBtcyAqLwogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIiVzOiBjb21wbGV0aW9uIHRpbWVvdXQgZm9yIGNvbW1hbmQgJWRcbiIsCi0JCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBjbWQpOworCQkJd2lwaHlfZXJyKHByaXYtPmh3LT53aXBoeSwKKwkJCQkgICJjb21wbGV0aW9uIHRpbWVvdXQgZm9yIGNvbW1hbmQgJWRcbiIsIGNtZCk7CiAJCQlzdGF0dXMgPSAtRVRJTUVET1VUOwogCQkJYnJlYWs7CiAJCX0KQEAgLTgzMiw5ICs4MzAsOSBAQAogCiAJcmV0ID0gYXQ3Nl93YWl0X2NvbXBsZXRpb24ocHJpdiwgQ01EX1NFVF9NSUIpOwogCWlmIChyZXQgIT0gQ01EX1NUQVRVU19DT01QTEVURSkgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiJXM6IHNldF9taWI6IGF0NzZfd2FpdF9jb21wbGV0aW9uIGZhaWxlZCAiCi0JCSAgICAgICAid2l0aCAlZFxuIiwgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQl3aXBoeV9pbmZvKHByaXYtPmh3LT53aXBoeSwKKwkJCSAgICJzZXRfbWliOiBhdDc2X3dhaXRfY29tcGxldGlvbiBmYWlsZWQgd2l0aCAlZFxuIiwKKwkJCSAgIHJldCk7CiAJCXJldCA9IC1FSU87CiAJfQogCkBAIC04NTQsOCArODUyLDggQEAKIAogCXJldCA9IGF0NzZfc2V0X2NhcmRfY29tbWFuZChwcml2LT51ZGV2LCBjbWQsIE5VTEwsIDApOwogCWlmIChyZXQgPCAwKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X3NldF9jYXJkX2NvbW1hbmQoJWQpIGZhaWxlZDogJWRcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGNtZCwgcmV0KTsKKwkJd2lwaHlfZXJyKHByaXYtPmh3LT53aXBoeSwKKwkJCSAgImF0NzZfc2V0X2NhcmRfY29tbWFuZCglZCkgZmFpbGVkOiAlZFxuIiwgY21kLCByZXQpOwogCWVsc2UKIAkJcmV0ID0gMTsKIApAQCAtODc1LDggKzg3Myw4IEBACiAKIAlyZXQgPSBhdDc2X3NldF9taWIocHJpdiwgJnByaXYtPm1pYl9idWYpOwogCWlmIChyZXQgPCAwKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzZXRfbWliIChwbV9tb2RlKSBmYWlsZWQ6ICVkXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LCAic2V0X21pYiAocG1fbW9kZSkgZmFpbGVkOiAlZFxuIiwKKwkJCSAgcmV0KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC04OTIsOCArODkwLDggQEAKIAogCXJldCA9IGF0NzZfc2V0X21pYihwcml2LCAmcHJpdi0+bWliX2J1Zik7CiAJaWYgKHJldCA8IDApCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHNldF9taWIgKHByZWFtYmxlKSBmYWlsZWQ6ICVkXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LCAic2V0X21pYiAocHJlYW1ibGUpIGZhaWxlZDogJWRcbiIsCisJCQkgIHJldCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtOTA5LDggKzkwNyw4IEBACiAKIAlyZXQgPSBhdDc2X3NldF9taWIocHJpdiwgJnByaXYtPm1pYl9idWYpOwogCWlmIChyZXQgPCAwKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzZXRfbWliIChmcmFnIHRocmVzaG9sZCkgZmFpbGVkOiAlZFxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJd2lwaHlfZXJyKHByaXYtPmh3LT53aXBoeSwKKwkJCSAgInNldF9taWIgKGZyYWcgdGhyZXNob2xkKSBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTkyNiw4ICs5MjQsNyBAQAogCiAJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKIAlpZiAocmV0IDwgMCkKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogc2V0X21pYiAocnRzKSBmYWlsZWQ6ICVkXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LCAic2V0X21pYiAocnRzKSBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTk0Myw4ICs5NDAsOCBAQAogCiAJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKIAlpZiAocmV0IDwgMCkKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogc2V0X21pYiAoYXV0b3JhdGUgZmFsbGJhY2spIGZhaWxlZDogJWRcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksCisJCQkgICJzZXRfbWliIChhdXRvcmF0ZSBmYWxsYmFjaykgZmFpbGVkOiAlZFxuIiwgcmV0KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC05NjIsOCArOTU5LDggQEAKIAlyZXQgPSBhdDc2X2dldF9taWIocHJpdi0+dWRldiwgTUlCX01BQ19BRERSLCBtLAogCQkJICAgc2l6ZW9mKHN0cnVjdCBtaWJfbWFjX2FkZHIpKTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9taWIgKE1BQ19BRERSKSBmYWlsZWQ6ICVkXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LAorCQkJICAiYXQ3Nl9nZXRfbWliIChtYWNfYWRkcikgZmFpbGVkOiAlZFxuIiwgcmV0KTsKIAkJZ290byBleGl0OwogCX0KIApAQCAtOTkxLDggKzk4OCw4IEBACiAJcmV0ID0gYXQ3Nl9nZXRfbWliKHByaXYtPnVkZXYsIE1JQl9NQUNfV0VQLCBtLAogCQkJICAgc2l6ZW9mKHN0cnVjdCBtaWJfbWFjX3dlcCkpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfZ2V0X21pYiAoTUFDX1dFUCkgZmFpbGVkOiAlZFxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJd2lwaHlfZXJyKHByaXYtPmh3LT53aXBoeSwKKwkJCSAgImF0NzZfZ2V0X21pYiAobWFjX3dlcCkgZmFpbGVkOiAlZFxuIiwgcmV0KTsKIAkJZ290byBleGl0OwogCX0KIApAQCAtMTAyOCw4ICsxMDI1LDggQEAKIAlyZXQgPSBhdDc2X2dldF9taWIocHJpdi0+dWRldiwgTUlCX01BQ19NR01ULCBtLAogCQkJICAgc2l6ZW9mKHN0cnVjdCBtaWJfbWFjX21nbXQpKTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9taWIgKE1BQ19NR01UKSBmYWlsZWQ6ICVkXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LAorCQkJICAiYXQ3Nl9nZXRfbWliIChtYWNfbWdtdCkgZmFpbGVkOiAlZFxuIiwgcmV0KTsKIAkJZ290byBleGl0OwogCX0KIApAQCAtMTA2NCw4ICsxMDYxLDggQEAKIAogCXJldCA9IGF0NzZfZ2V0X21pYihwcml2LT51ZGV2LCBNSUJfTUFDLCBtLCBzaXplb2Yoc3RydWN0IG1pYl9tYWMpKTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9taWIgKE1BQykgZmFpbGVkOiAlZFxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJd2lwaHlfZXJyKHByaXYtPmh3LT53aXBoeSwKKwkJCSAgImF0NzZfZ2V0X21pYiAobWFjKSBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCQlnb3RvIGV4aXQ7CiAJfQogCkBAIC0xMTAxLDggKzEwOTgsOCBAQAogCiAJcmV0ID0gYXQ3Nl9nZXRfbWliKHByaXYtPnVkZXYsIE1JQl9QSFksIG0sIHNpemVvZihzdHJ1Y3QgbWliX3BoeSkpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfZ2V0X21pYiAoUEhZKSBmYWlsZWQ6ICVkXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LAorCQkJICAiYXQ3Nl9nZXRfbWliIChwaHkpIGZhaWxlZDogJWRcbiIsIHJldCk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTExMzQsOCArMTEzMSw4IEBACiAKIAlyZXQgPSBhdDc2X2dldF9taWIocHJpdi0+dWRldiwgTUlCX0xPQ0FMLCBtLCBzaXplb2Yoc3RydWN0IG1pYl9sb2NhbCkpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfZ2V0X21pYiAoTE9DQUwpIGZhaWxlZDogJWRcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksCisJCQkgICJhdDc2X2dldF9taWIgKGxvY2FsKSBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCQlnb3RvIGV4aXQ7CiAJfQogCkBAIC0xMTYwLDggKzExNTcsOCBAQAogCXJldCA9IGF0NzZfZ2V0X21pYihwcml2LT51ZGV2LCBNSUJfTURPTUFJTiwgbSwKIAkJCSAgIHNpemVvZihzdHJ1Y3QgbWliX21kb21haW4pKTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9taWIgKE1ET01BSU4pIGZhaWxlZDogJWRcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksCisJCQkgICJhdDc2X2dldF9taWIgKG1kb21haW4pIGZhaWxlZDogJWRcbiIsIHJldCk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTEyMzIsMTYgKzEyMjksMTYgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcHJpdi0+cnhfc2tiOwogCiAJaWYgKCFwcml2LT5yeF91cmIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogJXM6IHByaXYtPnJ4X3VyYiBpcyBOVUxMXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBfX2Z1bmNfXyk7CisJCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksICIlczogcHJpdi0+cnhfdXJiIGlzIG51bGxcbiIsCisJCQkgIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCiAJaWYgKCFza2IpIHsKIAkJc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2Yoc3RydWN0IGF0NzZfcnhfYnVmZmVyKSk7CiAJCWlmICghc2tiKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgYWxsb2NhdGUgcnggc2tidWZmXG4iLAotCQkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CisJCQl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LAorCQkJCSAgImNhbm5vdCBhbGxvY2F0ZSByeCBza2J1ZmZcbiIpOwogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gZXhpdDsKIAkJfQpAQCAtMTI2MCwxNSArMTI1NywxNCBAQAogCQkJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULAogCQkJCSAidXNiX3N1Ym1pdF91cmIgcmV0dXJuZWQgLUVOT0RFViIpOwogCQllbHNlCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiByeCwgdXNiX3N1Ym1pdF91cmIgZmFpbGVkOiAlZFxuIiwKLQkJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCQl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LAorCQkJCSAgInJ4LCB1c2Jfc3VibWl0X3VyYiBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCX0KIAogZXhpdDoKIAlpZiAocmV0IDwgMCAmJiByZXQgIT0gLUVOT0RFVikKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IHN1Ym1pdCByeCB1cmIgLSBwbGVhc2UgdW5sb2FkIHRoZSAiCi0JCSAgICAgICAiZHJpdmVyIGFuZC9vciBwb3dlciBjeWNsZSB0aGUgZGV2aWNlXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKKwkJd2lwaHlfZXJyKHByaXYtPmh3LT53aXBoeSwKKwkJCSAgImNhbm5vdCBzdWJtaXQgcnggdXJiIC0gcGxlYXNlIHVubG9hZCB0aGUgZHJpdmVyIGFuZC9vciBwb3dlciBjeWNsZSB0aGUgZGV2aWNlXG4iKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNDM3LDggKzE0MzMsOCBAQAogCXJldCA9IGF0NzZfc2V0X2NhcmRfY29tbWFuZChwcml2LT51ZGV2LCBDTURfU1RBUlRVUCwgJnByaXYtPmNhcmRfY29uZmlnLAogCQkJCSAgICBzaXplb2Yoc3RydWN0IGF0NzZfY2FyZF9jb25maWcpKTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X3NldF9jYXJkX2NvbW1hbmQgZmFpbGVkOiAlZFxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJd2lwaHlfZXJyKHByaXYtPmh3LT53aXBoeSwgImF0NzZfc2V0X2NhcmRfY29tbWFuZCBmYWlsZWQ6ICVkXG4iLAorCQkJICByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMTUwMyw4ICsxNDk5LDggQEAKIAogCXJldCA9IGF0NzZfc2V0X21pYihwcml2LCAmcHJpdi0+bWliX2J1Zik7CiAJaWYgKHJldCA8IDApCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHNldF9taWIgKHByb21pc2N1b3VzX21vZGUpIGZhaWxlZDogJWRcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksCisJCQkgICJzZXRfbWliIChwcm9taXNjdW91c19tb2RlKSBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOwogfQpAQCAtMTY0OSw2ICsxNjQ1LDU4IEBACiAJCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgaW50IGF0NzZfam9pbihzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCXN0cnVjdCBhdDc2X3JlcV9qb2luIGpvaW47CisJaW50IHJldDsKKworCW1lbXNldCgmam9pbiwgMCwgc2l6ZW9mKHN0cnVjdCBhdDc2X3JlcV9qb2luKSk7CisJbWVtY3B5KGpvaW4uZXNzaWQsIHByaXYtPmVzc2lkLCBwcml2LT5lc3NpZF9zaXplKTsKKwlqb2luLmVzc2lkX3NpemUgPSBwcml2LT5lc3NpZF9zaXplOworCW1lbWNweShqb2luLmJzc2lkLCBwcml2LT5ic3NpZCwgRVRIX0FMRU4pOworCWpvaW4uYnNzX3R5cGUgPSBJTkZSQVNUUlVDVFVSRV9NT0RFOworCWpvaW4uY2hhbm5lbCA9IHByaXYtPmNoYW5uZWw7CisJam9pbi50aW1lb3V0ID0gY3B1X3RvX2xlMTYoMjAwMCk7CisKKwlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlczogc2VuZGluZyBDTURfSk9JTiIsIF9fZnVuY19fKTsKKwlyZXQgPSBhdDc2X3NldF9jYXJkX2NvbW1hbmQocHJpdi0+dWRldiwgQ01EX0pPSU4sICZqb2luLAorCQkJCSAgICBzaXplb2Yoc3RydWN0IGF0NzZfcmVxX2pvaW4pKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksICJhdDc2X3NldF9jYXJkX2NvbW1hbmQgZmFpbGVkOiAlZFxuIiwKKwkJCSAgcmV0KTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0ID0gYXQ3Nl93YWl0X2NvbXBsZXRpb24ocHJpdiwgQ01EX0pPSU4pOworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzOiBDTURfSk9JTiByZXR1cm5lZDogMHglMDJ4IiwgX19mdW5jX18sIHJldCk7CisJaWYgKHJldCAhPSBDTURfU1RBVFVTX0NPTVBMRVRFKSB7CisJCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksICJhdDc2X3dhaXRfY29tcGxldGlvbiBmYWlsZWQ6ICVkXG4iLAorCQkJICByZXQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlhdDc2X3NldF9wbV9tb2RlKHByaXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfd29ya19qb2luX2Jzc2lkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdDc2X3ByaXYsCisJCQkJCSAgICAgIHdvcmtfam9pbl9ic3NpZCk7CisKKwlpZiAocHJpdi0+ZGV2aWNlX3VucGx1Z2dlZCkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKworCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKHByaXYtPmJzc2lkKSkKKwkJYXQ3Nl9qb2luKHByaXYpOworCisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworfQorCiBzdGF0aWMgdm9pZCBhdDc2X21hYzgwMjExX3R4X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gdXJiLT5jb250ZXh0OwpAQCAtMTY4NiwxNiArMTczNCwzMiBAQAogCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXQ3Nl90eF9idWZmZXIgKnR4X2J1ZmZlciA9IHByaXYtPmJ1bGtfb3V0X2J1ZmZlcjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKXNrYi0+ZGF0YTsKIAlpbnQgcGFkZGluZywgc3VibWl0X2xlbiwgcmV0OwogCiAJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXMoKSIsIF9fZnVuY19fKTsKIAogCWlmIChwcml2LT50eF91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogJXMgY2FsbGVkIHdoaWxlIHR4IHVyYiBpcyBwZW5kaW5nXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBfX2Z1bmNfXyk7CisJCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksCisJCQkgICIlcyBjYWxsZWQgd2hpbGUgdHggdXJiIGlzIHBlbmRpbmdcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KIAorCS8qIFRoZSBmb2xsb3dpbmcgY29kZSBsaW5lcyBhcmUgaW1wb3J0YW50IHdoZW4gdGhlIGRldmljZSBpcyBnb2luZyB0bworCSAqIGF1dGhlbnRpY2F0ZSB3aXRoIGEgbmV3IGJzc2lkLiBUaGUgZHJpdmVyIG11c3Qgc2VuZCBDTURfSk9JTiBiZWZvcmUKKwkgKiBhbiBhdXRoZW50aWNhdGlvbiBmcmFtZSBpcyB0cmFuc21pdHRlZC4gRm9yIHRoaXMgdG8gc3VjY2VlZCwgdGhlCisJICogY29ycmVjdCBic3NpZCBvZiB0aGUgQVAgbXVzdCBiZSBrbm93bi4gQXMgbWFjODAyMTEgZG9lcyBub3QgaW5mb3JtCisJICogZHJpdmVycyBhYm91dCB0aGUgYnNzaWQgcHJpb3IgdG8gdGhlIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MgdGhlCisJICogZm9sbG93aW5nIHdvcmthcm91bmQgaXMgbmVjZXNzYXJ5LiBJZiB0aGUgVFggZnJhbWUgaXMgYW4KKwkgKiBhdXRoZW50aWNhdGlvbiBmcmFtZSBleHRyYWN0IHRoZSBic3NpZCBhbmQgc2VuZCB0aGUgQ01EX0pPSU4uICovCisJaWYgKG1nbXQtPmZyYW1lX2NvbnRyb2wgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfQVVUSCkpIHsKKwkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5ic3NpZCwgbWdtdC0+YnNzaWQpKSB7CisJCQltZW1jcHkocHJpdi0+YnNzaWQsIG1nbXQtPmJzc2lkLCBFVEhfQUxFTik7CisJCQlpZWVlODAyMTFfcXVldWVfd29yayhodywgJnByaXYtPndvcmtfam9pbl9ic3NpZCk7CisJCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJCX0KKwl9CisKIAlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoaHcpOwogCiAJYXQ3Nl9sZWR0cmlnX3R4X2FjdGl2aXR5KCk7CS8qIHRlbGwgbGVkdHJpZ2dlciB3ZSBzZW5kIGEgcGFja2V0ICovCkBAIC0xNzI1LDEzICsxNzg5LDEyIEBACiAJCQkgIHN1Ym1pdF9sZW4sIGF0NzZfbWFjODAyMTFfdHhfY2FsbGJhY2ssIHByaXYpOwogCXJldCA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPnR4X3VyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciBpbiB0eCBzdWJtaXQgdXJiOiAlZFxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJd2lwaHlfZXJyKHByaXYtPmh3LT53aXBoeSwgImVycm9yIGluIHR4IHN1Ym1pdCB1cmI6ICVkXG4iLCByZXQpOwogCQlpZiAocmV0ID09IC1FSU5WQUwpCi0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiJXM6IC1FSU5WQUw6IHR4IHVyYiAlcCBoY3ByaXYgJXAgY29tcGxldGUgJXBcbiIsCi0JCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBwcml2LT50eF91cmIsCi0JCQkgICAgICAgcHJpdi0+dHhfdXJiLT5oY3ByaXYsIHByaXYtPnR4X3VyYi0+Y29tcGxldGUpOworCQkJd2lwaHlfZXJyKHByaXYtPmh3LT53aXBoeSwKKwkJCQkgICItZWludmFsOiB0eCB1cmIgJXAgaGNwcml2ICVwIGNvbXBsZXRlICVwXG4iLAorCQkJCSAgcHJpdi0+dHhfdXJiLAorCQkJCSAgcHJpdi0+dHhfdXJiLT5oY3ByaXYsIHByaXYtPnR4X3VyYi0+Y29tcGxldGUpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTc0OCw4ICsxODExLDggQEAKIAogCXJldCA9IGF0NzZfc3VibWl0X3J4X3VyYihwcml2KTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvcGVuOiBzdWJtaXRfcnhfdXJiIGZhaWxlZDogJWRcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksICJvcGVuOiBzdWJtaXRfcnhfdXJiIGZhaWxlZDogJWRcbiIsCisJCQkgIHJldCk7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0xNzcwLDYgKzE4MzMsNyBAQAogCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzKCkiLCBfX2Z1bmNfXyk7CiAKIAljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19od19zY2FuKTsKKwljYW5jZWxfd29ya19zeW5jKCZwcml2LT53b3JrX2pvaW5fYnNzaWQpOwogCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPndvcmtfc2V0X3Byb21pc2MpOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKQEAgLTE4MTgsNDIgKzE4ODIsNiBAQAogCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzKCkiLCBfX2Z1bmNfXyk7CiB9CiAKLXN0YXRpYyBpbnQgYXQ3Nl9qb2luKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCi17Ci0Jc3RydWN0IGF0NzZfcmVxX2pvaW4gam9pbjsKLQlpbnQgcmV0OwotCi0JbWVtc2V0KCZqb2luLCAwLCBzaXplb2Yoc3RydWN0IGF0NzZfcmVxX2pvaW4pKTsKLQltZW1jcHkoam9pbi5lc3NpZCwgcHJpdi0+ZXNzaWQsIHByaXYtPmVzc2lkX3NpemUpOwotCWpvaW4uZXNzaWRfc2l6ZSA9IHByaXYtPmVzc2lkX3NpemU7Ci0JbWVtY3B5KGpvaW4uYnNzaWQsIHByaXYtPmJzc2lkLCBFVEhfQUxFTik7Ci0Jam9pbi5ic3NfdHlwZSA9IElORlJBU1RSVUNUVVJFX01PREU7Ci0Jam9pbi5jaGFubmVsID0gcHJpdi0+Y2hhbm5lbDsKLQlqb2luLnRpbWVvdXQgPSBjcHVfdG9fbGUxNigyMDAwKTsKLQotCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzOiBzZW5kaW5nIENNRF9KT0lOIiwgX19mdW5jX18pOwotCXJldCA9IGF0NzZfc2V0X2NhcmRfY29tbWFuZChwcml2LT51ZGV2LCBDTURfSk9JTiwgJmpvaW4sCi0JCQkJICAgIHNpemVvZihzdHJ1Y3QgYXQ3Nl9yZXFfam9pbikpOwotCi0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9zZXRfY2FyZF9jb21tYW5kIGZhaWxlZDogJWRcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldCA9IGF0NzZfd2FpdF9jb21wbGV0aW9uKHByaXYsIENNRF9KT0lOKTsKLQlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlczogQ01EX0pPSU4gcmV0dXJuZWQ6IDB4JTAyeCIsIF9fZnVuY19fLCByZXQpOwotCWlmIChyZXQgIT0gQ01EX1NUQVRVU19DT01QTEVURSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X3dhaXRfY29tcGxldGlvbiBmYWlsZWQ6ICVkXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlhdDc2X3NldF9wbV9tb2RlKHByaXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIGF0NzZfZHdvcmtfaHdfc2NhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXQ3Nl9wcml2LApAQCAtMjEwNyw2ICsyMTM1LDcgQEAKIAltdXRleF9pbml0KCZwcml2LT5tdHgpOwogCUlOSVRfV09SSygmcHJpdi0+d29ya19zZXRfcHJvbWlzYywgYXQ3Nl93b3JrX3NldF9wcm9taXNjKTsKIAlJTklUX1dPUksoJnByaXYtPndvcmtfc3VibWl0X3J4LCBhdDc2X3dvcmtfc3VibWl0X3J4KTsKKwlJTklUX1dPUksoJnByaXYtPndvcmtfam9pbl9ic3NpZCwgYXQ3Nl93b3JrX2pvaW5fYnNzaWQpOwogCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5kd29ya19od19zY2FuLCBhdDc2X2R3b3JrX2h3X3NjYW4pOwogCiAJdGFza2xldF9pbml0KCZwcml2LT5yeF90YXNrbGV0LCBhdDc2X3J4X3Rhc2tsZXQsIDApOwpAQCAtMjI4MSwxNCArMjMxMCwxMiBAQAogCiAJcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCA9IDE7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogVVNCICVzLCBNQUMgJXBNLCBmaXJtd2FyZSAlZC4lZC4lZC0lZFxuIiwKLQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLAotCSAgICAgICBkZXZfbmFtZSgmaW50ZXJmYWNlLT5kZXYpLCBwcml2LT5tYWNfYWRkciwKLQkgICAgICAgcHJpdi0+ZndfdmVyc2lvbi5tYWpvciwgcHJpdi0+ZndfdmVyc2lvbi5taW5vciwKLQkgICAgICAgcHJpdi0+ZndfdmVyc2lvbi5wYXRjaCwgcHJpdi0+ZndfdmVyc2lvbi5idWlsZCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlZ3VsYXRvcnkgZG9tYWluIDB4JTAyeDogJXNcbiIsCi0JICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwKLQkgICAgICAgcHJpdi0+cmVndWxhdG9yeV9kb21haW4sIHByaXYtPmRvbWFpbi0+bmFtZSk7CisJd2lwaHlfaW5mbyhwcml2LT5ody0+d2lwaHksICJ1c2IgJXMsIG1hYyAlcG0sIGZpcm13YXJlICVkLiVkLiVkLSVkXG4iLAorCQkgICBkZXZfbmFtZSgmaW50ZXJmYWNlLT5kZXYpLCBwcml2LT5tYWNfYWRkciwKKwkJICAgcHJpdi0+ZndfdmVyc2lvbi5tYWpvciwgcHJpdi0+ZndfdmVyc2lvbi5taW5vciwKKwkJICAgcHJpdi0+ZndfdmVyc2lvbi5wYXRjaCwgcHJpdi0+ZndfdmVyc2lvbi5idWlsZCk7CisJd2lwaHlfaW5mbyhwcml2LT5ody0+d2lwaHksICJyZWd1bGF0b3J5IGRvbWFpbiAweCUwMng6ICVzXG4iLAorCQkgICBwcml2LT5yZWd1bGF0b3J5X2RvbWFpbiwgcHJpdi0+ZG9tYWluLT5uYW1lKTsKIAogZXhpdDoKIAlyZXR1cm4gcmV0OwpAQCAtMjQ1MCw3ICsyNDc3LDcgQEAKIAlpZiAoIXByaXYpCiAJCXJldHVybjsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiBkaXNjb25uZWN0aW5nXG4iLCB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOworCXdpcGh5X2luZm8ocHJpdi0+aHctPndpcGh5LCAiZGlzY29ubmVjdGluZ1xuIik7CiAJYXQ3Nl9kZWxldGVfZGV2aWNlKHByaXYpOwogCWRldl9wcmludGsoS0VSTl9JTkZPLCAmaW50ZXJmYWNlLT5kZXYsICJkaXNjb25uZWN0ZWRcbiIpOwogfQpAQCAtMjUwOCw1ICsyNTM1LDYgQEAKIE1PRFVMRV9BVVRIT1IoIlBhdmVsIFJvc2tpbiA8cHJvc2tpQGdudS5vcmc+Iik7CiBNT0RVTEVfQVVUSE9SKCJHdWlkbyBHdWVudGhlciA8YWd4QHNpZ3hjcHUub3JnPiIpOwogTU9EVUxFX0FVVEhPUigiS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bpa2kuZmk+Iik7CitNT0RVTEVfQVVUSE9SKCJTZWJhc3RpYW4gU21vbG9yeiA8c2VzbW9AZ214Lm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdDc2YzUweC11c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0NzZjNTB4LXVzYi5oCmluZGV4IDFlYzVjY2YuLjRhMzc0NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0NzZjNTB4LXVzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0NzZjNTB4LXVzYi5oCkBAIC05OSw3ICs5OSw3IEBACiAJdTggcmVzZXJ2ZWQyWzE0XTsKIAl1OCBjcjE1X3ZhbHVlc1sxNF07CiAJdTggcmVzZXJ2ZWQzWzNdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBod2NmZ19yZm1kIHsKIAl1OCBjcjIwX3ZhbHVlc1sxNF07CkBAIC0xMTEsNyArMTExLDcgQEAKIAl1OCBsb3dfcG93ZXJfdmFsdWVzWzE0XTsKIAl1OCBub3JtYWxfcG93ZXJfdmFsdWVzWzE0XTsKIAl1OCByZXNlcnZlZDFbM107Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGh3Y2ZnX2ludGVyc2lsIHsKIAl1OCBtYWNfYWRkcltFVEhfQUxFTl07CkBAIC0xMjAsNyArMTIwLDcgQEAKIAl1OCBwaWR2aWRbNF07CiAJdTggcmVndWxhdG9yeV9kb21haW47CiAJdTggcmVzZXJ2ZWRbMV07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogdW5pb24gYXQ3Nl9od2NmZyB7CiAJc3RydWN0IGh3Y2ZnX2ludGVyc2lsIGk7CkBAIC0xNDksMTQgKzE0OSwxNCBAQAogCXU4IHNzaWRfbGVuOwogCXU4IHNob3J0X3ByZWFtYmxlOwogCV9fbGUxNiBiZWFjb25fcGVyaW9kOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBhdDc2X2NvbW1hbmQgewogCXU4IGNtZDsKIAl1OCByZXNlcnZlZDsKIAlfX2xlMTYgc2l6ZTsKIAl1OCBkYXRhWzBdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIExlbmd0aCBvZiBBdG1lbC1zcGVjaWZpYyBSeCBoZWFkZXIgYmVmb3JlIDgwMi4xMSBmcmFtZSAqLwogI2RlZmluZSBBVDc2X1JYX0hEUkxFTiBvZmZzZXRvZihzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIsIHBhY2tldCkKQEAgLTE3MSw3ICsxNzEsNyBAQAogCXU4IG5vaXNlX2xldmVsOwogCV9fbGUzMiByeF90aW1lOwogCXU4IHBhY2tldFtJRUVFODAyMTFfTUFYX0ZSQUdfVEhSRVNIT0xEXTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBMZW5ndGggb2YgQXRtZWwtc3BlY2lmaWMgVHggaGVhZGVyIGJlZm9yZSA4MDIuMTEgZnJhbWUgKi8KICNkZWZpbmUgQVQ3Nl9UWF9IRFJMRU4gb2Zmc2V0b2Yoc3RydWN0IGF0NzZfdHhfYnVmZmVyLCBwYWNrZXQpCkBAIC0xODIsNyArMTgyLDcgQEAKIAl1OCBwYWRkaW5nOwogCXU4IHJlc2VydmVkWzRdOwogCXU4IHBhY2tldFtJRUVFODAyMTFfTUFYX0ZSQUdfVEhSRVNIT0xEXTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBkZWZpbmVzIGZvciBzY2FuX3R5cGUgYmVsb3cgKi8KICNkZWZpbmUgU0NBTl9UWVBFX0FDVElWRQkwCkBAIC0xOTgsNyArMTk4LDcgQEAKIAlfX2xlMTYgbWF4X2NoYW5uZWxfdGltZTsKIAl1OCBlc3NpZF9zaXplOwogCXU4IGludGVybmF0aW9uYWxfc2NhbjsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYXQ3Nl9yZXFfaWJzcyB7CiAJdTggYnNzaWRbRVRIX0FMRU5dOwpAQCAtMjA3LDcgKzIwNyw3IEBACiAJdTggY2hhbm5lbDsKIAl1OCBlc3NpZF9zaXplOwogCXU4IHJlc2VydmVkWzNdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBhdDc2X3JlcV9qb2luIHsKIAl1OCBic3NpZFtFVEhfQUxFTl07CkBAIC0yMTcsNyArMjE3LDcgQEAKIAlfX2xlMTYgdGltZW91dDsKIAl1OCBlc3NpZF9zaXplOwogCXU4IHJlc2VydmVkOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBzZXRfbWliX2J1ZmZlciB7CiAJdTggdHlwZTsKQEAgLTIyOSw3ICsyMjksNyBAQAogCQlfX2xlMTYgd29yZDsKIAkJdTggYWRkcltFVEhfQUxFTl07CiAJfSBkYXRhOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBtaWJfbG9jYWwgewogCXUxNiByZXNlcnZlZDA7CkBAIC0yNDEsMTQgKzI0MSwxNCBAQAogCXUxNiByZXNlcnZlZDI7CiAJdTggcHJlYW1ibGVfdHlwZTsKIAl1MTYgcmVzZXJ2ZWQzOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBtaWJfbWFjX2FkZHIgewogCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKIAl1OCByZXNbMl07CQkvKiA/Pz8gKi8KIAl1OCBncm91cF9hZGRyWzRdW0VUSF9BTEVOXTsKIAl1OCBncm91cF9hZGRyX3N0YXR1c1s0XTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbWliX21hYyB7CiAJX19sZTMyIG1heF90eF9tc2R1X2xpZmV0aW1lOwpAQCAtMjY5LDcgKzI2OSw3IEBACiAJdTggZGVzaXJlZF9ic3NpZFtFVEhfQUxFTl07CiAJdTggZGVzaXJlZF9ic3N0eXBlOwkvKiBhZC1ob2Mgb3IgaW5mcmFzdHJ1Y3R1cmUgKi8KIAl1OCByZXNlcnZlZDI7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IG1pYl9tYWNfbWdtdCB7CiAJX19sZTE2IGJlYWNvbl9wZXJpb2Q7CkBAIC0yOTIsNyArMjkyLDcgQEAKIAl1OCBtdWx0aV9kb21haW5fY2FwYWJpbGl0eV9lbmFibGVkOwogCXU4IGNvdW50cnlfc3RyaW5nWzNdOwogCXU4IHJlc2VydmVkWzNdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBtaWJfbWFjX3dlcCB7CiAJdTggcHJpdmFjeV9pbnZva2VkOwkvKiAwIGRpc2FibGUgZW5jci4sIDEgZW5hYmxlIGVuY3IgKi8KQEAgLTMwMyw3ICszMDMsNyBAQAogCV9fbGUzMiB3ZXBfZXhjbHVkZWRfY291bnQ7CiAJdTggd2VwX2RlZmF1bHRfa2V5dmFsdWVbV0VQX0tFWVNdW1dFUF9MQVJHRV9LRVlfTEVOXTsKIAl1OCBlbmNyeXB0aW9uX2xldmVsOwkvKiAxIGZvciA0MGJpdCwgMiBmb3IgMTA0Yml0IGVuY3J5cHRpb24gKi8KLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbWliX3BoeSB7CiAJX19sZTMyIGVkX3RocmVzaG9sZDsKQEAgLTMyMCwxOSArMzIwLDE5IEBACiAJdTggY3VycmVudF9jY2FfbW9kZTsKIAl1OCBwaHlfdHlwZTsKIAl1OCBjdXJyZW50X3JlZ19kb21haW47Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IG1pYl9md192ZXJzaW9uIHsKIAl1OCBtYWpvcjsKIAl1OCBtaW5vcjsKIAl1OCBwYXRjaDsKIAl1OCBidWlsZDsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbWliX21kb21haW4gewogCXU4IHR4X3Bvd2VybGV2ZWxbMTRdOwogCXU4IGNoYW5uZWxfbGlzdFsxNF07CS8qIDAgZm9yIGludmFsaWQgY2hhbm5lbHMgKi8KLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYXQ3Nl9md19oZWFkZXIgewogCV9fbGUzMiBjcmM7CQkvKiBDUkMzMiBvZiB0aGUgd2hvbGUgaW1hZ2UgKi8KQEAgLTM0Niw3ICszNDYsNyBAQAogCV9fbGUzMiBpbnRfZndfbGVuOwkvKiBpbnRlcm5hbCBmaXJtd2FyZSBpbWFnZSBsZW5ndGggKi8KIAlfX2xlMzIgZXh0X2Z3X29mZnNldDsJLyogZXh0ZXJuYWwgZmlybXdhcmUgaW1hZ2Ugb2Zmc2V0ICovCiAJX19sZTMyIGV4dF9md19sZW47CS8qIGV4dGVybmFsIGZpcm13YXJlIGltYWdlIGxlbmd0aCAqLwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIGEgZGVzY3JpcHRpb24gb2YgYSByZWd1bGF0b3J5IGRvbWFpbiBhbmQgdGhlIGFsbG93ZWQgY2hhbm5lbHMgKi8KIHN0cnVjdCByZWdfZG9tYWluIHsKQEAgLTM4Nyw2ICszODcsNyBAQAogCS8qIHdvcmsgcXVldWVzICovCiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfc2V0X3Byb21pc2M7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfc3VibWl0X3J4OworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX2pvaW5fYnNzaWQ7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBkd29ya19od19zY2FuOwogCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IHJ4X3Rhc2tsZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2NtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9jbWQuYwppbmRleCBjZjZmNWM0Li40NjA0ZGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2NtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvY21kLmMKQEAgLTQ4LDggKzQ4LDcgQEAKIAogCWVyciA9IGFyLT5leGVjX2NtZChhciwgQVI5MTcwX0NNRF9XTUVNLCBsZW4sICh1OCAqKSBkYXRhLCAwLCBOVUxMKTsKIAlpZiAoZXJyKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHdyaXRpbmcgbWVtb3J5IGZhaWxlZFxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSkpOworCQl3aXBoeV9kZWJ1Zyhhci0+aHctPndpcGh5LCAid3JpdGluZyBtZW1vcnkgZmFpbGVkXG4iKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC02Nyw4ICs2Niw4IEBACiAJZXJyID0gYXItPmV4ZWNfY21kKGFyLCBBUjkxNzBfQ01EX1dSRUcsIHNpemVvZihidWYpLAogCQkJICAgKHU4ICopIGJ1ZiwgMCwgTlVMTCk7CiAJaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB3cml0aW5nIHJlZyAlI3ggKHZhbCAlI3gpIGZhaWxlZFxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIHJlZywgdmFsKTsKKwkJd2lwaHlfZGVidWcoYXItPmh3LT53aXBoeSwgIndyaXRpbmcgcmVnICUjeCAodmFsICUjeCkgZmFpbGVkXG4iLAorCQkJICAgIHJlZywgdmFsKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2xlZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9sZWQuYwppbmRleCA4NmM0ZTc5Li44MzJkOTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2xlZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvbGVkLmMKQEAgLTEzMyw4ICsxMzMsOCBAQAogCWVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3Rlcih3aXBoeV9kZXYoYXItPmh3LT53aXBoeSksCiAJCQkJICAgICZhci0+bGVkc1tpXS5sKTsKIAlpZiAoZXJyKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgJXMgTEVEICglZCkuXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgYXItPmxlZHNbaV0ubmFtZSwgZXJyKTsKKwkJd2lwaHlfZXJyKGFyLT5ody0+d2lwaHksICJmYWlsZWQgdG8gcmVnaXN0ZXIgJXMgTEVEICglZCkuXG4iLAorCQkJICBhci0+bGVkc1tpXS5uYW1lLCBlcnIpOwogCWVsc2UKIAkJYXItPmxlZHNbaV0ucmVnaXN0ZXJlZCA9IHRydWU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWluLmMKaW5kZXggMmFiYzg3NS4uYzY3YjA1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWluLmMKQEAgLTE5OCwxMiArMTk4LDEzIEBACiAJc3RydWN0IGFyOTE3MF90eF9pbmZvICphcmluZm8gPSAodm9pZCAqKSB0eGluZm8tPnJhdGVfZHJpdmVyX2RhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopIHR4Yy0+ZnJhbWVfZGF0YTsKIAotCXByaW50ayhLRVJOX0RFQlVHICIlczogPT4gRlJBTUUgW3NrYjolcCwgcTolZCwgREE6WyVwTV0gczolZCAiCi0JCQkgICJtYWNfY3RybDolMDR4LCBwaHlfY3RybDolMDh4LCB0aW1lb3V0OlslZCBtc11dXG4iLAotCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBza2IsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpLAotCSAgICAgICBpZWVlODAyMTFfZ2V0X0RBKGhkciksIGFyOTE3MF9nZXRfc2VxX2goaGRyKSwKLQkgICAgICAgbGUxNl90b19jcHUodHhjLT5tYWNfY29udHJvbCksIGxlMzJfdG9fY3B1KHR4Yy0+cGh5X2NvbnRyb2wpLAotCSAgICAgICBqaWZmaWVzX3RvX21zZWNzKGFyaW5mby0+dGltZW91dCAtIGppZmZpZXMpKTsKKwl3aXBoeV9kZWJ1Zyhhci0+aHctPndpcGh5LAorCQkgICAgIj0+IEZSQU1FIFtza2I6JXAsIHE6JWQsIERBOlslcE1dIHM6JWQgIgorCQkgICAgIm1hY19jdHJsOiUwNHgsIHBoeV9jdHJsOiUwOHgsIHRpbWVvdXQ6WyVkIG1zXV1cbiIsCisJCSAgICBza2IsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpLAorCQkgICAgaWVlZTgwMjExX2dldF9EQShoZHIpLCBhcjkxNzBfZ2V0X3NlcV9oKGhkciksCisJCSAgICBsZTE2X3RvX2NwdSh0eGMtPm1hY19jb250cm9sKSwgbGUzMl90b19jcHUodHhjLT5waHlfY29udHJvbCksCisJCSAgICBqaWZmaWVzX3RvX21zZWNzKGFyaW5mby0+dGltZW91dCAtIGppZmZpZXMpKTsKIH0KIAogc3RhdGljIHZvaWQgX19hcjkxNzBfZHVtcF90eHF1ZXVlKHN0cnVjdCBhcjkxNzAgKmFyLApAQCAtMjEzLDggKzIxNCw4IEBACiAJaW50IGkgPSAwOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIi0tLVsgY3V0IGhlcmUgXS0tLVxuIik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlZCBlbnRyaWVzIGluIHF1ZXVlLlxuIiwKLQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgc2tiX3F1ZXVlX2xlbihxdWV1ZSkpOworCXdpcGh5X2RlYnVnKGFyLT5ody0+d2lwaHksICIlZCBlbnRyaWVzIGluIHF1ZXVlLlxuIiwKKwkJICAgIHNrYl9xdWV1ZV9sZW4ocXVldWUpKTsKIAogCXNrYl9xdWV1ZV93YWxrKHF1ZXVlLCBza2IpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgImluZGV4OiVkID0+XG4iLCBpKyspOwpAQCAtMjQ0LDE1ICsyNDUsMTQgQEAKIHsKIAlpbnQgaTsKIAotCXByaW50ayhLRVJOX0RFQlVHICIlczogUW9TIHF1ZXVlIHN0YXRzXG4iLAotCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpKTsKKwl3aXBoeV9kZWJ1Zyhhci0+aHctPndpcGh5LCAicW9zIHF1ZXVlIHN0YXRzXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBfX0FSOTE3MF9OVU1fVFhROyBpKyspCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogcXVldWU6JWQgbGltaXQ6JWQgbGVuOiVkIHdhaXRhY2s6JWQgIgotCQkgICAgICAgIiBzdG9wcGVkOiVkXG4iLCB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBpLAotCQkgICAgICAgYXItPnR4X3N0YXRzW2ldLmxpbWl0LCBhci0+dHhfc3RhdHNbaV0ubGVuLAotCQkgICAgICAgc2tiX3F1ZXVlX2xlbigmYXItPnR4X3N0YXR1c1tpXSksCi0JCSAgICAgICBpZWVlODAyMTFfcXVldWVfc3RvcHBlZChhci0+aHcsIGkpKTsKKwkJd2lwaHlfZGVidWcoYXItPmh3LT53aXBoeSwKKwkJCSAgICAicXVldWU6JWQgbGltaXQ6JWQgbGVuOiVkIHdhaXRhY2s6JWQgc3RvcHBlZDolZFxuIiwKKwkJCSAgICBpLCBhci0+dHhfc3RhdHNbaV0ubGltaXQsIGFyLT50eF9zdGF0c1tpXS5sZW4sCisJCQkgICAgc2tiX3F1ZXVlX2xlbigmYXItPnR4X3N0YXR1c1tpXSksCisJCQkgICAgaWVlZTgwMjExX3F1ZXVlX3N0b3BwZWQoYXItPmh3LCBpKSk7CiB9CiAjZW5kaWYgLyogQVI5MTcwX1FVRVVFX1NUT1BfREVCVUcgKi8KIApAQCAtMjc0LDkgKzI3NCw5IEBACiAKIAkJaWYgKHRpbWVfaXNfYmVmb3JlX2ppZmZpZXMoYXJpbmZvLT50aW1lb3V0KSkgewogI2lmZGVmIEFSOTE3MF9RVUVVRV9ERUJVRwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBbJWxkID4gJWxkXSBmcmFtZSBleHBpcmVkID0+ICIKLQkJCSAgICAgICAicmVjeWNsZVxuIiwgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwKLQkJCSAgICAgICBqaWZmaWVzLCBhcmluZm8tPnRpbWVvdXQpOworCQkJd2lwaHlfZGVidWcoYXItPmh3LT53aXBoeSwKKwkJCQkgICAgIlslbGQgPiAlbGRdIGZyYW1lIGV4cGlyZWQgPT4gcmVjeWNsZVxuIiwKKwkJCQkgICAgamlmZmllcywgYXJpbmZvLT50aW1lb3V0KTsKIAkJCWFyOTE3MF9wcmludF90eGhlYWRlcihhciwgc2tiKTsKICNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfREVCVUcgKi8KIAkJCV9fc2tiX3VubGluayhza2IsIHF1ZXVlKTsKQEAgLTMxNyw4ICszMTcsOCBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgdHhfc3RhdHVzIHJlc3BvbnNlICgleCkuXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgdHhfc3RhdHVzKTsKKwkJd2lwaHlfZXJyKGFyLT5ody0+d2lwaHksCisJCQkgICJpbnZhbGlkIHR4X3N0YXR1cyByZXNwb25zZSAoJXgpXG4iLCB0eF9zdGF0dXMpOwogCQlicmVhazsKIAl9CiAKQEAgLTMzOSw4ICszMzksNyBAQAogCiAJaWYgKGFyLT50eF9zdGF0c1txdWV1ZV0ubGVuIDwgQVI5MTcwX05VTV9UWF9MSU1JVF9TT0ZUKSB7CiAjaWZkZWYgQVI5MTcwX1FVRVVFX1NUT1BfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB3YWtlIHF1ZXVlICVkXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgcXVldWUpOworCQl3aXBoeV9kZWJ1Zyhhci0+aHctPndpcGh5LCAid2FrZSBxdWV1ZSAlZFxuIiwgcXVldWUpOwogCQlfX2FyOTE3MF9kdW1wX3R4c3RhdHMoYXIpOwogI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9TVE9QX0RFQlVHICovCiAJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGFyLT5odywgcXVldWUpOwpAQCAtMzg3LDkgKzM4Niw5IEBACiAKIAkJaWYgKG1hYyAmJiBjb21wYXJlX2V0aGVyX2FkZHIoaWVlZTgwMjExX2dldF9EQShoZHIpLCBtYWMpKSB7CiAjaWZkZWYgQVI5MTcwX1FVRVVFX0RFQlVHCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHNraXAgZnJhbWUgPT4gREEgJXBNICE9ICVwTVxuIiwKLQkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBtYWMsCi0JCQkgICAgICAgaWVlZTgwMjExX2dldF9EQShoZHIpKTsKKwkJCXdpcGh5X2RlYnVnKGFyLT5ody0+d2lwaHksCisJCQkJICAgICJza2lwIGZyYW1lID0+IGRhICVwbSAhPSAlcG1cbiIsCisJCQkJICAgIG1hYywgaWVlZTgwMjExX2dldF9EQShoZHIpKTsKIAkJCWFyOTE3MF9wcmludF90eGhlYWRlcihhciwgc2tiKTsKICNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfREVCVUcgKi8KIAkJCWNvbnRpbnVlOwpAQCAtNDAwLDggKzM5OSw4IEBACiAKIAkJaWYgKChyYXRlICE9IEFSOTE3MF9UWF9JTlZBTElEX1JBVEUpICYmIChyICE9IHJhdGUpKSB7CiAjaWZkZWYgQVI5MTcwX1FVRVVFX0RFQlVHCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHNraXAgZnJhbWUgPT4gcmF0ZSAlZCAhPSAlZFxuIiwKLQkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCByYXRlLCByKTsKKwkJCXdpcGh5X2RlYnVnKGFyLT5ody0+d2lwaHksCisJCQkJICAgICJza2lwIGZyYW1lID0+IHJhdGUgJWQgIT0gJWRcbiIsIHJhdGUsIHIpOwogCQkJYXI5MTcwX3ByaW50X3R4aGVhZGVyKGFyLCBza2IpOwogI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLwogCQkJY29udGludWU7CkBAIC00MTMsOSArNDEyLDkgQEAKIAl9CiAKICNpZmRlZiBBUjkxNzBfUVVFVUVfREVCVUcKLQlwcmludGsoS0VSTl9FUlIgIiVzOiBFU1M6WyVwTV0gZG9lcyBub3QgaGF2ZSBhbnkgIgotCQkJIm91dHN0YW5kaW5nIGZyYW1lcyBpbiBxdWV1ZS5cbiIsCi0JCQl3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBtYWMpOworCXdpcGh5X2Vycihhci0+aHctPndpcGh5LAorCQkgICJFU1M6WyVwTV0gZG9lcyBub3QgaGF2ZSBhbnkgb3V0c3RhbmRpbmcgZnJhbWVzIGluIHF1ZXVlLlxuIiwKKwkJICBtYWMpOwogCV9fYXI5MTcwX2R1bXBfdHhxdWV1ZShhciwgcXVldWUpOwogI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnF1ZXVlLT5sb2NrLCBmbGFncyk7CkBAIC00NDQsOCArNDQzLDggQEAKIAogCWZvciAoaSA9IDA7IGkgPCBfX0FSOTE3MF9OVU1fVFhROyBpKyspIHsKICNpZmRlZiBBUjkxNzBfUVVFVUVfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBnYXJiYWdlIGNvbGxlY3RvciBzY2FucyBxdWV1ZTolZFxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIGkpOworCQl3aXBoeV9kZWJ1Zyhhci0+aHctPndpcGh5LCAiZ2FyYmFnZSBjb2xsZWN0b3Igc2NhbnMgcXVldWU6JWRcbiIsCisJCQkgICAgaSk7CiAJCWFyOTE3MF9kdW1wX3R4cXVldWUoYXIsICZhci0+dHhfcGVuZGluZ1tpXSk7CiAJCWFyOTE3MF9kdW1wX3R4cXVldWUoYXIsICZhci0+dHhfc3RhdHVzW2ldKTsKICNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfREVCVUcgKi8KQEAgLTQ5NSw4ICs0OTQsOSBAQAogCQl1MzIgcSA9IChwaHkgJiBBUjkxNzBfVFhfUEhZX1FPU19NQVNLKSA+PgogCQkJQVI5MTcwX1RYX1BIWV9RT1NfU0hJRlQ7CiAjaWZkZWYgQVI5MTcwX1FVRVVFX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogcmVjdiB0eF9zdGF0dXMgZm9yICVwTSwgcDolMDh4LCBxOiVkXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgY21kLT50eF9zdGF0dXMuZHN0LCBwaHksIHEpOworCQl3aXBoeV9kZWJ1Zyhhci0+aHctPndpcGh5LAorCQkJICAgICJyZWN2IHR4X3N0YXR1cyBmb3IgJXBtLCBwOiUwOHgsIHE6JWRcbiIsCisJCQkgICAgY21kLT50eF9zdGF0dXMuZHN0LCBwaHksIHEpOwogI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLwogCiAJCXNrYiA9IGFyOTE3MF9nZXRfcXVldWVkX3NrYihhciwgY21kLT50eF9zdGF0dXMuZHN0LApAQCAtNTgyLDcgKzU4Miw3IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fSU5GTyAicmVjZWl2ZWQgdW5oYW5kbGVkIGV2ZW50ICV4XG4iLCBjbWQtPnR5cGUpOworCQlwcl9pbmZvKCJyZWNlaXZlZCB1bmhhbmRsZWQgZXZlbnQgJXhcbiIsIGNtZC0+dHlwZSk7CiAJCXByaW50X2hleF9kdW1wX2J5dGVzKCJkdW1wOiIsIERVTVBfUFJFRklYX05PTkUsIGJ1ZiwgbGVuKTsKIAkJYnJlYWs7CiAJfQpAQCAtNjc1LDkgKzY3NSw5IEBACiAJCS8qIFRPRE86IHVwZGF0ZSBuZXRkZXZpY2UncyBSWCBkcm9wcGVkL2Vycm9ycyBzdGF0aXN0aWNzICovCiAKIAkJaWYgKGFyOTE3MF9uYWdfbGltaXRlcihhcikpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlY2VpdmVkIGZyYW1lIHdpdGggIgotCQkJICAgICAgICJzdXNwaWNpb3VzIGVycm9yIGNvZGUgKCUjeCkuXG4iLAotCQkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIGVycm9yKTsKKwkJCXdpcGh5X2RlYnVnKGFyLT5ody0+d2lwaHksCisJCQkJICAgICJyZWNlaXZlZCBmcmFtZSB3aXRoIHN1c3BpY2lvdXMgZXJyb3IgY29kZSAoJSN4KS5cbiIsCisJCQkJICAgIGVycm9yKTsKIAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC03MDQsOSArNzA0LDkgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJaWYgKGFyOTE3MF9uYWdfbGltaXRlcihhcikpCi0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBwbGNwIGNjayByYXRlICIKLQkJCQkgICAgICAgIigleCkuXG4iLCB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLAotCQkJCSAgICAgICBoZWFkLT5wbGNwWzBdKTsKKwkJCQl3aXBoeV9lcnIoYXItPmh3LT53aXBoeSwKKwkJCQkJICAiaW52YWxpZCBwbGNwIGNjayByYXRlICgleCkuXG4iLAorCQkJCQkgIGhlYWQtPnBsY3BbMF0pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJYnJlYWs7CkBAIC03NDAsOSArNzQwLDkgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJaWYgKGFyOTE3MF9uYWdfbGltaXRlcihhcikpCi0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBwbGNwIG9mZG0gcmF0ZSAiCi0JCQkJICAgICAgICIoJXgpLlxuIiwgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwKLQkJCQkgICAgICAgaGVhZC0+cGxjcFswXSk7CisJCQkJd2lwaHlfZXJyKGFyLT5ody0+d2lwaHksCisJCQkJCSAgImludmFsaWQgcGxjcCBvZmRtIHJhdGUgKCV4KS5cbiIsCisJCQkJCSAgaGVhZC0+cGxjcFswXSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlpZiAoc3RhdHVzLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopCkBAIC03NjEsOCArNzYxLDcgQEAKIAogCWRlZmF1bHQ6CiAJCWlmIChhcjkxNzBfbmFnX2xpbWl0ZXIoYXIpKQotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBtb2R1bGF0aW9uXG4iLAotCQkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSkpOworCQkJd2lwaHlfZXJyKGFyLT5ody0+d2lwaHksICJpbnZhbGlkIG1vZHVsYXRpb25cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTg2Myw4ICs4NjIsOCBAQAogCQkJYXItPnJ4X21wZHUuaGFzX3BsY3AgPSB0cnVlOwogCQl9IGVsc2UgewogCQkJaWYgKGFyOTE3MF9uYWdfbGltaXRlcihhcikpCi0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogcGxjcCBpbmZvIGlzIGNsaXBwZWQuXG4iLAotCQkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpKTsKKwkJCQl3aXBoeV9lcnIoYXItPmh3LT53aXBoeSwKKwkJCQkJICAicGxjcCBpbmZvIGlzIGNsaXBwZWQuXG4iKTsKIAkJCXJldHVybiA7CiAJCX0KIAkJYnJlYWs7CkBAIC04NzcsOCArODc2LDggQEAKIAkJCXBoeSA9ICh2b2lkICopKGJ1ZiArIG1wZHVfbGVuKTsKIAkJfSBlbHNlIHsKIAkJCWlmIChhcjkxNzBfbmFnX2xpbWl0ZXIoYXIpKQotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZyYW1lIHRhaWwgaXMgY2xpcHBlZC5cbiIsCi0JCQkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSkpOworCQkJCXdpcGh5X2Vycihhci0+aHctPndpcGh5LAorCQkJCQkgICJmcmFtZSB0YWlsIGlzIGNsaXBwZWQuXG4iKTsKIAkJCXJldHVybiA7CiAJCX0KIApAQCAtODg4LDkgKzg4Nyw4IEBACiAJCQlpZiAoIWFyOTE3MF9uYWdfbGltaXRlcihhcikpCiAJCQkJcmV0dXJuIDsKIAotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogcnggc3RyZWFtIGRpZCBub3Qgc3RhcnQgIgotCQkJCQkid2l0aCBhIGZpcnN0X21wZHUgZnJhbWUgdGFnLlxuIiwKLQkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpKTsKKwkJCXdpcGh5X2Vycihhci0+aHctPndpcGh5LAorCQkJCSAgInJ4IHN0cmVhbSBkaWQgbm90IHN0YXJ0IHdpdGggYSBmaXJzdF9tcGR1IGZyYW1lIHRhZy5cbiIpOwogCiAJCQlyZXR1cm4gOwogCQl9CkBAIC05NTQsOCArOTUyLDggQEAKIAkJCWlmICghYXItPnJ4X2ZhaWxvdmVyX21pc3NpbmcpIHsKIAkJCQkvKiB0aGlzIGlzIG5vICJzaG9ydCByZWFkIi4gKi8KIAkJCQlpZiAoYXI5MTcwX25hZ19saW1pdGVyKGFyKSkgewotCQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBtaXNzaW5nIHRhZyFcbiIsCi0JCQkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpKTsKKwkJCQkJd2lwaHlfZXJyKGFyLT5ody0+d2lwaHksCisJCQkJCQkgICJtaXNzaW5nIHRhZyFcbiIpOwogCQkJCQlnb3RvIGVycl90ZWxsdXNlcjsKIAkJCQl9IGVsc2UKIAkJCQkJZ290byBlcnJfc2lsZW50OwpAQCAtOTYzLDkgKzk2MSw4IEBACiAKIAkJCWlmIChhci0+cnhfZmFpbG92ZXJfbWlzc2luZyA+IHRsZW4pIHsKIAkJCQlpZiAoYXI5MTcwX25hZ19saW1pdGVyKGFyKSkgewotCQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBwb3NzaWJsZSBtdWx0aSAiCi0JCQkJCSAgICAgICAic3RyZWFtIGNvcnJ1cHRpb24hXG4iLAotCQkJCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSk7CisJCQkJCXdpcGh5X2Vycihhci0+aHctPndpcGh5LAorCQkJCQkJICAicG9zc2libGUgbXVsdGkgc3RyZWFtIGNvcnJ1cHRpb24hXG4iKTsKIAkJCQkJZ290byBlcnJfdGVsbHVzZXI7CiAJCQkJfSBlbHNlCiAJCQkJCWdvdG8gZXJyX3NpbGVudDsKQEAgLTk5Nyw5ICs5OTQsOCBAQAogCQkJaWYgKGFyLT5yeF9mYWlsb3Zlcl9taXNzaW5nKSB7CiAJCQkJLyogVE9ETzogaGFuZGxlIGRvdWJsZSBzdHJlYW0gY29ycnVwdGlvbi4gKi8KIAkJCQlpZiAoYXI5MTcwX25hZ19saW1pdGVyKGFyKSkgewotCQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkb3VibGUgcnggc3RyZWFtICIKLQkJCQkJICAgICAgICJjb3JydXB0aW9uIVxuIiwKLQkJCQkJCXdpcGh5X25hbWUoYXItPmh3LT53aXBoeSkpOworCQkJCQl3aXBoeV9lcnIoYXItPmh3LT53aXBoeSwKKwkJCQkJCSAgImRvdWJsZSByeCBzdHJlYW0gY29ycnVwdGlvbiFcbiIpOwogCQkJCQlnb3RvIGVycl90ZWxsdXNlcjsKIAkJCQl9IGVsc2UKIAkJCQkJZ290byBlcnJfc2lsZW50OwpAQCAtMTA0Miw5ICsxMDM4LDkgQEAKIAogCWlmICh0bGVuKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlZCBieXRlcyBvZiB1bnByb2Nlc3NlZCAiCi0JCQkJCSJkYXRhIGxlZnQgaW4gcnggc3RyZWFtIVxuIiwKLQkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCB0bGVuKTsKKwkJCXdpcGh5X2Vycihhci0+aHctPndpcGh5LAorCQkJCSAgIiVkIGJ5dGVzIG9mIHVucHJvY2Vzc2VkIGRhdGEgbGVmdCBpbiByeCBzdHJlYW0hXG4iLAorCQkJCSAgdGxlbik7CiAKIAkJZ290byBlcnJfdGVsbHVzZXI7CiAJfQpAQCAtMTA1MiwxMCArMTA0OCw5IEBACiAJcmV0dXJuIDsKIAogZXJyX3RlbGx1c2VyOgotCXByaW50ayhLRVJOX0VSUiAiJXM6IGRhbWFnZWQgUlggc3RyZWFtIGRhdGEgW3dhbnQ6JWQsICIKLQkJCSJkYXRhOiVkLCByeDolZCwgcGVuZGluZzolZCBdXG4iLAotCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBjbGVuLCB3bGVuLCB0bGVuLAotCSAgICAgICBhci0+cnhfZmFpbG92ZXJfbWlzc2luZyk7CisJd2lwaHlfZXJyKGFyLT5ody0+d2lwaHksCisJCSAgImRhbWFnZWQgUlggc3RyZWFtIGRhdGEgW3dhbnQ6JWQsIGRhdGE6JWQsIHJ4OiVkLCBwZW5kaW5nOiVkIF1cbiIsCisJCSAgY2xlbiwgd2xlbiwgdGxlbiwgYXItPnJ4X2ZhaWxvdmVyX21pc3NpbmcpOwogCiAJaWYgKGFyLT5yeF9mYWlsb3Zlcl9taXNzaW5nKQogCQlwcmludF9oZXhfZHVtcF9ieXRlcygicnhidWY6IiwgRFVNUF9QUkVGSVhfT0ZGU0VULApAQCAtMTA2NSw5ICsxMDYwLDggQEAKIAlwcmludF9oZXhfZHVtcF9ieXRlcygic3RyZWFtOiIsIERVTVBfUFJFRklYX09GRlNFVCwKIAkJCSAgICAgc2tiLT5kYXRhLCBza2ItPmxlbik7CiAKLQlwcmludGsoS0VSTl9FUlIgIiVzOiBwbGVhc2UgY2hlY2sgeW91ciBoYXJkd2FyZSBhbmQgY2FibGVzLCBpZiAiCi0JCQkieW91IHNlZSB0aGlzIG1lc3NhZ2UgZnJlcXVlbnRseS5cbiIsCi0JICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSkpOworCXdpcGh5X2Vycihhci0+aHctPndpcGh5LAorCQkgICJJZiB5b3Ugc2VlIHRoaXMgbWVzc2FnZSBmcmVxdWVudGx5LCBwbGVhc2UgY2hlY2sgeW91ciBoYXJkd2FyZSBhbmQgY2FibGVzLlxuIik7CiAKIGVycl9zaWxlbnQ6CiAJaWYgKGFyLT5yeF9mYWlsb3Zlcl9taXNzaW5nKSB7CkBAIC0xMzg0LDEwICsxMzc4LDEwIEBACiAKIAkJaWYgKHJlbWFpbmluZ19zcGFjZSA8IGZyYW1lcykgewogI2lmZGVmIEFSOTE3MF9RVUVVRV9ERUJVRwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eCBxdW90YSByZWFjaGVkIHF1ZXVlOiVkLCAiCi0JCQkgICAgICAgInJlbWFpbmluZyBzbG90czolZCwgbmVlZGVkOiVkXG4iLAotCQkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIGksIHJlbWFpbmluZ19zcGFjZSwKLQkJCSAgICAgICBmcmFtZXMpOworCQkJd2lwaHlfZGVidWcoYXItPmh3LT53aXBoeSwKKwkJCQkgICAgInR4IHF1b3RhIHJlYWNoZWQgcXVldWU6JWQsICIKKwkJCQkgICAgInJlbWFpbmluZyBzbG90czolZCwgbmVlZGVkOiVkXG4iLAorCQkJCSAgICBpLCByZW1haW5pbmdfc3BhY2UsIGZyYW1lcyk7CiAjZW5kaWYgLyogQVI5MTcwX1FVRVVFX0RFQlVHICovCiAJCQlmcmFtZXMgPSByZW1haW5pbmdfc3BhY2U7CiAJCX0KQEAgLTEzOTYsMTggKzEzOTAsMTQgQEAKIAkJYXItPnR4X3N0YXRzW2ldLmNvdW50ICs9IGZyYW1lczsKIAkJaWYgKGFyLT50eF9zdGF0c1tpXS5sZW4gPj0gYXItPnR4X3N0YXRzW2ldLmxpbWl0KSB7CiAjaWZkZWYgQVI5MTcwX1FVRVVFX0RFQlVHCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHF1ZXVlICVkIGZ1bGxcbiIsCi0JCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgaSk7Ci0KLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogc3R1Y2sgZnJhbWVzOiA9PT0+XG4iLAotCQkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSkpOworCQkJd2lwaHlfZGVidWcoYXItPmh3LT53aXBoeSwgInF1ZXVlICVkIGZ1bGxcbiIsIGkpOworCQkJd2lwaHlfZGVidWcoYXItPmh3LT53aXBoeSwgInN0dWNrIGZyYW1lczogPT09PlxuIik7CiAJCQlhcjkxNzBfZHVtcF90eHF1ZXVlKGFyLCAmYXItPnR4X3BlbmRpbmdbaV0pOwogCQkJYXI5MTcwX2R1bXBfdHhxdWV1ZShhciwgJmFyLT50eF9zdGF0dXNbaV0pOwogI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLwogCiAjaWZkZWYgQVI5MTcwX1FVRVVFX1NUT1BfREVCVUcKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogc3RvcCBxdWV1ZSAlZFxuIiwKLQkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBpKTsKKwkJCXdpcGh5X2RlYnVnKGFyLT5ody0+d2lwaHksICJzdG9wIHF1ZXVlICVkXG4iLCBpKTsKIAkJCV9fYXI5MTcwX2R1bXBfdHhzdGF0cyhhcik7CiAjZW5kaWYgLyogQVI5MTcwX1FVRVVFX1NUT1BfREVCVUcgKi8KIAkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGFyLT5odywgaSk7CkBAIC0xNDM1LDggKzE0MjUsNyBAQAogCQkJCQkgIG1zZWNzX3RvX2ppZmZpZXMoQVI5MTcwX1RYX1RJTUVPVVQpOwogCiAjaWZkZWYgQVI5MTcwX1FVRVVFX0RFQlVHCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHNlbmQgZnJhbWUgcTolZCA9PlxuIiwKLQkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBpKTsKKwkJCXdpcGh5X2RlYnVnKGFyLT5ody0+d2lwaHksICJzZW5kIGZyYW1lIHE6JWQgPT5cbiIsIGkpOwogCQkJYXI5MTcwX3ByaW50X3R4aGVhZGVyKGFyLCBza2IpOwogI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLwogCkBAIC0xNDUzLDI2ICsxNDQyLDI1IEBACiAJCX0KIAogI2lmZGVmIEFSOTE3MF9RVUVVRV9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGFyOTE3MF90eCByZXBvcnQgZm9yIHF1ZXVlICVkXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgaSk7CisJCXdpcGh5X2RlYnVnKGFyLT5ody0+d2lwaHksCisJCQkgICAgImFyOTE3MF90eCByZXBvcnQgZm9yIHF1ZXVlICVkXG4iLCBpKTsKIAotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHVucHJvY2Vzc2VkIHBlbmRpbmcgZnJhbWVzIGxlZnQ6XG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSk7CisJCXdpcGh5X2RlYnVnKGFyLT5ody0+d2lwaHksCisJCQkgICAgInVucHJvY2Vzc2VkIHBlbmRpbmcgZnJhbWVzIGxlZnQ6XG4iKTsKIAkJYXI5MTcwX2R1bXBfdHhxdWV1ZShhciwgJmFyLT50eF9wZW5kaW5nW2ldKTsKICNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfREVCVUcgKi8KIAogCQlpZiAodW5saWtlbHkoZnJhbWVzX2ZhaWxlZCkpIHsKICNpZmRlZiBBUjkxNzBfUVVFVUVfREVCVUcKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZnJhbWVzIGZhaWxlZCAlZCA9PlxuIiwKLQkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBmcmFtZXNfZmFpbGVkKTsKKwkJCXdpcGh5X2RlYnVnKGFyLT5ody0+d2lwaHksCisJCQkJICAgICJmcmFtZXMgZmFpbGVkICVkID0+XG4iLCBmcmFtZXNfZmFpbGVkKTsKICNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfREVCVUcgKi8KIAogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7CiAJCQlhci0+dHhfc3RhdHNbaV0ubGVuIC09IGZyYW1lc19mYWlsZWQ7CiAJCQlhci0+dHhfc3RhdHNbaV0uY291bnQgLT0gZnJhbWVzX2ZhaWxlZDsKICNpZmRlZiBBUjkxNzBfUVVFVUVfU1RPUF9ERUJVRwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB3YWtlIHF1ZXVlICVkXG4iLAotCQkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIGkpOworCQkJd2lwaHlfZGVidWcoYXItPmh3LT53aXBoeSwgIndha2UgcXVldWUgJWRcbiIsIGkpOwogCQkJX19hcjkxNzBfZHVtcF90eHN0YXRzKGFyKTsKICNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfU1RPUF9ERUJVRyAqLwogCQkJaWVlZTgwMjExX3dha2VfcXVldWUoYXItPmh3LCBpKTsKQEAgLTE5MTcsNiArMTkwNSwyNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGFyOTE3MF9nZXRfc3VydmV5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaWR4LAorCQkJCXN0cnVjdCBzdXJ2ZXlfaW5mbyAqc3VydmV5KQoreworCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOworCisJaWYgKGlkeCAhPSAwKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCS8qIFRPRE86IHVwZGF0ZSBub2lzZSB2YWx1ZSwgZS5nLiBjYWxsIGFyOTE3MF9zZXRfY2hhbm5lbCAqLworCisJc3VydmV5LT5jaGFubmVsID0gY29uZi0+Y2hhbm5lbDsKKwlzdXJ2ZXktPmZpbGxlZCA9IFNVUlZFWV9JTkZPX05PSVNFX0RCTTsKKwlzdXJ2ZXktPm5vaXNlID0gYXItPm5vaXNlWzBdOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgYXI5MTcwX2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBxdWV1ZSwKIAkJCSAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtKQogewpAQCAtMTk2OSw2ICsxOTc1LDcgQEAKIAkuZ2V0X3RzZgkJPSBhcjkxNzBfb3BfZ2V0X3RzZiwKIAkuc2V0X2tleQkJPSBhcjkxNzBfc2V0X2tleSwKIAkuZ2V0X3N0YXRzCQk9IGFyOTE3MF9nZXRfc3RhdHMsCisJLmdldF9zdXJ2ZXkJCT0gYXI5MTcwX2dldF9zdXJ2ZXksCiAJLmFtcGR1X2FjdGlvbgkJPSBhcjkxNzBfYW1wZHVfYWN0aW9uLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvcGh5LmMKaW5kZXggNDVhNDE1ZS4uMGRiZmNmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL3BoeS5jCkBAIC02NzAsOCArNjcwLDcgQEAKIAlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7CiAJZXJyID0gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOwogCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHJmIGluaXQgZmFpbGVkXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSk7CisJCXdpcGh5X2Vycihhci0+aHctPndpcGh5LCAicmYgaW5pdCBmYWlsZWRcbiIpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE3MDIsOSArMTcwMSw4IEBACiAJCQkJICAgICAgIDB4MjAwIHwgYXItPnBoeV9oZWF2eV9jbGlwKTsKIAkJaWYgKGVycikgewogCQkJaWYgKGFyOTE3MF9uYWdfbGltaXRlcihhcikpCi0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHNldCAiCi0JCQkJICAgICAgICJoZWF2eSBjbGlwXG4iLAotCQkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpKTsKKwkJCQl3aXBoeV9lcnIoYXItPmh3LT53aXBoeSwKKwkJCQkJICAiZmFpbGVkIHRvIHNldCBoZWF2eSBjbGlwXG4iKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL01ha2VmaWxlCmluZGV4IGNjMDk1OTUuLjIyNDJhMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvTWFrZWZpbGUKQEAgLTEzLDUgKzEzLDYgQEAKIGF0aDVrLXkJCQkJKz0gbGVkLm8KIGF0aDVrLXkJCQkJKz0gcmZraWxsLm8KIGF0aDVrLXkJCQkJKz0gYW5pLm8KK2F0aDVrLXkJCQkJKz0gc3lzZnMubwogYXRoNWstJChDT05GSUdfQVRINUtfREVCVUcpCSs9IGRlYnVnLm8KIG9iai0kKENPTkZJR19BVEg1SykJCSs9IGF0aDVrLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hbmkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hbmkuYwppbmRleCBmMjMxMWFiLi4yNmRiZTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYW5pLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2FuaS5jCkBAIC03NCw4ICs3NCw4IEBACiAJY29uc3QgczggZnJbXSA9IHsgLTc4LCAtODAgfTsKICNlbmRpZgogCWlmIChsZXZlbCA8IDAgfHwgbGV2ZWwgPj0gQVJSQVlfU0laRShzeikpIHsKLQkJQVRINUtfREJHX1VOTElNSVQoYWgtPmFoX3NjLCBBVEg1S19ERUJVR19BTkksCi0JCQkibGV2ZWwgb3V0IG9mIHJhbmdlICVkIiwgbGV2ZWwpOworCQlBVEg1S19FUlIoYWgtPmFoX3NjLCAibm9pc2UgaW1tdW5peSBsZXZlbCAlZCBvdXQgb2YgcmFuZ2UiLAorCQkJICBsZXZlbCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEwNiw4ICsxMDYsOCBAQAogCiAJaWYgKGxldmVsIDwgMCB8fCBsZXZlbCA+PSBBUlJBWV9TSVpFKHZhbCkgfHwKIAkgICAgbGV2ZWwgPiBhaC0+YWhfc2MtPmFuaV9zdGF0ZS5tYXhfc3B1cl9sZXZlbCkgewotCQlBVEg1S19EQkdfVU5MSU1JVChhaC0+YWhfc2MsIEFUSDVLX0RFQlVHX0FOSSwKLQkJCSJsZXZlbCBvdXQgb2YgcmFuZ2UgJWQiLCBsZXZlbCk7CisJCUFUSDVLX0VSUihhaC0+YWhfc2MsICJzcHVyIGltbXVuaXR5IGxldmVsICVkIG91dCBvZiByYW5nZSIsCisJCQkgIGxldmVsKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTMwLDggKzEzMCw3IEBACiAJY29uc3QgaW50IHZhbFtdID0geyAwLCA0LCA4IH07CiAKIAlpZiAobGV2ZWwgPCAwIHx8IGxldmVsID49IEFSUkFZX1NJWkUodmFsKSkgewotCQlBVEg1S19EQkdfVU5MSU1JVChhaC0+YWhfc2MsIEFUSDVLX0RFQlVHX0FOSSwKLQkJCSJsZXZlbCBvdXQgb2YgcmFuZ2UgJWQiLCBsZXZlbCk7CisJCUFUSDVLX0VSUihhaC0+YWhfc2MsICJmaXJzdGVwIGxldmVsICVkIG91dCBvZiByYW5nZSIsIGxldmVsKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDgxLDE0ICs0ODAsMTUgQEAKIAlzdHJ1Y3QgYXRoNWtfYW5pX3N0YXRlICphcyA9ICZhaC0+YWhfc2MtPmFuaV9zdGF0ZTsKIAlpbnQgbGlzdGVuLCBvZmRtX2hpZ2gsIG9mZG1fbG93LCBjY2tfaGlnaCwgY2NrX2xvdzsKIAotCWlmIChhcy0+YW5pX21vZGUgIT0gQVRINUtfQU5JX01PREVfQVVUTykKLQkJcmV0dXJuOwotCiAJLyogZ2V0IGxpc3RlbiB0aW1lIHNpbmNlIGxhc3QgY2FsbCBhbmQgYWRkIGl0IHRvIHRoZSBjb3VudGVyIGJlY2F1c2Ugd2UKLQkgKiBtaWdodCBub3QgaGF2ZSByZXN0YXJ0ZWQgdGhlICJhbmkgcGVyaW9kIiBsYXN0IHRpbWUgKi8KKwkgKiBtaWdodCBub3QgaGF2ZSByZXN0YXJ0ZWQgdGhlICJhbmkgcGVyaW9kIiBsYXN0IHRpbWUuCisJICogYWx3YXlzIGRvIHRoaXMgdG8gY2FsY3VsYXRlIHRoZSBidXN5IHRpbWUgYWxzbyBpbiBtYW51YWwgbW9kZSAqLwogCWxpc3RlbiA9IGF0aDVrX2h3X2FuaV9nZXRfbGlzdGVuX3RpbWUoYWgsIGFzKTsKIAlhcy0+bGlzdGVuX3RpbWUgKz0gbGlzdGVuOwogCisJaWYgKGFzLT5hbmlfbW9kZSAhPSBBVEg1S19BTklfTU9ERV9BVVRPKQorCQlyZXR1cm47CisKIAlhdGg1a19hbmlfc2F2ZV9hbmRfY2xlYXJfcGh5X2Vycm9ycyhhaCwgYXMpOwogCiAJb2ZkbV9oaWdoID0gYXMtPmxpc3Rlbl90aW1lICogQVRINUtfQU5JX09GRE1fVFJJR19ISUdIIC8gMTAwMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hdGg1ay5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2F0aDVrLmgKaW5kZXggMjc4NTk0Ni4uZWE2MzYyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2F0aDVrLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2F0aDVrLmgKQEAgLTIwNCw2ICsyMDQsNyBAQAogI2RlZmluZSBBUjVLX1RVTkVfVFBDX1RYUE9XRVIJCQlmYWxzZQogI2RlZmluZSBBVEg1S19UVU5FX0NBTElCUkFUSU9OX0lOVEVSVkFMX0ZVTEwgICAgMTAwMDAgICAvKiAxMCBzZWMgKi8KICNkZWZpbmUgQVRINUtfVFVORV9DQUxJQlJBVElPTl9JTlRFUlZBTF9BTkkJMTAwMAkvKiAxIHNlYyAqLworI2RlZmluZSBBVEg1S19UVU5FX0NBTElCUkFUSU9OX0lOVEVSVkFMX05GCTYwMDAwCS8qIDYwIHNlYyAqLwogCiAjZGVmaW5lIEFSNUtfSU5JVF9DQVJSX1NFTlNFX0VOCQkJMQogCkBAIC01NjUsNyArNTY2LDcgQEAKICkKIAogLyoKLSAqIERNQSBzaXplIGRlZmluaXRpb25zICgyXm4rMikKKyAqIERNQSBzaXplIGRlZmluaXRpb25zICgyXihuKzIpKQogICovCiBlbnVtIGF0aDVrX2RtYXNpemUgewogCUFSNUtfRE1BU0laRV80Qgk9IDAsCkBAIC0xMTE4LDYgKzExMTksNyBAQAogCS8qIENhbGlicmF0aW9uIHRpbWVzdGFtcCAqLwogCXVuc2lnbmVkIGxvbmcJCWFoX2NhbF9uZXh0X2Z1bGw7CiAJdW5zaWduZWQgbG9uZwkJYWhfY2FsX25leHRfYW5pOworCXVuc2lnbmVkIGxvbmcJCWFoX2NhbF9uZXh0X25mOwogCiAJLyogQ2FsaWJyYXRpb24gbWFzayAqLwogCXU4CQkJYWhfY2FsX21hc2s7CkBAIC0xMTI1LDE1ICsxMTI3LDEwIEBACiAJLyoKIAkgKiBGdW5jdGlvbiBwb2ludGVycwogCSAqLwotCWludCAoKmFoX3NldHVwX3J4X2Rlc2MpKHN0cnVjdCBhdGg1a19odyAqYWgsIHN0cnVjdCBhdGg1a19kZXNjICpkZXNjLAotCQkJCXUzMiBzaXplLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwogCWludCAoKmFoX3NldHVwX3R4X2Rlc2MpKHN0cnVjdCBhdGg1a19odyAqLCBzdHJ1Y3QgYXRoNWtfZGVzYyAqLAogCQl1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgaW50LCBlbnVtIGF0aDVrX3BrdF90eXBlLAogCQl1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsCiAJCXVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Ci0JaW50ICgqYWhfc2V0dXBfbXJyX3R4X2Rlc2MpKHN0cnVjdCBhdGg1a19odyAqLCBzdHJ1Y3QgYXRoNWtfZGVzYyAqLAotCQl1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsCi0JCXVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKIAlpbnQgKCphaF9wcm9jX3R4X2Rlc2MpKHN0cnVjdCBhdGg1a19odyAqLCBzdHJ1Y3QgYXRoNWtfZGVzYyAqLAogCQlzdHJ1Y3QgYXRoNWtfdHhfc3RhdHVzICopOwogCWludCAoKmFoX3Byb2NfcnhfZGVzYykoc3RydWN0IGF0aDVrX2h3ICosIHN0cnVjdCBhdGg1a19kZXNjICosCkBAIC0xMTQ4LDYgKzExNDUsOSBAQAogaW50IGF0aDVrX2h3X2F0dGFjaChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKIHZvaWQgYXRoNWtfaHdfZGV0YWNoKHN0cnVjdCBhdGg1a19odyAqYWgpOwogCitpbnQgYXRoNWtfc3lzZnNfcmVnaXN0ZXIoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7Cit2b2lkIGF0aDVrX3N5c2ZzX3VucmVnaXN0ZXIoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CisKIC8qIExFRCBmdW5jdGlvbnMgKi8KIGludCBhdGg1a19pbml0X2xlZHMoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CiB2b2lkIGF0aDVrX2xlZF9lbmFibGUoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CkBAIC0xMjMxLDYgKzEyMzEsMTEgQEAKIAogLyogSGFyZHdhcmUgRGVzY3JpcHRvciBGdW5jdGlvbnMgKi8KIGludCBhdGg1a19od19pbml0X2Rlc2NfZnVuY3Rpb25zKHN0cnVjdCBhdGg1a19odyAqYWgpOworaW50IGF0aDVrX2h3X3NldHVwX3J4X2Rlc2Moc3RydWN0IGF0aDVrX2h3ICphaCwgc3RydWN0IGF0aDVrX2Rlc2MgKmRlc2MsCisJCQkgICB1MzIgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKK2ludCBhdGg1a19od19zZXR1cF9tcnJfdHhfZGVzYyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBzdHJ1Y3QgYXRoNWtfZGVzYyAqZGVzYywKKwl1bnNpZ25lZCBpbnQgdHhfcmF0ZTEsIHVfaW50IHR4X3RyaWVzMSwgdV9pbnQgdHhfcmF0ZTIsCisJdV9pbnQgdHhfdHJpZXMyLCB1bnNpZ25lZCBpbnQgdHhfcmF0ZTMsIHVfaW50IHR4X3RyaWVzMyk7CiAKIC8qIEdQSU8gRnVuY3Rpb25zICovCiB2b2lkIGF0aDVrX2h3X3NldF9sZWRzdGF0ZShzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgc3RhdGUpOwpAQCAtMTI3MCw2ICsxMjc1LDcgQEAKIHZvaWQgYXRoNWtfaHdfaW5pdF9uZmNhbF9oaXN0KHN0cnVjdCBhdGg1a19odyAqYWgpOwogaW50IGF0aDVrX2h3X3BoeV9jYWxpYnJhdGUoc3RydWN0IGF0aDVrX2h3ICphaCwKIAkJCSAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCk7Cit2b2lkIGF0aDVrX2h3X3VwZGF0ZV9ub2lzZV9mbG9vcihzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIC8qIFNwdXIgbWl0aWdhdGlvbiAqLwogYm9vbCBhdGg1a19od19jaGFuX2hhc19zcHVyX25vaXNlKHN0cnVjdCBhdGg1a19odyAqYWgsCiAJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpOwpAQCAtMTI4MCw2ICsxMjg2LDcgQEAKIGludCBhdGg1a19od19waHlfZGlzYWJsZShzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIC8qIEFudGVubmEgY29udHJvbCAqLwogdm9pZCBhdGg1a19od19zZXRfYW50ZW5uYV9tb2RlKHN0cnVjdCBhdGg1a19odyAqYWgsIHU4IGFudF9tb2RlKTsKK3ZvaWQgYXRoNWtfaHdfc2V0X2FudGVubmFfc3dpdGNoKHN0cnVjdCBhdGg1a19odyAqYWgsIHU4IGVlX21vZGUpOwogLyogVFggcG93ZXIgc2V0dXAgKi8KIGludCBhdGg1a19od190eHBvd2VyKHN0cnVjdCBhdGg1a19odyAqYWgsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKIAkJICAgICB1OCBlZV9tb2RlLCB1OCB0eHBvd2VyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hdHRhY2guYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hdHRhY2guYwppbmRleCAzMWMwMDgwLi5iMzJlMjhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYXR0YWNoLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2F0dGFjaC5jCkBAIC0zNTIsOCArMzUyLDYgQEAKICAqLwogdm9pZCBhdGg1a19od19kZXRhY2goc3RydWN0IGF0aDVrX2h3ICphaCkKIHsKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwotCiAJX19zZXRfYml0KEFUSF9TVEFUX0lOVkFMSUQsIGFoLT5haF9zYy0+c3RhdHVzKTsKIAogCWlmIChhaC0+YWhfcmZfYmFua3MgIT0gTlVMTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jCmluZGV4IDY0ODk3MmQuLjBkNWRlMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYwpAQCAtMzExLDcgKzMxMSw4IEBACiBzdGF0aWMgaW50IAlhdGg1a190eGJ1Zl9zZXR1cChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLAogCQkJCXN0cnVjdCBhdGg1a19idWYgKmJmLAogCQkJCXN0cnVjdCBhdGg1a190eHEgKnR4cSwgaW50IHBhZHNpemUpOwotc3RhdGljIGlubGluZSB2b2lkIGF0aDVrX3R4YnVmX2ZyZWUoc3RydWN0IGF0aDVrX3NvZnRjICpzYywKKworc3RhdGljIGlubGluZSB2b2lkIGF0aDVrX3R4YnVmX2ZyZWVfc2tiKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsCiAJCQkJc3RydWN0IGF0aDVrX2J1ZiAqYmYpCiB7CiAJQlVHX09OKCFiZik7CkBAIC0zMjEsOSArMzIyLDExIEBACiAJCQlQQ0lfRE1BX1RPREVWSUNFKTsKIAlkZXZfa2ZyZWVfc2tiX2FueShiZi0+c2tiKTsKIAliZi0+c2tiID0gTlVMTDsKKwliZi0+c2tiYWRkciA9IDA7CisJYmYtPmRlc2MtPmRzX2RhdGEgPSAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoNWtfcnhidWZfZnJlZShzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLAorc3RhdGljIGlubGluZSB2b2lkIGF0aDVrX3J4YnVmX2ZyZWVfc2tiKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsCiAJCQkJc3RydWN0IGF0aDVrX2J1ZiAqYmYpCiB7CiAJc3RydWN0IGF0aDVrX2h3ICphaCA9IHNjLT5haDsKQEAgLTMzNiw2ICszMzksOCBAQAogCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKIAlkZXZfa2ZyZWVfc2tiX2FueShiZi0+c2tiKTsKIAliZi0+c2tiID0gTlVMTDsKKwliZi0+c2tiYWRkciA9IDA7CisJYmYtPmRlc2MtPmRzX2RhdGEgPSAwOwogfQogCiAKQEAgLTM1Miw3ICszNTcsNiBAQAogc3RhdGljIGludCAJYXRoNWtfcnhfc3RhcnQoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CiBzdGF0aWMgdm9pZCAJYXRoNWtfcnhfc3RvcChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYXRoNWtfcnhfZGVjcnlwdGVkKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsCi0JCQkJCXN0cnVjdCBhdGg1a19kZXNjICpkcywKIAkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJc3RydWN0IGF0aDVrX3J4X3N0YXR1cyAqcnMpOwogc3RhdGljIHZvaWQgCWF0aDVrX3Rhc2tsZXRfcngodW5zaWduZWQgbG9uZyBkYXRhKTsKQEAgLTM4NCw3ICszODgsNyBAQAogc3RhdGljIGludCAJYXRoNWtfc3RvcF9sb2NrZWQoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CiBzdGF0aWMgaW50IAlhdGg1a19zdG9wX2h3KHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwogc3RhdGljIGlycXJldHVybl90IGF0aDVrX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKLXN0YXRpYyB2b2lkIAlhdGg1a190YXNrbGV0X3Jlc2V0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgdm9pZCBhdGg1a19yZXNldF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAKIHN0YXRpYyB2b2lkIAlhdGg1a190YXNrbGV0X2NhbGlicmF0ZSh1bnNpZ25lZCBsb25nIGRhdGEpOwogCkBAIC01NzgsNyArNTgyLDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmc2MtPmJsb2NrKTsKIAogCS8qIFNldCBwcml2YXRlIGRhdGEgKi8KLQlwY2lfc2V0X2RydmRhdGEocGRldiwgaHcpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBzYyk7CiAKIAkvKiBTZXR1cCBpbnRlcnJ1cHQgaGFuZGxlciAqLwogCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgYXRoNWtfaW50ciwgSVJRRl9TSEFSRUQsICJhdGgiLCBzYyk7CkBAIC02OTQsMjUgKzY5OCwyMyBAQAogc3RhdGljIHZvaWQgX19kZXZleGl0CiBhdGg1a19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJYXRoNWtfZGVidWdfZmluaXNoX2RldmljZShzYyk7Ci0JYXRoNWtfZGV0YWNoKHBkZXYsIGh3KTsKKwlhdGg1a19kZXRhY2gocGRldiwgc2MtPmh3KTsKIAlhdGg1a19od19kZXRhY2goc2MtPmFoKTsKIAlrZnJlZShzYy0+YWgpOwogCWZyZWVfaXJxKHBkZXYtPmlycSwgc2MpOwogCXBjaV9pb3VubWFwKHBkZXYsIHNjLT5pb2Jhc2UpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAwKTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JaWVlZTgwMjExX2ZyZWVfaHcoaHcpOworCWllZWU4MDIxMV9mcmVlX2h3KHNjLT5odyk7CiB9CiAKICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIHN0YXRpYyBpbnQgYXRoNWtfcGNpX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHRvX3BjaV9kZXYoZGV2KSk7Ci0Jc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBwY2lfZ2V0X2RydmRhdGEodG9fcGNpX2RldihkZXYpKTsKIAogCWF0aDVrX2xlZF9vZmYoc2MpOwogCXJldHVybiAwOwpAQCAtNzIxLDggKzcyMyw3IEBACiBzdGF0aWMgaW50IGF0aDVrX3BjaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJLyoKIAkgKiBTdXNwZW5kL1Jlc3VtZSByZXNldHMgdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlLCBzbyB3ZSBoYXZlIHRvCkBAIC03NjgsNyArNzY5LDggQEAKIAkgKiByZXR1cm4gZmFsc2Ugdy9vIGRvaW5nIGFueXRoaW5nLiAgTUFDJ3MgdGhhdCBkbwogCSAqIHN1cHBvcnQgaXQgd2lsbCByZXR1cm4gdHJ1ZSB3L28gZG9pbmcgYW55dGhpbmcuCiAJICovCi0JcmV0ID0gYWgtPmFoX3NldHVwX21ycl90eF9kZXNjKGFoLCBOVUxMLCAwLCAwLCAwLCAwLCAwLCAwKTsKKwlyZXQgPSBhdGg1a19od19zZXR1cF9tcnJfdHhfZGVzYyhhaCwgTlVMTCwgMCwgMCwgMCwgMCwgMCwgMCk7CisKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnI7CiAJaWYgKHJldCA+IDApCkBAIC04MjksMTEgKzgzMSwxMiBAQAogCiAJdGFza2xldF9pbml0KCZzYy0+cnh0cSwgYXRoNWtfdGFza2xldF9yeCwgKHVuc2lnbmVkIGxvbmcpc2MpOwogCXRhc2tsZXRfaW5pdCgmc2MtPnR4dHEsIGF0aDVrX3Rhc2tsZXRfdHgsICh1bnNpZ25lZCBsb25nKXNjKTsKLQl0YXNrbGV0X2luaXQoJnNjLT5yZXN0cSwgYXRoNWtfdGFza2xldF9yZXNldCwgKHVuc2lnbmVkIGxvbmcpc2MpOwogCXRhc2tsZXRfaW5pdCgmc2MtPmNhbGliLCBhdGg1a190YXNrbGV0X2NhbGlicmF0ZSwgKHVuc2lnbmVkIGxvbmcpc2MpOwogCXRhc2tsZXRfaW5pdCgmc2MtPmJlYWNvbnRxLCBhdGg1a190YXNrbGV0X2JlYWNvbiwgKHVuc2lnbmVkIGxvbmcpc2MpOwogCXRhc2tsZXRfaW5pdCgmc2MtPmFuaV90YXNrbGV0LCBhdGg1a190YXNrbGV0X2FuaSwgKHVuc2lnbmVkIGxvbmcpc2MpOwogCisJSU5JVF9XT1JLKCZzYy0+cmVzZXRfd29yaywgYXRoNWtfcmVzZXRfd29yayk7CisKIAlyZXQgPSBhdGg1a19lZXByb21fcmVhZF9tYWMoYWgsIG1hYyk7CiAJaWYgKHJldCkgewogCQlBVEg1S19FUlIoc2MsICJ1bmFibGUgdG8gcmVhZCBhZGRyZXNzIGZyb20gRUVQUk9NOiAweCUwNHhcbiIsCkBAIC04NjQsNiArODY3LDggQEAKIAogCWF0aDVrX2luaXRfbGVkcyhzYyk7CiAKKwlhdGg1a19zeXNmc19yZWdpc3RlcihzYyk7CisKIAlyZXR1cm4gMDsKIGVycl9xdWV1ZXM6CiAJYXRoNWtfdHhxX3JlbGVhc2Uoc2MpOwpAQCAtODk5LDYgKzkwNCw3IEBACiAJYXRoNWtfaHdfcmVsZWFzZV90eF9xdWV1ZShzYy0+YWgsIHNjLT5iaGFscSk7CiAJYXRoNWtfdW5yZWdpc3Rlcl9sZWRzKHNjKTsKIAorCWF0aDVrX3N5c2ZzX3VucmVnaXN0ZXIoc2MpOwogCS8qCiAJICogTkI6IGNhbid0IHJlY2xhaW0gdGhlc2UgdW50aWwgYWZ0ZXIgaWVlZTgwMjExX2lmZGV0YWNoCiAJICogcmV0dXJucyBiZWNhdXNlIHdlJ2xsIGdldCBjYWxsZWQgYmFjayB0byByZWNsYWltIG5vZGUKQEAgLTExMTEsOCArMTExNyw5IEBACiBzdGF0aWMgaW50CiBhdGg1a19jaGFuX3NldChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4pCiB7Ci0JQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19SRVNFVCwgIigldSBNSHopIC0+ICgldSBNSHopXG4iLAotCQlzYy0+Y3VyY2hhbi0+Y2VudGVyX2ZyZXEsIGNoYW4tPmNlbnRlcl9mcmVxKTsKKwlBVEg1S19EQkcoc2MsIEFUSDVLX0RFQlVHX1JFU0VULAorCQkgICJjaGFubmVsIHNldCwgcmVzZXR0aW5nICgldSAtPiAldSBNSHopXG4iLAorCQkgIHNjLT5jdXJjaGFuLT5jZW50ZXJfZnJlcSwgY2hhbi0+Y2VudGVyX2ZyZXEpOwogCiAJLyoKIAkgKiBUbyBzd2l0Y2ggY2hhbm5lbHMgY2xlYXIgYW55IHBlbmRpbmcgRE1BIG9wZXJhdGlvbnM7CkBAIC0xMjI4LDIxICsxMjM1LDIzIEBACiAJICogbm90IGdldCBvdmVycnVuIHVuZGVyIGhpZ2ggbG9hZCAoYXMgY2FuIGhhcHBlbiB3aXRoIGEKIAkgKiA1MjEyIHdoZW4gQU5JIHByb2Nlc3NpbmcgZW5hYmxlcyBQSFkgZXJyb3IgZnJhbWVzKS4KIAkgKgotCSAqIFRvIGluc3VyZSB0aGUgbGFzdCBkZXNjcmlwdG9yIGlzIHNlbGYtbGlua2VkIHdlIGNyZWF0ZQorCSAqIFRvIGVuc3VyZSB0aGUgbGFzdCBkZXNjcmlwdG9yIGlzIHNlbGYtbGlua2VkIHdlIGNyZWF0ZQogCSAqIGVhY2ggZGVzY3JpcHRvciBhcyBzZWxmLWxpbmtlZCBhbmQgYWRkIGl0IHRvIHRoZSBlbmQuICBBcwogCSAqIGVhY2ggYWRkaXRpb25hbCBkZXNjcmlwdG9yIGlzIGFkZGVkIHRoZSBwcmV2aW91cyBzZWxmLWxpbmtlZAotCSAqIGVudHJ5IGlzIGBgZml4ZWQnJyBuYXR1cmFsbHkuICBUaGlzIHNob3VsZCBiZSBzYWZlIGV2ZW4KKwkgKiBlbnRyeSBpcyAiZml4ZWQiIG5hdHVyYWxseS4gIFRoaXMgc2hvdWxkIGJlIHNhZmUgZXZlbgogCSAqIGlmIERNQSBpcyBoYXBwZW5pbmcuICBXaGVuIHByb2Nlc3NpbmcgUlggaW50ZXJydXB0cyB3ZQogCSAqIG5ldmVyIHJlbW92ZS9wcm9jZXNzIHRoZSBsYXN0LCBzZWxmLWxpbmtlZCwgZW50cnkgb24gdGhlCi0JICogZGVzY3JpcHRvciBsaXN0LiAgVGhpcyBpbnN1cmVzIHRoZSBoYXJkd2FyZSBhbHdheXMgaGFzCisJICogZGVzY3JpcHRvciBsaXN0LiAgVGhpcyBlbnN1cmVzIHRoZSBoYXJkd2FyZSBhbHdheXMgaGFzCiAJICogc29tZXBsYWNlIHRvIHdyaXRlIGEgbmV3IGZyYW1lLgogCSAqLwogCWRzID0gYmYtPmRlc2M7CiAJZHMtPmRzX2xpbmsgPSBiZi0+ZGFkZHI7CS8qIGxpbmsgdG8gc2VsZiAqLwogCWRzLT5kc19kYXRhID0gYmYtPnNrYmFkZHI7Ci0JcmV0ID0gYWgtPmFoX3NldHVwX3J4X2Rlc2MoYWgsIGRzLCBhaC0+Y29tbW9uLnJ4X2J1ZnNpemUsIDApOwotCWlmIChyZXQpCisJcmV0ID0gYXRoNWtfaHdfc2V0dXBfcnhfZGVzYyhhaCwgZHMsIGFoLT5jb21tb24ucnhfYnVmc2l6ZSwgMCk7CisJaWYgKHJldCkgeworCQlBVEg1S19FUlIoc2MsICIlczogY291bGQgbm90IHNldHVwIFJYIGRlc2NcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIHJldDsKKwl9CiAKIAlpZiAoc2MtPnJ4bGluayAhPSBOVUxMKQogCQkqc2MtPnJ4bGluayA9IGJmLT5kYWRkcjsKQEAgLTEzNDcsNyArMTM1Niw3IEBACiAJCW1ycl90cmllc1tpXSA9IGluZm8tPmNvbnRyb2wucmF0ZXNbaSArIDFdLmNvdW50OwogCX0KIAotCWFoLT5haF9zZXR1cF9tcnJfdHhfZGVzYyhhaCwgZHMsCisJYXRoNWtfaHdfc2V0dXBfbXJyX3R4X2Rlc2MoYWgsIGRzLAogCQltcnJfcmF0ZVswXSwgbXJyX3RyaWVzWzBdLAogCQltcnJfcmF0ZVsxXSwgbXJyX3RyaWVzWzFdLAogCQltcnJfcmF0ZVsyXSwgbXJyX3RyaWVzWzJdKTsKQEAgLTE0NDMsMTcgKzE0NTIsMjAgQEAKIHsKIAlzdHJ1Y3QgYXRoNWtfYnVmICpiZjsKIAotCWF0aDVrX3R4YnVmX2ZyZWUoc2MsIHNjLT5iYnVmKTsKKwlhdGg1a190eGJ1Zl9mcmVlX3NrYihzYywgc2MtPmJidWYpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYmYsICZzYy0+dHhidWYsIGxpc3QpCi0JCWF0aDVrX3R4YnVmX2ZyZWUoc2MsIGJmKTsKKwkJYXRoNWtfdHhidWZfZnJlZV9za2Ioc2MsIGJmKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJmLCAmc2MtPnJ4YnVmLCBsaXN0KQotCQlhdGg1a19yeGJ1Zl9mcmVlKHNjLCBiZik7CisJCWF0aDVrX3J4YnVmX2ZyZWVfc2tiKHNjLCBiZik7CiAKIAkvKiBGcmVlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYWxsIGRlc2NyaXB0b3JzICovCiAJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBzYy0+ZGVzY19sZW4sIHNjLT5kZXNjLCBzYy0+ZGVzY19kYWRkcik7CisJc2MtPmRlc2MgPSBOVUxMOworCXNjLT5kZXNjX2RhZGRyID0gMDsKIAogCWtmcmVlKHNjLT5idWZwdHIpOwogCXNjLT5idWZwdHIgPSBOVUxMOworCXNjLT5iYnVmID0gTlVMTDsKIH0KIAogCkBAIC0xNjAyLDcgKzE2MTQsNyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiZiwgYmYwLCAmdHhxLT5xLCBsaXN0KSB7CiAJCWF0aDVrX2RlYnVnX3ByaW50dHhidWYoc2MsIGJmKTsKIAotCQlhdGg1a190eGJ1Zl9mcmVlKHNjLCBiZik7CisJCWF0aDVrX3R4YnVmX2ZyZWVfc2tiKHNjLCBiZik7CiAKIAkJc3Bpbl9sb2NrX2JoKCZzYy0+dHhidWZsb2NrKTsKIAkJbGlzdF9tb3ZlX3RhaWwoJmJmLT5saXN0LCAmc2MtPnR4YnVmKTsKQEAgLTE3MTYsMTMgKzE3MjgsMTEgQEAKIAlhdGg1a19od19zdG9wX3J4X2RtYShhaCk7CS8qIGRpc2FibGUgRE1BIGVuZ2luZSAqLwogCiAJYXRoNWtfZGVidWdfcHJpbnRyeGJ1ZmZzKHNjLCBhaCk7Ci0KLQlzYy0+cnhsaW5rID0gTlVMTDsJCS8qIGp1c3QgaW4gY2FzZSAqLwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50Ci1hdGg1a19yeF9kZWNyeXB0ZWQoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgc3RydWN0IGF0aDVrX2Rlc2MgKmRzLAotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYXRoNWtfcnhfc3RhdHVzICpycykKK2F0aDVrX3J4X2RlY3J5cHRlZChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICBzdHJ1Y3QgYXRoNWtfcnhfc3RhdHVzICpycykKIHsKIAlzdHJ1Y3QgYXRoNWtfaHcgKmFoID0gc2MtPmFoOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg1a19od19jb21tb24oYWgpOwpAQCAtMTg4OSw5ICsxODk5LDEzOCBAQAogfQogCiBzdGF0aWMgdm9pZAotYXRoNWtfdGFza2xldF9yeCh1bnNpZ25lZCBsb25nIGRhdGEpCithdGg1a19yZWNlaXZlX2ZyYW1lKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICBzdHJ1Y3QgYXRoNWtfcnhfc3RhdHVzICpycykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhzOworCisJLyogVGhlIE1BQyBoZWFkZXIgaXMgcGFkZGVkIHRvIGhhdmUgMzItYml0IGJvdW5kYXJ5IGlmIHRoZQorCSAqIHBhY2tldCBwYXlsb2FkIGlzIG5vbi16ZXJvLiBUaGUgZ2VuZXJhbCBjYWxjdWxhdGlvbiBmb3IKKwkgKiBwYWRzaXplIHdvdWxkIHRha2UgaW50byBhY2NvdW50IG9kZCBoZWFkZXIgbGVuZ3RoczoKKwkgKiBwYWRzaXplID0gKDQgLSBoZHJsZW4gJSA0KSAlIDQ7IEhvd2V2ZXIsIHNpbmNlIG9ubHkKKwkgKiBldmVuLWxlbmd0aCBoZWFkZXJzIGFyZSB1c2VkLCBwYWRkaW5nIGNhbiBvbmx5IGJlIDAgb3IgMgorCSAqIGJ5dGVzIGFuZCB3ZSBjYW4gb3B0aW1pemUgdGhpcyBhIGJpdC4gSW4gYWRkaXRpb24sIHdlIG11c3QKKwkgKiBub3QgdHJ5IHRvIHJlbW92ZSBwYWRkaW5nIGZyb20gc2hvcnQgY29udHJvbCBmcmFtZXMgdGhhdCBkbworCSAqIG5vdCBoYXZlIHBheWxvYWQuICovCisJYXRoNWtfcmVtb3ZlX3BhZGRpbmcoc2tiKTsKKworCXJ4cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpOworCisJcnhzLT5mbGFnID0gMDsKKwlpZiAodW5saWtlbHkocnMtPnJzX3N0YXR1cyAmIEFSNUtfUlhFUlJfTUlDKSkKKwkJcnhzLT5mbGFnIHw9IFJYX0ZMQUdfTU1JQ19FUlJPUjsKKworCS8qCisJICogYWx3YXlzIGV4dGVuZCB0aGUgbWFjIHRpbWVzdGFtcCwgc2luY2UgdGhpcyBpbmZvcm1hdGlvbiBpcworCSAqIGFsc28gbmVlZGVkIGZvciBwcm9wZXIgSUJTUyBtZXJnaW5nLgorCSAqCisJICogWFhYOiBpdCBtaWdodCBiZSB0b28gbGF0ZSB0byBkbyBpdCBoZXJlLCBzaW5jZSByc190c3RhbXAgaXMKKwkgKiAxNWJpdCBvbmx5LiB0aGF0IG1lYW5zIFRTRiBleHRlbnNpb24gaGFzIHRvIGJlIGRvbmUgd2l0aGluCisJICogMzI3Njh1c2VjIChhYm91dCAzMm1zKS4gaXQgbWlnaHQgYmUgbmVjZXNzYXJ5IHRvIG1vdmUgdGhpcyB0bworCSAqIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgbGlrZSBpdCBpcyBkb25lIGluIG1hZHdpZmkuCisJICoKKwkgKiBVbmZvcnR1bmF0ZWx5IHdlIGRvbid0IGtub3cgd2hlbiB0aGUgaGFyZHdhcmUgdGFrZXMgdGhlIHJ4CisJICogdGltZXN0YW1wIChiZWdpbm5pbmcgb2YgcGh5IGZyYW1lLCBkYXRhIGZyYW1lLCBlbmQgb2Ygcng/KS4KKwkgKiBUaGUgb25seSB0aGluZyB3ZSBrbm93IGlzIHRoYXQgaXQgaXMgaGFyZHdhcmUgc3BlY2lmaWMuLi4KKwkgKiBPbiBBUjUyMTMgaXQgc2VlbXMgdGhlIHJ4IHRpbWVzdGFtcCBpcyBhdCB0aGUgZW5kIG9mIHRoZQorCSAqIGZyYW1lLCBidXQgaSdtIG5vdCBzdXJlLgorCSAqCisJICogTk9URTogbWFjODAyMTEgZGVmaW5lcyBtYWN0aW1lIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpcnN0CisJICogZGF0YSBzeW1ib2wuIFNpbmNlIHdlIGRvbid0IGhhdmUgYW55IHRpbWUgcmVmZXJlbmNlcyBpdCdzCisJICogaW1wb3NzaWJsZSB0byBjb21wbHkgdG8gdGhhdC4gVGhpcyBhZmZlY3RzIElCU1MgbWVyZ2Ugb25seQorCSAqIHJpZ2h0IG5vdywgc28gaXQncyBub3QgdG9vIGJhZC4uLgorCSAqLworCXJ4cy0+bWFjdGltZSA9IGF0aDVrX2V4dGVuZF90c2Yoc2MtPmFoLCBycy0+cnNfdHN0YW1wKTsKKwlyeHMtPmZsYWcgfD0gUlhfRkxBR19UU0ZUOworCisJcnhzLT5mcmVxID0gc2MtPmN1cmNoYW4tPmNlbnRlcl9mcmVxOworCXJ4cy0+YmFuZCA9IHNjLT5jdXJiYW5kLT5iYW5kOworCisJcnhzLT5zaWduYWwgPSBzYy0+YWgtPmFoX25vaXNlX2Zsb29yICsgcnMtPnJzX3Jzc2k7CisKKwlyeHMtPmFudGVubmEgPSBycy0+cnNfYW50ZW5uYTsKKworCWlmIChycy0+cnNfYW50ZW5uYSA+IDAgJiYgcnMtPnJzX2FudGVubmEgPCA1KQorCQlzYy0+c3RhdHMuYW50ZW5uYV9yeFtycy0+cnNfYW50ZW5uYV0rKzsKKwllbHNlCisJCXNjLT5zdGF0cy5hbnRlbm5hX3J4WzBdKys7IC8qIGludmFsaWQgKi8KKworCXJ4cy0+cmF0ZV9pZHggPSBhdGg1a19od190b19kcml2ZXJfcml4KHNjLCBycy0+cnNfcmF0ZSk7CisJcnhzLT5mbGFnIHw9IGF0aDVrX3J4X2RlY3J5cHRlZChzYywgc2tiLCBycyk7CisKKwlpZiAocnhzLT5yYXRlX2lkeCA+PSAwICYmIHJzLT5yc19yYXRlID09CisJICAgIHNjLT5jdXJiYW5kLT5iaXRyYXRlc1tyeHMtPnJhdGVfaWR4XS5od192YWx1ZV9zaG9ydCkKKwkJcnhzLT5mbGFnIHw9IFJYX0ZMQUdfU0hPUlRQUkU7CisKKwlhdGg1a19kZWJ1Z19kdW1wX3NrYihzYywgc2tiLCAiUlggICIsIDApOworCisJYXRoNWtfdXBkYXRlX2JlYWNvbl9yc3NpKHNjLCBza2IsIHJzLT5yc19yc3NpKTsKKworCS8qIGNoZWNrIGJlYWNvbnMgaW4gSUJTUyBtb2RlICovCisJaWYgKHNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCWF0aDVrX2NoZWNrX2lic3NfdHNmKHNjLCBza2IsIHJ4cyk7CisKKwlpZWVlODAyMTFfcngoc2MtPmh3LCBza2IpOworfQorCisvKiogYXRoNWtfZnJhbWVfcmVjZWl2ZV9vaygpIC0gRG8gd2Ugd2FudCB0byByZWNlaXZlIHRoaXMgZnJhbWUgb3Igbm90PworICoKKyAqIENoZWNrIGlmIHdlIHdhbnQgdG8gZnVydGhlciBwcm9jZXNzIHRoaXMgZnJhbWUgb3Igbm90LiBBbHNvIHVwZGF0ZQorICogc3RhdGlzdGljcy4gUmV0dXJuIHRydWUgaWYgd2Ugd2FudCB0aGlzIGZyYW1lLCBmYWxzZSBpZiBub3QuCisgKi8KK3N0YXRpYyBib29sCithdGg1a19yZWNlaXZlX2ZyYW1lX29rKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHN0cnVjdCBhdGg1a19yeF9zdGF0dXMgKnJzKQoreworCXNjLT5zdGF0cy5yeF9hbGxfY291bnQrKzsKKworCWlmICh1bmxpa2VseShycy0+cnNfc3RhdHVzKSkgeworCQlpZiAocnMtPnJzX3N0YXR1cyAmIEFSNUtfUlhFUlJfQ1JDKQorCQkJc2MtPnN0YXRzLnJ4ZXJyX2NyYysrOworCQlpZiAocnMtPnJzX3N0YXR1cyAmIEFSNUtfUlhFUlJfRklGTykKKwkJCXNjLT5zdGF0cy5yeGVycl9maWZvKys7CisJCWlmIChycy0+cnNfc3RhdHVzICYgQVI1S19SWEVSUl9QSFkpIHsKKwkJCXNjLT5zdGF0cy5yeGVycl9waHkrKzsKKwkJCWlmIChycy0+cnNfcGh5ZXJyID4gMCAmJiBycy0+cnNfcGh5ZXJyIDwgMzIpCisJCQkJc2MtPnN0YXRzLnJ4ZXJyX3BoeV9jb2RlW3JzLT5yc19waHllcnJdKys7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJaWYgKHJzLT5yc19zdGF0dXMgJiBBUjVLX1JYRVJSX0RFQ1JZUFQpIHsKKwkJCS8qCisJCQkgKiBEZWNyeXB0IGVycm9yLiAgSWYgdGhlIGVycm9yIG9jY3VycmVkCisJCQkgKiBiZWNhdXNlIHRoZXJlIHdhcyBubyBoYXJkd2FyZSBrZXksIHRoZW4KKwkJCSAqIGxldCB0aGUgZnJhbWUgdGhyb3VnaCBzbyB0aGUgdXBwZXIgbGF5ZXJzCisJCQkgKiBjYW4gcHJvY2VzcyBpdC4gIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciA1MjEwCisJCQkgKiBwYXJ0cyB3aGljaCBoYXZlIG5vIHdheSB0byBzZXR1cCBhIGBgY2xlYXInJworCQkJICoga2V5IGNhY2hlIGVudHJ5LgorCQkJICoKKwkJCSAqIFhYWCBkbyBrZXkgY2FjaGUgZmF1bHRpbmcKKwkJCSAqLworCQkJc2MtPnN0YXRzLnJ4ZXJyX2RlY3J5cHQrKzsKKwkJCWlmIChycy0+cnNfa2V5aXggPT0gQVI1S19SWEtFWUlYX0lOVkFMSUQgJiYKKwkJCSAgICAhKHJzLT5yc19zdGF0dXMgJiBBUjVLX1JYRVJSX0NSQykpCisJCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKHJzLT5yc19zdGF0dXMgJiBBUjVLX1JYRVJSX01JQykgeworCQkJc2MtPnN0YXRzLnJ4ZXJyX21pYysrOworCQkJcmV0dXJuIHRydWU7CisJCX0KKworCQkvKiBsZXQgY3J5cHRvLWVycm9yIHBhY2tldHMgZmFsbCB0aHJvdWdoIGluIE1OVFIgKi8KKwkJaWYgKChycy0+cnNfc3RhdHVzICYgfihBUjVLX1JYRVJSX0RFQ1JZUFR8QVI1S19SWEVSUl9NSUMpKSB8fAorCQkgICAgc2MtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmICh1bmxpa2VseShycy0+cnNfbW9yZSkpIHsKKwkJc2MtPnN0YXRzLnJ4ZXJyX2p1bWJvKys7CisJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkCithdGg1a190YXNrbGV0X3J4KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKIAlzdHJ1Y3QgYXRoNWtfcnhfc3RhdHVzIHJzID0ge307CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKm5leHRfc2tiOwogCWRtYV9hZGRyX3QgbmV4dF9za2JfYWRkcjsKQEAgLTE5MDEsNyArMjA0MCw2IEBACiAJc3RydWN0IGF0aDVrX2J1ZiAqYmY7CiAJc3RydWN0IGF0aDVrX2Rlc2MgKmRzOwogCWludCByZXQ7Ci0JaW50IHJ4X2ZsYWc7CiAKIAlzcGluX2xvY2soJnNjLT5yeGJ1ZmxvY2spOwogCWlmIChsaXN0X2VtcHR5KCZzYy0+cnhidWYpKSB7CkBAIC0xOTA5LDggKzIwNDcsNiBAQAogCQlnb3RvIHVubG9jazsKIAl9CiAJZG8gewotCQlyeF9mbGFnID0gMDsKLQogCQliZiA9IGxpc3RfZmlyc3RfZW50cnkoJnNjLT5yeGJ1Ziwgc3RydWN0IGF0aDVrX2J1ZiwgbGlzdCk7CiAJCUJVR19PTihiZi0+c2tiID09IE5VTEwpOwogCQlza2IgPSBiZi0+c2tiOwpAQCAtMTkyNiwxMzcgKzIwNjIsMzAgQEAKIAkJZWxzZSBpZiAodW5saWtlbHkocmV0KSkgewogCQkJQVRINUtfRVJSKHNjLCAiZXJyb3IgaW4gcHJvY2Vzc2luZyByeCBkZXNjcmlwdG9yXG4iKTsKIAkJCXNjLT5zdGF0cy5yeGVycl9wcm9jKys7Ci0JCQlzcGluX3VubG9jaygmc2MtPnJ4YnVmbG9jayk7Ci0JCQlyZXR1cm47CisJCQlicmVhazsKIAkJfQogCi0JCXNjLT5zdGF0cy5yeF9hbGxfY291bnQrKzsKKwkJaWYgKGF0aDVrX3JlY2VpdmVfZnJhbWVfb2soc2MsICZycykpIHsKKwkJCW5leHRfc2tiID0gYXRoNWtfcnhfc2tiX2FsbG9jKHNjLCAmbmV4dF9za2JfYWRkcik7CiAKLQkJaWYgKHVubGlrZWx5KHJzLnJzX3N0YXR1cykpIHsKLQkJCWlmIChycy5yc19zdGF0dXMgJiBBUjVLX1JYRVJSX0NSQykKLQkJCQlzYy0+c3RhdHMucnhlcnJfY3JjKys7Ci0JCQlpZiAocnMucnNfc3RhdHVzICYgQVI1S19SWEVSUl9GSUZPKQotCQkJCXNjLT5zdGF0cy5yeGVycl9maWZvKys7Ci0JCQlpZiAocnMucnNfc3RhdHVzICYgQVI1S19SWEVSUl9QSFkpIHsKLQkJCQlzYy0+c3RhdHMucnhlcnJfcGh5Kys7Ci0JCQkJaWYgKHJzLnJzX3BoeWVyciA+IDAgJiYgcnMucnNfcGh5ZXJyIDwgMzIpCi0JCQkJCXNjLT5zdGF0cy5yeGVycl9waHlfY29kZVtycy5yc19waHllcnJdKys7CisJCQkvKgorCQkJICogSWYgd2UgY2FuJ3QgcmVwbGFjZSBiZi0+c2tiIHdpdGggYSBuZXcgc2tiIHVuZGVyCisJCQkgKiBtZW1vcnkgcHJlc3N1cmUsIGp1c3Qgc2tpcCB0aGlzIHBhY2tldAorCQkJICovCisJCQlpZiAoIW5leHRfc2tiKQogCQkJCWdvdG8gbmV4dDsKLQkJCX0KLQkJCWlmIChycy5yc19zdGF0dXMgJiBBUjVLX1JYRVJSX0RFQ1JZUFQpIHsKLQkJCQkvKgotCQkJCSAqIERlY3J5cHQgZXJyb3IuICBJZiB0aGUgZXJyb3Igb2NjdXJyZWQKLQkJCQkgKiBiZWNhdXNlIHRoZXJlIHdhcyBubyBoYXJkd2FyZSBrZXksIHRoZW4KLQkJCQkgKiBsZXQgdGhlIGZyYW1lIHRocm91Z2ggc28gdGhlIHVwcGVyIGxheWVycwotCQkJCSAqIGNhbiBwcm9jZXNzIGl0LiAgVGhpcyBpcyBuZWNlc3NhcnkgZm9yIDUyMTAKLQkJCQkgKiBwYXJ0cyB3aGljaCBoYXZlIG5vIHdheSB0byBzZXR1cCBhIGBgY2xlYXInJwotCQkJCSAqIGtleSBjYWNoZSBlbnRyeS4KLQkJCQkgKgotCQkJCSAqIFhYWCBkbyBrZXkgY2FjaGUgZmF1bHRpbmcKLQkJCQkgKi8KLQkJCQlzYy0+c3RhdHMucnhlcnJfZGVjcnlwdCsrOwotCQkJCWlmIChycy5yc19rZXlpeCA9PSBBUjVLX1JYS0VZSVhfSU5WQUxJRCAmJgotCQkJCSAgICAhKHJzLnJzX3N0YXR1cyAmIEFSNUtfUlhFUlJfQ1JDKSkKLQkJCQkJZ290byBhY2NlcHQ7Ci0JCQl9Ci0JCQlpZiAocnMucnNfc3RhdHVzICYgQVI1S19SWEVSUl9NSUMpIHsKLQkJCQlyeF9mbGFnIHw9IFJYX0ZMQUdfTU1JQ19FUlJPUjsKLQkJCQlzYy0+c3RhdHMucnhlcnJfbWljKys7Ci0JCQkJZ290byBhY2NlcHQ7Ci0JCQl9CiAKLQkJCS8qIGxldCBjcnlwdG8tZXJyb3IgcGFja2V0cyBmYWxsIHRocm91Z2ggaW4gTU5UUiAqLwotCQkJaWYgKChycy5yc19zdGF0dXMgJgotCQkJCX4oQVI1S19SWEVSUl9ERUNSWVBUfEFSNUtfUlhFUlJfTUlDKSkgfHwKLQkJCQkJc2MtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKQotCQkJCWdvdG8gbmV4dDsKKwkJCXBjaV91bm1hcF9zaW5nbGUoc2MtPnBkZXYsIGJmLT5za2JhZGRyLAorCQkJCQkgY29tbW9uLT5yeF9idWZzaXplLAorCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKworCQkJc2tiX3B1dChza2IsIHJzLnJzX2RhdGFsZW4pOworCisJCQlhdGg1a19yZWNlaXZlX2ZyYW1lKHNjLCBza2IsICZycyk7CisKKwkJCWJmLT5za2IgPSBuZXh0X3NrYjsKKwkJCWJmLT5za2JhZGRyID0gbmV4dF9za2JfYWRkcjsKIAkJfQotCi0JCWlmICh1bmxpa2VseShycy5yc19tb3JlKSkgewotCQkJc2MtPnN0YXRzLnJ4ZXJyX2p1bWJvKys7Ci0JCQlnb3RvIG5leHQ7Ci0KLQkJfQotYWNjZXB0OgotCQluZXh0X3NrYiA9IGF0aDVrX3J4X3NrYl9hbGxvYyhzYywgJm5leHRfc2tiX2FkZHIpOwotCi0JCS8qCi0JCSAqIElmIHdlIGNhbid0IHJlcGxhY2UgYmYtPnNrYiB3aXRoIGEgbmV3IHNrYiB1bmRlciBtZW1vcnkKLQkJICogcHJlc3N1cmUsIGp1c3Qgc2tpcCB0aGlzIHBhY2tldAotCQkgKi8KLQkJaWYgKCFuZXh0X3NrYikKLQkJCWdvdG8gbmV4dDsKLQotCQlwY2lfdW5tYXBfc2luZ2xlKHNjLT5wZGV2LCBiZi0+c2tiYWRkciwgY29tbW9uLT5yeF9idWZzaXplLAotCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCXNrYl9wdXQoc2tiLCBycy5yc19kYXRhbGVuKTsKLQotCQkvKiBUaGUgTUFDIGhlYWRlciBpcyBwYWRkZWQgdG8gaGF2ZSAzMi1iaXQgYm91bmRhcnkgaWYgdGhlCi0JCSAqIHBhY2tldCBwYXlsb2FkIGlzIG5vbi16ZXJvLiBUaGUgZ2VuZXJhbCBjYWxjdWxhdGlvbiBmb3IKLQkJICogcGFkc2l6ZSB3b3VsZCB0YWtlIGludG8gYWNjb3VudCBvZGQgaGVhZGVyIGxlbmd0aHM6Ci0JCSAqIHBhZHNpemUgPSAoNCAtIGhkcmxlbiAlIDQpICUgNDsgSG93ZXZlciwgc2luY2Ugb25seQotCQkgKiBldmVuLWxlbmd0aCBoZWFkZXJzIGFyZSB1c2VkLCBwYWRkaW5nIGNhbiBvbmx5IGJlIDAgb3IgMgotCQkgKiBieXRlcyBhbmQgd2UgY2FuIG9wdGltaXplIHRoaXMgYSBiaXQuIEluIGFkZGl0aW9uLCB3ZSBtdXN0Ci0JCSAqIG5vdCB0cnkgdG8gcmVtb3ZlIHBhZGRpbmcgZnJvbSBzaG9ydCBjb250cm9sIGZyYW1lcyB0aGF0IGRvCi0JCSAqIG5vdCBoYXZlIHBheWxvYWQuICovCi0JCWF0aDVrX3JlbW92ZV9wYWRkaW5nKHNrYik7Ci0KLQkJcnhzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7Ci0KLQkJLyoKLQkJICogYWx3YXlzIGV4dGVuZCB0aGUgbWFjIHRpbWVzdGFtcCwgc2luY2UgdGhpcyBpbmZvcm1hdGlvbiBpcwotCQkgKiBhbHNvIG5lZWRlZCBmb3IgcHJvcGVyIElCU1MgbWVyZ2luZy4KLQkJICoKLQkJICogWFhYOiBpdCBtaWdodCBiZSB0b28gbGF0ZSB0byBkbyBpdCBoZXJlLCBzaW5jZSByc190c3RhbXAgaXMKLQkJICogMTViaXQgb25seS4gdGhhdCBtZWFucyBUU0YgZXh0ZW5zaW9uIGhhcyB0byBiZSBkb25lIHdpdGhpbgotCQkgKiAzMjc2OHVzZWMgKGFib3V0IDMybXMpLiBpdCBtaWdodCBiZSBuZWNlc3NhcnkgdG8gbW92ZSB0aGlzIHRvCi0JCSAqIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgbGlrZSBpdCBpcyBkb25lIGluIG1hZHdpZmkuCi0JCSAqCi0JCSAqIFVuZm9ydHVuYXRlbHkgd2UgZG9uJ3Qga25vdyB3aGVuIHRoZSBoYXJkd2FyZSB0YWtlcyB0aGUgcngKLQkJICogdGltZXN0YW1wIChiZWdpbm5pbmcgb2YgcGh5IGZyYW1lLCBkYXRhIGZyYW1lLCBlbmQgb2Ygcng/KS4KLQkJICogVGhlIG9ubHkgdGhpbmcgd2Uga25vdyBpcyB0aGF0IGl0IGlzIGhhcmR3YXJlIHNwZWNpZmljLi4uCi0JCSAqIE9uIEFSNTIxMyBpdCBzZWVtcyB0aGUgcnggdGltZXN0YW1wIGlzIGF0IHRoZSBlbmQgb2YgdGhlCi0JCSAqIGZyYW1lLCBidXQgaSdtIG5vdCBzdXJlLgotCQkgKgotCQkgKiBOT1RFOiBtYWM4MDIxMSBkZWZpbmVzIG1hY3RpbWUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlyc3QKLQkJICogZGF0YSBzeW1ib2wuIFNpbmNlIHdlIGRvbid0IGhhdmUgYW55IHRpbWUgcmVmZXJlbmNlcyBpdCdzCi0JCSAqIGltcG9zc2libGUgdG8gY29tcGx5IHRvIHRoYXQuIFRoaXMgYWZmZWN0cyBJQlNTIG1lcmdlIG9ubHkKLQkJICogcmlnaHQgbm93LCBzbyBpdCdzIG5vdCB0b28gYmFkLi4uCi0JCSAqLwotCQlyeHMtPm1hY3RpbWUgPSBhdGg1a19leHRlbmRfdHNmKHNjLT5haCwgcnMucnNfdHN0YW1wKTsKLQkJcnhzLT5mbGFnID0gcnhfZmxhZyB8IFJYX0ZMQUdfVFNGVDsKLQotCQlyeHMtPmZyZXEgPSBzYy0+Y3VyY2hhbi0+Y2VudGVyX2ZyZXE7Ci0JCXJ4cy0+YmFuZCA9IHNjLT5jdXJiYW5kLT5iYW5kOwotCi0JCXJ4cy0+c2lnbmFsID0gc2MtPmFoLT5haF9ub2lzZV9mbG9vciArIHJzLnJzX3Jzc2k7Ci0KLQkJcnhzLT5hbnRlbm5hID0gcnMucnNfYW50ZW5uYTsKLQotCQlpZiAocnMucnNfYW50ZW5uYSA+IDAgJiYgcnMucnNfYW50ZW5uYSA8IDUpCi0JCQlzYy0+c3RhdHMuYW50ZW5uYV9yeFtycy5yc19hbnRlbm5hXSsrOwotCQllbHNlCi0JCQlzYy0+c3RhdHMuYW50ZW5uYV9yeFswXSsrOyAvKiBpbnZhbGlkICovCi0KLQkJcnhzLT5yYXRlX2lkeCA9IGF0aDVrX2h3X3RvX2RyaXZlcl9yaXgoc2MsIHJzLnJzX3JhdGUpOwotCQlyeHMtPmZsYWcgfD0gYXRoNWtfcnhfZGVjcnlwdGVkKHNjLCBkcywgc2tiLCAmcnMpOwotCi0JCWlmIChyeHMtPnJhdGVfaWR4ID49IDAgJiYgcnMucnNfcmF0ZSA9PQotCQkgICAgc2MtPmN1cmJhbmQtPmJpdHJhdGVzW3J4cy0+cmF0ZV9pZHhdLmh3X3ZhbHVlX3Nob3J0KQotCQkJcnhzLT5mbGFnIHw9IFJYX0ZMQUdfU0hPUlRQUkU7Ci0KLQkJYXRoNWtfZGVidWdfZHVtcF9za2Ioc2MsIHNrYiwgIlJYICAiLCAwKTsKLQotCQlhdGg1a191cGRhdGVfYmVhY29uX3Jzc2koc2MsIHNrYiwgcnMucnNfcnNzaSk7Ci0KLQkJLyogY2hlY2sgYmVhY29ucyBpbiBJQlNTIG1vZGUgKi8KLQkJaWYgKHNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCi0JCQlhdGg1a19jaGVja19pYnNzX3RzZihzYywgc2tiLCByeHMpOwotCi0JCWllZWU4MDIxMV9yeChzYy0+aHcsIHNrYik7Ci0KLQkJYmYtPnNrYiA9IG5leHRfc2tiOwotCQliZi0+c2tiYWRkciA9IG5leHRfc2tiX2FkZHI7CiBuZXh0OgogCQlsaXN0X21vdmVfdGFpbCgmYmYtPmxpc3QsICZzYy0+cnhidWYpOwogCX0gd2hpbGUgKGF0aDVrX3J4YnVmX3NldHVwKHNjLCBiZikgPT0gMCk7CkBAIC0yMDY1LDggKzIwOTQsNiBAQAogfQogCiAKLQotCiAvKioqKioqKioqKioqKlwKICogVFggSGFuZGxpbmcgKgogXCoqKioqKioqKioqKiovCkBAIC0yMjY2LDggKzIyOTMsOCBAQAogICogZnJhbWUgY29udGVudHMgYXJlIGRvbmUgYXMgbmVlZGVkIGFuZCB0aGUgc2xvdCB0aW1lIGlzCiAgKiBhbHNvIGFkanVzdGVkIGJhc2VkIG9uIGN1cnJlbnQgc3RhdGUuCiAgKgotICogVGhpcyBpcyBjYWxsZWQgZnJvbSBzb2Z0d2FyZSBpcnEgY29udGV4dCAoYmVhY29udHEgb3IgcmVzdHEKLSAqIHRhc2tsZXRzKSBvciB1c2VyIGNvbnRleHQgZnJvbSBhdGg1a19iZWFjb25fY29uZmlnLgorICogVGhpcyBpcyBjYWxsZWQgZnJvbSBzb2Z0d2FyZSBpcnEgY29udGV4dCAoYmVhY29udHEgdGFza2xldHMpCisgKiBvciB1c2VyIGNvbnRleHQgZnJvbSBhdGg1a19iZWFjb25fY29uZmlnLgogICovCiBzdGF0aWMgdm9pZAogYXRoNWtfYmVhY29uX3NlbmQoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKQEAgLTIyOTgsNyArMjMyNSw5IEBACiAJCQlBVEg1S19EQkcoc2MsIEFUSDVLX0RFQlVHX0JFQUNPTiwKIAkJCQkic3R1Y2sgYmVhY29uIHRpbWUgKCV1IG1pc3NlZClcbiIsCiAJCQkJc2MtPmJtaXNzY291bnQpOwotCQkJdGFza2xldF9zY2hlZHVsZSgmc2MtPnJlc3RxKTsKKwkJCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfUkVTRVQsCisJCQkJICAic3R1Y2sgYmVhY29uLCByZXNldHRpbmdcbiIpOworCQkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoc2MtPmh3LCAmc2MtPnJlc2V0X3dvcmspOwogCQl9CiAJCXJldHVybjsKIAl9CkBAIC0yNjAyLDEyICsyNjMxLDIwIEBACiAJaWYgKCF0ZXN0X2JpdChBVEhfU1RBVF9JTlZBTElELCBzYy0+c3RhdHVzKSkgewogCQlhdGg1a19yeF9zdG9wKHNjKTsKIAkJYXRoNWtfaHdfcGh5X2Rpc2FibGUoYWgpOwotCX0gZWxzZQotCQlzYy0+cnhsaW5rID0gTlVMTDsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgc3RvcF90YXNrbGV0cyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQoreworCXRhc2tsZXRfa2lsbCgmc2MtPnJ4dHEpOworCXRhc2tsZXRfa2lsbCgmc2MtPnR4dHEpOworCXRhc2tsZXRfa2lsbCgmc2MtPmNhbGliKTsKKwl0YXNrbGV0X2tpbGwoJnNjLT5iZWFjb250cSk7CisJdGFza2xldF9raWxsKCZzYy0+YW5pX3Rhc2tsZXQpOworfQorCiAvKgogICogU3RvcCB0aGUgZGV2aWNlLCBncmFiYmluZyB0aGUgdG9wLWxldmVsIGxvY2sgdG8gcHJvdGVjdAogICogYWdhaW5zdCBjb25jdXJyZW50IGVudHJ5IHRocm91Z2ggYXRoNWtfaW5pdCAod2hpY2ggY2FuIGhhcHBlbgpAQCAtMjY0NywxNyArMjY4NCwxMiBAQAogCQlBVEg1S19EQkcoc2MsIEFUSDVLX0RFQlVHX1JFU0VULAogCQkJCSJwdXR0aW5nIGRldmljZSB0byBzbGVlcFxuIik7CiAJfQotCWF0aDVrX3R4YnVmX2ZyZWUoc2MsIHNjLT5iYnVmKTsKKwlhdGg1a190eGJ1Zl9mcmVlX3NrYihzYywgc2MtPmJidWYpOwogCiAJbW1pb3diKCk7CiAJbXV0ZXhfdW5sb2NrKCZzYy0+bG9jayk7CiAKLQl0YXNrbGV0X2tpbGwoJnNjLT5yeHRxKTsKLQl0YXNrbGV0X2tpbGwoJnNjLT50eHRxKTsKLQl0YXNrbGV0X2tpbGwoJnNjLT5yZXN0cSk7Ci0JdGFza2xldF9raWxsKCZzYy0+Y2FsaWIpOwotCXRhc2tsZXRfa2lsbCgmc2MtPmJlYWNvbnRxKTsKLQl0YXNrbGV0X2tpbGwoJnNjLT5hbmlfdGFza2xldCk7CisJc3RvcF90YXNrbGV0cyhzYyk7CiAKIAlhdGg1a19yZmtpbGxfaHdfc3RvcChzYy0+YWgpOwogCkBAIC0yNzA1LDcgKzI3MzcsOSBAQAogCQkJICogRmF0YWwgZXJyb3JzIGFyZSB1bnJlY292ZXJhYmxlLgogCQkJICogVHlwaWNhbGx5IHRoZXNlIGFyZSBjYXVzZWQgYnkgRE1BIGVycm9ycy4KIAkJCSAqLwotCQkJdGFza2xldF9zY2hlZHVsZSgmc2MtPnJlc3RxKTsKKwkJCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfUkVTRVQsCisJCQkJICAiZmF0YWwgaW50LCByZXNldHRpbmdcbiIpOworCQkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoc2MtPmh3LCAmc2MtPnJlc2V0X3dvcmspOwogCQl9IGVsc2UgaWYgKHVubGlrZWx5KHN0YXR1cyAmIEFSNUtfSU5UX1JYT1JOKSkgewogCQkJLyoKIAkJCSAqIFJlY2VpdmUgYnVmZmVycyBhcmUgZnVsbC4gRWl0aGVyIHRoZSBidXMgaXMgYnVzeSBvcgpAQCAtMjcxNyw4ICsyNzUxLDExIEBACiAJCQkgKiB0aGlzIGd1ZXNzIGlzIGNvcGllZCBmcm9tIHRoZSBIQUwuCiAJCQkgKi8KIAkJCXNjLT5zdGF0cy5yeG9ybl9pbnRyKys7Ci0JCQlpZiAoYWgtPmFoX21hY19zcmV2IDwgQVI1S19TUkVWX0FSNTIxMikKLQkJCQl0YXNrbGV0X3NjaGVkdWxlKCZzYy0+cmVzdHEpOworCQkJaWYgKGFoLT5haF9tYWNfc3JldiA8IEFSNUtfU1JFVl9BUjUyMTIpIHsKKwkJCQlBVEg1S19EQkcoc2MsIEFUSDVLX0RFQlVHX1JFU0VULAorCQkJCQkgICJyeCBvdmVycnVuLCByZXNldHRpbmdcbiIpOworCQkJCWllZWU4MDIxMV9xdWV1ZV93b3JrKHNjLT5odywgJnNjLT5yZXNldF93b3JrKTsKKwkJCX0KIAkJCWVsc2UKIAkJCQl0YXNrbGV0X3NjaGVkdWxlKCZzYy0+cnh0cSk7CiAJCX0gZWxzZSB7CkBAIC0yNzMxLDcgKzI3NjgsNyBAQAogCQkJCSogICAgIFJYRSBiaXQgaXMgd3JpdHRlbiwgYnV0IGl0IGRvZXNuJ3Qgd29yayBhdAogCQkJCSogICAgIGxlYXN0IG9uIG9sZGVyIGhhcmR3YXJlIHJldnMuCiAJCQkJKi8KLQkJCQlzYy0+cnhsaW5rID0gTlVMTDsKKwkJCQlzYy0+c3RhdHMucnhlb2xfaW50cisrOwogCQkJfQogCQkJaWYgKHN0YXR1cyAmIEFSNUtfSU5UX1RYVVJOKSB7CiAJCQkJLyogYnVtcCB0eCB0cmlnZ2VyIGxldmVsICovCkBAIC0yNzY0LDE0ICsyODAxLDYgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyB2b2lkCi1hdGg1a190YXNrbGV0X3Jlc2V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gKHZvaWQgKilkYXRhOwotCi0JYXRoNWtfcmVzZXQoc2MsIHNjLT5jdXJjaGFuKTsKLX0KLQogLyoKICAqIFBlcmlvZGljYWxseSByZWNhbGlicmF0ZSB0aGUgUEhZIHRvIGFjY291bnQKICAqIGZvciB0ZW1wZXJhdHVyZS9lbnZpcm9ubWVudCBjaGFuZ2VzLgpAQCAtMjc4NSwxMCArMjgxNCw2IEBACiAJLyogT25seSBmdWxsIGNhbGlicmF0aW9uIGZvciBub3cgKi8KIAlhaC0+YWhfY2FsX21hc2sgfD0gQVI1S19DQUxJQlJBVElPTl9GVUxMOwogCi0JLyogU3RvcCBxdWV1ZXMgc28gdGhhdCBjYWxpYnJhdGlvbgotCSAqIGRvZXNuJ3QgaW50ZXJmZXJlIHdpdGggdHggKi8KLQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoc2MtPmh3KTsKLQogCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfQ0FMSUJSQVRFLCAiY2hhbm5lbCAldS8leFxuIiwKIAkJaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKHNjLT5jdXJjaGFuLT5jZW50ZXJfZnJlcSksCiAJCXNjLT5jdXJjaGFuLT5od192YWx1ZSk7CkBAIC0yNzk5LDE1ICsyODI0LDIzIEBACiAJCSAqIHRvIGxvYWQgbmV3IGdhaW4gdmFsdWVzLgogCQkgKi8KIAkJQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19SRVNFVCwgImNhbGlicmF0aW9uLCByZXNldHRpbmdcbiIpOwotCQlhdGg1a19yZXNldChzYywgc2MtPmN1cmNoYW4pOworCQlpZWVlODAyMTFfcXVldWVfd29yayhzYy0+aHcsICZzYy0+cmVzZXRfd29yayk7CiAJfQogCWlmIChhdGg1a19od19waHlfY2FsaWJyYXRlKGFoLCBzYy0+Y3VyY2hhbikpCiAJCUFUSDVLX0VSUihzYywgImNhbGlicmF0aW9uIG9mIGNoYW5uZWwgJXUgZmFpbGVkXG4iLAogCQkJaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKAogCQkJCXNjLT5jdXJjaGFuLT5jZW50ZXJfZnJlcSkpOwogCi0JLyogV2FrZSBxdWV1ZXMgKi8KLQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoc2MtPmh3KTsKKwkvKiBOb2lzZSBmbG9vciBjYWxpYnJhdGlvbiBpbnRlcnJ1cHRzIHJ4L3R4IHBhdGggd2hpbGUgSS9RIGNhbGlicmF0aW9uCisJICogZG9lc24ndC4gV2Ugc3RvcCB0aGUgcXVldWVzIHNvIHRoYXQgY2FsaWJyYXRpb24gZG9lc24ndCBpbnRlcmZlcmUKKwkgKiB3aXRoIFRYIGFuZCBkb24ndCBydW4gaXQgYXMgb2Z0ZW4gKi8KKwlpZiAodGltZV9pc19iZWZvcmVfZXFfamlmZmllcyhhaC0+YWhfY2FsX25leHRfbmYpKSB7CisJCWFoLT5haF9jYWxfbmV4dF9uZiA9IGppZmZpZXMgKworCQkJbXNlY3NfdG9famlmZmllcyhBVEg1S19UVU5FX0NBTElCUkFUSU9OX0lOVEVSVkFMX05GKTsKKwkJaWVlZTgwMjExX3N0b3BfcXVldWVzKHNjLT5odyk7CisJCWF0aDVrX2h3X3VwZGF0ZV9ub2lzZV9mbG9vcihhaCk7CisJCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhzYy0+aHcpOworCX0KIAogCWFoLT5haF9jYWxfbWFzayAmPSB+QVI1S19DQUxJQlJBVElPTl9GVUxMOwogfQpAQCAtMjg5NSw2ICsyOTI4LDggQEAKIC8qCiAgKiBSZXNldCB0aGUgaGFyZHdhcmUuICBJZiBjaGFuIGlzIG5vdCBOVUxMLCB0aGVuIGFsc28gcGF1c2UgcngvdHgKICAqIGFuZCBjaGFuZ2UgdG8gdGhlIGdpdmVuIGNoYW5uZWwuCisgKgorICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdpdGggc2MtPmxvY2suCiAgKi8KIHN0YXRpYyBpbnQKIGF0aDVrX3Jlc2V0KHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbikKQEAgLTI5MDQsOCArMjkzOSwxMSBAQAogCiAJQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19SRVNFVCwgInJlc2V0dGluZ1xuIik7CiAKKwlhdGg1a19od19zZXRfaW1yKGFoLCAwKTsKKwlzeW5jaHJvbml6ZV9pcnEoc2MtPnBkZXYtPmlycSk7CisJc3RvcF90YXNrbGV0cyhzYyk7CisKIAlpZiAoY2hhbikgewotCQlhdGg1a19od19zZXRfaW1yKGFoLCAwKTsKIAkJYXRoNWtfdHhxX2NsZWFudXAoc2MpOwogCQlhdGg1a19yeF9zdG9wKHNjKTsKIApAQCAtMjkyNiw2ICsyOTY0LDEwIEBACiAKIAlhdGg1a19hbmlfaW5pdChhaCwgYWgtPmFoX3NjLT5hbmlfc3RhdGUuYW5pX21vZGUpOwogCisJYWgtPmFoX2NhbF9uZXh0X2Z1bGwgPSBqaWZmaWVzOworCWFoLT5haF9jYWxfbmV4dF9hbmkgPSBqaWZmaWVzOworCWFoLT5haF9jYWxfbmV4dF9uZiA9IGppZmZpZXM7CisKIAkvKgogCSAqIENoYW5nZSBjaGFubmVscyBhbmQgdXBkYXRlIHRoZSBoL3cgcmF0ZSBtYXAgaWYgd2UncmUgc3dpdGNoaW5nOwogCSAqIGUuZy4gMTFhIHRvIDExYi9nLgpAQCAtMjk0Nyw2ICsyOTg5LDE2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgYXRoNWtfcmVzZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRoNWtfc29mdGMsCisJCXJlc2V0X3dvcmspOworCisJbXV0ZXhfbG9jaygmc2MtPmxvY2spOworCWF0aDVrX3Jlc2V0KHNjLCBzYy0+Y3VyY2hhbik7CisJbXV0ZXhfdW5sb2NrKCZzYy0+bG9jayk7Cit9CisKIHN0YXRpYyBpbnQgYXRoNWtfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJcmV0dXJuIGF0aDVrX2luaXQoaHctPnByaXYpOwpAQCAtMzM2MCw3ICszNDEyLDcgQEAKIAogCWF0aDVrX2RlYnVnX2R1bXBfc2tiKHNjLCBza2IsICJCQyAgIiwgMSk7CiAKLQlhdGg1a190eGJ1Zl9mcmVlKHNjLCBzYy0+YmJ1Zik7CisJYXRoNWtfdHhidWZfZnJlZV9za2Ioc2MsIHNjLT5iYnVmKTsKIAlzYy0+YmJ1Zi0+c2tiID0gc2tiOwogCXJldCA9IGF0aDVrX2JlYWNvbl9zZXR1cChzYywgc2MtPmJidWYpOwogCWlmIChyZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuaAppbmRleCA1NjIyMWJjLi5kYzEyNDFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmgKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9yZmtpbGwuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2luY2x1ZGUgImF0aDVrLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKQEAgLTEzNiw2ICsxMzcsNyBAQAogCiAJdW5zaWduZWQgaW50IG1pYl9pbnRyOwogCXVuc2lnbmVkIGludCByeG9ybl9pbnRyOworCXVuc2lnbmVkIGludCByeGVvbF9pbnRyOwogfTsKIAogI2lmIENIQU5fREVCVUcKQEAgLTE4OSw3ICsxOTEsNyBAQAogCXVuc2lnbmVkIGludAkJbGVkX3BpbiwJLyogR1BJTyBwaW4gZm9yIGRyaXZpbmcgTEVEICovCiAJCQkJbGVkX29uOwkJLyogcGluIHNldHRpbmcgZm9yIExFRCBvbiAqLwogCi0Jc3RydWN0IHRhc2tsZXRfc3RydWN0CXJlc3RxOwkJLyogcmVzZXQgdGFza2xldCAqLworCXN0cnVjdCB3b3JrX3N0cnVjdAlyZXNldF93b3JrOwkvKiBkZWZlcnJlZCBjaGlwIHJlc2V0ICovCiAKIAl1bnNpZ25lZCBpbnQJCXJ4YnVmc2l6ZTsJLyogcnggc2l6ZSBiYXNlZCBvbiBtdHUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXJ4YnVmOwkJLyogcmVjZWl2ZSBidWZmZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9jYXBzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvY2Fwcy5jCmluZGV4IDc0ZjAwNzEuLmJlYWU1MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9jYXBzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2NhcHMuYwpAQCAtMzQsNyArMzQsNiBAQAogewogCXUxNiBlZV9oZWFkZXI7CiAKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwogCS8qIENhcGFiaWxpdGllcyBzdG9yZWQgaW4gdGhlIEVFUFJPTSAqLwogCWVlX2hlYWRlciA9IGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbS5lZV9oZWFkZXI7CiAKQEAgLTEyMyw4ICsxMjIsNiBAQAogCQllbnVtIGF0aDVrX2NhcGFiaWxpdHlfdHlwZSBjYXBfdHlwZSwKIAkJdTMyIGNhcGFiaWxpdHksIHUzMiAqcmVzdWx0KQogewotCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7Ci0KIAlzd2l0Y2ggKGNhcF90eXBlKSB7CiAJY2FzZSBBUjVLX0NBUF9OVU1fVFhRVUVVRVM6CiAJCWlmIChyZXN1bHQpIHsKQEAgLTE3Myw4ICsxNzAsNiBAQAogaW50IGF0aDVrX2h3X2VuYWJsZV9wc3BvbGwoc3RydWN0IGF0aDVrX2h3ICphaCwgdTggKmJzc2lkLAogCQl1MTYgYXNzb2NfaWQpCiB7Ci0JQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKLQogCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMCkgewogCQlBUjVLX1JFR19ESVNBQkxFX0JJVFMoYWgsIEFSNUtfU1RBX0lEMSwKIAkJCUFSNUtfU1RBX0lEMV9OT19QU1BPTEwgfCBBUjVLX1NUQV9JRDFfREVGQVVMVF9BTlRFTk5BKTsKQEAgLTE4Niw4ICsxODEsNiBAQAogCiBpbnQgYXRoNWtfaHdfZGlzYWJsZV9wc3BvbGwoc3RydWN0IGF0aDVrX2h3ICphaCkKIHsKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwotCiAJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEwKSB7CiAJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1NUQV9JRDEsCiAJCQlBUjVLX1NUQV9JRDFfTk9fUFNQT0xMIHwgQVI1S19TVEFfSUQxX0RFRkFVTFRfQU5URU5OQSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZGVidWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZWJ1Zy5jCmluZGV4IDZmYjVjNWYuLjRjY2NjMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZWJ1Zy5jCkBAIC0yMzksNiArMjM5LDkgQEAKIAkJIlRTRlx0XHQweCUwMTZsbHhcdFRVOiAlMDh4XG4iLAogCQkodW5zaWduZWQgbG9uZyBsb25nKXRzZiwgVFNGX1RPX1RVKHRzZikpOwogCisJaWYgKGxlbiA+IHNpemVvZihidWYpKQorCQlsZW4gPSBzaXplb2YoYnVmKTsKKwogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKIH0KIApAQCAtMjc4LDcgKzI4MSw4IEBACiAJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JdGFza2xldF9zY2hlZHVsZSgmc2MtPnJlc3RxKTsKKwlBVEg1S19EQkcoc2MsIEFUSDVLX0RFQlVHX1JFU0VULCAiZGVidWcgZmlsZSB0cmlnZ2VyZWQgcmVzZXRcbiIpOworCWllZWU4MDIxMV9xdWV1ZV93b3JrKHNjLT5odywgJnNjLT5yZXNldF93b3JrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTMwNyw3ICszMTEsNiBAQAogCXsgQVRINUtfREVCVUdfRFVNUF9SWCwJImR1bXByeCIsCSJwcmludCByZWNlaXZlZCBza2IgY29udGVudCIgfSwKIAl7IEFUSDVLX0RFQlVHX0RVTVBfVFgsCSJkdW1wdHgiLAkicHJpbnQgdHJhbnNtaXQgc2tiIGNvbnRlbnQiIH0sCiAJeyBBVEg1S19ERUJVR19EVU1QQkFORFMsICJkdW1wYmFuZHMiLAkiZHVtcCBiYW5kcyIgfSwKLQl7IEFUSDVLX0RFQlVHX1RSQUNFLAkidHJhY2UiLAkidHJhY2UgZnVuY3Rpb24gY2FsbHMiIH0sCiAJeyBBVEg1S19ERUJVR19BTkksCSJhbmkiLAkJImFkYXB0aXZlIG5vaXNlIGltbXVuaXR5IiB9LAogCXsgQVRINUtfREVCVUdfQU5ZLAkiYWxsIiwJCSJzaG93IGFsbCBkZWJ1ZyBsZXZlbHMiIH0sCiB9OwpAQCAtMzM0LDYgKzMzNyw5IEBACiAJCXNjLT5kZWJ1Zy5sZXZlbCA9PSBkYmdfaW5mb1tpXS5sZXZlbCA/ICcrJyA6ICcgJywKIAkJZGJnX2luZm9baV0ubGV2ZWwsIGRiZ19pbmZvW2ldLmRlc2MpOwogCisJaWYgKGxlbiA+IHNpemVvZihidWYpKQorCQlsZW4gPSBzaXplb2YoYnVmKTsKKwogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKIH0KIApAQCAtNDI2LDYgKzQzMiwxNiBAQAogCQkiQVI1S19QSFlfRkFTVF9BTlRfRElWX0VOXHQlZFxuIiwKIAkJKHYgJiBBUjVLX1BIWV9GQVNUX0FOVF9ESVZfRU4pICE9IDApOwogCisJdiA9IGF0aDVrX2h3X3JlZ19yZWFkKHNjLT5haCwgQVI1S19QSFlfQU5UX1NXSVRDSF9UQUJMRV8wKTsKKwlsZW4gKz0gc25wcmludGYoYnVmK2xlbiwgc2l6ZW9mKGJ1ZiktbGVuLAorCQkJIlxuQVI1S19QSFlfQU5UX1NXSVRDSF9UQUJMRV8wXHQweCUwOHhcbiIsIHYpOworCXYgPSBhdGg1a19od19yZWdfcmVhZChzYy0+YWgsIEFSNUtfUEhZX0FOVF9TV0lUQ0hfVEFCTEVfMSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZitsZW4sIHNpemVvZihidWYpLWxlbiwKKwkJCSJBUjVLX1BIWV9BTlRfU1dJVENIX1RBQkxFXzFcdDB4JTA4eFxuIiwgdik7CisKKwlpZiAobGVuID4gc2l6ZW9mKGJ1ZikpCisJCWxlbiA9IHNpemVvZihidWYpOworCiAJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOwogfQogCkBAIC01MzUsNiArNTUxLDkgQEAKIAlsZW4gKz0gc25wcmludGYoYnVmK2xlbiwgc2l6ZW9mKGJ1ZiktbGVuLCAiW1RYIGFsbFx0JWRdXG4iLAogCQkJc3QtPnR4X2FsbF9jb3VudCk7CiAKKwlpZiAobGVuID4gc2l6ZW9mKGJ1ZikpCisJCWxlbiA9IHNpemVvZihidWYpOworCiAJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOwogfQogCkBAIC02NzQsNiArNjkzLDkgQEAKIAkJCUFUSDVLX0FOSV9DQ0tfVFJJR19ISUdIIC0gKEFUSDVLX1BIWUVSUl9DTlRfTUFYIC0KIAkJCWF0aDVrX2h3X3JlZ19yZWFkKHNjLT5haCwgQVI1S19QSFlFUlJfQ05UMikpKTsKIAorCWlmIChsZW4gPiBzaXplb2YoYnVmKSkKKwkJbGVuID0gc2l6ZW9mKGJ1Zik7CisKIAlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7CiB9CiAKQEAgLTcyOSw2ICs3NTEsNjkgQEAKIH07CiAKIAorLyogZGVidWdmczogcXVldWVzIGV0YyAqLworCitzdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzcwMF07CisJdW5zaWduZWQgaW50IGxlbiA9IDA7CisKKwlzdHJ1Y3QgYXRoNWtfdHhxICp0eHE7CisJc3RydWN0IGF0aDVrX2J1ZiAqYmYsICpiZjA7CisJaW50IGksIG4gPSAwOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZitsZW4sIHNpemVvZihidWYpLWxlbiwKKwkJCSJhdmFpbGFibGUgdHhidWZmZXJzOiAlZFxuIiwgc2MtPnR4YnVmX2xlbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYy0+dHhxcyk7IGkrKykgeworCQl0eHEgPSAmc2MtPnR4cXNbaV07CisKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZitsZW4sIHNpemVvZihidWYpLWxlbiwKKwkJCSIlMDJkOiAlc3NldHVwXG4iLCBpLCB0eHEtPnNldHVwID8gIiIgOiAibm90ICIpOworCisJCWlmICghdHhxLT5zZXR1cCkKKwkJCWNvbnRpbnVlOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiZiwgYmYwLCAmdHhxLT5xLCBsaXN0KQorCQkJbisrOworCQlsZW4gKz0gc25wcmludGYoYnVmK2xlbiwgc2l6ZW9mKGJ1ZiktbGVuLCAiICBsZW46ICVkXG4iLCBuKTsKKwl9CisKKwlpZiAobGVuID4gc2l6ZW9mKGJ1ZikpCisJCWxlbiA9IHNpemVvZihidWYpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOworfQorCitzdGF0aWMgc3NpemVfdCB3cml0ZV9maWxlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSBjb25zdCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKKwkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZlsyMF07CisKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyYnVmLCBtaW4oY291bnQsIHNpemVvZihidWYpKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKHN0cm5jbXAoYnVmLCAic3RhcnQiLCA1KSA9PSAwKQorCQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoc2MtPmh3KTsKKwllbHNlIGlmIChzdHJuY21wKGJ1ZiwgInN0b3AiLCA0KSA9PSAwKQorCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoc2MtPmh3KTsKKworCXJldHVybiBjb3VudDsKK30KKworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX3F1ZXVlID0geworCS5yZWFkID0gcmVhZF9maWxlX3F1ZXVlLAorCS53cml0ZSA9IHdyaXRlX2ZpbGVfcXVldWUsCisJLm9wZW4gPSBhdGg1a19kZWJ1Z2ZzX29wZW4sCisJLm93bmVyID0gVEhJU19NT0RVTEUsCit9OworCisKIC8qIGluaXQgKi8KIAogdm9pZApAQCAtNzcyLDYgKzg1NywxMSBAQAogCQkJCVNfSVdVU1IgfCBTX0lSVVNSLAogCQkJCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeWRpciwgc2MsCiAJCQkJJmZvcHNfYW5pKTsKKworCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3F1ZXVlID0gZGVidWdmc19jcmVhdGVfZmlsZSgicXVldWUiLAorCQkJCVNfSVdVU1IgfCBTX0lSVVNSLAorCQkJCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeWRpciwgc2MsCisJCQkJJmZvcHNfcXVldWUpOwogfQogCiB2b2lkCkBAIC03OTAsNiArODgwLDcgQEAKIAlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19hbnRlbm5hKTsKIAlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19mcmFtZWVycm9ycyk7CiAJZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfYW5pKTsKKwlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19xdWV1ZSk7CiAJZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfcGh5ZGlyKTsKIH0KIApAQCAtODUyLDcgKzk0Myw3IEBACiAJCWRzLCAodW5zaWduZWQgbG9uZyBsb25nKWJmLT5kYWRkciwKIAkJZHMtPmRzX2xpbmssIGRzLT5kc19kYXRhLAogCQlyZC0+cnhfY3RsLnJ4X2NvbnRyb2xfMCwgcmQtPnJ4X2N0bC5yeF9jb250cm9sXzEsCi0JCXJkLT51LnJ4X3N0YXQucnhfc3RhdHVzXzAsIHJkLT51LnJ4X3N0YXQucnhfc3RhdHVzXzAsCisJCXJkLT5yeF9zdGF0LnJ4X3N0YXR1c18wLCByZC0+cnhfc3RhdC5yeF9zdGF0dXNfMSwKIAkJIWRvbmUgPyAnICcgOiAocnMtPnJzX3N0YXR1cyA9PSAwKSA/ICcqJyA6ICchJyk7CiB9CiAKQEAgLTg2Nyw3ICs5NTgsNyBAQAogCWlmIChsaWtlbHkoIShzYy0+ZGVidWcubGV2ZWwgJiBBVEg1S19ERUJVR19SRVNFVCkpKQogCQlyZXR1cm47CiAKLQlwcmludGsoS0VSTl9ERUJVRyAicnggcXVldWUgJXgsIGxpbmsgJXBcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgInJ4ZHAgJXgsIHJ4bGluayAlcFxuIiwKIAkJYXRoNWtfaHdfZ2V0X3J4ZHAoYWgpLCBzYy0+cnhsaW5rKTsKIAogCXNwaW5fbG9ja19iaCgmc2MtPnJ4YnVmbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZGVidWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZWJ1Zy5oCmluZGV4IGRkZDViM2EuLjYwNmFlOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZWJ1Zy5oCkBAIC03Nyw2ICs3Nyw3IEBACiAJc3RydWN0IGRlbnRyeQkJKmRlYnVnZnNfYW50ZW5uYTsKIAlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdmc19mcmFtZWVycm9yczsKIAlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdmc19hbmk7CisJc3RydWN0IGRlbnRyeQkJKmRlYnVnZnNfcXVldWU7CiB9OwogCiAvKioKQEAgLTExNSwxOCArMTE2LDEyIEBACiAJQVRINUtfREVCVUdfRFVNUF9SWAk9IDB4MDAwMDAxMDAsCiAJQVRINUtfREVCVUdfRFVNUF9UWAk9IDB4MDAwMDAyMDAsCiAJQVRINUtfREVCVUdfRFVNUEJBTkRTCT0gMHgwMDAwMDQwMCwKLQlBVEg1S19ERUJVR19UUkFDRQk9IDB4MDAwMDEwMDAsCiAJQVRINUtfREVCVUdfQU5JCQk9IDB4MDAwMDIwMDAsCiAJQVRINUtfREVCVUdfQU5ZCQk9IDB4ZmZmZmZmZmYKIH07CiAKICNpZmRlZiBDT05GSUdfQVRINUtfREVCVUcKIAotI2RlZmluZSBBVEg1S19UUkFDRShfc2MpIGRvIHsgXAotCWlmICh1bmxpa2VseSgoX3NjKS0+ZGVidWcubGV2ZWwgJiBBVEg1S19ERUJVR19UUkFDRSkpIFwKLQkJcHJpbnRrKEtFUk5fREVCVUcgImF0aDVrIHRyYWNlICVzOiVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOyBcCi0JfSB3aGlsZSAoMCkKLQogI2RlZmluZSBBVEg1S19EQkcoX3NjLCBfbSwgX2ZtdCwgLi4uKSBkbyB7IFwKIAlpZiAodW5saWtlbHkoKF9zYyktPmRlYnVnLmxldmVsICYgKF9tKSAmJiBuZXRfcmF0ZWxpbWl0KCkpKSBcCiAJCUFUSDVLX1BSSU5USyhfc2MsIEtFUk5fREVCVUcsICIoJXM6JWQpOiAiIF9mbXQsIFwKQEAgLTE2OCw4ICsxNjMsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAotI2RlZmluZSBBVEg1S19UUkFDRShfc2MpIHR5cGVjaGVjayhzdHJ1Y3QgYXRoNWtfc29mdGMgKiwgKF9zYykpCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDMsIDQpKSkKIEFUSDVLX0RCRyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCB1bnNpZ25lZCBpbnQgbSwgY29uc3QgY2hhciAqZm10LCAuLi4pIHt9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZXNjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZGVzYy5jCmluZGV4IDdkN2I2NDYuLjQzMjQ0MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZXNjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Rlc2MuYwpAQCAtOTEsMTQgKzkxLDEzIEBACiAJdHhfY3RsLT50eF9jb250cm9sXzEgPSBwa3RfbGVuICYgQVI1S18yV19UWF9ERVNDX0NUTDFfQlVGX0xFTjsKIAogCS8qCi0JICogVmVyaWZ5IGFuZCBzZXQgaGVhZGVyIGxlbmd0aAotCSAqIFhYWDogSSBvbmx5IGZvdW5kIHRoYXQgb24gNTIxMCBjb2RlLCBkb2VzIGl0IHdvcmsgb24gNTIxMSA/CisJICogVmVyaWZ5IGFuZCBzZXQgaGVhZGVyIGxlbmd0aCAob25seSA1MjEwKQogCSAqLwogCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMCkgewotCQlpZiAoaGRyX2xlbiAmIH5BUjVLXzJXX1RYX0RFU0NfQ1RMMF9IRUFERVJfTEVOKQorCQlpZiAoaGRyX2xlbiAmIH5BUjVLXzJXX1RYX0RFU0NfQ1RMMF9IRUFERVJfTEVOXzUyMTApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJdHhfY3RsLT50eF9jb250cm9sXzAgfD0KLQkJCUFSNUtfUkVHX1NNKGhkcl9sZW4sIEFSNUtfMldfVFhfREVTQ19DVEwwX0hFQURFUl9MRU4pOworCQkJQVI1S19SRUdfU00oaGRyX2xlbiwgQVI1S18yV19UWF9ERVNDX0NUTDBfSEVBREVSX0xFTl81MjEwKTsKIAl9CiAKIAkvKkRpZmZlcmVuY2VzIGJldHdlZW4gNTIxMC01MjExKi8KQEAgLTExMCwxMSArMTA5LDExIEBACiAJCWNhc2UgQVI1S19QS1RfVFlQRV9QSUZTOgogCQkJZnJhbWVfdHlwZSA9IEFSNUtfQVI1MjEwX1RYX0RFU0NfRlJBTUVfVFlQRV9QSUZTOwogCQlkZWZhdWx0OgotCQkJZnJhbWVfdHlwZSA9IHR5cGUgLyo8PCAyID8qLzsKKwkJCWZyYW1lX3R5cGUgPSB0eXBlOwogCQl9CiAKIAkJdHhfY3RsLT50eF9jb250cm9sXzAgfD0KLQkJQVI1S19SRUdfU00oZnJhbWVfdHlwZSwgQVI1S18yV19UWF9ERVNDX0NUTDBfRlJBTUVfVFlQRSkgfAorCQlBUjVLX1JFR19TTShmcmFtZV90eXBlLCBBUjVLXzJXX1RYX0RFU0NfQ1RMMF9GUkFNRV9UWVBFXzUyMTApIHwKIAkJQVI1S19SRUdfU00odHhfcmF0ZTAsIEFSNUtfMldfVFhfREVTQ19DVEwwX1hNSVRfUkFURSk7CiAKIAl9IGVsc2UgewpAQCAtMTIzLDIxICsxMjIsMzAgQEAKIAkJCUFSNUtfUkVHX1NNKGFudGVubmFfbW9kZSwKIAkJCQlBUjVLXzJXX1RYX0RFU0NfQ1RMMF9BTlRfTU9ERV9YTUlUKTsKIAkJdHhfY3RsLT50eF9jb250cm9sXzEgfD0KLQkJCUFSNUtfUkVHX1NNKHR5cGUsIEFSNUtfMldfVFhfREVTQ19DVEwxX0ZSQU1FX1RZUEUpOworCQkJQVI1S19SRUdfU00odHlwZSwgQVI1S18yV19UWF9ERVNDX0NUTDFfRlJBTUVfVFlQRV81MjExKTsKIAl9CisKICNkZWZpbmUgX1RYX0ZMQUdTKF9jLCBfZmxhZykJCQkJCVwKIAlpZiAoZmxhZ3MgJiBBUjVLX1RYREVTQ18jI19mbGFnKSB7CQkJXAogCQl0eF9jdGwtPnR4X2NvbnRyb2xfIyNfYyB8PQkJCVwKIAkJCUFSNUtfMldfVFhfREVTQ19DVEwjI19jIyNfIyNfZmxhZzsJXAogCX0KLQorI2RlZmluZSBfVFhfRkxBR1NfNTIxMShfYywgX2ZsYWcpCQkJCQlcCisJaWYgKGZsYWdzICYgQVI1S19UWERFU0NfIyNfZmxhZykgewkJCQlcCisJCXR4X2N0bC0+dHhfY29udHJvbF8jI19jIHw9CQkJCVwKKwkJCUFSNUtfMldfVFhfREVTQ19DVEwjI19jIyNfIyNfZmxhZyMjXzUyMTE7CVwKKwl9CiAJX1RYX0ZMQUdTKDAsIENMUkRNQVNLKTsKLQlfVFhfRkxBR1MoMCwgVkVPTCk7CiAJX1RYX0ZMQUdTKDAsIElOVFJFUSk7CiAJX1RYX0ZMQUdTKDAsIFJUU0VOQSk7Ci0JX1RYX0ZMQUdTKDEsIE5PQUNLKTsKKworCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMSkgeworCQlfVFhfRkxBR1NfNTIxMSgwLCBWRU9MKTsKKwkJX1RYX0ZMQUdTXzUyMTEoMSwgTk9BQ0spOworCX0KIAogI3VuZGVmIF9UWF9GTEFHUworI3VuZGVmIF9UWF9GTEFHU181MjExCiAKIAkvKgogCSAqIFdFUCBjcmFwCkBAIC0xNDcsNyArMTU1LDcgQEAKIAkJCUFSNUtfMldfVFhfREVTQ19DVEwwX0VOQ1JZUFRfS0VZX1ZBTElEOwogCQl0eF9jdGwtPnR4X2NvbnRyb2xfMSB8PQogCQkJQVI1S19SRUdfU00oa2V5X2luZGV4LAotCQkJQVI1S18yV19UWF9ERVNDX0NUTDFfRU5DUllQVF9LRVlfSU5ERVgpOworCQkJQVI1S18yV19UWF9ERVNDX0NUTDFfRU5DX0tFWV9JRFgpOwogCX0KIAogCS8qCkBAIC0xNTYsNyArMTY0LDcgQEAKIAlpZiAoKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEwKSAmJgogCQkJKGZsYWdzICYgKEFSNUtfVFhERVNDX1JUU0VOQSB8IEFSNUtfVFhERVNDX0NUU0VOQSkpKQogCQl0eF9jdGwtPnR4X2NvbnRyb2xfMSB8PSBydHNjdHNfZHVyYXRpb24gJgotCQkJCUFSNUtfMldfVFhfREVTQ19DVEwxX1JUU19EVVJBVElPTjsKKwkJCQlBUjVLXzJXX1RYX0RFU0NfQ1RMMV9SVFNfRFVSQVRJT05fNTIxMDsKIAogCXJldHVybiAwOwogfQpAQCAtMTc2LDcgKzE4NCw2IEBACiAJc3RydWN0IGF0aDVrX2h3XzR3X3R4X2N0bCAqdHhfY3RsOwogCXVuc2lnbmVkIGludCBmcmFtZV9sZW47CiAKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwogCXR4X2N0bCA9ICZkZXNjLT51ZC5kc190eDUyMTIudHhfY3RsOwogCiAJLyoKQEAgLTI1Niw3ICsyNjMsNyBAQAogCWlmIChrZXlfaW5kZXggIT0gQVI1S19UWEtFWUlYX0lOVkFMSUQpIHsKIAkJdHhfY3RsLT50eF9jb250cm9sXzAgfD0gQVI1S180V19UWF9ERVNDX0NUTDBfRU5DUllQVF9LRVlfVkFMSUQ7CiAJCXR4X2N0bC0+dHhfY29udHJvbF8xIHw9IEFSNUtfUkVHX1NNKGtleV9pbmRleCwKLQkJCQlBUjVLXzRXX1RYX0RFU0NfQ1RMMV9FTkNSWVBUX0tFWV9JTkRFWCk7CisJCQkJQVI1S180V19UWF9ERVNDX0NUTDFfRU5DUllQVF9LRVlfSURYKTsKIAl9CiAKIAkvKgpAQCAtMjc4LDEzICsyODUsMTcgQEAKIC8qCiAgKiBJbml0aWFsaXplIGEgNC13b3JkIG11bHRpIHJhdGUgcmV0cnkgdHggY29udHJvbCBkZXNjcmlwdG9yIG9uIDUyMTIKICAqLwotc3RhdGljIGludAoraW50CiBhdGg1a19od19zZXR1cF9tcnJfdHhfZGVzYyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBzdHJ1Y3QgYXRoNWtfZGVzYyAqZGVzYywKIAl1bnNpZ25lZCBpbnQgdHhfcmF0ZTEsIHVfaW50IHR4X3RyaWVzMSwgdV9pbnQgdHhfcmF0ZTIsCiAJdV9pbnQgdHhfdHJpZXMyLCB1bnNpZ25lZCBpbnQgdHhfcmF0ZTMsIHVfaW50IHR4X3RyaWVzMykKIHsKIAlzdHJ1Y3QgYXRoNWtfaHdfNHdfdHhfY3RsICp0eF9jdGw7CiAKKwkvKiBubyBtcnIgc3VwcG9ydCBmb3IgY2FyZHMgb2xkZXIgdGhhbiA1MjEyICovCisJaWYgKGFoLT5haF92ZXJzaW9uIDwgQVI1S19BUjUyMTIpCisJCXJldHVybiAwOworCiAJLyoKIAkgKiBSYXRlcyBjYW4gYmUgMCBhcyBsb25nIGFzIHRoZSByZXRyeSBjb3VudCBpcyAwIHRvby4KIAkgKiBBIHplcm8gcmF0ZSBhbmQgbm9uemVybyByZXRyeSBjb3VudCB3aWxsIHB1dCB0aGUgSFcgaW50byBhIG1vZGUgd2hlcmUKQEAgLTMyNCwxNSArMzM1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogbm8gbXJyIHN1cHBvcnQgZm9yIGNhcmRzIG9sZGVyIHRoYW4gNTIxMiAqLwotc3RhdGljIGludAotYXRoNWtfaHdfc2V0dXBfbm9fbXJyKHN0cnVjdCBhdGg1a19odyAqYWgsIHN0cnVjdCBhdGg1a19kZXNjICpkZXNjLAotCXVuc2lnbmVkIGludCB0eF9yYXRlMSwgdV9pbnQgdHhfdHJpZXMxLCB1X2ludCB0eF9yYXRlMiwKLQl1X2ludCB0eF90cmllczIsIHVuc2lnbmVkIGludCB0eF9yYXRlMywgdV9pbnQgdHhfdHJpZXMzKQotewotCXJldHVybiAwOwotfQotCiAvKgogICogUHJvY2Nlc3MgdGhlIHR4IHN0YXR1cyBkZXNjcmlwdG9yIG9uIDUyMTAvNTIxMQogICovCkBAIC0zNDIsOCArMzQ0LDYgQEAKIAlzdHJ1Y3QgYXRoNWtfaHdfMndfdHhfY3RsICp0eF9jdGw7CiAJc3RydWN0IGF0aDVrX2h3X3R4X3N0YXR1cyAqdHhfc3RhdHVzOwogCi0JQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKLQogCXR4X2N0bCA9ICZkZXNjLT51ZC5kc190eDUyMTAudHhfY3RsOwogCXR4X3N0YXR1cyA9ICZkZXNjLT51ZC5kc190eDUyMTAudHhfc3RhdDsKIApAQCAtMzk2LDggKzM5Niw2IEBACiAJc3RydWN0IGF0aDVrX2h3XzR3X3R4X2N0bCAqdHhfY3RsOwogCXN0cnVjdCBhdGg1a19od190eF9zdGF0dXMgKnR4X3N0YXR1czsKIAotCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7Ci0KIAl0eF9jdGwgPSAmZGVzYy0+dWQuZHNfdHg1MjEyLnR4X2N0bDsKIAl0eF9zdGF0dXMgPSAmZGVzYy0+dWQuZHNfdHg1MjEyLnR4X3N0YXQ7CiAKQEAgLTQxOSwxMSArNDE3LDExIEBACiAJdHMtPnRzX3Jzc2kgPSBBUjVLX1JFR19NUyh0eF9zdGF0dXMtPnR4X3N0YXR1c18xLAogCQlBUjVLX0RFU0NfVFhfU1RBVFVTMV9BQ0tfU0lHX1NUUkVOR1RIKTsKIAl0cy0+dHNfYW50ZW5uYSA9ICh0eF9zdGF0dXMtPnR4X3N0YXR1c18xICYKLQkJQVI1S19ERVNDX1RYX1NUQVRVUzFfWE1JVF9BTlRFTk5BKSA/IDIgOiAxOworCQlBUjVLX0RFU0NfVFhfU1RBVFVTMV9YTUlUX0FOVEVOTkFfNTIxMikgPyAyIDogMTsKIAl0cy0+dHNfc3RhdHVzID0gMDsKIAogCXRzLT50c19maW5hbF9pZHggPSBBUjVLX1JFR19NUyh0eF9zdGF0dXMtPnR4X3N0YXR1c18xLAotCQkJQVI1S19ERVNDX1RYX1NUQVRVUzFfRklOQUxfVFNfSU5ERVgpOworCQkJQVI1S19ERVNDX1RYX1NUQVRVUzFfRklOQUxfVFNfSVhfNTIxMik7CiAKIAkvKiBUaGUgbG9uZ3JldHJ5IGNvdW50ZXIgaGFzIHRoZSBudW1iZXIgb2YgdW4tYWNrZWQgcmV0cmllcwogCSAqIGZvciB0aGUgZmluYWwgcmF0ZS4gVG8gZ2V0IHRoZSB0b3RhbCBudW1iZXIgb2YgcmV0cmllcwpAQCAtNDg1LDEyICs0ODMsMTEgQEAKIC8qCiAgKiBJbml0aWFsaXplIGFuIHJ4IGNvbnRyb2wgZGVzY3JpcHRvcgogICovCi1zdGF0aWMgaW50IGF0aDVrX2h3X3NldHVwX3J4X2Rlc2Moc3RydWN0IGF0aDVrX2h3ICphaCwgc3RydWN0IGF0aDVrX2Rlc2MgKmRlc2MsCi0JCQl1MzIgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKQoraW50IGF0aDVrX2h3X3NldHVwX3J4X2Rlc2Moc3RydWN0IGF0aDVrX2h3ICphaCwgc3RydWN0IGF0aDVrX2Rlc2MgKmRlc2MsCisJCQkgICB1MzIgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXN0cnVjdCBhdGg1a19od19yeF9jdGwgKnJ4X2N0bDsKIAotCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CiAJcnhfY3RsID0gJmRlc2MtPnVkLmRzX3J4LnJ4X2N0bDsKIAogCS8qCkBAIC01MDIsMTAgKzQ5OSwxMSBAQAogCSovCiAJbWVtc2V0KCZkZXNjLT51ZC5kc19yeCwgMCwgc2l6ZW9mKHN0cnVjdCBhdGg1a19od19hbGxfcnhfZGVzYykpOwogCisJaWYgKHVubGlrZWx5KHNpemUgJiB+QVI1S19ERVNDX1JYX0NUTDFfQlVGX0xFTikpCisJCXJldHVybiAtRUlOVkFMOworCiAJLyogU2V0dXAgZGVzY3JpcHRvciAqLwogCXJ4X2N0bC0+cnhfY29udHJvbF8xID0gc2l6ZSAmIEFSNUtfREVTQ19SWF9DVEwxX0JVRl9MRU47Ci0JaWYgKHVubGlrZWx5KHJ4X2N0bC0+cnhfY29udHJvbF8xICE9IHNpemUpKQotCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChmbGFncyAmIEFSNUtfUlhERVNDX0lOVFJFUSkKIAkJcnhfY3RsLT5yeF9jb250cm9sXzEgfD0gQVI1S19ERVNDX1JYX0NUTDFfSU5UUkVROwpAQCAtNTIxLDEzICs1MTksMTUgQEAKIHsKIAlzdHJ1Y3QgYXRoNWtfaHdfcnhfc3RhdHVzICpyeF9zdGF0dXM7CiAKLQlyeF9zdGF0dXMgPSAmZGVzYy0+dWQuZHNfcngudS5yeF9zdGF0OworCXJ4X3N0YXR1cyA9ICZkZXNjLT51ZC5kc19yeC5yeF9zdGF0OwogCiAJLyogTm8gZnJhbWUgcmVjZWl2ZWQgLyBub3QgcmVhZHkgKi8KIAlpZiAodW5saWtlbHkoIShyeF9zdGF0dXMtPnJ4X3N0YXR1c18xICYKLQlBUjVLXzUyMTBfUlhfREVTQ19TVEFUVVMxX0RPTkUpKSkKKwkJCUFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzFfRE9ORSkpKQogCQlyZXR1cm4gLUVJTlBST0dSRVNTOwogCisJbWVtc2V0KHJzLCAwLCBzaXplb2Yoc3RydWN0IGF0aDVrX3J4X3N0YXR1cykpOworCiAJLyoKIAkgKiBGcmFtZSByZWNlaXZlIHN0YXR1cwogCSAqLwpAQCAtNTM3LDE1ICs1MzcsMjMgQEAKIAkJQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMF9SRUNFSVZFX1NJR05BTCk7CiAJcnMtPnJzX3JhdGUgPSBBUjVLX1JFR19NUyhyeF9zdGF0dXMtPnJ4X3N0YXR1c18wLAogCQlBUjVLXzUyMTBfUlhfREVTQ19TVEFUVVMwX1JFQ0VJVkVfUkFURSk7Ci0JcnMtPnJzX2FudGVubmEgPSBBUjVLX1JFR19NUyhyeF9zdGF0dXMtPnJ4X3N0YXR1c18wLAotCQlBUjVLXzUyMTBfUlhfREVTQ19TVEFUVVMwX1JFQ0VJVkVfQU5URU5OQSk7CiAJcnMtPnJzX21vcmUgPSAhIShyeF9zdGF0dXMtPnJ4X3N0YXR1c18wICYKIAkJQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMF9NT1JFKTsKLQkvKiBUT0RPOiB0aGlzIHRpbWVzdGFtcCBpcyAxMyBiaXQsIGxhdGVyIG9uIHdlIGFzc3VtZSAxNSBiaXQgKi8KKwkvKiBUT0RPOiB0aGlzIHRpbWVzdGFtcCBpcyAxMyBiaXQsIGxhdGVyIG9uIHdlIGFzc3VtZSAxNSBiaXQhCisJICogYWxzbyB0aGUgSEFMIGNvZGUgZm9yIDUyMTAgc2F5cyB0aGUgdGltZXN0YW1wIGlzIGJpdHMgWzEwLi4yMl0gb2YgdGhlCisJICogVFNGLCBhbmQgZXh0ZW5kcyB0aGUgdGltZXN0YW1wIGhlcmUgdG8gMTUgYml0LgorCSAqIHdlIG5lZWQgdG8gY2hlY2sgb24gNTIxMC4uLgorCSAqLwogCXJzLT5yc190c3RhbXAgPSBBUjVLX1JFR19NUyhyeF9zdGF0dXMtPnJ4X3N0YXR1c18xLAogCQlBUjVLXzUyMTBfUlhfREVTQ19TVEFUVVMxX1JFQ0VJVkVfVElNRVNUQU1QKTsKLQlycy0+cnNfc3RhdHVzID0gMDsKLQlycy0+cnNfcGh5ZXJyID0gMDsKKworCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMSkKKwkJcnMtPnJzX2FudGVubmEgPSBBUjVLX1JFR19NUyhyeF9zdGF0dXMtPnJ4X3N0YXR1c18wLAorCQkJCUFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzBfUkVDRUlWRV9BTlRfNTIxMSk7CisJZWxzZQorCQlycy0+cnNfYW50ZW5uYSA9IChyeF9zdGF0dXMtPnJ4X3N0YXR1c18wICYKKwkJCQlBUjVLXzUyMTBfUlhfREVTQ19TVEFUVVMwX1JFQ0VJVkVfQU5UXzUyMTApCisJCQkJPyAyIDogMTsKIAogCS8qCiAJICogS2V5IHRhYmxlIHN0YXR1cwpAQCAtNTYwLDE5ICs1NjgsMjEgQEAKIAkgKiBSZWNlaXZlL2Rlc2NyaXB0b3IgZXJyb3JzCiAJICovCiAJaWYgKCEocnhfc3RhdHVzLT5yeF9zdGF0dXNfMSAmCi0JQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMV9GUkFNRV9SRUNFSVZFX09LKSkgeworCQkJQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMV9GUkFNRV9SRUNFSVZFX09LKSkgewogCQlpZiAocnhfc3RhdHVzLT5yeF9zdGF0dXNfMSAmCiAJCQkJQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMV9DUkNfRVJST1IpCiAJCQlycy0+cnNfc3RhdHVzIHw9IEFSNUtfUlhFUlJfQ1JDOwogCi0JCWlmIChyeF9zdGF0dXMtPnJ4X3N0YXR1c18xICYKLQkJCQlBUjVLXzUyMTBfUlhfREVTQ19TVEFUVVMxX0ZJRk9fT1ZFUlJVTikKKwkJLyogb25seSBvbiA1MjEwICovCisJCWlmICgoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTApICYmCisJCSAgICAocnhfc3RhdHVzLT5yeF9zdGF0dXNfMSAmCisJCQkJQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMV9GSUZPX09WRVJSVU5fNTIxMCkpCiAJCQlycy0+cnNfc3RhdHVzIHw9IEFSNUtfUlhFUlJfRklGTzsKIAogCQlpZiAocnhfc3RhdHVzLT5yeF9zdGF0dXNfMSAmCiAJCQkJQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMV9QSFlfRVJST1IpIHsKIAkJCXJzLT5yc19zdGF0dXMgfD0gQVI1S19SWEVSUl9QSFk7Ci0JCQlycy0+cnNfcGh5ZXJyIHw9IEFSNUtfUkVHX01TKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzEsCisJCQlycy0+cnNfcGh5ZXJyID0gQVI1S19SRUdfTVMocnhfc3RhdHVzLT5yeF9zdGF0dXNfMSwKIAkJCQlBUjVLXzUyMTBfUlhfREVTQ19TVEFUVVMxX1BIWV9FUlJPUik7CiAJCX0KIApAQCAtNTg4LDIyICs1OTgsMjAgQEAKICAqIFByb2NjZXNzIHRoZSByeCBzdGF0dXMgZGVzY3JpcHRvciBvbiA1MjEyCiAgKi8KIHN0YXRpYyBpbnQgYXRoNWtfaHdfcHJvY181MjEyX3J4X3N0YXR1cyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLAotCQlzdHJ1Y3QgYXRoNWtfZGVzYyAqZGVzYywgc3RydWN0IGF0aDVrX3J4X3N0YXR1cyAqcnMpCisJCQkJCXN0cnVjdCBhdGg1a19kZXNjICpkZXNjLAorCQkJCQlzdHJ1Y3QgYXRoNWtfcnhfc3RhdHVzICpycykKIHsKIAlzdHJ1Y3QgYXRoNWtfaHdfcnhfc3RhdHVzICpyeF9zdGF0dXM7Ci0Jc3RydWN0IGF0aDVrX2h3X3J4X2Vycm9yICpyeF9lcnI7CiAKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwotCXJ4X3N0YXR1cyA9ICZkZXNjLT51ZC5kc19yeC51LnJ4X3N0YXQ7Ci0KLQkvKiBPdmVybGF5IG9uIGVycm9yICovCi0JcnhfZXJyID0gJmRlc2MtPnVkLmRzX3J4LnUucnhfZXJyOworCXJ4X3N0YXR1cyA9ICZkZXNjLT51ZC5kc19yeC5yeF9zdGF0OwogCiAJLyogTm8gZnJhbWUgcmVjZWl2ZWQgLyBub3QgcmVhZHkgKi8KIAlpZiAodW5saWtlbHkoIShyeF9zdGF0dXMtPnJ4X3N0YXR1c18xICYKLQlBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX0RPTkUpKSkKKwkJCQlBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX0RPTkUpKSkKIAkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKIAorCW1lbXNldChycywgMCwgc2l6ZW9mKHN0cnVjdCBhdGg1a19yeF9zdGF0dXMpKTsKKwogCS8qCiAJICogRnJhbWUgcmVjZWl2ZSBzdGF0dXMKIAkgKi8KQEAgLTYxOSwxNSArNjI3LDEzIEBACiAJCUFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzBfTU9SRSk7CiAJcnMtPnJzX3RzdGFtcCA9IEFSNUtfUkVHX01TKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzEsCiAJCUFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzFfUkVDRUlWRV9USU1FU1RBTVApOwotCXJzLT5yc19zdGF0dXMgPSAwOwotCXJzLT5yc19waHllcnIgPSAwOwogCiAJLyoKIAkgKiBLZXkgdGFibGUgc3RhdHVzCiAJICovCiAJaWYgKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzEgJiBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX0tFWV9JTkRFWF9WQUxJRCkKIAkJcnMtPnJzX2tleWl4ID0gQVI1S19SRUdfTVMocnhfc3RhdHVzLT5yeF9zdGF0dXNfMSwKLQkJCQlBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX0tFWV9JTkRFWCk7CisJCQkJCSAgIEFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzFfS0VZX0lOREVYKTsKIAllbHNlCiAJCXJzLT5yc19rZXlpeCA9IEFSNUtfUlhLRVlJWF9JTlZBTElEOwogCkBAIC02MzUsNyArNjQxLDcgQEAKIAkgKiBSZWNlaXZlL2Rlc2NyaXB0b3IgZXJyb3JzCiAJICovCiAJaWYgKCEocnhfc3RhdHVzLT5yeF9zdGF0dXNfMSAmCi0JQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9GUkFNRV9SRUNFSVZFX09LKSkgeworCSAgICBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX0ZSQU1FX1JFQ0VJVkVfT0spKSB7CiAJCWlmIChyeF9zdGF0dXMtPnJ4X3N0YXR1c18xICYKIAkJCQlBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX0NSQ19FUlJPUikKIAkJCXJzLT5yc19zdGF0dXMgfD0gQVI1S19SWEVSUl9DUkM7CkBAIC02NDMsOSArNjQ5LDEwIEBACiAJCWlmIChyeF9zdGF0dXMtPnJ4X3N0YXR1c18xICYKIAkJCQlBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX1BIWV9FUlJPUikgewogCQkJcnMtPnJzX3N0YXR1cyB8PSBBUjVLX1JYRVJSX1BIWTsKLQkJCXJzLT5yc19waHllcnIgfD0gQVI1S19SRUdfTVMocnhfZXJyLT5yeF9lcnJvcl8xLAotCQkJCQkgICBBUjVLX1JYX0RFU0NfRVJST1IxX1BIWV9FUlJPUl9DT0RFKTsKLQkJCWF0aDVrX2FuaV9waHlfZXJyb3JfcmVwb3J0KGFoLCBycy0+cnNfcGh5ZXJyKTsKKwkJCXJzLT5yc19waHllcnIgPSBBUjVLX1JFR19NUyhyeF9zdGF0dXMtPnJ4X3N0YXR1c18xLAorCQkJCUFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzFfUEhZX0VSUk9SX0NPREUpOworCQkJaWYgKCFhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9oYXNfcGh5ZXJyX2NvdW50ZXJzKQorCQkJCWF0aDVrX2FuaV9waHlfZXJyb3JfcmVwb3J0KGFoLCBycy0+cnNfcGh5ZXJyKTsKIAkJfQogCiAJCWlmIChyeF9zdGF0dXMtPnJ4X3N0YXR1c18xICYKQEAgLTY1Niw3ICs2NjMsNiBAQAogCQkJCUFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzFfTUlDX0VSUk9SKQogCQkJcnMtPnJzX3N0YXR1cyB8PSBBUjVLX1JYRVJSX01JQzsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNjY1LDI5ICs2NzEsMTUgQEAKICAqLwogaW50IGF0aDVrX2h3X2luaXRfZGVzY19mdW5jdGlvbnMoc3RydWN0IGF0aDVrX2h3ICphaCkKIHsKLQotCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCAmJgotCQlhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMSAmJgotCQlhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMikKLQkJCXJldHVybiAtRU5PVFNVUFA7Ci0KIAlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIpIHsKLQkJYWgtPmFoX3NldHVwX3J4X2Rlc2MgPSBhdGg1a19od19zZXR1cF9yeF9kZXNjOwogCQlhaC0+YWhfc2V0dXBfdHhfZGVzYyA9IGF0aDVrX2h3X3NldHVwXzR3b3JkX3R4X2Rlc2M7Ci0JCWFoLT5haF9zZXR1cF9tcnJfdHhfZGVzYyA9IGF0aDVrX2h3X3NldHVwX21ycl90eF9kZXNjOwogCQlhaC0+YWhfcHJvY190eF9kZXNjID0gYXRoNWtfaHdfcHJvY180d29yZF90eF9zdGF0dXM7Ci0JfSBlbHNlIHsKLQkJYWgtPmFoX3NldHVwX3J4X2Rlc2MgPSBhdGg1a19od19zZXR1cF9yeF9kZXNjOwotCQlhaC0+YWhfc2V0dXBfdHhfZGVzYyA9IGF0aDVrX2h3X3NldHVwXzJ3b3JkX3R4X2Rlc2M7Ci0JCWFoLT5haF9zZXR1cF9tcnJfdHhfZGVzYyA9IGF0aDVrX2h3X3NldHVwX25vX21ycjsKLQkJYWgtPmFoX3Byb2NfdHhfZGVzYyA9IGF0aDVrX2h3X3Byb2NfMndvcmRfdHhfc3RhdHVzOwotCX0KLQotCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMikKIAkJYWgtPmFoX3Byb2NfcnhfZGVzYyA9IGF0aDVrX2h3X3Byb2NfNTIxMl9yeF9zdGF0dXM7Ci0JZWxzZSBpZiAoYWgtPmFoX3ZlcnNpb24gPD0gQVI1S19BUjUyMTEpCisJfSBlbHNlIGlmIChhaC0+YWhfdmVyc2lvbiA8PSBBUjVLX0FSNTIxMSkgeworCQlhaC0+YWhfc2V0dXBfdHhfZGVzYyA9IGF0aDVrX2h3X3NldHVwXzJ3b3JkX3R4X2Rlc2M7CisJCWFoLT5haF9wcm9jX3R4X2Rlc2MgPSBhdGg1a19od19wcm9jXzJ3b3JkX3R4X3N0YXR1czsKIAkJYWgtPmFoX3Byb2NfcnhfZGVzYyA9IGF0aDVrX2h3X3Byb2NfNTIxMF9yeF9zdGF0dXM7Ci0KKwl9IGVsc2UKKwkJcmV0dXJuIC1FTk9UU1VQUDsKIAlyZXR1cm4gMDsKIH0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Rlc2MuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZXNjLmgKaW5kZXggNjQ1MzhmYi4uYjJhZGIyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Rlc2MuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZGVzYy5oCkBAIC0xNywyOCArMTcsMjQgQEAKICAqLwogCiAvKgotICogSW50ZXJuYWwgUlgvVFggZGVzY3JpcHRvciBzdHJ1Y3R1cmVzCi0gKiAoclg6IHJlc2VydmVkIGZpZWxkcyBwb3NzaWJpbHkgdXNlZCBieSBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIGFyNWsgY2hpcHNldCkKKyAqIFJYL1RYIGRlc2NyaXB0b3Igc3RydWN0dXJlcwogICovCiAKIC8qCi0gKiBjb21tb24gaGFyZHdhcmUgUlggY29udHJvbCBkZXNjcmlwdG9yCisgKiBDb21tb24gaGFyZHdhcmUgUlggY29udHJvbCBkZXNjcmlwdG9yCiAgKi8KIHN0cnVjdCBhdGg1a19od19yeF9jdGwgewogCXUzMglyeF9jb250cm9sXzA7IC8qIFJYIGNvbnRyb2wgd29yZCAwICovCiAJdTMyCXJ4X2NvbnRyb2xfMTsgLyogUlggY29udHJvbCB3b3JkIDEgKi8KIH0gX19wYWNrZWQ7CiAKLS8qIFJYIGNvbnRyb2wgd29yZCAwIGZpZWxkL3NmbGFncyAqLwotI2RlZmluZSBBUjVLX0RFU0NfUlhfQ1RMMAkJCTB4MDAwMDAwMDAKLQogLyogUlggY29udHJvbCB3b3JkIDEgZmllbGRzL2ZsYWdzICovCi0jZGVmaW5lIEFSNUtfREVTQ19SWF9DVEwxX0JVRl9MRU4JCTB4MDAwMDBmZmYKLSNkZWZpbmUgQVI1S19ERVNDX1JYX0NUTDFfSU5UUkVRCQkweDAwMDAyMDAwCisjZGVmaW5lIEFSNUtfREVTQ19SWF9DVEwxX0JVRl9MRU4JCTB4MDAwMDBmZmYgLyogZGF0YSBidWZmZXIgbGVuZ3RoICovCisjZGVmaW5lIEFSNUtfREVTQ19SWF9DVEwxX0lOVFJFUQkJMHgwMDAwMjAwMCAvKiBSWCBpbnRlcnJ1cHQgcmVxdWVzdCAqLwogCiAvKgotICogY29tbW9uIGhhcmR3YXJlIFJYIHN0YXR1cyBkZXNjcmlwdG9yCi0gKiA1MjEwLzExIGFuZCA1MjEyIGRpZmZlciBvbmx5IGluIHRoZSBmbGFncyBkZWZpbmVkIGJlbG93CisgKiBDb21tb24gaGFyZHdhcmUgUlggc3RhdHVzIGRlc2NyaXB0b3IKKyAqIDUyMTAsIDUyMTEgYW5kIDUyMTIgZGlmZmVyIG9ubHkgaW4gdGhlIGZpZWxkcyBhbmQgZmxhZ3MgZGVmaW5lZCBiZWxvdwogICovCiBzdHJ1Y3QgYXRoNWtfaHdfcnhfc3RhdHVzIHsKIAl1MzIJcnhfc3RhdHVzXzA7IC8qIFJYIHN0YXR1cyB3b3JkIDAgKi8KQEAgLTQ3LDgxICs0Myw2OSBAQAogCiAvKiA1MjEwLzUyMTEgKi8KIC8qIFJYIHN0YXR1cyB3b3JkIDAgZmllbGRzL2ZsYWdzICovCi0jZGVmaW5lIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzBfREFUQV9MRU4JCTB4MDAwMDBmZmYKLSNkZWZpbmUgQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMF9NT1JFCQkJMHgwMDAwMTAwMAotI2RlZmluZSBBUjVLXzUyMTBfUlhfREVTQ19TVEFUVVMwX1JFQ0VJVkVfUkFURQkJMHgwMDA3ODAwMAorI2RlZmluZSBBUjVLXzUyMTBfUlhfREVTQ19TVEFUVVMwX0RBVEFfTEVOCQkweDAwMDAwZmZmIC8qIFJYIGRhdGEgbGVuZ3RoICovCisjZGVmaW5lIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzBfTU9SRQkJCTB4MDAwMDEwMDAgLyogbW9yZSBkZXNjIGZvciB0aGlzIGZyYW1lICovCisjZGVmaW5lIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzBfUkVDRUlWRV9BTlRfNTIxMAkweDAwMDA0MDAwIC8qIFs1MjEwXSByZWNlaXZlIG9uIGFudCAxICovCisjZGVmaW5lIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzBfUkVDRUlWRV9SQVRFCQkweDAwMDc4MDAwIC8qIHJlY2VwdGlvbiByYXRlICovCiAjZGVmaW5lIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzBfUkVDRUlWRV9SQVRFX1MJMTUKLSNkZWZpbmUgQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMF9SRUNFSVZFX1NJR05BTAkweDA3ZjgwMDAwCisjZGVmaW5lIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzBfUkVDRUlWRV9TSUdOQUwJMHgwN2Y4MDAwMCAvKiByc3NpICovCiAjZGVmaW5lIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzBfUkVDRUlWRV9TSUdOQUxfUwkxOQotI2RlZmluZSBBUjVLXzUyMTBfUlhfREVTQ19TVEFUVVMwX1JFQ0VJVkVfQU5URU5OQQkweDM4MDAwMDAwCi0jZGVmaW5lIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzBfUkVDRUlWRV9BTlRFTk5BX1MJMjcKKyNkZWZpbmUgQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMF9SRUNFSVZFX0FOVF81MjExCTB4MzgwMDAwMDAgLyogWzUyMTFdIHJlY2VpdmUgYW50ZW5uYSAqLworI2RlZmluZSBBUjVLXzUyMTBfUlhfREVTQ19TVEFUVVMwX1JFQ0VJVkVfQU5UXzUyMTFfUwkyNwogCiAvKiBSWCBzdGF0dXMgd29yZCAxIGZpZWxkcy9mbGFncyAqLwotI2RlZmluZSBBUjVLXzUyMTBfUlhfREVTQ19TVEFUVVMxX0RPTkUJCQkweDAwMDAwMDAxCi0jZGVmaW5lIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzFfRlJBTUVfUkVDRUlWRV9PSwkweDAwMDAwMDAyCi0jZGVmaW5lIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzFfQ1JDX0VSUk9SCQkweDAwMDAwMDA0Ci0jZGVmaW5lIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzFfRklGT19PVkVSUlVOCQkweDAwMDAwMDA4Ci0jZGVmaW5lIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzFfREVDUllQVF9DUkNfRVJST1IJMHgwMDAwMDAxMAotI2RlZmluZSBBUjVLXzUyMTBfUlhfREVTQ19TVEFUVVMxX1BIWV9FUlJPUgkJMHgwMDAwMDBlMAorI2RlZmluZSBBUjVLXzUyMTBfUlhfREVTQ19TVEFUVVMxX0RPTkUJCQkweDAwMDAwMDAxIC8qIGRlc2NyaXB0b3IgY29tcGxldGUgKi8KKyNkZWZpbmUgQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMV9GUkFNRV9SRUNFSVZFX09LCTB4MDAwMDAwMDIgLyogcmVjZXB0aW9uIHN1Y2Nlc3MgKi8KKyNkZWZpbmUgQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMV9DUkNfRVJST1IJCTB4MDAwMDAwMDQgLyogQ1JDIGVycm9yICovCisjZGVmaW5lIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzFfRklGT19PVkVSUlVOXzUyMTAJMHgwMDAwMDAwOCAvKiBbNTIxMF0gRklGTyBvdmVycnVuICovCisjZGVmaW5lIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzFfREVDUllQVF9DUkNfRVJST1IJMHgwMDAwMDAxMCAvKiBkZWN5cHRpb24gQ1JDIGZhaWx1cmUgKi8KKyNkZWZpbmUgQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMV9QSFlfRVJST1IJCTB4MDAwMDAwZTAgLyogUEhZIGVycm9yICovCiAjZGVmaW5lIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzFfUEhZX0VSUk9SX1MJCTUKLSNkZWZpbmUgQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMV9LRVlfSU5ERVhfVkFMSUQJMHgwMDAwMDEwMAotI2RlZmluZSBBUjVLXzUyMTBfUlhfREVTQ19TVEFUVVMxX0tFWV9JTkRFWAkJMHgwMDAwN2UwMAorI2RlZmluZSBBUjVLXzUyMTBfUlhfREVTQ19TVEFUVVMxX0tFWV9JTkRFWF9WQUxJRAkweDAwMDAwMTAwIC8qIGtleSBpbmRleCB2YWxpZCAqLworI2RlZmluZSBBUjVLXzUyMTBfUlhfREVTQ19TVEFUVVMxX0tFWV9JTkRFWAkJMHgwMDAwN2UwMCAvKiBkZWN5cHRpb24ga2V5IGluZGV4ICovCiAjZGVmaW5lIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzFfS0VZX0lOREVYX1MJCTkKLSNkZWZpbmUgQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMV9SRUNFSVZFX1RJTUVTVEFNUAkweDBmZmY4MDAwCisjZGVmaW5lIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzFfUkVDRUlWRV9USU1FU1RBTVAJMHgwZmZmODAwMCAvKiAxMyBiaXQgb2YgVFNGICovCiAjZGVmaW5lIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzFfUkVDRUlWRV9USU1FU1RBTVBfUwkxNQotI2RlZmluZSBBUjVLXzUyMTBfUlhfREVTQ19TVEFUVVMxX0tFWV9DQUNIRV9NSVNTCTB4MTAwMDAwMDAKKyNkZWZpbmUgQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMV9LRVlfQ0FDSEVfTUlTUwkweDEwMDAwMDAwIC8qIGtleSBjYWNoZSBtaXNzICovCiAKIC8qIDUyMTIgKi8KIC8qIFJYIHN0YXR1cyB3b3JkIDAgZmllbGRzL2ZsYWdzICovCi0jZGVmaW5lIEFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzBfREFUQV9MRU4JCTB4MDAwMDBmZmYKLSNkZWZpbmUgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMF9NT1JFCQkJMHgwMDAwMTAwMAotI2RlZmluZSBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMwX0RFQ09NUF9DUkNfRVJST1IJMHgwMDAwMjAwMAotI2RlZmluZSBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMwX1JFQ0VJVkVfUkFURQkJMHgwMDBmODAwMAorI2RlZmluZSBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMwX0RBVEFfTEVOCQkweDAwMDAwZmZmIC8qIFJYIGRhdGEgbGVuZ3RoICovCisjZGVmaW5lIEFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzBfTU9SRQkJCTB4MDAwMDEwMDAgLyogbW9yZSBkZXNjIGZvciB0aGlzIGZyYW1lICovCisjZGVmaW5lIEFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzBfREVDT01QX0NSQ19FUlJPUgkweDAwMDAyMDAwIC8qIGRlY29tcHJlc3Npb24gQ1JDIGVycm9yICovCisjZGVmaW5lIEFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzBfUkVDRUlWRV9SQVRFCQkweDAwMGY4MDAwIC8qIHJlY2VwdGlvbiByYXRlICovCiAjZGVmaW5lIEFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzBfUkVDRUlWRV9SQVRFX1MJMTUKLSNkZWZpbmUgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMF9SRUNFSVZFX1NJR05BTAkweDBmZjAwMDAwCisjZGVmaW5lIEFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzBfUkVDRUlWRV9TSUdOQUwJMHgwZmYwMDAwMCAvKiByc3NpICovCiAjZGVmaW5lIEFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzBfUkVDRUlWRV9TSUdOQUxfUwkyMAotI2RlZmluZSBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMwX1JFQ0VJVkVfQU5URU5OQQkweGYwMDAwMDAwCisjZGVmaW5lIEFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzBfUkVDRUlWRV9BTlRFTk5BCTB4ZjAwMDAwMDAgLyogcmVjZWl2ZSBhbnRlbm5hICovCiAjZGVmaW5lIEFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzBfUkVDRUlWRV9BTlRFTk5BX1MJMjgKIAogLyogUlggc3RhdHVzIHdvcmQgMSBmaWVsZHMvZmxhZ3MgKi8KLSNkZWZpbmUgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9ET05FCQkJMHgwMDAwMDAwMQotI2RlZmluZSBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX0ZSQU1FX1JFQ0VJVkVfT0sJMHgwMDAwMDAwMgotI2RlZmluZSBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX0NSQ19FUlJPUgkJMHgwMDAwMDAwNAotI2RlZmluZSBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX0RFQ1JZUFRfQ1JDX0VSUk9SCTB4MDAwMDAwMDgKLSNkZWZpbmUgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9QSFlfRVJST1IJCTB4MDAwMDAwMTAKLSNkZWZpbmUgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9NSUNfRVJST1IJCTB4MDAwMDAwMjAKLSNkZWZpbmUgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9LRVlfSU5ERVhfVkFMSUQJMHgwMDAwMDEwMAotI2RlZmluZSBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX0tFWV9JTkRFWAkJMHgwMDAwZmUwMAorI2RlZmluZSBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX0RPTkUJCQkweDAwMDAwMDAxIC8qIGRlc2NyaXB0b3IgY29tcGxldGUgKi8KKyNkZWZpbmUgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9GUkFNRV9SRUNFSVZFX09LCTB4MDAwMDAwMDIgLyogZnJhbWUgcmVjZXB0aW9uIHN1Y2Nlc3MgKi8KKyNkZWZpbmUgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9DUkNfRVJST1IJCTB4MDAwMDAwMDQgLyogQ1JDIGVycm9yICovCisjZGVmaW5lIEFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzFfREVDUllQVF9DUkNfRVJST1IJMHgwMDAwMDAwOCAvKiBkZWNyeXB0aW9uIENSQyBmYWlsdXJlICovCisjZGVmaW5lIEFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzFfUEhZX0VSUk9SCQkweDAwMDAwMDEwIC8qIFBIWSBlcnJvciAqLworI2RlZmluZSBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX01JQ19FUlJPUgkJMHgwMDAwMDAyMCAvKiBNSUMgZGVjcnlwdCBlcnJvciAqLworI2RlZmluZSBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX0tFWV9JTkRFWF9WQUxJRAkweDAwMDAwMTAwIC8qIGtleSBpbmRleCB2YWxpZCAqLworI2RlZmluZSBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX0tFWV9JTkRFWAkJMHgwMDAwZmUwMCAvKiBkZWNyeXB0aW9uIGtleSBpbmRleCAqLwogI2RlZmluZSBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX0tFWV9JTkRFWF9TCQk5Ci0jZGVmaW5lIEFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzFfUkVDRUlWRV9USU1FU1RBTVAJMHg3ZmZmMDAwMAorI2RlZmluZSBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX1JFQ0VJVkVfVElNRVNUQU1QCTB4N2ZmZjAwMDAgLyogZmlyc3QgMTViaXQgb2YgdGhlIFRTRiAqLwogI2RlZmluZSBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX1JFQ0VJVkVfVElNRVNUQU1QX1MJMTYKLSNkZWZpbmUgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9LRVlfQ0FDSEVfTUlTUwkweDgwMDAwMDAwCi0KLS8qCi0gKiBjb21tb24gaGFyZHdhcmUgUlggZXJyb3IgZGVzY3JpcHRvcgotICovCi1zdHJ1Y3QgYXRoNWtfaHdfcnhfZXJyb3IgewotCXUzMglyeF9lcnJvcl8wOyAvKiBSWCBzdGF0dXMgd29yZCAwICovCi0JdTMyCXJ4X2Vycm9yXzE7IC8qIFJYIHN0YXR1cyB3b3JkIDEgKi8KLX0gX19wYWNrZWQ7Ci0KLS8qIFJYIGVycm9yIHdvcmQgMCBmaWVsZHMvZmxhZ3MgKi8KLSNkZWZpbmUgQVI1S19SWF9ERVNDX0VSUk9SMAkJCTB4MDAwMDAwMDAKLQotLyogUlggZXJyb3Igd29yZCAxIGZpZWxkcy9mbGFncyAqLwotI2RlZmluZSBBUjVLX1JYX0RFU0NfRVJST1IxX1BIWV9FUlJPUl9DT0RFCTB4MDAwMGZmMDAKLSNkZWZpbmUgQVI1S19SWF9ERVNDX0VSUk9SMV9QSFlfRVJST1JfQ09ERV9TCTgKKyNkZWZpbmUgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9LRVlfQ0FDSEVfTUlTUwkweDgwMDAwMDAwIC8qIGtleSBjYWNoZSBtaXNzICovCisjZGVmaW5lIEFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzFfUEhZX0VSUk9SX0NPREUJMHgwMDAwZmYwMCAvKiBwaHkgZXJyb3IgY29kZSBvdmVybGF5cyBrZXkgaW5kZXggYW5kIHZhbGlkIGZpZWxkcyAqLworI2RlZmluZSBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX1BIWV9FUlJPUl9DT0RFX1MJOAogCiAvKioKICAqIGVudW0gYXRoNWtfcGh5X2Vycm9yX2NvZGUgLSBQSFkgRXJyb3IgY29kZXMKICAqLwogZW51bSBhdGg1a19waHlfZXJyb3JfY29kZSB7Ci0JQVI1S19SWF9QSFlfRVJST1JfVU5ERVJSVU4JCT0gMCwJLyogVHJhbnNtaXQgdW5kZXJydW4gKi8KKwlBUjVLX1JYX1BIWV9FUlJPUl9VTkRFUlJVTgkJPSAwLAkvKiBUcmFuc21pdCB1bmRlcnJ1biwgWzUyMTBdIE5vIGVycm9yICovCiAJQVI1S19SWF9QSFlfRVJST1JfVElNSU5HCQk9IDEsCS8qIFRpbWluZyBlcnJvciAqLwogCUFSNUtfUlhfUEhZX0VSUk9SX1BBUklUWQkJPSAyLAkvKiBJbGxlZ2FsIHBhcml0eSAqLwogCUFSNUtfUlhfUEhZX0VSUk9SX1JBVEUJCQk9IDMsCS8qIElsbGVnYWwgcmF0ZSAqLwogCUFSNUtfUlhfUEhZX0VSUk9SX0xFTkdUSAkJPSA0LAkvKiBJbGxlZ2FsIGxlbmd0aCAqLwotCUFSNUtfUlhfUEhZX0VSUk9SX1JBREFSCQkJPSA1LAkvKiBSYWRhciBkZXRlY3QgKi8KKwlBUjVLX1JYX1BIWV9FUlJPUl9SQURBUgkJCT0gNSwJLyogUmFkYXIgZGV0ZWN0LCBbNTIxMF0gNjQgUUFNIHJhdGUgKi8KIAlBUjVLX1JYX1BIWV9FUlJPUl9TRVJWSUNFCQk9IDYsCS8qIElsbGVnYWwgc2VydmljZSAqLwogCUFSNUtfUlhfUEhZX0VSUk9SX1RPUgkJCT0gNywJLyogVHJhbnNtaXQgb3ZlcnJpZGUgcmVjZWl2ZSAqLwogCS8qIHRoZXNlIGFyZSBzcGVjaWZpYyB0byB0aGUgNTIxMiAqLwpAQCAtMTQ4LDExMiArMTMyLDExMSBAQAogfSBfX3BhY2tlZDsKIAogLyogVFggY29udHJvbCB3b3JkIDAgZmllbGRzL2ZsYWdzICovCi0jZGVmaW5lIEFSNUtfMldfVFhfREVTQ19DVEwwX0ZSQU1FX0xFTgkJMHgwMDAwMGZmZgotI2RlZmluZSBBUjVLXzJXX1RYX0RFU0NfQ1RMMF9IRUFERVJfTEVOCQkweDAwMDNmMDAwIC8qWzUyMTAgP10qLwotI2RlZmluZSBBUjVLXzJXX1RYX0RFU0NfQ1RMMF9IRUFERVJfTEVOX1MJMTIKLSNkZWZpbmUgQVI1S18yV19UWF9ERVNDX0NUTDBfWE1JVF9SQVRFCQkweDAwM2MwMDAwCisjZGVmaW5lIEFSNUtfMldfVFhfREVTQ19DVEwwX0ZSQU1FX0xFTgkJMHgwMDAwMGZmZiAvKiBmcmFtZSBsZW5ndGggKi8KKyNkZWZpbmUgQVI1S18yV19UWF9ERVNDX0NUTDBfSEVBREVSX0xFTl81MjEwCTB4MDAwM2YwMDAgLyogWzUyMTBdIGhlYWRlciBsZW5ndGggKi8KKyNkZWZpbmUgQVI1S18yV19UWF9ERVNDX0NUTDBfSEVBREVSX0xFTl81MjEwX1MJMTIKKyNkZWZpbmUgQVI1S18yV19UWF9ERVNDX0NUTDBfWE1JVF9SQVRFCQkweDAwM2MwMDAwIC8qIHR4IHJhdGUgKi8KICNkZWZpbmUgQVI1S18yV19UWF9ERVNDX0NUTDBfWE1JVF9SQVRFX1MJMTgKLSNkZWZpbmUgQVI1S18yV19UWF9ERVNDX0NUTDBfUlRTRU5BCQkweDAwNDAwMDAwCi0jZGVmaW5lIEFSNUtfMldfVFhfREVTQ19DVEwwX0NMUkRNQVNLCQkweDAxMDAwMDAwCi0jZGVmaW5lIEFSNUtfMldfVFhfREVTQ19DVEwwX0xPTkdfUEFDS0VUCTB4MDA4MDAwMDAgLypbNTIxMF0qLwotI2RlZmluZSBBUjVLXzJXX1RYX0RFU0NfQ1RMMF9WRU9MCQkweDAwODAwMDAwIC8qWzUyMTFdKi8KLSNkZWZpbmUgQVI1S18yV19UWF9ERVNDX0NUTDBfRlJBTUVfVFlQRQkJMHgxYzAwMDAwMCAvKls1MjEwXSovCi0jZGVmaW5lIEFSNUtfMldfVFhfREVTQ19DVEwwX0ZSQU1FX1RZUEVfUwkyNgotI2RlZmluZSBBUjVLXzJXX1RYX0RFU0NfQ1RMMF9BTlRfTU9ERV9YTUlUXzUyMTAJMHgwMjAwMDAwMAotI2RlZmluZSBBUjVLXzJXX1RYX0RFU0NfQ1RMMF9BTlRfTU9ERV9YTUlUXzUyMTEJMHgxZTAwMDAwMAotCisjZGVmaW5lIEFSNUtfMldfVFhfREVTQ19DVEwwX1JUU0VOQQkJMHgwMDQwMDAwMCAvKiBSVFMvQ1RTIGVuYWJsZSAqLworI2RlZmluZSBBUjVLXzJXX1RYX0RFU0NfQ1RMMF9MT05HX1BBQ0tFVF81MjEwCTB4MDA4MDAwMDAgLyogWzUyMTBdIGxvbmcgcGFja2V0ICovCisjZGVmaW5lIEFSNUtfMldfVFhfREVTQ19DVEwwX1ZFT0xfNTIxMQkJMHgwMDgwMDAwMCAvKiBbNTIxMV0gdmlydHVhbCBlbmQtb2YtbGlzdCAqLworI2RlZmluZSBBUjVLXzJXX1RYX0RFU0NfQ1RMMF9DTFJETUFTSwkJMHgwMTAwMDAwMCAvKiBjbGVhciBkZXN0aW5hdGlvbiBtYXNrICovCisjZGVmaW5lIEFSNUtfMldfVFhfREVTQ19DVEwwX0FOVF9NT0RFX1hNSVRfNTIxMAkweDAyMDAwMDAwIC8qIFs1MjEwXSBhbnRlbm5hIHNlbGVjdGlvbiAqLworI2RlZmluZSBBUjVLXzJXX1RYX0RFU0NfQ1RMMF9BTlRfTU9ERV9YTUlUXzUyMTEJMHgxZTAwMDAwMCAvKiBbNTIxMV0gYW50ZW5uYSBzZWxlY3Rpb24gKi8KICNkZWZpbmUgQVI1S18yV19UWF9ERVNDX0NUTDBfQU5UX01PREVfWE1JVAkJCVwKIAkJKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEwID8JCVwKIAkJQVI1S18yV19UWF9ERVNDX0NUTDBfQU5UX01PREVfWE1JVF81MjEwIDoJXAogCQlBUjVLXzJXX1RYX0RFU0NfQ1RMMF9BTlRfTU9ERV9YTUlUXzUyMTEpCi0KICNkZWZpbmUgQVI1S18yV19UWF9ERVNDX0NUTDBfQU5UX01PREVfWE1JVF9TCTI1Ci0jZGVmaW5lIEFSNUtfMldfVFhfREVTQ19DVEwwX0lOVFJFUQkJMHgyMDAwMDAwMAotI2RlZmluZSBBUjVLXzJXX1RYX0RFU0NfQ1RMMF9FTkNSWVBUX0tFWV9WQUxJRAkweDQwMDAwMDAwCisjZGVmaW5lIEFSNUtfMldfVFhfREVTQ19DVEwwX0ZSQU1FX1RZUEVfNTIxMAkweDFjMDAwMDAwIC8qIFs1MjEwXSBmcmFtZSB0eXBlICovCisjZGVmaW5lIEFSNUtfMldfVFhfREVTQ19DVEwwX0ZSQU1FX1RZUEVfNTIxMF9TCTI2CisjZGVmaW5lIEFSNUtfMldfVFhfREVTQ19DVEwwX0lOVFJFUQkJMHgyMDAwMDAwMCAvKiBUWCBpbnRlcnJ1cHQgcmVxdWVzdCAqLworI2RlZmluZSBBUjVLXzJXX1RYX0RFU0NfQ1RMMF9FTkNSWVBUX0tFWV9WQUxJRAkweDQwMDAwMDAwIC8qIGtleSBpcyB2YWxpZCAqLwogCiAvKiBUWCBjb250cm9sIHdvcmQgMSBmaWVsZHMvZmxhZ3MgKi8KLSNkZWZpbmUgQVI1S18yV19UWF9ERVNDX0NUTDFfQlVGX0xFTgkJMHgwMDAwMGZmZgotI2RlZmluZSBBUjVLXzJXX1RYX0RFU0NfQ1RMMV9NT1JFCQkweDAwMDAxMDAwCi0jZGVmaW5lIEFSNUtfMldfVFhfREVTQ19DVEwxX0VOQ1JZUFRfS0VZX0lOREVYXzUyMTAJMHgwMDA3ZTAwMAotI2RlZmluZSBBUjVLXzJXX1RYX0RFU0NfQ1RMMV9FTkNSWVBUX0tFWV9JTkRFWF81MjExCTB4MDAwZmUwMDAKLQotI2RlZmluZSBBUjVLXzJXX1RYX0RFU0NfQ1RMMV9FTkNSWVBUX0tFWV9JTkRFWAkJCQlcCisjZGVmaW5lIEFSNUtfMldfVFhfREVTQ19DVEwxX0JVRl9MRU4JCTB4MDAwMDBmZmYgLyogZGF0YSBidWZmZXIgbGVuZ3RoICovCisjZGVmaW5lIEFSNUtfMldfVFhfREVTQ19DVEwxX01PUkUJCTB4MDAwMDEwMDAgLyogbW9yZSBkZXNjIGZvciB0aGlzIGZyYW1lICovCisjZGVmaW5lIEFSNUtfMldfVFhfREVTQ19DVEwxX0VOQ19LRVlfSURYXzUyMTAJMHgwMDA3ZTAwMCAvKiBbNTIxMF0ga2V5IHRhYmxlIGluZGV4ICovCisjZGVmaW5lIEFSNUtfMldfVFhfREVTQ19DVEwxX0VOQ19LRVlfSURYXzUyMTEJMHgwMDBmZTAwMCAvKiBbNTIxMV0ga2V5IHRhYmxlIGluZGV4ICovCisjZGVmaW5lIEFSNUtfMldfVFhfREVTQ19DVEwxX0VOQ19LRVlfSURYCQkJCVwKIAkJCShhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMCA/CQlcCi0JCQlBUjVLXzJXX1RYX0RFU0NfQ1RMMV9FTkNSWVBUX0tFWV9JTkRFWF81MjEwIDoJXAotCQkJQVI1S18yV19UWF9ERVNDX0NUTDFfRU5DUllQVF9LRVlfSU5ERVhfNTIxMSkKLQotI2RlZmluZSBBUjVLXzJXX1RYX0RFU0NfQ1RMMV9FTkNSWVBUX0tFWV9JTkRFWF9TCTEzCi0jZGVmaW5lIEFSNUtfMldfVFhfREVTQ19DVEwxX0ZSQU1FX1RZUEUJCTB4MDA3MDAwMDAgLypbNTIxMV0qLwotI2RlZmluZSBBUjVLXzJXX1RYX0RFU0NfQ1RMMV9GUkFNRV9UWVBFX1MJMjAKLSNkZWZpbmUgQVI1S18yV19UWF9ERVNDX0NUTDFfTk9BQ0sJCTB4MDA4MDAwMDAgLypbNTIxMV0qLwotI2RlZmluZSBBUjVLXzJXX1RYX0RFU0NfQ1RMMV9SVFNfRFVSQVRJT04JMHhmZmY4MDAwMCAvKls1MjEwID9dKi8KKwkJCUFSNUtfMldfVFhfREVTQ19DVEwxX0VOQ19LRVlfSURYXzUyMTAgOgkJXAorCQkJQVI1S18yV19UWF9ERVNDX0NUTDFfRU5DX0tFWV9JRFhfNTIxMSkKKyNkZWZpbmUgQVI1S18yV19UWF9ERVNDX0NUTDFfRU5DX0tFWV9JRFhfUwkxMworI2RlZmluZSBBUjVLXzJXX1RYX0RFU0NfQ1RMMV9GUkFNRV9UWVBFXzUyMTEJMHgwMDcwMDAwMCAvKiBbNTIxMV0gZnJhbWUgdHlwZSAqLworI2RlZmluZSBBUjVLXzJXX1RYX0RFU0NfQ1RMMV9GUkFNRV9UWVBFXzUyMTFfUwkyMAorI2RlZmluZSBBUjVLXzJXX1RYX0RFU0NfQ1RMMV9OT0FDS181MjExCQkweDAwODAwMDAwIC8qIFs1MjExXSBubyBBQ0sgKi8KKyNkZWZpbmUgQVI1S18yV19UWF9ERVNDX0NUTDFfUlRTX0RVUkFUSU9OXzUyMTAJMHhmZmY4MDAwMCAvKiBbNTIxMF0gbG93ZXIgMTMgYml0IG9mIGR1cmF0aW9uICovCiAKIC8qIEZyYW1lIHR5cGVzICovCi0jZGVmaW5lIEFSNUtfQVI1MjEwX1RYX0RFU0NfRlJBTUVfVFlQRV9OT1JNQUwgICAweDAwCi0jZGVmaW5lIEFSNUtfQVI1MjEwX1RYX0RFU0NfRlJBTUVfVFlQRV9BVElNICAgICAweDA0Ci0jZGVmaW5lIEFSNUtfQVI1MjEwX1RYX0RFU0NfRlJBTUVfVFlQRV9QU1BPTEwgICAweDA4Ci0jZGVmaW5lIEFSNUtfQVI1MjEwX1RYX0RFU0NfRlJBTUVfVFlQRV9OT19ERUxBWSAweDBjCi0jZGVmaW5lIEFSNUtfQVI1MjEwX1RYX0RFU0NfRlJBTUVfVFlQRV9QSUZTICAgICAweDEwCisjZGVmaW5lIEFSNUtfQVI1MjEwX1RYX0RFU0NfRlJBTUVfVFlQRV9OT1JNQUwJMAorI2RlZmluZSBBUjVLX0FSNTIxMF9UWF9ERVNDX0ZSQU1FX1RZUEVfQVRJTQkxCisjZGVmaW5lIEFSNUtfQVI1MjEwX1RYX0RFU0NfRlJBTUVfVFlQRV9QU1BPTEwJMgorI2RlZmluZSBBUjVLX0FSNTIxMF9UWF9ERVNDX0ZSQU1FX1RZUEVfTk9fREVMQVkJMworI2RlZmluZSBBUjVLX0FSNTIxMV9UWF9ERVNDX0ZSQU1FX1RZUEVfQkVBQ09OCTMKKyNkZWZpbmUgQVI1S19BUjUyMTBfVFhfREVTQ19GUkFNRV9UWVBFX1BJRlMJNAorI2RlZmluZSBBUjVLX0FSNTIxMV9UWF9ERVNDX0ZSQU1FX1RZUEVfUFJFU1AJNAogCiAvKgogICogNTIxMiBoYXJkd2FyZSA0LXdvcmQgVFggY29udHJvbCBkZXNjcmlwdG9yCiAgKi8KIHN0cnVjdCBhdGg1a19od180d190eF9jdGwgewogCXUzMgl0eF9jb250cm9sXzA7IC8qIFRYIGNvbnRyb2wgd29yZCAwICovCi0KLSNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDBfRlJBTUVfTEVOCQkweDAwMDAwZmZmCi0jZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwwX1hNSVRfUE9XRVIJCTB4MDAzZjAwMDAKLSNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDBfWE1JVF9QT1dFUl9TCTE2Ci0jZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwwX1JUU0VOQQkJMHgwMDQwMDAwMAotI2RlZmluZSBBUjVLXzRXX1RYX0RFU0NfQ1RMMF9WRU9MCQkweDAwODAwMDAwCi0jZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwwX0NMUkRNQVNLCQkweDAxMDAwMDAwCi0jZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwwX0FOVF9NT0RFX1hNSVQJMHgxZTAwMDAwMAotI2RlZmluZSBBUjVLXzRXX1RYX0RFU0NfQ1RMMF9BTlRfTU9ERV9YTUlUX1MJMjUKLSNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDBfSU5UUkVRCQkweDIwMDAwMDAwCi0jZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwwX0VOQ1JZUFRfS0VZX1ZBTElECTB4NDAwMDAwMDAKLSNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDBfQ1RTRU5BCQkweDgwMDAwMDAwCi0KIAl1MzIJdHhfY29udHJvbF8xOyAvKiBUWCBjb250cm9sIHdvcmQgMSAqLworCXUzMgl0eF9jb250cm9sXzI7IC8qIFRYIGNvbnRyb2wgd29yZCAyICovCisJdTMyCXR4X2NvbnRyb2xfMzsgLyogVFggY29udHJvbCB3b3JkIDMgKi8KK30gX19wYWNrZWQ7CiAKLSNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDFfQlVGX0xFTgkJMHgwMDAwMGZmZgotI2RlZmluZSBBUjVLXzRXX1RYX0RFU0NfQ1RMMV9NT1JFCQkweDAwMDAxMDAwCi0jZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwxX0VOQ1JZUFRfS0VZX0lOREVYCTB4MDAwZmUwMDAKLSNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDFfRU5DUllQVF9LRVlfSU5ERVhfUwkxMwotI2RlZmluZSBBUjVLXzRXX1RYX0RFU0NfQ1RMMV9GUkFNRV9UWVBFCQkweDAwZjAwMDAwCisvKiBUWCBjb250cm9sIHdvcmQgMCBmaWVsZHMvZmxhZ3MgKi8KKyNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDBfRlJBTUVfTEVOCQkweDAwMDAwZmZmIC8qIGZyYW1lIGxlbmd0aCAqLworI2RlZmluZSBBUjVLXzRXX1RYX0RFU0NfQ1RMMF9YTUlUX1BPV0VSCQkweDAwM2YwMDAwIC8qIHRyYW5zbWl0IHBvd2VyICovCisjZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwwX1hNSVRfUE9XRVJfUwkxNgorI2RlZmluZSBBUjVLXzRXX1RYX0RFU0NfQ1RMMF9SVFNFTkEJCTB4MDA0MDAwMDAgLyogUlRTL0NUUyBlbmFibGUgKi8KKyNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDBfVkVPTAkJMHgwMDgwMDAwMCAvKiB2aXJ0dWFsIGVuZC1vZi1saXN0ICovCisjZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwwX0NMUkRNQVNLCQkweDAxMDAwMDAwIC8qIGNsZWFyIGRlc3RpbmF0aW9uIG1hc2sgKi8KKyNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDBfQU5UX01PREVfWE1JVAkweDFlMDAwMDAwIC8qIFRYIGFudGVubmEgc2VsZWN0aW9uICovCisjZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwwX0FOVF9NT0RFX1hNSVRfUwkyNQorI2RlZmluZSBBUjVLXzRXX1RYX0RFU0NfQ1RMMF9JTlRSRVEJCTB4MjAwMDAwMDAgLyogVFggaW50ZXJydXB0IHJlcXVlc3QgKi8KKyNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDBfRU5DUllQVF9LRVlfVkFMSUQJMHg0MDAwMDAwMCAvKiBkZXN0aW5hdGlvbiBpbmRleCB2YWxpZCAqLworI2RlZmluZSBBUjVLXzRXX1RYX0RFU0NfQ1RMMF9DVFNFTkEJCTB4ODAwMDAwMDAgLyogcHJlY2VkZSBmcmFtZSB3aXRoIENUUyAqLworCisvKiBUWCBjb250cm9sIHdvcmQgMSBmaWVsZHMvZmxhZ3MgKi8KKyNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDFfQlVGX0xFTgkJMHgwMDAwMGZmZiAvKiBkYXRhIGJ1ZmZlciBsZW5ndGggKi8KKyNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDFfTU9SRQkJMHgwMDAwMTAwMCAvKiBtb3JlIGRlc2MgZm9yIHRoaXMgZnJhbWUgKi8KKyNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDFfRU5DUllQVF9LRVlfSURYCTB4MDAwZmUwMDAgLyogZGVzdGluYXRpb24gdGFibGUgaW5kZXggKi8KKyNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDFfRU5DUllQVF9LRVlfSURYX1MJMTMKKyNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDFfRlJBTUVfVFlQRQkJMHgwMGYwMDAwMCAvKiBmcmFtZSB0eXBlICovCiAjZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwxX0ZSQU1FX1RZUEVfUwkyMAotI2RlZmluZSBBUjVLXzRXX1RYX0RFU0NfQ1RMMV9OT0FDSwkJMHgwMTAwMDAwMAotI2RlZmluZSBBUjVLXzRXX1RYX0RFU0NfQ1RMMV9DT01QX1BST0MJCTB4MDYwMDAwMDAKKyNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDFfTk9BQ0sJCTB4MDEwMDAwMDAgLyogbm8gQUNLICovCisjZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwxX0NPTVBfUFJPQwkJMHgwNjAwMDAwMCAvKiBjb21wcmVzc2lvbiBwcm9jZXNzaW5nICovCiAjZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwxX0NPTVBfUFJPQ19TCTI1Ci0jZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwxX0NPTVBfSVZfTEVOCTB4MTgwMDAwMDAKKyNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDFfQ09NUF9JVl9MRU4JMHgxODAwMDAwMCAvKiBsZW5ndGggb2YgZnJhbWUgSVYgKi8KICNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDFfQ09NUF9JVl9MRU5fUwkyNwotI2RlZmluZSBBUjVLXzRXX1RYX0RFU0NfQ1RMMV9DT01QX0lDVl9MRU4JMHg2MDAwMDAwMAorI2RlZmluZSBBUjVLXzRXX1RYX0RFU0NfQ1RMMV9DT01QX0lDVl9MRU4JMHg2MDAwMDAwMCAvKiBsZW5ndGggb2YgZnJhbWUgSUNWICovCiAjZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwxX0NPTVBfSUNWX0xFTl9TCTI5CiAKLQl1MzIJdHhfY29udHJvbF8yOyAvKiBUWCBjb250cm9sIHdvcmQgMiAqLworLyogVFggY29udHJvbCB3b3JkIDIgZmllbGRzL2ZsYWdzICovCisjZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwyX1JUU19EVVJBVElPTgkweDAwMDA3ZmZmIC8qIFJUUy9DVFMgZHVyYXRpb24gKi8KKyNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDJfRFVSQVRJT05fVVBEX0VOCTB4MDAwMDgwMDAgLyogZnJhbWUgZHVyYXRpb24gdXBkYXRlICovCisjZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwyX1hNSVRfVFJJRVMwCTB4MDAwZjAwMDAgLyogc2VyaWVzIDAgbWF4IGF0dGVtcHRzICovCisjZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwyX1hNSVRfVFJJRVMwX1MJMTYKKyNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDJfWE1JVF9UUklFUzEJMHgwMGYwMDAwMCAvKiBzZXJpZXMgMSBtYXggYXR0ZW1wdHMgKi8KKyNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDJfWE1JVF9UUklFUzFfUwkyMAorI2RlZmluZSBBUjVLXzRXX1RYX0RFU0NfQ1RMMl9YTUlUX1RSSUVTMgkweDBmMDAwMDAwIC8qIHNlcmllcyAyIG1heCBhdHRlbXB0cyAqLworI2RlZmluZSBBUjVLXzRXX1RYX0RFU0NfQ1RMMl9YTUlUX1RSSUVTMl9TCTI0CisjZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwyX1hNSVRfVFJJRVMzCTB4ZjAwMDAwMDAgLyogc2VyaWVzIDMgbWF4IGF0dGVtcHRzICovCisjZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwyX1hNSVRfVFJJRVMzX1MJMjgKIAotI2RlZmluZSBBUjVLXzRXX1RYX0RFU0NfQ1RMMl9SVFNfRFVSQVRJT04JCTB4MDAwMDdmZmYKLSNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDJfRFVSQVRJT05fVVBEQVRFX0VOQUJMRQkweDAwMDA4MDAwCi0jZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwyX1hNSVRfVFJJRVMwCQkweDAwMGYwMDAwCi0jZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwyX1hNSVRfVFJJRVMwX1MJCTE2Ci0jZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwyX1hNSVRfVFJJRVMxCQkweDAwZjAwMDAwCi0jZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwyX1hNSVRfVFJJRVMxX1MJCTIwCi0jZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwyX1hNSVRfVFJJRVMyCQkweDBmMDAwMDAwCi0jZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwyX1hNSVRfVFJJRVMyX1MJCTI0Ci0jZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwyX1hNSVRfVFJJRVMzCQkweGYwMDAwMDAwCi0jZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwyX1hNSVRfVFJJRVMzX1MJCTI4Ci0KLQl1MzIJdHhfY29udHJvbF8zOyAvKiBUWCBjb250cm9sIHdvcmQgMyAqLwotCi0jZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwzX1hNSVRfUkFURTAJCTB4MDAwMDAwMWYKLSNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDNfWE1JVF9SQVRFMQkJMHgwMDAwMDNlMAorLyogVFggY29udHJvbCB3b3JkIDMgZmllbGRzL2ZsYWdzICovCisjZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwzX1hNSVRfUkFURTAJCTB4MDAwMDAwMWYgLyogc2VyaWVzIDAgdHggcmF0ZSAqLworI2RlZmluZSBBUjVLXzRXX1RYX0RFU0NfQ1RMM19YTUlUX1JBVEUxCQkweDAwMDAwM2UwIC8qIHNlcmllcyAxIHR4IHJhdGUgKi8KICNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDNfWE1JVF9SQVRFMV9TCTUKLSNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDNfWE1JVF9SQVRFMgkJMHgwMDAwN2MwMAorI2RlZmluZSBBUjVLXzRXX1RYX0RFU0NfQ1RMM19YTUlUX1JBVEUyCQkweDAwMDA3YzAwIC8qIHNlcmllcyAyIHR4IHJhdGUgKi8KICNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDNfWE1JVF9SQVRFMl9TCTEwCi0jZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwzX1hNSVRfUkFURTMJCTB4MDAwZjgwMDAKKyNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDNfWE1JVF9SQVRFMwkJMHgwMDBmODAwMCAvKiBzZXJpZXMgMyB0eCByYXRlICovCiAjZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwzX1hNSVRfUkFURTNfUwkxNQotI2RlZmluZSBBUjVLXzRXX1RYX0RFU0NfQ1RMM19SVFNfQ1RTX1JBVEUJMHgwMWYwMDAwMAorI2RlZmluZSBBUjVLXzRXX1RYX0RFU0NfQ1RMM19SVFNfQ1RTX1JBVEUJMHgwMWYwMDAwMCAvKiBSVFMgb3IgQ1RTIHJhdGUgKi8KICNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDNfUlRTX0NUU19SQVRFX1MJMjAKLX0gX19wYWNrZWQ7CiAKIC8qCiAgKiBDb21tb24gVFggc3RhdHVzIGRlc2NyaXB0b3IKQEAgLTI2NCwzNyArMjQ3LDM0IEBACiB9IF9fcGFja2VkOwogCiAvKiBUWCBzdGF0dXMgd29yZCAwIGZpZWxkcy9mbGFncyAqLwotI2RlZmluZSBBUjVLX0RFU0NfVFhfU1RBVFVTMF9GUkFNRV9YTUlUX09LCTB4MDAwMDAwMDEKLSNkZWZpbmUgQVI1S19ERVNDX1RYX1NUQVRVUzBfRVhDRVNTSVZFX1JFVFJJRVMJMHgwMDAwMDAwMgotI2RlZmluZSBBUjVLX0RFU0NfVFhfU1RBVFVTMF9GSUZPX1VOREVSUlVOCTB4MDAwMDAwMDQKLSNkZWZpbmUgQVI1S19ERVNDX1RYX1NUQVRVUzBfRklMVEVSRUQJCTB4MDAwMDAwMDgKLS8qPz8/Ci0jZGVmaW5lIEFSNUtfREVTQ19UWF9TVEFUVVMwX1JUU19GQUlMX0NPVU5UCTB4MDAwMDAwZjAKLSNkZWZpbmUgQVI1S19ERVNDX1RYX1NUQVRVUzBfUlRTX0ZBSUxfQ09VTlRfUwk0Ci0qLwotI2RlZmluZSBBUjVLX0RFU0NfVFhfU1RBVFVTMF9TSE9SVF9SRVRSWV9DT1VOVAkweDAwMDAwMGYwCisjZGVmaW5lIEFSNUtfREVTQ19UWF9TVEFUVVMwX0ZSQU1FX1hNSVRfT0sJMHgwMDAwMDAwMSAvKiBUWCBzdWNjZXNzICovCisjZGVmaW5lIEFSNUtfREVTQ19UWF9TVEFUVVMwX0VYQ0VTU0lWRV9SRVRSSUVTCTB4MDAwMDAwMDIgLyogZXhjZXNzaXZlIHJldHJpZXMgKi8KKyNkZWZpbmUgQVI1S19ERVNDX1RYX1NUQVRVUzBfRklGT19VTkRFUlJVTgkweDAwMDAwMDA0IC8qIEZJRk8gdW5kZXJydW4gKi8KKyNkZWZpbmUgQVI1S19ERVNDX1RYX1NUQVRVUzBfRklMVEVSRUQJCTB4MDAwMDAwMDggLyogVFggZmlsdGVyIGluZGljYXRpb24gKi8KKy8qIGFjY29yZGluZyB0byB0aGUgSEFMIHNvdXJjZXMgdGhlIHNwZWMgaGFzIHNob3J0L2xvbmcgcmV0cnkgY291bnRzIHJldmVyc2VkLgorICogd2UgaGF2ZSBpdCByZXZlcnNlZCB0byB0aGUgSEFMIHNvdXJjZXMgYXMgd2VsbCwgZm9yIDUyMTAgYW5kIDUyMTEuCisgKiBGb3IgNTIxMiB0aGVzZSBmaWVsZHMgYXJlIGRlZmluZWQgYXMgUlRTX0ZBSUxfQ09VTlQgYW5kIERBVEFfRkFJTF9DT1VOVCwKKyAqIGJ1dCB1c2VkIHJlc3BlY3RpdmVseSBhcyBTSE9SVCBhbmQgTE9ORyByZXRyeSBjb3VudCBpbiB0aGUgY29kZSBsYXRlci4gVGhpcworICogaXMgY29uc2lzdGVudCB3aXRoIHRoZSBkZWZpbml0aW9ucyBoZXJlLi4uIFRPRE86IGNoZWNrICovCisjZGVmaW5lIEFSNUtfREVTQ19UWF9TVEFUVVMwX1NIT1JUX1JFVFJZX0NPVU5UCTB4MDAwMDAwZjAgLyogc2hvcnQgcmV0cnkgY291bnQgKi8KICNkZWZpbmUgQVI1S19ERVNDX1RYX1NUQVRVUzBfU0hPUlRfUkVUUllfQ09VTlRfUwk0Ci0vKj8/PwotI2RlZmluZSBBUjVLX0RFU0NfVFhfU1RBVFVTMF9EQVRBX0ZBSUxfQ09VTlQJMHgwMDAwMGYwMAotI2RlZmluZSBBUjVLX0RFU0NfVFhfU1RBVFVTMF9EQVRBX0ZBSUxfQ09VTlRfUwk4Ci0qLwotI2RlZmluZSBBUjVLX0RFU0NfVFhfU1RBVFVTMF9MT05HX1JFVFJZX0NPVU5UCTB4MDAwMDBmMDAKKyNkZWZpbmUgQVI1S19ERVNDX1RYX1NUQVRVUzBfTE9OR19SRVRSWV9DT1VOVAkweDAwMDAwZjAwIC8qIGxvbmcgcmV0cnkgY291bnQgKi8KICNkZWZpbmUgQVI1S19ERVNDX1RYX1NUQVRVUzBfTE9OR19SRVRSWV9DT1VOVF9TCTgKLSNkZWZpbmUgQVI1S19ERVNDX1RYX1NUQVRVUzBfVklSVF9DT0xMX0NPVU5UCTB4MDAwMGYwMDAKLSNkZWZpbmUgQVI1S19ERVNDX1RYX1NUQVRVUzBfVklSVF9DT0xMX0NPVU5UX1MJMTIKLSNkZWZpbmUgQVI1S19ERVNDX1RYX1NUQVRVUzBfU0VORF9USU1FU1RBTVAJMHhmZmZmMDAwMAorI2RlZmluZSBBUjVLX0RFU0NfVFhfU1RBVFVTMF9WSVJUQ09MTF9DVF81MjExCTB4MDAwMGYwMDAgLyogWzUyMTErXSB2aXJ0dWFsIGNvbGxpc2lvbiBjb3VudCAqLworI2RlZmluZSBBUjVLX0RFU0NfVFhfU1RBVFVTMF9WSVJUQ09MTF9DVF81MjEyX1MJMTIKKyNkZWZpbmUgQVI1S19ERVNDX1RYX1NUQVRVUzBfU0VORF9USU1FU1RBTVAJMHhmZmZmMDAwMCAvKiBUWCB0aW1lc3RhbXAgKi8KICNkZWZpbmUgQVI1S19ERVNDX1RYX1NUQVRVUzBfU0VORF9USU1FU1RBTVBfUwkxNgogCiAvKiBUWCBzdGF0dXMgd29yZCAxIGZpZWxkcy9mbGFncyAqLwotI2RlZmluZSBBUjVLX0RFU0NfVFhfU1RBVFVTMV9ET05FCQkweDAwMDAwMDAxCi0jZGVmaW5lIEFSNUtfREVTQ19UWF9TVEFUVVMxX1NFUV9OVU0JCTB4MDAwMDFmZmUKKyNkZWZpbmUgQVI1S19ERVNDX1RYX1NUQVRVUzFfRE9ORQkJMHgwMDAwMDAwMSAvKiBkZXNjcmlwdG9yIGNvbXBsZXRlICovCisjZGVmaW5lIEFSNUtfREVTQ19UWF9TVEFUVVMxX1NFUV9OVU0JCTB4MDAwMDFmZmUgLyogVFggc2VxdWVuY2UgbnVtYmVyICovCiAjZGVmaW5lIEFSNUtfREVTQ19UWF9TVEFUVVMxX1NFUV9OVU1fUwkJMQotI2RlZmluZSBBUjVLX0RFU0NfVFhfU1RBVFVTMV9BQ0tfU0lHX1NUUkVOR1RICTB4MDAxZmUwMDAKKyNkZWZpbmUgQVI1S19ERVNDX1RYX1NUQVRVUzFfQUNLX1NJR19TVFJFTkdUSAkweDAwMWZlMDAwIC8qIHNpZ25hbCBzdHJlbmd0aCBvZiBBQ0sgKi8KICNkZWZpbmUgQVI1S19ERVNDX1RYX1NUQVRVUzFfQUNLX1NJR19TVFJFTkdUSF9TCTEzCi0jZGVmaW5lIEFSNUtfREVTQ19UWF9TVEFUVVMxX0ZJTkFMX1RTX0lOREVYCTB4MDA2MDAwMDAKLSNkZWZpbmUgQVI1S19ERVNDX1RYX1NUQVRVUzFfRklOQUxfVFNfSU5ERVhfUwkyMQotI2RlZmluZSBBUjVLX0RFU0NfVFhfU1RBVFVTMV9DT01QX1NVQ0NFU1MJMHgwMDgwMDAwMAotI2RlZmluZSBBUjVLX0RFU0NfVFhfU1RBVFVTMV9YTUlUX0FOVEVOTkEJMHgwMTAwMDAwMAorI2RlZmluZSBBUjVLX0RFU0NfVFhfU1RBVFVTMV9GSU5BTF9UU19JWF81MjEyCTB4MDA2MDAwMDAgLyogWzUyMTJdIGZpbmFsIFRYIGF0dGVtcHQgc2VyaWVzIGl4ICovCisjZGVmaW5lIEFSNUtfREVTQ19UWF9TVEFUVVMxX0ZJTkFMX1RTX0lYXzUyMTJfUwkyMQorI2RlZmluZSBBUjVLX0RFU0NfVFhfU1RBVFVTMV9DT01QX1NVQ0NFU1NfNTIxMgkweDAwODAwMDAwIC8qIFs1MjEyXSBjb21wcmVzc2lvbiBzdGF0dXMgKi8KKyNkZWZpbmUgQVI1S19ERVNDX1RYX1NUQVRVUzFfWE1JVF9BTlRFTk5BXzUyMTIJMHgwMTAwMDAwMCAvKiBbNTIxMl0gdHJhbnNtaXQgYW50ZW5uYSAqLwogCiAvKgogICogNTIxMC81MjExIGhhcmR3YXJlIFRYIGRlc2NyaXB0b3IKQEAgLTMxMywxOCArMjkzLDE1IEBACiB9IF9fcGFja2VkOwogCiAvKgotICogY29tbW9uIGhhcmR3YXJlIFJYIGRlc2NyaXB0b3IKKyAqIENvbW1vbiBoYXJkd2FyZSBSWCBkZXNjcmlwdG9yCiAgKi8KIHN0cnVjdCBhdGg1a19od19hbGxfcnhfZGVzYyB7Ci0Jc3RydWN0IGF0aDVrX2h3X3J4X2N0bAkJCXJ4X2N0bDsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBhdGg1a19od19yeF9zdGF0dXMJcnhfc3RhdDsKLQkJc3RydWN0IGF0aDVrX2h3X3J4X2Vycm9yCXJ4X2VycjsKLQl9IHU7CisJc3RydWN0IGF0aDVrX2h3X3J4X2N0bAkJcnhfY3RsOworCXN0cnVjdCBhdGg1a19od19yeF9zdGF0dXMJcnhfc3RhdDsKIH0gX19wYWNrZWQ7CiAKIC8qCi0gKiBBdGhlcm9zIGhhcmR3YXJlIGRlc2NyaXB0b3IKKyAqIEF0aGVyb3MgaGFyZHdhcmUgRE1BIGRlc2NyaXB0b3IKICAqIFRoaXMgaXMgcmVhZCBhbmQgd3JpdHRlbiB0byBieSB0aGUgaGFyZHdhcmUKICAqLwogc3RydWN0IGF0aDVrX2Rlc2MgewpAQCAtMzQ2LDQgKzMyMywzIEBACiAjZGVmaW5lIEFSNUtfVFhERVNDX0NUU0VOQQkweDAwMDgKICNkZWZpbmUgQVI1S19UWERFU0NfSU5UUkVRCTB4MDAxMAogI2RlZmluZSBBUjVLX1RYREVTQ19WRU9MCTB4MDAyMAkvKls1MjExK10qLwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZG1hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZG1hLmMKaW5kZXggOTQxYjUxMS4uNDg0ZjMxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2RtYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kbWEuYwpAQCAtNDgsNyArNDgsNiBAQAogICovCiB2b2lkIGF0aDVrX2h3X3N0YXJ0X3J4X2RtYShzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogewotCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CiAJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX0NSX1JYRSwgQVI1S19DUik7CiAJYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfQ1IpOwogfQpAQCAtNjIsNyArNjEsNiBAQAogewogCXVuc2lnbmVkIGludCBpOwogCi0JQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKIAlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfQ1JfUlhELCBBUjVLX0NSKTsKIAogCS8qCkBAIC05Niw4ICs5NCw2IEBACiAgKi8KIHZvaWQgYXRoNWtfaHdfc2V0X3J4ZHAoc3RydWN0IGF0aDVrX2h3ICphaCwgdTMyIHBoeXNfYWRkcikKIHsKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwotCiAJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBwaHlzX2FkZHIsIEFSNUtfUlhEUCk7CiB9CiAKQEAgLTEyNSw3ICsxMjEsNiBAQAogewogCXUzMiB0eF9xdWV1ZTsKIAotCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CiAJQVI1S19BU1NFUlRfRU5UUlkocXVldWUsIGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3F1ZXVlcy5xX3R4X251bSk7CiAKIAkvKiBSZXR1cm4gaWYgcXVldWUgaXMgZGVjbGFyZWQgaW5hY3RpdmUgKi8KQEAgLTE4Niw3ICsxODEsNiBAQAogCXVuc2lnbmVkIGludCBpID0gNDA7CiAJdTMyIHR4X3F1ZXVlLCBwZW5kaW5nOwogCi0JQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKIAlBUjVLX0FTU0VSVF9FTlRSWShxdWV1ZSwgYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfcXVldWVzLnFfdHhfbnVtKTsKIAogCS8qIFJldHVybiBpZiBxdWV1ZSBpcyBkZWNsYXJlZCBpbmFjdGl2ZSAqLwpAQCAtMjk3LDcgKzI5MSw2IEBACiB7CiAJdTE2IHR4X3JlZzsKIAotCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CiAJQVI1S19BU1NFUlRfRU5UUlkocXVldWUsIGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3F1ZXVlcy5xX3R4X251bSk7CiAKIAkvKgpAQCAtMzQwLDcgKzMzMyw2IEBACiB7CiAJdTE2IHR4X3JlZzsKIAotCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CiAJQVI1S19BU1NFUlRfRU5UUlkocXVldWUsIGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3F1ZXVlcy5xX3R4X251bSk7CiAKIAkvKgpAQCAtNDAwLDggKzM5Miw2IEBACiAJdTMyIHRyaWdnZXJfbGV2ZWwsIGltcjsKIAlpbnQgcmV0ID0gLUVJTzsKIAotCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7Ci0KIAkvKgogCSAqIERpc2FibGUgaW50ZXJydXB0cyBieSBzZXR0aW5nIHRoZSBtYXNrCiAJICovCkBAIC00NTEsNyArNDQxLDYgQEAKICAqLwogYm9vbCBhdGg1a19od19pc19pbnRyX3BlbmRpbmcoc3RydWN0IGF0aDVrX2h3ICphaCkKIHsKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwogCXJldHVybiBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19JTlRQRU5EKSA9PSAxID8gMSA6IDA7CiB9CiAKQEAgLTQ3NSw4ICs0NjQsNiBAQAogewogCXUzMiBkYXRhOwogCi0JQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKLQogCS8qCiAJICogUmVhZCBpbnRlcnJ1cHQgc3RhdHVzIGZyb20gdGhlIEludGVycnVwdCBTdGF0dXMgcmVnaXN0ZXIKIAkgKiBvbiA1MjEwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZWVwcm9tLmMKaW5kZXggZWQwMjYzNi4uYWUzMTZmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2VlcHJvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9lZXByb20uYwpAQCAtMzUsNyArMzUsNiBAQAogewogCXUzMiBzdGF0dXMsIHRpbWVvdXQ7CiAKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwogCS8qCiAJICogSW5pdGlhbGl6ZSBFRVBST00gYWNjZXNzCiAJICovCkBAIC03MTUsNyArNzE0LDcgQEAKIAogCQkvKiBPbmx5IG9uZSBjdXJ2ZSBmb3IgUkY1MTExCiAJCSAqIGZpbmQgb3V0IHdoaWNoIG9uZSBhbmQgcGxhY2UKLQkJICogaW4gaW4gcGRfY3VydmVzLgorCQkgKiBpbiBwZF9jdXJ2ZXMuCiAJCSAqIE5vdGU6IGVlX3hfZ2FpbiBpcyByZXZlcnNlZCBoZXJlICovCiAJCWZvciAoaWR4ID0gMDsgaWR4IDwgQVI1S19FRVBST01fTl9QRF9DVVJWRVM7IGlkeCsrKSB7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9ncGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZ3Bpby5jCmluZGV4IDY0YTI3ZTcuLmJjOTA1MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9ncGlvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2dwaW8uYwpAQCAtMzQsOCArMzQsNiBAQAogCS8qNTIxMCBoYXMgZGlmZmVyZW50IGxlZCBtb2RlIGhhbmRsaW5nKi8KIAl1MzIgbGVkXzUyMTA7CiAKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwotCiAJLypSZXNldCBsZWQgc3RhdHVzKi8KIAlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApCiAJCUFSNUtfUkVHX0RJU0FCTEVfQklUUyhhaCwgQVI1S19QQ0lDRkcsCkBAIC04Miw3ICs4MCw2IEBACiAgKi8KIGludCBhdGg1a19od19zZXRfZ3Bpb19pbnB1dChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1MzIgZ3BpbykKIHsKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwogCWlmIChncGlvID49IEFSNUtfTlVNX0dQSU8pCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC05OCw3ICs5NSw2IEBACiAgKi8KIGludCBhdGg1a19od19zZXRfZ3Bpb19vdXRwdXQoc3RydWN0IGF0aDVrX2h3ICphaCwgdTMyIGdwaW8pCiB7Ci0JQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKIAlpZiAoZ3BpbyA+PSBBUjVLX05VTV9HUElPKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTE0LDcgKzExMCw2IEBACiAgKi8KIHUzMiBhdGg1a19od19nZXRfZ3BpbyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1MzIgZ3BpbykKIHsKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwogCWlmIChncGlvID49IEFSNUtfTlVNX0dQSU8pCiAJCXJldHVybiAweGZmZmZmZmZmOwogCkBAIC0xMjksNyArMTI0LDYgQEAKIGludCBhdGg1a19od19zZXRfZ3BpbyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1MzIgZ3BpbywgdTMyIHZhbCkKIHsKIAl1MzIgZGF0YTsKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwogCiAJaWYgKGdwaW8gPj0gQVI1S19OVU1fR1BJTykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNTMsNyArMTQ3LDYgQEAKIHsKIAl1MzIgZGF0YTsKIAotCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CiAJaWYgKGdwaW8gPj0gQVI1S19OVU1fR1BJTykKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGN1LmMKaW5kZXggNTIxMmUyNy4uODZmZGI2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BjdS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY3UuYwpAQCAtNTksOCArNTksNiBAQAogCiAJYmVhY29uX3JlZyA9IDA7CiAKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwotCiAJc3dpdGNoIChvcF9tb2RlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKIAkJcGN1X3JlZyB8PSBBUjVLX1NUQV9JRDFfQURIT0MgfCBBUjVLX1NUQV9JRDFfS0VZU1JDSF9NT0RFOwpAQCAtMTczLDcgKzE3MSw2IEBACiAgKi8KIHN0YXRpYyBpbnQgYXRoNWtfaHdfc2V0X2Fja190aW1lb3V0KHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCB0aW1lb3V0KQogewotCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CiAJaWYgKGF0aDVrX2h3X2Nsb2NrdG9oKGFoLCBBUjVLX1JFR19NUygweGZmZmZmZmZmLCBBUjVLX1RJTUVfT1VUX0FDSykpCiAJCQk8PSB0aW1lb3V0KQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE5Miw3ICsxODksNiBAQAogICovCiBzdGF0aWMgaW50IGF0aDVrX2h3X3NldF9jdHNfdGltZW91dChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgdGltZW91dCkKIHsKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwogCWlmIChhdGg1a19od19jbG9ja3RvaChhaCwgQVI1S19SRUdfTVMoMHhmZmZmZmZmZiwgQVI1S19USU1FX09VVF9DVFMpKQogCQkJPD0gdGltZW91dCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yOTcsNyArMjkzLDYgQEAKIAl1MzIgbG93X2lkLCBoaWdoX2lkOwogCXUzMiBwY3VfcmVnOwogCi0JQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKIAkvKiBTZXQgbmV3IHN0YXRpb24gSUQgKi8KIAltZW1jcHkoY29tbW9uLT5tYWNhZGRyLCBtYWMsIEVUSF9BTEVOKTsKIApAQCAtMzU3LDcgKzM1Miw2IEBACiB2b2lkIGF0aDVrX2h3X3NldF9ic3NpZF9tYXNrKHN0cnVjdCBhdGg1a19odyAqYWgsIGNvbnN0IHU4ICptYXNrKQogewogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg1a19od19jb21tb24oYWgpOwotCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CiAKIAkvKiBDYWNoZSBic3NpZCBtYXNrIHNvIHRoYXQgd2UgY2FuIHJlc3RvcmUgaXQKIAkgKiBvbiByZXNldCAqLwpAQCAtMzgyLDcgKzM3Niw2IEBACiAgKi8KIHZvaWQgYXRoNWtfaHdfc3RhcnRfcnhfcGN1KHN0cnVjdCBhdGg1a19odyAqYWgpCiB7Ci0JQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKIAlBUjVLX1JFR19ESVNBQkxFX0JJVFMoYWgsIEFSNUtfRElBR19TVywgQVI1S19ESUFHX1NXX0RJU19SWCk7CiB9CiAKQEAgLTM5Nyw3ICszOTAsNiBAQAogICovCiB2b2lkIGF0aDVrX2h3X3N0b3BfcnhfcGN1KHN0cnVjdCBhdGg1a19odyAqYWgpCiB7Ci0JQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKIAlBUjVLX1JFR19FTkFCTEVfQklUUyhhaCwgQVI1S19ESUFHX1NXLCBBUjVLX0RJQUdfU1dfRElTX1JYKTsKIH0KIApAQCAtNDA2LDggKzM5OCw2IEBACiAgKi8KIHZvaWQgYXRoNWtfaHdfc2V0X21jYXN0X2ZpbHRlcihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1MzIgZmlsdGVyMCwgdTMyIGZpbHRlcjEpCiB7Ci0JQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKLQkvKiBTZXQgdGhlIG11bHRpY2F0IGZpbHRlciAqLwogCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgZmlsdGVyMCwgQVI1S19NQ0FTVF9GSUxURVIwKTsKIAlhdGg1a19od19yZWdfd3JpdGUoYWgsIGZpbHRlcjEsIEFSNUtfTUNBU1RfRklMVEVSMSk7CiB9CkBAIC00MjcsNyArNDE3LDYgQEAKIHsKIAl1MzIgZGF0YSwgZmlsdGVyID0gMDsKIAotCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CiAJZmlsdGVyID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUlhfRklMVEVSKTsKIAogCS8qUmFkYXIgZGV0ZWN0aW9uIGZvciA1MjEyKi8KQEAgLTQ1Nyw4ICs0NDYsNiBAQAogewogCXUzMiBkYXRhID0gMDsKIAotCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7Ci0KIAkvKiBTZXQgUEhZIGVycm9yIGZpbHRlciByZWdpc3RlciBvbiA1MjEyKi8KIAlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIpIHsKIAkJaWYgKGZpbHRlciAmIEFSNUtfUlhfRklMVEVSX1JBREFSRVJSKQpAQCAtNTMzLDggKzUyMCw2IEBACiAKIAlXQVJOX09OKCBpID09IEFUSDVLX01BWF9UU0ZfUkVBRCApOwogCi0JQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKLQogCXJldHVybiAoKCh1NjQpdHNmX3VwcGVyMSA8PCAzMikgfCB0c2ZfbG93ZXIpOwogfQogCkBAIC01NDgsOCArNTMzLDYgQEAKICAqLwogdm9pZCBhdGg1a19od19zZXRfdHNmNjQoc3RydWN0IGF0aDVrX2h3ICphaCwgdTY0IHRzZjY0KQogewotCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7Ci0KIAlhdGg1a19od19yZWdfd3JpdGUoYWgsIHRzZjY0ICYgMHhmZmZmZmZmZiwgQVI1S19UU0ZfTDMyKTsKIAlhdGg1a19od19yZWdfd3JpdGUoYWgsICh0c2Y2NCA+PiAzMikgJiAweGZmZmZmZmZmLCBBUjVLX1RTRl9VMzIpOwogfQpAQCAtNTY1LDggKzU0OCw2IEBACiB7CiAJdTMyIHZhbDsKIAotCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7Ci0KIAl2YWwgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19CRUFDT04pIHwgQVI1S19CRUFDT05fUkVTRVRfVFNGOwogCiAJLyoKQEAgLTU4Niw3ICs1NjcsNiBAQAogewogCXUzMiB0aW1lcjEsIHRpbWVyMiwgdGltZXIzOwogCi0JQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKIAkvKgogCSAqIFNldCB0aGUgYWRkaXRpb25hbCB0aW1lcnMgYnkgbW9kZQogCSAqLwpAQCAtNjc0LDcgKzY1NCw2IEBACiAJdW5zaWduZWQgaW50IGksIHR5cGU7CiAJdTE2IG1pY2VudHJ5ID0gZW50cnkgKyBBUjVLX0tFWVRBQkxFX01JQ19PRkZTRVQ7CiAKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwogCUFSNUtfQVNTRVJUX0VOVFJZKGVudHJ5LCBBUjVLX0tFWVRBQkxFX1NJWkUpOwogCiAJdHlwZSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX0tFWVRBQkxFX1RZUEUoZW50cnkpKTsKQEAgLTc0OSw4ICs3MjgsNiBAQAogCWJvb2wgaXNfdGtpcDsKIAljb25zdCB1OCAqa2V5X3B0cjsKIAotCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7Ci0KIAlpc190a2lwID0gKGtleS0+YWxnID09IEFMR19US0lQKTsKIAogCS8qCkBAIC04MzYsNyArODEzLDYgQEAKIHsKIAl1MzIgbG93X2lkLCBoaWdoX2lkOwogCi0JQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKIAkgLyogSW52YWxpZCBlbnRyeSAoa2V5IHRhYmxlIG92ZXJmbG93KSAqLwogCUFSNUtfQVNTRVJUX0VOVFJZKGVudHJ5LCBBUjVLX0tFWVRBQkxFX1NJWkUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGh5LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGh5LmMKaW5kZXggNDkyY2JiMS4uNjI4NGMzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9waHkuYwpAQCAtMzc4LDggKzM3OCw2IEBACiAJdTMyIGRhdGEsIHR5cGU7CiAJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207CiAKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwotCiAJaWYgKGFoLT5haF9yZl9iYW5rcyA9PSBOVUxMIHx8CiAJYWgtPmFoX2dhaW4uZ19zdGF0ZSA9PSBBUjVLX1JGR0FJTl9JTkFDVElWRSkKIAkJcmV0dXJuIEFSNUtfUkZHQUlOX0lOQUNUSVZFOwpAQCAtMTE2Nyw3ICsxMTY1LDcgQEAKICAqIFRoZSBtZWRpYW4gb2YgdGhlIHZhbHVlcyBpbiB0aGUgaGlzdG9yeSBpcyB0aGVuIGxvYWRlZCBpbnRvIHRoZQogICogaGFyZHdhcmUgZm9yIGl0cyBvd24gdXNlIGZvciBSU1NJIGFuZCBDQ0EgbWVhc3VyZW1lbnRzLgogICovCi1zdGF0aWMgdm9pZCBhdGg1a19od191cGRhdGVfbm9pc2VfZmxvb3Ioc3RydWN0IGF0aDVrX2h3ICphaCkKK3ZvaWQgYXRoNWtfaHdfdXBkYXRlX25vaXNlX2Zsb29yKHN0cnVjdCBhdGg1a19odyAqYWgpCiB7CiAJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207CiAJdTMyIHZhbDsKQEAgLTEyNDgsNyArMTI0Niw2IEBACiAvKgogICogUGVyZm9ybSBhIFBIWSBjYWxpYnJhdGlvbiBvbiBSRjUxMTAKICAqIC1GaXggQlBTSy9RQU0gQ29uc3RlbGxhdGlvbiAoSS9RIGNvcnJlY3Rpb24pCi0gKiAtQ2FsY3VsYXRlIE5vaXNlIEZsb29yCiAgKi8KIHN0YXRpYyBpbnQgYXRoNWtfaHdfcmY1MTEwX2NhbGlicmF0ZShzdHJ1Y3QgYXRoNWtfaHcgKmFoLAogCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpCkBAIC0xMzM1LDggKzEzMzIsNiBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWF0aDVrX2h3X3VwZGF0ZV9ub2lzZV9mbG9vcihhaCk7Ci0KIAkvKgogCSAqIFJlLWVuYWJsZSBSWC9UWCBhbmQgYmVhY29ucwogCSAqLwpAQCAtMTM0OCwyMiArMTM0MywyMCBAQAogfQogCiAvKgotICogUGVyZm9ybSBhIFBIWSBjYWxpYnJhdGlvbiBvbiBSRjUxMTEvNTExMiBhbmQgbmV3ZXIgY2hpcHMKKyAqIFBlcmZvcm0gSS9RIGNhbGlicmF0aW9uIG9uIFJGNTExMS81MTEyIGFuZCBuZXdlciBjaGlwcwogICovCi1zdGF0aWMgaW50IGF0aDVrX2h3X3JmNTExeF9jYWxpYnJhdGUoc3RydWN0IGF0aDVrX2h3ICphaCwKLQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKQorc3RhdGljIGludAorYXRoNWtfaHdfcmY1MTF4X2lxX2NhbGlicmF0ZShzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogewogCXUzMiBpX3B3ciwgcV9wd3I7CiAJczMyIGlxX2NvcnIsIGlfY29mZiwgaV9jb2ZmZCwgcV9jb2ZmLCBxX2NvZmZkOwogCWludCBpOwotCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CiAKIAlpZiAoIWFoLT5haF9jYWxpYnJhdGlvbiB8fAogCQlhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfSVEpICYgQVI1S19QSFlfSVFfUlVOKQotCQlnb3RvIGRvbmU7CisJCXJldHVybiAwOwogCiAJLyogQ2FsaWJyYXRpb24gaGFzIGZpbmlzaGVkLCBnZXQgdGhlIHJlc3VsdHMgYW5kIHJlLXJ1biAqLwotCiAJLyogd29yayBhcm91bmQgZW1wdHkgcmVzdWx0cyB3aGljaCBjYW4gYXBwYXJlbnRseSBoYXBwZW4gb24gNTIxMiAqLwogCWZvciAoaSA9IDA7IGkgPD0gMTA7IGkrKykgewogCQlpcV9jb3JyID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX0lRUkVTX0NBTF9DT1JSKTsKQEAgLTEzODQsNyArMTM3Nyw3IEBACiAKIAkvKiBwcm90ZWN0IGFnYWluc3QgZGl2aWRlIGJ5IDAgYW5kIGxvc3Mgb2Ygc2lnbiBiaXRzICovCiAJaWYgKGlfY29mZmQgPT0gMCB8fCBxX2NvZmZkIDwgMikKLQkJZ290byBkb25lOworCQlyZXR1cm4gLTE7CiAKIAlpX2NvZmYgPSAoLWlxX2NvcnIpIC8gaV9jb2ZmZDsKIAlpX2NvZmYgPSBjbGFtcChpX2NvZmYsIC0zMiwgMzEpOyAvKiBzaWduZWQgNiBiaXQgKi8KQEAgLTE0MTAsMTcgKzE0MDMsNiBAQAogCQkJQVI1S19QSFlfSVFfQ0FMX05VTV9MT0dfTUFYLCAxNSk7CiAJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUEhZX0lRLCBBUjVLX1BIWV9JUV9SVU4pOwogCi1kb25lOgotCi0JLyogVE9ETzogU2VwYXJhdGUgbm9pc2UgZmxvb3IgY2FsaWJyYXRpb24gZnJvbSBJL1EgY2FsaWJyYXRpb24KLQkgKiBzaW5jZSBub2lzZSBmbG9vciBjYWxpYnJhdGlvbiBpbnRlcnJ1cHRzIHJ4IHBhdGggd2hpbGUgSS9RCi0JICogY2FsaWJyYXRpb24gZG9lc24ndC4gV2UgZG9uJ3QgbmVlZCB0byBydW4gbm9pc2UgZmxvb3IgY2FsaWJyYXRpb24KLQkgKiBhcyBvZnRlbiBhcyBJL1EgY2FsaWJyYXRpb24uKi8KLQlhdGg1a19od191cGRhdGVfbm9pc2VfZmxvb3IoYWgpOwotCi0JLyogSW5pdGlhdGUgYSBnYWluX0YgY2FsaWJyYXRpb24gKi8KLQlhdGg1a19od19yZXF1ZXN0X3JmZ2Fpbl9wcm9iZShhaCk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQzNCw4ICsxNDE2LDEwIEBACiAKIAlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTEwKQogCQlyZXQgPSBhdGg1a19od19yZjUxMTBfY2FsaWJyYXRlKGFoLCBjaGFubmVsKTsKLQllbHNlCi0JCXJldCA9IGF0aDVrX2h3X3JmNTExeF9jYWxpYnJhdGUoYWgsIGNoYW5uZWwpOworCWVsc2UgeworCQlyZXQgPSBhdGg1a19od19yZjUxMXhfaXFfY2FsaWJyYXRlKGFoKTsKKwkJYXRoNWtfaHdfcmVxdWVzdF9yZmdhaW5fcHJvYmUoYWgpOworCX0KIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNjkzLDcgKzE2NzcsNiBAQAogCiBpbnQgYXRoNWtfaHdfcGh5X2Rpc2FibGUoc3RydWN0IGF0aDVrX2h3ICphaCkKIHsKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwogCS8qSnVzdCBhIHRyeSBNLkYuKi8KIAlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX0FDVF9ESVNBQkxFLCBBUjVLX1BIWV9BQ1QpOwogCkBAIC0xNzA5LDggKzE2OTIsNiBAQAogCXUzMiBzcmV2OwogCXUxNiByZXQ7CiAKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwotCiAJLyoKIAkgKiBTZXQgdGhlIHJhZGlvIGNoaXAgYWNjZXNzIHJlZ2lzdGVyCiAJICovCkBAIC0xNzU1LDggKzE3MzYsNiBAQAogc3RhdGljIHZvaWQgLypUT0RPOkJvdW5kYXJ5IGNoZWNrKi8KIGF0aDVrX2h3X3NldF9kZWZfYW50ZW5uYShzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1OCBhbnQpCiB7Ci0JQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKLQogCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkKIAkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBhbnQgJiAweDcsIEFSNUtfREVGQVVMVF9BTlRFTk5BKTsKIH0KQEAgLTE3ODksMTkgKzE3NjgsNTAgQEAKIAogCWlmIChlbmFibGUpIHsKIAkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfUkVTVEFSVCwKLQkJCQlBUjVLX1BIWV9SRVNUQVJUX0RJVl9HQywgMHhjKTsKKwkJCQlBUjVLX1BIWV9SRVNUQVJUX0RJVl9HQywgNCk7CiAKIAkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUEhZX0ZBU1RfQU5UX0RJViwKIAkJCQkJQVI1S19QSFlfRkFTVF9BTlRfRElWX0VOKTsKIAl9IGVsc2UgewogCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9SRVNUQVJULAotCQkJCUFSNUtfUEhZX1JFU1RBUlRfRElWX0dDLCAweDgpOworCQkJCUFSNUtfUEhZX1JFU1RBUlRfRElWX0dDLCAwKTsKIAogCQlBUjVLX1JFR19ESVNBQkxFX0JJVFMoYWgsIEFSNUtfUEhZX0ZBU1RfQU5UX0RJViwKIAkJCQkJQVI1S19QSFlfRkFTVF9BTlRfRElWX0VOKTsKIAl9CiB9CiAKK3ZvaWQKK2F0aDVrX2h3X3NldF9hbnRlbm5hX3N3aXRjaChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1OCBlZV9tb2RlKQoreworCXU4IGFudDAsIGFudDE7CisKKwkvKgorCSAqIEluIGNhc2UgYSBmaXhlZCBhbnRlbm5hIHdhcyBzZXQgYXMgZGVmYXVsdAorCSAqIHVzZSB0aGUgc2FtZSBzd2l0Y2ggdGFibGUgdHdpY2UuCisJICovCisJaWYgKGFoLT5haF9hbnRfbW9kZSA9PSBBUjVLX0FOVE1PREVfRklYRURfQSkKKwkJYW50MCA9IGFudDEgPSBBUjVLX0FOVF9TV1RBQkxFX0E7CisJZWxzZSBpZiAoYWgtPmFoX2FudF9tb2RlID09IEFSNUtfQU5UTU9ERV9GSVhFRF9CKQorCQlhbnQwID0gYW50MSA9IEFSNUtfQU5UX1NXVEFCTEVfQjsKKwllbHNlIHsKKwkJYW50MCA9IEFSNUtfQU5UX1NXVEFCTEVfQTsKKwkJYW50MSA9IEFSNUtfQU5UX1NXVEFCTEVfQjsKKwl9CisKKwkvKiBTZXQgYW50ZW5uYSBpZGxlIHN3aXRjaCB0YWJsZSAqLworCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX0FOVF9DVEwsCisJCQlBUjVLX1BIWV9BTlRfQ1RMX1NXVEFCTEVfSURMRSwKKwkJCShhaC0+YWhfYW50X2N0bFtlZV9tb2RlXVtBUjVLX0FOVF9DVExdIHwKKwkJCUFSNUtfUEhZX0FOVF9DVExfVFhSWF9FTikpOworCisJLyogU2V0IGFudGVubmEgc3dpdGNoIHRhYmxlcyAqLworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgYWgtPmFoX2FudF9jdGxbZWVfbW9kZV1bYW50MF0sCisJCUFSNUtfUEhZX0FOVF9TV0lUQ0hfVEFCTEVfMCk7CisJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBhaC0+YWhfYW50X2N0bFtlZV9tb2RlXVthbnQxXSwKKwkJQVI1S19QSFlfQU5UX1NXSVRDSF9UQUJMRV8xKTsKK30KKwogLyoKICAqIFNldCBhbnRlbm5hIG9wZXJhdGluZyBtb2RlCiAgKi8KQEAgLTE4MjMsOCArMTgzMyw2IEBACiAKIAlkZWZfYW50ID0gYWgtPmFoX2RlZl9hbnQ7CiAKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwotCiAJc3dpdGNoIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfTU9ERVMpIHsKIAljYXNlIENIQU5ORUxfQToKIAljYXNlIENIQU5ORUxfVDoKQEAgLTE5MjMsNiArMTkzMSw3IEBACiAJaWYgKHN0YV9pZDEpCiAJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1NUQV9JRDEsIHN0YV9pZDEpOwogCisJYXRoNWtfaHdfc2V0X2FudGVubmFfc3dpdGNoKGFoLCBlZV9tb2RlKTsKIAkvKiBOb3RlOiBzZXQgZGl2ZXJzaXR5IGJlZm9yZSBkZWZhdWx0IGFudGVubmEKIAkgKiBiZWNhdXNlIGl0IHdvbid0IHdvcmsgY29ycmVjdGx5ICovCiAJYXRoNWtfaHdfc2V0X2Zhc3RfZGl2KGFoLCBlZV9tb2RlLCBmYXN0X2Rpdik7CkBAIC0yOTg4LDcgKzI5OTcsNiBAQAogCXU4IHR5cGU7CiAJaW50IHJldDsKIAotCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CiAJaWYgKHR4cG93ZXIgPiBBUjVLX1RVTkVfTUFYX1RYUE9XRVIpIHsKIAkJQVRINUtfRVJSKGFoLT5haF9zYywgImludmFsaWQgdHggcG93ZXI6ICV1XG4iLCB0eHBvd2VyKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMDg0LDggKzMwOTIsNiBAQAogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGFoLT5haF9jdXJyZW50X2NoYW5uZWw7CiAJdTggZWVfbW9kZTsKIAotCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7Ci0KIAlzd2l0Y2ggKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9NT0RFUykgewogCWNhc2UgQ0hBTk5FTF9BOgogCWNhc2UgQ0hBTk5FTF9UOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3FjdS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3FjdS5jCmluZGV4IGY1ODMxZGEuLjQxODZmZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9xY3UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcWN1LmMKQEAgLTMxLDcgKzMxLDYgQEAKIGludCBhdGg1a19od19nZXRfdHhfcXVldWVwcm9wcyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBpbnQgcXVldWUsCiAJCXN0cnVjdCBhdGg1a190eHFfaW5mbyAqcXVldWVfaW5mbykKIHsKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwogCW1lbWNweShxdWV1ZV9pbmZvLCAmYWgtPmFoX3R4cVtxdWV1ZV0sIHNpemVvZihzdHJ1Y3QgYXRoNWtfdHhxX2luZm8pKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTQyLDcgKzQxLDYgQEAKIGludCBhdGg1a19od19zZXRfdHhfcXVldWVwcm9wcyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBpbnQgcXVldWUsCiAJCQkJY29uc3Qgc3RydWN0IGF0aDVrX3R4cV9pbmZvICpxdWV1ZV9pbmZvKQogewotCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CiAJQVI1S19BU1NFUlRfRU5UUlkocXVldWUsIGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3F1ZXVlcy5xX3R4X251bSk7CiAKIAlpZiAoYWgtPmFoX3R4cVtxdWV1ZV0udHFpX3R5cGUgPT0gQVI1S19UWF9RVUVVRV9JTkFDVElWRSkKQEAgLTY5LDggKzY3LDYgQEAKIAl1bnNpZ25lZCBpbnQgcXVldWU7CiAJaW50IHJldDsKIAotCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7Ci0KIAkvKgogCSAqIEdldCBxdWV1ZSBieSB0eXBlCiAJICovCkBAIC0xNDksNyArMTQ1LDYgQEAKIHUzMiBhdGg1a19od19udW1fdHhfcGVuZGluZyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgcXVldWUpCiB7CiAJdTMyIHBlbmRpbmc7Ci0JQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKIAlBUjVLX0FTU0VSVF9FTlRSWShxdWV1ZSwgYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfcXVldWVzLnFfdHhfbnVtKTsKIAogCS8qIFJldHVybiBpZiBxdWV1ZSBpcyBkZWNsYXJlZCBpbmFjdGl2ZSAqLwpAQCAtMTc3LDcgKzE3Miw2IEBACiAgKi8KIHZvaWQgYXRoNWtfaHdfcmVsZWFzZV90eF9xdWV1ZShzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgcXVldWUpCiB7Ci0JQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKIAlpZiAoV0FSTl9PTihxdWV1ZSA+PSBhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9xdWV1ZXMucV90eF9udW0pKQogCQlyZXR1cm47CiAKQEAgLTE5NSw3ICsxODksNiBAQAogCXUzMiBjd19taW4sIGN3X21heCwgcmV0cnlfbGcsIHJldHJ5X3NoOwogCXN0cnVjdCBhdGg1a190eHFfaW5mbyAqdHEgPSAmYWgtPmFoX3R4cVtxdWV1ZV07CiAKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwogCUFSNUtfQVNTRVJUX0VOVFJZKHF1ZXVlLCBhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9xdWV1ZXMucV90eF9udW0pOwogCiAJdHEgPSAmYWgtPmFoX3R4cVtxdWV1ZV07CkBAIC01MjMsOCArNTE2LDYgQEAKIHsKIAl1MzIgc2xvdF90aW1lX2Nsb2NrID0gYXRoNWtfaHdfaHRvY2xvY2soYWgsIHNsb3RfdGltZSk7CiAKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwotCiAJaWYgKHNsb3RfdGltZSA8IDYgfHwgc2xvdF90aW1lX2Nsb2NrID4gQVI1S19TTE9UX1RJTUVfTUFYKQogCQlyZXR1cm4gLUVJTlZBTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3Jlc2V0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVzZXQuYwppbmRleCAzMDdmODBlLi40OThhYTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVzZXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVzZXQuYwpAQCAtMjAxLDggKzIwMSw2IEBACiAJaW50IHJldDsKIAl1MzIgbWFzayA9IHZhbCA/IHZhbCA6IH4wVTsKIAotCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7Ci0KIAkvKiBSZWFkLWFuZC1jbGVhciBSWCBEZXNjcmlwdG9yIFBvaW50ZXIqLwogCWF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1JYRFApOwogCkBAIC0yNDYsNyArMjQ0LDYgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAl1MzIgc3RhaWQsIGRhdGE7CiAKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwogCXN0YWlkID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfU1RBX0lEMSk7CiAKIAlzd2l0Y2ggKG1vZGUpIHsKQEAgLTM5Myw4ICszOTAsNiBAQAogCW1vZGUgPSAwOwogCWNsb2NrID0gMDsKIAotCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7Ci0KIAkvKiBXYWtldXAgdGhlIGRldmljZSAqLwogCXJldCA9IGF0aDVrX2h3X3NldF9wb3dlcihhaCwgQVI1S19QTV9BV0FLRSwgdHJ1ZSwgMCk7CiAJaWYgKHJldCkgewpAQCAtNzM0LDcgKzcyOSw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGF0aDVrX2h3X2NvbW1pdF9lZXByb21fc2V0dGluZ3Moc3RydWN0IGF0aDVrX2h3ICphaCwKLQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLCB1OCAqYW50LCB1OCBlZV9tb2RlKQorCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsIHU4IGVlX21vZGUpCiB7CiAJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207CiAJczE2IGNja19vZmRtX3B3cl9kZWx0YTsKQEAgLTc2OCwxNyArNzYzLDkgQEAKIAkJCQkJCWVlLT5lZV9jY2tfb2ZkbV9nYWluX2RlbHRhOwogCX0KIAotCS8qIFNldCBhbnRlbm5hIGlkbGUgc3dpdGNoIHRhYmxlICovCi0JQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfQU5UX0NUTCwKLQkJCUFSNUtfUEhZX0FOVF9DVExfU1dUQUJMRV9JRExFLAotCQkJKGFoLT5haF9hbnRfY3RsW2VlX21vZGVdWzBdIHwKLQkJCUFSNUtfUEhZX0FOVF9DVExfVFhSWF9FTikpOwotCi0JLyogU2V0IGFudGVubmEgc3dpdGNoIHRhYmxlcyAqLwotCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgYWgtPmFoX2FudF9jdGxbZWVfbW9kZV1bYW50WzBdXSwKLQkJQVI1S19QSFlfQU5UX1NXSVRDSF9UQUJMRV8wKTsKLQlhdGg1a19od19yZWdfd3JpdGUoYWgsIGFoLT5haF9hbnRfY3RsW2VlX21vZGVdW2FudFsxXV0sCi0JCUFSNUtfUEhZX0FOVF9TV0lUQ0hfVEFCTEVfMSk7CisJLyogWFhYOiBuZWNlc3NhcnkgaGVyZT8gaXMgY2FsbGVkIGZyb20gYXRoNWtfaHdfc2V0X2FudGVubmFfbW9kZSgpCisJICogdG9vICovCisJYXRoNWtfaHdfc2V0X2FudGVubmFfc3dpdGNoKGFoLCBlZV9tb2RlKTsKIAogCS8qIE5vaXNlIGZsb29yIHRocmVzaG9sZCAqLwogCWF0aDVrX2h3X3JlZ193cml0ZShhaCwKQEAgLTg1NSw3ICs4NDIsNiBAQAogCQkJQVI1S19QSFlfTkZfVEhSRVNINjIsCiAJCQllZS0+ZWVfdGhyXzYyW2VlX21vZGVdKTsKIAotCiAJLyogRmFsc2UgZGV0ZWN0IGJhY2tvZmYgZm9yIGNoYW5uZWxzCiAJICogdGhhdCBoYXZlIHNwdXIgbm9pc2UuIFdyaXRlIHRoZSBuZXcKIAkgKiBjeWNsaWMgcG93ZXIgUlNTSSB0aHJlc2hvbGQuICovCkBAIC04OTEsMTQgKzg3NywxMSBAQAogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwgYm9vbCBjaGFuZ2VfY2hhbm5lbCkKIHsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoNWtfaHdfY29tbW9uKGFoKTsKLQl1MzIgc19zZXFbMTBdLCBzX2FudCwgc19sZWRbM10sIHN0YWlkMV9mbGFncywgdHNmX3VwLCB0c2ZfbG87CisJdTMyIHNfc2VxWzEwXSwgc19sZWRbM10sIHN0YWlkMV9mbGFncywgdHNmX3VwLCB0c2ZfbG87CiAJdTMyIHBoeV90c3QxOwotCXU4IG1vZGUsIGZyZXEsIGVlX21vZGUsIGFudFsyXTsKKwl1OCBtb2RlLCBmcmVxLCBlZV9tb2RlOwogCWludCBpLCByZXQ7CiAKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwotCi0Jc19hbnQgPSAwOwogCWVlX21vZGUgPSAwOwogCXN0YWlkMV9mbGFncyA9IDA7CiAJdHNmX3VwID0gMDsKQEAgLTk5NSw5ICs5NzgsNiBAQAogCQkJfQogCQl9CiAKLQkJLyogU2F2ZSBkZWZhdWx0IGFudGVubmEgKi8KLQkJc19hbnQgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19ERUZBVUxUX0FOVEVOTkEpOwotCiAJCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMikgewogCQkJLyogUmVzdG9yZSBub3JtYWwgMzIvNDBNSHogY2xvY2sgb3BlcmF0aW9uCiAJCQkgKiB0byBhdm9pZCByZWdpc3RlciBhY2Nlc3MgZGVsYXkgb24gY2VydGFpbgpAQCAtMTA5NCwyMiArMTA3NCwxNyBAQAogCQkvKiBXcml0ZSBPRkRNIHRpbWluZ3Mgb24gNTIxMiovCiAJCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMiAmJgogCQkJY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX09GRE0pIHsKLQkJCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPQotCQkJCQkmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOwogCiAJCQlyZXQgPSBhdGg1a19od193cml0ZV9vZmRtX3RpbWluZ3MoYWgsIGNoYW5uZWwpOwogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gcmV0OwogCi0JCQkvKiBOb3RlOiBBY2NvcmRpbmcgdG8gZG9jcyB3ZSBjYW4gaGF2ZSBhIG5ld2VyCi0JCQkgKiBFRVBST00gb24gb2xkIGhhcmR3YXJlLCBzbyB3ZSBuZWVkIHRvIHZlcmlmeQotCQkJICogdGhhdCBvdXIgaGFyZHdhcmUgaXMgbmV3IGVub3VnaCB0byBoYXZlIHNwdXIKLQkJCSAqIG1pdGlnYXRpb24gcmVnaXN0ZXJzIChkZWx0YSBwaGFzZSBldGMpICovCi0JCQlpZiAoYWgtPmFoX21hY19zcmV2ID49IEFSNUtfU1JFVl9BUjU0MjQgfHwKLQkJCShhaC0+YWhfbWFjX3NyZXYgPj0gQVI1S19TUkVWX0FSNTQyNCAmJgotCQkJZWUtPmVlX3ZlcnNpb24gPj0gQVI1S19FRVBST01fVkVSU0lPTl81XzMpKQorCQkJLyogU3B1ciBpbmZvIGlzIGF2YWlsYWJsZSBvbmx5IGZyb20gRUVQUk9NIHZlcnNpb25zCisJCQkgKiBiaWdnZXIgdGhhbiA1LjMgYnV0IGJ1dCB0aGUgRUVQT00gcm91dGluZXMgd2lsbCB1c2UKKwkJCSAqIHN0YXRpYyB2YWx1ZXMgZm9yIG9sZGVyIHZlcnNpb25zICovCisJCQlpZiAoYWgtPmFoX21hY19zcmV2ID49IEFSNUtfU1JFVl9BUjU0MjQpCiAJCQkJYXRoNWtfaHdfc2V0X3NwdXJfbWl0aWdhdGlvbl9maWx0ZXIoYWgsCi0JCQkJCQkJCWNoYW5uZWwpOworCQkJCQkJCQkgICAgY2hhbm5lbCk7CiAJCX0KIAogCQkvKkVuYWJsZS9kaXNhYmxlIDgwMi4xMWIgbW9kZSBvbiA1MTExCkBAIC0xMTIzLDIxICsxMDk4LDggQEAKIAkJCQkgICAgQVI1S19UWENGR19CX01PREUpOwogCQl9CiAKLQkJLyoKLQkJICogSW4gY2FzZSBhIGZpeGVkIGFudGVubmEgd2FzIHNldCBhcyBkZWZhdWx0Ci0JCSAqIHVzZSB0aGUgc2FtZSBzd2l0Y2ggdGFibGUgdHdpY2UuCi0JCSAqLwotCQlpZiAoYWgtPmFoX2FudF9tb2RlID09IEFSNUtfQU5UTU9ERV9GSVhFRF9BKQotCQkJCWFudFswXSA9IGFudFsxXSA9IEFSNUtfQU5UX1NXVEFCTEVfQTsKLQkJZWxzZSBpZiAoYWgtPmFoX2FudF9tb2RlID09IEFSNUtfQU5UTU9ERV9GSVhFRF9CKQotCQkJCWFudFswXSA9IGFudFsxXSA9IEFSNUtfQU5UX1NXVEFCTEVfQjsKLQkJZWxzZSB7Ci0JCQlhbnRbMF0gPSBBUjVLX0FOVF9TV1RBQkxFX0E7Ci0JCQlhbnRbMV0gPSBBUjVLX0FOVF9TV1RBQkxFX0I7Ci0JCX0KLQogCQkvKiBDb21taXQgdmFsdWVzIGZyb20gRUVQUk9NICovCi0JCWF0aDVrX2h3X2NvbW1pdF9lZXByb21fc2V0dGluZ3MoYWgsIGNoYW5uZWwsIGFudCwgZWVfbW9kZSk7CisJCWF0aDVrX2h3X2NvbW1pdF9lZXByb21fc2V0dGluZ3MoYWgsIGNoYW5uZWwsIGVlX21vZGUpOwogCiAJfSBlbHNlIHsKIAkJLyoKQEAgLTExNzUsOCArMTEzNyw2IEBACiAJCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCB0c2ZfbG8sIEFSNUtfVFNGX0wzMik7CiAJCQl9CiAJCX0KLQotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHNfYW50LCBBUjVLX0RFRkFVTFRfQU5URU5OQSk7CiAJfQogCiAJLyogTGVkc3RhdGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9zeXNmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3N5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA3NTdkZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9zeXNmcy5jCkBAIC0wLDAgKzEsMTE2IEBACisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKyNpbmNsdWRlICJiYXNlLmgiCisjaW5jbHVkZSAiYXRoNWsuaCIKKyNpbmNsdWRlICJyZWcuaCIKKworI2RlZmluZSBTSU1QTEVfU0hPV19TVE9SRShuYW1lLCBnZXQsIHNldCkJCQkJXAorc3RhdGljIHNzaXplX3QgYXRoNWtfYXR0cl9zaG93XyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQlcCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJCQlcCisJCQljaGFyICpidWYpCQkJCQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCQlcCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGdldCk7IAkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgc3NpemVfdCBhdGg1a19hdHRyX3N0b3JlXyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQlcCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJCQlcCisJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJCQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCQlcCisJaW50IHZhbDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCXZhbCA9IChpbnQpc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CQkJXAorCXNldChzYy0+YWgsIHZhbCk7CQkJCQkJXAorCXJldHVybiBjb3VudDsJCQkJCQkJXAorfQkJCQkJCQkJCVwKK3N0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPIHwgU19JV1VTUiwJCQkJXAorCQkgICBhdGg1a19hdHRyX3Nob3dfIyNuYW1lLCBhdGg1a19hdHRyX3N0b3JlXyMjbmFtZSkKKworI2RlZmluZSBTSU1QTEVfU0hPVyhuYW1lLCBnZXQpCQkJCQkJXAorc3RhdGljIHNzaXplX3QgYXRoNWtfYXR0cl9zaG93XyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQlcCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJCQlcCisJCQljaGFyICpidWYpCQkJCQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCQlcCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGdldCk7IAkJCVwKK30JCQkJCQkJCQlcCitzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgYXRoNWtfYXR0cl9zaG93XyMjbmFtZSwgTlVMTCkKKworLyoqKiBBTkkgKioqLworCitTSU1QTEVfU0hPV19TVE9SRShhbmlfbW9kZSwgc2MtPmFuaV9zdGF0ZS5hbmlfbW9kZSwgYXRoNWtfYW5pX2luaXQpOworU0lNUExFX1NIT1dfU1RPUkUobm9pc2VfaW1tdW5pdHlfbGV2ZWwsIHNjLT5hbmlfc3RhdGUubm9pc2VfaW1tX2xldmVsLAorCQkJYXRoNWtfYW5pX3NldF9ub2lzZV9pbW11bml0eV9sZXZlbCk7CitTSU1QTEVfU0hPV19TVE9SRShzcHVyX2xldmVsLCBzYy0+YW5pX3N0YXRlLnNwdXJfbGV2ZWwsCisJCQlhdGg1a19hbmlfc2V0X3NwdXJfaW1tdW5pdHlfbGV2ZWwpOworU0lNUExFX1NIT1dfU1RPUkUoZmlyc3RlcF9sZXZlbCwgc2MtPmFuaV9zdGF0ZS5maXJzdGVwX2xldmVsLAorCQkJYXRoNWtfYW5pX3NldF9maXJzdGVwX2xldmVsKTsKK1NJTVBMRV9TSE9XX1NUT1JFKG9mZG1fd2Vha19zaWduYWxfZGV0ZWN0aW9uLCBzYy0+YW5pX3N0YXRlLm9mZG1fd2Vha19zaWcsCisJCQlhdGg1a19hbmlfc2V0X29mZG1fd2Vha19zaWduYWxfZGV0ZWN0aW9uKTsKK1NJTVBMRV9TSE9XX1NUT1JFKGNja193ZWFrX3NpZ25hbF9kZXRlY3Rpb24sIHNjLT5hbmlfc3RhdGUuY2NrX3dlYWtfc2lnLAorCQkJYXRoNWtfYW5pX3NldF9jY2tfd2Vha19zaWduYWxfZGV0ZWN0aW9uKTsKK1NJTVBMRV9TSE9XKHNwdXJfbGV2ZWxfbWF4LCBzYy0+YW5pX3N0YXRlLm1heF9zcHVyX2xldmVsKTsKKworc3RhdGljIHNzaXplX3QgYXRoNWtfYXR0cl9zaG93X25vaXNlX2ltbXVuaXR5X2xldmVsX21heChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgQVRINUtfQU5JX01BWF9OT0lTRV9JTU1fTFZMKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihub2lzZV9pbW11bml0eV9sZXZlbF9tYXgsIFNfSVJVR08sCisJCSAgIGF0aDVrX2F0dHJfc2hvd19ub2lzZV9pbW11bml0eV9sZXZlbF9tYXgsIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBhdGg1a19hdHRyX3Nob3dfZmlyc3RlcF9sZXZlbF9tYXgoc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCit7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIEFUSDVLX0FOSV9NQVhfRklSU1RFUF9MVkwpOworfQorc3RhdGljIERFVklDRV9BVFRSKGZpcnN0ZXBfbGV2ZWxfbWF4LCBTX0lSVUdPLAorCQkgICBhdGg1a19hdHRyX3Nob3dfZmlyc3RlcF9sZXZlbF9tYXgsIE5VTEwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYXRoNWtfc3lzZnNfZW50cmllc19hbmlbXSA9IHsKKwkmZGV2X2F0dHJfYW5pX21vZGUuYXR0ciwKKwkmZGV2X2F0dHJfbm9pc2VfaW1tdW5pdHlfbGV2ZWwuYXR0ciwKKwkmZGV2X2F0dHJfc3B1cl9sZXZlbC5hdHRyLAorCSZkZXZfYXR0cl9maXJzdGVwX2xldmVsLmF0dHIsCisJJmRldl9hdHRyX29mZG1fd2Vha19zaWduYWxfZGV0ZWN0aW9uLmF0dHIsCisJJmRldl9hdHRyX2Nja193ZWFrX3NpZ25hbF9kZXRlY3Rpb24uYXR0ciwKKwkmZGV2X2F0dHJfbm9pc2VfaW1tdW5pdHlfbGV2ZWxfbWF4LmF0dHIsCisJJmRldl9hdHRyX3NwdXJfbGV2ZWxfbWF4LmF0dHIsCisJJmRldl9hdHRyX2ZpcnN0ZXBfbGV2ZWxfbWF4LmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYXRoNWtfYXR0cmlidXRlX2dyb3VwX2FuaSA9IHsKKwkubmFtZSA9ICJhbmkiLAorCS5hdHRycyA9IGF0aDVrX3N5c2ZzX2VudHJpZXNfYW5pLAorfTsKKworCisvKioqIHJlZ2lzdGVyIC8gdW5yZWdpc3RlciAqKiovCisKK2ludAorYXRoNWtfc3lzZnNfcmVnaXN0ZXIoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmc2MtPnBkZXYtPmRldjsKKwlpbnQgZXJyOworCisJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZhdGg1a19hdHRyaWJ1dGVfZ3JvdXBfYW5pKTsKKwlpZiAoZXJyKSB7CisJCUFUSDVLX0VSUihzYywgImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZ3JvdXBcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkCithdGg1a19zeXNmc191bnJlZ2lzdGVyKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnNjLT5wZGV2LT5kZXY7CisKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJmF0aDVrX2F0dHJpYnV0ZV9ncm91cF9hbmkpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlCmluZGV4IGRkMTEyYmUuLjk3M2FlNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGUKQEAgLTMyLDcgKzMyLDggQEAKIAkJbWFjLm8gXAogCQlhcjkwMDJfbWFjLm8gXAogCQlhcjkwMDNfbWFjLm8gXAotCQlhcjkwMDNfZWVwcm9tLm8KKwkJYXI5MDAzX2VlcHJvbS5vIFwKKwkJYXI5MDAzX3BhcHJkLm8KIAogb2JqLSQoQ09ORklHX0FUSDlLX0hXKSArPSBhdGg5a19ody5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9haGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9haGIuYwppbmRleCA4NWZkZDI2Li4xYTk4NGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYWhiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FoYi5jCkBAIC0xMzEsMTEgKzEzMSw4IEBACiAKIAlhaCA9IHNjLT5zY19haDsKIAlhdGg5a19od19uYW1lKGFoLCBod19uYW1lLCBzaXplb2YoaHdfbmFtZSkpOwotCXByaW50ayhLRVJOX0lORk8KLQkgICAgICAgIiVzOiAlcyBtZW09MHglbHgsIGlycT0lZFxuIiwKLQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLAotCSAgICAgICBod19uYW1lLAotCSAgICAgICAodW5zaWduZWQgbG9uZyltZW0sIGlycSk7CisJd2lwaHlfaW5mbyhody0+d2lwaHksICIlcyBtZW09MHglbHgsIGlycT0lZFxuIiwKKwkJICAgaHdfbmFtZSwgKHVuc2lnbmVkIGxvbmcpbWVtLCBpcnEpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hbmkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hbmkuYwppbmRleCBiYThiMjBmLi5jYzY0OGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYW5pLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FuaS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTAgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xNyw4ICsxNyw5OSBAQAogI2luY2x1ZGUgImh3LmgiCiAjaW5jbHVkZSAiaHctb3BzLmgiCiAKLXN0YXRpYyBpbnQgYXRoOWtfaHdfZ2V0X2FuaV9jaGFubmVsX2lkeChzdHJ1Y3QgYXRoX2h3ICphaCwKLQkJCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCitzdHJ1Y3QgYW5pX29mZG1fbGV2ZWxfZW50cnkgeworCWludCBzcHVyX2ltbXVuaXR5X2xldmVsOworCWludCBmaXJfc3RlcF9sZXZlbDsKKwlpbnQgb2ZkbV93ZWFrX3NpZ25hbF9vbjsKK307CisKKy8qIHZhbHVlcyBoZXJlIGFyZSByZWxhdGl2ZSB0byB0aGUgSU5JICovCisKKy8qCisgKiBMZWdlbmQ6CisgKgorICogU0k6IFNwdXIgaW1tdW5pdHkKKyAqIEZTOiBGSVIgU3RlcAorICogV1M6IE9GRE0gLyBDQ0sgV2VhayBTaWduYWwgZGV0ZWN0aW9uCisgKiBNUkMtQ0NLOiBNYXhpbWFsIFJhdGlvIENvbWJpbmluZyBmb3IgQ0NLCisgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhbmlfb2ZkbV9sZXZlbF9lbnRyeSBvZmRtX2xldmVsX3RhYmxlW10gPSB7CisJLyogU0kgIEZTICBXUyAqLworCXsgIDAsICAwLCAgMSAgfSwgLyogbHZsIDAgKi8KKwl7ICAxLCAgMSwgIDEgIH0sIC8qIGx2bCAxICovCisJeyAgMiwgIDIsICAxICB9LCAvKiBsdmwgMiAqLworCXsgIDMsICAyLCAgMSAgfSwgLyogbHZsIDMgIChkZWZhdWx0KSAqLworCXsgIDQsICAzLCAgMSAgfSwgLyogbHZsIDQgKi8KKwl7ICA1LCAgNCwgIDEgIH0sIC8qIGx2bCA1ICovCisJeyAgNiwgIDUsICAxICB9LCAvKiBsdmwgNiAqLworCXsgIDcsICA2LCAgMSAgfSwgLyogbHZsIDcgKi8KKwl7ICA3LCAgNywgIDEgIH0sIC8qIGx2bCA4ICovCisJeyAgNywgIDgsICAwICB9ICAvKiBsdmwgOSAqLworfTsKKyNkZWZpbmUgQVRIOUtfQU5JX09GRE1fTlVNX0xFVkVMIFwKKwkoc2l6ZW9mKG9mZG1fbGV2ZWxfdGFibGUpL3NpemVvZihvZmRtX2xldmVsX3RhYmxlWzBdKSkKKyNkZWZpbmUgQVRIOUtfQU5JX09GRE1fTUFYX0xFVkVMIFwKKwkoQVRIOUtfQU5JX09GRE1fTlVNX0xFVkVMLTEpCisjZGVmaW5lIEFUSDlLX0FOSV9PRkRNX0RFRl9MRVZFTCBcCisJMyAvKiBkZWZhdWx0IGxldmVsIC0gbWF0Y2hlcyB0aGUgSU5JIHNldHRpbmdzICovCisKKy8qCisgKiBNUkMgKE1heGltYWwgUmF0aW8gQ29tYmluaW5nKSBoYXMgYWx3YXlzIGJlZW4gdXNlZCB3aXRoIG11bHRpLWFudGVubmEgb2ZkbS4KKyAqIFdpdGggT0ZETSBmb3Igc2luZ2xlIHN0cmVhbSB5b3UganVzdCBhZGQgdXAgYWxsIGFudGVubmEgaW5wdXRzLCB5b3UncmUKKyAqIG9ubHkgaW50ZXJlc3RlZCBpbiB3aGF0IHlvdSBnZXQgYWZ0ZXIgRkZULiBTaWduYWwgYWxpZ21lbnQgaXMgYWxzbyBub3QKKyAqIHJlcXVpcmVkIGZvciBPRkRNIGJlY2F1c2UgYW55IHBoYXNlIGRpZmZlcmVuY2UgYWRkcyB1cCBpbiB0aGUgZnJlcXVlbmN5CisgKiBkb21haW4uCisgKgorICogTVJDIHJlcXVpcmVzIGV4dHJhIHdvcmsgZm9yIHVzZSB3aXRoIENDSy4gWW91IG5lZWQgdG8gYWxpZ24gdGhlIGFudGVubmEKKyAqIHNpZ25hbHMgZnJvbSB0aGUgZGlmZmVyZW50IGFudGVubmEgYmVmb3JlIHlvdSBjYW4gYWRkIHRoZSBzaWduYWxzIHRvZ2V0aGVyLgorICogWW91IG5lZWQgYWxpZ21lbnQgb2Ygc2lnbmFscyBhcyBDQ0sgaXMgaW4gdGltZSBkb21haW4sIHNvIGFkZGl0aW9uIGNhbiBjYW5jZWwKKyAqIHlvdXIgc2lnbmFsIGNvbXBsZXRlbHkgaWYgcGhhc2UgaXMgMTgwIGRlZ3JlZXMgKHRoaW5rIG9mIGFkZGluZyBzaW5lIHdhdmVzKS4KKyAqIFlvdSBhbHNvIG5lZWQgdG8gcmVtb3ZlIG5vaXNlIGJlZm9yZSB0aGUgYWRkaXRpb24gYW5kIHRoaXMgaXMgd2hlcmUgQU5JCisgKiBNUkMgQ0NLIGNvbWVzIGludG8gcGxheS4gT25lIG9mIHRoZSBhbnRlbm5hIGlucHV0cyBtYXkgYmUgc3Ryb25nZXIgYnV0CisgKiBsb3dlciBTTlIsIHNvIGp1c3QgYWRkaW5nIGFmdGVyIGFsaWdubWVudCBjYW4gYmUgZGFuZ2Vyb3VzLgorICoKKyAqIFJlZ2FyZGxlc3Mgb2YgYWxpZ25tZW50IGluIHRpbWUsIHRoZSBhbnRlbm5hIHNpZ25hbHMgYWRkIGNvbnN0cnVjdGl2ZWx5IGFmdGVyCisgKiBGRlQgYW5kIGltcHJvdmUgeW91ciByZWNlcHRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uOgorICoKKyAqIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWF4aW1hbC1yYXRpb19jb21iaW5pbmcKKyAqLworCitzdHJ1Y3QgYW5pX2Nja19sZXZlbF9lbnRyeSB7CisJaW50IGZpcl9zdGVwX2xldmVsOworCWludCBtcmNfY2NrX29uOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhbmlfY2NrX2xldmVsX2VudHJ5IGNja19sZXZlbF90YWJsZVtdID0geworCS8qIEZTICBNUkMtQ0NLICAqLworCXsgIDAsICAxICB9LCAvKiBsdmwgMCAqLworCXsgIDEsICAxICB9LCAvKiBsdmwgMSAqLworCXsgIDIsICAxICB9LCAvKiBsdmwgMiAgKGRlZmF1bHQpICovCisJeyAgMywgIDEgIH0sIC8qIGx2bCAzICovCisJeyAgNCwgIDAgIH0sIC8qIGx2bCA0ICovCisJeyAgNSwgIDAgIH0sIC8qIGx2bCA1ICovCisJeyAgNiwgIDAgIH0sIC8qIGx2bCA2ICovCisJeyAgNywgIDAgIH0sIC8qIGx2bCA3IChvbmx5IGZvciBoaWdoIHJzc2kpICovCisJeyAgOCwgIDAgIH0gIC8qIGx2bCA4IChvbmx5IGZvciBoaWdoIHJzc2kpICovCit9OworCisjZGVmaW5lIEFUSDlLX0FOSV9DQ0tfTlVNX0xFVkVMIFwKKwkoc2l6ZW9mKGNja19sZXZlbF90YWJsZSkvc2l6ZW9mKGNja19sZXZlbF90YWJsZVswXSkpCisjZGVmaW5lIEFUSDlLX0FOSV9DQ0tfTUFYX0xFVkVMIFwKKwkoQVRIOUtfQU5JX0NDS19OVU1fTEVWRUwtMSkKKyNkZWZpbmUgQVRIOUtfQU5JX0NDS19NQVhfTEVWRUxfTE9XX1JTU0kgXAorCShBVEg5S19BTklfQ0NLX05VTV9MRVZFTC0zKQorI2RlZmluZSBBVEg5S19BTklfQ0NLX0RFRl9MRVZFTCBcCisJMiAvKiBkZWZhdWx0IGxldmVsIC0gbWF0Y2hlcyB0aGUgSU5JIHNldHRpbmdzICovCisKKy8qIFByaXZhdGUgdG8gYW5pLmMgKi8KK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2FuaV9sb3dlcl9pbW11bml0eShzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlhdGg5a19od19wcml2YXRlX29wcyhhaCktPmFuaV9sb3dlcl9pbW11bml0eShhaCk7Cit9CisKK2ludCBhdGg5a19od19nZXRfYW5pX2NoYW5uZWxfaWR4KHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAlpbnQgaTsKIApAQCAtNDgsNyArMTM5LDcgQEAKIAlzdGF0cy0+YmVhY29ucyArPSBSRUdfUkVBRChhaCwgQVJfQkVBQ09OX0NOVCk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2FuaV9yZXN0YXJ0KHN0cnVjdCBhdGhfaHcgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfYW5pX3Jlc3RhcnRfb2xkKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYW5pU3RhdGU7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CkBAIC05Niw3ICsxODcsNDIgQEAKIAlhbmlTdGF0ZS0+Y2NrUGh5RXJyQ291bnQgPSAwOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19hbmlfb2ZkbV9lcnJfdHJpZ2dlcihzdHJ1Y3QgYXRoX2h3ICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2FuaV9yZXN0YXJ0X25ldyhzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlOworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOworCisJaWYgKCFET19BTkkoYWgpKQorCQlyZXR1cm47CisKKwlhbmlTdGF0ZSA9IGFoLT5jdXJhbmk7CisJYW5pU3RhdGUtPmxpc3RlblRpbWUgPSAwOworCisJYW5pU3RhdGUtPm9mZG1QaHlFcnJCYXNlID0gMDsKKwlhbmlTdGF0ZS0+Y2NrUGh5RXJyQmFzZSA9IDA7CisKKwlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwKKwkJICAiV3JpdGluZyBvZmRtYmFzZT0lMDh4ICAgY2NrYmFzZT0lMDh4XG4iLAorCQkgIGFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZSwKKwkJICBhbmlTdGF0ZS0+Y2NrUGh5RXJyQmFzZSk7CisKKwlFTkFCTEVfUkVHV1JJVEVfQlVGRkVSKGFoKTsKKworCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8xLCBhbmlTdGF0ZS0+b2ZkbVBoeUVyckJhc2UpOworCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8yLCBhbmlTdGF0ZS0+Y2NrUGh5RXJyQmFzZSk7CisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSX01BU0tfMSwgQVJfUEhZX0VSUl9PRkRNX1RJTUlORyk7CisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSX01BU0tfMiwgQVJfUEhZX0VSUl9DQ0tfVElNSU5HKTsKKworCVJFR1dSSVRFX0JVRkZFUl9GTFVTSChhaCk7CisJRElTQUJMRV9SRUdXUklURV9CVUZGRVIoYWgpOworCisJYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKGFoLCAmYWgtPmFoX21pYlN0YXRzKTsKKworCWFuaVN0YXRlLT5vZmRtUGh5RXJyQ291bnQgPSAwOworCWFuaVN0YXRlLT5jY2tQaHlFcnJDb3VudCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2FuaV9vZmRtX2Vycl90cmlnZ2VyX29sZChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmYXRoOWtfaHdfY29tbW9uKGFoKS0+aHctPmNvbmY7CiAJc3RydWN0IGFyNTQxNkFuaVN0YXRlICphbmlTdGF0ZTsKQEAgLTE2OCw3ICsyOTQsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfYW5pX2Nja19lcnJfdHJpZ2dlcihzdHJ1Y3QgYXRoX2h3ICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2FuaV9jY2tfZXJyX3RyaWdnZXJfb2xkKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZhdGg5a19od19jb21tb24oYWgpLT5ody0+Y29uZjsKIAlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlOwpAQCAtMjA2LDcgKzMzMiwxMjUgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2FuaV9sb3dlcl9pbW11bml0eShzdHJ1Y3QgYXRoX2h3ICphaCkKKy8qIEFkanVzdCB0aGUgT0ZETSBOb2lzZSBJbW11bml0eSBMZXZlbCAqLworc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X29mZG1fbmlsKHN0cnVjdCBhdGhfaHcgKmFoLCB1OCBpbW11bml0eUxldmVsKQoreworCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYW5pU3RhdGUgPSBhaC0+Y3VyYW5pOworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOworCWNvbnN0IHN0cnVjdCBhbmlfb2ZkbV9sZXZlbF9lbnRyeSAqZW50cnlfb2ZkbTsKKwljb25zdCBzdHJ1Y3QgYW5pX2Nja19sZXZlbF9lbnRyeSAqZW50cnlfY2NrOworCisJYW5pU3RhdGUtPm5vaXNlRmxvb3IgPSBCRUFDT05fUlNTSShhaCk7CisKKwlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwKKwkJICAiKioqKiBvZmRtbGV2ZWwgJWQ9PiVkLCByc3NpPSVkW2xvPSVkIGhpPSVkXVxuIiwKKwkJICBhbmlTdGF0ZS0+b2ZkbU5vaXNlSW1tdW5pdHlMZXZlbCwKKwkJICBpbW11bml0eUxldmVsLCBhbmlTdGF0ZS0+bm9pc2VGbG9vciwKKwkJICBhbmlTdGF0ZS0+cnNzaVRockxvdywgYW5pU3RhdGUtPnJzc2lUaHJIaWdoKTsKKworCWFuaVN0YXRlLT5vZmRtTm9pc2VJbW11bml0eUxldmVsID0gaW1tdW5pdHlMZXZlbDsKKworCWVudHJ5X29mZG0gPSAmb2ZkbV9sZXZlbF90YWJsZVthbmlTdGF0ZS0+b2ZkbU5vaXNlSW1tdW5pdHlMZXZlbF07CisJZW50cnlfY2NrID0gJmNja19sZXZlbF90YWJsZVthbmlTdGF0ZS0+Y2NrTm9pc2VJbW11bml0eUxldmVsXTsKKworCWlmIChhbmlTdGF0ZS0+c3B1ckltbXVuaXR5TGV2ZWwgIT0gZW50cnlfb2ZkbS0+c3B1cl9pbW11bml0eV9sZXZlbCkKKwkJYXRoOWtfaHdfYW5pX2NvbnRyb2woYWgsCisJCQkJICAgICBBVEg5S19BTklfU1BVUl9JTU1VTklUWV9MRVZFTCwKKwkJCQkgICAgIGVudHJ5X29mZG0tPnNwdXJfaW1tdW5pdHlfbGV2ZWwpOworCisJaWYgKGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwgIT0gZW50cnlfb2ZkbS0+ZmlyX3N0ZXBfbGV2ZWwgJiYKKwkgICAgZW50cnlfb2ZkbS0+ZmlyX3N0ZXBfbGV2ZWwgPj0gZW50cnlfY2NrLT5maXJfc3RlcF9sZXZlbCkKKwkJYXRoOWtfaHdfYW5pX2NvbnRyb2woYWgsCisJCQkJICAgICBBVEg5S19BTklfRklSU1RFUF9MRVZFTCwKKwkJCQkgICAgIGVudHJ5X29mZG0tPmZpcl9zdGVwX2xldmVsKTsKKworCWlmICgoYWgtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCisJICAgICBhaC0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSB8fAorCSAgICBhbmlTdGF0ZS0+bm9pc2VGbG9vciA8PSBhbmlTdGF0ZS0+cnNzaVRockhpZ2gpIHsKKwkJaWYgKGFuaVN0YXRlLT5vZmRtV2Vha1NpZ0RldGVjdE9mZikKKwkJCS8qIGZvcmNlIG9uIG9mZG0gd2VhayBzaWcgZGV0ZWN0ICovCisJCQlhdGg5a19od19hbmlfY29udHJvbChhaCwKKwkJCQlBVEg5S19BTklfT0ZETV9XRUFLX1NJR05BTF9ERVRFQ1RJT04sCisJCQkJCSAgICAgdHJ1ZSk7CisJCWVsc2UgaWYgKGFuaVN0YXRlLT5vZmRtV2Vha1NpZ0RldGVjdE9mZiA9PQorCQkJIGVudHJ5X29mZG0tPm9mZG1fd2Vha19zaWduYWxfb24pCisJCQlhdGg5a19od19hbmlfY29udHJvbChhaCwKKwkJCQlBVEg5S19BTklfT0ZETV9XRUFLX1NJR05BTF9ERVRFQ1RJT04sCisJCQkJZW50cnlfb2ZkbS0+b2ZkbV93ZWFrX3NpZ25hbF9vbik7CisJfQorfQorCitzdGF0aWMgdm9pZCBhdGg5a19od19hbmlfb2ZkbV9lcnJfdHJpZ2dlcl9uZXcoc3RydWN0IGF0aF9odyAqYWgpCit7CisJc3RydWN0IGFyNTQxNkFuaVN0YXRlICphbmlTdGF0ZTsKKworCWlmICghRE9fQU5JKGFoKSkKKwkJcmV0dXJuOworCisJYW5pU3RhdGUgPSBhaC0+Y3VyYW5pOworCisJaWYgKGFuaVN0YXRlLT5vZmRtTm9pc2VJbW11bml0eUxldmVsIDwgQVRIOUtfQU5JX09GRE1fTUFYX0xFVkVMKQorCQlhdGg5a19od19zZXRfb2ZkbV9uaWwoYWgsIGFuaVN0YXRlLT5vZmRtTm9pc2VJbW11bml0eUxldmVsICsgMSk7Cit9CisKKy8qCisgKiBTZXQgdGhlIEFOSSBzZXR0aW5ncyB0byBtYXRjaCBhbiBDQ0sgbGV2ZWwuCisgKi8KK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF9jY2tfbmlsKHN0cnVjdCBhdGhfaHcgKmFoLCB1X2ludDhfdCBpbW11bml0eUxldmVsKQoreworCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYW5pU3RhdGUgPSBhaC0+Y3VyYW5pOworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOworCWNvbnN0IHN0cnVjdCBhbmlfb2ZkbV9sZXZlbF9lbnRyeSAqZW50cnlfb2ZkbTsKKwljb25zdCBzdHJ1Y3QgYW5pX2Nja19sZXZlbF9lbnRyeSAqZW50cnlfY2NrOworCisJYW5pU3RhdGUtPm5vaXNlRmxvb3IgPSBCRUFDT05fUlNTSShhaCk7CisJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCisJCSAgIioqKiogY2NrbGV2ZWwgJWQ9PiVkLCByc3NpPSVkW2xvPSVkIGhpPSVkXVxuIiwKKwkJICBhbmlTdGF0ZS0+Y2NrTm9pc2VJbW11bml0eUxldmVsLCBpbW11bml0eUxldmVsLAorCQkgIGFuaVN0YXRlLT5ub2lzZUZsb29yLCBhbmlTdGF0ZS0+cnNzaVRockxvdywKKwkJICBhbmlTdGF0ZS0+cnNzaVRockhpZ2gpOworCisJaWYgKChhaC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKKwkgICAgIGFoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpICYmCisJICAgIGFuaVN0YXRlLT5ub2lzZUZsb29yIDw9IGFuaVN0YXRlLT5yc3NpVGhyTG93ICYmCisJICAgIGltbXVuaXR5TGV2ZWwgPiBBVEg5S19BTklfQ0NLX01BWF9MRVZFTF9MT1dfUlNTSSkKKwkJaW1tdW5pdHlMZXZlbCA9IEFUSDlLX0FOSV9DQ0tfTUFYX0xFVkVMX0xPV19SU1NJOworCisJYW5pU3RhdGUtPmNja05vaXNlSW1tdW5pdHlMZXZlbCA9IGltbXVuaXR5TGV2ZWw7CisKKwllbnRyeV9vZmRtID0gJm9mZG1fbGV2ZWxfdGFibGVbYW5pU3RhdGUtPm9mZG1Ob2lzZUltbXVuaXR5TGV2ZWxdOworCWVudHJ5X2NjayA9ICZjY2tfbGV2ZWxfdGFibGVbYW5pU3RhdGUtPmNja05vaXNlSW1tdW5pdHlMZXZlbF07CisKKwlpZiAoYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCAhPSBlbnRyeV9jY2stPmZpcl9zdGVwX2xldmVsICYmCisJICAgIGVudHJ5X2Njay0+ZmlyX3N0ZXBfbGV2ZWwgPj0gZW50cnlfb2ZkbS0+ZmlyX3N0ZXBfbGV2ZWwpCisJCWF0aDlrX2h3X2FuaV9jb250cm9sKGFoLAorCQkJCSAgICAgQVRIOUtfQU5JX0ZJUlNURVBfTEVWRUwsCisJCQkJICAgICBlbnRyeV9jY2stPmZpcl9zdGVwX2xldmVsKTsKKworCS8qIFNraXAgTVJDIENDSyBmb3IgcHJlIEFSOTAwMyBmYW1pbGllcyAqLworCWlmICghQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSkKKwkJcmV0dXJuOworCisJaWYgKGFuaVN0YXRlLT5tcmNDQ0tPZmYgPT0gZW50cnlfY2NrLT5tcmNfY2NrX29uKQorCQlhdGg5a19od19hbmlfY29udHJvbChhaCwKKwkJCQkgICAgIEFUSDlLX0FOSV9NUkNfQ0NLLAorCQkJCSAgICAgZW50cnlfY2NrLT5tcmNfY2NrX29uKTsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHdfYW5pX2Nja19lcnJfdHJpZ2dlcl9uZXcoc3RydWN0IGF0aF9odyAqYWgpCit7CisJc3RydWN0IGFyNTQxNkFuaVN0YXRlICphbmlTdGF0ZTsKKworCWlmICghRE9fQU5JKGFoKSkKKwkJcmV0dXJuOworCisJYW5pU3RhdGUgPSBhaC0+Y3VyYW5pOworCisJaWYgKGFuaVN0YXRlLT5jY2tOb2lzZUltbXVuaXR5TGV2ZWwgPCBBVEg5S19BTklfQ0NLX01BWF9MRVZFTCkKKwkJYXRoOWtfaHdfc2V0X2Nja19uaWwoYWgsIGFuaVN0YXRlLT5jY2tOb2lzZUltbXVuaXR5TGV2ZWwgKyAxKTsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHdfYW5pX2xvd2VyX2ltbXVuaXR5X29sZChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlOwogCWludDMyX3QgcnNzaTsKQEAgLTI1OSw5ICs1MDMsNTMgQEAKIAl9CiB9CiAKKy8qCisgKiBvbmx5IGxvd2VyIGVpdGhlciBPRkRNIG9yIENDSyBlcnJvcnMgcGVyIHR1cm4KKyAqIHdlIGxvd2VyIHRoZSBvdGhlciBvbmUgbmV4dCB0aW1lCisgKi8KK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2FuaV9sb3dlcl9pbW11bml0eV9uZXcoc3RydWN0IGF0aF9odyAqYWgpCit7CisJc3RydWN0IGFyNTQxNkFuaVN0YXRlICphbmlTdGF0ZTsKKworCWFuaVN0YXRlID0gYWgtPmN1cmFuaTsKKworCS8qIGxvd2VyIE9GRE0gbm9pc2UgaW1tdW5pdHkgKi8KKwlpZiAoYW5pU3RhdGUtPm9mZG1Ob2lzZUltbXVuaXR5TGV2ZWwgPiAwICYmCisJICAgIChhbmlTdGF0ZS0+b2ZkbXNUdXJuIHx8IGFuaVN0YXRlLT5jY2tOb2lzZUltbXVuaXR5TGV2ZWwgPT0gMCkpIHsKKwkJYXRoOWtfaHdfc2V0X29mZG1fbmlsKGFoLCBhbmlTdGF0ZS0+b2ZkbU5vaXNlSW1tdW5pdHlMZXZlbCAtIDEpOworCQlyZXR1cm47CisJfQorCisJLyogbG93ZXIgQ0NLIG5vaXNlIGltbXVuaXR5ICovCisJaWYgKGFuaVN0YXRlLT5jY2tOb2lzZUltbXVuaXR5TGV2ZWwgPiAwKQorCQlhdGg5a19od19zZXRfY2NrX25pbChhaCwgYW5pU3RhdGUtPmNja05vaXNlSW1tdW5pdHlMZXZlbCAtIDEpOworfQorCitzdGF0aWMgdTggYXRoOWtfaHdfY2hhbl8yX2Nsb2NrcmF0ZV9taHooc3RydWN0IGF0aF9odyAqYWgpCit7CisJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4gPSBhaC0+Y3VyY2hhbjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmYXRoOWtfaHdfY29tbW9uKGFoKS0+aHctPmNvbmY7CisJdTggY2xvY2tyYXRlOyAvKiBpbiBNSHogKi8KKworCWlmICghYWgtPmN1cmNoYW4pIC8qIHNob3VsZCByZWFsbHkgY2hlY2sgZm9yIENDSyBpbnN0ZWFkICovCisJCWNsb2NrcmF0ZSA9IEFUSDlLX0NMT0NLX1JBVEVfQ0NLOworCWVsc2UgaWYgKGNvbmYtPmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKKwkJY2xvY2tyYXRlID0gQVRIOUtfQ0xPQ0tfUkFURV8yR0haX09GRE07CisJZWxzZSBpZiAoSVNfQ0hBTl9BX0ZBU1RfQ0xPQ0soYWgsIGNoYW4pKQorCQljbG9ja3JhdGUgPSBBVEg5S19DTE9DS19GQVNUX1JBVEVfNUdIWl9PRkRNOworCWVsc2UKKwkJY2xvY2tyYXRlID0gQVRIOUtfQ0xPQ0tfUkFURV81R0haX09GRE07CisKKwlpZiAoY29uZl9pc19odDQwKGNvbmYpKQorCQlyZXR1cm4gY2xvY2tyYXRlICogMjsKKworCXJldHVybiBjbG9ja3JhdGUgKiAyOworfQorCiBzdGF0aWMgaW50MzJfdCBhdGg5a19od19hbmlfZ2V0X2xpc3Rlbl90aW1lKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYW5pU3RhdGU7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CiAJdTMyIHR4RnJhbWVDb3VudCwgcnhGcmFtZUNvdW50LCBjeWNsZUNvdW50OwogCWludDMyX3QgbGlzdGVuVGltZTsKIApAQCAtMjcxLDE1ICs1NTksMzEgQEAKIAogCWFuaVN0YXRlID0gYWgtPmN1cmFuaTsKIAlpZiAoYW5pU3RhdGUtPmN5Y2xlQ291bnQgPT0gMCB8fCBhbmlTdGF0ZS0+Y3ljbGVDb3VudCA+IGN5Y2xlQ291bnQpIHsKLQogCQlsaXN0ZW5UaW1lID0gMDsKIAkJYWgtPnN0YXRzLmFzdF9hbmlfbHplcm8rKzsKKwkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCisJCQkgICIxc3QgY2FsbDogYW5pU3RhdGUtPmN5Y2xlQ291bnQ9JWRcbiIsCisJCQkgIGFuaVN0YXRlLT5jeWNsZUNvdW50KTsKIAl9IGVsc2UgewogCQlpbnQzMl90IGNjZGVsdGEgPSBjeWNsZUNvdW50IC0gYW5pU3RhdGUtPmN5Y2xlQ291bnQ7CiAJCWludDMyX3QgcmZkZWx0YSA9IHJ4RnJhbWVDb3VudCAtIGFuaVN0YXRlLT5yeEZyYW1lQ291bnQ7CiAJCWludDMyX3QgdGZkZWx0YSA9IHR4RnJhbWVDb3VudCAtIGFuaVN0YXRlLT50eEZyYW1lQ291bnQ7Ci0JCWxpc3RlblRpbWUgPSAoY2NkZWx0YSAtIHJmZGVsdGEgLSB0ZmRlbHRhKSAvIDQ0MDAwOworCQlpbnQzMl90IGNsb2NrX3JhdGU7CisKKwkJLyoKKwkJICogY29udmVydCBIVyBjb3VudGVyIHZhbHVlcyB0byBtcyB1c2luZyBtb2RlCisJCSAqIHNwZWNpZml4IGNsb2NrIHJhdGUKKwkJICovCisJCWNsb2NrX3JhdGUgPSBhdGg5a19od19jaGFuXzJfY2xvY2tyYXRlX21oeihhaCkgKiAxMDAwOzsKKworCQlsaXN0ZW5UaW1lID0gKGNjZGVsdGEgLSByZmRlbHRhIC0gdGZkZWx0YSkgLyBjbG9ja19yYXRlOworCisJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAorCQkJICAiY3ljbGVjb3VudD0lZCwgcmZjb3VudD0lZCwgIgorCQkJICAidGZjb3VudD0lZCwgbGlzdGVuVGltZT0lZCBDTE9DS19SQVRFPSVkXG4iLAorCQkJICBjY2RlbHRhLCByZmRlbHRhLCB0ZmRlbHRhLCBsaXN0ZW5UaW1lLCBjbG9ja19yYXRlKTsKIAl9CisKIAlhbmlTdGF0ZS0+Y3ljbGVDb3VudCA9IGN5Y2xlQ291bnQ7CiAJYW5pU3RhdGUtPnR4RnJhbWVDb3VudCA9IHR4RnJhbWVDb3VudDsKIAlhbmlTdGF0ZS0+cnhGcmFtZUNvdW50ID0gcnhGcmFtZUNvdW50OwpAQCAtMjg3LDcgKzU5MSw3IEBACiAJcmV0dXJuIGxpc3RlblRpbWU7CiB9CiAKLXZvaWQgYXRoOWtfYW5pX3Jlc2V0KHN0cnVjdCBhdGhfaHcgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfYW5pX3Jlc2V0X29sZChzdHJ1Y3QgYXRoX2h3ICphaCwgYm9vbCBpc19zY2FubmluZykKIHsKIAlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlOwogCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuID0gYWgtPmN1cmNoYW47CkBAIC0zNDAsNyArNjQ0LDcgQEAKIAkJCWFoLT5jdXJhbmktPmNja1RyaWdMb3cgPQogCQkJCWFoLT5jb25maWcuY2NrX3RyaWdfbG93OwogCQl9Ci0JCWF0aDlrX2FuaV9yZXN0YXJ0KGFoKTsKKwkJYXRoOWtfYW5pX3Jlc3RhcnRfb2xkKGFoKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzYyLDcgKzY2Niw3IEBACiAKIAlhdGg5a19od19zZXRyeGZpbHRlcihhaCwgYXRoOWtfaHdfZ2V0cnhmaWx0ZXIoYWgpICYKIAkJCSAgICAgfkFUSDlLX1JYX0ZJTFRFUl9QSFlFUlIpOwotCWF0aDlrX2FuaV9yZXN0YXJ0KGFoKTsKKwlhdGg5a19hbmlfcmVzdGFydF9vbGQoYWgpOwogCiAJRU5BQkxFX1JFR1dSSVRFX0JVRkZFUihhaCk7CiAKQEAgLTM3Myw4ICs2NzcsMTAyIEBACiAJRElTQUJMRV9SRUdXUklURV9CVUZGRVIoYWgpOwogfQogCi12b2lkIGF0aDlrX2h3X2FuaV9tb25pdG9yKHN0cnVjdCBhdGhfaHcgKmFoLAotCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKKy8qCisgKiBSZXN0b3JlIHRoZSBBTkkgcGFyYW1ldGVycyBpbiB0aGUgSEFMIGFuZCByZXNldCB0aGUgc3RhdGlzdGljcy4KKyAqIFRoaXMgcm91dGluZSBzaG91bGQgYmUgY2FsbGVkIGZvciBldmVyeSBoYXJkd2FyZSByZXNldCBhbmQgZm9yCisgKiBldmVyeSBjaGFubmVsIGNoYW5nZS4KKyAqLworc3RhdGljIHZvaWQgYXRoOWtfYW5pX3Jlc2V0X25ldyhzdHJ1Y3QgYXRoX2h3ICphaCwgYm9vbCBpc19zY2FubmluZykKK3sKKwlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlID0gYWgtPmN1cmFuaTsKKwlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiA9IGFoLT5jdXJjaGFuOworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOworCisJaWYgKCFET19BTkkoYWgpKQorCQlyZXR1cm47CisKKwlCVUdfT04oYW5pU3RhdGUgPT0gTlVMTCk7CisJYWgtPnN0YXRzLmFzdF9hbmlfcmVzZXQrKzsKKworCS8qIG9ubHkgYWxsb3cgYSBzdWJzZXQgb2YgZnVuY3Rpb25zIGluIEFQIG1vZGUgKi8KKwlpZiAoYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgeworCQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7CisJCQlhaC0+YW5pX2Z1bmN0aW9uID0gKEFUSDlLX0FOSV9TUFVSX0lNTVVOSVRZX0xFVkVMIHwKKwkJCQkJICAgIEFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMKTsKKwkJCWlmIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKQorCQkJCWFoLT5hbmlfZnVuY3Rpb24gfD0gQVRIOUtfQU5JX01SQ19DQ0s7CisJCX0gZWxzZQorCQkJYWgtPmFuaV9mdW5jdGlvbiA9IDA7CisJfQorCisJLyogYWx3YXlzIGFsbG93IG1vZGUgKG9uL29mZikgdG8gYmUgY29udHJvbGxlZCAqLworCWFoLT5hbmlfZnVuY3Rpb24gfD0gQVRIOUtfQU5JX01PREU7CisKKwlpZiAoaXNfc2Nhbm5pbmcgfHwKKwkgICAgKGFoLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgorCSAgICAgYWgtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykpIHsKKwkJLyoKKwkJICogSWYgd2UncmUgc2Nhbm5pbmcgb3IgaW4gQVAgbW9kZSwgdGhlIGRlZmF1bHRzIChpbmkpCisJCSAqIHNob3VsZCBiZSBpbiBwbGFjZS4gRm9yIGFuIEFQIHdlIGFzc3VtZSB0aGUgaGlzdG9yaWNhbAorCQkgKiBsZXZlbHMgZm9yIHRoaXMgY2hhbm5lbCBhcmUgcHJvYmFibHkgb3V0ZGF0ZWQgc28gc3RhcnQKKwkJICogZnJvbSBkZWZhdWx0cyBpbnN0ZWFkLgorCQkgKi8KKwkJaWYgKGFuaVN0YXRlLT5vZmRtTm9pc2VJbW11bml0eUxldmVsICE9CisJCSAgICBBVEg5S19BTklfT0ZETV9ERUZfTEVWRUwgfHwKKwkJICAgIGFuaVN0YXRlLT5jY2tOb2lzZUltbXVuaXR5TGV2ZWwgIT0KKwkJICAgIEFUSDlLX0FOSV9DQ0tfREVGX0xFVkVMKSB7CisJCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwKKwkJCQkgICJSZXN0b3JlIGRlZmF1bHRzOiBvcG1vZGUgJXUgIgorCQkJCSAgImNoYW4gJWQgTWh6LzB4JXggaXNfc2Nhbm5pbmc9JWQgIgorCQkJCSAgIm9mZG06JWQgY2NrOiVkXG4iLAorCQkJCSAgYWgtPm9wbW9kZSwKKwkJCQkgIGNoYW4tPmNoYW5uZWwsCisJCQkJICBjaGFuLT5jaGFubmVsRmxhZ3MsCisJCQkJICBpc19zY2FubmluZywKKwkJCQkgIGFuaVN0YXRlLT5vZmRtTm9pc2VJbW11bml0eUxldmVsLAorCQkJCSAgYW5pU3RhdGUtPmNja05vaXNlSW1tdW5pdHlMZXZlbCk7CisKKwkJCWF0aDlrX2h3X3NldF9vZmRtX25pbChhaCwgQVRIOUtfQU5JX09GRE1fREVGX0xFVkVMKTsKKwkJCWF0aDlrX2h3X3NldF9jY2tfbmlsKGFoLCBBVEg5S19BTklfQ0NLX0RFRl9MRVZFTCk7CisJCX0KKwl9IGVsc2UgeworCQkvKgorCQkgKiByZXN0b3JlIGhpc3RvcmljYWwgbGV2ZWxzIGZvciB0aGlzIGNoYW5uZWwKKwkJICovCisJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAorCQkJICAiUmVzdG9yZSBoaXN0b3J5OiBvcG1vZGUgJXUgIgorCQkJICAiY2hhbiAlZCBNaHovMHgleCBpc19zY2FubmluZz0lZCAiCisJCQkgICJvZmRtOiVkIGNjazolZFxuIiwKKwkJCSAgYWgtPm9wbW9kZSwKKwkJCSAgY2hhbi0+Y2hhbm5lbCwKKwkJCSAgY2hhbi0+Y2hhbm5lbEZsYWdzLAorCQkJICBpc19zY2FubmluZywKKwkJCSAgYW5pU3RhdGUtPm9mZG1Ob2lzZUltbXVuaXR5TGV2ZWwsCisJCQkgIGFuaVN0YXRlLT5jY2tOb2lzZUltbXVuaXR5TGV2ZWwpOworCisJCQlhdGg5a19od19zZXRfb2ZkbV9uaWwoYWgsCisJCQkJCSAgICAgIGFuaVN0YXRlLT5vZmRtTm9pc2VJbW11bml0eUxldmVsKTsKKwkJCWF0aDlrX2h3X3NldF9jY2tfbmlsKGFoLAorCQkJCQkgICAgIGFuaVN0YXRlLT5jY2tOb2lzZUltbXVuaXR5TGV2ZWwpOworCX0KKworCS8qCisJICogZW5hYmxlIHBoeSBjb3VudGVycyBpZiBodyBzdXBwb3J0cyBvciBpZiBub3QsIGVuYWJsZSBwaHkKKwkgKiBpbnRlcnJ1cHRzIChzbyB3ZSBjYW4gY291bnQgZWFjaCBvbmUpCisJICovCisJYXRoOWtfYW5pX3Jlc3RhcnRfbmV3KGFoKTsKKworCUVOQUJMRV9SRUdXUklURV9CVUZGRVIoYWgpOworCisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSX01BU0tfMSwgQVJfUEhZX0VSUl9PRkRNX1RJTUlORyk7CisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSX01BU0tfMiwgQVJfUEhZX0VSUl9DQ0tfVElNSU5HKTsKKworCVJFR1dSSVRFX0JVRkZFUl9GTFVTSChhaCk7CisJRElTQUJMRV9SRUdXUklURV9CVUZGRVIoYWgpOworfQorCitzdGF0aWMgdm9pZCBhdGg5a19od19hbmlfbW9uaXRvcl9vbGQoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwpAQCAtMzkwLDcgKzc4OCw3IEBACiAJbGlzdGVuVGltZSA9IGF0aDlrX2h3X2FuaV9nZXRfbGlzdGVuX3RpbWUoYWgpOwogCWlmIChsaXN0ZW5UaW1lIDwgMCkgewogCQlhaC0+c3RhdHMuYXN0X2FuaV9sbmVnKys7Ci0JCWF0aDlrX2FuaV9yZXN0YXJ0KGFoKTsKKwkJYXRoOWtfYW5pX3Jlc3RhcnRfb2xkKGFoKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDQ0LDIxICs4NDIsMTY2IEBACiAJCSAgICBhbmlTdGF0ZS0+Y2NrUGh5RXJyQ291bnQgPD0gYW5pU3RhdGUtPmxpc3RlblRpbWUgKgogCQkgICAgYW5pU3RhdGUtPmNja1RyaWdMb3cgLyAxMDAwKQogCQkJYXRoOWtfaHdfYW5pX2xvd2VyX2ltbXVuaXR5KGFoKTsKLQkJYXRoOWtfYW5pX3Jlc3RhcnQoYWgpOworCQlhdGg5a19hbmlfcmVzdGFydF9vbGQoYWgpOwogCX0gZWxzZSBpZiAoYW5pU3RhdGUtPmxpc3RlblRpbWUgPiBhaC0+YW5pcGVyaW9kKSB7CiAJCWlmIChhbmlTdGF0ZS0+b2ZkbVBoeUVyckNvdW50ID4gYW5pU3RhdGUtPmxpc3RlblRpbWUgKgogCQkgICAgYW5pU3RhdGUtPm9mZG1UcmlnSGlnaCAvIDEwMDApIHsKLQkJCWF0aDlrX2h3X2FuaV9vZmRtX2Vycl90cmlnZ2VyKGFoKTsKLQkJCWF0aDlrX2FuaV9yZXN0YXJ0KGFoKTsKKwkJCWF0aDlrX2h3X2FuaV9vZmRtX2Vycl90cmlnZ2VyX29sZChhaCk7CisJCQlhdGg5a19hbmlfcmVzdGFydF9vbGQoYWgpOwogCQl9IGVsc2UgaWYgKGFuaVN0YXRlLT5jY2tQaHlFcnJDb3VudCA+CiAJCQkgICBhbmlTdGF0ZS0+bGlzdGVuVGltZSAqIGFuaVN0YXRlLT5jY2tUcmlnSGlnaCAvCiAJCQkgICAxMDAwKSB7Ci0JCQlhdGg5a19od19hbmlfY2NrX2Vycl90cmlnZ2VyKGFoKTsKLQkJCWF0aDlrX2FuaV9yZXN0YXJ0KGFoKTsKKwkJCWF0aDlrX2h3X2FuaV9jY2tfZXJyX3RyaWdnZXJfb2xkKGFoKTsKKwkJCWF0aDlrX2FuaV9yZXN0YXJ0X29sZChhaCk7CiAJCX0KIAl9CiB9Ci1FWFBPUlRfU1lNQk9MKGF0aDlrX2h3X2FuaV9tb25pdG9yKTsKKworc3RhdGljIHZvaWQgYXRoOWtfaHdfYW5pX21vbml0b3JfbmV3KHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCit7CisJc3RydWN0IGFyNTQxNkFuaVN0YXRlICphbmlTdGF0ZTsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKKwlpbnQzMl90IGxpc3RlblRpbWU7CisJdTMyIHBoeUNudDEsIHBoeUNudDI7CisJdTMyIG9mZG1QaHlFcnJDbnQsIGNja1BoeUVyckNudDsKKwl1MzIgb2ZkbVBoeUVyclJhdGUsIGNja1BoeUVyclJhdGU7CisKKwlpZiAoIURPX0FOSShhaCkpCisJCXJldHVybjsKKworCWFuaVN0YXRlID0gYWgtPmN1cmFuaTsKKwlpZiAoV0FSTl9PTighYW5pU3RhdGUpKQorCQlyZXR1cm47CisKKwlsaXN0ZW5UaW1lID0gYXRoOWtfaHdfYW5pX2dldF9saXN0ZW5fdGltZShhaCk7CisJaWYgKGxpc3RlblRpbWUgPD0gMCkgeworCQlhaC0+c3RhdHMuYXN0X2FuaV9sbmVnKys7CisJCS8qIHJlc3RhcnQgQU5JIHBlcmlvZCBpZiBsaXN0ZW5UaW1lIGlzIGludmFsaWQgKi8KKwkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCisJCQkgICJsaXN0ZW5UaW1lPSVkIC0gb24gbmV3IGFuaSBtb25pdG9yXG4iLAorCQkJICBsaXN0ZW5UaW1lKTsKKwkJYXRoOWtfYW5pX3Jlc3RhcnRfbmV3KGFoKTsKKwkJcmV0dXJuOworCX0KKworCWFuaVN0YXRlLT5saXN0ZW5UaW1lICs9IGxpc3RlblRpbWU7CisKKwlhdGg5a19od191cGRhdGVfbWlic3RhdHMoYWgsICZhaC0+YWhfbWliU3RhdHMpOworCisJcGh5Q250MSA9IFJFR19SRUFEKGFoLCBBUl9QSFlfRVJSXzEpOworCXBoeUNudDIgPSBSRUdfUkVBRChhaCwgQVJfUEhZX0VSUl8yKTsKKworCWlmIChwaHlDbnQxIDwgYW5pU3RhdGUtPm9mZG1QaHlFcnJCYXNlIHx8CisJICAgIHBoeUNudDIgPCBhbmlTdGF0ZS0+Y2NrUGh5RXJyQmFzZSkgeworCQlpZiAocGh5Q250MSA8IGFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZSkgeworCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCisJCQkJICAicGh5Q250MSAweCV4LCByZXNldHRpbmcgIgorCQkJCSAgImNvdW50ZXIgdmFsdWUgdG8gMHgleFxuIiwKKwkJCQkgIHBoeUNudDEsCisJCQkJICBhbmlTdGF0ZS0+b2ZkbVBoeUVyckJhc2UpOworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzEsCisJCQkJICBhbmlTdGF0ZS0+b2ZkbVBoeUVyckJhc2UpOworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSX01BU0tfMSwKKwkJCQkgIEFSX1BIWV9FUlJfT0ZETV9USU1JTkcpOworCQl9CisJCWlmIChwaHlDbnQyIDwgYW5pU3RhdGUtPmNja1BoeUVyckJhc2UpIHsKKwkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAorCQkJCSAgInBoeUNudDIgMHgleCwgcmVzZXR0aW5nICIKKwkJCQkgICJjb3VudGVyIHZhbHVlIHRvIDB4JXhcbiIsCisJCQkJICBwaHlDbnQyLAorCQkJCSAgYW5pU3RhdGUtPmNja1BoeUVyckJhc2UpOworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzIsCisJCQkJICBhbmlTdGF0ZS0+Y2NrUGh5RXJyQmFzZSk7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfTUFTS18yLAorCQkJCSAgQVJfUEhZX0VSUl9DQ0tfVElNSU5HKTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJb2ZkbVBoeUVyckNudCA9IHBoeUNudDEgLSBhbmlTdGF0ZS0+b2ZkbVBoeUVyckJhc2U7CisJYWgtPnN0YXRzLmFzdF9hbmlfb2ZkbWVycnMgKz0KKwkJb2ZkbVBoeUVyckNudCAtIGFuaVN0YXRlLT5vZmRtUGh5RXJyQ291bnQ7CisJYW5pU3RhdGUtPm9mZG1QaHlFcnJDb3VudCA9IG9mZG1QaHlFcnJDbnQ7CisKKwljY2tQaHlFcnJDbnQgPSBwaHlDbnQyIC0gYW5pU3RhdGUtPmNja1BoeUVyckJhc2U7CisJYWgtPnN0YXRzLmFzdF9hbmlfY2NrZXJycyArPQorCQljY2tQaHlFcnJDbnQgLSBhbmlTdGF0ZS0+Y2NrUGh5RXJyQ291bnQ7CisJYW5pU3RhdGUtPmNja1BoeUVyckNvdW50ID0gY2NrUGh5RXJyQ250OworCisJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCisJCSAgIkVycm9yczogT0ZETT0weCUwOHgtMHglMDh4PSVkICAgIgorCQkgICJDQ0s9MHglMDh4LTB4JTA4eD0lZFxuIiwKKwkJICBwaHlDbnQxLAorCQkgIGFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZSwKKwkJICBvZmRtUGh5RXJyQ250LAorCQkgIHBoeUNudDIsCisJCSAgYW5pU3RhdGUtPmNja1BoeUVyckJhc2UsCisJCSAgY2NrUGh5RXJyQ250KTsKKworCW9mZG1QaHlFcnJSYXRlID0gYW5pU3RhdGUtPm9mZG1QaHlFcnJDb3VudCAqIDEwMDAgLworCQkJIGFuaVN0YXRlLT5saXN0ZW5UaW1lOworCWNja1BoeUVyclJhdGUgPSAgYW5pU3RhdGUtPmNja1BoeUVyckNvdW50ICogMTAwMCAvCisJCQkgYW5pU3RhdGUtPmxpc3RlblRpbWU7CisKKwlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwKKwkJICAibGlzdGVuVGltZT0lZCBPRkRNOiVkIGVycnM9JWQvcyBDQ0s6JWQgIgorCQkgICJlcnJzPSVkL3Mgb2ZkbV90dXJuPSVkXG4iLAorCQkgIGxpc3RlblRpbWUsIGFuaVN0YXRlLT5vZmRtTm9pc2VJbW11bml0eUxldmVsLAorCQkgIG9mZG1QaHlFcnJSYXRlLCBhbmlTdGF0ZS0+Y2NrTm9pc2VJbW11bml0eUxldmVsLAorCQkgIGNja1BoeUVyclJhdGUsIGFuaVN0YXRlLT5vZmRtc1R1cm4pOworCisJaWYgKGFuaVN0YXRlLT5saXN0ZW5UaW1lID4gNSAqIGFoLT5hbmlwZXJpb2QpIHsKKwkJaWYgKG9mZG1QaHlFcnJSYXRlIDw9IGFuaVN0YXRlLT5vZmRtVHJpZ0xvdyAmJgorCQkgICAgY2NrUGh5RXJyUmF0ZSA8PSBhbmlTdGF0ZS0+Y2NrVHJpZ0xvdykgeworCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCisJCQkJICAiMS4gbGlzdGVuVGltZT0lZCBPRkRNOiVkIGVycnM9JWQvcyg8JWQpICAiCisJCQkJICAiQ0NLOiVkIGVycnM9JWQvcyg8JWQpIC0+ICIKKwkJCQkgICJhdGg5a19od19hbmlfbG93ZXJfaW1tdW5pdHkoKVxuIiwKKwkJCQkgIGFuaVN0YXRlLT5saXN0ZW5UaW1lLAorCQkJCSAgYW5pU3RhdGUtPm9mZG1Ob2lzZUltbXVuaXR5TGV2ZWwsCisJCQkJICBvZmRtUGh5RXJyUmF0ZSwKKwkJCQkgIGFuaVN0YXRlLT5vZmRtVHJpZ0xvdywKKwkJCQkgIGFuaVN0YXRlLT5jY2tOb2lzZUltbXVuaXR5TGV2ZWwsCisJCQkJICBjY2tQaHlFcnJSYXRlLAorCQkJCSAgYW5pU3RhdGUtPmNja1RyaWdMb3cpOworCQkJYXRoOWtfaHdfYW5pX2xvd2VyX2ltbXVuaXR5KGFoKTsKKwkJCWFuaVN0YXRlLT5vZmRtc1R1cm4gPSAhYW5pU3RhdGUtPm9mZG1zVHVybjsKKwkJfQorCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwKKwkJCSAgIjEgbGlzdGVuVGltZT0lZCBvZmRtPSVkL3MgY2NrPSVkL3MgLSAiCisJCQkgICJjYWxsaW5nIGF0aDlrX2FuaV9yZXN0YXJ0X25ldygpXG4iLAorCQkJICBhbmlTdGF0ZS0+bGlzdGVuVGltZSwgb2ZkbVBoeUVyclJhdGUsIGNja1BoeUVyclJhdGUpOworCQlhdGg5a19hbmlfcmVzdGFydF9uZXcoYWgpOworCX0gZWxzZSBpZiAoYW5pU3RhdGUtPmxpc3RlblRpbWUgPiBhaC0+YW5pcGVyaW9kKSB7CisJCS8qIGNoZWNrIHRvIHNlZSBpZiBuZWVkIHRvIHJhaXNlIGltbXVuaXR5ICovCisJCWlmIChvZmRtUGh5RXJyUmF0ZSA+IGFuaVN0YXRlLT5vZmRtVHJpZ0hpZ2ggJiYKKwkJICAgIChjY2tQaHlFcnJSYXRlIDw9IGFuaVN0YXRlLT5jY2tUcmlnSGlnaCB8fAorCQkgICAgIGFuaVN0YXRlLT5vZmRtc1R1cm4pKSB7CisJCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwKKwkJCQkgICIyIGxpc3RlblRpbWU9JWQgT0ZETTolZCBlcnJzPSVkL3MoPiVkKSAtPiAiCisJCQkJICAiYXRoOWtfaHdfYW5pX29mZG1fZXJyX3RyaWdnZXJfbmV3KClcbiIsCisJCQkJICBhbmlTdGF0ZS0+bGlzdGVuVGltZSwKKwkJCQkgIGFuaVN0YXRlLT5vZmRtTm9pc2VJbW11bml0eUxldmVsLAorCQkJCSAgb2ZkbVBoeUVyclJhdGUsCisJCQkJICBhbmlTdGF0ZS0+b2ZkbVRyaWdIaWdoKTsKKwkJCWF0aDlrX2h3X2FuaV9vZmRtX2Vycl90cmlnZ2VyX25ldyhhaCk7CisJCQlhdGg5a19hbmlfcmVzdGFydF9uZXcoYWgpOworCQkJYW5pU3RhdGUtPm9mZG1zVHVybiA9IGZhbHNlOworCQl9IGVsc2UgaWYgKGNja1BoeUVyclJhdGUgPiBhbmlTdGF0ZS0+Y2NrVHJpZ0hpZ2gpIHsKKwkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAorCQkJCSAiMyBsaXN0ZW5UaW1lPSVkIENDSzolZCBlcnJzPSVkL3MoPiVkKSAtPiAiCisJCQkJICJhdGg5a19od19hbmlfY2NrX2Vycl90cmlnZ2VyX25ldygpXG4iLAorCQkJCSBhbmlTdGF0ZS0+bGlzdGVuVGltZSwKKwkJCQkgYW5pU3RhdGUtPmNja05vaXNlSW1tdW5pdHlMZXZlbCwKKwkJCQkgY2NrUGh5RXJyUmF0ZSwKKwkJCQkgYW5pU3RhdGUtPmNja1RyaWdIaWdoKTsKKwkJCWF0aDlrX2h3X2FuaV9jY2tfZXJyX3RyaWdnZXJfbmV3KGFoKTsKKwkJCWF0aDlrX2FuaV9yZXN0YXJ0X25ldyhhaCk7CisJCQlhbmlTdGF0ZS0+b2ZkbXNUdXJuID0gdHJ1ZTsKKwkJfQorCX0KK30KIAogdm9pZCBhdGg5a19lbmFibGVfbWliX2NvdW50ZXJzKHN0cnVjdCBhdGhfaHcgKmFoKQogewpAQCAtNDk1LDYgKzEwMzgsNyBAQAogCVJFR19XUklURShhaCwgQVJfRklMVF9PRkRNLCAwKTsKIAlSRUdfV1JJVEUoYWgsIEFSX0ZJTFRfQ0NLLCAwKTsKIH0KK0VYUE9SVF9TWU1CT0woYXRoOWtfaHdfZGlzYWJsZV9taWJfY291bnRlcnMpOwogCiB1MzIgYXRoOWtfaHdfR2V0TWliQ3ljbGVDb3VudHNQY3Qoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICB1MzIgKnJ4Y19wY250LApAQCAtNTQyLDcgKzEwODYsNyBAQAogICogYW55IG9mIHRoZSBNSUIgY291bnRlcnMgb3ZlcmZsb3cvdHJpZ2dlciBzbyBkb24ndCBhc3N1bWUgd2UncmUKICAqIGhlcmUgYmVjYXVzZSBhIFBIWSBlcnJvciBjb3VudGVyIHRyaWdnZXJlZC4KICAqLwotdm9pZCBhdGg5a19od19wcm9jbWliZXZlbnQoc3RydWN0IGF0aF9odyAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19wcm9jX21pYl9ldmVudF9vbGQoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJdTMyIHBoeUNudDEsIHBoeUNudDI7CiAKQEAgLTU1NSw4ICsxMDk5LDE1IEBACiAJLyogQ2xlYXIgdGhlIG1pYiBjb3VudGVycyBhbmQgc2F2ZSB0aGVtIGluIHRoZSBzdGF0cyAqLwogCWF0aDlrX2h3X3VwZGF0ZV9taWJzdGF0cyhhaCwgJmFoLT5haF9taWJTdGF0cyk7CiAKLQlpZiAoIURPX0FOSShhaCkpCisJaWYgKCFET19BTkkoYWgpKSB7CisJCS8qCisJCSAqIFdlIG11c3QgYWx3YXlzIGNsZWFyIHRoZSBpbnRlcnJ1cHQgY2F1c2UgYnkKKwkJICogcmVzZXR0aW5nIHRoZSBwaHkgZXJyb3IgcmVncy4KKwkJICovCisJCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8xLCAwKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzIsIDApOwogCQlyZXR1cm47CisJfQogCiAJLyogTkI6IHRoZXNlIGFyZSBub3QgcmVzZXQtb24tcmVhZCAqLwogCXBoeUNudDEgPSBSRUdfUkVBRChhaCwgQVJfUEhZX0VSUl8xKTsKQEAgLTU4NCwxNCArMTEzNSw1MSBAQAogCQkgKiBjaGVjayB3aWxsIG5ldmVyIGJlIHRydWUuCiAJCSAqLwogCQlpZiAoYW5pU3RhdGUtPm9mZG1QaHlFcnJDb3VudCA+IGFuaVN0YXRlLT5vZmRtVHJpZ0hpZ2gpCi0JCQlhdGg5a19od19hbmlfb2ZkbV9lcnJfdHJpZ2dlcihhaCk7CisJCQlhdGg5a19od19hbmlfb2ZkbV9lcnJfdHJpZ2dlcl9uZXcoYWgpOwogCQlpZiAoYW5pU3RhdGUtPmNja1BoeUVyckNvdW50ID4gYW5pU3RhdGUtPmNja1RyaWdIaWdoKQotCQkJYXRoOWtfaHdfYW5pX2Nja19lcnJfdHJpZ2dlcihhaCk7CisJCQlhdGg5a19od19hbmlfY2NrX2Vycl90cmlnZ2VyX29sZChhaCk7CiAJCS8qIE5COiBhbHdheXMgcmVzdGFydCB0byBpbnN1cmUgdGhlIGgvdyBjb3VudGVycyBhcmUgcmVzZXQgKi8KLQkJYXRoOWtfYW5pX3Jlc3RhcnQoYWgpOworCQlhdGg5a19hbmlfcmVzdGFydF9vbGQoYWgpOwogCX0KIH0KLUVYUE9SVF9TWU1CT0woYXRoOWtfaHdfcHJvY21pYmV2ZW50KTsKKworLyoKKyAqIFByb2Nlc3MgYSBNSUIgaW50ZXJydXB0LiAgV2UgbWF5IHBvdGVudGlhbGx5IGJlIGludm9rZWQgYmVjYXVzZQorICogYW55IG9mIHRoZSBNSUIgY291bnRlcnMgb3ZlcmZsb3cvdHJpZ2dlciBzbyBkb24ndCBhc3N1bWUgd2UncmUKKyAqIGhlcmUgYmVjYXVzZSBhIFBIWSBlcnJvciBjb3VudGVyIHRyaWdnZXJlZC4KKyAqLworc3RhdGljIHZvaWQgYXRoOWtfaHdfcHJvY19taWJfZXZlbnRfbmV3KHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXUzMiBwaHlDbnQxLCBwaHlDbnQyOworCisJLyogUmVzZXQgdGhlc2UgY291bnRlcnMgcmVnYXJkbGVzcyAqLworCVJFR19XUklURShhaCwgQVJfRklMVF9PRkRNLCAwKTsKKwlSRUdfV1JJVEUoYWgsIEFSX0ZJTFRfQ0NLLCAwKTsKKwlpZiAoIShSRUdfUkVBRChhaCwgQVJfU0xQX01JQl9DVFJMKSAmIEFSX1NMUF9NSUJfUEVORElORykpCisJCVJFR19XUklURShhaCwgQVJfU0xQX01JQl9DVFJMLCBBUl9TTFBfTUlCX0NMRUFSKTsKKworCS8qIENsZWFyIHRoZSBtaWIgY291bnRlcnMgYW5kIHNhdmUgdGhlbSBpbiB0aGUgc3RhdHMgKi8KKwlhdGg5a19od191cGRhdGVfbWlic3RhdHMoYWgsICZhaC0+YWhfbWliU3RhdHMpOworCisJaWYgKCFET19BTkkoYWgpKSB7CisJCS8qCisJCSAqIFdlIG11c3QgYWx3YXlzIGNsZWFyIHRoZSBpbnRlcnJ1cHQgY2F1c2UgYnkKKwkJICogcmVzZXR0aW5nIHRoZSBwaHkgZXJyb3IgcmVncy4KKwkJICovCisJCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8xLCAwKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzIsIDApOworCQlyZXR1cm47CisJfQorCisJLyogTkI6IHRoZXNlIGFyZSBub3QgcmVzZXQtb24tcmVhZCAqLworCXBoeUNudDEgPSBSRUdfUkVBRChhaCwgQVJfUEhZX0VSUl8xKTsKKwlwaHlDbnQyID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9FUlJfMik7CisKKwkvKiBOQjogYWx3YXlzIHJlc3RhcnQgdG8gaW5zdXJlIHRoZSBoL3cgY291bnRlcnMgYXJlIHJlc2V0ICovCisJaWYgKCgocGh5Q250MSAmIEFSX01JQkNOVF9JTlRSTUFTSykgPT0gQVJfTUlCQ05UX0lOVFJNQVNLKSB8fAorCSAgICAoKHBoeUNudDIgJiBBUl9NSUJDTlRfSU5UUk1BU0spID09IEFSX01JQkNOVF9JTlRSTUFTSykpCisJCWF0aDlrX2FuaV9yZXN0YXJ0X25ldyhhaCk7Cit9CiAKIHZvaWQgYXRoOWtfaHdfYW5pX3NldHVwKHN0cnVjdCBhdGhfaHcgKmFoKQogewpAQCAtNjE5LDIyICsxMjA3LDcwIEBACiAKIAltZW1zZXQoYWgtPmFuaSwgMCwgc2l6ZW9mKGFoLT5hbmkpKTsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhaC0+YW5pKTsgaSsrKSB7Ci0JCWFoLT5hbmlbaV0ub2ZkbVRyaWdIaWdoID0gQVRIOUtfQU5JX09GRE1fVFJJR19ISUdIOwotCQlhaC0+YW5pW2ldLm9mZG1UcmlnTG93ID0gQVRIOUtfQU5JX09GRE1fVFJJR19MT1c7Ci0JCWFoLT5hbmlbaV0uY2NrVHJpZ0hpZ2ggPSBBVEg5S19BTklfQ0NLX1RSSUdfSElHSDsKLQkJYWgtPmFuaVtpXS5jY2tUcmlnTG93ID0gQVRIOUtfQU5JX0NDS19UUklHX0xPVzsKKwkJaWYgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkgfHwgbW9kcGFyYW1fZm9yY2VfbmV3X2FuaSkgeworCQkJYWgtPmFuaVtpXS5vZmRtVHJpZ0hpZ2ggPSBBVEg5S19BTklfT0ZETV9UUklHX0hJR0hfTkVXOworCQkJYWgtPmFuaVtpXS5vZmRtVHJpZ0xvdyA9IEFUSDlLX0FOSV9PRkRNX1RSSUdfTE9XX05FVzsKKworCQkJYWgtPmFuaVtpXS5jY2tUcmlnSGlnaCA9IEFUSDlLX0FOSV9DQ0tfVFJJR19ISUdIX05FVzsKKwkJCWFoLT5hbmlbaV0uY2NrVHJpZ0xvdyA9IEFUSDlLX0FOSV9DQ0tfVFJJR19MT1dfTkVXOworCisJCQlhaC0+YW5pW2ldLnNwdXJJbW11bml0eUxldmVsID0KKwkJCQlBVEg5S19BTklfU1BVUl9JTU1VTkVfTFZMX05FVzsKKworCQkJYWgtPmFuaVtpXS5maXJzdGVwTGV2ZWwgPSBBVEg5S19BTklfRklSU1RFUF9MVkxfTkVXOworCisJCQlhaC0+YW5pW2ldLm9mZG1QaHlFcnJCYXNlID0gMDsKKwkJCWFoLT5hbmlbaV0uY2NrUGh5RXJyQmFzZSA9IDA7CisKKwkJCWlmIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKQorCQkJCWFoLT5hbmlbaV0ubXJjQ0NLT2ZmID0KKwkJCQkJIUFUSDlLX0FOSV9FTkFCTEVfTVJDX0NDSzsKKwkJCWVsc2UKKwkJCQlhaC0+YW5pW2ldLm1yY0NDS09mZiA9IHRydWU7CisKKwkJCWFoLT5hbmlbaV0ub2ZkbXNUdXJuID0gdHJ1ZTsKKwkJfSBlbHNlIHsKKwkJCWFoLT5hbmlbaV0ub2ZkbVRyaWdIaWdoID0gQVRIOUtfQU5JX09GRE1fVFJJR19ISUdIX09MRDsKKwkJCWFoLT5hbmlbaV0ub2ZkbVRyaWdMb3cgPSBBVEg5S19BTklfT0ZETV9UUklHX0xPV19PTEQ7CisKKwkJCWFoLT5hbmlbaV0uY2NrVHJpZ0hpZ2ggPSBBVEg5S19BTklfQ0NLX1RSSUdfSElHSF9PTEQ7CisJCQlhaC0+YW5pW2ldLmNja1RyaWdMb3cgPSBBVEg5S19BTklfQ0NLX1RSSUdfTE9XX09MRDsKKworCQkJYWgtPmFuaVtpXS5zcHVySW1tdW5pdHlMZXZlbCA9CisJCQkJQVRIOUtfQU5JX1NQVVJfSU1NVU5FX0xWTF9PTEQ7CisJCQlhaC0+YW5pW2ldLmZpcnN0ZXBMZXZlbCA9IEFUSDlLX0FOSV9GSVJTVEVQX0xWTF9PTEQ7CisKKwkJCWFoLT5hbmlbaV0ub2ZkbVBoeUVyckJhc2UgPQorCQkJCUFSX1BIWV9DT1VOVE1BWCAtIEFUSDlLX0FOSV9PRkRNX1RSSUdfSElHSF9PTEQ7CisJCQlhaC0+YW5pW2ldLmNja1BoeUVyckJhc2UgPQorCQkJCUFSX1BIWV9DT1VOVE1BWCAtIEFUSDlLX0FOSV9DQ0tfVFJJR19ISUdIX09MRDsKKwkJCWFoLT5hbmlbaV0uY2NrV2Vha1NpZ1RocmVzaG9sZCA9CisJCQkJQVRIOUtfQU5JX0NDS19XRUFLX1NJR19USFI7CisJCX0KKwogCQlhaC0+YW5pW2ldLnJzc2lUaHJIaWdoID0gQVRIOUtfQU5JX1JTU0lfVEhSX0hJR0g7CiAJCWFoLT5hbmlbaV0ucnNzaVRockxvdyA9IEFUSDlLX0FOSV9SU1NJX1RIUl9MT1c7CiAJCWFoLT5hbmlbaV0ub2ZkbVdlYWtTaWdEZXRlY3RPZmYgPQogCQkJIUFUSDlLX0FOSV9VU0VfT0ZETV9XRUFLX1NJRzsKLQkJYWgtPmFuaVtpXS5jY2tXZWFrU2lnVGhyZXNob2xkID0KLQkJCUFUSDlLX0FOSV9DQ0tfV0VBS19TSUdfVEhSOwotCQlhaC0+YW5pW2ldLnNwdXJJbW11bml0eUxldmVsID0gQVRIOUtfQU5JX1NQVVJfSU1NVU5FX0xWTDsKLQkJYWgtPmFuaVtpXS5maXJzdGVwTGV2ZWwgPSBBVEg5S19BTklfRklSU1RFUF9MVkw7Ci0JCWFoLT5hbmlbaV0ub2ZkbVBoeUVyckJhc2UgPQotCQkJQVJfUEhZX0NPVU5UTUFYIC0gQVRIOUtfQU5JX09GRE1fVFJJR19ISUdIOwotCQlhaC0+YW5pW2ldLmNja1BoeUVyckJhc2UgPQotCQkJQVJfUEhZX0NPVU5UTUFYIC0gQVRIOUtfQU5JX0NDS19UUklHX0hJR0g7CisJCWFoLT5hbmlbaV0uY2NrTm9pc2VJbW11bml0eUxldmVsID0gQVRIOUtfQU5JX0NDS19ERUZfTEVWRUw7CisJfQorCisJLyoKKwkgKiBzaW5jZSB3ZSBleHBlY3Qgc29tZSBvbmdvaW5nIG1haW50ZW5hbmNlIG9uIHRoZSB0YWJsZXMsIGxldCdzIHNhbml0eQorCSAqIGNoZWNrIGhlcmUgZGVmYXVsdCBsZXZlbCBzaG91bGQgbm90IG1vZGlmeSBJTkkgc2V0dGluZy4KKwkgKi8KKwlpZiAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSB8fCBtb2RwYXJhbV9mb3JjZV9uZXdfYW5pKSB7CisJCWNvbnN0IHN0cnVjdCBhbmlfb2ZkbV9sZXZlbF9lbnRyeSAqZW50cnlfb2ZkbTsKKwkJY29uc3Qgc3RydWN0IGFuaV9jY2tfbGV2ZWxfZW50cnkgKmVudHJ5X2NjazsKKworCQllbnRyeV9vZmRtID0gJm9mZG1fbGV2ZWxfdGFibGVbQVRIOUtfQU5JX09GRE1fREVGX0xFVkVMXTsKKwkJZW50cnlfY2NrID0gJmNja19sZXZlbF90YWJsZVtBVEg5S19BTklfQ0NLX0RFRl9MRVZFTF07CisKKwkJYWgtPmFuaXBlcmlvZCA9IEFUSDlLX0FOSV9QRVJJT0RfTkVXOworCQlhaC0+Y29uZmlnLmFuaV9wb2xsX2ludGVydmFsID0gQVRIOUtfQU5JX1BPTExJTlRFUlZBTF9ORVc7CisJfSBlbHNlIHsKKwkJYWgtPmFuaXBlcmlvZCA9IEFUSDlLX0FOSV9QRVJJT0RfT0xEOworCQlhaC0+Y29uZmlnLmFuaV9wb2xsX2ludGVydmFsID0gQVRIOUtfQU5JX1BPTExJTlRFUlZBTF9PTEQ7CiAJfQogCiAJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCkBAIC02NTMsNyArMTI4OSwzNCBAQAogCiAJYXRoOWtfZW5hYmxlX21pYl9jb3VudGVycyhhaCk7CiAKLQlhaC0+YW5pcGVyaW9kID0gQVRIOUtfQU5JX1BFUklPRDsKIAlpZiAoYWgtPmNvbmZpZy5lbmFibGVfYW5pKQogCQlhaC0+cHJvY19waHllcnIgfD0gSEFMX1BST0NFU1NfQU5JOwogfQorCit2b2lkIGF0aDlrX2h3X2F0dGFjaF9hbmlfb3BzX29sZChzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlzdHJ1Y3QgYXRoX2h3X3ByaXZhdGVfb3BzICpwcml2X29wcyA9IGF0aDlrX2h3X3ByaXZhdGVfb3BzKGFoKTsKKwlzdHJ1Y3QgYXRoX2h3X29wcyAqb3BzID0gYXRoOWtfaHdfb3BzKGFoKTsKKworCXByaXZfb3BzLT5hbmlfcmVzZXQgPSBhdGg5a19hbmlfcmVzZXRfb2xkOworCXByaXZfb3BzLT5hbmlfbG93ZXJfaW1tdW5pdHkgPSBhdGg5a19od19hbmlfbG93ZXJfaW1tdW5pdHlfb2xkOworCisJb3BzLT5hbmlfcHJvY19taWJfZXZlbnQgPSBhdGg5a19od19wcm9jX21pYl9ldmVudF9vbGQ7CisJb3BzLT5hbmlfbW9uaXRvciA9IGF0aDlrX2h3X2FuaV9tb25pdG9yX29sZDsKKworCWF0aF9wcmludChhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX0FOWSwgIlVzaW5nIEFOSSB2MVxuIik7Cit9CisKK3ZvaWQgYXRoOWtfaHdfYXR0YWNoX2FuaV9vcHNfbmV3KHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXN0cnVjdCBhdGhfaHdfcHJpdmF0ZV9vcHMgKnByaXZfb3BzID0gYXRoOWtfaHdfcHJpdmF0ZV9vcHMoYWgpOworCXN0cnVjdCBhdGhfaHdfb3BzICpvcHMgPSBhdGg5a19od19vcHMoYWgpOworCisJcHJpdl9vcHMtPmFuaV9yZXNldCA9IGF0aDlrX2FuaV9yZXNldF9uZXc7CisJcHJpdl9vcHMtPmFuaV9sb3dlcl9pbW11bml0eSA9IGF0aDlrX2h3X2FuaV9sb3dlcl9pbW11bml0eV9uZXc7CisKKwlvcHMtPmFuaV9wcm9jX21pYl9ldmVudCA9IGF0aDlrX2h3X3Byb2NfbWliX2V2ZW50X25ldzsKKwlvcHMtPmFuaV9tb25pdG9yID0gYXRoOWtfaHdfYW5pX21vbml0b3JfbmV3OworCisJYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihhaCksIEFUSF9EQkdfQU5ZLCAiVXNpbmcgQU5JIHYyXG4iKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hbmkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hbmkuaAppbmRleCAzMzU2NzYyLi5mNGQwYTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYW5pLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FuaS5oCkBAIC0yMywyMyArMjMsNTUgQEAKIAogI2RlZmluZSBCRUFDT05fUlNTSShhaHApIChhaHAtPnN0YXRzLmF2Z2Jyc3NpKQogCi0jZGVmaW5lIEFUSDlLX0FOSV9PRkRNX1RSSUdfSElHSCAgICAgICAgICA1MDAKLSNkZWZpbmUgQVRIOUtfQU5JX09GRE1fVFJJR19MT1cgICAgICAgICAgIDIwMAotI2RlZmluZSBBVEg5S19BTklfQ0NLX1RSSUdfSElHSCAgICAgICAgICAgMjAwCi0jZGVmaW5lIEFUSDlLX0FOSV9DQ0tfVFJJR19MT1cgICAgICAgICAgICAxMDAKKy8qIHVuaXRzIGFyZSBlcnJvcnMgcGVyIHNlY29uZCAqLworI2RlZmluZSBBVEg5S19BTklfT0ZETV9UUklHX0hJR0hfT0xEICAgICAgNTAwCisjZGVmaW5lIEFUSDlLX0FOSV9PRkRNX1RSSUdfSElHSF9ORVcgICAgICAxMDAwCisKKy8qIHVuaXRzIGFyZSBlcnJvcnMgcGVyIHNlY29uZCAqLworI2RlZmluZSBBVEg5S19BTklfT0ZETV9UUklHX0xPV19PTEQgICAgICAgMjAwCisjZGVmaW5lIEFUSDlLX0FOSV9PRkRNX1RSSUdfTE9XX05FVyAgICAgICA0MDAKKworLyogdW5pdHMgYXJlIGVycm9ycyBwZXIgc2Vjb25kICovCisjZGVmaW5lIEFUSDlLX0FOSV9DQ0tfVFJJR19ISUdIX09MRCAgICAgICAyMDAKKyNkZWZpbmUgQVRIOUtfQU5JX0NDS19UUklHX0hJR0hfTkVXICAgICAgIDYwMAorCisvKiB1bml0cyBhcmUgZXJyb3JzIHBlciBzZWNvbmQgKi8KKyNkZWZpbmUgQVRIOUtfQU5JX0NDS19UUklHX0xPV19PTEQgICAgICAgIDEwMAorI2RlZmluZSBBVEg5S19BTklfQ0NLX1RSSUdfTE9XX05FVyAgICAgICAgMzAwCisKICNkZWZpbmUgQVRIOUtfQU5JX05PSVNFX0lNTVVORV9MVkwgICAgICAgIDQKICNkZWZpbmUgQVRIOUtfQU5JX1VTRV9PRkRNX1dFQUtfU0lHICAgICAgIHRydWUKICNkZWZpbmUgQVRIOUtfQU5JX0NDS19XRUFLX1NJR19USFIgICAgICAgIGZhbHNlCi0jZGVmaW5lIEFUSDlLX0FOSV9TUFVSX0lNTVVORV9MVkwgICAgICAgICA3Ci0jZGVmaW5lIEFUSDlLX0FOSV9GSVJTVEVQX0xWTCAgICAgICAgICAgICAwCisKKyNkZWZpbmUgQVRIOUtfQU5JX1NQVVJfSU1NVU5FX0xWTF9PTEQgICAgIDcKKyNkZWZpbmUgQVRIOUtfQU5JX1NQVVJfSU1NVU5FX0xWTF9ORVcgICAgIDMKKworI2RlZmluZSBBVEg5S19BTklfRklSU1RFUF9MVkxfT0xEICAgICAgICAgMAorI2RlZmluZSBBVEg5S19BTklfRklSU1RFUF9MVkxfTkVXICAgICAgICAgMgorCiAjZGVmaW5lIEFUSDlLX0FOSV9SU1NJX1RIUl9ISUdIICAgICAgICAgICA0MAogI2RlZmluZSBBVEg5S19BTklfUlNTSV9USFJfTE9XICAgICAgICAgICAgNwotI2RlZmluZSBBVEg5S19BTklfUEVSSU9EICAgICAgICAgICAgICAgICAgMTAwCisKKyNkZWZpbmUgQVRIOUtfQU5JX1BFUklPRF9PTEQgICAgICAgICAgICAgIDEwMAorI2RlZmluZSBBVEg5S19BTklfUEVSSU9EX05FVyAgICAgICAgICAgICAgMTAwMAorCisvKiBpbiBtcyAqLworI2RlZmluZSBBVEg5S19BTklfUE9MTElOVEVSVkFMX09MRCAgICAgICAgMTAwCisjZGVmaW5lIEFUSDlLX0FOSV9QT0xMSU5URVJWQUxfTkVXICAgICAgICAxMDAwCiAKICNkZWZpbmUgSEFMX05PSVNFX0lNTVVORV9NQVggICAgICAgICAgICAgIDQKICNkZWZpbmUgSEFMX1NQVVJfSU1NVU5FX01BWCAgICAgICAgICAgICAgIDcKICNkZWZpbmUgSEFMX0ZJUlNUX1NURVBfTUFYICAgICAgICAgICAgICAgIDIKIAorI2RlZmluZSBBVEg5S19TSUdfRklSU1RFUF9TRVRUSU5HX01JTiAgICAgMAorI2RlZmluZSBBVEg5S19TSUdfRklSU1RFUF9TRVRUSU5HX01BWCAgICAgMjAKKyNkZWZpbmUgQVRIOUtfU0lHX1NQVVJfSU1NX1NFVFRJTkdfTUlOICAgIDAKKyNkZWZpbmUgQVRIOUtfU0lHX1NQVVJfSU1NX1NFVFRJTkdfTUFYICAgIDIyCisKKyNkZWZpbmUgQVRIOUtfQU5JX0VOQUJMRV9NUkNfQ0NLICAgICAgICAgIHRydWUKKworLyogdmFsdWVzIGhlcmUgYXJlIHJlbGF0aXZlIHRvIHRoZSBJTkkgKi8KKwogZW51bSBhdGg5a19hbmlfY21kIHsKIAlBVEg5S19BTklfUFJFU0VOVCA9IDB4MSwKIAlBVEg5S19BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUwgPSAweDIsCkBAIC00OSw3ICs4MSw4IEBACiAJQVRIOUtfQU5JX1NQVVJfSU1NVU5JVFlfTEVWRUwgPSAweDIwLAogCUFUSDlLX0FOSV9NT0RFID0gMHg0MCwKIAlBVEg5S19BTklfUEhZRVJSX1JFU0VUID0gMHg4MCwKLQlBVEg5S19BTklfQUxMID0gMHhmZgorCUFUSDlLX0FOSV9NUkNfQ0NLID0gMHgxMDAsCisJQVRIOUtfQU5JX0FMTCA9IDB4ZmZmCiB9OwogCiBzdHJ1Y3QgYXRoOWtfbWliX3N0YXRzIHsKQEAgLTYwLDkgKzkzLDMxIEBACiAJdTMyIGJlYWNvbnM7CiB9OwogCisvKiBJTkkgZGVmYXVsdCB2YWx1ZXMgZm9yIEFOSSByZWdpc3RlcnMgKi8KK3N0cnVjdCBhdGg5a19hbmlfZGVmYXVsdCB7CisJdTE2IG0xVGhyZXNoTG93OworCXUxNiBtMlRocmVzaExvdzsKKwl1MTYgbTFUaHJlc2g7CisJdTE2IG0yVGhyZXNoOworCXUxNiBtMkNvdW50VGhyOworCXUxNiBtMkNvdW50VGhyTG93OworCXUxNiBtMVRocmVzaExvd0V4dDsKKwl1MTYgbTJUaHJlc2hMb3dFeHQ7CisJdTE2IG0xVGhyZXNoRXh0OworCXUxNiBtMlRocmVzaEV4dDsKKwl1MTYgZmlyc3RlcDsKKwl1MTYgZmlyc3RlcExvdzsKKwl1MTYgY3ljcHdyVGhyMTsKKwl1MTYgY3ljcHdyVGhyMUV4dDsKK307CisKIHN0cnVjdCBhcjU0MTZBbmlTdGF0ZSB7CiAJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmM7CiAJdTggbm9pc2VJbW11bml0eUxldmVsOworCXU4IG9mZG1Ob2lzZUltbXVuaXR5TGV2ZWw7CisJdTggY2NrTm9pc2VJbW11bml0eUxldmVsOworCWJvb2wgb2ZkbXNUdXJuOworCXU4IG1yY0NDS09mZjsKIAl1OCBzcHVySW1tdW5pdHlMZXZlbDsKIAl1OCBmaXJzdGVwTGV2ZWw7CiAJdTggb2ZkbVdlYWtTaWdEZXRlY3RPZmY7CkBAIC04NSw2ICsxNDAsNyBAQAogCWludDE2X3QgcGt0UnNzaVsyXTsKIAlpbnQxNl90IG9mZG1FcnJSc3NpWzJdOwogCWludDE2X3QgY2NrRXJyUnNzaVsyXTsKKwlzdHJ1Y3QgYXRoOWtfYW5pX2RlZmF1bHQgaW5pRGVmOwogfTsKIAogc3RydWN0IGFyNTQxNlN0YXRzIHsKQEAgLTEwOCwxNSArMTY0LDEzIEBACiB9OwogI2RlZmluZSBhaF9taWJTdGF0cyBzdGF0cy5hc3RfbWlic3RhdHMKIAotdm9pZCBhdGg5a19hbmlfcmVzZXQoc3RydWN0IGF0aF9odyAqYWgpOwotdm9pZCBhdGg5a19od19hbmlfbW9uaXRvcihzdHJ1Y3QgYXRoX2h3ICphaCwKLQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwogdm9pZCBhdGg5a19lbmFibGVfbWliX2NvdW50ZXJzKHN0cnVjdCBhdGhfaHcgKmFoKTsKIHZvaWQgYXRoOWtfaHdfZGlzYWJsZV9taWJfY291bnRlcnMoc3RydWN0IGF0aF9odyAqYWgpOwogdTMyIGF0aDlrX2h3X0dldE1pYkN5Y2xlQ291bnRzUGN0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgKnJ4Y19wY250LAogCQkJCSAgdTMyICpyeGZfcGNudCwgdTMyICp0eGZfcGNudCk7Ci12b2lkIGF0aDlrX2h3X3Byb2NtaWJldmVudChzdHJ1Y3QgYXRoX2h3ICphaCk7CiB2b2lkIGF0aDlrX2h3X2FuaV9zZXR1cChzdHJ1Y3QgYXRoX2h3ICphaCk7CiB2b2lkIGF0aDlrX2h3X2FuaV9pbml0KHN0cnVjdCBhdGhfaHcgKmFoKTsKK2ludCBhdGg5a19od19nZXRfYW5pX2NoYW5uZWxfaWR4KHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CiAKICNlbmRpZiAvKiBBTklfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyNTAwOF9pbml0dmFscy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyNTAwOF9pbml0dmFscy5oCmluZGV4IDAyNWMzMWFjLi4zNmY3ZDA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI1MDA4X2luaXR2YWxzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyNTAwOF9pbml0dmFscy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDEwIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtMTQsNzI5ICsxNCw2NjAgQEAKICAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAotI2lmbmRlZiBJTklUVkFMU19BUjUwMDhfSAotI2RlZmluZSBJTklUVkFMU19BUjUwMDhfSAotCiBzdGF0aWMgY29uc3QgdTMyIGFyNTQxNk1vZGVzW11bNl0gPSB7Ci0gICAgeyAweDAwMDAxMDMwLCAweDAwMDAwMjMwLCAweDAwMDAwNDYwLCAweDAwMDAwMmMwLCAweDAwMDAwMTYwLCAweDAwMDAwMWUwIH0sCi0gICAgeyAweDAwMDAxMDcwLCAweDAwMDAwMTY4LCAweDAwMDAwMmQwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwIH0sCi0gICAgeyAweDAwMDAxMGIwLCAweDAwMDAwZTYwLCAweDAwMDAxY2MwLCAweDAwMDA3YzcwLCAweDAwMDAzZTM4LCAweDAwMDAxMTgwIH0sCi0gICAgeyAweDAwMDAxMGYwLCAweDAwMDBhMDAwLCAweDAwMDE0MDAwLCAweDAwMDE2MDAwLCAweDAwMDBiMDAwLCAweDAwMDE0MDA4IH0sCi0gICAgeyAweDAwMDA4MDE0LCAweDAzZTgwM2U4LCAweDA3ZDAwN2QwLCAweDEwODAxNjAwLCAweDA4NDAwYjAwLCAweDA2ZTAwNmUwIH0sCi0gICAgeyAweDAwMDA4MDFjLCAweDEyOGQ5M2E3LCAweDEyOGQ5M2NmLCAweDEyZTAxM2Q3LCAweDEyZTAxM2FiLCAweDA5ODgxM2NmIH0sCi0gICAgeyAweDAwMDA4MTIwLCAweDA4ZjA0ODAwLCAweDA4ZjA0ODAwLCAweDA4ZjA0ODEwLCAweDA4ZjA0ODEwLCAweDA4ZjA0ODEwIH0sCi0gICAgeyAweDAwMDA4MWQwLCAweDAwMDAzMjEwLCAweDAwMDAzMjEwLCAweDAwMDAzMjBhLCAweDAwMDAzMjBhLCAweDAwMDAzMjBhIH0sCi0gICAgeyAweDAwMDA5ODA0LCAweDAwMDAwMzAwLCAweDAwMDAwM2M0LCAweDAwMDAwM2M0LCAweDAwMDAwMzAwLCAweDAwMDAwMzAzIH0sCi0gICAgeyAweDAwMDA5ODIwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwIH0sCi0gICAgeyAweDAwMDA5ODI0LCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0sCi0gICAgeyAweDAwMDA5ODI4LCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxIH0sCi0gICAgeyAweDAwMDA5ODM0LCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0sCi0gICAgeyAweDAwMDA5ODM4LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3IH0sCi0gICAgeyAweDAwMDA5ODQ0LCAweDEzNzIxNjFlLCAweDEzNzIxNjFlLCAweDEzNzIxNmEwLCAweDEzNzIxNmEwLCAweDEzNzIxNmEwIH0sCi0gICAgeyAweDAwMDA5ODQ4LCAweDAwMWE2YTY1LCAweDAwMWE2YTY1LCAweDAwMTk3YTY4LCAweDAwMTk3YTY4LCAweDAwMTk3YTY4IH0sCi0gICAgeyAweDAwMDBhODQ4LCAweDAwMWE2YTY1LCAweDAwMWE2YTY1LCAweDAwMTk3YTY4LCAweDAwMTk3YTY4LCAweDAwMTk3YTY4IH0sCi0gICAgeyAweDAwMDBiODQ4LCAweDAwMWE2YTY1LCAweDAwMWE2YTY1LCAweDAwMTk3YTY4LCAweDAwMTk3YTY4LCAweDAwMTk3YTY4IH0sCi0gICAgeyAweDAwMDA5ODUwLCAweDZjNDhiNGUwLCAweDZkNDhiNGUwLCAweDZkNDhiMGRlLCAweDZjNDhiMGRlLCAweDZjNDhiMGRlIH0sCi0gICAgeyAweDAwMDA5ODU4LCAweDdlYzgyZDJlLCAweDdlYzgyZDJlLCAweDdlYzgyZDJlLCAweDdlYzgyZDJlLCAweDdlYzgyZDJlIH0sCi0gICAgeyAweDAwMDA5ODVjLCAweDMxMzk1ZDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk1ZDVlLCAweDMxMzk1ZDVlIH0sCi0gICAgeyAweDAwMDA5ODYwLCAweDAwMDQ5ZDE4LCAweDAwMDQ5ZDE4LCAweDAwMDQ5ZDE4LCAweDAwMDQ5ZDE4LCAweDAwMDQ5ZDE4IH0sCi0gICAgeyAweDAwMDA5ODY0LCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwIH0sCi0gICAgeyAweDAwMDA5ODY4LCAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCAweDQwOWE0MTkwIH0sCi0gICAgeyAweDAwMDA5ODZjLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxIH0sCi0gICAgeyAweDAwMDA5OTE0LCAweDAwMDAwN2QwLCAweDAwMDAwZmEwLCAweDAwMDAxMTMwLCAweDAwMDAwODk4LCAweDAwMDAwN2QwIH0sCi0gICAgeyAweDAwMDA5OTE4LCAweDAwMDAwMWI4LCAweDAwMDAwMzcwLCAweDAwMDAwMjY4LCAweDAwMDAwMTM0LCAweDAwMDAwMTM0IH0sCi0gICAgeyAweDAwMDA5OTI0LCAweGQwMDU4YTBiLCAweGQwMDU4YTBiLCAweGQwMDU4YTBiLCAweGQwMDU4YTBiLCAweGQwMDU4YTBiIH0sCi0gICAgeyAweDAwMDA5OTQ0LCAweGZmYjgxMDIwLCAweGZmYjgxMDIwLCAweGZmYjgxMDIwLCAweGZmYjgxMDIwLCAweGZmYjgxMDIwIH0sCi0gICAgeyAweDAwMDA5OTYwLCAweDAwMDAwOTAwLCAweDAwMDAwOTAwLCAweDAwMDEyZDgwLCAweDAwMDEyZDgwLCAweDAwMDEyZDgwIH0sCi0gICAgeyAweDAwMDBhOTYwLCAweDAwMDAwOTAwLCAweDAwMDAwOTAwLCAweDAwMDEyZDgwLCAweDAwMDEyZDgwLCAweDAwMDEyZDgwIH0sCi0gICAgeyAweDAwMDBiOTYwLCAweDAwMDAwOTAwLCAweDAwMDAwOTAwLCAweDAwMDEyZDgwLCAweDAwMDEyZDgwLCAweDAwMDEyZDgwIH0sCi0gICAgeyAweDAwMDA5OTY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAxMTIwLCAweDAwMDAxMTIwLCAweDAwMDAxMTIwIH0sCi0gICAgeyAweDAwMDA5OWJjLCAweDAwMWEwYTAwLCAweDAwMWEwYTAwLCAweDAwMWEwYTAwLCAweDAwMWEwYTAwLCAweDAwMWEwYTAwIH0sCi0gICAgeyAweDAwMDA5OWMwLCAweDAzODkxOWJlLCAweDAzODkxOWJlLCAweDAzODkxOWJlLCAweDAzODkxOWJlLCAweDAzODkxOWJlIH0sCi0gICAgeyAweDAwMDA5OWM0LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3IH0sCi0gICAgeyAweDAwMDA5OWM4LCAweDZhZjY1MzJjLCAweDZhZjY1MzJjLCAweDZhZjY1MzJjLCAweDZhZjY1MzJjLCAweDZhZjY1MzJjIH0sCi0gICAgeyAweDAwMDA5OWNjLCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4IH0sCi0gICAgeyAweDAwMDA5OWQwLCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0IH0sCi0gICAgeyAweDAwMDA5OWQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjA0LCAweDAwMDAwODgwLCAweDAwMDAwODgwLCAweDAwMDAwODgwLCAweDAwMDAwODgwLCAweDAwMDAwODgwIH0sCi0gICAgeyAweDAwMDBhMjA4LCAweGQ2YmU0Nzg4LCAweGQ2YmU0Nzg4LCAweGQwM2U0Nzg4LCAweGQwM2U0Nzg4LCAweGQwM2U0Nzg4IH0sCi0gICAgeyAweDAwMDBhMjBjLCAweDAwMmVjMWUwLCAweDAwMmVjMWUwLCAweDAwMmFjMTIwLCAweDAwMmFjMTIwLCAweDAwMmFjMTIwIH0sCi0gICAgeyAweDAwMDBiMjBjLCAweDAwMmVjMWUwLCAweDAwMmVjMWUwLCAweDAwMmFjMTIwLCAweDAwMmFjMTIwLCAweDAwMmFjMTIwIH0sCi0gICAgeyAweDAwMDBjMjBjLCAweDAwMmVjMWUwLCAweDAwMmVjMWUwLCAweDAwMmFjMTIwLCAweDAwMmFjMTIwLCAweDAwMmFjMTIwIH0sCi0gICAgeyAweDAwMDBhMjFjLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0sCi0gICAgeyAweDAwMDBhMjMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMjEwLCAweDAwMDAwMTA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjc0LCAweDBhMWE5Y2FhLCAweDBhMWE5Y2FhLCAweDBhMWE3Y2FhLCAweDBhMWE3Y2FhLCAweDBhMWE3Y2FhIH0sCi0gICAgeyAweDAwMDBhMzAwLCAweDE4MDEwMDAwLCAweDE4MDEwMDAwLCAweDE4MDEwMDAwLCAweDE4MDEwMDAwLCAweDE4MDEwMDAwIH0sCi0gICAgeyAweDAwMDBhMzA0LCAweDMwMDMyNjAyLCAweDMwMDMyNjAyLCAweDJlMDMyNDAyLCAweDJlMDMyNDAyLCAweDJlMDMyNDAyIH0sCi0gICAgeyAweDAwMDBhMzA4LCAweDQ4MDczZTA2LCAweDQ4MDczZTA2LCAweDRhMGEzYzA2LCAweDRhMGEzYzA2LCAweDRhMGEzYzA2IH0sCi0gICAgeyAweDAwMDBhMzBjLCAweDU2MGI0YzBhLCAweDU2MGI0YzBhLCAweDYyMWE1NDBiLCAweDYyMWE1NDBiLCAweDYyMWE1NDBiIH0sCi0gICAgeyAweDAwMDBhMzEwLCAweDY0MWE2MDBmLCAweDY0MWE2MDBmLCAweDc2NGY2YzFiLCAweDc2NGY2YzFiLCAweDc2NGY2YzFiIH0sCi0gICAgeyAweDAwMDBhMzE0LCAweDdhNGY2ZTFiLCAweDdhNGY2ZTFiLCAweDg0NWI3YTVhLCAweDg0NWI3YTVhLCAweDg0NWI3YTVhIH0sCi0gICAgeyAweDAwMDBhMzE4LCAweDhjNWI3ZTVhLCAweDhjNWI3ZTVhLCAweDk1MGY4Y2NmLCAweDk1MGY4Y2NmLCAweDk1MGY4Y2NmIH0sCi0gICAgeyAweDAwMDBhMzFjLCAweDlkMGY5NmNmLCAweDlkMGY5NmNmLCAweGE1Y2Y5YjRmLCAweGE1Y2Y5YjRmLCAweGE1Y2Y5YjRmIH0sCi0gICAgeyAweDAwMDBhMzIwLCAweGI1MWZhNjlmLCAweGI1MWZhNjlmLCAweGJkZGZhZjFmLCAweGJkZGZhZjFmLCAweGJkZGZhZjFmIH0sCi0gICAgeyAweDAwMDBhMzI0LCAweGNiM2ZiZDA3LCAweGNiM2ZiY2JmLCAweGQxZmZjOTNmLCAweGQxZmZjOTNmLCAweGQxZmZjOTNmIH0sCi0gICAgeyAweDAwMDBhMzI4LCAweDAwMDBkN2JmLCAweDAwMDBkN2JmLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCisJezB4MDAwMDEwMzAsIDB4MDAwMDAyMzAsIDB4MDAwMDA0NjAsIDB4MDAwMDAyYzAsIDB4MDAwMDAxNjAsIDB4MDAwMDAxZTB9LAorCXsweDAwMDAxMDcwLCAweDAwMDAwMTY4LCAweDAwMDAwMmQwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwfSwKKwl7MHgwMDAwMTBiMCwgMHgwMDAwMGU2MCwgMHgwMDAwMWNjMCwgMHgwMDAwN2M3MCwgMHgwMDAwM2UzOCwgMHgwMDAwMTE4MH0sCisJezB4MDAwMDEwZjAsIDB4MDAwMGEwMDAsIDB4MDAwMTQwMDAsIDB4MDAwMTYwMDAsIDB4MDAwMGIwMDAsIDB4MDAwMTQwMDh9LAorCXsweDAwMDA4MDE0LCAweDAzZTgwM2U4LCAweDA3ZDAwN2QwLCAweDEwODAxNjAwLCAweDA4NDAwYjAwLCAweDA2ZTAwNmUwfSwKKwl7MHgwMDAwODAxYywgMHgxMjhkOTNhNywgMHgxMjhkOTNjZiwgMHgxMmUwMTNkNywgMHgxMmUwMTNhYiwgMHgwOTg4MTNjZn0sCisJezB4MDAwMDgxMjAsIDB4MDhmMDQ4MDAsIDB4MDhmMDQ4MDAsIDB4MDhmMDQ4MTAsIDB4MDhmMDQ4MTAsIDB4MDhmMDQ4MTB9LAorCXsweDAwMDA4MWQwLCAweDAwMDAzMjEwLCAweDAwMDAzMjEwLCAweDAwMDAzMjBhLCAweDAwMDAzMjBhLCAweDAwMDAzMjBhfSwKKwl7MHgwMDAwOTgwNCwgMHgwMDAwMDMwMCwgMHgwMDAwMDNjNCwgMHgwMDAwMDNjNCwgMHgwMDAwMDMwMCwgMHgwMDAwMDMwM30sCisJezB4MDAwMDk4MjAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDB9LAorCXsweDAwMDA5ODI0LCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlfSwKKwl7MHgwMDAwOTgyOCwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMX0sCisJezB4MDAwMDk4MzQsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGV9LAorCXsweDAwMDA5ODM4LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3fSwKKwl7MHgwMDAwOTg0NCwgMHgxMzcyMTYxZSwgMHgxMzcyMTYxZSwgMHgxMzcyMTZhMCwgMHgxMzcyMTZhMCwgMHgxMzcyMTZhMH0sCisJezB4MDAwMDk4NDgsIDB4MDAxYTZhNjUsIDB4MDAxYTZhNjUsIDB4MDAxOTdhNjgsIDB4MDAxOTdhNjgsIDB4MDAxOTdhNjh9LAorCXsweDAwMDBhODQ4LCAweDAwMWE2YTY1LCAweDAwMWE2YTY1LCAweDAwMTk3YTY4LCAweDAwMTk3YTY4LCAweDAwMTk3YTY4fSwKKwl7MHgwMDAwYjg0OCwgMHgwMDFhNmE2NSwgMHgwMDFhNmE2NSwgMHgwMDE5N2E2OCwgMHgwMDE5N2E2OCwgMHgwMDE5N2E2OH0sCisJezB4MDAwMDk4NTAsIDB4NmM0OGI0ZTAsIDB4NmQ0OGI0ZTAsIDB4NmQ0OGIwZGUsIDB4NmM0OGIwZGUsIDB4NmM0OGIwZGV9LAorCXsweDAwMDA5ODU4LCAweDdlYzgyZDJlLCAweDdlYzgyZDJlLCAweDdlYzgyZDJlLCAweDdlYzgyZDJlLCAweDdlYzgyZDJlfSwKKwl7MHgwMDAwOTg1YywgMHgzMTM5NWQ1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NWQ1ZSwgMHgzMTM5NWQ1ZX0sCisJezB4MDAwMDk4NjAsIDB4MDAwNDlkMTgsIDB4MDAwNDlkMTgsIDB4MDAwNDlkMTgsIDB4MDAwNDlkMTgsIDB4MDAwNDlkMTh9LAorCXsweDAwMDA5ODY0LCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwfSwKKwl7MHgwMDAwOTg2OCwgMHg0MDlhNDE5MCwgMHg0MDlhNDE5MCwgMHg0MDlhNDE5MCwgMHg0MDlhNDE5MCwgMHg0MDlhNDE5MH0sCisJezB4MDAwMDk4NmMsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODF9LAorCXsweDAwMDA5OTE0LCAweDAwMDAwN2QwLCAweDAwMDAwZmEwLCAweDAwMDAxMTMwLCAweDAwMDAwODk4LCAweDAwMDAwN2QwfSwKKwl7MHgwMDAwOTkxOCwgMHgwMDAwMDFiOCwgMHgwMDAwMDM3MCwgMHgwMDAwMDI2OCwgMHgwMDAwMDEzNCwgMHgwMDAwMDEzNH0sCisJezB4MDAwMDk5MjQsIDB4ZDAwNThhMGIsIDB4ZDAwNThhMGIsIDB4ZDAwNThhMGIsIDB4ZDAwNThhMGIsIDB4ZDAwNThhMGJ9LAorCXsweDAwMDA5OTQ0LCAweGZmYjgxMDIwLCAweGZmYjgxMDIwLCAweGZmYjgxMDIwLCAweGZmYjgxMDIwLCAweGZmYjgxMDIwfSwKKwl7MHgwMDAwOTk2MCwgMHgwMDAwMDkwMCwgMHgwMDAwMDkwMCwgMHgwMDAxMmQ4MCwgMHgwMDAxMmQ4MCwgMHgwMDAxMmQ4MH0sCisJezB4MDAwMGE5NjAsIDB4MDAwMDA5MDAsIDB4MDAwMDA5MDAsIDB4MDAwMTJkODAsIDB4MDAwMTJkODAsIDB4MDAwMTJkODB9LAorCXsweDAwMDBiOTYwLCAweDAwMDAwOTAwLCAweDAwMDAwOTAwLCAweDAwMDEyZDgwLCAweDAwMDEyZDgwLCAweDAwMDEyZDgwfSwKKwl7MHgwMDAwOTk2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMTEyMCwgMHgwMDAwMTEyMCwgMHgwMDAwMTEyMH0sCisJezB4MDAwMDk5YmMsIDB4MDAxYTBhMDAsIDB4MDAxYTBhMDAsIDB4MDAxYTBhMDAsIDB4MDAxYTBhMDAsIDB4MDAxYTBhMDB9LAorCXsweDAwMDA5OWMwLCAweDAzODkxOWJlLCAweDAzODkxOWJlLCAweDAzODkxOWJlLCAweDAzODkxOWJlLCAweDAzODkxOWJlfSwKKwl7MHgwMDAwOTljNCwgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMHgwNjMzNmY3N30sCisJezB4MDAwMDk5YzgsIDB4NmFmNjUzMmMsIDB4NmFmNjUzMmMsIDB4NmFmNjUzMmMsIDB4NmFmNjUzMmMsIDB4NmFmNjUzMmN9LAorCXsweDAwMDA5OWNjLCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4fSwKKwl7MHgwMDAwOTlkMCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NH0sCisJezB4MDAwMDk5ZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OWQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTIwNCwgMHgwMDAwMDg4MCwgMHgwMDAwMDg4MCwgMHgwMDAwMDg4MCwgMHgwMDAwMDg4MCwgMHgwMDAwMDg4MH0sCisJezB4MDAwMGEyMDgsIDB4ZDZiZTQ3ODgsIDB4ZDZiZTQ3ODgsIDB4ZDAzZTQ3ODgsIDB4ZDAzZTQ3ODgsIDB4ZDAzZTQ3ODh9LAorCXsweDAwMDBhMjBjLCAweDAwMmVjMWUwLCAweDAwMmVjMWUwLCAweDAwMmFjMTIwLCAweDAwMmFjMTIwLCAweDAwMmFjMTIwfSwKKwl7MHgwMDAwYjIwYywgMHgwMDJlYzFlMCwgMHgwMDJlYzFlMCwgMHgwMDJhYzEyMCwgMHgwMDJhYzEyMCwgMHgwMDJhYzEyMH0sCisJezB4MDAwMGMyMGMsIDB4MDAyZWMxZTAsIDB4MDAyZWMxZTAsIDB4MDAyYWMxMjAsIDB4MDAyYWMxMjAsIDB4MDAyYWMxMjB9LAorCXsweDAwMDBhMjFjLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhfSwKKwl7MHgwMDAwYTIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDIxMCwgMHgwMDAwMDEwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyNzQsIDB4MGExYTljYWEsIDB4MGExYTljYWEsIDB4MGExYTdjYWEsIDB4MGExYTdjYWEsIDB4MGExYTdjYWF9LAorCXsweDAwMDBhMzAwLCAweDE4MDEwMDAwLCAweDE4MDEwMDAwLCAweDE4MDEwMDAwLCAweDE4MDEwMDAwLCAweDE4MDEwMDAwfSwKKwl7MHgwMDAwYTMwNCwgMHgzMDAzMjYwMiwgMHgzMDAzMjYwMiwgMHgyZTAzMjQwMiwgMHgyZTAzMjQwMiwgMHgyZTAzMjQwMn0sCisJezB4MDAwMGEzMDgsIDB4NDgwNzNlMDYsIDB4NDgwNzNlMDYsIDB4NGEwYTNjMDYsIDB4NGEwYTNjMDYsIDB4NGEwYTNjMDZ9LAorCXsweDAwMDBhMzBjLCAweDU2MGI0YzBhLCAweDU2MGI0YzBhLCAweDYyMWE1NDBiLCAweDYyMWE1NDBiLCAweDYyMWE1NDBifSwKKwl7MHgwMDAwYTMxMCwgMHg2NDFhNjAwZiwgMHg2NDFhNjAwZiwgMHg3NjRmNmMxYiwgMHg3NjRmNmMxYiwgMHg3NjRmNmMxYn0sCisJezB4MDAwMGEzMTQsIDB4N2E0ZjZlMWIsIDB4N2E0ZjZlMWIsIDB4ODQ1YjdhNWEsIDB4ODQ1YjdhNWEsIDB4ODQ1YjdhNWF9LAorCXsweDAwMDBhMzE4LCAweDhjNWI3ZTVhLCAweDhjNWI3ZTVhLCAweDk1MGY4Y2NmLCAweDk1MGY4Y2NmLCAweDk1MGY4Y2NmfSwKKwl7MHgwMDAwYTMxYywgMHg5ZDBmOTZjZiwgMHg5ZDBmOTZjZiwgMHhhNWNmOWI0ZiwgMHhhNWNmOWI0ZiwgMHhhNWNmOWI0Zn0sCisJezB4MDAwMGEzMjAsIDB4YjUxZmE2OWYsIDB4YjUxZmE2OWYsIDB4YmRkZmFmMWYsIDB4YmRkZmFmMWYsIDB4YmRkZmFmMWZ9LAorCXsweDAwMDBhMzI0LCAweGNiM2ZiZDA3LCAweGNiM2ZiY2JmLCAweGQxZmZjOTNmLCAweGQxZmZjOTNmLCAweGQxZmZjOTNmfSwKKwl7MHgwMDAwYTMyOCwgMHgwMDAwZDdiZiwgMHgwMDAwZDdiZiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkNvbW1vbltdWzJdID0gewotICAgIHsgMHgwMDAwMDAwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDAyMDAxNSB9LAotICAgIHsgMHgwMDAwMDAzNCwgMHgwMDAwMDAwNSB9LAotICAgIHsgMHgwMDAwMDA0MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDA0NCwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwMDA0OCwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwMDA0YywgMHgwMDAwMDAxMCB9LAotICAgIHsgMHgwMDAwMDA1MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDA1NCwgMHgwMDAwMDAxZiB9LAotICAgIHsgMHgwMDAwMDgwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDgwNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDgwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDgwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDgxMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDgxNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDgxOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDgxYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDgyMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDgyNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTA0MCwgMHgwMDJmZmMwZiB9LAotICAgIHsgMHgwMDAwMTA0NCwgMHgwMDJmZmMwZiB9LAotICAgIHsgMHgwMDAwMTA0OCwgMHgwMDJmZmMwZiB9LAotICAgIHsgMHgwMDAwMTA0YywgMHgwMDJmZmMwZiB9LAotICAgIHsgMHgwMDAwMTA1MCwgMHgwMDJmZmMwZiB9LAotICAgIHsgMHgwMDAwMTA1NCwgMHgwMDJmZmMwZiB9LAotICAgIHsgMHgwMDAwMTA1OCwgMHgwMDJmZmMwZiB9LAotICAgIHsgMHgwMDAwMTA1YywgMHgwMDJmZmMwZiB9LAotICAgIHsgMHgwMDAwMTA2MCwgMHgwMDJmZmMwZiB9LAotICAgIHsgMHgwMDAwMTA2NCwgMHgwMDJmZmMwZiB9LAotICAgIHsgMHgwMDAwMTIzMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTI3MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTAzOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTA3OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTBiOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTBmOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTEzOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTE3OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTFiOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTFmOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTIzOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTI3OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTJiOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTJmOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTMzOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTM3OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTNiOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTNmOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTQzOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTQ3OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTRiOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTRmOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTUzOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTU3OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTViOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTVmOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTYzOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTY3OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTZiOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTZmOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTczOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTc3OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTdiOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTdmOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTAzYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTA3YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTBiYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTBmYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTEzYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTE3YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTFiYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTFmYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTIzYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTI3YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTJiYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTJmYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTMzYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTM3YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTNiYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTNmYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTQzYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTQ3YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwNDAzMCwgMHgwMDAwMDAwMiB9LAotICAgIHsgMHgwMDAwNDAzYywgMHgwMDAwMDAwMiB9LAotICAgIHsgMHgwMDAwNzAxMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwNzAzOCwgMHgwMDAwMDRjMiB9LAotICAgIHsgMHgwMDAwODAwNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODAwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODAwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODAxOCwgMHgwMDAwMDcwMCB9LAotICAgIHsgMHgwMDAwODAyMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODAzOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODAzYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODA0OCwgMHg0MDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODA1NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODA1OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODA1YywgMHgwMDBmYzc4ZiB9LAotICAgIHsgMHgwMDAwODA2MCwgMHgwMDAwMDAwZiB9LAotICAgIHsgMHgwMDAwODA2NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODBjMCwgMHgyYTgyMzAxYSB9LAotICAgIHsgMHgwMDAwODBjNCwgMHgwNWRjMDFlMCB9LAotICAgIHsgMHgwMDAwODBjOCwgMHgxZjQwMjcxMCB9LAotICAgIHsgMHgwMDAwODBjYywgMHgwMWY0MDAwMCB9LAotICAgIHsgMHgwMDAwODBkMCwgMHgwMDAwMWUwMCB9LAotICAgIHsgMHgwMDAwODBkNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODBkOCwgMHgwMDQwMDAwMCB9LAotICAgIHsgMHgwMDAwODBlMCwgMHhmZmZmZmZmZiB9LAotICAgIHsgMHgwMDAwODBlNCwgMHgwMDAwZmZmZiB9LAotICAgIHsgMHgwMDAwODBlOCwgMHgwMDNmM2YzZiB9LAotICAgIHsgMHgwMDAwODBlYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODBmMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODBmNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODBmOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODBmYywgMHgwMDAyMDAwMCB9LAotICAgIHsgMHgwMDAwODEwMCwgMHgwMDAyMDAwMCB9LAotICAgIHsgMHgwMDAwODEwNCwgMHgwMDAwMDAwMSB9LAotICAgIHsgMHgwMDAwODEwOCwgMHgwMDAwMDA1MiB9LAotICAgIHsgMHgwMDAwODEwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODExMCwgMHgwMDAwMDE2OCB9LAotICAgIHsgMHgwMDAwODExOCwgMHgwMDAxMDBhYSB9LAotICAgIHsgMHgwMDAwODExYywgMHgwMDAwMzIxMCB9LAotICAgIHsgMHgwMDAwODEyNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODEyOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODEyYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODEzMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODEzNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODEzOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODEzYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODE0NCwgMHhmZmZmZmZmZiB9LAotICAgIHsgMHgwMDAwODE2OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODE2YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODE3MCwgMHgzMjE0MzMyMCB9LAotICAgIHsgMHgwMDAwODE3NCwgMHhmYWE0ZmE1MCB9LAotICAgIHsgMHgwMDAwODE3OCwgMHgwMDAwMDEwMCB9LAotICAgIHsgMHgwMDAwODE3YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODFjNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODFlYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODFmMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODFmNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODFmOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODFmYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIwNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIxMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIxNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIxOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIxYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIyMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIyNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIyOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIyYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIzMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIzNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIzOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIzYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODI0MCwgMHgwMDEwMDAwMCB9LAotICAgIHsgMHgwMDAwODI0NCwgMHgwMDEwZjQwMCB9LAotICAgIHsgMHgwMDAwODI0OCwgMHgwMDAwMDEwMCB9LAotICAgIHsgMHgwMDAwODI0YywgMHgwMDAxZTgwMCB9LAotICAgIHsgMHgwMDAwODI1MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODI1NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODI1OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODI1YywgMHg0MDAwMDBmZiB9LAotICAgIHsgMHgwMDAwODI2MCwgMHgwMDA4MDkyMiB9LAotICAgIHsgMHgwMDAwODI2NCwgMHg4ODAwMDAxMCB9LAotICAgIHsgMHgwMDAwODI3MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODI3NCwgMHg0MDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODI3OCwgMHgwMDNlNDE4MCB9LAotICAgIHsgMHgwMDAwODI3YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODI4NCwgMHgwMDAwMDAyYyB9LAotICAgIHsgMHgwMDAwODI4OCwgMHgwMDAwMDAyYyB9LAotICAgIHsgMHgwMDAwODI4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODI5NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODI5OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODMwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODMwNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODMwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODMwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODMxMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODMxNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODMxOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODMyOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODMyYywgMHgwMDAwMDAwNyB9LAotICAgIHsgMHgwMDAwODMzMCwgMHgwMDAwMDMwMiB9LAotICAgIHsgMHgwMDAwODMzNCwgMHgwMDAwMGUwMCB9LAotICAgIHsgMHgwMDAwODMzOCwgMHgwMDA3MDAwMCB9LAotICAgIHsgMHgwMDAwODMzYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODM0MCwgMHgwMDAxMDdmZiB9LAotICAgIHsgMHgwMDAwOTgwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTgwYywgMHhhZDg0OGUxOSB9LAotICAgIHsgMHgwMDAwOTgxMCwgMHg3ZDE0ZTAwMCB9LAotICAgIHsgMHgwMDAwOTgxNCwgMHg5YzBhOWY2YiB9LAotICAgIHsgMHgwMDAwOTgxYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTgyYywgMHgwMDAwYTAwMCB9LAotICAgIHsgMHgwMDAwOTgzMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTgzYywgMHgwMDIwMDQwMCB9LAotICAgIHsgMHgwMDAwOTg0MCwgMHgyMDZhMDAyZSB9LAotICAgIHsgMHgwMDAwOTg0YywgMHgxMjg0MjMzYyB9LAotICAgIHsgMHgwMDAwOTg1NCwgMHgwMDAwMDg1OSB9LAotICAgIHsgMHgwMDAwOTkwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTkwNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTkwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTkwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTkxYywgMHgxMDAwMGZmZiB9LAotICAgIHsgMHgwMDAwOTkyMCwgMHgwNTEwMDAwMCB9LAotICAgIHsgMHgwMDAwYTkyMCwgMHgwNTEwMDAwMCB9LAotICAgIHsgMHgwMDAwYjkyMCwgMHgwNTEwMDAwMCB9LAotICAgIHsgMHgwMDAwOTkyOCwgMHgwMDAwMDAwMSB9LAotICAgIHsgMHgwMDAwOTkyYywgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwOTkzNCwgMHgxZTFmMjAyMiB9LAotICAgIHsgMHgwMDAwOTkzOCwgMHgwYTBiMGMwZCB9LAotICAgIHsgMHgwMDAwOTkzYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTk0OCwgMHg5MjgwYjIxMiB9LAotICAgIHsgMHgwMDAwOTk0YywgMHgwMDAyMDAyOCB9LAotICAgIHsgMHgwMDAwOTk1NCwgMHg1ZDUwZTE4OCB9LAotICAgIHsgMHgwMDAwOTk1OCwgMHgwMDA4MWZmZiB9LAotICAgIHsgMHgwMDAwYzk1YywgMHgwMDRiNmE4ZSB9LAotICAgIHsgMHgwMDAwYzk2OCwgMHgwMDAwMDNjZSB9LAotICAgIHsgMHgwMDAwOTk3MCwgMHgxOTBmYjUxNSB9LAotICAgIHsgMHgwMDAwOTk3NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTk3OCwgMHgwMDAwMDAwMSB9LAotICAgIHsgMHgwMDAwOTk3YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTk4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTk4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTk4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTk4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTk5MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTk5NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTk5OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTk5YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTlhMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTlhNCwgMHgwMDAwMDAwMSB9LAotICAgIHsgMHgwMDAwOTlhOCwgMHgwMDFmZmYwMCB9LAotICAgIHsgMHgwMDAwOTlhYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTliMCwgMHgwMzA1MTAwMCB9LAotICAgIHsgMHgwMDAwOTlkYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTllMCwgMHgwMDAwMDIwMCB9LAotICAgIHsgMHgwMDAwOTllNCwgMHhhYWFhYWFhYSB9LAotICAgIHsgMHgwMDAwOTllOCwgMHgzYzQ2NjQ3OCB9LAotICAgIHsgMHgwMDAwOTllYywgMHgwMDAwMDBhYSB9LAotICAgIHsgMHgwMDAwOTlmYywgMHgwMDAwMTA0MiB9LAotICAgIHsgMHgwMDAwOWIwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIwNCwgMHgwMDAwMDAwMSB9LAotICAgIHsgMHgwMDAwOWIwOCwgMHgwMDAwMDAwMiB9LAotICAgIHsgMHgwMDAwOWIwYywgMHgwMDAwMDAwMyB9LAotICAgIHsgMHgwMDAwOWIxMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwOWIxNCwgMHgwMDAwMDAwNSB9LAotICAgIHsgMHgwMDAwOWIxOCwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwOWIxYywgMHgwMDAwMDAwOSB9LAotICAgIHsgMHgwMDAwOWIyMCwgMHgwMDAwMDAwYSB9LAotICAgIHsgMHgwMDAwOWIyNCwgMHgwMDAwMDAwYiB9LAotICAgIHsgMHgwMDAwOWIyOCwgMHgwMDAwMDAwYyB9LAotICAgIHsgMHgwMDAwOWIyYywgMHgwMDAwMDAwZCB9LAotICAgIHsgMHgwMDAwOWIzMCwgMHgwMDAwMDAxMCB9LAotICAgIHsgMHgwMDAwOWIzNCwgMHgwMDAwMDAxMSB9LAotICAgIHsgMHgwMDAwOWIzOCwgMHgwMDAwMDAxMiB9LAotICAgIHsgMHgwMDAwOWIzYywgMHgwMDAwMDAxMyB9LAotICAgIHsgMHgwMDAwOWI0MCwgMHgwMDAwMDAxNCB9LAotICAgIHsgMHgwMDAwOWI0NCwgMHgwMDAwMDAxNSB9LAotICAgIHsgMHgwMDAwOWI0OCwgMHgwMDAwMDAxOCB9LAotICAgIHsgMHgwMDAwOWI0YywgMHgwMDAwMDAxOSB9LAotICAgIHsgMHgwMDAwOWI1MCwgMHgwMDAwMDAxYSB9LAotICAgIHsgMHgwMDAwOWI1NCwgMHgwMDAwMDAxYiB9LAotICAgIHsgMHgwMDAwOWI1OCwgMHgwMDAwMDAxYyB9LAotICAgIHsgMHgwMDAwOWI1YywgMHgwMDAwMDAxZCB9LAotICAgIHsgMHgwMDAwOWI2MCwgMHgwMDAwMDAyMCB9LAotICAgIHsgMHgwMDAwOWI2NCwgMHgwMDAwMDAyMSB9LAotICAgIHsgMHgwMDAwOWI2OCwgMHgwMDAwMDAyMiB9LAotICAgIHsgMHgwMDAwOWI2YywgMHgwMDAwMDAyMyB9LAotICAgIHsgMHgwMDAwOWI3MCwgMHgwMDAwMDAyNCB9LAotICAgIHsgMHgwMDAwOWI3NCwgMHgwMDAwMDAyNSB9LAotICAgIHsgMHgwMDAwOWI3OCwgMHgwMDAwMDAyOCB9LAotICAgIHsgMHgwMDAwOWI3YywgMHgwMDAwMDAyOSB9LAotICAgIHsgMHgwMDAwOWI4MCwgMHgwMDAwMDAyYSB9LAotICAgIHsgMHgwMDAwOWI4NCwgMHgwMDAwMDAyYiB9LAotICAgIHsgMHgwMDAwOWI4OCwgMHgwMDAwMDAyYyB9LAotICAgIHsgMHgwMDAwOWI4YywgMHgwMDAwMDAyZCB9LAotICAgIHsgMHgwMDAwOWI5MCwgMHgwMDAwMDAzMCB9LAotICAgIHsgMHgwMDAwOWI5NCwgMHgwMDAwMDAzMSB9LAotICAgIHsgMHgwMDAwOWI5OCwgMHgwMDAwMDAzMiB9LAotICAgIHsgMHgwMDAwOWI5YywgMHgwMDAwMDAzMyB9LAotICAgIHsgMHgwMDAwOWJhMCwgMHgwMDAwMDAzNCB9LAotICAgIHsgMHgwMDAwOWJhNCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJhOCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJhYywgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJiMCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJiNCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJiOCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJiYywgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJjMCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJjNCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJjOCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJjYywgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJkMCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJkNCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJkOCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJkYywgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJlMCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJlNCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJlOCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJlYywgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJmMCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJmNCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJmOCwgMHgwMDAwMDAxMCB9LAotICAgIHsgMHgwMDAwOWJmYywgMHgwMDAwMDAxYSB9LAotICAgIHsgMHgwMDAwYTIxMCwgMHg0MDgwNjMzMyB9LAotICAgIHsgMHgwMDAwYTIxNCwgMHgwMDEwNmMxMCB9LAotICAgIHsgMHgwMDAwYTIxOCwgMHgwMDljNDA2MCB9LAotICAgIHsgMHgwMDAwYTIyMCwgMHgwMTg4MzBjNiB9LAotICAgIHsgMHgwMDAwYTIyNCwgMHgwMDAwMDQwMCB9LAotICAgIHsgMHgwMDAwYTIyOCwgMHgwMDAwMGJiNSB9LAotICAgIHsgMHgwMDAwYTIyYywgMHgwMDAwMDAxMSB9LAotICAgIHsgMHgwMDAwYTIzNCwgMHgyMDIwMjAyMCB9LAotICAgIHsgMHgwMDAwYTIzOCwgMHgyMDIwMjAyMCB9LAotICAgIHsgMHgwMDAwYTIzYywgMHgxM2M4ODlhZiB9LAotICAgIHsgMHgwMDAwYTI0MCwgMHgzODQ5MGEyMCB9LAotICAgIHsgMHgwMDAwYTI0NCwgMHgwMDAwN2JiNiB9LAotICAgIHsgMHgwMDAwYTI0OCwgMHgwZmZmM2ZmYyB9LAotICAgIHsgMHgwMDAwYTI0YywgMHgwMDAwMDAwMSB9LAotICAgIHsgMHgwMDAwYTI1MCwgMHgwMDAwYTAwMCB9LAotICAgIHsgMHgwMDAwYTI1NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTI1OCwgMHgwY2M3NTM4MCB9LAotICAgIHsgMHgwMDAwYTI1YywgMHgwZjBmMGYwMSB9LAotICAgIHsgMHgwMDAwYTI2MCwgMHhkZmE5MWYwMSB9LAotICAgIHsgMHgwMDAwYTI2OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTI2YywgMHgwZTc5ZTVjNiB9LAotICAgIHsgMHgwMDAwYjI2YywgMHgwZTc5ZTVjNiB9LAotICAgIHsgMHgwMDAwYzI2YywgMHgwZTc5ZTVjNiB9LAotICAgIHsgMHgwMDAwZDI3MCwgMHgwMDgyMDgyMCB9LAotICAgIHsgMHgwMDAwYTI3OCwgMHgxY2U3MzljZSB9LAotICAgIHsgMHgwMDAwYTI3YywgMHgwNTE3MDFjZSB9LAotICAgIHsgMHgwMDAwYTMzOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMzYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM0MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM0NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM0OCwgMHgzZmZmZmZmZiB9LAotICAgIHsgMHgwMDAwYTM0YywgMHgzZmZmZmZmZiB9LAotICAgIHsgMHgwMDAwYTM1MCwgMHgzZmZmZmZmZiB9LAotICAgIHsgMHgwMDAwYTM1NCwgMHgwMDAzZmZmZiB9LAotICAgIHsgMHgwMDAwYTM1OCwgMHg3OWE4YWExZiB9LAotICAgIHsgMHgwMDAwZDM1YywgMHgwN2ZmZmZlZiB9LAotICAgIHsgMHgwMDAwZDM2MCwgMHgwZmZmZmZlNyB9LAotICAgIHsgMHgwMDAwZDM2NCwgMHgxN2ZmZmZlNSB9LAotICAgIHsgMHgwMDAwZDM2OCwgMHgxZmZmZmZlNCB9LAotICAgIHsgMHgwMDAwZDM2YywgMHgzN2ZmZmZlMyB9LAotICAgIHsgMHgwMDAwZDM3MCwgMHgzZmZmZmZlMyB9LAotICAgIHsgMHgwMDAwZDM3NCwgMHg1N2ZmZmZlMyB9LAotICAgIHsgMHgwMDAwZDM3OCwgMHg1ZmZmZmZlMiB9LAotICAgIHsgMHgwMDAwZDM3YywgMHg3ZmZmZmZlMiB9LAotICAgIHsgMHgwMDAwZDM4MCwgMHg3ZjNjN2JiYSB9LAotICAgIHsgMHgwMDAwZDM4NCwgMHhmMzMwN2ZmMCB9LAotICAgIHsgMHgwMDAwYTM4OCwgMHgwODAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM4YywgMHgyMDIwMjAyMCB9LAotICAgIHsgMHgwMDAwYTM5MCwgMHgyMDIwMjAyMCB9LAotICAgIHsgMHgwMDAwYTM5NCwgMHgxY2U3MzljZSB9LAotICAgIHsgMHgwMDAwYTM5OCwgMHgwMDAwMDFjZSB9LAotICAgIHsgMHgwMDAwYTM5YywgMHgwMDAwMDAwMSB9LAotICAgIHsgMHgwMDAwYTNhMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTNhNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTNhOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTNhYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTNiMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTNiNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTNiOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTNiYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTNjMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTNjNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTNjOCwgMHgwMDAwMDI0NiB9LAotICAgIHsgMHgwMDAwYTNjYywgMHgyMDIwMjAyMCB9LAotICAgIHsgMHgwMDAwYTNkMCwgMHgyMDIwMjAyMCB9LAotICAgIHsgMHgwMDAwYTNkNCwgMHgyMDIwMjAyMCB9LAotICAgIHsgMHgwMDAwYTNkYywgMHgxY2U3MzljZSB9LAotICAgIHsgMHgwMDAwYTNlMCwgMHgwMDAwMDFjZSB9LAorCS8qIEFkZHIgICAgICBhbGxtb2RlcyAgKi8KKwl7MHgwMDAwMDAwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDAwMzAsIDB4MDAwMjAwMTV9LAorCXsweDAwMDAwMDM0LCAweDAwMDAwMDA1fSwKKwl7MHgwMDAwMDA0MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDAwNDQsIDB4MDAwMDAwMDh9LAorCXsweDAwMDAwMDQ4LCAweDAwMDAwMDA4fSwKKwl7MHgwMDAwMDA0YywgMHgwMDAwMDAxMH0sCisJezB4MDAwMDAwNTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwMDU0LCAweDAwMDAwMDFmfSwKKwl7MHgwMDAwMDgwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDA4MDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwODA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDgwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDA4MTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwODE0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDgxOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDA4MWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwODIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDgyNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEwNDAsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDQ0LCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA0OCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNGMsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDUwLCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA1NCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNTgsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDVjLCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA2MCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNjQsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMjMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTI3MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEwMzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMDc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTBiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEwZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMTM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTE3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDExYjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMWY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTIzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEyNzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMmI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTJmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEzMzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMzc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTNiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEzZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNDM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTQ3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE0YjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNGY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTUzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE1NzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNWI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTVmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE2MzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNjc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTZiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE2ZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNzM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTc3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE3YjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxN2Y4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTAzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEwN2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMGJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTBmYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDExM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMTdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTFiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDExZmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMjNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTI3YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEyYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMmZjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTMzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEzN2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxM2JjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTNmYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE0M2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNDdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwNDAzMCwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDQwM2MsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDA3MDEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwNzAzOCwgMHgwMDAwMDRjMn0sCisJezB4MDAwMDgwMDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwMTgsIDB4MDAwMDA3MDB9LAorCXsweDAwMDA4MDIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDQ4LCAweDQwMDAwMDAwfSwKKwl7MHgwMDAwODA1NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwNTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDVjLCAweDAwMGZjNzhmfSwKKwl7MHgwMDAwODA2MCwgMHgwMDAwMDAwZn0sCisJezB4MDAwMDgwNjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGMwLCAweDJhODIzMDFhfSwKKwl7MHgwMDAwODBjNCwgMHgwNWRjMDFlMH0sCisJezB4MDAwMDgwYzgsIDB4MWY0MDI3MTB9LAorCXsweDAwMDA4MGNjLCAweDAxZjQwMDAwfSwKKwl7MHgwMDAwODBkMCwgMHgwMDAwMWUwMH0sCisJezB4MDAwMDgwZDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGQ4LCAweDAwNDAwMDAwfSwKKwl7MHgwMDAwODBlMCwgMHhmZmZmZmZmZn0sCisJezB4MDAwMDgwZTQsIDB4MDAwMGZmZmZ9LAorCXsweDAwMDA4MGU4LCAweDAwM2YzZjNmfSwKKwl7MHgwMDAwODBlYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwZjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwZmMsIDB4MDAwMjAwMDB9LAorCXsweDAwMDA4MTAwLCAweDAwMDIwMDAwfSwKKwl7MHgwMDAwODEwNCwgMHgwMDAwMDAwMX0sCisJezB4MDAwMDgxMDgsIDB4MDAwMDAwNTJ9LAorCXsweDAwMDA4MTBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODExMCwgMHgwMDAwMDE2OH0sCisJezB4MDAwMDgxMTgsIDB4MDAwMTAwYWF9LAorCXsweDAwMDA4MTFjLCAweDAwMDAzMjEwfSwKKwl7MHgwMDAwODEyNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEzMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxNDQsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4MTY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODE2YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxNzAsIDB4MzIxNDMzMjB9LAorCXsweDAwMDA4MTc0LCAweGZhYTRmYTUwfSwKKwl7MHgwMDAwODE3OCwgMHgwMDAwMDEwMH0sCisJezB4MDAwMDgxN2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFlYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxZjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxZmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIwNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIxMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIxYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIyOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIzNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI0MCwgMHgwMDEwMDAwMH0sCisJezB4MDAwMDgyNDQsIDB4MDAxMGY0MDB9LAorCXsweDAwMDA4MjQ4LCAweDAwMDAwMTAwfSwKKwl7MHgwMDAwODI0YywgMHgwMDAxZTgwMH0sCisJezB4MDAwMDgyNTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI1OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyNWMsIDB4NDAwMDAwZmZ9LAorCXsweDAwMDA4MjYwLCAweDAwMDgwOTIyfSwKKwl7MHgwMDAwODI2NCwgMHg4ODAwMDAxMH0sCisJezB4MDAwMDgyNzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4Mjc0LCAweDQwMDAwMDAwfSwKKwl7MHgwMDAwODI3OCwgMHgwMDNlNDE4MH0sCisJezB4MDAwMDgyN2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4Mjg0LCAweDAwMDAwMDJjfSwKKwl7MHgwMDAwODI4OCwgMHgwMDAwMDAyY30sCisJezB4MDAwMDgyOGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4Mjk0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI5OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzA0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODMwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzMGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODMxNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzMTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODMyYywgMHgwMDAwMDAwN30sCisJezB4MDAwMDgzMzAsIDB4MDAwMDAzMDJ9LAorCXsweDAwMDA4MzM0LCAweDAwMDAwZTAwfSwKKwl7MHgwMDAwODMzOCwgMHgwMDA3MDAwMH0sCisJezB4MDAwMDgzM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzQwLCAweDAwMDEwN2ZmfSwKKwl7MHgwMDAwOTgwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4MGMsIDB4YWQ4NDhlMTl9LAorCXsweDAwMDA5ODEwLCAweDdkMTRlMDAwfSwKKwl7MHgwMDAwOTgxNCwgMHg5YzBhOWY2Yn0sCisJezB4MDAwMDk4MWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODJjLCAweDAwMDBhMDAwfSwKKwl7MHgwMDAwOTgzMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4M2MsIDB4MDAyMDA0MDB9LAorCXsweDAwMDA5ODQwLCAweDIwNmEwMDJlfSwKKwl7MHgwMDAwOTg0YywgMHgxMjg0MjMzY30sCisJezB4MDAwMDk4NTQsIDB4MDAwMDA4NTl9LAorCXsweDAwMDA5OTAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTkwNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5MDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTkxYywgMHgxMDAwMGZmZn0sCisJezB4MDAwMDk5MjAsIDB4MDUxMDAwMDB9LAorCXsweDAwMDBhOTIwLCAweDA1MTAwMDAwfSwKKwl7MHgwMDAwYjkyMCwgMHgwNTEwMDAwMH0sCisJezB4MDAwMDk5MjgsIDB4MDAwMDAwMDF9LAorCXsweDAwMDA5OTJjLCAweDAwMDAwMDA0fSwKKwl7MHgwMDAwOTkzNCwgMHgxZTFmMjAyMn0sCisJezB4MDAwMDk5MzgsIDB4MGEwYjBjMGR9LAorCXsweDAwMDA5OTNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTk0OCwgMHg5MjgwYjIxMn0sCisJezB4MDAwMDk5NGMsIDB4MDAwMjAwMjh9LAorCXsweDAwMDA5OTU0LCAweDVkNTBlMTg4fSwKKwl7MHgwMDAwOTk1OCwgMHgwMDA4MWZmZn0sCisJezB4MDAwMGM5NWMsIDB4MDA0YjZhOGV9LAorCXsweDAwMDBjOTY4LCAweDAwMDAwM2NlfSwKKwl7MHgwMDAwOTk3MCwgMHgxOTBmYjUxNX0sCisJezB4MDAwMDk5NzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTc4LCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwOTk3YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5ODAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTg0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTk4OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5OGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTkwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTk5NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5OTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTlhMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5YTQsIDB4MDAwMDAwMDF9LAorCXsweDAwMDA5OWE4LCAweDAwMWZmZjAwfSwKKwl7MHgwMDAwOTlhYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5YjAsIDB4MDMwNTEwMDB9LAorCXsweDAwMDA5OWRjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTllMCwgMHgwMDAwMDIwMH0sCisJezB4MDAwMDk5ZTQsIDB4YWFhYWFhYWF9LAorCXsweDAwMDA5OWU4LCAweDNjNDY2NDc4fSwKKwl7MHgwMDAwOTllYywgMHgwMDAwMDBhYX0sCisJezB4MDAwMDk5ZmMsIDB4MDAwMDEwNDJ9LAorCXsweDAwMDA5YjAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWIwNCwgMHgwMDAwMDAwMX0sCisJezB4MDAwMDliMDgsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDA5YjBjLCAweDAwMDAwMDAzfSwKKwl7MHgwMDAwOWIxMCwgMHgwMDAwMDAwNH0sCisJezB4MDAwMDliMTQsIDB4MDAwMDAwMDV9LAorCXsweDAwMDA5YjE4LCAweDAwMDAwMDA4fSwKKwl7MHgwMDAwOWIxYywgMHgwMDAwMDAwOX0sCisJezB4MDAwMDliMjAsIDB4MDAwMDAwMGF9LAorCXsweDAwMDA5YjI0LCAweDAwMDAwMDBifSwKKwl7MHgwMDAwOWIyOCwgMHgwMDAwMDAwY30sCisJezB4MDAwMDliMmMsIDB4MDAwMDAwMGR9LAorCXsweDAwMDA5YjMwLCAweDAwMDAwMDEwfSwKKwl7MHgwMDAwOWIzNCwgMHgwMDAwMDAxMX0sCisJezB4MDAwMDliMzgsIDB4MDAwMDAwMTJ9LAorCXsweDAwMDA5YjNjLCAweDAwMDAwMDEzfSwKKwl7MHgwMDAwOWI0MCwgMHgwMDAwMDAxNH0sCisJezB4MDAwMDliNDQsIDB4MDAwMDAwMTV9LAorCXsweDAwMDA5YjQ4LCAweDAwMDAwMDE4fSwKKwl7MHgwMDAwOWI0YywgMHgwMDAwMDAxOX0sCisJezB4MDAwMDliNTAsIDB4MDAwMDAwMWF9LAorCXsweDAwMDA5YjU0LCAweDAwMDAwMDFifSwKKwl7MHgwMDAwOWI1OCwgMHgwMDAwMDAxY30sCisJezB4MDAwMDliNWMsIDB4MDAwMDAwMWR9LAorCXsweDAwMDA5YjYwLCAweDAwMDAwMDIwfSwKKwl7MHgwMDAwOWI2NCwgMHgwMDAwMDAyMX0sCisJezB4MDAwMDliNjgsIDB4MDAwMDAwMjJ9LAorCXsweDAwMDA5YjZjLCAweDAwMDAwMDIzfSwKKwl7MHgwMDAwOWI3MCwgMHgwMDAwMDAyNH0sCisJezB4MDAwMDliNzQsIDB4MDAwMDAwMjV9LAorCXsweDAwMDA5Yjc4LCAweDAwMDAwMDI4fSwKKwl7MHgwMDAwOWI3YywgMHgwMDAwMDAyOX0sCisJezB4MDAwMDliODAsIDB4MDAwMDAwMmF9LAorCXsweDAwMDA5Yjg0LCAweDAwMDAwMDJifSwKKwl7MHgwMDAwOWI4OCwgMHgwMDAwMDAyY30sCisJezB4MDAwMDliOGMsIDB4MDAwMDAwMmR9LAorCXsweDAwMDA5YjkwLCAweDAwMDAwMDMwfSwKKwl7MHgwMDAwOWI5NCwgMHgwMDAwMDAzMX0sCisJezB4MDAwMDliOTgsIDB4MDAwMDAwMzJ9LAorCXsweDAwMDA5YjljLCAweDAwMDAwMDMzfSwKKwl7MHgwMDAwOWJhMCwgMHgwMDAwMDAzNH0sCisJezB4MDAwMDliYTQsIDB4MDAwMDAwMzV9LAorCXsweDAwMDA5YmE4LCAweDAwMDAwMDM1fSwKKwl7MHgwMDAwOWJhYywgMHgwMDAwMDAzNX0sCisJezB4MDAwMDliYjAsIDB4MDAwMDAwMzV9LAorCXsweDAwMDA5YmI0LCAweDAwMDAwMDM1fSwKKwl7MHgwMDAwOWJiOCwgMHgwMDAwMDAzNX0sCisJezB4MDAwMDliYmMsIDB4MDAwMDAwMzV9LAorCXsweDAwMDA5YmMwLCAweDAwMDAwMDM1fSwKKwl7MHgwMDAwOWJjNCwgMHgwMDAwMDAzNX0sCisJezB4MDAwMDliYzgsIDB4MDAwMDAwMzV9LAorCXsweDAwMDA5YmNjLCAweDAwMDAwMDM1fSwKKwl7MHgwMDAwOWJkMCwgMHgwMDAwMDAzNX0sCisJezB4MDAwMDliZDQsIDB4MDAwMDAwMzV9LAorCXsweDAwMDA5YmQ4LCAweDAwMDAwMDM1fSwKKwl7MHgwMDAwOWJkYywgMHgwMDAwMDAzNX0sCisJezB4MDAwMDliZTAsIDB4MDAwMDAwMzV9LAorCXsweDAwMDA5YmU0LCAweDAwMDAwMDM1fSwKKwl7MHgwMDAwOWJlOCwgMHgwMDAwMDAzNX0sCisJezB4MDAwMDliZWMsIDB4MDAwMDAwMzV9LAorCXsweDAwMDA5YmYwLCAweDAwMDAwMDM1fSwKKwl7MHgwMDAwOWJmNCwgMHgwMDAwMDAzNX0sCisJezB4MDAwMDliZjgsIDB4MDAwMDAwMTB9LAorCXsweDAwMDA5YmZjLCAweDAwMDAwMDFhfSwKKwl7MHgwMDAwYTIxMCwgMHg0MDgwNjMzM30sCisJezB4MDAwMGEyMTQsIDB4MDAxMDZjMTB9LAorCXsweDAwMDBhMjE4LCAweDAwOWM0MDYwfSwKKwl7MHgwMDAwYTIyMCwgMHgwMTg4MzBjNn0sCisJezB4MDAwMGEyMjQsIDB4MDAwMDA0MDB9LAorCXsweDAwMDBhMjI4LCAweDAwMDAwYmI1fSwKKwl7MHgwMDAwYTIyYywgMHgwMDAwMDAxMX0sCisJezB4MDAwMGEyMzQsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhMjM4LCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTIzYywgMHgxM2M4ODlhZn0sCisJezB4MDAwMGEyNDAsIDB4Mzg0OTBhMjB9LAorCXsweDAwMDBhMjQ0LCAweDAwMDA3YmI2fSwKKwl7MHgwMDAwYTI0OCwgMHgwZmZmM2ZmY30sCisJezB4MDAwMGEyNGMsIDB4MDAwMDAwMDF9LAorCXsweDAwMDBhMjUwLCAweDAwMDBhMDAwfSwKKwl7MHgwMDAwYTI1NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyNTgsIDB4MGNjNzUzODB9LAorCXsweDAwMDBhMjVjLCAweDBmMGYwZjAxfSwKKwl7MHgwMDAwYTI2MCwgMHhkZmE5MWYwMX0sCisJezB4MDAwMGEyNjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMjZjLCAweDBlNzllNWM2fSwKKwl7MHgwMDAwYjI2YywgMHgwZTc5ZTVjNn0sCisJezB4MDAwMGMyNmMsIDB4MGU3OWU1YzZ9LAorCXsweDAwMDBkMjcwLCAweDAwODIwODIwfSwKKwl7MHgwMDAwYTI3OCwgMHgxY2U3MzljZX0sCisJezB4MDAwMGEyN2MsIDB4MDUxNzAxY2V9LAorCXsweDAwMDBhMzM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzNDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTM0OCwgMHgzZmZmZmZmZn0sCisJezB4MDAwMGEzNGMsIDB4M2ZmZmZmZmZ9LAorCXsweDAwMDBhMzUwLCAweDNmZmZmZmZmfSwKKwl7MHgwMDAwYTM1NCwgMHgwMDAzZmZmZn0sCisJezB4MDAwMGEzNTgsIDB4NzlhOGFhMWZ9LAorCXsweDAwMDBkMzVjLCAweDA3ZmZmZmVmfSwKKwl7MHgwMDAwZDM2MCwgMHgwZmZmZmZlN30sCisJezB4MDAwMGQzNjQsIDB4MTdmZmZmZTV9LAorCXsweDAwMDBkMzY4LCAweDFmZmZmZmU0fSwKKwl7MHgwMDAwZDM2YywgMHgzN2ZmZmZlM30sCisJezB4MDAwMGQzNzAsIDB4M2ZmZmZmZTN9LAorCXsweDAwMDBkMzc0LCAweDU3ZmZmZmUzfSwKKwl7MHgwMDAwZDM3OCwgMHg1ZmZmZmZlMn0sCisJezB4MDAwMGQzN2MsIDB4N2ZmZmZmZTJ9LAorCXsweDAwMDBkMzgwLCAweDdmM2M3YmJhfSwKKwl7MHgwMDAwZDM4NCwgMHhmMzMwN2ZmMH0sCisJezB4MDAwMGEzODgsIDB4MDgwMDAwMDB9LAorCXsweDAwMDBhMzhjLCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTM5MCwgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzOTQsIDB4MWNlNzM5Y2V9LAorCXsweDAwMDBhMzk4LCAweDAwMDAwMWNlfSwKKwl7MHgwMDAwYTM5YywgMHgwMDAwMDAwMX0sCisJezB4MDAwMGEzYTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2E0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTNhOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzYWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2IwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTNiNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzYjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2JjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTNjMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzYzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2M4LCAweDAwMDAwMjQ2fSwKKwl7MHgwMDAwYTNjYywgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzZDAsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2Q0LCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTNkYywgMHgxY2U3MzljZX0sCisJezB4MDAwMGEzZTAsIDB4MDAwMDAxY2V9LAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMFtdWzJdID0gewotICAgIHsgMHgwMDAwOThiMCwgMHgxZTU3OTVlNSB9LAotICAgIHsgMHgwMDAwOThlMCwgMHgwMjAwODAyMCB9LAorCS8qIEFkZHIgICAgICBhbGxtb2RlcyAgKi8KKwl7MHgwMDAwOThiMCwgMHgxZTU3OTVlNX0sCisJezB4MDAwMDk4ZTAsIDB4MDIwMDgwMjB9LAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCQl9SZkdhaW5bXVszXSA9IHsKLSAgICB7IDB4MDAwMDlhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMDQsIDB4MDAwMDAwNDAsIDB4MDAwMDAwNDAgfSwKLSAgICB7IDB4MDAwMDlhMDgsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSwKLSAgICB7IDB4MDAwMDlhMGMsIDB4MDAwMDAxYTEsIDB4MDAwMDAxNDEgfSwKLSAgICB7IDB4MDAwMDlhMTAsIDB4MDAwMDAxZTEsIDB4MDAwMDAxODEgfSwKLSAgICB7IDB4MDAwMDlhMTQsIDB4MDAwMDAwMjEsIDB4MDAwMDAxYzEgfSwKLSAgICB7IDB4MDAwMDlhMTgsIDB4MDAwMDAwNjEsIDB4MDAwMDAwMDEgfSwKLSAgICB7IDB4MDAwMDlhMWMsIDB4MDAwMDAxNjgsIDB4MDAwMDAwNDEgfSwKLSAgICB7IDB4MDAwMDlhMjAsIDB4MDAwMDAxYTgsIDB4MDAwMDAxYTggfSwKLSAgICB7IDB4MDAwMDlhMjQsIDB4MDAwMDAxZTgsIDB4MDAwMDAxZTggfSwKLSAgICB7IDB4MDAwMDlhMjgsIDB4MDAwMDAwMjgsIDB4MDAwMDAwMjggfSwKLSAgICB7IDB4MDAwMDlhMmMsIDB4MDAwMDAwNjgsIDB4MDAwMDAwNjggfSwKLSAgICB7IDB4MDAwMDlhMzAsIDB4MDAwMDAxODksIDB4MDAwMDAwYTggfSwKLSAgICB7IDB4MDAwMDlhMzQsIDB4MDAwMDAxYzksIDB4MDAwMDAxNjkgfSwKLSAgICB7IDB4MDAwMDlhMzgsIDB4MDAwMDAwMDksIDB4MDAwMDAxYTkgfSwKLSAgICB7IDB4MDAwMDlhM2MsIDB4MDAwMDAwNDksIDB4MDAwMDAxZTkgfSwKLSAgICB7IDB4MDAwMDlhNDAsIDB4MDAwMDAwODksIDB4MDAwMDAwMjkgfSwKLSAgICB7IDB4MDAwMDlhNDQsIDB4MDAwMDAxNzAsIDB4MDAwMDAwNjkgfSwKLSAgICB7IDB4MDAwMDlhNDgsIDB4MDAwMDAxYjAsIDB4MDAwMDAxOTAgfSwKLSAgICB7IDB4MDAwMDlhNGMsIDB4MDAwMDAxZjAsIDB4MDAwMDAxZDAgfSwKLSAgICB7IDB4MDAwMDlhNTAsIDB4MDAwMDAwMzAsIDB4MDAwMDAwMTAgfSwKLSAgICB7IDB4MDAwMDlhNTQsIDB4MDAwMDAwNzAsIDB4MDAwMDAwNTAgfSwKLSAgICB7IDB4MDAwMDlhNTgsIDB4MDAwMDAxOTEsIDB4MDAwMDAwOTAgfSwKLSAgICB7IDB4MDAwMDlhNWMsIDB4MDAwMDAxZDEsIDB4MDAwMDAxNTEgfSwKLSAgICB7IDB4MDAwMDlhNjAsIDB4MDAwMDAwMTEsIDB4MDAwMDAxOTEgfSwKLSAgICB7IDB4MDAwMDlhNjQsIDB4MDAwMDAwNTEsIDB4MDAwMDAxZDEgfSwKLSAgICB7IDB4MDAwMDlhNjgsIDB4MDAwMDAwOTEsIDB4MDAwMDAwMTEgfSwKLSAgICB7IDB4MDAwMDlhNmMsIDB4MDAwMDAxYjgsIDB4MDAwMDAwNTEgfSwKLSAgICB7IDB4MDAwMDlhNzAsIDB4MDAwMDAxZjgsIDB4MDAwMDAxOTggfSwKLSAgICB7IDB4MDAwMDlhNzQsIDB4MDAwMDAwMzgsIDB4MDAwMDAxZDggfSwKLSAgICB7IDB4MDAwMDlhNzgsIDB4MDAwMDAwNzgsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDAwMDlhN2MsIDB4MDAwMDAxOTksIDB4MDAwMDAwNTggfSwKLSAgICB7IDB4MDAwMDlhODAsIDB4MDAwMDAxZDksIDB4MDAwMDAwOTggfSwKLSAgICB7IDB4MDAwMDlhODQsIDB4MDAwMDAwMTksIDB4MDAwMDAxNTkgfSwKLSAgICB7IDB4MDAwMDlhODgsIDB4MDAwMDAwNTksIDB4MDAwMDAxOTkgfSwKLSAgICB7IDB4MDAwMDlhOGMsIDB4MDAwMDAwOTksIDB4MDAwMDAxZDkgfSwKLSAgICB7IDB4MDAwMDlhOTAsIDB4MDAwMDAwZDksIDB4MDAwMDAwMTkgfSwKLSAgICB7IDB4MDAwMDlhOTQsIDB4MDAwMDAwZjksIDB4MDAwMDAwNTkgfSwKLSAgICB7IDB4MDAwMDlhOTgsIDB4MDAwMDAwZjksIDB4MDAwMDAwOTkgfSwKLSAgICB7IDB4MDAwMDlhOWMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZDkgfSwKLSAgICB7IDB4MDAwMDlhYTAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhYTQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhYTgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhYWMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhYjAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhYjQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhYjgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhYmMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhYzAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhYzQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhYzgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhY2MsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhZDAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhZDQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhZDgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhZGMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhZTAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhZTQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhZTgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhZWMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhZjAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhZjQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhZjgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhZmMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKKwkvKiBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICovCisJezB4MDAwMDlhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTA0LCAweDAwMDAwMDQwLCAweDAwMDAwMDQwfSwKKwl7MHgwMDAwOWEwOCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MH0sCisJezB4MDAwMDlhMGMsIDB4MDAwMDAxYTEsIDB4MDAwMDAxNDF9LAorCXsweDAwMDA5YTEwLCAweDAwMDAwMWUxLCAweDAwMDAwMTgxfSwKKwl7MHgwMDAwOWExNCwgMHgwMDAwMDAyMSwgMHgwMDAwMDFjMX0sCisJezB4MDAwMDlhMTgsIDB4MDAwMDAwNjEsIDB4MDAwMDAwMDF9LAorCXsweDAwMDA5YTFjLCAweDAwMDAwMTY4LCAweDAwMDAwMDQxfSwKKwl7MHgwMDAwOWEyMCwgMHgwMDAwMDFhOCwgMHgwMDAwMDFhOH0sCisJezB4MDAwMDlhMjQsIDB4MDAwMDAxZTgsIDB4MDAwMDAxZTh9LAorCXsweDAwMDA5YTI4LCAweDAwMDAwMDI4LCAweDAwMDAwMDI4fSwKKwl7MHgwMDAwOWEyYywgMHgwMDAwMDA2OCwgMHgwMDAwMDA2OH0sCisJezB4MDAwMDlhMzAsIDB4MDAwMDAxODksIDB4MDAwMDAwYTh9LAorCXsweDAwMDA5YTM0LCAweDAwMDAwMWM5LCAweDAwMDAwMTY5fSwKKwl7MHgwMDAwOWEzOCwgMHgwMDAwMDAwOSwgMHgwMDAwMDFhOX0sCisJezB4MDAwMDlhM2MsIDB4MDAwMDAwNDksIDB4MDAwMDAxZTl9LAorCXsweDAwMDA5YTQwLCAweDAwMDAwMDg5LCAweDAwMDAwMDI5fSwKKwl7MHgwMDAwOWE0NCwgMHgwMDAwMDE3MCwgMHgwMDAwMDA2OX0sCisJezB4MDAwMDlhNDgsIDB4MDAwMDAxYjAsIDB4MDAwMDAxOTB9LAorCXsweDAwMDA5YTRjLCAweDAwMDAwMWYwLCAweDAwMDAwMWQwfSwKKwl7MHgwMDAwOWE1MCwgMHgwMDAwMDAzMCwgMHgwMDAwMDAxMH0sCisJezB4MDAwMDlhNTQsIDB4MDAwMDAwNzAsIDB4MDAwMDAwNTB9LAorCXsweDAwMDA5YTU4LCAweDAwMDAwMTkxLCAweDAwMDAwMDkwfSwKKwl7MHgwMDAwOWE1YywgMHgwMDAwMDFkMSwgMHgwMDAwMDE1MX0sCisJezB4MDAwMDlhNjAsIDB4MDAwMDAwMTEsIDB4MDAwMDAxOTF9LAorCXsweDAwMDA5YTY0LCAweDAwMDAwMDUxLCAweDAwMDAwMWQxfSwKKwl7MHgwMDAwOWE2OCwgMHgwMDAwMDA5MSwgMHgwMDAwMDAxMX0sCisJezB4MDAwMDlhNmMsIDB4MDAwMDAxYjgsIDB4MDAwMDAwNTF9LAorCXsweDAwMDA5YTcwLCAweDAwMDAwMWY4LCAweDAwMDAwMTk4fSwKKwl7MHgwMDAwOWE3NCwgMHgwMDAwMDAzOCwgMHgwMDAwMDFkOH0sCisJezB4MDAwMDlhNzgsIDB4MDAwMDAwNzgsIDB4MDAwMDAwMTh9LAorCXsweDAwMDA5YTdjLCAweDAwMDAwMTk5LCAweDAwMDAwMDU4fSwKKwl7MHgwMDAwOWE4MCwgMHgwMDAwMDFkOSwgMHgwMDAwMDA5OH0sCisJezB4MDAwMDlhODQsIDB4MDAwMDAwMTksIDB4MDAwMDAxNTl9LAorCXsweDAwMDA5YTg4LCAweDAwMDAwMDU5LCAweDAwMDAwMTk5fSwKKwl7MHgwMDAwOWE4YywgMHgwMDAwMDA5OSwgMHgwMDAwMDFkOX0sCisJezB4MDAwMDlhOTAsIDB4MDAwMDAwZDksIDB4MDAwMDAwMTl9LAorCXsweDAwMDA5YTk0LCAweDAwMDAwMGY5LCAweDAwMDAwMDU5fSwKKwl7MHgwMDAwOWE5OCwgMHgwMDAwMDBmOSwgMHgwMDAwMDA5OX0sCisJezB4MDAwMDlhOWMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZDl9LAorCXsweDAwMDA5YWEwLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5fSwKKwl7MHgwMDAwOWFhNCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOX0sCisJezB4MDAwMDlhYTgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjl9LAorCXsweDAwMDA5YWFjLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5fSwKKwl7MHgwMDAwOWFiMCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOX0sCisJezB4MDAwMDlhYjQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjl9LAorCXsweDAwMDA5YWI4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5fSwKKwl7MHgwMDAwOWFiYywgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOX0sCisJezB4MDAwMDlhYzAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjl9LAorCXsweDAwMDA5YWM0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5fSwKKwl7MHgwMDAwOWFjOCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOX0sCisJezB4MDAwMDlhY2MsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjl9LAorCXsweDAwMDA5YWQwLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5fSwKKwl7MHgwMDAwOWFkNCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOX0sCisJezB4MDAwMDlhZDgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjl9LAorCXsweDAwMDA5YWRjLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5fSwKKwl7MHgwMDAwOWFlMCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOX0sCisJezB4MDAwMDlhZTQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjl9LAorCXsweDAwMDA5YWU4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5fSwKKwl7MHgwMDAwOWFlYywgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOX0sCisJezB4MDAwMDlhZjAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjl9LAorCXsweDAwMDA5YWY0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5fSwKKwl7MHgwMDAwOWFmOCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOX0sCisJezB4MDAwMDlhZmMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjl9LAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMVtdWzJdID0gewotICAgIHsgMHgwMDAwOThiMCwgMHgwMjEwODQyMSB9LAotICAgIHsgMHgwMDAwOThlYywgMHgwMDAwMDAwOCB9LAorCS8qIEFkZHIgICAgICBhbGxtb2RlcyAgKi8KKwl7MHgwMDAwOThiMCwgMHgwMjEwODQyMX0sCisJezB4MDAwMDk4ZWMsIDB4MDAwMDAwMDh9LAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMltdWzJdID0gewotICAgIHsgMHgwMDAwOThiMCwgMHgwZTczZmYxNyB9LAotICAgIHsgMHgwMDAwOThlMCwgMHgwMDAwMDQyMCB9LAorCS8qIEFkZHIgICAgICBhbGxtb2RlcyAgKi8KKwl7MHgwMDAwOThiMCwgMHgwZTczZmYxN30sCisJezB4MDAwMDk4ZTAsIDB4MDAwMDA0MjB9LAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rM1tdWzNdID0gewotICAgIHsgMHgwMDAwOThmMCwgMHgwMTQwMDAxOCwgMHgwMWMwMDAxOCB9LAorCS8qIEFkZHIgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgKi8KKwl7MHgwMDAwOThmMCwgMHgwMTQwMDAxOCwgMHgwMWMwMDAxOH0sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbms2W11bM10gPSB7Ci0KLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBlMDAwMDAsIDB4MDBlMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA1ZTAwMDAsIDB4MDA1ZTAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA2MjAwMDAsIDB4MDA2MjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4NDBmZjAwMDAsIDB4NDBmZjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA1ZjAwMDAsIDB4MDA1ZjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA4NzAwMDAsIDB4MDA4NzAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBmOTAwMDAsIDB4MDBmOTAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA3YjAwMDAsIDB4MDA3YjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBmNTAwMDAsIDB4MDBmNTAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBkYzAwMDAsIDB4MDBkYzAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA2MTAwYTgsIDB4MDA2MTAwYTggfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA0MjEwYTIsIDB4MDA0MjEwYTIgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAxNDAwOGYsIDB4MDAxNDAwOGYgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBjNDAwMDMsIDB4MDBjNDAwMDMgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAzMDAwZjIsIDB4MDAzMDAwZjIgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA0NDAwMTYsIDB4MDA0NDAwMTYgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA0MTAwNDAsIDB4MDA0MTAwNDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMTgwNWUsIDB4MDAwMTgwNWUgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMGMwYWIsIDB4MDAwMGMwYWIgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwZjEsIDB4MDAwMDAwZjEgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDIwODEsIDB4MDAwMDIwODEgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQgfSwKLSAgICB7IDB4MDAwMDk4ZDAsIDB4MDAwMDAwMGYsIDB4MDAxMDAwMGYgfSwKKwkvKiBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICovCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDBlMDAwMDAsIDB4MDBlMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwNWUwMDAwLCAweDAwNWUwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDEyMDAwMCwgMHgwMDEyMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDA2MjAwMDAsIDB4MDA2MjAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDIwMDAwLCAweDAwMDIwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHg0MGZmMDAwMCwgMHg0MGZmMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDA1ZjAwMDAsIDB4MDA1ZjAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwODcwMDAwLCAweDAwODcwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMGY5MDAwMCwgMHgwMGY5MDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDA3YjAwMDAsIDB4MDA3YjAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMGY1MDAwMCwgMHgwMGY1MDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDBkYzAwMDAsIDB4MDBkYzAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDYxMDBhOCwgMHgwMDYxMDBhOH0sCisJezB4MDAwMDk4OWMsIDB4MDA0MjEwYTIsIDB4MDA0MjEwYTJ9LAorCXsweDAwMDA5ODljLCAweDAwMTQwMDhmLCAweDAwMTQwMDhmfSwKKwl7MHgwMDAwOTg5YywgMHgwMGM0MDAwMywgMHgwMGM0MDAwM30sCisJezB4MDAwMDk4OWMsIDB4MDAzMDAwZjIsIDB4MDAzMDAwZjJ9LAorCXsweDAwMDA5ODljLCAweDAwNDQwMDE2LCAweDAwNDQwMDE2fSwKKwl7MHgwMDAwOTg5YywgMHgwMDQxMDA0MCwgMHgwMDQxMDA0MH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMTgwNWUsIDB4MDAwMTgwNWV9LAorCXsweDAwMDA5ODljLCAweDAwMDBjMGFiLCAweDAwMDBjMGFifSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDBmMSwgMHgwMDAwMDBmMX0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDIwODEsIDB4MDAwMDIwODF9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0fSwKKwl7MHgwMDAwOThkMCwgMHgwMDAwMDAwZiwgMHgwMDEwMDAwZn0sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbms2VFBDW11bM10gPSB7Ci0gICAgeyAweDAwMDA5ODljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwZTAwMDAwLCAweDAwZTAwMDAwIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwNWUwMDAwLCAweDAwNWUwMDAwIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwNjIwMDAwLCAweDAwNjIwMDAwIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwMDIwMDAwLCAweDAwMDIwMDAwIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDQwZmYwMDAwLCAweDQwZmYwMDAwIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwNWYwMDAwLCAweDAwNWYwMDAwIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwODcwMDAwLCAweDAwODcwMDAwIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwZjkwMDAwLCAweDAwZjkwMDAwIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwN2IwMDAwLCAweDAwN2IwMDAwIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwZjUwMDAwLCAweDAwZjUwMDAwIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwZGMwMDAwLCAweDAwZGMwMDAwIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwNjEwMGE4LCAweDAwNjEwMGE4IH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwNDIzMDIyLCAweDAwNDIzMDIyIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDIwMTQwMGRmLCAweDIwMTQwMGRmIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwYzQwMDAyLCAweDAwYzQwMDAyIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwMzAwMGYyLCAweDAwMzAwMGYyIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwNDQwMDE2LCAweDAwNDQwMDE2IH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwNDEwMDQwLCAweDAwNDEwMDQwIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwMDE4MDVlLCAweDAwMDE4MDVlIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwMDBjMGFiLCAweDAwMDBjMGFiIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwMDAwMGUxLCAweDAwMDAwMGUxIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwMDA3MDgxLCAweDAwMDA3MDgxIH0sCi0gICAgeyAweDAwMDA5ODljLCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0IH0sCi0gICAgeyAweDAwMDA5OGQwLCAweDAwMDAwMDBmLCAweDAwMTAwMDBmIH0sCisJLyogQWRkciAgICAgIDVHX0hUMjAgICAgIDVHX0hUNDAgICAqLworCXsweDAwMDA5ODljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwZTAwMDAwLCAweDAwZTAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDVlMDAwMCwgMHgwMDVlMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwNjIwMDAwLCAweDAwNjIwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4NDBmZjAwMDAsIDB4NDBmZjAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwNWYwMDAwLCAweDAwNWYwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDg3MDAwMCwgMHgwMDg3MDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDBmOTAwMDAsIDB4MDBmOTAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwN2IwMDAwLCAweDAwN2IwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDBmNTAwMDAsIDB4MDBmNTAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwZGMwMDAwLCAweDAwZGMwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDExMDAwMCwgMHgwMDExMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDA2MTAwYTgsIDB4MDA2MTAwYTh9LAorCXsweDAwMDA5ODljLCAweDAwNDIzMDIyLCAweDAwNDIzMDIyfSwKKwl7MHgwMDAwOTg5YywgMHgyMDE0MDBkZiwgMHgyMDE0MDBkZn0sCisJezB4MDAwMDk4OWMsIDB4MDBjNDAwMDIsIDB4MDBjNDAwMDJ9LAorCXsweDAwMDA5ODljLCAweDAwMzAwMGYyLCAweDAwMzAwMGYyfSwKKwl7MHgwMDAwOTg5YywgMHgwMDQ0MDAxNiwgMHgwMDQ0MDAxNn0sCisJezB4MDAwMDk4OWMsIDB4MDA0MTAwNDAsIDB4MDA0MTAwNDB9LAorCXsweDAwMDA5ODljLCAweDAwMDE4MDVlLCAweDAwMDE4MDVlfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwYzBhYiwgMHgwMDAwYzBhYn0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwZTEsIDB4MDAwMDAwZTF9LAorCXsweDAwMDA5ODljLCAweDAwMDA3MDgxLCAweDAwMDA3MDgxfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDBkNCwgMHgwMDAwMDBkNH0sCisJezB4MDAwMDk4ZDAsIDB4MDAwMDAwMGYsIDB4MDAxMDAwMGZ9LAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rN1tdWzJdID0gewotICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDUwMCB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDgwMCB9LAotICAgIHsgMHgwMDAwOThjYywgMHgwMDAwMDAwZSB9LAorCS8qIEFkZHIgICAgICBhbGxtb2RlcyAgKi8KKwl7MHgwMDAwOTg5YywgMHgwMDAwMDUwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDA4MDB9LAorCXsweDAwMDA5OGNjLCAweDAwMDAwMDBlfSwKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QWRkYWNbXVsyXSA9IHsKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDMgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMGMgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMzAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwNjAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwNTggfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOThjYywgIDB4MDAwMDAwMDAgfSwKKwkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAzfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMGN9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAzMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwNjB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDU4fSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4Y2MsIDB4MDAwMDAwMDB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZNb2Rlc185MTAwW11bNl0gPSB7Ci0gICAgeyAweDAwMDAxMDMwLCAweDAwMDAwMjMwLCAweDAwMDAwNDYwLCAweDAwMDAwMmMwLCAweDAwMDAwMTYwLCAweDAwMDAwMWUwIH0sCi0gICAgeyAweDAwMDAxMDcwLCAweDAwMDAwMTY4LCAweDAwMDAwMmQwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwIH0sCi0gICAgeyAweDAwMDAxMGIwLCAweDAwMDAwZTYwLCAweDAwMDAxY2MwLCAweDAwMDA3YzcwLCAweDAwMDAzZTM4LCAweDAwMDAxMTgwIH0sCi0gICAgeyAweDAwMDAxMGYwLCAweDAwMDBhMDAwLCAweDAwMDE0MDAwLCAweDAwMDE2MDAwLCAweDAwMDBiMDAwLCAweDAwMDE0MDA4IH0sCi0gICAgeyAweDAwMDA4MDE0LCAweDAzZTgwM2U4LCAweDA3ZDAwN2QwLCAweDEwODAxNjAwLCAweDA4NDAwYjAwLCAweDA2ZTAwNmUwIH0sCi0gICAgeyAweDAwMDA4MDFjLCAweDEyOGQ5M2E3LCAweDEyOGQ5M2NmLCAweDEyZTAxM2Q3LCAweDEyZTAxM2FiLCAweDA5ODgxM2NmIH0sCi0gICAgeyAweDAwMDA5ODA0LCAweDAwMDAwMzAwLCAweDAwMDAwM2M0LCAweDAwMDAwM2M0LCAweDAwMDAwMzAwLCAweDAwMDAwMzAzIH0sCi0gICAgeyAweDAwMDA5ODIwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwIH0sCi0gICAgeyAweDAwMDA5ODI0LCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0sCi0gICAgeyAweDAwMDA5ODI4LCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxIH0sCi0gICAgeyAweDAwMDA5ODM0LCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0sCi0gICAgeyAweDAwMDA5ODM4LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3IH0sCi0gICAgeyAweDAwMDA5ODQ0LCAweDAzNzIxNjFlLCAweDAzNzIxNjFlLCAweDAzNzIxNmEwLCAweDAzNzIxNmEwLCAweDAzNzIxNmEwIH0sCi0gICAgeyAweDAwMDA5ODQ4LCAweDAwMWE2YTY1LCAweDAwMWE2YTY1LCAweDAwMTk3YTY4LCAweDAwMTk3YTY4LCAweDAwMTk3YTY4IH0sCi0gICAgeyAweDAwMDBhODQ4LCAweDAwMWE2YTY1LCAweDAwMWE2YTY1LCAweDAwMTk3YTY4LCAweDAwMTk3YTY4LCAweDAwMTk3YTY4IH0sCi0gICAgeyAweDAwMDBiODQ4LCAweDAwMWE2YTY1LCAweDAwMWE2YTY1LCAweDAwMTk3YTY4LCAweDAwMTk3YTY4LCAweDAwMTk3YTY4IH0sCi0gICAgeyAweDAwMDA5ODUwLCAweDZkNDhiNGUyLCAweDZkNDhiNGUyLCAweDZkNDhiMGUyLCAweDZkNDhiMGUyLCAweDZkNDhiMGUyIH0sCi0gICAgeyAweDAwMDA5ODU4LCAweDdlYzgyZDJlLCAweDdlYzgyZDJlLCAweDdlYzg2ZDJlLCAweDdlYzg0ZDJlLCAweDdlYzgyZDJlIH0sCi0gICAgeyAweDAwMDA5ODVjLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlIH0sCi0gICAgeyAweDAwMDA5ODYwLCAweDAwMDQ4ZDE4LCAweDAwMDQ4ZDE4LCAweDAwMDQ4ZDIwLCAweDAwMDQ4ZDIwLCAweDAwMDQ4ZDE4IH0sCi0gICAgeyAweDAwMDBjODY0LCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwIH0sCi0gICAgeyAweDAwMDA5ODY4LCAweDQwOWE0MGQwLCAweDQwOWE0MGQwLCAweDQwOWE0MGQwLCAweDQwOWE0MGQwLCAweDQwOWE0MGQwIH0sCi0gICAgeyAweDAwMDA5ODZjLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxIH0sCi0gICAgeyAweDAwMDA5OTE0LCAweDAwMDAwN2QwLCAweDAwMDAwN2QwLCAweDAwMDAwODk4LCAweDAwMDAwODk4LCAweDAwMDAwN2QwIH0sCi0gICAgeyAweDAwMDA5OTE4LCAweDAwMDAwMDBhLCAweDAwMDAwMDE0LCAweDAwMDAwMDE2LCAweDAwMDAwMDBiLCAweDAwMDAwMDE2IH0sCi0gICAgeyAweDAwMDA5OTI0LCAweGQwMGE4YTA3LCAweGQwMGE4YTA3LCAweGQwMGE4YTExLCAweGQwMGE4YTBkLCAweGQwMGE4YTBkIH0sCi0gICAgeyAweDAwMDA5OTQwLCAweDAwNzU0NjA0LCAweDAwNzU0NjA0LCAweGZmZjgxMjA0LCAweGZmZjgxMjA0LCAweGZmZjgxMjA0IH0sCi0gICAgeyAweDAwMDA5OTQ0LCAweGRmYjgxMDIwLCAweGRmYjgxMDIwLCAweGRmYjgxMDIwLCAweGRmYjgxMDIwLCAweGRmYjgxMDIwIH0sCi0gICAgeyAweDAwMDA5OTU0LCAweDVmM2NhM2RlLCAweDVmM2NhM2RlLCAweGUyNTBhNTFlLCAweGUyNTBhNTFlLCAweGUyNTBhNTFlIH0sCi0gICAgeyAweDAwMDA5OTU4LCAweDIxMDhlY2ZmLCAweDIxMDhlY2ZmLCAweDMzODhmZmZmLCAweDMzODhmZmZmLCAweDMzODhmZmZmIH0sCi0jaWZkZWYgVEIyNDMKLSAgICB7IDB4MDAwMDk5NjAsIDB4MDAwMDA5MDAsIDB4MDAwMDA5MDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMTJkODAgfSwKLSAgICB7IDB4MDAwMGE5NjAsIDB4MDAwMDA5MDAsIDB4MDAwMDA5MDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMTJkODAgfSwKLSAgICB7IDB4MDAwMGI5NjAsIDB4MDAwMDA5MDAsIDB4MDAwMDA5MDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMTJkODAgfSwKLSAgICB7IDB4MDAwMDk5NjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDIyMTAsIDB4MDAwMDIyMTAsIDB4MDAwMDExMjAgfSwKLSNlbHNlCi0gICAgeyAweDAwMDA5OTYwLCAweDAwMDFiZmMwLCAweDAwMDFiZmMwLCAweDAwMDFiZmMwLCAweDAwMDFiZmMwLCAweDAwMDFiZmMwIH0sCi0gICAgeyAweDAwMDBhOTYwLCAweDAwMDFiZmMwLCAweDAwMDFiZmMwLCAweDAwMDFiZmMwLCAweDAwMDFiZmMwLCAweDAwMDFiZmMwIH0sCi0gICAgeyAweDAwMDBiOTYwLCAweDAwMDFiZmMwLCAweDAwMDFiZmMwLCAweDAwMDFiZmMwLCAweDAwMDFiZmMwLCAweDAwMDFiZmMwIH0sCi0gICAgeyAweDAwMDA5OTY0LCAweDAwMDAxMTIwLCAweDAwMDAxMTIwLCAweDAwMDAxMTIwLCAweDAwMDAxMTIwLCAweDAwMDAxMTIwIH0sCi0jZW5kaWYKLSAgICB7IDB4MDAwMGM5YmMsIDB4MDAxYTA2MDAsIDB4MDAxYTA2MDAsIDB4MDAxYTEwMDAsIDB4MDAxYTBjMDAsIDB4MDAxYTBjMDAgfSwKLSAgICB7IDB4MDAwMDk5YzAsIDB4MDM4OTE5YmUsIDB4MDM4OTE5YmUsIDB4MDM4OTE5YmUsIDB4MDM4OTE5YmUsIDB4MDM4OTE5YmUgfSwKLSAgICB7IDB4MDAwMDk5YzQsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcgfSwKLSAgICB7IDB4MDAwMDk5YzgsIDB4NjBmNjUzMjksIDB4NjBmNjUzMjksIDB4NjBmNjUzMjksIDB4NjBmNjUzMjksIDB4NjBmNjUzMjkgfSwKLSAgICB7IDB4MDAwMDk5Y2MsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzggfSwKLSAgICB7IDB4MDAwMDk5ZDAsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQgfSwKLSAgICB7IDB4MDAwMDk5ZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5ZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEyMDQsIDB4MDAwMDA4ODAsIDB4MDAwMDA4ODAsIDB4MDAwMDA4ODAsIDB4MDAwMDA4ODAsIDB4MDAwMDA4ODAgfSwKLSAgICB7IDB4MDAwMGEyMDgsIDB4ZDZiZTQ3ODgsIDB4ZDZiZTQ3ODgsIDB4ZDAzZTQ3ODgsIDB4ZDAzZTQ3ODgsIDB4ZDAzZTQ3ODggfSwKLSAgICB7IDB4MDAwMGEyMGMsIDB4MDAyZmMxNjAsIDB4MDAyZmMxNjAsIDB4MDAyYWMxMjAsIDB4MDAyYWMxMjAsIDB4MDAyYWMxMjAgfSwKLSAgICB7IDB4MDAwMGIyMGMsIDB4MDAyZmMxNjAsIDB4MDAyZmMxNjAsIDB4MDAyYWMxMjAsIDB4MDAyYWMxMjAsIDB4MDAyYWMxMjAgfSwKLSAgICB7IDB4MDAwMGMyMGMsIDB4MDAyZmMxNjAsIDB4MDAyZmMxNjAsIDB4MDAyYWMxMjAsIDB4MDAyYWMxMjAsIDB4MDAyYWMxMjAgfSwKLSAgICB7IDB4MDAwMGEyMWMsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSwKLSAgICB7IDB4MDAwMGEyMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAyMTAsIDB4MDAwMDAxMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEyNzQsIDB4MGExYTljYWEsIDB4MGExYTljYWEsIDB4MGExYTdjYWEsIDB4MGExYTdjYWEsIDB4MGExYTdjYWEgfSwKLSAgICB7IDB4MDAwMGEzMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMDQsIDB4MzAwMzI2MDIsIDB4MzAwMzI2MDIsIDB4MmUwMzI0MDIsIDB4MmUwMzI0MDIsIDB4MmUwMzI0MDIgfSwKLSAgICB7IDB4MDAwMGEzMDgsIDB4NDgwNzNlMDYsIDB4NDgwNzNlMDYsIDB4NGEwYTNjMDYsIDB4NGEwYTNjMDYsIDB4NGEwYTNjMDYgfSwKLSAgICB7IDB4MDAwMGEzMGMsIDB4NTYwYjRjMGEsIDB4NTYwYjRjMGEsIDB4NjIxYTU0MGIsIDB4NjIxYTU0MGIsIDB4NjIxYTU0MGIgfSwKLSAgICB7IDB4MDAwMGEzMTAsIDB4NjQxYTYwMGYsIDB4NjQxYTYwMGYsIDB4NzY0ZjZjMWIsIDB4NzY0ZjZjMWIsIDB4NzY0ZjZjMWIgfSwKLSAgICB7IDB4MDAwMGEzMTQsIDB4N2E0ZjZlMWIsIDB4N2E0ZjZlMWIsIDB4ODQ1YjdhNWEsIDB4ODQ1YjdhNWEsIDB4ODQ1YjdhNWEgfSwKLSAgICB7IDB4MDAwMGEzMTgsIDB4OGM1YjdlNWEsIDB4OGM1YjdlNWEsIDB4OTUwZjhjY2YsIDB4OTUwZjhjY2YsIDB4OTUwZjhjY2YgfSwKLSAgICB7IDB4MDAwMGEzMWMsIDB4OWQwZjk2Y2YsIDB4OWQwZjk2Y2YsIDB4YTVjZjliNGYsIDB4YTVjZjliNGYsIDB4YTVjZjliNGYgfSwKLSAgICB7IDB4MDAwMGEzMjAsIDB4YjUxZmE2OWYsIDB4YjUxZmE2OWYsIDB4YmRkZmFmMWYsIDB4YmRkZmFmMWYsIDB4YmRkZmFmMWYgfSwKLSAgICB7IDB4MDAwMGEzMjQsIDB4Y2IzZmJkMDcsIDB4Y2IzZmJjYmYsIDB4ZDFmZmM5M2YsIDB4ZDFmZmM5M2YsIDB4ZDFmZmM5M2YgfSwKLSAgICB7IDB4MDAwMGEzMjgsIDB4MDAwMGQ3YmYsIDB4MDAwMGQ3YmYsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLX07Ci0KLSNlbmRpZiAvKiBJTklUVkFMU19BUjUwMDhfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyNTAwOF9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjUwMDhfcGh5LmMKaW5kZXggYjJjMTdjOS4uM2QyYzg2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyNTAwOF9waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI1MDA4X3BoeS5jCkBAIC0xOSw3ICsxOSwzMCBAQAogI2luY2x1ZGUgIi4uL3JlZ2QuaCIKICNpbmNsdWRlICJhcjkwMDJfcGh5LmgiCiAKLS8qIEFsbCBjb2RlIGJlbG93IGlzIGZvciBub24gc2luZ2xlLWNoaXAgc29sdXRpb25zICovCisvKiBBbGwgY29kZSBiZWxvdyBpcyBmb3IgQVI1MDA4LCBBUjkwMDEsIEFSOTAwMiAqLworCitzdGF0aWMgY29uc3QgaW50IGZpcnN0ZXBfdGFibGVbXSA9CisvKiBsZXZlbDogIDAgICAxICAgMiAgIDMgICA0ICAgNSAgIDYgICA3ICAgOCAgKi8KKwl7IC00LCAtMiwgIDAsICAyLCAgNCwgIDYsICA4LCAxMCwgMTIgfTsgLyogbHZsIDAtOCwgZGVmYXVsdCAyICovCisKK3N0YXRpYyBjb25zdCBpbnQgY3ljcHdyVGhyMV90YWJsZVtdID0KKy8qIGxldmVsOiAgMCAgIDEgICAyICAgMyAgIDQgICA1ICAgNiAgIDcgICA4ICAqLworCXsgLTYsIC00LCAtMiwgIDAsICAyLCAgNCwgIDYsICA4IH07ICAgICAvKiBsdmwgMC03LCBkZWZhdWx0IDMgKi8KKworLyoKKyAqIHJlZ2lzdGVyIHZhbHVlcyB0byB0dXJuIE9GRE0gd2VhayBzaWduYWwgZGV0ZWN0aW9uIE9GRgorICovCitzdGF0aWMgY29uc3QgaW50IG0xVGhyZXNoTG93X29mZiA9IDEyNzsKK3N0YXRpYyBjb25zdCBpbnQgbTJUaHJlc2hMb3dfb2ZmID0gMTI3Oworc3RhdGljIGNvbnN0IGludCBtMVRocmVzaF9vZmYgPSAxMjc7CitzdGF0aWMgY29uc3QgaW50IG0yVGhyZXNoX29mZiA9IDEyNzsKK3N0YXRpYyBjb25zdCBpbnQgbTJDb3VudFRocl9vZmYgPSAgMzE7CitzdGF0aWMgY29uc3QgaW50IG0yQ291bnRUaHJMb3dfb2ZmID0gIDYzOworc3RhdGljIGNvbnN0IGludCBtMVRocmVzaExvd0V4dF9vZmYgPSAxMjc7CitzdGF0aWMgY29uc3QgaW50IG0yVGhyZXNoTG93RXh0X29mZiA9IDEyNzsKK3N0YXRpYyBjb25zdCBpbnQgbTFUaHJlc2hFeHRfb2ZmID0gMTI3Oworc3RhdGljIGNvbnN0IGludCBtMlRocmVzaEV4dF9vZmYgPSAxMjc7CisKIAogLyoqCiAgKiBhcjUwMDhfaHdfcGh5X21vZGlmeV9yeF9idWZmZXIoKSAtIHBlcmZvcm0gYW5hbG9nIHN3aXp6bGluZyBvZiBwYXJhbWV0ZXJzCkBAIC03NDIsMTcgKzc2NSw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChBUl9TUkVWXzkyODdfMTJfT1JfTEFURVIoYWgpKSB7Ci0JCS8qIEVuYWJsZSBBU1lOQyBGSUZPICovCi0JCVJFR19TRVRfQklUKGFoLCBBUl9NQUNfUENVX0FTWU5DX0ZJRk9fUkVHMywKLQkJCQlBUl9NQUNfUENVX0FTWU5DX0ZJRk9fUkVHM19EQVRBUEFUSF9TRUwpOwotCQlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX01PREUsIEFSX1BIWV9NT0RFX0FTWU5DRklGTyk7Ci0JCVJFR19DTFJfQklUKGFoLCBBUl9NQUNfUENVX0FTWU5DX0ZJRk9fUkVHMywKLQkJCQlBUl9NQUNfUENVX0FTWU5DX0ZJRk9fUkVHM19TT0ZUX1JFU0VUKTsKLQkJUkVHX1NFVF9CSVQoYWgsIEFSX01BQ19QQ1VfQVNZTkNfRklGT19SRUczLAotCQkJCUFSX01BQ19QQ1VfQVNZTkNfRklGT19SRUczX1NPRlRfUkVTRVQpOwotCX0KLQogCS8qCiAJICogU2V0IGNvcnJlY3QgYmFzZWJhbmQgdG8gYW5hbG9nIHNoaWZ0IHNldHRpbmcgdG8KIAkgKiBhY2Nlc3MgYW5hbG9nIGNoaXBzLgpAQCAtMTAzNyw4ICsxMDQ5LDkgQEAKIAlyZXR1cm4gcGxsOwogfQogCi1zdGF0aWMgYm9vbCBhcjUwMDhfaHdfYW5pX2NvbnRyb2woc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJICBlbnVtIGF0aDlrX2FuaV9jbWQgY21kLCBpbnQgcGFyYW0pCitzdGF0aWMgYm9vbCBhcjUwMDhfaHdfYW5pX2NvbnRyb2xfb2xkKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgICAgIGVudW0gYXRoOWtfYW5pX2NtZCBjbWQsCisJCQkJICAgICAgaW50IHBhcmFtKQogewogCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYW5pU3RhdGUgPSBhaC0+Y3VyYW5pOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwpAQCAtMTIyMCw2MCArMTIzMywzNjkgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIGJvb2wgYXI1MDA4X2h3X2FuaV9jb250cm9sX25ldyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgICAgICBlbnVtIGF0aDlrX2FuaV9jbWQgY21kLAorCQkJCSAgICAgIGludCBwYXJhbSkKK3sKKwlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlID0gYWgtPmN1cmFuaTsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKKwlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiA9IGFoLT5jdXJjaGFuOworCXMzMiB2YWx1ZSwgdmFsdWUyOworCisJc3dpdGNoIChjbWQgJiBhaC0+YW5pX2Z1bmN0aW9uKSB7CisJY2FzZSBBVEg5S19BTklfT0ZETV9XRUFLX1NJR05BTF9ERVRFQ1RJT046eworCQkvKgorCQkgKiBvbiA9PSAxIG1lYW5zIG9mZG0gd2VhayBzaWduYWwgZGV0ZWN0aW9uIGlzIE9OCisJCSAqIG9uID09IDEgaXMgdGhlIGRlZmF1bHQsIGZvciBsZXNzIG5vaXNlIGltbXVuaXR5CisJCSAqCisJCSAqIG9uID09IDAgbWVhbnMgb2ZkbSB3ZWFrIHNpZ25hbCBkZXRlY3Rpb24gaXMgT0ZGCisJCSAqIG9uID09IDAgbWVhbnMgbW9yZSBub2lzZSBpbW0KKwkJICovCisJCXUzMiBvbiA9IHBhcmFtID8gMSA6IDA7CisJCS8qCisJCSAqIG1ha2UgcmVnaXN0ZXIgc2V0dGluZyBmb3IgZGVmYXVsdAorCQkgKiAod2VhayBzaWcgZGV0ZWN0IE9OKSBjb21lIGZyb20gSU5JIGZpbGUKKwkJICovCisJCWludCBtMVRocmVzaExvdyA9IG9uID8KKwkJCWFuaVN0YXRlLT5pbmlEZWYubTFUaHJlc2hMb3cgOiBtMVRocmVzaExvd19vZmY7CisJCWludCBtMlRocmVzaExvdyA9IG9uID8KKwkJCWFuaVN0YXRlLT5pbmlEZWYubTJUaHJlc2hMb3cgOiBtMlRocmVzaExvd19vZmY7CisJCWludCBtMVRocmVzaCA9IG9uID8KKwkJCWFuaVN0YXRlLT5pbmlEZWYubTFUaHJlc2ggOiBtMVRocmVzaF9vZmY7CisJCWludCBtMlRocmVzaCA9IG9uID8KKwkJCWFuaVN0YXRlLT5pbmlEZWYubTJUaHJlc2ggOiBtMlRocmVzaF9vZmY7CisJCWludCBtMkNvdW50VGhyID0gb24gPworCQkJYW5pU3RhdGUtPmluaURlZi5tMkNvdW50VGhyIDogbTJDb3VudFRocl9vZmY7CisJCWludCBtMkNvdW50VGhyTG93ID0gb24gPworCQkJYW5pU3RhdGUtPmluaURlZi5tMkNvdW50VGhyTG93IDogbTJDb3VudFRockxvd19vZmY7CisJCWludCBtMVRocmVzaExvd0V4dCA9IG9uID8KKwkJCWFuaVN0YXRlLT5pbmlEZWYubTFUaHJlc2hMb3dFeHQgOiBtMVRocmVzaExvd0V4dF9vZmY7CisJCWludCBtMlRocmVzaExvd0V4dCA9IG9uID8KKwkJCWFuaVN0YXRlLT5pbmlEZWYubTJUaHJlc2hMb3dFeHQgOiBtMlRocmVzaExvd0V4dF9vZmY7CisJCWludCBtMVRocmVzaEV4dCA9IG9uID8KKwkJCWFuaVN0YXRlLT5pbmlEZWYubTFUaHJlc2hFeHQgOiBtMVRocmVzaEV4dF9vZmY7CisJCWludCBtMlRocmVzaEV4dCA9IG9uID8KKwkJCWFuaVN0YXRlLT5pbmlEZWYubTJUaHJlc2hFeHQgOiBtMlRocmVzaEV4dF9vZmY7CisKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NGQ09SUl9MT1csCisJCQkgICAgICBBUl9QSFlfU0ZDT1JSX0xPV19NMV9USFJFU0hfTE9XLAorCQkJICAgICAgbTFUaHJlc2hMb3cpOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU0ZDT1JSX0xPVywKKwkJCSAgICAgIEFSX1BIWV9TRkNPUlJfTE9XX00yX1RIUkVTSF9MT1csCisJCQkgICAgICBtMlRocmVzaExvdyk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TRkNPUlIsCisJCQkgICAgICBBUl9QSFlfU0ZDT1JSX00xX1RIUkVTSCwgbTFUaHJlc2gpOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU0ZDT1JSLAorCQkJICAgICAgQVJfUEhZX1NGQ09SUl9NMl9USFJFU0gsIG0yVGhyZXNoKTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NGQ09SUiwKKwkJCSAgICAgIEFSX1BIWV9TRkNPUlJfTTJDT1VOVF9USFIsIG0yQ291bnRUaHIpOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU0ZDT1JSX0xPVywKKwkJCSAgICAgIEFSX1BIWV9TRkNPUlJfTE9XX00yQ09VTlRfVEhSX0xPVywKKwkJCSAgICAgIG0yQ291bnRUaHJMb3cpOworCisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TRkNPUlJfRVhULAorCQkJICAgICAgQVJfUEhZX1NGQ09SUl9FWFRfTTFfVEhSRVNIX0xPVywgbTFUaHJlc2hMb3dFeHQpOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU0ZDT1JSX0VYVCwKKwkJCSAgICAgIEFSX1BIWV9TRkNPUlJfRVhUX00yX1RIUkVTSF9MT1csIG0yVGhyZXNoTG93RXh0KTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NGQ09SUl9FWFQsCisJCQkgICAgICBBUl9QSFlfU0ZDT1JSX0VYVF9NMV9USFJFU0gsIG0xVGhyZXNoRXh0KTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NGQ09SUl9FWFQsCisJCQkgICAgICBBUl9QSFlfU0ZDT1JSX0VYVF9NMl9USFJFU0gsIG0yVGhyZXNoRXh0KTsKKworCQlpZiAob24pCisJCQlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX1NGQ09SUl9MT1csCisJCQkJICAgIEFSX1BIWV9TRkNPUlJfTE9XX1VTRV9TRUxGX0NPUlJfTE9XKTsKKwkJZWxzZQorCQkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9TRkNPUlJfTE9XLAorCQkJCSAgICBBUl9QSFlfU0ZDT1JSX0xPV19VU0VfU0VMRl9DT1JSX0xPVyk7CisKKwkJaWYgKCFvbiAhPSBhbmlTdGF0ZS0+b2ZkbVdlYWtTaWdEZXRlY3RPZmYpIHsKKwkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAorCQkJCSAgIioqIGNoICVkOiBvZmRtIHdlYWsgc2lnbmFsOiAlcz0+JXNcbiIsCisJCQkJICBjaGFuLT5jaGFubmVsLAorCQkJCSAgIWFuaVN0YXRlLT5vZmRtV2Vha1NpZ0RldGVjdE9mZiA/CisJCQkJCSJvbiIgOiAib2ZmIiwKKwkJCQkgIG9uID8gIm9uIiA6ICJvZmYiKTsKKwkJCWlmIChvbikKKwkJCQlhaC0+c3RhdHMuYXN0X2FuaV9vZmRtb24rKzsKKwkJCWVsc2UKKwkJCQlhaC0+c3RhdHMuYXN0X2FuaV9vZmRtb2ZmKys7CisJCQlhbmlTdGF0ZS0+b2ZkbVdlYWtTaWdEZXRlY3RPZmYgPSAhb247CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgQVRIOUtfQU5JX0ZJUlNURVBfTEVWRUw6eworCQl1MzIgbGV2ZWwgPSBwYXJhbTsKKworCQlpZiAobGV2ZWwgPj0gQVJSQVlfU0laRShmaXJzdGVwX3RhYmxlKSkgeworCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCisJCQkJICAiQVRIOUtfQU5JX0ZJUlNURVBfTEVWRUw6IGxldmVsICIKKwkJCQkgICJvdXQgb2YgcmFuZ2UgKCV1ID4gJXUpXG4iLAorCQkJCSAgbGV2ZWwsCisJCQkJICAodW5zaWduZWQpIEFSUkFZX1NJWkUoZmlyc3RlcF90YWJsZSkpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLyoKKwkJICogbWFrZSByZWdpc3RlciBzZXR0aW5nIHJlbGF0aXZlIHRvIGRlZmF1bHQKKwkJICogZnJvbSBJTkkgZmlsZSAmIGNhcCB2YWx1ZQorCQkgKi8KKwkJdmFsdWUgPSBmaXJzdGVwX3RhYmxlW2xldmVsXSAtCisJCQlmaXJzdGVwX3RhYmxlW0FUSDlLX0FOSV9GSVJTVEVQX0xWTF9ORVddICsKKwkJCWFuaVN0YXRlLT5pbmlEZWYuZmlyc3RlcDsKKwkJaWYgKHZhbHVlIDwgQVRIOUtfU0lHX0ZJUlNURVBfU0VUVElOR19NSU4pCisJCQl2YWx1ZSA9IEFUSDlLX1NJR19GSVJTVEVQX1NFVFRJTkdfTUlOOworCQlpZiAodmFsdWUgPiBBVEg5S19TSUdfRklSU1RFUF9TRVRUSU5HX01BWCkKKwkJCXZhbHVlID0gQVRIOUtfU0lHX0ZJUlNURVBfU0VUVElOR19NQVg7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9GSU5EX1NJRywKKwkJCSAgICAgIEFSX1BIWV9GSU5EX1NJR19GSVJTVEVQLAorCQkJICAgICAgdmFsdWUpOworCQkvKgorCQkgKiB3ZSBuZWVkIHRvIHNldCBmaXJzdCBzdGVwIGxvdyByZWdpc3RlciB0b28KKwkJICogbWFrZSByZWdpc3RlciBzZXR0aW5nIHJlbGF0aXZlIHRvIGRlZmF1bHQKKwkJICogZnJvbSBJTkkgZmlsZSAmIGNhcCB2YWx1ZQorCQkgKi8KKwkJdmFsdWUyID0gZmlyc3RlcF90YWJsZVtsZXZlbF0gLQorCQkJIGZpcnN0ZXBfdGFibGVbQVRIOUtfQU5JX0ZJUlNURVBfTFZMX05FV10gKworCQkJIGFuaVN0YXRlLT5pbmlEZWYuZmlyc3RlcExvdzsKKwkJaWYgKHZhbHVlMiA8IEFUSDlLX1NJR19GSVJTVEVQX1NFVFRJTkdfTUlOKQorCQkJdmFsdWUyID0gQVRIOUtfU0lHX0ZJUlNURVBfU0VUVElOR19NSU47CisJCWlmICh2YWx1ZTIgPiBBVEg5S19TSUdfRklSU1RFUF9TRVRUSU5HX01BWCkKKwkJCXZhbHVlMiA9IEFUSDlLX1NJR19GSVJTVEVQX1NFVFRJTkdfTUFYOworCisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9GSU5EX1NJR19MT1csCisJCQkgICAgICBBUl9QSFlfRklORF9TSUdfRklSU1RFUF9MT1csIHZhbHVlMik7CisKKwkJaWYgKGxldmVsICE9IGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwpIHsKKwkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAorCQkJCSAgIioqIGNoICVkOiBsZXZlbCAlZD0+JWRbZGVmOiVkXSAiCisJCQkJICAiZmlyc3RlcFtsZXZlbF09JWQgaW5pPSVkXG4iLAorCQkJCSAgY2hhbi0+Y2hhbm5lbCwKKwkJCQkgIGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwsCisJCQkJICBsZXZlbCwKKwkJCQkgIEFUSDlLX0FOSV9GSVJTVEVQX0xWTF9ORVcsCisJCQkJICB2YWx1ZSwKKwkJCQkgIGFuaVN0YXRlLT5pbmlEZWYuZmlyc3RlcCk7CisJCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwKKwkJCQkgICIqKiBjaCAlZDogbGV2ZWwgJWQ9PiVkW2RlZjolZF0gIgorCQkJCSAgImZpcnN0ZXBfbG93W2xldmVsXT0lZCBpbmk9JWRcbiIsCisJCQkJICBjaGFuLT5jaGFubmVsLAorCQkJCSAgYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCwKKwkJCQkgIGxldmVsLAorCQkJCSAgQVRIOUtfQU5JX0ZJUlNURVBfTFZMX05FVywKKwkJCQkgIHZhbHVlMiwKKwkJCQkgIGFuaVN0YXRlLT5pbmlEZWYuZmlyc3RlcExvdyk7CisJCQlpZiAobGV2ZWwgPiBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsKQorCQkJCWFoLT5zdGF0cy5hc3RfYW5pX3N0ZXB1cCsrOworCQkJZWxzZSBpZiAobGV2ZWwgPCBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsKQorCQkJCWFoLT5zdGF0cy5hc3RfYW5pX3N0ZXBkb3duKys7CisJCQlhbmlTdGF0ZS0+Zmlyc3RlcExldmVsID0gbGV2ZWw7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgQVRIOUtfQU5JX1NQVVJfSU1NVU5JVFlfTEVWRUw6eworCQl1MzIgbGV2ZWwgPSBwYXJhbTsKKworCQlpZiAobGV2ZWwgPj0gQVJSQVlfU0laRShjeWNwd3JUaHIxX3RhYmxlKSkgeworCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCisJCQkJICAiQVRIOUtfQU5JX1NQVVJfSU1NVU5JVFlfTEVWRUw6IGxldmVsICIKKwkJCQkgICJvdXQgb2YgcmFuZ2UgKCV1ID4gJXUpXG4iLAorCQkJCSAgbGV2ZWwsCisJCQkJICAodW5zaWduZWQpIEFSUkFZX1NJWkUoY3ljcHdyVGhyMV90YWJsZSkpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCS8qCisJCSAqIG1ha2UgcmVnaXN0ZXIgc2V0dGluZyByZWxhdGl2ZSB0byBkZWZhdWx0CisJCSAqIGZyb20gSU5JIGZpbGUgJiBjYXAgdmFsdWUKKwkJICovCisJCXZhbHVlID0gY3ljcHdyVGhyMV90YWJsZVtsZXZlbF0gLQorCQkJY3ljcHdyVGhyMV90YWJsZVtBVEg5S19BTklfU1BVUl9JTU1VTkVfTFZMX05FV10gKworCQkJYW5pU3RhdGUtPmluaURlZi5jeWNwd3JUaHIxOworCQlpZiAodmFsdWUgPCBBVEg5S19TSUdfU1BVUl9JTU1fU0VUVElOR19NSU4pCisJCQl2YWx1ZSA9IEFUSDlLX1NJR19TUFVSX0lNTV9TRVRUSU5HX01JTjsKKwkJaWYgKHZhbHVlID4gQVRIOUtfU0lHX1NQVVJfSU1NX1NFVFRJTkdfTUFYKQorCQkJdmFsdWUgPSBBVEg5S19TSUdfU1BVUl9JTU1fU0VUVElOR19NQVg7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9USU1JTkc1LAorCQkJICAgICAgQVJfUEhZX1RJTUlORzVfQ1lDUFdSX1RIUjEsCisJCQkgICAgICB2YWx1ZSk7CisKKwkJLyoKKwkJICogc2V0IEFSX1BIWV9FWFRfQ0NBIGZvciBleHRlbnNpb24gY2hhbm5lbAorCQkgKiBtYWtlIHJlZ2lzdGVyIHNldHRpbmcgcmVsYXRpdmUgdG8gZGVmYXVsdAorCQkgKiBmcm9tIElOSSBmaWxlICYgY2FwIHZhbHVlCisJCSAqLworCQl2YWx1ZTIgPSBjeWNwd3JUaHIxX3RhYmxlW2xldmVsXSAtCisJCQkgY3ljcHdyVGhyMV90YWJsZVtBVEg5S19BTklfU1BVUl9JTU1VTkVfTFZMX05FV10gKworCQkJIGFuaVN0YXRlLT5pbmlEZWYuY3ljcHdyVGhyMUV4dDsKKwkJaWYgKHZhbHVlMiA8IEFUSDlLX1NJR19TUFVSX0lNTV9TRVRUSU5HX01JTikKKwkJCXZhbHVlMiA9IEFUSDlLX1NJR19TUFVSX0lNTV9TRVRUSU5HX01JTjsKKwkJaWYgKHZhbHVlMiA+IEFUSDlLX1NJR19TUFVSX0lNTV9TRVRUSU5HX01BWCkKKwkJCXZhbHVlMiA9IEFUSDlLX1NJR19TUFVSX0lNTV9TRVRUSU5HX01BWDsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0VYVF9DQ0EsCisJCQkgICAgICBBUl9QSFlfRVhUX1RJTUlORzVfQ1lDUFdSX1RIUjEsIHZhbHVlMik7CisKKwkJaWYgKGxldmVsICE9IGFuaVN0YXRlLT5zcHVySW1tdW5pdHlMZXZlbCkgeworCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCisJCQkJICAiKiogY2ggJWQ6IGxldmVsICVkPT4lZFtkZWY6JWRdICIKKwkJCQkgICJjeWNwd3JUaHIxW2xldmVsXT0lZCBpbmk9JWRcbiIsCisJCQkJICBjaGFuLT5jaGFubmVsLAorCQkJCSAgYW5pU3RhdGUtPnNwdXJJbW11bml0eUxldmVsLAorCQkJCSAgbGV2ZWwsCisJCQkJICBBVEg5S19BTklfU1BVUl9JTU1VTkVfTFZMX05FVywKKwkJCQkgIHZhbHVlLAorCQkJCSAgYW5pU3RhdGUtPmluaURlZi5jeWNwd3JUaHIxKTsKKwkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAorCQkJCSAgIioqIGNoICVkOiBsZXZlbCAlZD0+JWRbZGVmOiVkXSAiCisJCQkJICAiY3ljcHdyVGhyMUV4dFtsZXZlbF09JWQgaW5pPSVkXG4iLAorCQkJCSAgY2hhbi0+Y2hhbm5lbCwKKwkJCQkgIGFuaVN0YXRlLT5zcHVySW1tdW5pdHlMZXZlbCwKKwkJCQkgIGxldmVsLAorCQkJCSAgQVRIOUtfQU5JX1NQVVJfSU1NVU5FX0xWTF9ORVcsCisJCQkJICB2YWx1ZTIsCisJCQkJICBhbmlTdGF0ZS0+aW5pRGVmLmN5Y3B3clRocjFFeHQpOworCQkJaWYgKGxldmVsID4gYW5pU3RhdGUtPnNwdXJJbW11bml0eUxldmVsKQorCQkJCWFoLT5zdGF0cy5hc3RfYW5pX3NwdXJ1cCsrOworCQkJZWxzZSBpZiAobGV2ZWwgPCBhbmlTdGF0ZS0+c3B1ckltbXVuaXR5TGV2ZWwpCisJCQkJYWgtPnN0YXRzLmFzdF9hbmlfc3B1cmRvd24rKzsKKwkJCWFuaVN0YXRlLT5zcHVySW1tdW5pdHlMZXZlbCA9IGxldmVsOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIEFUSDlLX0FOSV9NUkNfQ0NLOgorCQkvKgorCQkgKiBZb3Ugc2hvdWxkIG5vdCBzZWUgdGhpcyBhcyBBUjUwMDgsIEFSOTAwMSwgQVI5MDAyCisJCSAqIGRvZXMgbm90IGhhdmUgaGFyZHdhcmUgc3VwcG9ydCBmb3IgTVJDIENDSy4KKwkJICovCisJCVdBUk5fT04oMSk7CisJCWJyZWFrOworCWNhc2UgQVRIOUtfQU5JX1BSRVNFTlQ6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAorCQkJICAiaW52YWxpZCBjbWQgJXVcbiIsIGNtZCk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwKKwkJICAiQU5JIHBhcmFtZXRlcnM6IFNJPSVkLCBvZmRtV1M9JXMgRlM9JWQgIgorCQkgICJNUkNjY2s9JXMgbGlzdGVuVGltZT0lZCBDQz0lZCBsaXN0ZW49JWQgIgorCQkgICJvZmRtRXJycz0lZCBjY2tFcnJzPSVkXG4iLAorCQkgIGFuaVN0YXRlLT5zcHVySW1tdW5pdHlMZXZlbCwKKwkJICAhYW5pU3RhdGUtPm9mZG1XZWFrU2lnRGV0ZWN0T2ZmID8gIm9uIiA6ICJvZmYiLAorCQkgIGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwsCisJCSAgIWFuaVN0YXRlLT5tcmNDQ0tPZmYgPyAib24iIDogIm9mZiIsCisJCSAgYW5pU3RhdGUtPmxpc3RlblRpbWUsCisJCSAgYW5pU3RhdGUtPmN5Y2xlQ291bnQsCisJCSAgYW5pU3RhdGUtPmxpc3RlblRpbWUsCisJCSAgYW5pU3RhdGUtPm9mZG1QaHlFcnJDb3VudCwKKwkJICBhbmlTdGF0ZS0+Y2NrUGh5RXJyQ291bnQpOworCXJldHVybiB0cnVlOworfQorCiBzdGF0aWMgdm9pZCBhcjUwMDhfaHdfZG9fZ2V0bmYoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkgICAgICBpbnQxNl90IG5mYXJyYXlbTlVNX05GX1JFQURJTkdTXSkKIHsKLQlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIAlpbnQxNl90IG5mOwogCiAJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NDQSksIEFSX1BIWV9NSU5DQ0FfUFdSKTsKLQlpZiAobmYgJiAweDEwMCkKLQkJbmYgPSAwIC0gKChuZiBeIDB4MWZmKSArIDEpOwotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkgICJORiBjYWxpYnJhdGVkIFtjdGxdIFtjaGFpbiAwXSBpcyAlZFxuIiwgbmYpOwotCW5mYXJyYXlbMF0gPSBuZjsKKwluZmFycmF5WzBdID0gc2lnbl9leHRlbmQobmYsIDkpOwogCiAJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMV9DQ0EpLCBBUl9QSFlfQ0gxX01JTkNDQV9QV1IpOwotCWlmIChuZiAmIDB4MTAwKQotCQluZiA9IDAgLSAoKG5mIF4gMHgxZmYpICsgMSk7Ci0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCSAgIk5GIGNhbGlicmF0ZWQgW2N0bF0gW2NoYWluIDFdIGlzICVkXG4iLCBuZik7Ci0JbmZhcnJheVsxXSA9IG5mOworCW5mYXJyYXlbMV0gPSBzaWduX2V4dGVuZChuZiwgOSk7CiAKIAluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gyX0NDQSksIEFSX1BIWV9DSDJfTUlOQ0NBX1BXUik7Ci0JaWYgKG5mICYgMHgxMDApCi0JCW5mID0gMCAtICgobmYgXiAweDFmZikgKyAxKTsKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJICAiTkYgY2FsaWJyYXRlZCBbY3RsXSBbY2hhaW4gMl0gaXMgJWRcbiIsIG5mKTsKLQluZmFycmF5WzJdID0gbmY7CisJbmZhcnJheVsyXSA9IHNpZ25fZXh0ZW5kKG5mLCA5KTsKKworCWlmICghSVNfQ0hBTl9IVDQwKGFoLT5jdXJjaGFuKSkKKwkJcmV0dXJuOwogCiAJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0VYVF9DQ0EpLCBBUl9QSFlfRVhUX01JTkNDQV9QV1IpOwotCWlmIChuZiAmIDB4MTAwKQotCQluZiA9IDAgLSAoKG5mIF4gMHgxZmYpICsgMSk7Ci0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCSAgIk5GIGNhbGlicmF0ZWQgW2V4dF0gW2NoYWluIDBdIGlzICVkXG4iLCBuZik7Ci0JbmZhcnJheVszXSA9IG5mOworCW5mYXJyYXlbM10gPSBzaWduX2V4dGVuZChuZiwgOSk7CiAKIAluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gxX0VYVF9DQ0EpLCBBUl9QSFlfQ0gxX0VYVF9NSU5DQ0FfUFdSKTsKLQlpZiAobmYgJiAweDEwMCkKLQkJbmYgPSAwIC0gKChuZiBeIDB4MWZmKSArIDEpOwotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkgICJORiBjYWxpYnJhdGVkIFtleHRdIFtjaGFpbiAxXSBpcyAlZFxuIiwgbmYpOwotCW5mYXJyYXlbNF0gPSBuZjsKKwluZmFycmF5WzRdID0gc2lnbl9leHRlbmQobmYsIDkpOwogCiAJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMl9FWFRfQ0NBKSwgQVJfUEhZX0NIMl9FWFRfTUlOQ0NBX1BXUik7Ci0JaWYgKG5mICYgMHgxMDApCi0JCW5mID0gMCAtICgobmYgXiAweDFmZikgKyAxKTsKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJICAiTkYgY2FsaWJyYXRlZCBbZXh0XSBbY2hhaW4gMl0gaXMgJWRcbiIsIG5mKTsKLQluZmFycmF5WzVdID0gbmY7CisJbmZhcnJheVs1XSA9IHNpZ25fZXh0ZW5kKG5mLCA5KTsKIH0KIAotc3RhdGljIHZvaWQgYXI1MDA4X2h3X2xvYWRuZihzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCisvKgorICogSW5pdGlhbGl6ZSB0aGUgQU5JIHJlZ2lzdGVyIHZhbHVlcyB3aXRoIGRlZmF1bHQgKGluaSkgdmFsdWVzLgorICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBkdXJpbmcgYSAoZnVsbCkgaGFyZHdhcmUgcmVzZXQgYWZ0ZXIKKyAqIGFsbCB0aGUgcmVnaXN0ZXJzIGFyZSBpbml0aWFsaXNlZCBmcm9tIHRoZSBJTkkuCisgKi8KK3N0YXRpYyB2b2lkIGFyNTAwOF9od19hbmlfY2FjaGVfaW5pX3JlZ3Moc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aDlrX25mY2FsX2hpc3QgKmg7Ci0JaW50IGksIGo7Ci0JaW50MzJfdCB2YWw7CisJc3RydWN0IGFyNTQxNkFuaVN0YXRlICphbmlTdGF0ZTsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKKwlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiA9IGFoLT5jdXJjaGFuOworCXN0cnVjdCBhdGg5a19hbmlfZGVmYXVsdCAqaW5pRGVmOworCWludCBpbmRleDsKKwl1MzIgdmFsOworCisJaW5kZXggPSBhdGg5a19od19nZXRfYW5pX2NoYW5uZWxfaWR4KGFoLCBjaGFuKTsKKwlhbmlTdGF0ZSA9ICZhaC0+YW5pW2luZGV4XTsKKwlhaC0+Y3VyYW5pID0gYW5pU3RhdGU7CisJaW5pRGVmID0gJmFuaVN0YXRlLT5pbmlEZWY7CisKKwlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwKKwkJICAidmVyICVkLiVkIG9wbW9kZSAldSBjaGFuICVkIE1oei8weCV4XG4iLAorCQkgIGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24sCisJCSAgYWgtPmh3X3ZlcnNpb24ubWFjUmV2LAorCQkgIGFoLT5vcG1vZGUsCisJCSAgY2hhbi0+Y2hhbm5lbCwKKwkJICBjaGFuLT5jaGFubmVsRmxhZ3MpOworCisJdmFsID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9TRkNPUlIpOworCWluaURlZi0+bTFUaHJlc2ggPSBNUyh2YWwsIEFSX1BIWV9TRkNPUlJfTTFfVEhSRVNIKTsKKwlpbmlEZWYtPm0yVGhyZXNoID0gTVModmFsLCBBUl9QSFlfU0ZDT1JSX00yX1RIUkVTSCk7CisJaW5pRGVmLT5tMkNvdW50VGhyID0gTVModmFsLCBBUl9QSFlfU0ZDT1JSX00yQ09VTlRfVEhSKTsKKworCXZhbCA9IFJFR19SRUFEKGFoLCBBUl9QSFlfU0ZDT1JSX0xPVyk7CisJaW5pRGVmLT5tMVRocmVzaExvdyA9IE1TKHZhbCwgQVJfUEhZX1NGQ09SUl9MT1dfTTFfVEhSRVNIX0xPVyk7CisJaW5pRGVmLT5tMlRocmVzaExvdyA9IE1TKHZhbCwgQVJfUEhZX1NGQ09SUl9MT1dfTTJfVEhSRVNIX0xPVyk7CisJaW5pRGVmLT5tMkNvdW50VGhyTG93ID0gTVModmFsLCBBUl9QSFlfU0ZDT1JSX0xPV19NMkNPVU5UX1RIUl9MT1cpOworCisJdmFsID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9TRkNPUlJfRVhUKTsKKwlpbmlEZWYtPm0xVGhyZXNoRXh0ID0gTVModmFsLCBBUl9QSFlfU0ZDT1JSX0VYVF9NMV9USFJFU0gpOworCWluaURlZi0+bTJUaHJlc2hFeHQgPSBNUyh2YWwsIEFSX1BIWV9TRkNPUlJfRVhUX00yX1RIUkVTSCk7CisJaW5pRGVmLT5tMVRocmVzaExvd0V4dCA9IE1TKHZhbCwgQVJfUEhZX1NGQ09SUl9FWFRfTTFfVEhSRVNIX0xPVyk7CisJaW5pRGVmLT5tMlRocmVzaExvd0V4dCA9IE1TKHZhbCwgQVJfUEhZX1NGQ09SUl9FWFRfTTJfVEhSRVNIX0xPVyk7CisJaW5pRGVmLT5maXJzdGVwID0gUkVHX1JFQURfRklFTEQoYWgsCisJCQkJCSBBUl9QSFlfRklORF9TSUcsCisJCQkJCSBBUl9QSFlfRklORF9TSUdfRklSU1RFUCk7CisJaW5pRGVmLT5maXJzdGVwTG93ID0gUkVHX1JFQURfRklFTEQoYWgsCisJCQkJCSAgICBBUl9QSFlfRklORF9TSUdfTE9XLAorCQkJCQkgICAgQVJfUEhZX0ZJTkRfU0lHX0ZJUlNURVBfTE9XKTsKKwlpbmlEZWYtPmN5Y3B3clRocjEgPSBSRUdfUkVBRF9GSUVMRChhaCwKKwkJCQkJICAgIEFSX1BIWV9USU1JTkc1LAorCQkJCQkgICAgQVJfUEhZX1RJTUlORzVfQ1lDUFdSX1RIUjEpOworCWluaURlZi0+Y3ljcHdyVGhyMUV4dCA9IFJFR19SRUFEX0ZJRUxEKGFoLAorCQkJCQkgICAgICAgQVJfUEhZX0VYVF9DQ0EsCisJCQkJCSAgICAgICBBUl9QSFlfRVhUX1RJTUlORzVfQ1lDUFdSX1RIUjEpOworCisJLyogdGhlc2UgbGV2ZWxzIGp1c3QgZ290IHJlc2V0IHRvIGRlZmF1bHRzIGJ5IHRoZSBJTkkgKi8KKwlhbmlTdGF0ZS0+c3B1ckltbXVuaXR5TGV2ZWwgPSBBVEg5S19BTklfU1BVUl9JTU1VTkVfTFZMX05FVzsKKwlhbmlTdGF0ZS0+Zmlyc3RlcExldmVsID0gQVRIOUtfQU5JX0ZJUlNURVBfTFZMX05FVzsKKwlhbmlTdGF0ZS0+b2ZkbVdlYWtTaWdEZXRlY3RPZmYgPSAhQVRIOUtfQU5JX1VTRV9PRkRNX1dFQUtfU0lHOworCWFuaVN0YXRlLT5tcmNDQ0tPZmYgPSB0cnVlOyAvKiBub3QgYXZhaWxhYmxlIG9uIHByZSBBUjkwMDMgKi8KKworCWFuaVN0YXRlLT5jeWNsZUNvdW50ID0gMDsKK30KKworc3RhdGljIHZvaWQgYXI1MDA4X2h3X3NldF9uZl9saW1pdHMoc3RydWN0IGF0aF9odyAqYWgpCit7CisJYWgtPm5mXzJnLm1heCA9IEFSX1BIWV9DQ0FfTUFYX0dPT0RfVkFMXzU0MTZfMkdIWjsKKwlhaC0+bmZfMmcubWluID0gQVJfUEhZX0NDQV9NSU5fR09PRF9WQUxfNTQxNl8yR0haOworCWFoLT5uZl8yZy5ub21pbmFsID0gQVJfUEhZX0NDQV9OT01fVkFMXzU0MTZfMkdIWjsKKwlhaC0+bmZfNWcubWF4ID0gQVJfUEhZX0NDQV9NQVhfR09PRF9WQUxfNTQxNl81R0haOworCWFoLT5uZl81Zy5taW4gPSBBUl9QSFlfQ0NBX01JTl9HT09EX1ZBTF81NDE2XzVHSFo7CisJYWgtPm5mXzVnLm5vbWluYWwgPSBBUl9QSFlfQ0NBX05PTV9WQUxfNTQxNl81R0haOworfQorCit2b2lkIGFyNTAwOF9od19hdHRhY2hfcGh5X29wcyhzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlzdHJ1Y3QgYXRoX2h3X3ByaXZhdGVfb3BzICpwcml2X29wcyA9IGF0aDlrX2h3X3ByaXZhdGVfb3BzKGFoKTsKIAljb25zdCB1MzIgYXI1NDE2X2NjYV9yZWdzWzZdID0gewogCQlBUl9QSFlfQ0NBLAogCQlBUl9QSFlfQ0gxX0NDQSwKQEAgLTEyODIsNjcgKzE2MDQsNiBAQAogCQlBUl9QSFlfQ0gxX0VYVF9DQ0EsCiAJCUFSX1BIWV9DSDJfRVhUX0NDQQogCX07Ci0JdTggY2hhaW5tYXNrLCByeF9jaGFpbl9zdGF0dXM7Ci0KLQlyeF9jaGFpbl9zdGF0dXMgPSBSRUdfUkVBRChhaCwgQVJfUEhZX1JYX0NIQUlOTUFTSyk7Ci0JaWYgKEFSX1NSRVZfOTI4NShhaCkgfHwgQVJfU1JFVl85MjcxKGFoKSkKLQkJY2hhaW5tYXNrID0gMHg5OwotCWVsc2UgaWYgKEFSX1NSRVZfOTI4MChhaCkgfHwgQVJfU1JFVl85Mjg3KGFoKSkgewotCQlpZiAoKHJ4X2NoYWluX3N0YXR1cyAmIDB4MikgfHwgKHJ4X2NoYWluX3N0YXR1cyAmIDB4NCkpCi0JCQljaGFpbm1hc2sgPSAweDFCOwotCQllbHNlCi0JCQljaGFpbm1hc2sgPSAweDA5OwotCX0gZWxzZSB7Ci0JCWlmIChyeF9jaGFpbl9zdGF0dXMgJiAweDQpCi0JCQljaGFpbm1hc2sgPSAweDNGOwotCQllbHNlIGlmIChyeF9jaGFpbl9zdGF0dXMgJiAweDIpCi0JCQljaGFpbm1hc2sgPSAweDFCOwotCQllbHNlCi0JCQljaGFpbm1hc2sgPSAweDA5OwotCX0KLQotCWggPSBhaC0+bmZDYWxIaXN0OwotCi0JZm9yIChpID0gMDsgaSA8IE5VTV9ORl9SRUFESU5HUzsgaSsrKSB7Ci0JCWlmIChjaGFpbm1hc2sgJiAoMSA8PCBpKSkgewotCQkJdmFsID0gUkVHX1JFQUQoYWgsIGFyNTQxNl9jY2FfcmVnc1tpXSk7Ci0JCQl2YWwgJj0gMHhGRkZGRkUwMDsKLQkJCXZhbCB8PSAoKCh1MzIpIChoW2ldLnByaXZORikgPDwgMSkgJiAweDFmZik7Ci0JCQlSRUdfV1JJVEUoYWgsIGFyNTQxNl9jY2FfcmVnc1tpXSwgdmFsKTsKLQkJfQotCX0KLQotCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsCi0JCSAgICBBUl9QSFlfQUdDX0NPTlRST0xfRU5BQkxFX05GKTsKLQlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAotCQkgICAgQVJfUEhZX0FHQ19DT05UUk9MX05PX1VQREFURV9ORik7Ci0JUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwgQVJfUEhZX0FHQ19DT05UUk9MX05GKTsKLQotCWZvciAoaiA9IDA7IGogPCA1OyBqKyspIHsKLQkJaWYgKChSRUdfUkVBRChhaCwgQVJfUEhZX0FHQ19DT05UUk9MKSAmCi0JCSAgICAgQVJfUEhZX0FHQ19DT05UUk9MX05GKSA9PSAwKQotCQkJYnJlYWs7Ci0JCXVkZWxheSg1MCk7Ci0JfQotCi0JRU5BQkxFX1JFR1dSSVRFX0JVRkZFUihhaCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX05GX1JFQURJTkdTOyBpKyspIHsKLQkJaWYgKGNoYWlubWFzayAmICgxIDw8IGkpKSB7Ci0JCQl2YWwgPSBSRUdfUkVBRChhaCwgYXI1NDE2X2NjYV9yZWdzW2ldKTsKLQkJCXZhbCAmPSAweEZGRkZGRTAwOwotCQkJdmFsIHw9ICgoKHUzMikgKC01MCkgPDwgMSkgJiAweDFmZik7Ci0JCQlSRUdfV1JJVEUoYWgsIGFyNTQxNl9jY2FfcmVnc1tpXSwgdmFsKTsKLQkJfQotCX0KLQotCVJFR1dSSVRFX0JVRkZFUl9GTFVTSChhaCk7Ci0JRElTQUJMRV9SRUdXUklURV9CVUZGRVIoYWgpOwotfQotCi12b2lkIGFyNTAwOF9od19hdHRhY2hfcGh5X29wcyhzdHJ1Y3QgYXRoX2h3ICphaCkKLXsKLQlzdHJ1Y3QgYXRoX2h3X3ByaXZhdGVfb3BzICpwcml2X29wcyA9IGF0aDlrX2h3X3ByaXZhdGVfb3BzKGFoKTsKIAogCXByaXZfb3BzLT5yZl9zZXRfZnJlcSA9IGFyNTAwOF9od19zZXRfY2hhbm5lbDsKIAlwcml2X29wcy0+c3B1cl9taXRpZ2F0ZV9mcmVxID0gYXI1MDA4X2h3X3NwdXJfbWl0aWdhdGU7CkBAIC0xMzYxLDkgKzE2MjIsMTMgQEAKIAlwcml2X29wcy0+ZW5hYmxlX3Jma2lsbCA9IGFyNTAwOF9od19lbmFibGVfcmZraWxsOwogCXByaXZfb3BzLT5yZXN0b3JlX2NoYWlubWFzayA9IGFyNTAwOF9yZXN0b3JlX2NoYWlubWFzazsKIAlwcml2X29wcy0+c2V0X2RpdmVyc2l0eSA9IGFyNTAwOF9zZXRfZGl2ZXJzaXR5OwotCXByaXZfb3BzLT5hbmlfY29udHJvbCA9IGFyNTAwOF9od19hbmlfY29udHJvbDsKIAlwcml2X29wcy0+ZG9fZ2V0bmYgPSBhcjUwMDhfaHdfZG9fZ2V0bmY7Ci0JcHJpdl9vcHMtPmxvYWRuZiA9IGFyNTAwOF9od19sb2FkbmY7CisKKwlpZiAobW9kcGFyYW1fZm9yY2VfbmV3X2FuaSkgeworCQlwcml2X29wcy0+YW5pX2NvbnRyb2wgPSBhcjUwMDhfaHdfYW5pX2NvbnRyb2xfbmV3OworCQlwcml2X29wcy0+YW5pX2NhY2hlX2luaV9yZWdzID0gYXI1MDA4X2h3X2FuaV9jYWNoZV9pbmlfcmVnczsKKwl9IGVsc2UKKwkJcHJpdl9vcHMtPmFuaV9jb250cm9sID0gYXI1MDA4X2h3X2FuaV9jb250cm9sX29sZDsKIAogCWlmIChBUl9TUkVWXzkxMDAoYWgpKQogCQlwcml2X29wcy0+Y29tcHV0ZV9wbGxfY29udHJvbCA9IGFyOTEwMF9od19jb21wdXRlX3BsbF9jb250cm9sOwpAQCAtMTM3MSw0ICsxNjM2LDcgQEAKIAkJcHJpdl9vcHMtPmNvbXB1dGVfcGxsX2NvbnRyb2wgPSBhcjkxNjBfaHdfY29tcHV0ZV9wbGxfY29udHJvbDsKIAllbHNlCiAJCXByaXZfb3BzLT5jb21wdXRlX3BsbF9jb250cm9sID0gYXI1MDA4X2h3X2NvbXB1dGVfcGxsX2NvbnRyb2w7CisKKwlhcjUwMDhfaHdfc2V0X25mX2xpbWl0cyhhaCk7CisJbWVtY3B5KGFoLT5uZl9yZWdzLCBhcjU0MTZfY2NhX3JlZ3MsIHNpemVvZihhaC0+bmZfcmVncykpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMV9pbml0dmFscy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMV9pbml0dmFscy5oCmluZGV4IDBiOTRiZDMuLjY5YTk0YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDFfaW5pdHZhbHMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAxX2luaXR2YWxzLmgKQEAgLTEsMTI1NCArMSwxMzU3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2TW9kZXNfOTEwMFtdWzZdID0geworCXsweDAwMDAxMDMwLCAweDAwMDAwMjMwLCAweDAwMDAwNDYwLCAweDAwMDAwMmMwLCAweDAwMDAwMTYwLCAweDAwMDAwMWUwfSwKKwl7MHgwMDAwMTA3MCwgMHgwMDAwMDE2OCwgMHgwMDAwMDJkMCwgMHgwMDAwMDMxOCwgMHgwMDAwMDE4YywgMHgwMDAwMDFlMH0sCisJezB4MDAwMDEwYjAsIDB4MDAwMDBlNjAsIDB4MDAwMDFjYzAsIDB4MDAwMDdjNzAsIDB4MDAwMDNlMzgsIDB4MDAwMDExODB9LAorCXsweDAwMDAxMGYwLCAweDAwMDBhMDAwLCAweDAwMDE0MDAwLCAweDAwMDE2MDAwLCAweDAwMDBiMDAwLCAweDAwMDE0MDA4fSwKKwl7MHgwMDAwODAxNCwgMHgwM2U4MDNlOCwgMHgwN2QwMDdkMCwgMHgxMDgwMTYwMCwgMHgwODQwMGIwMCwgMHgwNmUwMDZlMH0sCisJezB4MDAwMDgwMWMsIDB4MTI4ZDkzYTcsIDB4MTI4ZDkzY2YsIDB4MTJlMDEzZDcsIDB4MTJlMDEzYWIsIDB4MDk4ODEzY2Z9LAorCXsweDAwMDA4MTIwLCAweDA4ZjA0ODAwLCAweDA4ZjA0ODAwLCAweDA4ZjA0ODEwLCAweDA4ZjA0ODEwLCAweDA4ZjA0ODEwfSwKKwl7MHgwMDAwODFkMCwgMHgwMDAwMzIxMCwgMHgwMDAwMzIxMCwgMHgwMDAwMzIwYSwgMHgwMDAwMzIwYSwgMHgwMDAwMzIwYX0sCisJezB4MDAwMDk4MDQsIDB4MDAwMDAzMDAsIDB4MDAwMDAzYzQsIDB4MDAwMDAzYzQsIDB4MDAwMDAzMDAsIDB4MDAwMDAzMDN9LAorCXsweDAwMDA5ODIwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwfSwKKwl7MHgwMDAwOTgyNCwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZX0sCisJezB4MDAwMDk4MjgsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDF9LAorCXsweDAwMDA5ODM0LCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlfSwKKwl7MHgwMDAwOTgzOCwgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwN30sCisJezB4MDAwMDk4NDQsIDB4MDM3MjE2MWUsIDB4MDM3MjE2MWUsIDB4MDM3MjE2YTAsIDB4MDM3MjE2YTAsIDB4MDM3MjE2YTB9LAorCXsweDAwMDA5ODQ4LCAweDAwMWE2YTY1LCAweDAwMWE2YTY1LCAweDAwMTk3YTY4LCAweDAwMTk3YTY4LCAweDAwMTk3YTY4fSwKKwl7MHgwMDAwYTg0OCwgMHgwMDFhNmE2NSwgMHgwMDFhNmE2NSwgMHgwMDE5N2E2OCwgMHgwMDE5N2E2OCwgMHgwMDE5N2E2OH0sCisJezB4MDAwMGI4NDgsIDB4MDAxYTZhNjUsIDB4MDAxYTZhNjUsIDB4MDAxOTdhNjgsIDB4MDAxOTdhNjgsIDB4MDAxOTdhNjh9LAorCXsweDAwMDA5ODUwLCAweDZjNDhiNGUyLCAweDZkNDhiNGUyLCAweDZkNDhiMGUyLCAweDZjNDhiMGUyLCAweDZjNDhiMGUyfSwKKwl7MHgwMDAwOTg1OCwgMHg3ZWM4MmQyZSwgMHg3ZWM4MmQyZSwgMHg3ZWM4MmQyZSwgMHg3ZWM4MmQyZSwgMHg3ZWM4MmQyZX0sCisJezB4MDAwMDk4NWMsIDB4MzEzOTVkNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTVkNWUsIDB4MzEzOTVkNWV9LAorCXsweDAwMDA5ODYwLCAweDAwMDQ4ZDE4LCAweDAwMDQ4ZDE4LCAweDAwMDQ4ZDIwLCAweDAwMDQ4ZDIwLCAweDAwMDQ4ZDE4fSwKKwl7MHgwMDAwYzg2NCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMH0sCisJezB4MDAwMDk4NjgsIDB4NDA5YTQwZDAsIDB4NDA5YTQwZDAsIDB4NDA5YTQwZDAsIDB4NDA5YTQwZDAsIDB4NDA5YTQwZDB9LAorCXsweDAwMDA5ODZjLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxfSwKKwl7MHgwMDAwOTkxNCwgMHgwMDAwMDdkMCwgMHgwMDAwMGZhMCwgMHgwMDAwMTEzMCwgMHgwMDAwMDg5OCwgMHgwMDAwMDdkMH0sCisJezB4MDAwMDk5MTgsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTYsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMTZ9LAorCXsweDAwMDA5OTI0LCAweGQwMGE4YTA3LCAweGQwMGE4YTA3LCAweGQwMGE4YTBkLCAweGQwMGE4YTBkLCAweGQwMGE4YTBkfSwKKwl7MHgwMDAwOTk0MCwgMHgwMDc1MDYwNCwgMHgwMDc1NDYwNCwgMHhmZmY4MTIwNCwgMHhmZmY4MTIwNCwgMHhmZmY4MTIwNH0sCisJezB4MDAwMDk5NDQsIDB4ZGZiODEwMjAsIDB4ZGZiODEwMjAsIDB4ZGZiODEwMjAsIDB4ZGZiODEwMjAsIDB4ZGZiODEwMjB9LAorCXsweDAwMDA5OTU0LCAweDVmM2NhM2RlLCAweDVmM2NhM2RlLCAweGUyNTBhNTFlLCAweGUyNTBhNTFlLCAweGUyNTBhNTFlfSwKKwl7MHgwMDAwOTk1OCwgMHgyMTA4ZWNmZiwgMHgyMTA4ZWNmZiwgMHgzMzg4ZmZmZiwgMHgzMzg4ZmZmZiwgMHgzMzg4ZmZmZn0sCisJezB4MDAwMDk5NjAsIDB4MDAwMWJmYzAsIDB4MDAwMWJmYzAsIDB4MDAwMWJmYzAsIDB4MDAwMWJmYzAsIDB4MDAwMWJmYzB9LAorCXsweDAwMDBhOTYwLCAweDAwMDFiZmMwLCAweDAwMDFiZmMwLCAweDAwMDFiZmMwLCAweDAwMDFiZmMwLCAweDAwMDFiZmMwfSwKKwl7MHgwMDAwYjk2MCwgMHgwMDAxYmZjMCwgMHgwMDAxYmZjMCwgMHgwMDAxYmZjMCwgMHgwMDAxYmZjMCwgMHgwMDAxYmZjMH0sCisJezB4MDAwMDk5NjQsIDB4MDAwMDExMjAsIDB4MDAwMDExMjAsIDB4MDAwMDExMjAsIDB4MDAwMDExMjAsIDB4MDAwMDExMjB9LAorCXsweDAwMDBjOWJjLCAweDAwMWEwNjAwLCAweDAwMWEwNjAwLCAweDAwMWExMDAwLCAweDAwMWEwYzAwLCAweDAwMWEwYzAwfSwKKwl7MHgwMDAwOTljMCwgMHgwMzg5MTliZSwgMHgwMzg5MTliZSwgMHgwMzg5MTliZSwgMHgwMzg5MTliZSwgMHgwMzg5MTliZX0sCisJezB4MDAwMDk5YzQsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzd9LAorCXsweDAwMDA5OWM4LCAweDZhZjY1MzI5LCAweDZhZjY1MzI5LCAweDZhZjY1MzI5LCAweDZhZjY1MzI5LCAweDZhZjY1MzI5fSwKKwl7MHgwMDAwOTljYywgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOH0sCisJezB4MDAwMDk5ZDAsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODR9LAorCXsweDAwMDA5OWQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTlkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyMDQsIDB4MDAwMDA4ODAsIDB4MDAwMDA4ODAsIDB4MDAwMDA4ODAsIDB4MDAwMDA4ODAsIDB4MDAwMDA4ODB9LAorCXsweDAwMDBhMjA4LCAweGQ2YmU0Nzg4LCAweGQ2YmU0Nzg4LCAweGQwM2U0Nzg4LCAweGQwM2U0Nzg4LCAweGQwM2U0Nzg4fSwKKwl7MHgwMDAwYTIwYywgMHgwMDJmYzE2MCwgMHgwMDJmYzE2MCwgMHgwMDJhYzEyMCwgMHgwMDJhYzEyMCwgMHgwMDJhYzEyMH0sCisJezB4MDAwMGIyMGMsIDB4MDAyZmMxNjAsIDB4MDAyZmMxNjAsIDB4MDAyYWMxMjAsIDB4MDAyYWMxMjAsIDB4MDAyYWMxMjB9LAorCXsweDAwMDBjMjBjLCAweDAwMmZjMTYwLCAweDAwMmZjMTYwLCAweDAwMmFjMTIwLCAweDAwMmFjMTIwLCAweDAwMmFjMTIwfSwKKwl7MHgwMDAwYTIxYywgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYX0sCisJezB4MDAwMGEyMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAyMTAsIDB4MDAwMDAxMDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMjc0LCAweDBhMWE5Y2FhLCAweDBhMWE5Y2FhLCAweDBhMWE3Y2FhLCAweDBhMWE3Y2FhLCAweDBhMWE3Y2FhfSwKKwl7MHgwMDAwYTMwMCwgMHgxODAxMDAwMCwgMHgxODAxMDAwMCwgMHgxODAxMDAwMCwgMHgxODAxMDAwMCwgMHgxODAxMDAwMH0sCisJezB4MDAwMGEzMDQsIDB4MzAwMzI2MDIsIDB4MzAwMzI2MDIsIDB4MmUwMzI0MDIsIDB4MmUwMzI0MDIsIDB4MmUwMzI0MDJ9LAorCXsweDAwMDBhMzA4LCAweDQ4MDczZTA2LCAweDQ4MDczZTA2LCAweDRhMGEzYzA2LCAweDRhMGEzYzA2LCAweDRhMGEzYzA2fSwKKwl7MHgwMDAwYTMwYywgMHg1NjBiNGMwYSwgMHg1NjBiNGMwYSwgMHg2MjFhNTQwYiwgMHg2MjFhNTQwYiwgMHg2MjFhNTQwYn0sCisJezB4MDAwMGEzMTAsIDB4NjQxYTYwMGYsIDB4NjQxYTYwMGYsIDB4NzY0ZjZjMWIsIDB4NzY0ZjZjMWIsIDB4NzY0ZjZjMWJ9LAorCXsweDAwMDBhMzE0LCAweDdhNGY2ZTFiLCAweDdhNGY2ZTFiLCAweDg0NWI3YTVhLCAweDg0NWI3YTVhLCAweDg0NWI3YTVhfSwKKwl7MHgwMDAwYTMxOCwgMHg4YzViN2U1YSwgMHg4YzViN2U1YSwgMHg5NTBmOGNjZiwgMHg5NTBmOGNjZiwgMHg5NTBmOGNjZn0sCisJezB4MDAwMGEzMWMsIDB4OWQwZjk2Y2YsIDB4OWQwZjk2Y2YsIDB4YTVjZjliNGYsIDB4YTVjZjliNGYsIDB4YTVjZjliNGZ9LAorCXsweDAwMDBhMzIwLCAweGI1MWZhNjlmLCAweGI1MWZhNjlmLCAweGJkZGZhZjFmLCAweGJkZGZhZjFmLCAweGJkZGZhZjFmfSwKKwl7MHgwMDAwYTMyNCwgMHhjYjNmYmQwNywgMHhjYjNmYmNiZiwgMHhkMWZmYzkzZiwgMHhkMWZmYzkzZiwgMHhkMWZmYzkzZn0sCisJezB4MDAwMGEzMjgsIDB4MDAwMGQ3YmYsIDB4MDAwMGQ3YmYsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorfTsKIAogc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZDb21tb25fOTEwMFtdWzJdID0gewotICAgIHsgMHgwMDAwMDAwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDAyMDAxNSB9LAotICAgIHsgMHgwMDAwMDAzNCwgMHgwMDAwMDAwNSB9LAotICAgIHsgMHgwMDAwMDA0MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDA0NCwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwMDA0OCwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwMDA0YywgMHgwMDAwMDAxMCB9LAotICAgIHsgMHgwMDAwMDA1MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDA1NCwgMHgwMDAwMDAxZiB9LAotICAgIHsgMHgwMDAwMDgwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDgwNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDgwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDgwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDgxMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDgxNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDgxOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDgxYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDgyMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDgyNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTA0MCwgMHgwMDJmZmMwZiB9LAotICAgIHsgMHgwMDAwMTA0NCwgMHgwMDJmZmMwZiB9LAotICAgIHsgMHgwMDAwMTA0OCwgMHgwMDJmZmMwZiB9LAotICAgIHsgMHgwMDAwMTA0YywgMHgwMDJmZmMwZiB9LAotICAgIHsgMHgwMDAwMTA1MCwgMHgwMDJmZmMwZiB9LAotICAgIHsgMHgwMDAwMTA1NCwgMHgwMDJmZmMwZiB9LAotICAgIHsgMHgwMDAwMTA1OCwgMHgwMDJmZmMwZiB9LAotICAgIHsgMHgwMDAwMTA1YywgMHgwMDJmZmMwZiB9LAotICAgIHsgMHgwMDAwMTA2MCwgMHgwMDJmZmMwZiB9LAotICAgIHsgMHgwMDAwMTA2NCwgMHgwMDJmZmMwZiB9LAotICAgIHsgMHgwMDAwMTIzMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTI3MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTAzOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTA3OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTBiOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTBmOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTEzOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTE3OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTFiOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTFmOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTIzOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTI3OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTJiOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTJmOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTMzOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTM3OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTNiOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTNmOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTQzOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTQ3OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTRiOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTRmOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTUzOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTU3OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTViOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTVmOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTYzOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTY3OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTZiOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTZmOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTczOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTc3OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTdiOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTdmOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTAzYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTA3YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTBiYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTBmYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTEzYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTE3YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTFiYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTFmYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTIzYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTI3YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTJiYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTJmYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTMzYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTM3YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTNiYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTNmYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTQzYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMTQ3YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAyMDAxMCwgMHgwMDAwMDAwMyB9LAotICAgIHsgMHgwMDAyMDAzOCwgMHgwMDAwMDRjMiB9LAotICAgIHsgMHgwMDAwODAwNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODAwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODAwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODAxOCwgMHgwMDAwMDcwMCB9LAotICAgIHsgMHgwMDAwODAyMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODAzOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODAzYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODA0OCwgMHg0MDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODA1NCwgMHgwMDAwNDAwMCB9LAotICAgIHsgMHgwMDAwODA1OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODA1YywgMHgwMDBmYzc4ZiB9LAotICAgIHsgMHgwMDAwODA2MCwgMHgwMDAwMDAwZiB9LAotICAgIHsgMHgwMDAwODA2NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODBjMCwgMHgyYTgyMzAxYSB9LAotICAgIHsgMHgwMDAwODBjNCwgMHgwNWRjMDFlMCB9LAotICAgIHsgMHgwMDAwODBjOCwgMHgxZjQwMjcxMCB9LAotICAgIHsgMHgwMDAwODBjYywgMHgwMWY0MDAwMCB9LAotICAgIHsgMHgwMDAwODBkMCwgMHgwMDAwMWUwMCB9LAotICAgIHsgMHgwMDAwODBkNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODBkOCwgMHgwMDQwMDAwMCB9LAotICAgIHsgMHgwMDAwODBlMCwgMHhmZmZmZmZmZiB9LAotICAgIHsgMHgwMDAwODBlNCwgMHgwMDAwZmZmZiB9LAotICAgIHsgMHgwMDAwODBlOCwgMHgwMDNmM2YzZiB9LAotICAgIHsgMHgwMDAwODBlYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODBmMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODBmNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODBmOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODBmYywgMHgwMDAyMDAwMCB9LAotICAgIHsgMHgwMDAwODEwMCwgMHgwMDAyMDAwMCB9LAotICAgIHsgMHgwMDAwODEwNCwgMHgwMDAwMDAwMSB9LAotICAgIHsgMHgwMDAwODEwOCwgMHgwMDAwMDA1MiB9LAotICAgIHsgMHgwMDAwODEwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODExMCwgMHgwMDAwMDE2OCB9LAotICAgIHsgMHgwMDAwODExOCwgMHgwMDAxMDBhYSB9LAotICAgIHsgMHgwMDAwODExYywgMHgwMDAwMzIxMCB9LAotICAgIHsgMHgwMDAwODEyMCwgMHgwOGYwNDgwMCB9LAotICAgIHsgMHgwMDAwODEyNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODEyOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODEyYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODEzMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODEzNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODEzOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODEzYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODE0NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODE2OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODE2YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODE3MCwgMHgzMjE0MzMyMCB9LAotICAgIHsgMHgwMDAwODE3NCwgMHhmYWE0ZmE1MCB9LAotICAgIHsgMHgwMDAwODE3OCwgMHgwMDAwMDEwMCB9LAotICAgIHsgMHgwMDAwODE3YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODFjNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODFkMCwgMHgwMDAwMzIxMCB9LAotICAgIHsgMHgwMDAwODFlYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODFmMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODFmNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODFmOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODFmYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIwNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIxMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIxNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIxOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIxYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIyMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIyNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIyOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIyYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIzMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIzNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIzOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODIzYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODI0MCwgMHgwMDEwMDAwMCB9LAotICAgIHsgMHgwMDAwODI0NCwgMHgwMDEwZjQwMCB9LAotICAgIHsgMHgwMDAwODI0OCwgMHgwMDAwMDEwMCB9LAotICAgIHsgMHgwMDAwODI0YywgMHgwMDAxZTgwMCB9LAotICAgIHsgMHgwMDAwODI1MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODI1NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODI1OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODI1YywgMHg0MDAwMDBmZiB9LAotICAgIHsgMHgwMDAwODI2MCwgMHgwMDA4MDkyMiB9LAotICAgIHsgMHgwMDAwODI3MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODI3NCwgMHg0MDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODI3OCwgMHgwMDNlNDE4MCB9LAotICAgIHsgMHgwMDAwODI3YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODI4NCwgMHgwMDAwMDAyYyB9LAotICAgIHsgMHgwMDAwODI4OCwgMHgwMDAwMDAyYyB9LAotICAgIHsgMHgwMDAwODI4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODI5NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODI5OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODMwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODMwNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODMwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODMwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODMxMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODMxNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODMxOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODMyOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODMyYywgMHgwMDAwMDAwNyB9LAotICAgIHsgMHgwMDAwODMzMCwgMHgwMDAwMDMwMiB9LAotICAgIHsgMHgwMDAwODMzNCwgMHgwMDAwMGUwMCB9LAotICAgIHsgMHgwMDAwODMzOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODMzYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODM0MCwgMHgwMDAxMDdmZiB9LAotICAgIHsgMHgwMDAwOTgwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTgwYywgMHhhZDg0OGUxOSB9LAotICAgIHsgMHgwMDAwOTgxMCwgMHg3ZDE0ZTAwMCB9LAotICAgIHsgMHgwMDAwOTgxNCwgMHg5YzBhOWY2YiB9LAotICAgIHsgMHgwMDAwOTgxYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTgyYywgMHgwMDAwYTAwMCB9LAotICAgIHsgMHgwMDAwOTgzMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTgzYywgMHgwMDIwMDQwMCB9LAotICAgIHsgMHgwMDAwOTg0MCwgMHgyMDZhMDFhZSB9LAotICAgIHsgMHgwMDAwOTg0YywgMHgxMjg0MjMzYyB9LAotICAgIHsgMHgwMDAwOTg1NCwgMHgwMDAwMDg1OSB9LAotICAgIHsgMHgwMDAwOTkwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTkwNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTkwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTkwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTkxYywgMHgxMDAwMGZmZiB9LAotICAgIHsgMHgwMDAwOTkyMCwgMHgwNTEwMDAwMCB9LAotICAgIHsgMHgwMDAwYTkyMCwgMHgwNTEwMDAwMCB9LAotICAgIHsgMHgwMDAwYjkyMCwgMHgwNTEwMDAwMCB9LAotICAgIHsgMHgwMDAwOTkyOCwgMHgwMDAwMDAwMSB9LAotICAgIHsgMHgwMDAwOTkyYywgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwOTkzNCwgMHgxZTFmMjAyMiB9LAotICAgIHsgMHgwMDAwOTkzOCwgMHgwYTBiMGMwZCB9LAotICAgIHsgMHgwMDAwOTkzYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTk0OCwgMHg5MjgwYjIxMiB9LAotICAgIHsgMHgwMDAwOTk0YywgMHgwMDAyMDAyOCB9LAotICAgIHsgMHgwMDAwYzk1YywgMHgwMDRiNmE4ZSB9LAotICAgIHsgMHgwMDAwYzk2OCwgMHgwMDAwMDNjZSB9LAotICAgIHsgMHgwMDAwOTk3MCwgMHgxOTBmYjUxNSB9LAotICAgIHsgMHgwMDAwOTk3NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTk3OCwgMHgwMDAwMDAwMSB9LAotICAgIHsgMHgwMDAwOTk3YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTk4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTk4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTk4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTk4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTk5MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTk5NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTk5OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTk5YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTlhMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTlhNCwgMHgwMDAwMDAwMSB9LAotICAgIHsgMHgwMDAwOTlhOCwgMHgyMDFmZmYwMCB9LAotICAgIHsgMHgwMDAwOTlhYywgMHgwMDZmMDAwMCB9LAotICAgIHsgMHgwMDAwOTliMCwgMHgwMzA1MTAwMCB9LAotICAgIHsgMHgwMDAwOTlkYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTllMCwgMHgwMDAwMDIwMCB9LAotICAgIHsgMHgwMDAwOTllNCwgMHhhYWFhYWFhYSB9LAotICAgIHsgMHgwMDAwOTllOCwgMHgzYzQ2NjQ3OCB9LAotICAgIHsgMHgwMDAwOTllYywgMHgwY2M4MGNhYSB9LAotICAgIHsgMHgwMDAwOTlmYywgMHgwMDAwMTA0MiB9LAotICAgIHsgMHgwMDAwOWIwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIwNCwgMHgwMDAwMDAwMSB9LAotICAgIHsgMHgwMDAwOWIwOCwgMHgwMDAwMDAwMiB9LAotICAgIHsgMHgwMDAwOWIwYywgMHgwMDAwMDAwMyB9LAotICAgIHsgMHgwMDAwOWIxMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwOWIxNCwgMHgwMDAwMDAwNSB9LAotICAgIHsgMHgwMDAwOWIxOCwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwOWIxYywgMHgwMDAwMDAwOSB9LAotICAgIHsgMHgwMDAwOWIyMCwgMHgwMDAwMDAwYSB9LAotICAgIHsgMHgwMDAwOWIyNCwgMHgwMDAwMDAwYiB9LAotICAgIHsgMHgwMDAwOWIyOCwgMHgwMDAwMDAwYyB9LAotICAgIHsgMHgwMDAwOWIyYywgMHgwMDAwMDAwZCB9LAotICAgIHsgMHgwMDAwOWIzMCwgMHgwMDAwMDAxMCB9LAotICAgIHsgMHgwMDAwOWIzNCwgMHgwMDAwMDAxMSB9LAotICAgIHsgMHgwMDAwOWIzOCwgMHgwMDAwMDAxMiB9LAotICAgIHsgMHgwMDAwOWIzYywgMHgwMDAwMDAxMyB9LAotICAgIHsgMHgwMDAwOWI0MCwgMHgwMDAwMDAxNCB9LAotICAgIHsgMHgwMDAwOWI0NCwgMHgwMDAwMDAxNSB9LAotICAgIHsgMHgwMDAwOWI0OCwgMHgwMDAwMDAxOCB9LAotICAgIHsgMHgwMDAwOWI0YywgMHgwMDAwMDAxOSB9LAotICAgIHsgMHgwMDAwOWI1MCwgMHgwMDAwMDAxYSB9LAotICAgIHsgMHgwMDAwOWI1NCwgMHgwMDAwMDAxYiB9LAotICAgIHsgMHgwMDAwOWI1OCwgMHgwMDAwMDAxYyB9LAotICAgIHsgMHgwMDAwOWI1YywgMHgwMDAwMDAxZCB9LAotICAgIHsgMHgwMDAwOWI2MCwgMHgwMDAwMDAyMCB9LAotICAgIHsgMHgwMDAwOWI2NCwgMHgwMDAwMDAyMSB9LAotICAgIHsgMHgwMDAwOWI2OCwgMHgwMDAwMDAyMiB9LAotICAgIHsgMHgwMDAwOWI2YywgMHgwMDAwMDAyMyB9LAotICAgIHsgMHgwMDAwOWI3MCwgMHgwMDAwMDAyNCB9LAotICAgIHsgMHgwMDAwOWI3NCwgMHgwMDAwMDAyNSB9LAotICAgIHsgMHgwMDAwOWI3OCwgMHgwMDAwMDAyOCB9LAotICAgIHsgMHgwMDAwOWI3YywgMHgwMDAwMDAyOSB9LAotICAgIHsgMHgwMDAwOWI4MCwgMHgwMDAwMDAyYSB9LAotICAgIHsgMHgwMDAwOWI4NCwgMHgwMDAwMDAyYiB9LAotICAgIHsgMHgwMDAwOWI4OCwgMHgwMDAwMDAyYyB9LAotICAgIHsgMHgwMDAwOWI4YywgMHgwMDAwMDAyZCB9LAotICAgIHsgMHgwMDAwOWI5MCwgMHgwMDAwMDAzMCB9LAotICAgIHsgMHgwMDAwOWI5NCwgMHgwMDAwMDAzMSB9LAotICAgIHsgMHgwMDAwOWI5OCwgMHgwMDAwMDAzMiB9LAotICAgIHsgMHgwMDAwOWI5YywgMHgwMDAwMDAzMyB9LAotICAgIHsgMHgwMDAwOWJhMCwgMHgwMDAwMDAzNCB9LAotICAgIHsgMHgwMDAwOWJhNCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJhOCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJhYywgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJiMCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJiNCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJiOCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJiYywgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJjMCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJjNCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJjOCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJjYywgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJkMCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJkNCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJkOCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJkYywgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJlMCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJlNCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJlOCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJlYywgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJmMCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJmNCwgMHgwMDAwMDAzNSB9LAotICAgIHsgMHgwMDAwOWJmOCwgMHgwMDAwMDAxMCB9LAotICAgIHsgMHgwMDAwOWJmYywgMHgwMDAwMDAxYSB9LAotICAgIHsgMHgwMDAwYTIxMCwgMHg0MDgwNjMzMyB9LAotICAgIHsgMHgwMDAwYTIxNCwgMHgwMDEwNmMxMCB9LAotICAgIHsgMHgwMDAwYTIxOCwgMHgwMDljNDA2MCB9LAotICAgIHsgMHgwMDAwYTIyMCwgMHgwMTg4MzBjNiB9LAotICAgIHsgMHgwMDAwYTIyNCwgMHgwMDAwMDQwMCB9LAotICAgIHsgMHgwMDAwYTIyOCwgMHgwMDFhMGJiNSB9LAotICAgIHsgMHgwMDAwYTIyYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTIzNCwgMHgyMDIwMjAyMCB9LAotICAgIHsgMHgwMDAwYTIzOCwgMHgyMDIwMjAyMCB9LAotICAgIHsgMHgwMDAwYTIzYywgMHgxM2M4ODlhZSB9LAotICAgIHsgMHgwMDAwYTI0MCwgMHgzODQ5MGEyMCB9LAotICAgIHsgMHgwMDAwYTI0NCwgMHgwMDAwN2JiNiB9LAotICAgIHsgMHgwMDAwYTI0OCwgMHgwZmZmM2ZmYyB9LAotICAgIHsgMHgwMDAwYTI0YywgMHgwMDAwMDAwMSB9LAotICAgIHsgMHgwMDAwYTI1MCwgMHgwMDAwYTAwMCB9LAotICAgIHsgMHgwMDAwYTI1NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTI1OCwgMHgwY2M3NTM4MCB9LAotICAgIHsgMHgwMDAwYTI1YywgMHgwZjBmMGYwMSB9LAotICAgIHsgMHgwMDAwYTI2MCwgMHhkZmE5MWYwMSB9LAotICAgIHsgMHgwMDAwYTI2OCwgMHgwMDAwMDAwMSB9LAotICAgIHsgMHgwMDAwYTI2YywgMHgwZWJhZTljNiB9LAotICAgIHsgMHgwMDAwYjI2YywgMHgwZWJhZTljNiB9LAotICAgIHsgMHgwMDAwYzI2YywgMHgwZWJhZTljNiB9LAotICAgIHsgMHgwMDAwZDI3MCwgMHgwMDgyMDgyMCB9LAotICAgIHsgMHgwMDAwYTI3OCwgMHgxY2U3MzljZSB9LAotICAgIHsgMHgwMDAwYTI3YywgMHgwNTA3MDFjZSB9LAotICAgIHsgMHgwMDAwYTMzOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMzYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM0MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM0NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM0OCwgMHgzZmZmZmZmZiB9LAotICAgIHsgMHgwMDAwYTM0YywgMHgzZmZmZmZmZiB9LAotICAgIHsgMHgwMDAwYTM1MCwgMHgzZmZmZmZmZiB9LAotICAgIHsgMHgwMDAwYTM1NCwgMHgwMDAzZmZmZiB9LAotICAgIHsgMHgwMDAwYTM1OCwgMHg3OWE4YWEzMyB9LAotICAgIHsgMHgwMDAwZDM1YywgMHgwN2ZmZmZlZiB9LAotICAgIHsgMHgwMDAwZDM2MCwgMHgwZmZmZmZlNyB9LAotICAgIHsgMHgwMDAwZDM2NCwgMHgxN2ZmZmZlNSB9LAotICAgIHsgMHgwMDAwZDM2OCwgMHgxZmZmZmZlNCB9LAotICAgIHsgMHgwMDAwZDM2YywgMHgzN2ZmZmZlMyB9LAotICAgIHsgMHgwMDAwZDM3MCwgMHgzZmZmZmZlMyB9LAotICAgIHsgMHgwMDAwZDM3NCwgMHg1N2ZmZmZlMyB9LAotICAgIHsgMHgwMDAwZDM3OCwgMHg1ZmZmZmZlMiB9LAotICAgIHsgMHgwMDAwZDM3YywgMHg3ZmZmZmZlMiB9LAotICAgIHsgMHgwMDAwZDM4MCwgMHg3ZjNjN2JiYSB9LAotICAgIHsgMHgwMDAwZDM4NCwgMHhmMzMwN2ZmMCB9LAotICAgIHsgMHgwMDAwYTM4OCwgMHgwYzAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM4YywgMHgyMDIwMjAyMCB9LAotICAgIHsgMHgwMDAwYTM5MCwgMHgyMDIwMjAyMCB9LAotICAgIHsgMHgwMDAwYTM5NCwgMHgxY2U3MzljZSB9LAotICAgIHsgMHgwMDAwYTM5OCwgMHgwMDAwMDFjZSB9LAotICAgIHsgMHgwMDAwYTM5YywgMHgwMDAwMDAwMSB9LAotICAgIHsgMHgwMDAwYTNhMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTNhNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTNhOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTNhYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTNiMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTNiNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTNiOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTNiYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTNjMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTNjNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTNjOCwgMHgwMDAwMDI0NiB9LAotICAgIHsgMHgwMDAwYTNjYywgMHgyMDIwMjAyMCB9LAotICAgIHsgMHgwMDAwYTNkMCwgMHgyMDIwMjAyMCB9LAotICAgIHsgMHgwMDAwYTNkNCwgMHgyMDIwMjAyMCB9LAotICAgIHsgMHgwMDAwYTNkYywgMHgxY2U3MzljZSB9LAotICAgIHsgMHgwMDAwYTNlMCwgMHgwMDAwMDFjZSB9LAorCS8qIEFkZHIgICAgICBhbGxtb2RlcyAgKi8KKwl7MHgwMDAwMDAwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDAwMzAsIDB4MDAwMjAwMTV9LAorCXsweDAwMDAwMDM0LCAweDAwMDAwMDA1fSwKKwl7MHgwMDAwMDA0MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDAwNDQsIDB4MDAwMDAwMDh9LAorCXsweDAwMDAwMDQ4LCAweDAwMDAwMDA4fSwKKwl7MHgwMDAwMDA0YywgMHgwMDAwMDAxMH0sCisJezB4MDAwMDAwNTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwMDU0LCAweDAwMDAwMDFmfSwKKwl7MHgwMDAwMDgwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDA4MDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwODA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDgwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDA4MTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwODE0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDgxOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDA4MWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwODIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDgyNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEwNDAsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDQ0LCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA0OCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNGMsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDUwLCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA1NCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNTgsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDVjLCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA2MCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNjQsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMjMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTI3MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEwMzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMDc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTBiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEwZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMTM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTE3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDExYjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMWY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTIzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEyNzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMmI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTJmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEzMzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMzc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTNiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEzZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNDM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTQ3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE0YjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNGY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTUzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE1NzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNWI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTVmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE2MzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNjc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTZiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE2ZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNzM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTc3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE3YjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxN2Y4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTAzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEwN2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMGJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTBmYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDExM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMTdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTFiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDExZmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMjNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTI3YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEyYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMmZjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTMzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEzN2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxM2JjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTNmYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE0M2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNDdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAyMDAxMCwgMHgwMDAwMDAwM30sCisJezB4MDAwMjAwMzgsIDB4MDAwMDA0YzJ9LAorCXsweDAwMDA4MDA0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwMGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDE4LCAweDAwMDAwNzAwfSwKKwl7MHgwMDAwODAyMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwMzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODA0OCwgMHg0MDAwMDAwMH0sCisJezB4MDAwMDgwNTQsIDB4MDAwMDQwMDB9LAorCXsweDAwMDA4MDU4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODA1YywgMHgwMDBmYzc4Zn0sCisJezB4MDAwMDgwNjAsIDB4MDAwMDAwMGZ9LAorCXsweDAwMDA4MDY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBjMCwgMHgyYTgyMzAxYX0sCisJezB4MDAwMDgwYzQsIDB4MDVkYzAxZTB9LAorCXsweDAwMDA4MGM4LCAweDFmNDAyNzEwfSwKKwl7MHgwMDAwODBjYywgMHgwMWY0MDAwMH0sCisJezB4MDAwMDgwZDAsIDB4MDAwMDFlMDB9LAorCXsweDAwMDA4MGQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBkOCwgMHgwMDQwMDAwMH0sCisJezB4MDAwMDgwZTAsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4MGU0LCAweDAwMDBmZmZmfSwKKwl7MHgwMDAwODBlOCwgMHgwMDNmM2YzZn0sCisJezB4MDAwMDgwZWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBmNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGZjLCAweDAwMDIwMDAwfSwKKwl7MHgwMDAwODEwMCwgMHgwMDAyMDAwMH0sCisJezB4MDAwMDgxMDQsIDB4MDAwMDAwMDF9LAorCXsweDAwMDA4MTA4LCAweDAwMDAwMDUyfSwKKwl7MHgwMDAwODEwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMTAsIDB4MDAwMDAxNjh9LAorCXsweDAwMDA4MTE4LCAweDAwMDEwMGFhfSwKKwl7MHgwMDAwODExYywgMHgwMDAwMzIxMH0sCisJezB4MDAwMDgxMjAsIDB4MDhmMDQ4MDB9LAorCXsweDAwMDA4MTI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEyOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEzNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODE0NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxNjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTZjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODE3MCwgMHgzMjE0MzMyMH0sCisJezB4MDAwMDgxNzQsIDB4ZmFhNGZhNTB9LAorCXsweDAwMDA4MTc4LCAweDAwMDAwMTAwfSwKKwl7MHgwMDAwODE3YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxYzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWQwLCAweDAwMDAzMjEwfSwKKwl7MHgwMDAwODFlYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxZjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxZmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIwNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIxMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIxYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIyOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIzNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI0MCwgMHgwMDEwMDAwMH0sCisJezB4MDAwMDgyNDQsIDB4MDAxMGY0MDB9LAorCXsweDAwMDA4MjQ4LCAweDAwMDAwMTAwfSwKKwl7MHgwMDAwODI0YywgMHgwMDAxZTgwMH0sCisJezB4MDAwMDgyNTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI1OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyNWMsIDB4NDAwMDAwZmZ9LAorCXsweDAwMDA4MjYwLCAweDAwMDgwOTIyfSwKKwl7MHgwMDAwODI3MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyNzQsIDB4NDAwMDAwMDB9LAorCXsweDAwMDA4Mjc4LCAweDAwM2U0MTgwfSwKKwl7MHgwMDAwODI3YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyODQsIDB4MDAwMDAwMmN9LAorCXsweDAwMDA4Mjg4LCAweDAwMDAwMDJjfSwKKwl7MHgwMDAwODI4YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyOTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4Mjk4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODMwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzMDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODMwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzMTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzE0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODMxOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzMjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzJjLCAweDAwMDAwMDA3fSwKKwl7MHgwMDAwODMzMCwgMHgwMDAwMDMwMn0sCisJezB4MDAwMDgzMzQsIDB4MDAwMDBlMDB9LAorCXsweDAwMDA4MzM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODMzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzNDAsIDB4MDAwMTA3ZmZ9LAorCXsweDAwMDA5ODA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTgwYywgMHhhZDg0OGUxOX0sCisJezB4MDAwMDk4MTAsIDB4N2QxNGUwMDB9LAorCXsweDAwMDA5ODE0LCAweDljMGE5ZjZifSwKKwl7MHgwMDAwOTgxYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4MmMsIDB4MDAwMGEwMDB9LAorCXsweDAwMDA5ODMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTgzYywgMHgwMDIwMDQwMH0sCisJezB4MDAwMDk4NDAsIDB4MjA2YTAxYWV9LAorCXsweDAwMDA5ODRjLCAweDEyODQyMzNjfSwKKwl7MHgwMDAwOTg1NCwgMHgwMDAwMDg1OX0sCisJezB4MDAwMDk5MDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTA0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTkwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5MGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTFjLCAweDEwMDAwZmZmfSwKKwl7MHgwMDAwOTkyMCwgMHgwNTEwMDAwMH0sCisJezB4MDAwMGE5MjAsIDB4MDUxMDAwMDB9LAorCXsweDAwMDBiOTIwLCAweDA1MTAwMDAwfSwKKwl7MHgwMDAwOTkyOCwgMHgwMDAwMDAwMX0sCisJezB4MDAwMDk5MmMsIDB4MDAwMDAwMDR9LAorCXsweDAwMDA5OTM0LCAweDFlMWYyMDIyfSwKKwl7MHgwMDAwOTkzOCwgMHgwYTBiMGMwZH0sCisJezB4MDAwMDk5M2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTQ4LCAweDkyODBiMjEyfSwKKwl7MHgwMDAwOTk0YywgMHgwMDAyMDAyOH0sCisJezB4MDAwMGM5NWMsIDB4MDA0YjZhOGV9LAorCXsweDAwMDBjOTY4LCAweDAwMDAwM2NlfSwKKwl7MHgwMDAwOTk3MCwgMHgxOTBmYjUxNX0sCisJezB4MDAwMDk5NzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTc4LCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwOTk3YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5ODAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTg0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTk4OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5OGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTkwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTk5NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5OTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTlhMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5YTQsIDB4MDAwMDAwMDF9LAorCXsweDAwMDA5OWE4LCAweDIwMWZmZjAwfSwKKwl7MHgwMDAwOTlhYywgMHgwMDZmMDAwMH0sCisJezB4MDAwMDk5YjAsIDB4MDMwNTEwMDB9LAorCXsweDAwMDA5OWRjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTllMCwgMHgwMDAwMDIwMH0sCisJezB4MDAwMDk5ZTQsIDB4YWFhYWFhYWF9LAorCXsweDAwMDA5OWU4LCAweDNjNDY2NDc4fSwKKwl7MHgwMDAwOTllYywgMHgwY2M4MGNhYX0sCisJezB4MDAwMDk5ZmMsIDB4MDAwMDEwNDJ9LAorCXsweDAwMDA5YjAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWIwNCwgMHgwMDAwMDAwMX0sCisJezB4MDAwMDliMDgsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDA5YjBjLCAweDAwMDAwMDAzfSwKKwl7MHgwMDAwOWIxMCwgMHgwMDAwMDAwNH0sCisJezB4MDAwMDliMTQsIDB4MDAwMDAwMDV9LAorCXsweDAwMDA5YjE4LCAweDAwMDAwMDA4fSwKKwl7MHgwMDAwOWIxYywgMHgwMDAwMDAwOX0sCisJezB4MDAwMDliMjAsIDB4MDAwMDAwMGF9LAorCXsweDAwMDA5YjI0LCAweDAwMDAwMDBifSwKKwl7MHgwMDAwOWIyOCwgMHgwMDAwMDAwY30sCisJezB4MDAwMDliMmMsIDB4MDAwMDAwMGR9LAorCXsweDAwMDA5YjMwLCAweDAwMDAwMDEwfSwKKwl7MHgwMDAwOWIzNCwgMHgwMDAwMDAxMX0sCisJezB4MDAwMDliMzgsIDB4MDAwMDAwMTJ9LAorCXsweDAwMDA5YjNjLCAweDAwMDAwMDEzfSwKKwl7MHgwMDAwOWI0MCwgMHgwMDAwMDAxNH0sCisJezB4MDAwMDliNDQsIDB4MDAwMDAwMTV9LAorCXsweDAwMDA5YjQ4LCAweDAwMDAwMDE4fSwKKwl7MHgwMDAwOWI0YywgMHgwMDAwMDAxOX0sCisJezB4MDAwMDliNTAsIDB4MDAwMDAwMWF9LAorCXsweDAwMDA5YjU0LCAweDAwMDAwMDFifSwKKwl7MHgwMDAwOWI1OCwgMHgwMDAwMDAxY30sCisJezB4MDAwMDliNWMsIDB4MDAwMDAwMWR9LAorCXsweDAwMDA5YjYwLCAweDAwMDAwMDIwfSwKKwl7MHgwMDAwOWI2NCwgMHgwMDAwMDAyMX0sCisJezB4MDAwMDliNjgsIDB4MDAwMDAwMjJ9LAorCXsweDAwMDA5YjZjLCAweDAwMDAwMDIzfSwKKwl7MHgwMDAwOWI3MCwgMHgwMDAwMDAyNH0sCisJezB4MDAwMDliNzQsIDB4MDAwMDAwMjV9LAorCXsweDAwMDA5Yjc4LCAweDAwMDAwMDI4fSwKKwl7MHgwMDAwOWI3YywgMHgwMDAwMDAyOX0sCisJezB4MDAwMDliODAsIDB4MDAwMDAwMmF9LAorCXsweDAwMDA5Yjg0LCAweDAwMDAwMDJifSwKKwl7MHgwMDAwOWI4OCwgMHgwMDAwMDAyY30sCisJezB4MDAwMDliOGMsIDB4MDAwMDAwMmR9LAorCXsweDAwMDA5YjkwLCAweDAwMDAwMDMwfSwKKwl7MHgwMDAwOWI5NCwgMHgwMDAwMDAzMX0sCisJezB4MDAwMDliOTgsIDB4MDAwMDAwMzJ9LAorCXsweDAwMDA5YjljLCAweDAwMDAwMDMzfSwKKwl7MHgwMDAwOWJhMCwgMHgwMDAwMDAzNH0sCisJezB4MDAwMDliYTQsIDB4MDAwMDAwMzV9LAorCXsweDAwMDA5YmE4LCAweDAwMDAwMDM1fSwKKwl7MHgwMDAwOWJhYywgMHgwMDAwMDAzNX0sCisJezB4MDAwMDliYjAsIDB4MDAwMDAwMzV9LAorCXsweDAwMDA5YmI0LCAweDAwMDAwMDM1fSwKKwl7MHgwMDAwOWJiOCwgMHgwMDAwMDAzNX0sCisJezB4MDAwMDliYmMsIDB4MDAwMDAwMzV9LAorCXsweDAwMDA5YmMwLCAweDAwMDAwMDM1fSwKKwl7MHgwMDAwOWJjNCwgMHgwMDAwMDAzNX0sCisJezB4MDAwMDliYzgsIDB4MDAwMDAwMzV9LAorCXsweDAwMDA5YmNjLCAweDAwMDAwMDM1fSwKKwl7MHgwMDAwOWJkMCwgMHgwMDAwMDAzNX0sCisJezB4MDAwMDliZDQsIDB4MDAwMDAwMzV9LAorCXsweDAwMDA5YmQ4LCAweDAwMDAwMDM1fSwKKwl7MHgwMDAwOWJkYywgMHgwMDAwMDAzNX0sCisJezB4MDAwMDliZTAsIDB4MDAwMDAwMzV9LAorCXsweDAwMDA5YmU0LCAweDAwMDAwMDM1fSwKKwl7MHgwMDAwOWJlOCwgMHgwMDAwMDAzNX0sCisJezB4MDAwMDliZWMsIDB4MDAwMDAwMzV9LAorCXsweDAwMDA5YmYwLCAweDAwMDAwMDM1fSwKKwl7MHgwMDAwOWJmNCwgMHgwMDAwMDAzNX0sCisJezB4MDAwMDliZjgsIDB4MDAwMDAwMTB9LAorCXsweDAwMDA5YmZjLCAweDAwMDAwMDFhfSwKKwl7MHgwMDAwYTIxMCwgMHg0MDgwNjMzM30sCisJezB4MDAwMGEyMTQsIDB4MDAxMDZjMTB9LAorCXsweDAwMDBhMjE4LCAweDAwOWM0MDYwfSwKKwl7MHgwMDAwYTIyMCwgMHgwMTg4MzBjNn0sCisJezB4MDAwMGEyMjQsIDB4MDAwMDA0MDB9LAorCXsweDAwMDBhMjI4LCAweDAwMWEwYmI1fSwKKwl7MHgwMDAwYTIyYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyMzQsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhMjM4LCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTIzYywgMHgxM2M4ODlhZn0sCisJezB4MDAwMGEyNDAsIDB4Mzg0OTBhMjB9LAorCXsweDAwMDBhMjQ0LCAweDAwMDA3YmI2fSwKKwl7MHgwMDAwYTI0OCwgMHgwZmZmM2ZmY30sCisJezB4MDAwMGEyNGMsIDB4MDAwMDAwMDF9LAorCXsweDAwMDBhMjUwLCAweDAwMDBlMDAwfSwKKwl7MHgwMDAwYTI1NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyNTgsIDB4MGNjNzUzODB9LAorCXsweDAwMDBhMjVjLCAweDBmMGYwZjAxfSwKKwl7MHgwMDAwYTI2MCwgMHhkZmE5MWYwMX0sCisJezB4MDAwMGEyNjgsIDB4MDAwMDAwMDF9LAorCXsweDAwMDBhMjZjLCAweDBlYmFlOWM2fSwKKwl7MHgwMDAwYjI2YywgMHgwZWJhZTljNn0sCisJezB4MDAwMGMyNmMsIDB4MGViYWU5YzZ9LAorCXsweDAwMDBkMjcwLCAweDAwODIwODIwfSwKKwl7MHgwMDAwYTI3OCwgMHgxY2U3MzljZX0sCisJezB4MDAwMGEyN2MsIDB4MDUwNzAxY2V9LAorCXsweDAwMDBhMzM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzNDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTM0OCwgMHgzZmZmZmZmZn0sCisJezB4MDAwMGEzNGMsIDB4M2ZmZmZmZmZ9LAorCXsweDAwMDBhMzUwLCAweDNmZmZmZmZmfSwKKwl7MHgwMDAwYTM1NCwgMHgwMDAzZmZmZn0sCisJezB4MDAwMGEzNTgsIDB4NzlhOGFhMzN9LAorCXsweDAwMDBkMzVjLCAweDA3ZmZmZmVmfSwKKwl7MHgwMDAwZDM2MCwgMHgwZmZmZmZlN30sCisJezB4MDAwMGQzNjQsIDB4MTdmZmZmZTV9LAorCXsweDAwMDBkMzY4LCAweDFmZmZmZmU0fSwKKwl7MHgwMDAwZDM2YywgMHgzN2ZmZmZlM30sCisJezB4MDAwMGQzNzAsIDB4M2ZmZmZmZTN9LAorCXsweDAwMDBkMzc0LCAweDU3ZmZmZmUzfSwKKwl7MHgwMDAwZDM3OCwgMHg1ZmZmZmZlMn0sCisJezB4MDAwMGQzN2MsIDB4N2ZmZmZmZTJ9LAorCXsweDAwMDBkMzgwLCAweDdmM2M3YmJhfSwKKwl7MHgwMDAwZDM4NCwgMHhmMzMwN2ZmMH0sCisJezB4MDAwMGEzODgsIDB4MGMwMDAwMDB9LAorCXsweDAwMDBhMzhjLCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTM5MCwgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzOTQsIDB4MWNlNzM5Y2V9LAorCXsweDAwMDBhMzk4LCAweDAwMDAwMWNlfSwKKwl7MHgwMDAwYTM5YywgMHgwMDAwMDAwMX0sCisJezB4MDAwMGEzYTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2E0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTNhOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzYWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2IwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTNiNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzYjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2JjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTNjMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzYzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2M4LCAweDAwMDAwMjQ2fSwKKwl7MHgwMDAwYTNjYywgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzZDAsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2Q0LCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTNkYywgMHgxY2U3MzljZX0sCisJezB4MDAwMGEzZTAsIDB4MDAwMDAxY2V9LAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMF85MTAwW11bMl0gPSB7Ci0gICAgeyAweDAwMDA5OGIwLCAweDFlNTc5NWU1IH0sCi0gICAgeyAweDAwMDA5OGUwLCAweDAyMDA4MDIwIH0sCisJLyogQWRkciAgICAgIGFsbG1vZGVzICAqLworCXsweDAwMDA5OGIwLCAweDFlNTc5NWU1fSwKKwl7MHgwMDAwOThlMCwgMHgwMjAwODAyMH0sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJCX1JmR2Fpbl85MTAwW11bM10gPSB7Ci0gICAgeyAweDAwMDA5YTAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTA0LCAweDAwMDAwMDQwLCAweDAwMDAwMDQwIH0sCi0gICAgeyAweDAwMDA5YTA4LCAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0sCi0gICAgeyAweDAwMDA5YTBjLCAweDAwMDAwMWExLCAweDAwMDAwMTQxIH0sCi0gICAgeyAweDAwMDA5YTEwLCAweDAwMDAwMWUxLCAweDAwMDAwMTgxIH0sCi0gICAgeyAweDAwMDA5YTE0LCAweDAwMDAwMDIxLCAweDAwMDAwMWMxIH0sCi0gICAgeyAweDAwMDA5YTE4LCAweDAwMDAwMDYxLCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDA5YTFjLCAweDAwMDAwMTY4LCAweDAwMDAwMDQxIH0sCi0gICAgeyAweDAwMDA5YTIwLCAweDAwMDAwMWE4LCAweDAwMDAwMWE4IH0sCi0gICAgeyAweDAwMDA5YTI0LCAweDAwMDAwMWU4LCAweDAwMDAwMWU4IH0sCi0gICAgeyAweDAwMDA5YTI4LCAweDAwMDAwMDI4LCAweDAwMDAwMDI4IH0sCi0gICAgeyAweDAwMDA5YTJjLCAweDAwMDAwMDY4LCAweDAwMDAwMDY4IH0sCi0gICAgeyAweDAwMDA5YTMwLCAweDAwMDAwMTg5LCAweDAwMDAwMGE4IH0sCi0gICAgeyAweDAwMDA5YTM0LCAweDAwMDAwMWM5LCAweDAwMDAwMTY5IH0sCi0gICAgeyAweDAwMDA5YTM4LCAweDAwMDAwMDA5LCAweDAwMDAwMWE5IH0sCi0gICAgeyAweDAwMDA5YTNjLCAweDAwMDAwMDQ5LCAweDAwMDAwMWU5IH0sCi0gICAgeyAweDAwMDA5YTQwLCAweDAwMDAwMDg5LCAweDAwMDAwMDI5IH0sCi0gICAgeyAweDAwMDA5YTQ0LCAweDAwMDAwMTcwLCAweDAwMDAwMDY5IH0sCi0gICAgeyAweDAwMDA5YTQ4LCAweDAwMDAwMWIwLCAweDAwMDAwMTkwIH0sCi0gICAgeyAweDAwMDA5YTRjLCAweDAwMDAwMWYwLCAweDAwMDAwMWQwIH0sCi0gICAgeyAweDAwMDA5YTUwLCAweDAwMDAwMDMwLCAweDAwMDAwMDEwIH0sCi0gICAgeyAweDAwMDA5YTU0LCAweDAwMDAwMDcwLCAweDAwMDAwMDUwIH0sCi0gICAgeyAweDAwMDA5YTU4LCAweDAwMDAwMTkxLCAweDAwMDAwMDkwIH0sCi0gICAgeyAweDAwMDA5YTVjLCAweDAwMDAwMWQxLCAweDAwMDAwMTUxIH0sCi0gICAgeyAweDAwMDA5YTYwLCAweDAwMDAwMDExLCAweDAwMDAwMTkxIH0sCi0gICAgeyAweDAwMDA5YTY0LCAweDAwMDAwMDUxLCAweDAwMDAwMWQxIH0sCi0gICAgeyAweDAwMDA5YTY4LCAweDAwMDAwMDkxLCAweDAwMDAwMDExIH0sCi0gICAgeyAweDAwMDA5YTZjLCAweDAwMDAwMWI4LCAweDAwMDAwMDUxIH0sCi0gICAgeyAweDAwMDA5YTcwLCAweDAwMDAwMWY4LCAweDAwMDAwMTk4IH0sCi0gICAgeyAweDAwMDA5YTc0LCAweDAwMDAwMDM4LCAweDAwMDAwMWQ4IH0sCi0gICAgeyAweDAwMDA5YTc4LCAweDAwMDAwMDc4LCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDAwMDA5YTdjLCAweDAwMDAwMTk5LCAweDAwMDAwMDU4IH0sCi0gICAgeyAweDAwMDA5YTgwLCAweDAwMDAwMWQ5LCAweDAwMDAwMDk4IH0sCi0gICAgeyAweDAwMDA5YTg0LCAweDAwMDAwMDE5LCAweDAwMDAwMTU5IH0sCi0gICAgeyAweDAwMDA5YTg4LCAweDAwMDAwMDU5LCAweDAwMDAwMTk5IH0sCi0gICAgeyAweDAwMDA5YThjLCAweDAwMDAwMDk5LCAweDAwMDAwMWQ5IH0sCi0gICAgeyAweDAwMDA5YTkwLCAweDAwMDAwMGQ5LCAweDAwMDAwMDE5IH0sCi0gICAgeyAweDAwMDA5YTk0LCAweDAwMDAwMGY5LCAweDAwMDAwMDU5IH0sCi0gICAgeyAweDAwMDA5YTk4LCAweDAwMDAwMGY5LCAweDAwMDAwMDk5IH0sCi0gICAgeyAweDAwMDA5YTljLCAweDAwMDAwMGY5LCAweDAwMDAwMGQ5IH0sCi0gICAgeyAweDAwMDA5YWEwLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0sCi0gICAgeyAweDAwMDA5YWE0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0sCi0gICAgeyAweDAwMDA5YWE4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0sCi0gICAgeyAweDAwMDA5YWFjLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0sCi0gICAgeyAweDAwMDA5YWIwLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0sCi0gICAgeyAweDAwMDA5YWI0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0sCi0gICAgeyAweDAwMDA5YWI4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0sCi0gICAgeyAweDAwMDA5YWJjLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0sCi0gICAgeyAweDAwMDA5YWMwLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0sCi0gICAgeyAweDAwMDA5YWM0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0sCi0gICAgeyAweDAwMDA5YWM4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0sCi0gICAgeyAweDAwMDA5YWNjLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0sCi0gICAgeyAweDAwMDA5YWQwLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0sCi0gICAgeyAweDAwMDA5YWQ0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0sCi0gICAgeyAweDAwMDA5YWQ4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0sCi0gICAgeyAweDAwMDA5YWRjLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0sCi0gICAgeyAweDAwMDA5YWUwLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0sCi0gICAgeyAweDAwMDA5YWU0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0sCi0gICAgeyAweDAwMDA5YWU4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0sCi0gICAgeyAweDAwMDA5YWVjLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0sCi0gICAgeyAweDAwMDA5YWYwLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0sCi0gICAgeyAweDAwMDA5YWY0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0sCi0gICAgeyAweDAwMDA5YWY4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0sCi0gICAgeyAweDAwMDA5YWZjLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0sCisJLyogQWRkciAgICAgIDVHX0hUMjAgICAgIDVHX0hUNDAgICAqLworCXsweDAwMDA5YTAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWEwNCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MH0sCisJezB4MDAwMDlhMDgsIDB4MDAwMDAwODAsIDB4MDAwMDAwODB9LAorCXsweDAwMDA5YTBjLCAweDAwMDAwMWExLCAweDAwMDAwMTQxfSwKKwl7MHgwMDAwOWExMCwgMHgwMDAwMDFlMSwgMHgwMDAwMDE4MX0sCisJezB4MDAwMDlhMTQsIDB4MDAwMDAwMjEsIDB4MDAwMDAxYzF9LAorCXsweDAwMDA5YTE4LCAweDAwMDAwMDYxLCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwOWExYywgMHgwMDAwMDE2OCwgMHgwMDAwMDA0MX0sCisJezB4MDAwMDlhMjAsIDB4MDAwMDAxYTgsIDB4MDAwMDAxYTh9LAorCXsweDAwMDA5YTI0LCAweDAwMDAwMWU4LCAweDAwMDAwMWU4fSwKKwl7MHgwMDAwOWEyOCwgMHgwMDAwMDAyOCwgMHgwMDAwMDAyOH0sCisJezB4MDAwMDlhMmMsIDB4MDAwMDAwNjgsIDB4MDAwMDAwNjh9LAorCXsweDAwMDA5YTMwLCAweDAwMDAwMTg5LCAweDAwMDAwMGE4fSwKKwl7MHgwMDAwOWEzNCwgMHgwMDAwMDFjOSwgMHgwMDAwMDE2OX0sCisJezB4MDAwMDlhMzgsIDB4MDAwMDAwMDksIDB4MDAwMDAxYTl9LAorCXsweDAwMDA5YTNjLCAweDAwMDAwMDQ5LCAweDAwMDAwMWU5fSwKKwl7MHgwMDAwOWE0MCwgMHgwMDAwMDA4OSwgMHgwMDAwMDAyOX0sCisJezB4MDAwMDlhNDQsIDB4MDAwMDAxNzAsIDB4MDAwMDAwNjl9LAorCXsweDAwMDA5YTQ4LCAweDAwMDAwMWIwLCAweDAwMDAwMTkwfSwKKwl7MHgwMDAwOWE0YywgMHgwMDAwMDFmMCwgMHgwMDAwMDFkMH0sCisJezB4MDAwMDlhNTAsIDB4MDAwMDAwMzAsIDB4MDAwMDAwMTB9LAorCXsweDAwMDA5YTU0LCAweDAwMDAwMDcwLCAweDAwMDAwMDUwfSwKKwl7MHgwMDAwOWE1OCwgMHgwMDAwMDE5MSwgMHgwMDAwMDA5MH0sCisJezB4MDAwMDlhNWMsIDB4MDAwMDAxZDEsIDB4MDAwMDAxNTF9LAorCXsweDAwMDA5YTYwLCAweDAwMDAwMDExLCAweDAwMDAwMTkxfSwKKwl7MHgwMDAwOWE2NCwgMHgwMDAwMDA1MSwgMHgwMDAwMDFkMX0sCisJezB4MDAwMDlhNjgsIDB4MDAwMDAwOTEsIDB4MDAwMDAwMTF9LAorCXsweDAwMDA5YTZjLCAweDAwMDAwMWI4LCAweDAwMDAwMDUxfSwKKwl7MHgwMDAwOWE3MCwgMHgwMDAwMDFmOCwgMHgwMDAwMDE5OH0sCisJezB4MDAwMDlhNzQsIDB4MDAwMDAwMzgsIDB4MDAwMDAxZDh9LAorCXsweDAwMDA5YTc4LCAweDAwMDAwMDc4LCAweDAwMDAwMDE4fSwKKwl7MHgwMDAwOWE3YywgMHgwMDAwMDE5OSwgMHgwMDAwMDA1OH0sCisJezB4MDAwMDlhODAsIDB4MDAwMDAxZDksIDB4MDAwMDAwOTh9LAorCXsweDAwMDA5YTg0LCAweDAwMDAwMDE5LCAweDAwMDAwMTU5fSwKKwl7MHgwMDAwOWE4OCwgMHgwMDAwMDA1OSwgMHgwMDAwMDE5OX0sCisJezB4MDAwMDlhOGMsIDB4MDAwMDAwOTksIDB4MDAwMDAxZDl9LAorCXsweDAwMDA5YTkwLCAweDAwMDAwMGQ5LCAweDAwMDAwMDE5fSwKKwl7MHgwMDAwOWE5NCwgMHgwMDAwMDBmOSwgMHgwMDAwMDA1OX0sCisJezB4MDAwMDlhOTgsIDB4MDAwMDAwZjksIDB4MDAwMDAwOTl9LAorCXsweDAwMDA5YTljLCAweDAwMDAwMGY5LCAweDAwMDAwMGQ5fSwKKwl7MHgwMDAwOWFhMCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOX0sCisJezB4MDAwMDlhYTQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjl9LAorCXsweDAwMDA5YWE4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5fSwKKwl7MHgwMDAwOWFhYywgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOX0sCisJezB4MDAwMDlhYjAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjl9LAorCXsweDAwMDA5YWI0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5fSwKKwl7MHgwMDAwOWFiOCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOX0sCisJezB4MDAwMDlhYmMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjl9LAorCXsweDAwMDA5YWMwLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5fSwKKwl7MHgwMDAwOWFjNCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOX0sCisJezB4MDAwMDlhYzgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjl9LAorCXsweDAwMDA5YWNjLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5fSwKKwl7MHgwMDAwOWFkMCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOX0sCisJezB4MDAwMDlhZDQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjl9LAorCXsweDAwMDA5YWQ4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5fSwKKwl7MHgwMDAwOWFkYywgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOX0sCisJezB4MDAwMDlhZTAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjl9LAorCXsweDAwMDA5YWU0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5fSwKKwl7MHgwMDAwOWFlOCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOX0sCisJezB4MDAwMDlhZWMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjl9LAorCXsweDAwMDA5YWYwLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5fSwKKwl7MHgwMDAwOWFmNCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOX0sCisJezB4MDAwMDlhZjgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjl9LAorCXsweDAwMDA5YWZjLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5fSwKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazFfOTEwMFtdWzJdID0gewotICAgIHsgMHgwMDAwOThiMCwgMHgwMjEwODQyMX0sCi0gICAgeyAweDAwMDA5OGVjLCAweDAwMDAwMDA4fSwKKwkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCisJezB4MDAwMDk4YjAsIDB4MDIxMDg0MjF9LAorCXsweDAwMDA5OGVjLCAweDAwMDAwMDA4fSwKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazJfOTEwMFtdWzJdID0gewotICAgIHsgMHgwMDAwOThiMCwgMHgwZTczZmYxN30sCi0gICAgeyAweDAwMDA5OGUwLCAweDAwMDAwNDIwfSwKKwkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCisJezB4MDAwMDk4YjAsIDB4MGU3M2ZmMTd9LAorCXsweDAwMDA5OGUwLCAweDAwMDAwNDIwfSwKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazNfOTEwMFtdWzNdID0gewotICAgIHsgMHgwMDAwOThmMCwgMHgwMTQwMDAxOCwgMHgwMWMwMDAxOCB9LAorCS8qIEFkZHIgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgKi8KKwl7MHgwMDAwOThmMCwgMHgwMTQwMDAxOCwgMHgwMWMwMDAxOH0sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbms2XzkxMDBbXVszXSA9IHsKLQotICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMGUwMDAwMCwgMHgwMGUwMDAwMCB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMDVlMDAwMCwgMHgwMDVlMDAwMCB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMDEyMDAwMCwgMHgwMDEyMDAwMCB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMDYyMDAwMCwgMHgwMDYyMDAwMCB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMDVmMDAwMCwgMHgwMDVmMDAwMCB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMDg3MDAwMCwgMHgwMDg3MDAwMCB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMGY5MDAwMCwgMHgwMGY5MDAwMCB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMDdiMDAwMCwgMHgwMDdiMDAwMCB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMGY1MDAwMCwgMHgwMGY1MDAwMCB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMGRjMDAwMCwgMHgwMGRjMDAwMCB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMDExMDAwMCwgMHgwMDExMDAwMCB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMDYxMDBhOCwgMHgwMDYxMDBhOCB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMDQyMTBhMiwgMHgwMDQyMTBhMiB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMDE0MDAwZiwgMHgwMDE0MDAwZiB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMGM0MDAwMiwgMHgwMGM0MDAwMiB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMDMwMDBmMiwgMHgwMDMwMDBmMiB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMDQ0MDAxNiwgMHgwMDQ0MDAxNiB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMDQxMDA0MCwgMHgwMDQxMDA0MCB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMDAxODBkNiwgMHgwMDAxODBkNiB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwYzBhYSwgMHgwMDAwYzBhYSB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDBiMSwgMHgwMDAwMDBiMSB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMjAwMCwgMHgwMDAwMjAwMCB9LAotICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDBkNCwgMHgwMDAwMDBkNCB9LAotICAgIHsgMHgwMDAwOThkMCwgMHgwMDAwMDAwZiwgMHgwMDEwMDAwZiB9LAorCS8qIEFkZHIgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgKi8KKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMGUwMDAwMCwgMHgwMGUwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDA1ZTAwMDAsIDB4MDA1ZTAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDYyMDAwMCwgMHgwMDYyMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDVmMDAwMCwgMHgwMDVmMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDA4NzAwMDAsIDB4MDA4NzAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwZjkwMDAwLCAweDAwZjkwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDdiMDAwMCwgMHgwMDdiMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwZjUwMDAwLCAweDAwZjUwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMGRjMDAwMCwgMHgwMGRjMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwNjEwMGE4LCAweDAwNjEwMGE4fSwKKwl7MHgwMDAwOTg5YywgMHgwMDQyMTBhMiwgMHgwMDQyMTBhMn0sCisJezB4MDAwMDk4OWMsIDB4MDAxNDAwMGYsIDB4MDAxNDAwMGZ9LAorCXsweDAwMDA5ODljLCAweDAwYzQwMDAyLCAweDAwYzQwMDAyfSwKKwl7MHgwMDAwOTg5YywgMHgwMDMwMDBmMiwgMHgwMDMwMDBmMn0sCisJezB4MDAwMDk4OWMsIDB4MDA0NDAwMTYsIDB4MDA0NDAwMTZ9LAorCXsweDAwMDA5ODljLCAweDAwNDEwMDQwLCAweDAwNDEwMDQwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAxODBkNiwgMHgwMDAxODBkNn0sCisJezB4MDAwMDk4OWMsIDB4MDAwMGMwYWEsIDB4MDAwMGMwYWF9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMGIxLCAweDAwMDAwMGIxfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMjAwMCwgMHgwMDAwMjAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDR9LAorCXsweDAwMDA5OGQwLCAweDAwMDAwMDBmLCAweDAwMTAwMDBmfSwKIH07CiAKLQogc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rNlRQQ185MTAwW11bM10gPSB7Ci0KLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBlMDAwMDAsIDB4MDBlMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA1ZTAwMDAsIDB4MDA1ZTAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA2MjAwMDAsIDB4MDA2MjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4NDBmZjAwMDAsIDB4NDBmZjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA1ZjAwMDAsIDB4MDA1ZjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA4NzAwMDAsIDB4MDA4NzAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBmOTAwMDAsIDB4MDBmOTAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA3YjAwMDAsIDB4MDA3YjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBmNTAwMDAsIDB4MDBmNTAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBkYzAwMDAsIDB4MDBkYzAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA2MTAwYTgsIDB4MDA2MTAwYTggfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA0MjMwMjIsIDB4MDA0MjMwMjIgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MjAxNDAwOGYsIDB4MjAxNDAwOGYgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBjNDAwMDIsIDB4MDBjNDAwMDIgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAzMDAwZjIsIDB4MDAzMDAwZjIgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA0NDAwMTYsIDB4MDA0NDAwMTYgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA0MTAwNDAsIDB4MDA0MTAwNDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMTgwNWUsIDB4MDAwMTgwNWUgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMGMwYWIsIDB4MDAwMGMwYWIgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwZTEsIDB4MDAwMDAwZTEgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDcwODAsIDB4MDAwMDcwODAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQgfSwKLSAgICB7IDB4MDAwMDk4ZDAsIDB4MDAwMDAwMGYsIDB4MDAxMDAwMGYgfSwKKwkvKiBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICovCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDBlMDAwMDAsIDB4MDBlMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwNWUwMDAwLCAweDAwNWUwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDEyMDAwMCwgMHgwMDEyMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDA2MjAwMDAsIDB4MDA2MjAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDIwMDAwLCAweDAwMDIwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHg0MGZmMDAwMCwgMHg0MGZmMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDA1ZjAwMDAsIDB4MDA1ZjAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwODcwMDAwLCAweDAwODcwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMGY5MDAwMCwgMHgwMGY5MDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDA3YjAwMDAsIDB4MDA3YjAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMGY1MDAwMCwgMHgwMGY1MDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDBkYzAwMDAsIDB4MDBkYzAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDYxMDBhOCwgMHgwMDYxMDBhOH0sCisJezB4MDAwMDk4OWMsIDB4MDA0MjMwMjIsIDB4MDA0MjMwMjJ9LAorCXsweDAwMDA5ODljLCAweDIwMTQwMDhmLCAweDIwMTQwMDhmfSwKKwl7MHgwMDAwOTg5YywgMHgwMGM0MDAwMiwgMHgwMGM0MDAwMn0sCisJezB4MDAwMDk4OWMsIDB4MDAzMDAwZjIsIDB4MDAzMDAwZjJ9LAorCXsweDAwMDA5ODljLCAweDAwNDQwMDE2LCAweDAwNDQwMDE2fSwKKwl7MHgwMDAwOTg5YywgMHgwMDQxMDA0MCwgMHgwMDQxMDA0MH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMTgwNWUsIDB4MDAwMTgwNWV9LAorCXsweDAwMDA5ODljLCAweDAwMDBjMGFiLCAweDAwMDBjMGFifSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDBlMSwgMHgwMDAwMDBlMX0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDcwODAsIDB4MDAwMDcwODB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0fSwKKwl7MHgwMDAwOThkMCwgMHgwMDAwMDAwZiwgMHgwMDEwMDAwZn0sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbms3XzkxMDBbXVsyXSA9IHsKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDA1MDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDA4MDAgfSwKLSAgICB7IDB4MDAwMDk4Y2MsIDB4MDAwMDAwMGUgfSwKKwkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCisJezB4MDAwMDk4OWMsIDB4MDAwMDA1MDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwODAwfSwKKwl7MHgwMDAwOThjYywgMHgwMDAwMDAwZX0sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkFkZGFjXzkxMDBbXVsyXSA9IHsKLSAgICB7MHgwMDAwOTg5YywgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAweDAwMDAwMDAwIH0sCi0gICAgezB4MDAwMDk4OWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAweDAwMDAwMDAwIH0sCi0gICAgezB4MDAwMDk4OWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAweDAwMDAwMDEwIH0sCi0gICAgezB4MDAwMDk4OWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAweDAwMDAwMDAwIH0sCi0gICAgezB4MDAwMDk4OWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAweDAwMDAwMDAwIH0sCi0gICAgezB4MDAwMDk4OWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAweDAwMDAwMDAwIH0sCi0gICAgezB4MDAwMDk4OWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAweDAwMDAwMDAwIH0sCi0gICAgezB4MDAwMDk4OWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgMHgwMDAwMDBjMCB9LAotICAgIHsweDAwMDA5ODljLCAweDAwMDAwMDE1IH0sCi0gICAgezB4MDAwMDk4OWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAweDAwMDAwMDAwIH0sCi0gICAgezB4MDAwMDk4OWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAweDAwMDAwMDAwIH0sCi0gICAgezB4MDAwMDk4OWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5OGNjLCAweDAwMDAwMDAwIH0sCisJLyogQWRkciAgICAgIGFsbG1vZGVzICAqLworCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAxMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMGMwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAxNX0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOThjYywgMHgwMDAwMDAwMH0sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyNTQxNk1vZGVzXzkxNjBbXVs2XSA9IHsKLSAgICB7IDB4MDAwMDEwMzAsIDB4MDAwMDAyMzAsIDB4MDAwMDA0NjAsIDB4MDAwMDAyYzAsIDB4MDAwMDAxNjAsIDB4MDAwMDAxZTAgfSwKLSAgICB7IDB4MDAwMDEwNzAsIDB4MDAwMDAxNjgsIDB4MDAwMDAyZDAsIDB4MDAwMDAzMTgsIDB4MDAwMDAxOGMsIDB4MDAwMDAxZTAgfSwKLSAgICB7IDB4MDAwMDEwYjAsIDB4MDAwMDBlNjAsIDB4MDAwMDFjYzAsIDB4MDAwMDdjNzAsIDB4MDAwMDNlMzgsIDB4MDAwMDExODAgfSwKLSAgICB7IDB4MDAwMDEwZjAsIDB4MDAwMGEwMDAsIDB4MDAwMTQwMDAsIDB4MDAwMTYwMDAsIDB4MDAwMGIwMDAsIDB4MDAwMTQwMDggfSwKLSAgICB7IDB4MDAwMDgwMTQsIDB4MDNlODAzZTgsIDB4MDdkMDA3ZDAsIDB4MTA4MDE2MDAsIDB4MDg0MDBiMDAsIDB4MDZlMDA2ZTAgfSwKLSAgICB7IDB4MDAwMDgwMWMsIDB4MTI4ZDkzYTcsIDB4MTI4ZDkzY2YsIDB4MTJlMDEzZDcsIDB4MTJlMDEzYWIsIDB4MDk4ODEzY2YgfSwKLSAgICB7IDB4MDAwMDk4MDQsIDB4MDAwMDAzMDAsIDB4MDAwMDAzYzQsIDB4MDAwMDAzYzQsIDB4MDAwMDAzMDAsIDB4MDAwMDAzMDMgfSwKLSAgICB7IDB4MDAwMDk4MjAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAgfSwKLSAgICB7IDB4MDAwMDk4MjQsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSwKLSAgICB7IDB4MDAwMDk4MjgsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEgfSwKLSAgICB7IDB4MDAwMDk4MzQsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSwKLSAgICB7IDB4MDAwMDk4MzgsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcgfSwKLSAgICB7IDB4MDAwMDk4NDQsIDB4MDM3MjE2MWUsIDB4MDM3MjE2MWUsIDB4MDM3MjE2YTAsIDB4MDM3MjE2YTAsIDB4MDM3MjE2YTAgfSwKLSAgICB7IDB4MDAwMDk4NDgsIDB4MDAxYTZhNjUsIDB4MDAxYTZhNjUsIDB4MDAxOTdhNjgsIDB4MDAxOTdhNjgsIDB4MDAxOTdhNjggfSwKLSAgICB7IDB4MDAwMGE4NDgsIDB4MDAxYTZhNjUsIDB4MDAxYTZhNjUsIDB4MDAxOTdhNjgsIDB4MDAxOTdhNjgsIDB4MDAxOTdhNjggfSwKLSAgICB7IDB4MDAwMGI4NDgsIDB4MDAxYTZhNjUsIDB4MDAxYTZhNjUsIDB4MDAxOTdhNjgsIDB4MDAxOTdhNjgsIDB4MDAxOTdhNjggfSwKLSAgICB7IDB4MDAwMDk4NTAsIDB4NmM0OGI0ZTIsIDB4NmM0OGI0ZTIsIDB4NmM0OGIwZTIsIDB4NmM0OGIwZTIsIDB4NmM0OGIwZTIgfSwKLSAgICB7IDB4MDAwMDk4NTgsIDB4N2VjODJkMmUsIDB4N2VjODJkMmUsIDB4N2VjODJkMmUsIDB4N2VjODJkMmUsIDB4N2VjODJkMmUgfSwKLSAgICB7IDB4MDAwMDk4NWMsIDB4MzEzOTVkNWUsIDB4MzEzOTVkNWUsIDB4MzEzOTVkNWUsIDB4MzEzOTVkNWUsIDB4MzEzOTVkNWUgfSwKLSAgICB7IDB4MDAwMDk4NjAsIDB4MDAwNDhkMTgsIDB4MDAwNDhkMTgsIDB4MDAwNDhkMjAsIDB4MDAwNDhkMjAsIDB4MDAwNDhkMTggfSwKLSAgICB7IDB4MDAwMGM4NjQsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAgfSwKLSAgICB7IDB4MDAwMDk4NjgsIDB4NDA5YTQwZDAsIDB4NDA5YTQwZDAsIDB4NDA5YTQwZDAsIDB4NDA5YTQwZDAsIDB4NDA5YTQwZDAgfSwKLSAgICB7IDB4MDAwMDk4NmMsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEgfSwKLSAgICB7IDB4MDAwMDk5MTQsIDB4MDAwMDA3ZDAsIDB4MDAwMDBmYTAsIDB4MDAwMDExMzAsIDB4MDAwMDA4OTgsIDB4MDAwMDA3ZDAgfSwKLSAgICB7IDB4MDAwMDk5MTgsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTYsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMTYgfSwKLSAgICB7IDB4MDAwMDk5MjQsIDB4ZDAwYThhMDcsIDB4ZDAwYThhMDcsIDB4ZDAwYThhMGQsIDB4ZDAwYThhMGQsIDB4ZDAwYThhMGQgfSwKLSAgICB7IDB4MDAwMDk5NDQsIDB4ZmZiODEwMjAsIDB4ZmZiODEwMjAsIDB4ZmZiODEwMjAsIDB4ZmZiODEwMjAsIDB4ZmZiODEwMjAgfSwKLSAgICB7IDB4MDAwMDk5NjAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAgfSwKLSAgICB7IDB4MDAwMGE5NjAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAgfSwKLSAgICB7IDB4MDAwMGI5NjAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAgfSwKLSAgICB7IDB4MDAwMDk5NjQsIDB4MDAwMDExMjAsIDB4MDAwMDExMjAsIDB4MDAwMDExMjAsIDB4MDAwMDExMjAsIDB4MDAwMDExMjAgfSwKLSAgICB7IDB4MDAwMGM5NjgsIDB4MDAwMDAzYjUsIDB4MDAwMDAzYjUsIDB4MDAwMDAzY2UsIDB4MDAwMDAzY2UsIDB4MDAwMDAzY2UgfSwKLSAgICB7IDB4MDAwMGM5YmMsIDB4MDAxYTA2MDAsIDB4MDAxYTA2MDAsIDB4MDAxYTBjMDAsIDB4MDAxYTBjMDAsIDB4MDAxYTBjMDAgfSwKLSAgICB7IDB4MDAwMDk5YzAsIDB4MDM4OTE5YmUsIDB4MDM4OTE5YmUsIDB4MDM4OTE5YmUsIDB4MDM4OTE5YmUsIDB4MDM4OTE5YmUgfSwKLSAgICB7IDB4MDAwMDk5YzQsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcgfSwKLSAgICB7IDB4MDAwMDk5YzgsIDB4NjBmNjUzMjksIDB4NjBmNjUzMjksIDB4NjBmNjUzMjksIDB4NjBmNjUzMjksIDB4NjBmNjUzMjkgfSwKLSAgICB7IDB4MDAwMDk5Y2MsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzggfSwKLSAgICB7IDB4MDAwMDk5ZDAsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQgfSwKLSAgICB7IDB4MDAwMDk5ZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5ZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEyMDQsIDB4MDAwMDA4ODAsIDB4MDAwMDA4ODAsIDB4MDAwMDA4ODAsIDB4MDAwMDA4ODAsIDB4MDAwMDA4ODAgfSwKLSAgICB7IDB4MDAwMGEyMDgsIDB4ZDZiZTQ3ODgsIDB4ZDZiZTQ3ODgsIDB4ZDAzZTQ3ODgsIDB4ZDAzZTQ3ODgsIDB4ZDAzZTQ3ODggfSwKLSAgICB7IDB4MDAwMGEyMGMsIDB4MDAyZmMxNjAsIDB4MDAyZmMxNjAsIDB4MDAyYWMxMjAsIDB4MDAyYWMxMjAsIDB4MDAyYWMxMjAgfSwKLSAgICB7IDB4MDAwMGIyMGMsIDB4MDAyZmMxNjAsIDB4MDAyZmMxNjAsIDB4MDAyYWMxMjAsIDB4MDAyYWMxMjAsIDB4MDAyYWMxMjAgfSwKLSAgICB7IDB4MDAwMGMyMGMsIDB4MDAyZmMxNjAsIDB4MDAyZmMxNjAsIDB4MDAyYWMxMjAsIDB4MDAyYWMxMjAsIDB4MDAyYWMxMjAgfSwKLSAgICB7IDB4MDAwMGEyMWMsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSwKLSAgICB7IDB4MDAwMGEyMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAyMTAsIDB4MDAwMDAxMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEyNzQsIDB4MGExYTljYWEsIDB4MGExYTljYWEsIDB4MGExYTdjYWEsIDB4MGExYTdjYWEsIDB4MGExYTdjYWEgfSwKLSAgICB7IDB4MDAwMGEzMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMDQsIDB4MzAwMzI2MDIsIDB4MzAwMzI2MDIsIDB4MmUwMzI0MDIsIDB4MmUwMzI0MDIsIDB4MmUwMzI0MDIgfSwKLSAgICB7IDB4MDAwMGEzMDgsIDB4NDgwNzNlMDYsIDB4NDgwNzNlMDYsIDB4NGEwYTNjMDYsIDB4NGEwYTNjMDYsIDB4NGEwYTNjMDYgfSwKLSAgICB7IDB4MDAwMGEzMGMsIDB4NTYwYjRjMGEsIDB4NTYwYjRjMGEsIDB4NjIxYTU0MGIsIDB4NjIxYTU0MGIsIDB4NjIxYTU0MGIgfSwKLSAgICB7IDB4MDAwMGEzMTAsIDB4NjQxYTYwMGYsIDB4NjQxYTYwMGYsIDB4NzY0ZjZjMWIsIDB4NzY0ZjZjMWIsIDB4NzY0ZjZjMWIgfSwKLSAgICB7IDB4MDAwMGEzMTQsIDB4N2E0ZjZlMWIsIDB4N2E0ZjZlMWIsIDB4ODQ1YjdhNWEsIDB4ODQ1YjdhNWEsIDB4ODQ1YjdhNWEgfSwKLSAgICB7IDB4MDAwMGEzMTgsIDB4OGM1YjdlNWEsIDB4OGM1YjdlNWEsIDB4OTUwZjhjY2YsIDB4OTUwZjhjY2YsIDB4OTUwZjhjY2YgfSwKLSAgICB7IDB4MDAwMGEzMWMsIDB4OWQwZjk2Y2YsIDB4OWQwZjk2Y2YsIDB4YTVjZjliNGYsIDB4YTVjZjliNGYsIDB4YTVjZjliNGYgfSwKLSAgICB7IDB4MDAwMGEzMjAsIDB4YjUxZmE2OWYsIDB4YjUxZmE2OWYsIDB4YmRkZmFmMWYsIDB4YmRkZmFmMWYsIDB4YmRkZmFmMWYgfSwKLSAgICB7IDB4MDAwMGEzMjQsIDB4Y2IzZmJkMDcsIDB4Y2IzZmJjYmYsIDB4ZDFmZmM5M2YsIDB4ZDFmZmM5M2YsIDB4ZDFmZmM5M2YgfSwKLSAgICB7IDB4MDAwMGEzMjgsIDB4MDAwMGQ3YmYsIDB4MDAwMGQ3YmYsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKKwl7MHgwMDAwMTAzMCwgMHgwMDAwMDIzMCwgMHgwMDAwMDQ2MCwgMHgwMDAwMDJjMCwgMHgwMDAwMDE2MCwgMHgwMDAwMDFlMH0sCisJezB4MDAwMDEwNzAsIDB4MDAwMDAxNjgsIDB4MDAwMDAyZDAsIDB4MDAwMDAzMTgsIDB4MDAwMDAxOGMsIDB4MDAwMDAxZTB9LAorCXsweDAwMDAxMGIwLCAweDAwMDAwZTYwLCAweDAwMDAxY2MwLCAweDAwMDA3YzcwLCAweDAwMDAzZTM4LCAweDAwMDAxMTgwfSwKKwl7MHgwMDAwMTBmMCwgMHgwMDAwYTAwMCwgMHgwMDAxNDAwMCwgMHgwMDAxNjAwMCwgMHgwMDAwYjAwMCwgMHgwMDAxNDAwOH0sCisJezB4MDAwMDgwMTQsIDB4MDNlODAzZTgsIDB4MDdkMDA3ZDAsIDB4MTA4MDE2MDAsIDB4MDg0MDBiMDAsIDB4MDZlMDA2ZTB9LAorCXsweDAwMDA4MDFjLCAweDEyOGQ5M2E3LCAweDEyOGQ5M2NmLCAweDEyZTAxM2Q3LCAweDEyZTAxM2FiLCAweDA5ODgxM2NmfSwKKwl7MHgwMDAwODEyMCwgMHgwOGYwNDgwMCwgMHgwOGYwNDgwMCwgMHgwOGYwNDgxMCwgMHgwOGYwNDgxMCwgMHgwOGYwNDgxMH0sCisJezB4MDAwMDgxZDAsIDB4MDAwMDMyMTAsIDB4MDAwMDMyMTAsIDB4MDAwMDMyMGEsIDB4MDAwMDMyMGEsIDB4MDAwMDMyMGF9LAorCXsweDAwMDA5ODA0LCAweDAwMDAwMzAwLCAweDAwMDAwM2M0LCAweDAwMDAwM2M0LCAweDAwMDAwMzAwLCAweDAwMDAwMzAzfSwKKwl7MHgwMDAwOTgyMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMH0sCisJezB4MDAwMDk4MjQsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGV9LAorCXsweDAwMDA5ODI4LCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxfSwKKwl7MHgwMDAwOTgzNCwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZX0sCisJezB4MDAwMDk4MzgsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDd9LAorCXsweDAwMDA5ODQ0LCAweDAzNzIxNjFlLCAweDAzNzIxNjFlLCAweDAzNzIxNmEwLCAweDAzNzIxNmEwLCAweDAzNzIxNmEwfSwKKwl7MHgwMDAwOTg0OCwgMHgwMDFhNmE2NSwgMHgwMDFhNmE2NSwgMHgwMDE5N2E2OCwgMHgwMDE5N2E2OCwgMHgwMDE5N2E2OH0sCisJezB4MDAwMGE4NDgsIDB4MDAxYTZhNjUsIDB4MDAxYTZhNjUsIDB4MDAxOTdhNjgsIDB4MDAxOTdhNjgsIDB4MDAxOTdhNjh9LAorCXsweDAwMDBiODQ4LCAweDAwMWE2YTY1LCAweDAwMWE2YTY1LCAweDAwMTk3YTY4LCAweDAwMTk3YTY4LCAweDAwMTk3YTY4fSwKKwl7MHgwMDAwOTg1MCwgMHg2YzQ4YjRlMiwgMHg2ZDQ4YjRlMiwgMHg2ZDQ4YjBlMiwgMHg2YzQ4YjBlMiwgMHg2YzQ4YjBlMn0sCisJezB4MDAwMDk4NTgsIDB4N2VjODJkMmUsIDB4N2VjODJkMmUsIDB4N2VjODJkMmUsIDB4N2VjODJkMmUsIDB4N2VjODJkMmV9LAorCXsweDAwMDA5ODVjLCAweDMxMzk1ZDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk1ZDVlLCAweDMxMzk1ZDVlfSwKKwl7MHgwMDAwOTg2MCwgMHgwMDA0OGQxOCwgMHgwMDA0OGQxOCwgMHgwMDA0OGQyMCwgMHgwMDA0OGQyMCwgMHgwMDA0OGQxOH0sCisJezB4MDAwMDk4NjQsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDB9LAorCXsweDAwMDA5ODY4LCAweDQwOWE0MGQwLCAweDQwOWE0MGQwLCAweDQwOWE0MGQwLCAweDQwOWE0MGQwLCAweDQwOWE0MGQwfSwKKwl7MHgwMDAwOTg2YywgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MX0sCisJezB4MDAwMDk5MTQsIDB4MDAwMDA3ZDAsIDB4MDAwMDBmYTAsIDB4MDAwMDExMzAsIDB4MDAwMDA4OTgsIDB4MDAwMDA3ZDB9LAorCXsweDAwMDA5OTE4LCAweDAwMDAwMDBhLCAweDAwMDAwMDE0LCAweDAwMDAwMDE2LCAweDAwMDAwMDBiLCAweDAwMDAwMDE2fSwKKwl7MHgwMDAwOTkyNCwgMHhkMDBhOGEwNywgMHhkMDBhOGEwNywgMHhkMDBhOGEwZCwgMHhkMDBhOGEwZCwgMHhkMDBhOGEwZH0sCisJezB4MDAwMDk5NDQsIDB4ZmZiODEwMjAsIDB4ZmZiODEwMjAsIDB4ZmZiODEwMjAsIDB4ZmZiODEwMjAsIDB4ZmZiODEwMjB9LAorCXsweDAwMDA5OTYwLCAweDAwMDA5YjQwLCAweDAwMDA5YjQwLCAweDAwMDA5YjQwLCAweDAwMDA5YjQwLCAweDAwMDA5YjQwfSwKKwl7MHgwMDAwYTk2MCwgMHgwMDAwOWI0MCwgMHgwMDAwOWI0MCwgMHgwMDAwOWI0MCwgMHgwMDAwOWI0MCwgMHgwMDAwOWI0MH0sCisJezB4MDAwMGI5NjAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDB9LAorCXsweDAwMDA5OTY0LCAweDAwMDAxMTIwLCAweDAwMDAxMTIwLCAweDAwMDAxMTIwLCAweDAwMDAxMTIwLCAweDAwMDAxMTIwfSwKKwl7MHgwMDAwYzk2OCwgMHgwMDAwMDNiNSwgMHgwMDAwMDNiNSwgMHgwMDAwMDNjZSwgMHgwMDAwMDNjZSwgMHgwMDAwMDNjZX0sCisJezB4MDAwMDk5YmMsIDB4MDAxYTA2MDAsIDB4MDAxYTA2MDAsIDB4MDAxYTBjMDAsIDB4MDAxYTBjMDAsIDB4MDAxYTBjMDB9LAorCXsweDAwMDA5OWMwLCAweDAzODkxOWJlLCAweDAzODkxOWJlLCAweDAzODkxOWJlLCAweDAzODkxOWJlLCAweDAzODkxOWJlfSwKKwl7MHgwMDAwOTljNCwgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMHgwNjMzNmY3N30sCisJezB4MDAwMDk5YzgsIDB4NmFmNjUzMjksIDB4NmFmNjUzMjksIDB4NmFmNjUzMjksIDB4NmFmNjUzMjksIDB4NmFmNjUzMjl9LAorCXsweDAwMDA5OWNjLCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4fSwKKwl7MHgwMDAwOTlkMCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NH0sCisJezB4MDAwMDk5ZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OWQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTIwNCwgMHgwMDAwMDg4MCwgMHgwMDAwMDg4MCwgMHgwMDAwMDg4MCwgMHgwMDAwMDg4MCwgMHgwMDAwMDg4MH0sCisJezB4MDAwMGEyMDgsIDB4ZDZiZTQ3ODgsIDB4ZDZiZTQ3ODgsIDB4ZDAzZTQ3ODgsIDB4ZDAzZTQ3ODgsIDB4ZDAzZTQ3ODh9LAorCXsweDAwMDBhMjBjLCAweDAwMmZjMTYwLCAweDAwMmZjMTYwLCAweDAwMmFjMTIwLCAweDAwMmFjMTIwLCAweDAwMmFjMTIwfSwKKwl7MHgwMDAwYjIwYywgMHgwMDJmYzE2MCwgMHgwMDJmYzE2MCwgMHgwMDJhYzEyMCwgMHgwMDJhYzEyMCwgMHgwMDJhYzEyMH0sCisJezB4MDAwMGMyMGMsIDB4MDAyZmMxNjAsIDB4MDAyZmMxNjAsIDB4MDAyYWMxMjAsIDB4MDAyYWMxMjAsIDB4MDAyYWMxMjB9LAorCXsweDAwMDBhMjFjLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhfSwKKwl7MHgwMDAwYTIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDIxMCwgMHgwMDAwMDEwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyNzQsIDB4MGExYTljYWEsIDB4MGExYTljYWEsIDB4MGExYTdjYWEsIDB4MGExYTdjYWEsIDB4MGExYTdjYWF9LAorCXsweDAwMDBhMzAwLCAweDE4MDEwMDAwLCAweDE4MDEwMDAwLCAweDE4MDEwMDAwLCAweDE4MDEwMDAwLCAweDE4MDEwMDAwfSwKKwl7MHgwMDAwYTMwNCwgMHgzMDAzMjYwMiwgMHgzMDAzMjYwMiwgMHgyZTAzMjQwMiwgMHgyZTAzMjQwMiwgMHgyZTAzMjQwMn0sCisJezB4MDAwMGEzMDgsIDB4NDgwNzNlMDYsIDB4NDgwNzNlMDYsIDB4NGEwYTNjMDYsIDB4NGEwYTNjMDYsIDB4NGEwYTNjMDZ9LAorCXsweDAwMDBhMzBjLCAweDU2MGI0YzBhLCAweDU2MGI0YzBhLCAweDYyMWE1NDBiLCAweDYyMWE1NDBiLCAweDYyMWE1NDBifSwKKwl7MHgwMDAwYTMxMCwgMHg2NDFhNjAwZiwgMHg2NDFhNjAwZiwgMHg3NjRmNmMxYiwgMHg3NjRmNmMxYiwgMHg3NjRmNmMxYn0sCisJezB4MDAwMGEzMTQsIDB4N2E0ZjZlMWIsIDB4N2E0ZjZlMWIsIDB4ODQ1YjdhNWEsIDB4ODQ1YjdhNWEsIDB4ODQ1YjdhNWF9LAorCXsweDAwMDBhMzE4LCAweDhjNWI3ZTVhLCAweDhjNWI3ZTVhLCAweDk1MGY4Y2NmLCAweDk1MGY4Y2NmLCAweDk1MGY4Y2NmfSwKKwl7MHgwMDAwYTMxYywgMHg5ZDBmOTZjZiwgMHg5ZDBmOTZjZiwgMHhhNWNmOWI0ZiwgMHhhNWNmOWI0ZiwgMHhhNWNmOWI0Zn0sCisJezB4MDAwMGEzMjAsIDB4YjUxZmE2OWYsIDB4YjUxZmE2OWYsIDB4YmRkZmFmMWYsIDB4YmRkZmFmMWYsIDB4YmRkZmFmMWZ9LAorCXsweDAwMDBhMzI0LCAweGNiM2ZiZDA3LCAweGNiM2ZiY2JmLCAweGQxZmZjOTNmLCAweGQxZmZjOTNmLCAweGQxZmZjOTNmfSwKKwl7MHgwMDAwYTMyOCwgMHgwMDAwZDdiZiwgMHgwMDAwZDdiZiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkNvbW1vbl85MTYwW11bMl0gPSB7Ci0gICAgeyAweDAwMDAwMDBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMDIwMDE1IH0sCi0gICAgeyAweDAwMDAwMDM0LCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwMDAwMDQwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDQ0LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDAwMDQ4LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDAwMDRjLCAweDAwMDAwMDEwIH0sCi0gICAgeyAweDAwMDAwMDUwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDU0LCAweDAwMDAwMDFmIH0sCi0gICAgeyAweDAwMDAwODAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODE4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODFjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODIwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMDQwLCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDQ0LCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDQ4LCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDRjLCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDUwLCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDU0LCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDU4LCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDVjLCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDYwLCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDY0LCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMjMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMjcwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMDM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMDc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMGI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMGY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMTM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMTc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMWI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMWY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMjM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMjc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMmI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMmY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMzM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMzc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxM2I4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxM2Y4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNDM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNDc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNGI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNGY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNTM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNTc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNWI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNWY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNjM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNjc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNmI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNmY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNzM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNzc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxN2I4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxN2Y4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMDNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMDdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMGJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMGZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMTNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMTdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMWJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMWZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMjNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMjdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMmJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMmZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMzNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMzdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxM2JjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxM2ZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNDNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNDdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA0MDMwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA0MDNjLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3MDEwLCAweDAwMDAwMDIwIH0sCi0gICAgeyAweDAwMDA3MDM4LCAweDAwMDAwNGMyIH0sCi0gICAgeyAweDAwMDA4MDA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDE4LCAweDAwMDAwNzAwIH0sCi0gICAgeyAweDAwMDA4MDIwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDQ4LCAweDQwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDU0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDU4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDVjLCAweDAwMGZjNzhmIH0sCi0gICAgeyAweDAwMDA4MDYwLCAweDAwMDAwMDBmIH0sCi0gICAgeyAweDAwMDA4MDY0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGMwLCAweDJhODIzMDFhIH0sCi0gICAgeyAweDAwMDA4MGM0LCAweDA1ZGMwMWUwIH0sCi0gICAgeyAweDAwMDA4MGM4LCAweDFmNDAyNzEwIH0sCi0gICAgeyAweDAwMDA4MGNjLCAweDAxZjQwMDAwIH0sCi0gICAgeyAweDAwMDA4MGQwLCAweDAwMDAxZTAwIH0sCi0gICAgeyAweDAwMDA4MGQ0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGQ4LCAweDAwNDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGUwLCAweGZmZmZmZmZmIH0sCi0gICAgeyAweDAwMDA4MGU0LCAweDAwMDBmZmZmIH0sCi0gICAgeyAweDAwMDA4MGU4LCAweDAwM2YzZjNmIH0sCi0gICAgeyAweDAwMDA4MGVjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGYwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGY0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGZjLCAweDAwMDIwMDAwIH0sCi0gICAgeyAweDAwMDA4MTAwLCAweDAwMDIwMDAwIH0sCi0gICAgeyAweDAwMDA4MTA0LCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDA4MTA4LCAweDAwMDAwMDUyIH0sCi0gICAgeyAweDAwMDA4MTBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTEwLCAweDAwMDAwMTY4IH0sCi0gICAgeyAweDAwMDA4MTE4LCAweDAwMDEwMGFhIH0sCi0gICAgeyAweDAwMDA4MTFjLCAweDAwMDAzMjEwIH0sCi0gICAgeyAweDAwMDA4MTIwLCAweDA4ZjA0ODAwIH0sCi0gICAgeyAweDAwMDA4MTI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTM0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTQ0LCAweGZmZmZmZmZmIH0sCi0gICAgeyAweDAwMDA4MTY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTcwLCAweDMyMTQzMzIwIH0sCi0gICAgeyAweDAwMDA4MTc0LCAweGZhYTRmYTUwIH0sCi0gICAgeyAweDAwMDA4MTc4LCAweDAwMDAwMTAwIH0sCi0gICAgeyAweDAwMDA4MTdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWM0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWQwLCAweDAwMDAzMjEwIH0sCi0gICAgeyAweDAwMDA4MWVjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWYwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWY0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjE4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjFjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjIwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjM0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjQwLCAweDAwMTAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjQ0LCAweDAwMTBmNDAwIH0sCi0gICAgeyAweDAwMDA4MjQ4LCAweDAwMDAwMTAwIH0sCi0gICAgeyAweDAwMDA4MjRjLCAweDAwMDFlODAwIH0sCi0gICAgeyAweDAwMDA4MjUwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjU0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjU4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjVjLCAweDQwMDAwMGZmIH0sCi0gICAgeyAweDAwMDA4MjYwLCAweDAwMDgwOTIyIH0sCi0gICAgeyAweDAwMDA4MjcwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4Mjc0LCAweDQwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4Mjc4LCAweDAwM2U0MTgwIH0sCi0gICAgeyAweDAwMDA4MjdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4Mjg0LCAweDAwMDAwMDJjIH0sCi0gICAgeyAweDAwMDA4Mjg4LCAweDAwMDAwMDJjIH0sCi0gICAgeyAweDAwMDA4MjhjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4Mjk0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4Mjk4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzE4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzJjLCAweDAwMDAwMDA3IH0sCi0gICAgeyAweDAwMDA4MzMwLCAweDAwMDAwMzAyIH0sCi0gICAgeyAweDAwMDA4MzM0LCAweDAwMDAwZTAwIH0sCi0gICAgeyAweDAwMDA4MzM4LCAweDAwZmYwMDAwIH0sCi0gICAgeyAweDAwMDA4MzNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzQwLCAweDAwMDEwN2ZmIH0sCi0gICAgeyAweDAwMDA5ODA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5ODBjLCAweGFkODQ4ZTE5IH0sCi0gICAgeyAweDAwMDA5ODEwLCAweDdkMTRlMDAwIH0sCi0gICAgeyAweDAwMDA5ODE0LCAweDljMGE5ZjZiIH0sCi0gICAgeyAweDAwMDA5ODFjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5ODJjLCAweDAwMDBhMDAwIH0sCi0gICAgeyAweDAwMDA5ODMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5ODNjLCAweDAwMjAwNDAwIH0sCi0gICAgeyAweDAwMDA5ODQwLCAweDIwNmEwMWFlIH0sCi0gICAgeyAweDAwMDA5ODRjLCAweDEyODQyMzNjIH0sCi0gICAgeyAweDAwMDA5ODU0LCAweDAwMDAwODU5IH0sCi0gICAgeyAweDAwMDA5OTAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTFjLCAweDEwMDAwZmZmIH0sCi0gICAgeyAweDAwMDA5OTIwLCAweDA1MTAwMDAwIH0sCi0gICAgeyAweDAwMDBhOTIwLCAweDA1MTAwMDAwIH0sCi0gICAgeyAweDAwMDBiOTIwLCAweDA1MTAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTI4LCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDA5OTJjLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDA5OTM0LCAweDFlMWYyMDIyIH0sCi0gICAgeyAweDAwMDA5OTM4LCAweDBhMGIwYzBkIH0sCi0gICAgeyAweDAwMDA5OTNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTQ4LCAweDkyODBiMjEyIH0sCi0gICAgeyAweDAwMDA5OTRjLCAweDAwMDIwMDI4IH0sCi0gICAgeyAweDAwMDA5OTU0LCAweDVmM2NhM2RlIH0sCi0gICAgeyAweDAwMDA5OTU4LCAweDIxMDhlY2ZmIH0sCi0gICAgeyAweDAwMDA5OTQwLCAweDAwNzUwNjA0IH0sCi0gICAgeyAweDAwMDBjOTVjLCAweDAwNGI2YThlIH0sCi0gICAgeyAweDAwMDA5OTcwLCAweDE5MGZiNTE1IH0sCi0gICAgeyAweDAwMDA5OTc0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTc4LCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDA5OTdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTgwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OThjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTkwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTk0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTk4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTljLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWE0LCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDA5OWE4LCAweDIwMWZmZjAwIH0sCi0gICAgeyAweDAwMDA5OWFjLCAweDAwNmYwMDAwIH0sCi0gICAgeyAweDAwMDA5OWIwLCAweDAzMDUxMDAwIH0sCi0gICAgeyAweDAwMDA5OWRjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWUwLCAweDAwMDAwMjAwIH0sCi0gICAgeyAweDAwMDA5OWU0LCAweGFhYWFhYWFhIH0sCi0gICAgeyAweDAwMDA5OWU4LCAweDNjNDY2NDc4IH0sCi0gICAgeyAweDAwMDA5OWVjLCAweDBjYzgwY2FhIH0sCi0gICAgeyAweDAwMDA5OWZjLCAweDAwMDAxMDQyIH0sCi0gICAgeyAweDAwMDA5YjAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjA0LCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDA5YjA4LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA5YjBjLCAweDAwMDAwMDAzIH0sCi0gICAgeyAweDAwMDA5YjEwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDA5YjE0LCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwMDA5YjE4LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDA5YjFjLCAweDAwMDAwMDA5IH0sCi0gICAgeyAweDAwMDA5YjIwLCAweDAwMDAwMDBhIH0sCi0gICAgeyAweDAwMDA5YjI0LCAweDAwMDAwMDBiIH0sCi0gICAgeyAweDAwMDA5YjI4LCAweDAwMDAwMDBjIH0sCi0gICAgeyAweDAwMDA5YjJjLCAweDAwMDAwMDBkIH0sCi0gICAgeyAweDAwMDA5YjMwLCAweDAwMDAwMDEwIH0sCi0gICAgeyAweDAwMDA5YjM0LCAweDAwMDAwMDExIH0sCi0gICAgeyAweDAwMDA5YjM4LCAweDAwMDAwMDEyIH0sCi0gICAgeyAweDAwMDA5YjNjLCAweDAwMDAwMDEzIH0sCi0gICAgeyAweDAwMDA5YjQwLCAweDAwMDAwMDE0IH0sCi0gICAgeyAweDAwMDA5YjQ0LCAweDAwMDAwMDE1IH0sCi0gICAgeyAweDAwMDA5YjQ4LCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDAwMDA5YjRjLCAweDAwMDAwMDE5IH0sCi0gICAgeyAweDAwMDA5YjUwLCAweDAwMDAwMDFhIH0sCi0gICAgeyAweDAwMDA5YjU0LCAweDAwMDAwMDFiIH0sCi0gICAgeyAweDAwMDA5YjU4LCAweDAwMDAwMDFjIH0sCi0gICAgeyAweDAwMDA5YjVjLCAweDAwMDAwMDFkIH0sCi0gICAgeyAweDAwMDA5YjYwLCAweDAwMDAwMDIwIH0sCi0gICAgeyAweDAwMDA5YjY0LCAweDAwMDAwMDIxIH0sCi0gICAgeyAweDAwMDA5YjY4LCAweDAwMDAwMDIyIH0sCi0gICAgeyAweDAwMDA5YjZjLCAweDAwMDAwMDIzIH0sCi0gICAgeyAweDAwMDA5YjcwLCAweDAwMDAwMDI0IH0sCi0gICAgeyAweDAwMDA5Yjc0LCAweDAwMDAwMDI1IH0sCi0gICAgeyAweDAwMDA5Yjc4LCAweDAwMDAwMDI4IH0sCi0gICAgeyAweDAwMDA5YjdjLCAweDAwMDAwMDI5IH0sCi0gICAgeyAweDAwMDA5YjgwLCAweDAwMDAwMDJhIH0sCi0gICAgeyAweDAwMDA5Yjg0LCAweDAwMDAwMDJiIH0sCi0gICAgeyAweDAwMDA5Yjg4LCAweDAwMDAwMDJjIH0sCi0gICAgeyAweDAwMDA5YjhjLCAweDAwMDAwMDJkIH0sCi0gICAgeyAweDAwMDA5YjkwLCAweDAwMDAwMDMwIH0sCi0gICAgeyAweDAwMDA5Yjk0LCAweDAwMDAwMDMxIH0sCi0gICAgeyAweDAwMDA5Yjk4LCAweDAwMDAwMDMyIH0sCi0gICAgeyAweDAwMDA5YjljLCAweDAwMDAwMDMzIH0sCi0gICAgeyAweDAwMDA5YmEwLCAweDAwMDAwMDM0IH0sCi0gICAgeyAweDAwMDA5YmE0LCAweDAwMDAwMDM1IH0sCi0gICAgeyAweDAwMDA5YmE4LCAweDAwMDAwMDM1IH0sCi0gICAgeyAweDAwMDA5YmFjLCAweDAwMDAwMDM1IH0sCi0gICAgeyAweDAwMDA5YmIwLCAweDAwMDAwMDM1IH0sCi0gICAgeyAweDAwMDA5YmI0LCAweDAwMDAwMDM1IH0sCi0gICAgeyAweDAwMDA5YmI4LCAweDAwMDAwMDM1IH0sCi0gICAgeyAweDAwMDA5YmJjLCAweDAwMDAwMDM1IH0sCi0gICAgeyAweDAwMDA5YmMwLCAweDAwMDAwMDM1IH0sCi0gICAgeyAweDAwMDA5YmM0LCAweDAwMDAwMDM1IH0sCi0gICAgeyAweDAwMDA5YmM4LCAweDAwMDAwMDM1IH0sCi0gICAgeyAweDAwMDA5YmNjLCAweDAwMDAwMDM1IH0sCi0gICAgeyAweDAwMDA5YmQwLCAweDAwMDAwMDM1IH0sCi0gICAgeyAweDAwMDA5YmQ0LCAweDAwMDAwMDM1IH0sCi0gICAgeyAweDAwMDA5YmQ4LCAweDAwMDAwMDM1IH0sCi0gICAgeyAweDAwMDA5YmRjLCAweDAwMDAwMDM1IH0sCi0gICAgeyAweDAwMDA5YmUwLCAweDAwMDAwMDM1IH0sCi0gICAgeyAweDAwMDA5YmU0LCAweDAwMDAwMDM1IH0sCi0gICAgeyAweDAwMDA5YmU4LCAweDAwMDAwMDM1IH0sCi0gICAgeyAweDAwMDA5YmVjLCAweDAwMDAwMDM1IH0sCi0gICAgeyAweDAwMDA5YmYwLCAweDAwMDAwMDM1IH0sCi0gICAgeyAweDAwMDA5YmY0LCAweDAwMDAwMDM1IH0sCi0gICAgeyAweDAwMDA5YmY4LCAweDAwMDAwMDEwIH0sCi0gICAgeyAweDAwMDA5YmZjLCAweDAwMDAwMDFhIH0sCi0gICAgeyAweDAwMDBhMjEwLCAweDQwODA2MzMzIH0sCi0gICAgeyAweDAwMDBhMjE0LCAweDAwMTA2YzEwIH0sCi0gICAgeyAweDAwMDBhMjE4LCAweDAwOWM0MDYwIH0sCi0gICAgeyAweDAwMDBhMjIwLCAweDAxODgzMGM2IH0sCi0gICAgeyAweDAwMDBhMjI0LCAweDAwMDAwNDAwIH0sCi0gICAgeyAweDAwMDBhMjI4LCAweDAwMWEwYmI1IH0sCi0gICAgeyAweDAwMDBhMjJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjM0LCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhMjM4LCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhMjNjLCAweDEzYzg4OWFmIH0sCi0gICAgeyAweDAwMDBhMjQwLCAweDM4NDkwYTIwIH0sCi0gICAgeyAweDAwMDBhMjQ0LCAweDAwMDA3YmI2IH0sCi0gICAgeyAweDAwMDBhMjQ4LCAweDBmZmYzZmZjIH0sCi0gICAgeyAweDAwMDBhMjRjLCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDBhMjUwLCAweDAwMDBlMDAwIH0sCi0gICAgeyAweDAwMDBhMjU0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjU4LCAweDBjYzc1MzgwIH0sCi0gICAgeyAweDAwMDBhMjVjLCAweDBmMGYwZjAxIH0sCi0gICAgeyAweDAwMDBhMjYwLCAweGRmYTkxZjAxIH0sCi0gICAgeyAweDAwMDBhMjY4LCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDBhMjZjLCAweDBlYmFlOWM2IH0sCi0gICAgeyAweDAwMDBiMjZjLCAweDBlYmFlOWM2IH0sCi0gICAgeyAweDAwMDBjMjZjLCAweDBlYmFlOWM2IH0sCi0gICAgeyAweDAwMDBkMjcwLCAweDAwODIwODIwIH0sCi0gICAgeyAweDAwMDBhMjc4LCAweDFjZTczOWNlIH0sCi0gICAgeyAweDAwMDBhMjdjLCAweDA1MDcwMWNlIH0sCi0gICAgeyAweDAwMDBhMzM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzQwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzQ0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzQ4LCAweDNmZmZmZmZmIH0sCi0gICAgeyAweDAwMDBhMzRjLCAweDNmZmZmZmZmIH0sCi0gICAgeyAweDAwMDBhMzUwLCAweDNmZmZmZmZmIH0sCi0gICAgeyAweDAwMDBhMzU0LCAweDAwMDNmZmZmIH0sCi0gICAgeyAweDAwMDBhMzU4LCAweDc5YmZhYTAzIH0sCi0gICAgeyAweDAwMDBkMzVjLCAweDA3ZmZmZmVmIH0sCi0gICAgeyAweDAwMDBkMzYwLCAweDBmZmZmZmU3IH0sCi0gICAgeyAweDAwMDBkMzY0LCAweDE3ZmZmZmU1IH0sCi0gICAgeyAweDAwMDBkMzY4LCAweDFmZmZmZmU0IH0sCi0gICAgeyAweDAwMDBkMzZjLCAweDM3ZmZmZmUzIH0sCi0gICAgeyAweDAwMDBkMzcwLCAweDNmZmZmZmUzIH0sCi0gICAgeyAweDAwMDBkMzc0LCAweDU3ZmZmZmUzIH0sCi0gICAgeyAweDAwMDBkMzc4LCAweDVmZmZmZmUyIH0sCi0gICAgeyAweDAwMDBkMzdjLCAweDdmZmZmZmUyIH0sCi0gICAgeyAweDAwMDBkMzgwLCAweDdmM2M3YmJhIH0sCi0gICAgeyAweDAwMDBkMzg0LCAweGYzMzA3ZmYwIH0sCi0gICAgeyAweDAwMDBhMzg4LCAweDBjMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzhjLCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhMzkwLCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhMzk0LCAweDFjZTczOWNlIH0sCi0gICAgeyAweDAwMDBhMzk4LCAweDAwMDAwMWNlIH0sCi0gICAgeyAweDAwMDBhMzljLCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDBhM2EwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2E0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2E4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2FjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2IwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2I0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2I4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2JjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2MwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2M0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2M4LCAweDAwMDAwMjQ2IH0sCi0gICAgeyAweDAwMDBhM2NjLCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhM2QwLCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhM2Q0LCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhM2RjLCAweDFjZTczOWNlIH0sCi0gICAgeyAweDAwMDBhM2UwLCAweDAwMDAwMWNlIH0sCisJLyogQWRkciAgICAgIGFsbG1vZGVzICAqLworCXsweDAwMDAwMDBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDAzMCwgMHgwMDAyMDAxNX0sCisJezB4MDAwMDAwMzQsIDB4MDAwMDAwMDV9LAorCXsweDAwMDAwMDQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDA0NCwgMHgwMDAwMDAwOH0sCisJezB4MDAwMDAwNDgsIDB4MDAwMDAwMDh9LAorCXsweDAwMDAwMDRjLCAweDAwMDAwMDEwfSwKKwl7MHgwMDAwMDA1MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDAwNTQsIDB4MDAwMDAwMWZ9LAorCXsweDAwMDAwODAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDgwNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDA4MDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwODBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDgxMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDA4MTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwODE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDgxYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDA4MjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwODI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTA0MCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNDQsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDQ4LCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA0YywgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNTAsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDU0LCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA1OCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNWMsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDYwLCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA2NCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEyMzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMjcwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTAzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEwNzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMGI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTBmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDExMzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMTc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTFiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDExZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMjM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTI3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEyYjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMmY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTMzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEzNzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxM2I4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTNmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE0MzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNDc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTRiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE0ZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNTM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTU3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE1YjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNWY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTYzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE2NzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNmI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTZmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE3MzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNzc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTdiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE3ZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMDNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTA3YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEwYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMGZjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTEzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDExN2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMWJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTFmYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEyM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMjdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTJiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEyZmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMzNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTM3YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEzYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxM2ZjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTQzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE0N2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA0MDMwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNDAzYywgMHgwMDAwMDAwMn0sCisJezB4MDAwMDcwMTAsIDB4MDAwMDAwMjB9LAorCXsweDAwMDA3MDM4LCAweDAwMDAwNGMyfSwKKwl7MHgwMDAwODAwNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwMDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAxOCwgMHgwMDAwMDcwMH0sCisJezB4MDAwMDgwMjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwNDgsIDB4NDAwMDAwMDB9LAorCXsweDAwMDA4MDU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODA1OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwNWMsIDB4MDAwZmM3OGZ9LAorCXsweDAwMDA4MDYwLCAweDAwMDAwMDBmfSwKKwl7MHgwMDAwODA2NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwYzAsIDB4MmE4MjMwMWF9LAorCXsweDAwMDA4MGM0LCAweDA1ZGMwMWUwfSwKKwl7MHgwMDAwODBjOCwgMHgxZjQwMjcxMH0sCisJezB4MDAwMDgwY2MsIDB4MDFmNDAwMDB9LAorCXsweDAwMDA4MGQwLCAweDAwMDAxZTAwfSwKKwl7MHgwMDAwODBkNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwZDgsIDB4MDA0MDAwMDB9LAorCXsweDAwMDA4MGUwLCAweGZmZmZmZmZmfSwKKwl7MHgwMDAwODBlNCwgMHgwMDAwZmZmZn0sCisJezB4MDAwMDgwZTgsIDB4MDAzZjNmM2Z9LAorCXsweDAwMDA4MGVjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBmMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwZjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBmYywgMHgwMDAyMDAwMH0sCisJezB4MDAwMDgxMDAsIDB4MDAwMjAwMDB9LAorCXsweDAwMDA4MTA0LCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwODEwOCwgMHgwMDAwMDA1Mn0sCisJezB4MDAwMDgxMGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTEwLCAweDAwMDAwMTY4fSwKKwl7MHgwMDAwODExOCwgMHgwMDAxMDBhYX0sCisJezB4MDAwMDgxMWMsIDB4MDAwMDMyMTB9LAorCXsweDAwMDA4MTI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEyOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEzNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODE0NCwgMHhmZmZmZmZmZn0sCisJezB4MDAwMDgxNjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTZjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODE3MCwgMHgzMjE0MzMyMH0sCisJezB4MDAwMDgxNzQsIDB4ZmFhNGZhNTB9LAorCXsweDAwMDA4MTc4LCAweDAwMDAwMTAwfSwKKwl7MHgwMDAwODE3YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxYzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWVjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFmMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxZjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFmYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjA0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIxNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIyMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIyYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjQwLCAweDAwMTAwMDAwfSwKKwl7MHgwMDAwODI0NCwgMHgwMDEwZjQwMH0sCisJezB4MDAwMDgyNDgsIDB4MDAwMDAxMDB9LAorCXsweDAwMDA4MjRjLCAweDAwMDFlODAwfSwKKwl7MHgwMDAwODI1MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyNTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjU4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI1YywgMHg0MDAwMDBmZn0sCisJezB4MDAwMDgyNjAsIDB4MDAwODA5MjJ9LAorCXsweDAwMDA4MjY0LCAweDg4YTAwMDEwfSwKKwl7MHgwMDAwODI3MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyNzQsIDB4NDAwMDAwMDB9LAorCXsweDAwMDA4Mjc4LCAweDAwM2U0MTgwfSwKKwl7MHgwMDAwODI3YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyODQsIDB4MDAwMDAwMmN9LAorCXsweDAwMDA4Mjg4LCAweDAwMDAwMDJjfSwKKwl7MHgwMDAwODI4YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyOTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4Mjk4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODMwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzMDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODMwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzMTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzE0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODMxOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzMjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzJjLCAweDAwMDAwMDA3fSwKKwl7MHgwMDAwODMzMCwgMHgwMDAwMDMwMn0sCisJezB4MDAwMDgzMzQsIDB4MDAwMDBlMDB9LAorCXsweDAwMDA4MzM4LCAweDAwZmYwMDAwfSwKKwl7MHgwMDAwODMzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzNDAsIDB4MDAwMTA3ZmZ9LAorCXsweDAwMDA5ODA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTgwYywgMHhhZDg0OGUxOX0sCisJezB4MDAwMDk4MTAsIDB4N2QxNGUwMDB9LAorCXsweDAwMDA5ODE0LCAweDljMGE5ZjZifSwKKwl7MHgwMDAwOTgxYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4MmMsIDB4MDAwMGEwMDB9LAorCXsweDAwMDA5ODMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTgzYywgMHgwMDIwMDQwMH0sCisJezB4MDAwMDk4NDAsIDB4MjA2YTAxYWV9LAorCXsweDAwMDA5ODRjLCAweDEyODQyMzNjfSwKKwl7MHgwMDAwOTg1NCwgMHgwMDAwMDg1OX0sCisJezB4MDAwMDk5MDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTA0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTkwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5MGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTFjLCAweDEwMDAwZmZmfSwKKwl7MHgwMDAwOTkyMCwgMHgwNTEwMDAwMH0sCisJezB4MDAwMGE5MjAsIDB4MDUxMDAwMDB9LAorCXsweDAwMDBiOTIwLCAweDA1MTAwMDAwfSwKKwl7MHgwMDAwOTkyOCwgMHgwMDAwMDAwMX0sCisJezB4MDAwMDk5MmMsIDB4MDAwMDAwMDR9LAorCXsweDAwMDA5OTM0LCAweDFlMWYyMDIyfSwKKwl7MHgwMDAwOTkzOCwgMHgwYTBiMGMwZH0sCisJezB4MDAwMDk5M2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTQ4LCAweDkyODBiMjEyfSwKKwl7MHgwMDAwOTk0YywgMHgwMDAyMDAyOH0sCisJezB4MDAwMDk5NTQsIDB4NWYzY2EzZGV9LAorCXsweDAwMDA5OTU4LCAweDIxMDhlY2ZmfSwKKwl7MHgwMDAwOTk0MCwgMHgwMDc1MDYwNH0sCisJezB4MDAwMGM5NWMsIDB4MDA0YjZhOGV9LAorCXsweDAwMDA5OTcwLCAweDE5MGZiNTE1fSwKKwl7MHgwMDAwOTk3NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5NzgsIDB4MDAwMDAwMDF9LAorCXsweDAwMDA5OTdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTk4MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5ODQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTg4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTk4YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5OTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTk0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTk5OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OWEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTlhNCwgMHgwMDAwMDAwMX0sCisJezB4MDAwMDk5YTgsIDB4MjAxZmZmMDB9LAorCXsweDAwMDA5OWFjLCAweDAwNmYwMDAwfSwKKwl7MHgwMDAwOTliMCwgMHgwMzA1MTAwMH0sCisJezB4MDAwMDk5ZGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OWUwLCAweDAwMDAwMjAwfSwKKwl7MHgwMDAwOTllNCwgMHhhYWFhYWFhYX0sCisJezB4MDAwMDk5ZTgsIDB4M2M0NjY0Nzh9LAorCXsweDAwMDA5OWVjLCAweDBjYzgwY2FhfSwKKwl7MHgwMDAwOTlmYywgMHgwMDAwMTA0Mn0sCisJezB4MDAwMDliMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YjA0LCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwOWIwOCwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDliMGMsIDB4MDAwMDAwMDN9LAorCXsweDAwMDA5YjEwLCAweDAwMDAwMDA0fSwKKwl7MHgwMDAwOWIxNCwgMHgwMDAwMDAwNX0sCisJezB4MDAwMDliMTgsIDB4MDAwMDAwMDh9LAorCXsweDAwMDA5YjFjLCAweDAwMDAwMDA5fSwKKwl7MHgwMDAwOWIyMCwgMHgwMDAwMDAwYX0sCisJezB4MDAwMDliMjQsIDB4MDAwMDAwMGJ9LAorCXsweDAwMDA5YjI4LCAweDAwMDAwMDBjfSwKKwl7MHgwMDAwOWIyYywgMHgwMDAwMDAwZH0sCisJezB4MDAwMDliMzAsIDB4MDAwMDAwMTB9LAorCXsweDAwMDA5YjM0LCAweDAwMDAwMDExfSwKKwl7MHgwMDAwOWIzOCwgMHgwMDAwMDAxMn0sCisJezB4MDAwMDliM2MsIDB4MDAwMDAwMTN9LAorCXsweDAwMDA5YjQwLCAweDAwMDAwMDE0fSwKKwl7MHgwMDAwOWI0NCwgMHgwMDAwMDAxNX0sCisJezB4MDAwMDliNDgsIDB4MDAwMDAwMTh9LAorCXsweDAwMDA5YjRjLCAweDAwMDAwMDE5fSwKKwl7MHgwMDAwOWI1MCwgMHgwMDAwMDAxYX0sCisJezB4MDAwMDliNTQsIDB4MDAwMDAwMWJ9LAorCXsweDAwMDA5YjU4LCAweDAwMDAwMDFjfSwKKwl7MHgwMDAwOWI1YywgMHgwMDAwMDAxZH0sCisJezB4MDAwMDliNjAsIDB4MDAwMDAwMjB9LAorCXsweDAwMDA5YjY0LCAweDAwMDAwMDIxfSwKKwl7MHgwMDAwOWI2OCwgMHgwMDAwMDAyMn0sCisJezB4MDAwMDliNmMsIDB4MDAwMDAwMjN9LAorCXsweDAwMDA5YjcwLCAweDAwMDAwMDI0fSwKKwl7MHgwMDAwOWI3NCwgMHgwMDAwMDAyNX0sCisJezB4MDAwMDliNzgsIDB4MDAwMDAwMjh9LAorCXsweDAwMDA5YjdjLCAweDAwMDAwMDI5fSwKKwl7MHgwMDAwOWI4MCwgMHgwMDAwMDAyYX0sCisJezB4MDAwMDliODQsIDB4MDAwMDAwMmJ9LAorCXsweDAwMDA5Yjg4LCAweDAwMDAwMDJjfSwKKwl7MHgwMDAwOWI4YywgMHgwMDAwMDAyZH0sCisJezB4MDAwMDliOTAsIDB4MDAwMDAwMzB9LAorCXsweDAwMDA5Yjk0LCAweDAwMDAwMDMxfSwKKwl7MHgwMDAwOWI5OCwgMHgwMDAwMDAzMn0sCisJezB4MDAwMDliOWMsIDB4MDAwMDAwMzN9LAorCXsweDAwMDA5YmEwLCAweDAwMDAwMDM0fSwKKwl7MHgwMDAwOWJhNCwgMHgwMDAwMDAzNX0sCisJezB4MDAwMDliYTgsIDB4MDAwMDAwMzV9LAorCXsweDAwMDA5YmFjLCAweDAwMDAwMDM1fSwKKwl7MHgwMDAwOWJiMCwgMHgwMDAwMDAzNX0sCisJezB4MDAwMDliYjQsIDB4MDAwMDAwMzV9LAorCXsweDAwMDA5YmI4LCAweDAwMDAwMDM1fSwKKwl7MHgwMDAwOWJiYywgMHgwMDAwMDAzNX0sCisJezB4MDAwMDliYzAsIDB4MDAwMDAwMzV9LAorCXsweDAwMDA5YmM0LCAweDAwMDAwMDM1fSwKKwl7MHgwMDAwOWJjOCwgMHgwMDAwMDAzNX0sCisJezB4MDAwMDliY2MsIDB4MDAwMDAwMzV9LAorCXsweDAwMDA5YmQwLCAweDAwMDAwMDM1fSwKKwl7MHgwMDAwOWJkNCwgMHgwMDAwMDAzNX0sCisJezB4MDAwMDliZDgsIDB4MDAwMDAwMzV9LAorCXsweDAwMDA5YmRjLCAweDAwMDAwMDM1fSwKKwl7MHgwMDAwOWJlMCwgMHgwMDAwMDAzNX0sCisJezB4MDAwMDliZTQsIDB4MDAwMDAwMzV9LAorCXsweDAwMDA5YmU4LCAweDAwMDAwMDM1fSwKKwl7MHgwMDAwOWJlYywgMHgwMDAwMDAzNX0sCisJezB4MDAwMDliZjAsIDB4MDAwMDAwMzV9LAorCXsweDAwMDA5YmY0LCAweDAwMDAwMDM1fSwKKwl7MHgwMDAwOWJmOCwgMHgwMDAwMDAxMH0sCisJezB4MDAwMDliZmMsIDB4MDAwMDAwMWF9LAorCXsweDAwMDBhMjEwLCAweDQwODA2MzMzfSwKKwl7MHgwMDAwYTIxNCwgMHgwMDEwNmMxMH0sCisJezB4MDAwMGEyMTgsIDB4MDA5YzQwNjB9LAorCXsweDAwMDBhMjIwLCAweDAxODgzMGM2fSwKKwl7MHgwMDAwYTIyNCwgMHgwMDAwMDQwMH0sCisJezB4MDAwMGEyMjgsIDB4MDAxYTBiYjV9LAorCXsweDAwMDBhMjJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTIzNCwgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEyMzgsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhMjNjLCAweDEzYzg4OWFmfSwKKwl7MHgwMDAwYTI0MCwgMHgzODQ5MGEyMH0sCisJezB4MDAwMGEyNDQsIDB4MDAwMDdiYjZ9LAorCXsweDAwMDBhMjQ4LCAweDBmZmYzZmZjfSwKKwl7MHgwMDAwYTI0YywgMHgwMDAwMDAwMX0sCisJezB4MDAwMGEyNTAsIDB4MDAwMGUwMDB9LAorCXsweDAwMDBhMjU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTI1OCwgMHgwY2M3NTM4MH0sCisJezB4MDAwMGEyNWMsIDB4MGYwZjBmMDF9LAorCXsweDAwMDBhMjYwLCAweGRmYTkxZjAxfSwKKwl7MHgwMDAwYTI2OCwgMHgwMDAwMDAwMX0sCisJezB4MDAwMGEyNmMsIDB4MGU3OWU1YzZ9LAorCXsweDAwMDBiMjZjLCAweDBlNzllNWM2fSwKKwl7MHgwMDAwYzI2YywgMHgwZTc5ZTVjNn0sCisJezB4MDAwMGQyNzAsIDB4MDA4MjA4MjB9LAorCXsweDAwMDBhMjc4LCAweDFjZTczOWNlfSwKKwl7MHgwMDAwYTI3YywgMHgwNTA3MDFjZX0sCisJezB4MDAwMGEzMzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTM0MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzNDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzQ4LCAweDNmZmZmZmZmfSwKKwl7MHgwMDAwYTM0YywgMHgzZmZmZmZmZn0sCisJezB4MDAwMGEzNTAsIDB4M2ZmZmZmZmZ9LAorCXsweDAwMDBhMzU0LCAweDAwMDNmZmZmfSwKKwl7MHgwMDAwYTM1OCwgMHg3OWJmYWEwM30sCisJezB4MDAwMGQzNWMsIDB4MDdmZmZmZWZ9LAorCXsweDAwMDBkMzYwLCAweDBmZmZmZmU3fSwKKwl7MHgwMDAwZDM2NCwgMHgxN2ZmZmZlNX0sCisJezB4MDAwMGQzNjgsIDB4MWZmZmZmZTR9LAorCXsweDAwMDBkMzZjLCAweDM3ZmZmZmUzfSwKKwl7MHgwMDAwZDM3MCwgMHgzZmZmZmZlM30sCisJezB4MDAwMGQzNzQsIDB4NTdmZmZmZTN9LAorCXsweDAwMDBkMzc4LCAweDVmZmZmZmUyfSwKKwl7MHgwMDAwZDM3YywgMHg3ZmZmZmZlMn0sCisJezB4MDAwMGQzODAsIDB4N2YzYzdiYmF9LAorCXsweDAwMDBkMzg0LCAweGYzMzA3ZmYwfSwKKwl7MHgwMDAwYTM4OCwgMHgwYzAwMDAwMH0sCisJezB4MDAwMGEzOGMsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhMzkwLCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTM5NCwgMHgxY2U3MzljZX0sCisJezB4MDAwMGEzOTgsIDB4MDAwMDAxY2V9LAorCXsweDAwMDBhMzljLCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwYTNhMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzYTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2E4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTNhYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzYjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2I0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTNiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2MwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTNjNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzYzgsIDB4MDAwMDAyNDZ9LAorCXsweDAwMDBhM2NjLCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTNkMCwgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzZDQsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2RjLCAweDFjZTczOWNlfSwKKwl7MHgwMDAwYTNlMCwgMHgwMDAwMDFjZX0sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbmswXzkxNjBbXVsyXSA9IHsKLSAgICB7IDB4MDAwMDk4YjAsIDB4MWU1Nzk1ZTUgfSwKLSAgICB7IDB4MDAwMDk4ZTAsIDB4MDIwMDgwMjAgfSwKKwkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCisJezB4MDAwMDk4YjAsIDB4MWU1Nzk1ZTV9LAorCXsweDAwMDA5OGUwLCAweDAyMDA4MDIwfSwKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QkJfUmZHYWluXzkxNjBbXVszXSA9IHsKLSAgICB7IDB4MDAwMDlhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMDQsIDB4MDAwMDAwNDAsIDB4MDAwMDAwNDAgfSwKLSAgICB7IDB4MDAwMDlhMDgsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSwKLSAgICB7IDB4MDAwMDlhMGMsIDB4MDAwMDAxYTEsIDB4MDAwMDAxNDEgfSwKLSAgICB7IDB4MDAwMDlhMTAsIDB4MDAwMDAxZTEsIDB4MDAwMDAxODEgfSwKLSAgICB7IDB4MDAwMDlhMTQsIDB4MDAwMDAwMjEsIDB4MDAwMDAxYzEgfSwKLSAgICB7IDB4MDAwMDlhMTgsIDB4MDAwMDAwNjEsIDB4MDAwMDAwMDEgfSwKLSAgICB7IDB4MDAwMDlhMWMsIDB4MDAwMDAxNjgsIDB4MDAwMDAwNDEgfSwKLSAgICB7IDB4MDAwMDlhMjAsIDB4MDAwMDAxYTgsIDB4MDAwMDAxYTggfSwKLSAgICB7IDB4MDAwMDlhMjQsIDB4MDAwMDAxZTgsIDB4MDAwMDAxZTggfSwKLSAgICB7IDB4MDAwMDlhMjgsIDB4MDAwMDAwMjgsIDB4MDAwMDAwMjggfSwKLSAgICB7IDB4MDAwMDlhMmMsIDB4MDAwMDAwNjgsIDB4MDAwMDAwNjggfSwKLSAgICB7IDB4MDAwMDlhMzAsIDB4MDAwMDAxODksIDB4MDAwMDAwYTggfSwKLSAgICB7IDB4MDAwMDlhMzQsIDB4MDAwMDAxYzksIDB4MDAwMDAxNjkgfSwKLSAgICB7IDB4MDAwMDlhMzgsIDB4MDAwMDAwMDksIDB4MDAwMDAxYTkgfSwKLSAgICB7IDB4MDAwMDlhM2MsIDB4MDAwMDAwNDksIDB4MDAwMDAxZTkgfSwKLSAgICB7IDB4MDAwMDlhNDAsIDB4MDAwMDAwODksIDB4MDAwMDAwMjkgfSwKLSAgICB7IDB4MDAwMDlhNDQsIDB4MDAwMDAxNzAsIDB4MDAwMDAwNjkgfSwKLSAgICB7IDB4MDAwMDlhNDgsIDB4MDAwMDAxYjAsIDB4MDAwMDAxOTAgfSwKLSAgICB7IDB4MDAwMDlhNGMsIDB4MDAwMDAxZjAsIDB4MDAwMDAxZDAgfSwKLSAgICB7IDB4MDAwMDlhNTAsIDB4MDAwMDAwMzAsIDB4MDAwMDAwMTAgfSwKLSAgICB7IDB4MDAwMDlhNTQsIDB4MDAwMDAwNzAsIDB4MDAwMDAwNTAgfSwKLSAgICB7IDB4MDAwMDlhNTgsIDB4MDAwMDAxOTEsIDB4MDAwMDAwOTAgfSwKLSAgICB7IDB4MDAwMDlhNWMsIDB4MDAwMDAxZDEsIDB4MDAwMDAxNTEgfSwKLSAgICB7IDB4MDAwMDlhNjAsIDB4MDAwMDAwMTEsIDB4MDAwMDAxOTEgfSwKLSAgICB7IDB4MDAwMDlhNjQsIDB4MDAwMDAwNTEsIDB4MDAwMDAxZDEgfSwKLSAgICB7IDB4MDAwMDlhNjgsIDB4MDAwMDAwOTEsIDB4MDAwMDAwMTEgfSwKLSAgICB7IDB4MDAwMDlhNmMsIDB4MDAwMDAxYjgsIDB4MDAwMDAwNTEgfSwKLSAgICB7IDB4MDAwMDlhNzAsIDB4MDAwMDAxZjgsIDB4MDAwMDAxOTggfSwKLSAgICB7IDB4MDAwMDlhNzQsIDB4MDAwMDAwMzgsIDB4MDAwMDAxZDggfSwKLSAgICB7IDB4MDAwMDlhNzgsIDB4MDAwMDAwNzgsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDAwMDlhN2MsIDB4MDAwMDAxOTksIDB4MDAwMDAwNTggfSwKLSAgICB7IDB4MDAwMDlhODAsIDB4MDAwMDAxZDksIDB4MDAwMDAwOTggfSwKLSAgICB7IDB4MDAwMDlhODQsIDB4MDAwMDAwMTksIDB4MDAwMDAxNTkgfSwKLSAgICB7IDB4MDAwMDlhODgsIDB4MDAwMDAwNTksIDB4MDAwMDAxOTkgfSwKLSAgICB7IDB4MDAwMDlhOGMsIDB4MDAwMDAwOTksIDB4MDAwMDAxZDkgfSwKLSAgICB7IDB4MDAwMDlhOTAsIDB4MDAwMDAwZDksIDB4MDAwMDAwMTkgfSwKLSAgICB7IDB4MDAwMDlhOTQsIDB4MDAwMDAwZjksIDB4MDAwMDAwNTkgfSwKLSAgICB7IDB4MDAwMDlhOTgsIDB4MDAwMDAwZjksIDB4MDAwMDAwOTkgfSwKLSAgICB7IDB4MDAwMDlhOWMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZDkgfSwKLSAgICB7IDB4MDAwMDlhYTAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhYTQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhYTgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhYWMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhYjAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhYjQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhYjgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhYmMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhYzAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhYzQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhYzgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhY2MsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhZDAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhZDQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhZDgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhZGMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhZTAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhZTQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhZTgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhZWMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhZjAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhZjQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhZjgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKLSAgICB7IDB4MDAwMDlhZmMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKKwkvKiBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICovCisJezB4MDAwMDlhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTA0LCAweDAwMDAwMDQwLCAweDAwMDAwMDQwfSwKKwl7MHgwMDAwOWEwOCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MH0sCisJezB4MDAwMDlhMGMsIDB4MDAwMDAxYTEsIDB4MDAwMDAxNDF9LAorCXsweDAwMDA5YTEwLCAweDAwMDAwMWUxLCAweDAwMDAwMTgxfSwKKwl7MHgwMDAwOWExNCwgMHgwMDAwMDAyMSwgMHgwMDAwMDFjMX0sCisJezB4MDAwMDlhMTgsIDB4MDAwMDAwNjEsIDB4MDAwMDAwMDF9LAorCXsweDAwMDA5YTFjLCAweDAwMDAwMTY4LCAweDAwMDAwMDQxfSwKKwl7MHgwMDAwOWEyMCwgMHgwMDAwMDFhOCwgMHgwMDAwMDFhOH0sCisJezB4MDAwMDlhMjQsIDB4MDAwMDAxZTgsIDB4MDAwMDAxZTh9LAorCXsweDAwMDA5YTI4LCAweDAwMDAwMDI4LCAweDAwMDAwMDI4fSwKKwl7MHgwMDAwOWEyYywgMHgwMDAwMDA2OCwgMHgwMDAwMDA2OH0sCisJezB4MDAwMDlhMzAsIDB4MDAwMDAxODksIDB4MDAwMDAwYTh9LAorCXsweDAwMDA5YTM0LCAweDAwMDAwMWM5LCAweDAwMDAwMTY5fSwKKwl7MHgwMDAwOWEzOCwgMHgwMDAwMDAwOSwgMHgwMDAwMDFhOX0sCisJezB4MDAwMDlhM2MsIDB4MDAwMDAwNDksIDB4MDAwMDAxZTl9LAorCXsweDAwMDA5YTQwLCAweDAwMDAwMDg5LCAweDAwMDAwMDI5fSwKKwl7MHgwMDAwOWE0NCwgMHgwMDAwMDE3MCwgMHgwMDAwMDA2OX0sCisJezB4MDAwMDlhNDgsIDB4MDAwMDAxYjAsIDB4MDAwMDAxOTB9LAorCXsweDAwMDA5YTRjLCAweDAwMDAwMWYwLCAweDAwMDAwMWQwfSwKKwl7MHgwMDAwOWE1MCwgMHgwMDAwMDAzMCwgMHgwMDAwMDAxMH0sCisJezB4MDAwMDlhNTQsIDB4MDAwMDAwNzAsIDB4MDAwMDAwNTB9LAorCXsweDAwMDA5YTU4LCAweDAwMDAwMTkxLCAweDAwMDAwMDkwfSwKKwl7MHgwMDAwOWE1YywgMHgwMDAwMDFkMSwgMHgwMDAwMDE1MX0sCisJezB4MDAwMDlhNjAsIDB4MDAwMDAwMTEsIDB4MDAwMDAxOTF9LAorCXsweDAwMDA5YTY0LCAweDAwMDAwMDUxLCAweDAwMDAwMWQxfSwKKwl7MHgwMDAwOWE2OCwgMHgwMDAwMDA5MSwgMHgwMDAwMDAxMX0sCisJezB4MDAwMDlhNmMsIDB4MDAwMDAxYjgsIDB4MDAwMDAwNTF9LAorCXsweDAwMDA5YTcwLCAweDAwMDAwMWY4LCAweDAwMDAwMTk4fSwKKwl7MHgwMDAwOWE3NCwgMHgwMDAwMDAzOCwgMHgwMDAwMDFkOH0sCisJezB4MDAwMDlhNzgsIDB4MDAwMDAwNzgsIDB4MDAwMDAwMTh9LAorCXsweDAwMDA5YTdjLCAweDAwMDAwMTk5LCAweDAwMDAwMDU4fSwKKwl7MHgwMDAwOWE4MCwgMHgwMDAwMDFkOSwgMHgwMDAwMDA5OH0sCisJezB4MDAwMDlhODQsIDB4MDAwMDAwMTksIDB4MDAwMDAxNTl9LAorCXsweDAwMDA5YTg4LCAweDAwMDAwMDU5LCAweDAwMDAwMTk5fSwKKwl7MHgwMDAwOWE4YywgMHgwMDAwMDA5OSwgMHgwMDAwMDFkOX0sCisJezB4MDAwMDlhOTAsIDB4MDAwMDAwZDksIDB4MDAwMDAwMTl9LAorCXsweDAwMDA5YTk0LCAweDAwMDAwMGY5LCAweDAwMDAwMDU5fSwKKwl7MHgwMDAwOWE5OCwgMHgwMDAwMDBmOSwgMHgwMDAwMDA5OX0sCisJezB4MDAwMDlhOWMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZDl9LAorCXsweDAwMDA5YWEwLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5fSwKKwl7MHgwMDAwOWFhNCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOX0sCisJezB4MDAwMDlhYTgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjl9LAorCXsweDAwMDA5YWFjLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5fSwKKwl7MHgwMDAwOWFiMCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOX0sCisJezB4MDAwMDlhYjQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjl9LAorCXsweDAwMDA5YWI4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5fSwKKwl7MHgwMDAwOWFiYywgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOX0sCisJezB4MDAwMDlhYzAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjl9LAorCXsweDAwMDA5YWM0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5fSwKKwl7MHgwMDAwOWFjOCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOX0sCisJezB4MDAwMDlhY2MsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjl9LAorCXsweDAwMDA5YWQwLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5fSwKKwl7MHgwMDAwOWFkNCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOX0sCisJezB4MDAwMDlhZDgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjl9LAorCXsweDAwMDA5YWRjLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5fSwKKwl7MHgwMDAwOWFlMCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOX0sCisJezB4MDAwMDlhZTQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjl9LAorCXsweDAwMDA5YWU4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5fSwKKwl7MHgwMDAwOWFlYywgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOX0sCisJezB4MDAwMDlhZjAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjl9LAorCXsweDAwMDA5YWY0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5fSwKKwl7MHgwMDAwOWFmOCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOX0sCisJezB4MDAwMDlhZmMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjl9LAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMV85MTYwW11bMl0gPSB7Ci0gICAgeyAweDAwMDA5OGIwLCAweDAyMTA4NDIxIH0sCi0gICAgeyAweDAwMDA5OGVjLCAweDAwMDAwMDA4IH0sCisJLyogQWRkciAgICAgIGFsbG1vZGVzICAqLworCXsweDAwMDA5OGIwLCAweDAyMTA4NDIxfSwKKwl7MHgwMDAwOThlYywgMHgwMDAwMDAwOH0sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbmsyXzkxNjBbXVsyXSA9IHsKLSAgICB7IDB4MDAwMDk4YjAsIDB4MGU3M2ZmMTcgfSwKLSAgICB7IDB4MDAwMDk4ZTAsIDB4MDAwMDA0MjAgfSwKKwkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCisJezB4MDAwMDk4YjAsIDB4MGU3M2ZmMTd9LAorCXsweDAwMDA5OGUwLCAweDAwMDAwNDIwfSwKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazNfOTE2MFtdWzNdID0gewotICAgIHsgMHgwMDAwOThmMCwgMHgwMTQwMDAxOCwgMHgwMWMwMDAxOCB9LAorCS8qIEFkZHIgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgKi8KKwl7MHgwMDAwOThmMCwgMHgwMTQwMDAxOCwgMHgwMWMwMDAxOH0sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbms2XzkxNjBbXVszXSA9IHsKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBlMDAwMDAsIDB4MDBlMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA1ZTAwMDAsIDB4MDA1ZTAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA2MjAwMDAsIDB4MDA2MjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4NDBmZjAwMDAsIDB4NDBmZjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA1ZjAwMDAsIDB4MDA1ZjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA4NzAwMDAsIDB4MDA4NzAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBmOTAwMDAsIDB4MDBmOTAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA3YjAwMDAsIDB4MDA3YjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBmNTAwMDAsIDB4MDBmNTAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBkYzAwMDAsIDB4MDBkYzAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA2MTAwYTgsIDB4MDA2MTAwYTggfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA0MjEwYTIsIDB4MDA0MjEwYTIgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAxNDAwOGYsIDB4MDAxNDAwOGYgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBjNDAwMDMsIDB4MDBjNDAwMDMgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAzMDAwZjIsIDB4MDAzMDAwZjIgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA0NDAwMTYsIDB4MDA0NDAwMTYgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA0MTAwNDAsIDB4MDA0MTAwNDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMTgwNWUsIDB4MDAwMTgwNWUgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMGMwYWIsIDB4MDAwMGMwYWIgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwZjEsIDB4MDAwMDAwZjEgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDIwODEsIDB4MDAwMDIwODEgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQgfSwKLSAgICB7IDB4MDAwMDk4ZDAsIDB4MDAwMDAwMGYsIDB4MDAxMDAwMGYgfSwKKwkvKiBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICovCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDBlMDAwMDAsIDB4MDBlMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwNWUwMDAwLCAweDAwNWUwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDEyMDAwMCwgMHgwMDEyMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDA2MjAwMDAsIDB4MDA2MjAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDIwMDAwLCAweDAwMDIwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHg0MGZmMDAwMCwgMHg0MGZmMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDA1ZjAwMDAsIDB4MDA1ZjAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwODcwMDAwLCAweDAwODcwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMGY5MDAwMCwgMHgwMGY5MDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDA3YjAwMDAsIDB4MDA3YjAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMGY1MDAwMCwgMHgwMGY1MDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDBkYzAwMDAsIDB4MDBkYzAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDYxMDBhOCwgMHgwMDYxMDBhOH0sCisJezB4MDAwMDk4OWMsIDB4MDA0MjEwYTIsIDB4MDA0MjEwYTJ9LAorCXsweDAwMDA5ODljLCAweDAwMTQwMDhmLCAweDAwMTQwMDhmfSwKKwl7MHgwMDAwOTg5YywgMHgwMGM0MDAwMywgMHgwMGM0MDAwM30sCisJezB4MDAwMDk4OWMsIDB4MDAzMDAwZjIsIDB4MDAzMDAwZjJ9LAorCXsweDAwMDA5ODljLCAweDAwNDQwMDE2LCAweDAwNDQwMDE2fSwKKwl7MHgwMDAwOTg5YywgMHgwMDQxMDA0MCwgMHgwMDQxMDA0MH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMTgwNWUsIDB4MDAwMTgwNWV9LAorCXsweDAwMDA5ODljLCAweDAwMDBjMGFiLCAweDAwMDBjMGFifSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDBmMSwgMHgwMDAwMDBmMX0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDIwODEsIDB4MDAwMDIwODF9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0fSwKKwl7MHgwMDAwOThkMCwgMHgwMDAwMDAwZiwgMHgwMDEwMDAwZn0sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbms2VFBDXzkxNjBbXVszXSA9IHsKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBlMDAwMDAsIDB4MDBlMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA1ZTAwMDAsIDB4MDA1ZTAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA2MjAwMDAsIDB4MDA2MjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4NDBmZjAwMDAsIDB4NDBmZjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA1ZjAwMDAsIDB4MDA1ZjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA4NzAwMDAsIDB4MDA4NzAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBmOTAwMDAsIDB4MDBmOTAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA3YjAwMDAsIDB4MDA3YjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBmNTAwMDAsIDB4MDBmNTAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBkYzAwMDAsIDB4MDBkYzAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA2MTAwYTgsIDB4MDA2MTAwYTggfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA0MjMwMjIsIDB4MDA0MjMwMjIgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MjAxNDAwOGYsIDB4MjAxNDAwOGYgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDBjNDAwMDIsIDB4MDBjNDAwMDIgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAzMDAwZjIsIDB4MDAzMDAwZjIgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA0NDAwMTYsIDB4MDA0NDAwMTYgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDA0MTAwNDAsIDB4MDA0MTAwNDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMTgwNWUsIDB4MDAwMTgwNWUgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMGMwYWIsIDB4MDAwMGMwYWIgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwZTEsIDB4MDAwMDAwZTEgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDcwODAsIDB4MDAwMDcwODAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQgfSwKLSAgICB7IDB4MDAwMDk4ZDAsIDB4MDAwMDAwMGYsIDB4MDAxMDAwMGYgfSwKKwkvKiBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICovCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDBlMDAwMDAsIDB4MDBlMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwNWUwMDAwLCAweDAwNWUwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDEyMDAwMCwgMHgwMDEyMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDA2MjAwMDAsIDB4MDA2MjAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDIwMDAwLCAweDAwMDIwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHg0MGZmMDAwMCwgMHg0MGZmMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDA1ZjAwMDAsIDB4MDA1ZjAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwODcwMDAwLCAweDAwODcwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMGY5MDAwMCwgMHgwMGY5MDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDA3YjAwMDAsIDB4MDA3YjAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMGY1MDAwMCwgMHgwMGY1MDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDBkYzAwMDAsIDB4MDBkYzAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDYxMDBhOCwgMHgwMDYxMDBhOH0sCisJezB4MDAwMDk4OWMsIDB4MDA0MjMwMjIsIDB4MDA0MjMwMjJ9LAorCXsweDAwMDA5ODljLCAweDIwMTQwMDhmLCAweDIwMTQwMDhmfSwKKwl7MHgwMDAwOTg5YywgMHgwMGM0MDAwMiwgMHgwMGM0MDAwMn0sCisJezB4MDAwMDk4OWMsIDB4MDAzMDAwZjIsIDB4MDAzMDAwZjJ9LAorCXsweDAwMDA5ODljLCAweDAwNDQwMDE2LCAweDAwNDQwMDE2fSwKKwl7MHgwMDAwOTg5YywgMHgwMDQxMDA0MCwgMHgwMDQxMDA0MH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMTgwNWUsIDB4MDAwMTgwNWV9LAorCXsweDAwMDA5ODljLCAweDAwMDBjMGFiLCAweDAwMDBjMGFifSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDBlMSwgMHgwMDAwMDBlMX0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDcwODAsIDB4MDAwMDcwODB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0fSwKKwl7MHgwMDAwOThkMCwgMHgwMDAwMDAwZiwgMHgwMDEwMDAwZn0sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbms3XzkxNjBbXVsyXSA9IHsKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDA1MDAgfSwKLSAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDA4MDAgfSwKLSAgICB7IDB4MDAwMDk4Y2MsIDB4MDAwMDAwMGUgfSwKKwkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCisJezB4MDAwMDk4OWMsIDB4MDAwMDA1MDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwODAwfSwKKwl7MHgwMDAwOThjYywgMHgwMDAwMDAwZX0sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkFkZGFjXzkxNjBbXVsyXSA9IHsKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwYzAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMTggfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDQgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwYzAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMTkgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDQgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDQgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDMgfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDggfSwKLSAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOThjYywgIDB4MDAwMDAwMDAgfSwKKwkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwYzB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDE4fSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwNH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwYzB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDE5fSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwNH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDR9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAzfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwOH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OGNjLCAweDAwMDAwMDAwfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QWRkYWNfOTE2MDFfMVtdWzJdID0gewotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDBjMCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAxOCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwNCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDBjMCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAxOSB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwNCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5OGNjLCAgMHgwMDAwMDAwMCB9LAorc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZBZGRhY185MTYwXzFfMVtdWzJdID0geworCS8qIEFkZHIgICAgICBhbGxtb2RlcyAgKi8KKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDBjMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMTh9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDA0fSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDBjMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMTl9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDA0fSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTg5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4Y2MsIDB4MDAwMDAwMDB9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9jYWxpYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9jYWxpYi5jCmluZGV4IDVmZGJiNTMuLmRhYmFmYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfY2FsaWIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX2NhbGliLmMKQEAgLTIzOSw3ICsyMzksNyBAQAogCQkJaWYgKHFDb2ZmID4gMTUpCiAJCQkJcUNvZmYgPSAxNTsKIAkJCWVsc2UgaWYgKHFDb2ZmIDw9IC0xNikKLQkJCQlxQ29mZiA9IDE2OworCQkJCXFDb2ZmID0gLTE2OwogCiAJCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKIAkJCQkgICJDaG4gJWQgOiBpQ29mZiA9IDB4JXggIHFDb2ZmID0gMHgleFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfaHcuYwppbmRleCBhOGE4Y2RjLi4zMDNjNjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9ody5jCkBAIC0xOCw2ICsxOCwxMSBAQAogI2luY2x1ZGUgImFyNTAwOF9pbml0dmFscy5oIgogI2luY2x1ZGUgImFyOTAwMV9pbml0dmFscy5oIgogI2luY2x1ZGUgImFyOTAwMl9pbml0dmFscy5oIgorI2luY2x1ZGUgImFyOTAwMl9waHkuaCIKKworaW50IG1vZHBhcmFtX2ZvcmNlX25ld19hbmk7Cittb2R1bGVfcGFyYW1fbmFtZWQoZm9yY2VfbmV3X2FuaSwgbW9kcGFyYW1fZm9yY2VfbmV3X2FuaSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Mobm9od2NyeXB0LCAiRm9yY2UgbmV3IEFOSSBmb3IgQVI1MDA4LCBBUjkwMDEsIEFSOTAwMiIpOwogCiAvKiBHZW5lcmFsIGhhcmR3YXJlIGNvZGUgZm9yIHRoZSBBNTAwOC9BUjkwMDEvQVI5MDAyIGhhZHdhcmUgZmFtaWxpZXMgKi8KIApAQCAtODAsMjEgKzg1LDYgQEAKIAkJCWFyOTI4N1BjaWVQaHlfY2xrcmVxX2Fsd2F5c19vbl9MMV85Mjg3XzFfMSwKIAkJCUFSUkFZX1NJWkUoYXI5Mjg3UGNpZVBoeV9jbGtyZXFfYWx3YXlzX29uX0wxXzkyODdfMV8xKSwKIAkJCQkJMik7Ci0JfSBlbHNlIGlmIChBUl9TUkVWXzkyODdfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXMsIGFyOTI4N01vZGVzXzkyODdfMV8wLAotCQkJCUFSUkFZX1NJWkUoYXI5Mjg3TW9kZXNfOTI4N18xXzApLCA2KTsKLQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlDb21tb24sIGFyOTI4N0NvbW1vbl85Mjg3XzFfMCwKLQkJCQlBUlJBWV9TSVpFKGFyOTI4N0NvbW1vbl85Mjg3XzFfMCksIDIpOwotCi0JCWlmIChhaC0+Y29uZmlnLnBjaWVfY2xvY2tfcmVxKQotCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlQY2llU2VyZGVzLAotCQkJYXI5Mjg3UGNpZVBoeV9jbGtyZXFfb2ZmX0wxXzkyODdfMV8wLAotCQkJQVJSQVlfU0laRShhcjkyODdQY2llUGh5X2Nsa3JlcV9vZmZfTDFfOTI4N18xXzApLCAyKTsKLQkJZWxzZQotCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlQY2llU2VyZGVzLAotCQkJYXI5Mjg3UGNpZVBoeV9jbGtyZXFfYWx3YXlzX29uX0wxXzkyODdfMV8wLAotCQkJQVJSQVlfU0laRShhcjkyODdQY2llUGh5X2Nsa3JlcV9hbHdheXNfb25fTDFfOTI4N18xXzApLAotCQkJCSAgMik7CiAJfSBlbHNlIGlmIChBUl9TUkVWXzkyODVfMTJfT1JfTEFURVIoYWgpKSB7CiAKIApAQCAtMTEzLDIxICsxMDMsNiBAQAogCQkJQVJSQVlfU0laRShhcjkyODVQY2llUGh5X2Nsa3JlcV9hbHdheXNfb25fTDFfOTI4NV8xXzIpLAogCQkJCSAgMik7CiAJCX0KLQl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4NV8xMF9PUl9MQVRFUihhaCkpIHsKLQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2RlcywgYXI5Mjg1TW9kZXNfOTI4NSwKLQkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTI4NU1vZGVzXzkyODUpLCA2KTsKLQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlDb21tb24sIGFyOTI4NUNvbW1vbl85Mjg1LAotCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5Mjg1Q29tbW9uXzkyODUpLCAyKTsKLQotCQlpZiAoYWgtPmNvbmZpZy5wY2llX2Nsb2NrX3JlcSkgewotCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlQY2llU2VyZGVzLAotCQkJYXI5Mjg1UGNpZVBoeV9jbGtyZXFfb2ZmX0wxXzkyODUsCi0JCQlBUlJBWV9TSVpFKGFyOTI4NVBjaWVQaHlfY2xrcmVxX29mZl9MMV85Mjg1KSwgMik7Ci0JCX0gZWxzZSB7Ci0JCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVBjaWVTZXJkZXMsCi0JCQlhcjkyODVQY2llUGh5X2Nsa3JlcV9hbHdheXNfb25fTDFfOTI4NSwKLQkJCUFSUkFZX1NJWkUoYXI5Mjg1UGNpZVBoeV9jbGtyZXFfYWx3YXlzX29uX0wxXzkyODUpLCAyKTsKLQkJfQogCX0gZWxzZSBpZiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSkgewogCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzLCBhcjkyODBNb2Rlc185MjgwXzIsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjkyODBNb2Rlc185MjgwXzIpLCA2KTsKQEAgLTE0NiwxMSArMTIxLDYgQEAKIAkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc0FkZGl0aW9uYWwsCiAJCQkgICAgICAgYXI5MjgwTW9kZXNfZmFzdF9jbG9ja185MjgwXzIsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjkyODBNb2Rlc19mYXN0X2Nsb2NrXzkyODBfMiksIDMpOwotCX0gZWxzZSBpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgewotCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzLCBhcjkyODBNb2Rlc185MjgwLAotCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MjgwTW9kZXNfOTI4MCksIDYpOwotCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUNvbW1vbiwgYXI5MjgwQ29tbW9uXzkyODAsCi0JCQkgICAgICAgQVJSQVlfU0laRShhcjkyODBDb21tb25fOTI4MCksIDIpOwogCX0gZWxzZSBpZiAoQVJfU1JFVl85MTYwXzEwX09SX0xBVEVSKGFoKSkgewogCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzLCBhcjU0MTZNb2Rlc185MTYwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2TW9kZXNfOTE2MCksIDYpOwpAQCAtMTc0LDggKzE0NCw4IEBACiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rN185MTYwKSwgMik7CiAJCWlmIChBUl9TUkVWXzkxNjBfMTEoYWgpKSB7CiAJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUFkZGFjLAotCQkJCSAgICAgICBhcjU0MTZBZGRhY185MTYwMV8xLAotCQkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkFkZGFjXzkxNjAxXzEpLCAyKTsKKwkJCQkgICAgICAgYXI1NDE2QWRkYWNfOTE2MF8xXzEsCisJCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QWRkYWNfOTE2MF8xXzEpLCAyKTsKIAkJfSBlbHNlIHsKIAkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQWRkYWMsIGFyNTQxNkFkZGFjXzkxNjAsCiAJCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QWRkYWNfOTE2MCksIDIpOwpAQCAtMjM0LDEyICsyMDQsMTIgQEAKIHsKIAlpZiAoQVJfU1JFVl85Mjg3XzExX09SX0xBVEVSKGFoKSkgewogCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUNja2Zpck5vcm1hbCwKLQkJICAgICAgIGFyOTI4N0NvbW1vbl9ub3JtYWxfY2NrX2Zpcl9jb2VmZl85Mjg3MV8xLAotCQkgICAgICAgQVJSQVlfU0laRShhcjkyODdDb21tb25fbm9ybWFsX2Nja19maXJfY29lZmZfOTI4NzFfMSksCisJCSAgICAgICBhcjkyODdDb21tb25fbm9ybWFsX2Nja19maXJfY29lZmZfOTI4N18xXzEsCisJCSAgICAgICBBUlJBWV9TSVpFKGFyOTI4N0NvbW1vbl9ub3JtYWxfY2NrX2Zpcl9jb2VmZl85Mjg3XzFfMSksCiAJCSAgICAgICAyKTsKIAkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlDY2tmaXJKYXBhbjI0ODQsCi0JCSAgICAgICBhcjkyODdDb21tb25famFwYW5fMjQ4NF9jY2tfZmlyX2NvZWZmXzkyODcxXzEsCi0JCSAgICAgICBBUlJBWV9TSVpFKGFyOTI4N0NvbW1vbl9qYXBhbl8yNDg0X2Nja19maXJfY29lZmZfOTI4NzFfMSksCisJCSAgICAgICBhcjkyODdDb21tb25famFwYW5fMjQ4NF9jY2tfZmlyX2NvZWZmXzkyODdfMV8xLAorCQkgICAgICAgQVJSQVlfU0laRShhcjkyODdDb21tb25famFwYW5fMjQ4NF9jY2tfZmlyX2NvZWZmXzkyODdfMV8xKSwKIAkJICAgICAgIDIpOwogCX0KIH0KQEAgLTMwMCwxMCArMjcwLDYgQEAKIAkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1J4R2FpbiwKIAkJYXI5Mjg3TW9kZXNfcnhfZ2Fpbl85Mjg3XzFfMSwKIAkJQVJSQVlfU0laRShhcjkyODdNb2Rlc19yeF9nYWluXzkyODdfMV8xKSwgNik7Ci0JZWxzZSBpZiAoQVJfU1JFVl85Mjg3XzEwKGFoKSkKLQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1J4R2FpbiwKLQkJYXI5Mjg3TW9kZXNfcnhfZ2Fpbl85Mjg3XzFfMCwKLQkJQVJSQVlfU0laRShhcjkyODdNb2Rlc19yeF9nYWluXzkyODdfMV8wKSwgNik7CiAJZWxzZSBpZiAoQVJfU1JFVl85MjgwXzIwKGFoKSkKIAkJYXI5MjgwXzIwX2h3X2luaXRfcnhnYWluX2luaShhaCk7CiAKQEAgLTMxMSwxMCArMjc3LDYgQEAKIAkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKIAkJYXI5Mjg3TW9kZXNfdHhfZ2Fpbl85Mjg3XzFfMSwKIAkJQVJSQVlfU0laRShhcjkyODdNb2Rlc190eF9nYWluXzkyODdfMV8xKSwgNik7Ci0JfSBlbHNlIGlmIChBUl9TUkVWXzkyODdfMTAoYWgpKSB7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCi0JCWFyOTI4N01vZGVzX3R4X2dhaW5fOTI4N18xXzAsCi0JCUFSUkFZX1NJWkUoYXI5Mjg3TW9kZXNfdHhfZ2Fpbl85Mjg3XzFfMCksIDYpOwogCX0gZWxzZSBpZiAoQVJfU1JFVl85MjgwXzIwKGFoKSkgewogCQlhcjkyODBfMjBfaHdfaW5pdF90eGdhaW5faW5pKGFoKTsKIAl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4NV8xMl9PUl9MQVRFUihhaCkpIHsKQEAgLTM4NCwyOSArMzQ2LDYgQEAKIAkJCQlSRUdfV1JJVEUoYWgsIElOSV9SQSgmYWgtPmluaVBjaWVTZXJkZXMsIGksIDApLAogCQkJCQkgIElOSV9SQSgmYWgtPmluaVBjaWVTZXJkZXMsIGksIDEpKTsKIAkJCX0KLQkJfSBlbHNlIGlmIChBUl9TUkVWXzkyODAoYWgpICYmCi0JCQkgICAoYWgtPmh3X3ZlcnNpb24ubWFjUmV2ID09IEFSX1NSRVZfUkVWSVNJT05fOTI4MF8xMCkpIHsKLQkJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4OTI0OGZkMDApOwotCQkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHgyNDkyNDkyNCk7Ci0KLQkJCS8qIFJYIHNodXQgb2ZmIHdoZW4gZWxlY2lkbGUgaXMgYXNzZXJ0ZWQgKi8KLQkJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4YTgwMDAwMTkpOwotCQkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHgxMzE2MDgyMCk7Ci0JCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweGU1OTgwNTYwKTsKLQotCQkJLyogU2h1dCBvZmYgQ0xLUkVRIGFjdGl2ZSBpbiBMMSAqLwotCQkJaWYgKGFoLT5jb25maWcucGNpZV9jbG9ja19yZXEpCi0JCQkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHg0MDFkZWZmYyk7Ci0JCQllbHNlCi0JCQkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHg0MDFkZWZmZCk7Ci0KLQkJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MWFhYWJlNDApOwotCQkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHhiZTEwNTU1NCk7Ci0JCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweDAwMDQzMDA3KTsKLQotCQkJLyogTG9hZCB0aGUgbmV3IHNldHRpbmdzICovCi0JCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTMiwgMHgwMDAwMDAwMCk7Ci0KIAkJfSBlbHNlIHsKIAkJCUVOQUJMRV9SRUdXUklURV9CVUZGRVIoYWgpOwogCkBAIC00MzYsNTUgKzM3NSw4NCBAQAogCQl9CiAKIAkJdWRlbGF5KDEwMDApOworCX0KIAotCQkvKiBzZXQgYml0IDE5IHRvIGFsbG93IGZvcmNpbmcgb2YgcGNpZSBjb3JlIGludG8gTDEgc3RhdGUgKi8KLQkJUkVHX1NFVF9CSVQoYWgsIEFSX1BDSUVfUE1fQ1RSTCwgQVJfUENJRV9QTV9DVFJMX0VOQSk7CisJaWYgKHBvd2VyX29mZikgeworCQkvKiBjbGVhciBiaXQgMTkgdG8gZGlzYWJsZSBMMSAqLworCQlSRUdfQ0xSX0JJVChhaCwgQVJfUENJRV9QTV9DVFJMLCBBUl9QQ0lFX1BNX0NUUkxfRU5BKTsKIAotCQkvKiBTZXZlcmFsIFBDSWUgbWFzc2FnZXMgdG8gZW5zdXJlIHByb3BlciBiZWhhdmlvdXIgKi8KKwkJdmFsID0gUkVHX1JFQUQoYWgsIEFSX1dBKTsKKworCQkvKgorCQkgKiBTZXQgUENJZSB3b3JrYXJvdW5kIGJpdHMKKwkJICogSW4gQVI5MjgwIGFuZCBBUjkyODUsIGJpdCAxNCBpbiBXQSByZWdpc3RlciAoZGlzYWJsZSBMMSkKKwkJICogc2hvdWxkIG9ubHkgIGJlIHNldCB3aGVuIGRldmljZSBlbnRlcnMgRDMgYW5kIGJlCisJCSAqIGNsZWFyZWQgd2hlbiBkZXZpY2UgY29tZXMgYmFjayB0byBEMC4KKwkJICovCisJCWlmIChhaC0+Y29uZmlnLnBjaWVfd2FlbikgeworCQkJaWYgKGFoLT5jb25maWcucGNpZV93YWVuICYgQVJfV0FfRDNfTDFfRElTQUJMRSkKKwkJCQl2YWwgfD0gQVJfV0FfRDNfTDFfRElTQUJMRTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoKEFSX1NSRVZfOTI4NShhaCkgfHwKKwkJCSAgICAgIEFSX1NSRVZfOTI3MShhaCkgfHwKKwkJCSAgICAgIEFSX1NSRVZfOTI4NyhhaCkpICYmCisJCQkgICAgIChBUjkyODVfV0FfREVGQVVMVCAmIEFSX1dBX0QzX0wxX0RJU0FCTEUpKSB8fAorCQkJICAgIChBUl9TUkVWXzkyODAoYWgpICYmCisJCQkgICAgIChBUjkyODBfV0FfREVGQVVMVCAmIEFSX1dBX0QzX0wxX0RJU0FCTEUpKSkgeworCQkJCXZhbCB8PSBBUl9XQV9EM19MMV9ESVNBQkxFOworCQkJfQorCQl9CisKKwkJaWYgKEFSX1NSRVZfOTI4MChhaCkgfHwgQVJfU1JFVl85Mjg1KGFoKSB8fCBBUl9TUkVWXzkyODcoYWgpKSB7CisJCQkvKgorCQkJICogRGlzYWJsZSBiaXQgNiBhbmQgNyBiZWZvcmUgZW50ZXJpbmcgRDMgdG8KKwkJCSAqIHByZXZlbnQgc3lzdGVtIGhhbmcuCisJCQkgKi8KKwkJCXZhbCAmPSB+KEFSX1dBX0JJVDYgfCBBUl9XQV9CSVQ3KTsKKwkJfQorCisJCWlmIChBUl9TUkVWXzkyODVFXzIwKGFoKSkKKwkJCXZhbCB8PSBBUl9XQV9CSVQyMzsKKworCQlSRUdfV1JJVEUoYWgsIEFSX1dBLCB2YWwpOworCX0gZWxzZSB7CiAJCWlmIChhaC0+Y29uZmlnLnBjaWVfd2FlbikgewogCQkJdmFsID0gYWgtPmNvbmZpZy5wY2llX3dhZW47CiAJCQlpZiAoIXBvd2VyX29mZikKIAkJCQl2YWwgJj0gKH5BUl9XQV9EM19MMV9ESVNBQkxFKTsKIAkJfSBlbHNlIHsKLQkJCWlmIChBUl9TUkVWXzkyODUoYWgpIHx8IEFSX1NSRVZfOTI3MShhaCkgfHwKKwkJCWlmIChBUl9TUkVWXzkyODUoYWgpIHx8CisJCQkgICAgQVJfU1JFVl85MjcxKGFoKSB8fAogCQkJICAgIEFSX1NSRVZfOTI4NyhhaCkpIHsKIAkJCQl2YWwgPSBBUjkyODVfV0FfREVGQVVMVDsKIAkJCQlpZiAoIXBvd2VyX29mZikKIAkJCQkJdmFsICY9ICh+QVJfV0FfRDNfTDFfRElTQUJMRSk7Ci0JCQl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4MChhaCkpIHsKKwkJCX0KKwkJCWVsc2UgaWYgKEFSX1NSRVZfOTI4MChhaCkpIHsKIAkJCQkvKgotCQkJCSAqIE9uIEFSOTI4MCBjaGlwcyBiaXQgMjIgb2YgMHg0MDA0IG5lZWRzIHRvIGJlCi0JCQkJICogc2V0IG90aGVyd2lzZSBjYXJkIG1heSBkaXNhcHBlYXIuCisJCQkJICogRm9yIEFSOTI4MCBjaGlwcywgYml0IDIyIG9mIDB4NDAwNAorCQkJCSAqIG5lZWRzIHRvIGJlIHNldC4KIAkJCQkgKi8KIAkJCQl2YWwgPSBBUjkyODBfV0FfREVGQVVMVDsKIAkJCQlpZiAoIXBvd2VyX29mZikKIAkJCQkJdmFsICY9ICh+QVJfV0FfRDNfTDFfRElTQUJMRSk7Ci0JCQl9IGVsc2UKKwkJCX0gZWxzZSB7CiAJCQkJdmFsID0gQVJfV0FfREVGQVVMVDsKLQkJfQotCi0JCVJFR19XUklURShhaCwgQVJfV0EsIHZhbCk7Ci0JfQotCi0JaWYgKHBvd2VyX29mZikgewotCQkvKgotCQkgKiBTZXQgUENJZSB3b3JrYXJvdW5kIGJpdHMKLQkJICogYml0IDE0IGluIFdBIHJlZ2lzdGVyIChkaXNhYmxlIEwxKSBzaG91bGQgb25seQotCQkgKiBiZSBzZXQgd2hlbiBkZXZpY2UgZW50ZXJzIEQzIGFuZCBiZSBjbGVhcmVkCi0JCSAqIHdoZW4gZGV2aWNlIGNvbWVzIGJhY2sgdG8gRDAuCi0JCSAqLwotCQlpZiAoYWgtPmNvbmZpZy5wY2llX3dhZW4pIHsKLQkJCWlmIChhaC0+Y29uZmlnLnBjaWVfd2FlbiAmIEFSX1dBX0QzX0wxX0RJU0FCTEUpCi0JCQkJUkVHX1NFVF9CSVQoYWgsIEFSX1dBLCBBUl9XQV9EM19MMV9ESVNBQkxFKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgoKEFSX1NSRVZfOTI4NShhaCkgfHwgQVJfU1JFVl85MjcxKGFoKSB8fAotCQkJICAgICAgQVJfU1JFVl85Mjg3KGFoKSkgJiYKLQkJCSAgICAgKEFSOTI4NV9XQV9ERUZBVUxUICYgQVJfV0FfRDNfTDFfRElTQUJMRSkpIHx8Ci0JCQkgICAgKEFSX1NSRVZfOTI4MChhaCkgJiYKLQkJCSAgICAgKEFSOTI4MF9XQV9ERUZBVUxUICYgQVJfV0FfRDNfTDFfRElTQUJMRSkpKSB7Ci0JCQkJUkVHX1NFVF9CSVQoYWgsIEFSX1dBLCBBUl9XQV9EM19MMV9ESVNBQkxFKTsKIAkJCX0KIAkJfQorCisJCS8qIFdBUiBmb3IgQVNQTSBzeXN0ZW0gaGFuZyAqLworCQlpZiAoQVJfU1JFVl85MjgwKGFoKSB8fCBBUl9TUkVWXzkyODUoYWgpIHx8IEFSX1NSRVZfOTI4NyhhaCkpIHsKKwkJCXZhbCB8PSAoQVJfV0FfQklUNiB8IEFSX1dBX0JJVDcpOworCQl9CisKKwkJaWYgKEFSX1NSRVZfOTI4NUVfMjAoYWgpKQorCQkJdmFsIHw9IEFSX1dBX0JJVDIzOworCisJCVJFR19XUklURShhaCwgQVJfV0EsIHZhbCk7CisKKwkJLyogc2V0IGJpdCAxOSB0byBhbGxvdyBmb3JjaW5nIG9mIHBjaWUgY29yZSBpbnRvIEwxIHN0YXRlICovCisJCVJFR19TRVRfQklUKGFoLCBBUl9QQ0lFX1BNX0NUUkwsIEFSX1BDSUVfUE1fQ1RSTF9FTkEpOwogCX0KIH0KIApAQCAtNTM2LDE4ICs1MDQsMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBhcjkwMDJfaHdfZW5hYmxlX2FzeW5jX2ZpZm8oc3RydWN0IGF0aF9odyAqYWgpCit7CisJaWYgKEFSX1NSRVZfOTI4N18xM19PUl9MQVRFUihhaCkpIHsKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX01BQ19QQ1VfQVNZTkNfRklGT19SRUczLAorCQkJCUFSX01BQ19QQ1VfQVNZTkNfRklGT19SRUczX0RBVEFQQVRIX1NFTCk7CisJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfTU9ERSwgQVJfUEhZX01PREVfQVNZTkNGSUZPKTsKKwkJUkVHX0NMUl9CSVQoYWgsIEFSX01BQ19QQ1VfQVNZTkNfRklGT19SRUczLAorCQkJCUFSX01BQ19QQ1VfQVNZTkNfRklGT19SRUczX1NPRlRfUkVTRVQpOworCQlSRUdfU0VUX0JJVChhaCwgQVJfTUFDX1BDVV9BU1lOQ19GSUZPX1JFRzMsCisJCQkJQVJfTUFDX1BDVV9BU1lOQ19GSUZPX1JFRzNfU09GVF9SRVNFVCk7CisJfQorfQorCiAvKgotICogRW5hYmxlIEFTWU5DIEZJRk8KLSAqCiAgKiBJZiBBc3luYyBGSUZPIGlzIGVuYWJsZWQsIHRoZSBmb2xsb3dpbmcgY291bnRlcnMgY2hhbmdlIGFzIE1BQyBub3cgcnVucwogICogYXQgMTE3IE1oeiBpbnN0ZWFkIG9mIDg4LzQ0TUh6IHdoZW4gYXN5bmMgRklGTyBpcyBkaXNhYmxlZC4KICAqCiAgKiBUaGUgdmFsdWVzIGJlbG93IHRlc3RlZCBmb3IgaHQ0MCAyIGNoYWluLgogICogT3ZlcndyaXRlIHRoZSBkZWxheS90aW1lb3V0cyBpbml0aWFsaXplZCBpbiBwcm9jZXNzIGluaS4KICAqLwotdm9pZCBhcjkwMDJfaHdfZW5hYmxlX2FzeW5jX2ZpZm8oc3RydWN0IGF0aF9odyAqYWgpCit2b2lkIGFyOTAwMl9od191cGRhdGVfYXN5bmNfZmlmbyhzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlpZiAoQVJfU1JFVl85Mjg3XzEyX09SX0xBVEVSKGFoKSkgeworCWlmIChBUl9TUkVWXzkyODdfMTNfT1JfTEFURVIoYWgpKSB7CiAJCVJFR19XUklURShhaCwgQVJfRF9HQkxfSUZTX1NJRlMsCiAJCQkgIEFSX0RfR0JMX0lGU19TSUZTX0FTWU5DX0ZJRk9fRFVSKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9EX0dCTF9JRlNfU0xPVCwKQEAgLTU3MSw5ICs1NTAsOSBAQAogICovCiB2b2lkIGFyOTAwMl9od19lbmFibGVfd2VwX2FnZ3JlZ2F0aW9uKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCWlmIChBUl9TUkVWXzkyODdfMTJfT1JfTEFURVIoYWgpKSB7CisJaWYgKEFSX1NSRVZfOTI4N18xM19PUl9MQVRFUihhaCkpIHsKIAkJUkVHX1NFVF9CSVQoYWgsIEFSX1BDVV9NSVNDX01PREUyLAotCQkJCUFSX1BDVV9NSVNDX01PREUyX0VOQUJMRV9BR0dXRVApOworCQkJICAgIEFSX1BDVV9NSVNDX01PREUyX0VOQUJMRV9BR0dXRVApOwogCX0KIH0KIApAQCAtNTk1LDQgKzU3NCw5IEBACiAKIAlhcjkwMDJfaHdfYXR0YWNoX2NhbGliX29wcyhhaCk7CiAJYXI5MDAyX2h3X2F0dGFjaF9tYWNfb3BzKGFoKTsKKworCWlmIChtb2RwYXJhbV9mb3JjZV9uZXdfYW5pKQorCQlhdGg5a19od19hdHRhY2hfYW5pX29wc19uZXcoYWgpOworCWVsc2UKKwkJYXRoOWtfaHdfYXR0YWNoX2FuaV9vcHNfb2xkKGFoKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfaW5pdHZhbHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfaW5pdHZhbHMuaAppbmRleCBkYWU3ZjMzLi42MjAzZWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX2luaXR2YWxzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9pbml0dmFscy5oCkBAIC0xNCw1MjE3ICsxNCwzMjUyIEBACiAgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKLSNpZm5kZWYgSU5JVFZBTFNfOTAwMl8xMF9ICi0jZGVmaW5lIElOSVRWQUxTXzkwMDJfMTBfSAotCi1zdGF0aWMgY29uc3QgdTMyIGFyOTI4ME1vZGVzXzkyODBbXVs2XSA9IHsKLSAgICB7IDB4MDAwMDEwMzAsIDB4MDAwMDAyMzAsIDB4MDAwMDA0NjAsIDB4MDAwMDAyYzAsIDB4MDAwMDAxNjAsIDB4MDAwMDAxZTAgfSwKLSAgICB7IDB4MDAwMDEwNzAsIDB4MDAwMDAxNjgsIDB4MDAwMDAyZDAsIDB4MDAwMDAzMTgsIDB4MDAwMDAxOGMsIDB4MDAwMDAxZTAgfSwKLSAgICB7IDB4MDAwMDEwYjAsIDB4MDAwMDBlNjAsIDB4MDAwMDFjYzAsIDB4MDAwMDdjNzAsIDB4MDAwMDNlMzgsIDB4MDAwMDExODAgfSwKLSAgICB7IDB4MDAwMDEwZjAsIDB4MDAwMGEwMDAsIDB4MDAwMTQwMDAsIDB4MDAwMTYwMDAsIDB4MDAwMGIwMDAsIDB4MDAwMTQwMDggfSwKLSAgICB7IDB4MDAwMDgwMTQsIDB4MDNlODAzZTgsIDB4MDdkMDA3ZDAsIDB4MTA4MDEwODAsIDB4MDg0MDA4NDAsIDB4MDZlMDA2ZTAgfSwKLSAgICB7IDB4MDAwMDgwMWMsIDB4MTI4ZDgwMjcsIDB4MTI4ZDgwNGYsIDB4MTJlMDAwNTcsIDB4MTJlMDAwMmIsIDB4MDk4ODAwNGYgfSwKLSAgICB7IDB4MDAwMDk4MDQsIDB4MDAwMDAzMDAsIDB4MDAwMDAzYzQsIDB4MDAwMDAzYzQsIDB4MDAwMDAzMDAsIDB4MDAwMDAzMDMgfSwKLSAgICB7IDB4MDAwMDk4MjAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAgfSwKLSAgICB7IDB4MDAwMDk4MjQsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSwKLSAgICB7IDB4MDAwMDk4MjgsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEgfSwKLSAgICB7IDB4MDAwMDk4MzQsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSwKLSAgICB7IDB4MDAwMDk4MzgsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcgfSwKLSAgICB7IDB4MDAwMDk4NDQsIDB4MTM3MjE2MWUsIDB4MTM3MjE2MWUsIDB4MTM3MjE2YTAsIDB4MTM3MjE2YTAsIDB4MTM3MjE2YTAgfSwKLSAgICB7IDB4MDAwMDk4NDgsIDB4MDAwMjg1NjYsIDB4MDAwMjg1NjYsIDB4MDAwMjg1NjMsIDB4MDAwMjg1NjMsIDB4MDAwMjg1NjMgfSwKLSAgICB7IDB4MDAwMGE4NDgsIDB4MDAwMjg1NjYsIDB4MDAwMjg1NjYsIDB4MDAwMjg1NjMsIDB4MDAwMjg1NjMsIDB4MDAwMjg1NjMgfSwKLSAgICB7IDB4MDAwMDk4NTAsIDB4NmQ0MDAwZTIsIDB4NmQ0MDAwZTIsIDB4NmQ0MDAwZTIsIDB4NmQ0MDAwZTIsIDB4NmQ0MDAwZTIgfSwKLSAgICB7IDB4MDAwMDk4NTgsIDB4N2VjODJkMmUsIDB4N2VjODJkMmUsIDB4N2VjODJkMmUsIDB4N2VjODJkMmUsIDB4N2VjODJkMmUgfSwKLSAgICB7IDB4MDAwMDk4NWMsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUgfSwKLSAgICB7IDB4MDAwMDk4NjAsIDB4MDAwNDlkMTgsIDB4MDAwNDlkMTgsIDB4MDAwNDlkMjAsIDB4MDAwNDlkMjAsIDB4MDAwNDlkMTggfSwKLSAgICB7IDB4MDAwMGM4NjQsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAgfSwKLSAgICB7IDB4MDAwMDk4NjgsIDB4NWFjNjQxOTAsIDB4NWFjNjQxOTAsIDB4NWFjNjQxOTAsIDB4NWFjNjQxOTAsIDB4NWFjNjQxOTAgfSwKLSAgICB7IDB4MDAwMDk4NmMsIDB4MDY5MDMwODEsIDB4MDY5MDMwODEsIDB4MDY5MDM4ODEsIDB4MDY5MDM4ODEsIDB4MDY5MDM4ODEgfSwKLSAgICB7IDB4MDAwMDk5MTQsIDB4MDAwMDA3ZDAsIDB4MDAwMDA3ZDAsIDB4MDAwMDA4OTgsIDB4MDAwMDA4OTgsIDB4MDAwMDA3ZDAgfSwKLSAgICB7IDB4MDAwMDk5MTgsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTYsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMTYgfSwKLSAgICB7IDB4MDAwMDk5MjQsIDB4ZDAwYThhMDcsIDB4ZDAwYThhMDcsIDB4ZDAwYThhMGQsIDB4ZDAwYThhMGQsIDB4ZDAwYThhMGQgfSwKLSAgICB7IDB4MDAwMDk5NDQsIDB4ZGZiYzEwMTAsIDB4ZGZiYzEwMTAsIDB4ZGZiYzEwMTAsIDB4ZGZiYzEwMTAsIDB4ZGZiYzEwMTAgfSwKLSAgICB7IDB4MDAwMDk5NjAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAgfSwKLSAgICB7IDB4MDAwMGE5NjAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAgfSwKLSAgICB7IDB4MDAwMDk5NjQsIDB4MDAwMDAyMTAsIDB4MDAwMDAyMTAsIDB4MDAwMDAyMTAsIDB4MDAwMDAyMTAsIDB4MDAwMDAyMTAgfSwKLSAgICB7IDB4MDAwMGM5YjgsIDB4MDAwMDAwMWEsIDB4MDAwMDAwMWEsIDB4MDAwMDAwMWEsIDB4MDAwMDAwMWEsIDB4MDAwMDAwMWEgfSwKLSAgICB7IDB4MDAwMGM5YmMsIDB4MDAwMDA2MDAsIDB4MDAwMDA2MDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAgfSwKLSAgICB7IDB4MDAwMDk5YzAsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQgfSwKLSAgICB7IDB4MDAwMDk5YzQsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcgfSwKLSAgICB7IDB4MDAwMDk5YzgsIDB4NjBmNjUzMmMsIDB4NjBmNjUzMmMsIDB4NjBmNjUzMmMsIDB4NjBmNjUzMmMsIDB4NjBmNjUzMmMgfSwKLSAgICB7IDB4MDAwMDk5Y2MsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzggfSwKLSAgICB7IDB4MDAwMDk5ZDAsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQgfSwKLSAgICB7IDB4MDAwMDk5ZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5ZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMDAsIDB4MDAwMDgxODQsIDB4MDAwMDgxODQsIDB4MDAwMDAyMTQsIDB4MDAwMDAyMTQsIDB4MDAwMDAyMTQgfSwKLSAgICB7IDB4MDAwMDlhMDQsIDB4MDAwMDgxODgsIDB4MDAwMDgxODgsIDB4MDAwMDAyMTgsIDB4MDAwMDAyMTgsIDB4MDAwMDAyMTggfSwKLSAgICB7IDB4MDAwMDlhMDgsIDB4MDAwMDgxOGMsIDB4MDAwMDgxOGMsIDB4MDAwMDAyMjQsIDB4MDAwMDAyMjQsIDB4MDAwMDAyMjQgfSwKLSAgICB7IDB4MDAwMDlhMGMsIDB4MDAwMDgxOTAsIDB4MDAwMDgxOTAsIDB4MDAwMDAyMjgsIDB4MDAwMDAyMjgsIDB4MDAwMDAyMjggfSwKLSAgICB7IDB4MDAwMDlhMTAsIDB4MDAwMDgxOTQsIDB4MDAwMDgxOTQsIDB4MDAwMDAyMmMsIDB4MDAwMDAyMmMsIDB4MDAwMDAyMmMgfSwKLSAgICB7IDB4MDAwMDlhMTQsIDB4MDAwMDgyMDAsIDB4MDAwMDgyMDAsIDB4MDAwMDAyMzAsIDB4MDAwMDAyMzAsIDB4MDAwMDAyMzAgfSwKLSAgICB7IDB4MDAwMDlhMTgsIDB4MDAwMDgyMDQsIDB4MDAwMDgyMDQsIDB4MDAwMDAyYTQsIDB4MDAwMDAyYTQsIDB4MDAwMDAyYTQgfSwKLSAgICB7IDB4MDAwMDlhMWMsIDB4MDAwMDgyMDgsIDB4MDAwMDgyMDgsIDB4MDAwMDAyYTgsIDB4MDAwMDAyYTgsIDB4MDAwMDAyYTggfSwKLSAgICB7IDB4MDAwMDlhMjAsIDB4MDAwMDgyMGMsIDB4MDAwMDgyMGMsIDB4MDAwMDAyYWMsIDB4MDAwMDAyYWMsIDB4MDAwMDAyYWMgfSwKLSAgICB7IDB4MDAwMDlhMjQsIDB4MDAwMDgyMTAsIDB4MDAwMDgyMTAsIDB4MDAwMDAyYjAsIDB4MDAwMDAyYjAsIDB4MDAwMDAyYjAgfSwKLSAgICB7IDB4MDAwMDlhMjgsIDB4MDAwMDgyMTQsIDB4MDAwMDgyMTQsIDB4MDAwMDAyYjQsIDB4MDAwMDAyYjQsIDB4MDAwMDAyYjQgfSwKLSAgICB7IDB4MDAwMDlhMmMsIDB4MDAwMDgyODAsIDB4MDAwMDgyODAsIDB4MDAwMDAyYjgsIDB4MDAwMDAyYjgsIDB4MDAwMDAyYjggfSwKLSAgICB7IDB4MDAwMDlhMzAsIDB4MDAwMDgyODQsIDB4MDAwMDgyODQsIDB4MDAwMDAzOTAsIDB4MDAwMDAzOTAsIDB4MDAwMDAzOTAgfSwKLSAgICB7IDB4MDAwMDlhMzQsIDB4MDAwMDgyODgsIDB4MDAwMDgyODgsIDB4MDAwMDAzOTQsIDB4MDAwMDAzOTQsIDB4MDAwMDAzOTQgfSwKLSAgICB7IDB4MDAwMDlhMzgsIDB4MDAwMDgyOGMsIDB4MDAwMDgyOGMsIDB4MDAwMDAzOTgsIDB4MDAwMDAzOTgsIDB4MDAwMDAzOTggfSwKLSAgICB7IDB4MDAwMDlhM2MsIDB4MDAwMDgyOTAsIDB4MDAwMDgyOTAsIDB4MDAwMDAzMzQsIDB4MDAwMDAzMzQsIDB4MDAwMDAzMzQgfSwKLSAgICB7IDB4MDAwMDlhNDAsIDB4MDAwMDgzMDAsIDB4MDAwMDgzMDAsIDB4MDAwMDAzMzgsIDB4MDAwMDAzMzgsIDB4MDAwMDAzMzggfSwKLSAgICB7IDB4MDAwMDlhNDQsIDB4MDAwMDgzMDQsIDB4MDAwMDgzMDQsIDB4MDAwMDAzYWMsIDB4MDAwMDAzYWMsIDB4MDAwMDAzYWMgfSwKLSAgICB7IDB4MDAwMDlhNDgsIDB4MDAwMDgzMDgsIDB4MDAwMDgzMDgsIDB4MDAwMDAzYjAsIDB4MDAwMDAzYjAsIDB4MDAwMDAzYjAgfSwKLSAgICB7IDB4MDAwMDlhNGMsIDB4MDAwMDgzMGMsIDB4MDAwMDgzMGMsIDB4MDAwMDAzYjQsIDB4MDAwMDAzYjQsIDB4MDAwMDAzYjQgfSwKLSAgICB7IDB4MDAwMDlhNTAsIDB4MDAwMDgzMTAsIDB4MDAwMDgzMTAsIDB4MDAwMDAzYjgsIDB4MDAwMDAzYjgsIDB4MDAwMDAzYjggfSwKLSAgICB7IDB4MDAwMDlhNTQsIDB4MDAwMDgzMTQsIDB4MDAwMDgzMTQsIDB4MDAwMDAzYTUsIDB4MDAwMDAzYTUsIDB4MDAwMDAzYTUgfSwKLSAgICB7IDB4MDAwMDlhNTgsIDB4MDAwMDgzODAsIDB4MDAwMDgzODAsIDB4MDAwMDAzYTksIDB4MDAwMDAzYTksIDB4MDAwMDAzYTkgfSwKLSAgICB7IDB4MDAwMDlhNWMsIDB4MDAwMDgzODQsIDB4MDAwMDgzODQsIDB4MDAwMDAzYWQsIDB4MDAwMDAzYWQsIDB4MDAwMDAzYWQgfSwKLSAgICB7IDB4MDAwMDlhNjAsIDB4MDAwMDgzODgsIDB4MDAwMDgzODgsIDB4MDAwMDgxOTQsIDB4MDAwMDgxOTQsIDB4MDAwMDgxOTQgfSwKLSAgICB7IDB4MDAwMDlhNjQsIDB4MDAwMDgzOGMsIDB4MDAwMDgzOGMsIDB4MDAwMDgxYTAsIDB4MDAwMDgxYTAsIDB4MDAwMDgxYTAgfSwKLSAgICB7IDB4MDAwMDlhNjgsIDB4MDAwMDgzOTAsIDB4MDAwMDgzOTAsIDB4MDAwMDgyMGMsIDB4MDAwMDgyMGMsIDB4MDAwMDgyMGMgfSwKLSAgICB7IDB4MDAwMDlhNmMsIDB4MDAwMDgzOTQsIDB4MDAwMDgzOTQsIDB4MDAwMDgxYTgsIDB4MDAwMDgxYTgsIDB4MDAwMDgxYTggfSwKLSAgICB7IDB4MDAwMDlhNzAsIDB4MDAwMGEzODAsIDB4MDAwMGEzODAsIDB4MDAwMDgyODQsIDB4MDAwMDgyODQsIDB4MDAwMDgyODQgfSwKLSAgICB7IDB4MDAwMDlhNzQsIDB4MDAwMGEzODQsIDB4MDAwMGEzODQsIDB4MDAwMDgyODgsIDB4MDAwMDgyODgsIDB4MDAwMDgyODggfSwKLSAgICB7IDB4MDAwMDlhNzgsIDB4MDAwMGEzODgsIDB4MDAwMGEzODgsIDB4MDAwMDgyMjQsIDB4MDAwMDgyMjQsIDB4MDAwMDgyMjQgfSwKLSAgICB7IDB4MDAwMDlhN2MsIDB4MDAwMGEzOGMsIDB4MDAwMGEzOGMsIDB4MDAwMDgyOTAsIDB4MDAwMDgyOTAsIDB4MDAwMDgyOTAgfSwKLSAgICB7IDB4MDAwMDlhODAsIDB4MDAwMGEzOTAsIDB4MDAwMGEzOTAsIDB4MDAwMDgzMDAsIDB4MDAwMDgzMDAsIDB4MDAwMDgzMDAgfSwKLSAgICB7IDB4MDAwMDlhODQsIDB4MDAwMGEzOTQsIDB4MDAwMGEzOTQsIDB4MDAwMDgzMDQsIDB4MDAwMDgzMDQsIDB4MDAwMDgzMDQgfSwKLSAgICB7IDB4MDAwMDlhODgsIDB4MDAwMGE3ODAsIDB4MDAwMGE3ODAsIDB4MDAwMDgzMDgsIDB4MDAwMDgzMDgsIDB4MDAwMDgzMDggfSwKLSAgICB7IDB4MDAwMDlhOGMsIDB4MDAwMGE3ODQsIDB4MDAwMGE3ODQsIDB4MDAwMDgzMGMsIDB4MDAwMDgzMGMsIDB4MDAwMDgzMGMgfSwKLSAgICB7IDB4MDAwMDlhOTAsIDB4MDAwMGE3ODgsIDB4MDAwMGE3ODgsIDB4MDAwMDgzODAsIDB4MDAwMDgzODAsIDB4MDAwMDgzODAgfSwKLSAgICB7IDB4MDAwMDlhOTQsIDB4MDAwMGE3OGMsIDB4MDAwMGE3OGMsIDB4MDAwMDgzODQsIDB4MDAwMDgzODQsIDB4MDAwMDgzODQgfSwKLSAgICB7IDB4MDAwMDlhOTgsIDB4MDAwMGE3OTAsIDB4MDAwMGE3OTAsIDB4MDAwMDg3MDAsIDB4MDAwMDg3MDAsIDB4MDAwMDg3MDAgfSwKLSAgICB7IDB4MDAwMDlhOWMsIDB4MDAwMGE3OTQsIDB4MDAwMGE3OTQsIDB4MDAwMDg3MDQsIDB4MDAwMDg3MDQsIDB4MDAwMDg3MDQgfSwKLSAgICB7IDB4MDAwMDlhYTAsIDB4MDAwMGFiODQsIDB4MDAwMGFiODQsIDB4MDAwMDg3MDgsIDB4MDAwMDg3MDgsIDB4MDAwMDg3MDggfSwKLSAgICB7IDB4MDAwMDlhYTQsIDB4MDAwMGFiODgsIDB4MDAwMGFiODgsIDB4MDAwMDg3MGMsIDB4MDAwMDg3MGMsIDB4MDAwMDg3MGMgfSwKLSAgICB7IDB4MDAwMDlhYTgsIDB4MDAwMGFiOGMsIDB4MDAwMGFiOGMsIDB4MDAwMDg3ODAsIDB4MDAwMDg3ODAsIDB4MDAwMDg3ODAgfSwKLSAgICB7IDB4MDAwMDlhYWMsIDB4MDAwMGFiOTAsIDB4MDAwMGFiOTAsIDB4MDAwMDg3ODQsIDB4MDAwMDg3ODQsIDB4MDAwMDg3ODQgfSwKLSAgICB7IDB4MDAwMDlhYjAsIDB4MDAwMGFiOTQsIDB4MDAwMGFiOTQsIDB4MDAwMDhiMDAsIDB4MDAwMDhiMDAsIDB4MDAwMDhiMDAgfSwKLSAgICB7IDB4MDAwMDlhYjQsIDB4MDAwMGFmODAsIDB4MDAwMGFmODAsIDB4MDAwMDhiMDQsIDB4MDAwMDhiMDQsIDB4MDAwMDhiMDQgfSwKLSAgICB7IDB4MDAwMDlhYjgsIDB4MDAwMGFmODQsIDB4MDAwMGFmODQsIDB4MDAwMDhiMDgsIDB4MDAwMDhiMDgsIDB4MDAwMDhiMDggfSwKLSAgICB7IDB4MDAwMDlhYmMsIDB4MDAwMGFmODgsIDB4MDAwMGFmODgsIDB4MDAwMDhiMGMsIDB4MDAwMDhiMGMsIDB4MDAwMDhiMGMgfSwKLSAgICB7IDB4MDAwMDlhYzAsIDB4MDAwMGFmOGMsIDB4MDAwMGFmOGMsIDB4MDAwMDhiODAsIDB4MDAwMDhiODAsIDB4MDAwMDhiODAgfSwKLSAgICB7IDB4MDAwMDlhYzQsIDB4MDAwMGFmOTAsIDB4MDAwMGFmOTAsIDB4MDAwMDhiODQsIDB4MDAwMDhiODQsIDB4MDAwMDhiODQgfSwKLSAgICB7IDB4MDAwMDlhYzgsIDB4MDAwMGFmOTQsIDB4MDAwMGFmOTQsIDB4MDAwMDhiODgsIDB4MDAwMDhiODgsIDB4MDAwMDhiODggfSwKLSAgICB7IDB4MDAwMDlhY2MsIDB4MDAwMGIzODAsIDB4MDAwMGIzODAsIDB4MDAwMDhiOGMsIDB4MDAwMDhiOGMsIDB4MDAwMDhiOGMgfSwKLSAgICB7IDB4MDAwMDlhZDAsIDB4MDAwMGIzODQsIDB4MDAwMGIzODQsIDB4MDAwMDhiOTAsIDB4MDAwMDhiOTAsIDB4MDAwMDhiOTAgfSwKLSAgICB7IDB4MDAwMDlhZDQsIDB4MDAwMGIzODgsIDB4MDAwMGIzODgsIDB4MDAwMDhmODAsIDB4MDAwMDhmODAsIDB4MDAwMDhmODAgfSwKLSAgICB7IDB4MDAwMDlhZDgsIDB4MDAwMGIzOGMsIDB4MDAwMGIzOGMsIDB4MDAwMDhmODQsIDB4MDAwMDhmODQsIDB4MDAwMDhmODQgfSwKLSAgICB7IDB4MDAwMDlhZGMsIDB4MDAwMGIzOTAsIDB4MDAwMGIzOTAsIDB4MDAwMDhmODgsIDB4MDAwMDhmODgsIDB4MDAwMDhmODggfSwKLSAgICB7IDB4MDAwMDlhZTAsIDB4MDAwMGIzOTQsIDB4MDAwMGIzOTQsIDB4MDAwMDhmOGMsIDB4MDAwMDhmOGMsIDB4MDAwMDhmOGMgfSwKLSAgICB7IDB4MDAwMDlhZTQsIDB4MDAwMGIzOTgsIDB4MDAwMGIzOTgsIDB4MDAwMDhmOTAsIDB4MDAwMDhmOTAsIDB4MDAwMDhmOTAgfSwKLSAgICB7IDB4MDAwMDlhZTgsIDB4MDAwMGI3ODAsIDB4MDAwMGI3ODAsIDB4MDAwMDkzMGMsIDB4MDAwMDkzMGMsIDB4MDAwMDkzMGMgfSwKLSAgICB7IDB4MDAwMDlhZWMsIDB4MDAwMGI3ODQsIDB4MDAwMGI3ODQsIDB4MDAwMDkzMTAsIDB4MDAwMDkzMTAsIDB4MDAwMDkzMTAgfSwKLSAgICB7IDB4MDAwMDlhZjAsIDB4MDAwMGI3ODgsIDB4MDAwMGI3ODgsIDB4MDAwMDkzODQsIDB4MDAwMDkzODQsIDB4MDAwMDkzODQgfSwKLSAgICB7IDB4MDAwMDlhZjQsIDB4MDAwMGI3OGMsIDB4MDAwMGI3OGMsIDB4MDAwMDkzODgsIDB4MDAwMDkzODgsIDB4MDAwMDkzODggfSwKLSAgICB7IDB4MDAwMDlhZjgsIDB4MDAwMGI3OTAsIDB4MDAwMGI3OTAsIDB4MDAwMDkzMjQsIDB4MDAwMDkzMjQsIDB4MDAwMDkzMjQgfSwKLSAgICB7IDB4MDAwMDlhZmMsIDB4MDAwMGI3OTQsIDB4MDAwMGI3OTQsIDB4MDAwMDk3MDQsIDB4MDAwMDk3MDQsIDB4MDAwMDk3MDQgfSwKLSAgICB7IDB4MDAwMDliMDAsIDB4MDAwMGI3OTgsIDB4MDAwMGI3OTgsIDB4MDAwMDk2YTQsIDB4MDAwMDk2YTQsIDB4MDAwMDk2YTQgfSwKLSAgICB7IDB4MDAwMDliMDQsIDB4MDAwMGQ3ODQsIDB4MDAwMGQ3ODQsIDB4MDAwMDk2YTgsIDB4MDAwMDk2YTgsIDB4MDAwMDk2YTggfSwKLSAgICB7IDB4MDAwMDliMDgsIDB4MDAwMGQ3ODgsIDB4MDAwMGQ3ODgsIDB4MDAwMDk3MTAsIDB4MDAwMDk3MTAsIDB4MDAwMDk3MTAgfSwKLSAgICB7IDB4MDAwMDliMGMsIDB4MDAwMGQ3OGMsIDB4MDAwMGQ3OGMsIDB4MDAwMDk3MTQsIDB4MDAwMDk3MTQsIDB4MDAwMDk3MTQgfSwKLSAgICB7IDB4MDAwMDliMTAsIDB4MDAwMGQ3OTAsIDB4MDAwMGQ3OTAsIDB4MDAwMDk3MjAsIDB4MDAwMDk3MjAsIDB4MDAwMDk3MjAgfSwKLSAgICB7IDB4MDAwMDliMTQsIDB4MDAwMGY3ODAsIDB4MDAwMGY3ODAsIDB4MDAwMDk3MjQsIDB4MDAwMDk3MjQsIDB4MDAwMDk3MjQgfSwKLSAgICB7IDB4MDAwMDliMTgsIDB4MDAwMGY3ODQsIDB4MDAwMGY3ODQsIDB4MDAwMDk3MjgsIDB4MDAwMDk3MjgsIDB4MDAwMDk3MjggfSwKLSAgICB7IDB4MDAwMDliMWMsIDB4MDAwMGY3ODgsIDB4MDAwMGY3ODgsIDB4MDAwMDk3MmMsIDB4MDAwMDk3MmMsIDB4MDAwMDk3MmMgfSwKLSAgICB7IDB4MDAwMDliMjAsIDB4MDAwMGY3OGMsIDB4MDAwMGY3OGMsIDB4MDAwMDk3YTAsIDB4MDAwMDk3YTAsIDB4MDAwMDk3YTAgfSwKLSAgICB7IDB4MDAwMDliMjQsIDB4MDAwMGY3OTAsIDB4MDAwMGY3OTAsIDB4MDAwMDk3YTQsIDB4MDAwMDk3YTQsIDB4MDAwMDk3YTQgfSwKLSAgICB7IDB4MDAwMDliMjgsIDB4MDAwMGY3OTQsIDB4MDAwMGY3OTQsIDB4MDAwMDk3YTgsIDB4MDAwMDk3YTgsIDB4MDAwMDk3YTggfSwKLSAgICB7IDB4MDAwMDliMmMsIDB4MDAwMGY3YTQsIDB4MDAwMGY3YTQsIDB4MDAwMDk3YjAsIDB4MDAwMDk3YjAsIDB4MDAwMDk3YjAgfSwKLSAgICB7IDB4MDAwMDliMzAsIDB4MDAwMGY3YTgsIDB4MDAwMGY3YTgsIDB4MDAwMDk3YjQsIDB4MDAwMDk3YjQsIDB4MDAwMDk3YjQgfSwKLSAgICB7IDB4MDAwMDliMzQsIDB4MDAwMGY3YWMsIDB4MDAwMGY3YWMsIDB4MDAwMDk3YjgsIDB4MDAwMDk3YjgsIDB4MDAwMDk3YjggfSwKLSAgICB7IDB4MDAwMDliMzgsIDB4MDAwMGY3YjAsIDB4MDAwMGY3YjAsIDB4MDAwMDk3YTUsIDB4MDAwMDk3YTUsIDB4MDAwMDk3YTUgfSwKLSAgICB7IDB4MDAwMDliM2MsIDB4MDAwMGY3YjQsIDB4MDAwMGY3YjQsIDB4MDAwMDk3YTksIDB4MDAwMDk3YTksIDB4MDAwMDk3YTkgfSwKLSAgICB7IDB4MDAwMDliNDAsIDB4MDAwMGY3YTEsIDB4MDAwMGY3YTEsIDB4MDAwMDk3YWQsIDB4MDAwMDk3YWQsIDB4MDAwMDk3YWQgfSwKLSAgICB7IDB4MDAwMDliNDQsIDB4MDAwMGY3YTUsIDB4MDAwMGY3YTUsIDB4MDAwMDk3YjEsIDB4MDAwMDk3YjEsIDB4MDAwMDk3YjEgfSwKLSAgICB7IDB4MDAwMDliNDgsIDB4MDAwMGY3YTksIDB4MDAwMGY3YTksIDB4MDAwMDk3YjUsIDB4MDAwMDk3YjUsIDB4MDAwMDk3YjUgfSwKLSAgICB7IDB4MDAwMDliNGMsIDB4MDAwMGY3YWQsIDB4MDAwMGY3YWQsIDB4MDAwMDk3YjksIDB4MDAwMDk3YjksIDB4MDAwMDk3YjkgfSwKLSAgICB7IDB4MDAwMDliNTAsIDB4MDAwMGY3YjEsIDB4MDAwMGY3YjEsIDB4MDAwMDk3YzUsIDB4MDAwMDk3YzUsIDB4MDAwMDk3YzUgfSwKLSAgICB7IDB4MDAwMDliNTQsIDB4MDAwMGY3YjUsIDB4MDAwMGY3YjUsIDB4MDAwMDk3YzksIDB4MDAwMDk3YzksIDB4MDAwMDk3YzkgfSwKLSAgICB7IDB4MDAwMDliNTgsIDB4MDAwMGY3YzUsIDB4MDAwMGY3YzUsIDB4MDAwMDk3ZDEsIDB4MDAwMDk3ZDEsIDB4MDAwMDk3ZDEgfSwKLSAgICB7IDB4MDAwMDliNWMsIDB4MDAwMGY3YzksIDB4MDAwMGY3YzksIDB4MDAwMDk3ZDUsIDB4MDAwMDk3ZDUsIDB4MDAwMDk3ZDUgfSwKLSAgICB7IDB4MDAwMDliNjAsIDB4MDAwMGY3Y2QsIDB4MDAwMGY3Y2QsIDB4MDAwMDk3ZDksIDB4MDAwMDk3ZDksIDB4MDAwMDk3ZDkgfSwKLSAgICB7IDB4MDAwMDliNjQsIDB4MDAwMGY3ZDEsIDB4MDAwMGY3ZDEsIDB4MDAwMDk3YzYsIDB4MDAwMDk3YzYsIDB4MDAwMDk3YzYgfSwKLSAgICB7IDB4MDAwMDliNjgsIDB4MDAwMGY3ZDUsIDB4MDAwMGY3ZDUsIDB4MDAwMDk3Y2EsIDB4MDAwMDk3Y2EsIDB4MDAwMDk3Y2EgfSwKLSAgICB7IDB4MDAwMDliNmMsIDB4MDAwMGY3YzIsIDB4MDAwMGY3YzIsIDB4MDAwMDk3Y2UsIDB4MDAwMDk3Y2UsIDB4MDAwMDk3Y2UgfSwKLSAgICB7IDB4MDAwMDliNzAsIDB4MDAwMGY3YzYsIDB4MDAwMGY3YzYsIDB4MDAwMDk3ZDIsIDB4MDAwMDk3ZDIsIDB4MDAwMDk3ZDIgfSwKLSAgICB7IDB4MDAwMDliNzQsIDB4MDAwMGY3Y2EsIDB4MDAwMGY3Y2EsIDB4MDAwMDk3ZDYsIDB4MDAwMDk3ZDYsIDB4MDAwMDk3ZDYgfSwKLSAgICB7IDB4MDAwMDliNzgsIDB4MDAwMGY3Y2UsIDB4MDAwMGY3Y2UsIDB4MDAwMDk3YzMsIDB4MDAwMDk3YzMsIDB4MDAwMDk3YzMgfSwKLSAgICB7IDB4MDAwMDliN2MsIDB4MDAwMGY3ZDIsIDB4MDAwMGY3ZDIsIDB4MDAwMDk3YzcsIDB4MDAwMDk3YzcsIDB4MDAwMDk3YzcgfSwKLSAgICB7IDB4MDAwMDliODAsIDB4MDAwMGY3ZDYsIDB4MDAwMGY3ZDYsIDB4MDAwMDk3Y2IsIDB4MDAwMDk3Y2IsIDB4MDAwMDk3Y2IgfSwKLSAgICB7IDB4MDAwMDliODQsIDB4MDAwMGY3YzMsIDB4MDAwMGY3YzMsIDB4MDAwMDk3Y2YsIDB4MDAwMDk3Y2YsIDB4MDAwMDk3Y2YgfSwKLSAgICB7IDB4MDAwMDliODgsIDB4MDAwMGY3YzcsIDB4MDAwMGY3YzcsIDB4MDAwMDk3ZDcsIDB4MDAwMDk3ZDcsIDB4MDAwMDk3ZDcgfSwKLSAgICB7IDB4MDAwMDliOGMsIDB4MDAwMGY3Y2IsIDB4MDAwMGY3Y2IsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliOTAsIDB4MDAwMGY3ZDMsIDB4MDAwMGY3ZDMsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliOTQsIDB4MDAwMGY3ZDcsIDB4MDAwMGY3ZDcsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliOTgsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliOWMsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliYTAsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliYTQsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliYTgsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliYWMsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliYjAsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliYjQsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliYjgsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliYmMsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliYzAsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliYzQsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliYzgsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliY2MsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliZDAsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliZDQsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliZDgsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliZGMsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliZTAsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliZTQsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliZTgsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliZWMsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliZjAsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliZjQsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliZjgsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMDliZmMsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIgfSwKLSAgICB7IDB4MDAwMGEyMDQsIDB4MDAwMDA0NDQsIDB4MDAwMDA0NDQsIDB4MDAwMDA0NDQsIDB4MDAwMDA0NDQsIDB4MDAwMDA0NDQgfSwKLSAgICB7IDB4MDAwMGEyMDgsIDB4ODAzZTQ3ODgsIDB4ODAzZTQ3ODgsIDB4ODAzZTQ3ODgsIDB4ODAzZTQ3ODgsIDB4ODAzZTQ3ODggfSwKLSAgICB7IDB4MDAwMGEyMGMsIDB4MDAwYzYwMTksIDB4MDAwYzYwMTksIDB4MDAwYzYwMTksIDB4MDAwYzYwMTksIDB4MDAwYzYwMTkgfSwKLSAgICB7IDB4MDAwMGIyMGMsIDB4MDAwYzYwMTksIDB4MDAwYzYwMTksIDB4MDAwYzYwMTksIDB4MDAwYzYwMTksIDB4MDAwYzYwMTkgfSwKLSAgICB7IDB4MDAwMGEyMWMsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSwKLSAgICB7IDB4MDAwMGEyMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAyMTAsIDB4MDAwMDAxMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEyNzQsIDB4MGExOWM2NTIsIDB4MGExOWM2NTIsIDB4MGExYWE2NTIsIDB4MGExYWE2NTIsIDB4MGExYWE2NTIgfSwKLSAgICB7IDB4MDAwMGEzMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMDQsIDB4MDAwMDMwMDIsIDB4MDAwMDMwMDIsIDB4MDAwMDMwMDIsIDB4MDAwMDMwMDIsIDB4MDAwMDMwMDIgfSwKLSAgICB7IDB4MDAwMGEzMDgsIDB4MDAwMDYwMDQsIDB4MDAwMDYwMDQsIDB4MDAwMDgwMDksIDB4MDAwMDgwMDksIDB4MDAwMDgwMDkgfSwKLSAgICB7IDB4MDAwMGEzMGMsIDB4MDAwMGEwMDYsIDB4MDAwMGEwMDYsIDB4MDAwMGIwMGIsIDB4MDAwMGIwMGIsIDB4MDAwMGIwMGIgfSwKLSAgICB7IDB4MDAwMGEzMTAsIDB4MDAwMGUwMTIsIDB4MDAwMGUwMTIsIDB4MDAwMGUwMTIsIDB4MDAwMGUwMTIsIDB4MDAwMGUwMTIgfSwKLSAgICB7IDB4MDAwMGEzMTQsIDB4MDAwMTEwMTQsIDB4MDAwMTEwMTQsIDB4MDAwMTIwNDgsIDB4MDAwMTIwNDgsIDB4MDAwMTIwNDggfSwKLSAgICB7IDB4MDAwMGEzMTgsIDB4MDAwMTUwNGEsIDB4MDAwMTUwNGEsIDB4MDAwMTYwNGEsIDB4MDAwMTYwNGEsIDB4MDAwMTYwNGEgfSwKLSAgICB7IDB4MDAwMGEzMWMsIDB4MDAwMTkwNGMsIDB4MDAwMTkwNGMsIDB4MDAwMWEyMTEsIDB4MDAwMWEyMTEsIDB4MDAwMWEyMTEgfSwKLSAgICB7IDB4MDAwMGEzMjAsIDB4MDAwMWMwNGUsIDB4MDAwMWMwNGUsIDB4MDAwMWUyMTMsIDB4MDAwMWUyMTMsIDB4MDAwMWUyMTMgfSwKLSAgICB7IDB4MDAwMGEzMjQsIDB4MDAwMjAwOTIsIDB4MDAwMjAwOTIsIDB4MDAwMjEyMWIsIDB4MDAwMjEyMWIsIDB4MDAwMjEyMWIgfSwKLSAgICB7IDB4MDAwMGEzMjgsIDB4MDAwMjQxMGEsIDB4MDAwMjQxMGEsIDB4MDAwMjQ0MTIsIDB4MDAwMjQ0MTIsIDB4MDAwMjQ0MTIgfSwKLSAgICB7IDB4MDAwMGEzMmMsIDB4MDAwMjcxMGMsIDB4MDAwMjcxMGMsIDB4MDAwMjg0MTQsIDB4MDAwMjg0MTQsIDB4MDAwMjg0MTQgfSwKLSAgICB7IDB4MDAwMGEzMzAsIDB4MDAwMmIxOGIsIDB4MDAwMmIxOGIsIDB4MDAwMmI0NGEsIDB4MDAwMmI0NGEsIDB4MDAwMmI0NGEgfSwKLSAgICB7IDB4MDAwMGEzMzQsIDB4MDAwMmUxY2MsIDB4MDAwMmUxY2MsIDB4MDAwMzA2NDksIDB4MDAwMzA2NDksIDB4MDAwMzA2NDkgfSwKLSAgICB7IDB4MDAwMGEzMzgsIDB4MDAwMzIxZWMsIDB4MDAwMzIxZWMsIDB4MDAwMzM2NGIsIDB4MDAwMzM2NGIsIDB4MDAwMzM2NGIgfSwKLSAgICB7IDB4MDAwMGEzM2MsIDB4MDAwMzIxZWMsIDB4MDAwMzIxZWMsIDB4MDAwMzhhNDksIDB4MDAwMzhhNDksIDB4MDAwMzhhNDkgfSwKLSAgICB7IDB4MDAwMGEzNDAsIDB4MDAwMzIxZWMsIDB4MDAwMzIxZWMsIDB4MDAwM2JlNDgsIDB4MDAwM2JlNDgsIDB4MDAwM2JlNDggfSwKLSAgICB7IDB4MDAwMGEzNDQsIDB4MDAwMzIxZWMsIDB4MDAwMzIxZWMsIDB4MDAwM2VlNGEsIDB4MDAwM2VlNGEsIDB4MDAwM2VlNGEgfSwKLSAgICB7IDB4MDAwMGEzNDgsIDB4MDAwMzIxZWMsIDB4MDAwMzIxZWMsIDB4MDAwNDJlODgsIDB4MDAwNDJlODgsIDB4MDAwNDJlODggfSwKLSAgICB7IDB4MDAwMGEzNGMsIDB4MDAwMzIxZWMsIDB4MDAwMzIxZWMsIDB4MDAwNDZlOGEsIDB4MDAwNDZlOGEsIDB4MDAwNDZlOGEgfSwKLSAgICB7IDB4MDAwMGEzNTAsIDB4MDAwMzIxZWMsIDB4MDAwMzIxZWMsIDB4MDAwNDllYzksIDB4MDAwNDllYzksIDB4MDAwNDllYzkgfSwKLSAgICB7IDB4MDAwMGEzNTQsIDB4MDAwMzIxZWMsIDB4MDAwMzIxZWMsIDB4MDAwNGJmNDIsIDB4MDAwNGJmNDIsIDB4MDAwNGJmNDIgfSwKLSAgICB7IDB4MDAwMDc4NGMsIDB4MGU0ZjA0OGMsIDB4MGU0ZjA0OGMsIDB4MGU0ZDA0OGMsIDB4MGU0ZDA0OGMsIDB4MGU0ZDA0OGMgfSwKLSAgICB7IDB4MDAwMDc4NTQsIDB4MTIwMzE4MjgsIDB4MTIwMzE4MjgsIDB4MTIwMzU4MjgsIDB4MTIwMzU4MjgsIDB4MTIwMzU4MjggfSwKLSAgICB7IDB4MDAwMDc4NzAsIDB4ODA3ZWM0MDAsIDB4ODA3ZWM0MDAsIDB4ODA3ZWMwMDAsIDB4ODA3ZWMwMDAsIDB4ODA3ZWMwMDAgfSwKLSAgICB7IDB4MDAwMDc4OGMsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5MjgwQ29tbW9uXzkyODBbXVsyXSA9IHsKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAwMjAwMTUgfSwKLSAgICB7IDB4MDAwMDAwMzQsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDAwMDAwNDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwNDQsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMDAwNDgsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMDAwNGMsIDB4MDAwMDAwMTAgfSwKLSAgICB7IDB4MDAwMDAwNTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwNTQsIDB4MDAwMDAwMWYgfSwKLSAgICB7IDB4MDAwMDA4MDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwNDAsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNDQsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNDgsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNGMsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNTAsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNTQsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNTgsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNWMsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNjAsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNjQsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEyMzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyNzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwMzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwNzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwYjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDExMzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDExNzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDExYjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDExZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyMzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyNzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyYjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEzMzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEzNzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEzYjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEzZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE0MzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE0NzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE0YjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE0ZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE1MzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE1NzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE1YjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE1ZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE2MzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE2NzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE2YjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE2ZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE3MzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE3NzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE3YjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE3ZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwM2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwN2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwYmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwZmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDExM2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDExN2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDExYmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDExZmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyM2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyN2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyYmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyZmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEzM2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEzN2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEzYmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEzZmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE0M2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE0N2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDQwMzAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDQwM2MsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDQwMjQsIDB4MDAwMDAwMWYgfSwKLSAgICB7IDB4MDAwMDcwMTAsIDB4MDAwMDAwMzMgfSwKLSAgICB7IDB4MDAwMDcwMzgsIDB4MDAwMDA0YzIgfSwKLSAgICB7IDB4MDAwMDgwMDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwMTgsIDB4MDAwMDA3MDAgfSwKLSAgICB7IDB4MDAwMDgwMjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwMzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwM2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwNDgsIDB4NDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwNTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwNTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwNWMsIDB4MDAwZmM3OGYgfSwKLSAgICB7IDB4MDAwMDgwNjAsIDB4MDAwMDAwMGYgfSwKLSAgICB7IDB4MDAwMDgwNjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwNzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwYzAsIDB4MmE4MjMwMWEgfSwKLSAgICB7IDB4MDAwMDgwYzQsIDB4MDVkYzAxZTAgfSwKLSAgICB7IDB4MDAwMDgwYzgsIDB4MWY0MDI3MTAgfSwKLSAgICB7IDB4MDAwMDgwY2MsIDB4MDFmNDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwZDAsIDB4MDAwMDFlMDAgfSwKLSAgICB7IDB4MDAwMDgwZDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwZDgsIDB4MDA0MDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwZTAsIDB4ZmZmZmZmZmYgfSwKLSAgICB7IDB4MDAwMDgwZTQsIDB4MDAwMGZmZmYgfSwKLSAgICB7IDB4MDAwMDgwZTgsIDB4MDAzZjNmM2YgfSwKLSAgICB7IDB4MDAwMDgwZWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwZjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwZjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwZmMsIDB4MDAwMjAwMDAgfSwKLSAgICB7IDB4MDAwMDgxMDAsIDB4MDAwMjAwMDAgfSwKLSAgICB7IDB4MDAwMDgxMDQsIDB4MDAwMDAwMDEgfSwKLSAgICB7IDB4MDAwMDgxMDgsIDB4MDAwMDAwNTIgfSwKLSAgICB7IDB4MDAwMDgxMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxMTAsIDB4MDAwMDAxNjggfSwKLSAgICB7IDB4MDAwMDgxMTgsIDB4MDAwMTAwYWEgfSwKLSAgICB7IDB4MDAwMDgxMWMsIDB4MDAwMDMyMTAgfSwKLSAgICB7IDB4MDAwMDgxMjAsIDB4MDhmMDQ4MDAgfSwKLSAgICB7IDB4MDAwMDgxMjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxMjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxMmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxMzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxMzQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxMzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxM2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxNDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxNjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxNmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxNzAsIDB4MzIxNDMzMjAgfSwKLSAgICB7IDB4MDAwMDgxNzQsIDB4ZmFhNGZhNTAgfSwKLSAgICB7IDB4MDAwMDgxNzgsIDB4MDAwMDAxMDAgfSwKLSAgICB7IDB4MDAwMDgxN2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxYzQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxZDAsIDB4MDAwMDMyMTAgfSwKLSAgICB7IDB4MDAwMDgxZWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxZjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxZjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxZmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMzQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyM2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyNDAsIDB4MDAxMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyNDQsIDB4MDAxMGY0MDAgfSwKLSAgICB7IDB4MDAwMDgyNDgsIDB4MDAwMDAxMDAgfSwKLSAgICB7IDB4MDAwMDgyNGMsIDB4MDAwMWU4MDAgfSwKLSAgICB7IDB4MDAwMDgyNTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyNTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyNTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyNWMsIDB4NDAwMDAwZmYgfSwKLSAgICB7IDB4MDAwMDgyNjAsIDB4MDAwODA5MjIgfSwKLSAgICB7IDB4MDAwMDgyNzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyNzQsIDB4NDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyNzgsIDB4MDAzZTQxODAgfSwKLSAgICB7IDB4MDAwMDgyN2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyODQsIDB4MDAwMDAwMmMgfSwKLSAgICB7IDB4MDAwMDgyODgsIDB4MDAwMDAwMmMgfSwKLSAgICB7IDB4MDAwMDgyOGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyOTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyOTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgzMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgzMDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgzMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgzMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgzMTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgzMTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgzMTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgzMjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgzMmMsIDB4MDAwMDAwMDcgfSwKLSAgICB7IDB4MDAwMDgzMzAsIDB4MDAwMDAzMDIgfSwKLSAgICB7IDB4MDAwMDgzMzQsIDB4MDAwMDBlMDAgfSwKLSAgICB7IDB4MDAwMDgzMzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgzM2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgzNDAsIDB4MDAwMTA3ZmYgfSwKLSAgICB7IDB4MDAwMDgzNDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4MDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4MGMsIDB4YWYyNjhlMzAgfSwKLSAgICB7IDB4MDAwMDk4MTAsIDB4ZmQxNGUwMDAgfSwKLSAgICB7IDB4MDAwMDk4MTQsIDB4OWMwYTlmNmIgfSwKLSAgICB7IDB4MDAwMDk4MWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4MmMsIDB4MDAwMGEwMDAgfSwKLSAgICB7IDB4MDAwMDk4MzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4M2MsIDB4MDAyMDA0MDAgfSwKLSAgICB7IDB4MDAwMDk4NDAsIDB4MjA2YTAxYWUgfSwKLSAgICB7IDB4MDAwMDk4NGMsIDB4MDA0MDIzM2MgfSwKLSAgICB7IDB4MDAwMGE4NGMsIDB4MDA0MDIzM2MgfSwKLSAgICB7IDB4MDAwMDk4NTQsIDB4MDAwMDAwNDQgfSwKLSAgICB7IDB4MDAwMDk5MDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5MDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5MDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5MGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5MWMsIDB4MTAwMDBmZmYgfSwKLSAgICB7IDB4MDAwMDk5MjAsIDB4MDQ5MDAwMDAgfSwKLSAgICB7IDB4MDAwMGE5MjAsIDB4MDQ5MDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5MjgsIDB4MDAwMDAwMDEgfSwKLSAgICB7IDB4MDAwMDk5MmMsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDk5MzQsIDB4MWUxZjIwMjIgfSwKLSAgICB7IDB4MDAwMDk5MzgsIDB4MGEwYjBjMGQgfSwKLSAgICB7IDB4MDAwMDk5M2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5NDgsIDB4OTI4MGMwMGEgfSwKLSAgICB7IDB4MDAwMDk5NGMsIDB4MDAwMjAwMjggfSwKLSAgICB7IDB4MDAwMDk5NTQsIDB4ZTI1MGE1MWUgfSwKLSAgICB7IDB4MDAwMDk5NTgsIDB4MzM4OGZmZmYgfSwKLSAgICB7IDB4MDAwMDk5NDAsIDB4MDA3ODEyMDQgfSwKLSAgICB7IDB4MDAwMGM5NWMsIDB4MDA0YjZhOGUgfSwKLSAgICB7IDB4MDAwMGM5NjgsIDB4MDAwMDAzY2UgfSwKLSAgICB7IDB4MDAwMDk5NzAsIDB4MTkwZmI1MTQgfSwKLSAgICB7IDB4MDAwMDk5NzQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5NzgsIDB4MDAwMDAwMDEgfSwKLSAgICB7IDB4MDAwMDk5N2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5ODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5ODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5ODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5OGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5OTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5OTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5OTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5OWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5YTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5YTQsIDB4MDAwMDAwMDEgfSwKLSAgICB7IDB4MDAwMDk5YTgsIDB4MjAxZmZmMDAgfSwKLSAgICB7IDB4MDAwMDk5YWMsIDB4MDA2ZjAwYzQgfSwKLSAgICB7IDB4MDAwMDk5YjAsIDB4MDMwNTEwMDAgfSwKLSAgICB7IDB4MDAwMDk5YjQsIDB4MDAwMDA4MjAgfSwKLSAgICB7IDB4MDAwMDk5ZGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5ZTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5ZTQsIDB4YWFhYWFhYWEgfSwKLSAgICB7IDB4MDAwMDk5ZTgsIDB4M2M0NjY0NzggfSwKLSAgICB7IDB4MDAwMDk5ZWMsIDB4MGNjODBjYWEgfSwKLSAgICB7IDB4MDAwMDk5ZmMsIDB4MDAwMDEwNDIgfSwKLSAgICB7IDB4MDAwMGEyMTAsIDB4NDA4MGEzMzMgfSwKLSAgICB7IDB4MDAwMGEyMTQsIDB4NDAyMDZjMTAgfSwKLSAgICB7IDB4MDAwMGEyMTgsIDB4MDA5YzQwNjAgfSwKLSAgICB7IDB4MDAwMGEyMjAsIDB4MDE4MzQwNjEgfSwKLSAgICB7IDB4MDAwMGEyMjQsIDB4MDAwMDA0MDAgfSwKLSAgICB7IDB4MDAwMGEyMjgsIDB4MDAwMDAzYjUgfSwKLSAgICB7IDB4MDAwMGEyMmMsIDB4MjMyNzcyMDAgfSwKLSAgICB7IDB4MDAwMGEyMzQsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEyMzgsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEyM2MsIDB4MTNjODg5YWYgfSwKLSAgICB7IDB4MDAwMGEyNDAsIDB4Mzg0OTBhMjAgfSwKLSAgICB7IDB4MDAwMGEyNDQsIDB4MDAwMDdiYjYgfSwKLSAgICB7IDB4MDAwMGEyNDgsIDB4MGZmZjNmZmMgfSwKLSAgICB7IDB4MDAwMGEyNGMsIDB4MDAwMDAwMDEgfSwKLSAgICB7IDB4MDAwMGEyNTAsIDB4MDAxZGEwMDAgfSwKLSAgICB7IDB4MDAwMGEyNTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEyNTgsIDB4MGNkYmQzODAgfSwKLSAgICB7IDB4MDAwMGEyNWMsIDB4MGYwZjBmMDEgfSwKLSAgICB7IDB4MDAwMGEyNjAsIDB4ZGZhOTFmMDEgfSwKLSAgICB7IDB4MDAwMGEyNjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEyNmMsIDB4MGViYWU5YzYgfSwKLSAgICB7IDB4MDAwMGIyNmMsIDB4MGViYWU5YzYgfSwKLSAgICB7IDB4MDAwMGQyNzAsIDB4MDA4MjA4MjAgfSwKLSAgICB7IDB4MDAwMGEyNzgsIDB4MWNlNzM5Y2UgfSwKLSAgICB7IDB4MDAwMGEyN2MsIDB4MDUwNzAxY2UgfSwKLSAgICB7IDB4MDAwMGEzNTgsIDB4Nzk5OWFhMGYgfSwKLSAgICB7IDB4MDAwMGQzNWMsIDB4MDdmZmZmZWYgfSwKLSAgICB7IDB4MDAwMGQzNjAsIDB4MGZmZmZmZTcgfSwKLSAgICB7IDB4MDAwMGQzNjQsIDB4MTdmZmZmZTUgfSwKLSAgICB7IDB4MDAwMGQzNjgsIDB4MWZmZmZmZTQgfSwKLSAgICB7IDB4MDAwMGQzNmMsIDB4MzdmZmZmZTMgfSwKLSAgICB7IDB4MDAwMGQzNzAsIDB4M2ZmZmZmZTMgfSwKLSAgICB7IDB4MDAwMGQzNzQsIDB4NTdmZmZmZTMgfSwKLSAgICB7IDB4MDAwMGQzNzgsIDB4NWZmZmZmZTIgfSwKLSAgICB7IDB4MDAwMGQzN2MsIDB4N2ZmZmZmZTIgfSwKLSAgICB7IDB4MDAwMGQzODAsIDB4N2YzYzdiYmEgfSwKLSAgICB7IDB4MDAwMGQzODQsIDB4ZjMzMDdmZjAgfSwKLSAgICB7IDB4MDAwMGEzODgsIDB4MGMwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzOGMsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEzOTAsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEzOTQsIDB4MWNlNzM5Y2UgfSwKLSAgICB7IDB4MDAwMGEzOTgsIDB4MDAwMDAxY2UgfSwKLSAgICB7IDB4MDAwMGEzOWMsIDB4MDAwMDAwMDEgfSwKLSAgICB7IDB4MDAwMGEzYTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzYTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzYTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzYWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzYjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzYjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzYjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzYmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzYzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzYzQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzYzgsIDB4MDAwMDAyNDYgfSwKLSAgICB7IDB4MDAwMGEzY2MsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEzZDAsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEzZDQsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEzZGMsIDB4MWNlNzM5Y2UgfSwKLSAgICB7IDB4MDAwMGEzZTAsIDB4MDAwMDAxY2UgfSwKLSAgICB7IDB4MDAwMGEzZTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzZTgsIDB4MThjNDM0MzMgfSwKLSAgICB7IDB4MDAwMGEzZWMsIDB4MDBmMzgwODEgfSwKLSAgICB7IDB4MDAwMDc4MDAsIDB4MDAwNDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4MDQsIDB4ZGIwMDUwMTIgfSwKLSAgICB7IDB4MDAwMDc4MDgsIDB4MDQ5MjQ5MTQgfSwKLSAgICB7IDB4MDAwMDc4MGMsIDB4MjEwODQyMTAgfSwKLSAgICB7IDB4MDAwMDc4MTAsIDB4NmQ4MDEzMDAgfSwKLSAgICB7IDB4MDAwMDc4MTQsIDB4MDAxOWJlZmYgfSwKLSAgICB7IDB4MDAwMDc4MTgsIDB4MDdlNDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4MWMsIDB4MDA0OTIwMDAgfSwKLSAgICB7IDB4MDAwMDc4MjAsIDB4OTI0OTI0ODAgfSwKLSAgICB7IDB4MDAwMDc4MjQsIDB4MDAwNDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4MjgsIDB4ZGIwMDUwMTIgfSwKLSAgICB7IDB4MDAwMDc4MmMsIDB4MDQ5MjQ5MTQgfSwKLSAgICB7IDB4MDAwMDc4MzAsIDB4MjEwODQyMTAgfSwKLSAgICB7IDB4MDAwMDc4MzQsIDB4NmQ4MDEzMDAgfSwKLSAgICB7IDB4MDAwMDc4MzgsIDB4MDAxOWJlZmYgfSwKLSAgICB7IDB4MDAwMDc4M2MsIDB4MDdlNDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4NDAsIDB4MDA0OTIwMDAgfSwKLSAgICB7IDB4MDAwMDc4NDQsIDB4OTI0OTI0ODAgfSwKLSAgICB7IDB4MDAwMDc4NDgsIDB4MDAxMjAwMDAgfSwKLSAgICB7IDB4MDAwMDc4NTAsIDB4NTQyMTQ1MTQgfSwKLSAgICB7IDB4MDAwMDc4NTgsIDB4OTI1OTI2OTIgfSwKLSAgICB7IDB4MDAwMDc4NjAsIDB4NTI4MDIwMDAgfSwKLSAgICB7IDB4MDAwMDc4NjQsIDB4MGE4ZTM3MGUgfSwKLSAgICB7IDB4MDAwMDc4NjgsIDB4YzAxMDI4NTAgfSwKLSAgICB7IDB4MDAwMDc4NmMsIDB4ODEyZDQwMDAgfSwKLSAgICB7IDB4MDAwMDc4NzQsIDB4MDAxYjZkYjAgfSwKLSAgICB7IDB4MDAwMDc4NzgsIDB4MDAzNzZiNjMgfSwKLSAgICB7IDB4MDAwMDc4N2MsIDB4MDZkYjZkYjYgfSwKLSAgICB7IDB4MDAwMDc4ODAsIDB4MDA2ZDgwMDAgfSwKLSAgICB7IDB4MDAwMDc4ODQsIDB4ZmZlZmZmZmUgfSwKLSAgICB7IDB4MDAwMDc4ODgsIDB4ZmZlZmZmZmUgfSwKLSAgICB7IDB4MDAwMDc4OTAsIDB4MDAwNjBhZWIgfSwKLSAgICB7IDB4MDAwMDc4OTQsIDB4NWExMDgwMDAgfSwKLSAgICB7IDB4MDAwMDc4OTgsIDB4MmE4NTAxNjAgfSwKLX07Ci0KLS8qIFhYWCA5MjgwIDIgKi8KIHN0YXRpYyBjb25zdCB1MzIgYXI5MjgwTW9kZXNfOTI4MF8yW11bNl0gPSB7Ci0gICAgeyAweDAwMDAxMDMwLCAweDAwMDAwMjMwLCAweDAwMDAwNDYwLCAweDAwMDAwMmMwLCAweDAwMDAwMTYwLCAweDAwMDAwMWUwIH0sCi0gICAgeyAweDAwMDAxMDcwLCAweDAwMDAwMTY4LCAweDAwMDAwMmQwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwIH0sCi0gICAgeyAweDAwMDAxMGIwLCAweDAwMDAwZTYwLCAweDAwMDAxY2MwLCAweDAwMDA3YzcwLCAweDAwMDAzZTM4LCAweDAwMDAxMTgwIH0sCi0gICAgeyAweDAwMDAxMGYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDA4MDE0LCAweDAzZTgwM2U4LCAweDA3ZDAwN2QwLCAweDEwODAxNjAwLCAweDA4NDAwYjAwLCAweDA2ZTAwNmUwIH0sCi0gICAgeyAweDAwMDA4MDFjLCAweDEyOGQ4MDI3LCAweDEyOGQ4MDRmLCAweDEyZTAwMDU3LCAweDEyZTAwMDJiLCAweDA5ODgwMDRmIH0sCi0gICAgeyAweDAwMDA4MTIwLCAweDA4ZjA0ODAwLCAweDA4ZjA0ODAwLCAweDA4ZjA0ODEwLCAweDA4ZjA0ODEwLCAweDA4ZjA0ODEwIH0sCi0gICAgeyAweDAwMDA4MWQwLCAweDAwMDAzMjEwLCAweDAwMDAzMjEwLCAweDAwMDAzMjBhLCAweDAwMDAzMjBhLCAweDAwMDAzMjBhIH0sCi0gICAgeyAweDAwMDA4MzE4LCAweDAwMDAzZTgwLCAweDAwMDA3ZDAwLCAweDAwMDA2ODgwLCAweDAwMDAzNDQwLCAweDAwMDA2ODgwIH0sCi0gICAgeyAweDAwMDA5ODA0LCAweDAwMDAwMzAwLCAweDAwMDAwM2M0LCAweDAwMDAwM2M0LCAweDAwMDAwMzAwLCAweDAwMDAwMzAzIH0sCi0gICAgeyAweDAwMDA5ODIwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwIH0sCi0gICAgeyAweDAwMDA5ODI0LCAweDAxMDAwZTBlLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlIH0sCi0gICAgeyAweDAwMDA5ODI4LCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxIH0sCi0gICAgeyAweDAwMDA5ODM0LCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0sCi0gICAgeyAweDAwMDA5ODM4LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3IH0sCi0gICAgeyAweDAwMDA5ODQwLCAweDIwNmEwMjJlLCAweDIwNmEwMjJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlIH0sCi0gICAgeyAweDAwMDA5ODQ0LCAweDAzNzIxNjFlLCAweDAzNzIxNjFlLCAweDAzNzIxNmEwLCAweDAzNzIxNmEwLCAweDAzNzIxNmEwIH0sCi0gICAgeyAweDAwMDA5ODUwLCAweDZjNDAwMGUyLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyLCAweDZjNDAwMGUyLCAweDZjNDAwMGUyIH0sCi0gICAgeyAweDAwMDA5ODU4LCAweDdlYzg4ZDJlLCAweDdlYzg4ZDJlLCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlIH0sCi0gICAgeyAweDAwMDA5ODVjLCAweDMxMzk1ZDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk1ZDVlLCAweDMxMzk1ZDVlIH0sCi0gICAgeyAweDAwMDA5ODYwLCAweDAwMDQ4ZDE4LCAweDAwMDQ4ZDE4LCAweDAwMDQ4ZDIwLCAweDAwMDQ4ZDIwLCAweDAwMDQ4ZDE4IH0sCi0gICAgeyAweDAwMDA5ODY0LCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwIH0sCi0gICAgeyAweDAwMDA5ODY4LCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwIH0sCi0gICAgeyAweDAwMDA5ODZjLCAweDA2OTAzMDgxLCAweDA2OTAzMDgxLCAweDA2OTAzODgxLCAweDA2OTAzODgxLCAweDA2OTAzODgxIH0sCi0gICAgeyAweDAwMDA5OTE0LCAweDAwMDAwN2QwLCAweDAwMDAwZmEwLCAweDAwMDAxMTMwLCAweDAwMDAwODk4LCAweDAwMDAwN2QwIH0sCi0gICAgeyAweDAwMDA5OTE4LCAweDAwMDAwMDBhLCAweDAwMDAwMDE0LCAweDAwMDAwMjY4LCAweDAwMDAwMDBiLCAweDAwMDAwMDE2IH0sCi0gICAgeyAweDAwMDA5OTI0LCAweGQwMGE4YTBiLCAweGQwMGE4YTBiLCAweGQwMGE4YTBkLCAweGQwMGE4YTBkLCAweGQwMGE4YTBkIH0sCi0gICAgeyAweDAwMDA5OTQ0LCAweGZmYmMxMDEwLCAweGZmYmMxMDEwLCAweGZmYmMxMDEwLCAweGZmYmMxMDEwLCAweGZmYmMxMDEwIH0sCi0gICAgeyAweDAwMDA5OTYwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwIH0sCi0gICAgeyAweDAwMDBhOTYwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwIH0sCi0gICAgeyAweDAwMDA5OTY0LCAweDAwMDAwMjEwLCAweDAwMDAwMjEwLCAweDAwMDAwMjEwLCAweDAwMDAwMjEwLCAweDAwMDAwMjEwIH0sCi0gICAgeyAweDAwMDBjOTY4LCAweDAwMDAwM2I1LCAweDAwMDAwM2I1LCAweDAwMDAwM2NlLCAweDAwMDAwM2NlLCAweDAwMDAwM2NlIH0sCi0gICAgeyAweDAwMDA5OWI4LCAweDAwMDAwMDFjLCAweDAwMDAwMDFjLCAweDAwMDAwMDFjLCAweDAwMDAwMDFjLCAweDAwMDAwMDFjIH0sCi0gICAgeyAweDAwMDA5OWJjLCAweDAwMDAwYTAwLCAweDAwMDAwYTAwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwIH0sCi0gICAgeyAweDAwMDA5OWMwLCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0IH0sCi0gICAgeyAweDAwMDA5OWM0LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3IH0sCi0gICAgeyAweDAwMDA5OWM4LCAweDYwZjY1MzI5LCAweDYwZjY1MzI5LCAweDYwZjY1MzI5LCAweDYwZjY1MzI5LCAweDYwZjY1MzI5IH0sCi0gICAgeyAweDAwMDA5OWNjLCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4IH0sCi0gICAgeyAweDAwMDA5OWQwLCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0IH0sCi0gICAgeyAweDAwMDA5OWQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjA0LCAweDAwMDAwNDQ0LCAweDAwMDAwNDQ0LCAweDAwMDAwNDQ0LCAweDAwMDAwNDQ0LCAweDAwMDAwNDQ0IH0sCi0gICAgeyAweDAwMDBhMjBjLCAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCAweDAwMDFmMDE5LCAweDAwMDFmMDE5LCAweDAwMDFmMDE5IH0sCi0gICAgeyAweDAwMDBiMjBjLCAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCAweDAwMDFmMDE5LCAweDAwMDFmMDE5LCAweDAwMDFmMDE5IH0sCi0gICAgeyAweDAwMDBhMjFjLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0sCi0gICAgeyAweDAwMDBhMjMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMjEwLCAweDAwMDAwMTA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjNjLCAweDEzYzg4MDAwLCAweDEzYzg4MDAwLCAweDEzYzg4MDAxLCAweDEzYzg4MDAwLCAweDEzYzg4MDAwIH0sCi0gICAgeyAweDAwMDBhMjUwLCAweDAwMWZmMDAwLCAweDAwMWZmMDAwLCAweDAwMDRhMDAwLCAweDAwMDRhMDAwLCAweDAwMDRhMDAwIH0sCi0gICAgeyAweDAwMDBhMzU4LCAweDc5OTlhYTAyLCAweDc5OTlhYTAyLCAweDc5OTlhYTBlLCAweDc5OTlhYTBlLCAweDc5OTlhYTBlIH0sCi0gICAgeyAweDAwMDBhMzg4LCAweDBjMDAwMDAwLCAweDBjMDAwMDAwLCAweDA4MDAwMDAwLCAweDBjMDAwMDAwLCAweDBjMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2Q4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA3ODk0LCAweDVhNTA4MDAwLCAweDVhNTA4MDAwLCAweDVhNTA4MDAwLCAweDVhNTA4MDAwLCAweDVhNTA4MDAwIH0sCisJezB4MDAwMDEwMzAsIDB4MDAwMDAyMzAsIDB4MDAwMDA0NjAsIDB4MDAwMDAyYzAsIDB4MDAwMDAxNjAsIDB4MDAwMDAxZTB9LAorCXsweDAwMDAxMDcwLCAweDAwMDAwMTY4LCAweDAwMDAwMmQwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwfSwKKwl7MHgwMDAwMTBiMCwgMHgwMDAwMGU2MCwgMHgwMDAwMWNjMCwgMHgwMDAwN2M3MCwgMHgwMDAwM2UzOCwgMHgwMDAwMTE4MH0sCisJezB4MDAwMDEwZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDh9LAorCXsweDAwMDA4MDE0LCAweDAzZTgwM2U4LCAweDA3ZDAwN2QwLCAweDEwODAxNjAwLCAweDA4NDAwYjAwLCAweDA2ZTAwNmUwfSwKKwl7MHgwMDAwODAxYywgMHgxMjhkODAyNywgMHgxMjhkODA0ZiwgMHgxMmUwMDA1NywgMHgxMmUwMDAyYiwgMHgwOTg4MDA0Zn0sCisJezB4MDAwMDgxMjAsIDB4MDhmMDQ4MDAsIDB4MDhmMDQ4MDAsIDB4MDhmMDQ4MTAsIDB4MDhmMDQ4MTAsIDB4MDhmMDQ4MTB9LAorCXsweDAwMDA4MWQwLCAweDAwMDAzMjEwLCAweDAwMDAzMjEwLCAweDAwMDAzMjBhLCAweDAwMDAzMjBhLCAweDAwMDAzMjBhfSwKKwl7MHgwMDAwODMxOCwgMHgwMDAwM2U4MCwgMHgwMDAwN2QwMCwgMHgwMDAwNjg4MCwgMHgwMDAwMzQ0MCwgMHgwMDAwNjg4MH0sCisJezB4MDAwMDk4MDQsIDB4MDAwMDAzMDAsIDB4MDAwMDAzYzQsIDB4MDAwMDAzYzQsIDB4MDAwMDAzMDAsIDB4MDAwMDAzMDN9LAorCXsweDAwMDA5ODIwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwfSwKKwl7MHgwMDAwOTgyNCwgMHgwMTAwMGUwZSwgMHgwMTAwMGUwZSwgMHgwMTAwMGUwZSwgMHgwMTAwMGUwZSwgMHgwMTAwMGUwZX0sCisJezB4MDAwMDk4MjgsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDF9LAorCXsweDAwMDA5ODM0LCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlfSwKKwl7MHgwMDAwOTgzOCwgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwN30sCisJezB4MDAwMDk4NDAsIDB4MjA2YTAyMmUsIDB4MjA2YTAyMmUsIDB4MjA2YTAxMmUsIDB4MjA2YTAxMmUsIDB4MjA2YTAxMmV9LAorCXsweDAwMDA5ODQ0LCAweDAzNzIxNjFlLCAweDAzNzIxNjFlLCAweDAzNzIxNmEwLCAweDAzNzIxNmEwLCAweDAzNzIxNmEwfSwKKwl7MHgwMDAwOTg1MCwgMHg2YzQwMDBlMiwgMHg2ZDQwMDBlMiwgMHg2ZDQwMDBlMiwgMHg2YzQwMDBlMiwgMHg2YzQwMDBlMn0sCisJezB4MDAwMDk4NTgsIDB4N2VjODhkMmUsIDB4N2VjODhkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmV9LAorCXsweDAwMDA5ODVjLCAweDMxMzk1ZDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk1ZDVlLCAweDMxMzk1ZDVlfSwKKwl7MHgwMDAwOTg2MCwgMHgwMDA0OGQxOCwgMHgwMDA0OGQxOCwgMHgwMDA0OGQyMCwgMHgwMDA0OGQyMCwgMHgwMDA0OGQxOH0sCisJezB4MDAwMDk4NjQsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDB9LAorCXsweDAwMDA5ODY4LCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwfSwKKwl7MHgwMDAwOTg2YywgMHgwNjkwMzA4MSwgMHgwNjkwMzA4MSwgMHgwNjkwMzg4MSwgMHgwNjkwMzg4MSwgMHgwNjkwMzg4MX0sCisJezB4MDAwMDk5MTQsIDB4MDAwMDA3ZDAsIDB4MDAwMDBmYTAsIDB4MDAwMDExMzAsIDB4MDAwMDA4OTgsIDB4MDAwMDA3ZDB9LAorCXsweDAwMDA5OTE4LCAweDAwMDAwMDBhLCAweDAwMDAwMDE0LCAweDAwMDAwMjY4LCAweDAwMDAwMDBiLCAweDAwMDAwMDE2fSwKKwl7MHgwMDAwOTkyNCwgMHhkMDBhOGEwYiwgMHhkMDBhOGEwYiwgMHhkMDBhOGEwZCwgMHhkMDBhOGEwZCwgMHhkMDBhOGEwZH0sCisJezB4MDAwMDk5NDQsIDB4ZmZiYzEwMTAsIDB4ZmZiYzEwMTAsIDB4ZmZiYzEwMTAsIDB4ZmZiYzEwMTAsIDB4ZmZiYzEwMTB9LAorCXsweDAwMDA5OTYwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwfSwKKwl7MHgwMDAwYTk2MCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMH0sCisJezB4MDAwMDk5NjQsIDB4MDAwMDAyMTAsIDB4MDAwMDAyMTAsIDB4MDAwMDAyMTAsIDB4MDAwMDAyMTAsIDB4MDAwMDAyMTB9LAorCXsweDAwMDBjOTY4LCAweDAwMDAwM2I1LCAweDAwMDAwM2I1LCAweDAwMDAwM2NlLCAweDAwMDAwM2NlLCAweDAwMDAwM2NlfSwKKwl7MHgwMDAwOTliOCwgMHgwMDAwMDAxYywgMHgwMDAwMDAxYywgMHgwMDAwMDAxYywgMHgwMDAwMDAxYywgMHgwMDAwMDAxY30sCisJezB4MDAwMDk5YmMsIDB4MDAwMDBhMDAsIDB4MDAwMDBhMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDB9LAorCXsweDAwMDA5OWMwLCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0fSwKKwl7MHgwMDAwYTIwNCwgMHgwMDAwMDQ0NCwgMHgwMDAwMDQ0NCwgMHgwMDAwMDQ0NCwgMHgwMDAwMDQ0NCwgMHgwMDAwMDQ0NH0sCisJezB4MDAwMGEyMGMsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIDB4MDAwMWYwMTksIDB4MDAwMWYwMTksIDB4MDAwMWYwMTl9LAorCXsweDAwMDBiMjBjLCAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCAweDAwMDFmMDE5LCAweDAwMDFmMDE5LCAweDAwMDFmMDE5fSwKKwl7MHgwMDAwYTIxYywgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYX0sCisJezB4MDAwMGEyMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAyMTAsIDB4MDAwMDAxMDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMjNjLCAweDEzYzg4MDAwLCAweDEzYzg4MDAwLCAweDEzYzg4MDAxLCAweDEzYzg4MDAwLCAweDEzYzg4MDAwfSwKKwl7MHgwMDAwYTI1MCwgMHgwMDFmZjAwMCwgMHgwMDFmZjAwMCwgMHgwMDA0YTAwMCwgMHgwMDA0YTAwMCwgMHgwMDA0YTAwMH0sCisJezB4MDAwMGEzNTgsIDB4Nzk5OWFhMDIsIDB4Nzk5OWFhMDIsIDB4Nzk5OWFhMGUsIDB4Nzk5OWFhMGUsIDB4Nzk5OWFhMGV9LAorCXsweDAwMDBhMzg4LCAweDBjMDAwMDAwLCAweDBjMDAwMDAwLCAweDA4MDAwMDAwLCAweDBjMDAwMDAwLCAweDBjMDAwMDAwfSwKKwl7MHgwMDAwYTNkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDc4OTQsIDB4NWE1MDgwMDAsIDB4NWE1MDgwMDAsIDB4NWE1MDgwMDAsIDB4NWE1MDgwMDAsIDB4NWE1MDgwMDB9LAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBhcjkyODBDb21tb25fOTI4MF8yW11bMl0gPSB7Ci0gICAgeyAweDAwMDAwMDBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMDIwMDE1IH0sCi0gICAgeyAweDAwMDAwMDM0LCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwMDAwMDQwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDQ0LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDAwMDQ4LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDAwMDRjLCAweDAwMDAwMDEwIH0sCi0gICAgeyAweDAwMDAwMDUwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDU0LCAweDAwMDAwMDFmIH0sCi0gICAgeyAweDAwMDAwODAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODE4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODFjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODIwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMDQwLCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDQ0LCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDQ4LCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDRjLCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDUwLCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDU0LCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDU4LCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDVjLCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDYwLCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDY0LCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMjMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMjcwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMDM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMDc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMGI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMGY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMTM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMTc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMWI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMWY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMjM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMjc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMmI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMmY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMzM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMzc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxM2I4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxM2Y4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNDM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNDc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNGI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNGY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNTM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNTc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNWI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNWY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNjM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNjc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNmI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNmY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNzM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNzc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxN2I4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxN2Y4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMDNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMDdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMGJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMGZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMTNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMTdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMWJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMWZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMjNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMjdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMmJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMmZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMzNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMzdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxM2JjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxM2ZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNDNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNDdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA0MDMwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA0MDNjLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA0MDI0LCAweDAwMDAwMDFmIH0sCi0gICAgeyAweDAwMDA0MDYwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA0MDY0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA3MDEwLCAweDAwMDAwMDMzIH0sCi0gICAgeyAweDAwMDA3MDM0LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3MDM4LCAweDAwMDAwNGMyIH0sCi0gICAgeyAweDAwMDA4MDA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDE4LCAweDAwMDAwNzAwIH0sCi0gICAgeyAweDAwMDA4MDIwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDQ4LCAweDQwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDU0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDU4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDVjLCAweDAwMGZjNzhmIH0sCi0gICAgeyAweDAwMDA4MDYwLCAweDAwMDAwMDBmIH0sCi0gICAgeyAweDAwMDA4MDY0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDcwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGMwLCAweDJhODAwMDFhIH0sCi0gICAgeyAweDAwMDA4MGM0LCAweDA1ZGMwMWUwIH0sCi0gICAgeyAweDAwMDA4MGM4LCAweDFmNDAyNzEwIH0sCi0gICAgeyAweDAwMDA4MGNjLCAweDAxZjQwMDAwIH0sCi0gICAgeyAweDAwMDA4MGQwLCAweDAwMDAxZTAwIH0sCi0gICAgeyAweDAwMDA4MGQ0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGQ4LCAweDAwNDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGUwLCAweGZmZmZmZmZmIH0sCi0gICAgeyAweDAwMDA4MGU0LCAweDAwMDBmZmZmIH0sCi0gICAgeyAweDAwMDA4MGU4LCAweDAwM2YzZjNmIH0sCi0gICAgeyAweDAwMDA4MGVjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGYwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGY0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGZjLCAweDAwMDIwMDAwIH0sCi0gICAgeyAweDAwMDA4MTAwLCAweDAwMDIwMDAwIH0sCi0gICAgeyAweDAwMDA4MTA0LCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDA4MTA4LCAweDAwMDAwMDUyIH0sCi0gICAgeyAweDAwMDA4MTBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTEwLCAweDAwMDAwMTY4IH0sCi0gICAgeyAweDAwMDA4MTE4LCAweDAwMDEwMGFhIH0sCi0gICAgeyAweDAwMDA4MTFjLCAweDAwMDAzMjEwIH0sCi0gICAgeyAweDAwMDA4MTI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTM0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTQ0LCAweGZmZmZmZmZmIH0sCi0gICAgeyAweDAwMDA4MTY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTcwLCAweDMyMTQzMzIwIH0sCi0gICAgeyAweDAwMDA4MTc0LCAweGZhYTRmYTUwIH0sCi0gICAgeyAweDAwMDA4MTc4LCAweDAwMDAwMTAwIH0sCi0gICAgeyAweDAwMDA4MTdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWVjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWYwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWY0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjE4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjFjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjIwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjM0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjQwLCAweDAwMTAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjQ0LCAweDAwMTBmNDAwIH0sCi0gICAgeyAweDAwMDA4MjQ4LCAweDAwMDAwMTAwIH0sCi0gICAgeyAweDAwMDA4MjRjLCAweDAwMDFlODAwIH0sCi0gICAgeyAweDAwMDA4MjUwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjU0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjU4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjVjLCAweDQwMDAwMGZmIH0sCi0gICAgeyAweDAwMDA4MjYwLCAweDAwMDgwOTIyIH0sCi0gICAgeyAweDAwMDA4MjY0LCAweDg4YTAwMDEwIH0sCi0gICAgeyAweDAwMDA4MjcwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4Mjc0LCAweDQwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4Mjc4LCAweDAwM2U0MTgwIH0sCi0gICAgeyAweDAwMDA4MjdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4Mjg0LCAweDAwMDAwMDJjIH0sCi0gICAgeyAweDAwMDA4Mjg4LCAweDAwMDAwMDJjIH0sCi0gICAgeyAweDAwMDA4MjhjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4Mjk0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4Mjk4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjljLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzAwLCAweDAwMDAwMDQwIH0sCi0gICAgeyAweDAwMDA4MzE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzJjLCAweDAwMDAwMDA3IH0sCi0gICAgeyAweDAwMDA4MzMwLCAweDAwMDAwMzAyIH0sCi0gICAgeyAweDAwMDA4MzM0LCAweDAwMDAwZTAwIH0sCi0gICAgeyAweDAwMDA4MzM4LCAweDAwZmYwMDAwIH0sCi0gICAgeyAweDAwMDA4MzNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzQwLCAweDAwMDEwN2ZmIH0sCi0gICAgeyAweDAwMDA4MzQ0LCAweDAwNDgxMDQzIH0sCi0gICAgeyAweDAwMDA5ODA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5ODBjLCAweGFmYTY4ZTMwIH0sCi0gICAgeyAweDAwMDA5ODEwLCAweGZkMTRlMDAwIH0sCi0gICAgeyAweDAwMDA5ODE0LCAweDljMGE5ZjZiIH0sCi0gICAgeyAweDAwMDA5ODFjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5ODJjLCAweDAwMDBhMDAwIH0sCi0gICAgeyAweDAwMDA5ODMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5ODNjLCAweDAwMjAwNDAwIH0sCi0gICAgeyAweDAwMDA5ODRjLCAweDAwNDAyMzNjIH0sCi0gICAgeyAweDAwMDBhODRjLCAweDAwNDAyMzNjIH0sCi0gICAgeyAweDAwMDA5ODU0LCAweDAwMDAwMDQ0IH0sCi0gICAgeyAweDAwMDA5OTAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTEwLCAweDAxMDAyMzEwIH0sCi0gICAgeyAweDAwMDA5OTFjLCAweDEwMDAwZmZmIH0sCi0gICAgeyAweDAwMDA5OTIwLCAweDA0OTAwMDAwIH0sCi0gICAgeyAweDAwMDBhOTIwLCAweDA0OTAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTI4LCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDA5OTJjLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDA5OTM0LCAweDFlMWYyMDIyIH0sCi0gICAgeyAweDAwMDA5OTM4LCAweDBhMGIwYzBkIH0sCi0gICAgeyAweDAwMDA5OTNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTQ4LCAweDkyODBjMDBhIH0sCi0gICAgeyAweDAwMDA5OTRjLCAweDAwMDIwMDI4IH0sCi0gICAgeyAweDAwMDA5OTU0LCAweDVmM2NhM2RlIH0sCi0gICAgeyAweDAwMDA5OTU4LCAweDIxMDhlY2ZmIH0sCi0gICAgeyAweDAwMDA5OTQwLCAweDE0NzUwNjA0IH0sCi0gICAgeyAweDAwMDBjOTVjLCAweDAwNGI2YThlIH0sCi0gICAgeyAweDAwMDA5OTcwLCAweDE5MGZiNTE1IH0sCi0gICAgeyAweDAwMDA5OTc0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTc4LCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDA5OTdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTgwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OThjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTkwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTk0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTk4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTljLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWE0LCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDA5OWE4LCAweDIwMWZmZjAwIH0sCi0gICAgeyAweDAwMDA5OWFjLCAweDAwNmYwMDAwIH0sCi0gICAgeyAweDAwMDA5OWIwLCAweDAzMDUxMDAwIH0sCi0gICAgeyAweDAwMDA5OWI0LCAweDAwMDAwODIwIH0sCi0gICAgeyAweDAwMDA5OWRjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWUwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWU0LCAweGFhYWFhYWFhIH0sCi0gICAgeyAweDAwMDA5OWU4LCAweDNjNDY2NDc4IH0sCi0gICAgeyAweDAwMDA5OWVjLCAweDBjYzgwY2FhIH0sCi0gICAgeyAweDAwMDA5OWYwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWZjLCAweDAwMDAxMDQyIH0sCi0gICAgeyAweDAwMDBhMjA4LCAweDgwM2U0Nzg4IH0sCi0gICAgeyAweDAwMDBhMjEwLCAweDQwODBhMzMzIH0sCi0gICAgeyAweDAwMDBhMjE0LCAweDQwMjA2YzEwIH0sCi0gICAgeyAweDAwMDBhMjE4LCAweDAwOWM0MDYwIH0sCi0gICAgeyAweDAwMDBhMjIwLCAweDAxODM0MDYxIH0sCi0gICAgeyAweDAwMDBhMjI0LCAweDAwMDAwNDAwIH0sCi0gICAgeyAweDAwMDBhMjI4LCAweDAwMDAwM2I1IH0sCi0gICAgeyAweDAwMDBhMjJjLCAweDIzM2Y3MTgwIH0sCi0gICAgeyAweDAwMDBhMjM0LCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhMjM4LCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhMjQwLCAweDM4NDkwYTIwIH0sCi0gICAgeyAweDAwMDBhMjQ0LCAweDAwMDA3YmI2IH0sCi0gICAgeyAweDAwMDBhMjQ4LCAweDBmZmYzZmZjIH0sCi0gICAgeyAweDAwMDBhMjRjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjU0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjU4LCAweDBjZGJkMzgwIH0sCi0gICAgeyAweDAwMDBhMjVjLCAweDBmMGYwZjAxIH0sCi0gICAgeyAweDAwMDBhMjYwLCAweGRmYTkxZjAxIH0sCi0gICAgeyAweDAwMDBhMjY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjZjLCAweDBlNzllNWM2IH0sCi0gICAgeyAweDAwMDBiMjZjLCAweDBlNzllNWM2IH0sCi0gICAgeyAweDAwMDBkMjcwLCAweDAwODIwODIwIH0sCi0gICAgeyAweDAwMDBhMjc4LCAweDFjZTczOWNlIH0sCi0gICAgeyAweDAwMDBkMzVjLCAweDA3ZmZmZmVmIH0sCi0gICAgeyAweDAwMDBkMzYwLCAweDBmZmZmZmU3IH0sCi0gICAgeyAweDAwMDBkMzY0LCAweDE3ZmZmZmU1IH0sCi0gICAgeyAweDAwMDBkMzY4LCAweDFmZmZmZmU0IH0sCi0gICAgeyAweDAwMDBkMzZjLCAweDM3ZmZmZmUzIH0sCi0gICAgeyAweDAwMDBkMzcwLCAweDNmZmZmZmUzIH0sCi0gICAgeyAweDAwMDBkMzc0LCAweDU3ZmZmZmUzIH0sCi0gICAgeyAweDAwMDBkMzc4LCAweDVmZmZmZmUyIH0sCi0gICAgeyAweDAwMDBkMzdjLCAweDdmZmZmZmUyIH0sCi0gICAgeyAweDAwMDBkMzgwLCAweDdmM2M3YmJhIH0sCi0gICAgeyAweDAwMDBkMzg0LCAweGYzMzA3ZmYwIH0sCi0gICAgeyAweDAwMDBhMzhjLCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhMzkwLCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhMzk0LCAweDFjZTczOWNlIH0sCi0gICAgeyAweDAwMDBhMzk4LCAweDAwMDAwMWNlIH0sCi0gICAgeyAweDAwMDBhMzljLCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDBhM2EwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2E0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2E4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2FjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2IwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2I0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2I4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2JjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2MwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2M0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2M4LCAweDAwMDAwMjQ2IH0sCi0gICAgeyAweDAwMDBhM2NjLCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhM2QwLCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhM2Q0LCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhM2RjLCAweDFjZTczOWNlIH0sCi0gICAgeyAweDAwMDBhM2UwLCAweDAwMDAwMWNlIH0sCi0gICAgeyAweDAwMDBhM2U0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2U4LCAweDE4YzQzNDMzIH0sCi0gICAgeyAweDAwMDBhM2VjLCAweDAwZjcwMDgxIH0sCi0gICAgeyAweDAwMDA3ODAwLCAweDAwMDQwMDAwIH0sCi0gICAgeyAweDAwMDA3ODA0LCAweGRiMDA1MDEyIH0sCi0gICAgeyAweDAwMDA3ODA4LCAweDA0OTI0OTE0IH0sCi0gICAgeyAweDAwMDA3ODBjLCAweDIxMDg0MjEwIH0sCi0gICAgeyAweDAwMDA3ODEwLCAweDZkODAxMzAwIH0sCi0gICAgeyAweDAwMDA3ODE4LCAweDA3ZTQxMDAwIH0sCi0gICAgeyAweDAwMDA3ODI0LCAweDAwMDQwMDAwIH0sCi0gICAgeyAweDAwMDA3ODI4LCAweGRiMDA1MDEyIH0sCi0gICAgeyAweDAwMDA3ODJjLCAweDA0OTI0OTE0IH0sCi0gICAgeyAweDAwMDA3ODMwLCAweDIxMDg0MjEwIH0sCi0gICAgeyAweDAwMDA3ODM0LCAweDZkODAxMzAwIH0sCi0gICAgeyAweDAwMDA3ODNjLCAweDA3ZTQwMDAwIH0sCi0gICAgeyAweDAwMDA3ODQ4LCAweDAwMTAwMDAwIH0sCi0gICAgeyAweDAwMDA3ODRjLCAweDc3M2YwNTY3IH0sCi0gICAgeyAweDAwMDA3ODUwLCAweDU0MjE0NTE0IH0sCi0gICAgeyAweDAwMDA3ODU0LCAweDEyMDM1ODI4IH0sCi0gICAgeyAweDAwMDA3ODU4LCAweDkyNTkyNjlhIH0sCi0gICAgeyAweDAwMDA3ODYwLCAweDUyODAyMDAwIH0sCi0gICAgeyAweDAwMDA3ODY0LCAweDBhOGUzNzBlIH0sCi0gICAgeyAweDAwMDA3ODY4LCAweGMwMTAyODUwIH0sCi0gICAgeyAweDAwMDA3ODZjLCAweDgxMmQ0MDAwIH0sCi0gICAgeyAweDAwMDA3ODcwLCAweDgwN2VjNDAwIH0sCi0gICAgeyAweDAwMDA3ODc0LCAweDAwMWI2ZGIwIH0sCi0gICAgeyAweDAwMDA3ODc4LCAweDAwMzc2YjYzIH0sCi0gICAgeyAweDAwMDA3ODdjLCAweDA2ZGI2ZGI2IH0sCi0gICAgeyAweDAwMDA3ODgwLCAweDAwNmQ4MDAwIH0sCi0gICAgeyAweDAwMDA3ODg0LCAweGZmZWZmZmZlIH0sCi0gICAgeyAweDAwMDA3ODg4LCAweGZmZWZmZmZlIH0sCi0gICAgeyAweDAwMDA3ODhjLCAweDAwMDEwMDAwIH0sCi0gICAgeyAweDAwMDA3ODkwLCAweDAyMDYwYWViIH0sCi0gICAgeyAweDAwMDA3ODk4LCAweDJhODUwMTYwIH0sCisJLyogQWRkciAgICAgIGFsbG1vZGVzICAqLworCXsweDAwMDAwMDBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDAzMCwgMHgwMDAyMDAxNX0sCisJezB4MDAwMDAwMzQsIDB4MDAwMDAwMDV9LAorCXsweDAwMDAwMDQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDA0NCwgMHgwMDAwMDAwOH0sCisJezB4MDAwMDAwNDgsIDB4MDAwMDAwMDh9LAorCXsweDAwMDAwMDRjLCAweDAwMDAwMDEwfSwKKwl7MHgwMDAwMDA1MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDAwNTQsIDB4MDAwMDAwMWZ9LAorCXsweDAwMDAwODAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDgwNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDA4MDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwODBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDgxMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDA4MTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwODE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDgxYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDA4MjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwODI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTA0MCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNDQsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDQ4LCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA0YywgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNTAsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDU0LCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA1OCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNWMsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDYwLCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA2NCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEyMzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMjcwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTAzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEwNzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMGI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTBmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDExMzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMTc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTFiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDExZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMjM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTI3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEyYjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMmY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTMzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEzNzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxM2I4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTNmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE0MzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNDc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTRiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE0ZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNTM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTU3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE1YjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNWY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTYzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE2NzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNmI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTZmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE3MzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNzc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTdiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE3ZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMDNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTA3YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEwYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMGZjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTEzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDExN2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMWJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTFmYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEyM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMjdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTJiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEyZmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMzNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTM3YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEzYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxM2ZjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTQzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE0N2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA0MDMwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNDAzYywgMHgwMDAwMDAwMn0sCisJezB4MDAwMDQwMjQsIDB4MDAwMDAwMWZ9LAorCXsweDAwMDA0MDYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwNDA2NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDcwMTAsIDB4MDAwMDAwMzN9LAorCXsweDAwMDA3MDM0LCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNzAzOCwgMHgwMDAwMDRjMn0sCisJezB4MDAwMDgwMDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwMTgsIDB4MDAwMDA3MDB9LAorCXsweDAwMDA4MDIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDQ4LCAweDQwMDAwMDAwfSwKKwl7MHgwMDAwODA1NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwNTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDVjLCAweDAwMGZjNzhmfSwKKwl7MHgwMDAwODA2MCwgMHgwMDAwMDAwZn0sCisJezB4MDAwMDgwNjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDcwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBjMCwgMHgyYTgwMDAxYX0sCisJezB4MDAwMDgwYzQsIDB4MDVkYzAxZTB9LAorCXsweDAwMDA4MGM4LCAweDFmNDAyNzEwfSwKKwl7MHgwMDAwODBjYywgMHgwMWY0MDAwMH0sCisJezB4MDAwMDgwZDAsIDB4MDAwMDFlMDB9LAorCXsweDAwMDA4MGQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBkOCwgMHgwMDQwMDAwMH0sCisJezB4MDAwMDgwZTAsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4MGU0LCAweDAwMDBmZmZmfSwKKwl7MHgwMDAwODBlOCwgMHgwMDNmM2YzZn0sCisJezB4MDAwMDgwZWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBmNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGZjLCAweDAwMDIwMDAwfSwKKwl7MHgwMDAwODEwMCwgMHgwMDAyMDAwMH0sCisJezB4MDAwMDgxMDQsIDB4MDAwMDAwMDF9LAorCXsweDAwMDA4MTA4LCAweDAwMDAwMDUyfSwKKwl7MHgwMDAwODEwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMTAsIDB4MDAwMDAxNjh9LAorCXsweDAwMDA4MTE4LCAweDAwMDEwMGFhfSwKKwl7MHgwMDAwODExYywgMHgwMDAwMzIxMH0sCisJezB4MDAwMDgxMjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEyYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTQ0LCAweGZmZmZmZmZmfSwKKwl7MHgwMDAwODE2OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxNmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTcwLCAweDMyMTQzMzIwfSwKKwl7MHgwMDAwODE3NCwgMHhmYWE0ZmE1MH0sCisJezB4MDAwMDgxNzgsIDB4MDAwMDAxMDB9LAorCXsweDAwMDA4MTdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFjMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxZWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFmNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWZjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjE0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIxOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIyNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIzMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyNDAsIDB4MDAxMDAwMDB9LAorCXsweDAwMDA4MjQ0LCAweDAwMTBmNDAwfSwKKwl7MHgwMDAwODI0OCwgMHgwMDAwMDEwMH0sCisJezB4MDAwMDgyNGMsIDB4MDAwMWU4MDB9LAorCXsweDAwMDA4MjUwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI1NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyNTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjVjLCAweDQwMDAwMGZmfSwKKwl7MHgwMDAwODI2MCwgMHgwMDA4MDkyMn0sCisJezB4MDAwMDgyNjQsIDB4ODhhMDAwMTB9LAorCXsweDAwMDA4MjcwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI3NCwgMHg0MDAwMDAwMH0sCisJezB4MDAwMDgyNzgsIDB4MDAzZTQxODB9LAorCXsweDAwMDA4MjdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI4NCwgMHgwMDAwMDAyY30sCisJezB4MDAwMDgyODgsIDB4MDAwMDAwMmN9LAorCXsweDAwMDA4MjhjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI5NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyOTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODMwMCwgMHgwMDAwMDA0MH0sCisJezB4MDAwMDgzMTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODMyYywgMHgwMDAwMDAwN30sCisJezB4MDAwMDgzMzAsIDB4MDAwMDAzMDJ9LAorCXsweDAwMDA4MzM0LCAweDAwMDAwZTAwfSwKKwl7MHgwMDAwODMzOCwgMHgwMGZmMDAwMH0sCisJezB4MDAwMDgzM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzQwLCAweDAwMDEwN2ZmfSwKKwl7MHgwMDAwODM0NCwgMHgwMDQ4MTA0M30sCisJezB4MDAwMDk4MDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODBjLCAweGFmYTY4ZTMwfSwKKwl7MHgwMDAwOTgxMCwgMHhmZDE0ZTAwMH0sCisJezB4MDAwMDk4MTQsIDB4OWMwYTlmNmJ9LAorCXsweDAwMDA5ODFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTgyYywgMHgwMDAwYTAwMH0sCisJezB4MDAwMDk4MzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODNjLCAweDAwMjAwNDAwfSwKKwl7MHgwMDAwOTg0YywgMHgwMDQwMjMzY30sCisJezB4MDAwMGE4NGMsIDB4MDA0MDIzM2N9LAorCXsweDAwMDA5ODU0LCAweDAwMDAwMDQ0fSwKKwl7MHgwMDAwOTkwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5MDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTkwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5MTAsIDB4MDEwMDIzMTB9LAorCXsweDAwMDA5OTFjLCAweDEwMDAwZmZmfSwKKwl7MHgwMDAwOTkyMCwgMHgwNDkwMDAwMH0sCisJezB4MDAwMGE5MjAsIDB4MDQ5MDAwMDB9LAorCXsweDAwMDA5OTI4LCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwOTkyYywgMHgwMDAwMDAwNH0sCisJezB4MDAwMDk5MzQsIDB4MWUxZjIwMjJ9LAorCXsweDAwMDA5OTM4LCAweDBhMGIwYzBkfSwKKwl7MHgwMDAwOTkzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5NDgsIDB4OTI4MGMwMGF9LAorCXsweDAwMDA5OTRjLCAweDAwMDIwMDI4fSwKKwl7MHgwMDAwOTk1NCwgMHg1ZjNjYTNkZX0sCisJezB4MDAwMDk5NTgsIDB4MjEwOGVjZmZ9LAorCXsweDAwMDA5OTQwLCAweDE0NzUwNjA0fSwKKwl7MHgwMDAwYzk1YywgMHgwMDRiNmE4ZX0sCisJezB4MDAwMDk5NzAsIDB4MTkwZmI1MTR9LAorCXsweDAwMDA5OTc0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTk3OCwgMHgwMDAwMDAwMX0sCisJezB4MDAwMDk5N2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTgwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTk4NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5ODgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OThjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTk5MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5OTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTk4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTk5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5YTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OWE0LCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwOTlhOCwgMHgyMDFmZmYwMH0sCisJezB4MDAwMDk5YWMsIDB4MDA2ZjAwMDB9LAorCXsweDAwMDA5OWIwLCAweDAzMDUxMDAwfSwKKwl7MHgwMDAwOTliNCwgMHgwMDAwMDgyMH0sCisJezB4MDAwMDk5YzQsIDB4MDYzMzZmNzd9LAorCXsweDAwMDA5OWM4LCAweDZhZjY1MzJmfSwKKwl7MHgwMDAwOTljYywgMHgwOGYxODZjOH0sCisJezB4MDAwMDk5ZDAsIDB4MDAwNDYzODR9LAorCXsweDAwMDA5OWQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTlkOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5ZGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OWUwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTllNCwgMHhhYWFhYWFhYX0sCisJezB4MDAwMDk5ZTgsIDB4M2M0NjY0Nzh9LAorCXsweDAwMDA5OWVjLCAweDBjYzgwY2FhfSwKKwl7MHgwMDAwOTlmMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5ZmMsIDB4MDAwMDEwNDJ9LAorCXsweDAwMDBhMjA4LCAweDgwM2U0Nzg4fSwKKwl7MHgwMDAwYTIxMCwgMHg0MDgwYTMzM30sCisJezB4MDAwMGEyMTQsIDB4NDAyMDZjMTB9LAorCXsweDAwMDBhMjE4LCAweDAwOWM0MDYwfSwKKwl7MHgwMDAwYTIyMCwgMHgwMTgzNDA2MX0sCisJezB4MDAwMGEyMjQsIDB4MDAwMDA0MDB9LAorCXsweDAwMDBhMjI4LCAweDAwMDAwM2I1fSwKKwl7MHgwMDAwYTIyYywgMHgyMzNmNzE4MH0sCisJezB4MDAwMGEyMzQsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhMjM4LCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTI0MCwgMHgzODQ5MGEyMH0sCisJezB4MDAwMGEyNDQsIDB4MDAwMDdiYjZ9LAorCXsweDAwMDBhMjQ4LCAweDBmZmYzZmZjfSwKKwl7MHgwMDAwYTI0YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyNTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMjU4LCAweDBjZGJkMzgwfSwKKwl7MHgwMDAwYTI1YywgMHgwZjBmMGYwMX0sCisJezB4MDAwMGEyNjAsIDB4ZGZhOTFmMDF9LAorCXsweDAwMDBhMjY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTI2YywgMHgwZTc5ZTVjNn0sCisJezB4MDAwMGIyNmMsIDB4MGU3OWU1YzZ9LAorCXsweDAwMDBkMjcwLCAweDAwODIwODIwfSwKKwl7MHgwMDAwYTI3OCwgMHgxY2U3MzljZX0sCisJezB4MDAwMGQzNWMsIDB4MDdmZmZmZWZ9LAorCXsweDAwMDBkMzYwLCAweDBmZmZmZmU3fSwKKwl7MHgwMDAwZDM2NCwgMHgxN2ZmZmZlNX0sCisJezB4MDAwMGQzNjgsIDB4MWZmZmZmZTR9LAorCXsweDAwMDBkMzZjLCAweDM3ZmZmZmUzfSwKKwl7MHgwMDAwZDM3MCwgMHgzZmZmZmZlM30sCisJezB4MDAwMGQzNzQsIDB4NTdmZmZmZTN9LAorCXsweDAwMDBkMzc4LCAweDVmZmZmZmUyfSwKKwl7MHgwMDAwZDM3YywgMHg3ZmZmZmZlMn0sCisJezB4MDAwMGQzODAsIDB4N2YzYzdiYmF9LAorCXsweDAwMDBkMzg0LCAweGYzMzA3ZmYwfSwKKwl7MHgwMDAwYTM4YywgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzOTAsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhMzk0LCAweDFjZTczOWNlfSwKKwl7MHgwMDAwYTM5OCwgMHgwMDAwMDFjZX0sCisJezB4MDAwMGEzOWMsIDB4MDAwMDAwMDF9LAorCXsweDAwMDBhM2EwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTNhNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzYTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2FjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTNiMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzYjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2I4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTNiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzYzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2M0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTNjOCwgMHgwMDAwMDI0Nn0sCisJezB4MDAwMGEzY2MsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2QwLCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTNkNCwgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzZGMsIDB4MWNlNzM5Y2V9LAorCXsweDAwMDBhM2UwLCAweDAwMDAwMWNlfSwKKwl7MHgwMDAwYTNlNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzZTgsIDB4MThjNDM0MzN9LAorCXsweDAwMDA3ODAwLCAweDAwMDQwMDAwfSwKKwl7MHgwMDAwNzgwNCwgMHhkYjAwNTAxMn0sCisJezB4MDAwMDc4MDgsIDB4MDQ5MjQ5MTR9LAorCXsweDAwMDA3ODBjLCAweDIxMDg0MjEwfSwKKwl7MHgwMDAwNzgxMCwgMHg2ZDgwMTMwMH0sCisJezB4MDAwMDc4MTgsIDB4MDdlNDEwMDB9LAorCXsweDAwMDA3ODI0LCAweDAwMDQwMDAwfSwKKwl7MHgwMDAwNzgyOCwgMHhkYjAwNTAxMn0sCisJezB4MDAwMDc4MmMsIDB4MDQ5MjQ5MTR9LAorCXsweDAwMDA3ODMwLCAweDIxMDg0MjEwfSwKKwl7MHgwMDAwNzgzNCwgMHg2ZDgwMTMwMH0sCisJezB4MDAwMDc4M2MsIDB4MDdlNDAwMDB9LAorCXsweDAwMDA3ODQ4LCAweDAwMTAwMDAwfSwKKwl7MHgwMDAwNzg0YywgMHg3NzNmMDU2N30sCisJezB4MDAwMDc4NTAsIDB4NTQyMTQ1MTR9LAorCXsweDAwMDA3ODU0LCAweDEyMDM1ODI4fSwKKwl7MHgwMDAwNzg1OCwgMHg5MjU5MjY5YX0sCisJezB4MDAwMDc4NjAsIDB4NTI4MDIwMDB9LAorCXsweDAwMDA3ODY0LCAweDBhOGUzNzBlfSwKKwl7MHgwMDAwNzg2OCwgMHhjMDEwMjg1MH0sCisJezB4MDAwMDc4NmMsIDB4ODEyZDQwMDB9LAorCXsweDAwMDA3ODcwLCAweDgwN2VjNDAwfSwKKwl7MHgwMDAwNzg3NCwgMHgwMDFiNmRiMH0sCisJezB4MDAwMDc4NzgsIDB4MDAzNzZiNjN9LAorCXsweDAwMDA3ODdjLCAweDA2ZGI2ZGI2fSwKKwl7MHgwMDAwNzg4MCwgMHgwMDZkODAwMH0sCisJezB4MDAwMDc4ODQsIDB4ZmZlZmZmZmV9LAorCXsweDAwMDA3ODg4LCAweGZmZWZmZmZlfSwKKwl7MHgwMDAwNzg4YywgMHgwMDAxMDAwMH0sCisJezB4MDAwMDc4OTAsIDB4MDIwNjBhZWJ9LAorCXsweDAwMDA3ODk4LCAweDJhODUwMTYwfSwKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgYXI5MjgwTW9kZXNfZmFzdF9jbG9ja185MjgwXzJbXVszXSA9IHsKLSAgICB7IDB4MDAwMDEwMzAsIDB4MDAwMDAyNjgsIDB4MDAwMDA0ZDAgfSwKLSAgICB7IDB4MDAwMDEwNzAsIDB4MDAwMDAxOGMsIDB4MDAwMDAzMTggfSwKLSAgICB7IDB4MDAwMDEwYjAsIDB4MDAwMDBmZDAsIDB4MDAwMDFmYTAgfSwKLSAgICB7IDB4MDAwMDgwMTQsIDB4MDQ0YzA0NGMsIDB4MDg5ODA4OTggfSwKLSAgICB7IDB4MDAwMDgwMWMsIDB4MTQ4ZWMwMmIsIDB4MTQ4ZWMwNTcgfSwKLSAgICB7IDB4MDAwMDgzMTgsIDB4MDAwMDQ0YzAsIDB4MDAwMDg5ODAgfSwKLSAgICB7IDB4MDAwMDk4MjAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAgfSwKLSAgICB7IDB4MDAwMDk4MjQsIDB4MDEwMDBmMGYsIDB4MDEwMDBmMGYgfSwKLSAgICB7IDB4MDAwMDk4MjgsIDB4MGIwMjAwMDEsIDB4MGIwMjAwMDEgfSwKLSAgICB7IDB4MDAwMDk4MzQsIDB4MDAwMDBmMGYsIDB4MDAwMDBmMGYgfSwKLSAgICB7IDB4MDAwMDk4NDQsIDB4MDM3MjE4MjEsIDB4MDM3MjE4MjEgfSwKLSAgICB7IDB4MDAwMDk5MTQsIDB4MDAwMDA4OTgsIDB4MDAwMDExMzAgfSwKLSAgICB7IDB4MDAwMDk5MTgsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMTYgfSwKKwkvKiBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICovCisJezB4MDAwMDEwMzAsIDB4MDAwMDAyNjgsIDB4MDAwMDA0ZDB9LAorCXsweDAwMDAxMDcwLCAweDAwMDAwMThjLCAweDAwMDAwMzE4fSwKKwl7MHgwMDAwMTBiMCwgMHgwMDAwMGZkMCwgMHgwMDAwMWZhMH0sCisJezB4MDAwMDgwMTQsIDB4MDQ0YzA0NGMsIDB4MDg5ODA4OTh9LAorCXsweDAwMDA4MDFjLCAweDE0OGVjMDJiLCAweDE0OGVjMDU3fSwKKwl7MHgwMDAwODMxOCwgMHgwMDAwNDRjMCwgMHgwMDAwODk4MH0sCisJezB4MDAwMDk4MjAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDB9LAorCXsweDAwMDA5ODI0LCAweDAxMDAwZjBmLCAweDAxMDAwZjBmfSwKKwl7MHgwMDAwOTgyOCwgMHgwYjAyMDAwMSwgMHgwYjAyMDAwMX0sCisJezB4MDAwMDk4MzQsIDB4MDAwMDBmMGYsIDB4MDAwMDBmMGZ9LAorCXsweDAwMDA5ODQ0LCAweDAzNzIxODIxLCAweDAzNzIxODIxfSwKKwl7MHgwMDAwOTkxNCwgMHgwMDAwMDg5OCwgMHgwMDAwMTEzMH0sCisJezB4MDAwMDk5MTgsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMTZ9LAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBhcjkyODBNb2Rlc19iYWNrb2ZmXzIzZGJfcnhnYWluXzkyODBfMltdWzZdID0gewotICAgIHsgMHgwMDAwOWEwMCwgMHgwMDAwODE4NCwgMHgwMDAwODE4NCwgMHgwMDAwMDI5MCwgMHgwMDAwMDI5MCwgMHgwMDAwMDI5MCB9LAotICAgIHsgMHgwMDAwOWEwNCwgMHgwMDAwODE4OCwgMHgwMDAwODE4OCwgMHgwMDAwMDMwMCwgMHgwMDAwMDMwMCwgMHgwMDAwMDMwMCB9LAotICAgIHsgMHgwMDAwOWEwOCwgMHgwMDAwODE4YywgMHgwMDAwODE4YywgMHgwMDAwMDMwNCwgMHgwMDAwMDMwNCwgMHgwMDAwMDMwNCB9LAotICAgIHsgMHgwMDAwOWEwYywgMHgwMDAwODE5MCwgMHgwMDAwODE5MCwgMHgwMDAwMDMwOCwgMHgwMDAwMDMwOCwgMHgwMDAwMDMwOCB9LAotICAgIHsgMHgwMDAwOWExMCwgMHgwMDAwODE5NCwgMHgwMDAwODE5NCwgMHgwMDAwMDMwYywgMHgwMDAwMDMwYywgMHgwMDAwMDMwYyB9LAotICAgIHsgMHgwMDAwOWExNCwgMHgwMDAwODIwMCwgMHgwMDAwODIwMCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCB9LAotICAgIHsgMHgwMDAwOWExOCwgMHgwMDAwODIwNCwgMHgwMDAwODIwNCwgMHgwMDAwODAwNCwgMHgwMDAwODAwNCwgMHgwMDAwODAwNCB9LAotICAgIHsgMHgwMDAwOWExYywgMHgwMDAwODIwOCwgMHgwMDAwODIwOCwgMHgwMDAwODAwOCwgMHgwMDAwODAwOCwgMHgwMDAwODAwOCB9LAotICAgIHsgMHgwMDAwOWEyMCwgMHgwMDAwODIwYywgMHgwMDAwODIwYywgMHgwMDAwODAwYywgMHgwMDAwODAwYywgMHgwMDAwODAwYyB9LAotICAgIHsgMHgwMDAwOWEyNCwgMHgwMDAwODIxMCwgMHgwMDAwODIxMCwgMHgwMDAwODA4MCwgMHgwMDAwODA4MCwgMHgwMDAwODA4MCB9LAotICAgIHsgMHgwMDAwOWEyOCwgMHgwMDAwODIxNCwgMHgwMDAwODIxNCwgMHgwMDAwODA4NCwgMHgwMDAwODA4NCwgMHgwMDAwODA4NCB9LAotICAgIHsgMHgwMDAwOWEyYywgMHgwMDAwODI4MCwgMHgwMDAwODI4MCwgMHgwMDAwODA4OCwgMHgwMDAwODA4OCwgMHgwMDAwODA4OCB9LAotICAgIHsgMHgwMDAwOWEzMCwgMHgwMDAwODI4NCwgMHgwMDAwODI4NCwgMHgwMDAwODA4YywgMHgwMDAwODA4YywgMHgwMDAwODA4YyB9LAotICAgIHsgMHgwMDAwOWEzNCwgMHgwMDAwODI4OCwgMHgwMDAwODI4OCwgMHgwMDAwODEwMCwgMHgwMDAwODEwMCwgMHgwMDAwODEwMCB9LAotICAgIHsgMHgwMDAwOWEzOCwgMHgwMDAwODI4YywgMHgwMDAwODI4YywgMHgwMDAwODEwNCwgMHgwMDAwODEwNCwgMHgwMDAwODEwNCB9LAotICAgIHsgMHgwMDAwOWEzYywgMHgwMDAwODI5MCwgMHgwMDAwODI5MCwgMHgwMDAwODEwOCwgMHgwMDAwODEwOCwgMHgwMDAwODEwOCB9LAotICAgIHsgMHgwMDAwOWE0MCwgMHgwMDAwODMwMCwgMHgwMDAwODMwMCwgMHgwMDAwODEwYywgMHgwMDAwODEwYywgMHgwMDAwODEwYyB9LAotICAgIHsgMHgwMDAwOWE0NCwgMHgwMDAwODMwNCwgMHgwMDAwODMwNCwgMHgwMDAwODExMCwgMHgwMDAwODExMCwgMHgwMDAwODExMCB9LAotICAgIHsgMHgwMDAwOWE0OCwgMHgwMDAwODMwOCwgMHgwMDAwODMwOCwgMHgwMDAwODExNCwgMHgwMDAwODExNCwgMHgwMDAwODExNCB9LAotICAgIHsgMHgwMDAwOWE0YywgMHgwMDAwODMwYywgMHgwMDAwODMwYywgMHgwMDAwODE4MCwgMHgwMDAwODE4MCwgMHgwMDAwODE4MCB9LAotICAgIHsgMHgwMDAwOWE1MCwgMHgwMDAwODMxMCwgMHgwMDAwODMxMCwgMHgwMDAwODE4NCwgMHgwMDAwODE4NCwgMHgwMDAwODE4NCB9LAotICAgIHsgMHgwMDAwOWE1NCwgMHgwMDAwODMxNCwgMHgwMDAwODMxNCwgMHgwMDAwODE4OCwgMHgwMDAwODE4OCwgMHgwMDAwODE4OCB9LAotICAgIHsgMHgwMDAwOWE1OCwgMHgwMDAwODM4MCwgMHgwMDAwODM4MCwgMHgwMDAwODE4YywgMHgwMDAwODE4YywgMHgwMDAwODE4YyB9LAotICAgIHsgMHgwMDAwOWE1YywgMHgwMDAwODM4NCwgMHgwMDAwODM4NCwgMHgwMDAwODE5MCwgMHgwMDAwODE5MCwgMHgwMDAwODE5MCB9LAotICAgIHsgMHgwMDAwOWE2MCwgMHgwMDAwODM4OCwgMHgwMDAwODM4OCwgMHgwMDAwODE5NCwgMHgwMDAwODE5NCwgMHgwMDAwODE5NCB9LAotICAgIHsgMHgwMDAwOWE2NCwgMHgwMDAwODM4YywgMHgwMDAwODM4YywgMHgwMDAwODFhMCwgMHgwMDAwODFhMCwgMHgwMDAwODFhMCB9LAotICAgIHsgMHgwMDAwOWE2OCwgMHgwMDAwODM5MCwgMHgwMDAwODM5MCwgMHgwMDAwODIwYywgMHgwMDAwODIwYywgMHgwMDAwODIwYyB9LAotICAgIHsgMHgwMDAwOWE2YywgMHgwMDAwODM5NCwgMHgwMDAwODM5NCwgMHgwMDAwODFhOCwgMHgwMDAwODFhOCwgMHgwMDAwODFhOCB9LAotICAgIHsgMHgwMDAwOWE3MCwgMHgwMDAwYTM4MCwgMHgwMDAwYTM4MCwgMHgwMDAwODI4NCwgMHgwMDAwODI4NCwgMHgwMDAwODI4NCB9LAotICAgIHsgMHgwMDAwOWE3NCwgMHgwMDAwYTM4NCwgMHgwMDAwYTM4NCwgMHgwMDAwODI4OCwgMHgwMDAwODI4OCwgMHgwMDAwODI4OCB9LAotICAgIHsgMHgwMDAwOWE3OCwgMHgwMDAwYTM4OCwgMHgwMDAwYTM4OCwgMHgwMDAwODIyNCwgMHgwMDAwODIyNCwgMHgwMDAwODIyNCB9LAotICAgIHsgMHgwMDAwOWE3YywgMHgwMDAwYTM4YywgMHgwMDAwYTM4YywgMHgwMDAwODI5MCwgMHgwMDAwODI5MCwgMHgwMDAwODI5MCB9LAotICAgIHsgMHgwMDAwOWE4MCwgMHgwMDAwYTM5MCwgMHgwMDAwYTM5MCwgMHgwMDAwODMwMCwgMHgwMDAwODMwMCwgMHgwMDAwODMwMCB9LAotICAgIHsgMHgwMDAwOWE4NCwgMHgwMDAwYTM5NCwgMHgwMDAwYTM5NCwgMHgwMDAwODMwNCwgMHgwMDAwODMwNCwgMHgwMDAwODMwNCB9LAotICAgIHsgMHgwMDAwOWE4OCwgMHgwMDAwYTc4MCwgMHgwMDAwYTc4MCwgMHgwMDAwODMwOCwgMHgwMDAwODMwOCwgMHgwMDAwODMwOCB9LAotICAgIHsgMHgwMDAwOWE4YywgMHgwMDAwYTc4NCwgMHgwMDAwYTc4NCwgMHgwMDAwODMwYywgMHgwMDAwODMwYywgMHgwMDAwODMwYyB9LAotICAgIHsgMHgwMDAwOWE5MCwgMHgwMDAwYTc4OCwgMHgwMDAwYTc4OCwgMHgwMDAwODM4MCwgMHgwMDAwODM4MCwgMHgwMDAwODM4MCB9LAotICAgIHsgMHgwMDAwOWE5NCwgMHgwMDAwYTc4YywgMHgwMDAwYTc4YywgMHgwMDAwODM4NCwgMHgwMDAwODM4NCwgMHgwMDAwODM4NCB9LAotICAgIHsgMHgwMDAwOWE5OCwgMHgwMDAwYTc5MCwgMHgwMDAwYTc5MCwgMHgwMDAwODcwMCwgMHgwMDAwODcwMCwgMHgwMDAwODcwMCB9LAotICAgIHsgMHgwMDAwOWE5YywgMHgwMDAwYTc5NCwgMHgwMDAwYTc5NCwgMHgwMDAwODcwNCwgMHgwMDAwODcwNCwgMHgwMDAwODcwNCB9LAotICAgIHsgMHgwMDAwOWFhMCwgMHgwMDAwYWI4NCwgMHgwMDAwYWI4NCwgMHgwMDAwODcwOCwgMHgwMDAwODcwOCwgMHgwMDAwODcwOCB9LAotICAgIHsgMHgwMDAwOWFhNCwgMHgwMDAwYWI4OCwgMHgwMDAwYWI4OCwgMHgwMDAwODcwYywgMHgwMDAwODcwYywgMHgwMDAwODcwYyB9LAotICAgIHsgMHgwMDAwOWFhOCwgMHgwMDAwYWI4YywgMHgwMDAwYWI4YywgMHgwMDAwODc4MCwgMHgwMDAwODc4MCwgMHgwMDAwODc4MCB9LAotICAgIHsgMHgwMDAwOWFhYywgMHgwMDAwYWI5MCwgMHgwMDAwYWI5MCwgMHgwMDAwODc4NCwgMHgwMDAwODc4NCwgMHgwMDAwODc4NCB9LAotICAgIHsgMHgwMDAwOWFiMCwgMHgwMDAwYWI5NCwgMHgwMDAwYWI5NCwgMHgwMDAwOGIwMCwgMHgwMDAwOGIwMCwgMHgwMDAwOGIwMCB9LAotICAgIHsgMHgwMDAwOWFiNCwgMHgwMDAwYWY4MCwgMHgwMDAwYWY4MCwgMHgwMDAwOGIwNCwgMHgwMDAwOGIwNCwgMHgwMDAwOGIwNCB9LAotICAgIHsgMHgwMDAwOWFiOCwgMHgwMDAwYWY4NCwgMHgwMDAwYWY4NCwgMHgwMDAwOGIwOCwgMHgwMDAwOGIwOCwgMHgwMDAwOGIwOCB9LAotICAgIHsgMHgwMDAwOWFiYywgMHgwMDAwYWY4OCwgMHgwMDAwYWY4OCwgMHgwMDAwOGIwYywgMHgwMDAwOGIwYywgMHgwMDAwOGIwYyB9LAotICAgIHsgMHgwMDAwOWFjMCwgMHgwMDAwYWY4YywgMHgwMDAwYWY4YywgMHgwMDAwOGIxMCwgMHgwMDAwOGIxMCwgMHgwMDAwOGIxMCB9LAotICAgIHsgMHgwMDAwOWFjNCwgMHgwMDAwYWY5MCwgMHgwMDAwYWY5MCwgMHgwMDAwOGIxNCwgMHgwMDAwOGIxNCwgMHgwMDAwOGIxNCB9LAotICAgIHsgMHgwMDAwOWFjOCwgMHgwMDAwYWY5NCwgMHgwMDAwYWY5NCwgMHgwMDAwOGIwMSwgMHgwMDAwOGIwMSwgMHgwMDAwOGIwMSB9LAotICAgIHsgMHgwMDAwOWFjYywgMHgwMDAwYjM4MCwgMHgwMDAwYjM4MCwgMHgwMDAwOGIwNSwgMHgwMDAwOGIwNSwgMHgwMDAwOGIwNSB9LAotICAgIHsgMHgwMDAwOWFkMCwgMHgwMDAwYjM4NCwgMHgwMDAwYjM4NCwgMHgwMDAwOGIwOSwgMHgwMDAwOGIwOSwgMHgwMDAwOGIwOSB9LAotICAgIHsgMHgwMDAwOWFkNCwgMHgwMDAwYjM4OCwgMHgwMDAwYjM4OCwgMHgwMDAwOGIwZCwgMHgwMDAwOGIwZCwgMHgwMDAwOGIwZCB9LAotICAgIHsgMHgwMDAwOWFkOCwgMHgwMDAwYjM4YywgMHgwMDAwYjM4YywgMHgwMDAwOGIxMSwgMHgwMDAwOGIxMSwgMHgwMDAwOGIxMSB9LAotICAgIHsgMHgwMDAwOWFkYywgMHgwMDAwYjM5MCwgMHgwMDAwYjM5MCwgMHgwMDAwOGIxNSwgMHgwMDAwOGIxNSwgMHgwMDAwOGIxNSB9LAotICAgIHsgMHgwMDAwOWFlMCwgMHgwMDAwYjM5NCwgMHgwMDAwYjM5NCwgMHgwMDAwOGIwMiwgMHgwMDAwOGIwMiwgMHgwMDAwOGIwMiB9LAotICAgIHsgMHgwMDAwOWFlNCwgMHgwMDAwYjM5OCwgMHgwMDAwYjM5OCwgMHgwMDAwOGIwNiwgMHgwMDAwOGIwNiwgMHgwMDAwOGIwNiB9LAotICAgIHsgMHgwMDAwOWFlOCwgMHgwMDAwYjc4MCwgMHgwMDAwYjc4MCwgMHgwMDAwOGIwYSwgMHgwMDAwOGIwYSwgMHgwMDAwOGIwYSB9LAotICAgIHsgMHgwMDAwOWFlYywgMHgwMDAwYjc4NCwgMHgwMDAwYjc4NCwgMHgwMDAwOGIwZSwgMHgwMDAwOGIwZSwgMHgwMDAwOGIwZSB9LAotICAgIHsgMHgwMDAwOWFmMCwgMHgwMDAwYjc4OCwgMHgwMDAwYjc4OCwgMHgwMDAwOGIxMiwgMHgwMDAwOGIxMiwgMHgwMDAwOGIxMiB9LAotICAgIHsgMHgwMDAwOWFmNCwgMHgwMDAwYjc4YywgMHgwMDAwYjc4YywgMHgwMDAwOGIxNiwgMHgwMDAwOGIxNiwgMHgwMDAwOGIxNiB9LAotICAgIHsgMHgwMDAwOWFmOCwgMHgwMDAwYjc5MCwgMHgwMDAwYjc5MCwgMHgwMDAwOGIwMywgMHgwMDAwOGIwMywgMHgwMDAwOGIwMyB9LAotICAgIHsgMHgwMDAwOWFmYywgMHgwMDAwYjc5NCwgMHgwMDAwYjc5NCwgMHgwMDAwOGIwNywgMHgwMDAwOGIwNywgMHgwMDAwOGIwNyB9LAotICAgIHsgMHgwMDAwOWIwMCwgMHgwMDAwYjc5OCwgMHgwMDAwYjc5OCwgMHgwMDAwOGIwYiwgMHgwMDAwOGIwYiwgMHgwMDAwOGIwYiB9LAotICAgIHsgMHgwMDAwOWIwNCwgMHgwMDAwZDc4NCwgMHgwMDAwZDc4NCwgMHgwMDAwOGIwZiwgMHgwMDAwOGIwZiwgMHgwMDAwOGIwZiB9LAotICAgIHsgMHgwMDAwOWIwOCwgMHgwMDAwZDc4OCwgMHgwMDAwZDc4OCwgMHgwMDAwOGIxMywgMHgwMDAwOGIxMywgMHgwMDAwOGIxMyB9LAotICAgIHsgMHgwMDAwOWIwYywgMHgwMDAwZDc4YywgMHgwMDAwZDc4YywgMHgwMDAwOGIxNywgMHgwMDAwOGIxNywgMHgwMDAwOGIxNyB9LAotICAgIHsgMHgwMDAwOWIxMCwgMHgwMDAwZDc5MCwgMHgwMDAwZDc5MCwgMHgwMDAwOGIyMywgMHgwMDAwOGIyMywgMHgwMDAwOGIyMyB9LAotICAgIHsgMHgwMDAwOWIxNCwgMHgwMDAwZjc4MCwgMHgwMDAwZjc4MCwgMHgwMDAwOGIyNywgMHgwMDAwOGIyNywgMHgwMDAwOGIyNyB9LAotICAgIHsgMHgwMDAwOWIxOCwgMHgwMDAwZjc4NCwgMHgwMDAwZjc4NCwgMHgwMDAwOGIyYiwgMHgwMDAwOGIyYiwgMHgwMDAwOGIyYiB9LAotICAgIHsgMHgwMDAwOWIxYywgMHgwMDAwZjc4OCwgMHgwMDAwZjc4OCwgMHgwMDAwOGIyZiwgMHgwMDAwOGIyZiwgMHgwMDAwOGIyZiB9LAotICAgIHsgMHgwMDAwOWIyMCwgMHgwMDAwZjc4YywgMHgwMDAwZjc4YywgMHgwMDAwOGIzMywgMHgwMDAwOGIzMywgMHgwMDAwOGIzMyB9LAotICAgIHsgMHgwMDAwOWIyNCwgMHgwMDAwZjc5MCwgMHgwMDAwZjc5MCwgMHgwMDAwOGIzNywgMHgwMDAwOGIzNywgMHgwMDAwOGIzNyB9LAotICAgIHsgMHgwMDAwOWIyOCwgMHgwMDAwZjc5NCwgMHgwMDAwZjc5NCwgMHgwMDAwOGI0MywgMHgwMDAwOGI0MywgMHgwMDAwOGI0MyB9LAotICAgIHsgMHgwMDAwOWIyYywgMHgwMDAwZjdhNCwgMHgwMDAwZjdhNCwgMHgwMDAwOGI0NywgMHgwMDAwOGI0NywgMHgwMDAwOGI0NyB9LAotICAgIHsgMHgwMDAwOWIzMCwgMHgwMDAwZjdhOCwgMHgwMDAwZjdhOCwgMHgwMDAwOGI0YiwgMHgwMDAwOGI0YiwgMHgwMDAwOGI0YiB9LAotICAgIHsgMHgwMDAwOWIzNCwgMHgwMDAwZjdhYywgMHgwMDAwZjdhYywgMHgwMDAwOGI0ZiwgMHgwMDAwOGI0ZiwgMHgwMDAwOGI0ZiB9LAotICAgIHsgMHgwMDAwOWIzOCwgMHgwMDAwZjdiMCwgMHgwMDAwZjdiMCwgMHgwMDAwOGI1MywgMHgwMDAwOGI1MywgMHgwMDAwOGI1MyB9LAotICAgIHsgMHgwMDAwOWIzYywgMHgwMDAwZjdiNCwgMHgwMDAwZjdiNCwgMHgwMDAwOGI1NywgMHgwMDAwOGI1NywgMHgwMDAwOGI1NyB9LAotICAgIHsgMHgwMDAwOWI0MCwgMHgwMDAwZjdhMSwgMHgwMDAwZjdhMSwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWI0NCwgMHgwMDAwZjdhNSwgMHgwMDAwZjdhNSwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWI0OCwgMHgwMDAwZjdhOSwgMHgwMDAwZjdhOSwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWI0YywgMHgwMDAwZjdhZCwgMHgwMDAwZjdhZCwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWI1MCwgMHgwMDAwZjdiMSwgMHgwMDAwZjdiMSwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWI1NCwgMHgwMDAwZjdiNSwgMHgwMDAwZjdiNSwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWI1OCwgMHgwMDAwZjdjNSwgMHgwMDAwZjdjNSwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWI1YywgMHgwMDAwZjdjOSwgMHgwMDAwZjdjOSwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWI2MCwgMHgwMDAwZjdjZCwgMHgwMDAwZjdjZCwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWI2NCwgMHgwMDAwZjdkMSwgMHgwMDAwZjdkMSwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWI2OCwgMHgwMDAwZjdkNSwgMHgwMDAwZjdkNSwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWI2YywgMHgwMDAwZjdjMiwgMHgwMDAwZjdjMiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWI3MCwgMHgwMDAwZjdjNiwgMHgwMDAwZjdjNiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWI3NCwgMHgwMDAwZjdjYSwgMHgwMDAwZjdjYSwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWI3OCwgMHgwMDAwZjdjZSwgMHgwMDAwZjdjZSwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWI3YywgMHgwMDAwZjdkMiwgMHgwMDAwZjdkMiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWI4MCwgMHgwMDAwZjdkNiwgMHgwMDAwZjdkNiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWI4NCwgMHgwMDAwZjdjMywgMHgwMDAwZjdjMywgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWI4OCwgMHgwMDAwZjdjNywgMHgwMDAwZjdjNywgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWI4YywgMHgwMDAwZjdjYiwgMHgwMDAwZjdjYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWI5MCwgMHgwMDAwZjdkMywgMHgwMDAwZjdkMywgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWI5NCwgMHgwMDAwZjdkNywgMHgwMDAwZjdkNywgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWI5OCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWI5YywgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWJhMCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWJhNCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWJhOCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWJhYywgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWJiMCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWJiNCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWJiOCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWJiYywgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWJjMCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWJjNCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWJjOCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWJjYywgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWJkMCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWJkNCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWJkOCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWJkYywgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWJlMCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWJlNCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWJlOCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWJlYywgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWJmMCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWJmNCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWJmOCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOWJmYywgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiwgMHgwMDAwOGI1YiB9LAotICAgIHsgMHgwMDAwOTg0OCwgMHgwMDAwMTA2NiwgMHgwMDAwMTA2NiwgMHgwMDAwMTA1MCwgMHgwMDAwMTA1MCwgMHgwMDAwMTA1MCB9LAotICAgIHsgMHgwMDAwYTg0OCwgMHgwMDAwMTA2NiwgMHgwMDAwMTA2NiwgMHgwMDAwMTA1MCwgMHgwMDAwMTA1MCwgMHgwMDAwMTA1MCB9LAorCXsweDAwMDA5YTAwLCAweDAwMDA4MTg0LCAweDAwMDA4MTg0LCAweDAwMDAwMjkwLCAweDAwMDAwMjkwLCAweDAwMDAwMjkwfSwKKwl7MHgwMDAwOWEwNCwgMHgwMDAwODE4OCwgMHgwMDAwODE4OCwgMHgwMDAwMDMwMCwgMHgwMDAwMDMwMCwgMHgwMDAwMDMwMH0sCisJezB4MDAwMDlhMDgsIDB4MDAwMDgxOGMsIDB4MDAwMDgxOGMsIDB4MDAwMDAzMDQsIDB4MDAwMDAzMDQsIDB4MDAwMDAzMDR9LAorCXsweDAwMDA5YTBjLCAweDAwMDA4MTkwLCAweDAwMDA4MTkwLCAweDAwMDAwMzA4LCAweDAwMDAwMzA4LCAweDAwMDAwMzA4fSwKKwl7MHgwMDAwOWExMCwgMHgwMDAwODE5NCwgMHgwMDAwODE5NCwgMHgwMDAwMDMwYywgMHgwMDAwMDMwYywgMHgwMDAwMDMwY30sCisJezB4MDAwMDlhMTQsIDB4MDAwMDgyMDAsIDB4MDAwMDgyMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDB9LAorCXsweDAwMDA5YTE4LCAweDAwMDA4MjA0LCAweDAwMDA4MjA0LCAweDAwMDA4MDA0LCAweDAwMDA4MDA0LCAweDAwMDA4MDA0fSwKKwl7MHgwMDAwOWExYywgMHgwMDAwODIwOCwgMHgwMDAwODIwOCwgMHgwMDAwODAwOCwgMHgwMDAwODAwOCwgMHgwMDAwODAwOH0sCisJezB4MDAwMDlhMjAsIDB4MDAwMDgyMGMsIDB4MDAwMDgyMGMsIDB4MDAwMDgwMGMsIDB4MDAwMDgwMGMsIDB4MDAwMDgwMGN9LAorCXsweDAwMDA5YTI0LCAweDAwMDA4MjEwLCAweDAwMDA4MjEwLCAweDAwMDA4MDgwLCAweDAwMDA4MDgwLCAweDAwMDA4MDgwfSwKKwl7MHgwMDAwOWEyOCwgMHgwMDAwODIxNCwgMHgwMDAwODIxNCwgMHgwMDAwODA4NCwgMHgwMDAwODA4NCwgMHgwMDAwODA4NH0sCisJezB4MDAwMDlhMmMsIDB4MDAwMDgyODAsIDB4MDAwMDgyODAsIDB4MDAwMDgwODgsIDB4MDAwMDgwODgsIDB4MDAwMDgwODh9LAorCXsweDAwMDA5YTMwLCAweDAwMDA4Mjg0LCAweDAwMDA4Mjg0LCAweDAwMDA4MDhjLCAweDAwMDA4MDhjLCAweDAwMDA4MDhjfSwKKwl7MHgwMDAwOWEzNCwgMHgwMDAwODI4OCwgMHgwMDAwODI4OCwgMHgwMDAwODEwMCwgMHgwMDAwODEwMCwgMHgwMDAwODEwMH0sCisJezB4MDAwMDlhMzgsIDB4MDAwMDgyOGMsIDB4MDAwMDgyOGMsIDB4MDAwMDgxMDQsIDB4MDAwMDgxMDQsIDB4MDAwMDgxMDR9LAorCXsweDAwMDA5YTNjLCAweDAwMDA4MjkwLCAweDAwMDA4MjkwLCAweDAwMDA4MTA4LCAweDAwMDA4MTA4LCAweDAwMDA4MTA4fSwKKwl7MHgwMDAwOWE0MCwgMHgwMDAwODMwMCwgMHgwMDAwODMwMCwgMHgwMDAwODEwYywgMHgwMDAwODEwYywgMHgwMDAwODEwY30sCisJezB4MDAwMDlhNDQsIDB4MDAwMDgzMDQsIDB4MDAwMDgzMDQsIDB4MDAwMDgxMTAsIDB4MDAwMDgxMTAsIDB4MDAwMDgxMTB9LAorCXsweDAwMDA5YTQ4LCAweDAwMDA4MzA4LCAweDAwMDA4MzA4LCAweDAwMDA4MTE0LCAweDAwMDA4MTE0LCAweDAwMDA4MTE0fSwKKwl7MHgwMDAwOWE0YywgMHgwMDAwODMwYywgMHgwMDAwODMwYywgMHgwMDAwODE4MCwgMHgwMDAwODE4MCwgMHgwMDAwODE4MH0sCisJezB4MDAwMDlhNTAsIDB4MDAwMDgzMTAsIDB4MDAwMDgzMTAsIDB4MDAwMDgxODQsIDB4MDAwMDgxODQsIDB4MDAwMDgxODR9LAorCXsweDAwMDA5YTU0LCAweDAwMDA4MzE0LCAweDAwMDA4MzE0LCAweDAwMDA4MTg4LCAweDAwMDA4MTg4LCAweDAwMDA4MTg4fSwKKwl7MHgwMDAwOWE1OCwgMHgwMDAwODM4MCwgMHgwMDAwODM4MCwgMHgwMDAwODE4YywgMHgwMDAwODE4YywgMHgwMDAwODE4Y30sCisJezB4MDAwMDlhNWMsIDB4MDAwMDgzODQsIDB4MDAwMDgzODQsIDB4MDAwMDgxOTAsIDB4MDAwMDgxOTAsIDB4MDAwMDgxOTB9LAorCXsweDAwMDA5YTYwLCAweDAwMDA4Mzg4LCAweDAwMDA4Mzg4LCAweDAwMDA4MTk0LCAweDAwMDA4MTk0LCAweDAwMDA4MTk0fSwKKwl7MHgwMDAwOWE2NCwgMHgwMDAwODM4YywgMHgwMDAwODM4YywgMHgwMDAwODFhMCwgMHgwMDAwODFhMCwgMHgwMDAwODFhMH0sCisJezB4MDAwMDlhNjgsIDB4MDAwMDgzOTAsIDB4MDAwMDgzOTAsIDB4MDAwMDgyMGMsIDB4MDAwMDgyMGMsIDB4MDAwMDgyMGN9LAorCXsweDAwMDA5YTZjLCAweDAwMDA4Mzk0LCAweDAwMDA4Mzk0LCAweDAwMDA4MWE4LCAweDAwMDA4MWE4LCAweDAwMDA4MWE4fSwKKwl7MHgwMDAwOWE3MCwgMHgwMDAwYTM4MCwgMHgwMDAwYTM4MCwgMHgwMDAwODI4NCwgMHgwMDAwODI4NCwgMHgwMDAwODI4NH0sCisJezB4MDAwMDlhNzQsIDB4MDAwMGEzODQsIDB4MDAwMGEzODQsIDB4MDAwMDgyODgsIDB4MDAwMDgyODgsIDB4MDAwMDgyODh9LAorCXsweDAwMDA5YTc4LCAweDAwMDBhMzg4LCAweDAwMDBhMzg4LCAweDAwMDA4MjI0LCAweDAwMDA4MjI0LCAweDAwMDA4MjI0fSwKKwl7MHgwMDAwOWE3YywgMHgwMDAwYTM4YywgMHgwMDAwYTM4YywgMHgwMDAwODI5MCwgMHgwMDAwODI5MCwgMHgwMDAwODI5MH0sCisJezB4MDAwMDlhODAsIDB4MDAwMGEzOTAsIDB4MDAwMGEzOTAsIDB4MDAwMDgzMDAsIDB4MDAwMDgzMDAsIDB4MDAwMDgzMDB9LAorCXsweDAwMDA5YTg0LCAweDAwMDBhMzk0LCAweDAwMDBhMzk0LCAweDAwMDA4MzA0LCAweDAwMDA4MzA0LCAweDAwMDA4MzA0fSwKKwl7MHgwMDAwOWE4OCwgMHgwMDAwYTc4MCwgMHgwMDAwYTc4MCwgMHgwMDAwODMwOCwgMHgwMDAwODMwOCwgMHgwMDAwODMwOH0sCisJezB4MDAwMDlhOGMsIDB4MDAwMGE3ODQsIDB4MDAwMGE3ODQsIDB4MDAwMDgzMGMsIDB4MDAwMDgzMGMsIDB4MDAwMDgzMGN9LAorCXsweDAwMDA5YTkwLCAweDAwMDBhNzg4LCAweDAwMDBhNzg4LCAweDAwMDA4MzgwLCAweDAwMDA4MzgwLCAweDAwMDA4MzgwfSwKKwl7MHgwMDAwOWE5NCwgMHgwMDAwYTc4YywgMHgwMDAwYTc4YywgMHgwMDAwODM4NCwgMHgwMDAwODM4NCwgMHgwMDAwODM4NH0sCisJezB4MDAwMDlhOTgsIDB4MDAwMGE3OTAsIDB4MDAwMGE3OTAsIDB4MDAwMDg3MDAsIDB4MDAwMDg3MDAsIDB4MDAwMDg3MDB9LAorCXsweDAwMDA5YTljLCAweDAwMDBhNzk0LCAweDAwMDBhNzk0LCAweDAwMDA4NzA0LCAweDAwMDA4NzA0LCAweDAwMDA4NzA0fSwKKwl7MHgwMDAwOWFhMCwgMHgwMDAwYWI4NCwgMHgwMDAwYWI4NCwgMHgwMDAwODcwOCwgMHgwMDAwODcwOCwgMHgwMDAwODcwOH0sCisJezB4MDAwMDlhYTQsIDB4MDAwMGFiODgsIDB4MDAwMGFiODgsIDB4MDAwMDg3MGMsIDB4MDAwMDg3MGMsIDB4MDAwMDg3MGN9LAorCXsweDAwMDA5YWE4LCAweDAwMDBhYjhjLCAweDAwMDBhYjhjLCAweDAwMDA4NzgwLCAweDAwMDA4NzgwLCAweDAwMDA4NzgwfSwKKwl7MHgwMDAwOWFhYywgMHgwMDAwYWI5MCwgMHgwMDAwYWI5MCwgMHgwMDAwODc4NCwgMHgwMDAwODc4NCwgMHgwMDAwODc4NH0sCisJezB4MDAwMDlhYjAsIDB4MDAwMGFiOTQsIDB4MDAwMGFiOTQsIDB4MDAwMDhiMDAsIDB4MDAwMDhiMDAsIDB4MDAwMDhiMDB9LAorCXsweDAwMDA5YWI0LCAweDAwMDBhZjgwLCAweDAwMDBhZjgwLCAweDAwMDA4YjA0LCAweDAwMDA4YjA0LCAweDAwMDA4YjA0fSwKKwl7MHgwMDAwOWFiOCwgMHgwMDAwYWY4NCwgMHgwMDAwYWY4NCwgMHgwMDAwOGIwOCwgMHgwMDAwOGIwOCwgMHgwMDAwOGIwOH0sCisJezB4MDAwMDlhYmMsIDB4MDAwMGFmODgsIDB4MDAwMGFmODgsIDB4MDAwMDhiMGMsIDB4MDAwMDhiMGMsIDB4MDAwMDhiMGN9LAorCXsweDAwMDA5YWMwLCAweDAwMDBhZjhjLCAweDAwMDBhZjhjLCAweDAwMDA4YjEwLCAweDAwMDA4YjEwLCAweDAwMDA4YjEwfSwKKwl7MHgwMDAwOWFjNCwgMHgwMDAwYWY5MCwgMHgwMDAwYWY5MCwgMHgwMDAwOGI4MCwgMHgwMDAwOGI4MCwgMHgwMDAwOGI4MH0sCisJezB4MDAwMDlhYzgsIDB4MDAwMGFmOTQsIDB4MDAwMGFmOTQsIDB4MDAwMDhiODQsIDB4MDAwMDhiODQsIDB4MDAwMDhiODR9LAorCXsweDAwMDA5YWNjLCAweDAwMDBiMzgwLCAweDAwMDBiMzgwLCAweDAwMDA4Yjg4LCAweDAwMDA4Yjg4LCAweDAwMDA4Yjg4fSwKKwl7MHgwMDAwOWFkMCwgMHgwMDAwYjM4NCwgMHgwMDAwYjM4NCwgMHgwMDAwOGI4YywgMHgwMDAwOGI4YywgMHgwMDAwOGI4Y30sCisJezB4MDAwMDlhZDQsIDB4MDAwMGIzODgsIDB4MDAwMGIzODgsIDB4MDAwMDhiOTAsIDB4MDAwMDhiOTAsIDB4MDAwMDhiOTB9LAorCXsweDAwMDA5YWQ4LCAweDAwMDBiMzhjLCAweDAwMDBiMzhjLCAweDAwMDA4Yjk0LCAweDAwMDA4Yjk0LCAweDAwMDA4Yjk0fSwKKwl7MHgwMDAwOWFkYywgMHgwMDAwYjM5MCwgMHgwMDAwYjM5MCwgMHgwMDAwOGI5OCwgMHgwMDAwOGI5OCwgMHgwMDAwOGI5OH0sCisJezB4MDAwMDlhZTAsIDB4MDAwMGIzOTQsIDB4MDAwMGIzOTQsIDB4MDAwMDhiYTQsIDB4MDAwMDhiYTQsIDB4MDAwMDhiYTR9LAorCXsweDAwMDA5YWU0LCAweDAwMDBiMzk4LCAweDAwMDBiMzk4LCAweDAwMDA4YmE4LCAweDAwMDA4YmE4LCAweDAwMDA4YmE4fSwKKwl7MHgwMDAwOWFlOCwgMHgwMDAwYjc4MCwgMHgwMDAwYjc4MCwgMHgwMDAwOGJhYywgMHgwMDAwOGJhYywgMHgwMDAwOGJhY30sCisJezB4MDAwMDlhZWMsIDB4MDAwMGI3ODQsIDB4MDAwMGI3ODQsIDB4MDAwMDhiYjAsIDB4MDAwMDhiYjAsIDB4MDAwMDhiYjB9LAorCXsweDAwMDA5YWYwLCAweDAwMDBiNzg4LCAweDAwMDBiNzg4LCAweDAwMDA4YmI0LCAweDAwMDA4YmI0LCAweDAwMDA4YmI0fSwKKwl7MHgwMDAwOWFmNCwgMHgwMDAwYjc4YywgMHgwMDAwYjc4YywgMHgwMDAwOGJhMSwgMHgwMDAwOGJhMSwgMHgwMDAwOGJhMX0sCisJezB4MDAwMDlhZjgsIDB4MDAwMGI3OTAsIDB4MDAwMGI3OTAsIDB4MDAwMDhiYTUsIDB4MDAwMDhiYTUsIDB4MDAwMDhiYTV9LAorCXsweDAwMDA5YWZjLCAweDAwMDBiNzk0LCAweDAwMDBiNzk0LCAweDAwMDA4YmE5LCAweDAwMDA4YmE5LCAweDAwMDA4YmE5fSwKKwl7MHgwMDAwOWIwMCwgMHgwMDAwYjc5OCwgMHgwMDAwYjc5OCwgMHgwMDAwOGJhZCwgMHgwMDAwOGJhZCwgMHgwMDAwOGJhZH0sCisJezB4MDAwMDliMDQsIDB4MDAwMGQ3ODQsIDB4MDAwMGQ3ODQsIDB4MDAwMDhiYjEsIDB4MDAwMDhiYjEsIDB4MDAwMDhiYjF9LAorCXsweDAwMDA5YjA4LCAweDAwMDBkNzg4LCAweDAwMDBkNzg4LCAweDAwMDA4YmI1LCAweDAwMDA4YmI1LCAweDAwMDA4YmI1fSwKKwl7MHgwMDAwOWIwYywgMHgwMDAwZDc4YywgMHgwMDAwZDc4YywgMHgwMDAwOGJhMiwgMHgwMDAwOGJhMiwgMHgwMDAwOGJhMn0sCisJezB4MDAwMDliMTAsIDB4MDAwMGQ3OTAsIDB4MDAwMGQ3OTAsIDB4MDAwMDhiYTYsIDB4MDAwMDhiYTYsIDB4MDAwMDhiYTZ9LAorCXsweDAwMDA5YjE0LCAweDAwMDBmNzgwLCAweDAwMDBmNzgwLCAweDAwMDA4YmFhLCAweDAwMDA4YmFhLCAweDAwMDA4YmFhfSwKKwl7MHgwMDAwOWIxOCwgMHgwMDAwZjc4NCwgMHgwMDAwZjc4NCwgMHgwMDAwOGJhZSwgMHgwMDAwOGJhZSwgMHgwMDAwOGJhZX0sCisJezB4MDAwMDliMWMsIDB4MDAwMGY3ODgsIDB4MDAwMGY3ODgsIDB4MDAwMDhiYjIsIDB4MDAwMDhiYjIsIDB4MDAwMDhiYjJ9LAorCXsweDAwMDA5YjIwLCAweDAwMDBmNzhjLCAweDAwMDBmNzhjLCAweDAwMDA4YmI2LCAweDAwMDA4YmI2LCAweDAwMDA4YmI2fSwKKwl7MHgwMDAwOWIyNCwgMHgwMDAwZjc5MCwgMHgwMDAwZjc5MCwgMHgwMDAwOGJhMywgMHgwMDAwOGJhMywgMHgwMDAwOGJhM30sCisJezB4MDAwMDliMjgsIDB4MDAwMGY3OTQsIDB4MDAwMGY3OTQsIDB4MDAwMDhiYTcsIDB4MDAwMDhiYTcsIDB4MDAwMDhiYTd9LAorCXsweDAwMDA5YjJjLCAweDAwMDBmN2E0LCAweDAwMDBmN2E0LCAweDAwMDA4YmFiLCAweDAwMDA4YmFiLCAweDAwMDA4YmFifSwKKwl7MHgwMDAwOWIzMCwgMHgwMDAwZjdhOCwgMHgwMDAwZjdhOCwgMHgwMDAwOGJhZiwgMHgwMDAwOGJhZiwgMHgwMDAwOGJhZn0sCisJezB4MDAwMDliMzQsIDB4MDAwMGY3YWMsIDB4MDAwMGY3YWMsIDB4MDAwMDhiYjMsIDB4MDAwMDhiYjMsIDB4MDAwMDhiYjN9LAorCXsweDAwMDA5YjM4LCAweDAwMDBmN2IwLCAweDAwMDBmN2IwLCAweDAwMDA4YmI3LCAweDAwMDA4YmI3LCAweDAwMDA4YmI3fSwKKwl7MHgwMDAwOWIzYywgMHgwMDAwZjdiNCwgMHgwMDAwZjdiNCwgMHgwMDAwOGJjMywgMHgwMDAwOGJjMywgMHgwMDAwOGJjM30sCisJezB4MDAwMDliNDAsIDB4MDAwMGY3YTEsIDB4MDAwMGY3YTEsIDB4MDAwMDhiYzcsIDB4MDAwMDhiYzcsIDB4MDAwMDhiYzd9LAorCXsweDAwMDA5YjQ0LCAweDAwMDBmN2E1LCAweDAwMDBmN2E1LCAweDAwMDA4YmNiLCAweDAwMDA4YmNiLCAweDAwMDA4YmNifSwKKwl7MHgwMDAwOWI0OCwgMHgwMDAwZjdhOSwgMHgwMDAwZjdhOSwgMHgwMDAwOGJjZiwgMHgwMDAwOGJjZiwgMHgwMDAwOGJjZn0sCisJezB4MDAwMDliNGMsIDB4MDAwMGY3YWQsIDB4MDAwMGY3YWQsIDB4MDAwMDhiZDMsIDB4MDAwMDhiZDMsIDB4MDAwMDhiZDN9LAorCXsweDAwMDA5YjUwLCAweDAwMDBmN2IxLCAweDAwMDBmN2IxLCAweDAwMDA4YmQ3LCAweDAwMDA4YmQ3LCAweDAwMDA4YmQ3fSwKKwl7MHgwMDAwOWI1NCwgMHgwMDAwZjdiNSwgMHgwMDAwZjdiNSwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYn0sCisJezB4MDAwMDliNTgsIDB4MDAwMGY3YzUsIDB4MDAwMGY3YzUsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGJ9LAorCXsweDAwMDA5YjVjLCAweDAwMDBmN2M5LCAweDAwMDBmN2M5LCAweDAwMDA4YmRiLCAweDAwMDA4YmRiLCAweDAwMDA4YmRifSwKKwl7MHgwMDAwOWI2MCwgMHgwMDAwZjdjZCwgMHgwMDAwZjdjZCwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYn0sCisJezB4MDAwMDliNjQsIDB4MDAwMGY3ZDEsIDB4MDAwMGY3ZDEsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGJ9LAorCXsweDAwMDA5YjY4LCAweDAwMDBmN2Q1LCAweDAwMDBmN2Q1LCAweDAwMDA4YmRiLCAweDAwMDA4YmRiLCAweDAwMDA4YmRifSwKKwl7MHgwMDAwOWI2YywgMHgwMDAwZjdjMiwgMHgwMDAwZjdjMiwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYn0sCisJezB4MDAwMDliNzAsIDB4MDAwMGY3YzYsIDB4MDAwMGY3YzYsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGJ9LAorCXsweDAwMDA5Yjc0LCAweDAwMDBmN2NhLCAweDAwMDBmN2NhLCAweDAwMDA4YmRiLCAweDAwMDA4YmRiLCAweDAwMDA4YmRifSwKKwl7MHgwMDAwOWI3OCwgMHgwMDAwZjdjZSwgMHgwMDAwZjdjZSwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYn0sCisJezB4MDAwMDliN2MsIDB4MDAwMGY3ZDIsIDB4MDAwMGY3ZDIsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGJ9LAorCXsweDAwMDA5YjgwLCAweDAwMDBmN2Q2LCAweDAwMDBmN2Q2LCAweDAwMDA4YmRiLCAweDAwMDA4YmRiLCAweDAwMDA4YmRifSwKKwl7MHgwMDAwOWI4NCwgMHgwMDAwZjdjMywgMHgwMDAwZjdjMywgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYn0sCisJezB4MDAwMDliODgsIDB4MDAwMGY3YzcsIDB4MDAwMGY3YzcsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGJ9LAorCXsweDAwMDA5YjhjLCAweDAwMDBmN2NiLCAweDAwMDBmN2NiLCAweDAwMDA4YmRiLCAweDAwMDA4YmRiLCAweDAwMDA4YmRifSwKKwl7MHgwMDAwOWI5MCwgMHgwMDAwZjdkMywgMHgwMDAwZjdkMywgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYn0sCisJezB4MDAwMDliOTQsIDB4MDAwMGY3ZDcsIDB4MDAwMGY3ZDcsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGJ9LAorCXsweDAwMDA5Yjk4LCAweDAwMDBmN2RiLCAweDAwMDBmN2RiLCAweDAwMDA4YmRiLCAweDAwMDA4YmRiLCAweDAwMDA4YmRifSwKKwl7MHgwMDAwOWI5YywgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYn0sCisJezB4MDAwMDliYTAsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGJ9LAorCXsweDAwMDA5YmE0LCAweDAwMDBmN2RiLCAweDAwMDBmN2RiLCAweDAwMDA4YmRiLCAweDAwMDA4YmRiLCAweDAwMDA4YmRifSwKKwl7MHgwMDAwOWJhOCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYn0sCisJezB4MDAwMDliYWMsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGJ9LAorCXsweDAwMDA5YmIwLCAweDAwMDBmN2RiLCAweDAwMDBmN2RiLCAweDAwMDA4YmRiLCAweDAwMDA4YmRiLCAweDAwMDA4YmRifSwKKwl7MHgwMDAwOWJiNCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYn0sCisJezB4MDAwMDliYjgsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGJ9LAorCXsweDAwMDA5YmJjLCAweDAwMDBmN2RiLCAweDAwMDBmN2RiLCAweDAwMDA4YmRiLCAweDAwMDA4YmRiLCAweDAwMDA4YmRifSwKKwl7MHgwMDAwOWJjMCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYn0sCisJezB4MDAwMDliYzQsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGJ9LAorCXsweDAwMDA5YmM4LCAweDAwMDBmN2RiLCAweDAwMDBmN2RiLCAweDAwMDA4YmRiLCAweDAwMDA4YmRiLCAweDAwMDA4YmRifSwKKwl7MHgwMDAwOWJjYywgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYn0sCisJezB4MDAwMDliZDAsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGJ9LAorCXsweDAwMDA5YmQ0LCAweDAwMDBmN2RiLCAweDAwMDBmN2RiLCAweDAwMDA4YmRiLCAweDAwMDA4YmRiLCAweDAwMDA4YmRifSwKKwl7MHgwMDAwOWJkOCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYn0sCisJezB4MDAwMDliZGMsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGJ9LAorCXsweDAwMDA5YmUwLCAweDAwMDBmN2RiLCAweDAwMDBmN2RiLCAweDAwMDA4YmRiLCAweDAwMDA4YmRiLCAweDAwMDA4YmRifSwKKwl7MHgwMDAwOWJlNCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYn0sCisJezB4MDAwMDliZTgsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGJ9LAorCXsweDAwMDA5YmVjLCAweDAwMDBmN2RiLCAweDAwMDBmN2RiLCAweDAwMDA4YmRiLCAweDAwMDA4YmRiLCAweDAwMDA4YmRifSwKKwl7MHgwMDAwOWJmMCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYn0sCisJezB4MDAwMDliZjQsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGIsIDB4MDAwMDhiZGJ9LAorCXsweDAwMDA5YmY4LCAweDAwMDBmN2RiLCAweDAwMDBmN2RiLCAweDAwMDA4YmRiLCAweDAwMDA4YmRiLCAweDAwMDA4YmRifSwKKwl7MHgwMDAwOWJmYywgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYiwgMHgwMDAwOGJkYn0sCisJezB4MDAwMDk4NDgsIDB4MDAwMDEwNjYsIDB4MDAwMDEwNjYsIDB4MDAwMDEwNTUsIDB4MDAwMDEwNTUsIDB4MDAwMDEwNTV9LAorCXsweDAwMDBhODQ4LCAweDAwMDAxMDY2LCAweDAwMDAxMDY2LCAweDAwMDAxMDU1LCAweDAwMDAxMDU1LCAweDAwMDAxMDU1fSwKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgYXI5MjgwTW9kZXNfb3JpZ2luYWxfcnhnYWluXzkyODBfMltdWzZdID0gewotICAgIHsgMHgwMDAwOWEwMCwgMHgwMDAwODE4NCwgMHgwMDAwODE4NCwgMHgwMDAwMDI5MCwgMHgwMDAwMDI5MCwgMHgwMDAwMDI5MCB9LAotICAgIHsgMHgwMDAwOWEwNCwgMHgwMDAwODE4OCwgMHgwMDAwODE4OCwgMHgwMDAwMDMwMCwgMHgwMDAwMDMwMCwgMHgwMDAwMDMwMCB9LAotICAgIHsgMHgwMDAwOWEwOCwgMHgwMDAwODE4YywgMHgwMDAwODE4YywgMHgwMDAwMDMwNCwgMHgwMDAwMDMwNCwgMHgwMDAwMDMwNCB9LAotICAgIHsgMHgwMDAwOWEwYywgMHgwMDAwODE5MCwgMHgwMDAwODE5MCwgMHgwMDAwMDMwOCwgMHgwMDAwMDMwOCwgMHgwMDAwMDMwOCB9LAotICAgIHsgMHgwMDAwOWExMCwgMHgwMDAwODE5NCwgMHgwMDAwODE5NCwgMHgwMDAwMDMwYywgMHgwMDAwMDMwYywgMHgwMDAwMDMwYyB9LAotICAgIHsgMHgwMDAwOWExNCwgMHgwMDAwODIwMCwgMHgwMDAwODIwMCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCB9LAotICAgIHsgMHgwMDAwOWExOCwgMHgwMDAwODIwNCwgMHgwMDAwODIwNCwgMHgwMDAwODAwNCwgMHgwMDAwODAwNCwgMHgwMDAwODAwNCB9LAotICAgIHsgMHgwMDAwOWExYywgMHgwMDAwODIwOCwgMHgwMDAwODIwOCwgMHgwMDAwODAwOCwgMHgwMDAwODAwOCwgMHgwMDAwODAwOCB9LAotICAgIHsgMHgwMDAwOWEyMCwgMHgwMDAwODIwYywgMHgwMDAwODIwYywgMHgwMDAwODAwYywgMHgwMDAwODAwYywgMHgwMDAwODAwYyB9LAotICAgIHsgMHgwMDAwOWEyNCwgMHgwMDAwODIxMCwgMHgwMDAwODIxMCwgMHgwMDAwODA4MCwgMHgwMDAwODA4MCwgMHgwMDAwODA4MCB9LAotICAgIHsgMHgwMDAwOWEyOCwgMHgwMDAwODIxNCwgMHgwMDAwODIxNCwgMHgwMDAwODA4NCwgMHgwMDAwODA4NCwgMHgwMDAwODA4NCB9LAotICAgIHsgMHgwMDAwOWEyYywgMHgwMDAwODI4MCwgMHgwMDAwODI4MCwgMHgwMDAwODA4OCwgMHgwMDAwODA4OCwgMHgwMDAwODA4OCB9LAotICAgIHsgMHgwMDAwOWEzMCwgMHgwMDAwODI4NCwgMHgwMDAwODI4NCwgMHgwMDAwODA4YywgMHgwMDAwODA4YywgMHgwMDAwODA4YyB9LAotICAgIHsgMHgwMDAwOWEzNCwgMHgwMDAwODI4OCwgMHgwMDAwODI4OCwgMHgwMDAwODEwMCwgMHgwMDAwODEwMCwgMHgwMDAwODEwMCB9LAotICAgIHsgMHgwMDAwOWEzOCwgMHgwMDAwODI4YywgMHgwMDAwODI4YywgMHgwMDAwODEwNCwgMHgwMDAwODEwNCwgMHgwMDAwODEwNCB9LAotICAgIHsgMHgwMDAwOWEzYywgMHgwMDAwODI5MCwgMHgwMDAwODI5MCwgMHgwMDAwODEwOCwgMHgwMDAwODEwOCwgMHgwMDAwODEwOCB9LAotICAgIHsgMHgwMDAwOWE0MCwgMHgwMDAwODMwMCwgMHgwMDAwODMwMCwgMHgwMDAwODEwYywgMHgwMDAwODEwYywgMHgwMDAwODEwYyB9LAotICAgIHsgMHgwMDAwOWE0NCwgMHgwMDAwODMwNCwgMHgwMDAwODMwNCwgMHgwMDAwODExMCwgMHgwMDAwODExMCwgMHgwMDAwODExMCB9LAotICAgIHsgMHgwMDAwOWE0OCwgMHgwMDAwODMwOCwgMHgwMDAwODMwOCwgMHgwMDAwODExNCwgMHgwMDAwODExNCwgMHgwMDAwODExNCB9LAotICAgIHsgMHgwMDAwOWE0YywgMHgwMDAwODMwYywgMHgwMDAwODMwYywgMHgwMDAwODE4MCwgMHgwMDAwODE4MCwgMHgwMDAwODE4MCB9LAotICAgIHsgMHgwMDAwOWE1MCwgMHgwMDAwODMxMCwgMHgwMDAwODMxMCwgMHgwMDAwODE4NCwgMHgwMDAwODE4NCwgMHgwMDAwODE4NCB9LAotICAgIHsgMHgwMDAwOWE1NCwgMHgwMDAwODMxNCwgMHgwMDAwODMxNCwgMHgwMDAwODE4OCwgMHgwMDAwODE4OCwgMHgwMDAwODE4OCB9LAotICAgIHsgMHgwMDAwOWE1OCwgMHgwMDAwODM4MCwgMHgwMDAwODM4MCwgMHgwMDAwODE4YywgMHgwMDAwODE4YywgMHgwMDAwODE4YyB9LAotICAgIHsgMHgwMDAwOWE1YywgMHgwMDAwODM4NCwgMHgwMDAwODM4NCwgMHgwMDAwODE5MCwgMHgwMDAwODE5MCwgMHgwMDAwODE5MCB9LAotICAgIHsgMHgwMDAwOWE2MCwgMHgwMDAwODM4OCwgMHgwMDAwODM4OCwgMHgwMDAwODE5NCwgMHgwMDAwODE5NCwgMHgwMDAwODE5NCB9LAotICAgIHsgMHgwMDAwOWE2NCwgMHgwMDAwODM4YywgMHgwMDAwODM4YywgMHgwMDAwODFhMCwgMHgwMDAwODFhMCwgMHgwMDAwODFhMCB9LAotICAgIHsgMHgwMDAwOWE2OCwgMHgwMDAwODM5MCwgMHgwMDAwODM5MCwgMHgwMDAwODIwYywgMHgwMDAwODIwYywgMHgwMDAwODIwYyB9LAotICAgIHsgMHgwMDAwOWE2YywgMHgwMDAwODM5NCwgMHgwMDAwODM5NCwgMHgwMDAwODFhOCwgMHgwMDAwODFhOCwgMHgwMDAwODFhOCB9LAotICAgIHsgMHgwMDAwOWE3MCwgMHgwMDAwYTM4MCwgMHgwMDAwYTM4MCwgMHgwMDAwODI4NCwgMHgwMDAwODI4NCwgMHgwMDAwODI4NCB9LAotICAgIHsgMHgwMDAwOWE3NCwgMHgwMDAwYTM4NCwgMHgwMDAwYTM4NCwgMHgwMDAwODI4OCwgMHgwMDAwODI4OCwgMHgwMDAwODI4OCB9LAotICAgIHsgMHgwMDAwOWE3OCwgMHgwMDAwYTM4OCwgMHgwMDAwYTM4OCwgMHgwMDAwODIyNCwgMHgwMDAwODIyNCwgMHgwMDAwODIyNCB9LAotICAgIHsgMHgwMDAwOWE3YywgMHgwMDAwYTM4YywgMHgwMDAwYTM4YywgMHgwMDAwODI5MCwgMHgwMDAwODI5MCwgMHgwMDAwODI5MCB9LAotICAgIHsgMHgwMDAwOWE4MCwgMHgwMDAwYTM5MCwgMHgwMDAwYTM5MCwgMHgwMDAwODMwMCwgMHgwMDAwODMwMCwgMHgwMDAwODMwMCB9LAotICAgIHsgMHgwMDAwOWE4NCwgMHgwMDAwYTM5NCwgMHgwMDAwYTM5NCwgMHgwMDAwODMwNCwgMHgwMDAwODMwNCwgMHgwMDAwODMwNCB9LAotICAgIHsgMHgwMDAwOWE4OCwgMHgwMDAwYTc4MCwgMHgwMDAwYTc4MCwgMHgwMDAwODMwOCwgMHgwMDAwODMwOCwgMHgwMDAwODMwOCB9LAotICAgIHsgMHgwMDAwOWE4YywgMHgwMDAwYTc4NCwgMHgwMDAwYTc4NCwgMHgwMDAwODMwYywgMHgwMDAwODMwYywgMHgwMDAwODMwYyB9LAotICAgIHsgMHgwMDAwOWE5MCwgMHgwMDAwYTc4OCwgMHgwMDAwYTc4OCwgMHgwMDAwODM4MCwgMHgwMDAwODM4MCwgMHgwMDAwODM4MCB9LAotICAgIHsgMHgwMDAwOWE5NCwgMHgwMDAwYTc4YywgMHgwMDAwYTc4YywgMHgwMDAwODM4NCwgMHgwMDAwODM4NCwgMHgwMDAwODM4NCB9LAotICAgIHsgMHgwMDAwOWE5OCwgMHgwMDAwYTc5MCwgMHgwMDAwYTc5MCwgMHgwMDAwODcwMCwgMHgwMDAwODcwMCwgMHgwMDAwODcwMCB9LAotICAgIHsgMHgwMDAwOWE5YywgMHgwMDAwYTc5NCwgMHgwMDAwYTc5NCwgMHgwMDAwODcwNCwgMHgwMDAwODcwNCwgMHgwMDAwODcwNCB9LAotICAgIHsgMHgwMDAwOWFhMCwgMHgwMDAwYWI4NCwgMHgwMDAwYWI4NCwgMHgwMDAwODcwOCwgMHgwMDAwODcwOCwgMHgwMDAwODcwOCB9LAotICAgIHsgMHgwMDAwOWFhNCwgMHgwMDAwYWI4OCwgMHgwMDAwYWI4OCwgMHgwMDAwODcwYywgMHgwMDAwODcwYywgMHgwMDAwODcwYyB9LAotICAgIHsgMHgwMDAwOWFhOCwgMHgwMDAwYWI4YywgMHgwMDAwYWI4YywgMHgwMDAwODc4MCwgMHgwMDAwODc4MCwgMHgwMDAwODc4MCB9LAotICAgIHsgMHgwMDAwOWFhYywgMHgwMDAwYWI5MCwgMHgwMDAwYWI5MCwgMHgwMDAwODc4NCwgMHgwMDAwODc4NCwgMHgwMDAwODc4NCB9LAotICAgIHsgMHgwMDAwOWFiMCwgMHgwMDAwYWI5NCwgMHgwMDAwYWI5NCwgMHgwMDAwOGIwMCwgMHgwMDAwOGIwMCwgMHgwMDAwOGIwMCB9LAotICAgIHsgMHgwMDAwOWFiNCwgMHgwMDAwYWY4MCwgMHgwMDAwYWY4MCwgMHgwMDAwOGIwNCwgMHgwMDAwOGIwNCwgMHgwMDAwOGIwNCB9LAotICAgIHsgMHgwMDAwOWFiOCwgMHgwMDAwYWY4NCwgMHgwMDAwYWY4NCwgMHgwMDAwOGIwOCwgMHgwMDAwOGIwOCwgMHgwMDAwOGIwOCB9LAotICAgIHsgMHgwMDAwOWFiYywgMHgwMDAwYWY4OCwgMHgwMDAwYWY4OCwgMHgwMDAwOGIwYywgMHgwMDAwOGIwYywgMHgwMDAwOGIwYyB9LAotICAgIHsgMHgwMDAwOWFjMCwgMHgwMDAwYWY4YywgMHgwMDAwYWY4YywgMHgwMDAwOGI4MCwgMHgwMDAwOGI4MCwgMHgwMDAwOGI4MCB9LAotICAgIHsgMHgwMDAwOWFjNCwgMHgwMDAwYWY5MCwgMHgwMDAwYWY5MCwgMHgwMDAwOGI4NCwgMHgwMDAwOGI4NCwgMHgwMDAwOGI4NCB9LAotICAgIHsgMHgwMDAwOWFjOCwgMHgwMDAwYWY5NCwgMHgwMDAwYWY5NCwgMHgwMDAwOGI4OCwgMHgwMDAwOGI4OCwgMHgwMDAwOGI4OCB9LAotICAgIHsgMHgwMDAwOWFjYywgMHgwMDAwYjM4MCwgMHgwMDAwYjM4MCwgMHgwMDAwOGI4YywgMHgwMDAwOGI4YywgMHgwMDAwOGI4YyB9LAotICAgIHsgMHgwMDAwOWFkMCwgMHgwMDAwYjM4NCwgMHgwMDAwYjM4NCwgMHgwMDAwOGI5MCwgMHgwMDAwOGI5MCwgMHgwMDAwOGI5MCB9LAotICAgIHsgMHgwMDAwOWFkNCwgMHgwMDAwYjM4OCwgMHgwMDAwYjM4OCwgMHgwMDAwOGY4MCwgMHgwMDAwOGY4MCwgMHgwMDAwOGY4MCB9LAotICAgIHsgMHgwMDAwOWFkOCwgMHgwMDAwYjM4YywgMHgwMDAwYjM4YywgMHgwMDAwOGY4NCwgMHgwMDAwOGY4NCwgMHgwMDAwOGY4NCB9LAotICAgIHsgMHgwMDAwOWFkYywgMHgwMDAwYjM5MCwgMHgwMDAwYjM5MCwgMHgwMDAwOGY4OCwgMHgwMDAwOGY4OCwgMHgwMDAwOGY4OCB9LAotICAgIHsgMHgwMDAwOWFlMCwgMHgwMDAwYjM5NCwgMHgwMDAwYjM5NCwgMHgwMDAwOGY4YywgMHgwMDAwOGY4YywgMHgwMDAwOGY4YyB9LAotICAgIHsgMHgwMDAwOWFlNCwgMHgwMDAwYjM5OCwgMHgwMDAwYjM5OCwgMHgwMDAwOGY5MCwgMHgwMDAwOGY5MCwgMHgwMDAwOGY5MCB9LAotICAgIHsgMHgwMDAwOWFlOCwgMHgwMDAwYjc4MCwgMHgwMDAwYjc4MCwgMHgwMDAwOTMwYywgMHgwMDAwOTMwYywgMHgwMDAwOTMwYyB9LAotICAgIHsgMHgwMDAwOWFlYywgMHgwMDAwYjc4NCwgMHgwMDAwYjc4NCwgMHgwMDAwOTMxMCwgMHgwMDAwOTMxMCwgMHgwMDAwOTMxMCB9LAotICAgIHsgMHgwMDAwOWFmMCwgMHgwMDAwYjc4OCwgMHgwMDAwYjc4OCwgMHgwMDAwOTM4NCwgMHgwMDAwOTM4NCwgMHgwMDAwOTM4NCB9LAotICAgIHsgMHgwMDAwOWFmNCwgMHgwMDAwYjc4YywgMHgwMDAwYjc4YywgMHgwMDAwOTM4OCwgMHgwMDAwOTM4OCwgMHgwMDAwOTM4OCB9LAotICAgIHsgMHgwMDAwOWFmOCwgMHgwMDAwYjc5MCwgMHgwMDAwYjc5MCwgMHgwMDAwOTMyNCwgMHgwMDAwOTMyNCwgMHgwMDAwOTMyNCB9LAotICAgIHsgMHgwMDAwOWFmYywgMHgwMDAwYjc5NCwgMHgwMDAwYjc5NCwgMHgwMDAwOTcwNCwgMHgwMDAwOTcwNCwgMHgwMDAwOTcwNCB9LAotICAgIHsgMHgwMDAwOWIwMCwgMHgwMDAwYjc5OCwgMHgwMDAwYjc5OCwgMHgwMDAwOTZhNCwgMHgwMDAwOTZhNCwgMHgwMDAwOTZhNCB9LAotICAgIHsgMHgwMDAwOWIwNCwgMHgwMDAwZDc4NCwgMHgwMDAwZDc4NCwgMHgwMDAwOTZhOCwgMHgwMDAwOTZhOCwgMHgwMDAwOTZhOCB9LAotICAgIHsgMHgwMDAwOWIwOCwgMHgwMDAwZDc4OCwgMHgwMDAwZDc4OCwgMHgwMDAwOTcxMCwgMHgwMDAwOTcxMCwgMHgwMDAwOTcxMCB9LAotICAgIHsgMHgwMDAwOWIwYywgMHgwMDAwZDc4YywgMHgwMDAwZDc4YywgMHgwMDAwOTcxNCwgMHgwMDAwOTcxNCwgMHgwMDAwOTcxNCB9LAotICAgIHsgMHgwMDAwOWIxMCwgMHgwMDAwZDc5MCwgMHgwMDAwZDc5MCwgMHgwMDAwOTcyMCwgMHgwMDAwOTcyMCwgMHgwMDAwOTcyMCB9LAotICAgIHsgMHgwMDAwOWIxNCwgMHgwMDAwZjc4MCwgMHgwMDAwZjc4MCwgMHgwMDAwOTcyNCwgMHgwMDAwOTcyNCwgMHgwMDAwOTcyNCB9LAotICAgIHsgMHgwMDAwOWIxOCwgMHgwMDAwZjc4NCwgMHgwMDAwZjc4NCwgMHgwMDAwOTcyOCwgMHgwMDAwOTcyOCwgMHgwMDAwOTcyOCB9LAotICAgIHsgMHgwMDAwOWIxYywgMHgwMDAwZjc4OCwgMHgwMDAwZjc4OCwgMHgwMDAwOTcyYywgMHgwMDAwOTcyYywgMHgwMDAwOTcyYyB9LAotICAgIHsgMHgwMDAwOWIyMCwgMHgwMDAwZjc4YywgMHgwMDAwZjc4YywgMHgwMDAwOTdhMCwgMHgwMDAwOTdhMCwgMHgwMDAwOTdhMCB9LAotICAgIHsgMHgwMDAwOWIyNCwgMHgwMDAwZjc5MCwgMHgwMDAwZjc5MCwgMHgwMDAwOTdhNCwgMHgwMDAwOTdhNCwgMHgwMDAwOTdhNCB9LAotICAgIHsgMHgwMDAwOWIyOCwgMHgwMDAwZjc5NCwgMHgwMDAwZjc5NCwgMHgwMDAwOTdhOCwgMHgwMDAwOTdhOCwgMHgwMDAwOTdhOCB9LAotICAgIHsgMHgwMDAwOWIyYywgMHgwMDAwZjdhNCwgMHgwMDAwZjdhNCwgMHgwMDAwOTdiMCwgMHgwMDAwOTdiMCwgMHgwMDAwOTdiMCB9LAotICAgIHsgMHgwMDAwOWIzMCwgMHgwMDAwZjdhOCwgMHgwMDAwZjdhOCwgMHgwMDAwOTdiNCwgMHgwMDAwOTdiNCwgMHgwMDAwOTdiNCB9LAotICAgIHsgMHgwMDAwOWIzNCwgMHgwMDAwZjdhYywgMHgwMDAwZjdhYywgMHgwMDAwOTdiOCwgMHgwMDAwOTdiOCwgMHgwMDAwOTdiOCB9LAotICAgIHsgMHgwMDAwOWIzOCwgMHgwMDAwZjdiMCwgMHgwMDAwZjdiMCwgMHgwMDAwOTdhNSwgMHgwMDAwOTdhNSwgMHgwMDAwOTdhNSB9LAotICAgIHsgMHgwMDAwOWIzYywgMHgwMDAwZjdiNCwgMHgwMDAwZjdiNCwgMHgwMDAwOTdhOSwgMHgwMDAwOTdhOSwgMHgwMDAwOTdhOSB9LAotICAgIHsgMHgwMDAwOWI0MCwgMHgwMDAwZjdhMSwgMHgwMDAwZjdhMSwgMHgwMDAwOTdhZCwgMHgwMDAwOTdhZCwgMHgwMDAwOTdhZCB9LAotICAgIHsgMHgwMDAwOWI0NCwgMHgwMDAwZjdhNSwgMHgwMDAwZjdhNSwgMHgwMDAwOTdiMSwgMHgwMDAwOTdiMSwgMHgwMDAwOTdiMSB9LAotICAgIHsgMHgwMDAwOWI0OCwgMHgwMDAwZjdhOSwgMHgwMDAwZjdhOSwgMHgwMDAwOTdiNSwgMHgwMDAwOTdiNSwgMHgwMDAwOTdiNSB9LAotICAgIHsgMHgwMDAwOWI0YywgMHgwMDAwZjdhZCwgMHgwMDAwZjdhZCwgMHgwMDAwOTdiOSwgMHgwMDAwOTdiOSwgMHgwMDAwOTdiOSB9LAotICAgIHsgMHgwMDAwOWI1MCwgMHgwMDAwZjdiMSwgMHgwMDAwZjdiMSwgMHgwMDAwOTdjNSwgMHgwMDAwOTdjNSwgMHgwMDAwOTdjNSB9LAotICAgIHsgMHgwMDAwOWI1NCwgMHgwMDAwZjdiNSwgMHgwMDAwZjdiNSwgMHgwMDAwOTdjOSwgMHgwMDAwOTdjOSwgMHgwMDAwOTdjOSB9LAotICAgIHsgMHgwMDAwOWI1OCwgMHgwMDAwZjdjNSwgMHgwMDAwZjdjNSwgMHgwMDAwOTdkMSwgMHgwMDAwOTdkMSwgMHgwMDAwOTdkMSB9LAotICAgIHsgMHgwMDAwOWI1YywgMHgwMDAwZjdjOSwgMHgwMDAwZjdjOSwgMHgwMDAwOTdkNSwgMHgwMDAwOTdkNSwgMHgwMDAwOTdkNSB9LAotICAgIHsgMHgwMDAwOWI2MCwgMHgwMDAwZjdjZCwgMHgwMDAwZjdjZCwgMHgwMDAwOTdkOSwgMHgwMDAwOTdkOSwgMHgwMDAwOTdkOSB9LAotICAgIHsgMHgwMDAwOWI2NCwgMHgwMDAwZjdkMSwgMHgwMDAwZjdkMSwgMHgwMDAwOTdjNiwgMHgwMDAwOTdjNiwgMHgwMDAwOTdjNiB9LAotICAgIHsgMHgwMDAwOWI2OCwgMHgwMDAwZjdkNSwgMHgwMDAwZjdkNSwgMHgwMDAwOTdjYSwgMHgwMDAwOTdjYSwgMHgwMDAwOTdjYSB9LAotICAgIHsgMHgwMDAwOWI2YywgMHgwMDAwZjdjMiwgMHgwMDAwZjdjMiwgMHgwMDAwOTdjZSwgMHgwMDAwOTdjZSwgMHgwMDAwOTdjZSB9LAotICAgIHsgMHgwMDAwOWI3MCwgMHgwMDAwZjdjNiwgMHgwMDAwZjdjNiwgMHgwMDAwOTdkMiwgMHgwMDAwOTdkMiwgMHgwMDAwOTdkMiB9LAotICAgIHsgMHgwMDAwOWI3NCwgMHgwMDAwZjdjYSwgMHgwMDAwZjdjYSwgMHgwMDAwOTdkNiwgMHgwMDAwOTdkNiwgMHgwMDAwOTdkNiB9LAotICAgIHsgMHgwMDAwOWI3OCwgMHgwMDAwZjdjZSwgMHgwMDAwZjdjZSwgMHgwMDAwOTdjMywgMHgwMDAwOTdjMywgMHgwMDAwOTdjMyB9LAotICAgIHsgMHgwMDAwOWI3YywgMHgwMDAwZjdkMiwgMHgwMDAwZjdkMiwgMHgwMDAwOTdjNywgMHgwMDAwOTdjNywgMHgwMDAwOTdjNyB9LAotICAgIHsgMHgwMDAwOWI4MCwgMHgwMDAwZjdkNiwgMHgwMDAwZjdkNiwgMHgwMDAwOTdjYiwgMHgwMDAwOTdjYiwgMHgwMDAwOTdjYiB9LAotICAgIHsgMHgwMDAwOWI4NCwgMHgwMDAwZjdjMywgMHgwMDAwZjdjMywgMHgwMDAwOTdjZiwgMHgwMDAwOTdjZiwgMHgwMDAwOTdjZiB9LAotICAgIHsgMHgwMDAwOWI4OCwgMHgwMDAwZjdjNywgMHgwMDAwZjdjNywgMHgwMDAwOTdkNywgMHgwMDAwOTdkNywgMHgwMDAwOTdkNyB9LAotICAgIHsgMHgwMDAwOWI4YywgMHgwMDAwZjdjYiwgMHgwMDAwZjdjYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWI5MCwgMHgwMDAwZjdkMywgMHgwMDAwZjdkMywgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWI5NCwgMHgwMDAwZjdkNywgMHgwMDAwZjdkNywgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWI5OCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWI5YywgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWJhMCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWJhNCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWJhOCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWJhYywgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWJiMCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWJiNCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWJiOCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWJiYywgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWJjMCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWJjNCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWJjOCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWJjYywgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWJkMCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWJkNCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWJkOCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWJkYywgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWJlMCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWJlNCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWJlOCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWJlYywgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWJmMCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWJmNCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWJmOCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOWJmYywgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiB9LAotICAgIHsgMHgwMDAwOTg0OCwgMHgwMDAwMTA2NiwgMHgwMDAwMTA2NiwgMHgwMDAwMTA2MywgMHgwMDAwMTA2MywgMHgwMDAwMTA2MyB9LAotICAgIHsgMHgwMDAwYTg0OCwgMHgwMDAwMTA2NiwgMHgwMDAwMTA2NiwgMHgwMDAwMTA2MywgMHgwMDAwMTA2MywgMHgwMDAwMTA2MyB9LAorCXsweDAwMDA5YTAwLCAweDAwMDA4MTg0LCAweDAwMDA4MTg0LCAweDAwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwfSwKKwl7MHgwMDAwOWEwNCwgMHgwMDAwODE4OCwgMHgwMDAwODE4OCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMH0sCisJezB4MDAwMDlhMDgsIDB4MDAwMDgxOGMsIDB4MDAwMDgxOGMsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDB9LAorCXsweDAwMDA5YTBjLCAweDAwMDA4MTkwLCAweDAwMDA4MTkwLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwfSwKKwl7MHgwMDAwOWExMCwgMHgwMDAwODE5NCwgMHgwMDAwODE5NCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMH0sCisJezB4MDAwMDlhMTQsIDB4MDAwMDgyMDAsIDB4MDAwMDgyMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDB9LAorCXsweDAwMDA5YTE4LCAweDAwMDA4MjA0LCAweDAwMDA4MjA0LCAweDAwMDA4MDA0LCAweDAwMDA4MDA0LCAweDAwMDA4MDA0fSwKKwl7MHgwMDAwOWExYywgMHgwMDAwODIwOCwgMHgwMDAwODIwOCwgMHgwMDAwODAwOCwgMHgwMDAwODAwOCwgMHgwMDAwODAwOH0sCisJezB4MDAwMDlhMjAsIDB4MDAwMDgyMGMsIDB4MDAwMDgyMGMsIDB4MDAwMDgwMGMsIDB4MDAwMDgwMGMsIDB4MDAwMDgwMGN9LAorCXsweDAwMDA5YTI0LCAweDAwMDA4MjEwLCAweDAwMDA4MjEwLCAweDAwMDA4MDgwLCAweDAwMDA4MDgwLCAweDAwMDA4MDgwfSwKKwl7MHgwMDAwOWEyOCwgMHgwMDAwODIxNCwgMHgwMDAwODIxNCwgMHgwMDAwODA4NCwgMHgwMDAwODA4NCwgMHgwMDAwODA4NH0sCisJezB4MDAwMDlhMmMsIDB4MDAwMDgyODAsIDB4MDAwMDgyODAsIDB4MDAwMDgwODgsIDB4MDAwMDgwODgsIDB4MDAwMDgwODh9LAorCXsweDAwMDA5YTMwLCAweDAwMDA4Mjg0LCAweDAwMDA4Mjg0LCAweDAwMDA4MDhjLCAweDAwMDA4MDhjLCAweDAwMDA4MDhjfSwKKwl7MHgwMDAwOWEzNCwgMHgwMDAwODI4OCwgMHgwMDAwODI4OCwgMHgwMDAwODEwMCwgMHgwMDAwODEwMCwgMHgwMDAwODEwMH0sCisJezB4MDAwMDlhMzgsIDB4MDAwMDgyOGMsIDB4MDAwMDgyOGMsIDB4MDAwMDgxMDQsIDB4MDAwMDgxMDQsIDB4MDAwMDgxMDR9LAorCXsweDAwMDA5YTNjLCAweDAwMDA4MjkwLCAweDAwMDA4MjkwLCAweDAwMDA4MTA4LCAweDAwMDA4MTA4LCAweDAwMDA4MTA4fSwKKwl7MHgwMDAwOWE0MCwgMHgwMDAwODMwMCwgMHgwMDAwODMwMCwgMHgwMDAwODEwYywgMHgwMDAwODEwYywgMHgwMDAwODEwY30sCisJezB4MDAwMDlhNDQsIDB4MDAwMDgzMDQsIDB4MDAwMDgzMDQsIDB4MDAwMDgxMTAsIDB4MDAwMDgxMTAsIDB4MDAwMDgxMTB9LAorCXsweDAwMDA5YTQ4LCAweDAwMDA4MzA4LCAweDAwMDA4MzA4LCAweDAwMDA4MTE0LCAweDAwMDA4MTE0LCAweDAwMDA4MTE0fSwKKwl7MHgwMDAwOWE0YywgMHgwMDAwODMwYywgMHgwMDAwODMwYywgMHgwMDAwODE4MCwgMHgwMDAwODE4MCwgMHgwMDAwODE4MH0sCisJezB4MDAwMDlhNTAsIDB4MDAwMDgzMTAsIDB4MDAwMDgzMTAsIDB4MDAwMDgxODQsIDB4MDAwMDgxODQsIDB4MDAwMDgxODR9LAorCXsweDAwMDA5YTU0LCAweDAwMDA4MzE0LCAweDAwMDA4MzE0LCAweDAwMDA4MTg4LCAweDAwMDA4MTg4LCAweDAwMDA4MTg4fSwKKwl7MHgwMDAwOWE1OCwgMHgwMDAwODM4MCwgMHgwMDAwODM4MCwgMHgwMDAwODE4YywgMHgwMDAwODE4YywgMHgwMDAwODE4Y30sCisJezB4MDAwMDlhNWMsIDB4MDAwMDgzODQsIDB4MDAwMDgzODQsIDB4MDAwMDgxOTAsIDB4MDAwMDgxOTAsIDB4MDAwMDgxOTB9LAorCXsweDAwMDA5YTYwLCAweDAwMDA4Mzg4LCAweDAwMDA4Mzg4LCAweDAwMDA4MTk0LCAweDAwMDA4MTk0LCAweDAwMDA4MTk0fSwKKwl7MHgwMDAwOWE2NCwgMHgwMDAwODM4YywgMHgwMDAwODM4YywgMHgwMDAwODFhMCwgMHgwMDAwODFhMCwgMHgwMDAwODFhMH0sCisJezB4MDAwMDlhNjgsIDB4MDAwMDgzOTAsIDB4MDAwMDgzOTAsIDB4MDAwMDgyMGMsIDB4MDAwMDgyMGMsIDB4MDAwMDgyMGN9LAorCXsweDAwMDA5YTZjLCAweDAwMDA4Mzk0LCAweDAwMDA4Mzk0LCAweDAwMDA4MWE4LCAweDAwMDA4MWE4LCAweDAwMDA4MWE4fSwKKwl7MHgwMDAwOWE3MCwgMHgwMDAwYTM4MCwgMHgwMDAwYTM4MCwgMHgwMDAwODI4NCwgMHgwMDAwODI4NCwgMHgwMDAwODI4NH0sCisJezB4MDAwMDlhNzQsIDB4MDAwMGEzODQsIDB4MDAwMGEzODQsIDB4MDAwMDgyODgsIDB4MDAwMDgyODgsIDB4MDAwMDgyODh9LAorCXsweDAwMDA5YTc4LCAweDAwMDBhMzg4LCAweDAwMDBhMzg4LCAweDAwMDA4MjI0LCAweDAwMDA4MjI0LCAweDAwMDA4MjI0fSwKKwl7MHgwMDAwOWE3YywgMHgwMDAwYTM4YywgMHgwMDAwYTM4YywgMHgwMDAwODI5MCwgMHgwMDAwODI5MCwgMHgwMDAwODI5MH0sCisJezB4MDAwMDlhODAsIDB4MDAwMGEzOTAsIDB4MDAwMGEzOTAsIDB4MDAwMDgzMDAsIDB4MDAwMDgzMDAsIDB4MDAwMDgzMDB9LAorCXsweDAwMDA5YTg0LCAweDAwMDBhMzk0LCAweDAwMDBhMzk0LCAweDAwMDA4MzA0LCAweDAwMDA4MzA0LCAweDAwMDA4MzA0fSwKKwl7MHgwMDAwOWE4OCwgMHgwMDAwYTc4MCwgMHgwMDAwYTc4MCwgMHgwMDAwODMwOCwgMHgwMDAwODMwOCwgMHgwMDAwODMwOH0sCisJezB4MDAwMDlhOGMsIDB4MDAwMGE3ODQsIDB4MDAwMGE3ODQsIDB4MDAwMDgzMGMsIDB4MDAwMDgzMGMsIDB4MDAwMDgzMGN9LAorCXsweDAwMDA5YTkwLCAweDAwMDBhNzg4LCAweDAwMDBhNzg4LCAweDAwMDA4MzgwLCAweDAwMDA4MzgwLCAweDAwMDA4MzgwfSwKKwl7MHgwMDAwOWE5NCwgMHgwMDAwYTc4YywgMHgwMDAwYTc4YywgMHgwMDAwODM4NCwgMHgwMDAwODM4NCwgMHgwMDAwODM4NH0sCisJezB4MDAwMDlhOTgsIDB4MDAwMGE3OTAsIDB4MDAwMGE3OTAsIDB4MDAwMDg3MDAsIDB4MDAwMDg3MDAsIDB4MDAwMDg3MDB9LAorCXsweDAwMDA5YTljLCAweDAwMDBhNzk0LCAweDAwMDBhNzk0LCAweDAwMDA4NzA0LCAweDAwMDA4NzA0LCAweDAwMDA4NzA0fSwKKwl7MHgwMDAwOWFhMCwgMHgwMDAwYWI4NCwgMHgwMDAwYWI4NCwgMHgwMDAwODcwOCwgMHgwMDAwODcwOCwgMHgwMDAwODcwOH0sCisJezB4MDAwMDlhYTQsIDB4MDAwMGFiODgsIDB4MDAwMGFiODgsIDB4MDAwMDg3MGMsIDB4MDAwMDg3MGMsIDB4MDAwMDg3MGN9LAorCXsweDAwMDA5YWE4LCAweDAwMDBhYjhjLCAweDAwMDBhYjhjLCAweDAwMDA4NzgwLCAweDAwMDA4NzgwLCAweDAwMDA4NzgwfSwKKwl7MHgwMDAwOWFhYywgMHgwMDAwYWI5MCwgMHgwMDAwYWI5MCwgMHgwMDAwODc4NCwgMHgwMDAwODc4NCwgMHgwMDAwODc4NH0sCisJezB4MDAwMDlhYjAsIDB4MDAwMGFiOTQsIDB4MDAwMGFiOTQsIDB4MDAwMDhiMDAsIDB4MDAwMDhiMDAsIDB4MDAwMDhiMDB9LAorCXsweDAwMDA5YWI0LCAweDAwMDBhZjgwLCAweDAwMDBhZjgwLCAweDAwMDA4YjA0LCAweDAwMDA4YjA0LCAweDAwMDA4YjA0fSwKKwl7MHgwMDAwOWFiOCwgMHgwMDAwYWY4NCwgMHgwMDAwYWY4NCwgMHgwMDAwOGIwOCwgMHgwMDAwOGIwOCwgMHgwMDAwOGIwOH0sCisJezB4MDAwMDlhYmMsIDB4MDAwMGFmODgsIDB4MDAwMGFmODgsIDB4MDAwMDhiMGMsIDB4MDAwMDhiMGMsIDB4MDAwMDhiMGN9LAorCXsweDAwMDA5YWMwLCAweDAwMDBhZjhjLCAweDAwMDBhZjhjLCAweDAwMDA4YjgwLCAweDAwMDA4YjgwLCAweDAwMDA4YjgwfSwKKwl7MHgwMDAwOWFjNCwgMHgwMDAwYWY5MCwgMHgwMDAwYWY5MCwgMHgwMDAwOGI4NCwgMHgwMDAwOGI4NCwgMHgwMDAwOGI4NH0sCisJezB4MDAwMDlhYzgsIDB4MDAwMGFmOTQsIDB4MDAwMGFmOTQsIDB4MDAwMDhiODgsIDB4MDAwMDhiODgsIDB4MDAwMDhiODh9LAorCXsweDAwMDA5YWNjLCAweDAwMDBiMzgwLCAweDAwMDBiMzgwLCAweDAwMDA4YjhjLCAweDAwMDA4YjhjLCAweDAwMDA4YjhjfSwKKwl7MHgwMDAwOWFkMCwgMHgwMDAwYjM4NCwgMHgwMDAwYjM4NCwgMHgwMDAwOGI5MCwgMHgwMDAwOGI5MCwgMHgwMDAwOGI5MH0sCisJezB4MDAwMDlhZDQsIDB4MDAwMGIzODgsIDB4MDAwMGIzODgsIDB4MDAwMDhmODAsIDB4MDAwMDhmODAsIDB4MDAwMDhmODB9LAorCXsweDAwMDA5YWQ4LCAweDAwMDBiMzhjLCAweDAwMDBiMzhjLCAweDAwMDA4Zjg0LCAweDAwMDA4Zjg0LCAweDAwMDA4Zjg0fSwKKwl7MHgwMDAwOWFkYywgMHgwMDAwYjM5MCwgMHgwMDAwYjM5MCwgMHgwMDAwOGY4OCwgMHgwMDAwOGY4OCwgMHgwMDAwOGY4OH0sCisJezB4MDAwMDlhZTAsIDB4MDAwMGIzOTQsIDB4MDAwMGIzOTQsIDB4MDAwMDhmOGMsIDB4MDAwMDhmOGMsIDB4MDAwMDhmOGN9LAorCXsweDAwMDA5YWU0LCAweDAwMDBiMzk4LCAweDAwMDBiMzk4LCAweDAwMDA4ZjkwLCAweDAwMDA4ZjkwLCAweDAwMDA4ZjkwfSwKKwl7MHgwMDAwOWFlOCwgMHgwMDAwYjc4MCwgMHgwMDAwYjc4MCwgMHgwMDAwOTMwYywgMHgwMDAwOTMwYywgMHgwMDAwOTMwY30sCisJezB4MDAwMDlhZWMsIDB4MDAwMGI3ODQsIDB4MDAwMGI3ODQsIDB4MDAwMDkzMTAsIDB4MDAwMDkzMTAsIDB4MDAwMDkzMTB9LAorCXsweDAwMDA5YWYwLCAweDAwMDBiNzg4LCAweDAwMDBiNzg4LCAweDAwMDA5Mzg0LCAweDAwMDA5Mzg0LCAweDAwMDA5Mzg0fSwKKwl7MHgwMDAwOWFmNCwgMHgwMDAwYjc4YywgMHgwMDAwYjc4YywgMHgwMDAwOTM4OCwgMHgwMDAwOTM4OCwgMHgwMDAwOTM4OH0sCisJezB4MDAwMDlhZjgsIDB4MDAwMGI3OTAsIDB4MDAwMGI3OTAsIDB4MDAwMDkzMjQsIDB4MDAwMDkzMjQsIDB4MDAwMDkzMjR9LAorCXsweDAwMDA5YWZjLCAweDAwMDBiNzk0LCAweDAwMDBiNzk0LCAweDAwMDA5NzA0LCAweDAwMDA5NzA0LCAweDAwMDA5NzA0fSwKKwl7MHgwMDAwOWIwMCwgMHgwMDAwYjc5OCwgMHgwMDAwYjc5OCwgMHgwMDAwOTZhNCwgMHgwMDAwOTZhNCwgMHgwMDAwOTZhNH0sCisJezB4MDAwMDliMDQsIDB4MDAwMGQ3ODQsIDB4MDAwMGQ3ODQsIDB4MDAwMDk2YTgsIDB4MDAwMDk2YTgsIDB4MDAwMDk2YTh9LAorCXsweDAwMDA5YjA4LCAweDAwMDBkNzg4LCAweDAwMDBkNzg4LCAweDAwMDA5NzEwLCAweDAwMDA5NzEwLCAweDAwMDA5NzEwfSwKKwl7MHgwMDAwOWIwYywgMHgwMDAwZDc4YywgMHgwMDAwZDc4YywgMHgwMDAwOTcxNCwgMHgwMDAwOTcxNCwgMHgwMDAwOTcxNH0sCisJezB4MDAwMDliMTAsIDB4MDAwMGQ3OTAsIDB4MDAwMGQ3OTAsIDB4MDAwMDk3MjAsIDB4MDAwMDk3MjAsIDB4MDAwMDk3MjB9LAorCXsweDAwMDA5YjE0LCAweDAwMDBmNzgwLCAweDAwMDBmNzgwLCAweDAwMDA5NzI0LCAweDAwMDA5NzI0LCAweDAwMDA5NzI0fSwKKwl7MHgwMDAwOWIxOCwgMHgwMDAwZjc4NCwgMHgwMDAwZjc4NCwgMHgwMDAwOTcyOCwgMHgwMDAwOTcyOCwgMHgwMDAwOTcyOH0sCisJezB4MDAwMDliMWMsIDB4MDAwMGY3ODgsIDB4MDAwMGY3ODgsIDB4MDAwMDk3MmMsIDB4MDAwMDk3MmMsIDB4MDAwMDk3MmN9LAorCXsweDAwMDA5YjIwLCAweDAwMDBmNzhjLCAweDAwMDBmNzhjLCAweDAwMDA5N2EwLCAweDAwMDA5N2EwLCAweDAwMDA5N2EwfSwKKwl7MHgwMDAwOWIyNCwgMHgwMDAwZjc5MCwgMHgwMDAwZjc5MCwgMHgwMDAwOTdhNCwgMHgwMDAwOTdhNCwgMHgwMDAwOTdhNH0sCisJezB4MDAwMDliMjgsIDB4MDAwMGY3OTQsIDB4MDAwMGY3OTQsIDB4MDAwMDk3YTgsIDB4MDAwMDk3YTgsIDB4MDAwMDk3YTh9LAorCXsweDAwMDA5YjJjLCAweDAwMDBmN2E0LCAweDAwMDBmN2E0LCAweDAwMDA5N2IwLCAweDAwMDA5N2IwLCAweDAwMDA5N2IwfSwKKwl7MHgwMDAwOWIzMCwgMHgwMDAwZjdhOCwgMHgwMDAwZjdhOCwgMHgwMDAwOTdiNCwgMHgwMDAwOTdiNCwgMHgwMDAwOTdiNH0sCisJezB4MDAwMDliMzQsIDB4MDAwMGY3YWMsIDB4MDAwMGY3YWMsIDB4MDAwMDk3YjgsIDB4MDAwMDk3YjgsIDB4MDAwMDk3Yjh9LAorCXsweDAwMDA5YjM4LCAweDAwMDBmN2IwLCAweDAwMDBmN2IwLCAweDAwMDA5N2E1LCAweDAwMDA5N2E1LCAweDAwMDA5N2E1fSwKKwl7MHgwMDAwOWIzYywgMHgwMDAwZjdiNCwgMHgwMDAwZjdiNCwgMHgwMDAwOTdhOSwgMHgwMDAwOTdhOSwgMHgwMDAwOTdhOX0sCisJezB4MDAwMDliNDAsIDB4MDAwMGY3YTEsIDB4MDAwMGY3YTEsIDB4MDAwMDk3YWQsIDB4MDAwMDk3YWQsIDB4MDAwMDk3YWR9LAorCXsweDAwMDA5YjQ0LCAweDAwMDBmN2E1LCAweDAwMDBmN2E1LCAweDAwMDA5N2IxLCAweDAwMDA5N2IxLCAweDAwMDA5N2IxfSwKKwl7MHgwMDAwOWI0OCwgMHgwMDAwZjdhOSwgMHgwMDAwZjdhOSwgMHgwMDAwOTdiNSwgMHgwMDAwOTdiNSwgMHgwMDAwOTdiNX0sCisJezB4MDAwMDliNGMsIDB4MDAwMGY3YWQsIDB4MDAwMGY3YWQsIDB4MDAwMDk3YjksIDB4MDAwMDk3YjksIDB4MDAwMDk3Yjl9LAorCXsweDAwMDA5YjUwLCAweDAwMDBmN2IxLCAweDAwMDBmN2IxLCAweDAwMDA5N2M1LCAweDAwMDA5N2M1LCAweDAwMDA5N2M1fSwKKwl7MHgwMDAwOWI1NCwgMHgwMDAwZjdiNSwgMHgwMDAwZjdiNSwgMHgwMDAwOTdjOSwgMHgwMDAwOTdjOSwgMHgwMDAwOTdjOX0sCisJezB4MDAwMDliNTgsIDB4MDAwMGY3YzUsIDB4MDAwMGY3YzUsIDB4MDAwMDk3ZDEsIDB4MDAwMDk3ZDEsIDB4MDAwMDk3ZDF9LAorCXsweDAwMDA5YjVjLCAweDAwMDBmN2M5LCAweDAwMDBmN2M5LCAweDAwMDA5N2Q1LCAweDAwMDA5N2Q1LCAweDAwMDA5N2Q1fSwKKwl7MHgwMDAwOWI2MCwgMHgwMDAwZjdjZCwgMHgwMDAwZjdjZCwgMHgwMDAwOTdkOSwgMHgwMDAwOTdkOSwgMHgwMDAwOTdkOX0sCisJezB4MDAwMDliNjQsIDB4MDAwMGY3ZDEsIDB4MDAwMGY3ZDEsIDB4MDAwMDk3YzYsIDB4MDAwMDk3YzYsIDB4MDAwMDk3YzZ9LAorCXsweDAwMDA5YjY4LCAweDAwMDBmN2Q1LCAweDAwMDBmN2Q1LCAweDAwMDA5N2NhLCAweDAwMDA5N2NhLCAweDAwMDA5N2NhfSwKKwl7MHgwMDAwOWI2YywgMHgwMDAwZjdjMiwgMHgwMDAwZjdjMiwgMHgwMDAwOTdjZSwgMHgwMDAwOTdjZSwgMHgwMDAwOTdjZX0sCisJezB4MDAwMDliNzAsIDB4MDAwMGY3YzYsIDB4MDAwMGY3YzYsIDB4MDAwMDk3ZDIsIDB4MDAwMDk3ZDIsIDB4MDAwMDk3ZDJ9LAorCXsweDAwMDA5Yjc0LCAweDAwMDBmN2NhLCAweDAwMDBmN2NhLCAweDAwMDA5N2Q2LCAweDAwMDA5N2Q2LCAweDAwMDA5N2Q2fSwKKwl7MHgwMDAwOWI3OCwgMHgwMDAwZjdjZSwgMHgwMDAwZjdjZSwgMHgwMDAwOTdjMywgMHgwMDAwOTdjMywgMHgwMDAwOTdjM30sCisJezB4MDAwMDliN2MsIDB4MDAwMGY3ZDIsIDB4MDAwMGY3ZDIsIDB4MDAwMDk3YzcsIDB4MDAwMDk3YzcsIDB4MDAwMDk3Yzd9LAorCXsweDAwMDA5YjgwLCAweDAwMDBmN2Q2LCAweDAwMDBmN2Q2LCAweDAwMDA5N2NiLCAweDAwMDA5N2NiLCAweDAwMDA5N2NifSwKKwl7MHgwMDAwOWI4NCwgMHgwMDAwZjdjMywgMHgwMDAwZjdjMywgMHgwMDAwOTdjZiwgMHgwMDAwOTdjZiwgMHgwMDAwOTdjZn0sCisJezB4MDAwMDliODgsIDB4MDAwMGY3YzcsIDB4MDAwMGY3YzcsIDB4MDAwMDk3ZDcsIDB4MDAwMDk3ZDcsIDB4MDAwMDk3ZDd9LAorCXsweDAwMDA5YjhjLCAweDAwMDBmN2NiLCAweDAwMDBmN2NiLCAweDAwMDA5N2RiLCAweDAwMDA5N2RiLCAweDAwMDA5N2RifSwKKwl7MHgwMDAwOWI5MCwgMHgwMDAwZjdkMywgMHgwMDAwZjdkMywgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYn0sCisJezB4MDAwMDliOTQsIDB4MDAwMGY3ZDcsIDB4MDAwMGY3ZDcsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGJ9LAorCXsweDAwMDA5Yjk4LCAweDAwMDBmN2RiLCAweDAwMDBmN2RiLCAweDAwMDA5N2RiLCAweDAwMDA5N2RiLCAweDAwMDA5N2RifSwKKwl7MHgwMDAwOWI5YywgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYn0sCisJezB4MDAwMDliYTAsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGJ9LAorCXsweDAwMDA5YmE0LCAweDAwMDBmN2RiLCAweDAwMDBmN2RiLCAweDAwMDA5N2RiLCAweDAwMDA5N2RiLCAweDAwMDA5N2RifSwKKwl7MHgwMDAwOWJhOCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYn0sCisJezB4MDAwMDliYWMsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGJ9LAorCXsweDAwMDA5YmIwLCAweDAwMDBmN2RiLCAweDAwMDBmN2RiLCAweDAwMDA5N2RiLCAweDAwMDA5N2RiLCAweDAwMDA5N2RifSwKKwl7MHgwMDAwOWJiNCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYn0sCisJezB4MDAwMDliYjgsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGJ9LAorCXsweDAwMDA5YmJjLCAweDAwMDBmN2RiLCAweDAwMDBmN2RiLCAweDAwMDA5N2RiLCAweDAwMDA5N2RiLCAweDAwMDA5N2RifSwKKwl7MHgwMDAwOWJjMCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYn0sCisJezB4MDAwMDliYzQsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGJ9LAorCXsweDAwMDA5YmM4LCAweDAwMDBmN2RiLCAweDAwMDBmN2RiLCAweDAwMDA5N2RiLCAweDAwMDA5N2RiLCAweDAwMDA5N2RifSwKKwl7MHgwMDAwOWJjYywgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYn0sCisJezB4MDAwMDliZDAsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGJ9LAorCXsweDAwMDA5YmQ0LCAweDAwMDBmN2RiLCAweDAwMDBmN2RiLCAweDAwMDA5N2RiLCAweDAwMDA5N2RiLCAweDAwMDA5N2RifSwKKwl7MHgwMDAwOWJkOCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYn0sCisJezB4MDAwMDliZGMsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGJ9LAorCXsweDAwMDA5YmUwLCAweDAwMDBmN2RiLCAweDAwMDBmN2RiLCAweDAwMDA5N2RiLCAweDAwMDA5N2RiLCAweDAwMDA5N2RifSwKKwl7MHgwMDAwOWJlNCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYn0sCisJezB4MDAwMDliZTgsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGJ9LAorCXsweDAwMDA5YmVjLCAweDAwMDBmN2RiLCAweDAwMDBmN2RiLCAweDAwMDA5N2RiLCAweDAwMDA5N2RiLCAweDAwMDA5N2RifSwKKwl7MHgwMDAwOWJmMCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYn0sCisJezB4MDAwMDliZjQsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGIsIDB4MDAwMDk3ZGJ9LAorCXsweDAwMDA5YmY4LCAweDAwMDBmN2RiLCAweDAwMDBmN2RiLCAweDAwMDA5N2RiLCAweDAwMDA5N2RiLCAweDAwMDA5N2RifSwKKwl7MHgwMDAwOWJmYywgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYiwgMHgwMDAwOTdkYn0sCisJezB4MDAwMDk4NDgsIDB4MDAwMDEwNjYsIDB4MDAwMDEwNjYsIDB4MDAwMDEwNjMsIDB4MDAwMDEwNjMsIDB4MDAwMDEwNjN9LAorCXsweDAwMDBhODQ4LCAweDAwMDAxMDY2LCAweDAwMDAxMDY2LCAweDAwMDAxMDYzLCAweDAwMDAxMDYzLCAweDAwMDAxMDYzfSwKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgYXI5MjgwTW9kZXNfYmFja29mZl8xM2RiX3J4Z2Fpbl85MjgwXzJbXVs2XSA9IHsKLSAgICB7IDB4MDAwMDlhMDAsIDB4MDAwMDgxODQsIDB4MDAwMDgxODQsIDB4MDAwMDAyOTAsIDB4MDAwMDAyOTAsIDB4MDAwMDAyOTAgfSwKLSAgICB7IDB4MDAwMDlhMDQsIDB4MDAwMDgxODgsIDB4MDAwMDgxODgsIDB4MDAwMDAzMDAsIDB4MDAwMDAzMDAsIDB4MDAwMDAzMDAgfSwKLSAgICB7IDB4MDAwMDlhMDgsIDB4MDAwMDgxOGMsIDB4MDAwMDgxOGMsIDB4MDAwMDAzMDQsIDB4MDAwMDAzMDQsIDB4MDAwMDAzMDQgfSwKLSAgICB7IDB4MDAwMDlhMGMsIDB4MDAwMDgxOTAsIDB4MDAwMDgxOTAsIDB4MDAwMDAzMDgsIDB4MDAwMDAzMDgsIDB4MDAwMDAzMDggfSwKLSAgICB7IDB4MDAwMDlhMTAsIDB4MDAwMDgxOTQsIDB4MDAwMDgxOTQsIDB4MDAwMDAzMGMsIDB4MDAwMDAzMGMsIDB4MDAwMDAzMGMgfSwKLSAgICB7IDB4MDAwMDlhMTQsIDB4MDAwMDgyMDAsIDB4MDAwMDgyMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDAgfSwKLSAgICB7IDB4MDAwMDlhMTgsIDB4MDAwMDgyMDQsIDB4MDAwMDgyMDQsIDB4MDAwMDgwMDQsIDB4MDAwMDgwMDQsIDB4MDAwMDgwMDQgfSwKLSAgICB7IDB4MDAwMDlhMWMsIDB4MDAwMDgyMDgsIDB4MDAwMDgyMDgsIDB4MDAwMDgwMDgsIDB4MDAwMDgwMDgsIDB4MDAwMDgwMDggfSwKLSAgICB7IDB4MDAwMDlhMjAsIDB4MDAwMDgyMGMsIDB4MDAwMDgyMGMsIDB4MDAwMDgwMGMsIDB4MDAwMDgwMGMsIDB4MDAwMDgwMGMgfSwKLSAgICB7IDB4MDAwMDlhMjQsIDB4MDAwMDgyMTAsIDB4MDAwMDgyMTAsIDB4MDAwMDgwODAsIDB4MDAwMDgwODAsIDB4MDAwMDgwODAgfSwKLSAgICB7IDB4MDAwMDlhMjgsIDB4MDAwMDgyMTQsIDB4MDAwMDgyMTQsIDB4MDAwMDgwODQsIDB4MDAwMDgwODQsIDB4MDAwMDgwODQgfSwKLSAgICB7IDB4MDAwMDlhMmMsIDB4MDAwMDgyODAsIDB4MDAwMDgyODAsIDB4MDAwMDgwODgsIDB4MDAwMDgwODgsIDB4MDAwMDgwODggfSwKLSAgICB7IDB4MDAwMDlhMzAsIDB4MDAwMDgyODQsIDB4MDAwMDgyODQsIDB4MDAwMDgwOGMsIDB4MDAwMDgwOGMsIDB4MDAwMDgwOGMgfSwKLSAgICB7IDB4MDAwMDlhMzQsIDB4MDAwMDgyODgsIDB4MDAwMDgyODgsIDB4MDAwMDgxMDAsIDB4MDAwMDgxMDAsIDB4MDAwMDgxMDAgfSwKLSAgICB7IDB4MDAwMDlhMzgsIDB4MDAwMDgyOGMsIDB4MDAwMDgyOGMsIDB4MDAwMDgxMDQsIDB4MDAwMDgxMDQsIDB4MDAwMDgxMDQgfSwKLSAgICB7IDB4MDAwMDlhM2MsIDB4MDAwMDgyOTAsIDB4MDAwMDgyOTAsIDB4MDAwMDgxMDgsIDB4MDAwMDgxMDgsIDB4MDAwMDgxMDggfSwKLSAgICB7IDB4MDAwMDlhNDAsIDB4MDAwMDgzMDAsIDB4MDAwMDgzMDAsIDB4MDAwMDgxMGMsIDB4MDAwMDgxMGMsIDB4MDAwMDgxMGMgfSwKLSAgICB7IDB4MDAwMDlhNDQsIDB4MDAwMDgzMDQsIDB4MDAwMDgzMDQsIDB4MDAwMDgxMTAsIDB4MDAwMDgxMTAsIDB4MDAwMDgxMTAgfSwKLSAgICB7IDB4MDAwMDlhNDgsIDB4MDAwMDgzMDgsIDB4MDAwMDgzMDgsIDB4MDAwMDgxMTQsIDB4MDAwMDgxMTQsIDB4MDAwMDgxMTQgfSwKLSAgICB7IDB4MDAwMDlhNGMsIDB4MDAwMDgzMGMsIDB4MDAwMDgzMGMsIDB4MDAwMDgxODAsIDB4MDAwMDgxODAsIDB4MDAwMDgxODAgfSwKLSAgICB7IDB4MDAwMDlhNTAsIDB4MDAwMDgzMTAsIDB4MDAwMDgzMTAsIDB4MDAwMDgxODQsIDB4MDAwMDgxODQsIDB4MDAwMDgxODQgfSwKLSAgICB7IDB4MDAwMDlhNTQsIDB4MDAwMDgzMTQsIDB4MDAwMDgzMTQsIDB4MDAwMDgxODgsIDB4MDAwMDgxODgsIDB4MDAwMDgxODggfSwKLSAgICB7IDB4MDAwMDlhNTgsIDB4MDAwMDgzODAsIDB4MDAwMDgzODAsIDB4MDAwMDgxOGMsIDB4MDAwMDgxOGMsIDB4MDAwMDgxOGMgfSwKLSAgICB7IDB4MDAwMDlhNWMsIDB4MDAwMDgzODQsIDB4MDAwMDgzODQsIDB4MDAwMDgxOTAsIDB4MDAwMDgxOTAsIDB4MDAwMDgxOTAgfSwKLSAgICB7IDB4MDAwMDlhNjAsIDB4MDAwMDgzODgsIDB4MDAwMDgzODgsIDB4MDAwMDgxOTQsIDB4MDAwMDgxOTQsIDB4MDAwMDgxOTQgfSwKLSAgICB7IDB4MDAwMDlhNjQsIDB4MDAwMDgzOGMsIDB4MDAwMDgzOGMsIDB4MDAwMDgxYTAsIDB4MDAwMDgxYTAsIDB4MDAwMDgxYTAgfSwKLSAgICB7IDB4MDAwMDlhNjgsIDB4MDAwMDgzOTAsIDB4MDAwMDgzOTAsIDB4MDAwMDgyMGMsIDB4MDAwMDgyMGMsIDB4MDAwMDgyMGMgfSwKLSAgICB7IDB4MDAwMDlhNmMsIDB4MDAwMDgzOTQsIDB4MDAwMDgzOTQsIDB4MDAwMDgxYTgsIDB4MDAwMDgxYTgsIDB4MDAwMDgxYTggfSwKLSAgICB7IDB4MDAwMDlhNzAsIDB4MDAwMGEzODAsIDB4MDAwMGEzODAsIDB4MDAwMDgyODQsIDB4MDAwMDgyODQsIDB4MDAwMDgyODQgfSwKLSAgICB7IDB4MDAwMDlhNzQsIDB4MDAwMGEzODQsIDB4MDAwMGEzODQsIDB4MDAwMDgyODgsIDB4MDAwMDgyODgsIDB4MDAwMDgyODggfSwKLSAgICB7IDB4MDAwMDlhNzgsIDB4MDAwMGEzODgsIDB4MDAwMGEzODgsIDB4MDAwMDgyMjQsIDB4MDAwMDgyMjQsIDB4MDAwMDgyMjQgfSwKLSAgICB7IDB4MDAwMDlhN2MsIDB4MDAwMGEzOGMsIDB4MDAwMGEzOGMsIDB4MDAwMDgyOTAsIDB4MDAwMDgyOTAsIDB4MDAwMDgyOTAgfSwKLSAgICB7IDB4MDAwMDlhODAsIDB4MDAwMGEzOTAsIDB4MDAwMGEzOTAsIDB4MDAwMDgzMDAsIDB4MDAwMDgzMDAsIDB4MDAwMDgzMDAgfSwKLSAgICB7IDB4MDAwMDlhODQsIDB4MDAwMGEzOTQsIDB4MDAwMGEzOTQsIDB4MDAwMDgzMDQsIDB4MDAwMDgzMDQsIDB4MDAwMDgzMDQgfSwKLSAgICB7IDB4MDAwMDlhODgsIDB4MDAwMGE3ODAsIDB4MDAwMGE3ODAsIDB4MDAwMDgzMDgsIDB4MDAwMDgzMDgsIDB4MDAwMDgzMDggfSwKLSAgICB7IDB4MDAwMDlhOGMsIDB4MDAwMGE3ODQsIDB4MDAwMGE3ODQsIDB4MDAwMDgzMGMsIDB4MDAwMDgzMGMsIDB4MDAwMDgzMGMgfSwKLSAgICB7IDB4MDAwMDlhOTAsIDB4MDAwMGE3ODgsIDB4MDAwMGE3ODgsIDB4MDAwMDgzODAsIDB4MDAwMDgzODAsIDB4MDAwMDgzODAgfSwKLSAgICB7IDB4MDAwMDlhOTQsIDB4MDAwMGE3OGMsIDB4MDAwMGE3OGMsIDB4MDAwMDgzODQsIDB4MDAwMDgzODQsIDB4MDAwMDgzODQgfSwKLSAgICB7IDB4MDAwMDlhOTgsIDB4MDAwMGE3OTAsIDB4MDAwMGE3OTAsIDB4MDAwMDg3MDAsIDB4MDAwMDg3MDAsIDB4MDAwMDg3MDAgfSwKLSAgICB7IDB4MDAwMDlhOWMsIDB4MDAwMGE3OTQsIDB4MDAwMGE3OTQsIDB4MDAwMDg3MDQsIDB4MDAwMDg3MDQsIDB4MDAwMDg3MDQgfSwKLSAgICB7IDB4MDAwMDlhYTAsIDB4MDAwMGFiODQsIDB4MDAwMGFiODQsIDB4MDAwMDg3MDgsIDB4MDAwMDg3MDgsIDB4MDAwMDg3MDggfSwKLSAgICB7IDB4MDAwMDlhYTQsIDB4MDAwMGFiODgsIDB4MDAwMGFiODgsIDB4MDAwMDg3MGMsIDB4MDAwMDg3MGMsIDB4MDAwMDg3MGMgfSwKLSAgICB7IDB4MDAwMDlhYTgsIDB4MDAwMGFiOGMsIDB4MDAwMGFiOGMsIDB4MDAwMDg3ODAsIDB4MDAwMDg3ODAsIDB4MDAwMDg3ODAgfSwKLSAgICB7IDB4MDAwMDlhYWMsIDB4MDAwMGFiOTAsIDB4MDAwMGFiOTAsIDB4MDAwMDg3ODQsIDB4MDAwMDg3ODQsIDB4MDAwMDg3ODQgfSwKLSAgICB7IDB4MDAwMDlhYjAsIDB4MDAwMGFiOTQsIDB4MDAwMGFiOTQsIDB4MDAwMDhiMDAsIDB4MDAwMDhiMDAsIDB4MDAwMDhiMDAgfSwKLSAgICB7IDB4MDAwMDlhYjQsIDB4MDAwMGFmODAsIDB4MDAwMGFmODAsIDB4MDAwMDhiMDQsIDB4MDAwMDhiMDQsIDB4MDAwMDhiMDQgfSwKLSAgICB7IDB4MDAwMDlhYjgsIDB4MDAwMGFmODQsIDB4MDAwMGFmODQsIDB4MDAwMDhiMDgsIDB4MDAwMDhiMDgsIDB4MDAwMDhiMDggfSwKLSAgICB7IDB4MDAwMDlhYmMsIDB4MDAwMGFmODgsIDB4MDAwMGFmODgsIDB4MDAwMDhiMGMsIDB4MDAwMDhiMGMsIDB4MDAwMDhiMGMgfSwKLSAgICB7IDB4MDAwMDlhYzAsIDB4MDAwMGFmOGMsIDB4MDAwMGFmOGMsIDB4MDAwMDhiODAsIDB4MDAwMDhiODAsIDB4MDAwMDhiODAgfSwKLSAgICB7IDB4MDAwMDlhYzQsIDB4MDAwMGFmOTAsIDB4MDAwMGFmOTAsIDB4MDAwMDhiODQsIDB4MDAwMDhiODQsIDB4MDAwMDhiODQgfSwKLSAgICB7IDB4MDAwMDlhYzgsIDB4MDAwMGFmOTQsIDB4MDAwMGFmOTQsIDB4MDAwMDhiODgsIDB4MDAwMDhiODgsIDB4MDAwMDhiODggfSwKLSAgICB7IDB4MDAwMDlhY2MsIDB4MDAwMGIzODAsIDB4MDAwMGIzODAsIDB4MDAwMDhiOGMsIDB4MDAwMDhiOGMsIDB4MDAwMDhiOGMgfSwKLSAgICB7IDB4MDAwMDlhZDAsIDB4MDAwMGIzODQsIDB4MDAwMGIzODQsIDB4MDAwMDhiOTAsIDB4MDAwMDhiOTAsIDB4MDAwMDhiOTAgfSwKLSAgICB7IDB4MDAwMDlhZDQsIDB4MDAwMGIzODgsIDB4MDAwMGIzODgsIDB4MDAwMDhmODAsIDB4MDAwMDhmODAsIDB4MDAwMDhmODAgfSwKLSAgICB7IDB4MDAwMDlhZDgsIDB4MDAwMGIzOGMsIDB4MDAwMGIzOGMsIDB4MDAwMDhmODQsIDB4MDAwMDhmODQsIDB4MDAwMDhmODQgfSwKLSAgICB7IDB4MDAwMDlhZGMsIDB4MDAwMGIzOTAsIDB4MDAwMGIzOTAsIDB4MDAwMDhmODgsIDB4MDAwMDhmODgsIDB4MDAwMDhmODggfSwKLSAgICB7IDB4MDAwMDlhZTAsIDB4MDAwMGIzOTQsIDB4MDAwMGIzOTQsIDB4MDAwMDhmOGMsIDB4MDAwMDhmOGMsIDB4MDAwMDhmOGMgfSwKLSAgICB7IDB4MDAwMDlhZTQsIDB4MDAwMGIzOTgsIDB4MDAwMGIzOTgsIDB4MDAwMDhmOTAsIDB4MDAwMDhmOTAsIDB4MDAwMDhmOTAgfSwKLSAgICB7IDB4MDAwMDlhZTgsIDB4MDAwMGI3ODAsIDB4MDAwMGI3ODAsIDB4MDAwMDkzMTAsIDB4MDAwMDkzMTAsIDB4MDAwMDkzMTAgfSwKLSAgICB7IDB4MDAwMDlhZWMsIDB4MDAwMGI3ODQsIDB4MDAwMGI3ODQsIDB4MDAwMDkzMTQsIDB4MDAwMDkzMTQsIDB4MDAwMDkzMTQgfSwKLSAgICB7IDB4MDAwMDlhZjAsIDB4MDAwMGI3ODgsIDB4MDAwMGI3ODgsIDB4MDAwMDkzMjAsIDB4MDAwMDkzMjAsIDB4MDAwMDkzMjAgfSwKLSAgICB7IDB4MDAwMDlhZjQsIDB4MDAwMGI3OGMsIDB4MDAwMGI3OGMsIDB4MDAwMDkzMjQsIDB4MDAwMDkzMjQsIDB4MDAwMDkzMjQgfSwKLSAgICB7IDB4MDAwMDlhZjgsIDB4MDAwMGI3OTAsIDB4MDAwMGI3OTAsIDB4MDAwMDkzMjgsIDB4MDAwMDkzMjgsIDB4MDAwMDkzMjggfSwKLSAgICB7IDB4MDAwMDlhZmMsIDB4MDAwMGI3OTQsIDB4MDAwMGI3OTQsIDB4MDAwMDkzMmMsIDB4MDAwMDkzMmMsIDB4MDAwMDkzMmMgfSwKLSAgICB7IDB4MDAwMDliMDAsIDB4MDAwMGI3OTgsIDB4MDAwMGI3OTgsIDB4MDAwMDkzMzAsIDB4MDAwMDkzMzAsIDB4MDAwMDkzMzAgfSwKLSAgICB7IDB4MDAwMDliMDQsIDB4MDAwMGQ3ODQsIDB4MDAwMGQ3ODQsIDB4MDAwMDkzMzQsIDB4MDAwMDkzMzQsIDB4MDAwMDkzMzQgfSwKLSAgICB7IDB4MDAwMDliMDgsIDB4MDAwMGQ3ODgsIDB4MDAwMGQ3ODgsIDB4MDAwMDkzMjEsIDB4MDAwMDkzMjEsIDB4MDAwMDkzMjEgfSwKLSAgICB7IDB4MDAwMDliMGMsIDB4MDAwMGQ3OGMsIDB4MDAwMGQ3OGMsIDB4MDAwMDkzMjUsIDB4MDAwMDkzMjUsIDB4MDAwMDkzMjUgfSwKLSAgICB7IDB4MDAwMDliMTAsIDB4MDAwMGQ3OTAsIDB4MDAwMGQ3OTAsIDB4MDAwMDkzMjksIDB4MDAwMDkzMjksIDB4MDAwMDkzMjkgfSwKLSAgICB7IDB4MDAwMDliMTQsIDB4MDAwMGY3ODAsIDB4MDAwMGY3ODAsIDB4MDAwMDkzMmQsIDB4MDAwMDkzMmQsIDB4MDAwMDkzMmQgfSwKLSAgICB7IDB4MDAwMDliMTgsIDB4MDAwMGY3ODQsIDB4MDAwMGY3ODQsIDB4MDAwMDkzMzEsIDB4MDAwMDkzMzEsIDB4MDAwMDkzMzEgfSwKLSAgICB7IDB4MDAwMDliMWMsIDB4MDAwMGY3ODgsIDB4MDAwMGY3ODgsIDB4MDAwMDkzMzUsIDB4MDAwMDkzMzUsIDB4MDAwMDkzMzUgfSwKLSAgICB7IDB4MDAwMDliMjAsIDB4MDAwMGY3OGMsIDB4MDAwMGY3OGMsIDB4MDAwMDkzMjIsIDB4MDAwMDkzMjIsIDB4MDAwMDkzMjIgfSwKLSAgICB7IDB4MDAwMDliMjQsIDB4MDAwMGY3OTAsIDB4MDAwMGY3OTAsIDB4MDAwMDkzMjYsIDB4MDAwMDkzMjYsIDB4MDAwMDkzMjYgfSwKLSAgICB7IDB4MDAwMDliMjgsIDB4MDAwMGY3OTQsIDB4MDAwMGY3OTQsIDB4MDAwMDkzMmEsIDB4MDAwMDkzMmEsIDB4MDAwMDkzMmEgfSwKLSAgICB7IDB4MDAwMDliMmMsIDB4MDAwMGY3YTQsIDB4MDAwMGY3YTQsIDB4MDAwMDkzMmUsIDB4MDAwMDkzMmUsIDB4MDAwMDkzMmUgfSwKLSAgICB7IDB4MDAwMDliMzAsIDB4MDAwMGY3YTgsIDB4MDAwMGY3YTgsIDB4MDAwMDkzMzIsIDB4MDAwMDkzMzIsIDB4MDAwMDkzMzIgfSwKLSAgICB7IDB4MDAwMDliMzQsIDB4MDAwMGY3YWMsIDB4MDAwMGY3YWMsIDB4MDAwMDkzMzYsIDB4MDAwMDkzMzYsIDB4MDAwMDkzMzYgfSwKLSAgICB7IDB4MDAwMDliMzgsIDB4MDAwMGY3YjAsIDB4MDAwMGY3YjAsIDB4MDAwMDkzMjMsIDB4MDAwMDkzMjMsIDB4MDAwMDkzMjMgfSwKLSAgICB7IDB4MDAwMDliM2MsIDB4MDAwMGY3YjQsIDB4MDAwMGY3YjQsIDB4MDAwMDkzMjcsIDB4MDAwMDkzMjcsIDB4MDAwMDkzMjcgfSwKLSAgICB7IDB4MDAwMDliNDAsIDB4MDAwMGY3YTEsIDB4MDAwMGY3YTEsIDB4MDAwMDkzMmIsIDB4MDAwMDkzMmIsIDB4MDAwMDkzMmIgfSwKLSAgICB7IDB4MDAwMDliNDQsIDB4MDAwMGY3YTUsIDB4MDAwMGY3YTUsIDB4MDAwMDkzMmYsIDB4MDAwMDkzMmYsIDB4MDAwMDkzMmYgfSwKLSAgICB7IDB4MDAwMDliNDgsIDB4MDAwMGY3YTksIDB4MDAwMGY3YTksIDB4MDAwMDkzMzMsIDB4MDAwMDkzMzMsIDB4MDAwMDkzMzMgfSwKLSAgICB7IDB4MDAwMDliNGMsIDB4MDAwMGY3YWQsIDB4MDAwMGY3YWQsIDB4MDAwMDkzMzcsIDB4MDAwMDkzMzcsIDB4MDAwMDkzMzcgfSwKLSAgICB7IDB4MDAwMDliNTAsIDB4MDAwMGY3YjEsIDB4MDAwMGY3YjEsIDB4MDAwMDkzNDMsIDB4MDAwMDkzNDMsIDB4MDAwMDkzNDMgfSwKLSAgICB7IDB4MDAwMDliNTQsIDB4MDAwMGY3YjUsIDB4MDAwMGY3YjUsIDB4MDAwMDkzNDcsIDB4MDAwMDkzNDcsIDB4MDAwMDkzNDcgfSwKLSAgICB7IDB4MDAwMDliNTgsIDB4MDAwMGY3YzUsIDB4MDAwMGY3YzUsIDB4MDAwMDkzNGIsIDB4MDAwMDkzNGIsIDB4MDAwMDkzNGIgfSwKLSAgICB7IDB4MDAwMDliNWMsIDB4MDAwMGY3YzksIDB4MDAwMGY3YzksIDB4MDAwMDkzNGYsIDB4MDAwMDkzNGYsIDB4MDAwMDkzNGYgfSwKLSAgICB7IDB4MDAwMDliNjAsIDB4MDAwMGY3Y2QsIDB4MDAwMGY3Y2QsIDB4MDAwMDkzNTMsIDB4MDAwMDkzNTMsIDB4MDAwMDkzNTMgfSwKLSAgICB7IDB4MDAwMDliNjQsIDB4MDAwMGY3ZDEsIDB4MDAwMGY3ZDEsIDB4MDAwMDkzNTcsIDB4MDAwMDkzNTcsIDB4MDAwMDkzNTcgfSwKLSAgICB7IDB4MDAwMDliNjgsIDB4MDAwMGY3ZDUsIDB4MDAwMGY3ZDUsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliNmMsIDB4MDAwMGY3YzIsIDB4MDAwMGY3YzIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliNzAsIDB4MDAwMGY3YzYsIDB4MDAwMGY3YzYsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliNzQsIDB4MDAwMGY3Y2EsIDB4MDAwMGY3Y2EsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliNzgsIDB4MDAwMGY3Y2UsIDB4MDAwMGY3Y2UsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliN2MsIDB4MDAwMGY3ZDIsIDB4MDAwMGY3ZDIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliODAsIDB4MDAwMGY3ZDYsIDB4MDAwMGY3ZDYsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliODQsIDB4MDAwMGY3YzMsIDB4MDAwMGY3YzMsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliODgsIDB4MDAwMGY3YzcsIDB4MDAwMGY3YzcsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliOGMsIDB4MDAwMGY3Y2IsIDB4MDAwMGY3Y2IsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliOTAsIDB4MDAwMGY3ZDMsIDB4MDAwMGY3ZDMsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliOTQsIDB4MDAwMGY3ZDcsIDB4MDAwMGY3ZDcsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliOTgsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliOWMsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliYTAsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliYTQsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliYTgsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliYWMsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliYjAsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliYjQsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliYjgsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliYmMsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliYzAsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliYzQsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliYzgsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliY2MsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliZDAsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliZDQsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliZDgsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliZGMsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliZTAsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliZTQsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliZTgsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliZWMsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliZjAsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliZjQsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliZjgsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDliZmMsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIgfSwKLSAgICB7IDB4MDAwMDk4NDgsIDB4MDAwMDEwNjYsIDB4MDAwMDEwNjYsIDB4MDAwMDEwNWEsIDB4MDAwMDEwNWEsIDB4MDAwMDEwNWEgfSwKLSAgICB7IDB4MDAwMGE4NDgsIDB4MDAwMDEwNjYsIDB4MDAwMDEwNjYsIDB4MDAwMDEwNWEsIDB4MDAwMDEwNWEsIDB4MDAwMDEwNWEgfSwKKwl7MHgwMDAwOWEwMCwgMHgwMDAwODE4NCwgMHgwMDAwODE4NCwgMHgwMDAwMDI5MCwgMHgwMDAwMDI5MCwgMHgwMDAwMDI5MH0sCisJezB4MDAwMDlhMDQsIDB4MDAwMDgxODgsIDB4MDAwMDgxODgsIDB4MDAwMDAzMDAsIDB4MDAwMDAzMDAsIDB4MDAwMDAzMDB9LAorCXsweDAwMDA5YTA4LCAweDAwMDA4MThjLCAweDAwMDA4MThjLCAweDAwMDAwMzA0LCAweDAwMDAwMzA0LCAweDAwMDAwMzA0fSwKKwl7MHgwMDAwOWEwYywgMHgwMDAwODE5MCwgMHgwMDAwODE5MCwgMHgwMDAwMDMwOCwgMHgwMDAwMDMwOCwgMHgwMDAwMDMwOH0sCisJezB4MDAwMDlhMTAsIDB4MDAwMDgxOTQsIDB4MDAwMDgxOTQsIDB4MDAwMDAzMGMsIDB4MDAwMDAzMGMsIDB4MDAwMDAzMGN9LAorCXsweDAwMDA5YTE0LCAweDAwMDA4MjAwLCAweDAwMDA4MjAwLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwfSwKKwl7MHgwMDAwOWExOCwgMHgwMDAwODIwNCwgMHgwMDAwODIwNCwgMHgwMDAwODAwNCwgMHgwMDAwODAwNCwgMHgwMDAwODAwNH0sCisJezB4MDAwMDlhMWMsIDB4MDAwMDgyMDgsIDB4MDAwMDgyMDgsIDB4MDAwMDgwMDgsIDB4MDAwMDgwMDgsIDB4MDAwMDgwMDh9LAorCXsweDAwMDA5YTIwLCAweDAwMDA4MjBjLCAweDAwMDA4MjBjLCAweDAwMDA4MDBjLCAweDAwMDA4MDBjLCAweDAwMDA4MDBjfSwKKwl7MHgwMDAwOWEyNCwgMHgwMDAwODIxMCwgMHgwMDAwODIxMCwgMHgwMDAwODA4MCwgMHgwMDAwODA4MCwgMHgwMDAwODA4MH0sCisJezB4MDAwMDlhMjgsIDB4MDAwMDgyMTQsIDB4MDAwMDgyMTQsIDB4MDAwMDgwODQsIDB4MDAwMDgwODQsIDB4MDAwMDgwODR9LAorCXsweDAwMDA5YTJjLCAweDAwMDA4MjgwLCAweDAwMDA4MjgwLCAweDAwMDA4MDg4LCAweDAwMDA4MDg4LCAweDAwMDA4MDg4fSwKKwl7MHgwMDAwOWEzMCwgMHgwMDAwODI4NCwgMHgwMDAwODI4NCwgMHgwMDAwODA4YywgMHgwMDAwODA4YywgMHgwMDAwODA4Y30sCisJezB4MDAwMDlhMzQsIDB4MDAwMDgyODgsIDB4MDAwMDgyODgsIDB4MDAwMDgxMDAsIDB4MDAwMDgxMDAsIDB4MDAwMDgxMDB9LAorCXsweDAwMDA5YTM4LCAweDAwMDA4MjhjLCAweDAwMDA4MjhjLCAweDAwMDA4MTA0LCAweDAwMDA4MTA0LCAweDAwMDA4MTA0fSwKKwl7MHgwMDAwOWEzYywgMHgwMDAwODI5MCwgMHgwMDAwODI5MCwgMHgwMDAwODEwOCwgMHgwMDAwODEwOCwgMHgwMDAwODEwOH0sCisJezB4MDAwMDlhNDAsIDB4MDAwMDgzMDAsIDB4MDAwMDgzMDAsIDB4MDAwMDgxMGMsIDB4MDAwMDgxMGMsIDB4MDAwMDgxMGN9LAorCXsweDAwMDA5YTQ0LCAweDAwMDA4MzA0LCAweDAwMDA4MzA0LCAweDAwMDA4MTEwLCAweDAwMDA4MTEwLCAweDAwMDA4MTEwfSwKKwl7MHgwMDAwOWE0OCwgMHgwMDAwODMwOCwgMHgwMDAwODMwOCwgMHgwMDAwODExNCwgMHgwMDAwODExNCwgMHgwMDAwODExNH0sCisJezB4MDAwMDlhNGMsIDB4MDAwMDgzMGMsIDB4MDAwMDgzMGMsIDB4MDAwMDgxODAsIDB4MDAwMDgxODAsIDB4MDAwMDgxODB9LAorCXsweDAwMDA5YTUwLCAweDAwMDA4MzEwLCAweDAwMDA4MzEwLCAweDAwMDA4MTg0LCAweDAwMDA4MTg0LCAweDAwMDA4MTg0fSwKKwl7MHgwMDAwOWE1NCwgMHgwMDAwODMxNCwgMHgwMDAwODMxNCwgMHgwMDAwODE4OCwgMHgwMDAwODE4OCwgMHgwMDAwODE4OH0sCisJezB4MDAwMDlhNTgsIDB4MDAwMDgzODAsIDB4MDAwMDgzODAsIDB4MDAwMDgxOGMsIDB4MDAwMDgxOGMsIDB4MDAwMDgxOGN9LAorCXsweDAwMDA5YTVjLCAweDAwMDA4Mzg0LCAweDAwMDA4Mzg0LCAweDAwMDA4MTkwLCAweDAwMDA4MTkwLCAweDAwMDA4MTkwfSwKKwl7MHgwMDAwOWE2MCwgMHgwMDAwODM4OCwgMHgwMDAwODM4OCwgMHgwMDAwODE5NCwgMHgwMDAwODE5NCwgMHgwMDAwODE5NH0sCisJezB4MDAwMDlhNjQsIDB4MDAwMDgzOGMsIDB4MDAwMDgzOGMsIDB4MDAwMDgxYTAsIDB4MDAwMDgxYTAsIDB4MDAwMDgxYTB9LAorCXsweDAwMDA5YTY4LCAweDAwMDA4MzkwLCAweDAwMDA4MzkwLCAweDAwMDA4MjBjLCAweDAwMDA4MjBjLCAweDAwMDA4MjBjfSwKKwl7MHgwMDAwOWE2YywgMHgwMDAwODM5NCwgMHgwMDAwODM5NCwgMHgwMDAwODFhOCwgMHgwMDAwODFhOCwgMHgwMDAwODFhOH0sCisJezB4MDAwMDlhNzAsIDB4MDAwMGEzODAsIDB4MDAwMGEzODAsIDB4MDAwMDgyODQsIDB4MDAwMDgyODQsIDB4MDAwMDgyODR9LAorCXsweDAwMDA5YTc0LCAweDAwMDBhMzg0LCAweDAwMDBhMzg0LCAweDAwMDA4Mjg4LCAweDAwMDA4Mjg4LCAweDAwMDA4Mjg4fSwKKwl7MHgwMDAwOWE3OCwgMHgwMDAwYTM4OCwgMHgwMDAwYTM4OCwgMHgwMDAwODIyNCwgMHgwMDAwODIyNCwgMHgwMDAwODIyNH0sCisJezB4MDAwMDlhN2MsIDB4MDAwMGEzOGMsIDB4MDAwMGEzOGMsIDB4MDAwMDgyOTAsIDB4MDAwMDgyOTAsIDB4MDAwMDgyOTB9LAorCXsweDAwMDA5YTgwLCAweDAwMDBhMzkwLCAweDAwMDBhMzkwLCAweDAwMDA4MzAwLCAweDAwMDA4MzAwLCAweDAwMDA4MzAwfSwKKwl7MHgwMDAwOWE4NCwgMHgwMDAwYTM5NCwgMHgwMDAwYTM5NCwgMHgwMDAwODMwNCwgMHgwMDAwODMwNCwgMHgwMDAwODMwNH0sCisJezB4MDAwMDlhODgsIDB4MDAwMGE3ODAsIDB4MDAwMGE3ODAsIDB4MDAwMDgzMDgsIDB4MDAwMDgzMDgsIDB4MDAwMDgzMDh9LAorCXsweDAwMDA5YThjLCAweDAwMDBhNzg0LCAweDAwMDBhNzg0LCAweDAwMDA4MzBjLCAweDAwMDA4MzBjLCAweDAwMDA4MzBjfSwKKwl7MHgwMDAwOWE5MCwgMHgwMDAwYTc4OCwgMHgwMDAwYTc4OCwgMHgwMDAwODM4MCwgMHgwMDAwODM4MCwgMHgwMDAwODM4MH0sCisJezB4MDAwMDlhOTQsIDB4MDAwMGE3OGMsIDB4MDAwMGE3OGMsIDB4MDAwMDgzODQsIDB4MDAwMDgzODQsIDB4MDAwMDgzODR9LAorCXsweDAwMDA5YTk4LCAweDAwMDBhNzkwLCAweDAwMDBhNzkwLCAweDAwMDA4NzAwLCAweDAwMDA4NzAwLCAweDAwMDA4NzAwfSwKKwl7MHgwMDAwOWE5YywgMHgwMDAwYTc5NCwgMHgwMDAwYTc5NCwgMHgwMDAwODcwNCwgMHgwMDAwODcwNCwgMHgwMDAwODcwNH0sCisJezB4MDAwMDlhYTAsIDB4MDAwMGFiODQsIDB4MDAwMGFiODQsIDB4MDAwMDg3MDgsIDB4MDAwMDg3MDgsIDB4MDAwMDg3MDh9LAorCXsweDAwMDA5YWE0LCAweDAwMDBhYjg4LCAweDAwMDBhYjg4LCAweDAwMDA4NzBjLCAweDAwMDA4NzBjLCAweDAwMDA4NzBjfSwKKwl7MHgwMDAwOWFhOCwgMHgwMDAwYWI4YywgMHgwMDAwYWI4YywgMHgwMDAwODc4MCwgMHgwMDAwODc4MCwgMHgwMDAwODc4MH0sCisJezB4MDAwMDlhYWMsIDB4MDAwMGFiOTAsIDB4MDAwMGFiOTAsIDB4MDAwMDg3ODQsIDB4MDAwMDg3ODQsIDB4MDAwMDg3ODR9LAorCXsweDAwMDA5YWIwLCAweDAwMDBhYjk0LCAweDAwMDBhYjk0LCAweDAwMDA4YjAwLCAweDAwMDA4YjAwLCAweDAwMDA4YjAwfSwKKwl7MHgwMDAwOWFiNCwgMHgwMDAwYWY4MCwgMHgwMDAwYWY4MCwgMHgwMDAwOGIwNCwgMHgwMDAwOGIwNCwgMHgwMDAwOGIwNH0sCisJezB4MDAwMDlhYjgsIDB4MDAwMGFmODQsIDB4MDAwMGFmODQsIDB4MDAwMDhiMDgsIDB4MDAwMDhiMDgsIDB4MDAwMDhiMDh9LAorCXsweDAwMDA5YWJjLCAweDAwMDBhZjg4LCAweDAwMDBhZjg4LCAweDAwMDA4YjBjLCAweDAwMDA4YjBjLCAweDAwMDA4YjBjfSwKKwl7MHgwMDAwOWFjMCwgMHgwMDAwYWY4YywgMHgwMDAwYWY4YywgMHgwMDAwOGI4MCwgMHgwMDAwOGI4MCwgMHgwMDAwOGI4MH0sCisJezB4MDAwMDlhYzQsIDB4MDAwMGFmOTAsIDB4MDAwMGFmOTAsIDB4MDAwMDhiODQsIDB4MDAwMDhiODQsIDB4MDAwMDhiODR9LAorCXsweDAwMDA5YWM4LCAweDAwMDBhZjk0LCAweDAwMDBhZjk0LCAweDAwMDA4Yjg4LCAweDAwMDA4Yjg4LCAweDAwMDA4Yjg4fSwKKwl7MHgwMDAwOWFjYywgMHgwMDAwYjM4MCwgMHgwMDAwYjM4MCwgMHgwMDAwOGI4YywgMHgwMDAwOGI4YywgMHgwMDAwOGI4Y30sCisJezB4MDAwMDlhZDAsIDB4MDAwMGIzODQsIDB4MDAwMGIzODQsIDB4MDAwMDhiOTAsIDB4MDAwMDhiOTAsIDB4MDAwMDhiOTB9LAorCXsweDAwMDA5YWQ0LCAweDAwMDBiMzg4LCAweDAwMDBiMzg4LCAweDAwMDA4ZjgwLCAweDAwMDA4ZjgwLCAweDAwMDA4ZjgwfSwKKwl7MHgwMDAwOWFkOCwgMHgwMDAwYjM4YywgMHgwMDAwYjM4YywgMHgwMDAwOGY4NCwgMHgwMDAwOGY4NCwgMHgwMDAwOGY4NH0sCisJezB4MDAwMDlhZGMsIDB4MDAwMGIzOTAsIDB4MDAwMGIzOTAsIDB4MDAwMDhmODgsIDB4MDAwMDhmODgsIDB4MDAwMDhmODh9LAorCXsweDAwMDA5YWUwLCAweDAwMDBiMzk0LCAweDAwMDBiMzk0LCAweDAwMDA4ZjhjLCAweDAwMDA4ZjhjLCAweDAwMDA4ZjhjfSwKKwl7MHgwMDAwOWFlNCwgMHgwMDAwYjM5OCwgMHgwMDAwYjM5OCwgMHgwMDAwOGY5MCwgMHgwMDAwOGY5MCwgMHgwMDAwOGY5MH0sCisJezB4MDAwMDlhZTgsIDB4MDAwMGI3ODAsIDB4MDAwMGI3ODAsIDB4MDAwMDkzMTAsIDB4MDAwMDkzMTAsIDB4MDAwMDkzMTB9LAorCXsweDAwMDA5YWVjLCAweDAwMDBiNzg0LCAweDAwMDBiNzg0LCAweDAwMDA5MzE0LCAweDAwMDA5MzE0LCAweDAwMDA5MzE0fSwKKwl7MHgwMDAwOWFmMCwgMHgwMDAwYjc4OCwgMHgwMDAwYjc4OCwgMHgwMDAwOTMyMCwgMHgwMDAwOTMyMCwgMHgwMDAwOTMyMH0sCisJezB4MDAwMDlhZjQsIDB4MDAwMGI3OGMsIDB4MDAwMGI3OGMsIDB4MDAwMDkzMjQsIDB4MDAwMDkzMjQsIDB4MDAwMDkzMjR9LAorCXsweDAwMDA5YWY4LCAweDAwMDBiNzkwLCAweDAwMDBiNzkwLCAweDAwMDA5MzI4LCAweDAwMDA5MzI4LCAweDAwMDA5MzI4fSwKKwl7MHgwMDAwOWFmYywgMHgwMDAwYjc5NCwgMHgwMDAwYjc5NCwgMHgwMDAwOTMyYywgMHgwMDAwOTMyYywgMHgwMDAwOTMyY30sCisJezB4MDAwMDliMDAsIDB4MDAwMGI3OTgsIDB4MDAwMGI3OTgsIDB4MDAwMDkzMzAsIDB4MDAwMDkzMzAsIDB4MDAwMDkzMzB9LAorCXsweDAwMDA5YjA0LCAweDAwMDBkNzg0LCAweDAwMDBkNzg0LCAweDAwMDA5MzM0LCAweDAwMDA5MzM0LCAweDAwMDA5MzM0fSwKKwl7MHgwMDAwOWIwOCwgMHgwMDAwZDc4OCwgMHgwMDAwZDc4OCwgMHgwMDAwOTMyMSwgMHgwMDAwOTMyMSwgMHgwMDAwOTMyMX0sCisJezB4MDAwMDliMGMsIDB4MDAwMGQ3OGMsIDB4MDAwMGQ3OGMsIDB4MDAwMDkzMjUsIDB4MDAwMDkzMjUsIDB4MDAwMDkzMjV9LAorCXsweDAwMDA5YjEwLCAweDAwMDBkNzkwLCAweDAwMDBkNzkwLCAweDAwMDA5MzI5LCAweDAwMDA5MzI5LCAweDAwMDA5MzI5fSwKKwl7MHgwMDAwOWIxNCwgMHgwMDAwZjc4MCwgMHgwMDAwZjc4MCwgMHgwMDAwOTMyZCwgMHgwMDAwOTMyZCwgMHgwMDAwOTMyZH0sCisJezB4MDAwMDliMTgsIDB4MDAwMGY3ODQsIDB4MDAwMGY3ODQsIDB4MDAwMDkzMzEsIDB4MDAwMDkzMzEsIDB4MDAwMDkzMzF9LAorCXsweDAwMDA5YjFjLCAweDAwMDBmNzg4LCAweDAwMDBmNzg4LCAweDAwMDA5MzM1LCAweDAwMDA5MzM1LCAweDAwMDA5MzM1fSwKKwl7MHgwMDAwOWIyMCwgMHgwMDAwZjc4YywgMHgwMDAwZjc4YywgMHgwMDAwOTMyMiwgMHgwMDAwOTMyMiwgMHgwMDAwOTMyMn0sCisJezB4MDAwMDliMjQsIDB4MDAwMGY3OTAsIDB4MDAwMGY3OTAsIDB4MDAwMDkzMjYsIDB4MDAwMDkzMjYsIDB4MDAwMDkzMjZ9LAorCXsweDAwMDA5YjI4LCAweDAwMDBmNzk0LCAweDAwMDBmNzk0LCAweDAwMDA5MzJhLCAweDAwMDA5MzJhLCAweDAwMDA5MzJhfSwKKwl7MHgwMDAwOWIyYywgMHgwMDAwZjdhNCwgMHgwMDAwZjdhNCwgMHgwMDAwOTMyZSwgMHgwMDAwOTMyZSwgMHgwMDAwOTMyZX0sCisJezB4MDAwMDliMzAsIDB4MDAwMGY3YTgsIDB4MDAwMGY3YTgsIDB4MDAwMDkzMzIsIDB4MDAwMDkzMzIsIDB4MDAwMDkzMzJ9LAorCXsweDAwMDA5YjM0LCAweDAwMDBmN2FjLCAweDAwMDBmN2FjLCAweDAwMDA5MzM2LCAweDAwMDA5MzM2LCAweDAwMDA5MzM2fSwKKwl7MHgwMDAwOWIzOCwgMHgwMDAwZjdiMCwgMHgwMDAwZjdiMCwgMHgwMDAwOTMyMywgMHgwMDAwOTMyMywgMHgwMDAwOTMyM30sCisJezB4MDAwMDliM2MsIDB4MDAwMGY3YjQsIDB4MDAwMGY3YjQsIDB4MDAwMDkzMjcsIDB4MDAwMDkzMjcsIDB4MDAwMDkzMjd9LAorCXsweDAwMDA5YjQwLCAweDAwMDBmN2ExLCAweDAwMDBmN2ExLCAweDAwMDA5MzJiLCAweDAwMDA5MzJiLCAweDAwMDA5MzJifSwKKwl7MHgwMDAwOWI0NCwgMHgwMDAwZjdhNSwgMHgwMDAwZjdhNSwgMHgwMDAwOTMyZiwgMHgwMDAwOTMyZiwgMHgwMDAwOTMyZn0sCisJezB4MDAwMDliNDgsIDB4MDAwMGY3YTksIDB4MDAwMGY3YTksIDB4MDAwMDkzMzMsIDB4MDAwMDkzMzMsIDB4MDAwMDkzMzN9LAorCXsweDAwMDA5YjRjLCAweDAwMDBmN2FkLCAweDAwMDBmN2FkLCAweDAwMDA5MzM3LCAweDAwMDA5MzM3LCAweDAwMDA5MzM3fSwKKwl7MHgwMDAwOWI1MCwgMHgwMDAwZjdiMSwgMHgwMDAwZjdiMSwgMHgwMDAwOTM0MywgMHgwMDAwOTM0MywgMHgwMDAwOTM0M30sCisJezB4MDAwMDliNTQsIDB4MDAwMGY3YjUsIDB4MDAwMGY3YjUsIDB4MDAwMDkzNDcsIDB4MDAwMDkzNDcsIDB4MDAwMDkzNDd9LAorCXsweDAwMDA5YjU4LCAweDAwMDBmN2M1LCAweDAwMDBmN2M1LCAweDAwMDA5MzRiLCAweDAwMDA5MzRiLCAweDAwMDA5MzRifSwKKwl7MHgwMDAwOWI1YywgMHgwMDAwZjdjOSwgMHgwMDAwZjdjOSwgMHgwMDAwOTM0ZiwgMHgwMDAwOTM0ZiwgMHgwMDAwOTM0Zn0sCisJezB4MDAwMDliNjAsIDB4MDAwMGY3Y2QsIDB4MDAwMGY3Y2QsIDB4MDAwMDkzNTMsIDB4MDAwMDkzNTMsIDB4MDAwMDkzNTN9LAorCXsweDAwMDA5YjY0LCAweDAwMDBmN2QxLCAweDAwMDBmN2QxLCAweDAwMDA5MzU3LCAweDAwMDA5MzU3LCAweDAwMDA5MzU3fSwKKwl7MHgwMDAwOWI2OCwgMHgwMDAwZjdkNSwgMHgwMDAwZjdkNSwgMHgwMDAwOTM1YiwgMHgwMDAwOTM1YiwgMHgwMDAwOTM1Yn0sCisJezB4MDAwMDliNmMsIDB4MDAwMGY3YzIsIDB4MDAwMGY3YzIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWJ9LAorCXsweDAwMDA5YjcwLCAweDAwMDBmN2M2LCAweDAwMDBmN2M2LCAweDAwMDA5MzViLCAweDAwMDA5MzViLCAweDAwMDA5MzVifSwKKwl7MHgwMDAwOWI3NCwgMHgwMDAwZjdjYSwgMHgwMDAwZjdjYSwgMHgwMDAwOTM1YiwgMHgwMDAwOTM1YiwgMHgwMDAwOTM1Yn0sCisJezB4MDAwMDliNzgsIDB4MDAwMGY3Y2UsIDB4MDAwMGY3Y2UsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWJ9LAorCXsweDAwMDA5YjdjLCAweDAwMDBmN2QyLCAweDAwMDBmN2QyLCAweDAwMDA5MzViLCAweDAwMDA5MzViLCAweDAwMDA5MzVifSwKKwl7MHgwMDAwOWI4MCwgMHgwMDAwZjdkNiwgMHgwMDAwZjdkNiwgMHgwMDAwOTM1YiwgMHgwMDAwOTM1YiwgMHgwMDAwOTM1Yn0sCisJezB4MDAwMDliODQsIDB4MDAwMGY3YzMsIDB4MDAwMGY3YzMsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWJ9LAorCXsweDAwMDA5Yjg4LCAweDAwMDBmN2M3LCAweDAwMDBmN2M3LCAweDAwMDA5MzViLCAweDAwMDA5MzViLCAweDAwMDA5MzVifSwKKwl7MHgwMDAwOWI4YywgMHgwMDAwZjdjYiwgMHgwMDAwZjdjYiwgMHgwMDAwOTM1YiwgMHgwMDAwOTM1YiwgMHgwMDAwOTM1Yn0sCisJezB4MDAwMDliOTAsIDB4MDAwMGY3ZDMsIDB4MDAwMGY3ZDMsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWJ9LAorCXsweDAwMDA5Yjk0LCAweDAwMDBmN2Q3LCAweDAwMDBmN2Q3LCAweDAwMDA5MzViLCAweDAwMDA5MzViLCAweDAwMDA5MzVifSwKKwl7MHgwMDAwOWI5OCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTM1YiwgMHgwMDAwOTM1YiwgMHgwMDAwOTM1Yn0sCisJezB4MDAwMDliOWMsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWJ9LAorCXsweDAwMDA5YmEwLCAweDAwMDBmN2RiLCAweDAwMDBmN2RiLCAweDAwMDA5MzViLCAweDAwMDA5MzViLCAweDAwMDA5MzVifSwKKwl7MHgwMDAwOWJhNCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTM1YiwgMHgwMDAwOTM1YiwgMHgwMDAwOTM1Yn0sCisJezB4MDAwMDliYTgsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWJ9LAorCXsweDAwMDA5YmFjLCAweDAwMDBmN2RiLCAweDAwMDBmN2RiLCAweDAwMDA5MzViLCAweDAwMDA5MzViLCAweDAwMDA5MzVifSwKKwl7MHgwMDAwOWJiMCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTM1YiwgMHgwMDAwOTM1YiwgMHgwMDAwOTM1Yn0sCisJezB4MDAwMDliYjQsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWJ9LAorCXsweDAwMDA5YmI4LCAweDAwMDBmN2RiLCAweDAwMDBmN2RiLCAweDAwMDA5MzViLCAweDAwMDA5MzViLCAweDAwMDA5MzVifSwKKwl7MHgwMDAwOWJiYywgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTM1YiwgMHgwMDAwOTM1YiwgMHgwMDAwOTM1Yn0sCisJezB4MDAwMDliYzAsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWJ9LAorCXsweDAwMDA5YmM0LCAweDAwMDBmN2RiLCAweDAwMDBmN2RiLCAweDAwMDA5MzViLCAweDAwMDA5MzViLCAweDAwMDA5MzVifSwKKwl7MHgwMDAwOWJjOCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTM1YiwgMHgwMDAwOTM1YiwgMHgwMDAwOTM1Yn0sCisJezB4MDAwMDliY2MsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWJ9LAorCXsweDAwMDA5YmQwLCAweDAwMDBmN2RiLCAweDAwMDBmN2RiLCAweDAwMDA5MzViLCAweDAwMDA5MzViLCAweDAwMDA5MzVifSwKKwl7MHgwMDAwOWJkNCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTM1YiwgMHgwMDAwOTM1YiwgMHgwMDAwOTM1Yn0sCisJezB4MDAwMDliZDgsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWJ9LAorCXsweDAwMDA5YmRjLCAweDAwMDBmN2RiLCAweDAwMDBmN2RiLCAweDAwMDA5MzViLCAweDAwMDA5MzViLCAweDAwMDA5MzVifSwKKwl7MHgwMDAwOWJlMCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTM1YiwgMHgwMDAwOTM1YiwgMHgwMDAwOTM1Yn0sCisJezB4MDAwMDliZTQsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWJ9LAorCXsweDAwMDA5YmU4LCAweDAwMDBmN2RiLCAweDAwMDBmN2RiLCAweDAwMDA5MzViLCAweDAwMDA5MzViLCAweDAwMDA5MzVifSwKKwl7MHgwMDAwOWJlYywgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTM1YiwgMHgwMDAwOTM1YiwgMHgwMDAwOTM1Yn0sCisJezB4MDAwMDliZjAsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWJ9LAorCXsweDAwMDA5YmY0LCAweDAwMDBmN2RiLCAweDAwMDBmN2RiLCAweDAwMDA5MzViLCAweDAwMDA5MzViLCAweDAwMDA5MzVifSwKKwl7MHgwMDAwOWJmOCwgMHgwMDAwZjdkYiwgMHgwMDAwZjdkYiwgMHgwMDAwOTM1YiwgMHgwMDAwOTM1YiwgMHgwMDAwOTM1Yn0sCisJezB4MDAwMDliZmMsIDB4MDAwMGY3ZGIsIDB4MDAwMGY3ZGIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWIsIDB4MDAwMDkzNWJ9LAorCXsweDAwMDA5ODQ4LCAweDAwMDAxMDY2LCAweDAwMDAxMDY2LCAweDAwMDAxMDVhLCAweDAwMDAxMDVhLCAweDAwMDAxMDVhfSwKKwl7MHgwMDAwYTg0OCwgMHgwMDAwMTA2NiwgMHgwMDAwMTA2NiwgMHgwMDAwMTA1YSwgMHgwMDAwMTA1YSwgMHgwMDAwMTA1YX0sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyOTI4ME1vZGVzX2hpZ2hfcG93ZXJfdHhfZ2Fpbl85MjgwXzJbXVs2XSA9IHsKLSAgICB7IDB4MDAwMGEyNzQsIDB4MGExOWU2NTIsIDB4MGExOWU2NTIsIDB4MGExYWE2NTIsIDB4MGExYWE2NTIsIDB4MGExYWE2NTIgfSwKLSAgICB7IDB4MDAwMGEyN2MsIDB4MDUwNzM5Y2UsIDB4MDUwNzM5Y2UsIDB4MDUwNzM5Y2UsIDB4MDUwNzM5Y2UsIDB4MDUwNzM5Y2UgfSwKLSAgICB7IDB4MDAwMGEzMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMDQsIDB4MDAwMDMwMDIsIDB4MDAwMDMwMDIsIDB4MDAwMDQwMDIsIDB4MDAwMDQwMDIsIDB4MDAwMDQwMDIgfSwKLSAgICB7IDB4MDAwMGEzMDgsIDB4MDAwMDYwMDQsIDB4MDAwMDYwMDQsIDB4MDAwMDcwMDgsIDB4MDAwMDcwMDgsIDB4MDAwMDcwMDggfSwKLSAgICB7IDB4MDAwMGEzMGMsIDB4MDAwMGEwMDYsIDB4MDAwMGEwMDYsIDB4MDAwMGMwMTAsIDB4MDAwMGMwMTAsIDB4MDAwMGMwMTAgfSwKLSAgICB7IDB4MDAwMGEzMTAsIDB4MDAwMGUwMTIsIDB4MDAwMGUwMTIsIDB4MDAwMTAwMTIsIDB4MDAwMTAwMTIsIDB4MDAwMTAwMTIgfSwKLSAgICB7IDB4MDAwMGEzMTQsIDB4MDAwMTEwMTQsIDB4MDAwMTEwMTQsIDB4MDAwMTMwMTQsIDB4MDAwMTMwMTQsIDB4MDAwMTMwMTQgfSwKLSAgICB7IDB4MDAwMGEzMTgsIDB4MDAwMTUwNGEsIDB4MDAwMTUwNGEsIDB4MDAwMTgyMGEsIDB4MDAwMTgyMGEsIDB4MDAwMTgyMGEgfSwKLSAgICB7IDB4MDAwMGEzMWMsIDB4MDAwMTkwNGMsIDB4MDAwMTkwNGMsIDB4MDAwMWIyMTEsIDB4MDAwMWIyMTEsIDB4MDAwMWIyMTEgfSwKLSAgICB7IDB4MDAwMGEzMjAsIDB4MDAwMWMwNGUsIDB4MDAwMWMwNGUsIDB4MDAwMWUyMTMsIDB4MDAwMWUyMTMsIDB4MDAwMWUyMTMgfSwKLSAgICB7IDB4MDAwMGEzMjQsIDB4MDAwMjEwOTIsIDB4MDAwMjEwOTIsIDB4MDAwMjI0MTEsIDB4MDAwMjI0MTEsIDB4MDAwMjI0MTEgfSwKLSAgICB7IDB4MDAwMGEzMjgsIDB4MDAwMjUxMGEsIDB4MDAwMjUxMGEsIDB4MDAwMjU0MTMsIDB4MDAwMjU0MTMsIDB4MDAwMjU0MTMgfSwKLSAgICB7IDB4MDAwMGEzMmMsIDB4MDAwMjkxMGMsIDB4MDAwMjkxMGMsIDB4MDAwMjk4MTEsIDB4MDAwMjk4MTEsIDB4MDAwMjk4MTEgfSwKLSAgICB7IDB4MDAwMGEzMzAsIDB4MDAwMmMxOGIsIDB4MDAwMmMxOGIsIDB4MDAwMmM4MTMsIDB4MDAwMmM4MTMsIDB4MDAwMmM4MTMgfSwKLSAgICB7IDB4MDAwMGEzMzQsIDB4MDAwMmYxY2MsIDB4MDAwMmYxY2MsIDB4MDAwMzBhMTQsIDB4MDAwMzBhMTQsIDB4MDAwMzBhMTQgfSwKLSAgICB7IDB4MDAwMGEzMzgsIDB4MDAwMzIxZWIsIDB4MDAwMzIxZWIsIDB4MDAwMzVhNTAsIDB4MDAwMzVhNTAsIDB4MDAwMzVhNTAgfSwKLSAgICB7IDB4MDAwMGEzM2MsIDB4MDAwMzQxZWMsIDB4MDAwMzQxZWMsIDB4MDAwMzljNGMsIDB4MDAwMzljNGMsIDB4MDAwMzljNGMgfSwKLSAgICB7IDB4MDAwMGEzNDAsIDB4MDAwMzQxZWMsIDB4MDAwMzQxZWMsIDB4MDAwM2RlOGEsIDB4MDAwM2RlOGEsIDB4MDAwM2RlOGEgfSwKLSAgICB7IDB4MDAwMGEzNDQsIDB4MDAwMzQxZWMsIDB4MDAwMzQxZWMsIDB4MDAwNDJlOTIsIDB4MDAwNDJlOTIsIDB4MDAwNDJlOTIgfSwKLSAgICB7IDB4MDAwMGEzNDgsIDB4MDAwMzQxZWMsIDB4MDAwMzQxZWMsIDB4MDAwNDZlZDIsIDB4MDAwNDZlZDIsIDB4MDAwNDZlZDIgfSwKLSAgICB7IDB4MDAwMGEzNGMsIDB4MDAwMzQxZWMsIDB4MDAwMzQxZWMsIDB4MDAwNGJlZDUsIDB4MDAwNGJlZDUsIDB4MDAwNGJlZDUgfSwKLSAgICB7IDB4MDAwMGEzNTAsIDB4MDAwMzQxZWMsIDB4MDAwMzQxZWMsIDB4MDAwNGZmNTQsIDB4MDAwNGZmNTQsIDB4MDAwNGZmNTQgfSwKLSAgICB7IDB4MDAwMGEzNTQsIDB4MDAwMzQxZWMsIDB4MDAwMzQxZWMsIDB4MDAwNTVmZDUsIDB4MDAwNTVmZDUsIDB4MDAwNTVmZDUgfSwKLSAgICB7IDB4MDAwMDc4MTQsIDB4MDAxOThlZmYsIDB4MDAxOThlZmYsIDB4MDAxOThlZmYsIDB4MDAxOThlZmYsIDB4MDAxOThlZmYgfSwKLSAgICB7IDB4MDAwMDc4MzgsIDB4MDAxOThlZmYsIDB4MDAxOThlZmYsIDB4MDAxOThlZmYsIDB4MDAxOThlZmYsIDB4MDAxOThlZmYgfSwKLSAgICB7IDB4MDAwMDc4MWMsIDB4MDAxNzIwMDAsIDB4MDAxNzIwMDAsIDB4MDAxNzIwMDAsIDB4MDAxNzIwMDAsIDB4MDAxNzIwMDAgfSwKLSAgICB7IDB4MDAwMDc4NDAsIDB4MDAxNzIwMDAsIDB4MDAxNzIwMDAsIDB4MDAxNzIwMDAsIDB4MDAxNzIwMDAsIDB4MDAxNzIwMDAgfSwKLSAgICB7IDB4MDAwMDc4MjAsIDB4ZjI1OGE0ODAsIDB4ZjI1OGE0ODAsIDB4ZjI1OGE0ODAsIDB4ZjI1OGE0ODAsIDB4ZjI1OGE0ODAgfSwKLSAgICB7IDB4MDAwMDc4NDQsIDB4ZjI1OGE0ODAsIDB4ZjI1OGE0ODAsIDB4ZjI1OGE0ODAsIDB4ZjI1OGE0ODAsIDB4ZjI1OGE0ODAgfSwKKwl7MHgwMDAwYTI3NCwgMHgwYTE5ZTY1MiwgMHgwYTE5ZTY1MiwgMHgwYTFhYTY1MiwgMHgwYTFhYTY1MiwgMHgwYTFhYTY1Mn0sCisJezB4MDAwMGEyN2MsIDB4MDUwNzM5Y2UsIDB4MDUwNzM5Y2UsIDB4MDUwNzM5Y2UsIDB4MDUwNzM5Y2UsIDB4MDUwNzM5Y2V9LAorCXsweDAwMDBhMzAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMwNCwgMHgwMDAwMzAwMiwgMHgwMDAwMzAwMiwgMHgwMDAwNDAwMiwgMHgwMDAwNDAwMiwgMHgwMDAwNDAwMn0sCisJezB4MDAwMGEzMDgsIDB4MDAwMDYwMDQsIDB4MDAwMDYwMDQsIDB4MDAwMDcwMDgsIDB4MDAwMDcwMDgsIDB4MDAwMDcwMDh9LAorCXsweDAwMDBhMzBjLCAweDAwMDBhMDA2LCAweDAwMDBhMDA2LCAweDAwMDBjMDEwLCAweDAwMDBjMDEwLCAweDAwMDBjMDEwfSwKKwl7MHgwMDAwYTMxMCwgMHgwMDAwZTAxMiwgMHgwMDAwZTAxMiwgMHgwMDAxMDAxMiwgMHgwMDAxMDAxMiwgMHgwMDAxMDAxMn0sCisJezB4MDAwMGEzMTQsIDB4MDAwMTEwMTQsIDB4MDAwMTEwMTQsIDB4MDAwMTMwMTQsIDB4MDAwMTMwMTQsIDB4MDAwMTMwMTR9LAorCXsweDAwMDBhMzE4LCAweDAwMDE1MDRhLCAweDAwMDE1MDRhLCAweDAwMDE4MjBhLCAweDAwMDE4MjBhLCAweDAwMDE4MjBhfSwKKwl7MHgwMDAwYTMxYywgMHgwMDAxOTA0YywgMHgwMDAxOTA0YywgMHgwMDAxYjIxMSwgMHgwMDAxYjIxMSwgMHgwMDAxYjIxMX0sCisJezB4MDAwMGEzMjAsIDB4MDAwMWMwNGUsIDB4MDAwMWMwNGUsIDB4MDAwMWUyMTMsIDB4MDAwMWUyMTMsIDB4MDAwMWUyMTN9LAorCXsweDAwMDBhMzI0LCAweDAwMDIxMDkyLCAweDAwMDIxMDkyLCAweDAwMDIyNDExLCAweDAwMDIyNDExLCAweDAwMDIyNDExfSwKKwl7MHgwMDAwYTMyOCwgMHgwMDAyNTEwYSwgMHgwMDAyNTEwYSwgMHgwMDAyNTQxMywgMHgwMDAyNTQxMywgMHgwMDAyNTQxM30sCisJezB4MDAwMGEzMmMsIDB4MDAwMjkxMGMsIDB4MDAwMjkxMGMsIDB4MDAwMjk4MTEsIDB4MDAwMjk4MTEsIDB4MDAwMjk4MTF9LAorCXsweDAwMDBhMzMwLCAweDAwMDJjMThiLCAweDAwMDJjMThiLCAweDAwMDJjODEzLCAweDAwMDJjODEzLCAweDAwMDJjODEzfSwKKwl7MHgwMDAwYTMzNCwgMHgwMDAyZjFjYywgMHgwMDAyZjFjYywgMHgwMDAzMGExNCwgMHgwMDAzMGExNCwgMHgwMDAzMGExNH0sCisJezB4MDAwMGEzMzgsIDB4MDAwMzIxZWIsIDB4MDAwMzIxZWIsIDB4MDAwMzVhNTAsIDB4MDAwMzVhNTAsIDB4MDAwMzVhNTB9LAorCXsweDAwMDBhMzNjLCAweDAwMDM0MWVjLCAweDAwMDM0MWVjLCAweDAwMDM5YzRjLCAweDAwMDM5YzRjLCAweDAwMDM5YzRjfSwKKwl7MHgwMDAwYTM0MCwgMHgwMDAzNDFlYywgMHgwMDAzNDFlYywgMHgwMDAzZGU4YSwgMHgwMDAzZGU4YSwgMHgwMDAzZGU4YX0sCisJezB4MDAwMGEzNDQsIDB4MDAwMzQxZWMsIDB4MDAwMzQxZWMsIDB4MDAwNDJlOTIsIDB4MDAwNDJlOTIsIDB4MDAwNDJlOTJ9LAorCXsweDAwMDBhMzQ4LCAweDAwMDM0MWVjLCAweDAwMDM0MWVjLCAweDAwMDQ2ZWQyLCAweDAwMDQ2ZWQyLCAweDAwMDQ2ZWQyfSwKKwl7MHgwMDAwYTM0YywgMHgwMDAzNDFlYywgMHgwMDAzNDFlYywgMHgwMDA0YmVkNSwgMHgwMDA0YmVkNSwgMHgwMDA0YmVkNX0sCisJezB4MDAwMGEzNTAsIDB4MDAwMzQxZWMsIDB4MDAwMzQxZWMsIDB4MDAwNGZmNTQsIDB4MDAwNGZmNTQsIDB4MDAwNGZmNTR9LAorCXsweDAwMDBhMzU0LCAweDAwMDM0MWVjLCAweDAwMDM0MWVjLCAweDAwMDU1ZmQ1LCAweDAwMDU1ZmQ1LCAweDAwMDU1ZmQ1fSwKKwl7MHgwMDAwYTNlYywgMHgwMGY3MDA4MSwgMHgwMGY3MDA4MSwgMHgwMGY3MDA4MSwgMHgwMGY3MDA4MSwgMHgwMGY3MDA4MX0sCisJezB4MDAwMDc4MTQsIDB4MDAxOThlZmYsIDB4MDAxOThlZmYsIDB4MDAxOThlZmYsIDB4MDAxOThlZmYsIDB4MDAxOThlZmZ9LAorCXsweDAwMDA3ODM4LCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmfSwKKwl7MHgwMDAwNzgxYywgMHgwMDE3MjAwMCwgMHgwMDE3MjAwMCwgMHgwMDE3MjAwMCwgMHgwMDE3MjAwMCwgMHgwMDE3MjAwMH0sCisJezB4MDAwMDc4NDAsIDB4MDAxNzIwMDAsIDB4MDAxNzIwMDAsIDB4MDAxNzIwMDAsIDB4MDAxNzIwMDAsIDB4MDAxNzIwMDB9LAorCXsweDAwMDA3ODIwLCAweGYyNThhNDgwLCAweGYyNThhNDgwLCAweGYyNThhNDgwLCAweGYyNThhNDgwLCAweGYyNThhNDgwfSwKKwl7MHgwMDAwNzg0NCwgMHhmMjU4YTQ4MCwgMHhmMjU4YTQ4MCwgMHhmMjU4YTQ4MCwgMHhmMjU4YTQ4MCwgMHhmMjU4YTQ4MH0sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyOTI4ME1vZGVzX29yaWdpbmFsX3R4X2dhaW5fOTI4MF8yW11bNl0gPSB7Ci0gICAgeyAweDAwMDBhMjc0LCAweDBhMTljNjUyLCAweDBhMTljNjUyLCAweDBhMWFhNjUyLCAweDBhMWFhNjUyLCAweDBhMWFhNjUyIH0sCi0gICAgeyAweDAwMDBhMjdjLCAweDA1MDcwMWNlLCAweDA1MDcwMWNlLCAweDA1MDcwMWNlLCAweDA1MDcwMWNlLCAweDA1MDcwMWNlIH0sCi0gICAgeyAweDAwMDBhMzAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzA0LCAweDAwMDAzMDAyLCAweDAwMDAzMDAyLCAweDAwMDAzMDAyLCAweDAwMDAzMDAyLCAweDAwMDAzMDAyIH0sCi0gICAgeyAweDAwMDBhMzA4LCAweDAwMDA2MDA0LCAweDAwMDA2MDA0LCAweDAwMDA4MDA5LCAweDAwMDA4MDA5LCAweDAwMDA4MDA5IH0sCi0gICAgeyAweDAwMDBhMzBjLCAweDAwMDBhMDA2LCAweDAwMDBhMDA2LCAweDAwMDBiMDBiLCAweDAwMDBiMDBiLCAweDAwMDBiMDBiIH0sCi0gICAgeyAweDAwMDBhMzEwLCAweDAwMDBlMDEyLCAweDAwMDBlMDEyLCAweDAwMDBlMDEyLCAweDAwMDBlMDEyLCAweDAwMDBlMDEyIH0sCi0gICAgeyAweDAwMDBhMzE0LCAweDAwMDExMDE0LCAweDAwMDExMDE0LCAweDAwMDEyMDQ4LCAweDAwMDEyMDQ4LCAweDAwMDEyMDQ4IH0sCi0gICAgeyAweDAwMDBhMzE4LCAweDAwMDE1MDRhLCAweDAwMDE1MDRhLCAweDAwMDE2MDRhLCAweDAwMDE2MDRhLCAweDAwMDE2MDRhIH0sCi0gICAgeyAweDAwMDBhMzFjLCAweDAwMDE5MDRjLCAweDAwMDE5MDRjLCAweDAwMDFhMjExLCAweDAwMDFhMjExLCAweDAwMDFhMjExIH0sCi0gICAgeyAweDAwMDBhMzIwLCAweDAwMDFjMDRlLCAweDAwMDFjMDRlLCAweDAwMDFlMjEzLCAweDAwMDFlMjEzLCAweDAwMDFlMjEzIH0sCi0gICAgeyAweDAwMDBhMzI0LCAweDAwMDIwMDkyLCAweDAwMDIwMDkyLCAweDAwMDIxMjFiLCAweDAwMDIxMjFiLCAweDAwMDIxMjFiIH0sCi0gICAgeyAweDAwMDBhMzI4LCAweDAwMDI0MTBhLCAweDAwMDI0MTBhLCAweDAwMDI0NDEyLCAweDAwMDI0NDEyLCAweDAwMDI0NDEyIH0sCi0gICAgeyAweDAwMDBhMzJjLCAweDAwMDI3MTBjLCAweDAwMDI3MTBjLCAweDAwMDI4NDE0LCAweDAwMDI4NDE0LCAweDAwMDI4NDE0IH0sCi0gICAgeyAweDAwMDBhMzMwLCAweDAwMDJiMThiLCAweDAwMDJiMThiLCAweDAwMDJiNDRhLCAweDAwMDJiNDRhLCAweDAwMDJiNDRhIH0sCi0gICAgeyAweDAwMDBhMzM0LCAweDAwMDJlMWNjLCAweDAwMDJlMWNjLCAweDAwMDMwNjQ5LCAweDAwMDMwNjQ5LCAweDAwMDMwNjQ5IH0sCi0gICAgeyAweDAwMDBhMzM4LCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDMzNjRiLCAweDAwMDMzNjRiLCAweDAwMDMzNjRiIH0sCi0gICAgeyAweDAwMDBhMzNjLCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDM4YTQ5LCAweDAwMDM4YTQ5LCAweDAwMDM4YTQ5IH0sCi0gICAgeyAweDAwMDBhMzQwLCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDNiZTQ4LCAweDAwMDNiZTQ4LCAweDAwMDNiZTQ4IH0sCi0gICAgeyAweDAwMDBhMzQ0LCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDNlZTRhLCAweDAwMDNlZTRhLCAweDAwMDNlZTRhIH0sCi0gICAgeyAweDAwMDBhMzQ4LCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDQyZTg4LCAweDAwMDQyZTg4LCAweDAwMDQyZTg4IH0sCi0gICAgeyAweDAwMDBhMzRjLCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDQ2ZThhLCAweDAwMDQ2ZThhLCAweDAwMDQ2ZThhIH0sCi0gICAgeyAweDAwMDBhMzUwLCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDQ5ZWM5LCAweDAwMDQ5ZWM5LCAweDAwMDQ5ZWM5IH0sCi0gICAgeyAweDAwMDBhMzU0LCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDRiZjQyLCAweDAwMDRiZjQyLCAweDAwMDRiZjQyIH0sCi0gICAgeyAweDAwMDA3ODE0LCAweDAwMTliZWZmLCAweDAwMTliZWZmLCAweDAwMTliZWZmLCAweDAwMTliZWZmLCAweDAwMTliZWZmIH0sCi0gICAgeyAweDAwMDA3ODM4LCAweDAwMTliZWZmLCAweDAwMTliZWZmLCAweDAwMTliZWZmLCAweDAwMTliZWZmLCAweDAwMTliZWZmIH0sCi0gICAgeyAweDAwMDA3ODFjLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwIH0sCi0gICAgeyAweDAwMDA3ODQwLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwIH0sCi0gICAgeyAweDAwMDA3ODIwLCAweDkyNTkyNDgwLCAweDkyNTkyNDgwLCAweDkyNTkyNDgwLCAweDkyNTkyNDgwLCAweDkyNTkyNDgwIH0sCi0gICAgeyAweDAwMDA3ODQ0LCAweDkyNTkyNDgwLCAweDkyNTkyNDgwLCAweDkyNTkyNDgwLCAweDkyNTkyNDgwLCAweDkyNTkyNDgwIH0sCisJezB4MDAwMGEyNzQsIDB4MGExOWM2NTIsIDB4MGExOWM2NTIsIDB4MGExYWE2NTIsIDB4MGExYWE2NTIsIDB4MGExYWE2NTJ9LAorCXsweDAwMDBhMjdjLCAweDA1MDcwMWNlLCAweDA1MDcwMWNlLCAweDA1MDcwMWNlLCAweDA1MDcwMWNlLCAweDA1MDcwMWNlfSwKKwl7MHgwMDAwYTMwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMDQsIDB4MDAwMDMwMDIsIDB4MDAwMDMwMDIsIDB4MDAwMDMwMDIsIDB4MDAwMDMwMDIsIDB4MDAwMDMwMDJ9LAorCXsweDAwMDBhMzA4LCAweDAwMDA2MDA0LCAweDAwMDA2MDA0LCAweDAwMDA4MDA5LCAweDAwMDA4MDA5LCAweDAwMDA4MDA5fSwKKwl7MHgwMDAwYTMwYywgMHgwMDAwYTAwNiwgMHgwMDAwYTAwNiwgMHgwMDAwYjAwYiwgMHgwMDAwYjAwYiwgMHgwMDAwYjAwYn0sCisJezB4MDAwMGEzMTAsIDB4MDAwMGUwMTIsIDB4MDAwMGUwMTIsIDB4MDAwMGUwMTIsIDB4MDAwMGUwMTIsIDB4MDAwMGUwMTJ9LAorCXsweDAwMDBhMzE0LCAweDAwMDExMDE0LCAweDAwMDExMDE0LCAweDAwMDEyMDQ4LCAweDAwMDEyMDQ4LCAweDAwMDEyMDQ4fSwKKwl7MHgwMDAwYTMxOCwgMHgwMDAxNTA0YSwgMHgwMDAxNTA0YSwgMHgwMDAxNjA0YSwgMHgwMDAxNjA0YSwgMHgwMDAxNjA0YX0sCisJezB4MDAwMGEzMWMsIDB4MDAwMTkwNGMsIDB4MDAwMTkwNGMsIDB4MDAwMWEyMTEsIDB4MDAwMWEyMTEsIDB4MDAwMWEyMTF9LAorCXsweDAwMDBhMzIwLCAweDAwMDFjMDRlLCAweDAwMDFjMDRlLCAweDAwMDFlMjEzLCAweDAwMDFlMjEzLCAweDAwMDFlMjEzfSwKKwl7MHgwMDAwYTMyNCwgMHgwMDAyMDA5MiwgMHgwMDAyMDA5MiwgMHgwMDAyMTIxYiwgMHgwMDAyMTIxYiwgMHgwMDAyMTIxYn0sCisJezB4MDAwMGEzMjgsIDB4MDAwMjQxMGEsIDB4MDAwMjQxMGEsIDB4MDAwMjQ0MTIsIDB4MDAwMjQ0MTIsIDB4MDAwMjQ0MTJ9LAorCXsweDAwMDBhMzJjLCAweDAwMDI3MTBjLCAweDAwMDI3MTBjLCAweDAwMDI4NDE0LCAweDAwMDI4NDE0LCAweDAwMDI4NDE0fSwKKwl7MHgwMDAwYTMzMCwgMHgwMDAyYjE4YiwgMHgwMDAyYjE4YiwgMHgwMDAyYjQ0YSwgMHgwMDAyYjQ0YSwgMHgwMDAyYjQ0YX0sCisJezB4MDAwMGEzMzQsIDB4MDAwMmUxY2MsIDB4MDAwMmUxY2MsIDB4MDAwMzA2NDksIDB4MDAwMzA2NDksIDB4MDAwMzA2NDl9LAorCXsweDAwMDBhMzM4LCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDMzNjRiLCAweDAwMDMzNjRiLCAweDAwMDMzNjRifSwKKwl7MHgwMDAwYTMzYywgMHgwMDAzMjFlYywgMHgwMDAzMjFlYywgMHgwMDAzOGE0OSwgMHgwMDAzOGE0OSwgMHgwMDAzOGE0OX0sCisJezB4MDAwMGEzNDAsIDB4MDAwMzIxZWMsIDB4MDAwMzIxZWMsIDB4MDAwM2JlNDgsIDB4MDAwM2JlNDgsIDB4MDAwM2JlNDh9LAorCXsweDAwMDBhMzQ0LCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDNlZTRhLCAweDAwMDNlZTRhLCAweDAwMDNlZTRhfSwKKwl7MHgwMDAwYTM0OCwgMHgwMDAzMjFlYywgMHgwMDAzMjFlYywgMHgwMDA0MmU4OCwgMHgwMDA0MmU4OCwgMHgwMDA0MmU4OH0sCisJezB4MDAwMGEzNGMsIDB4MDAwMzIxZWMsIDB4MDAwMzIxZWMsIDB4MDAwNDZlOGEsIDB4MDAwNDZlOGEsIDB4MDAwNDZlOGF9LAorCXsweDAwMDBhMzUwLCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDQ5ZWM5LCAweDAwMDQ5ZWM5LCAweDAwMDQ5ZWM5fSwKKwl7MHgwMDAwYTM1NCwgMHgwMDAzMjFlYywgMHgwMDAzMjFlYywgMHgwMDA0YmY0MiwgMHgwMDA0YmY0MiwgMHgwMDA0YmY0Mn0sCisJezB4MDAwMGEzZWMsIDB4MDBmNzAwODEsIDB4MDBmNzAwODEsIDB4MDBmNzAwODEsIDB4MDBmNzAwODEsIDB4MDBmNzAwODF9LAorCXsweDAwMDA3ODE0LCAweDAwMTliZWZmLCAweDAwMTliZWZmLCAweDAwMTliZWZmLCAweDAwMTliZWZmLCAweDAwMTliZWZmfSwKKwl7MHgwMDAwNzgzOCwgMHgwMDE5YmVmZiwgMHgwMDE5YmVmZiwgMHgwMDE5YmVmZiwgMHgwMDE5YmVmZiwgMHgwMDE5YmVmZn0sCisJezB4MDAwMDc4MWMsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDB9LAorCXsweDAwMDA3ODQwLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwfSwKKwl7MHgwMDAwNzgyMCwgMHg5MjU5MjQ4MCwgMHg5MjU5MjQ4MCwgMHg5MjU5MjQ4MCwgMHg5MjU5MjQ4MCwgMHg5MjU5MjQ4MH0sCisJezB4MDAwMDc4NDQsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODB9LAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBhcjkyODBQY2llUGh5X2Nsa3JlcV9vZmZfTDFfOTI4MFtdWzJdID0gewotICAgIHsweDAwMDA0MDQwLCAgMHg5MjQ4ZmQwMCB9LAotICAgIHsweDAwMDA0MDQwLCAgMHgyNDkyNDkyNCB9LAotICAgIHsweDAwMDA0MDQwLCAgMHhhODAwMDAxOSB9LAotICAgIHsweDAwMDA0MDQwLCAgMHgxMzE2MDgyMCB9LAotICAgIHsweDAwMDA0MDQwLCAgMHhlNTk4MDU2MCB9LAotICAgIHsweDAwMDA0MDQwLCAgMHhjMDFkY2ZmYyB9LAotICAgIHsweDAwMDA0MDQwLCAgMHgxYWFhYmU0MSB9LAotICAgIHsweDAwMDA0MDQwLCAgMHhiZTEwNTU1NCB9LAotICAgIHsweDAwMDA0MDQwLCAgMHgwMDA0MzAwNyB9LAotICAgIHsweDAwMDA0MDQ0LCAgMHgwMDAwMDAwMCB9LAorCS8qIEFkZHIgICAgICBhbGxtb2RlcyAgKi8KKwl7MHgwMDAwNDA0MCwgMHg5MjQ4ZmQwMH0sCisJezB4MDAwMDQwNDAsIDB4MjQ5MjQ5MjR9LAorCXsweDAwMDA0MDQwLCAweGE4MDAwMDE5fSwKKwl7MHgwMDAwNDA0MCwgMHgxMzE2MDgyMH0sCisJezB4MDAwMDQwNDAsIDB4ZTU5ODA1NjB9LAorCXsweDAwMDA0MDQwLCAweGMwMWRjZmZjfSwKKwl7MHgwMDAwNDA0MCwgMHgxYWFhYmU0MX0sCisJezB4MDAwMDQwNDAsIDB4YmUxMDU1NTR9LAorCXsweDAwMDA0MDQwLCAweDAwMDQzMDA3fSwKKwl7MHgwMDAwNDA0NCwgMHgwMDAwMDAwMH0sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyOTI4MFBjaWVQaHlfY2xrcmVxX2Fsd2F5c19vbl9MMV85MjgwW11bMl0gPSB7Ci0gICAgezB4MDAwMDQwNDAsICAweDkyNDhmZDAwIH0sCi0gICAgezB4MDAwMDQwNDAsICAweDI0OTI0OTI0IH0sCi0gICAgezB4MDAwMDQwNDAsICAweGE4MDAwMDE5IH0sCi0gICAgezB4MDAwMDQwNDAsICAweDEzMTYwODIwIH0sCi0gICAgezB4MDAwMDQwNDAsICAweGU1OTgwNTYwIH0sCi0gICAgezB4MDAwMDQwNDAsICAweGMwMWRjZmZkIH0sCi0gICAgezB4MDAwMDQwNDAsICAweDFhYWFiZTQxIH0sCi0gICAgezB4MDAwMDQwNDAsICAweGJlMTA1NTU0IH0sCi0gICAgezB4MDAwMDQwNDAsICAweDAwMDQzMDA3IH0sCi0gICAgezB4MDAwMDQwNDQsICAweDAwMDAwMDAwIH0sCi19OwotCi0vKiBBUjkyODUgUmV2c2lvbiAxMCovCi1zdGF0aWMgY29uc3QgdTMyIGFyOTI4NU1vZGVzXzkyODVbXVs2XSA9IHsKLSAgICB7IDB4MDAwMDEwMzAsIDB4MDAwMDAyMzAsIDB4MDAwMDA0NjAsIDB4MDAwMDAyYzAsIDB4MDAwMDAxNjAsIDB4MDAwMDAxZTAgfSwKLSAgICB7IDB4MDAwMDEwNzAsIDB4MDAwMDAxNjgsIDB4MDAwMDAyZDAsIDB4MDAwMDAzMTgsIDB4MDAwMDAxOGMsIDB4MDAwMDAxZTAgfSwKLSAgICB7IDB4MDAwMDEwYjAsIDB4MDAwMDBlNjAsIDB4MDAwMDFjYzAsIDB4MDAwMDdjNzAsIDB4MDAwMDNlMzgsIDB4MDAwMDExODAgfSwKLSAgICB7IDB4MDAwMDEwZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMDgwMTQsIDB4MDNlODAzZTgsIDB4MDdkMDA3ZDAsIDB4MTA4MDE2MDAsIDB4MDg0MDBiMDAsIDB4MDZlMDA2ZTAgfSwKLSAgICB7IDB4MDAwMDgwMWMsIDB4MTI4ZDgwMjcsIDB4MTI4ZDgwNGYsIDB4MTJlMDAwNTcsIDB4MTJlMDAwMmIsIDB4MDk4ODAwNGYgfSwKLSAgICB7IDB4MDAwMDgzMTgsIDB4MDAwMDNlODAsIDB4MDAwMDdkMDAsIDB4MDAwMDY4ODAsIDB4MDAwMDM0NDAsIDB4MDAwMDY4ODAgfSwKLSAgICB7IDB4MDAwMDk4MDQsIDB4MDAwMDAzMDAsIDB4MDAwMDAzYzQsIDB4MDAwMDAzYzQsIDB4MDAwMDAzMDAsIDB4MDAwMDAzMDMgfSwKLSAgICB7IDB4MDAwMDk4MjAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAgfSwKLSAgICB7IDB4MDAwMDk4MjQsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSwKLSAgICB7IDB4MDAwMDk4MjgsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEgfSwKLSAgICB7IDB4MDAwMDk4MzQsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSwKLSAgICB7IDB4MDAwMDk4MzgsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcgfSwKLSAgICB7IDB4MDAwMDk4NDAsIDB4MjA2YTAxMmUsIDB4MjA2YTAxMmUsIDB4MjA2YTAxMmUsIDB4MjA2YTAxMmUsIDB4MjA2YTAxMmUgfSwKLSAgICB7IDB4MDAwMDk4NDQsIDB4MDM3MjE2MWUsIDB4MDM3MjE2MWUsIDB4MDM3MjAwMjAsIDB4MDM3MjAwMjAsIDB4MDM3MjE2YTAgfSwKLSAgICB7IDB4MDAwMDk4NDgsIDB4MDAwMDEwNjYsIDB4MDAwMDEwNjYsIDB4MDAwMDAwNGUsIDB4MDAwMDAwNGUsIDB4MDAwMDEwNTkgfSwKLSAgICB7IDB4MDAwMDk4NTAsIDB4NmQ0MDAwZTIsIDB4NmQ0MDAwZTIsIDB4NmQ0MDAwZTIsIDB4NmQ0MDAwZTIsIDB4NmQ0MDAwZTIgfSwKLSAgICB7IDB4MDAwMDk4NTgsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUgfSwKLSAgICB7IDB4MDAwMDk4NWMsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzNjYwNWUsIDB4MzEzNjYwNWUsIDB4MzEzOTYwNWUgfSwKLSAgICB7IDB4MDAwMDk4NjAsIDB4MDAwNThkMTgsIDB4MDAwNThkMTgsIDB4MDAwNThkMjAsIDB4MDAwNThkMjAsIDB4MDAwNThkMTggfSwKLSAgICB7IDB4MDAwMDk4NjQsIDB4MDAwMGZlMDAsIDB4MDAwMGZlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAgfSwKLSAgICB7IDB4MDAwMDk4NjgsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDAgfSwKLSAgICB7IDB4MDAwMDk4NmMsIDB4MDY5MDMwODEsIDB4MDY5MDMwODEsIDB4MDY5MDM4ODEsIDB4MDY5MDM4ODEsIDB4MDY5MDM4ODEgfSwKLSAgICB7IDB4MDAwMDk5MTQsIDB4MDAwMDA3ZDAsIDB4MDAwMDBmYTAsIDB4MDAwMDExMzAsIDB4MDAwMDA4OTgsIDB4MDAwMDA3ZDAgfSwKLSAgICB7IDB4MDAwMDk5MTgsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTYsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMTYgfSwKLSAgICB7IDB4MDAwMDk5MjQsIDB4ZDAwYTgwMDcsIDB4ZDAwYTgwMDcsIDB4ZDAwYTgwMGQsIDB4ZDAwYTgwMGQsIDB4ZDAwYTgwMGQgfSwKLSAgICB7IDB4MDAwMDk5NDQsIDB4ZGZiYzEwMTAsIDB4ZGZiYzEwMTAsIDB4ZGZiYzEwMjAsIDB4ZGZiYzEwMjAsIDB4ZGZiYzEwMTAgfSwKLSAgICB7IDB4MDAwMDk5NjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5NjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5YjgsIDB4MDBjZjRkMWMsIDB4MDBjZjRkMWMsIDB4MDBjZjRkMWMsIDB4MDBjZjRkMWMsIDB4MDBjZjRkMWMgfSwKLSAgICB7IDB4MDAwMDk5YmMsIDB4MDAwMDA2MDAsIDB4MDAwMDA2MDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAgfSwKLSAgICB7IDB4MDAwMDk5YzAsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQgfSwKLSAgICB7IDB4MDAwMDk5YzQsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcgfSwKLSAgICB7IDB4MDAwMDk5YzgsIDB4NjBmNjUzMjksIDB4NjBmNjUzMjksIDB4NjBmNjUzMjksIDB4NjBmNjUzMjksIDB4NjBmNjUzMjkgfSwKLSAgICB7IDB4MDAwMDk5Y2MsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzggfSwKLSAgICB7IDB4MDAwMDk5ZDAsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQgfSwKLSAgICB7IDB4MDAwMDk5ZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5ZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwODQsIDB4MDAwNjgwODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwODgsIDB4MDAwNjgwODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwOGMsIDB4MDAwNjgwOGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMDAsIDB4MDAwNjgxMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMDQsIDB4MDAwNjgxMDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMDgsIDB4MDAwNjgxMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMGMsIDB4MDAwNjgxMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMTAsIDB4MDAwNjgxMTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMTQsIDB4MDAwNjgxMTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxODAsIDB4MDAwNjgxODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxODQsIDB4MDAwNjgxODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxODgsIDB4MDAwNjgxODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxOGMsIDB4MDAwNjgxOGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxOTAsIDB4MDAwNjgxOTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxOTQsIDB4MDAwNjgxOTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxYTAsIDB4MDAwNjgxYTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyMGMsIDB4MDAwNjgyMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxYTgsIDB4MDAwNjgxYTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyODQsIDB4MDAwNjgyODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyODgsIDB4MDAwNjgyODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyMjAsIDB4MDAwNjgyMjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyOTAsIDB4MDAwNjgyOTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzMDAsIDB4MDAwNjgzMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzMDQsIDB4MDAwNjgzMDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzMDgsIDB4MDAwNjgzMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzMGMsIDB4MDAwNjgzMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzODAsIDB4MDAwNjgzODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzODQsIDB4MDAwNjgzODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3MDAsIDB4MDAwNjg3MDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3MDQsIDB4MDAwNjg3MDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3MDgsIDB4MDAwNjg3MDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3MGMsIDB4MDAwNjg3MGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3ODAsIDB4MDAwNjg3ODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3ODQsIDB4MDAwNjg3ODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiMDQsIDB4MDAwNjhiMDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiMDgsIDB4MDAwNjhiMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiMDgsIDB4MDAwNjhiMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiMGMsIDB4MDAwNjhiMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiODAsIDB4MDAwNjhiODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiODQsIDB4MDAwNjhiODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiODgsIDB4MDAwNjhiODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiOGMsIDB4MDAwNjhiOGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhiOTAsIDB4MDAwYjhiOTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmODAsIDB4MDAwYjhmODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmODQsIDB4MDAwYjhmODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmODgsIDB4MDAwYjhmODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmOGMsIDB4MDAwYjhmOGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmOTAsIDB4MDAwYjhmOTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzMGMsIDB4MDAwYmIzMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzMTAsIDB4MDAwYmIzMTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzODQsIDB4MDAwYmIzODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzODgsIDB4MDAwYmIzODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzMjQsIDB4MDAwYmIzMjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmI3MDQsIDB4MDAwYmI3MDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk2YTQsIDB4MDAwZjk2YTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk2YTgsIDB4MDAwZjk2YTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MTAsIDB4MDAwZjk3MTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MTQsIDB4MDAwZjk3MTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MjAsIDB4MDAwZjk3MjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MjQsIDB4MDAwZjk3MjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MjgsIDB4MDAwZjk3MjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MmMsIDB4MDAwZjk3MmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3YTAsIDB4MDAwZjk3YTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3YTQsIDB4MDAwZjk3YTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YTgsIDB4MDAwZmI3YTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjAsIDB4MDAwZmI3YjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjQsIDB4MDAwZmI3YjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjgsIDB4MDAwZmI3YjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YTUsIDB4MDAwZmI3YTUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YTksIDB4MDAwZmI3YTksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YWQsIDB4MDAwZmI3YWQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjEsIDB4MDAwZmI3YjEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjUsIDB4MDAwZmI3YjUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjksIDB4MDAwZmI3YjksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzUsIDB4MDAwZmI3YzUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzksIDB4MDAwZmI3YzksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDEsIDB4MDAwZmI3ZDEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDUsIDB4MDAwZmI3ZDUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDksIDB4MDAwZmI3ZDksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzYsIDB4MDAwZmI3YzYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3Y2EsIDB4MDAwZmI3Y2EsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3Y2UsIDB4MDAwZmI3Y2UsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDIsIDB4MDAwZmI3ZDIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDYsIDB4MDAwZmI3ZDYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzMsIDB4MDAwZmI3YzMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzcsIDB4MDAwZmI3YzcsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3Y2IsIDB4MDAwZmI3Y2IsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3Y2YsIDB4MDAwZmI3Y2YsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDcsIDB4MDAwZmI3ZDcsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwMWMsIDB4MDAwNjgwMWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwODAsIDB4MDAwNjgwODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwODQsIDB4MDAwNjgwODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwODgsIDB4MDAwNjgwODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwOGMsIDB4MDAwNjgwOGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMDAsIDB4MDAwNjgxMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMDQsIDB4MDAwNjgxMDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMDgsIDB4MDAwNjgxMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMGMsIDB4MDAwNjgxMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMTAsIDB4MDAwNjgxMTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMTAsIDB4MDAwNjgxMTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxODAsIDB4MDAwNjgxODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxODQsIDB4MDAwNjgxODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxODgsIDB4MDAwNjgxODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxOGMsIDB4MDAwNjgxOGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxOTAsIDB4MDAwNjgxOTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxOTQsIDB4MDAwNjgxOTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxYTAsIDB4MDAwNjgxYTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyMGMsIDB4MDAwNjgyMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxYTgsIDB4MDAwNjgxYTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxYWMsIDB4MDAwNjgxYWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyMWMsIDB4MDAwNjgyMWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyMjQsIDB4MDAwNjgyMjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyOTAsIDB4MDAwNjgyOTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzMDAsIDB4MDAwNjgzMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzMDgsIDB4MDAwNjgzMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzMGMsIDB4MDAwNjgzMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzMTAsIDB4MDAwNjgzMTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3ODgsIDB4MDAwNjg3ODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3OGMsIDB4MDAwNjg3OGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3OTAsIDB4MDAwNjg3OTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3OTQsIDB4MDAwNjg3OTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3OTgsIDB4MDAwNjg3OTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3OWMsIDB4MDAwNjg3OWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiODksIDB4MDAwNjhiODksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiOGQsIDB4MDAwNjhiOGQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiOTEsIDB4MDAwNjhiOTEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiOTUsIDB4MDAwNjhiOTUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiOTksIDB4MDAwNjhiOTksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiYTUsIDB4MDAwNjhiYTUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiYTksIDB4MDAwNjhiYTksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiYWQsIDB4MDAwNjhiYWQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhiMGMsIDB4MDAwYjhiMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmMTAsIDB4MDAwYjhmMTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmMTQsIDB4MDAwYjhmMTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmODQsIDB4MDAwYjhmODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmODQsIDB4MDAwYjhmODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmODgsIDB4MDAwYjhmODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzODAsIDB4MDAwYmIzODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzODQsIDB4MDAwYmIzODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzODgsIDB4MDAwYmIzODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzOGMsIDB4MDAwYmIzOGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzOTQsIDB4MDAwYmIzOTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmI3OTgsIDB4MDAwYmI3OTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MGMsIDB4MDAwZjk3MGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MTAsIDB4MDAwZjk3MTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MTQsIDB4MDAwZjk3MTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MTgsIDB4MDAwZjk3MTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MDUsIDB4MDAwZjk3MDUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MDksIDB4MDAwZjk3MDksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MGQsIDB4MDAwZjk3MGQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MTEsIDB4MDAwZjk3MTEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MTUsIDB4MDAwZjk3MTUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MTksIDB4MDAwZjk3MTksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YTQsIDB4MDAwZmI3YTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YTgsIDB4MDAwZmI3YTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YWMsIDB4MDAwZmI3YWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YWMsIDB4MDAwZmI3YWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjAsIDB4MDAwZmI3YjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjgsIDB4MDAwZmI3YjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YmMsIDB4MDAwZmI3YmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YTEsIDB4MDAwZmI3YTEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YTUsIDB4MDAwZmI3YTUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YTksIDB4MDAwZmI3YTksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjEsIDB4MDAwZmI3YjEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjUsIDB4MDAwZmI3YjUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YmQsIDB4MDAwZmI3YmQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzksIDB4MDAwZmI3YzksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3Y2QsIDB4MDAwZmI3Y2QsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDEsIDB4MDAwZmI3ZDEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDksIDB4MDAwZmI3ZDksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzIsIDB4MDAwZmI3YzIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzYsIDB4MDAwZmI3YzYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3Y2EsIDB4MDAwZmI3Y2EsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3Y2UsIDB4MDAwZmI3Y2UsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDIsIDB4MDAwZmI3ZDIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDYsIDB4MDAwZmI3ZDYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzMsIDB4MDAwZmI3YzMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3Y2IsIDB4MDAwZmI3Y2IsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEyMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGEyMGMsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMWYwMDAgfSwKLSAgICB7IDB4MDAwMGEyMWMsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSwKLSAgICB7IDB4MDAwMGEyMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAyMTAsIDB4MDAwMDAxMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEyNTAsIDB4MDAxZmYwMDAsIDB4MDAxZmYwMDAsIDB4MDAxY2EwMDAsIDB4MDAxY2EwMDAsIDB4MDAxZGEwMDAgfSwKLSAgICB7IDB4MDAwMGEyNzQsIDB4MGE4MWM2NTIsIDB4MGE4MWM2NTIsIDB4MGE4MjA2NTIsIDB4MGE4MjA2NTIsIDB4MGE4MmE2NTIgfSwKLSAgICB7IDB4MDAwMGEzMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDcyMDEsIDB4MDAwMDcyMDEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTA0MDgsIDB4MDAwMTA0MDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTg2MGEsIDB4MDAwMTg2MGEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjA4MTgsIDB4MDAwMjA4MTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjQ4NTgsIDB4MDAwMjQ4NTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjY4NTksIDB4MDAwMjY4NTksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjk4NWIsIDB4MDAwMjk4NWIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmM4OWEsIDB4MDAwMmM4OWEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmU4OWIsIDB4MDAwMmU4OWIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzA4OWMsIDB4MDAwMzA4OWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzI4OWQsIDB4MDAwMzI4OWQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzQ4OWUsIDB4MDAwMzQ4OWUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzg4ZGUsIDB4MDAwMzg4ZGUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwM2I5MWUsIDB4MDAwM2I5MWUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwM2Q5NWUsIDB4MDAwM2Q5NWUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNDE5ZGYsIDB4MDAwNDE5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNDQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNTgsIDB4Nzk5OWFhMDIsIDB4Nzk5OWFhMDIsIDB4Nzk5OWFhMGUsIDB4Nzk5OWFhMGUsIDB4Nzk5OWFhMGUgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5Mjg1Q29tbW9uXzkyODVbXVsyXSA9IHsKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAwMjAwNDUgfSwKLSAgICB7IDB4MDAwMDAwMzQsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDAwMDAwNDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwNDQsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMDAwNDgsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMDAwNGMsIDB4MDAwMDAwMTAgfSwKLSAgICB7IDB4MDAwMDAwNTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwNTQsIDB4MDAwMDAwMWYgfSwKLSAgICB7IDB4MDAwMDA4MDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwNDAsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNDQsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNDgsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNGMsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNTAsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNTQsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNTgsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNWMsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNjAsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNjQsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEyMzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyNzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwMzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwNzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwYjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDExMzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDExNzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDExYjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDExZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyMzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyNzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyYjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEzMzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEzNzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEzYjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEzZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE0MzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE0NzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE0YjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE0ZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE1MzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE1NzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE1YjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE1ZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE2MzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE2NzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE2YjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE2ZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE3MzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE3NzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE3YjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE3ZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwM2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwN2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwYmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwZmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDExM2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDExN2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDExYmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDExZmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyM2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyN2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyYmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyZmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEzM2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEzN2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEzYmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEzZmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE0M2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE0N2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDQwMzAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDQwM2MsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDQwMjQsIDB4MDAwMDAwMWYgfSwKLSAgICB7IDB4MDAwMDQwNjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDQwNjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDcwMTAsIDB4MDAwMDAwMzEgfSwKLSAgICB7IDB4MDAwMDcwMzQsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDcwMzgsIDB4MDAwMDA0YzIgfSwKLSAgICB7IDB4MDAwMDgwMDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwMTgsIDB4MDAwMDA3MDAgfSwKLSAgICB7IDB4MDAwMDgwMjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwMzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwM2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwNDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwNTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwNTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwNWMsIDB4MDAwZmM3OGYgfSwKLSAgICB7IDB4MDAwMDgwNjAsIDB4MDAwMDAwMGYgfSwKLSAgICB7IDB4MDAwMDgwNjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwNzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwYzAsIDB4MmE4MDAwMWEgfSwKLSAgICB7IDB4MDAwMDgwYzQsIDB4MDVkYzAxZTAgfSwKLSAgICB7IDB4MDAwMDgwYzgsIDB4MWY0MDI3MTAgfSwKLSAgICB7IDB4MDAwMDgwY2MsIDB4MDFmNDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwZDAsIDB4MDAwMDFlMDAgfSwKLSAgICB7IDB4MDAwMDgwZDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwZDgsIDB4MDA0MDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwZTAsIDB4ZmZmZmZmZmYgfSwKLSAgICB7IDB4MDAwMDgwZTQsIDB4MDAwMGZmZmYgfSwKLSAgICB7IDB4MDAwMDgwZTgsIDB4MDAzZjNmM2YgfSwKLSAgICB7IDB4MDAwMDgwZWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwZjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwZjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwZmMsIDB4MDAwMjAwMDAgfSwKLSAgICB7IDB4MDAwMDgxMDAsIDB4MDAwMjAwMDAgfSwKLSAgICB7IDB4MDAwMDgxMDQsIDB4MDAwMDAwMDEgfSwKLSAgICB7IDB4MDAwMDgxMDgsIDB4MDAwMDAwNTIgfSwKLSAgICB7IDB4MDAwMDgxMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxMTAsIDB4MDAwMDAxNjggfSwKLSAgICB7IDB4MDAwMDgxMTgsIDB4MDAwMTAwYWEgfSwKLSAgICB7IDB4MDAwMDgxMWMsIDB4MDAwMDMyMTAgfSwKLSAgICB7IDB4MDAwMDgxMjAsIDB4MDhmMDQ4MDAgfSwKLSAgICB7IDB4MDAwMDgxMjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxMjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxMmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxMzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxMzQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxMzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxM2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxNDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxNjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxNmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxNzAsIDB4MzIxNDMzMjAgfSwKLSAgICB7IDB4MDAwMDgxNzQsIDB4ZmFhNGZhNTAgfSwKLSAgICB7IDB4MDAwMDgxNzgsIDB4MDAwMDAxMDAgfSwKLSAgICB7IDB4MDAwMDgxN2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxYzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxZDAsIDB4MDAwMDMyMTAgfSwKLSAgICB7IDB4MDAwMDgxZWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxZjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxZjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxZmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMzQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyM2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyNDAsIDB4MDAxMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyNDQsIDB4MDAxMGY0MDAgfSwKLSAgICB7IDB4MDAwMDgyNDgsIDB4MDAwMDAxMDAgfSwKLSAgICB7IDB4MDAwMDgyNGMsIDB4MDAwMWU4MDAgfSwKLSAgICB7IDB4MDAwMDgyNTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyNTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyNTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyNWMsIDB4NDAwMDAwZmYgfSwKLSAgICB7IDB4MDAwMDgyNjAsIDB4MDAwODA5MjIgfSwKLSAgICB7IDB4MDAwMDgyNjQsIDB4ODhhMDAwMTAgfSwKLSAgICB7IDB4MDAwMDgyNzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyNzQsIDB4NDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyNzgsIDB4MDAzZTQxODAgfSwKLSAgICB7IDB4MDAwMDgyN2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyODQsIDB4MDAwMDAwMmMgfSwKLSAgICB7IDB4MDAwMDgyODgsIDB4MDAwMDAwMmMgfSwKLSAgICB7IDB4MDAwMDgyOGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyOTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyOTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyOWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgzMDAsIDB4MDAwMDAwNDAgfSwKLSAgICB7IDB4MDAwMDgzMTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgzMjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgzMmMsIDB4MDAwMDAwMDEgfSwKLSAgICB7IDB4MDAwMDgzMzAsIDB4MDAwMDAzMDIgfSwKLSAgICB7IDB4MDAwMDgzMzQsIDB4MDAwMDBlMDAgfSwKLSAgICB7IDB4MDAwMDgzMzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgzM2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgzNDAsIDB4MDAwMTAzODAgfSwKLSAgICB7IDB4MDAwMDgzNDQsIDB4MDA0ODEwNDMgfSwKLSAgICB7IDB4MDAwMDk4MDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4MGMsIDB4YWZlNjhlMzAgfSwKLSAgICB7IDB4MDAwMDk4MTAsIDB4ZmQxNGUwMDAgfSwKLSAgICB7IDB4MDAwMDk4MTQsIDB4OWMwYTlmNmIgfSwKLSAgICB7IDB4MDAwMDk4MWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4MmMsIDB4MDAwMGEwMDAgfSwKLSAgICB7IDB4MDAwMDk4MzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4M2MsIDB4MDAyMDA0MDAgfSwKLSAgICB7IDB4MDAwMDk4NGMsIDB4MDA0MDIzM2MgfSwKLSAgICB7IDB4MDAwMDk4NTQsIDB4MDAwMDAwNDQgfSwKLSAgICB7IDB4MDAwMDk5MDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5MDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5MDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5MGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5MTAsIDB4MDEwMDIzMTAgfSwKLSAgICB7IDB4MDAwMDk5MWMsIDB4MTAwMDBmZmYgfSwKLSAgICB7IDB4MDAwMDk5MjAsIDB4MDQ5MDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5MjgsIDB4MDAwMDAwMDEgfSwKLSAgICB7IDB4MDAwMDk5MmMsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDk5MzQsIDB4MWUxZjIwMjIgfSwKLSAgICB7IDB4MDAwMDk5MzgsIDB4MGEwYjBjMGQgfSwKLSAgICB7IDB4MDAwMDk5M2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5NDAsIDB4MTQ3NTA2MDQgfSwKLSAgICB7IDB4MDAwMDk5NDgsIDB4OTI4MGMwMGEgfSwKLSAgICB7IDB4MDAwMDk5NGMsIDB4MDAwMjAwMjggfSwKLSAgICB7IDB4MDAwMDk5NTQsIDB4NWYzY2EzZGUgfSwKLSAgICB7IDB4MDAwMDk5NTgsIDB4MjEwOGVjZmYgfSwKLSAgICB7IDB4MDAwMDk5NjgsIDB4MDAwMDAzY2UgfSwKLSAgICB7IDB4MDAwMDk5NzAsIDB4MTkyN2I1MTUgfSwKLSAgICB7IDB4MDAwMDk5NzQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5NzgsIDB4MDAwMDAwMDEgfSwKLSAgICB7IDB4MDAwMDk5N2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5ODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5ODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5ODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5OGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5OTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5OTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5OTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5OWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5YTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5YTQsIDB4MDAwMDAwMDEgfSwKLSAgICB7IDB4MDAwMDk5YTgsIDB4MjAxZmZmMDAgfSwKLSAgICB7IDB4MDAwMDk5YWMsIDB4MmRlZjBhMDAgfSwKLSAgICB7IDB4MDAwMDk5YjAsIDB4MDMwNTEwMDAgfSwKLSAgICB7IDB4MDAwMDk5YjQsIDB4MDAwMDA4MjAgfSwKLSAgICB7IDB4MDAwMDk5ZGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5ZTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5ZTQsIDB4YWFhYWFhYWEgfSwKLSAgICB7IDB4MDAwMDk5ZTgsIDB4M2M0NjY0NzggfSwKLSAgICB7IDB4MDAwMDk5ZWMsIDB4MGNjODBjYWEgfSwKLSAgICB7IDB4MDAwMDk5ZjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEyMDgsIDB4ODAzZTY3ODggfSwKLSAgICB7IDB4MDAwMGEyMTAsIDB4NDA4MGEzMzMgfSwKLSAgICB7IDB4MDAwMGEyMTQsIDB4MDAyMDZjMTAgfSwKLSAgICB7IDB4MDAwMGEyMTgsIDB4MDA5YzQwNjAgfSwKLSAgICB7IDB4MDAwMGEyMjAsIDB4MDE4MzQwNjEgfSwKLSAgICB7IDB4MDAwMGEyMjQsIDB4MDAwMDA0MDAgfSwKLSAgICB7IDB4MDAwMGEyMjgsIDB4MDAwMDAzYjUgfSwKLSAgICB7IDB4MDAwMGEyMmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEyMzQsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEyMzgsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEyNDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEyNDgsIDB4ZmZmZmZmZmMgfSwKLSAgICB7IDB4MDAwMGEyNGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEyNTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEyNTgsIDB4MGNjYjUzODAgfSwKLSAgICB7IDB4MDAwMGEyNWMsIDB4MTUxNTE1MDEgfSwKLSAgICB7IDB4MDAwMGEyNjAsIDB4ZGZhOTBmMDEgfSwKLSAgICB7IDB4MDAwMGEyNjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEyNmMsIDB4MGViYWU5ZTYgfSwKLSAgICB7IDB4MDAwMGQyNzAsIDB4MGQ4MjA4MjAgfSwKLSAgICB7IDB4MDAwMGEyNzgsIDB4MzljZTczOWMgfSwKLSAgICB7IDB4MDAwMGEyN2MsIDB4MDUwZTAzOWMgfSwKLSAgICB7IDB4MDAwMGQzNWMsIDB4MDdmZmZmZWYgfSwKLSAgICB7IDB4MDAwMGQzNjAsIDB4MGZmZmZmZTcgfSwKLSAgICB7IDB4MDAwMGQzNjQsIDB4MTdmZmZmZTUgfSwKLSAgICB7IDB4MDAwMGQzNjgsIDB4MWZmZmZmZTQgfSwKLSAgICB7IDB4MDAwMGQzNmMsIDB4MzdmZmZmZTMgfSwKLSAgICB7IDB4MDAwMGQzNzAsIDB4M2ZmZmZmZTMgfSwKLSAgICB7IDB4MDAwMGQzNzQsIDB4NTdmZmZmZTMgfSwKLSAgICB7IDB4MDAwMGQzNzgsIDB4NWZmZmZmZTIgfSwKLSAgICB7IDB4MDAwMGQzN2MsIDB4N2ZmZmZmZTIgfSwKLSAgICB7IDB4MDAwMGQzODAsIDB4N2YzYzdiYmEgfSwKLSAgICB7IDB4MDAwMGQzODQsIDB4ZjMzMDdmZjAgfSwKLSAgICB7IDB4MDAwMGEzODgsIDB4MGMwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzOGMsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEzOTAsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEzOTQsIDB4MzljZTczOWMgfSwKLSAgICB7IDB4MDAwMGEzOTgsIDB4MDAwMDAzOWMgfSwKLSAgICB7IDB4MDAwMGEzOWMsIDB4MDAwMDAwMDEgfSwKLSAgICB7IDB4MDAwMGEzYTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzYTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzYTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzYWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzYjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzYjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzYjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzYmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzYzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzYzQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzY2MsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEzZDAsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEzZDQsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEzZGMsIDB4MzljZTczOWMgfSwKLSAgICB7IDB4MDAwMGEzZTAsIDB4MDAwMDAzOWMgfSwKLSAgICB7IDB4MDAwMGEzZTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzZTgsIDB4MThjNDM0MzMgfSwKLSAgICB7IDB4MDAwMGEzZWMsIDB4MDBmNzAwODEgfSwKLSAgICB7IDB4MDAwMDc4MDAsIDB4MDAxNDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4MDQsIDB4MGU0NTQ4ZDggfSwKLSAgICB7IDB4MDAwMDc4MDgsIDB4NTQyMTQ1MTQgfSwKLSAgICB7IDB4MDAwMDc4MGMsIDB4MDIwMjU4MjAgfSwKLSAgICB7IDB4MDAwMDc4MTAsIDB4NzFjMGQzODggfSwKLSAgICB7IDB4MDAwMDc4MTQsIDB4OTI0OTM0YTggfSwKLSAgICB7IDB4MDAwMDc4MWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4MjAsIDB4MDAwMDBjMDQgfSwKLSAgICB7IDB4MDAwMDc4MjQsIDB4MDBkODZmZmYgfSwKLSAgICB7IDB4MDAwMDc4MjgsIDB4MjZkMjQ5MWIgfSwKLSAgICB7IDB4MDAwMDc4MmMsIDB4NmUzNmQ5N2IgfSwKLSAgICB7IDB4MDAwMDc4MzAsIDB4ZWRiNmQ5NmMgfSwKLSAgICB7IDB4MDAwMDc4MzQsIDB4NzE0MDAwODYgfSwKLSAgICB7IDB4MDAwMDc4MzgsIDB4ZmFjNjg4MDAgfSwKLSAgICB7IDB4MDAwMDc4M2MsIDB4MDAwMWZmZmUgfSwKLSAgICB7IDB4MDAwMDc4NDAsIDB4ZmZlYjFhMjAgfSwKLSAgICB7IDB4MDAwMDc4NDQsIDB4MDAwYzBkYjYgfSwKLSAgICB7IDB4MDAwMDc4NDgsIDB4NmRiNjFiNmYgfSwKLSAgICB7IDB4MDAwMDc4NGMsIDB4NmQ5YjY2ZGIgfSwKLSAgICB7IDB4MDAwMDc4NTAsIDB4NmQ4YzZkYmEgfSwKLSAgICB7IDB4MDAwMDc4NTQsIDB4MDAwNDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4NTgsIDB4ZGIwMDMwMTIgfSwKLSAgICB7IDB4MDAwMDc4NWMsIDB4MDQ5MjQ5MTQgfSwKLSAgICB7IDB4MDAwMDc4NjAsIDB4MjEwODQyMTAgfSwKLSAgICB7IDB4MDAwMDc4NjQsIDB4ZjdkN2ZmZGUgfSwKLSAgICB7IDB4MDAwMDc4NjgsIDB4YzIwMzQwODAgfSwKLSAgICB7IDB4MDAwMDc4NmMsIDB4NDg2MDllYjQgfSwKLSAgICB7IDB4MDAwMDc4NzAsIDB4MTAxNDJjMDAgfSwKKwkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCisJezB4MDAwMDQwNDAsIDB4OTI0OGZkMDB9LAorCXsweDAwMDA0MDQwLCAweDI0OTI0OTI0fSwKKwl7MHgwMDAwNDA0MCwgMHhhODAwMDAxOX0sCisJezB4MDAwMDQwNDAsIDB4MTMxNjA4MjB9LAorCXsweDAwMDA0MDQwLCAweGU1OTgwNTYwfSwKKwl7MHgwMDAwNDA0MCwgMHhjMDFkY2ZmZH0sCisJezB4MDAwMDQwNDAsIDB4MWFhYWJlNDF9LAorCXsweDAwMDA0MDQwLCAweGJlMTA1NTU0fSwKKwl7MHgwMDAwNDA0MCwgMHgwMDA0MzAwN30sCisJezB4MDAwMDQwNDQsIDB4MDAwMDAwMDB9LAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBhcjkyODVQY2llUGh5X2Nsa3JlcV9hbHdheXNfb25fTDFfOTI4NVtdWzJdID0gewotICAgIHsweDAwMDA0MDQwLCAgMHg5MjQ4ZmQwMCB9LAotICAgIHsweDAwMDA0MDQwLCAgMHgyNDkyNDkyNCB9LAotICAgIHsweDAwMDA0MDQwLCAgMHhhODAwMDAxOSB9LAotICAgIHsweDAwMDA0MDQwLCAgMHgxMzE2MDgyMCB9LAotICAgIHsweDAwMDA0MDQwLCAgMHhlNTk4MDU2MCB9LAotICAgIHsweDAwMDA0MDQwLCAgMHhjMDFkY2ZmZCB9LAotICAgIHsweDAwMDA0MDQwLCAgMHgxYWFhYmU0MSB9LAotICAgIHsweDAwMDA0MDQwLCAgMHhiZTEwNTU1NCB9LAotICAgIHsweDAwMDA0MDQwLCAgMHgwMDA0MzAwNyB9LAotICAgIHsweDAwMDA0MDQ0LCAgMHgwMDAwMDAwMCB9LAorCS8qIEFkZHIgICAgICBhbGxtb2RlcyAgKi8KKwl7MHgwMDAwNDA0MCwgMHg5MjQ4ZmQwMH0sCisJezB4MDAwMDQwNDAsIDB4MjQ5MjQ5MjR9LAorCXsweDAwMDA0MDQwLCAweGE4MDAwMDE5fSwKKwl7MHgwMDAwNDA0MCwgMHgxMzE2MDgyMH0sCisJezB4MDAwMDQwNDAsIDB4ZTU5ODA1NjB9LAorCXsweDAwMDA0MDQwLCAweGMwMWRjZmZkfSwKKwl7MHgwMDAwNDA0MCwgMHgxYWFhYmU0MX0sCisJezB4MDAwMDQwNDAsIDB4YmUxMDU1NTR9LAorCXsweDAwMDA0MDQwLCAweDAwMDQzMDA3fSwKKwl7MHgwMDAwNDA0NCwgMHgwMDAwMDAwMH0sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyOTI4NVBjaWVQaHlfY2xrcmVxX29mZl9MMV85Mjg1W11bMl0gPSB7Ci0gICAgezB4MDAwMDQwNDAsICAweDkyNDhmZDAwIH0sCi0gICAgezB4MDAwMDQwNDAsICAweDI0OTI0OTI0IH0sCi0gICAgezB4MDAwMDQwNDAsICAweGE4MDAwMDE5IH0sCi0gICAgezB4MDAwMDQwNDAsICAweDEzMTYwODIwIH0sCi0gICAgezB4MDAwMDQwNDAsICAweGU1OTgwNTYwIH0sCi0gICAgezB4MDAwMDQwNDAsICAweGMwMWRjZmZjIH0sCi0gICAgezB4MDAwMDQwNDAsICAweDFhYWFiZTQxIH0sCi0gICAgezB4MDAwMDQwNDAsICAweGJlMTA1NTU0IH0sCi0gICAgezB4MDAwMDQwNDAsICAweDAwMDQzMDA3IH0sCi0gICAgezB4MDAwMDQwNDQsICAweDAwMDAwMDAwIH0sCisJLyogQWRkciAgICAgIGFsbG1vZGVzICAqLworCXsweDAwMDA0MDQwLCAweDkyNDhmZDAwfSwKKwl7MHgwMDAwNDA0MCwgMHgyNDkyNDkyNH0sCisJezB4MDAwMDQwNDAsIDB4YTgwMDAwMTl9LAorCXsweDAwMDA0MDQwLCAweDEzMTYwODIwfSwKKwl7MHgwMDAwNDA0MCwgMHhlNTk4MDU2MH0sCisJezB4MDAwMDQwNDAsIDB4YzAxZGNmZmN9LAorCXsweDAwMDA0MDQwLCAweDFhYWFiZTQxfSwKKwl7MHgwMDAwNDA0MCwgMHhiZTEwNTU1NH0sCisJezB4MDAwMDQwNDAsIDB4MDAwNDMwMDd9LAorCXsweDAwMDA0MDQ0LCAweDAwMDAwMDAwfSwKIH07CiAKLS8qIEFSOTI4NSB2MV8yIFBDSSBSZWdpc3RlciBXcml0ZXMuICBDcmVhdGVkOiAwNC8xMy8wOSAqLwogc3RhdGljIGNvbnN0IHUzMiBhcjkyODVNb2Rlc185Mjg1XzFfMltdWzZdID0gewotICAgIC8qIEFkZHJlc3MgICAgICA1Ry1IVDIwICAgICA1Ry1IVDQwICAgICAyRy1IVDQwICAgICAyRy1IVDIwICAgICBUdXJibyAgICovCi0gICAgeyAweDAwMDAxMDMwLCAweDAwMDAwMjMwLCAweDAwMDAwNDYwLCAweDAwMDAwMmMwLCAweDAwMDAwMTYwLCAweDAwMDAwMWUwIH0sCi0gICAgeyAweDAwMDAxMDcwLCAweDAwMDAwMTY4LCAweDAwMDAwMmQwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwIH0sCi0gICAgeyAweDAwMDAxMGIwLCAweDAwMDAwZTYwLCAweDAwMDAxY2MwLCAweDAwMDA3YzcwLCAweDAwMDAzZTM4LCAweDAwMDAxMTgwIH0sCi0gICAgeyAweDAwMDAxMGYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDA4MDE0LCAweDAzZTgwM2U4LCAweDA3ZDAwN2QwLCAweDEwODAxNjAwLCAweDA4NDAwYjAwLCAweDA2ZTAwNmUwIH0sCi0gICAgeyAweDAwMDA4MDFjLCAweDEyOGQ4MDI3LCAweDEyOGQ4MDRmLCAweDEyZTAwMDU3LCAweDEyZTAwMDJiLCAweDA5ODgwMDRmIH0sCi0gICAgeyAweDAwMDA4MzE4LCAweDAwMDAzZTgwLCAweDAwMDA3ZDAwLCAweDAwMDA2ODgwLCAweDAwMDAzNDQwLCAweDAwMDA2ODgwIH0sCi0gICAgeyAweDAwMDA5ODA0LCAweDAwMDAwMzAwLCAweDAwMDAwM2M0LCAweDAwMDAwM2M0LCAweDAwMDAwMzAwLCAweDAwMDAwMzAzIH0sCi0gICAgeyAweDAwMDA5ODIwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwIH0sCi0gICAgeyAweDAwMDA5ODI0LCAweDAxMDAwZTBlLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlIH0sCi0gICAgeyAweDAwMDA5ODI4LCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxIH0sCi0gICAgeyAweDAwMDA5ODM0LCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0sCi0gICAgeyAweDAwMDA5ODM4LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3IH0sCi0gICAgeyAweDAwMDA5ODQwLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlIH0sCi0gICAgeyAweDAwMDA5ODQ0LCAweDAzNzIxNjFlLCAweDAzNzIxNjFlLCAweDAzNzIxNjIwLCAweDAzNzIxNjIwLCAweDAzNzIxNmEwIH0sCi0gICAgeyAweDAwMDA5ODQ4LCAweDAwMDAxMDY2LCAweDAwMDAxMDY2LCAweDAwMDAxMDUzLCAweDAwMDAxMDUzLCAweDAwMDAxMDU5IH0sCi0gICAgeyAweDAwMDBhODQ4LCAweDAwMDAxMDY2LCAweDAwMDAxMDY2LCAweDAwMDAxMDUzLCAweDAwMDAxMDUzLCAweDAwMDAxMDU5IH0sCi0gICAgeyAweDAwMDA5ODUwLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyIH0sCi0gICAgeyAweDAwMDA5ODU4LCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlIH0sCi0gICAgeyAweDAwMDA5ODVjLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzc2MDVlLCAweDMxMzc2MDVlLCAweDMxMzk2MDVlIH0sCi0gICAgeyAweDAwMDA5ODYwLCAweDAwMDU4ZDE4LCAweDAwMDU4ZDE4LCAweDAwMDU4ZDIwLCAweDAwMDU4ZDIwLCAweDAwMDU4ZDE4IH0sCi0gICAgeyAweDAwMDA5ODY0LCAweDAwMDBmZTAwLCAweDAwMDBmZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwIH0sCi0gICAgeyAweDAwMDA5ODY4LCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwIH0sCi0gICAgeyAweDAwMDA5ODZjLCAweDA2OTAzMDgxLCAweDA2OTAzMDgxLCAweDA2OTAzODgxLCAweDA2OTAzODgxLCAweDA2OTAzODgxIH0sCi0gICAgeyAweDAwMDA5OTE0LCAweDAwMDAwN2QwLCAweDAwMDAwZmEwLCAweDAwMDAxMTMwLCAweDAwMDAwODk4LCAweDAwMDAwN2QwIH0sCi0gICAgeyAweDAwMDA5OTE4LCAweDAwMDAwMDBhLCAweDAwMDAwMDE0LCAweDAwMDAwMDE2LCAweDAwMDAwMDBiLCAweDAwMDAwMDE2IH0sCi0gICAgeyAweDAwMDA5OTI0LCAweGQwMGE4MDA3LCAweGQwMGE4MDA3LCAweGQwMGE4MDBkLCAweGQwMGE4MDBkLCAweGQwMGE4MDBkIH0sCi0gICAgeyAweDAwMDA5OTQ0LCAweGZmYmMxMDEwLCAweGZmYmMxMDEwLCAweGZmYmMxMDIwLCAweGZmYmMxMDIwLCAweGZmYmMxMDEwIH0sCi0gICAgeyAweDAwMDA5OTYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWI4LCAweDAwMDA0MjFjLCAweDAwMDA0MjFjLCAweDAwMDA0MjFjLCAweDAwMDA0MjFjLCAweDAwMDA0MjFjIH0sCi0gICAgeyAweDAwMDA5OWJjLCAweDAwMDAwNjAwLCAweDAwMDAwNjAwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwIH0sCi0gICAgeyAweDAwMDA5OWMwLCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0IH0sCi0gICAgeyAweDAwMDA5OWM0LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3IH0sCi0gICAgeyAweDAwMDA5OWM4LCAweDZhZjY1MzJmLCAweDZhZjY1MzJmLCAweDZhZjY1MzJmLCAweDZhZjY1MzJmLCAweDZhZjY1MzJmIH0sCi0gICAgeyAweDAwMDA5OWNjLCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4IH0sCi0gICAgeyAweDAwMDA5OWQwLCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0IH0sCi0gICAgeyAweDAwMDA5OWQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MDg0LCAweDAwMDU4MDg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MDg4LCAweDAwMDU4MDg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MDhjLCAweDAwMDU4MDhjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTAwLCAweDAwMDU4MTAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTA0LCAweDAwMDU4MTA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTA4LCAweDAwMDU4MTA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTBjLCAweDAwMDU4MTBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTEwLCAweDAwMDU4MTEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTE0LCAweDAwMDU4MTE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTgwLCAweDAwMDU4MTgwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTg0LCAweDAwMDU4MTg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTg4LCAweDAwMDU4MTg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MThjLCAweDAwMDU4MThjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTkwLCAweDAwMDU4MTkwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTk0LCAweDAwMDU4MTk0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MWEwLCAweDAwMDU4MWEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MjBjLCAweDAwMDU4MjBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MWE4LCAweDAwMDU4MWE4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4Mjg0LCAweDAwMDU4Mjg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4Mjg4LCAweDAwMDU4Mjg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MjI0LCAweDAwMDU4MjI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MjkwLCAweDAwMDU4MjkwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzAwLCAweDAwMDU4MzAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTVjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzA0LCAweDAwMDU4MzA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzA4LCAweDAwMDU4MzA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzBjLCAweDAwMDU4MzBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTY4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzgwLCAweDAwMDU4MzgwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4Mzg0LCAweDAwMDU4Mzg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTcwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzAwLCAweDAwMDY4NzAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTc0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzA0LCAweDAwMDY4NzA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTc4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzA4LCAweDAwMDY4NzA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTdjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzBjLCAweDAwMDY4NzBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTgwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzgwLCAweDAwMDY4NzgwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTg0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4Nzg0LCAweDAwMDY4Nzg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTg4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjAwLCAweDAwMDc4YjAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YThjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjA0LCAweDAwMDc4YjA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTkwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjA4LCAweDAwMDc4YjA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTk0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjBjLCAweDAwMDc4YjBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTk4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjgwLCAweDAwMDc4YjgwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4Yjg0LCAweDAwMDc4Yjg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4Yjg4LCAweDAwMDc4Yjg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjhjLCAweDAwMDc4YjhjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjkwLCAweDAwMDc4YjkwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjgwLCAweDAwMGNhZjgwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjg0LCAweDAwMGNhZjg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjg4LCAweDAwMGNhZjg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjhjLCAweDAwMGNhZjhjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjkwLCAweDAwMGNhZjkwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzBjLCAweDAwMGRiMzBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzEwLCAweDAwMGRiMzEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzg0LCAweDAwMGRiMzg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzg4LCAweDAwMGRiMzg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzI0LCAweDAwMGRiMzI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzA0LCAweDAwMGViNzA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNmE0LCAweDAwMGViNmE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNmE4LCAweDAwMGViNmE4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzEwLCAweDAwMGViNzEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzE0LCAweDAwMGViNzE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzIwLCAweDAwMGViNzIwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWVjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzI0LCAweDAwMGViNzI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzI4LCAweDAwMGViNzI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzJjLCAweDAwMGViNzJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWY4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2EwLCAweDAwMGViN2EwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2E0LCAweDAwMGViN2E0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2E4LCAweDAwMGViN2E4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2IwLCAweDAwMGViN2IwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2I0LCAweDAwMGViN2I0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2I4LCAweDAwMGViN2I4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2E1LCAweDAwMGViN2E1LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2E5LCAweDAwMGViN2E5LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2FkLCAweDAwMGViN2FkLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2IxLCAweDAwMGViN2IxLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2I1LCAweDAwMGViN2I1LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2I5LCAweDAwMGViN2I5LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2M1LCAweDAwMGViN2M1LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2M5LCAweDAwMGViN2M5LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2QxLCAweDAwMGViN2QxLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2Q1LCAweDAwMGViN2Q1LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2Q5LCAweDAwMGViN2Q5LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2M2LCAweDAwMGViN2M2LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2NhLCAweDAwMGViN2NhLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2NlLCAweDAwMGViN2NlLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2QyLCAweDAwMGViN2QyLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2Q2LCAweDAwMGViN2Q2LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2MzLCAweDAwMGViN2MzLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2M3LCAweDAwMGViN2M3LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2NiLCAweDAwMGViN2NiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjVjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2NmLCAweDAwMGViN2NmLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2Q3LCAweDAwMGViN2Q3LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjY4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjcwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5Yjc0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5Yjc4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjdjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjgwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5Yjg0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5Yjg4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjhjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjkwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5Yjk0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5Yjk4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmVjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmY4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MDg0LCAweDAwMDU4MDg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MDg4LCAweDAwMDU4MDg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MDhjLCAweDAwMDU4MDhjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTAwLCAweDAwMDU4MTAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTA0LCAweDAwMDU4MTA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTA4LCAweDAwMDU4MTA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTBjLCAweDAwMDU4MTBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTEwLCAweDAwMDU4MTEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTE0LCAweDAwMDU4MTE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTgwLCAweDAwMDU4MTgwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTg0LCAweDAwMDU4MTg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTg4LCAweDAwMDU4MTg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MThjLCAweDAwMDU4MThjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTkwLCAweDAwMDU4MTkwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTk0LCAweDAwMDU4MTk0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MWEwLCAweDAwMDU4MWEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MjBjLCAweDAwMDU4MjBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MWE4LCAweDAwMDU4MWE4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4Mjg0LCAweDAwMDU4Mjg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4Mjg4LCAweDAwMDU4Mjg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MjI0LCAweDAwMDU4MjI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MjkwLCAweDAwMDU4MjkwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzAwLCAweDAwMDU4MzAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTVjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzA0LCAweDAwMDU4MzA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzA4LCAweDAwMDU4MzA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzBjLCAweDAwMDU4MzBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTY4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzgwLCAweDAwMDU4MzgwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4Mzg0LCAweDAwMDU4Mzg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTcwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzAwLCAweDAwMDY4NzAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTc0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzA0LCAweDAwMDY4NzA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTc4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzA4LCAweDAwMDY4NzA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTdjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzBjLCAweDAwMDY4NzBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTgwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzgwLCAweDAwMDY4NzgwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTg0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4Nzg0LCAweDAwMDY4Nzg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTg4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjAwLCAweDAwMDc4YjAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYThjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjA0LCAweDAwMDc4YjA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTkwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjA4LCAweDAwMDc4YjA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTk0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjBjLCAweDAwMDc4YjBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTk4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjgwLCAweDAwMDc4YjgwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4Yjg0LCAweDAwMDc4Yjg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4Yjg4LCAweDAwMDc4Yjg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjhjLCAweDAwMDc4YjhjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjkwLCAweDAwMDc4YjkwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjgwLCAweDAwMGNhZjgwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjg0LCAweDAwMGNhZjg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjg4LCAweDAwMGNhZjg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjhjLCAweDAwMGNhZjhjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjkwLCAweDAwMGNhZjkwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzBjLCAweDAwMGRiMzBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzEwLCAweDAwMGRiMzEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzg0LCAweDAwMGRiMzg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzg4LCAweDAwMGRiMzg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzI0LCAweDAwMGRiMzI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzA0LCAweDAwMGViNzA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNmE0LCAweDAwMGViNmE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNmE4LCAweDAwMGViNmE4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzEwLCAweDAwMGViNzEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzE0LCAweDAwMGViNzE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzIwLCAweDAwMGViNzIwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWVjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzI0LCAweDAwMGViNzI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzI4LCAweDAwMGViNzI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzJjLCAweDAwMGViNzJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWY4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2EwLCAweDAwMGViN2EwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2E0LCAweDAwMGViN2E0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2E4LCAweDAwMGViN2E4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2IwLCAweDAwMGViN2IwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2I0LCAweDAwMGViN2I0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2I4LCAweDAwMGViN2I4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2E1LCAweDAwMGViN2E1LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2E5LCAweDAwMGViN2E5LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2FkLCAweDAwMGViN2FkLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2IxLCAweDAwMGViN2IxLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2I1LCAweDAwMGViN2I1LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2I5LCAweDAwMGViN2I5LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2M1LCAweDAwMGViN2M1LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2M5LCAweDAwMGViN2M5LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2QxLCAweDAwMGViN2QxLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2Q1LCAweDAwMGViN2Q1LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2Q5LCAweDAwMGViN2Q5LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2M2LCAweDAwMGViN2M2LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2NhLCAweDAwMGViN2NhLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2NlLCAweDAwMGViN2NlLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2QyLCAweDAwMGViN2QyLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2Q2LCAweDAwMGViN2Q2LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2MzLCAweDAwMGViN2MzLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2M3LCAweDAwMGViN2M3LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2NiLCAweDAwMGViN2NiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjVjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2NmLCAweDAwMGViN2NmLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2Q3LCAweDAwMGViN2Q3LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjY4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjcwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjc0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjc4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjdjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjgwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjg0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjg4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjhjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjkwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjk0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjk4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmVjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmY4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBhMjBjLCAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCAweDAwMDFmMDAwLCAweDAwMDFmMDAwLCAweDAwMDFmMDAwIH0sCi0gICAgeyAweDAwMDBiMjBjLCAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCAweDAwMDFmMDAwLCAweDAwMDFmMDAwLCAweDAwMDFmMDAwIH0sCi0gICAgeyAweDAwMDBhMjFjLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0sCi0gICAgeyAweDAwMDBhMjMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMjEwLCAweDAwMDAwMTA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjUwLCAweDAwMDRmMDAwLCAweDAwMDRmMDAwLCAweDAwMDRhMDAwLCAweDAwMDRhMDAwLCAweDAwMDRhMDAwIH0sCi0gICAgeyAweDAwMDBhMzU4LCAweDc5OTlhYTAyLCAweDc5OTlhYTAyLCAweDc5OTlhYTBlLCAweDc5OTlhYTBlLCAweDc5OTlhYTBlIH0sCisJezB4MDAwMDEwMzAsIDB4MDAwMDAyMzAsIDB4MDAwMDA0NjAsIDB4MDAwMDAyYzAsIDB4MDAwMDAxNjAsIDB4MDAwMDAxZTB9LAorCXsweDAwMDAxMDcwLCAweDAwMDAwMTY4LCAweDAwMDAwMmQwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwfSwKKwl7MHgwMDAwMTBiMCwgMHgwMDAwMGU2MCwgMHgwMDAwMWNjMCwgMHgwMDAwN2M3MCwgMHgwMDAwM2UzOCwgMHgwMDAwMTE4MH0sCisJezB4MDAwMDEwZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDh9LAorCXsweDAwMDA4MDE0LCAweDAzZTgwM2U4LCAweDA3ZDAwN2QwLCAweDEwODAxNjAwLCAweDA4NDAwYjAwLCAweDA2ZTAwNmUwfSwKKwl7MHgwMDAwODAxYywgMHgxMjhkODAyNywgMHgxMjhkODA0ZiwgMHgxMmUwMDA1NywgMHgxMmUwMDAyYiwgMHgwOTg4MDA0Zn0sCisJezB4MDAwMDgzMTgsIDB4MDAwMDNlODAsIDB4MDAwMDdkMDAsIDB4MDAwMDY4ODAsIDB4MDAwMDM0NDAsIDB4MDAwMDY4ODB9LAorCXsweDAwMDA5ODA0LCAweDAwMDAwMzAwLCAweDAwMDAwM2M0LCAweDAwMDAwM2M0LCAweDAwMDAwMzAwLCAweDAwMDAwMzAzfSwKKwl7MHgwMDAwOTgyMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMH0sCisJezB4MDAwMDk4MjQsIDB4MDEwMDBlMGUsIDB4MDEwMDBlMGUsIDB4MDEwMDBlMGUsIDB4MDEwMDBlMGUsIDB4MDEwMDBlMGV9LAorCXsweDAwMDA5ODI4LCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxfSwKKwl7MHgwMDAwOTgzNCwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZX0sCisJezB4MDAwMDk4MzgsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDd9LAorCXsweDAwMDA5ODQwLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlfSwKKwl7MHgwMDAwOTg0NCwgMHgwMzcyMTYxZSwgMHgwMzcyMTYxZSwgMHgwMzcyMTYyMCwgMHgwMzcyMTYyMCwgMHgwMzcyMTZhMH0sCisJezB4MDAwMDk4NDgsIDB4MDAwMDEwNjYsIDB4MDAwMDEwNjYsIDB4MDAwMDEwNTMsIDB4MDAwMDEwNTMsIDB4MDAwMDEwNTl9LAorCXsweDAwMDBhODQ4LCAweDAwMDAxMDY2LCAweDAwMDAxMDY2LCAweDAwMDAxMDUzLCAweDAwMDAxMDUzLCAweDAwMDAxMDU5fSwKKwl7MHgwMDAwOTg1MCwgMHg2ZDQwMDBlMiwgMHg2ZDQwMDBlMiwgMHg2ZDQwMDBlMiwgMHg2ZDQwMDBlMiwgMHg2ZDQwMDBlMn0sCisJezB4MDAwMDk4NTgsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmV9LAorCXsweDAwMDA5ODVjLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzc2MDVlLCAweDMxMzc2MDVlLCAweDMxMzk2MDVlfSwKKwl7MHgwMDAwOTg2MCwgMHgwMDA1OGQxOCwgMHgwMDA1OGQxOCwgMHgwMDA1OGQyMCwgMHgwMDA1OGQyMCwgMHgwMDA1OGQxOH0sCisJezB4MDAwMDk4NjQsIDB4MDAwMGZlMDAsIDB4MDAwMGZlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDB9LAorCXsweDAwMDA5ODY4LCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwfSwKKwl7MHgwMDAwOTg2YywgMHgwNjkwMzA4MSwgMHgwNjkwMzA4MSwgMHgwNjkwMzg4MSwgMHgwNjkwMzg4MSwgMHgwNjkwMzg4MX0sCisJezB4MDAwMDk5MTQsIDB4MDAwMDA3ZDAsIDB4MDAwMDBmYTAsIDB4MDAwMDExMzAsIDB4MDAwMDA4OTgsIDB4MDAwMDA3ZDB9LAorCXsweDAwMDA5OTE4LCAweDAwMDAwMDBhLCAweDAwMDAwMDE0LCAweDAwMDAwMDE2LCAweDAwMDAwMDBiLCAweDAwMDAwMDE2fSwKKwl7MHgwMDAwOTkyNCwgMHhkMDBhODAwNywgMHhkMDBhODAwNywgMHhkMDBhODAwZCwgMHhkMDBhODAwZCwgMHhkMDBhODAwZH0sCisJezB4MDAwMDk5NDQsIDB4ZmZiYzEwMTAsIDB4ZmZiYzEwMTAsIDB4ZmZiYzEwMjAsIDB4ZmZiYzEwMjAsIDB4ZmZiYzEwMTB9LAorCXsweDAwMDA5OTYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTk2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5YjgsIDB4MDAwMDQyMWMsIDB4MDAwMDQyMWMsIDB4MDAwMDQyMWMsIDB4MDAwMDQyMWMsIDB4MDAwMDQyMWN9LAorCXsweDAwMDA5OWJjLCAweDAwMDAwNjAwLCAweDAwMDAwNjAwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwfSwKKwl7MHgwMDAwOTljMCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNH0sCisJezB4MDAwMDk5YzQsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzd9LAorCXsweDAwMDA5OWM4LCAweDZhZjY1MzJmLCAweDZhZjY1MzJmLCAweDZhZjY1MzJmLCAweDZhZjY1MzJmLCAweDZhZjY1MzJmfSwKKwl7MHgwMDAwOTljYywgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOH0sCisJezB4MDAwMDk5ZDAsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODR9LAorCXsweDAwMDA5OWQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTlkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgwODQsIDB4MDAwNTgwODQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MDg4LCAweDAwMDU4MDg4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4YywgMHgwMDA1ODA4YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMDAsIDB4MDAwNTgxMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTA0LCAweDAwMDU4MTA0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwOCwgMHgwMDA1ODEwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMGMsIDB4MDAwNTgxMGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTEwLCAweDAwMDU4MTEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODExNCwgMHgwMDA1ODExNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxODAsIDB4MDAwNTgxODAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTg0LCAweDAwMDU4MTg0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4OCwgMHgwMDA1ODE4OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxOGMsIDB4MDAwNTgxOGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTkwLCAweDAwMDU4MTkwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE5NCwgMHgwMDA1ODE5NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxYTAsIDB4MDAwNTgxYTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MjBjLCAweDAwMDU4MjBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODFhOCwgMHgwMDA1ODFhOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyODQsIDB4MDAwNTgyODQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4Mjg4LCAweDAwMDU4Mjg4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODIyNCwgMHgwMDA1ODIyNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyOTAsIDB4MDAwNTgyOTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzAwLCAweDAwMDU4MzAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwNCwgMHgwMDA1ODMwNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzMDgsIDB4MDAwNTgzMDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzBjLCAweDAwMDU4MzBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODM4MCwgMHgwMDA1ODM4MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzODQsIDB4MDAwNTgzODQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTcwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzAwLCAweDAwMDY4NzAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWE3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwNCwgMHgwMDA2ODcwNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3MDgsIDB4MDAwNjg3MDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTdjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzBjLCAweDAwMDY4NzBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWE4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4MCwgMHgwMDA2ODc4MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3ODQsIDB4MDAwNjg3ODQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTg4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjAwLCAweDAwMDc4YjAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwNCwgMHgwMDA3OGIwNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiMDgsIDB4MDAwNzhiMDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTk0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjBjLCAweDAwMDc4YjBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4MCwgMHgwMDA3OGI4MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiODQsIDB4MDAwNzhiODQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YWEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4Yjg4LCAweDAwMDc4Yjg4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4YywgMHgwMDA3OGI4YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiOTAsIDB4MDAwNzhiOTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YWFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjgwLCAweDAwMGNhZjgwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4NCwgMHgwMDBjYWY4NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwY2FmODgsIDB4MDAwY2FmODgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YWI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjhjLCAweDAwMGNhZjhjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY5MCwgMHgwMDBjYWY5MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzMGMsIDB4MDAwZGIzMGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YWM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzEwLCAweDAwMGRiMzEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjM4NCwgMHgwMDBkYjM4NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzODgsIDB4MDAwZGIzODgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YWQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzI0LCAweDAwMGRiMzI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcwNCwgMHgwMDBlYjcwNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI2YTQsIDB4MDAwZWI2YTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YWRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNmE4LCAweDAwMGViNmE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcxMCwgMHgwMDBlYjcxMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MTQsIDB4MDAwZWI3MTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YWU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzIwLCAweDAwMGViNzIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyNCwgMHgwMDBlYjcyNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MjgsIDB4MDAwZWI3MjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YWY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzJjLCAweDAwMGViNzJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhMCwgMHgwMDBlYjdhMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTQsIDB4MDAwZWI3YTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YjAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2E4LCAweDAwMGViN2E4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiMCwgMHgwMDBlYjdiMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjQsIDB4MDAwZWI3YjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YjBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2I4LCAweDAwMGViN2I4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhNSwgMHgwMDBlYjdhNSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTksIDB4MDAwZWI3YTksIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YjE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2FkLCAweDAwMGViN2FkLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiMSwgMHgwMDBlYjdiMSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjUsIDB4MDAwZWI3YjUsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YjI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2I5LCAweDAwMGViN2I5LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNSwgMHgwMDBlYjdjNSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzksIDB4MDAwZWI3YzksIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YjMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2QxLCAweDAwMGViN2QxLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNSwgMHgwMDBlYjdkNSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDksIDB4MDAwZWI3ZDksIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YjNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2M2LCAweDAwMGViN2M2LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjYSwgMHgwMDBlYjdjYSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3Y2UsIDB4MDAwZWI3Y2UsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YjQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2QyLCAweDAwMGViN2QyLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNiwgMHgwMDBlYjdkNiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzMsIDB4MDAwZWI3YzMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YjU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2M3LCAweDAwMGViN2M3LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjYiwgMHgwMDBlYjdjYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3Y2YsIDB4MDAwZWI3Y2YsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YjYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2Q3LCAweDAwMGViN2Q3LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YjZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5Yjc4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5Yjg0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YjkwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YjljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YmE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YmI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YmMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YmNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YmQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YmU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YmYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YmZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4NCwgMHgwMDA1ODA4NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgwODgsIDB4MDAwNTgwODgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYTA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MDhjLCAweDAwMDU4MDhjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWEwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwMCwgMHgwMDA1ODEwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMDQsIDB4MDAwNTgxMDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYTE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTA4LCAweDAwMDU4MTA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWExOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwYywgMHgwMDA1ODEwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMTAsIDB4MDAwNTgxMTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYTIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTE0LCAweDAwMDU4MTE0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWEyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4MCwgMHgwMDA1ODE4MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxODQsIDB4MDAwNTgxODQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYTJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTg4LCAweDAwMDU4MTg4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWEzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4YywgMHgwMDA1ODE4YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxOTAsIDB4MDAwNTgxOTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYTM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTk0LCAweDAwMDU4MTk0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWEzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODFhMCwgMHgwMDA1ODFhMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyMGMsIDB4MDAwNTgyMGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYTQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MWE4LCAweDAwMDU4MWE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWE0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI4NCwgMHgwMDA1ODI4NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyODgsIDB4MDAwNTgyODgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYTUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MjI0LCAweDAwMDU4MjI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWE1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI5MCwgMHgwMDA1ODI5MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzMDAsIDB4MDAwNTgzMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYTVjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzA0LCAweDAwMDU4MzA0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWE2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwOCwgMHgwMDA1ODMwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzMGMsIDB4MDAwNTgzMGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYTY4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzgwLCAweDAwMDU4MzgwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWE2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODM4NCwgMHgwMDA1ODM4NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3MDAsIDB4MDAwNjg3MDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYTc0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzA0LCAweDAwMDY4NzA0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWE3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwOCwgMHgwMDA2ODcwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3MGMsIDB4MDAwNjg3MGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYTgwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzgwLCAweDAwMDY4NzgwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWE4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4NCwgMHgwMDA2ODc4NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiMDAsIDB4MDAwNzhiMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYThjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjA0LCAweDAwMDc4YjA0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWE5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwOCwgMHgwMDA3OGIwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiMGMsIDB4MDAwNzhiMGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYTk4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjgwLCAweDAwMDc4YjgwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWE5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4NCwgMHgwMDA3OGI4NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiODgsIDB4MDAwNzhiODgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYWE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjhjLCAweDAwMDc4YjhjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWFhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI5MCwgMHgwMDA3OGI5MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwY2FmODAsIDB4MDAwY2FmODAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYWIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjg0LCAweDAwMGNhZjg0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWFiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4OCwgMHgwMDBjYWY4OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwY2FmOGMsIDB4MDAwY2FmOGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYWJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjkwLCAweDAwMGNhZjkwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWFjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMwYywgMHgwMDBkYjMwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzMTAsIDB4MDAwZGIzMTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYWM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzg0LCAweDAwMGRiMzg0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWFjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjM4OCwgMHgwMDBkYjM4OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzMjQsIDB4MDAwZGIzMjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYWQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzA0LCAweDAwMGViNzA0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWFkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjZhNCwgMHgwMDBlYjZhNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI2YTgsIDB4MDAwZWI2YTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYWUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzEwLCAweDAwMGViNzEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWFlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcxNCwgMHgwMDBlYjcxNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MjAsIDB4MDAwZWI3MjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYWVjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzI0LCAweDAwMGViNzI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWFmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyOCwgMHgwMDBlYjcyOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MmMsIDB4MDAwZWI3MmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYWY4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2EwLCAweDAwMGViN2EwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWFmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhNCwgMHgwMDBlYjdhNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTgsIDB4MDAwZWI3YTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2IwLCAweDAwMGViN2IwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWIwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiNCwgMHgwMDBlYjdiNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjgsIDB4MDAwZWI3YjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2E1LCAweDAwMGViN2E1LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWIxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhOSwgMHgwMDBlYjdhOSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YWQsIDB4MDAwZWI3YWQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2IxLCAweDAwMGViN2IxLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiNSwgMHgwMDBlYjdiNSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjksIDB4MDAwZWI3YjksIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2M1LCAweDAwMGViN2M1LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjOSwgMHgwMDBlYjdjOSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDEsIDB4MDAwZWI3ZDEsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2Q1LCAweDAwMGViN2Q1LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWIzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkOSwgMHgwMDBlYjdkOSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzYsIDB4MDAwZWI3YzYsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2NhLCAweDAwMGViN2NhLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWI0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjZSwgMHgwMDBlYjdjZSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDIsIDB4MDAwZWI3ZDIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2Q2LCAweDAwMGViN2Q2LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjMywgMHgwMDBlYjdjMywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzcsIDB4MDAwZWI3YzcsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2NiLCAweDAwMGViN2NiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWI1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjZiwgMHgwMDBlYjdjZiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDcsIDB4MDAwZWI3ZDcsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjcwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWI3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjdjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWI4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjg4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWI4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjk0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWI5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYmEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWJhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYmFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWJiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYmI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWJiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYmM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWJjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYmQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWJkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYmRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWJlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYmU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWJlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYmY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWJmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMjA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0fSwKKwl7MHgwMDAwYTIwYywgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNCwgMHgwMDAxZjAwMCwgMHgwMDAxZjAwMCwgMHgwMDAxZjAwMH0sCisJezB4MDAwMGIyMGMsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIDB4MDAwMWYwMDAsIDB4MDAwMWYwMDAsIDB4MDAwMWYwMDB9LAorCXsweDAwMDBhMjFjLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhfSwKKwl7MHgwMDAwYTIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDIxMCwgMHgwMDAwMDEwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyNTAsIDB4MDAwNGYwMDAsIDB4MDAwNGYwMDAsIDB4MDAwNGEwMDAsIDB4MDAwNGEwMDAsIDB4MDAwNGEwMDB9LAorCXsweDAwMDBhMzU4LCAweDc5OTlhYTAyLCAweDc5OTlhYTAyLCAweDc5OTlhYTBlLCAweDc5OTlhYTBlLCAweDc5OTlhYTBlfSwKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgYXI5Mjg1Q29tbW9uXzkyODVfMV8yW11bMl0gPSB7Ci0gICAgeyAweDAwMDAwMDBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMDIwMDQ1IH0sCi0gICAgeyAweDAwMDAwMDM0LCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwMDAwMDQwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDQ0LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDAwMDQ4LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDAwMDRjLCAweDAwMDAwMDEwIH0sCi0gICAgeyAweDAwMDAwMDUwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDU0LCAweDAwMDAwMDFmIH0sCi0gICAgeyAweDAwMDAwODAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODE4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODFjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODIwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMDQwLCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDQ0LCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDQ4LCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDRjLCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDUwLCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDU0LCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDU4LCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDVjLCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDYwLCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDY0LCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMjMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMjcwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMDM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMDc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMGI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMGY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMTM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMTc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMWI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMWY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMjM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMjc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMmI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMmY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMzM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMzc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxM2I4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxM2Y4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNDM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNDc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNGI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNGY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNTM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNTc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNWI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNWY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNjM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNjc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNmI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNmY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNzM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNzc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxN2I4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxN2Y4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMDNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMDdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMGJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMGZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMTNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMTdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMWJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMWZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMjNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMjdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMmJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMmZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMzNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMzdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxM2JjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxM2ZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNDNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNDdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA0MDMwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA0MDNjLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA0MDI0LCAweDAwMDAwMDFmIH0sCi0gICAgeyAweDAwMDA0MDYwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA0MDY0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA3MDEwLCAweDAwMDAwMDMxIH0sCi0gICAgeyAweDAwMDA3MDM0LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3MDM4LCAweDAwMDAwNGMyIH0sCi0gICAgeyAweDAwMDA4MDA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDE4LCAweDAwMDAwNzAwIH0sCi0gICAgeyAweDAwMDA4MDIwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDQ4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDU0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDU4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDVjLCAweDAwMGZjNzhmIH0sCi0gICAgeyAweDAwMDA4MDYwLCAweDAwMDAwMDBmIH0sCi0gICAgeyAweDAwMDA4MDY0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDcwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGMwLCAweDJhODAwMDFhIH0sCi0gICAgeyAweDAwMDA4MGM0LCAweDA1ZGMwMWUwIH0sCi0gICAgeyAweDAwMDA4MGM4LCAweDFmNDAyNzEwIH0sCi0gICAgeyAweDAwMDA4MGNjLCAweDAxZjQwMDAwIH0sCi0gICAgeyAweDAwMDA4MGQwLCAweDAwMDAxZTAwIH0sCi0gICAgeyAweDAwMDA4MGQ0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGQ4LCAweDAwNDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGUwLCAweGZmZmZmZmZmIH0sCi0gICAgeyAweDAwMDA4MGU0LCAweDAwMDBmZmZmIH0sCi0gICAgeyAweDAwMDA4MGU4LCAweDAwM2YzZjNmIH0sCi0gICAgeyAweDAwMDA4MGVjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGYwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGY0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGZjLCAweDAwMDIwMDAwIH0sCi0gICAgeyAweDAwMDA4MTAwLCAweDAwMDIwMDAwIH0sCi0gICAgeyAweDAwMDA4MTA0LCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDA4MTA4LCAweDAwMDAwMDUyIH0sCi0gICAgeyAweDAwMDA4MTBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTEwLCAweDAwMDAwMTY4IH0sCi0gICAgeyAweDAwMDA4MTE4LCAweDAwMDEwMGFhIH0sCi0gICAgeyAweDAwMDA4MTFjLCAweDAwMDAzMjEwIH0sCi0gICAgeyAweDAwMDA4MTIwLCAweDA4ZjA0ODEwIH0sCi0gICAgeyAweDAwMDA4MTI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTM0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTQ0LCAweGZmZmZmZmZmIH0sCi0gICAgeyAweDAwMDA4MTY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTcwLCAweDMyMTQzMzIwIH0sCi0gICAgeyAweDAwMDA4MTc0LCAweGZhYTRmYTUwIH0sCi0gICAgeyAweDAwMDA4MTc4LCAweDAwMDAwMTAwIH0sCi0gICAgeyAweDAwMDA4MTdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWQwLCAweDAwMDAzMjBhIH0sCi0gICAgeyAweDAwMDA4MWVjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWYwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWY0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjE4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjFjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjIwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjM0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjQwLCAweDAwMTAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjQ0LCAweDAwMTBmNDAwIH0sCi0gICAgeyAweDAwMDA4MjQ4LCAweDAwMDAwMTAwIH0sCi0gICAgeyAweDAwMDA4MjRjLCAweDAwMDFlODAwIH0sCi0gICAgeyAweDAwMDA4MjUwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjU0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjU4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjVjLCAweDQwMDAwMGZmIH0sCi0gICAgeyAweDAwMDA4MjYwLCAweDAwMDgwOTIyIH0sCi0gICAgeyAweDAwMDA4MjY0LCAweDg4YTAwMDEwIH0sCi0gICAgeyAweDAwMDA4MjcwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4Mjc0LCAweDQwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4Mjc4LCAweDAwM2U0MTgwIH0sCi0gICAgeyAweDAwMDA4MjdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4Mjg0LCAweDAwMDAwMDJjIH0sCi0gICAgeyAweDAwMDA4Mjg4LCAweDAwMDAwMDJjIH0sCi0gICAgeyAweDAwMDA4MjhjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4Mjk0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4Mjk4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjljLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzAwLCAweDAwMDAwMDQwIH0sCi0gICAgeyAweDAwMDA4MzE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzJjLCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDA4MzMwLCAweDAwMDAwMzAyIH0sCi0gICAgeyAweDAwMDA4MzM0LCAweDAwMDAwZTAwIH0sCi0gICAgeyAweDAwMDA4MzM4LCAweDAwZmYwMDAwIH0sCi0gICAgeyAweDAwMDA4MzNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzQwLCAweDAwMDEwMzgwIH0sCi0gICAgeyAweDAwMDA4MzQ0LCAweDAwNDgxMDQzIH0sCi0gICAgeyAweDAwMDA5ODA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5ODBjLCAweGFmZTY4ZTMwIH0sCi0gICAgeyAweDAwMDA5ODEwLCAweGZkMTRlMDAwIH0sCi0gICAgeyAweDAwMDA5ODE0LCAweDljMGE5ZjZiIH0sCi0gICAgeyAweDAwMDA5ODFjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5ODJjLCAweDAwMDBhMDAwIH0sCi0gICAgeyAweDAwMDA5ODMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5ODNjLCAweDAwMjAwNDAwIH0sCi0gICAgeyAweDAwMDA5ODRjLCAweDAwNDAyMzNjIH0sCi0gICAgeyAweDAwMDA5ODU0LCAweDAwMDAwMDQ0IH0sCi0gICAgeyAweDAwMDA5OTAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTEwLCAweDAxMDAyMzEwIH0sCi0gICAgeyAweDAwMDA5OTFjLCAweDEwMDAwZmZmIH0sCi0gICAgeyAweDAwMDA5OTIwLCAweDA0OTAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTI4LCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDA5OTJjLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDA5OTM0LCAweDFlMWYyMDIyIH0sCi0gICAgeyAweDAwMDA5OTM4LCAweDBhMGIwYzBkIH0sCi0gICAgeyAweDAwMDA5OTNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTQwLCAweDE0NzUwNjA0IH0sCi0gICAgeyAweDAwMDA5OTQ4LCAweDkyODBjMDBhIH0sCi0gICAgeyAweDAwMDA5OTRjLCAweDAwMDIwMDI4IH0sCi0gICAgeyAweDAwMDA5OTU0LCAweDVmM2NhM2RlIH0sCi0gICAgeyAweDAwMDA5OTU4LCAweDIxMDhlY2ZmIH0sCi0gICAgeyAweDAwMDA5OTY4LCAweDAwMDAwM2NlIH0sCi0gICAgeyAweDAwMDA5OTcwLCAweDE5MmJiNTE0IH0sCi0gICAgeyAweDAwMDA5OTc0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTc4LCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDA5OTdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTgwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OThjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTkwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTk0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTk4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTljLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWE0LCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDA5OWE4LCAweDIwMWZmZjAwIH0sCi0gICAgeyAweDAwMDA5OWFjLCAweDJkZWYwNDAwIH0sCi0gICAgeyAweDAwMDA5OWIwLCAweDAzMDUxMDAwIH0sCi0gICAgeyAweDAwMDA5OWI0LCAweDAwMDAwODIwIH0sCi0gICAgeyAweDAwMDA5OWRjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWUwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWU0LCAweGFhYWFhYWFhIH0sCi0gICAgeyAweDAwMDA5OWU4LCAweDNjNDY2NDc4IH0sCi0gICAgeyAweDAwMDA5OWVjLCAweDBjYzgwY2FhIH0sCi0gICAgeyAweDAwMDA5OWYwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjA4LCAweDgwM2U2OGM4IH0sCi0gICAgeyAweDAwMDBhMjEwLCAweDQwODBhMzMzIH0sCi0gICAgeyAweDAwMDBhMjE0LCAweDAwMjA2YzEwIH0sCi0gICAgeyAweDAwMDBhMjE4LCAweDAwOWM0MDYwIH0sCi0gICAgeyAweDAwMDBhMjIwLCAweDAxODM0MDYxIH0sCi0gICAgeyAweDAwMDBhMjI0LCAweDAwMDAwNDAwIH0sCi0gICAgeyAweDAwMDBhMjI4LCAweDAwMDAwM2I1IH0sCi0gICAgeyAweDAwMDBhMjJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjM0LCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhMjM4LCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhMjQ0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjQ4LCAweGZmZmZmZmZjIH0sCi0gICAgeyAweDAwMDBhMjRjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjU0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjU4LCAweDBjY2I1MzgwIH0sCi0gICAgeyAweDAwMDBhMjVjLCAweDE1MTUxNTAxIH0sCi0gICAgeyAweDAwMDBhMjYwLCAweGRmYTkwZjAxIH0sCi0gICAgeyAweDAwMDBhMjY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjZjLCAweDBlYmFlOWU2IH0sCi0gICAgeyAweDAwMDBkMjcwLCAweDBkODIwODIwIH0sCi0gICAgeyAweDAwMDBkMzVjLCAweDA3ZmZmZmVmIH0sCi0gICAgeyAweDAwMDBkMzYwLCAweDBmZmZmZmU3IH0sCi0gICAgeyAweDAwMDBkMzY0LCAweDE3ZmZmZmU1IH0sCi0gICAgeyAweDAwMDBkMzY4LCAweDFmZmZmZmU0IH0sCi0gICAgeyAweDAwMDBkMzZjLCAweDM3ZmZmZmUzIH0sCi0gICAgeyAweDAwMDBkMzcwLCAweDNmZmZmZmUzIH0sCi0gICAgeyAweDAwMDBkMzc0LCAweDU3ZmZmZmUzIH0sCi0gICAgeyAweDAwMDBkMzc4LCAweDVmZmZmZmUyIH0sCi0gICAgeyAweDAwMDBkMzdjLCAweDdmZmZmZmUyIH0sCi0gICAgeyAweDAwMDBkMzgwLCAweDdmM2M3YmJhIH0sCi0gICAgeyAweDAwMDBkMzg0LCAweGYzMzA3ZmYwIH0sCi0gICAgeyAweDAwMDBhMzg4LCAweDBjMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzhjLCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhMzkwLCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhMzljLCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDBhM2EwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2E0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2E4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2FjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2IwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2I0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2I4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2JjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2MwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2M0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2NjLCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhM2QwLCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhM2Q0LCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhM2U0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2U4LCAweDE4YzQzNDMzIH0sCi0gICAgeyAweDAwMDBhM2VjLCAweDAwZjcwMDgxIH0sCi0gICAgeyAweDAwMDA3ODAwLCAweDAwMTQwMDAwIH0sCi0gICAgeyAweDAwMDA3ODA0LCAweDBlNDU0OGQ4IH0sCi0gICAgeyAweDAwMDA3ODA4LCAweDU0MjE0NTE0IH0sCi0gICAgeyAweDAwMDA3ODBjLCAweDAyMDI1ODMwIH0sCi0gICAgeyAweDAwMDA3ODEwLCAweDcxYzBkMzg4IH0sCi0gICAgeyAweDAwMDA3ODFjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA3ODI0LCAweDAwZDg2ZmZmIH0sCi0gICAgeyAweDAwMDA3ODJjLCAweDZlMzZkOTdiIH0sCi0gICAgeyAweDAwMDA3ODM0LCAweDcxNDAwMDg3IH0sCi0gICAgeyAweDAwMDA3ODQ0LCAweDAwMGMwZGI2IH0sCi0gICAgeyAweDAwMDA3ODQ4LCAweDZkYjYyNDZmIH0sCi0gICAgeyAweDAwMDA3ODRjLCAweDZkOWI2NmRiIH0sCi0gICAgeyAweDAwMDA3ODUwLCAweDZkOGM2ZGJhIH0sCi0gICAgeyAweDAwMDA3ODU0LCAweDAwMDQwMDAwIH0sCi0gICAgeyAweDAwMDA3ODU4LCAweGRiMDAzMDEyIH0sCi0gICAgeyAweDAwMDA3ODVjLCAweDA0OTI0OTE0IH0sCi0gICAgeyAweDAwMDA3ODYwLCAweDIxMDg0MjEwIH0sCi0gICAgeyAweDAwMDA3ODY0LCAweGY3ZDdmZmRlIH0sCi0gICAgeyAweDAwMDA3ODY4LCAweGMyMDM0MDgwIH0sCi0gICAgeyAweDAwMDA3ODcwLCAweDEwMTQyYzAwIH0sCisJLyogQWRkciAgICAgIGFsbG1vZGVzICAqLworCXsweDAwMDAwMDBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDAzMCwgMHgwMDAyMDA0NX0sCisJezB4MDAwMDAwMzQsIDB4MDAwMDAwMDV9LAorCXsweDAwMDAwMDQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDA0NCwgMHgwMDAwMDAwOH0sCisJezB4MDAwMDAwNDgsIDB4MDAwMDAwMDh9LAorCXsweDAwMDAwMDRjLCAweDAwMDAwMDEwfSwKKwl7MHgwMDAwMDA1MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDAwNTQsIDB4MDAwMDAwMWZ9LAorCXsweDAwMDAwODAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDgwNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDA4MDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwODBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDgxMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDA4MTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwODE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDgxYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDA4MjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwODI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTA0MCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNDQsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDQ4LCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA0YywgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNTAsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDU0LCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA1OCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNWMsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDYwLCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA2NCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEyMzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMjcwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTAzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEwNzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMGI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTBmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDExMzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMTc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTFiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDExZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMjM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTI3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEyYjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMmY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTMzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEzNzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxM2I4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTNmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE0MzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNDc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTRiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE0ZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNTM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTU3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE1YjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNWY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTYzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE2NzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNmI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTZmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE3MzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNzc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTdiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE3ZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMDNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTA3YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEwYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMGZjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTEzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDExN2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMWJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTFmYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEyM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMjdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTJiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEyZmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMzNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTM3YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEzYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxM2ZjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTQzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE0N2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA0MDMwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNDAzYywgMHgwMDAwMDAwMn0sCisJezB4MDAwMDQwMjQsIDB4MDAwMDAwMWZ9LAorCXsweDAwMDA0MDYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwNDA2NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDcwMTAsIDB4MDAwMDAwMzF9LAorCXsweDAwMDA3MDM0LCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNzAzOCwgMHgwMDAwMDRjMn0sCisJezB4MDAwMDgwMDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwMTgsIDB4MDAwMDA3MDB9LAorCXsweDAwMDA4MDIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDQ4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODA1NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwNTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDVjLCAweDAwMGZjNzhmfSwKKwl7MHgwMDAwODA2MCwgMHgwMDAwMDAwZn0sCisJezB4MDAwMDgwNjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDcwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBjMCwgMHgyYTgwMDAxYX0sCisJezB4MDAwMDgwYzQsIDB4MDVkYzAxZTB9LAorCXsweDAwMDA4MGM4LCAweDFmNDAyNzEwfSwKKwl7MHgwMDAwODBjYywgMHgwMWY0MDAwMH0sCisJezB4MDAwMDgwZDAsIDB4MDAwMDFlMDB9LAorCXsweDAwMDA4MGQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBkOCwgMHgwMDQwMDAwMH0sCisJezB4MDAwMDgwZTAsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4MGU0LCAweDAwMDBmZmZmfSwKKwl7MHgwMDAwODBlOCwgMHgwMDNmM2YzZn0sCisJezB4MDAwMDgwZWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBmNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGZjLCAweDAwMDIwMDAwfSwKKwl7MHgwMDAwODEwMCwgMHgwMDAyMDAwMH0sCisJezB4MDAwMDgxMDQsIDB4MDAwMDAwMDF9LAorCXsweDAwMDA4MTA4LCAweDAwMDAwMDUyfSwKKwl7MHgwMDAwODEwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMTAsIDB4MDAwMDAxNjh9LAorCXsweDAwMDA4MTE4LCAweDAwMDEwMGFhfSwKKwl7MHgwMDAwODExYywgMHgwMDAwMzIxMH0sCisJezB4MDAwMDgxMjAsIDB4MDhmMDQ4MTB9LAorCXsweDAwMDA4MTI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEyOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEzNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODE0NCwgMHhmZmZmZmZmZn0sCisJezB4MDAwMDgxNjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTZjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODE3MCwgMHgzMjE0MzMyMH0sCisJezB4MDAwMDgxNzQsIDB4ZmFhNGZhNTB9LAorCXsweDAwMDA4MTc4LCAweDAwMDAwMTAwfSwKKwl7MHgwMDAwODE3YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxYzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWQwLCAweDAwMDAzMjBhfSwKKwl7MHgwMDAwODFlYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxZjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxZmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIwNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIxMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIxYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIyOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIzNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI0MCwgMHgwMDEwMDAwMH0sCisJezB4MDAwMDgyNDQsIDB4MDAxMGY0MDB9LAorCXsweDAwMDA4MjQ4LCAweDAwMDAwMTAwfSwKKwl7MHgwMDAwODI0YywgMHgwMDAxZTgwMH0sCisJezB4MDAwMDgyNTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI1OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyNWMsIDB4NDAwMDAwZmZ9LAorCXsweDAwMDA4MjYwLCAweDAwMDgwOTIyfSwKKwl7MHgwMDAwODI2NCwgMHg4OGEwMDAxMH0sCisJezB4MDAwMDgyNzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4Mjc0LCAweDQwMDAwMDAwfSwKKwl7MHgwMDAwODI3OCwgMHgwMDNlNDE4MH0sCisJezB4MDAwMDgyN2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4Mjg0LCAweDAwMDAwMDJjfSwKKwl7MHgwMDAwODI4OCwgMHgwMDAwMDAyY30sCisJezB4MDAwMDgyOGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4Mjk0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI5OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyOWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzAwLCAweDAwMDAwMDQwfSwKKwl7MHgwMDAwODMxNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzMjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzJjLCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwODMzMCwgMHgwMDAwMDMwMn0sCisJezB4MDAwMDgzMzQsIDB4MDAwMDBlMDB9LAorCXsweDAwMDA4MzM4LCAweDAwZmYwMDAwfSwKKwl7MHgwMDAwODMzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzNDAsIDB4MDAwMTAzODB9LAorCXsweDAwMDA4MzQ0LCAweDAwNDgxMDQzfSwKKwl7MHgwMDAwOTgwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4MGMsIDB4YWZlNjhlMzB9LAorCXsweDAwMDA5ODEwLCAweGZkMTRlMDAwfSwKKwl7MHgwMDAwOTgxNCwgMHg5YzBhOWY2Yn0sCisJezB4MDAwMDk4MWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODJjLCAweDAwMDBhMDAwfSwKKwl7MHgwMDAwOTgzMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4M2MsIDB4MDAyMDA0MDB9LAorCXsweDAwMDA5ODRjLCAweDAwNDAyMzNjfSwKKwl7MHgwMDAwOTg1NCwgMHgwMDAwMDA0NH0sCisJezB4MDAwMDk5MDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTA0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTkwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5MGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTEwLCAweDAxMDAyMzEwfSwKKwl7MHgwMDAwOTkxYywgMHgxMDAwMGZmZn0sCisJezB4MDAwMDk5MjAsIDB4MDQ5MDAwMDB9LAorCXsweDAwMDA5OTI4LCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwOTkyYywgMHgwMDAwMDAwNH0sCisJezB4MDAwMDk5MzQsIDB4MWUxZjIwMjJ9LAorCXsweDAwMDA5OTM4LCAweDBhMGIwYzBkfSwKKwl7MHgwMDAwOTkzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5NDAsIDB4MTQ3NTA2MDR9LAorCXsweDAwMDA5OTQ4LCAweDkyODBjMDBhfSwKKwl7MHgwMDAwOTk0YywgMHgwMDAyMDAyOH0sCisJezB4MDAwMDk5NTQsIDB4NWYzY2EzZGV9LAorCXsweDAwMDA5OTU4LCAweDIxMDhlY2ZmfSwKKwl7MHgwMDAwOTk2OCwgMHgwMDAwMDNjZX0sCisJezB4MDAwMDk5NzAsIDB4MTkyYmI1MTR9LAorCXsweDAwMDA5OTc0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTk3OCwgMHgwMDAwMDAwMX0sCisJezB4MDAwMDk5N2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTgwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTk4NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5ODgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OThjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTk5MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5OTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTk4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTk5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5YTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OWE0LCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwOTlhOCwgMHgyMDFmZmYwMH0sCisJezB4MDAwMDk5YWMsIDB4MmRlZjA0MDB9LAorCXsweDAwMDA5OWIwLCAweDAzMDUxMDAwfSwKKwl7MHgwMDAwOTliNCwgMHgwMDAwMDgyMH0sCisJezB4MDAwMDk5ZGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OWUwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTllNCwgMHhhYWFhYWFhYX0sCisJezB4MDAwMDk5ZTgsIDB4M2M0NjY0Nzh9LAorCXsweDAwMDA5OWVjLCAweDBjYzgwY2FhfSwKKwl7MHgwMDAwOTlmMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyMDgsIDB4ODAzZTY4Yzh9LAorCXsweDAwMDBhMjEwLCAweDQwODBhMzMzfSwKKwl7MHgwMDAwYTIxNCwgMHgwMDIwNmMxMH0sCisJezB4MDAwMGEyMTgsIDB4MDA5YzQwNjB9LAorCXsweDAwMDBhMjIwLCAweDAxODM0MDYxfSwKKwl7MHgwMDAwYTIyNCwgMHgwMDAwMDQwMH0sCisJezB4MDAwMGEyMjgsIDB4MDAwMDAzYjV9LAorCXsweDAwMDBhMjJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTIzNCwgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEyMzgsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhMjQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTI0OCwgMHhmZmZmZmZmY30sCisJezB4MDAwMGEyNGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMjU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTI1OCwgMHgwY2NiNTM4MH0sCisJezB4MDAwMGEyNWMsIDB4MTUxNTE1MDF9LAorCXsweDAwMDBhMjYwLCAweGRmYTkwZjAxfSwKKwl7MHgwMDAwYTI2OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyNmMsIDB4MGViYWU5ZTZ9LAorCXsweDAwMDBkMjcwLCAweDBkODIwODIwfSwKKwl7MHgwMDAwZDM1YywgMHgwN2ZmZmZlZn0sCisJezB4MDAwMGQzNjAsIDB4MGZmZmZmZTd9LAorCXsweDAwMDBkMzY0LCAweDE3ZmZmZmU1fSwKKwl7MHgwMDAwZDM2OCwgMHgxZmZmZmZlNH0sCisJezB4MDAwMGQzNmMsIDB4MzdmZmZmZTN9LAorCXsweDAwMDBkMzcwLCAweDNmZmZmZmUzfSwKKwl7MHgwMDAwZDM3NCwgMHg1N2ZmZmZlM30sCisJezB4MDAwMGQzNzgsIDB4NWZmZmZmZTJ9LAorCXsweDAwMDBkMzdjLCAweDdmZmZmZmUyfSwKKwl7MHgwMDAwZDM4MCwgMHg3ZjNjN2JiYX0sCisJezB4MDAwMGQzODQsIDB4ZjMzMDdmZjB9LAorCXsweDAwMDBhMzg4LCAweDBjMDAwMDAwfSwKKwl7MHgwMDAwYTM4YywgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzOTAsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhMzljLCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwYTNhMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzYTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2E4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTNhYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzYjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2I0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTNiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2MwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTNjNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzY2MsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2QwLCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTNkNCwgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzZTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2U4LCAweDE4YzQzNDMzfSwKKwl7MHgwMDAwYTNlYywgMHgwMGY3MDA4MX0sCisJezB4MDAwMDc4MDAsIDB4MDAxNDAwMDB9LAorCXsweDAwMDA3ODA0LCAweDBlNDU0OGQ4fSwKKwl7MHgwMDAwNzgwOCwgMHg1NDIxNDUxNH0sCisJezB4MDAwMDc4MGMsIDB4MDIwMjU4MzB9LAorCXsweDAwMDA3ODEwLCAweDcxYzBkMzg4fSwKKwl7MHgwMDAwNzgxYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDc4MjQsIDB4MDBkODZmZmZ9LAorCXsweDAwMDA3ODJjLCAweDZlMzZkOTdifSwKKwl7MHgwMDAwNzgzNCwgMHg3MTQwMDA4N30sCisJezB4MDAwMDc4NDQsIDB4MDAwYzBkYjZ9LAorCXsweDAwMDA3ODQ4LCAweDZkYjYyNDZmfSwKKwl7MHgwMDAwNzg0YywgMHg2ZDliNjZkYn0sCisJezB4MDAwMDc4NTAsIDB4NmQ4YzZkYmF9LAorCXsweDAwMDA3ODU0LCAweDAwMDQwMDAwfSwKKwl7MHgwMDAwNzg1OCwgMHhkYjAwMzAxMn0sCisJezB4MDAwMDc4NWMsIDB4MDQ5MjQ5MTR9LAorCXsweDAwMDA3ODYwLCAweDIxMDg0MjEwfSwKKwl7MHgwMDAwNzg2NCwgMHhmN2Q3ZmZkZX0sCisJezB4MDAwMDc4NjgsIDB4YzIwMzQwODB9LAorCXsweDAwMDA3ODcwLCAweDEwMTQyYzAwfSwKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgYXI5Mjg1TW9kZXNfaGlnaF9wb3dlcl90eF9nYWluXzkyODVfMV8yW11bNl0gPSB7Ci0gICAgLyogQWRkcmVzcyAgICAgIDVHLUhUMjAgICAgIDVHLUhUNDAgICAgIDJHLUhUNDAgICAgIDJHLUhUMjAgICAgIFR1cmJvICAgKi8KLSAgICB7IDB4MDAwMGEzMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDYyMDAsIDB4MDAwMDYyMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDgyMDEsIDB4MDAwMDgyMDEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGIyNDAsIDB4MDAwMGIyNDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQyNDEsIDB4MDAwMGQyNDEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGY2MDAsIDB4MDAwMGY2MDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTI4MDAsIDB4MDAwMTI4MDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTY4MDIsIDB4MDAwMTY4MDIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMWI4MDUsIDB4MDAwMWI4MDUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjFhODAsIDB4MDAwMjFhODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjhiMDAsIDB4MDAwMjhiMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmFiNDAsIDB4MDAwMmFiNDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmNkODAsIDB4MDAwMmNkODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzNkODIsIDB4MDAwMzNkODIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzgsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzM2MsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNDAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNDQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNDgsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNGMsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNTAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNTQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4MTQsIDB4OTI0OTM0YTgsIDB4OTI0OTM0YTgsIDB4OTI0OTM0YTgsIDB4OTI0OTM0YTgsIDB4OTI0OTM0YTggfSwKLSAgICB7IDB4MDAwMDc4MjgsIDB4MjZkMjQ5MWIsIDB4MjZkMjQ5MWIsIDB4MjZkMjQ5MWIsIDB4MjZkMjQ5MWIsIDB4MjZkMjQ5MWIgfSwKLSAgICB7IDB4MDAwMDc4MzAsIDB4ZWRiNmQ5NmUsIDB4ZWRiNmQ5NmUsIDB4ZWRiNmQ5NmUsIDB4ZWRiNmQ5NmUsIDB4ZWRiNmQ5NmUgfSwKLSAgICB7IDB4MDAwMDc4MzgsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMgfSwKLSAgICB7IDB4MDAwMDc4M2MsIDB4MDAwMWZmZmUsIDB4MDAwMWZmZmUsIDB4MDAwMWZmZmUsIDB4MDAwMWZmZmUsIDB4MDAwMWZmZmUgfSwKLSAgICB7IDB4MDAwMDc4NDAsIDB4ZmZlYjFhMjAsIDB4ZmZlYjFhMjAsIDB4ZmZlYjFhMjAsIDB4ZmZlYjFhMjAsIDB4ZmZlYjFhMjAgfSwKLSAgICB7IDB4MDAwMDc4NmMsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUgfSwKLSAgICB7IDB4MDAwMDc4MjAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAgfSwKLSAgICB7IDB4MDAwMGEyNzQsIDB4MGEyMmE2NTIsIDB4MGEyMmE2NTIsIDB4MGEyMTY2NTIsIDB4MGEyMTY2NTIsIDB4MGEyMmE2NTIgfSwKLSAgICB7IDB4MDAwMGEyNzgsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcgfSwKLSAgICB7IDB4MDAwMGEyN2MsIDB4MDUwMzgwZTcsIDB4MDUwMzgwZTcsIDB4MDUwMzgwZTcsIDB4MDUwMzgwZTcsIDB4MDUwMzgwZTcgfSwKLSAgICB7IDB4MDAwMGEzOTQsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcgfSwKLSAgICB7IDB4MDAwMGEzOTgsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcgfSwKLSAgICB7IDB4MDAwMGEzZGMsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcgfSwKLSAgICB7IDB4MDAwMGEzZTAsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcgfSwKKwl7MHgwMDAwYTMwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDYyMDAsIDB4MDAwMDYyMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA4MjAxLCAweDAwMDA4MjAxLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYjI0MCwgMHgwMDAwYjI0MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQyNDEsIDB4MDAwMGQyNDEsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmNjAwLCAweDAwMDBmNjAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxMjgwMCwgMHgwMDAxMjgwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTY4MDIsIDB4MDAwMTY4MDIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDFiODA1LCAweDAwMDFiODA1LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyMWE4MCwgMHgwMDAyMWE4MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjhiMDAsIDB4MDAwMjhiMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDJhYjQwLCAweDAwMDJhYjQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyY2Q4MCwgMHgwMDAyY2Q4MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzNkODIsIDB4MDAwMzNkODIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzM4LCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMzYywgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzNDAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzQ0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTM0OCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzNGMsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzUwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTM1NCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDc4MTQsIDB4OTI0OTM0YTgsIDB4OTI0OTM0YTgsIDB4OTI0OTM0YTgsIDB4OTI0OTM0YTgsIDB4OTI0OTM0YTh9LAorCXsweDAwMDA3ODI4LCAweDI2ZDI0OTFiLCAweDI2ZDI0OTFiLCAweDI2ZDI0OTFiLCAweDI2ZDI0OTFiLCAweDI2ZDI0OTFifSwKKwl7MHgwMDAwNzgzMCwgMHhlZGI2ZDk2ZSwgMHhlZGI2ZDk2ZSwgMHhlZGI2ZDk2ZSwgMHhlZGI2ZDk2ZSwgMHhlZGI2ZDk2ZX0sCisJezB4MDAwMDc4MzgsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDN9LAorCXsweDAwMDA3ODNjLCAweDAwMDFmZmZlLCAweDAwMDFmZmZlLCAweDAwMDFmZmZlLCAweDAwMDFmZmZlLCAweDAwMDFmZmZlfSwKKwl7MHgwMDAwNzg0MCwgMHhmZmViMWEyMCwgMHhmZmViMWEyMCwgMHhmZmViMWEyMCwgMHhmZmViMWEyMCwgMHhmZmViMWEyMH0sCisJezB4MDAwMDc4NmMsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUsIDB4MDg2MDllYmV9LAorCXsweDAwMDA3ODIwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwfSwKKwl7MHgwMDAwYTI3NCwgMHgwYTIyYTY1MiwgMHgwYTIyYTY1MiwgMHgwYTIxNjY1MiwgMHgwYTIxNjY1MiwgMHgwYTIyYTY1Mn0sCisJezB4MDAwMGEyNzgsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTd9LAorCXsweDAwMDBhMjdjLCAweDA1MDM4MGU3LCAweDA1MDM4MGU3LCAweDA1MDM4MGU3LCAweDA1MDM4MGU3LCAweDA1MDM4MGU3fSwKKwl7MHgwMDAwYTM5NCwgMHgwZTczOWNlNywgMHgwZTczOWNlNywgMHgwZTczOWNlNywgMHgwZTczOWNlNywgMHgwZTczOWNlN30sCisJezB4MDAwMGEzOTgsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTd9LAorCXsweDAwMDBhM2RjLCAweDBlNzM5Y2U3LCAweDBlNzM5Y2U3LCAweDBlNzM5Y2U3LCAweDBlNzM5Y2U3LCAweDBlNzM5Y2U3fSwKKwl7MHgwMDAwYTNlMCwgMHgwMDAwMDBlNywgMHgwMDAwMDBlNywgMHgwMDAwMDBlNywgMHgwMDAwMDBlNywgMHgwMDAwMDBlN30sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyOTI4NU1vZGVzX29yaWdpbmFsX3R4X2dhaW5fOTI4NV8xXzJbXVs2XSA9IHsKLSAgICAvKiBBZGRyZXNzICAgICAgNUctSFQyMCAgICAgNUctSFQ0MCAgICAgMkctSFQ0MCAgICAgMkctSFQyMCAgICAgVHVyYm8gICAqLwotICAgIHsgMHgwMDAwYTMwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwOTIwMCwgMHgwMDAwOTIwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxMDIwOCwgMHgwMDAxMDIwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxOTYwOCwgMHgwMDAxOTYwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyMjYxOCwgMHgwMDAyMjYxOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyYTZjOSwgMHgwMDAyYTZjOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzMTcxMCwgMHgwMDAzMTcxMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzNTcxOCwgMHgwMDAzNTcxOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzODc1OCwgMHgwMDAzODc1OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzYzc1YSwgMHgwMDAzYzc1YSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA0MDc1YywgMHgwMDA0MDc1YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA0NDc1ZSwgMHgwMDA0NDc1ZSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA0Njc5ZiwgMHgwMDA0Njc5ZiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA0ODdkZiwgMHgwMDA0ODdkZiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMzOCwgMHgwMDAzODkxZSwgMHgwMDAzODkxZSwgMHgwMDAzODkxZSwgMHgwMDAzODkxZSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMzYywgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM0MCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM0NCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM0OCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM0YywgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM1MCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM1NCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwNzgxNCwgMHg5MjQ5MzRhOCwgMHg5MjQ5MzRhOCwgMHg5MjQ5MzRhOCwgMHg5MjQ5MzRhOCwgMHg5MjQ5MzRhOCB9LAotICAgIHsgMHgwMDAwNzgyOCwgMHgyNmQyNDkxYiwgMHgyNmQyNDkxYiwgMHgyNmQyNDkxYiwgMHgyNmQyNDkxYiwgMHgyNmQyNDkxYiB9LAotICAgIHsgMHgwMDAwNzgzMCwgMHhlZGI2ZDk2ZSwgMHhlZGI2ZDk2ZSwgMHhlZGI2ZDk2ZSwgMHhlZGI2ZDk2ZSwgMHhlZGI2ZDk2ZSB9LAotICAgIHsgMHgwMDAwNzgzOCwgMHhmYWM2ODgwMSwgMHhmYWM2ODgwMSwgMHhmYWM2ODgwMSwgMHhmYWM2ODgwMSwgMHhmYWM2ODgwMSB9LAotICAgIHsgMHgwMDAwNzgzYywgMHgwMDAxZmZmZSwgMHgwMDAxZmZmZSwgMHgwMDAxZmZmZSwgMHgwMDAxZmZmZSwgMHgwMDAxZmZmZSB9LAotICAgIHsgMHgwMDAwNzg0MCwgMHhmZmViMWEyMCwgMHhmZmViMWEyMCwgMHhmZmViMWEyMCwgMHhmZmViMWEyMCwgMHhmZmViMWEyMCB9LAotICAgIHsgMHgwMDAwNzg2YywgMHg0ODYwOWViNCwgMHg0ODYwOWViNCwgMHg0ODYwOWViNCwgMHg0ODYwOWViNCwgMHg0ODYwOWViNCB9LAotICAgIHsgMHgwMDAwNzgyMCwgMHgwMDAwMGMwNCwgMHgwMDAwMGMwNCwgMHgwMDAwMGMwNCwgMHgwMDAwMGMwNCwgMHgwMDAwMGMwNCB9LAotICAgIHsgMHgwMDAwYTI3NCwgMHgwYTIxYzY1MiwgMHgwYTIxYzY1MiwgMHgwYTIxYTY1MiwgMHgwYTIxYTY1MiwgMHgwYTIyYTY1MiB9LAotICAgIHsgMHgwMDAwYTI3OCwgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YyB9LAotICAgIHsgMHgwMDAwYTI3YywgMHgwNTBlMDM5YywgMHgwNTBlMDM5YywgMHgwNTBlMDM5YywgMHgwNTBlMDM5YywgMHgwNTBlMDM5YyB9LAotICAgIHsgMHgwMDAwYTM5NCwgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YyB9LAotICAgIHsgMHgwMDAwYTM5OCwgMHgwMDAwMDM5YywgMHgwMDAwMDM5YywgMHgwMDAwMDM5YywgMHgwMDAwMDM5YywgMHgwMDAwMDM5YyB9LAotICAgIHsgMHgwMDAwYTNkYywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YyB9LAotICAgIHsgMHgwMDAwYTNlMCwgMHgwMDAwMDM5YywgMHgwMDAwMDM5YywgMHgwMDAwMDM5YywgMHgwMDAwMDM5YywgMHgwMDAwMDM5YyB9LAorCXsweDAwMDBhMzAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwOTIwMCwgMHgwMDAwOTIwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTAyMDgsIDB4MDAwMTAyMDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE5NjA4LCAweDAwMDE5NjA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyMjYxOCwgMHgwMDAyMjYxOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmE2YzksIDB4MDAwMmE2YzksIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMxNzEwLCAweDAwMDMxNzEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzNTcxOCwgMHgwMDAzNTcxOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzg3NTgsIDB4MDAwMzg3NTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDNjNzVhLCAweDAwMDNjNzVhLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA0MDc1YywgMHgwMDA0MDc1YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNDQ3NWUsIDB4MDAwNDQ3NWUsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ2NzlmLCAweDAwMDQ2NzlmLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA0ODdkZiwgMHgwMDA0ODdkZiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMzgsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzNjLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTM0MCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzNDQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzQ4LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTM0YywgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzNTAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzU0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwNzgxNCwgMHg5MjQ5MzRhOCwgMHg5MjQ5MzRhOCwgMHg5MjQ5MzRhOCwgMHg5MjQ5MzRhOCwgMHg5MjQ5MzRhOH0sCisJezB4MDAwMDc4MjgsIDB4MjZkMjQ5MWIsIDB4MjZkMjQ5MWIsIDB4MjZkMjQ5MWIsIDB4MjZkMjQ5MWIsIDB4MjZkMjQ5MWJ9LAorCXsweDAwMDA3ODMwLCAweGVkYjZkOTZlLCAweGVkYjZkOTZlLCAweGVkYjZkOTZlLCAweGVkYjZkOTZlLCAweGVkYjZkOTZlfSwKKwl7MHgwMDAwNzgzOCwgMHhmYWM2ODgwMSwgMHhmYWM2ODgwMSwgMHhmYWM2ODgwMSwgMHhmYWM2ODgwMSwgMHhmYWM2ODgwMX0sCisJezB4MDAwMDc4M2MsIDB4MDAwMWZmZmUsIDB4MDAwMWZmZmUsIDB4MDAwMWZmZmUsIDB4MDAwMWZmZmUsIDB4MDAwMWZmZmV9LAorCXsweDAwMDA3ODQwLCAweGZmZWIxYTIwLCAweGZmZWIxYTIwLCAweGZmZWIxYTIwLCAweGZmZWIxYTIwLCAweGZmZWIxYTIwfSwKKwl7MHgwMDAwNzg2YywgMHg0ODYwOWViNCwgMHg0ODYwOWViNCwgMHg0ODYwOWViNCwgMHg0ODYwOWViNCwgMHg0ODYwOWViNH0sCisJezB4MDAwMDc4MjAsIDB4MDAwMDBjMDQsIDB4MDAwMDBjMDQsIDB4MDAwMDBjMDQsIDB4MDAwMDBjMDQsIDB4MDAwMDBjMDR9LAorCXsweDAwMDBhMjc0LCAweDBhMjFjNjUyLCAweDBhMjFjNjUyLCAweDBhMjFhNjUyLCAweDBhMjFhNjUyLCAweDBhMjJhNjUyfSwKKwl7MHgwMDAwYTI3OCwgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5Y30sCisJezB4MDAwMGEyN2MsIDB4MDUwZTAzOWMsIDB4MDUwZTAzOWMsIDB4MDUwZTAzOWMsIDB4MDUwZTAzOWMsIDB4MDUwZTAzOWN9LAorCXsweDAwMDBhMzk0LCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljfSwKKwl7MHgwMDAwYTM5OCwgMHgwMDAwMDM5YywgMHgwMDAwMDM5YywgMHgwMDAwMDM5YywgMHgwMDAwMDM5YywgMHgwMDAwMDM5Y30sCisJezB4MDAwMGEzZGMsIDB4MzljZTczOWMsIDB4MzljZTczOWMsIDB4MzljZTczOWMsIDB4MzljZTczOWMsIDB4MzljZTczOWN9LAorCXsweDAwMDBhM2UwLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljfSwKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgYXI5Mjg1TW9kZXNfWEUyXzBfbm9ybWFsX3Bvd2VyW11bNl0gPSB7Ci0gICAgeyAweDAwMDBhMzAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA5MjAwLCAweDAwMDA5MjAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDEwMjA4LCAweDAwMDEwMjA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE5NjA4LCAweDAwMDE5NjA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDIyNjE4LCAweDAwMDIyNjE4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDJhNmM5LCAweDAwMDJhNmM5LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMxNzEwLCAweDAwMDMxNzEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDM1NzE4LCAweDAwMDM1NzE4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDM4NzU4LCAweDAwMDM4NzU4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDNjNzVhLCAweDAwMDNjNzVhLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQwNzVjLCAweDAwMDQwNzVjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ0NzVlLCAweDAwMDQ0NzVlLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ2NzlmLCAweDAwMDQ2NzlmLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ4N2RmLCAweDAwMDQ4N2RmLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzM4LCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzNjLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzQwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzQ0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzQ4LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzRjLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzUwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzU0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA3ODE0LCAweDkyNDk3Y2E4LCAweDkyNDk3Y2E4LCAweDkyNDk3Y2E4LCAweDkyNDk3Y2E4LCAweDkyNDk3Y2E4IH0sCi0gICAgeyAweDAwMDA3ODI4LCAweDRhZDI0OTFiLCAweDRhZDI0OTFiLCAweDJhZDI0OTFiLCAweDRhZDI0OTFiLCAweDRhZDI0OTFiIH0sCi0gICAgeyAweDAwMDA3ODMwLCAweGVkYjZkYTZlLCAweGVkYjZkYTZlLCAweGVkYjZkYTZlLCAweGVkYjZkYTZlLCAweGVkYjZkYmFlIH0sCi0gICAgeyAweDAwMDA3ODM4LCAweGRhYzcxNDQxLCAweGRhYzcxNDQxLCAweGRhYzcxNDQxLCAweGRhYzcxNDQxLCAweGRhYzcxNDQxIH0sCi0gICAgeyAweDAwMDA3ODNjLCAweDI0ODFmNmZlLCAweDI0ODFmNmZlLCAweDI0ODFmNmZlLCAweDI0ODFmNmZlLCAweDI0ODFmNmZlIH0sCi0gICAgeyAweDAwMDA3ODQwLCAweGJhNWY2MzhjLCAweGJhNWY2MzhjLCAweGJhNWY2MzhjLCAweGJhNWY2MzhjLCAweGJhNWY2MzhjIH0sCi0gICAgeyAweDAwMDA3ODZjLCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0IH0sCi0gICAgeyAweDAwMDA3ODIwLCAweDAwMDAwYzA0LCAweDAwMDAwYzA0LCAweDAwMDAwYzA0LCAweDAwMDAwYzA0LCAweDAwMDAwYzA0IH0sCi0gICAgeyAweDAwMDBhMjc0LCAweDBhMjFjNjUyLCAweDBhMjFjNjUyLCAweDBhMjFhNjUyLCAweDBhMjFhNjUyLCAweDBhMjJhNjUyIH0sCi0gICAgeyAweDAwMDBhMjc4LCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljIH0sCi0gICAgeyAweDAwMDBhMjdjLCAweDA1MGUwMzljLCAweDA1MGUwMzljLCAweDA1MGUwMzljLCAweDA1MGUwMzljLCAweDA1MGUwMzljIH0sCi0gICAgeyAweDAwMDBhMzk0LCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljIH0sCi0gICAgeyAweDAwMDBhMzk4LCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljIH0sCi0gICAgeyAweDAwMDBhM2RjLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljIH0sCi0gICAgeyAweDAwMDBhM2UwLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljIH0sCisJezB4MDAwMGEzMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA5MjAwLCAweDAwMDA5MjAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxMDIwOCwgMHgwMDAxMDIwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTk2MDgsIDB4MDAwMTk2MDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDIyNjE4LCAweDAwMDIyNjE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyYTZjOSwgMHgwMDAyYTZjOSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzE3MTAsIDB4MDAwMzE3MTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDM1NzE4LCAweDAwMDM1NzE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzODc1OCwgMHgwMDAzODc1OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwM2M3NWEsIDB4MDAwM2M3NWEsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQwNzVjLCAweDAwMDQwNzVjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA0NDc1ZSwgMHgwMDA0NDc1ZSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNDY3OWYsIDB4MDAwNDY3OWYsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ4N2RmLCAweDAwMDQ4N2RmLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMzOCwgMHgwMDAzODkxZSwgMHgwMDAzODkxZSwgMHgwMDAzODkxZSwgMHgwMDAzODkxZSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzM2MsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzQwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTM0NCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzNDgsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzRjLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTM1MCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzNTQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA3ODE0LCAweDkyNDk3Y2E4LCAweDkyNDk3Y2E4LCAweDkyNDk3Y2E4LCAweDkyNDk3Y2E4LCAweDkyNDk3Y2E4fSwKKwl7MHgwMDAwNzgyOCwgMHg0YWQyNDkxYiwgMHg0YWQyNDkxYiwgMHgyYWQyNDkxYiwgMHg0YWQyNDkxYiwgMHg0YWQyNDkxYn0sCisJezB4MDAwMDc4MzAsIDB4ZWRiNmRhNmUsIDB4ZWRiNmRhNmUsIDB4ZWRiNmRhNmUsIDB4ZWRiNmRhNmUsIDB4ZWRiNmRiYWV9LAorCXsweDAwMDA3ODM4LCAweGRhYzcxNDQxLCAweGRhYzcxNDQxLCAweGRhYzcxNDQxLCAweGRhYzcxNDQxLCAweGRhYzcxNDQxfSwKKwl7MHgwMDAwNzgzYywgMHgyNDgxZjZmZSwgMHgyNDgxZjZmZSwgMHgyNDgxZjZmZSwgMHgyNDgxZjZmZSwgMHgyNDgxZjZmZX0sCisJezB4MDAwMDc4NDAsIDB4YmE1ZjYzOGMsIDB4YmE1ZjYzOGMsIDB4YmE1ZjYzOGMsIDB4YmE1ZjYzOGMsIDB4YmE1ZjYzOGN9LAorCXsweDAwMDA3ODZjLCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0fSwKKwl7MHgwMDAwNzgyMCwgMHgwMDAwMGMwNCwgMHgwMDAwMGMwNCwgMHgwMDAwMGMwNCwgMHgwMDAwMGMwNCwgMHgwMDAwMGMwNH0sCisJezB4MDAwMGEyNzQsIDB4MGEyMWM2NTIsIDB4MGEyMWM2NTIsIDB4MGEyMWE2NTIsIDB4MGEyMWE2NTIsIDB4MGEyMmE2NTJ9LAorCXsweDAwMDBhMjc4LCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljfSwKKwl7MHgwMDAwYTI3YywgMHgwNTBlMDM5YywgMHgwNTBlMDM5YywgMHgwNTBlMDM5YywgMHgwNTBlMDM5YywgMHgwNTBlMDM5Y30sCisJezB4MDAwMGEzOTQsIDB4MzljZTczOWMsIDB4MzljZTczOWMsIDB4MzljZTczOWMsIDB4MzljZTczOWMsIDB4MzljZTczOWN9LAorCXsweDAwMDBhMzk4LCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljfSwKKwl7MHgwMDAwYTNkYywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5Y30sCisJezB4MDAwMGEzZTAsIDB4MDAwMDAzOWMsIDB4MDAwMDAzOWMsIDB4MDAwMDAzOWMsIDB4MDAwMDAzOWMsIDB4MDAwMDAzOWN9LAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBhcjkyODVNb2Rlc19YRTJfMF9oaWdoX3Bvd2VyW11bNl0gPSB7Ci0gICAgeyAweDAwMDBhMzAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA2MjAwLCAweDAwMDA2MjAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA4MjAxLCAweDAwMDA4MjAxLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBiMjQwLCAweDAwMDBiMjQwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBkMjQxLCAweDAwMDBkMjQxLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmNjAwLCAweDAwMDBmNjAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDEyODAwLCAweDAwMDEyODAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE2ODAyLCAweDAwMDE2ODAyLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDFiODA1LCAweDAwMDFiODA1LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDIxYTgwLCAweDAwMDIxYTgwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDI4YjAwLCAweDAwMDI4YjAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDJhYjQwLCAweDAwMDJhYjQwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDJjZDgwLCAweDAwMDJjZDgwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMzZDgyLCAweDAwMDMzZDgyLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzM4LCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzNjLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzQwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzQ0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzQ4LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzRjLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzUwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzU0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA3ODE0LCAweDkyNDk3Y2E4LCAweDkyNDk3Y2E4LCAweDkyNDk3Y2E4LCAweDkyNDk3Y2E4LCAweDkyNDk3Y2E4IH0sCi0gICAgeyAweDAwMDA3ODI4LCAweDRhZDI0OTFiLCAweDRhZDI0OTFiLCAweDJhZDI0OTFiLCAweDRhZDI0OTFiLCAweDRhZDI0OTFiIH0sCi0gICAgeyAweDAwMDA3ODMwLCAweGVkYjZkYTZlLCAweGVkYjZkYTZlLCAweGVkYjZkYTZlLCAweGVkYjZkYTZlLCAweGVkYjZkYTZlIH0sCi0gICAgeyAweDAwMDA3ODM4LCAweGRhYzcxNDQzLCAweGRhYzcxNDQzLCAweGRhYzcxNDQzLCAweGRhYzcxNDQzLCAweGRhYzcxNDQzIH0sCi0gICAgeyAweDAwMDA3ODNjLCAweDI0ODFmNmZlLCAweDI0ODFmNmZlLCAweDI0ODFmNmZlLCAweDI0ODFmNmZlLCAweDI0ODFmNmZlIH0sCi0gICAgeyAweDAwMDA3ODQwLCAweGJhNWY2MzhjLCAweGJhNWY2MzhjLCAweGJhNWY2MzhjLCAweGJhNWY2MzhjLCAweGJhNWY2MzhjIH0sCi0gICAgeyAweDAwMDA3ODZjLCAweDA4NjA5ZWJlLCAweDA4NjA5ZWJlLCAweDA4NjA5ZWJlLCAweDA4NjA5ZWJlLCAweDA4NjA5ZWJlIH0sCi0gICAgeyAweDAwMDA3ODIwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwIH0sCi0gICAgeyAweDAwMDBhMjc0LCAweDBhMjJhNjUyLCAweDBhMjJhNjUyLCAweDBhMjE2NjUyLCAweDBhMjE2NjUyLCAweDBhMjJhNjUyIH0sCi0gICAgeyAweDAwMDBhMjc4LCAweDBlNzM5Y2U3LCAweDBlNzM5Y2U3LCAweDBlNzM5Y2U3LCAweDBlNzM5Y2U3LCAweDBlNzM5Y2U3IH0sCi0gICAgeyAweDAwMDBhMjdjLCAweDA1MDM4MGU3LCAweDA1MDM4MGU3LCAweDA1MDM4MGU3LCAweDA1MDM4MGU3LCAweDA1MDM4MGU3IH0sCi0gICAgeyAweDAwMDBhMzk0LCAweDBlNzM5Y2U3LCAweDBlNzM5Y2U3LCAweDBlNzM5Y2U3LCAweDBlNzM5Y2U3LCAweDBlNzM5Y2U3IH0sCi0gICAgeyAweDAwMDBhMzk4LCAweDAwMDAwMGU3LCAweDAwMDAwMGU3LCAweDAwMDAwMGU3LCAweDAwMDAwMGU3LCAweDAwMDAwMGU3IH0sCi0gICAgeyAweDAwMDBhM2RjLCAweDBlNzM5Y2U3LCAweDBlNzM5Y2U3LCAweDBlNzM5Y2U3LCAweDBlNzM5Y2U3LCAweDBlNzM5Y2U3IH0sCi0gICAgeyAweDAwMDBhM2UwLCAweDAwMDAwMGU3LCAweDAwMDAwMGU3LCAweDAwMDAwMGU3LCAweDAwMDAwMGU3LCAweDAwMDAwMGU3IH0sCisJezB4MDAwMGEzMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA2MjAwLCAweDAwMDA2MjAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwODIwMSwgMHgwMDAwODIwMSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGIyNDAsIDB4MDAwMGIyNDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBkMjQxLCAweDAwMDBkMjQxLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjYwMCwgMHgwMDAwZjYwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTI4MDAsIDB4MDAwMTI4MDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE2ODAyLCAweDAwMDE2ODAyLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxYjgwNSwgMHgwMDAxYjgwNSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjFhODAsIDB4MDAwMjFhODAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDI4YjAwLCAweDAwMDI4YjAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyYWI0MCwgMHgwMDAyYWI0MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmNkODAsIDB4MDAwMmNkODAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMzZDgyLCAweDAwMDMzZDgyLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMzOCwgMHgwMDAzODkxZSwgMHgwMDAzODkxZSwgMHgwMDAzODkxZSwgMHgwMDAzODkxZSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzM2MsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzQwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTM0NCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzNDgsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzRjLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTM1MCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzNTQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA3ODE0LCAweDkyNDk3Y2E4LCAweDkyNDk3Y2E4LCAweDkyNDk3Y2E4LCAweDkyNDk3Y2E4LCAweDkyNDk3Y2E4fSwKKwl7MHgwMDAwNzgyOCwgMHg0YWQyNDkxYiwgMHg0YWQyNDkxYiwgMHgyYWQyNDkxYiwgMHg0YWQyNDkxYiwgMHg0YWQyNDkxYn0sCisJezB4MDAwMDc4MzAsIDB4ZWRiNmRhNmUsIDB4ZWRiNmRhNmUsIDB4ZWRiNmRhNmUsIDB4ZWRiNmRhNmUsIDB4ZWRiNmRhNmV9LAorCXsweDAwMDA3ODM4LCAweGRhYzcxNDQzLCAweGRhYzcxNDQzLCAweGRhYzcxNDQzLCAweGRhYzcxNDQzLCAweGRhYzcxNDQzfSwKKwl7MHgwMDAwNzgzYywgMHgyNDgxZjZmZSwgMHgyNDgxZjZmZSwgMHgyNDgxZjZmZSwgMHgyNDgxZjZmZSwgMHgyNDgxZjZmZX0sCisJezB4MDAwMDc4NDAsIDB4YmE1ZjYzOGMsIDB4YmE1ZjYzOGMsIDB4YmE1ZjYzOGMsIDB4YmE1ZjYzOGMsIDB4YmE1ZjYzOGN9LAorCXsweDAwMDA3ODZjLCAweDA4NjA5ZWJlLCAweDA4NjA5ZWJlLCAweDA4NjA5ZWJlLCAweDA4NjA5ZWJlLCAweDA4NjA5ZWJlfSwKKwl7MHgwMDAwNzgyMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMH0sCisJezB4MDAwMGEyNzQsIDB4MGEyMmE2NTIsIDB4MGEyMmE2NTIsIDB4MGEyMTY2NTIsIDB4MGEyMTY2NTIsIDB4MGEyMmE2NTJ9LAorCXsweDAwMDBhMjc4LCAweDBlNzM5Y2U3LCAweDBlNzM5Y2U3LCAweDBlNzM5Y2U3LCAweDBlNzM5Y2U3LCAweDBlNzM5Y2U3fSwKKwl7MHgwMDAwYTI3YywgMHgwNTAzODBlNywgMHgwNTAzODBlNywgMHgwNTAzODBlNywgMHgwNTAzODBlNywgMHgwNTAzODBlN30sCisJezB4MDAwMGEzOTQsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTd9LAorCXsweDAwMDBhMzk4LCAweDAwMDAwMGU3LCAweDAwMDAwMGU3LCAweDAwMDAwMGU3LCAweDAwMDAwMGU3LCAweDAwMDAwMGU3fSwKKwl7MHgwMDAwYTNkYywgMHgwZTczOWNlNywgMHgwZTczOWNlNywgMHgwZTczOWNlNywgMHgwZTczOWNlNywgMHgwZTczOWNlN30sCisJezB4MDAwMGEzZTAsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTd9LAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBhcjkyODVQY2llUGh5X2Nsa3JlcV9hbHdheXNfb25fTDFfOTI4NV8xXzJbXVsyXSA9IHsKLSAgICB7MHgwMDAwNDA0MCwgIDB4OTI0OGZkMDAgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4MjQ5MjQ5MjQgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4YTgwMDAwMTkgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4MTMxNjA4MjAgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4ZTU5ODA1NjAgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4YzAxZGNmZmQgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4MWFhYWJlNDEgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4YmUxMDU1NTQgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4MDAwNDMwMDcgfSwKLSAgICB7MHgwMDAwNDA0NCwgIDB4MDAwMDAwMDAgfSwKKwkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCisJezB4MDAwMDQwNDAsIDB4OTI0OGZkMDB9LAorCXsweDAwMDA0MDQwLCAweDI0OTI0OTI0fSwKKwl7MHgwMDAwNDA0MCwgMHhhODAwMDAxOX0sCisJezB4MDAwMDQwNDAsIDB4MTMxNjA4MjB9LAorCXsweDAwMDA0MDQwLCAweGU1OTgwNTYwfSwKKwl7MHgwMDAwNDA0MCwgMHhjMDFkY2ZmZH0sCisJezB4MDAwMDQwNDAsIDB4MWFhYWJlNDF9LAorCXsweDAwMDA0MDQwLCAweGJlMTA1NTU0fSwKKwl7MHgwMDAwNDA0MCwgMHgwMDA0MzAwN30sCisJezB4MDAwMDQwNDQsIDB4MDAwMDAwMDB9LAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBhcjkyODVQY2llUGh5X2Nsa3JlcV9vZmZfTDFfOTI4NV8xXzJbXVsyXSA9IHsKLSAgICB7MHgwMDAwNDA0MCwgIDB4OTI0OGZkMDAgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4MjQ5MjQ5MjQgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4YTgwMDAwMTkgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4MTMxNjA4MjAgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4ZTU5ODA1NjAgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4YzAxZGNmZmMgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4MWFhYWJlNDEgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4YmUxMDU1NTQgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4MDAwNDMwMDcgfSwKLSAgICB7MHgwMDAwNDA0NCwgIDB4MDAwMDAwMDAgfSwKKwkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCisJezB4MDAwMDQwNDAsIDB4OTI0OGZkMDB9LAorCXsweDAwMDA0MDQwLCAweDI0OTI0OTI0fSwKKwl7MHgwMDAwNDA0MCwgMHhhODAwMDAxOX0sCisJezB4MDAwMDQwNDAsIDB4MTMxNjA4MjB9LAorCXsweDAwMDA0MDQwLCAweGU1OTgwNTYwfSwKKwl7MHgwMDAwNDA0MCwgMHhjMDFkY2ZmY30sCisJezB4MDAwMDQwNDAsIDB4MWFhYWJlNDF9LAorCXsweDAwMDA0MDQwLCAweGJlMTA1NTU0fSwKKwl7MHgwMDAwNDA0MCwgMHgwMDA0MzAwN30sCisJezB4MDAwMDQwNDQsIDB4MDAwMDAwMDB9LAogfTsKIAotLyogQVI5Mjg3IFJldmlzaW9uIDEwICovCi1zdGF0aWMgY29uc3QgdTMyIGFyOTI4N01vZGVzXzkyODdfMV8wW11bNl0gPSB7Ci0gICAgLyogQWRkcmVzcyAgICAgIDVHLUhUMjAgICAgIDVHLUhUNDAgICAgIDJHLUhUNDAgICAgIDJHLUhUMjAgICAgIFR1cmJvICAgKi8KLSAgICB7IDB4MDAwMDEwMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAyYzAsIDB4MDAwMDAxNjAsIDB4MDAwMDAxZTAgfSwKLSAgICB7IDB4MDAwMDEwNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAzMTgsIDB4MDAwMDAxOGMsIDB4MDAwMDAxZTAgfSwKLSAgICB7IDB4MDAwMDEwYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDdjNzAsIDB4MDAwMDNlMzgsIDB4MDAwMDExODAgfSwKLSAgICB7IDB4MDAwMDEwZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMDgwMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MTA4MDE2MDAsIDB4MDg0MDBiMDAsIDB4MDZlMDA2ZTAgfSwKLSAgICB7IDB4MDAwMDgwMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MTJlMDAwNTcsIDB4MTJlMDAwMmIsIDB4MDk4ODAwNGYgfSwKLSAgICB7IDB4MDAwMDgxMjAsIDB4MDhmMDQ4MDAsIDB4MDhmMDQ4MDAsIDB4MDhmMDQ4MTAsIDB4MDhmMDQ4MTAsIDB4MDhmMDQ4MTAgfSwKLSAgICB7IDB4MDAwMDgxZDAsIDB4MDAwMDMyMDAsIDB4MDAwMDMyMDAsIDB4MDAwMDMyMGEsIDB4MDAwMDMyMGEsIDB4MDAwMDMyMGEgfSwKLSAgICB7IDB4MDAwMDgzMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDY4ODAsIDB4MDAwMDM0NDAsIDB4MDAwMDY4ODAgfSwKLSAgICB7IDB4MDAwMDk4MDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAzYzQsIDB4MDAwMDAzMDAsIDB4MDAwMDAzMDMgfSwKLSAgICB7IDB4MDAwMDk4MjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAgfSwKLSAgICB7IDB4MDAwMDk4MjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDEwMDBlMGUsIDB4MDEwMDBlMGUsIDB4MDEwMDBlMGUgfSwKLSAgICB7IDB4MDAwMDk4MjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEgfSwKLSAgICB7IDB4MDAwMDk4MzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSwKLSAgICB7IDB4MDAwMDk4MzgsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcgfSwKLSAgICB7IDB4MDAwMDk4NDAsIDB4MjA2YTAwMmUsIDB4MjA2YTAwMmUsIDB4MjA2YTAxMmUsIDB4MjA2YTAxMmUsIDB4MjA2YTAxMmUgfSwKLSAgICB7IDB4MDAwMDk4NDQsIDB4MDM3MjAwMDAsIDB4MDM3MjAwMDAsIDB4MDM3MjE2YTAsIDB4MDM3MjE2YTAsIDB4MDM3MjE2YTAgfSwKLSAgICB7IDB4MDAwMDk4NTAsIDB4NjAwMDAwMDAsIDB4NjAwMDAwMDAsIDB4NmQ0MDAwZTIsIDB4NmM0MDAwZTIsIDB4NmM0MDAwZTIgfSwKLSAgICB7IDB4MDAwMDk4NTgsIDB4N2MwMDBkMDAsIDB4N2MwMDBkMDAsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUgfSwKLSAgICB7IDB4MDAwMDk4NWMsIDB4MzEwMDAwNWUsIDB4MzEwMDAwNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTVkNWUsIDB4MzEzOTVkNWUgfSwKLSAgICB7IDB4MDAwMDk4NjAsIDB4MDAwNThkMDAsIDB4MDAwNThkMDAsIDB4MDAwNThkMjAsIDB4MDAwNThkMjAsIDB4MDAwNThkMTggfSwKLSAgICB7IDB4MDAwMDk4NjQsIDB4MDAwMDBlMDAsIDB4MDAwMDBlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAgfSwKLSAgICB7IDB4MDAwMDk4NjgsIDB4MDAwMDQwYzAsIDB4MDAwMDQwYzAsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDAgfSwKLSAgICB7IDB4MDAwMDk4NmMsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDY5MDM4ODEsIDB4MDY5MDM4ODEsIDB4MDY5MDM4ODEgfSwKLSAgICB7IDB4MDAwMDk5MTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDExMzAsIDB4MDAwMDA4OTgsIDB4MDAwMDA3ZDAgfSwKLSAgICB7IDB4MDAwMDk5MTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMTYsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMTYgfSwKLSAgICB7IDB4MDAwMDk5MjQsIDB4ZDAwYThhMDEsIDB4ZDAwYThhMDEsIDB4ZDAwYThhMGQsIDB4ZDAwYThhMGQsIDB4ZDAwYThhMGQgfSwKLSAgICB7IDB4MDAwMDk5NDQsIDB4ZWZiYzAwMDAsIDB4ZWZiYzAwMDAsIDB4ZWZiYzEwMTAsIDB4ZWZiYzEwMTAsIDB4ZWZiYzEwMTAgfSwKLSAgICB7IDB4MDAwMDk5NjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAgfSwKLSAgICB7IDB4MDAwMGE5NjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAgfSwKLSAgICB7IDB4MDAwMDk5NjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAyMTAsIDB4MDAwMDAyMTAsIDB4MDAwMDAyMTAgfSwKLSAgICB7IDB4MDAwMGM5NjgsIDB4MDAwMDAyMDAsIDB4MDAwMDAyMDAsIDB4MDAwMDAzY2UsIDB4MDAwMDAzY2UsIDB4MDAwMDAzY2UgfSwKLSAgICB7IDB4MDAwMDk5YjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMWMsIDB4MDAwMDAwMWMsIDB4MDAwMDAwMWMgfSwKLSAgICB7IDB4MDAwMDk5YmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAgfSwKLSAgICB7IDB4MDAwMDk5YzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQgfSwKLSAgICB7IDB4MDAwMGEyMDQsIDB4MDAwMDA0NDAsIDB4MDAwMDA0NDAsIDB4MDAwMDA0NDQsIDB4MDAwMDA0NDQsIDB4MDAwMDA0NDQgfSwKLSAgICB7IDB4MDAwMGEyMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGIyMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEyMWMsIDB4MTgwMzgwMGEsIDB4MTgwMzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSwKLSAgICB7IDB4MDAwMGEyMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAyMTAsIDB4MDAwMDAxMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEyNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNGEwMDAsIDB4MDAwNGEwMDAsIDB4MDAwNGEwMDAgfSwKLSAgICB7IDB4MDAwMGEzNTgsIDB4Nzk5OWFhMDIsIDB4Nzk5OWFhMDIsIDB4Nzk5OWFhMGUsIDB4Nzk5OWFhMGUsIDB4Nzk5OWFhMGUgfSwKLSAgICB7IDB4MDAwMGEzZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5Mjg3Q29tbW9uXzkyODdfMV8wW11bMl0gPSB7Ci0gICAgeyAweDAwMDAwMDBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMDIwMDE1IH0sCi0gICAgeyAweDAwMDAwMDM0LCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwMDAwMDQwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDQ0LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDAwMDQ4LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDAwMDRjLCAweDAwMDAwMDEwIH0sCi0gICAgeyAweDAwMDAwMDUwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDU0LCAweDAwMDAwMDFmIH0sCi0gICAgeyAweDAwMDAwODAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODE4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODFjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODIwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMDQwLCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDQ0LCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDQ4LCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDRjLCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDUwLCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDU0LCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDU4LCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDVjLCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDYwLCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDY0LCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMjMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMjcwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMDM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMDc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMGI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMGY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMTM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMTc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMWI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMWY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMjM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMjc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMmI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMmY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMzM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMzc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxM2I4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxM2Y4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNDM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNDc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNGI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNGY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNTM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNTc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNWI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNWY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNjM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNjc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNmI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNmY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNzM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNzc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxN2I4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxN2Y4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMDNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMDdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMGJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMGZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMTNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMTdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMWJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMWZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMjNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMjdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMmJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMmZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMzNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMzdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxM2JjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxM2ZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNDNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNDdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA0MDMwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA0MDNjLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA0MDI0LCAweDAwMDAwMDFmIH0sCi0gICAgeyAweDAwMDA0MDYwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA0MDY0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA3MDEwLCAweDAwMDAwMDMzIH0sCi0gICAgeyAweDAwMDA3MDIwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA3MDM0LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3MDM4LCAweDAwMDAwNGMyIH0sCi0gICAgeyAweDAwMDA4MDA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDE4LCAweDAwMDAwNzAwIH0sCi0gICAgeyAweDAwMDA4MDIwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDQ4LCAweDQwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDU0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDU4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDVjLCAweDAwMGZjNzhmIH0sCi0gICAgeyAweDAwMDA4MDYwLCAweDAwMDAwMDBmIH0sCi0gICAgeyAweDAwMDA4MDY0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDcwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGMwLCAweDJhODAwMDFhIH0sCi0gICAgeyAweDAwMDA4MGM0LCAweDA1ZGMwMWUwIH0sCi0gICAgeyAweDAwMDA4MGM4LCAweDFmNDAyNzEwIH0sCi0gICAgeyAweDAwMDA4MGNjLCAweDAxZjQwMDAwIH0sCi0gICAgeyAweDAwMDA4MGQwLCAweDAwMDAxZTAwIH0sCi0gICAgeyAweDAwMDA4MGQ0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGQ4LCAweDAwNDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGUwLCAweGZmZmZmZmZmIH0sCi0gICAgeyAweDAwMDA4MGU0LCAweDAwMDBmZmZmIH0sCi0gICAgeyAweDAwMDA4MGU4LCAweDAwM2YzZjNmIH0sCi0gICAgeyAweDAwMDA4MGVjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGYwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGY0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGZjLCAweDAwMDIwMDAwIH0sCi0gICAgeyAweDAwMDA4MTAwLCAweDAwMDIwMDAwIH0sCi0gICAgeyAweDAwMDA4MTA0LCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDA4MTA4LCAweDAwMDAwMDUyIH0sCi0gICAgeyAweDAwMDA4MTBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTEwLCAweDAwMDAwMTY4IH0sCi0gICAgeyAweDAwMDA4MTE4LCAweDAwMDEwMGFhIH0sCi0gICAgeyAweDAwMDA4MTFjLCAweDAwMDAzMjEwIH0sCi0gICAgeyAweDAwMDA4MTI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTM0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTQ0LCAweGZmZmZmZmZmIH0sCi0gICAgeyAweDAwMDA4MTY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTcwLCAweDE4NDg3MzIwIH0sCi0gICAgeyAweDAwMDA4MTc0LCAweGZhYTRmYTUwIH0sCi0gICAgeyAweDAwMDA4MTc4LCAweDAwMDAwMTAwIH0sCi0gICAgeyAweDAwMDA4MTdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWM0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWQ0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWVjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWYwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWY0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjE4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjFjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjIwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjM0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjQwLCAweDAwMTAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjQ0LCAweDAwMTBmNDAwIH0sCi0gICAgeyAweDAwMDA4MjQ4LCAweDAwMDAwMTAwIH0sCi0gICAgeyAweDAwMDA4MjRjLCAweDAwMDFlODAwIH0sCi0gICAgeyAweDAwMDA4MjUwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjU0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjU4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjVjLCAweDQwMDAwMGZmIH0sCi0gICAgeyAweDAwMDA4MjYwLCAweDAwMDgwOTIyIH0sCi0gICAgeyAweDAwMDA4MjY0LCAweDg4YTAwMDEwIH0sCi0gICAgeyAweDAwMDA4MjcwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4Mjc0LCAweDQwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4Mjc4LCAweDAwM2U0MTgwIH0sCi0gICAgeyAweDAwMDA4MjdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4Mjg0LCAweDAwMDAwMDJjIH0sCi0gICAgeyAweDAwMDA4Mjg4LCAweDAwMDAwMDJjIH0sCi0gICAgeyAweDAwMDA4MjhjLCAweDAwMDAwMGZmIH0sCi0gICAgeyAweDAwMDA4Mjk0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4Mjk4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjljLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzAwLCAweDAwMDAwMDQwIH0sCi0gICAgeyAweDAwMDA4MzE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzJjLCAweDAwMDAwMDA3IH0sCi0gICAgeyAweDAwMDA4MzMwLCAweDAwMDAwMzAyIH0sCi0gICAgeyAweDAwMDA4MzM0LCAweDAwMDAwZTAwIH0sCi0gICAgeyAweDAwMDA4MzM4LCAweDAwZmYwMDAwIH0sCi0gICAgeyAweDAwMDA4MzNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzQwLCAweDAwMDEwN2ZmIH0sCi0gICAgeyAweDAwMDA4MzQ0LCAweDAxYzgxMDQzIH0sCi0gICAgeyAweDAwMDA4MzYwLCAweGZmZmZmZmZmIH0sCi0gICAgeyAweDAwMDA4MzY0LCAweGZmZmZmZmZmIH0sCi0gICAgeyAweDAwMDA4MzY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzcwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4Mzc0LCAweDAwMDAwMGZmIH0sCi0gICAgeyAweDAwMDA4Mzc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzgwLCAweGZmZmZmZmZmIH0sCi0gICAgeyAweDAwMDA4Mzg0LCAweGZmZmZmZmZmIH0sCi0gICAgeyAweDAwMDA4MzkwLCAweDBmZmZmZmZmIH0sCi0gICAgeyAweDAwMDA4Mzk0LCAweDBmZmZmZmZmIH0sCi0gICAgeyAweDAwMDA4Mzk4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzljLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4M2EwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5ODA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5ODBjLCAweGFmZTY4ZTMwIH0sCi0gICAgeyAweDAwMDA5ODEwLCAweGZkMTRlMDAwIH0sCi0gICAgeyAweDAwMDA5ODE0LCAweDljMGE5ZjZiIH0sCi0gICAgeyAweDAwMDA5ODFjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5ODJjLCAweDAwMDBhMDAwIH0sCi0gICAgeyAweDAwMDA5ODMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5ODNjLCAweDAwMjAwNDAwIH0sCi0gICAgeyAweDAwMDA5ODRjLCAweDAwNDAyMzNjIH0sCi0gICAgeyAweDAwMDBhODRjLCAweDAwNDAyMzNjIH0sCi0gICAgeyAweDAwMDA5ODU0LCAweDAwMDAwMDQ0IH0sCi0gICAgeyAweDAwMDA5OTAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTEwLCAweDEwMDAyMzEwIH0sCi0gICAgeyAweDAwMDA5OTFjLCAweDEwMDAwZmZmIH0sCi0gICAgeyAweDAwMDA5OTIwLCAweDA0OTAwMDAwIH0sCi0gICAgeyAweDAwMDBhOTIwLCAweDA0OTAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTI4LCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDA5OTJjLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDA5OTMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhOTMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTM0LCAweDFlMWYyMDIyIH0sCi0gICAgeyAweDAwMDA5OTM4LCAweDBhMGIwYzBkIH0sCi0gICAgeyAweDAwMDA5OTNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTQ4LCAweDkyODBjMDBhIH0sCi0gICAgeyAweDAwMDA5OTRjLCAweDAwMDIwMDI4IH0sCi0gICAgeyAweDAwMDA5OTU0LCAweDVmM2NhM2RlIH0sCi0gICAgeyAweDAwMDA5OTU4LCAweDAxMDhlY2ZmIH0sCi0gICAgeyAweDAwMDA5OTQwLCAweDE0NzUwNjA0IH0sCi0gICAgeyAweDAwMDBjOTVjLCAweDAwNGI2YThlIH0sCi0gICAgeyAweDAwMDA5OTcwLCAweDk5MGJiNTE1IH0sCi0gICAgeyAweDAwMDA5OTc0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTc4LCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDA5OTdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWE0LCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDA5OWE4LCAweDIwMWZmZjAwIH0sCi0gICAgeyAweDAwMDA5OWFjLCAweDBjNmYwMDAwIH0sCi0gICAgeyAweDAwMDA5OWIwLCAweDAzMDUxMDAwIH0sCi0gICAgeyAweDAwMDA5OWI0LCAweDAwMDAwODIwIH0sCi0gICAgeyAweDAwMDA5OWM0LCAweDA2MzM2Zjc3IH0sCi0gICAgeyAweDAwMDA5OWM4LCAweDZhZjY1MzI5IH0sCi0gICAgeyAweDAwMDA5OWNjLCAweDA4ZjE4NmM4IH0sCi0gICAgeyAweDAwMDA5OWQwLCAweDAwMDQ2Mzg0IH0sCi0gICAgeyAweDAwMDA5OWRjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWUwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWU0LCAweGFhYWFhYWFhIH0sCi0gICAgeyAweDAwMDA5OWU4LCAweDNjNDY2NDc4IH0sCi0gICAgeyAweDAwMDA5OWVjLCAweDBjYzgwY2FhIH0sCi0gICAgeyAweDAwMDA5OWYwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWZjLCAweDAwMDAxMDQyIH0sCi0gICAgeyAweDAwMDBhMWY0LCAweDAwZmZmZWZmIH0sCi0gICAgeyAweDAwMDBhMWY4LCAweDAwZjVmOWZmIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweGI3OWY2NDI3IH0sCi0gICAgeyAweDAwMDBhMjA4LCAweDgwM2U0Nzg4IH0sCi0gICAgeyAweDAwMDBhMjEwLCAweDQwODBhMzMzIH0sCi0gICAgeyAweDAwMDBhMjE0LCAweDQwMjA2YzEwIH0sCi0gICAgeyAweDAwMDBhMjE4LCAweDAwOWM0MDYwIH0sCi0gICAgeyAweDAwMDBhMjIwLCAweDAxODM0MDYxIH0sCi0gICAgeyAweDAwMDBhMjI0LCAweDAwMDAwNDAwIH0sCi0gICAgeyAweDAwMDBhMjI4LCAweDAwMDAwM2I1IH0sCi0gICAgeyAweDAwMDBhMjJjLCAweDIzM2Y3MTgwIH0sCi0gICAgeyAweDAwMDBhMjM0LCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhMjM4LCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhMjNjLCAweDEzYzg4OWFmIH0sCi0gICAgeyAweDAwMDBhMjQwLCAweDM4NDkwYTIwIH0sCi0gICAgeyAweDAwMDBhMjQ0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjQ4LCAweGZmZmZmZmZjIH0sCi0gICAgeyAweDAwMDBhMjRjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjU0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjU4LCAweDBjZGJkMzgwIH0sCi0gICAgeyAweDAwMDBhMjVjLCAweDBmMGYwZjAxIH0sCi0gICAgeyAweDAwMDBhMjYwLCAweGRmYTkxZjAxIH0sCi0gICAgeyAweDAwMDBhMjY0LCAweDAwNDE4YTExIH0sCi0gICAgeyAweDAwMDBiMjY0LCAweDAwNDE4YTExIH0sCi0gICAgeyAweDAwMDBhMjY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjZjLCAweDBlNzllNWM2IH0sCi0gICAgeyAweDAwMDBiMjZjLCAweDBlNzllNWM2IH0sCi0gICAgeyAweDAwMDBkMjcwLCAweDAwODIwODIwIH0sCi0gICAgeyAweDAwMDBhMjc4LCAweDFjZTczOWNlIH0sCi0gICAgeyAweDAwMDBhMjdjLCAweDA1MDcwMWNlIH0sCi0gICAgeyAweDAwMDBkMzVjLCAweDA3ZmZmZmVmIH0sCi0gICAgeyAweDAwMDBkMzYwLCAweDBmZmZmZmU3IH0sCi0gICAgeyAweDAwMDBkMzY0LCAweDE3ZmZmZmU1IH0sCi0gICAgeyAweDAwMDBkMzY4LCAweDFmZmZmZmU0IH0sCi0gICAgeyAweDAwMDBkMzZjLCAweDM3ZmZmZmUzIH0sCi0gICAgeyAweDAwMDBkMzcwLCAweDNmZmZmZmUzIH0sCi0gICAgeyAweDAwMDBkMzc0LCAweDU3ZmZmZmUzIH0sCi0gICAgeyAweDAwMDBkMzc4LCAweDVmZmZmZmUyIH0sCi0gICAgeyAweDAwMDBkMzdjLCAweDdmZmZmZmUyIH0sCi0gICAgeyAweDAwMDBkMzgwLCAweDdmM2M3YmJhIH0sCi0gICAgeyAweDAwMDBkMzg0LCAweGYzMzA3ZmYwIH0sCi0gICAgeyAweDAwMDBhMzg4LCAweDBjMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzhjLCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhMzkwLCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhMzk0LCAweDFjZTczOWNlIH0sCi0gICAgeyAweDAwMDBhMzk4LCAweDAwMDAwMWNlIH0sCi0gICAgeyAweDAwMDBiMzk4LCAweDAwMDAwMWNlIH0sCi0gICAgeyAweDAwMDBhMzljLCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDBhM2M4LCAweDAwMDAwMjQ2IH0sCi0gICAgeyAweDAwMDBhM2NjLCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhM2QwLCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhM2Q0LCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhM2RjLCAweDFjZTczOWNlIH0sCi0gICAgeyAweDAwMDBhM2UwLCAweDAwMDAwMWNlIH0sCi0gICAgeyAweDAwMDBhM2U0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2U4LCAweDE4YzQzNDMzIH0sCi0gICAgeyAweDAwMDBhM2VjLCAweDAwZjcwMDgxIH0sCi0gICAgeyAweDAwMDBhM2YwLCAweDAxMDM2YTFlIH0sCi0gICAgeyAweDAwMDBhM2Y0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBiM2Y0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhN2Q4LCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDA3ODAwLCAweDAwMDAwODAwIH0sCi0gICAgeyAweDAwMDA3ODA0LCAweDZjMzVmZmIwIH0sCi0gICAgeyAweDAwMDA3ODA4LCAweDZkYjZjMDAwIH0sCi0gICAgeyAweDAwMDA3ODBjLCAweDZkYjZjYjMwIH0sCi0gICAgeyAweDAwMDA3ODEwLCAweDZkYjZjYjZjIH0sCi0gICAgeyAweDAwMDA3ODE0LCAweDA1MDFlMjAwIH0sCi0gICAgeyAweDAwMDA3ODE4LCAweDAwOTQxMjhkIH0sCi0gICAgeyAweDAwMDA3ODFjLCAweDk3NmVlMzkyIH0sCi0gICAgeyAweDAwMDA3ODIwLCAweGY3NWZmNmZjIH0sCi0gICAgeyAweDAwMDA3ODI0LCAweDAwMDQwMDAwIH0sCi0gICAgeyAweDAwMDA3ODI4LCAweGRiMDAzMDEyIH0sCi0gICAgeyAweDAwMDA3ODJjLCAweDA0OTI0OTE0IH0sCi0gICAgeyAweDAwMDA3ODMwLCAweDIxMDg0MjEwIH0sCi0gICAgeyAweDAwMDA3ODM0LCAweDAwMTQwMDAwIH0sCi0gICAgeyAweDAwMDA3ODM4LCAweDBlNDU0OGQ4IH0sCi0gICAgeyAweDAwMDA3ODNjLCAweDU0MjE0NTE0IH0sCi0gICAgeyAweDAwMDA3ODQwLCAweDAyMDI1ODIwIH0sCi0gICAgeyAweDAwMDA3ODQ0LCAweDcxYzBkMzg4IH0sCi0gICAgeyAweDAwMDA3ODQ4LCAweDkzNDkzNGE4IH0sCi0gICAgeyAweDAwMDA3ODUwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA3ODU0LCAweDAwMDAwODAwIH0sCi0gICAgeyAweDAwMDA3ODU4LCAweDZjMzVmZmIwIH0sCi0gICAgeyAweDAwMDA3ODVjLCAweDZkYjZjMDAwIH0sCi0gICAgeyAweDAwMDA3ODYwLCAweDZkYjZjYjJjIH0sCi0gICAgeyAweDAwMDA3ODY0LCAweDZkYjZjYjZjIH0sCi0gICAgeyAweDAwMDA3ODY4LCAweDA1MDFlMjAwIH0sCi0gICAgeyAweDAwMDA3ODZjLCAweDAwOTQxMjhkIH0sCi0gICAgeyAweDAwMDA3ODcwLCAweDk3NmVlMzkyIH0sCi0gICAgeyAweDAwMDA3ODc0LCAweGY3NWZmNmZjIH0sCi0gICAgeyAweDAwMDA3ODc4LCAweDAwMDQwMDAwIH0sCi0gICAgeyAweDAwMDA3ODdjLCAweGRiMDAzMDEyIH0sCi0gICAgeyAweDAwMDA3ODgwLCAweDA0OTI0OTE0IH0sCi0gICAgeyAweDAwMDA3ODg0LCAweDIxMDg0MjEwIH0sCi0gICAgeyAweDAwMDA3ODg4LCAweDAwMWI2ZGIwIH0sCi0gICAgeyAweDAwMDA3ODhjLCAweDAwMzc2YjYzIH0sCi0gICAgeyAweDAwMDA3ODkwLCAweDA2ZGI2ZGI2IH0sCi0gICAgeyAweDAwMDA3ODk0LCAweDAwNmQ4MDAwIH0sCi0gICAgeyAweDAwMDA3ODk4LCAweDQ4MTAwMDAwIH0sCi0gICAgeyAweDAwMDA3ODljLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA3OGEwLCAweDA4MDAwMDAwIH0sCi0gICAgeyAweDAwMDA3OGE0LCAweDAwMDdmZmQ4IH0sCi0gICAgeyAweDAwMDA3OGE4LCAweDAwMDdmZmQ4IH0sCi0gICAgeyAweDAwMDA3OGFjLCAweDAwMWMwMDIwIH0sCi0gICAgeyAweDAwMDA3OGIwLCAweDAwMDYxMWViIH0sCi0gICAgeyAweDAwMDA3OGI0LCAweDQwMDA4MDgwIH0sCi0gICAgeyAweDAwMDA3OGI4LCAweDJhODUwMTYwIH0sCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIGFyOTI4N01vZGVzX3R4X2dhaW5fOTI4N18xXzBbXVs2XSA9IHsKLSAgICAvKiBBZGRyZXNzICAgICAgNUctSFQyMCAgICAgNUctSFQ0MCAgICAgMkctSFQ0MCAgICAgMkctSFQyMCAgICAgVHVyYm8gICAqLwotICAgIHsgMHgwMDAwYTMwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwNDAwMiwgMHgwMDAwNDAwMiwgMHgwMDAwNDAwMiB9LAotICAgIHsgMHgwMDAwYTMwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwODAwNCwgMHgwMDAwODAwNCwgMHgwMDAwODAwNCB9LAotICAgIHsgMHgwMDAwYTMwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYzAwYSwgMHgwMDAwYzAwYSwgMHgwMDAwYzAwYSB9LAotICAgIHsgMHgwMDAwYTMxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxMDAwYywgMHgwMDAxMDAwYywgMHgwMDAxMDAwYyB9LAotICAgIHsgMHgwMDAwYTMxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxNDIwYiwgMHgwMDAxNDIwYiwgMHgwMDAxNDIwYiB9LAotICAgIHsgMHgwMDAwYTMxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxODI0YSwgMHgwMDAxODI0YSwgMHgwMDAxODI0YSB9LAotICAgIHsgMHgwMDAwYTMxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxYzQ0YSwgMHgwMDAxYzQ0YSwgMHgwMDAxYzQ0YSB9LAotICAgIHsgMHgwMDAwYTMyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyMDY0YSwgMHgwMDAyMDY0YSwgMHgwMDAyMDY0YSB9LAotICAgIHsgMHgwMDAwYTMyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyNDg0YSwgMHgwMDAyNDg0YSwgMHgwMDAyNDg0YSB9LAotICAgIHsgMHgwMDAwYTMyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyOGE0YSwgMHgwMDAyOGE0YSwgMHgwMDAyOGE0YSB9LAotICAgIHsgMHgwMDAwYTMyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyY2M0YSwgMHgwMDAyY2M0YSwgMHgwMDAyY2M0YSB9LAotICAgIHsgMHgwMDAwYTMzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzMGU0YSwgMHgwMDAzMGU0YSwgMHgwMDAzMGU0YSB9LAotICAgIHsgMHgwMDAwYTMzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzNGU4YSwgMHgwMDAzNGU4YSwgMHgwMDAzNGU4YSB9LAotICAgIHsgMHgwMDAwYTMzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzOGU4YywgMHgwMDAzOGU4YywgMHgwMDAzOGU4YyB9LAotICAgIHsgMHgwMDAwYTMzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzY2VjYywgMHgwMDAzY2VjYywgMHgwMDAzY2VjYyB9LAotICAgIHsgMHgwMDAwYTM0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA0MGVkNCwgMHgwMDA0MGVkNCwgMHgwMDA0MGVkNCB9LAotICAgIHsgMHgwMDAwYTM0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA0NGVkYywgMHgwMDA0NGVkYywgMHgwMDA0NGVkYyB9LAotICAgIHsgMHgwMDAwYTM0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA0OGVkZSwgMHgwMDA0OGVkZSwgMHgwMDA0OGVkZSB9LAotICAgIHsgMHgwMDAwYTM0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA0Y2YxZSwgMHgwMDA0Y2YxZSwgMHgwMDA0Y2YxZSB9LAotICAgIHsgMHgwMDAwYTM1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1MGY1ZSwgMHgwMDA1MGY1ZSwgMHgwMDA1MGY1ZSB9LAotICAgIHsgMHgwMDAwYTM1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1NGY5ZSwgMHgwMDA1NGY5ZSwgMHgwMDA1NGY5ZSB9LAotICAgIHsgMHgwMDAwYTc4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDA2MCwgMHgwMDAwMDA2MCwgMHgwMDAwMDA2MCB9LAotICAgIHsgMHgwMDAwYTc4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwNDA2MiwgMHgwMDAwNDA2MiwgMHgwMDAwNDA2MiB9LAotICAgIHsgMHgwMDAwYTc4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwODA2NCwgMHgwMDAwODA2NCwgMHgwMDAwODA2NCB9LAotICAgIHsgMHgwMDAwYTc4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYzBhNCwgMHgwMDAwYzBhNCwgMHgwMDAwYzBhNCB9LAotICAgIHsgMHgwMDAwYTc5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxMDBiMCwgMHgwMDAxMDBiMCwgMHgwMDAxMDBiMCB9LAotICAgIHsgMHgwMDAwYTc5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxNDBiMiwgMHgwMDAxNDBiMiwgMHgwMDAxNDBiMiB9LAotICAgIHsgMHgwMDAwYTc5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxODBiNCwgMHgwMDAxODBiNCwgMHgwMDAxODBiNCB9LAotICAgIHsgMHgwMDAwYTc5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxYzBmNCwgMHgwMDAxYzBmNCwgMHgwMDAxYzBmNCB9LAotICAgIHsgMHgwMDAwYTdhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyMDEzNCwgMHgwMDAyMDEzNCwgMHgwMDAyMDEzNCB9LAotICAgIHsgMHgwMDAwYTdhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyNDBmZSwgMHgwMDAyNDBmZSwgMHgwMDAyNDBmZSB9LAotICAgIHsgMHgwMDAwYTdhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyODEzZSwgMHgwMDAyODEzZSwgMHgwMDAyODEzZSB9LAotICAgIHsgMHgwMDAwYTdhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyYzE3ZSwgMHgwMDAyYzE3ZSwgMHgwMDAyYzE3ZSB9LAotICAgIHsgMHgwMDAwYTdiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzMDFiZSwgMHgwMDAzMDFiZSwgMHgwMDAzMDFiZSB9LAotICAgIHsgMHgwMDAwYTdiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzNDFmZSwgMHgwMDAzNDFmZSwgMHgwMDAzNDFmZSB9LAotICAgIHsgMHgwMDAwYTdiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzNDFmZSwgMHgwMDAzNDFmZSwgMHgwMDAzNDFmZSB9LAotICAgIHsgMHgwMDAwYTdiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzNDFmZSwgMHgwMDAzNDFmZSwgMHgwMDAzNDFmZSB9LAotICAgIHsgMHgwMDAwYTdjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzNDFmZSwgMHgwMDAzNDFmZSwgMHgwMDAzNDFmZSB9LAotICAgIHsgMHgwMDAwYTdjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzNDFmZSwgMHgwMDAzNDFmZSwgMHgwMDAzNDFmZSB9LAotICAgIHsgMHgwMDAwYTdjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzNDFmZSwgMHgwMDAzNDFmZSwgMHgwMDAzNDFmZSB9LAotICAgIHsgMHgwMDAwYTdjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzNDFmZSwgMHgwMDAzNDFmZSwgMHgwMDAzNDFmZSB9LAotICAgIHsgMHgwMDAwYTdkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzNDFmZSwgMHgwMDAzNDFmZSwgMHgwMDAzNDFmZSB9LAotICAgIHsgMHgwMDAwYTdkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzNDFmZSwgMHgwMDAzNDFmZSwgMHgwMDAzNDFmZSB9LAotICAgIHsgMHgwMDAwYTI3NCwgMHgwYTE4MDAwMCwgMHgwYTE4MDAwMCwgMHgwYTFhYTAwMCwgMHgwYTFhYTAwMCwgMHgwYTFhYTAwMCB9LAotfTsKLQotCi1zdGF0aWMgY29uc3QgdTMyIGFyOTI4N01vZGVzX3J4X2dhaW5fOTI4N18xXzBbXVs2XSA9IHsKLSAgICAvKiBBZGRyZXNzICAgICAgNUctSFQyMCAgICAgNUctSFQ0MCAgICAgMkctSFQ0MCAgICAgMkctSFQyMCAgICAgVHVyYm8gICAqLwotICAgIHsgMHgwMDAwOWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyMCwgMHgwMDAwYTEyMCwgMHgwMDAwYTEyMCB9LAotICAgIHsgMHgwMDAwOWEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyNCwgMHgwMDAwYTEyNCwgMHgwMDAwYTEyNCB9LAotICAgIHsgMHgwMDAwOWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyOCwgMHgwMDAwYTEyOCwgMHgwMDAwYTEyOCB9LAotICAgIHsgMHgwMDAwOWEwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyYywgMHgwMDAwYTEyYywgMHgwMDAwYTEyYyB9LAotICAgIHsgMHgwMDAwOWExMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEzMCwgMHgwMDAwYTEzMCwgMHgwMDAwYTEzMCB9LAotICAgIHsgMHgwMDAwOWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTE5NCwgMHgwMDAwYTE5NCwgMHgwMDAwYTE5NCB9LAotICAgIHsgMHgwMDAwOWExOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTE5OCwgMHgwMDAwYTE5OCwgMHgwMDAwYTE5OCB9LAotICAgIHsgMHgwMDAwOWExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTIwYywgMHgwMDAwYTIwYywgMHgwMDAwYTIwYyB9LAotICAgIHsgMHgwMDAwOWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTIxMCwgMHgwMDAwYTIxMCwgMHgwMDAwYTIxMCB9LAotICAgIHsgMHgwMDAwOWEyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI4NCwgMHgwMDAwYTI4NCwgMHgwMDAwYTI4NCB9LAotICAgIHsgMHgwMDAwOWEyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI4OCwgMHgwMDAwYTI4OCwgMHgwMDAwYTI4OCB9LAotICAgIHsgMHgwMDAwOWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI4YywgMHgwMDAwYTI4YywgMHgwMDAwYTI4YyB9LAotICAgIHsgMHgwMDAwOWEzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI5MCwgMHgwMDAwYTI5MCwgMHgwMDAwYTI5MCB9LAotICAgIHsgMHgwMDAwOWEzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI5NCwgMHgwMDAwYTI5NCwgMHgwMDAwYTI5NCB9LAotICAgIHsgMHgwMDAwOWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhMCwgMHgwMDAwYTJhMCwgMHgwMDAwYTJhMCB9LAotICAgIHsgMHgwMDAwOWEzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhNCwgMHgwMDAwYTJhNCwgMHgwMDAwYTJhNCB9LAotICAgIHsgMHgwMDAwOWE0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhOCwgMHgwMDAwYTJhOCwgMHgwMDAwYTJhOCB9LAotICAgIHsgMHgwMDAwOWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhYywgMHgwMDAwYTJhYywgMHgwMDAwYTJhYyB9LAotICAgIHsgMHgwMDAwOWE0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJiMCwgMHgwMDAwYTJiMCwgMHgwMDAwYTJiMCB9LAotICAgIHsgMHgwMDAwOWE0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJiNCwgMHgwMDAwYTJiNCwgMHgwMDAwYTJiNCB9LAotICAgIHsgMHgwMDAwOWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJiOCwgMHgwMDAwYTJiOCwgMHgwMDAwYTJiOCB9LAotICAgIHsgMHgwMDAwOWE1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJjNCwgMHgwMDAwYTJjNCwgMHgwMDAwYTJjNCB9LAotICAgIHsgMHgwMDAwOWE1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTcwOCwgMHgwMDAwYTcwOCwgMHgwMDAwYTcwOCB9LAotICAgIHsgMHgwMDAwOWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTcwYywgMHgwMDAwYTcwYywgMHgwMDAwYTcwYyB9LAotICAgIHsgMHgwMDAwOWE2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTcxMCwgMHgwMDAwYTcxMCwgMHgwMDAwYTcxMCB9LAotICAgIHsgMHgwMDAwOWE2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIwNCwgMHgwMDAwYWIwNCwgMHgwMDAwYWIwNCB9LAotICAgIHsgMHgwMDAwOWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIwOCwgMHgwMDAwYWIwOCwgMHgwMDAwYWIwOCB9LAotICAgIHsgMHgwMDAwOWE2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIwYywgMHgwMDAwYWIwYywgMHgwMDAwYWIwYyB9LAotICAgIHsgMHgwMDAwOWE3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIxMCwgMHgwMDAwYWIxMCwgMHgwMDAwYWIxMCB9LAotICAgIHsgMHgwMDAwOWE3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIxNCwgMHgwMDAwYWIxNCwgMHgwMDAwYWIxNCB9LAotICAgIHsgMHgwMDAwOWE3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIxOCwgMHgwMDAwYWIxOCwgMHgwMDAwYWIxOCB9LAotICAgIHsgMHgwMDAwOWE3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI4YywgMHgwMDAwYWI4YywgMHgwMDAwYWI4YyB9LAotICAgIHsgMHgwMDAwOWE4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI5MCwgMHgwMDAwYWI5MCwgMHgwMDAwYWI5MCB9LAotICAgIHsgMHgwMDAwOWE4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI5NCwgMHgwMDAwYWI5NCwgMHgwMDAwYWI5NCB9LAotICAgIHsgMHgwMDAwOWE4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI5OCwgMHgwMDAwYWI5OCwgMHgwMDAwYWI5OCB9LAotICAgIHsgMHgwMDAwOWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWJhNCwgMHgwMDAwYWJhNCwgMHgwMDAwYWJhNCB9LAotICAgIHsgMHgwMDAwOWE5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWJhOCwgMHgwMDAwYWJhOCwgMHgwMDAwYWJhOCB9LAotICAgIHsgMHgwMDAwOWE5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IwNCwgMHgwMDAwY2IwNCwgMHgwMDAwY2IwNCB9LAotICAgIHsgMHgwMDAwOWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IwOCwgMHgwMDAwY2IwOCwgMHgwMDAwY2IwOCB9LAotICAgIHsgMHgwMDAwOWE5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IwYywgMHgwMDAwY2IwYywgMHgwMDAwY2IwYyB9LAotICAgIHsgMHgwMDAwOWFhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IxMCwgMHgwMDAwY2IxMCwgMHgwMDAwY2IxMCB9LAotICAgIHsgMHgwMDAwOWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IxNCwgMHgwMDAwY2IxNCwgMHgwMDAwY2IxNCB9LAotICAgIHsgMHgwMDAwOWFhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IxOCwgMHgwMDAwY2IxOCwgMHgwMDAwY2IxOCB9LAotICAgIHsgMHgwMDAwOWFhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2I4YywgMHgwMDAwY2I4YywgMHgwMDAwY2I4YyB9LAotICAgIHsgMHgwMDAwOWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2I5MCwgMHgwMDAwY2I5MCwgMHgwMDAwY2I5MCB9LAotICAgIHsgMHgwMDAwOWFiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2YxOCwgMHgwMDAwY2YxOCwgMHgwMDAwY2YxOCB9LAotICAgIHsgMHgwMDAwOWFiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2YyNCwgMHgwMDAwY2YyNCwgMHgwMDAwY2YyNCB9LAotICAgIHsgMHgwMDAwOWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2YyOCwgMHgwMDAwY2YyOCwgMHgwMDAwY2YyOCB9LAotICAgIHsgMHgwMDAwOWFjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDMxNCwgMHgwMDAwZDMxNCwgMHgwMDAwZDMxNCB9LAotICAgIHsgMHgwMDAwOWFjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDMxOCwgMHgwMDAwZDMxOCwgMHgwMDAwZDMxOCB9LAotICAgIHsgMHgwMDAwOWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM4YywgMHgwMDAwZDM4YywgMHgwMDAwZDM4YyB9LAotICAgIHsgMHgwMDAwOWFjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM5MCwgMHgwMDAwZDM5MCwgMHgwMDAwZDM5MCB9LAotICAgIHsgMHgwMDAwOWFkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM5NCwgMHgwMDAwZDM5NCwgMHgwMDAwZDM5NCB9LAotICAgIHsgMHgwMDAwOWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM5OCwgMHgwMDAwZDM5OCwgMHgwMDAwZDM5OCB9LAotICAgIHsgMHgwMDAwOWFkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNhNCwgMHgwMDAwZDNhNCwgMHgwMDAwZDNhNCB9LAotICAgIHsgMHgwMDAwOWFkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNhOCwgMHgwMDAwZDNhOCwgMHgwMDAwZDNhOCB9LAotICAgIHsgMHgwMDAwOWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNhYywgMHgwMDAwZDNhYywgMHgwMDAwZDNhYyB9LAotICAgIHsgMHgwMDAwOWFlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNiMCwgMHgwMDAwZDNiMCwgMHgwMDAwZDNiMCB9LAotICAgIHsgMHgwMDAwOWFlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjM4MCwgMHgwMDAwZjM4MCwgMHgwMDAwZjM4MCB9LAotICAgIHsgMHgwMDAwOWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjM4NCwgMHgwMDAwZjM4NCwgMHgwMDAwZjM4NCB9LAotICAgIHsgMHgwMDAwOWFmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjM4OCwgMHgwMDAwZjM4OCwgMHgwMDAwZjM4OCB9LAotICAgIHsgMHgwMDAwOWFmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjcxMCwgMHgwMDAwZjcxMCwgMHgwMDAwZjcxMCB9LAotICAgIHsgMHgwMDAwOWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjcxNCwgMHgwMDAwZjcxNCwgMHgwMDAwZjcxNCB9LAotICAgIHsgMHgwMDAwOWFmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjcxOCwgMHgwMDAwZjcxOCwgMHgwMDAwZjcxOCB9LAotICAgIHsgMHgwMDAwOWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmIxMCwgMHgwMDAwZmIxMCwgMHgwMDAwZmIxMCB9LAotICAgIHsgMHgwMDAwOWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmIxNCwgMHgwMDAwZmIxNCwgMHgwMDAwZmIxNCB9LAotICAgIHsgMHgwMDAwOWIwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmIxOCwgMHgwMDAwZmIxOCwgMHgwMDAwZmIxOCB9LAotICAgIHsgMHgwMDAwOWIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmI4YywgMHgwMDAwZmI4YywgMHgwMDAwZmI4YyB9LAotICAgIHsgMHgwMDAwOWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmI5MCwgMHgwMDAwZmI5MCwgMHgwMDAwZmI5MCB9LAotICAgIHsgMHgwMDAwOWIxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmI5NCwgMHgwMDAwZmI5NCwgMHgwMDAwZmI5NCB9LAotICAgIHsgMHgwMDAwOWIxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmY4YywgMHgwMDAwZmY4YywgMHgwMDAwZmY4YyB9LAotICAgIHsgMHgwMDAwOWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmY5MCwgMHgwMDAwZmY5MCwgMHgwMDAwZmY5MCB9LAotICAgIHsgMHgwMDAwOWIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmY5NCwgMHgwMDAwZmY5NCwgMHgwMDAwZmY5NCB9LAotICAgIHsgMHgwMDAwOWIyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhMCwgMHgwMDAwZmZhMCwgMHgwMDAwZmZhMCB9LAotICAgIHsgMHgwMDAwOWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhNCwgMHgwMDAwZmZhNCwgMHgwMDAwZmZhNCB9LAotICAgIHsgMHgwMDAwOWIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhOCwgMHgwMDAwZmZhOCwgMHgwMDAwZmZhOCB9LAotICAgIHsgMHgwMDAwOWIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhYywgMHgwMDAwZmZhYywgMHgwMDAwZmZhYyB9LAotICAgIHsgMHgwMDAwOWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiMCwgMHgwMDAwZmZiMCwgMHgwMDAwZmZiMCB9LAotICAgIHsgMHgwMDAwOWIzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiNCwgMHgwMDAwZmZiNCwgMHgwMDAwZmZiNCB9LAotICAgIHsgMHgwMDAwOWIzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhMSwgMHgwMDAwZmZhMSwgMHgwMDAwZmZhMSB9LAotICAgIHsgMHgwMDAwOWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhNSwgMHgwMDAwZmZhNSwgMHgwMDAwZmZhNSB9LAotICAgIHsgMHgwMDAwOWI0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhOSwgMHgwMDAwZmZhOSwgMHgwMDAwZmZhOSB9LAotICAgIHsgMHgwMDAwOWI0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhZCwgMHgwMDAwZmZhZCwgMHgwMDAwZmZhZCB9LAotICAgIHsgMHgwMDAwOWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiMSwgMHgwMDAwZmZiMSwgMHgwMDAwZmZiMSB9LAotICAgIHsgMHgwMDAwOWI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiNSwgMHgwMDAwZmZiNSwgMHgwMDAwZmZiNSB9LAotICAgIHsgMHgwMDAwOWI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiOSwgMHgwMDAwZmZiOSwgMHgwMDAwZmZiOSB9LAotICAgIHsgMHgwMDAwOWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNSwgMHgwMDAwZmZjNSwgMHgwMDAwZmZjNSB9LAotICAgIHsgMHgwMDAwOWI1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjOSwgMHgwMDAwZmZjOSwgMHgwMDAwZmZjOSB9LAotICAgIHsgMHgwMDAwOWI2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZCwgMHgwMDAwZmZjZCwgMHgwMDAwZmZjZCB9LAotICAgIHsgMHgwMDAwOWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMSwgMHgwMDAwZmZkMSwgMHgwMDAwZmZkMSB9LAotICAgIHsgMHgwMDAwOWI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkNSwgMHgwMDAwZmZkNSwgMHgwMDAwZmZkNSB9LAotICAgIHsgMHgwMDAwOWI2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjMiwgMHgwMDAwZmZjMiwgMHgwMDAwZmZjMiB9LAotICAgIHsgMHgwMDAwOWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNiwgMHgwMDAwZmZjNiwgMHgwMDAwZmZjNiB9LAotICAgIHsgMHgwMDAwOWI3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjYSwgMHgwMDAwZmZjYSwgMHgwMDAwZmZjYSB9LAotICAgIHsgMHgwMDAwOWI3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZSwgMHgwMDAwZmZjZSwgMHgwMDAwZmZjZSB9LAotICAgIHsgMHgwMDAwOWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMiwgMHgwMDAwZmZkMiwgMHgwMDAwZmZkMiB9LAotICAgIHsgMHgwMDAwOWI4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkNiwgMHgwMDAwZmZkNiwgMHgwMDAwZmZkNiB9LAotICAgIHsgMHgwMDAwOWI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYSwgMHgwMDAwZmZkYSwgMHgwMDAwZmZkYSB9LAotICAgIHsgMHgwMDAwOWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNywgMHgwMDAwZmZjNywgMHgwMDAwZmZjNyB9LAotICAgIHsgMHgwMDAwOWI4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjYiwgMHgwMDAwZmZjYiwgMHgwMDAwZmZjYiB9LAotICAgIHsgMHgwMDAwOWI5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZiwgMHgwMDAwZmZjZiwgMHgwMDAwZmZjZiB9LAotICAgIHsgMHgwMDAwOWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMywgMHgwMDAwZmZkMywgMHgwMDAwZmZkMyB9LAotICAgIHsgMHgwMDAwOWI5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkNywgMHgwMDAwZmZkNywgMHgwMDAwZmZkNyB9LAotICAgIHsgMHgwMDAwOWI5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyMCwgMHgwMDAwYTEyMCwgMHgwMDAwYTEyMCB9LAotICAgIHsgMHgwMDAwYWEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyNCwgMHgwMDAwYTEyNCwgMHgwMDAwYTEyNCB9LAotICAgIHsgMHgwMDAwYWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyOCwgMHgwMDAwYTEyOCwgMHgwMDAwYTEyOCB9LAotICAgIHsgMHgwMDAwYWEwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyYywgMHgwMDAwYTEyYywgMHgwMDAwYTEyYyB9LAotICAgIHsgMHgwMDAwYWExMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEzMCwgMHgwMDAwYTEzMCwgMHgwMDAwYTEzMCB9LAotICAgIHsgMHgwMDAwYWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTE5NCwgMHgwMDAwYTE5NCwgMHgwMDAwYTE5NCB9LAotICAgIHsgMHgwMDAwYWExOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTE5OCwgMHgwMDAwYTE5OCwgMHgwMDAwYTE5OCB9LAotICAgIHsgMHgwMDAwYWExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTIwYywgMHgwMDAwYTIwYywgMHgwMDAwYTIwYyB9LAotICAgIHsgMHgwMDAwYWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTIxMCwgMHgwMDAwYTIxMCwgMHgwMDAwYTIxMCB9LAotICAgIHsgMHgwMDAwYWEyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI4NCwgMHgwMDAwYTI4NCwgMHgwMDAwYTI4NCB9LAotICAgIHsgMHgwMDAwYWEyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI4OCwgMHgwMDAwYTI4OCwgMHgwMDAwYTI4OCB9LAotICAgIHsgMHgwMDAwYWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI4YywgMHgwMDAwYTI4YywgMHgwMDAwYTI4YyB9LAotICAgIHsgMHgwMDAwYWEzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI5MCwgMHgwMDAwYTI5MCwgMHgwMDAwYTI5MCB9LAotICAgIHsgMHgwMDAwYWEzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI5NCwgMHgwMDAwYTI5NCwgMHgwMDAwYTI5NCB9LAotICAgIHsgMHgwMDAwYWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhMCwgMHgwMDAwYTJhMCwgMHgwMDAwYTJhMCB9LAotICAgIHsgMHgwMDAwYWEzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhNCwgMHgwMDAwYTJhNCwgMHgwMDAwYTJhNCB9LAotICAgIHsgMHgwMDAwYWE0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhOCwgMHgwMDAwYTJhOCwgMHgwMDAwYTJhOCB9LAotICAgIHsgMHgwMDAwYWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhYywgMHgwMDAwYTJhYywgMHgwMDAwYTJhYyB9LAotICAgIHsgMHgwMDAwYWE0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJiMCwgMHgwMDAwYTJiMCwgMHgwMDAwYTJiMCB9LAotICAgIHsgMHgwMDAwYWE0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJiNCwgMHgwMDAwYTJiNCwgMHgwMDAwYTJiNCB9LAotICAgIHsgMHgwMDAwYWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJiOCwgMHgwMDAwYTJiOCwgMHgwMDAwYTJiOCB9LAotICAgIHsgMHgwMDAwYWE1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJjNCwgMHgwMDAwYTJjNCwgMHgwMDAwYTJjNCB9LAotICAgIHsgMHgwMDAwYWE1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTcwOCwgMHgwMDAwYTcwOCwgMHgwMDAwYTcwOCB9LAotICAgIHsgMHgwMDAwYWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTcwYywgMHgwMDAwYTcwYywgMHgwMDAwYTcwYyB9LAotICAgIHsgMHgwMDAwYWE2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTcxMCwgMHgwMDAwYTcxMCwgMHgwMDAwYTcxMCB9LAotICAgIHsgMHgwMDAwYWE2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIwNCwgMHgwMDAwYWIwNCwgMHgwMDAwYWIwNCB9LAotICAgIHsgMHgwMDAwYWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIwOCwgMHgwMDAwYWIwOCwgMHgwMDAwYWIwOCB9LAotICAgIHsgMHgwMDAwYWE2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIwYywgMHgwMDAwYWIwYywgMHgwMDAwYWIwYyB9LAotICAgIHsgMHgwMDAwYWE3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIxMCwgMHgwMDAwYWIxMCwgMHgwMDAwYWIxMCB9LAotICAgIHsgMHgwMDAwYWE3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIxNCwgMHgwMDAwYWIxNCwgMHgwMDAwYWIxNCB9LAotICAgIHsgMHgwMDAwYWE3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIxOCwgMHgwMDAwYWIxOCwgMHgwMDAwYWIxOCB9LAotICAgIHsgMHgwMDAwYWE3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI4YywgMHgwMDAwYWI4YywgMHgwMDAwYWI4YyB9LAotICAgIHsgMHgwMDAwYWE4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI5MCwgMHgwMDAwYWI5MCwgMHgwMDAwYWI5MCB9LAotICAgIHsgMHgwMDAwYWE4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI5NCwgMHgwMDAwYWI5NCwgMHgwMDAwYWI5NCB9LAotICAgIHsgMHgwMDAwYWE4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI5OCwgMHgwMDAwYWI5OCwgMHgwMDAwYWI5OCB9LAotICAgIHsgMHgwMDAwYWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWJhNCwgMHgwMDAwYWJhNCwgMHgwMDAwYWJhNCB9LAotICAgIHsgMHgwMDAwYWE5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWJhOCwgMHgwMDAwYWJhOCwgMHgwMDAwYWJhOCB9LAotICAgIHsgMHgwMDAwYWE5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IwNCwgMHgwMDAwY2IwNCwgMHgwMDAwY2IwNCB9LAotICAgIHsgMHgwMDAwYWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IwOCwgMHgwMDAwY2IwOCwgMHgwMDAwY2IwOCB9LAotICAgIHsgMHgwMDAwYWE5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IwYywgMHgwMDAwY2IwYywgMHgwMDAwY2IwYyB9LAotICAgIHsgMHgwMDAwYWFhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IxMCwgMHgwMDAwY2IxMCwgMHgwMDAwY2IxMCB9LAotICAgIHsgMHgwMDAwYWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IxNCwgMHgwMDAwY2IxNCwgMHgwMDAwY2IxNCB9LAotICAgIHsgMHgwMDAwYWFhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IxOCwgMHgwMDAwY2IxOCwgMHgwMDAwY2IxOCB9LAotICAgIHsgMHgwMDAwYWFhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2I4YywgMHgwMDAwY2I4YywgMHgwMDAwY2I4YyB9LAotICAgIHsgMHgwMDAwYWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2I5MCwgMHgwMDAwY2I5MCwgMHgwMDAwY2I5MCB9LAotICAgIHsgMHgwMDAwYWFiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2YxOCwgMHgwMDAwY2YxOCwgMHgwMDAwY2YxOCB9LAotICAgIHsgMHgwMDAwYWFiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2YyNCwgMHgwMDAwY2YyNCwgMHgwMDAwY2YyNCB9LAotICAgIHsgMHgwMDAwYWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2YyOCwgMHgwMDAwY2YyOCwgMHgwMDAwY2YyOCB9LAotICAgIHsgMHgwMDAwYWFjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDMxNCwgMHgwMDAwZDMxNCwgMHgwMDAwZDMxNCB9LAotICAgIHsgMHgwMDAwYWFjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDMxOCwgMHgwMDAwZDMxOCwgMHgwMDAwZDMxOCB9LAotICAgIHsgMHgwMDAwYWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM4YywgMHgwMDAwZDM4YywgMHgwMDAwZDM4YyB9LAotICAgIHsgMHgwMDAwYWFjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM5MCwgMHgwMDAwZDM5MCwgMHgwMDAwZDM5MCB9LAotICAgIHsgMHgwMDAwYWFkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM5NCwgMHgwMDAwZDM5NCwgMHgwMDAwZDM5NCB9LAotICAgIHsgMHgwMDAwYWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM5OCwgMHgwMDAwZDM5OCwgMHgwMDAwZDM5OCB9LAotICAgIHsgMHgwMDAwYWFkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNhNCwgMHgwMDAwZDNhNCwgMHgwMDAwZDNhNCB9LAotICAgIHsgMHgwMDAwYWFkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNhOCwgMHgwMDAwZDNhOCwgMHgwMDAwZDNhOCB9LAotICAgIHsgMHgwMDAwYWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNhYywgMHgwMDAwZDNhYywgMHgwMDAwZDNhYyB9LAotICAgIHsgMHgwMDAwYWFlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNiMCwgMHgwMDAwZDNiMCwgMHgwMDAwZDNiMCB9LAotICAgIHsgMHgwMDAwYWFlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjM4MCwgMHgwMDAwZjM4MCwgMHgwMDAwZjM4MCB9LAotICAgIHsgMHgwMDAwYWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjM4NCwgMHgwMDAwZjM4NCwgMHgwMDAwZjM4NCB9LAotICAgIHsgMHgwMDAwYWFmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjM4OCwgMHgwMDAwZjM4OCwgMHgwMDAwZjM4OCB9LAotICAgIHsgMHgwMDAwYWFmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjcxMCwgMHgwMDAwZjcxMCwgMHgwMDAwZjcxMCB9LAotICAgIHsgMHgwMDAwYWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjcxNCwgMHgwMDAwZjcxNCwgMHgwMDAwZjcxNCB9LAotICAgIHsgMHgwMDAwYWFmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjcxOCwgMHgwMDAwZjcxOCwgMHgwMDAwZjcxOCB9LAotICAgIHsgMHgwMDAwYWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmIxMCwgMHgwMDAwZmIxMCwgMHgwMDAwZmIxMCB9LAotICAgIHsgMHgwMDAwYWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmIxNCwgMHgwMDAwZmIxNCwgMHgwMDAwZmIxNCB9LAotICAgIHsgMHgwMDAwYWIwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmIxOCwgMHgwMDAwZmIxOCwgMHgwMDAwZmIxOCB9LAotICAgIHsgMHgwMDAwYWIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmI4YywgMHgwMDAwZmI4YywgMHgwMDAwZmI4YyB9LAotICAgIHsgMHgwMDAwYWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmI5MCwgMHgwMDAwZmI5MCwgMHgwMDAwZmI5MCB9LAotICAgIHsgMHgwMDAwYWIxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmI5NCwgMHgwMDAwZmI5NCwgMHgwMDAwZmI5NCB9LAotICAgIHsgMHgwMDAwYWIxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmY4YywgMHgwMDAwZmY4YywgMHgwMDAwZmY4YyB9LAotICAgIHsgMHgwMDAwYWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmY5MCwgMHgwMDAwZmY5MCwgMHgwMDAwZmY5MCB9LAotICAgIHsgMHgwMDAwYWIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmY5NCwgMHgwMDAwZmY5NCwgMHgwMDAwZmY5NCB9LAotICAgIHsgMHgwMDAwYWIyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhMCwgMHgwMDAwZmZhMCwgMHgwMDAwZmZhMCB9LAotICAgIHsgMHgwMDAwYWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhNCwgMHgwMDAwZmZhNCwgMHgwMDAwZmZhNCB9LAotICAgIHsgMHgwMDAwYWIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhOCwgMHgwMDAwZmZhOCwgMHgwMDAwZmZhOCB9LAotICAgIHsgMHgwMDAwYWIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhYywgMHgwMDAwZmZhYywgMHgwMDAwZmZhYyB9LAotICAgIHsgMHgwMDAwYWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiMCwgMHgwMDAwZmZiMCwgMHgwMDAwZmZiMCB9LAotICAgIHsgMHgwMDAwYWIzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiNCwgMHgwMDAwZmZiNCwgMHgwMDAwZmZiNCB9LAotICAgIHsgMHgwMDAwYWIzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhMSwgMHgwMDAwZmZhMSwgMHgwMDAwZmZhMSB9LAotICAgIHsgMHgwMDAwYWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhNSwgMHgwMDAwZmZhNSwgMHgwMDAwZmZhNSB9LAotICAgIHsgMHgwMDAwYWI0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhOSwgMHgwMDAwZmZhOSwgMHgwMDAwZmZhOSB9LAotICAgIHsgMHgwMDAwYWI0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhZCwgMHgwMDAwZmZhZCwgMHgwMDAwZmZhZCB9LAotICAgIHsgMHgwMDAwYWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiMSwgMHgwMDAwZmZiMSwgMHgwMDAwZmZiMSB9LAotICAgIHsgMHgwMDAwYWI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiNSwgMHgwMDAwZmZiNSwgMHgwMDAwZmZiNSB9LAotICAgIHsgMHgwMDAwYWI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiOSwgMHgwMDAwZmZiOSwgMHgwMDAwZmZiOSB9LAotICAgIHsgMHgwMDAwYWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNSwgMHgwMDAwZmZjNSwgMHgwMDAwZmZjNSB9LAotICAgIHsgMHgwMDAwYWI1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjOSwgMHgwMDAwZmZjOSwgMHgwMDAwZmZjOSB9LAotICAgIHsgMHgwMDAwYWI2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZCwgMHgwMDAwZmZjZCwgMHgwMDAwZmZjZCB9LAotICAgIHsgMHgwMDAwYWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMSwgMHgwMDAwZmZkMSwgMHgwMDAwZmZkMSB9LAotICAgIHsgMHgwMDAwYWI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkNSwgMHgwMDAwZmZkNSwgMHgwMDAwZmZkNSB9LAotICAgIHsgMHgwMDAwYWI2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjMiwgMHgwMDAwZmZjMiwgMHgwMDAwZmZjMiB9LAotICAgIHsgMHgwMDAwYWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNiwgMHgwMDAwZmZjNiwgMHgwMDAwZmZjNiB9LAotICAgIHsgMHgwMDAwYWI3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjYSwgMHgwMDAwZmZjYSwgMHgwMDAwZmZjYSB9LAotICAgIHsgMHgwMDAwYWI3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZSwgMHgwMDAwZmZjZSwgMHgwMDAwZmZjZSB9LAotICAgIHsgMHgwMDAwYWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMiwgMHgwMDAwZmZkMiwgMHgwMDAwZmZkMiB9LAotICAgIHsgMHgwMDAwYWI4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkNiwgMHgwMDAwZmZkNiwgMHgwMDAwZmZkNiB9LAotICAgIHsgMHgwMDAwYWI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYSwgMHgwMDAwZmZkYSwgMHgwMDAwZmZkYSB9LAotICAgIHsgMHgwMDAwYWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNywgMHgwMDAwZmZjNywgMHgwMDAwZmZjNyB9LAotICAgIHsgMHgwMDAwYWI4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjYiwgMHgwMDAwZmZjYiwgMHgwMDAwZmZjYiB9LAotICAgIHsgMHgwMDAwYWI5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZiwgMHgwMDAwZmZjZiwgMHgwMDAwZmZjZiB9LAotICAgIHsgMHgwMDAwYWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMywgMHgwMDAwZmZkMywgMHgwMDAwZmZkMyB9LAotICAgIHsgMHgwMDAwYWI5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkNywgMHgwMDAwZmZkNywgMHgwMDAwZmZkNyB9LAotICAgIHsgMHgwMDAwYWI5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOTg0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMTA2NywgMHgwMDAwMTA2NywgMHgwMDAwMTA2NyB9LAotICAgIHsgMHgwMDAwYTg0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMTA2NywgMHgwMDAwMTA2NywgMHgwMDAwMTA2NyB9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBhcjkyODdQY2llUGh5X2Nsa3JlcV9hbHdheXNfb25fTDFfOTI4N18xXzBbXVsyXSA9IHsKLSAgICB7MHgwMDAwNDA0MCwgIDB4OTI0OGZkMDAgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4MjQ5MjQ5MjQgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4YTgwMDAwMTkgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4MTMxNjA4MjAgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4ZTU5ODA1NjAgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4YzAxZGNmZmQgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4MWFhYWJlNDEgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4YmUxMDU1NTQgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4MDAwNDMwMDcgfSwKLSAgICB7MHgwMDAwNDA0NCwgIDB4MDAwMDAwMDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5Mjg3UGNpZVBoeV9jbGtyZXFfb2ZmX0wxXzkyODdfMV8wW11bMl0gPSB7Ci0gICAgezB4MDAwMDQwNDAsICAweDkyNDhmZDAwIH0sCi0gICAgezB4MDAwMDQwNDAsICAweDI0OTI0OTI0IH0sCi0gICAgezB4MDAwMDQwNDAsICAweGE4MDAwMDE5IH0sCi0gICAgezB4MDAwMDQwNDAsICAweDEzMTYwODIwIH0sCi0gICAgezB4MDAwMDQwNDAsICAweGU1OTgwNTYwIH0sCi0gICAgezB4MDAwMDQwNDAsICAweGMwMWRjZmZjIH0sCi0gICAgezB4MDAwMDQwNDAsICAweDFhYWFiZTQxIH0sCi0gICAgezB4MDAwMDQwNDAsICAweGJlMTA1NTU0IH0sCi0gICAgezB4MDAwMDQwNDAsICAweDAwMDQzMDA3IH0sCi0gICAgezB4MDAwMDQwNDQsICAweDAwMDAwMDAwIH0sCi19OwotCi0vKiBBUjkyODcgUmV2aXNpb24gMTEgKi8KLQogc3RhdGljIGNvbnN0IHUzMiBhcjkyODdNb2Rlc185Mjg3XzFfMVtdWzZdID0gewotICAgIC8qIEFkZHJlc3MgICAgICA1Ry1IVDIwICAgICA1Ry1IVDQwICAgICAyRy1IVDQwICAgICAyRy1IVDIwICAgICBUdXJibyAgICovCi0gICAgeyAweDAwMDAxMDMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMmMwLCAweDAwMDAwMTYwLCAweDAwMDAwMWUwIH0sCi0gICAgeyAweDAwMDAxMDcwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwIH0sCi0gICAgeyAweDAwMDAxMGIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA3YzcwLCAweDAwMDAzZTM4LCAweDAwMDAxMTgwIH0sCi0gICAgeyAweDAwMDAxMGYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDA4MDE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDEwODAxNjAwLCAweDA4NDAwYjAwLCAweDA2ZTAwNmUwIH0sCi0gICAgeyAweDAwMDA4MDFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDEyZTAwMDU3LCAweDEyZTAwMDJiLCAweDA5ODgwMDRmIH0sCi0gICAgeyAweDAwMDA4MTIwLCAweDA4ZjA0ODAwLCAweDA4ZjA0ODAwLCAweDA4ZjA0ODEwLCAweDA4ZjA0ODEwLCAweDA4ZjA0ODEwIH0sCi0gICAgeyAweDAwMDA4MWQwLCAweDAwMDAzMjAwLCAweDAwMDAzMjAwLCAweDAwMDAzMjBhLCAweDAwMDAzMjBhLCAweDAwMDAzMjBhIH0sCi0gICAgeyAweDAwMDA4MzE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA2ODgwLCAweDAwMDAzNDQwLCAweDAwMDA2ODgwIH0sCi0gICAgeyAweDAwMDA5ODA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwM2M0LCAweDAwMDAwMzAwLCAweDAwMDAwMzAzIH0sCi0gICAgeyAweDAwMDA5ODIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwIH0sCi0gICAgeyAweDAwMDA5ODI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlIH0sCi0gICAgeyAweDAwMDA5ODI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDNhMDIwMDAxLCAweDNhMDIwMDAxLCAweDNhMDIwMDAxIH0sCi0gICAgeyAweDAwMDA5ODM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0sCi0gICAgeyAweDAwMDA5ODM4LCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3IH0sCi0gICAgeyAweDAwMDA5ODQwLCAweDIwNmEwMDJlLCAweDIwNmEwMDJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlIH0sCi0gICAgeyAweDAwMDA5ODQ0LCAweDAzNzIwMDAwLCAweDAzNzIwMDAwLCAweDAzNzIxNmEwLCAweDAzNzIxNmEwLCAweDAzNzIxNmEwIH0sCi0gICAgeyAweDAwMDA5ODUwLCAweDYwMDAwMDAwLCAweDYwMDAwMDAwLCAweDZkNDAwMGUyLCAweDZjNDAwMGUyLCAweDZjNDAwMGUyIH0sCi0gICAgeyAweDAwMDA5ODU4LCAweDdjMDAwZDAwLCAweDdjMDAwZDAwLCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlIH0sCi0gICAgeyAweDAwMDA5ODVjLCAweDMxMDAwMDVlLCAweDMxMDAwMDVlLCAweDMxMzk2MDVlLCAweDMxMzk1ZDVlLCAweDMxMzk1ZDVlIH0sCi0gICAgeyAweDAwMDA5ODYwLCAweDAwMDU4ZDAwLCAweDAwMDU4ZDAwLCAweDAwMDU4ZDIwLCAweDAwMDU4ZDIwLCAweDAwMDU4ZDE4IH0sCi0gICAgeyAweDAwMDA5ODY0LCAweDAwMDAwZTAwLCAweDAwMDAwZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwIH0sCi0gICAgeyAweDAwMDA5ODY4LCAweDAwMDA0MGMwLCAweDAwMDA0MGMwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwIH0sCi0gICAgeyAweDAwMDA5ODZjLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDA2OTAzODgxLCAweDA2OTAzODgxLCAweDA2OTAzODgxIH0sCi0gICAgeyAweDAwMDA5OTE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAxMTMwLCAweDAwMDAwODk4LCAweDAwMDAwN2QwIH0sCi0gICAgeyAweDAwMDA5OTE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDE2LCAweDAwMDAwMDBiLCAweDAwMDAwMDE2IH0sCi0gICAgeyAweDAwMDA5OTI0LCAweGQwMGE4YTAxLCAweGQwMGE4YTAxLCAweGQwMGE4YTBkLCAweGQwMGE4YTBkLCAweGQwMGE4YTBkIH0sCi0gICAgeyAweDAwMDA5OTQ0LCAweGVmYmMwMDAwLCAweGVmYmMwMDAwLCAweGVmYmMxMDEwLCAweGVmYmMxMDEwLCAweGVmYmMxMDEwIH0sCi0gICAgeyAweDAwMDA5OTYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwIH0sCi0gICAgeyAweDAwMDBhOTYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwIH0sCi0gICAgeyAweDAwMDA5OTY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMjEwLCAweDAwMDAwMjEwLCAweDAwMDAwMjEwIH0sCi0gICAgeyAweDAwMDBjOTY4LCAweDAwMDAwMjAwLCAweDAwMDAwMjAwLCAweDAwMDAwM2NlLCAweDAwMDAwM2NlLCAweDAwMDAwM2NlIH0sCi0gICAgeyAweDAwMDA5OWI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDFjLCAweDAwMDAwMDFjLCAweDAwMDAwMDFjIH0sCi0gICAgeyAweDAwMDA5OWJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwIH0sCi0gICAgeyAweDAwMDA5OWMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0IH0sCi0gICAgeyAweDAwMDBhMjA0LCAweDAwMDAwNDQwLCAweDAwMDAwNDQwLCAweDAwMDAwNDQ0LCAweDAwMDAwNDQ0LCAweDAwMDAwNDQ0IH0sCi0gICAgeyAweDAwMDBhMjBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBiMjBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjFjLCAweDE4MDM4MDBhLCAweDE4MDM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0sCi0gICAgeyAweDAwMDBhMjMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMjEwLCAweDAwMDAwMTA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDRhMDAwLCAweDAwMDRhMDAwLCAweDAwMDRhMDAwIH0sCi0gICAgeyAweDAwMDBhMzU4LCAweDc5OTlhYTAyLCAweDc5OTlhYTAyLCAweDc5OTlhYTBlLCAweDc5OTlhYTBlLCAweDc5OTlhYTBlIH0sCi0gICAgeyAweDAwMDBhM2Q4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCisJezB4MDAwMDEwMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAyYzAsIDB4MDAwMDAxNjAsIDB4MDAwMDAxZTB9LAorCXsweDAwMDAxMDcwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwfSwKKwl7MHgwMDAwMTBiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwN2M3MCwgMHgwMDAwM2UzOCwgMHgwMDAwMTE4MH0sCisJezB4MDAwMDEwZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDh9LAorCXsweDAwMDA4MDE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDEwODAxNjAwLCAweDA4NDAwYjAwLCAweDA2ZTAwNmUwfSwKKwl7MHgwMDAwODAxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgxMmUwMDA1NywgMHgxMmUwMDAyYiwgMHgwOTg4MDA0Zn0sCisJezB4MDAwMDgxMjAsIDB4MDhmMDQ4MDAsIDB4MDhmMDQ4MDAsIDB4MDhmMDQ4MTAsIDB4MDhmMDQ4MTAsIDB4MDhmMDQ4MTB9LAorCXsweDAwMDA4MWQwLCAweDAwMDAzMjAwLCAweDAwMDAzMjAwLCAweDAwMDAzMjBhLCAweDAwMDAzMjBhLCAweDAwMDAzMjBhfSwKKwl7MHgwMDAwODMxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwNjg4MCwgMHgwMDAwMzQ0MCwgMHgwMDAwNjg4MH0sCisJezB4MDAwMDk4MDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAzYzQsIDB4MDAwMDAzMDAsIDB4MDAwMDAzMDN9LAorCXsweDAwMDA5ODIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwfSwKKwl7MHgwMDAwOTgyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMTAwMGUwZSwgMHgwMTAwMGUwZSwgMHgwMTAwMGUwZX0sCisJezB4MDAwMDk4MjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4M2EwMjAwMDEsIDB4M2EwMjAwMDEsIDB4M2EwMjAwMDF9LAorCXsweDAwMDA5ODM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlfSwKKwl7MHgwMDAwOTgzOCwgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwN30sCisJezB4MDAwMDk4NDAsIDB4MjA2YTAwMmUsIDB4MjA2YTAwMmUsIDB4MjA2YTAxMmUsIDB4MjA2YTAxMmUsIDB4MjA2YTAxMmV9LAorCXsweDAwMDA5ODQ0LCAweDAzNzIwMDAwLCAweDAzNzIwMDAwLCAweDAzNzIxNmEwLCAweDAzNzIxNmEwLCAweDAzNzIxNmEwfSwKKwl7MHgwMDAwOTg1MCwgMHg2MDAwMDAwMCwgMHg2MDAwMDAwMCwgMHg2ZDQwMDBlMiwgMHg2YzQwMDBlMiwgMHg2YzQwMDBlMn0sCisJezB4MDAwMDk4NTgsIDB4N2MwMDBkMDAsIDB4N2MwMDBkMDAsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmV9LAorCXsweDAwMDA5ODVjLCAweDMxMDAwMDVlLCAweDMxMDAwMDVlLCAweDMxMzk2MDVlLCAweDMxMzk1ZDVlLCAweDMxMzk1ZDVlfSwKKwl7MHgwMDAwOTg2MCwgMHgwMDA1OGQwMCwgMHgwMDA1OGQwMCwgMHgwMDA1OGQyMCwgMHgwMDA1OGQyMCwgMHgwMDA1OGQxOH0sCisJezB4MDAwMDk4NjQsIDB4MDAwMDBlMDAsIDB4MDAwMDBlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDB9LAorCXsweDAwMDA5ODY4LCAweDAwMDA0MGMwLCAweDAwMDA0MGMwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwfSwKKwl7MHgwMDAwOTg2YywgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCwgMHgwNjkwMzg4MSwgMHgwNjkwMzg4MSwgMHgwNjkwMzg4MX0sCisJezB4MDAwMDk5MTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDExMzAsIDB4MDAwMDA4OTgsIDB4MDAwMDA3ZDB9LAorCXsweDAwMDA5OTE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDE2LCAweDAwMDAwMDBiLCAweDAwMDAwMDE2fSwKKwl7MHgwMDAwOTkyNCwgMHhkMDBhOGEwMSwgMHhkMDBhOGEwMSwgMHhkMDBhOGEwZCwgMHhkMDBhOGEwZCwgMHhkMDBhOGEwZH0sCisJezB4MDAwMDk5NDQsIDB4ZWZiYzAwMDAsIDB4ZWZiYzAwMDAsIDB4ZWZiYzEwMTAsIDB4ZWZiYzEwMTAsIDB4ZWZiYzEwMTB9LAorCXsweDAwMDA5OTYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwfSwKKwl7MHgwMDAwYTk2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMH0sCisJezB4MDAwMDk5NjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAyMTAsIDB4MDAwMDAyMTAsIDB4MDAwMDAyMTB9LAorCXsweDAwMDBjOTY4LCAweDAwMDAwMjAwLCAweDAwMDAwMjAwLCAweDAwMDAwM2NlLCAweDAwMDAwM2NlLCAweDAwMDAwM2NlfSwKKwl7MHgwMDAwOTliOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAxYywgMHgwMDAwMDAxYywgMHgwMDAwMDAxY30sCisJezB4MDAwMDk5YmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDB9LAorCXsweDAwMDA5OWMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0fSwKKwl7MHgwMDAwYTIwNCwgMHgwMDAwMDQ0MCwgMHgwMDAwMDQ0MCwgMHgwMDAwMDQ0NCwgMHgwMDAwMDQ0NCwgMHgwMDAwMDQ0NH0sCisJezB4MDAwMGEyMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMjBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTIxYywgMHgxODAzODAwYSwgMHgxODAzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYX0sCisJezB4MDAwMGEyMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAyMTAsIDB4MDAwMDAxMDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMjUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDRhMDAwLCAweDAwMDRhMDAwLCAweDAwMDRhMDAwfSwKKwl7MHgwMDAwYTM1OCwgMHg3OTk5YWEwMiwgMHg3OTk5YWEwMiwgMHg3OTk5YWEwZSwgMHg3OTk5YWEwZSwgMHg3OTk5YWEwZX0sCisJezB4MDAwMGEzZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBhcjkyODdDb21tb25fOTI4N18xXzFbXVsyXSA9IHsKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAwMjAwMTUgfSwKLSAgICB7IDB4MDAwMDAwMzQsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDAwMDAwNDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwNDQsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMDAwNDgsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMDAwNGMsIDB4MDAwMDAwMTAgfSwKLSAgICB7IDB4MDAwMDAwNTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwNTQsIDB4MDAwMDAwMWYgfSwKLSAgICB7IDB4MDAwMDA4MDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDA4MjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwNDAsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNDQsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNDgsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNGMsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNTAsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNTQsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNTgsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNWMsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNjAsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEwNjQsIDB4MDAyZmZjMGYgfSwKLSAgICB7IDB4MDAwMDEyMzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyNzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwMzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwNzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwYjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDExMzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDExNzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDExYjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDExZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyMzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyNzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyYjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEzMzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEzNzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEzYjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEzZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE0MzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE0NzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE0YjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE0ZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE1MzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE1NzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE1YjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE1ZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE2MzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE2NzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE2YjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE2ZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE3MzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE3NzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE3YjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE3ZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwM2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwN2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwYmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEwZmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDExM2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDExN2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDExYmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDExZmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyM2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyN2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyYmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEyZmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEzM2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEzN2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEzYmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDEzZmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE0M2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDE0N2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDQwMzAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDQwM2MsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDQwMjQsIDB4MDAwMDAwMWYgfSwKLSAgICB7IDB4MDAwMDQwNjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDQwNjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDcwMTAsIDB4MDAwMDAwMzMgfSwKLSAgICB7IDB4MDAwMDcwMjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDcwMzQsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDcwMzgsIDB4MDAwMDA0YzIgfSwKLSAgICB7IDB4MDAwMDgwMDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwMTgsIDB4MDAwMDA3MDAgfSwKLSAgICB7IDB4MDAwMDgwMjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwMzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwM2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwNDgsIDB4NDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwNTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwNTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwNWMsIDB4MDAwZmM3OGYgfSwKLSAgICB7IDB4MDAwMDgwNjAsIDB4MDAwMDAwMGYgfSwKLSAgICB7IDB4MDAwMDgwNjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwNzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwYzAsIDB4MmE4MDAwMWEgfSwKLSAgICB7IDB4MDAwMDgwYzQsIDB4MDVkYzAxZTAgfSwKLSAgICB7IDB4MDAwMDgwYzgsIDB4MWY0MDI3MTAgfSwKLSAgICB7IDB4MDAwMDgwY2MsIDB4MDFmNDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwZDAsIDB4MDAwMDFlMDAgfSwKLSAgICB7IDB4MDAwMDgwZDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwZDgsIDB4MDA0MDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwZTAsIDB4ZmZmZmZmZmYgfSwKLSAgICB7IDB4MDAwMDgwZTQsIDB4MDAwMGZmZmYgfSwKLSAgICB7IDB4MDAwMDgwZTgsIDB4MDAzZjNmM2YgfSwKLSAgICB7IDB4MDAwMDgwZWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwZjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwZjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgwZmMsIDB4MDAwMjAwMDAgfSwKLSAgICB7IDB4MDAwMDgxMDAsIDB4MDAwMjAwMDAgfSwKLSAgICB7IDB4MDAwMDgxMDQsIDB4MDAwMDAwMDEgfSwKLSAgICB7IDB4MDAwMDgxMDgsIDB4MDAwMDAwNTIgfSwKLSAgICB7IDB4MDAwMDgxMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxMTAsIDB4MDAwMDAxNjggfSwKLSAgICB7IDB4MDAwMDgxMTgsIDB4MDAwMTAwYWEgfSwKLSAgICB7IDB4MDAwMDgxMWMsIDB4MDAwMDMyMTAgfSwKLSAgICB7IDB4MDAwMDgxMjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxMjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxMmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxMzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxMzQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxMzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxM2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxNDQsIDB4ZmZmZmZmZmYgfSwKLSAgICB7IDB4MDAwMDgxNjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxNmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxNzAsIDB4MTg0ODczMjAgfSwKLSAgICB7IDB4MDAwMDgxNzQsIDB4ZmFhNGZhNTAgfSwKLSAgICB7IDB4MDAwMDgxNzgsIDB4MDAwMDAxMDAgfSwKLSAgICB7IDB4MDAwMDgxN2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxYzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxYzQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxZDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxZWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxZjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxZjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxZjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxZmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMzQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyMzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyM2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyNDAsIDB4MDAxMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyNDQsIDB4MDAxMGY0MDAgfSwKLSAgICB7IDB4MDAwMDgyNDgsIDB4MDAwMDAxMDAgfSwKLSAgICB7IDB4MDAwMDgyNGMsIDB4MDAwMWU4MDAgfSwKLSAgICB7IDB4MDAwMDgyNTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyNTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyNTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyNWMsIDB4NDAwMDAwZmYgfSwKLSAgICB7IDB4MDAwMDgyNjAsIDB4MDAwODA5MjIgfSwKLSAgICB7IDB4MDAwMDgyNjQsIDB4ODhhMDAwMTAgfSwKLSAgICB7IDB4MDAwMDgyNzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyNzQsIDB4NDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyNzgsIDB4MDAzZTQxODAgfSwKLSAgICB7IDB4MDAwMDgyN2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyODQsIDB4MDAwMDAwMmMgfSwKLSAgICB7IDB4MDAwMDgyODgsIDB4MDAwMDAwMmMgfSwKLSAgICB7IDB4MDAwMDgyOGMsIDB4MDAwMDAwZmYgfSwKLSAgICB7IDB4MDAwMDgyOTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyOTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgyOWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgzMDAsIDB4MDAwMDAwNDAgfSwKLSAgICB7IDB4MDAwMDgzMTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgzMjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgzMmMsIDB4MDAwMDAwMDcgfSwKLSAgICB7IDB4MDAwMDgzMzAsIDB4MDAwMDAzMDIgfSwKLSAgICB7IDB4MDAwMDgzMzQsIDB4MDAwMDBlMDAgfSwKLSAgICB7IDB4MDAwMDgzMzgsIDB4MDBmZjAwMDAgfSwKLSAgICB7IDB4MDAwMDgzM2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgzNDAsIDB4MDAwMTA3ZmYgfSwKLSAgICB7IDB4MDAwMDgzNDQsIDB4MDFjODEwNDMgfSwKLSAgICB7IDB4MDAwMDgzNjAsIDB4ZmZmZmZmZmYgfSwKLSAgICB7IDB4MDAwMDgzNjQsIDB4ZmZmZmZmZmYgfSwKLSAgICB7IDB4MDAwMDgzNjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgzNzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgzNzQsIDB4MDAwMDAwZmYgfSwKLSAgICB7IDB4MDAwMDgzNzgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgzN2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgzODAsIDB4ZmZmZmZmZmYgfSwKLSAgICB7IDB4MDAwMDgzODQsIDB4ZmZmZmZmZmYgfSwKLSAgICB7IDB4MDAwMDgzOTAsIDB4MGZmZmZmZmYgfSwKLSAgICB7IDB4MDAwMDgzOTQsIDB4MGZmZmZmZmYgfSwKLSAgICB7IDB4MDAwMDgzOTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgzOWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgzYTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4MDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4MGMsIDB4YWZlNjhlMzAgfSwKLSAgICB7IDB4MDAwMDk4MTAsIDB4ZmQxNGUwMDAgfSwKLSAgICB7IDB4MDAwMDk4MTQsIDB4OWMwYTlmNmIgfSwKLSAgICB7IDB4MDAwMDk4MWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4MmMsIDB4MDAwMGEwMDAgfSwKLSAgICB7IDB4MDAwMDk4MzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk4M2MsIDB4MDAyMDA0MDAgfSwKLSAgICB7IDB4MDAwMDk4NGMsIDB4MDA0MDIzM2MgfSwKLSAgICB7IDB4MDAwMGE4NGMsIDB4MDA0MDIzM2MgfSwKLSAgICB7IDB4MDAwMDk4NTQsIDB4MDAwMDAwNDQgfSwKLSAgICB7IDB4MDAwMDk5MDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5MDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5MDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5MGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5MTAsIDB4MTAwMDIzMTAgfSwKLSAgICB7IDB4MDAwMDk5MWMsIDB4MTAwMDBmZmYgfSwKLSAgICB7IDB4MDAwMDk5MjAsIDB4MDQ5MDAwMDAgfSwKLSAgICB7IDB4MDAwMGE5MjAsIDB4MDQ5MDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5MjgsIDB4MDAwMDAwMDEgfSwKLSAgICB7IDB4MDAwMDk5MmMsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDk5MzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGE5MzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5MzQsIDB4MWUxZjIwMjIgfSwKLSAgICB7IDB4MDAwMDk5MzgsIDB4MGEwYjBjMGQgfSwKLSAgICB7IDB4MDAwMDk5M2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5NDgsIDB4OTI4MGMwMGEgfSwKLSAgICB7IDB4MDAwMDk5NGMsIDB4MDAwMjAwMjggfSwKLSAgICB7IDB4MDAwMDk5NTQsIDB4NWYzY2EzZGUgfSwKLSAgICB7IDB4MDAwMDk5NTgsIDB4MDEwOGVjZmYgfSwKLSAgICB7IDB4MDAwMDk5NDAsIDB4MTQ3NTA2MDQgfSwKLSAgICB7IDB4MDAwMGM5NWMsIDB4MDA0YjZhOGUgfSwKLSAgICB7IDB4MDAwMDk5NzAsIDB4OTkwYmI1MTQgfSwKLSAgICB7IDB4MDAwMDk5NzQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5NzgsIDB4MDAwMDAwMDEgfSwKLSAgICB7IDB4MDAwMDk5N2MsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5YTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5YTQsIDB4MDAwMDAwMDEgfSwKLSAgICB7IDB4MDAwMDk5YTgsIDB4MjAxZmZmMDAgfSwKLSAgICB7IDB4MDAwMDk5YWMsIDB4MGM2ZjAwMDAgfSwKLSAgICB7IDB4MDAwMDk5YjAsIDB4MDMwNTEwMDAgfSwKLSAgICB7IDB4MDAwMDk5YjQsIDB4MDAwMDA4MjAgfSwKLSAgICB7IDB4MDAwMDk5YzQsIDB4MDYzMzZmNzcgfSwKLSAgICB7IDB4MDAwMDk5YzgsIDB4NmFmNjUzMmYgfSwKLSAgICB7IDB4MDAwMDk5Y2MsIDB4MDhmMTg2YzggfSwKLSAgICB7IDB4MDAwMDk5ZDAsIDB4MDAwNDYzODQgfSwKLSAgICB7IDB4MDAwMDk5ZGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5ZTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5ZTQsIDB4YWFhYWFhYWEgfSwKLSAgICB7IDB4MDAwMDk5ZTgsIDB4M2M0NjY0NzggfSwKLSAgICB7IDB4MDAwMDk5ZWMsIDB4MGNjODBjYWEgfSwKLSAgICB7IDB4MDAwMDk5ZjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDk5ZmMsIDB4MDAwMDEwNDIgfSwKLSAgICB7IDB4MDAwMGEyMDgsIDB4ODAzZTQ3ODggfSwKLSAgICB7IDB4MDAwMGEyMTAsIDB4NDA4MGEzMzMgfSwKLSAgICB7IDB4MDAwMGEyMTQsIDB4NDAyMDZjMTAgfSwKLSAgICB7IDB4MDAwMGEyMTgsIDB4MDA5YzQwNjAgfSwKLSAgICB7IDB4MDAwMGEyMjAsIDB4MDE4MzQwNjEgfSwKLSAgICB7IDB4MDAwMGEyMjQsIDB4MDAwMDA0MDAgfSwKLSAgICB7IDB4MDAwMGEyMjgsIDB4MDAwMDAzYjUgfSwKLSAgICB7IDB4MDAwMGEyMmMsIDB4MjMzZjcxODAgfSwKLSAgICB7IDB4MDAwMGEyMzQsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEyMzgsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEyM2MsIDB4MTNjODg5YWYgfSwKLSAgICB7IDB4MDAwMGEyNDAsIDB4Mzg0OTBhMjAgfSwKLSAgICB7IDB4MDAwMGEyNDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEyNDgsIDB4ZmZmZmZmZmMgfSwKLSAgICB7IDB4MDAwMGEyNGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEyNTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEyNTgsIDB4MGNkYmQzODAgfSwKLSAgICB7IDB4MDAwMGEyNWMsIDB4MGYwZjBmMDEgfSwKLSAgICB7IDB4MDAwMGEyNjAsIDB4ZGZhOTFmMDEgfSwKLSAgICB7IDB4MDAwMGEyNjQsIDB4MDA0MThhMTEgfSwKLSAgICB7IDB4MDAwMGIyNjQsIDB4MDA0MThhMTEgfSwKLSAgICB7IDB4MDAwMGEyNjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEyNmMsIDB4MGU3OWU1YzYgfSwKLSAgICB7IDB4MDAwMGIyNmMsIDB4MGU3OWU1YzYgfSwKLSAgICB7IDB4MDAwMGQyNzAsIDB4MDA4MjA4MjAgfSwKLSAgICB7IDB4MDAwMGEyNzgsIDB4MWNlNzM5Y2UgfSwKLSAgICB7IDB4MDAwMGEyN2MsIDB4MDUwNzAxY2UgfSwKLSAgICB7IDB4MDAwMGQzNWMsIDB4MDdmZmZmZWYgfSwKLSAgICB7IDB4MDAwMGQzNjAsIDB4MGZmZmZmZTcgfSwKLSAgICB7IDB4MDAwMGQzNjQsIDB4MTdmZmZmZTUgfSwKLSAgICB7IDB4MDAwMGQzNjgsIDB4MWZmZmZmZTQgfSwKLSAgICB7IDB4MDAwMGQzNmMsIDB4MzdmZmZmZTMgfSwKLSAgICB7IDB4MDAwMGQzNzAsIDB4M2ZmZmZmZTMgfSwKLSAgICB7IDB4MDAwMGQzNzQsIDB4NTdmZmZmZTMgfSwKLSAgICB7IDB4MDAwMGQzNzgsIDB4NWZmZmZmZTIgfSwKLSAgICB7IDB4MDAwMGQzN2MsIDB4N2ZmZmZmZTIgfSwKLSAgICB7IDB4MDAwMGQzODAsIDB4N2YzYzdiYmEgfSwKLSAgICB7IDB4MDAwMGQzODQsIDB4ZjMzMDdmZjAgfSwKLSAgICB7IDB4MDAwMGEzODgsIDB4MGMwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzOGMsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEzOTAsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEzOTQsIDB4MWNlNzM5Y2UgfSwKLSAgICB7IDB4MDAwMGEzOTgsIDB4MDAwMDAxY2UgfSwKLSAgICB7IDB4MDAwMGIzOTgsIDB4MDAwMDAxY2UgfSwKLSAgICB7IDB4MDAwMGEzOWMsIDB4MDAwMDAwMDEgfSwKLSAgICB7IDB4MDAwMGEzYzgsIDB4MDAwMDAyNDYgfSwKLSAgICB7IDB4MDAwMGEzY2MsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEzZDAsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEzZDQsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEzZGMsIDB4MWNlNzM5Y2UgfSwKLSAgICB7IDB4MDAwMGEzZTAsIDB4MDAwMDAxY2UgfSwKLSAgICB7IDB4MDAwMGEzZTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzZTgsIDB4MThjNDM0MzMgfSwKLSAgICB7IDB4MDAwMGEzZWMsIDB4MDBmNzAwODEgfSwKLSAgICB7IDB4MDAwMGEzZjAsIDB4MDEwMzZhMWUgfSwKLSAgICB7IDB4MDAwMGEzZjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGIzZjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGE3ZDgsIDB4MDAwMDAzZjEgfSwKLSAgICB7IDB4MDAwMDc4MDAsIDB4MDAwMDA4MDAgfSwKLSAgICB7IDB4MDAwMDc4MDQsIDB4NmMzNWZmZDIgfSwKLSAgICB7IDB4MDAwMDc4MDgsIDB4NmRiNmMwMDAgfSwKLSAgICB7IDB4MDAwMDc4MGMsIDB4NmRiNmNiMzAgfSwKLSAgICB7IDB4MDAwMDc4MTAsIDB4NmRiNmNiNmMgfSwKLSAgICB7IDB4MDAwMDc4MTQsIDB4MDUwMWUyMDAgfSwKLSAgICB7IDB4MDAwMDc4MTgsIDB4MDA5NDEyOGQgfSwKLSAgICB7IDB4MDAwMDc4MWMsIDB4OTc2ZWUzOTIgfSwKLSAgICB7IDB4MDAwMDc4MjAsIDB4Zjc1ZmY2ZmMgfSwKLSAgICB7IDB4MDAwMDc4MjQsIDB4MDAwNDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4MjgsIDB4ZGIwMDMwMTIgfSwKLSAgICB7IDB4MDAwMDc4MmMsIDB4MDQ5MjQ5MTQgfSwKLSAgICB7IDB4MDAwMDc4MzAsIDB4MjEwODQyMTAgfSwKLSAgICB7IDB4MDAwMDc4MzQsIDB4MDAxNDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4MzgsIDB4MGU0NTQ4ZDggfSwKLSAgICB7IDB4MDAwMDc4M2MsIDB4NTQyMTQ1MTQgfSwKLSAgICB7IDB4MDAwMDc4NDAsIDB4MDIwMjU4MzAgfSwKLSAgICB7IDB4MDAwMDc4NDQsIDB4NzFjMGQzODggfSwKLSAgICB7IDB4MDAwMDc4NDgsIDB4OTM0OTM0YTggfSwKLSAgICB7IDB4MDAwMDc4NTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4NTQsIDB4MDAwMDA4MDAgfSwKLSAgICB7IDB4MDAwMDc4NTgsIDB4NmMzNWZmZDIgfSwKLSAgICB7IDB4MDAwMDc4NWMsIDB4NmRiNmMwMDAgfSwKLSAgICB7IDB4MDAwMDc4NjAsIDB4NmRiNmNiMzAgfSwKLSAgICB7IDB4MDAwMDc4NjQsIDB4NmRiNmNiNmMgfSwKLSAgICB7IDB4MDAwMDc4NjgsIDB4MDUwMWUyMDAgfSwKLSAgICB7IDB4MDAwMDc4NmMsIDB4MDA5NDEyOGQgfSwKLSAgICB7IDB4MDAwMDc4NzAsIDB4OTc2ZWUzOTIgfSwKLSAgICB7IDB4MDAwMDc4NzQsIDB4Zjc1ZmY2ZmMgfSwKLSAgICB7IDB4MDAwMDc4NzgsIDB4MDAwNDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4N2MsIDB4ZGIwMDMwMTIgfSwKLSAgICB7IDB4MDAwMDc4ODAsIDB4MDQ5MjQ5MTQgfSwKLSAgICB7IDB4MDAwMDc4ODQsIDB4MjEwODQyMTAgfSwKLSAgICB7IDB4MDAwMDc4ODgsIDB4MDAxYjZkYjAgfSwKLSAgICB7IDB4MDAwMDc4OGMsIDB4MDAzNzZiNjMgfSwKLSAgICB7IDB4MDAwMDc4OTAsIDB4MDZkYjZkYjYgfSwKLSAgICB7IDB4MDAwMDc4OTQsIDB4MDA2ZDgwMDAgfSwKLSAgICB7IDB4MDAwMDc4OTgsIDB4NDgxMDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4OWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4YTAsIDB4MDgwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4YTQsIDB4MDAwN2ZmZDggfSwKLSAgICB7IDB4MDAwMDc4YTgsIDB4MDAwN2ZmZDggfSwKLSAgICB7IDB4MDAwMDc4YWMsIDB4MDAxYzAwMjAgfSwKLSAgICB7IDB4MDAwMDc4YjAsIDB4MDAwNjBhZWIgfSwKLSAgICB7IDB4MDAwMDc4YjQsIDB4NDAwMDgwODAgfSwKLSAgICB7IDB4MDAwMDc4YjgsIDB4MmE4NTAxNjAgfSwKKwkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCisJezB4MDAwMDAwMGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwMDMwLCAweDAwMDIwMDE1fSwKKwl7MHgwMDAwMDAzNCwgMHgwMDAwMDAwNX0sCisJezB4MDAwMDAwNDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwMDQ0LCAweDAwMDAwMDA4fSwKKwl7MHgwMDAwMDA0OCwgMHgwMDAwMDAwOH0sCisJezB4MDAwMDAwNGMsIDB4MDAwMDAwMTB9LAorCXsweDAwMDAwMDUwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDA1NCwgMHgwMDAwMDAxZn0sCisJezB4MDAwMDA4MDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwODA0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDgwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDA4MGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwODEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDgxNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDA4MTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwODFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDgyMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDA4MjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMDQwLCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA0NCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNDgsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDRjLCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA1MCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNTQsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDU4LCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA1YywgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNjAsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDY0LCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTIzMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEyNzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMDM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTA3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEwYjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMGY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTEzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDExNzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMWI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTFmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEyMzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMjc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTJiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEyZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMzM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTM3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEzYjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxM2Y4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTQzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE0NzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNGI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTRmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE1MzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNTc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTViOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE1ZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNjM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTY3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE2YjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNmY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTczOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE3NzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxN2I4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTdmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEwM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMDdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTBiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEwZmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMTNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTE3YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDExYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMWZjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTIzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEyN2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMmJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTJmYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEzM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMzdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTNiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEzZmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNDNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTQ3YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDQwMzAsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDA0MDNjLCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNDAyNCwgMHgwMDAwMDAxZn0sCisJezB4MDAwMDQwNjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA0MDY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwNzAxMCwgMHgwMDAwMDAzM30sCisJezB4MDAwMDcwMjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA3MDM0LCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNzAzOCwgMHgwMDAwMDRjMn0sCisJezB4MDAwMDgwMDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwMTgsIDB4MDAwMDA3MDB9LAorCXsweDAwMDA4MDIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDQ4LCAweDQwMDAwMDAwfSwKKwl7MHgwMDAwODA1NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwNTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDVjLCAweDAwMGZjNzhmfSwKKwl7MHgwMDAwODA2MCwgMHgwMDAwMDAwZn0sCisJezB4MDAwMDgwNjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDcwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBjMCwgMHgyYTgwMDAxYX0sCisJezB4MDAwMDgwYzQsIDB4MDVkYzAxZTB9LAorCXsweDAwMDA4MGM4LCAweDFmNDAyNzEwfSwKKwl7MHgwMDAwODBjYywgMHgwMWY0MDAwMH0sCisJezB4MDAwMDgwZDAsIDB4MDAwMDFlMDB9LAorCXsweDAwMDA4MGQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBkOCwgMHgwMDQwMDAwMH0sCisJezB4MDAwMDgwZTAsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4MGU0LCAweDAwMDBmZmZmfSwKKwl7MHgwMDAwODBlOCwgMHgwMDNmM2YzZn0sCisJezB4MDAwMDgwZWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBmNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGZjLCAweDAwMDIwMDAwfSwKKwl7MHgwMDAwODEwMCwgMHgwMDAyMDAwMH0sCisJezB4MDAwMDgxMDQsIDB4MDAwMDAwMDF9LAorCXsweDAwMDA4MTA4LCAweDAwMDAwMDUyfSwKKwl7MHgwMDAwODEwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMTAsIDB4MDAwMDAxNjh9LAorCXsweDAwMDA4MTE4LCAweDAwMDEwMGFhfSwKKwl7MHgwMDAwODExYywgMHgwMDAwMzIxMH0sCisJezB4MDAwMDgxMjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEyYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTQ0LCAweGZmZmZmZmZmfSwKKwl7MHgwMDAwODE2OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxNmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTcwLCAweDE4NDg3MzIwfSwKKwl7MHgwMDAwODE3NCwgMHhmYWE0ZmE1MH0sCisJezB4MDAwMDgxNzgsIDB4MDAwMDAxMDB9LAorCXsweDAwMDA4MTdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFjMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxYzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFlYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxZjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxZmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIwNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIxMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIxYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIyOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIzNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI0MCwgMHgwMDEwMDAwMH0sCisJezB4MDAwMDgyNDQsIDB4MDAxMGY0MDB9LAorCXsweDAwMDA4MjQ4LCAweDAwMDAwMTAwfSwKKwl7MHgwMDAwODI0YywgMHgwMDAxZTgwMH0sCisJezB4MDAwMDgyNTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI1OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyNWMsIDB4NDAwMDAwZmZ9LAorCXsweDAwMDA4MjYwLCAweDAwMDgwOTIyfSwKKwl7MHgwMDAwODI2NCwgMHg4OGEwMDAxMH0sCisJezB4MDAwMDgyNzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4Mjc0LCAweDQwMDAwMDAwfSwKKwl7MHgwMDAwODI3OCwgMHgwMDNlNDE4MH0sCisJezB4MDAwMDgyN2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4Mjg0LCAweDAwMDAwMDJjfSwKKwl7MHgwMDAwODI4OCwgMHgwMDAwMDAyY30sCisJezB4MDAwMDgyOGMsIDB4MDAwMDAwZmZ9LAorCXsweDAwMDA4Mjk0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI5OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyOWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzAwLCAweDAwMDAwMDQwfSwKKwl7MHgwMDAwODMxNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzMjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzJjLCAweDAwMDAwMDA3fSwKKwl7MHgwMDAwODMzMCwgMHgwMDAwMDMwMn0sCisJezB4MDAwMDgzMzQsIDB4MDAwMDBlMDB9LAorCXsweDAwMDA4MzM4LCAweDAwZmYwMDAwfSwKKwl7MHgwMDAwODMzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzNDAsIDB4MDAwMTA3ZmZ9LAorCXsweDAwMDA4MzQ0LCAweDAxYzgxMDQzfSwKKwl7MHgwMDAwODM2MCwgMHhmZmZmZmZmZn0sCisJezB4MDAwMDgzNjQsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4MzY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODM3MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzNzQsIDB4MDAwMDAwZmZ9LAorCXsweDAwMDA4Mzc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODM3YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzODAsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4Mzg0LCAweGZmZmZmZmZmfSwKKwl7MHgwMDAwODM5MCwgMHgwZmZmZmZmZn0sCisJezB4MDAwMDgzOTQsIDB4MGZmZmZmZmZ9LAorCXsweDAwMDA4Mzk4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODM5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzYTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTgwYywgMHhhZmU2OGUzMH0sCisJezB4MDAwMDk4MTAsIDB4ZmQxNGUwMDB9LAorCXsweDAwMDA5ODE0LCAweDljMGE5ZjZifSwKKwl7MHgwMDAwOTgxYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4MmMsIDB4MDAwMGEwMDB9LAorCXsweDAwMDA5ODMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTgzYywgMHgwMDIwMDQwMH0sCisJezB4MDAwMDk4NGMsIDB4MDA0MDIzM2N9LAorCXsweDAwMDBhODRjLCAweDAwNDAyMzNjfSwKKwl7MHgwMDAwOTg1NCwgMHgwMDAwMDA0NH0sCisJezB4MDAwMDk5MDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTA0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTkwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5MGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTEwLCAweDEwMDAyMzEwfSwKKwl7MHgwMDAwOTkxYywgMHgxMDAwMGZmZn0sCisJezB4MDAwMDk5MjAsIDB4MDQ5MDAwMDB9LAorCXsweDAwMDBhOTIwLCAweDA0OTAwMDAwfSwKKwl7MHgwMDAwOTkyOCwgMHgwMDAwMDAwMX0sCisJezB4MDAwMDk5MmMsIDB4MDAwMDAwMDR9LAorCXsweDAwMDA5OTMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTkzMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5MzQsIDB4MWUxZjIwMjJ9LAorCXsweDAwMDA5OTM4LCAweDBhMGIwYzBkfSwKKwl7MHgwMDAwOTkzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5NDgsIDB4OTI4MGMwMGF9LAorCXsweDAwMDA5OTRjLCAweDAwMDIwMDI4fSwKKwl7MHgwMDAwOTk1NCwgMHg1ZjNjYTNkZX0sCisJezB4MDAwMDk5NTgsIDB4MDEwOGVjZmZ9LAorCXsweDAwMDA5OTQwLCAweDE0NzUwNjA0fSwKKwl7MHgwMDAwYzk1YywgMHgwMDRiNmE4ZX0sCisJezB4MDAwMDk5NzAsIDB4OTkwYmI1MTR9LAorCXsweDAwMDA5OTc0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTk3OCwgMHgwMDAwMDAwMX0sCisJezB4MDAwMDk5N2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OWEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTlhNCwgMHgwMDAwMDAwMX0sCisJezB4MDAwMDk5YTgsIDB4MjAxZmZmMDB9LAorCXsweDAwMDA5OWFjLCAweDBjNmYwMDAwfSwKKwl7MHgwMDAwOTliMCwgMHgwMzA1MTAwMH0sCisJezB4MDAwMDk5YjQsIDB4MDAwMDA4MjB9LAorCXsweDAwMDA5OWM0LCAweDA2MzM2Zjc3fSwKKwl7MHgwMDAwOTljOCwgMHg2YWY2NTMyZn0sCisJezB4MDAwMDk5Y2MsIDB4MDhmMTg2Yzh9LAorCXsweDAwMDA5OWQwLCAweDAwMDQ2Mzg0fSwKKwl7MHgwMDAwOTlkYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5ZTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OWU0LCAweGFhYWFhYWFhfSwKKwl7MHgwMDAwOTllOCwgMHgzYzQ2NjQ3OH0sCisJezB4MDAwMDk5ZWMsIDB4MGNjODBjYWF9LAorCXsweDAwMDA5OWYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTlmYywgMHgwMDAwMTA0Mn0sCisJezB4MDAwMGEyMDgsIDB4ODAzZTQ3ODh9LAorCXsweDAwMDBhMjEwLCAweDQwODBhMzMzfSwKKwl7MHgwMDAwYTIxNCwgMHg0MDIwNmMxMH0sCisJezB4MDAwMGEyMTgsIDB4MDA5YzQwNjB9LAorCXsweDAwMDBhMjIwLCAweDAxODM0MDYxfSwKKwl7MHgwMDAwYTIyNCwgMHgwMDAwMDQwMH0sCisJezB4MDAwMGEyMjgsIDB4MDAwMDAzYjV9LAorCXsweDAwMDBhMjJjLCAweDIzM2Y3MTgwfSwKKwl7MHgwMDAwYTIzNCwgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEyMzgsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhMjNjLCAweDEzYzg4OWFmfSwKKwl7MHgwMDAwYTI0MCwgMHgzODQ5MGEyMH0sCisJezB4MDAwMGEyNDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMjQ4LCAweGZmZmZmZmZjfSwKKwl7MHgwMDAwYTI0YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyNTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMjU4LCAweDBjZGJkMzgwfSwKKwl7MHgwMDAwYTI1YywgMHgwZjBmMGYwMX0sCisJezB4MDAwMGEyNjAsIDB4ZGZhOTFmMDF9LAorCXsweDAwMDBhMjY0LCAweDAwNDE4YTExfSwKKwl7MHgwMDAwYjI2NCwgMHgwMDQxOGExMX0sCisJezB4MDAwMGEyNjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMjZjLCAweDBlNzllNWM2fSwKKwl7MHgwMDAwYjI2YywgMHgwZTc5ZTVjNn0sCisJezB4MDAwMGQyNzAsIDB4MDA4MjA4MjB9LAorCXsweDAwMDBhMjc4LCAweDFjZTczOWNlfSwKKwl7MHgwMDAwYTI3YywgMHgwNTA3MDFjZX0sCisJezB4MDAwMGQzNWMsIDB4MDdmZmZmZWZ9LAorCXsweDAwMDBkMzYwLCAweDBmZmZmZmU3fSwKKwl7MHgwMDAwZDM2NCwgMHgxN2ZmZmZlNX0sCisJezB4MDAwMGQzNjgsIDB4MWZmZmZmZTR9LAorCXsweDAwMDBkMzZjLCAweDM3ZmZmZmUzfSwKKwl7MHgwMDAwZDM3MCwgMHgzZmZmZmZlM30sCisJezB4MDAwMGQzNzQsIDB4NTdmZmZmZTN9LAorCXsweDAwMDBkMzc4LCAweDVmZmZmZmUyfSwKKwl7MHgwMDAwZDM3YywgMHg3ZmZmZmZlMn0sCisJezB4MDAwMGQzODAsIDB4N2YzYzdiYmF9LAorCXsweDAwMDBkMzg0LCAweGYzMzA3ZmYwfSwKKwl7MHgwMDAwYTM4OCwgMHgwYzAwMDAwMH0sCisJezB4MDAwMGEzOGMsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhMzkwLCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTM5NCwgMHgxY2U3MzljZX0sCisJezB4MDAwMGEzOTgsIDB4MDAwMDAxY2V9LAorCXsweDAwMDBiMzk4LCAweDAwMDAwMWNlfSwKKwl7MHgwMDAwYTM5YywgMHgwMDAwMDAwMX0sCisJezB4MDAwMGEzYzgsIDB4MDAwMDAyNDZ9LAorCXsweDAwMDBhM2NjLCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTNkMCwgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzZDQsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2RjLCAweDFjZTczOWNlfSwKKwl7MHgwMDAwYTNlMCwgMHgwMDAwMDFjZX0sCisJezB4MDAwMGEzZTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2U4LCAweDE4YzQzNDMzfSwKKwl7MHgwMDAwYTNlYywgMHgwMGY3MDA4MX0sCisJezB4MDAwMGEzZjAsIDB4MDEwMzZhMWV9LAorCXsweDAwMDBhM2Y0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjNmNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE3ZDgsIDB4MDAwMDAzZjF9LAorCXsweDAwMDA3ODAwLCAweDAwMDAwODAwfSwKKwl7MHgwMDAwNzgwNCwgMHg2YzM1ZmZkMn0sCisJezB4MDAwMDc4MDgsIDB4NmRiNmMwMDB9LAorCXsweDAwMDA3ODBjLCAweDZkYjZjYjMwfSwKKwl7MHgwMDAwNzgxMCwgMHg2ZGI2Y2I2Y30sCisJezB4MDAwMDc4MTQsIDB4MDUwMWUyMDB9LAorCXsweDAwMDA3ODE4LCAweDAwOTQxMjhkfSwKKwl7MHgwMDAwNzgxYywgMHg5NzZlZTM5Mn0sCisJezB4MDAwMDc4MjAsIDB4Zjc1ZmY2ZmN9LAorCXsweDAwMDA3ODI0LCAweDAwMDQwMDAwfSwKKwl7MHgwMDAwNzgyOCwgMHhkYjAwMzAxMn0sCisJezB4MDAwMDc4MmMsIDB4MDQ5MjQ5MTR9LAorCXsweDAwMDA3ODMwLCAweDIxMDg0MjEwfSwKKwl7MHgwMDAwNzgzNCwgMHgwMDE0MDAwMH0sCisJezB4MDAwMDc4MzgsIDB4MGU0NTQ4ZDh9LAorCXsweDAwMDA3ODNjLCAweDU0MjE0NTE0fSwKKwl7MHgwMDAwNzg0MCwgMHgwMjAyNTgzMH0sCisJezB4MDAwMDc4NDQsIDB4NzFjMGQzODh9LAorCXsweDAwMDA3ODQ4LCAweDkzNDkzNGE4fSwKKwl7MHgwMDAwNzg1MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDc4NTQsIDB4MDAwMDA4MDB9LAorCXsweDAwMDA3ODU4LCAweDZjMzVmZmQyfSwKKwl7MHgwMDAwNzg1YywgMHg2ZGI2YzAwMH0sCisJezB4MDAwMDc4NjAsIDB4NmRiNmNiMzB9LAorCXsweDAwMDA3ODY0LCAweDZkYjZjYjZjfSwKKwl7MHgwMDAwNzg2OCwgMHgwNTAxZTIwMH0sCisJezB4MDAwMDc4NmMsIDB4MDA5NDEyOGR9LAorCXsweDAwMDA3ODcwLCAweDk3NmVlMzkyfSwKKwl7MHgwMDAwNzg3NCwgMHhmNzVmZjZmY30sCisJezB4MDAwMDc4NzgsIDB4MDAwNDAwMDB9LAorCXsweDAwMDA3ODdjLCAweGRiMDAzMDEyfSwKKwl7MHgwMDAwNzg4MCwgMHgwNDkyNDkxNH0sCisJezB4MDAwMDc4ODQsIDB4MjEwODQyMTB9LAorCXsweDAwMDA3ODg4LCAweDAwMWI2ZGIwfSwKKwl7MHgwMDAwNzg4YywgMHgwMDM3NmI2M30sCisJezB4MDAwMDc4OTAsIDB4MDZkYjZkYjZ9LAorCXsweDAwMDA3ODk0LCAweDAwNmQ4MDAwfSwKKwl7MHgwMDAwNzg5OCwgMHg0ODEwMDAwMH0sCisJezB4MDAwMDc4OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA3OGEwLCAweDA4MDAwMDAwfSwKKwl7MHgwMDAwNzhhNCwgMHgwMDA3ZmZkOH0sCisJezB4MDAwMDc4YTgsIDB4MDAwN2ZmZDh9LAorCXsweDAwMDA3OGFjLCAweDAwMWMwMDIwfSwKKwl7MHgwMDAwNzhiMCwgMHgwMDA2MGFlYn0sCisJezB4MDAwMDc4YjQsIDB4NDAwMDgwODB9LAorCXsweDAwMDA3OGI4LCAweDJhODUwMTYwfSwKIH07CiAKLS8qCi0gKiBGb3IgSmFwYW5lc2UgcmVndWxhdG9yeSByZXF1aXJlbWVudHMsIDI0ODQgTUh6IHJlcXVpcmVzIHRoZSBmb2xsb3dpbmcgdGhyZWUKLSAqIHJlZ2lzdGVycyBiZSBwcm9ncmFtbWVkIGRpZmZlcmVudGx5IGZyb20gdGhlIGNoYW5uZWwgYmV0d2VlbiAyNDEyIGFuZAotICogMjQ3MiBNSHouCi0gKi8KLXN0YXRpYyBjb25zdCB1MzIgYXI5Mjg3Q29tbW9uX25vcm1hbF9jY2tfZmlyX2NvZWZmXzkyODcxXzFbXVsyXSA9IHsKLSAgICB7IDB4MDAwMGExZjQsIDB4MDBmZmZlZmYgfSwKLSAgICB7IDB4MDAwMGExZjgsIDB4MDBmNWY5ZmYgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4Yjc5ZjY0MjcgfSwKK3N0YXRpYyBjb25zdCB1MzIgYXI5Mjg3Q29tbW9uX25vcm1hbF9jY2tfZmlyX2NvZWZmXzkyODdfMV8xW11bMl0gPSB7CisJLyogQWRkciAgICAgIGFsbG1vZGVzICAqLworCXsweDAwMDBhMWY0LCAweDAwZmZmZWZmfSwKKwl7MHgwMDAwYTFmOCwgMHgwMGY1ZjlmZn0sCisJezB4MDAwMGExZmMsIDB4Yjc5ZjY0Mjd9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjkyODdDb21tb25famFwYW5fMjQ4NF9jY2tfZmlyX2NvZWZmXzkyODcxXzFbXVsyXSA9IHsKLSAgICB7IDB4MDAwMGExZjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGExZjgsIDB4ZWZmZjAzMDEgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4Y2E5MjI4ZWUgfSwKK3N0YXRpYyBjb25zdCB1MzIgYXI5Mjg3Q29tbW9uX2phcGFuXzI0ODRfY2NrX2Zpcl9jb2VmZl85Mjg3XzFfMVtdWzJdID0geworCS8qIEFkZHIgICAgICBhbGxtb2RlcyAgKi8KKwl7MHgwMDAwYTFmNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZjgsIDB4ZWZmZjAzMDF9LAorCXsweDAwMDBhMWZjLCAweGNhOTIyOGVlfSwKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgYXI5Mjg3TW9kZXNfdHhfZ2Fpbl85Mjg3XzFfMVtdWzZdID0gewotICAgIC8qIEFkZHJlc3MgICAgICA1Ry1IVDIwICAgICA1Ry1IVDQwICAgICAyRy1IVDQwICAgICAyRy1IVDIwICAgICBUdXJibyAgICovCi0gICAgeyAweDAwMDBhMzAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA0MDAyLCAweDAwMDA0MDAyLCAweDAwMDA0MDAyIH0sCi0gICAgeyAweDAwMDBhMzA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA4MDA0LCAweDAwMDA4MDA0LCAweDAwMDA4MDA0IH0sCi0gICAgeyAweDAwMDBhMzBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBjMDBhLCAweDAwMDBjMDBhLCAweDAwMDBjMDBhIH0sCi0gICAgeyAweDAwMDBhMzEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDEwMDBjLCAweDAwMDEwMDBjLCAweDAwMDEwMDBjIH0sCi0gICAgeyAweDAwMDBhMzE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE0MjBiLCAweDAwMDE0MjBiLCAweDAwMDE0MjBiIH0sCi0gICAgeyAweDAwMDBhMzE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE4MjRhLCAweDAwMDE4MjRhLCAweDAwMDE4MjRhIH0sCi0gICAgeyAweDAwMDBhMzFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDFjNDRhLCAweDAwMDFjNDRhLCAweDAwMDFjNDRhIH0sCi0gICAgeyAweDAwMDBhMzIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDIwNjRhLCAweDAwMDIwNjRhLCAweDAwMDIwNjRhIH0sCi0gICAgeyAweDAwMDBhMzI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDI0ODRhLCAweDAwMDI0ODRhLCAweDAwMDI0ODRhIH0sCi0gICAgeyAweDAwMDBhMzI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDI4YTRhLCAweDAwMDI4YTRhLCAweDAwMDI4YTRhIH0sCi0gICAgeyAweDAwMDBhMzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDJjYzRhLCAweDAwMDJjYzRhLCAweDAwMDJjYzRhIH0sCi0gICAgeyAweDAwMDBhMzMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwZTRhLCAweDAwMDMwZTRhLCAweDAwMDMwZTRhIH0sCi0gICAgeyAweDAwMDBhMzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDM0ZThhLCAweDAwMDM0ZThhLCAweDAwMDM0ZThhIH0sCi0gICAgeyAweDAwMDBhMzM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDM4ZThjLCAweDAwMDM4ZThjLCAweDAwMDM4ZThjIH0sCi0gICAgeyAweDAwMDBhMzNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDNjZWNjLCAweDAwMDNjZWNjLCAweDAwMDNjZWNjIH0sCi0gICAgeyAweDAwMDBhMzQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQwZWQ0LCAweDAwMDQwZWQ0LCAweDAwMDQwZWQ0IH0sCi0gICAgeyAweDAwMDBhMzQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ0ZWRjLCAweDAwMDQ0ZWRjLCAweDAwMDQ0ZWRjIH0sCi0gICAgeyAweDAwMDBhMzQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ4ZWRlLCAweDAwMDQ4ZWRlLCAweDAwMDQ4ZWRlIH0sCi0gICAgeyAweDAwMDBhMzRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDRjZjFlLCAweDAwMDRjZjFlLCAweDAwMDRjZjFlIH0sCi0gICAgeyAweDAwMDBhMzUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDUwZjVlLCAweDAwMDUwZjVlLCAweDAwMDUwZjVlIH0sCi0gICAgeyAweDAwMDBhMzU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU0ZjllLCAweDAwMDU0ZjllLCAweDAwMDU0ZjllIH0sCi0gICAgeyAweDAwMDBhNzgwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDYyLCAweDAwMDAwMDYyLCAweDAwMDAwMDYyIH0sCi0gICAgeyAweDAwMDBhNzg0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA0MDY0LCAweDAwMDA0MDY0LCAweDAwMDA0MDY0IH0sCi0gICAgeyAweDAwMDBhNzg4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA4MGE0LCAweDAwMDA4MGE0LCAweDAwMDA4MGE0IH0sCi0gICAgeyAweDAwMDBhNzhjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBjMGFhLCAweDAwMDBjMGFhLCAweDAwMDBjMGFhIH0sCi0gICAgeyAweDAwMDBhNzkwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDEwMGFjLCAweDAwMDEwMGFjLCAweDAwMDEwMGFjIH0sCi0gICAgeyAweDAwMDBhNzk0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE0MGI0LCAweDAwMDE0MGI0LCAweDAwMDE0MGI0IH0sCi0gICAgeyAweDAwMDBhNzk4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE4MGY0LCAweDAwMDE4MGY0LCAweDAwMDE4MGY0IH0sCi0gICAgeyAweDAwMDBhNzljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDFjMTM0LCAweDAwMDFjMTM0LCAweDAwMDFjMTM0IH0sCi0gICAgeyAweDAwMDBhN2EwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDIwMTc0LCAweDAwMDIwMTc0LCAweDAwMDIwMTc0IH0sCi0gICAgeyAweDAwMDBhN2E0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDI0MTdjLCAweDAwMDI0MTdjLCAweDAwMDI0MTdjIH0sCi0gICAgeyAweDAwMDBhN2E4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDI4MTdlLCAweDAwMDI4MTdlLCAweDAwMDI4MTdlIH0sCi0gICAgeyAweDAwMDBhN2FjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDJjMWJlLCAweDAwMDJjMWJlLCAweDAwMDJjMWJlIH0sCi0gICAgeyAweDAwMDBhN2IwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCi0gICAgeyAweDAwMDBhN2I0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCi0gICAgeyAweDAwMDBhN2I4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCi0gICAgeyAweDAwMDBhN2JjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCi0gICAgeyAweDAwMDBhN2MwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCi0gICAgeyAweDAwMDBhN2M0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCi0gICAgeyAweDAwMDBhN2M4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCi0gICAgeyAweDAwMDBhN2NjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCi0gICAgeyAweDAwMDBhN2QwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCi0gICAgeyAweDAwMDBhN2Q0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCi0gICAgeyAweDAwMDBhMjc0LCAweDBhMTgwMDAwLCAweDBhMTgwMDAwLCAweDBhMWFhMDAwLCAweDBhMWFhMDAwLCAweDBhMWFhMDAwIH0sCisJezB4MDAwMGEzMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA0MDAyLCAweDAwMDA0MDAyLCAweDAwMDA0MDAyfSwKKwl7MHgwMDAwYTMwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwODAwNCwgMHgwMDAwODAwNCwgMHgwMDAwODAwNH0sCisJezB4MDAwMGEzMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGMwMGEsIDB4MDAwMGMwMGEsIDB4MDAwMGMwMGF9LAorCXsweDAwMDBhMzEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDEwMDBjLCAweDAwMDEwMDBjLCAweDAwMDEwMDBjfSwKKwl7MHgwMDAwYTMxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxNDIwYiwgMHgwMDAxNDIwYiwgMHgwMDAxNDIwYn0sCisJezB4MDAwMGEzMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTgyNGEsIDB4MDAwMTgyNGEsIDB4MDAwMTgyNGF9LAorCXsweDAwMDBhMzFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDFjNDRhLCAweDAwMDFjNDRhLCAweDAwMDFjNDRhfSwKKwl7MHgwMDAwYTMyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyMDY0YSwgMHgwMDAyMDY0YSwgMHgwMDAyMDY0YX0sCisJezB4MDAwMGEzMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjQ4NGEsIDB4MDAwMjQ4NGEsIDB4MDAwMjQ4NGF9LAorCXsweDAwMDBhMzI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDI4YTRhLCAweDAwMDI4YTRhLCAweDAwMDI4YTRhfSwKKwl7MHgwMDAwYTMyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyY2M0YSwgMHgwMDAyY2M0YSwgMHgwMDAyY2M0YX0sCisJezB4MDAwMGEzMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzBlNGEsIDB4MDAwMzBlNGEsIDB4MDAwMzBlNGF9LAorCXsweDAwMDBhMzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDM0ZThhLCAweDAwMDM0ZThhLCAweDAwMDM0ZThhfSwKKwl7MHgwMDAwYTMzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzOGU4YywgMHgwMDAzOGU4YywgMHgwMDAzOGU4Y30sCisJezB4MDAwMGEzM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwM2NlY2MsIDB4MDAwM2NlY2MsIDB4MDAwM2NlY2N9LAorCXsweDAwMDBhMzQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQwZWQ0LCAweDAwMDQwZWQ0LCAweDAwMDQwZWQ0fSwKKwl7MHgwMDAwYTM0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA0NGVkYywgMHgwMDA0NGVkYywgMHgwMDA0NGVkY30sCisJezB4MDAwMGEzNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNDhlZGUsIDB4MDAwNDhlZGUsIDB4MDAwNDhlZGV9LAorCXsweDAwMDBhMzRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDRjZjFlLCAweDAwMDRjZjFlLCAweDAwMDRjZjFlfSwKKwl7MHgwMDAwYTM1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1MGY1ZSwgMHgwMDA1MGY1ZSwgMHgwMDA1MGY1ZX0sCisJezB4MDAwMGEzNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTRmOWUsIDB4MDAwNTRmOWUsIDB4MDAwNTRmOWV9LAorCXsweDAwMDBhNzgwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDYyLCAweDAwMDAwMDYyLCAweDAwMDAwMDYyfSwKKwl7MHgwMDAwYTc4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwNDA2NCwgMHgwMDAwNDA2NCwgMHgwMDAwNDA2NH0sCisJezB4MDAwMGE3ODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDgwYTQsIDB4MDAwMDgwYTQsIDB4MDAwMDgwYTR9LAorCXsweDAwMDBhNzhjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBjMGFhLCAweDAwMDBjMGFhLCAweDAwMDBjMGFhfSwKKwl7MHgwMDAwYTc5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxMDBhYywgMHgwMDAxMDBhYywgMHgwMDAxMDBhY30sCisJezB4MDAwMGE3OTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTQwYjQsIDB4MDAwMTQwYjQsIDB4MDAwMTQwYjR9LAorCXsweDAwMDBhNzk4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE4MGY0LCAweDAwMDE4MGY0LCAweDAwMDE4MGY0fSwKKwl7MHgwMDAwYTc5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxYzEzNCwgMHgwMDAxYzEzNCwgMHgwMDAxYzEzNH0sCisJezB4MDAwMGE3YTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjAxNzQsIDB4MDAwMjAxNzQsIDB4MDAwMjAxNzR9LAorCXsweDAwMDBhN2E0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDI0MTdjLCAweDAwMDI0MTdjLCAweDAwMDI0MTdjfSwKKwl7MHgwMDAwYTdhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyODE3ZSwgMHgwMDAyODE3ZSwgMHgwMDAyODE3ZX0sCisJezB4MDAwMGE3YWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmMxYmUsIDB4MDAwMmMxYmUsIDB4MDAwMmMxYmV9LAorCXsweDAwMDBhN2IwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlfSwKKwl7MHgwMDAwYTdiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzMDFmZSwgMHgwMDAzMDFmZSwgMHgwMDAzMDFmZX0sCisJezB4MDAwMGE3YjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzAxZmUsIDB4MDAwMzAxZmUsIDB4MDAwMzAxZmV9LAorCXsweDAwMDBhN2JjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlfSwKKwl7MHgwMDAwYTdjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzMDFmZSwgMHgwMDAzMDFmZSwgMHgwMDAzMDFmZX0sCisJezB4MDAwMGE3YzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzAxZmUsIDB4MDAwMzAxZmUsIDB4MDAwMzAxZmV9LAorCXsweDAwMDBhN2M4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlfSwKKwl7MHgwMDAwYTdjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzMDFmZSwgMHgwMDAzMDFmZSwgMHgwMDAzMDFmZX0sCisJezB4MDAwMGE3ZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzAxZmUsIDB4MDAwMzAxZmUsIDB4MDAwMzAxZmV9LAorCXsweDAwMDBhN2Q0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlfSwKKwl7MHgwMDAwYTI3NCwgMHgwYTE4MDAwMCwgMHgwYTE4MDAwMCwgMHgwYTFhYTAwMCwgMHgwYTFhYTAwMCwgMHgwYTFhYTAwMH0sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyOTI4N01vZGVzX3J4X2dhaW5fOTI4N18xXzFbXVs2XSA9IHsKLSAgICAvKiBBZGRyZXNzICAgICAgNUctSFQyMCAgICAgNUctSFQ0MCAgICAgMkctSFQ0MCAgICAgMkctSFQyMCAgICAgVHVyYm8gICAqLwotICAgIHsgMHgwMDAwOWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyMCwgMHgwMDAwYTEyMCwgMHgwMDAwYTEyMCB9LAotICAgIHsgMHgwMDAwOWEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyNCwgMHgwMDAwYTEyNCwgMHgwMDAwYTEyNCB9LAotICAgIHsgMHgwMDAwOWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyOCwgMHgwMDAwYTEyOCwgMHgwMDAwYTEyOCB9LAotICAgIHsgMHgwMDAwOWEwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyYywgMHgwMDAwYTEyYywgMHgwMDAwYTEyYyB9LAotICAgIHsgMHgwMDAwOWExMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEzMCwgMHgwMDAwYTEzMCwgMHgwMDAwYTEzMCB9LAotICAgIHsgMHgwMDAwOWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTE5NCwgMHgwMDAwYTE5NCwgMHgwMDAwYTE5NCB9LAotICAgIHsgMHgwMDAwOWExOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTE5OCwgMHgwMDAwYTE5OCwgMHgwMDAwYTE5OCB9LAotICAgIHsgMHgwMDAwOWExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTIwYywgMHgwMDAwYTIwYywgMHgwMDAwYTIwYyB9LAotICAgIHsgMHgwMDAwOWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTIxMCwgMHgwMDAwYTIxMCwgMHgwMDAwYTIxMCB9LAotICAgIHsgMHgwMDAwOWEyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI4NCwgMHgwMDAwYTI4NCwgMHgwMDAwYTI4NCB9LAotICAgIHsgMHgwMDAwOWEyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI4OCwgMHgwMDAwYTI4OCwgMHgwMDAwYTI4OCB9LAotICAgIHsgMHgwMDAwOWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI4YywgMHgwMDAwYTI4YywgMHgwMDAwYTI4YyB9LAotICAgIHsgMHgwMDAwOWEzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI5MCwgMHgwMDAwYTI5MCwgMHgwMDAwYTI5MCB9LAotICAgIHsgMHgwMDAwOWEzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI5NCwgMHgwMDAwYTI5NCwgMHgwMDAwYTI5NCB9LAotICAgIHsgMHgwMDAwOWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhMCwgMHgwMDAwYTJhMCwgMHgwMDAwYTJhMCB9LAotICAgIHsgMHgwMDAwOWEzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhNCwgMHgwMDAwYTJhNCwgMHgwMDAwYTJhNCB9LAotICAgIHsgMHgwMDAwOWE0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhOCwgMHgwMDAwYTJhOCwgMHgwMDAwYTJhOCB9LAotICAgIHsgMHgwMDAwOWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhYywgMHgwMDAwYTJhYywgMHgwMDAwYTJhYyB9LAotICAgIHsgMHgwMDAwOWE0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJiMCwgMHgwMDAwYTJiMCwgMHgwMDAwYTJiMCB9LAotICAgIHsgMHgwMDAwOWE0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJiNCwgMHgwMDAwYTJiNCwgMHgwMDAwYTJiNCB9LAotICAgIHsgMHgwMDAwOWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJiOCwgMHgwMDAwYTJiOCwgMHgwMDAwYTJiOCB9LAotICAgIHsgMHgwMDAwOWE1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJjNCwgMHgwMDAwYTJjNCwgMHgwMDAwYTJjNCB9LAotICAgIHsgMHgwMDAwOWE1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTcwOCwgMHgwMDAwYTcwOCwgMHgwMDAwYTcwOCB9LAotICAgIHsgMHgwMDAwOWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTcwYywgMHgwMDAwYTcwYywgMHgwMDAwYTcwYyB9LAotICAgIHsgMHgwMDAwOWE2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTcxMCwgMHgwMDAwYTcxMCwgMHgwMDAwYTcxMCB9LAotICAgIHsgMHgwMDAwOWE2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIwNCwgMHgwMDAwYWIwNCwgMHgwMDAwYWIwNCB9LAotICAgIHsgMHgwMDAwOWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIwOCwgMHgwMDAwYWIwOCwgMHgwMDAwYWIwOCB9LAotICAgIHsgMHgwMDAwOWE2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIwYywgMHgwMDAwYWIwYywgMHgwMDAwYWIwYyB9LAotICAgIHsgMHgwMDAwOWE3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIxMCwgMHgwMDAwYWIxMCwgMHgwMDAwYWIxMCB9LAotICAgIHsgMHgwMDAwOWE3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIxNCwgMHgwMDAwYWIxNCwgMHgwMDAwYWIxNCB9LAotICAgIHsgMHgwMDAwOWE3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIxOCwgMHgwMDAwYWIxOCwgMHgwMDAwYWIxOCB9LAotICAgIHsgMHgwMDAwOWE3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI4YywgMHgwMDAwYWI4YywgMHgwMDAwYWI4YyB9LAotICAgIHsgMHgwMDAwOWE4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI5MCwgMHgwMDAwYWI5MCwgMHgwMDAwYWI5MCB9LAotICAgIHsgMHgwMDAwOWE4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI5NCwgMHgwMDAwYWI5NCwgMHgwMDAwYWI5NCB9LAotICAgIHsgMHgwMDAwOWE4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI5OCwgMHgwMDAwYWI5OCwgMHgwMDAwYWI5OCB9LAotICAgIHsgMHgwMDAwOWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWJhNCwgMHgwMDAwYWJhNCwgMHgwMDAwYWJhNCB9LAotICAgIHsgMHgwMDAwOWE5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWJhOCwgMHgwMDAwYWJhOCwgMHgwMDAwYWJhOCB9LAotICAgIHsgMHgwMDAwOWE5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IwNCwgMHgwMDAwY2IwNCwgMHgwMDAwY2IwNCB9LAotICAgIHsgMHgwMDAwOWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IwOCwgMHgwMDAwY2IwOCwgMHgwMDAwY2IwOCB9LAotICAgIHsgMHgwMDAwOWE5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IwYywgMHgwMDAwY2IwYywgMHgwMDAwY2IwYyB9LAotICAgIHsgMHgwMDAwOWFhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IxMCwgMHgwMDAwY2IxMCwgMHgwMDAwY2IxMCB9LAotICAgIHsgMHgwMDAwOWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IxNCwgMHgwMDAwY2IxNCwgMHgwMDAwY2IxNCB9LAotICAgIHsgMHgwMDAwOWFhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IxOCwgMHgwMDAwY2IxOCwgMHgwMDAwY2IxOCB9LAotICAgIHsgMHgwMDAwOWFhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2I4YywgMHgwMDAwY2I4YywgMHgwMDAwY2I4YyB9LAotICAgIHsgMHgwMDAwOWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2I5MCwgMHgwMDAwY2I5MCwgMHgwMDAwY2I5MCB9LAotICAgIHsgMHgwMDAwOWFiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2YxOCwgMHgwMDAwY2YxOCwgMHgwMDAwY2YxOCB9LAotICAgIHsgMHgwMDAwOWFiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2YyNCwgMHgwMDAwY2YyNCwgMHgwMDAwY2YyNCB9LAotICAgIHsgMHgwMDAwOWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2YyOCwgMHgwMDAwY2YyOCwgMHgwMDAwY2YyOCB9LAotICAgIHsgMHgwMDAwOWFjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDMxNCwgMHgwMDAwZDMxNCwgMHgwMDAwZDMxNCB9LAotICAgIHsgMHgwMDAwOWFjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDMxOCwgMHgwMDAwZDMxOCwgMHgwMDAwZDMxOCB9LAotICAgIHsgMHgwMDAwOWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM4YywgMHgwMDAwZDM4YywgMHgwMDAwZDM4YyB9LAotICAgIHsgMHgwMDAwOWFjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM5MCwgMHgwMDAwZDM5MCwgMHgwMDAwZDM5MCB9LAotICAgIHsgMHgwMDAwOWFkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM5NCwgMHgwMDAwZDM5NCwgMHgwMDAwZDM5NCB9LAotICAgIHsgMHgwMDAwOWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM5OCwgMHgwMDAwZDM5OCwgMHgwMDAwZDM5OCB9LAotICAgIHsgMHgwMDAwOWFkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNhNCwgMHgwMDAwZDNhNCwgMHgwMDAwZDNhNCB9LAotICAgIHsgMHgwMDAwOWFkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNhOCwgMHgwMDAwZDNhOCwgMHgwMDAwZDNhOCB9LAotICAgIHsgMHgwMDAwOWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNhYywgMHgwMDAwZDNhYywgMHgwMDAwZDNhYyB9LAotICAgIHsgMHgwMDAwOWFlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNiMCwgMHgwMDAwZDNiMCwgMHgwMDAwZDNiMCB9LAotICAgIHsgMHgwMDAwOWFlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjM4MCwgMHgwMDAwZjM4MCwgMHgwMDAwZjM4MCB9LAotICAgIHsgMHgwMDAwOWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjM4NCwgMHgwMDAwZjM4NCwgMHgwMDAwZjM4NCB9LAotICAgIHsgMHgwMDAwOWFmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjM4OCwgMHgwMDAwZjM4OCwgMHgwMDAwZjM4OCB9LAotICAgIHsgMHgwMDAwOWFmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjcxMCwgMHgwMDAwZjcxMCwgMHgwMDAwZjcxMCB9LAotICAgIHsgMHgwMDAwOWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjcxNCwgMHgwMDAwZjcxNCwgMHgwMDAwZjcxNCB9LAotICAgIHsgMHgwMDAwOWFmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjcxOCwgMHgwMDAwZjcxOCwgMHgwMDAwZjcxOCB9LAotICAgIHsgMHgwMDAwOWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmIxMCwgMHgwMDAwZmIxMCwgMHgwMDAwZmIxMCB9LAotICAgIHsgMHgwMDAwOWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmIxNCwgMHgwMDAwZmIxNCwgMHgwMDAwZmIxNCB9LAotICAgIHsgMHgwMDAwOWIwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmIxOCwgMHgwMDAwZmIxOCwgMHgwMDAwZmIxOCB9LAotICAgIHsgMHgwMDAwOWIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmI4YywgMHgwMDAwZmI4YywgMHgwMDAwZmI4YyB9LAotICAgIHsgMHgwMDAwOWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmI5MCwgMHgwMDAwZmI5MCwgMHgwMDAwZmI5MCB9LAotICAgIHsgMHgwMDAwOWIxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmI5NCwgMHgwMDAwZmI5NCwgMHgwMDAwZmI5NCB9LAotICAgIHsgMHgwMDAwOWIxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmY4YywgMHgwMDAwZmY4YywgMHgwMDAwZmY4YyB9LAotICAgIHsgMHgwMDAwOWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmY5MCwgMHgwMDAwZmY5MCwgMHgwMDAwZmY5MCB9LAotICAgIHsgMHgwMDAwOWIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmY5NCwgMHgwMDAwZmY5NCwgMHgwMDAwZmY5NCB9LAotICAgIHsgMHgwMDAwOWIyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhMCwgMHgwMDAwZmZhMCwgMHgwMDAwZmZhMCB9LAotICAgIHsgMHgwMDAwOWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhNCwgMHgwMDAwZmZhNCwgMHgwMDAwZmZhNCB9LAotICAgIHsgMHgwMDAwOWIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhOCwgMHgwMDAwZmZhOCwgMHgwMDAwZmZhOCB9LAotICAgIHsgMHgwMDAwOWIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhYywgMHgwMDAwZmZhYywgMHgwMDAwZmZhYyB9LAotICAgIHsgMHgwMDAwOWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiMCwgMHgwMDAwZmZiMCwgMHgwMDAwZmZiMCB9LAotICAgIHsgMHgwMDAwOWIzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiNCwgMHgwMDAwZmZiNCwgMHgwMDAwZmZiNCB9LAotICAgIHsgMHgwMDAwOWIzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhMSwgMHgwMDAwZmZhMSwgMHgwMDAwZmZhMSB9LAotICAgIHsgMHgwMDAwOWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhNSwgMHgwMDAwZmZhNSwgMHgwMDAwZmZhNSB9LAotICAgIHsgMHgwMDAwOWI0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhOSwgMHgwMDAwZmZhOSwgMHgwMDAwZmZhOSB9LAotICAgIHsgMHgwMDAwOWI0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhZCwgMHgwMDAwZmZhZCwgMHgwMDAwZmZhZCB9LAotICAgIHsgMHgwMDAwOWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiMSwgMHgwMDAwZmZiMSwgMHgwMDAwZmZiMSB9LAotICAgIHsgMHgwMDAwOWI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiNSwgMHgwMDAwZmZiNSwgMHgwMDAwZmZiNSB9LAotICAgIHsgMHgwMDAwOWI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiOSwgMHgwMDAwZmZiOSwgMHgwMDAwZmZiOSB9LAotICAgIHsgMHgwMDAwOWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNSwgMHgwMDAwZmZjNSwgMHgwMDAwZmZjNSB9LAotICAgIHsgMHgwMDAwOWI1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjOSwgMHgwMDAwZmZjOSwgMHgwMDAwZmZjOSB9LAotICAgIHsgMHgwMDAwOWI2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZCwgMHgwMDAwZmZjZCwgMHgwMDAwZmZjZCB9LAotICAgIHsgMHgwMDAwOWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMSwgMHgwMDAwZmZkMSwgMHgwMDAwZmZkMSB9LAotICAgIHsgMHgwMDAwOWI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkNSwgMHgwMDAwZmZkNSwgMHgwMDAwZmZkNSB9LAotICAgIHsgMHgwMDAwOWI2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjMiwgMHgwMDAwZmZjMiwgMHgwMDAwZmZjMiB9LAotICAgIHsgMHgwMDAwOWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNiwgMHgwMDAwZmZjNiwgMHgwMDAwZmZjNiB9LAotICAgIHsgMHgwMDAwOWI3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjYSwgMHgwMDAwZmZjYSwgMHgwMDAwZmZjYSB9LAotICAgIHsgMHgwMDAwOWI3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZSwgMHgwMDAwZmZjZSwgMHgwMDAwZmZjZSB9LAotICAgIHsgMHgwMDAwOWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMiwgMHgwMDAwZmZkMiwgMHgwMDAwZmZkMiB9LAotICAgIHsgMHgwMDAwOWI4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkNiwgMHgwMDAwZmZkNiwgMHgwMDAwZmZkNiB9LAotICAgIHsgMHgwMDAwOWI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYSwgMHgwMDAwZmZkYSwgMHgwMDAwZmZkYSB9LAotICAgIHsgMHgwMDAwOWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNywgMHgwMDAwZmZjNywgMHgwMDAwZmZjNyB9LAotICAgIHsgMHgwMDAwOWI4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjYiwgMHgwMDAwZmZjYiwgMHgwMDAwZmZjYiB9LAotICAgIHsgMHgwMDAwOWI5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZiwgMHgwMDAwZmZjZiwgMHgwMDAwZmZjZiB9LAotICAgIHsgMHgwMDAwOWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMywgMHgwMDAwZmZkMywgMHgwMDAwZmZkMyB9LAotICAgIHsgMHgwMDAwOWI5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkNywgMHgwMDAwZmZkNywgMHgwMDAwZmZkNyB9LAotICAgIHsgMHgwMDAwOWI5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOWJmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyMCwgMHgwMDAwYTEyMCwgMHgwMDAwYTEyMCB9LAotICAgIHsgMHgwMDAwYWEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyNCwgMHgwMDAwYTEyNCwgMHgwMDAwYTEyNCB9LAotICAgIHsgMHgwMDAwYWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyOCwgMHgwMDAwYTEyOCwgMHgwMDAwYTEyOCB9LAotICAgIHsgMHgwMDAwYWEwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyYywgMHgwMDAwYTEyYywgMHgwMDAwYTEyYyB9LAotICAgIHsgMHgwMDAwYWExMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEzMCwgMHgwMDAwYTEzMCwgMHgwMDAwYTEzMCB9LAotICAgIHsgMHgwMDAwYWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTE5NCwgMHgwMDAwYTE5NCwgMHgwMDAwYTE5NCB9LAotICAgIHsgMHgwMDAwYWExOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTE5OCwgMHgwMDAwYTE5OCwgMHgwMDAwYTE5OCB9LAotICAgIHsgMHgwMDAwYWExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTIwYywgMHgwMDAwYTIwYywgMHgwMDAwYTIwYyB9LAotICAgIHsgMHgwMDAwYWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTIxMCwgMHgwMDAwYTIxMCwgMHgwMDAwYTIxMCB9LAotICAgIHsgMHgwMDAwYWEyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI4NCwgMHgwMDAwYTI4NCwgMHgwMDAwYTI4NCB9LAotICAgIHsgMHgwMDAwYWEyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI4OCwgMHgwMDAwYTI4OCwgMHgwMDAwYTI4OCB9LAotICAgIHsgMHgwMDAwYWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI4YywgMHgwMDAwYTI4YywgMHgwMDAwYTI4YyB9LAotICAgIHsgMHgwMDAwYWEzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI5MCwgMHgwMDAwYTI5MCwgMHgwMDAwYTI5MCB9LAotICAgIHsgMHgwMDAwYWEzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI5NCwgMHgwMDAwYTI5NCwgMHgwMDAwYTI5NCB9LAotICAgIHsgMHgwMDAwYWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhMCwgMHgwMDAwYTJhMCwgMHgwMDAwYTJhMCB9LAotICAgIHsgMHgwMDAwYWEzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhNCwgMHgwMDAwYTJhNCwgMHgwMDAwYTJhNCB9LAotICAgIHsgMHgwMDAwYWE0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhOCwgMHgwMDAwYTJhOCwgMHgwMDAwYTJhOCB9LAotICAgIHsgMHgwMDAwYWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhYywgMHgwMDAwYTJhYywgMHgwMDAwYTJhYyB9LAotICAgIHsgMHgwMDAwYWE0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJiMCwgMHgwMDAwYTJiMCwgMHgwMDAwYTJiMCB9LAotICAgIHsgMHgwMDAwYWE0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJiNCwgMHgwMDAwYTJiNCwgMHgwMDAwYTJiNCB9LAotICAgIHsgMHgwMDAwYWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJiOCwgMHgwMDAwYTJiOCwgMHgwMDAwYTJiOCB9LAotICAgIHsgMHgwMDAwYWE1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJjNCwgMHgwMDAwYTJjNCwgMHgwMDAwYTJjNCB9LAotICAgIHsgMHgwMDAwYWE1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTcwOCwgMHgwMDAwYTcwOCwgMHgwMDAwYTcwOCB9LAotICAgIHsgMHgwMDAwYWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTcwYywgMHgwMDAwYTcwYywgMHgwMDAwYTcwYyB9LAotICAgIHsgMHgwMDAwYWE2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTcxMCwgMHgwMDAwYTcxMCwgMHgwMDAwYTcxMCB9LAotICAgIHsgMHgwMDAwYWE2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIwNCwgMHgwMDAwYWIwNCwgMHgwMDAwYWIwNCB9LAotICAgIHsgMHgwMDAwYWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIwOCwgMHgwMDAwYWIwOCwgMHgwMDAwYWIwOCB9LAotICAgIHsgMHgwMDAwYWE2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIwYywgMHgwMDAwYWIwYywgMHgwMDAwYWIwYyB9LAotICAgIHsgMHgwMDAwYWE3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIxMCwgMHgwMDAwYWIxMCwgMHgwMDAwYWIxMCB9LAotICAgIHsgMHgwMDAwYWE3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIxNCwgMHgwMDAwYWIxNCwgMHgwMDAwYWIxNCB9LAotICAgIHsgMHgwMDAwYWE3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIxOCwgMHgwMDAwYWIxOCwgMHgwMDAwYWIxOCB9LAotICAgIHsgMHgwMDAwYWE3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI4YywgMHgwMDAwYWI4YywgMHgwMDAwYWI4YyB9LAotICAgIHsgMHgwMDAwYWE4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI5MCwgMHgwMDAwYWI5MCwgMHgwMDAwYWI5MCB9LAotICAgIHsgMHgwMDAwYWE4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI5NCwgMHgwMDAwYWI5NCwgMHgwMDAwYWI5NCB9LAotICAgIHsgMHgwMDAwYWE4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI5OCwgMHgwMDAwYWI5OCwgMHgwMDAwYWI5OCB9LAotICAgIHsgMHgwMDAwYWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWJhNCwgMHgwMDAwYWJhNCwgMHgwMDAwYWJhNCB9LAotICAgIHsgMHgwMDAwYWE5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWJhOCwgMHgwMDAwYWJhOCwgMHgwMDAwYWJhOCB9LAotICAgIHsgMHgwMDAwYWE5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IwNCwgMHgwMDAwY2IwNCwgMHgwMDAwY2IwNCB9LAotICAgIHsgMHgwMDAwYWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IwOCwgMHgwMDAwY2IwOCwgMHgwMDAwY2IwOCB9LAotICAgIHsgMHgwMDAwYWE5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IwYywgMHgwMDAwY2IwYywgMHgwMDAwY2IwYyB9LAotICAgIHsgMHgwMDAwYWFhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IxMCwgMHgwMDAwY2IxMCwgMHgwMDAwY2IxMCB9LAotICAgIHsgMHgwMDAwYWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IxNCwgMHgwMDAwY2IxNCwgMHgwMDAwY2IxNCB9LAotICAgIHsgMHgwMDAwYWFhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IxOCwgMHgwMDAwY2IxOCwgMHgwMDAwY2IxOCB9LAotICAgIHsgMHgwMDAwYWFhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2I4YywgMHgwMDAwY2I4YywgMHgwMDAwY2I4YyB9LAotICAgIHsgMHgwMDAwYWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2I5MCwgMHgwMDAwY2I5MCwgMHgwMDAwY2I5MCB9LAotICAgIHsgMHgwMDAwYWFiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2YxOCwgMHgwMDAwY2YxOCwgMHgwMDAwY2YxOCB9LAotICAgIHsgMHgwMDAwYWFiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2YyNCwgMHgwMDAwY2YyNCwgMHgwMDAwY2YyNCB9LAotICAgIHsgMHgwMDAwYWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2YyOCwgMHgwMDAwY2YyOCwgMHgwMDAwY2YyOCB9LAotICAgIHsgMHgwMDAwYWFjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDMxNCwgMHgwMDAwZDMxNCwgMHgwMDAwZDMxNCB9LAotICAgIHsgMHgwMDAwYWFjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDMxOCwgMHgwMDAwZDMxOCwgMHgwMDAwZDMxOCB9LAotICAgIHsgMHgwMDAwYWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM4YywgMHgwMDAwZDM4YywgMHgwMDAwZDM4YyB9LAotICAgIHsgMHgwMDAwYWFjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM5MCwgMHgwMDAwZDM5MCwgMHgwMDAwZDM5MCB9LAotICAgIHsgMHgwMDAwYWFkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM5NCwgMHgwMDAwZDM5NCwgMHgwMDAwZDM5NCB9LAotICAgIHsgMHgwMDAwYWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM5OCwgMHgwMDAwZDM5OCwgMHgwMDAwZDM5OCB9LAotICAgIHsgMHgwMDAwYWFkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNhNCwgMHgwMDAwZDNhNCwgMHgwMDAwZDNhNCB9LAotICAgIHsgMHgwMDAwYWFkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNhOCwgMHgwMDAwZDNhOCwgMHgwMDAwZDNhOCB9LAotICAgIHsgMHgwMDAwYWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNhYywgMHgwMDAwZDNhYywgMHgwMDAwZDNhYyB9LAotICAgIHsgMHgwMDAwYWFlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNiMCwgMHgwMDAwZDNiMCwgMHgwMDAwZDNiMCB9LAotICAgIHsgMHgwMDAwYWFlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjM4MCwgMHgwMDAwZjM4MCwgMHgwMDAwZjM4MCB9LAotICAgIHsgMHgwMDAwYWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjM4NCwgMHgwMDAwZjM4NCwgMHgwMDAwZjM4NCB9LAotICAgIHsgMHgwMDAwYWFmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjM4OCwgMHgwMDAwZjM4OCwgMHgwMDAwZjM4OCB9LAotICAgIHsgMHgwMDAwYWFmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjcxMCwgMHgwMDAwZjcxMCwgMHgwMDAwZjcxMCB9LAotICAgIHsgMHgwMDAwYWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjcxNCwgMHgwMDAwZjcxNCwgMHgwMDAwZjcxNCB9LAotICAgIHsgMHgwMDAwYWFmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjcxOCwgMHgwMDAwZjcxOCwgMHgwMDAwZjcxOCB9LAotICAgIHsgMHgwMDAwYWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmIxMCwgMHgwMDAwZmIxMCwgMHgwMDAwZmIxMCB9LAotICAgIHsgMHgwMDAwYWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmIxNCwgMHgwMDAwZmIxNCwgMHgwMDAwZmIxNCB9LAotICAgIHsgMHgwMDAwYWIwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmIxOCwgMHgwMDAwZmIxOCwgMHgwMDAwZmIxOCB9LAotICAgIHsgMHgwMDAwYWIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmI4YywgMHgwMDAwZmI4YywgMHgwMDAwZmI4YyB9LAotICAgIHsgMHgwMDAwYWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmI5MCwgMHgwMDAwZmI5MCwgMHgwMDAwZmI5MCB9LAotICAgIHsgMHgwMDAwYWIxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmI5NCwgMHgwMDAwZmI5NCwgMHgwMDAwZmI5NCB9LAotICAgIHsgMHgwMDAwYWIxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmY4YywgMHgwMDAwZmY4YywgMHgwMDAwZmY4YyB9LAotICAgIHsgMHgwMDAwYWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmY5MCwgMHgwMDAwZmY5MCwgMHgwMDAwZmY5MCB9LAotICAgIHsgMHgwMDAwYWIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmY5NCwgMHgwMDAwZmY5NCwgMHgwMDAwZmY5NCB9LAotICAgIHsgMHgwMDAwYWIyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhMCwgMHgwMDAwZmZhMCwgMHgwMDAwZmZhMCB9LAotICAgIHsgMHgwMDAwYWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhNCwgMHgwMDAwZmZhNCwgMHgwMDAwZmZhNCB9LAotICAgIHsgMHgwMDAwYWIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhOCwgMHgwMDAwZmZhOCwgMHgwMDAwZmZhOCB9LAotICAgIHsgMHgwMDAwYWIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhYywgMHgwMDAwZmZhYywgMHgwMDAwZmZhYyB9LAotICAgIHsgMHgwMDAwYWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiMCwgMHgwMDAwZmZiMCwgMHgwMDAwZmZiMCB9LAotICAgIHsgMHgwMDAwYWIzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiNCwgMHgwMDAwZmZiNCwgMHgwMDAwZmZiNCB9LAotICAgIHsgMHgwMDAwYWIzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhMSwgMHgwMDAwZmZhMSwgMHgwMDAwZmZhMSB9LAotICAgIHsgMHgwMDAwYWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhNSwgMHgwMDAwZmZhNSwgMHgwMDAwZmZhNSB9LAotICAgIHsgMHgwMDAwYWI0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhOSwgMHgwMDAwZmZhOSwgMHgwMDAwZmZhOSB9LAotICAgIHsgMHgwMDAwYWI0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhZCwgMHgwMDAwZmZhZCwgMHgwMDAwZmZhZCB9LAotICAgIHsgMHgwMDAwYWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiMSwgMHgwMDAwZmZiMSwgMHgwMDAwZmZiMSB9LAotICAgIHsgMHgwMDAwYWI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiNSwgMHgwMDAwZmZiNSwgMHgwMDAwZmZiNSB9LAotICAgIHsgMHgwMDAwYWI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiOSwgMHgwMDAwZmZiOSwgMHgwMDAwZmZiOSB9LAotICAgIHsgMHgwMDAwYWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNSwgMHgwMDAwZmZjNSwgMHgwMDAwZmZjNSB9LAotICAgIHsgMHgwMDAwYWI1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjOSwgMHgwMDAwZmZjOSwgMHgwMDAwZmZjOSB9LAotICAgIHsgMHgwMDAwYWI2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZCwgMHgwMDAwZmZjZCwgMHgwMDAwZmZjZCB9LAotICAgIHsgMHgwMDAwYWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMSwgMHgwMDAwZmZkMSwgMHgwMDAwZmZkMSB9LAotICAgIHsgMHgwMDAwYWI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkNSwgMHgwMDAwZmZkNSwgMHgwMDAwZmZkNSB9LAotICAgIHsgMHgwMDAwYWI2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjMiwgMHgwMDAwZmZjMiwgMHgwMDAwZmZjMiB9LAotICAgIHsgMHgwMDAwYWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNiwgMHgwMDAwZmZjNiwgMHgwMDAwZmZjNiB9LAotICAgIHsgMHgwMDAwYWI3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjYSwgMHgwMDAwZmZjYSwgMHgwMDAwZmZjYSB9LAotICAgIHsgMHgwMDAwYWI3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZSwgMHgwMDAwZmZjZSwgMHgwMDAwZmZjZSB9LAotICAgIHsgMHgwMDAwYWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMiwgMHgwMDAwZmZkMiwgMHgwMDAwZmZkMiB9LAotICAgIHsgMHgwMDAwYWI4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkNiwgMHgwMDAwZmZkNiwgMHgwMDAwZmZkNiB9LAotICAgIHsgMHgwMDAwYWI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYSwgMHgwMDAwZmZkYSwgMHgwMDAwZmZkYSB9LAotICAgIHsgMHgwMDAwYWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNywgMHgwMDAwZmZjNywgMHgwMDAwZmZjNyB9LAotICAgIHsgMHgwMDAwYWI4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjYiwgMHgwMDAwZmZjYiwgMHgwMDAwZmZjYiB9LAotICAgIHsgMHgwMDAwYWI5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZiwgMHgwMDAwZmZjZiwgMHgwMDAwZmZjZiB9LAotICAgIHsgMHgwMDAwYWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMywgMHgwMDAwZmZkMywgMHgwMDAwZmZkMyB9LAotICAgIHsgMHgwMDAwYWI5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkNywgMHgwMDAwZmZkNywgMHgwMDAwZmZkNyB9LAotICAgIHsgMHgwMDAwYWI5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwYWJmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAotICAgIHsgMHgwMDAwOTg0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMTA2NywgMHgwMDAwMTA2NywgMHgwMDAwMTA2NyB9LAotICAgIHsgMHgwMDAwYTg0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMTA2NywgMHgwMDAwMTA2NywgMHgwMDAwMTA2NyB9LAorCXsweDAwMDA5YTAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBhMTIwLCAweDAwMDBhMTIwLCAweDAwMDBhMTIwfSwKKwl7MHgwMDAwOWEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyNCwgMHgwMDAwYTEyNCwgMHgwMDAwYTEyNH0sCisJezB4MDAwMDlhMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExMjgsIDB4MDAwMGExMjgsIDB4MDAwMGExMjh9LAorCXsweDAwMDA5YTBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBhMTJjLCAweDAwMDBhMTJjLCAweDAwMDBhMTJjfSwKKwl7MHgwMDAwOWExMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEzMCwgMHgwMDAwYTEzMCwgMHgwMDAwYTEzMH0sCisJezB4MDAwMDlhMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExOTQsIDB4MDAwMGExOTQsIDB4MDAwMGExOTR9LAorCXsweDAwMDA5YTE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBhMTk4LCAweDAwMDBhMTk4LCAweDAwMDBhMTk4fSwKKwl7MHgwMDAwOWExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTIwYywgMHgwMDAwYTIwYywgMHgwMDAwYTIwY30sCisJezB4MDAwMDlhMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyMTAsIDB4MDAwMGEyMTAsIDB4MDAwMGEyMTB9LAorCXsweDAwMDA5YTI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBhMjg0LCAweDAwMDBhMjg0LCAweDAwMDBhMjg0fSwKKwl7MHgwMDAwOWEyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI4OCwgMHgwMDAwYTI4OCwgMHgwMDAwYTI4OH0sCisJezB4MDAwMDlhMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyOGMsIDB4MDAwMGEyOGMsIDB4MDAwMGEyOGN9LAorCXsweDAwMDA5YTMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBhMjkwLCAweDAwMDBhMjkwLCAweDAwMDBhMjkwfSwKKwl7MHgwMDAwOWEzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI5NCwgMHgwMDAwYTI5NCwgMHgwMDAwYTI5NH0sCisJezB4MDAwMDlhMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYTAsIDB4MDAwMGEyYTAsIDB4MDAwMGEyYTB9LAorCXsweDAwMDA5YTNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBhMmE0LCAweDAwMDBhMmE0LCAweDAwMDBhMmE0fSwKKwl7MHgwMDAwOWE0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhOCwgMHgwMDAwYTJhOCwgMHgwMDAwYTJhOH0sCisJezB4MDAwMDlhNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYWMsIDB4MDAwMGEyYWMsIDB4MDAwMGEyYWN9LAorCXsweDAwMDA5YTQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBhMmIwLCAweDAwMDBhMmIwLCAweDAwMDBhMmIwfSwKKwl7MHgwMDAwOWE0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJiNCwgMHgwMDAwYTJiNCwgMHgwMDAwYTJiNH0sCisJezB4MDAwMDlhNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYjgsIDB4MDAwMGEyYjgsIDB4MDAwMGEyYjh9LAorCXsweDAwMDA5YTU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBhMmM0LCAweDAwMDBhMmM0LCAweDAwMDBhMmM0fSwKKwl7MHgwMDAwOWE1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTcwOCwgMHgwMDAwYTcwOCwgMHgwMDAwYTcwOH0sCisJezB4MDAwMDlhNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGE3MGMsIDB4MDAwMGE3MGMsIDB4MDAwMGE3MGN9LAorCXsweDAwMDA5YTYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBhNzEwLCAweDAwMDBhNzEwLCAweDAwMDBhNzEwfSwKKwl7MHgwMDAwOWE2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIwNCwgMHgwMDAwYWIwNCwgMHgwMDAwYWIwNH0sCisJezB4MDAwMDlhNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMDgsIDB4MDAwMGFiMDgsIDB4MDAwMGFiMDh9LAorCXsweDAwMDA5YTZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBhYjBjLCAweDAwMDBhYjBjLCAweDAwMDBhYjBjfSwKKwl7MHgwMDAwOWE3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIxMCwgMHgwMDAwYWIxMCwgMHgwMDAwYWIxMH0sCisJezB4MDAwMDlhNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMTQsIDB4MDAwMGFiMTQsIDB4MDAwMGFiMTR9LAorCXsweDAwMDA5YTc4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBhYjE4LCAweDAwMDBhYjE4LCAweDAwMDBhYjE4fSwKKwl7MHgwMDAwOWE3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI4YywgMHgwMDAwYWI4YywgMHgwMDAwYWI4Y30sCisJezB4MDAwMDlhODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiOTAsIDB4MDAwMGFiOTAsIDB4MDAwMGFiOTB9LAorCXsweDAwMDA5YTg0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBhYjk0LCAweDAwMDBhYjk0LCAweDAwMDBhYjk0fSwKKwl7MHgwMDAwOWE4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI5OCwgMHgwMDAwYWI5OCwgMHgwMDAwYWI5OH0sCisJezB4MDAwMDlhOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiYTQsIDB4MDAwMGFiYTQsIDB4MDAwMGFiYTR9LAorCXsweDAwMDA5YTkwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBhYmE4LCAweDAwMDBhYmE4LCAweDAwMDBhYmE4fSwKKwl7MHgwMDAwOWE5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IwNCwgMHgwMDAwY2IwNCwgMHgwMDAwY2IwNH0sCisJezB4MDAwMDlhOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMDgsIDB4MDAwMGNiMDgsIDB4MDAwMGNiMDh9LAorCXsweDAwMDA5YTljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBjYjBjLCAweDAwMDBjYjBjLCAweDAwMDBjYjBjfSwKKwl7MHgwMDAwOWFhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IxMCwgMHgwMDAwY2IxMCwgMHgwMDAwY2IxMH0sCisJezB4MDAwMDlhYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMTQsIDB4MDAwMGNiMTQsIDB4MDAwMGNiMTR9LAorCXsweDAwMDA5YWE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBjYjE4LCAweDAwMDBjYjE4LCAweDAwMDBjYjE4fSwKKwl7MHgwMDAwOWFhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2I4YywgMHgwMDAwY2I4YywgMHgwMDAwY2I4Y30sCisJezB4MDAwMDlhYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiOTAsIDB4MDAwMGNiOTAsIDB4MDAwMGNiOTB9LAorCXsweDAwMDA5YWI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBjZjE4LCAweDAwMDBjZjE4LCAweDAwMDBjZjE4fSwKKwl7MHgwMDAwOWFiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2YyNCwgMHgwMDAwY2YyNCwgMHgwMDAwY2YyNH0sCisJezB4MDAwMDlhYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNmMjgsIDB4MDAwMGNmMjgsIDB4MDAwMGNmMjh9LAorCXsweDAwMDA5YWMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBkMzE0LCAweDAwMDBkMzE0LCAweDAwMDBkMzE0fSwKKwl7MHgwMDAwOWFjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDMxOCwgMHgwMDAwZDMxOCwgMHgwMDAwZDMxOH0sCisJezB4MDAwMDlhYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzOGMsIDB4MDAwMGQzOGMsIDB4MDAwMGQzOGN9LAorCXsweDAwMDA5YWNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBkMzkwLCAweDAwMDBkMzkwLCAweDAwMDBkMzkwfSwKKwl7MHgwMDAwOWFkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM5NCwgMHgwMDAwZDM5NCwgMHgwMDAwZDM5NH0sCisJezB4MDAwMDlhZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzOTgsIDB4MDAwMGQzOTgsIDB4MDAwMGQzOTh9LAorCXsweDAwMDA5YWQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBkM2E0LCAweDAwMDBkM2E0LCAweDAwMDBkM2E0fSwKKwl7MHgwMDAwOWFkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNhOCwgMHgwMDAwZDNhOCwgMHgwMDAwZDNhOH0sCisJezB4MDAwMDlhZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzYWMsIDB4MDAwMGQzYWMsIDB4MDAwMGQzYWN9LAorCXsweDAwMDA5YWU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBkM2IwLCAweDAwMDBkM2IwLCAweDAwMDBkM2IwfSwKKwl7MHgwMDAwOWFlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjM4MCwgMHgwMDAwZjM4MCwgMHgwMDAwZjM4MH0sCisJezB4MDAwMDlhZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGYzODQsIDB4MDAwMGYzODQsIDB4MDAwMGYzODR9LAorCXsweDAwMDA5YWYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmMzg4LCAweDAwMDBmMzg4LCAweDAwMDBmMzg4fSwKKwl7MHgwMDAwOWFmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjcxMCwgMHgwMDAwZjcxMCwgMHgwMDAwZjcxMH0sCisJezB4MDAwMDlhZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGY3MTQsIDB4MDAwMGY3MTQsIDB4MDAwMGY3MTR9LAorCXsweDAwMDA5YWZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmNzE4LCAweDAwMDBmNzE4LCAweDAwMDBmNzE4fSwKKwl7MHgwMDAwOWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmIxMCwgMHgwMDAwZmIxMCwgMHgwMDAwZmIxMH0sCisJezB4MDAwMDliMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiMTQsIDB4MDAwMGZiMTQsIDB4MDAwMGZiMTR9LAorCXsweDAwMDA5YjA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmYjE4LCAweDAwMDBmYjE4LCAweDAwMDBmYjE4fSwKKwl7MHgwMDAwOWIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmI4YywgMHgwMDAwZmI4YywgMHgwMDAwZmI4Y30sCisJezB4MDAwMDliMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiOTAsIDB4MDAwMGZiOTAsIDB4MDAwMGZiOTB9LAorCXsweDAwMDA5YjE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmYjk0LCAweDAwMDBmYjk0LCAweDAwMDBmYjk0fSwKKwl7MHgwMDAwOWIxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmY4YywgMHgwMDAwZmY4YywgMHgwMDAwZmY4Y30sCisJezB4MDAwMDliMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmOTAsIDB4MDAwMGZmOTAsIDB4MDAwMGZmOTB9LAorCXsweDAwMDA5YjIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZjk0LCAweDAwMDBmZjk0LCAweDAwMDBmZjk0fSwKKwl7MHgwMDAwOWIyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhMCwgMHgwMDAwZmZhMCwgMHgwMDAwZmZhMH0sCisJezB4MDAwMDliMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTQsIDB4MDAwMGZmYTQsIDB4MDAwMGZmYTR9LAorCXsweDAwMDA5YjJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmE4LCAweDAwMDBmZmE4LCAweDAwMDBmZmE4fSwKKwl7MHgwMDAwOWIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhYywgMHgwMDAwZmZhYywgMHgwMDAwZmZhY30sCisJezB4MDAwMDliMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYjAsIDB4MDAwMGZmYjAsIDB4MDAwMGZmYjB9LAorCXsweDAwMDA5YjM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmI0LCAweDAwMDBmZmI0LCAweDAwMDBmZmI0fSwKKwl7MHgwMDAwOWIzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhMSwgMHgwMDAwZmZhMSwgMHgwMDAwZmZhMX0sCisJezB4MDAwMDliNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTUsIDB4MDAwMGZmYTUsIDB4MDAwMGZmYTV9LAorCXsweDAwMDA5YjQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmE5LCAweDAwMDBmZmE5LCAweDAwMDBmZmE5fSwKKwl7MHgwMDAwOWI0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhZCwgMHgwMDAwZmZhZCwgMHgwMDAwZmZhZH0sCisJezB4MDAwMDliNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYjEsIDB4MDAwMGZmYjEsIDB4MDAwMGZmYjF9LAorCXsweDAwMDA5YjUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmI1LCAweDAwMDBmZmI1LCAweDAwMDBmZmI1fSwKKwl7MHgwMDAwOWI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiOSwgMHgwMDAwZmZiOSwgMHgwMDAwZmZiOX0sCisJezB4MDAwMDliNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYzUsIDB4MDAwMGZmYzUsIDB4MDAwMGZmYzV9LAorCXsweDAwMDA5YjVjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmM5LCAweDAwMDBmZmM5LCAweDAwMDBmZmM5fSwKKwl7MHgwMDAwOWI2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZCwgMHgwMDAwZmZjZCwgMHgwMDAwZmZjZH0sCisJezB4MDAwMDliNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDEsIDB4MDAwMGZmZDEsIDB4MDAwMGZmZDF9LAorCXsweDAwMDA5YjY4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmQ1LCAweDAwMDBmZmQ1LCAweDAwMDBmZmQ1fSwKKwl7MHgwMDAwOWI2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjMiwgMHgwMDAwZmZjMiwgMHgwMDAwZmZjMn0sCisJezB4MDAwMDliNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYzYsIDB4MDAwMGZmYzYsIDB4MDAwMGZmYzZ9LAorCXsweDAwMDA5Yjc0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmNhLCAweDAwMDBmZmNhLCAweDAwMDBmZmNhfSwKKwl7MHgwMDAwOWI3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZSwgMHgwMDAwZmZjZSwgMHgwMDAwZmZjZX0sCisJezB4MDAwMDliN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDIsIDB4MDAwMGZmZDIsIDB4MDAwMGZmZDJ9LAorCXsweDAwMDA5YjgwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmQ2LCAweDAwMDBmZmQ2LCAweDAwMDBmZmQ2fSwKKwl7MHgwMDAwOWI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYSwgMHgwMDAwZmZkYSwgMHgwMDAwZmZkYX0sCisJezB4MDAwMDliODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYzcsIDB4MDAwMGZmYzcsIDB4MDAwMGZmYzd9LAorCXsweDAwMDA5YjhjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmNiLCAweDAwMDBmZmNiLCAweDAwMDBmZmNifSwKKwl7MHgwMDAwOWI5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZiwgMHgwMDAwZmZjZiwgMHgwMDAwZmZjZn0sCisJezB4MDAwMDliOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDMsIDB4MDAwMGZmZDMsIDB4MDAwMGZmZDN9LAorCXsweDAwMDA5Yjk4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmQ3LCAweDAwMDBmZmQ3LCAweDAwMDBmZmQ3fSwKKwl7MHgwMDAwOWI5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYn0sCisJezB4MDAwMDliYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGJ9LAorCXsweDAwMDA5YmE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmRiLCAweDAwMDBmZmRiLCAweDAwMDBmZmRifSwKKwl7MHgwMDAwOWJhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYn0sCisJezB4MDAwMDliYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGJ9LAorCXsweDAwMDA5YmIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmRiLCAweDAwMDBmZmRiLCAweDAwMDBmZmRifSwKKwl7MHgwMDAwOWJiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYn0sCisJezB4MDAwMDliYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGJ9LAorCXsweDAwMDA5YmJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmRiLCAweDAwMDBmZmRiLCAweDAwMDBmZmRifSwKKwl7MHgwMDAwOWJjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYn0sCisJezB4MDAwMDliYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGJ9LAorCXsweDAwMDA5YmM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmRiLCAweDAwMDBmZmRiLCAweDAwMDBmZmRifSwKKwl7MHgwMDAwOWJjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYn0sCisJezB4MDAwMDliZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGJ9LAorCXsweDAwMDA5YmQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmRiLCAweDAwMDBmZmRiLCAweDAwMDBmZmRifSwKKwl7MHgwMDAwOWJkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYn0sCisJezB4MDAwMDliZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGJ9LAorCXsweDAwMDA5YmUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmRiLCAweDAwMDBmZmRiLCAweDAwMDBmZmRifSwKKwl7MHgwMDAwOWJlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYn0sCisJezB4MDAwMDliZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGJ9LAorCXsweDAwMDA5YmVjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmRiLCAweDAwMDBmZmRiLCAweDAwMDBmZmRifSwKKwl7MHgwMDAwOWJmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYn0sCisJezB4MDAwMDliZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGJ9LAorCXsweDAwMDA5YmY4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmRiLCAweDAwMDBmZmRiLCAweDAwMDBmZmRifSwKKwl7MHgwMDAwOWJmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYn0sCisJezB4MDAwMGFhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExMjAsIDB4MDAwMGExMjAsIDB4MDAwMGExMjB9LAorCXsweDAwMDBhYTA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBhMTI0LCAweDAwMDBhMTI0LCAweDAwMDBhMTI0fSwKKwl7MHgwMDAwYWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyOCwgMHgwMDAwYTEyOCwgMHgwMDAwYTEyOH0sCisJezB4MDAwMGFhMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExMmMsIDB4MDAwMGExMmMsIDB4MDAwMGExMmN9LAorCXsweDAwMDBhYTEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBhMTMwLCAweDAwMDBhMTMwLCAweDAwMDBhMTMwfSwKKwl7MHgwMDAwYWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTE5NCwgMHgwMDAwYTE5NCwgMHgwMDAwYTE5NH0sCisJezB4MDAwMGFhMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExOTgsIDB4MDAwMGExOTgsIDB4MDAwMGExOTh9LAorCXsweDAwMDBhYTFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBhMjBjLCAweDAwMDBhMjBjLCAweDAwMDBhMjBjfSwKKwl7MHgwMDAwYWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTIxMCwgMHgwMDAwYTIxMCwgMHgwMDAwYTIxMH0sCisJezB4MDAwMGFhMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyODQsIDB4MDAwMGEyODQsIDB4MDAwMGEyODR9LAorCXsweDAwMDBhYTI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBhMjg4LCAweDAwMDBhMjg4LCAweDAwMDBhMjg4fSwKKwl7MHgwMDAwYWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI4YywgMHgwMDAwYTI4YywgMHgwMDAwYTI4Y30sCisJezB4MDAwMGFhMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyOTAsIDB4MDAwMGEyOTAsIDB4MDAwMGEyOTB9LAorCXsweDAwMDBhYTM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBhMjk0LCAweDAwMDBhMjk0LCAweDAwMDBhMjk0fSwKKwl7MHgwMDAwYWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhMCwgMHgwMDAwYTJhMCwgMHgwMDAwYTJhMH0sCisJezB4MDAwMGFhM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYTQsIDB4MDAwMGEyYTQsIDB4MDAwMGEyYTR9LAorCXsweDAwMDBhYTQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBhMmE4LCAweDAwMDBhMmE4LCAweDAwMDBhMmE4fSwKKwl7MHgwMDAwYWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhYywgMHgwMDAwYTJhYywgMHgwMDAwYTJhY30sCisJezB4MDAwMGFhNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYjAsIDB4MDAwMGEyYjAsIDB4MDAwMGEyYjB9LAorCXsweDAwMDBhYTRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBhMmI0LCAweDAwMDBhMmI0LCAweDAwMDBhMmI0fSwKKwl7MHgwMDAwYWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJiOCwgMHgwMDAwYTJiOCwgMHgwMDAwYTJiOH0sCisJezB4MDAwMGFhNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYzQsIDB4MDAwMGEyYzQsIDB4MDAwMGEyYzR9LAorCXsweDAwMDBhYTU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBhNzA4LCAweDAwMDBhNzA4LCAweDAwMDBhNzA4fSwKKwl7MHgwMDAwYWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTcwYywgMHgwMDAwYTcwYywgMHgwMDAwYTcwY30sCisJezB4MDAwMGFhNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGE3MTAsIDB4MDAwMGE3MTAsIDB4MDAwMGE3MTB9LAorCXsweDAwMDBhYTY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBhYjA0LCAweDAwMDBhYjA0LCAweDAwMDBhYjA0fSwKKwl7MHgwMDAwYWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIwOCwgMHgwMDAwYWIwOCwgMHgwMDAwYWIwOH0sCisJezB4MDAwMGFhNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMGMsIDB4MDAwMGFiMGMsIDB4MDAwMGFiMGN9LAorCXsweDAwMDBhYTcwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBhYjEwLCAweDAwMDBhYjEwLCAweDAwMDBhYjEwfSwKKwl7MHgwMDAwYWE3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIxNCwgMHgwMDAwYWIxNCwgMHgwMDAwYWIxNH0sCisJezB4MDAwMGFhNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMTgsIDB4MDAwMGFiMTgsIDB4MDAwMGFiMTh9LAorCXsweDAwMDBhYTdjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBhYjhjLCAweDAwMDBhYjhjLCAweDAwMDBhYjhjfSwKKwl7MHgwMDAwYWE4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI5MCwgMHgwMDAwYWI5MCwgMHgwMDAwYWI5MH0sCisJezB4MDAwMGFhODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiOTQsIDB4MDAwMGFiOTQsIDB4MDAwMGFiOTR9LAorCXsweDAwMDBhYTg4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBhYjk4LCAweDAwMDBhYjk4LCAweDAwMDBhYjk4fSwKKwl7MHgwMDAwYWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWJhNCwgMHgwMDAwYWJhNCwgMHgwMDAwYWJhNH0sCisJezB4MDAwMGFhOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiYTgsIDB4MDAwMGFiYTgsIDB4MDAwMGFiYTh9LAorCXsweDAwMDBhYTk0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBjYjA0LCAweDAwMDBjYjA0LCAweDAwMDBjYjA0fSwKKwl7MHgwMDAwYWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IwOCwgMHgwMDAwY2IwOCwgMHgwMDAwY2IwOH0sCisJezB4MDAwMGFhOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMGMsIDB4MDAwMGNiMGMsIDB4MDAwMGNiMGN9LAorCXsweDAwMDBhYWEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBjYjEwLCAweDAwMDBjYjEwLCAweDAwMDBjYjEwfSwKKwl7MHgwMDAwYWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IxNCwgMHgwMDAwY2IxNCwgMHgwMDAwY2IxNH0sCisJezB4MDAwMGFhYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMTgsIDB4MDAwMGNiMTgsIDB4MDAwMGNiMTh9LAorCXsweDAwMDBhYWFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBjYjhjLCAweDAwMDBjYjhjLCAweDAwMDBjYjhjfSwKKwl7MHgwMDAwYWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2I5MCwgMHgwMDAwY2I5MCwgMHgwMDAwY2I5MH0sCisJezB4MDAwMGFhYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNmMTgsIDB4MDAwMGNmMTgsIDB4MDAwMGNmMTh9LAorCXsweDAwMDBhYWI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBjZjI0LCAweDAwMDBjZjI0LCAweDAwMDBjZjI0fSwKKwl7MHgwMDAwYWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2YyOCwgMHgwMDAwY2YyOCwgMHgwMDAwY2YyOH0sCisJezB4MDAwMGFhYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzMTQsIDB4MDAwMGQzMTQsIDB4MDAwMGQzMTR9LAorCXsweDAwMDBhYWM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBkMzE4LCAweDAwMDBkMzE4LCAweDAwMDBkMzE4fSwKKwl7MHgwMDAwYWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM4YywgMHgwMDAwZDM4YywgMHgwMDAwZDM4Y30sCisJezB4MDAwMGFhY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzOTAsIDB4MDAwMGQzOTAsIDB4MDAwMGQzOTB9LAorCXsweDAwMDBhYWQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBkMzk0LCAweDAwMDBkMzk0LCAweDAwMDBkMzk0fSwKKwl7MHgwMDAwYWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM5OCwgMHgwMDAwZDM5OCwgMHgwMDAwZDM5OH0sCisJezB4MDAwMGFhZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzYTQsIDB4MDAwMGQzYTQsIDB4MDAwMGQzYTR9LAorCXsweDAwMDBhYWRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBkM2E4LCAweDAwMDBkM2E4LCAweDAwMDBkM2E4fSwKKwl7MHgwMDAwYWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNhYywgMHgwMDAwZDNhYywgMHgwMDAwZDNhY30sCisJezB4MDAwMGFhZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzYjAsIDB4MDAwMGQzYjAsIDB4MDAwMGQzYjB9LAorCXsweDAwMDBhYWU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmMzgwLCAweDAwMDBmMzgwLCAweDAwMDBmMzgwfSwKKwl7MHgwMDAwYWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjM4NCwgMHgwMDAwZjM4NCwgMHgwMDAwZjM4NH0sCisJezB4MDAwMGFhZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGYzODgsIDB4MDAwMGYzODgsIDB4MDAwMGYzODh9LAorCXsweDAwMDBhYWY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmNzEwLCAweDAwMDBmNzEwLCAweDAwMDBmNzEwfSwKKwl7MHgwMDAwYWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjcxNCwgMHgwMDAwZjcxNCwgMHgwMDAwZjcxNH0sCisJezB4MDAwMGFhZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGY3MTgsIDB4MDAwMGY3MTgsIDB4MDAwMGY3MTh9LAorCXsweDAwMDBhYjAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmYjEwLCAweDAwMDBmYjEwLCAweDAwMDBmYjEwfSwKKwl7MHgwMDAwYWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmIxNCwgMHgwMDAwZmIxNCwgMHgwMDAwZmIxNH0sCisJezB4MDAwMGFiMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiMTgsIDB4MDAwMGZiMTgsIDB4MDAwMGZiMTh9LAorCXsweDAwMDBhYjBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmYjhjLCAweDAwMDBmYjhjLCAweDAwMDBmYjhjfSwKKwl7MHgwMDAwYWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmI5MCwgMHgwMDAwZmI5MCwgMHgwMDAwZmI5MH0sCisJezB4MDAwMGFiMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiOTQsIDB4MDAwMGZiOTQsIDB4MDAwMGZiOTR9LAorCXsweDAwMDBhYjE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZjhjLCAweDAwMDBmZjhjLCAweDAwMDBmZjhjfSwKKwl7MHgwMDAwYWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmY5MCwgMHgwMDAwZmY5MCwgMHgwMDAwZmY5MH0sCisJezB4MDAwMGFiMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmOTQsIDB4MDAwMGZmOTQsIDB4MDAwMGZmOTR9LAorCXsweDAwMDBhYjI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmEwLCAweDAwMDBmZmEwLCAweDAwMDBmZmEwfSwKKwl7MHgwMDAwYWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhNCwgMHgwMDAwZmZhNCwgMHgwMDAwZmZhNH0sCisJezB4MDAwMGFiMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTgsIDB4MDAwMGZmYTgsIDB4MDAwMGZmYTh9LAorCXsweDAwMDBhYjMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmFjLCAweDAwMDBmZmFjLCAweDAwMDBmZmFjfSwKKwl7MHgwMDAwYWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiMCwgMHgwMDAwZmZiMCwgMHgwMDAwZmZiMH0sCisJezB4MDAwMGFiMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYjQsIDB4MDAwMGZmYjQsIDB4MDAwMGZmYjR9LAorCXsweDAwMDBhYjNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmExLCAweDAwMDBmZmExLCAweDAwMDBmZmExfSwKKwl7MHgwMDAwYWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhNSwgMHgwMDAwZmZhNSwgMHgwMDAwZmZhNX0sCisJezB4MDAwMGFiNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTksIDB4MDAwMGZmYTksIDB4MDAwMGZmYTl9LAorCXsweDAwMDBhYjQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmFkLCAweDAwMDBmZmFkLCAweDAwMDBmZmFkfSwKKwl7MHgwMDAwYWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiMSwgMHgwMDAwZmZiMSwgMHgwMDAwZmZiMX0sCisJezB4MDAwMGFiNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYjUsIDB4MDAwMGZmYjUsIDB4MDAwMGZmYjV9LAorCXsweDAwMDBhYjU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmI5LCAweDAwMDBmZmI5LCAweDAwMDBmZmI5fSwKKwl7MHgwMDAwYWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNSwgMHgwMDAwZmZjNSwgMHgwMDAwZmZjNX0sCisJezB4MDAwMGFiNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYzksIDB4MDAwMGZmYzksIDB4MDAwMGZmYzl9LAorCXsweDAwMDBhYjYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmNkLCAweDAwMDBmZmNkLCAweDAwMDBmZmNkfSwKKwl7MHgwMDAwYWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMSwgMHgwMDAwZmZkMSwgMHgwMDAwZmZkMX0sCisJezB4MDAwMGFiNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDUsIDB4MDAwMGZmZDUsIDB4MDAwMGZmZDV9LAorCXsweDAwMDBhYjZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmMyLCAweDAwMDBmZmMyLCAweDAwMDBmZmMyfSwKKwl7MHgwMDAwYWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNiwgMHgwMDAwZmZjNiwgMHgwMDAwZmZjNn0sCisJezB4MDAwMGFiNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmY2EsIDB4MDAwMGZmY2EsIDB4MDAwMGZmY2F9LAorCXsweDAwMDBhYjc4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmNlLCAweDAwMDBmZmNlLCAweDAwMDBmZmNlfSwKKwl7MHgwMDAwYWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMiwgMHgwMDAwZmZkMiwgMHgwMDAwZmZkMn0sCisJezB4MDAwMGFiODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDYsIDB4MDAwMGZmZDYsIDB4MDAwMGZmZDZ9LAorCXsweDAwMDBhYjg0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmRhLCAweDAwMDBmZmRhLCAweDAwMDBmZmRhfSwKKwl7MHgwMDAwYWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNywgMHgwMDAwZmZjNywgMHgwMDAwZmZjN30sCisJezB4MDAwMGFiOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmY2IsIDB4MDAwMGZmY2IsIDB4MDAwMGZmY2J9LAorCXsweDAwMDBhYjkwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmNmLCAweDAwMDBmZmNmLCAweDAwMDBmZmNmfSwKKwl7MHgwMDAwYWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMywgMHgwMDAwZmZkMywgMHgwMDAwZmZkM30sCisJezB4MDAwMGFiOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDcsIDB4MDAwMGZmZDcsIDB4MDAwMGZmZDd9LAorCXsweDAwMDBhYjljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmRiLCAweDAwMDBmZmRiLCAweDAwMDBmZmRifSwKKwl7MHgwMDAwYWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYn0sCisJezB4MDAwMGFiYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGJ9LAorCXsweDAwMDBhYmE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmRiLCAweDAwMDBmZmRiLCAweDAwMDBmZmRifSwKKwl7MHgwMDAwYWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYn0sCisJezB4MDAwMGFiYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGJ9LAorCXsweDAwMDBhYmI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmRiLCAweDAwMDBmZmRiLCAweDAwMDBmZmRifSwKKwl7MHgwMDAwYWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYn0sCisJezB4MDAwMGFiYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGJ9LAorCXsweDAwMDBhYmMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmRiLCAweDAwMDBmZmRiLCAweDAwMDBmZmRifSwKKwl7MHgwMDAwYWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYn0sCisJezB4MDAwMGFiYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGJ9LAorCXsweDAwMDBhYmNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmRiLCAweDAwMDBmZmRiLCAweDAwMDBmZmRifSwKKwl7MHgwMDAwYWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYn0sCisJezB4MDAwMGFiZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGJ9LAorCXsweDAwMDBhYmQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmRiLCAweDAwMDBmZmRiLCAweDAwMDBmZmRifSwKKwl7MHgwMDAwYWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYn0sCisJezB4MDAwMGFiZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGJ9LAorCXsweDAwMDBhYmU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmRiLCAweDAwMDBmZmRiLCAweDAwMDBmZmRifSwKKwl7MHgwMDAwYWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYn0sCisJezB4MDAwMGFiZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGJ9LAorCXsweDAwMDBhYmYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmRiLCAweDAwMDBmZmRiLCAweDAwMDBmZmRifSwKKwl7MHgwMDAwYWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYn0sCisJezB4MDAwMGFiZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGJ9LAorCXsweDAwMDBhYmZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmZmRiLCAweDAwMDBmZmRiLCAweDAwMDBmZmRifSwKKwl7MHgwMDAwOTg0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMTA2NywgMHgwMDAwMTA2NywgMHgwMDAwMTA2N30sCisJezB4MDAwMGE4NDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDEwNjcsIDB4MDAwMDEwNjcsIDB4MDAwMDEwNjd9LAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBhcjkyODdQY2llUGh5X2Nsa3JlcV9hbHdheXNfb25fTDFfOTI4N18xXzFbXVsyXSA9IHsKLSAgICB7MHgwMDAwNDA0MCwgIDB4OTI0OGZkMDAgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4MjQ5MjQ5MjQgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4YTgwMDAwMTkgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4MTMxNjA4MjAgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4ZTU5ODA1NjAgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4YzAxZGNmZmQgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4MWFhYWJlNDEgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4YmUxMDU1NTQgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4MDAwNDMwMDcgfSwKLSAgICB7MHgwMDAwNDA0NCwgIDB4MDAwMDAwMDAgfSwKKwkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCisJezB4MDAwMDQwNDAsIDB4OTI0OGZkMDB9LAorCXsweDAwMDA0MDQwLCAweDI0OTI0OTI0fSwKKwl7MHgwMDAwNDA0MCwgMHhhODAwMDAxOX0sCisJezB4MDAwMDQwNDAsIDB4MTMxNjA4MjB9LAorCXsweDAwMDA0MDQwLCAweGU1OTgwNTYwfSwKKwl7MHgwMDAwNDA0MCwgMHhjMDFkY2ZmZH0sCisJezB4MDAwMDQwNDAsIDB4MWFhYWJlNDF9LAorCXsweDAwMDA0MDQwLCAweGJlMTA1NTU0fSwKKwl7MHgwMDAwNDA0MCwgMHgwMDA0MzAwN30sCisJezB4MDAwMDQwNDQsIDB4MDAwMDAwMDB9LAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBhcjkyODdQY2llUGh5X2Nsa3JlcV9vZmZfTDFfOTI4N18xXzFbXVsyXSA9IHsKLSAgICB7MHgwMDAwNDA0MCwgIDB4OTI0OGZkMDAgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4MjQ5MjQ5MjQgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4YTgwMDAwMTkgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4MTMxNjA4MjAgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4ZTU5ODA1NjAgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4YzAxZGNmZmMgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4MWFhYWJlNDEgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4YmUxMDU1NTQgfSwKLSAgICB7MHgwMDAwNDA0MCwgIDB4MDAwNDMwMDcgfSwKLSAgICB7MHgwMDAwNDA0NCwgIDB4MDAwMDAwMDAgfSwKKwkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCisJezB4MDAwMDQwNDAsIDB4OTI0OGZkMDB9LAorCXsweDAwMDA0MDQwLCAweDI0OTI0OTI0fSwKKwl7MHgwMDAwNDA0MCwgMHhhODAwMDAxOX0sCisJezB4MDAwMDQwNDAsIDB4MTMxNjA4MjB9LAorCXsweDAwMDA0MDQwLCAweGU1OTgwNTYwfSwKKwl7MHgwMDAwNDA0MCwgMHhjMDFkY2ZmY30sCisJezB4MDAwMDQwNDAsIDB4MWFhYWJlNDF9LAorCXsweDAwMDA0MDQwLCAweGJlMTA1NTU0fSwKKwl7MHgwMDAwNDA0MCwgMHgwMDA0MzAwN30sCisJezB4MDAwMDQwNDQsIDB4MDAwMDAwMDB9LAogfTsKIAotCi0vKiBBUjkyNzEgaW5pdGlhbGl6YXRpb24gdmFsdWVzIGF1dG9tYXRpY2FseSBjcmVhdGVkOiAwNi8wNC8wOSAqLwogc3RhdGljIGNvbnN0IHUzMiBhcjkyNzFNb2Rlc185MjcxW11bNl0gPSB7Ci0gICAgeyAweDAwMDAxMDMwLCAweDAwMDAwMjMwLCAweDAwMDAwNDYwLCAweDAwMDAwMmMwLCAweDAwMDAwMTYwLCAweDAwMDAwMWUwIH0sCi0gICAgeyAweDAwMDAxMDcwLCAweDAwMDAwMTY4LCAweDAwMDAwMmQwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwIH0sCi0gICAgeyAweDAwMDAxMGIwLCAweDAwMDAwZTYwLCAweDAwMDAxY2MwLCAweDAwMDA3YzcwLCAweDAwMDAzZTM4LCAweDAwMDAxMTgwIH0sCi0gICAgeyAweDAwMDAxMGYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDA4MDE0LCAweDAzZTgwM2U4LCAweDA3ZDAwN2QwLCAweDEwODAxNjAwLCAweDA4NDAwYjAwLCAweDA2ZTAwNmUwIH0sCi0gICAgeyAweDAwMDA4MDFjLCAweDEyOGQ4MDI3LCAweDEyOGQ4MDRmLCAweDEyZTAwMDU3LCAweDEyZTAwMDJiLCAweDA5ODgwMDRmIH0sCi0gICAgeyAweDAwMDA4MzE4LCAweDAwMDAzZTgwLCAweDAwMDA3ZDAwLCAweDAwMDA2ODgwLCAweDAwMDAzNDQwLCAweDAwMDA2ODgwIH0sCi0gICAgeyAweDAwMDA5ODA0LCAweDAwMDAwMzAwLCAweDAwMDAwM2M0LCAweDAwMDAwM2M0LCAweDAwMDAwMzAwLCAweDAwMDAwMzAzIH0sCi0gICAgeyAweDAwMDA5ODIwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwIH0sCi0gICAgeyAweDAwMDA5ODI0LCAweDAxMDAwZTBlLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlIH0sCi0gICAgeyAweDAwMDA5ODI4LCAweDNhMDIwMDAxLCAweDNhMDIwMDAxLCAweDNhMDIwMDAxLCAweDNhMDIwMDAxLCAweDNhMDIwMDAxIH0sCi0gICAgeyAweDAwMDA5ODM0LCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0sCi0gICAgeyAweDAwMDA5ODM4LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3IH0sCi0gICAgeyAweDAwMDA5ODQwLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlIH0sCi0gICAgeyAweDAwMDA5ODQ0LCAweDAzNzIxNjFlLCAweDAzNzIxNjFlLCAweDAzNzIxNjIwLCAweDAzNzIxNjIwLCAweDAzNzIxNmEwIH0sCi0gICAgeyAweDAwMDA5ODQ4LCAweDAwMDAxMDY2LCAweDAwMDAxMDY2LCAweDAwMDAxMDUzLCAweDAwMDAxMDUzLCAweDAwMDAxMDU5IH0sCi0gICAgeyAweDAwMDBhODQ4LCAweDAwMDAxMDY2LCAweDAwMDAxMDY2LCAweDAwMDAxMDUzLCAweDAwMDAxMDUzLCAweDAwMDAxMDU5IH0sCi0gICAgeyAweDAwMDA5ODUwLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyIH0sCi0gICAgeyAweDAwMDA5ODU4LCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlIH0sCi0gICAgeyAweDAwMDA5ODVjLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzc2MDVlLCAweDMxMzc2MDVlLCAweDMxMzk2MDVlIH0sCi0gICAgeyAweDAwMDA5ODYwLCAweDAwMDU4ZDE4LCAweDAwMDU4ZDE4LCAweDAwMDU4ZDE4LCAweDAwMDU4ZDE4LCAweDAwMDU4ZDE4IH0sCi0gICAgeyAweDAwMDA5ODY0LCAweDAwMDBmZTAwLCAweDAwMDBmZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwIH0sCi0gICAgeyAweDAwMDA5ODY4LCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwIH0sCi0gICAgeyAweDAwMDA5ODZjLCAweDA2OTAzMDgxLCAweDA2OTAzMDgxLCAweDA2OTAzODgxLCAweDA2OTAzODgxLCAweDA2OTAzODgxIH0sCi0gICAgeyAweDAwMDA5OTEwLCAweDMwMDAyMzEwLCAweDMwMDAyMzEwLCAweDMwMDAyMzEwLCAweDMwMDAyMzEwLCAweDMwMDAyMzEwIH0sCi0gICAgeyAweDAwMDA5OTE0LCAweDAwMDAwN2QwLCAweDAwMDAwZmEwLCAweDAwMDAxMTMwLCAweDAwMDAwODk4LCAweDAwMDAwN2QwIH0sCi0gICAgeyAweDAwMDA5OTE4LCAweDAwMDAwMDBhLCAweDAwMDAwMDE0LCAweDAwMDAwMDE2LCAweDAwMDAwMDBiLCAweDAwMDAwMDE2IH0sCi0gICAgeyAweDAwMDA5OTI0LCAweGQwMGE4MDA3LCAweGQwMGE4MDA3LCAweGQwMGE4MDBkLCAweGQwMGE4MDBkLCAweGQwMGE4MDBkIH0sCi0gICAgeyAweDAwMDA5OTQ0LCAweGZmYmMxMDEwLCAweGZmYmMxMDEwLCAweGZmYmMxMDIwLCAweGZmYmMxMDIwLCAweGZmYmMxMDEwIH0sCi0gICAgeyAweDAwMDA5OTYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWI4LCAweDAwMDA0MjFjLCAweDAwMDA0MjFjLCAweDAwMDA0MjFjLCAweDAwMDA0MjFjLCAweDAwMDA0MjFjIH0sCi0gICAgeyAweDAwMDA5OWJjLCAweDAwMDAwNjAwLCAweDAwMDAwNjAwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwIH0sCi0gICAgeyAweDAwMDA5OWMwLCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0IH0sCi0gICAgeyAweDAwMDA5OWM0LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3IH0sCi0gICAgeyAweDAwMDA5OWM4LCAweDZhZjY1MzJmLCAweDZhZjY1MzJmLCAweDZhZjY1MzJmLCAweDZhZjY1MzJmLCAweDZhZjY1MzJmIH0sCi0gICAgeyAweDAwMDA5OWNjLCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4IH0sCi0gICAgeyAweDAwMDA5OWQwLCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0IH0sCi0gICAgeyAweDAwMDA5OWQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MDg0LCAweDAwMDU4MDg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MDg4LCAweDAwMDU4MDg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MDhjLCAweDAwMDU4MDhjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTAwLCAweDAwMDU4MTAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTA0LCAweDAwMDU4MTA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTA4LCAweDAwMDU4MTA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTBjLCAweDAwMDU4MTBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTEwLCAweDAwMDU4MTEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTE0LCAweDAwMDU4MTE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTgwLCAweDAwMDU4MTgwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTg0LCAweDAwMDU4MTg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTg4LCAweDAwMDU4MTg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MThjLCAweDAwMDU4MThjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTkwLCAweDAwMDU4MTkwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTk0LCAweDAwMDU4MTk0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MWEwLCAweDAwMDU4MWEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MjBjLCAweDAwMDU4MjBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MWE4LCAweDAwMDU4MWE4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4Mjg0LCAweDAwMDU4Mjg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4Mjg4LCAweDAwMDU4Mjg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MjI0LCAweDAwMDU4MjI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MjkwLCAweDAwMDU4MjkwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzAwLCAweDAwMDU4MzAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTVjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzA0LCAweDAwMDU4MzA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzA4LCAweDAwMDU4MzA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzBjLCAweDAwMDU4MzBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTY4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzgwLCAweDAwMDU4MzgwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4Mzg0LCAweDAwMDU4Mzg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTcwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzAwLCAweDAwMDY4NzAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTc0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzA0LCAweDAwMDY4NzA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTc4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzA4LCAweDAwMDY4NzA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTdjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzBjLCAweDAwMDY4NzBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTgwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzgwLCAweDAwMDY4NzgwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTg0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4Nzg0LCAweDAwMDY4Nzg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTg4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjAwLCAweDAwMDc4YjAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YThjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjA0LCAweDAwMDc4YjA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTkwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjA4LCAweDAwMDc4YjA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTk0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjBjLCAweDAwMDc4YjBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTk4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjgwLCAweDAwMDc4YjgwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YTljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4Yjg0LCAweDAwMDc4Yjg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4Yjg4LCAweDAwMDc4Yjg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjhjLCAweDAwMDc4YjhjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjkwLCAweDAwMDc4YjkwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjgwLCAweDAwMGNhZjgwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjg0LCAweDAwMGNhZjg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjg4LCAweDAwMGNhZjg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjhjLCAweDAwMGNhZjhjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjkwLCAweDAwMGNhZjkwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzBjLCAweDAwMGRiMzBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzEwLCAweDAwMGRiMzEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzg0LCAweDAwMGRiMzg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzg4LCAweDAwMGRiMzg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzI0LCAweDAwMGRiMzI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzA0LCAweDAwMGViNzA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNmE0LCAweDAwMGViNmE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNmE4LCAweDAwMGViNmE4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzEwLCAweDAwMGViNzEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzE0LCAweDAwMGViNzE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzIwLCAweDAwMGViNzIwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWVjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzI0LCAweDAwMGViNzI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzI4LCAweDAwMGViNzI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzJjLCAweDAwMGViNzJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWY4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2EwLCAweDAwMGViN2EwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YWZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2E0LCAweDAwMGViN2E0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2E4LCAweDAwMGViN2E4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2IwLCAweDAwMGViN2IwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2I0LCAweDAwMGViN2I0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2I4LCAweDAwMGViN2I4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2E1LCAweDAwMGViN2E1LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2E5LCAweDAwMGViN2E5LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2FkLCAweDAwMGViN2FkLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2IxLCAweDAwMGViN2IxLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2I1LCAweDAwMGViN2I1LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2I5LCAweDAwMGViN2I5LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2M1LCAweDAwMGViN2M1LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2M5LCAweDAwMGViN2M5LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2QxLCAweDAwMGViN2QxLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2Q1LCAweDAwMGViN2Q1LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2Q5LCAweDAwMGViN2Q5LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2M2LCAweDAwMGViN2M2LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2NhLCAweDAwMGViN2NhLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2NlLCAweDAwMGViN2NlLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2QyLCAweDAwMGViN2QyLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2Q2LCAweDAwMGViN2Q2LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2MzLCAweDAwMGViN2MzLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2M3LCAweDAwMGViN2M3LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2NiLCAweDAwMGViN2NiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjVjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2NmLCAweDAwMGViN2NmLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2Q3LCAweDAwMGViN2Q3LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjY4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjcwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5Yjc0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5Yjc4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjdjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjgwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5Yjg0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5Yjg4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjhjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjkwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5Yjk0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5Yjk4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YjljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmVjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmY4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5YmZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MDg0LCAweDAwMDU4MDg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MDg4LCAweDAwMDU4MDg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MDhjLCAweDAwMDU4MDhjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTAwLCAweDAwMDU4MTAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTA0LCAweDAwMDU4MTA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTA4LCAweDAwMDU4MTA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTBjLCAweDAwMDU4MTBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTEwLCAweDAwMDU4MTEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTE0LCAweDAwMDU4MTE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTgwLCAweDAwMDU4MTgwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTg0LCAweDAwMDU4MTg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTg4LCAweDAwMDU4MTg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MThjLCAweDAwMDU4MThjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTkwLCAweDAwMDU4MTkwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTk0LCAweDAwMDU4MTk0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MWEwLCAweDAwMDU4MWEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MjBjLCAweDAwMDU4MjBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MWE4LCAweDAwMDU4MWE4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4Mjg0LCAweDAwMDU4Mjg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4Mjg4LCAweDAwMDU4Mjg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MjI0LCAweDAwMDU4MjI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MjkwLCAweDAwMDU4MjkwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzAwLCAweDAwMDU4MzAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTVjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzA0LCAweDAwMDU4MzA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzA4LCAweDAwMDU4MzA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzBjLCAweDAwMDU4MzBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTY4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzgwLCAweDAwMDU4MzgwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4Mzg0LCAweDAwMDU4Mzg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTcwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzAwLCAweDAwMDY4NzAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTc0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzA0LCAweDAwMDY4NzA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTc4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzA4LCAweDAwMDY4NzA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTdjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzBjLCAweDAwMDY4NzBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTgwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzgwLCAweDAwMDY4NzgwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTg0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4Nzg0LCAweDAwMDY4Nzg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTg4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjAwLCAweDAwMDc4YjAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYThjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjA0LCAweDAwMDc4YjA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTkwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjA4LCAweDAwMDc4YjA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTk0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjBjLCAweDAwMDc4YjBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTk4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjgwLCAweDAwMDc4YjgwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYTljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4Yjg0LCAweDAwMDc4Yjg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4Yjg4LCAweDAwMDc4Yjg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjhjLCAweDAwMDc4YjhjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjkwLCAweDAwMDc4YjkwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjgwLCAweDAwMGNhZjgwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjg0LCAweDAwMGNhZjg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjg4LCAweDAwMGNhZjg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjhjLCAweDAwMGNhZjhjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjkwLCAweDAwMGNhZjkwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzBjLCAweDAwMGRiMzBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzEwLCAweDAwMGRiMzEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzg0LCAweDAwMGRiMzg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzg4LCAweDAwMGRiMzg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzI0LCAweDAwMGRiMzI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzA0LCAweDAwMGViNzA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNmE0LCAweDAwMGViNmE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNmE4LCAweDAwMGViNmE4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzEwLCAweDAwMGViNzEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzE0LCAweDAwMGViNzE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzIwLCAweDAwMGViNzIwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWVjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzI0LCAweDAwMGViNzI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzI4LCAweDAwMGViNzI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzJjLCAweDAwMGViNzJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWY4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2EwLCAweDAwMGViN2EwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYWZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2E0LCAweDAwMGViN2E0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2E4LCAweDAwMGViN2E4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2IwLCAweDAwMGViN2IwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2I0LCAweDAwMGViN2I0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2I4LCAweDAwMGViN2I4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2E1LCAweDAwMGViN2E1LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2E5LCAweDAwMGViN2E5LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2FkLCAweDAwMGViN2FkLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2IxLCAweDAwMGViN2IxLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2I1LCAweDAwMGViN2I1LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2I5LCAweDAwMGViN2I5LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2M1LCAweDAwMGViN2M1LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2M5LCAweDAwMGViN2M5LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2QxLCAweDAwMGViN2QxLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2Q1LCAweDAwMGViN2Q1LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2Q5LCAweDAwMGViN2Q5LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2M2LCAweDAwMGViN2M2LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2NhLCAweDAwMGViN2NhLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2NlLCAweDAwMGViN2NlLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2QyLCAweDAwMGViN2QyLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2Q2LCAweDAwMGViN2Q2LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2MzLCAweDAwMGViN2MzLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2M3LCAweDAwMGViN2M3LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2NiLCAweDAwMGViN2NiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjVjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2NmLCAweDAwMGViN2NmLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2Q3LCAweDAwMGViN2Q3LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjY4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjcwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjc0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjc4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjdjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjgwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjg0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjg4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjhjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjkwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjk0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjk4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYjljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmVjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmY4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhYmZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBhMjBjLCAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCAweDAwMDFmMDAwLCAweDAwMDFmMDAwLCAweDAwMDFmMDAwIH0sCi0gICAgeyAweDAwMDBiMjBjLCAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCAweDAwMDFmMDAwLCAweDAwMDFmMDAwLCAweDAwMDFmMDAwIH0sCi0gICAgeyAweDAwMDBhMjFjLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0sCi0gICAgeyAweDAwMDBhMjMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMjEwLCAweDAwMDAwMTA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjUwLCAweDAwMDRmMDAwLCAweDAwMDRmMDAwLCAweDAwMDRhMDAwLCAweDAwMDRhMDAwLCAweDAwMDRhMDAwIH0sCi0gICAgeyAweDAwMDBhMzU4LCAweDc5OTlhYTAyLCAweDc5OTlhYTAyLCAweDc5OTlhYTBlLCAweDc5OTlhYTBlLCAweDc5OTlhYTBlIH0sCisJezB4MDAwMDEwMzAsIDB4MDAwMDAyMzAsIDB4MDAwMDA0NjAsIDB4MDAwMDAyYzAsIDB4MDAwMDAxNjAsIDB4MDAwMDAxZTB9LAorCXsweDAwMDAxMDcwLCAweDAwMDAwMTY4LCAweDAwMDAwMmQwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwfSwKKwl7MHgwMDAwMTBiMCwgMHgwMDAwMGU2MCwgMHgwMDAwMWNjMCwgMHgwMDAwN2M3MCwgMHgwMDAwM2UzOCwgMHgwMDAwMTE4MH0sCisJezB4MDAwMDEwZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDh9LAorCXsweDAwMDA4MDE0LCAweDAzZTgwM2U4LCAweDA3ZDAwN2QwLCAweDEwODAxNjAwLCAweDA4NDAwYjAwLCAweDA2ZTAwNmUwfSwKKwl7MHgwMDAwODAxYywgMHgxMjhkODAyNywgMHgxMjhkODA0ZiwgMHgxMmUwMDA1NywgMHgxMmUwMDAyYiwgMHgwOTg4MDA0Zn0sCisJezB4MDAwMDgzMTgsIDB4MDAwMDNlODAsIDB4MDAwMDdkMDAsIDB4MDAwMDY4ODAsIDB4MDAwMDM0NDAsIDB4MDAwMDY4ODB9LAorCXsweDAwMDA5ODA0LCAweDAwMDAwMzAwLCAweDAwMDAwM2M0LCAweDAwMDAwM2M0LCAweDAwMDAwMzAwLCAweDAwMDAwMzAzfSwKKwl7MHgwMDAwOTgyMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMH0sCisJezB4MDAwMDk4MjQsIDB4MDEwMDBlMGUsIDB4MDEwMDBlMGUsIDB4MDEwMDBlMGUsIDB4MDEwMDBlMGUsIDB4MDEwMDBlMGV9LAorCXsweDAwMDA5ODI4LCAweDNhMDIwMDAxLCAweDNhMDIwMDAxLCAweDNhMDIwMDAxLCAweDNhMDIwMDAxLCAweDNhMDIwMDAxfSwKKwl7MHgwMDAwOTgzNCwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZX0sCisJezB4MDAwMDk4MzgsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDd9LAorCXsweDAwMDA5ODQwLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlfSwKKwl7MHgwMDAwOTg0NCwgMHgwMzcyMTYxZSwgMHgwMzcyMTYxZSwgMHgwMzcyMTYyMCwgMHgwMzcyMTYyMCwgMHgwMzcyMTZhMH0sCisJezB4MDAwMDk4NDgsIDB4MDAwMDEwNjYsIDB4MDAwMDEwNjYsIDB4MDAwMDEwNTMsIDB4MDAwMDEwNTMsIDB4MDAwMDEwNTl9LAorCXsweDAwMDBhODQ4LCAweDAwMDAxMDY2LCAweDAwMDAxMDY2LCAweDAwMDAxMDUzLCAweDAwMDAxMDUzLCAweDAwMDAxMDU5fSwKKwl7MHgwMDAwOTg1MCwgMHg2ZDQwMDBlMiwgMHg2ZDQwMDBlMiwgMHg2ZDQwMDBlMiwgMHg2ZDQwMDBlMiwgMHg2ZDQwMDBlMn0sCisJezB4MDAwMDk4NTgsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmV9LAorCXsweDAwMDA5ODVjLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzc2MDVlLCAweDMxMzc2MDVlLCAweDMxMzk2MDVlfSwKKwl7MHgwMDAwOTg2MCwgMHgwMDA1OGQxOCwgMHgwMDA1OGQxOCwgMHgwMDA1OGQxOCwgMHgwMDA1OGQxOCwgMHgwMDA1OGQxOH0sCisJezB4MDAwMDk4NjQsIDB4MDAwMGZlMDAsIDB4MDAwMGZlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDB9LAorCXsweDAwMDA5ODY4LCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwfSwKKwl7MHgwMDAwOTg2YywgMHgwNjkwMzA4MSwgMHgwNjkwMzA4MSwgMHgwNjkwMzg4MSwgMHgwNjkwMzg4MSwgMHgwNjkwMzg4MX0sCisJezB4MDAwMDk5MTAsIDB4MzAwMDIzMTAsIDB4MzAwMDIzMTAsIDB4MzAwMDIzMTAsIDB4MzAwMDIzMTAsIDB4MzAwMDIzMTB9LAorCXsweDAwMDA5OTE0LCAweDAwMDAwN2QwLCAweDAwMDAwZmEwLCAweDAwMDAxMTMwLCAweDAwMDAwODk4LCAweDAwMDAwN2QwfSwKKwl7MHgwMDAwOTkxOCwgMHgwMDAwMDAwYSwgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNiwgMHgwMDAwMDAwYiwgMHgwMDAwMDAxNn0sCisJezB4MDAwMDk5MjQsIDB4ZDAwYTgwMDcsIDB4ZDAwYTgwMDcsIDB4ZDAwYTgwMGQsIDB4ZDAwYTgwMGQsIDB4ZDAwYTgwMGR9LAorCXsweDAwMDA5OTQ0LCAweGZmYmMxMDEwLCAweGZmYmMxMDEwLCAweGZmYmMxMDIwLCAweGZmYmMxMDIwLCAweGZmYmMxMDEwfSwKKwl7MHgwMDAwOTk2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5NjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OWI4LCAweDAwMDA0MjFjLCAweDAwMDA0MjFjLCAweDAwMDA0MjFjLCAweDAwMDA0MjFjLCAweDAwMDA0MjFjfSwKKwl7MHgwMDAwOTliYywgMHgwMDAwMDYwMCwgMHgwMDAwMDYwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMH0sCisJezB4MDAwMDk5YzAsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDR9LAorCXsweDAwMDA5OWM0LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3fSwKKwl7MHgwMDAwOTljOCwgMHg2YWY2NTMyZiwgMHg2YWY2NTMyZiwgMHg2YWY2NTMyZiwgMHg2YWY2NTMyZiwgMHg2YWY2NTMyZn0sCisJezB4MDAwMDk5Y2MsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzgsIDB4MDhmMTg2Yzh9LAorCXsweDAwMDA5OWQwLCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0fSwKKwl7MHgwMDAwOTlkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5ZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MDg0LCAweDAwMDU4MDg0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4OCwgMHgwMDA1ODA4OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgwOGMsIDB4MDAwNTgwOGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTAwLCAweDAwMDU4MTAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWExMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwNCwgMHgwMDA1ODEwNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMDgsIDB4MDAwNTgxMDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTBjLCAweDAwMDU4MTBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODExMCwgMHgwMDA1ODExMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMTQsIDB4MDAwNTgxMTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTgwLCAweDAwMDU4MTgwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWEyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4NCwgMHgwMDA1ODE4NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxODgsIDB4MDAwNTgxODgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MThjLCAweDAwMDU4MThjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWEzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE5MCwgMHgwMDA1ODE5MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxOTQsIDB4MDAwNTgxOTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MWEwLCAweDAwMDU4MWEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWE0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODIwYywgMHgwMDA1ODIwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxYTgsIDB4MDAwNTgxYTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4Mjg0LCAweDAwMDU4Mjg0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWE0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI4OCwgMHgwMDA1ODI4OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyMjQsIDB4MDAwNTgyMjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MjkwLCAweDAwMDU4MjkwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWE1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwMCwgMHgwMDA1ODMwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzMDQsIDB4MDAwNTgzMDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzA4LCAweDAwMDU4MzA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWE2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwYywgMHgwMDA1ODMwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzODAsIDB4MDAwNTgzODAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4Mzg0LCAweDAwMDU4Mzg0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWE3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwMCwgMHgwMDA2ODcwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3MDQsIDB4MDAwNjg3MDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTc4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzA4LCAweDAwMDY4NzA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWE3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwYywgMHgwMDA2ODcwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3ODAsIDB4MDAwNjg3ODAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTg0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4Nzg0LCAweDAwMDY4Nzg0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWE4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwMCwgMHgwMDA3OGIwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiMDQsIDB4MDAwNzhiMDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTkwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjA4LCAweDAwMDc4YjA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWE5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwYywgMHgwMDA3OGIwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiODAsIDB4MDAwNzhiODAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YTljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4Yjg0LCAweDAwMDc4Yjg0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWFhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4OCwgMHgwMDA3OGI4OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiOGMsIDB4MDAwNzhiOGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YWE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjkwLCAweDAwMDc4YjkwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWFhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4MCwgMHgwMDBjYWY4MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwY2FmODQsIDB4MDAwY2FmODQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YWI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjg4LCAweDAwMGNhZjg4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWFiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4YywgMHgwMDBjYWY4YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwY2FmOTAsIDB4MDAwY2FmOTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YWMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzBjLCAweDAwMGRiMzBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWFjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMxMCwgMHgwMDBkYjMxMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzODQsIDB4MDAwZGIzODQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YWNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzg4LCAweDAwMGRiMzg4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWFkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMyNCwgMHgwMDBkYjMyNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MDQsIDB4MDAwZWI3MDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YWQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNmE0LCAweDAwMGViNmE0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWFkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjZhOCwgMHgwMDBlYjZhOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MTAsIDB4MDAwZWI3MTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YWU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzE0LCAweDAwMGViNzE0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWFlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyMCwgMHgwMDBlYjcyMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MjQsIDB4MDAwZWI3MjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YWYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzI4LCAweDAwMGViNzI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWFmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyYywgMHgwMDBlYjcyYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlhZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTAsIDB4MDAwZWI3YTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YWZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2E0LCAweDAwMGViN2E0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhOCwgMHgwMDBlYjdhOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjAsIDB4MDAwZWI3YjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YjA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2I0LCAweDAwMGViN2I0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiOCwgMHgwMDBlYjdiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTUsIDB4MDAwZWI3YTUsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YjE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2E5LCAweDAwMGViN2E5LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWIxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhZCwgMHgwMDBlYjdhZCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjEsIDB4MDAwZWI3YjEsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YjIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2I1LCAweDAwMGViN2I1LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWIyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiOSwgMHgwMDBlYjdiOSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzUsIDB4MDAwZWI3YzUsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YjJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2M5LCAweDAwMGViN2M5LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkMSwgMHgwMDBlYjdkMSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDUsIDB4MDAwZWI3ZDUsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YjM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2Q5LCAweDAwMGViN2Q5LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWIzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNiwgMHgwMDBlYjdjNiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3Y2EsIDB4MDAwZWI3Y2EsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YjQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2NlLCAweDAwMGViN2NlLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWI0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkMiwgMHgwMDBlYjdkMiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDYsIDB4MDAwZWI3ZDYsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YjUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2MzLCAweDAwMGViN2MzLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNywgMHgwMDBlYjdjNywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3Y2IsIDB4MDAwZWI3Y2IsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YjVjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2NmLCAweDAwMGViN2NmLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWI2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNywgMHgwMDBlYjdkNywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YjY4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWI2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5Yjc0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWI3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YjgwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YjhjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWI5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5Yjk4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWI5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YmE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWJhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YmIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWJiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YmJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWJjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YmM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWJjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YmQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWJkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YmUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWJlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YmVjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWJmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDliZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YmY4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWJmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgwODQsIDB4MDAwNTgwODQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYTA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MDg4LCAweDAwMDU4MDg4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4YywgMHgwMDA1ODA4YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMDAsIDB4MDAwNTgxMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYTEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTA0LCAweDAwMDU4MTA0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwOCwgMHgwMDA1ODEwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMGMsIDB4MDAwNTgxMGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYTFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTEwLCAweDAwMDU4MTEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODExNCwgMHgwMDA1ODExNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxODAsIDB4MDAwNTgxODAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYTI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTg0LCAweDAwMDU4MTg0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4OCwgMHgwMDA1ODE4OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxOGMsIDB4MDAwNTgxOGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYTM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MTkwLCAweDAwMDU4MTkwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE5NCwgMHgwMDA1ODE5NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxYTAsIDB4MDAwNTgxYTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYTQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MjBjLCAweDAwMDU4MjBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODFhOCwgMHgwMDA1ODFhOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyODQsIDB4MDAwNTgyODQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYTRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4Mjg4LCAweDAwMDU4Mjg4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODIyNCwgMHgwMDA1ODIyNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyOTAsIDB4MDAwNTgyOTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYTU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzAwLCAweDAwMDU4MzAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwNCwgMHgwMDA1ODMwNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzMDgsIDB4MDAwNTgzMDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYTY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU4MzBjLCAweDAwMDU4MzBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODM4MCwgMHgwMDA1ODM4MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzODQsIDB4MDAwNTgzODQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYTcwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzAwLCAweDAwMDY4NzAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWE3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwNCwgMHgwMDA2ODcwNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3MDgsIDB4MDAwNjg3MDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYTdjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDY4NzBjLCAweDAwMDY4NzBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWE4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4MCwgMHgwMDA2ODc4MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3ODQsIDB4MDAwNjg3ODQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYTg4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjAwLCAweDAwMDc4YjAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwNCwgMHgwMDA3OGIwNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiMDgsIDB4MDAwNzhiMDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYTk0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4YjBjLCAweDAwMDc4YjBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4MCwgMHgwMDA3OGI4MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiODQsIDB4MDAwNzhiODQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYWEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDc4Yjg4LCAweDAwMDc4Yjg4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4YywgMHgwMDA3OGI4YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiOTAsIDB4MDAwNzhiOTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYWFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjgwLCAweDAwMGNhZjgwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4NCwgMHgwMDBjYWY4NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwY2FmODgsIDB4MDAwY2FmODgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYWI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGNhZjhjLCAweDAwMGNhZjhjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY5MCwgMHgwMDBjYWY5MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzMGMsIDB4MDAwZGIzMGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYWM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzEwLCAweDAwMGRiMzEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjM4NCwgMHgwMDBkYjM4NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzODgsIDB4MDAwZGIzODgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYWQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGRiMzI0LCAweDAwMGRiMzI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcwNCwgMHgwMDBlYjcwNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI2YTQsIDB4MDAwZWI2YTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYWRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNmE4LCAweDAwMGViNmE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcxMCwgMHgwMDBlYjcxMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MTQsIDB4MDAwZWI3MTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYWU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzIwLCAweDAwMGViNzIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyNCwgMHgwMDBlYjcyNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MjgsIDB4MDAwZWI3MjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYWY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViNzJjLCAweDAwMGViNzJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhMCwgMHgwMDBlYjdhMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFhZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTQsIDB4MDAwZWI3YTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2E4LCAweDAwMGViN2E4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiMCwgMHgwMDBlYjdiMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjQsIDB4MDAwZWI3YjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2I4LCAweDAwMGViN2I4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhNSwgMHgwMDBlYjdhNSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTksIDB4MDAwZWI3YTksIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2FkLCAweDAwMGViN2FkLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiMSwgMHgwMDBlYjdiMSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjUsIDB4MDAwZWI3YjUsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2I5LCAweDAwMGViN2I5LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNSwgMHgwMDBlYjdjNSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzksIDB4MDAwZWI3YzksIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2QxLCAweDAwMGViN2QxLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNSwgMHgwMDBlYjdkNSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDksIDB4MDAwZWI3ZDksIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2M2LCAweDAwMGViN2M2LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjYSwgMHgwMDBlYjdjYSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3Y2UsIDB4MDAwZWI3Y2UsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2QyLCAweDAwMGViN2QyLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNiwgMHgwMDBlYjdkNiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzMsIDB4MDAwZWI3YzMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2M3LCAweDAwMGViN2M3LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjYiwgMHgwMDBlYjdjYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3Y2YsIDB4MDAwZWI3Y2YsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2Q3LCAweDAwMGViN2Q3LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjc4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjg0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjkwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYjljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYmE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYmI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYmMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYmNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYmQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYmU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYmYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGFiZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhYmZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTIwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNH0sCisJezB4MDAwMGEyMGMsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIDB4MDAwMWYwMDAsIDB4MDAwMWYwMDAsIDB4MDAwMWYwMDB9LAorCXsweDAwMDBiMjBjLCAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCAweDAwMDFmMDAwLCAweDAwMDFmMDAwLCAweDAwMDFmMDAwfSwKKwl7MHgwMDAwYTIxYywgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYX0sCisJezB4MDAwMGEyMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAyMTAsIDB4MDAwMDAxMDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMjUwLCAweDAwMDRmMDAwLCAweDAwMDRmMDAwLCAweDAwMDRhMDAwLCAweDAwMDRhMDAwLCAweDAwMDRhMDAwfSwKKwl7MHgwMDAwYTM1OCwgMHg3OTk5YWEwMiwgMHg3OTk5YWEwMiwgMHg3OTk5YWEwZSwgMHg3OTk5YWEwZSwgMHg3OTk5YWEwZX0sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyOTI3MUNvbW1vbl85MjcxW11bMl0gPSB7Ci0gICAgeyAweDAwMDAwMDBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMDIwMDQ1IH0sCi0gICAgeyAweDAwMDAwMDM0LCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwMDAwMDQwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDQ0LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDAwMDQ4LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDAwMDRjLCAweDAwMDAwMDEwIH0sCi0gICAgeyAweDAwMDAwMDUwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDU0LCAweDAwMDAwMDFmIH0sCi0gICAgeyAweDAwMDAwODAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODE4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODFjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODIwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwODI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMDQwLCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDQ0LCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDQ4LCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDRjLCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDUwLCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDU0LCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDU4LCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDVjLCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDYwLCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMDY0LCAweDAwMmZmYzBmIH0sCi0gICAgeyAweDAwMDAxMjMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMjcwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMDM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMDc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMGI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMGY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMTM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMTc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMWI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMWY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMjM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMjc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMmI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMmY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMzM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMzc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxM2I4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxM2Y4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNDM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNDc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNGI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNGY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNTM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNTc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNWI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNWY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNjM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNjc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNmI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNmY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNzM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNzc4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxN2I4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxN2Y4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMDNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMDdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMGJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMGZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMTNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMTdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMWJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMWZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMjNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMjdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMmJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMmZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMzNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxMzdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxM2JjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxM2ZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNDNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAxNDdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA0MDMwLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA0MDNjLCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA0MDI0LCAweDAwMDAwMDFmIH0sCi0gICAgeyAweDAwMDA0MDYwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA0MDY0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDE4LCAweDAwMDAwNzAwIH0sCi0gICAgeyAweDAwMDA4MDIwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDQ4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDU0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDU4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDVjLCAweDAwMGZjNzhmIH0sCi0gICAgeyAweDAwMDA4MDYwLCAweDAwMDAwMDBmIH0sCi0gICAgeyAweDAwMDA4MDY0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDcwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGIwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGMwLCAweDJhODAwMDFhIH0sCi0gICAgeyAweDAwMDA4MGM0LCAweDA1ZGMwMWUwIH0sCi0gICAgeyAweDAwMDA4MGM4LCAweDFmNDAyNzEwIH0sCi0gICAgeyAweDAwMDA4MGNjLCAweDAxZjQwMDAwIH0sCi0gICAgeyAweDAwMDA4MGQwLCAweDAwMDAxZTAwIH0sCi0gICAgeyAweDAwMDA4MGQ0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGQ4LCAweDAwNDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGUwLCAweGZmZmZmZmZmIH0sCi0gICAgeyAweDAwMDA4MGU0LCAweDAwMDBmZmZmIH0sCi0gICAgeyAweDAwMDA4MGU4LCAweDAwM2YzZjNmIH0sCi0gICAgeyAweDAwMDA4MGVjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGYwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGY0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MGZjLCAweDAwMDIwMDAwIH0sCi0gICAgeyAweDAwMDA4MTAwLCAweDAwMDIwMDAwIH0sCi0gICAgeyAweDAwMDA4MTA0LCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDA4MTA4LCAweDAwMDAwMDUyIH0sCi0gICAgeyAweDAwMDA4MTBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTEwLCAweDAwMDAwMTY4IH0sCi0gICAgeyAweDAwMDA4MTE4LCAweDAwMDEwMGFhIH0sCi0gICAgeyAweDAwMDA4MTFjLCAweDAwMDAzMjEwIH0sCi0gICAgeyAweDAwMDA4MTIwLCAweDA4ZjA0ODEwIH0sCi0gICAgeyAweDAwMDA4MTI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTM0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTQ0LCAweGZmZmZmZmZmIH0sCi0gICAgeyAweDAwMDA4MTY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MTcwLCAweDMyMTQzMzIwIH0sCi0gICAgeyAweDAwMDA4MTc0LCAweGZhYTRmYTUwIH0sCi0gICAgeyAweDAwMDA4MTc4LCAweDAwMDAwMTAwIH0sCi0gICAgeyAweDAwMDA4MTdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWQwLCAweDAwMDAzMjBhIH0sCi0gICAgeyAweDAwMDA4MWVjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWYwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWY0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWZjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjE4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjFjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjIwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjI0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjM0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjM4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjQwLCAweDAwMTAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjQ0LCAweDAwMTBmNDAwIH0sCi0gICAgeyAweDAwMDA4MjQ4LCAweDAwMDAwMTAwIH0sCi0gICAgeyAweDAwMDA4MjRjLCAweDAwMDFlODAwIH0sCi0gICAgeyAweDAwMDA4MjUwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjU0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjU4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjVjLCAweDQwMDAwMGZmIH0sCi0gICAgeyAweDAwMDA4MjYwLCAweDAwMDgwOTIyIH0sCi0gICAgeyAweDAwMDA4MjY0LCAweDg4YTAwMDEwIH0sCi0gICAgeyAweDAwMDA4MjcwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4Mjc0LCAweDQwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4Mjc4LCAweDAwM2U0MTgwIH0sCi0gICAgeyAweDAwMDA4MjdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4Mjg0LCAweDAwMDAwMDJjIH0sCi0gICAgeyAweDAwMDA4Mjg4LCAweDAwMDAwMDJjIH0sCi0gICAgeyAweDAwMDA4MjhjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4Mjk0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4Mjk4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MjljLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzAwLCAweDAwMDAwMDQwIH0sCi0gICAgeyAweDAwMDA4MzE0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzI4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzJjLCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDA4MzMwLCAweDAwMDAwMzAyIH0sCi0gICAgeyAweDAwMDA4MzM0LCAweDAwMDAwZTAwIH0sCi0gICAgeyAweDAwMDA4MzM4LCAweDAwZmYwMDAwIH0sCi0gICAgeyAweDAwMDA4MzNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MzQwLCAweDAwMDEwMzgwIH0sCi0gICAgeyAweDAwMDA4MzQ0LCAweDAwNTgxMDQzIH0sCi0gICAgeyAweDAwMDA3MDEwLCAweDAwMDAwMDMwIH0sCi0gICAgeyAweDAwMDA3MDM0LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3MDM4LCAweDAwMDAwNGMyIH0sCi0gICAgeyAweDAwMDA3ODAwLCAweDAwMTQwMDAwIH0sCi0gICAgeyAweDAwMDA3ODA0LCAweDBlNDU0OGQ4IH0sCi0gICAgeyAweDAwMDA3ODA4LCAweDU0MjE0NTE0IH0sCi0gICAgeyAweDAwMDA3ODBjLCAweDAyMDI1ODIwIH0sCi0gICAgeyAweDAwMDA3ODEwLCAweDcxYzBkMzg4IH0sCi0gICAgeyAweDAwMDA3ODE0LCAweDkyNDkzNGE4IH0sCi0gICAgeyAweDAwMDA3ODFjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA3ODI4LCAweDY2OTY0MzAwIH0sCi0gICAgeyAweDAwMDA3ODJjLCAweDhkYjZkOTYxIH0sCi0gICAgeyAweDAwMDA3ODMwLCAweDhkYjZkOTZjIH0sCi0gICAgeyAweDAwMDA3ODM0LCAweDYxNDAwMDhiIH0sCi0gICAgeyAweDAwMDA3ODNjLCAweDcyZWUwYTcyIH0sCi0gICAgeyAweDAwMDA3ODQwLCAweGJiZmZmZmZjIH0sCi0gICAgeyAweDAwMDA3ODQ0LCAweDAwMGMwZGI2IH0sCi0gICAgeyAweDAwMDA3ODQ4LCAweDZkYjYxYjZmIH0sCi0gICAgeyAweDAwMDA3ODRjLCAweDZkOWI2NmRiIH0sCi0gICAgeyAweDAwMDA3ODUwLCAweDZkOGM2ZGJhIH0sCi0gICAgeyAweDAwMDA3ODU0LCAweDAwMDQwMDAwIH0sCi0gICAgeyAweDAwMDA3ODU4LCAweGRiMDAzMDEyIH0sCi0gICAgeyAweDAwMDA3ODVjLCAweDA0OTI0OTE0IH0sCi0gICAgeyAweDAwMDA3ODYwLCAweDIxMDg0MjEwIH0sCi0gICAgeyAweDAwMDA3ODY0LCAweGY3ZDdmZmRlIH0sCi0gICAgeyAweDAwMDA3ODY4LCAweGMyMDM0MDgwIH0sCi0gICAgeyAweDAwMDA3ODcwLCAweDEwMTQyYzAwIH0sCi0gICAgeyAweDAwMDA5ODA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5ODBjLCAweGFmZTY4ZTMwIH0sCi0gICAgeyAweDAwMDA5ODEwLCAweGZkMTRlMDAwIH0sCi0gICAgeyAweDAwMDA5ODE0LCAweDljMGE5ZjZiIH0sCi0gICAgeyAweDAwMDA5ODFjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5ODJjLCAweDAwMDBhMDAwIH0sCi0gICAgeyAweDAwMDA5ODMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5ODNjLCAweDAwMjAwNDAwIH0sCi0gICAgeyAweDAwMDA5ODRjLCAweDAwNDAyMzNjIH0sCi0gICAgeyAweDAwMDA5ODU0LCAweDAwMDAwMDQ0IH0sCi0gICAgeyAweDAwMDA5OTAwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTA0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTA4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTBjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTFjLCAweDEwMDAwZmZmIH0sCi0gICAgeyAweDAwMDA5OTIwLCAweDA0OTAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTI4LCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDA5OTJjLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDA5OTM0LCAweDFlMWYyMDIyIH0sCi0gICAgeyAweDAwMDA5OTM4LCAweDBhMGIwYzBkIH0sCi0gICAgeyAweDAwMDA5OTNjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTQwLCAweDE0NzUwNjA0IH0sCi0gICAgeyAweDAwMDA5OTQ4LCAweDkyODBjMDBhIH0sCi0gICAgeyAweDAwMDA5OTRjLCAweDAwMDIwMDI4IH0sCi0gICAgeyAweDAwMDA5OTU0LCAweDVmM2NhM2RlIH0sCi0gICAgeyAweDAwMDA5OTU4LCAweDAxMDhlY2ZmIH0sCi0gICAgeyAweDAwMDA5OTY4LCAweDAwMDAwM2NlIH0sCi0gICAgeyAweDAwMDA5OTcwLCAweDE5MmJiNTE0IH0sCi0gICAgeyAweDAwMDA5OTc0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTc4LCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDA5OTdjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTgwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTg0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTg4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OThjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTkwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTk0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTk4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OTljLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWEwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWE0LCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDA5OWE4LCAweDIwMWZmZjAwIH0sCi0gICAgeyAweDAwMDA5OWFjLCAweDJkZWYwNDAwIH0sCi0gICAgeyAweDAwMDA5OWIwLCAweDAzMDUxMDAwIH0sCi0gICAgeyAweDAwMDA5OWI0LCAweDAwMDAwODIwIH0sCi0gICAgeyAweDAwMDA5OWRjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWUwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA5OWU0LCAweGFhYWFhYWFhIH0sCi0gICAgeyAweDAwMDA5OWU4LCAweDNjNDY2NDc4IH0sCi0gICAgeyAweDAwMDA5OWVjLCAweDBjYzgwY2FhIH0sCi0gICAgeyAweDAwMDA5OWYwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjA4LCAweDgwM2U2OGM4IH0sCi0gICAgeyAweDAwMDBhMjEwLCAweDQwODBhMzMzIH0sCi0gICAgeyAweDAwMDBhMjE0LCAweDAwMjA2YzEwIH0sCi0gICAgeyAweDAwMDBhMjE4LCAweDAwOWM0MDYwIH0sCi0gICAgeyAweDAwMDBhMjIwLCAweDAxODM0MDYxIH0sCi0gICAgeyAweDAwMDBhMjI0LCAweDAwMDAwNDAwIH0sCi0gICAgeyAweDAwMDBhMjI4LCAweDAwMDAwM2I1IH0sCi0gICAgeyAweDAwMDBhMjJjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjM0LCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhMjM4LCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhMjQ0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjQ4LCAweGZmZmZmZmZjIH0sCi0gICAgeyAweDAwMDBhMjRjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjU0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjU4LCAweDBjY2I1MzgwIH0sCi0gICAgeyAweDAwMDBhMjVjLCAweDE1MTUxNTAxIH0sCi0gICAgeyAweDAwMDBhMjYwLCAweGRmYTkwZjAxIH0sCi0gICAgeyAweDAwMDBhMjY4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjZjLCAweDBlYmFlOWU2IH0sCi0gICAgeyAweDAwMDBhMzg4LCAweDBjMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMzhjLCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhMzkwLCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhMzljLCAweDAwMDAwMDAxIH0sCi0gICAgeyAweDAwMDBhM2EwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2E0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2E4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2FjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2IwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2I0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2I4LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2JjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2MwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2M0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2NjLCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhM2QwLCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhM2Q0LCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhM2U0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhM2U4LCAweDE4YzQzNDMzIH0sCi0gICAgeyAweDAwMDBhM2VjLCAweDAwZjcwMDgxIH0sCi0gICAgeyAweDAwMDBhM2YwLCAweDAxMDM2YTJmIH0sCi0gICAgeyAweDAwMDBhM2Y0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBkMjcwLCAweDBkODIwODIwIH0sCi0gICAgeyAweDAwMDBkMzVjLCAweDA3ZmZmZmVmIH0sCi0gICAgeyAweDAwMDBkMzYwLCAweDBmZmZmZmU3IH0sCi0gICAgeyAweDAwMDBkMzY0LCAweDE3ZmZmZmU1IH0sCi0gICAgeyAweDAwMDBkMzY4LCAweDFmZmZmZmU0IH0sCi0gICAgeyAweDAwMDBkMzZjLCAweDM3ZmZmZmUzIH0sCi0gICAgeyAweDAwMDBkMzcwLCAweDNmZmZmZmUzIH0sCi0gICAgeyAweDAwMDBkMzc0LCAweDU3ZmZmZmUzIH0sCi0gICAgeyAweDAwMDBkMzc4LCAweDVmZmZmZmUyIH0sCi0gICAgeyAweDAwMDBkMzdjLCAweDdmZmZmZmUyIH0sCi0gICAgeyAweDAwMDBkMzgwLCAweDdmM2M3YmJhIH0sCi0gICAgeyAweDAwMDBkMzg0LCAweGYzMzA3ZmYwIH0sCisJLyogQWRkciAgICAgIGFsbG1vZGVzICAqLworCXsweDAwMDAwMDBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDAzMCwgMHgwMDAyMDA0NX0sCisJezB4MDAwMDAwMzQsIDB4MDAwMDAwMDV9LAorCXsweDAwMDAwMDQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDA0NCwgMHgwMDAwMDAwOH0sCisJezB4MDAwMDAwNDgsIDB4MDAwMDAwMDh9LAorCXsweDAwMDAwMDRjLCAweDAwMDAwMDEwfSwKKwl7MHgwMDAwMDA1MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDAwNTQsIDB4MDAwMDAwMWZ9LAorCXsweDAwMDAwODAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDgwNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDA4MDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwODBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDgxMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDA4MTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwODE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDgxYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDA4MjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwODI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTA0MCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNDQsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDQ4LCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA0YywgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNTAsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDU0LCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA1OCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNWMsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDYwLCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA2NCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEyMzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMjcwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTAzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEwNzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMGI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTBmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDExMzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMTc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTFiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDExZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMjM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTI3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEyYjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMmY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTMzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEzNzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxM2I4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTNmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE0MzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNDc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTRiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE0ZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNTM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTU3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE1YjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNWY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTYzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE2NzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNmI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTZmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE3MzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNzc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTdiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE3ZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMDNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTA3YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEwYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMGZjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTEzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDExN2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMWJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTFmYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEyM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMjdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTJiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEyZmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMzNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTM3YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEzYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxM2ZjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTQzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE0N2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA0MDMwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNDAzYywgMHgwMDAwMDAwMn0sCisJezB4MDAwMDQwMjQsIDB4MDAwMDAwMWZ9LAorCXsweDAwMDA0MDYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwNDA2NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwMDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwMTgsIDB4MDAwMDA3MDB9LAorCXsweDAwMDA4MDIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDQ4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODA1NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwNTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDVjLCAweDAwMGZjNzhmfSwKKwl7MHgwMDAwODA2MCwgMHgwMDAwMDAwZn0sCisJezB4MDAwMDgwNjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDcwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBiMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwYjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwYzAsIDB4MmE4MDAwMWF9LAorCXsweDAwMDA4MGM0LCAweDA1ZGMwMWUwfSwKKwl7MHgwMDAwODBjOCwgMHgxZjQwMjcxMH0sCisJezB4MDAwMDgwY2MsIDB4MDFmNDAwMDB9LAorCXsweDAwMDA4MGQwLCAweDAwMDAxZTAwfSwKKwl7MHgwMDAwODBkNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwZDgsIDB4MDA0MDAwMDB9LAorCXsweDAwMDA4MGUwLCAweGZmZmZmZmZmfSwKKwl7MHgwMDAwODBlNCwgMHgwMDAwZmZmZn0sCisJezB4MDAwMDgwZTgsIDB4MDAzZjNmM2Z9LAorCXsweDAwMDA4MGVjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBmMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwZjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBmYywgMHgwMDAyMDAwMH0sCisJezB4MDAwMDgxMDAsIDB4MDAwMjAwMDB9LAorCXsweDAwMDA4MTA0LCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwODEwOCwgMHgwMDAwMDA1Mn0sCisJezB4MDAwMDgxMGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTEwLCAweDAwMDAwMTY4fSwKKwl7MHgwMDAwODExOCwgMHgwMDAxMDBhYX0sCisJezB4MDAwMDgxMWMsIDB4MDAwMDMyMTB9LAorCXsweDAwMDA4MTIwLCAweDA4ZjA0ODEwfSwKKwl7MHgwMDAwODEyNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEzMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxNDQsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4MTY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODE2YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxNzAsIDB4MzIxNDMzMjB9LAorCXsweDAwMDA4MTc0LCAweGZhYTRmYTUwfSwKKwl7MHgwMDAwODE3OCwgMHgwMDAwMDEwMH0sCisJezB4MDAwMDgxN2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFkMCwgMHgwMDAwMzIwYX0sCisJezB4MDAwMDgxZWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFmNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWZjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjE0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIxOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIyNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIzMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyMzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODIzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyNDAsIDB4MDAxMDAwMDB9LAorCXsweDAwMDA4MjQ0LCAweDAwMTBmNDAwfSwKKwl7MHgwMDAwODI0OCwgMHgwMDAwMDEwMH0sCisJezB4MDAwMDgyNGMsIDB4MDAwMWU4MDB9LAorCXsweDAwMDA4MjUwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI1NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyNTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjVjLCAweDQwMDAwMGZmfSwKKwl7MHgwMDAwODI2MCwgMHgwMDA4MDkyMn0sCisJezB4MDAwMDgyNjQsIDB4ODhhMDAwMTB9LAorCXsweDAwMDA4MjcwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI3NCwgMHg0MDAwMDAwMH0sCisJezB4MDAwMDgyNzgsIDB4MDAzZTQxODB9LAorCXsweDAwMDA4MjdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI4NCwgMHgwMDAwMDAyY30sCisJezB4MDAwMDgyODgsIDB4MDAwMDAwMmN9LAorCXsweDAwMDA4MjhjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI5NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyOTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODMwMCwgMHgwMDAwMDA0MH0sCisJezB4MDAwMDgzMTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODMyYywgMHgwMDAwMDAwMX0sCisJezB4MDAwMDgzMzAsIDB4MDAwMDAzMDJ9LAorCXsweDAwMDA4MzM0LCAweDAwMDAwZTAwfSwKKwl7MHgwMDAwODMzOCwgMHgwMGZmMDAwMH0sCisJezB4MDAwMDgzM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzQwLCAweDAwMDEwMzgwfSwKKwl7MHgwMDAwODM0NCwgMHgwMDU4MTA0M30sCisJezB4MDAwMDcwMTAsIDB4MDAwMDAwMzB9LAorCXsweDAwMDA3MDM0LCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNzAzOCwgMHgwMDAwMDRjMn0sCisJezB4MDAwMDc4MDAsIDB4MDAxNDAwMDB9LAorCXsweDAwMDA3ODA0LCAweDBlNDU0OGQ4fSwKKwl7MHgwMDAwNzgwOCwgMHg1NDIxNDUxNH0sCisJezB4MDAwMDc4MGMsIDB4MDIwMjU4MjB9LAorCXsweDAwMDA3ODEwLCAweDcxYzBkMzg4fSwKKwl7MHgwMDAwNzgxNCwgMHg5MjQ5MzRhOH0sCisJezB4MDAwMDc4MWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA3ODI4LCAweDY2OTY0MzAwfSwKKwl7MHgwMDAwNzgyYywgMHg4ZGI2ZDk2MX0sCisJezB4MDAwMDc4MzAsIDB4OGRiNmQ5NmN9LAorCXsweDAwMDA3ODM0LCAweDYxNDAwMDhifSwKKwl7MHgwMDAwNzgzYywgMHg3MmVlMGE3Mn0sCisJezB4MDAwMDc4NDAsIDB4YmJmZmZmZmN9LAorCXsweDAwMDA3ODQ0LCAweDAwMGMwZGI2fSwKKwl7MHgwMDAwNzg0OCwgMHg2ZGI2MjQ2Zn0sCisJezB4MDAwMDc4NGMsIDB4NmQ5YjY2ZGJ9LAorCXsweDAwMDA3ODUwLCAweDZkOGM2ZGJhfSwKKwl7MHgwMDAwNzg1NCwgMHgwMDA0MDAwMH0sCisJezB4MDAwMDc4NTgsIDB4ZGIwMDMwMTJ9LAorCXsweDAwMDA3ODVjLCAweDA0OTI0OTE0fSwKKwl7MHgwMDAwNzg2MCwgMHgyMTA4NDIxMH0sCisJezB4MDAwMDc4NjQsIDB4ZjdkN2ZmZGV9LAorCXsweDAwMDA3ODY4LCAweGMyMDM0MDgwfSwKKwl7MHgwMDAwNzg3MCwgMHgxMDE0MmMwMH0sCisJezB4MDAwMDk4MDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODBjLCAweGFmZTY4ZTMwfSwKKwl7MHgwMDAwOTgxMCwgMHhmZDE0ZTAwMH0sCisJezB4MDAwMDk4MTQsIDB4OWMwYTlmNmJ9LAorCXsweDAwMDA5ODFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTgyYywgMHgwMDAwYTAwMH0sCisJezB4MDAwMDk4MzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODNjLCAweDAwMjAwNDAwfSwKKwl7MHgwMDAwOTg0YywgMHgwMDQwMjMzY30sCisJezB4MDAwMDk4NTQsIDB4MDAwMDAwNDR9LAorCXsweDAwMDA5OTAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTkwNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5MDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTkxYywgMHgxMDAwMGZmZn0sCisJezB4MDAwMDk5MjAsIDB4MDQ5MDAwMDB9LAorCXsweDAwMDA5OTI4LCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwOTkyYywgMHgwMDAwMDAwNH0sCisJezB4MDAwMDk5MzQsIDB4MWUxZjIwMjJ9LAorCXsweDAwMDA5OTM4LCAweDBhMGIwYzBkfSwKKwl7MHgwMDAwOTkzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5NDAsIDB4MTQ3NTA2MDR9LAorCXsweDAwMDA5OTQ4LCAweDkyODBjMDBhfSwKKwl7MHgwMDAwOTk0YywgMHgwMDAyMDAyOH0sCisJezB4MDAwMDk5NTQsIDB4NWYzY2EzZGV9LAorCXsweDAwMDA5OTU4LCAweDAxMDhlY2ZmfSwKKwl7MHgwMDAwOTk2OCwgMHgwMDAwMDNjZX0sCisJezB4MDAwMDk5NzAsIDB4MTkyYmI1MTR9LAorCXsweDAwMDA5OTc0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTk3OCwgMHgwMDAwMDAwMX0sCisJezB4MDAwMDk5N2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTgwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTk4NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5ODgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OThjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTk5MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5OTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OTk4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTk5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk5YTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OWE0LCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwOTlhOCwgMHgyMDFmZmYwMH0sCisJezB4MDAwMDk5YWMsIDB4MmRlZjA0MDB9LAorCXsweDAwMDA5OWIwLCAweDAzMDUxMDAwfSwKKwl7MHgwMDAwOTliNCwgMHgwMDAwMDgyMH0sCisJezB4MDAwMDk5ZGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OWUwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOTllNCwgMHhhYWFhYWFhYX0sCisJezB4MDAwMDk5ZTgsIDB4M2M0NjY0Nzh9LAorCXsweDAwMDA5OWVjLCAweDBjYzgwY2FhfSwKKwl7MHgwMDAwOTlmMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyMDgsIDB4ODAzZTY4Yzh9LAorCXsweDAwMDBhMjEwLCAweDQwODBhMzMzfSwKKwl7MHgwMDAwYTIxNCwgMHgwMDIwNmMxMH0sCisJezB4MDAwMGEyMTgsIDB4MDA5YzQwNjB9LAorCXsweDAwMDBhMjIwLCAweDAxODM0MDYxfSwKKwl7MHgwMDAwYTIyNCwgMHgwMDAwMDQwMH0sCisJezB4MDAwMGEyMjgsIDB4MDAwMDAzYjV9LAorCXsweDAwMDBhMjJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTIzNCwgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEyMzgsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhMjQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTI0OCwgMHhmZmZmZmZmY30sCisJezB4MDAwMGEyNGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMjU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTI1OCwgMHgwY2NiNTM4MH0sCisJezB4MDAwMGEyNWMsIDB4MTUxNTE1MDF9LAorCXsweDAwMDBhMjYwLCAweGRmYTkwZjAxfSwKKwl7MHgwMDAwYTI2OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyNmMsIDB4MGViYWU5ZTZ9LAorCXsweDAwMDBhMzg4LCAweDBjMDAwMDAwfSwKKwl7MHgwMDAwYTM4YywgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzOTAsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhMzljLCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwYTNhMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzYTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2E4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTNhYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzYjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2I0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTNiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2MwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTNjNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzY2MsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2QwLCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTNkNCwgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzZTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2U4LCAweDE4YzQzNDMzfSwKKwl7MHgwMDAwYTNlYywgMHgwMGY3MDA4MX0sCisJezB4MDAwMGEzZjAsIDB4MDEwMzZhMmZ9LAorCXsweDAwMDBhM2Y0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwZDI3MCwgMHgwZDgyMDgyMH0sCisJezB4MDAwMGQzNWMsIDB4MDdmZmZmZWZ9LAorCXsweDAwMDBkMzYwLCAweDBmZmZmZmU3fSwKKwl7MHgwMDAwZDM2NCwgMHgxN2ZmZmZlNX0sCisJezB4MDAwMGQzNjgsIDB4MWZmZmZmZTR9LAorCXsweDAwMDBkMzZjLCAweDM3ZmZmZmUzfSwKKwl7MHgwMDAwZDM3MCwgMHgzZmZmZmZlM30sCisJezB4MDAwMGQzNzQsIDB4NTdmZmZmZTN9LAorCXsweDAwMDBkMzc4LCAweDVmZmZmZmUyfSwKKwl7MHgwMDAwZDM3YywgMHg3ZmZmZmZlMn0sCisJezB4MDAwMGQzODAsIDB4N2YzYzdiYmF9LAorCXsweDAwMDBkMzg0LCAweGYzMzA3ZmYwfSwKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgYXI5MjcxQ29tbW9uX25vcm1hbF9jY2tfZmlyX2NvZWZmXzkyNzFbXVsyXSA9IHsKLSAgICB7IDB4MDAwMGExZjQsIDB4MDBmZmZlZmYgfSwKLSAgICB7IDB4MDAwMGExZjgsIDB4MDBmNWY5ZmYgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4Yjc5ZjY0MjcgfSwKKwkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCisJezB4MDAwMGExZjQsIDB4MDBmZmZlZmZ9LAorCXsweDAwMDBhMWY4LCAweDAwZjVmOWZmfSwKKwl7MHgwMDAwYTFmYywgMHhiNzlmNjQyN30sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyOTI3MUNvbW1vbl9qYXBhbl8yNDg0X2Nja19maXJfY29lZmZfOTI3MVtdWzJdID0gewotICAgIHsgMHgwMDAwYTFmNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTFmOCwgMHhlZmZmMDMwMSB9LAotICAgIHsgMHgwMDAwYTFmYywgMHhjYTkyMjhlZSB9LAorCS8qIEFkZHIgICAgICBhbGxtb2RlcyAgKi8KKwl7MHgwMDAwYTFmNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZjgsIDB4ZWZmZjAzMDF9LAorCXsweDAwMDBhMWZjLCAweGNhOTIyOGVlfSwKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgYXI5MjcxTW9kZXNfOTI3MV8xXzBfb25seVtdWzZdID0gewotICAgIHsgMHgwMDAwOTkxMCwgMHgzMDAwMjMxMSwgMHgzMDAwMjMxMSwgMHgzMDAwMjMxMSwgMHgzMDAwMjMxMSwgMHgzMDAwMjMxMSB9LAotICAgIHsgMHgwMDAwOTgyOCwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSB9LAorCXsweDAwMDA5OTEwLCAweDMwMDAyMzExLCAweDMwMDAyMzExLCAweDMwMDAyMzExLCAweDMwMDAyMzExLCAweDMwMDAyMzExfSwKKwl7MHgwMDAwOTgyOCwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMX0sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyOTI3MU1vZGVzXzkyNzFfQU5JX3JlZ1tdWzZdID0gewotICAgIHsgMHgwMDAwOTg1MCwgMHg2ZDQwMDBlMiwgMHg2ZDQwMDBlMiwgMHg2ZDQwMDBlMiwgMHg2ZDQwMDBlMiwgMHg2ZDQwMDBlMiB9LAotICAgIHsgMHgwMDAwOTg1YywgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM3NjA1ZSwgMHgzMTM3NjA1ZSwgMHgzMTM5NjA1ZSB9LAotICAgIHsgMHgwMDAwOTg1OCwgMHg3ZWM4NGQyZSwgMHg3ZWM4NGQyZSwgMHg3ZWM4NGQyZSwgMHg3ZWM4NGQyZSwgMHg3ZWM4NGQyZSB9LAotICAgIHsgMHgwMDAwOTg2YywgMHgwNjkwMzg4MSwgMHgwNjkwMzg4MSwgMHgwNjkwMzg4MSwgMHgwNjkwMzg4MSwgMHgwNjkwMzg4MSB9LAotICAgIHsgMHgwMDAwOTg2OCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMCB9LAotICAgIHsgMHgwMDAwYTIwOCwgMHg4MDNlNjhjOCwgMHg4MDNlNjhjOCwgMHg4MDNlNjhjOCwgMHg4MDNlNjhjOCwgMHg4MDNlNjhjOCB9LAotICAgIHsgMHgwMDAwOTkyNCwgMHhkMDBhODAwNywgMHhkMDBhODAwNywgMHhkMDBhODAwZCwgMHhkMDBhODAwZCwgMHhkMDBhODAwZCB9LAotICAgIHsgMHgwMDAwOTljMCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCB9LAorCXsweDAwMDA5ODUwLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyfSwKKwl7MHgwMDAwOTg1YywgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM3NjA1ZSwgMHgzMTM3NjA1ZSwgMHgzMTM5NjA1ZX0sCisJezB4MDAwMDk4NTgsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmV9LAorCXsweDAwMDA5ODZjLCAweDA2OTAzODgxLCAweDA2OTAzODgxLCAweDA2OTAzODgxLCAweDA2OTAzODgxLCAweDA2OTAzODgxfSwKKwl7MHgwMDAwOTg2OCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMH0sCisJezB4MDAwMGEyMDgsIDB4ODAzZTY4YzgsIDB4ODAzZTY4YzgsIDB4ODAzZTY4YzgsIDB4ODAzZTY4YzgsIDB4ODAzZTY4Yzh9LAorCXsweDAwMDA5OTI0LCAweGQwMGE4MDA3LCAweGQwMGE4MDA3LCAweGQwMGE4MDBkLCAweGQwMGE4MDBkLCAweGQwMGE4MDBkfSwKKwl7MHgwMDAwOTljMCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNH0sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyOTI3MU1vZGVzX25vcm1hbF9wb3dlcl90eF9nYWluXzkyNzFbXVs2XSA9IHsKLSAgICB7IDB4MDAwMGEzMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDkyMDAsIDB4MDAwMDkyMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTAyMDgsIDB4MDAwMTAyMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTk2MDgsIDB4MDAwMTk2MDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMWU2MTAsIDB4MDAwMWU2MTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmQ2ZDAsIDB4MDAwMmQ2ZDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzk3NTgsIDB4MDAwMzk3NTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwM2I3NTksIDB4MDAwM2I3NTksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwM2Q3NWEsIDB4MDAwM2Q3NWEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNDE3NWMsIDB4MDAwNDE3NWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNDU3NWUsIDB4MDAwNDU3NWUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNDk3OWYsIDB4MDAwNDk3OWYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNGQ3ZGYsIDB4MDAwNGQ3ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzQsIDB4MDAwMzY4ZGUsIDB4MDAwMzY4ZGUsIDB4MDAwMzY4ZGUsIDB4MDAwMzY4ZGUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzgsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzM2MsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNDAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNDQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNDgsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNGMsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNTAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNTQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4MzgsIDB4MDAwMDAwMjksIDB4MDAwMDAwMjksIDB4MDAwMDAwMjksIDB4MDAwMDAwMjksIDB4MDAwMDAwMjkgfSwKLSAgICB7IDB4MDAwMDc4MjQsIDB4MDBkOGFiZmYsIDB4MDBkOGFiZmYsIDB4MDBkOGFiZmYsIDB4MDBkOGFiZmYsIDB4MDBkOGFiZmYgfSwKLSAgICB7IDB4MDAwMDc4NmMsIDB4NDg2MDllYjQsIDB4NDg2MDllYjQsIDB4NDg2MDllYjQsIDB4NDg2MDllYjQsIDB4NDg2MDllYjQgfSwKLSAgICB7IDB4MDAwMDc4MjAsIDB4MDAwMDBjMDQsIDB4MDAwMDBjMDQsIDB4MDAwMDBjMDQsIDB4MDAwMDBjMDQsIDB4MDAwMDBjMDQgfSwKLSAgICB7IDB4MDAwMGEyNzQsIDB4MGEyMWM2NTIsIDB4MGEyMWM2NTIsIDB4MGEyMTg2NTIsIDB4MGEyMTg2NTIsIDB4MGEyMmE2NTIgfSwKLSAgICB7IDB4MDAwMGEyNzgsIDB4M2JkZWY3YmQsIDB4M2JkZWY3YmQsIDB4M2JkZWY3YmQsIDB4M2JkZWY3YmQsIDB4M2JkZWY3YmQgfSwKLSAgICB7IDB4MDAwMGEyN2MsIDB4MDUwZTgzYmQsIDB4MDUwZTgzYmQsIDB4MDUwZTgzYmQsIDB4MDUwZTgzYmQsIDB4MDUwZTgzYmQgfSwKLSAgICB7IDB4MDAwMGEzOTQsIDB4M2JkZWY3YmQsIDB4M2JkZWY3YmQsIDB4M2JkZWY3YmQsIDB4M2JkZWY3YmQsIDB4M2JkZWY3YmQgfSwKLSAgICB7IDB4MDAwMGEzOTgsIDB4MDAwMDAzYmQsIDB4MDAwMDAzYmQsIDB4MDAwMDAzYmQsIDB4MDAwMDAzYmQsIDB4MDAwMDAzYmQgfSwKLSAgICB7IDB4MDAwMGEzZGMsIDB4M2JkZWY3YmQsIDB4M2JkZWY3YmQsIDB4M2JkZWY3YmQsIDB4M2JkZWY3YmQsIDB4M2JkZWY3YmQgfSwKLSAgICB7IDB4MDAwMGEzZTAsIDB4MDAwMDAzYmQsIDB4MDAwMDAzYmQsIDB4MDAwMDAzYmQsIDB4MDAwMDAzYmQsIDB4MDAwMDAzYmQgfSwKKwl7MHgwMDAwYTMwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDkyMDAsIDB4MDAwMDkyMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDEwMjA4LCAweDAwMDEwMjA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxOTYwOCwgMHgwMDAxOTYwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMWU2MTAsIDB4MDAwMWU2MTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDJkNmQwLCAweDAwMDJkNmQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzOTc1OCwgMHgwMDAzOTc1OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwM2I3NTksIDB4MDAwM2I3NTksIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDNkNzVhLCAweDAwMDNkNzVhLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA0MTc1YywgMHgwMDA0MTc1YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNDU3NWUsIDB4MDAwNDU3NWUsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ5NzlmLCAweDAwMDQ5NzlmLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA0ZDdkZiwgMHgwMDA0ZDdkZiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMzQsIDB4MDAwMzY4ZGUsIDB4MDAwMzY4ZGUsIDB4MDAwMzY4ZGUsIDB4MDAwMzY4ZGUsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzM4LCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMzYywgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzNDAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzQ0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTM0OCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzNGMsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzUwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTM1NCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDc4MzgsIDB4MDAwMDAwMjksIDB4MDAwMDAwMjksIDB4MDAwMDAwMjksIDB4MDAwMDAwMjksIDB4MDAwMDAwMjl9LAorCXsweDAwMDA3ODI0LCAweDAwZDhhYmZmLCAweDAwZDhhYmZmLCAweDAwZDhhYmZmLCAweDAwZDhhYmZmLCAweDAwZDhhYmZmfSwKKwl7MHgwMDAwNzg2YywgMHg0ODYwOWViNCwgMHg0ODYwOWViNCwgMHg0ODYwOWViNCwgMHg0ODYwOWViNCwgMHg0ODYwOWViNH0sCisJezB4MDAwMDc4MjAsIDB4MDAwMDBjMDQsIDB4MDAwMDBjMDQsIDB4MDAwMDBjMDQsIDB4MDAwMDBjMDQsIDB4MDAwMDBjMDR9LAorCXsweDAwMDBhMjc0LCAweDBhMjFjNjUyLCAweDBhMjFjNjUyLCAweDBhMjE4NjUyLCAweDBhMjE4NjUyLCAweDBhMjJhNjUyfSwKKwl7MHgwMDAwYTI3OCwgMHgzYmRlZjdiZCwgMHgzYmRlZjdiZCwgMHgzYmRlZjdiZCwgMHgzYmRlZjdiZCwgMHgzYmRlZjdiZH0sCisJezB4MDAwMGEyN2MsIDB4MDUwZTgzYmQsIDB4MDUwZTgzYmQsIDB4MDUwZTgzYmQsIDB4MDUwZTgzYmQsIDB4MDUwZTgzYmR9LAorCXsweDAwMDBhMzk0LCAweDNiZGVmN2JkLCAweDNiZGVmN2JkLCAweDNiZGVmN2JkLCAweDNiZGVmN2JkLCAweDNiZGVmN2JkfSwKKwl7MHgwMDAwYTM5OCwgMHgwMDAwMDNiZCwgMHgwMDAwMDNiZCwgMHgwMDAwMDNiZCwgMHgwMDAwMDNiZCwgMHgwMDAwMDNiZH0sCisJezB4MDAwMGEzZGMsIDB4M2JkZWY3YmQsIDB4M2JkZWY3YmQsIDB4M2JkZWY3YmQsIDB4M2JkZWY3YmQsIDB4M2JkZWY3YmR9LAorCXsweDAwMDBhM2UwLCAweDAwMDAwM2JkLCAweDAwMDAwM2JkLCAweDAwMDAwM2JkLCAweDAwMDAwM2JkLCAweDAwMDAwM2JkfSwKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgYXI5MjcxTW9kZXNfaGlnaF9wb3dlcl90eF9nYWluXzkyNzFbXVs2XSA9IHsKLSAgICB7IDB4MDAwMGEzMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTYyMDAsIDB4MDAwMTYyMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTgyMDEsIDB4MDAwMTgyMDEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMWIyNDAsIDB4MDAwMWIyNDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMWQyNDEsIDB4MDAwMWQyNDEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMWY2MDAsIDB4MDAwMWY2MDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjI4MDAsIDB4MDAwMjI4MDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjY4MDIsIDB4MDAwMjY4MDIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmI4MDUsIDB4MDAwMmI4MDUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmVhNDEsIDB4MDAwMmVhNDEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzhiMDAsIDB4MDAwMzhiMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwM2FiNDAsIDB4MDAwM2FiNDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwM2NkODAsIDB4MDAwM2NkODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzQsIDB4MDAwMzY4ZGUsIDB4MDAwMzY4ZGUsIDB4MDAwMzY4ZGUsIDB4MDAwMzY4ZGUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzgsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzM2MsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNDAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNDQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNDgsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNGMsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNTAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNTQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4MzgsIDB4MDAwMDAwMmIsIDB4MDAwMDAwMmIsIDB4MDAwMDAwMmIsIDB4MDAwMDAwMmIsIDB4MDAwMDAwMmIgfSwKLSAgICB7IDB4MDAwMDc4MjQsIDB4MDBkOGE3ZmYsIDB4MDBkOGE3ZmYsIDB4MDBkOGE3ZmYsIDB4MDBkOGE3ZmYsIDB4MDBkOGE3ZmYgfSwKLSAgICB7IDB4MDAwMDc4NmMsIDB4MDg2MDllYjYsIDB4MDg2MDllYjYsIDB4MDg2MDllYmEsIDB4MDg2MDllYmEsIDB4MDg2MDllYjYgfSwKLSAgICB7IDB4MDAwMDc4MjAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAgfSwKLSAgICB7IDB4MDAwMGEyNzQsIDB4MGEyMmE2NTIsIDB4MGEyMmE2NTIsIDB4MGEyMTI2NTIsIDB4MGEyMTI2NTIsIDB4MGEyMmE2NTIgfSwKLSAgICB7IDB4MDAwMGEyNzgsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcgfSwKLSAgICB7IDB4MDAwMGEyN2MsIDB4MDUwMTgwNjMsIDB4MDUwMzgwNjMsIDB4MDUwMTgwNjMsIDB4MDUwMTgwNjMsIDB4MDUwMTgwNjMgfSwKLSAgICB7IDB4MDAwMGEzOTQsIDB4MDYzMThjNjMsIDB4MDYzMThjNjMsIDB4MDYzMThjNjMsIDB4MDYzMThjNjMsIDB4MDYzMThjNjMgfSwKLSAgICB7IDB4MDAwMGEzOTgsIDB4MDAwMDAwNjMsIDB4MDAwMDAwNjMsIDB4MDAwMDAwNjMsIDB4MDAwMDAwNjMsIDB4MDAwMDAwNjMgfSwKLSAgICB7IDB4MDAwMGEzZGMsIDB4MDYzMThjNjMsIDB4MDYzMThjNjMsIDB4MDYzMThjNjMsIDB4MDYzMThjNjMsIDB4MDYzMThjNjMgfSwKLSAgICB7IDB4MDAwMGEzZTAsIDB4MDAwMDAwNjMsIDB4MDAwMDAwNjMsIDB4MDAwMDAwNjMsIDB4MDAwMDAwNjMsIDB4MDAwMDAwNjMgfSwKKwl7MHgwMDAwYTMwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxMDAwMCwgMHgwMDAxMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTYyMDAsIDB4MDAwMTYyMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE4MjAxLCAweDAwMDE4MjAxLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxYjI0MCwgMHgwMDAxYjI0MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMWQyNDEsIDB4MDAwMWQyNDEsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDFmNjAwLCAweDAwMDFmNjAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyMjgwMCwgMHgwMDAyMjgwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjY4MDIsIDB4MDAwMjY4MDIsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDJiODA1LCAweDAwMDJiODA1LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyZWE0MSwgMHgwMDAyZWE0MSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzhiMDAsIDB4MDAwMzhiMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDNhYjQwLCAweDAwMDNhYjQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzY2Q4MCwgMHgwMDAzY2Q4MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzMzQsIDB4MDAwMzY4ZGUsIDB4MDAwMzY4ZGUsIDB4MDAwMzY4ZGUsIDB4MDAwMzY4ZGUsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzM4LCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTMzYywgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzNDAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzQ0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTM0OCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzNGMsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzUwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTM1NCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDc4MzgsIDB4MDAwMDAwMmIsIDB4MDAwMDAwMmIsIDB4MDAwMDAwMmIsIDB4MDAwMDAwMmIsIDB4MDAwMDAwMmJ9LAorCXsweDAwMDA3ODI0LCAweDAwZDhhN2ZmLCAweDAwZDhhN2ZmLCAweDAwZDhhN2ZmLCAweDAwZDhhN2ZmLCAweDAwZDhhN2ZmfSwKKwl7MHgwMDAwNzg2YywgMHgwODYwOWViNiwgMHgwODYwOWViNiwgMHgwODYwOWViYSwgMHgwODYwOWViYSwgMHgwODYwOWViNn0sCisJezB4MDAwMDc4MjAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDB9LAorCXsweDAwMDBhMjc0LCAweDBhMjJhNjUyLCAweDBhMjJhNjUyLCAweDBhMjE0NjUyLCAweDBhMjE0NjUyLCAweDBhMjJhNjUyfSwKKwl7MHgwMDAwYTI3OCwgMHgwZTczOWNlNywgMHgwZTczOWNlNywgMHgwZTczOWNlNywgMHgwZTczOWNlNywgMHgwZTczOWNlN30sCisJezB4MDAwMGEyN2MsIDB4MDUwMTgwNjMsIDB4MDUwMzgwNjMsIDB4MDUwMTgwNjMsIDB4MDUwMTgwNjMsIDB4MDUwMTgwNjN9LAorCXsweDAwMDBhMzk0LCAweDA2MzE4YzYzLCAweDA2MzE4YzYzLCAweDA2MzE4YzYzLCAweDA2MzE4YzYzLCAweDA2MzE4YzYzfSwKKwl7MHgwMDAwYTM5OCwgMHgwMDAwMDA2MywgMHgwMDAwMDA2MywgMHgwMDAwMDA2MywgMHgwMDAwMDA2MywgMHgwMDAwMDA2M30sCisJezB4MDAwMGEzZGMsIDB4MDYzMThjNjMsIDB4MDYzMThjNjMsIDB4MDYzMThjNjMsIDB4MDYzMThjNjMsIDB4MDYzMThjNjN9LAorCXsweDAwMDBhM2UwLCAweDAwMDAwMDYzLCAweDAwMDAwMDYzLCAweDAwMDAwMDYzLCAweDAwMDAwMDYzLCAweDAwMDAwMDYzfSwKIH07CiAKLSNlbmRpZiAvKiBJTklUVkFMU185MDAyXzEwX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX21hYy5jCmluZGV4IDJiZTIwZDIuLjUwZGRhMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9tYWMuYwpAQCAtMjg3LDYgKzI4Nyw3IEBACiAJdHMtPnRzX3Nob3J0cmV0cnkgPSBNUyhhZHMtPmRzX3R4c3RhdHVzMSwgQVJfUlRTRmFpbENudCk7CiAJdHMtPnRzX2xvbmdyZXRyeSA9IE1TKGFkcy0+ZHNfdHhzdGF0dXMxLCBBUl9EYXRhRmFpbENudCk7CiAJdHMtPnRzX3ZpcnRjb2wgPSBNUyhhZHMtPmRzX3R4c3RhdHVzMSwgQVJfVmlydFJldHJ5Q250KTsKKwl0cy0+dGlkID0gTVMoYWRzLT5kc190eHN0YXR1czksIEFSX1R4VGlkKTsKIAl0cy0+dHNfYW50ZW5uYSA9IDA7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfcGh5LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX3BoeS5jCmluZGV4IGVkMzE0ZTguLmFkYmYwMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9waHkuYwpAQCAtNDcxLDUyICs0NzEsNDcgQEAKIHN0YXRpYyB2b2lkIGFyOTAwMl9od19kb19nZXRuZihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgICAgIGludDE2X3QgbmZhcnJheVtOVU1fTkZfUkVBRElOR1NdKQogewotCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCWludDE2X3QgbmY7CiAKIAluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0NBKSwgQVI5MjgwX1BIWV9NSU5DQ0FfUFdSKTsKLQotCWlmIChuZiAmIDB4MTAwKQotCQluZiA9IDAgLSAoKG5mIF4gMHgxZmYpICsgMSk7Ci0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCSAgIk5GIGNhbGlicmF0ZWQgW2N0bF0gW2NoYWluIDBdIGlzICVkXG4iLCBuZik7Ci0KLQlpZiAoQVJfU1JFVl85MjcxKGFoKSAmJiAobmYgPj0gLTExNCkpCi0JCW5mID0gLTExNjsKLQotCW5mYXJyYXlbMF0gPSBuZjsKLQotCWlmICghQVJfU1JFVl85Mjg1KGFoKSAmJiAhQVJfU1JFVl85MjcxKGFoKSkgewotCQluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gxX0NDQSksCi0JCQkJQVI5MjgwX1BIWV9DSDFfTUlOQ0NBX1BXUik7Ci0KLQkJaWYgKG5mICYgMHgxMDApCi0JCQluZiA9IDAgLSAoKG5mIF4gMHgxZmYpICsgMSk7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJICAiTkYgY2FsaWJyYXRlZCBbY3RsXSBbY2hhaW4gMV0gaXMgJWRcbiIsIG5mKTsKLQkJbmZhcnJheVsxXSA9IG5mOwotCX0KKwluZmFycmF5WzBdID0gc2lnbl9leHRlbmQobmYsIDkpOwogCiAJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0VYVF9DQ0EpLCBBUjkyODBfUEhZX0VYVF9NSU5DQ0FfUFdSKTsKLQlpZiAobmYgJiAweDEwMCkKLQkJbmYgPSAwIC0gKChuZiBeIDB4MWZmKSArIDEpOwotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkgICJORiBjYWxpYnJhdGVkIFtleHRdIFtjaGFpbiAwXSBpcyAlZFxuIiwgbmYpOworCWlmIChJU19DSEFOX0hUNDAoYWgtPmN1cmNoYW4pKQorCQluZmFycmF5WzNdID0gc2lnbl9leHRlbmQobmYsIDkpOwogCi0JaWYgKEFSX1NSRVZfOTI3MShhaCkgJiYgKG5mID49IC0xMTQpKQotCQluZiA9IC0xMTY7CisJaWYgKEFSX1NSRVZfOTI4NShhaCkgfHwgQVJfU1JFVl85MjcxKGFoKSkKKwkJcmV0dXJuOwogCi0JbmZhcnJheVszXSA9IG5mOworCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9DSDFfQ0NBKSwgQVI5MjgwX1BIWV9DSDFfTUlOQ0NBX1BXUik7CisJbmZhcnJheVsxXSA9IHNpZ25fZXh0ZW5kKG5mLCA5KTsKIAotCWlmICghQVJfU1JFVl85Mjg1KGFoKSAmJiAhQVJfU1JFVl85MjcxKGFoKSkgewotCQluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gxX0VYVF9DQ0EpLAotCQkJCUFSOTI4MF9QSFlfQ0gxX0VYVF9NSU5DQ0FfUFdSKTsKKwluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gxX0VYVF9DQ0EpLCBBUjkyODBfUEhZX0NIMV9FWFRfTUlOQ0NBX1BXUik7CisJaWYgKElTX0NIQU5fSFQ0MChhaC0+Y3VyY2hhbikpCisJCW5mYXJyYXlbNF0gPSBzaWduX2V4dGVuZChuZiwgOSk7Cit9CiAKLQkJaWYgKG5mICYgMHgxMDApCi0JCQluZiA9IDAgLSAoKG5mIF4gMHgxZmYpICsgMSk7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJICAiTkYgY2FsaWJyYXRlZCBbZXh0XSBbY2hhaW4gMV0gaXMgJWRcbiIsIG5mKTsKLQkJbmZhcnJheVs0XSA9IG5mOworc3RhdGljIHZvaWQgYXI5MDAyX2h3X3NldF9uZl9saW1pdHMoc3RydWN0IGF0aF9odyAqYWgpCit7CisJaWYgKEFSX1NSRVZfOTI4NShhaCkpIHsKKwkJYWgtPm5mXzJnLm1heCA9IEFSX1BIWV9DQ0FfTUFYX0dPT0RfVkFMXzkyODVfMkdIWjsKKwkJYWgtPm5mXzJnLm1pbiA9IEFSX1BIWV9DQ0FfTUlOX0dPT0RfVkFMXzkyODVfMkdIWjsKKwkJYWgtPm5mXzJnLm5vbWluYWwgPSBBUl9QSFlfQ0NBX05PTV9WQUxfOTI4NV8yR0haOworCX0gZWxzZSBpZiAoQVJfU1JFVl85Mjg3KGFoKSkgeworCQlhaC0+bmZfMmcubWF4ID0gQVJfUEhZX0NDQV9NQVhfR09PRF9WQUxfOTI4N18yR0haOworCQlhaC0+bmZfMmcubWluID0gQVJfUEhZX0NDQV9NSU5fR09PRF9WQUxfOTI4N18yR0haOworCQlhaC0+bmZfMmcubm9taW5hbCA9IEFSX1BIWV9DQ0FfTk9NX1ZBTF85Mjg3XzJHSFo7CisJfSBlbHNlIGlmIChBUl9TUkVWXzkyNzEoYWgpKSB7CisJCWFoLT5uZl8yZy5tYXggPSBBUl9QSFlfQ0NBX01BWF9HT09EX1ZBTF85MjcxXzJHSFo7CisJCWFoLT5uZl8yZy5taW4gPSBBUl9QSFlfQ0NBX01JTl9HT09EX1ZBTF85MjcxXzJHSFo7CisJCWFoLT5uZl8yZy5ub21pbmFsID0gQVJfUEhZX0NDQV9OT01fVkFMXzkyNzFfMkdIWjsKKwl9IGVsc2UgeworCQlhaC0+bmZfMmcubWF4ID0gQVJfUEhZX0NDQV9NQVhfR09PRF9WQUxfOTI4MF8yR0haOworCQlhaC0+bmZfMmcubWluID0gQVJfUEhZX0NDQV9NSU5fR09PRF9WQUxfOTI4MF8yR0haOworCQlhaC0+bmZfMmcubm9taW5hbCA9IEFSX1BIWV9DQ0FfTk9NX1ZBTF85MjgwXzJHSFo7CisJCWFoLT5uZl81Zy5tYXggPSBBUl9QSFlfQ0NBX01BWF9HT09EX1ZBTF85MjgwXzVHSFo7CisJCWFoLT5uZl81Zy5taW4gPSBBUl9QSFlfQ0NBX01JTl9HT09EX1ZBTF85MjgwXzVHSFo7CisJCWFoLT5uZl81Zy5ub21pbmFsID0gQVJfUEhZX0NDQV9OT01fVkFMXzkyODBfNUdIWjsKIAl9CiB9CiAKQEAgLTUzMiw0ICs1MjcsNiBAQAogCXByaXZfb3BzLT5vbGNfaW5pdCA9IGFyOTAwMl9vbGNfaW5pdDsKIAlwcml2X29wcy0+Y29tcHV0ZV9wbGxfY29udHJvbCA9IGFyOTAwMl9od19jb21wdXRlX3BsbF9jb250cm9sOwogCXByaXZfb3BzLT5kb19nZXRuZiA9IGFyOTAwMl9od19kb19nZXRuZjsKKworCWFyOTAwMl9od19zZXRfbmZfbGltaXRzKGFoKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfcGh5LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX3BoeS5oCmluZGV4IDgxYmY2ZTUuLmM1MTUxYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfcGh5LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9waHkuaApAQCAtMTE0LDYgKzExNCwxMCBAQAogI2RlZmluZSBBUl9QSFlfRklORF9TSUdfRklSUFdSICAgIDB4MDNGQzAwMDAKICNkZWZpbmUgQVJfUEhZX0ZJTkRfU0lHX0ZJUlBXUl9TICAxOAogCisjZGVmaW5lIEFSX1BIWV9GSU5EX1NJR19MT1cgICAgICAgICAgIDB4OTg0MAorI2RlZmluZSBBUl9QSFlfRklORF9TSUdfRklSU1RFUF9MT1cgICAweDAwMDAwRkMwTAorI2RlZmluZSBBUl9QSFlfRklORF9TSUdfRklSU1RFUF9MT1dfUyA2CisKICNkZWZpbmUgQVJfUEhZX0FHQ19DVEwxICAgICAgICAgICAgICAgICAgMHg5ODVDCiAjZGVmaW5lIEFSX1BIWV9BR0NfQ1RMMV9DT0FSU0VfTE9XICAgICAgIDB4MDAwMDdGODAKICNkZWZpbmUgQVJfUEhZX0FHQ19DVEwxX0NPQVJTRV9MT1dfUyAgICAgNwpAQCAtMzI1LDYgKzMyOSw5IEBACiAjZGVmaW5lIEFSX1BIWV9FWFRfQ0NBX0NZQ1BXUl9USFIxX1MgICAgOQogI2RlZmluZSBBUl9QSFlfRVhUX0NDQV9USFJFU0g2MiAgICAgICAgIDB4MDA3RjAwMDAKICNkZWZpbmUgQVJfUEhZX0VYVF9DQ0FfVEhSRVNINjJfUyAgICAgICAxNgorI2RlZmluZSBBUl9QSFlfRVhUX1RJTUlORzVfQ1lDUFdSX1RIUjEgICAweDAwMDBGRTAwTAorI2RlZmluZSBBUl9QSFlfRVhUX1RJTUlORzVfQ1lDUFdSX1RIUjFfUyA5CisKICNkZWZpbmUgQVJfUEhZX0VYVF9NSU5DQ0FfUFdSICAgICAgICAgICAweEZGODAwMDAwCiAjZGVmaW5lIEFSX1BIWV9FWFRfTUlOQ0NBX1BXUl9TICAgICAgICAgMjMKICNkZWZpbmUgQVI5MjgwX1BIWV9FWFRfTUlOQ0NBX1BXUiAgICAgICAweDAxRkYwMDAwCkBAIC01NjksNCArNTc2LDMwIEBACiAjZGVmaW5lIEFSX1BIWV9DSDJfRVhUX01JTkNDQV9QV1IgICAweEZGODAwMDAwCiAjZGVmaW5lIEFSX1BIWV9DSDJfRVhUX01JTkNDQV9QV1JfUyAyMwogCisjZGVmaW5lIEFSX1BIWV9DQ0FfTk9NX1ZBTF81NDE2XzJHSFogICAgICAgICAgICAtOTAKKyNkZWZpbmUgQVJfUEhZX0NDQV9OT01fVkFMXzU0MTZfNUdIWiAgICAgICAgICAgIC0xMDAKKyNkZWZpbmUgQVJfUEhZX0NDQV9NSU5fR09PRF9WQUxfNTQxNl8yR0haICAgICAtMTAwCisjZGVmaW5lIEFSX1BIWV9DQ0FfTUlOX0dPT0RfVkFMXzU0MTZfNUdIWiAgICAgLTExMAorI2RlZmluZSBBUl9QSFlfQ0NBX01BWF9HT09EX1ZBTF81NDE2XzJHSFogICAgIC04MAorI2RlZmluZSBBUl9QSFlfQ0NBX01BWF9HT09EX1ZBTF81NDE2XzVHSFogICAgIC05MAorCisjZGVmaW5lIEFSX1BIWV9DQ0FfTk9NX1ZBTF85MjgwXzJHSFogICAgICAgICAtMTEyCisjZGVmaW5lIEFSX1BIWV9DQ0FfTk9NX1ZBTF85MjgwXzVHSFogICAgICAgICAtMTEyCisjZGVmaW5lIEFSX1BIWV9DQ0FfTUlOX0dPT0RfVkFMXzkyODBfMkdIWiAgLTEyNworI2RlZmluZSBBUl9QSFlfQ0NBX01JTl9HT09EX1ZBTF85MjgwXzVHSFogIC0xMjIKKyNkZWZpbmUgQVJfUEhZX0NDQV9NQVhfR09PRF9WQUxfOTI4MF8yR0haICAtOTcKKyNkZWZpbmUgQVJfUEhZX0NDQV9NQVhfR09PRF9WQUxfOTI4MF81R0haICAtMTAyCisKKyNkZWZpbmUgQVJfUEhZX0NDQV9OT01fVkFMXzkyODVfMkdIWiAgICAgICAgICAgLTExOAorI2RlZmluZSBBUl9QSFlfQ0NBX01JTl9HT09EX1ZBTF85Mjg1XzJHSFogICAgLTEyNworI2RlZmluZSBBUl9QSFlfQ0NBX01BWF9HT09EX1ZBTF85Mjg1XzJHSFogICAgLTEwOAorCisjZGVmaW5lIEFSX1BIWV9DQ0FfTk9NX1ZBTF85MjcxXzJHSFogICAgICAgICAgICAgLTExOAorI2RlZmluZSBBUl9QSFlfQ0NBX01JTl9HT09EX1ZBTF85MjcxXzJHSFogICAgICAtMTI3CisjZGVmaW5lIEFSX1BIWV9DQ0FfTUFYX0dPT0RfVkFMXzkyNzFfMkdIWiAgICAgIC0xMTYKKworI2RlZmluZSBBUl9QSFlfQ0NBX05PTV9WQUxfOTI4N18yR0haICAgICAgICAgICAtMTIwCisjZGVmaW5lIEFSX1BIWV9DQ0FfTUlOX0dPT0RfVkFMXzkyODdfMkdIWiAgICAtMTI3CisjZGVmaW5lIEFSX1BIWV9DQ0FfTUFYX0dPT0RfVkFMXzkyODdfMkdIWiAgICAtMTEwCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM18ycDBfaW5pdHZhbHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfMnAwX2luaXR2YWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMzNzVmYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfMnAwX2luaXR2YWxzLmgKQEAgLTAsMCArMSwxNzg0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgSU5JVFZBTFNfOTAwM18yUDBfSAorI2RlZmluZSBJTklUVkFMU185MDAzXzJQMF9ICisKKy8qIEFSOTAwMyAyLjAgKi8KKworc3RhdGljIGNvbnN0IHUzMiBhcjkzMDBfMnAwX3JhZGlvX3Bvc3RhbWJsZVtdWzVdID0geworCS8qIEFkZHIgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICAgKi8KKwl7MHgwMDAxNjA5YywgMHgwZGQwOGYyOSwgMHgwZGQwOGYyOSwgMHgwYjI4M2YzMSwgMHgwYjI4M2YzMX0sCisJezB4MDAwMTYwYWMsIDB4YTQ2NTNjMDAsIDB4YTQ2NTNjMDAsIDB4MjQ2NTI4MDAsIDB4MjQ2NTI4MDB9LAorCXsweDAwMDE2MGIwLCAweDAzMjg0ZjNlLCAweDAzMjg0ZjNlLCAweDA1ZDA4ZjIwLCAweDA1ZDA4ZjIwfSwKKwl7MHgwMDAxNjEwYywgMHgwODAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYxNDAsIDB4MTA4MDQwMDgsIDB4MTA4MDQwMDgsIDB4NTA4MDQwMDgsIDB4NTA4MDQwMDh9LAorCXsweDAwMDE2NTBjLCAweDA4MDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjU0MCwgMHgxMDgwNDAwOCwgMHgxMDgwNDAwOCwgMHg1MDgwNDAwOCwgMHg1MDgwNDAwOH0sCisJezB4MDAwMTY5MGMsIDB4MDgwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2OTQwLCAweDEwODA0MDA4LCAweDEwODA0MDA4LCAweDUwODA0MDA4LCAweDUwODA0MDA4fSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzAwTW9kZXNfbG93ZXN0X29iX2RiX3R4X2dhaW5fdGFibGVfMnAwW11bNV0gPSB7CisJLyogQWRkciAgICAgIDVHX0hUMjAgICAgIDVHX0hUNDAgICAgIDJHX0hUNDAgICAgIDJHX0hUMjAgICAqLworCXsweDAwMDBhNDEwLCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5fSwKKwl7MHgwMDAwYTUwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE1MDQsIDB4MDYwMDAwMDMsIDB4MDYwMDAwMDMsIDB4MDQwMDAwMDIsIDB4MDQwMDAwMDJ9LAorCXsweDAwMDBhNTA4LCAweDBhMDAwMDIwLCAweDBhMDAwMDIwLCAweDA4MDAwMDA0LCAweDA4MDAwMDA0fSwKKwl7MHgwMDAwYTUwYywgMHgxMDAwMDAyMywgMHgxMDAwMDAyMywgMHgwYjAwMDIwMCwgMHgwYjAwMDIwMH0sCisJezB4MDAwMGE1MTAsIDB4MTYwMDAyMjAsIDB4MTYwMDAyMjAsIDB4MGYwMDAyMDIsIDB4MGYwMDAyMDJ9LAorCXsweDAwMDBhNTE0LCAweDFjMDAwMjIzLCAweDFjMDAwMjIzLCAweDEyMDAwNDAwLCAweDEyMDAwNDAwfSwKKwl7MHgwMDAwYTUxOCwgMHgyMTAyMDIyMCwgMHgyMTAyMDIyMCwgMHgxNjAwMDQwMiwgMHgxNjAwMDQwMn0sCisJezB4MDAwMGE1MWMsIDB4MjcwMjAyMjMsIDB4MjcwMjAyMjMsIDB4MTkwMDA0MDQsIDB4MTkwMDA0MDR9LAorCXsweDAwMDBhNTIwLCAweDJiMDIyMjIwLCAweDJiMDIyMjIwLCAweDFjMDAwNjAzLCAweDFjMDAwNjAzfSwKKwl7MHgwMDAwYTUyNCwgMHgyZjAyMjIyMiwgMHgyZjAyMjIyMiwgMHgyMTAwMGEwMiwgMHgyMTAwMGEwMn0sCisJezB4MDAwMGE1MjgsIDB4MzQwMjIyMjUsIDB4MzQwMjIyMjUsIDB4MjUwMDBhMDQsIDB4MjUwMDBhMDR9LAorCXsweDAwMDBhNTJjLCAweDNhMDIyMjJhLCAweDNhMDIyMjJhLCAweDI4MDAwYTIwLCAweDI4MDAwYTIwfSwKKwl7MHgwMDAwYTUzMCwgMHgzZTAyMjIyYywgMHgzZTAyMjIyYywgMHgyYzAwMGUyMCwgMHgyYzAwMGUyMH0sCisJezB4MDAwMGE1MzQsIDB4NDIwMjI0MmEsIDB4NDIwMjI0MmEsIDB4MzAwMDBlMjIsIDB4MzAwMDBlMjJ9LAorCXsweDAwMDBhNTM4LCAweDQ3MDIyNDRhLCAweDQ3MDIyNDRhLCAweDM0MDAwZTI0LCAweDM0MDAwZTI0fSwKKwl7MHgwMDAwYTUzYywgMHg0YjAyMjQ0YywgMHg0YjAyMjQ0YywgMHgzODAwMTY0MCwgMHgzODAwMTY0MH0sCisJezB4MDAwMGE1NDAsIDB4NGUwMjI0NmMsIDB4NGUwMjI0NmMsIDB4M2MwMDE2NjAsIDB4M2MwMDE2NjB9LAorCXsweDAwMDBhNTQ0LCAweDUzMDIyNjZjLCAweDUzMDIyNjZjLCAweDNmMDAxODYxLCAweDNmMDAxODYxfSwKKwl7MHgwMDAwYTU0OCwgMHg1NzAyMjg2YywgMHg1NzAyMjg2YywgMHg0MzAwMWE4MSwgMHg0MzAwMWE4MX0sCisJezB4MDAwMGE1NGMsIDB4NWMwNDI4NmIsIDB4NWMwNDI4NmIsIDB4NDcwMDFhODMsIDB4NDcwMDFhODN9LAorCXsweDAwMDBhNTUwLCAweDYxMDQyYTZjLCAweDYxMDQyYTZjLCAweDRhMDAxYzg0LCAweDRhMDAxYzg0fSwKKwl7MHgwMDAwYTU1NCwgMHg2NjA2MmE2YywgMHg2NjA2MmE2YywgMHg0ZTAwMWNlMywgMHg0ZTAwMWNlM30sCisJezB4MDAwMGE1NTgsIDB4NmIwNjJlNmMsIDB4NmIwNjJlNmMsIDB4NTIwMDFjZTUsIDB4NTIwMDFjZTV9LAorCXsweDAwMDBhNTVjLCAweDcwMDYzMDhjLCAweDcwMDYzMDhjLCAweDU2MDAxY2U5LCAweDU2MDAxY2U5fSwKKwl7MHgwMDAwYTU2MCwgMHg3MzBhMzA4YSwgMHg3MzBhMzA4YSwgMHg1YTAwMWNlYiwgMHg1YTAwMWNlYn0sCisJezB4MDAwMGE1NjQsIDB4NzcwYTMwOGMsIDB4NzcwYTMwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTY4LCAweDc3MGEzMDhjLCAweDc3MGEzMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU2YywgMHg3NzBhMzA4YywgMHg3NzBhMzA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCisJezB4MDAwMGE1NzAsIDB4NzcwYTMwOGMsIDB4NzcwYTMwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTc0LCAweDc3MGEzMDhjLCAweDc3MGEzMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU3OCwgMHg3NzBhMzA4YywgMHg3NzBhMzA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCisJezB4MDAwMGE1N2MsIDB4NzcwYTMwOGMsIDB4NzcwYTMwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTgwLCAweDAwODAwMDAwLCAweDAwODAwMDAwLCAweDAwODAwMDAwLCAweDAwODAwMDAwfSwKKwl7MHgwMDAwYTU4NCwgMHgwNjgwMDAwMywgMHgwNjgwMDAwMywgMHgwNDgwMDAwMiwgMHgwNDgwMDAwMn0sCisJezB4MDAwMGE1ODgsIDB4MGE4MDAwMjAsIDB4MGE4MDAwMjAsIDB4MDg4MDAwMDQsIDB4MDg4MDAwMDR9LAorCXsweDAwMDBhNThjLCAweDEwODAwMDIzLCAweDEwODAwMDIzLCAweDBiODAwMjAwLCAweDBiODAwMjAwfSwKKwl7MHgwMDAwYTU5MCwgMHgxNjgwMDIyMCwgMHgxNjgwMDIyMCwgMHgwZjgwMDIwMiwgMHgwZjgwMDIwMn0sCisJezB4MDAwMGE1OTQsIDB4MWM4MDAyMjMsIDB4MWM4MDAyMjMsIDB4MTI4MDA0MDAsIDB4MTI4MDA0MDB9LAorCXsweDAwMDBhNTk4LCAweDIxODIwMjIwLCAweDIxODIwMjIwLCAweDE2ODAwNDAyLCAweDE2ODAwNDAyfSwKKwl7MHgwMDAwYTU5YywgMHgyNzgyMDIyMywgMHgyNzgyMDIyMywgMHgxOTgwMDQwNCwgMHgxOTgwMDQwNH0sCisJezB4MDAwMGE1YTAsIDB4MmI4MjIyMjAsIDB4MmI4MjIyMjAsIDB4MWM4MDA2MDMsIDB4MWM4MDA2MDN9LAorCXsweDAwMDBhNWE0LCAweDJmODIyMjIyLCAweDJmODIyMjIyLCAweDIxODAwYTAyLCAweDIxODAwYTAyfSwKKwl7MHgwMDAwYTVhOCwgMHgzNDgyMjIyNSwgMHgzNDgyMjIyNSwgMHgyNTgwMGEwNCwgMHgyNTgwMGEwNH0sCisJezB4MDAwMGE1YWMsIDB4M2E4MjIyMmEsIDB4M2E4MjIyMmEsIDB4Mjg4MDBhMjAsIDB4Mjg4MDBhMjB9LAorCXsweDAwMDBhNWIwLCAweDNlODIyMjJjLCAweDNlODIyMjJjLCAweDJjODAwZTIwLCAweDJjODAwZTIwfSwKKwl7MHgwMDAwYTViNCwgMHg0MjgyMjQyYSwgMHg0MjgyMjQyYSwgMHgzMDgwMGUyMiwgMHgzMDgwMGUyMn0sCisJezB4MDAwMGE1YjgsIDB4NDc4MjI0NGEsIDB4NDc4MjI0NGEsIDB4MzQ4MDBlMjQsIDB4MzQ4MDBlMjR9LAorCXsweDAwMDBhNWJjLCAweDRiODIyNDRjLCAweDRiODIyNDRjLCAweDM4ODAxNjQwLCAweDM4ODAxNjQwfSwKKwl7MHgwMDAwYTVjMCwgMHg0ZTgyMjQ2YywgMHg0ZTgyMjQ2YywgMHgzYzgwMTY2MCwgMHgzYzgwMTY2MH0sCisJezB4MDAwMGE1YzQsIDB4NTM4MjI2NmMsIDB4NTM4MjI2NmMsIDB4M2Y4MDE4NjEsIDB4M2Y4MDE4NjF9LAorCXsweDAwMDBhNWM4LCAweDU3ODIyODZjLCAweDU3ODIyODZjLCAweDQzODAxYTgxLCAweDQzODAxYTgxfSwKKwl7MHgwMDAwYTVjYywgMHg1Yzg0Mjg2YiwgMHg1Yzg0Mjg2YiwgMHg0NzgwMWE4MywgMHg0NzgwMWE4M30sCisJezB4MDAwMGE1ZDAsIDB4NjE4NDJhNmMsIDB4NjE4NDJhNmMsIDB4NGE4MDFjODQsIDB4NGE4MDFjODR9LAorCXsweDAwMDBhNWQ0LCAweDY2ODYyYTZjLCAweDY2ODYyYTZjLCAweDRlODAxY2UzLCAweDRlODAxY2UzfSwKKwl7MHgwMDAwYTVkOCwgMHg2Yjg2MmU2YywgMHg2Yjg2MmU2YywgMHg1MjgwMWNlNSwgMHg1MjgwMWNlNX0sCisJezB4MDAwMGE1ZGMsIDB4NzA4NjMwOGMsIDB4NzA4NjMwOGMsIDB4NTY4MDFjZTksIDB4NTY4MDFjZTl9LAorCXsweDAwMDBhNWUwLCAweDczOGEzMDhhLCAweDczOGEzMDhhLCAweDVhODAxY2ViLCAweDVhODAxY2VifSwKKwl7MHgwMDAwYTVlNCwgMHg3NzhhMzA4YywgMHg3NzhhMzA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCisJezB4MDAwMGE1ZTgsIDB4Nzc4YTMwOGMsIDB4Nzc4YTMwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDBhNWVjLCAweDc3OGEzMDhjLCAweDc3OGEzMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKKwl7MHgwMDAwYTVmMCwgMHg3NzhhMzA4YywgMHg3NzhhMzA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCisJezB4MDAwMGE1ZjQsIDB4Nzc4YTMwOGMsIDB4Nzc4YTMwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDBhNWY4LCAweDc3OGEzMDhjLCAweDc3OGEzMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKKwl7MHgwMDAwYTVmYywgMHg3NzhhMzA4YywgMHg3NzhhMzA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCisJezB4MDAwMTYwNDQsIDB4MDEyNDkyZDQsIDB4MDEyNDkyZDQsIDB4MDEyNDkyZDQsIDB4MDEyNDkyZDR9LAorCXsweDAwMDE2MDQ4LCAweDYyNDgwMDAxLCAweDYyNDgwMDAxLCAweDYyNDgwMDAxLCAweDYyNDgwMDAxfSwKKwl7MHgwMDAxNjA2OCwgMHg2ZGI2ZGI2YywgMHg2ZGI2ZGI2YywgMHg2ZGI2ZGI2YywgMHg2ZGI2ZGI2Y30sCisJezB4MDAwMTY0NDQsIDB4MDEyNDkyZDQsIDB4MDEyNDkyZDQsIDB4MDEyNDkyZDQsIDB4MDEyNDkyZDR9LAorCXsweDAwMDE2NDQ4LCAweDYyNDgwMDAxLCAweDYyNDgwMDAxLCAweDYyNDgwMDAxLCAweDYyNDgwMDAxfSwKKwl7MHgwMDAxNjQ2OCwgMHg2ZGI2ZGI2YywgMHg2ZGI2ZGI2YywgMHg2ZGI2ZGI2YywgMHg2ZGI2ZGI2Y30sCisJezB4MDAwMTY4NDQsIDB4MDEyNDkyZDQsIDB4MDEyNDkyZDQsIDB4MDEyNDkyZDQsIDB4MDEyNDkyZDR9LAorCXsweDAwMDE2ODQ4LCAweDYyNDgwMDAxLCAweDYyNDgwMDAxLCAweDYyNDgwMDAxLCAweDYyNDgwMDAxfSwKKwl7MHgwMDAxNjg2OCwgMHg2ZGI2ZGI2YywgMHg2ZGI2ZGI2YywgMHg2ZGI2ZGI2YywgMHg2ZGI2ZGI2Y30sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTMwME1vZGVzX2Zhc3RfY2xvY2tfMnAwW11bM10gPSB7CisJLyogQWRkciAgICAgIDVHX0hUMjAgICAgIDVHX0hUNDAgICAqLworCXsweDAwMDAxMDMwLCAweDAwMDAwMjY4LCAweDAwMDAwNGQwfSwKKwl7MHgwMDAwMTA3MCwgMHgwMDAwMDE4YywgMHgwMDAwMDMxOH0sCisJezB4MDAwMDEwYjAsIDB4MDAwMDBmZDAsIDB4MDAwMDFmYTB9LAorCXsweDAwMDA4MDE0LCAweDA0NGMwNDRjLCAweDA4OTgwODk4fSwKKwl7MHgwMDAwODAxYywgMHgxNDhlYzAyYiwgMHgxNDhlYzA1N30sCisJezB4MDAwMDgzMTgsIDB4MDAwMDQ0YzAsIDB4MDAwMDg5ODB9LAorCXsweDAwMDA5ZTAwLCAweDAzNzIxODIxLCAweDAzNzIxODIxfSwKKwl7MHgwMDAwYTIzMCwgMHgwMDAwMDAwYiwgMHgwMDAwMDAxNn0sCisJezB4MDAwMGEyNTQsIDB4MDAwMDA4OTgsIDB4MDAwMDExMzB9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhcjkzMDBfMnAwX3JhZGlvX2NvcmVbXVsyXSA9IHsKKwkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCisJezB4MDAwMTYwMDAsIDB4MzZkYjZkYjZ9LAorCXsweDAwMDE2MDA0LCAweDZkYjZkYjQwfSwKKwl7MHgwMDAxNjAwOCwgMHg3M2YwMDAwMH0sCisJezB4MDAwMTYwMGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2MDQwLCAweDdmODBmZmY4fSwKKwl7MHgwMDAxNjA0YywgMHg3NmQwMDViNX0sCisJezB4MDAwMTYwNTAsIDB4NTU2Y2YwMzF9LAorCXsweDAwMDE2MDU0LCAweDEzNDQ5NDQwfSwKKwl7MHgwMDAxNjA1OCwgMHgwYzUxYzkyY30sCisJezB4MDAwMTYwNWMsIDB4M2RiN2ZmZmN9LAorCXsweDAwMDE2MDYwLCAweGZmZmZmZmZjfSwKKwl7MHgwMDAxNjA2NCwgMHgwMDBmMDI3OH0sCisJezB4MDAwMTYwNmMsIDB4NmRiNjAwMDB9LAorCXsweDAwMDE2MDgwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjA4NCwgMHgwZTQ4MDQ4Y30sCisJezB4MDAwMTYwODgsIDB4NTQyMTQ1MTR9LAorCXsweDAwMDE2MDhjLCAweDExOWY0ODFlfSwKKwl7MHgwMDAxNjA5MCwgMHgyNDkyNjQ5MH0sCisJezB4MDAwMTYwOTgsIDB4ZDI4ODg4ODh9LAorCXsweDAwMDE2MGEwLCAweDBhMTA4ZmZlfSwKKwl7MHgwMDAxNjBhNCwgMHg4MTJmYzM3MH0sCisJezB4MDAwMTYwYTgsIDB4NDIzYzgwMDB9LAorCXsweDAwMDE2MGI0LCAweDkyNDgwMDgwfSwKKwl7MHgwMDAxNjBjMCwgMHgwMGFkYjZkMH0sCisJezB4MDAwMTYwYzQsIDB4NmRiNmRiNjB9LAorCXsweDAwMDE2MGM4LCAweDZkYjZkYjZjfSwKKwl7MHgwMDAxNjBjYywgMHgwMWU2YzAwMH0sCisJezB4MDAwMTYxMDAsIDB4M2ZmZmJlMDF9LAorCXsweDAwMDE2MTA0LCAweGZmZjgwMDAwfSwKKwl7MHgwMDAxNjEwOCwgMHgwMDA4MDAxMH0sCisJezB4MDAwMTYxNDQsIDB4MDIwODQwODB9LAorCXsweDAwMDE2MTQ4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjI4MCwgMHgwNThhMDAwMX0sCisJezB4MDAwMTYyODQsIDB4M2Q4NDAyMDh9LAorCXsweDAwMDE2Mjg4LCAweDA1YTIwNDA4fSwKKwl7MHgwMDAxNjI4YywgMHgwMDAzOGMwN30sCisJezB4MDAwMTYyOTAsIDB4NDAwMDAwMDR9LAorCXsweDAwMDE2Mjk0LCAweDQ1OGFhMTRmfSwKKwl7MHgwMDAxNjM4MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYzODQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2Mzg4LCAweDAwODAwNzAwfSwKKwl7MHgwMDAxNjM4YywgMHgwMDgwMDcwMH0sCisJezB4MDAwMTYzOTAsIDB4MDA4MDA3MDB9LAorCXsweDAwMDE2Mzk0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjM5OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYzOWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2M2EwLCAweDAwMDAwMDAxfSwKKwl7MHgwMDAxNjNhNCwgMHgwMDAwMDAwMX0sCisJezB4MDAwMTYzYTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2M2FjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjNiMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYzYjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2M2I4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjNiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYzYzAsIDB4MDAwMDAwYTB9LAorCXsweDAwMDE2M2M0LCAweDAwMGMwMDAwfSwKKwl7MHgwMDAxNjNjOCwgMHgxNDAyMTQwMn0sCisJezB4MDAwMTYzY2MsIDB4MDAwMDE0MDJ9LAorCXsweDAwMDE2M2QwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjNkNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY0MDAsIDB4MzZkYjZkYjZ9LAorCXsweDAwMDE2NDA0LCAweDZkYjZkYjQwfSwKKwl7MHgwMDAxNjQwOCwgMHg3M2YwMDAwMH0sCisJezB4MDAwMTY0MGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2NDQwLCAweDdmODBmZmY4fSwKKwl7MHgwMDAxNjQ0YywgMHg3NmQwMDViNX0sCisJezB4MDAwMTY0NTAsIDB4NTU2Y2YwMzF9LAorCXsweDAwMDE2NDU0LCAweDEzNDQ5NDQwfSwKKwl7MHgwMDAxNjQ1OCwgMHgwYzUxYzkyY30sCisJezB4MDAwMTY0NWMsIDB4M2RiN2ZmZmN9LAorCXsweDAwMDE2NDYwLCAweGZmZmZmZmZjfSwKKwl7MHgwMDAxNjQ2NCwgMHgwMDBmMDI3OH0sCisJezB4MDAwMTY0NmMsIDB4NmRiNjAwMDB9LAorCXsweDAwMDE2NTAwLCAweDNmZmZiZTAxfSwKKwl7MHgwMDAxNjUwNCwgMHhmZmY4MDAwMH0sCisJezB4MDAwMTY1MDgsIDB4MDAwODAwMTB9LAorCXsweDAwMDE2NTQ0LCAweDAyMDg0MDgwfSwKKwl7MHgwMDAxNjU0OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY3ODAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2Nzg0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjc4OCwgMHgwMDgwMDcwMH0sCisJezB4MDAwMTY3OGMsIDB4MDA4MDA3MDB9LAorCXsweDAwMDE2NzkwLCAweDAwODAwNzAwfSwKKwl7MHgwMDAxNjc5NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY3OTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2NzljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjdhMCwgMHgwMDAwMDAwMX0sCisJezB4MDAwMTY3YTQsIDB4MDAwMDAwMDF9LAorCXsweDAwMDE2N2E4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjdhYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY3YjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2N2I0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjdiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY3YmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2N2MwLCAweDAwMDAwMGEwfSwKKwl7MHgwMDAxNjdjNCwgMHgwMDBjMDAwMH0sCisJezB4MDAwMTY3YzgsIDB4MTQwMjE0MDJ9LAorCXsweDAwMDE2N2NjLCAweDAwMDAxNDAyfSwKKwl7MHgwMDAxNjdkMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY3ZDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2ODAwLCAweDM2ZGI2ZGI2fSwKKwl7MHgwMDAxNjgwNCwgMHg2ZGI2ZGI0MH0sCisJezB4MDAwMTY4MDgsIDB4NzNmMDAwMDB9LAorCXsweDAwMDE2ODBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjg0MCwgMHg3ZjgwZmZmOH0sCisJezB4MDAwMTY4NGMsIDB4NzZkMDA1YjV9LAorCXsweDAwMDE2ODUwLCAweDU1NmNmMDMxfSwKKwl7MHgwMDAxNjg1NCwgMHgxMzQ0OTQ0MH0sCisJezB4MDAwMTY4NTgsIDB4MGM1MWM5MmN9LAorCXsweDAwMDE2ODVjLCAweDNkYjdmZmZjfSwKKwl7MHgwMDAxNjg2MCwgMHhmZmZmZmZmY30sCisJezB4MDAwMTY4NjQsIDB4MDAwZjAyNzh9LAorCXsweDAwMDE2ODZjLCAweDZkYjYwMDAwfSwKKwl7MHgwMDAxNjkwMCwgMHgzZmZmYmUwMX0sCisJezB4MDAwMTY5MDQsIDB4ZmZmODAwMDB9LAorCXsweDAwMDE2OTA4LCAweDAwMDgwMDEwfSwKKwl7MHgwMDAxNjk0NCwgMHgwMjA4NDA4MH0sCisJezB4MDAwMTY5NDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2YjgwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNmI4NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTZiODgsIDB4MDA4MDA3MDB9LAorCXsweDAwMDE2YjhjLCAweDAwODAwNzAwfSwKKwl7MHgwMDAxNmI5MCwgMHgwMDgwMDcwMH0sCisJezB4MDAwMTZiOTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2Yjk4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNmI5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMTZiYTAsIDB4MDAwMDAwMDF9LAorCXsweDAwMDE2YmE0LCAweDAwMDAwMDAxfSwKKwl7MHgwMDAxNmJhOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTZiYWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2YmIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNmJiNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTZiYjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2YmJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNmJjMCwgMHgwMDAwMDBhMH0sCisJezB4MDAwMTZiYzQsIDB4MDAwYzAwMDB9LAorCXsweDAwMDE2YmM4LCAweDE0MDIxNDAyfSwKKwl7MHgwMDAxNmJjYywgMHgwMDAwMTQwMn0sCisJezB4MDAwMTZiZDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2YmQ0LCAweDAwMDAwMDAwfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzAwQ29tbW9uX3J4X2dhaW5fdGFibGVfbWVybGluXzJwMFtdWzJdID0geworCS8qIEFkZHIgICAgICBhbGxtb2RlcyAgKi8KKwl7MHgwMDAwYTAwMCwgMHgwMjAwMDEwMX0sCisJezB4MDAwMGEwMDQsIDB4MDIwMDAxMDJ9LAorCXsweDAwMDBhMDA4LCAweDAyMDAwMTAzfSwKKwl7MHgwMDAwYTAwYywgMHgwMjAwMDEwNH0sCisJezB4MDAwMGEwMTAsIDB4MDIwMDAyMDB9LAorCXsweDAwMDBhMDE0LCAweDAyMDAwMjAxfSwKKwl7MHgwMDAwYTAxOCwgMHgwMjAwMDIwMn0sCisJezB4MDAwMGEwMWMsIDB4MDIwMDAyMDN9LAorCXsweDAwMDBhMDIwLCAweDAyMDAwMjA0fSwKKwl7MHgwMDAwYTAyNCwgMHgwMjAwMDIwNX0sCisJezB4MDAwMGEwMjgsIDB4MDIwMDAyMDh9LAorCXsweDAwMDBhMDJjLCAweDAyMDAwMzAyfSwKKwl7MHgwMDAwYTAzMCwgMHgwMjAwMDMwM30sCisJezB4MDAwMGEwMzQsIDB4MDIwMDAzMDR9LAorCXsweDAwMDBhMDM4LCAweDAyMDAwNDAwfSwKKwl7MHgwMDAwYTAzYywgMHgwMjAxMDMwMH0sCisJezB4MDAwMGEwNDAsIDB4MDIwMTAzMDF9LAorCXsweDAwMDBhMDQ0LCAweDAyMDEwMzAyfSwKKwl7MHgwMDAwYTA0OCwgMHgwMjAwMDUwMH0sCisJezB4MDAwMGEwNGMsIDB4MDIwMTA0MDB9LAorCXsweDAwMDBhMDUwLCAweDAyMDIwMzAwfSwKKwl7MHgwMDAwYTA1NCwgMHgwMjAyMDMwMX0sCisJezB4MDAwMGEwNTgsIDB4MDIwMjAzMDJ9LAorCXsweDAwMDBhMDVjLCAweDAyMDIwMzAzfSwKKwl7MHgwMDAwYTA2MCwgMHgwMjAyMDQwMH0sCisJezB4MDAwMGEwNjQsIDB4MDIwMzAzMDB9LAorCXsweDAwMDBhMDY4LCAweDAyMDMwMzAxfSwKKwl7MHgwMDAwYTA2YywgMHgwMjAzMDMwMn0sCisJezB4MDAwMGEwNzAsIDB4MDIwMzAzMDN9LAorCXsweDAwMDBhMDc0LCAweDAyMDMwNDAwfSwKKwl7MHgwMDAwYTA3OCwgMHgwMjA0MDMwMH0sCisJezB4MDAwMGEwN2MsIDB4MDIwNDAzMDF9LAorCXsweDAwMDBhMDgwLCAweDAyMDQwMzAyfSwKKwl7MHgwMDAwYTA4NCwgMHgwMjA0MDMwM30sCisJezB4MDAwMGEwODgsIDB4MDIwMzA1MDB9LAorCXsweDAwMDBhMDhjLCAweDAyMDQwNDAwfSwKKwl7MHgwMDAwYTA5MCwgMHgwMjA1MDIwM30sCisJezB4MDAwMGEwOTQsIDB4MDIwNTAyMDR9LAorCXsweDAwMDBhMDk4LCAweDAyMDUwMjA1fSwKKwl7MHgwMDAwYTA5YywgMHgwMjA0MDUwMH0sCisJezB4MDAwMGEwYTAsIDB4MDIwNTAzMDF9LAorCXsweDAwMDBhMGE0LCAweDAyMDUwMzAyfSwKKwl7MHgwMDAwYTBhOCwgMHgwMjA1MDMwM30sCisJezB4MDAwMGEwYWMsIDB4MDIwNTA0MDB9LAorCXsweDAwMDBhMGIwLCAweDAyMDUwNDAxfSwKKwl7MHgwMDAwYTBiNCwgMHgwMjA1MDQwMn0sCisJezB4MDAwMGEwYjgsIDB4MDIwNTA0MDN9LAorCXsweDAwMDBhMGJjLCAweDAyMDUwNTAwfSwKKwl7MHgwMDAwYTBjMCwgMHgwMjA1MDUwMX0sCisJezB4MDAwMGEwYzQsIDB4MDIwNTA1MDJ9LAorCXsweDAwMDBhMGM4LCAweDAyMDUwNTAzfSwKKwl7MHgwMDAwYTBjYywgMHgwMjA1MDUwNH0sCisJezB4MDAwMGEwZDAsIDB4MDIwNTA2MDB9LAorCXsweDAwMDBhMGQ0LCAweDAyMDUwNjAxfSwKKwl7MHgwMDAwYTBkOCwgMHgwMjA1MDYwMn0sCisJezB4MDAwMGEwZGMsIDB4MDIwNTA2MDN9LAorCXsweDAwMDBhMGUwLCAweDAyMDUwNjA0fSwKKwl7MHgwMDAwYTBlNCwgMHgwMjA1MDcwMH0sCisJezB4MDAwMGEwZTgsIDB4MDIwNTA3MDF9LAorCXsweDAwMDBhMGVjLCAweDAyMDUwNzAyfSwKKwl7MHgwMDAwYTBmMCwgMHgwMjA1MDcwM30sCisJezB4MDAwMGEwZjQsIDB4MDIwNTA3MDR9LAorCXsweDAwMDBhMGY4LCAweDAyMDUwNzA1fSwKKwl7MHgwMDAwYTBmYywgMHgwMjA1MDcwOH0sCisJezB4MDAwMGExMDAsIDB4MDIwNTA3MDl9LAorCXsweDAwMDBhMTA0LCAweDAyMDUwNzBhfSwKKwl7MHgwMDAwYTEwOCwgMHgwMjA1MDcwYn0sCisJezB4MDAwMGExMGMsIDB4MDIwNTA3MGN9LAorCXsweDAwMDBhMTEwLCAweDAyMDUwNzBkfSwKKwl7MHgwMDAwYTExNCwgMHgwMjA1MDcxMH0sCisJezB4MDAwMGExMTgsIDB4MDIwNTA3MTF9LAorCXsweDAwMDBhMTFjLCAweDAyMDUwNzEyfSwKKwl7MHgwMDAwYTEyMCwgMHgwMjA1MDcxM30sCisJezB4MDAwMGExMjQsIDB4MDIwNTA3MTR9LAorCXsweDAwMDBhMTI4LCAweDAyMDUwNzE1fSwKKwl7MHgwMDAwYTEyYywgMHgwMjA1MDczMH0sCisJezB4MDAwMGExMzAsIDB4MDIwNTA3MzF9LAorCXsweDAwMDBhMTM0LCAweDAyMDUwNzMyfSwKKwl7MHgwMDAwYTEzOCwgMHgwMjA1MDczM30sCisJezB4MDAwMGExM2MsIDB4MDIwNTA3MzR9LAorCXsweDAwMDBhMTQwLCAweDAyMDUwNzM1fSwKKwl7MHgwMDAwYTE0NCwgMHgwMjA1MDc1MH0sCisJezB4MDAwMGExNDgsIDB4MDIwNTA3NTF9LAorCXsweDAwMDBhMTRjLCAweDAyMDUwNzUyfSwKKwl7MHgwMDAwYTE1MCwgMHgwMjA1MDc1M30sCisJezB4MDAwMGExNTQsIDB4MDIwNTA3NTR9LAorCXsweDAwMDBhMTU4LCAweDAyMDUwNzU1fSwKKwl7MHgwMDAwYTE1YywgMHgwMjA1MDc3MH0sCisJezB4MDAwMGExNjAsIDB4MDIwNTA3NzF9LAorCXsweDAwMDBhMTY0LCAweDAyMDUwNzcyfSwKKwl7MHgwMDAwYTE2OCwgMHgwMjA1MDc3M30sCisJezB4MDAwMGExNmMsIDB4MDIwNTA3NzR9LAorCXsweDAwMDBhMTcwLCAweDAyMDUwNzc1fSwKKwl7MHgwMDAwYTE3NCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGExNzgsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBhMTdjLCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYTE4MCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGExODQsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBhMTg4LCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYTE4YywgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGExOTAsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBhMTk0LCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYTE5OCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGExOWMsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBhMWEwLCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYTFhNCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGExYTgsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBhMWFjLCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYTFiMCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGExYjQsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBhMWI4LCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYTFiYywgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGExYzAsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBhMWM0LCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYTFjOCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGExY2MsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBhMWQwLCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYTFkNCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGExZDgsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBhMWRjLCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYTFlMCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGExZTQsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBhMWU4LCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYTFlYywgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGExZjAsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBhMWY0LCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYTFmOCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGExZmMsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBiMDAwLCAweDAyMDAwMTAxfSwKKwl7MHgwMDAwYjAwNCwgMHgwMjAwMDEwMn0sCisJezB4MDAwMGIwMDgsIDB4MDIwMDAxMDN9LAorCXsweDAwMDBiMDBjLCAweDAyMDAwMTA0fSwKKwl7MHgwMDAwYjAxMCwgMHgwMjAwMDIwMH0sCisJezB4MDAwMGIwMTQsIDB4MDIwMDAyMDF9LAorCXsweDAwMDBiMDE4LCAweDAyMDAwMjAyfSwKKwl7MHgwMDAwYjAxYywgMHgwMjAwMDIwM30sCisJezB4MDAwMGIwMjAsIDB4MDIwMDAyMDR9LAorCXsweDAwMDBiMDI0LCAweDAyMDAwMjA1fSwKKwl7MHgwMDAwYjAyOCwgMHgwMjAwMDIwOH0sCisJezB4MDAwMGIwMmMsIDB4MDIwMDAzMDJ9LAorCXsweDAwMDBiMDMwLCAweDAyMDAwMzAzfSwKKwl7MHgwMDAwYjAzNCwgMHgwMjAwMDMwNH0sCisJezB4MDAwMGIwMzgsIDB4MDIwMDA0MDB9LAorCXsweDAwMDBiMDNjLCAweDAyMDEwMzAwfSwKKwl7MHgwMDAwYjA0MCwgMHgwMjAxMDMwMX0sCisJezB4MDAwMGIwNDQsIDB4MDIwMTAzMDJ9LAorCXsweDAwMDBiMDQ4LCAweDAyMDAwNTAwfSwKKwl7MHgwMDAwYjA0YywgMHgwMjAxMDQwMH0sCisJezB4MDAwMGIwNTAsIDB4MDIwMjAzMDB9LAorCXsweDAwMDBiMDU0LCAweDAyMDIwMzAxfSwKKwl7MHgwMDAwYjA1OCwgMHgwMjAyMDMwMn0sCisJezB4MDAwMGIwNWMsIDB4MDIwMjAzMDN9LAorCXsweDAwMDBiMDYwLCAweDAyMDIwNDAwfSwKKwl7MHgwMDAwYjA2NCwgMHgwMjAzMDMwMH0sCisJezB4MDAwMGIwNjgsIDB4MDIwMzAzMDF9LAorCXsweDAwMDBiMDZjLCAweDAyMDMwMzAyfSwKKwl7MHgwMDAwYjA3MCwgMHgwMjAzMDMwM30sCisJezB4MDAwMGIwNzQsIDB4MDIwMzA0MDB9LAorCXsweDAwMDBiMDc4LCAweDAyMDQwMzAwfSwKKwl7MHgwMDAwYjA3YywgMHgwMjA0MDMwMX0sCisJezB4MDAwMGIwODAsIDB4MDIwNDAzMDJ9LAorCXsweDAwMDBiMDg0LCAweDAyMDQwMzAzfSwKKwl7MHgwMDAwYjA4OCwgMHgwMjAzMDUwMH0sCisJezB4MDAwMGIwOGMsIDB4MDIwNDA0MDB9LAorCXsweDAwMDBiMDkwLCAweDAyMDUwMjAzfSwKKwl7MHgwMDAwYjA5NCwgMHgwMjA1MDIwNH0sCisJezB4MDAwMGIwOTgsIDB4MDIwNTAyMDV9LAorCXsweDAwMDBiMDljLCAweDAyMDQwNTAwfSwKKwl7MHgwMDAwYjBhMCwgMHgwMjA1MDMwMX0sCisJezB4MDAwMGIwYTQsIDB4MDIwNTAzMDJ9LAorCXsweDAwMDBiMGE4LCAweDAyMDUwMzAzfSwKKwl7MHgwMDAwYjBhYywgMHgwMjA1MDQwMH0sCisJezB4MDAwMGIwYjAsIDB4MDIwNTA0MDF9LAorCXsweDAwMDBiMGI0LCAweDAyMDUwNDAyfSwKKwl7MHgwMDAwYjBiOCwgMHgwMjA1MDQwM30sCisJezB4MDAwMGIwYmMsIDB4MDIwNTA1MDB9LAorCXsweDAwMDBiMGMwLCAweDAyMDUwNTAxfSwKKwl7MHgwMDAwYjBjNCwgMHgwMjA1MDUwMn0sCisJezB4MDAwMGIwYzgsIDB4MDIwNTA1MDN9LAorCXsweDAwMDBiMGNjLCAweDAyMDUwNTA0fSwKKwl7MHgwMDAwYjBkMCwgMHgwMjA1MDYwMH0sCisJezB4MDAwMGIwZDQsIDB4MDIwNTA2MDF9LAorCXsweDAwMDBiMGQ4LCAweDAyMDUwNjAyfSwKKwl7MHgwMDAwYjBkYywgMHgwMjA1MDYwM30sCisJezB4MDAwMGIwZTAsIDB4MDIwNTA2MDR9LAorCXsweDAwMDBiMGU0LCAweDAyMDUwNzAwfSwKKwl7MHgwMDAwYjBlOCwgMHgwMjA1MDcwMX0sCisJezB4MDAwMGIwZWMsIDB4MDIwNTA3MDJ9LAorCXsweDAwMDBiMGYwLCAweDAyMDUwNzAzfSwKKwl7MHgwMDAwYjBmNCwgMHgwMjA1MDcwNH0sCisJezB4MDAwMGIwZjgsIDB4MDIwNTA3MDV9LAorCXsweDAwMDBiMGZjLCAweDAyMDUwNzA4fSwKKwl7MHgwMDAwYjEwMCwgMHgwMjA1MDcwOX0sCisJezB4MDAwMGIxMDQsIDB4MDIwNTA3MGF9LAorCXsweDAwMDBiMTA4LCAweDAyMDUwNzBifSwKKwl7MHgwMDAwYjEwYywgMHgwMjA1MDcwY30sCisJezB4MDAwMGIxMTAsIDB4MDIwNTA3MGR9LAorCXsweDAwMDBiMTE0LCAweDAyMDUwNzEwfSwKKwl7MHgwMDAwYjExOCwgMHgwMjA1MDcxMX0sCisJezB4MDAwMGIxMWMsIDB4MDIwNTA3MTJ9LAorCXsweDAwMDBiMTIwLCAweDAyMDUwNzEzfSwKKwl7MHgwMDAwYjEyNCwgMHgwMjA1MDcxNH0sCisJezB4MDAwMGIxMjgsIDB4MDIwNTA3MTV9LAorCXsweDAwMDBiMTJjLCAweDAyMDUwNzMwfSwKKwl7MHgwMDAwYjEzMCwgMHgwMjA1MDczMX0sCisJezB4MDAwMGIxMzQsIDB4MDIwNTA3MzJ9LAorCXsweDAwMDBiMTM4LCAweDAyMDUwNzMzfSwKKwl7MHgwMDAwYjEzYywgMHgwMjA1MDczNH0sCisJezB4MDAwMGIxNDAsIDB4MDIwNTA3MzV9LAorCXsweDAwMDBiMTQ0LCAweDAyMDUwNzUwfSwKKwl7MHgwMDAwYjE0OCwgMHgwMjA1MDc1MX0sCisJezB4MDAwMGIxNGMsIDB4MDIwNTA3NTJ9LAorCXsweDAwMDBiMTUwLCAweDAyMDUwNzUzfSwKKwl7MHgwMDAwYjE1NCwgMHgwMjA1MDc1NH0sCisJezB4MDAwMGIxNTgsIDB4MDIwNTA3NTV9LAorCXsweDAwMDBiMTVjLCAweDAyMDUwNzcwfSwKKwl7MHgwMDAwYjE2MCwgMHgwMjA1MDc3MX0sCisJezB4MDAwMGIxNjQsIDB4MDIwNTA3NzJ9LAorCXsweDAwMDBiMTY4LCAweDAyMDUwNzczfSwKKwl7MHgwMDAwYjE2YywgMHgwMjA1MDc3NH0sCisJezB4MDAwMGIxNzAsIDB4MDIwNTA3NzV9LAorCXsweDAwMDBiMTc0LCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYjE3OCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGIxN2MsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBiMTgwLCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYjE4NCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGIxODgsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBiMThjLCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYjE5MCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGIxOTQsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBiMTk4LCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYjE5YywgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGIxYTAsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBiMWE0LCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYjFhOCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGIxYWMsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBiMWIwLCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYjFiNCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGIxYjgsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBiMWJjLCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYjFjMCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGIxYzQsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBiMWM4LCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYjFjYywgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGIxZDAsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBiMWQ0LCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYjFkOCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGIxZGMsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBiMWUwLCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYjFlNCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGIxZTgsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBiMWVjLCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYjFmMCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGIxZjQsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBiMWY4LCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYjFmYywgMHgwMDAwMDc3Nn0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTMwMF8ycDBfbWFjX3Bvc3RhbWJsZVtdWzVdID0geworCS8qIEFkZHIgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICAgKi8KKwl7MHgwMDAwMTAzMCwgMHgwMDAwMDIzMCwgMHgwMDAwMDQ2MCwgMHgwMDAwMDJjMCwgMHgwMDAwMDE2MH0sCisJezB4MDAwMDEwNzAsIDB4MDAwMDAxNjgsIDB4MDAwMDAyZDAsIDB4MDAwMDAzMTgsIDB4MDAwMDAxOGN9LAorCXsweDAwMDAxMGIwLCAweDAwMDAwZTYwLCAweDAwMDAxY2MwLCAweDAwMDA3YzcwLCAweDAwMDAzZTM4fSwKKwl7MHgwMDAwODAxNCwgMHgwM2U4MDNlOCwgMHgwN2QwMDdkMCwgMHgxMDgwMTYwMCwgMHgwODQwMGIwMH0sCisJezB4MDAwMDgwMWMsIDB4MTI4ZDgwMjcsIDB4MTI4ZDgwNGYsIDB4MTJlMDAwNTcsIDB4MTJlMDAwMmJ9LAorCXsweDAwMDA4MTIwLCAweDA4ZjA0ODAwLCAweDA4ZjA0ODAwLCAweDA4ZjA0ODEwLCAweDA4ZjA0ODEwfSwKKwl7MHgwMDAwODFkMCwgMHgwMDAwMzIxMCwgMHgwMDAwMzIxMCwgMHgwMDAwMzIwYSwgMHgwMDAwMzIwYX0sCisJezB4MDAwMDgzMTgsIDB4MDAwMDNlODAsIDB4MDAwMDdkMDAsIDB4MDAwMDY4ODAsIDB4MDAwMDM0NDB9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhcjkzMDBfMnAwX3NvY19wb3N0YW1ibGVbXVs1XSA9IHsKKwkvKiBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAgMkdfSFQyMCAgICovCisJezB4MDAwMDcwMTAsIDB4MDAwMDAwMjMsIDB4MDAwMDAwMjMsIDB4MDAwMDAwMjMsIDB4MDAwMDAwMjN9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhcjkyMDBfbWVybGluXzJwMF9yYWRpb19jb3JlW11bMl0gPSB7CisJLyogQWRkciAgICAgIGFsbG1vZGVzICAqLworCXsweDAwMDA3ODAwLCAweDAwMDQwMDAwfSwKKwl7MHgwMDAwNzgwNCwgMHhkYjAwNTAxMn0sCisJezB4MDAwMDc4MDgsIDB4MDQ5MjQ5MTR9LAorCXsweDAwMDA3ODBjLCAweDIxMDg0MjEwfSwKKwl7MHgwMDAwNzgxMCwgMHg2ZDgwMTMwMH0sCisJezB4MDAwMDc4MTQsIDB4MDAxOWJlZmZ9LAorCXsweDAwMDA3ODE4LCAweDA3ZTQxMDAwfSwKKwl7MHgwMDAwNzgxYywgMHgwMDM5MjAwMH0sCisJezB4MDAwMDc4MjAsIDB4OTI1OTI0ODB9LAorCXsweDAwMDA3ODI0LCAweDAwMDQwMDAwfSwKKwl7MHgwMDAwNzgyOCwgMHhkYjAwNTAxMn0sCisJezB4MDAwMDc4MmMsIDB4MDQ5MjQ5MTR9LAorCXsweDAwMDA3ODMwLCAweDIxMDg0MjEwfSwKKwl7MHgwMDAwNzgzNCwgMHg2ZDgwMTMwMH0sCisJezB4MDAwMDc4MzgsIDB4MDAxOWJlZmZ9LAorCXsweDAwMDA3ODNjLCAweDA3ZTQwMDAwfSwKKwl7MHgwMDAwNzg0MCwgMHgwMDM5MjAwMH0sCisJezB4MDAwMDc4NDQsIDB4OTI1OTI0ODB9LAorCXsweDAwMDA3ODQ4LCAweDAwMTAwMDAwfSwKKwl7MHgwMDAwNzg0YywgMHg3NzNmMDU2N30sCisJezB4MDAwMDc4NTAsIDB4NTQyMTQ1MTR9LAorCXsweDAwMDA3ODU0LCAweDEyMDM1ODI4fSwKKwl7MHgwMDAwNzg1OCwgMHg5MjU5MjY5Mn0sCisJezB4MDAwMDc4NWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA3ODYwLCAweDU2NDAwMDAwfSwKKwl7MHgwMDAwNzg2NCwgMHgwYThlMzcwZX0sCisJezB4MDAwMDc4NjgsIDB4YzAxMDI4NTB9LAorCXsweDAwMDA3ODZjLCAweDgxMmQ0MDAwfSwKKwl7MHgwMDAwNzg3MCwgMHg4MDdlYzQwMH0sCisJezB4MDAwMDc4NzQsIDB4MDAxYjZkYjB9LAorCXsweDAwMDA3ODc4LCAweDAwMzc2YjYzfSwKKwl7MHgwMDAwNzg3YywgMHgwNmRiNmRiNn0sCisJezB4MDAwMDc4ODAsIDB4MDA2ZDgwMDB9LAorCXsweDAwMDA3ODg0LCAweGZmZWZmZmZlfSwKKwl7MHgwMDAwNzg4OCwgMHhmZmVmZmZmZX0sCisJezB4MDAwMDc4OGMsIDB4MDAwMTAwMDB9LAorCXsweDAwMDA3ODkwLCAweDAyMDYwYWVifSwKKwl7MHgwMDAwNzg5NCwgMHg1YTEwODAwMH0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTMwMF8ycDBfYmFzZWJhbmRfcG9zdGFtYmxlW11bNV0gPSB7CisJLyogQWRkciAgICAgIDVHX0hUMjAgICAgIDVHX0hUNDAgICAgIDJHX0hUNDAgICAgIDJHX0hUMjAgICAqLworCXsweDAwMDA5ODEwLCAweGQwMGE4MDA1LCAweGQwMGE4MDA1LCAweGQwMGE4MDExLCAweGQwMGE4MDExfSwKKwl7MHgwMDAwOTgyMCwgMHgyMDZhMDIyZSwgMHgyMDZhMDIyZSwgMHgyMDZhMDEyZSwgMHgyMDZhMDEyZX0sCisJezB4MDAwMDk4MjQsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDB9LAorCXsweDAwMDA5ODI4LCAweDA2OTAzMDgxLCAweDA2OTAzMDgxLCAweDA2OTAzODgxLCAweDA2OTAzODgxfSwKKwl7MHgwMDAwOTgyYywgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNH0sCisJezB4MDAwMDk4MzAsIDB4MDAwMDA1OWMsIDB4MDAwMDA1OWMsIDB4MDAwMDExOWMsIDB4MDAwMDExOWN9LAorCXsweDAwMDA5YzAwLCAweDAwMDAwMDQ0LCAweDAwMDAwMGM0LCAweDAwMDAwMGM0LCAweDAwMDAwMDQ0fSwKKwl7MHgwMDAwOWUwMCwgMHgwMzcyMTYxZSwgMHgwMzcyMTYxZSwgMHgwMzcyMTZhMCwgMHgwMzcyMTZhMH0sCisJezB4MDAwMDllMDQsIDB4MDA4MDIwMjAsIDB4MDA4MDIwMjAsIDB4MDA4MDIwMjAsIDB4MDA4MDIwMjB9LAorCXsweDAwMDA5ZTBjLCAweDZjNDAwMGUyLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyLCAweDZjNDAwMGUyfSwKKwl7MHgwMDAwOWUxMCwgMHg3ZWM4OGQyZSwgMHg3ZWM4OGQyZSwgMHg3ZWM4NGQyZSwgMHg3ZWM4NGQyZX0sCisJezB4MDAwMDllMTQsIDB4MzEzOTVkNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTVkNWV9LAorCXsweDAwMDA5ZTE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWUxYywgMHgwMDAxY2Y5YywgMHgwMDAxY2Y5YywgMHgwMDAyMWY5YywgMHgwMDAyMWY5Y30sCisJezB4MDAwMDllMjAsIDB4MDAwMDAzYjUsIDB4MDAwMDAzYjUsIDB4MDAwMDAzY2UsIDB4MDAwMDAzY2V9LAorCXsweDAwMDA5ZTJjLCAweDAwMDAwMDFjLCAweDAwMDAwMDFjLCAweDAwMDAwMDIxLCAweDAwMDAwMDIxfSwKKwl7MHgwMDAwOWU0NCwgMHgwMjMyMWUyNywgMHgwMjMyMWUyNywgMHgwMjI5MWUyNywgMHgwMjI5MWUyN30sCisJezB4MDAwMDllNDgsIDB4NTAzMDIwMWEsIDB4NTAzMDIwMWEsIDB4NTAzMDIwMTIsIDB4NTAzMDIwMTJ9LAorCXsweDAwMDA5ZmM4LCAweDAwMDNmMDAwLCAweDAwMDNmMDAwLCAweDAwMDFhMDAwLCAweDAwMDFhMDAwfSwKKwl7MHgwMDAwYTIwNCwgMHgwMDAwMzdjMCwgMHgwMDAwMzdjNCwgMHgwMDAwMzdjNCwgMHgwMDAwMzdjMH0sCisJezB4MDAwMGEyMDgsIDB4MDAwMDAxMDQsIDB4MDAwMDAxMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDR9LAorCXsweDAwMDBhMjMwLCAweDAwMDAwMDBhLCAweDAwMDAwMDE0LCAweDAwMDAwMDE2LCAweDAwMDAwMDBifSwKKwl7MHgwMDAwYTIzOCwgMHhmZmI4MTAxOCwgMHhmZmI4MTAxOCwgMHhmZmI4MTAxOCwgMHhmZmI4MTAxOH0sCisJezB4MDAwMGEyNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAyMTAsIDB4MDAwMDAxMDh9LAorCXsweDAwMDBhMjU0LCAweDAwMDAwN2QwLCAweDAwMDAwZmEwLCAweDAwMDAxMTMwLCAweDAwMDAwODk4fSwKKwl7MHgwMDAwYTI1OCwgMHgwMjAyMDAwMiwgMHgwMjAyMDAwMiwgMHgwMjAyMDAwMiwgMHgwMjAyMDAwMn0sCisJezB4MDAwMGEyNWMsIDB4MDEwMDBlMGUsIDB4MDEwMDBlMGUsIDB4MDEwMDBlMGUsIDB4MDEwMDBlMGV9LAorCXsweDAwMDBhMjYwLCAweDBhMDIxNTAxLCAweDBhMDIxNTAxLCAweDNhMDIxNTAxLCAweDNhMDIxNTAxfSwKKwl7MHgwMDAwYTI2NCwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZX0sCisJezB4MDAwMGEyODAsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGJ9LAorCXsweDAwMDBhMjg0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMTUwLCAweDAwMDAwMTUwfSwKKwl7MHgwMDAwYTI4OCwgMHgwMDAwMDExMCwgMHgwMDAwMDExMCwgMHgwMDAwMDExMCwgMHgwMDAwMDExMH0sCisJezB4MDAwMGEyOGMsIDB4MDAwMjIyMjIsIDB4MDAwMjIyMjIsIDB4MDAwMjIyMjIsIDB4MDAwMjIyMjJ9LAorCXsweDAwMDBhMmM0LCAweDAwMTU4ZDE4LCAweDAwMTU4ZDE4LCAweDAwMTU4ZDE4LCAweDAwMTU4ZDE4fSwKKwl7MHgwMDAwYTJkMCwgMHgwMDA3MTk4MSwgMHgwMDA3MTk4MSwgMHgwMDA3MTk4MSwgMHgwMDA3MTk4Mn0sCisJezB4MDAwMGEyZDgsIDB4Zjk5OWE4M2EsIDB4Zjk5OWE4M2EsIDB4Zjk5OWE4M2EsIDB4Zjk5OWE4M2F9LAorCXsweDAwMDBhMzU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTgzMCwgMHgwMDAwMDE5YywgMHgwMDAwMDE5YywgMHgwMDAwMDE5YywgMHgwMDAwMDE5Y30sCisJezB4MDAwMGFlMDQsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDB9LAorCXsweDAwMDBhZTE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWUxYywgMHgwMDAwMDE5YywgMHgwMDAwMDE5YywgMHgwMDAwMDE5YywgMHgwMDAwMDE5Y30sCisJezB4MDAwMGFlMjAsIDB4MDAwMDAxYjUsIDB4MDAwMDAxYjUsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2V9LAorCXsweDAwMDBiMjg0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMTUwLCAweDAwMDAwMTUwfSwKKwl7MHgwMDAwYjgzMCwgMHgwMDAwMDE5YywgMHgwMDAwMDE5YywgMHgwMDAwMDE5YywgMHgwMDAwMDE5Y30sCisJezB4MDAwMGJlMDQsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDB9LAorCXsweDAwMDBiZTE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYmUxYywgMHgwMDAwMDE5YywgMHgwMDAwMDE5YywgMHgwMDAwMDE5YywgMHgwMDAwMDE5Y30sCisJezB4MDAwMGJlMjAsIDB4MDAwMDAxYjUsIDB4MDAwMDAxYjUsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2V9LAorCXsweDAwMDBjMjg0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMTUwLCAweDAwMDAwMTUwfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzAwXzJwMF9iYXNlYmFuZF9jb3JlW11bMl0gPSB7CisJLyogQWRkciAgICAgIGFsbG1vZGVzICAqLworCXsweDAwMDA5ODAwLCAweGFmZTY4ZTMwfSwKKwl7MHgwMDAwOTgwNCwgMHhmZDE0ZTAwMH0sCisJezB4MDAwMDk4MDgsIDB4OWMwYTlmNmJ9LAorCXsweDAwMDA5ODBjLCAweDA0OTAwMDAwfSwKKwl7MHgwMDAwOTgxNCwgMHg5MjgwYzAwYX0sCisJezB4MDAwMDk4MTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODFjLCAweDAwMDIwMDI4fSwKKwl7MHgwMDAwOTgzNCwgMHg1ZjNjYTNkZX0sCisJezB4MDAwMDk4MzgsIDB4MDEwOGVjZmZ9LAorCXsweDAwMDA5ODNjLCAweDE0NzUwNjAwfSwKKwl7MHgwMDAwOTg4MCwgMHgyMDFmZmYwMH0sCisJezB4MDAwMDk4ODQsIDB4MDAwMDEwNDJ9LAorCXsweDAwMDA5OGE0LCAweDAwMjAwNDAwfSwKKwl7MHgwMDAwOThiMCwgMHg1MjQ0MGJiZX0sCisJezB4MDAwMDk4ZDAsIDB4MDA0YjZhOGV9LAorCXsweDAwMDA5OGQ0LCAweDAwMDAwODIwfSwKKwl7MHgwMDAwOThkYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4ZjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OGY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWMwNCwgMHhmZjU1ZmY1NX0sCisJezB4MDAwMDljMDgsIDB4MDMyMGZmNTV9LAorCXsweDAwMDA5YzBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWMxMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDljMTQsIDB4MDAwNDYzODR9LAorCXsweDAwMDA5YzE4LCAweDA1YjZiNDQwfSwKKwl7MHgwMDAwOWMxYywgMHgwMGI2YjQ0MH0sCisJezB4MDAwMDlkMDAsIDB4YzA4MGEzMzN9LAorCXsweDAwMDA5ZDA0LCAweDQwMjA2YzEwfSwKKwl7MHgwMDAwOWQwOCwgMHgwMDljNDA2MH0sCisJezB4MDAwMDlkMGMsIDB4OTg4MzgwMGF9LAorCXsweDAwMDA5ZDEwLCAweDAxODM0MDYxfSwKKwl7MHgwMDAwOWQxNCwgMHgwMGMwMDQwYn0sCisJezB4MDAwMDlkMTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ZTA4LCAweDAwMzgyMzBjfSwKKwl7MHgwMDAwOWUyNCwgMHg5OTBiYjUxNX0sCisJezB4MDAwMDllMjgsIDB4MGM2ZjAwMDB9LAorCXsweDAwMDA5ZTMwLCAweDA2MzM2Zjc3fSwKKwl7MHgwMDAwOWUzNCwgMHg2YWY2NTMyZn0sCisJezB4MDAwMDllMzgsIDB4MGNjODBjMDB9LAorCXsweDAwMDA5ZTNjLCAweGNmOTQ2MjIyfSwKKwl7MHgwMDAwOWU0MCwgMHgwZDI2MTgyMH0sCisJezB4MDAwMDllNGMsIDB4MDAwMDEwMDR9LAorCXsweDAwMDA5ZTUwLCAweDAwZmYwM2YxfSwKKwl7MHgwMDAwOWU1NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlmYzAsIDB4ODAzZTQ3ODh9LAorCXsweDAwMDA5ZmM0LCAweDAwMDFlZmI1fSwKKwl7MHgwMDAwOWZjYywgMHg0MDAwMDAxNH0sCisJezB4MDAwMDlmZDAsIDB4MDExOTNiOTN9LAorCXsweDAwMDBhMjBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTIyMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyMjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMjI4LCAweDEwMDAyMzEwfSwKKwl7MHgwMDAwYTIyYywgMHgwMTAzNmExZX0sCisJezB4MDAwMGEyMzQsIDB4MTAwMDBmZmZ9LAorCXsweDAwMDBhMjNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTI0NCwgMHgwYzAwMDAwMH0sCisJezB4MDAwMGEyYTAsIDB4MDAwMDAwMDF9LAorCXsweDAwMDBhMmMwLCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwYTJjOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyY2MsIDB4MThjNDM0MzN9LAorCXsweDAwMDBhMmQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTJkYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyZTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMmU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTJlOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyZWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMmYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTJmNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTM0YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzNTAsIDB4MDAwMGEwMDB9LAorCXsweDAwMDBhMzY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTM3MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzOTAsIDB4MDAwMDAwMDF9LAorCXsweDAwMDBhMzk0LCAweDAwMDAwNDQ0fSwKKwl7MHgwMDAwYTM5OCwgMHgwMDFmMGUwZn0sCisJezB4MDAwMGEzOWMsIDB4MDA3NTM5M2Z9LAorCXsweDAwMDBhM2EwLCAweGI3OWY2NDI3fSwKKwl7MHgwMDAwYTNhNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzYTgsIDB4YWFhYWFhYWF9LAorCXsweDAwMDBhM2FjLCAweDNjNDY2NDc4fSwKKwl7MHgwMDAwYTNjMCwgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzYzQsIDB4MjIyMjIyMjB9LAorCXsweDAwMDBhM2M4LCAweDIwMjAwMDIwfSwKKwl7MHgwMDAwYTNjYywgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzZDAsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2Q0LCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTNkOCwgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzZGMsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2UwLCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTNlNCwgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzZTgsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2VjLCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTNmMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzZjQsIDB4MDAwMDAyNDZ9LAorCXsweDAwMDBhM2Y4LCAweDBjZGJkMzgwfSwKKwl7MHgwMDAwYTNmYywgMHgwMDBmMGYwMX0sCisJezB4MDAwMGE0MDAsIDB4OGZhOTFmMDF9LAorCXsweDAwMDBhNDA0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTQwOCwgMHgwZTc5ZTVjNn0sCisJezB4MDAwMGE0MGMsIDB4MDA4MjA4MjB9LAorCXsweDAwMDBhNDE0LCAweDFjZTczOWNlfSwKKwl7MHgwMDAwYTQxOCwgMHgyZDAwMWRjZX0sCisJezB4MDAwMGE0MWMsIDB4MWNlNzM5Y2V9LAorCXsweDAwMDBhNDIwLCAweDAwMDAwMWNlfSwKKwl7MHgwMDAwYTQyNCwgMHgxY2U3MzljZX0sCisJezB4MDAwMGE0MjgsIDB4MDAwMDAxY2V9LAorCXsweDAwMDBhNDJjLCAweDFjZTczOWNlfSwKKwl7MHgwMDAwYTQzMCwgMHgxY2U3MzljZX0sCisJezB4MDAwMGE0MzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNDM4LCAweDAwMDAxODAxfSwKKwl7MHgwMDAwYTQzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE0NDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNDQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTQ0OCwgMHgwNDAwMDA4MH0sCisJezB4MDAwMGE0NGMsIDB4MDAwMDAwMDF9LAorCXsweDAwMDBhNDUwLCAweDAwMDEwMDAwfSwKKwl7MHgwMDAwYTQ1OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2MDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjA0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTYwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2MGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTYxNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2MTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTYyMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2MjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTYyYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2MzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTYzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2M2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTY0NCwgMHgzZmFkOWQ3NH0sCisJezB4MDAwMGE2NDgsIDB4MDA0ODA2MGF9LAorCXsweDAwMDBhNjRjLCAweDAwMDAwNjM3fSwKKwl7MHgwMDAwYTY3MCwgMHgwMzAyMDEwMH0sCisJezB4MDAwMGE2NzQsIDB4MDkwODA1MDR9LAorCXsweDAwMDBhNjc4LCAweDBkMGMwYjBhfSwKKwl7MHgwMDAwYTY3YywgMHgxMzEyMTExMH0sCisJezB4MDAwMGE2ODAsIDB4MzEzMDE1MTR9LAorCXsweDAwMDBhNjg0LCAweDM1MzQzMzMyfSwKKwl7MHgwMDAwYTY4OCwgMHgwMDAwMDAzNn0sCisJezB4MDAwMGE2OTAsIDB4MDAwMDA4Mzh9LAorCXsweDAwMDBhN2MwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTdjNCwgMHhmZmZmZmZmY30sCisJezB4MDAwMGE3YzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhN2NjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTdkMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE3ZDQsIDB4MDAwMDAwMDR9LAorCXsweDAwMDBhN2RjLCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwYThkMCwgMHgwMDRiNmE4ZX0sCisJezB4MDAwMGE4ZDQsIDB4MDAwMDA4MjB9LAorCXsweDAwMDBhOGRjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYThmMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE4ZjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMmQwLCAweDAwMDAwMDgwfSwKKwl7MHgwMDAwYjJkNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIyZGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMmUwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjJlNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIyZTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMmVjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjJmMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIyZjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMmY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjQwOCwgMHgwZTc5ZTVjMH0sCisJezB4MDAwMGI0MGMsIDB4MDA4MjA4MjB9LAorCXsweDAwMDBiNDIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjhkMCwgMHgwMDRiNmE4ZX0sCisJezB4MDAwMGI4ZDQsIDB4MDAwMDA4MjB9LAorCXsweDAwMDBiOGRjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjhmMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGI4ZjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBjMmQwLCAweDAwMDAwMDgwfSwKKwl7MHgwMDAwYzJkNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGMyZGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBjMmUwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYzJlNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGMyZTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBjMmVjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYzJmMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGMyZjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBjMmY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYzQwOCwgMHgwZTc5ZTVjMH0sCisJezB4MDAwMGM0MGMsIDB4MDA4MjA4MjB9LAorCXsweDAwMDBjNDIwLCAweDAwMDAwMDAwfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzAwTW9kZXNfaGlnaF9wb3dlcl90eF9nYWluX3RhYmxlXzJwMFtdWzVdID0geworCS8qIEFkZHIgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICAgKi8KKwl7MHgwMDAwYTQxMCwgMHgwMDAwNTBkOCwgMHgwMDAwNTBkOCwgMHgwMDAwNTBkOSwgMHgwMDAwNTBkOX0sCisJezB4MDAwMGE1MDAsIDB4MDAwMDIyMjAsIDB4MDAwMDIyMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNTA0LCAweDA0MDAyMjIyLCAweDA0MDAyMjIyLCAweDA0MDAwMDAyLCAweDA0MDAwMDAyfSwKKwl7MHgwMDAwYTUwOCwgMHgwOTAwMjQyMSwgMHgwOTAwMjQyMSwgMHgwODAwMDAwNCwgMHgwODAwMDAwNH0sCisJezB4MDAwMGE1MGMsIDB4MGQwMDI2MjEsIDB4MGQwMDI2MjEsIDB4MGIwMDAyMDAsIDB4MGIwMDAyMDB9LAorCXsweDAwMDBhNTEwLCAweDEzMDA0NjIwLCAweDEzMDA0NjIwLCAweDBmMDAwMjAyLCAweDBmMDAwMjAyfSwKKwl7MHgwMDAwYTUxNCwgMHgxOTAwNGEyMCwgMHgxOTAwNGEyMCwgMHgxMTAwMDQwMCwgMHgxMTAwMDQwMH0sCisJezB4MDAwMGE1MTgsIDB4MWQwMDRlMjAsIDB4MWQwMDRlMjAsIDB4MTUwMDA0MDIsIDB4MTUwMDA0MDJ9LAorCXsweDAwMDBhNTFjLCAweDIxMDA1NDIwLCAweDIxMDA1NDIwLCAweDE5MDAwNDA0LCAweDE5MDAwNDA0fSwKKwl7MHgwMDAwYTUyMCwgMHgyNjAwNWUyMCwgMHgyNjAwNWUyMCwgMHgxYjAwMDYwMywgMHgxYjAwMDYwM30sCisJezB4MDAwMGE1MjQsIDB4MmIwMDVlNDAsIDB4MmIwMDVlNDAsIDB4MWYwMDBhMDIsIDB4MWYwMDBhMDJ9LAorCXsweDAwMDBhNTI4LCAweDJmMDA1ZTQyLCAweDJmMDA1ZTQyLCAweDIzMDAwYTA0LCAweDIzMDAwYTA0fSwKKwl7MHgwMDAwYTUyYywgMHgzMzAwNWU0NCwgMHgzMzAwNWU0NCwgMHgyNjAwMGEyMCwgMHgyNjAwMGEyMH0sCisJezB4MDAwMGE1MzAsIDB4MzgwMDVlNjUsIDB4MzgwMDVlNjUsIDB4MmEwMDBlMjAsIDB4MmEwMDBlMjB9LAorCXsweDAwMDBhNTM0LCAweDNjMDA1ZTY5LCAweDNjMDA1ZTY5LCAweDJlMDAwZTIyLCAweDJlMDAwZTIyfSwKKwl7MHgwMDAwYTUzOCwgMHg0MDAwNWU2YiwgMHg0MDAwNWU2YiwgMHgzMTAwMGUyNCwgMHgzMTAwMGUyNH0sCisJezB4MDAwMGE1M2MsIDB4NDQwMDVlNmQsIDB4NDQwMDVlNmQsIDB4MzQwMDE2NDAsIDB4MzQwMDE2NDB9LAorCXsweDAwMDBhNTQwLCAweDQ5MDA1ZTcyLCAweDQ5MDA1ZTcyLCAweDM4MDAxNjYwLCAweDM4MDAxNjYwfSwKKwl7MHgwMDAwYTU0NCwgMHg0ZTAwNWViMiwgMHg0ZTAwNWViMiwgMHgzYjAwMTg2MSwgMHgzYjAwMTg2MX0sCisJezB4MDAwMGE1NDgsIDB4NTMwMDVmMTIsIDB4NTMwMDVmMTIsIDB4M2UwMDFhODEsIDB4M2UwMDFhODF9LAorCXsweDAwMDBhNTRjLCAweDU5MDI1ZWI1LCAweDU5MDI1ZWI1LCAweDQyMDAxYTgzLCAweDQyMDAxYTgzfSwKKwl7MHgwMDAwYTU1MCwgMHg1ZTAyNWYxMiwgMHg1ZTAyNWYxMiwgMHg0NDAwMWM4NCwgMHg0NDAwMWM4NH0sCisJezB4MDAwMGE1NTQsIDB4NjEwMjdmMTIsIDB4NjEwMjdmMTIsIDB4NDgwMDFjZTMsIDB4NDgwMDFjZTN9LAorCXsweDAwMDBhNTU4LCAweDY3MDJiZjEyLCAweDY3MDJiZjEyLCAweDRjMDAxY2U1LCAweDRjMDAxY2U1fSwKKwl7MHgwMDAwYTU1YywgMHg2YjAyYmYxNCwgMHg2YjAyYmYxNCwgMHg1MDAwMWNlOSwgMHg1MDAwMWNlOX0sCisJezB4MDAwMGE1NjAsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTQwMDFjZWIsIDB4NTQwMDFjZWJ9LAorCXsweDAwMDBhNTY0LCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU2OCwgMHg2ZjAyYmYxNiwgMHg2ZjAyYmYxNiwgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1NmMsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTcwLCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU3NCwgMHg2ZjAyYmYxNiwgMHg2ZjAyYmYxNiwgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1NzgsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTdjLCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU4MCwgMHgwMDgwMjIyMCwgMHgwMDgwMjIyMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMH0sCisJezB4MDAwMGE1ODQsIDB4MDQ4MDIyMjIsIDB4MDQ4MDIyMjIsIDB4MDQ4MDAwMDIsIDB4MDQ4MDAwMDJ9LAorCXsweDAwMDBhNTg4LCAweDA5ODAyNDIxLCAweDA5ODAyNDIxLCAweDA4ODAwMDA0LCAweDA4ODAwMDA0fSwKKwl7MHgwMDAwYTU4YywgMHgwZDgwMjYyMSwgMHgwZDgwMjYyMSwgMHgwYjgwMDIwMCwgMHgwYjgwMDIwMH0sCisJezB4MDAwMGE1OTAsIDB4MTM4MDQ2MjAsIDB4MTM4MDQ2MjAsIDB4MGY4MDAyMDIsIDB4MGY4MDAyMDJ9LAorCXsweDAwMDBhNTk0LCAweDE5ODA0YTIwLCAweDE5ODA0YTIwLCAweDExODAwNDAwLCAweDExODAwNDAwfSwKKwl7MHgwMDAwYTU5OCwgMHgxZDgwNGUyMCwgMHgxZDgwNGUyMCwgMHgxNTgwMDQwMiwgMHgxNTgwMDQwMn0sCisJezB4MDAwMGE1OWMsIDB4MjE4MDU0MjAsIDB4MjE4MDU0MjAsIDB4MTk4MDA0MDQsIDB4MTk4MDA0MDR9LAorCXsweDAwMDBhNWEwLCAweDI2ODA1ZTIwLCAweDI2ODA1ZTIwLCAweDFiODAwNjAzLCAweDFiODAwNjAzfSwKKwl7MHgwMDAwYTVhNCwgMHgyYjgwNWU0MCwgMHgyYjgwNWU0MCwgMHgxZjgwMGEwMiwgMHgxZjgwMGEwMn0sCisJezB4MDAwMGE1YTgsIDB4MmY4MDVlNDIsIDB4MmY4MDVlNDIsIDB4MjM4MDBhMDQsIDB4MjM4MDBhMDR9LAorCXsweDAwMDBhNWFjLCAweDMzODA1ZTQ0LCAweDMzODA1ZTQ0LCAweDI2ODAwYTIwLCAweDI2ODAwYTIwfSwKKwl7MHgwMDAwYTViMCwgMHgzODgwNWU2NSwgMHgzODgwNWU2NSwgMHgyYTgwMGUyMCwgMHgyYTgwMGUyMH0sCisJezB4MDAwMGE1YjQsIDB4M2M4MDVlNjksIDB4M2M4MDVlNjksIDB4MmU4MDBlMjIsIDB4MmU4MDBlMjJ9LAorCXsweDAwMDBhNWI4LCAweDQwODA1ZTZiLCAweDQwODA1ZTZiLCAweDMxODAwZTI0LCAweDMxODAwZTI0fSwKKwl7MHgwMDAwYTViYywgMHg0NDgwNWU2ZCwgMHg0NDgwNWU2ZCwgMHgzNDgwMTY0MCwgMHgzNDgwMTY0MH0sCisJezB4MDAwMGE1YzAsIDB4NDk4MDVlNzIsIDB4NDk4MDVlNzIsIDB4Mzg4MDE2NjAsIDB4Mzg4MDE2NjB9LAorCXsweDAwMDBhNWM0LCAweDRlODA1ZWIyLCAweDRlODA1ZWIyLCAweDNiODAxODYxLCAweDNiODAxODYxfSwKKwl7MHgwMDAwYTVjOCwgMHg1MzgwNWYxMiwgMHg1MzgwNWYxMiwgMHgzZTgwMWE4MSwgMHgzZTgwMWE4MX0sCisJezB4MDAwMGE1Y2MsIDB4NTk4MjVlYjIsIDB4NTk4MjVlYjIsIDB4NDI4MDFhODMsIDB4NDI4MDFhODN9LAorCXsweDAwMDBhNWQwLCAweDVlODI1ZjEyLCAweDVlODI1ZjEyLCAweDQ0ODAxYzg0LCAweDQ0ODAxYzg0fSwKKwl7MHgwMDAwYTVkNCwgMHg2MTgyN2YxMiwgMHg2MTgyN2YxMiwgMHg0ODgwMWNlMywgMHg0ODgwMWNlM30sCisJezB4MDAwMGE1ZDgsIDB4Njc4MmJmMTIsIDB4Njc4MmJmMTIsIDB4NGM4MDFjZTUsIDB4NGM4MDFjZTV9LAorCXsweDAwMDBhNWRjLCAweDZiODJiZjE0LCAweDZiODJiZjE0LCAweDUwODAxY2U5LCAweDUwODAxY2U5fSwKKwl7MHgwMDAwYTVlMCwgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NDgwMWNlYiwgMHg1NDgwMWNlYn0sCisJezB4MDAwMGE1ZTQsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDBhNWU4LCAweDZmODJiZjE2LCAweDZmODJiZjE2LCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAwYTVlYywgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMGE1ZjAsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDBhNWY0LCAweDZmODJiZjE2LCAweDZmODJiZjE2LCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAwYTVmOCwgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMGE1ZmMsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDE2MDQ0LCAweDA1NmRiMmU2LCAweDA1NmRiMmU2LCAweDA1NmRiMmU2LCAweDA1NmRiMmU2fSwKKwl7MHgwMDAxNjA0OCwgMHhhZTQ4MDAwMSwgMHhhZTQ4MDAwMSwgMHhhZTQ4MDAwMSwgMHhhZTQ4MDAwMX0sCisJezB4MDAwMTYwNjgsIDB4NmViNmRiNmMsIDB4NmViNmRiNmMsIDB4NmViNmRiNmMsIDB4NmViNmRiNmN9LAorCXsweDAwMDE2NDQ0LCAweDA1NmRiMmU2LCAweDA1NmRiMmU2LCAweDA1NmRiMmU2LCAweDA1NmRiMmU2fSwKKwl7MHgwMDAxNjQ0OCwgMHhhZTQ4MDAwMSwgMHhhZTQ4MDAwMSwgMHhhZTQ4MDAwMSwgMHhhZTQ4MDAwMX0sCisJezB4MDAwMTY0NjgsIDB4NmViNmRiNmMsIDB4NmViNmRiNmMsIDB4NmViNmRiNmMsIDB4NmViNmRiNmN9LAorCXsweDAwMDE2ODQ0LCAweDA1NmRiMmU2LCAweDA1NmRiMmU2LCAweDA1NmRiMmU2LCAweDA1NmRiMmU2fSwKKwl7MHgwMDAxNjg0OCwgMHhhZTQ4MDAwMSwgMHhhZTQ4MDAwMSwgMHhhZTQ4MDAwMSwgMHhhZTQ4MDAwMX0sCisJezB4MDAwMTY4NjgsIDB4NmViNmRiNmMsIDB4NmViNmRiNmMsIDB4NmViNmRiNmMsIDB4NmViNmRiNmN9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhcjkzMDBNb2Rlc19oaWdoX29iX2RiX3R4X2dhaW5fdGFibGVfMnAwW11bNV0gPSB7CisJLyogQWRkciAgICAgIDVHX0hUMjAgICAgIDVHX0hUNDAgICAgIDJHX0hUNDAgICAgIDJHX0hUMjAgICAqLworCXsweDAwMDBhNDEwLCAweDAwMDA1MGQ4LCAweDAwMDA1MGQ4LCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5fSwKKwl7MHgwMDAwYTUwMCwgMHgwMDAwMjIyMCwgMHgwMDAwMjIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE1MDQsIDB4MDQwMDIyMjIsIDB4MDQwMDIyMjIsIDB4MDQwMDAwMDIsIDB4MDQwMDAwMDJ9LAorCXsweDAwMDBhNTA4LCAweDA5MDAyNDIxLCAweDA5MDAyNDIxLCAweDA4MDAwMDA0LCAweDA4MDAwMDA0fSwKKwl7MHgwMDAwYTUwYywgMHgwZDAwMjYyMSwgMHgwZDAwMjYyMSwgMHgwYjAwMDIwMCwgMHgwYjAwMDIwMH0sCisJezB4MDAwMGE1MTAsIDB4MTMwMDQ2MjAsIDB4MTMwMDQ2MjAsIDB4MGYwMDAyMDIsIDB4MGYwMDAyMDJ9LAorCXsweDAwMDBhNTE0LCAweDE5MDA0YTIwLCAweDE5MDA0YTIwLCAweDExMDAwNDAwLCAweDExMDAwNDAwfSwKKwl7MHgwMDAwYTUxOCwgMHgxZDAwNGUyMCwgMHgxZDAwNGUyMCwgMHgxNTAwMDQwMiwgMHgxNTAwMDQwMn0sCisJezB4MDAwMGE1MWMsIDB4MjEwMDU0MjAsIDB4MjEwMDU0MjAsIDB4MTkwMDA0MDQsIDB4MTkwMDA0MDR9LAorCXsweDAwMDBhNTIwLCAweDI2MDA1ZTIwLCAweDI2MDA1ZTIwLCAweDFiMDAwNjAzLCAweDFiMDAwNjAzfSwKKwl7MHgwMDAwYTUyNCwgMHgyYjAwNWU0MCwgMHgyYjAwNWU0MCwgMHgxZjAwMGEwMiwgMHgxZjAwMGEwMn0sCisJezB4MDAwMGE1MjgsIDB4MmYwMDVlNDIsIDB4MmYwMDVlNDIsIDB4MjMwMDBhMDQsIDB4MjMwMDBhMDR9LAorCXsweDAwMDBhNTJjLCAweDMzMDA1ZTQ0LCAweDMzMDA1ZTQ0LCAweDI2MDAwYTIwLCAweDI2MDAwYTIwfSwKKwl7MHgwMDAwYTUzMCwgMHgzODAwNWU2NSwgMHgzODAwNWU2NSwgMHgyYTAwMGUyMCwgMHgyYTAwMGUyMH0sCisJezB4MDAwMGE1MzQsIDB4M2MwMDVlNjksIDB4M2MwMDVlNjksIDB4MmUwMDBlMjIsIDB4MmUwMDBlMjJ9LAorCXsweDAwMDBhNTM4LCAweDQwMDA1ZTZiLCAweDQwMDA1ZTZiLCAweDMxMDAwZTI0LCAweDMxMDAwZTI0fSwKKwl7MHgwMDAwYTUzYywgMHg0NDAwNWU2ZCwgMHg0NDAwNWU2ZCwgMHgzNDAwMTY0MCwgMHgzNDAwMTY0MH0sCisJezB4MDAwMGE1NDAsIDB4NDkwMDVlNzIsIDB4NDkwMDVlNzIsIDB4MzgwMDE2NjAsIDB4MzgwMDE2NjB9LAorCXsweDAwMDBhNTQ0LCAweDRlMDA1ZWIyLCAweDRlMDA1ZWIyLCAweDNiMDAxODYxLCAweDNiMDAxODYxfSwKKwl7MHgwMDAwYTU0OCwgMHg1MzAwNWYxMiwgMHg1MzAwNWYxMiwgMHgzZTAwMWE4MSwgMHgzZTAwMWE4MX0sCisJezB4MDAwMGE1NGMsIDB4NTkwMjVlYjUsIDB4NTkwMjVlYjUsIDB4NDIwMDFhODMsIDB4NDIwMDFhODN9LAorCXsweDAwMDBhNTUwLCAweDVlMDI1ZjEyLCAweDVlMDI1ZjEyLCAweDQ0MDAxYzg0LCAweDQ0MDAxYzg0fSwKKwl7MHgwMDAwYTU1NCwgMHg2MTAyN2YxMiwgMHg2MTAyN2YxMiwgMHg0ODAwMWNlMywgMHg0ODAwMWNlM30sCisJezB4MDAwMGE1NTgsIDB4NjcwMmJmMTIsIDB4NjcwMmJmMTIsIDB4NGMwMDFjZTUsIDB4NGMwMDFjZTV9LAorCXsweDAwMDBhNTVjLCAweDZiMDJiZjE0LCAweDZiMDJiZjE0LCAweDUwMDAxY2U5LCAweDUwMDAxY2U5fSwKKwl7MHgwMDAwYTU2MCwgMHg2ZjAyYmYxNiwgMHg2ZjAyYmYxNiwgMHg1NDAwMWNlYiwgMHg1NDAwMWNlYn0sCisJezB4MDAwMGE1NjQsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTY4LCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU2YywgMHg2ZjAyYmYxNiwgMHg2ZjAyYmYxNiwgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1NzAsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTc0LCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU3OCwgMHg2ZjAyYmYxNiwgMHg2ZjAyYmYxNiwgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1N2MsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTgwLCAweDAwODAyMjIwLCAweDAwODAyMjIwLCAweDAwODAwMDAwLCAweDAwODAwMDAwfSwKKwl7MHgwMDAwYTU4NCwgMHgwNDgwMjIyMiwgMHgwNDgwMjIyMiwgMHgwNDgwMDAwMiwgMHgwNDgwMDAwMn0sCisJezB4MDAwMGE1ODgsIDB4MDk4MDI0MjEsIDB4MDk4MDI0MjEsIDB4MDg4MDAwMDQsIDB4MDg4MDAwMDR9LAorCXsweDAwMDBhNThjLCAweDBkODAyNjIxLCAweDBkODAyNjIxLCAweDBiODAwMjAwLCAweDBiODAwMjAwfSwKKwl7MHgwMDAwYTU5MCwgMHgxMzgwNDYyMCwgMHgxMzgwNDYyMCwgMHgwZjgwMDIwMiwgMHgwZjgwMDIwMn0sCisJezB4MDAwMGE1OTQsIDB4MTk4MDRhMjAsIDB4MTk4MDRhMjAsIDB4MTE4MDA0MDAsIDB4MTE4MDA0MDB9LAorCXsweDAwMDBhNTk4LCAweDFkODA0ZTIwLCAweDFkODA0ZTIwLCAweDE1ODAwNDAyLCAweDE1ODAwNDAyfSwKKwl7MHgwMDAwYTU5YywgMHgyMTgwNTQyMCwgMHgyMTgwNTQyMCwgMHgxOTgwMDQwNCwgMHgxOTgwMDQwNH0sCisJezB4MDAwMGE1YTAsIDB4MjY4MDVlMjAsIDB4MjY4MDVlMjAsIDB4MWI4MDA2MDMsIDB4MWI4MDA2MDN9LAorCXsweDAwMDBhNWE0LCAweDJiODA1ZTQwLCAweDJiODA1ZTQwLCAweDFmODAwYTAyLCAweDFmODAwYTAyfSwKKwl7MHgwMDAwYTVhOCwgMHgyZjgwNWU0MiwgMHgyZjgwNWU0MiwgMHgyMzgwMGEwNCwgMHgyMzgwMGEwNH0sCisJezB4MDAwMGE1YWMsIDB4MzM4MDVlNDQsIDB4MzM4MDVlNDQsIDB4MjY4MDBhMjAsIDB4MjY4MDBhMjB9LAorCXsweDAwMDBhNWIwLCAweDM4ODA1ZTY1LCAweDM4ODA1ZTY1LCAweDJhODAwZTIwLCAweDJhODAwZTIwfSwKKwl7MHgwMDAwYTViNCwgMHgzYzgwNWU2OSwgMHgzYzgwNWU2OSwgMHgyZTgwMGUyMiwgMHgyZTgwMGUyMn0sCisJezB4MDAwMGE1YjgsIDB4NDA4MDVlNmIsIDB4NDA4MDVlNmIsIDB4MzE4MDBlMjQsIDB4MzE4MDBlMjR9LAorCXsweDAwMDBhNWJjLCAweDQ0ODA1ZTZkLCAweDQ0ODA1ZTZkLCAweDM0ODAxNjQwLCAweDM0ODAxNjQwfSwKKwl7MHgwMDAwYTVjMCwgMHg0OTgwNWU3MiwgMHg0OTgwNWU3MiwgMHgzODgwMTY2MCwgMHgzODgwMTY2MH0sCisJezB4MDAwMGE1YzQsIDB4NGU4MDVlYjIsIDB4NGU4MDVlYjIsIDB4M2I4MDE4NjEsIDB4M2I4MDE4NjF9LAorCXsweDAwMDBhNWM4LCAweDUzODA1ZjEyLCAweDUzODA1ZjEyLCAweDNlODAxYTgxLCAweDNlODAxYTgxfSwKKwl7MHgwMDAwYTVjYywgMHg1OTgyNWViMiwgMHg1OTgyNWViMiwgMHg0MjgwMWE4MywgMHg0MjgwMWE4M30sCisJezB4MDAwMGE1ZDAsIDB4NWU4MjVmMTIsIDB4NWU4MjVmMTIsIDB4NDQ4MDFjODQsIDB4NDQ4MDFjODR9LAorCXsweDAwMDBhNWQ0LCAweDYxODI3ZjEyLCAweDYxODI3ZjEyLCAweDQ4ODAxY2UzLCAweDQ4ODAxY2UzfSwKKwl7MHgwMDAwYTVkOCwgMHg2NzgyYmYxMiwgMHg2NzgyYmYxMiwgMHg0YzgwMWNlNSwgMHg0YzgwMWNlNX0sCisJezB4MDAwMGE1ZGMsIDB4NmI4MmJmMTQsIDB4NmI4MmJmMTQsIDB4NTA4MDFjZTksIDB4NTA4MDFjZTl9LAorCXsweDAwMDBhNWUwLCAweDZmODJiZjE2LCAweDZmODJiZjE2LCAweDU0ODAxY2ViLCAweDU0ODAxY2VifSwKKwl7MHgwMDAwYTVlNCwgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMGE1ZTgsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDBhNWVjLCAweDZmODJiZjE2LCAweDZmODJiZjE2LCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAwYTVmMCwgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMGE1ZjQsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDBhNWY4LCAweDZmODJiZjE2LCAweDZmODJiZjE2LCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAwYTVmYywgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMTYwNDQsIDB4MDU2ZGIyZTQsIDB4MDU2ZGIyZTQsIDB4MDU2ZGIyZTQsIDB4MDU2ZGIyZTR9LAorCXsweDAwMDE2MDQ4LCAweDhlNDgwMDAxLCAweDhlNDgwMDAxLCAweDhlNDgwMDAxLCAweDhlNDgwMDAxfSwKKwl7MHgwMDAxNjA2OCwgMHg2ZGI2ZGI2YywgMHg2ZGI2ZGI2YywgMHg2ZGI2ZGI2YywgMHg2ZGI2ZGI2Y30sCisJezB4MDAwMTY0NDQsIDB4MDU2ZGIyZTQsIDB4MDU2ZGIyZTQsIDB4MDU2ZGIyZTQsIDB4MDU2ZGIyZTR9LAorCXsweDAwMDE2NDQ4LCAweDhlNDgwMDAxLCAweDhlNDgwMDAxLCAweDhlNDgwMDAxLCAweDhlNDgwMDAxfSwKKwl7MHgwMDAxNjQ2OCwgMHg2ZGI2ZGI2YywgMHg2ZGI2ZGI2YywgMHg2ZGI2ZGI2YywgMHg2ZGI2ZGI2Y30sCisJezB4MDAwMTY4NDQsIDB4MDU2ZGIyZTQsIDB4MDU2ZGIyZTQsIDB4MDU2ZGIyZTQsIDB4MDU2ZGIyZTR9LAorCXsweDAwMDE2ODQ4LCAweDhlNDgwMDAxLCAweDhlNDgwMDAxLCAweDhlNDgwMDAxLCAweDhlNDgwMDAxfSwKKwl7MHgwMDAxNjg2OCwgMHg2ZGI2ZGI2YywgMHg2ZGI2ZGI2YywgMHg2ZGI2ZGI2YywgMHg2ZGI2ZGI2Y30sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTMwMENvbW1vbl9yeF9nYWluX3RhYmxlXzJwMFtdWzJdID0geworCS8qIEFkZHIgICAgICBhbGxtb2RlcyAgKi8KKwl7MHgwMDAwYTAwMCwgMHgwMDAxMDAwMH0sCisJezB4MDAwMGEwMDQsIDB4MDAwMzAwMDJ9LAorCXsweDAwMDBhMDA4LCAweDAwMDUwMDA0fSwKKwl7MHgwMDAwYTAwYywgMHgwMDgxMDA4MH0sCisJezB4MDAwMGEwMTAsIDB4MDA4MzAwODJ9LAorCXsweDAwMDBhMDE0LCAweDAxODEwMTgwfSwKKwl7MHgwMDAwYTAxOCwgMHgwMTgzMDE4Mn0sCisJezB4MDAwMGEwMWMsIDB4MDE4NTAxODR9LAorCXsweDAwMDBhMDIwLCAweDAxODkwMTg4fSwKKwl7MHgwMDAwYTAyNCwgMHgwMThiMDE4YX0sCisJezB4MDAwMGEwMjgsIDB4MDE4ZDAxOGN9LAorCXsweDAwMDBhMDJjLCAweDAxOTEwMTkwfSwKKwl7MHgwMDAwYTAzMCwgMHgwMTkzMDE5Mn0sCisJezB4MDAwMGEwMzQsIDB4MDE5NTAxOTR9LAorCXsweDAwMDBhMDM4LCAweDAzOGEwMTk2fSwKKwl7MHgwMDAwYTAzYywgMHgwMzhjMDM4Yn0sCisJezB4MDAwMGEwNDAsIDB4MDM5MDAzOGR9LAorCXsweDAwMDBhMDQ0LCAweDAzOTIwMzkxfSwKKwl7MHgwMDAwYTA0OCwgMHgwMzk0MDM5M30sCisJezB4MDAwMGEwNGMsIDB4MDM5NjAzOTV9LAorCXsweDAwMDBhMDUwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA1NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDVjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA2MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA2YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDc0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwN2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDgwLCAweDIyMjIyMjI5fSwKKwl7MHgwMDAwYTA4NCwgMHgxZDFkMWQxZH0sCisJezB4MDAwMGEwODgsIDB4MWQxZDFkMWR9LAorCXsweDAwMDBhMDhjLCAweDFkMWQxZDFkfSwKKwl7MHgwMDAwYTA5MCwgMHgxNzFkMWQxZH0sCisJezB4MDAwMGEwOTQsIDB4MTExMTE3MTd9LAorCXsweDAwMDBhMDk4LCAweDAwMDMwMzExfSwKKwl7MHgwMDAwYTA5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGE0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBhOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBiNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBjMCwgMHgwMDFmMDAwMH0sCisJezB4MDAwMGEwYzQsIDB4MDEwMDAxMDF9LAorCXsweDAwMDBhMGM4LCAweDAxMWUwMTFmfSwKKwl7MHgwMDAwYTBjYywgMHgwMTFjMDExZH0sCisJezB4MDAwMGEwZDAsIDB4MDIwMzAyMDR9LAorCXsweDAwMDBhMGQ0LCAweDAyMDEwMjAyfSwKKwl7MHgwMDAwYTBkOCwgMHgwMjFmMDIwMH0sCisJezB4MDAwMGEwZGMsIDB4MDMwMjAyMWV9LAorCXsweDAwMDBhMGUwLCAweDAzMDAwMzAxfSwKKwl7MHgwMDAwYTBlNCwgMHgwMzFlMDMxZn0sCisJezB4MDAwMGEwZTgsIDB4MDQwMjAzMWR9LAorCXsweDAwMDBhMGVjLCAweDA0MDAwNDAxfSwKKwl7MHgwMDAwYTBmMCwgMHgwNDFlMDQxZn0sCisJezB4MDAwMGEwZjQsIDB4MDUwMjA0MWR9LAorCXsweDAwMDBhMGY4LCAweDA1MDAwNTAxfSwKKwl7MHgwMDAwYTBmYywgMHgwNTFlMDUxZn0sCisJezB4MDAwMGExMDAsIDB4MDYwMTA2MDJ9LAorCXsweDAwMDBhMTA0LCAweDA2MWYwNjAwfSwKKwl7MHgwMDAwYTEwOCwgMHgwNjFkMDYxZX0sCisJezB4MDAwMGExMGMsIDB4MDcwMjA3MDN9LAorCXsweDAwMDBhMTEwLCAweDA3MDAwNzAxfSwKKwl7MHgwMDAwYTExNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEyMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEyYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTQwLCAweDAwMWYwMDAwfSwKKwl7MHgwMDAwYTE0NCwgMHgwMTAwMDEwMX0sCisJezB4MDAwMGExNDgsIDB4MDExZTAxMWZ9LAorCXsweDAwMDBhMTRjLCAweDAxMWMwMTFkfSwKKwl7MHgwMDAwYTE1MCwgMHgwMjAzMDIwNH0sCisJezB4MDAwMGExNTQsIDB4MDIwMTAyMDJ9LAorCXsweDAwMDBhMTU4LCAweDAyMWYwMjAwfSwKKwl7MHgwMDAwYTE1YywgMHgwMzAyMDIxZX0sCisJezB4MDAwMGExNjAsIDB4MDMwMDAzMDF9LAorCXsweDAwMDBhMTY0LCAweDAzMWUwMzFmfSwKKwl7MHgwMDAwYTE2OCwgMHgwNDAyMDMxZH0sCisJezB4MDAwMGExNmMsIDB4MDQwMDA0MDF9LAorCXsweDAwMDBhMTcwLCAweDA0MWUwNDFmfSwKKwl7MHgwMDAwYTE3NCwgMHgwNTAyMDQxZH0sCisJezB4MDAwMGExNzgsIDB4MDUwMDA1MDF9LAorCXsweDAwMDBhMTdjLCAweDA1MWUwNTFmfSwKKwl7MHgwMDAwYTE4MCwgMHgwNjAxMDYwMn0sCisJezB4MDAwMGExODQsIDB4MDYxZjA2MDB9LAorCXsweDAwMDBhMTg4LCAweDA2MWQwNjFlfSwKKwl7MHgwMDAwYTE4YywgMHgwNzAyMDcwM30sCisJezB4MDAwMGExOTAsIDB4MDcwMDA3MDF9LAorCXsweDAwMDBhMTk0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTE5OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExOWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFhNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFiMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFjOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExY2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFkNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWRjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFlMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWU4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFlYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZjAsIDB4MDAwMDAzOTZ9LAorCXsweDAwMDBhMWY0LCAweDAwMDAwMzk2fSwKKwl7MHgwMDAwYTFmOCwgMHgwMDAwMDM5Nn0sCisJezB4MDAwMGExZmMsIDB4MDAwMDAxOTZ9LAorCXsweDAwMDBiMDAwLCAweDAwMDEwMDAwfSwKKwl7MHgwMDAwYjAwNCwgMHgwMDAzMDAwMn0sCisJezB4MDAwMGIwMDgsIDB4MDAwNTAwMDR9LAorCXsweDAwMDBiMDBjLCAweDAwODEwMDgwfSwKKwl7MHgwMDAwYjAxMCwgMHgwMDgzMDA4Mn0sCisJezB4MDAwMGIwMTQsIDB4MDE4MTAxODB9LAorCXsweDAwMDBiMDE4LCAweDAxODMwMTgyfSwKKwl7MHgwMDAwYjAxYywgMHgwMTg1MDE4NH0sCisJezB4MDAwMGIwMjAsIDB4MDI4MTAyODB9LAorCXsweDAwMDBiMDI0LCAweDAyODMwMjgyfSwKKwl7MHgwMDAwYjAyOCwgMHgwMjg1MDI4NH0sCisJezB4MDAwMGIwMmMsIDB4MDI4OTAyODh9LAorCXsweDAwMDBiMDMwLCAweDAyOGIwMjhhfSwKKwl7MHgwMDAwYjAzNCwgMHgwMzg4MDI4Y30sCisJezB4MDAwMGIwMzgsIDB4MDM4YTAzODl9LAorCXsweDAwMDBiMDNjLCAweDAzOGMwMzhifSwKKwl7MHgwMDAwYjA0MCwgMHgwMzkwMDM4ZH0sCisJezB4MDAwMGIwNDQsIDB4MDM5MjAzOTF9LAorCXsweDAwMDBiMDQ4LCAweDAzOTQwMzkzfSwKKwl7MHgwMDAwYjA0YywgMHgwMzk2MDM5NX0sCisJezB4MDAwMGIwNTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA1OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA2NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDZjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA3MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA3YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwODAsIDB4MzIzMjMyMzJ9LAorCXsweDAwMDBiMDg0LCAweDJmMmYzMjMyfSwKKwl7MHgwMDAwYjA4OCwgMHgyMzI4MmEyZH0sCisJezB4MDAwMGIwOGMsIDB4MWMxZTIxMjN9LAorCXsweDAwMDBiMDkwLCAweDE0MTcxOTE5fSwKKwl7MHgwMDAwYjA5NCwgMHgwZTBlMTIxNH0sCisJezB4MDAwMGIwOTgsIDB4MDMwNTA3MDd9LAorCXsweDAwMDBiMDljLCAweDAwMDMwMzAzfSwKKwl7MHgwMDAwYjBhMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwYTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMGE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjBhYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwYjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMGI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjBiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMGMwLCAweDAwM2YwMDIwfSwKKwl7MHgwMDAwYjBjNCwgMHgwMDQwMDA0MX0sCisJezB4MDAwMGIwYzgsIDB4MDE0MDAwNWZ9LAorCXsweDAwMDBiMGNjLCAweDAxNjAwMTVmfSwKKwl7MHgwMDAwYjBkMCwgMHgwMTdlMDE3Zn0sCisJezB4MDAwMGIwZDQsIDB4MDI0MTAyNDJ9LAorCXsweDAwMDBiMGQ4LCAweDAyNWYwMjQwfSwKKwl7MHgwMDAwYjBkYywgMHgwMjdmMDI2MH0sCisJezB4MDAwMGIwZTAsIDB4MDM0MTAyN2V9LAorCXsweDAwMDBiMGU0LCAweDAzNWYwMzQwfSwKKwl7MHgwMDAwYjBlOCwgMHgwMzdmMDM2MH0sCisJezB4MDAwMGIwZWMsIDB4MDQ0MDA0NDF9LAorCXsweDAwMDBiMGYwLCAweDA0NjAwNDVmfSwKKwl7MHgwMDAwYjBmNCwgMHgwNTQxMDQ3Zn0sCisJezB4MDAwMGIwZjgsIDB4MDU1ZjA1NDB9LAorCXsweDAwMDBiMGZjLCAweDA1N2YwNTYwfSwKKwl7MHgwMDAwYjEwMCwgMHgwNjQwMDY0MX0sCisJezB4MDAwMGIxMDQsIDB4MDY2MDA2NWZ9LAorCXsweDAwMDBiMTA4LCAweDA2N2UwNjdmfSwKKwl7MHgwMDAwYjEwYywgMHgwNzQxMDc0Mn0sCisJezB4MDAwMGIxMTAsIDB4MDc1ZjA3NDB9LAorCXsweDAwMDBiMTE0LCAweDA3N2YwNzYwfSwKKwl7MHgwMDAwYjExOCwgMHgwNzgwMDc4MX0sCisJezB4MDAwMGIxMWMsIDB4MDdhMDA3OWZ9LAorCXsweDAwMDBiMTIwLCAweDA3YzEwN2JmfSwKKwl7MHgwMDAwYjEyNCwgMHgwMDAwMDdjMH0sCisJezB4MDAwMGIxMjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMTJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjEzMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxMzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMTM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjEzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxNDAsIDB4MDAzZjAwMjB9LAorCXsweDAwMDBiMTQ0LCAweDAwNDAwMDQxfSwKKwl7MHgwMDAwYjE0OCwgMHgwMTQwMDA1Zn0sCisJezB4MDAwMGIxNGMsIDB4MDE2MDAxNWZ9LAorCXsweDAwMDBiMTUwLCAweDAxN2UwMTdmfSwKKwl7MHgwMDAwYjE1NCwgMHgwMjQxMDI0Mn0sCisJezB4MDAwMGIxNTgsIDB4MDI1ZjAyNDB9LAorCXsweDAwMDBiMTVjLCAweDAyN2YwMjYwfSwKKwl7MHgwMDAwYjE2MCwgMHgwMzQxMDI3ZX0sCisJezB4MDAwMGIxNjQsIDB4MDM1ZjAzNDB9LAorCXsweDAwMDBiMTY4LCAweDAzN2YwMzYwfSwKKwl7MHgwMDAwYjE2YywgMHgwNDQwMDQ0MX0sCisJezB4MDAwMGIxNzAsIDB4MDQ2MDA0NWZ9LAorCXsweDAwMDBiMTc0LCAweDA1NDEwNDdmfSwKKwl7MHgwMDAwYjE3OCwgMHgwNTVmMDU0MH0sCisJezB4MDAwMGIxN2MsIDB4MDU3ZjA1NjB9LAorCXsweDAwMDBiMTgwLCAweDA2NDAwNjQxfSwKKwl7MHgwMDAwYjE4NCwgMHgwNjYwMDY1Zn0sCisJezB4MDAwMGIxODgsIDB4MDY3ZTA2N2Z9LAorCXsweDAwMDBiMThjLCAweDA3NDEwNzQyfSwKKwl7MHgwMDAwYjE5MCwgMHgwNzVmMDc0MH0sCisJezB4MDAwMGIxOTQsIDB4MDc3ZjA3NjB9LAorCXsweDAwMDBiMTk4LCAweDA3ODAwNzgxfSwKKwl7MHgwMDAwYjE5YywgMHgwN2EwMDc5Zn0sCisJezB4MDAwMGIxYTAsIDB4MDdjMTA3YmZ9LAorCXsweDAwMDBiMWE0LCAweDAwMDAwN2MwfSwKKwl7MHgwMDAwYjFhOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxYWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFiNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxYjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFjMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxYzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFjYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFkOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWUwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFlNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWVjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFmMCwgMHgwMDAwMDM5Nn0sCisJezB4MDAwMGIxZjQsIDB4MDAwMDAzOTZ9LAorCXsweDAwMDBiMWY4LCAweDAwMDAwMzk2fSwKKwl7MHgwMDAwYjFmYywgMHgwMDAwMDE5Nn0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTMwME1vZGVzX2xvd19vYl9kYl90eF9nYWluX3RhYmxlXzJwMFtdWzVdID0geworCS8qIEFkZHIgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICAgKi8KKwl7MHgwMDAwYTQxMCwgMHgwMDAwNTBkOSwgMHgwMDAwNTBkOSwgMHgwMDAwNTBkOSwgMHgwMDAwNTBkOX0sCisJezB4MDAwMGE1MDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNTA0LCAweDA2MDAwMDAzLCAweDA2MDAwMDAzLCAweDA0MDAwMDAyLCAweDA0MDAwMDAyfSwKKwl7MHgwMDAwYTUwOCwgMHgwYTAwMDAyMCwgMHgwYTAwMDAyMCwgMHgwODAwMDAwNCwgMHgwODAwMDAwNH0sCisJezB4MDAwMGE1MGMsIDB4MTAwMDAwMjMsIDB4MTAwMDAwMjMsIDB4MGIwMDAyMDAsIDB4MGIwMDAyMDB9LAorCXsweDAwMDBhNTEwLCAweDE2MDAwMjIwLCAweDE2MDAwMjIwLCAweDBmMDAwMjAyLCAweDBmMDAwMjAyfSwKKwl7MHgwMDAwYTUxNCwgMHgxYzAwMDIyMywgMHgxYzAwMDIyMywgMHgxMjAwMDQwMCwgMHgxMjAwMDQwMH0sCisJezB4MDAwMGE1MTgsIDB4MjEwMjAyMjAsIDB4MjEwMjAyMjAsIDB4MTYwMDA0MDIsIDB4MTYwMDA0MDJ9LAorCXsweDAwMDBhNTFjLCAweDI3MDIwMjIzLCAweDI3MDIwMjIzLCAweDE5MDAwNDA0LCAweDE5MDAwNDA0fSwKKwl7MHgwMDAwYTUyMCwgMHgyYjAyMjIyMCwgMHgyYjAyMjIyMCwgMHgxYzAwMDYwMywgMHgxYzAwMDYwM30sCisJezB4MDAwMGE1MjQsIDB4MmYwMjIyMjIsIDB4MmYwMjIyMjIsIDB4MjEwMDBhMDIsIDB4MjEwMDBhMDJ9LAorCXsweDAwMDBhNTI4LCAweDM0MDIyMjI1LCAweDM0MDIyMjI1LCAweDI1MDAwYTA0LCAweDI1MDAwYTA0fSwKKwl7MHgwMDAwYTUyYywgMHgzYTAyMjIyYSwgMHgzYTAyMjIyYSwgMHgyODAwMGEyMCwgMHgyODAwMGEyMH0sCisJezB4MDAwMGE1MzAsIDB4M2UwMjIyMmMsIDB4M2UwMjIyMmMsIDB4MmMwMDBlMjAsIDB4MmMwMDBlMjB9LAorCXsweDAwMDBhNTM0LCAweDQyMDIyNDJhLCAweDQyMDIyNDJhLCAweDMwMDAwZTIyLCAweDMwMDAwZTIyfSwKKwl7MHgwMDAwYTUzOCwgMHg0NzAyMjQ0YSwgMHg0NzAyMjQ0YSwgMHgzNDAwMGUyNCwgMHgzNDAwMGUyNH0sCisJezB4MDAwMGE1M2MsIDB4NGIwMjI0NGMsIDB4NGIwMjI0NGMsIDB4MzgwMDE2NDAsIDB4MzgwMDE2NDB9LAorCXsweDAwMDBhNTQwLCAweDRlMDIyNDZjLCAweDRlMDIyNDZjLCAweDNjMDAxNjYwLCAweDNjMDAxNjYwfSwKKwl7MHgwMDAwYTU0NCwgMHg1MzAyMjY2YywgMHg1MzAyMjY2YywgMHgzZjAwMTg2MSwgMHgzZjAwMTg2MX0sCisJezB4MDAwMGE1NDgsIDB4NTcwMjI4NmMsIDB4NTcwMjI4NmMsIDB4NDMwMDFhODEsIDB4NDMwMDFhODF9LAorCXsweDAwMDBhNTRjLCAweDVjMDQyODZiLCAweDVjMDQyODZiLCAweDQ3MDAxYTgzLCAweDQ3MDAxYTgzfSwKKwl7MHgwMDAwYTU1MCwgMHg2MTA0MmE2YywgMHg2MTA0MmE2YywgMHg0YTAwMWM4NCwgMHg0YTAwMWM4NH0sCisJezB4MDAwMGE1NTQsIDB4NjYwNjJhNmMsIDB4NjYwNjJhNmMsIDB4NGUwMDFjZTMsIDB4NGUwMDFjZTN9LAorCXsweDAwMDBhNTU4LCAweDZiMDYyZTZjLCAweDZiMDYyZTZjLCAweDUyMDAxY2U1LCAweDUyMDAxY2U1fSwKKwl7MHgwMDAwYTU1YywgMHg3MDA2MzA4YywgMHg3MDA2MzA4YywgMHg1NjAwMWNlOSwgMHg1NjAwMWNlOX0sCisJezB4MDAwMGE1NjAsIDB4NzMwYTMwOGEsIDB4NzMwYTMwOGEsIDB4NWEwMDFjZWIsIDB4NWEwMDFjZWJ9LAorCXsweDAwMDBhNTY0LCAweDc3MGEzMDhjLCAweDc3MGEzMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU2OCwgMHg3NzBhMzA4YywgMHg3NzBhMzA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCisJezB4MDAwMGE1NmMsIDB4NzcwYTMwOGMsIDB4NzcwYTMwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTcwLCAweDc3MGEzMDhjLCAweDc3MGEzMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU3NCwgMHg3NzBhMzA4YywgMHg3NzBhMzA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCisJezB4MDAwMGE1NzgsIDB4NzcwYTMwOGMsIDB4NzcwYTMwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTdjLCAweDc3MGEzMDhjLCAweDc3MGEzMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU4MCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMH0sCisJezB4MDAwMGE1ODQsIDB4MDY4MDAwMDMsIDB4MDY4MDAwMDMsIDB4MDQ4MDAwMDIsIDB4MDQ4MDAwMDJ9LAorCXsweDAwMDBhNTg4LCAweDBhODAwMDIwLCAweDBhODAwMDIwLCAweDA4ODAwMDA0LCAweDA4ODAwMDA0fSwKKwl7MHgwMDAwYTU4YywgMHgxMDgwMDAyMywgMHgxMDgwMDAyMywgMHgwYjgwMDIwMCwgMHgwYjgwMDIwMH0sCisJezB4MDAwMGE1OTAsIDB4MTY4MDAyMjAsIDB4MTY4MDAyMjAsIDB4MGY4MDAyMDIsIDB4MGY4MDAyMDJ9LAorCXsweDAwMDBhNTk0LCAweDFjODAwMjIzLCAweDFjODAwMjIzLCAweDEyODAwNDAwLCAweDEyODAwNDAwfSwKKwl7MHgwMDAwYTU5OCwgMHgyMTgyMDIyMCwgMHgyMTgyMDIyMCwgMHgxNjgwMDQwMiwgMHgxNjgwMDQwMn0sCisJezB4MDAwMGE1OWMsIDB4Mjc4MjAyMjMsIDB4Mjc4MjAyMjMsIDB4MTk4MDA0MDQsIDB4MTk4MDA0MDR9LAorCXsweDAwMDBhNWEwLCAweDJiODIyMjIwLCAweDJiODIyMjIwLCAweDFjODAwNjAzLCAweDFjODAwNjAzfSwKKwl7MHgwMDAwYTVhNCwgMHgyZjgyMjIyMiwgMHgyZjgyMjIyMiwgMHgyMTgwMGEwMiwgMHgyMTgwMGEwMn0sCisJezB4MDAwMGE1YTgsIDB4MzQ4MjIyMjUsIDB4MzQ4MjIyMjUsIDB4MjU4MDBhMDQsIDB4MjU4MDBhMDR9LAorCXsweDAwMDBhNWFjLCAweDNhODIyMjJhLCAweDNhODIyMjJhLCAweDI4ODAwYTIwLCAweDI4ODAwYTIwfSwKKwl7MHgwMDAwYTViMCwgMHgzZTgyMjIyYywgMHgzZTgyMjIyYywgMHgyYzgwMGUyMCwgMHgyYzgwMGUyMH0sCisJezB4MDAwMGE1YjQsIDB4NDI4MjI0MmEsIDB4NDI4MjI0MmEsIDB4MzA4MDBlMjIsIDB4MzA4MDBlMjJ9LAorCXsweDAwMDBhNWI4LCAweDQ3ODIyNDRhLCAweDQ3ODIyNDRhLCAweDM0ODAwZTI0LCAweDM0ODAwZTI0fSwKKwl7MHgwMDAwYTViYywgMHg0YjgyMjQ0YywgMHg0YjgyMjQ0YywgMHgzODgwMTY0MCwgMHgzODgwMTY0MH0sCisJezB4MDAwMGE1YzAsIDB4NGU4MjI0NmMsIDB4NGU4MjI0NmMsIDB4M2M4MDE2NjAsIDB4M2M4MDE2NjB9LAorCXsweDAwMDBhNWM0LCAweDUzODIyNjZjLCAweDUzODIyNjZjLCAweDNmODAxODYxLCAweDNmODAxODYxfSwKKwl7MHgwMDAwYTVjOCwgMHg1NzgyMjg2YywgMHg1NzgyMjg2YywgMHg0MzgwMWE4MSwgMHg0MzgwMWE4MX0sCisJezB4MDAwMGE1Y2MsIDB4NWM4NDI4NmIsIDB4NWM4NDI4NmIsIDB4NDc4MDFhODMsIDB4NDc4MDFhODN9LAorCXsweDAwMDBhNWQwLCAweDYxODQyYTZjLCAweDYxODQyYTZjLCAweDRhODAxYzg0LCAweDRhODAxYzg0fSwKKwl7MHgwMDAwYTVkNCwgMHg2Njg2MmE2YywgMHg2Njg2MmE2YywgMHg0ZTgwMWNlMywgMHg0ZTgwMWNlM30sCisJezB4MDAwMGE1ZDgsIDB4NmI4NjJlNmMsIDB4NmI4NjJlNmMsIDB4NTI4MDFjZTUsIDB4NTI4MDFjZTV9LAorCXsweDAwMDBhNWRjLCAweDcwODYzMDhjLCAweDcwODYzMDhjLCAweDU2ODAxY2U5LCAweDU2ODAxY2U5fSwKKwl7MHgwMDAwYTVlMCwgMHg3MzhhMzA4YSwgMHg3MzhhMzA4YSwgMHg1YTgwMWNlYiwgMHg1YTgwMWNlYn0sCisJezB4MDAwMGE1ZTQsIDB4Nzc4YTMwOGMsIDB4Nzc4YTMwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDBhNWU4LCAweDc3OGEzMDhjLCAweDc3OGEzMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKKwl7MHgwMDAwYTVlYywgMHg3NzhhMzA4YywgMHg3NzhhMzA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCisJezB4MDAwMGE1ZjAsIDB4Nzc4YTMwOGMsIDB4Nzc4YTMwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDBhNWY0LCAweDc3OGEzMDhjLCAweDc3OGEzMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKKwl7MHgwMDAwYTVmOCwgMHg3NzhhMzA4YywgMHg3NzhhMzA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCisJezB4MDAwMGE1ZmMsIDB4Nzc4YTMwOGMsIDB4Nzc4YTMwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDE2MDQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0fSwKKwl7MHgwMDAxNjA0OCwgMHg2NDAwMDAwMSwgMHg2NDAwMDAwMSwgMHg2NDAwMDAwMSwgMHg2NDAwMDAwMX0sCisJezB4MDAwMTYwNjgsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmN9LAorCXsweDAwMDE2NDQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0fSwKKwl7MHgwMDAxNjQ0OCwgMHg2NDAwMDAwMSwgMHg2NDAwMDAwMSwgMHg2NDAwMDAwMSwgMHg2NDAwMDAwMX0sCisJezB4MDAwMTY0NjgsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmN9LAorCXsweDAwMDE2ODQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0fSwKKwl7MHgwMDAxNjg0OCwgMHg2NDAwMDAwMSwgMHg2NDAwMDAwMSwgMHg2NDAwMDAwMSwgMHg2NDAwMDAwMX0sCisJezB4MDAwMTY4NjgsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmN9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhcjkzMDBfMnAwX21hY19jb3JlW11bMl0gPSB7CisJLyogQWRkciAgICAgIGFsbG1vZGVzICAqLworCXsweDAwMDAwMDA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDAzMCwgMHgwMDAyMDA4NX0sCisJezB4MDAwMDAwMzQsIDB4MDAwMDAwMDV9LAorCXsweDAwMDAwMDQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMDA0NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDAwNDgsIDB4MDAwMDAwMDh9LAorCXsweDAwMDAwMDRjLCAweDAwMDAwMDEwfSwKKwl7MHgwMDAwMDA1MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEwNDAsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDQ0LCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA0OCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNGMsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDUwLCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA1NCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNTgsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDVjLCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA2MCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNjQsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMGYwLCAweDAwMDAwMTAwfSwKKwl7MHgwMDAwMTI3MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDEyYjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMmYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTQzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE0N2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAwNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwMDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAxOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwMjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwNDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODA0OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwNGMsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4MDU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODA1OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwNWMsIDB4MDAwZmM3OGZ9LAorCXsweDAwMDA4MDYwLCAweDAwMDAwMDBmfSwKKwl7MHgwMDAwODA2NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwNzAsIDB4MDAwMDAzMTB9LAorCXsweDAwMDA4MDc0LCAweDAwMDAwMDIwfSwKKwl7MHgwMDAwODA3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwOWMsIDB4MDAwMDAwMGZ9LAorCXsweDAwMDA4MGEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBhNCwgMHgwMmZmMDAwMH0sCisJezB4MDAwMDgwYTgsIDB4MGUwNzA2MDV9LAorCXsweDAwMDA4MGFjLCAweDAwMDAwMDBkfSwKKwl7MHgwMDAwODBiMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwYjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwYzAsIDB4MmE4MDAwMDB9LAorCXsweDAwMDA4MGM0LCAweDA2OTAwMTY4fSwKKwl7MHgwMDAwODBjOCwgMHgxMzg4MWMyMH0sCisJezB4MDAwMDgwY2MsIDB4MDFmNDAwMDB9LAorCXsweDAwMDA4MGQwLCAweDAwMjUyNTAwfSwKKwl7MHgwMDAwODBkNCwgMHgwMGEwMDAwMH0sCisJezB4MDAwMDgwZDgsIDB4MDA0MDAwMDB9LAorCXsweDAwMDA4MGRjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBlMCwgMHhmZmZmZmZmZn0sCisJezB4MDAwMDgwZTQsIDB4MDAwMGZmZmZ9LAorCXsweDAwMDA4MGU4LCAweDNmM2YzZjNmfSwKKwl7MHgwMDAwODBlYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwZjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBmYywgMHgwMDAyMDAwMH0sCisJezB4MDAwMDgxMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTA4LCAweDAwMDAwMDUyfSwKKwl7MHgwMDAwODEwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTE0LCAweDAwMDAwN2ZmfSwKKwl7MHgwMDAwODExOCwgMHgwMDAwMDBhYX0sCisJezB4MDAwMDgxMWMsIDB4MDAwMDMyMTB9LAorCXsweDAwMDA4MTI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEyOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEzNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTNjLCAweDAwMDBmZmZmfSwKKwl7MHgwMDAwODE0NCwgMHhmZmZmZmZmZn0sCisJezB4MDAwMDgxNjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTZjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODE3MCwgMHgxODQ4NjIwMH0sCisJezB4MDAwMDgxNzQsIDB4MzMzMzIyMTB9LAorCXsweDAwMDA4MTc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODE3YywgMHgwMDAyMDAwMH0sCisJezB4MDAwMDgxYzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWM0LCAweDMzMzMyMjEwfSwKKwl7MHgwMDAwODFjOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxY2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFlYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxZjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxZmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjQwLCAweDAwMTAwMDAwfSwKKwl7MHgwMDAwODI0NCwgMHgwMDEwZjQyNH0sCisJezB4MDAwMDgyNDgsIDB4MDAwMDA4MDB9LAorCXsweDAwMDA4MjRjLCAweDAwMDFlODQ4fSwKKwl7MHgwMDAwODI1MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyNTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjU4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI1YywgMHg0MDAwMDAwMH0sCisJezB4MDAwMDgyNjAsIDB4MDAwODA5MjJ9LAorCXsweDAwMDA4MjY0LCAweDk4YTAwMDEwfSwKKwl7MHgwMDAwODI2OCwgMHhmZmZmZmZmZn0sCisJezB4MDAwMDgyNmMsIDB4MDAwMGZmZmZ9LAorCXsweDAwMDA4MjcwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI3NCwgMHg0MDAwMDAwMH0sCisJezB4MDAwMDgyNzgsIDB4MDAzZTQxODB9LAorCXsweDAwMDA4MjdjLCAweDAwMDAwMDA0fSwKKwl7MHgwMDAwODI4NCwgMHgwMDAwMDAyY30sCisJezB4MDAwMDgyODgsIDB4MDAwMDAwMmN9LAorCXsweDAwMDA4MjhjLCAweDAwMDAwMGZmfSwKKwl7MHgwMDAwODI5NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyOTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODMwMCwgMHgwMDAwMDE0MH0sCisJezB4MDAwMDgzMTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzFjLCAweDAwMDAwMTBkfSwKKwl7MHgwMDAwODMyOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzMmMsIDB4MDAwMDAwMDd9LAorCXsweDAwMDA4MzMwLCAweDAwMDAwMzAyfSwKKwl7MHgwMDAwODMzNCwgMHgwMDAwMDcwMH0sCisJezB4MDAwMDgzMzgsIDB4MDBmZjAwMDB9LAorCXsweDAwMDA4MzNjLCAweDAyNDAwMDAwfSwKKwl7MHgwMDAwODM0MCwgMHgwMDAxMDdmZn0sCisJezB4MDAwMDgzNDQsIDB4YWE0ODEwNWJ9LAorCXsweDAwMDA4MzQ4LCAweDAwOGYwMDAwfSwKKwl7MHgwMDAwODM1YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzNjAsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4MzY0LCAweGZmZmZmZmZmfSwKKwl7MHgwMDAwODM2OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzNzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4Mzc0LCAweDAwMDAwMGZmfSwKKwl7MHgwMDAwODM3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzN2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzgwLCAweGZmZmZmZmZmfSwKKwl7MHgwMDAwODM4NCwgMHhmZmZmZmZmZn0sCisJezB4MDAwMDgzOTAsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4Mzk0LCAweGZmZmZmZmZmfSwKKwl7MHgwMDAwODM5OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzOWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4M2EwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODNhNCwgMHgwMDAwZmExNH0sCisJezB4MDAwMDgzYTgsIDB4MDAwZjBjMDB9LAorCXsweDAwMDA4M2FjLCAweDMzMzMyMjEwfSwKKwl7MHgwMDAwODNiMCwgMHgzMzMzMjIxMH0sCisJezB4MDAwMDgzYjQsIDB4MzMzMzIyMTB9LAorCXsweDAwMDA4M2I4LCAweDMzMzMyMjEwfSwKKwl7MHgwMDAwODNiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzYzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4M2M0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODNjOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzY2MsIDB4MDAwMDAyMDB9LAorCXsweDAwMDA4M2QwLCAweDAwMDMwMWZmfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzAwQ29tbW9uX3dvX3hsbmFfcnhfZ2Fpbl90YWJsZV8ycDBbXVsyXSA9IHsKKwkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCisJezB4MDAwMGEwMDAsIDB4MDAwMTAwMDB9LAorCXsweDAwMDBhMDA0LCAweDAwMDMwMDAyfSwKKwl7MHgwMDAwYTAwOCwgMHgwMDA1MDAwNH0sCisJezB4MDAwMGEwMGMsIDB4MDA4MTAwODB9LAorCXsweDAwMDBhMDEwLCAweDAwODMwMDgyfSwKKwl7MHgwMDAwYTAxNCwgMHgwMTgxMDE4MH0sCisJezB4MDAwMGEwMTgsIDB4MDE4MzAxODJ9LAorCXsweDAwMDBhMDFjLCAweDAxODUwMTg0fSwKKwl7MHgwMDAwYTAyMCwgMHgwMTg5MDE4OH0sCisJezB4MDAwMGEwMjQsIDB4MDE4YjAxOGF9LAorCXsweDAwMDBhMDI4LCAweDAxOGQwMThjfSwKKwl7MHgwMDAwYTAyYywgMHgwMzgyMDE5MH0sCisJezB4MDAwMGEwMzAsIDB4MDM4NDAzODN9LAorCXsweDAwMDBhMDM0LCAweDAzODgwMzg1fSwKKwl7MHgwMDAwYTAzOCwgMHgwMzhhMDM4OX0sCisJezB4MDAwMGEwM2MsIDB4MDM4YzAzOGJ9LAorCXsweDAwMDBhMDQwLCAweDAzOTAwMzhkfSwKKwl7MHgwMDAwYTA0NCwgMHgwMzkyMDM5MX0sCisJezB4MDAwMGEwNDgsIDB4MDM5NDAzOTN9LAorCXsweDAwMDBhMDRjLCAweDAzOTYwMzk1fSwKKwl7MHgwMDAwYTA1MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDU4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA1YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA2OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDcwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA3NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA4MCwgMHgyOTI5MjkyOX0sCisJezB4MDAwMGEwODQsIDB4MjkyOTI5Mjl9LAorCXsweDAwMDBhMDg4LCAweDI5MjkyOTI5fSwKKwl7MHgwMDAwYTA4YywgMHgyOTI5MjkyOX0sCisJezB4MDAwMGEwOTAsIDB4MjIyOTI5Mjl9LAorCXsweDAwMDBhMDk0LCAweDFkMWQyMjIyfSwKKwl7MHgwMDAwYTA5OCwgMHgwYzExMTExN30sCisJezB4MDAwMGEwOWMsIDB4MDAwMzAzMDN9LAorCXsweDAwMDBhMGEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBhNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBiMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYzAsIDB4MDAxZjAwMDB9LAorCXsweDAwMDBhMGM0LCAweDAxMDAwMTAxfSwKKwl7MHgwMDAwYTBjOCwgMHgwMTFlMDExZn0sCisJezB4MDAwMGEwY2MsIDB4MDExYzAxMWR9LAorCXsweDAwMDBhMGQwLCAweDAyMDMwMjA0fSwKKwl7MHgwMDAwYTBkNCwgMHgwMjAxMDIwMn0sCisJezB4MDAwMGEwZDgsIDB4MDIxZjAyMDB9LAorCXsweDAwMDBhMGRjLCAweDAzMDIwMjFlfSwKKwl7MHgwMDAwYTBlMCwgMHgwMzAwMDMwMX0sCisJezB4MDAwMGEwZTQsIDB4MDMxZTAzMWZ9LAorCXsweDAwMDBhMGU4LCAweDA0MDIwMzFkfSwKKwl7MHgwMDAwYTBlYywgMHgwNDAwMDQwMX0sCisJezB4MDAwMGEwZjAsIDB4MDQxZTA0MWZ9LAorCXsweDAwMDBhMGY0LCAweDA1MDIwNDFkfSwKKwl7MHgwMDAwYTBmOCwgMHgwNTAwMDUwMX0sCisJezB4MDAwMGEwZmMsIDB4MDUxZTA1MWZ9LAorCXsweDAwMDBhMTAwLCAweDA2MDEwNjAyfSwKKwl7MHgwMDAwYTEwNCwgMHgwNjFmMDYwMH0sCisJezB4MDAwMGExMDgsIDB4MDYxZDA2MWV9LAorCXsweDAwMDBhMTBjLCAweDA3MDIwNzAzfSwKKwl7MHgwMDAwYTExMCwgMHgwNzAwMDcwMX0sCisJezB4MDAwMGExMTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTExYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEyOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEzNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTE0MCwgMHgwMDFmMDAwMH0sCisJezB4MDAwMGExNDQsIDB4MDEwMDAxMDF9LAorCXsweDAwMDBhMTQ4LCAweDAxMWUwMTFmfSwKKwl7MHgwMDAwYTE0YywgMHgwMTFjMDExZH0sCisJezB4MDAwMGExNTAsIDB4MDIwMzAyMDR9LAorCXsweDAwMDBhMTU0LCAweDAyMDEwMjAyfSwKKwl7MHgwMDAwYTE1OCwgMHgwMjFmMDIwMH0sCisJezB4MDAwMGExNWMsIDB4MDMwMjAyMWV9LAorCXsweDAwMDBhMTYwLCAweDAzMDAwMzAxfSwKKwl7MHgwMDAwYTE2NCwgMHgwMzFlMDMxZn0sCisJezB4MDAwMGExNjgsIDB4MDQwMjAzMWR9LAorCXsweDAwMDBhMTZjLCAweDA0MDAwNDAxfSwKKwl7MHgwMDAwYTE3MCwgMHgwNDFlMDQxZn0sCisJezB4MDAwMGExNzQsIDB4MDUwMjA0MWR9LAorCXsweDAwMDBhMTc4LCAweDA1MDAwNTAxfSwKKwl7MHgwMDAwYTE3YywgMHgwNTFlMDUxZn0sCisJezB4MDAwMGExODAsIDB4MDYwMTA2MDJ9LAorCXsweDAwMDBhMTg0LCAweDA2MWYwNjAwfSwKKwl7MHgwMDAwYTE4OCwgMHgwNjFkMDYxZX0sCisJezB4MDAwMGExOGMsIDB4MDcwMjA3MDN9LAorCXsweDAwMDBhMTkwLCAweDA3MDAwNzAxfSwKKwl7MHgwMDAwYTE5NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExOTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFhMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFhYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFjNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFkMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWQ4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFkYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFlOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWYwLCAweDAwMDAwMzk2fSwKKwl7MHgwMDAwYTFmNCwgMHgwMDAwMDM5Nn0sCisJezB4MDAwMGExZjgsIDB4MDAwMDAzOTZ9LAorCXsweDAwMDBhMWZjLCAweDAwMDAwMTk2fSwKKwl7MHgwMDAwYjAwMCwgMHgwMDAxMDAwMH0sCisJezB4MDAwMGIwMDQsIDB4MDAwMzAwMDJ9LAorCXsweDAwMDBiMDA4LCAweDAwMDUwMDA0fSwKKwl7MHgwMDAwYjAwYywgMHgwMDgxMDA4MH0sCisJezB4MDAwMGIwMTAsIDB4MDA4MzAwODJ9LAorCXsweDAwMDBiMDE0LCAweDAxODEwMTgwfSwKKwl7MHgwMDAwYjAxOCwgMHgwMTgzMDE4Mn0sCisJezB4MDAwMGIwMWMsIDB4MDE4NTAxODR9LAorCXsweDAwMDBiMDIwLCAweDAyODEwMjgwfSwKKwl7MHgwMDAwYjAyNCwgMHgwMjgzMDI4Mn0sCisJezB4MDAwMGIwMjgsIDB4MDI4NTAyODR9LAorCXsweDAwMDBiMDJjLCAweDAyODkwMjg4fSwKKwl7MHgwMDAwYjAzMCwgMHgwMjhiMDI4YX0sCisJezB4MDAwMGIwMzQsIDB4MDM4ODAyOGN9LAorCXsweDAwMDBiMDM4LCAweDAzOGEwMzg5fSwKKwl7MHgwMDAwYjAzYywgMHgwMzhjMDM4Yn0sCisJezB4MDAwMGIwNDAsIDB4MDM5MDAzOGR9LAorCXsweDAwMDBiMDQ0LCAweDAzOTIwMzkxfSwKKwl7MHgwMDAwYjA0OCwgMHgwMzk0MDM5M30sCisJezB4MDAwMGIwNGMsIDB4MDM5NjAzOTV9LAorCXsweDAwMDBiMDUwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA1NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDVjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA2MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA2YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDc0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwN2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDgwLCAweDMyMzIzMjMyfSwKKwl7MHgwMDAwYjA4NCwgMHgyZjJmMzIzMn0sCisJezB4MDAwMGIwODgsIDB4MjMyODJhMmR9LAorCXsweDAwMDBiMDhjLCAweDFjMWUyMTIzfSwKKwl7MHgwMDAwYjA5MCwgMHgxNDE3MTkxOX0sCisJezB4MDAwMGIwOTQsIDB4MGUwZTEyMTR9LAorCXsweDAwMDBiMDk4LCAweDAzMDUwNzA3fSwKKwl7MHgwMDAwYjA5YywgMHgwMDAzMDMwM30sCisJezB4MDAwMGIwYTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMGE0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjBhOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwYWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMGIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjBiNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwYjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMGJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjBjMCwgMHgwMDNmMDAyMH0sCisJezB4MDAwMGIwYzQsIDB4MDA0MDAwNDF9LAorCXsweDAwMDBiMGM4LCAweDAxNDAwMDVmfSwKKwl7MHgwMDAwYjBjYywgMHgwMTYwMDE1Zn0sCisJezB4MDAwMGIwZDAsIDB4MDE3ZTAxN2Z9LAorCXsweDAwMDBiMGQ0LCAweDAyNDEwMjQyfSwKKwl7MHgwMDAwYjBkOCwgMHgwMjVmMDI0MH0sCisJezB4MDAwMGIwZGMsIDB4MDI3ZjAyNjB9LAorCXsweDAwMDBiMGUwLCAweDAzNDEwMjdlfSwKKwl7MHgwMDAwYjBlNCwgMHgwMzVmMDM0MH0sCisJezB4MDAwMGIwZTgsIDB4MDM3ZjAzNjB9LAorCXsweDAwMDBiMGVjLCAweDA0NDAwNDQxfSwKKwl7MHgwMDAwYjBmMCwgMHgwNDYwMDQ1Zn0sCisJezB4MDAwMGIwZjQsIDB4MDU0MTA0N2Z9LAorCXsweDAwMDBiMGY4LCAweDA1NWYwNTQwfSwKKwl7MHgwMDAwYjBmYywgMHgwNTdmMDU2MH0sCisJezB4MDAwMGIxMDAsIDB4MDY0MDA2NDF9LAorCXsweDAwMDBiMTA0LCAweDA2NjAwNjVmfSwKKwl7MHgwMDAwYjEwOCwgMHgwNjdlMDY3Zn0sCisJezB4MDAwMGIxMGMsIDB4MDc0MTA3NDJ9LAorCXsweDAwMDBiMTEwLCAweDA3NWYwNzQwfSwKKwl7MHgwMDAwYjExNCwgMHgwNzdmMDc2MH0sCisJezB4MDAwMGIxMTgsIDB4MDc4MDA3ODF9LAorCXsweDAwMDBiMTFjLCAweDA3YTAwNzlmfSwKKwl7MHgwMDAwYjEyMCwgMHgwN2MxMDdiZn0sCisJezB4MDAwMGIxMjQsIDB4MDAwMDA3YzB9LAorCXsweDAwMDBiMTI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjEyYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxMzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMTM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjEzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMTQwLCAweDAwM2YwMDIwfSwKKwl7MHgwMDAwYjE0NCwgMHgwMDQwMDA0MX0sCisJezB4MDAwMGIxNDgsIDB4MDE0MDAwNWZ9LAorCXsweDAwMDBiMTRjLCAweDAxNjAwMTVmfSwKKwl7MHgwMDAwYjE1MCwgMHgwMTdlMDE3Zn0sCisJezB4MDAwMGIxNTQsIDB4MDI0MTAyNDJ9LAorCXsweDAwMDBiMTU4LCAweDAyNWYwMjQwfSwKKwl7MHgwMDAwYjE1YywgMHgwMjdmMDI2MH0sCisJezB4MDAwMGIxNjAsIDB4MDM0MTAyN2V9LAorCXsweDAwMDBiMTY0LCAweDAzNWYwMzQwfSwKKwl7MHgwMDAwYjE2OCwgMHgwMzdmMDM2MH0sCisJezB4MDAwMGIxNmMsIDB4MDQ0MDA0NDF9LAorCXsweDAwMDBiMTcwLCAweDA0NjAwNDVmfSwKKwl7MHgwMDAwYjE3NCwgMHgwNTQxMDQ3Zn0sCisJezB4MDAwMGIxNzgsIDB4MDU1ZjA1NDB9LAorCXsweDAwMDBiMTdjLCAweDA1N2YwNTYwfSwKKwl7MHgwMDAwYjE4MCwgMHgwNjQwMDY0MX0sCisJezB4MDAwMGIxODQsIDB4MDY2MDA2NWZ9LAorCXsweDAwMDBiMTg4LCAweDA2N2UwNjdmfSwKKwl7MHgwMDAwYjE4YywgMHgwNzQxMDc0Mn0sCisJezB4MDAwMGIxOTAsIDB4MDc1ZjA3NDB9LAorCXsweDAwMDBiMTk0LCAweDA3N2YwNzYwfSwKKwl7MHgwMDAwYjE5OCwgMHgwNzgwMDc4MX0sCisJezB4MDAwMGIxOWMsIDB4MDdhMDA3OWZ9LAorCXsweDAwMDBiMWEwLCAweDA3YzEwN2JmfSwKKwl7MHgwMDAwYjFhNCwgMHgwMDAwMDdjMH0sCisJezB4MDAwMGIxYTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFiMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxYjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxYzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFjOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxY2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFkNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWRjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFlMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWU4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFlYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZjAsIDB4MDAwMDAzOTZ9LAorCXsweDAwMDBiMWY0LCAweDAwMDAwMzk2fSwKKwl7MHgwMDAwYjFmOCwgMHgwMDAwMDM5Nn0sCisJezB4MDAwMGIxZmMsIDB4MDAwMDAxOTZ9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhcjkzMDBfMnAwX3NvY19wcmVhbWJsZVtdWzJdID0geworCS8qIEFkZHIgICAgICBhbGxtb2RlcyAgKi8KKwl7MHgwMDAwNDBhNCwgMHgwMGEwYzFjOX0sCisJezB4MDAwMDcwMDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA3MDIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwNzAzNCwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDcwMzgsIDB4MDAwMDA0YzJ9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhcjkzMDBQY2llUGh5X3BsbF9vbl9jbGtyZXFfZGlzYWJsZV9MMV8ycDBbXVsyXSA9IHsKKwkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCisJezB4MDAwMDQwNDAsIDB4MDgyMTJlNWV9LAorCXsweDAwMDA0MDQwLCAweDAwMDgwMDNifSwKKwl7MHgwMDAwNDA0NCwgMHgwMDAwMDAwMH0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTMwMFBjaWVQaHlfY2xrcmVxX2VuYWJsZV9MMV8ycDBbXVsyXSA9IHsKKwkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCisJezB4MDAwMDQwNDAsIDB4MDgyNTNlNWV9LAorCXsweDAwMDA0MDQwLCAweDAwMDgwMDNifSwKKwl7MHgwMDAwNDA0NCwgMHgwMDAwMDAwMH0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTMwMFBjaWVQaHlfY2xrcmVxX2Rpc2FibGVfTDFfMnAwW11bMl0gPSB7CisJLyogQWRkciAgICAgIGFsbG1vZGVzICAqLworCXsweDAwMDA0MDQwLCAweDA4MjEzZTVlfSwKKwl7MHgwMDAwNDA0MCwgMHgwMDA4MDAzYn0sCisJezB4MDAwMDQwNDQsIDB4MDAwMDAwMDB9LAorfTsKKworI2VuZGlmIC8qIElOSVRWQUxTXzkwMDNfMlAwX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfMnAyX2luaXR2YWxzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzXzJwMl9pbml0dmFscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjOThhYjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzXzJwMl9pbml0dmFscy5oCkBAIC0wLDAgKzEsMTc4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIElOSVRWQUxTXzkwMDNfMlAyX0gKKyNkZWZpbmUgSU5JVFZBTFNfOTAwM18yUDJfSAorCisvKiBBUjkwMDMgMi4yICovCisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzAwXzJwMl9yYWRpb19wb3N0YW1ibGVbXVs1XSA9IHsKKwkvKiBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAgMkdfSFQyMCAgICovCisJezB4MDAwMTYwOWMsIDB4MGRkMDhmMjksIDB4MGRkMDhmMjksIDB4MGIyODNmMzEsIDB4MGIyODNmMzF9LAorCXsweDAwMDE2MGFjLCAweGE0NjUzYzAwLCAweGE0NjUzYzAwLCAweDI0NjUyODAwLCAweDI0NjUyODAwfSwKKwl7MHgwMDAxNjBiMCwgMHgwMzI4NGYzZSwgMHgwMzI4NGYzZSwgMHgwNWQwOGYyMCwgMHgwNWQwOGYyMH0sCisJezB4MDAwMTYxMGMsIDB4MDgwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2MTQwLCAweDEwODA0MDA4LCAweDEwODA0MDA4LCAweDUwODA0MDA4LCAweDUwODA0MDA4fSwKKwl7MHgwMDAxNjUwYywgMHgwODAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY1NDAsIDB4MTA4MDQwMDgsIDB4MTA4MDQwMDgsIDB4NTA4MDQwMDgsIDB4NTA4MDQwMDh9LAorCXsweDAwMDE2OTBjLCAweDA4MDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjk0MCwgMHgxMDgwNDAwOCwgMHgxMDgwNDAwOCwgMHg1MDgwNDAwOCwgMHg1MDgwNDAwOH0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTMwME1vZGVzX2xvd2VzdF9vYl9kYl90eF9nYWluX3RhYmxlXzJwMltdWzVdID0geworCS8qIEFkZHIgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICAgKi8KKwl7MHgwMDAwYTQxMCwgMHgwMDAwNTBkOSwgMHgwMDAwNTBkOSwgMHgwMDAwNTBkOSwgMHgwMDAwNTBkOX0sCisJezB4MDAwMGE1MDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNTA0LCAweDA2MDAwMDAzLCAweDA2MDAwMDAzLCAweDA0MDAwMDAyLCAweDA0MDAwMDAyfSwKKwl7MHgwMDAwYTUwOCwgMHgwYTAwMDAyMCwgMHgwYTAwMDAyMCwgMHgwODAwMDAwNCwgMHgwODAwMDAwNH0sCisJezB4MDAwMGE1MGMsIDB4MTAwMDAwMjMsIDB4MTAwMDAwMjMsIDB4MGIwMDAyMDAsIDB4MGIwMDAyMDB9LAorCXsweDAwMDBhNTEwLCAweDE2MDAwMjIwLCAweDE2MDAwMjIwLCAweDBmMDAwMjAyLCAweDBmMDAwMjAyfSwKKwl7MHgwMDAwYTUxNCwgMHgxYzAwMDIyMywgMHgxYzAwMDIyMywgMHgxMjAwMDQwMCwgMHgxMjAwMDQwMH0sCisJezB4MDAwMGE1MTgsIDB4MjEwMDIyMjAsIDB4MjEwMDIyMjAsIDB4MTYwMDA0MDIsIDB4MTYwMDA0MDJ9LAorCXsweDAwMDBhNTFjLCAweDI3MDAyMjIzLCAweDI3MDAyMjIzLCAweDE5MDAwNDA0LCAweDE5MDAwNDA0fSwKKwl7MHgwMDAwYTUyMCwgMHgyYjAyMjIyMCwgMHgyYjAyMjIyMCwgMHgxYzAwMDYwMywgMHgxYzAwMDYwM30sCisJezB4MDAwMGE1MjQsIDB4MmYwMjIyMjIsIDB4MmYwMjIyMjIsIDB4MjEwMDBhMDIsIDB4MjEwMDBhMDJ9LAorCXsweDAwMDBhNTI4LCAweDM0MDIyMjI1LCAweDM0MDIyMjI1LCAweDI1MDAwYTA0LCAweDI1MDAwYTA0fSwKKwl7MHgwMDAwYTUyYywgMHgzYTAyMjIyYSwgMHgzYTAyMjIyYSwgMHgyODAwMGEyMCwgMHgyODAwMGEyMH0sCisJezB4MDAwMGE1MzAsIDB4M2UwMjIyMmMsIDB4M2UwMjIyMmMsIDB4MmMwMDBlMjAsIDB4MmMwMDBlMjB9LAorCXsweDAwMDBhNTM0LCAweDQyMDIyNDJhLCAweDQyMDIyNDJhLCAweDMwMDAwZTIyLCAweDMwMDAwZTIyfSwKKwl7MHgwMDAwYTUzOCwgMHg0NzAyMjQ0YSwgMHg0NzAyMjQ0YSwgMHgzNDAwMGUyNCwgMHgzNDAwMGUyNH0sCisJezB4MDAwMGE1M2MsIDB4NGIwMjI0NGMsIDB4NGIwMjI0NGMsIDB4MzgwMDE2NDAsIDB4MzgwMDE2NDB9LAorCXsweDAwMDBhNTQwLCAweDRlMDIyNDZjLCAweDRlMDIyNDZjLCAweDNjMDAxNjYwLCAweDNjMDAxNjYwfSwKKwl7MHgwMDAwYTU0NCwgMHg1MzAyMjY2YywgMHg1MzAyMjY2YywgMHgzZjAwMTg2MSwgMHgzZjAwMTg2MX0sCisJezB4MDAwMGE1NDgsIDB4NTcwMjI4NmMsIDB4NTcwMjI4NmMsIDB4NDMwMDFhODEsIDB4NDMwMDFhODF9LAorCXsweDAwMDBhNTRjLCAweDVjMDI0ODZiLCAweDVjMDI0ODZiLCAweDQ3MDAxYTgzLCAweDQ3MDAxYTgzfSwKKwl7MHgwMDAwYTU1MCwgMHg2MTAyNGE2YywgMHg2MTAyNGE2YywgMHg0YTAwMWM4NCwgMHg0YTAwMWM4NH0sCisJezB4MDAwMGE1NTQsIDB4NjYwMjZhNmMsIDB4NjYwMjZhNmMsIDB4NGUwMDFjZTMsIDB4NGUwMDFjZTN9LAorCXsweDAwMDBhNTU4LCAweDZiMDI2ZTZjLCAweDZiMDI2ZTZjLCAweDUyMDAxY2U1LCAweDUyMDAxY2U1fSwKKwl7MHgwMDAwYTU1YywgMHg3MDAyNzA4YywgMHg3MDAyNzA4YywgMHg1NjAwMWNlOSwgMHg1NjAwMWNlOX0sCisJezB4MDAwMGE1NjAsIDB4NzMwMmIwOGEsIDB4NzMwMmIwOGEsIDB4NWEwMDFjZWIsIDB4NWEwMDFjZWJ9LAorCXsweDAwMDBhNTY0LCAweDc3MDJiMDhjLCAweDc3MDJiMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU2OCwgMHg3NzAyYjA4YywgMHg3NzAyYjA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCisJezB4MDAwMGE1NmMsIDB4NzcwMmIwOGMsIDB4NzcwMmIwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTcwLCAweDc3MDJiMDhjLCAweDc3MDJiMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU3NCwgMHg3NzAyYjA4YywgMHg3NzAyYjA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCisJezB4MDAwMGE1NzgsIDB4NzcwMmIwOGMsIDB4NzcwMmIwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTdjLCAweDc3MDJiMDhjLCAweDc3MDJiMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU4MCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMH0sCisJezB4MDAwMGE1ODQsIDB4MDY4MDAwMDMsIDB4MDY4MDAwMDMsIDB4MDQ4MDAwMDIsIDB4MDQ4MDAwMDJ9LAorCXsweDAwMDBhNTg4LCAweDBhODAwMDIwLCAweDBhODAwMDIwLCAweDA4ODAwMDA0LCAweDA4ODAwMDA0fSwKKwl7MHgwMDAwYTU4YywgMHgxMDgwMDAyMywgMHgxMDgwMDAyMywgMHgwYjgwMDIwMCwgMHgwYjgwMDIwMH0sCisJezB4MDAwMGE1OTAsIDB4MTY4MDAyMjAsIDB4MTY4MDAyMjAsIDB4MGY4MDAyMDIsIDB4MGY4MDAyMDJ9LAorCXsweDAwMDBhNTk0LCAweDFjODAwMjIzLCAweDFjODAwMjIzLCAweDEyODAwNDAwLCAweDEyODAwNDAwfSwKKwl7MHgwMDAwYTU5OCwgMHgyMTgwMjIyMCwgMHgyMTgwMjIyMCwgMHgxNjgwMDQwMiwgMHgxNjgwMDQwMn0sCisJezB4MDAwMGE1OWMsIDB4Mjc4MDIyMjMsIDB4Mjc4MDIyMjMsIDB4MTk4MDA0MDQsIDB4MTk4MDA0MDR9LAorCXsweDAwMDBhNWEwLCAweDJiODIyMjIwLCAweDJiODIyMjIwLCAweDFjODAwNjAzLCAweDFjODAwNjAzfSwKKwl7MHgwMDAwYTVhNCwgMHgyZjgyMjIyMiwgMHgyZjgyMjIyMiwgMHgyMTgwMGEwMiwgMHgyMTgwMGEwMn0sCisJezB4MDAwMGE1YTgsIDB4MzQ4MjIyMjUsIDB4MzQ4MjIyMjUsIDB4MjU4MDBhMDQsIDB4MjU4MDBhMDR9LAorCXsweDAwMDBhNWFjLCAweDNhODIyMjJhLCAweDNhODIyMjJhLCAweDI4ODAwYTIwLCAweDI4ODAwYTIwfSwKKwl7MHgwMDAwYTViMCwgMHgzZTgyMjIyYywgMHgzZTgyMjIyYywgMHgyYzgwMGUyMCwgMHgyYzgwMGUyMH0sCisJezB4MDAwMGE1YjQsIDB4NDI4MjI0MmEsIDB4NDI4MjI0MmEsIDB4MzA4MDBlMjIsIDB4MzA4MDBlMjJ9LAorCXsweDAwMDBhNWI4LCAweDQ3ODIyNDRhLCAweDQ3ODIyNDRhLCAweDM0ODAwZTI0LCAweDM0ODAwZTI0fSwKKwl7MHgwMDAwYTViYywgMHg0YjgyMjQ0YywgMHg0YjgyMjQ0YywgMHgzODgwMTY0MCwgMHgzODgwMTY0MH0sCisJezB4MDAwMGE1YzAsIDB4NGU4MjI0NmMsIDB4NGU4MjI0NmMsIDB4M2M4MDE2NjAsIDB4M2M4MDE2NjB9LAorCXsweDAwMDBhNWM0LCAweDUzODIyNjZjLCAweDUzODIyNjZjLCAweDNmODAxODYxLCAweDNmODAxODYxfSwKKwl7MHgwMDAwYTVjOCwgMHg1NzgyMjg2YywgMHg1NzgyMjg2YywgMHg0MzgwMWE4MSwgMHg0MzgwMWE4MX0sCisJezB4MDAwMGE1Y2MsIDB4NWM4MjQ4NmIsIDB4NWM4MjQ4NmIsIDB4NDc4MDFhODMsIDB4NDc4MDFhODN9LAorCXsweDAwMDBhNWQwLCAweDYxODI0YTZjLCAweDYxODI0YTZjLCAweDRhODAxYzg0LCAweDRhODAxYzg0fSwKKwl7MHgwMDAwYTVkNCwgMHg2NjgyNmE2YywgMHg2NjgyNmE2YywgMHg0ZTgwMWNlMywgMHg0ZTgwMWNlM30sCisJezB4MDAwMGE1ZDgsIDB4NmI4MjZlNmMsIDB4NmI4MjZlNmMsIDB4NTI4MDFjZTUsIDB4NTI4MDFjZTV9LAorCXsweDAwMDBhNWRjLCAweDcwODI3MDhjLCAweDcwODI3MDhjLCAweDU2ODAxY2U5LCAweDU2ODAxY2U5fSwKKwl7MHgwMDAwYTVlMCwgMHg3MzgyYjA4YSwgMHg3MzgyYjA4YSwgMHg1YTgwMWNlYiwgMHg1YTgwMWNlYn0sCisJezB4MDAwMGE1ZTQsIDB4Nzc4MmIwOGMsIDB4Nzc4MmIwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDBhNWU4LCAweDc3ODJiMDhjLCAweDc3ODJiMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKKwl7MHgwMDAwYTVlYywgMHg3NzgyYjA4YywgMHg3NzgyYjA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCisJezB4MDAwMGE1ZjAsIDB4Nzc4MmIwOGMsIDB4Nzc4MmIwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDBhNWY0LCAweDc3ODJiMDhjLCAweDc3ODJiMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKKwl7MHgwMDAwYTVmOCwgMHg3NzgyYjA4YywgMHg3NzgyYjA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCisJezB4MDAwMGE1ZmMsIDB4Nzc4MmIwOGMsIDB4Nzc4MmIwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDE2MDQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0fSwKKwl7MHgwMDAxNjA0OCwgMHg2MjQ4MDAwMSwgMHg2MjQ4MDAwMSwgMHg2MjQ4MDAwMSwgMHg2MjQ4MDAwMX0sCisJezB4MDAwMTYwNjgsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmN9LAorCXsweDAwMDE2NDQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0fSwKKwl7MHgwMDAxNjQ0OCwgMHg2MjQ4MDAwMSwgMHg2MjQ4MDAwMSwgMHg2MjQ4MDAwMSwgMHg2MjQ4MDAwMX0sCisJezB4MDAwMTY0NjgsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmN9LAorCXsweDAwMDE2ODQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0fSwKKwl7MHgwMDAxNjg0OCwgMHg2MjQ4MDAwMSwgMHg2MjQ4MDAwMSwgMHg2MjQ4MDAwMSwgMHg2MjQ4MDAwMX0sCisJezB4MDAwMTY4NjgsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmN9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhcjkzMDBNb2Rlc19mYXN0X2Nsb2NrXzJwMltdWzNdID0geworCS8qIEFkZHIgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgKi8KKwl7MHgwMDAwMTAzMCwgMHgwMDAwMDI2OCwgMHgwMDAwMDRkMH0sCisJezB4MDAwMDEwNzAsIDB4MDAwMDAxOGMsIDB4MDAwMDAzMTh9LAorCXsweDAwMDAxMGIwLCAweDAwMDAwZmQwLCAweDAwMDAxZmEwfSwKKwl7MHgwMDAwODAxNCwgMHgwNDRjMDQ0YywgMHgwODk4MDg5OH0sCisJezB4MDAwMDgwMWMsIDB4MTQ4ZWMwMmIsIDB4MTQ4ZWMwNTd9LAorCXsweDAwMDA4MzE4LCAweDAwMDA0NGMwLCAweDAwMDA4OTgwfSwKKwl7MHgwMDAwOWUwMCwgMHgwMzcyMTgyMSwgMHgwMzcyMTgyMX0sCisJezB4MDAwMGEyMzAsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMTZ9LAorCXsweDAwMDBhMjU0LCAweDAwMDAwODk4LCAweDAwMDAxMTMwfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzAwXzJwMl9yYWRpb19jb3JlW11bMl0gPSB7CisJLyogQWRkciAgICAgIGFsbG1vZGVzICAqLworCXsweDAwMDE2MDAwLCAweDM2ZGI2ZGI2fSwKKwl7MHgwMDAxNjAwNCwgMHg2ZGI2ZGI0MH0sCisJezB4MDAwMTYwMDgsIDB4NzNmMDAwMDB9LAorCXsweDAwMDE2MDBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjA0MCwgMHg3ZjgwZmZmOH0sCisJezB4MDAwMTYwNGMsIDB4NzZkMDA1YjV9LAorCXsweDAwMDE2MDUwLCAweDU1NmNmMDMxfSwKKwl7MHgwMDAxNjA1NCwgMHgxMzQ0OTQ0MH0sCisJezB4MDAwMTYwNTgsIDB4MGM1MWM5MmN9LAorCXsweDAwMDE2MDVjLCAweDNkYjdmZmZjfSwKKwl7MHgwMDAxNjA2MCwgMHhmZmZmZmZmY30sCisJezB4MDAwMTYwNjQsIDB4MDAwZjAyNzh9LAorCXsweDAwMDE2MDZjLCAweDZkYjYwMDAwfSwKKwl7MHgwMDAxNjA4MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYwODQsIDB4MGU0ODA0OGN9LAorCXsweDAwMDE2MDg4LCAweDU0MjE0NTE0fSwKKwl7MHgwMDAxNjA4YywgMHgxMTlmNDgxZX0sCisJezB4MDAwMTYwOTAsIDB4MjQ5MjY0OTB9LAorCXsweDAwMDE2MDk4LCAweGQyODg4ODg4fSwKKwl7MHgwMDAxNjBhMCwgMHgwYTEwOGZmZX0sCisJezB4MDAwMTYwYTQsIDB4ODEyZmMzNzB9LAorCXsweDAwMDE2MGE4LCAweDQyM2M4MDAwfSwKKwl7MHgwMDAxNjBiNCwgMHg5MjQ4MDA4MH0sCisJezB4MDAwMTYwYzAsIDB4MDBhZGI2ZDB9LAorCXsweDAwMDE2MGM0LCAweDZkYjZkYjYwfSwKKwl7MHgwMDAxNjBjOCwgMHg2ZGI2ZGI2Y30sCisJezB4MDAwMTYwY2MsIDB4MDFlNmMwMDB9LAorCXsweDAwMDE2MTAwLCAweDNmZmZiZTAxfSwKKwl7MHgwMDAxNjEwNCwgMHhmZmY4MDAwMH0sCisJezB4MDAwMTYxMDgsIDB4MDAwODAwMTB9LAorCXsweDAwMDE2MTQ0LCAweDAyMDg0MDgwfSwKKwl7MHgwMDAxNjE0OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYyODAsIDB4MDU4YTAwMDF9LAorCXsweDAwMDE2Mjg0LCAweDNkODQwMjA4fSwKKwl7MHgwMDAxNjI4OCwgMHgwNWEyMDQwOH0sCisJezB4MDAwMTYyOGMsIDB4MDAwMzhjMDd9LAorCXsweDAwMDE2MjkwLCAweDAwMDAwMDA0fSwKKwl7MHgwMDAxNjI5NCwgMHg0NThhYTE0Zn0sCisJezB4MDAwMTYzODAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2Mzg0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjM4OCwgMHgwMDgwMDcwMH0sCisJezB4MDAwMTYzOGMsIDB4MDA4MDA3MDB9LAorCXsweDAwMDE2MzkwLCAweDAwODAwNzAwfSwKKwl7MHgwMDAxNjM5NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYzOTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2MzljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjNhMCwgMHgwMDAwMDAwMX0sCisJezB4MDAwMTYzYTQsIDB4MDAwMDAwMDF9LAorCXsweDAwMDE2M2E4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjNhYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYzYjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2M2I0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjNiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYzYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2M2MwLCAweDAwMDAwMGEwfSwKKwl7MHgwMDAxNjNjNCwgMHgwMDBjMDAwMH0sCisJezB4MDAwMTYzYzgsIDB4MTQwMjE0MDJ9LAorCXsweDAwMDE2M2NjLCAweDAwMDAxNDAyfSwKKwl7MHgwMDAxNjNkMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYzZDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2NDAwLCAweDM2ZGI2ZGI2fSwKKwl7MHgwMDAxNjQwNCwgMHg2ZGI2ZGI0MH0sCisJezB4MDAwMTY0MDgsIDB4NzNmMDAwMDB9LAorCXsweDAwMDE2NDBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjQ0MCwgMHg3ZjgwZmZmOH0sCisJezB4MDAwMTY0NGMsIDB4NzZkMDA1YjV9LAorCXsweDAwMDE2NDUwLCAweDU1NmNmMDMxfSwKKwl7MHgwMDAxNjQ1NCwgMHgxMzQ0OTQ0MH0sCisJezB4MDAwMTY0NTgsIDB4MGM1MWM5MmN9LAorCXsweDAwMDE2NDVjLCAweDNkYjdmZmZjfSwKKwl7MHgwMDAxNjQ2MCwgMHhmZmZmZmZmY30sCisJezB4MDAwMTY0NjQsIDB4MDAwZjAyNzh9LAorCXsweDAwMDE2NDZjLCAweDZkYjYwMDAwfSwKKwl7MHgwMDAxNjUwMCwgMHgzZmZmYmUwMX0sCisJezB4MDAwMTY1MDQsIDB4ZmZmODAwMDB9LAorCXsweDAwMDE2NTA4LCAweDAwMDgwMDEwfSwKKwl7MHgwMDAxNjU0NCwgMHgwMjA4NDA4MH0sCisJezB4MDAwMTY1NDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2NzgwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjc4NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY3ODgsIDB4MDA4MDA3MDB9LAorCXsweDAwMDE2NzhjLCAweDAwODAwNzAwfSwKKwl7MHgwMDAxNjc5MCwgMHgwMDgwMDcwMH0sCisJezB4MDAwMTY3OTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2Nzk4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjc5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY3YTAsIDB4MDAwMDAwMDF9LAorCXsweDAwMDE2N2E0LCAweDAwMDAwMDAxfSwKKwl7MHgwMDAxNjdhOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY3YWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2N2IwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjdiNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY3YjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2N2JjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjdjMCwgMHgwMDAwMDBhMH0sCisJezB4MDAwMTY3YzQsIDB4MDAwYzAwMDB9LAorCXsweDAwMDE2N2M4LCAweDE0MDIxNDAyfSwKKwl7MHgwMDAxNjdjYywgMHgwMDAwMTQwMn0sCisJezB4MDAwMTY3ZDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2N2Q0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjgwMCwgMHgzNmRiNmRiNn0sCisJezB4MDAwMTY4MDQsIDB4NmRiNmRiNDB9LAorCXsweDAwMDE2ODA4LCAweDczZjAwMDAwfSwKKwl7MHgwMDAxNjgwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY4NDAsIDB4N2Y4MGZmZjh9LAorCXsweDAwMDE2ODRjLCAweDc2ZDAwNWI1fSwKKwl7MHgwMDAxNjg1MCwgMHg1NTZjZjAzMX0sCisJezB4MDAwMTY4NTQsIDB4MTM0NDk0NDB9LAorCXsweDAwMDE2ODU4LCAweDBjNTFjOTJjfSwKKwl7MHgwMDAxNjg1YywgMHgzZGI3ZmZmY30sCisJezB4MDAwMTY4NjAsIDB4ZmZmZmZmZmN9LAorCXsweDAwMDE2ODY0LCAweDAwMGYwMjc4fSwKKwl7MHgwMDAxNjg2YywgMHg2ZGI2MDAwMH0sCisJezB4MDAwMTY5MDAsIDB4M2ZmZmJlMDF9LAorCXsweDAwMDE2OTA0LCAweGZmZjgwMDAwfSwKKwl7MHgwMDAxNjkwOCwgMHgwMDA4MDAxMH0sCisJezB4MDAwMTY5NDQsIDB4MDIwODQwODB9LAorCXsweDAwMDE2OTQ4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNmI4MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTZiODQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2Yjg4LCAweDAwODAwNzAwfSwKKwl7MHgwMDAxNmI4YywgMHgwMDgwMDcwMH0sCisJezB4MDAwMTZiOTAsIDB4MDA4MDA3MDB9LAorCXsweDAwMDE2Yjk0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNmI5OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTZiOWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2YmEwLCAweDAwMDAwMDAxfSwKKwl7MHgwMDAxNmJhNCwgMHgwMDAwMDAwMX0sCisJezB4MDAwMTZiYTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2YmFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNmJiMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTZiYjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2YmI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNmJiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMTZiYzAsIDB4MDAwMDAwYTB9LAorCXsweDAwMDE2YmM0LCAweDAwMGMwMDAwfSwKKwl7MHgwMDAxNmJjOCwgMHgxNDAyMTQwMn0sCisJezB4MDAwMTZiY2MsIDB4MDAwMDE0MDJ9LAorCXsweDAwMDE2YmQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNmJkNCwgMHgwMDAwMDAwMH0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTMwMENvbW1vbl9yeF9nYWluX3RhYmxlX21lcmxpbl8ycDJbXVsyXSA9IHsKKwkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCisJezB4MDAwMGEwMDAsIDB4MDIwMDAxMDF9LAorCXsweDAwMDBhMDA0LCAweDAyMDAwMTAyfSwKKwl7MHgwMDAwYTAwOCwgMHgwMjAwMDEwM30sCisJezB4MDAwMGEwMGMsIDB4MDIwMDAxMDR9LAorCXsweDAwMDBhMDEwLCAweDAyMDAwMjAwfSwKKwl7MHgwMDAwYTAxNCwgMHgwMjAwMDIwMX0sCisJezB4MDAwMGEwMTgsIDB4MDIwMDAyMDJ9LAorCXsweDAwMDBhMDFjLCAweDAyMDAwMjAzfSwKKwl7MHgwMDAwYTAyMCwgMHgwMjAwMDIwNH0sCisJezB4MDAwMGEwMjQsIDB4MDIwMDAyMDV9LAorCXsweDAwMDBhMDI4LCAweDAyMDAwMjA4fSwKKwl7MHgwMDAwYTAyYywgMHgwMjAwMDMwMn0sCisJezB4MDAwMGEwMzAsIDB4MDIwMDAzMDN9LAorCXsweDAwMDBhMDM0LCAweDAyMDAwMzA0fSwKKwl7MHgwMDAwYTAzOCwgMHgwMjAwMDQwMH0sCisJezB4MDAwMGEwM2MsIDB4MDIwMTAzMDB9LAorCXsweDAwMDBhMDQwLCAweDAyMDEwMzAxfSwKKwl7MHgwMDAwYTA0NCwgMHgwMjAxMDMwMn0sCisJezB4MDAwMGEwNDgsIDB4MDIwMDA1MDB9LAorCXsweDAwMDBhMDRjLCAweDAyMDEwNDAwfSwKKwl7MHgwMDAwYTA1MCwgMHgwMjAyMDMwMH0sCisJezB4MDAwMGEwNTQsIDB4MDIwMjAzMDF9LAorCXsweDAwMDBhMDU4LCAweDAyMDIwMzAyfSwKKwl7MHgwMDAwYTA1YywgMHgwMjAyMDMwM30sCisJezB4MDAwMGEwNjAsIDB4MDIwMjA0MDB9LAorCXsweDAwMDBhMDY0LCAweDAyMDMwMzAwfSwKKwl7MHgwMDAwYTA2OCwgMHgwMjAzMDMwMX0sCisJezB4MDAwMGEwNmMsIDB4MDIwMzAzMDJ9LAorCXsweDAwMDBhMDcwLCAweDAyMDMwMzAzfSwKKwl7MHgwMDAwYTA3NCwgMHgwMjAzMDQwMH0sCisJezB4MDAwMGEwNzgsIDB4MDIwNDAzMDB9LAorCXsweDAwMDBhMDdjLCAweDAyMDQwMzAxfSwKKwl7MHgwMDAwYTA4MCwgMHgwMjA0MDMwMn0sCisJezB4MDAwMGEwODQsIDB4MDIwNDAzMDN9LAorCXsweDAwMDBhMDg4LCAweDAyMDMwNTAwfSwKKwl7MHgwMDAwYTA4YywgMHgwMjA0MDQwMH0sCisJezB4MDAwMGEwOTAsIDB4MDIwNTAyMDN9LAorCXsweDAwMDBhMDk0LCAweDAyMDUwMjA0fSwKKwl7MHgwMDAwYTA5OCwgMHgwMjA1MDIwNX0sCisJezB4MDAwMGEwOWMsIDB4MDIwNDA1MDB9LAorCXsweDAwMDBhMGEwLCAweDAyMDUwMzAxfSwKKwl7MHgwMDAwYTBhNCwgMHgwMjA1MDMwMn0sCisJezB4MDAwMGEwYTgsIDB4MDIwNTAzMDN9LAorCXsweDAwMDBhMGFjLCAweDAyMDUwNDAwfSwKKwl7MHgwMDAwYTBiMCwgMHgwMjA1MDQwMX0sCisJezB4MDAwMGEwYjQsIDB4MDIwNTA0MDJ9LAorCXsweDAwMDBhMGI4LCAweDAyMDUwNDAzfSwKKwl7MHgwMDAwYTBiYywgMHgwMjA1MDUwMH0sCisJezB4MDAwMGEwYzAsIDB4MDIwNTA1MDF9LAorCXsweDAwMDBhMGM0LCAweDAyMDUwNTAyfSwKKwl7MHgwMDAwYTBjOCwgMHgwMjA1MDUwM30sCisJezB4MDAwMGEwY2MsIDB4MDIwNTA1MDR9LAorCXsweDAwMDBhMGQwLCAweDAyMDUwNjAwfSwKKwl7MHgwMDAwYTBkNCwgMHgwMjA1MDYwMX0sCisJezB4MDAwMGEwZDgsIDB4MDIwNTA2MDJ9LAorCXsweDAwMDBhMGRjLCAweDAyMDUwNjAzfSwKKwl7MHgwMDAwYTBlMCwgMHgwMjA1MDYwNH0sCisJezB4MDAwMGEwZTQsIDB4MDIwNTA3MDB9LAorCXsweDAwMDBhMGU4LCAweDAyMDUwNzAxfSwKKwl7MHgwMDAwYTBlYywgMHgwMjA1MDcwMn0sCisJezB4MDAwMGEwZjAsIDB4MDIwNTA3MDN9LAorCXsweDAwMDBhMGY0LCAweDAyMDUwNzA0fSwKKwl7MHgwMDAwYTBmOCwgMHgwMjA1MDcwNX0sCisJezB4MDAwMGEwZmMsIDB4MDIwNTA3MDh9LAorCXsweDAwMDBhMTAwLCAweDAyMDUwNzA5fSwKKwl7MHgwMDAwYTEwNCwgMHgwMjA1MDcwYX0sCisJezB4MDAwMGExMDgsIDB4MDIwNTA3MGJ9LAorCXsweDAwMDBhMTBjLCAweDAyMDUwNzBjfSwKKwl7MHgwMDAwYTExMCwgMHgwMjA1MDcwZH0sCisJezB4MDAwMGExMTQsIDB4MDIwNTA3MTB9LAorCXsweDAwMDBhMTE4LCAweDAyMDUwNzExfSwKKwl7MHgwMDAwYTExYywgMHgwMjA1MDcxMn0sCisJezB4MDAwMGExMjAsIDB4MDIwNTA3MTN9LAorCXsweDAwMDBhMTI0LCAweDAyMDUwNzE0fSwKKwl7MHgwMDAwYTEyOCwgMHgwMjA1MDcxNX0sCisJezB4MDAwMGExMmMsIDB4MDIwNTA3MzB9LAorCXsweDAwMDBhMTMwLCAweDAyMDUwNzMxfSwKKwl7MHgwMDAwYTEzNCwgMHgwMjA1MDczMn0sCisJezB4MDAwMGExMzgsIDB4MDIwNTA3MzN9LAorCXsweDAwMDBhMTNjLCAweDAyMDUwNzM0fSwKKwl7MHgwMDAwYTE0MCwgMHgwMjA1MDczNX0sCisJezB4MDAwMGExNDQsIDB4MDIwNTA3NTB9LAorCXsweDAwMDBhMTQ4LCAweDAyMDUwNzUxfSwKKwl7MHgwMDAwYTE0YywgMHgwMjA1MDc1Mn0sCisJezB4MDAwMGExNTAsIDB4MDIwNTA3NTN9LAorCXsweDAwMDBhMTU0LCAweDAyMDUwNzU0fSwKKwl7MHgwMDAwYTE1OCwgMHgwMjA1MDc1NX0sCisJezB4MDAwMGExNWMsIDB4MDIwNTA3NzB9LAorCXsweDAwMDBhMTYwLCAweDAyMDUwNzcxfSwKKwl7MHgwMDAwYTE2NCwgMHgwMjA1MDc3Mn0sCisJezB4MDAwMGExNjgsIDB4MDIwNTA3NzN9LAorCXsweDAwMDBhMTZjLCAweDAyMDUwNzc0fSwKKwl7MHgwMDAwYTE3MCwgMHgwMjA1MDc3NX0sCisJezB4MDAwMGExNzQsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBhMTc4LCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYTE3YywgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGExODAsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBhMTg0LCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYTE4OCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGExOGMsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBhMTkwLCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYTE5NCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGExOTgsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBhMTljLCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYTFhMCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGExYTQsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBhMWE4LCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYTFhYywgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGExYjAsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBhMWI0LCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYTFiOCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGExYmMsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBhMWMwLCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYTFjNCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGExYzgsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBhMWNjLCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYTFkMCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGExZDQsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBhMWQ4LCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYTFkYywgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGExZTAsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBhMWU0LCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYTFlOCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGExZWMsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBhMWYwLCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYTFmNCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGExZjgsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBhMWZjLCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYjAwMCwgMHgwMjAwMDEwMX0sCisJezB4MDAwMGIwMDQsIDB4MDIwMDAxMDJ9LAorCXsweDAwMDBiMDA4LCAweDAyMDAwMTAzfSwKKwl7MHgwMDAwYjAwYywgMHgwMjAwMDEwNH0sCisJezB4MDAwMGIwMTAsIDB4MDIwMDAyMDB9LAorCXsweDAwMDBiMDE0LCAweDAyMDAwMjAxfSwKKwl7MHgwMDAwYjAxOCwgMHgwMjAwMDIwMn0sCisJezB4MDAwMGIwMWMsIDB4MDIwMDAyMDN9LAorCXsweDAwMDBiMDIwLCAweDAyMDAwMjA0fSwKKwl7MHgwMDAwYjAyNCwgMHgwMjAwMDIwNX0sCisJezB4MDAwMGIwMjgsIDB4MDIwMDAyMDh9LAorCXsweDAwMDBiMDJjLCAweDAyMDAwMzAyfSwKKwl7MHgwMDAwYjAzMCwgMHgwMjAwMDMwM30sCisJezB4MDAwMGIwMzQsIDB4MDIwMDAzMDR9LAorCXsweDAwMDBiMDM4LCAweDAyMDAwNDAwfSwKKwl7MHgwMDAwYjAzYywgMHgwMjAxMDMwMH0sCisJezB4MDAwMGIwNDAsIDB4MDIwMTAzMDF9LAorCXsweDAwMDBiMDQ0LCAweDAyMDEwMzAyfSwKKwl7MHgwMDAwYjA0OCwgMHgwMjAwMDUwMH0sCisJezB4MDAwMGIwNGMsIDB4MDIwMTA0MDB9LAorCXsweDAwMDBiMDUwLCAweDAyMDIwMzAwfSwKKwl7MHgwMDAwYjA1NCwgMHgwMjAyMDMwMX0sCisJezB4MDAwMGIwNTgsIDB4MDIwMjAzMDJ9LAorCXsweDAwMDBiMDVjLCAweDAyMDIwMzAzfSwKKwl7MHgwMDAwYjA2MCwgMHgwMjAyMDQwMH0sCisJezB4MDAwMGIwNjQsIDB4MDIwMzAzMDB9LAorCXsweDAwMDBiMDY4LCAweDAyMDMwMzAxfSwKKwl7MHgwMDAwYjA2YywgMHgwMjAzMDMwMn0sCisJezB4MDAwMGIwNzAsIDB4MDIwMzAzMDN9LAorCXsweDAwMDBiMDc0LCAweDAyMDMwNDAwfSwKKwl7MHgwMDAwYjA3OCwgMHgwMjA0MDMwMH0sCisJezB4MDAwMGIwN2MsIDB4MDIwNDAzMDF9LAorCXsweDAwMDBiMDgwLCAweDAyMDQwMzAyfSwKKwl7MHgwMDAwYjA4NCwgMHgwMjA0MDMwM30sCisJezB4MDAwMGIwODgsIDB4MDIwMzA1MDB9LAorCXsweDAwMDBiMDhjLCAweDAyMDQwNDAwfSwKKwl7MHgwMDAwYjA5MCwgMHgwMjA1MDIwM30sCisJezB4MDAwMGIwOTQsIDB4MDIwNTAyMDR9LAorCXsweDAwMDBiMDk4LCAweDAyMDUwMjA1fSwKKwl7MHgwMDAwYjA5YywgMHgwMjA0MDUwMH0sCisJezB4MDAwMGIwYTAsIDB4MDIwNTAzMDF9LAorCXsweDAwMDBiMGE0LCAweDAyMDUwMzAyfSwKKwl7MHgwMDAwYjBhOCwgMHgwMjA1MDMwM30sCisJezB4MDAwMGIwYWMsIDB4MDIwNTA0MDB9LAorCXsweDAwMDBiMGIwLCAweDAyMDUwNDAxfSwKKwl7MHgwMDAwYjBiNCwgMHgwMjA1MDQwMn0sCisJezB4MDAwMGIwYjgsIDB4MDIwNTA0MDN9LAorCXsweDAwMDBiMGJjLCAweDAyMDUwNTAwfSwKKwl7MHgwMDAwYjBjMCwgMHgwMjA1MDUwMX0sCisJezB4MDAwMGIwYzQsIDB4MDIwNTA1MDJ9LAorCXsweDAwMDBiMGM4LCAweDAyMDUwNTAzfSwKKwl7MHgwMDAwYjBjYywgMHgwMjA1MDUwNH0sCisJezB4MDAwMGIwZDAsIDB4MDIwNTA2MDB9LAorCXsweDAwMDBiMGQ0LCAweDAyMDUwNjAxfSwKKwl7MHgwMDAwYjBkOCwgMHgwMjA1MDYwMn0sCisJezB4MDAwMGIwZGMsIDB4MDIwNTA2MDN9LAorCXsweDAwMDBiMGUwLCAweDAyMDUwNjA0fSwKKwl7MHgwMDAwYjBlNCwgMHgwMjA1MDcwMH0sCisJezB4MDAwMGIwZTgsIDB4MDIwNTA3MDF9LAorCXsweDAwMDBiMGVjLCAweDAyMDUwNzAyfSwKKwl7MHgwMDAwYjBmMCwgMHgwMjA1MDcwM30sCisJezB4MDAwMGIwZjQsIDB4MDIwNTA3MDR9LAorCXsweDAwMDBiMGY4LCAweDAyMDUwNzA1fSwKKwl7MHgwMDAwYjBmYywgMHgwMjA1MDcwOH0sCisJezB4MDAwMGIxMDAsIDB4MDIwNTA3MDl9LAorCXsweDAwMDBiMTA0LCAweDAyMDUwNzBhfSwKKwl7MHgwMDAwYjEwOCwgMHgwMjA1MDcwYn0sCisJezB4MDAwMGIxMGMsIDB4MDIwNTA3MGN9LAorCXsweDAwMDBiMTEwLCAweDAyMDUwNzBkfSwKKwl7MHgwMDAwYjExNCwgMHgwMjA1MDcxMH0sCisJezB4MDAwMGIxMTgsIDB4MDIwNTA3MTF9LAorCXsweDAwMDBiMTFjLCAweDAyMDUwNzEyfSwKKwl7MHgwMDAwYjEyMCwgMHgwMjA1MDcxM30sCisJezB4MDAwMGIxMjQsIDB4MDIwNTA3MTR9LAorCXsweDAwMDBiMTI4LCAweDAyMDUwNzE1fSwKKwl7MHgwMDAwYjEyYywgMHgwMjA1MDczMH0sCisJezB4MDAwMGIxMzAsIDB4MDIwNTA3MzF9LAorCXsweDAwMDBiMTM0LCAweDAyMDUwNzMyfSwKKwl7MHgwMDAwYjEzOCwgMHgwMjA1MDczM30sCisJezB4MDAwMGIxM2MsIDB4MDIwNTA3MzR9LAorCXsweDAwMDBiMTQwLCAweDAyMDUwNzM1fSwKKwl7MHgwMDAwYjE0NCwgMHgwMjA1MDc1MH0sCisJezB4MDAwMGIxNDgsIDB4MDIwNTA3NTF9LAorCXsweDAwMDBiMTRjLCAweDAyMDUwNzUyfSwKKwl7MHgwMDAwYjE1MCwgMHgwMjA1MDc1M30sCisJezB4MDAwMGIxNTQsIDB4MDIwNTA3NTR9LAorCXsweDAwMDBiMTU4LCAweDAyMDUwNzU1fSwKKwl7MHgwMDAwYjE1YywgMHgwMjA1MDc3MH0sCisJezB4MDAwMGIxNjAsIDB4MDIwNTA3NzF9LAorCXsweDAwMDBiMTY0LCAweDAyMDUwNzcyfSwKKwl7MHgwMDAwYjE2OCwgMHgwMjA1MDc3M30sCisJezB4MDAwMGIxNmMsIDB4MDIwNTA3NzR9LAorCXsweDAwMDBiMTcwLCAweDAyMDUwNzc1fSwKKwl7MHgwMDAwYjE3NCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGIxNzgsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBiMTdjLCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYjE4MCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGIxODQsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBiMTg4LCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYjE4YywgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGIxOTAsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBiMTk0LCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYjE5OCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGIxOWMsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBiMWEwLCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYjFhNCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGIxYTgsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBiMWFjLCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYjFiMCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGIxYjQsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBiMWI4LCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYjFiYywgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGIxYzAsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBiMWM0LCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYjFjOCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGIxY2MsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBiMWQwLCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYjFkNCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGIxZDgsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBiMWRjLCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYjFlMCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGIxZTQsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBiMWU4LCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYjFlYywgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGIxZjAsIDB4MDAwMDA3NzZ9LAorCXsweDAwMDBiMWY0LCAweDAwMDAwNzc2fSwKKwl7MHgwMDAwYjFmOCwgMHgwMDAwMDc3Nn0sCisJezB4MDAwMGIxZmMsIDB4MDAwMDA3NzZ9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhcjkzMDBfMnAyX21hY19wb3N0YW1ibGVbXVs1XSA9IHsKKwkvKiBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAgMkdfSFQyMCAgICovCisJezB4MDAwMDEwMzAsIDB4MDAwMDAyMzAsIDB4MDAwMDA0NjAsIDB4MDAwMDAyYzAsIDB4MDAwMDAxNjB9LAorCXsweDAwMDAxMDcwLCAweDAwMDAwMTY4LCAweDAwMDAwMmQwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjfSwKKwl7MHgwMDAwMTBiMCwgMHgwMDAwMGU2MCwgMHgwMDAwMWNjMCwgMHgwMDAwN2M3MCwgMHgwMDAwM2UzOH0sCisJezB4MDAwMDgwMTQsIDB4MDNlODAzZTgsIDB4MDdkMDA3ZDAsIDB4MTA4MDE2MDAsIDB4MDg0MDBiMDB9LAorCXsweDAwMDA4MDFjLCAweDEyOGQ4MDI3LCAweDEyOGQ4MDRmLCAweDEyZTAwMDU3LCAweDEyZTAwMDJifSwKKwl7MHgwMDAwODEyMCwgMHgwOGYwNDgwMCwgMHgwOGYwNDgwMCwgMHgwOGYwNDgxMCwgMHgwOGYwNDgxMH0sCisJezB4MDAwMDgxZDAsIDB4MDAwMDMyMTAsIDB4MDAwMDMyMTAsIDB4MDAwMDMyMGEsIDB4MDAwMDMyMGF9LAorCXsweDAwMDA4MzE4LCAweDAwMDAzZTgwLCAweDAwMDA3ZDAwLCAweDAwMDA2ODgwLCAweDAwMDAzNDQwfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzAwXzJwMl9zb2NfcG9zdGFtYmxlW11bNV0gPSB7CisJLyogQWRkciAgICAgIDVHX0hUMjAgICAgIDVHX0hUNDAgICAgIDJHX0hUNDAgICAgIDJHX0hUMjAgICAqLworCXsweDAwMDA3MDEwLCAweDAwMDAwMDIzLCAweDAwMDAwMDIzLCAweDAwMDAwMDIzLCAweDAwMDAwMDIzfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MjAwX21lcmxpbl8ycDJfcmFkaW9fY29yZVtdWzJdID0geworCS8qIEFkZHIgICAgICBhbGxtb2RlcyAgKi8KKwl7MHgwMDAwNzgwMCwgMHgwMDA0MDAwMH0sCisJezB4MDAwMDc4MDQsIDB4ZGIwMDUwMTJ9LAorCXsweDAwMDA3ODA4LCAweDA0OTI0OTE0fSwKKwl7MHgwMDAwNzgwYywgMHgyMTA4NDIxMH0sCisJezB4MDAwMDc4MTAsIDB4NmQ4MDEzMDB9LAorCXsweDAwMDA3ODE0LCAweDAwMTliZWZmfSwKKwl7MHgwMDAwNzgxOCwgMHgwN2U0MTAwMH0sCisJezB4MDAwMDc4MWMsIDB4MDAzOTIwMDB9LAorCXsweDAwMDA3ODIwLCAweDkyNTkyNDgwfSwKKwl7MHgwMDAwNzgyNCwgMHgwMDA0MDAwMH0sCisJezB4MDAwMDc4MjgsIDB4ZGIwMDUwMTJ9LAorCXsweDAwMDA3ODJjLCAweDA0OTI0OTE0fSwKKwl7MHgwMDAwNzgzMCwgMHgyMTA4NDIxMH0sCisJezB4MDAwMDc4MzQsIDB4NmQ4MDEzMDB9LAorCXsweDAwMDA3ODM4LCAweDAwMTliZWZmfSwKKwl7MHgwMDAwNzgzYywgMHgwN2U0MDAwMH0sCisJezB4MDAwMDc4NDAsIDB4MDAzOTIwMDB9LAorCXsweDAwMDA3ODQ0LCAweDkyNTkyNDgwfSwKKwl7MHgwMDAwNzg0OCwgMHgwMDEwMDAwMH0sCisJezB4MDAwMDc4NGMsIDB4NzczZjA1Njd9LAorCXsweDAwMDA3ODUwLCAweDU0MjE0NTE0fSwKKwl7MHgwMDAwNzg1NCwgMHgxMjAzNTgyOH0sCisJezB4MDAwMDc4NTgsIDB4OTI1OTI2OTJ9LAorCXsweDAwMDA3ODVjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwNzg2MCwgMHg1NjQwMDAwMH0sCisJezB4MDAwMDc4NjQsIDB4MGE4ZTM3MGV9LAorCXsweDAwMDA3ODY4LCAweGMwMTAyODUwfSwKKwl7MHgwMDAwNzg2YywgMHg4MTJkNDAwMH0sCisJezB4MDAwMDc4NzAsIDB4ODA3ZWM0MDB9LAorCXsweDAwMDA3ODc0LCAweDAwMWI2ZGIwfSwKKwl7MHgwMDAwNzg3OCwgMHgwMDM3NmI2M30sCisJezB4MDAwMDc4N2MsIDB4MDZkYjZkYjZ9LAorCXsweDAwMDA3ODgwLCAweDAwNmQ4MDAwfSwKKwl7MHgwMDAwNzg4NCwgMHhmZmVmZmZmZX0sCisJezB4MDAwMDc4ODgsIDB4ZmZlZmZmZmV9LAorCXsweDAwMDA3ODhjLCAweDAwMDEwMDAwfSwKKwl7MHgwMDAwNzg5MCwgMHgwMjA2MGFlYn0sCisJezB4MDAwMDc4OTQsIDB4NWExMDgwMDB9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhcjkzMDBfMnAyX2Jhc2ViYW5kX3Bvc3RhbWJsZVtdWzVdID0geworCS8qIEFkZHIgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICAgKi8KKwl7MHgwMDAwOTgxMCwgMHhkMDBhODAwNSwgMHhkMDBhODAwNSwgMHhkMDBhODAxMSwgMHhkMDBhODAxMX0sCisJezB4MDAwMDk4MjAsIDB4MjA2YTAyMmUsIDB4MjA2YTAyMmUsIDB4MjA2YTAxMmUsIDB4MjA2YTAxMmV9LAorCXsweDAwMDA5ODI0LCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwfSwKKwl7MHgwMDAwOTgyOCwgMHgwNjkwMzA4MSwgMHgwNjkwMzA4MSwgMHgwNjkwMzg4MSwgMHgwNjkwMzg4MX0sCisJezB4MDAwMDk4MmMsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDR9LAorCXsweDAwMDA5ODMwLCAweDAwMDAwNTljLCAweDAwMDAwNTljLCAweDAwMDAxMTljLCAweDAwMDAxMTljfSwKKwl7MHgwMDAwOWMwMCwgMHgwMDAwMDBjNCwgMHgwMDAwMDBjNCwgMHgwMDAwMDBjNCwgMHgwMDAwMDBjNH0sCisJezB4MDAwMDllMDAsIDB4MDM3MjE2MWUsIDB4MDM3MjE2MWUsIDB4MDM3MjE2YTAsIDB4MDM3MjE2YTB9LAorCXsweDAwMDA5ZTA0LCAweDAwODAyMDIwLCAweDAwODAyMDIwLCAweDAwODAyMDIwLCAweDAwODAyMDIwfSwKKwl7MHgwMDAwOWUwYywgMHg2YzQwMDBlMiwgMHg2ZDQwMDBlMiwgMHg2ZDQwMDBlMiwgMHg2YzQwMDBlMn0sCisJezB4MDAwMDllMTAsIDB4N2VjODhkMmUsIDB4N2VjODhkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmV9LAorCXsweDAwMDA5ZTE0LCAweDMxMzk1ZDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk1ZDVlfSwKKwl7MHgwMDAwOWUxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDllMWMsIDB4MDAwMWNmOWMsIDB4MDAwMWNmOWMsIDB4MDAwMjFmOWMsIDB4MDAwMjFmOWN9LAorCXsweDAwMDA5ZTIwLCAweDAwMDAwM2I1LCAweDAwMDAwM2I1LCAweDAwMDAwM2NlLCAweDAwMDAwM2NlfSwKKwl7MHgwMDAwOWUyYywgMHgwMDAwMDAxYywgMHgwMDAwMDAxYywgMHgwMDAwMDAyMSwgMHgwMDAwMDAyMX0sCisJezB4MDAwMDllNDQsIDB4MDIzMjFlMjcsIDB4MDIzMjFlMjcsIDB4MDIyOTFlMjcsIDB4MDIyOTFlMjd9LAorCXsweDAwMDA5ZTQ4LCAweDUwMzAyMDFhLCAweDUwMzAyMDFhLCAweDUwMzAyMDEyLCAweDUwMzAyMDEyfSwKKwl7MHgwMDAwOWZjOCwgMHgwMDAzZjAwMCwgMHgwMDAzZjAwMCwgMHgwMDAxYTAwMCwgMHgwMDAxYTAwMH0sCisJezB4MDAwMGEyMDQsIDB4MDAwMDM3YzAsIDB4MDAwMDM3YzQsIDB4MDAwMDM3YzQsIDB4MDAwMDM3YzB9LAorCXsweDAwMDBhMjA4LCAweDAwMDAwMTA0LCAweDAwMDAwMTA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0fSwKKwl7MHgwMDAwYTIzMCwgMHgwMDAwMDAwYSwgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNiwgMHgwMDAwMDAwYn0sCisJezB4MDAwMGEyMzQsIDB4MDAwMDBmZmYsIDB4MTAwMDBmZmYsIDB4MTAwMDBmZmYsIDB4MDAwMDBmZmZ9LAorCXsweDAwMDBhMjM4LCAweGZmYjgxMDE4LCAweGZmYjgxMDE4LCAweGZmYjgxMDE4LCAweGZmYjgxMDE4fSwKKwl7MHgwMDAwYTI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDIxMCwgMHgwMDAwMDEwOH0sCisJezB4MDAwMGEyNTQsIDB4MDAwMDA3ZDAsIDB4MDAwMDBmYTAsIDB4MDAwMDExMzAsIDB4MDAwMDA4OTh9LAorCXsweDAwMDBhMjU4LCAweDAyMDIwMDAyLCAweDAyMDIwMDAyLCAweDAyMDIwMDAyLCAweDAyMDIwMDAyfSwKKwl7MHgwMDAwYTI1YywgMHgwMTAwMGUwZSwgMHgwMTAwMGUwZSwgMHgwMTAwMGUwZSwgMHgwMTAwMGUwZX0sCisJezB4MDAwMGEyNjAsIDB4MGEwMjE1MDEsIDB4MGEwMjE1MDEsIDB4M2EwMjE1MDEsIDB4M2EwMjE1MDF9LAorCXsweDAwMDBhMjY0LCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlfSwKKwl7MHgwMDAwYTI4MCwgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYn0sCisJezB4MDAwMGEyODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAxNTAsIDB4MDAwMDAxNTB9LAorCXsweDAwMDBhMjg4LCAweDAwMDAwMTEwLCAweDAwMDAwMTEwLCAweDAwMDAwMTEwLCAweDAwMDAwMTEwfSwKKwl7MHgwMDAwYTI4YywgMHgwMDAyMjIyMiwgMHgwMDAyMjIyMiwgMHgwMDAyMjIyMiwgMHgwMDAyMjIyMn0sCisJezB4MDAwMGEyYzQsIDB4MDAxNThkMTgsIDB4MDAxNThkMTgsIDB4MDAxNThkMTgsIDB4MDAxNThkMTh9LAorCXsweDAwMDBhMmQwLCAweDAwMDcxOTgxLCAweDAwMDcxOTgxLCAweDAwMDcxOTgxLCAweDAwMDcxOTgyfSwKKwl7MHgwMDAwYTJkOCwgMHhmOTk5YTgzYSwgMHhmOTk5YTgzYSwgMHhmOTk5YTgzYSwgMHhmOTk5YTgzYX0sCisJezB4MDAwMGEzNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhODMwLCAweDAwMDAwMTljLCAweDAwMDAwMTljLCAweDAwMDAwMTljLCAweDAwMDAwMTljfSwKKwl7MHgwMDAwYWUwNCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMH0sCisJezB4MDAwMGFlMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhZTFjLCAweDAwMDAwMTljLCAweDAwMDAwMTljLCAweDAwMDAwMTljLCAweDAwMDAwMTljfSwKKwl7MHgwMDAwYWUyMCwgMHgwMDAwMDFiNSwgMHgwMDAwMDFiNSwgMHgwMDAwMDFjZSwgMHgwMDAwMDFjZX0sCisJezB4MDAwMGIyODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAxNTAsIDB4MDAwMDAxNTB9LAorCXsweDAwMDBiODMwLCAweDAwMDAwMTljLCAweDAwMDAwMTljLCAweDAwMDAwMTljLCAweDAwMDAwMTljfSwKKwl7MHgwMDAwYmUwNCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMH0sCisJezB4MDAwMGJlMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiZTFjLCAweDAwMDAwMTljLCAweDAwMDAwMTljLCAweDAwMDAwMTljLCAweDAwMDAwMTljfSwKKwl7MHgwMDAwYmUyMCwgMHgwMDAwMDFiNSwgMHgwMDAwMDFiNSwgMHgwMDAwMDFjZSwgMHgwMDAwMDFjZX0sCisJezB4MDAwMGMyODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAxNTAsIDB4MDAwMDAxNTB9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhcjkzMDBfMnAyX2Jhc2ViYW5kX2NvcmVbXVsyXSA9IHsKKwkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCisJezB4MDAwMDk4MDAsIDB4YWZlNjhlMzB9LAorCXsweDAwMDA5ODA0LCAweGZkMTRlMDAwfSwKKwl7MHgwMDAwOTgwOCwgMHg5YzBhOWY2Yn0sCisJezB4MDAwMDk4MGMsIDB4MDQ5MDAwMDB9LAorCXsweDAwMDA5ODE0LCAweDkyODBjMDBhfSwKKwl7MHgwMDAwOTgxOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4MWMsIDB4MDAwMjAwMjh9LAorCXsweDAwMDA5ODM0LCAweDVmM2NhM2RlfSwKKwl7MHgwMDAwOTgzOCwgMHgwMTA4ZWNmZn0sCisJezB4MDAwMDk4M2MsIDB4MTQ3NTA2MDB9LAorCXsweDAwMDA5ODgwLCAweDIwMWZmZjAwfSwKKwl7MHgwMDAwOTg4NCwgMHgwMDAwMTA0Mn0sCisJezB4MDAwMDk4YTQsIDB4MDAyMDA0MDB9LAorCXsweDAwMDA5OGIwLCAweDUyNDQwYmJlfSwKKwl7MHgwMDAwOThkMCwgMHgwMDRiNmE4ZX0sCisJezB4MDAwMDk4ZDQsIDB4MDAwMDA4MjB9LAorCXsweDAwMDA5OGRjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOThmMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4ZjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YzA0LCAweGZmNTVmZjU1fSwKKwl7MHgwMDAwOWMwOCwgMHgwMzIwZmY1NX0sCisJezB4MDAwMDljMGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YzEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWMxNCwgMHgwMDA0NjM4NH0sCisJezB4MDAwMDljMTgsIDB4MDViNmI0NDB9LAorCXsweDAwMDA5YzFjLCAweDAwYjZiNDQwfSwKKwl7MHgwMDAwOWQwMCwgMHhjMDgwYTMzM30sCisJezB4MDAwMDlkMDQsIDB4NDAyMDZjMTB9LAorCXsweDAwMDA5ZDA4LCAweDAwOWM0MDYwfSwKKwl7MHgwMDAwOWQwYywgMHg5ODgzODAwYX0sCisJezB4MDAwMDlkMTAsIDB4MDE4MzQwNjF9LAorCXsweDAwMDA5ZDE0LCAweDAwYzAwNDBifSwKKwl7MHgwMDAwOWQxOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDllMDgsIDB4MDAzODIzMGN9LAorCXsweDAwMDA5ZTI0LCAweDk5MGJiNTE1fSwKKwl7MHgwMDAwOWUyOCwgMHgwYzZmMDAwMH0sCisJezB4MDAwMDllMzAsIDB4MDYzMzZmNzd9LAorCXsweDAwMDA5ZTM0LCAweDZhZjY1MzJmfSwKKwl7MHgwMDAwOWUzOCwgMHgwY2M4MGMwMH0sCisJezB4MDAwMDllM2MsIDB4Y2Y5NDYyMjJ9LAorCXsweDAwMDA5ZTQwLCAweDBkMjYxODIwfSwKKwl7MHgwMDAwOWU0YywgMHgwMDAwMTAwNH0sCisJezB4MDAwMDllNTAsIDB4MDBmZjAzZjF9LAorCXsweDAwMDA5ZTU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWZjMCwgMHg4MDNlNDc4OH0sCisJezB4MDAwMDlmYzQsIDB4MDAwMWVmYjV9LAorCXsweDAwMDA5ZmNjLCAweDQwMDAwMDE0fSwKKwl7MHgwMDAwOWZkMCwgMHgwMTE5M2I5M30sCisJezB4MDAwMGEyMGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMjIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTIyNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyMjgsIDB4MTAwMDIzMTB9LAorCXsweDAwMDBhMjJjLCAweDAxMDM2YTFlfSwKKwl7MHgwMDAwYTIzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyNDQsIDB4MGMwMDAwMDB9LAorCXsweDAwMDBhMmEwLCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwYTJjMCwgMHgwMDAwMDAwMX0sCisJezB4MDAwMGEyYzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMmNjLCAweDE4YzQzNDMzfSwKKwl7MHgwMDAwYTJkNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyZGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMmUwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTJlNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyZTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMmVjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTJmMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyZjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMmY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTM0NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzNGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzUwLCAweDAwMDBhMDAwfSwKKwl7MHgwMDAwYTM2NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzNzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzkwLCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwYTM5NCwgMHgwMDAwMDQ0NH0sCisJezB4MDAwMGEzOTgsIDB4MDAxZjBlMGZ9LAorCXsweDAwMDBhMzljLCAweDAwNzUzOTNmfSwKKwl7MHgwMDAwYTNhMCwgMHhiNzlmNjQyN30sCisJezB4MDAwMGEzYTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2E4LCAweGFhYWFhYWFhfSwKKwl7MHgwMDAwYTNhYywgMHgzYzQ2NjQ3OH0sCisJezB4MDAwMGEzYzAsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2M0LCAweDIyMjIyMjIwfSwKKwl7MHgwMDAwYTNjOCwgMHgyMDIwMDAyMH0sCisJezB4MDAwMGEzY2MsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2QwLCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTNkNCwgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzZDgsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2RjLCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTNlMCwgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzZTQsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2U4LCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTNlYywgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzZjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2Y0LCAweDAwMDAwMjQ2fSwKKwl7MHgwMDAwYTNmOCwgMHgwY2RiZDM4MH0sCisJezB4MDAwMGEzZmMsIDB4MDAwZjBmMDF9LAorCXsweDAwMDBhNDAwLCAweDhmYTkxZjAxfSwKKwl7MHgwMDAwYTQwNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE0MDgsIDB4MGU3OWU1YzZ9LAorCXsweDAwMDBhNDBjLCAweDAwODIwODIwfSwKKwl7MHgwMDAwYTQxNCwgMHgxY2U3MzljZX0sCisJezB4MDAwMGE0MTgsIDB4MmQwMDFkY2V9LAorCXsweDAwMDBhNDFjLCAweDFjZTczOWNlfSwKKwl7MHgwMDAwYTQyMCwgMHgwMDAwMDFjZX0sCisJezB4MDAwMGE0MjQsIDB4MWNlNzM5Y2V9LAorCXsweDAwMDBhNDI4LCAweDAwMDAwMWNlfSwKKwl7MHgwMDAwYTQyYywgMHgxY2U3MzljZX0sCisJezB4MDAwMGE0MzAsIDB4MWNlNzM5Y2V9LAorCXsweDAwMDBhNDM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTQzOCwgMHgwMDAwMTgwMX0sCisJezB4MDAwMGE0M2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNDQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTQ0NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE0NDgsIDB4MDYwMDAwODB9LAorCXsweDAwMDBhNDRjLCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwYTQ1MCwgMHgwMDAxMDAwMH0sCisJezB4MDAwMGE0NTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTYwNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2MDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTYxMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2MTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTYxYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2MjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTYyOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2MmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTYzNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2MzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTY0MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2NDQsIDB4M2ZhZDlkNzR9LAorCXsweDAwMDBhNjQ4LCAweDAwNDgwNjBhfSwKKwl7MHgwMDAwYTY0YywgMHgwMDAwMDYzN30sCisJezB4MDAwMGE2NzAsIDB4MDMwMjAxMDB9LAorCXsweDAwMDBhNjc0LCAweDA5MDgwNTA0fSwKKwl7MHgwMDAwYTY3OCwgMHgwZDBjMGIwYX0sCisJezB4MDAwMGE2N2MsIDB4MTMxMjExMTB9LAorCXsweDAwMDBhNjgwLCAweDMxMzAxNTE0fSwKKwl7MHgwMDAwYTY4NCwgMHgzNTM0MzMzMn0sCisJezB4MDAwMGE2ODgsIDB4MDAwMDAwMzZ9LAorCXsweDAwMDBhNjkwLCAweDAwMDAwODM4fSwKKwl7MHgwMDAwYTdjMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE3YzQsIDB4ZmZmZmZmZmN9LAorCXsweDAwMDBhN2M4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTdjYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE3ZDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhN2Q0LCAweDAwMDAwMDA0fSwKKwl7MHgwMDAwYTdkYywgMHgwMDAwMDAwMX0sCisJezB4MDAwMGE4ZDAsIDB4MDA0YjZhOGV9LAorCXsweDAwMDBhOGQ0LCAweDAwMDAwODIwfSwKKwl7MHgwMDAwYThkYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE4ZjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhOGY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjJkMCwgMHgwMDAwMDA4MH0sCisJezB4MDAwMGIyZDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMmRjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjJlMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIyZTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMmU4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjJlYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIyZjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMmY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjJmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGI0MDgsIDB4MGU3OWU1YzB9LAorCXsweDAwMDBiNDBjLCAweDAwODIwODIwfSwKKwl7MHgwMDAwYjQyMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGI4ZDAsIDB4MDA0YjZhOGV9LAorCXsweDAwMDBiOGQ0LCAweDAwMDAwODIwfSwKKwl7MHgwMDAwYjhkYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGI4ZjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiOGY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYzJkMCwgMHgwMDAwMDA4MH0sCisJezB4MDAwMGMyZDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBjMmRjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYzJlMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGMyZTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBjMmU4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYzJlYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGMyZjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBjMmY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYzJmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGM0MDgsIDB4MGU3OWU1YzB9LAorCXsweDAwMDBjNDBjLCAweDAwODIwODIwfSwKKwl7MHgwMDAwYzQyMCwgMHgwMDAwMDAwMH0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTMwME1vZGVzX2hpZ2hfcG93ZXJfdHhfZ2Fpbl90YWJsZV8ycDJbXVs1XSA9IHsKKwkvKiBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAgMkdfSFQyMCAgICovCisJezB4MDAwMGE0MTAsIDB4MDAwMDUwZDgsIDB4MDAwMDUwZDgsIDB4MDAwMDUwZDksIDB4MDAwMDUwZDl9LAorCXsweDAwMDBhNTAwLCAweDAwMDAyMjIwLCAweDAwMDAyMjIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTUwNCwgMHgwNDAwMjIyMiwgMHgwNDAwMjIyMiwgMHgwNDAwMDAwMiwgMHgwNDAwMDAwMn0sCisJezB4MDAwMGE1MDgsIDB4MDkwMDI0MjEsIDB4MDkwMDI0MjEsIDB4MDgwMDAwMDQsIDB4MDgwMDAwMDR9LAorCXsweDAwMDBhNTBjLCAweDBkMDAyNjIxLCAweDBkMDAyNjIxLCAweDBiMDAwMjAwLCAweDBiMDAwMjAwfSwKKwl7MHgwMDAwYTUxMCwgMHgxMzAwNDYyMCwgMHgxMzAwNDYyMCwgMHgwZjAwMDIwMiwgMHgwZjAwMDIwMn0sCisJezB4MDAwMGE1MTQsIDB4MTkwMDRhMjAsIDB4MTkwMDRhMjAsIDB4MTEwMDA0MDAsIDB4MTEwMDA0MDB9LAorCXsweDAwMDBhNTE4LCAweDFkMDA0ZTIwLCAweDFkMDA0ZTIwLCAweDE1MDAwNDAyLCAweDE1MDAwNDAyfSwKKwl7MHgwMDAwYTUxYywgMHgyMTAwNTQyMCwgMHgyMTAwNTQyMCwgMHgxOTAwMDQwNCwgMHgxOTAwMDQwNH0sCisJezB4MDAwMGE1MjAsIDB4MjYwMDVlMjAsIDB4MjYwMDVlMjAsIDB4MWIwMDA2MDMsIDB4MWIwMDA2MDN9LAorCXsweDAwMDBhNTI0LCAweDJiMDA1ZTQwLCAweDJiMDA1ZTQwLCAweDFmMDAwYTAyLCAweDFmMDAwYTAyfSwKKwl7MHgwMDAwYTUyOCwgMHgyZjAwNWU0MiwgMHgyZjAwNWU0MiwgMHgyMzAwMGEwNCwgMHgyMzAwMGEwNH0sCisJezB4MDAwMGE1MmMsIDB4MzMwMDVlNDQsIDB4MzMwMDVlNDQsIDB4MjYwMDBhMjAsIDB4MjYwMDBhMjB9LAorCXsweDAwMDBhNTMwLCAweDM4MDA1ZTY1LCAweDM4MDA1ZTY1LCAweDJhMDAwZTIwLCAweDJhMDAwZTIwfSwKKwl7MHgwMDAwYTUzNCwgMHgzYzAwNWU2OSwgMHgzYzAwNWU2OSwgMHgyZTAwMGUyMiwgMHgyZTAwMGUyMn0sCisJezB4MDAwMGE1MzgsIDB4NDAwMDVlNmIsIDB4NDAwMDVlNmIsIDB4MzEwMDBlMjQsIDB4MzEwMDBlMjR9LAorCXsweDAwMDBhNTNjLCAweDQ0MDA1ZTZkLCAweDQ0MDA1ZTZkLCAweDM0MDAxNjQwLCAweDM0MDAxNjQwfSwKKwl7MHgwMDAwYTU0MCwgMHg0OTAwNWU3MiwgMHg0OTAwNWU3MiwgMHgzODAwMTY2MCwgMHgzODAwMTY2MH0sCisJezB4MDAwMGE1NDQsIDB4NGUwMDVlYjIsIDB4NGUwMDVlYjIsIDB4M2IwMDE4NjEsIDB4M2IwMDE4NjF9LAorCXsweDAwMDBhNTQ4LCAweDUzMDA1ZjEyLCAweDUzMDA1ZjEyLCAweDNlMDAxYTgxLCAweDNlMDAxYTgxfSwKKwl7MHgwMDAwYTU0YywgMHg1OTAyNWViNSwgMHg1OTAyNWViNSwgMHg0MjAwMWE4MywgMHg0MjAwMWE4M30sCisJezB4MDAwMGE1NTAsIDB4NWUwMjVmMTIsIDB4NWUwMjVmMTIsIDB4NDQwMDFjODQsIDB4NDQwMDFjODR9LAorCXsweDAwMDBhNTU0LCAweDYxMDI3ZjEyLCAweDYxMDI3ZjEyLCAweDQ4MDAxY2UzLCAweDQ4MDAxY2UzfSwKKwl7MHgwMDAwYTU1OCwgMHg2NzAyYmYxMiwgMHg2NzAyYmYxMiwgMHg0YzAwMWNlNSwgMHg0YzAwMWNlNX0sCisJezB4MDAwMGE1NWMsIDB4NmIwMmJmMTQsIDB4NmIwMmJmMTQsIDB4NTAwMDFjZTksIDB4NTAwMDFjZTl9LAorCXsweDAwMDBhNTYwLCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU0MDAxY2ViLCAweDU0MDAxY2VifSwKKwl7MHgwMDAwYTU2NCwgMHg2ZjAyYmYxNiwgMHg2ZjAyYmYxNiwgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1NjgsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTZjLCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU3MCwgMHg2ZjAyYmYxNiwgMHg2ZjAyYmYxNiwgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1NzQsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTc4LCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU3YywgMHg2ZjAyYmYxNiwgMHg2ZjAyYmYxNiwgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1ODAsIDB4MDA4MDIyMjAsIDB4MDA4MDIyMjAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDB9LAorCXsweDAwMDBhNTg0LCAweDA0ODAyMjIyLCAweDA0ODAyMjIyLCAweDA0ODAwMDAyLCAweDA0ODAwMDAyfSwKKwl7MHgwMDAwYTU4OCwgMHgwOTgwMjQyMSwgMHgwOTgwMjQyMSwgMHgwODgwMDAwNCwgMHgwODgwMDAwNH0sCisJezB4MDAwMGE1OGMsIDB4MGQ4MDI2MjEsIDB4MGQ4MDI2MjEsIDB4MGI4MDAyMDAsIDB4MGI4MDAyMDB9LAorCXsweDAwMDBhNTkwLCAweDEzODA0NjIwLCAweDEzODA0NjIwLCAweDBmODAwMjAyLCAweDBmODAwMjAyfSwKKwl7MHgwMDAwYTU5NCwgMHgxOTgwNGEyMCwgMHgxOTgwNGEyMCwgMHgxMTgwMDQwMCwgMHgxMTgwMDQwMH0sCisJezB4MDAwMGE1OTgsIDB4MWQ4MDRlMjAsIDB4MWQ4MDRlMjAsIDB4MTU4MDA0MDIsIDB4MTU4MDA0MDJ9LAorCXsweDAwMDBhNTljLCAweDIxODA1NDIwLCAweDIxODA1NDIwLCAweDE5ODAwNDA0LCAweDE5ODAwNDA0fSwKKwl7MHgwMDAwYTVhMCwgMHgyNjgwNWUyMCwgMHgyNjgwNWUyMCwgMHgxYjgwMDYwMywgMHgxYjgwMDYwM30sCisJezB4MDAwMGE1YTQsIDB4MmI4MDVlNDAsIDB4MmI4MDVlNDAsIDB4MWY4MDBhMDIsIDB4MWY4MDBhMDJ9LAorCXsweDAwMDBhNWE4LCAweDJmODA1ZTQyLCAweDJmODA1ZTQyLCAweDIzODAwYTA0LCAweDIzODAwYTA0fSwKKwl7MHgwMDAwYTVhYywgMHgzMzgwNWU0NCwgMHgzMzgwNWU0NCwgMHgyNjgwMGEyMCwgMHgyNjgwMGEyMH0sCisJezB4MDAwMGE1YjAsIDB4Mzg4MDVlNjUsIDB4Mzg4MDVlNjUsIDB4MmE4MDBlMjAsIDB4MmE4MDBlMjB9LAorCXsweDAwMDBhNWI0LCAweDNjODA1ZTY5LCAweDNjODA1ZTY5LCAweDJlODAwZTIyLCAweDJlODAwZTIyfSwKKwl7MHgwMDAwYTViOCwgMHg0MDgwNWU2YiwgMHg0MDgwNWU2YiwgMHgzMTgwMGUyNCwgMHgzMTgwMGUyNH0sCisJezB4MDAwMGE1YmMsIDB4NDQ4MDVlNmQsIDB4NDQ4MDVlNmQsIDB4MzQ4MDE2NDAsIDB4MzQ4MDE2NDB9LAorCXsweDAwMDBhNWMwLCAweDQ5ODA1ZTcyLCAweDQ5ODA1ZTcyLCAweDM4ODAxNjYwLCAweDM4ODAxNjYwfSwKKwl7MHgwMDAwYTVjNCwgMHg0ZTgwNWViMiwgMHg0ZTgwNWViMiwgMHgzYjgwMTg2MSwgMHgzYjgwMTg2MX0sCisJezB4MDAwMGE1YzgsIDB4NTM4MDVmMTIsIDB4NTM4MDVmMTIsIDB4M2U4MDFhODEsIDB4M2U4MDFhODF9LAorCXsweDAwMDBhNWNjLCAweDU5ODI1ZWIyLCAweDU5ODI1ZWIyLCAweDQyODAxYTgzLCAweDQyODAxYTgzfSwKKwl7MHgwMDAwYTVkMCwgMHg1ZTgyNWYxMiwgMHg1ZTgyNWYxMiwgMHg0NDgwMWM4NCwgMHg0NDgwMWM4NH0sCisJezB4MDAwMGE1ZDQsIDB4NjE4MjdmMTIsIDB4NjE4MjdmMTIsIDB4NDg4MDFjZTMsIDB4NDg4MDFjZTN9LAorCXsweDAwMDBhNWQ4LCAweDY3ODJiZjEyLCAweDY3ODJiZjEyLCAweDRjODAxY2U1LCAweDRjODAxY2U1fSwKKwl7MHgwMDAwYTVkYywgMHg2YjgyYmYxNCwgMHg2YjgyYmYxNCwgMHg1MDgwMWNlOSwgMHg1MDgwMWNlOX0sCisJezB4MDAwMGE1ZTAsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTQ4MDFjZWIsIDB4NTQ4MDFjZWJ9LAorCXsweDAwMDBhNWU0LCAweDZmODJiZjE2LCAweDZmODJiZjE2LCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAwYTVlOCwgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMGE1ZWMsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDBhNWYwLCAweDZmODJiZjE2LCAweDZmODJiZjE2LCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAwYTVmNCwgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMGE1ZjgsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDBhNWZjLCAweDZmODJiZjE2LCAweDZmODJiZjE2LCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAxNjA0NCwgMHgwNTZkYjJlNiwgMHgwNTZkYjJlNiwgMHgwNTZkYjJlNiwgMHgwNTZkYjJlNn0sCisJezB4MDAwMTYwNDgsIDB4YWU0ODAwMDEsIDB4YWU0ODAwMDEsIDB4YWU0ODAwMDEsIDB4YWU0ODAwMDF9LAorCXsweDAwMDE2MDY4LCAweDZlYjZkYjZjLCAweDZlYjZkYjZjLCAweDZlYjZkYjZjLCAweDZlYjZkYjZjfSwKKwl7MHgwMDAxNjQ0NCwgMHgwNTZkYjJlNiwgMHgwNTZkYjJlNiwgMHgwNTZkYjJlNiwgMHgwNTZkYjJlNn0sCisJezB4MDAwMTY0NDgsIDB4YWU0ODAwMDEsIDB4YWU0ODAwMDEsIDB4YWU0ODAwMDEsIDB4YWU0ODAwMDF9LAorCXsweDAwMDE2NDY4LCAweDZlYjZkYjZjLCAweDZlYjZkYjZjLCAweDZlYjZkYjZjLCAweDZlYjZkYjZjfSwKKwl7MHgwMDAxNjg0NCwgMHgwNTZkYjJlNiwgMHgwNTZkYjJlNiwgMHgwNTZkYjJlNiwgMHgwNTZkYjJlNn0sCisJezB4MDAwMTY4NDgsIDB4YWU0ODAwMDEsIDB4YWU0ODAwMDEsIDB4YWU0ODAwMDEsIDB4YWU0ODAwMDF9LAorCXsweDAwMDE2ODY4LCAweDZlYjZkYjZjLCAweDZlYjZkYjZjLCAweDZlYjZkYjZjLCAweDZlYjZkYjZjfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzAwTW9kZXNfaGlnaF9vYl9kYl90eF9nYWluX3RhYmxlXzJwMltdWzVdID0geworCS8qIEFkZHIgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICAgKi8KKwl7MHgwMDAwYTQxMCwgMHgwMDAwNTBkOCwgMHgwMDAwNTBkOCwgMHgwMDAwNTBkOSwgMHgwMDAwNTBkOX0sCisJezB4MDAwMGE1MDAsIDB4MDAwMDIyMjAsIDB4MDAwMDIyMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNTA0LCAweDA0MDAyMjIyLCAweDA0MDAyMjIyLCAweDA0MDAwMDAyLCAweDA0MDAwMDAyfSwKKwl7MHgwMDAwYTUwOCwgMHgwOTAwMjQyMSwgMHgwOTAwMjQyMSwgMHgwODAwMDAwNCwgMHgwODAwMDAwNH0sCisJezB4MDAwMGE1MGMsIDB4MGQwMDI2MjEsIDB4MGQwMDI2MjEsIDB4MGIwMDAyMDAsIDB4MGIwMDAyMDB9LAorCXsweDAwMDBhNTEwLCAweDEzMDA0NjIwLCAweDEzMDA0NjIwLCAweDBmMDAwMjAyLCAweDBmMDAwMjAyfSwKKwl7MHgwMDAwYTUxNCwgMHgxOTAwNGEyMCwgMHgxOTAwNGEyMCwgMHgxMTAwMDQwMCwgMHgxMTAwMDQwMH0sCisJezB4MDAwMGE1MTgsIDB4MWQwMDRlMjAsIDB4MWQwMDRlMjAsIDB4MTUwMDA0MDIsIDB4MTUwMDA0MDJ9LAorCXsweDAwMDBhNTFjLCAweDIxMDA1NDIwLCAweDIxMDA1NDIwLCAweDE5MDAwNDA0LCAweDE5MDAwNDA0fSwKKwl7MHgwMDAwYTUyMCwgMHgyNjAwNWUyMCwgMHgyNjAwNWUyMCwgMHgxYjAwMDYwMywgMHgxYjAwMDYwM30sCisJezB4MDAwMGE1MjQsIDB4MmIwMDVlNDAsIDB4MmIwMDVlNDAsIDB4MWYwMDBhMDIsIDB4MWYwMDBhMDJ9LAorCXsweDAwMDBhNTI4LCAweDJmMDA1ZTQyLCAweDJmMDA1ZTQyLCAweDIzMDAwYTA0LCAweDIzMDAwYTA0fSwKKwl7MHgwMDAwYTUyYywgMHgzMzAwNWU0NCwgMHgzMzAwNWU0NCwgMHgyNjAwMGEyMCwgMHgyNjAwMGEyMH0sCisJezB4MDAwMGE1MzAsIDB4MzgwMDVlNjUsIDB4MzgwMDVlNjUsIDB4MmEwMDBlMjAsIDB4MmEwMDBlMjB9LAorCXsweDAwMDBhNTM0LCAweDNjMDA1ZTY5LCAweDNjMDA1ZTY5LCAweDJlMDAwZTIyLCAweDJlMDAwZTIyfSwKKwl7MHgwMDAwYTUzOCwgMHg0MDAwNWU2YiwgMHg0MDAwNWU2YiwgMHgzMTAwMGUyNCwgMHgzMTAwMGUyNH0sCisJezB4MDAwMGE1M2MsIDB4NDQwMDVlNmQsIDB4NDQwMDVlNmQsIDB4MzQwMDE2NDAsIDB4MzQwMDE2NDB9LAorCXsweDAwMDBhNTQwLCAweDQ5MDA1ZTcyLCAweDQ5MDA1ZTcyLCAweDM4MDAxNjYwLCAweDM4MDAxNjYwfSwKKwl7MHgwMDAwYTU0NCwgMHg0ZTAwNWViMiwgMHg0ZTAwNWViMiwgMHgzYjAwMTg2MSwgMHgzYjAwMTg2MX0sCisJezB4MDAwMGE1NDgsIDB4NTMwMDVmMTIsIDB4NTMwMDVmMTIsIDB4M2UwMDFhODEsIDB4M2UwMDFhODF9LAorCXsweDAwMDBhNTRjLCAweDU5MDI1ZWI1LCAweDU5MDI1ZWI1LCAweDQyMDAxYTgzLCAweDQyMDAxYTgzfSwKKwl7MHgwMDAwYTU1MCwgMHg1ZTAyNWYxMiwgMHg1ZTAyNWYxMiwgMHg0NDAwMWM4NCwgMHg0NDAwMWM4NH0sCisJezB4MDAwMGE1NTQsIDB4NjEwMjdmMTIsIDB4NjEwMjdmMTIsIDB4NDgwMDFjZTMsIDB4NDgwMDFjZTN9LAorCXsweDAwMDBhNTU4LCAweDY3MDJiZjEyLCAweDY3MDJiZjEyLCAweDRjMDAxY2U1LCAweDRjMDAxY2U1fSwKKwl7MHgwMDAwYTU1YywgMHg2YjAyYmYxNCwgMHg2YjAyYmYxNCwgMHg1MDAwMWNlOSwgMHg1MDAwMWNlOX0sCisJezB4MDAwMGE1NjAsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTQwMDFjZWIsIDB4NTQwMDFjZWJ9LAorCXsweDAwMDBhNTY0LCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU2OCwgMHg2ZjAyYmYxNiwgMHg2ZjAyYmYxNiwgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1NmMsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTcwLCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU3NCwgMHg2ZjAyYmYxNiwgMHg2ZjAyYmYxNiwgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1NzgsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTdjLCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU4MCwgMHgwMDgwMjIyMCwgMHgwMDgwMjIyMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMH0sCisJezB4MDAwMGE1ODQsIDB4MDQ4MDIyMjIsIDB4MDQ4MDIyMjIsIDB4MDQ4MDAwMDIsIDB4MDQ4MDAwMDJ9LAorCXsweDAwMDBhNTg4LCAweDA5ODAyNDIxLCAweDA5ODAyNDIxLCAweDA4ODAwMDA0LCAweDA4ODAwMDA0fSwKKwl7MHgwMDAwYTU4YywgMHgwZDgwMjYyMSwgMHgwZDgwMjYyMSwgMHgwYjgwMDIwMCwgMHgwYjgwMDIwMH0sCisJezB4MDAwMGE1OTAsIDB4MTM4MDQ2MjAsIDB4MTM4MDQ2MjAsIDB4MGY4MDAyMDIsIDB4MGY4MDAyMDJ9LAorCXsweDAwMDBhNTk0LCAweDE5ODA0YTIwLCAweDE5ODA0YTIwLCAweDExODAwNDAwLCAweDExODAwNDAwfSwKKwl7MHgwMDAwYTU5OCwgMHgxZDgwNGUyMCwgMHgxZDgwNGUyMCwgMHgxNTgwMDQwMiwgMHgxNTgwMDQwMn0sCisJezB4MDAwMGE1OWMsIDB4MjE4MDU0MjAsIDB4MjE4MDU0MjAsIDB4MTk4MDA0MDQsIDB4MTk4MDA0MDR9LAorCXsweDAwMDBhNWEwLCAweDI2ODA1ZTIwLCAweDI2ODA1ZTIwLCAweDFiODAwNjAzLCAweDFiODAwNjAzfSwKKwl7MHgwMDAwYTVhNCwgMHgyYjgwNWU0MCwgMHgyYjgwNWU0MCwgMHgxZjgwMGEwMiwgMHgxZjgwMGEwMn0sCisJezB4MDAwMGE1YTgsIDB4MmY4MDVlNDIsIDB4MmY4MDVlNDIsIDB4MjM4MDBhMDQsIDB4MjM4MDBhMDR9LAorCXsweDAwMDBhNWFjLCAweDMzODA1ZTQ0LCAweDMzODA1ZTQ0LCAweDI2ODAwYTIwLCAweDI2ODAwYTIwfSwKKwl7MHgwMDAwYTViMCwgMHgzODgwNWU2NSwgMHgzODgwNWU2NSwgMHgyYTgwMGUyMCwgMHgyYTgwMGUyMH0sCisJezB4MDAwMGE1YjQsIDB4M2M4MDVlNjksIDB4M2M4MDVlNjksIDB4MmU4MDBlMjIsIDB4MmU4MDBlMjJ9LAorCXsweDAwMDBhNWI4LCAweDQwODA1ZTZiLCAweDQwODA1ZTZiLCAweDMxODAwZTI0LCAweDMxODAwZTI0fSwKKwl7MHgwMDAwYTViYywgMHg0NDgwNWU2ZCwgMHg0NDgwNWU2ZCwgMHgzNDgwMTY0MCwgMHgzNDgwMTY0MH0sCisJezB4MDAwMGE1YzAsIDB4NDk4MDVlNzIsIDB4NDk4MDVlNzIsIDB4Mzg4MDE2NjAsIDB4Mzg4MDE2NjB9LAorCXsweDAwMDBhNWM0LCAweDRlODA1ZWIyLCAweDRlODA1ZWIyLCAweDNiODAxODYxLCAweDNiODAxODYxfSwKKwl7MHgwMDAwYTVjOCwgMHg1MzgwNWYxMiwgMHg1MzgwNWYxMiwgMHgzZTgwMWE4MSwgMHgzZTgwMWE4MX0sCisJezB4MDAwMGE1Y2MsIDB4NTk4MjVlYjIsIDB4NTk4MjVlYjIsIDB4NDI4MDFhODMsIDB4NDI4MDFhODN9LAorCXsweDAwMDBhNWQwLCAweDVlODI1ZjEyLCAweDVlODI1ZjEyLCAweDQ0ODAxYzg0LCAweDQ0ODAxYzg0fSwKKwl7MHgwMDAwYTVkNCwgMHg2MTgyN2YxMiwgMHg2MTgyN2YxMiwgMHg0ODgwMWNlMywgMHg0ODgwMWNlM30sCisJezB4MDAwMGE1ZDgsIDB4Njc4MmJmMTIsIDB4Njc4MmJmMTIsIDB4NGM4MDFjZTUsIDB4NGM4MDFjZTV9LAorCXsweDAwMDBhNWRjLCAweDZiODJiZjE0LCAweDZiODJiZjE0LCAweDUwODAxY2U5LCAweDUwODAxY2U5fSwKKwl7MHgwMDAwYTVlMCwgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NDgwMWNlYiwgMHg1NDgwMWNlYn0sCisJezB4MDAwMGE1ZTQsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDBhNWU4LCAweDZmODJiZjE2LCAweDZmODJiZjE2LCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAwYTVlYywgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMGE1ZjAsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDBhNWY0LCAweDZmODJiZjE2LCAweDZmODJiZjE2LCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAwYTVmOCwgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMGE1ZmMsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDE2MDQ0LCAweDA1NmRiMmU0LCAweDA1NmRiMmU0LCAweDA1NmRiMmU0LCAweDA1NmRiMmU0fSwKKwl7MHgwMDAxNjA0OCwgMHg4ZTQ4MDAwMSwgMHg4ZTQ4MDAwMSwgMHg4ZTQ4MDAwMSwgMHg4ZTQ4MDAwMX0sCisJezB4MDAwMTYwNjgsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmN9LAorCXsweDAwMDE2NDQ0LCAweDA1NmRiMmU0LCAweDA1NmRiMmU0LCAweDA1NmRiMmU0LCAweDA1NmRiMmU0fSwKKwl7MHgwMDAxNjQ0OCwgMHg4ZTQ4MDAwMSwgMHg4ZTQ4MDAwMSwgMHg4ZTQ4MDAwMSwgMHg4ZTQ4MDAwMX0sCisJezB4MDAwMTY0NjgsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmN9LAorCXsweDAwMDE2ODQ0LCAweDA1NmRiMmU0LCAweDA1NmRiMmU0LCAweDA1NmRiMmU0LCAweDA1NmRiMmU0fSwKKwl7MHgwMDAxNjg0OCwgMHg4ZTQ4MDAwMSwgMHg4ZTQ4MDAwMSwgMHg4ZTQ4MDAwMSwgMHg4ZTQ4MDAwMX0sCisJezB4MDAwMTY4NjgsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmN9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhcjkzMDBDb21tb25fcnhfZ2Fpbl90YWJsZV8ycDJbXVsyXSA9IHsKKwkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCisJezB4MDAwMGEwMDAsIDB4MDAwMTAwMDB9LAorCXsweDAwMDBhMDA0LCAweDAwMDMwMDAyfSwKKwl7MHgwMDAwYTAwOCwgMHgwMDA1MDAwNH0sCisJezB4MDAwMGEwMGMsIDB4MDA4MTAwODB9LAorCXsweDAwMDBhMDEwLCAweDAwODMwMDgyfSwKKwl7MHgwMDAwYTAxNCwgMHgwMTgxMDE4MH0sCisJezB4MDAwMGEwMTgsIDB4MDE4MzAxODJ9LAorCXsweDAwMDBhMDFjLCAweDAxODUwMTg0fSwKKwl7MHgwMDAwYTAyMCwgMHgwMTg5MDE4OH0sCisJezB4MDAwMGEwMjQsIDB4MDE4YjAxOGF9LAorCXsweDAwMDBhMDI4LCAweDAxOGQwMThjfSwKKwl7MHgwMDAwYTAyYywgMHgwMTkxMDE5MH0sCisJezB4MDAwMGEwMzAsIDB4MDE5MzAxOTJ9LAorCXsweDAwMDBhMDM0LCAweDAxOTUwMTk0fSwKKwl7MHgwMDAwYTAzOCwgMHgwMzhhMDE5Nn0sCisJezB4MDAwMGEwM2MsIDB4MDM4YzAzOGJ9LAorCXsweDAwMDBhMDQwLCAweDAzOTAwMzhkfSwKKwl7MHgwMDAwYTA0NCwgMHgwMzkyMDM5MX0sCisJezB4MDAwMGEwNDgsIDB4MDM5NDAzOTN9LAorCXsweDAwMDBhMDRjLCAweDAzOTYwMzk1fSwKKwl7MHgwMDAwYTA1MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDU4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA1YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA2OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDcwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA3NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA4MCwgMHgyMjIyMjIyOX0sCisJezB4MDAwMGEwODQsIDB4MWQxZDFkMWR9LAorCXsweDAwMDBhMDg4LCAweDFkMWQxZDFkfSwKKwl7MHgwMDAwYTA4YywgMHgxZDFkMWQxZH0sCisJezB4MDAwMGEwOTAsIDB4MTcxZDFkMWR9LAorCXsweDAwMDBhMDk0LCAweDExMTExNzE3fSwKKwl7MHgwMDAwYTA5OCwgMHgwMDAzMDMxMX0sCisJezB4MDAwMGEwOWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBhNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBiMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYzAsIDB4MDAxZjAwMDB9LAorCXsweDAwMDBhMGM0LCAweDAxMDAwMTAxfSwKKwl7MHgwMDAwYTBjOCwgMHgwMTFlMDExZn0sCisJezB4MDAwMGEwY2MsIDB4MDExYzAxMWR9LAorCXsweDAwMDBhMGQwLCAweDAyMDMwMjA0fSwKKwl7MHgwMDAwYTBkNCwgMHgwMjAxMDIwMn0sCisJezB4MDAwMGEwZDgsIDB4MDIxZjAyMDB9LAorCXsweDAwMDBhMGRjLCAweDAzMDIwMjFlfSwKKwl7MHgwMDAwYTBlMCwgMHgwMzAwMDMwMX0sCisJezB4MDAwMGEwZTQsIDB4MDMxZTAzMWZ9LAorCXsweDAwMDBhMGU4LCAweDA0MDIwMzFkfSwKKwl7MHgwMDAwYTBlYywgMHgwNDAwMDQwMX0sCisJezB4MDAwMGEwZjAsIDB4MDQxZTA0MWZ9LAorCXsweDAwMDBhMGY0LCAweDA1MDIwNDFkfSwKKwl7MHgwMDAwYTBmOCwgMHgwNTAwMDUwMX0sCisJezB4MDAwMGEwZmMsIDB4MDUxZTA1MWZ9LAorCXsweDAwMDBhMTAwLCAweDA2MDEwNjAyfSwKKwl7MHgwMDAwYTEwNCwgMHgwNjFmMDYwMH0sCisJezB4MDAwMGExMDgsIDB4MDYxZDA2MWV9LAorCXsweDAwMDBhMTBjLCAweDA3MDIwNzAzfSwKKwl7MHgwMDAwYTExMCwgMHgwNzAwMDcwMX0sCisJezB4MDAwMGExMTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTExYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEyOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEzNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTE0MCwgMHgwMDFmMDAwMH0sCisJezB4MDAwMGExNDQsIDB4MDEwMDAxMDF9LAorCXsweDAwMDBhMTQ4LCAweDAxMWUwMTFmfSwKKwl7MHgwMDAwYTE0YywgMHgwMTFjMDExZH0sCisJezB4MDAwMGExNTAsIDB4MDIwMzAyMDR9LAorCXsweDAwMDBhMTU0LCAweDAyMDEwMjAyfSwKKwl7MHgwMDAwYTE1OCwgMHgwMjFmMDIwMH0sCisJezB4MDAwMGExNWMsIDB4MDMwMjAyMWV9LAorCXsweDAwMDBhMTYwLCAweDAzMDAwMzAxfSwKKwl7MHgwMDAwYTE2NCwgMHgwMzFlMDMxZn0sCisJezB4MDAwMGExNjgsIDB4MDQwMjAzMWR9LAorCXsweDAwMDBhMTZjLCAweDA0MDAwNDAxfSwKKwl7MHgwMDAwYTE3MCwgMHgwNDFlMDQxZn0sCisJezB4MDAwMGExNzQsIDB4MDUwMjA0MWR9LAorCXsweDAwMDBhMTc4LCAweDA1MDAwNTAxfSwKKwl7MHgwMDAwYTE3YywgMHgwNTFlMDUxZn0sCisJezB4MDAwMGExODAsIDB4MDYwMTA2MDJ9LAorCXsweDAwMDBhMTg0LCAweDA2MWYwNjAwfSwKKwl7MHgwMDAwYTE4OCwgMHgwNjFkMDYxZX0sCisJezB4MDAwMGExOGMsIDB4MDcwMjA3MDN9LAorCXsweDAwMDBhMTkwLCAweDA3MDAwNzAxfSwKKwl7MHgwMDAwYTE5NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExOTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFhMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFhYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFjNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFkMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWQ4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFkYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFlOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWYwLCAweDAwMDAwMzk2fSwKKwl7MHgwMDAwYTFmNCwgMHgwMDAwMDM5Nn0sCisJezB4MDAwMGExZjgsIDB4MDAwMDAzOTZ9LAorCXsweDAwMDBhMWZjLCAweDAwMDAwMTk2fSwKKwl7MHgwMDAwYjAwMCwgMHgwMDAxMDAwMH0sCisJezB4MDAwMGIwMDQsIDB4MDAwMzAwMDJ9LAorCXsweDAwMDBiMDA4LCAweDAwMDUwMDA0fSwKKwl7MHgwMDAwYjAwYywgMHgwMDgxMDA4MH0sCisJezB4MDAwMGIwMTAsIDB4MDA4MzAwODJ9LAorCXsweDAwMDBiMDE0LCAweDAxODEwMTgwfSwKKwl7MHgwMDAwYjAxOCwgMHgwMTgzMDE4Mn0sCisJezB4MDAwMGIwMWMsIDB4MDE4NTAxODR9LAorCXsweDAwMDBiMDIwLCAweDAyODEwMjgwfSwKKwl7MHgwMDAwYjAyNCwgMHgwMjgzMDI4Mn0sCisJezB4MDAwMGIwMjgsIDB4MDI4NTAyODR9LAorCXsweDAwMDBiMDJjLCAweDAyODkwMjg4fSwKKwl7MHgwMDAwYjAzMCwgMHgwMjhiMDI4YX0sCisJezB4MDAwMGIwMzQsIDB4MDM4ODAyOGN9LAorCXsweDAwMDBiMDM4LCAweDAzOGEwMzg5fSwKKwl7MHgwMDAwYjAzYywgMHgwMzhjMDM4Yn0sCisJezB4MDAwMGIwNDAsIDB4MDM5MDAzOGR9LAorCXsweDAwMDBiMDQ0LCAweDAzOTIwMzkxfSwKKwl7MHgwMDAwYjA0OCwgMHgwMzk0MDM5M30sCisJezB4MDAwMGIwNGMsIDB4MDM5NjAzOTV9LAorCXsweDAwMDBiMDUwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA1NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDVjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA2MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA2YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDc0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwN2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDgwLCAweDMyMzIzMjMyfSwKKwl7MHgwMDAwYjA4NCwgMHgyZjJmMzIzMn0sCisJezB4MDAwMGIwODgsIDB4MjMyODJhMmR9LAorCXsweDAwMDBiMDhjLCAweDFjMWUyMTIzfSwKKwl7MHgwMDAwYjA5MCwgMHgxNDE3MTkxOX0sCisJezB4MDAwMGIwOTQsIDB4MGUwZTEyMTR9LAorCXsweDAwMDBiMDk4LCAweDAzMDUwNzA3fSwKKwl7MHgwMDAwYjA5YywgMHgwMDAzMDMwM30sCisJezB4MDAwMGIwYTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMGE0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjBhOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwYWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMGIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjBiNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwYjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMGJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjBjMCwgMHgwMDNmMDAyMH0sCisJezB4MDAwMGIwYzQsIDB4MDA0MDAwNDF9LAorCXsweDAwMDBiMGM4LCAweDAxNDAwMDVmfSwKKwl7MHgwMDAwYjBjYywgMHgwMTYwMDE1Zn0sCisJezB4MDAwMGIwZDAsIDB4MDE3ZTAxN2Z9LAorCXsweDAwMDBiMGQ0LCAweDAyNDEwMjQyfSwKKwl7MHgwMDAwYjBkOCwgMHgwMjVmMDI0MH0sCisJezB4MDAwMGIwZGMsIDB4MDI3ZjAyNjB9LAorCXsweDAwMDBiMGUwLCAweDAzNDEwMjdlfSwKKwl7MHgwMDAwYjBlNCwgMHgwMzVmMDM0MH0sCisJezB4MDAwMGIwZTgsIDB4MDM3ZjAzNjB9LAorCXsweDAwMDBiMGVjLCAweDA0NDAwNDQxfSwKKwl7MHgwMDAwYjBmMCwgMHgwNDYwMDQ1Zn0sCisJezB4MDAwMGIwZjQsIDB4MDU0MTA0N2Z9LAorCXsweDAwMDBiMGY4LCAweDA1NWYwNTQwfSwKKwl7MHgwMDAwYjBmYywgMHgwNTdmMDU2MH0sCisJezB4MDAwMGIxMDAsIDB4MDY0MDA2NDF9LAorCXsweDAwMDBiMTA0LCAweDA2NjAwNjVmfSwKKwl7MHgwMDAwYjEwOCwgMHgwNjdlMDY3Zn0sCisJezB4MDAwMGIxMGMsIDB4MDc0MTA3NDJ9LAorCXsweDAwMDBiMTEwLCAweDA3NWYwNzQwfSwKKwl7MHgwMDAwYjExNCwgMHgwNzdmMDc2MH0sCisJezB4MDAwMGIxMTgsIDB4MDc4MDA3ODF9LAorCXsweDAwMDBiMTFjLCAweDA3YTAwNzlmfSwKKwl7MHgwMDAwYjEyMCwgMHgwN2MxMDdiZn0sCisJezB4MDAwMGIxMjQsIDB4MDAwMDA3YzB9LAorCXsweDAwMDBiMTI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjEyYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxMzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMTM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjEzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMTQwLCAweDAwM2YwMDIwfSwKKwl7MHgwMDAwYjE0NCwgMHgwMDQwMDA0MX0sCisJezB4MDAwMGIxNDgsIDB4MDE0MDAwNWZ9LAorCXsweDAwMDBiMTRjLCAweDAxNjAwMTVmfSwKKwl7MHgwMDAwYjE1MCwgMHgwMTdlMDE3Zn0sCisJezB4MDAwMGIxNTQsIDB4MDI0MTAyNDJ9LAorCXsweDAwMDBiMTU4LCAweDAyNWYwMjQwfSwKKwl7MHgwMDAwYjE1YywgMHgwMjdmMDI2MH0sCisJezB4MDAwMGIxNjAsIDB4MDM0MTAyN2V9LAorCXsweDAwMDBiMTY0LCAweDAzNWYwMzQwfSwKKwl7MHgwMDAwYjE2OCwgMHgwMzdmMDM2MH0sCisJezB4MDAwMGIxNmMsIDB4MDQ0MDA0NDF9LAorCXsweDAwMDBiMTcwLCAweDA0NjAwNDVmfSwKKwl7MHgwMDAwYjE3NCwgMHgwNTQxMDQ3Zn0sCisJezB4MDAwMGIxNzgsIDB4MDU1ZjA1NDB9LAorCXsweDAwMDBiMTdjLCAweDA1N2YwNTYwfSwKKwl7MHgwMDAwYjE4MCwgMHgwNjQwMDY0MX0sCisJezB4MDAwMGIxODQsIDB4MDY2MDA2NWZ9LAorCXsweDAwMDBiMTg4LCAweDA2N2UwNjdmfSwKKwl7MHgwMDAwYjE4YywgMHgwNzQxMDc0Mn0sCisJezB4MDAwMGIxOTAsIDB4MDc1ZjA3NDB9LAorCXsweDAwMDBiMTk0LCAweDA3N2YwNzYwfSwKKwl7MHgwMDAwYjE5OCwgMHgwNzgwMDc4MX0sCisJezB4MDAwMGIxOWMsIDB4MDdhMDA3OWZ9LAorCXsweDAwMDBiMWEwLCAweDA3YzEwN2JmfSwKKwl7MHgwMDAwYjFhNCwgMHgwMDAwMDdjMH0sCisJezB4MDAwMGIxYTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFiMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxYjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxYzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFjOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxY2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFkNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWRjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFlMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWU4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFlYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZjAsIDB4MDAwMDAzOTZ9LAorCXsweDAwMDBiMWY0LCAweDAwMDAwMzk2fSwKKwl7MHgwMDAwYjFmOCwgMHgwMDAwMDM5Nn0sCisJezB4MDAwMGIxZmMsIDB4MDAwMDAxOTZ9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhcjkzMDBNb2Rlc19sb3dfb2JfZGJfdHhfZ2Fpbl90YWJsZV8ycDJbXVs1XSA9IHsKKwkvKiBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAgMkdfSFQyMCAgICovCisJezB4MDAwMGE0MTAsIDB4MDAwMDUwZDksIDB4MDAwMDUwZDksIDB4MDAwMDUwZDksIDB4MDAwMDUwZDl9LAorCXsweDAwMDBhNTAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTUwNCwgMHgwNjAwMDAwMywgMHgwNjAwMDAwMywgMHgwNDAwMDAwMiwgMHgwNDAwMDAwMn0sCisJezB4MDAwMGE1MDgsIDB4MGEwMDAwMjAsIDB4MGEwMDAwMjAsIDB4MDgwMDAwMDQsIDB4MDgwMDAwMDR9LAorCXsweDAwMDBhNTBjLCAweDEwMDAwMDIzLCAweDEwMDAwMDIzLCAweDBiMDAwMjAwLCAweDBiMDAwMjAwfSwKKwl7MHgwMDAwYTUxMCwgMHgxNjAwMDIyMCwgMHgxNjAwMDIyMCwgMHgwZjAwMDIwMiwgMHgwZjAwMDIwMn0sCisJezB4MDAwMGE1MTQsIDB4MWMwMDAyMjMsIDB4MWMwMDAyMjMsIDB4MTIwMDA0MDAsIDB4MTIwMDA0MDB9LAorCXsweDAwMDBhNTE4LCAweDIxMDAyMjIwLCAweDIxMDAyMjIwLCAweDE2MDAwNDAyLCAweDE2MDAwNDAyfSwKKwl7MHgwMDAwYTUxYywgMHgyNzAwMjIyMywgMHgyNzAwMjIyMywgMHgxOTAwMDQwNCwgMHgxOTAwMDQwNH0sCisJezB4MDAwMGE1MjAsIDB4MmIwMjIyMjAsIDB4MmIwMjIyMjAsIDB4MWMwMDA2MDMsIDB4MWMwMDA2MDN9LAorCXsweDAwMDBhNTI0LCAweDJmMDIyMjIyLCAweDJmMDIyMjIyLCAweDIxMDAwYTAyLCAweDIxMDAwYTAyfSwKKwl7MHgwMDAwYTUyOCwgMHgzNDAyMjIyNSwgMHgzNDAyMjIyNSwgMHgyNTAwMGEwNCwgMHgyNTAwMGEwNH0sCisJezB4MDAwMGE1MmMsIDB4M2EwMjIyMmEsIDB4M2EwMjIyMmEsIDB4MjgwMDBhMjAsIDB4MjgwMDBhMjB9LAorCXsweDAwMDBhNTMwLCAweDNlMDIyMjJjLCAweDNlMDIyMjJjLCAweDJjMDAwZTIwLCAweDJjMDAwZTIwfSwKKwl7MHgwMDAwYTUzNCwgMHg0MjAyMjQyYSwgMHg0MjAyMjQyYSwgMHgzMDAwMGUyMiwgMHgzMDAwMGUyMn0sCisJezB4MDAwMGE1MzgsIDB4NDcwMjI0NGEsIDB4NDcwMjI0NGEsIDB4MzQwMDBlMjQsIDB4MzQwMDBlMjR9LAorCXsweDAwMDBhNTNjLCAweDRiMDIyNDRjLCAweDRiMDIyNDRjLCAweDM4MDAxNjQwLCAweDM4MDAxNjQwfSwKKwl7MHgwMDAwYTU0MCwgMHg0ZTAyMjQ2YywgMHg0ZTAyMjQ2YywgMHgzYzAwMTY2MCwgMHgzYzAwMTY2MH0sCisJezB4MDAwMGE1NDQsIDB4NTMwMjI2NmMsIDB4NTMwMjI2NmMsIDB4M2YwMDE4NjEsIDB4M2YwMDE4NjF9LAorCXsweDAwMDBhNTQ4LCAweDU3MDIyODZjLCAweDU3MDIyODZjLCAweDQzMDAxYTgxLCAweDQzMDAxYTgxfSwKKwl7MHgwMDAwYTU0YywgMHg1YzAyNDg2YiwgMHg1YzAyNDg2YiwgMHg0NzAwMWE4MywgMHg0NzAwMWE4M30sCisJezB4MDAwMGE1NTAsIDB4NjEwMjRhNmMsIDB4NjEwMjRhNmMsIDB4NGEwMDFjODQsIDB4NGEwMDFjODR9LAorCXsweDAwMDBhNTU0LCAweDY2MDI2YTZjLCAweDY2MDI2YTZjLCAweDRlMDAxY2UzLCAweDRlMDAxY2UzfSwKKwl7MHgwMDAwYTU1OCwgMHg2YjAyNmU2YywgMHg2YjAyNmU2YywgMHg1MjAwMWNlNSwgMHg1MjAwMWNlNX0sCisJezB4MDAwMGE1NWMsIDB4NzAwMjcwOGMsIDB4NzAwMjcwOGMsIDB4NTYwMDFjZTksIDB4NTYwMDFjZTl9LAorCXsweDAwMDBhNTYwLCAweDczMDJiMDhhLCAweDczMDJiMDhhLCAweDVhMDAxY2ViLCAweDVhMDAxY2VifSwKKwl7MHgwMDAwYTU2NCwgMHg3NzAyYjA4YywgMHg3NzAyYjA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCisJezB4MDAwMGE1NjgsIDB4NzcwMmIwOGMsIDB4NzcwMmIwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTZjLCAweDc3MDJiMDhjLCAweDc3MDJiMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU3MCwgMHg3NzAyYjA4YywgMHg3NzAyYjA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCisJezB4MDAwMGE1NzQsIDB4NzcwMmIwOGMsIDB4NzcwMmIwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTc4LCAweDc3MDJiMDhjLCAweDc3MDJiMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU3YywgMHg3NzAyYjA4YywgMHg3NzAyYjA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCisJezB4MDAwMGE1ODAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDB9LAorCXsweDAwMDBhNTg0LCAweDA2ODAwMDAzLCAweDA2ODAwMDAzLCAweDA0ODAwMDAyLCAweDA0ODAwMDAyfSwKKwl7MHgwMDAwYTU4OCwgMHgwYTgwMDAyMCwgMHgwYTgwMDAyMCwgMHgwODgwMDAwNCwgMHgwODgwMDAwNH0sCisJezB4MDAwMGE1OGMsIDB4MTA4MDAwMjMsIDB4MTA4MDAwMjMsIDB4MGI4MDAyMDAsIDB4MGI4MDAyMDB9LAorCXsweDAwMDBhNTkwLCAweDE2ODAwMjIwLCAweDE2ODAwMjIwLCAweDBmODAwMjAyLCAweDBmODAwMjAyfSwKKwl7MHgwMDAwYTU5NCwgMHgxYzgwMDIyMywgMHgxYzgwMDIyMywgMHgxMjgwMDQwMCwgMHgxMjgwMDQwMH0sCisJezB4MDAwMGE1OTgsIDB4MjE4MDIyMjAsIDB4MjE4MDIyMjAsIDB4MTY4MDA0MDIsIDB4MTY4MDA0MDJ9LAorCXsweDAwMDBhNTljLCAweDI3ODAyMjIzLCAweDI3ODAyMjIzLCAweDE5ODAwNDA0LCAweDE5ODAwNDA0fSwKKwl7MHgwMDAwYTVhMCwgMHgyYjgyMjIyMCwgMHgyYjgyMjIyMCwgMHgxYzgwMDYwMywgMHgxYzgwMDYwM30sCisJezB4MDAwMGE1YTQsIDB4MmY4MjIyMjIsIDB4MmY4MjIyMjIsIDB4MjE4MDBhMDIsIDB4MjE4MDBhMDJ9LAorCXsweDAwMDBhNWE4LCAweDM0ODIyMjI1LCAweDM0ODIyMjI1LCAweDI1ODAwYTA0LCAweDI1ODAwYTA0fSwKKwl7MHgwMDAwYTVhYywgMHgzYTgyMjIyYSwgMHgzYTgyMjIyYSwgMHgyODgwMGEyMCwgMHgyODgwMGEyMH0sCisJezB4MDAwMGE1YjAsIDB4M2U4MjIyMmMsIDB4M2U4MjIyMmMsIDB4MmM4MDBlMjAsIDB4MmM4MDBlMjB9LAorCXsweDAwMDBhNWI0LCAweDQyODIyNDJhLCAweDQyODIyNDJhLCAweDMwODAwZTIyLCAweDMwODAwZTIyfSwKKwl7MHgwMDAwYTViOCwgMHg0NzgyMjQ0YSwgMHg0NzgyMjQ0YSwgMHgzNDgwMGUyNCwgMHgzNDgwMGUyNH0sCisJezB4MDAwMGE1YmMsIDB4NGI4MjI0NGMsIDB4NGI4MjI0NGMsIDB4Mzg4MDE2NDAsIDB4Mzg4MDE2NDB9LAorCXsweDAwMDBhNWMwLCAweDRlODIyNDZjLCAweDRlODIyNDZjLCAweDNjODAxNjYwLCAweDNjODAxNjYwfSwKKwl7MHgwMDAwYTVjNCwgMHg1MzgyMjY2YywgMHg1MzgyMjY2YywgMHgzZjgwMTg2MSwgMHgzZjgwMTg2MX0sCisJezB4MDAwMGE1YzgsIDB4NTc4MjI4NmMsIDB4NTc4MjI4NmMsIDB4NDM4MDFhODEsIDB4NDM4MDFhODF9LAorCXsweDAwMDBhNWNjLCAweDVjODI0ODZiLCAweDVjODI0ODZiLCAweDQ3ODAxYTgzLCAweDQ3ODAxYTgzfSwKKwl7MHgwMDAwYTVkMCwgMHg2MTgyNGE2YywgMHg2MTgyNGE2YywgMHg0YTgwMWM4NCwgMHg0YTgwMWM4NH0sCisJezB4MDAwMGE1ZDQsIDB4NjY4MjZhNmMsIDB4NjY4MjZhNmMsIDB4NGU4MDFjZTMsIDB4NGU4MDFjZTN9LAorCXsweDAwMDBhNWQ4LCAweDZiODI2ZTZjLCAweDZiODI2ZTZjLCAweDUyODAxY2U1LCAweDUyODAxY2U1fSwKKwl7MHgwMDAwYTVkYywgMHg3MDgyNzA4YywgMHg3MDgyNzA4YywgMHg1NjgwMWNlOSwgMHg1NjgwMWNlOX0sCisJezB4MDAwMGE1ZTAsIDB4NzM4MmIwOGEsIDB4NzM4MmIwOGEsIDB4NWE4MDFjZWIsIDB4NWE4MDFjZWJ9LAorCXsweDAwMDBhNWU0LCAweDc3ODJiMDhjLCAweDc3ODJiMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKKwl7MHgwMDAwYTVlOCwgMHg3NzgyYjA4YywgMHg3NzgyYjA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCisJezB4MDAwMGE1ZWMsIDB4Nzc4MmIwOGMsIDB4Nzc4MmIwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDBhNWYwLCAweDc3ODJiMDhjLCAweDc3ODJiMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKKwl7MHgwMDAwYTVmNCwgMHg3NzgyYjA4YywgMHg3NzgyYjA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCisJezB4MDAwMGE1ZjgsIDB4Nzc4MmIwOGMsIDB4Nzc4MmIwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDBhNWZjLCAweDc3ODJiMDhjLCAweDc3ODJiMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKKwl7MHgwMDAxNjA0NCwgMHgwMTI0OTJkNCwgMHgwMTI0OTJkNCwgMHgwMTI0OTJkNCwgMHgwMTI0OTJkNH0sCisJezB4MDAwMTYwNDgsIDB4NjY0ODAwMDEsIDB4NjY0ODAwMDEsIDB4NjY0ODAwMDEsIDB4NjY0ODAwMDF9LAorCXsweDAwMDE2MDY4LCAweDZkYjZkYjZjLCAweDZkYjZkYjZjLCAweDZkYjZkYjZjLCAweDZkYjZkYjZjfSwKKwl7MHgwMDAxNjQ0NCwgMHgwMTI0OTJkNCwgMHgwMTI0OTJkNCwgMHgwMTI0OTJkNCwgMHgwMTI0OTJkNH0sCisJezB4MDAwMTY0NDgsIDB4NjY0ODAwMDEsIDB4NjY0ODAwMDEsIDB4NjY0ODAwMDEsIDB4NjY0ODAwMDF9LAorCXsweDAwMDE2NDY4LCAweDZkYjZkYjZjLCAweDZkYjZkYjZjLCAweDZkYjZkYjZjLCAweDZkYjZkYjZjfSwKKwl7MHgwMDAxNjg0NCwgMHgwMTI0OTJkNCwgMHgwMTI0OTJkNCwgMHgwMTI0OTJkNCwgMHgwMTI0OTJkNH0sCisJezB4MDAwMTY4NDgsIDB4NjY0ODAwMDEsIDB4NjY0ODAwMDEsIDB4NjY0ODAwMDEsIDB4NjY0ODAwMDF9LAorCXsweDAwMDE2ODY4LCAweDZkYjZkYjZjLCAweDZkYjZkYjZjLCAweDZkYjZkYjZjLCAweDZkYjZkYjZjfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzAwXzJwMl9tYWNfY29yZVtdWzJdID0geworCS8qIEFkZHIgICAgICBhbGxtb2RlcyAgKi8KKwl7MHgwMDAwMDAwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDAwMzAsIDB4MDAwMjAwODV9LAorCXsweDAwMDAwMDM0LCAweDAwMDAwMDA1fSwKKwl7MHgwMDAwMDA0MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDAwNDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwMDQ4LCAweDAwMDAwMDA4fSwKKwl7MHgwMDAwMDA0YywgMHgwMDAwMDAxMH0sCisJezB4MDAwMDAwNTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMDQwLCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA0NCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNDgsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDRjLCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA1MCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNTQsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDU4LCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA1YywgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNjAsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDY0LCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTBmMCwgMHgwMDAwMDEwMH0sCisJezB4MDAwMDEyNzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMmIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTJmMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE0M2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNDdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwMDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwMTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODA0NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwNDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDRjLCAweGZmZmZmZmZmfSwKKwl7MHgwMDAwODA1NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwNTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDVjLCAweDAwMGZjNzhmfSwKKwl7MHgwMDAwODA2MCwgMHgwMDAwMDAwZn0sCisJezB4MDAwMDgwNjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDcwLCAweDAwMDAwMzEwfSwKKwl7MHgwMDAwODA3NCwgMHgwMDAwMDAyMH0sCisJezB4MDAwMDgwNzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDljLCAweDAwMDAwMDBmfSwKKwl7MHgwMDAwODBhMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwYTQsIDB4MDJmZjAwMDB9LAorCXsweDAwMDA4MGE4LCAweDBlMDcwNjA1fSwKKwl7MHgwMDAwODBhYywgMHgwMDAwMDAwZH0sCisJezB4MDAwMDgwYjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGMwLCAweDJhODAwMDAwfSwKKwl7MHgwMDAwODBjNCwgMHgwNjkwMDE2OH0sCisJezB4MDAwMDgwYzgsIDB4MTM4ODFjMjB9LAorCXsweDAwMDA4MGNjLCAweDAxZjQwMDAwfSwKKwl7MHgwMDAwODBkMCwgMHgwMDI1MjUwMH0sCisJezB4MDAwMDgwZDQsIDB4MDBhMDAwMDB9LAorCXsweDAwMDA4MGQ4LCAweDAwNDAwMDAwfSwKKwl7MHgwMDAwODBkYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwZTAsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4MGU0LCAweDAwMDBmZmZmfSwKKwl7MHgwMDAwODBlOCwgMHgzZjNmM2YzZn0sCisJezB4MDAwMDgwZWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBmNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwZmMsIDB4MDAwMjAwMDB9LAorCXsweDAwMDA4MTAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEwOCwgMHgwMDAwMDA1Mn0sCisJezB4MDAwMDgxMGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODExNCwgMHgwMDAwMDdmZn0sCisJezB4MDAwMDgxMTgsIDB4MDAwMDAwYWF9LAorCXsweDAwMDA4MTFjLCAweDAwMDAzMjEwfSwKKwl7MHgwMDAwODEyNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEzMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEzYywgMHgwMDAwZmZmZn0sCisJezB4MDAwMDgxNDQsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4MTY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODE2YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxNzAsIDB4MTg0ODYyMDB9LAorCXsweDAwMDA4MTc0LCAweDMzMzMyMjEwfSwKKwl7MHgwMDAwODE3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxN2MsIDB4MDAwMjAwMDB9LAorCXsweDAwMDA4MWMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFjNCwgMHgzMzMzMjIxMH0sCisJezB4MDAwMDgxYzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFkNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxZWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFmNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWZjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI0MCwgMHgwMDEwMDAwMH0sCisJezB4MDAwMDgyNDQsIDB4MDAxMGY0MjR9LAorCXsweDAwMDA4MjQ4LCAweDAwMDAwODAwfSwKKwl7MHgwMDAwODI0YywgMHgwMDAxZTg0OH0sCisJezB4MDAwMDgyNTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI1OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyNWMsIDB4NDAwMDAwMDB9LAorCXsweDAwMDA4MjYwLCAweDAwMDgwOTIyfSwKKwl7MHgwMDAwODI2NCwgMHg5YmMwMDAxMH0sCisJezB4MDAwMDgyNjgsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4MjZjLCAweDAwMDBmZmZmfSwKKwl7MHgwMDAwODI3MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyNzQsIDB4NDAwMDAwMDB9LAorCXsweDAwMDA4Mjc4LCAweDAwM2U0MTgwfSwKKwl7MHgwMDAwODI3YywgMHgwMDAwMDAwNH0sCisJezB4MDAwMDgyODQsIDB4MDAwMDAwMmN9LAorCXsweDAwMDA4Mjg4LCAweDAwMDAwMDJjfSwKKwl7MHgwMDAwODI4YywgMHgwMDAwMDBmZn0sCisJezB4MDAwMDgyOTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4Mjk4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzMDAsIDB4MDAwMDAxNDB9LAorCXsweDAwMDA4MzE0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODMxYywgMHgwMDAwMDEwZH0sCisJezB4MDAwMDgzMjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzJjLCAweDAwMDAwMDA3fSwKKwl7MHgwMDAwODMzMCwgMHgwMDAwMDMwMn0sCisJezB4MDAwMDgzMzQsIDB4MDAwMDA3MDB9LAorCXsweDAwMDA4MzM4LCAweDAwZmYwMDAwfSwKKwl7MHgwMDAwODMzYywgMHgwMjQwMDAwMH0sCisJezB4MDAwMDgzNDAsIDB4MDAwMTA3ZmZ9LAorCXsweDAwMDA4MzQ0LCAweGFhNDgxMDVifSwKKwl7MHgwMDAwODM0OCwgMHgwMDhmMDAwMH0sCisJezB4MDAwMDgzNWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzYwLCAweGZmZmZmZmZmfSwKKwl7MHgwMDAwODM2NCwgMHhmZmZmZmZmZn0sCisJezB4MDAwMDgzNjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzcwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODM3NCwgMHgwMDAwMDBmZn0sCisJezB4MDAwMDgzNzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODM4MCwgMHhmZmZmZmZmZn0sCisJezB4MDAwMDgzODQsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4MzkwLCAweGZmZmZmZmZmfSwKKwl7MHgwMDAwODM5NCwgMHhmZmZmZmZmZn0sCisJezB4MDAwMDgzOTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODNhMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzYTQsIDB4MDAwMGZhMTR9LAorCXsweDAwMDA4M2E4LCAweDAwMGYwYzAwfSwKKwl7MHgwMDAwODNhYywgMHgzMzMzMjIxMH0sCisJezB4MDAwMDgzYjAsIDB4MzMzMzIyMTB9LAorCXsweDAwMDA4M2I0LCAweDMzMzMyMjEwfSwKKwl7MHgwMDAwODNiOCwgMHgzMzMzMjIxMH0sCisJezB4MDAwMDgzYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4M2MwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODNjNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzYzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4M2NjLCAweDAwMDAwMjAwfSwKKwl7MHgwMDAwODNkMCwgMHgwMDAzMDFmZn0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTMwMENvbW1vbl93b194bG5hX3J4X2dhaW5fdGFibGVfMnAyW11bMl0gPSB7CisJLyogQWRkciAgICAgIGFsbG1vZGVzICAqLworCXsweDAwMDBhMDAwLCAweDAwMDEwMDAwfSwKKwl7MHgwMDAwYTAwNCwgMHgwMDAzMDAwMn0sCisJezB4MDAwMGEwMDgsIDB4MDAwNTAwMDR9LAorCXsweDAwMDBhMDBjLCAweDAwODEwMDgwfSwKKwl7MHgwMDAwYTAxMCwgMHgwMDgzMDA4Mn0sCisJezB4MDAwMGEwMTQsIDB4MDE4MTAxODB9LAorCXsweDAwMDBhMDE4LCAweDAxODMwMTgyfSwKKwl7MHgwMDAwYTAxYywgMHgwMTg1MDE4NH0sCisJezB4MDAwMGEwMjAsIDB4MDE4OTAxODh9LAorCXsweDAwMDBhMDI0LCAweDAxOGIwMThhfSwKKwl7MHgwMDAwYTAyOCwgMHgwMThkMDE4Y30sCisJezB4MDAwMGEwMmMsIDB4MDM4MjAxOTB9LAorCXsweDAwMDBhMDMwLCAweDAzODQwMzgzfSwKKwl7MHgwMDAwYTAzNCwgMHgwMzg4MDM4NX0sCisJezB4MDAwMGEwMzgsIDB4MDM4YTAzODl9LAorCXsweDAwMDBhMDNjLCAweDAzOGMwMzhifSwKKwl7MHgwMDAwYTA0MCwgMHgwMzkwMDM4ZH0sCisJezB4MDAwMGEwNDQsIDB4MDM5MjAzOTF9LAorCXsweDAwMDBhMDQ4LCAweDAzOTQwMzkzfSwKKwl7MHgwMDAwYTA0YywgMHgwMzk2MDM5NX0sCisJezB4MDAwMGEwNTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA1OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA2NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDZjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA3MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA3YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwODAsIDB4MjkyOTI5Mjl9LAorCXsweDAwMDBhMDg0LCAweDI5MjkyOTI5fSwKKwl7MHgwMDAwYTA4OCwgMHgyOTI5MjkyOX0sCisJezB4MDAwMGEwOGMsIDB4MjkyOTI5Mjl9LAorCXsweDAwMDBhMDkwLCAweDIyMjkyOTI5fSwKKwl7MHgwMDAwYTA5NCwgMHgxZDFkMjIyMn0sCisJezB4MDAwMGEwOTgsIDB4MGMxMTExMTd9LAorCXsweDAwMDBhMDljLCAweDAwMDMwMzAzfSwKKwl7MHgwMDAwYTBhMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBhYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGMwLCAweDAwMWYwMDAwfSwKKwl7MHgwMDAwYTBjNCwgMHgwMTAwMDEwMX0sCisJezB4MDAwMGEwYzgsIDB4MDExZTAxMWZ9LAorCXsweDAwMDBhMGNjLCAweDAxMWMwMTFkfSwKKwl7MHgwMDAwYTBkMCwgMHgwMjAzMDIwNH0sCisJezB4MDAwMGEwZDQsIDB4MDIwMTAyMDJ9LAorCXsweDAwMDBhMGQ4LCAweDAyMWYwMjAwfSwKKwl7MHgwMDAwYTBkYywgMHgwMzAyMDIxZX0sCisJezB4MDAwMGEwZTAsIDB4MDMwMDAzMDF9LAorCXsweDAwMDBhMGU0LCAweDAzMWUwMzFmfSwKKwl7MHgwMDAwYTBlOCwgMHgwNDAyMDMxZH0sCisJezB4MDAwMGEwZWMsIDB4MDQwMDA0MDF9LAorCXsweDAwMDBhMGYwLCAweDA0MWUwNDFmfSwKKwl7MHgwMDAwYTBmNCwgMHgwNTAyMDQxZH0sCisJezB4MDAwMGEwZjgsIDB4MDUwMDA1MDF9LAorCXsweDAwMDBhMGZjLCAweDA1MWUwNTFmfSwKKwl7MHgwMDAwYTEwMCwgMHgwNjAxMDYwMn0sCisJezB4MDAwMGExMDQsIDB4MDYxZjA2MDB9LAorCXsweDAwMDBhMTA4LCAweDA2MWQwNjFlfSwKKwl7MHgwMDAwYTEwYywgMHgwNzAyMDcwM30sCisJezB4MDAwMGExMTAsIDB4MDcwMDA3MDF9LAorCXsweDAwMDBhMTE0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTExOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEyNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEzMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExNDAsIDB4MDAxZjAwMDB9LAorCXsweDAwMDBhMTQ0LCAweDAxMDAwMTAxfSwKKwl7MHgwMDAwYTE0OCwgMHgwMTFlMDExZn0sCisJezB4MDAwMGExNGMsIDB4MDExYzAxMWR9LAorCXsweDAwMDBhMTUwLCAweDAyMDMwMjA0fSwKKwl7MHgwMDAwYTE1NCwgMHgwMjAxMDIwMn0sCisJezB4MDAwMGExNTgsIDB4MDIxZjAyMDB9LAorCXsweDAwMDBhMTVjLCAweDAzMDIwMjFlfSwKKwl7MHgwMDAwYTE2MCwgMHgwMzAwMDMwMX0sCisJezB4MDAwMGExNjQsIDB4MDMxZTAzMWZ9LAorCXsweDAwMDBhMTY4LCAweDA0MDIwMzFkfSwKKwl7MHgwMDAwYTE2YywgMHgwNDAwMDQwMX0sCisJezB4MDAwMGExNzAsIDB4MDQxZTA0MWZ9LAorCXsweDAwMDBhMTc0LCAweDA1MDIwNDFkfSwKKwl7MHgwMDAwYTE3OCwgMHgwNTAwMDUwMX0sCisJezB4MDAwMGExN2MsIDB4MDUxZTA1MWZ9LAorCXsweDAwMDBhMTgwLCAweDA2MDEwNjAyfSwKKwl7MHgwMDAwYTE4NCwgMHgwNjFmMDYwMH0sCisJezB4MDAwMGExODgsIDB4MDYxZDA2MWV9LAorCXsweDAwMDBhMThjLCAweDA3MDIwNzAzfSwKKwl7MHgwMDAwYTE5MCwgMHgwNzAwMDcwMX0sCisJezB4MDAwMGExOTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTk4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTE5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWE0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFhOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFiNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFjMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFjYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFkOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWUwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFlNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWVjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFmMCwgMHgwMDAwMDM5Nn0sCisJezB4MDAwMGExZjQsIDB4MDAwMDAzOTZ9LAorCXsweDAwMDBhMWY4LCAweDAwMDAwMzk2fSwKKwl7MHgwMDAwYTFmYywgMHgwMDAwMDE5Nn0sCisJezB4MDAwMGIwMDAsIDB4MDAwMTAwMDB9LAorCXsweDAwMDBiMDA0LCAweDAwMDMwMDAyfSwKKwl7MHgwMDAwYjAwOCwgMHgwMDA1MDAwNH0sCisJezB4MDAwMGIwMGMsIDB4MDA4MTAwODB9LAorCXsweDAwMDBiMDEwLCAweDAwODMwMDgyfSwKKwl7MHgwMDAwYjAxNCwgMHgwMTgxMDE4MH0sCisJezB4MDAwMGIwMTgsIDB4MDE4MzAxODJ9LAorCXsweDAwMDBiMDFjLCAweDAxODUwMTg0fSwKKwl7MHgwMDAwYjAyMCwgMHgwMjgxMDI4MH0sCisJezB4MDAwMGIwMjQsIDB4MDI4MzAyODJ9LAorCXsweDAwMDBiMDI4LCAweDAyODUwMjg0fSwKKwl7MHgwMDAwYjAyYywgMHgwMjg5MDI4OH0sCisJezB4MDAwMGIwMzAsIDB4MDI4YjAyOGF9LAorCXsweDAwMDBiMDM0LCAweDAzODgwMjhjfSwKKwl7MHgwMDAwYjAzOCwgMHgwMzhhMDM4OX0sCisJezB4MDAwMGIwM2MsIDB4MDM4YzAzOGJ9LAorCXsweDAwMDBiMDQwLCAweDAzOTAwMzhkfSwKKwl7MHgwMDAwYjA0NCwgMHgwMzkyMDM5MX0sCisJezB4MDAwMGIwNDgsIDB4MDM5NDAzOTN9LAorCXsweDAwMDBiMDRjLCAweDAzOTYwMzk1fSwKKwl7MHgwMDAwYjA1MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDU4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA1YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA2OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDcwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA3NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA4MCwgMHgzMjMyMzIzMn0sCisJezB4MDAwMGIwODQsIDB4MmYyZjMyMzJ9LAorCXsweDAwMDBiMDg4LCAweDIzMjgyYTJkfSwKKwl7MHgwMDAwYjA4YywgMHgxYzFlMjEyM30sCisJezB4MDAwMGIwOTAsIDB4MTQxNzE5MTl9LAorCXsweDAwMDBiMDk0LCAweDBlMGUxMjE0fSwKKwl7MHgwMDAwYjA5OCwgMHgwMzA1MDcwN30sCisJezB4MDAwMGIwOWMsIDB4MDAwMzAzMDN9LAorCXsweDAwMDBiMGEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjBhNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwYTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMGFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjBiMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwYjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMGI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjBiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwYzAsIDB4MDAzZjAwMjB9LAorCXsweDAwMDBiMGM0LCAweDAwNDAwMDQxfSwKKwl7MHgwMDAwYjBjOCwgMHgwMTQwMDA1Zn0sCisJezB4MDAwMGIwY2MsIDB4MDE2MDAxNWZ9LAorCXsweDAwMDBiMGQwLCAweDAxN2UwMTdmfSwKKwl7MHgwMDAwYjBkNCwgMHgwMjQxMDI0Mn0sCisJezB4MDAwMGIwZDgsIDB4MDI1ZjAyNDB9LAorCXsweDAwMDBiMGRjLCAweDAyN2YwMjYwfSwKKwl7MHgwMDAwYjBlMCwgMHgwMzQxMDI3ZX0sCisJezB4MDAwMGIwZTQsIDB4MDM1ZjAzNDB9LAorCXsweDAwMDBiMGU4LCAweDAzN2YwMzYwfSwKKwl7MHgwMDAwYjBlYywgMHgwNDQwMDQ0MX0sCisJezB4MDAwMGIwZjAsIDB4MDQ2MDA0NWZ9LAorCXsweDAwMDBiMGY0LCAweDA1NDEwNDdmfSwKKwl7MHgwMDAwYjBmOCwgMHgwNTVmMDU0MH0sCisJezB4MDAwMGIwZmMsIDB4MDU3ZjA1NjB9LAorCXsweDAwMDBiMTAwLCAweDA2NDAwNjQxfSwKKwl7MHgwMDAwYjEwNCwgMHgwNjYwMDY1Zn0sCisJezB4MDAwMGIxMDgsIDB4MDY3ZTA2N2Z9LAorCXsweDAwMDBiMTBjLCAweDA3NDEwNzQyfSwKKwl7MHgwMDAwYjExMCwgMHgwNzVmMDc0MH0sCisJezB4MDAwMGIxMTQsIDB4MDc3ZjA3NjB9LAorCXsweDAwMDBiMTE4LCAweDA3ODAwNzgxfSwKKwl7MHgwMDAwYjExYywgMHgwN2EwMDc5Zn0sCisJezB4MDAwMGIxMjAsIDB4MDdjMTA3YmZ9LAorCXsweDAwMDBiMTI0LCAweDAwMDAwN2MwfSwKKwl7MHgwMDAwYjEyOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxMmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMTMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjEzNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxMzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMTNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjE0MCwgMHgwMDNmMDAyMH0sCisJezB4MDAwMGIxNDQsIDB4MDA0MDAwNDF9LAorCXsweDAwMDBiMTQ4LCAweDAxNDAwMDVmfSwKKwl7MHgwMDAwYjE0YywgMHgwMTYwMDE1Zn0sCisJezB4MDAwMGIxNTAsIDB4MDE3ZTAxN2Z9LAorCXsweDAwMDBiMTU0LCAweDAyNDEwMjQyfSwKKwl7MHgwMDAwYjE1OCwgMHgwMjVmMDI0MH0sCisJezB4MDAwMGIxNWMsIDB4MDI3ZjAyNjB9LAorCXsweDAwMDBiMTYwLCAweDAzNDEwMjdlfSwKKwl7MHgwMDAwYjE2NCwgMHgwMzVmMDM0MH0sCisJezB4MDAwMGIxNjgsIDB4MDM3ZjAzNjB9LAorCXsweDAwMDBiMTZjLCAweDA0NDAwNDQxfSwKKwl7MHgwMDAwYjE3MCwgMHgwNDYwMDQ1Zn0sCisJezB4MDAwMGIxNzQsIDB4MDU0MTA0N2Z9LAorCXsweDAwMDBiMTc4LCAweDA1NWYwNTQwfSwKKwl7MHgwMDAwYjE3YywgMHgwNTdmMDU2MH0sCisJezB4MDAwMGIxODAsIDB4MDY0MDA2NDF9LAorCXsweDAwMDBiMTg0LCAweDA2NjAwNjVmfSwKKwl7MHgwMDAwYjE4OCwgMHgwNjdlMDY3Zn0sCisJezB4MDAwMGIxOGMsIDB4MDc0MTA3NDJ9LAorCXsweDAwMDBiMTkwLCAweDA3NWYwNzQwfSwKKwl7MHgwMDAwYjE5NCwgMHgwNzdmMDc2MH0sCisJezB4MDAwMGIxOTgsIDB4MDc4MDA3ODF9LAorCXsweDAwMDBiMTljLCAweDA3YTAwNzlmfSwKKwl7MHgwMDAwYjFhMCwgMHgwN2MxMDdiZn0sCisJezB4MDAwMGIxYTQsIDB4MDAwMDA3YzB9LAorCXsweDAwMDBiMWE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFhYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxYjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFjNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxYzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFkMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWQ4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFkYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFlOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWYwLCAweDAwMDAwMzk2fSwKKwl7MHgwMDAwYjFmNCwgMHgwMDAwMDM5Nn0sCisJezB4MDAwMGIxZjgsIDB4MDAwMDAzOTZ9LAorCXsweDAwMDBiMWZjLCAweDAwMDAwMTk2fSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzAwXzJwMl9zb2NfcHJlYW1ibGVbXVsyXSA9IHsKKwkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCisJezB4MDAwMDQwYTQsIDB4MDBhMGMxYzl9LAorCXsweDAwMDA3MDA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwNzAyMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDcwMzQsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDA3MDM4LCAweDAwMDAwNGMyfSwKKwl7MHgwMDAwNzA0OCwgMHgwMDAwMDAwOH0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTMwMFBjaWVQaHlfcGxsX29uX2Nsa3JlcV9kaXNhYmxlX0wxXzJwMltdWzJdID0geworCS8qIEFkZHIgICAgICBhbGxtb2RlcyAgKi8KKwl7MHgwMDAwNDA0MCwgMHgwODIxMmU1ZX0sCisJezB4MDAwMDQwNDAsIDB4MDAwODAwM2J9LAorCXsweDAwMDA0MDQ0LCAweDAwMDAwMDAwfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzAwUGNpZVBoeV9jbGtyZXFfZW5hYmxlX0wxXzJwMltdWzJdID0geworCS8qIEFkZHIgICAgICBhbGxtb2RlcyAgKi8KKwl7MHgwMDAwNDA0MCwgMHgwODI1M2U1ZX0sCisJezB4MDAwMDQwNDAsIDB4MDAwODAwM2J9LAorCXsweDAwMDA0MDQ0LCAweDAwMDAwMDAwfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzAwUGNpZVBoeV9jbGtyZXFfZGlzYWJsZV9MMV8ycDJbXVsyXSA9IHsKKwkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCisJezB4MDAwMDQwNDAsIDB4MDgyMTNlNWV9LAorCXsweDAwMDA0MDQwLCAweDAwMDgwMDNifSwKKwl7MHgwMDAwNDA0NCwgMHgwMDAwMDAwMH0sCit9OworCisjZW5kaWYgLyogSU5JVFZBTFNfOTAwM18yUDJfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19jYWxpYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19jYWxpYi5jCmluZGV4IDU2YTllNWYuLjVhMDY1MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfY2FsaWIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2NhbGliLmMKQEAgLTczOSw2ICs3MzksMTIgQEAKIAkgKi8KIAlhcjkwMDNfaHdfc2V0X2NoYWluX21hc2tzKGFoLCAweDcsIDB4Nyk7CiAKKwkvKiBEbyBUeCBJUSBDYWxpYnJhdGlvbiAqLworCWFyOTAwM19od190eF9pcV9jYWwoYWgpOworCVJFR19XUklURShhaCwgQVJfUEhZX0FDVElWRSwgQVJfUEhZX0FDVElWRV9ESVMpOworCXVkZWxheSg1KTsKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9BQ1RJVkUsIEFSX1BIWV9BQ1RJVkVfRU4pOworCiAJLyogQ2FsaWJyYXRlIHRoZSBBR0MgKi8KIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwKIAkJICBSRUdfUkVBRChhaCwgQVJfUEhZX0FHQ19DT05UUk9MKSB8CkBAIC03NTMsMTAgKzc1OSw2IEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQkvKiBEbyBUeCBJUSBDYWxpYnJhdGlvbiAqLwotCWlmIChhaC0+Y29uZmlnLnR4X2lxX2NhbGlicmF0aW9uKQotCQlhcjkwMDNfaHdfdHhfaXFfY2FsKGFoKTsKLQogCS8qIFJldmVydCBjaGFpbm1hc2tzIHRvIHRoZWlyIG9yaWdpbmFsIHZhbHVlcyBiZWZvcmUgTkYgY2FsICovCiAJYXI5MDAzX2h3X3NldF9jaGFpbl9tYXNrcyhhaCwgYWgtPnJ4Y2hhaW5tYXNrLCBhaC0+dHhjaGFpbm1hc2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2VlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19lZXByb20uYwppbmRleCAyM2ViNjBlLi5hY2U4ZDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2VlcHJvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfZWVwcm9tLmMKQEAgLTY3LDYgKzY3LDcgQEAKIAkJICAqIGJpdDIgLSBlbmFibGUgZmFzdENsb2NrIC0gZW5hYmxlZAogCQkgICogYml0MyAtIGVuYWJsZSBkb3VibGluZyAtIGVuYWJsZWQKIAkJICAqIGJpdDQgLSBlbmFibGUgaW50ZXJuYWwgcmVndWxhdG9yIC0gZGlzYWJsZWQKKwkJICAqIGJpdDUgLSBlbmFibGUgcGEgcHJlZGlzdG9ydGlvbiAtIGRpc2FibGVkCiAJCSAgKi8KIAkJLm1pc2NDb25maWd1cmF0aW9uID0gMCwgLyogYml0MCAtIHR1cm4gZG93biBkcml2ZXN0cmVuZ3RoICovCiAJCS5lZXByb21Xcml0ZUVuYWJsZUdwaW8gPSAzLApAQCAtMTI5LDkgKzEzMCwxMSBAQAogCQkudHhFbmRUb1J4T24gPSAweDIsCiAJCS50eEZyYW1lVG9YcGFPbiA9IDB4ZSwKIAkJLnRocmVzaDYyID0gMjgsCi0JCS5mdXR1cmVNb2RhbCA9IHsgLyogWzMyXSAqLworCQkucGFwZFJhdGVNYXNrSHQyMCA9IExFMzIoMHg4MGMwODApLAorCQkucGFwZFJhdGVNYXNrSHQ0MCA9IExFMzIoMHg4MGMwODApLAorCQkuZnV0dXJlTW9kYWwgPSB7CiAJCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotCQkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAorCQkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAogCQl9LAogCSB9LAogCS5jYWxGcmVxUGllcjJHID0gewpAQCAtMzI2LDkgKzMyOSwxMSBAQAogCQkudHhFbmRUb1J4T24gPSAweDIsCiAJCS50eEZyYW1lVG9YcGFPbiA9IDB4ZSwKIAkJLnRocmVzaDYyID0gMjgsCisJCS5wYXBkUmF0ZU1hc2tIdDIwID0gTEUzMigweGYwZTBlMCksCisJCS5wYXBkUmF0ZU1hc2tIdDQwID0gTEUzMigweGYwZTBlMCksCiAJCS5mdXR1cmVNb2RhbCA9IHsKIAkJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0JCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCisJCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCiAJCX0sCiAJIH0sCiAJLmNhbEZyZXFQaWVyNUcgPSB7CkBAIC02NDQsNiArNjQ5LDggQEAKIAkJcmV0dXJuIChwQmFzZS0+ZmVhdHVyZUVuYWJsZSAmIDB4MTApID4+IDQ7CiAJY2FzZSBFRVBfU1dSRUc6CiAJCXJldHVybiBsZTMyX3RvX2NwdShwQmFzZS0+c3dyZWcpOworCWNhc2UgRUVQX1BBUFJEOgorCQlyZXR1cm4gISEocEJhc2UtPmZlYXR1cmVFbmFibGUgJiBCSVQoNSkpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAwOwogCX0KQEAgLTk0NCw3ICs5NTEsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdTE2IGF0aDlrX2h3X2FyOTMwMF9nZXRfZWVwcm9tX2FudGVubmFfY2ZnKHN0cnVjdCBhdGhfaHcgKmFoLAorc3RhdGljIHUzMiBhdGg5a19od19hcjkzMDBfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7CiAJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2VlcHJvbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19lZXByb20uaAppbmRleCAyM2ZiMzUzLi4zYzUzM2JiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2VlcHJvbS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfZWVwcm9tLmgKQEAgLTIzNCw3ICsyMzQsOSBAQAogCXU4IHR4RW5kVG9SeE9uOwogCXU4IHR4RnJhbWVUb1hwYU9uOwogCXU4IHRocmVzaDYyOwotCXU4IGZ1dHVyZU1vZGFsWzMyXTsKKwlfX2xlMzIgcGFwZFJhdGVNYXNrSHQyMDsKKwlfX2xlMzIgcGFwZFJhdGVNYXNrSHQ0MDsKKwl1OCBmdXR1cmVNb2RhbFsyNF07CiB9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYXI5MzAwX2NhbF9kYXRhX3Blcl9mcmVxX29wX2xvb3AgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19ody5jCmluZGV4IGIxNTMwOWMuLjA2NDE2ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2h3LmMKQEAgLTE2LDcgKzE2LDggQEAKIAogI2luY2x1ZGUgImh3LmgiCiAjaW5jbHVkZSAiYXI5MDAzX21hYy5oIgotI2luY2x1ZGUgImFyOTAwM19pbml0dmFscy5oIgorI2luY2x1ZGUgImFyOTAwM18ycDBfaW5pdHZhbHMuaCIKKyNpbmNsdWRlICJhcjkwMDNfMnAyX2luaXR2YWxzLmgiCiAKIC8qIEdlbmVyYWwgaGFyZHdhcmUgY29kZSBmb3IgdGhlIEFSOTAwMyBoYWR3YXJlIGZhbWlseSAqLwogCkBAIC0zMSwxMiArMzIsOCBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotLyogQVI5MDAzIDIuMCAtIG5ldyBJTkkgZm9ybWF0IChwcmUsIGNvcmUsIHBvc3QgYXJyYXlzIHBlciBzdWJzeXN0ZW0pICovCi0vKgotICogWFhYOiBtb3ZlIFRYL1JYIGdhaW4gSU5JIHRvIGl0cyBvd24gaW5pdF9tb2RlX2dhaW5fcmVncyBhZnRlcgotICogZW5zdXJpbmcgaXQgZG9lcyBub3QgYWZmZWN0IGhhcmR3YXJlIGJyaW5nIHVwCi0gKi8KLXN0YXRpYyB2b2lkIGFyOTAwM19od19pbml0X21vZGVfcmVncyhzdHJ1Y3QgYXRoX2h3ICphaCkKKy8qIEFSOTAwMyAyLjAgKi8KK3N0YXRpYyB2b2lkIGFyOTAwM18ycDBfaHdfaW5pdF9tb2RlX3JlZ3Moc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJLyogbWFjICovCiAJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNYWNbQVRIX0lOSV9QUkVdLCBOVUxMLCAwLCAwKTsKQEAgLTEwNiwyNyArMTAzLDEyOCBAQAogCQkgICAgICAgMyk7CiB9CiAKKy8qIEFSOTAwMyAyLjIgKi8KK3N0YXRpYyB2b2lkIGFyOTAwM18ycDJfaHdfaW5pdF9tb2RlX3JlZ3Moc3RydWN0IGF0aF9odyAqYWgpCit7CisJLyogbWFjICovCisJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNYWNbQVRIX0lOSV9QUkVdLCBOVUxMLCAwLCAwKTsKKwlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1hY1tBVEhfSU5JX0NPUkVdLAorCQkgICAgICAgYXI5MzAwXzJwMl9tYWNfY29yZSwKKwkJICAgICAgIEFSUkFZX1NJWkUoYXI5MzAwXzJwMl9tYWNfY29yZSksIDIpOworCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTWFjW0FUSF9JTklfUE9TVF0sCisJCSAgICAgICBhcjkzMDBfMnAyX21hY19wb3N0YW1ibGUsCisJCSAgICAgICBBUlJBWV9TSVpFKGFyOTMwMF8ycDJfbWFjX3Bvc3RhbWJsZSksIDUpOworCisJLyogYmIgKi8KKwlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJCW0FUSF9JTklfUFJFXSwgTlVMTCwgMCwgMCk7CisJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCQltBVEhfSU5JX0NPUkVdLAorCQkgICAgICAgYXI5MzAwXzJwMl9iYXNlYmFuZF9jb3JlLAorCQkgICAgICAgQVJSQVlfU0laRShhcjkzMDBfMnAyX2Jhc2ViYW5kX2NvcmUpLCAyKTsKKwlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJCW0FUSF9JTklfUE9TVF0sCisJCSAgICAgICBhcjkzMDBfMnAyX2Jhc2ViYW5kX3Bvc3RhbWJsZSwKKwkJICAgICAgIEFSUkFZX1NJWkUoYXI5MzAwXzJwMl9iYXNlYmFuZF9wb3N0YW1ibGUpLCA1KTsKKworCS8qIHJhZGlvICovCisJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlSYWRpb1tBVEhfSU5JX1BSRV0sIE5VTEwsIDAsIDApOworCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pUmFkaW9bQVRIX0lOSV9DT1JFXSwKKwkJICAgICAgIGFyOTMwMF8ycDJfcmFkaW9fY29yZSwKKwkJICAgICAgIEFSUkFZX1NJWkUoYXI5MzAwXzJwMl9yYWRpb19jb3JlKSwgMik7CisJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlSYWRpb1tBVEhfSU5JX1BPU1RdLAorCQkgICAgICAgYXI5MzAwXzJwMl9yYWRpb19wb3N0YW1ibGUsCisJCSAgICAgICBBUlJBWV9TSVpFKGFyOTMwMF8ycDJfcmFkaW9fcG9zdGFtYmxlKSwgNSk7CisKKwkvKiBzb2MgKi8KKwlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVNPQ1tBVEhfSU5JX1BSRV0sCisJCSAgICAgICBhcjkzMDBfMnAyX3NvY19wcmVhbWJsZSwKKwkJICAgICAgIEFSUkFZX1NJWkUoYXI5MzAwXzJwMl9zb2NfcHJlYW1ibGUpLCAyKTsKKwlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVNPQ1tBVEhfSU5JX0NPUkVdLCBOVUxMLCAwLCAwKTsKKwlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVNPQ1tBVEhfSU5JX1BPU1RdLAorCQkgICAgICAgYXI5MzAwXzJwMl9zb2NfcG9zdGFtYmxlLAorCQkgICAgICAgQVJSQVlfU0laRShhcjkzMDBfMnAyX3NvY19wb3N0YW1ibGUpLCA1KTsKKworCS8qIHJ4L3R4IGdhaW4gKi8KKwlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLAorCQkgICAgICAgYXI5MzAwQ29tbW9uX3J4X2dhaW5fdGFibGVfMnAyLAorCQkgICAgICAgQVJSQVlfU0laRShhcjkzMDBDb21tb25fcnhfZ2Fpbl90YWJsZV8ycDIpLCAyKTsKKwlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLAorCQkgICAgICAgYXI5MzAwTW9kZXNfbG93ZXN0X29iX2RiX3R4X2dhaW5fdGFibGVfMnAyLAorCQkgICAgICAgQVJSQVlfU0laRShhcjkzMDBNb2Rlc19sb3dlc3Rfb2JfZGJfdHhfZ2Fpbl90YWJsZV8ycDIpLAorCQkgICAgICAgNSk7CisKKwkvKiBMb2FkIFBDSUUgU0VSREVTIHNldHRpbmdzIGZyb20gSU5JICovCisKKwkvKiBBd2FrZSBTZXR0aW5nICovCisKKwlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVBjaWVTZXJkZXMsCisJCSAgICAgICBhcjkzMDBQY2llUGh5X3BsbF9vbl9jbGtyZXFfZGlzYWJsZV9MMV8ycDIsCisJCSAgICAgICBBUlJBWV9TSVpFKGFyOTMwMFBjaWVQaHlfcGxsX29uX2Nsa3JlcV9kaXNhYmxlX0wxXzJwMiksCisJCSAgICAgICAyKTsKKworCS8qIFNsZWVwIFNldHRpbmcgKi8KKworCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pUGNpZVNlcmRlc0xvd1Bvd2VyLAorCQkgICAgICAgYXI5MzAwUGNpZVBoeV9jbGtyZXFfZW5hYmxlX0wxXzJwMiwKKwkJICAgICAgIEFSUkFZX1NJWkUoYXI5MzAwUGNpZVBoeV9jbGtyZXFfZW5hYmxlX0wxXzJwMiksCisJCSAgICAgICAyKTsKKworCS8qIEZhc3QgY2xvY2sgbW9kYWwgc2V0dGluZ3MgKi8KKwlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzQWRkaXRpb25hbCwKKwkJICAgICAgIGFyOTMwME1vZGVzX2Zhc3RfY2xvY2tfMnAyLAorCQkgICAgICAgQVJSQVlfU0laRShhcjkzMDBNb2Rlc19mYXN0X2Nsb2NrXzJwMiksCisJCSAgICAgICAzKTsKK30KKworLyoKKyAqIFRoZSBBUjkwMDMgZmFtaWx5IHVzZXMgYSBuZXcgSU5JIGZvcm1hdCAocHJlLCBjb3JlLCBwb3N0CisgKiBhcnJheXMgcGVyIHN1YnN5c3RlbSkuCisgKi8KK3N0YXRpYyB2b2lkIGFyOTAwM19od19pbml0X21vZGVfcmVncyhzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlpZiAoQVJfU1JFVl85MzAwXzIwKGFoKSkKKwkJYXI5MDAzXzJwMF9od19pbml0X21vZGVfcmVncyhhaCk7CisJZWxzZQorCQlhcjkwMDNfMnAyX2h3X2luaXRfbW9kZV9yZWdzKGFoKTsKK30KKwogc3RhdGljIHZvaWQgYXI5MDAzX3R4X2dhaW5fdGFibGVfYXBwbHkoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJc3dpdGNoIChhcjkwMDNfaHdfZ2V0X3R4X2dhaW5faWR4KGFoKSkgewogCWNhc2UgMDoKIAlkZWZhdWx0OgotCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLAotCQkJICAgICAgIGFyOTMwME1vZGVzX2xvd2VzdF9vYl9kYl90eF9nYWluX3RhYmxlXzJwMCwKLQkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTMwME1vZGVzX2xvd2VzdF9vYl9kYl90eF9nYWluX3RhYmxlXzJwMCksCi0JCQkgICAgICAgNSk7CisJCWlmIChBUl9TUkVWXzkzMDBfMjAoYWgpKQorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKKwkJCQkgICAgICAgYXI5MzAwTW9kZXNfbG93ZXN0X29iX2RiX3R4X2dhaW5fdGFibGVfMnAwLAorCQkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTMwME1vZGVzX2xvd2VzdF9vYl9kYl90eF9nYWluX3RhYmxlXzJwMCksCisJCQkJICAgICAgIDUpOworCQllbHNlCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLAorCQkJCSAgICAgICBhcjkzMDBNb2Rlc19sb3dlc3Rfb2JfZGJfdHhfZ2Fpbl90YWJsZV8ycDIsCisJCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MzAwTW9kZXNfbG93ZXN0X29iX2RiX3R4X2dhaW5fdGFibGVfMnAyKSwKKwkJCQkgICAgICAgNSk7CiAJCWJyZWFrOwogCWNhc2UgMToKLQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKLQkJCSAgICAgICBhcjkzMDBNb2Rlc19oaWdoX29iX2RiX3R4X2dhaW5fdGFibGVfMnAwLAotCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MzAwTW9kZXNfaGlnaF9vYl9kYl90eF9nYWluX3RhYmxlXzJwMCksCi0JCQkgICAgICAgNSk7CisJCWlmIChBUl9TUkVWXzkzMDBfMjAoYWgpKQorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKKwkJCQkgICAgICAgYXI5MzAwTW9kZXNfaGlnaF9vYl9kYl90eF9nYWluX3RhYmxlXzJwMCwKKwkJCQkgICAgICAgQVJSQVlfU0laRShhcjkzMDBNb2Rlc19oaWdoX29iX2RiX3R4X2dhaW5fdGFibGVfMnAwKSwKKwkJCQkgICAgICAgNSk7CisJCWVsc2UKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCisJCQkJICAgICAgIGFyOTMwME1vZGVzX2hpZ2hfb2JfZGJfdHhfZ2Fpbl90YWJsZV8ycDIsCisJCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MzAwTW9kZXNfaGlnaF9vYl9kYl90eF9nYWluX3RhYmxlXzJwMiksCisJCQkJICAgICAgIDUpOwogCQlicmVhazsKIAljYXNlIDI6Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCi0JCQkgICAgICAgYXI5MzAwTW9kZXNfbG93X29iX2RiX3R4X2dhaW5fdGFibGVfMnAwLAotCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MzAwTW9kZXNfbG93X29iX2RiX3R4X2dhaW5fdGFibGVfMnAwKSwKLQkJCSAgICAgICA1KTsKKwkJaWYgKEFSX1NSRVZfOTMwMF8yMChhaCkpCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLAorCQkJCSAgICAgICBhcjkzMDBNb2Rlc19sb3dfb2JfZGJfdHhfZ2Fpbl90YWJsZV8ycDAsCisJCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MzAwTW9kZXNfbG93X29iX2RiX3R4X2dhaW5fdGFibGVfMnAwKSwKKwkJCQkgICAgICAgNSk7CisJCWVsc2UKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCisJCQkJICAgICAgIGFyOTMwME1vZGVzX2xvd19vYl9kYl90eF9nYWluX3RhYmxlXzJwMiwKKwkJCQkgICAgICAgQVJSQVlfU0laRShhcjkzMDBNb2Rlc19sb3dfb2JfZGJfdHhfZ2Fpbl90YWJsZV8ycDIpLAorCQkJCSAgICAgICA1KTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtMTM2LDE1ICsyMzQsMjggQEAKIAlzd2l0Y2ggKGFyOTAwM19od19nZXRfcnhfZ2Fpbl9pZHgoYWgpKSB7CiAJY2FzZSAwOgogCWRlZmF1bHQ6Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNSeEdhaW4sIGFyOTMwMENvbW1vbl9yeF9nYWluX3RhYmxlXzJwMCwKLQkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTMwMENvbW1vbl9yeF9nYWluX3RhYmxlXzJwMCksCi0JCQkgICAgICAgMik7CisJCWlmIChBUl9TUkVWXzkzMDBfMjAoYWgpKQorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1J4R2FpbiwKKwkJCQkgICAgICAgYXI5MzAwQ29tbW9uX3J4X2dhaW5fdGFibGVfMnAwLAorCQkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTMwMENvbW1vbl9yeF9nYWluX3RhYmxlXzJwMCksCisJCQkJICAgICAgIDIpOworCQllbHNlCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLAorCQkJCSAgICAgICBhcjkzMDBDb21tb25fcnhfZ2Fpbl90YWJsZV8ycDIsCisJCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MzAwQ29tbW9uX3J4X2dhaW5fdGFibGVfMnAyKSwKKwkJCQkgICAgICAgMik7CiAJCWJyZWFrOwogCWNhc2UgMToKLQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1J4R2FpbiwKLQkJCSAgICAgICBhcjkzMDBDb21tb25fd29feGxuYV9yeF9nYWluX3RhYmxlXzJwMCwKLQkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTMwMENvbW1vbl93b194bG5hX3J4X2dhaW5fdGFibGVfMnAwKSwKLQkJCSAgICAgICAyKTsKKwkJaWYgKEFSX1NSRVZfOTMwMF8yMChhaCkpCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLAorCQkJCSAgICAgICBhcjkzMDBDb21tb25fd29feGxuYV9yeF9nYWluX3RhYmxlXzJwMCwKKwkJCQkgICAgICAgQVJSQVlfU0laRShhcjkzMDBDb21tb25fd29feGxuYV9yeF9nYWluX3RhYmxlXzJwMCksCisJCQkJICAgICAgIDIpOworCQllbHNlCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLAorCQkJCSAgICAgICBhcjkzMDBDb21tb25fd29feGxuYV9yeF9nYWluX3RhYmxlXzJwMiwKKwkJCQkgICAgICAgQVJSQVlfU0laRShhcjkzMDBDb21tb25fd29feGxuYV9yeF9nYWluX3RhYmxlXzJwMiksCisJCQkJICAgICAgIDIpOwogCQlicmVhazsKIAl9CiB9CkBAIC0xODQsNiArMjk1LDI2IEBACiAJCS8qIFNldmVyYWwgUENJZSBtYXNzYWdlcyB0byBlbnN1cmUgcHJvcGVyIGJlaGF2aW91ciAqLwogCQlpZiAoYWgtPmNvbmZpZy5wY2llX3dhZW4pCiAJCQlSRUdfV1JJVEUoYWgsIEFSX1dBLCBhaC0+Y29uZmlnLnBjaWVfd2Flbik7CisJCWVsc2UKKwkJCVJFR19XUklURShhaCwgQVJfV0EsIGFoLT5XQVJlZ1ZhbCk7CisJfQorCisJLyoKKwkgKiBDb25maWdpcmUgUENJRSBhZnRlciBJbmkgaW5pdC4gU0VSREVTIHZhbHVlcyBub3cgY29tZSBmcm9tIGluaSBmaWxlCisJICogVGhpcyBlbmFibGVzIFBDSWUgbG93IHBvd2VyIG1vZGUuCisJICovCisJaWYgKGFoLT5jb25maWcucGNpZVNlckRlc1dyaXRlKSB7CisJCXVuc2lnbmVkIGludCBpOworCQlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgKmFycmF5OworCisJCWFycmF5ID0gcG93ZXJfb2ZmID8gJmFoLT5pbmlQY2llU2VyZGVzIDoKKwkJCQkgICAgJmFoLT5pbmlQY2llU2VyZGVzTG93UG93ZXI7CisKKwkJZm9yIChpID0gMDsgaSA8IGFycmF5LT5pYV9yb3dzOyBpKyspIHsKKwkJCVJFR19XUklURShhaCwKKwkJCQkgIElOSV9SQShhcnJheSwgaSwgMCksCisJCQkJICBJTklfUkEoYXJyYXksIGksIDEpKTsKKwkJfQogCX0KIH0KIApAQCAtMjAyLDQgKzMzMyw2IEBACiAJYXI5MDAzX2h3X2F0dGFjaF9waHlfb3BzKGFoKTsKIAlhcjkwMDNfaHdfYXR0YWNoX2NhbGliX29wcyhhaCk7CiAJYXI5MDAzX2h3X2F0dGFjaF9tYWNfb3BzKGFoKTsKKworCWF0aDlrX2h3X2F0dGFjaF9hbmlfb3BzX25ldyhhaCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2luaXR2YWxzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2luaXR2YWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiMDE5ZGQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19pbml0dmFscy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEwIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0gKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0KLSNpZm5kZWYgSU5JVFZBTFNfOTAwM19ICi0jZGVmaW5lIElOSVRWQUxTXzkwMDNfSAotCi0vKiBBUjkwMDMgMi4wICovCi0KLXN0YXRpYyBjb25zdCB1MzIgYXI5MzAwXzJwMF9yYWRpb19wb3N0YW1ibGVbXVs1XSA9IHsKLQkvKiBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAgMkdfSFQyMCAgICovCi0JezB4MDAwMTYwOWMsIDB4MGRkMDhmMjksIDB4MGRkMDhmMjksIDB4MGIyODNmMzEsIDB4MGIyODNmMzF9LAotCXsweDAwMDE2MGFjLCAweGE0NjUzYzAwLCAweGE0NjUzYzAwLCAweDI0NjUyODAwLCAweDI0NjUyODAwfSwKLQl7MHgwMDAxNjBiMCwgMHgwMzI4NGYzZSwgMHgwMzI4NGYzZSwgMHgwNWQwOGYyMCwgMHgwNWQwOGYyMH0sCi0JezB4MDAwMTYxMGMsIDB4MDgwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2MTQwLCAweDEwODA0MDA4LCAweDEwODA0MDA4LCAweDUwODA0MDA4LCAweDUwODA0MDA4fSwKLQl7MHgwMDAxNjUwYywgMHgwODAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMTY1NDAsIDB4MTA4MDQwMDgsIDB4MTA4MDQwMDgsIDB4NTA4MDQwMDgsIDB4NTA4MDQwMDh9LAotCXsweDAwMDE2OTBjLCAweDA4MDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNjk0MCwgMHgxMDgwNDAwOCwgMHgxMDgwNDAwOCwgMHg1MDgwNDAwOCwgMHg1MDgwNDAwOH0sCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIGFyOTMwME1vZGVzX2xvd2VzdF9vYl9kYl90eF9nYWluX3RhYmxlXzJwMFtdWzVdID0gewotCS8qIEFkZHIgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICAgKi8KLQl7MHgwMDAwYTQxMCwgMHgwMDAwNTBkOSwgMHgwMDAwNTBkOSwgMHgwMDAwNTBkOSwgMHgwMDAwNTBkOX0sCi0JezB4MDAwMGE1MDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhNTA0LCAweDA2MDAwMDAzLCAweDA2MDAwMDAzLCAweDA0MDAwMDAyLCAweDA0MDAwMDAyfSwKLQl7MHgwMDAwYTUwOCwgMHgwYTAwMDAyMCwgMHgwYTAwMDAyMCwgMHgwODAwMDAwNCwgMHgwODAwMDAwNH0sCi0JezB4MDAwMGE1MGMsIDB4MTAwMDAwMjMsIDB4MTAwMDAwMjMsIDB4MGIwMDAyMDAsIDB4MGIwMDAyMDB9LAotCXsweDAwMDBhNTEwLCAweDE2MDAwMjIwLCAweDE2MDAwMjIwLCAweDBmMDAwMjAyLCAweDBmMDAwMjAyfSwKLQl7MHgwMDAwYTUxNCwgMHgxYzAwMDIyMywgMHgxYzAwMDIyMywgMHgxMjAwMDQwMCwgMHgxMjAwMDQwMH0sCi0JezB4MDAwMGE1MTgsIDB4MjEwMjAyMjAsIDB4MjEwMjAyMjAsIDB4MTYwMDA0MDIsIDB4MTYwMDA0MDJ9LAotCXsweDAwMDBhNTFjLCAweDI3MDIwMjIzLCAweDI3MDIwMjIzLCAweDE5MDAwNDA0LCAweDE5MDAwNDA0fSwKLQl7MHgwMDAwYTUyMCwgMHgyYjAyMjIyMCwgMHgyYjAyMjIyMCwgMHgxYzAwMDYwMywgMHgxYzAwMDYwM30sCi0JezB4MDAwMGE1MjQsIDB4MmYwMjIyMjIsIDB4MmYwMjIyMjIsIDB4MjEwMDBhMDIsIDB4MjEwMDBhMDJ9LAotCXsweDAwMDBhNTI4LCAweDM0MDIyMjI1LCAweDM0MDIyMjI1LCAweDI1MDAwYTA0LCAweDI1MDAwYTA0fSwKLQl7MHgwMDAwYTUyYywgMHgzYTAyMjIyYSwgMHgzYTAyMjIyYSwgMHgyODAwMGEyMCwgMHgyODAwMGEyMH0sCi0JezB4MDAwMGE1MzAsIDB4M2UwMjIyMmMsIDB4M2UwMjIyMmMsIDB4MmMwMDBlMjAsIDB4MmMwMDBlMjB9LAotCXsweDAwMDBhNTM0LCAweDQyMDIyNDJhLCAweDQyMDIyNDJhLCAweDMwMDAwZTIyLCAweDMwMDAwZTIyfSwKLQl7MHgwMDAwYTUzOCwgMHg0NzAyMjQ0YSwgMHg0NzAyMjQ0YSwgMHgzNDAwMGUyNCwgMHgzNDAwMGUyNH0sCi0JezB4MDAwMGE1M2MsIDB4NGIwMjI0NGMsIDB4NGIwMjI0NGMsIDB4MzgwMDE2NDAsIDB4MzgwMDE2NDB9LAotCXsweDAwMDBhNTQwLCAweDRlMDIyNDZjLCAweDRlMDIyNDZjLCAweDNjMDAxNjYwLCAweDNjMDAxNjYwfSwKLQl7MHgwMDAwYTU0NCwgMHg1MzAyMjY2YywgMHg1MzAyMjY2YywgMHgzZjAwMTg2MSwgMHgzZjAwMTg2MX0sCi0JezB4MDAwMGE1NDgsIDB4NTcwMjI4NmMsIDB4NTcwMjI4NmMsIDB4NDMwMDFhODEsIDB4NDMwMDFhODF9LAotCXsweDAwMDBhNTRjLCAweDVjMDQyODZiLCAweDVjMDQyODZiLCAweDQ3MDAxYTgzLCAweDQ3MDAxYTgzfSwKLQl7MHgwMDAwYTU1MCwgMHg2MTA0MmE2YywgMHg2MTA0MmE2YywgMHg0YTAwMWM4NCwgMHg0YTAwMWM4NH0sCi0JezB4MDAwMGE1NTQsIDB4NjYwNjJhNmMsIDB4NjYwNjJhNmMsIDB4NGUwMDFjZTMsIDB4NGUwMDFjZTN9LAotCXsweDAwMDBhNTU4LCAweDZiMDYyZTZjLCAweDZiMDYyZTZjLCAweDUyMDAxY2U1LCAweDUyMDAxY2U1fSwKLQl7MHgwMDAwYTU1YywgMHg3MDA2MzA4YywgMHg3MDA2MzA4YywgMHg1NjAwMWNlOSwgMHg1NjAwMWNlOX0sCi0JezB4MDAwMGE1NjAsIDB4NzMwYTMwOGEsIDB4NzMwYTMwOGEsIDB4NWEwMDFjZWIsIDB4NWEwMDFjZWJ9LAotCXsweDAwMDBhNTY0LCAweDc3MGEzMDhjLCAweDc3MGEzMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKLQl7MHgwMDAwYTU2OCwgMHg3NzBhMzA4YywgMHg3NzBhMzA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCi0JezB4MDAwMGE1NmMsIDB4NzcwYTMwOGMsIDB4NzcwYTMwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAotCXsweDAwMDBhNTcwLCAweDc3MGEzMDhjLCAweDc3MGEzMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKLQl7MHgwMDAwYTU3NCwgMHg3NzBhMzA4YywgMHg3NzBhMzA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCi0JezB4MDAwMGE1NzgsIDB4NzcwYTMwOGMsIDB4NzcwYTMwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAotCXsweDAwMDBhNTdjLCAweDc3MGEzMDhjLCAweDc3MGEzMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKLQl7MHgwMDAwYTU4MCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMH0sCi0JezB4MDAwMGE1ODQsIDB4MDY4MDAwMDMsIDB4MDY4MDAwMDMsIDB4MDQ4MDAwMDIsIDB4MDQ4MDAwMDJ9LAotCXsweDAwMDBhNTg4LCAweDBhODAwMDIwLCAweDBhODAwMDIwLCAweDA4ODAwMDA0LCAweDA4ODAwMDA0fSwKLQl7MHgwMDAwYTU4YywgMHgxMDgwMDAyMywgMHgxMDgwMDAyMywgMHgwYjgwMDIwMCwgMHgwYjgwMDIwMH0sCi0JezB4MDAwMGE1OTAsIDB4MTY4MDAyMjAsIDB4MTY4MDAyMjAsIDB4MGY4MDAyMDIsIDB4MGY4MDAyMDJ9LAotCXsweDAwMDBhNTk0LCAweDFjODAwMjIzLCAweDFjODAwMjIzLCAweDEyODAwNDAwLCAweDEyODAwNDAwfSwKLQl7MHgwMDAwYTU5OCwgMHgyMTgyMDIyMCwgMHgyMTgyMDIyMCwgMHgxNjgwMDQwMiwgMHgxNjgwMDQwMn0sCi0JezB4MDAwMGE1OWMsIDB4Mjc4MjAyMjMsIDB4Mjc4MjAyMjMsIDB4MTk4MDA0MDQsIDB4MTk4MDA0MDR9LAotCXsweDAwMDBhNWEwLCAweDJiODIyMjIwLCAweDJiODIyMjIwLCAweDFjODAwNjAzLCAweDFjODAwNjAzfSwKLQl7MHgwMDAwYTVhNCwgMHgyZjgyMjIyMiwgMHgyZjgyMjIyMiwgMHgyMTgwMGEwMiwgMHgyMTgwMGEwMn0sCi0JezB4MDAwMGE1YTgsIDB4MzQ4MjIyMjUsIDB4MzQ4MjIyMjUsIDB4MjU4MDBhMDQsIDB4MjU4MDBhMDR9LAotCXsweDAwMDBhNWFjLCAweDNhODIyMjJhLCAweDNhODIyMjJhLCAweDI4ODAwYTIwLCAweDI4ODAwYTIwfSwKLQl7MHgwMDAwYTViMCwgMHgzZTgyMjIyYywgMHgzZTgyMjIyYywgMHgyYzgwMGUyMCwgMHgyYzgwMGUyMH0sCi0JezB4MDAwMGE1YjQsIDB4NDI4MjI0MmEsIDB4NDI4MjI0MmEsIDB4MzA4MDBlMjIsIDB4MzA4MDBlMjJ9LAotCXsweDAwMDBhNWI4LCAweDQ3ODIyNDRhLCAweDQ3ODIyNDRhLCAweDM0ODAwZTI0LCAweDM0ODAwZTI0fSwKLQl7MHgwMDAwYTViYywgMHg0YjgyMjQ0YywgMHg0YjgyMjQ0YywgMHgzODgwMTY0MCwgMHgzODgwMTY0MH0sCi0JezB4MDAwMGE1YzAsIDB4NGU4MjI0NmMsIDB4NGU4MjI0NmMsIDB4M2M4MDE2NjAsIDB4M2M4MDE2NjB9LAotCXsweDAwMDBhNWM0LCAweDUzODIyNjZjLCAweDUzODIyNjZjLCAweDNmODAxODYxLCAweDNmODAxODYxfSwKLQl7MHgwMDAwYTVjOCwgMHg1NzgyMjg2YywgMHg1NzgyMjg2YywgMHg0MzgwMWE4MSwgMHg0MzgwMWE4MX0sCi0JezB4MDAwMGE1Y2MsIDB4NWM4NDI4NmIsIDB4NWM4NDI4NmIsIDB4NDc4MDFhODMsIDB4NDc4MDFhODN9LAotCXsweDAwMDBhNWQwLCAweDYxODQyYTZjLCAweDYxODQyYTZjLCAweDRhODAxYzg0LCAweDRhODAxYzg0fSwKLQl7MHgwMDAwYTVkNCwgMHg2Njg2MmE2YywgMHg2Njg2MmE2YywgMHg0ZTgwMWNlMywgMHg0ZTgwMWNlM30sCi0JezB4MDAwMGE1ZDgsIDB4NmI4NjJlNmMsIDB4NmI4NjJlNmMsIDB4NTI4MDFjZTUsIDB4NTI4MDFjZTV9LAotCXsweDAwMDBhNWRjLCAweDcwODYzMDhjLCAweDcwODYzMDhjLCAweDU2ODAxY2U5LCAweDU2ODAxY2U5fSwKLQl7MHgwMDAwYTVlMCwgMHg3MzhhMzA4YSwgMHg3MzhhMzA4YSwgMHg1YTgwMWNlYiwgMHg1YTgwMWNlYn0sCi0JezB4MDAwMGE1ZTQsIDB4Nzc4YTMwOGMsIDB4Nzc4YTMwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAotCXsweDAwMDBhNWU4LCAweDc3OGEzMDhjLCAweDc3OGEzMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKLQl7MHgwMDAwYTVlYywgMHg3NzhhMzA4YywgMHg3NzhhMzA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCi0JezB4MDAwMGE1ZjAsIDB4Nzc4YTMwOGMsIDB4Nzc4YTMwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAotCXsweDAwMDBhNWY0LCAweDc3OGEzMDhjLCAweDc3OGEzMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKLQl7MHgwMDAwYTVmOCwgMHg3NzhhMzA4YywgMHg3NzhhMzA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCi0JezB4MDAwMGE1ZmMsIDB4Nzc4YTMwOGMsIDB4Nzc4YTMwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAotCXsweDAwMDE2MDQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0fSwKLQl7MHgwMDAxNjA0OCwgMHg2MjQ4MDAwMSwgMHg2MjQ4MDAwMSwgMHg2MjQ4MDAwMSwgMHg2MjQ4MDAwMX0sCi0JezB4MDAwMTYwNjgsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmN9LAotCXsweDAwMDE2NDQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0fSwKLQl7MHgwMDAxNjQ0OCwgMHg2MjQ4MDAwMSwgMHg2MjQ4MDAwMSwgMHg2MjQ4MDAwMSwgMHg2MjQ4MDAwMX0sCi0JezB4MDAwMTY0NjgsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmN9LAotCXsweDAwMDE2ODQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0LCAweDAxMjQ5MmQ0fSwKLQl7MHgwMDAxNjg0OCwgMHg2MjQ4MDAwMSwgMHg2MjQ4MDAwMSwgMHg2MjQ4MDAwMSwgMHg2MjQ4MDAwMX0sCi0JezB4MDAwMTY4NjgsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmN9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBhcjkzMDBNb2Rlc19mYXN0X2Nsb2NrXzJwMFtdWzNdID0gewotCS8qIEFkZHIgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgKi8KLQl7MHgwMDAwMTAzMCwgMHgwMDAwMDI2OCwgMHgwMDAwMDRkMH0sCi0JezB4MDAwMDEwNzAsIDB4MDAwMDAxOGMsIDB4MDAwMDAzMTh9LAotCXsweDAwMDAxMGIwLCAweDAwMDAwZmQwLCAweDAwMDAxZmEwfSwKLQl7MHgwMDAwODAxNCwgMHgwNDRjMDQ0YywgMHgwODk4MDg5OH0sCi0JezB4MDAwMDgwMWMsIDB4MTQ4ZWMwMmIsIDB4MTQ4ZWMwNTd9LAotCXsweDAwMDA4MzE4LCAweDAwMDA0NGMwLCAweDAwMDA4OTgwfSwKLQl7MHgwMDAwOWUwMCwgMHgwMzcyMTgyMSwgMHgwMzcyMTgyMX0sCi0JezB4MDAwMGEyMzAsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMTZ9LAotCXsweDAwMDBhMjU0LCAweDAwMDAwODk4LCAweDAwMDAxMTMwfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5MzAwXzJwMF9yYWRpb19jb3JlW11bMl0gPSB7Ci0JLyogQWRkciAgICAgIGFsbG1vZGVzICAqLwotCXsweDAwMDE2MDAwLCAweDM2ZGI2ZGI2fSwKLQl7MHgwMDAxNjAwNCwgMHg2ZGI2ZGI0MH0sCi0JezB4MDAwMTYwMDgsIDB4NzNmMDAwMDB9LAotCXsweDAwMDE2MDBjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNjA0MCwgMHg3ZjgwZmZmOH0sCi0JezB4MDAwMTYwNGMsIDB4NzZkMDA1YjV9LAotCXsweDAwMDE2MDUwLCAweDU1NmNmMDMxfSwKLQl7MHgwMDAxNjA1NCwgMHgxMzQ0OTQ0MH0sCi0JezB4MDAwMTYwNTgsIDB4MGM1MWM5MmN9LAotCXsweDAwMDE2MDVjLCAweDNkYjdmZmZjfSwKLQl7MHgwMDAxNjA2MCwgMHhmZmZmZmZmY30sCi0JezB4MDAwMTYwNjQsIDB4MDAwZjAyNzh9LAotCXsweDAwMDE2MDZjLCAweDZkYjYwMDAwfSwKLQl7MHgwMDAxNjA4MCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMTYwODQsIDB4MGU0ODA0OGN9LAotCXsweDAwMDE2MDg4LCAweDU0MjE0NTE0fSwKLQl7MHgwMDAxNjA4YywgMHgxMTlmNDgxZX0sCi0JezB4MDAwMTYwOTAsIDB4MjQ5MjY0OTB9LAotCXsweDAwMDE2MDk4LCAweGQyODg4ODg4fSwKLQl7MHgwMDAxNjBhMCwgMHgwYTEwOGZmZX0sCi0JezB4MDAwMTYwYTQsIDB4ODEyZmMzNzB9LAotCXsweDAwMDE2MGE4LCAweDQyM2M4MDAwfSwKLQl7MHgwMDAxNjBiNCwgMHg5MjQ4MDA4MH0sCi0JezB4MDAwMTYwYzAsIDB4MDBhZGI2ZDB9LAotCXsweDAwMDE2MGM0LCAweDZkYjZkYjYwfSwKLQl7MHgwMDAxNjBjOCwgMHg2ZGI2ZGI2Y30sCi0JezB4MDAwMTYwY2MsIDB4MDFlNmMwMDB9LAotCXsweDAwMDE2MTAwLCAweDNmZmZiZTAxfSwKLQl7MHgwMDAxNjEwNCwgMHhmZmY4MDAwMH0sCi0JezB4MDAwMTYxMDgsIDB4MDAwODAwMTB9LAotCXsweDAwMDE2MTQ0LCAweDAyMDg0MDgwfSwKLQl7MHgwMDAxNjE0OCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMTYyODAsIDB4MDU4YTAwMDF9LAotCXsweDAwMDE2Mjg0LCAweDNkODQwMjA4fSwKLQl7MHgwMDAxNjI4OCwgMHgwNWEyMDQwOH0sCi0JezB4MDAwMTYyOGMsIDB4MDAwMzhjMDd9LAotCXsweDAwMDE2MjkwLCAweDQwMDAwMDA0fSwKLQl7MHgwMDAxNjI5NCwgMHg0NThhYTE0Zn0sCi0JezB4MDAwMTYzODAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2Mzg0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNjM4OCwgMHgwMDgwMDcwMH0sCi0JezB4MDAwMTYzOGMsIDB4MDA4MDA3MDB9LAotCXsweDAwMDE2MzkwLCAweDAwODAwNzAwfSwKLQl7MHgwMDAxNjM5NCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMTYzOTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2MzljLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNjNhMCwgMHgwMDAwMDAwMX0sCi0JezB4MDAwMTYzYTQsIDB4MDAwMDAwMDF9LAotCXsweDAwMDE2M2E4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNjNhYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMTYzYjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2M2I0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNjNiOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMTYzYmMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2M2MwLCAweDAwMDAwMGEwfSwKLQl7MHgwMDAxNjNjNCwgMHgwMDBjMDAwMH0sCi0JezB4MDAwMTYzYzgsIDB4MTQwMjE0MDJ9LAotCXsweDAwMDE2M2NjLCAweDAwMDAxNDAyfSwKLQl7MHgwMDAxNjNkMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMTYzZDQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2NDAwLCAweDM2ZGI2ZGI2fSwKLQl7MHgwMDAxNjQwNCwgMHg2ZGI2ZGI0MH0sCi0JezB4MDAwMTY0MDgsIDB4NzNmMDAwMDB9LAotCXsweDAwMDE2NDBjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNjQ0MCwgMHg3ZjgwZmZmOH0sCi0JezB4MDAwMTY0NGMsIDB4NzZkMDA1YjV9LAotCXsweDAwMDE2NDUwLCAweDU1NmNmMDMxfSwKLQl7MHgwMDAxNjQ1NCwgMHgxMzQ0OTQ0MH0sCi0JezB4MDAwMTY0NTgsIDB4MGM1MWM5MmN9LAotCXsweDAwMDE2NDVjLCAweDNkYjdmZmZjfSwKLQl7MHgwMDAxNjQ2MCwgMHhmZmZmZmZmY30sCi0JezB4MDAwMTY0NjQsIDB4MDAwZjAyNzh9LAotCXsweDAwMDE2NDZjLCAweDZkYjYwMDAwfSwKLQl7MHgwMDAxNjUwMCwgMHgzZmZmYmUwMX0sCi0JezB4MDAwMTY1MDQsIDB4ZmZmODAwMDB9LAotCXsweDAwMDE2NTA4LCAweDAwMDgwMDEwfSwKLQl7MHgwMDAxNjU0NCwgMHgwMjA4NDA4MH0sCi0JezB4MDAwMTY1NDgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2NzgwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNjc4NCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMTY3ODgsIDB4MDA4MDA3MDB9LAotCXsweDAwMDE2NzhjLCAweDAwODAwNzAwfSwKLQl7MHgwMDAxNjc5MCwgMHgwMDgwMDcwMH0sCi0JezB4MDAwMTY3OTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2Nzk4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNjc5YywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMTY3YTAsIDB4MDAwMDAwMDF9LAotCXsweDAwMDE2N2E0LCAweDAwMDAwMDAxfSwKLQl7MHgwMDAxNjdhOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMTY3YWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2N2IwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNjdiNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMTY3YjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2N2JjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNjdjMCwgMHgwMDAwMDBhMH0sCi0JezB4MDAwMTY3YzQsIDB4MDAwYzAwMDB9LAotCXsweDAwMDE2N2M4LCAweDE0MDIxNDAyfSwKLQl7MHgwMDAxNjdjYywgMHgwMDAwMTQwMn0sCi0JezB4MDAwMTY3ZDAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2N2Q0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNjgwMCwgMHgzNmRiNmRiNn0sCi0JezB4MDAwMTY4MDQsIDB4NmRiNmRiNDB9LAotCXsweDAwMDE2ODA4LCAweDczZjAwMDAwfSwKLQl7MHgwMDAxNjgwYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMTY4NDAsIDB4N2Y4MGZmZjh9LAotCXsweDAwMDE2ODRjLCAweDc2ZDAwNWI1fSwKLQl7MHgwMDAxNjg1MCwgMHg1NTZjZjAzMX0sCi0JezB4MDAwMTY4NTQsIDB4MTM0NDk0NDB9LAotCXsweDAwMDE2ODU4LCAweDBjNTFjOTJjfSwKLQl7MHgwMDAxNjg1YywgMHgzZGI3ZmZmY30sCi0JezB4MDAwMTY4NjAsIDB4ZmZmZmZmZmN9LAotCXsweDAwMDE2ODY0LCAweDAwMGYwMjc4fSwKLQl7MHgwMDAxNjg2YywgMHg2ZGI2MDAwMH0sCi0JezB4MDAwMTY5MDAsIDB4M2ZmZmJlMDF9LAotCXsweDAwMDE2OTA0LCAweGZmZjgwMDAwfSwKLQl7MHgwMDAxNjkwOCwgMHgwMDA4MDAxMH0sCi0JezB4MDAwMTY5NDQsIDB4MDIwODQwODB9LAotCXsweDAwMDE2OTQ4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNmI4MCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMTZiODQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2Yjg4LCAweDAwODAwNzAwfSwKLQl7MHgwMDAxNmI4YywgMHgwMDgwMDcwMH0sCi0JezB4MDAwMTZiOTAsIDB4MDA4MDA3MDB9LAotCXsweDAwMDE2Yjk0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNmI5OCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMTZiOWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2YmEwLCAweDAwMDAwMDAxfSwKLQl7MHgwMDAxNmJhNCwgMHgwMDAwMDAwMX0sCi0JezB4MDAwMTZiYTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2YmFjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNmJiMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMTZiYjQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2YmI4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNmJiYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMTZiYzAsIDB4MDAwMDAwYTB9LAotCXsweDAwMDE2YmM0LCAweDAwMGMwMDAwfSwKLQl7MHgwMDAxNmJjOCwgMHgxNDAyMTQwMn0sCi0JezB4MDAwMTZiY2MsIDB4MDAwMDE0MDJ9LAotCXsweDAwMDE2YmQwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNmJkNCwgMHgwMDAwMDAwMH0sCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIGFyOTMwMENvbW1vbl9yeF9nYWluX3RhYmxlX21lcmxpbl8ycDBbXVsyXSA9IHsKLQkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCi0JezB4MDAwMGEwMDAsIDB4MDIwMDAxMDF9LAotCXsweDAwMDBhMDA0LCAweDAyMDAwMTAyfSwKLQl7MHgwMDAwYTAwOCwgMHgwMjAwMDEwM30sCi0JezB4MDAwMGEwMGMsIDB4MDIwMDAxMDR9LAotCXsweDAwMDBhMDEwLCAweDAyMDAwMjAwfSwKLQl7MHgwMDAwYTAxNCwgMHgwMjAwMDIwMX0sCi0JezB4MDAwMGEwMTgsIDB4MDIwMDAyMDJ9LAotCXsweDAwMDBhMDFjLCAweDAyMDAwMjAzfSwKLQl7MHgwMDAwYTAyMCwgMHgwMjAwMDIwNH0sCi0JezB4MDAwMGEwMjQsIDB4MDIwMDAyMDV9LAotCXsweDAwMDBhMDI4LCAweDAyMDAwMjA4fSwKLQl7MHgwMDAwYTAyYywgMHgwMjAwMDMwMn0sCi0JezB4MDAwMGEwMzAsIDB4MDIwMDAzMDN9LAotCXsweDAwMDBhMDM0LCAweDAyMDAwMzA0fSwKLQl7MHgwMDAwYTAzOCwgMHgwMjAwMDQwMH0sCi0JezB4MDAwMGEwM2MsIDB4MDIwMTAzMDB9LAotCXsweDAwMDBhMDQwLCAweDAyMDEwMzAxfSwKLQl7MHgwMDAwYTA0NCwgMHgwMjAxMDMwMn0sCi0JezB4MDAwMGEwNDgsIDB4MDIwMDA1MDB9LAotCXsweDAwMDBhMDRjLCAweDAyMDEwNDAwfSwKLQl7MHgwMDAwYTA1MCwgMHgwMjAyMDMwMH0sCi0JezB4MDAwMGEwNTQsIDB4MDIwMjAzMDF9LAotCXsweDAwMDBhMDU4LCAweDAyMDIwMzAyfSwKLQl7MHgwMDAwYTA1YywgMHgwMjAyMDMwM30sCi0JezB4MDAwMGEwNjAsIDB4MDIwMjA0MDB9LAotCXsweDAwMDBhMDY0LCAweDAyMDMwMzAwfSwKLQl7MHgwMDAwYTA2OCwgMHgwMjAzMDMwMX0sCi0JezB4MDAwMGEwNmMsIDB4MDIwMzAzMDJ9LAotCXsweDAwMDBhMDcwLCAweDAyMDMwMzAzfSwKLQl7MHgwMDAwYTA3NCwgMHgwMjAzMDQwMH0sCi0JezB4MDAwMGEwNzgsIDB4MDIwNDAzMDB9LAotCXsweDAwMDBhMDdjLCAweDAyMDQwMzAxfSwKLQl7MHgwMDAwYTA4MCwgMHgwMjA0MDMwMn0sCi0JezB4MDAwMGEwODQsIDB4MDIwNDAzMDN9LAotCXsweDAwMDBhMDg4LCAweDAyMDMwNTAwfSwKLQl7MHgwMDAwYTA4YywgMHgwMjA0MDQwMH0sCi0JezB4MDAwMGEwOTAsIDB4MDIwNTAyMDN9LAotCXsweDAwMDBhMDk0LCAweDAyMDUwMjA0fSwKLQl7MHgwMDAwYTA5OCwgMHgwMjA1MDIwNX0sCi0JezB4MDAwMGEwOWMsIDB4MDIwNDA1MDB9LAotCXsweDAwMDBhMGEwLCAweDAyMDUwMzAxfSwKLQl7MHgwMDAwYTBhNCwgMHgwMjA1MDMwMn0sCi0JezB4MDAwMGEwYTgsIDB4MDIwNTAzMDN9LAotCXsweDAwMDBhMGFjLCAweDAyMDUwNDAwfSwKLQl7MHgwMDAwYTBiMCwgMHgwMjA1MDQwMX0sCi0JezB4MDAwMGEwYjQsIDB4MDIwNTA0MDJ9LAotCXsweDAwMDBhMGI4LCAweDAyMDUwNDAzfSwKLQl7MHgwMDAwYTBiYywgMHgwMjA1MDUwMH0sCi0JezB4MDAwMGEwYzAsIDB4MDIwNTA1MDF9LAotCXsweDAwMDBhMGM0LCAweDAyMDUwNTAyfSwKLQl7MHgwMDAwYTBjOCwgMHgwMjA1MDUwM30sCi0JezB4MDAwMGEwY2MsIDB4MDIwNTA1MDR9LAotCXsweDAwMDBhMGQwLCAweDAyMDUwNjAwfSwKLQl7MHgwMDAwYTBkNCwgMHgwMjA1MDYwMX0sCi0JezB4MDAwMGEwZDgsIDB4MDIwNTA2MDJ9LAotCXsweDAwMDBhMGRjLCAweDAyMDUwNjAzfSwKLQl7MHgwMDAwYTBlMCwgMHgwMjA1MDYwNH0sCi0JezB4MDAwMGEwZTQsIDB4MDIwNTA3MDB9LAotCXsweDAwMDBhMGU4LCAweDAyMDUwNzAxfSwKLQl7MHgwMDAwYTBlYywgMHgwMjA1MDcwMn0sCi0JezB4MDAwMGEwZjAsIDB4MDIwNTA3MDN9LAotCXsweDAwMDBhMGY0LCAweDAyMDUwNzA0fSwKLQl7MHgwMDAwYTBmOCwgMHgwMjA1MDcwNX0sCi0JezB4MDAwMGEwZmMsIDB4MDIwNTA3MDh9LAotCXsweDAwMDBhMTAwLCAweDAyMDUwNzA5fSwKLQl7MHgwMDAwYTEwNCwgMHgwMjA1MDcwYX0sCi0JezB4MDAwMGExMDgsIDB4MDIwNTA3MGJ9LAotCXsweDAwMDBhMTBjLCAweDAyMDUwNzBjfSwKLQl7MHgwMDAwYTExMCwgMHgwMjA1MDcwZH0sCi0JezB4MDAwMGExMTQsIDB4MDIwNTA3MTB9LAotCXsweDAwMDBhMTE4LCAweDAyMDUwNzExfSwKLQl7MHgwMDAwYTExYywgMHgwMjA1MDcxMn0sCi0JezB4MDAwMGExMjAsIDB4MDIwNTA3MTN9LAotCXsweDAwMDBhMTI0LCAweDAyMDUwNzE0fSwKLQl7MHgwMDAwYTEyOCwgMHgwMjA1MDcxNX0sCi0JezB4MDAwMGExMmMsIDB4MDIwNTA3MzB9LAotCXsweDAwMDBhMTMwLCAweDAyMDUwNzMxfSwKLQl7MHgwMDAwYTEzNCwgMHgwMjA1MDczMn0sCi0JezB4MDAwMGExMzgsIDB4MDIwNTA3MzN9LAotCXsweDAwMDBhMTNjLCAweDAyMDUwNzM0fSwKLQl7MHgwMDAwYTE0MCwgMHgwMjA1MDczNX0sCi0JezB4MDAwMGExNDQsIDB4MDIwNTA3NTB9LAotCXsweDAwMDBhMTQ4LCAweDAyMDUwNzUxfSwKLQl7MHgwMDAwYTE0YywgMHgwMjA1MDc1Mn0sCi0JezB4MDAwMGExNTAsIDB4MDIwNTA3NTN9LAotCXsweDAwMDBhMTU0LCAweDAyMDUwNzU0fSwKLQl7MHgwMDAwYTE1OCwgMHgwMjA1MDc1NX0sCi0JezB4MDAwMGExNWMsIDB4MDIwNTA3NzB9LAotCXsweDAwMDBhMTYwLCAweDAyMDUwNzcxfSwKLQl7MHgwMDAwYTE2NCwgMHgwMjA1MDc3Mn0sCi0JezB4MDAwMGExNjgsIDB4MDIwNTA3NzN9LAotCXsweDAwMDBhMTZjLCAweDAyMDUwNzc0fSwKLQl7MHgwMDAwYTE3MCwgMHgwMjA1MDc3NX0sCi0JezB4MDAwMGExNzQsIDB4MDAwMDA3NzZ9LAotCXsweDAwMDBhMTc4LCAweDAwMDAwNzc2fSwKLQl7MHgwMDAwYTE3YywgMHgwMDAwMDc3Nn0sCi0JezB4MDAwMGExODAsIDB4MDAwMDA3NzZ9LAotCXsweDAwMDBhMTg0LCAweDAwMDAwNzc2fSwKLQl7MHgwMDAwYTE4OCwgMHgwMDAwMDc3Nn0sCi0JezB4MDAwMGExOGMsIDB4MDAwMDA3NzZ9LAotCXsweDAwMDBhMTkwLCAweDAwMDAwNzc2fSwKLQl7MHgwMDAwYTE5NCwgMHgwMDAwMDc3Nn0sCi0JezB4MDAwMGExOTgsIDB4MDAwMDA3NzZ9LAotCXsweDAwMDBhMTljLCAweDAwMDAwNzc2fSwKLQl7MHgwMDAwYTFhMCwgMHgwMDAwMDc3Nn0sCi0JezB4MDAwMGExYTQsIDB4MDAwMDA3NzZ9LAotCXsweDAwMDBhMWE4LCAweDAwMDAwNzc2fSwKLQl7MHgwMDAwYTFhYywgMHgwMDAwMDc3Nn0sCi0JezB4MDAwMGExYjAsIDB4MDAwMDA3NzZ9LAotCXsweDAwMDBhMWI0LCAweDAwMDAwNzc2fSwKLQl7MHgwMDAwYTFiOCwgMHgwMDAwMDc3Nn0sCi0JezB4MDAwMGExYmMsIDB4MDAwMDA3NzZ9LAotCXsweDAwMDBhMWMwLCAweDAwMDAwNzc2fSwKLQl7MHgwMDAwYTFjNCwgMHgwMDAwMDc3Nn0sCi0JezB4MDAwMGExYzgsIDB4MDAwMDA3NzZ9LAotCXsweDAwMDBhMWNjLCAweDAwMDAwNzc2fSwKLQl7MHgwMDAwYTFkMCwgMHgwMDAwMDc3Nn0sCi0JezB4MDAwMGExZDQsIDB4MDAwMDA3NzZ9LAotCXsweDAwMDBhMWQ4LCAweDAwMDAwNzc2fSwKLQl7MHgwMDAwYTFkYywgMHgwMDAwMDc3Nn0sCi0JezB4MDAwMGExZTAsIDB4MDAwMDA3NzZ9LAotCXsweDAwMDBhMWU0LCAweDAwMDAwNzc2fSwKLQl7MHgwMDAwYTFlOCwgMHgwMDAwMDc3Nn0sCi0JezB4MDAwMGExZWMsIDB4MDAwMDA3NzZ9LAotCXsweDAwMDBhMWYwLCAweDAwMDAwNzc2fSwKLQl7MHgwMDAwYTFmNCwgMHgwMDAwMDc3Nn0sCi0JezB4MDAwMGExZjgsIDB4MDAwMDA3NzZ9LAotCXsweDAwMDBhMWZjLCAweDAwMDAwNzc2fSwKLQl7MHgwMDAwYjAwMCwgMHgwMjAwMDEwMX0sCi0JezB4MDAwMGIwMDQsIDB4MDIwMDAxMDJ9LAotCXsweDAwMDBiMDA4LCAweDAyMDAwMTAzfSwKLQl7MHgwMDAwYjAwYywgMHgwMjAwMDEwNH0sCi0JezB4MDAwMGIwMTAsIDB4MDIwMDAyMDB9LAotCXsweDAwMDBiMDE0LCAweDAyMDAwMjAxfSwKLQl7MHgwMDAwYjAxOCwgMHgwMjAwMDIwMn0sCi0JezB4MDAwMGIwMWMsIDB4MDIwMDAyMDN9LAotCXsweDAwMDBiMDIwLCAweDAyMDAwMjA0fSwKLQl7MHgwMDAwYjAyNCwgMHgwMjAwMDIwNX0sCi0JezB4MDAwMGIwMjgsIDB4MDIwMDAyMDh9LAotCXsweDAwMDBiMDJjLCAweDAyMDAwMzAyfSwKLQl7MHgwMDAwYjAzMCwgMHgwMjAwMDMwM30sCi0JezB4MDAwMGIwMzQsIDB4MDIwMDAzMDR9LAotCXsweDAwMDBiMDM4LCAweDAyMDAwNDAwfSwKLQl7MHgwMDAwYjAzYywgMHgwMjAxMDMwMH0sCi0JezB4MDAwMGIwNDAsIDB4MDIwMTAzMDF9LAotCXsweDAwMDBiMDQ0LCAweDAyMDEwMzAyfSwKLQl7MHgwMDAwYjA0OCwgMHgwMjAwMDUwMH0sCi0JezB4MDAwMGIwNGMsIDB4MDIwMTA0MDB9LAotCXsweDAwMDBiMDUwLCAweDAyMDIwMzAwfSwKLQl7MHgwMDAwYjA1NCwgMHgwMjAyMDMwMX0sCi0JezB4MDAwMGIwNTgsIDB4MDIwMjAzMDJ9LAotCXsweDAwMDBiMDVjLCAweDAyMDIwMzAzfSwKLQl7MHgwMDAwYjA2MCwgMHgwMjAyMDQwMH0sCi0JezB4MDAwMGIwNjQsIDB4MDIwMzAzMDB9LAotCXsweDAwMDBiMDY4LCAweDAyMDMwMzAxfSwKLQl7MHgwMDAwYjA2YywgMHgwMjAzMDMwMn0sCi0JezB4MDAwMGIwNzAsIDB4MDIwMzAzMDN9LAotCXsweDAwMDBiMDc0LCAweDAyMDMwNDAwfSwKLQl7MHgwMDAwYjA3OCwgMHgwMjA0MDMwMH0sCi0JezB4MDAwMGIwN2MsIDB4MDIwNDAzMDF9LAotCXsweDAwMDBiMDgwLCAweDAyMDQwMzAyfSwKLQl7MHgwMDAwYjA4NCwgMHgwMjA0MDMwM30sCi0JezB4MDAwMGIwODgsIDB4MDIwMzA1MDB9LAotCXsweDAwMDBiMDhjLCAweDAyMDQwNDAwfSwKLQl7MHgwMDAwYjA5MCwgMHgwMjA1MDIwM30sCi0JezB4MDAwMGIwOTQsIDB4MDIwNTAyMDR9LAotCXsweDAwMDBiMDk4LCAweDAyMDUwMjA1fSwKLQl7MHgwMDAwYjA5YywgMHgwMjA0MDUwMH0sCi0JezB4MDAwMGIwYTAsIDB4MDIwNTAzMDF9LAotCXsweDAwMDBiMGE0LCAweDAyMDUwMzAyfSwKLQl7MHgwMDAwYjBhOCwgMHgwMjA1MDMwM30sCi0JezB4MDAwMGIwYWMsIDB4MDIwNTA0MDB9LAotCXsweDAwMDBiMGIwLCAweDAyMDUwNDAxfSwKLQl7MHgwMDAwYjBiNCwgMHgwMjA1MDQwMn0sCi0JezB4MDAwMGIwYjgsIDB4MDIwNTA0MDN9LAotCXsweDAwMDBiMGJjLCAweDAyMDUwNTAwfSwKLQl7MHgwMDAwYjBjMCwgMHgwMjA1MDUwMX0sCi0JezB4MDAwMGIwYzQsIDB4MDIwNTA1MDJ9LAotCXsweDAwMDBiMGM4LCAweDAyMDUwNTAzfSwKLQl7MHgwMDAwYjBjYywgMHgwMjA1MDUwNH0sCi0JezB4MDAwMGIwZDAsIDB4MDIwNTA2MDB9LAotCXsweDAwMDBiMGQ0LCAweDAyMDUwNjAxfSwKLQl7MHgwMDAwYjBkOCwgMHgwMjA1MDYwMn0sCi0JezB4MDAwMGIwZGMsIDB4MDIwNTA2MDN9LAotCXsweDAwMDBiMGUwLCAweDAyMDUwNjA0fSwKLQl7MHgwMDAwYjBlNCwgMHgwMjA1MDcwMH0sCi0JezB4MDAwMGIwZTgsIDB4MDIwNTA3MDF9LAotCXsweDAwMDBiMGVjLCAweDAyMDUwNzAyfSwKLQl7MHgwMDAwYjBmMCwgMHgwMjA1MDcwM30sCi0JezB4MDAwMGIwZjQsIDB4MDIwNTA3MDR9LAotCXsweDAwMDBiMGY4LCAweDAyMDUwNzA1fSwKLQl7MHgwMDAwYjBmYywgMHgwMjA1MDcwOH0sCi0JezB4MDAwMGIxMDAsIDB4MDIwNTA3MDl9LAotCXsweDAwMDBiMTA0LCAweDAyMDUwNzBhfSwKLQl7MHgwMDAwYjEwOCwgMHgwMjA1MDcwYn0sCi0JezB4MDAwMGIxMGMsIDB4MDIwNTA3MGN9LAotCXsweDAwMDBiMTEwLCAweDAyMDUwNzBkfSwKLQl7MHgwMDAwYjExNCwgMHgwMjA1MDcxMH0sCi0JezB4MDAwMGIxMTgsIDB4MDIwNTA3MTF9LAotCXsweDAwMDBiMTFjLCAweDAyMDUwNzEyfSwKLQl7MHgwMDAwYjEyMCwgMHgwMjA1MDcxM30sCi0JezB4MDAwMGIxMjQsIDB4MDIwNTA3MTR9LAotCXsweDAwMDBiMTI4LCAweDAyMDUwNzE1fSwKLQl7MHgwMDAwYjEyYywgMHgwMjA1MDczMH0sCi0JezB4MDAwMGIxMzAsIDB4MDIwNTA3MzF9LAotCXsweDAwMDBiMTM0LCAweDAyMDUwNzMyfSwKLQl7MHgwMDAwYjEzOCwgMHgwMjA1MDczM30sCi0JezB4MDAwMGIxM2MsIDB4MDIwNTA3MzR9LAotCXsweDAwMDBiMTQwLCAweDAyMDUwNzM1fSwKLQl7MHgwMDAwYjE0NCwgMHgwMjA1MDc1MH0sCi0JezB4MDAwMGIxNDgsIDB4MDIwNTA3NTF9LAotCXsweDAwMDBiMTRjLCAweDAyMDUwNzUyfSwKLQl7MHgwMDAwYjE1MCwgMHgwMjA1MDc1M30sCi0JezB4MDAwMGIxNTQsIDB4MDIwNTA3NTR9LAotCXsweDAwMDBiMTU4LCAweDAyMDUwNzU1fSwKLQl7MHgwMDAwYjE1YywgMHgwMjA1MDc3MH0sCi0JezB4MDAwMGIxNjAsIDB4MDIwNTA3NzF9LAotCXsweDAwMDBiMTY0LCAweDAyMDUwNzcyfSwKLQl7MHgwMDAwYjE2OCwgMHgwMjA1MDc3M30sCi0JezB4MDAwMGIxNmMsIDB4MDIwNTA3NzR9LAotCXsweDAwMDBiMTcwLCAweDAyMDUwNzc1fSwKLQl7MHgwMDAwYjE3NCwgMHgwMDAwMDc3Nn0sCi0JezB4MDAwMGIxNzgsIDB4MDAwMDA3NzZ9LAotCXsweDAwMDBiMTdjLCAweDAwMDAwNzc2fSwKLQl7MHgwMDAwYjE4MCwgMHgwMDAwMDc3Nn0sCi0JezB4MDAwMGIxODQsIDB4MDAwMDA3NzZ9LAotCXsweDAwMDBiMTg4LCAweDAwMDAwNzc2fSwKLQl7MHgwMDAwYjE4YywgMHgwMDAwMDc3Nn0sCi0JezB4MDAwMGIxOTAsIDB4MDAwMDA3NzZ9LAotCXsweDAwMDBiMTk0LCAweDAwMDAwNzc2fSwKLQl7MHgwMDAwYjE5OCwgMHgwMDAwMDc3Nn0sCi0JezB4MDAwMGIxOWMsIDB4MDAwMDA3NzZ9LAotCXsweDAwMDBiMWEwLCAweDAwMDAwNzc2fSwKLQl7MHgwMDAwYjFhNCwgMHgwMDAwMDc3Nn0sCi0JezB4MDAwMGIxYTgsIDB4MDAwMDA3NzZ9LAotCXsweDAwMDBiMWFjLCAweDAwMDAwNzc2fSwKLQl7MHgwMDAwYjFiMCwgMHgwMDAwMDc3Nn0sCi0JezB4MDAwMGIxYjQsIDB4MDAwMDA3NzZ9LAotCXsweDAwMDBiMWI4LCAweDAwMDAwNzc2fSwKLQl7MHgwMDAwYjFiYywgMHgwMDAwMDc3Nn0sCi0JezB4MDAwMGIxYzAsIDB4MDAwMDA3NzZ9LAotCXsweDAwMDBiMWM0LCAweDAwMDAwNzc2fSwKLQl7MHgwMDAwYjFjOCwgMHgwMDAwMDc3Nn0sCi0JezB4MDAwMGIxY2MsIDB4MDAwMDA3NzZ9LAotCXsweDAwMDBiMWQwLCAweDAwMDAwNzc2fSwKLQl7MHgwMDAwYjFkNCwgMHgwMDAwMDc3Nn0sCi0JezB4MDAwMGIxZDgsIDB4MDAwMDA3NzZ9LAotCXsweDAwMDBiMWRjLCAweDAwMDAwNzc2fSwKLQl7MHgwMDAwYjFlMCwgMHgwMDAwMDc3Nn0sCi0JezB4MDAwMGIxZTQsIDB4MDAwMDA3NzZ9LAotCXsweDAwMDBiMWU4LCAweDAwMDAwNzc2fSwKLQl7MHgwMDAwYjFlYywgMHgwMDAwMDc3Nn0sCi0JezB4MDAwMGIxZjAsIDB4MDAwMDA3NzZ9LAotCXsweDAwMDBiMWY0LCAweDAwMDAwNzc2fSwKLQl7MHgwMDAwYjFmOCwgMHgwMDAwMDc3Nn0sCi0JezB4MDAwMGIxZmMsIDB4MDAwMDA3NzZ9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBhcjkzMDBfMnAwX21hY19wb3N0YW1ibGVbXVs1XSA9IHsKLQkvKiBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAgMkdfSFQyMCAgICovCi0JezB4MDAwMDEwMzAsIDB4MDAwMDAyMzAsIDB4MDAwMDA0NjAsIDB4MDAwMDAyYzAsIDB4MDAwMDAxNjB9LAotCXsweDAwMDAxMDcwLCAweDAwMDAwMTY4LCAweDAwMDAwMmQwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjfSwKLQl7MHgwMDAwMTBiMCwgMHgwMDAwMGU2MCwgMHgwMDAwMWNjMCwgMHgwMDAwN2M3MCwgMHgwMDAwM2UzOH0sCi0JezB4MDAwMDgwMTQsIDB4MDNlODAzZTgsIDB4MDdkMDA3ZDAsIDB4MTA4MDE2MDAsIDB4MDg0MDBiMDB9LAotCXsweDAwMDA4MDFjLCAweDEyOGQ4MDI3LCAweDEyOGQ4MDRmLCAweDEyZTAwMDU3LCAweDEyZTAwMDJifSwKLQl7MHgwMDAwODEyMCwgMHgwOGYwNDgwMCwgMHgwOGYwNDgwMCwgMHgwOGYwNDgxMCwgMHgwOGYwNDgxMH0sCi0JezB4MDAwMDgxZDAsIDB4MDAwMDMyMTAsIDB4MDAwMDMyMTAsIDB4MDAwMDMyMGEsIDB4MDAwMDMyMGF9LAotCXsweDAwMDA4MzE4LCAweDAwMDAzZTgwLCAweDAwMDA3ZDAwLCAweDAwMDA2ODgwLCAweDAwMDAzNDQwfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5MzAwXzJwMF9zb2NfcG9zdGFtYmxlW11bNV0gPSB7Ci0JLyogQWRkciAgICAgIDVHX0hUMjAgICAgIDVHX0hUNDAgICAgIDJHX0hUNDAgICAgIDJHX0hUMjAgICAqLwotCXsweDAwMDA3MDEwLCAweDAwMDAwMDIzLCAweDAwMDAwMDIzLCAweDAwMDAwMDIzLCAweDAwMDAwMDIzfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5MjAwX21lcmxpbl8ycDBfcmFkaW9fY29yZVtdWzJdID0gewotCS8qIEFkZHIgICAgICBhbGxtb2RlcyAgKi8KLQl7MHgwMDAwNzgwMCwgMHgwMDA0MDAwMH0sCi0JezB4MDAwMDc4MDQsIDB4ZGIwMDUwMTJ9LAotCXsweDAwMDA3ODA4LCAweDA0OTI0OTE0fSwKLQl7MHgwMDAwNzgwYywgMHgyMTA4NDIxMH0sCi0JezB4MDAwMDc4MTAsIDB4NmQ4MDEzMDB9LAotCXsweDAwMDA3ODE0LCAweDAwMTliZWZmfSwKLQl7MHgwMDAwNzgxOCwgMHgwN2U0MTAwMH0sCi0JezB4MDAwMDc4MWMsIDB4MDAzOTIwMDB9LAotCXsweDAwMDA3ODIwLCAweDkyNTkyNDgwfSwKLQl7MHgwMDAwNzgyNCwgMHgwMDA0MDAwMH0sCi0JezB4MDAwMDc4MjgsIDB4ZGIwMDUwMTJ9LAotCXsweDAwMDA3ODJjLCAweDA0OTI0OTE0fSwKLQl7MHgwMDAwNzgzMCwgMHgyMTA4NDIxMH0sCi0JezB4MDAwMDc4MzQsIDB4NmQ4MDEzMDB9LAotCXsweDAwMDA3ODM4LCAweDAwMTliZWZmfSwKLQl7MHgwMDAwNzgzYywgMHgwN2U0MDAwMH0sCi0JezB4MDAwMDc4NDAsIDB4MDAzOTIwMDB9LAotCXsweDAwMDA3ODQ0LCAweDkyNTkyNDgwfSwKLQl7MHgwMDAwNzg0OCwgMHgwMDEwMDAwMH0sCi0JezB4MDAwMDc4NGMsIDB4NzczZjA1Njd9LAotCXsweDAwMDA3ODUwLCAweDU0MjE0NTE0fSwKLQl7MHgwMDAwNzg1NCwgMHgxMjAzNTgyOH0sCi0JezB4MDAwMDc4NTgsIDB4OTI1OTI2OTJ9LAotCXsweDAwMDA3ODVjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwNzg2MCwgMHg1NjQwMDAwMH0sCi0JezB4MDAwMDc4NjQsIDB4MGE4ZTM3MGV9LAotCXsweDAwMDA3ODY4LCAweGMwMTAyODUwfSwKLQl7MHgwMDAwNzg2YywgMHg4MTJkNDAwMH0sCi0JezB4MDAwMDc4NzAsIDB4ODA3ZWM0MDB9LAotCXsweDAwMDA3ODc0LCAweDAwMWI2ZGIwfSwKLQl7MHgwMDAwNzg3OCwgMHgwMDM3NmI2M30sCi0JezB4MDAwMDc4N2MsIDB4MDZkYjZkYjZ9LAotCXsweDAwMDA3ODgwLCAweDAwNmQ4MDAwfSwKLQl7MHgwMDAwNzg4NCwgMHhmZmVmZmZmZX0sCi0JezB4MDAwMDc4ODgsIDB4ZmZlZmZmZmV9LAotCXsweDAwMDA3ODhjLCAweDAwMDEwMDAwfSwKLQl7MHgwMDAwNzg5MCwgMHgwMjA2MGFlYn0sCi0JezB4MDAwMDc4OTQsIDB4NWExMDgwMDB9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBhcjkzMDBfMnAwX2Jhc2ViYW5kX3Bvc3RhbWJsZVtdWzVdID0gewotCS8qIEFkZHIgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICAgKi8KLQl7MHgwMDAwOTgxMCwgMHhkMDBhODAwNSwgMHhkMDBhODAwNSwgMHhkMDBhODAxMSwgMHhkMDBhODAxMX0sCi0JezB4MDAwMDk4MjAsIDB4MjA2YTAyMmUsIDB4MjA2YTAyMmUsIDB4MjA2YTAxMmUsIDB4MjA2YTAxMmV9LAotCXsweDAwMDA5ODI0LCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwfSwKLQl7MHgwMDAwOTgyOCwgMHgwNjkwMzA4MSwgMHgwNjkwMzA4MSwgMHgwNjkwMzg4MSwgMHgwNjkwMzg4MX0sCi0JezB4MDAwMDk4MmMsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDR9LAotCXsweDAwMDA5ODMwLCAweDAwMDAwNTljLCAweDAwMDAwNTljLCAweDAwMDAxMTljLCAweDAwMDAxMTljfSwKLQl7MHgwMDAwOWMwMCwgMHgwMDAwMDA0NCwgMHgwMDAwMDBjNCwgMHgwMDAwMDBjNCwgMHgwMDAwMDA0NH0sCi0JezB4MDAwMDllMDAsIDB4MDM3MjE2MWUsIDB4MDM3MjE2MWUsIDB4MDM3MjE2YTAsIDB4MDM3MjE2YTB9LAotCXsweDAwMDA5ZTA0LCAweDAwODAyMDIwLCAweDAwODAyMDIwLCAweDAwODAyMDIwLCAweDAwODAyMDIwfSwKLQl7MHgwMDAwOWUwYywgMHg2YzQwMDBlMiwgMHg2ZDQwMDBlMiwgMHg2ZDQwMDBlMiwgMHg2YzQwMDBlMn0sCi0JezB4MDAwMDllMTAsIDB4N2VjODhkMmUsIDB4N2VjODhkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmV9LAotCXsweDAwMDA5ZTE0LCAweDMxMzk1ZDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk1ZDVlfSwKLQl7MHgwMDAwOWUxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDllMWMsIDB4MDAwMWNmOWMsIDB4MDAwMWNmOWMsIDB4MDAwMjFmOWMsIDB4MDAwMjFmOWN9LAotCXsweDAwMDA5ZTIwLCAweDAwMDAwM2I1LCAweDAwMDAwM2I1LCAweDAwMDAwM2NlLCAweDAwMDAwM2NlfSwKLQl7MHgwMDAwOWUyYywgMHgwMDAwMDAxYywgMHgwMDAwMDAxYywgMHgwMDAwMDAyMSwgMHgwMDAwMDAyMX0sCi0JezB4MDAwMDllNDQsIDB4MDIzMjFlMjcsIDB4MDIzMjFlMjcsIDB4MDIyOTFlMjcsIDB4MDIyOTFlMjd9LAotCXsweDAwMDA5ZTQ4LCAweDUwMzAyMDFhLCAweDUwMzAyMDFhLCAweDUwMzAyMDEyLCAweDUwMzAyMDEyfSwKLQl7MHgwMDAwOWZjOCwgMHgwMDAzZjAwMCwgMHgwMDAzZjAwMCwgMHgwMDAxYTAwMCwgMHgwMDAxYTAwMH0sCi0JezB4MDAwMGEyMDQsIDB4MDAwMDM3YzAsIDB4MDAwMDM3YzQsIDB4MDAwMDM3YzQsIDB4MDAwMDM3YzB9LAotCXsweDAwMDBhMjA4LCAweDAwMDAwMTA0LCAweDAwMDAwMTA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0fSwKLQl7MHgwMDAwYTIzMCwgMHgwMDAwMDAwYSwgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNiwgMHgwMDAwMDAwYn0sCi0JezB4MDAwMGEyMzgsIDB4ZmZiODEwMTgsIDB4ZmZiODEwMTgsIDB4ZmZiODEwMTgsIDB4ZmZiODEwMTh9LAotCXsweDAwMDBhMjUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMjEwLCAweDAwMDAwMTA4fSwKLQl7MHgwMDAwYTI1NCwgMHgwMDAwMDdkMCwgMHgwMDAwMGZhMCwgMHgwMDAwMTEzMCwgMHgwMDAwMDg5OH0sCi0JezB4MDAwMGEyNTgsIDB4MDIwMjAwMDIsIDB4MDIwMjAwMDIsIDB4MDIwMjAwMDIsIDB4MDIwMjAwMDJ9LAotCXsweDAwMDBhMjVjLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlfSwKLQl7MHgwMDAwYTI2MCwgMHgwYTAyMTUwMSwgMHgwYTAyMTUwMSwgMHgzYTAyMTUwMSwgMHgzYTAyMTUwMX0sCi0JezB4MDAwMGEyNjQsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGV9LAotCXsweDAwMDBhMjgwLCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDBiLCAweDAwMDAwMDBifSwKLQl7MHgwMDAwYTI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDE1MCwgMHgwMDAwMDE1MH0sCi0JezB4MDAwMGEyODgsIDB4MDAwMDAxMTAsIDB4MDAwMDAxMTAsIDB4MDAwMDAxMTAsIDB4MDAwMDAxMTB9LAotCXsweDAwMDBhMjhjLCAweDAwMDIyMjIyLCAweDAwMDIyMjIyLCAweDAwMDIyMjIyLCAweDAwMDIyMjIyfSwKLQl7MHgwMDAwYTJjNCwgMHgwMDE1OGQxOCwgMHgwMDE1OGQxOCwgMHgwMDE1OGQxOCwgMHgwMDE1OGQxOH0sCi0JezB4MDAwMGEyZDAsIDB4MDAwNzE5ODEsIDB4MDAwNzE5ODEsIDB4MDAwNzE5ODEsIDB4MDAwNzE5ODJ9LAotCXsweDAwMDBhMmQ4LCAweGY5OTlhODNhLCAweGY5OTlhODNhLCAweGY5OTlhODNhLCAweGY5OTlhODNhfSwKLQl7MHgwMDAwYTM1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE4MzAsIDB4MDAwMDAxOWMsIDB4MDAwMDAxOWMsIDB4MDAwMDAxOWMsIDB4MDAwMDAxOWN9LAotCXsweDAwMDBhZTA0LCAweDAwODAwMDAwLCAweDAwODAwMDAwLCAweDAwODAwMDAwLCAweDAwODAwMDAwfSwKLQl7MHgwMDAwYWUxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGFlMWMsIDB4MDAwMDAxOWMsIDB4MDAwMDAxOWMsIDB4MDAwMDAxOWMsIDB4MDAwMDAxOWN9LAotCXsweDAwMDBhZTIwLCAweDAwMDAwMWI1LCAweDAwMDAwMWI1LCAweDAwMDAwMWNlLCAweDAwMDAwMWNlfSwKLQl7MHgwMDAwYjI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDE1MCwgMHgwMDAwMDE1MH0sCi0JezB4MDAwMGI4MzAsIDB4MDAwMDAxOWMsIDB4MDAwMDAxOWMsIDB4MDAwMDAxOWMsIDB4MDAwMDAxOWN9LAotCXsweDAwMDBiZTA0LCAweDAwODAwMDAwLCAweDAwODAwMDAwLCAweDAwODAwMDAwLCAweDAwODAwMDAwfSwKLQl7MHgwMDAwYmUxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGJlMWMsIDB4MDAwMDAxOWMsIDB4MDAwMDAxOWMsIDB4MDAwMDAxOWMsIDB4MDAwMDAxOWN9LAotCXsweDAwMDBiZTIwLCAweDAwMDAwMWI1LCAweDAwMDAwMWI1LCAweDAwMDAwMWNlLCAweDAwMDAwMWNlfSwKLQl7MHgwMDAwYzI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDE1MCwgMHgwMDAwMDE1MH0sCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIGFyOTMwMF8ycDBfYmFzZWJhbmRfY29yZVtdWzJdID0gewotCS8qIEFkZHIgICAgICBhbGxtb2RlcyAgKi8KLQl7MHgwMDAwOTgwMCwgMHhhZmU2OGUzMH0sCi0JezB4MDAwMDk4MDQsIDB4ZmQxNGUwMDB9LAotCXsweDAwMDA5ODA4LCAweDljMGE5ZjZifSwKLQl7MHgwMDAwOTgwYywgMHgwNDkwMDAwMH0sCi0JezB4MDAwMDk4MTQsIDB4OTI4MGMwMGF9LAotCXsweDAwMDA5ODE4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwOTgxYywgMHgwMDAyMDAyOH0sCi0JezB4MDAwMDk4MzQsIDB4NWYzY2EzZGV9LAotCXsweDAwMDA5ODM4LCAweDAxMDhlY2ZmfSwKLQl7MHgwMDAwOTgzYywgMHgxNDc1MDYwMH0sCi0JezB4MDAwMDk4ODAsIDB4MjAxZmZmMDB9LAotCXsweDAwMDA5ODg0LCAweDAwMDAxMDQyfSwKLQl7MHgwMDAwOThhNCwgMHgwMDIwMDQwMH0sCi0JezB4MDAwMDk4YjAsIDB4NTI0NDBiYmV9LAotCXsweDAwMDA5OGQwLCAweDAwNGI2YThlfSwKLQl7MHgwMDAwOThkNCwgMHgwMDAwMDgyMH0sCi0JezB4MDAwMDk4ZGMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA5OGYwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwOThmNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDljMDQsIDB4ZmY1NWZmNTV9LAotCXsweDAwMDA5YzA4LCAweDAzMjBmZjU1fSwKLQl7MHgwMDAwOWMwYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDljMTAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA5YzE0LCAweDAwMDQ2Mzg0fSwKLQl7MHgwMDAwOWMxOCwgMHgwNWI2YjQ0MH0sCi0JezB4MDAwMDljMWMsIDB4MDBiNmI0NDB9LAotCXsweDAwMDA5ZDAwLCAweGMwODBhMzMzfSwKLQl7MHgwMDAwOWQwNCwgMHg0MDIwNmMxMH0sCi0JezB4MDAwMDlkMDgsIDB4MDA5YzQwNjB9LAotCXsweDAwMDA5ZDBjLCAweDk4ODM4MDBhfSwKLQl7MHgwMDAwOWQxMCwgMHgwMTgzNDA2MX0sCi0JezB4MDAwMDlkMTQsIDB4MDBjMDA0MGJ9LAotCXsweDAwMDA5ZDE4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwOWUwOCwgMHgwMDM4MjMwY30sCi0JezB4MDAwMDllMjQsIDB4OTkwYmI1MTV9LAotCXsweDAwMDA5ZTI4LCAweDBjNmYwMDAwfSwKLQl7MHgwMDAwOWUzMCwgMHgwNjMzNmY3N30sCi0JezB4MDAwMDllMzQsIDB4NmFmNjUzMmZ9LAotCXsweDAwMDA5ZTM4LCAweDBjYzgwYzAwfSwKLQl7MHgwMDAwOWUzYywgMHhjZjk0NjIyMn0sCi0JezB4MDAwMDllNDAsIDB4MGQyNjE4MjB9LAotCXsweDAwMDA5ZTRjLCAweDAwMDAxMDA0fSwKLQl7MHgwMDAwOWU1MCwgMHgwMGZmMDNmMX0sCi0JezB4MDAwMDllNTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA5ZmMwLCAweDgwM2U0Nzg4fSwKLQl7MHgwMDAwOWZjNCwgMHgwMDAxZWZiNX0sCi0JezB4MDAwMDlmY2MsIDB4NDAwMDAwMTR9LAotCXsweDAwMDA5ZmQwLCAweDAxMTkzYjkzfSwKLQl7MHgwMDAwYTIwYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEyMjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMjI0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTIyOCwgMHgxMDAwMjMxMH0sCi0JezB4MDAwMGEyMmMsIDB4MDEwMzZhMWV9LAotCXsweDAwMDBhMjM0LCAweDEwMDAwZmZmfSwKLQl7MHgwMDAwYTIzYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEyNDQsIDB4MGMwMDAwMDB9LAotCXsweDAwMDBhMmEwLCAweDAwMDAwMDAxfSwKLQl7MHgwMDAwYTJjMCwgMHgwMDAwMDAwMX0sCi0JezB4MDAwMGEyYzgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMmNjLCAweDE4YzQzNDMzfSwKLQl7MHgwMDAwYTJkNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEyZGMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMmUwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTJlNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEyZTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMmVjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTJmMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEyZjQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMmY4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTM0NCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEzNGMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMzUwLCAweDAwMDBhMDAwfSwKLQl7MHgwMDAwYTM2NCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEzNzAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMzkwLCAweDAwMDAwMDAxfSwKLQl7MHgwMDAwYTM5NCwgMHgwMDAwMDQ0NH0sCi0JezB4MDAwMGEzOTgsIDB4MDAxZjBlMGZ9LAotCXsweDAwMDBhMzljLCAweDAwNzUzOTNmfSwKLQl7MHgwMDAwYTNhMCwgMHhiNzlmNjQyN30sCi0JezB4MDAwMGEzYTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhM2E4LCAweGFhYWFhYWFhfSwKLQl7MHgwMDAwYTNhYywgMHgzYzQ2NjQ3OH0sCi0JezB4MDAwMGEzYzAsIDB4MjAyMDIwMjB9LAotCXsweDAwMDBhM2M0LCAweDIyMjIyMjIwfSwKLQl7MHgwMDAwYTNjOCwgMHgyMDIwMDAyMH0sCi0JezB4MDAwMGEzY2MsIDB4MjAyMDIwMjB9LAotCXsweDAwMDBhM2QwLCAweDIwMjAyMDIwfSwKLQl7MHgwMDAwYTNkNCwgMHgyMDIwMjAyMH0sCi0JezB4MDAwMGEzZDgsIDB4MjAyMDIwMjB9LAotCXsweDAwMDBhM2RjLCAweDIwMjAyMDIwfSwKLQl7MHgwMDAwYTNlMCwgMHgyMDIwMjAyMH0sCi0JezB4MDAwMGEzZTQsIDB4MjAyMDIwMjB9LAotCXsweDAwMDBhM2U4LCAweDIwMjAyMDIwfSwKLQl7MHgwMDAwYTNlYywgMHgyMDIwMjAyMH0sCi0JezB4MDAwMGEzZjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhM2Y0LCAweDAwMDAwMjQ2fSwKLQl7MHgwMDAwYTNmOCwgMHgwY2RiZDM4MH0sCi0JezB4MDAwMGEzZmMsIDB4MDAwZjBmMDF9LAotCXsweDAwMDBhNDAwLCAweDhmYTkxZjAxfSwKLQl7MHgwMDAwYTQwNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE0MDgsIDB4MGU3OWU1YzZ9LAotCXsweDAwMDBhNDBjLCAweDAwODIwODIwfSwKLQl7MHgwMDAwYTQxNCwgMHgxY2U3MzljZX0sCi0JezB4MDAwMGE0MTgsIDB4MmQwMDFkY2V9LAotCXsweDAwMDBhNDFjLCAweDFjZTczOWNlfSwKLQl7MHgwMDAwYTQyMCwgMHgwMDAwMDFjZX0sCi0JezB4MDAwMGE0MjQsIDB4MWNlNzM5Y2V9LAotCXsweDAwMDBhNDI4LCAweDAwMDAwMWNlfSwKLQl7MHgwMDAwYTQyYywgMHgxY2U3MzljZX0sCi0JezB4MDAwMGE0MzAsIDB4MWNlNzM5Y2V9LAotCXsweDAwMDBhNDM0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTQzOCwgMHgwMDAwMTgwMX0sCi0JezB4MDAwMGE0M2MsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhNDQwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTQ0NCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE0NDgsIDB4MDQwMDAwODB9LAotCXsweDAwMDBhNDRjLCAweDAwMDAwMDAxfSwKLQl7MHgwMDAwYTQ1MCwgMHgwMDAxMDAwMH0sCi0JezB4MDAwMGE0NTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhNjAwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTYwNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE2MDgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhNjBjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTYxMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE2MTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhNjE4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTYxYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE2MjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhNjI0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTYyOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE2MmMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhNjMwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTYzNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE2MzgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhNjNjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTY0MCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE2NDQsIDB4M2ZhZDlkNzR9LAotCXsweDAwMDBhNjQ4LCAweDAwNDgwNjBhfSwKLQl7MHgwMDAwYTY0YywgMHgwMDAwMDYzN30sCi0JezB4MDAwMGE2NzAsIDB4MDMwMjAxMDB9LAotCXsweDAwMDBhNjc0LCAweDA5MDgwNTA0fSwKLQl7MHgwMDAwYTY3OCwgMHgwZDBjMGIwYX0sCi0JezB4MDAwMGE2N2MsIDB4MTMxMjExMTB9LAotCXsweDAwMDBhNjgwLCAweDMxMzAxNTE0fSwKLQl7MHgwMDAwYTY4NCwgMHgzNTM0MzMzMn0sCi0JezB4MDAwMGE2ODgsIDB4MDAwMDAwMzZ9LAotCXsweDAwMDBhNjkwLCAweDAwMDAwODM4fSwKLQl7MHgwMDAwYTdjMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE3YzQsIDB4ZmZmZmZmZmN9LAotCXsweDAwMDBhN2M4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTdjYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE3ZDAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhN2Q0LCAweDAwMDAwMDA0fSwKLQl7MHgwMDAwYTdkYywgMHgwMDAwMDAwMX0sCi0JezB4MDAwMGE4ZDAsIDB4MDA0YjZhOGV9LAotCXsweDAwMDBhOGQ0LCAweDAwMDAwODIwfSwKLQl7MHgwMDAwYThkYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE4ZjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhOGY0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjJkMCwgMHgwMDAwMDA4MH0sCi0JezB4MDAwMGIyZDQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMmRjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjJlMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIyZTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMmU4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjJlYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIyZjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMmY0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjJmOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGI0MDgsIDB4MGU3OWU1YzB9LAotCXsweDAwMDBiNDBjLCAweDAwODIwODIwfSwKLQl7MHgwMDAwYjQyMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGI4ZDAsIDB4MDA0YjZhOGV9LAotCXsweDAwMDBiOGQ0LCAweDAwMDAwODIwfSwKLQl7MHgwMDAwYjhkYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGI4ZjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiOGY0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYzJkMCwgMHgwMDAwMDA4MH0sCi0JezB4MDAwMGMyZDQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBjMmRjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYzJlMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGMyZTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBjMmU4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYzJlYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGMyZjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBjMmY0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYzJmOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGM0MDgsIDB4MGU3OWU1YzB9LAotCXsweDAwMDBjNDBjLCAweDAwODIwODIwfSwKLQl7MHgwMDAwYzQyMCwgMHgwMDAwMDAwMH0sCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIGFyOTMwME1vZGVzX2hpZ2hfcG93ZXJfdHhfZ2Fpbl90YWJsZV8ycDBbXVs1XSA9IHsKLQkvKiBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAgMkdfSFQyMCAgICovCi0JezB4MDAwMGE0MTAsIDB4MDAwMDUwZDksIDB4MDAwMDUwZDksIDB4MDAwMDUwZDksIDB4MDAwMDUwZDl9LAotCXsweDAwMDBhNTAwLCAweDAwMDAyMjIwLCAweDAwMDAyMjIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTUwNCwgMHgwNjAwMjIyMywgMHgwNjAwMjIyMywgMHgwNDAwMDAwMiwgMHgwNDAwMDAwMn0sCi0JezB4MDAwMGE1MDgsIDB4MGEwMjIyMjAsIDB4MGEwMjIyMjAsIDB4MDgwMDAwMDQsIDB4MDgwMDAwMDR9LAotCXsweDAwMDBhNTBjLCAweDBmMDIyMjIzLCAweDBmMDIyMjIzLCAweDBiMDAwMjAwLCAweDBiMDAwMjAwfSwKLQl7MHgwMDAwYTUxMCwgMHgxNDAyMjYyMCwgMHgxNDAyMjYyMCwgMHgwZjAwMDIwMiwgMHgwZjAwMDIwMn0sCi0JezB4MDAwMGE1MTQsIDB4MTgwMjI2MjIsIDB4MTgwMjI2MjIsIDB4MTEwMDA0MDAsIDB4MTEwMDA0MDB9LAotCXsweDAwMDBhNTE4LCAweDFiMDIyODIyLCAweDFiMDIyODIyLCAweDE1MDAwNDAyLCAweDE1MDAwNDAyfSwKLQl7MHgwMDAwYTUxYywgMHgyMDAyMjg0MiwgMHgyMDAyMjg0MiwgMHgxOTAwMDQwNCwgMHgxOTAwMDQwNH0sCi0JezB4MDAwMGE1MjAsIDB4MjIwMjJjNDEsIDB4MjIwMjJjNDEsIDB4MWIwMDA2MDMsIDB4MWIwMDA2MDN9LAotCXsweDAwMDBhNTI0LCAweDI4MDIzMDQyLCAweDI4MDIzMDQyLCAweDFmMDAwYTAyLCAweDFmMDAwYTAyfSwKLQl7MHgwMDAwYTUyOCwgMHgyYzAyMzA0NCwgMHgyYzAyMzA0NCwgMHgyMzAwMGEwNCwgMHgyMzAwMGEwNH0sCi0JezB4MDAwMGE1MmMsIDB4MmYwMjM2NDQsIDB4MmYwMjM2NDQsIDB4MjYwMDBhMjAsIDB4MjYwMDBhMjB9LAotCXsweDAwMDBhNTMwLCAweDM0MDI1NjQzLCAweDM0MDI1NjQzLCAweDJhMDAwZTIwLCAweDJhMDAwZTIwfSwKLQl7MHgwMDAwYTUzNCwgMHgzODAyNWE0NCwgMHgzODAyNWE0NCwgMHgyZTAwMGUyMiwgMHgyZTAwMGUyMn0sCi0JezB4MDAwMGE1MzgsIDB4M2IwMjVlNDUsIDB4M2IwMjVlNDUsIDB4MzEwMDBlMjQsIDB4MzEwMDBlMjR9LAotCXsweDAwMDBhNTNjLCAweDQxMDI1ZTRhLCAweDQxMDI1ZTRhLCAweDM0MDAxNjQwLCAweDM0MDAxNjQwfSwKLQl7MHgwMDAwYTU0MCwgMHg0ODAyNWU2YywgMHg0ODAyNWU2YywgMHgzODAwMTY2MCwgMHgzODAwMTY2MH0sCi0JezB4MDAwMGE1NDQsIDB4NGUwMjVlOGUsIDB4NGUwMjVlOGUsIDB4M2IwMDE4NjEsIDB4M2IwMDE4NjF9LAotCXsweDAwMDBhNTQ4LCAweDUzMDI1ZWIyLCAweDUzMDI1ZWIyLCAweDNlMDAxYTgxLCAweDNlMDAxYTgxfSwKLQl7MHgwMDAwYTU0YywgMHg1OTAyNWViNSwgMHg1OTAyNWViNSwgMHg0MjAwMWE4MywgMHg0MjAwMWE4M30sCi0JezB4MDAwMGE1NTAsIDB4NWYwMjVlZjYsIDB4NWYwMjVlZjYsIDB4NDQwMDFjODQsIDB4NDQwMDFjODR9LAotCXsweDAwMDBhNTU0LCAweDYyMDI1ZjU2LCAweDYyMDI1ZjU2LCAweDQ4MDAxY2UzLCAweDQ4MDAxY2UzfSwKLQl7MHgwMDAwYTU1OCwgMHg2NjAyN2Y1NiwgMHg2NjAyN2Y1NiwgMHg0YzAwMWNlNSwgMHg0YzAwMWNlNX0sCi0JezB4MDAwMGE1NWMsIDB4NmEwMjlmNTYsIDB4NmEwMjlmNTYsIDB4NTAwMDFjZTksIDB4NTAwMDFjZTl9LAotCXsweDAwMDBhNTYwLCAweDcwMDQ5ZjU2LCAweDcwMDQ5ZjU2LCAweDU0MDAxY2ViLCAweDU0MDAxY2VifSwKLQl7MHgwMDAwYTU2NCwgMHg3NTA0ZmY1NiwgMHg3NTA0ZmY1NiwgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCi0JezB4MDAwMGE1NjgsIDB4NzUwNGZmNTYsIDB4NzUwNGZmNTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAotCXsweDAwMDBhNTZjLCAweDc1MDRmZjU2LCAweDc1MDRmZjU2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKLQl7MHgwMDAwYTU3MCwgMHg3NTA0ZmY1NiwgMHg3NTA0ZmY1NiwgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCi0JezB4MDAwMGE1NzQsIDB4NzUwNGZmNTYsIDB4NzUwNGZmNTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAotCXsweDAwMDBhNTc4LCAweDc1MDRmZjU2LCAweDc1MDRmZjU2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKLQl7MHgwMDAwYTU3YywgMHg3NTA0ZmY1NiwgMHg3NTA0ZmY1NiwgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCi0JezB4MDAwMGE1ODAsIDB4MDA4MDIyMjAsIDB4MDA4MDIyMjAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDB9LAotCXsweDAwMDBhNTg0LCAweDA2ODAyMjIzLCAweDA2ODAyMjIzLCAweDA0ODAwMDAyLCAweDA0ODAwMDAyfSwKLQl7MHgwMDAwYTU4OCwgMHgwYTgyMjIyMCwgMHgwYTgyMjIyMCwgMHgwODgwMDAwNCwgMHgwODgwMDAwNH0sCi0JezB4MDAwMGE1OGMsIDB4MGY4MjIyMjMsIDB4MGY4MjIyMjMsIDB4MGI4MDAyMDAsIDB4MGI4MDAyMDB9LAotCXsweDAwMDBhNTkwLCAweDE0ODIyNjIwLCAweDE0ODIyNjIwLCAweDBmODAwMjAyLCAweDBmODAwMjAyfSwKLQl7MHgwMDAwYTU5NCwgMHgxODgyMjYyMiwgMHgxODgyMjYyMiwgMHgxMTgwMDQwMCwgMHgxMTgwMDQwMH0sCi0JezB4MDAwMGE1OTgsIDB4MWI4MjI4MjIsIDB4MWI4MjI4MjIsIDB4MTU4MDA0MDIsIDB4MTU4MDA0MDJ9LAotCXsweDAwMDBhNTljLCAweDIwODIyODQyLCAweDIwODIyODQyLCAweDE5ODAwNDA0LCAweDE5ODAwNDA0fSwKLQl7MHgwMDAwYTVhMCwgMHgyMjgyMmM0MSwgMHgyMjgyMmM0MSwgMHgxYjgwMDYwMywgMHgxYjgwMDYwM30sCi0JezB4MDAwMGE1YTQsIDB4Mjg4MjMwNDIsIDB4Mjg4MjMwNDIsIDB4MWY4MDBhMDIsIDB4MWY4MDBhMDJ9LAotCXsweDAwMDBhNWE4LCAweDJjODIzMDQ0LCAweDJjODIzMDQ0LCAweDIzODAwYTA0LCAweDIzODAwYTA0fSwKLQl7MHgwMDAwYTVhYywgMHgyZjgyMzY0NCwgMHgyZjgyMzY0NCwgMHgyNjgwMGEyMCwgMHgyNjgwMGEyMH0sCi0JezB4MDAwMGE1YjAsIDB4MzQ4MjU2NDMsIDB4MzQ4MjU2NDMsIDB4MmE4MDBlMjAsIDB4MmE4MDBlMjB9LAotCXsweDAwMDBhNWI0LCAweDM4ODI1YTQ0LCAweDM4ODI1YTQ0LCAweDJlODAwZTIyLCAweDJlODAwZTIyfSwKLQl7MHgwMDAwYTViOCwgMHgzYjgyNWU0NSwgMHgzYjgyNWU0NSwgMHgzMTgwMGUyNCwgMHgzMTgwMGUyNH0sCi0JezB4MDAwMGE1YmMsIDB4NDE4MjVlNGEsIDB4NDE4MjVlNGEsIDB4MzQ4MDE2NDAsIDB4MzQ4MDE2NDB9LAotCXsweDAwMDBhNWMwLCAweDQ4ODI1ZTZjLCAweDQ4ODI1ZTZjLCAweDM4ODAxNjYwLCAweDM4ODAxNjYwfSwKLQl7MHgwMDAwYTVjNCwgMHg0ZTgyNWU4ZSwgMHg0ZTgyNWU4ZSwgMHgzYjgwMTg2MSwgMHgzYjgwMTg2MX0sCi0JezB4MDAwMGE1YzgsIDB4NTM4MjVlYjIsIDB4NTM4MjVlYjIsIDB4M2U4MDFhODEsIDB4M2U4MDFhODF9LAotCXsweDAwMDBhNWNjLCAweDU5ODI1ZWI1LCAweDU5ODI1ZWI1LCAweDQyODAxYTgzLCAweDQyODAxYTgzfSwKLQl7MHgwMDAwYTVkMCwgMHg1ZjgyNWVmNiwgMHg1ZjgyNWVmNiwgMHg0NDgwMWM4NCwgMHg0NDgwMWM4NH0sCi0JezB4MDAwMGE1ZDQsIDB4NjI4MjVmNTYsIDB4NjI4MjVmNTYsIDB4NDg4MDFjZTMsIDB4NDg4MDFjZTN9LAotCXsweDAwMDBhNWQ4LCAweDY2ODI3ZjU2LCAweDY2ODI3ZjU2LCAweDRjODAxY2U1LCAweDRjODAxY2U1fSwKLQl7MHgwMDAwYTVkYywgMHg2YTgyOWY1NiwgMHg2YTgyOWY1NiwgMHg1MDgwMWNlOSwgMHg1MDgwMWNlOX0sCi0JezB4MDAwMGE1ZTAsIDB4NzA4NDlmNTYsIDB4NzA4NDlmNTYsIDB4NTQ4MDFjZWIsIDB4NTQ4MDFjZWJ9LAotCXsweDAwMDBhNWU0LCAweDc1ODRmZjU2LCAweDc1ODRmZjU2LCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKLQl7MHgwMDAwYTVlOCwgMHg3NTg0ZmY1NiwgMHg3NTg0ZmY1NiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCi0JezB4MDAwMGE1ZWMsIDB4NzU4NGZmNTYsIDB4NzU4NGZmNTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAotCXsweDAwMDBhNWYwLCAweDc1ODRmZjU2LCAweDc1ODRmZjU2LCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKLQl7MHgwMDAwYTVmNCwgMHg3NTg0ZmY1NiwgMHg3NTg0ZmY1NiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCi0JezB4MDAwMGE1ZjgsIDB4NzU4NGZmNTYsIDB4NzU4NGZmNTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAotCXsweDAwMDBhNWZjLCAweDc1ODRmZjU2LCAweDc1ODRmZjU2LCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKLQl7MHgwMDAxNjA0NCwgMHgwNTZkYjJlNiwgMHgwNTZkYjJlNiwgMHgwNTZkYjJlNiwgMHgwNTZkYjJlNn0sCi0JezB4MDAwMTYwNDgsIDB4YWU0ODAwMDEsIDB4YWU0ODAwMDEsIDB4YWU0ODAwMDEsIDB4YWU0ODAwMDF9LAotCXsweDAwMDE2MDY4LCAweDZlYjZkYjZjLCAweDZlYjZkYjZjLCAweDZlYjZkYjZjLCAweDZlYjZkYjZjfSwKLQl7MHgwMDAxNjQ0NCwgMHgwNTZkYjJlNiwgMHgwNTZkYjJlNiwgMHgwNTZkYjJlNiwgMHgwNTZkYjJlNn0sCi0JezB4MDAwMTY0NDgsIDB4YWU0ODAwMDEsIDB4YWU0ODAwMDEsIDB4YWU0ODAwMDEsIDB4YWU0ODAwMDF9LAotCXsweDAwMDE2NDY4LCAweDZlYjZkYjZjLCAweDZlYjZkYjZjLCAweDZlYjZkYjZjLCAweDZlYjZkYjZjfSwKLQl7MHgwMDAxNjg0NCwgMHgwNTZkYjJlNiwgMHgwNTZkYjJlNiwgMHgwNTZkYjJlNiwgMHgwNTZkYjJlNn0sCi0JezB4MDAwMTY4NDgsIDB4YWU0ODAwMDEsIDB4YWU0ODAwMDEsIDB4YWU0ODAwMDEsIDB4YWU0ODAwMDF9LAotCXsweDAwMDE2ODY4LCAweDZlYjZkYjZjLCAweDZlYjZkYjZjLCAweDZlYjZkYjZjLCAweDZlYjZkYjZjfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5MzAwTW9kZXNfaGlnaF9vYl9kYl90eF9nYWluX3RhYmxlXzJwMFtdWzVdID0gewotCS8qIEFkZHIgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICAgKi8KLQl7MHgwMDAwYTQxMCwgMHgwMDAwNTBkOSwgMHgwMDAwNTBkOSwgMHgwMDAwNTBkOSwgMHgwMDAwNTBkOX0sCi0JezB4MDAwMGE1MDAsIDB4MDAwMDIyMjAsIDB4MDAwMDIyMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhNTA0LCAweDA2MDAyMjIzLCAweDA2MDAyMjIzLCAweDA0MDAwMDAyLCAweDA0MDAwMDAyfSwKLQl7MHgwMDAwYTUwOCwgMHgwYTAyMjIyMCwgMHgwYTAyMjIyMCwgMHgwODAwMDAwNCwgMHgwODAwMDAwNH0sCi0JezB4MDAwMGE1MGMsIDB4MGYwMjIyMjMsIDB4MGYwMjIyMjMsIDB4MGIwMDAyMDAsIDB4MGIwMDAyMDB9LAotCXsweDAwMDBhNTEwLCAweDE0MDIyNjIwLCAweDE0MDIyNjIwLCAweDBmMDAwMjAyLCAweDBmMDAwMjAyfSwKLQl7MHgwMDAwYTUxNCwgMHgxODAyMjYyMiwgMHgxODAyMjYyMiwgMHgxMTAwMDQwMCwgMHgxMTAwMDQwMH0sCi0JezB4MDAwMGE1MTgsIDB4MWIwMjI4MjIsIDB4MWIwMjI4MjIsIDB4MTUwMDA0MDIsIDB4MTUwMDA0MDJ9LAotCXsweDAwMDBhNTFjLCAweDIwMDIyODQyLCAweDIwMDIyODQyLCAweDE5MDAwNDA0LCAweDE5MDAwNDA0fSwKLQl7MHgwMDAwYTUyMCwgMHgyMjAyMmM0MSwgMHgyMjAyMmM0MSwgMHgxYjAwMDYwMywgMHgxYjAwMDYwM30sCi0JezB4MDAwMGE1MjQsIDB4MjgwMjMwNDIsIDB4MjgwMjMwNDIsIDB4MWYwMDBhMDIsIDB4MWYwMDBhMDJ9LAotCXsweDAwMDBhNTI4LCAweDJjMDIzMDQ0LCAweDJjMDIzMDQ0LCAweDIzMDAwYTA0LCAweDIzMDAwYTA0fSwKLQl7MHgwMDAwYTUyYywgMHgyZjAyMzY0NCwgMHgyZjAyMzY0NCwgMHgyNjAwMGEyMCwgMHgyNjAwMGEyMH0sCi0JezB4MDAwMGE1MzAsIDB4MzQwMjU2NDMsIDB4MzQwMjU2NDMsIDB4MmEwMDBlMjAsIDB4MmEwMDBlMjB9LAotCXsweDAwMDBhNTM0LCAweDM4MDI1YTQ0LCAweDM4MDI1YTQ0LCAweDJlMDAwZTIyLCAweDJlMDAwZTIyfSwKLQl7MHgwMDAwYTUzOCwgMHgzYjAyNWU0NSwgMHgzYjAyNWU0NSwgMHgzMTAwMGUyNCwgMHgzMTAwMGUyNH0sCi0JezB4MDAwMGE1M2MsIDB4NDEwMjVlNGEsIDB4NDEwMjVlNGEsIDB4MzQwMDE2NDAsIDB4MzQwMDE2NDB9LAotCXsweDAwMDBhNTQwLCAweDQ4MDI1ZTZjLCAweDQ4MDI1ZTZjLCAweDM4MDAxNjYwLCAweDM4MDAxNjYwfSwKLQl7MHgwMDAwYTU0NCwgMHg0ZTAyNWU4ZSwgMHg0ZTAyNWU4ZSwgMHgzYjAwMTg2MSwgMHgzYjAwMTg2MX0sCi0JezB4MDAwMGE1NDgsIDB4NTMwMjVlYjIsIDB4NTMwMjVlYjIsIDB4M2UwMDFhODEsIDB4M2UwMDFhODF9LAotCXsweDAwMDBhNTRjLCAweDU5MDI1ZWI1LCAweDU5MDI1ZWI1LCAweDQyMDAxYTgzLCAweDQyMDAxYTgzfSwKLQl7MHgwMDAwYTU1MCwgMHg1ZjAyNWVmNiwgMHg1ZjAyNWVmNiwgMHg0NDAwMWM4NCwgMHg0NDAwMWM4NH0sCi0JezB4MDAwMGE1NTQsIDB4NjIwMjVmNTYsIDB4NjIwMjVmNTYsIDB4NDgwMDFjZTMsIDB4NDgwMDFjZTN9LAotCXsweDAwMDBhNTU4LCAweDY2MDI3ZjU2LCAweDY2MDI3ZjU2LCAweDRjMDAxY2U1LCAweDRjMDAxY2U1fSwKLQl7MHgwMDAwYTU1YywgMHg2YTAyOWY1NiwgMHg2YTAyOWY1NiwgMHg1MDAwMWNlOSwgMHg1MDAwMWNlOX0sCi0JezB4MDAwMGE1NjAsIDB4NzAwNDlmNTYsIDB4NzAwNDlmNTYsIDB4NTQwMDFjZWIsIDB4NTQwMDFjZWJ9LAotCXsweDAwMDBhNTY0LCAweDc1MDRmZjU2LCAweDc1MDRmZjU2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKLQl7MHgwMDAwYTU2OCwgMHg3NTA0ZmY1NiwgMHg3NTA0ZmY1NiwgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCi0JezB4MDAwMGE1NmMsIDB4NzUwNGZmNTYsIDB4NzUwNGZmNTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAotCXsweDAwMDBhNTcwLCAweDc1MDRmZjU2LCAweDc1MDRmZjU2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKLQl7MHgwMDAwYTU3NCwgMHg3NTA0ZmY1NiwgMHg3NTA0ZmY1NiwgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCi0JezB4MDAwMGE1NzgsIDB4NzUwNGZmNTYsIDB4NzUwNGZmNTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAotCXsweDAwMDBhNTdjLCAweDc1MDRmZjU2LCAweDc1MDRmZjU2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKLQl7MHgwMDAwYTU4MCwgMHgwMDgwMjIyMCwgMHgwMDgwMjIyMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMH0sCi0JezB4MDAwMGE1ODQsIDB4MDY4MDIyMjMsIDB4MDY4MDIyMjMsIDB4MDQ4MDAwMDIsIDB4MDQ4MDAwMDJ9LAotCXsweDAwMDBhNTg4LCAweDBhODIyMjIwLCAweDBhODIyMjIwLCAweDA4ODAwMDA0LCAweDA4ODAwMDA0fSwKLQl7MHgwMDAwYTU4YywgMHgwZjgyMjIyMywgMHgwZjgyMjIyMywgMHgwYjgwMDIwMCwgMHgwYjgwMDIwMH0sCi0JezB4MDAwMGE1OTAsIDB4MTQ4MjI2MjAsIDB4MTQ4MjI2MjAsIDB4MGY4MDAyMDIsIDB4MGY4MDAyMDJ9LAotCXsweDAwMDBhNTk0LCAweDE4ODIyNjIyLCAweDE4ODIyNjIyLCAweDExODAwNDAwLCAweDExODAwNDAwfSwKLQl7MHgwMDAwYTU5OCwgMHgxYjgyMjgyMiwgMHgxYjgyMjgyMiwgMHgxNTgwMDQwMiwgMHgxNTgwMDQwMn0sCi0JezB4MDAwMGE1OWMsIDB4MjA4MjI4NDIsIDB4MjA4MjI4NDIsIDB4MTk4MDA0MDQsIDB4MTk4MDA0MDR9LAotCXsweDAwMDBhNWEwLCAweDIyODIyYzQxLCAweDIyODIyYzQxLCAweDFiODAwNjAzLCAweDFiODAwNjAzfSwKLQl7MHgwMDAwYTVhNCwgMHgyODgyMzA0MiwgMHgyODgyMzA0MiwgMHgxZjgwMGEwMiwgMHgxZjgwMGEwMn0sCi0JezB4MDAwMGE1YTgsIDB4MmM4MjMwNDQsIDB4MmM4MjMwNDQsIDB4MjM4MDBhMDQsIDB4MjM4MDBhMDR9LAotCXsweDAwMDBhNWFjLCAweDJmODIzNjQ0LCAweDJmODIzNjQ0LCAweDI2ODAwYTIwLCAweDI2ODAwYTIwfSwKLQl7MHgwMDAwYTViMCwgMHgzNDgyNTY0MywgMHgzNDgyNTY0MywgMHgyYTgwMGUyMCwgMHgyYTgwMGUyMH0sCi0JezB4MDAwMGE1YjQsIDB4Mzg4MjVhNDQsIDB4Mzg4MjVhNDQsIDB4MmU4MDBlMjIsIDB4MmU4MDBlMjJ9LAotCXsweDAwMDBhNWI4LCAweDNiODI1ZTQ1LCAweDNiODI1ZTQ1LCAweDMxODAwZTI0LCAweDMxODAwZTI0fSwKLQl7MHgwMDAwYTViYywgMHg0MTgyNWU0YSwgMHg0MTgyNWU0YSwgMHgzNDgwMTY0MCwgMHgzNDgwMTY0MH0sCi0JezB4MDAwMGE1YzAsIDB4NDg4MjVlNmMsIDB4NDg4MjVlNmMsIDB4Mzg4MDE2NjAsIDB4Mzg4MDE2NjB9LAotCXsweDAwMDBhNWM0LCAweDRlODI1ZThlLCAweDRlODI1ZThlLCAweDNiODAxODYxLCAweDNiODAxODYxfSwKLQl7MHgwMDAwYTVjOCwgMHg1MzgyNWViMiwgMHg1MzgyNWViMiwgMHgzZTgwMWE4MSwgMHgzZTgwMWE4MX0sCi0JezB4MDAwMGE1Y2MsIDB4NTk4MjVlYjUsIDB4NTk4MjVlYjUsIDB4NDI4MDFhODMsIDB4NDI4MDFhODN9LAotCXsweDAwMDBhNWQwLCAweDVmODI1ZWY2LCAweDVmODI1ZWY2LCAweDQ0ODAxYzg0LCAweDQ0ODAxYzg0fSwKLQl7MHgwMDAwYTVkNCwgMHg2MjgyNWY1NiwgMHg2MjgyNWY1NiwgMHg0ODgwMWNlMywgMHg0ODgwMWNlM30sCi0JezB4MDAwMGE1ZDgsIDB4NjY4MjdmNTYsIDB4NjY4MjdmNTYsIDB4NGM4MDFjZTUsIDB4NGM4MDFjZTV9LAotCXsweDAwMDBhNWRjLCAweDZhODI5ZjU2LCAweDZhODI5ZjU2LCAweDUwODAxY2U5LCAweDUwODAxY2U5fSwKLQl7MHgwMDAwYTVlMCwgMHg3MDg0OWY1NiwgMHg3MDg0OWY1NiwgMHg1NDgwMWNlYiwgMHg1NDgwMWNlYn0sCi0JezB4MDAwMGE1ZTQsIDB4NzU4NGZmNTYsIDB4NzU4NGZmNTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAotCXsweDAwMDBhNWU4LCAweDc1ODRmZjU2LCAweDc1ODRmZjU2LCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKLQl7MHgwMDAwYTVlYywgMHg3NTg0ZmY1NiwgMHg3NTg0ZmY1NiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCi0JezB4MDAwMGE1ZjAsIDB4NzU4NGZmNTYsIDB4NzU4NGZmNTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAotCXsweDAwMDBhNWY0LCAweDc1ODRmZjU2LCAweDc1ODRmZjU2LCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKLQl7MHgwMDAwYTVmOCwgMHg3NTg0ZmY1NiwgMHg3NTg0ZmY1NiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCi0JezB4MDAwMGE1ZmMsIDB4NzU4NGZmNTYsIDB4NzU4NGZmNTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAotCXsweDAwMDE2MDQ0LCAweDA1NmRiMmU0LCAweDA1NmRiMmU0LCAweDA1NmRiMmU0LCAweDA1NmRiMmU0fSwKLQl7MHgwMDAxNjA0OCwgMHg4ZTQ4MDAwMSwgMHg4ZTQ4MDAwMSwgMHg4ZTQ4MDAwMSwgMHg4ZTQ4MDAwMX0sCi0JezB4MDAwMTYwNjgsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmN9LAotCXsweDAwMDE2NDQ0LCAweDA1NmRiMmU0LCAweDA1NmRiMmU0LCAweDA1NmRiMmU0LCAweDA1NmRiMmU0fSwKLQl7MHgwMDAxNjQ0OCwgMHg4ZTQ4MDAwMSwgMHg4ZTQ4MDAwMSwgMHg4ZTQ4MDAwMSwgMHg4ZTQ4MDAwMX0sCi0JezB4MDAwMTY0NjgsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmN9LAotCXsweDAwMDE2ODQ0LCAweDA1NmRiMmU0LCAweDA1NmRiMmU0LCAweDA1NmRiMmU0LCAweDA1NmRiMmU0fSwKLQl7MHgwMDAxNjg0OCwgMHg4ZTQ4MDAwMSwgMHg4ZTQ4MDAwMSwgMHg4ZTQ4MDAwMSwgMHg4ZTQ4MDAwMX0sCi0JezB4MDAwMTY4NjgsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmN9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBhcjkzMDBDb21tb25fcnhfZ2Fpbl90YWJsZV8ycDBbXVsyXSA9IHsKLQkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCi0JezB4MDAwMGEwMDAsIDB4MDAwMTAwMDB9LAotCXsweDAwMDBhMDA0LCAweDAwMDMwMDAyfSwKLQl7MHgwMDAwYTAwOCwgMHgwMDA1MDAwNH0sCi0JezB4MDAwMGEwMGMsIDB4MDA4MTAwODB9LAotCXsweDAwMDBhMDEwLCAweDAwODMwMDgyfSwKLQl7MHgwMDAwYTAxNCwgMHgwMTgxMDE4MH0sCi0JezB4MDAwMGEwMTgsIDB4MDE4MzAxODJ9LAotCXsweDAwMDBhMDFjLCAweDAxODUwMTg0fSwKLQl7MHgwMDAwYTAyMCwgMHgwMTg5MDE4OH0sCi0JezB4MDAwMGEwMjQsIDB4MDE4YjAxOGF9LAotCXsweDAwMDBhMDI4LCAweDAxOGQwMThjfSwKLQl7MHgwMDAwYTAyYywgMHgwMTkxMDE5MH0sCi0JezB4MDAwMGEwMzAsIDB4MDE5MzAxOTJ9LAotCXsweDAwMDBhMDM0LCAweDAxOTUwMTk0fSwKLQl7MHgwMDAwYTAzOCwgMHgwMzhhMDE5Nn0sCi0JezB4MDAwMGEwM2MsIDB4MDM4YzAzOGJ9LAotCXsweDAwMDBhMDQwLCAweDAzOTAwMzhkfSwKLQl7MHgwMDAwYTA0NCwgMHgwMzkyMDM5MX0sCi0JezB4MDAwMGEwNDgsIDB4MDM5NDAzOTN9LAotCXsweDAwMDBhMDRjLCAweDAzOTYwMzk1fSwKLQl7MHgwMDAwYTA1MCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwNTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMDU4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTA1YywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwNjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMDY0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTA2OCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwNmMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMDcwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTA3NCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwNzgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMDdjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTA4MCwgMHgyMjIyMjIyOX0sCi0JezB4MDAwMGEwODQsIDB4MWQxZDFkMWR9LAotCXsweDAwMDBhMDg4LCAweDFkMWQxZDFkfSwKLQl7MHgwMDAwYTA4YywgMHgxZDFkMWQxZH0sCi0JezB4MDAwMGEwOTAsIDB4MTcxZDFkMWR9LAotCXsweDAwMDBhMDk0LCAweDExMTExNzE3fSwKLQl7MHgwMDAwYTA5OCwgMHgwMDAzMDMxMX0sCi0JezB4MDAwMGEwOWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMGEwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTBhNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwYTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMGFjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTBiMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwYjQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMGI4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTBiYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwYzAsIDB4MDAxZjAwMDB9LAotCXsweDAwMDBhMGM0LCAweDAxMDAwMTAxfSwKLQl7MHgwMDAwYTBjOCwgMHgwMTFlMDExZn0sCi0JezB4MDAwMGEwY2MsIDB4MDExYzAxMWR9LAotCXsweDAwMDBhMGQwLCAweDAyMDMwMjA0fSwKLQl7MHgwMDAwYTBkNCwgMHgwMjAxMDIwMn0sCi0JezB4MDAwMGEwZDgsIDB4MDIxZjAyMDB9LAotCXsweDAwMDBhMGRjLCAweDAzMDIwMjFlfSwKLQl7MHgwMDAwYTBlMCwgMHgwMzAwMDMwMX0sCi0JezB4MDAwMGEwZTQsIDB4MDMxZTAzMWZ9LAotCXsweDAwMDBhMGU4LCAweDA0MDIwMzFkfSwKLQl7MHgwMDAwYTBlYywgMHgwNDAwMDQwMX0sCi0JezB4MDAwMGEwZjAsIDB4MDQxZTA0MWZ9LAotCXsweDAwMDBhMGY0LCAweDA1MDIwNDFkfSwKLQl7MHgwMDAwYTBmOCwgMHgwNTAwMDUwMX0sCi0JezB4MDAwMGEwZmMsIDB4MDUxZTA1MWZ9LAotCXsweDAwMDBhMTAwLCAweDA2MDEwNjAyfSwKLQl7MHgwMDAwYTEwNCwgMHgwNjFmMDYwMH0sCi0JezB4MDAwMGExMDgsIDB4MDYxZDA2MWV9LAotCXsweDAwMDBhMTBjLCAweDA3MDIwNzAzfSwKLQl7MHgwMDAwYTExMCwgMHgwNzAwMDcwMX0sCi0JezB4MDAwMGExMTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTE4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTExYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExMjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTI0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTEyOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExMmMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTMwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTEzNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExMzgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTNjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTE0MCwgMHgwMDFmMDAwMH0sCi0JezB4MDAwMGExNDQsIDB4MDEwMDAxMDF9LAotCXsweDAwMDBhMTQ4LCAweDAxMWUwMTFmfSwKLQl7MHgwMDAwYTE0YywgMHgwMTFjMDExZH0sCi0JezB4MDAwMGExNTAsIDB4MDIwMzAyMDR9LAotCXsweDAwMDBhMTU0LCAweDAyMDEwMjAyfSwKLQl7MHgwMDAwYTE1OCwgMHgwMjFmMDIwMH0sCi0JezB4MDAwMGExNWMsIDB4MDMwMjAyMWV9LAotCXsweDAwMDBhMTYwLCAweDAzMDAwMzAxfSwKLQl7MHgwMDAwYTE2NCwgMHgwMzFlMDMxZn0sCi0JezB4MDAwMGExNjgsIDB4MDQwMjAzMWR9LAotCXsweDAwMDBhMTZjLCAweDA0MDAwNDAxfSwKLQl7MHgwMDAwYTE3MCwgMHgwNDFlMDQxZn0sCi0JezB4MDAwMGExNzQsIDB4MDUwMjA0MWR9LAotCXsweDAwMDBhMTc4LCAweDA1MDAwNTAxfSwKLQl7MHgwMDAwYTE3YywgMHgwNTFlMDUxZn0sCi0JezB4MDAwMGExODAsIDB4MDYwMTA2MDJ9LAotCXsweDAwMDBhMTg0LCAweDA2MWYwNjAwfSwKLQl7MHgwMDAwYTE4OCwgMHgwNjFkMDYxZX0sCi0JezB4MDAwMGExOGMsIDB4MDcwMjA3MDN9LAotCXsweDAwMDBhMTkwLCAweDA3MDAwNzAxfSwKLQl7MHgwMDAwYTE5NCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExOTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTljLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFhMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExYTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWE4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFhYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExYjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWI0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFiOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExYmMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWMwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFjNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExYzgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWNjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFkMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExZDQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWQ4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFkYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExZTAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWU0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFlOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExZWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWYwLCAweDAwMDAwMzk2fSwKLQl7MHgwMDAwYTFmNCwgMHgwMDAwMDM5Nn0sCi0JezB4MDAwMGExZjgsIDB4MDAwMDAzOTZ9LAotCXsweDAwMDBhMWZjLCAweDAwMDAwMTk2fSwKLQl7MHgwMDAwYjAwMCwgMHgwMDAxMDAwMH0sCi0JezB4MDAwMGIwMDQsIDB4MDAwMzAwMDJ9LAotCXsweDAwMDBiMDA4LCAweDAwMDUwMDA0fSwKLQl7MHgwMDAwYjAwYywgMHgwMDgxMDA4MH0sCi0JezB4MDAwMGIwMTAsIDB4MDA4MzAwODJ9LAotCXsweDAwMDBiMDE0LCAweDAxODEwMTgwfSwKLQl7MHgwMDAwYjAxOCwgMHgwMTgzMDE4Mn0sCi0JezB4MDAwMGIwMWMsIDB4MDE4NTAxODR9LAotCXsweDAwMDBiMDIwLCAweDAyODEwMjgwfSwKLQl7MHgwMDAwYjAyNCwgMHgwMjgzMDI4Mn0sCi0JezB4MDAwMGIwMjgsIDB4MDI4NTAyODR9LAotCXsweDAwMDBiMDJjLCAweDAyODkwMjg4fSwKLQl7MHgwMDAwYjAzMCwgMHgwMjhiMDI4YX0sCi0JezB4MDAwMGIwMzQsIDB4MDM4ODAyOGN9LAotCXsweDAwMDBiMDM4LCAweDAzOGEwMzg5fSwKLQl7MHgwMDAwYjAzYywgMHgwMzhjMDM4Yn0sCi0JezB4MDAwMGIwNDAsIDB4MDM5MDAzOGR9LAotCXsweDAwMDBiMDQ0LCAweDAzOTIwMzkxfSwKLQl7MHgwMDAwYjA0OCwgMHgwMzk0MDM5M30sCi0JezB4MDAwMGIwNGMsIDB4MDM5NjAzOTV9LAotCXsweDAwMDBiMDUwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjA1NCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIwNTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMDVjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjA2MCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIwNjQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMDY4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjA2YywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIwNzAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMDc0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjA3OCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIwN2MsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMDgwLCAweDMyMzIzMjMyfSwKLQl7MHgwMDAwYjA4NCwgMHgyZjJmMzIzMn0sCi0JezB4MDAwMGIwODgsIDB4MjMyODJhMmR9LAotCXsweDAwMDBiMDhjLCAweDFjMWUyMTIzfSwKLQl7MHgwMDAwYjA5MCwgMHgxNDE3MTkxOX0sCi0JezB4MDAwMGIwOTQsIDB4MGUwZTEyMTR9LAotCXsweDAwMDBiMDk4LCAweDAzMDUwNzA3fSwKLQl7MHgwMDAwYjA5YywgMHgwMDAzMDMwM30sCi0JezB4MDAwMGIwYTAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMGE0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjBhOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIwYWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMGIwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjBiNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIwYjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMGJjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjBjMCwgMHgwMDNmMDAyMH0sCi0JezB4MDAwMGIwYzQsIDB4MDA0MDAwNDF9LAotCXsweDAwMDBiMGM4LCAweDAxNDAwMDVmfSwKLQl7MHgwMDAwYjBjYywgMHgwMTYwMDE1Zn0sCi0JezB4MDAwMGIwZDAsIDB4MDE3ZTAxN2Z9LAotCXsweDAwMDBiMGQ0LCAweDAyNDEwMjQyfSwKLQl7MHgwMDAwYjBkOCwgMHgwMjVmMDI0MH0sCi0JezB4MDAwMGIwZGMsIDB4MDI3ZjAyNjB9LAotCXsweDAwMDBiMGUwLCAweDAzNDEwMjdlfSwKLQl7MHgwMDAwYjBlNCwgMHgwMzVmMDM0MH0sCi0JezB4MDAwMGIwZTgsIDB4MDM3ZjAzNjB9LAotCXsweDAwMDBiMGVjLCAweDA0NDAwNDQxfSwKLQl7MHgwMDAwYjBmMCwgMHgwNDYwMDQ1Zn0sCi0JezB4MDAwMGIwZjQsIDB4MDU0MTA0N2Z9LAotCXsweDAwMDBiMGY4LCAweDA1NWYwNTQwfSwKLQl7MHgwMDAwYjBmYywgMHgwNTdmMDU2MH0sCi0JezB4MDAwMGIxMDAsIDB4MDY0MDA2NDF9LAotCXsweDAwMDBiMTA0LCAweDA2NjAwNjVmfSwKLQl7MHgwMDAwYjEwOCwgMHgwNjdlMDY3Zn0sCi0JezB4MDAwMGIxMGMsIDB4MDc0MTA3NDJ9LAotCXsweDAwMDBiMTEwLCAweDA3NWYwNzQwfSwKLQl7MHgwMDAwYjExNCwgMHgwNzdmMDc2MH0sCi0JezB4MDAwMGIxMTgsIDB4MDc4MDA3ODF9LAotCXsweDAwMDBiMTFjLCAweDA3YTAwNzlmfSwKLQl7MHgwMDAwYjEyMCwgMHgwN2MxMDdiZn0sCi0JezB4MDAwMGIxMjQsIDB4MDAwMDA3YzB9LAotCXsweDAwMDBiMTI4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjEyYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIxMzAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMTM0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjEzOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIxM2MsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMTQwLCAweDAwM2YwMDIwfSwKLQl7MHgwMDAwYjE0NCwgMHgwMDQwMDA0MX0sCi0JezB4MDAwMGIxNDgsIDB4MDE0MDAwNWZ9LAotCXsweDAwMDBiMTRjLCAweDAxNjAwMTVmfSwKLQl7MHgwMDAwYjE1MCwgMHgwMTdlMDE3Zn0sCi0JezB4MDAwMGIxNTQsIDB4MDI0MTAyNDJ9LAotCXsweDAwMDBiMTU4LCAweDAyNWYwMjQwfSwKLQl7MHgwMDAwYjE1YywgMHgwMjdmMDI2MH0sCi0JezB4MDAwMGIxNjAsIDB4MDM0MTAyN2V9LAotCXsweDAwMDBiMTY0LCAweDAzNWYwMzQwfSwKLQl7MHgwMDAwYjE2OCwgMHgwMzdmMDM2MH0sCi0JezB4MDAwMGIxNmMsIDB4MDQ0MDA0NDF9LAotCXsweDAwMDBiMTcwLCAweDA0NjAwNDVmfSwKLQl7MHgwMDAwYjE3NCwgMHgwNTQxMDQ3Zn0sCi0JezB4MDAwMGIxNzgsIDB4MDU1ZjA1NDB9LAotCXsweDAwMDBiMTdjLCAweDA1N2YwNTYwfSwKLQl7MHgwMDAwYjE4MCwgMHgwNjQwMDY0MX0sCi0JezB4MDAwMGIxODQsIDB4MDY2MDA2NWZ9LAotCXsweDAwMDBiMTg4LCAweDA2N2UwNjdmfSwKLQl7MHgwMDAwYjE4YywgMHgwNzQxMDc0Mn0sCi0JezB4MDAwMGIxOTAsIDB4MDc1ZjA3NDB9LAotCXsweDAwMDBiMTk0LCAweDA3N2YwNzYwfSwKLQl7MHgwMDAwYjE5OCwgMHgwNzgwMDc4MX0sCi0JezB4MDAwMGIxOWMsIDB4MDdhMDA3OWZ9LAotCXsweDAwMDBiMWEwLCAweDA3YzEwN2JmfSwKLQl7MHgwMDAwYjFhNCwgMHgwMDAwMDdjMH0sCi0JezB4MDAwMGIxYTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMWFjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjFiMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIxYjQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMWI4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjFiYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIxYzAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMWM0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjFjOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIxY2MsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMWQwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjFkNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIxZDgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMWRjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjFlMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIxZTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMWU4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjFlYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIxZjAsIDB4MDAwMDAzOTZ9LAotCXsweDAwMDBiMWY0LCAweDAwMDAwMzk2fSwKLQl7MHgwMDAwYjFmOCwgMHgwMDAwMDM5Nn0sCi0JezB4MDAwMGIxZmMsIDB4MDAwMDAxOTZ9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBhcjkzMDBNb2Rlc19sb3dfb2JfZGJfdHhfZ2Fpbl90YWJsZV8ycDBbXVs1XSA9IHsKLQkvKiBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAgMkdfSFQyMCAgICovCi0JezB4MDAwMGE0MTAsIDB4MDAwMDUwZDksIDB4MDAwMDUwZDksIDB4MDAwMDUwZDksIDB4MDAwMDUwZDl9LAotCXsweDAwMDBhNTAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTUwNCwgMHgwNjAwMDAwMywgMHgwNjAwMDAwMywgMHgwNDAwMDAwMiwgMHgwNDAwMDAwMn0sCi0JezB4MDAwMGE1MDgsIDB4MGEwMDAwMjAsIDB4MGEwMDAwMjAsIDB4MDgwMDAwMDQsIDB4MDgwMDAwMDR9LAotCXsweDAwMDBhNTBjLCAweDEwMDAwMDIzLCAweDEwMDAwMDIzLCAweDBiMDAwMjAwLCAweDBiMDAwMjAwfSwKLQl7MHgwMDAwYTUxMCwgMHgxNjAwMDIyMCwgMHgxNjAwMDIyMCwgMHgwZjAwMDIwMiwgMHgwZjAwMDIwMn0sCi0JezB4MDAwMGE1MTQsIDB4MWMwMDAyMjMsIDB4MWMwMDAyMjMsIDB4MTIwMDA0MDAsIDB4MTIwMDA0MDB9LAotCXsweDAwMDBhNTE4LCAweDIxMDIwMjIwLCAweDIxMDIwMjIwLCAweDE2MDAwNDAyLCAweDE2MDAwNDAyfSwKLQl7MHgwMDAwYTUxYywgMHgyNzAyMDIyMywgMHgyNzAyMDIyMywgMHgxOTAwMDQwNCwgMHgxOTAwMDQwNH0sCi0JezB4MDAwMGE1MjAsIDB4MmIwMjIyMjAsIDB4MmIwMjIyMjAsIDB4MWMwMDA2MDMsIDB4MWMwMDA2MDN9LAotCXsweDAwMDBhNTI0LCAweDJmMDIyMjIyLCAweDJmMDIyMjIyLCAweDIxMDAwYTAyLCAweDIxMDAwYTAyfSwKLQl7MHgwMDAwYTUyOCwgMHgzNDAyMjIyNSwgMHgzNDAyMjIyNSwgMHgyNTAwMGEwNCwgMHgyNTAwMGEwNH0sCi0JezB4MDAwMGE1MmMsIDB4M2EwMjIyMmEsIDB4M2EwMjIyMmEsIDB4MjgwMDBhMjAsIDB4MjgwMDBhMjB9LAotCXsweDAwMDBhNTMwLCAweDNlMDIyMjJjLCAweDNlMDIyMjJjLCAweDJjMDAwZTIwLCAweDJjMDAwZTIwfSwKLQl7MHgwMDAwYTUzNCwgMHg0MjAyMjQyYSwgMHg0MjAyMjQyYSwgMHgzMDAwMGUyMiwgMHgzMDAwMGUyMn0sCi0JezB4MDAwMGE1MzgsIDB4NDcwMjI0NGEsIDB4NDcwMjI0NGEsIDB4MzQwMDBlMjQsIDB4MzQwMDBlMjR9LAotCXsweDAwMDBhNTNjLCAweDRiMDIyNDRjLCAweDRiMDIyNDRjLCAweDM4MDAxNjQwLCAweDM4MDAxNjQwfSwKLQl7MHgwMDAwYTU0MCwgMHg0ZTAyMjQ2YywgMHg0ZTAyMjQ2YywgMHgzYzAwMTY2MCwgMHgzYzAwMTY2MH0sCi0JezB4MDAwMGE1NDQsIDB4NTMwMjI2NmMsIDB4NTMwMjI2NmMsIDB4M2YwMDE4NjEsIDB4M2YwMDE4NjF9LAotCXsweDAwMDBhNTQ4LCAweDU3MDIyODZjLCAweDU3MDIyODZjLCAweDQzMDAxYTgxLCAweDQzMDAxYTgxfSwKLQl7MHgwMDAwYTU0YywgMHg1YzA0Mjg2YiwgMHg1YzA0Mjg2YiwgMHg0NzAwMWE4MywgMHg0NzAwMWE4M30sCi0JezB4MDAwMGE1NTAsIDB4NjEwNDJhNmMsIDB4NjEwNDJhNmMsIDB4NGEwMDFjODQsIDB4NGEwMDFjODR9LAotCXsweDAwMDBhNTU0LCAweDY2MDYyYTZjLCAweDY2MDYyYTZjLCAweDRlMDAxY2UzLCAweDRlMDAxY2UzfSwKLQl7MHgwMDAwYTU1OCwgMHg2YjA2MmU2YywgMHg2YjA2MmU2YywgMHg1MjAwMWNlNSwgMHg1MjAwMWNlNX0sCi0JezB4MDAwMGE1NWMsIDB4NzAwNjMwOGMsIDB4NzAwNjMwOGMsIDB4NTYwMDFjZTksIDB4NTYwMDFjZTl9LAotCXsweDAwMDBhNTYwLCAweDczMGEzMDhhLCAweDczMGEzMDhhLCAweDVhMDAxY2ViLCAweDVhMDAxY2VifSwKLQl7MHgwMDAwYTU2NCwgMHg3NzBhMzA4YywgMHg3NzBhMzA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCi0JezB4MDAwMGE1NjgsIDB4NzcwYTMwOGMsIDB4NzcwYTMwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAotCXsweDAwMDBhNTZjLCAweDc3MGEzMDhjLCAweDc3MGEzMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKLQl7MHgwMDAwYTU3MCwgMHg3NzBhMzA4YywgMHg3NzBhMzA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCi0JezB4MDAwMGE1NzQsIDB4NzcwYTMwOGMsIDB4NzcwYTMwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAotCXsweDAwMDBhNTc4LCAweDc3MGEzMDhjLCAweDc3MGEzMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKLQl7MHgwMDAwYTU3YywgMHg3NzBhMzA4YywgMHg3NzBhMzA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCi0JezB4MDAwMGE1ODAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDB9LAotCXsweDAwMDBhNTg0LCAweDA2ODAwMDAzLCAweDA2ODAwMDAzLCAweDA0ODAwMDAyLCAweDA0ODAwMDAyfSwKLQl7MHgwMDAwYTU4OCwgMHgwYTgwMDAyMCwgMHgwYTgwMDAyMCwgMHgwODgwMDAwNCwgMHgwODgwMDAwNH0sCi0JezB4MDAwMGE1OGMsIDB4MTA4MDAwMjMsIDB4MTA4MDAwMjMsIDB4MGI4MDAyMDAsIDB4MGI4MDAyMDB9LAotCXsweDAwMDBhNTkwLCAweDE2ODAwMjIwLCAweDE2ODAwMjIwLCAweDBmODAwMjAyLCAweDBmODAwMjAyfSwKLQl7MHgwMDAwYTU5NCwgMHgxYzgwMDIyMywgMHgxYzgwMDIyMywgMHgxMjgwMDQwMCwgMHgxMjgwMDQwMH0sCi0JezB4MDAwMGE1OTgsIDB4MjE4MjAyMjAsIDB4MjE4MjAyMjAsIDB4MTY4MDA0MDIsIDB4MTY4MDA0MDJ9LAotCXsweDAwMDBhNTljLCAweDI3ODIwMjIzLCAweDI3ODIwMjIzLCAweDE5ODAwNDA0LCAweDE5ODAwNDA0fSwKLQl7MHgwMDAwYTVhMCwgMHgyYjgyMjIyMCwgMHgyYjgyMjIyMCwgMHgxYzgwMDYwMywgMHgxYzgwMDYwM30sCi0JezB4MDAwMGE1YTQsIDB4MmY4MjIyMjIsIDB4MmY4MjIyMjIsIDB4MjE4MDBhMDIsIDB4MjE4MDBhMDJ9LAotCXsweDAwMDBhNWE4LCAweDM0ODIyMjI1LCAweDM0ODIyMjI1LCAweDI1ODAwYTA0LCAweDI1ODAwYTA0fSwKLQl7MHgwMDAwYTVhYywgMHgzYTgyMjIyYSwgMHgzYTgyMjIyYSwgMHgyODgwMGEyMCwgMHgyODgwMGEyMH0sCi0JezB4MDAwMGE1YjAsIDB4M2U4MjIyMmMsIDB4M2U4MjIyMmMsIDB4MmM4MDBlMjAsIDB4MmM4MDBlMjB9LAotCXsweDAwMDBhNWI0LCAweDQyODIyNDJhLCAweDQyODIyNDJhLCAweDMwODAwZTIyLCAweDMwODAwZTIyfSwKLQl7MHgwMDAwYTViOCwgMHg0NzgyMjQ0YSwgMHg0NzgyMjQ0YSwgMHgzNDgwMGUyNCwgMHgzNDgwMGUyNH0sCi0JezB4MDAwMGE1YmMsIDB4NGI4MjI0NGMsIDB4NGI4MjI0NGMsIDB4Mzg4MDE2NDAsIDB4Mzg4MDE2NDB9LAotCXsweDAwMDBhNWMwLCAweDRlODIyNDZjLCAweDRlODIyNDZjLCAweDNjODAxNjYwLCAweDNjODAxNjYwfSwKLQl7MHgwMDAwYTVjNCwgMHg1MzgyMjY2YywgMHg1MzgyMjY2YywgMHgzZjgwMTg2MSwgMHgzZjgwMTg2MX0sCi0JezB4MDAwMGE1YzgsIDB4NTc4MjI4NmMsIDB4NTc4MjI4NmMsIDB4NDM4MDFhODEsIDB4NDM4MDFhODF9LAotCXsweDAwMDBhNWNjLCAweDVjODQyODZiLCAweDVjODQyODZiLCAweDQ3ODAxYTgzLCAweDQ3ODAxYTgzfSwKLQl7MHgwMDAwYTVkMCwgMHg2MTg0MmE2YywgMHg2MTg0MmE2YywgMHg0YTgwMWM4NCwgMHg0YTgwMWM4NH0sCi0JezB4MDAwMGE1ZDQsIDB4NjY4NjJhNmMsIDB4NjY4NjJhNmMsIDB4NGU4MDFjZTMsIDB4NGU4MDFjZTN9LAotCXsweDAwMDBhNWQ4LCAweDZiODYyZTZjLCAweDZiODYyZTZjLCAweDUyODAxY2U1LCAweDUyODAxY2U1fSwKLQl7MHgwMDAwYTVkYywgMHg3MDg2MzA4YywgMHg3MDg2MzA4YywgMHg1NjgwMWNlOSwgMHg1NjgwMWNlOX0sCi0JezB4MDAwMGE1ZTAsIDB4NzM4YTMwOGEsIDB4NzM4YTMwOGEsIDB4NWE4MDFjZWIsIDB4NWE4MDFjZWJ9LAotCXsweDAwMDBhNWU0LCAweDc3OGEzMDhjLCAweDc3OGEzMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKLQl7MHgwMDAwYTVlOCwgMHg3NzhhMzA4YywgMHg3NzhhMzA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCi0JezB4MDAwMGE1ZWMsIDB4Nzc4YTMwOGMsIDB4Nzc4YTMwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAotCXsweDAwMDBhNWYwLCAweDc3OGEzMDhjLCAweDc3OGEzMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKLQl7MHgwMDAwYTVmNCwgMHg3NzhhMzA4YywgMHg3NzhhMzA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCi0JezB4MDAwMGE1ZjgsIDB4Nzc4YTMwOGMsIDB4Nzc4YTMwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAotCXsweDAwMDBhNWZjLCAweDc3OGEzMDhjLCAweDc3OGEzMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKLQl7MHgwMDAxNjA0NCwgMHgwMTI0OTJkNCwgMHgwMTI0OTJkNCwgMHgwMTI0OTJkNCwgMHgwMTI0OTJkNH0sCi0JezB4MDAwMTYwNDgsIDB4NjQwMDAwMDEsIDB4NjQwMDAwMDEsIDB4NjQwMDAwMDEsIDB4NjQwMDAwMDF9LAotCXsweDAwMDE2MDY4LCAweDZkYjZkYjZjLCAweDZkYjZkYjZjLCAweDZkYjZkYjZjLCAweDZkYjZkYjZjfSwKLQl7MHgwMDAxNjQ0NCwgMHgwMTI0OTJkNCwgMHgwMTI0OTJkNCwgMHgwMTI0OTJkNCwgMHgwMTI0OTJkNH0sCi0JezB4MDAwMTY0NDgsIDB4NjQwMDAwMDEsIDB4NjQwMDAwMDEsIDB4NjQwMDAwMDEsIDB4NjQwMDAwMDF9LAotCXsweDAwMDE2NDY4LCAweDZkYjZkYjZjLCAweDZkYjZkYjZjLCAweDZkYjZkYjZjLCAweDZkYjZkYjZjfSwKLQl7MHgwMDAxNjg0NCwgMHgwMTI0OTJkNCwgMHgwMTI0OTJkNCwgMHgwMTI0OTJkNCwgMHgwMTI0OTJkNH0sCi0JezB4MDAwMTY4NDgsIDB4NjQwMDAwMDEsIDB4NjQwMDAwMDEsIDB4NjQwMDAwMDEsIDB4NjQwMDAwMDF9LAotCXsweDAwMDE2ODY4LCAweDZkYjZkYjZjLCAweDZkYjZkYjZjLCAweDZkYjZkYjZjLCAweDZkYjZkYjZjfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5MzAwXzJwMF9tYWNfY29yZVtdWzJdID0gewotCS8qIEFkZHIgICAgICBhbGxtb2RlcyAgKi8KLQl7MHgwMDAwMDAwOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDAwMzAsIDB4MDAwMjAwODV9LAotCXsweDAwMDAwMDM0LCAweDAwMDAwMDA1fSwKLQl7MHgwMDAwMDA0MCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDAwNDQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDAwMDQ4LCAweDAwMDAwMDA4fSwKLQl7MHgwMDAwMDA0YywgMHgwMDAwMDAxMH0sCi0JezB4MDAwMDAwNTAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDAxMDQwLCAweDAwMmZmYzBmfSwKLQl7MHgwMDAwMTA0NCwgMHgwMDJmZmMwZn0sCi0JezB4MDAwMDEwNDgsIDB4MDAyZmZjMGZ9LAotCXsweDAwMDAxMDRjLCAweDAwMmZmYzBmfSwKLQl7MHgwMDAwMTA1MCwgMHgwMDJmZmMwZn0sCi0JezB4MDAwMDEwNTQsIDB4MDAyZmZjMGZ9LAotCXsweDAwMDAxMDU4LCAweDAwMmZmYzBmfSwKLQl7MHgwMDAwMTA1YywgMHgwMDJmZmMwZn0sCi0JezB4MDAwMDEwNjAsIDB4MDAyZmZjMGZ9LAotCXsweDAwMDAxMDY0LCAweDAwMmZmYzBmfSwKLQl7MHgwMDAwMTBmMCwgMHgwMDAwMDEwMH0sCi0JezB4MDAwMDEyNzAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDAxMmIwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwMTJmMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDE0M2MsIDB4MDAwMDAwMDB9LAotCXsweDAwMDAxNDdjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODAwMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwMDQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MDA4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODAwYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwMTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MDIwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODAzOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwM2MsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MDQwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODA0NCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwNDgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MDRjLCAweGZmZmZmZmZmfSwKLQl7MHgwMDAwODA1NCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwNTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MDVjLCAweDAwMGZjNzhmfSwKLQl7MHgwMDAwODA2MCwgMHgwMDAwMDAwZn0sCi0JezB4MDAwMDgwNjQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MDcwLCAweDAwMDAwMzEwfSwKLQl7MHgwMDAwODA3NCwgMHgwMDAwMDAyMH0sCi0JezB4MDAwMDgwNzgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MDljLCAweDAwMDAwMDBmfSwKLQl7MHgwMDAwODBhMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwYTQsIDB4MDJmZjAwMDB9LAotCXsweDAwMDA4MGE4LCAweDBlMDcwNjA1fSwKLQl7MHgwMDAwODBhYywgMHgwMDAwMDAwZH0sCi0JezB4MDAwMDgwYjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MGI0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODBiOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwYmMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MGMwLCAweDJhODAwMDAwfSwKLQl7MHgwMDAwODBjNCwgMHgwNjkwMDE2OH0sCi0JezB4MDAwMDgwYzgsIDB4MTM4ODFjMjB9LAotCXsweDAwMDA4MGNjLCAweDAxZjQwMDAwfSwKLQl7MHgwMDAwODBkMCwgMHgwMDI1MjUwMH0sCi0JezB4MDAwMDgwZDQsIDB4MDBhMDAwMDB9LAotCXsweDAwMDA4MGQ4LCAweDAwNDAwMDAwfSwKLQl7MHgwMDAwODBkYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwZTAsIDB4ZmZmZmZmZmZ9LAotCXsweDAwMDA4MGU0LCAweDAwMDBmZmZmfSwKLQl7MHgwMDAwODBlOCwgMHgzZjNmM2YzZn0sCi0JezB4MDAwMDgwZWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MGYwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODBmNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwZmMsIDB4MDAwMjAwMDB9LAotCXsweDAwMDA4MTAwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODEwOCwgMHgwMDAwMDA1Mn0sCi0JezB4MDAwMDgxMGMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MTEwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODExNCwgMHgwMDAwMDdmZn0sCi0JezB4MDAwMDgxMTgsIDB4MDAwMDAwYWF9LAotCXsweDAwMDA4MTFjLCAweDAwMDAzMjEwfSwKLQl7MHgwMDAwODEyNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgxMjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MTJjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODEzMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgxMzQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MTM4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODEzYywgMHgwMDAwZmZmZn0sCi0JezB4MDAwMDgxNDQsIDB4ZmZmZmZmZmZ9LAotCXsweDAwMDA4MTY4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODE2YywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgxNzAsIDB4MTg0ODYyMDB9LAotCXsweDAwMDA4MTc0LCAweDMzMzMyMjEwfSwKLQl7MHgwMDAwODE3OCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgxN2MsIDB4MDAwMjAwMDB9LAotCXsweDAwMDA4MWMwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODFjNCwgMHgzMzMzMjIxMH0sCi0JezB4MDAwMDgxYzgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MWNjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODFkNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgxZWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MWYwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODFmNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgxZjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MWZjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODI0MCwgMHgwMDEwMDAwMH0sCi0JezB4MDAwMDgyNDQsIDB4MDAxMGY0MjR9LAotCXsweDAwMDA4MjQ4LCAweDAwMDAwODAwfSwKLQl7MHgwMDAwODI0YywgMHgwMDAxZTg0OH0sCi0JezB4MDAwMDgyNTAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MjU0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODI1OCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgyNWMsIDB4NDAwMDAwMDB9LAotCXsweDAwMDA4MjYwLCAweDAwMDgwOTIyfSwKLQl7MHgwMDAwODI2NCwgMHg5OGEwMDAxMH0sCi0JezB4MDAwMDgyNjgsIDB4ZmZmZmZmZmZ9LAotCXsweDAwMDA4MjZjLCAweDAwMDBmZmZmfSwKLQl7MHgwMDAwODI3MCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgyNzQsIDB4NDAwMDAwMDB9LAotCXsweDAwMDA4Mjc4LCAweDAwM2U0MTgwfSwKLQl7MHgwMDAwODI3YywgMHgwMDAwMDAwNH0sCi0JezB4MDAwMDgyODQsIDB4MDAwMDAwMmN9LAotCXsweDAwMDA4Mjg4LCAweDAwMDAwMDJjfSwKLQl7MHgwMDAwODI4YywgMHgwMDAwMDBmZn0sCi0JezB4MDAwMDgyOTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4Mjk4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODI5YywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgzMDAsIDB4MDAwMDAxNDB9LAotCXsweDAwMDA4MzE0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODMxYywgMHgwMDAwMDEwZH0sCi0JezB4MDAwMDgzMjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MzJjLCAweDAwMDAwMDA3fSwKLQl7MHgwMDAwODMzMCwgMHgwMDAwMDMwMn0sCi0JezB4MDAwMDgzMzQsIDB4MDAwMDA3MDB9LAotCXsweDAwMDA4MzM4LCAweDAwZmYwMDAwfSwKLQl7MHgwMDAwODMzYywgMHgwMjQwMDAwMH0sCi0JezB4MDAwMDgzNDAsIDB4MDAwMTA3ZmZ9LAotCXsweDAwMDA4MzQ0LCAweGFhNDgxMDVifSwKLQl7MHgwMDAwODM0OCwgMHgwMDhmMDAwMH0sCi0JezB4MDAwMDgzNWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MzYwLCAweGZmZmZmZmZmfSwKLQl7MHgwMDAwODM2NCwgMHhmZmZmZmZmZn0sCi0JezB4MDAwMDgzNjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MzcwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODM3NCwgMHgwMDAwMDBmZn0sCi0JezB4MDAwMDgzNzgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MzdjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODM4MCwgMHhmZmZmZmZmZn0sCi0JezB4MDAwMDgzODQsIDB4ZmZmZmZmZmZ9LAotCXsweDAwMDA4MzkwLCAweGZmZmZmZmZmfSwKLQl7MHgwMDAwODM5NCwgMHhmZmZmZmZmZn0sCi0JezB4MDAwMDgzOTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MzljLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODNhMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgzYTQsIDB4MDAwMGZhMTR9LAotCXsweDAwMDA4M2E4LCAweDAwMGYwYzAwfSwKLQl7MHgwMDAwODNhYywgMHgzMzMzMjIxMH0sCi0JezB4MDAwMDgzYjAsIDB4MzMzMzIyMTB9LAotCXsweDAwMDA4M2I0LCAweDMzMzMyMjEwfSwKLQl7MHgwMDAwODNiOCwgMHgzMzMzMjIxMH0sCi0JezB4MDAwMDgzYmMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4M2MwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODNjNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgzYzgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4M2NjLCAweDAwMDAwMjAwfSwKLQl7MHgwMDAwODNkMCwgMHgwMDAzMDFmZn0sCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIGFyOTMwMENvbW1vbl93b194bG5hX3J4X2dhaW5fdGFibGVfMnAwW11bMl0gPSB7Ci0JLyogQWRkciAgICAgIGFsbG1vZGVzICAqLwotCXsweDAwMDBhMDAwLCAweDAwMDEwMDAwfSwKLQl7MHgwMDAwYTAwNCwgMHgwMDAzMDAwMn0sCi0JezB4MDAwMGEwMDgsIDB4MDAwNTAwMDR9LAotCXsweDAwMDBhMDBjLCAweDAwODEwMDgwfSwKLQl7MHgwMDAwYTAxMCwgMHgwMDgzMDA4Mn0sCi0JezB4MDAwMGEwMTQsIDB4MDE4MTAxODB9LAotCXsweDAwMDBhMDE4LCAweDAxODMwMTgyfSwKLQl7MHgwMDAwYTAxYywgMHgwMTg1MDE4NH0sCi0JezB4MDAwMGEwMjAsIDB4MDE4OTAxODh9LAotCXsweDAwMDBhMDI0LCAweDAxOGIwMThhfSwKLQl7MHgwMDAwYTAyOCwgMHgwMThkMDE4Y30sCi0JezB4MDAwMGEwMmMsIDB4MDM4MjAxOTB9LAotCXsweDAwMDBhMDMwLCAweDAzODQwMzgzfSwKLQl7MHgwMDAwYTAzNCwgMHgwMzg4MDM4NX0sCi0JezB4MDAwMGEwMzgsIDB4MDM4YTAzODl9LAotCXsweDAwMDBhMDNjLCAweDAzOGMwMzhifSwKLQl7MHgwMDAwYTA0MCwgMHgwMzkwMDM4ZH0sCi0JezB4MDAwMGEwNDQsIDB4MDM5MjAzOTF9LAotCXsweDAwMDBhMDQ4LCAweDAzOTQwMzkzfSwKLQl7MHgwMDAwYTA0YywgMHgwMzk2MDM5NX0sCi0JezB4MDAwMGEwNTAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMDU0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTA1OCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwNWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMDYwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTA2NCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwNjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMDZjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTA3MCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwNzQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMDc4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTA3YywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwODAsIDB4MjkyOTI5Mjl9LAotCXsweDAwMDBhMDg0LCAweDI5MjkyOTI5fSwKLQl7MHgwMDAwYTA4OCwgMHgyOTI5MjkyOX0sCi0JezB4MDAwMGEwOGMsIDB4MjkyOTI5Mjl9LAotCXsweDAwMDBhMDkwLCAweDIyMjkyOTI5fSwKLQl7MHgwMDAwYTA5NCwgMHgxZDFkMjIyMn0sCi0JezB4MDAwMGEwOTgsIDB4MGMxMTExMTd9LAotCXsweDAwMDBhMDljLCAweDAwMDMwMzAzfSwKLQl7MHgwMDAwYTBhMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwYTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMGE4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTBhYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwYjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMGI0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTBiOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwYmMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMGMwLCAweDAwMWYwMDAwfSwKLQl7MHgwMDAwYTBjNCwgMHgwMTAwMDEwMX0sCi0JezB4MDAwMGEwYzgsIDB4MDExZTAxMWZ9LAotCXsweDAwMDBhMGNjLCAweDAxMWMwMTFkfSwKLQl7MHgwMDAwYTBkMCwgMHgwMjAzMDIwNH0sCi0JezB4MDAwMGEwZDQsIDB4MDIwMTAyMDJ9LAotCXsweDAwMDBhMGQ4LCAweDAyMWYwMjAwfSwKLQl7MHgwMDAwYTBkYywgMHgwMzAyMDIxZX0sCi0JezB4MDAwMGEwZTAsIDB4MDMwMDAzMDF9LAotCXsweDAwMDBhMGU0LCAweDAzMWUwMzFmfSwKLQl7MHgwMDAwYTBlOCwgMHgwNDAyMDMxZH0sCi0JezB4MDAwMGEwZWMsIDB4MDQwMDA0MDF9LAotCXsweDAwMDBhMGYwLCAweDA0MWUwNDFmfSwKLQl7MHgwMDAwYTBmNCwgMHgwNTAyMDQxZH0sCi0JezB4MDAwMGEwZjgsIDB4MDUwMDA1MDF9LAotCXsweDAwMDBhMGZjLCAweDA1MWUwNTFmfSwKLQl7MHgwMDAwYTEwMCwgMHgwNjAxMDYwMn0sCi0JezB4MDAwMGExMDQsIDB4MDYxZjA2MDB9LAotCXsweDAwMDBhMTA4LCAweDA2MWQwNjFlfSwKLQl7MHgwMDAwYTEwYywgMHgwNzAyMDcwM30sCi0JezB4MDAwMGExMTAsIDB4MDcwMDA3MDF9LAotCXsweDAwMDBhMTE0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTExOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExMWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTIwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTEyNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExMjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTJjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTEzMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExMzQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTM4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTEzYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExNDAsIDB4MDAxZjAwMDB9LAotCXsweDAwMDBhMTQ0LCAweDAxMDAwMTAxfSwKLQl7MHgwMDAwYTE0OCwgMHgwMTFlMDExZn0sCi0JezB4MDAwMGExNGMsIDB4MDExYzAxMWR9LAotCXsweDAwMDBhMTUwLCAweDAyMDMwMjA0fSwKLQl7MHgwMDAwYTE1NCwgMHgwMjAxMDIwMn0sCi0JezB4MDAwMGExNTgsIDB4MDIxZjAyMDB9LAotCXsweDAwMDBhMTVjLCAweDAzMDIwMjFlfSwKLQl7MHgwMDAwYTE2MCwgMHgwMzAwMDMwMX0sCi0JezB4MDAwMGExNjQsIDB4MDMxZTAzMWZ9LAotCXsweDAwMDBhMTY4LCAweDA0MDIwMzFkfSwKLQl7MHgwMDAwYTE2YywgMHgwNDAwMDQwMX0sCi0JezB4MDAwMGExNzAsIDB4MDQxZTA0MWZ9LAotCXsweDAwMDBhMTc0LCAweDA1MDIwNDFkfSwKLQl7MHgwMDAwYTE3OCwgMHgwNTAwMDUwMX0sCi0JezB4MDAwMGExN2MsIDB4MDUxZTA1MWZ9LAotCXsweDAwMDBhMTgwLCAweDA2MDEwNjAyfSwKLQl7MHgwMDAwYTE4NCwgMHgwNjFmMDYwMH0sCi0JezB4MDAwMGExODgsIDB4MDYxZDA2MWV9LAotCXsweDAwMDBhMThjLCAweDA3MDIwNzAzfSwKLQl7MHgwMDAwYTE5MCwgMHgwNzAwMDcwMX0sCi0JezB4MDAwMGExOTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTk4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTE5YywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExYTAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWE0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFhOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExYWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWIwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFiNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExYjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWJjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFjMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExYzQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWM4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFjYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExZDAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWQ0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFkOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExZGMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWUwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFlNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExZTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWVjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFmMCwgMHgwMDAwMDM5Nn0sCi0JezB4MDAwMGExZjQsIDB4MDAwMDAzOTZ9LAotCXsweDAwMDBhMWY4LCAweDAwMDAwMzk2fSwKLQl7MHgwMDAwYTFmYywgMHgwMDAwMDE5Nn0sCi0JezB4MDAwMGIwMDAsIDB4MDAwMTAwMDB9LAotCXsweDAwMDBiMDA0LCAweDAwMDMwMDAyfSwKLQl7MHgwMDAwYjAwOCwgMHgwMDA1MDAwNH0sCi0JezB4MDAwMGIwMGMsIDB4MDA4MTAwODB9LAotCXsweDAwMDBiMDEwLCAweDAwODMwMDgyfSwKLQl7MHgwMDAwYjAxNCwgMHgwMTgxMDE4MH0sCi0JezB4MDAwMGIwMTgsIDB4MDE4MzAxODJ9LAotCXsweDAwMDBiMDFjLCAweDAxODUwMTg0fSwKLQl7MHgwMDAwYjAyMCwgMHgwMjgxMDI4MH0sCi0JezB4MDAwMGIwMjQsIDB4MDI4MzAyODJ9LAotCXsweDAwMDBiMDI4LCAweDAyODUwMjg0fSwKLQl7MHgwMDAwYjAyYywgMHgwMjg5MDI4OH0sCi0JezB4MDAwMGIwMzAsIDB4MDI4YjAyOGF9LAotCXsweDAwMDBiMDM0LCAweDAzODgwMjhjfSwKLQl7MHgwMDAwYjAzOCwgMHgwMzhhMDM4OX0sCi0JezB4MDAwMGIwM2MsIDB4MDM4YzAzOGJ9LAotCXsweDAwMDBiMDQwLCAweDAzOTAwMzhkfSwKLQl7MHgwMDAwYjA0NCwgMHgwMzkyMDM5MX0sCi0JezB4MDAwMGIwNDgsIDB4MDM5NDAzOTN9LAotCXsweDAwMDBiMDRjLCAweDAzOTYwMzk1fSwKLQl7MHgwMDAwYjA1MCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIwNTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMDU4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjA1YywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIwNjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMDY0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjA2OCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIwNmMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMDcwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjA3NCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIwNzgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMDdjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjA4MCwgMHgzMjMyMzIzMn0sCi0JezB4MDAwMGIwODQsIDB4MmYyZjMyMzJ9LAotCXsweDAwMDBiMDg4LCAweDIzMjgyYTJkfSwKLQl7MHgwMDAwYjA4YywgMHgxYzFlMjEyM30sCi0JezB4MDAwMGIwOTAsIDB4MTQxNzE5MTl9LAotCXsweDAwMDBiMDk0LCAweDBlMGUxMjE0fSwKLQl7MHgwMDAwYjA5OCwgMHgwMzA1MDcwN30sCi0JezB4MDAwMGIwOWMsIDB4MDAwMzAzMDN9LAotCXsweDAwMDBiMGEwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjBhNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIwYTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMGFjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjBiMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIwYjQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMGI4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjBiYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIwYzAsIDB4MDAzZjAwMjB9LAotCXsweDAwMDBiMGM0LCAweDAwNDAwMDQxfSwKLQl7MHgwMDAwYjBjOCwgMHgwMTQwMDA1Zn0sCi0JezB4MDAwMGIwY2MsIDB4MDE2MDAxNWZ9LAotCXsweDAwMDBiMGQwLCAweDAxN2UwMTdmfSwKLQl7MHgwMDAwYjBkNCwgMHgwMjQxMDI0Mn0sCi0JezB4MDAwMGIwZDgsIDB4MDI1ZjAyNDB9LAotCXsweDAwMDBiMGRjLCAweDAyN2YwMjYwfSwKLQl7MHgwMDAwYjBlMCwgMHgwMzQxMDI3ZX0sCi0JezB4MDAwMGIwZTQsIDB4MDM1ZjAzNDB9LAotCXsweDAwMDBiMGU4LCAweDAzN2YwMzYwfSwKLQl7MHgwMDAwYjBlYywgMHgwNDQwMDQ0MX0sCi0JezB4MDAwMGIwZjAsIDB4MDQ2MDA0NWZ9LAotCXsweDAwMDBiMGY0LCAweDA1NDEwNDdmfSwKLQl7MHgwMDAwYjBmOCwgMHgwNTVmMDU0MH0sCi0JezB4MDAwMGIwZmMsIDB4MDU3ZjA1NjB9LAotCXsweDAwMDBiMTAwLCAweDA2NDAwNjQxfSwKLQl7MHgwMDAwYjEwNCwgMHgwNjYwMDY1Zn0sCi0JezB4MDAwMGIxMDgsIDB4MDY3ZTA2N2Z9LAotCXsweDAwMDBiMTBjLCAweDA3NDEwNzQyfSwKLQl7MHgwMDAwYjExMCwgMHgwNzVmMDc0MH0sCi0JezB4MDAwMGIxMTQsIDB4MDc3ZjA3NjB9LAotCXsweDAwMDBiMTE4LCAweDA3ODAwNzgxfSwKLQl7MHgwMDAwYjExYywgMHgwN2EwMDc5Zn0sCi0JezB4MDAwMGIxMjAsIDB4MDdjMTA3YmZ9LAotCXsweDAwMDBiMTI0LCAweDAwMDAwN2MwfSwKLQl7MHgwMDAwYjEyOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIxMmMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMTMwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjEzNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIxMzgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMTNjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjE0MCwgMHgwMDNmMDAyMH0sCi0JezB4MDAwMGIxNDQsIDB4MDA0MDAwNDF9LAotCXsweDAwMDBiMTQ4LCAweDAxNDAwMDVmfSwKLQl7MHgwMDAwYjE0YywgMHgwMTYwMDE1Zn0sCi0JezB4MDAwMGIxNTAsIDB4MDE3ZTAxN2Z9LAotCXsweDAwMDBiMTU0LCAweDAyNDEwMjQyfSwKLQl7MHgwMDAwYjE1OCwgMHgwMjVmMDI0MH0sCi0JezB4MDAwMGIxNWMsIDB4MDI3ZjAyNjB9LAotCXsweDAwMDBiMTYwLCAweDAzNDEwMjdlfSwKLQl7MHgwMDAwYjE2NCwgMHgwMzVmMDM0MH0sCi0JezB4MDAwMGIxNjgsIDB4MDM3ZjAzNjB9LAotCXsweDAwMDBiMTZjLCAweDA0NDAwNDQxfSwKLQl7MHgwMDAwYjE3MCwgMHgwNDYwMDQ1Zn0sCi0JezB4MDAwMGIxNzQsIDB4MDU0MTA0N2Z9LAotCXsweDAwMDBiMTc4LCAweDA1NWYwNTQwfSwKLQl7MHgwMDAwYjE3YywgMHgwNTdmMDU2MH0sCi0JezB4MDAwMGIxODAsIDB4MDY0MDA2NDF9LAotCXsweDAwMDBiMTg0LCAweDA2NjAwNjVmfSwKLQl7MHgwMDAwYjE4OCwgMHgwNjdlMDY3Zn0sCi0JezB4MDAwMGIxOGMsIDB4MDc0MTA3NDJ9LAotCXsweDAwMDBiMTkwLCAweDA3NWYwNzQwfSwKLQl7MHgwMDAwYjE5NCwgMHgwNzdmMDc2MH0sCi0JezB4MDAwMGIxOTgsIDB4MDc4MDA3ODF9LAotCXsweDAwMDBiMTljLCAweDA3YTAwNzlmfSwKLQl7MHgwMDAwYjFhMCwgMHgwN2MxMDdiZn0sCi0JezB4MDAwMGIxYTQsIDB4MDAwMDA3YzB9LAotCXsweDAwMDBiMWE4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjFhYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIxYjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMWI0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjFiOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIxYmMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMWMwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjFjNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIxYzgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMWNjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjFkMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIxZDQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMWQ4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjFkYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIxZTAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMWU0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYjFlOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGIxZWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBiMWYwLCAweDAwMDAwMzk2fSwKLQl7MHgwMDAwYjFmNCwgMHgwMDAwMDM5Nn0sCi0JezB4MDAwMGIxZjgsIDB4MDAwMDAzOTZ9LAotCXsweDAwMDBiMWZjLCAweDAwMDAwMTk2fSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5MzAwXzJwMF9zb2NfcHJlYW1ibGVbXVsyXSA9IHsKLQkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCi0JezB4MDAwMDQwYTQsIDB4MDBhMGMxYzl9LAotCXsweDAwMDA3MDA4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwNzAyMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDcwMzQsIDB4MDAwMDAwMDJ9LAotCXsweDAwMDA3MDM4LCAweDAwMDAwNGMyfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5MzAwUGNpZVBoeV9wbGxfb25fY2xrcmVxX2Rpc2FibGVfTDFfMnAwW11bMl0gPSB7Ci0JLyogQWRkciAgICAgIGFsbG1vZGVzICAqLwotCXsweDAwMDA0MDQwLCAweDA4MjEyZTVlfSwKLQl7MHgwMDAwNDA0MCwgMHgwMDA4MDAzYn0sCi0JezB4MDAwMDQwNDQsIDB4MDAwMDAwMDB9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBhcjkzMDBQY2llUGh5X2Nsa3JlcV9lbmFibGVfTDFfMnAwW11bMl0gPSB7Ci0JLyogQWRkciAgICAgIGFsbG1vZGVzICAqLwotCXsweDAwMDA0MDQwLCAweDA4MjUzZTVlfSwKLQl7MHgwMDAwNDA0MCwgMHgwMDA4MDAzYn0sCi0JezB4MDAwMDQwNDQsIDB4MDAwMDAwMDB9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBhcjkzMDBQY2llUGh5X2Nsa3JlcV9kaXNhYmxlX0wxXzJwMFtdWzJdID0gewotCS8qIEFkZHIgICAgICBhbGxtb2RlcyAgKi8KLQl7MHgwMDAwNDA0MCwgMHgwODIxM2U1ZX0sCi0JezB4MDAwMDQwNDAsIDB4MDAwODAwM2J9LAotCXsweDAwMDA0MDQ0LCAweDAwMDAwMDAwfSwKLX07Ci0KLSNlbmRpZiAvKiBJTklUVkFMU185MDAzX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX21hYy5jCmluZGV4IDM3YmEzNzQuLjViOTk1YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19tYWMuYwpAQCAtOTAsNiArOTAsOCBAQAogCQkJCSAgTUFQX0lTUl9TMl9DU1QpOwogCQkJbWFzazIgfD0gKChpc3IyICYgQVJfSVNSX1MyX1RTRk9PUikgPj4KIAkJCQkgIE1BUF9JU1JfUzJfVFNGT09SKTsKKwkJCW1hc2syIHw9ICgoaXNyMiAmIEFSX0lTUl9TMl9CQl9XQVRDSERPRykgPj4KKwkJCQkgIE1BUF9JU1JfUzJfQkJfV0FUQ0hET0cpOwogCiAJCQlpZiAoIShwQ2FwLT5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JBQ19TVVBQT1JURUQpKSB7CiAJCQkJUkVHX1dSSVRFKGFoLCBBUl9JU1JfUzIsIGlzcjIpOwpAQCAtMTY3LDYgKzE2OSw5IEBACiAKIAkJCSh2b2lkKSBSRUdfUkVBRChhaCwgQVJfSVNSKTsKIAkJfQorCisJCWlmICgqbWFza2VkICYgQVRIOUtfSU5UX0JCX1dBVENIRE9HKQorCQkJYXI5MDAzX2h3X2JiX3dhdGNoZG9nX3JlYWQoYWgpOwogCX0KIAogCWlmIChzeW5jX2NhdXNlKSB7CkBAIC00NjUsNiArNDcwLDE0IEBACiAJCWFkcy0+Y3RsMTEgJj0gfkFSX1ZpcnRNb3JlRnJhZzsKIH0KIAordm9pZCBhcjkwMDNfaHdfc2V0X3BhcHJkX3R4ZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgdm9pZCAqZHMsIHU4IGNoYWlucykKK3sKKwlzdHJ1Y3QgYXI5MDAzX3R4YyAqYWRzID0gZHM7CisKKwlhZHMtPmN0bDEyIHw9IFNNKGNoYWlucywgQVJfUEFQUkRDaGFpbk1hc2spOworfQorRVhQT1JUX1NZTUJPTChhcjkwMDNfaHdfc2V0X3BhcHJkX3R4ZGVzYyk7CisKIHZvaWQgYXI5MDAzX2h3X2F0dGFjaF9tYWNfb3BzKHN0cnVjdCBhdGhfaHcgKmh3KQogewogCXN0cnVjdCBhdGhfaHdfb3BzICpvcHMgPSBhdGg5a19od19vcHMoaHcpOwpAQCAtNTY2LDEyICs1NzksMzkgQEAKIAkJcnhzLT5yc19mbGFncyB8PSBBVEg5S19SWF9ERUNSWVBUX0JVU1k7CiAKIAlpZiAoKHJ4c3AtPnN0YXR1czExICYgQVJfUnhGcmFtZU9LKSA9PSAwKSB7CisJCS8qCisJCSAqIEFSX0NSQ0VyciB3aWxsIGJldCBzZXQgdG8gdHJ1ZSBpZiB3ZSdyZSBvbiB0aGUgbGFzdAorCQkgKiBzdWJmcmFtZSBhbmQgdGhlIEFSX1Bvc3REZWxpbUNSQ0VyciBpcyBjYXVnaHQuCisJCSAqIEluIGEgd2F5IHRoaXMgYWxzbyBnaXZlcyB1cyBhIGd1YXJhbnRlZSB0aGF0IHdoZW4KKwkJICogKCEoQVJfQ1JDRXJyKSAmJiAoQVJfUG9zdERlbGltQ1JDRXJyKSkgd2UgY2Fubm90CisJCSAqIHBvc3NpYmx5IGJlIHJldmlld2luZyB0aGUgbGFzdCBzdWJmcmFtZS4gQVJfQ1JDRXJyCisJCSAqIGlzIHRoZSBDUkMgb2YgdGhlIGFjdHVhbCBkYXRhLgorCQkgKi8KIAkJaWYgKHJ4c3AtPnN0YXR1czExICYgQVJfQ1JDRXJyKSB7CiAJCQlyeHMtPnJzX3N0YXR1cyB8PSBBVEg5S19SWEVSUl9DUkM7CiAJCX0gZWxzZSBpZiAocnhzcC0+c3RhdHVzMTEgJiBBUl9QSFlFcnIpIHsKLQkJCXJ4cy0+cnNfc3RhdHVzIHw9IEFUSDlLX1JYRVJSX1BIWTsKIAkJCXBoeWVyciA9IE1TKHJ4c3AtPnN0YXR1czExLCBBUl9QSFlFcnJDb2RlKTsKLQkJCXJ4cy0+cnNfcGh5ZXJyID0gcGh5ZXJyOworCQkJLyoKKwkJCSAqIElmIHdlIHJlYWNoIGEgcG9pbnQgaGVyZSB3aGVyZSBBUl9Qb3N0RGVsaW1DUkNFcnIgaXMKKwkJCSAqIHRydWUgaXQgaW1wbGllcyB3ZSdyZSAqbm90KiBvbiB0aGUgbGFzdCBzdWJmcmFtZS4gSW4KKwkJCSAqIGluIHRoYXQgY2FzZSB0aGF0IHdlIGtub3cgYWxyZWFkeSB0aGF0IHRoZSBDUkMgb2YKKwkJCSAqIHRoZSBmcmFtZSB3YXMgT0ssIGFuZCBNQUMgd291bGQgc2VuZCBhbiBBQ0sgZm9yIHRoYXQKKwkJCSAqIHN1YmZyYW1lLCBldmVuIGlmIHdlIGRpZCBnZXQgYSBwaHkgZXJyb3Igb2YgdHlwZQorCQkJICogQVRIOUtfUEhZRVJSX09GRE1fUkVTVEFSVC4gVGhpcyBpcyBvbmx5IGFwcGxpY2FibGUKKwkJCSAqIHRvIGZyYW1lIHRoYXQgYXJlIHByaW9yIHRvIHRoZSBsYXN0IHN1YmZyYW1lLgorCQkJICogVGhlIEFSX1Bvc3REZWxpbUNSQ0VyciBpcyB0aGUgQ1JDIGZvciB0aGUgTVBEVQorCQkJICogZGVsaW1pdGVyLCB3aGljaCBjb250YWlucyB0aGUgNCByZXNlcnZlZCBiaXRzLAorCQkJICogdGhlIE1QRFUgbGVuZ3RoICgxMiBiaXRzKSwgYW5kIGZvbGxvd3MgdGhlIE1QRFUKKwkJCSAqIGRlbGltaXRlciBmb3IgYW4gQS1NUERVIHN1YmZyYW1lICgweDRFID0gJ04nIEFTQ0lJKS4KKwkJCSAqLworCQkJaWYgKChwaHllcnIgPT0gQVRIOUtfUEhZRVJSX09GRE1fUkVTVEFSVCkgJiYKKwkJCSAgICAocnhzcC0+c3RhdHVzMTEgJiBBUl9Qb3N0RGVsaW1DUkNFcnIpKSB7CisJCQkJcnhzLT5yc19waHllcnIgPSAwOworCQkJfSBlbHNlIHsKKwkJCQlyeHMtPnJzX3N0YXR1cyB8PSBBVEg5S19SWEVSUl9QSFk7CisJCQkJcnhzLT5yc19waHllcnIgPSBwaHllcnI7CisJCQl9CisKIAkJfSBlbHNlIGlmIChyeHNwLT5zdGF0dXMxMSAmIEFSX0RlY3J5cHRDUkNFcnIpIHsKIAkJCXJ4cy0+cnNfc3RhdHVzIHw9IEFUSDlLX1JYRVJSX0RFQ1JZUFQ7CiAJCX0gZWxzZSBpZiAocnhzcC0+c3RhdHVzMTEgJiBBUl9NaWNoYWVsRXJyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX21hYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19tYWMuaAppbmRleCBmMTc1NThiLi45ZjJjZWE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX21hYy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfbWFjLmgKQEAgLTMzLDEzICszMywxNCBAQAogI2RlZmluZSBBUl9UeERlc2NJZF9TCTE2CiAjZGVmaW5lIEFSX1R4UHRyQ2hrU3VtCTB4MDAwMGZmZmYKIAotI2RlZmluZSBBUl9UeFRpZAkweGYwMDAwMDAwCi0jZGVmaW5lIEFSX1R4VGlkX1MJMjgKLQogI2RlZmluZSBBUl9Mb3dSeENoYWluCTB4MDAwMDQwMDAKIAogI2RlZmluZSBBUl9Ob3RfU291bmRpbmcJMHgyMDAwMDAwMAogCisvKiBjdGwgMTIgKi8KKyNkZWZpbmUgQVJfUEFQUkRDaGFpbk1hc2sJMHgwMDAwMGUwMAorI2RlZmluZSBBUl9QQVBSRENoYWluTWFza19TCTkKKwogI2RlZmluZSBNQVBfSVNSX1MyX0NTVCAgICAgICAgICA2CiAjZGVmaW5lIE1BUF9JU1JfUzJfR1RUICAgICAgICAgIDYKICNkZWZpbmUgTUFQX0lTUl9TMl9USU0gICAgICAgICAgMwpAQCAtNDcsNiArNDgsNyBAQAogI2RlZmluZSBNQVBfSVNSX1MyX0RUSU1TWU5DICAgICA3CiAjZGVmaW5lIE1BUF9JU1JfUzJfRFRJTSAgICAgICAgIDcKICNkZWZpbmUgTUFQX0lTUl9TMl9UU0ZPT1IgICAgICAgNAorI2RlZmluZSBNQVBfSVNSX1MyX0JCX1dBVENIRE9HICA2CiAKICNkZWZpbmUgQVI5MDAzVFhDX0NPTlNUKF9kcykgKChjb25zdCBzdHJ1Y3QgYXI5MDAzX3R4YyAqKSBfZHMpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfcGFwcmQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfcGFwcmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWUwYzg2NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfcGFwcmQuYwpAQCAtMCwwICsxLDcxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiaHcuaCIKKyNpbmNsdWRlICJhcjkwMDNfcGh5LmgiCisKK3ZvaWQgYXI5MDAzX3BhcHJkX2VuYWJsZShzdHJ1Y3QgYXRoX2h3ICphaCwgYm9vbCB2YWwpCit7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1BBUFJEX0NUUkwwX0IwLAorCQkgICAgICBBUl9QSFlfUEFQUkRfQ1RSTDBfUEFQUkRfRU5BQkxFLCAhIXZhbCk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1BBUFJEX0NUUkwwX0IxLAorCQkgICAgICBBUl9QSFlfUEFQUkRfQ1RSTDBfUEFQUkRfRU5BQkxFLCAhIXZhbCk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1BBUFJEX0NUUkwwX0IyLAorCQkgICAgICBBUl9QSFlfUEFQUkRfQ1RSTDBfUEFQUkRfRU5BQkxFLCAhIXZhbCk7Cit9CitFWFBPUlRfU1lNQk9MKGFyOTAwM19wYXByZF9lbmFibGUpOworCitzdGF0aWMgdm9pZCBhcjkwMDNfcGFwcmRfc2V0dXBfc2luZ2xlX3RhYmxlKHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXN0cnVjdCBhcjkzMDBfZWVwcm9tICplZXAgPSAmYWgtPmVlcHJvbS5hcjkzMDBfZWVwOworCXN0cnVjdCBhcjkzMDBfbW9kYWxfZWVwX2hlYWRlciAqaGRyOworCWNvbnN0IHUzMiBjdHJsMFszXSA9IHsKKwkJQVJfUEhZX1BBUFJEX0NUUkwwX0IwLAorCQlBUl9QSFlfUEFQUkRfQ1RSTDBfQjEsCisJCUFSX1BIWV9QQVBSRF9DVFJMMF9CMgorCX07CisJY29uc3QgdTMyIGN0cmwxWzNdID0geworCQlBUl9QSFlfUEFQUkRfQ1RSTDFfQjAsCisJCUFSX1BIWV9QQVBSRF9DVFJMMV9CMSwKKwkJQVJfUEhZX1BBUFJEX0NUUkwxX0IyCisJfTsKKwl1MzIgYW1fbWFzaywgaHQ0MF9tYXNrOworCWludCBpOworCisJaWYgKGFoLT5jdXJjaGFuICYmIElTX0NIQU5fNUdIWihhaC0+Y3VyY2hhbikpCisJCWhkciA9ICZlZXAtPm1vZGFsSGVhZGVyNUc7CisJZWxzZQorCQloZHIgPSAmZWVwLT5tb2RhbEhlYWRlcjJHOworCisJYW1fbWFzayA9IGxlMzJfdG9fY3B1KGhkci0+cGFwZFJhdGVNYXNrSHQyMCk7CisJaHQ0MF9tYXNrID0gbGUzMl90b19jcHUoaGRyLT5wYXBkUmF0ZU1hc2tIdDQwKTsKKworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QQVBSRF9BTTJBTSwgQVJfUEhZX1BBUFJEX0FNMkFNX01BU0ssIGFtX21hc2spOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QQVBSRF9BTTJQTSwgQVJfUEhZX1BBUFJEX0FNMlBNX01BU0ssIGFtX21hc2spOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QQVBSRF9IVDQwLCBBUl9QSFlfUEFQUkRfSFQ0MF9NQVNLLCBodDQwX21hc2spOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlSRUdfUk1XX0ZJRUxEKGFoLCBjdHJsMFtpXSwKKwkJCSAgICAgIEFSX1BIWV9QQVBSRF9DVFJMMF9VU0VfU0lOR0xFX1RBQkxFX01BU0ssIDEpOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBjdHJsMVtpXSwKKwkJCSAgICAgIEFSX1BIWV9QQVBSRF9DVFJMMV9BREFQVElWRV9BTTJQTV9FTkFCTEUsIDEpOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBjdHJsMVtpXSwKKwkJCSAgICAgIEFSX1BIWV9QQVBSRF9DVFJMMV9BREFQVElWRV9BTTJBTV9FTkFCTEUsIDEpOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBjdHJsMVtpXSwKKwkJCSAgICAgIEFSX1BIWV9QQVBSRF9DVFJMMV9BREFQVElWRV9TQ0FMSU5HX0VOQSwgMCk7CisJCVJFR19STVdfRklFTEQoYWgsIGN0cmwxW2ldLAorCQkJICAgICAgQVJfUEhZX1BBUFJEX0NUUkwxX1BBX0dBSU5fU0NBTEVfRkFDVF9NQVNLLCAxODEpOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBjdHJsMVtpXSwKKwkJCSAgICAgIEFSX1BIWV9QQVBSRF9DVFJMMV9QQVBSRF9NQUdfU0NBTEVfRkFDVCwgMzYxKTsKKwkJUkVHX1JNV19GSUVMRChhaCwgY3RybDFbaV0sCisJCQkgICAgICBBUl9QSFlfUEFQUkRfQ1RSTDFfQURBUFRJVkVfU0NBTElOR19FTkEsIDApOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBjdHJsMFtpXSwKKwkJCSAgICAgIEFSX1BIWV9QQVBSRF9DVFJMMF9QQVBSRF9NQUdfVEhSU0gsIDMpOworCX0KKworCWFyOTAwM19wYXByZF9lbmFibGUoYWgsIGZhbHNlKTsKKworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEwxLAorCQkgICAgICBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMMV9DRl9QQVBSRF9MQl9TS0lQLCAweDMwKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMMSwKKwkJICAgICAgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDFfQ0ZfUEFQUkRfTEJfRU5BQkxFLCAxKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMMSwKKwkJICAgICAgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDFfQ0ZfUEFQUkRfVFhfR0FJTl9GT1JDRSwgMSk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDEsCisJCSAgICAgIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEwxX0NGX1BBUFJEX1JYX0JCX0dBSU5fRk9SQ0UsIDApOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEwxLAorCQkgICAgICBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMMV9DRl9QQVBSRF9JUUNPUlJfRU5BQkxFLCAwKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMMSwKKwkJICAgICAgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDFfQ0ZfUEFQUkRfQUdDMl9TRVRUTElORywgMjgpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEwxLAorCQkgICAgICBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMMV9DRl9DRl9QQVBSRF9UUkFJTl9FTkFCTEUsIDEpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEwyLAorCQkgICAgICBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMMl9DRl9QQVBSRF9JTklUX1JYX0JCX0dBSU4sIDE0Nyk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDMsCisJCSAgICAgIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEwzX0NGX1BBUFJEX0ZJTkVfQ09SUl9MRU4sIDQpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEwzLAorCQkgICAgICBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMM19DRl9QQVBSRF9DT0FSU0VfQ09SUl9MRU4sIDQpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEwzLAorCQkgICAgICBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMM19DRl9QQVBSRF9OVU1fQ09SUl9TVEFHRVMsIDcpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEwzLAorCQkgICAgICBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMM19DRl9QQVBSRF9NSU5fTE9PUEJBQ0tfREVMLCAxKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMMywKKwkJICAgICAgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDNfQ0ZfUEFQUkRfUVVJQ0tfRFJPUCwgLTYpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEwzLAorCQkgICAgICBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMM19DRl9QQVBSRF9BRENfREVTSVJFRF9TSVpFLAorCQkgICAgICAtMTUpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEwzLAorCQkgICAgICBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMM19DRl9QQVBSRF9CQlRYTUlYX0RJU0FCTEUsIDEpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEw0LAorCQkgICAgICBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMNF9DRl9QQVBSRF9TQUZFVFlfREVMVEEsIDApOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEw0LAorCQkgICAgICBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMNF9DRl9QQVBSRF9NSU5fQ09SUiwgNDAwKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMNCwKKwkJICAgICAgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDRfQ0ZfUEFQUkRfTlVNX1RSQUlOX1NBTVBMRVMsCisJCSAgICAgIDEwMCk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1BBUFJEX1BSRV9QT1NUX1NDQUxFXzBfQjAsCisJCSAgICAgIEFSX1BIWV9QQVBSRF9QUkVfUE9TVF9TQ0FMSU5HLCAyNjEzNzYpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QQVBSRF9QUkVfUE9TVF9TQ0FMRV8xX0IwLAorCQkgICAgICBBUl9QSFlfUEFQUkRfUFJFX1BPU1RfU0NBTElORywgMjQ4MDc5KTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUEFQUkRfUFJFX1BPU1RfU0NBTEVfMl9CMCwKKwkJICAgICAgQVJfUEhZX1BBUFJEX1BSRV9QT1NUX1NDQUxJTkcsIDIzMzc1OSk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1BBUFJEX1BSRV9QT1NUX1NDQUxFXzNfQjAsCisJCSAgICAgIEFSX1BIWV9QQVBSRF9QUkVfUE9TVF9TQ0FMSU5HLCAyMjA0NjQpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QQVBSRF9QUkVfUE9TVF9TQ0FMRV80X0IwLAorCQkgICAgICBBUl9QSFlfUEFQUkRfUFJFX1BPU1RfU0NBTElORywgMjA4MTk0KTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUEFQUkRfUFJFX1BPU1RfU0NBTEVfNV9CMCwKKwkJICAgICAgQVJfUEhZX1BBUFJEX1BSRV9QT1NUX1NDQUxJTkcsIDE5Njk0OSk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1BBUFJEX1BSRV9QT1NUX1NDQUxFXzZfQjAsCisJCSAgICAgIEFSX1BIWV9QQVBSRF9QUkVfUE9TVF9TQ0FMSU5HLCAxODU3MDYpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QQVBSRF9QUkVfUE9TVF9TQ0FMRV83X0IwLAorCQkgICAgICBBUl9QSFlfUEFQUkRfUFJFX1BPU1RfU0NBTElORywgMTc1NDg3KTsKK30KKworc3RhdGljIHZvaWQgYXI5MDAzX3BhcHJkX2dldF9nYWluX3RhYmxlKHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXUzMiAqZW50cnkgPSBhaC0+cGFwcmRfZ2Fpbl90YWJsZV9lbnRyaWVzOworCXU4ICppbmRleCA9IGFoLT5wYXByZF9nYWluX3RhYmxlX2luZGV4OworCXUzMiByZWcgPSBBUl9QSFlfVFhHQUlOX1RBQkxFOworCWludCBpOworCisJbWVtc2V0KGVudHJ5LCAwLCBzaXplb2YoYWgtPnBhcHJkX2dhaW5fdGFibGVfZW50cmllcykpOworCW1lbXNldChpbmRleCwgMCwgc2l6ZW9mKGFoLT5wYXByZF9nYWluX3RhYmxlX2luZGV4KSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQllbnRyeVtpXSA9IFJFR19SRUFEKGFoLCByZWcpOworCQlpbmRleFtpXSA9IChlbnRyeVtpXSA+PiAyNCkgJiAweGZmOworCQlyZWcgKz0gNDsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXI5MDAzX2dldF9kZXNpcmVkX2dhaW4oc3RydWN0IGF0aF9odyAqYWgsIGludCBjaGFpbiwKKwkJCQkJICAgIGludCB0YXJnZXRfcG93ZXIpCit7CisJaW50IG9scGNfZ2Fpbl9kZWx0YSA9IDA7CisJaW50IGFscGhhX3RoZXJtLCBhbHBoYV92b2x0OworCWludCB0aGVybV9jYWxfdmFsdWUsIHZvbHRfY2FsX3ZhbHVlOworCWludCB0aGVybV92YWx1ZSwgdm9sdF92YWx1ZTsKKwlpbnQgdGhlcm1hbF9nYWluX2NvcnIsIHZvbHRhZ2VfZ2Fpbl9jb3JyOworCWludCBkZXNpcmVkX3NjYWxlLCBkZXNpcmVkX2dhaW4gPSAwOworCXUzMiByZWc7CisKKwlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX1BBUFJEX1RSQUlORVJfU1RBVDEsCisJCSAgICBBUl9QSFlfUEFQUkRfVFJBSU5FUl9TVEFUMV9QQVBSRF9UUkFJTl9ET05FKTsKKwlkZXNpcmVkX3NjYWxlID0gUkVHX1JFQURfRklFTEQoYWgsIEFSX1BIWV9UUENfMTIsCisJCQkJICAgICAgIEFSX1BIWV9UUENfMTJfREVTSVJFRF9TQ0FMRV9IVDQwXzUpOworCWFscGhhX3RoZXJtID0gUkVHX1JFQURfRklFTEQoYWgsIEFSX1BIWV9UUENfMTksCisJCQkJICAgICBBUl9QSFlfVFBDXzE5X0FMUEhBX1RIRVJNKTsKKwlhbHBoYV92b2x0ID0gUkVHX1JFQURfRklFTEQoYWgsIEFSX1BIWV9UUENfMTksCisJCQkJICAgIEFSX1BIWV9UUENfMTlfQUxQSEFfVk9MVCk7CisJdGhlcm1fY2FsX3ZhbHVlID0gUkVHX1JFQURfRklFTEQoYWgsIEFSX1BIWV9UUENfMTgsCisJCQkJCSBBUl9QSFlfVFBDXzE4X1RIRVJNX0NBTF9WQUxVRSk7CisJdm9sdF9jYWxfdmFsdWUgPSBSRUdfUkVBRF9GSUVMRChhaCwgQVJfUEhZX1RQQ18xOCwKKwkJCQkJQVJfUEhZX1RQQ18xOF9WT0xUX0NBTF9WQUxVRSk7CisJdGhlcm1fdmFsdWUgPSBSRUdfUkVBRF9GSUVMRChhaCwgQVJfUEhZX0JCX1RIRVJNX0FEQ180LAorCQkJCSAgICAgQVJfUEhZX0JCX1RIRVJNX0FEQ180X0xBVEVTVF9USEVSTV9WQUxVRSk7CisJdm9sdF92YWx1ZSA9IFJFR19SRUFEX0ZJRUxEKGFoLCBBUl9QSFlfQkJfVEhFUk1fQURDXzQsCisJCQkJICAgIEFSX1BIWV9CQl9USEVSTV9BRENfNF9MQVRFU1RfVk9MVF9WQUxVRSk7CisKKwlpZiAoY2hhaW4gPT0gMCkKKwkJcmVnID0gQVJfUEhZX1RQQ18xMV9CMDsKKwllbHNlIGlmIChjaGFpbiA9PSAxKQorCQlyZWcgPSBBUl9QSFlfVFBDXzExX0IxOworCWVsc2UKKwkJcmVnID0gQVJfUEhZX1RQQ18xMV9CMjsKKworCW9scGNfZ2Fpbl9kZWx0YSA9IFJFR19SRUFEX0ZJRUxEKGFoLCByZWcsCisJCQkJCSBBUl9QSFlfVFBDXzExX09MUENfR0FJTl9ERUxUQSk7CisKKwlpZiAob2xwY19nYWluX2RlbHRhID49IDEyOCkKKwkJb2xwY19nYWluX2RlbHRhID0gb2xwY19nYWluX2RlbHRhIC0gMjU2OworCisJdGhlcm1hbF9nYWluX2NvcnIgPSAoYWxwaGFfdGhlcm0gKiAodGhlcm1fdmFsdWUgLSB0aGVybV9jYWxfdmFsdWUpICsKKwkJCSAgICAgKDI1NiAvIDIpKSAvIDI1NjsKKwl2b2x0YWdlX2dhaW5fY29yciA9IChhbHBoYV92b2x0ICogKHZvbHRfdmFsdWUgLSB2b2x0X2NhbF92YWx1ZSkgKworCQkJICAgICAoMTI4IC8gMikpIC8gMTI4OworCWRlc2lyZWRfZ2FpbiA9IHRhcmdldF9wb3dlciAtIG9scGNfZ2Fpbl9kZWx0YSAtIHRoZXJtYWxfZ2Fpbl9jb3JyIC0KKwkgICAgdm9sdGFnZV9nYWluX2NvcnIgKyBkZXNpcmVkX3NjYWxlOworCisJcmV0dXJuIGRlc2lyZWRfZ2FpbjsKK30KKworc3RhdGljIHZvaWQgYXI5MDAzX3R4X2ZvcmNlX2dhaW4oc3RydWN0IGF0aF9odyAqYWgsIHVuc2lnbmVkIGludCBnYWluX2luZGV4KQoreworCWludCBzZWxlY3RlZF9nYWluX2VudHJ5LCB0eGJiMWRiZ2FpbiwgdHhiYjZkYmdhaW4sIHR4bXhyZ2FpbjsKKwlpbnQgcGFkcnZnbkEsIHBhZHJ2Z25CLCBwYWRydmduQywgcGFkcnZnbkQ7CisJdTMyICpnYWluX3RhYmxlX2VudHJpZXMgPSBhaC0+cGFwcmRfZ2Fpbl90YWJsZV9lbnRyaWVzOworCisJc2VsZWN0ZWRfZ2Fpbl9lbnRyeSA9IGdhaW5fdGFibGVfZW50cmllc1tnYWluX2luZGV4XTsKKwl0eGJiMWRiZ2FpbiA9IHNlbGVjdGVkX2dhaW5fZW50cnkgJiAweDc7CisJdHhiYjZkYmdhaW4gPSAoc2VsZWN0ZWRfZ2Fpbl9lbnRyeSA+PiAzKSAmIDB4MzsKKwl0eG14cmdhaW4gPSAoc2VsZWN0ZWRfZ2Fpbl9lbnRyeSA+PiA1KSAmIDB4ZjsKKwlwYWRydmduQSA9IChzZWxlY3RlZF9nYWluX2VudHJ5ID4+IDkpICYgMHhmOworCXBhZHJ2Z25CID0gKHNlbGVjdGVkX2dhaW5fZW50cnkgPj4gMTMpICYgMHhmOworCXBhZHJ2Z25DID0gKHNlbGVjdGVkX2dhaW5fZW50cnkgPj4gMTcpICYgMHhmOworCXBhZHJ2Z25EID0gKHNlbGVjdGVkX2dhaW5fZW50cnkgPj4gMjEpICYgMHgzOworCisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX0ZPUkNFRF9HQUlOLAorCQkgICAgICBBUl9QSFlfVFhfRk9SQ0VEX0dBSU5fRk9SQ0VEX1RYQkIxREJHQUlOLCB0eGJiMWRiZ2Fpbik7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX0ZPUkNFRF9HQUlOLAorCQkgICAgICBBUl9QSFlfVFhfRk9SQ0VEX0dBSU5fRk9SQ0VEX1RYQkI2REJHQUlOLCB0eGJiNmRiZ2Fpbik7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX0ZPUkNFRF9HQUlOLAorCQkgICAgICBBUl9QSFlfVFhfRk9SQ0VEX0dBSU5fRk9SQ0VEX1RYTVhSR0FJTiwgdHhteHJnYWluKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFhfRk9SQ0VEX0dBSU4sCisJCSAgICAgIEFSX1BIWV9UWF9GT1JDRURfR0FJTl9GT1JDRURfUEFEUlZHTkEsIHBhZHJ2Z25BKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFhfRk9SQ0VEX0dBSU4sCisJCSAgICAgIEFSX1BIWV9UWF9GT1JDRURfR0FJTl9GT1JDRURfUEFEUlZHTkIsIHBhZHJ2Z25CKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFhfRk9SQ0VEX0dBSU4sCisJCSAgICAgIEFSX1BIWV9UWF9GT1JDRURfR0FJTl9GT1JDRURfUEFEUlZHTkMsIHBhZHJ2Z25DKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFhfRk9SQ0VEX0dBSU4sCisJCSAgICAgIEFSX1BIWV9UWF9GT1JDRURfR0FJTl9GT1JDRURfUEFEUlZHTkQsIHBhZHJ2Z25EKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFhfRk9SQ0VEX0dBSU4sCisJCSAgICAgIEFSX1BIWV9UWF9GT1JDRURfR0FJTl9GT1JDRURfRU5BQkxFX1BBTCwgMCk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX0ZPUkNFRF9HQUlOLAorCQkgICAgICBBUl9QSFlfVFhfRk9SQ0VEX0dBSU5fRk9SQ0VfVFhfR0FJTiwgMCk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ18xLCBBUl9QSFlfVFBDXzFfRk9SQ0VEX0RBQ19HQUlOLCAwKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDXzEsIEFSX1BIWV9UUENfMV9GT1JDRV9EQUNfR0FJTiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZpbmRfZXhwbihpbnQgbnVtKQoreworCXJldHVybiBmbHMobnVtKSAtIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZpbmRfcHJvcGVyX3NjYWxlKGludCBleHBuLCBpbnQgTikKK3sKKwlyZXR1cm4gKGV4cG4gPiBOKSA/IGV4cG4gLSAxMCA6IDA7Cit9CisKKyNkZWZpbmUgTlVNX0JJTiAyMworCitzdGF0aWMgYm9vbCBjcmVhdGVfcGFfY3VydmUodTMyICpkYXRhX0wsIHUzMiAqZGF0YV9VLCB1MzIgKnBhX3RhYmxlLCB1MTYgKmdhaW4pCit7CisJdW5zaWduZWQgaW50IHRocmVzaF9hY2N1bV9jbnQ7CisJaW50IHhfZXN0W05VTV9CSU4gKyAxXSwgWVtOVU1fQklOICsgMV0sIHRoZXRhW05VTV9CSU4gKyAxXTsKKwlpbnQgUEFfaW5bTlVNX0JJTiArIDFdOworCWludCBCMV90bXBbTlVNX0JJTiArIDFdLCBCMl90bXBbTlVNX0JJTiArIDFdOworCXVuc2lnbmVkIGludCBCMV9hYnNfbWF4LCBCMl9hYnNfbWF4OworCWludCBtYXhfaW5kZXgsIHNjYWxlX2ZhY3RvcjsKKwlpbnQgeV9lc3RbTlVNX0JJTiArIDFdOworCWludCB4X2VzdF9meHAxX25vbmxpbiwgeF90aWxkZVtOVU1fQklOICsgMV07CisJdW5zaWduZWQgaW50IHhfdGlsZGVfYWJzOworCWludCBHX2Z4cCwgWV9pbnRlcmNlcHQsIG9yZGVyX3hfYnlfeSwgTSwgSSwgTCwgc3VtX3lfc3FyLCBzdW1feV9xdWFkOworCWludCBRX3gsIFFfQjEsIFFfQjIsIGJldGFfcmF3LCBhbHBoYV9yYXcsIHNjYWxlX0I7CisJaW50IFFfc2NhbGVfQiwgUV9iZXRhLCBRX2FscGhhLCBhbHBoYSwgYmV0YSwgb3JkZXJfMSwgb3JkZXJfMjsKKwlpbnQgb3JkZXIxXzV4LCBvcmRlcjJfM3gsIG9yZGVyMV81eF9yZW0sIG9yZGVyMl8zeF9yZW07CisJaW50IHk1LCB5MywgdG1wOworCWludCB0aGV0YV9sb3dfYmluID0gMDsKKwlpbnQgaTsKKworCS8qIGRpc3JlZ2FyZCBhbnkgYmluIHRoYXQgY29udGFpbnMgPD0gMTYgc2FtcGxlcyAqLworCXRocmVzaF9hY2N1bV9jbnQgPSAxNjsKKwlzY2FsZV9mYWN0b3IgPSA1OworCW1heF9pbmRleCA9IDA7CisJbWVtc2V0KHRoZXRhLCAwLCBzaXplb2YodGhldGEpKTsKKwltZW1zZXQoeF9lc3QsIDAsIHNpemVvZih4X2VzdCkpOworCW1lbXNldChZLCAwLCBzaXplb2YoWSkpOworCW1lbXNldCh5X2VzdCwgMCwgc2l6ZW9mKHlfZXN0KSk7CisJbWVtc2V0KHhfdGlsZGUsIDAsIHNpemVvZih4X3RpbGRlKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0JJTjsgaSsrKSB7CisJCXMzMiBhY2N1bV9jbnQsIGFjY3VtX3R4LCBhY2N1bV9yeCwgYWNjdW1fYW5nOworCisJCS8qIG51bWJlciBvZiBzYW1wbGVzICovCisJCWFjY3VtX2NudCA9IGRhdGFfTFtpXSAmIDB4ZmZmZjsKKworCQlpZiAoYWNjdW1fY250IDw9IHRocmVzaF9hY2N1bV9jbnQpCisJCQljb250aW51ZTsKKworCQkvKiBzdW0odHggYW1wbGl0dWRlKSAqLworCQlhY2N1bV90eCA9ICgoZGF0YV9MW2ldID4+IDE2KSAmIDB4ZmZmZikgfAorCQkgICAgKChkYXRhX1VbaV0gJiAweDdmZikgPDwgMTYpOworCisJCS8qIHN1bShyeCBhbXBsaXR1ZGUgZGlzdGFuY2UgdG8gbG93ZXIgYmluIGVkZ2UpICovCisJCWFjY3VtX3J4ID0gKChkYXRhX1VbaV0gPj4gMTEpICYgMHgxZikgfAorCQkgICAgKChkYXRhX0xbaSArIDIzXSAmIDB4ZmZmZikgPDwgNSk7CisKKwkJLyogc3VtKGFuZ2xlcykgKi8KKwkJYWNjdW1fYW5nID0gKChkYXRhX0xbaSArIDIzXSA+PiAxNikgJiAweGZmZmYpIHwKKwkJICAgICgoZGF0YV9VW2kgKyAyM10gJiAweDdmZikgPDwgMTYpOworCisJCWFjY3VtX3R4IDw8PSBzY2FsZV9mYWN0b3I7CisJCWFjY3VtX3J4IDw8PSBzY2FsZV9mYWN0b3I7CisJCXhfZXN0W2kgKyAxXSA9ICgoKGFjY3VtX3R4ICsgYWNjdW1fY250KSAvIGFjY3VtX2NudCkgKyAzMikgPj4KKwkJICAgIHNjYWxlX2ZhY3RvcjsKKworCQlZW2kgKyAxXSA9ICgoKChhY2N1bV9yeCArIGFjY3VtX2NudCkgLyBhY2N1bV9jbnQpICsgMzIpID4+CisJCQkgICAgc2NhbGVfZmFjdG9yKSArCisJCQkgICAgKDEgPDwgc2NhbGVfZmFjdG9yKSAqIG1heF9pbmRleCArIDE2OworCisJCWlmIChhY2N1bV9hbmcgPj0gKDEgPDwgMjYpKQorCQkJYWNjdW1fYW5nIC09IDEgPDwgMjc7CisKKwkJdGhldGFbaSArIDFdID0gKChhY2N1bV9hbmcgKiAoMSA8PCBzY2FsZV9mYWN0b3IpKSArIGFjY3VtX2NudCkgLworCQkgICAgYWNjdW1fY250OworCisJCW1heF9pbmRleCsrOworCX0KKworCS8qCisJICogRmluZCBhdmVyYWdlIHRoZXRhIG9mIGZpcnN0IDUgYmluIGFuZCBhbGwgb2YgdGhvc2UgdG8gc2FtZSB2YWx1ZS4KKwkgKiBDdXJ2ZSBpcyBsaW5lYXIgYXQgdGhhdCByYW5nZS4KKwkgKi8KKwlmb3IgKGkgPSAxOyBpIDwgNjsgaSsrKQorCQl0aGV0YV9sb3dfYmluICs9IHRoZXRhW2ldOworCisJdGhldGFfbG93X2JpbiA9IHRoZXRhX2xvd19iaW4gLyA1OworCWZvciAoaSA9IDE7IGkgPCA2OyBpKyspCisJCXRoZXRhW2ldID0gdGhldGFfbG93X2JpbjsKKworCS8qIFNldCB2YWx1ZXMgYXQgb3JpZ2luICovCisJdGhldGFbMF0gPSB0aGV0YV9sb3dfYmluOworCWZvciAoaSA9IDA7IGkgPD0gbWF4X2luZGV4OyBpKyspCisJCXRoZXRhW2ldIC09IHRoZXRhX2xvd19iaW47CisKKwl4X2VzdFswXSA9IDA7CisJWVswXSA9IDA7CisJc2NhbGVfZmFjdG9yID0gODsKKworCS8qIGxvdyBzaWduYWwgZ2FpbiAqLworCWlmICh4X2VzdFs2XSA9PSB4X2VzdFszXSkKKwkJcmV0dXJuIGZhbHNlOworCisJR19meHAgPQorCSAgICAoKChZWzZdIC0gWVszXSkgKiAxIDw8IHNjYWxlX2ZhY3RvcikgKworCSAgICAgKHhfZXN0WzZdIC0geF9lc3RbM10pKSAvICh4X2VzdFs2XSAtIHhfZXN0WzNdKTsKKworCVlfaW50ZXJjZXB0ID0KKwkgICAgKEdfZnhwICogKHhfZXN0WzBdIC0geF9lc3RbM10pICsKKwkgICAgICgxIDw8IHNjYWxlX2ZhY3RvcikpIC8gKDEgPDwgc2NhbGVfZmFjdG9yKSArIFlbM107CisKKwlmb3IgKGkgPSAwOyBpIDw9IG1heF9pbmRleDsgaSsrKQorCQl5X2VzdFtpXSA9IFlbaV0gLSBZX2ludGVyY2VwdDsKKworCWZvciAoaSA9IDA7IGkgPD0gMzsgaSsrKSB7CisJCXlfZXN0W2ldID0gaSAqIDMyOworCisJCS8qIHByZXZlbnQgZGl2aXNpb24gYnkgemVybyAqLworCQlpZiAoR19meHAgPT0gMCkKKwkJCXJldHVybiBmYWxzZTsKKworCQl4X2VzdFtpXSA9ICgoeV9lc3RbaV0gKiAxIDw8IHNjYWxlX2ZhY3RvcikgKyBHX2Z4cCkgLyBHX2Z4cDsKKwl9CisKKwl4X2VzdF9meHAxX25vbmxpbiA9CisJICAgIHhfZXN0W21heF9pbmRleF0gLSAoKDEgPDwgc2NhbGVfZmFjdG9yKSAqIHlfZXN0W21heF9pbmRleF0gKworCQkJCUdfZnhwKSAvIEdfZnhwOworCisJb3JkZXJfeF9ieV95ID0KKwkgICAgKHhfZXN0X2Z4cDFfbm9ubGluICsgeV9lc3RbbWF4X2luZGV4XSkgLyB5X2VzdFttYXhfaW5kZXhdOworCisJaWYgKG9yZGVyX3hfYnlfeSA9PSAwKQorCQlNID0gMTA7CisJZWxzZSBpZiAob3JkZXJfeF9ieV95ID09IDEpCisJCU0gPSA5OworCWVsc2UKKwkJTSA9IDg7CisKKwlJID0gKG1heF9pbmRleCA+IDE1KSA/IDcgOiBtYXhfaW5kZXggPj4gMTsKKwlMID0gbWF4X2luZGV4IC0gSTsKKwlzY2FsZV9mYWN0b3IgPSA4OworCXN1bV95X3NxciA9IDA7CisJc3VtX3lfcXVhZCA9IDA7CisJeF90aWxkZV9hYnMgPSAwOworCisJZm9yIChpID0gMDsgaSA8PSBMOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IHlfc3FyOworCQl1bnNpZ25lZCBpbnQgeV9xdWFkOworCQl1bnNpZ25lZCBpbnQgdG1wX2FiczsKKworCQkvKiBwcmV2ZW50IGRpdmlzaW9uIGJ5IHplcm8gKi8KKwkJaWYgKHlfZXN0W2kgKyBJXSA9PSAwKQorCQkJcmV0dXJuIGZhbHNlOworCisJCXhfZXN0X2Z4cDFfbm9ubGluID0KKwkJICAgIHhfZXN0W2kgKyBJXSAtICgoMSA8PCBzY2FsZV9mYWN0b3IpICogeV9lc3RbaSArIEldICsKKwkJCQkgICAgR19meHApIC8gR19meHA7CisKKwkJeF90aWxkZVtpXSA9CisJCSAgICAoeF9lc3RfZnhwMV9ub25saW4gKiAoMSA8PCBNKSArIHlfZXN0W2kgKyBJXSkgLyB5X2VzdFtpICsKKwkJCQkJCQkJCSAgSV07CisJCXhfdGlsZGVbaV0gPQorCQkgICAgKHhfdGlsZGVbaV0gKiAoMSA8PCBNKSArIHlfZXN0W2kgKyBJXSkgLyB5X2VzdFtpICsgSV07CisJCXhfdGlsZGVbaV0gPQorCQkgICAgKHhfdGlsZGVbaV0gKiAoMSA8PCBNKSArIHlfZXN0W2kgKyBJXSkgLyB5X2VzdFtpICsgSV07CisJCXlfc3FyID0KKwkJICAgICh5X2VzdFtpICsgSV0gKiB5X2VzdFtpICsgSV0gKworCQkgICAgIChzY2FsZV9mYWN0b3IgKiBzY2FsZV9mYWN0b3IpKSAvIChzY2FsZV9mYWN0b3IgKgorCQkJCQkJICAgICAgIHNjYWxlX2ZhY3Rvcik7CisJCXRtcF9hYnMgPSBhYnMoeF90aWxkZVtpXSk7CisJCWlmICh0bXBfYWJzID4geF90aWxkZV9hYnMpCisJCQl4X3RpbGRlX2FicyA9IHRtcF9hYnM7CisKKwkJeV9xdWFkID0geV9zcXIgKiB5X3NxcjsKKwkJc3VtX3lfc3FyID0gc3VtX3lfc3FyICsgeV9zcXI7CisJCXN1bV95X3F1YWQgPSBzdW1feV9xdWFkICsgeV9xdWFkOworCQlCMV90bXBbaV0gPSB5X3NxciAqIChMICsgMSk7CisJCUIyX3RtcFtpXSA9IHlfc3FyOworCX0KKworCUIxX2Fic19tYXggPSAwOworCUIyX2Fic19tYXggPSAwOworCWZvciAoaSA9IDA7IGkgPD0gTDsgaSsrKSB7CisJCWludCBhYnNfdmFsOworCisJCUIxX3RtcFtpXSAtPSBzdW1feV9zcXI7CisJCUIyX3RtcFtpXSA9IHN1bV95X3F1YWQgLSBzdW1feV9zcXIgKiBCMl90bXBbaV07CisKKwkJYWJzX3ZhbCA9IGFicyhCMV90bXBbaV0pOworCQlpZiAoYWJzX3ZhbCA+IEIxX2Fic19tYXgpCisJCQlCMV9hYnNfbWF4ID0gYWJzX3ZhbDsKKworCQlhYnNfdmFsID0gYWJzKEIyX3RtcFtpXSk7CisJCWlmIChhYnNfdmFsID4gQjJfYWJzX21heCkKKwkJCUIyX2Fic19tYXggPSBhYnNfdmFsOworCX0KKworCVFfeCA9IGZpbmRfcHJvcGVyX3NjYWxlKGZpbmRfZXhwbih4X3RpbGRlX2FicyksIDEwKTsKKwlRX0IxID0gZmluZF9wcm9wZXJfc2NhbGUoZmluZF9leHBuKEIxX2Fic19tYXgpLCAxMCk7CisJUV9CMiA9IGZpbmRfcHJvcGVyX3NjYWxlKGZpbmRfZXhwbihCMl9hYnNfbWF4KSwgMTApOworCisJYmV0YV9yYXcgPSAwOworCWFscGhhX3JhdyA9IDA7CisJZm9yIChpID0gMDsgaSA8PSBMOyBpKyspIHsKKwkJeF90aWxkZVtpXSA9IHhfdGlsZGVbaV0gLyAoMSA8PCBRX3gpOworCQlCMV90bXBbaV0gPSBCMV90bXBbaV0gLyAoMSA8PCBRX0IxKTsKKwkJQjJfdG1wW2ldID0gQjJfdG1wW2ldIC8gKDEgPDwgUV9CMik7CisJCWJldGFfcmF3ID0gYmV0YV9yYXcgKyBCMV90bXBbaV0gKiB4X3RpbGRlW2ldOworCQlhbHBoYV9yYXcgPSBhbHBoYV9yYXcgKyBCMl90bXBbaV0gKiB4X3RpbGRlW2ldOworCX0KKworCXNjYWxlX0IgPQorCSAgICAoKHN1bV95X3F1YWQgLyBzY2FsZV9mYWN0b3IpICogKEwgKyAxKSAtCisJICAgICAoc3VtX3lfc3FyIC8gc2NhbGVfZmFjdG9yKSAqIHN1bV95X3NxcikgKiBzY2FsZV9mYWN0b3I7CisKKwlRX3NjYWxlX0IgPSBmaW5kX3Byb3Blcl9zY2FsZShmaW5kX2V4cG4oYWJzKHNjYWxlX0IpKSwgMTApOworCXNjYWxlX0IgPSBzY2FsZV9CIC8gKDEgPDwgUV9zY2FsZV9CKTsKKwlRX2JldGEgPSBmaW5kX3Byb3Blcl9zY2FsZShmaW5kX2V4cG4oYWJzKGJldGFfcmF3KSksIDEwKTsKKwlRX2FscGhhID0gZmluZF9wcm9wZXJfc2NhbGUoZmluZF9leHBuKGFicyhhbHBoYV9yYXcpKSwgMTApOworCWJldGFfcmF3ID0gYmV0YV9yYXcgLyAoMSA8PCBRX2JldGEpOworCWFscGhhX3JhdyA9IGFscGhhX3JhdyAvICgxIDw8IFFfYWxwaGEpOworCWFscGhhID0gKGFscGhhX3JhdyA8PCAxMCkgLyBzY2FsZV9COworCWJldGEgPSAoYmV0YV9yYXcgPDwgMTApIC8gc2NhbGVfQjsKKwlvcmRlcl8xID0gMyAqIE0gLSBRX3ggLSBRX0IxIC0gUV9iZXRhICsgMTAgKyBRX3NjYWxlX0I7CisJb3JkZXJfMiA9IDMgKiBNIC0gUV94IC0gUV9CMiAtIFFfYWxwaGEgKyAxMCArIFFfc2NhbGVfQjsKKwlvcmRlcjFfNXggPSBvcmRlcl8xIC8gNTsKKwlvcmRlcjJfM3ggPSBvcmRlcl8yIC8gMzsKKwlvcmRlcjFfNXhfcmVtID0gb3JkZXJfMSAtIDUgKiBvcmRlcjFfNXg7CisJb3JkZXIyXzN4X3JlbSA9IG9yZGVyXzIgLSAzICogb3JkZXIyXzN4OworCisJZm9yIChpID0gMDsgaSA8IFBBUFJEX1RBQkxFX1NaOyBpKyspIHsKKwkJdG1wID0gaSAqIDMyOworCQl5NSA9ICgoYmV0YSAqIHRtcCkgPj4gNikgPj4gb3JkZXIxXzV4OworCQl5NSA9ICh5NSAqIHRtcCkgPj4gb3JkZXIxXzV4OworCQl5NSA9ICh5NSAqIHRtcCkgPj4gb3JkZXIxXzV4OworCQl5NSA9ICh5NSAqIHRtcCkgPj4gb3JkZXIxXzV4OworCQl5NSA9ICh5NSAqIHRtcCkgPj4gb3JkZXIxXzV4OworCQl5NSA9IHk1ID4+IG9yZGVyMV81eF9yZW07CisJCXkzID0gKGFscGhhICogdG1wKSA+PiBvcmRlcjJfM3g7CisJCXkzID0gKHkzICogdG1wKSA+PiBvcmRlcjJfM3g7CisJCXkzID0gKHkzICogdG1wKSA+PiBvcmRlcjJfM3g7CisJCXkzID0geTMgPj4gb3JkZXIyXzN4X3JlbTsKKwkJUEFfaW5baV0gPSB5NSArIHkzICsgKDI1NiAqIHRtcCkgLyBHX2Z4cDsKKworCQlpZiAoaSA+PSAyKSB7CisJCQl0bXAgPSBQQV9pbltpXSAtIFBBX2luW2kgLSAxXTsKKwkJCWlmICh0bXAgPCAwKQorCQkJCVBBX2luW2ldID0KKwkJCQkgICAgUEFfaW5baSAtIDFdICsgKFBBX2luW2kgLSAxXSAtCisJCQkJCQkgICAgUEFfaW5baSAtIDJdKTsKKwkJfQorCisJCVBBX2luW2ldID0gKFBBX2luW2ldIDwgMTQwMCkgPyBQQV9pbltpXSA6IDE0MDA7CisJfQorCisJYmV0YV9yYXcgPSAwOworCWFscGhhX3JhdyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDw9IEw7IGkrKykgeworCQlpbnQgdGhldGFfdGlsZGUgPQorCQkgICAgKCh0aGV0YVtpICsgSV0gPDwgTSkgKyB5X2VzdFtpICsgSV0pIC8geV9lc3RbaSArIEldOworCQl0aGV0YV90aWxkZSA9CisJCSAgICAoKHRoZXRhX3RpbGRlIDw8IE0pICsgeV9lc3RbaSArIEldKSAvIHlfZXN0W2kgKyBJXTsKKwkJdGhldGFfdGlsZGUgPQorCQkgICAgKCh0aGV0YV90aWxkZSA8PCBNKSArIHlfZXN0W2kgKyBJXSkgLyB5X2VzdFtpICsgSV07CisJCWJldGFfcmF3ID0gYmV0YV9yYXcgKyBCMV90bXBbaV0gKiB0aGV0YV90aWxkZTsKKwkJYWxwaGFfcmF3ID0gYWxwaGFfcmF3ICsgQjJfdG1wW2ldICogdGhldGFfdGlsZGU7CisJfQorCisJUV9iZXRhID0gZmluZF9wcm9wZXJfc2NhbGUoZmluZF9leHBuKGFicyhiZXRhX3JhdykpLCAxMCk7CisJUV9hbHBoYSA9IGZpbmRfcHJvcGVyX3NjYWxlKGZpbmRfZXhwbihhYnMoYWxwaGFfcmF3KSksIDEwKTsKKwliZXRhX3JhdyA9IGJldGFfcmF3IC8gKDEgPDwgUV9iZXRhKTsKKwlhbHBoYV9yYXcgPSBhbHBoYV9yYXcgLyAoMSA8PCBRX2FscGhhKTsKKworCWFscGhhID0gKGFscGhhX3JhdyA8PCAxMCkgLyBzY2FsZV9COworCWJldGEgPSAoYmV0YV9yYXcgPDwgMTApIC8gc2NhbGVfQjsKKwlvcmRlcl8xID0gMyAqIE0gLSBRX3ggLSBRX0IxIC0gUV9iZXRhICsgMTAgKyBRX3NjYWxlX0IgKyA1OworCW9yZGVyXzIgPSAzICogTSAtIFFfeCAtIFFfQjIgLSBRX2FscGhhICsgMTAgKyBRX3NjYWxlX0IgKyA1OworCW9yZGVyMV81eCA9IG9yZGVyXzEgLyA1OworCW9yZGVyMl8zeCA9IG9yZGVyXzIgLyAzOworCW9yZGVyMV81eF9yZW0gPSBvcmRlcl8xIC0gNSAqIG9yZGVyMV81eDsKKwlvcmRlcjJfM3hfcmVtID0gb3JkZXJfMiAtIDMgKiBvcmRlcjJfM3g7CisKKwlmb3IgKGkgPSAwOyBpIDwgUEFQUkRfVEFCTEVfU1o7IGkrKykgeworCQlpbnQgUEFfYW5nbGU7CisKKwkJLyogcGFfdGFibGVbNF0gaXMgY2FsY3VsYXRlZCBmcm9tIFBBX2FuZ2xlIGZvciBpPTUgKi8KKwkJaWYgKGkgPT0gNCkKKwkJCWNvbnRpbnVlOworCisJCXRtcCA9IGkgKiAzMjsKKwkJaWYgKGJldGEgPiAwKQorCQkJeTUgPSAoKChiZXRhICogdG1wIC0gNjQpID4+IDYpIC0KKwkJCSAgICAgICgxIDw8IG9yZGVyMV81eCkpIC8gKDEgPDwgb3JkZXIxXzV4KTsKKwkJZWxzZQorCQkJeTUgPSAoKCgoYmV0YSAqIHRtcCAtIDY0KSA+PiA2KSArCisJCQkgICAgICAgKDEgPDwgb3JkZXIxXzV4KSkgLyAoMSA8PCBvcmRlcjFfNXgpKTsKKworCQl5NSA9ICh5NSAqIHRtcCkgLyAoMSA8PCBvcmRlcjFfNXgpOworCQl5NSA9ICh5NSAqIHRtcCkgLyAoMSA8PCBvcmRlcjFfNXgpOworCQl5NSA9ICh5NSAqIHRtcCkgLyAoMSA8PCBvcmRlcjFfNXgpOworCQl5NSA9ICh5NSAqIHRtcCkgLyAoMSA8PCBvcmRlcjFfNXgpOworCQl5NSA9IHk1IC8gKDEgPDwgb3JkZXIxXzV4X3JlbSk7CisKKwkJaWYgKGJldGEgPiAwKQorCQkJeTMgPSAoYWxwaGEgKiB0bXAgLQorCQkJICAgICAgKDEgPDwgb3JkZXIyXzN4KSkgLyAoMSA8PCBvcmRlcjJfM3gpOworCQllbHNlCisJCQl5MyA9IChhbHBoYSAqIHRtcCArCisJCQkgICAgICAoMSA8PCBvcmRlcjJfM3gpKSAvICgxIDw8IG9yZGVyMl8zeCk7CisJCXkzID0gKHkzICogdG1wKSAvICgxIDw8IG9yZGVyMl8zeCk7CisJCXkzID0gKHkzICogdG1wKSAvICgxIDw8IG9yZGVyMl8zeCk7CisJCXkzID0geTMgLyAoMSA8PCBvcmRlcjJfM3hfcmVtKTsKKworCQlpZiAoaSA8IDQpIHsKKwkJCVBBX2FuZ2xlID0gMDsKKwkJfSBlbHNlIHsKKwkJCVBBX2FuZ2xlID0geTUgKyB5MzsKKwkJCWlmIChQQV9hbmdsZSA8IC0xNTApCisJCQkJUEFfYW5nbGUgPSAtMTUwOworCQkJZWxzZSBpZiAoUEFfYW5nbGUgPiAxNTApCisJCQkJUEFfYW5nbGUgPSAxNTA7CisJCX0KKworCQlwYV90YWJsZVtpXSA9ICgoUEFfaW5baV0gJiAweDdmZikgPDwgMTEpICsgKFBBX2FuZ2xlICYgMHg3ZmYpOworCQlpZiAoaSA9PSA1KSB7CisJCQlQQV9hbmdsZSA9IChQQV9hbmdsZSArIDIpID4+IDE7CisJCQlwYV90YWJsZVtpIC0gMV0gPSAoKFBBX2luW2kgLSAxXSAmIDB4N2ZmKSA8PCAxMSkgKworCQkJICAgIChQQV9hbmdsZSAmIDB4N2ZmKTsKKwkJfQorCX0KKworCSpnYWluID0gR19meHA7CisJcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgYXI5MDAzX3BhcHJkX3BvcHVsYXRlX3NpbmdsZV90YWJsZShzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sIGludCBjaGFpbikKK3sKKwl1MzIgKnBhcHJkX3RhYmxlX3ZhbCA9IGNoYW4tPnBhX3RhYmxlW2NoYWluXTsKKwl1MzIgc21hbGxfc2lnbmFsX2dhaW4gPSBjaGFuLT5zbWFsbF9zaWduYWxfZ2FpbltjaGFpbl07CisJdTMyIHRyYWluaW5nX3Bvd2VyOworCXUzMiByZWcgPSAwOworCWludCBpOworCisJdHJhaW5pbmdfcG93ZXIgPQorCSAgICBSRUdfUkVBRF9GSUVMRChhaCwgQVJfUEhZX1BPV0VSVFhfUkFURTUsCisJCQkgICBBUl9QSFlfUE9XRVJUWF9SQVRFNV9QT1dFUlRYSFQyMF8wKTsKKwl0cmFpbmluZ19wb3dlciAtPSA0OworCisJaWYgKGNoYWluID09IDApCisJCXJlZyA9IEFSX1BIWV9QQVBSRF9NRU1fVEFCX0IwOworCWVsc2UgaWYgKGNoYWluID09IDEpCisJCXJlZyA9IEFSX1BIWV9QQVBSRF9NRU1fVEFCX0IxOworCWVsc2UgaWYgKGNoYWluID09IDIpCisJCXJlZyA9IEFSX1BIWV9QQVBSRF9NRU1fVEFCX0IyOworCisJZm9yIChpID0gMDsgaSA8IFBBUFJEX1RBQkxFX1NaOyBpKyspIHsKKwkJUkVHX1dSSVRFKGFoLCByZWcsIHBhcHJkX3RhYmxlX3ZhbFtpXSk7CisJCXJlZyA9IHJlZyArIDQ7CisJfQorCisJaWYgKGNoYWluID09IDApCisJCXJlZyA9IEFSX1BIWV9QQV9HQUlOMTIzX0IwOworCWVsc2UgaWYgKGNoYWluID09IDEpCisJCXJlZyA9IEFSX1BIWV9QQV9HQUlOMTIzX0IxOworCWVsc2UKKwkJcmVnID0gQVJfUEhZX1BBX0dBSU4xMjNfQjI7CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCByZWcsIEFSX1BIWV9QQV9HQUlOMTIzX1BBX0dBSU4xLCBzbWFsbF9zaWduYWxfZ2Fpbik7CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUEFQUkRfQ1RSTDFfQjAsCisJCSAgICAgIEFSX1BIWV9QQVBSRF9DVFJMMV9QQVBSRF9QT1dFUl9BVF9BTTJBTV9DQUwsCisJCSAgICAgIHRyYWluaW5nX3Bvd2VyKTsKKworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QQVBSRF9DVFJMMV9CMSwKKwkJICAgICAgQVJfUEhZX1BBUFJEX0NUUkwxX1BBUFJEX1BPV0VSX0FUX0FNMkFNX0NBTCwKKwkJICAgICAgdHJhaW5pbmdfcG93ZXIpOworCisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1BBUFJEX0NUUkwxX0IyLAorCQkgICAgICBBUl9QSFlfUEFQUkRfQ1RSTDFfUEFQUkRfUE9XRVJfQVRfQU0yQU1fQ0FMLAorCQkgICAgICB0cmFpbmluZ19wb3dlcik7Cit9CitFWFBPUlRfU1lNQk9MKGFyOTAwM19wYXByZF9wb3B1bGF0ZV9zaW5nbGVfdGFibGUpOworCitpbnQgYXI5MDAzX3BhcHJkX3NldHVwX2dhaW5fdGFibGUoc3RydWN0IGF0aF9odyAqYWgsIGludCBjaGFpbikKK3sKKworCXVuc2lnbmVkIGludCBpLCBkZXNpcmVkX2dhaW4sIGdhaW5faW5kZXg7CisJdW5zaWduZWQgaW50IHRyYWluX3Bvd2VyOworCisJdHJhaW5fcG93ZXIgPSBSRUdfUkVBRF9GSUVMRChhaCwgQVJfUEhZX1BPV0VSVFhfUkFURTUsCisJCQkJICAgICBBUl9QSFlfUE9XRVJUWF9SQVRFNV9QT1dFUlRYSFQyMF8wKTsKKworCXRyYWluX3Bvd2VyID0gdHJhaW5fcG93ZXIgLSA0OworCisJZGVzaXJlZF9nYWluID0gYXI5MDAzX2dldF9kZXNpcmVkX2dhaW4oYWgsIGNoYWluLCB0cmFpbl9wb3dlcik7CisKKwlnYWluX2luZGV4ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlpZiAoYWgtPnBhcHJkX2dhaW5fdGFibGVfaW5kZXhbaV0gPj0gZGVzaXJlZF9nYWluKQorCQkJYnJlYWs7CisJCWdhaW5faW5kZXgrKzsKKwl9CisKKwlhcjkwMDNfdHhfZm9yY2VfZ2FpbihhaCwgZ2Fpbl9pbmRleCk7CisKKwlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX1BBUFJEX1RSQUlORVJfU1RBVDEsCisJCQlBUl9QSFlfUEFQUkRfVFJBSU5FUl9TVEFUMV9QQVBSRF9UUkFJTl9ET05FKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChhcjkwMDNfcGFwcmRfc2V0dXBfZ2Fpbl90YWJsZSk7CisKK2ludCBhcjkwMDNfcGFwcmRfY3JlYXRlX2N1cnZlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCSAgICAgIGludCBjaGFpbikKK3sKKwl1MTYgKnNtYWxsX3NpZ25hbF9nYWluID0gJmNoYW4tPnNtYWxsX3NpZ25hbF9nYWluW2NoYWluXTsKKwl1MzIgKnBhX3RhYmxlID0gY2hhbi0+cGFfdGFibGVbY2hhaW5dOworCXUzMiAqZGF0YV9MLCAqZGF0YV9VOworCWludCBpLCBzdGF0dXMgPSAwOworCXUzMiAqYnVmOworCXUzMiByZWc7CisKKwltZW1zZXQoY2hhbi0+cGFfdGFibGVbY2hhaW5dLCAwLCBzaXplb2YoY2hhbi0+cGFfdGFibGVbY2hhaW5dKSk7CisKKwlidWYgPSBrbWFsbG9jKDIgKiA0OCAqIHNpemVvZih1MzIpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkYXRhX0wgPSAmYnVmWzBdOworCWRhdGFfVSA9ICZidWZbNDhdOworCisJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9DSEFOX0lORk9fTUVNT1JZLAorCQkgICAgQVJfUEhZX0NIQU5fSU5GT19NRU1PUllfQ0hBTklORk9NRU1fUzJfUkVBRCk7CisKKwlyZWcgPSBBUl9QSFlfQ0hBTl9JTkZPX1RBQl8wOworCWZvciAoaSA9IDA7IGkgPCA0ODsgaSsrKQorCQlkYXRhX0xbaV0gPSBSRUdfUkVBRChhaCwgcmVnICsgKGkgPDwgMikpOworCisJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9DSEFOX0lORk9fTUVNT1JZLAorCQkgICAgQVJfUEhZX0NIQU5fSU5GT19NRU1PUllfQ0hBTklORk9NRU1fUzJfUkVBRCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDg7IGkrKykKKwkJZGF0YV9VW2ldID0gUkVHX1JFQUQoYWgsIHJlZyArIChpIDw8IDIpKTsKKworCWlmICghY3JlYXRlX3BhX2N1cnZlKGRhdGFfTCwgZGF0YV9VLCBwYV90YWJsZSwgc21hbGxfc2lnbmFsX2dhaW4pKQorCQlzdGF0dXMgPSAtMjsKKworCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfUEFQUkRfVFJBSU5FUl9TVEFUMSwKKwkJICAgIEFSX1BIWV9QQVBSRF9UUkFJTkVSX1NUQVQxX1BBUFJEX1RSQUlOX0RPTkUpOworCisJa2ZyZWUoYnVmKTsKKworCXJldHVybiBzdGF0dXM7Cit9CitFWFBPUlRfU1lNQk9MKGFyOTAwM19wYXByZF9jcmVhdGVfY3VydmUpOworCitpbnQgYXI5MDAzX3BhcHJkX2luaXRfdGFibGUoc3RydWN0IGF0aF9odyAqYWgpCit7CisJYXI5MDAzX3BhcHJkX3NldHVwX3NpbmdsZV90YWJsZShhaCk7CisJYXI5MDAzX3BhcHJkX2dldF9nYWluX3RhYmxlKGFoKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woYXI5MDAzX3BhcHJkX2luaXRfdGFibGUpOworCitib29sIGFyOTAwM19wYXByZF9pc19kb25lKHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXJldHVybiAhIVJFR19SRUFEX0ZJRUxEKGFoLCBBUl9QSFlfUEFQUkRfVFJBSU5FUl9TVEFUMSwKKwkJCQlBUl9QSFlfUEFQUkRfVFJBSU5FUl9TVEFUMV9QQVBSRF9UUkFJTl9ET05FKTsKK30KK0VYUE9SVF9TWU1CT0woYXI5MDAzX3BhcHJkX2lzX2RvbmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfcGh5LmMKaW5kZXggODA0MzFhMi4uYTc1M2E0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX3BoeS5jCkBAIC0xNyw2ICsxNywyOCBAQAogI2luY2x1ZGUgImh3LmgiCiAjaW5jbHVkZSAiYXI5MDAzX3BoeS5oIgogCitzdGF0aWMgY29uc3QgaW50IGZpcnN0ZXBfdGFibGVbXSA9CisvKiBsZXZlbDogIDAgICAxICAgMiAgIDMgICA0ICAgNSAgIDYgICA3ICAgOCAgKi8KKwl7IC00LCAtMiwgIDAsICAyLCAgNCwgIDYsICA4LCAxMCwgMTIgfTsgLyogbHZsIDAtOCwgZGVmYXVsdCAyICovCisKK3N0YXRpYyBjb25zdCBpbnQgY3ljcHdyVGhyMV90YWJsZVtdID0KKy8qIGxldmVsOiAgMCAgIDEgICAyICAgMyAgIDQgICA1ICAgNiAgIDcgICA4ICAqLworCXsgLTYsIC00LCAtMiwgIDAsICAyLCAgNCwgIDYsICA4IH07ICAgICAvKiBsdmwgMC03LCBkZWZhdWx0IDMgKi8KKworLyoKKyAqIHJlZ2lzdGVyIHZhbHVlcyB0byB0dXJuIE9GRE0gd2VhayBzaWduYWwgZGV0ZWN0aW9uIE9GRgorICovCitzdGF0aWMgY29uc3QgaW50IG0xVGhyZXNoTG93X29mZiA9IDEyNzsKK3N0YXRpYyBjb25zdCBpbnQgbTJUaHJlc2hMb3dfb2ZmID0gMTI3Oworc3RhdGljIGNvbnN0IGludCBtMVRocmVzaF9vZmYgPSAxMjc7CitzdGF0aWMgY29uc3QgaW50IG0yVGhyZXNoX29mZiA9IDEyNzsKK3N0YXRpYyBjb25zdCBpbnQgbTJDb3VudFRocl9vZmYgPSAgMzE7CitzdGF0aWMgY29uc3QgaW50IG0yQ291bnRUaHJMb3dfb2ZmID0gIDYzOworc3RhdGljIGNvbnN0IGludCBtMVRocmVzaExvd0V4dF9vZmYgPSAxMjc7CitzdGF0aWMgY29uc3QgaW50IG0yVGhyZXNoTG93RXh0X29mZiA9IDEyNzsKK3N0YXRpYyBjb25zdCBpbnQgbTFUaHJlc2hFeHRfb2ZmID0gMTI3Oworc3RhdGljIGNvbnN0IGludCBtMlRocmVzaEV4dF9vZmYgPSAxMjc7CisKIC8qKgogICogYXI5MDAzX2h3X3NldF9jaGFubmVsIC0gc2V0IGNoYW5uZWwgb24gc2luZ2xlLWNoaXAgZGV2aWNlCiAgKiBAYWg6IGF0aGVyb3MgaGFyZHdhcmUgc3RydWN0dXJlCkBAIC05NCw3ICsxMTYsNyBAQAogfQogCiAvKioKLSAqIGFyOTAwM19od19zcHVyX21pdGlnYXRlIC0gY29udmVydCBiYXNlYmFuZCBzcHVyIGZyZXF1ZW5jeQorICogYXI5MDAzX2h3X3NwdXJfbWl0aWdhdGVfbXJjX2NjayAtIGNvbnZlcnQgYmFzZWJhbmQgc3B1ciBmcmVxdWVuY3kKICAqIEBhaDogYXRoZXJvcyBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqIEBjaGFuOgogICoKQEAgLTUyMSwxNSArNTQzLDYgQEAKIAkJdTMyIHZhbCA9IElOSV9SQShpbmlBcnIsIGksIGNvbHVtbik7CiAKIAkJUkVHX1dSSVRFKGFoLCByZWcsIHZhbCk7Ci0KLQkJLyoKLQkJICogRGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBzaGlmdCByZWdpc3RlciB2YWx1ZSwgYW5kIGluc2VydCB0aGUKLQkJICogY29uZmlndXJlZCBkZWxheSBpZiBzby4KLQkJICovCi0JCWlmIChyZWcgPj0gMHgxNjAwMCAmJiByZWcgPCAweDE3MDAwCi0JCSAgICAmJiBhaC0+Y29uZmlnLmFuYWxvZ19zaGlmdHJlZykKLQkJCXVkZWxheSgxMDApOwotCiAJCURPX0RFTEFZKHJlZ1dyaXRlcyk7CiAJfQogfQpAQCAtNzMyLDcxICs3NDUsNjggQEAKIHsKIAlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlID0gYWgtPmN1cmFuaTsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKKwlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiA9IGFoLT5jdXJjaGFuOworCXMzMiB2YWx1ZSwgdmFsdWUyOwogCiAJc3dpdGNoIChjbWQgJiBhaC0+YW5pX2Z1bmN0aW9uKSB7Ci0JY2FzZSBBVEg5S19BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUw6ewotCQl1MzIgbGV2ZWwgPSBwYXJhbTsKLQotCQlpZiAobGV2ZWwgPj0gQVJSQVlfU0laRShhaC0+dG90YWxTaXplRGVzaXJlZCkpIHsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAotCQkJCSAgImxldmVsIG91dCBvZiByYW5nZSAoJXUgPiAldSlcbiIsCi0JCQkJICBsZXZlbCwKLQkJCQkgICh1bnNpZ25lZClBUlJBWV9TSVpFKGFoLT50b3RhbFNpemVEZXNpcmVkKSk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfREVTSVJFRF9TWiwKLQkJCSAgICAgIEFSX1BIWV9ERVNJUkVEX1NaX1RPVF9ERVMsCi0JCQkgICAgICBhaC0+dG90YWxTaXplRGVzaXJlZFtsZXZlbF0pOwotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQUdDLAotCQkJICAgICAgQVJfUEhZX0FHQ19DT0FSU0VfTE9XLAotCQkJICAgICAgYWgtPmNvYXJzZV9sb3dbbGV2ZWxdKTsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0FHQywKLQkJCSAgICAgIEFSX1BIWV9BR0NfQ09BUlNFX0hJR0gsCi0JCQkgICAgICBhaC0+Y29hcnNlX2hpZ2hbbGV2ZWxdKTsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0ZJTkRfU0lHLAotCQkJICAgICAgQVJfUEhZX0ZJTkRfU0lHX0ZJUlBXUiwgYWgtPmZpcnB3cltsZXZlbF0pOwotCi0JCWlmIChsZXZlbCA+IGFuaVN0YXRlLT5ub2lzZUltbXVuaXR5TGV2ZWwpCi0JCQlhaC0+c3RhdHMuYXN0X2FuaV9uaXVwKys7Ci0JCWVsc2UgaWYgKGxldmVsIDwgYW5pU3RhdGUtPm5vaXNlSW1tdW5pdHlMZXZlbCkKLQkJCWFoLT5zdGF0cy5hc3RfYW5pX25pZG93bisrOwotCQlhbmlTdGF0ZS0+bm9pc2VJbW11bml0eUxldmVsID0gbGV2ZWw7Ci0JCWJyZWFrOwotCX0KIAljYXNlIEFUSDlLX0FOSV9PRkRNX1dFQUtfU0lHTkFMX0RFVEVDVElPTjp7Ci0JCWNvbnN0IGludCBtMVRocmVzaExvd1tdID0geyAxMjcsIDUwIH07Ci0JCWNvbnN0IGludCBtMlRocmVzaExvd1tdID0geyAxMjcsIDQwIH07Ci0JCWNvbnN0IGludCBtMVRocmVzaFtdID0geyAxMjcsIDB4NGQgfTsKLQkJY29uc3QgaW50IG0yVGhyZXNoW10gPSB7IDEyNywgMHg0MCB9OwotCQljb25zdCBpbnQgbTJDb3VudFRocltdID0geyAzMSwgMTYgfTsKLQkJY29uc3QgaW50IG0yQ291bnRUaHJMb3dbXSA9IHsgNjMsIDQ4IH07CisJCS8qCisJCSAqIG9uID09IDEgbWVhbnMgb2ZkbSB3ZWFrIHNpZ25hbCBkZXRlY3Rpb24gaXMgT04KKwkJICogb24gPT0gMSBpcyB0aGUgZGVmYXVsdCwgZm9yIGxlc3Mgbm9pc2UgaW1tdW5pdHkKKwkJICoKKwkJICogb24gPT0gMCBtZWFucyBvZmRtIHdlYWsgc2lnbmFsIGRldGVjdGlvbiBpcyBPRkYKKwkJICogb24gPT0gMCBtZWFucyBtb3JlIG5vaXNlIGltbQorCQkgKi8KIAkJdTMyIG9uID0gcGFyYW0gPyAxIDogMDsKKwkJLyoKKwkJICogbWFrZSByZWdpc3RlciBzZXR0aW5nIGZvciBkZWZhdWx0CisJCSAqICh3ZWFrIHNpZyBkZXRlY3QgT04pIGNvbWUgZnJvbSBJTkkgZmlsZQorCQkgKi8KKwkJaW50IG0xVGhyZXNoTG93ID0gb24gPworCQkJYW5pU3RhdGUtPmluaURlZi5tMVRocmVzaExvdyA6IG0xVGhyZXNoTG93X29mZjsKKwkJaW50IG0yVGhyZXNoTG93ID0gb24gPworCQkJYW5pU3RhdGUtPmluaURlZi5tMlRocmVzaExvdyA6IG0yVGhyZXNoTG93X29mZjsKKwkJaW50IG0xVGhyZXNoID0gb24gPworCQkJYW5pU3RhdGUtPmluaURlZi5tMVRocmVzaCA6IG0xVGhyZXNoX29mZjsKKwkJaW50IG0yVGhyZXNoID0gb24gPworCQkJYW5pU3RhdGUtPmluaURlZi5tMlRocmVzaCA6IG0yVGhyZXNoX29mZjsKKwkJaW50IG0yQ291bnRUaHIgPSBvbiA/CisJCQlhbmlTdGF0ZS0+aW5pRGVmLm0yQ291bnRUaHIgOiBtMkNvdW50VGhyX29mZjsKKwkJaW50IG0yQ291bnRUaHJMb3cgPSBvbiA/CisJCQlhbmlTdGF0ZS0+aW5pRGVmLm0yQ291bnRUaHJMb3cgOiBtMkNvdW50VGhyTG93X29mZjsKKwkJaW50IG0xVGhyZXNoTG93RXh0ID0gb24gPworCQkJYW5pU3RhdGUtPmluaURlZi5tMVRocmVzaExvd0V4dCA6IG0xVGhyZXNoTG93RXh0X29mZjsKKwkJaW50IG0yVGhyZXNoTG93RXh0ID0gb24gPworCQkJYW5pU3RhdGUtPmluaURlZi5tMlRocmVzaExvd0V4dCA6IG0yVGhyZXNoTG93RXh0X29mZjsKKwkJaW50IG0xVGhyZXNoRXh0ID0gb24gPworCQkJYW5pU3RhdGUtPmluaURlZi5tMVRocmVzaEV4dCA6IG0xVGhyZXNoRXh0X29mZjsKKwkJaW50IG0yVGhyZXNoRXh0ID0gb24gPworCQkJYW5pU3RhdGUtPmluaURlZi5tMlRocmVzaEV4dCA6IG0yVGhyZXNoRXh0X29mZjsKIAogCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU0ZDT1JSX0xPVywKIAkJCSAgICAgIEFSX1BIWV9TRkNPUlJfTE9XX00xX1RIUkVTSF9MT1csCi0JCQkgICAgICBtMVRocmVzaExvd1tvbl0pOworCQkJICAgICAgbTFUaHJlc2hMb3cpOwogCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU0ZDT1JSX0xPVywKIAkJCSAgICAgIEFSX1BIWV9TRkNPUlJfTE9XX00yX1RIUkVTSF9MT1csCi0JCQkgICAgICBtMlRocmVzaExvd1tvbl0pOworCQkJICAgICAgbTJUaHJlc2hMb3cpOwogCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU0ZDT1JSLAotCQkJICAgICAgQVJfUEhZX1NGQ09SUl9NMV9USFJFU0gsIG0xVGhyZXNoW29uXSk7CisJCQkgICAgICBBUl9QSFlfU0ZDT1JSX00xX1RIUkVTSCwgbTFUaHJlc2gpOwogCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU0ZDT1JSLAotCQkJICAgICAgQVJfUEhZX1NGQ09SUl9NMl9USFJFU0gsIG0yVGhyZXNoW29uXSk7CisJCQkgICAgICBBUl9QSFlfU0ZDT1JSX00yX1RIUkVTSCwgbTJUaHJlc2gpOwogCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU0ZDT1JSLAotCQkJICAgICAgQVJfUEhZX1NGQ09SUl9NMkNPVU5UX1RIUiwgbTJDb3VudFRocltvbl0pOworCQkJICAgICAgQVJfUEhZX1NGQ09SUl9NMkNPVU5UX1RIUiwgbTJDb3VudFRocik7CiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TRkNPUlJfTE9XLAogCQkJICAgICAgQVJfUEhZX1NGQ09SUl9MT1dfTTJDT1VOVF9USFJfTE9XLAotCQkJICAgICAgbTJDb3VudFRockxvd1tvbl0pOworCQkJICAgICAgbTJDb3VudFRockxvdyk7CiAKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NGQ09SUl9FWFQsCi0JCQkgICAgICBBUl9QSFlfU0ZDT1JSX0VYVF9NMV9USFJFU0hfTE9XLCBtMVRocmVzaExvd1tvbl0pOworCQkJICAgICAgQVJfUEhZX1NGQ09SUl9FWFRfTTFfVEhSRVNIX0xPVywgbTFUaHJlc2hMb3dFeHQpOwogCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU0ZDT1JSX0VYVCwKLQkJCSAgICAgIEFSX1BIWV9TRkNPUlJfRVhUX00yX1RIUkVTSF9MT1csIG0yVGhyZXNoTG93W29uXSk7CisJCQkgICAgICBBUl9QSFlfU0ZDT1JSX0VYVF9NMl9USFJFU0hfTE9XLCBtMlRocmVzaExvd0V4dCk7CiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TRkNPUlJfRVhULAotCQkJICAgICAgQVJfUEhZX1NGQ09SUl9FWFRfTTFfVEhSRVNILCBtMVRocmVzaFtvbl0pOworCQkJICAgICAgQVJfUEhZX1NGQ09SUl9FWFRfTTFfVEhSRVNILCBtMVRocmVzaEV4dCk7CiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TRkNPUlJfRVhULAotCQkJICAgICAgQVJfUEhZX1NGQ09SUl9FWFRfTTJfVEhSRVNILCBtMlRocmVzaFtvbl0pOworCQkJICAgICAgQVJfUEhZX1NGQ09SUl9FWFRfTTJfVEhSRVNILCBtMlRocmVzaEV4dCk7CiAKIAkJaWYgKG9uKQogCQkJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9TRkNPUlJfTE9XLApAQCAtODA2LDYgKzgxNiwxMiBAQAogCQkJCSAgICBBUl9QSFlfU0ZDT1JSX0xPV19VU0VfU0VMRl9DT1JSX0xPVyk7CiAKIAkJaWYgKCFvbiAhPSBhbmlTdGF0ZS0+b2ZkbVdlYWtTaWdEZXRlY3RPZmYpIHsKKwkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAorCQkJCSAgIioqIGNoICVkOiBvZmRtIHdlYWsgc2lnbmFsOiAlcz0+JXNcbiIsCisJCQkJICBjaGFuLT5jaGFubmVsLAorCQkJCSAgIWFuaVN0YXRlLT5vZmRtV2Vha1NpZ0RldGVjdE9mZiA/CisJCQkJCSJvbiIgOiAib2ZmIiwKKwkJCQkgIG9uID8gIm9uIiA6ICJvZmYiKTsKIAkJCWlmIChvbikKIAkJCQlhaC0+c3RhdHMuYXN0X2FuaV9vZmRtb24rKzsKIAkJCWVsc2UKQEAgLTgxNCw2NCArODMwLDE2NyBAQAogCQl9CiAJCWJyZWFrOwogCX0KLQljYXNlIEFUSDlLX0FOSV9DQ0tfV0VBS19TSUdOQUxfVEhSOnsKLQkJY29uc3QgaW50IHdlYWtTaWdUaHJDY2tbXSA9IHsgOCwgNiB9OwotCQl1MzIgaGlnaCA9IHBhcmFtID8gMSA6IDA7Ci0KLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0NDS19ERVRFQ1QsCi0JCQkgICAgICBBUl9QSFlfQ0NLX0RFVEVDVF9XRUFLX1NJR19USFJfQ0NLLAotCQkJICAgICAgd2Vha1NpZ1RockNja1toaWdoXSk7Ci0JCWlmIChoaWdoICE9IGFuaVN0YXRlLT5jY2tXZWFrU2lnVGhyZXNob2xkKSB7Ci0JCQlpZiAoaGlnaCkKLQkJCQlhaC0+c3RhdHMuYXN0X2FuaV9jY2toaWdoKys7Ci0JCQllbHNlCi0JCQkJYWgtPnN0YXRzLmFzdF9hbmlfY2NrbG93Kys7Ci0JCQlhbmlTdGF0ZS0+Y2NrV2Vha1NpZ1RocmVzaG9sZCA9IGhpZ2g7Ci0JCX0KLQkJYnJlYWs7Ci0JfQogCWNhc2UgQVRIOUtfQU5JX0ZJUlNURVBfTEVWRUw6ewotCQljb25zdCBpbnQgZmlyc3RlcFtdID0geyAwLCA0LCA4IH07CiAJCXUzMiBsZXZlbCA9IHBhcmFtOwogCi0JCWlmIChsZXZlbCA+PSBBUlJBWV9TSVpFKGZpcnN0ZXApKSB7CisJCWlmIChsZXZlbCA+PSBBUlJBWV9TSVpFKGZpcnN0ZXBfdGFibGUpKSB7CiAJCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwKLQkJCQkgICJsZXZlbCBvdXQgb2YgcmFuZ2UgKCV1ID4gJXUpXG4iLAorCQkJCSAgIkFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMOiBsZXZlbCAiCisJCQkJICAib3V0IG9mIHJhbmdlICgldSA+ICV1KVxuIiwKIAkJCQkgIGxldmVsLAotCQkJCSAgKHVuc2lnbmVkKSBBUlJBWV9TSVpFKGZpcnN0ZXApKTsKKwkJCQkgICh1bnNpZ25lZCkgQVJSQVlfU0laRShmaXJzdGVwX3RhYmxlKSk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KKworCQkvKgorCQkgKiBtYWtlIHJlZ2lzdGVyIHNldHRpbmcgcmVsYXRpdmUgdG8gZGVmYXVsdAorCQkgKiBmcm9tIElOSSBmaWxlICYgY2FwIHZhbHVlCisJCSAqLworCQl2YWx1ZSA9IGZpcnN0ZXBfdGFibGVbbGV2ZWxdIC0KKwkJCWZpcnN0ZXBfdGFibGVbQVRIOUtfQU5JX0ZJUlNURVBfTFZMX05FV10gKworCQkJYW5pU3RhdGUtPmluaURlZi5maXJzdGVwOworCQlpZiAodmFsdWUgPCBBVEg5S19TSUdfRklSU1RFUF9TRVRUSU5HX01JTikKKwkJCXZhbHVlID0gQVRIOUtfU0lHX0ZJUlNURVBfU0VUVElOR19NSU47CisJCWlmICh2YWx1ZSA+IEFUSDlLX1NJR19GSVJTVEVQX1NFVFRJTkdfTUFYKQorCQkJdmFsdWUgPSBBVEg5S19TSUdfRklSU1RFUF9TRVRUSU5HX01BWDsKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0ZJTkRfU0lHLAogCQkJICAgICAgQVJfUEhZX0ZJTkRfU0lHX0ZJUlNURVAsCi0JCQkgICAgICBmaXJzdGVwW2xldmVsXSk7Ci0JCWlmIChsZXZlbCA+IGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwpCi0JCQlhaC0+c3RhdHMuYXN0X2FuaV9zdGVwdXArKzsKLQkJZWxzZSBpZiAobGV2ZWwgPCBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsKQotCQkJYWgtPnN0YXRzLmFzdF9hbmlfc3RlcGRvd24rKzsKLQkJYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCA9IGxldmVsOworCQkJICAgICAgdmFsdWUpOworCQkvKgorCQkgKiB3ZSBuZWVkIHRvIHNldCBmaXJzdCBzdGVwIGxvdyByZWdpc3RlciB0b28KKwkJICogbWFrZSByZWdpc3RlciBzZXR0aW5nIHJlbGF0aXZlIHRvIGRlZmF1bHQKKwkJICogZnJvbSBJTkkgZmlsZSAmIGNhcCB2YWx1ZQorCQkgKi8KKwkJdmFsdWUyID0gZmlyc3RlcF90YWJsZVtsZXZlbF0gLQorCQkJIGZpcnN0ZXBfdGFibGVbQVRIOUtfQU5JX0ZJUlNURVBfTFZMX05FV10gKworCQkJIGFuaVN0YXRlLT5pbmlEZWYuZmlyc3RlcExvdzsKKwkJaWYgKHZhbHVlMiA8IEFUSDlLX1NJR19GSVJTVEVQX1NFVFRJTkdfTUlOKQorCQkJdmFsdWUyID0gQVRIOUtfU0lHX0ZJUlNURVBfU0VUVElOR19NSU47CisJCWlmICh2YWx1ZTIgPiBBVEg5S19TSUdfRklSU1RFUF9TRVRUSU5HX01BWCkKKwkJCXZhbHVlMiA9IEFUSDlLX1NJR19GSVJTVEVQX1NFVFRJTkdfTUFYOworCisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9GSU5EX1NJR19MT1csCisJCQkgICAgICBBUl9QSFlfRklORF9TSUdfTE9XX0ZJUlNURVBfTE9XLCB2YWx1ZTIpOworCisJCWlmIChsZXZlbCAhPSBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsKSB7CisJCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwKKwkJCQkgICIqKiBjaCAlZDogbGV2ZWwgJWQ9PiVkW2RlZjolZF0gIgorCQkJCSAgImZpcnN0ZXBbbGV2ZWxdPSVkIGluaT0lZFxuIiwKKwkJCQkgIGNoYW4tPmNoYW5uZWwsCisJCQkJICBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsLAorCQkJCSAgbGV2ZWwsCisJCQkJICBBVEg5S19BTklfRklSU1RFUF9MVkxfTkVXLAorCQkJCSAgdmFsdWUsCisJCQkJICBhbmlTdGF0ZS0+aW5pRGVmLmZpcnN0ZXApOworCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCisJCQkJICAiKiogY2ggJWQ6IGxldmVsICVkPT4lZFtkZWY6JWRdICIKKwkJCQkgICJmaXJzdGVwX2xvd1tsZXZlbF09JWQgaW5pPSVkXG4iLAorCQkJCSAgY2hhbi0+Y2hhbm5lbCwKKwkJCQkgIGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwsCisJCQkJICBsZXZlbCwKKwkJCQkgIEFUSDlLX0FOSV9GSVJTVEVQX0xWTF9ORVcsCisJCQkJICB2YWx1ZTIsCisJCQkJICBhbmlTdGF0ZS0+aW5pRGVmLmZpcnN0ZXBMb3cpOworCQkJaWYgKGxldmVsID4gYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCkKKwkJCQlhaC0+c3RhdHMuYXN0X2FuaV9zdGVwdXArKzsKKwkJCWVsc2UgaWYgKGxldmVsIDwgYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCkKKwkJCQlhaC0+c3RhdHMuYXN0X2FuaV9zdGVwZG93bisrOworCQkJYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCA9IGxldmVsOworCQl9CiAJCWJyZWFrOwogCX0KIAljYXNlIEFUSDlLX0FOSV9TUFVSX0lNTVVOSVRZX0xFVkVMOnsKLQkJY29uc3QgaW50IGN5Y3B3clRocjFbXSA9IHsgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCwgMTYgfTsKIAkJdTMyIGxldmVsID0gcGFyYW07CiAKLQkJaWYgKGxldmVsID49IEFSUkFZX1NJWkUoY3ljcHdyVGhyMSkpIHsKKwkJaWYgKGxldmVsID49IEFSUkFZX1NJWkUoY3ljcHdyVGhyMV90YWJsZSkpIHsKIAkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAotCQkJCSAgImxldmVsIG91dCBvZiByYW5nZSAoJXUgPiAldSlcbiIsCisJCQkJICAiQVRIOUtfQU5JX1NQVVJfSU1NVU5JVFlfTEVWRUw6IGxldmVsICIKKwkJCQkgICJvdXQgb2YgcmFuZ2UgKCV1ID4gJXUpXG4iLAogCQkJCSAgbGV2ZWwsCi0JCQkJICAodW5zaWduZWQpIEFSUkFZX1NJWkUoY3ljcHdyVGhyMSkpOworCQkJCSAgKHVuc2lnbmVkKSBBUlJBWV9TSVpFKGN5Y3B3clRocjFfdGFibGUpKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQorCQkvKgorCQkgKiBtYWtlIHJlZ2lzdGVyIHNldHRpbmcgcmVsYXRpdmUgdG8gZGVmYXVsdAorCQkgKiBmcm9tIElOSSBmaWxlICYgY2FwIHZhbHVlCisJCSAqLworCQl2YWx1ZSA9IGN5Y3B3clRocjFfdGFibGVbbGV2ZWxdIC0KKwkJCWN5Y3B3clRocjFfdGFibGVbQVRIOUtfQU5JX1NQVVJfSU1NVU5FX0xWTF9ORVddICsKKwkJCWFuaVN0YXRlLT5pbmlEZWYuY3ljcHdyVGhyMTsKKwkJaWYgKHZhbHVlIDwgQVRIOUtfU0lHX1NQVVJfSU1NX1NFVFRJTkdfTUlOKQorCQkJdmFsdWUgPSBBVEg5S19TSUdfU1BVUl9JTU1fU0VUVElOR19NSU47CisJCWlmICh2YWx1ZSA+IEFUSDlLX1NJR19TUFVSX0lNTV9TRVRUSU5HX01BWCkKKwkJCXZhbHVlID0gQVRIOUtfU0lHX1NQVVJfSU1NX1NFVFRJTkdfTUFYOwogCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVElNSU5HNSwKIAkJCSAgICAgIEFSX1BIWV9USU1JTkc1X0NZQ1BXUl9USFIxLAotCQkJICAgICAgY3ljcHdyVGhyMVtsZXZlbF0pOwotCQlpZiAobGV2ZWwgPiBhbmlTdGF0ZS0+c3B1ckltbXVuaXR5TGV2ZWwpCi0JCQlhaC0+c3RhdHMuYXN0X2FuaV9zcHVydXArKzsKLQkJZWxzZSBpZiAobGV2ZWwgPCBhbmlTdGF0ZS0+c3B1ckltbXVuaXR5TGV2ZWwpCi0JCQlhaC0+c3RhdHMuYXN0X2FuaV9zcHVyZG93bisrOwotCQlhbmlTdGF0ZS0+c3B1ckltbXVuaXR5TGV2ZWwgPSBsZXZlbDsKKwkJCSAgICAgIHZhbHVlKTsKKworCQkvKgorCQkgKiBzZXQgQVJfUEhZX0VYVF9DQ0EgZm9yIGV4dGVuc2lvbiBjaGFubmVsCisJCSAqIG1ha2UgcmVnaXN0ZXIgc2V0dGluZyByZWxhdGl2ZSB0byBkZWZhdWx0CisJCSAqIGZyb20gSU5JIGZpbGUgJiBjYXAgdmFsdWUKKwkJICovCisJCXZhbHVlMiA9IGN5Y3B3clRocjFfdGFibGVbbGV2ZWxdIC0KKwkJCSBjeWNwd3JUaHIxX3RhYmxlW0FUSDlLX0FOSV9TUFVSX0lNTVVORV9MVkxfTkVXXSArCisJCQkgYW5pU3RhdGUtPmluaURlZi5jeWNwd3JUaHIxRXh0OworCQlpZiAodmFsdWUyIDwgQVRIOUtfU0lHX1NQVVJfSU1NX1NFVFRJTkdfTUlOKQorCQkJdmFsdWUyID0gQVRIOUtfU0lHX1NQVVJfSU1NX1NFVFRJTkdfTUlOOworCQlpZiAodmFsdWUyID4gQVRIOUtfU0lHX1NQVVJfSU1NX1NFVFRJTkdfTUFYKQorCQkJdmFsdWUyID0gQVRIOUtfU0lHX1NQVVJfSU1NX1NFVFRJTkdfTUFYOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfRVhUX0NDQSwKKwkJCSAgICAgIEFSX1BIWV9FWFRfQ1lDUFdSX1RIUjEsIHZhbHVlMik7CisKKwkJaWYgKGxldmVsICE9IGFuaVN0YXRlLT5zcHVySW1tdW5pdHlMZXZlbCkgeworCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCisJCQkJICAiKiogY2ggJWQ6IGxldmVsICVkPT4lZFtkZWY6JWRdICIKKwkJCQkgICJjeWNwd3JUaHIxW2xldmVsXT0lZCBpbmk9JWRcbiIsCisJCQkJICBjaGFuLT5jaGFubmVsLAorCQkJCSAgYW5pU3RhdGUtPnNwdXJJbW11bml0eUxldmVsLAorCQkJCSAgbGV2ZWwsCisJCQkJICBBVEg5S19BTklfU1BVUl9JTU1VTkVfTFZMX05FVywKKwkJCQkgIHZhbHVlLAorCQkJCSAgYW5pU3RhdGUtPmluaURlZi5jeWNwd3JUaHIxKTsKKwkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAorCQkJCSAgIioqIGNoICVkOiBsZXZlbCAlZD0+JWRbZGVmOiVkXSAiCisJCQkJICAiY3ljcHdyVGhyMUV4dFtsZXZlbF09JWQgaW5pPSVkXG4iLAorCQkJCSAgY2hhbi0+Y2hhbm5lbCwKKwkJCQkgIGFuaVN0YXRlLT5zcHVySW1tdW5pdHlMZXZlbCwKKwkJCQkgIGxldmVsLAorCQkJCSAgQVRIOUtfQU5JX1NQVVJfSU1NVU5FX0xWTF9ORVcsCisJCQkJICB2YWx1ZTIsCisJCQkJICBhbmlTdGF0ZS0+aW5pRGVmLmN5Y3B3clRocjFFeHQpOworCQkJaWYgKGxldmVsID4gYW5pU3RhdGUtPnNwdXJJbW11bml0eUxldmVsKQorCQkJCWFoLT5zdGF0cy5hc3RfYW5pX3NwdXJ1cCsrOworCQkJZWxzZSBpZiAobGV2ZWwgPCBhbmlTdGF0ZS0+c3B1ckltbXVuaXR5TGV2ZWwpCisJCQkJYWgtPnN0YXRzLmFzdF9hbmlfc3B1cmRvd24rKzsKKwkJCWFuaVN0YXRlLT5zcHVySW1tdW5pdHlMZXZlbCA9IGxldmVsOworCQl9CiAJCWJyZWFrOwogCX0KKwljYXNlIEFUSDlLX0FOSV9NUkNfQ0NLOnsKKwkJLyoKKwkJICogaXNfb24gPT0gMSBtZWFucyBNUkMgQ0NLIE9OIChkZWZhdWx0LCBsZXNzIG5vaXNlIGltbSkKKwkJICogaXNfb24gPT0gMCBtZWFucyBNUkMgQ0NLIGlzIE9GRiAobW9yZSBub2lzZSBpbW0pCisJCSAqLworCQlib29sIGlzX29uID0gcGFyYW0gPyAxIDogMDsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX01SQ19DQ0tfQ1RSTCwKKwkJCSAgICAgIEFSX1BIWV9NUkNfQ0NLX0VOQUJMRSwgaXNfb24pOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfTVJDX0NDS19DVFJMLAorCQkJICAgICAgQVJfUEhZX01SQ19DQ0tfTVVYX1JFRywgaXNfb24pOworCQlpZiAoIWlzX29uICE9IGFuaVN0YXRlLT5tcmNDQ0tPZmYpIHsKKwkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAorCQkJCSAgIioqIGNoICVkOiBNUkMgQ0NLOiAlcz0+JXNcbiIsCisJCQkJICBjaGFuLT5jaGFubmVsLAorCQkJCSAgIWFuaVN0YXRlLT5tcmNDQ0tPZmYgPyAib24iIDogIm9mZiIsCisJCQkJICBpc19vbiA/ICJvbiIgOiAib2ZmIik7CisJCWlmIChpc19vbikKKwkJCWFoLT5zdGF0cy5hc3RfYW5pX2Nja2xvdysrOworCQllbHNlCisJCQlhaC0+c3RhdHMuYXN0X2FuaV9jY2toaWdoKys7CisJCWFuaVN0YXRlLT5tcmNDQ0tPZmYgPSAhaXNfb247CisJCX0KKwlicmVhazsKKwl9CiAJY2FzZSBBVEg5S19BTklfUFJFU0VOVDoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTg4MCwxNTggKzk5OSwxMjYgQEAKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLCAiQU5JIHBhcmFtZXRlcnM6XG4iKTsKIAlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwKLQkJICAibm9pc2VJbW11bml0eUxldmVsPSVkLCBzcHVySW1tdW5pdHlMZXZlbD0lZCwgIgotCQkgICJvZmRtV2Vha1NpZ0RldGVjdE9mZj0lZFxuIiwKLQkJICBhbmlTdGF0ZS0+bm9pc2VJbW11bml0eUxldmVsLAorCQkgICJBTkkgcGFyYW1ldGVyczogU0k9JWQsIG9mZG1XUz0lcyBGUz0lZCAiCisJCSAgIk1SQ2Njaz0lcyBsaXN0ZW5UaW1lPSVkIENDPSVkIGxpc3Rlbj0lZCAiCisJCSAgIm9mZG1FcnJzPSVkIGNja0VycnM9JWRcbiIsCiAJCSAgYW5pU3RhdGUtPnNwdXJJbW11bml0eUxldmVsLAotCQkgICFhbmlTdGF0ZS0+b2ZkbVdlYWtTaWdEZXRlY3RPZmYpOwotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAotCQkgICJjY2tXZWFrU2lnVGhyZXNob2xkPSVkLCAiCi0JCSAgImZpcnN0ZXBMZXZlbD0lZCwgbGlzdGVuVGltZT0lZFxuIiwKLQkJICBhbmlTdGF0ZS0+Y2NrV2Vha1NpZ1RocmVzaG9sZCwKKwkJICAhYW5pU3RhdGUtPm9mZG1XZWFrU2lnRGV0ZWN0T2ZmID8gIm9uIiA6ICJvZmYiLAogCQkgIGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwsCi0JCSAgYW5pU3RhdGUtPmxpc3RlblRpbWUpOwotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAotCQkiY3ljbGVDb3VudD0lZCwgb2ZkbVBoeUVyckNvdW50PSVkLCBjY2tQaHlFcnJDb3VudD0lZFxuXG4iLAotCQlhbmlTdGF0ZS0+Y3ljbGVDb3VudCwKLQkJYW5pU3RhdGUtPm9mZG1QaHlFcnJDb3VudCwKLQkJYW5pU3RhdGUtPmNja1BoeUVyckNvdW50KTsKLQorCQkgICFhbmlTdGF0ZS0+bXJjQ0NLT2ZmID8gIm9uIiA6ICJvZmYiLAorCQkgIGFuaVN0YXRlLT5saXN0ZW5UaW1lLAorCQkgIGFuaVN0YXRlLT5jeWNsZUNvdW50LAorCQkgIGFuaVN0YXRlLT5saXN0ZW5UaW1lLAorCQkgIGFuaVN0YXRlLT5vZmRtUGh5RXJyQ291bnQsCisJCSAgYW5pU3RhdGUtPmNja1BoeUVyckNvdW50KTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgYXI5MDAzX2h3X25mX3Nhbml0aXplXzJnKHN0cnVjdCBhdGhfaHcgKmFoLCBzMTYgKm5mKQotewotCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwotCi0JaWYgKCpuZiA+IGFoLT5uZl8yZ19tYXgpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkgICIyIEdIeiBORiAoJWQpID4gTUFYICglZCksICIKLQkJCSAgImNvcnJlY3RpbmcgdG8gTUFYIiwKLQkJCSAgKm5mLCBhaC0+bmZfMmdfbWF4KTsKLQkJKm5mID0gYWgtPm5mXzJnX21heDsKLQl9IGVsc2UgaWYgKCpuZiA8IGFoLT5uZl8yZ19taW4pIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkgICIyIEdIeiBORiAoJWQpIDwgTUlOICglZCksICIKLQkJCSAgImNvcnJlY3RpbmcgdG8gTUlOIiwKLQkJCSAgKm5mLCBhaC0+bmZfMmdfbWluKTsKLQkJKm5mID0gYWgtPm5mXzJnX21pbjsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGFyOTAwM19od19uZl9zYW5pdGl6ZV81ZyhzdHJ1Y3QgYXRoX2h3ICphaCwgczE2ICpuZikKLXsKLQlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKLQotCWlmICgqbmYgPiBhaC0+bmZfNWdfbWF4KSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJICAiNSBHSHogTkYgKCVkKSA+IE1BWCAoJWQpLCAiCi0JCQkgICJjb3JyZWN0aW5nIHRvIE1BWCIsCi0JCQkgICpuZiwgYWgtPm5mXzVnX21heCk7Ci0JCSpuZiA9IGFoLT5uZl81Z19tYXg7Ci0JfSBlbHNlIGlmICgqbmYgPCBhaC0+bmZfNWdfbWluKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJICAiNSBHSHogTkYgKCVkKSA8IE1JTiAoJWQpLCAiCi0JCQkgICJjb3JyZWN0aW5nIHRvIE1JTiIsCi0JCQkgICpuZiwgYWgtPm5mXzVnX21pbik7Ci0JCSpuZiA9IGFoLT5uZl81Z19taW47Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBhcjkwMDNfaHdfbmZfc2FuaXRpemUoc3RydWN0IGF0aF9odyAqYWgsIHMxNiAqbmYpCi17Ci0JaWYgKElTX0NIQU5fMkdIWihhaC0+Y3VyY2hhbikpCi0JCWFyOTAwM19od19uZl9zYW5pdGl6ZV8yZyhhaCwgbmYpOwotCWVsc2UKLQkJYXI5MDAzX2h3X25mX3Nhbml0aXplXzVnKGFoLCBuZik7Ci19Ci0KIHN0YXRpYyB2b2lkIGFyOTAwM19od19kb19nZXRuZihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgICAgIGludDE2X3QgbmZhcnJheVtOVU1fTkZfUkVBRElOR1NdKQogewotCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCWludDE2X3QgbmY7CiAKIAluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0NBXzApLCBBUl9QSFlfTUlOQ0NBX1BXUik7Ci0JaWYgKG5mICYgMHgxMDApCi0JCW5mID0gMCAtICgobmYgXiAweDFmZikgKyAxKTsKLQlhcjkwMDNfaHdfbmZfc2FuaXRpemUoYWgsICZuZik7Ci0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCSAgIk5GIGNhbGlicmF0ZWQgW2N0bF0gW2NoYWluIDBdIGlzICVkXG4iLCBuZik7Ci0JbmZhcnJheVswXSA9IG5mOworCW5mYXJyYXlbMF0gPSBzaWduX2V4dGVuZChuZiwgOSk7CiAKIAluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0NBXzEpLCBBUl9QSFlfQ0gxX01JTkNDQV9QV1IpOwotCWlmIChuZiAmIDB4MTAwKQotCQluZiA9IDAgLSAoKG5mIF4gMHgxZmYpICsgMSk7Ci0JYXI5MDAzX2h3X25mX3Nhbml0aXplKGFoLCAmbmYpOwotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkgICJORiBjYWxpYnJhdGVkIFtjdGxdIFtjaGFpbiAxXSBpcyAlZFxuIiwgbmYpOwotCW5mYXJyYXlbMV0gPSBuZjsKKwluZmFycmF5WzFdID0gc2lnbl9leHRlbmQobmYsIDkpOwogCiAJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NDQV8yKSwgQVJfUEhZX0NIMl9NSU5DQ0FfUFdSKTsKLQlpZiAobmYgJiAweDEwMCkKLQkJbmYgPSAwIC0gKChuZiBeIDB4MWZmKSArIDEpOwotCWFyOTAwM19od19uZl9zYW5pdGl6ZShhaCwgJm5mKTsKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJICAiTkYgY2FsaWJyYXRlZCBbY3RsXSBbY2hhaW4gMl0gaXMgJWRcbiIsIG5mKTsKLQluZmFycmF5WzJdID0gbmY7CisJbmZhcnJheVsyXSA9IHNpZ25fZXh0ZW5kKG5mLCA5KTsKKworCWlmICghSVNfQ0hBTl9IVDQwKGFoLT5jdXJjaGFuKSkKKwkJcmV0dXJuOwogCiAJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0VYVF9DQ0EpLCBBUl9QSFlfRVhUX01JTkNDQV9QV1IpOwotCWlmIChuZiAmIDB4MTAwKQotCQluZiA9IDAgLSAoKG5mIF4gMHgxZmYpICsgMSk7Ci0JYXI5MDAzX2h3X25mX3Nhbml0aXplKGFoLCAmbmYpOwotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkgICJORiBjYWxpYnJhdGVkIFtleHRdIFtjaGFpbiAwXSBpcyAlZFxuIiwgbmYpOwotCW5mYXJyYXlbM10gPSBuZjsKKwluZmFycmF5WzNdID0gc2lnbl9leHRlbmQobmYsIDkpOwogCiAJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0VYVF9DQ0FfMSksIEFSX1BIWV9DSDFfRVhUX01JTkNDQV9QV1IpOwotCWlmIChuZiAmIDB4MTAwKQotCQluZiA9IDAgLSAoKG5mIF4gMHgxZmYpICsgMSk7Ci0JYXI5MDAzX2h3X25mX3Nhbml0aXplKGFoLCAmbmYpOwotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkgICJORiBjYWxpYnJhdGVkIFtleHRdIFtjaGFpbiAxXSBpcyAlZFxuIiwgbmYpOwotCW5mYXJyYXlbNF0gPSBuZjsKKwluZmFycmF5WzRdID0gc2lnbl9leHRlbmQobmYsIDkpOwogCiAJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0VYVF9DQ0FfMiksIEFSX1BIWV9DSDJfRVhUX01JTkNDQV9QV1IpOwotCWlmIChuZiAmIDB4MTAwKQotCQluZiA9IDAgLSAoKG5mIF4gMHgxZmYpICsgMSk7Ci0JYXI5MDAzX2h3X25mX3Nhbml0aXplKGFoLCAmbmYpOwotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkgICJORiBjYWxpYnJhdGVkIFtleHRdIFtjaGFpbiAyXSBpcyAlZFxuIiwgbmYpOwotCW5mYXJyYXlbNV0gPSBuZjsKKwluZmFycmF5WzVdID0gc2lnbl9leHRlbmQobmYsIDkpOwogfQogCi12b2lkIGFyOTAwM19od19zZXRfbmZfbGltaXRzKHN0cnVjdCBhdGhfaHcgKmFoKQorc3RhdGljIHZvaWQgYXI5MDAzX2h3X3NldF9uZl9saW1pdHMoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0JYWgtPm5mXzJnX21heCA9IEFSX1BIWV9DQ0FfTUFYX0dPT0RfVkFMXzkzMDBfMkdIWjsKLQlhaC0+bmZfMmdfbWluID0gQVJfUEhZX0NDQV9NSU5fR09PRF9WQUxfOTMwMF8yR0haOwotCWFoLT5uZl81Z19tYXggPSBBUl9QSFlfQ0NBX01BWF9HT09EX1ZBTF85MzAwXzVHSFo7Ci0JYWgtPm5mXzVnX21pbiA9IEFSX1BIWV9DQ0FfTUlOX0dPT0RfVkFMXzkzMDBfNUdIWjsKKwlhaC0+bmZfMmcubWF4ID0gQVJfUEhZX0NDQV9NQVhfR09PRF9WQUxfOTMwMF8yR0haOworCWFoLT5uZl8yZy5taW4gPSBBUl9QSFlfQ0NBX01JTl9HT09EX1ZBTF85MzAwXzJHSFo7CisJYWgtPm5mXzJnLm5vbWluYWwgPSBBUl9QSFlfQ0NBX05PTV9WQUxfOTMwMF8yR0haOworCWFoLT5uZl81Zy5tYXggPSBBUl9QSFlfQ0NBX01BWF9HT09EX1ZBTF85MzAwXzVHSFo7CisJYWgtPm5mXzVnLm1pbiA9IEFSX1BIWV9DQ0FfTUlOX0dPT0RfVkFMXzkzMDBfNUdIWjsKKwlhaC0+bmZfNWcubm9taW5hbCA9IEFSX1BIWV9DQ0FfTk9NX1ZBTF85MzAwXzVHSFo7CiB9CiAKIC8qCi0gKiBGaW5kIG91dCB3aGljaCBvZiB0aGUgUlggY2hhaW5zIGFyZSBlbmFibGVkCisgKiBJbml0aWFsaXplIHRoZSBBTkkgcmVnaXN0ZXIgdmFsdWVzIHdpdGggZGVmYXVsdCAoaW5pKSB2YWx1ZXMuCisgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGR1cmluZyBhIChmdWxsKSBoYXJkd2FyZSByZXNldCBhZnRlcgorICogYWxsIHRoZSByZWdpc3RlcnMgYXJlIGluaXRpYWxpc2VkIGZyb20gdGhlIElOSS4KICAqLwotc3RhdGljIHUzMiBhcjkwMDNfaHdfZ2V0X3J4X2NoYWlubWFzayhzdHJ1Y3QgYXRoX2h3ICphaCkKK3N0YXRpYyB2b2lkIGFyOTAwM19od19hbmlfY2FjaGVfaW5pX3JlZ3Moc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0JdTMyIGNoYWluID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9SWF9DSEFJTk1BU0spOwotCS8qCi0JICogVGhlIGJpdHMgWzI6MF0gaW5kaWNhdGUgdGhlIHJ4IGNoYWluIG1hc2sgYW5kIGFyZSB0byBiZQotCSAqIGludGVycHJldGVkIGFzIGZvbGxvd3M6Ci0JICogMDB4ID0+IE9ubHkgY2hhaW4gMCBpcyBlbmFibGVkCi0JICogMDF4ID0+IENoYWluIDEgYW5kIDAgZW5hYmxlZAotCSAqIDF4eCA9PiBDaGFpbiAyLDEgYW5kIDAgZW5hYmxlZAotCSAqLwotCXJldHVybiBjaGFpbiAmIDB4NzsKKwlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlOworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOworCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuID0gYWgtPmN1cmNoYW47CisJc3RydWN0IGF0aDlrX2FuaV9kZWZhdWx0ICppbmlEZWY7CisJaW50IGluZGV4OworCXUzMiB2YWw7CisKKwlpbmRleCA9IGF0aDlrX2h3X2dldF9hbmlfY2hhbm5lbF9pZHgoYWgsIGNoYW4pOworCWFuaVN0YXRlID0gJmFoLT5hbmlbaW5kZXhdOworCWFoLT5jdXJhbmkgPSBhbmlTdGF0ZTsKKwlpbmlEZWYgPSAmYW5pU3RhdGUtPmluaURlZjsKKworCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAorCQkgICJ2ZXIgJWQuJWQgb3Btb2RlICV1IGNoYW4gJWQgTWh6LzB4JXhcbiIsCisJCSAgYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiwKKwkJICBhaC0+aHdfdmVyc2lvbi5tYWNSZXYsCisJCSAgYWgtPm9wbW9kZSwKKwkJICBjaGFuLT5jaGFubmVsLAorCQkgIGNoYW4tPmNoYW5uZWxGbGFncyk7CisKKwl2YWwgPSBSRUdfUkVBRChhaCwgQVJfUEhZX1NGQ09SUik7CisJaW5pRGVmLT5tMVRocmVzaCA9IE1TKHZhbCwgQVJfUEhZX1NGQ09SUl9NMV9USFJFU0gpOworCWluaURlZi0+bTJUaHJlc2ggPSBNUyh2YWwsIEFSX1BIWV9TRkNPUlJfTTJfVEhSRVNIKTsKKwlpbmlEZWYtPm0yQ291bnRUaHIgPSBNUyh2YWwsIEFSX1BIWV9TRkNPUlJfTTJDT1VOVF9USFIpOworCisJdmFsID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9TRkNPUlJfTE9XKTsKKwlpbmlEZWYtPm0xVGhyZXNoTG93ID0gTVModmFsLCBBUl9QSFlfU0ZDT1JSX0xPV19NMV9USFJFU0hfTE9XKTsKKwlpbmlEZWYtPm0yVGhyZXNoTG93ID0gTVModmFsLCBBUl9QSFlfU0ZDT1JSX0xPV19NMl9USFJFU0hfTE9XKTsKKwlpbmlEZWYtPm0yQ291bnRUaHJMb3cgPSBNUyh2YWwsIEFSX1BIWV9TRkNPUlJfTE9XX00yQ09VTlRfVEhSX0xPVyk7CisKKwl2YWwgPSBSRUdfUkVBRChhaCwgQVJfUEhZX1NGQ09SUl9FWFQpOworCWluaURlZi0+bTFUaHJlc2hFeHQgPSBNUyh2YWwsIEFSX1BIWV9TRkNPUlJfRVhUX00xX1RIUkVTSCk7CisJaW5pRGVmLT5tMlRocmVzaEV4dCA9IE1TKHZhbCwgQVJfUEhZX1NGQ09SUl9FWFRfTTJfVEhSRVNIKTsKKwlpbmlEZWYtPm0xVGhyZXNoTG93RXh0ID0gTVModmFsLCBBUl9QSFlfU0ZDT1JSX0VYVF9NMV9USFJFU0hfTE9XKTsKKwlpbmlEZWYtPm0yVGhyZXNoTG93RXh0ID0gTVModmFsLCBBUl9QSFlfU0ZDT1JSX0VYVF9NMl9USFJFU0hfTE9XKTsKKwlpbmlEZWYtPmZpcnN0ZXAgPSBSRUdfUkVBRF9GSUVMRChhaCwKKwkJCQkJIEFSX1BIWV9GSU5EX1NJRywKKwkJCQkJIEFSX1BIWV9GSU5EX1NJR19GSVJTVEVQKTsKKwlpbmlEZWYtPmZpcnN0ZXBMb3cgPSBSRUdfUkVBRF9GSUVMRChhaCwKKwkJCQkJICAgIEFSX1BIWV9GSU5EX1NJR19MT1csCisJCQkJCSAgICBBUl9QSFlfRklORF9TSUdfTE9XX0ZJUlNURVBfTE9XKTsKKwlpbmlEZWYtPmN5Y3B3clRocjEgPSBSRUdfUkVBRF9GSUVMRChhaCwKKwkJCQkJICAgIEFSX1BIWV9USU1JTkc1LAorCQkJCQkgICAgQVJfUEhZX1RJTUlORzVfQ1lDUFdSX1RIUjEpOworCWluaURlZi0+Y3ljcHdyVGhyMUV4dCA9IFJFR19SRUFEX0ZJRUxEKGFoLAorCQkJCQkgICAgICAgQVJfUEhZX0VYVF9DQ0EsCisJCQkJCSAgICAgICBBUl9QSFlfRVhUX0NZQ1BXUl9USFIxKTsKKworCS8qIHRoZXNlIGxldmVscyBqdXN0IGdvdCByZXNldCB0byBkZWZhdWx0cyBieSB0aGUgSU5JICovCisJYW5pU3RhdGUtPnNwdXJJbW11bml0eUxldmVsID0gQVRIOUtfQU5JX1NQVVJfSU1NVU5FX0xWTF9ORVc7CisJYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCA9IEFUSDlLX0FOSV9GSVJTVEVQX0xWTF9ORVc7CisJYW5pU3RhdGUtPm9mZG1XZWFrU2lnRGV0ZWN0T2ZmID0gIUFUSDlLX0FOSV9VU0VfT0ZETV9XRUFLX1NJRzsKKwlhbmlTdGF0ZS0+bXJjQ0NLT2ZmID0gIUFUSDlLX0FOSV9FTkFCTEVfTVJDX0NDSzsKKworCWFuaVN0YXRlLT5jeWNsZUNvdW50ID0gMDsKIH0KIAotc3RhdGljIHZvaWQgYXI5MDAzX2h3X2xvYWRuZihzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCit2b2lkIGFyOTAwM19od19hdHRhY2hfcGh5X29wcyhzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoOWtfbmZjYWxfaGlzdCAqaDsKLQl1bnNpZ25lZCBpLCBqOwotCWludDMyX3QgdmFsOworCXN0cnVjdCBhdGhfaHdfcHJpdmF0ZV9vcHMgKnByaXZfb3BzID0gYXRoOWtfaHdfcHJpdmF0ZV9vcHMoYWgpOwogCWNvbnN0IHUzMiBhcjkzMDBfY2NhX3JlZ3NbNl0gPSB7CiAJCUFSX1BIWV9DQ0FfMCwKIAkJQVJfUEhZX0NDQV8xLApAQCAtMTA0MCw4MCArMTEyNyw2IEBACiAJCUFSX1BIWV9FWFRfQ0NBXzEsCiAJCUFSX1BIWV9FWFRfQ0NBXzIsCiAJfTsKLQl1OCBjaGFpbm1hc2ssIHJ4X2NoYWluX3N0YXR1czsKLQlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKLQotCXJ4X2NoYWluX3N0YXR1cyA9IGFyOTAwM19od19nZXRfcnhfY2hhaW5tYXNrKGFoKTsKLQotCWNoYWlubWFzayA9IDB4M0Y7Ci0JaCA9IGFoLT5uZkNhbEhpc3Q7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX05GX1JFQURJTkdTOyBpKyspIHsKLQkJaWYgKGNoYWlubWFzayAmICgxIDw8IGkpKSB7Ci0JCQl2YWwgPSBSRUdfUkVBRChhaCwgYXI5MzAwX2NjYV9yZWdzW2ldKTsKLQkJCXZhbCAmPSAweEZGRkZGRTAwOwotCQkJdmFsIHw9ICgoKHUzMikgKGhbaV0ucHJpdk5GKSA8PCAxKSAmIDB4MWZmKTsKLQkJCVJFR19XUklURShhaCwgYXI5MzAwX2NjYV9yZWdzW2ldLCB2YWwpOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBMb2FkIHNvZnR3YXJlIGZpbHRlcmVkIE5GIHZhbHVlIGludG8gYmFzZWJhbmQgaW50ZXJuYWwgbWluQ0NBcHdyCi0JICogdmFyaWFibGUuCi0JICovCi0JUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwKLQkJICAgIEFSX1BIWV9BR0NfQ09OVFJPTF9FTkFCTEVfTkYpOwotCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsCi0JCSAgICBBUl9QSFlfQUdDX0NPTlRST0xfTk9fVVBEQVRFX05GKTsKLQlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfTkYpOwotCi0JLyoKLQkgKiBXYWl0IGZvciBsb2FkIHRvIGNvbXBsZXRlLCBzaG91bGQgYmUgZmFzdCwgYSBmZXcgMTBzIG9mIHVzLgotCSAqIFRoZSBtYXggZGVsYXkgd2FzIGNoYW5nZWQgZnJvbSBhbiBvcmlnaW5hbCAyNTB1cyB0byAxMDAwMHVzCi0JICogc2luY2UgMjUwdXMgb2Z0ZW4gcmVzdWx0cyBpbiBORiBsb2FkIHRpbWVvdXQgYW5kIGNhdXNlcyBkZWFmCi0JICogY29uZGl0aW9uIGR1cmluZyBzdHJlc3MgdGVzdGluZyAxMi8xMi8yMDA5Ci0JICovCi0JZm9yIChqID0gMDsgaiA8IDEwMDA7IGorKykgewotCQlpZiAoKFJFR19SRUFEKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wpICYKLQkJICAgICBBUl9QSFlfQUdDX0NPTlRST0xfTkYpID09IDApCi0JCQlicmVhazsKLQkJdWRlbGF5KDEwKTsKLQl9Ci0KLQkvKgotCSAqIFdlIHRpbWVkIG91dCB3YWl0aW5nIGZvciB0aGUgbm9pc2VmbG9vciB0byBsb2FkLCBwcm9iYWJseSBkdWUgdG8gYW4KLQkgKiBpbi1wcm9ncmVzcyByeC4gU2ltcGx5IHJldHVybiBoZXJlIGFuZCBhbGxvdyB0aGUgbG9hZCBwbGVudHkgb2YgdGltZQotCSAqIHRvIGNvbXBsZXRlIGJlZm9yZSB0aGUgbmV4dCBjYWxpYnJhdGlvbiBpbnRlcnZhbC4gIFdlIG5lZWQgdG8gYXZvaWQKLQkgKiB0cnlpbmcgdG8gbG9hZCAtNTAgKHdoaWNoIGhhcHBlbnMgYmVsb3cpIHdoaWxlIHRoZSBwcmV2aW91cyBsb2FkIGlzCi0JICogc3RpbGwgaW4gcHJvZ3Jlc3MgYXMgdGhpcyBjYW4gY2F1c2UgcnggZGVhZm5lc3MuIEluc3RlYWQgYnkgcmV0dXJuaW5nCi0JICogaGVyZSwgdGhlIGJhc2ViYW5kIG5mIGNhbCB3aWxsIGp1c3QgYmUgY2FwcGVkIGJ5IG91ciBwcmVzZW50Ci0JICogbm9pc2VmbG9vciB1bnRpbCB0aGUgbmV4dCBjYWxpYnJhdGlvbiB0aW1lci4KLQkgKi8KLQlpZiAoaiA9PSAxMDAwKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5ZLCAiVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBuZiAiCi0JCQkgICJ0byBsb2FkOiBBUl9QSFlfQUdDX0NPTlRST0w9MHgleFxuIiwKLQkJCSAgUkVHX1JFQUQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCkpOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBSZXN0b3JlIG1heENDQVBvd2VyIHJlZ2lzdGVyIHBhcmFtZXRlciBhZ2FpbiBzbyB0aGF0IHdlJ3JlIG5vdCBjYXBwZWQKLQkgKiBieSB0aGUgbWVkaWFuIHdlIGp1c3QgbG9hZGVkLiAgVGhpcyB3aWxsIGJlIGluaXRpYWwgKGFuZCBtYXgpIHZhbHVlCi0JICogb2YgbmV4dCBub2lzZSBmbG9vciBjYWxpYnJhdGlvbiB0aGUgYmFzZWJhbmQgZG9lcy4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX05GX1JFQURJTkdTOyBpKyspIHsKLQkJaWYgKGNoYWlubWFzayAmICgxIDw8IGkpKSB7Ci0JCQl2YWwgPSBSRUdfUkVBRChhaCwgYXI5MzAwX2NjYV9yZWdzW2ldKTsKLQkJCXZhbCAmPSAweEZGRkZGRTAwOwotCQkJdmFsIHw9ICgoKHUzMikgKC01MCkgPDwgMSkgJiAweDFmZik7Ci0JCQlSRUdfV1JJVEUoYWgsIGFyOTMwMF9jY2FfcmVnc1tpXSwgdmFsKTsKLQkJfQotCX0KLX0KLQotdm9pZCBhcjkwMDNfaHdfYXR0YWNoX3BoeV9vcHMoc3RydWN0IGF0aF9odyAqYWgpCi17Ci0Jc3RydWN0IGF0aF9od19wcml2YXRlX29wcyAqcHJpdl9vcHMgPSBhdGg5a19od19wcml2YXRlX29wcyhhaCk7CiAKIAlwcml2X29wcy0+cmZfc2V0X2ZyZXEgPSBhcjkwMDNfaHdfc2V0X2NoYW5uZWw7CiAJcHJpdl9vcHMtPnNwdXJfbWl0aWdhdGVfZnJlcSA9IGFyOTAwM19od19zcHVyX21pdGlnYXRlOwpAQCAtMTEzMCw1ICsxMTQzLDEyNyBAQAogCXByaXZfb3BzLT5zZXRfZGl2ZXJzaXR5ID0gYXI5MDAzX2h3X3NldF9kaXZlcnNpdHk7CiAJcHJpdl9vcHMtPmFuaV9jb250cm9sID0gYXI5MDAzX2h3X2FuaV9jb250cm9sOwogCXByaXZfb3BzLT5kb19nZXRuZiA9IGFyOTAwM19od19kb19nZXRuZjsKLQlwcml2X29wcy0+bG9hZG5mID0gYXI5MDAzX2h3X2xvYWRuZjsKKwlwcml2X29wcy0+YW5pX2NhY2hlX2luaV9yZWdzID0gYXI5MDAzX2h3X2FuaV9jYWNoZV9pbmlfcmVnczsKKworCWFyOTAwM19od19zZXRfbmZfbGltaXRzKGFoKTsKKwltZW1jcHkoYWgtPm5mX3JlZ3MsIGFyOTMwMF9jY2FfcmVncywgc2l6ZW9mKGFoLT5uZl9yZWdzKSk7CiB9CisKK3ZvaWQgYXI5MDAzX2h3X2JiX3dhdGNoZG9nX2NvbmZpZyhzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKKwl1MzIgaWRsZV90bW9fbXMgPSBhaC0+YmJfd2F0Y2hkb2dfdGltZW91dF9tczsKKwl1MzIgdmFsLCBpZGxlX2NvdW50OworCisJaWYgKCFpZGxlX3Rtb19tcykgeworCQkvKiBkaXNhYmxlIElSUSwgZGlzYWJsZSBjaGlwLXJlc2V0IGZvciBCQiBwYW5pYyAqLworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9XQVRDSERPR19DVExfMiwKKwkJCSAgUkVHX1JFQUQoYWgsIEFSX1BIWV9XQVRDSERPR19DVExfMikgJgorCQkJICB+KEFSX1BIWV9XQVRDSERPR19SU1RfRU5BQkxFIHwKKwkJCSAgICBBUl9QSFlfV0FUQ0hET0dfSVJRX0VOQUJMRSkpOworCisJCS8qIGRpc2FibGUgd2F0Y2hkb2cgaW4gbm9uLUlETEUgbW9kZSwgZGlzYWJsZSBpbiBJRExFIG1vZGUgKi8KKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfV0FUQ0hET0dfQ1RMXzEsCisJCQkgIFJFR19SRUFEKGFoLCBBUl9QSFlfV0FUQ0hET0dfQ1RMXzEpICYKKwkJCSAgfihBUl9QSFlfV0FUQ0hET0dfTk9OX0lETEVfRU5BQkxFIHwKKwkJCSAgICBBUl9QSFlfV0FUQ0hET0dfSURMRV9FTkFCTEUpKTsKKworCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1JFU0VULCAiRGlzYWJsZWQgQkIgV2F0Y2hkb2dcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogZW5hYmxlIElSUSwgZGlzYWJsZSBjaGlwLXJlc2V0IGZvciBCQiB3YXRjaGRvZyAqLworCXZhbCA9IFJFR19SRUFEKGFoLCBBUl9QSFlfV0FUQ0hET0dfQ1RMXzIpICYgQVJfUEhZX1dBVENIRE9HX0NOVEwyX01BU0s7CisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfV0FUQ0hET0dfQ1RMXzIsCisJCSAgKHZhbCB8IEFSX1BIWV9XQVRDSERPR19JUlFfRU5BQkxFKSAmCisJCSAgfkFSX1BIWV9XQVRDSERPR19SU1RfRU5BQkxFKTsKKworCS8qIGJvdW5kIGxpbWl0IHRvIDEwIHNlY3MgKi8KKwlpZiAoaWRsZV90bW9fbXMgPiAxMDAwMCkKKwkJaWRsZV90bW9fbXMgPSAxMDAwMDsKKworCS8qCisJICogVGhlIHRpbWUgdW5pdCBmb3Igd2F0Y2hkb2cgZXZlbnQgaXMgMl4xNSA0NC84OE1IeiBjeWNsZXMuCisJICoKKwkgKiBGb3IgSFQyMCB3ZSBoYXZlIGEgdGltZSB1bml0IG9mIDJeMTUvNDQgTUh6ID0gLjc0IG1zIHBlciB0aWNrCisJICogRm9yIEhUNDAgd2UgaGF2ZSBhIHRpbWUgdW5pdCBvZiAyXjE1Lzg4IE1IeiA9IC4zNyBtcyBwZXIgdGljaworCSAqCisJICogR2l2ZW4gd2UgdXNlIGZhc3QgY2xvY2sgbm93IGluIDUgR0h6LCB0aGVzZSB0aW1lIHVuaXRzIHNob3VsZAorCSAqIGJlIGNvbW1vbiBmb3IgYm90aCAyIEdIeiBhbmQgNSBHSHouCisJICovCisJaWRsZV9jb3VudCA9ICgxMDAgKiBpZGxlX3Rtb19tcykgLyA3NDsKKwlpZiAoYWgtPmN1cmNoYW4gJiYgSVNfQ0hBTl9IVDQwKGFoLT5jdXJjaGFuKSkKKwkJaWRsZV9jb3VudCA9ICgxMDAgKiBpZGxlX3Rtb19tcykgLyAzNzsKKworCS8qCisJICogZW5hYmxlIHdhdGNoZG9nIGluIG5vbi1JRExFIG1vZGUsIGRpc2FibGUgaW4gSURMRSBtb2RlLAorCSAqIHNldCBpZGxlIHRpbWUtb3V0LgorCSAqLworCVJFR19XUklURShhaCwgQVJfUEhZX1dBVENIRE9HX0NUTF8xLAorCQkgIEFSX1BIWV9XQVRDSERPR19OT05fSURMRV9FTkFCTEUgfAorCQkgIEFSX1BIWV9XQVRDSERPR19JRExFX01BU0sgfAorCQkgIChBUl9QSFlfV0FUQ0hET0dfTk9OX0lETEVfTUFTSyAmIChpZGxlX2NvdW50IDw8IDIpKSk7CisKKwlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1JFU0VULAorCQkgICJFbmFibGVkIEJCIFdhdGNoZG9nIHRpbWVvdXQgKCV1IG1zKVxuIiwKKwkJICBpZGxlX3Rtb19tcyk7Cit9CisKK3ZvaWQgYXI5MDAzX2h3X2JiX3dhdGNoZG9nX3JlYWQoc3RydWN0IGF0aF9odyAqYWgpCit7CisJLyoKKwkgKiB3ZSB3YW50IHRvIGF2b2lkIHByaW50aW5nIGluIElTUiBjb250ZXh0IHNvIHdlIHNhdmUgdGhlCisJICogd2F0Y2hkb2cgc3RhdHVzIHRvIGJlIHByaW50ZWQgbGF0ZXIgaW4gYm90dG9tIGhhbGYgY29udGV4dC4KKwkgKi8KKwlhaC0+YmJfd2F0Y2hkb2dfbGFzdF9zdGF0dXMgPSBSRUdfUkVBRChhaCwgQVJfUEhZX1dBVENIRE9HX1NUQVRVUyk7CisKKwkvKgorCSAqIHRoZSB3YXRjaGRvZyB0aW1lciBzaG91bGQgcmVzZXQgb24gc3RhdHVzIHJlYWQgYnV0IHRvIGJlIHN1cmUKKwkgKiBzdXJlIHdlIHdyaXRlIDAgdG8gdGhlIHdhdGNoZG9nIHN0YXR1cyBiaXQuCisJICovCisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfV0FUQ0hET0dfU1RBVFVTLAorCQkgIGFoLT5iYl93YXRjaGRvZ19sYXN0X3N0YXR1cyAmIH5BUl9QSFlfV0FUQ0hET0dfU1RBVFVTX0NMUik7Cit9CisKK3ZvaWQgYXI5MDAzX2h3X2JiX3dhdGNoZG9nX2RiZ19pbmZvKHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOworCXUzMiByeGNfcGNudCA9IDAsIHJ4Zl9wY250ID0gMCwgdHhmX3BjbnQgPSAwLCBzdGF0dXM7CisKKwlpZiAobGlrZWx5KCEoY29tbW9uLT5kZWJ1Z19tYXNrICYgQVRIX0RCR19SRVNFVCkpKQorCQlyZXR1cm47CisKKwlzdGF0dXMgPSBhaC0+YmJfd2F0Y2hkb2dfbGFzdF9zdGF0dXM7CisJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19SRVNFVCwKKwkJICAiXG49PT09IEJCIHVwZGF0ZTogQkIgc3RhdHVzPTB4JTA4eCA9PT09XG4iLCBzdGF0dXMpOworCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfUkVTRVQsCisJCSAgIioqIEJCIHN0YXRlOiB3ZD0ldSBkZXQ9JXUgcmRhcj0ldSByT0ZETT0lZCAiCisJCSAgInJDQ0s9JXUgdE9GRE09JXUgdENDSz0ldSBhZ2M9JXUgc3JjPSV1ICoqXG4iLAorCQkgIE1TKHN0YXR1cywgQVJfUEhZX1dBVENIRE9HX0lORk8pLAorCQkgIE1TKHN0YXR1cywgQVJfUEhZX1dBVENIRE9HX0RFVF9IQU5HKSwKKwkJICBNUyhzdGF0dXMsIEFSX1BIWV9XQVRDSERPR19SQURBUl9TTSksCisJCSAgTVMoc3RhdHVzLCBBUl9QSFlfV0FUQ0hET0dfUlhfT0ZETV9TTSksCisJCSAgTVMoc3RhdHVzLCBBUl9QSFlfV0FUQ0hET0dfUlhfQ0NLX1NNKSwKKwkJICBNUyhzdGF0dXMsIEFSX1BIWV9XQVRDSERPR19UWF9PRkRNX1NNKSwKKwkJICBNUyhzdGF0dXMsIEFSX1BIWV9XQVRDSERPR19UWF9DQ0tfU00pLAorCQkgIE1TKHN0YXR1cywgQVJfUEhZX1dBVENIRE9HX0FHQ19TTSksCisJCSAgTVMoc3RhdHVzLEFSX1BIWV9XQVRDSERPR19TUkNIX1NNKSk7CisKKwlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1JFU0VULAorCQkgICIqKiBCQiBXRCBjbnRsOiBjbnRsMT0weCUwOHggY250bDI9MHglMDh4ICoqXG4iLAorCQkgIFJFR19SRUFEKGFoLCBBUl9QSFlfV0FUQ0hET0dfQ1RMXzEpLAorCQkgIFJFR19SRUFEKGFoLCBBUl9QSFlfV0FUQ0hET0dfQ1RMXzIpKTsKKwlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1JFU0VULAorCQkgICIqKiBCQiBtb2RlOiBCQl9nZW5fY29udHJvbHM9MHglMDh4ICoqXG4iLAorCQkgIFJFR19SRUFEKGFoLCBBUl9QSFlfR0VOX0NUUkwpKTsKKworCWlmIChhdGg5a19od19HZXRNaWJDeWNsZUNvdW50c1BjdChhaCwgJnJ4Y19wY250LCAmcnhmX3BjbnQsICZ0eGZfcGNudCkpCisJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfUkVTRVQsCisJCQkgICIqKiBCQiBidXN5IHRpbWVzOiByeF9jbGVhcj0lZCUlLCAiCisJCQkgICJyeF9mcmFtZT0lZCUlLCB0eF9mcmFtZT0lZCUlICoqXG4iLAorCQkJICByeGNfcGNudCwgcnhmX3BjbnQsIHR4Zl9wY250KTsKKworCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfUkVTRVQsCisJCSAgIj09PT0gQkIgdXBkYXRlOiBkb25lID09PT1cblxuIik7Cit9CitFWFBPUlRfU1lNQk9MKGFyOTAwM19od19iYl93YXRjaGRvZ19kYmdfaW5mbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX3BoeS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19waHkuaAppbmRleCBmMDhjYzhiLi4zMzk0ZGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX3BoeS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfcGh5LmgKQEAgLTE0OSw2ICsxNDksOCBAQAogI2RlZmluZSBBUl9QSFlfRVhUX0NDQV9USFJFU0g2Ml9TICAgICAgIDE2CiAjZGVmaW5lIEFSX1BIWV9FWFRfTUlOQ0NBX1BXUiAgIDB4MDFGRjAwMDAKICNkZWZpbmUgQVJfUEhZX0VYVF9NSU5DQ0FfUFdSX1MgMTYKKyNkZWZpbmUgQVJfUEhZX0VYVF9DWUNQV1JfVEhSMSAweDAwMDBGRTAwTAorI2RlZmluZSBBUl9QSFlfRVhUX0NZQ1BXUl9USFIxX1MgOQogI2RlZmluZSBBUl9QSFlfVElNSU5HNV9DWUNQV1JfVEhSMSAgMHgwMDAwMDBGRQogI2RlZmluZSBBUl9QSFlfVElNSU5HNV9DWUNQV1JfVEhSMV9TICAgIDEKICNkZWZpbmUgQVJfUEhZX1RJTUlORzVfQ1lDUFdSX1RIUjFfRU5BQkxFICAweDAwMDAwMDAxCkBAIC0yODMsNiArMjg1LDEyIEBACiAjZGVmaW5lIEFSX1BIWV9DQ0tfU1BVUl9NSVRfQ0NLX1NQVVJfRlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWZmZmZlMDAKICNkZWZpbmUgQVJfUEhZX0NDS19TUFVSX01JVF9DQ0tfU1BVUl9GUkVRX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQogCisjZGVmaW5lIEFSX1BIWV9NUkNfQ0NLX0NUUkwgICAgICAgICAoQVJfQUdDX0JBU0UgKyAweDFkMCkKKyNkZWZpbmUgQVJfUEhZX01SQ19DQ0tfRU5BQkxFICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVJfUEhZX01SQ19DQ0tfRU5BQkxFX1MgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVJfUEhZX01SQ19DQ0tfTVVYX1JFRyAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVJfUEhZX01SQ19DQ0tfTVVYX1JFR19TICAgICAgICAgICAgIDEKKwogI2RlZmluZSBBUl9QSFlfUlhfT0NHQUlOICAgICAgICAoQVJfQUdDX0JBU0UgKyAweDIwMCkKIAogI2RlZmluZSBBUl9QSFlfQ0NBX05PTV9WQUxfOTMwMF8yR0haICAgICAgICAgIC0xMTAKQEAgLTQ1MSw3ICs0NTksMTEgQEAKICNkZWZpbmUgQVJfUEhZX1RTVERBQyAgICAgICAgICAgIChBUl9TTV9CQVNFICsgMHgxNjgpCiAKICNkZWZpbmUgQVJfUEhZX0NIQU5fU1RBVFVTICAgICAgIChBUl9TTV9CQVNFICsgMHgxNmMpCi0jZGVmaW5lIEFSX1BIWV9DSEFOX0lORk9fTUVNT1JZICAoQVJfU01fQkFTRSArIDB4MTcwKQorCisjZGVmaW5lIEFSX1BIWV9DSEFOX0lORk9fTUVNT1JZCQkJCShBUl9TTV9CQVNFICsgMHgxNzApCisjZGVmaW5lIEFSX1BIWV9DSEFOX0lORk9fTUVNT1JZX0NIQU5JTkZPTUVNX1MyX1JFQUQJMHgwMDAwMDAwOAorI2RlZmluZSBBUl9QSFlfQ0hBTl9JTkZPX01FTU9SWV9DSEFOSU5GT01FTV9TMl9SRUFEX1MJMworCiAjZGVmaW5lIEFSX1BIWV9DSE5JTkZPX05PSVNFUFdSICAoQVJfU01fQkFTRSArIDB4MTc0KQogI2RlZmluZSBBUl9QSFlfQ0hOSU5GT19HQUlORElGRiAgKEFSX1NNX0JBU0UgKyAweDE3OCkKICNkZWZpbmUgQVJfUEhZX0NITklORk9fRklORVRJTSAgIChBUl9TTV9CQVNFICsgMHgxN2MpCkBAIC00NjcsMzAgKzQ3OSw4NiBAQAogI2RlZmluZSBBUl9QSFlfUFdSVFhfTUFYICAgICAgICAgKEFSX1NNX0JBU0UgKyAweDFmMCkKICNkZWZpbmUgQVJfUEhZX1BPV0VSX1RYX1NVQiAgICAgIChBUl9TTV9CQVNFICsgMHgxZjQpCiAKLSNkZWZpbmUgQVJfUEhZX1RQQ180X0IwICAgICAgICAgIChBUl9TTV9CQVNFICsgMHgyMDQpCi0jZGVmaW5lIEFSX1BIWV9UUENfNV9CMCAgICAgICAgICAoQVJfU01fQkFTRSArIDB4MjA4KQotI2RlZmluZSBBUl9QSFlfVFBDXzZfQjAgICAgICAgICAgKEFSX1NNX0JBU0UgKyAweDIwYykKLSNkZWZpbmUgQVJfUEhZX1RQQ18xMV9CMCAgICAgICAgIChBUl9TTV9CQVNFICsgMHgyMjApCi0jZGVmaW5lIEFSX1BIWV9UUENfMTggICAgICAgICAgICAoQVJfU01fQkFTRSArIDB4MjNjKQotI2RlZmluZSBBUl9QSFlfVFBDXzE5ICAgICAgICAgICAgKEFSX1NNX0JBU0UgKyAweDI0MCkKKyNkZWZpbmUgQVJfUEhZX1RQQ18xCQkJCShBUl9TTV9CQVNFICsgMHgxZjgpCisjZGVmaW5lIEFSX1BIWV9UUENfMV9GT1JDRURfREFDX0dBSU4JCTB4MDAwMDAwM2UKKyNkZWZpbmUgQVJfUEhZX1RQQ18xX0ZPUkNFRF9EQUNfR0FJTl9TCQkxCisjZGVmaW5lIEFSX1BIWV9UUENfMV9GT1JDRV9EQUNfR0FJTgkJMHgwMDAwMDAwMQorI2RlZmluZSBBUl9QSFlfVFBDXzFfRk9SQ0VfREFDX0dBSU5fUwkJMAogCi0jZGVmaW5lIEFSX1BIWV9UWF9GT1JDRURfR0FJTiAgICAoQVJfU01fQkFTRSArIDB4MjU4KQorI2RlZmluZSBBUl9QSFlfVFBDXzRfQjAJCQkJKEFSX1NNX0JBU0UgKyAweDIwNCkKKyNkZWZpbmUgQVJfUEhZX1RQQ181X0IwCQkJCShBUl9TTV9CQVNFICsgMHgyMDgpCisjZGVmaW5lIEFSX1BIWV9UUENfNl9CMAkJCQkoQVJfU01fQkFTRSArIDB4MjBjKQorCisjZGVmaW5lIEFSX1BIWV9UUENfMTFfQjAJCQkoQVJfU01fQkFTRSArIDB4MjIwKQorI2RlZmluZSBBUl9QSFlfVFBDXzExX0IxCQkJKEFSX1NNMV9CQVNFICsgMHgyMjApCisjZGVmaW5lIEFSX1BIWV9UUENfMTFfQjIJCQkoQVJfU00yX0JBU0UgKyAweDIyMCkKKyNkZWZpbmUgQVJfUEhZX1RQQ18xMV9PTFBDX0dBSU5fREVMVEEJCTB4MDBmZjAwMDAKKyNkZWZpbmUgQVJfUEhZX1RQQ18xMV9PTFBDX0dBSU5fREVMVEFfUwkJMTYKKworI2RlZmluZSBBUl9QSFlfVFBDXzEyCQkJCShBUl9TTV9CQVNFICsgMHgyMjQpCisjZGVmaW5lIEFSX1BIWV9UUENfMTJfREVTSVJFRF9TQ0FMRV9IVDQwXzUJMHgzZTAwMDAwMAorI2RlZmluZSBBUl9QSFlfVFBDXzEyX0RFU0lSRURfU0NBTEVfSFQ0MF81X1MJMjUKKworI2RlZmluZSBBUl9QSFlfVFBDXzE4CQkJCShBUl9TTV9CQVNFICsgMHgyM2MpCisjZGVmaW5lIEFSX1BIWV9UUENfMThfVEhFUk1fQ0FMX1ZBTFVFICAgICAgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIEFSX1BIWV9UUENfMThfVEhFUk1fQ0FMX1ZBTFVFX1MgICAgICAgICAwCisjZGVmaW5lIEFSX1BIWV9UUENfMThfVk9MVF9DQUxfVkFMVUUJCTB4MDAwMGZmMDAKKyNkZWZpbmUgQVJfUEhZX1RQQ18xOF9WT0xUX0NBTF9WQUxVRV9TCQk4CisKKyNkZWZpbmUgQVJfUEhZX1RQQ18xOQkJCQkoQVJfU01fQkFTRSArIDB4MjQwKQorI2RlZmluZSBBUl9QSFlfVFBDXzE5X0FMUEhBX1ZPTFQJCTB4MDAxZjAwMDAKKyNkZWZpbmUgQVJfUEhZX1RQQ18xOV9BTFBIQV9WT0xUX1MJCTE2CisjZGVmaW5lIEFSX1BIWV9UUENfMTlfQUxQSEFfVEhFUk0JCTB4ZmYKKyNkZWZpbmUgQVJfUEhZX1RQQ18xOV9BTFBIQV9USEVSTV9TCQkwCisKKyNkZWZpbmUgQVJfUEhZX1RYX0ZPUkNFRF9HQUlOCQkJCShBUl9TTV9CQVNFICsgMHgyNTgpCisjZGVmaW5lIEFSX1BIWV9UWF9GT1JDRURfR0FJTl9GT1JDRV9UWF9HQUlOCQkweDAwMDAwMDAxCisjZGVmaW5lIEFSX1BIWV9UWF9GT1JDRURfR0FJTl9GT1JDRV9UWF9HQUlOX1MJCTAKKyNkZWZpbmUgQVJfUEhZX1RYX0ZPUkNFRF9HQUlOX0ZPUkNFRF9UWEJCMURCR0FJTgkweDAwMDAwMDBlCisjZGVmaW5lIEFSX1BIWV9UWF9GT1JDRURfR0FJTl9GT1JDRURfVFhCQjFEQkdBSU5fUwkxCisjZGVmaW5lIEFSX1BIWV9UWF9GT1JDRURfR0FJTl9GT1JDRURfVFhCQjZEQkdBSU4JMHgwMDAwMDAzMAorI2RlZmluZSBBUl9QSFlfVFhfRk9SQ0VEX0dBSU5fRk9SQ0VEX1RYQkI2REJHQUlOX1MJNAorI2RlZmluZSBBUl9QSFlfVFhfRk9SQ0VEX0dBSU5fRk9SQ0VEX1RYTVhSR0FJTgkJMHgwMDAwMDNjMAorI2RlZmluZSBBUl9QSFlfVFhfRk9SQ0VEX0dBSU5fRk9SQ0VEX1RYTVhSR0FJTl9TCTYKKyNkZWZpbmUgQVJfUEhZX1RYX0ZPUkNFRF9HQUlOX0ZPUkNFRF9QQURSVkdOQQkJMHgwMDAwM2MwMAorI2RlZmluZSBBUl9QSFlfVFhfRk9SQ0VEX0dBSU5fRk9SQ0VEX1BBRFJWR05BX1MJCTEwCisjZGVmaW5lIEFSX1BIWV9UWF9GT1JDRURfR0FJTl9GT1JDRURfUEFEUlZHTkIJCTB4MDAwM2MwMDAKKyNkZWZpbmUgQVJfUEhZX1RYX0ZPUkNFRF9HQUlOX0ZPUkNFRF9QQURSVkdOQl9TCQkxNAorI2RlZmluZSBBUl9QSFlfVFhfRk9SQ0VEX0dBSU5fRk9SQ0VEX1BBRFJWR05DCQkweDAwM2MwMDAwCisjZGVmaW5lIEFSX1BIWV9UWF9GT1JDRURfR0FJTl9GT1JDRURfUEFEUlZHTkNfUwkJMTgKKyNkZWZpbmUgQVJfUEhZX1RYX0ZPUkNFRF9HQUlOX0ZPUkNFRF9QQURSVkdORAkJMHgwMGMwMDAwMAorI2RlZmluZSBBUl9QSFlfVFhfRk9SQ0VEX0dBSU5fRk9SQ0VEX1BBRFJWR05EX1MJCTIyCisjZGVmaW5lIEFSX1BIWV9UWF9GT1JDRURfR0FJTl9GT1JDRURfRU5BQkxFX1BBTAkJMHgwMTAwMDAwMAorI2RlZmluZSBBUl9QSFlfVFhfRk9SQ0VEX0dBSU5fRk9SQ0VEX0VOQUJMRV9QQUxfUwkyNAorCiAKICNkZWZpbmUgQVJfUEhZX1BEQURDX1RBQl8wICAgICAgIChBUl9TTV9CQVNFICsgMHgyODApCiAKKyNkZWZpbmUgQVJfUEhZX1RYR0FJTl9UQUJMRSAgICAgIChBUl9TTV9CQVNFICsgMHgzMDApCisKICNkZWZpbmUgQVJfUEhZX1RYX0lRQ0FMX0NPTlRST0xfMSAgIChBUl9TTV9CQVNFICsgMHg0NDgpCiAjZGVmaW5lIEFSX1BIWV9UWF9JUUNBTF9TVEFSVCAgICAgICAoQVJfU01fQkFTRSArIDB4NDQwKQogI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfU1RBVFVTX0IwICAgKEFSX1NNX0JBU0UgKyAweDQ4YykKICNkZWZpbmUgQVJfUEhZX1RYX0lRQ0FMX0NPUlJfQ09FRkZfMDFfQjAgICAgKEFSX1NNX0JBU0UgKyAweDQ1MCkKIAotI2RlZmluZSBBUl9QSFlfUEFOSUNfV0RfU1RBVFVTICAgICAgKEFSX1NNX0JBU0UgKyAweDVjMCkKLSNkZWZpbmUgQVJfUEhZX1BBTklDX1dEX0NUTF8xICAgICAgIChBUl9TTV9CQVNFICsgMHg1YzQpCi0jZGVmaW5lIEFSX1BIWV9QQU5JQ19XRF9DVExfMiAgICAgICAoQVJfU01fQkFTRSArIDB4NWM4KQotI2RlZmluZSBBUl9QSFlfQlRfQ1RMICAgICAgICAgICAgICAgKEFSX1NNX0JBU0UgKyAweDVjYykKKyNkZWZpbmUgQVJfUEhZX1dBVENIRE9HX1NUQVRVUyAgICAgIChBUl9TTV9CQVNFICsgMHg1YzApCisjZGVmaW5lIEFSX1BIWV9XQVRDSERPR19DVExfMSAgICAgICAoQVJfU01fQkFTRSArIDB4NWM0KQorI2RlZmluZSBBUl9QSFlfV0FUQ0hET0dfQ1RMXzIgICAgICAgKEFSX1NNX0JBU0UgKyAweDVjOCkKKyNkZWZpbmUgQVJfUEhZX1dBVENIRE9HX0NUTCAgICAgICAgIChBUl9TTV9CQVNFICsgMHg1Y2MpCiAjZGVmaW5lIEFSX1BIWV9PTkxZX1dBUk1SRVNFVCAgICAgICAoQVJfU01fQkFTRSArIDB4NWQwKQogI2RlZmluZSBBUl9QSFlfT05MWV9DVEwgICAgICAgICAgICAgKEFSX1NNX0JBU0UgKyAweDVkNCkKICNkZWZpbmUgQVJfUEhZX0VDT19DVFJMICAgICAgICAgICAgIChBUl9TTV9CQVNFICsgMHg1ZGMpCi0jZGVmaW5lIEFSX1BIWV9CQl9USEVSTV9BRENfMSAgICAgICAoQVJfU01fQkFTRSArIDB4MjQ4KQorCisjZGVmaW5lIEFSX1BIWV9CQl9USEVSTV9BRENfMQkJCQkoQVJfU01fQkFTRSArIDB4MjQ4KQorI2RlZmluZSBBUl9QSFlfQkJfVEhFUk1fQURDXzFfSU5JVF9USEVSTQkJMHgwMDAwMDBmZgorI2RlZmluZSBBUl9QSFlfQkJfVEhFUk1fQURDXzFfSU5JVF9USEVSTV9TCQkwCisKKyNkZWZpbmUgQVJfUEhZX0JCX1RIRVJNX0FEQ180CQkJCShBUl9TTV9CQVNFICsgMHgyNTQpCisjZGVmaW5lIEFSX1BIWV9CQl9USEVSTV9BRENfNF9MQVRFU1RfVEhFUk1fVkFMVUUJMHgwMDAwMDBmZgorI2RlZmluZSBBUl9QSFlfQkJfVEhFUk1fQURDXzRfTEFURVNUX1RIRVJNX1ZBTFVFX1MJMAorI2RlZmluZSBBUl9QSFlfQkJfVEhFUk1fQURDXzRfTEFURVNUX1ZPTFRfVkFMVUUJCTB4MDAwMGZmMDAKKyNkZWZpbmUgQVJfUEhZX0JCX1RIRVJNX0FEQ180X0xBVEVTVF9WT0xUX1ZBTFVFX1MJOAorCiAKICNkZWZpbmUgQVJfUEhZXzY1Tk1fQ0gwX1NZTlRINCAgICAgIDB4MTYwOGMKICNkZWZpbmUgQVJfUEhZX1NZTlRINF9MT05HX1NISUZUX1NFTEVDVCAgIDB4MDAwMDAwMDIKQEAgLTY2MCwxNyArNzI4LDkgQEAKICNkZWZpbmUgQVJfUEhZX1RYX0lRQ0FMX0NPUlJfQ09FRkZfMDFfQ09FRkZfVEFCTEUgICAgICAweDAwMDAzZmZmCiAjZGVmaW5lIEFSX1BIWV9UWF9JUUNBTF9DT1JSX0NPRUZGXzAxX0NPRUZGX1RBQkxFX1MgICAgMAogCi0jZGVmaW5lIEFSX1BIWV9UUENfMThfVEhFUk1fQ0FMX1ZBTFVFICAgICAgICAgICAweGZmCi0jZGVmaW5lIEFSX1BIWV9UUENfMThfVEhFUk1fQ0FMX1ZBTFVFX1MgICAgICAgICAwCi0jZGVmaW5lIEFSX1BIWV9UUENfMTlfQUxQSEFfVEhFUk0gICAgICAgICAgICAgICAweGZmCi0jZGVmaW5lIEFSX1BIWV9UUENfMTlfQUxQSEFfVEhFUk1fUyAgICAgICAgICAgICAwCi0KICNkZWZpbmUgQVJfUEhZXzY1Tk1fQ0gwX1JYVFg0X1RIRVJNX09OICAgICAgICAgIDB4MTAwMDAwMDAKICNkZWZpbmUgQVJfUEhZXzY1Tk1fQ0gwX1JYVFg0X1RIRVJNX09OX1MgICAgICAgIDI4CiAKLSNkZWZpbmUgQVJfUEhZX0JCX1RIRVJNX0FEQ18xX0lOSVRfVEhFUk0gICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgQVJfUEhZX0JCX1RIRVJNX0FEQ18xX0lOSVRfVEhFUk1fUyAgICAgIDAKLQogLyoKICAqIENoYW5uZWwgMSBSZWdpc3RlciBNYXAKICAqLwpAQCAtODEyLDM1ICs4NzIsMTczIEBACiAjZGVmaW5lIEFSX1BIWV9DQUxfTUVBU18yXzkzMDBfMTAoX2kpIChBUl9QSFlfSVFfQURDX01FQVNfMl9CMF85MzAwXzEwICsgKEFSX1BIWV9DSEFJTl9PRkZTRVQgKiAoX2kpKSkKICNkZWZpbmUgQVJfUEhZX0NBTF9NRUFTXzNfOTMwMF8xMChfaSkgKEFSX1BIWV9JUV9BRENfTUVBU18zX0IwXzkzMDBfMTAgKyAoQVJfUEhZX0NIQUlOX09GRlNFVCAqIChfaSkpKQogCi0jZGVmaW5lIEFSX1BIWV9CQl9QQU5JQ19OT05fSURMRV9FTkFCTEUgMHgwMDAwMDAwMQotI2RlZmluZSBBUl9QSFlfQkJfUEFOSUNfSURMRV9FTkFCTEUgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgQVJfUEhZX0JCX1BBTklDX0lETEVfTUFTSyAgICAgICAweEZGRkYwMDAwCi0jZGVmaW5lIEFSX1BIWV9CQl9QQU5JQ19OT05fSURMRV9NQVNLICAgMHgwMDAwRkZGQworI2RlZmluZSBBUl9QSFlfV0FUQ0hET0dfTk9OX0lETEVfRU5BQkxFICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVJfUEhZX1dBVENIRE9HX0lETEVfRU5BQkxFICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFSX1BIWV9XQVRDSERPR19JRExFX01BU0sgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBBUl9QSFlfV0FUQ0hET0dfTk9OX0lETEVfTUFTSyAgICAgIDB4MDAwMEZGRkMKIAotI2RlZmluZSBBUl9QSFlfQkJfUEFOSUNfUlNUX0VOQUJMRSAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgQVJfUEhZX0JCX1BBTklDX0lSUV9FTkFCTEUgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIEFSX1BIWV9CQl9QQU5JQ19DTlRMMl9NQVNLICAgICAgMHhGRkZGRkZGOQorI2RlZmluZSBBUl9QSFlfV0FUQ0hET0dfUlNUX0VOQUJMRSAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVJfUEhZX1dBVENIRE9HX0lSUV9FTkFCTEUgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFSX1BIWV9XQVRDSERPR19DTlRMMl9NQVNLICAgICAgICAgMHhGRkZGRkZGOQogCi0jZGVmaW5lIEFSX1BIWV9CQl9XRF9TVEFUVVMgICAgICAgICAgICAgMHgwMDAwMDAwNwotI2RlZmluZSBBUl9QSFlfQkJfV0RfU1RBVFVTX1MgICAgICAgICAgIDAKLSNkZWZpbmUgQVJfUEhZX0JCX1dEX0RFVF9IQU5HICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIEFSX1BIWV9CQl9XRF9ERVRfSEFOR19TICAgICAgICAgMwotI2RlZmluZSBBUl9QSFlfQkJfV0RfUkFEQVJfU00gICAgICAgICAgIDB4MDAwMDAwRjAKLSNkZWZpbmUgQVJfUEhZX0JCX1dEX1JBREFSX1NNX1MgICAgICAgICA0Ci0jZGVmaW5lIEFSX1BIWV9CQl9XRF9SWF9PRkRNX1NNICAgICAgICAgMHgwMDAwMEYwMAotI2RlZmluZSBBUl9QSFlfQkJfV0RfUlhfT0ZETV9TTV9TICAgICAgIDgKLSNkZWZpbmUgQVJfUEhZX0JCX1dEX1JYX0NDS19TTSAgICAgICAgICAweDAwMDBGMDAwCi0jZGVmaW5lIEFSX1BIWV9CQl9XRF9SWF9DQ0tfU01fUyAgICAgICAgMTIKLSNkZWZpbmUgQVJfUEhZX0JCX1dEX1RYX09GRE1fU00gICAgICAgICAweDAwMEYwMDAwCi0jZGVmaW5lIEFSX1BIWV9CQl9XRF9UWF9PRkRNX1NNX1MgICAgICAgMTYKLSNkZWZpbmUgQVJfUEhZX0JCX1dEX1RYX0NDS19TTSAgICAgICAgICAweDAwRjAwMDAwCi0jZGVmaW5lIEFSX1BIWV9CQl9XRF9UWF9DQ0tfU01fUyAgICAgICAgMjAKLSNkZWZpbmUgQVJfUEhZX0JCX1dEX0FHQ19TTSAgICAgICAgICAgICAweDBGMDAwMDAwCi0jZGVmaW5lIEFSX1BIWV9CQl9XRF9BR0NfU01fUyAgICAgICAgICAgMjQKLSNkZWZpbmUgQVJfUEhZX0JCX1dEX1NSQ0hfU00gICAgICAgICAgICAweEYwMDAwMDAwCi0jZGVmaW5lIEFSX1BIWV9CQl9XRF9TUkNIX1NNX1MgICAgICAgICAgMjgKKyNkZWZpbmUgQVJfUEhZX1dBVENIRE9HX0lORk8gICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEFSX1BIWV9XQVRDSERPR19JTkZPX1MgICAgICAgICAgICAgMAorI2RlZmluZSBBUl9QSFlfV0FUQ0hET0dfREVUX0hBTkcgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVJfUEhZX1dBVENIRE9HX0RFVF9IQU5HX1MgICAgICAgICAzCisjZGVmaW5lIEFSX1BIWV9XQVRDSERPR19SQURBUl9TTSAgICAgICAgICAgMHgwMDAwMDBGMAorI2RlZmluZSBBUl9QSFlfV0FUQ0hET0dfUkFEQVJfU01fUyAgICAgICAgIDQKKyNkZWZpbmUgQVJfUEhZX1dBVENIRE9HX1JYX09GRE1fU00gICAgICAgICAweDAwMDAwRjAwCisjZGVmaW5lIEFSX1BIWV9XQVRDSERPR19SWF9PRkRNX1NNX1MgICAgICAgOAorI2RlZmluZSBBUl9QSFlfV0FUQ0hET0dfUlhfQ0NLX1NNICAgICAgICAgIDB4MDAwMEYwMDAKKyNkZWZpbmUgQVJfUEhZX1dBVENIRE9HX1JYX0NDS19TTV9TICAgICAgICAxMgorI2RlZmluZSBBUl9QSFlfV0FUQ0hET0dfVFhfT0ZETV9TTSAgICAgICAgIDB4MDAwRjAwMDAKKyNkZWZpbmUgQVJfUEhZX1dBVENIRE9HX1RYX09GRE1fU01fUyAgICAgICAxNgorI2RlZmluZSBBUl9QSFlfV0FUQ0hET0dfVFhfQ0NLX1NNICAgICAgICAgIDB4MDBGMDAwMDAKKyNkZWZpbmUgQVJfUEhZX1dBVENIRE9HX1RYX0NDS19TTV9TICAgICAgICAyMAorI2RlZmluZSBBUl9QSFlfV0FUQ0hET0dfQUdDX1NNICAgICAgICAgICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgQVJfUEhZX1dBVENIRE9HX0FHQ19TTV9TICAgICAgICAgICAyNAorI2RlZmluZSBBUl9QSFlfV0FUQ0hET0dfU1JDSF9TTSAgICAgICAgICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgQVJfUEhZX1dBVENIRE9HX1NSQ0hfU01fUyAgICAgICAgICAyOAogCi0jZGVmaW5lIEFSX1BIWV9CQl9XRF9TVEFUVVNfQ0xSICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBUl9QSFlfV0FUQ0hET0dfU1RBVFVTX0NMUiAgICAgICAgIDB4MDAwMDAwMDgKKworLyoKKyAqIFBBUFJEIHJlZ2lzdGVycworICovCisjZGVmaW5lIEFSX1BIWV9YUEFfVElNSU5HX0NUTAkJKEFSX1NNX0JBU0UgKyAweDY0KQorCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9BTTJBTQkJKEFSX0NIQU5fQkFTRSArIDB4ZTQpCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9BTTJBTV9NQVNLCQkweDAxZmZmZmZmCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9BTTJBTV9NQVNLX1MJMAorCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9BTTJQTQkJKEFSX0NIQU5fQkFTRSArIDB4ZTgpCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9BTTJQTV9NQVNLCQkweDAxZmZmZmZmCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9BTTJQTV9NQVNLX1MJMAorCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9IVDQwCQkoQVJfQ0hBTl9CQVNFICsgMHhlYykKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX0hUNDBfTUFTSwkJMHgwMWZmZmZmZgorI2RlZmluZSBBUl9QSFlfUEFQUkRfSFQ0MF9NQVNLX1MJMAorCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9DVFJMMF9CMAkJCQkoQVJfQ0hBTl9CQVNFICsgMHhmMCkKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX0NUUkwwX0IxCQkJCShBUl9DSEFOMV9CQVNFICsgMHhmMCkKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX0NUUkwwX0IyCQkJCShBUl9DSEFOMl9CQVNFICsgMHhmMCkKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX0NUUkwwX1BBUFJEX0VOQUJMRQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX0NUUkwwX1BBUFJEX0VOQUJMRV9TCQkwCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9DVFJMMF9VU0VfU0lOR0xFX1RBQkxFX01BU0sJMHgwMDAwMDAwMgorI2RlZmluZSBBUl9QSFlfUEFQUkRfQ1RSTDBfVVNFX1NJTkdMRV9UQUJMRV9NQVNLX1MJMQorI2RlZmluZSBBUl9QSFlfUEFQUkRfQ1RSTDBfUEFQUkRfTUFHX1RIUlNICQkweGY4MDAwMDAwCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9DVFJMMF9QQVBSRF9NQUdfVEhSU0hfUwkJMjcKKworI2RlZmluZSBBUl9QSFlfUEFQUkRfQ1RSTDFfQjAJCQkJKEFSX0NIQU5fQkFTRSArIDB4ZjQpCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9DVFJMMV9CMQkJCQkoQVJfQ0hBTjFfQkFTRSArIDB4ZjQpCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9DVFJMMV9CMgkJCQkoQVJfQ0hBTjJfQkFTRSArIDB4ZjQpCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9DVFJMMV9BREFQVElWRV9TQ0FMSU5HX0VOQQkJMHgwMDAwMDAwMQorI2RlZmluZSBBUl9QSFlfUEFQUkRfQ1RSTDFfQURBUFRJVkVfU0NBTElOR19FTkFfUwkwCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9DVFJMMV9BREFQVElWRV9BTTJBTV9FTkFCTEUJMHgwMDAwMDAwMgorI2RlZmluZSBBUl9QSFlfUEFQUkRfQ1RSTDFfQURBUFRJVkVfQU0yQU1fRU5BQkxFX1MJMQorI2RlZmluZSBBUl9QSFlfUEFQUkRfQ1RSTDFfQURBUFRJVkVfQU0yUE1fRU5BQkxFCTB4MDAwMDAwMDQKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX0NUUkwxX0FEQVBUSVZFX0FNMlBNX0VOQUJMRV9TCTIKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX0NUUkwxX1BBUFJEX1BPV0VSX0FUX0FNMkFNX0NBTAkweDAwMDAwMWY4CisjZGVmaW5lIEFSX1BIWV9QQVBSRF9DVFJMMV9QQVBSRF9QT1dFUl9BVF9BTTJBTV9DQUxfUwkzCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9DVFJMMV9QQV9HQUlOX1NDQUxFX0ZBQ1RfTUFTSwkweDAwMDFmZTAwCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9DVFJMMV9QQV9HQUlOX1NDQUxFX0ZBQ1RfTUFTS19TCTkKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX0NUUkwxX1BBUFJEX01BR19TQ0FMRV9GQUNUCQkweDBmZmUwMDAwCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9DVFJMMV9QQVBSRF9NQUdfU0NBTEVfRkFDVF9TCTE3CisKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDEJCQkJKEFSX1NNX0JBU0UgKyAweDQ5MCkKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDFfQ0ZfQ0ZfUEFQUkRfVFJBSU5fRU5BQkxFCTB4MDAwMDAwMDEKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDFfQ0ZfQ0ZfUEFQUkRfVFJBSU5fRU5BQkxFX1MJMAorI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMMV9DRl9QQVBSRF9BR0MyX1NFVFRMSU5HCTB4MDAwMDAwN2UKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDFfQ0ZfUEFQUkRfQUdDMl9TRVRUTElOR19TCTEKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDFfQ0ZfUEFQUkRfSVFDT1JSX0VOQUJMRQkweDAwMDAwMTAwCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEwxX0NGX1BBUFJEX0lRQ09SUl9FTkFCTEVfUwk4CisjZGVmaW5lIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEwxX0NGX1BBUFJEX1JYX0JCX0dBSU5fRk9SQ0UJMHgwMDAwMDIwMAorI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMMV9DRl9QQVBSRF9SWF9CQl9HQUlOX0ZPUkNFX1MJOQorI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMMV9DRl9QQVBSRF9UWF9HQUlOX0ZPUkNFCTB4MDAwMDA0MDAKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDFfQ0ZfUEFQUkRfVFhfR0FJTl9GT1JDRV9TCTEwCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEwxX0NGX1BBUFJEX0xCX0VOQUJMRQkJMHgwMDAwMDgwMAorI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMMV9DRl9QQVBSRF9MQl9FTkFCTEVfUwkJMTEKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDFfQ0ZfUEFQUkRfTEJfU0tJUAkJMHgwMDAzZjAwMAorI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMMV9DRl9QQVBSRF9MQl9TS0lQX1MJCTEyCisKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDIJCQkJKEFSX1NNX0JBU0UgKyAweDQ5NCkKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDJfQ0ZfUEFQUkRfSU5JVF9SWF9CQl9HQUlOCTB4RkZGRkZGRkYKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDJfQ0ZfUEFQUkRfSU5JVF9SWF9CQl9HQUlOX1MJMAorCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEwzCQkJCShBUl9TTV9CQVNFICsgMHg0OTgpCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEwzX0NGX1BBUFJEX0FEQ19ERVNJUkVEX1NJWkUJMHgwMDAwMDAzZgorI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMM19DRl9QQVBSRF9BRENfREVTSVJFRF9TSVpFX1MJMAorI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMM19DRl9QQVBSRF9RVUlDS19EUk9QCQkweDAwMDAwZmMwCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEwzX0NGX1BBUFJEX1FVSUNLX0RST1BfUwk2CisjZGVmaW5lIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEwzX0NGX1BBUFJEX01JTl9MT09QQkFDS19ERUwJMHgwMDAxZjAwMAorI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMM19DRl9QQVBSRF9NSU5fTE9PUEJBQ0tfREVMX1MJMTIKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDNfQ0ZfUEFQUkRfTlVNX0NPUlJfU1RBR0VTCTB4MDAwZTAwMDAKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDNfQ0ZfUEFQUkRfTlVNX0NPUlJfU1RBR0VTX1MJMTcKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDNfQ0ZfUEFQUkRfQ09BUlNFX0NPUlJfTEVOCTB4MDBmMDAwMDAKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDNfQ0ZfUEFQUkRfQ09BUlNFX0NPUlJfTEVOX1MJMjAKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDNfQ0ZfUEFQUkRfRklORV9DT1JSX0xFTgkweDBmMDAwMDAwCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEwzX0NGX1BBUFJEX0ZJTkVfQ09SUl9MRU5fUwkyNAorI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMM19DRl9QQVBSRF9CQlRYTUlYX0RJU0FCTEUJMHgyMDAwMDAwMAorI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMM19DRl9QQVBSRF9CQlRYTUlYX0RJU0FCTEVfUwkyOQorCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEw0CQkJCShBUl9TTV9CQVNFICsgMHg0OWMpCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEw0X0NGX1BBUFJEX05VTV9UUkFJTl9TQU1QTEVTCTB4MDNmZjAwMDAKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDRfQ0ZfUEFQUkRfTlVNX1RSQUlOX1NBTVBMRVNfUwkxNgorI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMNF9DRl9QQVBSRF9TQUZFVFlfREVMVEEJMHgwMDAwZjAwMAorI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMNF9DRl9QQVBSRF9TQUZFVFlfREVMVEFfUwkxMgorI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMNF9DRl9QQVBSRF9NSU5fQ09SUgkJMHgwMDAwMGZmZgorI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMNF9DRl9QQVBSRF9NSU5fQ09SUl9TCQkwCisKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX1BSRV9QT1NUX1NDQUxFXzBfQjAJCQkoQVJfQ0hBTl9CQVNFICsgMHgxMDApCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9QUkVfUE9TVF9TQ0FMRV8xX0IwCQkJKEFSX0NIQU5fQkFTRSArIDB4MTA0KQorI2RlZmluZSBBUl9QSFlfUEFQUkRfUFJFX1BPU1RfU0NBTEVfMl9CMAkJCShBUl9DSEFOX0JBU0UgKyAweDEwOCkKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX1BSRV9QT1NUX1NDQUxFXzNfQjAJCQkoQVJfQ0hBTl9CQVNFICsgMHgxMGMpCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9QUkVfUE9TVF9TQ0FMRV80X0IwCQkJKEFSX0NIQU5fQkFTRSArIDB4MTEwKQorI2RlZmluZSBBUl9QSFlfUEFQUkRfUFJFX1BPU1RfU0NBTEVfNV9CMAkJCShBUl9DSEFOX0JBU0UgKyAweDExNCkKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX1BSRV9QT1NUX1NDQUxFXzZfQjAJCQkoQVJfQ0hBTl9CQVNFICsgMHgxMTgpCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9QUkVfUE9TVF9TQ0FMRV83X0IwCQkJKEFSX0NIQU5fQkFTRSArIDB4MTFjKQorI2RlZmluZSBBUl9QSFlfUEFQUkRfUFJFX1BPU1RfU0NBTElORwkJCQkweDNGRkZGCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9QUkVfUE9TVF9TQ0FMSU5HX1MJCQkJMAorCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9UUkFJTkVSX1NUQVQxCQkJCShBUl9TTV9CQVNFICsgMHg0YTApCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9UUkFJTkVSX1NUQVQxX1BBUFJEX1RSQUlOX0RPTkUJCTB4MDAwMDAwMDEKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfU1RBVDFfUEFQUkRfVFJBSU5fRE9ORV9TCQkwCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9UUkFJTkVSX1NUQVQxX1BBUFJEX1RSQUlOX0lOQ09NUExFVEUJMHgwMDAwMDAwMgorI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9TVEFUMV9QQVBSRF9UUkFJTl9JTkNPTVBMRVRFX1MJMQorI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9TVEFUMV9QQVBSRF9DT1JSX0VSUgkJMHgwMDAwMDAwNAorI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9TVEFUMV9QQVBSRF9DT1JSX0VSUl9TCQkyCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9UUkFJTkVSX1NUQVQxX1BBUFJEX1RSQUlOX0FDVElWRQkJMHgwMDAwMDAwOAorI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9TVEFUMV9QQVBSRF9UUkFJTl9BQ1RJVkVfUwkJMworI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9TVEFUMV9QQVBSRF9SWF9HQUlOX0lEWAkJMHgwMDAwMDFmMAorI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9TVEFUMV9QQVBSRF9SWF9HQUlOX0lEWF9TCQk0CisjZGVmaW5lIEFSX1BIWV9QQVBSRF9UUkFJTkVSX1NUQVQxX1BBUFJEX0FHQzJfUFdSCQkweDAwMDFmZTAwCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9UUkFJTkVSX1NUQVQxX1BBUFJEX0FHQzJfUFdSX1MJCTkKKworI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9TVEFUMgkJCQkoQVJfU01fQkFTRSArIDB4NGE0KQorI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9TVEFUMl9QQVBSRF9GSU5FX1ZBTAkJMHgwMDAwZmZmZgorI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9TVEFUMl9QQVBSRF9GSU5FX1ZBTF9TCQkwCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9UUkFJTkVSX1NUQVQyX1BBUFJEX0NPQVJTRV9JRFgJCTB4MDAxZjAwMDAKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfU1RBVDJfUEFQUkRfQ09BUlNFX0lEWF9TCQkxNgorI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9TVEFUMl9QQVBSRF9GSU5FX0lEWAkJMHgwMDYwMDAwMAorI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9TVEFUMl9QQVBSRF9GSU5FX0lEWF9TCQkyMQorCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9UUkFJTkVSX1NUQVQzCQkJCShBUl9TTV9CQVNFICsgMHg0YTgpCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9UUkFJTkVSX1NUQVQzX1BBUFJEX1RSQUlOX1NBTVBMRVNfQ05UCTB4MDAwZmZmZmYKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfU1RBVDNfUEFQUkRfVFJBSU5fU0FNUExFU19DTlRfUwkwCisKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX01FTV9UQUJfQjAJCQkoQVJfQ0hBTl9CQVNFICsgMHgxMjApCisjZGVmaW5lIEFSX1BIWV9QQVBSRF9NRU1fVEFCX0IxCQkJKEFSX0NIQU4xX0JBU0UgKyAweDEyMCkKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX01FTV9UQUJfQjIJCQkoQVJfQ0hBTjJfQkFTRSArIDB4MTIwKQorCisjZGVmaW5lIEFSX1BIWV9QQV9HQUlOMTIzX0IwCQkJKEFSX0NIQU5fQkFTRSArIDB4ZjgpCisjZGVmaW5lIEFSX1BIWV9QQV9HQUlOMTIzX0IxCQkJKEFSX0NIQU4xX0JBU0UgKyAweGY4KQorI2RlZmluZSBBUl9QSFlfUEFfR0FJTjEyM19CMgkJCShBUl9DSEFOMl9CQVNFICsgMHhmOCkKKyNkZWZpbmUgQVJfUEhZX1BBX0dBSU4xMjNfUEFfR0FJTjEJCTB4M0ZGCisjZGVmaW5lIEFSX1BIWV9QQV9HQUlOMTIzX1BBX0dBSU4xX1MJCTAKKworI2RlZmluZSBBUl9QSFlfUE9XRVJUWF9SQVRFNQkJCShBUl9TTV9CQVNFICsgMHgxZDApCisjZGVmaW5lIEFSX1BIWV9QT1dFUlRYX1JBVEU1X1BPV0VSVFhIVDIwXzAJMHgzRgorI2RlZmluZSBBUl9QSFlfUE9XRVJUWF9SQVRFNV9QT1dFUlRYSFQyMF8wX1MJMAogCiB2b2lkIGFyOTAwM19od19zZXRfY2hhaW5fbWFza3Moc3RydWN0IGF0aF9odyAqYWgsIHU4IHJ4LCB1OCB0eCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2F0aDlrLmgKaW5kZXggNWVhODc3My4uOTk4YWUyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2F0aDlrLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2F0aDlrLmgKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgImNvbW1vbi5oIgpAQCAtMTM2LDYgKzEzNyw4IEBACiAjZGVmaW5lIEFUSF9NQVhfQU5URU5OQSAgICAgICAgIDMKICNkZWZpbmUgQVRIX1JYQlVGICAgICAgICAgICAgICAgNTEyCiAjZGVmaW5lIEFUSF9UWEJVRiAgICAgICAgICAgICAgIDUxMgorI2RlZmluZSBBVEhfVFhCVUZfUkVTRVJWRSAgICAgICA1CisjZGVmaW5lIEFUSF9NQVhfUURFUFRIICAgICAgICAgIChBVEhfVFhCVUYgLyA0IC0gQVRIX1RYQlVGX1JFU0VSVkUpCiAjZGVmaW5lIEFUSF9UWE1BWFRSWSAgICAgICAgICAgIDEzCiAjZGVmaW5lIEFUSF9NR1RfVFhNQVhUUlkgICAgICAgIDQKIApAQCAtMTkyLDYgKzE5NSw3IEBACiAKICNkZWZpbmUgQVRIX1RYRklGT19ERVBUSCA4CiBzdHJ1Y3QgYXRoX3R4cSB7CisJaW50IGF4cV9jbGFzczsKIAl1MzIgYXhxX3FudW07CiAJdTMyICpheHFfbGluazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGF4cV9xOwpAQCAtMjA2LDYgKzIxMCw3MSBAQAogCXU4IHR4cV90YWlsaWR4OwogfTsKIAorc3RydWN0IGF0aF9hdHhfYWMgeworCWludCBzY2hlZDsKKwlpbnQgcW51bTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCB0aWRfcTsKK307CisKK3N0cnVjdCBhdGhfYnVmX3N0YXRlIHsKKwlpbnQgYmZzX25mcmFtZXM7CisJdTE2IGJmc19hbDsKKwl1MTYgYmZzX2ZybWxlbjsKKwlpbnQgYmZzX3NlcW5vOworCWludCBiZnNfdGlkbm87CisJaW50IGJmc19yZXRyaWVzOworCXU4IGJmX3R5cGU7CisJdTggYmZzX3BhcHJkOworCXVuc2lnbmVkIGxvbmcgYmZzX3BhcHJkX3RpbWVzdGFtcDsKKwl1MzIgYmZzX2tleWl4OworCWVudW0gYXRoOWtfa2V5X3R5cGUgYmZzX2tleXR5cGU7Cit9OworCitzdHJ1Y3QgYXRoX2J1ZiB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBhdGhfYnVmICpiZl9sYXN0YmY7CS8qIGxhc3QgYnVmIG9mIHRoaXMgdW5pdCAoYSBmcmFtZSBvcgorCQkJCQkgICBhbiBhZ2dyZWdhdGUpICovCisJc3RydWN0IGF0aF9idWYgKmJmX25leHQ7CS8qIG5leHQgc3ViZnJhbWUgaW4gdGhlIGFnZ3JlZ2F0ZSAqLworCXN0cnVjdCBza19idWZmICpiZl9tcGR1OwkvKiBlbmNsb3NpbmcgZnJhbWUgc3RydWN0dXJlICovCisJdm9pZCAqYmZfZGVzYzsJCQkvKiB2aXJ0dWFsIGFkZHIgb2YgZGVzYyAqLworCWRtYV9hZGRyX3QgYmZfZGFkZHI7CQkvKiBwaHlzaWNhbCBhZGRyIG9mIGRlc2MgKi8KKwlkbWFfYWRkcl90IGJmX2J1Zl9hZGRyOwkJLyogcGh5c2ljYWwgYWRkciBvZiBkYXRhIGJ1ZmZlciAqLworCWJvb2wgYmZfc3RhbGU7CisJYm9vbCBiZl9pc251bGxmdW5jOworCWJvb2wgYmZfdHhfYWJvcnRlZDsKKwl1MTYgYmZfZmxhZ3M7CisJc3RydWN0IGF0aF9idWZfc3RhdGUgYmZfc3RhdGU7CisJZG1hX2FkZHJfdCBiZl9kbWFjb250ZXh0OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHk7Cit9OworCitzdHJ1Y3QgYXRoX2F0eF90aWQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJ1Zl9xOworCXN0cnVjdCBhdGhfbm9kZSAqYW47CisJc3RydWN0IGF0aF9hdHhfYWMgKmFjOworCXN0cnVjdCBhdGhfYnVmICp0eF9idWZbQVRIX1RJRF9NQVhfQlVGU107CisJdTE2IHNlcV9zdGFydDsKKwl1MTYgc2VxX25leHQ7CisJdTE2IGJhd19zaXplOworCWludCB0aWRubzsKKwlpbnQgYmF3X2hlYWQ7ICAgLyogZmlyc3QgdW4tYWNrZWQgdHggYnVmZmVyICovCisJaW50IGJhd190YWlsOyAgIC8qIG5leHQgdW51c2VkIHR4IGJ1ZmZlciBzbG90ICovCisJaW50IHNjaGVkOworCWludCBwYXVzZWQ7CisJdTggc3RhdGU7Cit9OworCitzdHJ1Y3QgYXRoX25vZGUgeworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb247CisJc3RydWN0IGF0aF9hdHhfdGlkIHRpZFtXTUVfTlVNX1RJRF07CisJc3RydWN0IGF0aF9hdHhfYWMgYWNbV01FX05VTV9BQ107CisJdTE2IG1heGFtcGR1OworCXU4IG1wZHVkZW5zaXR5OworCWludCBsYXN0X3Jzc2k7Cit9OworCiAjZGVmaW5lIEFHR1JfQ0xFQU5VUCAgICAgICAgIEJJVCgxKQogI2RlZmluZSBBR0dSX0FEREJBX0NPTVBMRVRFICBCSVQoMikKICNkZWZpbmUgQUdHUl9BRERCQV9QUk9HUkVTUyAgQklUKDMpCkBAIC0yMTQsNiArMjgzLDcgQEAKIAlzdHJ1Y3QgYXRoX3R4cSAqdHhxOwogCWludCBpZl9pZDsKIAllbnVtIGF0aDlrX2ludGVybmFsX2ZyYW1lX3R5cGUgZnJhbWVfdHlwZTsKKwl1OCBwYXByZDsKIH07CiAKICNkZWZpbmUgQVRIX1RYX0VSUk9SICAgICAgICAweDAxCkBAIC0yMjMsMTEgKzI5MywxMiBAQAogc3RydWN0IGF0aF90eCB7CiAJdTE2IHNlcV9ubzsKIAl1MzIgdHhxc2V0dXA7Ci0JaW50IGh3cV9tYXBbQVRIOUtfV01FX0FDX1ZPKzFdOworCWludCBod3FfbWFwW1dNRV9OVU1fQUNdOwogCXNwaW5sb2NrX3QgdHhidWZsb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQgdHhidWY7CiAJc3RydWN0IGF0aF90eHEgdHhxW0FUSDlLX05VTV9UWF9RVUVVRVNdOwogCXN0cnVjdCBhdGhfZGVzY2RtYSB0eGRtYTsKKwlpbnQgcGVuZGluZ19mcmFtZXNbV01FX05VTV9BQ107CiB9OwogCiBzdHJ1Y3QgYXRoX3J4X2VkbWEgewpAQCAtMjY3LDcgKzMzOCw2IEBACiB2b2lkIGF0aF90eHFfc2NoZWR1bGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEpOwogaW50IGF0aF90eF9pbml0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgbmJ1ZnMpOwogdm9pZCBhdGhfdHhfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Ci1zdHJ1Y3QgYXRoX3R4cSAqYXRoX3Rlc3RfZ2V0X3R4cShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgYXRoX3R4cV91cGRhdGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxbnVtLAogCQkgICBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcSk7CiBpbnQgYXRoX3R4X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMzUxLDEwICs0MjEsMTUgQEAKIAogI2RlZmluZSBBVEhfU1RBX1NIT1JUX0NBTElOVEVSVkFMIDEwMDAgICAgLyogMSBzZWNvbmQgKi8KICNkZWZpbmUgQVRIX0FQX1NIT1JUX0NBTElOVEVSVkFMICAxMDAgICAgIC8qIDEwMCBtcyAqLwotI2RlZmluZSBBVEhfQU5JX1BPTExJTlRFUlZBTCAgICAgIDEwMCAgICAgLyogMTAwIG1zICovCisjZGVmaW5lIEFUSF9BTklfUE9MTElOVEVSVkFMX09MRCAgMTAwICAgICAvKiAxMDAgbXMgKi8KKyNkZWZpbmUgQVRIX0FOSV9QT0xMSU5URVJWQUxfTkVXICAxMDAwICAgIC8qIDEwMDAgbXMgKi8KICNkZWZpbmUgQVRIX0xPTkdfQ0FMSU5URVJWQUwgICAgICAzMDAwMCAgIC8qIDMwIHNlY29uZHMgKi8KICNkZWZpbmUgQVRIX1JFU1RBUlRfQ0FMSU5URVJWQUwgICAxMjAwMDAwIC8qIDIwIG1pbnV0ZXMgKi8KIAorI2RlZmluZSBBVEhfUEFQUkRfVElNRU9VVAkxMDAgLyogbXNlY3MgKi8KKwordm9pZCBhdGhfaHdfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3ZvaWQgYXRoX3BhcHJkX2NhbGlicmF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBhdGhfYW5pX2NhbGlicmF0ZSh1bnNpZ25lZCBsb25nIGRhdGEpOwogCiAvKioqKioqKioqKi8KQEAgLTQ4Nyw2ICs1NjIsOSBAQAogCXNwaW5sb2NrX3Qgc2Nfc2VyaWFsX3J3OwogCXNwaW5sb2NrX3Qgc2NfcG1fbG9jazsKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisJc3RydWN0IHdvcmtfc3RydWN0IHBhcHJkX3dvcms7CisJc3RydWN0IHdvcmtfc3RydWN0IGh3X2NoZWNrX3dvcms7CisJc3RydWN0IGNvbXBsZXRpb24gcGFwcmRfY29tcGxldGU7CiAKIAl1MzIgaW50cnN0YXR1czsKIAl1MzIgc2NfZmxhZ3M7IC8qIFNDX09QXyogKi8KQEAgLTU0NSw3ICs2MjMsNiBAQAogCiB2b2lkIGF0aDlrX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKIGludCBhdGhfcmVzZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpOwotaW50IGF0aF9nZXRfaGFsX3FudW0odTE2IHF1ZXVlLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CiBpbnQgYXRoX2dldF9tYWM4MDIxMV9xbnVtKHUzMiBxdWV1ZSwgc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwogaW50IGF0aF9jYWJxX3VwZGF0ZShzdHJ1Y3QgYXRoX3NvZnRjICopOwogCkBAIC01NTYsMTMgKzYzMywxMiBAQAogCiBleHRlcm4gc3RydWN0IGllZWU4MDIxMV9vcHMgYXRoOWtfb3BzOwogZXh0ZXJuIGludCBtb2RwYXJhbV9ub2h3Y3J5cHQ7CitleHRlcm4gaW50IGxlZF9ibGluazsKIAogaXJxcmV0dXJuX3QgYXRoX2lzcihpbnQgaXJxLCB2b2lkICpkZXYpOwogaW50IGF0aDlrX2luaXRfZGV2aWNlKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHUxNiBzdWJzeXNpZCwKIAkJICAgIGNvbnN0IHN0cnVjdCBhdGhfYnVzX29wcyAqYnVzX29wcyk7CiB2b2lkIGF0aDlrX2RlaW5pdF9kZXZpY2Uoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwotY29uc3QgY2hhciAqYXRoX21hY19iYl9uYW1lKHUzMiBtYWNfYmJfdmVyc2lvbik7Ci1jb25zdCBjaGFyICphdGhfcmZfbmFtZSh1MTYgcmZfdmVyc2lvbik7CiB2b2lkIGF0aDlrX3NldF9od19jYXBhYihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBhdGg5a191cGRhdGVfaWNoYW5uZWwoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmljaGFuKTsKQEAgLTYxMSw5ICs2ODcsNyBAQAogdm9pZCBhdGg5a19zZXRfd2lwaHlfaWRsZShzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5LCBib29sIGlkbGUpOwogCiB2b2lkIGF0aF9tYWM4MDIxMV9zdG9wX3F1ZXVlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1MTYgc2tiX3F1ZXVlKTsKLXZvaWQgYXRoX21hYzgwMjExX3N0YXJ0X3F1ZXVlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1MTYgc2tiX3F1ZXVlKTsKLQotaW50IGF0aF90eF9nZXRfcW51bShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHF0eXBlLCBpbnQgaGFsdHlwZSk7Citib29sIGF0aF9tYWM4MDIxMV9zdGFydF9xdWV1ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgdTE2IHNrYl9xdWV1ZSk7CiAKIHZvaWQgYXRoX3N0YXJ0X3Jma2lsbF9wb2xsKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKIGV4dGVybiB2b2lkIGF0aDlrX3Jma2lsbF9wb2xsX3N0YXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9iZWFjb24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9iZWFjb24uYwppbmRleCBmNDNkODVhLi40ZDRiMjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYmVhY29uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2JlYWNvbi5jCkBAIC0zOCw4ICszOCw3IEBACiAJCXFpLnRxaV9jd21heCA9IDA7CiAJfSBlbHNlIHsKIAkJLyogQWRob2MgbW9kZTsgaW1wb3J0YW50IHRoaW5nIGlzIHRvIHVzZSAyeCBjd21pbi4gKi8KLQkJcW51bSA9IGF0aF90eF9nZXRfcW51bShzYywgQVRIOUtfVFhfUVVFVUVfREFUQSwKLQkJCQkgICAgICAgQVRIOUtfV01FX0FDX0JFKTsKKwkJcW51bSA9IHNjLT50eC5od3FfbWFwW1dNRV9BQ19CRV07CiAJCWF0aDlrX2h3X2dldF90eHFfcHJvcHMoYWgsIHFudW0sICZxaV9iZSk7CiAJCXFpLnRxaV9haWZzID0gcWlfYmUudHFpX2FpZnM7CiAJCXFpLnRxaV9jd21pbiA9IDQqcWlfYmUudHFpX2N3bWluOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NhbGliLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY2FsaWIuYwppbmRleCAwN2I4ZmE2Li4xMzkyODllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY2FsaWIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY2FsaWIuYwpAQCAtNzQsMTMgKzc0LDggQEAKIAkJCWhbaV0uY3VyckluZGV4ID0gMDsKIAogCQlpZiAoaFtpXS5pbnZhbGlkTkZjb3VudCA+IDApIHsKLQkJCWlmIChuZmFycmF5W2ldIDwgQVJfUEhZX0NDQV9NSU5fQkFEX1ZBTFVFIHx8Ci0JCQkgICAgbmZhcnJheVtpXSA+IEFSX1BIWV9DQ0FfTUFYX0hJR0hfVkFMVUUpIHsKLQkJCQloW2ldLmludmFsaWRORmNvdW50ID0gQVRIOUtfTkZfQ0FMX0hJU1RfTUFYOwotCQkJfSBlbHNlIHsKLQkJCQloW2ldLmludmFsaWRORmNvdW50LS07Ci0JCQkJaFtpXS5wcml2TkYgPSBuZmFycmF5W2ldOwotCQkJfQorCQkJaFtpXS5pbnZhbGlkTkZjb3VudC0tOworCQkJaFtpXS5wcml2TkYgPSBuZmFycmF5W2ldOwogCQl9IGVsc2UgewogCQkJaFtpXS5wcml2TkYgPQogCQkJCWF0aDlrX2h3X2dldF9uZl9oaXN0X21pZChoW2ldLm5mQ2FsQnVmZmVyKTsKQEAgLTE3Miw2ICsxNjcsMTE2IEBACiAJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwgQVJfUEhZX0FHQ19DT05UUk9MX05GKTsKIH0KIAordm9pZCBhdGg5a19od19sb2FkbmYoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQoreworCXN0cnVjdCBhdGg5a19uZmNhbF9oaXN0ICpoOworCXVuc2lnbmVkIGksIGo7CisJaW50MzJfdCB2YWw7CisJdTggY2hhaW5tYXNrID0gKGFoLT5yeGNoYWlubWFzayA8PCAzKSB8IGFoLT5yeGNoYWlubWFzazsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKKworCWggPSBhaC0+bmZDYWxIaXN0OworCisJZm9yIChpID0gMDsgaSA8IE5VTV9ORl9SRUFESU5HUzsgaSsrKSB7CisJCWlmIChjaGFpbm1hc2sgJiAoMSA8PCBpKSkgeworCQkJdmFsID0gUkVHX1JFQUQoYWgsIGFoLT5uZl9yZWdzW2ldKTsKKwkJCXZhbCAmPSAweEZGRkZGRTAwOworCQkJdmFsIHw9ICgoKHUzMikgKGhbaV0ucHJpdk5GKSA8PCAxKSAmIDB4MWZmKTsKKwkJCVJFR19XUklURShhaCwgYWgtPm5mX3JlZ3NbaV0sIHZhbCk7CisJCX0KKwl9CisKKwkvKgorCSAqIExvYWQgc29mdHdhcmUgZmlsdGVyZWQgTkYgdmFsdWUgaW50byBiYXNlYmFuZCBpbnRlcm5hbCBtaW5DQ0Fwd3IKKwkgKiB2YXJpYWJsZS4KKwkgKi8KKwlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAorCQkgICAgQVJfUEhZX0FHQ19DT05UUk9MX0VOQUJMRV9ORik7CisJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwKKwkJICAgIEFSX1BIWV9BR0NfQ09OVFJPTF9OT19VUERBVEVfTkYpOworCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9ORik7CisKKwkvKgorCSAqIFdhaXQgZm9yIGxvYWQgdG8gY29tcGxldGUsIHNob3VsZCBiZSBmYXN0LCBhIGZldyAxMHMgb2YgdXMuCisJICogVGhlIG1heCBkZWxheSB3YXMgY2hhbmdlZCBmcm9tIGFuIG9yaWdpbmFsIDI1MHVzIHRvIDEwMDAwdXMKKwkgKiBzaW5jZSAyNTB1cyBvZnRlbiByZXN1bHRzIGluIE5GIGxvYWQgdGltZW91dCBhbmQgY2F1c2VzIGRlYWYKKwkgKiBjb25kaXRpb24gZHVyaW5nIHN0cmVzcyB0ZXN0aW5nIDEyLzEyLzIwMDkKKwkgKi8KKwlmb3IgKGogPSAwOyBqIDwgMTAwMDsgaisrKSB7CisJCWlmICgoUkVHX1JFQUQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCkgJgorCQkgICAgIEFSX1BIWV9BR0NfQ09OVFJPTF9ORikgPT0gMCkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTApOworCX0KKworCS8qCisJICogV2UgdGltZWQgb3V0IHdhaXRpbmcgZm9yIHRoZSBub2lzZWZsb29yIHRvIGxvYWQsIHByb2JhYmx5IGR1ZSB0byBhbgorCSAqIGluLXByb2dyZXNzIHJ4LiBTaW1wbHkgcmV0dXJuIGhlcmUgYW5kIGFsbG93IHRoZSBsb2FkIHBsZW50eSBvZiB0aW1lCisJICogdG8gY29tcGxldGUgYmVmb3JlIHRoZSBuZXh0IGNhbGlicmF0aW9uIGludGVydmFsLiAgV2UgbmVlZCB0byBhdm9pZAorCSAqIHRyeWluZyB0byBsb2FkIC01MCAod2hpY2ggaGFwcGVucyBiZWxvdykgd2hpbGUgdGhlIHByZXZpb3VzIGxvYWQgaXMKKwkgKiBzdGlsbCBpbiBwcm9ncmVzcyBhcyB0aGlzIGNhbiBjYXVzZSByeCBkZWFmbmVzcy4gSW5zdGVhZCBieSByZXR1cm5pbmcKKwkgKiBoZXJlLCB0aGUgYmFzZWJhbmQgbmYgY2FsIHdpbGwganVzdCBiZSBjYXBwZWQgYnkgb3VyIHByZXNlbnQKKwkgKiBub2lzZWZsb29yIHVudGlsIHRoZSBuZXh0IGNhbGlicmF0aW9uIHRpbWVyLgorCSAqLworCWlmIChqID09IDEwMDApIHsKKwkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTlksICJUaW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIG5mICIKKwkJCSAgInRvIGxvYWQ6IEFSX1BIWV9BR0NfQ09OVFJPTD0weCV4XG4iLAorCQkJICBSRUdfUkVBRChhaCwgQVJfUEhZX0FHQ19DT05UUk9MKSk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFJlc3RvcmUgbWF4Q0NBUG93ZXIgcmVnaXN0ZXIgcGFyYW1ldGVyIGFnYWluIHNvIHRoYXQgd2UncmUgbm90IGNhcHBlZAorCSAqIGJ5IHRoZSBtZWRpYW4gd2UganVzdCBsb2FkZWQuICBUaGlzIHdpbGwgYmUgaW5pdGlhbCAoYW5kIG1heCkgdmFsdWUKKwkgKiBvZiBuZXh0IG5vaXNlIGZsb29yIGNhbGlicmF0aW9uIHRoZSBiYXNlYmFuZCBkb2VzLgorCSAqLworCUVOQUJMRV9SRUdXUklURV9CVUZGRVIoYWgpOworCWZvciAoaSA9IDA7IGkgPCBOVU1fTkZfUkVBRElOR1M7IGkrKykgeworCQlpZiAoY2hhaW5tYXNrICYgKDEgPDwgaSkpIHsKKwkJCXZhbCA9IFJFR19SRUFEKGFoLCBhaC0+bmZfcmVnc1tpXSk7CisJCQl2YWwgJj0gMHhGRkZGRkUwMDsKKwkJCXZhbCB8PSAoKCh1MzIpICgtNTApIDw8IDEpICYgMHgxZmYpOworCQkJUkVHX1dSSVRFKGFoLCBhaC0+bmZfcmVnc1tpXSwgdmFsKTsKKwkJfQorCX0KKwlSRUdXUklURV9CVUZGRVJfRkxVU0goYWgpOworCURJU0FCTEVfUkVHV1JJVEVfQlVGRkVSKGFoKTsKK30KKworCitzdGF0aWMgdm9pZCBhdGg5a19od19uZl9zYW5pdGl6ZShzdHJ1Y3QgYXRoX2h3ICphaCwgczE2ICpuZikKK3sKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKKwlzdHJ1Y3QgYXRoX25mX2xpbWl0cyAqbGltaXQ7CisJaW50IGk7CisKKwlpZiAoSVNfQ0hBTl8yR0haKGFoLT5jdXJjaGFuKSkKKwkJbGltaXQgPSAmYWgtPm5mXzJnOworCWVsc2UKKwkJbGltaXQgPSAmYWgtPm5mXzVnOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9ORl9SRUFESU5HUzsgaSsrKSB7CisJCWlmICghbmZbaV0pCisJCQljb250aW51ZTsKKworCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCSAgIk5GIGNhbGlicmF0ZWQgWyVzXSBbY2hhaW4gJWRdIGlzICVkXG4iLAorCQkJICAoaSA+PSAzID8gImV4dCIgOiAiY3RsIiksIGkgJSAzLCBuZltpXSk7CisKKwkJaWYgKG5mW2ldID4gbGltaXQtPm1heCkgeworCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkJICAiTkZbJWRdICglZCkgPiBNQVggKCVkKSwgY29ycmVjdGluZyB0byBNQVgiLAorCQkJCSAgaSwgbmZbaV0sIGxpbWl0LT5tYXgpOworCQkJbmZbaV0gPSBsaW1pdC0+bWF4OworCQl9IGVsc2UgaWYgKG5mW2ldIDwgbGltaXQtPm1pbikgeworCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkJICAiTkZbJWRdICglZCkgPCBNSU4gKCVkKSwgY29ycmVjdGluZyB0byBOT00iLAorCQkJCSAgaSwgbmZbaV0sIGxpbWl0LT5taW4pOworCQkJbmZbaV0gPSBsaW1pdC0+bm9taW5hbDsKKwkJfQorCX0KK30KKwogaW50MTZfdCBhdGg5a19od19nZXRuZihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewpAQCAtMTkwLDYgKzI5NSw3IEBACiAJCXJldHVybiBjaGFuLT5yYXdOb2lzZUZsb29yOwogCX0gZWxzZSB7CiAJCWF0aDlrX2h3X2RvX2dldG5mKGFoLCBuZmFycmF5KTsKKwkJYXRoOWtfaHdfbmZfc2FuaXRpemUoYWgsIG5mYXJyYXkpOwogCQluZiA9IG5mYXJyYXlbMF07CiAJCWlmIChhdGg5a19od19nZXRfbmZfdGhyZXNoKGFoLCBjLT5iYW5kLCAmbmZUaHJlc2gpCiAJCSAgICAmJiBuZiA+IG5mVGhyZXNoKSB7CkBAIC0yMTEsMjUgKzMxNywyMSBAQAogCiB2b2lkIGF0aDlrX2luaXRfbmZjYWxfaGlzdF9idWZmZXIoc3RydWN0IGF0aF9odyAqYWgpCiB7CisJc3RydWN0IGF0aF9uZl9saW1pdHMgKmxpbWl0OwogCWludCBpLCBqOwotCXMxNiBub2lzZV9mbG9vcjsKIAotCWlmIChBUl9TUkVWXzkyODAoYWgpKQotCQlub2lzZV9mbG9vciA9IEFSX1BIWV9DQ0FfTUFYX0FSOTI4MF9HT09EX1ZBTFVFOwotCWVsc2UgaWYgKEFSX1NSRVZfOTI4NShhaCkgfHwgQVJfU1JFVl85MjcxKGFoKSkKLQkJbm9pc2VfZmxvb3IgPSBBUl9QSFlfQ0NBX01BWF9BUjkyODVfR09PRF9WQUxVRTsKLQllbHNlIGlmIChBUl9TUkVWXzkyODcoYWgpKQotCQlub2lzZV9mbG9vciA9IEFSX1BIWV9DQ0FfTUFYX0FSOTI4N19HT09EX1ZBTFVFOworCWlmICghYWgtPmN1cmNoYW4gfHwgSVNfQ0hBTl8yR0haKGFoLT5jdXJjaGFuKSkKKwkJbGltaXQgPSAmYWgtPm5mXzJnOwogCWVsc2UKLQkJbm9pc2VfZmxvb3IgPSBBUl9QSFlfQ0NBX01BWF9BUjU0MTZfR09PRF9WQUxVRTsKKwkJbGltaXQgPSAmYWgtPm5mXzVnOwogCiAJZm9yIChpID0gMDsgaSA8IE5VTV9ORl9SRUFESU5HUzsgaSsrKSB7CiAJCWFoLT5uZkNhbEhpc3RbaV0uY3VyckluZGV4ID0gMDsKLQkJYWgtPm5mQ2FsSGlzdFtpXS5wcml2TkYgPSBub2lzZV9mbG9vcjsKKwkJYWgtPm5mQ2FsSGlzdFtpXS5wcml2TkYgPSBsaW1pdC0+bm9taW5hbDsKIAkJYWgtPm5mQ2FsSGlzdFtpXS5pbnZhbGlkTkZjb3VudCA9CiAJCQlBUl9QSFlfQ0NBX0ZJTFRFUldJTkRPV19MRU5HVEg7CiAJCWZvciAoaiA9IDA7IGogPCBBVEg5S19ORl9DQUxfSElTVF9NQVg7IGorKykgewotCQkJYWgtPm5mQ2FsSGlzdFtpXS5uZkNhbEJ1ZmZlcltqXSA9IG5vaXNlX2Zsb29yOworCQkJYWgtPm5mQ2FsSGlzdFtpXS5uZkNhbEJ1ZmZlcltqXSA9IGxpbWl0LT5ub21pbmFsOwogCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NhbGliLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY2FsaWIuaAppbmRleCAyNDUzOGJkLi5jZDYwZDA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY2FsaWIuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY2FsaWIuaApAQCAtMTksMTIgKzE5LDYgQEAKIAogI2luY2x1ZGUgImh3LmgiCiAKLSNkZWZpbmUgQVJfUEhZX0NDQV9NQVhfQVI1NDE2X0dPT0RfVkFMVUUJLTg1Ci0jZGVmaW5lIEFSX1BIWV9DQ0FfTUFYX0FSOTI4MF9HT09EX1ZBTFVFCS0xMTIKLSNkZWZpbmUgQVJfUEhZX0NDQV9NQVhfQVI5Mjg1X0dPT0RfVkFMVUUJLTExOAotI2RlZmluZSBBUl9QSFlfQ0NBX01BWF9BUjkyODdfR09PRF9WQUxVRQktMTE4Ci0jZGVmaW5lIEFSX1BIWV9DQ0FfTUFYX0hJR0hfVkFMVUUgICAgICAJCS02MgotI2RlZmluZSBBUl9QSFlfQ0NBX01JTl9CQURfVkFMVUUgICAgICAgCQktMTQwCiAjZGVmaW5lIEFSX1BIWV9DQ0FfRklMVEVSV0lORE9XX0xFTkdUSF9JTklUICAgICAzCiAjZGVmaW5lIEFSX1BIWV9DQ0FfRklMVEVSV0lORE9XX0xFTkdUSCAgICAgICAgICA1CiAKQEAgLTExNSw2ICsxMDksNyBAQAogCiBib29sIGF0aDlrX2h3X3Jlc2V0X2NhbHZhbGlkKHN0cnVjdCBhdGhfaHcgKmFoKTsKIHZvaWQgYXRoOWtfaHdfc3RhcnRfbmZjYWwoc3RydWN0IGF0aF9odyAqYWgpOwordm9pZCBhdGg5a19od19sb2FkbmYoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKIGludDE2X3QgYXRoOWtfaHdfZ2V0bmYoc3RydWN0IGF0aF9odyAqYWgsCiAJCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CiB2b2lkIGF0aDlrX2luaXRfbmZjYWxfaGlzdF9idWZmZXIoc3RydWN0IGF0aF9odyAqYWgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jCmluZGV4IDc3MDczNDEuLmM4NmY3ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmMKQEAgLTI3LDI3MCArMjcsNiBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTaGFyZWQgbGlicmFyeSBmb3IgQXRoZXJvcyB3aXJlbGVzcyA4MDIuMTFuIExBTiBjYXJkcy4iKTsKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKIAotLyogQ29tbW9uIFJYIHByb2Nlc3NpbmcgKi8KLQotLyogQXNzdW1lcyB5b3UndmUgYWxyZWFkeSBkb25lIHRoZSBlbmRpYW4gdG8gQ1BVIGNvbnZlcnNpb24gKi8KLXN0YXRpYyBib29sIGF0aDlrX3J4X2FjY2VwdChzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLAotCQkJICAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4cywKLQkJCSAgICBzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnhfc3RhdHMsCi0JCQkgICAgYm9vbCAqZGVjcnlwdF9lcnJvcikKLXsKLQlzdHJ1Y3QgYXRoX2h3ICphaCA9IGNvbW1vbi0+YWg7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQlfX2xlMTYgZmM7Ci0KLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwotCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOwotCi0JaWYgKCFyeF9zdGF0cy0+cnNfZGF0YWxlbikKLQkJcmV0dXJuIGZhbHNlOwotICAgICAgICAvKgotICAgICAgICAgKiByc19zdGF0dXMgZm9sbG93cyByc19kYXRhbGVuIHNvIGlmIHJzX2RhdGFsZW4gaXMgdG9vIGxhcmdlCi0gICAgICAgICAqIHdlIGNhbiB0YWtlIGEgaGludCB0aGF0IGhhcmR3YXJlIGNvcnJ1cHRlZCBpdCwgc28gaWdub3JlCi0gICAgICAgICAqIHRob3NlIGZyYW1lcy4KLSAgICAgICAgICovCi0JaWYgKHJ4X3N0YXRzLT5yc19kYXRhbGVuID4gY29tbW9uLT5yeF9idWZzaXplKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQkvKgotCSAqIHJzX21vcmUgaW5kaWNhdGVzIGNoYWluZWQgZGVzY3JpcHRvcnMgd2hpY2ggY2FuIGJlIHVzZWQKLQkgKiB0byBsaW5rIGJ1ZmZlcnMgdG9nZXRoZXIgZm9yIGEgc29ydCBvZiBzY2F0dGVyLWdhdGhlcgotCSAqIG9wZXJhdGlvbi4KLQkgKiByZWplY3QgdGhlIGZyYW1lLCB3ZSBkb24ndCBzdXBwb3J0IHNjYXR0ZXItZ2F0aGVyIHlldCBhbmQKLQkgKiB0aGUgZnJhbWUgaXMgcHJvYmFibHkgY29ycnVwdCBhbnl3YXkKLQkgKi8KLQlpZiAocnhfc3RhdHMtPnJzX21vcmUpCi0JCXJldHVybiBmYWxzZTsKLQotCS8qCi0JICogVGhlIHJ4X3N0YXRzLT5yc19zdGF0dXMgd2lsbCBub3QgYmUgc2V0IHVudGlsIHRoZSBlbmQgb2YgdGhlCi0JICogY2hhaW5lZCBkZXNjcmlwdG9ycyBzbyBpdCBjYW4gYmUgaWdub3JlZCBpZiByc19tb3JlIGlzIHNldC4gVGhlCi0JICogcnNfbW9yZSB3aWxsIGJlIGZhbHNlIGF0IHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIGNoYWluZWQKLQkgKiBkZXNjcmlwdG9ycy4KLQkgKi8KLQlpZiAocnhfc3RhdHMtPnJzX3N0YXR1cyAhPSAwKSB7Ci0JCWlmIChyeF9zdGF0cy0+cnNfc3RhdHVzICYgQVRIOUtfUlhFUlJfQ1JDKQotCQkJcnhzLT5mbGFnIHw9IFJYX0ZMQUdfRkFJTEVEX0ZDU19DUkM7Ci0JCWlmIChyeF9zdGF0cy0+cnNfc3RhdHVzICYgQVRIOUtfUlhFUlJfUEhZKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCWlmIChyeF9zdGF0cy0+cnNfc3RhdHVzICYgQVRIOUtfUlhFUlJfREVDUllQVCkgewotCQkJKmRlY3J5cHRfZXJyb3IgPSB0cnVlOwotCQl9IGVsc2UgaWYgKHJ4X3N0YXRzLT5yc19zdGF0dXMgJiBBVEg5S19SWEVSUl9NSUMpIHsKLQkJCWlmIChpZWVlODAyMTFfaXNfY3RsKGZjKSkKLQkJCQkvKgotCQkJCSAqIFNvbWV0aW1lcywgd2UgZ2V0IGludmFsaWQKLQkJCQkgKiBNSUMgZmFpbHVyZXMgb24gdmFsaWQgY29udHJvbCBmcmFtZXMuCi0JCQkJICogUmVtb3ZlIHRoZXNlIG1pYyBlcnJvcnMuCi0JCQkJICovCi0JCQkJcnhfc3RhdHMtPnJzX3N0YXR1cyAmPSB+QVRIOUtfUlhFUlJfTUlDOwotCQkJZWxzZQotCQkJCXJ4cy0+ZmxhZyB8PSBSWF9GTEFHX01NSUNfRVJST1I7Ci0JCX0KLQkJLyoKLQkJICogUmVqZWN0IGVycm9yIGZyYW1lcyB3aXRoIHRoZSBleGNlcHRpb24gb2YKLQkJICogZGVjcnlwdGlvbiBhbmQgTUlDIGZhaWx1cmVzLiBGb3IgbW9uaXRvciBtb2RlLAotCQkgKiB3ZSBhbHNvIGlnbm9yZSB0aGUgQ1JDIGVycm9yLgotCQkgKi8KLQkJaWYgKGFoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikgewotCQkJaWYgKHJ4X3N0YXRzLT5yc19zdGF0dXMgJgotCQkJICAgIH4oQVRIOUtfUlhFUlJfREVDUllQVCB8IEFUSDlLX1JYRVJSX01JQyB8Ci0JCQkgICAgICBBVEg5S19SWEVSUl9DUkMpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfSBlbHNlIHsKLQkJCWlmIChyeF9zdGF0cy0+cnNfc3RhdHVzICYKLQkJCSAgICB+KEFUSDlLX1JYRVJSX0RFQ1JZUFQgfCBBVEg5S19SWEVSUl9NSUMpKSB7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCQl9Ci0JfQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW50IGF0aDlrX3Byb2Nlc3NfcmF0ZShzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgICAgICBzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnhfc3RhdHMsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhzLAotCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7Ci0JdW5zaWduZWQgaW50IGkgPSAwOwotCi0JYmFuZCA9IGh3LT5jb25mLmNoYW5uZWwtPmJhbmQ7Ci0Jc2JhbmQgPSBody0+d2lwaHktPmJhbmRzW2JhbmRdOwotCi0JaWYgKHJ4X3N0YXRzLT5yc19yYXRlICYgMHg4MCkgewotCQkvKiBIVCByYXRlICovCi0JCXJ4cy0+ZmxhZyB8PSBSWF9GTEFHX0hUOwotCQlpZiAocnhfc3RhdHMtPnJzX2ZsYWdzICYgQVRIOUtfUlhfMjA0MCkKLQkJCXJ4cy0+ZmxhZyB8PSBSWF9GTEFHXzQwTUhaOwotCQlpZiAocnhfc3RhdHMtPnJzX2ZsYWdzICYgQVRIOUtfUlhfR0kpCi0JCQlyeHMtPmZsYWcgfD0gUlhfRkxBR19TSE9SVF9HSTsKLQkJcnhzLT5yYXRlX2lkeCA9IHJ4X3N0YXRzLT5yc19yYXRlICYgMHg3ZjsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKLQkJaWYgKHNiYW5kLT5iaXRyYXRlc1tpXS5od192YWx1ZSA9PSByeF9zdGF0cy0+cnNfcmF0ZSkgewotCQkJcnhzLT5yYXRlX2lkeCA9IGk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlpZiAoc2JhbmQtPmJpdHJhdGVzW2ldLmh3X3ZhbHVlX3Nob3J0ID09IHJ4X3N0YXRzLT5yc19yYXRlKSB7Ci0JCQlyeHMtPmZsYWcgfD0gUlhfRkxBR19TSE9SVFBSRTsKLQkJCXJ4cy0+cmF0ZV9pZHggPSBpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIE5vIHZhbGlkIGhhcmR3YXJlIGJpdHJhdGUgZm91bmQgLS0gd2Ugc2hvdWxkIG5vdCBnZXQgaGVyZQotCSAqIGJlY2F1c2UgaGFyZHdhcmUgaGFzIGFscmVhZHkgdmFsaWRhdGVkIHRoaXMgZnJhbWUgYXMgT0suCi0JICovCi0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19YTUlULCAidW5zdXBwb3J0ZWQgaHcgYml0cmF0ZSBkZXRlY3RlZCAiCi0JCSAgIjB4JTAyeCB1c2luZyAxIE1iaXRcbiIsIHJ4X3N0YXRzLT5yc19yYXRlKTsKLQlpZiAoKGNvbW1vbi0+ZGVidWdfbWFzayAmIEFUSF9EQkdfWE1JVCkpCi0JCXByaW50X2hleF9kdW1wX2J5dGVzKCIiLCBEVU1QX1BSRUZJWF9OT05FLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLQotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgdm9pZCBhdGg5a19wcm9jZXNzX3Jzc2koc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiwKLQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICAgIHN0cnVjdCBhdGhfcnhfc3RhdHVzICpyeF9zdGF0cykKLXsKLQlzdHJ1Y3QgYXRoX2h3ICphaCA9IGNvbW1vbi0+YWg7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCXN0cnVjdCBhdGhfbm9kZSAqYW47Ci0JaW50IGxhc3RfcnNzaSA9IEFUSF9SU1NJX0RVTU1ZX01BUktFUjsKLQlfX2xlMTYgZmM7Ci0KLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7Ci0JZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JLyoKLQkgKiBYWFg6IHVzZSBpZWVlODAyMTFfZmluZF9zdGEhIFRoaXMgcmVxdWlyZXMgcXVpdGUgYSBiaXQgb2Ygd29yawotCSAqIHVuZGVyIHRoZSBjdXJyZW50IGF0aDlrIHZpcnR1YWwgd2lwaHkgaW1wbGVtZW50YXRpb24gYXMgd2UgaGF2ZQotCSAqIG5vIHdheSBvZiB0eWluZyBhIHZpZiB0byB3aXBoeS4gVHlwaWNhbGx5IHZpZnMgYXJlIGF0dGFjaGVkIHRvCi0JICogYXQgbGVhc3Qgb25lIHNkYXRhIG9mIGEgd2lwaHkgb24gbWFjODAyMTEgYnV0IHdpdGggYXRoOWsgdmlydHVhbAotCSAqIHdpcGh5IHlvdSdkIGhhdmUgdG8gaXRlcmF0ZSBvdmVyIGV2ZXJ5IHdpcGh5IGFuZCBlYWNoIHNkYXRhLgotCSAqLwotCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YV9ieV9odyhodywgaGRyLT5hZGRyMik7Ci0JaWYgKHN0YSkgewotCQlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKikgc3RhLT5kcnZfcHJpdjsKLQkJaWYgKHJ4X3N0YXRzLT5yc19yc3NpICE9IEFUSDlLX1JTU0lfQkFEICYmCi0JCSAgICFyeF9zdGF0cy0+cnNfbW9yZWFnZ3IpCi0JCQlBVEhfUlNTSV9MUEYoYW4tPmxhc3RfcnNzaSwgcnhfc3RhdHMtPnJzX3Jzc2kpOwotCQlsYXN0X3Jzc2kgPSBhbi0+bGFzdF9yc3NpOwotCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKLQotCWlmIChsaWtlbHkobGFzdF9yc3NpICE9IEFUSF9SU1NJX0RVTU1ZX01BUktFUikpCi0JCXJ4X3N0YXRzLT5yc19yc3NpID0gQVRIX0VQX1JORChsYXN0X3Jzc2ksCi0JCQkJCSAgICAgIEFUSF9SU1NJX0VQX01VTFRJUExJRVIpOwotCWlmIChyeF9zdGF0cy0+cnNfcnNzaSA8IDApCi0JCXJ4X3N0YXRzLT5yc19yc3NpID0gMDsKLQotCS8qIFVwZGF0ZSBCZWFjb24gUlNTSSwgdGhpcyBpcyB1c2VkIGJ5IEFOSS4gKi8KLQlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihmYykpCi0JCWFoLT5zdGF0cy5hdmdicnNzaSA9IHJ4X3N0YXRzLT5yc19yc3NpOwotfQotCi0vKgotICogRm9yIERlY3J5cHQgb3IgRGVtaWMgZXJyb3JzLCB3ZSBvbmx5IG1hcmsgcGFja2V0IHN0YXR1cyBoZXJlIGFuZCBhbHdheXMgcHVzaAotICogdXAgdGhlIGZyYW1lIHVwIHRvIGxldCBtYWM4MDIxMSBoYW5kbGUgdGhlIGFjdHVhbCBlcnJvciBjYXNlLCBiZSBpdCBubwotICogZGVjcnlwdGlvbiBrZXkgb3IgcmVhbCBkZWNyeXB0aW9uIGVycm9yLiBUaGlzIGxldCB1cyBrZWVwIHN0YXRpc3RpY3MgdGhlcmUuCi0gKi8KLWludCBhdGg5a19jbW5fcnhfc2tiX3ByZXByb2Nlc3Moc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCXN0cnVjdCBhdGhfcnhfc3RhdHVzICpyeF9zdGF0cywKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzLAotCQkJCWJvb2wgKmRlY3J5cHRfZXJyb3IpCi17Ci0Jc3RydWN0IGF0aF9odyAqYWggPSBjb21tb24tPmFoOwotCi0JbWVtc2V0KHJ4X3N0YXR1cywgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzKSk7Ci0KLQkvKgotCSAqIGV2ZXJ5dGhpbmcgYnV0IHRoZSByYXRlIGlzIGNoZWNrZWQgaGVyZSwgdGhlIHJhdGUgY2hlY2sgaXMgZG9uZQotCSAqIHNlcGFyYXRlbHkgdG8gYXZvaWQgZG9pbmcgdHdvIGxvb2t1cHMgZm9yIGEgcmF0ZSBmb3IgZWFjaCBmcmFtZS4KLQkgKi8KLQlpZiAoIWF0aDlrX3J4X2FjY2VwdChjb21tb24sIHNrYiwgcnhfc3RhdHVzLCByeF9zdGF0cywgZGVjcnlwdF9lcnJvcikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JYXRoOWtfcHJvY2Vzc19yc3NpKGNvbW1vbiwgaHcsIHNrYiwgcnhfc3RhdHMpOwotCi0JaWYgKGF0aDlrX3Byb2Nlc3NfcmF0ZShjb21tb24sIGh3LCByeF9zdGF0cywgcnhfc3RhdHVzLCBza2IpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJ4X3N0YXR1cy0+bWFjdGltZSA9IGF0aDlrX2h3X2V4dGVuZF90c2YoYWgsIHJ4X3N0YXRzLT5yc190c3RhbXApOwotCXJ4X3N0YXR1cy0+YmFuZCA9IGh3LT5jb25mLmNoYW5uZWwtPmJhbmQ7Ci0Jcnhfc3RhdHVzLT5mcmVxID0gaHctPmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXE7Ci0Jcnhfc3RhdHVzLT5zaWduYWwgPSBBVEhfREVGQVVMVF9OT0lTRV9GTE9PUiArIHJ4X3N0YXRzLT5yc19yc3NpOwotCXJ4X3N0YXR1cy0+YW50ZW5uYSA9IHJ4X3N0YXRzLT5yc19hbnRlbm5hOwotCXJ4X3N0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX1RTRlQ7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woYXRoOWtfY21uX3J4X3NrYl9wcmVwcm9jZXNzKTsKLQotdm9pZCBhdGg5a19jbW5fcnhfc2tiX3Bvc3Rwcm9jZXNzKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sCi0JCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgc3RydWN0IGF0aF9yeF9zdGF0dXMgKnJ4X3N0YXRzLAotCQkJCSAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4cywKLQkJCQkgIGJvb2wgZGVjcnlwdF9lcnJvcikKLXsKLQlzdHJ1Y3QgYXRoX2h3ICphaCA9IGNvbW1vbi0+YWg7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQlpbnQgaGRybGVuLCBwYWRwb3MsIHBhZHNpemU7Ci0JdTgga2V5aXg7Ci0JX19sZTE2IGZjOwotCi0JLyogc2VlIGlmIGFueSBwYWRkaW5nIGlzIGRvbmUgYnkgdGhlIGh3IGFuZCByZW1vdmUgaXQgKi8KLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwotCWhkcmxlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKHNrYik7Ci0JZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7Ci0JcGFkcG9zID0gYXRoOWtfY21uX3BhZHBvcyhoZHItPmZyYW1lX2NvbnRyb2wpOwotCi0JLyogVGhlIE1BQyBoZWFkZXIgaXMgcGFkZGVkIHRvIGhhdmUgMzItYml0IGJvdW5kYXJ5IGlmIHRoZQotCSAqIHBhY2tldCBwYXlsb2FkIGlzIG5vbi16ZXJvLiBUaGUgZ2VuZXJhbCBjYWxjdWxhdGlvbiBmb3IKLQkgKiBwYWRzaXplIHdvdWxkIHRha2UgaW50byBhY2NvdW50IG9kZCBoZWFkZXIgbGVuZ3RoczoKLQkgKiBwYWRzaXplID0gKDQgLSBwYWRwb3MgJSA0KSAlIDQ7IEhvd2V2ZXIsIHNpbmNlIG9ubHkKLQkgKiBldmVuLWxlbmd0aCBoZWFkZXJzIGFyZSB1c2VkLCBwYWRkaW5nIGNhbiBvbmx5IGJlIDAgb3IgMgotCSAqIGJ5dGVzIGFuZCB3ZSBjYW4gb3B0aW1pemUgdGhpcyBhIGJpdC4gSW4gYWRkaXRpb24sIHdlIG11c3QKLQkgKiBub3QgdHJ5IHRvIHJlbW92ZSBwYWRkaW5nIGZyb20gc2hvcnQgY29udHJvbCBmcmFtZXMgdGhhdCBkbwotCSAqIG5vdCBoYXZlIHBheWxvYWQuICovCi0JcGFkc2l6ZSA9IHBhZHBvcyAmIDM7Ci0JaWYgKHBhZHNpemUgJiYgc2tiLT5sZW4+PXBhZHBvcytwYWRzaXplK0ZDU19MRU4pIHsKLQkJbWVtbW92ZShza2ItPmRhdGEgKyBwYWRzaXplLCBza2ItPmRhdGEsIHBhZHBvcyk7Ci0JCXNrYl9wdWxsKHNrYiwgcGFkc2l6ZSk7Ci0JfQotCi0Ja2V5aXggPSByeF9zdGF0cy0+cnNfa2V5aXg7Ci0KLQlpZiAoIShrZXlpeCA9PSBBVEg5S19SWEtFWUlYX0lOVkFMSUQpICYmICFkZWNyeXB0X2Vycm9yICYmCi0JICAgIGllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGZjKSkgewotCQlyeHMtPmZsYWcgfD0gUlhfRkxBR19ERUNSWVBURUQ7Ci0JfSBlbHNlIGlmIChpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChmYykKLQkJICAgJiYgIWRlY3J5cHRfZXJyb3IgJiYgc2tiLT5sZW4gPj0gaGRybGVuICsgNCkgewotCQlrZXlpeCA9IHNrYi0+ZGF0YVtoZHJsZW4gKyAzXSA+PiA2OwotCi0JCWlmICh0ZXN0X2JpdChrZXlpeCwgY29tbW9uLT5rZXltYXApKQotCQkJcnhzLT5mbGFnIHw9IFJYX0ZMQUdfREVDUllQVEVEOwotCX0KLQlpZiAoYWgtPnN3X21nbXRfY3J5cHRvICYmCi0JICAgIChyeHMtPmZsYWcgJiBSWF9GTEFHX0RFQ1JZUFRFRCkgJiYKLQkgICAgaWVlZTgwMjExX2lzX21nbXQoZmMpKQotCQkvKiBVc2Ugc29mdHdhcmUgZGVjcnlwdCBmb3IgbWFuYWdlbWVudCBmcmFtZXMuICovCi0JCXJ4cy0+ZmxhZyAmPSB+UlhfRkxBR19ERUNSWVBURUQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGF0aDlrX2Ntbl9yeF9za2JfcG9zdHByb2Nlc3MpOwotCiBpbnQgYXRoOWtfY21uX3BhZHBvcyhfX2xlMTYgZnJhbWVfY29udHJvbCkKIHsKIAlpbnQgcGFkcG9zID0gMjQ7CkBAIC00NzUsMTAgKzIxMSwxNCBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCBhdGhfcmVzZXJ2ZV9rZXlfY2FjaGVfc2xvdChzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uKQorc3RhdGljIGludCBhdGhfcmVzZXJ2ZV9rZXlfY2FjaGVfc2xvdChzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLAorCQkJCSAgICAgIGVudW0gaWVlZTgwMjExX2tleV9hbGcgYWxnKQogewogCWludCBpOwogCisJaWYgKGFsZyA9PSBBTEdfVEtJUCkKKwkJcmV0dXJuIGF0aF9yZXNlcnZlX2tleV9jYWNoZV9zbG90X3RraXAoY29tbW9uKTsKKwogCS8qIEZpcnN0LCB0cnkgdG8gZmluZCBzbG90cyB0aGF0IHdvdWxkIG5vdCBiZSBhdmFpbGFibGUgZm9yIFRLSVAuICovCiAJaWYgKGNvbW1vbi0+c3BsaXRtaWMpIHsKIAkJZm9yIChpID0gSUVFRTgwMjExX1dFUF9OS0lEOyBpIDwgY29tbW9uLT5rZXltYXggLyA0OyBpKyspIHsKQEAgLTU0Nyw2ICsyODcsNyBAQAogCXN0cnVjdCBhdGhfaHcgKmFoID0gY29tbW9uLT5haDsKIAlzdHJ1Y3QgYXRoOWtfa2V5dmFsIGhrOwogCWNvbnN0IHU4ICptYWMgPSBOVUxMOworCXU4IGdtYWNbRVRIX0FMRU5dOwogCWludCByZXQgPSAwOwogCWludCBpZHg7CiAKQEAgLTU3MCw5ICszMTEsMjcgQEAKIAltZW1jcHkoaGsua3ZfdmFsLCBrZXktPmtleSwga2V5LT5rZXlsZW4pOwogCiAJaWYgKCEoa2V5LT5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSkpIHsKLQkJLyogRm9yIG5vdywgdXNlIHRoZSBkZWZhdWx0IGtleXMgZm9yIGJyb2FkY2FzdCBrZXlzLiBUaGlzIG1heQotCQkgKiBuZWVkIHRvIGNoYW5nZSB3aXRoIHZpcnR1YWwgaW50ZXJmYWNlcy4gKi8KLQkJaWR4ID0ga2V5LT5rZXlpZHg7CisJCXN3aXRjaCAodmlmLT50eXBlKSB7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJCQltZW1jcHkoZ21hYywgdmlmLT5hZGRyLCBFVEhfQUxFTik7CisJCQlnbWFjWzBdIHw9IDB4MDE7CisJCQltYWMgPSBnbWFjOworCQkJaWR4ID0gYXRoX3Jlc2VydmVfa2V5X2NhY2hlX3Nsb3QoY29tbW9uLCBrZXktPmFsZyk7CisJCQlicmVhazsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJCWlmICghc3RhKSB7CisJCQkJaWR4ID0ga2V5LT5rZXlpZHg7CisJCQkJYnJlYWs7CisJCQl9CisJCQltZW1jcHkoZ21hYywgc3RhLT5hZGRyLCBFVEhfQUxFTik7CisJCQlnbWFjWzBdIHw9IDB4MDE7CisJCQltYWMgPSBnbWFjOworCQkJaWR4ID0gYXRoX3Jlc2VydmVfa2V5X2NhY2hlX3Nsb3QoY29tbW9uLCBrZXktPmFsZyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWlkeCA9IGtleS0+a2V5aWR4OworCQkJYnJlYWs7CisJCX0KIAl9IGVsc2UgaWYgKGtleS0+a2V5aWR4KSB7CiAJCWlmIChXQVJOX09OKCFzdGEpKQogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtNTg5LDE0ICszNDgsMTIgQEAKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAkJbWFjID0gc3RhLT5hZGRyOwogCi0JCWlmIChrZXktPmFsZyA9PSBBTEdfVEtJUCkKLQkJCWlkeCA9IGF0aF9yZXNlcnZlX2tleV9jYWNoZV9zbG90X3RraXAoY29tbW9uKTsKLQkJZWxzZQotCQkJaWR4ID0gYXRoX3Jlc2VydmVfa2V5X2NhY2hlX3Nsb3QoY29tbW9uKTsKLQkJaWYgKGlkeCA8IDApCi0JCQlyZXR1cm4gLUVOT1NQQzsgLyogbm8gZnJlZSBrZXkgY2FjaGUgZW50cmllcyAqLworCQlpZHggPSBhdGhfcmVzZXJ2ZV9rZXlfY2FjaGVfc2xvdChjb21tb24sIGtleS0+YWxnKTsKIAl9CiAKKwlpZiAoaWR4IDwgMCkKKwkJcmV0dXJuIC1FTk9TUEM7IC8qIG5vIGZyZWUga2V5IGNhY2hlIGVudHJpZXMgKi8KKwogCWlmIChrZXktPmFsZyA9PSBBTEdfVEtJUCkKIAkJcmV0ID0gYXRoX3NldGtleV90a2lwKGNvbW1vbiwgaWR4LCBrZXktPmtleSwgJmhrLCBtYWMsCiAJCQkJICAgICAgdmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKTsKQEAgLTY0NCw2ICs0MDEsMTkgQEAKIH0KIEVYUE9SVF9TWU1CT0woYXRoOWtfY21uX2tleV9kZWxldGUpOwogCitpbnQgYXRoOWtfY21uX2NvdW50X3N0cmVhbXModW5zaWduZWQgaW50IGNoYWlubWFzaywgaW50IG1heCkKK3sKKwlpbnQgc3RyZWFtcyA9IDA7CisKKwlkbyB7CisJCWlmICgrK3N0cmVhbXMgPT0gbWF4KQorCQkJYnJlYWs7CisJfSB3aGlsZSAoKGNoYWlubWFzayA9IGNoYWlubWFzayAmIChjaGFpbm1hc2sgLSAxKSkpOworCisJcmV0dXJuIHN0cmVhbXM7Cit9CitFWFBPUlRfU1lNQk9MKGF0aDlrX2Ntbl9jb3VudF9zdHJlYW1zKTsKKwogc3RhdGljIGludCBfX2luaXQgYXRoOWtfY21uX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uaAppbmRleCBlMDhmN2U1Li45NzgwOWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5oCkBAIC01Miw4MiArNTIsNiBAQAogI2RlZmluZSBBVEhfRVBfUk5EKHgsIG11bCkgCQkJCQkJXAogCSgoKCh4KSUobXVsKSkgPj0gKChtdWwpLzIpKSA/ICgoeCkgKyAoKG11bCkgLSAxKSkgLyAobXVsKSA6ICh4KS8obXVsKSkKIAotc3RydWN0IGF0aF9hdHhfYWMgewotCWludCBzY2hlZDsKLQlpbnQgcW51bTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCB0aWRfcTsKLX07Ci0KLXN0cnVjdCBhdGhfYnVmX3N0YXRlIHsKLQlpbnQgYmZzX25mcmFtZXM7Ci0JdTE2IGJmc19hbDsKLQl1MTYgYmZzX2ZybWxlbjsKLQlpbnQgYmZzX3NlcW5vOwotCWludCBiZnNfdGlkbm87Ci0JaW50IGJmc19yZXRyaWVzOwotCXU4IGJmX3R5cGU7Ci0JdTMyIGJmc19rZXlpeDsKLQllbnVtIGF0aDlrX2tleV90eXBlIGJmc19rZXl0eXBlOwotfTsKLQotc3RydWN0IGF0aF9idWYgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmZfbGFzdGJmOwkvKiBsYXN0IGJ1ZiBvZiB0aGlzIHVuaXQgKGEgZnJhbWUgb3IKLQkJCQkJICAgYW4gYWdncmVnYXRlKSAqLwotCXN0cnVjdCBhdGhfYnVmICpiZl9uZXh0OwkvKiBuZXh0IHN1YmZyYW1lIGluIHRoZSBhZ2dyZWdhdGUgKi8KLQlzdHJ1Y3Qgc2tfYnVmZiAqYmZfbXBkdTsJLyogZW5jbG9zaW5nIGZyYW1lIHN0cnVjdHVyZSAqLwotCXZvaWQgKmJmX2Rlc2M7CQkJLyogdmlydHVhbCBhZGRyIG9mIGRlc2MgKi8KLQlkbWFfYWRkcl90IGJmX2RhZGRyOwkJLyogcGh5c2ljYWwgYWRkciBvZiBkZXNjICovCi0JZG1hX2FkZHJfdCBiZl9idWZfYWRkcjsJCS8qIHBoeXNpY2FsIGFkZHIgb2YgZGF0YSBidWZmZXIgKi8KLQlib29sIGJmX3N0YWxlOwotCWJvb2wgYmZfaXNudWxsZnVuYzsKLQlib29sIGJmX3R4X2Fib3J0ZWQ7Ci0JdTE2IGJmX2ZsYWdzOwotCXN0cnVjdCBhdGhfYnVmX3N0YXRlIGJmX3N0YXRlOwotCWRtYV9hZGRyX3QgYmZfZG1hY29udGV4dDsKLQlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5OwotfTsKLQotc3RydWN0IGF0aF9hdHhfdGlkIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCBidWZfcTsKLQlzdHJ1Y3QgYXRoX25vZGUgKmFuOwotCXN0cnVjdCBhdGhfYXR4X2FjICphYzsKLQlzdHJ1Y3QgYXRoX2J1ZiAqdHhfYnVmW0FUSF9USURfTUFYX0JVRlNdOwotCXUxNiBzZXFfc3RhcnQ7Ci0JdTE2IHNlcV9uZXh0OwotCXUxNiBiYXdfc2l6ZTsKLQlpbnQgdGlkbm87Ci0JaW50IGJhd19oZWFkOyAgIC8qIGZpcnN0IHVuLWFja2VkIHR4IGJ1ZmZlciAqLwotCWludCBiYXdfdGFpbDsgICAvKiBuZXh0IHVudXNlZCB0eCBidWZmZXIgc2xvdCAqLwotCWludCBzY2hlZDsKLQlpbnQgcGF1c2VkOwotCXU4IHN0YXRlOwotfTsKLQotc3RydWN0IGF0aF9ub2RlIHsKLQlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uOwotCXN0cnVjdCBhdGhfYXR4X3RpZCB0aWRbV01FX05VTV9USURdOwotCXN0cnVjdCBhdGhfYXR4X2FjIGFjW1dNRV9OVU1fQUNdOwotCXUxNiBtYXhhbXBkdTsKLQl1OCBtcGR1ZGVuc2l0eTsKLQlpbnQgbGFzdF9yc3NpOwotfTsKLQotaW50IGF0aDlrX2Ntbl9yeF9za2JfcHJlcHJvY2VzcyhzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLAotCQkJCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCXN0cnVjdCBza19idWZmICpza2IsCi0JCQkJc3RydWN0IGF0aF9yeF9zdGF0dXMgKnJ4X3N0YXRzLAotCQkJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMsCi0JCQkJYm9vbCAqZGVjcnlwdF9lcnJvcik7Ci0KLXZvaWQgYXRoOWtfY21uX3J4X3NrYl9wb3N0cHJvY2VzcyhzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLAotCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgIHN0cnVjdCBhdGhfcnhfc3RhdHVzICpyeF9zdGF0cywKLQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeHMsCi0JCQkJICBib29sIGRlY3J5cHRfZXJyb3IpOwotCiBpbnQgYXRoOWtfY21uX3BhZHBvcyhfX2xlMTYgZnJhbWVfY29udHJvbCk7CiBpbnQgYXRoOWtfY21uX2dldF9od19jcnlwdG9fa2V5dHlwZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHZvaWQgYXRoOWtfY21uX3VwZGF0ZV9pY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKQEAgLTE0MCwzICs2NCw0IEBACiAJCQkgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KTsKIHZvaWQgYXRoOWtfY21uX2tleV9kZWxldGUoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiwKIAkJCSAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KTsKK2ludCBhdGg5a19jbW5fY291bnRfc3RyZWFtcyh1bnNpZ25lZCBpbnQgY2hhaW5tYXNrLCBpbnQgbWF4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmMKaW5kZXggMjk4OThmOC4uNTRhYWU5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmMKQEAgLTQyLDcgKzQyLDcgQEAKIAljaGFyIGJ1ZlszMl07CiAJdW5zaWduZWQgaW50IGxlbjsKIAotCWxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIweCUwOHhcbiIsIGNvbW1vbi0+ZGVidWdfbWFzayk7CisJbGVuID0gc3ByaW50ZihidWYsICIweCUwOHhcbiIsIGNvbW1vbi0+ZGVidWdfbWFzayk7CiAJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOwogfQogCkBAIC01Nyw3ICs1Nyw3IEBACiAKIAlsZW4gPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gMSk7CiAJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGxlbikpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gLUVGQVVMVDsKIAogCWJ1ZltsZW5dID0gJ1wwJzsKIAlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmbWFzaykpCkBAIC04Niw3ICs4Niw3IEBACiAJY2hhciBidWZbMzJdOwogCXVuc2lnbmVkIGludCBsZW47CiAKLQlsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiMHglMDh4XG4iLCBjb21tb24tPnR4X2NoYWlubWFzayk7CisJbGVuID0gc3ByaW50ZihidWYsICIweCUwOHhcbiIsIGNvbW1vbi0+dHhfY2hhaW5tYXNrKTsKIAlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7CiB9CiAKQEAgLTEwMSw3ICsxMDEsNyBAQAogCiAJbGVuID0gbWluKGNvdW50LCBzaXplb2YoYnVmKSAtIDEpOwogCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBsZW4pKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlidWZbbGVuXSA9ICdcMCc7CiAJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJm1hc2spKQpAQCAtMTI4LDcgKzEyOCw3IEBACiAJY2hhciBidWZbMzJdOwogCXVuc2lnbmVkIGludCBsZW47CiAKLQlsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiMHglMDh4XG4iLCBjb21tb24tPnJ4X2NoYWlubWFzayk7CisJbGVuID0gc3ByaW50ZihidWYsICIweCUwOHhcbiIsIGNvbW1vbi0+cnhfY2hhaW5tYXNrKTsKIAlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7CiB9CiAKQEAgLTE0Myw3ICsxNDMsNyBAQAogCiAJbGVuID0gbWluKGNvdW50LCBzaXplb2YoYnVmKSAtIDEpOwogCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBsZW4pKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlidWZbbGVuXSA9ICdcMCc7CiAJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJm1hc2spKQpAQCAtMTc2LDcgKzE3Niw3IEBACiAKIAlidWYgPSBrbWFsbG9jKERNQV9CVUZfTEVOLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRU5PTUVNOwogCiAJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIApAQCAtMjQ4LDYgKzI0OCw5IEBACiAKIAlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAorCWlmIChsZW4gPiBETUFfQlVGX0xFTikKKwkJbGVuID0gRE1BX0JVRl9MRU47CisKIAlyZXR2YWwgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKIAlrZnJlZShidWYpOwogCXJldHVybiByZXR2YWw7CkBAIC0yNjksNiArMjcyLDggQEAKIAkJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMucnhscCsrOwogCQlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX1JYSFApCiAJCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnJ4aHArKzsKKwkJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9CQl9XQVRDSERPRykKKwkJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuYmJfd2F0Y2hkb2crKzsKIAl9IGVsc2UgewogCQlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX1JYKQogCQkJc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5yeG9rKys7CkBAIC0zMTksNiArMzI0LDkgQEAKIAkJCSIlOHM6ICUxMHVcbiIsICJSWExQIiwgc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5yeGxwKTsKIAkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCiAJCQkiJThzOiAlMTB1XG4iLCAiUlhIUCIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMucnhocCk7CisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJIiU4czogJTEwdVxuIiwgIldBVENIRE9HIiwKKwkJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuYmJfd2F0Y2hkb2cpOwogCX0gZWxzZSB7CiAJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAogCQkJIiU4czogJTEwdVxuIiwgIlJYIiwgc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5yeG9rKTsKQEAgLTM1OCw2ICszNjYsOSBAQAogCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAogCQkiJThzOiAlMTB1XG4iLCAiVE9UQUwiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnRvdGFsKTsKIAorCWlmIChsZW4gPiBzaXplb2YoYnVmKSkKKwkJbGVuID0gc2l6ZW9mKGJ1Zik7CisKIAlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7CiB9CiAKQEAgLTM5NywxMSArNDA4LDEwIEBACiAJaWYgKHNjLT5jdXJfcmF0ZV90YWJsZSA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAotCW1heCA9IDgwICsgc2MtPmN1cl9yYXRlX3RhYmxlLT5yYXRlX2NudCAqIDEwMjQ7Ci0JYnVmID0ga21hbGxvYyhtYXggKyAxLCBHRlBfS0VSTkVMKTsKKwltYXggPSA4MCArIHNjLT5jdXJfcmF0ZV90YWJsZS0+cmF0ZV9jbnQgKiAxMDI0ICsgMTsKKwlidWYgPSBrbWFsbG9jKG1heCwgR0ZQX0tFUk5FTCk7CiAJaWYgKGJ1ZiA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQlidWZbbWF4XSA9IDA7CisJCXJldHVybiAtRU5PTUVNOwogCiAJbGVuICs9IHNwcmludGYoYnVmLCAiJTZzICU2cyAlNnMgIgogCQkgICAgICAgIiUxMHMgJTEwcyAlMTBzICUxMHNcbiIsCkBAIC00NDMsNiArNDUzLDkgQEAKIAkJCXN0YXRzLT5wZXIpOwogCX0KIAorCWlmIChsZW4gPiBtYXgpCisJCWxlbiA9IG1heDsKKwogCXJldHZhbCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOwogCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIHJldHZhbDsKQEAgLTUwNSw2ICs1MTgsOSBAQAogCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAogCQkJImFkZHJtYXNrOiAlcE1cbiIsIGFkZHIpOwogCisJaWYgKGxlbiA+IHNpemVvZihidWYpKQorCQlsZW4gPSBzaXplb2YoYnVmKTsKKwogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKIH0KIApAQCAtNjE0LDEwICs2MzAsMTAgQEAKIAlkbyB7CQkJCQkJCQlcCiAJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sCQkJXAogCQkJCSIlcyUxM3UlMTF1JTEwdSUxMHVcbiIsIHN0ciwJCVwKLQkJc2MtPmRlYnVnLnN0YXRzLnR4c3RhdHNbc2MtPnR4Lmh3cV9tYXBbQVRIOUtfV01FX0FDX0JFXV0uZWxlbSwgXAotCQlzYy0+ZGVidWcuc3RhdHMudHhzdGF0c1tzYy0+dHguaHdxX21hcFtBVEg5S19XTUVfQUNfQktdXS5lbGVtLCBcCi0JCXNjLT5kZWJ1Zy5zdGF0cy50eHN0YXRzW3NjLT50eC5od3FfbWFwW0FUSDlLX1dNRV9BQ19WSV1dLmVsZW0sIFwKLQkJc2MtPmRlYnVnLnN0YXRzLnR4c3RhdHNbc2MtPnR4Lmh3cV9tYXBbQVRIOUtfV01FX0FDX1ZPXV0uZWxlbSk7IFwKKwkJc2MtPmRlYnVnLnN0YXRzLnR4c3RhdHNbc2MtPnR4Lmh3cV9tYXBbV01FX0FDX0JFXV0uZWxlbSwgXAorCQlzYy0+ZGVidWcuc3RhdHMudHhzdGF0c1tzYy0+dHguaHdxX21hcFtXTUVfQUNfQktdXS5lbGVtLCBcCisJCXNjLT5kZWJ1Zy5zdGF0cy50eHN0YXRzW3NjLT50eC5od3FfbWFwW1dNRV9BQ19WSV1dLmVsZW0sIFwKKwkJc2MtPmRlYnVnLnN0YXRzLnR4c3RhdHNbc2MtPnR4Lmh3cV9tYXBbV01FX0FDX1ZPXV0uZWxlbSk7IFwKIH0gd2hpbGUoMCkKIAogc3RhdGljIHNzaXplX3QgcmVhZF9maWxlX3htaXQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKQEAgLTYzMCw3ICs2NDYsNyBAQAogCiAJYnVmID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoYnVmID09IE5VTEwpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVOT01FTTsKIAogCWxlbiArPSBzcHJpbnRmKGJ1ZiwgIiUzMHMgJTEwcyUxMHMlMTBzXG5cbiIsICJCRSIsICJCSyIsICJWSSIsICJWTyIpOwogCkBAIC02NDgsNiArNjY0LDkgQEAKIAlQUigiREFUQSBVbmRlcnJ1bjogICAiLCBkYXRhX3VuZGVycnVuKTsKIAlQUigiREVMSU0gVW5kZXJydW46ICAiLCBkZWxpbV91bmRlcnJ1bik7CiAKKwlpZiAobGVuID4gc2l6ZSkKKwkJbGVuID0gc2l6ZTsKKwogCXJldHZhbCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOwogCWtmcmVlKGJ1Zik7CiAKQEAgLTcwMCw3ICs3MTksNyBAQAogCiAJYnVmID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoYnVmID09IE5VTEwpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVOT01FTTsKIAogCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sCiAJCQkiJTE4cyA6ICUxMHVcbiIsICJDUkMgRVJSIiwKQEAgLTc1MSw2ICs3NzAsOSBAQAogCVBIWV9FUlIoIkhULUxFTkdUSCIsIEFUSDlLX1BIWUVSUl9IVF9MRU5HVEhfSUxMRUdBTCk7CiAJUEhZX0VSUigiSFQtUkFURSIsIEFUSDlLX1BIWUVSUl9IVF9SQVRFX0lMTEVHQUwpOwogCisJaWYgKGxlbiA+IHNpemUpCisJCWxlbiA9IHNpemU7CisKIAlyZXR2YWwgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKIAlrZnJlZShidWYpOwogCkBAIC04MDIsNyArODI0LDcgQEAKIAljaGFyIGJ1ZlszMl07CiAJdW5zaWduZWQgaW50IGxlbjsKIAotCWxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIweCUwOHhcbiIsIHNjLT5kZWJ1Zy5yZWdpZHgpOworCWxlbiA9IHNwcmludGYoYnVmLCAiMHglMDh4XG4iLCBzYy0+ZGVidWcucmVnaWR4KTsKIAlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7CiB9CiAKQEAgLTgxNiw3ICs4MzgsNyBAQAogCiAJbGVuID0gbWluKGNvdW50LCBzaXplb2YoYnVmKSAtIDEpOwogCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBsZW4pKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlidWZbbGVuXSA9ICdcMCc7CiAJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJnJlZ2lkeCkpCkBAIC04NDMsNyArODY1LDcgQEAKIAl1MzIgcmVndmFsOwogCiAJcmVndmFsID0gUkVHX1JFQURfRChhaCwgc2MtPmRlYnVnLnJlZ2lkeCk7Ci0JbGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIjB4JTA4eFxuIiwgcmVndmFsKTsKKwlsZW4gPSBzcHJpbnRmKGJ1ZiwgIjB4JTA4eFxuIiwgcmVndmFsKTsKIAlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7CiB9CiAKQEAgLTg1OCw3ICs4ODAsNyBAQAogCiAJbGVuID0gbWluKGNvdW50LCBzaXplb2YoYnVmKSAtIDEpOwogCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBsZW4pKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlidWZbbGVuXSA9ICdcMCc7CiAJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJnJlZ3ZhbCkpCkBAIC05MzQsNiArOTU2LDEwIEBACiAJCQlzYy0+ZGVidWcuZGVidWdmc19waHksIHNjLCAmZm9wc19yZWd2YWwpKQogCQlnb3RvIGVycjsKIAorCWlmICghZGVidWdmc19jcmVhdGVfYm9vbCgiaWdub3JlX2V4dGNjYSIsIFNfSVJVU1IgfCBTX0lXVVNSLAorCQkJc2MtPmRlYnVnLmRlYnVnZnNfcGh5LCAmYWgtPmNvbmZpZy5jd21faWdub3JlX2V4dGNjYSkpCisJCWdvdG8gZXJyOworCiAJc2MtPmRlYnVnLnJlZ2lkeCA9IDA7CiAJcmV0dXJuIDA7CiBlcnI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5oCmluZGV4IDUxNDdiODcuLjVkMjE3MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5oCkBAIC01Myw2ICs1Myw3IEBACiAgKiBAY2FiZW5kOiBSWCBFbmQgb2YgQ0FCIHRyYWZmaWMKICAqIEBkdGltc3luYzogRFRJTSBzeW5jIGxvc3NhZ2UKICAqIEBkdGltOiBSWCBCZWFjb24gd2l0aCBEVElNCisgKiBAYmJfd2F0Y2hkb2c6IEJhc2ViYW5kIHdhdGNoZG9nCiAgKi8KIHN0cnVjdCBhdGhfaW50ZXJydXB0X3N0YXRzIHsKIAl1MzIgdG90YWw7CkBAIC03Niw2ICs3Nyw3IEBACiAJdTMyIGNhYmVuZDsKIAl1MzIgZHRpbXN5bmM7CiAJdTMyIGR0aW07CisJdTMyIGJiX3dhdGNoZG9nOwogfTsKIAogc3RydWN0IGF0aF9yY19zdGF0cyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tLmMKaW5kZXggY2E4NzA0YS4uMTI2NjMzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb20uYwpAQCAtMjQsNiArMjQsMTQgQEAKIAlyZXR1cm4gKHUxNikgKChpczJHSHopID8gKDIzMDAgKyBmYmluKSA6ICg0ODAwICsgNSAqIGZiaW4pKTsKIH0KIAordm9pZCBhdGg5a19od19hbmFsb2dfc2hpZnRfcmVnd3JpdGUoc3RydWN0IGF0aF9odyAqYWgsIHUzMiByZWcsIHUzMiB2YWwpCit7CisgICAgICAgIFJFR19XUklURShhaCwgcmVnLCB2YWwpOworCisgICAgICAgIGlmIChhaC0+Y29uZmlnLmFuYWxvZ19zaGlmdHJlZykKKwkJdWRlbGF5KDEwMCk7Cit9CisKIHZvaWQgYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJlZywgdTMyIG1hc2ssCiAJCQkgICAgICAgdTMyIHNoaWZ0LCB1MzIgdmFsKQogewpAQCAtMjUwLDYgKzI1OCwyNyBAQAogCXJldHVybiB0d2ljZU1heEVkZ2VQb3dlcjsKIH0KIAordm9pZCBhdGg5a19od191cGRhdGVfcmVndWxhdG9yeV9tYXhwb3dlcihzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKKwlzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZ3VsYXRvcnkgPSBhdGg5a19od19yZWd1bGF0b3J5KGFoKTsKKworCXN3aXRjaCAoYXI1NDE2X2dldF9udHhjaGFpbnMoYWgtPnR4Y2hhaW5tYXNrKSkgeworCWNhc2UgMToKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyZWd1bGF0b3J5LT5tYXhfcG93ZXJfbGV2ZWwgKz0gSU5DUkVBU0VfTUFYUE9XX0JZX1RXT19DSEFJTjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlyZWd1bGF0b3J5LT5tYXhfcG93ZXJfbGV2ZWwgKz0gSU5DUkVBU0VfTUFYUE9XX0JZX1RIUkVFX0NIQUlOOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKKwkJCSAgIkludmFsaWQgY2hhaW5tYXNrIGNvbmZpZ3VyYXRpb25cbiIpOworCQlicmVhazsKKwl9Cit9CisKIGludCBhdGg5a19od19lZXByb21faW5pdChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlpbnQgc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbS5oCmluZGV4IDIxMzU0YzE1Li44NzUwYzU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbS5oCkBAIC0yNjMsNyArMjYzLDggQEAKIAlFRVBfUFdSX1RBQkxFX09GRlNFVCwKIAlFRVBfRFJJVkVfU1RSRU5HVEgsCiAJRUVQX0lOVEVSTkFMX1JFR1VMQVRPUiwKLQlFRVBfU1dSRUcKKwlFRVBfU1dSRUcsCisJRUVQX1BBUFJELAogfTsKIAogZW51bSBhcjU0MTZfcmF0ZXMgewpAQCAtNjY5LDcgKzY3MCw3IEBACiAJaW50ICgqZ2V0X2VlcHJvbV92ZXIpKHN0cnVjdCBhdGhfaHcgKmh3KTsKIAlpbnQgKCpnZXRfZWVwcm9tX3Jldikoc3RydWN0IGF0aF9odyAqaHcpOwogCXU4ICgqZ2V0X251bV9hbnRfY29uZmlnKShzdHJ1Y3QgYXRoX2h3ICpodywgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKTsKLQl1MTYgKCpnZXRfZWVwcm9tX2FudGVubmFfY2ZnKShzdHJ1Y3QgYXRoX2h3ICpodywKKwl1MzIgKCpnZXRfZWVwcm9tX2FudGVubmFfY2ZnKShzdHJ1Y3QgYXRoX2h3ICpodywKIAkJCQkgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CiAJdm9pZCAoKnNldF9ib2FyZF92YWx1ZXMpKHN0cnVjdCBhdGhfaHcgKmh3LCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CiAJdm9pZCAoKnNldF9hZGRhYykoc3RydWN0IGF0aF9odyAqaHcsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKQEAgLTY3OSw2ICs2ODAsNyBAQAogCXUxNiAoKmdldF9zcHVyX2NoYW5uZWwpKHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgaSwgYm9vbCBpczJHSHopOwogfTsKIAordm9pZCBhdGg5a19od19hbmFsb2dfc2hpZnRfcmVnd3JpdGUoc3RydWN0IGF0aF9odyAqYWgsIHUzMiByZWcsIHUzMiB2YWwpOwogdm9pZCBhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcmVnLCB1MzIgbWFzaywKIAkJCSAgICAgICB1MzIgc2hpZnQsIHUzMiB2YWwpOwogaW50MTZfdCBhdGg5a19od19pbnRlcnBvbGF0ZSh1MTYgdGFyZ2V0LCB1MTYgc3JjTGVmdCwgdTE2IHNyY1JpZ2h0LApAQCAtNzA0LDYgKzcwNiw3IEBACiAJCQkJdTE2IG51bVJhdGVzLCBib29sIGlzSHQ0MFRhcmdldCk7CiB1MTYgYXRoOWtfaHdfZ2V0X21heF9lZGdlX3Bvd2VyKHUxNiBmcmVxLCBzdHJ1Y3QgY2FsX2N0bF9lZGdlcyAqcFJkRWRnZXNQb3dlciwKIAkJCQlib29sIGlzMkdIeiwgaW50IG51bV9iYW5kX2VkZ2VzKTsKK3ZvaWQgYXRoOWtfaHdfdXBkYXRlX3JlZ3VsYXRvcnlfbWF4cG93ZXIoc3RydWN0IGF0aF9odyAqYWgpOwogaW50IGF0aDlrX2h3X2VlcHJvbV9pbml0KHN0cnVjdCBhdGhfaHcgKmFoKTsKIAogI2RlZmluZSBhcjU0MTZfZ2V0X250eGNoYWlucyhfdHhjaGFpbm1hc2spCQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbV80ay5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbV80ay5jCmluZGV4IDQxYTc3ZDEuLjljY2NkMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fNGsuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tXzRrLmMKQEAgLTIyMiw3ICsyMjIsNyBAQAogCQkJCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAogCQkJCXN0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcV80ayAqcFJhd0RhdGFTZXQsCiAJCQkJdTggKmJDaGFucywgdTE2IGF2YWlsUGllcnMsCi0JCQkJdTE2IHRQZEdhaW5PdmVybGFwLCBpbnQxNl90ICpwTWluQ2FsUG93ZXIsCisJCQkJdTE2IHRQZEdhaW5PdmVybGFwLAogCQkJCXUxNiAqcFBkR2FpbkJvdW5kYXJpZXMsIHU4ICpwUERBRENWYWx1ZXMsCiAJCQkJdTE2IG51bVhwZEdhaW5zKQogewpAQCAtMjQ5LDYgKzI0OSw3IEBACiAJc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOwogI2RlZmluZSBQRF9HQUlOX0JPVU5EQVJZX0RFRkFVTFQgNTg7CiAKKwltZW1zZXQoJm1pblB3clQ0LCAwLCBBUjkyODdfTlVNX1BEX0dBSU5TKTsKIAlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7CiAKIAlmb3IgKG51bVBpZXJzID0gMDsgbnVtUGllcnMgPCBhdmFpbFBpZXJzOyBudW1QaWVycysrKSB7CkBAIC0zMDcsOCArMzA4LDYgQEAKIAkJfQogCX0KIAotCSpwTWluQ2FsUG93ZXIgPSAoaW50MTZfdCkobWluUHdyVDRbMF0gLyAyKTsKLQogCWsgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKQEAgLTM5OCw3ICszOTcsNiBAQAogCXN0YXRpYyB1OCBwZGFkY1ZhbHVlc1tBUjU0MTZfTlVNX1BEQURDX1ZBTFVFU107CiAJdTE2IGdhaW5Cb3VuZGFyaWVzW0FSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLXTsKIAl1MTYgbnVtUGllcnMsIGksIGo7Ci0JaW50MTZfdCB0TWluQ2FsUG93ZXI7CiAJdTE2IG51bVhwZEdhaW4sIHhwZE1hc2s7CiAJdTE2IHhwZEdhaW5WYWx1ZXNbQVI1NDE2X0VFUDRLX05VTV9QRF9HQUlOU10gPSB7IDAsIDAgfTsKIAl1MzIgcmVnMzIsIHJlZ09mZnNldCwgcmVnQ2hhaW5PZmZzZXQ7CkBAIC00NTEsNyArNDQ5LDcgQEAKIAkJCWF0aDlrX2h3X2dldF80a19nYWluX2JvdW5kYXJpZXNfcGRhZGNzKGFoLCBjaGFuLAogCQkJCQkgICAgcFJhd0RhdGFzZXQsIHBDYWxCQ2hhbnMsCiAJCQkJCSAgICBudW1QaWVycywgcGRHYWluT3ZlcmxhcF90MiwKLQkJCQkJICAgICZ0TWluQ2FsUG93ZXIsIGdhaW5Cb3VuZGFyaWVzLAorCQkJCQkgICAgZ2FpbkJvdW5kYXJpZXMsCiAJCQkJCSAgICBwZGFkY1ZhbHVlcywgbnVtWHBkR2Fpbik7CiAKIAkJCUVOQUJMRV9SRUdXUklURV9CVUZGRVIoYWgpOwpAQCAtMTE0OSwxMyArMTE0NywxMyBAQAogCX0KIH0KIAotc3RhdGljIHUxNiBhdGg5a19od180a19nZXRfZWVwcm9tX2FudGVubmFfY2ZnKHN0cnVjdCBhdGhfaHcgKmFoLAorc3RhdGljIHUzMiBhdGg5a19od180a19nZXRfZWVwcm9tX2FudGVubmFfY2ZnKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCQkgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFoLT5lZXByb20ubWFwNGs7CiAJc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbCA9ICZlZXAtPm1vZGFsSGVhZGVyOwogCi0JcmV0dXJuIHBNb2RhbC0+YW50Q3RybENvbW1vbiAmIDB4RkZGRjsKKwlyZXR1cm4gcE1vZGFsLT5hbnRDdHJsQ29tbW9uOwogfQogCiBzdGF0aWMgdTggYXRoOWtfaHdfNGtfZ2V0X251bV9hbnRfY29uZmlnKHN0cnVjdCBhdGhfaHcgKmFoLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbV85Mjg3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tXzkyODcuYwppbmRleCBiNDcxZGI1Li40YTUyY2YwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tXzkyODcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tXzkyODcuYwpAQCAtMTcsMTcgKzE3LDE5IEBACiAjaW5jbHVkZSAiaHcuaCIKICNpbmNsdWRlICJhcjkwMDJfcGh5LmgiCiAKLXN0YXRpYyBpbnQgYXRoOWtfaHdfQVI5Mjg3X2dldF9lZXByb21fdmVyKHN0cnVjdCBhdGhfaHcgKmFoKQorI2RlZmluZSBOVU1fRUVQX1dPUkRTIChzaXplb2Yoc3RydWN0IGFyOTI4N19lZXByb20pIC8gc2l6ZW9mKHUxNikpCisKK3N0YXRpYyBpbnQgYXRoOWtfaHdfYXI5Mjg3X2dldF9lZXByb21fdmVyKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXJldHVybiAoYWgtPmVlcHJvbS5tYXA5Mjg3LmJhc2VFZXBIZWFkZXIudmVyc2lvbiA+PiAxMikgJiAweEY7CiB9CiAKLXN0YXRpYyBpbnQgYXRoOWtfaHdfQVI5Mjg3X2dldF9lZXByb21fcmV2KHN0cnVjdCBhdGhfaHcgKmFoKQorc3RhdGljIGludCBhdGg5a19od19hcjkyODdfZ2V0X2VlcHJvbV9yZXYoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJcmV0dXJuIChhaC0+ZWVwcm9tLm1hcDkyODcuYmFzZUVlcEhlYWRlci52ZXJzaW9uKSAmIDB4RkZGOwogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19od19BUjkyODdfZmlsbF9lZXByb20oc3RydWN0IGF0aF9odyAqYWgpCitzdGF0aWMgYm9vbCBhdGg5a19od19hcjkyODdfZmlsbF9lZXByb20oc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJc3RydWN0IGFyOTI4N19lZXByb20gKmVlcCA9ICZhaC0+ZWVwcm9tLm1hcDkyODc7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CkBAIC00MCwyMCArNDIsMjAgQEAKIAkJCSAgIlJlYWRpbmcgZnJvbSBFRVBST00sIG5vdCBmbGFzaFxuIik7CiAJfQogCi0JZm9yIChhZGRyID0gMDsgYWRkciA8IHNpemVvZihzdHJ1Y3QgYXI5Mjg3X2VlcHJvbSkgLyBzaXplb2YodTE2KTsKLQkJCWFkZHIrKykJewotCQlpZiAoIWF0aDlrX2h3X252cmFtX3JlYWQoY29tbW9uLAotCQkJCQkgYWRkciArIGVlcF9zdGFydF9sb2MsIGVlcF9kYXRhKSkgeworCWZvciAoYWRkciA9IDA7IGFkZHIgPCBOVU1fRUVQX1dPUkRTOyBhZGRyKyspIHsKKwkJaWYgKCFhdGg5a19od19udnJhbV9yZWFkKGNvbW1vbiwgYWRkciArIGVlcF9zdGFydF9sb2MsCisJCQkJCSBlZXBfZGF0YSkpIHsKIAkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRUVQUk9NLAogCQkJCSAgIlVuYWJsZSB0byByZWFkIGVlcHJvbSByZWdpb25cbiIpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJCWVlcF9kYXRhKys7CiAJfQorCiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbnQgYXRoOWtfaHdfQVI5Mjg3X2NoZWNrX2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCkKK3N0YXRpYyBpbnQgYXRoOWtfaHdfYXI5Mjg3X2NoZWNrX2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAl1MzIgc3VtID0gMCwgZWwsIGludGVnZXI7CiAJdTE2IHRlbXAsIHdvcmQsIG1hZ2ljLCBtYWdpYzIsICplZXBkYXRhOwpAQCAtNjMsOCArNjUsOCBAQAogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCiAJaWYgKCFhdGg5a19od191c2VfZmxhc2goYWgpKSB7Ci0JCWlmICghYXRoOWtfaHdfbnZyYW1fcmVhZChjb21tb24sCi0JCQkJCSBBUjU0MTZfRUVQUk9NX01BR0lDX09GRlNFVCwgJm1hZ2ljKSkgeworCQlpZiAoIWF0aDlrX2h3X252cmFtX3JlYWQoY29tbW9uLCBBUjU0MTZfRUVQUk9NX01BR0lDX09GRlNFVCwKKwkJCQkJICZtYWdpYykpIHsKIAkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCiAJCQkJICAiUmVhZGluZyBNYWdpYyAjIGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gZmFsc2U7CkBAIC03Miw2ICs3NCw3IEBACiAKIAkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19FRVBST00sCiAJCQkgICJSZWFkIE1hZ2ljID0gMHglMDRYXG4iLCBtYWdpYyk7CisKIAkJaWYgKG1hZ2ljICE9IEFSNTQxNl9FRVBST01fTUFHSUMpIHsKIAkJCW1hZ2ljMiA9IHN3YWIxNihtYWdpYyk7CiAKQEAgLTc5LDkgKzgyLDcgQEAKIAkJCQluZWVkX3N3YXAgPSB0cnVlOwogCQkJCWVlcGRhdGEgPSAodTE2ICopKCZhaC0+ZWVwcm9tKTsKIAotCQkJCWZvciAoYWRkciA9IDA7Ci0JCQkJICAgICBhZGRyIDwgc2l6ZW9mKHN0cnVjdCBhcjkyODdfZWVwcm9tKSAvIHNpemVvZih1MTYpOwotCQkJCSAgICAgYWRkcisrKSB7CisJCQkJZm9yIChhZGRyID0gMDsgYWRkciA8IE5VTV9FRVBfV09SRFM7IGFkZHIrKykgewogCQkJCQl0ZW1wID0gc3dhYjE2KCplZXBkYXRhKTsKIAkJCQkJKmVlcGRhdGEgPSB0ZW1wOwogCQkJCQllZXBkYXRhKys7CkBAIC04OSwxMyArOTAsMTQgQEAKIAkJCX0gZWxzZSB7CiAJCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKIAkJCQkJICAiSW52YWxpZCBFRVBST00gTWFnaWMuICIKLQkJCQkJICAiZW5kaWFubmVzcyBtaXNtYXRjaC5cbiIpOworCQkJCQkgICJFbmRpYW5uZXNzIG1pc21hdGNoLlxuIik7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCX0KIAl9Ci0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19FRVBST00sICJuZWVkX3N3YXAgPSAlcy5cbiIsIG5lZWRfc3dhcCA/Ci0JCSAgIlRydWUiIDogIkZhbHNlIik7CisKKwlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwgIm5lZWRfc3dhcCA9ICVzLlxuIiwKKwkJICBuZWVkX3N3YXAgPyAiVHJ1ZSIgOiAiRmFsc2UiKTsKIAogCWlmIChuZWVkX3N3YXApCiAJCWVsID0gc3dhYjE2KGFoLT5lZXByb20ubWFwOTI4Ny5iYXNlRWVwSGVhZGVyLmxlbmd0aCk7CkBAIC0xMDgsNiArMTEwLDcgQEAKIAkJZWwgPSBlbCAvIHNpemVvZih1MTYpOwogCiAJZWVwZGF0YSA9ICh1MTYgKikoJmFoLT5lZXByb20pOworCiAJZm9yIChpID0gMDsgaSA8IGVsOyBpKyspCiAJCXN1bSBePSAqZWVwZGF0YSsrOwogCkBAIC0xNjEsNyArMTY0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHUzMiBhdGg5a19od19BUjkyODdfZ2V0X2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCwKK3N0YXRpYyB1MzIgYXRoOWtfaHdfYXI5Mjg3X2dldF9lZXByb20oc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICAgICAgZW51bSBlZXByb21fcGFyYW0gcGFyYW0pCiB7CiAJc3RydWN0IGFyOTI4N19lZXByb20gKmVlcCA9ICZhaC0+ZWVwcm9tLm1hcDkyODc7CkBAIC0xNzAsNiArMTczLDcgQEAKIAl1MTYgdmVyX21pbm9yOwogCiAJdmVyX21pbm9yID0gcEJhc2UtPnZlcnNpb24gJiBBUjkyODdfRUVQX1ZFUl9NSU5PUl9NQVNLOworCiAJc3dpdGNoIChwYXJhbSkgewogCWNhc2UgRUVQX05GVEhSRVNIXzI6CiAJCXJldHVybiBwTW9kYWwtPm5vaXNlRmxvb3JUaHJlc2hDaFswXTsKQEAgLTIxNCwyOSArMjE4LDI5IEBACiAJfQogfQogCi0KLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2dldF9BUjkyODdfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhzdHJ1Y3QgYXRoX2h3ICphaCwKLQkJCQkgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCQkgICBzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXFfYXI5Mjg3ICpwUmF3RGF0YVNldCwKLQkJCQkgICB1OCAqYkNoYW5zLCAgdTE2IGF2YWlsUGllcnMsCi0JCQkJICAgdTE2IHRQZEdhaW5PdmVybGFwLCBpbnQxNl90ICpwTWluQ2FsUG93ZXIsCi0JCQkJICAgdTE2ICpwUGRHYWluQm91bmRhcmllcywgdTggKnBQREFEQ1ZhbHVlcywKLQkJCQkgICB1MTYgbnVtWHBkR2FpbnMpCitzdGF0aWMgdm9pZCBhdGg5a19od19nZXRfYXI5Mjg3X2dhaW5fYm91bmRhcmllc19wZGFkY3Moc3RydWN0IGF0aF9odyAqYWgsCisJCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkgICAgICAgc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxX2FyOTI4NyAqcFJhd0RhdGFTZXQsCisJCQkgICAgICAgdTggKmJDaGFucywgdTE2IGF2YWlsUGllcnMsCisJCQkgICAgICAgdTE2IHRQZEdhaW5PdmVybGFwLAorCQkJICAgICAgIHUxNiAqcFBkR2FpbkJvdW5kYXJpZXMsCisJCQkgICAgICAgdTggKnBQREFEQ1ZhbHVlcywKKwkJCSAgICAgICB1MTYgbnVtWHBkR2FpbnMpCiB7Ci0jZGVmaW5lIFRNUF9WQUxfVlBEX1RBQkxFIFwKKyNkZWZpbmUgVE1QX1ZBTF9WUERfVEFCTEUJCQkJCQlcCiAJKCh2cGRUYWJsZUlbaV1bc2l6ZUN1cnJWcGRUYWJsZSAtIDFdICsgKHNzIC0gbWF4SW5kZXggKyAxKSAqIHZwZFN0ZXApKTsKIAotCWludCAgICAgICBpLCBqLCBrOwotCWludDE2X3QgICBzczsKLQl1MTYgIGlkeEwgPSAwLCBpZHhSID0gMCwgbnVtUGllcnM7Ci0JdTggICAqcFZwZEwsICpwVnBkUiwgKnBQd3JMLCAqcFB3clI7Ci0JdTggICBtaW5Qd3JUNFtBUjkyODdfTlVNX1BEX0dBSU5TXTsKLQl1OCAgIG1heFB3clQ0W0FSOTI4N19OVU1fUERfR0FJTlNdOwotCWludDE2X3QgICB2cGRTdGVwOwotCWludDE2X3QgICB0bXBWYWw7Ci0JdTE2ICBzaXplQ3VyclZwZFRhYmxlLCBtYXhJbmRleCwgdGd0SW5kZXg7Ci0JYm9vbCAgICBtYXRjaDsKLQlpbnQxNl90ICBtaW5EZWx0YSA9IDA7CisJaW50IGksIGosIGs7CisJaW50MTZfdCBzczsKKwl1MTYgaWR4TCA9IDAsIGlkeFIgPSAwLCBudW1QaWVyczsKKwl1OCAqcFZwZEwsICpwVnBkUiwgKnBQd3JMLCAqcFB3clI7CisJdTggbWluUHdyVDRbQVI5Mjg3X05VTV9QRF9HQUlOU107CisJdTggbWF4UHdyVDRbQVI5Mjg3X05VTV9QRF9HQUlOU107CisJaW50MTZfdCB2cGRTdGVwOworCWludDE2X3QgdG1wVmFsOworCXUxNiBzaXplQ3VyclZwZFRhYmxlLCBtYXhJbmRleCwgdGd0SW5kZXg7CisJYm9vbCBtYXRjaDsKKwlpbnQxNl90IG1pbkRlbHRhID0gMDsKIAlzdHJ1Y3QgY2hhbl9jZW50ZXJzIGNlbnRlcnM7CiAJc3RhdGljIHU4IHZwZFRhYmxlTFtBUjU0MTZfRUVQNEtfTlVNX1BEX0dBSU5TXQogCQlbQVI1NDE2X01BWF9QV1JfUkFOR0VfSU5fSEFMRl9EQl07CkBAIC0yNDUsNiArMjQ5LDcgQEAKIAlzdGF0aWMgdTggdnBkVGFibGVJW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdCiAJCVtBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCXTsKIAorCW1lbXNldCgmbWluUHdyVDQsIDAsIEFSOTI4N19OVU1fUERfR0FJTlMpOwogCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKIAogCWZvciAobnVtUGllcnMgPSAwOyBudW1QaWVycyA8IGF2YWlsUGllcnM7IG51bVBpZXJzKyspIHsKQEAgLTI1MywxOCArMjU4LDE4IEBACiAJfQogCiAJbWF0Y2ggPSBhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgoCi0JCQkJICAgKHU4KUZSRVEyRkJJTihjZW50ZXJzLnN5bnRoX2NlbnRlciwKLQkJCQkgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSwgYkNoYW5zLCBudW1QaWVycywKLQkJCQkgICAgJmlkeEwsICZpZHhSKTsKKwkJKHU4KUZSRVEyRkJJTihjZW50ZXJzLnN5bnRoX2NlbnRlciwgSVNfQ0hBTl8yR0haKGNoYW4pKSwKKwkJYkNoYW5zLCBudW1QaWVycywgJmlkeEwsICZpZHhSKTsKIAogCWlmIChtYXRjaCkgewogCQlmb3IgKGkgPSAwOyBpIDwgbnVtWHBkR2FpbnM7IGkrKykgewogCQkJbWluUHdyVDRbaV0gPSBwUmF3RGF0YVNldFtpZHhMXS5wd3JQZGdbaV1bMF07CiAJCQltYXhQd3JUNFtpXSA9IHBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXVs0XTsKIAkJCWF0aDlrX2h3X2ZpbGxfdnBkX3RhYmxlKG1pblB3clQ0W2ldLCBtYXhQd3JUNFtpXSwKLQkJCQkJcFJhd0RhdGFTZXRbaWR4TF0ucHdyUGRnW2ldLAotCQkJCQlwUmF3RGF0YVNldFtpZHhMXS52cGRQZGdbaV0sCi0JCQkJCUFSOTI4N19QRF9HQUlOX0lDRVBUUywgdnBkVGFibGVJW2ldKTsKKwkJCQkJCXBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXSwKKwkJCQkJCXBSYXdEYXRhU2V0W2lkeExdLnZwZFBkZ1tpXSwKKwkJCQkJCUFSOTI4N19QRF9HQUlOX0lDRVBUUywKKwkJCQkJCXZwZFRhYmxlSVtpXSk7CiAJCX0KIAl9IGVsc2UgewogCQlmb3IgKGkgPSAwOyBpIDwgbnVtWHBkR2FpbnM7IGkrKykgewpAQCAtMjc1LDYxICsyODAsNTggQEAKIAogCQkJbWluUHdyVDRbaV0gPSBtYXgocFB3ckxbMF0sIHBQd3JSWzBdKTsKIAotCQkJbWF4UHdyVDRbaV0gPQotCQkJCW1pbihwUHdyTFtBUjkyODdfUERfR0FJTl9JQ0VQVFMgLSAxXSwKLQkJCQkgICAgcFB3clJbQVI5Mjg3X1BEX0dBSU5fSUNFUFRTIC0gMV0pOworCQkJbWF4UHdyVDRbaV0gPSBtaW4ocFB3ckxbQVI5Mjg3X1BEX0dBSU5fSUNFUFRTIC0gMV0sCisJCQkJCSAgcFB3clJbQVI5Mjg3X1BEX0dBSU5fSUNFUFRTIC0gMV0pOwogCiAJCQlhdGg5a19od19maWxsX3ZwZF90YWJsZShtaW5Qd3JUNFtpXSwgbWF4UHdyVDRbaV0sCi0JCQkJCXBQd3JMLCBwVnBkTCwKLQkJCQkJQVI5Mjg3X1BEX0dBSU5fSUNFUFRTLAotCQkJCQl2cGRUYWJsZUxbaV0pOworCQkJCQkJcFB3ckwsIHBWcGRMLAorCQkJCQkJQVI5Mjg3X1BEX0dBSU5fSUNFUFRTLAorCQkJCQkJdnBkVGFibGVMW2ldKTsKIAkJCWF0aDlrX2h3X2ZpbGxfdnBkX3RhYmxlKG1pblB3clQ0W2ldLCBtYXhQd3JUNFtpXSwKLQkJCQkJcFB3clIsIHBWcGRSLAotCQkJCQlBUjkyODdfUERfR0FJTl9JQ0VQVFMsCi0JCQkJCXZwZFRhYmxlUltpXSk7CisJCQkJCQlwUHdyUiwgcFZwZFIsCisJCQkJCQlBUjkyODdfUERfR0FJTl9JQ0VQVFMsCisJCQkJCQl2cGRUYWJsZVJbaV0pOwogCiAJCQlmb3IgKGogPSAwOyBqIDw9IChtYXhQd3JUNFtpXSAtIG1pblB3clQ0W2ldKSAvIDI7IGorKykgewotCQkJCXZwZFRhYmxlSVtpXVtqXSA9Ci0JCQkJCSh1OCkoYXRoOWtfaHdfaW50ZXJwb2xhdGUoKHUxNikKLQkJCQkJRlJFUTJGQklOKGNlbnRlcnMuIHN5bnRoX2NlbnRlciwKLQkJCQkJSVNfQ0hBTl8yR0haKGNoYW4pKSwKLQkJCQkJYkNoYW5zW2lkeExdLCBiQ2hhbnNbaWR4Ul0sCi0JCQkJCXZwZFRhYmxlTFtpXVtqXSwgdnBkVGFibGVSW2ldW2pdKSk7CisJCQkJdnBkVGFibGVJW2ldW2pdID0gKHU4KShhdGg5a19od19pbnRlcnBvbGF0ZSgKKwkJCQkgICAgICAgKHUxNilGUkVRMkZCSU4oY2VudGVycy4gc3ludGhfY2VudGVyLAorCQkJCQkJICAgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSwKKwkJCQkgICAgICAgYkNoYW5zW2lkeExdLCBiQ2hhbnNbaWR4Ul0sCisJCQkJICAgICAgIHZwZFRhYmxlTFtpXVtqXSwgdnBkVGFibGVSW2ldW2pdKSk7CiAJCQl9CiAJCX0KIAl9Ci0JKnBNaW5DYWxQb3dlciA9IChpbnQxNl90KShtaW5Qd3JUNFswXSAvIDIpOwogCiAJayA9IDA7CisKIAlmb3IgKGkgPSAwOyBpIDwgbnVtWHBkR2FpbnM7IGkrKykgewogCQlpZiAoaSA9PSAobnVtWHBkR2FpbnMgLSAxKSkKLQkJCXBQZEdhaW5Cb3VuZGFyaWVzW2ldID0gKHUxNikobWF4UHdyVDRbaV0gLyAyKTsKKwkJCXBQZEdhaW5Cb3VuZGFyaWVzW2ldID0KKwkJCQkodTE2KShtYXhQd3JUNFtpXSAvIDIpOwogCQllbHNlCi0JCQlwUGRHYWluQm91bmRhcmllc1tpXSA9ICh1MTYpKChtYXhQd3JUNFtpXSArCi0JCQkJCQkgICAgICBtaW5Qd3JUNFtpKzFdKSAvIDQpOworCQkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPQorCQkJCSh1MTYpKChtYXhQd3JUNFtpXSArIG1pblB3clQ0W2krMV0pIC8gNCk7CiAKIAkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPSBtaW4oKHUxNilBUjU0MTZfTUFYX1JBVEVfUE9XRVIsCi0JCQkJCSAgICBwUGRHYWluQm91bmRhcmllc1tpXSk7CisJCQkJCSAgIHBQZEdhaW5Cb3VuZGFyaWVzW2ldKTsKIAogCi0JCWlmICgoaSA9PSAwKSAmJiAhQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSkgewotCQkJbWluRGVsdGEgPSBwUGRHYWluQm91bmRhcmllc1swXSAtIDIzOwotCQkJcFBkR2FpbkJvdW5kYXJpZXNbMF0gPSAyMzsKLQkJfSBlbHNlCi0JCQltaW5EZWx0YSA9IDA7CisJCW1pbkRlbHRhID0gMDsKIAogCQlpZiAoaSA9PSAwKSB7CiAJCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKIAkJCQlzcyA9IChpbnQxNl90KSgwIC0gKG1pblB3clQ0W2ldIC8gMikpOwogCQkJZWxzZQogCQkJCXNzID0gMDsKLQkJfSBlbHNlCisJCX0gZWxzZSB7CiAJCQlzcyA9IChpbnQxNl90KSgocFBkR2FpbkJvdW5kYXJpZXNbaS0xXSAtCi0JCQkJICAgICAgIChtaW5Qd3JUNFtpXSAvIDIpKSAtCisJCQkJCShtaW5Qd3JUNFtpXSAvIDIpKSAtCiAJCQkJICAgICAgIHRQZEdhaW5PdmVybGFwICsgMSArIG1pbkRlbHRhKTsKKwkJfQogCiAJCXZwZFN0ZXAgPSAoaW50MTZfdCkodnBkVGFibGVJW2ldWzFdIC0gdnBkVGFibGVJW2ldWzBdKTsKIAkJdnBkU3RlcCA9IChpbnQxNl90KSgodnBkU3RlcCA8IDEpID8gMSA6IHZwZFN0ZXApOworCiAJCXdoaWxlICgoc3MgPCAwKSAmJiAoayA8IChBUjkyODdfTlVNX1BEQURDX1ZBTFVFUyAtIDEpKSkJewogCQkJdG1wVmFsID0gKGludDE2X3QpKHZwZFRhYmxlSVtpXVswXSArIHNzICogdnBkU3RlcCk7CiAJCQlwUERBRENWYWx1ZXNbaysrXSA9ICh1OCkoKHRtcFZhbCA8IDApID8gMCA6IHRtcFZhbCk7CkBAIC0zNDgsMTIgKzM1MCwxMyBAQAogCQl2cGRTdGVwID0gKGludDE2X3QpKHZwZFRhYmxlSVtpXVtzaXplQ3VyclZwZFRhYmxlIC0gMV0gLQogCQkJCSAgICB2cGRUYWJsZUlbaV1bc2l6ZUN1cnJWcGRUYWJsZSAtIDJdKTsKIAkJdnBkU3RlcCA9IChpbnQxNl90KSgodnBkU3RlcCA8IDEpID8gMSA6IHZwZFN0ZXApOworCiAJCWlmICh0Z3RJbmRleCA+IG1heEluZGV4KSB7CiAJCQl3aGlsZSAoKHNzIDw9IHRndEluZGV4KSAmJgogCQkJCShrIDwgKEFSOTI4N19OVU1fUERBRENfVkFMVUVTIC0gMSkpKSB7CiAJCQkJdG1wVmFsID0gKGludDE2X3QpIFRNUF9WQUxfVlBEX1RBQkxFOwotCQkJCXBQREFEQ1ZhbHVlc1trKytdID0gKHU4KSgodG1wVmFsID4gMjU1KSA/Ci0JCQkJCQkJICAyNTUgOiB0bXBWYWwpOworCQkJCXBQREFEQ1ZhbHVlc1trKytdID0KKwkJCQkJKHU4KSgodG1wVmFsID4gMjU1KSA/IDI1NSA6IHRtcFZhbCk7CiAJCQkJc3MrKzsKIAkJCX0KIAkJfQpAQCAtMzc1LDEwICszNzgsOSBAQAogc3RhdGljIHZvaWQgYXI5Mjg3X2VlcHJvbV9nZXRfdHhfZ2Fpbl9pbmRleChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKIAkJCSAgICBzdHJ1Y3QgY2FsX2RhdGFfb3BfbG9vcF9hcjkyODcgKnBSYXdEYXRhc2V0T3BMb29wLAotCQkJICAgIHU4ICpwQ2FsQ2hhbnMsICB1MTYgYXZhaWxQaWVycywKLQkJCSAgICBpbnQ4X3QgKnBQd3IpCisJCQkgICAgdTggKnBDYWxDaGFucywgIHUxNiBhdmFpbFBpZXJzLCBpbnQ4X3QgKnBQd3IpCiB7Ci0JdTE2ICBpZHhMID0gMCwgaWR4UiA9IDAsIG51bVBpZXJzOworCXUxNiBpZHhMID0gMCwgaWR4UiA9IDAsIG51bVBpZXJzOwogCWJvb2wgbWF0Y2g7CiAJc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOwogCkBAIC0zOTAsMTUgKzM5MiwxNCBAQAogCX0KIAogCW1hdGNoID0gYXRoOWtfaHdfZ2V0X2xvd2VyX3VwcGVyX2luZGV4KAotCQkJKHU4KUZSRVEyRkJJTihjZW50ZXJzLnN5bnRoX2NlbnRlciwgSVNfQ0hBTl8yR0haKGNoYW4pKSwKLQkJCXBDYWxDaGFucywgbnVtUGllcnMsCi0JCQkmaWR4TCwgJmlkeFIpOworCQkodTgpRlJFUTJGQklOKGNlbnRlcnMuc3ludGhfY2VudGVyLCBJU19DSEFOXzJHSFooY2hhbikpLAorCQlwQ2FsQ2hhbnMsIG51bVBpZXJzLCAmaWR4TCwgJmlkeFIpOwogCiAJaWYgKG1hdGNoKSB7CiAJCSpwUHdyID0gKGludDhfdCkgcFJhd0RhdGFzZXRPcExvb3BbaWR4TF0ucHdyUGRnWzBdWzBdOwogCX0gZWxzZSB7CiAJCSpwUHdyID0gKChpbnQ4X3QpIHBSYXdEYXRhc2V0T3BMb29wW2lkeExdLnB3clBkZ1swXVswXSArCi0JCQkgICAgKGludDhfdCkgcFJhd0RhdGFzZXRPcExvb3BbaWR4Ul0ucHdyUGRnWzBdWzBdKS8yOworCQkJIChpbnQ4X3QpIHBSYXdEYXRhc2V0T3BMb29wW2lkeFJdLnB3clBkZ1swXVswXSkvMjsKIAl9CiAKIH0KQEAgLTQwOSwxNiArNDEwLDIyIEBACiAJdTMyIHRtcFZhbDsKIAl1MzIgYTsKIAorCS8qIEVuYWJsZSBPTFBDIGZvciBjaGFpbiAwICovCisKIAl0bXBWYWwgPSBSRUdfUkVBRChhaCwgMHhhMjcwKTsKIAl0bXBWYWwgPSB0bXBWYWwgJiAweEZDRkZGRkZGOwogCXRtcFZhbCA9IHRtcFZhbCB8ICgweDMgPDwgMjQpOwogCVJFR19XUklURShhaCwgMHhhMjcwLCB0bXBWYWwpOwogCisJLyogRW5hYmxlIE9MUEMgZm9yIGNoYWluIDEgKi8KKwogCXRtcFZhbCA9IFJFR19SRUFEKGFoLCAweGIyNzApOwogCXRtcFZhbCA9IHRtcFZhbCAmIDB4RkNGRkZGRkY7CiAJdG1wVmFsID0gdG1wVmFsIHwgKDB4MyA8PCAyNCk7CiAJUkVHX1dSSVRFKGFoLCAweGIyNzAsIHRtcFZhbCk7CiAKKwkvKiBXcml0ZSB0aGUgT0xQQyByZWYgcG93ZXIgZm9yIGNoYWluIDAgKi8KKwogCWlmIChjaGFpbiA9PSAwKSB7CiAJCXRtcFZhbCA9IFJFR19SRUFEKGFoLCAweGEzOTgpOwogCQl0bXBWYWwgPSB0bXBWYWwgJiAweGZmMDBmZmZmOwpAQCAtNDI3LDYgKzQzNCw4IEBACiAJCVJFR19XUklURShhaCwgMHhhMzk4LCB0bXBWYWwpOwogCX0KIAorCS8qIFdyaXRlIHRoZSBPTFBDIHJlZiBwb3dlciBmb3IgY2hhaW4gMSAqLworCiAJaWYgKGNoYWluID09IDEpIHsKIAkJdG1wVmFsID0gUkVHX1JFQUQoYWgsIDB4YjM5OCk7CiAJCXRtcFZhbCA9IHRtcFZhbCAmIDB4ZmYwMGZmZmY7CkBAIC00MzYsMjggKzQ0NSwyOCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X0FSOTI4N19wb3dlcl9jYWxfdGFibGUoc3RydWN0IGF0aF9odyAqYWgsCitzdGF0aWMgdm9pZCBhdGg5a19od19zZXRfYXI5Mjg3X3Bvd2VyX2NhbF90YWJsZShzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkJCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAogCQkJCQkJaW50MTZfdCAqcFR4UG93ZXJJbmRleE9mZnNldCkKIHsKLQlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIAlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXFfYXI5Mjg3ICpwUmF3RGF0YXNldDsKIAlzdHJ1Y3QgY2FsX2RhdGFfb3BfbG9vcF9hcjkyODcgKnBSYXdEYXRhc2V0T3Blbkxvb3A7Ci0JdTggICpwQ2FsQkNoYW5zID0gTlVMTDsKKwl1OCAqcENhbEJDaGFucyA9IE5VTEw7CiAJdTE2IHBkR2Fpbk92ZXJsYXBfdDI7Ci0JdTggIHBkYWRjVmFsdWVzW0FSOTI4N19OVU1fUERBRENfVkFMVUVTXTsKKwl1OCBwZGFkY1ZhbHVlc1tBUjkyODdfTlVNX1BEQURDX1ZBTFVFU107CiAJdTE2IGdhaW5Cb3VuZGFyaWVzW0FSOTI4N19QRF9HQUlOU19JTl9NQVNLXTsKIAl1MTYgbnVtUGllcnMgPSAwLCBpLCBqOwotCWludDE2X3QgIHRNaW5DYWxQb3dlcjsKIAl1MTYgbnVtWHBkR2FpbiwgeHBkTWFzazsKIAl1MTYgeHBkR2FpblZhbHVlc1tBUjkyODdfTlVNX1BEX0dBSU5TXSA9IHswLCAwLCAwLCAwfTsKLQl1MzIgcmVnMzIsIHJlZ09mZnNldCwgcmVnQ2hhaW5PZmZzZXQ7Ci0JaW50MTZfdCAgIG1vZGFsSWR4LCBkaWZmID0gMDsKKwl1MzIgcmVnMzIsIHJlZ09mZnNldCwgcmVnQ2hhaW5PZmZzZXQsIHJlZ3ZhbDsKKwlpbnQxNl90IG1vZGFsSWR4LCBkaWZmID0gMDsKIAlzdHJ1Y3QgYXI5Mjg3X2VlcHJvbSAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5tYXA5Mjg3OworCiAJbW9kYWxJZHggPSBJU19DSEFOXzJHSFooY2hhbikgPyAxIDogMDsKIAl4cGRNYXNrID0gcEVlcERhdGEtPm1vZGFsSGVhZGVyLnhwZEdhaW47CisKIAlpZiAoKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjkyODdfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQotCQkJQVI5Mjg3X0VFUF9NSU5PUl9WRVJfMikKKwkgICAgQVI5Mjg3X0VFUF9NSU5PUl9WRVJfMikKIAkJcGRHYWluT3ZlcmxhcF90MiA9IHBFZXBEYXRhLT5tb2RhbEhlYWRlci5wZEdhaW5PdmVybGFwOwogCWVsc2UKIAkJcGRHYWluT3ZlcmxhcF90MiA9ICh1MTYpKE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfVFBDUkc1KSwKQEAgLTQ2NiwxNSArNDc1LDE2IEBACiAJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgewogCQlwQ2FsQkNoYW5zID0gcEVlcERhdGEtPmNhbEZyZXFQaWVyMkc7CiAJCW51bVBpZXJzID0gQVI5Mjg3X05VTV8yR19DQUxfUElFUlM7Ci0JCWlmIChhdGg5a19od19BUjkyODdfZ2V0X2VlcHJvbShhaCwgRUVQX09MX1BXUkNUUkwpKSB7CisJCWlmIChhdGg5a19od19hcjkyODdfZ2V0X2VlcHJvbShhaCwgRUVQX09MX1BXUkNUUkwpKSB7CiAJCQlwUmF3RGF0YXNldE9wZW5Mb29wID0KLQkJCQkoc3RydWN0IGNhbF9kYXRhX29wX2xvb3BfYXI5Mjg3ICopCi0JCQkJcEVlcERhdGEtPmNhbFBpZXJEYXRhMkdbMF07CisJCQkoc3RydWN0IGNhbF9kYXRhX29wX2xvb3BfYXI5Mjg3ICopcEVlcERhdGEtPmNhbFBpZXJEYXRhMkdbMF07CiAJCQlhaC0+aW5pdFBEQURDID0gcFJhd0RhdGFzZXRPcGVuTG9vcC0+dnBkUGRnWzBdWzBdOwogCQl9CiAJfQogCiAJbnVtWHBkR2FpbiA9IDA7CisKKwkvKiBDYWxjdWxhdGUgdGhlIHZhbHVlIG9mIHhwZGdhaW5zIGZyb20gdGhlIHhwZEdhaW4gTWFzayAqLwogCWZvciAoaSA9IDE7IGkgPD0gQVI5Mjg3X1BEX0dBSU5TX0lOX01BU0s7IGkrKykgewogCQlpZiAoKHhwZE1hc2sgPj4gKEFSOTI4N19QRF9HQUlOU19JTl9NQVNLIC0gaSkpICYgMSkgewogCQkJaWYgKG51bVhwZEdhaW4gPj0gQVI5Mjg3X05VTV9QRF9HQUlOUykKQEAgLTQ5Niw5OSArNTA2LDc5IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVI5Mjg3X01BWF9DSEFJTlM7IGkrKykJewogCQlyZWdDaGFpbk9mZnNldCA9IGkgKiAweDEwMDA7CisKIAkJaWYgKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnR4TWFzayAmICgxIDw8IGkpKSB7Ci0JCQlwUmF3RGF0YXNldE9wZW5Mb29wID0gKHN0cnVjdCBjYWxfZGF0YV9vcF9sb29wX2FyOTI4NyAqKQotCQkJCQkgICAgICAgcEVlcERhdGEtPmNhbFBpZXJEYXRhMkdbaV07Ci0JCQlpZiAoYXRoOWtfaHdfQVI5Mjg3X2dldF9lZXByb20oYWgsIEVFUF9PTF9QV1JDVFJMKSkgeworCQkJcFJhd0RhdGFzZXRPcGVuTG9vcCA9CisJCQkoc3RydWN0IGNhbF9kYXRhX29wX2xvb3BfYXI5Mjg3ICopcEVlcERhdGEtPmNhbFBpZXJEYXRhMkdbaV07CisKKwkJCWlmIChhdGg5a19od19hcjkyODdfZ2V0X2VlcHJvbShhaCwgRUVQX09MX1BXUkNUUkwpKSB7CiAJCQkJaW50OF90IHR4UG93ZXI7CiAJCQkJYXI5Mjg3X2VlcHJvbV9nZXRfdHhfZ2Fpbl9pbmRleChhaCwgY2hhbiwKLQkJCQkJCQkgIHBSYXdEYXRhc2V0T3Blbkxvb3AsCi0JCQkJCQkJICBwQ2FsQkNoYW5zLCBudW1QaWVycywKLQkJCQkJCQkgICZ0eFBvd2VyKTsKKwkJCQkJCQlwUmF3RGF0YXNldE9wZW5Mb29wLAorCQkJCQkJCXBDYWxCQ2hhbnMsIG51bVBpZXJzLAorCQkJCQkJCSZ0eFBvd2VyKTsKIAkJCQlhcjkyODdfZWVwcm9tX29scGNfc2V0X3BkYWRjcyhhaCwgdHhQb3dlciwgaSk7CiAJCQl9IGVsc2UgewogCQkJCXBSYXdEYXRhc2V0ID0KIAkJCQkJKHN0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcV9hcjkyODcgKikKIAkJCQkJcEVlcERhdGEtPmNhbFBpZXJEYXRhMkdbaV07Ci0JCQkJYXRoOWtfaHdfZ2V0X0FSOTI4N19nYWluX2JvdW5kYXJpZXNfcGRhZGNzKAotCQkJCQkJICBhaCwgY2hhbiwgcFJhd0RhdGFzZXQsCi0JCQkJCQkgIHBDYWxCQ2hhbnMsIG51bVBpZXJzLAotCQkJCQkJICBwZEdhaW5PdmVybGFwX3QyLAotCQkJCQkJICAmdE1pbkNhbFBvd2VyLCBnYWluQm91bmRhcmllcywKLQkJCQkJCSAgcGRhZGNWYWx1ZXMsIG51bVhwZEdhaW4pOworCisJCQkJYXRoOWtfaHdfZ2V0X2FyOTI4N19nYWluX2JvdW5kYXJpZXNfcGRhZGNzKGFoLCBjaGFuLAorCQkJCQkJCSAgIHBSYXdEYXRhc2V0LAorCQkJCQkJCSAgIHBDYWxCQ2hhbnMsIG51bVBpZXJzLAorCQkJCQkJCSAgIHBkR2Fpbk92ZXJsYXBfdDIsCisJCQkJCQkJICAgZ2FpbkJvdW5kYXJpZXMsCisJCQkJCQkJICAgcGRhZGNWYWx1ZXMsCisJCQkJCQkJICAgbnVtWHBkR2Fpbik7CiAJCQl9CiAKIAkJCWlmIChpID09IDApIHsKLQkJCQlpZiAoIWF0aDlrX2h3X0FSOTI4N19nZXRfZWVwcm9tKAotCQkJCQkgICAgYWgsIEVFUF9PTF9QV1JDVFJMKSkgewotCQkJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9UUENSRzUgKwotCQkJCQkgIHJlZ0NoYWluT2Zmc2V0LAotCQkJCQkgIFNNKHBkR2Fpbk92ZXJsYXBfdDIsCi0JCQkJCSAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX09WRVJMQVApIHwKLQkJCQkJICBTTShnYWluQm91bmRhcmllc1swXSwKLQkJCQkJICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfMSkKLQkJCQkJICB8IFNNKGdhaW5Cb3VuZGFyaWVzWzFdLAotCQkJCQkgICAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzIpCi0JCQkJCSAgfCBTTShnYWluQm91bmRhcmllc1syXSwKLQkJCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV8zKQotCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbM10sCi0JCQkJCSAgICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfNCkpOworCQkJCWlmICghYXRoOWtfaHdfYXI5Mjg3X2dldF9lZXByb20oYWgsCisJCQkJCQkJRUVQX09MX1BXUkNUUkwpKSB7CisKKwkJCQkJcmVndmFsID0gU00ocGRHYWluT3ZlcmxhcF90MiwKKwkJCQkJCSAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fT1ZFUkxBUCkKKwkJCQkJCXwgU00oZ2FpbkJvdW5kYXJpZXNbMF0sCisJCQkJCQkgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV8xKQorCQkJCQkJfCBTTShnYWluQm91bmRhcmllc1sxXSwKKwkJCQkJCSAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzIpCisJCQkJCQl8IFNNKGdhaW5Cb3VuZGFyaWVzWzJdLAorCQkJCQkJICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfMykKKwkJCQkJCXwgU00oZ2FpbkJvdW5kYXJpZXNbM10sCisJCQkJCQkgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV80KTsKKworCQkJCQlSRUdfV1JJVEUoYWgsCisJCQkJCQkgIEFSX1BIWV9UUENSRzUgKyByZWdDaGFpbk9mZnNldCwKKwkJCQkJCSAgcmVndmFsKTsKIAkJCQl9CiAJCQl9CiAKIAkJCWlmICgoaW50MzJfdClBUjkyODdfUFdSX1RBQkxFX09GRlNFVF9EQiAhPQotCQkJCSAgICAgcEVlcERhdGEtPmJhc2VFZXBIZWFkZXIucHdyVGFibGVPZmZzZXQpIHsKLQkJCQlkaWZmID0gKHUxNikKLQkJCQkgICAgICAgKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnB3clRhYmxlT2Zmc2V0Ci0JCQkJCS0gKGludDMyX3QpQVI5Mjg3X1BXUl9UQUJMRV9PRkZTRVRfREIpOworCQkJICAgIHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnB3clRhYmxlT2Zmc2V0KSB7CisJCQkJZGlmZiA9ICh1MTYpKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnB3clRhYmxlT2Zmc2V0IC0KKwkJCQkJICAgICAoaW50MzJfdClBUjkyODdfUFdSX1RBQkxFX09GRlNFVF9EQik7CiAJCQkJZGlmZiAqPSAyOwogCi0JCQkJZm9yIChqID0gMDsKLQkJCQkgICAgIGogPCAoKHUxNilBUjkyODdfTlVNX1BEQURDX1ZBTFVFUy1kaWZmKTsKLQkJCQkgICAgIGorKykKKwkJCQlmb3IgKGogPSAwOyBqIDwgKCh1MTYpQVI5Mjg3X05VTV9QREFEQ19WQUxVRVMtZGlmZik7IGorKykKIAkJCQkJcGRhZGNWYWx1ZXNbal0gPSBwZGFkY1ZhbHVlc1tqK2RpZmZdOwogCiAJCQkJZm9yIChqID0gKHUxNikoQVI5Mjg3X05VTV9QREFEQ19WQUxVRVMtZGlmZik7CiAJCQkJICAgICBqIDwgQVI5Mjg3X05VTV9QREFEQ19WQUxVRVM7IGorKykKIAkJCQkJcGRhZGNWYWx1ZXNbal0gPQotCQkJCQkgIHBkYWRjVmFsdWVzWwotCQkJCQkgIEFSOTI4N19OVU1fUERBRENfVkFMVUVTLWRpZmZdOworCQkJCQkgIHBkYWRjVmFsdWVzW0FSOTI4N19OVU1fUERBRENfVkFMVUVTLWRpZmZdOwogCQkJfQogCi0JCQlpZiAoIWF0aDlrX2h3X0FSOTI4N19nZXRfZWVwcm9tKGFoLCBFRVBfT0xfUFdSQ1RSTCkpIHsKLQkJCQlyZWdPZmZzZXQgPSBBUl9QSFlfQkFTRSArICg2NzIgPDwgMikgKwotCQkJCQkJCSAgIHJlZ0NoYWluT2Zmc2V0OworCQkJaWYgKCFhdGg5a19od19hcjkyODdfZ2V0X2VlcHJvbShhaCwgRUVQX09MX1BXUkNUUkwpKSB7CisJCQkJcmVnT2Zmc2V0ID0gQVJfUEhZX0JBU0UgKworCQkJCQkoNjcyIDw8IDIpICsgcmVnQ2hhaW5PZmZzZXQ7CisKIAkJCQlmb3IgKGogPSAwOyBqIDwgMzI7IGorKykgewotCQkJCQlyZWczMiA9ICgocGRhZGNWYWx1ZXNbNCpqICsgMF0KLQkJCQkJCSAgJiAweEZGKSA8PCAwKSAgfAotCQkJCQkJKChwZGFkY1ZhbHVlc1s0KmogKyAxXQotCQkJCQkJICAmIDB4RkYpIDw8IDgpICB8Ci0JCQkJCQkoKHBkYWRjVmFsdWVzWzQqaiArIDJdCi0JCQkJCQkgICYgMHhGRikgPDwgMTYpIHwKLQkJCQkJCSgocGRhZGNWYWx1ZXNbNCpqICsgM10KLQkJCQkJCSAgJiAweEZGKSA8PCAyNCkgOworCQkJCQlyZWczMiA9ICgocGRhZGNWYWx1ZXNbNCpqICsgMF0gJiAweEZGKSA8PCAwKQorCQkJCQkJfCAoKHBkYWRjVmFsdWVzWzQqaiArIDFdICYgMHhGRikgPDwgOCkKKwkJCQkJCXwgKChwZGFkY1ZhbHVlc1s0KmogKyAyXSAmIDB4RkYpIDw8IDE2KQorCQkJCQkJfCAoKHBkYWRjVmFsdWVzWzQqaiArIDNdICYgMHhGRikgPDwgMjQpOworCiAJCQkJCVJFR19XUklURShhaCwgcmVnT2Zmc2V0LCByZWczMik7Ci0KLQkJCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19FRVBST00sCi0JCQkJCQkgICJQREFEQyAoJWQsJTR4KTogJTQuNHggIgotCQkJCQkJICAiJTguOHhcbiIsCi0JCQkJCQkgIGksIHJlZ0NoYWluT2Zmc2V0LCByZWdPZmZzZXQsCi0JCQkJCQkgIHJlZzMyKTsKLQotCQkJCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKLQkJCQkJCSAgIlBEQURDOiBDaGFpbiAlZCB8ICIKLQkJCQkJCSAgIlBEQURDICUzZCBWYWx1ZSAlM2QgfCAiCi0JCQkJCQkgICJQREFEQyAlM2QgVmFsdWUgJTNkIHwgIgotCQkJCQkJICAiUERBREMgJTNkIFZhbHVlICUzZCB8ICIKLQkJCQkJCSAgIlBEQURDICUzZCBWYWx1ZSAlM2QgfFxuIiwKLQkJCQkJCSAgaSwgNCAqIGosIHBkYWRjVmFsdWVzWzQgKiBqXSwKLQkJCQkJCSAgNCAqIGogKyAxLAotCQkJCQkJICBwZGFkY1ZhbHVlc1s0ICogaiArIDFdLAotCQkJCQkJICA0ICogaiArIDIsCi0JCQkJCQkgIHBkYWRjVmFsdWVzWzQgKiBqICsgMl0sCi0JCQkJCQkgIDQgKiBqICsgMywKLQkJCQkJCSAgcGRhZGNWYWx1ZXNbNCAqIGogKyAzXSk7Ci0KIAkJCQkJcmVnT2Zmc2V0ICs9IDQ7CiAJCQkJfQogCQkJfQpAQCAtNTk4LDMwICs1ODgsNDUgQEAKIAkqcFR4UG93ZXJJbmRleE9mZnNldCA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF9BUjkyODdfcG93ZXJfcGVyX3JhdGVfdGFibGUoc3RydWN0IGF0aF9odyAqYWgsCi0JCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLCBpbnQxNl90ICpyYXRlc0FycmF5LCB1MTYgY2ZnQ3RsLAotCQl1MTYgQW50ZW5uYVJlZHVjdGlvbiwgdTE2IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAotCQl1MTYgcG93ZXJMaW1pdCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF9hcjkyODdfcG93ZXJfcGVyX3JhdGVfdGFibGUoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJCQkgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorCQkJCQkJICAgICBpbnQxNl90ICpyYXRlc0FycmF5LAorCQkJCQkJICAgICB1MTYgY2ZnQ3RsLAorCQkJCQkJICAgICB1MTYgQW50ZW5uYVJlZHVjdGlvbiwKKwkJCQkJCSAgICAgdTE2IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAorCQkJCQkJICAgICB1MTYgcG93ZXJMaW1pdCkKIHsKKyNkZWZpbmUgQ01QX0NUTCBcCisJKCgoY2ZnQ3RsICYgfkNUTF9NT0RFX00pIHwgKHBDdGxNb2RlW2N0bE1vZGVdICYgQ1RMX01PREVfTSkpID09IFwKKwkgcEVlcERhdGEtPmN0bEluZGV4W2ldKQorCisjZGVmaW5lIENNUF9OT19DVEwgXAorCSgoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSB8IChwQ3RsTW9kZVtjdGxNb2RlXSAmIENUTF9NT0RFX00pKSA9PSBcCisJICgocEVlcERhdGEtPmN0bEluZGV4W2ldICYgQ1RMX01PREVfTSkgfCBTRF9OT19DVEwpKQorCiAjZGVmaW5lIFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVFdPX0NIQUlOICAgICA2CiAjZGVmaW5lIFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVEhSRUVfQ0hBSU4gICAxMAorCiAJc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWd1bGF0b3J5ID0gYXRoOWtfaHdfcmVndWxhdG9yeShhaCk7CiAJdTE2IHR3aWNlTWF4RWRnZVBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOwogCXN0YXRpYyBjb25zdCB1MTYgdHBTY2FsZVJlZHVjdGlvblRhYmxlWzVdID0KIAkJeyAwLCAzLCA2LCA5LCBBUjU0MTZfTUFYX1JBVEVfUE9XRVIgfTsKIAlpbnQgaTsKLQlpbnQxNl90ICB0d2ljZUxhcmdlc3RBbnRlbm5hOworCWludDE2X3QgdHdpY2VMYXJnZXN0QW50ZW5uYTsKIAlzdHJ1Y3QgY2FsX2N0bF9kYXRhX2FyOTI4NyAqcmVwOwogCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyB0YXJnZXRQb3dlck9mZG0gPSB7MCwgezAsIDAsIDAsIDB9IH0sCiAJCQkJICAgIHRhcmdldFBvd2VyQ2NrID0gezAsIHswLCAwLCAwLCAwfSB9OwogCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyB0YXJnZXRQb3dlck9mZG1FeHQgPSB7MCwgezAsIDAsIDAsIDB9IH0sCiAJCQkJICAgIHRhcmdldFBvd2VyQ2NrRXh0ID0gezAsIHswLCAwLCAwLCAwfSB9OwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0ICB0YXJnZXRQb3dlckh0MjAsCisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQgdGFyZ2V0UG93ZXJIdDIwLAogCQkJCSAgICB0YXJnZXRQb3dlckh0NDAgPSB7MCwgezAsIDAsIDAsIDB9IH07CiAJdTE2IHNjYWxlZFBvd2VyID0gMCwgbWluQ3RsUG93ZXIsIG1heFJlZ0FsbG93ZWRQb3dlcjsKLQl1MTYgY3RsTW9kZXNGb3IxMWdbXSA9Ci0JCXtDVExfMTFCLCBDVExfMTFHLCBDVExfMkdIVDIwLAotCQkgQ1RMXzExQl9FWFQsIENUTF8xMUdfRVhULCBDVExfMkdIVDQwfTsKKwl1MTYgY3RsTW9kZXNGb3IxMWdbXSA9IHtDVExfMTFCLAorCQkJCUNUTF8xMUcsCisJCQkJQ1RMXzJHSFQyMCwKKwkJCQlDVExfMTFCX0VYVCwKKwkJCQlDVExfMTFHX0VYVCwKKwkJCQlDVExfMkdIVDQwfTsKIAl1MTYgbnVtQ3RsTW9kZXMgPSAwLCAqcEN0bE1vZGUgPSBOVUxMLCBjdGxNb2RlLCBmcmVxOwogCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKIAlpbnQgdHhfY2hhaW5tYXNrOwpAQCAtNjMxLDE5ICs2MzYsMjggQEAKIAogCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKIAorCS8qIENvbXB1dGUgVHhQb3dlciByZWR1Y3Rpb24gZHVlIHRvIEFudGVubmEgR2FpbiAqLwogCXR3aWNlTGFyZ2VzdEFudGVubmEgPSBtYXgocEVlcERhdGEtPm1vZGFsSGVhZGVyLmFudGVubmFHYWluQ2hbMF0sCiAJCQkJICBwRWVwRGF0YS0+bW9kYWxIZWFkZXIuYW50ZW5uYUdhaW5DaFsxXSk7CisJdHdpY2VMYXJnZXN0QW50ZW5uYSA9IChpbnQxNl90KW1pbigoQW50ZW5uYVJlZHVjdGlvbikgLQorCQkJCQkgICB0d2ljZUxhcmdlc3RBbnRlbm5hLCAwKTsKIAotCXR3aWNlTGFyZ2VzdEFudGVubmEgPSAgKGludDE2X3QpbWluKChBbnRlbm5hUmVkdWN0aW9uKSAtCi0JCQkJCSAgICB0d2ljZUxhcmdlc3RBbnRlbm5hLCAwKTsKLQorCS8qCisJICogc2NhbGVkUG93ZXIgaXMgdGhlIG1pbmltdW0gb2YgdGhlIHVzZXIgaW5wdXQgcG93ZXIgbGV2ZWwKKwkgKiBhbmQgdGhlIHJlZ3VsYXRvcnkgYWxsb3dlZCBwb3dlciBsZXZlbC4KKwkgKi8KIAltYXhSZWdBbGxvd2VkUG93ZXIgPSB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciArIHR3aWNlTGFyZ2VzdEFudGVubmE7CisKIAlpZiAocmVndWxhdG9yeS0+dHBfc2NhbGUgIT0gQVRIOUtfVFBfU0NBTEVfTUFYKQogCQltYXhSZWdBbGxvd2VkUG93ZXIgLT0KIAkJCSh0cFNjYWxlUmVkdWN0aW9uVGFibGVbKHJlZ3VsYXRvcnktPnRwX3NjYWxlKV0gKiAyKTsKIAogCXNjYWxlZFBvd2VyID0gbWluKHBvd2VyTGltaXQsIG1heFJlZ0FsbG93ZWRQb3dlcik7CiAKKwkvKgorCSAqIFJlZHVjZSBzY2FsZWQgUG93ZXIgYnkgbnVtYmVyIG9mIGNoYWlucyBhY3RpdmUKKwkgKiB0byBnZXQgdGhlIHBlciBjaGFpbiB0eCBwb3dlciBsZXZlbC4KKwkgKi8KIAlzd2l0Y2ggKGFyNTQxNl9nZXRfbnR4Y2hhaW5zKHR4X2NoYWlubWFzaykpIHsKIAljYXNlIDE6CiAJCWJyZWFrOwpAQCAtNjU2LDkgKzY3MCwxNCBAQAogCX0KIAlzY2FsZWRQb3dlciA9IG1heCgodTE2KTAsIHNjYWxlZFBvd2VyKTsKIAorCS8qCisJICogR2V0IFRYIHBvd2VyIGZyb20gRUVQUk9NLgorCSAqLwogCWlmIChJU19DSEFOXzJHSFooY2hhbikpCXsKKwkJLyogQ1RMXzExQiwgQ1RMXzExRywgQ1RMXzJHSFQyMCAqLwogCQludW1DdGxNb2RlcyA9CiAJCQlBUlJBWV9TSVpFKGN0bE1vZGVzRm9yMTFnKSAtIFNVQl9OVU1fQ1RMX01PREVTX0FUXzJHXzQwOworCiAJCXBDdGxNb2RlID0gY3RsTW9kZXNGb3IxMWc7CiAKIAkJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLApAQCAtNjc1LDYgKzY5NCw3IEBACiAJCQkJCSAgICZ0YXJnZXRQb3dlckh0MjAsIDgsIGZhbHNlKTsKIAogCQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKQl7CisJCQkvKiBBbGwgMkcgQ1RMcyAqLwogCQkJbnVtQ3RsTW9kZXMgPSBBUlJBWV9TSVpFKGN0bE1vZGVzRm9yMTFnKTsKIAkJCWF0aDlrX2h3X2dldF90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAogCQkJCQkJICAgcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkdIVDQwLApAQCAtNjkyLDggKzcxMiw5IEBACiAJfQogCiAJZm9yIChjdGxNb2RlID0gMDsgY3RsTW9kZSA8IG51bUN0bE1vZGVzOyBjdGxNb2RlKyspIHsKLQkJYm9vbCBpc0h0NDBDdGxNb2RlID0gKHBDdGxNb2RlW2N0bE1vZGVdID09IENUTF81R0hUNDApIHx8Ci0JCQkJICAgICAocEN0bE1vZGVbY3RsTW9kZV0gPT0gQ1RMXzJHSFQ0MCk7CisJCWJvb2wgaXNIdDQwQ3RsTW9kZSA9CisJCQkocEN0bE1vZGVbY3RsTW9kZV0gPT0gQ1RMXzJHSFQ0MCkgPyB0cnVlIDogZmFsc2U7CisKIAkJaWYgKGlzSHQ0MEN0bE1vZGUpCiAJCQlmcmVxID0gY2VudGVycy5zeW50aF9jZW50ZXI7CiAJCWVsc2UgaWYgKHBDdGxNb2RlW2N0bE1vZGVdICYgRVhUX0FERElUSVZFKQpAQCAtNzAxLDMxICs3MjIsMjggQEAKIAkJZWxzZQogCQkJZnJlcSA9IGNlbnRlcnMuY3RsX2NlbnRlcjsKIAotCQlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSA9PSAxNCAmJgotCQkgICAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSA8PSAyKQotCQkJdHdpY2VNYXhFZGdlUG93ZXIgPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7Ci0KKwkJLyogV2FsayB0aHJvdWdoIHRoZSBDVEwgaW5kaWNlcyBzdG9yZWQgaW4gRUVQUk9NICovCiAJCWZvciAoaSA9IDA7IChpIDwgQVI5Mjg3X05VTV9DVExTKSAmJiBwRWVwRGF0YS0+Y3RsSW5kZXhbaV07IGkrKykgewotCQkJaWYgKCgoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSB8Ci0JCQkgICAgICAocEN0bE1vZGVbY3RsTW9kZV0gJiBDVExfTU9ERV9NKSkgPT0KLQkJCSAgICAgcEVlcERhdGEtPmN0bEluZGV4W2ldKSB8fAotCQkJICAgICgoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSB8Ci0JCQkgICAgICAocEN0bE1vZGVbY3RsTW9kZV0gJiBDVExfTU9ERV9NKSkgPT0KLQkJCSAgICAgKChwRWVwRGF0YS0+Y3RsSW5kZXhbaV0gJgotCQkJICAgICAgIENUTF9NT0RFX00pIHwgU0RfTk9fQ1RMKSkpIHsKKwkJCXN0cnVjdCBjYWxfY3RsX2VkZ2VzICpwUmRFZGdlc1Bvd2VyOwogCisJCQkvKgorCQkJICogQ29tcGFyZSB0ZXN0IGdyb3VwIGZyb20gcmVndWxhdG9yeSBjaGFubmVsIGxpc3QKKwkJCSAqIHdpdGggdGVzdCBtb2RlIGZyb20gcEN0bE1vZGUgbGlzdAorCQkJICovCisJCQlpZiAoQ01QX0NUTCB8fCBDTVBfTk9fQ1RMKSB7CiAJCQkJcmVwID0gJihwRWVwRGF0YS0+Y3RsRGF0YVtpXSk7Ci0JCQkJdHdpY2VNaW5FZGdlUG93ZXIgPSBhdGg5a19od19nZXRfbWF4X2VkZ2VfcG93ZXIoCi0JCQkJICAgIGZyZXEsCi0JCQkJICAgIHJlcC0+Y3RsRWRnZXNbYXI1NDE2X2dldF9udHhjaGFpbnMoCi0JCQkJICAgIHR4X2NoYWlubWFzaykgLSAxXSwKLQkJCQkgICAgSVNfQ0hBTl8yR0haKGNoYW4pLCBBUjU0MTZfTlVNX0JBTkRfRURHRVMpOworCQkJCXBSZEVkZ2VzUG93ZXIgPQorCQkJCXJlcC0+Y3RsRWRnZXNbYXI1NDE2X2dldF9udHhjaGFpbnModHhfY2hhaW5tYXNrKSAtIDFdOwogCi0JCQkJaWYgKChjZmdDdGwgJiB+Q1RMX01PREVfTSkgPT0gU0RfTk9fQ1RMKQotCQkJCQl0d2ljZU1heEVkZ2VQb3dlciA9IG1pbigKLQkJCQkJCQkgICAgdHdpY2VNYXhFZGdlUG93ZXIsCi0JCQkJCQkJICAgIHR3aWNlTWluRWRnZVBvd2VyKTsKLQkJCQllbHNlIHsKKwkJCQl0d2ljZU1pbkVkZ2VQb3dlciA9IGF0aDlrX2h3X2dldF9tYXhfZWRnZV9wb3dlcihmcmVxLAorCQkJCQkJCQlwUmRFZGdlc1Bvd2VyLAorCQkJCQkJCQlJU19DSEFOXzJHSFooY2hhbiksCisJCQkJCQkJCUFSNTQxNl9OVU1fQkFORF9FREdFUyk7CisKKwkJCQlpZiAoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSA9PSBTRF9OT19DVEwpIHsKKwkJCQkJdHdpY2VNYXhFZGdlUG93ZXIgPSBtaW4odHdpY2VNYXhFZGdlUG93ZXIsCisJCQkJCQkJCXR3aWNlTWluRWRnZVBvd2VyKTsKKwkJCQl9IGVsc2UgewogCQkJCQl0d2ljZU1heEVkZ2VQb3dlciA9IHR3aWNlTWluRWRnZVBvd2VyOwogCQkJCQlicmVhazsKIAkJCQl9CkBAIC03MzQsNTUgKzc1Miw0OCBAQAogCiAJCW1pbkN0bFBvd2VyID0gKHU4KW1pbih0d2ljZU1heEVkZ2VQb3dlciwgc2NhbGVkUG93ZXIpOwogCisJCS8qIEFwcGx5IGN0bCBtb2RlIHRvIGNvcnJlY3QgdGFyZ2V0IHBvd2VyIHNldCAqLwogCQlzd2l0Y2ggKHBDdGxNb2RlW2N0bE1vZGVdKSB7CiAJCWNhc2UgQ1RMXzExQjoKLQkJCWZvciAoaSA9IDA7Ci0JCQkgICAgIGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VyQ2NrLnRQb3cyeCk7Ci0JCQkgICAgIGkrKykgewotCQkJCXRhcmdldFBvd2VyQ2NrLnRQb3cyeFtpXSA9ICh1OCltaW4oCi0JCQkJCSh1MTYpdGFyZ2V0UG93ZXJDY2sudFBvdzJ4W2ldLAotCQkJCQltaW5DdGxQb3dlcik7CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckNjay50UG93MngpOyBpKyspIHsKKwkJCQl0YXJnZXRQb3dlckNjay50UG93MnhbaV0gPQorCQkJCQkodTgpbWluKCh1MTYpdGFyZ2V0UG93ZXJDY2sudFBvdzJ4W2ldLAorCQkJCQkJbWluQ3RsUG93ZXIpOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgQ1RMXzExQToKIAkJY2FzZSBDVExfMTFHOgotCQkJZm9yIChpID0gMDsKLQkJCSAgICAgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJPZmRtLnRQb3cyeCk7Ci0JCQkgICAgIGkrKykgewotCQkJCXRhcmdldFBvd2VyT2ZkbS50UG93MnhbaV0gPSAodTgpbWluKAotCQkJCQkodTE2KXRhcmdldFBvd2VyT2ZkbS50UG93MnhbaV0sCi0JCQkJCW1pbkN0bFBvd2VyKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VyT2ZkbS50UG93MngpOyBpKyspIHsKKwkJCQl0YXJnZXRQb3dlck9mZG0udFBvdzJ4W2ldID0KKwkJCQkJKHU4KW1pbigodTE2KXRhcmdldFBvd2VyT2ZkbS50UG93MnhbaV0sCisJCQkJCQltaW5DdGxQb3dlcik7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBDVExfNUdIVDIwOgogCQljYXNlIENUTF8yR0hUMjA6Ci0JCQlmb3IgKGkgPSAwOwotCQkJICAgICBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckh0MjAudFBvdzJ4KTsKLQkJCSAgICAgaSsrKSB7Ci0JCQkJdGFyZ2V0UG93ZXJIdDIwLnRQb3cyeFtpXSA9ICh1OCltaW4oCi0JCQkJCSh1MTYpdGFyZ2V0UG93ZXJIdDIwLnRQb3cyeFtpXSwKLQkJCQkJbWluQ3RsUG93ZXIpOworCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDIwLnRQb3cyeCk7IGkrKykgeworCQkJCXRhcmdldFBvd2VySHQyMC50UG93MnhbaV0gPQorCQkJCQkodTgpbWluKCh1MTYpdGFyZ2V0UG93ZXJIdDIwLnRQb3cyeFtpXSwKKwkJCQkJCW1pbkN0bFBvd2VyKTsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIENUTF8xMUJfRVhUOgotCQkJdGFyZ2V0UG93ZXJDY2tFeHQudFBvdzJ4WzBdID0gKHU4KW1pbigKLQkJCQkgICAgKHUxNil0YXJnZXRQb3dlckNja0V4dC50UG93MnhbMF0sCi0JCQkJICAgIG1pbkN0bFBvd2VyKTsKKwkJCXRhcmdldFBvd2VyQ2NrRXh0LnRQb3cyeFswXSA9CisJCQkJKHU4KW1pbigodTE2KXRhcmdldFBvd2VyQ2NrRXh0LnRQb3cyeFswXSwKKwkJCQkJbWluQ3RsUG93ZXIpOwogCQkJYnJlYWs7CiAJCWNhc2UgQ1RMXzExQV9FWFQ6CiAJCWNhc2UgQ1RMXzExR19FWFQ6Ci0JCQl0YXJnZXRQb3dlck9mZG1FeHQudFBvdzJ4WzBdID0gKHU4KW1pbigKLQkJCQkgICAgKHUxNil0YXJnZXRQb3dlck9mZG1FeHQudFBvdzJ4WzBdLAotCQkJCSAgICBtaW5DdGxQb3dlcik7CisJCQl0YXJnZXRQb3dlck9mZG1FeHQudFBvdzJ4WzBdID0KKwkJCQkodTgpbWluKCh1MTYpdGFyZ2V0UG93ZXJPZmRtRXh0LnRQb3cyeFswXSwKKwkJCQkJbWluQ3RsUG93ZXIpOwogCQkJYnJlYWs7CiAJCWNhc2UgQ1RMXzVHSFQ0MDoKIAkJY2FzZSBDVExfMkdIVDQwOgotCQkJZm9yIChpID0gMDsKLQkJCSAgICAgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDQwLnRQb3cyeCk7Ci0JCQkgICAgIGkrKykgewotCQkJCXRhcmdldFBvd2VySHQ0MC50UG93MnhbaV0gPSAodTgpbWluKAotCQkJCQkodTE2KXRhcmdldFBvd2VySHQ0MC50UG93MnhbaV0sCi0JCQkJCW1pbkN0bFBvd2VyKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VySHQ0MC50UG93MngpOyBpKyspIHsKKwkJCQl0YXJnZXRQb3dlckh0NDAudFBvdzJ4W2ldID0KKwkJCQkJKHU4KW1pbigodTE2KXRhcmdldFBvd2VySHQ0MC50UG93MnhbaV0sCisJCQkJCQltaW5DdGxQb3dlcik7CiAJCQl9CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTc5MCwxMiArODAxLDEzIEBACiAJCX0KIAl9CiAKKwkvKiBOb3cgc2V0IHRoZSByYXRlcyBhcnJheSAqLworCiAJcmF0ZXNBcnJheVtyYXRlNm1iXSA9CiAJcmF0ZXNBcnJheVtyYXRlOW1iXSA9CiAJcmF0ZXNBcnJheVtyYXRlMTJtYl0gPQogCXJhdGVzQXJyYXlbcmF0ZTE4bWJdID0KLQlyYXRlc0FycmF5W3JhdGUyNG1iXSA9Ci0JdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFswXTsKKwlyYXRlc0FycmF5W3JhdGUyNG1iXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbMF07CiAKIAlyYXRlc0FycmF5W3JhdGUzNm1iXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbMV07CiAJcmF0ZXNBcnJheVtyYXRlNDhtYl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzJdOwpAQCAtODA3LDEyICs4MTksMTIgQEAKIAogCWlmIChJU19DSEFOXzJHSFooY2hhbikpCXsKIAkJcmF0ZXNBcnJheVtyYXRlMWxdID0gdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzBdOwotCQlyYXRlc0FycmF5W3JhdGUyc10gPSByYXRlc0FycmF5W3JhdGUybF0gPQotCQkJdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzFdOwotCQlyYXRlc0FycmF5W3JhdGU1XzVzXSA9IHJhdGVzQXJyYXlbcmF0ZTVfNWxdID0KLQkJCXRhcmdldFBvd2VyQ2NrLnRQb3cyeFsyXTsKLQkJcmF0ZXNBcnJheVtyYXRlMTFzXSA9IHJhdGVzQXJyYXlbcmF0ZTExbF0gPQotCQkJdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzNdOworCQlyYXRlc0FycmF5W3JhdGUyc10gPQorCQlyYXRlc0FycmF5W3JhdGUybF0gPSB0YXJnZXRQb3dlckNjay50UG93MnhbMV07CisJCXJhdGVzQXJyYXlbcmF0ZTVfNXNdID0KKwkJcmF0ZXNBcnJheVtyYXRlNV81bF0gPSB0YXJnZXRQb3dlckNjay50UG93MnhbMl07CisJCXJhdGVzQXJyYXlbcmF0ZTExc10gPQorCQlyYXRlc0FycmF5W3JhdGUxMWxdID0gdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzNdOwogCX0KIAlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKQl7CiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VySHQ0MC50UG93MngpOyBpKyspCkBAIC04MjEsMjggKzgzMywyOCBAQAogCQlyYXRlc0FycmF5W3JhdGVEdXBPZmRtXSA9IHRhcmdldFBvd2VySHQ0MC50UG93MnhbMF07CiAJCXJhdGVzQXJyYXlbcmF0ZUR1cENja10gID0gdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFswXTsKIAkJcmF0ZXNBcnJheVtyYXRlRXh0T2ZkbV0gPSB0YXJnZXRQb3dlck9mZG1FeHQudFBvdzJ4WzBdOworCiAJCWlmIChJU19DSEFOXzJHSFooY2hhbikpCiAJCQlyYXRlc0FycmF5W3JhdGVFeHRDY2tdID0gdGFyZ2V0UG93ZXJDY2tFeHQudFBvdzJ4WzBdOwogCX0KIAorI3VuZGVmIENNUF9DVEwKKyN1bmRlZiBDTVBfTk9fQ1RMCiAjdW5kZWYgUkVEVUNFX1NDQUxFRF9QT1dFUl9CWV9UV09fQ0hBSU4KICN1bmRlZiBSRURVQ0VfU0NBTEVEX1BPV0VSX0JZX1RIUkVFX0NIQUlOCiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X0FSOTI4N19zZXRfdHhwb3dlcihzdHJ1Y3QgYXRoX2h3ICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2FyOTI4N19zZXRfdHhwb3dlcihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sIHUxNiBjZmdDdGwsCiAJCQkJCXU4IHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKIAkJCQkJdTggdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCiAJCQkJCXU4IHBvd2VyTGltaXQpCiB7Ci0jZGVmaW5lIElOQ1JFQVNFX01BWFBPV19CWV9UV09fQ0hBSU4gICAgIDYKLSNkZWZpbmUgSU5DUkVBU0VfTUFYUE9XX0JZX1RIUkVFX0NIQUlOICAgMTAKLQlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIAlzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZ3VsYXRvcnkgPSBhdGg5a19od19yZWd1bGF0b3J5KGFoKTsKIAlzdHJ1Y3QgYXI5Mjg3X2VlcHJvbSAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5tYXA5Mjg3OwogCXN0cnVjdCBtb2RhbF9lZXBfYXI5Mjg3X2hlYWRlciAqcE1vZGFsID0gJnBFZXBEYXRhLT5tb2RhbEhlYWRlcjsKIAlpbnQxNl90IHJhdGVzQXJyYXlbQXI1NDE2UmF0ZVNpemVdOwotCWludDE2X3QgIHR4UG93ZXJJbmRleE9mZnNldCA9IDA7CisJaW50MTZfdCB0eFBvd2VySW5kZXhPZmZzZXQgPSAwOwogCXU4IGh0NDBQb3dlckluY0ZvclBkYWRjID0gMjsKIAlpbnQgaTsKIApAQCAtODUyLDEzICs4NjQsMTMgQEAKIAkgICAgQVI5Mjg3X0VFUF9NSU5PUl9WRVJfMikKIAkJaHQ0MFBvd2VySW5jRm9yUGRhZGMgPSBwTW9kYWwtPmh0NDBQb3dlckluY0ZvclBkYWRjOwogCi0JYXRoOWtfaHdfc2V0X0FSOTI4N19wb3dlcl9wZXJfcmF0ZV90YWJsZShhaCwgY2hhbiwKKwlhdGg5a19od19zZXRfYXI5Mjg3X3Bvd2VyX3Blcl9yYXRlX3RhYmxlKGFoLCBjaGFuLAogCQkJCQkJICZyYXRlc0FycmF5WzBdLCBjZmdDdGwsCiAJCQkJCQkgdHdpY2VBbnRlbm5hUmVkdWN0aW9uLAogCQkJCQkJIHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAogCQkJCQkJIHBvd2VyTGltaXQpOwogCi0JYXRoOWtfaHdfc2V0X0FSOTI4N19wb3dlcl9jYWxfdGFibGUoYWgsIGNoYW4sICZ0eFBvd2VySW5kZXhPZmZzZXQpOworCWF0aDlrX2h3X3NldF9hcjkyODdfcG93ZXJfY2FsX3RhYmxlKGFoLCBjaGFuLCAmdHhQb3dlckluZGV4T2Zmc2V0KTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhdGVzQXJyYXkpOyBpKyspIHsKIAkJcmF0ZXNBcnJheVtpXSA9IChpbnQxNl90KSh0eFBvd2VySW5kZXhPZmZzZXQgKyByYXRlc0FycmF5W2ldKTsKQEAgLTg3MSw2ICs4ODMsNyBAQAogCQkJcmF0ZXNBcnJheVtpXSAtPSBBUjkyODdfUFdSX1RBQkxFX09GRlNFVF9EQiAqIDI7CiAJfQogCisJLyogT0ZETSBwb3dlciBwZXIgcmF0ZSAqLwogCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUxLAogCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxOG1iXSwgMjQpCiAJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTJtYl0sIDE2KQpAQCAtODgzLDYgKzg5Niw3IEBACiAJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMzZtYl0sIDgpCiAJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMjRtYl0sIDApKTsKIAorCS8qIENDSyBwb3dlciBwZXIgcmF0ZSAqLwogCWlmIChJU19DSEFOXzJHSFooY2hhbikpCXsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTMsCiAJCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUyc10sIDI0KQpAQCAtODk2LDYgKzkxMCw3IEBACiAJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTVfNWxdLCAwKSk7CiAJfQogCisJLyogSFQyMCBwb3dlciBwZXIgcmF0ZSAqLwogCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU1LAogCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzNdLCAyNCkKIAkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzJdLCAxNikKQEAgLTkwOCw4ICs5MjMsOSBAQAogCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfNV0sIDgpCiAJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF80XSwgMCkpOwogCisJLyogSFQ0MCBwb3dlciBwZXIgcmF0ZSAqLwogCWlmIChJU19DSEFOX0hUNDAoY2hhbikpCXsKLQkJaWYgKGF0aDlrX2h3X0FSOTI4N19nZXRfZWVwcm9tKGFoLCBFRVBfT0xfUFdSQ1RSTCkpIHsKKwkJaWYgKGF0aDlrX2h3X2FyOTI4N19nZXRfZWVwcm9tKGFoLCBFRVBfT0xfUFdSQ1RSTCkpIHsKIAkJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU3LAogCQkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfM10sIDI0KQogCQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8yXSwgMTYpCkBAIC05NDMsNiArOTU5LDcgQEAKIAkJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMCkpOwogCQl9CiAKKwkJLyogRHVwL0V4dCBwb3dlciBwZXIgcmF0ZSAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFOSwKIAkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUV4dE9mZG1dLCAyNCkKIAkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRXh0Q2NrXSwgMTYpCkBAIC05NjAsMzcgKzk3NywyMCBAQAogCQkJcmF0ZXNBcnJheVtpXSArIEFSOTI4N19QV1JfVEFCTEVfT0ZGU0VUX0RCICogMjsKIAllbHNlCiAJCXJlZ3VsYXRvcnktPm1heF9wb3dlcl9sZXZlbCA9IHJhdGVzQXJyYXlbaV07Ci0KLQlzd2l0Y2ggKGFyNTQxNl9nZXRfbnR4Y2hhaW5zKGFoLT50eGNoYWlubWFzaykpIHsKLQljYXNlIDE6Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJcmVndWxhdG9yeS0+bWF4X3Bvd2VyX2xldmVsICs9Ci0JCQlJTkNSRUFTRV9NQVhQT1dfQllfVFdPX0NIQUlOOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCXJlZ3VsYXRvcnktPm1heF9wb3dlcl9sZXZlbCArPQotCQkJSU5DUkVBU0VfTUFYUE9XX0JZX1RIUkVFX0NIQUlOOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKLQkJCSAgIkludmFsaWQgY2hhaW5tYXNrIGNvbmZpZ3VyYXRpb25cbiIpOwotCQlicmVhazsKLQl9CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X0FSOTI4N19zZXRfYWRkYWMoc3RydWN0IGF0aF9odyAqYWgsCitzdGF0aWMgdm9pZCBhdGg5a19od19hcjkyODdfc2V0X2FkZGFjKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19BUjkyODdfc2V0X2JvYXJkX3ZhbHVlcyhzdHJ1Y3QgYXRoX2h3ICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2FyOTI4N19zZXRfYm9hcmRfdmFsdWVzKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCQkgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCXN0cnVjdCBhcjkyODdfZWVwcm9tICplZXAgPSAmYWgtPmVlcHJvbS5tYXA5Mjg3OwogCXN0cnVjdCBtb2RhbF9lZXBfYXI5Mjg3X2hlYWRlciAqcE1vZGFsID0gJmVlcC0+bW9kYWxIZWFkZXI7CiAJdTE2IGFudFdyaXRlc1tBUjkyODdfQU5UXzE2U107Ci0JdTMyIHJlZ0NoYWluT2Zmc2V0OworCXUzMiByZWdDaGFpbk9mZnNldCwgcmVndmFsOwogCXU4IHR4UnhBdHRlbkxvY2FsOwogCWludCBpLCBqLCBvZmZzZXRfbnVtOwogCkBAIC0xMDc3LDQyICsxMDc3LDM3IEBACiAJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0VYVF9DQ0EwLAogCQkgICAgICBBUl9QSFlfRVhUX0NDQTBfVEhSRVNINjIsIHBNb2RhbC0+dGhyZXNoNjIpOwogCi0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg3X0FOX1JGMkczX0NIMCwgQVI5Mjg3X0FOX1JGMkczX0RCMSwKLQkJCQkgIEFSOTI4N19BTl9SRjJHM19EQjFfUywgcE1vZGFsLT5kYjEpOwotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4N19BTl9SRjJHM19DSDAsIEFSOTI4N19BTl9SRjJHM19EQjIsCi0JCQkJICBBUjkyODdfQU5fUkYyRzNfREIyX1MsIHBNb2RhbC0+ZGIyKTsKLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODdfQU5fUkYyRzNfQ0gwLAotCQkJCSAgQVI5Mjg3X0FOX1JGMkczX09CX0NDSywKLQkJCQkgIEFSOTI4N19BTl9SRjJHM19PQl9DQ0tfUywgcE1vZGFsLT5vYl9jY2spOwotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4N19BTl9SRjJHM19DSDAsCi0JCQkJICBBUjkyODdfQU5fUkYyRzNfT0JfUFNLLAotCQkJCSAgQVI5Mjg3X0FOX1JGMkczX09CX1BTS19TLCBwTW9kYWwtPm9iX3Bzayk7Ci0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg3X0FOX1JGMkczX0NIMCwKLQkJCQkgIEFSOTI4N19BTl9SRjJHM19PQl9RQU0sCi0JCQkJICBBUjkyODdfQU5fUkYyRzNfT0JfUUFNX1MsIHBNb2RhbC0+b2JfcWFtKTsKLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODdfQU5fUkYyRzNfQ0gwLAotCQkJCSAgQVI5Mjg3X0FOX1JGMkczX09CX1BBTF9PRkYsCi0JCQkJICBBUjkyODdfQU5fUkYyRzNfT0JfUEFMX09GRl9TLAotCQkJCSAgcE1vZGFsLT5vYl9wYWxfb2ZmKTsKKwlyZWd2YWwgPSBSRUdfUkVBRChhaCwgQVI5Mjg3X0FOX1JGMkczX0NIMCk7CisJcmVndmFsICY9IH4oQVI5Mjg3X0FOX1JGMkczX0RCMSB8CisJCSAgICBBUjkyODdfQU5fUkYyRzNfREIyIHwKKwkJICAgIEFSOTI4N19BTl9SRjJHM19PQl9DQ0sgfAorCQkgICAgQVI5Mjg3X0FOX1JGMkczX09CX1BTSyB8CisJCSAgICBBUjkyODdfQU5fUkYyRzNfT0JfUUFNIHwKKwkJICAgIEFSOTI4N19BTl9SRjJHM19PQl9QQUxfT0ZGKTsKKwlyZWd2YWwgfD0gKFNNKHBNb2RhbC0+ZGIxLCBBUjkyODdfQU5fUkYyRzNfREIxKSB8CisJCSAgIFNNKHBNb2RhbC0+ZGIyLCBBUjkyODdfQU5fUkYyRzNfREIyKSB8CisJCSAgIFNNKHBNb2RhbC0+b2JfY2NrLCBBUjkyODdfQU5fUkYyRzNfT0JfQ0NLKSB8CisJCSAgIFNNKHBNb2RhbC0+b2JfcHNrLCBBUjkyODdfQU5fUkYyRzNfT0JfUFNLKSB8CisJCSAgIFNNKHBNb2RhbC0+b2JfcWFtLCBBUjkyODdfQU5fUkYyRzNfT0JfUUFNKSB8CisJCSAgIFNNKHBNb2RhbC0+b2JfcGFsX29mZiwgQVI5Mjg3X0FOX1JGMkczX09CX1BBTF9PRkYpKTsKIAotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4N19BTl9SRjJHM19DSDEsCi0JCQkJICBBUjkyODdfQU5fUkYyRzNfREIxLCBBUjkyODdfQU5fUkYyRzNfREIxX1MsCi0JCQkJICBwTW9kYWwtPmRiMSk7Ci0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg3X0FOX1JGMkczX0NIMSwgQVI5Mjg3X0FOX1JGMkczX0RCMiwKLQkJCQkgIEFSOTI4N19BTl9SRjJHM19EQjJfUywgcE1vZGFsLT5kYjIpOwotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4N19BTl9SRjJHM19DSDEsCi0JCQkJICBBUjkyODdfQU5fUkYyRzNfT0JfQ0NLLAotCQkJCSAgQVI5Mjg3X0FOX1JGMkczX09CX0NDS19TLCBwTW9kYWwtPm9iX2Njayk7Ci0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg3X0FOX1JGMkczX0NIMSwKLQkJCQkgIEFSOTI4N19BTl9SRjJHM19PQl9QU0ssCi0JCQkJICBBUjkyODdfQU5fUkYyRzNfT0JfUFNLX1MsIHBNb2RhbC0+b2JfcHNrKTsKLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODdfQU5fUkYyRzNfQ0gxLAotCQkJCSAgQVI5Mjg3X0FOX1JGMkczX09CX1FBTSwKLQkJCQkgIEFSOTI4N19BTl9SRjJHM19PQl9RQU1fUywgcE1vZGFsLT5vYl9xYW0pOwotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4N19BTl9SRjJHM19DSDEsCi0JCQkJICBBUjkyODdfQU5fUkYyRzNfT0JfUEFMX09GRiwKLQkJCQkgIEFSOTI4N19BTl9SRjJHM19PQl9QQUxfT0ZGX1MsCi0JCQkJICBwTW9kYWwtPm9iX3BhbF9vZmYpOworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9yZWd3cml0ZShhaCwgQVI5Mjg3X0FOX1JGMkczX0NIMCwgcmVndmFsKTsKKworCXJlZ3ZhbCA9IFJFR19SRUFEKGFoLCBBUjkyODdfQU5fUkYyRzNfQ0gxKTsKKwlyZWd2YWwgJj0gfihBUjkyODdfQU5fUkYyRzNfREIxIHwKKwkJICAgIEFSOTI4N19BTl9SRjJHM19EQjIgfAorCQkgICAgQVI5Mjg3X0FOX1JGMkczX09CX0NDSyB8CisJCSAgICBBUjkyODdfQU5fUkYyRzNfT0JfUFNLIHwKKwkJICAgIEFSOTI4N19BTl9SRjJHM19PQl9RQU0gfAorCQkgICAgQVI5Mjg3X0FOX1JGMkczX09CX1BBTF9PRkYpOworCXJlZ3ZhbCB8PSAoU00ocE1vZGFsLT5kYjEsIEFSOTI4N19BTl9SRjJHM19EQjEpIHwKKwkJICAgU00ocE1vZGFsLT5kYjIsIEFSOTI4N19BTl9SRjJHM19EQjIpIHwKKwkJICAgU00ocE1vZGFsLT5vYl9jY2ssIEFSOTI4N19BTl9SRjJHM19PQl9DQ0spIHwKKwkJICAgU00ocE1vZGFsLT5vYl9wc2ssIEFSOTI4N19BTl9SRjJHM19PQl9QU0spIHwKKwkJICAgU00ocE1vZGFsLT5vYl9xYW0sIEFSOTI4N19BTl9SRjJHM19PQl9RQU0pIHwKKwkJICAgU00ocE1vZGFsLT5vYl9wYWxfb2ZmLCBBUjkyODdfQU5fUkYyRzNfT0JfUEFMX09GRikpOworCisJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JlZ3dyaXRlKGFoLCBBUjkyODdfQU5fUkYyRzNfQ0gxLCByZWd2YWwpOwogCiAJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDIsCiAJCSAgICAgIEFSX1BIWV9UWF9FTkRfREFUQV9TVEFSVCwgcE1vZGFsLT50eEZyYW1lVG9EYXRhU3RhcnQpOwpAQCAtMTEyNSwyNiArMTEyMCwyNyBAQAogCQkJCSAgcE1vZGFsLT54cGFCaWFzTHZsKTsKIH0KIAotc3RhdGljIHU4IGF0aDlrX2h3X0FSOTI4N19nZXRfbnVtX2FudF9jb25maWcoc3RydWN0IGF0aF9odyAqYWgsCitzdGF0aWMgdTggYXRoOWtfaHdfYXI5Mjg3X2dldF9udW1fYW50X2NvbmZpZyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkJICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGZyZXFfYmFuZCkKIHsKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHUxNiBhdGg5a19od19BUjkyODdfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZyhzdHJ1Y3QgYXRoX2h3ICphaCwKK3N0YXRpYyB1MzIgYXRoOWtfaHdfYXI5Mjg3X2dldF9lZXByb21fYW50ZW5uYV9jZmcoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCXN0cnVjdCBhcjkyODdfZWVwcm9tICplZXAgPSAmYWgtPmVlcHJvbS5tYXA5Mjg3OwogCXN0cnVjdCBtb2RhbF9lZXBfYXI5Mjg3X2hlYWRlciAqcE1vZGFsID0gJmVlcC0+bW9kYWxIZWFkZXI7CiAKLQlyZXR1cm4gcE1vZGFsLT5hbnRDdHJsQ29tbW9uICYgMHhGRkZGOworCXJldHVybiBwTW9kYWwtPmFudEN0cmxDb21tb247CiB9CiAKLXN0YXRpYyB1MTYgYXRoOWtfaHdfQVI5Mjg3X2dldF9zcHVyX2NoYW5uZWwoc3RydWN0IGF0aF9odyAqYWgsCitzdGF0aWMgdTE2IGF0aDlrX2h3X2FyOTI4N19nZXRfc3B1cl9jaGFubmVsKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCQkgICAgdTE2IGksIGJvb2wgaXMyR0h6KQogewogI2RlZmluZSBFRVBfTUFQOTI4N19TUFVSQ0hBTiBcCiAJKGFoLT5lZXByb20ubWFwOTI4Ny5tb2RhbEhlYWRlci5zcHVyQ2hhbnNbaV0uc3B1ckNoYW4pCisKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIAl1MTYgc3B1cl92YWwgPSBBUl9OT19TUFVSOwogCkBAIC0xMTcxLDE1ICsxMTY3LDE1IEBACiB9CiAKIGNvbnN0IHN0cnVjdCBlZXByb21fb3BzIGVlcF9hcjkyODdfb3BzID0gewotCS5jaGVja19lZXByb20JCT0gYXRoOWtfaHdfQVI5Mjg3X2NoZWNrX2VlcHJvbSwKLQkuZ2V0X2VlcHJvbQkJPSBhdGg5a19od19BUjkyODdfZ2V0X2VlcHJvbSwKLQkuZmlsbF9lZXByb20JCT0gYXRoOWtfaHdfQVI5Mjg3X2ZpbGxfZWVwcm9tLAotCS5nZXRfZWVwcm9tX3ZlcgkJPSBhdGg5a19od19BUjkyODdfZ2V0X2VlcHJvbV92ZXIsCi0JLmdldF9lZXByb21fcmV2CQk9IGF0aDlrX2h3X0FSOTI4N19nZXRfZWVwcm9tX3JldiwKLQkuZ2V0X251bV9hbnRfY29uZmlnCT0gYXRoOWtfaHdfQVI5Mjg3X2dldF9udW1fYW50X2NvbmZpZywKLQkuZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZwk9IGF0aDlrX2h3X0FSOTI4N19nZXRfZWVwcm9tX2FudGVubmFfY2ZnLAotCS5zZXRfYm9hcmRfdmFsdWVzCT0gYXRoOWtfaHdfQVI5Mjg3X3NldF9ib2FyZF92YWx1ZXMsCi0JLnNldF9hZGRhYwkJPSBhdGg5a19od19BUjkyODdfc2V0X2FkZGFjLAotCS5zZXRfdHhwb3dlcgkJPSBhdGg5a19od19BUjkyODdfc2V0X3R4cG93ZXIsCi0JLmdldF9zcHVyX2NoYW5uZWwJPSBhdGg5a19od19BUjkyODdfZ2V0X3NwdXJfY2hhbm5lbAorCS5jaGVja19lZXByb20JCT0gYXRoOWtfaHdfYXI5Mjg3X2NoZWNrX2VlcHJvbSwKKwkuZ2V0X2VlcHJvbQkJPSBhdGg5a19od19hcjkyODdfZ2V0X2VlcHJvbSwKKwkuZmlsbF9lZXByb20JCT0gYXRoOWtfaHdfYXI5Mjg3X2ZpbGxfZWVwcm9tLAorCS5nZXRfZWVwcm9tX3ZlcgkJPSBhdGg5a19od19hcjkyODdfZ2V0X2VlcHJvbV92ZXIsCisJLmdldF9lZXByb21fcmV2CQk9IGF0aDlrX2h3X2FyOTI4N19nZXRfZWVwcm9tX3JldiwKKwkuZ2V0X251bV9hbnRfY29uZmlnCT0gYXRoOWtfaHdfYXI5Mjg3X2dldF9udW1fYW50X2NvbmZpZywKKwkuZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZwk9IGF0aDlrX2h3X2FyOTI4N19nZXRfZWVwcm9tX2FudGVubmFfY2ZnLAorCS5zZXRfYm9hcmRfdmFsdWVzCT0gYXRoOWtfaHdfYXI5Mjg3X3NldF9ib2FyZF92YWx1ZXMsCisJLnNldF9hZGRhYwkJPSBhdGg5a19od19hcjkyODdfc2V0X2FkZGFjLAorCS5zZXRfdHhwb3dlcgkJPSBhdGg5a19od19hcjkyODdfc2V0X3R4cG93ZXIsCisJLmdldF9zcHVyX2NoYW5uZWwJPSBhdGg5a19od19hcjkyODdfZ2V0X3NwdXJfY2hhbm5lbAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fZGVmLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tX2RlZi5jCmluZGV4IDdlMWVkNzhkLi5hZmEyYjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tX2RlZi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fZGVmLmMKQEAgLTU5Myw3ICs1OTMsNyBAQAogCQkJCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAogCQkJCXN0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcSAqcFJhd0RhdGFTZXQsCiAJCQkJdTggKmJDaGFucywgdTE2IGF2YWlsUGllcnMsCi0JCQkJdTE2IHRQZEdhaW5PdmVybGFwLCBpbnQxNl90ICpwTWluQ2FsUG93ZXIsCisJCQkJdTE2IHRQZEdhaW5PdmVybGFwLAogCQkJCXUxNiAqcFBkR2FpbkJvdW5kYXJpZXMsIHU4ICpwUERBRENWYWx1ZXMsCiAJCQkJdTE2IG51bVhwZEdhaW5zKQogewpAQCAtNjE3LDYgKzYxNyw3IEBACiAJaW50MTZfdCBtaW5EZWx0YSA9IDA7CiAJc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOwogCisJbWVtc2V0KCZtaW5Qd3JUNCwgMCwgQVI5Mjg3X05VTV9QRF9HQUlOUyk7CiAJYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOwogCiAJZm9yIChudW1QaWVycyA9IDA7IG51bVBpZXJzIDwgYXZhaWxQaWVyczsgbnVtUGllcnMrKykgewpAQCAtNjc0LDggKzY3NSw2IEBACiAJCX0KIAl9CiAKLQkqcE1pbkNhbFBvd2VyID0gKGludDE2X3QpKG1pblB3clQ0WzBdIC8gMik7Ci0KIAlrID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1YcGRHYWluczsgaSsrKSB7CkBAIC03MjksNyArNzI4LDcgQEAKIAkJCQkgICAgdnBkVGFibGVJW2ldW3NpemVDdXJyVnBkVGFibGUgLSAyXSk7CiAJCXZwZFN0ZXAgPSAoaW50MTZfdCkoKHZwZFN0ZXAgPCAxKSA/IDEgOiB2cGRTdGVwKTsKIAotCQlpZiAodGd0SW5kZXggPiBtYXhJbmRleCkgeworCQlpZiAodGd0SW5kZXggPj0gbWF4SW5kZXgpIHsKIAkJCXdoaWxlICgoc3MgPD0gdGd0SW5kZXgpICYmCiAJCQkgICAgICAgKGsgPCAoQVI1NDE2X05VTV9QREFEQ19WQUxVRVMgLSAxKSkpIHsKIAkJCQl0bXBWYWwgPSAoaW50MTZfdCkoKHZwZFRhYmxlSVtpXVtzaXplQ3VyclZwZFRhYmxlIC0gMV0gKwpAQCAtODM3LDcgKzgzNiw3IEBACiAJc3RhdGljIHU4IHBkYWRjVmFsdWVzW0FSNTQxNl9OVU1fUERBRENfVkFMVUVTXTsKIAl1MTYgZ2FpbkJvdW5kYXJpZXNbQVI1NDE2X1BEX0dBSU5TX0lOX01BU0tdOwogCXUxNiBudW1QaWVycywgaSwgajsKLQlpbnQxNl90IHRNaW5DYWxQb3dlciwgZGlmZiA9IDA7CisJaW50MTZfdCBkaWZmID0gMDsKIAl1MTYgbnVtWHBkR2FpbiwgeHBkTWFzazsKIAl1MTYgeHBkR2FpblZhbHVlc1tBUjU0MTZfTlVNX1BEX0dBSU5TXSA9IHsgMCwgMCwgMCwgMCB9OwogCXUzMiByZWczMiwgcmVnT2Zmc2V0LCByZWdDaGFpbk9mZnNldDsKQEAgLTkyMiw3ICs5MjEsNiBAQAogCQkJCQkJCWNoYW4sIHBSYXdEYXRhc2V0LAogCQkJCQkJCXBDYWxCQ2hhbnMsIG51bVBpZXJzLAogCQkJCQkJCXBkR2Fpbk92ZXJsYXBfdDIsCi0JCQkJCQkJJnRNaW5DYWxQb3dlciwKIAkJCQkJCQlnYWluQm91bmRhcmllcywKIAkJCQkJCQlwZGFkY1ZhbHVlcywKIAkJCQkJCQludW1YcGRHYWluKTsKQEAgLTE0MzcsMTQgKzE0MzUsMTQgQEAKIAlyZXR1cm4gbnVtX2FudF9jb25maWc7CiB9CiAKLXN0YXRpYyB1MTYgYXRoOWtfaHdfZGVmX2dldF9lZXByb21fYW50ZW5uYV9jZmcoc3RydWN0IGF0aF9odyAqYWgsCitzdGF0aWMgdTMyIGF0aDlrX2h3X2RlZl9nZXRfZWVwcm9tX2FudGVubmFfY2ZnKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7CiAJc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWgtPmVlcHJvbS5kZWY7CiAJc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCA9CiAJCSYoZWVwLT5tb2RhbEhlYWRlcltJU19DSEFOXzJHSFooY2hhbildKTsKIAotCXJldHVybiBwTW9kYWwtPmFudEN0cmxDb21tb24gJiAweEZGRkY7CisJcmV0dXJuIHBNb2RhbC0+YW50Q3RybENvbW1vbjsKIH0KIAogc3RhdGljIHUxNiBhdGg5a19od19kZWZfZ2V0X3NwdXJfY2hhbm5lbChzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGksIGJvb2wgaXMyR0h6KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2dwaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ncGlvLmMKaW5kZXggMGVlNzVlNy4uM2E4ZWU5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2dwaW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZ3Bpby5jCkBAIC03Niw3ICs3Niw4IEBACiAJY2FzZSBMRURfRlVMTDoKIAkJaWYgKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9BU1NPQykgewogCQkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0xFRF9BU1NPQ0lBVEVEOwotCQkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhzYy0+aHcsCisJCQlpZiAobGVkX2JsaW5rKQorCQkJCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LAogCQkJCQkJICAgICAmc2MtPmF0aF9sZWRfYmxpbmtfd29yaywgMCk7CiAJCX0gZWxzZSBpZiAobGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX1JBRElPKSB7CiAJCQlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIHNjLT5zY19haC0+bGVkX3BpbiwgMCk7CkBAIC0xNDMsNyArMTQ0LDggQEAKIAkvKiBMRUQgb2ZmLCBhY3RpdmUgbG93ICovCiAJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBzYy0+c2NfYWgtPmxlZF9waW4sIDEpOwogCi0JSU5JVF9ERUxBWUVEX1dPUksoJnNjLT5hdGhfbGVkX2JsaW5rX3dvcmssIGF0aF9sZWRfYmxpbmtfd29yayk7CisJaWYgKGxlZF9ibGluaykKKwkJSU5JVF9ERUxBWUVEX1dPUksoJnNjLT5hdGhfbGVkX2JsaW5rX3dvcmssIGF0aF9sZWRfYmxpbmtfd29yayk7CiAKIAl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF9yYWRpb19sZWRfbmFtZShzYy0+aHcpOwogCXNucHJpbnRmKHNjLT5yYWRpb19sZWQubmFtZSwgc2l6ZW9mKHNjLT5yYWRpb19sZWQubmFtZSksCkBAIC0xODAsNyArMTgyLDggQEAKIAlyZXR1cm47CiAKIGZhaWw6Ci0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZzYy0+YXRoX2xlZF9ibGlua193b3JrKTsKKwlpZiAobGVkX2JsaW5rKQorCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT5hdGhfbGVkX2JsaW5rX3dvcmspOwogCWF0aF9kZWluaXRfbGVkcyhzYyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jCmluZGV4IDc3YjM1OTEuLjYxYzFiZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYwpAQCAtMTYsMTIgKzE2LDI3IEBACiAKICNpbmNsdWRlICJodGMuaCIKIAotI2RlZmluZSBBVEg5S19GV19VU0JfREVWKGRldmlkLCBmdykJCQkJCVwKLQl7IFVTQl9ERVZJQ0UoMHgwY2YzLCBkZXZpZCksIC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSBmdyB9CisvKiBpZGVudGlmeSBmaXJtd2FyZSBpbWFnZXMgKi8KKyNkZWZpbmUgRklSTVdBUkVfQVI3MDEwCQkiYXI3MDEwLmZ3IgorI2RlZmluZSBGSVJNV0FSRV9BUjcwMTBfMV8xCSJhcjcwMTBfMV8xLmZ3IgorI2RlZmluZSBGSVJNV0FSRV9BUjkyNzEJCSJhcjkyNzEuZnciCisKK01PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV9BUjcwMTApOworTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFX0FSNzAxMF8xXzEpOworTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFX0FSOTI3MSk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBhdGg5a19oaWZfdXNiX2lkc1tdID0gewotCUFUSDlLX0ZXX1VTQl9ERVYoMHg5MjcxLCAiYXI5MjcxLmZ3IiksCi0JQVRIOUtfRldfVVNCX0RFVigweDEwMDYsICJhcjkyNzEuZnciKSwKKwl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDkyNzEpIH0sIC8qIEF0aGVyb3MgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDEwMDYpIH0sIC8qIEF0aGVyb3MgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDcwMTApIH0sIC8qIEF0aGVyb3MgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDcwMTUpIH0sIC8qIEF0aGVyb3MgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwODQ2LCAweDkwMzApIH0sIC8qIE5ldGdlYXIgTjE1MCAqLworCXsgVVNCX0RFVklDRSgweDA4NDYsIDB4OTAxOCkgfSwgLyogTmV0Z2VhciBXTkRBMzIwMCAqLworCXsgVVNCX0RFVklDRSgweDA3RDEsIDB4M0ExMCkgfSwgLyogRGxpbmsgV2lyZWxlc3MgMTUwICovCisJeyBVU0JfREVWSUNFKDB4MTNEMywgMHgzMzI3KSB9LCAvKiBBenVyZXdhdmUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxM0QzLCAweDMzMjgpIH0sIC8qIEF6dXJld2F2ZSAqLworCXsgVVNCX0RFVklDRSgweDA0Q0EsIDB4NDYwNSkgfSwgLyogTGl0ZW9uICovCisJeyBVU0JfREVWSUNFKDB4MDgzQSwgMHhBNzA0KSB9LCAvKiBTTUMgTmV0d29ya3MgKi8KIAl7IH0sCiB9OwogCkBAIC03MzAsMTMgKzc0NSwxNyBAQAogCiAJLyogUlggKi8KIAlpZiAoYXRoOWtfaGlmX3VzYl9hbGxvY19yeF91cmJzKGhpZl9kZXYpIDwgMCkKLQkJZ290byBlcnI7CisJCWdvdG8gZXJyX3J4OwogCiAJLyogUmVnaXN0ZXIgUmVhZCAqLwogCWlmIChhdGg5a19oaWZfdXNiX2FsbG9jX3JlZ19pbl91cmIoaGlmX2RldikgPCAwKQotCQlnb3RvIGVycjsKKwkJZ290byBlcnJfcmVnOwogCiAJcmV0dXJuIDA7CitlcnJfcmVnOgorCWF0aDlrX2hpZl91c2JfZGVhbGxvY19yeF91cmJzKGhpZl9kZXYpOworZXJyX3J4OgorCWF0aDlrX2hpZl91c2JfZGVhbGxvY190eF91cmJzKGhpZl9kZXYpOwogZXJyOgogCXJldHVybiAtRU5PTUVNOwogfQpAQCAtNzU2LDYgKzc3NSw3IEBACiAJc2l6ZV90IGxlbiA9IGhpZl9kZXYtPmZpcm13YXJlLT5zaXplOwogCXUzMiBhZGRyID0gQVI5MjcxX0ZJUk1XQVJFOwogCXU4ICpidWYgPSBremFsbG9jKDQwOTYsIEdGUF9LRVJORUwpOworCXUzMiBmaXJtX29mZnNldDsKIAogCWlmICghYnVmKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTc3OSwzMiArNzk5LDM3IEBACiAJfQogCWtmcmVlKGJ1Zik7CiAKKwlpZiAoaGlmX2Rldi0+ZGV2aWNlX2lkID09IDB4NzAxMCkKKwkJZmlybV9vZmZzZXQgPSBBUjcwMTBfRklSTVdBUkVfVEVYVDsKKwllbHNlCisJCWZpcm1fb2Zmc2V0ID0gQVI5MjcxX0ZJUk1XQVJFX1RFWFQ7CisKIAkvKgogCSAqIElzc3VlIEZXIGRvd25sb2FkIGNvbXBsZXRlIGNvbW1hbmQgdG8gZmlybXdhcmUuCiAJICovCiAJZXJyID0gdXNiX2NvbnRyb2xfbXNnKGhpZl9kZXYtPnVkZXYsIHVzYl9zbmRjdHJscGlwZShoaWZfZGV2LT51ZGV2LCAwKSwKIAkJCSAgICAgIEZJUk1XQVJFX0RPV05MT0FEX0NPTVAsCiAJCQkgICAgICAweDQwIHwgVVNCX0RJUl9PVVQsCi0JCQkgICAgICBBUjkyNzFfRklSTVdBUkVfVEVYVCA+PiA4LCAwLCBOVUxMLCAwLCBIWik7CisJCQkgICAgICBmaXJtX29mZnNldCA+PiA4LCAwLCBOVUxMLCAwLCBIWik7CiAJaWYgKGVycikKIAkJcmV0dXJuIC1FSU87CiAKIAlkZXZfaW5mbygmaGlmX2Rldi0+dWRldi0+ZGV2LCAiYXRoOWtfaHRjOiBUcmFuc2ZlcnJlZCBGVzogJXMsIHNpemU6ICVsZFxuIiwKLQkJICJhcjkyNzEuZnciLCAodW5zaWduZWQgbG9uZykgaGlmX2Rldi0+ZmlybXdhcmUtPnNpemUpOworCQkgaGlmX2Rldi0+ZndfbmFtZSwgKHVuc2lnbmVkIGxvbmcpIGhpZl9kZXYtPmZpcm13YXJlLT5zaXplKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGF0aDlrX2hpZl91c2JfZGV2X2luaXQoc3RydWN0IGhpZl9kZXZpY2VfdXNiICpoaWZfZGV2LAotCQkJCSAgY29uc3QgY2hhciAqZndfbmFtZSkKK3N0YXRpYyBpbnQgYXRoOWtfaGlmX3VzYl9kZXZfaW5pdChzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYpCiB7CiAJaW50IHJldDsKIAogCS8qIFJlcXVlc3QgZmlybXdhcmUgKi8KLQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZoaWZfZGV2LT5maXJtd2FyZSwgZndfbmFtZSwgJmhpZl9kZXYtPnVkZXYtPmRldik7CisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmaGlmX2Rldi0+ZmlybXdhcmUsIGhpZl9kZXYtPmZ3X25hbWUsCisJCQkgICAgICAgJmhpZl9kZXYtPnVkZXYtPmRldik7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZoaWZfZGV2LT51ZGV2LT5kZXYsCi0JCQkiYXRoOWtfaHRjOiBGaXJtd2FyZSAtICVzIG5vdCBmb3VuZFxuIiwgZndfbmFtZSk7CisJCQkiYXRoOWtfaHRjOiBGaXJtd2FyZSAtICVzIG5vdCBmb3VuZFxuIiwgaGlmX2Rldi0+ZndfbmFtZSk7CiAJCWdvdG8gZXJyX2Z3X3JlcTsKIAl9CiAKQEAgLTgyMCw3ICs4NDUsOCBAQAogCXJldCA9IGF0aDlrX2hpZl91c2JfZG93bmxvYWRfZncoaGlmX2Rldik7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZoaWZfZGV2LT51ZGV2LT5kZXYsCi0JCQkiYXRoOWtfaHRjOiBGaXJtd2FyZSAtICVzIGRvd25sb2FkIGZhaWxlZFxuIiwgZndfbmFtZSk7CisJCQkiYXRoOWtfaHRjOiBGaXJtd2FyZSAtICVzIGRvd25sb2FkIGZhaWxlZFxuIiwKKwkJCWhpZl9kZXYtPmZ3X25hbWUpOwogCQlnb3RvIGVycl9md19kb3dubG9hZDsKIAl9CiAKQEAgLTg0Nyw3ICs4NzMsNiBAQAogewogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOwogCXN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldjsKLQljb25zdCBjaGFyICpmd19uYW1lID0gKGNvbnN0IGNoYXIgKikgaWQtPmRyaXZlcl9pbmZvOwogCWludCByZXQgPSAwOwogCiAJaGlmX2RldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWZfZGV2aWNlX3VzYiksIEdGUF9LRVJORUwpOwpAQCAtODcyLDcgKzg5NywyNyBAQAogCQlnb3RvIGVycl9odGNfaHdfYWxsb2M7CiAJfQogCi0JcmV0ID0gYXRoOWtfaGlmX3VzYl9kZXZfaW5pdChoaWZfZGV2LCBmd19uYW1lKTsKKwkvKiBGaW5kIG91dCB3aGljaCBmaXJtd2FyZSB0byBsb2FkICovCisKKwlzd2l0Y2goaGlmX2Rldi0+ZGV2aWNlX2lkKSB7CisJY2FzZSAweDcwMTA6CisJY2FzZSAweDkwMTg6CisJCWlmIChsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkgPT0gMHgwMjAyKQorCQkJaGlmX2Rldi0+ZndfbmFtZSA9IEZJUk1XQVJFX0FSNzAxMF8xXzE7CisJCWVsc2UKKwkJCWhpZl9kZXYtPmZ3X25hbWUgPSBGSVJNV0FSRV9BUjcwMTA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWhpZl9kZXYtPmZ3X25hbWUgPSBGSVJNV0FSRV9BUjkyNzE7CisJCWJyZWFrOworCX0KKworCWlmICghaGlmX2Rldi0+ZndfbmFtZSkgeworCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJDYW4ndCBkZXRlcm1pbmUgZmlybXdhcmUgIVxuIik7CisJCWdvdG8gZXJyX2h0Y19od19hbGxvYzsKKwl9CisKKwlyZXQgPSBhdGg5a19oaWZfdXNiX2Rldl9pbml0KGhpZl9kZXYpOwogCWlmIChyZXQpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfaGlmX2luaXRfdXNiOwpAQCAtOTA3LDEyICs5NTIsMTAgQEAKIAl2b2lkICpidWY7CiAJaW50IHJldDsKIAotCWJ1ZiA9IGttYWxsb2MoNCwgR0ZQX0tFUk5FTCk7CisJYnVmID0ga21lbWR1cCgmcmVib290X2NtZCwgNCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpCiAJCXJldHVybjsKIAotCW1lbWNweShidWYsICZyZWJvb3RfY21kLCA0KTsKLQogCXJldCA9IHVzYl9idWxrX21zZyh1ZGV2LCB1c2Jfc25kYnVsa3BpcGUodWRldiwgVVNCX1JFR19PVVRfUElQRSksCiAJCQkgICBidWYsIDQsIE5VTEwsIEhaKTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmgKaW5kZXggMGFjYTQ5YjYuLjJkYWY5N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuaApAQCAtMTksNiArMTksNyBAQAogCiAjZGVmaW5lIEFSOTI3MV9GSVJNV0FSRSAgICAgICAweDUwMTAwMAogI2RlZmluZSBBUjkyNzFfRklSTVdBUkVfVEVYVCAgMHg5MDMwMDAKKyNkZWZpbmUgQVI3MDEwX0ZJUk1XQVJFX1RFWFQgIDB4OTA2MDAwCiAKICNkZWZpbmUgRklSTVdBUkVfRE9XTkxPQUQgICAgICAgMHgzMAogI2RlZmluZSBGSVJNV0FSRV9ET1dOTE9BRF9DT01QICAweDMxCkBAIC05MCw2ICs5MSw3IEBACiAJc3RydWN0IHVzYl9hbmNob3IgcmVnb3V0X3N1Ym1pdHRlZDsKIAlzdHJ1Y3QgdXNiX2FuY2hvciByeF9zdWJtaXR0ZWQ7CiAJc3RydWN0IHNrX2J1ZmYgKnJlbWFpbl9za2I7CisJY29uc3QgY2hhciAqZndfbmFtZTsKIAlpbnQgcnhfcmVtYWluX2xlbjsKIAlpbnQgcnhfcGt0X2xlbjsKIAlpbnQgcnhfdHJhbnNmZXJfbGVuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oCmluZGV4IGMyNTE2MDMuLjM3NTY0MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgKQEAgLTIyMywxNSArMjIzLDYgQEAKIAllbnVtIHRpZF9hZ2dyX3N0YXRlIHRpZF9zdGF0ZVtBVEg5S19IVENfTUFYX1RJRF07CiB9OwogCi1zdHJ1Y3QgYXRoOWtfaHRjX2FnZ3Jfd29yayB7Ci0JdTE2IHRpZDsKLQl1OCBzdGFfYWRkcltFVEhfQUxFTl07Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0Jc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKLQllbnVtIGllZWU4MDIxMV9hbXBkdV9tbG1lX2FjdGlvbiBhY3Rpb247Ci0Jc3RydWN0IG11dGV4IG11dGV4OwotfTsKLQogI2RlZmluZSBBVEg5S19IVENfUlhCVUYgMjU2CiAjZGVmaW5lIEhUQ19SWF9GUkFNRV9IRUFERVJfU0laRSA0MAogCkBAIC0yNTcsMTIgKzI0OCwxNSBAQAogI2RlZmluZSBUWF9TVEFUX0lOQyhjKSAoaGlmX2Rldi0+aHRjX2hhbmRsZS0+ZHJ2X3ByaXYtPmRlYnVnLnR4X3N0YXRzLmMrKykKICNkZWZpbmUgUlhfU1RBVF9JTkMoYykgKGhpZl9kZXYtPmh0Y19oYW5kbGUtPmRydl9wcml2LT5kZWJ1Zy5yeF9zdGF0cy5jKyspCiAKKyNkZWZpbmUgVFhfUVNUQVRfSU5DKHEpIChwcml2LT5kZWJ1Zy50eF9zdGF0cy5xdWV1ZV9zdGF0c1txXSsrKQorCiBzdHJ1Y3QgYXRoX3R4X3N0YXRzIHsKIAl1MzIgYnVmX3F1ZXVlZDsKIAl1MzIgYnVmX2NvbXBsZXRlZDsKIAl1MzIgc2tiX3F1ZXVlZDsKIAl1MzIgc2tiX2NvbXBsZXRlZDsKIAl1MzIgc2tiX2Ryb3BwZWQ7CisJdTMyIHF1ZXVlX3N0YXRzW1dNRV9OVU1fQUNdOwogfTsKIAogc3RydWN0IGF0aF9yeF9zdGF0cyB7CkBAIC0yODYsMTEgKzI4MCwxNCBAQAogI2RlZmluZSBUWF9TVEFUX0lOQyhjKSBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIFJYX1NUQVRfSU5DKGMpIGRvIHsgfSB3aGlsZSAoMCkKIAorI2RlZmluZSBUWF9RU1RBVF9JTkMoYykgZG8geyB9IHdoaWxlICgwKQorCiAjZW5kaWYgLyogQ09ORklHX0FUSDlLX0hUQ19ERUJVR0ZTICovCiAKICNkZWZpbmUgQVRIX0xFRF9QSU5fREVGICAgICAgICAgICAgIDEKICNkZWZpbmUgQVRIX0xFRF9QSU5fOTI4NyAgICAgICAgICAgIDgKICNkZWZpbmUgQVRIX0xFRF9QSU5fOTI3MSAgICAgICAgICAgIDE1CisjZGVmaW5lIEFUSF9MRURfUElOXzcwMTAgICAgICAgICAgICAxMgogI2RlZmluZSBBVEhfTEVEX09OX0RVUkFUSU9OX0lETEUgICAgMzUwCS8qIGluIG1zZWNzICovCiAjZGVmaW5lIEFUSF9MRURfT0ZGX0RVUkFUSU9OX0lETEUgICAyNTAJLyogaW4gbXNlY3MgKi8KIApAQCAtMzI2LDExICszMjMsMTAgQEAKICNkZWZpbmUgT1BfTEVEX09OICAgICAgICAgQklUKDQpCiAjZGVmaW5lIE9QX1BSRUFNQkxFX1NIT1JUIEJJVCg1KQogI2RlZmluZSBPUF9QUk9URUNUX0VOQUJMRSBCSVQoNikKLSNkZWZpbmUgT1BfVFhBR0dSICAgICAgICAgQklUKDcpCi0jZGVmaW5lIE9QX0FTU09DSUFURUQgICAgIEJJVCg4KQotI2RlZmluZSBPUF9FTkFCTEVfQkVBQ09OICBCSVQoOSkKLSNkZWZpbmUgT1BfTEVEX0RFSU5JVCAgICAgQklUKDEwKQotI2RlZmluZSBPUF9VTlBMVUdHRUQgICAgICBCSVQoMTEpCisjZGVmaW5lIE9QX0FTU09DSUFURUQgICAgIEJJVCg3KQorI2RlZmluZSBPUF9FTkFCTEVfQkVBQ09OICBCSVQoOCkKKyNkZWZpbmUgT1BfTEVEX0RFSU5JVCAgICAgQklUKDkpCisjZGVmaW5lIE9QX1VOUExVR0dFRCAgICAgIEJJVCgxMCkKIAogc3RydWN0IGF0aDlrX2h0Y19wcml2IHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CkBAIC0zNzEsOCArMzY3LDYgQEAKIAlzdHJ1Y3QgYXRoOWtfaHRjX3J4IHJ4OwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0eF90YXNrbGV0OwogCXN0cnVjdCBza19idWZmX2hlYWQgdHhfcXVldWU7Ci0Jc3RydWN0IGF0aDlrX2h0Y19hZ2dyX3dvcmsgYWdncl93b3JrOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgYXRoOWtfYWdncl93b3JrOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgYXRoOWtfYW5pX3dvcms7CiAJc3RydWN0IHdvcmtfc3RydWN0IHBzX3dvcms7CiAKQEAgLTM5MCwxMyArMzg0LDE0IEBACiAJaW50IGxlZF9vZmZfZHVyYXRpb247CiAJaW50IGxlZF9vbl9jbnQ7CiAJaW50IGxlZF9vZmZfY250OwotCWludCBod3FfbWFwW0FUSDlLX1dNRV9BQ19WTysxXTsKKworCWludCBiZWFjb25xOworCWludCBjYWJxOworCWludCBod3FfbWFwW1dNRV9OVU1fQUNdOwogCiAjaWZkZWYgQ09ORklHX0FUSDlLX0hUQ19ERUJVR0ZTCiAJc3RydWN0IGF0aDlrX2RlYnVnIGRlYnVnOwogI2VuZGlmCi0Jc3RydWN0IGF0aDlrX2h0Y190YXJnZXRfcmF0ZSB0Z3RfcmF0ZTsKLQogCXN0cnVjdCBtdXRleCBtdXRleDsKIH07CiAKQEAgLTQwNSw2ICs0MDAsNyBAQAogCWNvbW1vbi0+YnVzX29wcy0+cmVhZF9jYWNoZXNpemUoY29tbW9uLCBjc3opOwogfQogCit2b2lkIGF0aDlrX2h0Y19iZWFjb25xX2NvbmZpZyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpOwogdm9pZCBhdGg5a19odGNfYmVhY29uX2NvbmZpZyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwogdm9pZCBhdGg5a19odGNfc3diYShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIHU4IGJlYWNvbl9wZW5kaW5nKTsKQEAgLTQyNCw4ICs0MjAsOCBAQAogdm9pZCBhdGg5a190eF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CiBpbnQgYXRoOWtfaHRjX3R4X3N0YXJ0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIGF0aDlrX3R4X2NsZWFudXAoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KTsKLWJvb2wgYXRoOWtfaHRjX3R4cV9zZXR1cChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCi0JCQkgZW51bSBhdGg5a190eF9xdWV1ZV9zdWJ0eXBlIHF0eXBlKTsKK2Jvb2wgYXRoOWtfaHRjX3R4cV9zZXR1cChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIGludCBzdWJ0eXBlKTsKK2ludCBhdGg5a19odGNfY2FicV9zZXR1cChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpOwogaW50IGdldF9od19xbnVtKHUxNiBxdWV1ZSwgaW50ICpod3FfbWFwKTsKIGludCBhdGhfaHRjX3R4cV91cGRhdGUoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LCBpbnQgcW51bSwKIAkJICAgICAgIHN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaW5mbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jCmluZGV4IGMxMGM3ZDAuLmJkMTUwNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jCkBAIC0yMjIsNiArMjIyLDI5IEBACiAJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmJlYWNvbl9sb2NrKTsKIH0KIAorLyogQ3VycmVudGx5LCBvbmx5IGZvciBJQlNTICovCit2b2lkIGF0aDlrX2h0Y19iZWFjb25xX2NvbmZpZyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpCit7CisJc3RydWN0IGF0aF9odyAqYWggPSBwcml2LT5haDsKKwlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyBxaSwgcWlfYmU7CisJaW50IHFudW0gPSBwcml2LT5od3FfbWFwW1dNRV9BQ19CRV07CisKKwltZW1zZXQoJnFpLCAwLCBzaXplb2Yoc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8pKTsKKwltZW1zZXQoJnFpX2JlLCAwLCBzaXplb2Yoc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8pKTsKKworCWF0aDlrX2h3X2dldF90eHFfcHJvcHMoYWgsIHFudW0sICZxaV9iZSk7CisKKwlxaS50cWlfYWlmcyA9IHFpX2JlLnRxaV9haWZzOworCXFpLnRxaV9jd21pbiA9IDQqcWlfYmUudHFpX2N3bWluOworCXFpLnRxaV9jd21heCA9IHFpX2JlLnRxaV9jd21heDsKKworCWlmICghYXRoOWtfaHdfc2V0X3R4cV9wcm9wcyhhaCwgcHJpdi0+YmVhY29ucSwgJnFpKSkgeworCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19GQVRBTCwKKwkJCSAgIlVuYWJsZSB0byB1cGRhdGUgYmVhY29uIHF1ZXVlICV1IVxuIiwgcW51bSk7CisJfSBlbHNlIHsKKwkJYXRoOWtfaHdfcmVzZXR0eHF1ZXVlKGFoLCBwcml2LT5iZWFjb25xKTsKKwl9Cit9CiAKIHZvaWQgYXRoOWtfaHRjX2JlYWNvbl9jb25maWcoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAogCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfaW5pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfaW5pdC5jCmluZGV4IGRjMDE1MDcuLjE0OGI0MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2luaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmMKQEAgLTM0LDYgKzM0LDEzIEBACiAJLm1heF9wb3dlciA9IDIwLCBcCiB9CiAKKyNkZWZpbmUgQ0hBTjVHKF9mcmVxLCBfaWR4KSB7IFwKKwkuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFosIFwKKwkuY2VudGVyX2ZyZXEgPSAoX2ZyZXEpLCBcCisJLmh3X3ZhbHVlID0gKF9pZHgpLCBcCisJLm1heF9wb3dlciA9IDIwLCBcCit9CisKIHN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYXRoOWtfMmdoel9jaGFubmVsc1tdID0gewogCUNIQU4yRygyNDEyLCAwKSwgLyogQ2hhbm5lbCAxICovCiAJQ0hBTjJHKDI0MTcsIDEpLCAvKiBDaGFubmVsIDIgKi8KQEAgLTUxLDYgKzU4LDM3IEBACiAJQ0hBTjJHKDI0ODQsIDEzKSwgLyogQ2hhbm5lbCAxNCAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBhdGg5a181Z2h6X2NoYW5uZWxzW10gPSB7CisJLyogX1dlXyBjYWxsIHRoaXMgVU5JSSAxICovCisJQ0hBTjVHKDUxODAsIDE0KSwgLyogQ2hhbm5lbCAzNiAqLworCUNIQU41Ryg1MjAwLCAxNSksIC8qIENoYW5uZWwgNDAgKi8KKwlDSEFONUcoNTIyMCwgMTYpLCAvKiBDaGFubmVsIDQ0ICovCisJQ0hBTjVHKDUyNDAsIDE3KSwgLyogQ2hhbm5lbCA0OCAqLworCS8qIF9XZV8gY2FsbCB0aGlzIFVOSUkgMiAqLworCUNIQU41Ryg1MjYwLCAxOCksIC8qIENoYW5uZWwgNTIgKi8KKwlDSEFONUcoNTI4MCwgMTkpLCAvKiBDaGFubmVsIDU2ICovCisJQ0hBTjVHKDUzMDAsIDIwKSwgLyogQ2hhbm5lbCA2MCAqLworCUNIQU41Ryg1MzIwLCAyMSksIC8qIENoYW5uZWwgNjQgKi8KKwkvKiBfV2VfIGNhbGwgdGhpcyAiTWlkZGxlIGJhbmQiICovCisJQ0hBTjVHKDU1MDAsIDIyKSwgLyogQ2hhbm5lbCAxMDAgKi8KKwlDSEFONUcoNTUyMCwgMjMpLCAvKiBDaGFubmVsIDEwNCAqLworCUNIQU41Ryg1NTQwLCAyNCksIC8qIENoYW5uZWwgMTA4ICovCisJQ0hBTjVHKDU1NjAsIDI1KSwgLyogQ2hhbm5lbCAxMTIgKi8KKwlDSEFONUcoNTU4MCwgMjYpLCAvKiBDaGFubmVsIDExNiAqLworCUNIQU41Ryg1NjAwLCAyNyksIC8qIENoYW5uZWwgMTIwICovCisJQ0hBTjVHKDU2MjAsIDI4KSwgLyogQ2hhbm5lbCAxMjQgKi8KKwlDSEFONUcoNTY0MCwgMjkpLCAvKiBDaGFubmVsIDEyOCAqLworCUNIQU41Ryg1NjYwLCAzMCksIC8qIENoYW5uZWwgMTMyICovCisJQ0hBTjVHKDU2ODAsIDMxKSwgLyogQ2hhbm5lbCAxMzYgKi8KKwlDSEFONUcoNTcwMCwgMzIpLCAvKiBDaGFubmVsIDE0MCAqLworCS8qIF9XZV8gY2FsbCB0aGlzIFVOSUkgMyAqLworCUNIQU41Ryg1NzQ1LCAzMyksIC8qIENoYW5uZWwgMTQ5ICovCisJQ0hBTjVHKDU3NjUsIDM0KSwgLyogQ2hhbm5lbCAxNTMgKi8KKwlDSEFONUcoNTc4NSwgMzUpLCAvKiBDaGFubmVsIDE1NyAqLworCUNIQU41Ryg1ODA1LCAzNiksIC8qIENoYW5uZWwgMTYxICovCisJQ0hBTjVHKDU4MjUsIDM3KSwgLyogQ2hhbm5lbCAxNjUgKi8KK307CisKIC8qIEF0aGVyb3MgaGFyZHdhcmUgcmF0ZSBjb2RlIGFkZGl0aW9uIGZvciBzaG9ydCBwcmVtYmxlICovCiAjZGVmaW5lIFNIUENIRUNLKF9faHdfcmF0ZSwgX19mbGFncykgXAogCSgoX19mbGFncyAmIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFKSA/IChfX2h3X3JhdGUgfCAweDA0KSA6IDApCkBAIC0xNDEsNyArMTc5LDcgQEAKIAlyZXR1cm4gaHRjX2Nvbm5lY3Rfc2VydmljZShwcml2LT5odGMsICZyZXEsIGVwX2lkKTsKIH0KIAotc3RhdGljIGludCBhdGg5a19pbml0X2h0Y19zZXJ2aWNlcyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGF0aDlrX2luaXRfaHRjX3NlcnZpY2VzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgdTE2IGRldmlkKQogewogCWludCByZXQ7CiAKQEAgLTE5OSwxMCArMjM3LDI4IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKKwkvKgorCSAqIFNldHVwIHJlcXVpcmVkIGNyZWRpdHMgYmVmb3JlIGluaXRpYWxpemluZyBIVEMuCisJICogVGhpcyBpcyBhIGJpdCBoYWNreSwgYnV0LCBzaW5jZSBxdWV1aW5nIGlzIGRvbmUgaW4KKwkgKiB0aGUgSElGIGxheWVyLCBzaG91bGRuJ3QgbWF0dGVyIG11Y2guCisJICovCisKKwlzd2l0Y2goZGV2aWQpIHsKKwljYXNlIDB4NzAxMDoKKwljYXNlIDB4OTAxODoKKwkJcHJpdi0+aHRjLT5jcmVkaXRzID0gNDU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaXYtPmh0Yy0+Y3JlZGl0cyA9IDMzOworCX0KKwogCXJldCA9IGh0Y19pbml0KHByaXYtPmh0Yyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKKwlkZXZfaW5mbyhwcml2LT5kZXYsICJhdGg5a19odGM6IEhUQyBpbml0aWFsaXplZCB3aXRoICVkIGNyZWRpdHNcbiIsCisJCSBwcml2LT5odGMtPmNyZWRpdHMpOworCiAJcmV0dXJuIDA7CiAKIGVycjoKQEAgLTM5OCwxNyArNDU0LDQzIEBACiBzdGF0aWMgdm9pZCBzZXR1cF9odF9jYXAoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAogCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCAqaHRfaW5mbykKIHsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHByaXYtPmFoKTsKKwl1OCB0eF9zdHJlYW1zLCByeF9zdHJlYW1zOworCWludCBpOworCiAJaHRfaW5mby0+aHRfc3VwcG9ydGVkID0gdHJ1ZTsKIAlodF9pbmZvLT5jYXAgPSBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCB8CiAJCSAgICAgICBJRUVFODAyMTFfSFRfQ0FQX1NNX1BTIHwKIAkJICAgICAgIElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwIHwKIAkJICAgICAgIElFRUU4MDIxMV9IVF9DQVBfRFNTU0NDSzQwOwogCisJaWYgKHByaXYtPmFoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfU0dJXzIwKQorCQlodF9pbmZvLT5jYXAgfD0gSUVFRTgwMjExX0hUX0NBUF9TR0lfMjA7CisKKwlodF9pbmZvLT5jYXAgfD0gKDEgPDwgSUVFRTgwMjExX0hUX0NBUF9SWF9TVEJDX1NISUZUKTsKKwogCWh0X2luZm8tPmFtcGR1X2ZhY3RvciA9IElFRUU4MDIxMV9IVF9NQVhfQU1QRFVfNjRLOwogCWh0X2luZm8tPmFtcGR1X2RlbnNpdHkgPSBJRUVFODAyMTFfSFRfTVBEVV9ERU5TSVRZXzg7CiAKIAltZW1zZXQoJmh0X2luZm8tPm1jcywgMCwgc2l6ZW9mKGh0X2luZm8tPm1jcykpOwotCWh0X2luZm8tPm1jcy5yeF9tYXNrWzBdID0gMHhmZjsKKworCS8qIGF0aDlrX2h0YyBzdXBwb3J0cyBvbmx5IDEgb3IgMiBzdHJlYW0gZGV2aWNlcyAqLworCXR4X3N0cmVhbXMgPSBhdGg5a19jbW5fY291bnRfc3RyZWFtcyhjb21tb24tPnR4X2NoYWlubWFzaywgMik7CisJcnhfc3RyZWFtcyA9IGF0aDlrX2Ntbl9jb3VudF9zdHJlYW1zKGNvbW1vbi0+cnhfY2hhaW5tYXNrLCAyKTsKKworCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLAorCQkgICJUWCBzdHJlYW1zICVkLCBSWCBzdHJlYW1zOiAlZFxuIiwKKwkJICB0eF9zdHJlYW1zLCByeF9zdHJlYW1zKTsKKworCWlmICh0eF9zdHJlYW1zICE9IHJ4X3N0cmVhbXMpIHsKKwkJaHRfaW5mby0+bWNzLnR4X3BhcmFtcyB8PSBJRUVFODAyMTFfSFRfTUNTX1RYX1JYX0RJRkY7CisJCWh0X2luZm8tPm1jcy50eF9wYXJhbXMgfD0gKCh0eF9zdHJlYW1zIC0gMSkgPDwKKwkJCQkJICAgSUVFRTgwMjExX0hUX01DU19UWF9NQVhfU1RSRUFNU19TSElGVCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHJ4X3N0cmVhbXM7IGkrKykKKwkJaHRfaW5mby0+bWNzLnJ4X21hc2tbaV0gPSAweGZmOworCiAJaHRfaW5mby0+bWNzLnR4X3BhcmFtcyB8PSBJRUVFODAyMTFfSFRfTUNTX1RYX0RFRklORUQ7CiB9CiAKQEAgLTQyMCwyMyArNTAyLDM3IEBACiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJpdi0+aHdxX21hcCk7IGkrKykKIAkJcHJpdi0+aHdxX21hcFtpXSA9IC0xOwogCi0JaWYgKCFhdGg5a19odGNfdHhxX3NldHVwKHByaXYsIEFUSDlLX1dNRV9BQ19CRSkpIHsKKwlwcml2LT5iZWFjb25xID0gYXRoOWtfaHdfYmVhY29ucV9zZXR1cChwcml2LT5haCk7CisJaWYgKHByaXYtPmJlYWNvbnEgPT0gLTEpIHsKKwkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKKwkJCSAgIlVuYWJsZSB0byBzZXR1cCBCRUFDT04geG1pdCBxdWV1ZVxuIik7CisJCWdvdG8gZXJyOworCX0KKworCXByaXYtPmNhYnEgPSBhdGg5a19odGNfY2FicV9zZXR1cChwcml2KTsKKwlpZiAocHJpdi0+Y2FicSA9PSAtMSkgeworCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAorCQkJICAiVW5hYmxlIHRvIHNldHVwIENBQiB4bWl0IHF1ZXVlXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJaWYgKCFhdGg5a19odGNfdHhxX3NldHVwKHByaXYsIFdNRV9BQ19CRSkpIHsKIAkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKIAkJCSAgIlVuYWJsZSB0byBzZXR1cCB4bWl0IHF1ZXVlIGZvciBCRSB0cmFmZmljXG4iKTsKIAkJZ290byBlcnI7CiAJfQogCi0JaWYgKCFhdGg5a19odGNfdHhxX3NldHVwKHByaXYsIEFUSDlLX1dNRV9BQ19CSykpIHsKKwlpZiAoIWF0aDlrX2h0Y190eHFfc2V0dXAocHJpdiwgV01FX0FDX0JLKSkgewogCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAogCQkJICAiVW5hYmxlIHRvIHNldHVwIHhtaXQgcXVldWUgZm9yIEJLIHRyYWZmaWNcbiIpOwogCQlnb3RvIGVycjsKIAl9Ci0JaWYgKCFhdGg5a19odGNfdHhxX3NldHVwKHByaXYsIEFUSDlLX1dNRV9BQ19WSSkpIHsKKwlpZiAoIWF0aDlrX2h0Y190eHFfc2V0dXAocHJpdiwgV01FX0FDX1ZJKSkgewogCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAogCQkJICAiVW5hYmxlIHRvIHNldHVwIHhtaXQgcXVldWUgZm9yIFZJIHRyYWZmaWNcbiIpOwogCQlnb3RvIGVycjsKIAl9Ci0JaWYgKCFhdGg5a19odGNfdHhxX3NldHVwKHByaXYsIEFUSDlLX1dNRV9BQ19WTykpIHsKKwlpZiAoIWF0aDlrX2h0Y190eHFfc2V0dXAocHJpdiwgV01FX0FDX1ZPKSkgewogCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAogCQkJICAiVW5hYmxlIHRvIHNldHVwIHhtaXQgcXVldWUgZm9yIFZPIHRyYWZmaWNcbiIpOwogCQlnb3RvIGVycjsKQEAgLTQ2OCwzNiArNTY0LDYgQEAKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgY29tbW9uLT5rZXltYXg7IGkrKykKIAkJYXRoOWtfaHdfa2V5cmVzZXQocHJpdi0+YWgsICh1MTYpIGkpOwotCi0JaWYgKGF0aDlrX2h3X2dldGNhcGFiaWxpdHkocHJpdi0+YWgsIEFUSDlLX0NBUF9DSVBIRVIsCi0JCQkJICAgQVRIOUtfQ0lQSEVSX1RLSVAsIE5VTEwpKSB7Ci0JCS8qCi0JCSAqIFdoZXRoZXIgd2Ugc2hvdWxkIGVuYWJsZSBoL3cgVEtJUCBNSUMuCi0JCSAqIFhYWDogaWYgd2UgZG9uJ3Qgc3VwcG9ydCBXTUUgVEtJUCBNSUMsIHRoZW4gd2Ugd291bGRuJ3QKLQkJICogcmVwb3J0IFdNTSBjYXBhYmxlLCBzbyBpdCdzIGFsd2F5cyBzYWZlIHRvIHR1cm4gb24KLQkJICogVEtJUCBNSUMgaW4gdGhpcyBjYXNlLgotCQkgKi8KLQkJYXRoOWtfaHdfc2V0Y2FwYWJpbGl0eShwcml2LT5haCwgQVRIOUtfQ0FQX1RLSVBfTUlDLCAwLCAxLCBOVUxMKTsKLQl9Ci0KLQkvKgotCSAqIENoZWNrIHdoZXRoZXIgdGhlIHNlcGFyYXRlIGtleSBjYWNoZSBlbnRyaWVzCi0JICogYXJlIHJlcXVpcmVkIHRvIGhhbmRsZSBib3RoIHR4K3J4IE1JQyBrZXlzLgotCSAqIFdpdGggc3BsaXQgbWljIGtleXMgdGhlIG51bWJlciBvZiBzdGF0aW9ucyBpcyBsaW1pdGVkCi0JICogdG8gMjcgb3RoZXJ3aXNlIDU5LgotCSAqLwotCWlmIChhdGg5a19od19nZXRjYXBhYmlsaXR5KHByaXYtPmFoLCBBVEg5S19DQVBfQ0lQSEVSLAotCQkJCSAgIEFUSDlLX0NJUEhFUl9US0lQLCBOVUxMKQotCSAgICAmJiBhdGg5a19od19nZXRjYXBhYmlsaXR5KHByaXYtPmFoLCBBVEg5S19DQVBfQ0lQSEVSLAotCQkJCSAgICAgIEFUSDlLX0NJUEhFUl9NSUMsIE5VTEwpCi0JICAgICYmIGF0aDlrX2h3X2dldGNhcGFiaWxpdHkocHJpdi0+YWgsIEFUSDlLX0NBUF9US0lQX1NQTElULAotCQkJCSAgICAgIDAsIE5VTEwpKQotCQljb21tb24tPnNwbGl0bWljID0gMTsKLQotCS8qIHR1cm4gb24gbWNhc3Qga2V5IHNlYXJjaCBpZiBwb3NzaWJsZSAqLwotCWlmICghYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShwcml2LT5haCwgQVRIOUtfQ0FQX01DQVNUX0tFWVNSQ0gsIDAsIE5VTEwpKQotCQkodm9pZClhdGg5a19od19zZXRjYXBhYmlsaXR5KHByaXYtPmFoLCBBVEg5S19DQVBfTUNBU1RfS0VZU1JDSCwKLQkJCQkJICAgICAxLCAxLCBOVUxMKTsKIH0KIAogc3RhdGljIHZvaWQgYXRoOWtfaW5pdF9jaGFubmVsc19yYXRlcyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpCkBAIC01MTIsNiArNTc4LDE3IEBACiAJCXByaXYtPnNiYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2JpdHJhdGVzID0KIAkJCUFSUkFZX1NJWkUoYXRoOWtfbGVnYWN5X3JhdGVzKTsKIAl9CisKKwlpZiAodGVzdF9iaXQoQVRIOUtfTU9ERV8xMUEsIHByaXYtPmFoLT5jYXBzLndpcmVsZXNzX21vZGVzKSkgeworCQlwcml2LT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uY2hhbm5lbHMgPSBhdGg5a181Z2h6X2NoYW5uZWxzOworCQlwcml2LT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uYmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFo7CisJCXByaXYtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzID0KKwkJCUFSUkFZX1NJWkUoYXRoOWtfNWdoel9jaGFubmVscyk7CisJCXByaXYtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5iaXRyYXRlcyA9CisJCQlhdGg5a19sZWdhY3lfcmF0ZXMgKyA0OworCQlwcml2LT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9iaXRyYXRlcyA9CisJCQlBUlJBWV9TSVpFKGF0aDlrX2xlZ2FjeV9yYXRlcykgLSA0OworCX0KIH0KIAogc3RhdGljIHZvaWQgYXRoOWtfaW5pdF9taXNjKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdikKQEAgLTUyNCw3ICs2MDEsNiBAQAogCWlmIChwcml2LT5haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0JTU0lETUFTSykKIAkJbWVtY3B5KGNvbW1vbi0+YnNzaWRtYXNrLCBhdGhfYmNhc3RfbWFjLCBFVEhfQUxFTik7CiAKLQlwcml2LT5vcF9mbGFncyB8PSBPUF9UWEFHR1I7CiAJcHJpdi0+YWgtPm9wbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CiB9CiAKQEAgLTU1NiwxNCArNjMyLDEyIEBACiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmJlYWNvbl9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+dHhfbG9jayk7CiAJbXV0ZXhfaW5pdCgmcHJpdi0+bXV0ZXgpOwotCW11dGV4X2luaXQoJnByaXYtPmFnZ3Jfd29yay5tdXRleCk7CiAJbXV0ZXhfaW5pdCgmcHJpdi0+aHRjX3BtX2xvY2spOwogCXRhc2tsZXRfaW5pdCgmcHJpdi0+d21pX3Rhc2tsZXQsIGF0aDlrX3dtaV90YXNrbGV0LAogCQkgICAgICh1bnNpZ25lZCBsb25nKXByaXYpOwogCXRhc2tsZXRfaW5pdCgmcHJpdi0+cnhfdGFza2xldCwgYXRoOWtfcnhfdGFza2xldCwKIAkJICAgICAodW5zaWduZWQgbG9uZylwcml2KTsKIAl0YXNrbGV0X2luaXQoJnByaXYtPnR4X3Rhc2tsZXQsIGF0aDlrX3R4X3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKXByaXYpOwotCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5hdGg5a19hZ2dyX3dvcmssIGF0aDlrX2h0Y19hZ2dyX3dvcmspOwogCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5hdGg5a19hbmlfd29yaywgYXRoOWtfYW5pX3dvcmspOwogCUlOSVRfV09SSygmcHJpdi0+cHNfd29yaywgYXRoOWtfcHNfd29yayk7CiAKQEAgLTY0MywxMSArNzE3LDE3IEBACiAJaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFHLCBwcml2LT5haC0+Y2Fwcy53aXJlbGVzc19tb2RlcykpCiAJCWh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPQogCQkJJnByaXYtPnNiYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKKwlpZiAodGVzdF9iaXQoQVRIOUtfTU9ERV8xMUEsIHByaXYtPmFoLT5jYXBzLndpcmVsZXNzX21vZGVzKSkKKwkJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSA9CisJCQkmcHJpdi0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOwogCiAJaWYgKHByaXYtPmFoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfSFQpIHsKIAkJaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFHLCBwcml2LT5haC0+Y2Fwcy53aXJlbGVzc19tb2RlcykpCiAJCQlzZXR1cF9odF9jYXAocHJpdiwKIAkJCQkgICAgICZwcml2LT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0uaHRfY2FwKTsKKwkJaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFBLCBwcml2LT5haC0+Y2Fwcy53aXJlbGVzc19tb2RlcykpCisJCQlzZXR1cF9odF9jYXAocHJpdiwKKwkJCQkgICAgICZwcml2LT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uaHRfY2FwKTsKIAl9CiAKIAlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihodywgY29tbW9uLT5tYWNhZGRyKTsKQEAgLTc0Nyw3ICs4MjcsNyBAQAogCQlnb3RvIGVycl9mcmVlOwogCX0KIAotCXJldCA9IGF0aDlrX2luaXRfaHRjX3NlcnZpY2VzKHByaXYpOworCXJldCA9IGF0aDlrX2luaXRfaHRjX3NlcnZpY2VzKHByaXYsIGRldmlkKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9pbml0OwogCkBAIC03OTAsNyArODcwLDggQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gYXRoOWtfaW5pdF9odGNfc2VydmljZXMoaHRjX2hhbmRsZS0+ZHJ2X3ByaXYpOworCXJldCA9IGF0aDlrX2luaXRfaHRjX3NlcnZpY2VzKGh0Y19oYW5kbGUtPmRydl9wcml2LAorCQkJICAgICAgaHRjX2hhbmRsZS0+ZHJ2X3ByaXYtPmFoLT5od192ZXJzaW9uLmRldmlkKTsKIAlyZXR1cm4gcmV0OwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMKaW5kZXggOWQzNzFjMS4uY2Y5YmNjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYwpAQCAtMjcsMTMgKzI3LDExIEBACiBzdGF0aWMgdm9pZCBhdGhfdXBkYXRlX3R4cG93KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgYXRoX2h3ICphaCA9IHByaXYtPmFoOwotCXUzMiB0eHBvdzsKIAogCWlmIChwcml2LT5jdXJ0eHBvdyAhPSBwcml2LT50eHBvd2xpbWl0KSB7CiAJCWF0aDlrX2h3X3NldF90eHBvd2VybGltaXQoYWgsIHByaXYtPnR4cG93bGltaXQpOwogCQkvKiByZWFkIGJhY2sgaW4gY2FzZSB2YWx1ZSBpcyBjbGFtcGVkICovCi0JCWF0aDlrX2h3X2dldGNhcGFiaWxpdHkoYWgsIEFUSDlLX0NBUF9UWFBPVywgMSwgJnR4cG93KTsKLQkJcHJpdi0+Y3VydHhwb3cgPSB0eHBvdzsKKwkJcHJpdi0+Y3VydHhwb3cgPSBhdGg5a19od19yZWd1bGF0b3J5KGFoKS0+cG93ZXJfbGltaXQ7CiAJfQogfQogCkBAIC0zMjUsMTQyICszMjMsMTI5IEBACiAJdGNhcC5mbGFnc19leHQgPSAweDgwNjAxMDAwOwogCXRjYXAuYW1wZHVfbGltaXQgPSAweGZmZmYwMDAwOwogCXRjYXAuYW1wZHVfc3ViZnJhbWVzID0gMjA7Ci0JdGNhcC50eF9jaGFpbm1hc2tfbGVnYWN5ID0gMTsKKwl0Y2FwLnR4X2NoYWlubWFza19sZWdhY3kgPSBwcml2LT5haC0+Y2Fwcy50eF9jaGFpbm1hc2s7CiAJdGNhcC5wcm90bW9kZSA9IDE7Ci0JdGNhcC50eF9jaGFpbm1hc2sgPSAxOworCXRjYXAudHhfY2hhaW5tYXNrID0gcHJpdi0+YWgtPmNhcHMudHhfY2hhaW5tYXNrOwogCiAJV01JX0NNRF9CVUYoV01JX1RBUkdFVF9JQ19VUERBVEVfQ01ESUQsICZ0Y2FwKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgYXRoOWtfaHRjX2luaXRfcmF0ZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCitzdGF0aWMgdm9pZCBhdGg5a19odGNfc2V0dXBfcmF0ZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQkJIHN0cnVjdCBhdGg5a19odGNfdGFyZ2V0X3JhdGUgKnRyYXRlKQogewotCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24ocHJpdi0+YWgpOwogCXN0cnVjdCBhdGg5a19odGNfc3RhICppc3RhID0gKHN0cnVjdCBhdGg5a19odGNfc3RhICopIHN0YS0+ZHJ2X3ByaXY7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7Ci0Jc3RydWN0IGF0aDlrX2h0Y190YXJnZXRfcmF0ZSB0cmF0ZTsKIAl1MzIgY2FwcyA9IDA7Ci0JdTggY21kX3JzcDsKLQlpbnQgaSwgaiwgcmV0OworCWludCBpLCBqOwogCi0JbWVtc2V0KCZ0cmF0ZSwgMCwgc2l6ZW9mKHRyYXRlKSk7Ci0KLQkvKiBPbmx5IDJHSHogaXMgc3VwcG9ydGVkICovCi0Jc2JhbmQgPSBwcml2LT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOworCXNiYW5kID0gcHJpdi0+aHctPndpcGh5LT5iYW5kc1twcml2LT5ody0+Y29uZi5jaGFubmVsLT5iYW5kXTsKIAogCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgewogCQlpZiAoc3RhLT5zdXBwX3JhdGVzW3NiYW5kLT5iYW5kXSAmIEJJVChpKSkgewotCQkJcHJpdi0+dGd0X3JhdGUucmF0ZXMubGVnYWN5X3JhdGVzLnJzX3JhdGVzW2pdCisJCQl0cmF0ZS0+cmF0ZXMubGVnYWN5X3JhdGVzLnJzX3JhdGVzW2pdCiAJCQkJPSAoc2JhbmQtPmJpdHJhdGVzW2ldLmJpdHJhdGUgKiAyKSAvIDEwOwogCQkJaisrOwogCQl9CiAJfQotCXByaXYtPnRndF9yYXRlLnJhdGVzLmxlZ2FjeV9yYXRlcy5yc19ucmF0ZXMgPSBqOworCXRyYXRlLT5yYXRlcy5sZWdhY3lfcmF0ZXMucnNfbnJhdGVzID0gajsKIAogCWlmIChzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpIHsKIAkJZm9yIChpID0gMCwgaiA9IDA7IGkgPCA3NzsgaSsrKSB7CiAJCQlpZiAoc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbaS84XSAmICgxPDwoaSU4KSkpCi0JCQkJcHJpdi0+dGd0X3JhdGUucmF0ZXMuaHRfcmF0ZXMucnNfcmF0ZXNbaisrXSA9IGk7CisJCQkJdHJhdGUtPnJhdGVzLmh0X3JhdGVzLnJzX3JhdGVzW2orK10gPSBpOwogCQkJaWYgKGogPT0gQVRIX0hUQ19SQVRFX01BWCkKIAkJCQlicmVhazsKIAkJfQotCQlwcml2LT50Z3RfcmF0ZS5yYXRlcy5odF9yYXRlcy5yc19ucmF0ZXMgPSBqOworCQl0cmF0ZS0+cmF0ZXMuaHRfcmF0ZXMucnNfbnJhdGVzID0gajsKIAogCQljYXBzID0gV0xBTl9SQ19IVF9GTEFHOworCQlpZiAoc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbMV0pCisJCQljYXBzIHw9IFdMQU5fUkNfRFNfRkxBRzsKIAkJaWYgKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwKQogCQkJY2FwcyB8PSBXTEFOX1JDXzQwX0ZMQUc7Ci0JCWlmIChzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MCkKKwkJaWYgKGNvbmZfaXNfaHQ0MCgmcHJpdi0+aHctPmNvbmYpICYmCisJCSAgICAoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TR0lfNDApKQogCQkJY2FwcyB8PSBXTEFOX1JDX1NHSV9GTEFHOwotCisJCWVsc2UgaWYgKGNvbmZfaXNfaHQyMCgmcHJpdi0+aHctPmNvbmYpICYmCisJCQkgKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwKSkKKwkJCWNhcHMgfD0gV0xBTl9SQ19TR0lfRkxBRzsKIAl9CiAKLQlwcml2LT50Z3RfcmF0ZS5zdGFfaW5kZXggPSBpc3RhLT5pbmRleDsKLQlwcml2LT50Z3RfcmF0ZS5pc25ldyA9IDE7Ci0JdHJhdGUgPSBwcml2LT50Z3RfcmF0ZTsKLQlwcml2LT50Z3RfcmF0ZS5jYXBmbGFncyA9IGNwdV90b19iZTMyKGNhcHMpOwotCXRyYXRlLmNhcGZsYWdzID0gY3B1X3RvX2JlMzIoY2Fwcyk7CisJdHJhdGUtPnN0YV9pbmRleCA9IGlzdGEtPmluZGV4OworCXRyYXRlLT5pc25ldyA9IDE7CisJdHJhdGUtPmNhcGZsYWdzID0gY3B1X3RvX2JlMzIoY2Fwcyk7Cit9CiAKLQlXTUlfQ01EX0JVRihXTUlfUkNfUkFURV9VUERBVEVfQ01ESUQsICZ0cmF0ZSk7CitzdGF0aWMgaW50IGF0aDlrX2h0Y19zZW5kX3JhdGVfY21kKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKKwkJCQkgICAgc3RydWN0IGF0aDlrX2h0Y190YXJnZXRfcmF0ZSAqdHJhdGUpCit7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCk7CisJaW50IHJldDsKKwl1OCBjbWRfcnNwOworCisJV01JX0NNRF9CVUYoV01JX1JDX1JBVEVfVVBEQVRFX0NNRElELCB0cmF0ZSk7CiAJaWYgKHJldCkgewogCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAogCQkJICAiVW5hYmxlIHRvIGluaXRpYWxpemUgUmF0ZSBpbmZvcm1hdGlvbiBvbiB0YXJnZXRcbiIpOwotCQlyZXR1cm4gcmV0OwogCX0KIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLAotCQkgICJVcGRhdGVkIHRhcmdldCBTVEE6ICVwTSAoY2FwczogMHgleClcbiIsIHN0YS0+YWRkciwgY2Fwcyk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGJvb2wgY2hlY2tfcmNfdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sICpjdzQwKQorc3RhdGljIHZvaWQgYXRoOWtfaHRjX2luaXRfcmF0ZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKLQlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7Ci0KLQlpZiAoIWNvbmZfaXNfaHQoY29uZikpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmICghKHByaXYtPm9wX2ZsYWdzICYgT1BfQVNTT0NJQVRFRCkgfHwKLQkgICAgKHByaXYtPm9wX2ZsYWdzICYgT1BfU0NBTk5JTkcpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoY29uZl9pc19odDQwKGNvbmYpKSB7Ci0JCWlmIChwcml2LT5haC0+Y3VyY2hhbi0+Y2hhbm1vZGUgJgotCQkJKENIQU5ORUxfSFQ0MFBMVVMgfCBDSEFOTkVMX0hUNDBNSU5VUykpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfSBlbHNlIHsKLQkJCSpjdzQwID0gdHJ1ZTsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JfSBlbHNlIHsgIC8qIGh0MjAgKi8KLQkJaWYgKHByaXYtPmFoLT5jdXJjaGFuLT5jaGFubW9kZSAmIENIQU5ORUxfSFQyMCkKLQkJCXJldHVybiBmYWxzZTsKLQkJZWxzZQotCQkJcmV0dXJuIHRydWU7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBhdGg5a19odGNfcmNfdXBkYXRlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgYm9vbCBpc19jdzQwKQotewotCXN0cnVjdCBhdGg5a19odGNfdGFyZ2V0X3JhdGUgdHJhdGU7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCk7CisJc3RydWN0IGF0aDlrX2h0Y190YXJnZXRfcmF0ZSB0cmF0ZTsKIAlpbnQgcmV0OwotCXUzMiBjYXBzID0gYmUzMl90b19jcHUocHJpdi0+dGd0X3JhdGUuY2FwZmxhZ3MpOwotCXU4IGNtZF9yc3A7CiAKLQltZW1zZXQoJnRyYXRlLCAwLCBzaXplb2YodHJhdGUpKTsKKwltZW1zZXQoJnRyYXRlLCAwLCBzaXplb2Yoc3RydWN0IGF0aDlrX2h0Y190YXJnZXRfcmF0ZSkpOworCWF0aDlrX2h0Y19zZXR1cF9yYXRlKHByaXYsIHN0YSwgJnRyYXRlKTsKKwlyZXQgPSBhdGg5a19odGNfc2VuZF9yYXRlX2NtZChwcml2LCAmdHJhdGUpOworCWlmICghcmV0KQorCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKKwkJCSAgIlVwZGF0ZWQgdGFyZ2V0IHN0YTogJXBNLCByYXRlIGNhcHM6IDB4JVhcbiIsCisJCQkgIHN0YS0+YWRkciwgYmUzMl90b19jcHUodHJhdGUuY2FwZmxhZ3MpKTsKK30KIAotCXRyYXRlID0gcHJpdi0+dGd0X3JhdGU7CitzdGF0aWMgdm9pZCBhdGg5a19odGNfdXBkYXRlX3JhdGUoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mKQoreworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24ocHJpdi0+YWgpOworCXN0cnVjdCBhdGg5a19odGNfdGFyZ2V0X3JhdGUgdHJhdGU7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKKwlpbnQgcmV0OwogCi0JaWYgKGlzX2N3NDApCi0JCWNhcHMgfD0gV0xBTl9SQ180MF9GTEFHOwotCWVsc2UKLQkJY2FwcyAmPSB+V0xBTl9SQ180MF9GTEFHOworCW1lbXNldCgmdHJhdGUsIDAsIHNpemVvZihzdHJ1Y3QgYXRoOWtfaHRjX3RhcmdldF9yYXRlKSk7CiAKLQlwcml2LT50Z3RfcmF0ZS5jYXBmbGFncyA9IGNwdV90b19iZTMyKGNhcHMpOwotCXRyYXRlLmNhcGZsYWdzID0gY3B1X3RvX2JlMzIoY2Fwcyk7Ci0KLQlXTUlfQ01EX0JVRihXTUlfUkNfUkFURV9VUERBVEVfQ01ESUQsICZ0cmF0ZSk7Ci0JaWYgKHJldCkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiVW5hYmxlIHRvIHVwZGF0ZSBSYXRlIGluZm9ybWF0aW9uIG9uIHRhcmdldFxuIik7CisJcmN1X3JlYWRfbG9jaygpOworCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YSh2aWYsIGJzc19jb25mLT5ic3NpZCk7CisJaWYgKCFzdGEpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybjsKIAl9CisJYXRoOWtfaHRjX3NldHVwX3JhdGUocHJpdiwgc3RhLCAmdHJhdGUpOworCXJjdV9yZWFkX3VubG9jaygpOwogCi0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICJSYXRlIGNvbnRyb2wgdXBkYXRlZCB3aXRoICIKLQkJICAiY2FwczoweCV4IG9uIHRhcmdldFxuIiwgcHJpdi0+dGd0X3JhdGUuY2FwZmxhZ3MpOworCXJldCA9IGF0aDlrX2h0Y19zZW5kX3JhdGVfY21kKHByaXYsICZ0cmF0ZSk7CisJaWYgKCFyZXQpCisJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLAorCQkJICAiVXBkYXRlZCB0YXJnZXQgc3RhOiAlcE0sIHJhdGUgY2FwczogMHglWFxuIiwKKwkJCSAgYnNzX2NvbmYtPmJzc2lkLCBiZTMyX3RvX2NwdSh0cmF0ZS5jYXBmbGFncykpOwogfQogCi1zdGF0aWMgaW50IGF0aDlrX2h0Y19hZ2dyX29wZXIoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAotCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCQkgICAgICAgdTggKnN0YV9hZGRyLCB1OCB0aWQsIGJvb2wgb3BlcikKK3N0YXRpYyBpbnQgYXRoOWtfaHRjX3R4X2FnZ3Jfb3BlcihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCQkgIGVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uIGFjdGlvbiwKKwkJCQkgIHUxNiB0aWQpCiB7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCk7CiAJc3RydWN0IGF0aDlrX2h0Y190YXJnZXRfYWdnciBhZ2dyOwotCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSBOVUxMOwogCXN0cnVjdCBhdGg5a19odGNfc3RhICppc3RhOwogCWludCByZXQgPSAwOwogCXU4IGNtZF9yc3A7CkBAIC00NjksNzQgKzQ1NCwzMCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW1lbXNldCgmYWdnciwgMCwgc2l6ZW9mKHN0cnVjdCBhdGg5a19odGNfdGFyZ2V0X2FnZ3IpKTsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQotCS8qIENoZWNrIGlmIHdlIGFyZSBhYmxlIHRvIHJldHJpZXZlIHRoZSBzdGF0aW9uICovCi0Jc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKHZpZiwgc3RhX2FkZHIpOwotCWlmICghc3RhKSB7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlpc3RhID0gKHN0cnVjdCBhdGg5a19odGNfc3RhICopIHN0YS0+ZHJ2X3ByaXY7CiAKLQlpZiAob3BlcikKLQkJaXN0YS0+dGlkX3N0YXRlW3RpZF0gPSBBR0dSX1NUQVJUOwotCWVsc2UKLQkJaXN0YS0+dGlkX3N0YXRlW3RpZF0gPSBBR0dSX1NUT1A7Ci0KIAlhZ2dyLnN0YV9pbmRleCA9IGlzdGEtPmluZGV4OwotCi0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQlhZ2dyLnRpZG5vID0gdGlkOwotCWFnZ3IuYWdncl9lbmFibGUgPSBvcGVyOworCWFnZ3IudGlkbm8gPSB0aWQgJiAweGY7CisJYWdnci5hZ2dyX2VuYWJsZSA9IChhY3Rpb24gPT0gSUVFRTgwMjExX0FNUERVX1RYX1NUQVJUKSA/IHRydWUgOiBmYWxzZTsKIAogCVdNSV9DTURfQlVGKFdNSV9UWF9BR0dSX0VOQUJMRV9DTURJRCwgJmFnZ3IpOwogCWlmIChyZXQpCiAJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLAogCQkJICAiVW5hYmxlIHRvICVzIFRYIGFnZ3JlZ2F0aW9uIGZvciAoJXBNLCAlZClcbiIsCi0JCQkgIChvcGVyKSA/ICJzdGFydCIgOiAic3RvcCIsIHN0YS0+YWRkciwgdGlkKTsKKwkJCSAgKGFnZ3IuYWdncl9lbmFibGUpID8gInN0YXJ0IiA6ICJzdG9wIiwgc3RhLT5hZGRyLCB0aWQpOwogCWVsc2UKIAkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCi0JCQkgICIlcyBhZ2dyZWdhdGlvbiBmb3IgKCVwTSwgJWQpXG4iLAotCQkJICAob3BlcikgPyAiU3RhcnRpbmciIDogIlN0b3BwaW5nIiwgc3RhLT5hZGRyLCB0aWQpOworCQkJICAiJXMgVFggYWdncmVnYXRpb24gZm9yICglcE0sICVkKVxuIiwKKwkJCSAgKGFnZ3IuYWdncl9lbmFibGUpID8gIlN0YXJ0aW5nIiA6ICJTdG9wcGluZyIsCisJCQkgIHN0YS0+YWRkciwgdGlkKTsKKworCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisJaXN0YS0+dGlkX3N0YXRlW3RpZF0gPSAoYWdnci5hZ2dyX2VuYWJsZSAmJiAhcmV0KSA/IEFHR1JfU1RBUlQgOiBBR0dSX1NUT1A7CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KIAotdm9pZCBhdGg5a19odGNfYWdncl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0aDlrX2h0Y19wcml2LAotCQkJICAgICBhdGg5a19hZ2dyX3dvcmsud29yayk7Ci0Jc3RydWN0IGF0aDlrX2h0Y19hZ2dyX3dvcmsgKndrID0gJnByaXYtPmFnZ3Jfd29yazsKLQotCW11dGV4X2xvY2soJndrLT5tdXRleCk7Ci0KLQlzd2l0Y2ggKHdrLT5hY3Rpb24pIHsKLQljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVEFSVDoKLQkJcmV0ID0gYXRoOWtfaHRjX2FnZ3Jfb3Blcihwcml2LCB3ay0+dmlmLCB3ay0+c3RhX2FkZHIsCi0JCQkJCSAgd2stPnRpZCwgdHJ1ZSk7Ci0JCWlmICghcmV0KQotCQkJaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiKHdrLT52aWYsIHdrLT5zdGFfYWRkciwKLQkJCQkJCSB3ay0+dGlkKTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfU1RPUDoKLQkJYXRoOWtfaHRjX2FnZ3Jfb3Blcihwcml2LCB3ay0+dmlmLCB3ay0+c3RhX2FkZHIsCi0JCQkJICAgIHdrLT50aWQsIGZhbHNlKTsKLQkJaWVlZTgwMjExX3N0b3BfdHhfYmFfY2Iod2stPnZpZiwgd2stPnN0YV9hZGRyLCB3ay0+dGlkKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCksIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJVbmtub3duIEFNUERVIGFjdGlvblxuIik7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZ3ay0+bXV0ZXgpOwotfQotCiAvKioqKioqKioqLwogLyogREVCVUcgKi8KIC8qKioqKioqKiovCkBAIC01NTIsOCArNDkzLDcgQEAKIHN0YXRpYyBzc2l6ZV90IHJlYWRfZmlsZV90Z3Rfc3RhdHMoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKIAkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPQotCQkoc3RydWN0IGF0aDlrX2h0Y19wcml2ICopIGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGF0aDlrX2h0Y190YXJnZXRfc3RhdHMgY21kX3JzcDsKIAljaGFyIGJ1Zls1MTJdOwogCXVuc2lnbmVkIGludCBsZW4gPSAwOwpAQCAtNTg0LDYgKzUyNCw5IEBACiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCiAJCQkiJTE5cyA6ICUxMHVcbiIsICJUWCBSYXRlIiwgcHJpdi0+ZGVidWcudHhyYXRlKTsKIAorCWlmIChsZW4gPiBzaXplb2YoYnVmKSkKKwkJbGVuID0gc2l6ZW9mKGJ1Zik7CisKIAlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7CiB9CiAKQEAgLTU5Niw4ICs1MzksNyBAQAogc3RhdGljIHNzaXplX3QgcmVhZF9maWxlX3htaXQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKIAkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9Ci0JCShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAljaGFyIGJ1Zls1MTJdOwogCXVuc2lnbmVkIGludCBsZW4gPSAwOwogCkBAIC02MTcsNiArNTU5LDIyIEBACiAJCQkiJTIwcyA6ICUxMHVcbiIsICJTS0JzIGRyb3BwZWQiLAogCQkJcHJpdi0+ZGVidWcudHhfc3RhdHMuc2tiX2Ryb3BwZWQpOwogCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkiJTIwcyA6ICUxMHVcbiIsICJCRSBxdWV1ZWQiLAorCQkJcHJpdi0+ZGVidWcudHhfc3RhdHMucXVldWVfc3RhdHNbV01FX0FDX0JFXSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkiJTIwcyA6ICUxMHVcbiIsICJCSyBxdWV1ZWQiLAorCQkJcHJpdi0+ZGVidWcudHhfc3RhdHMucXVldWVfc3RhdHNbV01FX0FDX0JLXSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkiJTIwcyA6ICUxMHVcbiIsICJWSSBxdWV1ZWQiLAorCQkJcHJpdi0+ZGVidWcudHhfc3RhdHMucXVldWVfc3RhdHNbV01FX0FDX1ZJXSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkiJTIwcyA6ICUxMHVcbiIsICJWTyBxdWV1ZWQiLAorCQkJcHJpdi0+ZGVidWcudHhfc3RhdHMucXVldWVfc3RhdHNbV01FX0FDX1ZPXSk7CisKKwlpZiAobGVuID4gc2l6ZW9mKGJ1ZikpCisJCWxlbiA9IHNpemVvZihidWYpOworCiAJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOwogfQogCkBAIC02MjksOCArNTg3LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHJlYWRfZmlsZV9yZWN2KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPQotCQkoc3RydWN0IGF0aDlrX2h0Y19wcml2ICopIGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJY2hhciBidWZbNTEyXTsKIAl1bnNpZ25lZCBpbnQgbGVuID0gMDsKIApAQCAtNjQ0LDYgKzYwMSw5IEBACiAJCQkiJTIwcyA6ICUxMHVcbiIsICJTS0JzIERyb3BwZWQiLAogCQkJcHJpdi0+ZGVidWcucnhfc3RhdHMuc2tiX2Ryb3BwZWQpOwogCisJaWYgKGxlbiA+IHNpemVvZihidWYpKQorCQlsZW4gPSBzaXplb2YoYnVmKTsKKwogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKIH0KIApAQCAtOTc4LDYgKzkzOCw4IEBACiAJCXByaXYtPmFoLT5sZWRfcGluID0gQVRIX0xFRF9QSU5fOTI4NzsKIAllbHNlIGlmIChBUl9TUkVWXzkyNzEocHJpdi0+YWgpKQogCQlwcml2LT5haC0+bGVkX3BpbiA9IEFUSF9MRURfUElOXzkyNzE7CisJZWxzZSBpZiAoQVJfREVWSURfNzAxMChwcml2LT5haCkpCisJCXByaXYtPmFoLT5sZWRfcGluID0gQVRIX0xFRF9QSU5fNzAxMDsKIAllbHNlCiAJCXByaXYtPmFoLT5sZWRfcGluID0gQVRIX0xFRF9QSU5fREVGOwogCkBAIC0xMDU0LDYgKzEwMTYsOTUgQEAKIAkJd2lwaHlfcmZraWxsX3N0YXJ0X3BvbGxpbmcocHJpdi0+aHctPndpcGh5KTsKIH0KIAorc3RhdGljIHZvaWQgYXRoOWtfaHRjX3JhZGlvX2VuYWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHByaXYtPmFoOworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOworCWludCByZXQ7CisJdTggY21kX3JzcDsKKworCWlmICghYWgtPmN1cmNoYW4pCisJCWFoLT5jdXJjaGFuID0gYXRoOWtfY21uX2dldF9jdXJjaGFubmVsKGh3LCBhaCk7CisKKwkvKiBSZXNldCB0aGUgSFcgKi8KKwlyZXQgPSBhdGg5a19od19yZXNldChhaCwgYWgtPmN1cmNoYW4sIGZhbHNlKTsKKwlpZiAocmV0KSB7CisJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCisJCQkgICJVbmFibGUgdG8gcmVzZXQgaGFyZHdhcmU7IHJlc2V0IHN0YXR1cyAlZCAiCisJCQkgICIoZnJlcSAldSBNSHopXG4iLCByZXQsIGFoLT5jdXJjaGFuLT5jaGFubmVsKTsKKwl9CisKKwlhdGhfdXBkYXRlX3R4cG93KHByaXYpOworCisJLyogU3RhcnQgUlggKi8KKwlXTUlfQ01EKFdNSV9TVEFSVF9SRUNWX0NNRElEKTsKKwlhdGg5a19ob3N0X3J4X2luaXQocHJpdik7CisKKwkvKiBTdGFydCBUWCAqLworCWh0Y19zdGFydChwcml2LT5odGMpOworCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisJcHJpdi0+dHhfcXVldWVzX3N0b3AgPSBmYWxzZTsKKwlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisJaWVlZTgwMjExX3dha2VfcXVldWVzKGh3KTsKKworCVdNSV9DTUQoV01JX0VOQUJMRV9JTlRSX0NNRElEKTsKKworCS8qIEVuYWJsZSBMRUQgKi8KKwlhdGg5a19od19jZmdfb3V0cHV0KGFoLCBhaC0+bGVkX3BpbiwKKwkJCSAgICBBUl9HUElPX09VVFBVVF9NVVhfQVNfT1VUUFVUKTsKKwlhdGg5a19od19zZXRfZ3BpbyhhaCwgYWgtPmxlZF9waW4sIDApOworfQorCitzdGF0aWMgdm9pZCBhdGg5a19odGNfcmFkaW9fZGlzYWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHByaXYtPmFoOworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOworCWludCByZXQ7CisJdTggY21kX3JzcDsKKworCWF0aDlrX2h0Y19wc193YWtldXAocHJpdik7CisKKwkvKiBEaXNhYmxlIExFRCAqLworCWF0aDlrX2h3X3NldF9ncGlvKGFoLCBhaC0+bGVkX3BpbiwgMSk7CisJYXRoOWtfaHdfY2ZnX2dwaW9faW5wdXQoYWgsIGFoLT5sZWRfcGluKTsKKworCVdNSV9DTUQoV01JX0RJU0FCTEVfSU5UUl9DTURJRCk7CisKKwkvKiBTdG9wIFRYICovCisJaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsKKwlodGNfc3RvcChwcml2LT5odGMpOworCVdNSV9DTUQoV01JX0RSQUlOX1RYUV9BTExfQ01ESUQpOworCXNrYl9xdWV1ZV9wdXJnZSgmcHJpdi0+dHhfcXVldWUpOworCisJLyogU3RvcCBSWCAqLworCVdNSV9DTUQoV01JX1NUT1BfUkVDVl9DTURJRCk7CisKKwkvKgorCSAqIFRoZSBNSUIgY291bnRlcnMgaGF2ZSB0byBiZSBkaXNhYmxlZCBoZXJlLAorCSAqIHNpbmNlIHRoZSB0YXJnZXQgZG9lc24ndCBkbyBpdC4KKwkgKi8KKwlhdGg5a19od19kaXNhYmxlX21pYl9jb3VudGVycyhhaCk7CisKKwlpZiAoIWFoLT5jdXJjaGFuKQorCQlhaC0+Y3VyY2hhbiA9IGF0aDlrX2Ntbl9nZXRfY3VyY2hhbm5lbChodywgYWgpOworCisJLyogUmVzZXQgdGhlIEhXICovCisJcmV0ID0gYXRoOWtfaHdfcmVzZXQoYWgsIGFoLT5jdXJjaGFuLCBmYWxzZSk7CisJaWYgKHJldCkgeworCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAorCQkJICAiVW5hYmxlIHRvIHJlc2V0IGhhcmR3YXJlOyByZXNldCBzdGF0dXMgJWQgIgorCQkJICAiKGZyZXEgJXUgTUh6KVxuIiwgcmV0LCBhaC0+Y3VyY2hhbi0+Y2hhbm5lbCk7CisJfQorCisJLyogRGlzYWJsZSB0aGUgUEhZICovCisJYXRoOWtfaHdfcGh5X2Rpc2FibGUoYWgpOworCisJYXRoOWtfaHRjX3BzX3Jlc3RvcmUocHJpdik7CisJYXRoOWtfaHRjX3NldHBvd2VyKHByaXYsIEFUSDlLX1BNX0ZVTExfU0xFRVApOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIG1hYzgwMjExIENhbGxiYWNrcyAqLwogLyoqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMDk5LDcgKzExNTAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGF0aDlrX2h0Y19yYWRpb19lbmFibGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgbGVkKQorc3RhdGljIGludCBhdGg5a19odGNfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gaHctPnByaXY7CiAJc3RydWN0IGF0aF9odyAqYWggPSBwcml2LT5haDsKQEAgLTExMTEsMTAgKzExNjIsMTYgQEAKIAlfX2JlMTYgaHRjX21vZGU7CiAJdTggY21kX3JzcDsKIAorCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwogCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLAogCQkgICJTdGFydGluZyBkcml2ZXIgd2l0aCBpbml0aWFsIGNoYW5uZWw6ICVkIE1IelxuIiwKIAkJICBjdXJjaGFuLT5jZW50ZXJfZnJlcSk7CiAKKwkvKiBFbnN1cmUgdGhhdCBIVyBpcyBhd2FrZSBiZWZvcmUgZmx1c2hpbmcgUlggKi8KKwlhdGg5a19odGNfc2V0cG93ZXIocHJpdiwgQVRIOUtfUE1fQVdBS0UpOworCVdNSV9DTUQoV01JX0ZMVVNIX1JFQ1ZfQ01ESUQpOworCiAJLyogc2V0dXAgaW5pdGlhbCBjaGFubmVsICovCiAJaW5pdF9jaGFubmVsID0gYXRoOWtfY21uX2dldF9jdXJjaGFubmVsKGh3LCBhaCk7CiAKQEAgLTExMjcsNiArMTE4NCw3IEBACiAJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCiAJCQkgICJVbmFibGUgdG8gcmVzZXQgaGFyZHdhcmU7IHJlc2V0IHN0YXR1cyAlZCAiCiAJCQkgICIoZnJlcSAldSBNSHopXG4iLCByZXQsIGN1cmNoYW4tPmNlbnRlcl9mcmVxKTsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0xMTQ3LDMxICsxMjA1LDE0IEBACiAJcHJpdi0+dHhfcXVldWVzX3N0b3AgPSBmYWxzZTsKIAlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CiAKLQlpZiAobGVkKSB7Ci0JCS8qIEVuYWJsZSBMRUQgKi8KLQkJYXRoOWtfaHdfY2ZnX291dHB1dChhaCwgYWgtPmxlZF9waW4sCi0JCQkJICAgIEFSX0dQSU9fT1VUUFVUX01VWF9BU19PVVRQVVQpOwotCQlhdGg5a19od19zZXRfZ3BpbyhhaCwgYWgtPmxlZF9waW4sIDApOwotCX0KLQogCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhodyk7CiAKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGF0aDlrX2h0Y19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlpbnQgcmV0ID0gMDsKLQotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlyZXQgPSBhdGg5a19odGNfcmFkaW9fZW5hYmxlKGh3LCBmYWxzZSk7CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19odGNfcmFkaW9fZGlzYWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBsZWQpCitzdGF0aWMgdm9pZCBhdGg5a19odGNfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoX2h3ICphaCA9IHByaXYtPmFoOwpAQCAtMTE3OSwyMSArMTIyMCwxNyBAQAogCWludCByZXQgPSAwOwogCXU4IGNtZF9yc3A7CiAKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisKIAlpZiAocHJpdi0+b3BfZmxhZ3MgJiBPUF9JTlZBTElEKSB7CiAJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5ZLCAiRGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAobGVkKSB7Ci0JCS8qIERpc2FibGUgTEVEICovCi0JCWF0aDlrX2h3X3NldF9ncGlvKGFoLCBhaC0+bGVkX3BpbiwgMSk7Ci0JCWF0aDlrX2h3X2NmZ19ncGlvX2lucHV0KGFoLCBhaC0+bGVkX3Bpbik7Ci0JfQotCiAJLyogQ2FuY2VsIGFsbCB0aGUgcnVubmluZyB0aW1lcnMvd29yayAuLiAqLwogCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPnBzX3dvcmspOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+YXRoOWtfYW5pX3dvcmspOwotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+YXRoOWtfYWdncl93b3JrKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmF0aDlrX2xlZF9ibGlua193b3JrKTsKIAlhdGg5a19sZWRfc3RvcF9icmlnaHRuZXNzKHByaXYpOwogCkBAIC0xMjAyLDEyICsxMjM5LDYgQEAKIAlXTUlfQ01EKFdNSV9ESVNBQkxFX0lOVFJfQ01ESUQpOwogCVdNSV9DTUQoV01JX0RSQUlOX1RYUV9BTExfQ01ESUQpOwogCVdNSV9DTUQoV01JX1NUT1BfUkVDVl9DTURJRCk7Ci0JYXRoOWtfaHdfcGh5X2Rpc2FibGUoYWgpOwotCWF0aDlrX2h3X2Rpc2FibGUoYWgpOwotCWF0aDlrX2h3X2NvbmZpZ3BjaXBvd2Vyc2F2ZShhaCwgMSwgMSk7Ci0JYXRoOWtfaHRjX3BzX3Jlc3RvcmUocHJpdik7Ci0JYXRoOWtfaHRjX3NldHBvd2VyKHByaXYsIEFUSDlLX1BNX0ZVTExfU0xFRVApOwotCiAJc2tiX3F1ZXVlX3B1cmdlKCZwcml2LT50eF9xdWV1ZSk7CiAKIAkvKiBSZW1vdmUgbW9uaXRvciBpbnRlcmZhY2UgaGVyZSAqLwpAQCAtMTIyMCwyMSArMTI1MSwxOCBAQAogCQkJCSAgIk1vbml0b3IgaW50ZXJmYWNlIHJlbW92ZWRcbiIpOwogCX0KIAorCWF0aDlrX2h3X3BoeV9kaXNhYmxlKGFoKTsKKwlhdGg5a19od19kaXNhYmxlKGFoKTsKKwlhdGg5a19od19jb25maWdwY2lwb3dlcnNhdmUoYWgsIDEsIDEpOworCWF0aDlrX2h0Y19wc19yZXN0b3JlKHByaXYpOworCWF0aDlrX2h0Y19zZXRwb3dlcihwcml2LCBBVEg5S19QTV9GVUxMX1NMRUVQKTsKKwogCXByaXYtPm9wX2ZsYWdzIHw9IE9QX0lOVkFMSUQ7CiAKIAlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgIkRyaXZlciBoYWx0XG4iKTsKLX0KLQotc3RhdGljIHZvaWQgYXRoOWtfaHRjX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0Jc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gaHctPnByaXY7Ci0KLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JYXRoOWtfaHRjX3JhZGlvX2Rpc2FibGUoaHcsIGZhbHNlKTsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIAotCiBzdGF0aWMgaW50IGF0aDlrX2h0Y19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CkBAIC0xMzAyLDYgKzEzMzAsNyBAQAogb3V0OgogCWF0aDlrX2h0Y19wc19yZXN0b3JlKHByaXYpOwogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTMxOCw2ICsxMzQ3LDcgQEAKIAlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgIkRldGFjaCBJbnRlcmZhY2VcbiIpOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCWF0aDlrX2h0Y19wc193YWtldXAocHJpdik7CiAKIAltZW1zZXQoJmh2aWYsIDAsIHNpemVvZihzdHJ1Y3QgYXRoOWtfaHRjX3RhcmdldF92aWYpKTsKIAltZW1jcHkoJmh2aWYubXlhZGRyLCB2aWYtPmFkZHIsIEVUSF9BTEVOKTsKQEAgLTEzMjgsNiArMTM1OCw3IEBACiAJYXRoOWtfaHRjX3JlbW92ZV9zdGF0aW9uKHByaXYsIHZpZiwgTlVMTCk7CiAJcHJpdi0+dmlmID0gTlVMTDsKIAorCWF0aDlrX2h0Y19wc19yZXN0b3JlKHByaXYpOwogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCkBAIC0xMzQzLDMwICsxMzc0LDI3IEBACiAJCWJvb2wgZW5hYmxlX3JhZGlvID0gZmFsc2U7CiAJCWJvb2wgaWRsZSA9ICEhKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfSURMRSk7CiAKKwkJbXV0ZXhfbG9jaygmcHJpdi0+aHRjX3BtX2xvY2spOwogCQlpZiAoIWlkbGUgJiYgcHJpdi0+cHNfaWRsZSkKIAkJCWVuYWJsZV9yYWRpbyA9IHRydWU7Ci0KIAkJcHJpdi0+cHNfaWRsZSA9IGlkbGU7CisJCW11dGV4X3VubG9jaygmcHJpdi0+aHRjX3BtX2xvY2spOwogCiAJCWlmIChlbmFibGVfcmFkaW8pIHsKLQkJCWF0aDlrX2h0Y19zZXRwb3dlcihwcml2LCBBVEg5S19QTV9BV0FLRSk7Ci0JCQlhdGg5a19odGNfcmFkaW9fZW5hYmxlKGh3LCB0cnVlKTsKIAkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLAogCQkJCSAgIm5vdC1pZGxlOiBlbmFibGluZyByYWRpb1xuIik7CisJCQlhdGg5a19odGNfc2V0cG93ZXIocHJpdiwgQVRIOUtfUE1fQVdBS0UpOworCQkJYXRoOWtfaHRjX3JhZGlvX2VuYWJsZShodyk7CiAJCX0KIAl9CiAKIAlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY3VyY2hhbiA9IGh3LT5jb25mLmNoYW5uZWw7CiAJCWludCBwb3MgPSBjdXJjaGFuLT5od192YWx1ZTsKLQkJYm9vbCBpc19jdzQwID0gZmFsc2U7CiAKIAkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICJTZXQgY2hhbm5lbDogJWQgTUh6XG4iLAogCQkJICBjdXJjaGFuLT5jZW50ZXJfZnJlcSk7CiAKLQkJaWYgKGNoZWNrX3JjX3VwZGF0ZShodywgJmlzX2N3NDApKQotCQkJYXRoOWtfaHRjX3JjX3VwZGF0ZShwcml2LCBpc19jdzQwKTsKLQogCQlhdGg5a19jbW5fdXBkYXRlX2ljaGFubmVsKGh3LCAmcHJpdi0+YWgtPmNoYW5uZWxzW3Bvc10pOwogCiAJCWlmIChhdGg5a19odGNfc2V0X2NoYW5uZWwocHJpdiwgaHcsICZwcml2LT5haC0+Y2hhbm5lbHNbcG9zXSkgPCAwKSB7CkBAIC0xMzk5LDE0ICsxNDI3LDIxIEBACiAJCX0KIAl9CiAKLQlpZiAocHJpdi0+cHNfaWRsZSkgeworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0lETEUpIHsKKwkJbXV0ZXhfbG9jaygmcHJpdi0+aHRjX3BtX2xvY2spOworCQlpZiAoIXByaXYtPnBzX2lkbGUpIHsKKwkJCW11dGV4X3VubG9jaygmcHJpdi0+aHRjX3BtX2xvY2spOworCQkJZ290byBvdXQ7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZwcml2LT5odGNfcG1fbG9jayk7CisKIAkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCiAJCQkgICJpZGxlOiBkaXNhYmxpbmcgcmFkaW9cbiIpOwotCQlhdGg5a19odGNfcmFkaW9fZGlzYWJsZShodywgdHJ1ZSk7CisJCWF0aDlrX2h0Y19yYWRpb19kaXNhYmxlKGh3KTsKIAl9CiAKK291dDoKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQogCXJldHVybiAwOwogfQogCkBAIC0xNDI4LDggKzE0NjMsOCBAQAogCXUzMiByZmlsdDsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQogCWF0aDlrX2h0Y19wc193YWtldXAocHJpdik7CisKIAljaGFuZ2VkX2ZsYWdzICY9IFNVUFBPUlRFRF9GSUxURVJTOwogCSp0b3RhbF9mbGFncyAmPSBTVVBQT1JURURfRklMVEVSUzsKIApAQCAtMTQ0NCwzMCArMTQ3OSwzOCBAQAogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19odGNfc3RhX25vdGlmeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCQkgZW51bSBzdGFfbm90aWZ5X2NtZCBjbWQsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCitzdGF0aWMgaW50IGF0aDlrX2h0Y19zdGFfYWRkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQogewogCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU1RBX05PVElGWV9BREQ6Ci0JCXJldCA9IGF0aDlrX2h0Y19hZGRfc3RhdGlvbihwcml2LCB2aWYsIHN0YSk7Ci0JCWlmICghcmV0KQotCQkJYXRoOWtfaHRjX2luaXRfcmF0ZShwcml2LCB2aWYsIHN0YSk7Ci0JCWJyZWFrOwotCWNhc2UgU1RBX05PVElGWV9SRU1PVkU6Ci0JCWF0aDlrX2h0Y19yZW1vdmVfc3RhdGlvbihwcml2LCB2aWYsIHN0YSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQorCWF0aDlrX2h0Y19wc193YWtldXAocHJpdik7CisJcmV0ID0gYXRoOWtfaHRjX2FkZF9zdGF0aW9uKHByaXYsIHZpZiwgc3RhKTsKKwlpZiAoIXJldCkKKwkJYXRoOWtfaHRjX2luaXRfcmF0ZShwcml2LCBzdGEpOworCWF0aDlrX2h0Y19wc19yZXN0b3JlKHByaXYpOwogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdGg5a19odGNfc3RhX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCit7CisJc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwlhdGg5a19odGNfcHNfd2FrZXVwKHByaXYpOworCXJldCA9IGF0aDlrX2h0Y19yZW1vdmVfc3RhdGlvbihwcml2LCB2aWYsIHN0YSk7CisJYXRoOWtfaHRjX3BzX3Jlc3RvcmUocHJpdik7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGF0aDlrX2h0Y19jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgcXVldWUsCkBAIC0xNDgyLDYgKzE1MjUsNyBAQAogCQlyZXR1cm4gMDsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwlhdGg5a19odGNfcHNfd2FrZXVwKHByaXYpOwogCiAJbWVtc2V0KCZxaSwgMCwgc2l6ZW9mKHN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvKSk7CiAKQEAgLTE0OTksOSArMTU0MywxNiBAQAogCQkgIHBhcmFtcy0+Y3dfbWF4LCBwYXJhbXMtPnR4b3ApOwogCiAJcmV0ID0gYXRoX2h0Y190eHFfdXBkYXRlKHByaXYsIHFudW0sICZxaSk7Ci0JaWYgKHJldCkKKwlpZiAocmV0KSB7CiAJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsICJUWFEgVXBkYXRlIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KIAorCWlmICgocHJpdi0+YWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgJiYKKwkgICAgKHFudW0gPT0gcHJpdi0+aHdxX21hcFtXTUVfQUNfQkVdKSkKKwkJICAgIGF0aDlrX2h0Y19iZWFjb25xX2NvbmZpZyhwcml2KTsKK291dDoKKwlhdGg5a19odGNfcHNfcmVzdG9yZShwcml2KTsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAogCXJldHVybiByZXQ7CkBAIC0xNTc0LDcgKzE2MjUsNiBAQAogCQkJYXRoX3N0YXJ0X2FuaShwcml2KTsKIAkJfSBlbHNlIHsKIAkJCXByaXYtPm9wX2ZsYWdzICY9IH5PUF9BU1NPQ0lBVEVEOwotCQkJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+cHNfd29yayk7CiAJCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmF0aDlrX2FuaV93b3JrKTsKIAkJfQogCX0KQEAgLTE2MzEsNiArMTY4MSw5IEBACiAJCWF0aDlrX2h3X2luaXRfZ2xvYmFsX3NldHRpbmdzKGFoKTsKIAl9CiAKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0hUKQorCQlhdGg5a19odGNfdXBkYXRlX3JhdGUocHJpdiwgdmlmLCBic3NfY29uZik7CisKIAlhdGg5a19odGNfcHNfcmVzdG9yZShwcml2KTsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KQEAgLTE2NDEsNyArMTY5NCw5IEBACiAJdTY0IHRzZjsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwlhdGg5a19odGNfcHNfd2FrZXVwKHByaXYpOwogCXRzZiA9IGF0aDlrX2h3X2dldHRzZjY0KHByaXYtPmFoKTsKKwlhdGg5a19odGNfcHNfcmVzdG9yZShwcml2KTsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAogCXJldHVybiB0c2Y7CkBAIC0xNjUyLDcgKzE3MDcsOSBAQAogCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCWF0aDlrX2h0Y19wc193YWtldXAocHJpdik7CiAJYXRoOWtfaHdfc2V0dHNmNjQocHJpdi0+YWgsIHRzZik7CisJYXRoOWtfaHRjX3BzX3Jlc3RvcmUocHJpdik7CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKQEAgLTE2NjAsMTEgKzE3MTcsMTEgQEAKIHsKIAlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAotCWF0aDlrX2h0Y19wc193YWtldXAocHJpdik7CiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCWF0aDlrX2h0Y19wc193YWtldXAocHJpdik7CiAJYXRoOWtfaHdfcmVzZXRfdHNmKHByaXYtPmFoKTsKLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAlhdGg5a19odGNfcHNfcmVzdG9yZShwcml2KTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIAogc3RhdGljIGludCBhdGg5a19odGNfYW1wZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LApAQCAtMTY3NCw4ICsxNzMxLDggQEAKIAkJCQkgIHUxNiB0aWQsIHUxNiAqc3NuKQogewogCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGg5a19odGNfYWdncl93b3JrICp3b3JrID0gJnByaXYtPmFnZ3Jfd29yazsKIAlzdHJ1Y3QgYXRoOWtfaHRjX3N0YSAqaXN0YTsKKwlpbnQgcmV0ID0gMDsKIAogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBJRUVFODAyMTFfQU1QRFVfUlhfU1RBUlQ6CkBAIC0xNjgzLDI2ICsxNzQwLDI2IEBACiAJY2FzZSBJRUVFODAyMTFfQU1QRFVfUlhfU1RPUDoKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQ6CisJCXJldCA9IGF0aDlrX2h0Y190eF9hZ2dyX29wZXIocHJpdiwgdmlmLCBzdGEsIGFjdGlvbiwgdGlkKTsKKwkJaWYgKCFyZXQpCisJCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZSh2aWYsIHN0YS0+YWRkciwgdGlkKTsKKwkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfU1RPUDoKLQkJaWYgKCEocHJpdi0+b3BfZmxhZ3MgJiBPUF9UWEFHR1IpKQotCQkJcmV0dXJuIC1FTk9UU1VQUDsKLQkJbWVtY3B5KHdvcmstPnN0YV9hZGRyLCBzdGEtPmFkZHIsIEVUSF9BTEVOKTsKLQkJd29yay0+aHcgPSBodzsKLQkJd29yay0+dmlmID0gdmlmOwotCQl3b3JrLT5hY3Rpb24gPSBhY3Rpb247Ci0JCXdvcmstPnRpZCA9IHRpZDsKLQkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhodywgJnByaXYtPmF0aDlrX2FnZ3Jfd29yaywgMCk7CisJCWF0aDlrX2h0Y190eF9hZ2dyX29wZXIocHJpdiwgdmlmLCBzdGEsIGFjdGlvbiwgdGlkKTsKKwkJaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZSh2aWYsIHN0YS0+YWRkciwgdGlkKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfT1BFUkFUSU9OQUw6CiAJCWlzdGEgPSAoc3RydWN0IGF0aDlrX2h0Y19zdGEgKikgc3RhLT5kcnZfcHJpdjsKKwkJc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKIAkJaXN0YS0+dGlkX3N0YXRlW3RpZF0gPSBBR0dSX09QRVJBVElPTkFMOworCQlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWF0aF9wcmludChhdGg5a19od19jb21tb24ocHJpdi0+YWgpLCBBVEhfREJHX0ZBVEFMLAogCQkJICAiVW5rbm93biBBTVBEVSBhY3Rpb25cbiIpOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGF0aDlrX2h0Y19zd19zY2FuX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQpAQCAtMTcyMiw4ICsxNzc5LDggQEAKIHsKIAlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAotCWF0aDlrX2h0Y19wc193YWtldXAocHJpdik7CiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCWF0aDlrX2h0Y19wc193YWtldXAocHJpdik7CiAJc3Bpbl9sb2NrX2JoKCZwcml2LT5iZWFjb25fbG9jayk7CiAJcHJpdi0+b3BfZmxhZ3MgJj0gfk9QX1NDQU5OSU5HOwogCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5iZWFjb25fbG9jayk7CkBAIC0xNzMxLDggKzE3ODgsOCBAQAogCWlmIChwcml2LT5vcF9mbGFncyAmIE9QX0FTU09DSUFURUQpCiAJCWF0aDlrX2h0Y19iZWFjb25fY29uZmlnKHByaXYsIHByaXYtPnZpZik7CiAJYXRoX3N0YXJ0X2FuaShwcml2KTsKLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAlhdGg5a19odGNfcHNfcmVzdG9yZShwcml2KTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIAogc3RhdGljIGludCBhdGg5a19odGNfc2V0X3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB2YWx1ZSkKQEAgLTE3NDYsOCArMTgwMywxMCBAQAogCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCWF0aDlrX2h0Y19wc193YWtldXAocHJpdik7CiAJcHJpdi0+YWgtPmNvdmVyYWdlX2NsYXNzID0gY292ZXJhZ2VfY2xhc3M7CiAJYXRoOWtfaHdfaW5pdF9nbG9iYWxfc2V0dGluZ3MocHJpdi0+YWgpOworCWF0aDlrX2h0Y19wc19yZXN0b3JlKHByaXYpOwogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCkBAIC0xNzU5LDcgKzE4MTgsOCBAQAogCS5yZW1vdmVfaW50ZXJmYWNlICAgPSBhdGg5a19odGNfcmVtb3ZlX2ludGVyZmFjZSwKIAkuY29uZmlnICAgICAgICAgICAgID0gYXRoOWtfaHRjX2NvbmZpZywKIAkuY29uZmlndXJlX2ZpbHRlciAgID0gYXRoOWtfaHRjX2NvbmZpZ3VyZV9maWx0ZXIsCi0JLnN0YV9ub3RpZnkgICAgICAgICA9IGF0aDlrX2h0Y19zdGFfbm90aWZ5LAorCS5zdGFfYWRkICAgICAgICAgICAgPSBhdGg5a19odGNfc3RhX2FkZCwKKwkuc3RhX3JlbW92ZSAgICAgICAgID0gYXRoOWtfaHRjX3N0YV9yZW1vdmUsCiAJLmNvbmZfdHggICAgICAgICAgICA9IGF0aDlrX2h0Y19jb25mX3R4LAogCS5ic3NfaW5mb19jaGFuZ2VkICAgPSBhdGg5a19odGNfYnNzX2luZm9fY2hhbmdlZCwKIAkuc2V0X2tleSAgICAgICAgICAgID0gYXRoOWtfaHRjX3NldF9rZXksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMKaW5kZXggMjU3MWI0NC4uYmQwYjRhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYwpAQCAtMjAsMTkgKzIwLDI5IEBACiAvKiBUWCAqLwogLyoqKioqKi8KIAorI2RlZmluZSBBVEg5S19IVENfSU5JVF9UWFEoc3VidHlwZSkgZG8gewkJCVwKKwkJcWkudHFpX3N1YnR5cGUgPSBzdWJ0eXBlOwkJCVwKKwkJcWkudHFpX2FpZnMgPSBBVEg5S19UWFFfVVNFREVGQVVMVDsJCVwKKwkJcWkudHFpX2N3bWluID0gQVRIOUtfVFhRX1VTRURFRkFVTFQ7CQlcCisJCXFpLnRxaV9jd21heCA9IEFUSDlLX1RYUV9VU0VERUZBVUxUOwkJXAorCQlxaS50cWlfcGh5c0NvbXBCdWYgPSAwOwkJCQlcCisJCXFpLnRxaV9xZmxhZ3MgPSBUWFFfRkxBR19UWEVPTElOVF9FTkFCTEUgfAlcCisJCQlUWFFfRkxBR19UWERFU0NJTlRfRU5BQkxFOwkJXAorCX0gd2hpbGUgKDApCisKIGludCBnZXRfaHdfcW51bSh1MTYgcXVldWUsIGludCAqaHdxX21hcCkKIHsKIAlzd2l0Y2ggKHF1ZXVlKSB7CiAJY2FzZSAwOgotCQlyZXR1cm4gaHdxX21hcFtBVEg5S19XTUVfQUNfVk9dOworCQlyZXR1cm4gaHdxX21hcFtXTUVfQUNfVk9dOwogCWNhc2UgMToKLQkJcmV0dXJuIGh3cV9tYXBbQVRIOUtfV01FX0FDX1ZJXTsKKwkJcmV0dXJuIGh3cV9tYXBbV01FX0FDX1ZJXTsKIAljYXNlIDI6Ci0JCXJldHVybiBod3FfbWFwW0FUSDlLX1dNRV9BQ19CRV07CisJCXJldHVybiBod3FfbWFwW1dNRV9BQ19CRV07CiAJY2FzZSAzOgotCQlyZXR1cm4gaHdxX21hcFtBVEg5S19XTUVfQUNfQktdOworCQlyZXR1cm4gaHdxX21hcFtXTUVfQUNfQktdOwogCWRlZmF1bHQ6Ci0JCXJldHVybiBod3FfbWFwW0FUSDlLX1dNRV9BQ19CRV07CisJCXJldHVybiBod3FfbWFwW1dNRV9BQ19CRV07CiAJfQogfQogCkBAIC03MSw3ICs4MSw3IEBACiAJc3RydWN0IGF0aDlrX2h0Y192aWYgKmF2cDsKIAlzdHJ1Y3QgYXRoOWtfaHRjX3R4X2N0bCB0eF9jdGw7CiAJZW51bSBodGNfZW5kcG9pbnRfaWQgZXBpZDsKLQl1MTYgcW51bSwgaHdfcW51bTsKKwl1MTYgcW51bTsKIAlfX2xlMTYgZmM7CiAJdTggKnR4X2ZoZHI7CiAJdTggc3RhX2lkeDsKQEAgLTEzMSwyMCArMTQxLDIzIEBACiAJCW1lbWNweSh0eF9maGRyLCAodTggKikgJnR4X2hkciwgc2l6ZW9mKHR4X2hkcikpOwogCiAJCXFudW0gPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKLQkJaHdfcW51bSA9IGdldF9od19xbnVtKHFudW0sIHByaXYtPmh3cV9tYXApOwogCi0JCXN3aXRjaCAoaHdfcW51bSkgeworCQlzd2l0Y2ggKHFudW0pIHsKIAkJY2FzZSAwOgotCQkJZXBpZCA9IHByaXYtPmRhdGFfYmVfZXA7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJZXBpZCA9IHByaXYtPmRhdGFfdmlfZXA7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgorCQkJVFhfUVNUQVRfSU5DKFdNRV9BQ19WTyk7CiAJCQllcGlkID0gcHJpdi0+ZGF0YV92b19lcDsKIAkJCWJyZWFrOwogCQljYXNlIDE6CisJCQlUWF9RU1RBVF9JTkMoV01FX0FDX1ZJKTsKKwkJCWVwaWQgPSBwcml2LT5kYXRhX3ZpX2VwOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCVRYX1FTVEFUX0lOQyhXTUVfQUNfQkUpOworCQkJZXBpZCA9IHByaXYtPmRhdGFfYmVfZXA7CisJCQlicmVhazsKKwkJY2FzZSAzOgogCQlkZWZhdWx0OgorCQkJVFhfUVNUQVRfSU5DKFdNRV9BQ19CSyk7CiAJCQllcGlkID0gcHJpdi0+ZGF0YV9ia19lcDsKIAkJCWJyZWFrOwogCQl9CkBAIC0xNzQsNiArMTg3LDE5IEBACiAJcmV0dXJuIGh0Y19zZW5kKHByaXYtPmh0Yywgc2tiLCBlcGlkLCAmdHhfY3RsKTsKIH0KIAorc3RhdGljIGJvb2wgYXRoOWtfaHRjX2NoZWNrX3R4X2FnZ3Ioc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAorCQkJCSAgICBzdHJ1Y3QgYXRoOWtfaHRjX3N0YSAqaXN0YSwgdTggdGlkKQoreworCWJvb2wgcmV0ID0gZmFsc2U7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCWlmICgodGlkIDwgQVRIOUtfSFRDX01BWF9USUQpICYmIChpc3RhLT50aWRfc3RhdGVbdGlkXSA9PSBBR0dSX1NUT1ApKQorCQlyZXQgPSB0cnVlOworCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKIHZvaWQgYXRoOWtfdHhfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqKWRhdGE7CkBAIC0yMDMsOCArMjI5LDcgQEAKIAkJLyogQ2hlY2sgaWYgd2UgbmVlZCB0byBzdGFydCBhZ2dyZWdhdGlvbiAqLwogCiAJCWlmIChzdGEgJiYgY29uZl9pc19odCgmcHJpdi0+aHctPmNvbmYpICYmCi0JCSAgICAocHJpdi0+b3BfZmxhZ3MgJiBPUF9UWEFHR1IpCi0JCSAgICAmJiAhKHNrYi0+cHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfUEFFKSkpIHsKKwkJICAgICEoc2tiLT5wcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpKSkgewogCQkJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKIAkJCQl1OCAqcWMsIHRpZDsKIAkJCQlzdHJ1Y3QgYXRoOWtfaHRjX3N0YSAqaXN0YTsKQEAgLTIxMywxMCArMjM4LDExIEBACiAJCQkJdGlkID0gcWNbMF0gJiAweGY7CiAJCQkJaXN0YSA9IChzdHJ1Y3QgYXRoOWtfaHRjX3N0YSAqKXN0YS0+ZHJ2X3ByaXY7CiAKLQkJCQlpZiAoKHRpZCA8IEFUSDlLX0hUQ19NQVhfVElEKSAmJgotCQkJCSAgICBpc3RhLT50aWRfc3RhdGVbdGlkXSA9PSBBR0dSX1NUT1ApIHsKKwkJCQlpZiAoYXRoOWtfaHRjX2NoZWNrX3R4X2FnZ3IocHJpdiwgaXN0YSwgdGlkKSkgewogCQkJCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbihzdGEsIHRpZCk7CisJCQkJCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CiAJCQkJCWlzdGEtPnRpZF9zdGF0ZVt0aWRdID0gQUdHUl9QUk9HUkVTUzsKKwkJCQkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOwogCQkJCX0KIAkJCX0KIAkJfQpAQCAtMjg0LDggKzMxMCw3IEBACiAKIH0KIAotYm9vbCBhdGg5a19odGNfdHhxX3NldHVwKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKLQkJCSBlbnVtIGF0aDlrX3R4X3F1ZXVlX3N1YnR5cGUgc3VidHlwZSkKK2Jvb2wgYXRoOWtfaHRjX3R4cV9zZXR1cChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIGludCBzdWJ0eXBlKQogewogCXN0cnVjdCBhdGhfaHcgKmFoID0gcHJpdi0+YWg7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CkBAIC0yOTMsMTMgKzMxOCw3IEBACiAJaW50IHFudW07CiAKIAltZW1zZXQoJnFpLCAwLCBzaXplb2YocWkpKTsKLQotCXFpLnRxaV9zdWJ0eXBlID0gc3VidHlwZTsKLQlxaS50cWlfYWlmcyA9IEFUSDlLX1RYUV9VU0VERUZBVUxUOwotCXFpLnRxaV9jd21pbiA9IEFUSDlLX1RYUV9VU0VERUZBVUxUOwotCXFpLnRxaV9jd21heCA9IEFUSDlLX1RYUV9VU0VERUZBVUxUOwotCXFpLnRxaV9waHlzQ29tcEJ1ZiA9IDA7Ci0JcWkudHFpX3FmbGFncyA9IFRYUV9GTEFHX1RYRU9MSU5UX0VOQUJMRSB8IFRYUV9GTEFHX1RYREVTQ0lOVF9FTkFCTEU7CisJQVRIOUtfSFRDX0lOSVRfVFhRKHN1YnR5cGUpOwogCiAJcW51bSA9IGF0aDlrX2h3X3NldHVwdHhxdWV1ZShwcml2LT5haCwgQVRIOUtfVFhfUVVFVUVfREFUQSwgJnFpKTsKIAlpZiAocW51bSA9PSAtMSkKQEAgLTMxNyw2ICszMzYsMTYgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAoraW50IGF0aDlrX2h0Y19jYWJxX3NldHVwKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyBxaTsKKworCW1lbXNldCgmcWksIDAsIHNpemVvZihxaSkpOworCUFUSDlLX0hUQ19JTklUX1RYUSgwKTsKKworCXJldHVybiBhdGg5a19od19zZXR1cHR4cXVldWUocHJpdi0+YWgsIEFUSDlLX1RYX1FVRVVFX0NBQiwgJnFpKTsKK30KKwogLyoqKioqKi8KIC8qIFJYICovCiAvKioqKioqLwpAQCAtMzg3LDkgKzQxNiw2IEBACiAJLyogY29uZmlndXJlIG9wZXJhdGlvbmFsIG1vZGUgKi8KIAlhdGg5a19od19zZXRvcG1vZGUoYWgpOwogCi0JLyogSGFuZGxlIGFueSBsaW5rLWxldmVsIGFkZHJlc3MgY2hhbmdlLiAqLwotCWF0aDlrX2h3X3NldG1hYyhhaCwgY29tbW9uLT5tYWNhZGRyKTsKLQogCS8qIGNhbGN1bGF0ZSBhbmQgaW5zdGFsbCBtdWx0aWNhc3QgZmlsdGVyICovCiAJbWZpbHRbMF0gPSBtZmlsdFsxXSA9IH4wOwogCWF0aDlrX2h3X3NldG1jYXN0ZmlsdGVyKGFoLCBtZmlsdFswXSwgbWZpbHRbMV0pOwpAQCAtMzk5LDcgKzQyNSw3IEBACiB7CiAJYXRoOWtfaHdfcnhlbmEocHJpdi0+YWgpOwogCWF0aDlrX2h0Y19vcG1vZGVfaW5pdChwcml2KTsKLQlhdGg5a19od19zdGFydHBjdXJlY2VpdmUocHJpdi0+YWgpOworCWF0aDlrX2h3X3N0YXJ0cGN1cmVjZWl2ZShwcml2LT5haCwgKHByaXYtPm9wX2ZsYWdzICYgT1BfU0NBTk5JTkcpKTsKIAlwcml2LT5yeC5sYXN0X3Jzc2kgPSBBVEhfUlNTSV9EVU1NWV9NQVJLRVI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfaHN0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2hzdC5jCmluZGV4IDA2NDM5N2YuLjcwNWMwZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfaHN0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19oc3QuYwpAQCAtODksNyArODksNiBAQAogCXN0cnVjdCBodGNfZW5kcG9pbnQgKmVuZHBvaW50OwogCXN0cnVjdCBodGNfcmVhZHlfbXNnICpodGNfcmVhZHlfbXNnID0gKHN0cnVjdCBodGNfcmVhZHlfbXNnICopIGJ1ZjsKIAotCXRhcmdldC0+Y3JlZGl0cyA9IGJlMTZfdG9fY3B1KGh0Y19yZWFkeV9tc2ctPmNyZWRpdHMpOwogCXRhcmdldC0+Y3JlZGl0X3NpemUgPSBiZTE2X3RvX2NwdShodGNfcmVhZHlfbXNnLT5jcmVkaXRfc2l6ZSk7CiAKIAllbmRwb2ludCA9ICZ0YXJnZXQtPmVuZHBvaW50W0VORFBPSU5UMF07CkBAIC0xNTksNyArMTU4LDcgQEAKIAogCWNwX21zZy0+bWVzc2FnZV9pZCA9IGNwdV90b19iZTE2KEhUQ19NU0dfQ09ORklHX1BJUEVfSUQpOwogCWNwX21zZy0+cGlwZV9pZCA9IFVTQl9XTEFOX1RYX1BJUEU7Ci0JY3BfbXNnLT5jcmVkaXRzID0gMjg7CisJY3BfbXNnLT5jcmVkaXRzID0gdGFyZ2V0LT5jcmVkaXRzOwogCiAJdGFyZ2V0LT5odGNfZmxhZ3MgfD0gSFRDX09QX0NPTkZJR19QSVBFX0NSRURJVFM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody1vcHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody1vcHMuaAppbmRleCA2MjQ0MjJhLi5mZmVjYmFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHctb3BzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LW9wcy5oCkBAIC0xMjgsNiArMTI4LDE3IEBACiAJYXRoOWtfaHdfb3BzKGFoKS0+c2V0MTFuX3ZpcnR1YWxtb3JlZnJhZyhhaCwgZHMsIHZtZik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19od19wcm9jbWliZXZlbnQoc3RydWN0IGF0aF9odyAqYWgpCit7CisJYXRoOWtfaHdfb3BzKGFoKS0+YW5pX3Byb2NfbWliX2V2ZW50KGFoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h3X2FuaV9tb25pdG9yKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3sKKwlhdGg5a19od19vcHMoYWgpLT5hbmlfbW9uaXRvcihhaCwgY2hhbik7Cit9CisKIC8qIFByaXZhdGUgaGFyZHdhcmUgY2FsbCBvcHMgKi8KIAogLyogUEhZIG9wcyAqLwpAQCAtMjUzLDEyICsyNjQsNiBAQAogCWF0aDlrX2h3X3ByaXZhdGVfb3BzKGFoKS0+ZG9fZ2V0bmYoYWgsIG5mYXJyYXkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfaHdfbG9hZG5mKHN0cnVjdCBhdGhfaHcgKmFoLAotCQkJCSAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCWF0aDlrX2h3X3ByaXZhdGVfb3BzKGFoKS0+bG9hZG5mKGFoLCBjaGFuKTsKLX0KLQogc3RhdGljIGlubGluZSBib29sIGF0aDlrX2h3X2luaXRfY2FsKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7CkBAIC0yNzcsNCArMjgyLDkgQEAKIAlyZXR1cm4gYXRoOWtfaHdfcHJpdmF0ZV9vcHMoYWgpLT5pc2NhbF9zdXBwb3J0ZWQoYWgsIGNhbFR5cGUpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfYW5pX3Jlc2V0KHN0cnVjdCBhdGhfaHcgKmFoLCBib29sIGlzX3NjYW5uaW5nKQoreworCWF0aDlrX2h3X3ByaXZhdGVfb3BzKGFoKS0+YW5pX3Jlc2V0KGFoLCBpc19zY2FubmluZyk7Cit9CisKICNlbmRpZiAvKiBBVEg5S19IV19PUFNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwppbmRleCBjMzNmMTdkLi44ZDI5MWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwpAQCAtMjMsMTEgKzIzLDYgQEAKICNpbmNsdWRlICJyYy5oIgogI2luY2x1ZGUgImFyOTAwM19tYWMuaCIKIAotI2RlZmluZSBBVEg5S19DTE9DS19SQVRFX0NDSwkJMjIKLSNkZWZpbmUgQVRIOUtfQ0xPQ0tfUkFURV81R0haX09GRE0JNDAKLSNkZWZpbmUgQVRIOUtfQ0xPQ0tfUkFURV8yR0haX09GRE0JNDQKLSNkZWZpbmUgQVRIOUtfQ0xPQ0tfRkFTVF9SQVRFXzVHSFpfT0ZETSA0NAotCiBzdGF0aWMgYm9vbCBhdGg5a19od19zZXRfcmVzZXRfcmVnKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgdHlwZSk7CiAKIE1PRFVMRV9BVVRIT1IoIkF0aGVyb3MgQ29tbXVuaWNhdGlvbnMiKTsKQEAgLTgwLDYgKzc1LDE1IEBACiAJYXRoOWtfaHdfcHJpdmF0ZV9vcHMoYWgpLT5pbml0X21vZGVfZ2Fpbl9yZWdzKGFoKTsKIH0KIAorc3RhdGljIHZvaWQgYXRoOWtfaHdfYW5pX2NhY2hlX2luaV9yZWdzKHN0cnVjdCBhdGhfaHcgKmFoKQoreworCS8qIFlvdSB3aWxsIG5vdCBoYXZlIHRoaXMgY2FsbGJhY2sgaWYgdXNpbmcgdGhlIG9sZCBBTkkgKi8KKwlpZiAoIWF0aDlrX2h3X3ByaXZhdGVfb3BzKGFoKS0+YW5pX2NhY2hlX2luaV9yZWdzKQorCQlyZXR1cm47CisKKwlhdGg5a19od19wcml2YXRlX29wcyhhaCktPmFuaV9jYWNoZV9pbmlfcmVncyhhaCk7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKi8KIC8qIEhlbHBlciBGdW5jdGlvbnMgKi8KIC8qKioqKioqKioqKioqKioqKioqKi8KQEAgLTM3MSwxMyArMzc1LDcgQEAKIAlhaC0+Y29uZmlnLm9mZG1fdHJpZ19oaWdoID0gNTAwOwogCWFoLT5jb25maWcuY2NrX3RyaWdfaGlnaCA9IDIwMDsKIAlhaC0+Y29uZmlnLmNja190cmlnX2xvdyA9IDEwMDsKLQotCS8qCi0JICogRm9yIG5vdyBBTkkgaXMgZGlzYWJsZWQgZm9yIEFSOTAwMywgaXQgaXMgc3RpbGwKLQkgKiBiZWluZyB0ZXN0ZWQuCi0JICovCi0JaWYgKCFBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKQotCQlhaC0+Y29uZmlnLmVuYWJsZV9hbmkgPSAxOworCWFoLT5jb25maWcuZW5hYmxlX2FuaSA9IHRydWU7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJfRUVQUk9NX01PREFMX1NQVVJTOyBpKyspIHsKIAkJYWgtPmNvbmZpZy5zcHVyY2hhbnNbaV1bMF0gPSBBUl9OT19TUFVSOwpAQCAtMzkwLDEyICszODgsNyBAQAogCQlhaC0+Y29uZmlnLmh0X2VuYWJsZSA9IDA7CiAKIAlhaC0+Y29uZmlnLnJ4X2ludHJfbWl0aWdhdGlvbiA9IHRydWU7Ci0KLQkvKgotCSAqIFR4IElRIENhbGlicmF0aW9uIChhaC0+Y29uZmlnLnR4X2lxX2NhbGlicmF0aW9uKSBpcyBvbmx5Ci0JICogdXNlZCBieSBBUjkwMDMsIGJ1dCBpdCBpcyBzaG93aW5nIHJlbGlhYmlsaXR5IGlzc3Vlcy4KLQkgKiBJdCB3aWxsIHRha2UgYSB3aGlsZSB0byBmaXggc28gdGhpcyBpcyBjdXJyZW50bHkgZGlzYWJsZWQuCi0JICovCisJYWgtPmNvbmZpZy5wY2llU2VyRGVzV3JpdGUgPSB0cnVlOwogCiAJLyoKIAkgKiBXZSBuZWVkIHRoaXMgZm9yIFBDSSBkZXZpY2VzIG9ubHkgKENhcmRidXMsIFBDSSwgbWluaVBDSSkKQEAgLTQzMyw3ICs0MjYsOSBAQAogCQlhaC0+YWhfZmxhZ3MgPSBBSF9VU0VfRUVQUk9NOwogCiAJYWgtPmF0aW1fd2luZG93ID0gMDsKLQlhaC0+c3RhX2lkMV9kZWZhdWx0cyA9IEFSX1NUQV9JRDFfQ1JQVF9NSUNfRU5BQkxFOworCWFoLT5zdGFfaWQxX2RlZmF1bHRzID0KKwkJQVJfU1RBX0lEMV9DUlBUX01JQ19FTkFCTEUgfAorCQlBUl9TVEFfSUQxX01DQVNUX0tTUkNIOwogCWFoLT5iZWFjb25faW50ZXJ2YWwgPSAxMDA7CiAJYWgtPmVuYWJsZV8zMmtIel9jbG9jayA9IERPTlRfVVNFXzMyS0haOwogCWFoLT5zbG90dGltZSA9ICh1MzIpIC0xOwpAQCAtNTM3LDcgKzUzMiw4IEBACiAKIAlpZiAoYWgtPmNvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9PSBTRVJfUkVHX01PREVfQVVUTykgewogCQlpZiAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0kgfHwKLQkJICAgIChBUl9TUkVWXzkyODAoYWgpICYmICFhaC0+aXNfcGNpZXhwcmVzcykpIHsKKwkJICAgICgoQVJfU1JFVl85MTYwKGFoKSB8fCBBUl9TUkVWXzkyODAoYWgpKSAmJgorCQkgICAgICFhaC0+aXNfcGNpZXhwcmVzcykpIHsKIAkJCWFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPQogCQkJCVNFUl9SRUdfTU9ERV9PTjsKIAkJfSBlbHNlIHsKQEAgLTU3MSwyOCArNTY3LDE5IEBACiAJYWgtPmFuaV9mdW5jdGlvbiA9IEFUSDlLX0FOSV9BTEw7CiAJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkgJiYgIUFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkpCiAJCWFoLT5hbmlfZnVuY3Rpb24gJj0gfkFUSDlLX0FOSV9OT0lTRV9JTU1VTklUWV9MRVZFTDsKKwlpZiAoIUFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkpCisJCWFoLT5hbmlfZnVuY3Rpb24gJj0gfkFUSDlLX0FOSV9NUkNfQ0NLOwogCiAJYXRoOWtfaHdfaW5pdF9tb2RlX3JlZ3MoYWgpOwogCiAJLyoKLQkgKiBDb25maWdpcmUgUENJRSBhZnRlciBJbmkgaW5pdC4gU0VSREVTIHZhbHVlcyBub3cgY29tZSBmcm9tIGluaSBmaWxlCi0JICogVGhpcyBlbmFibGVzIFBDSWUgbG93IHBvd2VyIG1vZGUuCisJICogUmVhZCBiYWNrIEFSX1dBIGludG8gYSBwZXJtYW5lbnQgY29weSBhbmQgc2V0IGJpdHMgMTQgYW5kIDE3LgorCSAqIFdlIG5lZWQgdG8gZG8gdGhpcyB0byBhdm9pZCBSTVcgb2YgdGhpcyByZWdpc3Rlci4gV2UgY2Fubm90CisJICogcmVhZCB0aGUgcmVnIHdoZW4gY2hpcCBpcyBhc2xlZXAuCiAJICovCi0JaWYgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkpIHsKLQkJdTMyIHJlZ3ZhbDsKLQkJdW5zaWduZWQgaW50IGk7Ci0KLQkJLyogU2V0IEJpdHMgMTYgYW5kIDE3IGluIHRoZSBBUl9XQSByZWdpc3Rlci4gKi8KLQkJcmVndmFsID0gUkVHX1JFQUQoYWgsIEFSX1dBKTsKLQkJcmVndmFsIHw9IDB4MDAwMzAwMDA7Ci0JCVJFR19XUklURShhaCwgQVJfV0EsIHJlZ3ZhbCk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGFoLT5pbmlQY2llU2VyZGVzTG93UG93ZXIuaWFfcm93czsgaSsrKSB7Ci0JCQlSRUdfV1JJVEUoYWgsCi0JCQkJICBJTklfUkEoJmFoLT5pbmlQY2llU2VyZGVzTG93UG93ZXIsIGksIDApLAotCQkJCSAgSU5JX1JBKCZhaC0+aW5pUGNpZVNlcmRlc0xvd1Bvd2VyLCBpLCAxKSk7Ci0JCX0KLQl9CisJYWgtPldBUmVnVmFsID0gUkVHX1JFQUQoYWgsIEFSX1dBKTsKKwlhaC0+V0FSZWdWYWwgfD0gKEFSX1dBX0QzX0wxX0RJU0FCTEUgfAorCQkJIEFSX1dBX0FTUE1fVElNRVJfQkFTRURfRElTQUJMRSk7CiAKIAlpZiAoYWgtPmlzX3BjaWV4cHJlc3MpCiAJCWF0aDlrX2h3X2NvbmZpZ3BjaXBvd2Vyc2F2ZShhaCwgMCwgMCk7CkBAIC02MjMsMTAgKzYxMCw4IEBACiAJZWxzZQogCQlhaC0+dHhfdHJpZ19sZXZlbCA9IChBUl9GVFJJR181MTJCID4+IEFSX0ZUUklHX1MpOwogCi0JaWYgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkpCi0JCWFyOTAwM19od19zZXRfbmZfbGltaXRzKGFoKTsKLQogCWF0aDlrX2luaXRfbmZjYWxfaGlzdF9idWZmZXIoYWgpOworCWFoLT5iYl93YXRjaGRvZ190aW1lb3V0X21zID0gMjU7CiAKIAljb21tb24tPnN0YXRlID0gQVRIX0hXX0lOSVRJQUxJWkVEOwogCkBAIC0xMDEyLDYgKzk5NywxMSBAQAogCiAJRU5BQkxFX1JFR1dSSVRFX0JVRkZFUihhaCk7CiAKKwlpZiAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSkgeworCQlSRUdfV1JJVEUoYWgsIEFSX1dBLCBhaC0+V0FSZWdWYWwpOworCQl1ZGVsYXkoMTApOworCX0KKwogCVJFR19XUklURShhaCwgQVJfUlRDX0ZPUkNFX1dBS0UsIEFSX1JUQ19GT1JDRV9XQUtFX0VOIHwKIAkJICBBUl9SVENfRk9SQ0VfV0FLRV9PTl9JTlQpOwogCkBAIC0xMDY2LDYgKzEwNTYsMTEgQEAKIHsKIAlFTkFCTEVfUkVHV1JJVEVfQlVGRkVSKGFoKTsKIAorCWlmIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKSB7CisJCVJFR19XUklURShhaCwgQVJfV0EsIGFoLT5XQVJlZ1ZhbCk7CisJCXVkZWxheSgxMCk7CisJfQorCiAJUkVHX1dSSVRFKGFoLCBBUl9SVENfRk9SQ0VfV0FLRSwgQVJfUlRDX0ZPUkNFX1dBS0VfRU4gfAogCQkgIEFSX1JUQ19GT1JDRV9XQUtFX09OX0lOVCk7CiAKQEAgLTEwNzMsNiArMTA2OCw3IEBACiAJCVJFR19XUklURShhaCwgQVJfUkMsIEFSX1JDX0FIQik7CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1JUQ19SRVNFVCwgMCk7CisJdWRlbGF5KDIpOwogCiAJUkVHV1JJVEVfQlVGRkVSX0ZMVVNIKGFoKTsKIAlESVNBQkxFX1JFR1dSSVRFX0JVRkZFUihhaCk7CkBAIC0xMTAyLDYgKzEwOTgsMTEgQEAKIAogc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X3Jlc2V0X3JlZyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHR5cGUpCiB7CisJaWYgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkpIHsKKwkJUkVHX1dSSVRFKGFoLCBBUl9XQSwgYWgtPldBUmVnVmFsKTsKKwkJdWRlbGF5KDEwKTsKKwl9CisKIAlSRUdfV1JJVEUoYWgsIEFSX1JUQ19GT1JDRV9XQUtFLAogCQkgIEFSX1JUQ19GT1JDRV9XQUtFX0VOIHwgQVJfUlRDX0ZPUkNFX1dBS0VfT05fSU5UKTsKIApAQCAtMTIzMiw5ICsxMjMzLDExIEBACiAKIAlpZiAoIWFoLT5jaGlwX2Z1bGxzbGVlcCkgewogCQlhdGg5a19od19hYm9ydHBjdXJlY3YoYWgpOwotCQlpZiAoIWF0aDlrX2h3X3N0b3BkbWFyZWN2KGFoKSkKKwkJaWYgKCFhdGg5a19od19zdG9wZG1hcmVjdihhaCkpIHsKIAkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfWE1JVCwKIAkJCQkiRmFpbGVkIHRvIHN0b3AgcmVjZWl2ZSBkbWFcbiIpOworCQkJYkNoYW5uZWxDaGFuZ2UgPSBmYWxzZTsKKwkJfQogCX0KIAogCWlmICghYXRoOWtfaHdfc2V0cG93ZXIoYWgsIEFUSDlLX1BNX0FXQUtFKSkKQEAgLTEyNjUsNyArMTI2OCw4IEBACiAJbWFjU3RhSWQxID0gUkVHX1JFQUQoYWgsIEFSX1NUQV9JRDEpICYgQVJfU1RBX0lEMV9CQVNFX1JBVEVfMTFCOwogCiAJLyogRm9yIGNoaXBzIG9uIHdoaWNoIFJUQyByZXNldCBpcyBkb25lLCBzYXZlIFRTRiBiZWZvcmUgaXQgZ2V0cyBjbGVhcmVkICovCi0JaWYgKEFSX1NSRVZfOTI4MChhaCkgJiYgYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9PTF9QV1JDVFJMKSkKKwlpZiAoQVJfU1JFVl85MTAwKGFoKSB8fAorCSAgICAoQVJfU1JFVl85MjgwKGFoKSAmJiBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX09MX1BXUkNUUkwpKSkKIAkJdHNmID0gYXRoOWtfaHdfZ2V0dHNmNjQoYWgpOwogCiAJc2F2ZUxlZFN0YXRlID0gUkVHX1JFQUQoYWgsIEFSX0NGR19MRUQpICYKQEAgLTEyOTcsMTYgKzEzMDEsMzAgQEAKIAl9CiAKIAkvKiBSZXN0b3JlIFRTRiAqLwotCWlmICh0c2YgJiYgQVJfU1JFVl85MjgwKGFoKSAmJiBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX09MX1BXUkNUUkwpKQorCWlmICh0c2YpCiAJCWF0aDlrX2h3X3NldHRzZjY0KGFoLCB0c2YpOwogCiAJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCiAJCVJFR19TRVRfQklUKGFoLCBBUl9HUElPX0lOUFVUX0VOX1ZBTCwgQVJfR1BJT19KVEFHX0RJU0FCTEUpOwogCisJaWYgKCFBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKQorCQlhcjkwMDJfaHdfZW5hYmxlX2FzeW5jX2ZpZm8oYWgpOworCiAJciA9IGF0aDlrX2h3X3Byb2Nlc3NfaW5pKGFoLCBjaGFuKTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKKwkvKgorCSAqIFNvbWUgQVI5MXh4IFNvQyBkZXZpY2VzIGZyZXF1ZW50bHkgZmFpbCB0byBhY2NlcHQgVFNGIHdyaXRlcworCSAqIHJpZ2h0IGFmdGVyIHRoZSBjaGlwIHJlc2V0LiBXaGVuIHRoYXQgaGFwcGVucywgd3JpdGUgYSBuZXcKKwkgKiB2YWx1ZSBhZnRlciB0aGUgaW5pdHZhbHMgaGF2ZSBiZWVuIGFwcGxpZWQsIHdpdGggYW4gb2Zmc2V0CisJICogYmFzZWQgb24gbWVhc3VyZWQgdGltZSBkaWZmZXJlbmNlCisJICovCisJaWYgKEFSX1NSRVZfOTEwMChhaCkgJiYgKGF0aDlrX2h3X2dldHRzZjY0KGFoKSA8IHRzZikpIHsKKwkJdHNmICs9IDE1MDA7CisJCWF0aDlrX2h3X3NldHRzZjY0KGFoLCB0c2YpOworCX0KKwogCS8qIFNldHVwIE1GUCBvcHRpb25zIGZvciBDQ01QICovCiAJaWYgKEFSX1NSRVZfOTI4MF8yMF9PUl9MQVRFUihhaCkpIHsKIAkJLyogTWFzayBSZXRyeShiMTEpLCBQd3JNZ3QoYjEyKSwgTW9yZURhdGEoYjEzKSB0byAwIGluIG1nbXQKQEAgLTEzNjcsNiArMTM4NSw3IEBACiAJCWF0aDlrX2h3X3Jlc2V0dHhxdWV1ZShhaCwgaSk7CiAKIAlhdGg5a19od19pbml0X2ludGVycnVwdF9tYXNrcyhhaCwgYWgtPm9wbW9kZSk7CisJYXRoOWtfaHdfYW5pX2NhY2hlX2luaV9yZWdzKGFoKTsKIAlhdGg5a19od19pbml0X3FvcyhhaCk7CiAKIAlpZiAoYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9SRlNJTEVOVCkKQEAgLTEzNzUsNyArMTM5NCw3IEBACiAJYXRoOWtfaHdfaW5pdF9nbG9iYWxfc2V0dGluZ3MoYWgpOwogCiAJaWYgKCFBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKSB7Ci0JCWFyOTAwMl9od19lbmFibGVfYXN5bmNfZmlmbyhhaCk7CisJCWFyOTAwMl9od191cGRhdGVfYXN5bmNfZmlmbyhhaCk7CiAJCWFyOTAwMl9od19lbmFibGVfd2VwX2FnZ3JlZ2F0aW9uKGFoKTsKIAl9CiAKQEAgLTE0MjYsOSArMTQ0NSwxMyBAQAogCQkJCSJTZXR0aW5nIENGRyAweCV4XG4iLCBSRUdfUkVBRChhaCwgQVJfQ0ZHKSk7CiAJCX0KIAl9IGVsc2UgewotCQkvKiBDb25maWd1cmUgQVI5MjcxIHRhcmdldCBXTEFOICovCi0gICAgICAgICAgICAgICAgaWYgKEFSX1NSRVZfOTI3MShhaCkpCi0JCQlSRUdfV1JJVEUoYWgsIEFSX0NGRywgQVJfQ0ZHX1NXUkIgfCBBUl9DRkdfU1dUQik7CisJCWlmIChjb21tb24tPmJ1c19vcHMtPmF0aF9idXNfdHlwZSA9PSBBVEhfVVNCKSB7CisJCQkvKiBDb25maWd1cmUgQVI5MjcxIHRhcmdldCBXTEFOICovCisJCQlpZiAoQVJfU1JFVl85MjcxKGFoKSkKKwkJCQlSRUdfV1JJVEUoYWgsIEFSX0NGRywgQVJfQ0ZHX1NXUkIgfCBBUl9DRkdfU1dUQik7CisJCQllbHNlCisJCQkJUkVHX1dSSVRFKGFoLCBBUl9DRkcsIEFSX0NGR19TV1REIHwgQVJfQ0ZHX1NXUkQpOworCQl9CiAjaWZkZWYgX19CSUdfRU5ESUFOCiAgICAgICAgICAgICAgICAgZWxzZQogCQkJUkVHX1dSSVRFKGFoLCBBUl9DRkcsIEFSX0NGR19TV1REIHwgQVJfQ0ZHX1NXUkQpOwpAQCAtMTQ0MSw2ICsxNDY0LDcgQEAKIAlpZiAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSkgewogCQlhdGg5a19od19sb2FkbmYoYWgsIGN1cmNoYW4pOwogCQlhdGg5a19od19zdGFydF9uZmNhbChhaCk7CisJCWFyOTAwM19od19iYl93YXRjaGRvZ19jb25maWcoYWgpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTQ4Niw5ICsxNTEwLDEwIEBACiB9CiBFWFBPUlRfU1lNQk9MKGF0aDlrX2h3X2tleXJlc2V0KTsKIAotYm9vbCBhdGg5a19od19rZXlzZXRtYWMoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBlbnRyeSwgY29uc3QgdTggKm1hYykKK3N0YXRpYyBib29sIGF0aDlrX2h3X2tleXNldG1hYyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGVudHJ5LCBjb25zdCB1OCAqbWFjKQogewogCXUzMiBtYWNIaSwgbWFjTG87CisJdTMyIHVuaWNhc3RfZmxhZyA9IEFSX0tFWVRBQkxFX1ZBTElEOwogCiAJaWYgKGVudHJ5ID49IGFoLT5jYXBzLmtleWNhY2hlX3NpemUpIHsKIAkJYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihhaCksIEFUSF9EQkdfRkFUQUwsCkBAIC0xNDk3LDYgKzE1MjIsMTYgQEAKIAl9CiAKIAlpZiAobWFjICE9IE5VTEwpIHsKKwkJLyoKKwkJICogQVJfS0VZVEFCTEVfVkFMSUQgaW5kaWNhdGVzIHRoYXQgdGhlIGFkZHJlc3MgaXMgYSB1bmljYXN0CisJCSAqIGFkZHJlc3MsIHdoaWNoIG11c3QgbWF0Y2ggdGhlIHRyYW5zbWl0dGVyIGFkZHJlc3MgZm9yCisJCSAqIGRlY3J5cHRpbmcgZnJhbWVzLgorCQkgKiBOb3Qgc2V0dGluZyB0aGlzIGJpdCBhbGxvd3MgdGhlIGhhcmR3YXJlIHRvIHVzZSB0aGUga2V5CisJCSAqIGZvciBtdWx0aWNhc3QgZnJhbWUgZGVjcnlwdGlvbi4KKwkJICovCisJCWlmIChtYWNbMF0gJiAweDAxKQorCQkJdW5pY2FzdF9mbGFnID0gMDsKKwogCQltYWNIaSA9IChtYWNbNV0gPDwgOCkgfCBtYWNbNF07CiAJCW1hY0xvID0gKG1hY1szXSA8PCAyNCkgfAogCQkJKG1hY1syXSA8PCAxNikgfApAQCAtMTUwOSwxMSArMTU0NCwxMCBAQAogCQltYWNMbyA9IG1hY0hpID0gMDsKIAl9CiAJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9NQUMwKGVudHJ5KSwgbWFjTG8pOwotCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfTUFDMShlbnRyeSksIG1hY0hpIHwgQVJfS0VZVEFCTEVfVkFMSUQpOworCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfTUFDMShlbnRyeSksIG1hY0hpIHwgdW5pY2FzdF9mbGFnKTsKIAogCXJldHVybiB0cnVlOwogfQotRVhQT1JUX1NZTUJPTChhdGg5a19od19rZXlzZXRtYWMpOwogCiBib29sIGF0aDlrX2h3X3NldF9rZXljYWNoZV9lbnRyeShzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGVudHJ5LAogCQkJCSBjb25zdCBzdHJ1Y3QgYXRoOWtfa2V5dmFsICprLApAQCAtMTcxNCwxNyArMTc0OCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGF0aDlrX2h3X3NldF9rZXljYWNoZV9lbnRyeSk7CiAKLWJvb2wgYXRoOWtfaHdfa2V5aXN2YWxpZChzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGVudHJ5KQotewotCWlmIChlbnRyeSA8IGFoLT5jYXBzLmtleWNhY2hlX3NpemUpIHsKLQkJdTMyIHZhbCA9IFJFR19SRUFEKGFoLCBBUl9LRVlUQUJMRV9NQUMxKGVudHJ5KSk7Ci0JCWlmICh2YWwgJiBBUl9LRVlUQUJMRV9WQUxJRCkKLQkJCXJldHVybiB0cnVlOwotCX0KLQlyZXR1cm4gZmFsc2U7Ci19Ci1FWFBPUlRfU1lNQk9MKGF0aDlrX2h3X2tleWlzdmFsaWQpOwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogUG93ZXIgTWFuYWdlbWVudCAoQ2hpcHNldCkgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xNzUxLDYgKzE3NzQsMTEgQEAKIAkJCVJFR19DTFJfQklUKGFoLCAoQVJfUlRDX1JFU0VUKSwKIAkJCQkgICAgQVJfUlRDX1JFU0VUX0VOKTsKIAl9CisKKwkvKiBDbGVhciBCaXQgMTQgb2YgQVJfV0EgYWZ0ZXIgcHV0dGluZyBjaGlwIGludG8gRnVsbCBTbGVlcCBtb2RlLiAqLworCWlmIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKQorCQlSRUdfV1JJVEUoYWgsIEFSX1dBLAorCQkJICBhaC0+V0FSZWdWYWwgJiB+QVJfV0FfRDNfTDFfRElTQUJMRSk7CiB9CiAKIC8qCkBAIC0xNzc3LDYgKzE4MDUsMTAgQEAKIAkJCQkgICAgQVJfUlRDX0ZPUkNFX1dBS0VfRU4pOwogCQl9CiAJfQorCisJLyogQ2xlYXIgQml0IDE0IG9mIEFSX1dBIGFmdGVyIHB1dHRpbmcgY2hpcCBpbnRvIE5ldCBTbGVlcCBtb2RlLiAqLworCWlmIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKQorCQlSRUdfV1JJVEUoYWgsIEFSX1dBLCBhaC0+V0FSZWdWYWwgJiB+QVJfV0FfRDNfTDFfRElTQUJMRSk7CiB9CiAKIHN0YXRpYyBib29sIGF0aDlrX2h3X3NldF9wb3dlcl9hd2FrZShzdHJ1Y3QgYXRoX2h3ICphaCwgaW50IHNldENoaXApCkBAIC0xNzg0LDYgKzE4MTYsMTIgQEAKIAl1MzIgdmFsOwogCWludCBpOwogCisJLyogU2V0IEJpdHMgMTQgYW5kIDE3IG9mIEFSX1dBIGJlZm9yZSBwb3dlcmluZyBvbiB0aGUgY2hpcC4gKi8KKwlpZiAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSkgeworCQlSRUdfV1JJVEUoYWgsIEFSX1dBLCBhaC0+V0FSZWdWYWwpOworCQl1ZGVsYXkoMTApOworCX0KKwogCWlmIChzZXRDaGlwKSB7CiAJCWlmICgoUkVHX1JFQUQoYWgsIEFSX1JUQ19TVEFUVVMpICYKIAkJICAgICBBUl9SVENfU1RBVFVTX00pID09IEFSX1JUQ19TVEFUVVNfU0hVVERPV04pIHsKQEAgLTIxMzgsNiArMjE3Niw4IEBACiAKIAlpZiAoQVJfU1JFVl85MjcxKGFoKSkKIAkJcENhcC0+bnVtX2dwaW9fcGlucyA9IEFSOTI3MV9OVU1fR1BJTzsKKwllbHNlIGlmIChBUl9ERVZJRF83MDEwKGFoKSkKKwkJcENhcC0+bnVtX2dwaW9fcGlucyA9IEFSNzAxMF9OVU1fR1BJTzsKIAllbHNlIGlmIChBUl9TUkVWXzkyODVfMTBfT1JfTEFURVIoYWgpKQogCQlwQ2FwLT5udW1fZ3Bpb19waW5zID0gQVI5Mjg1X05VTV9HUElPOwogCWVsc2UgaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCkBAIC0yMTY1LDcgKzIyMDUsNyBAQAogCQlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF9SRlNJTEVOVDsKIAl9CiAjZW5kaWYKLQlpZiAoQVJfU1JFVl85MjcxKGFoKSkKKwlpZiAoQVJfU1JFVl85MjcxKGFoKSB8fCBBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKQogCQlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF9BVVRPU0xFRVA7CiAJZWxzZQogCQlwQ2FwLT5od19jYXBzICY9IH5BVEg5S19IV19DQVBfQVVUT1NMRUVQOwpAQCAtMjIyMCw2ICsyMjYwLDggQEAKIAkJcENhcC0+cnhfc3RhdHVzX2xlbiA9IHNpemVvZihzdHJ1Y3QgYXI5MDAzX3J4cyk7CiAJCXBDYXAtPnR4X2Rlc2NfbGVuID0gc2l6ZW9mKHN0cnVjdCBhcjkwMDNfdHhjKTsKIAkJcENhcC0+dHhzX2xlbiA9IHNpemVvZihzdHJ1Y3QgYXI5MDAzX3R4cyk7CisJCWlmIChhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX1BBUFJEKSkKKwkJCXBDYXAtPmh3X2NhcHMgfD0gQVRIOUtfSFdfQ0FQX1BBUFJEOwogCX0gZWxzZSB7CiAJCXBDYXAtPnR4X2Rlc2NfbGVuID0gc2l6ZW9mKHN0cnVjdCBhdGhfZGVzYyk7CiAJCWlmIChBUl9TUkVWXzkyODBfMjAoYWgpICYmCkBAIC0yMjMyLDEwMSArMjI3NCwxMiBAQAogCWlmIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKQogCQlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF9SQUNfU1VQUE9SVEVEOwogCisJaWYgKEFSX1NSRVZfOTI4N18xMF9PUl9MQVRFUihhaCkgfHwgQVJfU1JFVl85MjcxKGFoKSkKKwkJcENhcC0+aHdfY2FwcyB8PSBBVEg5S19IV19DQVBfU0dJXzIwOworCiAJcmV0dXJuIDA7CiB9CiAKLWJvb2wgYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a19jYXBhYmlsaXR5X3R5cGUgdHlwZSwKLQkJCSAgICB1MzIgY2FwYWJpbGl0eSwgdTMyICpyZXN1bHQpCi17Ci0Jc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWd1bGF0b3J5ID0gYXRoOWtfaHdfcmVndWxhdG9yeShhaCk7Ci0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBBVEg5S19DQVBfQ0lQSEVSOgotCQlzd2l0Y2ggKGNhcGFiaWxpdHkpIHsKLQkJY2FzZSBBVEg5S19DSVBIRVJfQUVTX0NDTToKLQkJY2FzZSBBVEg5S19DSVBIRVJfQUVTX09DQjoKLQkJY2FzZSBBVEg5S19DSVBIRVJfVEtJUDoKLQkJY2FzZSBBVEg5S19DSVBIRVJfV0VQOgotCQljYXNlIEFUSDlLX0NJUEhFUl9NSUM6Ci0JCWNhc2UgQVRIOUtfQ0lQSEVSX0NMUjoKLQkJCXJldHVybiB0cnVlOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JY2FzZSBBVEg5S19DQVBfVEtJUF9NSUM6Ci0JCXN3aXRjaCAoY2FwYWJpbGl0eSkgewotCQljYXNlIDA6Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJY2FzZSAxOgotCQkJcmV0dXJuIChhaC0+c3RhX2lkMV9kZWZhdWx0cyAmCi0JCQkJQVJfU1RBX0lEMV9DUlBUX01JQ19FTkFCTEUpID8gdHJ1ZSA6Ci0JCQlmYWxzZTsKLQkJfQotCWNhc2UgQVRIOUtfQ0FQX1RLSVBfU1BMSVQ6Ci0JCXJldHVybiAoYWgtPm1pc2NfbW9kZSAmIEFSX1BDVV9NSUNfTkVXX0xPQ19FTkEpID8KLQkJCWZhbHNlIDogdHJ1ZTsKLQljYXNlIEFUSDlLX0NBUF9NQ0FTVF9LRVlTUkNIOgotCQlzd2l0Y2ggKGNhcGFiaWxpdHkpIHsKLQkJY2FzZSAwOgotCQkJcmV0dXJuIHRydWU7Ci0JCWNhc2UgMToKLQkJCWlmIChSRUdfUkVBRChhaCwgQVJfU1RBX0lEMSkgJiBBUl9TVEFfSUQxX0FESE9DKSB7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfSBlbHNlIHsKLQkJCQlyZXR1cm4gKGFoLT5zdGFfaWQxX2RlZmF1bHRzICYKLQkJCQkJQVJfU1RBX0lEMV9NQ0FTVF9LU1JDSCkgPyB0cnVlIDoKLQkJCQkJZmFsc2U7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCWNhc2UgQVRIOUtfQ0FQX1RYUE9XOgotCQlzd2l0Y2ggKGNhcGFiaWxpdHkpIHsKLQkJY2FzZSAwOgotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgMToKLQkJCSpyZXN1bHQgPSByZWd1bGF0b3J5LT5wb3dlcl9saW1pdDsKLQkJCXJldHVybiAwOwotCQljYXNlIDI6Ci0JCQkqcmVzdWx0ID0gcmVndWxhdG9yeS0+bWF4X3Bvd2VyX2xldmVsOwotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgMzoKLQkJCSpyZXN1bHQgPSByZWd1bGF0b3J5LT50cF9zY2FsZTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQljYXNlIEFUSDlLX0NBUF9EUzoKLQkJcmV0dXJuIChBUl9TUkVWXzkyODBfMjBfT1JfTEFURVIoYWgpICYmCi0JCQkoYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9SQ19DSEFJTl9NQVNLKSA9PSAxKSkKLQkJCT8gZmFsc2UgOiB0cnVlOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MKGF0aDlrX2h3X2dldGNhcGFiaWxpdHkpOwotCi1ib29sIGF0aDlrX2h3X3NldGNhcGFiaWxpdHkoc3RydWN0IGF0aF9odyAqYWgsIGVudW0gYXRoOWtfY2FwYWJpbGl0eV90eXBlIHR5cGUsCi0JCQkgICAgdTMyIGNhcGFiaWxpdHksIHUzMiBzZXR0aW5nLCBpbnQgKnN0YXR1cykKLXsKLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIEFUSDlLX0NBUF9US0lQX01JQzoKLQkJaWYgKHNldHRpbmcpCi0JCQlhaC0+c3RhX2lkMV9kZWZhdWx0cyB8PQotCQkJCUFSX1NUQV9JRDFfQ1JQVF9NSUNfRU5BQkxFOwotCQllbHNlCi0JCQlhaC0+c3RhX2lkMV9kZWZhdWx0cyAmPQotCQkJCX5BUl9TVEFfSUQxX0NSUFRfTUlDX0VOQUJMRTsKLQkJcmV0dXJuIHRydWU7Ci0JY2FzZSBBVEg5S19DQVBfTUNBU1RfS0VZU1JDSDoKLQkJaWYgKHNldHRpbmcpCi0JCQlhaC0+c3RhX2lkMV9kZWZhdWx0cyB8PSBBUl9TVEFfSUQxX01DQVNUX0tTUkNIOwotCQllbHNlCi0JCQlhaC0+c3RhX2lkMV9kZWZhdWx0cyAmPSB+QVJfU1RBX0lEMV9NQ0FTVF9LU1JDSDsKLQkJcmV0dXJuIHRydWU7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIGZhbHNlOwotCX0KLX0KLUVYUE9SVF9TWU1CT0woYXRoOWtfaHdfc2V0Y2FwYWJpbGl0eSk7Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogR1BJTyAvIFJGS0lMTCAvIEFudGVubmFlICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIzNjUsOCArMjMxOCwxNSBAQAogCiAJQlVHX09OKGdwaW8gPj0gYWgtPmNhcHMubnVtX2dwaW9fcGlucyk7CiAKLQlncGlvX3NoaWZ0ID0gZ3BpbyA8PCAxOworCWlmIChBUl9ERVZJRF83MDEwKGFoKSkgeworCQlncGlvX3NoaWZ0ID0gZ3BpbzsKKwkJUkVHX1JNVyhhaCwgQVI3MDEwX0dQSU9fT0UsCisJCQkoQVI3MDEwX0dQSU9fT0VfQVNfSU5QVVQgPDwgZ3Bpb19zaGlmdCksCisJCQkoQVI3MDEwX0dQSU9fT0VfTUFTSyA8PCBncGlvX3NoaWZ0KSk7CisJCXJldHVybjsKKwl9CiAKKwlncGlvX3NoaWZ0ID0gZ3BpbyA8PCAxOwogCVJFR19STVcoYWgsCiAJCUFSX0dQSU9fT0VfT1VULAogCQkoQVJfR1BJT19PRV9PVVRfRFJWX05PIDw8IGdwaW9fc2hpZnQpLApAQCAtMjM4Miw3ICsyMzQyLDExIEBACiAJaWYgKGdwaW8gPj0gYWgtPmNhcHMubnVtX2dwaW9fcGlucykKIAkJcmV0dXJuIDB4ZmZmZmZmZmY7CiAKLQlpZiAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSkKKwlpZiAoQVJfREVWSURfNzAxMChhaCkpIHsKKwkJdTMyIHZhbDsKKwkJdmFsID0gUkVHX1JFQUQoYWgsIEFSNzAxMF9HUElPX0lOKTsKKwkJcmV0dXJuIChNUyh2YWwsIEFSNzAxMF9HUElPX0lOX1ZBTCkgJiBBUl9HUElPX0JJVChncGlvKSkgPT0gMDsKKwl9IGVsc2UgaWYgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkpCiAJCXJldHVybiBNU19SRUdfUkVBRChBUjkzMDAsIGdwaW8pICE9IDA7CiAJZWxzZSBpZiAoQVJfU1JFVl85MjcxKGFoKSkKIAkJcmV0dXJuIE1TX1JFR19SRUFEKEFSOTI3MSwgZ3BpbykgIT0gMDsKQEAgLTI0MDIsMTAgKzIzNjYsMTYgQEAKIHsKIAl1MzIgZ3Bpb19zaGlmdDsKIAorCWlmIChBUl9ERVZJRF83MDEwKGFoKSkgeworCQlncGlvX3NoaWZ0ID0gZ3BpbzsKKwkJUkVHX1JNVyhhaCwgQVI3MDEwX0dQSU9fT0UsCisJCQkoQVI3MDEwX0dQSU9fT0VfQVNfT1VUUFVUIDw8IGdwaW9fc2hpZnQpLAorCQkJKEFSNzAxMF9HUElPX09FX01BU0sgPDwgZ3Bpb19zaGlmdCkpOworCQlyZXR1cm47CisJfQorCiAJYXRoOWtfaHdfZ3Bpb19jZmdfb3V0cHV0X211eChhaCwgZ3BpbywgYWhfc2lnbmFsX3R5cGUpOwotCiAJZ3Bpb19zaGlmdCA9IDIgKiBncGlvOwotCiAJUkVHX1JNVyhhaCwKIAkJQVJfR1BJT19PRV9PVVQsCiAJCShBUl9HUElPX09FX09VVF9EUlZfQUxMIDw8IGdwaW9fc2hpZnQpLApAQCAtMjQxNSw2ICsyMzg1LDEzIEBACiAKIHZvaWQgYXRoOWtfaHdfc2V0X2dwaW8oc3RydWN0IGF0aF9odyAqYWgsIHUzMiBncGlvLCB1MzIgdmFsKQogeworCWlmIChBUl9ERVZJRF83MDEwKGFoKSkgeworCQl2YWwgPSB2YWwgPyAwIDogMTsKKwkJUkVHX1JNVyhhaCwgQVI3MDEwX0dQSU9fT1VULCAoKHZhbCYxKSA8PCBncGlvKSwKKwkJCUFSX0dQSU9fQklUKGdwaW8pKTsKKwkJcmV0dXJuOworCX0KKwogCWlmIChBUl9TUkVWXzkyNzEoYWgpKQogCQl2YWwgPSB+dmFsOwogCkBAIC0yNTIwLDEyICsyNDk3LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woYXRoOWtfaHdfc2V0X3R4cG93ZXJsaW1pdCk7CiAKLXZvaWQgYXRoOWtfaHdfc2V0bWFjKHN0cnVjdCBhdGhfaHcgKmFoLCBjb25zdCB1OCAqbWFjKQotewotCW1lbWNweShhdGg5a19od19jb21tb24oYWgpLT5tYWNhZGRyLCBtYWMsIEVUSF9BTEVOKTsKLX0KLUVYUE9SVF9TWU1CT0woYXRoOWtfaHdfc2V0bWFjKTsKLQogdm9pZCBhdGg5a19od19zZXRvcG1vZGUoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJYXRoOWtfaHdfc2V0X29wZXJhdGluZ19tb2RlKGFoLCBhaC0+b3Btb2RlKTsKQEAgLTI1OTgsMjEgKzI1NjksNiBAQAogfQogRVhQT1JUX1NZTUJPTChhdGg5a19od19zZXRfdHNmYWRqdXN0KTsKIAotLyoKLSAqICBFeHRlbmQgMTUtYml0IHRpbWUgc3RhbXAgZnJvbSByeCBkZXNjcmlwdG9yIHRvCi0gKiAgYSBmdWxsIDY0LWJpdCBUU0YgdXNpbmcgdGhlIGN1cnJlbnQgaC93IFRTRi4KLSovCi11NjQgYXRoOWtfaHdfZXh0ZW5kX3RzZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJzdGFtcCkKLXsKLQl1NjQgdHNmOwotCi0JdHNmID0gYXRoOWtfaHdfZ2V0dHNmNjQoYWgpOwotCWlmICgodHNmICYgMHg3ZmZmKSA8IHJzdGFtcCkKLQkJdHNmIC09IDB4ODAwMDsKLQlyZXR1cm4gKHRzZiAmIH4weDdmZmYpIHwgcnN0YW1wOwotfQotRVhQT1JUX1NZTUJPTChhdGg5a19od19leHRlbmRfdHNmKTsKLQogdm9pZCBhdGg5a19od19zZXQxMW5tYWMyMDQwKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZhdGg5a19od19jb21tb24oYWgpLT5ody0+Y29uZjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKaW5kZXggNzcyNDVkZi4uMmQzMGVmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKQEAgLTE1OCw2ICsxNTgsOSBAQAogI2RlZmluZSBBVEg5S19IV19SWF9IUF9RREVQVEgJMTYKICNkZWZpbmUgQVRIOUtfSFdfUlhfTFBfUURFUFRICTEyOAogCisjZGVmaW5lIFBBUFJEX0dBSU5fVEFCTEVfRU5UUklFUyAgICAzMgorI2RlZmluZSBQQVBSRF9UQUJMRV9TWiAgICAgICAgICAgICAgMjQKKwogZW51bSBhdGhfaW5pX3N1YnN5cyB7CiAJQVRIX0lOSV9QUkUgPSAwLAogCUFUSF9JTklfQ09SRSwKQEAgLTE5OSwxNSArMjAyLDggQEAKIAlBVEg5S19IV19DQVBfUkFDX1NVUFBPUlRFRAkJPSBCSVQoMTgpLAogCUFUSDlLX0hXX0NBUF9MRFBDCQkJPSBCSVQoMTkpLAogCUFUSDlLX0hXX0NBUF9GQVNUQ0xPQ0sJCQk9IEJJVCgyMCksCi19OwotCi1lbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB7Ci0JQVRIOUtfQ0FQX0NJUEhFUiA9IDAsCi0JQVRIOUtfQ0FQX1RLSVBfTUlDLAotCUFUSDlLX0NBUF9US0lQX1NQTElULAotCUFUSDlLX0NBUF9UWFBPVywKLQlBVEg5S19DQVBfTUNBU1RfS0VZU1JDSCwKLQlBVEg5S19DQVBfRFMKKwlBVEg5S19IV19DQVBfU0dJXzIwCQkJPSBCSVQoMjEpLAorCUFUSDlLX0hXX0NBUF9QQVBSRAkJCT0gQklUKDIyKSwKIH07CiAKIHN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgewpAQCAtMjM3LDggKzIzMyw5IEBACiAJaW50IHN3X2JlYWNvbl9yZXNwb25zZV90aW1lOwogCWludCBhZGRpdGlvbmFsX3N3YmFfYmFja29mZjsKIAlpbnQgYWNrXzZtYjsKLQlpbnQgY3dtX2lnbm9yZV9leHRjY2E7CisJdTMyIGN3bV9pZ25vcmVfZXh0Y2NhOwogCXU4IHBjaWVfcG93ZXJzYXZlX2VuYWJsZTsKKwlib29sIHBjaWVTZXJEZXNXcml0ZTsKIAl1OCBwY2llX2Nsb2NrX3JlcTsKIAl1MzIgcGNpZV93YWVuOwogCXU4IGFuYWxvZ19zaGlmdHJlZzsKQEAgLTI2MiwxMCArMjU5LDEwIEBACiAjZGVmaW5lIEFSX0JBU0VfRlJFUV81R0haICAgCTQ5MDAKICNkZWZpbmUgQVJfU1BVUl9GRUVRX0JPVU5EX0hUNDAgMTkKICNkZWZpbmUgQVJfU1BVUl9GRUVRX0JPVU5EX0hUMjAgMTAKLQlib29sIHR4X2lxX2NhbGlicmF0aW9uOyAvKiBPbmx5IGF2YWlsYWJsZSBmb3IgPj0gQVI5MDAzICovCiAJaW50IHNwdXJtb2RlOwogCXUxNiBzcHVyY2hhbnNbQVJfRUVQUk9NX01PREFMX1NQVVJTXVsyXTsKIAl1OCBtYXhfdHh0cmlnX2xldmVsOworCXUxNiBhbmlfcG9sbF9pbnRlcnZhbDsgLyogQU5JIHBvbGwgaW50ZXJ2YWwgaW4gbXMgKi8KIH07CiAKIGVudW0gYXRoOWtfaW50IHsKQEAgLTI3OSw2ICsyNzYsNyBAQAogCUFUSDlLX0lOVF9UWCA9IDB4MDAwMDAwNDAsCiAJQVRIOUtfSU5UX1RYREVTQyA9IDB4MDAwMDAwODAsCiAJQVRIOUtfSU5UX1RJTV9USU1FUiA9IDB4MDAwMDAxMDAsCisJQVRIOUtfSU5UX0JCX1dBVENIRE9HID0gMHgwMDAwMDQwMCwKIAlBVEg5S19JTlRfVFhVUk4gPSAweDAwMDAwODAwLAogCUFUSDlLX0lOVF9NSUIgPSAweDAwMDAxMDAwLAogCUFUSDlLX0lOVF9SWFBIWSA9IDB4MDAwMDQwMDAsCkBAIC0zNTgsNiArMzU2LDkgQEAKIAlpbnQ4X3QgaUNvZmY7CiAJaW50OF90IHFDb2ZmOwogCWludDE2X3QgcmF3Tm9pc2VGbG9vcjsKKwlib29sIHBhcHJkX2RvbmU7CisJdTE2IHNtYWxsX3NpZ25hbF9nYWluW0FSOTMwMF9NQVhfQ0hBSU5TXTsKKwl1MzIgcGFfdGFibGVbQVI5MzAwX01BWF9DSEFJTlNdW1BBUFJEX1RBQkxFX1NaXTsKIH07CiAKICNkZWZpbmUgSVNfQ0hBTl9HKF9jKSAoKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiAoQ0hBTk5FTF9HKSkgPT0gQ0hBTk5FTF9HKSB8fCBcCkBAIC00NTksNyArNDYwLDcgQEAKICNkZWZpbmUgQVJfR0VOVE1SX0JJVChfaW5kZXgpCSgxIDw8IChfaW5kZXgpKQogCiAvKgotICogVXNpbmcgZGUgQnJ1aWppbiBzZXF1ZW5jZSB0byB0byBsb29rIHVwIDEncyBpbmRleCBpbiBhIDMyIGJpdCBudW1iZXIKKyAqIFVzaW5nIGRlIEJydWlqaW4gc2VxdWVuY2UgdG8gbG9vayB1cCAxJ3MgaW5kZXggaW4gYSAzMiBiaXQgbnVtYmVyCiAgKiBkZWJydWlqbjMyID0gMDAwMCAwMTExIDAxMTEgMTEwMCAxMDExIDAxMDEgMDAxMSAwMDAxCiAgKi8KICNkZWZpbmUgZGVicnVpam4zMiAweDA3N0NCNTMxVQpAQCAtNTA5LDcgKzUxMCwxNyBAQAogICoJQVJfUlRDX1BMTF9DT05UUk9MIGZvciBhIGdpdmVuIGNoYW5uZWwKICAqIEBzZXR1cF9jYWxpYnJhdGlvbjogc2V0IHVwIGNhbGlicmF0aW9uCiAgKiBAaXNjYWxfc3VwcG9ydGVkOiB1c2VkIHRvIHF1ZXJ5IGlmIGEgdHlwZSBvZiBjYWxpYnJhdGlvbiBpcyBzdXBwb3J0ZWQKLSAqIEBsb2FkbmY6IGxvYWQgbm9pc2UgZmxvb3IgcmVhZCBmcm9tIGVhY2ggY2hhaW4gb24gdGhlIENDQSByZWdpc3RlcnMKKyAqCisgKiBAYW5pX3Jlc2V0OiByZXNldCBBTkkgcGFyYW1ldGVycyB0byBkZWZhdWx0IHZhbHVlcworICogQGFuaV9sb3dlcl9pbW11bml0eTogbG93ZXIgdGhlIG5vaXNlIGltbXVuaXR5IGxldmVsLiBUaGUgbGV2ZWwgY29udHJvbHMKKyAqCXRoZSBwb3dlci1iYXNlZCBwYWNrZXQgZGV0ZWN0aW9uIG9uIGhhcmR3YXJlLiBJZiBhIHBvd2VyIGp1bXAgaXMKKyAqCWRldGVjdGVkIHRoZSBhZGFwdGVyIHRha2VzIGl0IGFzIGFuIGluZGljYXRpb24gdGhhdCBhIHBhY2tldCBoYXMKKyAqCWFycml2ZWQuIFRoZSBsZXZlbCByYW5nZXMgZnJvbSAwLTUuIEVhY2ggbGV2ZWwgY29ycmVzcG9uZHMgdG8gYQorICoJZmV3IGRCIG1vcmUgb2Ygbm9pc2UgaW1tdW5pdHkuIElmIHlvdSBoYXZlIGEgc3Ryb25nIHRpbWUtdmFyeWluZworICoJaW50ZXJmZXJlbmNlIHRoYXQgaXMgY2F1c2luZyBmYWxzZSBkZXRlY3Rpb25zIChPRkRNIHRpbWluZyBlcnJvcnMgb3IKKyAqCUNDSyB0aW1pbmcgZXJyb3JzKSB0aGUgbGV2ZWwgY2FuIGJlIGluY3JlYXNlZC4KKyAqIEBhbmlfY2FjaGVfaW5pX3JlZ3M6IGNhY2hlIHRoZSB2YWx1ZXMgZm9yIEFOSSBmcm9tIHRoZSBpbml0aWFsCisgKglyZWdpc3RlciBzZXR0aW5ncyB0aHJvdWdoIHRoZSByZWdpc3RlciBpbml0aWFsaXphdGlvbi4KICAqLwogc3RydWN0IGF0aF9od19wcml2YXRlX29wcyB7CiAJLyogQ2FsaWJyYXRpb24gb3BzICovCkBAIC01NTIsNyArNTYzLDExIEBACiAJYm9vbCAoKmFuaV9jb250cm9sKShzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a19hbmlfY21kIGNtZCwKIAkJCSAgICBpbnQgcGFyYW0pOwogCXZvaWQgKCpkb19nZXRuZikoc3RydWN0IGF0aF9odyAqYWgsIGludDE2X3QgbmZhcnJheVtOVU1fTkZfUkVBRElOR1NdKTsKLQl2b2lkICgqbG9hZG5mKShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOworCisJLyogQU5JICovCisJdm9pZCAoKmFuaV9yZXNldCkoc3RydWN0IGF0aF9odyAqYWgsIGJvb2wgaXNfc2Nhbm5pbmcpOworCXZvaWQgKCphbmlfbG93ZXJfaW1tdW5pdHkpKHN0cnVjdCBhdGhfaHcgKmFoKTsKKwl2b2lkICgqYW5pX2NhY2hlX2luaV9yZWdzKShzdHJ1Y3QgYXRoX2h3ICphaCk7CiB9OwogCiAvKioKQEAgLTU2Myw2ICs1NzgsMTEgQEAKICAqCiAgKiBAY29uZmlnX3BjaV9wb3dlcnNhdmU6CiAgKiBAY2FsaWJyYXRlOiBwZXJpb2RpYyBjYWxpYnJhdGlvbiBmb3IgTkYsIEFOSSwgSVEsIEFEQyBnYWluLCBBREMtREMKKyAqCisgKiBAYW5pX3Byb2NfbWliX2V2ZW50OiBwcm9jZXNzIE1JQiBldmVudHMsIHRoaXMgd291bGQgaGFwcGVuIHVwb24gc3BlY2lmaWMgQU5JCisgKgl0aHJlc2hvbGRzIGJlaW5nIHJlYWNoZWQgb3IgaGF2aW5nIG92ZXJmbG93ZWQuCisgKiBAYW5pX21vbml0b3I6IGNhbGxlZCBwZXJpb2RpY2FsbHkgYnkgdGhlIGNvcmUgZHJpdmVyIHRvIGNvbGxlY3QKKyAqCU1JQiBzdGF0cyBhbmQgYWRqdXN0IEFOSSBpZiBzcGVjaWZpYyB0aHJlc2hvbGRzIGhhdmUgYmVlbiByZWFjaGVkLgogICovCiBzdHJ1Y3QgYXRoX2h3X29wcyB7CiAJdm9pZCAoKmNvbmZpZ19wY2lfcG93ZXJzYXZlKShzdHJ1Y3QgYXRoX2h3ICphaCwKQEAgLTYwMyw2ICs2MjMsMTUgQEAKIAkJCQkgICAgIHUzMiBidXJzdER1cmF0aW9uKTsKIAl2b2lkICgqc2V0MTFuX3ZpcnR1YWxtb3JlZnJhZykoc3RydWN0IGF0aF9odyAqYWgsIHZvaWQgKmRzLAogCQkJCSAgICAgICB1MzIgdm1mKTsKKworCXZvaWQgKCphbmlfcHJvY19taWJfZXZlbnQpKHN0cnVjdCBhdGhfaHcgKmFoKTsKKwl2b2lkICgqYW5pX21vbml0b3IpKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Cit9OworCitzdHJ1Y3QgYXRoX25mX2xpbWl0cyB7CisJczE2IG1heDsKKwlzMTYgbWluOworCXMxNiBub21pbmFsOwogfTsKIAogc3RydWN0IGF0aF9odyB7CkBAIC02MjYsMTAgKzY1NSwxMCBAQAogCWJvb2wgaXNfcGNpZXhwcmVzczsKIAlib29sIG5lZWRfYW5fdG9wMl9maXh1cDsKIAl1MTYgdHhfdHJpZ19sZXZlbDsKLQlzMTYgbmZfMmdfbWF4OwotCXMxNiBuZl8yZ19taW47Ci0JczE2IG5mXzVnX21heDsKLQlzMTYgbmZfNWdfbWluOworCisJdTMyIG5mX3JlZ3NbNl07CisJc3RydWN0IGF0aF9uZl9saW1pdHMgbmZfMmc7CisJc3RydWN0IGF0aF9uZl9saW1pdHMgbmZfNWc7CiAJdTE2IHJmc2lsZW50OwogCXUzMiByZmtpbGxfZ3BpbzsKIAl1MzIgcmZraWxsX3BvbGFyaXR5OwpAQCAtNzg5LDYgKzgxOCwxOCBAQAogCXUzMiB0c19wYWRkcl9lbmQ7CiAJdTE2IHRzX3RhaWw7CiAJdTggdHNfc2l6ZTsKKworCXUzMiBiYl93YXRjaGRvZ19sYXN0X3N0YXR1czsKKwl1MzIgYmJfd2F0Y2hkb2dfdGltZW91dF9tczsgLyogaW4gbXMsIDAgdG8gZGlzYWJsZSAqLworCisJdTMyIHBhcHJkX2dhaW5fdGFibGVfZW50cmllc1tQQVBSRF9HQUlOX1RBQkxFX0VOVFJJRVNdOworCXU4IHBhcHJkX2dhaW5fdGFibGVfaW5kZXhbUEFQUkRfR0FJTl9UQUJMRV9FTlRSSUVTXTsKKwkvKgorCSAqIFN0b3JlIHRoZSBwZXJtYW5lbnQgdmFsdWUgb2YgUmVnIDB4NDAwNGluIFdBUmVnVmFsCisJICogc28gd2UgZG9udCBoYXZlIHRvIFIvTS9XLiBXZSBzaG91bGQgbm90IGJlIHJlYWRpbmcKKwkgKiB0aGlzIHJlZ2lzdGVyIHdoZW4gaW4gc2xlZXAgc3RhdGVzLgorCSAqLworCXUzMiBXQVJlZ1ZhbDsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGF0aF9jb21tb24gKmF0aDlrX2h3X2NvbW1vbihzdHJ1Y3QgYXRoX2h3ICphaCkKQEAgLTgxMSw2ICs4NTIsMTIgQEAKIAlyZXR1cm4gJmFoLT5vcHM7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHNpZ25fZXh0ZW5kKGludCB2YWwsIGNvbnN0IGludCBuYml0cykKK3sKKwlpbnQgb3JkZXIgPSBCSVQobmJpdHMtMSk7CisJcmV0dXJuICh2YWwgXiBvcmRlcikgLSBvcmRlcjsKK30KKwogLyogSW5pdGlhbGl6YXRpb24sIERldGFjaCwgUmVzZXQgKi8KIGNvbnN0IGNoYXIgKmF0aDlrX2h3X3Byb2JlKHUxNiB2ZW5kb3JpZCwgdTE2IGRldmlkKTsKIHZvaWQgYXRoOWtfaHdfZGVpbml0KHN0cnVjdCBhdGhfaHcgKmFoKTsKQEAgLTgxOCwxOSArODY1LDEzIEBACiBpbnQgYXRoOWtfaHdfcmVzZXQoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAogCQkgICBib29sIGJDaGFubmVsQ2hhbmdlKTsKIGludCBhdGg5a19od19maWxsX2NhcF9pbmZvKHN0cnVjdCBhdGhfaHcgKmFoKTsKLWJvb2wgYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a19jYXBhYmlsaXR5X3R5cGUgdHlwZSwKLQkJCSAgICB1MzIgY2FwYWJpbGl0eSwgdTMyICpyZXN1bHQpOwotYm9vbCBhdGg5a19od19zZXRjYXBhYmlsaXR5KHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAotCQkJICAgIHUzMiBjYXBhYmlsaXR5LCB1MzIgc2V0dGluZywgaW50ICpzdGF0dXMpOwogdTMyIGF0aDlrX3JlZ2RfZ2V0X2N0bChzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZywgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwogCiAvKiBLZXkgQ2FjaGUgTWFuYWdlbWVudCAqLwogYm9vbCBhdGg5a19od19rZXlyZXNldChzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGVudHJ5KTsKLWJvb2wgYXRoOWtfaHdfa2V5c2V0bWFjKHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgZW50cnksIGNvbnN0IHU4ICptYWMpOwogYm9vbCBhdGg5a19od19zZXRfa2V5Y2FjaGVfZW50cnkoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBlbnRyeSwKIAkJCQkgY29uc3Qgc3RydWN0IGF0aDlrX2tleXZhbCAqaywKIAkJCQkgY29uc3QgdTggKm1hYyk7Ci1ib29sIGF0aDlrX2h3X2tleWlzdmFsaWQoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBlbnRyeSk7CiAKIC8qIEdQSU8gLyBSRktJTEwgLyBBbnRlbm5hZSAqLwogdm9pZCBhdGg5a19od19jZmdfZ3Bpb19pbnB1dChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGdwaW8pOwpAQCAtODU2LDcgKzg5Nyw2IEBACiBib29sIGF0aDlrX2h3X3BoeV9kaXNhYmxlKHN0cnVjdCBhdGhfaHcgKmFoKTsKIGJvb2wgYXRoOWtfaHdfZGlzYWJsZShzdHJ1Y3QgYXRoX2h3ICphaCk7CiB2b2lkIGF0aDlrX2h3X3NldF90eHBvd2VybGltaXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBsaW1pdCk7Ci12b2lkIGF0aDlrX2h3X3NldG1hYyhzdHJ1Y3QgYXRoX2h3ICphaCwgY29uc3QgdTggKm1hYyk7CiB2b2lkIGF0aDlrX2h3X3NldG9wbW9kZShzdHJ1Y3QgYXRoX2h3ICphaCk7CiB2b2lkIGF0aDlrX2h3X3NldG1jYXN0ZmlsdGVyKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZmlsdGVyMCwgdTMyIGZpbHRlcjEpOwogdm9pZCBhdGg5a19od19zZXRic3NpZG1hc2soc3RydWN0IGF0aF9odyAqYWgpOwpAQCAtODY1LDcgKzkwNSw2IEBACiB2b2lkIGF0aDlrX2h3X3NldHRzZjY0KHN0cnVjdCBhdGhfaHcgKmFoLCB1NjQgdHNmNjQpOwogdm9pZCBhdGg5a19od19yZXNldF90c2Yoc3RydWN0IGF0aF9odyAqYWgpOwogdm9pZCBhdGg5a19od19zZXRfdHNmYWRqdXN0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgc2V0dGluZyk7Ci11NjQgYXRoOWtfaHdfZXh0ZW5kX3RzZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJzdGFtcCk7CiB2b2lkIGF0aDlrX2h3X2luaXRfZ2xvYmFsX3NldHRpbmdzKHN0cnVjdCBhdGhfaHcgKmFoKTsKIHZvaWQgYXRoOWtfaHdfc2V0MTFubWFjMjA0MChzdHJ1Y3QgYXRoX2h3ICphaCk7CiB2b2lkIGF0aDlrX2h3X2JlYWNvbmluaXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBuZXh0X2JlYWNvbiwgdTMyIGJlYWNvbl9wZXJpb2QpOwpAQCAtOTA3LDEzICs5NDYsMjUgQEAKIHZvaWQgYXI5MDAyX2h3X2Nja19jaGFuMTRfc3ByZWFkKHN0cnVjdCBhdGhfaHcgKmFoKTsKIGludCBhcjkwMDJfaHdfcmZfY2xhaW0oc3RydWN0IGF0aF9odyAqYWgpOwogdm9pZCBhcjkwMDJfaHdfZW5hYmxlX2FzeW5jX2ZpZm8oc3RydWN0IGF0aF9odyAqYWgpOwordm9pZCBhcjkwMDJfaHdfdXBkYXRlX2FzeW5jX2ZpZm8oc3RydWN0IGF0aF9odyAqYWgpOwogdm9pZCBhcjkwMDJfaHdfZW5hYmxlX3dlcF9hZ2dyZWdhdGlvbihzdHJ1Y3QgYXRoX2h3ICphaCk7CiAKIC8qCi0gKiBDb2RlIHNwZWNpZnJpYyB0byBBUjkwMDMsIHdlIHN0dWZmIHRoZXNlIGhlcmUgdG8gYXZvaWQgY2FsbGJhY2tzCisgKiBDb2RlIHNwZWNpZmljIHRvIEFSOTAwMywgd2Ugc3R1ZmYgdGhlc2UgaGVyZSB0byBhdm9pZCBjYWxsYmFja3MKICAqIGZvciBvbGRlciBmYW1pbGllcwogICovCi12b2lkIGFyOTAwM19od19zZXRfbmZfbGltaXRzKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXI5MDAzX2h3X2JiX3dhdGNoZG9nX2NvbmZpZyhzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGFyOTAwM19od19iYl93YXRjaGRvZ19yZWFkKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXI5MDAzX2h3X2JiX3dhdGNoZG9nX2RiZ19pbmZvKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXI5MDAzX3BhcHJkX2VuYWJsZShzdHJ1Y3QgYXRoX2h3ICphaCwgYm9vbCB2YWwpOwordm9pZCBhcjkwMDNfcGFwcmRfcG9wdWxhdGVfc2luZ2xlX3RhYmxlKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwgaW50IGNoYWluKTsKK2ludCBhcjkwMDNfcGFwcmRfY3JlYXRlX2N1cnZlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCSAgICAgIGludCBjaGFpbik7CitpbnQgYXI5MDAzX3BhcHJkX3NldHVwX2dhaW5fdGFibGUoc3RydWN0IGF0aF9odyAqYWgsIGludCBjaGFpbik7CitpbnQgYXI5MDAzX3BhcHJkX2luaXRfdGFibGUoc3RydWN0IGF0aF9odyAqYWgpOworYm9vbCBhcjkwMDNfcGFwcmRfaXNfZG9uZShzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGFyOTAwM19od19zZXRfcGFwcmRfdHhkZXNjKHN0cnVjdCBhdGhfaHcgKmFoLCB2b2lkICpkcywgdTggY2hhaW5zKTsKIAogLyogSGFyZHdhcmUgZmFtaWx5IG9wIGF0dGFjaCBoZWxwZXJzICovCiB2b2lkIGFyNTAwOF9od19hdHRhY2hfcGh5X29wcyhzdHJ1Y3QgYXRoX2h3ICphaCk7CkBAIC05MjYsOCArOTc3LDI0IEBACiB2b2lkIGFyOTAwMl9od19hdHRhY2hfb3BzKHN0cnVjdCBhdGhfaHcgKmFoKTsKIHZvaWQgYXI5MDAzX2h3X2F0dGFjaF9vcHMoc3RydWN0IGF0aF9odyAqYWgpOwogCisvKgorICogQU5JIHdvcmsgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGFsbCBmYW1pbGllcyBidXQgYSBuZXh0CisgKiBnZW5lcmF0aW9uIGltcGxlbWVudGF0aW9uIG9mIEFOSSB3aWxsIGJlIHVzZWQgb25seSBmb3IgQVI5MDAzIG9ubHkKKyAqIGZvciBub3cgYXMgdGhlIG90aGVyIGZhbWlsaWVzIHN0aWxsIG5lZWQgdG8gYmUgdGVzdGVkIHdpdGggdGhlIHNhbWUKKyAqIG5leHQgZ2VuZXJhdGlvbiBBTkkuIEZlZWwgZnJlZSB0byBzdGFydCB0ZXN0aW5nIGl0IHRob3VnaCBmb3IgdGhlCisgKiBvbGRlciBmYW1pbGllcyAoQVI1MDA4LCBBUjkwMDEsIEFSOTAwMikgYnkgdXNpbmcgbW9kcGFyYW1fZm9yY2VfbmV3X2FuaS4KKyAqLworZXh0ZXJuIGludCBtb2RwYXJhbV9mb3JjZV9uZXdfYW5pOwordm9pZCBhdGg5a19od19hdHRhY2hfYW5pX29wc19vbGQoc3RydWN0IGF0aF9odyAqYWgpOwordm9pZCBhdGg5a19od19hdHRhY2hfYW5pX29wc19uZXcoc3RydWN0IGF0aF9odyAqYWgpOworCiAjZGVmaW5lIEFUSF9QQ0lFX0NBUF9MSU5LX0NUUkwJMHg3MAogI2RlZmluZSBBVEhfUENJRV9DQVBfTElOS19MMFMJMQogI2RlZmluZSBBVEhfUENJRV9DQVBfTElOS19MMQkyCiAKKyNkZWZpbmUgQVRIOUtfQ0xPQ0tfUkFURV9DQ0sJCTIyCisjZGVmaW5lIEFUSDlLX0NMT0NLX1JBVEVfNUdIWl9PRkRNCTQwCisjZGVmaW5lIEFUSDlLX0NMT0NLX1JBVEVfMkdIWl9PRkRNCTQ0CisjZGVmaW5lIEFUSDlLX0NMT0NLX0ZBU1RfUkFURV81R0haX09GRE0gNDQKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaW5pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2luaXQuYwppbmRleCBkNDU3Y2IzLi4yNDNjMTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9pbml0LmMKQEAgLTMzLDYgKzMzLDEwIEBACiBtb2R1bGVfcGFyYW1fbmFtZWQobm9od2NyeXB0LCBtb2RwYXJhbV9ub2h3Y3J5cHQsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG5vaHdjcnlwdCwgIkRpc2FibGUgaGFyZHdhcmUgZW5jcnlwdGlvbiIpOwogCitpbnQgbGVkX2JsaW5rID0gMTsKK21vZHVsZV9wYXJhbV9uYW1lZChibGluaywgbGVkX2JsaW5rLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhibGluaywgIkVuYWJsZSBMRUQgYmxpbmsgb24gYWN0aXZpdHkiKTsKKwogLyogV2UgdXNlIHRoZSBod192YWx1ZSBhcyBhbiBpbmRleCBpbnRvIG91ciBwcml2YXRlIGNoYW5uZWwgc3RydWN0dXJlICovCiAKICNkZWZpbmUgQ0hBTjJHKF9mcmVxLCBfaWR4KSAgeyBcCkBAIC0xNzUsMTggKzE3OSw2IEBACiAJLndyaXRlID0gYXRoOWtfaW93cml0ZTMyLAogfTsKIAotc3RhdGljIGludCBjb3VudF9zdHJlYW1zKHVuc2lnbmVkIGludCBjaGFpbm1hc2ssIGludCBtYXgpCi17Ci0JaW50IHN0cmVhbXMgPSAwOwotCi0JZG8gewotCQlpZiAoKytzdHJlYW1zID09IG1heCkKLQkJCWJyZWFrOwotCX0gd2hpbGUgKChjaGFpbm1hc2sgPSBjaGFpbm1hc2sgJiAoY2hhaW5tYXNrIC0gMSkpKTsKLQotCXJldHVybiBzdHJlYW1zOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgSW5pdGlhbGl6YXRpb24gICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMDgsNiArMjAwLDkgQEAKIAlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfTERQQykKIAkJaHRfaW5mby0+Y2FwIHw9IElFRUU4MDIxMV9IVF9DQVBfTERQQ19DT0RJTkc7CiAKKwlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfU0dJXzIwKQorCQlodF9pbmZvLT5jYXAgfD0gSUVFRTgwMjExX0hUX0NBUF9TR0lfMjA7CisKIAlodF9pbmZvLT5hbXBkdV9mYWN0b3IgPSBJRUVFODAyMTFfSFRfTUFYX0FNUERVXzY0SzsKIAlodF9pbmZvLT5hbXBkdV9kZW5zaXR5ID0gSUVFRTgwMjExX0hUX01QRFVfREVOU0lUWV84OwogCkBAIC0yMjQsOCArMjE5LDggQEAKIAogCS8qIHNldCB1cCBzdXBwb3J0ZWQgbWNzIHNldCAqLwogCW1lbXNldCgmaHRfaW5mby0+bWNzLCAwLCBzaXplb2YoaHRfaW5mby0+bWNzKSk7Ci0JdHhfc3RyZWFtcyA9IGNvdW50X3N0cmVhbXMoY29tbW9uLT50eF9jaGFpbm1hc2ssIG1heF9zdHJlYW1zKTsKLQlyeF9zdHJlYW1zID0gY291bnRfc3RyZWFtcyhjb21tb24tPnJ4X2NoYWlubWFzaywgbWF4X3N0cmVhbXMpOworCXR4X3N0cmVhbXMgPSBhdGg5a19jbW5fY291bnRfc3RyZWFtcyhjb21tb24tPnR4X2NoYWlubWFzaywgbWF4X3N0cmVhbXMpOworCXJ4X3N0cmVhbXMgPSBhdGg5a19jbW5fY291bnRfc3RyZWFtcyhjb21tb24tPnJ4X2NoYWlubWFzaywgbWF4X3N0cmVhbXMpOwogCiAJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCiAJCSAgIlRYIHN0cmVhbXMgJWQsIFJYIHN0cmVhbXM6ICVkXG4iLApAQCAtMzg4LDM2ICszODMsMTQgQEAKIAlmb3IgKGkgPSAwOyBpIDwgY29tbW9uLT5rZXltYXg7IGkrKykKIAkJYXRoOWtfaHdfa2V5cmVzZXQoc2MtPnNjX2FoLCAodTE2KSBpKTsKIAotCWlmIChhdGg5a19od19nZXRjYXBhYmlsaXR5KHNjLT5zY19haCwgQVRIOUtfQ0FQX0NJUEhFUiwKLQkJCQkgICBBVEg5S19DSVBIRVJfVEtJUCwgTlVMTCkpIHsKLQkJLyoKLQkJICogV2hldGhlciB3ZSBzaG91bGQgZW5hYmxlIGgvdyBUS0lQIE1JQy4KLQkJICogWFhYOiBpZiB3ZSBkb24ndCBzdXBwb3J0IFdNRSBUS0lQIE1JQywgdGhlbiB3ZSB3b3VsZG4ndAotCQkgKiByZXBvcnQgV01NIGNhcGFibGUsIHNvIGl0J3MgYWx3YXlzIHNhZmUgdG8gdHVybiBvbgotCQkgKiBUS0lQIE1JQyBpbiB0aGlzIGNhc2UuCi0JCSAqLwotCQlhdGg5a19od19zZXRjYXBhYmlsaXR5KHNjLT5zY19haCwgQVRIOUtfQ0FQX1RLSVBfTUlDLCAwLCAxLCBOVUxMKTsKLQl9Ci0KIAkvKgogCSAqIENoZWNrIHdoZXRoZXIgdGhlIHNlcGFyYXRlIGtleSBjYWNoZSBlbnRyaWVzCiAJICogYXJlIHJlcXVpcmVkIHRvIGhhbmRsZSBib3RoIHR4K3J4IE1JQyBrZXlzLgogCSAqIFdpdGggc3BsaXQgbWljIGtleXMgdGhlIG51bWJlciBvZiBzdGF0aW9ucyBpcyBsaW1pdGVkCiAJICogdG8gMjcgb3RoZXJ3aXNlIDU5LgogCSAqLwotCWlmIChhdGg5a19od19nZXRjYXBhYmlsaXR5KHNjLT5zY19haCwgQVRIOUtfQ0FQX0NJUEhFUiwKLQkJCQkgICBBVEg5S19DSVBIRVJfVEtJUCwgTlVMTCkKLQkgICAgJiYgYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShzYy0+c2NfYWgsIEFUSDlLX0NBUF9DSVBIRVIsCi0JCQkJICAgICAgQVRIOUtfQ0lQSEVSX01JQywgTlVMTCkKLQkgICAgJiYgYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShzYy0+c2NfYWgsIEFUSDlLX0NBUF9US0lQX1NQTElULAotCQkJCSAgICAgIDAsIE5VTEwpKQorCWlmICghKHNjLT5zY19haC0+bWlzY19tb2RlICYgQVJfUENVX01JQ19ORVdfTE9DX0VOQSkpCiAJCWNvbW1vbi0+c3BsaXRtaWMgPSAxOwotCi0JLyogdHVybiBvbiBtY2FzdCBrZXkgc2VhcmNoIGlmIHBvc3NpYmxlICovCi0JaWYgKCFhdGg5a19od19nZXRjYXBhYmlsaXR5KHNjLT5zY19haCwgQVRIOUtfQ0FQX01DQVNUX0tFWVNSQ0gsIDAsIE5VTEwpKQotCQkodm9pZClhdGg5a19od19zZXRjYXBhYmlsaXR5KHNjLT5zY19haCwgQVRIOUtfQ0FQX01DQVNUX0tFWVNSQ0gsCi0JCQkJCSAgICAgMSwgMSwgTlVMTCk7Ci0KIH0KIAogc3RhdGljIGludCBhdGg5a19pbml0X2J0Y29leChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKQEAgLTQzNSw3ICs0MDgsNyBAQAogCQlyID0gYXRoX2luaXRfYnRjb2V4X3RpbWVyKHNjKTsKIAkJaWYgKHIpCiAJCQlyZXR1cm4gLTE7Ci0JCXFudW0gPSBhdGhfdHhfZ2V0X3FudW0oc2MsIEFUSDlLX1RYX1FVRVVFX0RBVEEsIEFUSDlLX1dNRV9BQ19CRSk7CisJCXFudW0gPSBzYy0+dHguaHdxX21hcFtXTUVfQUNfQkVdOwogCQlhdGg5a19od19pbml0X2J0Y29leF9odyhzYy0+c2NfYWgsIHFudW0pOwogCQlzYy0+YnRjb2V4LmJ0X3N0b21wX3R5cGUgPSBBVEhfQlRDT0VYX1NUT01QX0xPVzsKIAkJYnJlYWs7CkBAIC00NzIsMjMgKzQ0NSwyMyBAQAogCXNjLT5jb25maWcuY2FicVJlYWR5dGltZSA9IEFUSF9DQUJRX1JFQURZX1RJTUU7CiAJYXRoX2NhYnFfdXBkYXRlKHNjKTsKIAotCWlmICghYXRoX3R4X3NldHVwKHNjLCBBVEg5S19XTUVfQUNfQkspKSB7CisJaWYgKCFhdGhfdHhfc2V0dXAoc2MsIFdNRV9BQ19CSykpIHsKIAkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKIAkJCSAgIlVuYWJsZSB0byBzZXR1cCB4bWl0IHF1ZXVlIGZvciBCSyB0cmFmZmljXG4iKTsKIAkJZ290byBlcnI7CiAJfQogCi0JaWYgKCFhdGhfdHhfc2V0dXAoc2MsIEFUSDlLX1dNRV9BQ19CRSkpIHsKKwlpZiAoIWF0aF90eF9zZXR1cChzYywgV01FX0FDX0JFKSkgewogCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAogCQkJICAiVW5hYmxlIHRvIHNldHVwIHhtaXQgcXVldWUgZm9yIEJFIHRyYWZmaWNcbiIpOwogCQlnb3RvIGVycjsKIAl9Ci0JaWYgKCFhdGhfdHhfc2V0dXAoc2MsIEFUSDlLX1dNRV9BQ19WSSkpIHsKKwlpZiAoIWF0aF90eF9zZXR1cChzYywgV01FX0FDX1ZJKSkgewogCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAogCQkJICAiVW5hYmxlIHRvIHNldHVwIHhtaXQgcXVldWUgZm9yIFZJIHRyYWZmaWNcbiIpOwogCQlnb3RvIGVycjsKIAl9Ci0JaWYgKCFhdGhfdHhfc2V0dXAoc2MsIEFUSDlLX1dNRV9BQ19WTykpIHsKKwlpZiAoIWF0aF90eF9zZXR1cChzYywgV01FX0FDX1ZPKSkgewogCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAogCQkJICAiVW5hYmxlIHRvIHNldHVwIHhtaXQgcXVldWUgZm9yIFZPIHRyYWZmaWNcbiIpOwogCQlnb3RvIGVycjsKQEAgLTc0NSw2ICs3MTgsOCBAQAogCQkJZ290byBlcnJvcl93b3JsZDsKIAl9CiAKKwlJTklUX1dPUksoJnNjLT5od19jaGVja193b3JrLCBhdGhfaHdfY2hlY2spOworCUlOSVRfV09SSygmc2MtPnBhcHJkX3dvcmssIGF0aF9wYXByZF9jYWxpYnJhdGUpOwogCUlOSVRfV09SSygmc2MtPmNoYW5fd29yaywgYXRoOWtfd2lwaHlfY2hhbl93b3JrKTsKIAlJTklUX0RFTEFZRURfV09SSygmc2MtPndpcGh5X3dvcmssIGF0aDlrX3dpcGh5X3dvcmspOwogCXNjLT53aXBoeV9zY2hlZHVsZXJfaW50ID0gbXNlY3NfdG9famlmZmllcyg1MDApOwpAQCAtODEyLDEyICs3ODcsMTIgQEAKIAkJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoYXBoeS0+aHcpOwogCQlpZWVlODAyMTFfZnJlZV9odyhhcGh5LT5odyk7CiAJfQotCWtmcmVlKHNjLT5zZWNfd2lwaHkpOwogCiAJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoaHcpOwogCWF0aF9yeF9jbGVhbnVwKHNjKTsKIAlhdGhfdHhfY2xlYW51cChzYyk7CiAJYXRoOWtfZGVpbml0X3NvZnRjKHNjKTsKKwlrZnJlZShzYy0+c2VjX3dpcGh5KTsKIH0KIAogdm9pZCBhdGhfZGVzY2RtYV9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5jCmluZGV4IDBlNDI1Y2IuLmU5NTViYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmMKQEAgLTE1LDYgKzE1LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiaHcuaCIKKyNpbmNsdWRlICJody1vcHMuaCIKIAogc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X3R4cV9pbnRlcnJ1cHRzKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCQlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWkpCkBAIC01NTQsOCArNTU1LDEzIEBACiAJCVJFR1dSSVRFX0JVRkZFUl9GTFVTSChhaCk7CiAJCURJU0FCTEVfUkVHV1JJVEVfQlVGRkVSKGFoKTsKIAotCQkvKiBjd21pbiBhbmQgY3dtYXggc2hvdWxkIGJlIDAgZm9yIGJlYWNvbiBxdWV1ZSAqLwotCQlpZiAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSkgeworCQkvKgorCQkgKiBjd21pbiBhbmQgY3dtYXggc2hvdWxkIGJlIDAgZm9yIGJlYWNvbiBxdWV1ZQorCQkgKiBidXQgbm90IGZvciBJQlNTIGFzIHdlIHdvdWxkIGNyZWF0ZSBhbiBpbWJhbGFuY2UKKwkJICogb24gYmVhY29uaW5nIGZhaXJuZXNzIGZvciBwYXJ0aWNpcGF0aW5nIG5vZGVzLgorCQkgKi8KKwkJaWYgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkgJiYKKwkJICAgIGFoLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKIAkJCVJFR19XUklURShhaCwgQVJfRExDTF9JRlMocSksIFNNKDAsIEFSX0RfTENMX0lGU19DV01JTikKIAkJCQkgIHwgU00oMCwgQVJfRF9MQ0xfSUZTX0NXTUFYKQogCQkJCSAgfCBTTShxaS0+dHFpX2FpZnMsIEFSX0RfTENMX0lGU19BSUZTKSk7CkBAIC03NTYsMTEgKzc2MiwxMSBAQAogfQogRVhQT1JUX1NZTUJPTChhdGg5a19od19wdXRyeGJ1Zik7CiAKLXZvaWQgYXRoOWtfaHdfc3RhcnRwY3VyZWNlaXZlKHN0cnVjdCBhdGhfaHcgKmFoKQordm9pZCBhdGg5a19od19zdGFydHBjdXJlY2VpdmUoc3RydWN0IGF0aF9odyAqYWgsIGJvb2wgaXNfc2Nhbm5pbmcpCiB7CiAJYXRoOWtfZW5hYmxlX21pYl9jb3VudGVycyhhaCk7CiAKLQlhdGg5a19hbmlfcmVzZXQoYWgpOworCWF0aDlrX2FuaV9yZXNldChhaCwgaXNfc2Nhbm5pbmcpOwogCiAJUkVHX0NMUl9CSVQoYWgsIEFSX0RJQUdfU1csIChBUl9ESUFHX1JYX0RJUyB8IEFSX0RJQUdfUlhfQUJPUlQpKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaAppbmRleCAwMGYzZTBjLi4yNjMzODk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oCkBAIC00ODUsNiArNDg1LDkgQEAKICNkZWZpbmUgQVJfVHhSU1NJQ29tYmluZWQgICAweGZmMDAwMDAwCiAjZGVmaW5lIEFSX1R4UlNTSUNvbWJpbmVkX1MgMjQKIAorI2RlZmluZSBBUl9UeFRpZAkweGYwMDAwMDAwCisjZGVmaW5lIEFSX1R4VGlkX1MJMjgKKwogI2RlZmluZSBBUl9UeEVWTTAgICAgICAgICAgIGRzX3R4c3RhdHVzNQogI2RlZmluZSBBUl9UeEVWTTEgICAgICAgICAgIGRzX3R4c3RhdHVzNgogI2RlZmluZSBBUl9UeEVWTTIgICAgICAgICAgIGRzX3R4c3RhdHVzNwpAQCAtNTc3LDEzICs1ODAsOCBAQAogCiAjZGVmaW5lCUFUSDlLX05VTV9UWF9RVUVVRVMgMTAKIAotZW51bSBhdGg5a190eF9xdWV1ZV9zdWJ0eXBlIHsKLQlBVEg5S19XTUVfQUNfQksgPSAwLAotCUFUSDlLX1dNRV9BQ19CRSwKLQlBVEg5S19XTUVfQUNfVkksCi0JQVRIOUtfV01FX0FDX1ZPLAotCUFUSDlLX1dNRV9VUFNECi19OworLyogVXNlZCBhcyBhIHF1ZXVlIHN1YnR5cGUgaW5zdGVhZCBvZiBhIFdNTSBBQyAqLworI2RlZmluZSBBVEg5S19XTUVfVVBTRAk0CiAKIGVudW0gYXRoOWtfdHhfcXVldWVfZmxhZ3MgewogCVRYUV9GTEFHX1RYT0tJTlRfRU5BQkxFID0gMHgwMDAxLApAQCAtNjE3LDcgKzYxNSw3IEBACiBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyB7CiAJdTMyIHRxaV92ZXI7CiAJZW51bSBhdGg5a190eF9xdWV1ZSB0cWlfdHlwZTsKLQllbnVtIGF0aDlrX3R4X3F1ZXVlX3N1YnR5cGUgdHFpX3N1YnR5cGU7CisJaW50IHRxaV9zdWJ0eXBlOwogCWVudW0gYXRoOWtfdHhfcXVldWVfZmxhZ3MgdHFpX3FmbGFnczsKIAl1MzIgdHFpX3ByaW9yaXR5OwogCXUzMiB0cWlfYWlmczsKQEAgLTcxNSw3ICs3MTMsNyBAQAogCQkJICB1MzIgc2l6ZSwgdTMyIGZsYWdzKTsKIGJvb2wgYXRoOWtfaHdfc2V0cnhhYm9ydChzdHJ1Y3QgYXRoX2h3ICphaCwgYm9vbCBzZXQpOwogdm9pZCBhdGg5a19od19wdXRyeGJ1ZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJ4ZHApOwotdm9pZCBhdGg5a19od19zdGFydHBjdXJlY2VpdmUoc3RydWN0IGF0aF9odyAqYWgpOwordm9pZCBhdGg5a19od19zdGFydHBjdXJlY2VpdmUoc3RydWN0IGF0aF9odyAqYWgsIGJvb2wgaXNfc2Nhbm5pbmcpOwogdm9pZCBhdGg5a19od19zdG9wcGN1cmVjdihzdHJ1Y3QgYXRoX2h3ICphaCk7CiB2b2lkIGF0aDlrX2h3X2Fib3J0cGN1cmVjdihzdHJ1Y3QgYXRoX2h3ICphaCk7CiBib29sIGF0aDlrX2h3X3N0b3BkbWFyZWN2KHN0cnVjdCBhdGhfaHcgKmFoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCmluZGV4IDFlMmE2OGUuLjA0MjlkZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYwpAQCAtNTEsMTMgKzUxLDExIEBACiBzdGF0aWMgdm9pZCBhdGhfdXBkYXRlX3R4cG93KHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewogCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwotCXUzMiB0eHBvdzsKIAogCWlmIChzYy0+Y3VydHhwb3cgIT0gc2MtPmNvbmZpZy50eHBvd2xpbWl0KSB7CiAJCWF0aDlrX2h3X3NldF90eHBvd2VybGltaXQoYWgsIHNjLT5jb25maWcudHhwb3dsaW1pdCk7CiAJCS8qIHJlYWQgYmFjayBpbiBjYXNlIHZhbHVlIGlzIGNsYW1wZWQgKi8KLQkJYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShhaCwgQVRIOUtfQ0FQX1RYUE9XLCAxLCAmdHhwb3cpOwotCQlzYy0+Y3VydHhwb3cgPSB0eHBvdzsKKwkJc2MtPmN1cnR4cG93ID0gYXRoOWtfaHdfcmVndWxhdG9yeShhaCktPnBvd2VyX2xpbWl0OwogCX0KIH0KIApAQCAtMjMyLDYgKzIzMCwxMTQgQEAKIAlyZXR1cm4gcjsKIH0KIAorc3RhdGljIHZvaWQgYXRoX3BhcHJkX2FjdGl2YXRlKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCWludCBjaGFpbjsKKworCWlmICghYWgtPmN1cmNoYW4tPnBhcHJkX2RvbmUpCisJCXJldHVybjsKKworCWF0aDlrX3BzX3dha2V1cChzYyk7CisJZm9yIChjaGFpbiA9IDA7IGNoYWluIDwgQVI5MzAwX01BWF9DSEFJTlM7IGNoYWluKyspIHsKKwkJaWYgKCEoYWgtPmNhcHMudHhfY2hhaW5tYXNrICYgQklUKGNoYWluKSkpCisJCQljb250aW51ZTsKKworCQlhcjkwMDNfcGFwcmRfcG9wdWxhdGVfc2luZ2xlX3RhYmxlKGFoLCBhaC0+Y3VyY2hhbiwgY2hhaW4pOworCX0KKworCWFyOTAwM19wYXByZF9lbmFibGUoYWgsIHRydWUpOworCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOworfQorCit2b2lkIGF0aF9wYXByZF9jYWxpYnJhdGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdGhfc29mdGMsIHBhcHJkX3dvcmspOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvOworCWludCBiYW5kID0gaHctPmNvbmYuY2hhbm5lbC0+YmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCA9ICZzYy0+c2JhbmRzW2JhbmRdOworCXN0cnVjdCBhdGhfdHhfY29udHJvbCB0eGN0bDsKKwlpbnQgcW51bSwgZnR5cGU7CisJaW50IGNoYWluX29rID0gMDsKKwlpbnQgY2hhaW47CisJaW50IGxlbiA9IDE4MDA7CisJaW50IHRpbWVfbGVmdDsKKwlpbnQgaTsKKworCXNrYiA9IGFsbG9jX3NrYihsZW4sIEdGUF9LRVJORUwpOworCWlmICghc2tiKQorCQlyZXR1cm47CisKKwl0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCisJc2tiX3B1dChza2IsIGxlbik7CisJbWVtc2V0KHNrYi0+ZGF0YSwgMCwgbGVuKTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJZnR5cGUgPSBJRUVFODAyMTFfRlRZUEVfREFUQSB8IElFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQzsKKwloZHItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihmdHlwZSk7CisJaGRyLT5kdXJhdGlvbl9pZCA9IGNwdV90b19sZTE2KDEwKTsKKwltZW1jcHkoaGRyLT5hZGRyMSwgaHctPndpcGh5LT5wZXJtX2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkoaGRyLT5hZGRyMiwgaHctPndpcGh5LT5wZXJtX2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkoaGRyLT5hZGRyMywgaHctPndpcGh5LT5wZXJtX2FkZHIsIEVUSF9BTEVOKTsKKworCW1lbXNldCgmdHhjdGwsIDAsIHNpemVvZih0eGN0bCkpOworCXFudW0gPSBzYy0+dHguaHdxX21hcFtXTUVfQUNfQkVdOworCXR4Y3RsLnR4cSA9ICZzYy0+dHgudHhxW3FudW1dOworCisJYXRoOWtfcHNfd2FrZXVwKHNjKTsKKwlhcjkwMDNfcGFwcmRfaW5pdF90YWJsZShhaCk7CisJZm9yIChjaGFpbiA9IDA7IGNoYWluIDwgQVI5MzAwX01BWF9DSEFJTlM7IGNoYWluKyspIHsKKwkJaWYgKCEoYWgtPmNhcHMudHhfY2hhaW5tYXNrICYgQklUKGNoYWluKSkpCisJCQljb250aW51ZTsKKworCQljaGFpbl9vayA9IDA7CisJCW1lbXNldCh0eF9pbmZvLCAwLCBzaXplb2YoKnR4X2luZm8pKTsKKwkJdHhfaW5mby0+YmFuZCA9IGJhbmQ7CisKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJdHhfaW5mby0+Y29udHJvbC5yYXRlc1tpXS5pZHggPSBzYmFuZC0+bl9iaXRyYXRlcyAtIDE7CisJCQl0eF9pbmZvLT5jb250cm9sLnJhdGVzW2ldLmNvdW50ID0gNjsKKwkJfQorCisJCWluaXRfY29tcGxldGlvbigmc2MtPnBhcHJkX2NvbXBsZXRlKTsKKwkJYXI5MDAzX3BhcHJkX3NldHVwX2dhaW5fdGFibGUoYWgsIGNoYWluKTsKKwkJdHhjdGwucGFwcmQgPSBCSVQoY2hhaW4pOworCQlpZiAoYXRoX3R4X3N0YXJ0KGh3LCBza2IsICZ0eGN0bCkgIT0gMCkKKwkJCWJyZWFrOworCisJCXRpbWVfbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmc2MtPnBhcHJkX2NvbXBsZXRlLAorCQkJCW1zZWNzX3RvX2ppZmZpZXMoQVRIX1BBUFJEX1RJTUVPVVQpKTsKKwkJaWYgKCF0aW1lX2xlZnQpIHsKKwkJCWF0aF9wcmludChhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCQkgICJUaW1lb3V0IHdhaXRpbmcgZm9yIHBhcHJkIHRyYWluaW5nIG9uICIKKwkJCQkgICJUWCBjaGFpbiAlZFxuIiwKKwkJCQkgIGNoYWluKTsKKwkJCWdvdG8gZmFpbF9wYXByZDsKKwkJfQorCisJCWlmICghYXI5MDAzX3BhcHJkX2lzX2RvbmUoYWgpKQorCQkJYnJlYWs7CisKKwkJaWYgKGFyOTAwM19wYXByZF9jcmVhdGVfY3VydmUoYWgsIGFoLT5jdXJjaGFuLCBjaGFpbikgIT0gMCkKKwkJCWJyZWFrOworCisJCWNoYWluX29rID0gMTsKKwl9CisJa2ZyZWVfc2tiKHNrYik7CisKKwlpZiAoY2hhaW5fb2spIHsKKwkJYWgtPmN1cmNoYW4tPnBhcHJkX2RvbmUgPSB0cnVlOworCQlhdGhfcGFwcmRfYWN0aXZhdGUoc2MpOworCX0KKworZmFpbF9wYXByZDoKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKK30KKwogLyoKICAqICBUaGlzIHJvdXRpbmUgcGVyZm9ybXMgdGhlIHBlcmlvZGljIG5vaXNlIGZsb29yIGNhbGlicmF0aW9uIGZ1bmN0aW9uCiAgKiAgdGhhdCBpcyB1c2VkIHRvIGFkanVzdCBhbmQgb3B0aW1pemUgdGhlIGNoaXAgcGVyZm9ybWFuY2UuICBUaGlzCkBAIC0yODUsNyArMzkxLDggQEAKIAl9CiAKIAkvKiBWZXJpZnkgd2hldGhlciB3ZSBtdXN0IGNoZWNrIEFOSSAqLwotCWlmICgodGltZXN0YW1wIC0gY29tbW9uLT5hbmkuY2hlY2thbmlfdGltZXIpID49IEFUSF9BTklfUE9MTElOVEVSVkFMKSB7CisJaWYgKCh0aW1lc3RhbXAgLSBjb21tb24tPmFuaS5jaGVja2FuaV90aW1lcikgPj0KKwkgICAgIGFoLT5jb25maWcuYW5pX3BvbGxfaW50ZXJ2YWwpIHsKIAkJYW5pZmxhZyA9IHRydWU7CiAJCWNvbW1vbi0+YW5pLmNoZWNrYW5pX3RpbWVyID0gdGltZXN0YW1wOwogCX0KQEAgLTMyNiwxNSArNDMzLDI0IEBACiAJKi8KIAljYWxfaW50ZXJ2YWwgPSBBVEhfTE9OR19DQUxJTlRFUlZBTDsKIAlpZiAoc2MtPnNjX2FoLT5jb25maWcuZW5hYmxlX2FuaSkKLQkJY2FsX2ludGVydmFsID0gbWluKGNhbF9pbnRlcnZhbCwgKHUzMilBVEhfQU5JX1BPTExJTlRFUlZBTCk7CisJCWNhbF9pbnRlcnZhbCA9IG1pbihjYWxfaW50ZXJ2YWwsCisJCQkJICAgKHUzMilhaC0+Y29uZmlnLmFuaV9wb2xsX2ludGVydmFsKTsKIAlpZiAoIWNvbW1vbi0+YW5pLmNhbGRvbmUpCiAJCWNhbF9pbnRlcnZhbCA9IG1pbihjYWxfaW50ZXJ2YWwsICh1MzIpc2hvcnRfY2FsX2ludGVydmFsKTsKIAogCW1vZF90aW1lcigmY29tbW9uLT5hbmkudGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGNhbF9pbnRlcnZhbCkpOworCWlmICgoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfUEFQUkQpICYmCisJICAgICEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfU0NBTk5JTkcpKSB7CisJCWlmICghc2MtPnNjX2FoLT5jdXJjaGFuLT5wYXByZF9kb25lKQorCQkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoc2MtPmh3LCAmc2MtPnBhcHJkX3dvcmspOworCQllbHNlCisJCQlhdGhfcGFwcmRfYWN0aXZhdGUoc2MpOworCX0KIH0KIAogc3RhdGljIHZvaWQgYXRoX3N0YXJ0X2FuaShzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uKQogeworCXN0cnVjdCBhdGhfaHcgKmFoID0gY29tbW9uLT5haDsKIAl1bnNpZ25lZCBsb25nIHRpbWVzdGFtcCA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyk7CiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKSBjb21tb24tPnByaXY7CiAKQEAgLTM0Niw3ICs0NjIsOCBAQAogCWNvbW1vbi0+YW5pLmNoZWNrYW5pX3RpbWVyID0gdGltZXN0YW1wOwogCiAJbW9kX3RpbWVyKCZjb21tb24tPmFuaS50aW1lciwKLQkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhBVEhfQU5JX1BPTExJTlRFUlZBTCkpOworCQkgIGppZmZpZXMgKworCQkJbXNlY3NfdG9famlmZmllcygodTMyKWFoLT5jb25maWcuYW5pX3BvbGxfaW50ZXJ2YWwpKTsKIH0KIAogLyoKQEAgLTM5OCw2ICs1MTUsMjUgQEAKIAkJYXRoX3R4X25vZGVfY2xlYW51cChzYywgYW4pOwogfQogCit2b2lkIGF0aF9od19jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0aF9zb2Z0YywgaHdfY2hlY2tfd29yayk7CisJaW50IGk7CisKKwlhdGg5a19wc193YWtldXAoc2MpOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlpZiAoYXRoOWtfaHdfY2hlY2tfYWxpdmUoc2MtPnNjX2FoKSkKKwkJCWdvdG8gb3V0OworCisJCW1zbGVlcCgxKTsKKwl9CisJYXRoX3Jlc2V0KHNjLCBmYWxzZSk7CisKK291dDoKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKK30KKwogdm9pZCBhdGg5a190YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IChzdHJ1Y3QgYXRoX3NvZnRjICopZGF0YTsKQEAgLTQwOSwxMyArNTQ1LDE1IEBACiAKIAlhdGg5a19wc193YWtldXAoc2MpOwogCi0JaWYgKChzdGF0dXMgJiBBVEg5S19JTlRfRkFUQUwpIHx8Ci0JICAgICFhdGg5a19od19jaGVja19hbGl2ZShhaCkpIHsKKwlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX0ZBVEFMKSB7CiAJCWF0aF9yZXNldChzYywgZmFsc2UpOwogCQlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAkJcmV0dXJuOwogCX0KIAorCWlmICghYXRoOWtfaHdfY2hlY2tfYWxpdmUoYWgpKQorCQlpZWVlODAyMTFfcXVldWVfd29yayhzYy0+aHcsICZzYy0+aHdfY2hlY2tfd29yayk7CisKIAlpZiAoYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9FRE1BKQogCQlyeG1hc2sgPSAoQVRIOUtfSU5UX1JYSFAgfCBBVEg5S19JTlRfUlhMUCB8IEFUSDlLX0lOVF9SWEVPTCB8CiAJCQkgIEFUSDlLX0lOVF9SWE9STik7CkBAIC01MjQsNiArNjYyLDEyIEBACiAJICAgICEoYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9FRE1BKSkpCiAJCWdvdG8gY2hpcF9yZXNldDsKIAorCWlmICgoYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9FRE1BKSAmJgorCSAgICAoc3RhdHVzICYgQVRIOUtfSU5UX0JCX1dBVENIRE9HKSkgeworCQlhcjkwMDNfaHdfYmJfd2F0Y2hkb2dfZGJnX2luZm8oYWgpOworCQlnb3RvIGNoaXBfcmVzZXQ7CisJfQorCiAJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9TV0JBKQogCQl0YXNrbGV0X3NjaGVkdWxlKCZzYy0+YmNvbl90YXNrbGV0KTsKIApAQCAtNjE5LDIzNCArNzYzLDYgQEAKIAlyZXR1cm4gY2hhbm1vZGU7CiB9CiAKLXN0YXRpYyBpbnQgYXRoX3NldGtleV90a2lwKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sIHUxNiBrZXlpeCwgY29uc3QgdTggKmtleSwKLQkJCSAgIHN0cnVjdCBhdGg5a19rZXl2YWwgKmhrLCBjb25zdCB1OCAqYWRkciwKLQkJCSAgIGJvb2wgYXV0aGVudGljYXRvcikKLXsKLQlzdHJ1Y3QgYXRoX2h3ICphaCA9IGNvbW1vbi0+YWg7Ci0JY29uc3QgdTggKmtleV9yeG1pYzsKLQljb25zdCB1OCAqa2V5X3R4bWljOwotCi0Ja2V5X3R4bWljID0ga2V5ICsgTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1RYX01JQ19LRVk7Ci0Ja2V5X3J4bWljID0ga2V5ICsgTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1JYX01JQ19LRVk7Ci0KLQlpZiAoYWRkciA9PSBOVUxMKSB7Ci0JCS8qCi0JCSAqIEdyb3VwIGtleSBpbnN0YWxsYXRpb24gLSBvbmx5IHR3byBrZXkgY2FjaGUgZW50cmllcyBhcmUgdXNlZAotCQkgKiByZWdhcmRsZXNzIG9mIHNwbGl0bWljIGNhcGFiaWxpdHkgc2luY2UgZ3JvdXAga2V5IGlzIG9ubHkKLQkJICogdXNlZCBlaXRoZXIgZm9yIFRYIG9yIFJYLgotCQkgKi8KLQkJaWYgKGF1dGhlbnRpY2F0b3IpIHsKLQkJCW1lbWNweShoay0+a3ZfbWljLCBrZXlfdHhtaWMsIHNpemVvZihoay0+a3ZfbWljKSk7Ci0JCQltZW1jcHkoaGstPmt2X3R4bWljLCBrZXlfdHhtaWMsIHNpemVvZihoay0+a3ZfbWljKSk7Ci0JCX0gZWxzZSB7Ci0JCQltZW1jcHkoaGstPmt2X21pYywga2V5X3J4bWljLCBzaXplb2YoaGstPmt2X21pYykpOwotCQkJbWVtY3B5KGhrLT5rdl90eG1pYywga2V5X3J4bWljLCBzaXplb2YoaGstPmt2X21pYykpOwotCQl9Ci0JCXJldHVybiBhdGg5a19od19zZXRfa2V5Y2FjaGVfZW50cnkoYWgsIGtleWl4LCBoaywgYWRkcik7Ci0JfQotCWlmICghY29tbW9uLT5zcGxpdG1pYykgewotCQkvKiBUWCBhbmQgUlgga2V5cyBzaGFyZSB0aGUgc2FtZSBrZXkgY2FjaGUgZW50cnkuICovCi0JCW1lbWNweShoay0+a3ZfbWljLCBrZXlfcnhtaWMsIHNpemVvZihoay0+a3ZfbWljKSk7Ci0JCW1lbWNweShoay0+a3ZfdHhtaWMsIGtleV90eG1pYywgc2l6ZW9mKGhrLT5rdl90eG1pYykpOwotCQlyZXR1cm4gYXRoOWtfaHdfc2V0X2tleWNhY2hlX2VudHJ5KGFoLCBrZXlpeCwgaGssIGFkZHIpOwotCX0KLQotCS8qIFNlcGFyYXRlIGtleSBjYWNoZSBlbnRyaWVzIGZvciBUWCBhbmQgUlggKi8KLQotCS8qIFRYIGtleSBnb2VzIGF0IGZpcnN0IGluZGV4LCBSWCBrZXkgYXQgKzMyLiAqLwotCW1lbWNweShoay0+a3ZfbWljLCBrZXlfdHhtaWMsIHNpemVvZihoay0+a3ZfbWljKSk7Ci0JaWYgKCFhdGg5a19od19zZXRfa2V5Y2FjaGVfZW50cnkoYWgsIGtleWl4LCBoaywgTlVMTCkpIHsKLQkJLyogVFggTUlDIGVudHJ5IGZhaWxlZC4gTm8gbmVlZCB0byBwcm9jZWVkIGZ1cnRoZXIgKi8KLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIlNldHRpbmcgVFggTUlDIEtleSBGYWlsZWRcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQltZW1jcHkoaGstPmt2X21pYywga2V5X3J4bWljLCBzaXplb2YoaGstPmt2X21pYykpOwotCS8qIFhYWCBkZWxldGUgdHgga2V5IG9uIGZhaWx1cmU/ICovCi0JcmV0dXJuIGF0aDlrX2h3X3NldF9rZXljYWNoZV9lbnRyeShhaCwga2V5aXggKyAzMiwgaGssIGFkZHIpOwotfQotCi1zdGF0aWMgaW50IGF0aF9yZXNlcnZlX2tleV9jYWNoZV9zbG90X3RraXAoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbikKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IElFRUU4MDIxMV9XRVBfTktJRDsgaSA8IGNvbW1vbi0+a2V5bWF4IC8gMjsgaSsrKSB7Ci0JCWlmICh0ZXN0X2JpdChpLCBjb21tb24tPmtleW1hcCkgfHwKLQkJICAgIHRlc3RfYml0KGkgKyA2NCwgY29tbW9uLT5rZXltYXApKQotCQkJY29udGludWU7IC8qIEF0IGxlYXN0IG9uZSBwYXJ0IG9mIFRLSVAga2V5IGFsbG9jYXRlZCAqLwotCQlpZiAoY29tbW9uLT5zcGxpdG1pYyAmJgotCQkgICAgKHRlc3RfYml0KGkgKyAzMiwgY29tbW9uLT5rZXltYXApIHx8Ci0JCSAgICAgdGVzdF9iaXQoaSArIDY0ICsgMzIsIGNvbW1vbi0+a2V5bWFwKSkpCi0JCQljb250aW51ZTsgLyogQXQgbGVhc3Qgb25lIHBhcnQgb2YgVEtJUCBrZXkgYWxsb2NhdGVkICovCi0KLQkJLyogRm91bmQgYSBmcmVlIHNsb3QgZm9yIGEgVEtJUCBrZXkgKi8KLQkJcmV0dXJuIGk7Ci0JfQotCXJldHVybiAtMTsKLX0KLQotc3RhdGljIGludCBhdGhfcmVzZXJ2ZV9rZXlfY2FjaGVfc2xvdChzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uKQotewotCWludCBpOwotCi0JLyogRmlyc3QsIHRyeSB0byBmaW5kIHNsb3RzIHRoYXQgd291bGQgbm90IGJlIGF2YWlsYWJsZSBmb3IgVEtJUC4gKi8KLQlpZiAoY29tbW9uLT5zcGxpdG1pYykgewotCQlmb3IgKGkgPSBJRUVFODAyMTFfV0VQX05LSUQ7IGkgPCBjb21tb24tPmtleW1heCAvIDQ7IGkrKykgewotCQkJaWYgKCF0ZXN0X2JpdChpLCBjb21tb24tPmtleW1hcCkgJiYKLQkJCSAgICAodGVzdF9iaXQoaSArIDMyLCBjb21tb24tPmtleW1hcCkgfHwKLQkJCSAgICAgdGVzdF9iaXQoaSArIDY0LCBjb21tb24tPmtleW1hcCkgfHwKLQkJCSAgICAgdGVzdF9iaXQoaSArIDY0ICsgMzIsIGNvbW1vbi0+a2V5bWFwKSkpCi0JCQkJcmV0dXJuIGk7Ci0JCQlpZiAoIXRlc3RfYml0KGkgKyAzMiwgY29tbW9uLT5rZXltYXApICYmCi0JCQkgICAgKHRlc3RfYml0KGksIGNvbW1vbi0+a2V5bWFwKSB8fAotCQkJICAgICB0ZXN0X2JpdChpICsgNjQsIGNvbW1vbi0+a2V5bWFwKSB8fAotCQkJICAgICB0ZXN0X2JpdChpICsgNjQgKyAzMiwgY29tbW9uLT5rZXltYXApKSkKLQkJCQlyZXR1cm4gaSArIDMyOwotCQkJaWYgKCF0ZXN0X2JpdChpICsgNjQsIGNvbW1vbi0+a2V5bWFwKSAmJgotCQkJICAgICh0ZXN0X2JpdChpICwgY29tbW9uLT5rZXltYXApIHx8Ci0JCQkgICAgIHRlc3RfYml0KGkgKyAzMiwgY29tbW9uLT5rZXltYXApIHx8Ci0JCQkgICAgIHRlc3RfYml0KGkgKyA2NCArIDMyLCBjb21tb24tPmtleW1hcCkpKQotCQkJCXJldHVybiBpICsgNjQ7Ci0JCQlpZiAoIXRlc3RfYml0KGkgKyA2NCArIDMyLCBjb21tb24tPmtleW1hcCkgJiYKLQkJCSAgICAodGVzdF9iaXQoaSwgY29tbW9uLT5rZXltYXApIHx8Ci0JCQkgICAgIHRlc3RfYml0KGkgKyAzMiwgY29tbW9uLT5rZXltYXApIHx8Ci0JCQkgICAgIHRlc3RfYml0KGkgKyA2NCwgY29tbW9uLT5rZXltYXApKSkKLQkJCQlyZXR1cm4gaSArIDY0ICsgMzI7Ci0JCX0KLQl9IGVsc2UgewotCQlmb3IgKGkgPSBJRUVFODAyMTFfV0VQX05LSUQ7IGkgPCBjb21tb24tPmtleW1heCAvIDI7IGkrKykgewotCQkJaWYgKCF0ZXN0X2JpdChpLCBjb21tb24tPmtleW1hcCkgJiYKLQkJCSAgICB0ZXN0X2JpdChpICsgNjQsIGNvbW1vbi0+a2V5bWFwKSkKLQkJCQlyZXR1cm4gaTsKLQkJCWlmICh0ZXN0X2JpdChpLCBjb21tb24tPmtleW1hcCkgJiYKLQkJCSAgICAhdGVzdF9iaXQoaSArIDY0LCBjb21tb24tPmtleW1hcCkpCi0JCQkJcmV0dXJuIGkgKyA2NDsKLQkJfQotCX0KLQotCS8qIE5vIHBhcnRpYWxseSB1c2VkIFRLSVAgc2xvdHMsIHBpY2sgYW55IGF2YWlsYWJsZSBzbG90ICovCi0JZm9yIChpID0gSUVFRTgwMjExX1dFUF9OS0lEOyBpIDwgY29tbW9uLT5rZXltYXg7IGkrKykgewotCQkvKiBEbyBub3QgYWxsb3cgc2xvdHMgdGhhdCBjb3VsZCBiZSBuZWVkZWQgZm9yIFRLSVAgZ3JvdXAga2V5cwotCQkgKiB0byBiZSB1c2VkLiBUaGlzIGxpbWl0YXRpb24gY291bGQgYmUgcmVtb3ZlZCBpZiB3ZSBrbm93IHRoYXQKLQkJICogVEtJUCB3aWxsIG5vdCBiZSB1c2VkLiAqLwotCQlpZiAoaSA+PSA2NCAmJiBpIDwgNjQgKyBJRUVFODAyMTFfV0VQX05LSUQpCi0JCQljb250aW51ZTsKLQkJaWYgKGNvbW1vbi0+c3BsaXRtaWMpIHsKLQkJCWlmIChpID49IDMyICYmIGkgPCAzMiArIElFRUU4MDIxMV9XRVBfTktJRCkKLQkJCQljb250aW51ZTsKLQkJCWlmIChpID49IDY0ICsgMzIgJiYgaSA8IDY0ICsgMzIgKyBJRUVFODAyMTFfV0VQX05LSUQpCi0JCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoIXRlc3RfYml0KGksIGNvbW1vbi0+a2V5bWFwKSkKLQkJCXJldHVybiBpOyAvKiBGb3VuZCBhIGZyZWUgc2xvdCBmb3IgYSBrZXkgKi8KLQl9Ci0KLQkvKiBObyBmcmVlIHNsb3QgZm91bmQgKi8KLQlyZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBpbnQgYXRoX2tleV9jb25maWcoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiwKLQkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKLQkJCSAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQotewotCXN0cnVjdCBhdGhfaHcgKmFoID0gY29tbW9uLT5haDsKLQlzdHJ1Y3QgYXRoOWtfa2V5dmFsIGhrOwotCWNvbnN0IHU4ICptYWMgPSBOVUxMOwotCWludCByZXQgPSAwOwotCWludCBpZHg7Ci0KLQltZW1zZXQoJmhrLCAwLCBzaXplb2YoaGspKTsKLQotCXN3aXRjaCAoa2V5LT5hbGcpIHsKLQljYXNlIEFMR19XRVA6Ci0JCWhrLmt2X3R5cGUgPSBBVEg5S19DSVBIRVJfV0VQOwotCQlicmVhazsKLQljYXNlIEFMR19US0lQOgotCQloay5rdl90eXBlID0gQVRIOUtfQ0lQSEVSX1RLSVA7Ci0JCWJyZWFrOwotCWNhc2UgQUxHX0NDTVA6Ci0JCWhrLmt2X3R5cGUgPSBBVEg5S19DSVBIRVJfQUVTX0NDTTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQotCWhrLmt2X2xlbiA9IGtleS0+a2V5bGVuOwotCW1lbWNweShoay5rdl92YWwsIGtleS0+a2V5LCBrZXktPmtleWxlbik7Ci0KLQlpZiAoIShrZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSkgewotCQkvKiBGb3Igbm93LCB1c2UgdGhlIGRlZmF1bHQga2V5cyBmb3IgYnJvYWRjYXN0IGtleXMuIFRoaXMgbWF5Ci0JCSAqIG5lZWQgdG8gY2hhbmdlIHdpdGggdmlydHVhbCBpbnRlcmZhY2VzLiAqLwotCQlpZHggPSBrZXktPmtleWlkeDsKLQl9IGVsc2UgaWYgKGtleS0+a2V5aWR4KSB7Ci0JCWlmIChXQVJOX09OKCFzdGEpKQotCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCQltYWMgPSBzdGEtPmFkZHI7Ci0KLQkJaWYgKHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkgewotCQkJLyogT25seSBrZXlpZHggMCBzaG91bGQgYmUgdXNlZCB3aXRoIHVuaWNhc3Qga2V5LCBidXQKLQkJCSAqIGFsbG93IHRoaXMgZm9yIGNsaWVudCBtb2RlIGZvciBub3cuICovCi0JCQlpZHggPSBrZXktPmtleWlkeDsKLQkJfSBlbHNlCi0JCQlyZXR1cm4gLUVJTzsKLQl9IGVsc2UgewotCQlpZiAoV0FSTl9PTighc3RhKSkKLQkJCXJldHVybiAtRU9QTk9UU1VQUDsKLQkJbWFjID0gc3RhLT5hZGRyOwotCi0JCWlmIChrZXktPmFsZyA9PSBBTEdfVEtJUCkKLQkJCWlkeCA9IGF0aF9yZXNlcnZlX2tleV9jYWNoZV9zbG90X3RraXAoY29tbW9uKTsKLQkJZWxzZQotCQkJaWR4ID0gYXRoX3Jlc2VydmVfa2V5X2NhY2hlX3Nsb3QoY29tbW9uKTsKLQkJaWYgKGlkeCA8IDApCi0JCQlyZXR1cm4gLUVOT1NQQzsgLyogbm8gZnJlZSBrZXkgY2FjaGUgZW50cmllcyAqLwotCX0KLQotCWlmIChrZXktPmFsZyA9PSBBTEdfVEtJUCkKLQkJcmV0ID0gYXRoX3NldGtleV90a2lwKGNvbW1vbiwgaWR4LCBrZXktPmtleSwgJmhrLCBtYWMsCi0JCQkJICAgICAgdmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKTsKLQllbHNlCi0JCXJldCA9IGF0aDlrX2h3X3NldF9rZXljYWNoZV9lbnRyeShhaCwgaWR4LCAmaGssIG1hYyk7Ci0KLQlpZiAoIXJldCkKLQkJcmV0dXJuIC1FSU87Ci0KLQlzZXRfYml0KGlkeCwgY29tbW9uLT5rZXltYXApOwotCWlmIChrZXktPmFsZyA9PSBBTEdfVEtJUCkgewotCQlzZXRfYml0KGlkeCArIDY0LCBjb21tb24tPmtleW1hcCk7Ci0JCWlmIChjb21tb24tPnNwbGl0bWljKSB7Ci0JCQlzZXRfYml0KGlkeCArIDMyLCBjb21tb24tPmtleW1hcCk7Ci0JCQlzZXRfYml0KGlkeCArIDY0ICsgMzIsIGNvbW1vbi0+a2V5bWFwKTsKLQkJfQotCX0KLQotCXJldHVybiBpZHg7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aF9rZXlfZGVsZXRlKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKLXsKLQlzdHJ1Y3QgYXRoX2h3ICphaCA9IGNvbW1vbi0+YWg7Ci0KLQlhdGg5a19od19rZXlyZXNldChhaCwga2V5LT5od19rZXlfaWR4KTsKLQlpZiAoa2V5LT5od19rZXlfaWR4IDwgSUVFRTgwMjExX1dFUF9OS0lEKQotCQlyZXR1cm47Ci0KLQljbGVhcl9iaXQoa2V5LT5od19rZXlfaWR4LCBjb21tb24tPmtleW1hcCk7Ci0JaWYgKGtleS0+YWxnICE9IEFMR19US0lQKQotCQlyZXR1cm47Ci0KLQljbGVhcl9iaXQoa2V5LT5od19rZXlfaWR4ICsgNjQsIGNvbW1vbi0+a2V5bWFwKTsKLQlpZiAoY29tbW9uLT5zcGxpdG1pYykgewotCQlhdGg5a19od19rZXlyZXNldChhaCwga2V5LT5od19rZXlfaWR4ICsgMzIpOwotCQljbGVhcl9iaXQoa2V5LT5od19rZXlfaWR4ICsgMzIsIGNvbW1vbi0+a2V5bWFwKTsKLQkJY2xlYXJfYml0KGtleS0+aHdfa2V5X2lkeCArIDY0ICsgMzIsIGNvbW1vbi0+a2V5bWFwKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIGF0aDlrX2Jzc19hc3NvY19pbmZvKHN0cnVjdCBhdGhfc29mdGMgKnNjLAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZikKQEAgLTk0MSw5ICs4NTcsMTQgQEAKIAlhdGg5a19wc193YWtldXAoc2MpOwogCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7CiAKLQkvKiBEaXNhYmxlIExFRCAqLwotCWF0aDlrX2h3X3NldF9ncGlvKGFoLCBhaC0+bGVkX3BpbiwgMSk7Ci0JYXRoOWtfaHdfY2ZnX2dwaW9faW5wdXQoYWgsIGFoLT5sZWRfcGluKTsKKwkvKgorCSAqIEtlZXAgdGhlIExFRCBvbiB3aGVuIHRoZSByYWRpbyBpcyBkaXNhYmxlZAorCSAqIGR1cmluZyBpZGxlIHVuYXNzb2NpYXRlZCBzdGF0ZS4KKwkgKi8KKwlpZiAoIXNjLT5wc19pZGxlKSB7CisJCWF0aDlrX2h3X3NldF9ncGlvKGFoLCBhaC0+bGVkX3BpbiwgMSk7CisJCWF0aDlrX2h3X2NmZ19ncGlvX2lucHV0KGFoLCBhaC0+bGVkX3Bpbik7CisJfQogCiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCiAJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIDApOwpAQCAtMTAzMiwyNSArOTUzLDI1IEBACiAJcmV0dXJuIHI7CiB9CiAKLWludCBhdGhfZ2V0X2hhbF9xbnVtKHUxNiBxdWV1ZSwgc3RydWN0IGF0aF9zb2Z0YyAqc2MpCitzdGF0aWMgaW50IGF0aF9nZXRfaGFsX3FudW0odTE2IHF1ZXVlLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKIAlpbnQgcW51bTsKIAogCXN3aXRjaCAocXVldWUpIHsKIAljYXNlIDA6Ci0JCXFudW0gPSBzYy0+dHguaHdxX21hcFtBVEg5S19XTUVfQUNfVk9dOworCQlxbnVtID0gc2MtPnR4Lmh3cV9tYXBbV01FX0FDX1ZPXTsKIAkJYnJlYWs7CiAJY2FzZSAxOgotCQlxbnVtID0gc2MtPnR4Lmh3cV9tYXBbQVRIOUtfV01FX0FDX1ZJXTsKKwkJcW51bSA9IHNjLT50eC5od3FfbWFwW1dNRV9BQ19WSV07CiAJCWJyZWFrOwogCWNhc2UgMjoKLQkJcW51bSA9IHNjLT50eC5od3FfbWFwW0FUSDlLX1dNRV9BQ19CRV07CisJCXFudW0gPSBzYy0+dHguaHdxX21hcFtXTUVfQUNfQkVdOwogCQlicmVhazsKIAljYXNlIDM6Ci0JCXFudW0gPSBzYy0+dHguaHdxX21hcFtBVEg5S19XTUVfQUNfQktdOworCQlxbnVtID0gc2MtPnR4Lmh3cV9tYXBbV01FX0FDX0JLXTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcW51bSA9IHNjLT50eC5od3FfbWFwW0FUSDlLX1dNRV9BQ19CRV07CisJCXFudW0gPSBzYy0+dHguaHdxX21hcFtXTUVfQUNfQkVdOwogCQlicmVhazsKIAl9CiAKQEAgLTEwNjIsMTYgKzk4MywxNiBAQAogCWludCBxbnVtOwogCiAJc3dpdGNoIChxdWV1ZSkgewotCWNhc2UgQVRIOUtfV01FX0FDX1ZPOgorCWNhc2UgV01FX0FDX1ZPOgogCQlxbnVtID0gMDsKIAkJYnJlYWs7Ci0JY2FzZSBBVEg5S19XTUVfQUNfVkk6CisJY2FzZSBXTUVfQUNfVkk6CiAJCXFudW0gPSAxOwogCQlicmVhazsKLQljYXNlIEFUSDlLX1dNRV9BQ19CRToKKwljYXNlIFdNRV9BQ19CRToKIAkJcW51bSA9IDI7CiAJCWJyZWFrOwotCWNhc2UgQVRIOUtfV01FX0FDX0JLOgorCWNhc2UgV01FX0FDX0JLOgogCQlxbnVtID0gMzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTEyMDEsNyArMTEyMiw5IEBACiAJCSAgICBBVEg5S19JTlRfR0xPQkFMOwogCiAJaWYgKGFoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfRURNQSkKLQkJYWgtPmltYXNrIHw9IEFUSDlLX0lOVF9SWEhQIHwgQVRIOUtfSU5UX1JYTFA7CisJCWFoLT5pbWFzayB8PSBBVEg5S19JTlRfUlhIUCB8CisJCQkgICAgIEFUSDlLX0lOVF9SWExQIHwKKwkJCSAgICAgQVRIOUtfSU5UX0JCX1dBVENIRE9HOwogCWVsc2UKIAkJYWgtPmltYXNrIHw9IEFUSDlLX0lOVF9SWDsKIApAQCAtMTI1MSw2ICsxMTc0LDcgQEAKIAlzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgdHhjdGw7CiAJaW50IHBhZHBvcywgcGFkc2l6ZTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwlpbnQgcW51bTsKIAogCWlmIChhcGh5LT5zdGF0ZSAhPSBBVEhfV0lQSFlfQUNUSVZFICYmIGFwaHktPnN0YXRlICE9IEFUSF9XSVBIWV9TQ0FOKSB7CiAJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfWE1JVCwKQEAgLTEyODAsNyArMTIwNCw4IEBACiAJCSAqIGNvbXBsZXRlZCBhbmQgaWYgbmVlZGVkLCBhbHNvIGZvciBSWCBvZiBidWZmZXJlZCBmcmFtZXMuCiAJCSAqLwogCQlhdGg5a19wc193YWtldXAoc2MpOwotCQlhdGg5a19od19zZXRyeGFib3J0KHNjLT5zY19haCwgMCk7CisJCWlmICghKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0FVVE9TTEVFUCkpCisJCQlhdGg5a19od19zZXRyeGFib3J0KHNjLT5zY19haCwgMCk7CiAJCWlmIChpZWVlODAyMTFfaXNfcHNwb2xsKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKIAkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfUFMsCiAJCQkJICAiU2VuZGluZyBQUy1Qb2xsIHRvIHBpY2sgYSBidWZmZXJlZCBmcmFtZVxuIik7CkBAIC0xMzIyLDExICsxMjQ3LDggQEAKIAkJbWVtbW92ZShza2ItPmRhdGEsIHNrYi0+ZGF0YSArIHBhZHNpemUsIHBhZHBvcyk7CiAJfQogCi0JLyogQ2hlY2sgaWYgYSB0eCBxdWV1ZSBpcyBhdmFpbGFibGUgKi8KLQotCXR4Y3RsLnR4cSA9IGF0aF90ZXN0X2dldF90eHEoc2MsIHNrYik7Ci0JaWYgKCF0eGN0bC50eHEpCi0JCWdvdG8gZXhpdDsKKwlxbnVtID0gYXRoX2dldF9oYWxfcW51bShza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSwgc2MpOworCXR4Y3RsLnR4cSA9ICZzYy0+dHgudHhxW3FudW1dOwogCiAJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19YTUlULCAidHJhbnNtaXR0aW5nIHBhY2tldCwgc2tiOiAlcFxuIiwgc2tiKTsKIApAQCAtMTM0NywxNSArMTI2OSwyNSBAQAogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CisJaW50IGk7CiAKIAltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOwogCiAJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfSU5BQ1RJVkU7CiAKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT5hdGhfbGVkX2JsaW5rX3dvcmspOwotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmc2MtPnR4X2NvbXBsZXRlX3dvcmspOworCWlmIChsZWRfYmxpbmspCisJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmc2MtPmF0aF9sZWRfYmxpbmtfd29yayk7CiAKLQlpZiAoIXNjLT5udW1fc2VjX3dpcGh5KSB7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZzYy0+dHhfY29tcGxldGVfd29yayk7CisJY2FuY2VsX3dvcmtfc3luYygmc2MtPnBhcHJkX3dvcmspOworCWNhbmNlbF93b3JrX3N5bmMoJnNjLT5od19jaGVja193b3JrKTsKKworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCWlmIChzYy0+c2VjX3dpcGh5W2ldKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gc2MtPm51bV9zZWNfd2lwaHkpIHsKIAkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZzYy0+d2lwaHlfd29yayk7CiAJCWNhbmNlbF93b3JrX3N5bmMoJnNjLT5jaGFuX3dvcmspOwogCX0KQEAgLTE1NDcsOCArMTQ3OSw4IEBACiAJCQlhaC0+aW1hc2sgfD0gQVRIOUtfSU5UX1RJTV9USU1FUjsKIAkJCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBhaC0+aW1hc2spOwogCQl9CisJCWF0aDlrX2h3X3NldHJ4YWJvcnQoYWgsIDEpOwogCX0KLQlhdGg5a19od19zZXRyeGFib3J0KGFoLCAxKTsKIH0KIAogc3RhdGljIGludCBhdGg5a19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQpAQCAtMTc4NSw3ICsxNzE3LDcgQEAKIAkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwgIlRYUSBVcGRhdGUgZmFpbGVkXG4iKTsKIAogCWlmIChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJaWYgKChxbnVtID09IHNjLT50eC5od3FfbWFwW0FUSDlLX1dNRV9BQ19CRV0pICYmICFyZXQpCisJCWlmICgocW51bSA9PSBzYy0+dHguaHdxX21hcFtXTUVfQUNfQkVdKSAmJiAhcmV0KQogCQkJYXRoX2JlYWNvbnFfY29uZmlnKHNjKTsKIAogCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKQEAgLTE4MTMsNyArMTc0NSw3IEBACiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU0VUX0tFWToKLQkJcmV0ID0gYXRoX2tleV9jb25maWcoY29tbW9uLCB2aWYsIHN0YSwga2V5KTsKKwkJcmV0ID0gYXRoOWtfY21uX2tleV9jb25maWcoY29tbW9uLCB2aWYsIHN0YSwga2V5KTsKIAkJaWYgKHJldCA+PSAwKSB7CiAJCQlrZXktPmh3X2tleV9pZHggPSByZXQ7CiAJCQkvKiBwdXNoIElWIGFuZCBNaWNoYWVsIE1JQyBnZW5lcmF0aW9uIHRvIHN0YWNrICovCkBAIC0xODI2LDcgKzE3NTgsNyBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgRElTQUJMRV9LRVk6Ci0JCWF0aF9rZXlfZGVsZXRlKGNvbW1vbiwga2V5KTsKKwkJYXRoOWtfY21uX2tleV9kZWxldGUoY29tbW9uLCBrZXkpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwpAQCAtMTk5OSw2ICsxOTMxLDggQEAKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCWludCByZXQgPSAwOwogCisJbG9jYWxfYmhfZGlzYWJsZSgpOworCiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIElFRUU4MDIxMV9BTVBEVV9SWF9TVEFSVDoKIAkJaWYgKCEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfUlhBR0dSKSkKQEAgLTIwMjgsNiArMTk2Miw4IEBACiAJCQkgICJVbmtub3duIEFNUERVIGFjdGlvblxuIik7CiAJfQogCisJbG9jYWxfYmhfZW5hYmxlKCk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMDU4LDExICsxOTk0LDEyIEBACiAKIAltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOwogCWlmIChhdGg5a193aXBoeV9zY2FubmluZyhzYykpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgImF0aDlrOiBUd28gd2lwaHlzIHRyeWluZyB0byBzY2FuIGF0IHRoZSAiCi0JCSAgICAgICAic2FtZSB0aW1lXG4iKTsKIAkJLyoKLQkJICogRG8gbm90IGFsbG93IHRoZSBjb25jdXJyZW50IHNjYW5uaW5nIHN0YXRlIGZvciBub3cuIFRoaXMKLQkJICogY291bGQgYmUgaW1wcm92ZWQgd2l0aCBzY2FubmluZyBjb250cm9sIG1vdmVkIGludG8gYXRoOWsuCisJCSAqIFRoZXJlIGlzIGEgcmFjZSBoZXJlIGluIG1hYzgwMjExIGJ1dCBmaXhpbmcgaXQgcmVxdWlyZXMKKwkJICogd2UgcmV2aXNpdCBob3cgd2UgaGFuZGxlIHRoZSBzY2FuIGNvbXBsZXRlIGNhbGxiYWNrLgorCQkgKiBBZnRlciBtYWM4MDIxMSBmaXhlcyB3ZSB3aWxsIG5vdCBoYXZlIGNvbmZpZ3VyZWQgaGFyZHdhcmUKKwkJICogdG8gdGhlIGhvbWUgY2hhbm5lbCBub3Igd291bGQgd2UgaGF2ZSBjb25maWd1cmVkIHRoZSBSWAorCQkgKiBmaWx0ZXIgeWV0LgogCQkgKi8KIAkJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOwogCQlyZXR1cm47CkBAIC0yMDcyLDEwICsyMDA5LDE2IEBACiAJYXRoOWtfd2lwaHlfcGF1c2VfYWxsX2ZvcmNlZChzYywgYXBoeSk7CiAJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX1NDQU5OSU5HOwogCWRlbF90aW1lcl9zeW5jKCZjb21tb24tPmFuaS50aW1lcik7CisJY2FuY2VsX3dvcmtfc3luYygmc2MtPnBhcHJkX3dvcmspOworCWNhbmNlbF93b3JrX3N5bmMoJnNjLT5od19jaGVja193b3JrKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT50eF9jb21wbGV0ZV93b3JrKTsKIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CiB9CiAKKy8qCisgKiBYWFg6IHRoaXMgcmVxdWlyZXMgYSByZXZpc2l0IGFmdGVyIHRoZSBkcml2ZXIKKyAqIHNjYW5fY29tcGxldGUgZ2V0cyBtb3ZlZCB0byBhbm90aGVyIHBsYWNlL3JlbW92ZWQgaW4gbWFjODAyMTEuCisgKi8KIHN0YXRpYyB2b2lkIGF0aDlrX3N3X3NjYW5fY29tcGxldGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BjaS5jCmluZGV4IDFlYzgzNmMuLmI1YjY1MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9wY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGNpLmMKQEAgLTI4LDYgKzI4LDcgQEAKIAl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyQykgfSwgLyogUENJLUUgODAyLjExbiBib25kZWQgb3V0ICovCiAJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMkQpIH0sIC8qIFBDSSAgICovCiAJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMkUpIH0sIC8qIFBDSS1FICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMzApIH0sIC8qIFBDSS1FICBBUjkzMDAgKi8KIAl7IDAgfQogfTsKIApAQCAtMjA4LDExICsyMDksOCBAQAogCX0KIAogCWF0aDlrX2h3X25hbWUoc2MtPnNjX2FoLCBod19uYW1lLCBzaXplb2YoaHdfbmFtZSkpOwotCXByaW50ayhLRVJOX0lORk8KLQkgICAgICAgIiVzOiAlcyBtZW09MHglbHgsIGlycT0lZFxuIiwKLQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLAotCSAgICAgICBod19uYW1lLAotCSAgICAgICAodW5zaWduZWQgbG9uZyltZW0sIHBkZXYtPmlycSk7CisJd2lwaHlfaW5mbyhody0+d2lwaHksICIlcyBtZW09MHglbHgsIGlycT0lZFxuIiwKKwkJICAgaHdfbmFtZSwgKHVuc2lnbmVkIGxvbmcpbWVtLCBwZGV2LT5pcnEpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmMKaW5kZXggODUxOTQ1Mi4uZTQ5YmU3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmMKQEAgLTIwLDkzICsyMCwxNDUgQEAKICNpbmNsdWRlICJhdGg5ay5oIgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aF9yYXRlX3RhYmxlIGFyNTQxNl8xMW5hX3JhdGV0YWJsZSA9IHsKLQk0MiwKKwk2OCwKIAk4LCAvKiBNQ1Mgc3RhcnQgKi8KIAl7Ci0JCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCA2MDAwLCAvKiA2IE1iICovCi0JCQk1NDAwLCAwLCAxMiwgMCwgMCwgMCwgMCwgMCB9LAotCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgOTAwMCwgLyogOSBNYiAqLwotCQkJNzgwMCwgIDEsIDE4LCAwLCAxLCAxLCAxLCAxIH0sCi0JCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCAxMjAwMCwgLyogMTIgTWIgKi8KLQkJCTEwMDAwLCAyLCAyNCwgMiwgMiwgMiwgMiwgMiB9LAotCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgMTgwMDAsIC8qIDE4IE1iICovCi0JCQkxMzkwMCwgMywgMzYsIDIsIDMsIDMsIDMsIDMgfSwKLQkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDI0MDAwLCAvKiAyNCBNYiAqLwotCQkJMTczMDAsIDQsIDQ4LCA0LCA0LCA0LCA0LCA0IH0sCi0JCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCAzNjAwMCwgLyogMzYgTWIgKi8KLQkJCTIzMDAwLCA1LCA3MiwgNCwgNSwgNSwgNSwgNSB9LAotCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgNDgwMDAsIC8qIDQ4IE1iICovCi0JCQkyNzQwMCwgNiwgOTYsIDQsIDYsIDYsIDYsIDYgfSwKLQkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDU0MDAwLCAvKiA1NCBNYiAqLwotCQkJMjkzMDAsIDcsIDEwOCwgNCwgNywgNywgNywgNyB9LAotCQl7IFZBTElEXzIwNDAsIFZBTElEXzIwNDAsIFdMQU5fUkNfUEhZX0hUXzIwX1NTLCA2NTAwLCAvKiA2LjUgTWIgKi8KLQkJCTY0MDAsIDAsIDAsIDAsIDgsIDI0LCA4LCAyNCB9LAotCQl7IFZBTElEXzIwLCBWQUxJRF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDEzMDAwLCAvKiAxMyBNYiAqLwotCQkJMTI3MDAsIDEsIDEsIDIsIDksIDI1LCA5LCAyNSB9LAotCQl7IFZBTElEXzIwLCBWQUxJRF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDE5NTAwLCAvKiAxOS41IE1iICovCi0JCQkxODgwMCwgMiwgMiwgMiwgMTAsIDI2LCAxMCwgMjYgfSwKLQkJeyBWQUxJRF8yMCwgVkFMSURfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX1NTLCAyNjAwMCwgLyogMjYgTWIgKi8KLQkJCTI1MDAwLCAzLCAzLCA0LCAxMSwgMjcsIDExLCAyNyB9LAotCQl7IFZBTElEXzIwLCBWQUxJRF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDM5MDAwLCAvKiAzOSBNYiAqLwotCQkJMzY3MDAsIDQsIDQsIDQsIDEyLCAyOCwgMTIsIDI4IH0sCi0JCXsgSU5WQUxJRCwgVkFMSURfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX1NTLCA1MjAwMCwgLyogNTIgTWIgKi8KLQkJCTQ4MTAwLCA1LCA1LCA0LCAxMywgMjksIDEzLCAyOSB9LAotCQl7IElOVkFMSUQsIFZBTElEXzIwLCBXTEFOX1JDX1BIWV9IVF8yMF9TUywgNTg1MDAsIC8qIDU4LjUgTWIgKi8KLQkJCTUzNTAwLCA2LCA2LCA0LCAxNCwgMzAsIDE0LCAzMCB9LAotCQl7IElOVkFMSUQsIFZBTElEXzIwLCBXTEFOX1JDX1BIWV9IVF8yMF9TUywgNjUwMDAsIC8qIDY1IE1iICovCi0JCQk1OTAwMCwgNywgNywgNCwgMTUsIDMxLCAxNSwgMzIgfSwKLQkJeyBJTlZBTElELCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF8yMF9EUywgMTMwMDAsIC8qIDEzIE1iICovCi0JCQkxMjcwMCwgOCwgOCwgMywgMTYsIDMzLCAxNiwgMzMgfSwKLQkJeyBJTlZBTElELCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF8yMF9EUywgMjYwMDAsIC8qIDI2IE1iICovCi0JCQkyNDgwMCwgOSwgOSwgMiwgMTcsIDM0LCAxNywgMzQgfSwKLQkJeyBJTlZBTElELCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF8yMF9EUywgMzkwMDAsIC8qIDM5IE1iICovCi0JCQkzNjYwMCwgMTAsIDEwLCAyLCAxOCwgMzUsIDE4LCAzNSB9LAotCQl7IFZBTElEXzIwLCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF8yMF9EUywgNTIwMDAsIC8qIDUyIE1iICovCi0JCQk0ODEwMCwgMTEsIDExLCA0LCAxOSwgMzYsIDE5LCAzNiB9LAotCQl7IFZBTElEXzIwLCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF8yMF9EUywgNzgwMDAsIC8qIDc4IE1iICovCi0JCQk2OTUwMCwgMTIsIDEyLCA0LCAyMCwgMzcsIDIwLCAzNyB9LAotCQl7IFZBTElEXzIwLCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF8yMF9EUywgMTA0MDAwLCAvKiAxMDQgTWIgKi8KLQkJCTg5NTAwLCAxMywgMTMsIDQsIDIxLCAzOCwgMjEsIDM4IH0sCi0JCXsgVkFMSURfMjAsIElOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzIwX0RTLCAxMTcwMDAsIC8qIDExNyBNYiAqLwotCQkJOTg5MDAsIDE0LCAxNCwgNCwgMjIsIDM5LCAyMiwgMzkgfSwKLQkJeyBWQUxJRF8yMCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfMjBfRFMsIDEzMDAwMCwgLyogMTMwIE1iICovCi0JCQkxMDgzMDAsIDE1LCAxNSwgNCwgMjMsIDQwLCAyMywgNDEgfSwKLQkJeyBWQUxJRF80MCwgVkFMSURfNDAsIFdMQU5fUkNfUEhZX0hUXzQwX1NTLCAxMzUwMCwgLyogMTMuNSBNYiAqLwotCQkJMTMyMDAsIDAsIDAsIDAsIDgsIDI0LCAyNCwgMjQgfSwKLQkJeyBWQUxJRF80MCwgVkFMSURfNDAsIFdMQU5fUkNfUEhZX0hUXzQwX1NTLCAyNzUwMCwgLyogMjcuMCBNYiAqLwotCQkJMjU5MDAsIDEsIDEsIDIsIDksIDI1LCAyNSwgMjUgfSwKLQkJeyBWQUxJRF80MCwgVkFMSURfNDAsIFdMQU5fUkNfUEhZX0hUXzQwX1NTLCA0MDUwMCwgLyogNDAuNSBNYiAqLwotCQkJMzg2MDAsIDIsIDIsIDIsIDEwLCAyNiwgMjYsIDI2IH0sCi0JCXsgVkFMSURfNDAsIFZBTElEXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgNTQwMDAsIC8qIDU0IE1iICovCi0JCQk0OTgwMCwgMywgMywgNCwgMTEsIDI3LCAyNywgMjcgfSwKLQkJeyBWQUxJRF80MCwgVkFMSURfNDAsIFdMQU5fUkNfUEhZX0hUXzQwX1NTLCA4MTUwMCwgLyogODEgTWIgKi8KLQkJCTcyMjAwLCA0LCA0LCA0LCAxMiwgMjgsIDI4LCAyOCB9LAotCQl7IElOVkFMSUQsIFZBTElEXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgMTA4MDAwLCAvKiAxMDggTWIgKi8KLQkJCTkyOTAwLCA1LCA1LCA0LCAxMywgMjksIDI5LCAyOSB9LAotCQl7IElOVkFMSUQsIFZBTElEXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgMTIxNTAwLCAvKiAxMjEuNSBNYiAqLwotCQkJMTAyNzAwLCA2LCA2LCA0LCAxNCwgMzAsIDMwLCAzMCB9LAotCQl7IElOVkFMSUQsIFZBTElEXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgMTM1MDAwLCAvKiAxMzUgTWIgKi8KLQkJCTExMjAwMCwgNywgNywgNCwgMTUsIDMxLCAzMiwgMzIgfSwKLQkJeyBJTlZBTElELCBWQUxJRF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1NfSEdJLCAxNTAwMDAsIC8qIDE1MCBNYiAqLwotCQkJMTIyMDAwLCA3LCA3LCA0LCAxNSwgMzEsIDMyLCAzMiB9LAotCQl7IElOVkFMSUQsIElOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzQwX0RTLCAyNzAwMCwgLyogMjcgTWIgKi8KLQkJCTI1ODAwLCA4LCA4LCAwLCAxNiwgMzMsIDMzLCAzMyB9LAotCQl7IElOVkFMSUQsIElOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzQwX0RTLCA1NDAwMCwgLyogNTQgTWIgKi8KLQkJCTQ5ODAwLCA5LCA5LCAyLCAxNywgMzQsIDM0LCAzNCB9LAotCQl7IElOVkFMSUQsIElOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzQwX0RTLCA4MTAwMCwgLyogODEgTWIgKi8KLQkJCTcxOTAwLCAxMCwgMTAsIDIsIDE4LCAzNSwgMzUsIDM1IH0sCi0JCXsgVkFMSURfNDAsIElOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzQwX0RTLCAxMDgwMDAsIC8qIDEwOCBNYiAqLwotCQkJOTI1MDAsIDExLCAxMSwgNCwgMTksIDM2LCAzNiwgMzYgfSwKLQkJeyBWQUxJRF80MCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDE2MjAwMCwgLyogMTYyIE1iICovCi0JCQkxMzAzMDAsIDEyLCAxMiwgNCwgMjAsIDM3LCAzNywgMzcgfSwKLQkJeyBWQUxJRF80MCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDIxNjAwMCwgLyogMjE2IE1iICovCi0JCQkxNjI4MDAsIDEzLCAxMywgNCwgMjEsIDM4LCAzOCwgMzggfSwKLQkJeyBWQUxJRF80MCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDI0MzAwMCwgLyogMjQzIE1iICovCi0JCQkxNzgyMDAsIDE0LCAxNCwgNCwgMjIsIDM5LCAzOSwgMzkgfSwKLQkJeyBWQUxJRF80MCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDI3MDAwMCwgLyogMjcwIE1iICovCi0JCQkxOTIxMDAsIDE1LCAxNSwgNCwgMjMsIDQwLCA0MSwgNDEgfSwKLQkJeyBWQUxJRF80MCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfRFNfSEdJLCAzMDAwMDAsIC8qIDMwMCBNYiAqLwotCQkJMjA3MDAwLCAxNSwgMTUsIDQsIDIzLCA0MCwgNDEsIDQxIH0sCisJCVswXSA9IHsgUkNfTF9TRFQsIFdMQU5fUkNfUEhZX09GRE0sIDYwMDAsCisJCQk1NDAwLCAwLCAxMiwgMCwgMCwgMCwgMCB9LCAvKiA2IE1iICovCisJCVsxXSA9IHsgUkNfTF9TRFQsIFdMQU5fUkNfUEhZX09GRE0sIDkwMDAsCisJCQk3ODAwLCAgMSwgMTgsIDAsIDEsIDEsIDEgfSwgLyogOSBNYiAqLworCQlbMl0gPSB7IFJDX0xfU0RULCBXTEFOX1JDX1BIWV9PRkRNLCAxMjAwMCwKKwkJCTEwMDAwLCAyLCAyNCwgMiwgMiwgMiwgMiB9LCAvKiAxMiBNYiAqLworCQlbM10gPSB7IFJDX0xfU0RULCBXTEFOX1JDX1BIWV9PRkRNLCAxODAwMCwKKwkJCTEzOTAwLCAzLCAzNiwgMiwgMywgMywgMyB9LCAvKiAxOCBNYiAqLworCQlbNF0gPSB7IFJDX0xfU0RULCBXTEFOX1JDX1BIWV9PRkRNLCAyNDAwMCwKKwkJCTE3MzAwLCA0LCA0OCwgNCwgNCwgNCwgNCB9LCAvKiAyNCBNYiAqLworCQlbNV0gPSB7IFJDX0xfU0RULCBXTEFOX1JDX1BIWV9PRkRNLCAzNjAwMCwKKwkJCTIzMDAwLCA1LCA3MiwgNCwgNSwgNSwgNSB9LCAvKiAzNiBNYiAqLworCQlbNl0gPSB7IFJDX0xfU0RULCBXTEFOX1JDX1BIWV9PRkRNLCA0ODAwMCwKKwkJCTI3NDAwLCA2LCA5NiwgNCwgNiwgNiwgNiB9LCAvKiA0OCBNYiAqLworCQlbN10gPSB7IFJDX0xfU0RULCBXTEFOX1JDX1BIWV9PRkRNLCA1NDAwMCwKKwkJCTI5MzAwLCA3LCAxMDgsIDQsIDcsIDcsIDcgfSwgLyogNTQgTWIgKi8KKwkJWzhdID0geyBSQ19IVF9TRFRfMjA0MCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDY1MDAsCisJCQk2NDAwLCAwLCAwLCAwLCAzOCwgOCwgMzggfSwgLyogNi41IE1iICovCisJCVs5XSA9IHsgUkNfSFRfU0RUXzIwLCBXTEFOX1JDX1BIWV9IVF8yMF9TUywgMTMwMDAsCisJCQkxMjcwMCwgMSwgMSwgMiwgMzksIDksIDM5IH0sIC8qIDEzIE1iICovCisJCVsxMF0gPSB7IFJDX0hUX1NEVF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDE5NTAwLAorCQkJMTg4MDAsIDIsIDIsIDIsIDQwLCAxMCwgNDAgfSwgLyogMTkuNSBNYiAqLworCQlbMTFdID0geyBSQ19IVF9TRF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDI2MDAwLAorCQkJMjUwMDAsIDMsIDMsIDQsIDQxLCAxMSwgNDEgfSwgLyogMjYgTWIgKi8KKwkJWzEyXSA9IHsgUkNfSFRfU0RfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX1NTLCAzOTAwMCwKKwkJCTM2NzAwLCA0LCA0LCA0LCA0MiwgMTIsIDQyIH0sIC8qIDM5IE1iICovCisJCVsxM10gPSB7IFJDX0hUX1NfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX1NTLCA1MjAwMCwKKwkJCTQ4MTAwLCA1LCA1LCA0LCA0MywgMTMsIDQzIH0sIC8qIDUyIE1iICovCisJCVsxNF0gPSB7IFJDX0hUX1NfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX1NTLCA1ODUwMCwKKwkJCTUzNTAwLCA2LCA2LCA0LCA0NCwgMTQsIDQ0IH0sIC8qIDU4LjUgTWIgKi8KKwkJWzE1XSA9IHsgUkNfSFRfU18yMCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDY1MDAwLAorCQkJNTkwMDAsIDcsIDcsIDQsIDQ1LCAxNiwgNDYgfSwgLyogNjUgTWIgKi8KKwkJWzE2XSA9IHsgUkNfSFRfU18yMCwgV0xBTl9SQ19QSFlfSFRfMjBfU1NfSEdJLCA3MjIwMCwKKwkJCTY1NDAwLCA3LCA3LCA0LCA0NSwgMTYsIDQ2IH0sIC8qIDc1IE1iICovCisJCVsxN10gPSB7IFJDX0lOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzIwX0RTLCAxMzAwMCwKKwkJCTEyNzAwLCA4LCA4LCAwLCA0NywgMTcsIDQ3IH0sIC8qIDEzIE1iICovCisJCVsxOF0gPSB7IFJDX0hUX1RfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX0RTLCAyNjAwMCwKKwkJCTI0ODAwLCA5LCA5LCAyLCA0OCwgMTgsIDQ4IH0sIC8qIDI2IE1iICovCisJCVsxOV0gPSB7IFJDX0hUX1RfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX0RTLCAzOTAwMCwKKwkJCTM2NjAwLCAxMCwgMTAsIDIsIDQ5LCAxOSwgNDkgfSwgLyogMzkgTWIgKi8KKwkJWzIwXSA9IHsgUkNfSFRfRFRfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX0RTLCA1MjAwMCwKKwkJCTQ4MTAwLCAxMSwgMTEsIDQsIDUwLCAyMCwgNTAgfSwgLyogNTIgTWIgKi8KKwkJWzIxXSA9IHsgUkNfSFRfRFRfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX0RTLCA3ODAwMCwKKwkJCTY5NTAwLCAxMiwgMTIsIDQsIDUxLCAyMSwgNTEgfSwgLyogNzggTWIgKi8KKwkJWzIyXSA9IHsgUkNfSFRfRFRfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX0RTLCAxMDQwMDAsCisJCQk4OTUwMCwgMTMsIDEzLCA0LCA1MiwgMjIsIDUyIH0sIC8qIDEwNCBNYiAqLworCQlbMjNdID0geyBSQ19IVF9EVF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfRFMsIDExNzAwMCwKKwkJCTk4OTAwLCAxNCwgMTQsIDQsIDUzLCAyMywgNTMgfSwgLyogMTE3IE1iICovCisJCVsyNF0gPSB7IFJDX0hUX0RUXzIwLCBXTEFOX1JDX1BIWV9IVF8yMF9EUywgMTMwMDAwLAorCQkJMTA4MzAwLCAxNSwgMTUsIDQsIDU0LCAyNSwgNTUgfSwgLyogMTMwIE1iICovCisJCVsyNV0gPSB7IFJDX0hUX0RUXzIwLCBXTEFOX1JDX1BIWV9IVF8yMF9EU19IR0ksIDE0NDQwMCwKKwkJCTEyMDAwMCwgMTUsIDE1LCA0LCA1NCwgMjUsIDU1IH0sIC8qIDE0NC40IE1iICovCisJCVsyNl0gPSB7ICBSQ19JTlZBTElELCBXTEFOX1JDX1BIWV9IVF8yMF9UUywgMTk1MDAsCisJCQkxNzQwMCwgMTYsIDE2LCAwLCA1NiwgMjYsIDU2IH0sIC8qIDE5LjUgTWIgKi8KKwkJWzI3XSA9IHsgIFJDX0lOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzIwX1RTLCAzOTAwMCwKKwkJCTM1MTAwLCAxNywgMTcsIDIsIDU3LCAyNywgNTcgfSwgLyogMzkgTWIgKi8KKwkJWzI4XSA9IHsgIFJDX0lOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzIwX1RTLCA1ODUwMCwKKwkJCTUyNjAwLCAxOCwgMTgsIDIsIDU4LCAyOCwgNTggfSwgLyogNTguNSBNYiAqLworCQlbMjldID0geyAgUkNfSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfMjBfVFMsIDc4MDAwLAorCQkJNzA0MDAsIDE5LCAxOSwgNCwgNTksIDI5LCA1OSB9LCAvKiA3OCBNYiAqLworCQlbMzBdID0geyAgUkNfSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfMjBfVFMsIDExNzAwMCwKKwkJCTEwNDkwMCwgMjAsIDIwLCA0LCA2MCwgMzEsIDYxIH0sIC8qIDExNyBNYiAqLworCQlbMzFdID0geyAgUkNfSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfMjBfVFNfSEdJLCAxMzAwMDAsCisJCQkxMTU4MDAsIDIwLCAyMCwgNCwgNjAsIDMxLCA2MSB9LCAvKiAxMzAgTWIqLworCQlbMzJdID0geyAgUkNfSFRfVF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfVFMsIDE1NjAwMCwKKwkJCTEzNzIwMCwgMjEsIDIxLCA0LCA2MiwgMzMsIDYzIH0sIC8qIDE1NiBNYiAqLworCQlbMzNdID0geyAgUkNfSFRfVF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfVFNfSEdJLCAxNzMzMDAsCisJCQkxNTExMDAsIDIxLCAyMSwgNCwgNjIsIDMzLCA2MyB9LCAvKiAxNzMuMyBNYiAqLworCQlbMzRdID0geyAgUkNfSFRfVF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfVFMsIDE3NTUwMCwKKwkJCTE1MjgwMCwgMjIsIDIyLCA0LCA2NCwgMzUsIDY1IH0sIC8qIDE3NS41IE1iICovCisJCVszNV0gPSB7ICBSQ19IVF9UXzIwLCBXTEFOX1JDX1BIWV9IVF8yMF9UU19IR0ksIDE5NTAwMCwKKwkJCTE2ODQwMCwgMjIsIDIyLCA0LCA2NCwgMzUsIDY1IH0sIC8qIDE5NSBNYiovCisJCVszNl0gPSB7ICBSQ19IVF9UXzIwLCBXTEFOX1JDX1BIWV9IVF8yMF9UUywgMTk1MDAwLAorCQkJMTY4NDAwLCAyMywgMjMsIDQsIDY2LCAzNywgNjcgfSwgLyogMTk1IE1iICovCisJCVszN10gPSB7ICBSQ19IVF9UXzIwLCBXTEFOX1JDX1BIWV9IVF8yMF9UU19IR0ksIDIxNjcwMCwKKwkJCTE4NTAwMCwgMjMsIDIzLCA0LCA2NiwgMzcsIDY3IH0sIC8qIDIxNi43IE1iICovCisJCVszOF0gPSB7IFJDX0hUX1NEVF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1MsIDEzNTAwLAorCQkJMTMyMDAsIDAsIDAsIDAsIDM4LCAzOCwgMzggfSwgLyogMTMuNSBNYiovCisJCVszOV0gPSB7IFJDX0hUX1NEVF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1MsIDI3NTAwLAorCQkJMjU5MDAsIDEsIDEsIDIsIDM5LCAzOSwgMzkgfSwgLyogMjcuMCBNYiovCisJCVs0MF0gPSB7IFJDX0hUX1NEVF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1MsIDQwNTAwLAorCQkJMzg2MDAsIDIsIDIsIDIsIDQwLCA0MCwgNDAgfSwgLyogNDAuNSBNYiovCisJCVs0MV0gPSB7IFJDX0hUX1NEXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgNTQwMDAsCisJCQk0OTgwMCwgMywgMywgNCwgNDEsIDQxLCA0MSB9LCAvKiA1NCBNYiAqLworCQlbNDJdID0geyBSQ19IVF9TRF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1MsIDgxNTAwLAorCQkJNzIyMDAsIDQsIDQsIDQsIDQyLCA0MiwgNDIgfSwgLyogODEgTWIgKi8KKwkJWzQzXSA9IHsgUkNfSFRfU180MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1MsIDEwODAwMCwKKwkJCTkyOTAwLCA1LCA1LCA0LCA0MywgNDMsIDQzIH0sIC8qIDEwOCBNYiAqLworCQlbNDRdID0geyBSQ19IVF9TXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgMTIxNTAwLAorCQkJMTAyNzAwLCA2LCA2LCA0LCA0NCwgNDQsIDQ0IH0sIC8qIDEyMS41IE1iKi8KKwkJWzQ1XSA9IHsgUkNfSFRfU180MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1MsIDEzNTAwMCwKKwkJCTExMjAwMCwgNywgNywgNCwgNDUsIDQ2LCA0NiB9LCAvKiAxMzUgTWIgKi8KKwkJWzQ2XSA9IHsgUkNfSFRfU180MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1NfSEdJLCAxNTAwMDAsCisJCQkxMjIwMDAsIDcsIDcsIDQsIDQ1LCA0NiwgNDYgfSwgLyogMTUwIE1iICovCisJCVs0N10gPSB7IFJDX0lOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzQwX0RTLCAyNzAwMCwKKwkJCTI1ODAwLCA4LCA4LCAwLCA0NywgNDcsIDQ3IH0sIC8qIDI3IE1iICovCisJCVs0OF0gPSB7IFJDX0hUX1RfNDAsIFdMQU5fUkNfUEhZX0hUXzQwX0RTLCA1NDAwMCwKKwkJCTQ5ODAwLCA5LCA5LCAyLCA0OCwgNDgsIDQ4IH0sIC8qIDU0IE1iICovCisJCVs0OV0gPSB7IFJDX0hUX1RfNDAsIFdMQU5fUkNfUEhZX0hUXzQwX0RTLCA4MTAwMCwKKwkJCTcxOTAwLCAxMCwgMTAsIDIsIDQ5LCA0OSwgNDkgfSwgLyogODEgTWIgKi8KKwkJWzUwXSA9IHsgUkNfSFRfRFRfNDAsIFdMQU5fUkNfUEhZX0hUXzQwX0RTLCAxMDgwMDAsCisJCQk5MjUwMCwgMTEsIDExLCA0LCA1MCwgNTAsIDUwIH0sIC8qIDEwOCBNYiAqLworCQlbNTFdID0geyBSQ19IVF9EVF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDE2MjAwMCwKKwkJCTEzMDMwMCwgMTIsIDEyLCA0LCA1MSwgNTEsIDUxIH0sIC8qIDE2MiBNYiAqLworCQlbNTJdID0geyBSQ19IVF9EVF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDIxNjAwMCwKKwkJCTE2MjgwMCwgMTMsIDEzLCA0LCA1MiwgNTIsIDUyIH0sIC8qIDIxNiBNYiAqLworCQlbNTNdID0geyBSQ19IVF9EVF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDI0MzAwMCwKKwkJCTE3ODIwMCwgMTQsIDE0LCA0LCA1MywgNTMsIDUzIH0sIC8qIDI0MyBNYiAqLworCQlbNTRdID0geyBSQ19IVF9EVF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDI3MDAwMCwKKwkJCTE5MjEwMCwgMTUsIDE1LCA0LCA1NCwgNTUsIDU1IH0sIC8qIDI3MCBNYiAqLworCQlbNTVdID0geyBSQ19IVF9EVF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfRFNfSEdJLCAzMDAwMDAsCisJCQkyMDcwMDAsIDE1LCAxNSwgNCwgNTQsIDU1LCA1NSB9LCAvKiAzMDAgTWIgKi8KKwkJWzU2XSA9IHsgIFJDX0lOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzQwX1RTLCA0MDUwMCwKKwkJCTM2MTAwLCAxNiwgMTYsIDAsIDU2LCA1NiwgNTYgfSwgLyogNDAuNSBNYiAqLworCQlbNTddID0geyAgUkNfSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfVFMsIDgxMDAwLAorCQkJNzI5MDAsIDE3LCAxNywgMiwgNTcsIDU3LCA1NyB9LCAvKiA4MSBNYiAqLworCQlbNThdID0geyAgUkNfSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfVFMsIDEyMTUwMCwKKwkJCTEwODMwMCwgMTgsIDE4LCAyLCA1OCwgNTgsIDU4IH0sIC8qIDEyMS41IE1iICovCisJCVs1OV0gPSB7ICBSQ19JTlZBTElELCBXTEFOX1JDX1BIWV9IVF80MF9UUywgMTYyMDAwLAorCQkJMTQyMDAwLCAxOSwgMTksIDQsIDU5LCA1OSwgNTkgfSwgLyogIDE2MiBNYiAqLworCQlbNjBdID0geyAgUkNfSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfVFMsIDI0MzAwMCwKKwkJCTIwNTEwMCwgMjAsIDIwLCA0LCA2MCwgNjEsIDYxIH0sIC8qICAyNDMgTWIgKi8KKwkJWzYxXSA9IHsgIFJDX0lOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzQwX1RTX0hHSSwgMjcwMDAwLAorCQkJMjI0NzAwLCAyMCwgMjAsIDQsIDYwLCA2MSwgNjEgfSwgLyogIDI3MCBNYiAqLworCQlbNjJdID0geyAgUkNfSFRfVF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfVFMsIDMyNDAwMCwKKwkJCTI2MzEwMCwgMjEsIDIxLCA0LCA2MiwgNjMsIDYzIH0sIC8qICAzMjQgTWIgKi8KKwkJWzYzXSA9IHsgIFJDX0hUX1RfNDAsIFdMQU5fUkNfUEhZX0hUXzQwX1RTX0hHSSwgMzYwMDAwLAorCQkJMjg4MDAwLCAyMSwgMjEsIDQsIDYyLCA2MywgNjMgfSwgLyogIDM2MCBNYiAqLworCQlbNjRdID0geyAgUkNfSFRfVF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfVFMsIDM2NDUwMCwKKwkJCTI5MDcwMCwgMjIsIDIyLCA0LCA2NCwgNjUsIDY1IH0sIC8qIDM2NC41IE1iICovCisJCVs2NV0gPSB7ICBSQ19IVF9UXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9UU19IR0ksIDQwNTAwMCwKKwkJCTMxNzIwMCwgMjIsIDIyLCA0LCA2NCwgNjUsIDY1IH0sIC8qIDQwNSBNYiAqLworCQlbNjZdID0geyAgUkNfSFRfVF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfVFMsIDQwNTAwMCwKKwkJCTMxNzIwMCwgMjMsIDIzLCA0LCA2NiwgNjcsIDY3IH0sIC8qIDQwNSBNYiAqLworCQlbNjddID0geyAgUkNfSFRfVF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfVFNfSEdJLCA0NTAwMDAsCisJCQkzNDY0MDAsIDIzLCAyMywgNCwgNjYsIDY3LCA2NyB9LCAvKiA0NTAgTWIgKi8KIAl9LAogCTUwLCAgLyogcHJvYmUgaW50ZXJ2YWwgKi8KIAlXTEFOX1JDX0hUX0ZMQUcsICAvKiBQaHkgcmF0ZXMgYWxsb3dlZCBpbml0aWFsbHkgKi8KQEAgLTExNiwxMDEgKzE2OCwxNTMgQEAKICAqIGZvciBIVCBhcmUgdGhlIDY0SyBtYXggYWdncmVnYXRlIGxpbWl0ICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExbmdfcmF0ZXRhYmxlID0gewotCTQ2LAorCTcyLAogCTEyLCAvKiBNQ1Mgc3RhcnQgKi8KIAl7Ci0JCXsgVkFMSURfQUxMLCBWQUxJRF9BTEwsIFdMQU5fUkNfUEhZX0NDSywgMTAwMCwgLyogMSBNYiAqLwotCQkJOTAwLCAwLCAyLCAwLCAwLCAwLCAwLCAwIH0sCi0JCXsgVkFMSURfQUxMLCBWQUxJRF9BTEwsIFdMQU5fUkNfUEhZX0NDSywgMjAwMCwgLyogMiBNYiAqLwotCQkJMTkwMCwgMSwgNCwgMSwgMSwgMSwgMSwgMSB9LAotCQl7IFZBTElEX0FMTCwgVkFMSURfQUxMLCBXTEFOX1JDX1BIWV9DQ0ssIDU1MDAsIC8qIDUuNSBNYiAqLwotCQkJNDkwMCwgMiwgMTEsIDIsIDIsIDIsIDIsIDIgfSwKLQkJeyBWQUxJRF9BTEwsIFZBTElEX0FMTCwgV0xBTl9SQ19QSFlfQ0NLLCAxMTAwMCwgLyogMTEgTWIgKi8KLQkJCTgxMDAsIDMsIDIyLCAzLCAzLCAzLCAzLCAzIH0sCi0JCXsgSU5WQUxJRCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgNjAwMCwgLyogNiBNYiAqLwotCQkJNTQwMCwgNCwgMTIsIDQsIDQsIDQsIDQsIDQgfSwKLQkJeyBJTlZBTElELCBJTlZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCA5MDAwLCAvKiA5IE1iICovCi0JCQk3ODAwLCA1LCAxOCwgNCwgNSwgNSwgNSwgNSB9LAotCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgMTIwMDAsIC8qIDEyIE1iICovCi0JCQkxMDEwMCwgNiwgMjQsIDYsIDYsIDYsIDYsIDYgfSwKLQkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDE4MDAwLCAvKiAxOCBNYiAqLwotCQkJMTQxMDAsIDcsIDM2LCA2LCA3LCA3LCA3LCA3IH0sCi0JCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCAyNDAwMCwgLyogMjQgTWIgKi8KLQkJCTE3NzAwLCA4LCA0OCwgOCwgOCwgOCwgOCwgOCB9LAotCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgMzYwMDAsIC8qIDM2IE1iICovCi0JCQkyMzcwMCwgOSwgNzIsIDgsIDksIDksIDksIDkgfSwKLQkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDQ4MDAwLCAvKiA0OCBNYiAqLwotCQkJMjc0MDAsIDEwLCA5NiwgOCwgMTAsIDEwLCAxMCwgMTAgfSwKLQkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDU0MDAwLCAvKiA1NCBNYiAqLwotCQkJMzA5MDAsIDExLCAxMDgsIDgsIDExLCAxMSwgMTEsIDExIH0sCi0JCXsgSU5WQUxJRCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDY1MDAsIC8qIDYuNSBNYiAqLwotCQkJNjQwMCwgMCwgMCwgNCwgMTIsIDI4LCAxMiwgMjggfSwKLQkJeyBWQUxJRF8yMCwgVkFMSURfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX1NTLCAxMzAwMCwgLyogMTMgTWIgKi8KLQkJCTEyNzAwLCAxLCAxLCA2LCAxMywgMjksIDEzLCAyOSB9LAotCQl7IFZBTElEXzIwLCBWQUxJRF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDE5NTAwLCAvKiAxOS41IE1iICovCi0JCQkxODgwMCwgMiwgMiwgNiwgMTQsIDMwLCAxNCwgMzAgfSwKLQkJeyBWQUxJRF8yMCwgVkFMSURfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX1NTLCAyNjAwMCwgLyogMjYgTWIgKi8KLQkJCTI1MDAwLCAzLCAzLCA4LCAxNSwgMzEsIDE1LCAzMSB9LAotCQl7IFZBTElEXzIwLCBWQUxJRF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDM5MDAwLCAvKiAzOSBNYiAqLwotCQkJMzY3MDAsIDQsIDQsIDgsIDE2LCAzMiwgMTYsIDMyIH0sCi0JCXsgSU5WQUxJRCwgVkFMSURfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX1NTLCA1MjAwMCwgLyogNTIgTWIgKi8KLQkJCTQ4MTAwLCA1LCA1LCA4LCAxNywgMzMsIDE3LCAzMyB9LAotCQl7IElOVkFMSUQsICBWQUxJRF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDU4NTAwLCAvKiA1OC41IE1iICovCi0JCQk1MzUwMCwgNiwgNiwgOCwgMTgsIDM0LCAxOCwgMzQgfSwKLQkJeyBJTlZBTElELCBWQUxJRF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDY1MDAwLCAvKiA2NSBNYiAqLwotCQkJNTkwMDAsIDcsIDcsIDgsIDE5LCAzNSwgMTksIDM2IH0sCi0JCXsgSU5WQUxJRCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfMjBfRFMsIDEzMDAwLCAvKiAxMyBNYiAqLwotCQkJMTI3MDAsIDgsIDgsIDQsIDIwLCAzNywgMjAsIDM3IH0sCi0JCXsgSU5WQUxJRCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfMjBfRFMsIDI2MDAwLCAvKiAyNiBNYiAqLwotCQkJMjQ4MDAsIDksIDksIDYsIDIxLCAzOCwgMjEsIDM4IH0sCi0JCXsgSU5WQUxJRCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfMjBfRFMsIDM5MDAwLCAvKiAzOSBNYiAqLwotCQkJMzY2MDAsIDEwLCAxMCwgNiwgMjIsIDM5LCAyMiwgMzkgfSwKLQkJeyBWQUxJRF8yMCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfMjBfRFMsIDUyMDAwLCAvKiA1MiBNYiAqLwotCQkJNDgxMDAsIDExLCAxMSwgOCwgMjMsIDQwLCAyMywgNDAgfSwKLQkJeyBWQUxJRF8yMCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfMjBfRFMsIDc4MDAwLCAvKiA3OCBNYiAqLwotCQkJNjk1MDAsIDEyLCAxMiwgOCwgMjQsIDQxLCAyNCwgNDEgfSwKLQkJeyBWQUxJRF8yMCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfMjBfRFMsIDEwNDAwMCwgLyogMTA0IE1iICovCi0JCQk4OTUwMCwgMTMsIDEzLCA4LCAyNSwgNDIsIDI1LCA0MiB9LAotCQl7IFZBTElEXzIwLCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF8yMF9EUywgMTE3MDAwLCAvKiAxMTcgTWIgKi8KLQkJCTk4OTAwLCAxNCwgMTQsIDgsIDI2LCA0MywgMjYsIDQ0IH0sCi0JCXsgVkFMSURfMjAsIElOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzIwX0RTLCAxMzAwMDAsIC8qIDEzMCBNYiAqLwotCQkJMTA4MzAwLCAxNSwgMTUsIDgsIDI3LCA0NCwgMjcsIDQ1IH0sCi0JCXsgVkFMSURfNDAsIFZBTElEXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgMTM1MDAsIC8qIDEzLjUgTWIgKi8KLQkJCTEzMjAwLCAwLCAwLCA4LCAxMiwgMjgsIDI4LCAyOCB9LAotCQl7IFZBTElEXzQwLCBWQUxJRF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1MsIDI3NTAwLCAvKiAyNy4wIE1iICovCi0JCQkyNTkwMCwgMSwgMSwgOCwgMTMsIDI5LCAyOSwgMjkgfSwKLQkJeyBWQUxJRF80MCwgVkFMSURfNDAsIFdMQU5fUkNfUEhZX0hUXzQwX1NTLCA0MDUwMCwgLyogNDAuNSBNYiAqLwotCQkJMzg2MDAsIDIsIDIsIDgsIDE0LCAzMCwgMzAsIDMwIH0sCi0JCXsgVkFMSURfNDAsIFZBTElEXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgNTQwMDAsIC8qIDU0IE1iICovCi0JCQk0OTgwMCwgMywgMywgOCwgIDE1LCAzMSwgMzEsIDMxIH0sCi0JCXsgVkFMSURfNDAsIFZBTElEXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgODE1MDAsIC8qIDgxIE1iICovCi0JCQk3MjIwMCwgNCwgNCwgOCwgMTYsIDMyLCAzMiwgMzIgfSwKLQkJeyBJTlZBTElELCBWQUxJRF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1MsIDEwODAwMCwgLyogMTA4IE1iICovCi0JCQk5MjkwMCwgNSwgNSwgOCwgMTcsIDMzLCAzMywgMzMgfSwKLQkJeyBJTlZBTElELCAgVkFMSURfNDAsIFdMQU5fUkNfUEhZX0hUXzQwX1NTLCAxMjE1MDAsIC8qIDEyMS41IE1iICovCi0JCQkxMDI3MDAsIDYsIDYsIDgsIDE4LCAzNCwgMzQsIDM0IH0sCi0JCXsgSU5WQUxJRCwgVkFMSURfNDAsIFdMQU5fUkNfUEhZX0hUXzQwX1NTLCAxMzUwMDAsIC8qIDEzNSBNYiAqLwotCQkJMTEyMDAwLCA3LCA3LCA4LCAxOSwgMzUsIDM2LCAzNiB9LAotCQl7IElOVkFMSUQsIFZBTElEXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TU19IR0ksIDE1MDAwMCwgLyogMTUwIE1iICovCi0JCQkxMjIwMDAsIDcsIDcsIDgsIDE5LCAzNSwgMzYsIDM2IH0sCi0JCXsgSU5WQUxJRCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDI3MDAwLCAvKiAyNyBNYiAqLwotCQkJMjU4MDAsIDgsIDgsIDgsIDIwLCAzNywgMzcsIDM3IH0sCi0JCXsgSU5WQUxJRCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDU0MDAwLCAvKiA1NCBNYiAqLwotCQkJNDk4MDAsIDksIDksIDgsIDIxLCAzOCwgMzgsIDM4IH0sCi0JCXsgSU5WQUxJRCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDgxMDAwLCAvKiA4MSBNYiAqLwotCQkJNzE5MDAsIDEwLCAxMCwgOCwgMjIsIDM5LCAzOSwgMzkgfSwKLQkJeyBWQUxJRF80MCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDEwODAwMCwgLyogMTA4IE1iICovCi0JCQk5MjUwMCwgMTEsIDExLCA4LCAyMywgNDAsIDQwLCA0MCB9LAotCQl7IFZBTElEXzQwLCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF80MF9EUywgMTYyMDAwLCAvKiAxNjIgTWIgKi8KLQkJCTEzMDMwMCwgMTIsIDEyLCA4LCAyNCwgNDEsIDQxLCA0MSB9LAotCQl7IFZBTElEXzQwLCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF80MF9EUywgMjE2MDAwLCAvKiAyMTYgTWIgKi8KLQkJCTE2MjgwMCwgMTMsIDEzLCA4LCAyNSwgNDIsIDQyLCA0MiB9LAotCQl7IFZBTElEXzQwLCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF80MF9EUywgMjQzMDAwLCAvKiAyNDMgTWIgKi8KLQkJCTE3ODIwMCwgMTQsIDE0LCA4LCAyNiwgNDMsIDQzLCA0MyB9LAotCQl7IFZBTElEXzQwLCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF80MF9EUywgMjcwMDAwLCAvKiAyNzAgTWIgKi8KLQkJCTE5MjEwMCwgMTUsIDE1LCA4LCAyNywgNDQsIDQ1LCA0NSB9LAotCQl7IFZBTElEXzQwLCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF80MF9EU19IR0ksIDMwMDAwMCwgLyogMzAwIE1iICovCi0JCQkyMDcwMDAsIDE1LCAxNSwgOCwgMjcsIDQ0LCA0NSwgNDUgfSwKKwkJWzBdID0geyBSQ19BTEwsIFdMQU5fUkNfUEhZX0NDSywgMTAwMCwKKwkJCTkwMCwgMCwgMiwgMCwgMCwgMCwgMCB9LCAvKiAxIE1iICovCisJCVsxXSA9IHsgUkNfQUxMLCBXTEFOX1JDX1BIWV9DQ0ssIDIwMDAsCisJCQkxOTAwLCAxLCA0LCAxLCAxLCAxLCAxIH0sIC8qIDIgTWIgKi8KKwkJWzJdID0geyBSQ19BTEwsIFdMQU5fUkNfUEhZX0NDSywgNTUwMCwKKwkJCTQ5MDAsIDIsIDExLCAyLCAyLCAyLCAyIH0sIC8qIDUuNSBNYiAqLworCQlbM10gPSB7IFJDX0FMTCwgV0xBTl9SQ19QSFlfQ0NLLCAxMTAwMCwKKwkJCTgxMDAsIDMsIDIyLCAzLCAzLCAzLCAzIH0sIC8qIDExIE1iICovCisJCVs0XSA9IHsgUkNfSU5WQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgNjAwMCwKKwkJCTU0MDAsIDQsIDEyLCA0LCA0LCA0LCA0IH0sIC8qIDYgTWIgKi8KKwkJWzVdID0geyBSQ19JTlZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCA5MDAwLAorCQkJNzgwMCwgNSwgMTgsIDQsIDUsIDUsIDUgfSwgLyogOSBNYiAqLworCQlbNl0gPSB7IFJDX0xfU0RULCBXTEFOX1JDX1BIWV9PRkRNLCAxMjAwMCwKKwkJCTEwMTAwLCA2LCAyNCwgNiwgNiwgNiwgNiB9LCAvKiAxMiBNYiAqLworCQlbN10gPSB7IFJDX0xfU0RULCBXTEFOX1JDX1BIWV9PRkRNLCAxODAwMCwKKwkJCTE0MTAwLCA3LCAzNiwgNiwgNywgNywgNyB9LCAvKiAxOCBNYiAqLworCQlbOF0gPSB7IFJDX0xfU0RULCBXTEFOX1JDX1BIWV9PRkRNLCAyNDAwMCwKKwkJCTE3NzAwLCA4LCA0OCwgOCwgOCwgOCwgOCB9LCAvKiAyNCBNYiAqLworCQlbOV0gPSB7IFJDX0xfU0RULCBXTEFOX1JDX1BIWV9PRkRNLCAzNjAwMCwKKwkJCTIzNzAwLCA5LCA3MiwgOCwgOSwgOSwgOSB9LCAvKiAzNiBNYiAqLworCQlbMTBdID0geyBSQ19MX1NEVCwgV0xBTl9SQ19QSFlfT0ZETSwgNDgwMDAsCisJCQkyNzQwMCwgMTAsIDk2LCA4LCAxMCwgMTAsIDEwIH0sIC8qIDQ4IE1iICovCisJCVsxMV0gPSB7IFJDX0xfU0RULCBXTEFOX1JDX1BIWV9PRkRNLCA1NDAwMCwKKwkJCTMwOTAwLCAxMSwgMTA4LCA4LCAxMSwgMTEsIDExIH0sIC8qIDU0IE1iICovCisJCVsxMl0gPSB7IFJDX0lOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzIwX1NTLCA2NTAwLAorCQkJNjQwMCwgMCwgMCwgNCwgNDIsIDEyLCA0MiB9LCAvKiA2LjUgTWIgKi8KKwkJWzEzXSA9IHsgUkNfSFRfU0RUXzIwLCBXTEFOX1JDX1BIWV9IVF8yMF9TUywgMTMwMDAsCisJCQkxMjcwMCwgMSwgMSwgNiwgNDMsIDEzLCA0MyB9LCAvKiAxMyBNYiAqLworCQlbMTRdID0geyBSQ19IVF9TRFRfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX1NTLCAxOTUwMCwKKwkJCTE4ODAwLCAyLCAyLCA2LCA0NCwgMTQsIDQ0IH0sIC8qIDE5LjUgTWIqLworCQlbMTVdID0geyBSQ19IVF9TRF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDI2MDAwLAorCQkJMjUwMDAsIDMsIDMsIDgsIDQ1LCAxNSwgNDUgfSwgLyogMjYgTWIgKi8KKwkJWzE2XSA9IHsgUkNfSFRfU0RfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX1NTLCAzOTAwMCwKKwkJCTM2NzAwLCA0LCA0LCA4LCA0NiwgMTYsIDQ2IH0sIC8qIDM5IE1iICovCisJCVsxN10gPSB7IFJDX0hUX1NfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX1NTLCA1MjAwMCwKKwkJCTQ4MTAwLCA1LCA1LCA4LCA0NywgMTcsIDQ3IH0sIC8qIDUyIE1iICovCisJCVsxOF0gPSB7IFJDX0hUX1NfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX1NTLCA1ODUwMCwKKwkJCTUzNTAwLCA2LCA2LCA4LCA0OCwgMTgsIDQ4IH0sIC8qIDU4LjUgTWIgKi8KKwkJWzE5XSA9IHsgUkNfSFRfU18yMCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDY1MDAwLAorCQkJNTkwMDAsIDcsIDcsIDgsIDQ5LCAyMCwgNTAgfSwgLyogNjUgTWIgKi8KKwkJWzIwXSA9IHsgUkNfSFRfU18yMCwgV0xBTl9SQ19QSFlfSFRfMjBfU1NfSEdJLCA3MjIwMCwKKwkJCTY1NDAwLCA3LCA3LCA4LCA0OSwgMjAsIDUwIH0sIC8qIDY1IE1iKi8KKwkJWzIxXSA9IHsgUkNfSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfMjBfRFMsIDEzMDAwLAorCQkJMTI3MDAsIDgsIDgsIDQsIDUxLCAyMSwgNTEgfSwgLyogMTMgTWIgKi8KKwkJWzIyXSA9IHsgUkNfSFRfVF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfRFMsIDI2MDAwLAorCQkJMjQ4MDAsIDksIDksIDYsIDUyLCAyMiwgNTIgfSwgLyogMjYgTWIgKi8KKwkJWzIzXSA9IHsgUkNfSFRfVF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfRFMsIDM5MDAwLAorCQkJMzY2MDAsIDEwLCAxMCwgNiwgNTMsIDIzLCA1MyB9LCAvKiAzOSBNYiAqLworCQlbMjRdID0geyBSQ19IVF9EVF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfRFMsIDUyMDAwLAorCQkJNDgxMDAsIDExLCAxMSwgOCwgNTQsIDI0LCA1NCB9LCAvKiA1MiBNYiAqLworCQlbMjVdID0geyBSQ19IVF9EVF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfRFMsIDc4MDAwLAorCQkJNjk1MDAsIDEyLCAxMiwgOCwgNTUsIDI1LCA1NSB9LCAvKiA3OCBNYiAqLworCQlbMjZdID0geyBSQ19IVF9EVF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfRFMsIDEwNDAwMCwKKwkJCTg5NTAwLCAxMywgMTMsIDgsIDU2LCAyNiwgNTYgfSwgLyogMTA0IE1iICovCisJCVsyN10gPSB7IFJDX0hUX0RUXzIwLCBXTEFOX1JDX1BIWV9IVF8yMF9EUywgMTE3MDAwLAorCQkJOTg5MDAsIDE0LCAxNCwgOCwgNTcsIDI3LCA1NyB9LCAvKiAxMTcgTWIgKi8KKwkJWzI4XSA9IHsgUkNfSFRfRFRfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX0RTLCAxMzAwMDAsCisJCQkxMDgzMDAsIDE1LCAxNSwgOCwgNTgsIDI5LCA1OSB9LCAvKiAxMzAgTWIgKi8KKwkJWzI5XSA9IHsgUkNfSFRfRFRfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX0RTX0hHSSwgMTQ0NDAwLAorCQkJMTIwMDAwLCAxNSwgMTUsIDgsIDU4LCAyOSwgNTkgfSwgLyogMTQ0LjQgTWIgKi8KKwkJWzMwXSA9IHsgIFJDX0lOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzIwX1RTLCAxOTUwMCwKKwkJCTE3NDAwLCAxNiwgMTYsIDQsIDYwLCAzMCwgNjAgfSwgLyogMTkuNSBNYiAqLworCQlbMzFdID0geyAgUkNfSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfMjBfVFMsIDM5MDAwLAorCQkJMzUxMDAsIDE3LCAxNywgNiwgNjEsIDMxLCA2MSB9LCAvKiAzOSBNYiAqLworCQlbMzJdID0geyAgUkNfSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfMjBfVFMsIDU4NTAwLAorCQkJNTI2MDAsIDE4LCAxOCwgNiwgNjIsIDMyLCA2MiB9LCAvKiA1OC41IE1iICovCisJCVszM10gPSB7ICBSQ19JTlZBTElELCBXTEFOX1JDX1BIWV9IVF8yMF9UUywgNzgwMDAsCisJCQk3MDQwMCwgMTksIDE5LCA4LCA2MywgMzMsIDYzIH0sIC8qIDc4IE1iICovCisJCVszNF0gPSB7ICBSQ19JTlZBTElELCBXTEFOX1JDX1BIWV9IVF8yMF9UUywgMTE3MDAwLAorCQkJMTA0OTAwLCAyMCwgMjAsIDgsIDY0LCAzNSwgNjUgfSwgLyogMTE3IE1iICovCisJCVszNV0gPSB7ICBSQ19JTlZBTElELCBXTEFOX1JDX1BIWV9IVF8yMF9UU19IR0ksIDEzMDAwMCwKKwkJCTExNTgwMCwgMjAsIDIwLCA4LCA2NCwgMzUsIDY1IH0sIC8qIDEzMCBNYiAqLworCQlbMzZdID0geyAgUkNfSFRfVF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfVFMsIDE1NjAwMCwKKwkJCTEzNzIwMCwgMjEsIDIxLCA4LCA2NiwgMzcsIDY3IH0sIC8qIDE1NiBNYiAqLworCQlbMzddID0geyAgUkNfSFRfVF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfVFNfSEdJLCAxNzMzMDAsCisJCQkxNTExMDAsIDIxLCAyMSwgOCwgNjYsIDM3LCA2NyB9LCAvKiAxNzMuMyBNYiAqLworCQlbMzhdID0geyAgUkNfSFRfVF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfVFMsIDE3NTUwMCwKKwkJCTE1MjgwMCwgMjIsIDIyLCA4LCA2OCwgMzksIDY5IH0sIC8qIDE3NS41IE1iICovCisJCVszOV0gPSB7ICBSQ19IVF9UXzIwLCBXTEFOX1JDX1BIWV9IVF8yMF9UU19IR0ksIDE5NTAwMCwKKwkJCTE2ODQwMCwgMjIsIDIyLCA4LCA2OCwgMzksIDY5IH0sIC8qIDE5NSBNYiAqLworCQlbNDBdID0geyAgUkNfSFRfVF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfVFMsIDE5NTAwMCwKKwkJCTE2ODQwMCwgMjMsIDIzLCA4LCA3MCwgNDEsIDcxIH0sIC8qIDE5NSBNYiAqLworCQlbNDFdID0geyAgUkNfSFRfVF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfVFNfSEdJLCAyMTY3MDAsCisJCQkxODUwMDAsIDIzLCAyMywgOCwgNzAsIDQxLCA3MSB9LCAvKiAyMTYuNyBNYiAqLworCQlbNDJdID0geyBSQ19IVF9TRFRfNDAsIFdMQU5fUkNfUEhZX0hUXzQwX1NTLCAxMzUwMCwKKwkJCTEzMjAwLCAwLCAwLCA4LCA0MiwgNDIsIDQyIH0sIC8qIDEzLjUgTWIgKi8KKwkJWzQzXSA9IHsgUkNfSFRfU0RUXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgMjc1MDAsCisJCQkyNTkwMCwgMSwgMSwgOCwgNDMsIDQzLCA0MyB9LCAvKiAyNy4wIE1iICovCisJCVs0NF0gPSB7IFJDX0hUX1NEVF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1MsIDQwNTAwLAorCQkJMzg2MDAsIDIsIDIsIDgsIDQ0LCA0NCwgNDQgfSwgLyogNDAuNSBNYiAqLworCQlbNDVdID0geyBSQ19IVF9TRF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1MsIDU0MDAwLAorCQkJNDk4MDAsIDMsIDMsIDgsIDQ1LCA0NSwgNDUgfSwgLyogNTQgTWIgKi8KKwkJWzQ2XSA9IHsgUkNfSFRfU0RfNDAsIFdMQU5fUkNfUEhZX0hUXzQwX1NTLCA4MTUwMCwKKwkJCTcyMjAwLCA0LCA0LCA4LCA0NiwgNDYsIDQ2IH0sIC8qIDgxIE1iICovCisJCVs0N10gPSB7IFJDX0hUX1NfNDAgLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgMTA4MDAwLAorCQkJOTI5MDAsIDUsIDUsIDgsIDQ3LCA0NywgNDcgfSwgLyogMTA4IE1iICovCisJCVs0OF0gPSB7IFJDX0hUX1NfNDAsIFdMQU5fUkNfUEhZX0hUXzQwX1NTLCAxMjE1MDAsCisJCQkxMDI3MDAsIDYsIDYsIDgsIDQ4LCA0OCwgNDggfSwgLyogMTIxLjUgTWIgKi8KKwkJWzQ5XSA9IHsgUkNfSFRfU180MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1MsIDEzNTAwMCwKKwkJCTExMjAwMCwgNywgNywgOCwgNDksIDUwLCA1MCB9LCAvKiAxMzUgTWIgKi8KKwkJWzUwXSA9IHsgUkNfSFRfU180MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1NfSEdJLCAxNTAwMDAsCisJCQkxMjIwMDAsIDcsIDcsIDgsIDQ5LCA1MCwgNTAgfSwgLyogMTUwIE1iICovCisJCVs1MV0gPSB7IFJDX0lOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzQwX0RTLCAyNzAwMCwKKwkJCTI1ODAwLCA4LCA4LCA4LCA1MSwgNTEsIDUxIH0sIC8qIDI3IE1iICovCisJCVs1Ml0gPSB7IFJDX0hUX1RfNDAsIFdMQU5fUkNfUEhZX0hUXzQwX0RTLCA1NDAwMCwKKwkJCTQ5ODAwLCA5LCA5LCA4LCA1MiwgNTIsIDUyIH0sIC8qIDU0IE1iICovCisJCVs1M10gPSB7IFJDX0hUX1RfNDAsIFdMQU5fUkNfUEhZX0hUXzQwX0RTLCA4MTAwMCwKKwkJCTcxOTAwLCAxMCwgMTAsIDgsIDUzLCA1MywgNTMgfSwgLyogODEgTWIgKi8KKwkJWzU0XSA9IHsgUkNfSFRfRFRfNDAsIFdMQU5fUkNfUEhZX0hUXzQwX0RTLCAxMDgwMDAsCisJCQk5MjUwMCwgMTEsIDExLCA4LCA1NCwgNTQsIDU0IH0sIC8qIDEwOCBNYiAqLworCQlbNTVdID0geyBSQ19IVF9EVF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDE2MjAwMCwKKwkJCTEzMDMwMCwgMTIsIDEyLCA4LCA1NSwgNTUsIDU1IH0sIC8qIDE2MiBNYiAqLworCQlbNTZdID0geyBSQ19IVF9EVF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDIxNjAwMCwKKwkJCTE2MjgwMCwgMTMsIDEzLCA4LCA1NiwgNTYsIDU2IH0sIC8qIDIxNiBNYiAqLworCQlbNTddID0geyBSQ19IVF9EVF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDI0MzAwMCwKKwkJCTE3ODIwMCwgMTQsIDE0LCA4LCA1NywgNTcsIDU3IH0sIC8qIDI0MyBNYiAqLworCQlbNThdID0geyBSQ19IVF9EVF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDI3MDAwMCwKKwkJCTE5MjEwMCwgMTUsIDE1LCA4LCA1OCwgNTksIDU5IH0sIC8qIDI3MCBNYiAqLworCQlbNTldID0geyBSQ19IVF9EVF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfRFNfSEdJLCAzMDAwMDAsCisJCQkyMDcwMDAsIDE1LCAxNSwgOCwgNTgsIDU5LCA1OSB9LCAvKiAzMDAgTWIgKi8KKwkJWzYwXSA9IHsgIFJDX0lOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzQwX1RTLCA0MDUwMCwKKwkJCTM2MTAwLCAxNiwgMTYsIDgsIDYwLCA2MCwgNjAgfSwgLyogNDAuNSBNYiAqLworCQlbNjFdID0geyAgUkNfSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfVFMsIDgxMDAwLAorCQkJNzI5MDAsIDE3LCAxNywgOCwgNjEsIDYxLCA2MSB9LCAvKiA4MSBNYiAqLworCQlbNjJdID0geyAgUkNfSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfVFMsIDEyMTUwMCwKKwkJCTEwODMwMCwgMTgsIDE4LCA4LCA2MiwgNjIsIDYyIH0sIC8qIDEyMS41IE1iICovCisJCVs2M10gPSB7ICBSQ19JTlZBTElELCBXTEFOX1JDX1BIWV9IVF80MF9UUywgMTYyMDAwLAorCQkJMTQyMDAwLCAxOSwgMTksIDgsIDYzLCA2MywgNjMgfSwgLyogMTYyIE1iICovCisJCVs2NF0gPSB7ICBSQ19JTlZBTElELCBXTEFOX1JDX1BIWV9IVF80MF9UUywgMjQzMDAwLAorCQkJMjA1MTAwLCAyMCwgMjAsIDgsIDY0LCA2NSwgNjUgfSwgLyogMjQzIE1iICovCisJCVs2NV0gPSB7ICBSQ19JTlZBTElELCBXTEFOX1JDX1BIWV9IVF80MF9UU19IR0ksIDI3MDAwMCwKKwkJCTIyNDcwMCwgMjAsIDIwLCA4LCA2NCwgNjUsIDY1IH0sIC8qIDE3MCBNYiAqLworCQlbNjZdID0geyAgUkNfSFRfVF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfVFMsIDMyNDAwMCwKKwkJCTI2MzEwMCwgMjEsIDIxLCA4LCA2NiwgNjcsIDY3IH0sIC8qIDMyNCBNYiAqLworCQlbNjddID0geyAgUkNfSFRfVF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfVFNfSEdJLCAzNjAwMDAsCisJCQkyODgwMDAsIDIxLCAyMSwgOCwgNjYsIDY3LCA2NyB9LCAvKiAzNjAgTWIgKi8KKwkJWzY4XSA9IHsgIFJDX0hUX1RfNDAsIFdMQU5fUkNfUEhZX0hUXzQwX1RTLCAzNjQ1MDAsCisJCQkyOTA3MDAsIDIyLCAyMiwgOCwgNjgsIDY5LCA2OSB9LCAvKiAzNjQuNSBNYiAqLworCQlbNjldID0geyAgUkNfSFRfVF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfVFNfSEdJLCA0MDUwMDAsCisJCQkzMTcyMDAsIDIyLCAyMiwgOCwgNjgsIDY5LCA2OSB9LCAvKiA0MDUgTWIgKi8KKwkJWzcwXSA9IHsgIFJDX0hUX1RfNDAsIFdMQU5fUkNfUEhZX0hUXzQwX1RTLCA0MDUwMDAsCisJCQkzMTcyMDAsIDIzLCAyMywgOCwgNzAsIDcxLCA3MSB9LCAvKiA0MDUgTWIgKi8KKwkJWzcxXSA9IHsgIFJDX0hUX1RfNDAsIFdMQU5fUkNfUEhZX0hUXzQwX1RTX0hHSSwgNDUwMDAwLAorCQkJMzQ2NDAwLCAyMywgMjMsIDgsIDcwLCA3MSwgNzEgfSwgLyogNDUwIE1iICovCiAJfSwKIAk1MCwgIC8qIHByb2JlIGludGVydmFsICovCiAJV0xBTl9SQ19IVF9GTEFHLCAgLyogUGh5IHJhdGVzIGFsbG93ZWQgaW5pdGlhbGx5ICovCkBAIC0yMjAsMjIgKzMyNCwyMiBAQAogCTgsCiAJMCwKIAl7Ci0JCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCA2MDAwLCAvKiA2IE1iICovCi0JCQk1NDAwLCAwLCAxMiwgMCwgMCwgMCB9LAotCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgOTAwMCwgLyogOSBNYiAqLwotCQkJNzgwMCwgIDEsIDE4LCAwLCAxLCAwIH0sCi0JCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCAxMjAwMCwgLyogMTIgTWIgKi8KLQkJCTEwMDAwLCAyLCAyNCwgMiwgMiwgMCB9LAotCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgMTgwMDAsIC8qIDE4IE1iICovCi0JCQkxMzkwMCwgMywgMzYsIDIsIDMsIDAgfSwKLQkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDI0MDAwLCAvKiAyNCBNYiAqLwotCQkJMTczMDAsIDQsIDQ4LCA0LCA0LCAwIH0sCi0JCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCAzNjAwMCwgLyogMzYgTWIgKi8KLQkJCTIzMDAwLCA1LCA3MiwgNCwgNSwgMCB9LAotCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgNDgwMDAsIC8qIDQ4IE1iICovCi0JCQkyNzQwMCwgNiwgOTYsIDQsIDYsIDAgfSwKLQkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDU0MDAwLCAvKiA1NCBNYiAqLwotCQkJMjkzMDAsIDcsIDEwOCwgNCwgNywgMCB9LAorCQl7IFJDX0xfU0RULCBXTEFOX1JDX1BIWV9PRkRNLCA2MDAwLCAvKiA2IE1iICovCisJCQk1NDAwLCAwLCAxMiwgMH0sCisJCXsgUkNfTF9TRFQsIFdMQU5fUkNfUEhZX09GRE0sIDkwMDAsIC8qIDkgTWIgKi8KKwkJCTc4MDAsICAxLCAxOCwgMH0sCisJCXsgUkNfTF9TRFQsIFdMQU5fUkNfUEhZX09GRE0sIDEyMDAwLCAvKiAxMiBNYiAqLworCQkJMTAwMDAsIDIsIDI0LCAyfSwKKwkJeyBSQ19MX1NEVCwgV0xBTl9SQ19QSFlfT0ZETSwgMTgwMDAsIC8qIDE4IE1iICovCisJCQkxMzkwMCwgMywgMzYsIDJ9LAorCQl7IFJDX0xfU0RULCBXTEFOX1JDX1BIWV9PRkRNLCAyNDAwMCwgLyogMjQgTWIgKi8KKwkJCTE3MzAwLCA0LCA0OCwgNH0sCisJCXsgUkNfTF9TRFQsIFdMQU5fUkNfUEhZX09GRE0sIDM2MDAwLCAvKiAzNiBNYiAqLworCQkJMjMwMDAsIDUsIDcyLCA0fSwKKwkJeyBSQ19MX1NEVCwgV0xBTl9SQ19QSFlfT0ZETSwgNDgwMDAsIC8qIDQ4IE1iICovCisJCQkyNzQwMCwgNiwgOTYsIDR9LAorCQl7IFJDX0xfU0RULCBXTEFOX1JDX1BIWV9PRkRNLCA1NDAwMCwgLyogNTQgTWIgKi8KKwkJCTI5MzAwLCA3LCAxMDgsIDR9LAogCX0sCiAJNTAsICAvKiBwcm9iZSBpbnRlcnZhbCAqLwogCTAsICAgLyogUGh5IHJhdGVzIGFsbG93ZWQgaW5pdGlhbGx5ICovCkBAIC0yNDUsMzAgKzM0OSwzMCBAQAogCTEyLAogCTAsCiAJewotCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfQ0NLLCAxMDAwLCAvKiAxIE1iICovCi0JCQk5MDAsIDAsIDIsIDAsIDAsIDAgfSwKLQkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX0NDSywgMjAwMCwgLyogMiBNYiAqLwotCQkJMTkwMCwgMSwgNCwgMSwgMSwgMCB9LAotCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfQ0NLLCA1NTAwLCAvKiA1LjUgTWIgKi8KLQkJCTQ5MDAsIDIsIDExLCAyLCAyLCAwIH0sCi0JCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9DQ0ssIDExMDAwLCAvKiAxMSBNYiAqLwotCQkJODEwMCwgMywgMjIsIDMsIDMsIDAgfSwKLQkJeyBJTlZBTElELCBJTlZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCA2MDAwLCAvKiA2IE1iICovCi0JCQk1NDAwLCA0LCAxMiwgNCwgNCwgMCB9LAotCQl7IElOVkFMSUQsIElOVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDkwMDAsIC8qIDkgTWIgKi8KLQkJCTc4MDAsIDUsIDE4LCA0LCA1LCAwIH0sCi0JCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCAxMjAwMCwgLyogMTIgTWIgKi8KLQkJCTEwMDAwLCA2LCAyNCwgNiwgNiwgMCB9LAotCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgMTgwMDAsIC8qIDE4IE1iICovCi0JCQkxMzkwMCwgNywgMzYsIDYsIDcsIDAgfSwKLQkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDI0MDAwLCAvKiAyNCBNYiAqLwotCQkJMTczMDAsIDgsIDQ4LCA4LCA4LCAwIH0sCi0JCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCAzNjAwMCwgLyogMzYgTWIgKi8KLQkJCTIzMDAwLCA5LCA3MiwgOCwgOSwgMCB9LAotCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgNDgwMDAsIC8qIDQ4IE1iICovCi0JCQkyNzQwMCwgMTAsIDk2LCA4LCAxMCwgMCB9LAotCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgNTQwMDAsIC8qIDU0IE1iICovCi0JCQkyOTMwMCwgMTEsIDEwOCwgOCwgMTEsIDAgfSwKKwkJeyBSQ19MX1NEVCwgV0xBTl9SQ19QSFlfQ0NLLCAxMDAwLCAvKiAxIE1iICovCisJCQk5MDAsIDAsIDIsIDB9LAorCQl7IFJDX0xfU0RULCBXTEFOX1JDX1BIWV9DQ0ssIDIwMDAsIC8qIDIgTWIgKi8KKwkJCTE5MDAsIDEsIDQsIDF9LAorCQl7IFJDX0xfU0RULCBXTEFOX1JDX1BIWV9DQ0ssIDU1MDAsIC8qIDUuNSBNYiAqLworCQkJNDkwMCwgMiwgMTEsIDJ9LAorCQl7IFJDX0xfU0RULCBXTEFOX1JDX1BIWV9DQ0ssIDExMDAwLCAvKiAxMSBNYiAqLworCQkJODEwMCwgMywgMjIsIDN9LAorCQl7IFJDX0lOVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDYwMDAsIC8qIDYgTWIgKi8KKwkJCTU0MDAsIDQsIDEyLCA0fSwKKwkJeyBSQ19JTlZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCA5MDAwLCAvKiA5IE1iICovCisJCQk3ODAwLCA1LCAxOCwgNH0sCisJCXsgUkNfTF9TRFQsIFdMQU5fUkNfUEhZX09GRE0sIDEyMDAwLCAvKiAxMiBNYiAqLworCQkJMTAwMDAsIDYsIDI0LCA2fSwKKwkJeyBSQ19MX1NEVCwgV0xBTl9SQ19QSFlfT0ZETSwgMTgwMDAsIC8qIDE4IE1iICovCisJCQkxMzkwMCwgNywgMzYsIDZ9LAorCQl7IFJDX0xfU0RULCBXTEFOX1JDX1BIWV9PRkRNLCAyNDAwMCwgLyogMjQgTWIgKi8KKwkJCTE3MzAwLCA4LCA0OCwgOH0sCisJCXsgUkNfTF9TRFQsIFdMQU5fUkNfUEhZX09GRE0sIDM2MDAwLCAvKiAzNiBNYiAqLworCQkJMjMwMDAsIDksIDcyLCA4fSwKKwkJeyBSQ19MX1NEVCwgV0xBTl9SQ19QSFlfT0ZETSwgNDgwMDAsIC8qIDQ4IE1iICovCisJCQkyNzQwMCwgMTAsIDk2LCA4fSwKKwkJeyBSQ19MX1NEVCwgV0xBTl9SQ19QSFlfT0ZETSwgNTQwMDAsIC8qIDU0IE1iICovCisJCQkyOTMwMCwgMTEsIDEwOCwgOH0sCiAJfSwKIAk1MCwgIC8qIHByb2JlIGludGVydmFsICovCiAJMCwgICAvKiBQaHkgcmF0ZXMgYWxsb3dlZCBpbml0aWFsbHkgKi8KQEAgLTMzOCw3ICs0NDIsNyBAQAogCQkJCQkgICB1OCBpbmRleCwgaW50IHZhbGlkX3R4X3JhdGUpCiB7CiAJQlVHX09OKGluZGV4ID4gYXRoX3JjX3ByaXYtPnJhdGVfdGFibGVfc2l6ZSk7Ci0JYXRoX3JjX3ByaXYtPnZhbGlkX3JhdGVfaW5kZXhbaW5kZXhdID0gdmFsaWRfdHhfcmF0ZSA/IDEgOiAwOworCWF0aF9yY19wcml2LT52YWxpZF9yYXRlX2luZGV4W2luZGV4XSA9ICEhdmFsaWRfdHhfcmF0ZTsKIH0KIAogc3RhdGljIGlubGluZQpAQCAtMzcwLDYgKzQ3NCw4IEBACiAJCXJldHVybiAwOwogCWlmIChXTEFOX1JDX1BIWV9EUyhwaHkpICYmICEoY2FwZmxhZyAmIFdMQU5fUkNfRFNfRkxBRykpCiAJCXJldHVybiAwOworCWlmIChXTEFOX1JDX1BIWV9UUyhwaHkpICYmICEoY2FwZmxhZyAmIFdMQU5fUkNfVFNfRkxBRykpCisJCXJldHVybiAwOwogCWlmIChXTEFOX1JDX1BIWV9TR0kocGh5KSAmJiAhKGNhcGZsYWcgJiBXTEFOX1JDX1NHSV9GTEFHKSkKIAkJcmV0dXJuIDA7CiAJaWYgKCFpZ25vcmVfY3cgJiYgV0xBTl9SQ19QSFlfSFQocGh5KSkKQEAgLTQwMCwxMyArNTA2LDkgQEAKIAkJCQkgdTMyIGNhcGZsYWcpCiB7CiAJdTggaSwgaGkgPSAwOwotCXUzMiB2YWxpZDsKIAogCWZvciAoaSA9IDA7IGkgPCByYXRlX3RhYmxlLT5yYXRlX2NudDsgaSsrKSB7Ci0JCXZhbGlkID0gKCEoYXRoX3JjX3ByaXYtPmh0X2NhcCAmIFdMQU5fUkNfRFNfRkxBRykgPwotCQkJIHJhdGVfdGFibGUtPmluZm9baV0udmFsaWRfc2luZ2xlX3N0cmVhbSA6Ci0JCQkgcmF0ZV90YWJsZS0+aW5mb1tpXS52YWxpZCk7Ci0JCWlmICh2YWxpZCA9PSAxKSB7CisJCWlmIChyYXRlX3RhYmxlLT5pbmZvW2ldLnJhdGVfZmxhZ3MgJiBSQ19MRUdBQ1kpIHsKIAkJCXUzMiBwaHkgPSByYXRlX3RhYmxlLT5pbmZvW2ldLnBoeTsKIAkJCXU4IHZhbGlkX3JhdGVfY291bnQgPSAwOwogCkBAIC00MTgsNyArNTIwLDcgQEAKIAkJCWF0aF9yY19wcml2LT52YWxpZF9waHlfcmF0ZWlkeFtwaHldW3ZhbGlkX3JhdGVfY291bnRdID0gaTsKIAkJCWF0aF9yY19wcml2LT52YWxpZF9waHlfcmF0ZWNudFtwaHldICs9IDE7CiAJCQlhdGhfcmNfc2V0X3ZhbGlkX3R4bWFzayhhdGhfcmNfcHJpdiwgaSwgMSk7Ci0JCQloaSA9IEFfTUFYKGhpLCBpKTsKKwkJCWhpID0gaTsKIAkJfQogCX0KIApAQCAtNDM2LDkgKzUzOCw3IEBACiAJZm9yIChpID0gMDsgaSA8IHJhdGVzZXQtPnJzX25yYXRlczsgaSsrKSB7CiAJCWZvciAoaiA9IDA7IGogPCByYXRlX3RhYmxlLT5yYXRlX2NudDsgaisrKSB7CiAJCQl1MzIgcGh5ID0gcmF0ZV90YWJsZS0+aW5mb1tqXS5waHk7Ci0JCQl1MzIgdmFsaWQgPSAoIShhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ19EU19GTEFHKSA/Ci0JCQkJICAgICByYXRlX3RhYmxlLT5pbmZvW2pdLnZhbGlkX3NpbmdsZV9zdHJlYW0gOgotCQkJCSAgICAgcmF0ZV90YWJsZS0+aW5mb1tqXS52YWxpZCk7CisJCQl1MTYgcmF0ZV9mbGFncyA9IHJhdGVfdGFibGUtPmluZm9baV0ucmF0ZV9mbGFnczsKIAkJCXU4IHJhdGUgPSByYXRlc2V0LT5yc19yYXRlc1tpXTsKIAkJCXU4IGRvdDExcmF0ZSA9IHJhdGVfdGFibGUtPmluZm9bal0uZG90MTFyYXRlOwogCkBAIC00NDcsOCArNTQ3LDkgQEAKIAkJCSAqIChWQUxJRC9WQUxJRF8yMC9WQUxJRF80MCkgZmxhZ3MgKi8KIAogCQkJaWYgKChyYXRlID09IGRvdDExcmF0ZSkgJiYKLQkJCSAgICAoKHZhbGlkICYgV0xBTl9SQ19DQVBfTU9ERShjYXBmbGFnKSkgPT0KLQkJCSAgICAgV0xBTl9SQ19DQVBfTU9ERShjYXBmbGFnKSkgJiYKKwkJCSAgICAocmF0ZV9mbGFncyAmIFdMQU5fUkNfQ0FQX01PREUoY2FwZmxhZykpID09CisJCQkgICAgV0xBTl9SQ19DQVBfTU9ERShjYXBmbGFnKSAmJgorCQkJICAgIChyYXRlX2ZsYWdzICYgV0xBTl9SQ19DQVBfU1RSRUFNKGNhcGZsYWcpKSAmJgogCQkJICAgICFXTEFOX1JDX1BIWV9IVChwaHkpKSB7CiAJCQkJdTggdmFsaWRfcmF0ZV9jb3VudCA9IDA7CiAKQEAgLTQ4MiwxNCArNTgzLDEzIEBACiAJZm9yIChpID0gMDsgaSA8IHJhdGVzZXQtPnJzX25yYXRlczsgaSsrKSB7CiAJCWZvciAoaiA9IDA7IGogPCByYXRlX3RhYmxlLT5yYXRlX2NudDsgaisrKSB7CiAJCQl1MzIgcGh5ID0gcmF0ZV90YWJsZS0+aW5mb1tqXS5waHk7Ci0JCQl1MzIgdmFsaWQgPSAoIShhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ19EU19GTEFHKSA/Ci0JCQkJICAgICByYXRlX3RhYmxlLT5pbmZvW2pdLnZhbGlkX3NpbmdsZV9zdHJlYW0gOgotCQkJCSAgICAgcmF0ZV90YWJsZS0+aW5mb1tqXS52YWxpZCk7CisJCQl1MTYgcmF0ZV9mbGFncyA9IHJhdGVfdGFibGUtPmluZm9bal0ucmF0ZV9mbGFnczsKIAkJCXU4IHJhdGUgPSByYXRlc2V0LT5yc19yYXRlc1tpXTsKIAkJCXU4IGRvdDExcmF0ZSA9IHJhdGVfdGFibGUtPmluZm9bal0uZG90MTFyYXRlOwogCiAJCQlpZiAoKHJhdGUgIT0gZG90MTFyYXRlKSB8fCAhV0xBTl9SQ19QSFlfSFQocGh5KSB8fAotCQkJICAgICFXTEFOX1JDX1BIWV9IVF9WQUxJRCh2YWxpZCwgY2FwZmxhZykpCisJCQkgICAgIShyYXRlX2ZsYWdzICYgV0xBTl9SQ19DQVBfU1RSRUFNKGNhcGZsYWcpKSB8fAorCQkJICAgICFXTEFOX1JDX1BIWV9IVF9WQUxJRChyYXRlX2ZsYWdzLCBjYXBmbGFnKSkKIAkJCQljb250aW51ZTsKIAogCQkJaWYgKCFhdGhfcmNfdmFsaWRfcGh5cmF0ZShwaHksIGNhcGZsYWcsIDApKQpAQCAtNTg1LDEyICs2ODUsMTUgQEAKIAlpZiAocmF0ZSA+IChhdGhfcmNfcHJpdi0+cmF0ZV90YWJsZV9zaXplIC0gMSkpCiAJCXJhdGUgPSBhdGhfcmNfcHJpdi0+cmF0ZV90YWJsZV9zaXplIC0gMTsKIAotCWlmIChyYXRlX3RhYmxlLT5pbmZvW3JhdGVdLnZhbGlkICYmCi0JICAgIChhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ19EU19GTEFHKSkKKwlpZiAoUkNfVFNfT05MWShyYXRlX3RhYmxlLT5pbmZvW3JhdGVdLnJhdGVfZmxhZ3MpICYmCisJICAgIChhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ19UU19GTEFHKSkKIAkJcmV0dXJuIHJhdGU7CiAKLQlpZiAocmF0ZV90YWJsZS0+aW5mb1tyYXRlXS52YWxpZF9zaW5nbGVfc3RyZWFtICYmCi0JICAgICEoYXRoX3JjX3ByaXYtPmh0X2NhcCAmIFdMQU5fUkNfRFNfRkxBRykpCisJaWYgKFJDX0RTX09SX0xBVEVSKHJhdGVfdGFibGUtPmluZm9bcmF0ZV0ucmF0ZV9mbGFncykgJiYKKwkgICAgKGF0aF9yY19wcml2LT5odF9jYXAgJiAoV0xBTl9SQ19EU19GTEFHIHwgV0xBTl9SQ19UU19GTEFHKSkpCisJCXJldHVybiByYXRlOworCisJaWYgKFJDX1NTX09SX0xFR0FDWShyYXRlX3RhYmxlLT5pbmZvW3JhdGVdLnJhdGVfZmxhZ3MpKQogCQlyZXR1cm4gcmF0ZTsKIAogCS8qIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gKi8KQEAgLTEwMDMsMTIgKzExMDYsMTkgQEAKIHN0YXRpYyBpbnQgYXRoX3JjX2dldF9yYXRlaW5kZXgoY29uc3Qgc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlLAogCQkJCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZSkKIHsKLQlpbnQgcml4OworCWludCByaXggPSAwLCBpID0gMDsKKwlpbnQgbWNzX3JpeF9vZmZbXSA9IHsgNywgMTUsIDIwLCAyMSwgMjIsIDIzIH07CiAKIAlpZiAoIShyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19NQ1MpKQogCQlyZXR1cm4gcmF0ZS0+aWR4OwogCi0Jcml4ID0gcmF0ZS0+aWR4ICsgcmF0ZV90YWJsZS0+bWNzX3N0YXJ0OworCXdoaWxlIChyYXRlLT5pZHggPiBtY3Nfcml4X29mZltpXSAmJgorCSAgICAgIGkgPCBzaXplb2YobWNzX3JpeF9vZmYpL3NpemVvZihpbnQpKSB7CisJCXJpeCsrOyBpKys7CisJfQorCisJcml4ICs9IHJhdGUtPmlkeCArIHJhdGVfdGFibGUtPm1jc19zdGFydDsKKwogCWlmICgocmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKSAmJgogCSAgICAocmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0kpKQogCQlyaXggPSByYXRlX3RhYmxlLT5pbmZvW3JpeF0uaHRfaW5kZXg7CkBAIC0xMDE2LDggKzExMjYsNiBAQAogCQlyaXggPSByYXRlX3RhYmxlLT5pbmZvW3JpeF0uc2dpX2luZGV4OwogCWVsc2UgaWYgKHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSCkKIAkJcml4ID0gcmF0ZV90YWJsZS0+aW5mb1tyaXhdLmN3NDBpbmRleDsKLQllbHNlCi0JCXJpeCA9IHJhdGVfdGFibGUtPmluZm9bcml4XS5iYXNlX2luZGV4OwogCiAJcmV0dXJuIHJpeDsKIH0KQEAgLTExOTMsMjAgKzEzMDEsMTkgQEAKIH0KIAogc3RhdGljIHU4IGF0aF9yY19idWlsZF9odF9jYXBzKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAotCQkJICAgICAgIGJvb2wgaXNfY3c0MCwgYm9vbCBpc19zZ2k0MCkKKwkJCSAgICAgICBib29sIGlzX2N3NDAsIGJvb2wgaXNfc2dpKQogewogCXU4IGNhcHMgPSAwOwogCiAJaWYgKHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkgewogCQljYXBzID0gV0xBTl9SQ19IVF9GTEFHOwotCQlpZiAoc2MtPnNjX2FoLT5jYXBzLnR4X2NoYWlubWFzayAhPSAxICYmCi0JCSAgICBhdGg5a19od19nZXRjYXBhYmlsaXR5KHNjLT5zY19haCwgQVRIOUtfQ0FQX0RTLCAwLCBOVUxMKSkgewotCQkJaWYgKHN0YS0+aHRfY2FwLm1jcy5yeF9tYXNrWzFdKQotCQkJCWNhcHMgfD0gV0xBTl9SQ19EU19GTEFHOwotCQl9CisJCWlmIChzdGEtPmh0X2NhcC5tY3MucnhfbWFza1sxXSAmJiBzdGEtPmh0X2NhcC5tY3MucnhfbWFza1syXSkKKwkJCWNhcHMgfD0gV0xBTl9SQ19UU19GTEFHIHwgV0xBTl9SQ19EU19GTEFHOworCQllbHNlIGlmIChzdGEtPmh0X2NhcC5tY3MucnhfbWFza1sxXSkKKwkJCWNhcHMgfD0gV0xBTl9SQ19EU19GTEFHOwogCQlpZiAoaXNfY3c0MCkKIAkJCWNhcHMgfD0gV0xBTl9SQ180MF9GTEFHOwotCQlpZiAoaXNfc2dpNDApCisJCWlmIChpc19zZ2kpCiAJCQljYXBzIHw9IFdMQU5fUkNfU0dJX0ZMQUc7CiAJfQogCkBAIC0xMzAwLDcgKzE0MDcsNyBAQAogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gcHJpdjsKIAlzdHJ1Y3QgYXRoX3JhdGVfcHJpdiAqYXRoX3JjX3ByaXYgPSBwcml2X3N0YTsKIAljb25zdCBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGU7Ci0JYm9vbCBpc19jdzQwLCBpc19zZ2k0MDsKKwlib29sIGlzX2N3NDAsIGlzX3NnaSA9IGZhbHNlOwogCWludCBpLCBqID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7CkBAIC0xMzIzLDcgKzE0MzAsMTEgQEAKIAl9CiAKIAlpc19jdzQwID0gc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDA7Ci0JaXNfc2dpNDAgPSBzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MDsKKworCWlmIChpc19jdzQwKQorCQlpc19zZ2kgPSBzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MDsKKwllbHNlIGlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9TR0lfMjApCisJCWlzX3NnaSA9IHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwOwogCiAJLyogQ2hvb3NlIHJhdGUgdGFibGUgZmlyc3QgKi8KIApAQCAtMTMzNiw3ICsxNDQ3LDcgQEAKIAkJcmF0ZV90YWJsZSA9IGh3X3JhdGVfdGFibGVbc2MtPmN1cl9yYXRlX21vZGVdOwogCX0KIAotCWF0aF9yY19wcml2LT5odF9jYXAgPSBhdGhfcmNfYnVpbGRfaHRfY2FwcyhzYywgc3RhLCBpc19jdzQwLCBpc19zZ2k0MCk7CisJYXRoX3JjX3ByaXYtPmh0X2NhcCA9IGF0aF9yY19idWlsZF9odF9jYXBzKHNjLCBzdGEsIGlzX2N3NDAsIGlzX3NnaSk7CiAJYXRoX3JjX2luaXQoc2MsIHByaXZfc3RhLCBzYmFuZCwgc3RhLCByYXRlX3RhYmxlKTsKIH0KIApAQCAtMTM0NywxMCArMTQ1OCwxMCBAQAogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gcHJpdjsKIAlzdHJ1Y3QgYXRoX3JhdGVfcHJpdiAqYXRoX3JjX3ByaXYgPSBwcml2X3N0YTsKIAljb25zdCBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUgPSBOVUxMOwotCWJvb2wgb3Blcl9jdzQwID0gZmFsc2UsIG9wZXJfc2dpNDA7CisJYm9vbCBvcGVyX2N3NDAgPSBmYWxzZSwgb3Blcl9zZ2k7CiAJYm9vbCBsb2NhbF9jdzQwID0gKGF0aF9yY19wcml2LT5odF9jYXAgJiBXTEFOX1JDXzQwX0ZMQUcpID8KIAkJdHJ1ZSA6IGZhbHNlOwotCWJvb2wgbG9jYWxfc2dpNDAgPSAoYXRoX3JjX3ByaXYtPmh0X2NhcCAmIFdMQU5fUkNfU0dJX0ZMQUcpID8KKwlib29sIGxvY2FsX3NnaSA9IChhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ19TR0lfRkxBRykgPwogCQl0cnVlIDogZmFsc2U7CiAKIAkvKiBGSVhNRTogSGFuZGxlIEFQIG1vZGUgbGF0ZXIgd2hlbiB3ZSBzdXBwb3J0IENXTSAqLwpAQCAtMTM2MywxNSArMTQ3NCwyMSBAQAogCQkgICAgb3Blcl9jaGFuX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTKQogCQkJb3Blcl9jdzQwID0gdHJ1ZTsKIAotCQlvcGVyX3NnaTQwID0gKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwKSA/Ci0JCQl0cnVlIDogZmFsc2U7CisJCWlmIChvcGVyX2N3NDApCisJCQlvcGVyX3NnaSA9IChzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MCkgPworCQkJCSAgIHRydWUgOiBmYWxzZTsKKwkJZWxzZSBpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfU0dJXzIwKQorCQkJb3Blcl9zZ2kgPSAoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TR0lfMjApID8KKwkJCQkgICB0cnVlIDogZmFsc2U7CisJCWVsc2UKKwkJCW9wZXJfc2dpID0gZmFsc2U7CiAKLQkJaWYgKChsb2NhbF9jdzQwICE9IG9wZXJfY3c0MCkgfHwgKGxvY2FsX3NnaTQwICE9IG9wZXJfc2dpNDApKSB7CisJCWlmICgobG9jYWxfY3c0MCAhPSBvcGVyX2N3NDApIHx8IChsb2NhbF9zZ2kgIT0gb3Blcl9zZ2kpKSB7CiAJCQlyYXRlX3RhYmxlID0gYXRoX2Nob29zZV9yYXRlX3RhYmxlKHNjLCBzYmFuZC0+YmFuZCwKIAkJCQkJCSAgIHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCwKIAkJCQkJCSAgIG9wZXJfY3c0MCk7CiAJCQlhdGhfcmNfcHJpdi0+aHRfY2FwID0gYXRoX3JjX2J1aWxkX2h0X2NhcHMoc2MsIHN0YSwKLQkJCQkJCSAgIG9wZXJfY3c0MCwgb3Blcl9zZ2k0MCk7CisJCQkJCQkgICBvcGVyX2N3NDAsIG9wZXJfc2dpKTsKIAkJCWF0aF9yY19pbml0KHNjLCBwcml2X3N0YSwgc2JhbmQsIHN0YSwgcmF0ZV90YWJsZSk7CiAKIAkJCWF0aF9wcmludChhdGg5a19od19jb21tb24oc2MtPnNjX2FoKSwgQVRIX0RCR19DT05GSUcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5oCmluZGV4IDNkOGQ0MGMuLmRjMTA4MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5oCkBAIC0yNCwzMiArMjQsNjMgQEAKIHN0cnVjdCBhdGhfc29mdGM7CiAKICNkZWZpbmUgQVRIX1JBVEVfTUFYICAgICAzMAotI2RlZmluZSBSQVRFX1RBQkxFX1NJWkUgIDY0CisjZGVmaW5lIFJBVEVfVEFCTEVfU0laRSAgNzIKICNkZWZpbmUgTUFYX1RYX1JBVEVfUEhZICA0OAogCi0vKiBWQUxJRF9BTEwgLSB2YWxpZCBmb3IgMjAvNDAvTGVnYWN5LAotICogVkFMSUQgLSBMZWdhY3kgb25seSwKLSAqIFZBTElEXzIwIC0gSFQgMjAgb25seSwKLSAqIFZBTElEXzQwIC0gSFQgNDAgb25seSAqLwogCi0jZGVmaW5lIElOVkFMSUQgICAgMHgwCi0jZGVmaW5lIFZBTElEICAgICAgMHgxCi0jZGVmaW5lIFZBTElEXzIwICAgMHgyCi0jZGVmaW5lIFZBTElEXzQwICAgMHg0Ci0jZGVmaW5lIFZBTElEXzIwNDAgKFZBTElEXzIwfFZBTElEXzQwKQotI2RlZmluZSBWQUxJRF9BTEwgIChWQUxJRF8yMDQwfFZBTElEKQorI2RlZmluZSBSQ19JTlZBTElECTB4MDAwMAorI2RlZmluZSBSQ19MRUdBQ1kJMHgwMDAxCisjZGVmaW5lIFJDX1NTCQkweDAwMDIKKyNkZWZpbmUgUkNfRFMJCTB4MDAwNAorI2RlZmluZSBSQ19UUwkJMHgwMDA4CisjZGVmaW5lIFJDX0hUXzIwCTB4MDAxMAorI2RlZmluZSBSQ19IVF80MAkweDAwMjAKKworI2RlZmluZSBSQ19TVFJFQU1fTUFTSwkweGUKKyNkZWZpbmUgUkNfRFNfT1JfTEFURVIoZikJKCgoKGYpICYgUkNfU1RSRUFNX01BU0spID09IFJDX0RTKSB8fCBcCisJCQkJKCgoZikgJiBSQ19TVFJFQU1fTUFTSykgPT0gKFJDX0RTIHwgUkNfVFMpKSkKKyNkZWZpbmUgUkNfVFNfT05MWShmKQkJKCgoZikgJiBSQ19TVFJFQU1fTUFTSykgPT0gUkNfVFMpCisjZGVmaW5lIFJDX1NTX09SX0xFR0FDWShmKQkoKGYpICYgKFJDX1NTIHwgUkNfTEVHQUNZKSkKKworI2RlZmluZSBSQ19IVF8yMDQwCQkoUkNfSFRfMjAgfCBSQ19IVF80MCkKKyNkZWZpbmUgUkNfQUxMX1NUUkVBTQkJKFJDX1NTIHwgUkNfRFMgfCBSQ19UUykKKyNkZWZpbmUgUkNfTF9TRAkJCShSQ19MRUdBQ1kgfCBSQ19TUyB8IFJDX0RTKQorI2RlZmluZSBSQ19MX1NEVAkJKFJDX0xFR0FDWSB8IFJDX1NTIHwgUkNfRFMgfCBSQ19UUykKKyNkZWZpbmUgUkNfSFRfU18yMAkJKFJDX0hUXzIwIHwgUkNfU1MpCisjZGVmaW5lIFJDX0hUX0RfMjAJCShSQ19IVF8yMCB8IFJDX0RTKQorI2RlZmluZSBSQ19IVF9UXzIwCQkoUkNfSFRfMjAgfCBSQ19UUykKKyNkZWZpbmUgUkNfSFRfU180MAkJKFJDX0hUXzQwIHwgUkNfU1MpCisjZGVmaW5lIFJDX0hUX0RfNDAJCShSQ19IVF80MCB8IFJDX0RTKQorI2RlZmluZSBSQ19IVF9UXzQwCQkoUkNfSFRfNDAgfCBSQ19UUykKKworI2RlZmluZSBSQ19IVF9TRF8yMAkJKFJDX0hUXzIwIHwgUkNfU1MgfCBSQ19EUykKKyNkZWZpbmUgUkNfSFRfRFRfMjAJCShSQ19IVF8yMCB8IFJDX0RTIHwgUkNfVFMpCisjZGVmaW5lIFJDX0hUX1NEXzQwCQkoUkNfSFRfNDAgfCBSQ19TUyB8IFJDX0RTKQorI2RlZmluZSBSQ19IVF9EVF80MAkJKFJDX0hUXzQwIHwgUkNfRFMgfCBSQ19UUykKKworI2RlZmluZSBSQ19IVF9TRF8yMDQwCQkoUkNfSFRfMjA0MCB8IFJDX1NTIHwgUkNfRFMpCisjZGVmaW5lIFJDX0hUX1NEVF8yMDQwCQkoUkNfSFRfMjA0MCB8IFJDX1NTIHwgUkNfRFMgfCBSQ19UUykKKworI2RlZmluZSBSQ19IVF9TRFRfMjAJCShSQ19IVF8yMCB8IFJDX1NTIHwgUkNfRFMgfCBSQ19UUykKKyNkZWZpbmUgUkNfSFRfU0RUXzQwCQkoUkNfSFRfNDAgfCBSQ19TUyB8IFJDX0RTIHwgUkNfVFMpCisKKyNkZWZpbmUgUkNfQUxMCQkJKFJDX0xFR0FDWSB8IFJDX0hUXzIwNDAgfCBSQ19BTExfU1RSRUFNKQogCiBlbnVtIHsKIAlXTEFOX1JDX1BIWV9PRkRNLAogCVdMQU5fUkNfUEhZX0NDSywKIAlXTEFOX1JDX1BIWV9IVF8yMF9TUywKIAlXTEFOX1JDX1BIWV9IVF8yMF9EUywKKwlXTEFOX1JDX1BIWV9IVF8yMF9UUywKIAlXTEFOX1JDX1BIWV9IVF80MF9TUywKIAlXTEFOX1JDX1BIWV9IVF80MF9EUywKKwlXTEFOX1JDX1BIWV9IVF80MF9UUywKIAlXTEFOX1JDX1BIWV9IVF8yMF9TU19IR0ksCiAJV0xBTl9SQ19QSFlfSFRfMjBfRFNfSEdJLAorCVdMQU5fUkNfUEhZX0hUXzIwX1RTX0hHSSwKIAlXTEFOX1JDX1BIWV9IVF80MF9TU19IR0ksCiAJV0xBTl9SQ19QSFlfSFRfNDBfRFNfSEdJLAorCVdMQU5fUkNfUEhZX0hUXzQwX1RTX0hHSSwKIAlXTEFOX1JDX1BIWV9NQVgKIH07CiAKQEAgLTU3LDM2ICs4OCw1MCBAQAogCQkJCXx8IChfcGh5ID09IFdMQU5fUkNfUEhZX0hUXzQwX0RTKQlcCiAJCQkJfHwgKF9waHkgPT0gV0xBTl9SQ19QSFlfSFRfMjBfRFNfSEdJKQlcCiAJCQkJfHwgKF9waHkgPT0gV0xBTl9SQ19QSFlfSFRfNDBfRFNfSEdJKSkKKyNkZWZpbmUgV0xBTl9SQ19QSFlfVFMoX3BoeSkgICAoKF9waHkgPT0gV0xBTl9SQ19QSFlfSFRfMjBfVFMpCQlcCisJCQkJfHwgKF9waHkgPT0gV0xBTl9SQ19QSFlfSFRfNDBfVFMpCVwKKwkJCQl8fCAoX3BoeSA9PSBXTEFOX1JDX1BIWV9IVF8yMF9UU19IR0kpCVwKKwkJCQl8fCAoX3BoeSA9PSBXTEFOX1JDX1BIWV9IVF80MF9UU19IR0kpKQogI2RlZmluZSBXTEFOX1JDX1BIWV8yMChfcGh5KSAgICgoX3BoeSA9PSBXTEFOX1JDX1BIWV9IVF8yMF9TUykJCVwKIAkJCQl8fCAoX3BoeSA9PSBXTEFOX1JDX1BIWV9IVF8yMF9EUykJXAorCQkJCXx8IChfcGh5ID09IFdMQU5fUkNfUEhZX0hUXzIwX1RTKQlcCiAJCQkJfHwgKF9waHkgPT0gV0xBTl9SQ19QSFlfSFRfMjBfU1NfSEdJKQlcCi0JCQkJfHwgKF9waHkgPT0gV0xBTl9SQ19QSFlfSFRfMjBfRFNfSEdJKSkKKwkJCQl8fCAoX3BoeSA9PSBXTEFOX1JDX1BIWV9IVF8yMF9EU19IR0kpCVwKKwkJCQl8fCAoX3BoeSA9PSBXTEFOX1JDX1BIWV9IVF8yMF9UU19IR0kpKQogI2RlZmluZSBXTEFOX1JDX1BIWV80MChfcGh5KSAgICgoX3BoeSA9PSBXTEFOX1JDX1BIWV9IVF80MF9TUykJCVwKIAkJCQl8fCAoX3BoeSA9PSBXTEFOX1JDX1BIWV9IVF80MF9EUykJXAorCQkJCXx8IChfcGh5ID09IFdMQU5fUkNfUEhZX0hUXzQwX1RTKQlcCiAJCQkJfHwgKF9waHkgPT0gV0xBTl9SQ19QSFlfSFRfNDBfU1NfSEdJKQlcCi0JCQkJfHwgKF9waHkgPT0gV0xBTl9SQ19QSFlfSFRfNDBfRFNfSEdJKSkKKwkJCQl8fCAoX3BoeSA9PSBXTEFOX1JDX1BIWV9IVF80MF9EU19IR0kpCVwKKwkJCQl8fCAoX3BoeSA9PSBXTEFOX1JDX1BIWV9IVF80MF9UU19IR0kpKQogI2RlZmluZSBXTEFOX1JDX1BIWV9TR0koX3BoeSkgICgoX3BoeSA9PSBXTEFOX1JDX1BIWV9IVF8yMF9TU19IR0kpICAgICAgXAogCQkJCXx8IChfcGh5ID09IFdMQU5fUkNfUEhZX0hUXzIwX0RTX0hHSSkgICBcCisJCQkJfHwgKF9waHkgPT0gV0xBTl9SQ19QSFlfSFRfMjBfVFNfSEdJKSAgIFwKIAkJCQl8fCAoX3BoeSA9PSBXTEFOX1JDX1BIWV9IVF80MF9TU19IR0kpICAgXAotCQkJCXx8IChfcGh5ID09IFdMQU5fUkNfUEhZX0hUXzQwX0RTX0hHSSkpCisJCQkJfHwgKF9waHkgPT0gV0xBTl9SQ19QSFlfSFRfNDBfRFNfSEdJKSAgIFwKKwkJCQl8fCAoX3BoeSA9PSBXTEFOX1JDX1BIWV9IVF80MF9UU19IR0kpKQogCiAjZGVmaW5lIFdMQU5fUkNfUEhZX0hUKF9waHkpICAgIChfcGh5ID49IFdMQU5fUkNfUEhZX0hUXzIwX1NTKQogCiAjZGVmaW5lIFdMQU5fUkNfQ0FQX01PREUoY2FwZmxhZykgKCgoY2FwZmxhZyAmIFdMQU5fUkNfSFRfRkxBRykgPwlcCi0JCShjYXBmbGFnICYgV0xBTl9SQ180MF9GTEFHKSA/IFZBTElEXzQwIDogVkFMSURfMjAgOiBWQUxJRCkpCisJKChjYXBmbGFnICYgV0xBTl9SQ180MF9GTEFHKSA/IFJDX0hUXzQwIDogUkNfSFRfMjApIDogUkNfTEVHQUNZKSkKKworI2RlZmluZSBXTEFOX1JDX0NBUF9TVFJFQU0oY2FwZmxhZykgKCgoY2FwZmxhZyAmIFdMQU5fUkNfVFNfRkxBRykgPwlcCisJKFJDX1RTKSA6ICgoY2FwZmxhZyAmIFdMQU5fUkNfRFNfRkxBRykgPyBSQ19EUyA6IFJDX1NTKSkpCiAKIC8qIFJldHVybiBUUlVFIGlmIGZsYWcgc3VwcG9ydHMgSFQyMCAmJiBjbGllbnQgc3VwcG9ydHMgSFQyMCBvcgogICogcmV0dXJuIFRSVUUgaWYgZmxhZyBzdXBwb3J0cyBIVDQwICYmIGNsaWVudCBzdXBwb3J0cyBIVDQwLgogICogVGhpcyBpcyB1c2VkIGJlY29zIHNvbWUgcmF0ZXMgb3ZlcmxhcCBiZXR3ZWVuIEhUMjAvSFQ0MC4KICAqLwogI2RlZmluZSBXTEFOX1JDX1BIWV9IVF9WQUxJRChmbGFnLCBjYXBmbGFnKQkJCVwKLQkoKChmbGFnICYgVkFMSURfMjApICYmICEoY2FwZmxhZyAmIFdMQU5fUkNfNDBfRkxBRykpIHx8IFwKLQkgKChmbGFnICYgVkFMSURfNDApICYmIChjYXBmbGFnICYgV0xBTl9SQ180MF9GTEFHKSkpCisJKCgoZmxhZyAmIFJDX0hUXzIwKSAmJiAhKGNhcGZsYWcgJiBXTEFOX1JDXzQwX0ZMQUcpKSB8fCBcCisJICgoZmxhZyAmIFJDX0hUXzQwKSAmJiAoY2FwZmxhZyAmIFdMQU5fUkNfNDBfRkxBRykpKQogCiAjZGVmaW5lIFdMQU5fUkNfRFNfRkxBRyAgICAgICAgICgweDAxKQotI2RlZmluZSBXTEFOX1JDXzQwX0ZMQUcgICAgICAgICAoMHgwMikKLSNkZWZpbmUgV0xBTl9SQ19TR0lfRkxBRyAgICAgICAgKDB4MDQpCi0jZGVmaW5lIFdMQU5fUkNfSFRfRkxBRyAgICAgICAgICgweDA4KQorI2RlZmluZSBXTEFOX1JDX1RTX0ZMQUcgICAgICAgICAoMHgwMikKKyNkZWZpbmUgV0xBTl9SQ180MF9GTEFHICAgICAgICAgKDB4MDQpCisjZGVmaW5lIFdMQU5fUkNfU0dJX0ZMQUcgICAgICAgICgweDA4KQorI2RlZmluZSBXTEFOX1JDX0hUX0ZMQUcgICAgICAgICAoMHgxMCkKIAogLyoqCiAgKiBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgLSBSYXRlIENvbnRyb2wgdGFibGUKQEAgLTExMCwxNSArMTU1LDEzIEBACiAJaW50IHJhdGVfY250OwogCWludCBtY3Nfc3RhcnQ7CiAJc3RydWN0IHsKLQkJdTggdmFsaWQ7Ci0JCXU4IHZhbGlkX3NpbmdsZV9zdHJlYW07CisJCXUxNiByYXRlX2ZsYWdzOwogCQl1OCBwaHk7CiAJCXUzMiByYXRla2JwczsKIAkJdTMyIHVzZXJfcmF0ZWticHM7CiAJCXU4IHJhdGVjb2RlOwogCQl1OCBkb3QxMXJhdGU7CiAJCXU4IGN0cmxfcmF0ZTsKLQkJdTggYmFzZV9pbmRleDsKIAkJdTggY3c0MGluZGV4OwogCQl1OCBzZ2lfaW5kZXg7CiAJCXU4IGh0X2luZGV4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmMKaW5kZXggY2E2MDY1Yi4uZGEwY2ZlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jCkBAIC0xMTYsOSArMTE2LDYgQEAKIAkvKiBjb25maWd1cmUgb3BlcmF0aW9uYWwgbW9kZSAqLwogCWF0aDlrX2h3X3NldG9wbW9kZShhaCk7CiAKLQkvKiBIYW5kbGUgYW55IGxpbmstbGV2ZWwgYWRkcmVzcyBjaGFuZ2UuICovCi0JYXRoOWtfaHdfc2V0bWFjKGFoLCBjb21tb24tPm1hY2FkZHIpOwotCiAJLyogY2FsY3VsYXRlIGFuZCBpbnN0YWxsIG11bHRpY2FzdCBmaWx0ZXIgKi8KIAltZmlsdFswXSA9IG1maWx0WzFdID0gfjA7CiAJYXRoOWtfaHdfc2V0bWNhc3RmaWx0ZXIoYWgsIG1maWx0WzBdLCBtZmlsdFsxXSk7CkBAIC0yOTUsNyArMjkyLDcgQEAKIAogCWF0aF9vcG1vZGVfaW5pdChzYyk7CiAKLQlhdGg5a19od19zdGFydHBjdXJlY2VpdmUoc2MtPnNjX2FoKTsKKwlhdGg5a19od19zdGFydHBjdXJlY2VpdmUoc2MtPnNjX2FoLCAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfU0NBTk5JTkcpKTsKIH0KIAogc3RhdGljIHZvaWQgYXRoX2VkbWFfc3RvcF9yZWN2KHN0cnVjdCBhdGhfc29mdGMgKnNjKQpAQCAtNTAxLDcgKzQ5OCw3IEBACiBzdGFydF9yZWN2OgogCXNwaW5fdW5sb2NrX2JoKCZzYy0+cngucnhidWZsb2NrKTsKIAlhdGhfb3Btb2RlX2luaXQoc2MpOwotCWF0aDlrX2h3X3N0YXJ0cGN1cmVjZWl2ZShhaCk7CisJYXRoOWtfaHdfc3RhcnRwY3VyZWNlaXZlKGFoLCAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfU0NBTk5JTkcpKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzAwLDEyICs2OTcsMTYgQEAKIAliZiA9IFNLQl9DQl9BVEhCVUYoc2tiKTsKIAlCVUdfT04oIWJmKTsKIAotCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHNjLT5kZXYsIGJmLT5iZl9idWZfYWRkciwKKwlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShzYy0+ZGV2LCBiZi0+YmZfYnVmX2FkZHIsCiAJCQkJY29tbW9uLT5yeF9idWZzaXplLCBETUFfRlJPTV9ERVZJQ0UpOwogCiAJcmV0ID0gYXRoOWtfaHdfcHJvY2Vzc19yeGRlc2NfZWRtYShhaCwgTlVMTCwgc2tiLT5kYXRhKTsKLQlpZiAocmV0ID09IC1FSU5QUk9HUkVTUykKKwlpZiAocmV0ID09IC1FSU5QUk9HUkVTUykgeworCQkvKmxldCBkZXZpY2UgZ2FpbiB0aGUgYnVmZmVyIGFnYWluKi8KKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc2MtPmRldiwgYmYtPmJmX2J1Zl9hZGRyLAorCQkJCWNvbW1vbi0+cnhfYnVmc2l6ZSwgRE1BX0ZST01fREVWSUNFKTsKIAkJcmV0dXJuIGZhbHNlOworCX0KIAogCV9fc2tiX3VubGluayhza2IsICZyeF9lZG1hLT5yeF9maWZvKTsKIAlpZiAocmV0ID09IC1FSU5WQUwpIHsKQEAgLTgxNCwxMyArODE1LDI2MyBAQAogCSAqIDEuIGFjY2Vzc2luZyB0aGUgZnJhbWUKIAkgKiAyLiByZXF1ZXVlaW5nIHRoZSBzYW1lIGJ1ZmZlciB0byBoL3cKIAkgKi8KLQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzYy0+ZGV2LCBiZi0+YmZfYnVmX2FkZHIsCisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc2MtPmRldiwgYmYtPmJmX2J1Zl9hZGRyLAogCQkJY29tbW9uLT5yeF9idWZzaXplLAogCQkJRE1BX0ZST01fREVWSUNFKTsKIAogCXJldHVybiBiZjsKIH0KIAorLyogQXNzdW1lcyB5b3UndmUgYWxyZWFkeSBkb25lIHRoZSBlbmRpYW4gdG8gQ1BVIGNvbnZlcnNpb24gKi8KK3N0YXRpYyBib29sIGF0aDlrX3J4X2FjY2VwdChzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLAorCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCisJCQkgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4cywKKwkJCSAgICBzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnhfc3RhdHMsCisJCQkgICAgYm9vbCAqZGVjcnlwdF9lcnJvcikKK3sKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IGNvbW1vbi0+YWg7CisJX19sZTE2IGZjOworCXU4IHJ4X3N0YXR1c19sZW4gPSBhaC0+Y2Fwcy5yeF9zdGF0dXNfbGVuOworCisJZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CisKKwlpZiAoIXJ4X3N0YXRzLT5yc19kYXRhbGVuKQorCQlyZXR1cm4gZmFsc2U7CisgICAgICAgIC8qCisgICAgICAgICAqIHJzX3N0YXR1cyBmb2xsb3dzIHJzX2RhdGFsZW4gc28gaWYgcnNfZGF0YWxlbiBpcyB0b28gbGFyZ2UKKyAgICAgICAgICogd2UgY2FuIHRha2UgYSBoaW50IHRoYXQgaGFyZHdhcmUgY29ycnVwdGVkIGl0LCBzbyBpZ25vcmUKKyAgICAgICAgICogdGhvc2UgZnJhbWVzLgorICAgICAgICAgKi8KKwlpZiAocnhfc3RhdHMtPnJzX2RhdGFsZW4gPiAoY29tbW9uLT5yeF9idWZzaXplIC0gcnhfc3RhdHVzX2xlbikpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogcnNfbW9yZSBpbmRpY2F0ZXMgY2hhaW5lZCBkZXNjcmlwdG9ycyB3aGljaCBjYW4gYmUgdXNlZAorCSAqIHRvIGxpbmsgYnVmZmVycyB0b2dldGhlciBmb3IgYSBzb3J0IG9mIHNjYXR0ZXItZ2F0aGVyCisJICogb3BlcmF0aW9uLgorCSAqIHJlamVjdCB0aGUgZnJhbWUsIHdlIGRvbid0IHN1cHBvcnQgc2NhdHRlci1nYXRoZXIgeWV0IGFuZAorCSAqIHRoZSBmcmFtZSBpcyBwcm9iYWJseSBjb3JydXB0IGFueXdheQorCSAqLworCWlmIChyeF9zdGF0cy0+cnNfbW9yZSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBUaGUgcnhfc3RhdHMtPnJzX3N0YXR1cyB3aWxsIG5vdCBiZSBzZXQgdW50aWwgdGhlIGVuZCBvZiB0aGUKKwkgKiBjaGFpbmVkIGRlc2NyaXB0b3JzIHNvIGl0IGNhbiBiZSBpZ25vcmVkIGlmIHJzX21vcmUgaXMgc2V0LiBUaGUKKwkgKiByc19tb3JlIHdpbGwgYmUgZmFsc2UgYXQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgY2hhaW5lZAorCSAqIGRlc2NyaXB0b3JzLgorCSAqLworCWlmIChyeF9zdGF0cy0+cnNfc3RhdHVzICE9IDApIHsKKwkJaWYgKHJ4X3N0YXRzLT5yc19zdGF0dXMgJiBBVEg5S19SWEVSUl9DUkMpCisJCQlyeHMtPmZsYWcgfD0gUlhfRkxBR19GQUlMRURfRkNTX0NSQzsKKwkJaWYgKHJ4X3N0YXRzLT5yc19zdGF0dXMgJiBBVEg5S19SWEVSUl9QSFkpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJaWYgKHJ4X3N0YXRzLT5yc19zdGF0dXMgJiBBVEg5S19SWEVSUl9ERUNSWVBUKSB7CisJCQkqZGVjcnlwdF9lcnJvciA9IHRydWU7CisJCX0gZWxzZSBpZiAocnhfc3RhdHMtPnJzX3N0YXR1cyAmIEFUSDlLX1JYRVJSX01JQykgeworCQkJaWYgKGllZWU4MDIxMV9pc19jdGwoZmMpKQorCQkJCS8qCisJCQkJICogU29tZXRpbWVzLCB3ZSBnZXQgaW52YWxpZAorCQkJCSAqIE1JQyBmYWlsdXJlcyBvbiB2YWxpZCBjb250cm9sIGZyYW1lcy4KKwkJCQkgKiBSZW1vdmUgdGhlc2UgbWljIGVycm9ycy4KKwkJCQkgKi8KKwkJCQlyeF9zdGF0cy0+cnNfc3RhdHVzICY9IH5BVEg5S19SWEVSUl9NSUM7CisJCQllbHNlCisJCQkJcnhzLT5mbGFnIHw9IFJYX0ZMQUdfTU1JQ19FUlJPUjsKKwkJfQorCQkvKgorCQkgKiBSZWplY3QgZXJyb3IgZnJhbWVzIHdpdGggdGhlIGV4Y2VwdGlvbiBvZgorCQkgKiBkZWNyeXB0aW9uIGFuZCBNSUMgZmFpbHVyZXMuIEZvciBtb25pdG9yIG1vZGUsCisJCSAqIHdlIGFsc28gaWdub3JlIHRoZSBDUkMgZXJyb3IuCisJCSAqLworCQlpZiAoYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSB7CisJCQlpZiAocnhfc3RhdHMtPnJzX3N0YXR1cyAmCisJCQkgICAgfihBVEg5S19SWEVSUl9ERUNSWVBUIHwgQVRIOUtfUlhFUlJfTUlDIHwKKwkJCSAgICAgIEFUSDlLX1JYRVJSX0NSQykpCisJCQkJcmV0dXJuIGZhbHNlOworCQl9IGVsc2UgeworCQkJaWYgKHJ4X3N0YXRzLT5yc19zdGF0dXMgJgorCQkJICAgIH4oQVRIOUtfUlhFUlJfREVDUllQVCB8IEFUSDlLX1JYRVJSX01JQykpIHsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQgYXRoOWtfcHJvY2Vzc19yYXRlKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgIHN0cnVjdCBhdGhfcnhfc3RhdHVzICpyeF9zdGF0cywKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeHMpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOworCXVuc2lnbmVkIGludCBpID0gMDsKKworCWJhbmQgPSBody0+Y29uZi5jaGFubmVsLT5iYW5kOworCXNiYW5kID0gaHctPndpcGh5LT5iYW5kc1tiYW5kXTsKKworCWlmIChyeF9zdGF0cy0+cnNfcmF0ZSAmIDB4ODApIHsKKwkJLyogSFQgcmF0ZSAqLworCQlyeHMtPmZsYWcgfD0gUlhfRkxBR19IVDsKKwkJaWYgKHJ4X3N0YXRzLT5yc19mbGFncyAmIEFUSDlLX1JYXzIwNDApCisJCQlyeHMtPmZsYWcgfD0gUlhfRkxBR180ME1IWjsKKwkJaWYgKHJ4X3N0YXRzLT5yc19mbGFncyAmIEFUSDlLX1JYX0dJKQorCQkJcnhzLT5mbGFnIHw9IFJYX0ZMQUdfU0hPUlRfR0k7CisJCXJ4cy0+cmF0ZV9pZHggPSByeF9zdGF0cy0+cnNfcmF0ZSAmIDB4N2Y7CisJCXJldHVybiAwOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7CisJCWlmIChzYmFuZC0+Yml0cmF0ZXNbaV0uaHdfdmFsdWUgPT0gcnhfc3RhdHMtPnJzX3JhdGUpIHsKKwkJCXJ4cy0+cmF0ZV9pZHggPSBpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKHNiYW5kLT5iaXRyYXRlc1tpXS5od192YWx1ZV9zaG9ydCA9PSByeF9zdGF0cy0+cnNfcmF0ZSkgeworCQkJcnhzLT5mbGFnIHw9IFJYX0ZMQUdfU0hPUlRQUkU7CisJCQlyeHMtPnJhdGVfaWR4ID0gaTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJLyoKKwkgKiBObyB2YWxpZCBoYXJkd2FyZSBiaXRyYXRlIGZvdW5kIC0tIHdlIHNob3VsZCBub3QgZ2V0IGhlcmUKKwkgKiBiZWNhdXNlIGhhcmR3YXJlIGhhcyBhbHJlYWR5IHZhbGlkYXRlZCB0aGlzIGZyYW1lIGFzIE9LLgorCSAqLworCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfWE1JVCwgInVuc3VwcG9ydGVkIGh3IGJpdHJhdGUgZGV0ZWN0ZWQgIgorCQkgICIweCUwMnggdXNpbmcgMSBNYml0XG4iLCByeF9zdGF0cy0+cnNfcmF0ZSk7CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfcHJvY2Vzc19yc3NpKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sCisJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKKwkJCSAgICAgICBzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnhfc3RhdHMpCit7CisJc3RydWN0IGF0aF9odyAqYWggPSBjb21tb24tPmFoOworCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7CisJc3RydWN0IGF0aF9ub2RlICphbjsKKwlpbnQgbGFzdF9yc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOworCV9fbGUxNiBmYzsKKworCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOworCisJcmN1X3JlYWRfbG9jaygpOworCS8qCisJICogWFhYOiB1c2UgaWVlZTgwMjExX2ZpbmRfc3RhISBUaGlzIHJlcXVpcmVzIHF1aXRlIGEgYml0IG9mIHdvcmsKKwkgKiB1bmRlciB0aGUgY3VycmVudCBhdGg5ayB2aXJ0dWFsIHdpcGh5IGltcGxlbWVudGF0aW9uIGFzIHdlIGhhdmUKKwkgKiBubyB3YXkgb2YgdHlpbmcgYSB2aWYgdG8gd2lwaHkuIFR5cGljYWxseSB2aWZzIGFyZSBhdHRhY2hlZCB0bworCSAqIGF0IGxlYXN0IG9uZSBzZGF0YSBvZiBhIHdpcGh5IG9uIG1hYzgwMjExIGJ1dCB3aXRoIGF0aDlrIHZpcnR1YWwKKwkgKiB3aXBoeSB5b3UnZCBoYXZlIHRvIGl0ZXJhdGUgb3ZlciBldmVyeSB3aXBoeSBhbmQgZWFjaCBzZGF0YS4KKwkgKi8KKwlzdGEgPSBpZWVlODAyMTFfZmluZF9zdGFfYnlfaHcoaHcsIGhkci0+YWRkcjIpOworCWlmIChzdGEpIHsKKwkJYW4gPSAoc3RydWN0IGF0aF9ub2RlICopIHN0YS0+ZHJ2X3ByaXY7CisJCWlmIChyeF9zdGF0cy0+cnNfcnNzaSAhPSBBVEg5S19SU1NJX0JBRCAmJgorCQkgICAhcnhfc3RhdHMtPnJzX21vcmVhZ2dyKQorCQkJQVRIX1JTU0lfTFBGKGFuLT5sYXN0X3Jzc2ksIHJ4X3N0YXRzLT5yc19yc3NpKTsKKwkJbGFzdF9yc3NpID0gYW4tPmxhc3RfcnNzaTsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlpZiAobGlrZWx5KGxhc3RfcnNzaSAhPSBBVEhfUlNTSV9EVU1NWV9NQVJLRVIpKQorCQlyeF9zdGF0cy0+cnNfcnNzaSA9IEFUSF9FUF9STkQobGFzdF9yc3NpLAorCQkJCQkgICAgICBBVEhfUlNTSV9FUF9NVUxUSVBMSUVSKTsKKwlpZiAocnhfc3RhdHMtPnJzX3Jzc2kgPCAwKQorCQlyeF9zdGF0cy0+cnNfcnNzaSA9IDA7CisKKwkvKiBVcGRhdGUgQmVhY29uIFJTU0ksIHRoaXMgaXMgdXNlZCBieSBBTkkuICovCisJaWYgKGllZWU4MDIxMV9pc19iZWFjb24oZmMpKQorCQlhaC0+c3RhdHMuYXZnYnJzc2kgPSByeF9zdGF0cy0+cnNfcnNzaTsKK30KKworLyoKKyAqIEZvciBEZWNyeXB0IG9yIERlbWljIGVycm9ycywgd2Ugb25seSBtYXJrIHBhY2tldCBzdGF0dXMgaGVyZSBhbmQgYWx3YXlzIHB1c2gKKyAqIHVwIHRoZSBmcmFtZSB1cCB0byBsZXQgbWFjODAyMTEgaGFuZGxlIHRoZSBhY3R1YWwgZXJyb3IgY2FzZSwgYmUgaXQgbm8KKyAqIGRlY3J5cHRpb24ga2V5IG9yIHJlYWwgZGVjcnlwdGlvbiBlcnJvci4gVGhpcyBsZXQgdXMga2VlcCBzdGF0aXN0aWNzIHRoZXJlLgorICovCitzdGF0aWMgaW50IGF0aDlrX3J4X3NrYl9wcmVwcm9jZXNzKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKKwkJCQkgICBzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnhfc3RhdHMsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cywKKwkJCQkgICBib29sICpkZWNyeXB0X2Vycm9yKQoreworCW1lbXNldChyeF9zdGF0dXMsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cykpOworCisJLyoKKwkgKiBldmVyeXRoaW5nIGJ1dCB0aGUgcmF0ZSBpcyBjaGVja2VkIGhlcmUsIHRoZSByYXRlIGNoZWNrIGlzIGRvbmUKKwkgKiBzZXBhcmF0ZWx5IHRvIGF2b2lkIGRvaW5nIHR3byBsb29rdXBzIGZvciBhIHJhdGUgZm9yIGVhY2ggZnJhbWUuCisJICovCisJaWYgKCFhdGg5a19yeF9hY2NlcHQoY29tbW9uLCBoZHIsIHJ4X3N0YXR1cywgcnhfc3RhdHMsIGRlY3J5cHRfZXJyb3IpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWF0aDlrX3Byb2Nlc3NfcnNzaShjb21tb24sIGh3LCBoZHIsIHJ4X3N0YXRzKTsKKworCWlmIChhdGg5a19wcm9jZXNzX3JhdGUoY29tbW9uLCBodywgcnhfc3RhdHMsIHJ4X3N0YXR1cykpCisJCXJldHVybiAtRUlOVkFMOworCisJcnhfc3RhdHVzLT5iYW5kID0gaHctPmNvbmYuY2hhbm5lbC0+YmFuZDsKKwlyeF9zdGF0dXMtPmZyZXEgPSBody0+Y29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcTsKKwlyeF9zdGF0dXMtPnNpZ25hbCA9IEFUSF9ERUZBVUxUX05PSVNFX0ZMT09SICsgcnhfc3RhdHMtPnJzX3Jzc2k7CisJcnhfc3RhdHVzLT5hbnRlbm5hID0gcnhfc3RhdHMtPnJzX2FudGVubmE7CisJcnhfc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfVFNGVDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhdGg5a19yeF9za2JfcG9zdHByb2Nlc3Moc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiwKKwkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnhfc3RhdHMsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhzLAorCQkJCSAgICAgYm9vbCBkZWNyeXB0X2Vycm9yKQoreworCXN0cnVjdCBhdGhfaHcgKmFoID0gY29tbW9uLT5haDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCWludCBoZHJsZW4sIHBhZHBvcywgcGFkc2l6ZTsKKwl1OCBrZXlpeDsKKwlfX2xlMTYgZmM7CisKKwkvKiBzZWUgaWYgYW55IHBhZGRpbmcgaXMgZG9uZSBieSB0aGUgaHcgYW5kIHJlbW92ZSBpdCAqLworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2Ioc2tiKTsKKwlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKwlwYWRwb3MgPSBhdGg5a19jbW5fcGFkcG9zKGhkci0+ZnJhbWVfY29udHJvbCk7CisKKwkvKiBUaGUgTUFDIGhlYWRlciBpcyBwYWRkZWQgdG8gaGF2ZSAzMi1iaXQgYm91bmRhcnkgaWYgdGhlCisJICogcGFja2V0IHBheWxvYWQgaXMgbm9uLXplcm8uIFRoZSBnZW5lcmFsIGNhbGN1bGF0aW9uIGZvcgorCSAqIHBhZHNpemUgd291bGQgdGFrZSBpbnRvIGFjY291bnQgb2RkIGhlYWRlciBsZW5ndGhzOgorCSAqIHBhZHNpemUgPSAoNCAtIHBhZHBvcyAlIDQpICUgNDsgSG93ZXZlciwgc2luY2Ugb25seQorCSAqIGV2ZW4tbGVuZ3RoIGhlYWRlcnMgYXJlIHVzZWQsIHBhZGRpbmcgY2FuIG9ubHkgYmUgMCBvciAyCisJICogYnl0ZXMgYW5kIHdlIGNhbiBvcHRpbWl6ZSB0aGlzIGEgYml0LiBJbiBhZGRpdGlvbiwgd2UgbXVzdAorCSAqIG5vdCB0cnkgdG8gcmVtb3ZlIHBhZGRpbmcgZnJvbSBzaG9ydCBjb250cm9sIGZyYW1lcyB0aGF0IGRvCisJICogbm90IGhhdmUgcGF5bG9hZC4gKi8KKwlwYWRzaXplID0gcGFkcG9zICYgMzsKKwlpZiAocGFkc2l6ZSAmJiBza2ItPmxlbj49cGFkcG9zK3BhZHNpemUrRkNTX0xFTikgeworCQltZW1tb3ZlKHNrYi0+ZGF0YSArIHBhZHNpemUsIHNrYi0+ZGF0YSwgcGFkcG9zKTsKKwkJc2tiX3B1bGwoc2tiLCBwYWRzaXplKTsKKwl9CisKKwlrZXlpeCA9IHJ4X3N0YXRzLT5yc19rZXlpeDsKKworCWlmICghKGtleWl4ID09IEFUSDlLX1JYS0VZSVhfSU5WQUxJRCkgJiYgIWRlY3J5cHRfZXJyb3IgJiYKKwkgICAgaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoZmMpKSB7CisJCXJ4cy0+ZmxhZyB8PSBSWF9GTEFHX0RFQ1JZUFRFRDsKKwl9IGVsc2UgaWYgKGllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGZjKQorCQkgICAmJiAhZGVjcnlwdF9lcnJvciAmJiBza2ItPmxlbiA+PSBoZHJsZW4gKyA0KSB7CisJCWtleWl4ID0gc2tiLT5kYXRhW2hkcmxlbiArIDNdID4+IDY7CisKKwkJaWYgKHRlc3RfYml0KGtleWl4LCBjb21tb24tPmtleW1hcCkpCisJCQlyeHMtPmZsYWcgfD0gUlhfRkxBR19ERUNSWVBURUQ7CisJfQorCWlmIChhaC0+c3dfbWdtdF9jcnlwdG8gJiYKKwkgICAgKHJ4cy0+ZmxhZyAmIFJYX0ZMQUdfREVDUllQVEVEKSAmJgorCSAgICBpZWVlODAyMTFfaXNfbWdtdChmYykpCisJCS8qIFVzZSBzb2Z0d2FyZSBkZWNyeXB0IGZvciBtYW5hZ2VtZW50IGZyYW1lcy4gKi8KKwkJcnhzLT5mbGFnICY9IH5SWF9GTEFHX0RFQ1JZUFRFRDsKK30KIAogaW50IGF0aF9yeF90YXNrbGV0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgZmx1c2gsIGJvb2wgaHApCiB7CkBAIC04NDIsMTUgKzEwOTMsMjEgQEAKIAllbnVtIGF0aDlrX3J4X3F0eXBlIHF0eXBlOwogCWJvb2wgZWRtYSA9ICEhKGFoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfRURNQSk7CiAJaW50IGRtYV90eXBlOworCXU4IHJ4X3N0YXR1c19sZW4gPSBhaC0+Y2Fwcy5yeF9zdGF0dXNfbGVuOworCXU2NCB0c2YgPSAwOworCXUzMiB0c2ZfbG93ZXIgPSAwOwogCiAJaWYgKGVkbWEpCi0JCWRtYV90eXBlID0gRE1BX0ZST01fREVWSUNFOwotCWVsc2UKIAkJZG1hX3R5cGUgPSBETUFfQklESVJFQ1RJT05BTDsKKwllbHNlCisJCWRtYV90eXBlID0gRE1BX0ZST01fREVWSUNFOwogCiAJcXR5cGUgPSBocCA/IEFUSDlLX1JYX1FVRVVFX0hQIDogQVRIOUtfUlhfUVVFVUVfTFA7CiAJc3Bpbl9sb2NrX2JoKCZzYy0+cngucnhidWZsb2NrKTsKIAorCXRzZiA9IGF0aDlrX2h3X2dldHRzZjY0KGFoKTsKKwl0c2ZfbG93ZXIgPSB0c2YgJiAweGZmZmZmZmZmOworCiAJZG8gewogCQkvKiBJZiBoYW5kbGluZyByeCBpbnRlcnJ1cHQgYW5kIGZsdXNoIGlzIGluIHByb2dyZXNzID0+IGV4aXQgKi8KIAkJaWYgKChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9SWEZMVVNIKSAmJiAoZmx1c2ggPT0gMCkpCkBAIC04NjksNyArMTEyNiw3IEBACiAJCWlmICghc2tiKQogCQkJY29udGludWU7CiAKLQkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIChza2ItPmRhdGEgKyByeF9zdGF0dXNfbGVuKTsKIAkJcnhzID0gIElFRUU4MDIxMV9TS0JfUlhDQihza2IpOwogCiAJCWh3ID0gYXRoX2dldF92aXJ0X2h3KHNjLCBoZHIpOwpAQCAtODgzLDggKzExNDAsMTcgQEAKIAkJaWYgKGZsdXNoKQogCQkJZ290byByZXF1ZXVlOwogCi0JCXJldHZhbCA9IGF0aDlrX2Ntbl9yeF9za2JfcHJlcHJvY2Vzcyhjb21tb24sIGh3LCBza2IsICZycywKLQkJCQkJCSAgICAgcnhzLCAmZGVjcnlwdF9lcnJvcik7CisJCXJ4cy0+bWFjdGltZSA9ICh0c2YgJiB+MHhmZmZmZmZmZlVMTCkgfCBycy5yc190c3RhbXA7CisJCWlmIChycy5yc190c3RhbXAgPiB0c2ZfbG93ZXIgJiYKKwkJICAgIHVubGlrZWx5KHJzLnJzX3RzdGFtcCAtIHRzZl9sb3dlciA+IDB4MTAwMDAwMDApKQorCQkJcnhzLT5tYWN0aW1lIC09IDB4MTAwMDAwMDAwVUxMOworCisJCWlmIChycy5yc190c3RhbXAgPCB0c2ZfbG93ZXIgJiYKKwkJICAgIHVubGlrZWx5KHRzZl9sb3dlciAtIHJzLnJzX3RzdGFtcCA+IDB4MTAwMDAwMDApKQorCQkJcnhzLT5tYWN0aW1lICs9IDB4MTAwMDAwMDAwVUxMOworCisJCXJldHZhbCA9IGF0aDlrX3J4X3NrYl9wcmVwcm9jZXNzKGNvbW1vbiwgaHcsIGhkciwgJnJzLAorCQkJCQkJIHJ4cywgJmRlY3J5cHRfZXJyb3IpOwogCQlpZiAocmV0dmFsKQogCQkJZ290byByZXF1ZXVlOwogCkBAIC05MDgsOCArMTE3NCw4IEBACiAJCWlmIChhaC0+Y2Fwcy5yeF9zdGF0dXNfbGVuKQogCQkJc2tiX3B1bGwoc2tiLCBhaC0+Y2Fwcy5yeF9zdGF0dXNfbGVuKTsKIAotCQlhdGg5a19jbW5fcnhfc2tiX3Bvc3Rwcm9jZXNzKGNvbW1vbiwgc2tiLCAmcnMsCi0JCQkJCSAgICAgcnhzLCBkZWNyeXB0X2Vycm9yKTsKKwkJYXRoOWtfcnhfc2tiX3Bvc3Rwcm9jZXNzKGNvbW1vbiwgc2tiLCAmcnMsCisJCQkJCSByeHMsIGRlY3J5cHRfZXJyb3IpOwogCiAJCS8qIFdlIHdpbGwgbm93IGdpdmUgaGFyZHdhcmUgb3VyIHNoaW55IG5ldyBhbGxvY2F0ZWQgc2tiICovCiAJCWJmLT5iZl9tcGR1ID0gcmVxdWV1ZV9za2I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVnLmgKaW5kZXggZDQzNzFhNC4uNjMzZTNkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlZy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWcuaApAQCAtMjIyLDYgKzIyMiw3IEBACiAKICNkZWZpbmUgQVJfSVNSX1MyICAgICAgICAgICAgICAweDAwOGMKICNkZWZpbmUgQVJfSVNSX1MyX1FDVV9UWFVSTiAgICAweDAwMDAwM0ZGCisjZGVmaW5lIEFSX0lTUl9TMl9CQl9XQVRDSERPRyAgMHgwMDAxMDAwMAogI2RlZmluZSBBUl9JU1JfUzJfQ1NUICAgICAgICAgIDB4MDA0MDAwMDAKICNkZWZpbmUgQVJfSVNSX1MyX0dUVCAgICAgICAgICAweDAwODAwMDAwCiAjZGVmaW5lIEFSX0lTUl9TMl9USU0gICAgICAgICAgMHgwMTAwMDAwMApAQCAtNjk5LDcgKzcwMCwxNSBAQAogI2RlZmluZSBBUl9SQ19IT1NUSUYgICAgICAgICAweDAwMDAwMTAwCiAKICNkZWZpbmUgQVJfV0EgICAgICAgICAgICAgICAgCQkweDQwMDQKKyNkZWZpbmUgQVJfV0FfQklUNgkJCSgxIDw8IDYpCisjZGVmaW5lIEFSX1dBX0JJVDcJCQkoMSA8PCA3KQorI2RlZmluZSBBUl9XQV9CSVQyMwkJCSgxIDw8IDIzKQogI2RlZmluZSBBUl9XQV9EM19MMV9ESVNBQkxFCQkoMSA8PCAxNCkKKyNkZWZpbmUgQVJfV0FfRDNfVE9fTDFfRElTQUJMRV9SRUFMICAgICAoMSA8PCAxNikKKyNkZWZpbmUgQVJfV0FfQVNQTV9USU1FUl9CQVNFRF9ESVNBQkxFICAoMSA8PCAxNykKKyNkZWZpbmUgQVJfV0FfUkVTRVRfRU4gICAgICAgICAgICAgICAgICAoMSA8PCAxOCkgLyogU3cgQ29udHJvbCB0byBlbmFibGUgUENJLVJlc2V0IHRvIFBPUiAoYml0IDE1KSAqLworI2RlZmluZSBBUl9XQV9BTkFMT0dfU0hJRlQgICAgICAgICAgICAgICgxIDw8IDIwKQorI2RlZmluZSBBUl9XQV9QT1JfU0hPUlQgICAgICAgICAgICAgICAgICgxIDw8IDIxKSAvKiBQQ0ktRSBQaHkgcmVzZXQgY29udHJvbCAqLwogI2RlZmluZSBBUjkyODVfV0FfREVGQVVMVAkJMHgwMDRhMDUwYgogI2RlZmluZSBBUjkyODBfV0FfREVGQVVMVCAgICAgICAgICAgCTB4MDA0MDA3M2IKICNkZWZpbmUgQVJfV0FfREVGQVVMVCAgICAgICAgICAgICAgIAkweDAwMDAwNzNmCkBAIC03NTYsMzIgKzc2NSwzMyBAQAogI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OMiAgICAgICAgCSAgICAgIDB4MDAwMDBGMDAKICNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTjJfUyAgICAgCSAgICAgIDgKIAotI2RlZmluZSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0kgICAgICAgICAgICAgICAweEQKLSNkZWZpbmUgQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJRSAgICAgICAgICAgICAgMHhDCi0jZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fNTQxNl8xMCAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTl81NDE2XzIwICAgICAgICAgICAgICAgMQotI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzU0MTZfMjIgICAgICAgICAgICAgICAyCi0jZGVmaW5lIEFSX1NSRVZfVkVSU0lPTl85MTAwICAgICAgICAgICAgICAgICAgMHgxNAotI2RlZmluZSBBUl9TUkVWX1ZFUlNJT05fOTE2MCAgICAgICAgCSAgICAgIDB4NDAKLSNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTl85MTYwXzEwICAgIAkgICAgICAwCi0jZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTE2MF8xMSAgICAJICAgICAgMQotI2RlZmluZSBBUl9TUkVWX1ZFUlNJT05fOTI4MCAgICAgICAgICAgICAgICAweDgwCi0jZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTI4MF8xMCAgICAgICAgICAgIDAKLSNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTl85MjgwXzIwICAgICAgICAgICAgMQotI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzkyODBfMjEgICAgICAgICAgICAyCi0jZGVmaW5lIEFSX1NSRVZfVkVSU0lPTl85Mjg1ICAgICAgICAgICAgICAgICAgMHhDMAotI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzkyODVfMTAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTl85Mjg1XzExICAgICAgICAgICAgICAxCi0jZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMiAgICAgICAgICAgICAgMgotI2RlZmluZSBBUl9TUkVWX1ZFUlNJT05fOTI4NyAgICAgICAgICAgICAgICAgIDB4MTgwCi0jZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTI4N18xMCAgICAgICAgICAgICAgMAotI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzkyODdfMTEgICAgICAgICAgICAgIDEKLSNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTl85Mjg3XzEyICAgICAgICAgICAgICAyCi0jZGVmaW5lIEFSX1NSRVZfVkVSU0lPTl85MjcxCQkJMHgxNDAKLSNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTl85MjcxXzEwCQkwCi0jZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTI3MV8xMQkJMQotI2RlZmluZSBBUl9TUkVWX1ZFUlNJT05fOTMwMCAgICAgICAgICAgICAgICAgIDB4MWMwCi0jZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTMwMF8yMCAgICAgICAgICAgICAgMiAvKiAyLjAgYW5kIDIuMSAqLworI2RlZmluZSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0kJMHhECisjZGVmaW5lIEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSUUJMHhDCisjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fNTQxNl8xMAkwCisjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fNTQxNl8yMAkxCisjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fNTQxNl8yMgkyCisjZGVmaW5lIEFSX1NSRVZfVkVSU0lPTl85MTAwCQkweDE0CisjZGVmaW5lIEFSX1NSRVZfVkVSU0lPTl85MTYwCQkweDQwCisjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTE2MF8xMAkwCisjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTE2MF8xMQkxCisjZGVmaW5lIEFSX1NSRVZfVkVSU0lPTl85MjgwCQkweDgwCisjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTI4MF8xMAkwCisjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTI4MF8yMAkxCisjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTI4MF8yMQkyCisjZGVmaW5lIEFSX1NSRVZfVkVSU0lPTl85Mjg1CQkweEMwCisjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMAkwCisjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMQkxCisjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMgkyCisjZGVmaW5lIEFSX1NSRVZfVkVSU0lPTl85Mjg3CQkweDE4MAorI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzkyODdfMTAJMAorI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzkyODdfMTEJMQorI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzkyODdfMTIJMgorI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzkyODdfMTMJMworI2RlZmluZSBBUl9TUkVWX1ZFUlNJT05fOTI3MQkJMHgxNDAKKyNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTl85MjcxXzEwCTAKKyNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTl85MjcxXzExCTEKKyNkZWZpbmUgQVJfU1JFVl9WRVJTSU9OXzkzMDAJCTB4MWMwCisjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTMwMF8yMAkyIC8qIDIuMCBhbmQgMi4xICovCiAKICNkZWZpbmUgQVJfU1JFVl81NDE2KF9haCkgXAogCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0kpIHx8IFwKQEAgLTg1OSw2ICs4NjksMTEgQEAKIAkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPiBBUl9TUkVWX1ZFUlNJT05fOTI4NykgfHwgXAogCSAoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkyODcpICYmIFwKIAkgICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPj0gQVJfU1JFVl9SRVZJU0lPTl85Mjg3XzEyKSkpCisjZGVmaW5lIEFSX1NSRVZfOTI4N18xM19PUl9MQVRFUihfYWgpIFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPiBBUl9TUkVWX1ZFUlNJT05fOTI4NykgfHwgXAorCSAoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkyODcpICYmIFwKKwkgICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPj0gQVJfU1JFVl9SRVZJU0lPTl85Mjg3XzEzKSkpCisKICNkZWZpbmUgQVJfU1JFVl85MjcxKF9haCkgXAogICAgICgoKF9haCkpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkyNzEpCiAjZGVmaW5lIEFSX1NSRVZfOTI3MV8xMChfYWgpIFwKQEAgLTg2Nyw2ICs4ODIsNyBAQAogI2RlZmluZSBBUl9TUkVWXzkyNzFfMTEoX2FoKSBcCiAgICAgKEFSX1NSRVZfOTI3MShfYWgpICYmIFwKICAgICAgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA9PSBBUl9TUkVWX1JFVklTSU9OXzkyNzFfMTEpKQorCiAjZGVmaW5lIEFSX1NSRVZfOTMwMChfYWgpIFwKIAkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkzMDApKQogI2RlZmluZSBBUl9TUkVWXzkzMDBfMjAoX2FoKSBcCkBAIC04ODEsNiArODk3LDEwIEBACiAgICAgKEFSX1NSRVZfOTI4NV8xMl9PUl9MQVRFUihfYWgpICYmIFwKICAgICAgKChSRUdfUkVBRChfYWgsIEFSX0FOX1NZTlRIOSkgJiAweDcpID09IDB4MSkpCiAKKyNkZWZpbmUgQVJfREVWSURfNzAxMChfYWgpIFwKKwkoKChfYWgpLT5od192ZXJzaW9uLmRldmlkID09IDB4NzAxMCkgfHwgXAorCSAoKF9haCktPmh3X3ZlcnNpb24uZGV2aWQgPT0gMHg5MDE4KSkKKwogI2RlZmluZSBBUl9SQURJT19TUkVWX01BSk9SICAgICAgICAgICAgICAgICAgIDB4ZjAKICNkZWZpbmUgQVJfUkFENTEzM19TUkVWX01BSk9SICAgICAgICAgICAgICAgICAweGMwCiAjZGVmaW5lIEFSX1JBRDIxMzNfU1JFVl9NQUpPUiAgICAgICAgICAgICAgICAgMHhkMApAQCAtOTc4LDYgKzk5OCw3IEBACiAjZGVmaW5lIEFSOTI4N19OVU1fR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKICNkZWZpbmUgQVI5MjcxX05VTV9HUElPICAgICAgICAgICAgICAgICAgICAgICAgICAxNgogI2RlZmluZSBBUjkzMDBfTlVNX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIEFSNzAxMF9OVU1fR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKIAogI2RlZmluZSBBUl9HUElPX0lOX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDA0OAogI2RlZmluZSBBUl9HUElPX0lOX1ZBTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEZGRkMwMDAKQEAgLTk5Miw2ICsxMDEzLDggQEAKICNkZWZpbmUgQVI5MjcxX0dQSU9fSU5fVkFMX1MgICAgICAgICAgICAgICAgICAgICAxNgogI2RlZmluZSBBUjkzMDBfR1BJT19JTl9WQUwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMUZGRkYKICNkZWZpbmUgQVI5MzAwX0dQSU9fSU5fVkFMX1MgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFSNzAxMF9HUElPX0lOX1ZBTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBBUjcwMTBfR1BJT19JTl9WQUxfUyAgICAgICAgICAgICAgICAgICAgIDAKIAogI2RlZmluZSBBUl9HUElPX09FX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpID8gMHg0MDUwIDogMHg0MDRjKQogI2RlZmluZSBBUl9HUElPX09FX09VVF9EUlYgICAgICAgICAgICAgICAgICAgICAgIDB4MwpAQCAtMTAwMCw2ICsxMDIzLDIxIEBACiAjZGVmaW5lIEFSX0dQSU9fT0VfT1VUX0RSVl9ISSAgICAgICAgICAgICAgICAgICAgMHgyCiAjZGVmaW5lIEFSX0dQSU9fT0VfT1VUX0RSVl9BTEwgICAgICAgICAgICAgICAgICAgMHgzCiAKKyNkZWZpbmUgQVI3MDEwX0dQSU9fT0UgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyMDAwCisjZGVmaW5lIEFSNzAxMF9HUElPX09FX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lIEFSNzAxMF9HUElPX09FX0FTX09VVFBVVCAgICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lIEFSNzAxMF9HUElPX09FX0FTX0lOUFVUICAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lIEFSNzAxMF9HUElPX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjAwNAorI2RlZmluZSBBUjcwMTBfR1BJT19PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTIwMDgKKyNkZWZpbmUgQVI3MDEwX0dQSU9fU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyMDBDCisjZGVmaW5lIEFSNzAxMF9HUElPX0NMRUFSICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjAxMAorI2RlZmluZSBBUjcwMTBfR1BJT19JTlQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTIwMTQKKyNkZWZpbmUgQVI3MDEwX0dQSU9fSU5UX1RZUEUgICAgICAgICAgICAgICAgICAgICAweDUyMDE4CisjZGVmaW5lIEFSNzAxMF9HUElPX0lOVF9QT0xBUklUWSAgICAgICAgICAgICAgICAgMHg1MjAxQworI2RlZmluZSBBUjcwMTBfR1BJT19QRU5ESU5HICAgICAgICAgICAgICAgICAgICAgIDB4NTIwMjAKKyNkZWZpbmUgQVI3MDEwX0dQSU9fSU5UX01BU0sgICAgICAgICAgICAgICAgICAgICAweDUyMDI0CisjZGVmaW5lIEFSNzAxMF9HUElPX0ZVTkNUSU9OICAgICAgICAgICAgICAgICAgICAgMHg1MjAyOAorCiAjZGVmaW5lIEFSX0dQSU9fSU5UUl9QT0wgICAgICAgICAgICAgICAgICAgICAgICAgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkgPyAweDQwNTggOiAweDQwNTApCiAjZGVmaW5lIEFSX0dQSU9fSU5UUl9QT0xfVkFMICAgICAgICAgICAgICAgICAgICAgMHgwMDAxRkZGRgogI2RlZmluZSBBUl9HUElPX0lOVFJfUE9MX1ZBTF9TICAgICAgICAgICAgICAgICAgIDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay92aXJ0dWFsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvdmlydHVhbC5jCmluZGV4IDEwNWFkNDAuLmZkMjAyNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay92aXJ0dWFsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3ZpcnR1YWwuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJaW5mby0+Y29udHJvbC5yYXRlc1sxXS5pZHggPSAtMTsKIAogCW1lbXNldCgmdHhjdGwsIDAsIHNpemVvZihzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wpKTsKLQl0eGN0bC50eHEgPSAmc2MtPnR4LnR4cVtzYy0+dHguaHdxX21hcFtBVEg5S19XTUVfQUNfVk9dXTsKKwl0eGN0bC50eHEgPSAmc2MtPnR4LnR4cVtzYy0+dHguaHdxX21hcFtXTUVfQUNfVk9dXTsKIAl0eGN0bC5mcmFtZV90eXBlID0gcHMgPyBBVEg5S19JRlRfUEFVU0UgOiBBVEg5S19JRlRfVU5QQVVTRTsKIAogCWlmIChhdGhfdHhfc3RhcnQoYXBoeS0+aHcsIHNrYiwgJnR4Y3RsKSAhPSAwKQpAQCAtNjk1LDE2ICs2OTUsMTggQEAKIAkJICBpZGxlID8gImlkbGUiIDogIm5vdC1pZGxlIik7CiB9CiAvKiBPbmx5IGJvdGhlciBzdGFydGluZyBhIHF1ZXVlIG9uIGFuIGFjdGl2ZSB2aXJ0dWFsIHdpcGh5ICovCi12b2lkIGF0aF9tYWM4MDIxMV9zdGFydF9xdWV1ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgdTE2IHNrYl9xdWV1ZSkKK2Jvb2wgYXRoX21hYzgwMjExX3N0YXJ0X3F1ZXVlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1MTYgc2tiX3F1ZXVlKQogewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPnByaV93aXBoeS0+aHc7CiAJdW5zaWduZWQgaW50IGk7CisJYm9vbCB0eHFfc3RhcnRlZCA9IGZhbHNlOwogCiAJc3Bpbl9sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CiAKIAkvKiBTdGFydCB0aGUgcHJpbWFyeSB3aXBoeSAqLwogCWlmIChzYy0+cHJpX3dpcGh5LT5zdGF0ZSA9PSBBVEhfV0lQSFlfQUNUSVZFKSB7CiAJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGh3LCBza2JfcXVldWUpOworCQl0eHFfc3RhcnRlZCA9IHRydWU7CiAJCWdvdG8gdW5sb2NrOwogCX0KIApAQCAtNzE4LDExICs3MjAsMTMgQEAKIAogCQlodyA9IGFwaHktPmh3OwogCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShodywgc2tiX3F1ZXVlKTsKKwkJdHhxX3N0YXJ0ZWQgPSB0cnVlOwogCQlicmVhazsKIAl9CiAKIHVubG9jazoKIAlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCXJldHVybiB0eHFfc3RhcnRlZDsKIH0KIAogLyogR28gYWhlYWQgYW5kIHByb3BhZ2F0ZSBpbmZvcm1hdGlvbiB0byBhbGwgdmlydHVhbCB3aXBoeXMsIGl0IHdvbid0IGh1cnQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuYwppbmRleCBlMjMxNzJjLi42MjYwZmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5jCkBAIC0yNzksOSArMjc5LDYgQEAKIAlpZiAod21pLT5kcnZfcHJpdi0+b3BfZmxhZ3MgJiBPUF9VTlBMVUdHRUQpCiAJCXJldHVybiAwOwogCi0JaWYgKCF3bWkpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJc2tiID0gYWxsb2Nfc2tiKGhlYWRyb29tICsgY21kX2xlbiwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMKaW5kZXggODU5YWE0YS4uNTAxYjcyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jCkBAIC0zMjgsNiArMzI4LDcgQEAKIAl1MzIgYmFbV01FX0JBX0JNUF9TSVpFID4+IDVdOwogCWludCBpc2FnZ3IsIHR4ZmFpbCwgdHhwZW5kaW5nLCBzZW5kYmFyID0gMCwgbmVlZHJlc2V0ID0gMCwgbmJhZCA9IDA7CiAJYm9vbCByY191cGRhdGUgPSB0cnVlOworCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSByYXRlc1s0XTsKIAogCXNrYiA9IGJmLT5iZl9tcGR1OwogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKQEAgLTMzNSwxOCArMzM2LDQ0IEBACiAJdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlodyA9IGJmLT5hcGh5LT5odzsKIAorCW1lbWNweShyYXRlcywgdHhfaW5mby0+Y29udHJvbC5yYXRlcywgc2l6ZW9mKHJhdGVzKSk7CisKIAlyY3VfcmVhZF9sb2NrKCk7CiAKIAkvKiBYWFg6IHVzZSBpZWVlODAyMTFfZmluZF9zdGEhICovCiAJc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhX2J5X2h3KGh3LCBoZHItPmFkZHIxKTsKIAlpZiAoIXN0YSkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKKworCQlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7CisJCXdoaWxlIChiZikgeworCQkJYmZfbmV4dCA9IGJmLT5iZl9uZXh0OworCisJCQliZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfWFJFVFJZOworCQkJaWYgKChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9FRE1BKSB8fAorCQkJICAgICFiZi0+YmZfc3RhbGUgfHwgYmZfbmV4dCAhPSBOVUxMKQorCQkJCWxpc3RfbW92ZV90YWlsKCZiZi0+bGlzdCwgJmJmX2hlYWQpOworCisJCQlhdGhfdHhfcmNfc3RhdHVzKGJmLCB0cywgMCwgMCwgZmFsc2UpOworCQkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsIHR4cSwgJmJmX2hlYWQsIHRzLAorCQkJCTAsIDApOworCisJCQliZiA9IGJmX25leHQ7CisJCX0KIAkJcmV0dXJuOwogCX0KIAogCWFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXN0YS0+ZHJ2X3ByaXY7CiAJdGlkID0gQVRIX0FOXzJfVElEKGFuLCBiZi0+YmZfdGlkbm8pOwogCisJLyoKKwkgKiBUaGUgaGFyZHdhcmUgb2NjYXNpb25hbGx5IHNlbmRzIGEgdHggc3RhdHVzIGZvciB0aGUgd3JvbmcgVElELgorCSAqIEluIHRoaXMgY2FzZSwgdGhlIEJBIHN0YXR1cyBjYW5ub3QgYmUgY29uc2lkZXJlZCB2YWxpZCBhbmQgYWxsCisJICogc3ViZnJhbWVzIG5lZWQgdG8gYmUgcmV0cmFuc21pdHRlZAorCSAqLworCWlmIChiZi0+YmZfdGlkbm8gIT0gdHMtPnRpZCkKKwkJdHhvayA9IGZhbHNlOworCiAJaXNhZ2dyID0gYmZfaXNhZ2dyKGJmKTsKIAltZW1zZXQoYmEsIDAsIFdNRV9CQV9CTVBfU0laRSA+PiAzKTsKIApAQCAtMzc1LDYgKzQwMiw5IEBACiAJCXR4ZmFpbCA9IHR4cGVuZGluZyA9IDA7CiAJCWJmX25leHQgPSBiZi0+YmZfbmV4dDsKIAorCQlza2IgPSBiZi0+YmZfbXBkdTsKKwkJdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwogCQlpZiAoQVRIX0JBX0lTU0VUKGJhLCBBVEhfQkFfSU5ERVgoc2VxX3N0LCBiZi0+YmZfc2Vxbm8pKSkgewogCQkJLyogdHJhbnNtaXQgY29tcGxldGlvbiwgc3ViZnJhbWUgaXMKIAkJCSAqIGFja2VkIGJ5IGJsb2NrIGFjayAqLwpAQCAtNDI4LDYgKzQ1OCw3IEBACiAJCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CiAKIAkJCWlmIChyY191cGRhdGUgJiYgKGFja2VkX2NudCA9PSAxIHx8IHR4ZmFpbF9jbnQgPT0gMSkpIHsKKwkJCQltZW1jcHkodHhfaW5mby0+Y29udHJvbC5yYXRlcywgcmF0ZXMsIHNpemVvZihyYXRlcykpOwogCQkJCWF0aF90eF9yY19zdGF0dXMoYmYsIHRzLCBuYmFkLCB0eG9rLCB0cnVlKTsKIAkJCQlyY191cGRhdGUgPSBmYWxzZTsKIAkJCX0gZWxzZSB7CkBAIC00ODcsNiArNTE4LDE0IEBACiAJCWJmID0gYmZfbmV4dDsKIAl9CiAKKwkvKiBwcmVwZW5kIHVuLWFja2VkIGZyYW1lcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwZW5kaW5nIGZyYW1lIHF1ZXVlICovCisJaWYgKCFsaXN0X2VtcHR5KCZiZl9wZW5kaW5nKSkgeworCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCQlsaXN0X3NwbGljZSgmYmZfcGVuZGluZywgJnRpZC0+YnVmX3EpOworCQlhdGhfdHhfcXVldWVfdGlkKHR4cSwgdGlkKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCX0KKwogCWlmICh0aWQtPnN0YXRlICYgQUdHUl9DTEVBTlVQKSB7CiAJCWlmICh0aWQtPmJhd19oZWFkID09IHRpZC0+YmF3X3RhaWwpIHsKIAkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfQ09NUExFVEU7CkBAIC00OTksMTQgKzUzOCw2IEBACiAJCXJldHVybjsKIAl9CiAKLQkvKiBwcmVwZW5kIHVuLWFja2VkIGZyYW1lcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwZW5kaW5nIGZyYW1lIHF1ZXVlICovCi0JaWYgKCFsaXN0X2VtcHR5KCZiZl9wZW5kaW5nKSkgewotCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCQlsaXN0X3NwbGljZSgmYmZfcGVuZGluZywgJnRpZC0+YnVmX3EpOwotCQlhdGhfdHhfcXVldWVfdGlkKHR4cSwgdGlkKTsKLQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCX0KLQogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKG5lZWRyZXNldCkKQEAgLTk0MSw2ICs5NzIsNyBAQAogCWlmICghQVRIX1RYUV9TRVRVUChzYywgcW51bSkpIHsKIAkJc3RydWN0IGF0aF90eHEgKnR4cSA9ICZzYy0+dHgudHhxW3FudW1dOwogCisJCXR4cS0+YXhxX2NsYXNzID0gc3VidHlwZTsKIAkJdHhxLT5heHFfcW51bSA9IHFudW07CiAJCXR4cS0+YXhxX2xpbmsgPSBOVUxMOwogCQlJTklUX0xJU1RfSEVBRCgmdHhxLT5heHFfcSk7CkBAIC05NTgsNTggKzk5MCw2IEBACiAJcmV0dXJuICZzYy0+dHgudHhxW3FudW1dOwogfQogCi1pbnQgYXRoX3R4X2dldF9xbnVtKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcXR5cGUsIGludCBoYWx0eXBlKQotewotCWludCBxbnVtOwotCi0Jc3dpdGNoIChxdHlwZSkgewotCWNhc2UgQVRIOUtfVFhfUVVFVUVfREFUQToKLQkJaWYgKGhhbHR5cGUgPj0gQVJSQVlfU0laRShzYy0+dHguaHdxX21hcCkpIHsKLQkJCWF0aF9wcmludChhdGg5a19od19jb21tb24oc2MtPnNjX2FoKSwgQVRIX0RCR19GQVRBTCwKLQkJCQkgICJIQUwgQUMgJXUgb3V0IG9mIHJhbmdlLCBtYXggJXp1IVxuIiwKLQkJCQkgIGhhbHR5cGUsIEFSUkFZX1NJWkUoc2MtPnR4Lmh3cV9tYXApKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQlxbnVtID0gc2MtPnR4Lmh3cV9tYXBbaGFsdHlwZV07Ci0JCWJyZWFrOwotCWNhc2UgQVRIOUtfVFhfUVVFVUVfQkVBQ09OOgotCQlxbnVtID0gc2MtPmJlYWNvbi5iZWFjb25xOwotCQlicmVhazsKLQljYXNlIEFUSDlLX1RYX1FVRVVFX0NBQjoKLQkJcW51bSA9IHNjLT5iZWFjb24uY2FicS0+YXhxX3FudW07Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXFudW0gPSAtMTsKLQl9Ci0JcmV0dXJuIHFudW07Ci19Ci0KLXN0cnVjdCBhdGhfdHhxICphdGhfdGVzdF9nZXRfdHhxKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBhdGhfdHhxICp0eHEgPSBOVUxMOwotCXUxNiBza2JfcXVldWUgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKLQlpbnQgcW51bTsKLQotCXFudW0gPSBhdGhfZ2V0X2hhbF9xbnVtKHNrYl9xdWV1ZSwgc2MpOwotCXR4cSA9ICZzYy0+dHgudHhxW3FudW1dOwotCi0Jc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQotCWlmICh0eHEtPmF4cV9kZXB0aCA+PSAoQVRIX1RYQlVGIC0gMjApKSB7Ci0JCWF0aF9wcmludChhdGg5a19od19jb21tb24oc2MtPnNjX2FoKSwgQVRIX0RCR19YTUlULAotCQkJICAiVFggcXVldWU6ICVkIGlzIGZ1bGwsIGRlcHRoOiAlZFxuIiwKLQkJCSAgcW51bSwgdHhxLT5heHFfZGVwdGgpOwotCQlhdGhfbWFjODAyMTFfc3RvcF9xdWV1ZShzYywgc2tiX3F1ZXVlKTsKLQkJdHhxLT5zdG9wcGVkID0gMTsKLQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0KLQlyZXR1cm4gdHhxOwotfQotCiBpbnQgYXRoX3R4cV91cGRhdGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxbnVtLAogCQkgICBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pCiB7CkBAIC0xNjg4LDEyICsxNjY4LDE1IEBACiAJCWJmLT5iZl9mcm1sZW4gLT0gcGFkc2l6ZTsKIAl9CiAKLQlpZiAoY29uZl9pc19odCgmaHctPmNvbmYpKSB7CisJaWYgKCF0eGN0bC0+cGFwcmQgJiYgY29uZl9pc19odCgmaHctPmNvbmYpKSB7CiAJCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9IVDsKIAkJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9MRFBDKQogCQkJdXNlX2xkcGMgPSB0cnVlOwogCX0KIAorCWJmLT5iZl9zdGF0ZS5iZnNfcGFwcmQgPSB0eGN0bC0+cGFwcmQ7CisJaWYgKHR4Y3RsLT5wYXByZCkKKwkJYmYtPmJmX3N0YXRlLmJmc19wYXByZF90aW1lc3RhbXAgPSBqaWZmaWVzOwogCWJmLT5iZl9mbGFncyA9IHNldHVwX3R4X2ZsYWdzKHNrYiwgdXNlX2xkcGMpOwogCiAJYmYtPmJmX2tleXR5cGUgPSBnZXRfaHdfY3J5cHRvX2tleXR5cGUoc2tiKTsKQEAgLTE3NjgsNiArMTc1MSw5IEBACiAJCQkgICAgYmYtPmJmX2J1Zl9hZGRyLAogCQkJICAgIHR4Y3RsLT50eHEtPmF4cV9xbnVtKTsKIAorCWlmIChiZi0+YmZfc3RhdGUuYmZzX3BhcHJkKQorCQlhcjkwMDNfaHdfc2V0X3BhcHJkX3R4ZGVzYyhhaCwgZHMsIGJmLT5iZl9zdGF0ZS5iZnNfcGFwcmQpOworCiAJc3Bpbl9sb2NrX2JoKCZ0eGN0bC0+dHhxLT5heHFfbG9jayk7CiAKIAlpZiAoYmZfaXNodChiZikgJiYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikgJiYKQEAgLTE4MDksOCArMTc5NSw5IEBACiAJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpOworCXN0cnVjdCBhdGhfdHhxICp0eHEgPSB0eGN0bC0+dHhxOwogCXN0cnVjdCBhdGhfYnVmICpiZjsKLQlpbnQgcjsKKwlpbnQgcSwgcjsKIAogCWJmID0gYXRoX3R4X2dldF9idWZmZXIoc2MpOwogCWlmICghYmYpIHsKQEAgLTE4MjAsOCArMTgwNyw2IEBACiAKIAlyID0gYXRoX3R4X3NldHVwX2J1ZmZlcihodywgYmYsIHNrYiwgdHhjdGwpOwogCWlmICh1bmxpa2VseShyKSkgewotCQlzdHJ1Y3QgYXRoX3R4cSAqdHhxID0gdHhjdGwtPnR4cTsKLQogCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLCAiVFggbWVtIGFsbG9jIGZhaWx1cmVcbiIpOwogCiAJCS8qIHVwb24gYXRoX3R4X3Byb2Nlc3NxKCkgdGhpcyBUWCBxdWV1ZSB3aWxsIGJlIHJlc3VtZWQsIHdlCkBAIC0xODI5LDcgKzE4MTQsNyBAQAogCQkgKiB3ZSB3aWxsIGF0IGxlYXN0IGhhdmUgdG8gcnVuIFRYIGNvbXBsZXRpb25vbiBvbmUgYnVmZmVyCiAJCSAqIG9uIHRoZSBxdWV1ZSAqLwogCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCQlpZiAoc2MtPnR4LnR4cVt0eHEtPmF4cV9xbnVtXS5heHFfZGVwdGggPiAxKSB7CisJCWlmICghdHhxLT5zdG9wcGVkICYmIHR4cS0+YXhxX2RlcHRoID4gMSkgewogCQkJYXRoX21hYzgwMjExX3N0b3BfcXVldWUoc2MsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKIAkJCXR4cS0+c3RvcHBlZCA9IDE7CiAJCX0KQEAgLTE4NDAsNiArMTgyNSwxNyBAQAogCQlyZXR1cm4gcjsKIAl9CiAKKwlxID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CisJaWYgKHEgPj0gNCkKKwkJcSA9IDA7CisKKwlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCWlmICgrK3NjLT50eC5wZW5kaW5nX2ZyYW1lc1txXSA+IEFUSF9NQVhfUURFUFRIICYmICF0eHEtPnN0b3BwZWQpIHsKKwkJYXRoX21hYzgwMjExX3N0b3BfcXVldWUoc2MsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKKwkJdHhxLT5zdG9wcGVkID0gMTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCiAJYXRoX3R4X3N0YXJ0X2RtYShzYywgYmYsIHR4Y3RsKTsKIAogCXJldHVybiAwOwpAQCAtMTkwOSw3ICsxOTA1LDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICogaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCWludCBwYWRwb3MsIHBhZHNpemU7CisJaW50IHEsIHBhZHBvcywgcGFkc2l6ZTsKIAogCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfWE1JVCwgIlRYIGNvbXBsZXRlOiBza2I6ICVwXG4iLCBza2IpOwogCkBAIC0xOTQ4LDggKzE5NDQsMTYgQEAKIAogCWlmICh1bmxpa2VseSh0eF9pbmZvLT5wYWRbMF0gJiBBVEhfVFhfSU5GT19GUkFNRV9UWVBFX0lOVEVSTkFMKSkKIAkJYXRoOWtfdHhfc3RhdHVzKGh3LCBza2IpOwotCWVsc2UKKwllbHNlIHsKKwkJcSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOworCQlpZiAocSA+PSA0KQorCQkJcSA9IDA7CisKKwkJaWYgKC0tc2MtPnR4LnBlbmRpbmdfZnJhbWVzW3FdIDwgMCkKKwkJCXNjLT50eC5wZW5kaW5nX2ZyYW1lc1txXSA9IDA7CisKIAkJaWVlZTgwMjExX3R4X3N0YXR1cyhodywgc2tiKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGF0aF90eF9jb21wbGV0ZV9idWYoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZiwKQEAgLTE5NzEsOCArMTk3NSwxOCBAQAogCX0KIAogCWRtYV91bm1hcF9zaW5nbGUoc2MtPmRldiwgYmYtPmJmX2RtYWNvbnRleHQsIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKTsKLQlhdGhfdHhfY29tcGxldGUoc2MsIHNrYiwgYmYtPmFwaHksIHR4X2ZsYWdzKTsKLQlhdGhfZGVidWdfc3RhdF90eChzYywgdHhxLCBiZiwgdHMpOworCisJaWYgKGJmLT5iZl9zdGF0ZS5iZnNfcGFwcmQpIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywKKwkJCSAgICAgICBiZi0+YmZfc3RhdGUuYmZzX3BhcHJkX3RpbWVzdGFtcCArCisJCQkgICAgICAgbXNlY3NfdG9famlmZmllcyhBVEhfUEFQUkRfVElNRU9VVCkpKQorCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJZWxzZQorCQkJY29tcGxldGUoJnNjLT5wYXByZF9jb21wbGV0ZSk7CisJfSBlbHNlIHsKKwkJYXRoX3R4X2NvbXBsZXRlKHNjLCBza2IsIGJmLT5hcGh5LCB0eF9mbGFncyk7CisJCWF0aF9kZWJ1Z19zdGF0X3R4KHNjLCB0eHEsIGJmLCB0cyk7CisJfQogCiAJLyoKIAkgKiBSZXR1cm4gdGhlIGxpc3Qgb2YgYXRoX2J1ZiBvZiB0aGlzIG1wZHUgdG8gZnJlZSBxdWV1ZQpAQCAtMjA1MCwyMSArMjA2NCwyMSBAQAogCQl0eF9pbmZvLT5zdGF0dXMucmF0ZXNbaV0uaWR4ID0gLTE7CiAJfQogCi0JdHhfaW5mby0+c3RhdHVzLnJhdGVzW3R4X3JhdGVpbmRleF0uY291bnQgPSBiZi0+YmZfcmV0cmllcyArIDE7CisJdHhfaW5mby0+c3RhdHVzLnJhdGVzW3R4X3JhdGVpbmRleF0uY291bnQgPSB0cy0+dHNfbG9uZ3JldHJ5ICsgMTsKIH0KIAogc3RhdGljIHZvaWQgYXRoX3dha2VfbWFjODAyMTFfcXVldWUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEpCiB7CiAJaW50IHFudW07CiAKKwlxbnVtID0gYXRoX2dldF9tYWM4MDIxMV9xbnVtKHR4cS0+YXhxX2NsYXNzLCBzYyk7CisJaWYgKHFudW0gPT0gLTEpCisJCXJldHVybjsKKwogCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JaWYgKHR4cS0+c3RvcHBlZCAmJgotCSAgICBzYy0+dHgudHhxW3R4cS0+YXhxX3FudW1dLmF4cV9kZXB0aCA8PSAoQVRIX1RYQlVGIC0gMjApKSB7Ci0JCXFudW0gPSBhdGhfZ2V0X21hYzgwMjExX3FudW0odHhxLT5heHFfcW51bSwgc2MpOwotCQlpZiAocW51bSAhPSAtMSkgewotCQkJYXRoX21hYzgwMjExX3N0YXJ0X3F1ZXVlKHNjLCBxbnVtKTsKKwlpZiAodHhxLT5zdG9wcGVkICYmIHNjLT50eC5wZW5kaW5nX2ZyYW1lc1txbnVtXSA8IEFUSF9NQVhfUURFUFRIKSB7CisJCWlmIChhdGhfbWFjODAyMTFfc3RhcnRfcXVldWUoc2MsIHFudW0pKQogCQkJdHhxLT5zdG9wcGVkID0gMDsKLQkJfQogCX0KIAlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CiB9CkBAIC0yMTYxLDcgKzIxNzUsNiBAQAogCQkJICogVGhpcyBmcmFtZSBpcyBzZW50IG91dCBhcyBhIHNpbmdsZSBmcmFtZS4KIAkJCSAqIFVzZSBoYXJkd2FyZSByZXRyeSBzdGF0dXMgZm9yIHRoaXMgZnJhbWUuCiAJCQkgKi8KLQkJCWJmLT5iZl9yZXRyaWVzID0gdHMudHNfbG9uZ3JldHJ5OwogCQkJaWYgKHRzLnRzX3N0YXR1cyAmIEFUSDlLX1RYRVJSX1hSRVRSWSkKIAkJCQliZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfWFJFVFJZOwogCQkJYXRoX3R4X3JjX3N0YXR1cyhiZiwgJnRzLCAwLCB0eG9rLCB0cnVlKTsKQEAgLTIyNzksOCArMjI5MiwxOCBAQAogCiAJCXR4b2sgPSAhKHR4cy50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9NQVNLKTsKIAorCQkvKgorCQkgKiBNYWtlIHN1cmUgbnVsbCBmdW5jIGZyYW1lIGlzIGFja2VkIGJlZm9yZSBjb25maWd1cmluZworCQkgKiBodyBpbnRvIHBzIG1vZGUuCisJCSAqLworCQlpZiAoYmYtPmJmX2lzbnVsbGZ1bmMgJiYgdHhvaykgeworCQkJaWYgKChzYy0+cHNfZmxhZ3MgJiBQU19FTkFCTEVEKSkKKwkJCQlhdGg5a19lbmFibGVfcHMoc2MpOworCQkJZWxzZQorCQkJCXNjLT5wc19mbGFncyB8PSBQU19OVUxMRlVOQ19DT01QTEVURUQ7CisJCX0KKwogCQlpZiAoIWJmX2lzYW1wZHUoYmYpKSB7Ci0JCQliZi0+YmZfcmV0cmllcyA9IHR4cy50c19sb25ncmV0cnk7CiAJCQlpZiAodHhzLnRzX3N0YXR1cyAmIEFUSDlLX1RYRVJSX1hSRVRSWSkKIAkJCQliZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfWFJFVFJZOwogCQkJYXRoX3R4X3JjX3N0YXR1cyhiZiwgJnR4cywgMCwgdHhvaywgdHJ1ZSk7CkBAIC0yNDI0LDYyICsyNDQ3LDQ0IEBACiAJZm9yIChhY25vID0gMCwgYWMgPSAmYW4tPmFjW2Fjbm9dOwogCSAgICAgYWNubyA8IFdNRV9OVU1fQUM7IGFjbm8rKywgYWMrKykgewogCQlhYy0+c2NoZWQgICAgPSBmYWxzZTsKKwkJYWMtPnFudW0gPSBzYy0+dHguaHdxX21hcFthY25vXTsKIAkJSU5JVF9MSVNUX0hFQUQoJmFjLT50aWRfcSk7Ci0KLQkJc3dpdGNoIChhY25vKSB7Ci0JCWNhc2UgV01FX0FDX0JFOgotCQkJYWMtPnFudW0gPSBhdGhfdHhfZ2V0X3FudW0oc2MsCi0JCQkJICAgQVRIOUtfVFhfUVVFVUVfREFUQSwgQVRIOUtfV01FX0FDX0JFKTsKLQkJCWJyZWFrOwotCQljYXNlIFdNRV9BQ19CSzoKLQkJCWFjLT5xbnVtID0gYXRoX3R4X2dldF9xbnVtKHNjLAotCQkJCSAgIEFUSDlLX1RYX1FVRVVFX0RBVEEsIEFUSDlLX1dNRV9BQ19CSyk7Ci0JCQlicmVhazsKLQkJY2FzZSBXTUVfQUNfVkk6Ci0JCQlhYy0+cW51bSA9IGF0aF90eF9nZXRfcW51bShzYywKLQkJCQkgICBBVEg5S19UWF9RVUVVRV9EQVRBLCBBVEg5S19XTUVfQUNfVkkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgV01FX0FDX1ZPOgotCQkJYWMtPnFudW0gPSBhdGhfdHhfZ2V0X3FudW0oc2MsCi0JCQkJICAgQVRIOUtfVFhfUVVFVUVfREFUQSwgQVRIOUtfV01FX0FDX1ZPKTsKLQkJCWJyZWFrOwotCQl9CiAJfQogfQogCiB2b2lkIGF0aF90eF9ub2RlX2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4pCiB7Ci0JaW50IGk7Ci0Jc3RydWN0IGF0aF9hdHhfYWMgKmFjLCAqYWNfdG1wOwotCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLCAqdGlkX3RtcDsKKwlzdHJ1Y3QgYXRoX2F0eF9hYyAqYWM7CisJc3RydWN0IGF0aF9hdHhfdGlkICp0aWQ7CiAJc3RydWN0IGF0aF90eHEgKnR4cTsKKwlpbnQgaSwgdGlkbm87CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVRIOUtfTlVNX1RYX1FVRVVFUzsgaSsrKSB7Ci0JCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSkgewotCQkJdHhxID0gJnNjLT50eC50eHFbaV07CisJZm9yICh0aWRubyA9IDAsIHRpZCA9ICZhbi0+dGlkW3RpZG5vXTsKKwkgICAgIHRpZG5vIDwgV01FX05VTV9USUQ7IHRpZG5vKyssIHRpZCsrKSB7CisJCWkgPSB0aWQtPmFjLT5xbnVtOwogCi0JCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCQlpZiAoIUFUSF9UWFFfU0VUVVAoc2MsIGkpKQorCQkJY29udGludWU7CiAKLQkJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhYywKLQkJCQkJYWNfdG1wLCAmdHhxLT5heHFfYWNxLCBsaXN0KSB7Ci0JCQkJdGlkID0gbGlzdF9maXJzdF9lbnRyeSgmYWMtPnRpZF9xLAotCQkJCQkJc3RydWN0IGF0aF9hdHhfdGlkLCBsaXN0KTsKLQkJCQlpZiAodGlkICYmIHRpZC0+YW4gIT0gYW4pCi0JCQkJCWNvbnRpbnVlOwotCQkJCWxpc3RfZGVsKCZhYy0+bGlzdCk7Ci0JCQkJYWMtPnNjaGVkID0gZmFsc2U7CisJCXR4cSA9ICZzYy0+dHgudHhxW2ldOworCQlhYyA9IHRpZC0+YWM7CiAKLQkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGlkLAotCQkJCQkJdGlkX3RtcCwgJmFjLT50aWRfcSwgbGlzdCkgewotCQkJCQlsaXN0X2RlbCgmdGlkLT5saXN0KTsKLQkJCQkJdGlkLT5zY2hlZCA9IGZhbHNlOwotCQkJCQlhdGhfdGlkX2RyYWluKHNjLCB0eHEsIHRpZCk7Ci0JCQkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfQ09NUExFVEU7Ci0JCQkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQ0xFQU5VUDsKLQkJCQl9Ci0JCQl9CisJCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7CiAKLQkJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwkJaWYgKHRpZC0+c2NoZWQpIHsKKwkJCWxpc3RfZGVsKCZ0aWQtPmxpc3QpOworCQkJdGlkLT5zY2hlZCA9IGZhbHNlOwogCQl9CisKKwkJaWYgKGFjLT5zY2hlZCkgeworCQkJbGlzdF9kZWwoJmFjLT5saXN0KTsKKwkJCXRpZC0+YWMtPnNjaGVkID0gZmFsc2U7CisJCX0KKworCQlhdGhfdGlkX2RyYWluKHNjLCB0eHEsIHRpZCk7CisJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfQ09NUExFVEU7CisJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQ0xFQU5VUDsKKworCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX2NzLmMKaW5kZXggYzI3NDZmYy4uM2I2MzIxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9jcy5jCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CkBAIC0xOTEsMjUgKzE5MCwyMyBAQAogCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROwogCiAJLyogSU8gd2luZG93IHNldHRpbmdzICovCi0JcF9kZXYtPmlvLk51bVBvcnRzMSA9IHBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOworCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gcF9kZXYtPnJlc291cmNlWzFdLT5lbmQgPSAwOwogCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQtPmlvLm53aW4gPiAwKSkgewogCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQtPmlvOwotCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQotCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OwotCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQotCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7Ci0JCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyAmPSB+SU9fREFUQV9QQVRIX1dJRFRIOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9CisJCQkJCXBjbWNpYV9pb19jZmdfZGF0YV93aWR0aChpby0+ZmxhZ3MpOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gaW8tPndpblswXS5iYXNlOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmVuZCA9IGlvLT53aW5bMF0ubGVuOwogCQlpZiAoaW8tPm53aW4gPiAxKSB7Ci0JCQlwX2Rldi0+aW8uQXR0cmlidXRlczIgPSBwX2Rldi0+aW8uQXR0cmlidXRlczE7Ci0JCQlwX2Rldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOwotCQkJcF9kZXYtPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOworCQkJcF9kZXYtPnJlc291cmNlWzFdLT5mbGFncyA9IHBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3M7CisJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPnN0YXJ0ID0gaW8tPndpblsxXS5iYXNlOworCQkJcF9kZXYtPnJlc291cmNlWzFdLT5lbmQgPSBpby0+d2luWzFdLmxlbjsKIAkJfQogCX0KIAogCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCi0JcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKTsKKwlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpOwogfQogCiBzdGF0aWMgaW50IGF0bWVsX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKQEAgLTI1NCw3ICsyNTEsNyBAQAogCiAJKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5ldGhfZGV2ID0KIAkJaW5pdF9hdG1lbF9jYXJkKGxpbmstPmlycSwKLQkJCQlsaW5rLT5pby5CYXNlUG9ydDEsCisJCQkJbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0LAogCQkJCWRpZCA/IGRpZC0+ZHJpdmVyX2luZm8gOiBBVE1FTF9GV19UWVBFX05PTkUsCiAJCQkJJmxpbmstPmRldiwKIAkJCQljYXJkX3ByZXNlbnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmgKaW5kZXggM2EwMDNlNi4uODY3NGE5OTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oCkBAIC01MzAsNyArNTMwLDcgQEAKIAkvKiBTaXplIG9mIHRoZSBkYXRhLiBGb3IgdWNvZGUgYW5kIFBDTSB0aGlzIGlzIGluIGJ5dGVzLgogCSAqIEZvciBJViB0aGlzIGlzIG51bWJlci1vZi1pdnMuICovCiAJX19iZTMyIHNpemU7Ci19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKK30gX19wYWNrZWQ7CiAKIC8qIEluaXRpYWwgVmFsdWUgZmlsZSBmb3JtYXQgKi8KICNkZWZpbmUgQjQzX0lWX09GRlNFVF9NQVNLCTB4N0ZGRgpAQCAtNTQwLDggKzU0MCw4IEBACiAJdW5pb24gewogCQlfX2JlMTYgZDE2OwogCQlfX2JlMzIgZDMyOwotCX0gZGF0YSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKwl9IGRhdGEgX19wYWNrZWQ7Cit9IF9fcGFja2VkOwogCiAKIC8qIERhdGEgc3RydWN0dXJlcyBmb3IgRE1BIHRyYW5zbWlzc2lvbiwgcGVyIDgwMjExIGNvcmUuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMKaW5kZXggZmE0MGZkZi4uMTBkMGFhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYwpAQCAtMzMzLDExICszMzMsMTEgQEAKIAlkbWFfYWRkcl90IGRtYWFkZHI7CiAKIAlpZiAodHgpIHsKLQkJZG1hYWRkciA9IHNzYl9kbWFfbWFwX3NpbmdsZShyaW5nLT5kZXYtPmRldiwKLQkJCQkJICAgICBidWYsIGxlbiwgRE1BX1RPX0RFVklDRSk7CisJCWRtYWFkZHIgPSBkbWFfbWFwX3NpbmdsZShyaW5nLT5kZXYtPmRldi0+ZG1hX2RldiwKKwkJCQkJIGJ1ZiwgbGVuLCBETUFfVE9fREVWSUNFKTsKIAl9IGVsc2UgewotCQlkbWFhZGRyID0gc3NiX2RtYV9tYXBfc2luZ2xlKHJpbmctPmRldi0+ZGV2LAotCQkJCQkgICAgIGJ1ZiwgbGVuLCBETUFfRlJPTV9ERVZJQ0UpOworCQlkbWFhZGRyID0gZG1hX21hcF9zaW5nbGUocmluZy0+ZGV2LT5kZXYtPmRtYV9kZXYsCisJCQkJCSBidWYsIGxlbiwgRE1BX0ZST01fREVWSUNFKTsKIAl9CiAKIAlyZXR1cm4gZG1hYWRkcjsKQEAgLTM0OCwxMSArMzQ4LDExIEBACiAJCQkgIGRtYV9hZGRyX3QgYWRkciwgc2l6ZV90IGxlbiwgaW50IHR4KQogewogCWlmICh0eCkgewotCQlzc2JfZG1hX3VubWFwX3NpbmdsZShyaW5nLT5kZXYtPmRldiwKLQkJCQkgICAgIGFkZHIsIGxlbiwgRE1BX1RPX0RFVklDRSk7CisJCWRtYV91bm1hcF9zaW5nbGUocmluZy0+ZGV2LT5kZXYtPmRtYV9kZXYsCisJCQkJIGFkZHIsIGxlbiwgRE1BX1RPX0RFVklDRSk7CiAJfSBlbHNlIHsKLQkJc3NiX2RtYV91bm1hcF9zaW5nbGUocmluZy0+ZGV2LT5kZXYsCi0JCQkJICAgICBhZGRyLCBsZW4sIERNQV9GUk9NX0RFVklDRSk7CisJCWRtYV91bm1hcF9zaW5nbGUocmluZy0+ZGV2LT5kZXYtPmRtYV9kZXYsCisJCQkJIGFkZHIsIGxlbiwgRE1BX0ZST01fREVWSUNFKTsKIAl9CiB9CiAKQEAgLTM2MSw3ICszNjEsNyBAQAogCQkJCSBkbWFfYWRkcl90IGFkZHIsIHNpemVfdCBsZW4pCiB7CiAJQjQzX1dBUk5fT04ocmluZy0+dHgpOwotCXNzYl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShyaW5nLT5kZXYtPmRldiwKKwlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShyaW5nLT5kZXYtPmRldi0+ZG1hX2RldiwKIAkJCQkgICAgYWRkciwgbGVuLCBETUFfRlJPTV9ERVZJQ0UpOwogfQogCkBAIC0zNzAsOCArMzcwLDggQEAKIAkJCQkgICAgZG1hX2FkZHJfdCBhZGRyLCBzaXplX3QgbGVuKQogewogCUI0M19XQVJOX09OKHJpbmctPnR4KTsKLQlzc2JfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UocmluZy0+ZGV2LT5kZXYsCi0JCQkJICAgICAgIGFkZHIsIGxlbiwgRE1BX0ZST01fREVWSUNFKTsKKwlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShyaW5nLT5kZXYtPmRldi0+ZG1hX2RldiwKKwkJCQkgICBhZGRyLCBsZW4sIERNQV9GUk9NX0RFVklDRSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUKQEAgLTQwMSw5ICs0MDEsOSBAQAogCSAqLwogCWlmIChyaW5nLT50eXBlID09IEI0M19ETUFfNjRCSVQpCiAJCWZsYWdzIHw9IEdGUF9ETUE7Ci0JcmluZy0+ZGVzY2Jhc2UgPSBzc2JfZG1hX2FsbG9jX2NvbnNpc3RlbnQocmluZy0+ZGV2LT5kZXYsCi0JCQkJCQkgIEI0M19ETUFfUklOR01FTVNJWkUsCi0JCQkJCQkgICYocmluZy0+ZG1hYmFzZSksIGZsYWdzKTsKKwlyaW5nLT5kZXNjYmFzZSA9IGRtYV9hbGxvY19jb2hlcmVudChyaW5nLT5kZXYtPmRldi0+ZG1hX2RldiwKKwkJCQkJICAgIEI0M19ETUFfUklOR01FTVNJWkUsCisJCQkJCSAgICAmKHJpbmctPmRtYWJhc2UpLCBmbGFncyk7CiAJaWYgKCFyaW5nLT5kZXNjYmFzZSkgewogCQliNDNlcnIocmluZy0+ZGV2LT53bCwgIkRNQSByaW5nbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC00MjAsOCArNDIwLDggQEAKIAlpZiAocmluZy0+dHlwZSA9PSBCNDNfRE1BXzY0QklUKQogCQlmbGFncyB8PSBHRlBfRE1BOwogCi0Jc3NiX2RtYV9mcmVlX2NvbnNpc3RlbnQocmluZy0+ZGV2LT5kZXYsIEI0M19ETUFfUklOR01FTVNJWkUsCi0JCQkJcmluZy0+ZGVzY2Jhc2UsIHJpbmctPmRtYWJhc2UsIGZsYWdzKTsKKwlkbWFfZnJlZV9jb2hlcmVudChyaW5nLT5kZXYtPmRldi0+ZG1hX2RldiwgQjQzX0RNQV9SSU5HTUVNU0laRSwKKwkJCSAgcmluZy0+ZGVzY2Jhc2UsIHJpbmctPmRtYWJhc2UpOwogfQogCiAvKiBSZXNldCB0aGUgUlggRE1BIGNoYW5uZWwgKi8KQEAgLTUyOCw3ICs1MjgsNyBAQAogCQkJCSAgZG1hX2FkZHJfdCBhZGRyLAogCQkJCSAgc2l6ZV90IGJ1ZmZlcnNpemUsIGJvb2wgZG1hX3RvX2RldmljZSkKIHsKLQlpZiAodW5saWtlbHkoc3NiX2RtYV9tYXBwaW5nX2Vycm9yKHJpbmctPmRldi0+ZGV2LCBhZGRyKSkpCisJaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKHJpbmctPmRldi0+ZGV2LT5kbWFfZGV2LCBhZGRyKSkpCiAJCXJldHVybiAxOwogCiAJc3dpdGNoIChyaW5nLT50eXBlKSB7CkBAIC04NzQsMTAgKzg3NCwxMCBAQAogCQkJZ290byBlcnJfa2ZyZWVfbWV0YTsKIAogCQkvKiB0ZXN0IGZvciBhYmlsaXR5IHRvIGRtYSB0byB0eGhkcl9jYWNoZSAqLwotCQlkbWFfdGVzdCA9IHNzYl9kbWFfbWFwX3NpbmdsZShkZXYtPmRldiwKLQkJCQkJICAgICAgcmluZy0+dHhoZHJfY2FjaGUsCi0JCQkJCSAgICAgIGI0M190eGhkcl9zaXplKGRldiksCi0JCQkJCSAgICAgIERNQV9UT19ERVZJQ0UpOworCQlkbWFfdGVzdCA9IGRtYV9tYXBfc2luZ2xlKGRldi0+ZGV2LT5kbWFfZGV2LAorCQkJCQkgIHJpbmctPnR4aGRyX2NhY2hlLAorCQkJCQkgIGI0M190eGhkcl9zaXplKGRldiksCisJCQkJCSAgRE1BX1RPX0RFVklDRSk7CiAKIAkJaWYgKGI0M19kbWFfbWFwcGluZ19lcnJvcihyaW5nLCBkbWFfdGVzdCwKIAkJCQkJICBiNDNfdHhoZHJfc2l6ZShkZXYpLCAxKSkgewpAQCAtODg5LDEwICs4ODksMTAgQEAKIAkJCWlmICghcmluZy0+dHhoZHJfY2FjaGUpCiAJCQkJZ290byBlcnJfa2ZyZWVfbWV0YTsKIAotCQkJZG1hX3Rlc3QgPSBzc2JfZG1hX21hcF9zaW5nbGUoZGV2LT5kZXYsCi0JCQkJCQkgICAgICByaW5nLT50eGhkcl9jYWNoZSwKLQkJCQkJCSAgICAgIGI0M190eGhkcl9zaXplKGRldiksCi0JCQkJCQkgICAgICBETUFfVE9fREVWSUNFKTsKKwkJCWRtYV90ZXN0ID0gZG1hX21hcF9zaW5nbGUoZGV2LT5kZXYtPmRtYV9kZXYsCisJCQkJCQkgIHJpbmctPnR4aGRyX2NhY2hlLAorCQkJCQkJICBiNDNfdHhoZHJfc2l6ZShkZXYpLAorCQkJCQkJICBETUFfVE9fREVWSUNFKTsKIAogCQkJaWYgKGI0M19kbWFfbWFwcGluZ19lcnJvcihyaW5nLCBkbWFfdGVzdCwKIAkJCQkJCSAgYjQzX3R4aGRyX3NpemUoZGV2KSwgMSkpIHsKQEAgLTkwMyw5ICs5MDMsOSBAQAogCQkJfQogCQl9CiAKLQkJc3NiX2RtYV91bm1hcF9zaW5nbGUoZGV2LT5kZXYsCi0JCQkJICAgICBkbWFfdGVzdCwgYjQzX3R4aGRyX3NpemUoZGV2KSwKLQkJCQkgICAgIERNQV9UT19ERVZJQ0UpOworCQlkbWFfdW5tYXBfc2luZ2xlKGRldi0+ZGV2LT5kbWFfZGV2LAorCQkJCSBkbWFfdGVzdCwgYjQzX3R4aGRyX3NpemUoZGV2KSwKKwkJCQkgRE1BX1RPX0RFVklDRSk7CiAJfQogCiAJZXJyID0gYWxsb2NfcmluZ21lbW9yeShyaW5nKTsKQEAgLTEwMTgsOSArMTAxOCwxMiBAQAogCS8qIFRyeSB0byBzZXQgdGhlIERNQSBtYXNrLiBJZiBpdCBmYWlscywgdHJ5IGZhbGxpbmcgYmFjayB0byBhCiAJICogbG93ZXIgbWFzaywgYXMgd2UgY2FuIGFsd2F5cyBhbHNvIHN1cHBvcnQgYSBsb3dlciBvbmUuICovCiAJd2hpbGUgKDEpIHsKLQkJZXJyID0gc3NiX2RtYV9zZXRfbWFzayhkZXYtPmRldiwgbWFzayk7Ci0JCWlmICghZXJyKQotCQkJYnJlYWs7CisJCWVyciA9IGRtYV9zZXRfbWFzayhkZXYtPmRldi0+ZG1hX2RldiwgbWFzayk7CisJCWlmICghZXJyKSB7CisJCQllcnIgPSBkbWFfc2V0X2NvaGVyZW50X21hc2soZGV2LT5kZXYtPmRtYV9kZXYsIG1hc2spOworCQkJaWYgKCFlcnIpCisJCQkJYnJlYWs7CisJCX0KIAkJaWYgKG1hc2sgPT0gRE1BX0JJVF9NQVNLKDY0KSkgewogCQkJbWFzayA9IERNQV9CSVRfTUFTSygzMik7CiAJCQlmYWxsYmFjayA9IDE7CkBAIC0xMjIxLDE0ICsxMjI0LDE0IEBACiAJbWV0YS0+ZG1hYWRkciA9IG1hcF9kZXNjYnVmZmVyKHJpbmcsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIDEpOwogCS8qIGNyZWF0ZSBhIGJvdW5jZSBidWZmZXIgaW4gem9uZV9kbWEgb24gbWFwcGluZyBmYWlsdXJlLiAqLwogCWlmIChiNDNfZG1hX21hcHBpbmdfZXJyb3IocmluZywgbWV0YS0+ZG1hYWRkciwgc2tiLT5sZW4sIDEpKSB7Ci0JCXByaXZfaW5mby0+Ym91bmNlYnVmZmVyID0ga21hbGxvYyhza2ItPmxlbiwgR0ZQX0FUT01JQyB8IEdGUF9ETUEpOworCQlwcml2X2luZm8tPmJvdW5jZWJ1ZmZlciA9IGttZW1kdXAoc2tiLT5kYXRhLCBza2ItPmxlbiwKKwkJCQkJCSAgR0ZQX0FUT01JQyB8IEdGUF9ETUEpOwogCQlpZiAoIXByaXZfaW5mby0+Ym91bmNlYnVmZmVyKSB7CiAJCQlyaW5nLT5jdXJyZW50X3Nsb3QgPSBvbGRfdG9wX3Nsb3Q7CiAJCQlyaW5nLT51c2VkX3Nsb3RzID0gb2xkX3VzZWRfc2xvdHM7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJZ290byBvdXRfdW5tYXBfaGRyOwogCQl9Ci0JCW1lbWNweShwcml2X2luZm8tPmJvdW5jZWJ1ZmZlciwgc2tiLT5kYXRhLCBza2ItPmxlbik7CiAKIAkJbWV0YS0+ZG1hYWRkciA9IG1hcF9kZXNjYnVmZmVyKHJpbmcsIHByaXZfaW5mby0+Ym91bmNlYnVmZmVyLCBza2ItPmxlbiwgMSk7CiAJCWlmIChiNDNfZG1hX21hcHBpbmdfZXJyb3IocmluZywgbWV0YS0+ZG1hYWRkciwgc2tiLT5sZW4sIDEpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmgKaW5kZXggZGM5MTk0NC4uYTAxYzIxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuaApAQCAtNjcsNyArNjcsNyBAQAogc3RydWN0IGI0M19kbWFkZXNjMzIgewogCV9fbGUzMiBjb250cm9sOwogCV9fbGUzMiBhZGRyZXNzOwotfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworfSBfX3BhY2tlZDsKICNkZWZpbmUgQjQzX0RNQTMyX0RDVExfQllURUNOVAkJMHgwMDAwMUZGRgogI2RlZmluZSBCNDNfRE1BMzJfRENUTF9BRERSRVhUX01BU0sJCTB4MDAwMzAwMDAKICNkZWZpbmUgQjQzX0RNQTMyX0RDVExfQUREUkVYVF9TSElGVAkxNgpAQCAtMTQwLDcgKzE0MCw3IEBACiAJX19sZTMyIGNvbnRyb2wxOwogCV9fbGUzMiBhZGRyZXNzX2xvdzsKIAlfX2xlMzIgYWRkcmVzc19oaWdoOwotfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworfSBfX3BhY2tlZDsKICNkZWZpbmUgQjQzX0RNQTY0X0RDVEwwX0RUQUJMRUVORAkJMHgxMDAwMDAwMAogI2RlZmluZSBCNDNfRE1BNjRfRENUTDBfSVJRCQkJMHgyMDAwMDAwMAogI2RlZmluZSBCNDNfRE1BNjRfRENUTDBfRlJBTUVFTkQJCTB4NDAwMDAwMDAKQEAgLTE1Myw4ICsxNTMsOCBAQAogCXVuaW9uIHsKIAkJc3RydWN0IGI0M19kbWFkZXNjMzIgZG1hMzI7CiAJCXN0cnVjdCBiNDNfZG1hZGVzYzY0IGRtYTY0OwotCX0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKLX0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKwl9IF9fcGFja2VkOworfSBfX3BhY2tlZDsKIAogLyogTWlzYyBETUEgY29uc3RhbnRzICovCiAjZGVmaW5lIEI0M19ETUFfUklOR01FTVNJWkUJCVBBR0VfU0laRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMKaW5kZXggNzk2NWI3MC4uMjA2MzFhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCkBAIC0xMDgsNyArMTA4LDcgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZCh2ZXJib3NlLCBiNDNfbW9kcGFyYW1fdmVyYm9zZSwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0ModmVyYm9zZSwgIkxvZyBtZXNzYWdlIHZlcmJvc2l0eTogMD1lcnJvciwgMT13YXJuLCAyPWluZm8oZGVmYXVsdCksIDM9ZGVidWciKTsKIAotaW50IGI0M19tb2RwYXJhbV9waW8gPSBCNDNfUElPX0RFRkFVTFQ7CitzdGF0aWMgaW50IGI0M19tb2RwYXJhbV9waW8gPSBCNDNfUElPX0RFRkFVTFQ7CiBtb2R1bGVfcGFyYW1fbmFtZWQocGlvLCBiNDNfbW9kcGFyYW1fcGlvLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhwaW8sICJVc2UgUElPIGFjY2Vzc2VzIGJ5IGRlZmF1bHQ6IDA9RE1BLCAxPVBJTyIpOwogCkBAIC0xODA0LDcgKzE4MDQsNyBAQAogCQkJICAgICAgIGRtYV9yZWFzb25bMl0sIGRtYV9yZWFzb25bM10sCiAJCQkgICAgICAgZG1hX3JlYXNvbls0XSwgZG1hX3JlYXNvbls1XSk7CiAJCQliNDNlcnIoZGV2LT53bCwgIlRoaXMgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgRE1BICIKLQkJCSAgICAgICAib24geW91ciBzeXN0ZW0uIFBsZWFzZSB1c2UgUElPIGluc3RlYWQuXG4iKTsKKwkJCSAgICAgICAib24geW91ciBzeXN0ZW0uIEl0IHdpbGwgbm93IGJlIHN3aXRjaGVkIHRvIFBJTy5cbiIpOwogCQkJLyogRmFsbCBiYWNrIHRvIFBJTyB0cmFuc2ZlcnMgaWYgd2UgZ2V0IGZhdGFsIERNQSBlcnJvcnMhICovCiAJCQlkZXYtPnVzZV9waW8gPSAxOwogCQkJYjQzX2NvbnRyb2xsZXJfcmVzdGFydChkZXYsICJETUEgZXJyb3IiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9wY21jaWEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9wY21jaWEuYwppbmRleCAwZTk5YjYzLi5kZmJjNDFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGNtY2lhLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BjbWNpYS5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bGludXgvc3NiL3NzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzY29kZS5oPgpAQCAtNjUsNyArNjQsNiBAQAogewogCXN0cnVjdCBzc2JfYnVzICpzc2I7CiAJd2luX3JlcV90IHdpbjsKLQltZW1yZXFfdCBtZW07CiAJaW50IGVyciA9IC1FTk9NRU07CiAJaW50IHJlcyA9IDA7CiAKQEAgLTc4LDEyICs3Niw3IEBACiAJZGV2LT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAJZGV2LT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAotCWRldi0+aW8uQmFzZVBvcnQyID0gMDsKLQlkZXYtPmlvLk51bVBvcnRzMiA9IDA7Ci0JZGV2LT5pby5BdHRyaWJ1dGVzMiA9IDA7Ci0KLQl3aW4uQXR0cmlidXRlcyA9IFdJTl9BRERSX1NQQUNFX01FTSB8IFdJTl9NRU1PUllfVFlQRV9DTSB8Ci0JCQkgV0lOX0VOQUJMRSB8IFdJTl9EQVRBX1dJRFRIXzE2IHwKKwl3aW4uQXR0cmlidXRlcyA9ICBXSU5fRU5BQkxFIHwgV0lOX0RBVEFfV0lEVEhfMTYgfAogCQkJIFdJTl9VU0VfV0FJVDsKIAl3aW4uQmFzZSA9IDA7CiAJd2luLlNpemUgPSBTU0JfQ09SRV9TSVpFOwpAQCAtOTIsOSArODUsNyBAQAogCWlmIChyZXMgIT0gMCkKIAkJZ290byBlcnJfa2ZyZWVfc3NiOwogCi0JbWVtLkNhcmRPZmZzZXQgPSAwOwotCW1lbS5QYWdlID0gMDsKLQlyZXMgPSBwY21jaWFfbWFwX21lbV9wYWdlKGRldiwgZGV2LT53aW4sICZtZW0pOworCXJlcyA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UoZGV2LCBkZXYtPndpbiwgMCk7CiAJaWYgKHJlcyAhPSAwKQogCQlnb3RvIGVycl9kaXNhYmxlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfZy5jCmluZGV4IDI5YmYzNGMuLjBkYzMzYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfZy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfZy5jCkBAIC05NzIsNyArOTcyLDcgQEAKIAkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEEyLCAweEZGRjAsIDB4MDAwQik7CiAKIAkJaWYgKHBoeS0+cmV2ID49IDMpIHsKLQkJCWI0M19waHlfbWFzayhkZXYsIDB4MDQ4QSwgKHUxNil+MHg4MDAwKTsKKwkJCWI0M19waHlfbWFzayhkZXYsIDB4MDQ4QSwgMHg3RkZGKTsKIAkJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDQxNSwgMHg4MDAwLCAweDM2RDgpOwogCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNDE2LCAweDgwMDAsIDB4MzZEOCk7CiAJCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0MTcsIDB4RkUwMCwgMHgwMTZEKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbHAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbHAuYwppbmRleCBjNmFmZTlkLi5mZDUwZWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2xwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9scC5jCkBAIC0xMTQ1LDcgKzExNDUsNyBAQAogCQlCNDNfV0FSTl9PTigxKTsKIAl9CiAJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01ELAotCQkJKHUxNil+QjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREUsIGN0bCk7CisJCQl+QjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREUgJiAweEZGRkYsIGN0bCk7CiB9CiAKIHN0YXRpYyB2b2lkIGxwcGh5X3NldF90eF9wb3dlcl9jb250cm9sKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKQEAgLTE1MjIsMTEgKzE1MjIsMTEgQEAKIAliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfVFhfUFdSX0NUTF9ERUxUQVBXUl9MSU1JVCwgMHhGRik7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0RFTFRBUFdSX0xJTUlULCAweEEpOwogCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRCwKLQkJCSh1MTYpfkI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRF9NT0RFLAorCQkJfkI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRF9NT0RFICYgMHhGRkZGLAogCQkJQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREVfT0ZGKTsKIAliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfVFhfUFdSX0NUTF9OTlVNLCAweEY4RkYpOwogCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRCwKLQkJCSh1MTYpfkI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRF9NT0RFLAorCQkJfkI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRF9NT0RFICYgMHhGRkZGLAogCQkJQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREVfU1cpOwogCiAJaWYgKGRldi0+cGh5LnJldiA8IDIpIHsKQEAgLTI2OTgsNyArMjY5OCw3IEBACiAJcmV0dXJuIEI0M19UWFBXUl9SRVNfRE9ORTsKIH0KIAotdm9pZCBiNDNfbHBwaHlfb3Bfc3dpdGNoX2FuYWxvZyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIGJvb2wgb24pCitzdGF0aWMgdm9pZCBiNDNfbHBwaHlfb3Bfc3dpdGNoX2FuYWxvZyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIGJvb2wgb24pCiB7CiAgICAgICAgaWYgKG9uKSB7CiAgICAgICAgICAgICAgICBiNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfQUZFX0NUTF9PVlIsIDB4ZmZmOCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbi5jCmluZGV4IDNkNmIzMzcuLjVhNzI1NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbi5jCkBAIC01MDksNyArNTA5LDggQEAKIAliNDNfcGh5X21hc2soZGV2LCBCNDNfTlBIWV9QQVBEX0VOMCwgfjB4MDAwMSk7CiAJYjQzX3BoeV9tYXNrKGRldiwgQjQzX05QSFlfUEFQRF9FTjEsIH4weDAwMDEpOwogCi0JYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfUkZTRVFDQSwgKHUxNil+QjQzX05QSFlfUkZTRVFDQV9SWERJUywKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9SRlNFUUNBLAorCQkJfkI0M19OUEhZX1JGU0VRQ0FfUlhESVMgJiAweEZGRkYsCiAJCQkoKDEgLSBjb3JlKSA8PCBCNDNfTlBIWV9SRlNFUUNBX1JYRElTX1NISUZUKSk7CiAJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfUkZTRVFDQSwgfkI0M19OUEhZX1JGU0VRQ0FfVFhFTiwKIAkJCSgoMSAtIGNvcmUpIDw8IEI0M19OUEhZX1JGU0VRQ0FfVFhFTl9TSElGVCkpOwpAQCAtNzYyLDcgKzc2Myw3IEBACiAJaWYgKHRtcCAmIDB4MSkKIAkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTlBIWV9TQU1QX0NNRCwgQjQzX05QSFlfU0FNUF9DTURfU1RPUCk7CiAJZWxzZSBpZiAodG1wICYgMHgyKQotCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTlBIWV9JUUxPQ0FMX0NNREdDVEwsICh1MTYpfjB4ODAwMCk7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX0lRTE9DQUxfQ01ER0NUTCwgMHg3RkZGKTsKIAogCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX1NBTVBfQ01ELCB+MHgwMDA0KTsKIApAQCAtMTAwOSw3ICsxMDEwLDcgQEAKIAkJCWI0M19ucGh5X3NldF9yZl9zZXF1ZW5jZShkZXYsIDUsCiAJCQkJCXJmc2VxX2V2ZW50cywgcmZzZXFfZGVsYXlzLCAzKTsKIAkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX09WRVJfREdBSU4xLAotCQkJCSh1MTYpfkI0M19OUEhZX09WRVJfREdBSU5fQ0NLREdFQ1YsCisJCQkJfkI0M19OUEhZX09WRVJfREdBSU5fQ0NLREdFQ1YgJiAweEZGRkYsCiAJCQkJMHg1QSA8PCBCNDNfTlBIWV9PVkVSX0RHQUlOX0NDS0RHRUNWX1NISUZUKTsKIAogCQkJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKQEAgLTExMTYsNyArMTExNyw3IEBACiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9QSEFTRVRSX0IyLCAweDIwKTsKIAogCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTlBIWV9QSUxfRFcxLAotCQkJCSh1MTYpfkI0M19OUEhZX1BJTF9EV182NFFBTSk7CisJCQkJfkI0M19OUEhZX1BJTF9EV182NFFBTSAmIDB4RkZGRik7CiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UWEZfMjBDT19TMkIxLCAweEI1KTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RYRl8yMENPX1MyQjIsIDB4QTQpOwogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVFhGXzIwQ09fUzJCMywgMHgwMCk7CkBAIC0yNDU1LDcgKzI0NTYsOCBAQAogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIsIHRtcCB8IDB4MDYwMCk7CiAKIAkJcmVnc1s0XSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0JCQ0ZHKTsKLQkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX05QSFlfQkJDRkcsICh1MTYpfkI0M19OUEhZX0JCQ0ZHX1JTVFJYKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX05QSFlfQkJDRkcsCisJCQkgICAgIH5CNDNfTlBIWV9CQkNGR19SU1RSWCAmIDB4RkZGRik7CiAKIAkJdG1wID0gYjQzX250YWJfcmVhZChkZXYsIEI0M19OVEFCMTYoOCwgMykpOwogCQlyZWdzWzVdID0gdG1wOwpAQCAtMjkzMCw3ICsyOTMyLDcgQEAKIAkJdG1wWzVdID0gYjQzX3BoeV9yZWFkKGRldiwgcmZjdGxbMV0pOwogCiAJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX1JGU0VRQ0EsCi0JCQkJKHUxNil+QjQzX05QSFlfUkZTRVFDQV9SWERJUywKKwkJCQl+QjQzX05QSFlfUkZTRVFDQV9SWERJUyAmIDB4RkZGRiwKIAkJCQkoKDEgLSBpKSA8PCBCNDNfTlBIWV9SRlNFUUNBX1JYRElTX1NISUZUKSk7CiAJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX1JGU0VRQ0EsIH5CNDNfTlBIWV9SRlNFUUNBX1RYRU4sCiAJCQkJKDEgLSBpKSk7CkBAIC0zMjkxLDcgKzMyOTMsNyBAQAogCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTlBIWV9CQU5EQ1RMLCB+QjQzX05QSFlfQkFORENUTF81R0haKTsKIAkJdG1wMzIgPSBiNDNfcmVhZDMyKGRldiwgQjQzX01NSU9fUFNNX1BIWV9IRFIpOwogCQliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX1BTTV9QSFlfSERSLCB0bXAzMiB8IDQpOwotCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0JfQkJDRkcsICh1MTYpfjB4QzAwMCk7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfQl9CQkNGRywgMHgzRkZGKTsKIAkJYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19QU01fUEhZX0hEUiwgdG1wMzIpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9zZGlvLmMKaW5kZXggNGU1NmI3Yi4uNDU5MzNjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3NkaW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvc2Rpby5jCkBAIC0xODIsNiArMTgyLDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCBiNDNfc2Rpb19pZHNbXSA9IHsKIAl7IFNESU9fREVWSUNFKDB4MDJkMCwgMHgwNDRiKSB9LCAvKiBOaW50ZW5kbyBXaWkgV0xBTiBkYXVnaHRlciBjYXJkICovCisJeyBTRElPX0RFVklDRSgweDAwOTIsIDB4MDAwNCkgfSwgLyogQy1ndXlzLCBJbmMuIEVXLUNHMTEwMkdDICovCiAJeyB9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3dhLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvd2EuYwppbmRleCA5N2M3OTE2Li45YTMzNWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvd2EuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvd2EuYwpAQCAtMzgyLDcgKzM4Miw3IEBACiAJCWI0M19vZmRtdGFiX3dyaXRlMTYoZGV2LCBCNDNfT0ZETVRBQl9BR0MxLCAzLCAyNSk7CiAJfQogCi0JYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9DQ0tTSElGVEJJVFNfV0EsICh1MTYpfjB4RkYwMCwgMHg1NzAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0NDS1NISUZUQklUU19XQSwgMHgwMEZGLCAweDU3MDApOwogCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDFBKSwgfjB4MDA3RiwgMHgwMDBGKTsKIAliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHgxQSksIH4weDNGODAsIDB4MkI4MCk7CiAJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9BTlRXUlNFVFQsIDB4RjBGRiwgMHgwMzAwKTsKQEAgLTQwMCw5ICs0MDAsOSBAQAogCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDg5KSwgfjB4MDBGRiwgMHgwMDIwKTsKIAliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHg4OSksIH4weDNGMDAsIDB4MDIwMCk7CiAJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4ODIpLCB+MHgwMEZGLCAweDAwMkUpOwotCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDk2KSwgKHUxNil+MHhGRjAwLCAweDFBMDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDk2KSwgMHgwMEZGLCAweDFBMDApOwogCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDgxKSwgfjB4MDBGRiwgMHgwMDI4KTsKLQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHg4MSksICh1MTYpfjB4RkYwMCwgMHgyQzAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHg4MSksIDB4MDBGRiwgMHgyQzAwKTsKIAlpZiAocGh5LT5yZXYgPT0gMSkgewogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9QRUFLX0NPVU5ULCAweDA5MkIpOwogCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHgxQiksIH4weDAwMUUsIDB4MDAwMik7CkBAIC00MTIsNyArNDEyLDcgQEAKIAkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9MUEZHQUlOQ1RMLCB+MHgwMDBGLCAweDAwMDQpOwogCQlpZiAocGh5LT5yZXYgPj0gNikgewogCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDIyKSwgMHgyODdBKTsKLQkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfTFBGR0FJTkNUTCwgKHUxNil+MHhGMDAwLCAweDMwMDApOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9MUEZHQUlOQ1RMLCAweDBGRkYsIDB4MzAwMCk7CiAJCX0KIAl9CiAJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9ESVZTUkNISURYLCAweDgwODAsIDB4Nzg3NCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3htaXQuaAppbmRleCBkMjNmZjlmLi5kNGNmOWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My94bWl0LmgKQEAgLTEwLDggKzEwLDggQEAKIAkJdW5pb24gewkJCQlcCiAJCQlfX2xlMzIgZGF0YTsJCVwKIAkJCV9fdTggcmF3W3NpemVdOwkJXAotCQl9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsJXAotCX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpCisJCX0gX19wYWNrZWQ7CVwKKwl9IF9fcGFja2VkCiAKIC8qIHN0cnVjdCBiNDNfcGxjcF9oZHI0ICovCiBfYjQzX2RlY2xhcmVfcGxjcF9oZHIoNCk7CkBAIC01Nyw3ICs1Nyw3IEBACiAJCQlfX3U4IHJ0c19mcmFtZVsxNl07CQkvKiBUaGUgUlRTIGZyYW1lIChpZiB1c2VkKSAqLwogCQkJUEFEX0JZVEVTKDIpOwogCQkJc3RydWN0IGI0M19wbGNwX2hkcjYgcGxjcDsJLyogTWFpbiBQTENQIGhlYWRlciAqLwotCQl9IG5ld19mb3JtYXQgX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKwkJfSBuZXdfZm9ybWF0IF9fcGFja2VkOwogCiAJCS8qIFRoZSBvbGQgcjM1MSBmb3JtYXQuICovCiAJCXN0cnVjdCB7CkBAIC02OCwxMCArNjgsMTAgQEAKIAkJCV9fdTggcnRzX2ZyYW1lWzE2XTsJCS8qIFRoZSBSVFMgZnJhbWUgKGlmIHVzZWQpICovCiAJCQlQQURfQllURVMoMik7CiAJCQlzdHJ1Y3QgYjQzX3BsY3BfaGRyNiBwbGNwOwkvKiBNYWluIFBMQ1AgaGVhZGVyICovCi0JCX0gb2xkX2Zvcm1hdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCQl9IG9sZF9mb3JtYXQgX19wYWNrZWQ7CiAKLQl9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7Ci19IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisJfSBfX3BhY2tlZDsKK30gX19wYWNrZWQ7CiAKIC8qIE1BQyBUWCBjb250cm9sICovCiAjZGVmaW5lIEI0M19UWEhfTUFDX1VTRUZCUgkJMHgxMDAwMDAwMCAvKiBVc2UgZmFsbGJhY2sgcmF0ZSBmb3IgdGhpcyBBTVBEVSAqLwpAQCAtMjE4LDIwICsyMTgsMjAgQEAKIAkJc3RydWN0IHsKIAkJCV9fdTgganNzaTsJLyogUEhZIFJYIFN0YXR1cyAxOiBKU1NJICovCiAJCQlfX3U4IHNpZ19xdWFsOwkvKiBQSFkgUlggU3RhdHVzIDE6IFNpZ25hbCBRdWFsaXR5ICovCi0JCX0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKwkJfSBfX3BhY2tlZDsKIAogCQkvKiBSU1NJIGZvciBOLVBIWXMgKi8KIAkJc3RydWN0IHsKIAkJCV9fczggcG93ZXIwOwkvKiBQSFkgUlggU3RhdHVzIDE6IFBvd2VyIDAgKi8KIAkJCV9fczggcG93ZXIxOwkvKiBQSFkgUlggU3RhdHVzIDE6IFBvd2VyIDEgKi8KLQkJfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOwotCX0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKwkJfSBfX3BhY2tlZDsKKwl9IF9fcGFja2VkOwogCV9fbGUxNiBwaHlfc3RhdHVzMjsJLyogUEhZIFJYIFN0YXR1cyAyICovCiAJX19sZTE2IHBoeV9zdGF0dXMzOwkvKiBQSFkgUlggU3RhdHVzIDMgKi8KIAlfX2xlMzIgbWFjX3N0YXR1czsJLyogTUFDIFJYIHN0YXR1cyAqLwogCV9fbGUxNiBtYWNfdGltZTsKIAlfX2xlMTYgY2hhbm5lbDsKLX0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKK30gX19wYWNrZWQ7CiAKIC8qIFBIWSBSWCBTdGF0dXMgMCAqLwogI2RlZmluZSBCNDNfUlhfUEhZU1QwX0dBSU5DVEwJCTB4NDAwMCAvKiBHYWluIENvbnRyb2wgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9iNDNsZWdhY3kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9iNDNsZWdhY3kuaAppbmRleCA4OWZlMmY5Li5jODFiMmY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvYjQzbGVnYWN5LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2I0M2xlZ2FjeS5oCkBAIC0zNzIsNyArMzcyLDcgQEAKIAkvKiBTaXplIG9mIHRoZSBkYXRhLiBGb3IgdWNvZGUgYW5kIFBDTSB0aGlzIGlzIGluIGJ5dGVzLgogCSAqIEZvciBJViB0aGlzIGlzIG51bWJlci1vZi1pdnMuICovCiAJX19iZTMyIHNpemU7Ci19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKK30gX19wYWNrZWQ7CiAKIC8qIEluaXRpYWwgVmFsdWUgZmlsZSBmb3JtYXQgKi8KICNkZWZpbmUgQjQzbGVnYWN5X0lWX09GRlNFVF9NQVNLCTB4N0ZGRgpAQCAtMzgyLDggKzM4Miw4IEBACiAJdW5pb24gewogCQlfX2JlMTYgZDE2OwogCQlfX2JlMzIgZDMyOwotCX0gZGF0YSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKwl9IGRhdGEgX19wYWNrZWQ7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEI0M2xlZ2FjeV9QSFlNT0RFKHBoeXR5cGUpCSgxIDw8IChwaHl0eXBlKSkKICNkZWZpbmUgQjQzbGVnYWN5X1BIWU1PREVfQgkJQjQzbGVnYWN5X1BIWU1PREUJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2RtYS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2RtYS5jCmluZGV4IGU5MTUyMGQuLmUwM2UwMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9kbWEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvZG1hLmMKQEAgLTM5NCwxMSArMzk0LDExIEBACiAJZG1hX2FkZHJfdCBkbWFhZGRyOwogCiAJaWYgKHR4KQotCQlkbWFhZGRyID0gc3NiX2RtYV9tYXBfc2luZ2xlKHJpbmctPmRldi0+ZGV2LAorCQlkbWFhZGRyID0gZG1hX21hcF9zaW5nbGUocmluZy0+ZGV2LT5kZXYtPmRtYV9kZXYsCiAJCQkJCSAgICAgYnVmLCBsZW4sCiAJCQkJCSAgICAgRE1BX1RPX0RFVklDRSk7CiAJZWxzZQotCQlkbWFhZGRyID0gc3NiX2RtYV9tYXBfc2luZ2xlKHJpbmctPmRldi0+ZGV2LAorCQlkbWFhZGRyID0gZG1hX21hcF9zaW5nbGUocmluZy0+ZGV2LT5kZXYtPmRtYV9kZXYsCiAJCQkJCSAgICAgYnVmLCBsZW4sCiAJCQkJCSAgICAgRE1BX0ZST01fREVWSUNFKTsKIApAQCAtNDEyLDExICs0MTIsMTEgQEAKIAkJICAgICAgaW50IHR4KQogewogCWlmICh0eCkKLQkJc3NiX2RtYV91bm1hcF9zaW5nbGUocmluZy0+ZGV2LT5kZXYsCisJCWRtYV91bm1hcF9zaW5nbGUocmluZy0+ZGV2LT5kZXYtPmRtYV9kZXYsCiAJCQkJICAgICBhZGRyLCBsZW4sCiAJCQkJICAgICBETUFfVE9fREVWSUNFKTsKIAllbHNlCi0JCXNzYl9kbWFfdW5tYXBfc2luZ2xlKHJpbmctPmRldi0+ZGV2LAorCQlkbWFfdW5tYXBfc2luZ2xlKHJpbmctPmRldi0+ZGV2LT5kbWFfZGV2LAogCQkJCSAgICAgYWRkciwgbGVuLAogCQkJCSAgICAgRE1BX0ZST01fREVWSUNFKTsKIH0KQEAgLTQyOCw4ICs0MjgsOCBAQAogewogCUI0M2xlZ2FjeV9XQVJOX09OKHJpbmctPnR4KTsKIAotCXNzYl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShyaW5nLT5kZXYtPmRldiwKLQkJCQkgICAgYWRkciwgbGVuLCBETUFfRlJPTV9ERVZJQ0UpOworCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHJpbmctPmRldi0+ZGV2LT5kbWFfZGV2LAorCQkJCWFkZHIsIGxlbiwgRE1BX0ZST01fREVWSUNFKTsKIH0KIAogc3RhdGljIGlubGluZQpAQCAtNDM5LDggKzQzOSw4IEBACiB7CiAJQjQzbGVnYWN5X1dBUk5fT04ocmluZy0+dHgpOwogCi0Jc3NiX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHJpbmctPmRldi0+ZGV2LAotCQkJCSAgICAgICBhZGRyLCBsZW4sIERNQV9GUk9NX0RFVklDRSk7CisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UocmluZy0+ZGV2LT5kZXYtPmRtYV9kZXYsCisJCQkJICAgYWRkciwgbGVuLCBETUFfRlJPTV9ERVZJQ0UpOwogfQogCiBzdGF0aWMgaW5saW5lCkBAIC00NjAsMTAgKzQ2MCwxMCBAQAogc3RhdGljIGludCBhbGxvY19yaW5nbWVtb3J5KHN0cnVjdCBiNDNsZWdhY3lfZG1hcmluZyAqcmluZykKIHsKIAkvKiBHRlAgZmxhZ3MgbXVzdCBtYXRjaCB0aGUgZmxhZ3MgaW4gZnJlZV9yaW5nbWVtb3J5KCkhICovCi0JcmluZy0+ZGVzY2Jhc2UgPSBzc2JfZG1hX2FsbG9jX2NvbnNpc3RlbnQocmluZy0+ZGV2LT5kZXYsCi0JCQkJCQkgIEI0M2xlZ2FjeV9ETUFfUklOR01FTVNJWkUsCi0JCQkJCQkgICYocmluZy0+ZG1hYmFzZSksCi0JCQkJCQkgIEdGUF9LRVJORUwpOworCXJpbmctPmRlc2NiYXNlID0gZG1hX2FsbG9jX2NvaGVyZW50KHJpbmctPmRldi0+ZGV2LT5kbWFfZGV2LAorCQkJCQkgICAgQjQzbGVnYWN5X0RNQV9SSU5HTUVNU0laRSwKKwkJCQkJICAgICYocmluZy0+ZG1hYmFzZSksCisJCQkJCSAgICBHRlBfS0VSTkVMKTsKIAlpZiAoIXJpbmctPmRlc2NiYXNlKSB7CiAJCWI0M2xlZ2FjeWVycihyaW5nLT5kZXYtPndsLCAiRE1BIHJpbmdtZW1vcnkgYWxsb2NhdGlvbiIKIAkJCSAgICAgIiBmYWlsZWRcbiIpOwpAQCAtNDc2LDggKzQ3Niw4IEBACiAKIHN0YXRpYyB2b2lkIGZyZWVfcmluZ21lbW9yeShzdHJ1Y3QgYjQzbGVnYWN5X2RtYXJpbmcgKnJpbmcpCiB7Ci0Jc3NiX2RtYV9mcmVlX2NvbnNpc3RlbnQocmluZy0+ZGV2LT5kZXYsIEI0M2xlZ2FjeV9ETUFfUklOR01FTVNJWkUsCi0JCQkJcmluZy0+ZGVzY2Jhc2UsIHJpbmctPmRtYWJhc2UsIEdGUF9LRVJORUwpOworCWRtYV9mcmVlX2NvaGVyZW50KHJpbmctPmRldi0+ZGV2LT5kbWFfZGV2LCBCNDNsZWdhY3lfRE1BX1JJTkdNRU1TSVpFLAorCQkJICByaW5nLT5kZXNjYmFzZSwgcmluZy0+ZG1hYmFzZSk7CiB9CiAKIC8qIFJlc2V0IHRoZSBSWCBETUEgY2hhbm5lbCAqLwpAQCAtNTg5LDcgKzU4OSw3IEBACiAJCQkJCSBzaXplX3QgYnVmZmVyc2l6ZSwKIAkJCQkJIGJvb2wgZG1hX3RvX2RldmljZSkKIHsKLQlpZiAodW5saWtlbHkoc3NiX2RtYV9tYXBwaW5nX2Vycm9yKHJpbmctPmRldi0+ZGV2LCBhZGRyKSkpCisJaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKHJpbmctPmRldi0+ZGV2LT5kbWFfZGV2LCBhZGRyKSkpCiAJCXJldHVybiAxOwogCiAJc3dpdGNoIChyaW5nLT50eXBlKSB7CkBAIC05MDYsNyArOTA2LDcgQEAKIAkJCWdvdG8gZXJyX2tmcmVlX21ldGE7CiAKIAkJLyogdGVzdCBmb3IgYWJpbGl0eSB0byBkbWEgdG8gdHhoZHJfY2FjaGUgKi8KLQkJZG1hX3Rlc3QgPSBzc2JfZG1hX21hcF9zaW5nbGUoZGV2LT5kZXYsIHJpbmctPnR4aGRyX2NhY2hlLAorCQlkbWFfdGVzdCA9IGRtYV9tYXBfc2luZ2xlKGRldi0+ZGV2LT5kbWFfZGV2LCByaW5nLT50eGhkcl9jYWNoZSwKIAkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBiNDNsZWdhY3lfdHhoZHJfZnczKSwKIAkJCQkJICAgICAgRE1BX1RPX0RFVklDRSk7CiAKQEAgLTkyMCw3ICs5MjAsNyBAQAogCQkJaWYgKCFyaW5nLT50eGhkcl9jYWNoZSkKIAkJCQlnb3RvIGVycl9rZnJlZV9tZXRhOwogCi0JCQlkbWFfdGVzdCA9IHNzYl9kbWFfbWFwX3NpbmdsZShkZXYtPmRldiwKKwkJCWRtYV90ZXN0ID0gZG1hX21hcF9zaW5nbGUoZGV2LT5kZXYtPmRtYV9kZXYsCiAJCQkJCXJpbmctPnR4aGRyX2NhY2hlLAogCQkJCQlzaXplb2Yoc3RydWN0IGI0M2xlZ2FjeV90eGhkcl9mdzMpLAogCQkJCQlETUFfVE9fREVWSUNFKTsKQEAgLTkzMCw5ICs5MzAsOSBAQAogCQkJCWdvdG8gZXJyX2tmcmVlX3R4aGRyX2NhY2hlOwogCQl9CiAKLQkJc3NiX2RtYV91bm1hcF9zaW5nbGUoZGV2LT5kZXYsIGRtYV90ZXN0LAotCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBiNDNsZWdhY3lfdHhoZHJfZnczKSwKLQkJCQkgICAgIERNQV9UT19ERVZJQ0UpOworCQlkbWFfdW5tYXBfc2luZ2xlKGRldi0+ZGV2LT5kbWFfZGV2LCBkbWFfdGVzdCwKKwkJCQkgc2l6ZW9mKHN0cnVjdCBiNDNsZWdhY3lfdHhoZHJfZnczKSwKKwkJCQkgRE1BX1RPX0RFVklDRSk7CiAJfQogCiAJcmluZy0+bnJfc2xvdHMgPSBucl9zbG90czsKQEAgLTEwNDAsOSArMTA0MCwxMiBAQAogCS8qIFRyeSB0byBzZXQgdGhlIERNQSBtYXNrLiBJZiBpdCBmYWlscywgdHJ5IGZhbGxpbmcgYmFjayB0byBhCiAJICogbG93ZXIgbWFzaywgYXMgd2UgY2FuIGFsd2F5cyBhbHNvIHN1cHBvcnQgYSBsb3dlciBvbmUuICovCiAJd2hpbGUgKDEpIHsKLQkJZXJyID0gc3NiX2RtYV9zZXRfbWFzayhkZXYtPmRldiwgbWFzayk7Ci0JCWlmICghZXJyKQotCQkJYnJlYWs7CisJCWVyciA9IGRtYV9zZXRfbWFzayhkZXYtPmRldi0+ZG1hX2RldiwgbWFzayk7CisJCWlmICghZXJyKSB7CisJCQllcnIgPSBkbWFfc2V0X2NvaGVyZW50X21hc2soZGV2LT5kZXYtPmRtYV9kZXYsIG1hc2spOworCQkJaWYgKCFlcnIpCisJCQkJYnJlYWs7CisJCX0KIAkJaWYgKG1hc2sgPT0gRE1BX0JJVF9NQVNLKDY0KSkgewogCQkJbWFzayA9IERNQV9CSVRfTUFTSygzMik7CiAJCQlmYWxsYmFjayA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvZG1hLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvZG1hLmgKaW5kZXggZjk2ODEwNC4uZjg5YzM0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2RtYS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9kbWEuaApAQCAtNzIsNyArNzIsNyBAQAogc3RydWN0IGI0M2xlZ2FjeV9kbWFkZXNjMzIgewogCV9fbGUzMiBjb250cm9sOwogCV9fbGUzMiBhZGRyZXNzOwotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Cit9IF9fcGFja2VkOwogI2RlZmluZSBCNDNsZWdhY3lfRE1BMzJfRENUTF9CWVRFQ05UCQkweDAwMDAxRkZGCiAjZGVmaW5lIEI0M2xlZ2FjeV9ETUEzMl9EQ1RMX0FERFJFWFRfTUFTSwkweDAwMDMwMDAwCiAjZGVmaW5lIEI0M2xlZ2FjeV9ETUEzMl9EQ1RMX0FERFJFWFRfU0hJRlQJMTYKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCV9fbGUzMiBjb250cm9sMTsKIAlfX2xlMzIgYWRkcmVzc19sb3c7CiAJX19sZTMyIGFkZHJlc3NfaGlnaDsKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworfSBfX3BhY2tlZDsKICNkZWZpbmUgQjQzbGVnYWN5X0RNQTY0X0RDVEwwX0RUQUJMRUVORAkJMHgxMDAwMDAwMAogI2RlZmluZSBCNDNsZWdhY3lfRE1BNjRfRENUTDBfSVJRCQkweDIwMDAwMDAwCiAjZGVmaW5lIEI0M2xlZ2FjeV9ETUE2NF9EQ1RMMF9GUkFNRUVORAkJMHg0MDAwMDAwMApAQCAtMTYyLDggKzE2Miw4IEBACiAJdW5pb24gewogCQlzdHJ1Y3QgYjQzbGVnYWN5X2RtYWRlc2MzMiBkbWEzMjsKIAkJc3RydWN0IGI0M2xlZ2FjeV9kbWFkZXNjNjQgZG1hNjQ7Ci0JfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKwl9IF9fcGFja2VkOworfSBfX3BhY2tlZDsKIAogCiAvKiBNaXNjIERNQSBjb25zdGFudHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS94bWl0LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kveG1pdC5oCmluZGV4IDkxNjMzMDguLjI4OWRiMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS94bWl0LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3htaXQuaApAQCAtOSw4ICs5LDggQEAKIAkJdW5pb24gewkJCQlcCiAJCQlfX2xlMzIgZGF0YTsJCVwKIAkJCV9fdTggcmF3W3NpemVdOwkJXAotCQl9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsJXAotCX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpCisJCX0gX19wYWNrZWQ7CVwKKwl9IF9fcGFja2VkCiAKIC8qIHN0cnVjdCBiNDNsZWdhY3lfcGxjcF9oZHI0ICovCiBfYjQzbGVnYWN5X2RlY2xhcmVfcGxjcF9oZHIoNCk7CkBAIC0zOSw3ICszOSw3IEBACiAJc3RydWN0IGI0M2xlZ2FjeV9wbGNwX2hkcjYgcnRzX3BsY3A7CS8qIFJUUyBQTENQICovCiAJX191OCBydHNfZnJhbWVbMThdOwkJCS8qIFRoZSBSVFMgZnJhbWUgKGlmIHVzZWQpICovCiAJc3RydWN0IGI0M2xlZ2FjeV9wbGNwX2hkcjYgcGxjcDsKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworfSBfX3BhY2tlZDsKIAogLyogTUFDIFRYIGNvbnRyb2wgKi8KICNkZWZpbmUgQjQzbGVnYWN5X1RYNF9NQUNfS0VZSURYCTB4MEZGMDAwMDAgLyogU2VjdXJpdHkga2V5IGluZGV4ICovCkBAIC0xMjMsNyArMTIzLDcgQEAKIAlfX2xlMTYgc2VxOwogCXU4IHBoeV9zdGF0OwogCVBBRF9CWVRFUygxKTsKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworfSBfX3BhY2tlZDsKIAogCiAvKiBSZWNlaXZlIGhlYWRlciBmb3IgdjMgZmlybXdhcmUuICovCkBAIC0xMzgsNyArMTM4LDcgQEAKIAlfX2xlMTYgbWFjX3N0YXR1czsJLyogTUFDIFJYIHN0YXR1cyAqLwogCV9fbGUxNiBtYWNfdGltZTsKIAlfX2xlMTYgY2hhbm5lbDsKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworfSBfX3BhY2tlZDsKIAogCiAvKiBQSFkgUlggU3RhdHVzIDAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTEuaAppbmRleCA3ZjlkOGQ5Li5lZDk4Y2U3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMS5oCkBAIC0xOSwzNSArMTksMzUgQEAKIAkJCV9fbGUxNiBzdGF0dXNfY29kZTsKIAkJCS8qIHBvc3NpYmx5IGZvbGxvd2VkIGJ5IENoYWxsZW5nZSB0ZXh0ICovCiAJCQl1OCB2YXJpYWJsZVswXTsKLQkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYXV0aDsKKwkJfSBfX3BhY2tlZCBhdXRoOwogCQlzdHJ1Y3QgewogCQkJX19sZTE2IHJlYXNvbl9jb2RlOwotCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBkZWF1dGg7CisJCX0gX19wYWNrZWQgZGVhdXRoOwogCQlzdHJ1Y3QgewogCQkJX19sZTE2IGNhcGFiX2luZm87CiAJCQlfX2xlMTYgbGlzdGVuX2ludGVydmFsOwogCQkJLyogZm9sbG93ZWQgYnkgU1NJRCBhbmQgU3VwcG9ydGVkIHJhdGVzICovCiAJCQl1OCB2YXJpYWJsZVswXTsKLQkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYXNzb2NfcmVxOworCQl9IF9fcGFja2VkIGFzc29jX3JlcTsKIAkJc3RydWN0IHsKIAkJCV9fbGUxNiBjYXBhYl9pbmZvOwogCQkJX19sZTE2IHN0YXR1c19jb2RlOwogCQkJX19sZTE2IGFpZDsKIAkJCS8qIGZvbGxvd2VkIGJ5IFN1cHBvcnRlZCByYXRlcyAqLwogCQkJdTggdmFyaWFibGVbMF07Ci0JCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGFzc29jX3Jlc3AsIHJlYXNzb2NfcmVzcDsKKwkJfSBfX3BhY2tlZCBhc3NvY19yZXNwLCByZWFzc29jX3Jlc3A7CiAJCXN0cnVjdCB7CiAJCQlfX2xlMTYgY2FwYWJfaW5mbzsKIAkJCV9fbGUxNiBsaXN0ZW5faW50ZXJ2YWw7CiAJCQl1OCBjdXJyZW50X2FwWzZdOwogCQkJLyogZm9sbG93ZWQgYnkgU1NJRCBhbmQgU3VwcG9ydGVkIHJhdGVzICovCiAJCQl1OCB2YXJpYWJsZVswXTsKLQkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcmVhc3NvY19yZXE7CisJCX0gX19wYWNrZWQgcmVhc3NvY19yZXE7CiAJCXN0cnVjdCB7CiAJCQlfX2xlMTYgcmVhc29uX2NvZGU7Ci0JCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGRpc2Fzc29jOworCQl9IF9fcGFja2VkIGRpc2Fzc29jOwogCQlzdHJ1Y3QgewotCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwcm9iZV9yZXE7CisJCX0gX19wYWNrZWQgcHJvYmVfcmVxOwogCQlzdHJ1Y3QgewogCQkJdTggdGltZXN0YW1wWzhdOwogCQkJX19sZTE2IGJlYWNvbl9pbnQ7CkBAIC01NSw5ICs1NSw5IEBACiAJCQkvKiBmb2xsb3dlZCBieSBzb21lIG9mIFNTSUQsIFN1cHBvcnRlZCByYXRlcywKIAkJCSAqIEZIIFBhcmFtcywgRFMgUGFyYW1zLCBDRiBQYXJhbXMsIElCU1MgUGFyYW1zLCBUSU0gKi8KIAkJCXU4IHZhcmlhYmxlWzBdOwotCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBiZWFjb24sIHByb2JlX3Jlc3A7CisJCX0gX19wYWNrZWQgYmVhY29uLCBwcm9iZV9yZXNwOwogCX0gdTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogCiAjZGVmaW5lIElFRUU4MDIxMV9NR01UX0hEUl9MRU4gMjQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuYwppbmRleCAyMzFkYmQ3Li5kYmI5ODY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5jCkBAIC02ODgsNyArNjg4LDcgQEAKIAlzdHJ1Y3QgYXBfZGF0YSAqYXAgPSBkYXRhOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhcC0+bG9jYWwtPmRldjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCXUxNiBmYywgc3RhdHVzOworCXUxNiBzdGF0dXM7CiAJX19sZTE2ICpwb3M7CiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBOVUxMOwogCWNoYXIgKnR4dCA9IE5VTEw7CkBAIC02OTksNyArNjk5LDYgQEAKIAl9CiAKIAloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKIAlpZiAoKCFpZWVlODAyMTFfaXNfYXNzb2NfcmVzcChoZHItPmZyYW1lX2NvbnRyb2wpICYmCiAJICAgICAhaWVlZTgwMjExX2lzX3JlYXNzb2NfcmVzcChoZHItPmZyYW1lX2NvbnRyb2wpKSB8fAogCSAgICBza2ItPmxlbiA8IElFRUU4MDIxMV9NR01UX0hEUl9MRU4gKyA0KSB7CkBAIC0xMjI1LDcgKzEyMjQsNyBAQAogCiAKIC8qIEdlbmVyYXRlIGNoYWxsZW5nZSBkYXRhIGZvciBzaGFyZWQga2V5IGF1dGhlbnRpY2F0aW9uLiBJRUVFIDgwMi4xMSBzcGVjaWZpZXMKLSAqIHRoYXQgV0VQIGFsZ29yaXRobSBpcyB1c2VkIGZvciBnZW5lcmF0aW5nIGNoYWxsYW5nZS4gVGhpcyBzaG91bGQgYmUgdW5pcXVlLAorICogdGhhdCBXRVAgYWxnb3JpdGhtIGlzIHVzZWQgZm9yIGdlbmVyYXRpbmcgY2hhbGxlbmdlLiBUaGlzIHNob3VsZCBiZSB1bmlxdWUsCiAgKiBidXQgb3RoZXJ3aXNlIHRoZXJlIGlzIG5vdCByZWFsbHkgbmVlZCBmb3IgcmFuZG9tbmVzcyBldGMuIEluaXRpYWxpemUgV0VQCiAgKiB3aXRoIHBzZXVkbyByYW5kb20ga2V5IGFuZCB0aGVuIHVzZSBpbmNyZWFzaW5nIElWIHRvIGdldCB1bmlxdWUgY2hhbGxlbmdlCiAgKiBzdHJlYW1zLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jb21tb24uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY29tbW9uLmgKaW5kZXggOTBiNjRiMDkuLjQyMzAxMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jb21tb24uaApAQCAtMTc5LDcgKzE3OSw3IEBACiAJX19sZTE2IHZhcmlhbnQ7CiAJX19sZTE2IG1ham9yOwogCV9fbGUxNiBtaW5vcjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBIRkEzODRYX0NPTVBfSURfUFJJIDB4MTUKICNkZWZpbmUgSEZBMzg0WF9DT01QX0lEX1NUQSAweDFmCkBAIC0xOTIsMTQgKzE5MiwxNCBAQAogCV9fbGUxNiB2YXJpYW50OwogCV9fbGUxNiBib3R0b207CiAJX19sZTE2IHRvcDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogCiBzdHJ1Y3QgaGZhMzg0eF9idWlsZF9pZAogewogCV9fbGUxNiBwcmlfc2VxOwogCV9fbGUxNiBzZWNfc2VxOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBGRDAxIC0gRG93bmxvYWQgQnVmZmVyICovCiBzdHJ1Y3QgaGZhMzg0eF9yaWRfZG93bmxvYWRfYnVmZmVyCkBAIC0yMDcsMTQgKzIwNywxNCBAQAogCV9fbGUxNiBwYWdlOwogCV9fbGUxNiBvZmZzZXQ7CiAJX19sZTE2IGxlbmd0aDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogQlNTIGNvbm5lY3Rpb24gcXVhbGl0eSAoUklEIEZENDMgcmFuZ2UsIFJJRCBGRDUxIGRCbS1ub3JtYWxpemVkKSAqLwogc3RydWN0IGhmYTM4NHhfY29tbXNfcXVhbGl0eSB7CiAJX19sZTE2IGNvbW1fcXVhbDsgLyogMCAuLiA5MiAqLwogCV9fbGUxNiBzaWduYWxfbGV2ZWw7IC8qIDI3IC4uIDE1NCAqLwogCV9fbGUxNiBub2lzZV9sZXZlbDsgLyogMjcgLi4gMTU0ICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIAogLyogbmV0ZGV2aWNlIHByaXZhdGUgaW9jdGxzICh1c2VkLCBlLmcuLCB3aXRoIGl3cHJpdiBmcm9tIHVzZXIgc3BhY2UpICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2NzLmMKaW5kZXggMjliMzFhNi4uYmE1NGQxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY3MuYwpAQCAtMTIsNyArMTIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CkBAIC0yMyw3ICsyMiw3IEBACiAjaW5jbHVkZSAiaG9zdGFwX3dsYW4uaCIKIAogCi1zdGF0aWMgZGV2X2luZm9fdCBkZXZfaW5mbyA9ICJob3N0YXBfY3MiOworc3RhdGljIGNoYXIgKmRldl9pbmZvID0gImhvc3RhcF9jcyI7CiAKIE1PRFVMRV9BVVRIT1IoIkpvdW5pIE1hbGluZW4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU3VwcG9ydCBmb3IgSW50ZXJzaWwgUHJpc20yLWJhc2VkIDgwMi4xMSB3aXJlbGVzcyBMQU4gIgpAQCAtMjI1LDI3ICsyMjQsMTggQEAKIHN0YXRpYyB2b2lkIHNhbmRpc2tfc2V0X2lvYmFzZShsb2NhbF9pbmZvX3QgKmxvY2FsKQogewogCWludCByZXM7Ci0JY29uZl9yZWdfdCByZWc7CiAJc3RydWN0IGhvc3RhcF9jc19wcml2ICpod19wcml2ID0gbG9jYWwtPmh3X3ByaXY7CiAKLQlyZWcuRnVuY3Rpb24gPSAwOwotCXJlZy5BY3Rpb24gPSBDU19XUklURTsKLQlyZWcuT2Zmc2V0ID0gMHgxMDsgLyogMHgzZjAgSU8gYmFzZSAxICovCi0JcmVnLlZhbHVlID0gaHdfcHJpdi0+bGluay0+aW8uQmFzZVBvcnQxICYgMHgwMGZmOwotCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLAotCQkJCQkJICAgJnJlZyk7CisJcmVzID0gcGNtY2lhX3dyaXRlX2NvbmZpZ19ieXRlKGh3X3ByaXYtPmxpbmssIDB4MTAsCisJCQkJaHdfcHJpdi0+bGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ICYgMHgwMGZmKTsKIAlpZiAocmVzICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlByaXNtMyBTYW5EaXNrIC0gZmFpbGVkIHRvIHNldCBJL08gYmFzZSAwIC0iCiAJCSAgICAgICAiIHJlcz0lZFxuIiwgcmVzKTsKIAl9CiAJdWRlbGF5KDEwKTsKIAotCXJlZy5GdW5jdGlvbiA9IDA7Ci0JcmVnLkFjdGlvbiA9IENTX1dSSVRFOwotCXJlZy5PZmZzZXQgPSAweDEyOyAvKiAweDNmMiBJTyBiYXNlIDIgKi8KLQlyZWcuVmFsdWUgPSAoaHdfcHJpdi0+bGluay0+aW8uQmFzZVBvcnQxICYgMHhmZjAwKSA+PiA4OwotCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLAotCQkJCQkJICAgJnJlZyk7CisJcmVzID0gcGNtY2lhX3dyaXRlX2NvbmZpZ19ieXRlKGh3X3ByaXYtPmxpbmssIDB4MTIsCisJCQkJKGh3X3ByaXYtPmxpbmstPnJlc291cmNlWzBdLT5zdGFydCA+PiA4KSAmIDB4MDBmZik7CiAJaWYgKHJlcyAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJQcmlzbTMgU2FuRGlzayAtIGZhaWxlZCB0byBzZXQgSS9PIGJhc2UgMSAtIgogCQkgICAgICAgIiByZXM9JWRcbiIsIHJlcyk7CkBAIC0yNzEsMTIgKzI2MSwxMSBAQAogc3RhdGljIGludCBzYW5kaXNrX2VuYWJsZV93aXJlbGVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWludCByZXMsIHJldCA9IDA7Ci0JY29uZl9yZWdfdCByZWc7CiAJc3RydWN0IGhvc3RhcF9pbnRlcmZhY2UgKmlmYWNlID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlsb2NhbF9pbmZvX3QgKmxvY2FsID0gaWZhY2UtPmxvY2FsOwogCXN0cnVjdCBob3N0YXBfY3NfcHJpdiAqaHdfcHJpdiA9IGxvY2FsLT5od19wcml2OwogCi0JaWYgKGh3X3ByaXYtPmxpbmstPmlvLk51bVBvcnRzMSA8IDB4NDIpIHsKKwlpZiAocmVzb3VyY2Vfc2l6ZShod19wcml2LT5saW5rLT5yZXNvdXJjZVswXSkgPCAweDQyKSB7CiAJCS8qIE5vdCBlbm91Z2ggcG9ydHMgdG8gYmUgU2FuRGlzayBtdWx0aS1mdW5jdGlvbiBjYXJkICovCiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gZG9uZTsKQEAgLTI5OCwxMiArMjg3LDggQEAKIAkgICAgICAgIiAtIHVzaW5nIHZlbmRvci1zcGVjaWZpYyBpbml0aWFsaXphdGlvblxuIiwgZGV2LT5uYW1lKTsKIAlod19wcml2LT5zYW5kaXNrX2Nvbm5lY3RwbHVzID0gMTsKIAotCXJlZy5GdW5jdGlvbiA9IDA7Ci0JcmVnLkFjdGlvbiA9IENTX1dSSVRFOwotCXJlZy5PZmZzZXQgPSBDSVNSRUdfQ09SOwotCXJlZy5WYWx1ZSA9IENPUl9TT0ZUX1JFU0VUOwotCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLAotCQkJCQkJICAgJnJlZyk7CisJcmVzID0gcGNtY2lhX3dyaXRlX2NvbmZpZ19ieXRlKGh3X3ByaXYtPmxpbmssIENJU1JFR19DT1IsCisJCQkJQ09SX1NPRlRfUkVTRVQpOwogCWlmIChyZXMgIT0gMCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNhbkRpc2sgLSBDT1Igc3Jlc2V0IGZhaWxlZCAoJWQpXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCByZXMpOwpAQCAtMzExLDE2ICsyOTYsMTMgQEAKIAl9CiAJbWRlbGF5KDUpOwogCi0JcmVnLkZ1bmN0aW9uID0gMDsKLQlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7Ci0JcmVnLk9mZnNldCA9IENJU1JFR19DT1I7CiAJLyoKIAkgKiBEbyBub3QgZW5hYmxlIGludGVycnVwdHMgaGVyZSB0byBhdm9pZCBzb21lIGJvZ3VzIGV2ZW50cy4gSW50ZXJydXB0cwogCSAqIHdpbGwgYmUgZW5hYmxlZCBkdXJpbmcgdGhlIGZpcnN0IGNvcl9zcmVzZXQgY2FsbC4KIAkgKi8KLQlyZWcuVmFsdWUgPSBDT1JfTEVWRUxfUkVRIHwgMHg4IHwgQ09SX0FERFJfREVDT0RFIHwgQ09SX0ZVTkNfRU5BOwotCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLAotCQkJCQkJICAgJnJlZyk7CisJcmVzID0gcGNtY2lhX3dyaXRlX2NvbmZpZ19ieXRlKGh3X3ByaXYtPmxpbmssIENJU1JFR19DT1IsCisJCQkJKENPUl9MRVZFTF9SRVEgfCAweDggfCBDT1JfQUREUl9ERUNPREUgfAorCQkJCQlDT1JfRlVOQ19FTkEpKTsKIAlpZiAocmVzICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTYW5EaXNrIC0gQ09SIHNyZXNldCBmYWlsZWQgKCVkKVxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgcmVzKTsKQEAgLTM0MywzMCArMzI1LDIzIEBACiBzdGF0aWMgdm9pZCBwcmlzbTJfcGNjYXJkX2Nvcl9zcmVzZXQobG9jYWxfaW5mb190ICpsb2NhbCkKIHsKIAlpbnQgcmVzOwotCWNvbmZfcmVnX3QgcmVnOworCXU4IHZhbDsKIAlzdHJ1Y3QgaG9zdGFwX2NzX3ByaXYgKmh3X3ByaXYgPSBsb2NhbC0+aHdfcHJpdjsKIAogCWlmICghcHJpc20yX3BjY2FyZF9jYXJkX3ByZXNlbnQobG9jYWwpKQogCSAgICAgICByZXR1cm47CiAKLQlyZWcuRnVuY3Rpb24gPSAwOwotCXJlZy5BY3Rpb24gPSBDU19SRUFEOwotCXJlZy5PZmZzZXQgPSBDSVNSRUdfQ09SOwotCXJlZy5WYWx1ZSA9IDA7Ci0JcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmssCi0JCQkJCQkgICAmcmVnKTsKKwlyZXMgPSBwY21jaWFfcmVhZF9jb25maWdfYnl0ZShod19wcml2LT5saW5rLCBDSVNSRUdfQ09SLCAmdmFsKTsKIAlpZiAocmVzICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInByaXNtMl9wY2NhcmRfY29yX3NyZXNldCBmYWlsZWQgMSAoJWQpXG4iLAogCQkgICAgICAgcmVzKTsKIAkJcmV0dXJuOwogCX0KIAlwcmludGsoS0VSTl9ERUJVRyAicHJpc20yX3BjY2FyZF9jb3Jfc3Jlc2V0OiBvcmlnaW5hbCBDT1IgJTAyeFxuIiwKLQkgICAgICAgcmVnLlZhbHVlKTsKKwkJdmFsKTsKIAotCXJlZy5BY3Rpb24gPSBDU19XUklURTsKLQlyZWcuVmFsdWUgfD0gQ09SX1NPRlRfUkVTRVQ7Ci0JcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmssCi0JCQkJCQkgICAmcmVnKTsKKwl2YWwgfD0gQ09SX1NPRlRfUkVTRVQ7CisJcmVzID0gcGNtY2lhX3dyaXRlX2NvbmZpZ19ieXRlKGh3X3ByaXYtPmxpbmssIENJU1JFR19DT1IsIHZhbCk7CiAJaWYgKHJlcyAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJwcmlzbTJfcGNjYXJkX2Nvcl9zcmVzZXQgZmFpbGVkIDIgKCVkKVxuIiwKIAkJICAgICAgIHJlcyk7CkBAIC0zNzUsMTEgKzM1MCwxMCBAQAogCiAJbWRlbGF5KGh3X3ByaXYtPnNhbmRpc2tfY29ubmVjdHBsdXMgPyA1IDogMik7CiAKLQlyZWcuVmFsdWUgJj0gfkNPUl9TT0ZUX1JFU0VUOworCXZhbCAmPSB+Q09SX1NPRlRfUkVTRVQ7CiAJaWYgKGh3X3ByaXYtPnNhbmRpc2tfY29ubmVjdHBsdXMpCi0JCXJlZy5WYWx1ZSB8PSBDT1JfSVJFUV9FTkE7Ci0JcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmssCi0JCQkJCQkgICAmcmVnKTsKKwkJdmFsIHw9IENPUl9JUkVRX0VOQTsKKwlyZXMgPSBwY21jaWFfd3JpdGVfY29uZmlnX2J5dGUoaHdfcHJpdi0+bGluaywgQ0lTUkVHX0NPUiwgdmFsKTsKIAlpZiAocmVzICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInByaXNtMl9wY2NhcmRfY29yX3NyZXNldCBmYWlsZWQgMyAoJWQpXG4iLAogCQkgICAgICAgcmVzKTsKQEAgLTM5Niw4ICszNzAsNyBAQAogc3RhdGljIHZvaWQgcHJpc20yX3BjY2FyZF9nZW5lc2lzX3Jlc2V0KGxvY2FsX2luZm9fdCAqbG9jYWwsIGludCBoY3IpCiB7CiAJaW50IHJlczsKLQljb25mX3JlZ190IHJlZzsKLQlpbnQgb2xkX2NvcjsKKwl1OCBvbGRfY29yOwogCXN0cnVjdCBob3N0YXBfY3NfcHJpdiAqaHdfcHJpdiA9IGxvY2FsLT5od19wcml2OwogCiAJaWYgKCFwcmlzbTJfcGNjYXJkX2NhcmRfcHJlc2VudChsb2NhbCkpCkBAIC00MDgsMjUgKzM4MSwxNyBAQAogCQlyZXR1cm47CiAJfQogCi0JcmVnLkZ1bmN0aW9uID0gMDsKLQlyZWcuQWN0aW9uID0gQ1NfUkVBRDsKLQlyZWcuT2Zmc2V0ID0gQ0lTUkVHX0NPUjsKLQlyZWcuVmFsdWUgPSAwOwotCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLAotCQkJCQkJICAgJnJlZyk7CisJcmVzID0gcGNtY2lhX3JlYWRfY29uZmlnX2J5dGUoaHdfcHJpdi0+bGluaywgQ0lTUkVHX0NPUiwgJm9sZF9jb3IpOwogCWlmIChyZXMgIT0gMCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAicHJpc20yX3BjY2FyZF9nZW5lc2lzX3NyZXNldCBmYWlsZWQgMSAiCiAJCSAgICAgICAiKCVkKVxuIiwgcmVzKTsKIAkJcmV0dXJuOwogCX0KIAlwcmludGsoS0VSTl9ERUJVRyAicHJpc20yX3BjY2FyZF9nZW5lc2lzX3NyZXNldDogb3JpZ2luYWwgQ09SICUwMnhcbiIsCi0JICAgICAgIHJlZy5WYWx1ZSk7Ci0Jb2xkX2NvciA9IHJlZy5WYWx1ZTsKKwkJb2xkX2Nvcik7CiAKLQlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7Ci0JcmVnLlZhbHVlIHw9IENPUl9TT0ZUX1JFU0VUOwotCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLAotCQkJCQkJICAgJnJlZyk7CisJcmVzID0gcGNtY2lhX3dyaXRlX2NvbmZpZ19ieXRlKGh3X3ByaXYtPmxpbmssIENJU1JFR19DT1IsCisJCQkJb2xkX2NvciB8IENPUl9TT0ZUX1JFU0VUKTsKIAlpZiAocmVzICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInByaXNtMl9wY2NhcmRfZ2VuZXNpc19zcmVzZXQgZmFpbGVkIDIgIgogCQkgICAgICAgIiglZClcbiIsIHJlcyk7CkBAIC00MzYsMTEgKzQwMSw3IEBACiAJbWRlbGF5KDEwKTsKIAogCS8qIFNldHVwIEdlbmVzaXMgbW9kZSAqLwotCXJlZy5BY3Rpb24gPSBDU19XUklURTsKLQlyZWcuVmFsdWUgPSBoY3I7Ci0JcmVnLk9mZnNldCA9IENJU1JFR19DQ1NSOwotCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLAotCQkJCQkJICAgJnJlZyk7CisJcmVzID0gcGNtY2lhX3dyaXRlX2NvbmZpZ19ieXRlKGh3X3ByaXYtPmxpbmssIENJU1JFR19DQ1NSLCBoY3IpOwogCWlmIChyZXMgIT0gMCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAicHJpc20yX3BjY2FyZF9nZW5lc2lzX3NyZXNldCBmYWlsZWQgMyAiCiAJCSAgICAgICAiKCVkKVxuIiwgcmVzKTsKQEAgLTQ0OCwxMSArNDA5LDggQEAKIAl9CiAJbWRlbGF5KDEwKTsKIAotCXJlZy5BY3Rpb24gPSBDU19XUklURTsKLQlyZWcuT2Zmc2V0ID0gQ0lTUkVHX0NPUjsKLQlyZWcuVmFsdWUgPSBvbGRfY29yICYgfkNPUl9TT0ZUX1JFU0VUOwotCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLAotCQkJCQkJICAgJnJlZyk7CisJcmVzID0gcGNtY2lhX3dyaXRlX2NvbmZpZ19ieXRlKGh3X3ByaXYtPmxpbmssIENJU1JFR19DT1IsCisJCQkJb2xkX2NvciAmIH5DT1JfU09GVF9SRVNFVCk7CiAJaWYgKHJlcyAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJwcmlzbTJfcGNjYXJkX2dlbmVzaXNfc3Jlc2V0IGZhaWxlZCA0ICIKIAkJICAgICAgICIoJWQpXG4iLCByZXMpOwpAQCAtNTYxLDMwICs1MTksMjQgQEAKIAlQREVCVUcoREVCVUdfRVhUUkEsICJJTyB3aW5kb3cgc2V0dGluZ3M6IGNmZy0+aW8ubndpbj0lZCAiCiAJICAgICAgICJkZmx0LT5pby5ud2luPSVkXG4iLAogCSAgICAgICBjZmctPmlvLm53aW4sIGRmbHQtPmlvLm53aW4pOwotCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwlwX2Rldi0+cmVzb3VyY2VbMF0tPmVuZCA9IHBfZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gMDsKIAlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKIAkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKLQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JCVBERUJVRyhERUJVR19FWFRSQSwgImlvLT5mbGFncyA9IDB4JTA0WCwgIgotCQkgICAgICAgImlvLmJhc2U9MHglMDR4LCBsZW49JWRcbiIsIGlvLT5mbGFncywKLQkJICAgICAgIGlvLT53aW5bMF0uYmFzZSwgaW8tPndpblswXS5sZW4pOwotCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCi0JCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7Ci0JCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCi0JCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYKLQkJCUNJU1RQTF9JT19MSU5FU19NQVNLOwotCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOwotCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgJj0gfklPX0RBVEFfUEFUSF9XSURUSDsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyB8PQorCQkJCQlwY21jaWFfaW9fY2ZnX2RhdGFfd2lkdGgoaW8tPmZsYWdzKTsKKwkJcF9kZXYtPmlvX2xpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBpby0+d2luWzBdLmJhc2U7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gaW8tPndpblswXS5sZW47CiAJCWlmIChpby0+bndpbiA+IDEpIHsKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMiA9IHBfZGV2LT5pby5BdHRyaWJ1dGVzMTsKLQkJCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7Ci0JCQlwX2Rldi0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPmZsYWdzID0gcF9kZXYtPnJlc291cmNlWzBdLT5mbGFnczsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+c3RhcnQgPSBpby0+d2luWzFdLmJhc2U7CisJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA9IGlvLT53aW5bMV0ubGVuOwogCQl9CiAJfQogCiAJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KLQlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pOworCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2Rldik7CiB9CiAKIHN0YXRpYyBpbnQgcHJpc20yX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKQEAgLTY0Niw3ICs1OTgsNyBAQAogCQlnb3RvIGZhaWxlZF91bmxvY2s7CiAKIAlkZXYtPmlycSA9IGxpbmstPmlycTsKLQlkZXYtPmJhc2VfYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKwlkZXYtPmJhc2VfYWRkciA9IGxpbmstPnJlc291cmNlWzBdLT5zdGFydDsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5pcnFfaW5pdF9sb2NrLCBmbGFncyk7CiAKQEAgLTY1OCwxMiArNjEwLDEwIEBACiAJCSAgICAgICBsaW5rLT5jb25mLlZwcCAlIDEwKTsKIAlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQogCQlwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxKTsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMxKQotCQlwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKLQkJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MStsaW5rLT5pby5OdW1Qb3J0czEtMSk7Ci0JaWYgKGxpbmstPmlvLk51bVBvcnRzMikKLQkJcHJpbnRrKCIgJiAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQyLAotCQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQyK2xpbmstPmlvLk51bVBvcnRzMi0xKTsKKwlpZiAobGluay0+cmVzb3VyY2VbMF0pCisJCXByaW50aygiICYgJXBSIiwgbGluay0+cmVzb3VyY2VbMF0pOworCWlmIChsaW5rLT5yZXNvdXJjZVsxXSkKKwkJcHJpbnRrKCIgJiAlcFIiLCBsaW5rLT5yZXNvdXJjZVsxXSk7CiAJcHJpbnRrKCJcbiIpOwogCiAJbG9jYWwtPnNodXRkb3duID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaHcuYwppbmRleCAyZjk5OWZjLi5lOWQ5ZDYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9ody5jCkBAIC0xODk2LDcgKzE4OTYsNyBAQAogLyogU29tZSBTTVAgc3lzdGVtcyBoYXZlIHJlcG9ydGVkIG51bWJlciBvZiBvZGQgZXJyb3JzIHdpdGggaG9zdGFwX3BjaS4gZmlkCiAgKiByZWdpc3RlciBoYXMgY2hhbmdlZCB2YWx1ZXMgYmV0d2VlbiBjb25zZWN1dGl2ZSByZWFkcyBmb3IgYW4gdW5rbm93biByZWFzb24uCiAgKiBUaGlzIHNob3VsZCByZWFsbHkgbm90IGhhcHBlbiwgc28gbW9yZSBkZWJ1Z2dpbmcgaXMgbmVlZGVkLiBUaGlzIHRlc3QKLSAqIHZlcnNpb24gaXMgYSBiaWcgc2xvd2VyLCBidXQgaXQgd2lsbCBkZXRlY3QgbW9zdCBvZiBzdWNoIHJlZ2lzdGVyIGNoYW5nZXMKKyAqIHZlcnNpb24gaXMgYSBiaXQgc2xvd2VyLCBidXQgaXQgd2lsbCBkZXRlY3QgbW9zdCBvZiBzdWNoIHJlZ2lzdGVyIGNoYW5nZXMKICAqIGFuZCB3aWxsIHRyeSB0byBnZXQgdGhlIGNvcnJlY3QgZmlkIGV2ZW50dWFsbHkuICovCiAjZGVmaW5lIEVYVFJBX0ZJRF9SRUFEX1RFU1RTCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9tYWluLmMKaW5kZXggZWI1N2QxZS4uMjVhMjcyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9tYWluLmMKQEAgLTE4Niw3ICsxODYsNyBAQAogCQlyZXR1cm4gLUVOT0JVRlM7CiAKIAkvKiB2ZXJpZnkgdGhhdCB0aGVyZSBpcyByb29tIGZvciB3ZHMjIHBvc3RmaXggaW4gdGhlIGludGVyZmFjZSBuYW1lICovCi0JaWYgKHN0cmxlbihsb2NhbC0+ZGV2LT5uYW1lKSA+IElGTkFNU0laIC0gNSkgeworCWlmIChzdHJsZW4obG9jYWwtPmRldi0+bmFtZSkgPj0gSUZOQU1TSVogLSA1KSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICInJXMnIHRvbyBsb25nIGJhc2UgZGV2aWNlIG5hbWVcbiIsCiAJCSAgICAgICBsb2NhbC0+ZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03NDEsOSArNzQxLDcgQEAKIAlsb2NhbF9pbmZvX3QgKmxvY2FsID0KIAkJY29udGFpbmVyX29mKHdvcmssIGxvY2FsX2luZm9fdCwgc2V0X211bHRpY2FzdF9saXN0X3F1ZXVlKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbG9jYWwtPmRldjsKLQlzdHJ1Y3QgaG9zdGFwX2ludGVyZmFjZSAqaWZhY2U7CiAKLQlpZmFjZSA9IG5ldGRldl9wcml2KGRldik7CiAJaWYgKGhvc3RhcF9zZXRfd29yZChkZXYsIEhGQTM4NFhfUklEX1BST01JU0NVT1VTTU9ERSwKIAkJCSAgICBsb2NhbC0+aXNfcHJvbWlzYykpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzYWJsaW5nIHByb21pc2N1b3VzIG1vZGUgZmFpbGVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfcGNpLmMKaW5kZXggZDI0ZGM3ZC4uOTcyYTljMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9wY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BjaS5jCkBAIC0zMzAsNiArMzMwLDcgQEAKIAogICAgICAgICBkZXYtPmlycSA9IHBkZXYtPmlycTsKICAgICAgICAgaHdfcHJpdi0+bWVtX3N0YXJ0ID0gbWVtOworCWRldi0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKIAogCXByaXNtMl9wY2lfY29yX3NyZXNldChsb2NhbCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfd2xhbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF93bGFuLmgKaW5kZXggMWJhMzNiZS4uMWM2NmIzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF93bGFuLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF93bGFuLmgKQEAgLTMxLDE0ICszMSwxNCBAQAogCXUzMiBkaWQ7CiAJdTE2IHN0YXR1cywgbGVuOwogCXUzMiBkYXRhOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbGludXhfd2xhbl9uZ19wcmlzbV9oZHIgewogCXUzMiBtc2djb2RlLCBtc2dsZW47CiAJY2hhciBkZXZuYW1lWzE2XTsKIAlzdHJ1Y3QgbGludXhfd2xhbl9uZ192YWwgaG9zdHRpbWUsIG1hY3RpbWUsIGNoYW5uZWwsIHJzc2ksIHNxLCBzaWduYWwsCiAJCW5vaXNlLCByYXRlLCBpc3R4LCBmcm1sZW47Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBsaW51eF93bGFuX25nX2NhcF9oZHIgewogCV9fYmUzMiB2ZXJzaW9uOwpAQCAtNTUsNyArNTUsNyBAQAogCV9fYmUzMiBzc2lfbm9pc2U7CiAJX19iZTMyIHByZWFtYmxlOwogCV9fYmUzMiBlbmNvZGluZzsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGhvc3RhcF9yYWRpb3RhcF9yeCB7CiAJc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgaGRyOwpAQCAtNjYsNyArNjYsNyBAQAogCV9fbGUxNiBjaGFuX2ZsYWdzOwogCXM4IGRibV9hbnRzaWduYWw7CiAJczggZGJtX2FudG5vaXNlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIExXTkdfQ0FQX0RJRF9CQVNFICAgKDQgfCAoMSA8PCA2KSkgLyogc2VjdGlvbiA0LCBncm91cCAxICovCiAjZGVmaW5lIExXTkdfQ0FQSERSX1ZFUlNJT04gMHg4MDIxMTAwMQpAQCAtOTcsNyArOTcsNyBAQAogCV9fYmUxNiBsZW47CiAKIAkvKiBmb2xsb3dlZCBieSBmcmFtZSBkYXRhOyBtYXggMjMwNCBieXRlcyAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAKIHN0cnVjdCBoZmEzODR4X3R4X2ZyYW1lIHsKQEAgLTEyNiwxNCArMTI2LDE0IEBACiAJX19iZTE2IGxlbjsKIAogCS8qIGZvbGxvd2VkIGJ5IGZyYW1lIGRhdGE7IG1heCAyMzA0IGJ5dGVzICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIAogc3RydWN0IGhmYTM4NHhfcmlkX2hkcgogewogCV9fbGUxNiBsZW47CiAJX19sZTE2IHJpZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogCiAvKiBNYWNybyBmb3IgY29udmVydGluZyBzaWduYWwgbGV2ZWxzIChyYW5nZSAyNyAuLiAxNTQpIHRvIHdpcmVsZXNzIGV4dApAQCAtMTQ1LDI0ICsxNDUsMjQgQEAKIHN0cnVjdCBoZmEzODR4X3NjYW5fcmVxdWVzdCB7CiAJX19sZTE2IGNoYW5uZWxfbGlzdDsKIAlfX2xlMTYgdHhyYXRlOyAvKiBIRkEzODRYX1JBVEVTXyogKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGhmYTM4NHhfaG9zdHNjYW5fcmVxdWVzdCB7CiAJX19sZTE2IGNoYW5uZWxfbGlzdDsKIAlfX2xlMTYgdHhyYXRlOwogCV9fbGUxNiB0YXJnZXRfc3NpZF9sZW47CiAJdTggdGFyZ2V0X3NzaWRbMzJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaGZhMzg0eF9qb2luX3JlcXVlc3QgewogCXU4IGJzc2lkWzZdOwogCV9fbGUxNiBjaGFubmVsOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaGZhMzg0eF9pbmZvX2ZyYW1lIHsKIAlfX2xlMTYgbGVuOwogCV9fbGUxNiB0eXBlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaGZhMzg0eF9jb21tX3RhbGxpZXMgewogCV9fbGUxNiB0eF91bmljYXN0X2ZyYW1lczsKQEAgLTE4Niw3ICsxODYsNyBAQAogCV9fbGUxNiByeF9kaXNjYXJkc193ZXBfdW5kZWNyeXB0YWJsZTsKIAlfX2xlMTYgcnhfbWVzc2FnZV9pbl9tc2dfZnJhZ21lbnRzOwogCV9fbGUxNiByeF9tZXNzYWdlX2luX2JhZF9tc2dfZnJhZ21lbnRzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaGZhMzg0eF9jb21tX3RhbGxpZXMzMiB7CiAJX19sZTMyIHR4X3VuaWNhc3RfZnJhbWVzOwpAQCAtMjEwLDcgKzIxMCw3IEBACiAJX19sZTMyIHJ4X2Rpc2NhcmRzX3dlcF91bmRlY3J5cHRhYmxlOwogCV9fbGUzMiByeF9tZXNzYWdlX2luX21zZ19mcmFnbWVudHM7CiAJX19sZTMyIHJ4X21lc3NhZ2VfaW5fYmFkX21zZ19mcmFnbWVudHM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBoZmEzODR4X3NjYW5fcmVzdWx0X2hkciB7CiAJX19sZTE2IHJlc2VydmVkOwpAQCAtMjE5LDcgKzIxOSw3IEBACiAjZGVmaW5lIEhGQTM4NFhfU0NBTl9IT1NUX0lOSVRJQVRFRCAxCiAjZGVmaW5lIEhGQTM4NFhfU0NBTl9GSVJNV0FSRV9JTklUSUFURUQgMgogI2RlZmluZSBIRkEzODRYX1NDQU5fSU5RVUlSWV9GUk9NX0hPU1QgMwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhGQTM4NFhfU0NBTl9NQVhfUkVTVUxUUyAzMgogCkBAIC0yMzQsNyArMjM0LDcgQEAKIAl1OCBzc2lkWzMyXTsKIAl1OCBzdXBfcmF0ZXNbMTBdOwogCV9fbGUxNiByYXRlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaGZhMzg0eF9ob3N0c2Nhbl9yZXN1bHQgewogCV9fbGUxNiBjaGlkOwpAQCAtMjQ4LDcgKzI0OCw3IEBACiAJdTggc3VwX3JhdGVzWzEwXTsKIAlfX2xlMTYgcmF0ZTsKIAlfX2xlMTYgYXRpbTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGNvbW1fdGFsbGllc19zdW1zIHsKIAl1bnNpZ25lZCBpbnQgdHhfdW5pY2FzdF9mcmFtZXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCmluZGV4IDBiZDRkZmEuLmMyNGM1ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCkBAIC0xNzQsNyArMTc0LDcgQEAKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCSJJbnRlbChSKSBQUk8vV2lyZWxlc3MgMjEwMCBOZXR3b3JrIERyaXZlciIKICNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0KGMpIDIwMDMtMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbiIKIAotc3RydWN0IHBtX3Fvc19yZXF1ZXN0X2xpc3QgKmlwdzIxMDBfcG1fcW9zX3JlcTsKK3N0YXRpYyBzdHJ1Y3QgcG1fcW9zX3JlcXVlc3RfbGlzdCBpcHcyMTAwX3BtX3Fvc19yZXE7CiAKIC8qIERlYnVnZ2luZyBzdHVmZiAqLwogI2lmZGVmIENPTkZJR19JUFcyMTAwX0RFQlVHCkBAIC0xNzQxLDcgKzE3NDEsNyBAQAogCS8qIHRoZSBpcHcyMTAwIGhhcmR3YXJlIHJlYWxseSBkb2Vzbid0IHdhbnQgcG93ZXIgbWFuYWdlbWVudCBkZWxheXMKIAkgKiBsb25nZXIgdGhhbiAxNzV1c2VjCiAJICovCi0JcG1fcW9zX3VwZGF0ZV9yZXF1ZXN0KGlwdzIxMDBfcG1fcW9zX3JlcSwgMTc1KTsKKwlwbV9xb3NfdXBkYXRlX3JlcXVlc3QoJmlwdzIxMDBfcG1fcW9zX3JlcSwgMTc1KTsKIAogCS8qIElmIHRoZSBpbnRlcnJ1cHQgaXMgZW5hYmxlZCwgdHVybiBpdCBvZmYuLi4gKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG93X2xvY2ssIGZsYWdzKTsKQEAgLTE4ODksNyArMTg4OSw3IEBACiAJaXB3MjEwMF9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG93X2xvY2ssIGZsYWdzKTsKIAotCXBtX3Fvc191cGRhdGVfcmVxdWVzdChpcHcyMTAwX3BtX3Fvc19yZXEsIFBNX1FPU19ERUZBVUxUX1ZBTFVFKTsKKwlwbV9xb3NfdXBkYXRlX3JlcXVlc3QoJmlwdzIxMDBfcG1fcW9zX3JlcSwgUE1fUU9TX0RFRkFVTFRfVkFMVUUpOwogCiAJLyogV2UgaGF2ZSB0byBzaWduYWwgYW55IHN1cHBsaWNhbnQgaWYgd2UgYXJlIGRpc2Fzc29jaWF0aW5nICovCiAJaWYgKGFzc29jaWF0ZWQpCkBAIC0zNDY3LDEwICszNDY3LDggQEAKIAlkbWFfYWRkcl90IHA7CiAKIAlwcml2LT5tc2dfYnVmZmVycyA9Ci0JICAgIChzdHJ1Y3QgaXB3MjEwMF90eF9wYWNrZXQgKilrbWFsbG9jKElQV19DT01NQU5EX1BPT0xfU0laRSAqCi0JCQkJCQlzaXplb2Yoc3RydWN0Ci0JCQkJCQkgICAgICAgaXB3MjEwMF90eF9wYWNrZXQpLAotCQkJCQkJR0ZQX0tFUk5FTCk7CisJICAgIGttYWxsb2MoSVBXX0NPTU1BTkRfUE9PTF9TSVpFICogc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX3R4X3BhY2tldCksCisJCSAgICBHRlBfS0VSTkVMKTsKIAlpZiAoIXByaXYtPm1zZ19idWZmZXJzKSB7CiAJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiAlczogUENJIGFsbG9jIGZhaWxlZCBmb3IgbXNnICIKIAkJICAgICAgICJidWZmZXJzLlxuIiwgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CkBAIC00NDk5LDEwICs0NDk3LDggQEAKIAl9CiAKIAlwcml2LT50eF9idWZmZXJzID0KLQkgICAgKHN0cnVjdCBpcHcyMTAwX3R4X3BhY2tldCAqKWttYWxsb2MoVFhfUEVOREVEX1FVRVVFX0xFTkdUSCAqCi0JCQkJCQlzaXplb2Yoc3RydWN0Ci0JCQkJCQkgICAgICAgaXB3MjEwMF90eF9wYWNrZXQpLAotCQkJCQkJR0ZQX0FUT01JQyk7CisJICAgIGttYWxsb2MoVFhfUEVOREVEX1FVRVVFX0xFTkdUSCAqIHNpemVvZihzdHJ1Y3QgaXB3MjEwMF90eF9wYWNrZXQpLAorCQkgICAgR0ZQX0FUT01JQyk7CiAJaWYgKCFwcml2LT50eF9idWZmZXJzKSB7CiAJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQogCQkgICAgICAgIjogJXM6IGFsbG9jIGZhaWxlZCBmb3JtIHR4IGJ1ZmZlcnMuXG4iLApAQCAtNDY1MSw5ICs0NjQ3LDkgQEAKIAkvKgogCSAqIGFsbG9jYXRlIHBhY2tldHMKIAkgKi8KLQlwcml2LT5yeF9idWZmZXJzID0gKHN0cnVjdCBpcHcyMTAwX3J4X3BhY2tldCAqKQotCSAgICBrbWFsbG9jKFJYX1FVRVVFX0xFTkdUSCAqIHNpemVvZihzdHJ1Y3QgaXB3MjEwMF9yeF9wYWNrZXQpLAotCQkgICAgR0ZQX0tFUk5FTCk7CisJcHJpdi0+cnhfYnVmZmVycyA9IGttYWxsb2MoUlhfUVVFVUVfTEVOR1RIICoKKwkJCQkgICBzaXplb2Yoc3RydWN0IGlwdzIxMDBfcnhfcGFja2V0KSwKKwkJCQkgICBHRlBfS0VSTkVMKTsKIAlpZiAoIXByaXYtPnJ4X2J1ZmZlcnMpIHsKIAkJSVBXX0RFQlVHX0lORk8oImNhbid0IGFsbG9jYXRlIHJ4IHBhY2tldCBidWZmZXIgdGFibGVcbiIpOwogCkBAIC01MjMzLDcgKzUyMjksNyBAQAogCXU4IGF1dGhfbW9kZTsKIAl1OCByZXBsYXlfY291bnRlcnNfbnVtYmVyOwogCXU4IHVuaWNhc3RfdXNpbmdfZ3JvdXA7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0YXRpYyBpbnQgaXB3MjEwMF9zZXRfc2VjdXJpdHlfaW5mb3JtYXRpb24oc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwKIAkJCQkJICAgIGludCBhdXRoX21vZGUsCkBAIC02NjY5LDggKzY2NjUsOCBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCi0JaXB3MjEwMF9wbV9xb3NfcmVxID0gcG1fcW9zX2FkZF9yZXF1ZXN0KFBNX1FPU19DUFVfRE1BX0xBVEVOQ1ksCi0JCQlQTV9RT1NfREVGQVVMVF9WQUxVRSk7CisJcG1fcW9zX2FkZF9yZXF1ZXN0KCZpcHcyMTAwX3BtX3Fvc19yZXEsIFBNX1FPU19DUFVfRE1BX0xBVEVOQ1ksCisJCQkgICBQTV9RT1NfREVGQVVMVF9WQUxVRSk7CiAjaWZkZWYgQ09ORklHX0lQVzIxMDBfREVCVUcKIAlpcHcyMTAwX2RlYnVnX2xldmVsID0gZGVidWc7CiAJcmV0ID0gZHJpdmVyX2NyZWF0ZV9maWxlKCZpcHcyMTAwX3BjaV9kcml2ZXIuZHJpdmVyLApAQCAtNjY5Miw3ICs2Njg4LDcgQEAKIAkJCSAgICZkcml2ZXJfYXR0cl9kZWJ1Z19sZXZlbCk7CiAjZW5kaWYKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmlwdzIxMDBfcGNpX2RyaXZlcik7Ci0JcG1fcW9zX3JlbW92ZV9yZXF1ZXN0KGlwdzIxMDBfcG1fcW9zX3JlcSk7CisJcG1fcW9zX3JlbW92ZV9yZXF1ZXN0KCZpcHcyMTAwX3BtX3Fvc19yZXEpOwogfQogCiBtb2R1bGVfaW5pdChpcHcyMTAwX2luaXQpOwpAQCAtODQ3NSw3ICs4NDcxLDcgQEAKIAlzaG9ydCBtb2RlOwogCXVuc2lnbmVkIGludCBmd19zaXplOwogCXVuc2lnbmVkIGludCB1Y19zaXplOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdGF0aWMgaW50IGlwdzIxMDBfbW9kX2Zpcm13YXJlX2xvYWQoc3RydWN0IGlwdzIxMDBfZncgKmZ3KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuaAppbmRleCAxZWFiMGQ2Li44MzgwMDJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuaApAQCAtMTY0LDcgKzE2NCw3IEBACiAJCX0gZmllbGRzOwogCQl1OCBmaWVsZDsKIAl9IGluZm87Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpcHcyMTAwX2JkIHsKIAl1MzIgaG9zdF9hZGRyOwpAQCAtMTc0LDcgKzE3NCw3IEBACiAJICogMXN0IFRCRCkgKi8KIAl1OCBudW1fZnJhZ21lbnRzOwogCXU4IHJlc2VydmVkWzZdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIElQV19CRF9RVUVVRV9MRU5HVEgobikgKDE8PG4pCiAjZGVmaW5lIElQV19CRF9BTElHTk1FTlQoTCkgICAgKEwqc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX2JkKSkKQEAgLTIzMiw3ICsyMzIsNyBAQAogI2RlZmluZSBJUFdfU1RBVFVTX0ZMQUdfV0VQX0VOQ1JZUFRFRAkoMTw8MSkKICNkZWZpbmUgSVBXX1NUQVRVU19GTEFHX0NSQ19FUlJPUiAgICAgICAoMTw8MikKIAl1OCByc3NpOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXB3MjEwMF9zdGF0dXNfcXVldWUgewogCS8qIGRyaXZlciAodmlydHVhbCkgcG9pbnRlciB0byBxdWV1ZSAqLwpAQCAtMjkzLDcgKzI5Myw3IEBACiAJdTMyIHJlc2VydmVkMVszXTsKIAl1MzIgKm9yZGluYWwxX3B0cjsKIAl1MzIgKm9yZGluYWwyX3B0cjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGlwdzIxMDBfZGF0YV9oZWFkZXIgewogCXUzMiBob3N0X2NvbW1hbmRfcmVnOwpAQCAtMzA3LDcgKzMwNyw3IEBACiAJdTggc3JjX2FkZHJbRVRIX0FMRU5dOwogCXU4IGRzdF9hZGRyW0VUSF9BTEVOXTsKIAl1MTYgZnJhZ21lbnRfc2l6ZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogSG9zdCBjb21tYW5kIGRhdGEgc3RydWN0dXJlICovCiBzdHJ1Y3QgaG9zdF9jb21tYW5kIHsKQEAgLTMxNiw3ICszMTYsNyBAQAogCXUzMiBob3N0X2NvbW1hbmRfc2VxdWVuY2U7CS8vIFVOSVFVRSBDT01NQU5EIE5VTUJFUiAoSUQpCiAJdTMyIGhvc3RfY29tbWFuZF9sZW5ndGg7CS8vIExFTkdUSAogCXUzMiBob3N0X2NvbW1hbmRfcGFyYW1ldGVyc1tIT1NUX0NPTU1BTkRfUEFSQU1TX1JFR19MRU5dOwkvLyBDT01NQU5EIFBBUkFNRVRFUlMKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogdHlwZWRlZiBlbnVtIHsKIAlQT1dFUl9PTl9SRVNFVCwKQEAgLTM4Miw3ICszODIsNyBAQAogCXUzMiBobmhkcl9zaXplOwkJLyogc2l6ZSBpbiBieXRlcyBvZiBkYXRhCiAJCQkJICAgb3IgbnVtYmVyIG9mIGVudHJpZXMsIGlmIHRhYmxlLgogCQkJCSAgIERvZXMgTk9UIGluY2x1ZGUgaGVhZGVyICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgTUFYX0tFWV9TSVpFCTE2CiAjZGVmaW5lCU1BWF9LRVlTCTgKQEAgLTgxNCw3ICs4MTQsNyBAQAogCQlzdHJ1Y3QgaXB3MjEwMF9ub3RpZmljYXRpb24gbm90aWZpY2F0aW9uOwogCQlzdHJ1Y3QgaXB3MjEwMF9jbWRfaGVhZGVyIGNvbW1hbmQ7CiAJfSByeF9kYXRhOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBCaXQgMC03IGFyZSBmb3IgODAyLjExYiB0eCByYXRlcyAtIC4gIEJpdCA1LTcgYXJlIHJlc2VydmVkICovCiAjZGVmaW5lIFRYX1JBVEVfMV9NQklUICAgICAgICAgICAgICAweDAwMDEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjIwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKaW5kZXggM2FhM2JiMS4uY2IyNTUyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKQEAgLTk2LDcgKzk2LDcgQEAKIHN0YXRpYyB1MzIgaXB3X2RlYnVnX2xldmVsOwogc3RhdGljIGludCBhc3NvY2lhdGU7CiBzdGF0aWMgaW50IGF1dG9fY3JlYXRlID0gMTsKLXN0YXRpYyBpbnQgbGVkX3N1cHBvcnQgPSAwOworc3RhdGljIGludCBsZWRfc3VwcG9ydCA9IDE7CiBzdGF0aWMgaW50IGRpc2FibGUgPSAwOwogc3RhdGljIGludCBidF9jb2V4aXN0ID0gMDsKIHN0YXRpYyBpbnQgaHdjcnlwdG8gPSAwOwpAQCAtNjYyNCwxMyArNjYyNCwxMiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICh3cnF1LT5kYXRhLmxlbmd0aCkgewotCQlidWYgPSBrbWFsbG9jKHdycXUtPmRhdGEubGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwkJYnVmID0ga21lbWR1cChleHRyYSwgd3JxdS0+ZGF0YS5sZW5ndGgsIEdGUF9LRVJORUwpOwogCQlpZiAoYnVmID09IE5VTEwpIHsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCW1lbWNweShidWYsIGV4dHJhLCB3cnF1LT5kYXRhLmxlbmd0aCk7CiAJCWtmcmVlKGllZWUtPndwYV9pZSk7CiAJCWllZWUtPndwYV9pZSA9IGJ1ZjsKIAkJaWVlZS0+d3BhX2llX2xlbiA9IHdycXUtPmRhdGEubGVuZ3RoOwpAQCAtMTIwODMsNyArMTIwODIsNyBAQAogTU9EVUxFX1BBUk1fREVTQyhhdXRvX2NyZWF0ZSwgImF1dG8gY3JlYXRlIGFkaG9jIG5ldHdvcmsgKGRlZmF1bHQgb24pIik7CiAKIG1vZHVsZV9wYXJhbV9uYW1lZChsZWQsIGxlZF9zdXBwb3J0LCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhsZWQsICJlbmFibGUgbGVkIGNvbnRyb2wgb24gc29tZSBzeXN0ZW1zIChkZWZhdWx0IDAgb2ZmKSIpOworTU9EVUxFX1BBUk1fREVTQyhsZWQsICJlbmFibGUgbGVkIGNvbnRyb2wgb24gc29tZSBzeXN0ZW1zIChkZWZhdWx0IDEgb24pIik7CiAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJkZWJ1ZyBvdXRwdXQgbWFzayIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuaAppbmRleCBiZjBlZWIyLi5kN2QwNDljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuaApAQCAtMzg4LDcgKzM4OCw3IEBACiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsJCS8qKjwgcGh5c2ljYWwgYWRkciBmb3IgQkQncyAqLwogCWludCBsb3dfbWFyazsJCSAgICAgICAvKio8IGxvdyB3YXRlcm1hcmssIHJlc3VtZSBxdWV1ZSBpZiBmcmVlIHNwYWNlIG1vcmUgdGhhbiB0aGlzICovCiAJaW50IGhpZ2hfbWFyazsJCSAgICAgICAvKio8IGhpZ2ggd2F0ZXJtYXJrLCBzdG9wIHF1ZXVlIGlmIGZyZWUgc3BhY2UgbGVzcyB0aGFuIHRoaXMgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOyAvKiBYWFggKi8KK30gX19wYWNrZWQ7IC8qIFhYWCAqLwogCiBzdHJ1Y3QgbWFjaGRyMzIgewogCV9fbGUxNiBmcmFtZV9jdGw7CkBAIC0zOTksNyArMzk5LDcgQEAKIAlfX2xlMTYgc2VxX2N0cmw7CQkvLyBtb3JlIGVuZGlhbnMhCiAJdTggYWRkcjRbTUFDQURSUl9CWVRFX0xFTl07CiAJX19sZTE2IHFvc19jdHJsOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbWFjaGRyMzAgewogCV9fbGUxNiBmcmFtZV9jdGw7CkBAIC00MDksNyArNDA5LDcgQEAKIAl1OCBhZGRyM1tNQUNBRFJSX0JZVEVfTEVOXTsKIAlfX2xlMTYgc2VxX2N0cmw7CQkvLyBtb3JlIGVuZGlhbnMhCiAJdTggYWRkcjRbTUFDQURSUl9CWVRFX0xFTl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBtYWNoZHIyNiB7CiAJX19sZTE2IGZyYW1lX2N0bDsKQEAgLTQxOSw3ICs0MTksNyBAQAogCXU4IGFkZHIzW01BQ0FEUlJfQllURV9MRU5dOwogCV9fbGUxNiBzZXFfY3RybDsJCS8vIG1vcmUgZW5kaWFucyEKIAlfX2xlMTYgcW9zX2N0cmw7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBtYWNoZHIyNCB7CiAJX19sZTE2IGZyYW1lX2N0bDsKQEAgLTQyOCwyMCArNDI4LDIwIEBACiAJdTggYWRkcjJbTUFDQURSUl9CWVRFX0xFTl07CiAJdTggYWRkcjNbTUFDQURSUl9CWVRFX0xFTl07CiAJX19sZTE2IHNlcV9jdHJsOwkJLy8gbW9yZSBlbmRpYW5zIQotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvLyBUWCBURkQgd2l0aCAzMiBieXRlIE1BQyBIZWFkZXIKIHN0cnVjdCB0eF90ZmRfMzIgewogCXN0cnVjdCBtYWNoZHIzMiBtY2hkcjsJLy8gMzIKIAlfX2xlMzIgdWl2cGxhY2Vob2xkZXJbMl07CS8vIDgKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLy8gVFggVEZEIHdpdGggMzAgYnl0ZSBNQUMgSGVhZGVyCiBzdHJ1Y3QgdHhfdGZkXzMwIHsKIAlzdHJ1Y3QgbWFjaGRyMzAgbWNoZHI7CS8vIDMwCiAJdTggcmVzZXJ2ZWRbMl07CQkvLyAyCiAJX19sZTMyIHVpdnBsYWNlaG9sZGVyWzJdOwkvLyA4Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8vIHR4IHRmZCB3aXRoIDI2IGJ5dGUgbWFjIGhlYWRlcgogc3RydWN0IHR4X3RmZF8yNiB7CkBAIC00NDksMTQgKzQ0OSwxNCBAQAogCXU4IHJlc2VydmVkMVsyXTsJLy8gMgogCV9fbGUzMiB1aXZwbGFjZWhvbGRlclsyXTsJLy8gOAogCXU4IHJlc2VydmVkMls0XTsJLy8gNAotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvLyB0eCB0ZmQgd2l0aCAyNCBieXRlIG1hYyBoZWFkZXIKIHN0cnVjdCB0eF90ZmRfMjQgewogCXN0cnVjdCBtYWNoZHIyNCBtY2hkcjsJLy8gMjQKIAlfX2xlMzIgdWl2cGxhY2Vob2xkZXJbMl07CS8vIDgKIAl1OCByZXNlcnZlZFs4XTsJCS8vIDgKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBEQ1RfV0VQX0tFWV9GSUVMRF9MRU5HVEggMTYKIApAQCAtNDY1LDcgKzQ2NSw3IEBACiAJdTggbGVuZ3RoOwogCV9fbGUxNiByZXNlcnZlZDsKIAl1OCBwYXlsb2FkWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgdGZkX2RhdGEgewogCS8qIEhlYWRlciAqLwpAQCAtNTA0LDE0ICs1MDQsMTQgQEAKIAlfX2xlMzIgbnVtX2NodW5rczsKIAlfX2xlMzIgY2h1bmtfcHRyW05VTV9URkRfQ0hVTktTXTsKIAlfX2xlMTYgY2h1bmtfbGVuW05VTV9URkRfQ0hVTktTXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHR4cnhfY29udHJvbF9mbGFncyB7CiAJdTggbWVzc2FnZV90eXBlOwogCXU4IHJ4X3NlcV9udW07CiAJdTggY29udHJvbF9iaXRzOwogCXU4IHJlc2VydmVkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lICBURkRfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyOAogI2RlZmluZSAgVEZEX0NNRF9JTU1FRElBVEVfUEFZTE9BRF9MRU5HVEggICAoVEZEX1NJWkUgLSBzaXplb2Yoc3RydWN0IHR4cnhfY29udHJvbF9mbGFncykpCkBAIC01MjMsNyArNTIzLDcgQEAKIAkJc3RydWN0IHRmZF9jb21tYW5kIGNtZDsKIAkJdTggcmF3W1RGRF9DTURfSU1NRURJQVRFX1BBWUxPQURfTEVOR1RIXTsKIAl9IHU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHR5cGVkZWYgdm9pZCBkZXN0cnVjdG9yX2Z1bmMoY29uc3Qgdm9pZCAqKTsKIApAQCAtNTU5LDcgKzU1OSw3IEBACiAJCV9fbGUzMiBiW1NVUF9SQVRFXzExQl9NQVhfTlVNX0NIQU5ORUxTXTsKIAkJX19sZTMyIGdbU1VQX1JBVEVfMTFHX01BWF9OVU1fQ0hBTk5FTFNdOwogCX0gZmFpbGVkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBzdGF0aXN0aWNzIGNvbW1hbmQgcmVzcG9uc2UgKi8KIHN0cnVjdCBpcHdfY21kX3N0YXRzIHsKQEAgLTU4NiwxMyArNTg2LDEzIEBACiAJX19sZTE2IHJ4X2F1dG9kZXRlY19ub19vZmRtOwogCV9fbGUxNiByeF9hdXRvZGV0ZWNfbm9fYmFya2VyOwogCV9fbGUxNiByZXNlcnZlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IG5vdGlmX2NoYW5uZWxfcmVzdWx0IHsKIAl1OCBjaGFubmVsX251bTsKIAlzdHJ1Y3QgaXB3X2NtZF9zdGF0cyBzdGF0czsKIAl1OCB1UmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgU0NBTl9DT01QTEVURURfU1RBVFVTX0NPTVBMRVRFICAxCiAjZGVmaW5lIFNDQU5fQ09NUExFVEVEX1NUQVRVU19BQk9SVEVEICAgMgpAQCAtNjAyLDI0ICs2MDIsMjQgQEAKIAl1OCBudW1fY2hhbm5lbHM7CiAJdTggc3RhdHVzOwogCXU4IHJlc2VydmVkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3Qgbm90aWZfZnJhZ19sZW5ndGggewogCV9fbGUxNiBmcmFnX2xlbmd0aDsKIAlfX2xlMTYgcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBub3RpZl9iZWFjb25fc3RhdGUgewogCV9fbGUzMiBzdGF0ZTsKIAlfX2xlMzIgbnVtYmVyOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3Qgbm90aWZfdGdpX3R4X2tleSB7CiAJdTgga2V5X3N0YXRlOwogCXU4IHNlY3VyaXR5X3R5cGU7CiAJdTggc3RhdGlvbl9pbmRleDsKIAl1OCByZXNlcnZlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBTSUxFTkNFX09WRVJfVEhSRVNIICgxKQogI2RlZmluZSBTSUxFTkNFX1VOREVSX1RIUkVTSCAoMikKQEAgLTYzMSwyNSArNjMxLDI1IEBACiAJc3RydWN0IHJhdGVfaGlzdG9ncmFtIGhpc3RvZ3JhbTsKIAl1OCBzaWxlbmNlX25vdGlmaWNhdGlvbl90eXBlOwkvKiBTSUxFTkNFX09WRVIvVU5ERVJfVEhSRVNIICovCiAJX19sZTE2IHNpbGVuY2VfY291bnQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBub3RpZl9hc3NvY2lhdGlvbiB7CiAJdTggc3RhdGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBub3RpZl9hdXRoZW50aWNhdGUgewogCXU4IHN0YXRlOwogCXN0cnVjdCBtYWNoZHIyNCBhZGRyOwogCV9fbGUxNiBzdGF0dXM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBub3RpZl9jYWxpYnJhdGlvbiB7CiAJdTggZGF0YVsxMDRdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3Qgbm90aWZfbm9pc2UgewogCV9fbGUzMiB2YWx1ZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGlwd19yeF9ub3RpZmljYXRpb24gewogCXU4IHJlc2VydmVkWzhdOwpAQCAtNjY5LDcgKzY2OSw3IEBACiAJCXN0cnVjdCBub3RpZl9ub2lzZSBub2lzZTsKIAkJdTggcmF3WzBdOwogCX0gdTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGlwd19yeF9mcmFtZSB7CiAJX19sZTMyIHJlc2VydmVkMTsKQEAgLTY5MiwxNCArNjkyLDE0IEBACiAJdTggcnRzY3RzX3NlZW47CQkvLyAweDEgUlRTIHNlZW4gOyAweDIgQ1RTIHNlZW4KIAlfX2xlMTYgbGVuZ3RoOwogCXU4IGRhdGFbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpcHdfcnhfaGVhZGVyIHsKIAl1OCBtZXNzYWdlX3R5cGU7CiAJdTggcnhfc2VxX251bTsKIAl1OCBjb250cm9sX2JpdHM7CiAJdTggcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpcHdfcnhfcGFja2V0IHsKIAlzdHJ1Y3QgaXB3X3J4X2hlYWRlciBoZWFkZXI7CkBAIC03MDcsNyArNzA3LDcgQEAKIAkJc3RydWN0IGlwd19yeF9mcmFtZSBmcmFtZTsKIAkJc3RydWN0IGlwd19yeF9ub3RpZmljYXRpb24gbm90aWZpY2F0aW9uOwogCX0gdTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBJUFdfUlhfTk9USUZJQ0FUSU9OX1NJWkUgc2l6ZW9mKHN0cnVjdCBpcHdfcnhfaGVhZGVyKSArIDEyCiAjZGVmaW5lIElQV19SWF9GUkFNRV9TSVpFICAgICAgICAodW5zaWduZWQgaW50KShzaXplb2Yoc3RydWN0IGlwd19yeF9oZWFkZXIpICsgXApAQCAtNzE3LDcgKzcxNyw3IEBACiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLX07CQkJCS8qIE5vdCB0cmFuc2ZlcnJlZCBvdmVyIG5ldHdvcmssIHNvIG5vdCAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICovCit9OwkJCQkvKiBOb3QgdHJhbnNmZXJyZWQgb3ZlciBuZXR3b3JrLCBzbyBub3QgIF9fcGFja2VkICovCiAKIHN0cnVjdCBpcHdfcnhfcXVldWUgewogCXN0cnVjdCBpcHdfcnhfbWVtX2J1ZmZlciBwb29sW1JYX1FVRVVFX1NJWkUgKyBSWF9GUkVFX0JVRkZFUlNdOwpAQCAtNzMwLDcgKzczMCw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCByeF9mcmVlOwkvKiBPd24gYW4gU0tCcyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgcnhfdXNlZDsJLyogTm8gU0tCIGFsbG9jYXRlZCAqLwogCXNwaW5sb2NrX3QgbG9jazsKLX07CQkJCS8qIE5vdCB0cmFuc2ZlcnJlZCBvdmVyIG5ldHdvcmssIHNvIG5vdCAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICovCit9OwkJCQkvKiBOb3QgdHJhbnNmZXJyZWQgb3ZlciBuZXR3b3JrLCBzbyBub3QgIF9fcGFja2VkICovCiAKIHN0cnVjdCBhbGl2ZV9jb21tYW5kX3Jlc3BvbmNlIHsKIAl1OCBhbGl2ZV9jb21tYW5kOwpAQCAtNzQ1LDIxICs3NDUsMjEgQEAKIAlfX2xlMTYgcmVzZXJ2ZWQ0OwogCXU4IHRpbWVfc3RhbXBbNV07CS8qIG1vbnRoLCBkYXksIHllYXIsIGhvdXJzLCBtaW51dGVzICovCiAJdTggdWNvZGVfdmFsaWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSVBXX01BWF9SQVRFUyAxMgogCiBzdHJ1Y3QgaXB3X3JhdGVzIHsKIAl1OCBudW1fcmF0ZXM7CiAJdTggcmF0ZXNbSVBXX01BWF9SQVRFU107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBjb21tYW5kX2Jsb2NrIHsKIAl1bnNpZ25lZCBpbnQgY29udHJvbDsKIAl1MzIgc291cmNlX2FkZHI7CiAJdTMyIGRlc3RfYWRkcjsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIENCX05VTUJFUl9PRl9FTEVNRU5UU19TTUFMTCA2NAogc3RydWN0IGZ3X2ltYWdlX2Rlc2MgewpAQCAtNzkyLDcgKzc5Miw3IEBACiAJdTggYWNjZXB0X2FsbF9tZ210X2ZyYW1lczsKIAl1OCBwYXNzX25vaXNlX3N0YXRzX3RvX2hvc3Q7CiAJdTggcmVzZXJ2ZWQzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXB3X211bHRpY2FzdF9hZGRyIHsKIAl1OCBudW1fb2ZfbXVsdGljYXN0X2FkZHJlc3NlczsKQEAgLTgwMSw3ICs4MDEsNyBAQAogCXU4IG1hYzJbNl07CiAJdTggbWFjM1s2XTsKIAl1OCBtYWM0WzZdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIERDV19XRVBfS0VZX0lOREVYX01BU0sJCTB4MDMJLyogYml0cyBbMDoxXSAqLwogI2RlZmluZSBEQ1dfV0VQX0tFWV9TRUNfVFlQRV9NQVNLCTB4MzAJLyogYml0cyBbNDo1XSAqLwpAQCAtODIyLDcgKzgyMiw3IEBACiAJdTgga2V5X2luZGV4OwogCXU4IGtleV9zaXplOwogCXU4IGtleVsxNl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpcHdfdGdpX3R4X2tleSB7CiAJdTgga2V5X2lkOwpAQCAtODMxLDcgKzgzMSw3IEBACiAJdTggZmxhZ3M7CiAJdTgga2V5WzE2XTsKIAlfX2xlMzIgdHhfY291bnRlclsyXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBJUFdfU0NBTl9DSEFOTkVMUyA1NAogCkBAIC04NDAsNyArODQwLDcgQEAKIAlfX2xlMTYgZHdlbGxfdGltZTsKIAl1OCBjaGFubmVsc19saXN0W0lQV19TQ0FOX0NIQU5ORUxTXTsKIAl1OCBjaGFubmVsc19yZXNlcnZlZFszXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogZW51bSB7CiAJSVBXX1NDQU5fUEFTU0lWRV9USUxMX0ZJUlNUX0JFQUNPTl9TQ0FOID0gMCwKQEAgLTg1Nyw3ICs4NTcsNyBAQAogCXU4IHNjYW5fdHlwZVtJUFdfU0NBTl9DSEFOTkVMUyAvIDJdOwogCXU4IHJlc2VydmVkOwogCV9fbGUxNiBkd2VsbF90aW1lW0lQV19TQ0FOX1RZUEVTXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RhdGljIGlubGluZSB1OCBpcHdfZ2V0X3NjYW5fdHlwZShzdHJ1Y3QgaXB3X3NjYW5fcmVxdWVzdF9leHQgKnNjYW4sIHU4IGluZGV4KQogewpAQCAtOTAyLDcgKzkwMiw3IEBACiAJdTggc21yOwogCXU4IHJlc2VydmVkMTsKIAlfX2xlMTYgcmVzZXJ2ZWQyOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXB3X3N1cHBvcnRlZF9yYXRlcyB7CiAJdTggaWVlZV9tb2RlOwpAQCAtOTEwLDM2ICs5MTAsMzYgQEAKIAl1OCBwdXJwb3NlOwogCXU4IHJlc2VydmVkOwogCXU4IHN1cHBvcnRlZF9yYXRlc1tJUFdfTUFYX1JBVEVTXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGlwd19ydHNfdGhyZXNob2xkIHsKIAlfX2xlMTYgcnRzX3RocmVzaG9sZDsKIAlfX2xlMTYgcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpcHdfZnJhZ190aHJlc2hvbGQgewogCV9fbGUxNiBmcmFnX3RocmVzaG9sZDsKIAlfX2xlMTYgcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpcHdfcmV0cnlfbGltaXQgewogCXU4IHNob3J0X3JldHJ5X2xpbWl0OwogCXU4IGxvbmdfcmV0cnlfbGltaXQ7CiAJX19sZTE2IHJlc2VydmVkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXB3X2Rpbm9fY29uZmlnIHsKIAlfX2xlMzIgZGlub19jb25maWdfYWRkcjsKIAlfX2xlMTYgZGlub19jb25maWdfc2l6ZTsKIAl1OCBkaW5vX3Jlc3BvbnNlOwogCXU4IHJlc2VydmVkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXB3X2Fpcm9uZXRfaW5mbyB7CiAJdTggaWQ7CiAJdTggbGVuZ3RoOwogCV9fbGUxNiByZXNlcnZlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGlwd19yeF9rZXkgewogCXU4IHN0YXRpb25faW5kZXg7CkBAIC05NTAsMjUgKzk1MCwyNSBAQAogCXU4IHN0YXRpb25fYWRkcmVzc1s2XTsKIAl1OCBrZXlfaW5kZXg7CiAJdTggcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpcHdfY291bnRyeV9jaGFubmVsX2luZm8gewogCXU4IGZpcnN0X2NoYW5uZWw7CiAJdTggbm9fY2hhbm5lbHM7CiAJczggbWF4X3R4X3Bvd2VyOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXB3X2NvdW50cnlfaW5mbyB7CiAJdTggaWQ7CiAJdTggbGVuZ3RoOwogCXU4IGNvdW50cnlfc3RyWzNdOwogCXN0cnVjdCBpcHdfY291bnRyeV9jaGFubmVsX2luZm8gZ3JvdXBzWzddOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXB3X2NoYW5uZWxfdHhfcG93ZXIgewogCXU4IGNoYW5uZWxfbnVtYmVyOwogCXM4IHR4X3Bvd2VyOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIFNDQU5fQVNTT0NJQVRFRF9JTlRFUlZBTCAoSFopCiAjZGVmaW5lIFNDQU5fSU5URVJWQUwgKEhaIC8gMTApCkBAIC05NzksMTggKzk3OSwxOCBAQAogCXU4IG51bV9jaGFubmVsczsKIAl1OCBpZWVlX21vZGU7CiAJc3RydWN0IGlwd19jaGFubmVsX3R4X3Bvd2VyIGNoYW5uZWxzX3R4X3Bvd2VyW01BWF9BX0NIQU5ORUxTXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGlwd19yc25fY2FwYWJpbGl0aWVzIHsKIAl1OCBpZDsKIAl1OCBsZW5ndGg7CiAJX19sZTE2IHZlcnNpb247Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpcHdfc2Vuc2l0aXZpdHlfY2FsaWIgewogCV9fbGUxNiBiZWFjb25fcnNzaV9yYXc7CiAJX19sZTE2IHJlc2VydmVkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKioKICAqIEhvc3QgY29tbWFuZCBzdHJ1Y3R1cmUuCkBAIC0xMDE5LDcgKzEwMTksNyBAQAogICAgKiBuUGFyYW1zPShsZW4rMykvNCtzdGF0dXNfbGVuCiAgICAqLwogCXUzMiBwYXJhbVswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBTVEFUVVNfSENNRF9BQ1RJVkUgICAgICAoMTw8MCkJLyoqPCBob3N0IGNvbW1hbmQgaW4gcHJvZ3Jlc3MgKi8KIApAQCAtMTExNCw3ICsxMTE0LDcgQEAKIAl1MzIgZXZlbnQ7CiAJdTMyIHRpbWU7CiAJdTMyIGRhdGE7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpcHdfZndfZXJyb3IgewkgLyogWFhYICovCiAJdW5zaWduZWQgbG9uZyBqaWZmaWVzOwpAQCAtMTEyNSw3ICsxMTI1LDcgQEAKIAlzdHJ1Y3QgaXB3X2Vycm9yX2VsZW0gKmVsZW07CiAJc3RydWN0IGlwd19ldmVudCAqbG9nOwogCXU4IHBheWxvYWRbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNpZmRlZiBDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUwogCkBAIC0xMTcwLDcgKzExNzAsNyBAQAogCXM4IHJ0X2RibW5vaXNlOwogCXU4IHJ0X2FudGVubmE7CS8qIGFudGVubmEgbnVtYmVyICovCiAJdTggcGF5bG9hZFswXTsgIC8qIHBheWxvYWQuLi4gKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKICNlbmRpZgogCiBzdHJ1Y3QgaXB3X3ByaXYgewpAQCAtMTk1Nyw3ICsxOTU3LDcgQEAKIHN0cnVjdCBpcHdfZml4ZWRfcmF0ZSB7CiAJX19sZTE2IHR4X3JhdGVzOwogCV9fbGUxNiByZXNlcnZlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBJUFdfSU5ESVJFQ1RfQUREUl9NQVNLICh+MHgzdWwpCiAKQEAgLTE5NjYsMTQgKzE5NjYsMTQgQEAKIAl1OCBsZW47CiAJdTE2IHJlc2VydmVkOwogCXUzMiAqcGFyYW07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsJLyogWFhYICovCit9IF9fcGFja2VkOwkvKiBYWFggKi8KIAogc3RydWN0IGNtZGxvZ19ob3N0X2NtZCB7CiAJdTggY21kOwogCXU4IGxlbjsKIAlfX2xlMTYgcmVzZXJ2ZWQ7CiAJY2hhciBwYXJhbVsxMjRdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXB3X2NtZF9sb2cgewogCXVuc2lnbmVkIGxvbmcgamlmZmllczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwdy5oCmluZGV4IDI4NGIwZTQuLjcwZjU1ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHcuaApAQCAtMTU0LDcgKzE1NCw3IEBACiAJdTggY3RybDsJCS8qIGFsd2F5cyAweDAzICovCiAJdTggb3VpW1A4MDIxMV9PVUlfTEVOXTsJLyogb3JnYW5pemF0aW9uYWwgdW5pdmVyc2FsIGlkICovCiAKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBTTkFQX1NJWkUgc2l6ZW9mKHN0cnVjdCBsaWJpcHdfc25hcF9oZHIpCiAKQEAgLTMyMyw3ICszMjMsNyBAQAogCXU4IGtleXNbV0VQX0tFWVNdW1NDTV9LRVlfTEVOXTsKIAl1OCBsZXZlbDsKIAl1MTYgZmxhZ3M7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qCiAKQEAgLTM0Nyw3ICszNDcsNyBAQAogCV9fbGUxNiBkdXJhdGlvbl9pZDsKIAl1OCBhZGRyMVtFVEhfQUxFTl07CiAJdTggcGF5bG9hZFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGxpYmlwd19oZHJfMmFkZHIgewogCV9fbGUxNiBmcmFtZV9jdGw7CkBAIC0zNTUsNyArMzU1LDcgQEAKIAl1OCBhZGRyMVtFVEhfQUxFTl07CiAJdTggYWRkcjJbRVRIX0FMRU5dOwogCXU4IHBheWxvYWRbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBsaWJpcHdfaGRyXzNhZGRyIHsKIAlfX2xlMTYgZnJhbWVfY3RsOwpAQCAtMzY1LDcgKzM2NSw3IEBACiAJdTggYWRkcjNbRVRIX0FMRU5dOwogCV9fbGUxNiBzZXFfY3RsOwogCXU4IHBheWxvYWRbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBsaWJpcHdfaGRyXzRhZGRyIHsKIAlfX2xlMTYgZnJhbWVfY3RsOwpAQCAtMzc2LDcgKzM3Niw3IEBACiAJX19sZTE2IHNlcV9jdGw7CiAJdTggYWRkcjRbRVRIX0FMRU5dOwogCXU4IHBheWxvYWRbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBsaWJpcHdfaGRyXzNhZGRycW9zIHsKIAlfX2xlMTYgZnJhbWVfY3RsOwpAQCAtMzg3LDEzICszODcsMTMgQEAKIAlfX2xlMTYgc2VxX2N0bDsKIAl1OCBwYXlsb2FkWzBdOwogCV9fbGUxNiBxb3NfY3RsOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbGliaXB3X2luZm9fZWxlbWVudCB7CiAJdTggaWQ7CiAJdTggbGVuOwogCXU4IGRhdGFbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qCiAgKiBUaGVzZSBhcmUgdGhlIGRhdGEgdHlwZXMgdGhhdCBjYW4gbWFrZSB1cCBtYW5hZ2VtZW50IHBhY2tldHMKQEAgLTQwNiw3ICs0MDYsNyBAQAogCXUxNiBsaXN0ZW5faW50ZXJ2YWw7CiAJc3RydWN0IHsKIAkJdTE2IGFzc29jaWF0aW9uX2lkOjE0LCByZXNlcnZlZDoyOwotCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCX0gX19wYWNrZWQ7CiAJdTMyIHRpbWVfc3RhbXBbMl07CiAJdTE2IHJlYXNvbjsKIAl1MTYgc3RhdHVzOwpAQCAtNDE5LDcgKzQxOSw3IEBACiAJX19sZTE2IHN0YXR1czsKIAkvKiBjaGFsbGVuZ2UgKi8KIAlzdHJ1Y3QgbGliaXB3X2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBsaWJpcHdfY2hhbm5lbF9zd2l0Y2ggewogCXU4IGlkOwpAQCAtNDI3LDcgKzQyNyw3IEBACiAJdTggbW9kZTsKIAl1OCBjaGFubmVsOwogCXU4IGNvdW50OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbGliaXB3X2FjdGlvbiB7CiAJc3RydWN0IGxpYmlwd19oZHJfM2FkZHIgaGVhZGVyOwpAQCAtNDQxLDEyICs0NDEsMTIgQEAKIAkJc3RydWN0IGxpYmlwd19jaGFubmVsX3N3aXRjaCBjaGFubmVsX3N3aXRjaDsKIAogCX0gZm9ybWF0OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbGliaXB3X2Rpc2Fzc29jIHsKIAlzdHJ1Y3QgbGliaXB3X2hkcl8zYWRkciBoZWFkZXI7CiAJX19sZTE2IHJlYXNvbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogQWxpYXMgZGVhdXRoIGZvciBkaXNhc3NvYyAqLwogI2RlZmluZSBsaWJpcHdfZGVhdXRoIGxpYmlwd19kaXNhc3NvYwpAQCAtNDU1LDcgKzQ1NSw3IEBACiAJc3RydWN0IGxpYmlwd19oZHJfM2FkZHIgaGVhZGVyOwogCS8qIFNTSUQsIHN1cHBvcnRlZCByYXRlcyAqLwogCXN0cnVjdCBsaWJpcHdfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGxpYmlwd19wcm9iZV9yZXNwb25zZSB7CiAJc3RydWN0IGxpYmlwd19oZHJfM2FkZHIgaGVhZGVyOwpAQCAtNDY1LDcgKzQ2NSw3IEBACiAJLyogU1NJRCwgc3VwcG9ydGVkIHJhdGVzLCBGSCBwYXJhbXMsIERTIHBhcmFtcywKIAkgKiBDRiBwYXJhbXMsIElCU1MgcGFyYW1zLCBUSU0gKGlmIGJlYWNvbiksIFJTTiAqLwogCXN0cnVjdCBsaWJpcHdfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogQWxpYXMgYmVhY29uIGZvciBwcm9iZV9yZXNwb25zZSAqLwogI2RlZmluZSBsaWJpcHdfYmVhY29uIGxpYmlwd19wcm9iZV9yZXNwb25zZQpAQCAtNDc2LDcgKzQ3Niw3IEBACiAJX19sZTE2IGxpc3Rlbl9pbnRlcnZhbDsKIAkvKiBTU0lELCBzdXBwb3J0ZWQgcmF0ZXMsIFJTTiAqLwogCXN0cnVjdCBsaWJpcHdfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGxpYmlwd19yZWFzc29jX3JlcXVlc3QgewogCXN0cnVjdCBsaWJpcHdfaGRyXzNhZGRyIGhlYWRlcjsKQEAgLTQ4NCw3ICs0ODQsNyBAQAogCV9fbGUxNiBsaXN0ZW5faW50ZXJ2YWw7CiAJdTggY3VycmVudF9hcFtFVEhfQUxFTl07CiAJc3RydWN0IGxpYmlwd19pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbGliaXB3X2Fzc29jX3Jlc3BvbnNlIHsKIAlzdHJ1Y3QgbGliaXB3X2hkcl8zYWRkciBoZWFkZXI7CkBAIC00OTMsNyArNDkzLDcgQEAKIAlfX2xlMTYgYWlkOwogCS8qIHN1cHBvcnRlZCByYXRlcyAqLwogCXN0cnVjdCBsaWJpcHdfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGxpYmlwd190eGIgewogCXU4IG5yX2ZyYWdzOwpAQCAtNTU1LDE5ICs1NTUsMTkgQEAKIAl1OCBxdWlfc3VidHlwZTsKIAl1OCB2ZXJzaW9uOwogCXU4IGFjX2luZm87Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBsaWJpcHdfcW9zX2FjX3BhcmFtZXRlciB7CiAJdTggYWNpX2FpZnNuOwogCXU4IGVjd19taW5fbWF4OwogCV9fbGUxNiB0eF9vcF9saW1pdDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGxpYmlwd19xb3NfcGFyYW1ldGVyX2luZm8gewogCXN0cnVjdCBsaWJpcHdfcW9zX2luZm9ybWF0aW9uX2VsZW1lbnQgaW5mb19lbGVtZW50OwogCXU4IHJlc2VydmVkOwogCXN0cnVjdCBsaWJpcHdfcW9zX2FjX3BhcmFtZXRlciBhY19wYXJhbXNfcmVjb3JkW1FPU19RVUVVRV9OVU1dOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbGliaXB3X3Fvc19wYXJhbWV0ZXJzIHsKIAlfX2xlMTYgY3dfbWluW1FPU19RVUVVRV9OVU1dOwpAQCAtNTc1LDcgKzU3NSw3IEBACiAJdTggYWlmc1tRT1NfUVVFVUVfTlVNXTsKIAl1OCBmbGFnW1FPU19RVUVVRV9OVU1dOwogCV9fbGUxNiB0eF9vcF9saW1pdFtRT1NfUVVFVUVfTlVNXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGxpYmlwd19xb3NfZGF0YSB7CiAJc3RydWN0IGxpYmlwd19xb3NfcGFyYW1ldGVycyBwYXJhbWV0ZXJzOwpAQCAtNTg4LDcgKzU4OCw3IEBACiBzdHJ1Y3QgbGliaXB3X3RpbV9wYXJhbWV0ZXJzIHsKIAl1OCB0aW1fY291bnQ7CiAJdTggdGltX3BlcmlvZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTYwNiw3ICs2MDYsNyBAQAogCV9fbGU2NCBzdGFydF90aW1lOwogCV9fbGUxNiBkdXJhdGlvbjsKIAl1OCBtYXA7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIGVudW0gewkJCQkvKiBsaWJpcHdfbWVhc3VyZW1lbnRfcmVxdWVzdC5tb2RlICovCiAJLyogQml0IDAgaXMgcmVzZXJ2ZWQgKi8KQEAgLTYyNyw3ICs2MjcsNyBAQAogCXU4IGNoYW5uZWw7CiAJX19sZTY0IHN0YXJ0X3RpbWU7CiAJX19sZTE2IGR1cmF0aW9uOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbGliaXB3X21lYXN1cmVtZW50X3JlcXVlc3QgewogCXN0cnVjdCBsaWJpcHdfaW5mb19lbGVtZW50IGllOwpAQCAtNjM1LDcgKzYzNSw3IEBACiAJdTggbW9kZTsKIAl1OCB0eXBlOwogCXN0cnVjdCBsaWJpcHdfbWVhc3VyZW1lbnRfcGFyYW1zIHBhcmFtc1swXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGxpYmlwd19tZWFzdXJlbWVudF9yZXBvcnQgewogCXN0cnVjdCBsaWJpcHdfaW5mb19lbGVtZW50IGllOwpAQCAtNjQ1LDE3ICs2NDUsMTcgQEAKIAl1bmlvbiB7CiAJCXN0cnVjdCBsaWJpcHdfYmFzaWNfcmVwb3J0IGJhc2ljWzBdOwogCX0gdTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGxpYmlwd190cGNfcmVwb3J0IHsKIAl1OCB0cmFuc21pdF9wb3dlcjsKIAl1OCBsaW5rX21hcmdpbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGxpYmlwd19jaGFubmVsX21hcCB7CiAJdTggY2hhbm5lbDsKIAl1OCBtYXA7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBsaWJpcHdfaWJzc19kZnMgewogCXN0cnVjdCBsaWJpcHdfaW5mb19lbGVtZW50IGllOwpAQCAtNjY4LDE0ICs2NjgsMTQgQEAKIAl1OCBtb2RlOwogCXU4IGNoYW5uZWw7CiAJdTggY291bnQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBsaWJpcHdfcXVpZXQgewogCXU4IGNvdW50OwogCXU4IHBlcmlvZDsKIAl1OCBkdXJhdGlvbjsKIAl1OCBvZmZzZXQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBsaWJpcHdfbmV0d29yayB7CiAJLyogVGhlc2UgZW50cmllcyBhcmUgdXNlZCB0byBpZGVudGlmeSBhIHVuaXF1ZSBuZXR3b3JrICovCkBAIC04MjgsNyArODI4LDYgQEAKIAlpbnQgaG9zdF9zdHJpcF9pdl9pY3Y7CiAKIAlpbnQgaG9zdF9vcGVuX2ZyYWc7Ci0JaW50IGhvc3RfYnVpbGRfaXY7CiAJaW50IGllZWU4MDJfMXg7CQkvKiBpcyBJRUVFIDgwMi4xWCB1c2VkICovCiAKIAkvKiBXUEEgZGF0YSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfbW9kdWxlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19tb2R1bGUuYwppbmRleCA1NTk2NTQwLi4zMmRlZTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19tb2R1bGUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19tb2R1bGUuYwpAQCAtNjIsOCArNjIsOCBAQAogTU9EVUxFX0FVVEhPUihEUlZfQ09QWVJJR0hUKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotc3RydWN0IGNmZzgwMjExX29wcyBsaWJpcHdfY29uZmlnX29wcyA9IHsgfTsKLXZvaWQgKmxpYmlwd193aXBoeV9wcml2aWQgPSAmbGliaXB3X3dpcGh5X3ByaXZpZDsKK3N0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfb3BzIGxpYmlwd19jb25maWdfb3BzID0geyB9Oworc3RhdGljIHZvaWQgKmxpYmlwd193aXBoeV9wcml2aWQgPSAmbGliaXB3X3dpcGh5X3ByaXZpZDsKIAogc3RhdGljIGludCBsaWJpcHdfbmV0d29ya3NfYWxsb2NhdGUoc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd190eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfdHguYwppbmRleCBkYThiZWFjLi4wMWM4OGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd190eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3R4LmMKQEAgLTI2MCw3ICsyNjAsNyBAQAogCWludCBpLCBieXRlc19wZXJfZnJhZywgbnJfZnJhZ3MsIGJ5dGVzX2xhc3RfZnJhZywgZnJhZ19zaXplLAogCSAgICBydHNfcmVxdWlyZWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZW5jcnlwdCwgaG9zdF9lbmNyeXB0LCBob3N0X2VuY3J5cHRfbXNkdSwgaG9zdF9idWlsZF9pdjsKKwlpbnQgZW5jcnlwdCwgaG9zdF9lbmNyeXB0LCBob3N0X2VuY3J5cHRfbXNkdTsKIAlfX2JlMTYgZXRoZXJfdHlwZTsKIAlpbnQgYnl0ZXMsIGZjLCBoZHJfbGVuOwogCXN0cnVjdCBza19idWZmICpza2JfZnJhZzsKQEAgLTMwMSw3ICszMDEsNiBAQAogCiAJaG9zdF9lbmNyeXB0ID0gaWVlZS0+aG9zdF9lbmNyeXB0ICYmIGVuY3J5cHQgJiYgY3J5cHQ7CiAJaG9zdF9lbmNyeXB0X21zZHUgPSBpZWVlLT5ob3N0X2VuY3J5cHRfbXNkdSAmJiBlbmNyeXB0ICYmIGNyeXB0OwotCWhvc3RfYnVpbGRfaXYgPSBpZWVlLT5ob3N0X2J1aWxkX2l2ICYmIGVuY3J5cHQgJiYgY3J5cHQ7CiAKIAlpZiAoIWVuY3J5cHQgJiYgaWVlZS0+aWVlZTgwMl8xeCAmJgogCSAgICBpZWVlLT5kcm9wX3VuZW5jcnlwdGVkICYmIGV0aGVyX3R5cGUgIT0gaHRvbnMoRVRIX1BfUEFFKSkgewpAQCAtMzEzLDcgKzMxMiw3IEBACiAJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIGRlc3QsIEVUSF9BTEVOKTsKIAlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChza2IsIEVUSF9BTEVOLCBzcmMsIEVUSF9BTEVOKTsKIAotCWlmIChob3N0X2VuY3J5cHQgfHwgaG9zdF9idWlsZF9pdikKKwlpZiAoaG9zdF9lbmNyeXB0KQogCQlmYyA9IElFRUU4MDIxMV9GVFlQRV9EQVRBIHwgSUVFRTgwMjExX1NUWVBFX0RBVEEgfAogCQkgICAgSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEOwogCWVsc2UKQEAgLTQ2Nyw3ICs0NjYsNyBAQAogCWZvciAoOyBpIDwgbnJfZnJhZ3M7IGkrKykgewogCQlza2JfZnJhZyA9IHR4Yi0+ZnJhZ21lbnRzW2ldOwogCi0JCWlmIChob3N0X2VuY3J5cHQgfHwgaG9zdF9idWlsZF9pdikKKwkJaWYgKGhvc3RfZW5jcnlwdCkKIAkJCXNrYl9yZXNlcnZlKHNrYl9mcmFnLAogCQkJCSAgICBjcnlwdC0+b3BzLT5leHRyYV9tcGR1X3ByZWZpeF9sZW4pOwogCkBAIC01MDIsMTUgKzUwMSw2IEBACiAJCSAqIHRvIGluc2VydCB0aGUgSVYgYmV0d2VlbiB0aGUgaGVhZGVyIGFuZCB0aGUgcGF5bG9hZCAqLwogCQlpZiAoaG9zdF9lbmNyeXB0KQogCQkJbGliaXB3X2VuY3J5cHRfZnJhZ21lbnQoaWVlZSwgc2tiX2ZyYWcsIGhkcl9sZW4pOwotCQllbHNlIGlmIChob3N0X2J1aWxkX2l2KSB7Ci0JCQlhdG9taWNfaW5jKCZjcnlwdC0+cmVmY250KTsKLQkJCWlmIChjcnlwdC0+b3BzLT5idWlsZF9pdikKLQkJCQljcnlwdC0+b3BzLT5idWlsZF9pdihza2JfZnJhZywgaGRyX2xlbiwKLQkJCQkgICAgICBpZWVlLT5zZWMua2V5c1tpZWVlLT5zZWMuYWN0aXZlX2tleV0sCi0JCQkJICAgICAgaWVlZS0+c2VjLmtleV9zaXplc1tpZWVlLT5zZWMuYWN0aXZlX2tleV0sCi0JCQkJICAgICAgY3J5cHQtPnByaXYpOwotCQkJYXRvbWljX2RlYygmY3J5cHQtPnJlZmNudCk7Ci0JCX0KIAogCQlpZiAoaWVlZS0+Y29uZmlnICYKIAkJICAgIChDRkdfTElCSVBXX0NPTVBVVEVfRkNTIHwgQ0ZHX0xJQklQV19SRVNFUlZFX0ZDUykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd193eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfd3guYwppbmRleCAzNjMzYzY2Li5kN2JkNmNmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfd3guYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd193eC5jCkBAIC0zMjAsNyArMzIwLDcgQEAKIAl9OwogCWludCBpLCBrZXksIGtleV9wcm92aWRlZCwgbGVuOwogCXN0cnVjdCBsaWI4MDIxMV9jcnlwdF9kYXRhICoqY3J5cHQ7Ci0JaW50IGhvc3RfY3J5cHRvID0gaWVlZS0+aG9zdF9lbmNyeXB0IHx8IGllZWUtPmhvc3RfZGVjcnlwdCB8fCBpZWVlLT5ob3N0X2J1aWxkX2l2OworCWludCBob3N0X2NyeXB0byA9IGllZWUtPmhvc3RfZW5jcnlwdCB8fCBpZWVlLT5ob3N0X2RlY3J5cHQ7CiAJREVDTEFSRV9TU0lEX0JVRihzc2lkKTsKIAogCUxJQklQV19ERUJVR19XWCgiU0VUX0VOQ09ERVxuIik7CkBAIC00MTEsMTAgKzQxMSw2IEBACiAKIAkvKiBJZiBhIG5ldyBrZXkgd2FzIHByb3ZpZGVkLCBzZXQgaXQgdXAgKi8KIAlpZiAoZXJxLT5sZW5ndGggPiAwKSB7Ci0jaWZkZWYgQ09ORklHX0xJQklQV19ERUJVRwotCQlERUNMQVJFX1NTSURfQlVGKHNzaWQpOwotI2VuZGlmCi0KIAkJbGVuID0gZXJxLT5sZW5ndGggPD0gNSA/IDUgOiAxMzsKIAkJbWVtY3B5KHNlYy5rZXlzW2tleV0sIGtleWJ1ZiwgZXJxLT5sZW5ndGgpOwogCQlpZiAobGVuID4gZXJxLT5sZW5ndGgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL0tjb25maWcKaW5kZXggZGM4ZWQxNS4uYTUxZTRkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvS2NvbmZpZwpAQCAtMzAsOSArMzAsMTEgQEAKIAogY29uZmlnIElXTFdJRklfREVCVUdGUwogICAgICAgICBib29sICJpd2xhZ24gZGVidWdmcyBzdXBwb3J0IgotICAgICAgICBkZXBlbmRzIG9uIElXTFdJRkkgJiYgSVdMV0lGSV9ERUJVRyAmJiBNQUM4MDIxMV9ERUJVR0ZTCisgICAgICAgIGRlcGVuZHMgb24gSVdMV0lGSSAmJiBNQUM4MDIxMV9ERUJVR0ZTCiAgICAgICAgIC0tLWhlbHAtLS0KLQkgIEVuYWJsZSBjcmVhdGlvbiBvZiBkZWJ1Z2ZzIGZpbGVzIGZvciB0aGUgaXdsd2lmaSBkcml2ZXJzLgorCSAgRW5hYmxlIGNyZWF0aW9uIG9mIGRlYnVnZnMgZmlsZXMgZm9yIHRoZSBpd2x3aWZpIGRyaXZlcnMuIFRoaXMKKwkgIGlzIGEgbG93LWltcGFjdCBvcHRpb24gdGhhdCBhbGxvd3MgZ2V0dGluZyBpbnNpZ2h0IGludG8gdGhlCisJICBkcml2ZXIncyBzdGF0ZSBhdCBydW50aW1lLgogCiBjb25maWcgSVdMV0lGSV9ERVZJQ0VfVFJBQ0lORwogCWJvb2wgIml3bHdpZmkgZGV2aWNlIGFjY2VzcyB0cmFjaW5nIgpAQCAtODUsMTAgKzg3LDE1IEBACiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIEludGVsIFdpcmVsZXNzIFdpRmkgTGluayA0OTY1QUdOCiAKIGNvbmZpZyBJV0w1MDAwCi0JYm9vbCAiSW50ZWwgV2lyZWxlc3MgV2lGaSA1MDAwQUdOOyBJbnRlbCBXaUZpIExpbmsgMTAwMCwgNjAwMCwgYW5kIDYwNTAgU2VyaWVzIgorCWJvb2wgIkludGVsIFdpcmVsZXNzLU4vQWR2YW5jZWQtTi9VbHRpbWF0ZS1OIFdpRmkgTGluayIKIAlkZXBlbmRzIG9uIElXTEFHTgogCS0tLWhlbHAtLS0KLQkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgSW50ZWwgV2lyZWxlc3MgV2lGaSBMaW5rIDUwMDBBR04gRmFtaWx5CisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHVzZSB3aXRoIHRoZSBmb2xsb3dpbmcgaGFyZHdhcmU6CisJCUludGVsIFdpcmVsZXNzIFdpRmkgTGluayA2MjUwQUdOIEFkYXB0ZXIKKwkJSW50ZWwgNjAwMCBTZXJpZXMgV2ktRmkgQWRhcHRlcnMgKDYyMDBBR04gYW5kIDYzMDBBR04pCisJCUludGVsIFdpRmkgTGluayAxMDAwQkdOCisJCUludGVsIFdpcmVsZXNzIFdpRmkgNTE1MEFHTgorCQlJbnRlbCBXaXJlbGVzcyBXaUZpIDUxMDBBR04sIDUzMDBBR04sIGFuZCA1MzUwQUdOCiAKIGNvbmZpZyBJV0wzOTQ1CiAJdHJpc3RhdGUgIkludGVsIFBSTy9XaXJlbGVzcyAzOTQ1QUJHL0JHIE5ldHdvcmsgQ29ubmVjdGlvbiAoaXdsMzk0NSkiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9NYWtlZmlsZQppbmRleCA3YzcyMzUzLi43MjhiYjg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvTWFrZWZpbGUKQEAgLTEsNiArMSw2IEBACiBvYmotJChDT05GSUdfSVdMV0lGSSkJKz0gaXdsY29yZS5vCiBpd2xjb3JlLW9ianMgCQk6PSBpd2wtY29yZS5vIGl3bC1lZXByb20ubyBpd2wtaGNtZC5vIGl3bC1wb3dlci5vCi1pd2xjb3JlLW9ianMgCQkrPSBpd2wtcngubyBpd2wtdHgubyBpd2wtc3RhLm8gaXdsLWNhbGliLm8KK2l3bGNvcmUtb2JqcyAJCSs9IGl3bC1yeC5vIGl3bC10eC5vIGl3bC1zdGEubwogaXdsY29yZS1vYmpzIAkJKz0gaXdsLXNjYW4ubyBpd2wtbGVkLm8KIGl3bGNvcmUtJChDT05GSUdfSVdMV0lGSV9ERUJVR0ZTKSArPSBpd2wtZGVidWdmcy5vCiBpd2xjb3JlLSQoQ09ORklHX0lXTFdJRklfREVWSUNFX1RSQUNJTkcpICs9IGl3bC1kZXZ0cmFjZS5vCkBAIC0xMSw3ICsxMSw3IEBACiBvYmotJChDT05GSUdfSVdMQUdOKQkrPSBpd2xhZ24ubwogaXdsYWduLW9ianMJCTo9IGl3bC1hZ24ubyBpd2wtYWduLXJzLm8gaXdsLWFnbi1sZWQubyBpd2wtYWduLWljdC5vCiBpd2xhZ24tb2JqcwkJKz0gaXdsLWFnbi11Y29kZS5vIGl3bC1hZ24taGNtZC5vIGl3bC1hZ24tdHgubwotaXdsYWduLW9ianMJCSs9IGl3bC1hZ24tbGliLm8KK2l3bGFnbi1vYmpzCQkrPSBpd2wtYWduLWxpYi5vIGl3bC1hZ24tcngubyBpd2wtYWduLWNhbGliLm8KIGl3bGFnbi0kKENPTkZJR19JV0xXSUZJX0RFQlVHRlMpICs9IGl3bC1hZ24tZGVidWdmcy5vCiAKIGl3bGFnbi0kKENPTkZJR19JV0w0OTY1KSArPSBpd2wtNDk2NS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0xMDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0xMDAwLmMKaW5kZXggNmJlMjk5Mi4uODg0ODMzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTEwMDAuYwpAQCAtMTI5LDggKzEyOSw4IEBACiAJCQlwcml2LT5jZmctPm51bV9vZl9xdWV1ZXMgKgogCQkJc2l6ZW9mKHN0cnVjdCBpd2xhZ25fc2NkX2JjX3RibCk7CiAJcHJpdi0+aHdfcGFyYW1zLnRmZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBpd2xfdGZkKTsKLQlwcml2LT5od19wYXJhbXMubWF4X3N0YXRpb25zID0gSVdMNTAwMF9TVEFUSU9OX0NPVU5UOwotCXByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQgPSBJV0w1MDAwX0JST0FEQ0FTVF9JRDsKKwlwcml2LT5od19wYXJhbXMubWF4X3N0YXRpb25zID0gSVdMQUdOX1NUQVRJT05fQ09VTlQ7CisJcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZCA9IElXTEFHTl9CUk9BRENBU1RfSUQ7CiAKIAlwcml2LT5od19wYXJhbXMubWF4X2RhdGFfc2l6ZSA9IElXTEFHTl9SVENfREFUQV9TSVpFOwogCXByaXYtPmh3X3BhcmFtcy5tYXhfaW5zdF9zaXplID0gSVdMQUdOX1JUQ19JTlNUX1NJWkU7CkBAIC0xNTcsNiArMTU3LDEwIEBACiAJCQlCSVQoSVdMX0NBTElCX1RYX0lRKSAJCXwKIAkJCUJJVChJV0xfQ0FMSUJfVFhfSVFfUEVSRCkJfAogCQkJQklUKElXTF9DQUxJQl9CQVNFX0JBTkQpOworCWlmIChwcml2LT5jZmctPm5lZWRfZGNfY2FsaWIpCisJCXByaXYtPmh3X3BhcmFtcy5jYWxpYl9pbml0X2NmZyB8PSBCSVQoSVdMX0NBTElCX0RDKTsKKworCXByaXYtPmh3X3BhcmFtcy5iZWFjb25fdGltZV90c2ZfYml0cyA9IElXTEFHTl9FWFRfQkVBQ09OX1RJTUVfUE9TOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMTMsMTQgKzIxNywxOCBAQAogCQkuc2V0X2N0X2tpbGwgPSBpd2wxMDAwX3NldF9jdF90aHJlc2hvbGQsCiAJIH0sCiAJLm1hbmFnZV9pYnNzX3N0YXRpb24gPSBpd2xhZ25fbWFuYWdlX2lic3Nfc3RhdGlvbiwKKwkudXBkYXRlX2JjYXN0X3N0YXRpb24gPSBpd2xfdXBkYXRlX2JjYXN0X3N0YXRpb24sCiAJLmRlYnVnZnNfb3BzID0gewogCQkucnhfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV9yeF9zdGF0c19yZWFkLAogCQkudHhfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV90eF9zdGF0c19yZWFkLAogCQkuZ2VuZXJhbF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX2dlbmVyYWxfc3RhdHNfcmVhZCwKKwkJLmJ0X3N0YXRzX3JlYWQgPSBpd2xfdWNvZGVfYnRfc3RhdHNfcmVhZCwKIAl9LAogCS5yZWNvdmVyX2Zyb21fdHhfc3RhbGwgPSBpd2xfYmdfbW9uaXRvcl9yZWNvdmVyLAogCS5jaGVja19wbGNwX2hlYWx0aCA9IGl3bF9nb29kX3BsY3BfaGVhbHRoLAogCS5jaGVja19hY2tfaGVhbHRoID0gaXdsX2dvb2RfYWNrX2hlYWx0aCwKKwkudHhmaWZvX2ZsdXNoID0gaXdsYWduX3R4Zmlmb19mbHVzaCwKKwkuZGV2X3R4Zmlmb19mbHVzaCA9IGl3bGFnbl9kZXZfdHhmaWZvX2ZsdXNoLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfb3BzIGl3bDEwMDBfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWRlYnVnZnMuYwppbmRleCA2YTljNjRhLi5lZjA4MzViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWRlYnVnZnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWRlYnVnZnMuYwpAQCAtMjgsNiArMjgsMjggQEAKIAogI2luY2x1ZGUgIml3bC0zOTQ1LWRlYnVnZnMuaCIKIAorCitzdGF0aWMgaW50IGl3bDM5NDVfc3RhdGlzdGljc19mbGFnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY2hhciAqYnVmLCBpbnQgYnVmc3opCit7CisJaW50IHAgPSAwOworCisJcCArPSBzY25wcmludGYoYnVmICsgcCwgYnVmc3ogLSBwLCAiU3RhdGlzdGljcyBGbGFnKDB4JVgpOlxuIiwKKwkJICAgICAgIGxlMzJfdG9fY3B1KHByaXYtPl8zOTQ1LnN0YXRpc3RpY3MuZmxhZykpOworCWlmIChsZTMyX3RvX2NwdShwcml2LT5fMzk0NS5zdGF0aXN0aWNzLmZsYWcpICYKKwkJCVVDT0RFX1NUQVRJU1RJQ1NfQ0xFQVJfTVNLKQorCQlwICs9IHNjbnByaW50ZihidWYgKyBwLCBidWZzeiAtIHAsCisJCQkgICAgICAgIlx0U3RhdGlzdGljcyBoYXZlIGJlZW4gY2xlYXJlZFxuIik7CisJcCArPSBzY25wcmludGYoYnVmICsgcCwgYnVmc3ogLSBwLCAiXHRPcGVyYXRpb25hbCBGcmVxdWVuY3k6ICVzXG4iLAorCQkgICAgICAgKGxlMzJfdG9fY3B1KHByaXYtPl8zOTQ1LnN0YXRpc3RpY3MuZmxhZykgJgorCQkJVUNPREVfU1RBVElTVElDU19GUkVRVUVOQ1lfTVNLKQorCQkJPyAiMi40IEdIeiIgOiAiNS4yIEdIeiIpOworCXAgKz0gc2NucHJpbnRmKGJ1ZiArIHAsIGJ1ZnN6IC0gcCwgIlx0VEdqIE5hcnJvdyBCYW5kOiAlc1xuIiwKKwkJICAgICAgIChsZTMyX3RvX2NwdShwcml2LT5fMzk0NS5zdGF0aXN0aWNzLmZsYWcpICYKKwkJCVVDT0RFX1NUQVRJU1RJQ1NfTkFSUk9XX0JBTkRfTVNLKQorCQkJPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKKwlyZXR1cm4gcDsKK30KKwogc3NpemVfdCBpd2wzOTQ1X3Vjb2RlX3J4X3N0YXRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJICAgIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKIAkJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCkBAIC03MCw3ICs5Miw3IEBACiAJbWF4X2NjayA9ICZwcml2LT5fMzk0NS5tYXhfZGVsdGEucnguY2NrOwogCW1heF9nZW5lcmFsID0gJnByaXYtPl8zOTQ1Lm1heF9kZWx0YS5yeC5nZW5lcmFsOwogCi0JcG9zICs9IGl3bF9kYmdmc19zdGF0aXN0aWNzX2ZsYWcocHJpdiwgYnVmLCBidWZzeik7CisJcG9zICs9IGl3bDM5NDVfc3RhdGlzdGljc19mbGFnKHByaXYsIGJ1ZiwgYnVmc3opOwogCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiUtMzJzICAgICBjdXJyZW50IgogCQkJICJhY3VtdWxhdGl2ZSAgICAgICBkZWx0YSAgICAgICAgIG1heFxuIiwKIAkJCSAiU3RhdGlzdGljc19SeCAtIE9GRE06Iik7CkBAIC0zMzEsNyArMzUzLDcgQEAKIAlhY2N1bV90eCA9ICZwcml2LT5fMzk0NS5hY2N1bV9zdGF0aXN0aWNzLnR4OwogCWRlbHRhX3R4ID0gJnByaXYtPl8zOTQ1LmRlbHRhX3N0YXRpc3RpY3MudHg7CiAJbWF4X3R4ID0gJnByaXYtPl8zOTQ1Lm1heF9kZWx0YS50eDsKLQlwb3MgKz0gaXdsX2RiZ2ZzX3N0YXRpc3RpY3NfZmxhZyhwcml2LCBidWYsIGJ1ZnN6KTsKKwlwb3MgKz0gaXdsMzk0NV9zdGF0aXN0aWNzX2ZsYWcocHJpdiwgYnVmLCBidWZzeik7CiAJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJS0zMnMgICAgIGN1cnJlbnQiCiAJCQkgImFjdW11bGF0aXZlICAgICAgIGRlbHRhICAgICAgICAgbWF4XG4iLAogCQkJICJTdGF0aXN0aWNzX1R4OiIpOwpAQCAtNDM4LDcgKzQ2MCw3IEBACiAJYWNjdW1fZGl2ID0gJnByaXYtPl8zOTQ1LmFjY3VtX3N0YXRpc3RpY3MuZ2VuZXJhbC5kaXY7CiAJZGVsdGFfZGl2ID0gJnByaXYtPl8zOTQ1LmRlbHRhX3N0YXRpc3RpY3MuZ2VuZXJhbC5kaXY7CiAJbWF4X2RpdiA9ICZwcml2LT5fMzk0NS5tYXhfZGVsdGEuZ2VuZXJhbC5kaXY7Ci0JcG9zICs9IGl3bF9kYmdmc19zdGF0aXN0aWNzX2ZsYWcocHJpdiwgYnVmLCBidWZzeik7CisJcG9zICs9IGl3bDM5NDVfc3RhdGlzdGljc19mbGFnKHByaXYsIGJ1ZiwgYnVmc3opOwogCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiUtMzJzICAgICBjdXJyZW50IgogCQkJICJhY3VtdWxhdGl2ZSAgICAgICBkZWx0YSAgICAgICAgIG1heFxuIiwKIAkJCSAiU3RhdGlzdGljc19HZW5lcmFsOiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1maC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1maC5oCmluZGV4IDA0MmY2YmMuLjJjOWVkMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtZmguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWZoLmgKQEAgLTE3NSwxMyArMTc1LDEzIEBACiBzdHJ1Y3QgaXdsMzk0NV90ZmRfdGIgewogCV9fbGUzMiBhZGRyOwogCV9fbGUzMiBsZW47Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpd2wzOTQ1X3RmZCB7CiAJX19sZTMyIGNvbnRyb2xfZmxhZ3M7CiAJc3RydWN0IGl3bDM5NDVfdGZkX3RiIHRic1s0XTsKIAl1OCBfX3BhZFsyOF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIAogI2VuZGlmIC8qIF9faXdsXzM5NDVfZmhfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWh3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWh3LmgKaW5kZXggOTFiY2I0ZS4uN2M3MzFhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtaHcuaApAQCAtOTYsNyArOTYsNyBAQAogCXU4IGdhaW5faW5kZXg7CQkvKiBpbmRleCBpbnRvIHBvd2VyIChnYWluKSBzZXR1cCB0YWJsZSAuLi4gKi8KIAlzOCBwb3dlcjsJCS8qIC4uLiBmb3IgdGhpcyBwd3IgbGV2ZWwgZm9yIHRoaXMgY2hubCBncm91cCAqLwogCXUxNiB2X2RldDsJCS8qIFBBIG91dHB1dCB2b2x0YWdlICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qCiAgKiBNYXBwaW5ncyBvZiBUeCBwb3dlciBsZXZlbHMgLT4gbm9taW5hbCByYWRpby9EU1AgZ2FpbiB0YWJsZSBpbmRleGVzLgpAQCAtMTE3LDcgKzExNyw3IEBACiAJdTggZ3JvdXBfY2hhbm5lbDsJLyogInJlcHJlc2VudGF0aXZlIiBjaGFubmVsICMgaW4gdGhpcyBiYW5kICovCiAJczE2IHRlbXBlcmF0dXJlOwkvKiBoL3cgdGVtcGVyYXR1cmUgYXQgZmFjdG9yeSBjYWxpYiB0aGlzIGJhbmQKIAkJCQkgKiAoc2lnbmVkKSAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKgogICogVGVtcGVyYXR1cmUtYmFzZWQgVHgtcG93ZXIgY29tcGVuc2F0aW9uIGRhdGEsIG5vdCBiYW5kLXNwZWNpZmljLgpAQCAtMTMxLDcgKzEzMSw3IEBACiAJdTMyIFRjOwogCXUzMiBUZDsKIAl1MzIgVGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qCiAgKiBFRVBST00gbWFwCkBAIC0yMTUsNyArMjE1LDcgQEAKIC8qIGFicy5vZnM6IDUxMiAqLwogCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbV90ZW1wZXJhdHVyZV9jb3JyIGNvcnJlY3Rpb25zOyAgLyogYWJzLm9mczogODMyICovCiAJdTggcmVzZXJ2ZWQxNlsxNzJdOwkvKiBmaWxsIG91dCB0byBmdWxsIDEwMjQgYnl0ZSBibG9jayAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIElXTDM5NDVfRUVQUk9NX0lNR19TSVpFIDEwMjQKIApAQCAtMjc0LDcgKzI3NCw3IEBACiAgKiBhbmQgJml3bDM5NDVfc2hhcmVkLnJ4X3JlYWRfcHRyWzBdIGlzIHByb3ZpZGVkIHRvIEZIX1JDU1JfUlBUUl9BRERSKDApICovCiBzdHJ1Y3QgaXdsMzk0NV9zaGFyZWQgewogCV9fbGUzMiB0eF9iYXNlX3B0cls4XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RhdGljIGlubGluZSB1OCBpd2wzOTQ1X2h3X2dldF9yYXRlKF9fbGUxNiByYXRlX25fZmxhZ3MpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKaW5kZXggYzQ0YTMwMy4uYTA3MzEwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYwpAQCAtMjc5LDggKzI3OSw4IEBACiAJCXEtPnJlYWRfcHRyID0gaXdsX3F1ZXVlX2luY193cmFwKHEtPnJlYWRfcHRyLCBxLT5uX2JkKSkgewogCiAJCXR4X2luZm8gPSAmdHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXTsKLQkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKHByaXYtPmh3LCB0eF9pbmZvLT5za2JbMF0pOwotCQl0eF9pbmZvLT5za2JbMF0gPSBOVUxMOworCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUocHJpdi0+aHcsIHR4X2luZm8tPnNrYik7CisJCXR4X2luZm8tPnNrYiA9IE5VTEw7CiAJCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9mcmVlX3RmZChwcml2LCB0eHEpOwogCX0KIApAQCAtMzE1LDcgKzMxNSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQih0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdLnNrYlswXSk7CisJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXS5za2IpOwogCWllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyhpbmZvKTsKIAogCS8qIEZpbGwgdGhlIE1SUiBjaGFpbiB3aXRoIHNvbWUgaW5mbyBhYm91dCBvbi1jaGlwIHJldHJhbnNtaXNzaW9ucyAqLwpAQCAtMzUyLDcgKzM1Miw3IEBACiAgKiAgUlggaGFuZGxlciBpbXBsZW1lbnRhdGlvbnMKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVR0ZTCiAvKgogICogIGJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uIG9mIGFsbCBzdGF0aXN0aWNzIGNvdW50ZXIgYXJlIGluIERXT1JECiAgKiAgRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgZm9yIGRlYnVnZ2luZywgZG8gbm90IGRlYWwgd2l0aApAQCAtNDA2LDYgKzQwNiwxMSBAQAogCXVuc2lnbmVkIGludCBwbGNwX21zZWM7CiAJdW5zaWduZWQgbG9uZyBwbGNwX3JlY2VpdmVkX2ppZmZpZXM7CiAKKwlpZiAocHJpdi0+Y2ZnLT5wbGNwX2RlbHRhX3RocmVzaG9sZCA9PQorCSAgICBJV0xfTUFYX1BMQ1BfRVJSX1RIUkVTSE9MRF9ESVNBQkxFKSB7CisJCUlXTF9ERUJVR19SQURJTyhwcml2LCAicGxjcF9lcnIgY2hlY2sgZGlzYWJsZWRcbiIpOworCQlyZXR1cm4gcmM7CisJfQogCW1lbWNweSgmY3VycmVudF9zdGF0LCBwa3QtPnUucmF3LCBzaXplb2Yoc3RydWN0CiAJCQlpd2wzOTQ1X25vdGlmX3N0YXRpc3RpY3MpKTsKIAkvKgpAQCAtNDYwLDcgKzQ2NSw3IEBACiAJSVdMX0RFQlVHX1JYKHByaXYsICJTdGF0aXN0aWNzIG5vdGlmaWNhdGlvbiByZWNlaXZlZCAoJWQgdnMgJWQpLlxuIiwKIAkJICAgICAoaW50KXNpemVvZihzdHJ1Y3QgaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzKSwKIAkJICAgICBsZTMyX3RvX2NwdShwa3QtPmxlbl9uX2ZsYWdzKSAmIEZIX1JTQ1NSX0ZSQU1FX1NJWkVfTVNLKTsKLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHRlMKIAlpd2wzOTQ1X2FjY3VtdWxhdGl2ZV9zdGF0aXN0aWNzKHByaXYsIChfX2xlMzIgKikmcGt0LT51LnJhdyk7CiAjZW5kaWYKIAlpd2xfcmVjb3Zlcl9mcm9tX3N0YXRpc3RpY3MocHJpdiwgcGt0KTsKQEAgLTQ3NSw3ICs0ODAsNyBAQAogCV9fbGUzMiAqZmxhZyA9IChfX2xlMzIgKikmcGt0LT51LnJhdzsKIAogCWlmIChsZTMyX3RvX2NwdSgqZmxhZykgJiBVQ09ERV9TVEFUSVNUSUNTX0NMRUFSX01TSykgewotI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUdGUwogCQltZW1zZXQoJnByaXYtPl8zOTQ1LmFjY3VtX3N0YXRpc3RpY3MsIDAsCiAJCQlzaXplb2Yoc3RydWN0IGl3bDM5NDVfbm90aWZfc3RhdGlzdGljcykpOwogCQltZW1zZXQoJnByaXYtPl8zOTQ1LmRlbHRhX3N0YXRpc3RpY3MsIDAsCkBAIC00OTQsMTU4ICs0OTksNiBAQAogICogTWlzYy4gaW50ZXJuYWwgc3RhdGUgYW5kIGhlbHBlciBmdW5jdGlvbnMKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi0KLS8qKgotICogaXdsMzk0NV9yZXBvcnRfZnJhbWUgLSBkdW1wIGZyYW1lIHRvIHN5c2xvZyBkdXJpbmcgZGVidWcgc2Vzc2lvbnMKLSAqCi0gKiBZb3UgbWF5IGhhY2sgdGhpcyBmdW5jdGlvbiB0byBzaG93IGRpZmZlcmVudCBhc3BlY3RzIG9mIHJlY2VpdmVkIGZyYW1lcywKLSAqIGluY2x1ZGluZyBzZWxlY3RpdmUgZnJhbWUgZHVtcHMuCi0gKiBncm91cDEwMCBwYXJhbWV0ZXIgc2VsZWN0cyB3aGV0aGVyIHRvIHNob3cgMSBvdXQgb2YgMTAwIGdvb2QgZnJhbWVzLgotICovCi1zdGF0aWMgdm9pZCBfaXdsMzk0NV9kYmdfcmVwb3J0X2ZyYW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJICAgICAgc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCwKLQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhlYWRlciwgaW50IGdyb3VwMTAwKQotewotCXUzMiB0b191czsKLQl1MzIgcHJpbnRfc3VtbWFyeSA9IDA7Ci0JdTMyIHByaW50X2R1bXAgPSAwOwkvKiBzZXQgdG8gMSB0byBkdW1wIGFsbCBmcmFtZXMnIGNvbnRlbnRzICovCi0JdTMyIGh1bmRyZWQgPSAwOwotCXUzMiBkYXRhZnJhbWUgPSAwOwotCV9fbGUxNiBmYzsKLQl1MTYgc2VxX2N0bDsKLQl1MTYgY2hhbm5lbDsKLQl1MTYgcGh5X2ZsYWdzOwotCXUxNiBsZW5ndGg7Ci0JdTE2IHN0YXR1czsKLQl1MTYgYmNuX3RtcjsKLQl1MzIgdHNmX2xvdzsKLQl1NjQgdHNmOwotCXU4IHJzc2k7Ci0JdTggYWdjOwotCXUxNiBzaWdfYXZnOwotCXUxNiBub2lzZV9kaWZmOwotCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX3N0YXRzICpyeF9zdGF0cyA9IElXTF9SWF9TVEFUUyhwa3QpOwotCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX2hkciAqcnhfaGRyID0gSVdMX1JYX0hEUihwa3QpOwotCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX2VuZCAqcnhfZW5kID0gSVdMX1JYX0VORChwa3QpOwotCXU4ICpkYXRhID0gSVdMX1JYX0RBVEEocGt0KTsKLQotCS8qIE1BQyBoZWFkZXIgKi8KLQlmYyA9IGhlYWRlci0+ZnJhbWVfY29udHJvbDsKLQlzZXFfY3RsID0gbGUxNl90b19jcHUoaGVhZGVyLT5zZXFfY3RybCk7Ci0KLQkvKiBtZXRhZGF0YSAqLwotCWNoYW5uZWwgPSBsZTE2X3RvX2NwdShyeF9oZHItPmNoYW5uZWwpOwotCXBoeV9mbGFncyA9IGxlMTZfdG9fY3B1KHJ4X2hkci0+cGh5X2ZsYWdzKTsKLQlsZW5ndGggPSBsZTE2X3RvX2NwdShyeF9oZHItPmxlbik7Ci0KLQkvKiBlbmQtb2YtZnJhbWUgc3RhdHVzIGFuZCB0aW1lc3RhbXAgKi8KLQlzdGF0dXMgPSBsZTMyX3RvX2NwdShyeF9lbmQtPnN0YXR1cyk7Ci0JYmNuX3RtciA9IGxlMzJfdG9fY3B1KHJ4X2VuZC0+YmVhY29uX3RpbWVzdGFtcCk7Ci0JdHNmX2xvdyA9IGxlNjRfdG9fY3B1KHJ4X2VuZC0+dGltZXN0YW1wKSAmIDB4MGZmZmZmZmZmOwotCXRzZiA9IGxlNjRfdG9fY3B1KHJ4X2VuZC0+dGltZXN0YW1wKTsKLQotCS8qIHNpZ25hbCBzdGF0aXN0aWNzICovCi0JcnNzaSA9IHJ4X3N0YXRzLT5yc3NpOwotCWFnYyA9IHJ4X3N0YXRzLT5hZ2M7Ci0Jc2lnX2F2ZyA9IGxlMTZfdG9fY3B1KHJ4X3N0YXRzLT5zaWdfYXZnKTsKLQlub2lzZV9kaWZmID0gbGUxNl90b19jcHUocnhfc3RhdHMtPm5vaXNlX2RpZmYpOwotCi0JdG9fdXMgPSAhY29tcGFyZV9ldGhlcl9hZGRyKGhlYWRlci0+YWRkcjEsIHByaXYtPm1hY19hZGRyKTsKLQotCS8qIGlmIGRhdGEgZnJhbWUgaXMgdG8gdXMgYW5kIGFsbCBpcyBnb29kLAotCSAqICAgKG9wdGlvbmFsbHkpIHByaW50IHN1bW1hcnkgZm9yIG9ubHkgMSBvdXQgb2YgZXZlcnkgMTAwICovCi0JaWYgKHRvX3VzICYmIChmYyAmIH5jcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpKSA9PQotCSAgICBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GUk9NRFMgfCBJRUVFODAyMTFfRlRZUEVfREFUQSkpIHsKLQkJZGF0YWZyYW1lID0gMTsKLQkJaWYgKCFncm91cDEwMCkKLQkJCXByaW50X3N1bW1hcnkgPSAxOwkvKiBwcmludCBlYWNoIGZyYW1lICovCi0JCWVsc2UgaWYgKHByaXYtPmZyYW1lY250X3RvX3VzIDwgMTAwKSB7Ci0JCQlwcml2LT5mcmFtZWNudF90b191cysrOwotCQkJcHJpbnRfc3VtbWFyeSA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlwcml2LT5mcmFtZWNudF90b191cyA9IDA7Ci0JCQlwcmludF9zdW1tYXJ5ID0gMTsKLQkJCWh1bmRyZWQgPSAxOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogcHJpbnQgc3VtbWFyeSBmb3IgYWxsIG90aGVyIGZyYW1lcyAqLwotCQlwcmludF9zdW1tYXJ5ID0gMTsKLQl9Ci0KLQlpZiAocHJpbnRfc3VtbWFyeSkgewotCQljaGFyICp0aXRsZTsKLQkJaW50IHJhdGU7Ci0KLQkJaWYgKGh1bmRyZWQpCi0JCQl0aXRsZSA9ICIxMDBGcmFtZXMiOwotCQllbHNlIGlmIChpZWVlODAyMTFfaGFzX3JldHJ5KGZjKSkKLQkJCXRpdGxlID0gIlJldHJ5IjsKLQkJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2Fzc29jX3Jlc3AoZmMpKQotCQkJdGl0bGUgPSAiQXNjUnNwIjsKLQkJZWxzZSBpZiAoaWVlZTgwMjExX2lzX3JlYXNzb2NfcmVzcChmYykpCi0JCQl0aXRsZSA9ICJSYXNSc3AiOwotCQllbHNlIGlmIChpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChmYykpIHsKLQkJCXRpdGxlID0gIlByYlJzcCI7Ci0JCQlwcmludF9kdW1wID0gMTsJLyogZHVtcCBmcmFtZSBjb250ZW50cyAqLwotCQl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19iZWFjb24oZmMpKSB7Ci0JCQl0aXRsZSA9ICJCZWFjb24iOwotCQkJcHJpbnRfZHVtcCA9IDE7CS8qIGR1bXAgZnJhbWUgY29udGVudHMgKi8KLQkJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfYXRpbShmYykpCi0JCQl0aXRsZSA9ICJBVElNIjsKLQkJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2F1dGgoZmMpKQotCQkJdGl0bGUgPSAiQXV0aCI7Ci0JCWVsc2UgaWYgKGllZWU4MDIxMV9pc19kZWF1dGgoZmMpKQotCQkJdGl0bGUgPSAiRGVBdXRoIjsKLQkJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2Rpc2Fzc29jKGZjKSkKLQkJCXRpdGxlID0gIkRpc0Fzc29jIjsKLQkJZWxzZQotCQkJdGl0bGUgPSAiRnJhbWUiOwotCi0JCXJhdGUgPSBpd2wzOTQ1X2h3cmF0ZV90b19wbGNwX2lkeChyeF9oZHItPnJhdGUpOwotCQlpZiAocmF0ZSA9PSAtMSkKLQkJCXJhdGUgPSAwOwotCQllbHNlCi0JCQlyYXRlID0gaXdsMzk0NV9yYXRlc1tyYXRlXS5pZWVlIC8gMjsKLQotCQkvKiBwcmludCBmcmFtZSBzdW1tYXJ5LgotCQkgKiBNQUMgYWRkcmVzc2VzIHNob3cganVzdCB0aGUgbGFzdCBieXRlIChmb3IgYnJldml0eSksCi0JCSAqICAgIGJ1dCB5b3UgY2FuIGhhY2sgaXQgdG8gc2hvdyBtb3JlLCBpZiB5b3UnZCBsaWtlIHRvLiAqLwotCQlpZiAoZGF0YWZyYW1lKQotCQkJSVdMX0RFQlVHX1JYKHByaXYsICIlczogbWhkPTB4JTA0eCwgZHN0PTB4JTAyeCwgIgotCQkJCSAgICAgImxlbj0ldSwgcnNzaT0lZCwgY2hubD0lZCwgcmF0ZT0lZCxcbiIsCi0JCQkJICAgICB0aXRsZSwgbGUxNl90b19jcHUoZmMpLCBoZWFkZXItPmFkZHIxWzVdLAotCQkJCSAgICAgbGVuZ3RoLCByc3NpLCBjaGFubmVsLCByYXRlKTsKLQkJZWxzZSB7Ci0JCQkvKiBzcmMvZHN0IGFkZHJlc3NlcyBhc3N1bWUgbWFuYWdlZCBtb2RlICovCi0JCQlJV0xfREVCVUdfUlgocHJpdiwgIiVzOiAweCUwNHgsIGRzdD0weCUwMngsICIKLQkJCQkgICAgICJzcmM9MHglMDJ4LCByc3NpPSV1LCB0aW09JWx1IHVzZWMsICIKLQkJCQkgICAgICJwaHk9MHglMDJ4LCBjaG5sPSVkXG4iLAotCQkJCSAgICAgdGl0bGUsIGxlMTZfdG9fY3B1KGZjKSwgaGVhZGVyLT5hZGRyMVs1XSwKLQkJCQkgICAgIGhlYWRlci0+YWRkcjNbNV0sIHJzc2ksCi0JCQkJICAgICB0c2ZfbG93IC0gcHJpdi0+c2Nhbl9zdGFydF90c2YsCi0JCQkJICAgICBwaHlfZmxhZ3MsIGNoYW5uZWwpOwotCQl9Ci0JfQotCWlmIChwcmludF9kdW1wKQotCQlpd2xfcHJpbnRfaGV4X2R1bXAocHJpdiwgSVdMX0RMX1JYLCBkYXRhLCBsZW5ndGgpOwotfQotCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2RiZ19yZXBvcnRfZnJhbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkgICAgICBzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0LAotCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyLCBpbnQgZ3JvdXAxMDApCi17Ci0JaWYgKGl3bF9nZXRfZGVidWdfbGV2ZWwocHJpdikgJiBJV0xfRExfUlgpCi0JCV9pd2wzOTQ1X2RiZ19yZXBvcnRfZnJhbWUocHJpdiwgcGt0LCBoZWFkZXIsIGdyb3VwMTAwKTsKLX0KLQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2wzOTQ1X2RiZ19yZXBvcnRfZnJhbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkgICAgICBzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0LAotCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyLCBpbnQgZ3JvdXAxMDApCi17Ci19Ci0jZW5kaWYKIAogLyogVGhpcyBpcyBuZWNlc3Nhcnkgb25seSBmb3IgYSBudW1iZXIgb2Ygc3RhdGlzdGljcywgc2VlIHRoZSBjYWxsZXIuICovCiBzdGF0aWMgaW50IGl3bDM5NDVfaXNfbmV0d29ya19wYWNrZXQoc3RydWN0IGl3bF9wcml2ICpwcml2LApAQCAtNzc3LDggKzYzMCw2IEBACiAJCQkgICAgICByeF9zdGF0dXMuc2lnbmFsLCByeF9zdGF0dXMuc2lnbmFsLAogCQkJICAgICAgcnhfc3RhdHVzLnJhdGVfaWR4KTsKIAotCS8qIFNldCAiMSIgdG8gcmVwb3J0IGdvb2QgZGF0YSBmcmFtZXMgaW4gZ3JvdXBzIG9mIDEwMCAqLwotCWl3bDM5NDVfZGJnX3JlcG9ydF9mcmFtZShwcml2LCBwa3QsIGhlYWRlciwgMSk7CiAJaXdsX2RiZ19sb2dfcnhfZGF0YV9mcmFtZShwcml2LCBsZTE2X3RvX2NwdShyeF9oZHItPmxlbiksIGhlYWRlcik7CiAKIAlpZiAobmV0d29ya19wYWNrZXQpIHsKQEAgLTg1MCwyNSArNzAxLDI4IEBACiAJLyogVW5tYXAgdHhfY21kICovCiAJaWYgKGNvdW50ZXIpCiAJCXBjaV91bm1hcF9zaW5nbGUoZGV2LAotCQkJCXBjaV91bm1hcF9hZGRyKCZ0eHEtPm1ldGFbaW5kZXhdLCBtYXBwaW5nKSwKLQkJCQlwY2lfdW5tYXBfbGVuKCZ0eHEtPm1ldGFbaW5kZXhdLCBsZW4pLAorCQkJCWRtYV91bm1hcF9hZGRyKCZ0eHEtPm1ldGFbaW5kZXhdLCBtYXBwaW5nKSwKKwkJCQlkbWFfdW5tYXBfbGVuKCZ0eHEtPm1ldGFbaW5kZXhdLCBsZW4pLAogCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOwogCiAJLyogdW5tYXAgY2h1bmtzIGlmIGFueSAqLwogCi0JZm9yIChpID0gMTsgaSA8IGNvdW50ZXI7IGkrKykgeworCWZvciAoaSA9IDE7IGkgPCBjb3VudGVyOyBpKyspCiAJCXBjaV91bm1hcF9zaW5nbGUoZGV2LCBsZTMyX3RvX2NwdSh0ZmQtPnRic1tpXS5hZGRyKSwKIAkJCSBsZTMyX3RvX2NwdSh0ZmQtPnRic1tpXS5sZW4pLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJaWYgKHR4cS0+dHhiW3R4cS0+cS5yZWFkX3B0cl0uc2tiWzBdKSB7Ci0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXS5za2JbMF07Ci0JCQlpZiAodHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXS5za2JbMF0pIHsKLQkJCQkvKiBDYW4gYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQgKi8KLQkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQkJCXR4cS0+dHhiW3R4cS0+cS5yZWFkX3B0cl0uc2tiWzBdID0gTlVMTDsKLQkJCX0KKworCS8qIGZyZWUgU0tCICovCisJaWYgKHR4cS0+dHhiKSB7CisJCXN0cnVjdCBza19idWZmICpza2I7CisKKwkJc2tiID0gdHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXS5za2I7CisKKwkJLyogY2FuIGJlIGNhbGxlZCBmcm9tIGlycXMtZGlzYWJsZWQgY29udGV4dCAqLworCQlpZiAoc2tiKSB7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJdHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXS5za2IgPSBOVUxMOwogCQl9CiAJfQotCXJldHVybiA7CiB9CiAKIC8qKgpAQCAtOTQ3LDggKzgwMSw3IEBACiAJCSAgICAgICB0eF9jbWQtPnN1cHBfcmF0ZXNbMV0sIHR4X2NtZC0+c3VwcF9yYXRlc1swXSk7CiB9CiAKLXN0YXRpYyB1OCBpd2wzOTQ1X3N5bmNfc3RhKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHN0YV9pZCwKLQkJCSAgIHUxNiB0eF9yYXRlLCB1OCBmbGFncykKK3N0YXRpYyB1OCBpd2wzOTQ1X3N5bmNfc3RhKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHN0YV9pZCwgdTE2IHR4X3JhdGUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnc19zcGluOwogCXN0cnVjdCBpd2xfc3RhdGlvbl9lbnRyeSAqc3RhdGlvbjsKQEAgLTk2MiwxMCArODE1LDkgQEAKIAlzdGF0aW9uLT5zdGEuc3RhLm1vZGlmeV9tYXNrID0gU1RBX01PRElGWV9UWF9SQVRFX01TSzsKIAlzdGF0aW9uLT5zdGEucmF0ZV9uX2ZsYWdzID0gY3B1X3RvX2xlMTYodHhfcmF0ZSk7CiAJc3RhdGlvbi0+c3RhLm1vZGUgPSBTVEFfQ09OVFJPTF9NT0RJRllfTVNLOwotCisJaXdsX3NlbmRfYWRkX3N0YShwcml2LCAmc3RhdGlvbi0+c3RhLCBDTURfQVNZTkMpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKIAotCWl3bF9zZW5kX2FkZF9zdGEocHJpdiwgJnN0YXRpb24tPnN0YSwgZmxhZ3MpOwogCUlXTF9ERUJVR19SQVRFKHByaXYsICJTQ0FMRSBzeW5jIHN0YXRpb24gJWQgdG8gcmF0ZSAlZFxuIiwKIAkJCXN0YV9pZCwgdHhfcmF0ZSk7CiAJcmV0dXJuIHN0YV9pZDsKQEAgLTk5Nyw3ICs4NDksNyBAQAogCiBzdGF0aWMgaW50IGl3bDM5NDVfcnhfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhfcXVldWUgKnJ4cSkKIHsKLQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkgzOV9SQ1NSX1JCRF9CQVNFKDApLCByeHEtPmRtYV9hZGRyKTsKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkgzOV9SQ1NSX1JCRF9CQVNFKDApLCByeHEtPmJkX2RtYSk7CiAJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIMzlfUkNTUl9SUFRSX0FERFIoMCksIHJ4cS0+cmJfc3R0c19kbWEpOwogCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1JDU1JfV1BUUigwKSwgMCk7CiAJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIMzlfUkNTUl9DT05GSUcoMCksCkBAIC0yNDczLDggKzIzMjUsNyBAQAogCiAJCWl3bDM5NDVfc3luY19zdGEocHJpdiwgdmlmX3ByaXYtPmlic3NfYnNzaWRfc3RhX2lkLAogCQkJCSAocHJpdi0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSA/Ci0JCQkJIElXTF9SQVRFXzZNX1BMQ1AgOiBJV0xfUkFURV8xTV9QTENQLAotCQkJCSBDTURfQVNZTkMpOworCQkJCSBJV0xfUkFURV82TV9QTENQIDogSVdMX1JBVEVfMU1fUExDUCk7CiAJCWl3bDM5NDVfcmF0ZV9zY2FsZV9pbml0KHByaXYtPmh3LCB2aWZfcHJpdi0+aWJzc19ic3NpZF9zdGFfaWQpOwogCiAJCXJldHVybiAwOwpAQCAtMjU5MCw2ICsyNDQxLDcgQEAKIAogCXByaXYtPmh3X3BhcmFtcy5yeF93cnRfcHRyX3JlZyA9IEZIMzlfUlNDU1JfQ0hOTDBfV1BUUjsKIAlwcml2LT5od19wYXJhbXMubWF4X2JlYWNvbl9pdHJ2bCA9IElXTDM5X01BWF9VQ09ERV9CRUFDT05fSU5URVJWQUw7CisJcHJpdi0+aHdfcGFyYW1zLmJlYWNvbl90aW1lX3RzZl9iaXRzID0gSVdMMzk0NV9FWFRfQkVBQ09OX1RJTUVfUE9TOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LWh3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LWh3LmgKaW5kZXggY2Q0YjYxYS4uOTE2Njc5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtaHcuaApAQCAtNzg3LDYgKzc4Nyw2IEBACiBzdHJ1Y3QgaXdsNDk2NV9zY2RfYmNfdGJsIHsKIAlfX2xlMTYgdGZkX29mZnNldFtURkRfUVVFVUVfQkNfU0laRV07CiAJdTggcGFkWzEwMjQgLSAoVEZEX1FVRVVFX0JDX1NJWkUpICogc2l6ZW9mKF9fbGUxNildOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZW5kaWYgLyogIV9faXdsXzQ5NjVfaHdfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKaW5kZXggZDNhZmRkYS4uZDY1MzFhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYwpAQCAtMzQ2LDkgKzM0NiwxOSBAQAogewogCXN0cnVjdCBpd2xfY2hhaW5fbm9pc2VfZGF0YSAqZGF0YSA9ICYocHJpdi0+Y2hhaW5fbm9pc2VfZGF0YSk7CiAKLQlpZiAoKGRhdGEtPnN0YXRlID09IElXTF9DSEFJTl9OT0lTRV9BTElWRSkgJiYgaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKKwlpZiAoKGRhdGEtPnN0YXRlID09IElXTF9DSEFJTl9OT0lTRV9BTElWRSkgJiYKKwkgICAgIGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7CiAJCXN0cnVjdCBpd2xfY2FsaWJfZGlmZl9nYWluX2NtZCBjbWQ7CiAKKwkJLyogY2xlYXIgZGF0YSBmb3IgY2hhaW4gbm9pc2UgY2FsaWJyYXRpb24gYWxnb3JpdGhtICovCisJCWRhdGEtPmNoYWluX25vaXNlX2EgPSAwOworCQlkYXRhLT5jaGFpbl9ub2lzZV9iID0gMDsKKwkJZGF0YS0+Y2hhaW5fbm9pc2VfYyA9IDA7CisJCWRhdGEtPmNoYWluX3NpZ25hbF9hID0gMDsKKwkJZGF0YS0+Y2hhaW5fc2lnbmFsX2IgPSAwOworCQlkYXRhLT5jaGFpbl9zaWduYWxfYyA9IDA7CisJCWRhdGEtPmJlYWNvbl9jb3VudCA9IDA7CisKIAkJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKIAkJY21kLmhkci5vcF9jb2RlID0gSVdMX1BIWV9DQUxJQlJBVEVfRElGRl9HQUlOX0NNRDsKIAkJY21kLmRpZmZfZ2Fpbl9hID0gMDsKQEAgLTQxOSwxMyArNDI5LDYgQEAKIAkJLyogTWFyayBzbyB3ZSBydW4gdGhpcyBhbGdvIG9ubHkgb25jZSEgKi8KIAkJZGF0YS0+c3RhdGUgPSBJV0xfQ0hBSU5fTk9JU0VfQ0FMSUJSQVRFRDsKIAl9Ci0JZGF0YS0+Y2hhaW5fbm9pc2VfYSA9IDA7Ci0JZGF0YS0+Y2hhaW5fbm9pc2VfYiA9IDA7Ci0JZGF0YS0+Y2hhaW5fbm9pc2VfYyA9IDA7Ci0JZGF0YS0+Y2hhaW5fc2lnbmFsX2EgPSAwOwotCWRhdGEtPmNoYWluX3NpZ25hbF9iID0gMDsKLQlkYXRhLT5jaGFpbl9zaWduYWxfYyA9IDA7Ci0JZGF0YS0+YmVhY29uX2NvdW50ID0gMDsKIH0KIAogc3RhdGljIHZvaWQgaXdsNDk2NV9iZ190eHBvd2VyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtNjY5LDYgKzY3Miw3IEBACiAJCXByaXYtPmNmZy0+b3BzLT5saWItPnRlbXBfb3BzLnNldF9jdF9raWxsKHByaXYpOwogCiAJcHJpdi0+aHdfcGFyYW1zLnNlbnMgPSAmaXdsNDk2NV9zZW5zaXRpdml0eTsKKwlwcml2LT5od19wYXJhbXMuYmVhY29uX3RpbWVfdHNmX2JpdHMgPSBJV0xBR05fRVhUX0JFQUNPTl9USU1FX1BPUzsKIAogCXJldHVybiAwOwogfQpAQCAtMTQ0MSw3ICsxNDQ1LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGl3bDQ5NjVfaHdfY2hhbm5lbF9zd2l0Y2goc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgY2hhbm5lbCkKK3N0YXRpYyBpbnQgaXdsNDk2NV9od19jaGFubmVsX3N3aXRjaChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dpdGNoICpjaF9zd2l0Y2gpCiB7CiAJaW50IHJjOwogCXU4IGJhbmQgPSAwOwpAQCAtMTQ0OSwxMSArMTQ1NCwxNCBAQAogCXU4IGN0cmxfY2hhbl9oaWdoID0gMDsKIAlzdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX3N3aXRjaF9jbWQgY21kOwogCWNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwotCisJdTMyIHN3aXRjaF90aW1lX2luX3VzZWMsIHVjb2RlX3N3aXRjaF90aW1lOworCXUxNiBjaDsKKwl1MzIgdHNmX2xvdzsKKwl1OCBzd2l0Y2hfY291bnQ7CisJdTE2IGJlYWNvbl9pbnRlcnZhbCA9IGxlMTZfdG9fY3B1KHByaXYtPnJ4b25fdGltaW5nLmJlYWNvbl9pbnRlcnZhbCk7CisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiA9IHByaXYtPnZpZjsKIAliYW5kID0gcHJpdi0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haOwogCi0JY2hfaW5mbyA9IGl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIHByaXYtPmJhbmQsIGNoYW5uZWwpOwotCiAJaXNfaHQ0MCA9IGlzX2h0NDBfY2hhbm5lbChwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MpOwogCiAJaWYgKGlzX2h0NDAgJiYKQEAgLTE0NjIsMjYgKzE0NzAsNTYgQEAKIAogCWNtZC5iYW5kID0gYmFuZDsKIAljbWQuZXhwZWN0X2JlYWNvbiA9IDA7Ci0JY21kLmNoYW5uZWwgPSBjcHVfdG9fbGUxNihjaGFubmVsKTsKKwljaCA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjaF9zd2l0Y2gtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKKwljbWQuY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoKTsKIAljbWQucnhvbl9mbGFncyA9IHByaXYtPnN0YWdpbmdfcnhvbi5mbGFnczsKIAljbWQucnhvbl9maWx0ZXJfZmxhZ3MgPSBwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzOwotCWNtZC5zd2l0Y2hfdGltZSA9IGNwdV90b19sZTMyKHByaXYtPnVjb2RlX2JlYWNvbl90aW1lKTsKKwlzd2l0Y2hfY291bnQgPSBjaF9zd2l0Y2gtPmNvdW50OworCXRzZl9sb3cgPSBjaF9zd2l0Y2gtPnRpbWVzdGFtcCAmIDB4MGZmZmZmZmZmOworCS8qCisJICogY2FsY3VsYXRlIHRoZSB1Y29kZSBjaGFubmVsIHN3aXRjaCB0aW1lCisJICogYWRkaW5nIFRTRiBhcyBvbmUgb2YgdGhlIGZhY3RvciBmb3Igd2hlbiB0byBzd2l0Y2gKKwkgKi8KKwlpZiAoKHByaXYtPnVjb2RlX2JlYWNvbl90aW1lID4gdHNmX2xvdykgJiYgYmVhY29uX2ludGVydmFsKSB7CisJCWlmIChzd2l0Y2hfY291bnQgPiAoKHByaXYtPnVjb2RlX2JlYWNvbl90aW1lIC0gdHNmX2xvdykgLworCQkgICAgYmVhY29uX2ludGVydmFsKSkgeworCQkJc3dpdGNoX2NvdW50IC09IChwcml2LT51Y29kZV9iZWFjb25fdGltZSAtCisJCQkJdHNmX2xvdykgLyBiZWFjb25faW50ZXJ2YWw7CisJCX0gZWxzZQorCQkJc3dpdGNoX2NvdW50ID0gMDsKKwl9CisJaWYgKHN3aXRjaF9jb3VudCA8PSAxKQorCQljbWQuc3dpdGNoX3RpbWUgPSBjcHVfdG9fbGUzMihwcml2LT51Y29kZV9iZWFjb25fdGltZSk7CisJZWxzZSB7CisJCXN3aXRjaF90aW1lX2luX3VzZWMgPQorCQkJdmlmLT5ic3NfY29uZi5iZWFjb25faW50ICogc3dpdGNoX2NvdW50ICogVElNRV9VTklUOworCQl1Y29kZV9zd2l0Y2hfdGltZSA9IGl3bF91c2Vjc190b19iZWFjb25zKHByaXYsCisJCQkJCQkJIHN3aXRjaF90aW1lX2luX3VzZWMsCisJCQkJCQkJIGJlYWNvbl9pbnRlcnZhbCk7CisJCWNtZC5zd2l0Y2hfdGltZSA9IGl3bF9hZGRfYmVhY29uX3RpbWUocHJpdiwKKwkJCQkJCSAgICAgIHByaXYtPnVjb2RlX2JlYWNvbl90aW1lLAorCQkJCQkJICAgICAgdWNvZGVfc3dpdGNoX3RpbWUsCisJCQkJCQkgICAgICBiZWFjb25faW50ZXJ2YWwpOworCX0KKwlJV0xfREVCVUdfMTFIKHByaXYsICJ1Q29kZSB0aW1lIGZvciB0aGUgc3dpdGNoIGlzIDB4JXhcbiIsCisJCSAgICAgIGNtZC5zd2l0Y2hfdGltZSk7CisJY2hfaW5mbyA9IGl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIHByaXYtPmJhbmQsIGNoKTsKIAlpZiAoY2hfaW5mbykKIAkJY21kLmV4cGVjdF9iZWFjb24gPSBpc19jaGFubmVsX3JhZGFyKGNoX2luZm8pOwogCWVsc2UgewogCQlJV0xfRVJSKHByaXYsICJpbnZhbGlkIGNoYW5uZWwgc3dpdGNoIGZyb20gJXUgdG8gJXVcbiIsCi0JCQlwcml2LT5hY3RpdmVfcnhvbi5jaGFubmVsLCBjaGFubmVsKTsKKwkJCXByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwsIGNoKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JcmMgPSBpd2w0OTY1X2ZpbGxfdHhwb3dlcl90YmwocHJpdiwgYmFuZCwgY2hhbm5lbCwgaXNfaHQ0MCwKKwlyYyA9IGl3bDQ5NjVfZmlsbF90eHBvd2VyX3RibChwcml2LCBiYW5kLCBjaCwgaXNfaHQ0MCwKIAkJCQkgICAgICBjdHJsX2NoYW5faGlnaCwgJmNtZC50eF9wb3dlcik7CiAJaWYgKHJjKSB7CiAJCUlXTF9ERUJVR18xMUgocHJpdiwgImVycm9yOiVkICBmaWxsIHR4cG93ZXJfdGJsXG4iLCByYyk7CiAJCXJldHVybiByYzsKIAl9CiAKLQlwcml2LT5zd2l0Y2hfcnhvbi5jaGFubmVsID0gY3B1X3RvX2xlMTYoY2hhbm5lbCk7CisJcHJpdi0+c3dpdGNoX3J4b24uY2hhbm5lbCA9IGNtZC5jaGFubmVsOwogCXByaXYtPnN3aXRjaF9yeG9uLnN3aXRjaF9pbl9wcm9ncmVzcyA9IHRydWU7CiAKIAlyZXR1cm4gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9DSEFOTkVMX1NXSVRDSCwgc2l6ZW9mKGNtZCksICZjbWQpOwpAQCAtMTU0Miw3ICsxNTgwLDggQEAKIAl1MzIgUjQ7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX1RFTVBFUkFUVVJFLCAmcHJpdi0+c3RhdHVzKSAmJgotCQkocHJpdi0+c3RhdGlzdGljcy5mbGFnICYgU1RBVElTVElDU19SRVBMWV9GTEdfSFQ0MF9NT0RFX01TSykpIHsKKwkgICAgKHByaXYtPl9hZ24uc3RhdGlzdGljcy5mbGFnICYKKwkJCVNUQVRJU1RJQ1NfUkVQTFlfRkxHX0hUNDBfTU9ERV9NU0spKSB7CiAJCUlXTF9ERUJVR19URU1QKHByaXYsICJSdW5uaW5nIEhUNDAgdGVtcGVyYXR1cmUgY2FsaWJyYXRpb25cbiIpOwogCQlSMSA9IChzMzIpbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LnRoZXJtX3IxWzFdKTsKIAkJUjIgPSAoczMyKWxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC50aGVybV9yMlsxXSk7CkBAIC0xNTY2LDggKzE2MDUsOCBAQAogCWlmICghdGVzdF9iaXQoU1RBVFVTX1RFTVBFUkFUVVJFLCAmcHJpdi0+c3RhdHVzKSkKIAkJdnQgPSBzaWduX2V4dGVuZChSNCwgMjMpOwogCWVsc2UKLQkJdnQgPSBzaWduX2V4dGVuZCgKLQkJCWxlMzJfdG9fY3B1KHByaXYtPnN0YXRpc3RpY3MuZ2VuZXJhbC50ZW1wZXJhdHVyZSksIDIzKTsKKwkJdnQgPSBzaWduX2V4dGVuZChsZTMyX3RvX2NwdShwcml2LT5fYWduLnN0YXRpc3RpY3MuCisJCQkJIGdlbmVyYWwuY29tbW9uLnRlbXBlcmF0dXJlKSwgMjMpOwogCiAJSVdMX0RFQlVHX1RFTVAocHJpdiwgIkNhbGliIHZhbHVlcyBSWzEtM106ICVkICVkICVkIFI0OiAlZFxuIiwgUjEsIFIyLCBSMywgdnQpOwogCkBAIC0xNzQ3LDYgKzE3ODYsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTE2IHJhX3RpZDsKKwlpbnQgcmV0OwogCiAJaWYgKChJV0w0OV9GSVJTVF9BTVBEVV9RVUVVRSA+IHR4cV9pZCkgfHwKIAkgICAgKElXTDQ5X0ZJUlNUX0FNUERVX1FVRVVFICsgcHJpdi0+Y2ZnLT5udW1fb2ZfYW1wZHVfcXVldWVzCkBAIC0xNzYyLDcgKzE4MDIsOSBAQAogCXJhX3RpZCA9IEJVSUxEX1JBeFRJRChzdGFfaWQsIHRpZCk7CiAKIAkvKiBNb2RpZnkgZGV2aWNlJ3Mgc3RhdGlvbiB0YWJsZSB0byBUeCB0aGlzIFRJRCAqLwotCWl3bF9zdGFfdHhfbW9kaWZ5X2VuYWJsZV90aWQocHJpdiwgc3RhX2lkLCB0aWQpOworCXJldCA9IGl3bF9zdGFfdHhfbW9kaWZ5X2VuYWJsZV90aWQocHJpdiwgc3RhX2lkLCB0aWQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCkBAIC0xODcwLDcgKzE5MTIsNyBAQAogCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkZyYW1lQ250ID0gJWQsIFN0YXJ0SWR4PSVkIGlkeD0lZFxuIiwKIAkJCQkgICBhZ2ctPmZyYW1lX2NvdW50LCBhZ2ctPnN0YXJ0X2lkeCwgaWR4KTsKIAotCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihwcml2LT50eHFbdHhxX2lkXS50eGJbaWR4XS5za2JbMF0pOworCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihwcml2LT50eHFbdHhxX2lkXS50eGJbaWR4XS5za2IpOwogCQlpbmZvLT5zdGF0dXMucmF0ZXNbMF0uY291bnQgPSB0eF9yZXNwLT5mYWlsdXJlX2ZyYW1lICsgMTsKIAkJaW5mby0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9UWF9DVExfQU1QRFU7CiAJCWluZm8tPmZsYWdzIHw9IGl3bF90eF9zdGF0dXNfdG9fbWFjODAyMTEoc3RhdHVzKTsKQEAgLTIwMjYsNiArMjA2OCw3IEBACiAJaW50IHN0YV9pZDsKIAlpbnQgZnJlZWQ7CiAJdTggKnFjID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKChpbmRleCA+PSB0eHEtPnEubl9iZCkgfHwgKGl3bF9xdWV1ZV91c2VkKCZ0eHEtPnEsIGluZGV4KSA9PSAwKSkgewogCQlJV0xfRVJSKHByaXYsICJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxX2lkICglZCkgaW5kZXggJWQgIgpAQCAtMjAzNSw3ICsyMDc4LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4cS0+dHhiW3R4cS0+cS5yZWFkX3B0cl0uc2tiWzBdKTsKKwlpbmZvID0gSUVFRTgwMjExX1NLQl9DQih0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdLnNrYik7CiAJbWVtc2V0KCZpbmZvLT5zdGF0dXMsIDAsIHNpemVvZihpbmZvLT5zdGF0dXMpKTsKIAogCWhkciA9IGl3bF90eF9xdWV1ZV9nZXRfaGRyKHByaXYsIHR4cV9pZCwgaW5kZXgpOwpAQCAtMjA1MCwxMCArMjA5MywxMCBAQAogCQlyZXR1cm47CiAJfQogCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAJaWYgKHR4cS0+c2NoZWRfcmV0cnkpIHsKIAkJY29uc3QgdTMyIHNjZF9zc24gPSBpd2w0OTY1X2dldF9zY2Rfc3NuKHR4X3Jlc3ApOwogCQlzdHJ1Y3QgaXdsX2h0X2FnZyAqYWdnID0gTlVMTDsKLQogCQlXQVJOX09OKCFxYyk7CiAKIAkJYWdnID0gJnByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0uYWdnOwpAQCAtMjExMCw2ICsyMTUzLDggQEAKIAkJaXdsYWduX3R4cV9jaGVja19lbXB0eShwcml2LCBzdGFfaWQsIHRpZCwgdHhxX2lkKTsKIAogCWl3bF9jaGVja19hYm9ydF9zdGF0dXMocHJpdiwgdHhfcmVzcC0+ZnJhbWVfY291bnQsIHN0YXR1cyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IGl3bDQ5NjVfY2FsY19yc3NpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKQEAgLTIyMzUsMTEgKzIyODAsMTQgQEAKIAkJLnNldF9jdF9raWxsID0gaXdsNDk2NV9zZXRfY3RfdGhyZXNob2xkLAogCX0sCiAJLm1hbmFnZV9pYnNzX3N0YXRpb24gPSBpd2xhZ25fbWFuYWdlX2lic3Nfc3RhdGlvbiwKKwkudXBkYXRlX2JjYXN0X3N0YXRpb24gPSBpd2xfdXBkYXRlX2JjYXN0X3N0YXRpb24sCiAJLmRlYnVnZnNfb3BzID0gewogCQkucnhfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV9yeF9zdGF0c19yZWFkLAogCQkudHhfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV90eF9zdGF0c19yZWFkLAogCQkuZ2VuZXJhbF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX2dlbmVyYWxfc3RhdHNfcmVhZCwKKwkJLmJ0X3N0YXRzX3JlYWQgPSBpd2xfdWNvZGVfYnRfc3RhdHNfcmVhZCwKIAl9LAorCS5yZWNvdmVyX2Zyb21fdHhfc3RhbGwgPSBpd2xfYmdfbW9uaXRvcl9yZWNvdmVyLAogCS5jaGVja19wbGNwX2hlYWx0aCA9IGl3bF9nb29kX3BsY3BfaGVhbHRoLAogfTsKIApAQCAtMjI4NSw3ICsyMzMzLDcgQEAKIAkgKiBGb3JjZSB1c2Ugb2YgY2hhaW5zIEIgYW5kIEMgZm9yIHNjYW4gUlggb24gNSBHSHogYmFuZAogCSAqIGJlY2F1c2UgdGhlIGRldmljZSBoYXMgb2ZmLWNoYW5uZWwgcmVjZXB0aW9uIG9uIGNoYWluIEEuCiAJICovCi0JLnNjYW5fYW50ZW5uYXNbSUVFRTgwMjExX0JBTkRfNUdIWl0gPSBBTlRfQkMsCisJLnNjYW5fcnhfYW50ZW5uYXNbSUVFRTgwMjExX0JBTkRfNUdIWl0gPSBBTlRfQkMsCiB9OwogCiAvKiBNb2R1bGUgZmlybXdhcmUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwppbmRleCBhMjhhZjdlLi44MDkzY2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCkBAIC0xNzksOCArMTc5LDggQEAKIAkJCXByaXYtPmNmZy0+bnVtX29mX3F1ZXVlcyAqCiAJCQlzaXplb2Yoc3RydWN0IGl3bGFnbl9zY2RfYmNfdGJsKTsKIAlwcml2LT5od19wYXJhbXMudGZkX3NpemUgPSBzaXplb2Yoc3RydWN0IGl3bF90ZmQpOwotCXByaXYtPmh3X3BhcmFtcy5tYXhfc3RhdGlvbnMgPSBJV0w1MDAwX1NUQVRJT05fQ09VTlQ7Ci0JcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZCA9IElXTDUwMDBfQlJPQURDQVNUX0lEOworCXByaXYtPmh3X3BhcmFtcy5tYXhfc3RhdGlvbnMgPSBJV0xBR05fU1RBVElPTl9DT1VOVDsKKwlwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkID0gSVdMQUdOX0JST0FEQ0FTVF9JRDsKIAogCXByaXYtPmh3X3BhcmFtcy5tYXhfZGF0YV9zaXplID0gSVdMQUdOX1JUQ19EQVRBX1NJWkU7CiAJcHJpdi0+aHdfcGFyYW1zLm1heF9pbnN0X3NpemUgPSBJV0xBR05fUlRDX0lOU1RfU0laRTsKQEAgLTIwOCw2ICsyMDgsOCBAQAogCQlCSVQoSVdMX0NBTElCX1RYX0lRX1BFUkQpCXwKIAkJQklUKElXTF9DQUxJQl9CQVNFX0JBTkQpOwogCisJcHJpdi0+aHdfcGFyYW1zLmJlYWNvbl90aW1lX3RzZl9iaXRzID0gSVdMQUdOX0VYVF9CRUFDT05fVElNRV9QT1M7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI0LDggKzIyNiw4IEBACiAJCQlwcml2LT5jZmctPm51bV9vZl9xdWV1ZXMgKgogCQkJc2l6ZW9mKHN0cnVjdCBpd2xhZ25fc2NkX2JjX3RibCk7CiAJcHJpdi0+aHdfcGFyYW1zLnRmZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBpd2xfdGZkKTsKLQlwcml2LT5od19wYXJhbXMubWF4X3N0YXRpb25zID0gSVdMNTAwMF9TVEFUSU9OX0NPVU5UOwotCXByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQgPSBJV0w1MDAwX0JST0FEQ0FTVF9JRDsKKwlwcml2LT5od19wYXJhbXMubWF4X3N0YXRpb25zID0gSVdMQUdOX1NUQVRJT05fQ09VTlQ7CisJcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZCA9IElXTEFHTl9CUk9BRENBU1RfSUQ7CiAKIAlwcml2LT5od19wYXJhbXMubWF4X2RhdGFfc2l6ZSA9IElXTEFHTl9SVENfREFUQV9TSVpFOwogCXByaXYtPmh3X3BhcmFtcy5tYXhfaW5zdF9zaXplID0gSVdMQUdOX1JUQ19JTlNUX1NJWkU7CkBAIC0yNDcsMTAgKzI0OSwxMyBAQAogCS8qIFNldCBpbml0aWFsIGNhbGlicmF0aW9uIHNldCAqLwogCXByaXYtPmh3X3BhcmFtcy5zZW5zID0gJml3bDUxNTBfc2Vuc2l0aXZpdHk7CiAJcHJpdi0+aHdfcGFyYW1zLmNhbGliX2luaXRfY2ZnID0KLQkJQklUKElXTF9DQUxJQl9EQykJCXwKIAkJQklUKElXTF9DQUxJQl9MTykJCXwKIAkJQklUKElXTF9DQUxJQl9UWF9JUSkJCXwKIAkJQklUKElXTF9DQUxJQl9CQVNFX0JBTkQpOworCWlmIChwcml2LT5jZmctPm5lZWRfZGNfY2FsaWIpCisJCXByaXYtPmh3X3BhcmFtcy5jYWxpYl9pbml0X2NmZyB8PSBCSVQoSVdMX0NBTElCX0RDKTsKKworCXByaXYtPmh3X3BhcmFtcy5iZWFjb25fdGltZV90c2ZfYml0cyA9IElXTEFHTl9FWFRfQkVBQ09OX1RJTUVfUE9TOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNjAsNDAgKzI2NSw3NiBAQAogCXUzMiB2dCA9IDA7CiAJczMyIG9mZnNldCA9ICBpd2xfdGVtcF9jYWxpYl90b19vZmZzZXQocHJpdik7CiAKLQl2dCA9IGxlMzJfdG9fY3B1KHByaXYtPnN0YXRpc3RpY3MuZ2VuZXJhbC50ZW1wZXJhdHVyZSk7CisJdnQgPSBsZTMyX3RvX2NwdShwcml2LT5fYWduLnN0YXRpc3RpY3MuZ2VuZXJhbC5jb21tb24udGVtcGVyYXR1cmUpOwogCXZ0ID0gdnQgLyBJV0xfNTE1MF9WT0xUQUdFX1RPX1RFTVBFUkFUVVJFX0NPRUZGICsgb2Zmc2V0OwogCS8qIG5vdyB2dCBob2xkIHRoZSB0ZW1wZXJhdHVyZSBpbiBLZWx2aW4gKi8KIAlwcml2LT50ZW1wZXJhdHVyZSA9IEtFTFZJTl9UT19DRUxTSVVTKHZ0KTsKIAlpd2xfdHRfaGFuZGxlcihwcml2KTsKIH0KIAotc3RhdGljIGludCBpd2w1MDAwX2h3X2NoYW5uZWxfc3dpdGNoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IGNoYW5uZWwpCitzdGF0aWMgaW50IGl3bDUwMDBfaHdfY2hhbm5lbF9zd2l0Y2goc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3aXRjaCAqY2hfc3dpdGNoKQogewogCXN0cnVjdCBpd2w1MDAwX2NoYW5uZWxfc3dpdGNoX2NtZCBjbWQ7CiAJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CisJdTMyIHN3aXRjaF90aW1lX2luX3VzZWMsIHVjb2RlX3N3aXRjaF90aW1lOworCXUxNiBjaDsKKwl1MzIgdHNmX2xvdzsKKwl1OCBzd2l0Y2hfY291bnQ7CisJdTE2IGJlYWNvbl9pbnRlcnZhbCA9IGxlMTZfdG9fY3B1KHByaXYtPnJ4b25fdGltaW5nLmJlYWNvbl9pbnRlcnZhbCk7CisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiA9IHByaXYtPnZpZjsKIAlzdHJ1Y3QgaXdsX2hvc3RfY21kIGhjbWQgPSB7CiAJCS5pZCA9IFJFUExZX0NIQU5ORUxfU1dJVENILAogCQkubGVuID0gc2l6ZW9mKGNtZCksCi0JCS5mbGFncyA9IENNRF9TSVpFX0hVR0UsCisJCS5mbGFncyA9IENNRF9TWU5DLAogCQkuZGF0YSA9ICZjbWQsCiAJfTsKIAotCUlXTF9ERUJVR18xMUgocHJpdiwgImNoYW5uZWwgc3dpdGNoIGZyb20gJWQgdG8gJWRcbiIsCi0JCXByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwsIGNoYW5uZWwpOwogCWNtZC5iYW5kID0gcHJpdi0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haOwotCWNtZC5jaGFubmVsID0gY3B1X3RvX2xlMTYoY2hhbm5lbCk7CisJY2ggPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoY2hfc3dpdGNoLT5jaGFubmVsLT5jZW50ZXJfZnJlcSk7CisJSVdMX0RFQlVHXzExSChwcml2LCAiY2hhbm5lbCBzd2l0Y2ggZnJvbSAlZCB0byAlZFxuIiwKKwkJcHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCwgY2gpOworCWNtZC5jaGFubmVsID0gY3B1X3RvX2xlMTYoY2gpOwogCWNtZC5yeG9uX2ZsYWdzID0gcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzOwogCWNtZC5yeG9uX2ZpbHRlcl9mbGFncyA9IHByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3M7Ci0JY21kLnN3aXRjaF90aW1lID0gY3B1X3RvX2xlMzIocHJpdi0+dWNvZGVfYmVhY29uX3RpbWUpOwotCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBwcml2LT5iYW5kLCBjaGFubmVsKTsKKwlzd2l0Y2hfY291bnQgPSBjaF9zd2l0Y2gtPmNvdW50OworCXRzZl9sb3cgPSBjaF9zd2l0Y2gtPnRpbWVzdGFtcCAmIDB4MGZmZmZmZmZmOworCS8qCisJICogY2FsY3VsYXRlIHRoZSB1Y29kZSBjaGFubmVsIHN3aXRjaCB0aW1lCisJICogYWRkaW5nIFRTRiBhcyBvbmUgb2YgdGhlIGZhY3RvciBmb3Igd2hlbiB0byBzd2l0Y2gKKwkgKi8KKwlpZiAoKHByaXYtPnVjb2RlX2JlYWNvbl90aW1lID4gdHNmX2xvdykgJiYgYmVhY29uX2ludGVydmFsKSB7CisJCWlmIChzd2l0Y2hfY291bnQgPiAoKHByaXYtPnVjb2RlX2JlYWNvbl90aW1lIC0gdHNmX2xvdykgLworCQkgICAgYmVhY29uX2ludGVydmFsKSkgeworCQkJc3dpdGNoX2NvdW50IC09IChwcml2LT51Y29kZV9iZWFjb25fdGltZSAtCisJCQkJdHNmX2xvdykgLyBiZWFjb25faW50ZXJ2YWw7CisJCX0gZWxzZQorCQkJc3dpdGNoX2NvdW50ID0gMDsKKwl9CisJaWYgKHN3aXRjaF9jb3VudCA8PSAxKQorCQljbWQuc3dpdGNoX3RpbWUgPSBjcHVfdG9fbGUzMihwcml2LT51Y29kZV9iZWFjb25fdGltZSk7CisJZWxzZSB7CisJCXN3aXRjaF90aW1lX2luX3VzZWMgPQorCQkJdmlmLT5ic3NfY29uZi5iZWFjb25faW50ICogc3dpdGNoX2NvdW50ICogVElNRV9VTklUOworCQl1Y29kZV9zd2l0Y2hfdGltZSA9IGl3bF91c2Vjc190b19iZWFjb25zKHByaXYsCisJCQkJCQkJIHN3aXRjaF90aW1lX2luX3VzZWMsCisJCQkJCQkJIGJlYWNvbl9pbnRlcnZhbCk7CisJCWNtZC5zd2l0Y2hfdGltZSA9IGl3bF9hZGRfYmVhY29uX3RpbWUocHJpdiwKKwkJCQkJCSAgICAgIHByaXYtPnVjb2RlX2JlYWNvbl90aW1lLAorCQkJCQkJICAgICAgdWNvZGVfc3dpdGNoX3RpbWUsCisJCQkJCQkgICAgICBiZWFjb25faW50ZXJ2YWwpOworCX0KKwlJV0xfREVCVUdfMTFIKHByaXYsICJ1Q29kZSB0aW1lIGZvciB0aGUgc3dpdGNoIGlzIDB4JXhcbiIsCisJCSAgICAgIGNtZC5zd2l0Y2hfdGltZSk7CisJY2hfaW5mbyA9IGl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIHByaXYtPmJhbmQsIGNoKTsKIAlpZiAoY2hfaW5mbykKIAkJY21kLmV4cGVjdF9iZWFjb24gPSBpc19jaGFubmVsX3JhZGFyKGNoX2luZm8pOwogCWVsc2UgewogCQlJV0xfRVJSKHByaXYsICJpbnZhbGlkIGNoYW5uZWwgc3dpdGNoIGZyb20gJXUgdG8gJXVcbiIsCi0JCQlwcml2LT5hY3RpdmVfcnhvbi5jaGFubmVsLCBjaGFubmVsKTsKKwkJCXByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwsIGNoKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQotCXByaXYtPnN3aXRjaF9yeG9uLmNoYW5uZWwgPSBjcHVfdG9fbGUxNihjaGFubmVsKTsKKwlwcml2LT5zd2l0Y2hfcnhvbi5jaGFubmVsID0gY21kLmNoYW5uZWw7CiAJcHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzID0gdHJ1ZTsKIAogCXJldHVybiBpd2xfc2VuZF9jbWRfc3luYyhwcml2LCAmaGNtZCk7CkBAIC0zNTIsMTQgKzM5MywxOCBAQAogCQkuc2V0X2N0X2tpbGwgPSBpd2w1MDAwX3NldF9jdF90aHJlc2hvbGQsCiAJIH0sCiAJLm1hbmFnZV9pYnNzX3N0YXRpb24gPSBpd2xhZ25fbWFuYWdlX2lic3Nfc3RhdGlvbiwKKwkudXBkYXRlX2JjYXN0X3N0YXRpb24gPSBpd2xfdXBkYXRlX2JjYXN0X3N0YXRpb24sCiAJLmRlYnVnZnNfb3BzID0gewogCQkucnhfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV9yeF9zdGF0c19yZWFkLAogCQkudHhfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV90eF9zdGF0c19yZWFkLAogCQkuZ2VuZXJhbF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX2dlbmVyYWxfc3RhdHNfcmVhZCwKKwkJLmJ0X3N0YXRzX3JlYWQgPSBpd2xfdWNvZGVfYnRfc3RhdHNfcmVhZCwKIAl9LAogCS5yZWNvdmVyX2Zyb21fdHhfc3RhbGwgPSBpd2xfYmdfbW9uaXRvcl9yZWNvdmVyLAogCS5jaGVja19wbGNwX2hlYWx0aCA9IGl3bF9nb29kX3BsY3BfaGVhbHRoLAogCS5jaGVja19hY2tfaGVhbHRoID0gaXdsX2dvb2RfYWNrX2hlYWx0aCwKKwkudHhmaWZvX2ZsdXNoID0gaXdsYWduX3R4Zmlmb19mbHVzaCwKKwkuZGV2X3R4Zmlmb19mbHVzaCA9IGl3bGFnbl9kZXZfdHhmaWZvX2ZsdXNoLAogfTsKIAogc3RhdGljIHN0cnVjdCBpd2xfbGliX29wcyBpd2w1MTUwX2xpYiA9IHsKQEAgLTQxNCw2ICs0NTksNyBAQAogCQkuc2V0X2N0X2tpbGwgPSBpd2w1MTUwX3NldF9jdF90aHJlc2hvbGQsCiAJIH0sCiAJLm1hbmFnZV9pYnNzX3N0YXRpb24gPSBpd2xhZ25fbWFuYWdlX2lic3Nfc3RhdGlvbiwKKwkudXBkYXRlX2JjYXN0X3N0YXRpb24gPSBpd2xfdXBkYXRlX2JjYXN0X3N0YXRpb24sCiAJLmRlYnVnZnNfb3BzID0gewogCQkucnhfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV9yeF9zdGF0c19yZWFkLAogCQkudHhfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV90eF9zdGF0c19yZWFkLApAQCAtNDIyLDYgKzQ2OCw4IEBACiAJLnJlY292ZXJfZnJvbV90eF9zdGFsbCA9IGl3bF9iZ19tb25pdG9yX3JlY292ZXIsCiAJLmNoZWNrX3BsY3BfaGVhbHRoID0gaXdsX2dvb2RfcGxjcF9oZWFsdGgsCiAJLmNoZWNrX2Fja19oZWFsdGggPSBpd2xfZ29vZF9hY2tfaGVhbHRoLAorCS50eGZpZm9fZmx1c2ggPSBpd2xhZ25fdHhmaWZvX2ZsdXNoLAorCS5kZXZfdHhmaWZvX2ZsdXNoID0gaXdsYWduX2Rldl90eGZpZm9fZmx1c2gsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9vcHMgaXdsNTAwMF9vcHMgPSB7CkBAIC02MjAsNiArNjY4LDcgQEAKIAkudWNvZGVfdHJhY2luZyA9IHRydWUsCiAJLnNlbnNpdGl2aXR5X2NhbGliX2J5X2RyaXZlciA9IHRydWUsCiAJLmNoYWluX25vaXNlX2NhbGliX2J5X2RyaXZlciA9IHRydWUsCisJLm5lZWRfZGNfY2FsaWIgPSB0cnVlLAogfTsKIAogc3RydWN0IGl3bF9jZmcgaXdsNTE1MF9hYmdfY2ZnID0gewpAQCAtNjQ5LDYgKzY5OCw3IEBACiAJLnVjb2RlX3RyYWNpbmcgPSB0cnVlLAogCS5zZW5zaXRpdml0eV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAogCS5jaGFpbl9ub2lzZV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAorCS5uZWVkX2RjX2NhbGliID0gdHJ1ZSwKIH07CiAKIE1PRFVMRV9GSVJNV0FSRShJV0w1MDAwX01PRFVMRV9GSVJNV0FSRShJV0w1MDAwX1VDT0RFX0FQSV9NQVgpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYwppbmRleCA5ZmJmNTRjLi41ODI3MDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jCkBAIC03MSw2ICs3MSwxMCBAQAogI2RlZmluZSBfSVdMNjAwMEcyQV9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0w2MDAwRzJBX0ZXX1BSRSAjYXBpICIudWNvZGUiCiAjZGVmaW5lIElXTDYwMDBHMkFfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgX0lXTDYwMDBHMkFfTU9EVUxFX0ZJUk1XQVJFKGFwaSkKIAorI2RlZmluZSBJV0w2MDAwRzJCX0ZXX1BSRSAiaXdsd2lmaS02MDAwZzJiLSIKKyNkZWZpbmUgX0lXTDYwMDBHMkJfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgSVdMNjAwMEcyQl9GV19QUkUgI2FwaSAiLnVjb2RlIgorI2RlZmluZSBJV0w2MDAwRzJCX01PRFVMRV9GSVJNV0FSRShhcGkpIF9JV0w2MDAwRzJCX01PRFVMRV9GSVJNV0FSRShhcGkpCisKIAogc3RhdGljIHZvaWQgaXdsNjAwMF9zZXRfY3RfdGhyZXNob2xkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKQEAgLTgwLDkgKzg0LDEwIEBACiB9CiAKIC8qIEluZGljYXRlIGNhbGlicmF0aW9uIHZlcnNpb24gdG8gdUNvZGUuICovCi1zdGF0aWMgdm9pZCBpd2w2MDUwX3NldF9jYWxpYl92ZXJzaW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDYwMDBfc2V0X2NhbGliX3ZlcnNpb24oc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5lZXByb21fb3BzLmNhbGliX3ZlcnNpb24ocHJpdikgPj0gNikKKwlpZiAocHJpdi0+Y2ZnLT5uZWVkX2RjX2NhbGliICYmCisJICAgIChwcml2LT5jZmctPm9wcy0+bGliLT5lZXByb21fb3BzLmNhbGliX3ZlcnNpb24ocHJpdikgPj0gNikpCiAJCWl3bF9zZXRfYml0KHByaXYsIENTUl9HUF9EUklWRVJfUkVHLAogCQkJCUNTUl9HUF9EUklWRVJfUkVHX0JJVF9DQUxJQl9WRVJTSU9ONik7CiB9CkBAIC0xNTUsOCArMTYwLDggQEAKIAkJCXByaXYtPmNmZy0+bnVtX29mX3F1ZXVlcyAqCiAJCQlzaXplb2Yoc3RydWN0IGl3bGFnbl9zY2RfYmNfdGJsKTsKIAlwcml2LT5od19wYXJhbXMudGZkX3NpemUgPSBzaXplb2Yoc3RydWN0IGl3bF90ZmQpOwotCXByaXYtPmh3X3BhcmFtcy5tYXhfc3RhdGlvbnMgPSBJV0w1MDAwX1NUQVRJT05fQ09VTlQ7Ci0JcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZCA9IElXTDUwMDBfQlJPQURDQVNUX0lEOworCXByaXYtPmh3X3BhcmFtcy5tYXhfc3RhdGlvbnMgPSBJV0xBR05fU1RBVElPTl9DT1VOVDsKKwlwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkID0gSVdMQUdOX0JST0FEQ0FTVF9JRDsKIAogCXByaXYtPmh3X3BhcmFtcy5tYXhfZGF0YV9zaXplID0gSVdMNjBfUlRDX0RBVEFfU0laRTsKIAlwcml2LT5od19wYXJhbXMubWF4X2luc3Rfc2l6ZSA9IElXTDYwX1JUQ19JTlNUX1NJWkU7CkBAIC0xODIsODMgKzE4Nyw3NyBAQAogCQlCSVQoSVdMX0NBTElCX0xPKQkJfAogCQlCSVQoSVdMX0NBTElCX1RYX0lRKQkJfAogCQlCSVQoSVdMX0NBTElCX0JBU0VfQkFORCk7CisJaWYgKHByaXYtPmNmZy0+bmVlZF9kY19jYWxpYikKKwkJcHJpdi0+aHdfcGFyYW1zLmNhbGliX2luaXRfY2ZnIHw9IEJJVChJV0xfQ0FMSUJfREMpOworCisJcHJpdi0+aHdfcGFyYW1zLmJlYWNvbl90aW1lX3RzZl9iaXRzID0gSVdMQUdOX0VYVF9CRUFDT05fVElNRV9QT1M7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpd2w2MDUwX2h3X3NldF9od19wYXJhbXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCWlmIChwcml2LT5jZmctPm1vZF9wYXJhbXMtPm51bV9vZl9xdWV1ZXMgPj0gSVdMX01JTl9OVU1fUVVFVUVTICYmCi0JICAgIHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlcyA8PSBJV0xBR05fTlVNX1FVRVVFUykKLQkJcHJpdi0+Y2ZnLT5udW1fb2ZfcXVldWVzID0KLQkJCXByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlczsKLQotCXByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bSA9IHByaXYtPmNmZy0+bnVtX29mX3F1ZXVlczsKLQlwcml2LT5od19wYXJhbXMuZG1hX2NobmxfbnVtID0gRkg1MF9UQ1NSX0NITkxfTlVNOwotCXByaXYtPmh3X3BhcmFtcy5zY2RfYmNfdGJsc19zaXplID0KLQkJCXByaXYtPmNmZy0+bnVtX29mX3F1ZXVlcyAqCi0JCQlzaXplb2Yoc3RydWN0IGl3bGFnbl9zY2RfYmNfdGJsKTsKLQlwcml2LT5od19wYXJhbXMudGZkX3NpemUgPSBzaXplb2Yoc3RydWN0IGl3bF90ZmQpOwotCXByaXYtPmh3X3BhcmFtcy5tYXhfc3RhdGlvbnMgPSBJV0w1MDAwX1NUQVRJT05fQ09VTlQ7Ci0JcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZCA9IElXTDUwMDBfQlJPQURDQVNUX0lEOwotCi0JcHJpdi0+aHdfcGFyYW1zLm1heF9kYXRhX3NpemUgPSBJV0w2MF9SVENfREFUQV9TSVpFOwotCXByaXYtPmh3X3BhcmFtcy5tYXhfaW5zdF9zaXplID0gSVdMNjBfUlRDX0lOU1RfU0laRTsKLQotCXByaXYtPmh3X3BhcmFtcy5tYXhfYnNtX3NpemUgPSAwOwotCXByaXYtPmh3X3BhcmFtcy5odDQwX2NoYW5uZWwgPSAgQklUKElFRUU4MDIxMV9CQU5EXzJHSFopIHwKLQkJCQkJQklUKElFRUU4MDIxMV9CQU5EXzVHSFopOwotCXByaXYtPmh3X3BhcmFtcy5yeF93cnRfcHRyX3JlZyA9IEZIX1JTQ1NSX0NITkwwX1dQVFI7Ci0KLQlwcml2LT5od19wYXJhbXMudHhfY2hhaW5zX251bSA9IG51bV9vZl9hbnQocHJpdi0+Y2ZnLT52YWxpZF90eF9hbnQpOwotCXByaXYtPmh3X3BhcmFtcy5yeF9jaGFpbnNfbnVtID0gbnVtX29mX2FudChwcml2LT5jZmctPnZhbGlkX3J4X2FudCk7Ci0JcHJpdi0+aHdfcGFyYW1zLnZhbGlkX3R4X2FudCA9IHByaXYtPmNmZy0+dmFsaWRfdHhfYW50OwotCXByaXYtPmh3X3BhcmFtcy52YWxpZF9yeF9hbnQgPSBwcml2LT5jZmctPnZhbGlkX3J4X2FudDsKLQotCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT50ZW1wX29wcy5zZXRfY3Rfa2lsbCkKLQkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dGVtcF9vcHMuc2V0X2N0X2tpbGwocHJpdik7Ci0KLQkvKiBTZXQgaW5pdGlhbCBzZW5zaXRpdml0eSBwYXJhbWV0ZXJzICovCi0JLyogU2V0IGluaXRpYWwgY2FsaWJyYXRpb24gc2V0ICovCi0JcHJpdi0+aHdfcGFyYW1zLnNlbnMgPSAmaXdsNjAwMF9zZW5zaXRpdml0eTsKLQlwcml2LT5od19wYXJhbXMuY2FsaWJfaW5pdF9jZmcgPQotCQlCSVQoSVdMX0NBTElCX1hUQUwpCQl8Ci0JCUJJVChJV0xfQ0FMSUJfREMpCQl8Ci0JCUJJVChJV0xfQ0FMSUJfTE8pCQl8Ci0JCUJJVChJV0xfQ0FMSUJfVFhfSVEpCQl8Ci0JCUJJVChJV0xfQ0FMSUJfQkFTRV9CQU5EKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGl3bDYwMDBfaHdfY2hhbm5lbF9zd2l0Y2goc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgY2hhbm5lbCkKK3N0YXRpYyBpbnQgaXdsNjAwMF9od19jaGFubmVsX3N3aXRjaChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dpdGNoICpjaF9zd2l0Y2gpCiB7CiAJc3RydWN0IGl3bDYwMDBfY2hhbm5lbF9zd2l0Y2hfY21kIGNtZDsKIAljb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKKwl1MzIgc3dpdGNoX3RpbWVfaW5fdXNlYywgdWNvZGVfc3dpdGNoX3RpbWU7CisJdTE2IGNoOworCXUzMiB0c2ZfbG93OworCXU4IHN3aXRjaF9jb3VudDsKKwl1MTYgYmVhY29uX2ludGVydmFsID0gbGUxNl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2ludGVydmFsKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmID0gcHJpdi0+dmlmOwogCXN0cnVjdCBpd2xfaG9zdF9jbWQgaGNtZCA9IHsKIAkJLmlkID0gUkVQTFlfQ0hBTk5FTF9TV0lUQ0gsCiAJCS5sZW4gPSBzaXplb2YoY21kKSwKLQkJLmZsYWdzID0gQ01EX1NJWkVfSFVHRSwKKwkJLmZsYWdzID0gQ01EX1NZTkMsCiAJCS5kYXRhID0gJmNtZCwKIAl9OwogCi0JSVdMX0RFQlVHXzExSChwcml2LCAiY2hhbm5lbCBzd2l0Y2ggZnJvbSAlZCB0byAlZFxuIiwKLQkJcHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCwgY2hhbm5lbCk7Ci0KIAljbWQuYmFuZCA9IHByaXYtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWjsKLQljbWQuY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoYW5uZWwpOworCWNoID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNoX3N3aXRjaC0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEpOworCUlXTF9ERUJVR18xMUgocHJpdiwgImNoYW5uZWwgc3dpdGNoIGZyb20gJXUgdG8gJXVcbiIsCisJCSAgICAgIHByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwsIGNoKTsKKwljbWQuY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoKTsKIAljbWQucnhvbl9mbGFncyA9IHByaXYtPnN0YWdpbmdfcnhvbi5mbGFnczsKIAljbWQucnhvbl9maWx0ZXJfZmxhZ3MgPSBwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzOwotCWNtZC5zd2l0Y2hfdGltZSA9IGNwdV90b19sZTMyKHByaXYtPnVjb2RlX2JlYWNvbl90aW1lKTsKLQljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgcHJpdi0+YmFuZCwgY2hhbm5lbCk7CisJc3dpdGNoX2NvdW50ID0gY2hfc3dpdGNoLT5jb3VudDsKKwl0c2ZfbG93ID0gY2hfc3dpdGNoLT50aW1lc3RhbXAgJiAweDBmZmZmZmZmZjsKKwkvKgorCSAqIGNhbGN1bGF0ZSB0aGUgdWNvZGUgY2hhbm5lbCBzd2l0Y2ggdGltZQorCSAqIGFkZGluZyBUU0YgYXMgb25lIG9mIHRoZSBmYWN0b3IgZm9yIHdoZW4gdG8gc3dpdGNoCisJICovCisJaWYgKChwcml2LT51Y29kZV9iZWFjb25fdGltZSA+IHRzZl9sb3cpICYmIGJlYWNvbl9pbnRlcnZhbCkgeworCQlpZiAoc3dpdGNoX2NvdW50ID4gKChwcml2LT51Y29kZV9iZWFjb25fdGltZSAtIHRzZl9sb3cpIC8KKwkJICAgIGJlYWNvbl9pbnRlcnZhbCkpIHsKKwkJCXN3aXRjaF9jb3VudCAtPSAocHJpdi0+dWNvZGVfYmVhY29uX3RpbWUgLQorCQkJCXRzZl9sb3cpIC8gYmVhY29uX2ludGVydmFsOworCQl9IGVsc2UKKwkJCXN3aXRjaF9jb3VudCA9IDA7CisJfQorCWlmIChzd2l0Y2hfY291bnQgPD0gMSkKKwkJY21kLnN3aXRjaF90aW1lID0gY3B1X3RvX2xlMzIocHJpdi0+dWNvZGVfYmVhY29uX3RpbWUpOworCWVsc2UgeworCQlzd2l0Y2hfdGltZV9pbl91c2VjID0KKwkJCXZpZi0+YnNzX2NvbmYuYmVhY29uX2ludCAqIHN3aXRjaF9jb3VudCAqIFRJTUVfVU5JVDsKKwkJdWNvZGVfc3dpdGNoX3RpbWUgPSBpd2xfdXNlY3NfdG9fYmVhY29ucyhwcml2LAorCQkJCQkJCSBzd2l0Y2hfdGltZV9pbl91c2VjLAorCQkJCQkJCSBiZWFjb25faW50ZXJ2YWwpOworCQljbWQuc3dpdGNoX3RpbWUgPSBpd2xfYWRkX2JlYWNvbl90aW1lKHByaXYsCisJCQkJCQkgICAgICBwcml2LT51Y29kZV9iZWFjb25fdGltZSwKKwkJCQkJCSAgICAgIHVjb2RlX3N3aXRjaF90aW1lLAorCQkJCQkJICAgICAgYmVhY29uX2ludGVydmFsKTsKKwl9CisJSVdMX0RFQlVHXzExSChwcml2LCAidUNvZGUgdGltZSBmb3IgdGhlIHN3aXRjaCBpcyAweCV4XG4iLAorCQkgICAgICBjbWQuc3dpdGNoX3RpbWUpOworCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBwcml2LT5iYW5kLCBjaCk7CiAJaWYgKGNoX2luZm8pCiAJCWNtZC5leHBlY3RfYmVhY29uID0gaXNfY2hhbm5lbF9yYWRhcihjaF9pbmZvKTsKIAllbHNlIHsKIAkJSVdMX0VSUihwcml2LCAiaW52YWxpZCBjaGFubmVsIHN3aXRjaCBmcm9tICV1IHRvICV1XG4iLAotCQkJcHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCwgY2hhbm5lbCk7CisJCQlwcml2LT5hY3RpdmVfcnhvbi5jaGFubmVsLCBjaCk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KLQlwcml2LT5zd2l0Y2hfcnhvbi5jaGFubmVsID0gY3B1X3RvX2xlMTYoY2hhbm5lbCk7CisJcHJpdi0+c3dpdGNoX3J4b24uY2hhbm5lbCA9IGNtZC5jaGFubmVsOwogCXByaXYtPnN3aXRjaF9yeG9uLnN3aXRjaF9pbl9wcm9ncmVzcyA9IHRydWU7CiAKIAlyZXR1cm4gaXdsX3NlbmRfY21kX3N5bmMocHJpdiwgJmhjbWQpOwpAQCAtMzE2LDE2ICszMTUsMjEgQEAKIAkudGVtcF9vcHMgPSB7CiAJCS50ZW1wZXJhdHVyZSA9IGl3bGFnbl90ZW1wZXJhdHVyZSwKIAkJLnNldF9jdF9raWxsID0gaXdsNjAwMF9zZXRfY3RfdGhyZXNob2xkLAorCQkuc2V0X2NhbGliX3ZlcnNpb24gPSBpd2w2MDAwX3NldF9jYWxpYl92ZXJzaW9uLAogCSB9LAogCS5tYW5hZ2VfaWJzc19zdGF0aW9uID0gaXdsYWduX21hbmFnZV9pYnNzX3N0YXRpb24sCisJLnVwZGF0ZV9iY2FzdF9zdGF0aW9uID0gaXdsX3VwZGF0ZV9iY2FzdF9zdGF0aW9uLAogCS5kZWJ1Z2ZzX29wcyA9IHsKIAkJLnJ4X3N0YXRzX3JlYWQgPSBpd2xfdWNvZGVfcnhfc3RhdHNfcmVhZCwKIAkJLnR4X3N0YXRzX3JlYWQgPSBpd2xfdWNvZGVfdHhfc3RhdHNfcmVhZCwKIAkJLmdlbmVyYWxfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV9nZW5lcmFsX3N0YXRzX3JlYWQsCisJCS5idF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX2J0X3N0YXRzX3JlYWQsCiAJfSwKIAkucmVjb3Zlcl9mcm9tX3R4X3N0YWxsID0gaXdsX2JnX21vbml0b3JfcmVjb3ZlciwKIAkuY2hlY2tfcGxjcF9oZWFsdGggPSBpd2xfZ29vZF9wbGNwX2hlYWx0aCwKIAkuY2hlY2tfYWNrX2hlYWx0aCA9IGl3bF9nb29kX2Fja19oZWFsdGgsCisJLnR4Zmlmb19mbHVzaCA9IGl3bGFnbl90eGZpZm9fZmx1c2gsCisJLmRldl90eGZpZm9fZmx1c2ggPSBpd2xhZ25fZGV2X3R4Zmlmb19mbHVzaCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX29wcyBpd2w2MDAwX29wcyA9IHsKQEAgLTMzNSw3OSArMzM5LDI1IEBACiAJLmxlZCA9ICZpd2xhZ25fbGVkX29wcywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaXdsX2xpYl9vcHMgaXdsNjA1MF9saWIgPSB7Ci0JLnNldF9od19wYXJhbXMgPSBpd2w2MDUwX2h3X3NldF9od19wYXJhbXMsCi0JLnR4cV91cGRhdGVfYnl0ZV9jbnRfdGJsID0gaXdsYWduX3R4cV91cGRhdGVfYnl0ZV9jbnRfdGJsLAotCS50eHFfaW52YWxfYnl0ZV9jbnRfdGJsID0gaXdsYWduX3R4cV9pbnZhbF9ieXRlX2NudF90YmwsCi0JLnR4cV9zZXRfc2NoZWQgPSBpd2xhZ25fdHhxX3NldF9zY2hlZCwKLQkudHhxX2FnZ19lbmFibGUgPSBpd2xhZ25fdHhxX2FnZ19lbmFibGUsCi0JLnR4cV9hZ2dfZGlzYWJsZSA9IGl3bGFnbl90eHFfYWdnX2Rpc2FibGUsCi0JLnR4cV9hdHRhY2hfYnVmX3RvX3RmZCA9IGl3bF9od190eHFfYXR0YWNoX2J1Zl90b190ZmQsCi0JLnR4cV9mcmVlX3RmZCA9IGl3bF9od190eHFfZnJlZV90ZmQsCi0JLnR4cV9pbml0ID0gaXdsX2h3X3R4X3F1ZXVlX2luaXQsCi0JLnJ4X2hhbmRsZXJfc2V0dXAgPSBpd2xhZ25fcnhfaGFuZGxlcl9zZXR1cCwKLQkuc2V0dXBfZGVmZXJyZWRfd29yayA9IGl3bGFnbl9zZXR1cF9kZWZlcnJlZF93b3JrLAotCS5pc192YWxpZF9ydGNfZGF0YV9hZGRyID0gaXdsYWduX2h3X3ZhbGlkX3J0Y19kYXRhX2FkZHIsCi0JLmxvYWRfdWNvZGUgPSBpd2xhZ25fbG9hZF91Y29kZSwKLQkuZHVtcF9uaWNfZXZlbnRfbG9nID0gaXdsX2R1bXBfbmljX2V2ZW50X2xvZywKLQkuZHVtcF9uaWNfZXJyb3JfbG9nID0gaXdsX2R1bXBfbmljX2Vycm9yX2xvZywKLQkuZHVtcF9jc3IgPSBpd2xfZHVtcF9jc3IsCi0JLmR1bXBfZmggPSBpd2xfZHVtcF9maCwKLQkuaW5pdF9hbGl2ZV9zdGFydCA9IGl3bGFnbl9pbml0X2FsaXZlX3N0YXJ0LAotCS5hbGl2ZV9ub3RpZnkgPSBpd2xhZ25fYWxpdmVfbm90aWZ5LAotCS5zZW5kX3R4X3Bvd2VyID0gaXdsYWduX3NlbmRfdHhfcG93ZXIsCi0JLnVwZGF0ZV9jaGFpbl9mbGFncyA9IGl3bF91cGRhdGVfY2hhaW5fZmxhZ3MsCi0JLnNldF9jaGFubmVsX3N3aXRjaCA9IGl3bDYwMDBfaHdfY2hhbm5lbF9zd2l0Y2gsCi0JLmFwbV9vcHMgPSB7Ci0JCS5pbml0ID0gaXdsX2FwbV9pbml0LAotCQkuc3RvcCA9IGl3bF9hcG1fc3RvcCwKLQkJLmNvbmZpZyA9IGl3bDYwMDBfbmljX2NvbmZpZywKLQkJLnNldF9wd3Jfc3JjID0gaXdsX3NldF9wd3Jfc3JjLAotCX0sCi0JLmVlcHJvbV9vcHMgPSB7Ci0JCS5yZWd1bGF0b3J5X2JhbmRzID0gewotCQkJRUVQUk9NX1JFR19CQU5EXzFfQ0hBTk5FTFMsCi0JCQlFRVBST01fUkVHX0JBTkRfMl9DSEFOTkVMUywKLQkJCUVFUFJPTV9SRUdfQkFORF8zX0NIQU5ORUxTLAotCQkJRUVQUk9NX1JFR19CQU5EXzRfQ0hBTk5FTFMsCi0JCQlFRVBST01fUkVHX0JBTkRfNV9DSEFOTkVMUywKLQkJCUVFUFJPTV82MDAwX1JFR19CQU5EXzI0X0hUNDBfQ0hBTk5FTFMsCi0JCQlFRVBST01fUkVHX0JBTkRfNTJfSFQ0MF9DSEFOTkVMUwotCQl9LAotCQkudmVyaWZ5X3NpZ25hdHVyZSAgPSBpd2xjb3JlX2VlcHJvbV92ZXJpZnlfc2lnbmF0dXJlLAotCQkuYWNxdWlyZV9zZW1hcGhvcmUgPSBpd2xjb3JlX2VlcHJvbV9hY3F1aXJlX3NlbWFwaG9yZSwKLQkJLnJlbGVhc2Vfc2VtYXBob3JlID0gaXdsY29yZV9lZXByb21fcmVsZWFzZV9zZW1hcGhvcmUsCi0JCS5jYWxpYl92ZXJzaW9uCT0gaXdsYWduX2VlcHJvbV9jYWxpYl92ZXJzaW9uLAotCQkucXVlcnlfYWRkciA9IGl3bGFnbl9lZXByb21fcXVlcnlfYWRkciwKLQkJLnVwZGF0ZV9lbmhhbmNlZF90eHBvd2VyID0gaXdsY29yZV9lZXByb21fZW5oYW5jZWRfdHhwb3dlciwKLQl9LAotCS5wb3N0X2Fzc29jaWF0ZSA9IGl3bF9wb3N0X2Fzc29jaWF0ZSwKLQkuaXNyID0gaXdsX2lzcl9pY3QsCi0JLmNvbmZpZ19hcCA9IGl3bF9jb25maWdfYXAsCi0JLnRlbXBfb3BzID0gewotCQkudGVtcGVyYXR1cmUgPSBpd2xhZ25fdGVtcGVyYXR1cmUsCi0JCS5zZXRfY3Rfa2lsbCA9IGl3bDYwMDBfc2V0X2N0X3RocmVzaG9sZCwKLQkJLnNldF9jYWxpYl92ZXJzaW9uID0gaXdsNjA1MF9zZXRfY2FsaWJfdmVyc2lvbiwKLQkgfSwKLQkubWFuYWdlX2lic3Nfc3RhdGlvbiA9IGl3bGFnbl9tYW5hZ2VfaWJzc19zdGF0aW9uLAotCS5kZWJ1Z2ZzX29wcyA9IHsKLQkJLnJ4X3N0YXRzX3JlYWQgPSBpd2xfdWNvZGVfcnhfc3RhdHNfcmVhZCwKLQkJLnR4X3N0YXRzX3JlYWQgPSBpd2xfdWNvZGVfdHhfc3RhdHNfcmVhZCwKLQkJLmdlbmVyYWxfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV9nZW5lcmFsX3N0YXRzX3JlYWQsCi0JfSwKLQkucmVjb3Zlcl9mcm9tX3R4X3N0YWxsID0gaXdsX2JnX21vbml0b3JfcmVjb3ZlciwKLQkuY2hlY2tfcGxjcF9oZWFsdGggPSBpd2xfZ29vZF9wbGNwX2hlYWx0aCwKLQkuY2hlY2tfYWNrX2hlYWx0aCA9IGl3bF9nb29kX2Fja19oZWFsdGgsCitzdGF0aWMgdm9pZCBkb19ub3Rfc2VuZF9idF9jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworfQorCitzdGF0aWMgc3RydWN0IGl3bF9oY21kX29wcyBpd2w2MDAwZzJiX2hjbWQgPSB7CisJLnJ4b25fYXNzb2MgPSBpd2xhZ25fc2VuZF9yeG9uX2Fzc29jLAorCS5jb21taXRfcnhvbiA9IGl3bF9jb21taXRfcnhvbiwKKwkuc2V0X3J4b25fY2hhaW4gPSBpd2xfc2V0X3J4b25fY2hhaW4sCisJLnNldF90eF9hbnQgPSBpd2xhZ25fc2VuZF90eF9hbnRfY29uZmlnLAorCS5zZW5kX2J0X2NvbmZpZyA9IGRvX25vdF9zZW5kX2J0X2NvbmZpZywKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX29wcyBpd2w2MDUwX29wcyA9IHsKLQkubGliID0gJml3bDYwNTBfbGliLAotCS5oY21kID0gJml3bGFnbl9oY21kLAorc3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfb3BzIGl3bDYwMDBnMmJfb3BzID0geworCS5saWIgPSAmaXdsNjAwMF9saWIsCisJLmhjbWQgPSAmaXdsNjAwMGcyYl9oY21kLAogCS51dGlscyA9ICZpd2xhZ25faGNtZF91dGlscywKIAkubGVkID0gJml3bGFnbl9sZWRfb3BzLAogfTsKIAotCiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwZzJhXzJhZ25fY2ZnID0gewogCS5uYW1lID0gIjYwMDAgU2VyaWVzIDJ4MiBBR04gR2VuMmEiLAogCS5md19uYW1lX3ByZSA9IElXTDYwMDBHMkFfRldfUFJFLApAQCAtNDQzLDYgKzM5MywyOTkgQEAKIAkudWNvZGVfdHJhY2luZyA9IHRydWUsCiAJLnNlbnNpdGl2aXR5X2NhbGliX2J5X2RyaXZlciA9IHRydWUsCiAJLmNoYWluX25vaXNlX2NhbGliX2J5X2RyaXZlciA9IHRydWUsCisJLm5lZWRfZGNfY2FsaWIgPSB0cnVlLAorfTsKKworc3RydWN0IGl3bF9jZmcgaXdsNjAwMGcyYV8yYWJnX2NmZyA9IHsKKwkubmFtZSA9ICI2MDAwIFNlcmllcyAyeDIgQUJHIEdlbjJhIiwKKwkuZndfbmFtZV9wcmUgPSBJV0w2MDAwRzJBX0ZXX1BSRSwKKwkudWNvZGVfYXBpX21heCA9IElXTDYwMDBHMl9VQ09ERV9BUElfTUFYLAorCS51Y29kZV9hcGlfbWluID0gSVdMNjAwMEcyX1VDT0RFX0FQSV9NSU4sCisJLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0csCisJLm9wcyA9ICZpd2w2MDAwX29wcywKKwkuZWVwcm9tX3NpemUgPSBPVFBfTE9XX0lNQUdFX1NJWkUsCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNjAwMEcyX0VFUFJPTV9WRVJTSU9OLAorCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzYwMDBHMl9UWF9QT1dFUl9WRVJTSU9OLAorCS5udW1fb2ZfcXVldWVzID0gSVdMQUdOX05VTV9RVUVVRVMsCisJLm51bV9vZl9hbXBkdV9xdWV1ZXMgPSBJV0xBR05fTlVNX0FNUERVX1FVRVVFUywKKwkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0FCLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQUIsCisJLnBsbF9jZmdfdmFsID0gMCwKKwkuc2V0X2wwcyA9IHRydWUsCisJLnVzZV9ic20gPSBmYWxzZSwKKwkucGFfdHlwZSA9IElXTF9QQV9TWVNURU0sCisJLm1heF9sbF9pdGVtcyA9IE9UUF9NQVhfTExfSVRFTVNfNngwMCwKKwkuc2hhZG93X3JhbV9zdXBwb3J0ID0gdHJ1ZSwKKwkubGVkX2NvbXBlbnNhdGlvbiA9IDUxLAorCS5jaGFpbl9ub2lzZV9udW1fYmVhY29ucyA9IElXTF9DQUxfTlVNX0JFQUNPTlMsCisJLnN1cHBvcnRzX2lkbGUgPSB0cnVlLAorCS5hZHZfdGhlcm1hbF90aHJvdHRsZSA9IHRydWUsCisJLnN1cHBvcnRfY3Rfa2lsbF9leGl0ID0gdHJ1ZSwKKwkucGxjcF9kZWx0YV90aHJlc2hvbGQgPSBJV0xfTUFYX1BMQ1BfRVJSX1RIUkVTSE9MRF9ERUYsCisJLmNoYWluX25vaXNlX3NjYWxlID0gMTAwMCwKKwkubW9uaXRvcl9yZWNvdmVyX3BlcmlvZCA9IElXTF9NT05JVE9SSU5HX1BFUklPRCwKKwkubWF4X2V2ZW50X2xvZ19zaXplID0gNTEyLAorCS5zZW5zaXRpdml0eV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAorCS5jaGFpbl9ub2lzZV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAorCS5uZWVkX2RjX2NhbGliID0gdHJ1ZSwKK307CisKK3N0cnVjdCBpd2xfY2ZnIGl3bDYwMDBnMmFfMmJnX2NmZyA9IHsKKwkubmFtZSA9ICI2MDAwIFNlcmllcyAyeDIgQkcgR2VuMmEiLAorCS5md19uYW1lX3ByZSA9IElXTDYwMDBHMkFfRldfUFJFLAorCS51Y29kZV9hcGlfbWF4ID0gSVdMNjAwMEcyX1VDT0RFX0FQSV9NQVgsCisJLnVjb2RlX2FwaV9taW4gPSBJV0w2MDAwRzJfVUNPREVfQVBJX01JTiwKKwkuc2t1ID0gSVdMX1NLVV9HLAorCS5vcHMgPSAmaXdsNjAwMF9vcHMsCisJLmVlcHJvbV9zaXplID0gT1RQX0xPV19JTUFHRV9TSVpFLAorCS5lZXByb21fdmVyID0gRUVQUk9NXzYwMDBHMl9FRVBST01fVkVSU0lPTiwKKwkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV82MDAwRzJfVFhfUE9XRVJfVkVSU0lPTiwKKwkubnVtX29mX3F1ZXVlcyA9IElXTEFHTl9OVU1fUVVFVUVTLAorCS5udW1fb2ZfYW1wZHVfcXVldWVzID0gSVdMQUdOX05VTV9BTVBEVV9RVUVVRVMsCisJLm1vZF9wYXJhbXMgPSAmaXdsYWduX21vZF9wYXJhbXMsCisJLnZhbGlkX3R4X2FudCA9IEFOVF9BQiwKKwkudmFsaWRfcnhfYW50ID0gQU5UX0FCLAorCS5wbGxfY2ZnX3ZhbCA9IDAsCisJLnNldF9sMHMgPSB0cnVlLAorCS51c2VfYnNtID0gZmFsc2UsCisJLnBhX3R5cGUgPSBJV0xfUEFfU1lTVEVNLAorCS5tYXhfbGxfaXRlbXMgPSBPVFBfTUFYX0xMX0lURU1TXzZ4MDAsCisJLnNoYWRvd19yYW1fc3VwcG9ydCA9IHRydWUsCisJLmxlZF9jb21wZW5zYXRpb24gPSA1MSwKKwkuY2hhaW5fbm9pc2VfbnVtX2JlYWNvbnMgPSBJV0xfQ0FMX05VTV9CRUFDT05TLAorCS5zdXBwb3J0c19pZGxlID0gdHJ1ZSwKKwkuYWR2X3RoZXJtYWxfdGhyb3R0bGUgPSB0cnVlLAorCS5zdXBwb3J0X2N0X2tpbGxfZXhpdCA9IHRydWUsCisJLnBsY3BfZGVsdGFfdGhyZXNob2xkID0gSVdMX01BWF9QTENQX0VSUl9USFJFU0hPTERfREVGLAorCS5jaGFpbl9ub2lzZV9zY2FsZSA9IDEwMDAsCisJLm1vbml0b3JfcmVjb3Zlcl9wZXJpb2QgPSBJV0xfTU9OSVRPUklOR19QRVJJT0QsCisJLm1heF9ldmVudF9sb2dfc2l6ZSA9IDUxMiwKKwkuc2Vuc2l0aXZpdHlfY2FsaWJfYnlfZHJpdmVyID0gdHJ1ZSwKKwkuY2hhaW5fbm9pc2VfY2FsaWJfYnlfZHJpdmVyID0gdHJ1ZSwKKwkubmVlZF9kY19jYWxpYiA9IHRydWUsCit9OworCitzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwZzJiXzJhZ25fY2ZnID0geworCS5uYW1lID0gIjYwMDAgU2VyaWVzIDJ4MiBBR04gR2VuMmIiLAorCS5md19uYW1lX3ByZSA9IElXTDYwMDBHMkJfRldfUFJFLAorCS51Y29kZV9hcGlfbWF4ID0gSVdMNjAwMEcyX1VDT0RFX0FQSV9NQVgsCisJLnVjb2RlX2FwaV9taW4gPSBJV0w2MDAwRzJfVUNPREVfQVBJX01JTiwKKwkuc2t1ID0gSVdMX1NLVV9BfElXTF9TS1VfR3xJV0xfU0tVX04sCisJLm9wcyA9ICZpd2w2MDAwZzJiX29wcywKKwkuZWVwcm9tX3NpemUgPSBPVFBfTE9XX0lNQUdFX1NJWkUsCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNjAwMEcyX0VFUFJPTV9WRVJTSU9OLAorCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzYwMDBHMl9UWF9QT1dFUl9WRVJTSU9OLAorCS5udW1fb2ZfcXVldWVzID0gSVdMQUdOX05VTV9RVUVVRVMsCisJLm51bV9vZl9hbXBkdV9xdWV1ZXMgPSBJV0xBR05fTlVNX0FNUERVX1FVRVVFUywKKwkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0FCLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQUIsCisJLnBsbF9jZmdfdmFsID0gMCwKKwkuc2V0X2wwcyA9IHRydWUsCisJLnVzZV9ic20gPSBmYWxzZSwKKwkucGFfdHlwZSA9IElXTF9QQV9TWVNURU0sCisJLm1heF9sbF9pdGVtcyA9IE9UUF9NQVhfTExfSVRFTVNfNngwMCwKKwkuc2hhZG93X3JhbV9zdXBwb3J0ID0gdHJ1ZSwKKwkuaHRfZ3JlZW5maWVsZF9zdXBwb3J0ID0gdHJ1ZSwKKwkubGVkX2NvbXBlbnNhdGlvbiA9IDUxLAorCS51c2VfcnRzX2Zvcl9odCA9IHRydWUsIC8qIHVzZSBydHMvY3RzIHByb3RlY3Rpb24gKi8KKwkuY2hhaW5fbm9pc2VfbnVtX2JlYWNvbnMgPSBJV0xfQ0FMX05VTV9CRUFDT05TLAorCS5zdXBwb3J0c19pZGxlID0gdHJ1ZSwKKwkuYWR2X3RoZXJtYWxfdGhyb3R0bGUgPSB0cnVlLAorCS5zdXBwb3J0X2N0X2tpbGxfZXhpdCA9IHRydWUsCisJLnBsY3BfZGVsdGFfdGhyZXNob2xkID0gSVdMX01BWF9QTENQX0VSUl9USFJFU0hPTERfREVGLAorCS5jaGFpbl9ub2lzZV9zY2FsZSA9IDEwMDAsCisJLm1vbml0b3JfcmVjb3Zlcl9wZXJpb2QgPSBJV0xfTU9OSVRPUklOR19QRVJJT0QsCisJLm1heF9ldmVudF9sb2dfc2l6ZSA9IDUxMiwKKwkuc2Vuc2l0aXZpdHlfY2FsaWJfYnlfZHJpdmVyID0gdHJ1ZSwKKwkuY2hhaW5fbm9pc2VfY2FsaWJfYnlfZHJpdmVyID0gdHJ1ZSwKKwkubmVlZF9kY19jYWxpYiA9IHRydWUsCisJLmJ0X3N0YXRpc3RpY3MgPSB0cnVlLAorfTsKKworc3RydWN0IGl3bF9jZmcgaXdsNjAwMGcyYl8yYWJnX2NmZyA9IHsKKwkubmFtZSA9ICI2MDAwIFNlcmllcyAyeDIgQUJHIEdlbjJiIiwKKwkuZndfbmFtZV9wcmUgPSBJV0w2MDAwRzJCX0ZXX1BSRSwKKwkudWNvZGVfYXBpX21heCA9IElXTDYwMDBHMl9VQ09ERV9BUElfTUFYLAorCS51Y29kZV9hcGlfbWluID0gSVdMNjAwMEcyX1VDT0RFX0FQSV9NSU4sCisJLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0csCisJLm9wcyA9ICZpd2w2MDAwZzJiX29wcywKKwkuZWVwcm9tX3NpemUgPSBPVFBfTE9XX0lNQUdFX1NJWkUsCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNjAwMEcyX0VFUFJPTV9WRVJTSU9OLAorCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzYwMDBHMl9UWF9QT1dFUl9WRVJTSU9OLAorCS5udW1fb2ZfcXVldWVzID0gSVdMQUdOX05VTV9RVUVVRVMsCisJLm51bV9vZl9hbXBkdV9xdWV1ZXMgPSBJV0xBR05fTlVNX0FNUERVX1FVRVVFUywKKwkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0FCLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQUIsCisJLnBsbF9jZmdfdmFsID0gMCwKKwkuc2V0X2wwcyA9IHRydWUsCisJLnVzZV9ic20gPSBmYWxzZSwKKwkucGFfdHlwZSA9IElXTF9QQV9TWVNURU0sCisJLm1heF9sbF9pdGVtcyA9IE9UUF9NQVhfTExfSVRFTVNfNngwMCwKKwkuc2hhZG93X3JhbV9zdXBwb3J0ID0gdHJ1ZSwKKwkubGVkX2NvbXBlbnNhdGlvbiA9IDUxLAorCS5jaGFpbl9ub2lzZV9udW1fYmVhY29ucyA9IElXTF9DQUxfTlVNX0JFQUNPTlMsCisJLnN1cHBvcnRzX2lkbGUgPSB0cnVlLAorCS5hZHZfdGhlcm1hbF90aHJvdHRsZSA9IHRydWUsCisJLnN1cHBvcnRfY3Rfa2lsbF9leGl0ID0gdHJ1ZSwKKwkucGxjcF9kZWx0YV90aHJlc2hvbGQgPSBJV0xfTUFYX1BMQ1BfRVJSX1RIUkVTSE9MRF9ERUYsCisJLmNoYWluX25vaXNlX3NjYWxlID0gMTAwMCwKKwkubW9uaXRvcl9yZWNvdmVyX3BlcmlvZCA9IElXTF9NT05JVE9SSU5HX1BFUklPRCwKKwkubWF4X2V2ZW50X2xvZ19zaXplID0gNTEyLAorCS5zZW5zaXRpdml0eV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAorCS5jaGFpbl9ub2lzZV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAorCS5uZWVkX2RjX2NhbGliID0gdHJ1ZSwKKwkuYnRfc3RhdGlzdGljcyA9IHRydWUsCit9OworCitzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwZzJiXzJiZ25fY2ZnID0geworCS5uYW1lID0gIjYwMDAgU2VyaWVzIDJ4MiBCR04gR2VuMmIiLAorCS5md19uYW1lX3ByZSA9IElXTDYwMDBHMkJfRldfUFJFLAorCS51Y29kZV9hcGlfbWF4ID0gSVdMNjAwMEcyX1VDT0RFX0FQSV9NQVgsCisJLnVjb2RlX2FwaV9taW4gPSBJV0w2MDAwRzJfVUNPREVfQVBJX01JTiwKKwkuc2t1ID0gSVdMX1NLVV9HfElXTF9TS1VfTiwKKwkub3BzID0gJml3bDYwMDBnMmJfb3BzLAorCS5lZXByb21fc2l6ZSA9IE9UUF9MT1dfSU1BR0VfU0laRSwKKwkuZWVwcm9tX3ZlciA9IEVFUFJPTV82MDAwRzJfRUVQUk9NX1ZFUlNJT04sCisJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNjAwMEcyX1RYX1BPV0VSX1ZFUlNJT04sCisJLm51bV9vZl9xdWV1ZXMgPSBJV0xBR05fTlVNX1FVRVVFUywKKwkubnVtX29mX2FtcGR1X3F1ZXVlcyA9IElXTEFHTl9OVU1fQU1QRFVfUVVFVUVTLAorCS5tb2RfcGFyYW1zID0gJml3bGFnbl9tb2RfcGFyYW1zLAorCS52YWxpZF90eF9hbnQgPSBBTlRfQUIsCisJLnZhbGlkX3J4X2FudCA9IEFOVF9BQiwKKwkucGxsX2NmZ192YWwgPSAwLAorCS5zZXRfbDBzID0gdHJ1ZSwKKwkudXNlX2JzbSA9IGZhbHNlLAorCS5wYV90eXBlID0gSVdMX1BBX1NZU1RFTSwKKwkubWF4X2xsX2l0ZW1zID0gT1RQX01BWF9MTF9JVEVNU182eDAwLAorCS5zaGFkb3dfcmFtX3N1cHBvcnQgPSB0cnVlLAorCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSB0cnVlLAorCS5sZWRfY29tcGVuc2F0aW9uID0gNTEsCisJLnVzZV9ydHNfZm9yX2h0ID0gdHJ1ZSwgLyogdXNlIHJ0cy9jdHMgcHJvdGVjdGlvbiAqLworCS5jaGFpbl9ub2lzZV9udW1fYmVhY29ucyA9IElXTF9DQUxfTlVNX0JFQUNPTlMsCisJLnN1cHBvcnRzX2lkbGUgPSB0cnVlLAorCS5hZHZfdGhlcm1hbF90aHJvdHRsZSA9IHRydWUsCisJLnN1cHBvcnRfY3Rfa2lsbF9leGl0ID0gdHJ1ZSwKKwkucGxjcF9kZWx0YV90aHJlc2hvbGQgPSBJV0xfTUFYX1BMQ1BfRVJSX1RIUkVTSE9MRF9ERUYsCisJLmNoYWluX25vaXNlX3NjYWxlID0gMTAwMCwKKwkubW9uaXRvcl9yZWNvdmVyX3BlcmlvZCA9IElXTF9NT05JVE9SSU5HX1BFUklPRCwKKwkubWF4X2V2ZW50X2xvZ19zaXplID0gNTEyLAorCS5zZW5zaXRpdml0eV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAorCS5jaGFpbl9ub2lzZV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAorCS5uZWVkX2RjX2NhbGliID0gdHJ1ZSwKKwkuYnRfc3RhdGlzdGljcyA9IHRydWUsCit9OworCitzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwZzJiXzJiZ19jZmcgPSB7CisJLm5hbWUgPSAiNjAwMCBTZXJpZXMgMngyIEJHIEdlbjJiIiwKKwkuZndfbmFtZV9wcmUgPSBJV0w2MDAwRzJCX0ZXX1BSRSwKKwkudWNvZGVfYXBpX21heCA9IElXTDYwMDBHMl9VQ09ERV9BUElfTUFYLAorCS51Y29kZV9hcGlfbWluID0gSVdMNjAwMEcyX1VDT0RFX0FQSV9NSU4sCisJLnNrdSA9IElXTF9TS1VfRywKKwkub3BzID0gJml3bDYwMDBnMmJfb3BzLAorCS5lZXByb21fc2l6ZSA9IE9UUF9MT1dfSU1BR0VfU0laRSwKKwkuZWVwcm9tX3ZlciA9IEVFUFJPTV82MDAwRzJfRUVQUk9NX1ZFUlNJT04sCisJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNjAwMEcyX1RYX1BPV0VSX1ZFUlNJT04sCisJLm51bV9vZl9xdWV1ZXMgPSBJV0xBR05fTlVNX1FVRVVFUywKKwkubnVtX29mX2FtcGR1X3F1ZXVlcyA9IElXTEFHTl9OVU1fQU1QRFVfUVVFVUVTLAorCS5tb2RfcGFyYW1zID0gJml3bGFnbl9tb2RfcGFyYW1zLAorCS52YWxpZF90eF9hbnQgPSBBTlRfQUIsCisJLnZhbGlkX3J4X2FudCA9IEFOVF9BQiwKKwkucGxsX2NmZ192YWwgPSAwLAorCS5zZXRfbDBzID0gdHJ1ZSwKKwkudXNlX2JzbSA9IGZhbHNlLAorCS5wYV90eXBlID0gSVdMX1BBX1NZU1RFTSwKKwkubWF4X2xsX2l0ZW1zID0gT1RQX01BWF9MTF9JVEVNU182eDAwLAorCS5zaGFkb3dfcmFtX3N1cHBvcnQgPSB0cnVlLAorCS5sZWRfY29tcGVuc2F0aW9uID0gNTEsCisJLmNoYWluX25vaXNlX251bV9iZWFjb25zID0gSVdMX0NBTF9OVU1fQkVBQ09OUywKKwkuc3VwcG9ydHNfaWRsZSA9IHRydWUsCisJLmFkdl90aGVybWFsX3Rocm90dGxlID0gdHJ1ZSwKKwkuc3VwcG9ydF9jdF9raWxsX2V4aXQgPSB0cnVlLAorCS5wbGNwX2RlbHRhX3RocmVzaG9sZCA9IElXTF9NQVhfUExDUF9FUlJfVEhSRVNIT0xEX0RFRiwKKwkuY2hhaW5fbm9pc2Vfc2NhbGUgPSAxMDAwLAorCS5tb25pdG9yX3JlY292ZXJfcGVyaW9kID0gSVdMX01PTklUT1JJTkdfUEVSSU9ELAorCS5tYXhfZXZlbnRfbG9nX3NpemUgPSA1MTIsCisJLnNlbnNpdGl2aXR5X2NhbGliX2J5X2RyaXZlciA9IHRydWUsCisJLmNoYWluX25vaXNlX2NhbGliX2J5X2RyaXZlciA9IHRydWUsCisJLm5lZWRfZGNfY2FsaWIgPSB0cnVlLAorCS5idF9zdGF0aXN0aWNzID0gdHJ1ZSwKK307CisKK3N0cnVjdCBpd2xfY2ZnIGl3bDYwMDBnMmJfYmduX2NmZyA9IHsKKwkubmFtZSA9ICI2MDAwIFNlcmllcyAxeDIgQkdOIEdlbjJiIiwKKwkuZndfbmFtZV9wcmUgPSBJV0w2MDAwRzJCX0ZXX1BSRSwKKwkudWNvZGVfYXBpX21heCA9IElXTDYwMDBHMl9VQ09ERV9BUElfTUFYLAorCS51Y29kZV9hcGlfbWluID0gSVdMNjAwMEcyX1VDT0RFX0FQSV9NSU4sCisJLnNrdSA9IElXTF9TS1VfR3xJV0xfU0tVX04sCisJLm9wcyA9ICZpd2w2MDAwZzJiX29wcywKKwkuZWVwcm9tX3NpemUgPSBPVFBfTE9XX0lNQUdFX1NJWkUsCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNjAwMEcyX0VFUFJPTV9WRVJTSU9OLAorCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzYwMDBHMl9UWF9QT1dFUl9WRVJTSU9OLAorCS5udW1fb2ZfcXVldWVzID0gSVdMQUdOX05VTV9RVUVVRVMsCisJLm51bV9vZl9hbXBkdV9xdWV1ZXMgPSBJV0xBR05fTlVNX0FNUERVX1FVRVVFUywKKwkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0EsCisJLnZhbGlkX3J4X2FudCA9IEFOVF9BQiwKKwkucGxsX2NmZ192YWwgPSAwLAorCS5zZXRfbDBzID0gdHJ1ZSwKKwkudXNlX2JzbSA9IGZhbHNlLAorCS5wYV90eXBlID0gSVdMX1BBX1NZU1RFTSwKKwkubWF4X2xsX2l0ZW1zID0gT1RQX01BWF9MTF9JVEVNU182eDAwLAorCS5zaGFkb3dfcmFtX3N1cHBvcnQgPSB0cnVlLAorCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSB0cnVlLAorCS5sZWRfY29tcGVuc2F0aW9uID0gNTEsCisJLnVzZV9ydHNfZm9yX2h0ID0gdHJ1ZSwgLyogdXNlIHJ0cy9jdHMgcHJvdGVjdGlvbiAqLworCS5jaGFpbl9ub2lzZV9udW1fYmVhY29ucyA9IElXTF9DQUxfTlVNX0JFQUNPTlMsCisJLnN1cHBvcnRzX2lkbGUgPSB0cnVlLAorCS5hZHZfdGhlcm1hbF90aHJvdHRsZSA9IHRydWUsCisJLnN1cHBvcnRfY3Rfa2lsbF9leGl0ID0gdHJ1ZSwKKwkucGxjcF9kZWx0YV90aHJlc2hvbGQgPSBJV0xfTUFYX1BMQ1BfRVJSX1RIUkVTSE9MRF9ERUYsCisJLmNoYWluX25vaXNlX3NjYWxlID0gMTAwMCwKKwkubW9uaXRvcl9yZWNvdmVyX3BlcmlvZCA9IElXTF9NT05JVE9SSU5HX1BFUklPRCwKKwkubWF4X2V2ZW50X2xvZ19zaXplID0gNTEyLAorCS5zZW5zaXRpdml0eV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAorCS5jaGFpbl9ub2lzZV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAorCS5uZWVkX2RjX2NhbGliID0gdHJ1ZSwKKwkuYnRfc3RhdGlzdGljcyA9IHRydWUsCit9OworCitzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwZzJiX2JnX2NmZyA9IHsKKwkubmFtZSA9ICI2MDAwIFNlcmllcyAxeDIgQkcgR2VuMmIiLAorCS5md19uYW1lX3ByZSA9IElXTDYwMDBHMkJfRldfUFJFLAorCS51Y29kZV9hcGlfbWF4ID0gSVdMNjAwMEcyX1VDT0RFX0FQSV9NQVgsCisJLnVjb2RlX2FwaV9taW4gPSBJV0w2MDAwRzJfVUNPREVfQVBJX01JTiwKKwkuc2t1ID0gSVdMX1NLVV9HLAorCS5vcHMgPSAmaXdsNjAwMGcyYl9vcHMsCisJLmVlcHJvbV9zaXplID0gT1RQX0xPV19JTUFHRV9TSVpFLAorCS5lZXByb21fdmVyID0gRUVQUk9NXzYwMDBHMl9FRVBST01fVkVSU0lPTiwKKwkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV82MDAwRzJfVFhfUE9XRVJfVkVSU0lPTiwKKwkubnVtX29mX3F1ZXVlcyA9IElXTEFHTl9OVU1fUVVFVUVTLAorCS5udW1fb2ZfYW1wZHVfcXVldWVzID0gSVdMQUdOX05VTV9BTVBEVV9RVUVVRVMsCisJLm1vZF9wYXJhbXMgPSAmaXdsYWduX21vZF9wYXJhbXMsCisJLnZhbGlkX3R4X2FudCA9IEFOVF9BLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQUIsCisJLnBsbF9jZmdfdmFsID0gMCwKKwkuc2V0X2wwcyA9IHRydWUsCisJLnVzZV9ic20gPSBmYWxzZSwKKwkucGFfdHlwZSA9IElXTF9QQV9TWVNURU0sCisJLm1heF9sbF9pdGVtcyA9IE9UUF9NQVhfTExfSVRFTVNfNngwMCwKKwkuc2hhZG93X3JhbV9zdXBwb3J0ID0gdHJ1ZSwKKwkubGVkX2NvbXBlbnNhdGlvbiA9IDUxLAorCS5jaGFpbl9ub2lzZV9udW1fYmVhY29ucyA9IElXTF9DQUxfTlVNX0JFQUNPTlMsCisJLnN1cHBvcnRzX2lkbGUgPSB0cnVlLAorCS5hZHZfdGhlcm1hbF90aHJvdHRsZSA9IHRydWUsCisJLnN1cHBvcnRfY3Rfa2lsbF9leGl0ID0gdHJ1ZSwKKwkucGxjcF9kZWx0YV90aHJlc2hvbGQgPSBJV0xfTUFYX1BMQ1BfRVJSX1RIUkVTSE9MRF9ERUYsCisJLmNoYWluX25vaXNlX3NjYWxlID0gMTAwMCwKKwkubW9uaXRvcl9yZWNvdmVyX3BlcmlvZCA9IElXTF9NT05JVE9SSU5HX1BFUklPRCwKKwkubWF4X2V2ZW50X2xvZ19zaXplID0gNTEyLAorCS5zZW5zaXRpdml0eV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAorCS5jaGFpbl9ub2lzZV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAorCS5uZWVkX2RjX2NhbGliID0gdHJ1ZSwKKwkuYnRfc3RhdGlzdGljcyA9IHRydWUsCiB9OwogCiAvKgpAQCAtNTYxLDcgKzgwNCw3IEBACiAJLnVjb2RlX2FwaV9tYXggPSBJV0w2MDUwX1VDT0RFX0FQSV9NQVgsCiAJLnVjb2RlX2FwaV9taW4gPSBJV0w2MDUwX1VDT0RFX0FQSV9NSU4sCiAJLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0d8SVdMX1NLVV9OLAotCS5vcHMgPSAmaXdsNjA1MF9vcHMsCisJLm9wcyA9ICZpd2w2MDAwX29wcywKIAkuZWVwcm9tX3NpemUgPSBPVFBfTE9XX0lNQUdFX1NJWkUsCiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNjA1MF9FRVBST01fVkVSU0lPTiwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV82MDUwX1RYX1BPV0VSX1ZFUlNJT04sCkBAIC01OTAsNiArODMzLDQ1IEBACiAJLnVjb2RlX3RyYWNpbmcgPSB0cnVlLAogCS5zZW5zaXRpdml0eV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAogCS5jaGFpbl9ub2lzZV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAorCS5uZWVkX2RjX2NhbGliID0gdHJ1ZSwKK307CisKK3N0cnVjdCBpd2xfY2ZnIGl3bDYwNTBnMl9iZ25fY2ZnID0geworCS5uYW1lID0gIjYwNTAgU2VyaWVzIDF4MiBCR04gR2VuMiIsCisJLmZ3X25hbWVfcHJlID0gSVdMNjA1MF9GV19QUkUsCisJLnVjb2RlX2FwaV9tYXggPSBJV0w2MDUwX1VDT0RFX0FQSV9NQVgsCisJLnVjb2RlX2FwaV9taW4gPSBJV0w2MDUwX1VDT0RFX0FQSV9NSU4sCisJLnNrdSA9IElXTF9TS1VfR3xJV0xfU0tVX04sCisJLm9wcyA9ICZpd2w2MDAwX29wcywKKwkuZWVwcm9tX3NpemUgPSBPVFBfTE9XX0lNQUdFX1NJWkUsCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNjA1MEcyX0VFUFJPTV9WRVJTSU9OLAorCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzYwNTBHMl9UWF9QT1dFUl9WRVJTSU9OLAorCS5udW1fb2ZfcXVldWVzID0gSVdMQUdOX05VTV9RVUVVRVMsCisJLm51bV9vZl9hbXBkdV9xdWV1ZXMgPSBJV0xBR05fTlVNX0FNUERVX1FVRVVFUywKKwkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0EsCisJLnZhbGlkX3J4X2FudCA9IEFOVF9BQiwKKwkucGxsX2NmZ192YWwgPSAwLAorCS5zZXRfbDBzID0gdHJ1ZSwKKwkudXNlX2JzbSA9IGZhbHNlLAorCS5wYV90eXBlID0gSVdMX1BBX1NZU1RFTSwKKwkubWF4X2xsX2l0ZW1zID0gT1RQX01BWF9MTF9JVEVNU182eDUwLAorCS5zaGFkb3dfcmFtX3N1cHBvcnQgPSB0cnVlLAorCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSB0cnVlLAorCS5sZWRfY29tcGVuc2F0aW9uID0gNTEsCisJLnVzZV9ydHNfZm9yX2h0ID0gdHJ1ZSwgLyogdXNlIHJ0cy9jdHMgcHJvdGVjdGlvbiAqLworCS5jaGFpbl9ub2lzZV9udW1fYmVhY29ucyA9IElXTF9DQUxfTlVNX0JFQUNPTlMsCisJLnN1cHBvcnRzX2lkbGUgPSB0cnVlLAorCS5hZHZfdGhlcm1hbF90aHJvdHRsZSA9IHRydWUsCisJLnN1cHBvcnRfY3Rfa2lsbF9leGl0ID0gdHJ1ZSwKKwkucGxjcF9kZWx0YV90aHJlc2hvbGQgPSBJV0xfTUFYX1BMQ1BfRVJSX1RIUkVTSE9MRF9ERUYsCisJLmNoYWluX25vaXNlX3NjYWxlID0gMTUwMCwKKwkubW9uaXRvcl9yZWNvdmVyX3BlcmlvZCA9IElXTF9NT05JVE9SSU5HX1BFUklPRCwKKwkubWF4X2V2ZW50X2xvZ19zaXplID0gMTAyNCwKKwkudWNvZGVfdHJhY2luZyA9IHRydWUsCisJLnNlbnNpdGl2aXR5X2NhbGliX2J5X2RyaXZlciA9IHRydWUsCisJLmNoYWluX25vaXNlX2NhbGliX2J5X2RyaXZlciA9IHRydWUsCisJLm5lZWRfZGNfY2FsaWIgPSB0cnVlLAogfTsKIAogc3RydWN0IGl3bF9jZmcgaXdsNjA1MF8yYWJnX2NmZyA9IHsKQEAgLTU5OCw3ICs4ODAsNyBAQAogCS51Y29kZV9hcGlfbWF4ID0gSVdMNjA1MF9VQ09ERV9BUElfTUFYLAogCS51Y29kZV9hcGlfbWluID0gSVdMNjA1MF9VQ09ERV9BUElfTUlOLAogCS5za3UgPSBJV0xfU0tVX0F8SVdMX1NLVV9HLAotCS5vcHMgPSAmaXdsNjA1MF9vcHMsCisJLm9wcyA9ICZpd2w2MDAwX29wcywKIAkuZWVwcm9tX3NpemUgPSBPVFBfTE9XX0lNQUdFX1NJWkUsCiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNjA1MF9FRVBST01fVkVSU0lPTiwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV82MDUwX1RYX1BPV0VSX1ZFUlNJT04sCkBAIC02MjUsNiArOTA3LDcgQEAKIAkudWNvZGVfdHJhY2luZyA9IHRydWUsCiAJLnNlbnNpdGl2aXR5X2NhbGliX2J5X2RyaXZlciA9IHRydWUsCiAJLmNoYWluX25vaXNlX2NhbGliX2J5X2RyaXZlciA9IHRydWUsCisJLm5lZWRfZGNfY2FsaWIgPSB0cnVlLAogfTsKIAogc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8zYWduX2NmZyA9IHsKQEAgLTY2NywzICs5NTAsNCBAQAogTU9EVUxFX0ZJUk1XQVJFKElXTDYwMDBfTU9EVUxFX0ZJUk1XQVJFKElXTDYwMDBfVUNPREVfQVBJX01BWCkpOwogTU9EVUxFX0ZJUk1XQVJFKElXTDYwNTBfTU9EVUxFX0ZJUk1XQVJFKElXTDYwNTBfVUNPREVfQVBJX01BWCkpOwogTU9EVUxFX0ZJUk1XQVJFKElXTDYwMDBHMkFfTU9EVUxFX0ZJUk1XQVJFKElXTDYwMDBHMl9VQ09ERV9BUElfTUFYKSk7CitNT0RVTEVfRklSTVdBUkUoSVdMNjAwMEcyQl9NT0RVTEVfRklSTVdBUkUoSVdMNjAwMEcyX1VDT0RFX0FQSV9NQVgpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1jYWxpYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWNhbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRjNTY5MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1jYWxpYi5jCkBAIC0wLDAgKzEsMTAxMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFRoaXMgZmlsZSBpcyBwcm92aWRlZCB1bmRlciBhIGR1YWwgQlNEL0dQTHYyIGxpY2Vuc2UuICBXaGVuIHVzaW5nIG9yCisgKiByZWRpc3RyaWJ1dGluZyB0aGlzIGZpbGUsIHlvdSBtYXkgZG8gc28gdW5kZXIgZWl0aGVyIGxpY2Vuc2UuCisgKgorICogR1BMIExJQ0VOU0UgU1VNTUFSWQorICoKKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLAorICogVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KKyAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLkdQTC4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgorICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworICoKKyAqIEJTRCBMSUNFTlNFCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogICogTmVpdGhlciB0aGUgbmFtZSBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKworI2luY2x1ZGUgIml3bC1kZXYuaCIKKyNpbmNsdWRlICJpd2wtY29yZS5oIgorI2luY2x1ZGUgIml3bC1jYWxpYi5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElOSVQgY2FsaWJyYXRpb25zIGZyYW1ld29yaworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3Qgc3RhdGlzdGljc19nZW5lcmFsX2RhdGEgeworCXUzMiBiZWFjb25fc2lsZW5jZV9yc3NpX2E7CisJdTMyIGJlYWNvbl9zaWxlbmNlX3Jzc2lfYjsKKwl1MzIgYmVhY29uX3NpbGVuY2VfcnNzaV9jOworCXUzMiBiZWFjb25fZW5lcmd5X2E7CisJdTMyIGJlYWNvbl9lbmVyZ3lfYjsKKwl1MzIgYmVhY29uX2VuZXJneV9jOworfTsKKworaW50IGl3bF9zZW5kX2NhbGliX3Jlc3VsdHMoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWludCByZXQgPSAwOworCWludCBpID0gMDsKKworCXN0cnVjdCBpd2xfaG9zdF9jbWQgaGNtZCA9IHsKKwkJLmlkID0gUkVQTFlfUEhZX0NBTElCUkFUSU9OX0NNRCwKKwkJLmZsYWdzID0gQ01EX1NJWkVfSFVHRSwKKwl9OworCisJZm9yIChpID0gMDsgaSA8IElXTF9DQUxJQl9NQVg7IGkrKykgeworCQlpZiAoKEJJVChpKSAmIHByaXYtPmh3X3BhcmFtcy5jYWxpYl9pbml0X2NmZykgJiYKKwkJICAgIHByaXYtPmNhbGliX3Jlc3VsdHNbaV0uYnVmKSB7CisJCQloY21kLmxlbiA9IHByaXYtPmNhbGliX3Jlc3VsdHNbaV0uYnVmX2xlbjsKKwkJCWhjbWQuZGF0YSA9IHByaXYtPmNhbGliX3Jlc3VsdHNbaV0uYnVmOworCQkJcmV0ID0gaXdsX3NlbmRfY21kX3N5bmMocHJpdiwgJmhjbWQpOworCQkJaWYgKHJldCkgeworCQkJCUlXTF9FUlIocHJpdiwgIkVycm9yICVkIGl0ZXJhdGlvbiAlZFxuIiwKKwkJCQkJcmV0LCBpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK2ludCBpd2xfY2FsaWJfc2V0KHN0cnVjdCBpd2xfY2FsaWJfcmVzdWx0ICpyZXMsIGNvbnN0IHU4ICpidWYsIGludCBsZW4pCit7CisJaWYgKHJlcy0+YnVmX2xlbiAhPSBsZW4pIHsKKwkJa2ZyZWUocmVzLT5idWYpOworCQlyZXMtPmJ1ZiA9IGt6YWxsb2MobGVuLCBHRlBfQVRPTUlDKTsKKwl9CisJaWYgKHVubGlrZWx5KHJlcy0+YnVmID09IE5VTEwpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlcy0+YnVmX2xlbiA9IGxlbjsKKwltZW1jcHkocmVzLT5idWYsIGJ1ZiwgbGVuKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBpd2xfY2FsaWJfZnJlZV9yZXN1bHRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBJV0xfQ0FMSUJfTUFYOyBpKyspIHsKKwkJa2ZyZWUocHJpdi0+Y2FsaWJfcmVzdWx0c1tpXS5idWYpOworCQlwcml2LT5jYWxpYl9yZXN1bHRzW2ldLmJ1ZiA9IE5VTEw7CisJCXByaXYtPmNhbGliX3Jlc3VsdHNbaV0uYnVmX2xlbiA9IDA7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJVTlRJTUUgY2FsaWJyYXRpb25zIGZyYW1ld29yaworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAiZmFsc2UgYWxhcm1zIiBhcmUgc2lnbmFscyB0aGF0IG91ciBEU1AgdHJpZXMgdG8gbG9jayBvbnRvLAorICogICBidXQgdGhlbiBkZXRlcm1pbmVzIHRoYXQgdGhleSBhcmUgZWl0aGVyIG5vaXNlLCBvciB0cmFuc21pc3Npb25zCisgKiAgIGZyb20gYSBkaXN0YW50IHdpcmVsZXNzIG5ldHdvcmsgKGFsc28gIm5vaXNlIiwgcmVhbGx5KSB0aGF0IGdldAorICogICAic3RlcHBlZCBvbiIgYnkgc3Ryb25nZXIgdHJhbnNtaXNzaW9ucyB3aXRoaW4gb3VyIG93biBuZXR3b3JrLgorICogVGhpcyBhbGdvcml0aG0gYXR0ZW1wdHMgdG8gc2V0IGEgc2Vuc2l0aXZpdHkgbGV2ZWwgdGhhdCBpcyBoaWdoCisgKiAgIGVub3VnaCB0byByZWNlaXZlIGFsbCBvZiBvdXIgb3duIG5ldHdvcmsgdHJhZmZpYywgYnV0IG5vdCBzbworICogICBoaWdoIHRoYXQgb3VyIERTUCBnZXRzIHRvbyBidXN5IHRyeWluZyB0byBsb2NrIG9udG8gbm9uLW5ldHdvcmsKKyAqICAgYWN0aXZpdHkvbm9pc2UuICovCitzdGF0aWMgaW50IGl3bF9zZW5zX2VuZXJneV9jY2soc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgIHUzMiBub3JtX2ZhLAorCQkJCSAgIHUzMiByeF9lbmFibGVfdGltZSwKKwkJCQkgICBzdHJ1Y3Qgc3RhdGlzdGljc19nZW5lcmFsX2RhdGEgKnJ4X2luZm8pCit7CisJdTMyIG1heF9ucmdfY2NrID0gMDsKKwlpbnQgaSA9IDA7CisJdTggbWF4X3NpbGVuY2VfcnNzaSA9IDA7CisJdTMyIHNpbGVuY2VfcmVmID0gMDsKKwl1OCBzaWxlbmNlX3Jzc2lfYSA9IDA7CisJdTggc2lsZW5jZV9yc3NpX2IgPSAwOworCXU4IHNpbGVuY2VfcnNzaV9jID0gMDsKKwl1MzIgdmFsOworCisJLyogImZhbHNlX2FsYXJtcyIgdmFsdWVzIGJlbG93IGFyZSBjcm9zcy1tdWx0aXBsaWNhdGlvbnMgdG8gYXNzZXNzIHRoZQorCSAqICAgbnVtYmVycyBvZiBmYWxzZSBhbGFybXMgd2l0aGluIHRoZSBtZWFzdXJlZCBwZXJpb2Qgb2YgYWN0dWFsIFJ4CisJICogICAoUnggaXMgb2ZmIHdoZW4gd2UncmUgdHhpbmcpLCB2cyB0aGUgbWluL21heCBleHBlY3RlZCBmYWxzZSBhbGFybXMKKwkgKiAgIChzb21lIHNob3VsZCBiZSBleHBlY3RlZCBpZiByeCBpcyBzZW5zaXRpdmUgZW5vdWdoKSBpbiBhCisJICogICBoeXBvdGhldGljYWwgbGlzdGVuaW5nIHBlcmlvZCBvZiAyMDAgdGltZSB1bml0cyAoVFUpLCAyMDQuOCBtc2VjOgorCSAqCisJICogTUlOX0ZBL2ZpeGVkLXRpbWUgPCBmYWxzZV9hbGFybXMvYWN0dWFsLXJ4LXRpbWUgPCBNQVhfRkEvYmVhY29uLXRpbWUKKwkgKgorCSAqICovCisJdTMyIGZhbHNlX2FsYXJtcyA9IG5vcm1fZmEgKiAyMDAgKiAxMDI0OworCXUzMiBtYXhfZmFsc2VfYWxhcm1zID0gTUFYX0ZBX0NDSyAqIHJ4X2VuYWJsZV90aW1lOworCXUzMiBtaW5fZmFsc2VfYWxhcm1zID0gTUlOX0ZBX0NDSyAqIHJ4X2VuYWJsZV90aW1lOworCXN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfZGF0YSAqZGF0YSA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGl3bF9zZW5zaXRpdml0eV9yYW5nZXMgKnJhbmdlcyA9IHByaXYtPmh3X3BhcmFtcy5zZW5zOworCisJZGF0YSA9ICYocHJpdi0+c2Vuc2l0aXZpdHlfZGF0YSk7CisKKwlkYXRhLT5ucmdfYXV0b19jb3JyX3NpbGVuY2VfZGlmZiA9IDA7CisKKwkvKiBGaW5kIG1heCBzaWxlbmNlIHJzc2kgYW1vbmcgYWxsIDMgcmVjZWl2ZXJzLgorCSAqIFRoaXMgaXMgYmFja2dyb3VuZCBub2lzZSwgd2hpY2ggbWF5IGluY2x1ZGUgdHJhbnNtaXNzaW9ucyBmcm9tIG90aGVyCisJICogICAgbmV0d29ya3MsIG1lYXN1cmVkIGR1cmluZyBzaWxlbmNlIGJlZm9yZSBvdXIgbmV0d29yaydzIGJlYWNvbiAqLworCXNpbGVuY2VfcnNzaV9hID0gKHU4KSgocnhfaW5mby0+YmVhY29uX3NpbGVuY2VfcnNzaV9hICYKKwkJCSAgICBBTExfQkFORF9GSUxURVIpID4+IDgpOworCXNpbGVuY2VfcnNzaV9iID0gKHU4KSgocnhfaW5mby0+YmVhY29uX3NpbGVuY2VfcnNzaV9iICYKKwkJCSAgICBBTExfQkFORF9GSUxURVIpID4+IDgpOworCXNpbGVuY2VfcnNzaV9jID0gKHU4KSgocnhfaW5mby0+YmVhY29uX3NpbGVuY2VfcnNzaV9jICYKKwkJCSAgICBBTExfQkFORF9GSUxURVIpID4+IDgpOworCisJdmFsID0gbWF4KHNpbGVuY2VfcnNzaV9iLCBzaWxlbmNlX3Jzc2lfYyk7CisJbWF4X3NpbGVuY2VfcnNzaSA9IG1heChzaWxlbmNlX3Jzc2lfYSwgKHU4KSB2YWwpOworCisJLyogU3RvcmUgc2lsZW5jZSByc3NpIGluIDIwLWJlYWNvbiBoaXN0b3J5IHRhYmxlICovCisJZGF0YS0+bnJnX3NpbGVuY2VfcnNzaVtkYXRhLT5ucmdfc2lsZW5jZV9pZHhdID0gbWF4X3NpbGVuY2VfcnNzaTsKKwlkYXRhLT5ucmdfc2lsZW5jZV9pZHgrKzsKKwlpZiAoZGF0YS0+bnJnX3NpbGVuY2VfaWR4ID49IE5SR19OVU1fUFJFVl9TVEFUX0wpCisJCWRhdGEtPm5yZ19zaWxlbmNlX2lkeCA9IDA7CisKKwkvKiBGaW5kIG1heCBzaWxlbmNlIHJzc2kgYWNyb3NzIDIwIGJlYWNvbiBoaXN0b3J5ICovCisJZm9yIChpID0gMDsgaSA8IE5SR19OVU1fUFJFVl9TVEFUX0w7IGkrKykgeworCQl2YWwgPSBkYXRhLT5ucmdfc2lsZW5jZV9yc3NpW2ldOworCQlzaWxlbmNlX3JlZiA9IG1heChzaWxlbmNlX3JlZiwgdmFsKTsKKwl9CisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJzaWxlbmNlIGEgJXUsIGIgJXUsIGMgJXUsIDIwLWJjbiBtYXggJXVcbiIsCisJCQlzaWxlbmNlX3Jzc2lfYSwgc2lsZW5jZV9yc3NpX2IsIHNpbGVuY2VfcnNzaV9jLAorCQkJc2lsZW5jZV9yZWYpOworCisJLyogRmluZCBtYXggcnggZW5lcmd5IChtaW4gdmFsdWUhKSBhbW9uZyBhbGwgMyByZWNlaXZlcnMsCisJICogICBtZWFzdXJlZCBkdXJpbmcgYmVhY29uIGZyYW1lLgorCSAqIFNhdmUgaXQgaW4gMTAtYmVhY29uIGhpc3RvcnkgdGFibGUuICovCisJaSA9IGRhdGEtPm5yZ19lbmVyZ3lfaWR4OworCXZhbCA9IG1pbihyeF9pbmZvLT5iZWFjb25fZW5lcmd5X2IsIHJ4X2luZm8tPmJlYWNvbl9lbmVyZ3lfYyk7CisJZGF0YS0+bnJnX3ZhbHVlW2ldID0gbWluKHJ4X2luZm8tPmJlYWNvbl9lbmVyZ3lfYSwgdmFsKTsKKworCWRhdGEtPm5yZ19lbmVyZ3lfaWR4Kys7CisJaWYgKGRhdGEtPm5yZ19lbmVyZ3lfaWR4ID49IDEwKQorCQlkYXRhLT5ucmdfZW5lcmd5X2lkeCA9IDA7CisKKwkvKiBGaW5kIG1pbiByeCBlbmVyZ3kgKG1heCB2YWx1ZSkgYWNyb3NzIDEwIGJlYWNvbiBoaXN0b3J5LgorCSAqIFRoaXMgaXMgdGhlIG1pbmltdW0gc2lnbmFsIGxldmVsIHRoYXQgd2Ugd2FudCB0byByZWNlaXZlIHdlbGwuCisJICogQWRkIGJhY2tvZmYgKG1hcmdpbiBzbyB3ZSBkb24ndCBtaXNzIHNsaWdodGx5IGxvd2VyIGVuZXJneSBmcmFtZXMpLgorCSAqIFRoaXMgZXN0YWJsaXNoZXMgYW4gdXBwZXIgYm91bmQgKG1pbiB2YWx1ZSkgZm9yIGVuZXJneSB0aHJlc2hvbGQuICovCisJbWF4X25yZ19jY2sgPSBkYXRhLT5ucmdfdmFsdWVbMF07CisJZm9yIChpID0gMTsgaSA8IDEwOyBpKyspCisJCW1heF9ucmdfY2NrID0gKHUzMikgbWF4KG1heF9ucmdfY2NrLCAoZGF0YS0+bnJnX3ZhbHVlW2ldKSk7CisJbWF4X25yZ19jY2sgKz0gNjsKKworCUlXTF9ERUJVR19DQUxJQihwcml2LCAicnggZW5lcmd5IGEgJXUsIGIgJXUsIGMgJXUsIDEwLWJjbiBtYXgvbWluICV1XG4iLAorCQkJcnhfaW5mby0+YmVhY29uX2VuZXJneV9hLCByeF9pbmZvLT5iZWFjb25fZW5lcmd5X2IsCisJCQlyeF9pbmZvLT5iZWFjb25fZW5lcmd5X2MsIG1heF9ucmdfY2NrIC0gNik7CisKKwkvKiBDb3VudCBudW1iZXIgb2YgY29uc2VjdXRpdmUgYmVhY29ucyB3aXRoIGZld2VyLXRoYW4tZGVzaXJlZAorCSAqICAgZmFsc2UgYWxhcm1zLiAqLworCWlmIChmYWxzZV9hbGFybXMgPCBtaW5fZmFsc2VfYWxhcm1zKQorCQlkYXRhLT5udW1faW5fY2NrX25vX2ZhKys7CisJZWxzZQorCQlkYXRhLT5udW1faW5fY2NrX25vX2ZhID0gMDsKKwlJV0xfREVCVUdfQ0FMSUIocHJpdiwgImNvbnNlY3V0aXZlIGJjbnMgd2l0aCBmZXcgZmFsc2UgYWxhcm1zID0gJXVcbiIsCisJCQlkYXRhLT5udW1faW5fY2NrX25vX2ZhKTsKKworCS8qIElmIHdlIGdvdCB0b28gbWFueSBmYWxzZSBhbGFybXMgdGhpcyB0aW1lLCByZWR1Y2Ugc2Vuc2l0aXZpdHkgKi8KKwlpZiAoKGZhbHNlX2FsYXJtcyA+IG1heF9mYWxzZV9hbGFybXMpICYmCisJCShkYXRhLT5hdXRvX2NvcnJfY2NrID4gQVVUT19DT1JSX01BWF9USF9DQ0spKSB7CisJCUlXTF9ERUJVR19DQUxJQihwcml2LCAibm9ybSBGQSAldSA+IG1heCBGQSAldVxuIiwKKwkJICAgICBmYWxzZV9hbGFybXMsIG1heF9mYWxzZV9hbGFybXMpOworCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIi4uLiByZWR1Y2luZyBzZW5zaXRpdml0eVxuIik7CisJCWRhdGEtPm5yZ19jdXJyX3N0YXRlID0gSVdMX0ZBX1RPT19NQU5ZOworCQkvKiBTdG9yZSBmb3IgImZld2VyIHRoYW4gZGVzaXJlZCIgb24gbGF0ZXIgYmVhY29uICovCisJCWRhdGEtPm5yZ19zaWxlbmNlX3JlZiA9IHNpbGVuY2VfcmVmOworCisJCS8qIGluY3JlYXNlIGVuZXJneSB0aHJlc2hvbGQgKHJlZHVjZSBucmcgdmFsdWUpCisJCSAqICAgdG8gZGVjcmVhc2Ugc2Vuc2l0aXZpdHkgKi8KKwkJZGF0YS0+bnJnX3RoX2NjayA9IGRhdGEtPm5yZ190aF9jY2sgLSBOUkdfU1RFUF9DQ0s7CisJLyogRWxzZSBpZiB3ZSBnb3QgZmV3ZXIgdGhhbiBkZXNpcmVkLCBpbmNyZWFzZSBzZW5zaXRpdml0eSAqLworCX0gZWxzZSBpZiAoZmFsc2VfYWxhcm1zIDwgbWluX2ZhbHNlX2FsYXJtcykgeworCQlkYXRhLT5ucmdfY3Vycl9zdGF0ZSA9IElXTF9GQV9UT09fRkVXOworCisJCS8qIENvbXBhcmUgc2lsZW5jZSBsZXZlbCB3aXRoIHNpbGVuY2UgbGV2ZWwgZm9yIG1vc3QgcmVjZW50CisJCSAqICAgaGVhbHRoeSBudW1iZXIgb3IgdG9vIG1hbnkgZmFsc2UgYWxhcm1zICovCisJCWRhdGEtPm5yZ19hdXRvX2NvcnJfc2lsZW5jZV9kaWZmID0gKHMzMilkYXRhLT5ucmdfc2lsZW5jZV9yZWYgLQorCQkJCQkJICAgKHMzMilzaWxlbmNlX3JlZjsKKworCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm5vcm0gRkEgJXUgPCBtaW4gRkEgJXUsIHNpbGVuY2UgZGlmZiAlZFxuIiwKKwkJCSBmYWxzZV9hbGFybXMsIG1pbl9mYWxzZV9hbGFybXMsCisJCQkgZGF0YS0+bnJnX2F1dG9fY29ycl9zaWxlbmNlX2RpZmYpOworCisJCS8qIEluY3JlYXNlIHZhbHVlIHRvIGluY3JlYXNlIHNlbnNpdGl2aXR5LCBidXQgb25seSBpZjoKKwkJICogMWEpIHByZXZpb3VzIGJlYWNvbiBkaWQgKm5vdCogaGF2ZSAqdG9vIG1hbnkqIGZhbHNlIGFsYXJtcworCQkgKiAxYikgQU5EIHRoZXJlJ3MgYSBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGluIFJ4IGxldmVscworCQkgKiAgICAgIGZyb20gYSBwcmV2aW91cyBiZWFjb24gd2l0aCB0b28gbWFueSwgb3IgaGVhbHRoeSAjIEZBcworCQkgKiBPUiAyKSBXZSd2ZSBzZWVuIGEgbG90IG9mIGJlYWNvbnMgKDEwMCkgd2l0aCB0b28gZmV3CisJCSAqICAgICAgIGZhbHNlIGFsYXJtcyAqLworCQlpZiAoKGRhdGEtPm5yZ19wcmV2X3N0YXRlICE9IElXTF9GQV9UT09fTUFOWSkgJiYKKwkJCSgoZGF0YS0+bnJnX2F1dG9fY29ycl9zaWxlbmNlX2RpZmYgPiBOUkdfRElGRikgfHwKKwkJCShkYXRhLT5udW1faW5fY2NrX25vX2ZhID4gTUFYX05VTUJFUl9DQ0tfTk9fRkEpKSkgeworCisJCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIi4uLiBpbmNyZWFzaW5nIHNlbnNpdGl2aXR5XG4iKTsKKwkJCS8qIEluY3JlYXNlIG5yZyB2YWx1ZSB0byBpbmNyZWFzZSBzZW5zaXRpdml0eSAqLworCQkJdmFsID0gZGF0YS0+bnJnX3RoX2NjayArIE5SR19TVEVQX0NDSzsKKwkJCWRhdGEtPm5yZ190aF9jY2sgPSBtaW4oKHUzMilyYW5nZXMtPm1pbl9ucmdfY2NrLCB2YWwpOworCQl9IGVsc2UgeworCQkJSVdMX0RFQlVHX0NBTElCKHByaXYsICIuLi4gYnV0IG5vdCBjaGFuZ2luZyBzZW5zaXRpdml0eVxuIik7CisJCX0KKworCS8qIEVsc2Ugd2UgZ290IGEgaGVhbHRoeSBudW1iZXIgb2YgZmFsc2UgYWxhcm1zLCBrZWVwIHN0YXR1cyBxdW8gKi8KKwl9IGVsc2UgeworCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIiBGQSBpbiBzYWZlIHpvbmVcbiIpOworCQlkYXRhLT5ucmdfY3Vycl9zdGF0ZSA9IElXTF9GQV9HT09EX1JBTkdFOworCisJCS8qIFN0b3JlIGZvciB1c2UgaW4gImZld2VyIHRoYW4gZGVzaXJlZCIgd2l0aCBsYXRlciBiZWFjb24gKi8KKwkJZGF0YS0+bnJnX3NpbGVuY2VfcmVmID0gc2lsZW5jZV9yZWY7CisKKwkJLyogSWYgcHJldmlvdXMgYmVhY29uIGhhZCB0b28gbWFueSBmYWxzZSBhbGFybXMsCisJCSAqICAgZ2l2ZSBpdCBzb21lIGV4dHJhIG1hcmdpbiBieSByZWR1Y2luZyBzZW5zaXRpdml0eSBhZ2FpbgorCQkgKiAgIChidXQgZG9uJ3QgZ28gYmVsb3cgbWVhc3VyZWQgZW5lcmd5IG9mIGRlc2lyZWQgUngpICovCisJCWlmIChJV0xfRkFfVE9PX01BTlkgPT0gZGF0YS0+bnJnX3ByZXZfc3RhdGUpIHsKKwkJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiLi4uIGluY3JlYXNpbmcgbWFyZ2luXG4iKTsKKwkJCWlmIChkYXRhLT5ucmdfdGhfY2NrID4gKG1heF9ucmdfY2NrICsgTlJHX01BUkdJTikpCisJCQkJZGF0YS0+bnJnX3RoX2NjayAtPSBOUkdfTUFSR0lOOworCQkJZWxzZQorCQkJCWRhdGEtPm5yZ190aF9jY2sgPSBtYXhfbnJnX2NjazsKKwkJfQorCX0KKworCS8qIE1ha2Ugc3VyZSB0aGUgZW5lcmd5IHRocmVzaG9sZCBkb2VzIG5vdCBnbyBhYm92ZSB0aGUgbWVhc3VyZWQKKwkgKiBlbmVyZ3kgb2YgdGhlIGRlc2lyZWQgUnggc2lnbmFscyAocmVkdWNlZCBieSBiYWNrb2ZmIG1hcmdpbiksCisJICogb3IgZWxzZSB3ZSBtaWdodCBzdGFydCBtaXNzaW5nIFJ4IGZyYW1lcy4KKwkgKiBMb3dlciB2YWx1ZSBpcyBoaWdoZXIgZW5lcmd5LCBzbyB3ZSB1c2UgbWF4KCkhCisJICovCisJZGF0YS0+bnJnX3RoX2NjayA9IG1heChtYXhfbnJnX2NjaywgZGF0YS0+bnJnX3RoX2Njayk7CisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJuZXcgbnJnX3RoX2NjayAldVxuIiwgZGF0YS0+bnJnX3RoX2Njayk7CisKKwlkYXRhLT5ucmdfcHJldl9zdGF0ZSA9IGRhdGEtPm5yZ19jdXJyX3N0YXRlOworCisJLyogQXV0by1jb3JyZWxhdGlvbiBDQ0sgYWxnb3JpdGhtICovCisJaWYgKGZhbHNlX2FsYXJtcyA+IG1pbl9mYWxzZV9hbGFybXMpIHsKKworCQkvKiBpbmNyZWFzZSBhdXRvX2NvcnIgdmFsdWVzIHRvIGRlY3JlYXNlIHNlbnNpdGl2aXR5CisJCSAqIHNvIHRoZSBEU1Agd29uJ3QgYmUgZGlzdHVyYmVkIGJ5IHRoZSBub2lzZQorCQkgKi8KKwkJaWYgKGRhdGEtPmF1dG9fY29ycl9jY2sgPCBBVVRPX0NPUlJfTUFYX1RIX0NDSykKKwkJCWRhdGEtPmF1dG9fY29ycl9jY2sgPSBBVVRPX0NPUlJfTUFYX1RIX0NDSyArIDE7CisJCWVsc2UgeworCQkJdmFsID0gZGF0YS0+YXV0b19jb3JyX2NjayArIEFVVE9fQ09SUl9TVEVQX0NDSzsKKwkJCWRhdGEtPmF1dG9fY29ycl9jY2sgPQorCQkJCW1pbigodTMyKXJhbmdlcy0+YXV0b19jb3JyX21heF9jY2ssIHZhbCk7CisJCX0KKwkJdmFsID0gZGF0YS0+YXV0b19jb3JyX2Nja19tcmMgKyBBVVRPX0NPUlJfU1RFUF9DQ0s7CisJCWRhdGEtPmF1dG9fY29ycl9jY2tfbXJjID0KKwkJCW1pbigodTMyKXJhbmdlcy0+YXV0b19jb3JyX21heF9jY2tfbXJjLCB2YWwpOworCX0gZWxzZSBpZiAoKGZhbHNlX2FsYXJtcyA8IG1pbl9mYWxzZV9hbGFybXMpICYmCisJICAgKChkYXRhLT5ucmdfYXV0b19jb3JyX3NpbGVuY2VfZGlmZiA+IE5SR19ESUZGKSB8fAorCSAgIChkYXRhLT5udW1faW5fY2NrX25vX2ZhID4gTUFYX05VTUJFUl9DQ0tfTk9fRkEpKSkgeworCisJCS8qIERlY3JlYXNlIGF1dG9fY29yciB2YWx1ZXMgdG8gaW5jcmVhc2Ugc2Vuc2l0aXZpdHkgKi8KKwkJdmFsID0gZGF0YS0+YXV0b19jb3JyX2NjayAtIEFVVE9fQ09SUl9TVEVQX0NDSzsKKwkJZGF0YS0+YXV0b19jb3JyX2NjayA9CisJCQltYXgoKHUzMilyYW5nZXMtPmF1dG9fY29ycl9taW5fY2NrLCB2YWwpOworCQl2YWwgPSBkYXRhLT5hdXRvX2NvcnJfY2NrX21yYyAtIEFVVE9fQ09SUl9TVEVQX0NDSzsKKwkJZGF0YS0+YXV0b19jb3JyX2Nja19tcmMgPQorCQkJbWF4KCh1MzIpcmFuZ2VzLT5hdXRvX2NvcnJfbWluX2Nja19tcmMsIHZhbCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBpd2xfc2Vuc19hdXRvX2NvcnJfb2ZkbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICAgIHUzMiBub3JtX2ZhLAorCQkJCSAgICAgICB1MzIgcnhfZW5hYmxlX3RpbWUpCit7CisJdTMyIHZhbDsKKwl1MzIgZmFsc2VfYWxhcm1zID0gbm9ybV9mYSAqIDIwMCAqIDEwMjQ7CisJdTMyIG1heF9mYWxzZV9hbGFybXMgPSBNQVhfRkFfT0ZETSAqIHJ4X2VuYWJsZV90aW1lOworCXUzMiBtaW5fZmFsc2VfYWxhcm1zID0gTUlOX0ZBX09GRE0gKiByeF9lbmFibGVfdGltZTsKKwlzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X2RhdGEgKmRhdGEgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfcmFuZ2VzICpyYW5nZXMgPSBwcml2LT5od19wYXJhbXMuc2VuczsKKworCWRhdGEgPSAmKHByaXYtPnNlbnNpdGl2aXR5X2RhdGEpOworCisJLyogSWYgd2UgZ290IHRvbyBtYW55IGZhbHNlIGFsYXJtcyB0aGlzIHRpbWUsIHJlZHVjZSBzZW5zaXRpdml0eSAqLworCWlmIChmYWxzZV9hbGFybXMgPiBtYXhfZmFsc2VfYWxhcm1zKSB7CisKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICJub3JtIEZBICV1ID4gbWF4IEZBICV1KVxuIiwKKwkJCSAgICAgZmFsc2VfYWxhcm1zLCBtYXhfZmFsc2VfYWxhcm1zKTsKKworCQl2YWwgPSBkYXRhLT5hdXRvX2NvcnJfb2ZkbSArIEFVVE9fQ09SUl9TVEVQX09GRE07CisJCWRhdGEtPmF1dG9fY29ycl9vZmRtID0KKwkJCW1pbigodTMyKXJhbmdlcy0+YXV0b19jb3JyX21heF9vZmRtLCB2YWwpOworCisJCXZhbCA9IGRhdGEtPmF1dG9fY29ycl9vZmRtX21yYyArIEFVVE9fQ09SUl9TVEVQX09GRE07CisJCWRhdGEtPmF1dG9fY29ycl9vZmRtX21yYyA9CisJCQltaW4oKHUzMilyYW5nZXMtPmF1dG9fY29ycl9tYXhfb2ZkbV9tcmMsIHZhbCk7CisKKwkJdmFsID0gZGF0YS0+YXV0b19jb3JyX29mZG1feDEgKyBBVVRPX0NPUlJfU1RFUF9PRkRNOworCQlkYXRhLT5hdXRvX2NvcnJfb2ZkbV94MSA9CisJCQltaW4oKHUzMilyYW5nZXMtPmF1dG9fY29ycl9tYXhfb2ZkbV94MSwgdmFsKTsKKworCQl2YWwgPSBkYXRhLT5hdXRvX2NvcnJfb2ZkbV9tcmNfeDEgKyBBVVRPX0NPUlJfU1RFUF9PRkRNOworCQlkYXRhLT5hdXRvX2NvcnJfb2ZkbV9tcmNfeDEgPQorCQkJbWluKCh1MzIpcmFuZ2VzLT5hdXRvX2NvcnJfbWF4X29mZG1fbXJjX3gxLCB2YWwpOworCX0KKworCS8qIEVsc2UgaWYgd2UgZ290IGZld2VyIHRoYW4gZGVzaXJlZCwgaW5jcmVhc2Ugc2Vuc2l0aXZpdHkgKi8KKwllbHNlIGlmIChmYWxzZV9hbGFybXMgPCBtaW5fZmFsc2VfYWxhcm1zKSB7CisKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICJub3JtIEZBICV1IDwgbWluIEZBICV1XG4iLAorCQkJICAgICBmYWxzZV9hbGFybXMsIG1pbl9mYWxzZV9hbGFybXMpOworCisJCXZhbCA9IGRhdGEtPmF1dG9fY29ycl9vZmRtIC0gQVVUT19DT1JSX1NURVBfT0ZETTsKKwkJZGF0YS0+YXV0b19jb3JyX29mZG0gPQorCQkJbWF4KCh1MzIpcmFuZ2VzLT5hdXRvX2NvcnJfbWluX29mZG0sIHZhbCk7CisKKwkJdmFsID0gZGF0YS0+YXV0b19jb3JyX29mZG1fbXJjIC0gQVVUT19DT1JSX1NURVBfT0ZETTsKKwkJZGF0YS0+YXV0b19jb3JyX29mZG1fbXJjID0KKwkJCW1heCgodTMyKXJhbmdlcy0+YXV0b19jb3JyX21pbl9vZmRtX21yYywgdmFsKTsKKworCQl2YWwgPSBkYXRhLT5hdXRvX2NvcnJfb2ZkbV94MSAtIEFVVE9fQ09SUl9TVEVQX09GRE07CisJCWRhdGEtPmF1dG9fY29ycl9vZmRtX3gxID0KKwkJCW1heCgodTMyKXJhbmdlcy0+YXV0b19jb3JyX21pbl9vZmRtX3gxLCB2YWwpOworCisJCXZhbCA9IGRhdGEtPmF1dG9fY29ycl9vZmRtX21yY194MSAtIEFVVE9fQ09SUl9TVEVQX09GRE07CisJCWRhdGEtPmF1dG9fY29ycl9vZmRtX21yY194MSA9CisJCQltYXgoKHUzMilyYW5nZXMtPmF1dG9fY29ycl9taW5fb2ZkbV9tcmNfeDEsIHZhbCk7CisJfSBlbHNlIHsKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICJtaW4gRkEgJXUgPCBub3JtIEZBICV1IDwgbWF4IEZBICV1IE9LXG4iLAorCQkJIG1pbl9mYWxzZV9hbGFybXMsIGZhbHNlX2FsYXJtcywgbWF4X2ZhbHNlX2FsYXJtcyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpd2xfcHJlcGFyZV9sZWdhY3lfc2Vuc2l0aXZpdHlfdGJsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQlzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X2RhdGEgKmRhdGEsCisJCQkJX19sZTE2ICp0YmwpCit7CisJdGJsW0hEX0FVVE9fQ09SUjMyX1g0X1RIX0FERF9NSU5fSU5ERVhdID0KKwkJCQljcHVfdG9fbGUxNigodTE2KWRhdGEtPmF1dG9fY29ycl9vZmRtKTsKKwl0YmxbSERfQVVUT19DT1JSMzJfWDRfVEhfQUREX01JTl9NUkNfSU5ERVhdID0KKwkJCQljcHVfdG9fbGUxNigodTE2KWRhdGEtPmF1dG9fY29ycl9vZmRtX21yYyk7CisJdGJsW0hEX0FVVE9fQ09SUjMyX1gxX1RIX0FERF9NSU5fSU5ERVhdID0KKwkJCQljcHVfdG9fbGUxNigodTE2KWRhdGEtPmF1dG9fY29ycl9vZmRtX3gxKTsKKwl0YmxbSERfQVVUT19DT1JSMzJfWDFfVEhfQUREX01JTl9NUkNfSU5ERVhdID0KKwkJCQljcHVfdG9fbGUxNigodTE2KWRhdGEtPmF1dG9fY29ycl9vZmRtX21yY194MSk7CisKKwl0YmxbSERfQVVUT19DT1JSNDBfWDRfVEhfQUREX01JTl9JTkRFWF0gPQorCQkJCWNwdV90b19sZTE2KCh1MTYpZGF0YS0+YXV0b19jb3JyX2Njayk7CisJdGJsW0hEX0FVVE9fQ09SUjQwX1g0X1RIX0FERF9NSU5fTVJDX0lOREVYXSA9CisJCQkJY3B1X3RvX2xlMTYoKHUxNilkYXRhLT5hdXRvX2NvcnJfY2NrX21yYyk7CisKKwl0YmxbSERfTUlOX0VORVJHWV9DQ0tfREVUX0lOREVYXSA9CisJCQkJY3B1X3RvX2xlMTYoKHUxNilkYXRhLT5ucmdfdGhfY2NrKTsKKwl0YmxbSERfTUlOX0VORVJHWV9PRkRNX0RFVF9JTkRFWF0gPQorCQkJCWNwdV90b19sZTE2KCh1MTYpZGF0YS0+bnJnX3RoX29mZG0pOworCisJdGJsW0hEX0JBUktFUl9DT1JSX1RIX0FERF9NSU5fSU5ERVhdID0KKwkJCQljcHVfdG9fbGUxNihkYXRhLT5iYXJrZXJfY29ycl90aF9taW4pOworCXRibFtIRF9CQVJLRVJfQ09SUl9USF9BRERfTUlOX01SQ19JTkRFWF0gPQorCQkJCWNwdV90b19sZTE2KGRhdGEtPmJhcmtlcl9jb3JyX3RoX21pbl9tcmMpOworCXRibFtIRF9PRkRNX0VORVJHWV9USF9JTl9JTkRFWF0gPQorCQkJCWNwdV90b19sZTE2KGRhdGEtPm5yZ190aF9jY2EpOworCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJvZmRtOiBhYyAldSBtcmMgJXUgeDEgJXUgbXJjX3gxICV1IHRocmVzaCAldVxuIiwKKwkJCWRhdGEtPmF1dG9fY29ycl9vZmRtLCBkYXRhLT5hdXRvX2NvcnJfb2ZkbV9tcmMsCisJCQlkYXRhLT5hdXRvX2NvcnJfb2ZkbV94MSwgZGF0YS0+YXV0b19jb3JyX29mZG1fbXJjX3gxLAorCQkJZGF0YS0+bnJnX3RoX29mZG0pOworCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJjY2s6IGFjICV1IG1yYyAldSB0aHJlc2ggJXVcbiIsCisJCQlkYXRhLT5hdXRvX2NvcnJfY2NrLCBkYXRhLT5hdXRvX2NvcnJfY2NrX21yYywKKwkJCWRhdGEtPm5yZ190aF9jY2spOworfQorCisvKiBQcmVwYXJlIGEgU0VOU0lUSVZJVFlfQ01ELCBzZW5kIHRvIHVDb2RlIGlmIHZhbHVlcyBoYXZlIGNoYW5nZWQgKi8KK3N0YXRpYyBpbnQgaXdsX3NlbnNpdGl2aXR5X3dyaXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X2NtZCBjbWQ7CisJc3RydWN0IGl3bF9zZW5zaXRpdml0eV9kYXRhICpkYXRhID0gTlVMTDsKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZF9vdXQgPSB7CisJCS5pZCA9IFNFTlNJVElWSVRZX0NNRCwKKwkJLmxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X2NtZCksCisJCS5mbGFncyA9IENNRF9BU1lOQywKKwkJLmRhdGEgPSAmY21kLAorCX07CisKKwlkYXRhID0gJihwcml2LT5zZW5zaXRpdml0eV9kYXRhKTsKKworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisKKwlpd2xfcHJlcGFyZV9sZWdhY3lfc2Vuc2l0aXZpdHlfdGJsKHByaXYsIGRhdGEsICZjbWQudGFibGVbMF0pOworCisJLyogVXBkYXRlIHVDb2RlJ3MgIndvcmsiIHRhYmxlLCBhbmQgY29weSBpdCB0byBEU1AgKi8KKwljbWQuY29udHJvbCA9IFNFTlNJVElWSVRZX0NNRF9DT05UUk9MX1dPUktfVEFCTEU7CisKKwkvKiBEb24ndCBzZW5kIGNvbW1hbmQgdG8gdUNvZGUgaWYgbm90aGluZyBoYXMgY2hhbmdlZCAqLworCWlmICghbWVtY21wKCZjbWQudGFibGVbMF0sICYocHJpdi0+c2Vuc2l0aXZpdHlfdGJsWzBdKSwKKwkJICAgIHNpemVvZih1MTYpKkhEX1RBQkxFX1NJWkUpKSB7CisJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiTm8gY2hhbmdlIGluIFNFTlNJVElWSVRZX0NNRFxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIENvcHkgdGFibGUgZm9yIGNvbXBhcmlzb24gbmV4dCB0aW1lICovCisJbWVtY3B5KCYocHJpdi0+c2Vuc2l0aXZpdHlfdGJsWzBdKSwgJihjbWQudGFibGVbMF0pLAorCSAgICAgICBzaXplb2YodTE2KSpIRF9UQUJMRV9TSVpFKTsKKworCXJldHVybiBpd2xfc2VuZF9jbWQocHJpdiwgJmNtZF9vdXQpOworfQorCisvKiBQcmVwYXJlIGEgU0VOU0lUSVZJVFlfQ01ELCBzZW5kIHRvIHVDb2RlIGlmIHZhbHVlcyBoYXZlIGNoYW5nZWQgKi8KK3N0YXRpYyBpbnQgaXdsX2VuaGFuY2Vfc2Vuc2l0aXZpdHlfd3JpdGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXN0cnVjdCBpd2xfZW5oYW5jZV9zZW5zaXRpdml0eV9jbWQgY21kOworCXN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfZGF0YSAqZGF0YSA9IE5VTEw7CisJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWRfb3V0ID0geworCQkuaWQgPSBTRU5TSVRJVklUWV9DTUQsCisJCS5sZW4gPSBzaXplb2Yoc3RydWN0IGl3bF9lbmhhbmNlX3NlbnNpdGl2aXR5X2NtZCksCisJCS5mbGFncyA9IENNRF9BU1lOQywKKwkJLmRhdGEgPSAmY21kLAorCX07CisKKwlkYXRhID0gJihwcml2LT5zZW5zaXRpdml0eV9kYXRhKTsKKworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisKKwlpd2xfcHJlcGFyZV9sZWdhY3lfc2Vuc2l0aXZpdHlfdGJsKHByaXYsIGRhdGEsICZjbWQuZW5oYW5jZV90YWJsZVswXSk7CisKKwljbWQuZW5oYW5jZV90YWJsZVtIRF9JTkFfTk9OX1NRVUFSRV9ERVRfT0ZETV9JTkRFWF0gPQorCQlIRF9JTkFfTk9OX1NRVUFSRV9ERVRfT0ZETV9EQVRBOworCWNtZC5lbmhhbmNlX3RhYmxlW0hEX0lOQV9OT05fU1FVQVJFX0RFVF9DQ0tfSU5ERVhdID0KKwkJSERfSU5BX05PTl9TUVVBUkVfREVUX0NDS19EQVRBOworCWNtZC5lbmhhbmNlX3RhYmxlW0hEX0NPUlJfMTFfSU5TVEVBRF9PRl9DT1JSXzlfRU5fSU5ERVhdID0KKwkJSERfQ09SUl8xMV9JTlNURUFEX09GX0NPUlJfOV9FTl9EQVRBOworCWNtZC5lbmhhbmNlX3RhYmxlW0hEX09GRE1fTk9OX1NRVUFSRV9ERVRfU0xPUEVfTVJDX0lOREVYXSA9CisJCUhEX09GRE1fTk9OX1NRVUFSRV9ERVRfU0xPUEVfTVJDX0RBVEE7CisJY21kLmVuaGFuY2VfdGFibGVbSERfT0ZETV9OT05fU1FVQVJFX0RFVF9JTlRFUkNFUFRfTVJDX0lOREVYXSA9CisJCUhEX09GRE1fTk9OX1NRVUFSRV9ERVRfSU5URVJDRVBUX01SQ19EQVRBOworCWNtZC5lbmhhbmNlX3RhYmxlW0hEX09GRE1fTk9OX1NRVUFSRV9ERVRfU0xPUEVfSU5ERVhdID0KKwkJSERfT0ZETV9OT05fU1FVQVJFX0RFVF9TTE9QRV9EQVRBOworCWNtZC5lbmhhbmNlX3RhYmxlW0hEX09GRE1fTk9OX1NRVUFSRV9ERVRfSU5URVJDRVBUX0lOREVYXSA9CisJCUhEX09GRE1fTk9OX1NRVUFSRV9ERVRfSU5URVJDRVBUX0RBVEE7CisJY21kLmVuaGFuY2VfdGFibGVbSERfQ0NLX05PTl9TUVVBUkVfREVUX1NMT1BFX01SQ19JTkRFWF0gPQorCQlIRF9DQ0tfTk9OX1NRVUFSRV9ERVRfU0xPUEVfTVJDX0RBVEE7CisJY21kLmVuaGFuY2VfdGFibGVbSERfQ0NLX05PTl9TUVVBUkVfREVUX0lOVEVSQ0VQVF9NUkNfSU5ERVhdID0KKwkJSERfQ0NLX05PTl9TUVVBUkVfREVUX0lOVEVSQ0VQVF9NUkNfREFUQTsKKwljbWQuZW5oYW5jZV90YWJsZVtIRF9DQ0tfTk9OX1NRVUFSRV9ERVRfU0xPUEVfSU5ERVhdID0KKwkJSERfQ0NLX05PTl9TUVVBUkVfREVUX1NMT1BFX0RBVEE7CisJY21kLmVuaGFuY2VfdGFibGVbSERfQ0NLX05PTl9TUVVBUkVfREVUX0lOVEVSQ0VQVF9JTkRFWF0gPQorCQlIRF9DQ0tfTk9OX1NRVUFSRV9ERVRfSU5URVJDRVBUX0RBVEE7CisKKwkvKiBVcGRhdGUgdUNvZGUncyAid29yayIgdGFibGUsIGFuZCBjb3B5IGl0IHRvIERTUCAqLworCWNtZC5jb250cm9sID0gU0VOU0lUSVZJVFlfQ01EX0NPTlRST0xfV09SS19UQUJMRTsKKworCS8qIERvbid0IHNlbmQgY29tbWFuZCB0byB1Q29kZSBpZiBub3RoaW5nIGhhcyBjaGFuZ2VkICovCisJaWYgKCFtZW1jbXAoJmNtZC5lbmhhbmNlX3RhYmxlWzBdLCAmKHByaXYtPnNlbnNpdGl2aXR5X3RibFswXSksCisJCSAgICBzaXplb2YodTE2KSpIRF9UQUJMRV9TSVpFKSAmJgorCSAgICAhbWVtY21wKCZjbWQuZW5oYW5jZV90YWJsZVtIRF9JTkFfTk9OX1NRVUFSRV9ERVRfT0ZETV9JTkRFWF0sCisJCSAgICAmKHByaXYtPmVuaGFuY2Vfc2Vuc2l0aXZpdHlfdGJsWzBdKSwKKwkJICAgIHNpemVvZih1MTYpKkVOSEFOQ0VfSERfVEFCTEVfRU5UUklFUykpIHsKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICJObyBjaGFuZ2UgaW4gU0VOU0lUSVZJVFlfQ01EXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogQ29weSB0YWJsZSBmb3IgY29tcGFyaXNvbiBuZXh0IHRpbWUgKi8KKwltZW1jcHkoJihwcml2LT5zZW5zaXRpdml0eV90YmxbMF0pLCAmKGNtZC5lbmhhbmNlX3RhYmxlWzBdKSwKKwkgICAgICAgc2l6ZW9mKHUxNikqSERfVEFCTEVfU0laRSk7CisJbWVtY3B5KCYocHJpdi0+ZW5oYW5jZV9zZW5zaXRpdml0eV90YmxbMF0pLAorCSAgICAgICAmKGNtZC5lbmhhbmNlX3RhYmxlW0hEX0lOQV9OT05fU1FVQVJFX0RFVF9PRkRNX0lOREVYXSksCisJICAgICAgIHNpemVvZih1MTYpKkVOSEFOQ0VfSERfVEFCTEVfRU5UUklFUyk7CisKKwlyZXR1cm4gaXdsX3NlbmRfY21kKHByaXYsICZjbWRfb3V0KTsKK30KKwordm9pZCBpd2xfaW5pdF9zZW5zaXRpdml0eShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IHJldCA9IDA7CisJaW50IGk7CisJc3RydWN0IGl3bF9zZW5zaXRpdml0eV9kYXRhICpkYXRhID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X3JhbmdlcyAqcmFuZ2VzID0gcHJpdi0+aHdfcGFyYW1zLnNlbnM7CisKKwlpZiAocHJpdi0+ZGlzYWJsZV9zZW5zX2NhbCkKKwkJcmV0dXJuOworCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJTdGFydCBpd2xfaW5pdF9zZW5zaXRpdml0eVxuIik7CisKKwkvKiBDbGVhciBkcml2ZXIncyBzZW5zaXRpdml0eSBhbGdvIGRhdGEgKi8KKwlkYXRhID0gJihwcml2LT5zZW5zaXRpdml0eV9kYXRhKTsKKworCWlmIChyYW5nZXMgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJbWVtc2V0KGRhdGEsIDAsIHNpemVvZihzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X2RhdGEpKTsKKworCWRhdGEtPm51bV9pbl9jY2tfbm9fZmEgPSAwOworCWRhdGEtPm5yZ19jdXJyX3N0YXRlID0gSVdMX0ZBX1RPT19NQU5ZOworCWRhdGEtPm5yZ19wcmV2X3N0YXRlID0gSVdMX0ZBX1RPT19NQU5ZOworCWRhdGEtPm5yZ19zaWxlbmNlX3JlZiA9IDA7CisJZGF0YS0+bnJnX3NpbGVuY2VfaWR4ID0gMDsKKwlkYXRhLT5ucmdfZW5lcmd5X2lkeCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKKwkJZGF0YS0+bnJnX3ZhbHVlW2ldID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBOUkdfTlVNX1BSRVZfU1RBVF9MOyBpKyspCisJCWRhdGEtPm5yZ19zaWxlbmNlX3Jzc2lbaV0gPSAwOworCisJZGF0YS0+YXV0b19jb3JyX29mZG0gPSAgcmFuZ2VzLT5hdXRvX2NvcnJfbWluX29mZG07CisJZGF0YS0+YXV0b19jb3JyX29mZG1fbXJjID0gcmFuZ2VzLT5hdXRvX2NvcnJfbWluX29mZG1fbXJjOworCWRhdGEtPmF1dG9fY29ycl9vZmRtX3gxICA9IHJhbmdlcy0+YXV0b19jb3JyX21pbl9vZmRtX3gxOworCWRhdGEtPmF1dG9fY29ycl9vZmRtX21yY194MSA9IHJhbmdlcy0+YXV0b19jb3JyX21pbl9vZmRtX21yY194MTsKKwlkYXRhLT5hdXRvX2NvcnJfY2NrID0gQVVUT19DT1JSX0NDS19NSU5fVkFMX0RFRjsKKwlkYXRhLT5hdXRvX2NvcnJfY2NrX21yYyA9IHJhbmdlcy0+YXV0b19jb3JyX21pbl9jY2tfbXJjOworCWRhdGEtPm5yZ190aF9jY2sgPSByYW5nZXMtPm5yZ190aF9jY2s7CisJZGF0YS0+bnJnX3RoX29mZG0gPSByYW5nZXMtPm5yZ190aF9vZmRtOworCWRhdGEtPmJhcmtlcl9jb3JyX3RoX21pbiA9IHJhbmdlcy0+YmFya2VyX2NvcnJfdGhfbWluOworCWRhdGEtPmJhcmtlcl9jb3JyX3RoX21pbl9tcmMgPSByYW5nZXMtPmJhcmtlcl9jb3JyX3RoX21pbl9tcmM7CisJZGF0YS0+bnJnX3RoX2NjYSA9IHJhbmdlcy0+bnJnX3RoX2NjYTsKKworCWRhdGEtPmxhc3RfYmFkX3BsY3BfY250X29mZG0gPSAwOworCWRhdGEtPmxhc3RfZmFfY250X29mZG0gPSAwOworCWRhdGEtPmxhc3RfYmFkX3BsY3BfY250X2NjayA9IDA7CisJZGF0YS0+bGFzdF9mYV9jbnRfY2NrID0gMDsKKworCWlmIChwcml2LT5lbmhhbmNlX3NlbnNpdGl2aXR5X3RhYmxlKQorCQlyZXQgfD0gaXdsX2VuaGFuY2Vfc2Vuc2l0aXZpdHlfd3JpdGUocHJpdik7CisJZWxzZQorCQlyZXQgfD0gaXdsX3NlbnNpdGl2aXR5X3dyaXRlKHByaXYpOworCUlXTF9ERUJVR19DQUxJQihwcml2LCAiPDxyZXR1cm4gMHglWFxuIiwgcmV0KTsKK30KKwordm9pZCBpd2xfc2Vuc2l0aXZpdHlfY2FsaWJyYXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCB2b2lkICpyZXNwKQoreworCXUzMiByeF9lbmFibGVfdGltZTsKKwl1MzIgZmFfY2NrOworCXUzMiBmYV9vZmRtOworCXUzMiBiYWRfcGxjcF9jY2s7CisJdTMyIGJhZF9wbGNwX29mZG07CisJdTMyIG5vcm1fZmFfb2ZkbTsKKwl1MzIgbm9ybV9mYV9jY2s7CisJc3RydWN0IGl3bF9zZW5zaXRpdml0eV9kYXRhICpkYXRhID0gTlVMTDsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5ICpyeF9pbmZvOworCXN0cnVjdCBzdGF0aXN0aWNzX3J4X3BoeSAqb2ZkbSwgKmNjazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzdGF0aXN0aWNzX2dlbmVyYWxfZGF0YSBzdGF0aXM7CisKKwlpZiAocHJpdi0+ZGlzYWJsZV9zZW5zX2NhbCkKKwkJcmV0dXJuOworCisJZGF0YSA9ICYocHJpdi0+c2Vuc2l0aXZpdHlfZGF0YSk7CisKKwlpZiAoIWl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7CisJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiPDwgLSBub3QgYXNzb2NpYXRlZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChwcml2LT5jZmctPmJ0X3N0YXRpc3RpY3MpIHsKKwkJcnhfaW5mbyA9ICYoKChzdHJ1Y3QgaXdsX2J0X25vdGlmX3N0YXRpc3RpY3MgKilyZXNwKS0+CisJCQkgICAgICByeC5nZW5lcmFsLmNvbW1vbik7CisJCW9mZG0gPSAmKCgoc3RydWN0IGl3bF9idF9ub3RpZl9zdGF0aXN0aWNzICopcmVzcCktPnJ4Lm9mZG0pOworCQljY2sgPSAmKCgoc3RydWN0IGl3bF9idF9ub3RpZl9zdGF0aXN0aWNzICopcmVzcCktPnJ4LmNjayk7CisJfSBlbHNlIHsKKwkJcnhfaW5mbyA9ICYoKChzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MgKilyZXNwKS0+cnguZ2VuZXJhbCk7CisJCW9mZG0gPSAmKCgoc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzICopcmVzcCktPnJ4Lm9mZG0pOworCQljY2sgPSAmKCgoc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzICopcmVzcCktPnJ4LmNjayk7CisJfQorCWlmIChyeF9pbmZvLT5pbnRlcmZlcmVuY2VfZGF0YV9mbGFnICE9IElOVEVSRkVSRU5DRV9EQVRBX0FWQUlMQUJMRSkgeworCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIjw8IGludmFsaWQgZGF0YS5cbiIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBFeHRyYWN0IFN0YXRpc3RpY3M6ICovCisJcnhfZW5hYmxlX3RpbWUgPSBsZTMyX3RvX2NwdShyeF9pbmZvLT5jaGFubmVsX2xvYWQpOworCWZhX2NjayA9IGxlMzJfdG9fY3B1KGNjay0+ZmFsc2VfYWxhcm1fY250KTsKKwlmYV9vZmRtID0gbGUzMl90b19jcHUob2ZkbS0+ZmFsc2VfYWxhcm1fY250KTsKKwliYWRfcGxjcF9jY2sgPSBsZTMyX3RvX2NwdShjY2stPnBsY3BfZXJyKTsKKwliYWRfcGxjcF9vZmRtID0gbGUzMl90b19jcHUob2ZkbS0+cGxjcF9lcnIpOworCisJc3RhdGlzLmJlYWNvbl9zaWxlbmNlX3Jzc2lfYSA9CisJCQlsZTMyX3RvX2NwdShyeF9pbmZvLT5iZWFjb25fc2lsZW5jZV9yc3NpX2EpOworCXN0YXRpcy5iZWFjb25fc2lsZW5jZV9yc3NpX2IgPQorCQkJbGUzMl90b19jcHUocnhfaW5mby0+YmVhY29uX3NpbGVuY2VfcnNzaV9iKTsKKwlzdGF0aXMuYmVhY29uX3NpbGVuY2VfcnNzaV9jID0KKwkJCWxlMzJfdG9fY3B1KHJ4X2luZm8tPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYyk7CisJc3RhdGlzLmJlYWNvbl9lbmVyZ3lfYSA9CisJCQlsZTMyX3RvX2NwdShyeF9pbmZvLT5iZWFjb25fZW5lcmd5X2EpOworCXN0YXRpcy5iZWFjb25fZW5lcmd5X2IgPQorCQkJbGUzMl90b19jcHUocnhfaW5mby0+YmVhY29uX2VuZXJneV9iKTsKKwlzdGF0aXMuYmVhY29uX2VuZXJneV9jID0KKwkJCWxlMzJfdG9fY3B1KHJ4X2luZm8tPmJlYWNvbl9lbmVyZ3lfYyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlJV0xfREVCVUdfQ0FMSUIocHJpdiwgInJ4X2VuYWJsZV90aW1lID0gJXUgdXNlY3NcbiIsIHJ4X2VuYWJsZV90aW1lKTsKKworCWlmICghcnhfZW5hYmxlX3RpbWUpIHsKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICI8PCBSWCBFbmFibGUgVGltZSA9PSAwIVxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBUaGVzZSBzdGF0aXN0aWNzIGluY3JlYXNlIG1vbm90b25pY2FsbHksIGFuZCBkbyBub3QgcmVzZXQKKwkgKiAgIGF0IGVhY2ggYmVhY29uLiAgQ2FsY3VsYXRlIGRpZmZlcmVuY2UgZnJvbSBsYXN0IHZhbHVlLCBvciBqdXN0CisJICogICB1c2UgdGhlIG5ldyBzdGF0aXN0aWNzIHZhbHVlIGlmIGl0IGhhcyByZXNldCBvciB3cmFwcGVkIGFyb3VuZC4gKi8KKwlpZiAoZGF0YS0+bGFzdF9iYWRfcGxjcF9jbnRfY2NrID4gYmFkX3BsY3BfY2NrKQorCQlkYXRhLT5sYXN0X2JhZF9wbGNwX2NudF9jY2sgPSBiYWRfcGxjcF9jY2s7CisJZWxzZSB7CisJCWJhZF9wbGNwX2NjayAtPSBkYXRhLT5sYXN0X2JhZF9wbGNwX2NudF9jY2s7CisJCWRhdGEtPmxhc3RfYmFkX3BsY3BfY250X2NjayArPSBiYWRfcGxjcF9jY2s7CisJfQorCisJaWYgKGRhdGEtPmxhc3RfYmFkX3BsY3BfY250X29mZG0gPiBiYWRfcGxjcF9vZmRtKQorCQlkYXRhLT5sYXN0X2JhZF9wbGNwX2NudF9vZmRtID0gYmFkX3BsY3Bfb2ZkbTsKKwllbHNlIHsKKwkJYmFkX3BsY3Bfb2ZkbSAtPSBkYXRhLT5sYXN0X2JhZF9wbGNwX2NudF9vZmRtOworCQlkYXRhLT5sYXN0X2JhZF9wbGNwX2NudF9vZmRtICs9IGJhZF9wbGNwX29mZG07CisJfQorCisJaWYgKGRhdGEtPmxhc3RfZmFfY250X29mZG0gPiBmYV9vZmRtKQorCQlkYXRhLT5sYXN0X2ZhX2NudF9vZmRtID0gZmFfb2ZkbTsKKwllbHNlIHsKKwkJZmFfb2ZkbSAtPSBkYXRhLT5sYXN0X2ZhX2NudF9vZmRtOworCQlkYXRhLT5sYXN0X2ZhX2NudF9vZmRtICs9IGZhX29mZG07CisJfQorCisJaWYgKGRhdGEtPmxhc3RfZmFfY250X2NjayA+IGZhX2NjaykKKwkJZGF0YS0+bGFzdF9mYV9jbnRfY2NrID0gZmFfY2NrOworCWVsc2UgeworCQlmYV9jY2sgLT0gZGF0YS0+bGFzdF9mYV9jbnRfY2NrOworCQlkYXRhLT5sYXN0X2ZhX2NudF9jY2sgKz0gZmFfY2NrOworCX0KKworCS8qIFRvdGFsIGFib3J0ZWQgc2lnbmFsIGxvY2tzICovCisJbm9ybV9mYV9vZmRtID0gZmFfb2ZkbSArIGJhZF9wbGNwX29mZG07CisJbm9ybV9mYV9jY2sgPSBmYV9jY2sgKyBiYWRfcGxjcF9jY2s7CisKKwlJV0xfREVCVUdfQ0FMSUIocHJpdiwgImNjazogZmEgJXUgYmFkcCAldSAgb2ZkbTogZmEgJXUgYmFkcCAldVxuIiwgZmFfY2NrLAorCQkJYmFkX3BsY3BfY2NrLCBmYV9vZmRtLCBiYWRfcGxjcF9vZmRtKTsKKworCWl3bF9zZW5zX2F1dG9fY29ycl9vZmRtKHByaXYsIG5vcm1fZmFfb2ZkbSwgcnhfZW5hYmxlX3RpbWUpOworCWl3bF9zZW5zX2VuZXJneV9jY2socHJpdiwgbm9ybV9mYV9jY2ssIHJ4X2VuYWJsZV90aW1lLCAmc3RhdGlzKTsKKwlpZiAocHJpdi0+ZW5oYW5jZV9zZW5zaXRpdml0eV90YWJsZSkKKwkJaXdsX2VuaGFuY2Vfc2Vuc2l0aXZpdHlfd3JpdGUocHJpdik7CisJZWxzZQorCQlpd2xfc2Vuc2l0aXZpdHlfd3JpdGUocHJpdik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggZmluZF9maXJzdF9jaGFpbih1OCBtYXNrKQoreworCWlmIChtYXNrICYgQU5UX0EpCisJCXJldHVybiBDSEFJTl9BOworCWlmIChtYXNrICYgQU5UX0IpCisJCXJldHVybiBDSEFJTl9COworCXJldHVybiBDSEFJTl9DOworfQorCisvKgorICogQWNjdW11bGF0ZSAyMCBiZWFjb25zIG9mIHNpZ25hbCBhbmQgbm9pc2Ugc3RhdGlzdGljcyBmb3IgZWFjaCBvZgorICogICAzIHJlY2VpdmVycy9hbnRlbm5hcy9yeC1jaGFpbnMsIHRoZW4gZmlndXJlIG91dDoKKyAqIDEpICBXaGljaCBhbnRlbm5hcyBhcmUgY29ubmVjdGVkLgorICogMikgIERpZmZlcmVudGlhbCByeCBnYWluIHNldHRpbmdzIHRvIGJhbGFuY2UgdGhlIDMgcmVjZWl2ZXJzLgorICovCit2b2lkIGl3bF9jaGFpbl9ub2lzZV9jYWxpYnJhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHZvaWQgKnN0YXRfcmVzcCkKK3sKKwlzdHJ1Y3QgaXdsX2NoYWluX25vaXNlX2RhdGEgKmRhdGEgPSBOVUxMOworCisJdTMyIGNoYWluX25vaXNlX2E7CisJdTMyIGNoYWluX25vaXNlX2I7CisJdTMyIGNoYWluX25vaXNlX2M7CisJdTMyIGNoYWluX3NpZ19hOworCXUzMiBjaGFpbl9zaWdfYjsKKwl1MzIgY2hhaW5fc2lnX2M7CisJdTMyIGF2ZXJhZ2Vfc2lnW05VTV9SWF9DSEFJTlNdID0ge0lOSVRJQUxJWkFUSU9OX1ZBTFVFfTsKKwl1MzIgYXZlcmFnZV9ub2lzZVtOVU1fUlhfQ0hBSU5TXSA9IHtJTklUSUFMSVpBVElPTl9WQUxVRX07CisJdTMyIG1heF9hdmVyYWdlX3NpZzsKKwl1MTYgbWF4X2F2ZXJhZ2Vfc2lnX2FudGVubmFfaTsKKwl1MzIgbWluX2F2ZXJhZ2Vfbm9pc2UgPSBNSU5fQVZFUkFHRV9OT0lTRV9NQVhfVkFMVUU7CisJdTE2IG1pbl9hdmVyYWdlX25vaXNlX2FudGVubmFfaSA9IElOSVRJQUxJWkFUSU9OX1ZBTFVFOworCXUxNiBpID0gMDsKKwl1MTYgcnhvbl9jaG51bSA9IElOSVRJQUxJWkFUSU9OX1ZBTFVFOworCXUxNiBzdGF0X2NobnVtID0gSU5JVElBTElaQVRJT05fVkFMVUU7CisJdTggcnhvbl9iYW5kMjQ7CisJdTggc3RhdF9iYW5kMjQ7CisJdTMyIGFjdGl2ZV9jaGFpbnMgPSAwOworCXU4IG51bV90eF9jaGFpbnM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5ICpyeF9pbmZvOworCXU4IGZpcnN0X2NoYWluOworCisJaWYgKHByaXYtPmRpc2FibGVfY2hhaW5fbm9pc2VfY2FsKQorCQlyZXR1cm47CisKKwlkYXRhID0gJihwcml2LT5jaGFpbl9ub2lzZV9kYXRhKTsKKworCS8qCisJICogQWNjdW11bGF0ZSBqdXN0IHRoZSBmaXJzdCAiY2hhaW5fbm9pc2VfbnVtX2JlYWNvbnMiIGFmdGVyCisJICogdGhlIGZpcnN0IGFzc29jaWF0aW9uLCB0aGVuIHdlJ3JlIGRvbmUgZm9yZXZlci4KKwkgKi8KKwlpZiAoZGF0YS0+c3RhdGUgIT0gSVdMX0NIQUlOX05PSVNFX0FDQ1VNVUxBVEUpIHsKKwkJaWYgKGRhdGEtPnN0YXRlID09IElXTF9DSEFJTl9OT0lTRV9BTElWRSkKKwkJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiV2FpdCBmb3Igbm9pc2UgY2FsaWIgcmVzZXRcbiIpOworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAocHJpdi0+Y2ZnLT5idF9zdGF0aXN0aWNzKSB7CisJCXJ4X2luZm8gPSAmKCgoc3RydWN0IGl3bF9idF9ub3RpZl9zdGF0aXN0aWNzICopc3RhdF9yZXNwKS0+CisJCQkgICAgICByeC5nZW5lcmFsLmNvbW1vbik7CisJfSBlbHNlIHsKKwkJcnhfaW5mbyA9ICYoKChzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MgKilzdGF0X3Jlc3ApLT4KKwkJCSAgICAgIHJ4LmdlbmVyYWwpOworCX0KKwlpZiAocnhfaW5mby0+aW50ZXJmZXJlbmNlX2RhdGFfZmxhZyAhPSBJTlRFUkZFUkVOQ0VfREFUQV9BVkFJTEFCTEUpIHsKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICIgPDwgSW50ZXJmZXJlbmNlIGRhdGEgdW5hdmFpbGFibGVcbiIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlyeG9uX2JhbmQyNCA9ICEhKHByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmIFJYT05fRkxHX0JBTkRfMjRHX01TSyk7CisJcnhvbl9jaG51bSA9IGxlMTZfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsKTsKKwlpZiAocHJpdi0+Y2ZnLT5idF9zdGF0aXN0aWNzKSB7CisJCXN0YXRfYmFuZDI0ID0gISEoKChzdHJ1Y3QgaXdsX2J0X25vdGlmX3N0YXRpc3RpY3MgKikKKwkJCQkgc3RhdF9yZXNwKS0+ZmxhZyAmCisJCQkJIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0JBTkRfMjRHX01TSyk7CisJCXN0YXRfY2hudW0gPSBsZTMyX3RvX2NwdSgoKHN0cnVjdCBpd2xfYnRfbm90aWZfc3RhdGlzdGljcyAqKQorCQkJCQkgc3RhdF9yZXNwKS0+ZmxhZykgPj4gMTY7CisJfSBlbHNlIHsKKwkJc3RhdF9iYW5kMjQgPSAhISgoKHN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcyAqKQorCQkJCSBzdGF0X3Jlc3ApLT5mbGFnICYKKwkJCQkgU1RBVElTVElDU19SRVBMWV9GTEdfQkFORF8yNEdfTVNLKTsKKwkJc3RhdF9jaG51bSA9IGxlMzJfdG9fY3B1KCgoc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzICopCisJCQkJCSBzdGF0X3Jlc3ApLT5mbGFnKSA+PiAxNjsKKwl9CisKKwkvKiBNYWtlIHN1cmUgd2UgYWNjdW11bGF0ZSBkYXRhIGZvciBqdXN0IHRoZSBhc3NvY2lhdGVkIGNoYW5uZWwKKwkgKiAgIChldmVuIGlmIHNjYW5uaW5nKS4gKi8KKwlpZiAoKHJ4b25fY2hudW0gIT0gc3RhdF9jaG51bSkgfHwgKHJ4b25fYmFuZDI0ICE9IHN0YXRfYmFuZDI0KSkgeworCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIlN0YXRzIG5vdCBmcm9tIGNoYW49JWQsIGJhbmQyND0lZFxuIiwKKwkJCQlyeG9uX2NobnVtLCByeG9uX2JhbmQyNCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogIEFjY3VtdWxhdGUgYmVhY29uIHN0YXRpc3RpY3MgdmFsdWVzIGFjcm9zcworCSAqICJjaGFpbl9ub2lzZV9udW1fYmVhY29ucyIKKwkgKi8KKwljaGFpbl9ub2lzZV9hID0gbGUzMl90b19jcHUocnhfaW5mby0+YmVhY29uX3NpbGVuY2VfcnNzaV9hKSAmCisJCQkJSU5fQkFORF9GSUxURVI7CisJY2hhaW5fbm9pc2VfYiA9IGxlMzJfdG9fY3B1KHJ4X2luZm8tPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYikgJgorCQkJCUlOX0JBTkRfRklMVEVSOworCWNoYWluX25vaXNlX2MgPSBsZTMyX3RvX2NwdShyeF9pbmZvLT5iZWFjb25fc2lsZW5jZV9yc3NpX2MpICYKKwkJCQlJTl9CQU5EX0ZJTFRFUjsKKworCWNoYWluX3NpZ19hID0gbGUzMl90b19jcHUocnhfaW5mby0+YmVhY29uX3Jzc2lfYSkgJiBJTl9CQU5EX0ZJTFRFUjsKKwljaGFpbl9zaWdfYiA9IGxlMzJfdG9fY3B1KHJ4X2luZm8tPmJlYWNvbl9yc3NpX2IpICYgSU5fQkFORF9GSUxURVI7CisJY2hhaW5fc2lnX2MgPSBsZTMyX3RvX2NwdShyeF9pbmZvLT5iZWFjb25fcnNzaV9jKSAmIElOX0JBTkRfRklMVEVSOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJZGF0YS0+YmVhY29uX2NvdW50Kys7CisKKwlkYXRhLT5jaGFpbl9ub2lzZV9hID0gKGNoYWluX25vaXNlX2EgKyBkYXRhLT5jaGFpbl9ub2lzZV9hKTsKKwlkYXRhLT5jaGFpbl9ub2lzZV9iID0gKGNoYWluX25vaXNlX2IgKyBkYXRhLT5jaGFpbl9ub2lzZV9iKTsKKwlkYXRhLT5jaGFpbl9ub2lzZV9jID0gKGNoYWluX25vaXNlX2MgKyBkYXRhLT5jaGFpbl9ub2lzZV9jKTsKKworCWRhdGEtPmNoYWluX3NpZ25hbF9hID0gKGNoYWluX3NpZ19hICsgZGF0YS0+Y2hhaW5fc2lnbmFsX2EpOworCWRhdGEtPmNoYWluX3NpZ25hbF9iID0gKGNoYWluX3NpZ19iICsgZGF0YS0+Y2hhaW5fc2lnbmFsX2IpOworCWRhdGEtPmNoYWluX3NpZ25hbF9jID0gKGNoYWluX3NpZ19jICsgZGF0YS0+Y2hhaW5fc2lnbmFsX2MpOworCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJjaGFuPSVkLCBiYW5kMjQ9JWQsIGJlYWNvbj0lZFxuIiwKKwkJCXJ4b25fY2hudW0sIHJ4b25fYmFuZDI0LCBkYXRhLT5iZWFjb25fY291bnQpOworCUlXTF9ERUJVR19DQUxJQihwcml2LCAiY2hhaW5fc2lnOiBhICVkIGIgJWQgYyAlZFxuIiwKKwkJCWNoYWluX3NpZ19hLCBjaGFpbl9zaWdfYiwgY2hhaW5fc2lnX2MpOworCUlXTF9ERUJVR19DQUxJQihwcml2LCAiY2hhaW5fbm9pc2U6IGEgJWQgYiAlZCBjICVkXG4iLAorCQkJY2hhaW5fbm9pc2VfYSwgY2hhaW5fbm9pc2VfYiwgY2hhaW5fbm9pc2VfYyk7CisKKwkvKiBJZiB0aGlzIGlzIHRoZSAiY2hhaW5fbm9pc2VfbnVtX2JlYWNvbnMiLCBkZXRlcm1pbmU6CisJICogMSkgIERpc2Nvbm5lY3RlZCBhbnRlbm5hcyAodXNpbmcgc2lnbmFsIHN0cmVuZ3RocykKKwkgKiAyKSAgRGlmZmVyZW50aWFsIGdhaW4gKHVzaW5nIHNpbGVuY2Ugbm9pc2UpIHRvIGJhbGFuY2UgcmVjZWl2ZXJzICovCisJaWYgKGRhdGEtPmJlYWNvbl9jb3VudCAhPSBwcml2LT5jZmctPmNoYWluX25vaXNlX251bV9iZWFjb25zKQorCQlyZXR1cm47CisKKwkvKiBBbmFseXplIHNpZ25hbCBmb3IgZGlzY29ubmVjdGVkIGFudGVubmEgKi8KKwlhdmVyYWdlX3NpZ1swXSA9CisJCShkYXRhLT5jaGFpbl9zaWduYWxfYSkgLyBwcml2LT5jZmctPmNoYWluX25vaXNlX251bV9iZWFjb25zOworCWF2ZXJhZ2Vfc2lnWzFdID0KKwkJKGRhdGEtPmNoYWluX3NpZ25hbF9iKSAvIHByaXYtPmNmZy0+Y2hhaW5fbm9pc2VfbnVtX2JlYWNvbnM7CisJYXZlcmFnZV9zaWdbMl0gPQorCQkoZGF0YS0+Y2hhaW5fc2lnbmFsX2MpIC8gcHJpdi0+Y2ZnLT5jaGFpbl9ub2lzZV9udW1fYmVhY29uczsKKworCWlmIChhdmVyYWdlX3NpZ1swXSA+PSBhdmVyYWdlX3NpZ1sxXSkgeworCQltYXhfYXZlcmFnZV9zaWcgPSBhdmVyYWdlX3NpZ1swXTsKKwkJbWF4X2F2ZXJhZ2Vfc2lnX2FudGVubmFfaSA9IDA7CisJCWFjdGl2ZV9jaGFpbnMgPSAoMSA8PCBtYXhfYXZlcmFnZV9zaWdfYW50ZW5uYV9pKTsKKwl9IGVsc2UgeworCQltYXhfYXZlcmFnZV9zaWcgPSBhdmVyYWdlX3NpZ1sxXTsKKwkJbWF4X2F2ZXJhZ2Vfc2lnX2FudGVubmFfaSA9IDE7CisJCWFjdGl2ZV9jaGFpbnMgPSAoMSA8PCBtYXhfYXZlcmFnZV9zaWdfYW50ZW5uYV9pKTsKKwl9CisKKwlpZiAoYXZlcmFnZV9zaWdbMl0gPj0gbWF4X2F2ZXJhZ2Vfc2lnKSB7CisJCW1heF9hdmVyYWdlX3NpZyA9IGF2ZXJhZ2Vfc2lnWzJdOworCQltYXhfYXZlcmFnZV9zaWdfYW50ZW5uYV9pID0gMjsKKwkJYWN0aXZlX2NoYWlucyA9ICgxIDw8IG1heF9hdmVyYWdlX3NpZ19hbnRlbm5hX2kpOworCX0KKworCUlXTF9ERUJVR19DQUxJQihwcml2LCAiYXZlcmFnZV9zaWc6IGEgJWQgYiAlZCBjICVkXG4iLAorCQkgICAgIGF2ZXJhZ2Vfc2lnWzBdLCBhdmVyYWdlX3NpZ1sxXSwgYXZlcmFnZV9zaWdbMl0pOworCUlXTF9ERUJVR19DQUxJQihwcml2LCAibWF4X2F2ZXJhZ2Vfc2lnID0gJWQsIGFudGVubmEgJWRcbiIsCisJCSAgICAgbWF4X2F2ZXJhZ2Vfc2lnLCBtYXhfYXZlcmFnZV9zaWdfYW50ZW5uYV9pKTsKKworCS8qIENvbXBhcmUgc2lnbmFsIHN0cmVuZ3RocyBmb3IgYWxsIDMgcmVjZWl2ZXJzLiAqLworCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfQ0hBSU5TOyBpKyspIHsKKwkJaWYgKGkgIT0gbWF4X2F2ZXJhZ2Vfc2lnX2FudGVubmFfaSkgeworCQkJczMyIHJzc2lfZGVsdGEgPSAobWF4X2F2ZXJhZ2Vfc2lnIC0gYXZlcmFnZV9zaWdbaV0pOworCisJCQkvKiBJZiBzaWduYWwgaXMgdmVyeSB3ZWFrLCBjb21wYXJlZCB3aXRoCisJCQkgKiBzdHJvbmdlc3QsIG1hcmsgaXQgYXMgZGlzY29ubmVjdGVkLiAqLworCQkJaWYgKHJzc2lfZGVsdGEgPiBNQVhJTVVNX0FMTE9XRURfUEFUSExPU1MpCisJCQkJZGF0YS0+ZGlzY29ubl9hcnJheVtpXSA9IDE7CisJCQllbHNlCisJCQkJYWN0aXZlX2NoYWlucyB8PSAoMSA8PCBpKTsKKwkJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiaSA9ICVkICByc3NpRGVsdGEgPSAlZCAgIgorCQkJICAgICAiZGlzY29ubl9hcnJheVtpXSA9ICVkXG4iLAorCQkJICAgICBpLCByc3NpX2RlbHRhLCBkYXRhLT5kaXNjb25uX2FycmF5W2ldKTsKKwkJfQorCX0KKworCS8qCisJICogVGhlIGFib3ZlIGFsZ29yaXRobSBzb21ldGltZXMgZmFpbHMgd2hlbiB0aGUgdWNvZGUKKwkgKiByZXBvcnRzIDAgZm9yIGFsbCBjaGFpbnMuIEl0J3Mgbm90IGNsZWFyIHdoeSB0aGF0CisJICogaGFwcGVucyB0byBzdGFydCB3aXRoLCBidXQgaXQgaXMgdGhlbiBjYXVzaW5nIHRyb3VibGUKKwkgKiBiZWNhdXNlIHRoaXMgY2FuIG1ha2UgdXMgZW5hYmxlIG1vcmUgY2hhaW5zIHRoYW4gdGhlCisJICogaGFyZHdhcmUgcmVhbGx5IGhhcy4KKwkgKgorCSAqIFRvIGJlIHNhZmUsIHNpbXBseSBtYXNrIG91dCBhbnkgY2hhaW5zIHRoYXQgd2Uga25vdworCSAqIGFyZSBub3Qgb24gdGhlIGRldmljZS4KKwkgKi8KKwlhY3RpdmVfY2hhaW5zICY9IHByaXYtPmh3X3BhcmFtcy52YWxpZF9yeF9hbnQ7CisKKwludW1fdHhfY2hhaW5zID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1JYX0NIQUlOUzsgaSsrKSB7CisJCS8qIGxvb3BzIG9uIGFsbCB0aGUgYml0cyBvZgorCQkgKiBwcml2LT5od19zZXR0aW5nLnZhbGlkX3R4X2FudCAqLworCQl1OCBhbnRfbXNrID0gKDEgPDwgaSk7CisJCWlmICghKHByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQgJiBhbnRfbXNrKSkKKwkJCWNvbnRpbnVlOworCisJCW51bV90eF9jaGFpbnMrKzsKKwkJaWYgKGRhdGEtPmRpc2Nvbm5fYXJyYXlbaV0gPT0gMCkKKwkJCS8qIHRoZXJlIGlzIGEgVHggYW50ZW5uYSBjb25uZWN0ZWQgKi8KKwkJCWJyZWFrOworCQlpZiAobnVtX3R4X2NoYWlucyA9PSBwcml2LT5od19wYXJhbXMudHhfY2hhaW5zX251bSAmJgorCQkgICAgZGF0YS0+ZGlzY29ubl9hcnJheVtpXSkgeworCQkJLyoKKwkJCSAqIElmIGFsbCBjaGFpbnMgYXJlIGRpc2Nvbm5lY3RlZAorCQkJICogY29ubmVjdCB0aGUgZmlyc3QgdmFsaWQgdHggY2hhaW4KKwkJCSAqLworCQkJZmlyc3RfY2hhaW4gPQorCQkJCWZpbmRfZmlyc3RfY2hhaW4ocHJpdi0+Y2ZnLT52YWxpZF90eF9hbnQpOworCQkJZGF0YS0+ZGlzY29ubl9hcnJheVtmaXJzdF9jaGFpbl0gPSAwOworCQkJYWN0aXZlX2NoYWlucyB8PSBCSVQoZmlyc3RfY2hhaW4pOworCQkJSVdMX0RFQlVHX0NBTElCKHByaXYsICJBbGwgVHggY2hhaW5zIGFyZSBkaXNjb25uZWN0ZWQgVy9BIC0gZGVjbGFyZSAlZCBhcyBjb25uZWN0ZWRcbiIsCisJCQkJCWZpcnN0X2NoYWluKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGFjdGl2ZV9jaGFpbnMgIT0gcHJpdi0+aHdfcGFyYW1zLnZhbGlkX3J4X2FudCAmJgorCSAgICBhY3RpdmVfY2hhaW5zICE9IHByaXYtPmNoYWluX25vaXNlX2RhdGEuYWN0aXZlX2NoYWlucykKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsCisJCQkJIkRldGVjdGVkIHRoYXQgbm90IGFsbCBhbnRlbm5hcyBhcmUgY29ubmVjdGVkISAiCisJCQkJIkNvbm5lY3RlZDogJSN4LCB2YWxpZDogJSN4LlxuIiwKKwkJCQlhY3RpdmVfY2hhaW5zLCBwcml2LT5od19wYXJhbXMudmFsaWRfcnhfYW50KTsKKworCS8qIFNhdmUgZm9yIHVzZSB3aXRoaW4gUlhPTiwgVFgsIFNDQU4gY29tbWFuZHMsIGV0Yy4gKi8KKwlwcml2LT5jaGFpbl9ub2lzZV9kYXRhLmFjdGl2ZV9jaGFpbnMgPSBhY3RpdmVfY2hhaW5zOworCUlXTF9ERUJVR19DQUxJQihwcml2LCAiYWN0aXZlX2NoYWlucyAoYml0d2lzZSkgPSAweCV4XG4iLAorCQkJYWN0aXZlX2NoYWlucyk7CisKKwkvKiBBbmFseXplIG5vaXNlIGZvciByeCBiYWxhbmNlICovCisJYXZlcmFnZV9ub2lzZVswXSA9CisJCSgoZGF0YS0+Y2hhaW5fbm9pc2VfYSkgLyBwcml2LT5jZmctPmNoYWluX25vaXNlX251bV9iZWFjb25zKTsKKwlhdmVyYWdlX25vaXNlWzFdID0KKwkJKChkYXRhLT5jaGFpbl9ub2lzZV9iKSAvIHByaXYtPmNmZy0+Y2hhaW5fbm9pc2VfbnVtX2JlYWNvbnMpOworCWF2ZXJhZ2Vfbm9pc2VbMl0gPQorCQkoKGRhdGEtPmNoYWluX25vaXNlX2MpIC8gcHJpdi0+Y2ZnLT5jaGFpbl9ub2lzZV9udW1fYmVhY29ucyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1JYX0NIQUlOUzsgaSsrKSB7CisJCWlmICghKGRhdGEtPmRpc2Nvbm5fYXJyYXlbaV0pICYmCisJCSAgIChhdmVyYWdlX25vaXNlW2ldIDw9IG1pbl9hdmVyYWdlX25vaXNlKSkgeworCQkJLyogVGhpcyBtZWFucyB0aGF0IGNoYWluIGkgaXMgYWN0aXZlIGFuZCBoYXMKKwkJCSAqIGxvd2VyIG5vaXNlIHZhbHVlcyBzbyBmYXI6ICovCisJCQltaW5fYXZlcmFnZV9ub2lzZSA9IGF2ZXJhZ2Vfbm9pc2VbaV07CisJCQltaW5fYXZlcmFnZV9ub2lzZV9hbnRlbm5hX2kgPSBpOworCQl9CisJfQorCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJhdmVyYWdlX25vaXNlOiBhICVkIGIgJWQgYyAlZFxuIiwKKwkJCWF2ZXJhZ2Vfbm9pc2VbMF0sIGF2ZXJhZ2Vfbm9pc2VbMV0sCisJCQlhdmVyYWdlX25vaXNlWzJdKTsKKworCUlXTF9ERUJVR19DQUxJQihwcml2LCAibWluX2F2ZXJhZ2Vfbm9pc2UgPSAlZCwgYW50ZW5uYSAlZFxuIiwKKwkJCW1pbl9hdmVyYWdlX25vaXNlLCBtaW5fYXZlcmFnZV9ub2lzZV9hbnRlbm5hX2kpOworCisJaWYgKHByaXYtPmNmZy0+b3BzLT51dGlscy0+Z2Fpbl9jb21wdXRhdGlvbikKKwkJcHJpdi0+Y2ZnLT5vcHMtPnV0aWxzLT5nYWluX2NvbXB1dGF0aW9uKHByaXYsIGF2ZXJhZ2Vfbm9pc2UsCisJCQkJbWluX2F2ZXJhZ2Vfbm9pc2VfYW50ZW5uYV9pLCBtaW5fYXZlcmFnZV9ub2lzZSwKKwkJCQlmaW5kX2ZpcnN0X2NoYWluKHByaXYtPmNmZy0+dmFsaWRfcnhfYW50KSk7CisKKwkvKiBTb21lIHBvd2VyIGNoYW5nZXMgbWF5IGhhdmUgYmVlbiBtYWRlIGR1cmluZyB0aGUgY2FsaWJyYXRpb24uCisJICogVXBkYXRlIGFuZCBjb21taXQgdGhlIFJYT04KKwkgKi8KKwlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dXBkYXRlX2NoYWluX2ZsYWdzKQorCQlwcml2LT5jZmctPm9wcy0+bGliLT51cGRhdGVfY2hhaW5fZmxhZ3MocHJpdik7CisKKwlkYXRhLT5zdGF0ZSA9IElXTF9DSEFJTl9OT0lTRV9ET05FOworCWl3bF9wb3dlcl91cGRhdGVfbW9kZShwcml2LCBmYWxzZSk7Cit9CisKK3ZvaWQgaXdsX3Jlc2V0X3J1bl90aW1lX2NhbGliKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpbnQgaTsKKwltZW1zZXQoJihwcml2LT5zZW5zaXRpdml0eV9kYXRhKSwgMCwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfZGF0YSkpOworCW1lbXNldCgmKHByaXYtPmNoYWluX25vaXNlX2RhdGEpLCAwLAorCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9jaGFpbl9ub2lzZV9kYXRhKSk7CisJZm9yIChpID0gMDsgaSA8IE5VTV9SWF9DSEFJTlM7IGkrKykKKwkJcHJpdi0+Y2hhaW5fbm9pc2VfZGF0YS5kZWx0YV9nYWluX2NvZGVbaV0gPQorCQkJCUNIQUlOX05PSVNFX0RFTFRBX0dBSU5fSU5JVF9WQUw7CisKKwkvKiBBc2sgZm9yIHN0YXRpc3RpY3Mgbm93LCB0aGUgdUNvZGUgd2lsbCBzZW5kIG5vdGlmaWNhdGlvbgorCSAqIHBlcmlvZGljYWxseSBhZnRlciBhc3NvY2lhdGlvbiAqLworCWl3bF9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChwcml2LCBDTURfQVNZTkMsIHRydWUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWRlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1kZWJ1Z2ZzLmMKaW5kZXggNDhjMDIzYi4uZjA1MmM2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWRlYnVnZnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tZGVidWdmcy5jCkBAIC0yOCw2ICsyOCwzMCBAQAogCiAjaW5jbHVkZSAiaXdsLWFnbi1kZWJ1Z2ZzLmgiCiAKK3N0YXRpYyBpbnQgaXdsX3N0YXRpc3RpY3NfZmxhZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNoYXIgKmJ1ZiwgaW50IGJ1ZnN6KQoreworCWludCBwID0gMDsKKwl1MzIgZmxhZzsKKworCWlmIChwcml2LT5jZmctPmJ0X3N0YXRpc3RpY3MpCisJCWZsYWcgPSBsZTMyX3RvX2NwdShwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQuZmxhZyk7CisJZWxzZQorCQlmbGFnID0gbGUzMl90b19jcHUocHJpdi0+X2Fnbi5zdGF0aXN0aWNzLmZsYWcpOworCisJcCArPSBzY25wcmludGYoYnVmICsgcCwgYnVmc3ogLSBwLCAiU3RhdGlzdGljcyBGbGFnKDB4JVgpOlxuIiwgZmxhZyk7CisJaWYgKGZsYWcgJiBVQ09ERV9TVEFUSVNUSUNTX0NMRUFSX01TSykKKwkJcCArPSBzY25wcmludGYoYnVmICsgcCwgYnVmc3ogLSBwLAorCQkiXHRTdGF0aXN0aWNzIGhhdmUgYmVlbiBjbGVhcmVkXG4iKTsKKwlwICs9IHNjbnByaW50ZihidWYgKyBwLCBidWZzeiAtIHAsICJcdE9wZXJhdGlvbmFsIEZyZXF1ZW5jeTogJXNcbiIsCisJCShmbGFnICYgVUNPREVfU1RBVElTVElDU19GUkVRVUVOQ1lfTVNLKQorCQk/ICIyLjQgR0h6IiA6ICI1LjIgR0h6Iik7CisJcCArPSBzY25wcmludGYoYnVmICsgcCwgYnVmc3ogLSBwLCAiXHRUR2ogTmFycm93IEJhbmQ6ICVzXG4iLAorCQkoZmxhZyAmIFVDT0RFX1NUQVRJU1RJQ1NfTkFSUk9XX0JBTkRfTVNLKQorCQkgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKKworCXJldHVybiBwOworfQorCiBzc2l6ZV90IGl3bF91Y29kZV9yeF9zdGF0c19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiAgIHsKQEAgLTU4LDI0ICs4Miw0NSBAQAogCSAqIHRoZSBsYXN0IHN0YXRpc3RpY3Mgbm90aWZpY2F0aW9uIGZyb20gdUNvZGUKIAkgKiBtaWdodCBub3QgcmVmbGVjdCB0aGUgY3VycmVudCB1Q29kZSBhY3Rpdml0eQogCSAqLwotCW9mZG0gPSAmcHJpdi0+c3RhdGlzdGljcy5yeC5vZmRtOwotCWNjayA9ICZwcml2LT5zdGF0aXN0aWNzLnJ4LmNjazsKLQlnZW5lcmFsID0gJnByaXYtPnN0YXRpc3RpY3MucnguZ2VuZXJhbDsKLQlodCA9ICZwcml2LT5zdGF0aXN0aWNzLnJ4Lm9mZG1faHQ7Ci0JYWNjdW1fb2ZkbSA9ICZwcml2LT5hY2N1bV9zdGF0aXN0aWNzLnJ4Lm9mZG07Ci0JYWNjdW1fY2NrID0gJnByaXYtPmFjY3VtX3N0YXRpc3RpY3MucnguY2NrOwotCWFjY3VtX2dlbmVyYWwgPSAmcHJpdi0+YWNjdW1fc3RhdGlzdGljcy5yeC5nZW5lcmFsOwotCWFjY3VtX2h0ID0gJnByaXYtPmFjY3VtX3N0YXRpc3RpY3Mucngub2ZkbV9odDsKLQlkZWx0YV9vZmRtID0gJnByaXYtPmRlbHRhX3N0YXRpc3RpY3Mucngub2ZkbTsKLQlkZWx0YV9jY2sgPSAmcHJpdi0+ZGVsdGFfc3RhdGlzdGljcy5yeC5jY2s7Ci0JZGVsdGFfZ2VuZXJhbCA9ICZwcml2LT5kZWx0YV9zdGF0aXN0aWNzLnJ4LmdlbmVyYWw7Ci0JZGVsdGFfaHQgPSAmcHJpdi0+ZGVsdGFfc3RhdGlzdGljcy5yeC5vZmRtX2h0OwotCW1heF9vZmRtID0gJnByaXYtPm1heF9kZWx0YS5yeC5vZmRtOwotCW1heF9jY2sgPSAmcHJpdi0+bWF4X2RlbHRhLnJ4LmNjazsKLQltYXhfZ2VuZXJhbCA9ICZwcml2LT5tYXhfZGVsdGEucnguZ2VuZXJhbDsKLQltYXhfaHQgPSAmcHJpdi0+bWF4X2RlbHRhLnJ4Lm9mZG1faHQ7CisJaWYgKHByaXYtPmNmZy0+YnRfc3RhdGlzdGljcykgeworCQlvZmRtID0gJnByaXYtPl9hZ24uc3RhdGlzdGljc19idC5yeC5vZmRtOworCQljY2sgPSAmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzX2J0LnJ4LmNjazsKKwkJZ2VuZXJhbCA9ICZwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQucnguZ2VuZXJhbC5jb21tb247CisJCWh0ID0gJnByaXYtPl9hZ24uc3RhdGlzdGljc19idC5yeC5vZmRtX2h0OworCQlhY2N1bV9vZmRtID0gJnByaXYtPl9hZ24uYWNjdW1fc3RhdGlzdGljc19idC5yeC5vZmRtOworCQlhY2N1bV9jY2sgPSAmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzX2J0LnJ4LmNjazsKKwkJYWNjdW1fZ2VuZXJhbCA9CisJCQkmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzX2J0LnJ4LmdlbmVyYWwuY29tbW9uOworCQlhY2N1bV9odCA9ICZwcml2LT5fYWduLmFjY3VtX3N0YXRpc3RpY3NfYnQucngub2ZkbV9odDsKKwkJZGVsdGFfb2ZkbSA9ICZwcml2LT5fYWduLmRlbHRhX3N0YXRpc3RpY3NfYnQucngub2ZkbTsKKwkJZGVsdGFfY2NrID0gJnByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljc19idC5yeC5jY2s7CisJCWRlbHRhX2dlbmVyYWwgPQorCQkJJnByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljc19idC5yeC5nZW5lcmFsLmNvbW1vbjsKKwkJZGVsdGFfaHQgPSAmcHJpdi0+X2Fnbi5kZWx0YV9zdGF0aXN0aWNzX2J0LnJ4Lm9mZG1faHQ7CisJCW1heF9vZmRtID0gJnByaXYtPl9hZ24ubWF4X2RlbHRhX2J0LnJ4Lm9mZG07CisJCW1heF9jY2sgPSAmcHJpdi0+X2Fnbi5tYXhfZGVsdGFfYnQucnguY2NrOworCQltYXhfZ2VuZXJhbCA9ICZwcml2LT5fYWduLm1heF9kZWx0YV9idC5yeC5nZW5lcmFsLmNvbW1vbjsKKwkJbWF4X2h0ID0gJnByaXYtPl9hZ24ubWF4X2RlbHRhX2J0LnJ4Lm9mZG1faHQ7CisJfSBlbHNlIHsKKwkJb2ZkbSA9ICZwcml2LT5fYWduLnN0YXRpc3RpY3Mucngub2ZkbTsKKwkJY2NrID0gJnByaXYtPl9hZ24uc3RhdGlzdGljcy5yeC5jY2s7CisJCWdlbmVyYWwgPSAmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzLnJ4LmdlbmVyYWw7CisJCWh0ID0gJnByaXYtPl9hZ24uc3RhdGlzdGljcy5yeC5vZmRtX2h0OworCQlhY2N1bV9vZmRtID0gJnByaXYtPl9hZ24uYWNjdW1fc3RhdGlzdGljcy5yeC5vZmRtOworCQlhY2N1bV9jY2sgPSAmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzLnJ4LmNjazsKKwkJYWNjdW1fZ2VuZXJhbCA9ICZwcml2LT5fYWduLmFjY3VtX3N0YXRpc3RpY3MucnguZ2VuZXJhbDsKKwkJYWNjdW1faHQgPSAmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzLnJ4Lm9mZG1faHQ7CisJCWRlbHRhX29mZG0gPSAmcHJpdi0+X2Fnbi5kZWx0YV9zdGF0aXN0aWNzLnJ4Lm9mZG07CisJCWRlbHRhX2NjayA9ICZwcml2LT5fYWduLmRlbHRhX3N0YXRpc3RpY3MucnguY2NrOworCQlkZWx0YV9nZW5lcmFsID0gJnByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljcy5yeC5nZW5lcmFsOworCQlkZWx0YV9odCA9ICZwcml2LT5fYWduLmRlbHRhX3N0YXRpc3RpY3Mucngub2ZkbV9odDsKKwkJbWF4X29mZG0gPSAmcHJpdi0+X2Fnbi5tYXhfZGVsdGEucngub2ZkbTsKKwkJbWF4X2NjayA9ICZwcml2LT5fYWduLm1heF9kZWx0YS5yeC5jY2s7CisJCW1heF9nZW5lcmFsID0gJnByaXYtPl9hZ24ubWF4X2RlbHRhLnJ4LmdlbmVyYWw7CisJCW1heF9odCA9ICZwcml2LT5fYWduLm1heF9kZWx0YS5yeC5vZmRtX2h0OworCX0KIAotCXBvcyArPSBpd2xfZGJnZnNfc3RhdGlzdGljc19mbGFnKHByaXYsIGJ1ZiwgYnVmc3opOworCXBvcyArPSBpd2xfc3RhdGlzdGljc19mbGFnKHByaXYsIGJ1ZiwgYnVmc3opOwogCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiUtMzJzICAgICBjdXJyZW50IgogCQkJICJhY3VtdWxhdGl2ZSAgICAgICBkZWx0YSAgICAgICAgIG1heFxuIiwKIAkJCSAiU3RhdGlzdGljc19SeCAtIE9GRE06Iik7CkBAIC01MzksMTEgKzU4NCwxOSBAQAogCSAgKiB0aGUgbGFzdCBzdGF0aXN0aWNzIG5vdGlmaWNhdGlvbiBmcm9tIHVDb2RlCiAJICAqIG1pZ2h0IG5vdCByZWZsZWN0IHRoZSBjdXJyZW50IHVDb2RlIGFjdGl2aXR5CiAJICAqLwotCXR4ID0gJnByaXYtPnN0YXRpc3RpY3MudHg7Ci0JYWNjdW1fdHggPSAmcHJpdi0+YWNjdW1fc3RhdGlzdGljcy50eDsKLQlkZWx0YV90eCA9ICZwcml2LT5kZWx0YV9zdGF0aXN0aWNzLnR4OwotCW1heF90eCA9ICZwcml2LT5tYXhfZGVsdGEudHg7Ci0JcG9zICs9IGl3bF9kYmdmc19zdGF0aXN0aWNzX2ZsYWcocHJpdiwgYnVmLCBidWZzeik7CisJaWYgKHByaXYtPmNmZy0+YnRfc3RhdGlzdGljcykgeworCQl0eCA9ICZwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQudHg7CisJCWFjY3VtX3R4ID0gJnByaXYtPl9hZ24uYWNjdW1fc3RhdGlzdGljc19idC50eDsKKwkJZGVsdGFfdHggPSAmcHJpdi0+X2Fnbi5kZWx0YV9zdGF0aXN0aWNzX2J0LnR4OworCQltYXhfdHggPSAmcHJpdi0+X2Fnbi5tYXhfZGVsdGFfYnQudHg7CisJfSBlbHNlIHsKKwkJdHggPSAmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzLnR4OworCQlhY2N1bV90eCA9ICZwcml2LT5fYWduLmFjY3VtX3N0YXRpc3RpY3MudHg7CisJCWRlbHRhX3R4ID0gJnByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljcy50eDsKKwkJbWF4X3R4ID0gJnByaXYtPl9hZ24ubWF4X2RlbHRhLnR4OworCX0KKworCXBvcyArPSBpd2xfc3RhdGlzdGljc19mbGFnKHByaXYsIGJ1ZiwgYnVmc3opOwogCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgICIlLTMycyAgICAgY3VycmVudCIKIAkJCSAiYWN1bXVsYXRpdmUgICAgICAgZGVsdGEgICAgICAgICBtYXhcbiIsCiAJCQkgIlN0YXRpc3RpY3NfVHg6Iik7CkBAIC03MzgsOCArNzkxLDggQEAKIAljaGFyICpidWY7CiAJaW50IGJ1ZnN6ID0gc2l6ZW9mKHN0cnVjdCBzdGF0aXN0aWNzX2dlbmVyYWwpICogMTAgKyAzMDA7CiAJc3NpemVfdCByZXQ7Ci0Jc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbCAqZ2VuZXJhbCwgKmFjY3VtX2dlbmVyYWw7Ci0Jc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbCAqZGVsdGFfZ2VuZXJhbCwgKm1heF9nZW5lcmFsOworCXN0cnVjdCBzdGF0aXN0aWNzX2dlbmVyYWxfY29tbW9uICpnZW5lcmFsLCAqYWNjdW1fZ2VuZXJhbDsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19nZW5lcmFsX2NvbW1vbiAqZGVsdGFfZ2VuZXJhbCwgKm1heF9nZW5lcmFsOwogCXN0cnVjdCBzdGF0aXN0aWNzX2RiZyAqZGJnLCAqYWNjdW1fZGJnLCAqZGVsdGFfZGJnLCAqbWF4X2RiZzsKIAlzdHJ1Y3Qgc3RhdGlzdGljc19kaXYgKmRpdiwgKmFjY3VtX2RpdiwgKmRlbHRhX2RpdiwgKm1heF9kaXY7CiAKQEAgLTc1NiwxOSArODA5LDM1IEBACiAJICAqIHRoZSBsYXN0IHN0YXRpc3RpY3Mgbm90aWZpY2F0aW9uIGZyb20gdUNvZGUKIAkgICogbWlnaHQgbm90IHJlZmxlY3QgdGhlIGN1cnJlbnQgdUNvZGUgYWN0aXZpdHkKIAkgICovCi0JZ2VuZXJhbCA9ICZwcml2LT5zdGF0aXN0aWNzLmdlbmVyYWw7Ci0JZGJnID0gJnByaXYtPnN0YXRpc3RpY3MuZ2VuZXJhbC5kYmc7Ci0JZGl2ID0gJnByaXYtPnN0YXRpc3RpY3MuZ2VuZXJhbC5kaXY7Ci0JYWNjdW1fZ2VuZXJhbCA9ICZwcml2LT5hY2N1bV9zdGF0aXN0aWNzLmdlbmVyYWw7Ci0JZGVsdGFfZ2VuZXJhbCA9ICZwcml2LT5kZWx0YV9zdGF0aXN0aWNzLmdlbmVyYWw7Ci0JbWF4X2dlbmVyYWwgPSAmcHJpdi0+bWF4X2RlbHRhLmdlbmVyYWw7Ci0JYWNjdW1fZGJnID0gJnByaXYtPmFjY3VtX3N0YXRpc3RpY3MuZ2VuZXJhbC5kYmc7Ci0JZGVsdGFfZGJnID0gJnByaXYtPmRlbHRhX3N0YXRpc3RpY3MuZ2VuZXJhbC5kYmc7Ci0JbWF4X2RiZyA9ICZwcml2LT5tYXhfZGVsdGEuZ2VuZXJhbC5kYmc7Ci0JYWNjdW1fZGl2ID0gJnByaXYtPmFjY3VtX3N0YXRpc3RpY3MuZ2VuZXJhbC5kaXY7Ci0JZGVsdGFfZGl2ID0gJnByaXYtPmRlbHRhX3N0YXRpc3RpY3MuZ2VuZXJhbC5kaXY7Ci0JbWF4X2RpdiA9ICZwcml2LT5tYXhfZGVsdGEuZ2VuZXJhbC5kaXY7Ci0JcG9zICs9IGl3bF9kYmdmc19zdGF0aXN0aWNzX2ZsYWcocHJpdiwgYnVmLCBidWZzeik7CisJaWYgKHByaXYtPmNmZy0+YnRfc3RhdGlzdGljcykgeworCQlnZW5lcmFsID0gJnByaXYtPl9hZ24uc3RhdGlzdGljc19idC5nZW5lcmFsLmNvbW1vbjsKKwkJZGJnID0gJnByaXYtPl9hZ24uc3RhdGlzdGljc19idC5nZW5lcmFsLmNvbW1vbi5kYmc7CisJCWRpdiA9ICZwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQuZ2VuZXJhbC5jb21tb24uZGl2OworCQlhY2N1bV9nZW5lcmFsID0gJnByaXYtPl9hZ24uYWNjdW1fc3RhdGlzdGljc19idC5nZW5lcmFsLmNvbW1vbjsKKwkJYWNjdW1fZGJnID0gJnByaXYtPl9hZ24uYWNjdW1fc3RhdGlzdGljc19idC5nZW5lcmFsLmNvbW1vbi5kYmc7CisJCWFjY3VtX2RpdiA9ICZwcml2LT5fYWduLmFjY3VtX3N0YXRpc3RpY3NfYnQuZ2VuZXJhbC5jb21tb24uZGl2OworCQlkZWx0YV9nZW5lcmFsID0gJnByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljc19idC5nZW5lcmFsLmNvbW1vbjsKKwkJbWF4X2dlbmVyYWwgPSAmcHJpdi0+X2Fnbi5tYXhfZGVsdGFfYnQuZ2VuZXJhbC5jb21tb247CisJCWRlbHRhX2RiZyA9ICZwcml2LT5fYWduLmRlbHRhX3N0YXRpc3RpY3NfYnQuZ2VuZXJhbC5jb21tb24uZGJnOworCQltYXhfZGJnID0gJnByaXYtPl9hZ24ubWF4X2RlbHRhX2J0LmdlbmVyYWwuY29tbW9uLmRiZzsKKwkJZGVsdGFfZGl2ID0gJnByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljc19idC5nZW5lcmFsLmNvbW1vbi5kaXY7CisJCW1heF9kaXYgPSAmcHJpdi0+X2Fnbi5tYXhfZGVsdGFfYnQuZ2VuZXJhbC5jb21tb24uZGl2OworCX0gZWxzZSB7CisJCWdlbmVyYWwgPSAmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzLmdlbmVyYWwuY29tbW9uOworCQlkYmcgPSAmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzLmdlbmVyYWwuY29tbW9uLmRiZzsKKwkJZGl2ID0gJnByaXYtPl9hZ24uc3RhdGlzdGljcy5nZW5lcmFsLmNvbW1vbi5kaXY7CisJCWFjY3VtX2dlbmVyYWwgPSAmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzLmdlbmVyYWwuY29tbW9uOworCQlhY2N1bV9kYmcgPSAmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzLmdlbmVyYWwuY29tbW9uLmRiZzsKKwkJYWNjdW1fZGl2ID0gJnByaXYtPl9hZ24uYWNjdW1fc3RhdGlzdGljcy5nZW5lcmFsLmNvbW1vbi5kaXY7CisJCWRlbHRhX2dlbmVyYWwgPSAmcHJpdi0+X2Fnbi5kZWx0YV9zdGF0aXN0aWNzLmdlbmVyYWwuY29tbW9uOworCQltYXhfZ2VuZXJhbCA9ICZwcml2LT5fYWduLm1heF9kZWx0YS5nZW5lcmFsLmNvbW1vbjsKKwkJZGVsdGFfZGJnID0gJnByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljcy5nZW5lcmFsLmNvbW1vbi5kYmc7CisJCW1heF9kYmcgPSAmcHJpdi0+X2Fnbi5tYXhfZGVsdGEuZ2VuZXJhbC5jb21tb24uZGJnOworCQlkZWx0YV9kaXYgPSAmcHJpdi0+X2Fnbi5kZWx0YV9zdGF0aXN0aWNzLmdlbmVyYWwuY29tbW9uLmRpdjsKKwkJbWF4X2RpdiA9ICZwcml2LT5fYWduLm1heF9kZWx0YS5nZW5lcmFsLmNvbW1vbi5kaXY7CisJfQorCisJcG9zICs9IGl3bF9zdGF0aXN0aWNzX2ZsYWcocHJpdiwgYnVmLCBidWZzeik7CiAJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJS0zMnMgICAgIGN1cnJlbnQiCiAJCQkgImFjdW11bGF0aXZlICAgICAgIGRlbHRhICAgICAgICAgbWF4XG4iLAogCQkJICJTdGF0aXN0aWNzX0dlbmVyYWw6Iik7CkBAIC03OTIsNiArODYxLDEzIEBACiAJCQkgZGVsdGFfZGJnLT5idXJzdF9jb3VudCwgbWF4X2RiZy0+YnVyc3RfY291bnQpOwogCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKIAkJCSAiICAlLTMwcyAlMTB1ICAlMTB1ICAlMTB1ICAlMTB1XG4iLAorCQkJICJ3YWl0X2Zvcl9zaWxlbmNlX3RpbWVvdXRfY291bnQ6IiwKKwkJCSBsZTMyX3RvX2NwdShkYmctPndhaXRfZm9yX3NpbGVuY2VfdGltZW91dF9jbnQpLAorCQkJIGFjY3VtX2RiZy0+d2FpdF9mb3Jfc2lsZW5jZV90aW1lb3V0X2NudCwKKwkJCSBkZWx0YV9kYmctPndhaXRfZm9yX3NpbGVuY2VfdGltZW91dF9jbnQsCisJCQkgbWF4X2RiZy0+d2FpdF9mb3Jfc2lsZW5jZV90aW1lb3V0X2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJICIgICUtMzBzICUxMHUgICUxMHUgICUxMHUgICUxMHVcbiIsCiAJCQkgInNsZWVwX3RpbWU6IiwKIAkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5zbGVlcF90aW1lKSwKIAkJCSBhY2N1bV9nZW5lcmFsLT5zbGVlcF90aW1lLApAQCAtODQ4LDMgKzkyNCw5MCBAQAogCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIHJldDsKIH0KKworc3NpemVfdCBpd2xfdWNvZGVfYnRfc3RhdHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcG9zID0gMDsKKwljaGFyICpidWY7CisJaW50IGJ1ZnN6ID0gKHNpemVvZihzdHJ1Y3Qgc3RhdGlzdGljc19idF9hY3Rpdml0eSkgKiAyNCkgKyAyMDA7CisJc3NpemVfdCByZXQ7CisJc3RydWN0IHN0YXRpc3RpY3NfYnRfYWN0aXZpdHkgKmJ0LCAqYWNjdW1fYnQ7CisKKwlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwkvKiBtYWtlIHJlcXVlc3QgdG8gdUNvZGUgdG8gcmV0cmlldmUgc3RhdGlzdGljcyBpbmZvcm1hdGlvbiAqLworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwlyZXQgPSBpd2xfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3QocHJpdiwgQ01EX1NZTkMsIGZhbHNlKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKworCWlmIChyZXQpIHsKKwkJSVdMX0VSUihwcml2LAorCQkJIkVycm9yIHNlbmRpbmcgc3RhdGlzdGljcyByZXF1ZXN0OiAlemRcbiIsIHJldCk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKwlidWYgPSBremFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQlJV0xfRVJSKHByaXYsICJDYW4gbm90IGFsbG9jYXRlIEJ1ZmZlclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qCisJICogdGhlIHN0YXRpc3RpYyBpbmZvcm1hdGlvbiBkaXNwbGF5IGhlcmUgaXMgYmFzZWQgb24KKwkgKiB0aGUgbGFzdCBzdGF0aXN0aWNzIG5vdGlmaWNhdGlvbiBmcm9tIHVDb2RlCisJICogbWlnaHQgbm90IHJlZmxlY3QgdGhlIGN1cnJlbnQgdUNvZGUgYWN0aXZpdHkKKwkgKi8KKwlidCA9ICZwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQuZ2VuZXJhbC5hY3Rpdml0eTsKKwlhY2N1bV9idCA9ICZwcml2LT5fYWduLmFjY3VtX3N0YXRpc3RpY3NfYnQuZ2VuZXJhbC5hY3Rpdml0eTsKKworCXBvcyArPSBpd2xfc3RhdGlzdGljc19mbGFnKHByaXYsIGJ1ZiwgYnVmc3opOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlN0YXRpc3RpY3NfQlQ6XG4iKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkiXHRcdFx0Y3VycmVudFx0XHRcdGFjY3VtdWxhdGl2ZVxuIik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJICJoaV9wcmlvcml0eV90eF9yZXFfY250Olx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGJ0LT5oaV9wcmlvcml0eV90eF9yZXFfY250KSwKKwkJCSBhY2N1bV9idC0+aGlfcHJpb3JpdHlfdHhfcmVxX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJICJoaV9wcmlvcml0eV90eF9kZW5pZWRfY250Olx0JXVcdFx0XHQldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShidC0+aGlfcHJpb3JpdHlfdHhfZGVuaWVkX2NudCksCisJCQkgYWNjdW1fYnQtPmhpX3ByaW9yaXR5X3R4X2RlbmllZF9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSAibG9fcHJpb3JpdHlfdHhfcmVxX2NudDpcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShidC0+bG9fcHJpb3JpdHlfdHhfcmVxX2NudCksCisJCQkgYWNjdW1fYnQtPmxvX3ByaW9yaXR5X3R4X3JlcV9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSAibG9fcHJpb3JpdHlfcnhfZGVuaWVkX2NudDpcdCV1XHRcdFx0JXVcbiIsCisJCQkgbGUzMl90b19jcHUoYnQtPmxvX3ByaW9yaXR5X3R4X2RlbmllZF9jbnQpLAorCQkJIGFjY3VtX2J0LT5sb19wcmlvcml0eV90eF9kZW5pZWRfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgImhpX3ByaW9yaXR5X3J4X3JlcV9jbnQ6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgbGUzMl90b19jcHUoYnQtPmhpX3ByaW9yaXR5X3J4X3JlcV9jbnQpLAorCQkJIGFjY3VtX2J0LT5oaV9wcmlvcml0eV9yeF9yZXFfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgImhpX3ByaW9yaXR5X3J4X2RlbmllZF9jbnQ6XHQldVx0XHRcdCV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGJ0LT5oaV9wcmlvcml0eV9yeF9kZW5pZWRfY250KSwKKwkJCSBhY2N1bV9idC0+aGlfcHJpb3JpdHlfcnhfZGVuaWVkX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJICJsb19wcmlvcml0eV9yeF9yZXFfY250Olx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGJ0LT5sb19wcmlvcml0eV9yeF9yZXFfY250KSwKKwkJCSBhY2N1bV9idC0+bG9fcHJpb3JpdHlfcnhfcmVxX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJICJsb19wcmlvcml0eV9yeF9kZW5pZWRfY250Olx0JXVcdFx0XHQldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShidC0+bG9fcHJpb3JpdHlfcnhfZGVuaWVkX2NudCksCisJCQkgYWNjdW1fYnQtPmxvX3ByaW9yaXR5X3J4X2RlbmllZF9jbnQpOworCisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJICIocngpbnVtX2J0X2tpbGxzOlx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KHByaXYtPl9hZ24uc3RhdGlzdGljc19idC5yeC4KKwkJCQlnZW5lcmFsLm51bV9idF9raWxscyksCisJCQkgcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzX2J0LnJ4LgorCQkJCWdlbmVyYWwubnVtX2J0X2tpbGxzKTsKKworCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1kZWJ1Z2ZzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tZGVidWdmcy5oCmluZGV4IDU5YjFmMjUuLmJiZGNlNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1kZWJ1Z2ZzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWRlYnVnZnMuaApAQCAtMzcsNiArMzcsOCBAQAogCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKTsKIHNzaXplX3QgaXdsX3Vjb2RlX2dlbmVyYWxfc3RhdHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAogCQkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOworc3NpemVfdCBpd2xfdWNvZGVfYnRfc3RhdHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKTsKICNlbHNlCiBzdGF0aWMgc3NpemVfdCBpd2xfdWNvZGVfcnhfc3RhdHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAogCQkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKQEAgLTUzLDQgKzU1LDkgQEAKIHsKIAlyZXR1cm4gMDsKIH0KK3N0YXRpYyBzc2l6ZV90IGl3bF91Y29kZV9idF9zdGF0c19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXJldHVybiAwOworfQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taGNtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWhjbWQuYwppbmRleCAwMTY1OGNmLi5hNzIxNmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taGNtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1oY21kLmMKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJpd2wtaW8uaCIKICNpbmNsdWRlICJpd2wtYWduLmgiCiAKLXN0YXRpYyBpbnQgaXdsYWduX3NlbmRfcnhvbl9hc3NvYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitpbnQgaXdsYWduX3NlbmRfcnhvbl9hc3NvYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGl3bDUwMDBfcnhvbl9hc3NvY19jbWQgcnhvbl9hc3NvYzsKQEAgLTg0LDcgKzg0LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGl3bGFnbl9zZW5kX3R4X2FudF9jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCB2YWxpZF90eF9hbnQpCitpbnQgaXdsYWduX3NlbmRfdHhfYW50X2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IHZhbGlkX3R4X2FudCkKIHsKIAlzdHJ1Y3QgaXdsX3R4X2FudF9jb25maWdfY21kIHR4X2FudF9jbWQgPSB7CiAJICAudmFsaWQgPSBjcHVfdG9fbGUzMih2YWxpZF90eF9hbnQpLApAQCAtMTY0LDcgKzE2NCw3IEBACiAKIAkJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKIAotCQljbWQuaGRyLm9wX2NvZGUgPSBJV0xfUEhZX0NBTElCUkFURV9DSEFJTl9OT0lTRV9HQUlOX0NNRDsKKwkJY21kLmhkci5vcF9jb2RlID0gcHJpdi0+X2Fnbi5waHlfY2FsaWJfY2hhaW5fbm9pc2VfZ2Fpbl9jbWQ7CiAJCWNtZC5oZHIuZmlyc3RfZ3JvdXAgPSAwOwogCQljbWQuaGRyLmdyb3Vwc19udW0gPSAxOwogCQljbWQuaGRyLmRhdGFfdmFsaWQgPSAxOwpAQCAtMTc2LDE0ICsxNzYsNiBAQAogCQlkYXRhLT5yYWRpb193cml0ZSA9IDE7CiAJCWRhdGEtPnN0YXRlID0gSVdMX0NIQUlOX05PSVNFX0NBTElCUkFURUQ7CiAJfQotCi0JZGF0YS0+Y2hhaW5fbm9pc2VfYSA9IDA7Ci0JZGF0YS0+Y2hhaW5fbm9pc2VfYiA9IDA7Ci0JZGF0YS0+Y2hhaW5fbm9pc2VfYyA9IDA7Ci0JZGF0YS0+Y2hhaW5fc2lnbmFsX2EgPSAwOwotCWRhdGEtPmNoYWluX3NpZ25hbF9iID0gMDsKLQlkYXRhLT5jaGFpbl9zaWduYWxfYyA9IDA7Ci0JZGF0YS0+YmVhY29uX2NvdW50ID0gMDsKIH0KIAogc3RhdGljIHZvaWQgaXdsYWduX2NoYWluX25vaXNlX3Jlc2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKQEAgLTE5MSwxMSArMTgzLDIxIEBACiAJc3RydWN0IGl3bF9jaGFpbl9ub2lzZV9kYXRhICpkYXRhID0gJnByaXYtPmNoYWluX25vaXNlX2RhdGE7CiAJaW50IHJldDsKIAotCWlmICgoZGF0YS0+c3RhdGUgPT0gSVdMX0NIQUlOX05PSVNFX0FMSVZFKSAmJiBpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkgeworCWlmICgoZGF0YS0+c3RhdGUgPT0gSVdMX0NIQUlOX05PSVNFX0FMSVZFKSAmJgorCSAgICAgaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKIAkJc3RydWN0IGl3bF9jYWxpYl9jaGFpbl9ub2lzZV9yZXNldF9jbWQgY21kOwotCQltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwogCi0JCWNtZC5oZHIub3BfY29kZSA9IElXTF9QSFlfQ0FMSUJSQVRFX0NIQUlOX05PSVNFX1JFU0VUX0NNRDsKKwkJLyogY2xlYXIgZGF0YSBmb3IgY2hhaW4gbm9pc2UgY2FsaWJyYXRpb24gYWxnb3JpdGhtICovCisJCWRhdGEtPmNoYWluX25vaXNlX2EgPSAwOworCQlkYXRhLT5jaGFpbl9ub2lzZV9iID0gMDsKKwkJZGF0YS0+Y2hhaW5fbm9pc2VfYyA9IDA7CisJCWRhdGEtPmNoYWluX3NpZ25hbF9hID0gMDsKKwkJZGF0YS0+Y2hhaW5fc2lnbmFsX2IgPSAwOworCQlkYXRhLT5jaGFpbl9zaWduYWxfYyA9IDA7CisJCWRhdGEtPmJlYWNvbl9jb3VudCA9IDA7CisKKwkJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwkJY21kLmhkci5vcF9jb2RlID0gcHJpdi0+X2Fnbi5waHlfY2FsaWJfY2hhaW5fbm9pc2VfcmVzZXRfY21kOwogCQljbWQuaGRyLmZpcnN0X2dyb3VwID0gMDsKIAkJY21kLmhkci5ncm91cHNfbnVtID0gMTsKIAkJY21kLmhkci5kYXRhX3ZhbGlkID0gMTsKQEAgLTIxMiw3ICsyMTQsNyBAQAogc3RhdGljIHZvaWQgaXdsYWduX3J0c190eF9jbWRfZmxhZyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCiAJCQlfX2xlMzIgKnR4X2ZsYWdzKQogewotCSp0eF9mbGFncyB8PSBUWF9DTURfRkxHX1JUU19DVFNfTVNLOworCSp0eF9mbGFncyB8PSBUWF9DTURfRkxHX1BST1RfUkVRVUlSRV9NU0s7CiB9CiAKIC8qIENhbGMgbWF4IHNpZ25hbCBsZXZlbCAoZEJtKSBhbW9uZyAzIHBvc3NpYmxlIHJlY2VpdmVycyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWh3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taHcuaAppbmRleCBmOWEzZmJiLi5hNTJiODJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taHcuaApAQCAtMTEyLDcgKzExMiw3IEBACiAgKi8KIHN0cnVjdCBpd2xhZ25fc2NkX2JjX3RibCB7CiAJX19sZTE2IHRmZF9vZmZzZXRbVEZEX1FVRVVFX0JDX1NJWkVdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAKICNlbmRpZiAvKiBfX2l3bF9hZ25faHdfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tbGliLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tbGliLmMKaW5kZXggMGYyOTJhMi4uYTFiNmQyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWxpYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1saWIuYwpAQCAtNzcsNyArNzcsNyBAQAogCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkZyYW1lQ250ID0gJWQsIFN0YXJ0SWR4PSVkIGlkeD0lZFxuIiwKIAkJCQkgICBhZ2ctPmZyYW1lX2NvdW50LCBhZ2ctPnN0YXJ0X2lkeCwgaWR4KTsKIAotCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihwcml2LT50eHFbdHhxX2lkXS50eGJbaWR4XS5za2JbMF0pOworCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihwcml2LT50eHFbdHhxX2lkXS50eGJbaWR4XS5za2IpOwogCQlpbmZvLT5zdGF0dXMucmF0ZXNbMF0uY291bnQgPSB0eF9yZXNwLT5mYWlsdXJlX2ZyYW1lICsgMTsKIAkJaW5mby0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9UWF9DVExfQU1QRFU7CiAJCWluZm8tPmZsYWdzIHw9IGl3bF90eF9zdGF0dXNfdG9fbWFjODAyMTEoc3RhdHVzKTsKQEAgLTkzLDYgKzkzLDEyIEBACiAJfSBlbHNlIHsKIAkJLyogVHdvIG9yIG1vcmUgZnJhbWVzIHdlcmUgYXR0ZW1wdGVkOyBleHBlY3QgYmxvY2stYWNrICovCiAJCXU2NCBiaXRtYXAgPSAwOworCisJCS8qCisJCSAqIFN0YXJ0IGlzIHRoZSBsb3dlc3QgZnJhbWUgc2VudC4gSXQgbWF5IG5vdCBiZSB0aGUgZmlyc3QKKwkJICogZnJhbWUgaW4gdGhlIGJhdGNoOyB3ZSBmaWd1cmUgdGhpcyBvdXQgZHluYW1pY2FsbHkgZHVyaW5nCisJCSAqIHRoZSBmb2xsb3dpbmcgbG9vcC4KKwkJICovCiAJCWludCBzdGFydCA9IGFnZy0+c3RhcnRfaWR4OwogCiAJCS8qIENvbnN0cnVjdCBiaXQtbWFwIG9mIHBlbmRpbmcgZnJhbWVzIHdpdGhpbiBUeCB3aW5kb3cgKi8KQEAgLTEzMSwyNSArMTM3LDU4IEBACiAJCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkFHRyBGcmFtZSBpPSVkIGlkeCAlZCBzZXE9JWRcbiIsCiAJCQkJCSAgIGksIGlkeCwgU0VRX1RPX1NOKHNjKSk7CiAKKwkJCS8qCisJCQkgKiBzaCAtPiBob3cgbWFueSBmcmFtZXMgYWhlYWQgb2YgdGhlIHN0YXJ0aW5nIGZyYW1lIGlzCisJCQkgKiB0aGUgY3VycmVudCBvbmU/CisJCQkgKgorCQkJICogTm90ZSB0aGF0IGFsbCBmcmFtZXMgc2VudCBpbiB0aGUgYmF0Y2ggbXVzdCBiZSBpbiBhCisJCQkgKiA2NC1mcmFtZSB3aW5kb3csIHNvIHRoaXMgbnVtYmVyIHNob3VsZCBiZSBpbiBbMCw2M10uCisJCQkgKiBJZiBvdXRzaWRlIG9mIHRoaXMgd2luZG93LCB0aGVuIHdlJ3ZlIGZvdW5kIGEgbmV3CisJCQkgKiAiZmlyc3QiIGZyYW1lIGluIHRoZSBiYXRjaCBhbmQgbmVlZCB0byBjaGFuZ2Ugc3RhcnQuCisJCQkgKi8KIAkJCXNoID0gaWR4IC0gc3RhcnQ7Ci0JCQlpZiAoc2ggPiA2NCkgewotCQkJCXNoID0gKHN0YXJ0IC0gaWR4KSArIDB4ZmY7CisKKwkJCS8qCisJCQkgKiBJZiA+PSA2NCwgb3V0IG9mIHdpbmRvdy4gc3RhcnQgbXVzdCBiZSBhdCB0aGUgZnJvbnQKKwkJCSAqIG9mIHRoZSBjaXJjdWxhciBidWZmZXIsIGlkeCBtdXN0IGJlIG5lYXIgdGhlIGVuZCBvZgorCQkJICogdGhlIGJ1ZmZlciwgYW5kIGlkeCBpcyB0aGUgbmV3ICJmaXJzdCIgZnJhbWUuIFNoaWZ0CisJCQkgKiB0aGUgaW5kaWNlcyBhcm91bmQuCisJCQkgKi8KKwkJCWlmIChzaCA+PSA2NCkgeworCQkJCS8qIFNoaWZ0IGJpdG1hcCBieSBzdGFydCAtIGlkeCwgd3JhcHBlZCAqLworCQkJCXNoID0gMHgxMDAgLSBpZHggKyBzdGFydDsKIAkJCQliaXRtYXAgPSBiaXRtYXAgPDwgc2g7CisJCQkJLyogTm93IGlkeCBpcyB0aGUgbmV3IHN0YXJ0IHNvIHNoID0gMCAqLwogCQkJCXNoID0gMDsKIAkJCQlzdGFydCA9IGlkeDsKLQkJCX0gZWxzZSBpZiAoc2ggPCAtNjQpCi0JCQkJc2ggID0gMHhmZiAtIChzdGFydCAtIGlkeCk7Ci0JCQllbHNlIGlmIChzaCA8IDApIHsKKwkJCS8qCisJCQkgKiBJZiA8PSAtNjQgdGhlbiB3cmFwcyB0aGUgMjU2LXBrdCBjaXJjdWxhciBidWZmZXIKKwkJCSAqIChlLmcuLCBzdGFydCA9IDI1NSBhbmQgaWR4ID0gMCwgc2ggc2hvdWxkIGJlIDEpCisJCQkgKi8KKwkJCX0gZWxzZSBpZiAoc2ggPD0gLTY0KSB7CisJCQkJc2ggID0gMHgxMDAgLSBzdGFydCArIGlkeDsKKwkJCS8qCisJCQkgKiBJZiA8IDAgYnV0ID4gLTY0LCBvdXQgb2Ygd2luZG93LiBpZHggaXMgYmVmb3JlIHN0YXJ0CisJCQkgKiBidXQgbm90IHdyYXBwZWQuIFNoaWZ0IHRoZSBpbmRpY2VzIGFyb3VuZC4KKwkJCSAqLworCQkJfSBlbHNlIGlmIChzaCA8IDApIHsKKwkJCQkvKiBTaGlmdCBieSBob3cgZmFyIHN0YXJ0IGlzIGFoZWFkIG9mIGlkeCAqLwogCQkJCXNoID0gc3RhcnQgLSBpZHg7Ci0JCQkJc3RhcnQgPSBpZHg7CiAJCQkJYml0bWFwID0gYml0bWFwIDw8IHNoOworCQkJCS8qIE5vdyBpZHggaXMgdGhlIG5ldyBzdGFydCBzbyBzaCA9IDAgKi8KKwkJCQlzdGFydCA9IGlkeDsKIAkJCQlzaCA9IDA7CiAJCQl9CisJCQkvKiBTZXF1ZW5jZSBudW1iZXIgc3RhcnQgKyBzaCB3YXMgc2VudCBpbiB0aGlzIGJhdGNoICovCiAJCQliaXRtYXAgfD0gMVVMTCA8PCBzaDsKIAkJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAic3RhcnQ9JWQgYml0bWFwPTB4JWxseFxuIiwKIAkJCQkJICAgc3RhcnQsICh1bnNpZ25lZCBsb25nIGxvbmcpYml0bWFwKTsKIAkJfQogCisJCS8qCisJCSAqIFN0b3JlIHRoZSBiaXRtYXAgYW5kIHBvc3NpYmx5IHRoZSBuZXcgc3RhcnQsIGlmIHdlIHdyYXBwZWQKKwkJICogdGhlIGJ1ZmZlciBhYm92ZQorCQkgKi8KIAkJYWdnLT5iaXRtYXAgPSBiaXRtYXA7CiAJCWFnZy0+c3RhcnRfaWR4ID0gc3RhcnQ7CiAJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiRnJhbWVzICVkIHN0YXJ0X2lkeD0lZCBiaXRtYXA9MHglbGx4XG4iLApAQCAtMTY2LDcgKzIwNSw5IEBACiAJCQkgICAgdTggZnJhbWVfY291bnQsIHUzMiBzdGF0dXMpCiB7CiAJaWYgKGZyYW1lX2NvdW50ID09IDEgJiYgc3RhdHVzID09IFRYX1NUQVRVU19GQUlMX1JGS0lMTF9GTFVTSCkgewotCQlJV0xfRVJSKHByaXYsICJUT0RPOiBJbXBsZW1lbnQgVHggZmx1c2ggY29tbWFuZCEhIVxuIik7CisJCUlXTF9FUlIocHJpdiwgIlR4IGZsdXNoIGNvbW1hbmQgdG8gZmx1c2ggb3V0IGFsbCBmcmFtZXNcbiIpOworCQlpZiAoIXRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQorCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT50eF9mbHVzaCk7CiAJfQogfQogCkBAIC0xODQsNiArMjI1LDcgQEAKIAlpbnQgdGlkOwogCWludCBzdGFfaWQ7CiAJaW50IGZyZWVkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoKGluZGV4ID49IHR4cS0+cS5uX2JkKSB8fCAoaXdsX3F1ZXVlX3VzZWQoJnR4cS0+cSwgaW5kZXgpID09IDApKSB7CiAJCUlXTF9FUlIocHJpdiwgIlJlYWQgaW5kZXggZm9yIERNQSBxdWV1ZSB0eHFfaWQgKCVkKSBpbmRleCAlZCAiCkBAIC0xOTMsMTUgKzIzNSwxNiBAQAogCQlyZXR1cm47CiAJfQogCi0JaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXS5za2JbMF0pOworCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4cS0+dHhiW3R4cS0+cS5yZWFkX3B0cl0uc2tiKTsKIAltZW1zZXQoJmluZm8tPnN0YXR1cywgMCwgc2l6ZW9mKGluZm8tPnN0YXR1cykpOwogCiAJdGlkID0gKHR4X3Jlc3AtPnJhX3RpZCAmIElXTDUwX1RYX1JFU19USURfTVNLKSA+PiBJV0w1MF9UWF9SRVNfVElEX1BPUzsKIAlzdGFfaWQgPSAodHhfcmVzcC0+cmFfdGlkICYgSVdMNTBfVFhfUkVTX1JBX01TSykgPj4gSVdMNTBfVFhfUkVTX1JBX1BPUzsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCWlmICh0eHEtPnNjaGVkX3JldHJ5KSB7CiAJCWNvbnN0IHUzMiBzY2Rfc3NuID0gaXdsYWduX2dldF9zY2Rfc3NuKHR4X3Jlc3ApOwotCQlzdHJ1Y3QgaXdsX2h0X2FnZyAqYWdnID0gTlVMTDsKKwkJc3RydWN0IGl3bF9odF9hZ2cgKmFnZzsKIAogCQlhZ2cgPSAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2c7CiAKQEAgLTI1Niw2ICsyOTksNyBAQAogCWl3bGFnbl90eHFfY2hlY2tfZW1wdHkocHJpdiwgc3RhX2lkLCB0aWQsIHR4cV9pZCk7CiAKIAlpd2xfY2hlY2tfYWJvcnRfc3RhdHVzKHByaXYsIHR4X3Jlc3AtPmZyYW1lX2NvdW50LCBzdGF0dXMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiB9CiAKIHZvaWQgaXdsYWduX3J4X2hhbmRsZXJfc2V0dXAoc3RydWN0IGl3bF9wcml2ICpwcml2KQpAQCAtMzE5LDcgKzM2Myw4IEBACiB2b2lkIGl3bGFnbl90ZW1wZXJhdHVyZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJLyogc3RvcmUgdGVtcGVyYXR1cmUgZnJvbSBzdGF0aXN0aWNzIChpbiBDZWxzaXVzKSAqLwotCXByaXYtPnRlbXBlcmF0dXJlID0gbGUzMl90b19jcHUocHJpdi0+c3RhdGlzdGljcy5nZW5lcmFsLnRlbXBlcmF0dXJlKTsKKwlwcml2LT50ZW1wZXJhdHVyZSA9CisJCWxlMzJfdG9fY3B1KHByaXYtPl9hZ24uc3RhdGlzdGljcy5nZW5lcmFsLmNvbW1vbi50ZW1wZXJhdHVyZSk7CiAJaXdsX3R0X2hhbmRsZXIocHJpdik7CiB9CiAKQEAgLTQ0NCw3ICs0ODksNyBAQAogCiAJLyogVGVsbCBkZXZpY2Ugd2hlcmUgdG8gZmluZCBSQkQgY2lyY3VsYXIgYnVmZmVyIGluIERSQU0gKi8KIAlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfUlNDU1JfQ0hOTDBfUkJEQ0JfQkFTRV9SRUcsCi0JCQkgICAodTMyKShyeHEtPmRtYV9hZGRyID4+IDgpKTsKKwkJCSAgICh1MzIpKHJ4cS0+YmRfZG1hID4+IDgpKTsKIAogCS8qIFRlbGwgZGV2aWNlIHdoZXJlIGluIERSQU0gdG8gdXBkYXRlIGl0cyBSeCBzdGF0dXMgKi8KIAlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfUlNDU1JfQ0hOTDBfU1RUU19XUFRSX1JFRywKQEAgLTcwOSw3ICs3NTQsNyBAQAogCX0KIAogCWRtYV9mcmVlX2NvaGVyZW50KCZwcml2LT5wY2lfZGV2LT5kZXYsIDQgKiBSWF9RVUVVRV9TSVpFLCByeHEtPmJkLAotCQkJICByeHEtPmRtYV9hZGRyKTsKKwkJCSAgcnhxLT5iZF9kbWEpOwogCWRtYV9mcmVlX2NvaGVyZW50KCZwcml2LT5wY2lfZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgaXdsX3JiX3N0YXR1cyksCiAJCQkgIHJ4cS0+cmJfc3R0cywgcnhxLT5yYl9zdHRzX2RtYSk7CiAJcnhxLT5iZCA9IE5VTEw7CkBAIC03NTUsMTMyICs4MDAsNiBAQAogCXJldHVybiBwcml2LT5jZmctPm9wcy0+dXRpbHMtPmNhbGNfcnNzaShwcml2LCByeF9yZXNwKTsKIH0KIAotI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi0vKioKLSAqIGl3bGFnbl9kYmdfcmVwb3J0X2ZyYW1lIC0gZHVtcCBmcmFtZSB0byBzeXNsb2cgZHVyaW5nIGRlYnVnIHNlc3Npb25zCi0gKgotICogWW91IG1heSBoYWNrIHRoaXMgZnVuY3Rpb24gdG8gc2hvdyBkaWZmZXJlbnQgYXNwZWN0cyBvZiByZWNlaXZlZCBmcmFtZXMsCi0gKiBpbmNsdWRpbmcgc2VsZWN0aXZlIGZyYW1lIGR1bXBzLgotICogZ3JvdXAxMDAgcGFyYW1ldGVyIHNlbGVjdHMgd2hldGhlciB0byBzaG93IDEgb3V0IG9mIDEwMCBnb29kIGRhdGEgZnJhbWVzLgotICogICAgQWxsIGJlYWNvbiBhbmQgcHJvYmUgcmVzcG9uc2UgZnJhbWVzIGFyZSBwcmludGVkLgotICovCi1zdGF0aWMgdm9pZCBpd2xhZ25fZGJnX3JlcG9ydF9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCSAgICAgIHN0cnVjdCBpd2xfcnhfcGh5X3JlcyAqcGh5X3JlcywgdTE2IGxlbmd0aCwKLQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhlYWRlciwgaW50IGdyb3VwMTAwKQotewotCXUzMiB0b191czsKLQl1MzIgcHJpbnRfc3VtbWFyeSA9IDA7Ci0JdTMyIHByaW50X2R1bXAgPSAwOwkvKiBzZXQgdG8gMSB0byBkdW1wIGFsbCBmcmFtZXMnIGNvbnRlbnRzICovCi0JdTMyIGh1bmRyZWQgPSAwOwotCXUzMiBkYXRhZnJhbWUgPSAwOwotCV9fbGUxNiBmYzsKLQl1MTYgc2VxX2N0bDsKLQl1MTYgY2hhbm5lbDsKLQl1MTYgcGh5X2ZsYWdzOwotCXUzMiByYXRlX25fZmxhZ3M7Ci0JdTMyIHRzZl9sb3c7Ci0JaW50IHJzc2k7Ci0KLQlpZiAobGlrZWx5KCEoaXdsX2dldF9kZWJ1Z19sZXZlbChwcml2KSAmIElXTF9ETF9SWCkpKQotCQlyZXR1cm47Ci0KLQkvKiBNQUMgaGVhZGVyICovCi0JZmMgPSBoZWFkZXItPmZyYW1lX2NvbnRyb2w7Ci0Jc2VxX2N0bCA9IGxlMTZfdG9fY3B1KGhlYWRlci0+c2VxX2N0cmwpOwotCi0JLyogbWV0YWRhdGEgKi8KLQljaGFubmVsID0gbGUxNl90b19jcHUocGh5X3Jlcy0+Y2hhbm5lbCk7Ci0JcGh5X2ZsYWdzID0gbGUxNl90b19jcHUocGh5X3Jlcy0+cGh5X2ZsYWdzKTsKLQlyYXRlX25fZmxhZ3MgPSBsZTMyX3RvX2NwdShwaHlfcmVzLT5yYXRlX25fZmxhZ3MpOwotCi0JLyogc2lnbmFsIHN0YXRpc3RpY3MgKi8KLQlyc3NpID0gaXdsYWduX2NhbGNfcnNzaShwcml2LCBwaHlfcmVzKTsKLQl0c2ZfbG93ID0gbGU2NF90b19jcHUocGh5X3Jlcy0+dGltZXN0YW1wKSAmIDB4MGZmZmZmZmZmOwotCi0JdG9fdXMgPSAhY29tcGFyZV9ldGhlcl9hZGRyKGhlYWRlci0+YWRkcjEsIHByaXYtPm1hY19hZGRyKTsKLQotCS8qIGlmIGRhdGEgZnJhbWUgaXMgdG8gdXMgYW5kIGFsbCBpcyBnb29kLAotCSAqICAgKG9wdGlvbmFsbHkpIHByaW50IHN1bW1hcnkgZm9yIG9ubHkgMSBvdXQgb2YgZXZlcnkgMTAwICovCi0JaWYgKHRvX3VzICYmIChmYyAmIH5jcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpKSA9PQotCSAgICBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GUk9NRFMgfCBJRUVFODAyMTFfRlRZUEVfREFUQSkpIHsKLQkJZGF0YWZyYW1lID0gMTsKLQkJaWYgKCFncm91cDEwMCkKLQkJCXByaW50X3N1bW1hcnkgPSAxOwkvKiBwcmludCBlYWNoIGZyYW1lICovCi0JCWVsc2UgaWYgKHByaXYtPmZyYW1lY250X3RvX3VzIDwgMTAwKSB7Ci0JCQlwcml2LT5mcmFtZWNudF90b191cysrOwotCQkJcHJpbnRfc3VtbWFyeSA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlwcml2LT5mcmFtZWNudF90b191cyA9IDA7Ci0JCQlwcmludF9zdW1tYXJ5ID0gMTsKLQkJCWh1bmRyZWQgPSAxOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogcHJpbnQgc3VtbWFyeSBmb3IgYWxsIG90aGVyIGZyYW1lcyAqLwotCQlwcmludF9zdW1tYXJ5ID0gMTsKLQl9Ci0KLQlpZiAocHJpbnRfc3VtbWFyeSkgewotCQljaGFyICp0aXRsZTsKLQkJaW50IHJhdGVfaWR4OwotCQl1MzIgYml0cmF0ZTsKLQotCQlpZiAoaHVuZHJlZCkKLQkJCXRpdGxlID0gIjEwMEZyYW1lcyI7Ci0JCWVsc2UgaWYgKGllZWU4MDIxMV9oYXNfcmV0cnkoZmMpKQotCQkJdGl0bGUgPSAiUmV0cnkiOwotCQllbHNlIGlmIChpZWVlODAyMTFfaXNfYXNzb2NfcmVzcChmYykpCi0JCQl0aXRsZSA9ICJBc2NSc3AiOwotCQllbHNlIGlmIChpZWVlODAyMTFfaXNfcmVhc3NvY19yZXNwKGZjKSkKLQkJCXRpdGxlID0gIlJhc1JzcCI7Ci0JCWVsc2UgaWYgKGllZWU4MDIxMV9pc19wcm9iZV9yZXNwKGZjKSkgewotCQkJdGl0bGUgPSAiUHJiUnNwIjsKLQkJCXByaW50X2R1bXAgPSAxOwkvKiBkdW1wIGZyYW1lIGNvbnRlbnRzICovCi0JCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihmYykpIHsKLQkJCXRpdGxlID0gIkJlYWNvbiI7Ci0JCQlwcmludF9kdW1wID0gMTsJLyogZHVtcCBmcmFtZSBjb250ZW50cyAqLwotCQl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19hdGltKGZjKSkKLQkJCXRpdGxlID0gIkFUSU0iOwotCQllbHNlIGlmIChpZWVlODAyMTFfaXNfYXV0aChmYykpCi0JCQl0aXRsZSA9ICJBdXRoIjsKLQkJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2RlYXV0aChmYykpCi0JCQl0aXRsZSA9ICJEZUF1dGgiOwotCQllbHNlIGlmIChpZWVlODAyMTFfaXNfZGlzYXNzb2MoZmMpKQotCQkJdGl0bGUgPSAiRGlzQXNzb2MiOwotCQllbHNlCi0JCQl0aXRsZSA9ICJGcmFtZSI7Ci0KLQkJcmF0ZV9pZHggPSBpd2xfaHdyYXRlX3RvX3BsY3BfaWR4KHJhdGVfbl9mbGFncyk7Ci0JCWlmICh1bmxpa2VseSgocmF0ZV9pZHggPCAwKSB8fCAocmF0ZV9pZHggPj0gSVdMX1JBVEVfQ09VTlQpKSkgewotCQkJYml0cmF0ZSA9IDA7Ci0JCQlXQVJOX09OX09OQ0UoMSk7Ci0JCX0gZWxzZSB7Ci0JCQliaXRyYXRlID0gaXdsX3JhdGVzW3JhdGVfaWR4XS5pZWVlIC8gMjsKLQkJfQotCi0JCS8qIHByaW50IGZyYW1lIHN1bW1hcnkuCi0JCSAqIE1BQyBhZGRyZXNzZXMgc2hvdyBqdXN0IHRoZSBsYXN0IGJ5dGUgKGZvciBicmV2aXR5KSwKLQkJICogICAgYnV0IHlvdSBjYW4gaGFjayBpdCB0byBzaG93IG1vcmUsIGlmIHlvdSdkIGxpa2UgdG8uICovCi0JCWlmIChkYXRhZnJhbWUpCi0JCQlJV0xfREVCVUdfUlgocHJpdiwgIiVzOiBtaGQ9MHglMDR4LCBkc3Q9MHglMDJ4LCAiCi0JCQkJICAgICAibGVuPSV1LCByc3NpPSVkLCBjaG5sPSVkLCByYXRlPSV1LFxuIiwKLQkJCQkgICAgIHRpdGxlLCBsZTE2X3RvX2NwdShmYyksIGhlYWRlci0+YWRkcjFbNV0sCi0JCQkJICAgICBsZW5ndGgsIHJzc2ksIGNoYW5uZWwsIGJpdHJhdGUpOwotCQllbHNlIHsKLQkJCS8qIHNyYy9kc3QgYWRkcmVzc2VzIGFzc3VtZSBtYW5hZ2VkIG1vZGUgKi8KLQkJCUlXTF9ERUJVR19SWChwcml2LCAiJXM6IDB4JTA0eCwgZHN0PTB4JTAyeCwgc3JjPTB4JTAyeCwgIgotCQkJCSAgICAgImxlbj0ldSwgcnNzaT0lZCwgdGltPSVsdSB1c2VjLCAiCi0JCQkJICAgICAicGh5PTB4JTAyeCwgY2hubD0lZFxuIiwKLQkJCQkgICAgIHRpdGxlLCBsZTE2X3RvX2NwdShmYyksIGhlYWRlci0+YWRkcjFbNV0sCi0JCQkJICAgICBoZWFkZXItPmFkZHIzWzVdLCBsZW5ndGgsIHJzc2ksCi0JCQkJICAgICB0c2ZfbG93IC0gcHJpdi0+c2Nhbl9zdGFydF90c2YsCi0JCQkJICAgICBwaHlfZmxhZ3MsIGNoYW5uZWwpOwotCQl9Ci0JfQotCWlmIChwcmludF9kdW1wKQotCQlpd2xfcHJpbnRfaGV4X2R1bXAocHJpdiwgSVdMX0RMX1JYLCBoZWFkZXIsIGxlbmd0aCk7Ci19Ci0jZW5kaWYKLQogc3RhdGljIHUzMiBpd2xhZ25fdHJhbnNsYXRlX3J4X3N0YXR1cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBkZWNyeXB0X2luKQogewogCXUzMiBkZWNyeXB0X291dCA9IDA7CkBAIC05ODgsNyArOTA3LDcgQEAKIAlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gcnhiX2FkZHIocnhiKTsKIAlzdHJ1Y3QgaXdsX3J4X3BoeV9yZXMgKnBoeV9yZXM7CiAJX19sZTMyIHJ4X3BrdF9zdGF0dXM7Ci0Jc3RydWN0IGl3bDQ5NjVfcnhfbXBkdV9yZXNfc3RhcnQgKmFtc2R1OworCXN0cnVjdCBpd2xfcnhfbXBkdV9yZXNfc3RhcnQgKmFtc2R1OwogCXUzMiBsZW47CiAJdTMyIGFtcGR1X3N0YXR1czsKIAl1MzIgcmF0ZV9uX2ZsYWdzOwpAQCAtMTAxNyw3ICs5MzYsNyBAQAogCQkJcmV0dXJuOwogCQl9CiAJCXBoeV9yZXMgPSAmcHJpdi0+X2Fnbi5sYXN0X3BoeV9yZXM7Ci0JCWFtc2R1ID0gKHN0cnVjdCBpd2w0OTY1X3J4X21wZHVfcmVzX3N0YXJ0ICopcGt0LT51LnJhdzsKKwkJYW1zZHUgPSAoc3RydWN0IGl3bF9yeF9tcGR1X3Jlc19zdGFydCAqKXBrdC0+dS5yYXc7CiAJCWhlYWRlciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKShwa3QtPnUucmF3ICsgc2l6ZW9mKCphbXNkdSkpOwogCQlsZW4gPSBsZTE2X3RvX2NwdShhbXNkdS0+Ynl0ZV9jb3VudCk7CiAJCXJ4X3BrdF9zdGF0dXMgPSAqKF9fbGUzMiAqKShwa3QtPnUucmF3ICsgc2l6ZW9mKCphbXNkdSkgKyBsZW4pOwpAQCAtMTA2MCwxMSArOTc5LDYgQEAKIAkvKiBGaW5kIG1heCBzaWduYWwgc3RyZW5ndGggKGRCbSkgYW1vbmcgMyBhbnRlbm5hL3JlY2VpdmVyIGNoYWlucyAqLwogCXJ4X3N0YXR1cy5zaWduYWwgPSBpd2xhZ25fY2FsY19yc3NpKHByaXYsIHBoeV9yZXMpOwogCi0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLQkvKiBTZXQgIjEiIHRvIHJlcG9ydCBnb29kIGRhdGEgZnJhbWVzIGluIGdyb3VwcyBvZiAxMDAgKi8KLQlpZiAodW5saWtlbHkoaXdsX2dldF9kZWJ1Z19sZXZlbChwcml2KSAmIElXTF9ETF9SWCkpCi0JCWl3bGFnbl9kYmdfcmVwb3J0X2ZyYW1lKHByaXYsIHBoeV9yZXMsIGxlbiwgaGVhZGVyLCAxKTsKLSNlbmRpZgogCWl3bF9kYmdfbG9nX3J4X2RhdGFfZnJhbWUocHJpdiwgbGVuLCBoZWFkZXIpOwogCUlXTF9ERUJVR19TVEFUU19MSU1JVChwcml2LCAiUnNzaSAlZCwgVFNGICVsbHVcbiIsCiAJCXJ4X3N0YXR1cy5zaWduYWwsICh1bnNpZ25lZCBsb25nIGxvbmcpcnhfc3RhdHVzLm1hY3RpbWUpOwpAQCAtMTI1Miw2ICsxMTY2LDcgQEAKIAlib29sIGlzX2FjdGl2ZSA9IGZhbHNlOwogCWludCAgY2hhbl9tb2Q7CiAJdTggYWN0aXZlX2NoYWluczsKKwl1OCBzY2FuX3R4X2FudGVubmFzID0gcHJpdi0+aHdfcGFyYW1zLnZhbGlkX3R4X2FudDsKIAogCWNvbmYgPSBpZWVlODAyMTFfZ2V0X2h3X2NvbmYocHJpdi0+aHcpOwogCkBAIC0xMzE5LDcgKzEyMzQsMTAgQEAKIAogCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiU2Nhbm5pbmcgd2hpbGUgYXNzb2NpYXRlZC4uLlxuIik7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCWludGVydmFsID0gdmlmID8gdmlmLT5ic3NfY29uZi5iZWFjb25faW50IDogMDsKKwkJaWYgKHByaXYtPmlzX2ludGVybmFsX3Nob3J0X3NjYW4pCisJCQlpbnRlcnZhbCA9IDA7CisJCWVsc2UKKwkJCWludGVydmFsID0gdmlmLT5ic3NfY29uZi5iZWFjb25faW50OwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAkJc2Nhbi0+c3VzcGVuZF90aW1lID0gMDsKQEAgLTE0MDMsMTEgKzEzMjEsMTQgQEAKIAogCWJhbmQgPSBwcml2LT5zY2FuX2JhbmQ7CiAKLQlpZiAocHJpdi0+Y2ZnLT5zY2FuX2FudGVubmFzW2JhbmRdKQotCQlyeF9hbnQgPSBwcml2LT5jZmctPnNjYW5fYW50ZW5uYXNbYmFuZF07CisJaWYgKHByaXYtPmNmZy0+c2Nhbl9yeF9hbnRlbm5hc1tiYW5kXSkKKwkJcnhfYW50ID0gcHJpdi0+Y2ZnLT5zY2FuX3J4X2FudGVubmFzW2JhbmRdOwogCi0JcHJpdi0+c2Nhbl90eF9hbnRbYmFuZF0gPQotCQkJaXdsX3RvZ2dsZV90eF9hbnQocHJpdiwgcHJpdi0+c2Nhbl90eF9hbnRbYmFuZF0pOworCWlmIChwcml2LT5jZmctPnNjYW5fdHhfYW50ZW5uYXNbYmFuZF0pCisJCXNjYW5fdHhfYW50ZW5uYXMgPSBwcml2LT5jZmctPnNjYW5fdHhfYW50ZW5uYXNbYmFuZF07CisKKwlwcml2LT5zY2FuX3R4X2FudFtiYW5kXSA9IGl3bF90b2dnbGVfdHhfYW50KHByaXYsIHByaXYtPnNjYW5fdHhfYW50W2JhbmRdLAorCQkJCQkJICAgIHNjYW5fdHhfYW50ZW5uYXMpOwogCXJhdGVfZmxhZ3MgfD0gaXdsX2FudF9pZHhfdG9fZmxhZ3MocHJpdi0+c2Nhbl90eF9hbnRbYmFuZF0pOwogCXNjYW4tPnR4X2NtZC5yYXRlX25fZmxhZ3MgPSBpd2xfaHdfc2V0X3JhdGVfbl9mbGFncyhyYXRlLCByYXRlX2ZsYWdzKTsKIApAQCAtMTQzMywxMyArMTM1NCwxNSBAQAogCWlmICghcHJpdi0+aXNfaW50ZXJuYWxfc2hvcnRfc2NhbikgewogCQljbWRfbGVuID0gaXdsX2ZpbGxfcHJvYmVfcmVxKHByaXYsCiAJCQkJCShzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilzY2FuLT5kYXRhLAorCQkJCQl2aWYtPmFkZHIsCiAJCQkJCXByaXYtPnNjYW5fcmVxdWVzdC0+aWUsCiAJCQkJCXByaXYtPnNjYW5fcmVxdWVzdC0+aWVfbGVuLAogCQkJCQlJV0xfTUFYX1NDQU5fU0laRSAtIHNpemVvZigqc2NhbikpOwogCX0gZWxzZSB7CisJCS8qIHVzZSBiY2FzdCBhZGRyLCB3aWxsIG5vdCBiZSB0cmFuc21pdHRlZCBidXQgbXVzdCBiZSB2YWxpZCAqLwogCQljbWRfbGVuID0gaXdsX2ZpbGxfcHJvYmVfcmVxKHByaXYsCiAJCQkJCShzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilzY2FuLT5kYXRhLAotCQkJCQlOVUxMLCAwLAorCQkJCQlpd2xfYmNhc3RfYWRkciwgTlVMTCwgMCwKIAkJCQkJSVdMX01BWF9TQ0FOX1NJWkUgLSBzaXplb2YoKnNjYW4pKTsKIAogCX0KQEAgLTE1MDIsMyArMTQyNSw5NiBAQAogCXJldHVybiBpd2xfcmVtb3ZlX3N0YXRpb24ocHJpdiwgdmlmX3ByaXYtPmlic3NfYnNzaWRfc3RhX2lkLAogCQkJCSAgdmlmLT5ic3NfY29uZi5ic3NpZCk7CiB9CisKK3ZvaWQgaXdsX2ZyZWVfdGZkc19pbl9xdWV1ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgaW50IHN0YV9pZCwgaW50IHRpZCwgaW50IGZyZWVkKQoreworCVdBUk5fT04oIXNwaW5faXNfbG9ja2VkKCZwcml2LT5zdGFfbG9jaykpOworCisJaWYgKHByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0udGZkc19pbl9xdWV1ZSA+PSBmcmVlZCkKKwkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS50ZmRzX2luX3F1ZXVlIC09IGZyZWVkOworCWVsc2UgeworCQlJV0xfREVCVUdfVFgocHJpdiwgImZyZWUgbW9yZSB0aGFuIHRmZHNfaW5fcXVldWUgKCV1OiVkKVxuIiwKKwkJCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0udGZkc19pbl9xdWV1ZSwKKwkJCWZyZWVkKTsKKwkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS50ZmRzX2luX3F1ZXVlID0gMDsKKwl9Cit9CisKKyNkZWZpbmUgSVdMX0ZMVVNIX1dBSVRfTVMJMjAwMAorCitpbnQgaXdsYWduX3dhaXRfdHhfcXVldWVfZW1wdHkoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cTsKKwlzdHJ1Y3QgaXdsX3F1ZXVlICpxOworCWludCBjbnQ7CisJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOworCWludCByZXQgPSAwOworCisJLyogd2FpdGluZyBmb3IgYWxsIHRoZSB0eCBmcmFtZXMgY29tcGxldGUgbWlnaHQgdGFrZSBhIHdoaWxlICovCisJZm9yIChjbnQgPSAwOyBjbnQgPCBwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW07IGNudCsrKSB7CisJCWlmIChjbnQgPT0gSVdMX0NNRF9RVUVVRV9OVU0pCisJCQljb250aW51ZTsKKwkJdHhxID0gJnByaXYtPnR4cVtjbnRdOworCQlxID0gJnR4cS0+cTsKKwkJd2hpbGUgKHEtPnJlYWRfcHRyICE9IHEtPndyaXRlX3B0ciAmJiAhdGltZV9hZnRlcihqaWZmaWVzLAorCQkgICAgICAgbm93ICsgbXNlY3NfdG9famlmZmllcyhJV0xfRkxVU0hfV0FJVF9NUykpKQorCQkJCW1zbGVlcCgxKTsKKworCQlpZiAocS0+cmVhZF9wdHIgIT0gcS0+d3JpdGVfcHRyKSB7CisJCQlJV0xfRVJSKHByaXYsICJmYWlsIHRvIGZsdXNoIGFsbCB0eCBmaWZvIHF1ZXVlc1xuIik7CisJCQlyZXQgPSAtRVRJTUVET1VUOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBJV0xfVFhfUVVFVUVfTVNLCTB4ZmZmZmYKKworLyoqCisgKiBpd2xhZ25fdHhmaWZvX2ZsdXNoOiBzZW5kIFJFUExZX1RYRklGT19GTFVTSCBjb21tYW5kIHRvIHVDb2RlCisgKgorICogcHJlLXJlcXVpcmVtZW50czoKKyAqICAxLiBhY3F1aXJlIG11dGV4IGJlZm9yZSBjYWxsaW5nCisgKiAgMi4gbWFrZSBzdXJlIHJmIGlzIG9uIGFuZCBub3QgaW4gZXhpdCBzdGF0ZQorICovCitpbnQgaXdsYWduX3R4Zmlmb19mbHVzaChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBmbHVzaF9jb250cm9sKQoreworCXN0cnVjdCBpd2xfdHhmaWZvX2ZsdXNoX2NtZCBmbHVzaF9jbWQ7CisJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CisJCS5pZCA9IFJFUExZX1RYRklGT19GTFVTSCwKKwkJLmxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsX3R4Zmlmb19mbHVzaF9jbWQpLAorCQkuZmxhZ3MgPSBDTURfU1lOQywKKwkJLmRhdGEgPSAmZmx1c2hfY21kLAorCX07CisKKwltaWdodF9zbGVlcCgpOworCisJbWVtc2V0KCZmbHVzaF9jbWQsIDAsIHNpemVvZihmbHVzaF9jbWQpKTsKKwlmbHVzaF9jbWQuZmlmb19jb250cm9sID0gSVdMX1RYX0ZJRk9fVk9fTVNLIHwgSVdMX1RYX0ZJRk9fVklfTVNLIHwKKwkJCQkgSVdMX1RYX0ZJRk9fQkVfTVNLIHwgSVdMX1RYX0ZJRk9fQktfTVNLOworCWlmIChwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfTikKKwkJZmx1c2hfY21kLmZpZm9fY29udHJvbCB8PSBJV0xfQUdHX1RYX1FVRVVFX01TSzsKKworCUlXTF9ERUJVR19JTkZPKHByaXYsICJmaWZvIHF1ZXVlIGNvbnRyb2w6IDBYJXhcbiIsCisJCSAgICAgICBmbHVzaF9jbWQuZmlmb19jb250cm9sKTsKKwlmbHVzaF9jbWQuZmx1c2hfY29udHJvbCA9IGNwdV90b19sZTE2KGZsdXNoX2NvbnRyb2wpOworCisJcmV0dXJuIGl3bF9zZW5kX2NtZChwcml2LCAmY21kKTsKK30KKwordm9pZCBpd2xhZ25fZGV2X3R4Zmlmb19mbHVzaChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBmbHVzaF9jb250cm9sKQoreworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwlpZWVlODAyMTFfc3RvcF9xdWV1ZXMocHJpdi0+aHcpOworCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT50eGZpZm9fZmx1c2gocHJpdiwgSVdMX0RST1BfQUxMKSkgeworCQlJV0xfRVJSKHByaXYsICJmbHVzaCByZXF1ZXN0IGZhaWxcbiIpOworCQlnb3RvIGRvbmU7CisJfQorCUlXTF9ERUJVR19JTkZPKHByaXYsICJ3YWl0IHRyYW5zbWl0L2ZsdXNoIGFsbCBmcmFtZXNcbiIpOworCWl3bGFnbl93YWl0X3R4X3F1ZXVlX2VtcHR5KHByaXYpOworZG9uZToKKwlpZWVlODAyMTFfd2FrZV9xdWV1ZXMocHJpdi0+aHcpOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYwppbmRleCBjZjRhOTViLi4zNWM4NmQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYwpAQCAtMzEzLDggKzMxMyw3IEBACiAJCQkgKi8KIAkJCUlXTF9ERUJVR19IVChwcml2LCAiRmFpbCBzdGFydCBUeCBhZ2cgb24gdGlkOiAlZFxuIiwKIAkJCQl0aWQpOwotCQkJaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdGEsIHRpZCwKLQkJCQkJCVdMQU5fQkFDS19JTklUSUFUT1IpOworCQkJaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdGEsIHRpZCk7CiAJCX0KIAl9IGVsc2UKIAkJSVdMX0VSUihwcml2LCAiRmFpbCBmaW5kaW5nIHZhbGlkIGFnZ3JlZ2F0aW9uIHRpZDogJWRcbiIsIHRpZCk7CkBAIC0zMjUsMTggKzMyNCwxMSBAQAogCQkJICAgICAgc3RydWN0IGl3bF9scV9zdGEgKmxxX2RhdGEsCiAJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQogewotCWlmICgodGlkIDwgVElEX01BWF9MT0FEX0NPVU5UKSAmJgotCSAgICAhcnNfdGxfdHVybl9vbl9hZ2dfZm9yX3RpZChwcml2LCBscV9kYXRhLCB0aWQsIHN0YSkpIHsKLQkJaWYgKHByaXYtPmNmZy0+dXNlX3J0c19mb3JfaHQpIHsKLQkJCS8qCi0JCQkgKiBzd2l0Y2ggdG8gUlRTL0NUUyBpZiBpdCBpcyB0aGUgcHJlZmVyIHByb3RlY3Rpb24KLQkJCSAqIG1ldGhvZCBmb3IgSFQgdHJhZmZpYwotCQkJICovCi0JCQlJV0xfREVCVUdfSFQocHJpdiwgInVzZSBSVFMvQ1RTIHByb3RlY3Rpb24gZm9yIEhUXG4iKTsKLQkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+UlhPTl9GTEdfU0VMRl9DVFNfRU47Ci0JCQlpd2xjb3JlX2NvbW1pdF9yeG9uKHByaXYpOwotCQl9Ci0JfQorCWlmICh0aWQgPCBUSURfTUFYX0xPQURfQ09VTlQpCisJCXJzX3RsX3R1cm5fb25fYWdnX2Zvcl90aWQocHJpdiwgbHFfZGF0YSwgdGlkLCBzdGEpOworCWVsc2UKKwkJSVdMX0VSUihwcml2LCAidGlkIGV4Y2VlZHMgbWF4IGxvYWQgY291bnQ6ICVkLyVkXG4iLAorCQkJdGlkLCBUSURfTUFYX0xPQURfQ09VTlQpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBnZXRfbnVtX29mX2FudF9mcm9tX3JhdGUodTMyIHJhdGVfbl9mbGFncykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJ4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ5MGVjZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1yeC5jCkBAIC0wLDAgKzEsMzUxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogR1BMIExJQ0VOU0UgU1VNTUFSWQorICoKKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLAorICogVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KKyAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLkdQTC4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgorICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjaW5jbHVkZSAiaXdsLWRldi5oIgorI2luY2x1ZGUgIml3bC1jb3JlLmgiCisjaW5jbHVkZSAiaXdsLWNhbGliLmgiCisjaW5jbHVkZSAiaXdsLXN0YS5oIgorI2luY2x1ZGUgIml3bC1pby5oIgorI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCisjaW5jbHVkZSAiaXdsLWFnbi1ody5oIgorI2luY2x1ZGUgIml3bC1hZ24uaCIKKwordm9pZCBpd2xfcnhfbWlzc2VkX2JlYWNvbl9ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCisKK3sKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gcnhiX2FkZHIocnhiKTsKKwlzdHJ1Y3QgaXdsX21pc3NlZF9iZWFjb25fbm90aWYgKm1pc3NlZF9iZWFjb247CisKKwltaXNzZWRfYmVhY29uID0gJnBrdC0+dS5taXNzZWRfYmVhY29uOworCWlmIChsZTMyX3RvX2NwdShtaXNzZWRfYmVhY29uLT5jb25zZWN1dGl2ZV9taXNzZWRfYmVhY29ucykgPgorCSAgICBwcml2LT5taXNzZWRfYmVhY29uX3RocmVzaG9sZCkgeworCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwKKwkJICAgICJtaXNzZWQgYmNuIGNuc3EgJWQgdG90bCAlZCByY2QgJWQgZXhwY3RkICVkXG4iLAorCQkgICAgbGUzMl90b19jcHUobWlzc2VkX2JlYWNvbi0+Y29uc2VjdXRpdmVfbWlzc2VkX2JlYWNvbnMpLAorCQkgICAgbGUzMl90b19jcHUobWlzc2VkX2JlYWNvbi0+dG90YWxfbWlzc2VkX2JlY29ucyksCisJCSAgICBsZTMyX3RvX2NwdShtaXNzZWRfYmVhY29uLT5udW1fcmVjdmRfYmVhY29ucyksCisJCSAgICBsZTMyX3RvX2NwdShtaXNzZWRfYmVhY29uLT5udW1fZXhwZWN0ZWRfYmVhY29ucykpOworCQlpZiAoIXRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpCisJCQlpd2xfaW5pdF9zZW5zaXRpdml0eShwcml2KTsKKwl9Cit9CisKKy8qIENhbGN1bGF0ZSBub2lzZSBsZXZlbCwgYmFzZWQgb24gbWVhc3VyZW1lbnRzIGR1cmluZyBuZXR3b3JrIHNpbGVuY2UganVzdAorICogICBiZWZvcmUgYXJyaXZpbmcgYmVhY29uLiAgVGhpcyBtZWFzdXJlbWVudCBjYW4gYmUgZG9uZSBvbmx5IGlmIHdlIGtub3cKKyAqICAgZXhhY3RseSB3aGVuIHRvIGV4cGVjdCBiZWFjb25zLCB0aGVyZWZvcmUgb25seSB3aGVuIHdlJ3JlIGFzc29jaWF0ZWQuICovCitzdGF0aWMgdm9pZCBpd2xfcnhfY2FsY19ub2lzZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJc3RydWN0IHN0YXRpc3RpY3Nfcnhfbm9uX3BoeSAqcnhfaW5mbzsKKwlpbnQgbnVtX2FjdGl2ZV9yeCA9IDA7CisJaW50IHRvdGFsX3NpbGVuY2UgPSAwOworCWludCBiY25fc2lsZW5jZV9hLCBiY25fc2lsZW5jZV9iLCBiY25fc2lsZW5jZV9jOworCWludCBsYXN0X3J4X25vaXNlOworCisJaWYgKHByaXYtPmNmZy0+YnRfc3RhdGlzdGljcykKKwkJcnhfaW5mbyA9ICYocHJpdi0+X2Fnbi5zdGF0aXN0aWNzX2J0LnJ4LmdlbmVyYWwuY29tbW9uKTsKKwllbHNlCisJCXJ4X2luZm8gPSAmKHByaXYtPl9hZ24uc3RhdGlzdGljcy5yeC5nZW5lcmFsKTsKKwliY25fc2lsZW5jZV9hID0KKwkJbGUzMl90b19jcHUocnhfaW5mby0+YmVhY29uX3NpbGVuY2VfcnNzaV9hKSAmIElOX0JBTkRfRklMVEVSOworCWJjbl9zaWxlbmNlX2IgPQorCQlsZTMyX3RvX2NwdShyeF9pbmZvLT5iZWFjb25fc2lsZW5jZV9yc3NpX2IpICYgSU5fQkFORF9GSUxURVI7CisJYmNuX3NpbGVuY2VfYyA9CisJCWxlMzJfdG9fY3B1KHJ4X2luZm8tPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYykgJiBJTl9CQU5EX0ZJTFRFUjsKKworCWlmIChiY25fc2lsZW5jZV9hKSB7CisJCXRvdGFsX3NpbGVuY2UgKz0gYmNuX3NpbGVuY2VfYTsKKwkJbnVtX2FjdGl2ZV9yeCsrOworCX0KKwlpZiAoYmNuX3NpbGVuY2VfYikgeworCQl0b3RhbF9zaWxlbmNlICs9IGJjbl9zaWxlbmNlX2I7CisJCW51bV9hY3RpdmVfcngrKzsKKwl9CisJaWYgKGJjbl9zaWxlbmNlX2MpIHsKKwkJdG90YWxfc2lsZW5jZSArPSBiY25fc2lsZW5jZV9jOworCQludW1fYWN0aXZlX3J4Kys7CisJfQorCisJLyogQXZlcmFnZSBhbW9uZyBhY3RpdmUgYW50ZW5uYXMgKi8KKwlpZiAobnVtX2FjdGl2ZV9yeCkKKwkJbGFzdF9yeF9ub2lzZSA9ICh0b3RhbF9zaWxlbmNlIC8gbnVtX2FjdGl2ZV9yeCkgLSAxMDc7CisJZWxzZQorCQlsYXN0X3J4X25vaXNlID0gSVdMX05PSVNFX01FQVNfTk9UX0FWQUlMQUJMRTsKKworCUlXTF9ERUJVR19DQUxJQihwcml2LCAiaW5iYW5kIHNpbGVuY2UgYSAldSwgYiAldSwgYyAldSwgZEJtICVkXG4iLAorCQkJYmNuX3NpbGVuY2VfYSwgYmNuX3NpbGVuY2VfYiwgYmNuX3NpbGVuY2VfYywKKwkJCWxhc3Rfcnhfbm9pc2UpOworfQorCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUdGUworLyoKKyAqICBiYXNlZCBvbiB0aGUgYXNzdW1wdGlvbiBvZiBhbGwgc3RhdGlzdGljcyBjb3VudGVyIGFyZSBpbiBEV09SRAorICogIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGlzIGZvciBkZWJ1Z2dpbmcsIGRvIG5vdCBkZWFsIHdpdGgKKyAqICB0aGUgY2FzZSBvZiBjb3VudGVycyByb2xsLW92ZXIuCisgKi8KK3N0YXRpYyB2b2lkIGl3bF9hY2N1bXVsYXRpdmVfc3RhdGlzdGljcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJCV9fbGUzMiAqc3RhdHMpCit7CisJaW50IGksIHNpemU7CisJX19sZTMyICpwcmV2X3N0YXRzOworCXUzMiAqYWNjdW1fc3RhdHM7CisJdTMyICpkZWx0YSwgKm1heF9kZWx0YTsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19nZW5lcmFsX2NvbW1vbiAqZ2VuZXJhbCwgKmFjY3VtX2dlbmVyYWw7CisJc3RydWN0IHN0YXRpc3RpY3NfdHggKnR4LCAqYWNjdW1fdHg7CisKKwlpZiAocHJpdi0+Y2ZnLT5idF9zdGF0aXN0aWNzKSB7CisJCXByZXZfc3RhdHMgPSAoX19sZTMyICopJnByaXYtPl9hZ24uc3RhdGlzdGljc19idDsKKwkJYWNjdW1fc3RhdHMgPSAodTMyICopJnByaXYtPl9hZ24uYWNjdW1fc3RhdGlzdGljc19idDsKKwkJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXdsX2J0X25vdGlmX3N0YXRpc3RpY3MpOworCQlnZW5lcmFsID0gJnByaXYtPl9hZ24uc3RhdGlzdGljc19idC5nZW5lcmFsLmNvbW1vbjsKKwkJYWNjdW1fZ2VuZXJhbCA9ICZwcml2LT5fYWduLmFjY3VtX3N0YXRpc3RpY3NfYnQuZ2VuZXJhbC5jb21tb247CisJCXR4ID0gJnByaXYtPl9hZ24uc3RhdGlzdGljc19idC50eDsKKwkJYWNjdW1fdHggPSAmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzX2J0LnR4OworCQlkZWx0YSA9ICh1MzIgKikmcHJpdi0+X2Fnbi5kZWx0YV9zdGF0aXN0aWNzX2J0OworCQltYXhfZGVsdGEgPSAodTMyICopJnByaXYtPl9hZ24ubWF4X2RlbHRhX2J0OworCX0gZWxzZSB7CisJCXByZXZfc3RhdHMgPSAoX19sZTMyICopJnByaXYtPl9hZ24uc3RhdGlzdGljczsKKwkJYWNjdW1fc3RhdHMgPSAodTMyICopJnByaXYtPl9hZ24uYWNjdW1fc3RhdGlzdGljczsKKwkJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MpOworCQlnZW5lcmFsID0gJnByaXYtPl9hZ24uc3RhdGlzdGljcy5nZW5lcmFsLmNvbW1vbjsKKwkJYWNjdW1fZ2VuZXJhbCA9ICZwcml2LT5fYWduLmFjY3VtX3N0YXRpc3RpY3MuZ2VuZXJhbC5jb21tb247CisJCXR4ID0gJnByaXYtPl9hZ24uc3RhdGlzdGljcy50eDsKKwkJYWNjdW1fdHggPSAmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzLnR4OworCQlkZWx0YSA9ICh1MzIgKikmcHJpdi0+X2Fnbi5kZWx0YV9zdGF0aXN0aWNzOworCQltYXhfZGVsdGEgPSAodTMyICopJnByaXYtPl9hZ24ubWF4X2RlbHRhOworCX0KKwlmb3IgKGkgPSBzaXplb2YoX19sZTMyKTsgaSA8IHNpemU7CisJICAgICBpICs9IHNpemVvZihfX2xlMzIpLCBzdGF0cysrLCBwcmV2X3N0YXRzKyssIGRlbHRhKyssCisJICAgICBtYXhfZGVsdGErKywgYWNjdW1fc3RhdHMrKykgeworCQlpZiAobGUzMl90b19jcHUoKnN0YXRzKSA+IGxlMzJfdG9fY3B1KCpwcmV2X3N0YXRzKSkgeworCQkJKmRlbHRhID0gKGxlMzJfdG9fY3B1KCpzdGF0cykgLQorCQkJCWxlMzJfdG9fY3B1KCpwcmV2X3N0YXRzKSk7CisJCQkqYWNjdW1fc3RhdHMgKz0gKmRlbHRhOworCQkJaWYgKCpkZWx0YSA+ICptYXhfZGVsdGEpCisJCQkJKm1heF9kZWx0YSA9ICpkZWx0YTsKKwkJfQorCX0KKworCS8qIHJlc2V0IGFjY3VtdWxhdGl2ZSBzdGF0aXN0aWNzIGZvciAibm8tY291bnRlciIgdHlwZSBzdGF0aXN0aWNzICovCisJYWNjdW1fZ2VuZXJhbC0+dGVtcGVyYXR1cmUgPSBnZW5lcmFsLT50ZW1wZXJhdHVyZTsKKwlhY2N1bV9nZW5lcmFsLT50ZW1wZXJhdHVyZV9tID0gZ2VuZXJhbC0+dGVtcGVyYXR1cmVfbTsKKwlhY2N1bV9nZW5lcmFsLT50dGxfdGltZXN0YW1wID0gZ2VuZXJhbC0+dHRsX3RpbWVzdGFtcDsKKwlhY2N1bV90eC0+dHhfcG93ZXIuYW50X2EgPSB0eC0+dHhfcG93ZXIuYW50X2E7CisJYWNjdW1fdHgtPnR4X3Bvd2VyLmFudF9iID0gdHgtPnR4X3Bvd2VyLmFudF9iOworCWFjY3VtX3R4LT50eF9wb3dlci5hbnRfYyA9IHR4LT50eF9wb3dlci5hbnRfYzsKK30KKyNlbmRpZgorCisjZGVmaW5lIFJFR19SRUNBTElCX1BFUklPRCAoNjApCisKKy8qKgorICogaXdsX2dvb2RfcGxjcF9oZWFsdGggLSBjaGVja3MgZm9yIHBsY3AgZXJyb3IuCisgKgorICogV2hlbiB0aGUgcGxjcCBlcnJvciBpcyBleGNlZWRpbmcgdGhlIHRocmVzaG9sZHMsIHJlc2V0IHRoZSByYWRpbworICogdG8gaW1wcm92ZSB0aGUgdGhyb3VnaHB1dC4KKyAqLworYm9vbCBpd2xfZ29vZF9wbGNwX2hlYWx0aChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCkKK3sKKwlib29sIHJjID0gdHJ1ZTsKKwlpbnQgY29tYmluZWRfcGxjcF9kZWx0YTsKKwl1bnNpZ25lZCBpbnQgcGxjcF9tc2VjOworCXVuc2lnbmVkIGxvbmcgcGxjcF9yZWNlaXZlZF9qaWZmaWVzOworCisJaWYgKHByaXYtPmNmZy0+cGxjcF9kZWx0YV90aHJlc2hvbGQgPT0KKwkgICAgSVdMX01BWF9QTENQX0VSUl9USFJFU0hPTERfRElTQUJMRSkgeworCQlJV0xfREVCVUdfUkFESU8ocHJpdiwgInBsY3BfZXJyIGNoZWNrIGRpc2FibGVkXG4iKTsKKwkJcmV0dXJuIHJjOworCX0KKworCS8qCisJICogY2hlY2sgZm9yIHBsY3BfZXJyIGFuZCB0cmlnZ2VyIHJhZGlvIHJlc2V0IGlmIGl0IGV4Y2VlZHMKKwkgKiB0aGUgcGxjcCBlcnJvciB0aHJlc2hvbGQgcGxjcF9kZWx0YS4KKwkgKi8KKwlwbGNwX3JlY2VpdmVkX2ppZmZpZXMgPSBqaWZmaWVzOworCXBsY3BfbXNlYyA9IGppZmZpZXNfdG9fbXNlY3MoKGxvbmcpIHBsY3BfcmVjZWl2ZWRfamlmZmllcyAtCisJCQkJCShsb25nKSBwcml2LT5wbGNwX2ppZmZpZXMpOworCXByaXYtPnBsY3BfamlmZmllcyA9IHBsY3BfcmVjZWl2ZWRfamlmZmllczsKKwkvKgorCSAqIGNoZWNrIHRvIG1ha2Ugc3VyZSBwbGNwX21zZWMgaXMgbm90IDAgdG8gcHJldmVudCBkaXZpc2lvbgorCSAqIGJ5IHplcm8uCisJICovCisJaWYgKHBsY3BfbXNlYykgeworCQlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgKm9mZG07CisJCXN0cnVjdCBzdGF0aXN0aWNzX3J4X2h0X3BoeSAqb2ZkbV9odDsKKworCQlpZiAocHJpdi0+Y2ZnLT5idF9zdGF0aXN0aWNzKSB7CisJCQlvZmRtID0gJnBrdC0+dS5zdGF0c19idC5yeC5vZmRtOworCQkJb2ZkbV9odCA9ICZwa3QtPnUuc3RhdHNfYnQucngub2ZkbV9odDsKKwkJCWNvbWJpbmVkX3BsY3BfZGVsdGEgPQorCQkJICAgKGxlMzJfdG9fY3B1KG9mZG0tPnBsY3BfZXJyKSAtCisJCQkgICBsZTMyX3RvX2NwdShwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQuCisJCQkJICAgICAgIHJ4Lm9mZG0ucGxjcF9lcnIpKSArCisJCQkgICAobGUzMl90b19jcHUob2ZkbV9odC0+cGxjcF9lcnIpIC0KKwkJCSAgIGxlMzJfdG9fY3B1KHByaXYtPl9hZ24uc3RhdGlzdGljc19idC4KKwkJCQkgICAgICAgcngub2ZkbV9odC5wbGNwX2VycikpOworCQl9IGVsc2UgeworCQkJb2ZkbSA9ICZwa3QtPnUuc3RhdHMucngub2ZkbTsKKwkJCW9mZG1faHQgPSAmcGt0LT51LnN0YXRzLnJ4Lm9mZG1faHQ7CisJCQljb21iaW5lZF9wbGNwX2RlbHRhID0KKwkJCSAgICAobGUzMl90b19jcHUob2ZkbS0+cGxjcF9lcnIpIC0KKwkJCSAgICBsZTMyX3RvX2NwdShwcml2LT5fYWduLnN0YXRpc3RpY3MuCisJCQkJCXJ4Lm9mZG0ucGxjcF9lcnIpKSArCisJCQkgICAgKGxlMzJfdG9fY3B1KG9mZG1faHQtPnBsY3BfZXJyKSAtCisJCQkgICAgbGUzMl90b19jcHUocHJpdi0+X2Fnbi5zdGF0aXN0aWNzLgorCQkJCQlyeC5vZmRtX2h0LnBsY3BfZXJyKSk7CisJCX0KKworCQlpZiAoKGNvbWJpbmVkX3BsY3BfZGVsdGEgPiAwKSAmJgorCQkgICAgKChjb21iaW5lZF9wbGNwX2RlbHRhICogMTAwKSAvIHBsY3BfbXNlYykgPgorCQkJcHJpdi0+Y2ZnLT5wbGNwX2RlbHRhX3RocmVzaG9sZCkgeworCQkJLyoKKwkJCSAqIGlmIHBsY3BfZXJyIGV4Y2VlZCB0aGUgdGhyZXNob2xkLAorCQkJICogdGhlIGZvbGxvd2luZyBkYXRhIGlzIHByaW50ZWQgaW4gY3N2IGZvcm1hdDoKKwkJCSAqICAgIFRleHQ6IHBsY3BfZXJyIGV4Y2VlZGVkICVkLAorCQkJICogICAgUmVjZWl2ZWQgb2ZkbS5wbGNwX2VyciwKKwkJCSAqICAgIEN1cnJlbnQgb2ZkbS5wbGNwX2VyciwKKwkJCSAqICAgIFJlY2VpdmVkIG9mZG1faHQucGxjcF9lcnIsCisJCQkgKiAgICBDdXJyZW50IG9mZG1faHQucGxjcF9lcnIsCisJCQkgKiAgICBjb21iaW5lZF9wbGNwX2RlbHRhLAorCQkJICogICAgcGxjcF9tc2VjCisJCQkgKi8KKwkJCUlXTF9ERUJVR19SQURJTyhwcml2LCAicGxjcF9lcnIgZXhjZWVkZWQgJXUsICIKKwkJCQkgICAgIiV1LCAldSwgJXUsICV1LCAlZCwgJXUgbVNlY3NcbiIsCisJCQkJICAgIHByaXYtPmNmZy0+cGxjcF9kZWx0YV90aHJlc2hvbGQsCisJCQkJICAgIGxlMzJfdG9fY3B1KG9mZG0tPnBsY3BfZXJyKSwKKwkJCQkgICAgbGUzMl90b19jcHUob2ZkbS0+cGxjcF9lcnIpLAorCQkJCSAgICBsZTMyX3RvX2NwdShvZmRtX2h0LT5wbGNwX2VyciksCisJCQkJICAgIGxlMzJfdG9fY3B1KG9mZG1faHQtPnBsY3BfZXJyKSwKKwkJCQkgICAgY29tYmluZWRfcGxjcF9kZWx0YSwgcGxjcF9tc2VjKTsKKworCQkJcmMgPSBmYWxzZTsKKwkJfQorCX0KKwlyZXR1cm4gcmM7Cit9CisKK3ZvaWQgaXdsX3J4X3N0YXRpc3RpY3Moc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCit7CisJaW50IGNoYW5nZTsKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gcnhiX2FkZHIocnhiKTsKKworCWlmIChwcml2LT5jZmctPmJ0X3N0YXRpc3RpY3MpIHsKKwkJSVdMX0RFQlVHX1JYKHByaXYsCisJCQkgICAgICJTdGF0aXN0aWNzIG5vdGlmaWNhdGlvbiByZWNlaXZlZCAoJWQgdnMgJWQpLlxuIiwKKwkJCSAgICAgKGludClzaXplb2Yoc3RydWN0IGl3bF9idF9ub3RpZl9zdGF0aXN0aWNzKSwKKwkJCSAgICAgbGUzMl90b19jcHUocGt0LT5sZW5fbl9mbGFncykgJgorCQkJICAgICBGSF9SU0NTUl9GUkFNRV9TSVpFX01TSyk7CisKKwkJY2hhbmdlID0gKChwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQuZ2VuZXJhbC5jb21tb24udGVtcGVyYXR1cmUgIT0KKwkJCSAgIHBrdC0+dS5zdGF0c19idC5nZW5lcmFsLmNvbW1vbi50ZW1wZXJhdHVyZSkgfHwKKwkJCSAgICgocHJpdi0+X2Fnbi5zdGF0aXN0aWNzX2J0LmZsYWcgJgorCQkJICAgU1RBVElTVElDU19SRVBMWV9GTEdfSFQ0MF9NT0RFX01TSykgIT0KKwkJCSAgIChwa3QtPnUuc3RhdHNfYnQuZmxhZyAmCisJCQkgICBTVEFUSVNUSUNTX1JFUExZX0ZMR19IVDQwX01PREVfTVNLKSkpOworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHRlMKKwkJaXdsX2FjY3VtdWxhdGl2ZV9zdGF0aXN0aWNzKHByaXYsIChfX2xlMzIgKikmcGt0LT51LnN0YXRzX2J0KTsKKyNlbmRpZgorCisJfSBlbHNlIHsKKwkJSVdMX0RFQlVHX1JYKHByaXYsCisJCQkgICAgICJTdGF0aXN0aWNzIG5vdGlmaWNhdGlvbiByZWNlaXZlZCAoJWQgdnMgJWQpLlxuIiwKKwkJCSAgICAgKGludClzaXplb2Yoc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzKSwKKwkJCSAgICAgbGUzMl90b19jcHUocGt0LT5sZW5fbl9mbGFncykgJgorCQkJICAgICBGSF9SU0NTUl9GUkFNRV9TSVpFX01TSyk7CisKKwkJY2hhbmdlID0gKChwcml2LT5fYWduLnN0YXRpc3RpY3MuZ2VuZXJhbC5jb21tb24udGVtcGVyYXR1cmUgIT0KKwkJCSAgIHBrdC0+dS5zdGF0cy5nZW5lcmFsLmNvbW1vbi50ZW1wZXJhdHVyZSkgfHwKKwkJCSAgICgocHJpdi0+X2Fnbi5zdGF0aXN0aWNzLmZsYWcgJgorCQkJICAgU1RBVElTVElDU19SRVBMWV9GTEdfSFQ0MF9NT0RFX01TSykgIT0KKwkJCSAgIChwa3QtPnUuc3RhdHMuZmxhZyAmCisJCQkgICBTVEFUSVNUSUNTX1JFUExZX0ZMR19IVDQwX01PREVfTVNLKSkpOworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHRlMKKwkJaXdsX2FjY3VtdWxhdGl2ZV9zdGF0aXN0aWNzKHByaXYsIChfX2xlMzIgKikmcGt0LT51LnN0YXRzKTsKKyNlbmRpZgorCisJfQorCisJaXdsX3JlY292ZXJfZnJvbV9zdGF0aXN0aWNzKHByaXYsIHBrdCk7CisKKwlpZiAocHJpdi0+Y2ZnLT5idF9zdGF0aXN0aWNzKQorCQltZW1jcHkoJnByaXYtPl9hZ24uc3RhdGlzdGljc19idCwgJnBrdC0+dS5zdGF0c19idCwKKwkJCXNpemVvZihwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQpKTsKKwllbHNlCisJCW1lbWNweSgmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzLCAmcGt0LT51LnN0YXRzLAorCQkJc2l6ZW9mKHByaXYtPl9hZ24uc3RhdGlzdGljcykpOworCisJc2V0X2JpdChTVEFUVVNfU1RBVElTVElDUywgJnByaXYtPnN0YXR1cyk7CisKKwkvKiBSZXNjaGVkdWxlIHRoZSBzdGF0aXN0aWNzIHRpbWVyIHRvIG9jY3VyIGluCisJICogUkVHX1JFQ0FMSUJfUEVSSU9EIHNlY29uZHMgdG8gZW5zdXJlIHdlIGdldCBhCisJICogdGhlcm1hbCB1cGRhdGUgZXZlbiBpZiB0aGUgdUNvZGUgZG9lc24ndCBnaXZlCisJICogdXMgb25lICovCisJbW9kX3RpbWVyKCZwcml2LT5zdGF0aXN0aWNzX3BlcmlvZGljLCBqaWZmaWVzICsKKwkJICBtc2Vjc190b19qaWZmaWVzKFJFR19SRUNBTElCX1BFUklPRCAqIDEwMDApKTsKKworCWlmICh1bmxpa2VseSghdGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSkgJiYKKwkgICAgKHBrdC0+aGRyLmNtZCA9PSBTVEFUSVNUSUNTX05PVElGSUNBVElPTikpIHsKKwkJaXdsX3J4X2NhbGNfbm9pc2UocHJpdik7CisJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cnVuX3RpbWVfY2FsaWJfd29yayk7CisJfQorCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT50ZW1wX29wcy50ZW1wZXJhdHVyZSAmJiBjaGFuZ2UpCisJCXByaXYtPmNmZy0+b3BzLT5saWItPnRlbXBfb3BzLnRlbXBlcmF0dXJlKHByaXYpOworfQorCit2b2lkIGl3bF9yZXBseV9zdGF0aXN0aWNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQoreworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSByeGJfYWRkcihyeGIpOworCisJaWYgKGxlMzJfdG9fY3B1KHBrdC0+dS5zdGF0cy5mbGFnKSAmIFVDT0RFX1NUQVRJU1RJQ1NfQ0xFQVJfTVNLKSB7CisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUdGUworCQltZW1zZXQoJnByaXYtPl9hZ24uYWNjdW1fc3RhdGlzdGljcywgMCwKKwkJCXNpemVvZihzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MpKTsKKwkJbWVtc2V0KCZwcml2LT5fYWduLmRlbHRhX3N0YXRpc3RpY3MsIDAsCisJCQlzaXplb2Yoc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzKSk7CisJCW1lbXNldCgmcHJpdi0+X2Fnbi5tYXhfZGVsdGEsIDAsCisJCQlzaXplb2Yoc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzKSk7CisJCW1lbXNldCgmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzX2J0LCAwLAorCQkJc2l6ZW9mKHN0cnVjdCBpd2xfYnRfbm90aWZfc3RhdGlzdGljcykpOworCQltZW1zZXQoJnByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljc19idCwgMCwKKwkJCXNpemVvZihzdHJ1Y3QgaXdsX2J0X25vdGlmX3N0YXRpc3RpY3MpKTsKKwkJbWVtc2V0KCZwcml2LT5fYWduLm1heF9kZWx0YV9idCwgMCwKKwkJCXNpemVvZihzdHJ1Y3QgaXdsX2J0X25vdGlmX3N0YXRpc3RpY3MpKTsKKyNlbmRpZgorCQlJV0xfREVCVUdfUlgocHJpdiwgIlN0YXRpc3RpY3MgaGF2ZSBiZWVuIGNsZWFyZWRcbiIpOworCX0KKwlpd2xfcnhfc3RhdGlzdGljcyhwcml2LCByeGIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXR4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tdHguYwppbmRleCA3ZDYxNGM0Li41NWExYjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tdHguYwpAQCAtMjMzLDYgKzIzMyw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MTYgcmFfdGlkOworCWludCByZXQ7CiAKIAlpZiAoKElXTEFHTl9GSVJTVF9BTVBEVV9RVUVVRSA+IHR4cV9pZCkgfHwKIAkgICAgKElXTEFHTl9GSVJTVF9BTVBEVV9RVUVVRSArIHByaXYtPmNmZy0+bnVtX29mX2FtcGR1X3F1ZXVlcwpAQCAtMjQ4LDcgKzI0OSw5IEBACiAJcmFfdGlkID0gQlVJTERfUkF4VElEKHN0YV9pZCwgdGlkKTsKIAogCS8qIE1vZGlmeSBkZXZpY2UncyBzdGF0aW9uIHRhYmxlIHRvIFR4IHRoaXMgVElEICovCi0JaXdsX3N0YV90eF9tb2RpZnlfZW5hYmxlX3RpZChwcml2LCBzdGFfaWQsIHRpZCk7CisJcmV0ID0gaXdsX3N0YV90eF9tb2RpZnlfZW5hYmxlX3RpZChwcml2LCBzdGFfaWQsIHRpZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKQEAgLTQ2OSw3ICs0NzIsOCBAQAogCX0KIAogCS8qIFNldCB1cCBhbnRlbm5hcyAqLwotCXByaXYtPm1nbXRfdHhfYW50ID0gaXdsX3RvZ2dsZV90eF9hbnQocHJpdiwgcHJpdi0+bWdtdF90eF9hbnQpOworCXByaXYtPm1nbXRfdHhfYW50ID0gaXdsX3RvZ2dsZV90eF9hbnQocHJpdiwgcHJpdi0+bWdtdF90eF9hbnQsCisJCQkJCSAgICAgIHByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQpOwogCXJhdGVfZmxhZ3MgfD0gaXdsX2FudF9pZHhfdG9fZmxhZ3MocHJpdi0+bWdtdF90eF9hbnQpOwogCiAJLyogU2V0IHRoZSByYXRlIGluIHRoZSBUWCBjbWQgKi8KQEAgLTU2NywxMCArNTcxLDcgQEAKIAloZHJfbGVuID0gaWVlZTgwMjExX2hkcmxlbihmYyk7CiAKIAkvKiBGaW5kIGluZGV4IGludG8gc3RhdGlvbiB0YWJsZSBmb3IgZGVzdGluYXRpb24gc3RhdGlvbiAqLwotCWlmICghaW5mby0+Y29udHJvbC5zdGEpCi0JCXN0YV9pZCA9IHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQ7Ci0JZWxzZQotCQlzdGFfaWQgPSBpd2xfc3RhX2lkKGluZm8tPmNvbnRyb2wuc3RhKTsKKwlzdGFfaWQgPSBpd2xfc3RhX2lkX29yX2Jyb2FkY2FzdChwcml2LCBpbmZvLT5jb250cm9sLnN0YSk7CiAJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7CiAJCUlXTF9ERUJVR19EUk9QKHByaXYsICJEcm9wcGluZyAtIElOVkFMSUQgU1RBVElPTjogJXBNXG4iLAogCQkJICAgICAgIGhkci0+YWRkcjEpOwpAQCAtNTk4LDExICs1OTksMTcgQEAKIAl9CiAKIAl0eHFfaWQgPSBnZXRfcXVldWVfZnJvbV9hYyhza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7CisKKwkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQvc2F2ZWQgYWJvdmUgd2hlbiBsb2NraW5nIHByaXYtPmxvY2sgKi8KKwlzcGluX2xvY2soJnByaXYtPnN0YV9sb2NrKTsKKwogCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7CiAJCXFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CiAJCXRpZCA9IHFjWzBdICYgSUVFRTgwMjExX1FPU19DVExfVElEX01BU0s7Ci0JCWlmICh1bmxpa2VseSh0aWQgPj0gTUFYX1RJRF9DT1VOVCkpCisJCWlmIChXQVJOX09OX09OQ0UodGlkID49IE1BWF9USURfQ09VTlQpKSB7CisJCQlzcGluX3VubG9jaygmcHJpdi0+c3RhX2xvY2spOwogCQkJZ290byBkcm9wX3VubG9jazsKKwkJfQogCQlzZXFfbnVtYmVyID0gcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5zZXFfbnVtYmVyOwogCQlzZXFfbnVtYmVyICY9IElFRUU4MDIxMV9TQ1RMX1NFUTsKIAkJaGRyLT5zZXFfY3RybCA9IGhkci0+c2VxX2N0cmwgJgpAQCAtNjIwLDE1ICs2MjcsMjIgQEAKIAlzd3FfaWQgPSB0eHEtPnN3cV9pZDsKIAlxID0gJnR4cS0+cTsKIAotCWlmICh1bmxpa2VseShpd2xfcXVldWVfc3BhY2UocSkgPCBxLT5oaWdoX21hcmspKQorCWlmICh1bmxpa2VseShpd2xfcXVldWVfc3BhY2UocSkgPCBxLT5oaWdoX21hcmspKSB7CisJCXNwaW5fdW5sb2NrKCZwcml2LT5zdGFfbG9jayk7CiAJCWdvdG8gZHJvcF91bmxvY2s7CisJfQogCi0JaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpCisJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKIAkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS50ZmRzX2luX3F1ZXVlKys7CisJCWlmICghaWVlZTgwMjExX2hhc19tb3JlZnJhZ3MoZmMpKQorCQkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5zZXFfbnVtYmVyID0gc2VxX251bWJlcjsKKwl9CisKKwlzcGluX3VubG9jaygmcHJpdi0+c3RhX2xvY2spOwogCiAJLyogU2V0IHVwIGRyaXZlciBkYXRhIGZvciB0aGlzIFRGRCAqLwogCW1lbXNldCgmKHR4cS0+dHhiW3EtPndyaXRlX3B0cl0pLCAwLCBzaXplb2Yoc3RydWN0IGl3bF90eF9pbmZvKSk7Ci0JdHhxLT50eGJbcS0+d3JpdGVfcHRyXS5za2JbMF0gPSBza2I7CisJdHhxLT50eGJbcS0+d3JpdGVfcHRyXS5za2IgPSBza2I7CiAKIAkvKiBTZXQgdXAgZmlyc3QgZW1wdHkgZW50cnkgaW4gcXVldWUncyBhcnJheSBvZiBUeC9jbWQgYnVmZmVycyAqLwogCW91dF9jbWQgPSB0eHEtPmNtZFtxLT53cml0ZV9wdHJdOwpAQCAtNjk0LDggKzcwOCw4IEBACiAJdHhjbWRfcGh5cyA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsCiAJCQkJICAgICZvdXRfY21kLT5oZHIsIGxlbiwKIAkJCQkgICAgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKLQlwY2lfdW5tYXBfYWRkcl9zZXQob3V0X21ldGEsIG1hcHBpbmcsIHR4Y21kX3BoeXMpOwotCXBjaV91bm1hcF9sZW5fc2V0KG91dF9tZXRhLCBsZW4sIGxlbik7CisJZG1hX3VubWFwX2FkZHJfc2V0KG91dF9tZXRhLCBtYXBwaW5nLCB0eGNtZF9waHlzKTsKKwlkbWFfdW5tYXBfbGVuX3NldChvdXRfbWV0YSwgbGVuLCBsZW4pOwogCS8qIEFkZCBidWZmZXIgY29udGFpbmluZyBUeCBjb21tYW5kIGFuZCBNQUMoISkgaGVhZGVyIHRvIFRGRCdzCiAJICogZmlyc3QgZW50cnkgKi8KIAlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdHhxLApAQCAtNzAzLDggKzcxNyw2IEBACiAKIAlpZiAoIWllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKIAkJdHhxLT5uZWVkX3VwZGF0ZSA9IDE7Ci0JCWlmIChxYykKLQkJCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0uc2VxX251bWJlciA9IHNlcV9udW1iZXI7CiAJfSBlbHNlIHsKIAkJd2FpdF93cml0ZV9wdHIgPSAxOwogCQl0eHEtPm5lZWRfdXBkYXRlID0gMDsKQEAgLTkzOCw5ICs5NTAsMTIgQEAKIAkvKiBTdG9wIGVhY2ggVHggRE1BIGNoYW5uZWwsIGFuZCB3YWl0IGZvciBpdCB0byBiZSBpZGxlICovCiAJZm9yIChjaCA9IDA7IGNoIDwgcHJpdi0+aHdfcGFyYW1zLmRtYV9jaG5sX251bTsgY2grKykgewogCQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfVENTUl9DSE5MX1RYX0NPTkZJR19SRUcoY2gpLCAweDApOwotCQlpd2xfcG9sbF9kaXJlY3RfYml0KHByaXYsIEZIX1RTU1JfVFhfU1RBVFVTX1JFRywKKwkJaWYgKGl3bF9wb2xsX2RpcmVjdF9iaXQocHJpdiwgRkhfVFNTUl9UWF9TVEFUVVNfUkVHLAogCQkJCSAgICBGSF9UU1NSX1RYX1NUQVRVU19SRUdfTVNLX0NITkxfSURMRShjaCksCi0JCQkJICAgIDEwMDApOworCQkJCSAgICAxMDAwKSkKKwkJCUlXTF9FUlIocHJpdiwgIkZhaWxpbmcgb24gdGltZW91dCB3aGlsZSBzdG9wcGluZyIKKwkJCSAgICAiIERNQSBjaGFubmVsICVkIFsweCUwOHhdIiwgY2gsCisJCQkgICAgaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgRkhfVFNTUl9UWF9TVEFUVVNfUkVHKSk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIH0KQEAgLTEwMDksNiArMTAyNCw4IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOworCXRpZF9kYXRhID0gJnByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF07CiAJaWYgKHRpZF9kYXRhLT50ZmRzX2luX3F1ZXVlID09IDApIHsKIAkJSVdMX0RFQlVHX0hUKHByaXYsICJIVyBxdWV1ZSBpcyBlbXB0eVxuIik7CiAJCXRpZF9kYXRhLT5hZ2cuc3RhdGUgPSBJV0xfQUdHX09OOwpAQCAtMTAxOCw2ICsxMDM1LDcgQEAKIAkJCSAgICAgdGlkX2RhdGEtPnRmZHNfaW5fcXVldWUpOwogCQl0aWRfZGF0YS0+YWdnLnN0YXRlID0gSVdMX0VNUFRZSU5HX0hXX1FVRVVFX0FEREJBOwogCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEwNDAsMTEgKzEwNTgsMTQgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKKwogCWlmIChwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLmFnZy5zdGF0ZSA9PQogCQkJCUlXTF9FTVBUWUlOR19IV19RVUVVRV9BRERCQSkgewogCQlJV0xfREVCVUdfSFQocHJpdiwgIkFHRyBzdG9wIGJlZm9yZSBzZXR1cCBkb25lXG4iKTsKIAkJaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZSh2aWYsIHN0YS0+YWRkciwgdGlkKTsKIAkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cuc3RhdGUgPSBJV0xfQUdHX09GRjsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xMDYyLDEzICsxMDgzLDE3IEBACiAJCUlXTF9ERUJVR19IVChwcml2LCAiU3RvcHBpbmcgYSBub24gZW1wdHkgQUdHIEhXIFFVRVVFXG4iKTsKIAkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cuc3RhdGUgPQogCQkJCUlXTF9FTVBUWUlOR19IV19RVUVVRV9ERUxCQTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJSVdMX0RFQlVHX0hUKHByaXYsICJIVyBxdWV1ZSBpcyBlbXB0eVxuIik7CiAJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cuc3RhdGUgPSBJV0xfQUdHX09GRjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJLyogZG8gbm90IHJlc3RvcmUvc2F2ZSBpcnFzICovCisJc3Bpbl91bmxvY2soJnByaXYtPnN0YV9sb2NrKTsKKwlzcGluX2xvY2soJnByaXYtPmxvY2spOworCiAJLyoKIAkgKiB0aGUgb25seSByZWFzb24gdGhpcyBjYWxsIGNhbiBmYWlsIGlzIHF1ZXVlIG51bWJlciBvdXQgb2YgcmFuZ2UsCiAJICogd2hpY2ggY2FuIGhhcHBlbiBpZiB1Q29kZSBpcyByZWxvYWRlZCBhbmQgYWxsIHRoZSBzdGF0aW9uCkBAIC0xMDkyLDYgKzExMTcsOCBAQAogCXU4ICphZGRyID0gcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLmFkZHI7CiAJc3RydWN0IGl3bF90aWRfZGF0YSAqdGlkX2RhdGEgPSAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXTsKIAorCVdBUk5fT04oIXNwaW5faXNfbG9ja2VkKCZwcml2LT5zdGFfbG9jaykpOworCiAJc3dpdGNoIChwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLmFnZy5zdGF0ZSkgewogCWNhc2UgSVdMX0VNUFRZSU5HX0hXX1FVRVVFX0RFTEJBOgogCQkvKiBXZSBhcmUgcmVjbGFpbWluZyB0aGUgbGFzdCBwYWNrZXQgb2YgdGhlICovCkBAIC0xMTE2LDYgKzExNDMsNyBAQAogCQl9CiAJCWJyZWFrOwogCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0xMTU5LDEyICsxMTg3LDEyIEBACiAJICAgICBxLT5yZWFkX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT5yZWFkX3B0ciwgcS0+bl9iZCkpIHsKIAogCQl0eF9pbmZvID0gJnR4cS0+dHhiW3R4cS0+cS5yZWFkX3B0cl07Ci0JCWl3bGFnbl90eF9zdGF0dXMocHJpdiwgdHhfaW5mby0+c2tiWzBdKTsKKwkJaXdsYWduX3R4X3N0YXR1cyhwcml2LCB0eF9pbmZvLT5za2IpOwogCi0JCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXR4X2luZm8tPnNrYlswXS0+ZGF0YTsKKwkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopdHhfaW5mby0+c2tiLT5kYXRhOwogCQlpZiAoaGRyICYmIGllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItPmZyYW1lX2NvbnRyb2wpKQogCQkJbmZyZWVkKys7Ci0JCXR4X2luZm8tPnNrYlswXSA9IE5VTEw7CisJCXR4X2luZm8tPnNrYiA9IE5VTEw7CiAKIAkJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9pbnZhbF9ieXRlX2NudF90YmwpCiAJCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfaW52YWxfYnl0ZV9jbnRfdGJsKHByaXYsIHR4cSk7CkBAIC0xMTg4LDcgKzEyMTYsNyBAQAogCWludCBpLCBzaCwgYWNrOwogCXUxNiBzZXFfY3RsID0gbGUxNl90b19jcHUoYmFfcmVzcC0+c2VxX2N0bCk7CiAJdTE2IHNjZF9mbG93ID0gbGUxNl90b19jcHUoYmFfcmVzcC0+c2NkX2Zsb3cpOwotCXU2NCBiaXRtYXA7CisJdTY0IGJpdG1hcCwgc2VudF9iaXRtYXA7CiAJaW50IHN1Y2Nlc3NlcyA9IDA7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwogCkBAIC0xMjE2LDI0ICsxMjQ0LDI2IEBACiAKIAkvKiBjaGVjayBmb3Igc3VjY2VzcyBvciBmYWlsdXJlIGFjY29yZGluZyB0byB0aGUKIAkgKiB0cmFuc21pdHRlZCBiaXRtYXAgYW5kIGJsb2NrLWFjayBiaXRtYXAgKi8KLQliaXRtYXAgJj0gYWdnLT5iaXRtYXA7CisJc2VudF9iaXRtYXAgPSBiaXRtYXAgJiBhZ2ctPmJpdG1hcDsKIAogCS8qIEZvciBlYWNoIGZyYW1lIGF0dGVtcHRlZCBpbiBhZ2dyZWdhdGlvbiwKIAkgKiB1cGRhdGUgZHJpdmVyJ3MgcmVjb3JkIG9mIHR4IGZyYW1lJ3Mgc3RhdHVzLiAqLwotCWZvciAoaSA9IDA7IGkgPCBhZ2ctPmZyYW1lX2NvdW50IDsgaSsrKSB7Ci0JCWFjayA9IGJpdG1hcCAmICgxVUxMIDw8IGkpOwotCQlzdWNjZXNzZXMgKz0gISFhY2s7CisJaSA9IDA7CisJd2hpbGUgKHNlbnRfYml0bWFwKSB7CisJCWFjayA9IHNlbnRfYml0bWFwICYgMVVMTDsKKwkJc3VjY2Vzc2VzICs9IGFjazsKIAkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICIlcyBPTiBpPSVkIGlkeD0lZCByYXc9JWRcbiIsCiAJCQlhY2sgPyAiQUNLIiA6ICJOQUNLIiwgaSwgKGFnZy0+c3RhcnRfaWR4ICsgaSkgJiAweGZmLAogCQkJYWdnLT5zdGFydF9pZHggKyBpKTsKKwkJc2VudF9iaXRtYXAgPj49IDE7CisJCSsraTsKIAl9CiAKLQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihwcml2LT50eHFbc2NkX2Zsb3ddLnR4YlthZ2ctPnN0YXJ0X2lkeF0uc2tiWzBdKTsKKwlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihwcml2LT50eHFbc2NkX2Zsb3ddLnR4YlthZ2ctPnN0YXJ0X2lkeF0uc2tiKTsKIAltZW1zZXQoJmluZm8tPnN0YXR1cywgMCwgc2l6ZW9mKGluZm8tPnN0YXR1cykpOwogCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKIAlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVTsKIAlpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX2xlbiA9IHN1Y2Nlc3NlczsKLQlpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX21hcCA9IGJpdG1hcDsKIAlpbmZvLT5zdGF0dXMuYW1wZHVfbGVuID0gYWdnLT5mcmFtZV9jb3VudDsKIAlpd2xhZ25faHdyYXRlX3RvX3R4X2NvbnRyb2wocHJpdiwgYWdnLT5yYXRlX25fZmxhZ3MsIGluZm8pOwogCkBAIC0xMjgxLDYgKzEzMTEsNyBAQAogCWludCBpbmRleDsKIAlpbnQgc3RhX2lkOwogCWludCB0aWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qICJmbG93IiBjb3JyZXNwb25kcyB0byBUeCBxdWV1ZSAqLwogCXUxNiBzY2RfZmxvdyA9IGxlMTZfdG9fY3B1KGJhX3Jlc3AtPnNjZF9mbG93KTsKQEAgLTEzMDgsNyArMTMzOSw3IEBACiAJLyogRmluZCBpbmRleCBqdXN0IGJlZm9yZSBibG9jay1hY2sgd2luZG93ICovCiAJaW5kZXggPSBpd2xfcXVldWVfZGVjX3dyYXAoYmFfcmVzcF9zY2Rfc3NuICYgMHhmZiwgdHhxLT5xLm5fYmQpOwogCi0JLyogVE9ETzogTmVlZCB0byBnZXQgdGhpcyBjb3B5IG1vcmUgc2FmZWx5IC0gbm93IGdvb2QgZm9yIGRlYnVnICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAKIAlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIlJFUExZX0NPTVBSRVNTRURfQkEgWyVkXSBSZWNlaXZlZCBmcm9tICVwTSwgIgogCQkJICAgInN0YV9pZCA9ICVkXG4iLApAQCAtMTM0NCw0ICsxMzc1LDYgQEAKIAogCQlpd2xhZ25fdHhxX2NoZWNrX2VtcHR5KHByaXYsIHN0YV9pZCwgdGlkLCBzY2RfZmxvdyk7CiAJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi11Y29kZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXVjb2RlLmMKaW5kZXggNjM3Mjg2Yy4uNmY3NzQ0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXVjb2RlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXVjb2RlLmMKQEAgLTQyMywzICs0MjMsMTI2IEBACiAKIAlyZXR1cm4gMDsKIH0KKworCisvKioKKyAqIGl3bF92ZXJpZnlfaW5zdF9zcGFyc2UgLSB2ZXJpZnkgcnVudGltZSB1Q29kZSBpbWFnZSBpbiBjYXJkIHZzLiBob3N0LAorICogICB1c2luZyBzYW1wbGUgZGF0YSAxMDAgYnl0ZXMgYXBhcnQuICBJZiB0aGVzZSBzYW1wbGUgcG9pbnRzIGFyZSBnb29kLAorICogICBpdCdzIGEgcHJldHR5IGdvb2QgYmV0IHRoYXQgZXZlcnl0aGluZyBiZXR3ZWVuIHRoZW0gaXMgZ29vZCwgdG9vLgorICovCitzdGF0aWMgaW50IGl3bGNvcmVfdmVyaWZ5X2luc3Rfc3BhcnNlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgX19sZTMyICppbWFnZSwgdTMyIGxlbikKK3sKKwl1MzIgdmFsOworCWludCByZXQgPSAwOworCXUzMiBlcnJjbnQgPSAwOworCXUzMiBpOworCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgInVjb2RlIGluc3QgaW1hZ2Ugc2l6ZSBpcyAldVxuIiwgbGVuKTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMTAwLCBpbWFnZSArPSAxMDAvc2l6ZW9mKHUzMikpIHsKKwkJLyogcmVhZCBkYXRhIGNvbWVzIHRocm91Z2ggc2luZ2xlIHBvcnQsIGF1dG8taW5jciBhZGRyICovCisJCS8qIE5PVEU6IFVzZSB0aGUgZGVidWdsZXNzIHJlYWQgc28gd2UgZG9uJ3QgZmxvb2Qga2VybmVsIGxvZworCQkgKiBpZiBJV0xfRExfSU8gaXMgc2V0ICovCisJCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JBRERSLAorCQkJaSArIElXTEFHTl9SVENfSU5TVF9MT1dFUl9CT1VORCk7CisJCXZhbCA9IF9pd2xfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOworCQlpZiAodmFsICE9IGxlMzJfdG9fY3B1KCppbWFnZSkpIHsKKwkJCXJldCA9IC1FSU87CisJCQllcnJjbnQrKzsKKwkJCWlmIChlcnJjbnQgPj0gMykKKwkJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXdsY29yZV92ZXJpZnlfaW5zdF9mdWxsIC0gdmVyaWZ5IHJ1bnRpbWUgdUNvZGUgaW1hZ2UgaW4gY2FyZCB2cy4gaG9zdCwKKyAqICAgICBsb29raW5nIGF0IGFsbCBkYXRhLgorICovCitzdGF0aWMgaW50IGl3bF92ZXJpZnlfaW5zdF9mdWxsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgX19sZTMyICppbWFnZSwKKwkJCQkgdTMyIGxlbikKK3sKKwl1MzIgdmFsOworCXUzMiBzYXZlX2xlbiA9IGxlbjsKKwlpbnQgcmV0ID0gMDsKKwl1MzIgZXJyY250OworCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgInVjb2RlIGluc3QgaW1hZ2Ugc2l6ZSBpcyAldVxuIiwgbGVuKTsKKworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JBRERSLAorCQkJICAgSVdMQUdOX1JUQ19JTlNUX0xPV0VSX0JPVU5EKTsKKworCWVycmNudCA9IDA7CisJZm9yICg7IGxlbiA+IDA7IGxlbiAtPSBzaXplb2YodTMyKSwgaW1hZ2UrKykgeworCQkvKiByZWFkIGRhdGEgY29tZXMgdGhyb3VnaCBzaW5nbGUgcG9ydCwgYXV0by1pbmNyIGFkZHIgKi8KKwkJLyogTk9URTogVXNlIHRoZSBkZWJ1Z2xlc3MgcmVhZCBzbyB3ZSBkb24ndCBmbG9vZCBrZXJuZWwgbG9nCisJCSAqIGlmIElXTF9ETF9JTyBpcyBzZXQgKi8KKwkJdmFsID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7CisJCWlmICh2YWwgIT0gbGUzMl90b19jcHUoKmltYWdlKSkgeworCQkJSVdMX0VSUihwcml2LCAidUNvZGUgSU5TVCBzZWN0aW9uIGlzIGludmFsaWQgYXQgIgorCQkJCSAgIm9mZnNldCAweCV4LCBpcyAweCV4LCBzL2IgMHgleFxuIiwKKwkJCQkgIHNhdmVfbGVuIC0gbGVuLCB2YWwsIGxlMzJfdG9fY3B1KCppbWFnZSkpOworCQkJcmV0ID0gLUVJTzsKKwkJCWVycmNudCsrOworCQkJaWYgKGVycmNudCA+PSAyMCkKKwkJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghZXJyY250KQorCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkgICAgInVjb2RlIGltYWdlIGluIElOU1RSVUNUSU9OIG1lbW9yeSBpcyBnb29kXG4iKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXdsX3ZlcmlmeV91Y29kZSAtIGRldGVybWluZSB3aGljaCBpbnN0cnVjdGlvbiBpbWFnZSBpcyBpbiBTUkFNLAorICogICAgYW5kIHZlcmlmeSBpdHMgY29udGVudHMKKyAqLworaW50IGl3bF92ZXJpZnlfdWNvZGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCV9fbGUzMiAqaW1hZ2U7CisJdTMyIGxlbjsKKwlpbnQgcmV0OworCisJLyogVHJ5IGJvb3RzdHJhcCAqLworCWltYWdlID0gKF9fbGUzMiAqKXByaXYtPnVjb2RlX2Jvb3Qudl9hZGRyOworCWxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOworCXJldCA9IGl3bGNvcmVfdmVyaWZ5X2luc3Rfc3BhcnNlKHByaXYsIGltYWdlLCBsZW4pOworCWlmICghcmV0KSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJCb290c3RyYXAgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBUcnkgaW5pdGlhbGl6ZSAqLworCWltYWdlID0gKF9fbGUzMiAqKXByaXYtPnVjb2RlX2luaXQudl9hZGRyOworCWxlbiA9IHByaXYtPnVjb2RlX2luaXQubGVuOworCXJldCA9IGl3bGNvcmVfdmVyaWZ5X2luc3Rfc3BhcnNlKHByaXYsIGltYWdlLCBsZW4pOworCWlmICghcmV0KSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0aWFsaXplIHVDb2RlIGlzIGdvb2QgaW4gaW5zdCBTUkFNXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogVHJ5IHJ1bnRpbWUvcHJvdG9jb2wgKi8KKwlpbWFnZSA9IChfX2xlMzIgKilwcml2LT51Y29kZV9jb2RlLnZfYWRkcjsKKwlsZW4gPSBwcml2LT51Y29kZV9jb2RlLmxlbjsKKwlyZXQgPSBpd2xjb3JlX3ZlcmlmeV9pbnN0X3NwYXJzZShwcml2LCBpbWFnZSwgbGVuKTsKKwlpZiAoIXJldCkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSB1Q29kZSBpcyBnb29kIGluIGluc3QgU1JBTVxuIik7CisJCXJldHVybiAwOworCX0KKworCUlXTF9FUlIocHJpdiwgIk5PIFZBTElEIFVDT0RFIElNQUdFIElOIElOU1RSVUNUSU9OIFNSQU0hIVxuIik7CisKKwkvKiBTaW5jZSBub3RoaW5nIHNlZW1zIHRvIG1hdGNoLCBzaG93IGZpcnN0IHNldmVyYWwgZGF0YSBlbnRyaWVzIGluCisJICogaW5zdHJ1Y3Rpb24gU1JBTSwgc28gbWF5YmUgdmlzdWFsIGluc3BlY3Rpb24gd2lsbCBnaXZlIGEgY2x1ZS4KKwkgKiBTZWxlY3Rpb24gb2YgYm9vdHN0cmFwIGltYWdlICh2cy4gb3RoZXIgaW1hZ2VzKSBpcyBhcmJpdHJhcnkuICovCisJaW1hZ2UgPSAoX19sZTMyICopcHJpdi0+dWNvZGVfYm9vdC52X2FkZHI7CisJbGVuID0gcHJpdi0+dWNvZGVfYm9vdC5sZW47CisJcmV0ID0gaXdsX3ZlcmlmeV9pbnN0X2Z1bGwocHJpdiwgaW1hZ2UsIGxlbik7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwppbmRleCAyNGFmZjY1Li4zNTMzN2IxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMKQEAgLTI3LDYgKzI3LDggQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTEyMCw3ICsxMjIsNyBAQAogCSAgICAocHJpdi0+c3dpdGNoX3J4b24uY2hhbm5lbCAhPSBwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCkpIHsKIAkJSVdMX0RFQlVHXzExSChwcml2LCAiYWJvcnQgY2hhbm5lbCBzd2l0Y2ggb24gJWRcbiIsCiAJCSAgICAgIGxlMTZfdG9fY3B1KHByaXYtPnN3aXRjaF9yeG9uLmNoYW5uZWwpKTsKLQkJcHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzID0gZmFsc2U7CisJCWl3bF9jaHN3aXRjaF9kb25lKHByaXYsIGZhbHNlKTsKIAl9CiAKIAkvKiBJZiB3ZSBkb24ndCBuZWVkIHRvIHNlbmQgYSBmdWxsIFJYT04sIHdlIGNhbiB1c2UKQEAgLTI5Miw5ICsyOTQsNyBAQAogCQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCiAJCQkJCSAgaW50IGxlZnQpCiB7Ci0JaWYgKCFpd2xfaXNfYXNzb2NpYXRlZChwcml2KSB8fCAhcHJpdi0+aWJzc19iZWFjb24gfHwKLQkgICAgKChwcml2LT5pd19tb2RlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSAmJgotCSAgICAgKHByaXYtPml3X21vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApKSkKKwlpZiAoIXByaXYtPmlic3NfYmVhY29uKQogCQlyZXR1cm4gMDsKIAogCWlmIChwcml2LT5pYnNzX2JlYWNvbi0+bGVuID4gbGVmdCkKQEAgLTM2Nyw3ICszNjcsOCBAQAogCiAJLyogU2V0IHVwIHBhY2tldCByYXRlIGFuZCBmbGFncyAqLwogCXJhdGUgPSBpd2xfcmF0ZV9nZXRfbG93ZXN0X3BsY3AocHJpdik7Ci0JcHJpdi0+bWdtdF90eF9hbnQgPSBpd2xfdG9nZ2xlX3R4X2FudChwcml2LCBwcml2LT5tZ210X3R4X2FudCk7CisJcHJpdi0+bWdtdF90eF9hbnQgPSBpd2xfdG9nZ2xlX3R4X2FudChwcml2LCBwcml2LT5tZ210X3R4X2FudCwKKwkJCQkJICAgICAgcHJpdi0+aHdfcGFyYW1zLnZhbGlkX3R4X2FudCk7CiAJcmF0ZV9mbGFncyA9IGl3bF9hbnRfaWR4X3RvX2ZsYWdzKHByaXYtPm1nbXRfdHhfYW50KTsKIAlpZiAoKHJhdGUgPj0gSVdMX0ZJUlNUX0NDS19SQVRFKSAmJiAocmF0ZSA8PSBJV0xfTEFTVF9DQ0tfUkFURSkpCiAJCXJhdGVfZmxhZ3MgfD0gUkFURV9NQ1NfQ0NLX01TSzsKQEAgLTQ3NCwxOCArNDc1LDI1IEBACiAJLyogVW5tYXAgdHhfY21kICovCiAJaWYgKG51bV90YnMpCiAJCXBjaV91bm1hcF9zaW5nbGUoZGV2LAotCQkJCXBjaV91bm1hcF9hZGRyKCZ0eHEtPm1ldGFbaW5kZXhdLCBtYXBwaW5nKSwKLQkJCQlwY2lfdW5tYXBfbGVuKCZ0eHEtPm1ldGFbaW5kZXhdLCBsZW4pLAorCQkJCWRtYV91bm1hcF9hZGRyKCZ0eHEtPm1ldGFbaW5kZXhdLCBtYXBwaW5nKSwKKwkJCQlkbWFfdW5tYXBfbGVuKCZ0eHEtPm1ldGFbaW5kZXhdLCBsZW4pLAogCQkJCVBDSV9ETUFfQklESVJFQ1RJT05BTCk7CiAKIAkvKiBVbm1hcCBjaHVua3MsIGlmIGFueS4gKi8KLQlmb3IgKGkgPSAxOyBpIDwgbnVtX3RiczsgaSsrKSB7CisJZm9yIChpID0gMTsgaSA8IG51bV90YnM7IGkrKykKIAkJcGNpX3VubWFwX3NpbmdsZShkZXYsIGl3bF90ZmRfdGJfZ2V0X2FkZHIodGZkLCBpKSwKIAkJCQlpd2xfdGZkX3RiX2dldF9sZW4odGZkLCBpKSwgUENJX0RNQV9UT0RFVklDRSk7CiAKLQkJaWYgKHR4cS0+dHhiKSB7Ci0JCQlkZXZfa2ZyZWVfc2tiKHR4cS0+dHhiW3R4cS0+cS5yZWFkX3B0cl0uc2tiW2kgLSAxXSk7Ci0JCQl0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdLnNrYltpIC0gMV0gPSBOVUxMOworCS8qIGZyZWUgU0tCICovCisJaWYgKHR4cS0+dHhiKSB7CisJCXN0cnVjdCBza19idWZmICpza2I7CisKKwkJc2tiID0gdHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXS5za2I7CisKKwkJLyogY2FuIGJlIGNhbGxlZCBmcm9tIGlycXMtZGlzYWJsZWQgY29udGV4dCAqLworCQlpZiAoc2tiKSB7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJdHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXS5za2IgPSBOVUxMOwogCQl9CiAJfQogfQpAQCAtODUxLDYgKzg1OSwyNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBpd2xfYmdfdHhfZmx1c2goc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsX3ByaXYsIHR4X2ZsdXNoKTsKKworCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJcmV0dXJuOworCisJLyogZG8gbm90aGluZyBpZiByZi1raWxsIGlzIG9uICovCisJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpCisJCXJldHVybjsKKworCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT50eGZpZm9fZmx1c2gpIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgImRldmljZSByZXF1ZXN0OiBmbHVzaCBhbGwgdHggZnJhbWVzXG4iKTsKKwkJaXdsYWduX2Rldl90eGZpZm9fZmx1c2gocHJpdiwgSVdMX0RST1BfQUxMKTsKKwl9Cit9CisKIC8qKgogICogaXdsX3NldHVwX3J4X2hhbmRsZXJzIC0gSW5pdGlhbGl6ZSBSeCBoYW5kbGVyIGNhbGxiYWNrcwogICoKQEAgLTkzMyw2ICs5NTksOCBAQAogCQlmaWxsX3J4ID0gMTsKIAogCXdoaWxlIChpICE9IHIpIHsKKwkJaW50IGxlbjsKKwogCQlyeGIgPSByeHEtPnF1ZXVlW2ldOwogCiAJCS8qIElmIGFuIFJYQiBkb2Vzbid0IGhhdmUgYSBSeCBxdWV1ZSBzbG90IGFzc29jaWF0ZWQgd2l0aCBpdCwKQEAgLTk0Nyw4ICs5NzUsOSBAQAogCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCXBrdCA9IHJ4Yl9hZGRyKHJ4Yik7CiAKLQkJdHJhY2VfaXdsd2lmaV9kZXZfcngocHJpdiwgcGt0LAotCQkJbGUzMl90b19jcHUocGt0LT5sZW5fbl9mbGFncykgJiBGSF9SU0NTUl9GUkFNRV9TSVpFX01TSyk7CisJCWxlbiA9IGxlMzJfdG9fY3B1KHBrdC0+bGVuX25fZmxhZ3MpICYgRkhfUlNDU1JfRlJBTUVfU0laRV9NU0s7CisJCWxlbiArPSBzaXplb2YodTMyKTsgLyogYWNjb3VudCBmb3Igc3RhdHVzIHdvcmQgKi8KKwkJdHJhY2VfaXdsd2lmaV9kZXZfcngocHJpdiwgcGt0LCBsZW4pOwogCiAJCS8qIFJlY2xhaW0gYSBjb21tYW5kIGJ1ZmZlciBvbmx5IGlmIHRoaXMgcGFja2V0IGlzIGEgcmVzcG9uc2UKIAkJICogICB0byBhIChkcml2ZXItb3JpZ2luYXRlZCkgY29tbWFuZC4KQEAgLTE0NTAsMTMgKzE0NzksMTMgQEAKIAogCWFjdHVhbF9hY2tfY250X2RlbHRhID0KIAkJbGUzMl90b19jcHUocGt0LT51LnN0YXRzLnR4LmFjdHVhbF9hY2tfY250KSAtCi0JCWxlMzJfdG9fY3B1KHByaXYtPnN0YXRpc3RpY3MudHguYWN0dWFsX2Fja19jbnQpOworCQlsZTMyX3RvX2NwdShwcml2LT5fYWduLnN0YXRpc3RpY3MudHguYWN0dWFsX2Fja19jbnQpOwogCWV4cGVjdGVkX2Fja19jbnRfZGVsdGEgPQogCQlsZTMyX3RvX2NwdShwa3QtPnUuc3RhdHMudHguZXhwZWN0ZWRfYWNrX2NudCkgLQotCQlsZTMyX3RvX2NwdShwcml2LT5zdGF0aXN0aWNzLnR4LmV4cGVjdGVkX2Fja19jbnQpOworCQlsZTMyX3RvX2NwdShwcml2LT5fYWduLnN0YXRpc3RpY3MudHguZXhwZWN0ZWRfYWNrX2NudCk7CiAJYmFfdGltZW91dF9kZWx0YSA9CiAJCWxlMzJfdG9fY3B1KHBrdC0+dS5zdGF0cy50eC5hZ2cuYmFfdGltZW91dCkgLQotCQlsZTMyX3RvX2NwdShwcml2LT5zdGF0aXN0aWNzLnR4LmFnZy5iYV90aW1lb3V0KTsKKwkJbGUzMl90b19jcHUocHJpdi0+X2Fnbi5zdGF0aXN0aWNzLnR4LmFnZy5iYV90aW1lb3V0KTsKIAlpZiAoKHByaXYtPl9hZ24uYWdnX3RpZHNfY291bnQgPiAwKSAmJgogCSAgICAoZXhwZWN0ZWRfYWNrX2NudF9kZWx0YSA+IDApICYmCiAJICAgICgoKGFjdHVhbF9hY2tfY250X2RlbHRhICogMTAwKSAvIGV4cGVjdGVkX2Fja19jbnRfZGVsdGEpCkBAIC0xNDY2LDEyICsxNDk1LDE3IEBACiAJCQkJIiBleHBlY3RlZF9hY2tfY250ID0gJWRcbiIsCiAJCQkJYWN0dWFsX2Fja19jbnRfZGVsdGEsIGV4cGVjdGVkX2Fja19jbnRfZGVsdGEpOwogCi0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVR0ZTCisJCS8qCisJCSAqIFRoaXMgaXMgaWZkZWYnZWQgb24gREVCVUdGUyBiZWNhdXNlIG90aGVyd2lzZSB0aGUKKwkJICogc3RhdGlzdGljcyBhcmVuJ3QgYXZhaWxhYmxlLiBJZiBERUJVR0ZTIGlzIHNldCBidXQKKwkJICogREVCVUcgaXMgbm90LCB0aGVzZSB3aWxsIGp1c3QgY29tcGlsZSBvdXQuCisJCSAqLwogCQlJV0xfREVCVUdfUkFESU8ocHJpdiwgInJ4X2RldGVjdGVkX2NudCBkZWx0YSA9ICVkXG4iLAotCQkJCXByaXYtPmRlbHRhX3N0YXRpc3RpY3MudHgucnhfZGV0ZWN0ZWRfY250KTsKKwkJCQlwcml2LT5fYWduLmRlbHRhX3N0YXRpc3RpY3MudHgucnhfZGV0ZWN0ZWRfY250KTsKIAkJSVdMX0RFQlVHX1JBRElPKHByaXYsCiAJCQkJImFja19vcl9iYV90aW1lb3V0X2NvbGxpc2lvbiBkZWx0YSA9ICVkXG4iLAotCQkJCXByaXYtPmRlbHRhX3N0YXRpc3RpY3MudHguCisJCQkJcHJpdi0+X2Fnbi5kZWx0YV9zdGF0aXN0aWNzLnR4LgogCQkJCWFja19vcl9iYV90aW1lb3V0X2NvbGxpc2lvbik7CiAjZW5kaWYKIAkJSVdMX0RFQlVHX1JBRElPKHByaXYsICJhZ2cgYmFfdGltZW91dCBkZWx0YSA9ICVkXG4iLApAQCAtMTY1OCw2ICsxNjkyLDcgQEAKIAogc3RydWN0IGl3bGFnbl91Y29kZV9jYXBhYmlsaXRpZXMgewogCXUzMiBtYXhfcHJvYmVfbGVuZ3RoOworCXUzMiBzdGFuZGFyZF9waHlfY2FsaWJyYXRpb25fc2l6ZTsKIH07CiAKIHN0YXRpYyB2b2lkIGl3bF91Y29kZV9jYWxsYmFjayhjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnVjb2RlX3Jhdywgdm9pZCAqY29udGV4dCk7CkBAIC0xNjk0LDYgKzE3MjksOSBAQAogCXNpemVfdCBpbnN0X3NpemUsIGRhdGFfc2l6ZSwgaW5pdF9zaXplLCBpbml0X2RhdGFfc2l6ZSwgYm9vdF9zaXplOwogCiAJdTMyIGJ1aWxkOworCisJdTMyIGluaXRfZXZ0bG9nX3B0ciwgaW5pdF9ldnRsb2dfc2l6ZSwgaW5pdF9lcnJsb2dfcHRyOworCXUzMiBpbnN0X2V2dGxvZ19wdHIsIGluc3RfZXZ0bG9nX3NpemUsIGluc3RfZXJybG9nX3B0cjsKIH07CiAKIHN0YXRpYyBpbnQgaXdsYWduX2xvYWRfbGVnYWN5X2Zpcm13YXJlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKQEAgLTE3ODcsMTIgKzE4MjUsMjAgQEAKIAljb25zdCB1OCAqZGF0YTsKIAlpbnQgd2FudGVkX2FsdGVybmF0aXZlID0gaXdsYWduX3dhbnRlZF91Y29kZV9hbHRlcm5hdGl2ZSwgdG1wOwogCXU2NCBhbHRlcm5hdGl2ZXM7CisJdTMyIHRsdl9sZW47CisJZW51bSBpd2xfdWNvZGVfdGx2X3R5cGUgdGx2X3R5cGU7CisJY29uc3QgdTggKnRsdl9kYXRhOwogCi0JaWYgKGxlbiA8IHNpemVvZigqdWNvZGUpKQorCWlmIChsZW4gPCBzaXplb2YoKnVjb2RlKSkgeworCQlJV0xfRVJSKHByaXYsICJ1Q29kZSBoYXMgaW52YWxpZCBsZW5ndGg6ICV6ZFxuIiwgbGVuKTsKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQogCi0JaWYgKHVjb2RlLT5tYWdpYyAhPSBjcHVfdG9fbGUzMihJV0xfVExWX1VDT0RFX01BR0lDKSkKKwlpZiAodWNvZGUtPm1hZ2ljICE9IGNwdV90b19sZTMyKElXTF9UTFZfVUNPREVfTUFHSUMpKSB7CisJCUlXTF9FUlIocHJpdiwgImludmFsaWQgdUNvZGUgbWFnaWM6IDBYJXhcbiIsCisJCQlsZTMyX3RvX2NwdSh1Y29kZS0+bWFnaWMpKTsKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJLyoKIAkgKiBDaGVjayB3aGljaCBhbHRlcm5hdGl2ZXMgYXJlIHByZXNlbnQsIGFuZCAiZG93bmdyYWRlIgpAQCAtMTgxOCwxMCArMTg2NCw3IEBACiAJbGVuIC09IHNpemVvZigqdWNvZGUpOwogCiAJd2hpbGUgKGxlbiA+PSBzaXplb2YoKnRsdikpIHsKLQkJdTMyIHRsdl9sZW47Ci0JCWVudW0gaXdsX3Vjb2RlX3Rsdl90eXBlIHRsdl90eXBlOwogCQl1MTYgdGx2X2FsdDsKLQkJY29uc3QgdTggKnRsdl9kYXRhOwogCiAJCWxlbiAtPSBzaXplb2YoKnRsdik7CiAJCXRsdiA9ICh2b2lkICopZGF0YTsKQEAgLTE4MzEsOCArMTg3NCwxMSBAQAogCQl0bHZfYWx0ID0gbGUxNl90b19jcHUodGx2LT5hbHRlcm5hdGl2ZSk7CiAJCXRsdl9kYXRhID0gdGx2LT5kYXRhOwogCi0JCWlmIChsZW4gPCB0bHZfbGVuKQorCQlpZiAobGVuIDwgdGx2X2xlbikgeworCQkJSVdMX0VSUihwcml2LCAiaW52YWxpZCBUTFYgbGVuOiAlemQvJXVcbiIsCisJCQkJbGVuLCB0bHZfbGVuKTsKIAkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJCWxlbiAtPSBBTElHTih0bHZfbGVuLCA0KTsKIAkJZGF0YSArPSBzaXplb2YoKnRsdikgKyBBTElHTih0bHZfbGVuLCA0KTsKIApAQCAtMTg2NiwyMCArMTkxMiw3NyBAQAogCQkJcGllY2VzLT5ib290X3NpemUgPSB0bHZfbGVuOwogCQkJYnJlYWs7CiAJCWNhc2UgSVdMX1VDT0RFX1RMVl9QUk9CRV9NQVhfTEVOOgotCQkJaWYgKHRsdl9sZW4gIT0gNCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmICh0bHZfbGVuICE9IHNpemVvZih1MzIpKQorCQkJCWdvdG8gaW52YWxpZF90bHZfbGVuOwogCQkJY2FwYS0+bWF4X3Byb2JlX2xlbmd0aCA9Ci0JCQkJbGUzMl90b19jcHVwKChfX2xlMzIgKil0bHZfZGF0YSk7CisJCQkJCWxlMzJfdG9fY3B1cCgoX19sZTMyICopdGx2X2RhdGEpOworCQkJYnJlYWs7CisJCWNhc2UgSVdMX1VDT0RFX1RMVl9JTklUX0VWVExPR19QVFI6CisJCQlpZiAodGx2X2xlbiAhPSBzaXplb2YodTMyKSkKKwkJCQlnb3RvIGludmFsaWRfdGx2X2xlbjsKKwkJCXBpZWNlcy0+aW5pdF9ldnRsb2dfcHRyID0KKwkJCQkJbGUzMl90b19jcHVwKChfX2xlMzIgKil0bHZfZGF0YSk7CisJCQlicmVhazsKKwkJY2FzZSBJV0xfVUNPREVfVExWX0lOSVRfRVZUTE9HX1NJWkU6CisJCQlpZiAodGx2X2xlbiAhPSBzaXplb2YodTMyKSkKKwkJCQlnb3RvIGludmFsaWRfdGx2X2xlbjsKKwkJCXBpZWNlcy0+aW5pdF9ldnRsb2dfc2l6ZSA9CisJCQkJCWxlMzJfdG9fY3B1cCgoX19sZTMyICopdGx2X2RhdGEpOworCQkJYnJlYWs7CisJCWNhc2UgSVdMX1VDT0RFX1RMVl9JTklUX0VSUkxPR19QVFI6CisJCQlpZiAodGx2X2xlbiAhPSBzaXplb2YodTMyKSkKKwkJCQlnb3RvIGludmFsaWRfdGx2X2xlbjsKKwkJCXBpZWNlcy0+aW5pdF9lcnJsb2dfcHRyID0KKwkJCQkJbGUzMl90b19jcHVwKChfX2xlMzIgKil0bHZfZGF0YSk7CisJCQlicmVhazsKKwkJY2FzZSBJV0xfVUNPREVfVExWX1JVTlRfRVZUTE9HX1BUUjoKKwkJCWlmICh0bHZfbGVuICE9IHNpemVvZih1MzIpKQorCQkJCWdvdG8gaW52YWxpZF90bHZfbGVuOworCQkJcGllY2VzLT5pbnN0X2V2dGxvZ19wdHIgPQorCQkJCQlsZTMyX3RvX2NwdXAoKF9fbGUzMiAqKXRsdl9kYXRhKTsKKwkJCWJyZWFrOworCQljYXNlIElXTF9VQ09ERV9UTFZfUlVOVF9FVlRMT0dfU0laRToKKwkJCWlmICh0bHZfbGVuICE9IHNpemVvZih1MzIpKQorCQkJCWdvdG8gaW52YWxpZF90bHZfbGVuOworCQkJcGllY2VzLT5pbnN0X2V2dGxvZ19zaXplID0KKwkJCQkJbGUzMl90b19jcHVwKChfX2xlMzIgKil0bHZfZGF0YSk7CisJCQlicmVhazsKKwkJY2FzZSBJV0xfVUNPREVfVExWX1JVTlRfRVJSTE9HX1BUUjoKKwkJCWlmICh0bHZfbGVuICE9IHNpemVvZih1MzIpKQorCQkJCWdvdG8gaW52YWxpZF90bHZfbGVuOworCQkJcGllY2VzLT5pbnN0X2VycmxvZ19wdHIgPQorCQkJCQlsZTMyX3RvX2NwdXAoKF9fbGUzMiAqKXRsdl9kYXRhKTsKKwkJCWJyZWFrOworCQljYXNlIElXTF9VQ09ERV9UTFZfRU5IQU5DRV9TRU5TX1RCTDoKKwkJCWlmICh0bHZfbGVuKQorCQkJCWdvdG8gaW52YWxpZF90bHZfbGVuOworCQkJcHJpdi0+ZW5oYW5jZV9zZW5zaXRpdml0eV90YWJsZSA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSBJV0xfVUNPREVfVExWX1BIWV9DQUxJQlJBVElPTl9TSVpFOgorCQkJaWYgKHRsdl9sZW4gIT0gc2l6ZW9mKHUzMikpCisJCQkJZ290byBpbnZhbGlkX3Rsdl9sZW47CisJCQljYXBhLT5zdGFuZGFyZF9waHlfY2FsaWJyYXRpb25fc2l6ZSA9CisJCQkJCWxlMzJfdG9fY3B1cCgoX19sZTMyICopdGx2X2RhdGEpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CisJCQlJV0xfV0FSTihwcml2LCAidW5rbm93biBUTFY6ICVkXG4iLCB0bHZfdHlwZSk7CiAJCQlicmVhazsKIAkJfQogCX0KIAotCWlmIChsZW4pCisJaWYgKGxlbikgeworCQlJV0xfRVJSKHByaXYsICJpbnZhbGlkIFRMViBhZnRlciBwYXJzaW5nOiAlemRcbiIsIGxlbik7CisJCWl3bF9wcmludF9oZXhfZHVtcChwcml2LCBJV0xfRExfRlcsICh1OCAqKWRhdGEsIGxlbik7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAogCXJldHVybiAwOworCisgaW52YWxpZF90bHZfbGVuOgorCUlXTF9FUlIocHJpdiwgIlRMViAlZCBoYXMgaW52YWxpZCBzaXplOiAldVxuIiwgdGx2X3R5cGUsIHRsdl9sZW4pOworCWl3bF9wcmludF9oZXhfZHVtcChwcml2LCBJV0xfRExfRlcsIHRsdl9kYXRhLCB0bHZfbGVuKTsKKworCXJldHVybiAtRUlOVkFMOwogfQogCiAvKioKQEAgLTE5MDEsNiArMjAwNCw4IEBACiAJdTMyIGJ1aWxkOwogCXN0cnVjdCBpd2xhZ25fdWNvZGVfY2FwYWJpbGl0aWVzIHVjb2RlX2NhcGEgPSB7CiAJCS5tYXhfcHJvYmVfbGVuZ3RoID0gMjAwLAorCQkuc3RhbmRhcmRfcGh5X2NhbGlicmF0aW9uX3NpemUgPQorCQkJSVdMX01BWF9TVEFOREFSRF9QSFlfQ0FMSUJSQVRFX1RCTF9TSVpFLAogCX07CiAKIAltZW1zZXQoJnBpZWNlcywgMCwgc2l6ZW9mKHBpZWNlcykpOwpAQCAtMjA2Myw2ICsyMTY4LDI2IEBACiAJCQlnb3RvIGVycl9wY2lfYWxsb2M7CiAJfQogCisJLyogTm93IHRoYXQgd2UgY2FuIG5vIGxvbmdlciBmYWlsLCBjb3B5IGluZm9ybWF0aW9uICovCisKKwkvKgorCSAqIFRoZSAoc2l6ZSAtIDE2KSAvIDEyIGZvcm11bGEgaXMgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIHJlY29yZGVkCisJICogZm9yIGVhY2ggZXZlbnQsIHdoaWNoIGlzIG9mIG1vZGUgMSAoaW5jbHVkaW5nIHRpbWVzdGFtcCkgZm9yIGFsbAorCSAqIG5ldyBtaWNyb2NvZGVzIHRoYXQgaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uLgorCSAqLworCXByaXYtPl9hZ24uaW5pdF9ldnRsb2dfcHRyID0gcGllY2VzLmluaXRfZXZ0bG9nX3B0cjsKKwlpZiAocGllY2VzLmluaXRfZXZ0bG9nX3NpemUpCisJCXByaXYtPl9hZ24uaW5pdF9ldnRsb2dfc2l6ZSA9IChwaWVjZXMuaW5pdF9ldnRsb2dfc2l6ZSAtIDE2KS8xMjsKKwllbHNlCisJCXByaXYtPl9hZ24uaW5pdF9ldnRsb2dfc2l6ZSA9IHByaXYtPmNmZy0+bWF4X2V2ZW50X2xvZ19zaXplOworCXByaXYtPl9hZ24uaW5pdF9lcnJsb2dfcHRyID0gcGllY2VzLmluaXRfZXJybG9nX3B0cjsKKwlwcml2LT5fYWduLmluc3RfZXZ0bG9nX3B0ciA9IHBpZWNlcy5pbnN0X2V2dGxvZ19wdHI7CisJaWYgKHBpZWNlcy5pbnN0X2V2dGxvZ19zaXplKQorCQlwcml2LT5fYWduLmluc3RfZXZ0bG9nX3NpemUgPSAocGllY2VzLmluc3RfZXZ0bG9nX3NpemUgLSAxNikvMTI7CisJZWxzZQorCQlwcml2LT5fYWduLmluc3RfZXZ0bG9nX3NpemUgPSBwcml2LT5jZmctPm1heF9ldmVudF9sb2dfc2l6ZTsKKwlwcml2LT5fYWduLmluc3RfZXJybG9nX3B0ciA9IHBpZWNlcy5pbnN0X2VycmxvZ19wdHI7CisKIAkvKiBDb3B5IGltYWdlcyBpbnRvIGJ1ZmZlcnMgZm9yIGNhcmQncyBidXMtbWFzdGVyIHJlYWRzIC4uLiAqLwogCiAJLyogUnVudGltZSBpbnN0cnVjdGlvbnMgKGZpcnN0IGJsb2NrIG9mIGRhdGEgaW4gZmlsZSkgKi8KQEAgLTIxMDIsNiArMjIyNywyMCBAQAogCQkJcGllY2VzLmJvb3Rfc2l6ZSk7CiAJbWVtY3B5KHByaXYtPnVjb2RlX2Jvb3Qudl9hZGRyLCBwaWVjZXMuYm9vdCwgcGllY2VzLmJvb3Rfc2l6ZSk7CiAKKwkvKgorCSAqIGZpZ3VyZSBvdXQgdGhlIG9mZnNldCBvZiBjaGFpbiBub2lzZSByZXNldCBhbmQgZ2FpbiBjb21tYW5kcworCSAqIGJhc2Ugb24gdGhlIHNpemUgb2Ygc3RhbmRhcmQgcGh5IGNhbGlicmF0aW9uIGNvbW1hbmRzIHRhYmxlIHNpemUKKwkgKi8KKwlpZiAodWNvZGVfY2FwYS5zdGFuZGFyZF9waHlfY2FsaWJyYXRpb25fc2l6ZSA+CisJICAgIElXTF9NQVhfUEhZX0NBTElCUkFURV9UQkxfU0laRSkKKwkJdWNvZGVfY2FwYS5zdGFuZGFyZF9waHlfY2FsaWJyYXRpb25fc2l6ZSA9CisJCQlJV0xfTUFYX1NUQU5EQVJEX1BIWV9DQUxJQlJBVEVfVEJMX1NJWkU7CisKKwlwcml2LT5fYWduLnBoeV9jYWxpYl9jaGFpbl9ub2lzZV9yZXNldF9jbWQgPQorCQl1Y29kZV9jYXBhLnN0YW5kYXJkX3BoeV9jYWxpYnJhdGlvbl9zaXplOworCXByaXYtPl9hZ24ucGh5X2NhbGliX2NoYWluX25vaXNlX2dhaW5fY21kID0KKwkJdWNvZGVfY2FwYS5zdGFuZGFyZF9waHlfY2FsaWJyYXRpb25fc2l6ZSArIDE7CisKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAkgKiBUaGlzIGlzIHN0aWxsIHBhcnQgb2YgcHJvYmUoKSBpbiBhIHNlbnNlLi4uCiAJICoKQEAgLTIxNzIsMTcgKzIzMTEsNDEgQEAKIAkiREVCVUdfMSIsCiAJIkRFQlVHXzIiLAogCSJERUJVR18zIiwKLQkiQURWQU5DRUQgU1lTQVNTRVJUIgogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgKmRlc2NfbG9va3VwKGludCBpKQorc3RhdGljIHN0cnVjdCB7IGNoYXIgKm5hbWU7IHU4IG51bTsgfSBhZHZhbmNlZF9sb29rdXBbXSA9IHsKKwl7ICJOTUlfSU5URVJSVVBUX1dERyIsIDB4MzQgfSwKKwl7ICJTWVNBU1NFUlQiLCAweDM1IH0sCisJeyAiVUNPREVfVkVSU0lPTl9NSVNNQVRDSCIsIDB4MzcgfSwKKwl7ICJCQURfQ09NTUFORCIsIDB4MzggfSwKKwl7ICJOTUlfSU5URVJSVVBUX0RBVEFfQUNUSU9OX1BUIiwgMHgzQyB9LAorCXsgIkZBVEFMX0VSUk9SIiwgMHgzRCB9LAorCXsgIk5NSV9UUk1fSFdfRVJSIiwgMHg0NiB9LAorCXsgIk5NSV9JTlRFUlJVUFRfVFJNIiwgMHg0QyB9LAorCXsgIk5NSV9JTlRFUlJVUFRfQlJFQUtfUE9JTlQiLCAweDU0IH0sCisJeyAiTk1JX0lOVEVSUlVQVF9XREdfUlhGX0ZVTEwiLCAweDVDIH0sCisJeyAiTk1JX0lOVEVSUlVQVF9XREdfTk9fUkJEX1JYRl9GVUxMIiwgMHg2NCB9LAorCXsgIk5NSV9JTlRFUlJVUFRfSE9TVCIsIDB4NjYgfSwKKwl7ICJOTUlfSU5URVJSVVBUX0FDVElPTl9QVCIsIDB4N0MgfSwKKwl7ICJOTUlfSU5URVJSVVBUX1VOS05PV04iLCAweDg0IH0sCisJeyAiTk1JX0lOVEVSUlVQVF9JTlNUX0FDVElPTl9QVCIsIDB4ODYgfSwKKwl7ICJBRFZBTkNFRF9TWVNBU1NFUlQiLCAwIH0sCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqZGVzY19sb29rdXAodTMyIG51bSkKIHsKLQlpbnQgbWF4ID0gQVJSQVlfU0laRShkZXNjX2xvb2t1cF90ZXh0KSAtIDE7CisJaW50IGk7CisJaW50IG1heCA9IEFSUkFZX1NJWkUoZGVzY19sb29rdXBfdGV4dCk7CiAKLQlpZiAoaSA8IDAgfHwgaSA+IG1heCkKLQkJaSA9IG1heDsKKwlpZiAobnVtIDwgbWF4KQorCQlyZXR1cm4gZGVzY19sb29rdXBfdGV4dFtudW1dOwogCi0JcmV0dXJuIGRlc2NfbG9va3VwX3RleHRbaV07CisJbWF4ID0gQVJSQVlfU0laRShhZHZhbmNlZF9sb29rdXApIC0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgbWF4OyBpKyspIHsKKwkJaWYgKGFkdmFuY2VkX2xvb2t1cFtpXS5udW0gPT0gbnVtKQorCQkJYnJlYWs7OworCX0KKwlyZXR1cm4gYWR2YW5jZWRfbG9va3VwW2ldLm5hbWU7CiB9CiAKICNkZWZpbmUgRVJST1JfU1RBUlRfT0ZGU0VUICAoMSAqIHNpemVvZih1MzIpKQpAQCAtMjE5NSwxMCArMjM1OCwxNSBAQAogCXUzMiBibGluazEsIGJsaW5rMiwgaWxpbmsxLCBpbGluazI7CiAJdTMyIHBjLCBoY21kOwogCi0JaWYgKHByaXYtPnVjb2RlX3R5cGUgPT0gVUNPREVfSU5JVCkKKwlpZiAocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9JTklUKSB7CiAJCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlX2luaXQuZXJyb3JfZXZlbnRfdGFibGVfcHRyKTsKLQllbHNlCisJCWlmICghYmFzZSkKKwkJCWJhc2UgPSBwcml2LT5fYWduLmluaXRfZXJybG9nX3B0cjsKKwl9IGVsc2UgewogCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZS5lcnJvcl9ldmVudF90YWJsZV9wdHIpOworCQlpZiAoIWJhc2UpCisJCQliYXNlID0gcHJpdi0+X2Fnbi5pbnN0X2VycmxvZ19wdHI7CisJfQogCiAJaWYgKCFwcml2LT5jZmctPm9wcy0+bGliLT5pc192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7CiAJCUlXTF9FUlIocHJpdiwKQEAgLTIyMzAsOSArMjM5OCw5IEBACiAJdHJhY2VfaXdsd2lmaV9kZXZfdWNvZGVfZXJyb3IocHJpdiwgZGVzYywgdGltZSwgZGF0YTEsIGRhdGEyLCBsaW5lLAogCQkJCSAgICAgIGJsaW5rMSwgYmxpbmsyLCBpbGluazEsIGlsaW5rMik7CiAKLQlJV0xfRVJSKHByaXYsICJEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWUgICAgICAgIgorCUlXTF9FUlIocHJpdiwgIkRlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZSAgICAgICAiCiAJCSJkYXRhMSAgICAgIGRhdGEyICAgICAgbGluZVxuIik7Ci0JSVdMX0VSUihwcml2LCAiJS0yOHMgKCMlMDJkKSAlMDEwdSAweCUwOFggMHglMDhYICV1XG4iLAorCUlXTF9FUlIocHJpdiwgIiUtMjhzICgweCUwNFgpICUwMTB1IDB4JTA4WCAweCUwOFggJXVcbiIsCiAJCWRlc2NfbG9va3VwKGRlc2MpLCBkZXNjLCB0aW1lLCBkYXRhMSwgZGF0YTIsIGxpbmUpOwogCUlXTF9FUlIocHJpdiwgInBjICAgICAgYmxpbmsxICBibGluazIgIGlsaW5rMSAgaWxpbmsyICBoY21kXG4iKTsKIAlJV0xfRVJSKHByaXYsICIweCUwNVggMHglMDVYIDB4JTA1WCAweCUwNVggMHglMDVYIDB4JTA1WFxuIiwKQEAgLTIyNTgsMTAgKzI0MjYsMTYgQEAKIAogCWlmIChudW1fZXZlbnRzID09IDApCiAJCXJldHVybiBwb3M7Ci0JaWYgKHByaXYtPnVjb2RlX3R5cGUgPT0gVUNPREVfSU5JVCkKKworCWlmIChwcml2LT51Y29kZV90eXBlID09IFVDT0RFX0lOSVQpIHsKIAkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC5sb2dfZXZlbnRfdGFibGVfcHRyKTsKLQllbHNlCisJCWlmICghYmFzZSkKKwkJCWJhc2UgPSBwcml2LT5fYWduLmluaXRfZXZ0bG9nX3B0cjsKKwl9IGVsc2UgewogCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZS5sb2dfZXZlbnRfdGFibGVfcHRyKTsKKwkJaWYgKCFiYXNlKQorCQkJYmFzZSA9IHByaXYtPl9hZ24uaW5zdF9ldnRsb2dfcHRyOworCX0KIAogCWlmIChtb2RlID09IDApCiAJCWV2ZW50X3NpemUgPSAyICogc2l6ZW9mKHUzMik7CkBAIC0yMzYzLDEzICsyNTM3LDIxIEBACiAJdTMyIG51bV93cmFwczsgIC8qICMgdGltZXMgdUNvZGUgd3JhcHBlZCB0byB0b3Agb2YgbG9nICovCiAJdTMyIG5leHRfZW50cnk7IC8qIGluZGV4IG9mIG5leHQgZW50cnkgdG8gYmUgd3JpdHRlbiBieSB1Q29kZSAqLwogCXUzMiBzaXplOyAgICAgICAvKiAjIGVudHJpZXMgdGhhdCB3ZSdsbCBwcmludCAqLworCXUzMiBsb2dzaXplOwogCWludCBwb3MgPSAwOwogCXNpemVfdCBidWZzeiA9IDA7CiAKLQlpZiAocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9JTklUKQorCWlmIChwcml2LT51Y29kZV90eXBlID09IFVDT0RFX0lOSVQpIHsKIAkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC5sb2dfZXZlbnRfdGFibGVfcHRyKTsKLQllbHNlCisJCWxvZ3NpemUgPSBwcml2LT5fYWduLmluaXRfZXZ0bG9nX3NpemU7CisJCWlmICghYmFzZSkKKwkJCWJhc2UgPSBwcml2LT5fYWduLmluaXRfZXZ0bG9nX3B0cjsKKwl9IGVsc2UgewogCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZS5sb2dfZXZlbnRfdGFibGVfcHRyKTsKKwkJbG9nc2l6ZSA9IHByaXYtPl9hZ24uaW5zdF9ldnRsb2dfc2l6ZTsKKwkJaWYgKCFiYXNlKQorCQkJYmFzZSA9IHByaXYtPl9hZ24uaW5zdF9ldnRsb2dfcHRyOworCX0KIAogCWlmICghcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+aXNfdmFsaWRfcnRjX2RhdGFfYWRkcihiYXNlKSkgewogCQlJV0xfRVJSKHByaXYsCkBAIC0yMzg0LDE2ICsyNTY2LDE2IEBACiAJbnVtX3dyYXBzID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArICgyICogc2l6ZW9mKHUzMikpKTsKIAluZXh0X2VudHJ5ID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArICgzICogc2l6ZW9mKHUzMikpKTsKIAotCWlmIChjYXBhY2l0eSA+IHByaXYtPmNmZy0+bWF4X2V2ZW50X2xvZ19zaXplKSB7CisJaWYgKGNhcGFjaXR5ID4gbG9nc2l6ZSkgewogCQlJV0xfRVJSKHByaXYsICJMb2cgY2FwYWNpdHkgJWQgaXMgYm9ndXMsIGxpbWl0IHRvICVkIGVudHJpZXNcbiIsCi0JCQljYXBhY2l0eSwgcHJpdi0+Y2ZnLT5tYXhfZXZlbnRfbG9nX3NpemUpOwotCQljYXBhY2l0eSA9IHByaXYtPmNmZy0+bWF4X2V2ZW50X2xvZ19zaXplOworCQkJY2FwYWNpdHksIGxvZ3NpemUpOworCQljYXBhY2l0eSA9IGxvZ3NpemU7CiAJfQogCi0JaWYgKG5leHRfZW50cnkgPiBwcml2LT5jZmctPm1heF9ldmVudF9sb2dfc2l6ZSkgeworCWlmIChuZXh0X2VudHJ5ID4gbG9nc2l6ZSkgewogCQlJV0xfRVJSKHByaXYsICJMb2cgd3JpdGUgaW5kZXggJWQgaXMgYm9ndXMsIGxpbWl0IHRvICVkXG4iLAotCQkJbmV4dF9lbnRyeSwgcHJpdi0+Y2ZnLT5tYXhfZXZlbnRfbG9nX3NpemUpOwotCQluZXh0X2VudHJ5ID0gcHJpdi0+Y2ZnLT5tYXhfZXZlbnRfbG9nX3NpemU7CisJCQluZXh0X2VudHJ5LCBsb2dzaXplKTsKKwkJbmV4dF9lbnRyeSA9IGxvZ3NpemU7CiAJfQogCiAJc2l6ZSA9IG51bV93cmFwcyA/IGNhcGFjaXR5IDogbmV4dF9lbnRyeTsKQEAgLTI1MTgsOCArMjcwMCw2IEBACiAKIAkJaWYgKHByaXYtPmNmZy0+b3BzLT5oY21kLT5zZXRfcnhvbl9jaGFpbikKIAkJCXByaXYtPmNmZy0+b3BzLT5oY21kLT5zZXRfcnhvbl9jaGFpbihwcml2KTsKLQotCQltZW1jcHkocHJpdi0+c3RhZ2luZ19yeG9uLm5vZGVfYWRkciwgcHJpdi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKIAl9CiAKIAkvKiBDb25maWd1cmUgQmx1ZXRvb3RoIGRldmljZSBjb2V4aXN0ZW5jZSBzdXBwb3J0ICovCkBAIC0yODQzLDkgKzMwMjMsMTcgQEAKIAl9CiAKIAlpZiAocHJpdi0+c3RhcnRfY2FsaWIpIHsKLQkJaXdsX2NoYWluX25vaXNlX2NhbGlicmF0aW9uKHByaXYsICZwcml2LT5zdGF0aXN0aWNzKTsKLQotCQlpd2xfc2Vuc2l0aXZpdHlfY2FsaWJyYXRpb24ocHJpdiwgJnByaXYtPnN0YXRpc3RpY3MpOworCQlpZiAocHJpdi0+Y2ZnLT5idF9zdGF0aXN0aWNzKSB7CisJCQlpd2xfY2hhaW5fbm9pc2VfY2FsaWJyYXRpb24ocHJpdiwKKwkJCQkJKHZvaWQgKikmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzX2J0KTsKKwkJCWl3bF9zZW5zaXRpdml0eV9jYWxpYnJhdGlvbihwcml2LAorCQkJCQkodm9pZCAqKSZwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQpOworCQl9IGVsc2UgeworCQkJaXdsX2NoYWluX25vaXNlX2NhbGlicmF0aW9uKHByaXYsCisJCQkJCSh2b2lkICopJnByaXYtPl9hZ24uc3RhdGlzdGljcyk7CisJCQlpd2xfc2Vuc2l0aXZpdHlfY2FsaWJyYXRpb24ocHJpdiwKKwkJCQkJKHZvaWQgKikmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzKTsKKwkJfQogCX0KIAogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwpAQCAtMjkzNCwyMCArMzEyMiwxNiBAQAogCUlXTF9ERUJVR19BU1NPQyhwcml2LCAiYXNzb2MgaWQgJWQgYmVhY29uIGludGVydmFsICVkXG4iLAogCQkJdmlmLT5ic3NfY29uZi5haWQsIHZpZi0+YnNzX2NvbmYuYmVhY29uX2ludCk7CiAKLQlpZiAodmlmLT5ic3NfY29uZi5hc3NvY19jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFKQorCWlmICh2aWYtPmJzc19jb25mLnVzZV9zaG9ydF9wcmVhbWJsZSkKIAkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1BSRUFNQkxFX01TSzsKIAllbHNlCiAJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+UlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOwogCiAJaWYgKHByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmIFJYT05fRkxHX0JBTkRfMjRHX01TSykgewotCQlpZiAodmlmLT5ic3NfY29uZi5hc3NvY19jYXBhYmlsaXR5ICYKLQkJCQkJV0xBTl9DQVBBQklMSVRZX1NIT1JUX1NMT1RfVElNRSkKKwkJaWYgKHZpZi0+YnNzX2NvbmYudXNlX3Nob3J0X3Nsb3QpCiAJCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7CiAJCWVsc2UKIAkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+UlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7Ci0KLQkJaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+UlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7CiAJfQogCiAJaXdsY29yZV9jb21taXRfcnhvbihwcml2KTsKQEAgLTMxNzMsOCArMzM1Nyw3IEBACiAKIAkJcHJpdi0+c3RhZ2luZ19yeG9uLmFzc29jX2lkID0gMDsKIAotCQlpZiAodmlmLT5ic3NfY29uZi5hc3NvY19jYXBhYmlsaXR5ICYKLQkJCQkJCVdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkKKwkJaWYgKHZpZi0+YnNzX2NvbmYudXNlX3Nob3J0X3ByZWFtYmxlKQogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9CiAJCQkJUlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOwogCQllbHNlCkBAIC0zMTgyLDE3ICszMzY1LDEyIEBACiAJCQkJflJYT05fRkxHX1NIT1JUX1BSRUFNQkxFX01TSzsKIAogCQlpZiAocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKSB7Ci0JCQlpZiAodmlmLT5ic3NfY29uZi5hc3NvY19jYXBhYmlsaXR5ICYKLQkJCQkJCVdMQU5fQ0FQQUJJTElUWV9TSE9SVF9TTE9UX1RJTUUpCisJCQlpZiAodmlmLT5ic3NfY29uZi51c2Vfc2hvcnRfc2xvdCkKIAkJCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0KIAkJCQkJUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7CiAJCQllbHNlCiAJCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9CiAJCQkJCX5SWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKLQotCQkJaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0KLQkJCQkJflJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOwogCQl9CiAJCS8qIHJlc3RvcmUgUlhPTiBhc3NvYyAqLwogCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0FTU09DX01TSzsKQEAgLTMyMzgsMTcgKzM0MTYsOSBAQAogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCi0JaWYgKHN0YSkgewotCQlzdGFfaWQgPSBpd2xfc3RhX2lkKHN0YSk7Ci0KLQkJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gJXBNIG5vdCBpbiBzdGF0aW9uIG1hcC5cbiIsCi0JCQkJCSAgIHN0YS0+YWRkcik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0gZWxzZSB7Ci0JCXN0YV9pZCA9IHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQ7Ci0JfQorCXN0YV9pZCA9IGl3bF9zdGFfaWRfb3JfYnJvYWRjYXN0KHByaXYsIHN0YSk7CisJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApOwpAQCAtMzI5NCwxMyArMzQ2NCwzMiBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qCisgKiBzd2l0Y2ggdG8gUlRTL0NUUyBmb3IgVFgKKyAqLworc3RhdGljIHZvaWQgaXdsX2VuYWJsZV9ydHNfY3RzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKworCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJcmV0dXJuOworCisJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19TRUxGX0NUU19FTjsKKwlpZiAoIXRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgInVzZSBSVFMvQ1RTIHByb3RlY3Rpb25cbiIpOworCQlpd2xjb3JlX2NvbW1pdF9yeG9uKHByaXYpOworCX0gZWxzZSB7CisJCS8qIHNjYW5uaW5nLCBkZWZlciB0aGUgcmVxdWVzdCB1bnRpbCBzY2FuIGNvbXBsZXRlZCAqLworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiZGVmZXIgc2V0dGluZyBSVFMvQ1RTIHByb3RlY3Rpb25cbiIpOworCX0KK30KKwogc3RhdGljIGludCBpd2xfbWFjX2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJCWVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uIGFjdGlvbiwKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLCB1MTYgKnNzbikKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlpbnQgcmV0OworCWludCByZXQgPSAtRUlOVkFMOwogCiAJSVdMX0RFQlVHX0hUKHByaXYsICJBLU1QRFUgYWN0aW9uIG9uIGFkZHIgJXBNIHRpZCAlZFxuIiwKIAkJICAgICBzdGEtPmFkZHIsIHRpZCk7CkBAIC0zMzA4LDE3ICszNDk3LDE5IEBACiAJaWYgKCEocHJpdi0+Y2ZnLT5za3UgJiBJV0xfU0tVX04pKQogCQlyZXR1cm4gLUVBQ0NFUzsKIAorCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBJRUVFODAyMTFfQU1QRFVfUlhfU1RBUlQ6CiAJCUlXTF9ERUJVR19IVChwcml2LCAic3RhcnQgUnhcbiIpOwotCQlyZXR1cm4gaXdsX3N0YV9yeF9hZ2dfc3RhcnQocHJpdiwgc3RhLCB0aWQsICpzc24pOworCQlyZXQgPSBpd2xfc3RhX3J4X2FnZ19zdGFydChwcml2LCBzdGEsIHRpZCwgKnNzbik7CisJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUT1A6CiAJCUlXTF9ERUJVR19IVChwcml2LCAic3RvcCBSeFxuIik7CiAJCXJldCA9IGl3bF9zdGFfcnhfYWdnX3N0b3AocHJpdiwgc3RhLCB0aWQpOwogCQlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCi0JCQlyZXR1cm4gMDsKLQkJZWxzZQotCQkJcmV0dXJuIHJldDsKKwkJCXJldCA9IDA7CisJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUQVJUOgogCQlJV0xfREVCVUdfSFQocHJpdiwgInN0YXJ0IFR4XG4iKTsKIAkJcmV0ID0gaXdsYWduX3R4X2FnZ19zdGFydChwcml2LCB2aWYsIHN0YSwgdGlkLCBzc24pOwpAQCAtMzMyNyw3ICszNTE4LDcgQEAKIAkJCUlXTF9ERUJVR19IVChwcml2LCAicHJpdi0+X2Fnbi5hZ2dfdGlkc19jb3VudCA9ICV1XG4iLAogCQkJCSAgICAgcHJpdi0+X2Fnbi5hZ2dfdGlkc19jb3VudCk7CiAJCX0KLQkJcmV0dXJuIHJldDsKKwkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfU1RPUDoKIAkJSVdMX0RFQlVHX0hUKHByaXYsICJzdG9wIFR4XG4iKTsKIAkJcmV0ID0gaXdsYWduX3R4X2FnZ19zdG9wKHByaXYsIHZpZiwgc3RhLCB0aWQpOwpAQCAtMzMzNywxOCArMzUyOCwyMiBAQAogCQkJCSAgICAgcHJpdi0+X2Fnbi5hZ2dfdGlkc19jb3VudCk7CiAJCX0KIAkJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQkJcmV0dXJuIDA7Ci0JCWVsc2UKLQkJCXJldHVybiByZXQ7CisJCQlyZXQgPSAwOworCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9PUEVSQVRJT05BTDoKLQkJLyogZG8gbm90aGluZyAqLwotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JZGVmYXVsdDoKLQkJSVdMX0RFQlVHX0hUKHByaXYsICJ1bmtub3duXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChwcml2LT5jZmctPnVzZV9ydHNfZm9yX2h0KSB7CisJCQkvKgorCQkJICogc3dpdGNoIHRvIFJUUy9DVFMgaWYgaXQgaXMgdGhlIHByZWZlciBwcm90ZWN0aW9uCisJCQkgKiBtZXRob2QgZm9yIEhUIHRyYWZmaWMKKwkJCSAqLworCQkJaXdsX2VuYWJsZV9ydHNfY3RzKHByaXYpOworCQl9CisJCXJldCA9IDA7CiAJCWJyZWFrOwogCX0KLQlyZXR1cm4gMDsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGl3bF9tYWNfc3RhX25vdGlmeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKQEAgLTM0MjMsNiArMzYxOCwxMzYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgaXdsX21hY19jaGFubmVsX3N3aXRjaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dpdGNoICpjaF9zd2l0Y2gpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CisJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOworCXN0cnVjdCBpd2xfaHRfY29uZmlnICpodF9jb25mID0gJnByaXYtPmN1cnJlbnRfaHRfY29uZmlnOworCXUxNiBjaDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOworCisJaWYgKGl3bF9pc19yZmtpbGwocHJpdikpCisJCWdvdG8gb3V0X2V4aXQ7CisKKwlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykgfHwKKwkgICAgdGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJZ290byBvdXRfZXhpdDsKKworCWlmICghaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpCisJCWdvdG8gb3V0X2V4aXQ7CisKKwkvKiBjaGFubmVsIHN3aXRjaCBpbiBwcm9ncmVzcyAqLworCWlmIChwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MgPT0gdHJ1ZSkKKwkJZ290byBvdXRfZXhpdDsKKworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+c2V0X2NoYW5uZWxfc3dpdGNoKSB7CisKKwkJY2ggPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoCisJCQljaF9zd2l0Y2gtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKKwkJaWYgKGxlMTZfdG9fY3B1KHByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwpICE9IGNoKSB7CisJCQljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwKKwkJCQkJCSAgICAgICBjb25mLT5jaGFubmVsLT5iYW5kLAorCQkJCQkJICAgICAgIGNoKTsKKwkJCWlmICghaXNfY2hhbm5lbF92YWxpZChjaF9pbmZvKSkgeworCQkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiaW52YWxpZCBjaGFubmVsXG4iKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwkJCXByaXYtPmN1cnJlbnRfaHRfY29uZmlnLnNtcHMgPSBjb25mLT5zbXBzX21vZGU7CisKKwkJCS8qIENvbmZpZ3VyZSBIVDQwIGNoYW5uZWxzICovCisJCQlodF9jb25mLT5pc19odCA9IGNvbmZfaXNfaHQoY29uZik7CisJCQlpZiAoaHRfY29uZi0+aXNfaHQpIHsKKwkJCQlpZiAoY29uZl9pc19odDQwX21pbnVzKGNvbmYpKSB7CisJCQkJCWh0X2NvbmYtPmV4dGVuc2lvbl9jaGFuX29mZnNldCA9CisJCQkJCQlJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19CRUxPVzsKKwkJCQkJaHRfY29uZi0+aXNfNDBtaHogPSB0cnVlOworCQkJCX0gZWxzZSBpZiAoY29uZl9pc19odDQwX3BsdXMoY29uZikpIHsKKwkJCQkJaHRfY29uZi0+ZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0ID0KKwkJCQkJCUlFRUU4MDIxMV9IVF9QQVJBTV9DSEFfU0VDX0FCT1ZFOworCQkJCQlodF9jb25mLT5pc180MG1oeiA9IHRydWU7CisJCQkJfSBlbHNlIHsKKwkJCQkJaHRfY29uZi0+ZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0ID0KKwkJCQkJCUlFRUU4MDIxMV9IVF9QQVJBTV9DSEFfU0VDX05PTkU7CisJCQkJCWh0X2NvbmYtPmlzXzQwbWh6ID0gZmFsc2U7CisJCQkJfQorCQkJfSBlbHNlCisJCQkJaHRfY29uZi0+aXNfNDBtaHogPSBmYWxzZTsKKworCQkJLyogaWYgd2UgYXJlIHN3aXRjaGluZyBmcm9tIGh0IHRvIDIuNCBjbGVhciBmbGFncworCQkJICogZnJvbSBhbnkgaHQgcmVsYXRlZCBpbmZvIHNpbmNlIDIuNCBkb2VzIG5vdAorCQkJICogc3VwcG9ydCBodCAqLworCQkJaWYgKChsZTE2X3RvX2NwdShwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCkgIT0gY2gpKQorCQkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyA9IDA7CisKKwkJCWl3bF9zZXRfcnhvbl9jaGFubmVsKHByaXYsIGNvbmYtPmNoYW5uZWwpOworCQkJaXdsX3NldF9yeG9uX2h0KHByaXYsIGh0X2NvbmYpOworCQkJaXdsX3NldF9mbGFnc19mb3JfYmFuZChwcml2LCBjb25mLT5jaGFubmVsLT5iYW5kLAorCQkJCQkgICAgICAgcHJpdi0+dmlmKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCQkJaXdsX3NldF9yYXRlKHByaXYpOworCQkJLyoKKwkJCSAqIGF0IHRoaXMgcG9pbnQsIHN0YWdpbmdfcnhvbiBoYXMgdGhlCisJCQkgKiBjb25maWd1cmF0aW9uIGZvciBjaGFubmVsIHN3aXRjaAorCQkJICovCisJCQlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+c2V0X2NoYW5uZWxfc3dpdGNoKHByaXYsCisJCQkJCQkJCSAgICBjaF9zd2l0Y2gpKQorCQkJCXByaXYtPnN3aXRjaF9yeG9uLnN3aXRjaF9pbl9wcm9ncmVzcyA9IGZhbHNlOworCQl9CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworb3V0X2V4aXQ6CisJaWYgKCFwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MpCisJCWllZWU4MDIxMV9jaHN3aXRjaF9kb25lKHByaXYtPnZpZiwgZmFsc2UpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOworfQorCitzdGF0aWMgdm9pZCBpd2xfbWFjX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGRyb3ApCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CisKKwkvKiBkbyBub3Qgc3VwcG9ydCAiZmx1c2giICovCisJaWYgKCFwcml2LT5jZmctPm9wcy0+bGliLT50eGZpZm9fZmx1c2gpCisJCWdvdG8gZG9uZTsKKworCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkgeworCQlJV0xfREVCVUdfVFgocHJpdiwgIkFib3J0aW5nIGZsdXNoIGR1ZSB0byBkZXZpY2Ugc2h1dGRvd25cbiIpOworCQlnb3RvIGRvbmU7CisJfQorCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKSB7CisJCUlXTF9ERUJVR19UWChwcml2LCAiQWJvcnRpbmcgZmx1c2ggZHVlIHRvIFJGIEtpbGxcbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyoKKwkgKiBtYWM4MDIxMSB3aWxsIG5vdCBwdXNoIGFueSBtb3JlIGZyYW1lcyBmb3IgdHJhbnNtaXQKKwkgKiB1bnRpbCB0aGUgZmx1c2ggaXMgY29tcGxldGVkCisJICovCisJaWYgKGRyb3ApIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJzZW5kIGZsdXNoIGNvbW1hbmRcbiIpOworCQlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhmaWZvX2ZsdXNoKHByaXYsIElXTF9EUk9QX0FMTCkpIHsKKwkJCUlXTF9FUlIocHJpdiwgImZsdXNoIHJlcXVlc3QgZmFpbFxuIik7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJ3YWl0IHRyYW5zbWl0L2ZsdXNoIGFsbCBmcmFtZXNcbiIpOworCWl3bGFnbl93YWl0X3R4X3F1ZXVlX2VtcHR5KHByaXYpOworZG9uZToKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKK30KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogZHJpdmVyIHNldHVwIGFuZCB0ZWFyZG93bgpAQCAtMzQzOSw2ICszNzY0LDcgQEAKIAlJTklUX1dPUksoJnByaXYtPnJ4X3JlcGxlbmlzaCwgaXdsX2JnX3J4X3JlcGxlbmlzaCk7CiAJSU5JVF9XT1JLKCZwcml2LT5iZWFjb25fdXBkYXRlLCBpd2xfYmdfYmVhY29uX3VwZGF0ZSk7CiAJSU5JVF9XT1JLKCZwcml2LT5ydW5fdGltZV9jYWxpYl93b3JrLCBpd2xfYmdfcnVuX3RpbWVfY2FsaWJfd29yayk7CisJSU5JVF9XT1JLKCZwcml2LT50eF9mbHVzaCwgaXdsX2JnX3R4X2ZsdXNoKTsKIAlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+aW5pdF9hbGl2ZV9zdGFydCwgaXdsX2JnX2luaXRfYWxpdmVfc3RhcnQpOwogCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5hbGl2ZV9zdGFydCwgaXdsX2JnX2FsaXZlX3N0YXJ0KTsKIApAQCAtMzQ3OSw2ICszODA1LDcgQEAKIAljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5zY2FuX2NoZWNrKTsKIAljYW5jZWxfd29ya19zeW5jKCZwcml2LT5zdGFydF9pbnRlcm5hbF9zY2FuKTsKIAljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5hbGl2ZV9zdGFydCk7CisJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+cnVuX3RpbWVfY2FsaWJfd29yayk7CiAJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+YmVhY29uX3VwZGF0ZSk7CiAJZGVsX3RpbWVyX3N5bmMoJnByaXYtPnN0YXRpc3RpY3NfcGVyaW9kaWMpOwogCWRlbF90aW1lcl9zeW5jKCZwcml2LT51Y29kZV90cmFjZSk7CkBAIC0zNTk0LDYgKzM5MjEsOCBAQAogCS5zdGFfbm90aWZ5ID0gaXdsX21hY19zdGFfbm90aWZ5LAogCS5zdGFfYWRkID0gaXdsYWduX21hY19zdGFfYWRkLAogCS5zdGFfcmVtb3ZlID0gaXdsX21hY19zdGFfcmVtb3ZlLAorCS5jaGFubmVsX3N3aXRjaCA9IGl3bF9tYWNfY2hhbm5lbF9zd2l0Y2gsCisJLmZsdXNoID0gaXdsX21hY19mbHVzaCwKIH07CiAKIHN0YXRpYyBpbnQgaXdsX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKQEAgLTM2MDMsNyArMzkzMiw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJc3RydWN0IGl3bF9jZmcgKmNmZyA9IChzdHJ1Y3QgaXdsX2NmZyAqKShlbnQtPmRyaXZlcl9kYXRhKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXUxNiBwY2lfY21kOworCXUxNiBwY2lfY21kLCBudW1fbWFjOwogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKgogCSAqIDEuIEFsbG9jYXRpbmcgSFcgZGF0YQpAQCAtMzYzMyw5ICszOTYyLDYgQEAKIAlwcml2LT5wY2lfZGV2ID0gcGRldjsKIAlwcml2LT5pbnRhX21hc2sgPSBDU1JfSU5JX1NFVF9NQVNLOwogCi0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLQlhdG9taWNfc2V0KCZwcml2LT5yZXN0cmljdF9yZWZjbnQsIDApOwotI2VuZGlmCiAJaWYgKGl3bF9hbGxvY190cmFmZmljX21lbShwcml2KSkKIAkJSVdMX0VSUihwcml2LCAiTm90IGVub3VnaCBtZW1vcnkgdG8gZ2VuZXJhdGUgdHJhZmZpYyBsb2dcbiIpOwogCkBAIC0zNzI0LDkgKzQwNTAsMTcgQEAKIAkJZ290byBvdXRfZnJlZV9lZXByb207CiAKIAkvKiBleHRyYWN0IE1BQyBBZGRyZXNzICovCi0JaXdsX2VlcHJvbV9nZXRfbWFjKHByaXYsIHByaXYtPm1hY19hZGRyKTsKLQlJV0xfREVCVUdfSU5GTyhwcml2LCAiTUFDIGFkZHJlc3M6ICVwTVxuIiwgcHJpdi0+bWFjX2FkZHIpOwotCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKHByaXYtPmh3LCBwcml2LT5tYWNfYWRkcik7CisJaXdsX2VlcHJvbV9nZXRfbWFjKHByaXYsIHByaXYtPmFkZHJlc3Nlc1swXS5hZGRyKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiTUFDIGFkZHJlc3M6ICVwTVxuIiwgcHJpdi0+YWRkcmVzc2VzWzBdLmFkZHIpOworCXByaXYtPmh3LT53aXBoeS0+YWRkcmVzc2VzID0gcHJpdi0+YWRkcmVzc2VzOworCXByaXYtPmh3LT53aXBoeS0+bl9hZGRyZXNzZXMgPSAxOworCW51bV9tYWMgPSBpd2xfZWVwcm9tX3F1ZXJ5MTYocHJpdiwgRUVQUk9NX05VTV9NQUNfQUREUkVTUyk7CisJaWYgKG51bV9tYWMgPiAxKSB7CisJCW1lbWNweShwcml2LT5hZGRyZXNzZXNbMV0uYWRkciwgcHJpdi0+YWRkcmVzc2VzWzBdLmFkZHIsCisJCSAgICAgICBFVEhfQUxFTik7CisJCXByaXYtPmFkZHJlc3Nlc1sxXS5hZGRyWzVdKys7CisJCXByaXYtPmh3LT53aXBoeS0+bl9hZGRyZXNzZXMrKzsKKwl9CiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioqCiAJICogNS4gU2V0dXAgSFcgY29uc3RhbnRzCkBAIC0zOTkzLDYgKzQzMjcsNDcgQEAKIAl7SVdMX1BDSV9ERVZJQ0UoMHgwMDgyLCAweDEyMDEsIGl3bDYwMDBnMmFfMmFnbl9jZmcpfSwKIAl7SVdMX1BDSV9ERVZJQ0UoMHgwMDg1LCAweDEyMTEsIGl3bDYwMDBnMmFfMmFnbl9jZmcpfSwKIAl7SVdMX1BDSV9ERVZJQ0UoMHgwMDgyLCAweDEyMjEsIGl3bDYwMDBnMmFfMmFnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDgyLCAweDEyMDYsIGl3bDYwMDBnMmFfMmFiZ19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDg1LCAweDEyMTYsIGl3bDYwMDBnMmFfMmFiZ19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDgyLCAweDEyMjYsIGl3bDYwMDBnMmFfMmFiZ19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDgyLCAweDEyMDcsIGl3bDYwMDBnMmFfMmJnX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwODIsIDB4MTMwMSwgaXdsNjAwMGcyYV8yYWduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwODIsIDB4MTMwNiwgaXdsNjAwMGcyYV8yYWJnX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwODIsIDB4MTMwNywgaXdsNjAwMGcyYV8yYmdfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4MiwgMHgxMzIxLCBpd2w2MDAwZzJhXzJhZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4MiwgMHgxMzI2LCBpd2w2MDAwZzJhXzJhYmdfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4NSwgMHgxMzExLCBpd2w2MDAwZzJhXzJhZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4NSwgMHgxMzE2LCBpd2w2MDAwZzJhXzJhYmdfY2ZnKX0sCisKKy8qIDZ4MDAgU2VyaWVzIEdlbjJiICovCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4RiwgMHg1MTA1LCBpd2w2MDAwZzJiX2Jnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDkwLCAweDUxMTUsIGl3bDYwMDBnMmJfYmduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwOEYsIDB4NTEyNSwgaXdsNjAwMGcyYl9iZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4RiwgMHg1MTA3LCBpd2w2MDAwZzJiX2JnX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwOEYsIDB4NTIwMSwgaXdsNjAwMGcyYl8yYWduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwOTAsIDB4NTIxMSwgaXdsNjAwMGcyYl8yYWduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwOEYsIDB4NTIyMSwgaXdsNjAwMGcyYl8yYWduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwOEYsIDB4NTIwNiwgaXdsNjAwMGcyYl8yYWJnX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwOTAsIDB4NTIxNiwgaXdsNjAwMGcyYl8yYWJnX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwOEYsIDB4NTIyNiwgaXdsNjAwMGcyYl8yYWJnX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwOEYsIDB4NTIwNywgaXdsNjAwMGcyYl8yYmdfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4QSwgMHg1MzAxLCBpd2w2MDAwZzJiX2Jnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDhBLCAweDUzMDUsIGl3bDYwMDBnMmJfYmduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwOEEsIDB4NTMwNywgaXdsNjAwMGcyYl9iZ19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDhBLCAweDUzMjEsIGl3bDYwMDBnMmJfYmduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwOEEsIDB4NTMyNSwgaXdsNjAwMGcyYl9iZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4QiwgMHg1MzExLCBpd2w2MDAwZzJiX2Jnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDhCLCAweDUzMTUsIGl3bDYwMDBnMmJfYmduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwOTAsIDB4NTIxMSwgaXdsNjAwMGcyYl8yYWduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwOTAsIDB4NTIxNSwgaXdsNjAwMGcyYl8yYmduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwOTAsIDB4NTIxNiwgaXdsNjAwMGcyYl8yYWJnX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwOTEsIDB4NTIwMSwgaXdsNjAwMGcyYl8yYWduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwOTEsIDB4NTIwNSwgaXdsNjAwMGcyYl8yYmduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwOTEsIDB4NTIwNiwgaXdsNjAwMGcyYl8yYWJnX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwOTEsIDB4NTIwNywgaXdsNjAwMGcyYl8yYmdfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA5MSwgMHg1MjIxLCBpd2w2MDAwZzJiXzJhZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA5MSwgMHg1MjI1LCBpd2w2MDAwZzJiXzJiZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA5MSwgMHg1MjI2LCBpd2w2MDAwZzJiXzJhYmdfY2ZnKX0sCiAKIC8qIDZ4NTAgV2lGaS9XaU1heCBTZXJpZXMgKi8KIAl7SVdMX1BDSV9ERVZJQ0UoMHgwMDg3LCAweDEzMDEsIGl3bDYwNTBfMmFnbl9jZmcpfSwKQEAgLTQwMDIsNiArNDM3NywxNCBAQAogCXtJV0xfUENJX0RFVklDRSgweDAwODksIDB4MTMxMSwgaXdsNjA1MF8yYWduX2NmZyl9LAogCXtJV0xfUENJX0RFVklDRSgweDAwODksIDB4MTMxNiwgaXdsNjA1MF8yYWJnX2NmZyl9LAogCisvKiA2eDUwIFdpRmkvV2lNYXggU2VyaWVzIEdlbjIgKi8KKwl7SVdMX1BDSV9ERVZJQ0UoMHgwODg1LCAweDEzMDUsIGl3bDYwNTBnMl9iZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDg4NSwgMHgxMzA2LCBpd2w2MDUwZzJfYmduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDA4ODUsIDB4MTMyNSwgaXdsNjA1MGcyX2Jnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwODg1LCAweDEzMjYsIGl3bDYwNTBnMl9iZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDg4NiwgMHgxMzE1LCBpd2w2MDUwZzJfYmduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDA4ODYsIDB4MTMxNiwgaXdsNjA1MGcyX2Jnbl9jZmcpfSwKKwogLyogMTAwMCBTZXJpZXMgV2lGaSAqLwogCXtJV0xfUENJX0RFVklDRSgweDAwODMsIDB4MTIwNSwgaXdsMTAwMF9iZ25fY2ZnKX0sCiAJe0lXTF9QQ0lfREVWSUNFKDB4MDA4MywgMHgxMzA1LCBpd2wxMDAwX2Jnbl9jZmcpfSwKQEAgLTQwMzYsMTkgKzQ0MTksMTggQEAKIHsKIAogCWludCByZXQ7Ci0JcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiAiIERSVl9ERVNDUklQVElPTiAiLCAiIERSVl9WRVJTSU9OICJcbiIpOwotCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogIiBEUlZfQ09QWVJJR0hUICJcbiIpOworCXByX2luZm8oRFJWX0RFU0NSSVBUSU9OICIsICIgRFJWX1ZFUlNJT04gIlxuIik7CisJcHJfaW5mbyhEUlZfQ09QWVJJR0hUICJcbiIpOwogCiAJcmV0ID0gaXdsYWduX3JhdGVfY29udHJvbF9yZWdpc3RlcigpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCi0JCSAgICAgICAiVW5hYmxlIHRvIHJlZ2lzdGVyIHJhdGUgY29udHJvbCBhbGdvcml0aG06ICVkXG4iLCByZXQpOworCQlwcl9lcnIoIlVuYWJsZSB0byByZWdpc3RlciByYXRlIGNvbnRyb2wgYWxnb3JpdGhtOiAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpd2xfZHJpdmVyKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiVW5hYmxlIHRvIGluaXRpYWxpemUgUENJIG1vZHVsZVxuIik7CisJCXByX2VycigiVW5hYmxlIHRvIGluaXRpYWxpemUgUENJIG1vZHVsZVxuIik7CiAJCWdvdG8gZXJyb3JfcmVnaXN0ZXI7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5oCmluZGV4IDJkNzQ4MDUuLmNjNjQ2NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5oCkBAIC02NSw2ICs2NSwzNCBAQAogCiAjaW5jbHVkZSAiaXdsLWRldi5oIgogCisvKiBjb25maWd1cmF0aW9uIGZvciB0aGUgX2FnbiBkZXZpY2VzICovCitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNDk2NV9hZ25fY2ZnOworZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDUzMDBfYWduX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTAwX2Fnbl9jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNTM1MF9hZ25fY2ZnOworZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDUxMDBfYmduX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTAwX2FiZ19jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNTE1MF9hZ25fY2ZnOworZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDUxNTBfYWJnX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwZzJhXzJhZ25fY2ZnOworZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwMDBnMmFfMmFiZ19jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAwMGcyYV8yYmdfY2ZnOworZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwMDBnMmJfYmduX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwZzJiX2JnX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwZzJiXzJhZ25fY2ZnOworZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwMDBnMmJfMmFiZ19jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAwMGcyYl8yYmduX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwZzJiXzJiZ19jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAwMGlfMmFnbl9jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAwMGlfMmFiZ19jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAwMGlfMmJnX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwXzNhZ25fY2ZnOworZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwNTBfMmFnbl9jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjA1MF8yYWJnX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDUwZzJfYmduX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2wxMDAwX2Jnbl9jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsMTAwMF9iZ19jZmc7CisKIGV4dGVybiBzdHJ1Y3QgaXdsX21vZF9wYXJhbXMgaXdsYWduX21vZF9wYXJhbXM7CiBleHRlcm4gc3RydWN0IGl3bF9oY21kX29wcyBpd2xhZ25faGNtZDsKIGV4dGVybiBzdHJ1Y3QgaXdsX2hjbWRfdXRpbHNfb3BzIGl3bGFnbl9oY21kX3V0aWxzOwpAQCAtOTMsNiArMTIxLDggQEAKIGludCBpd2xhZ25fdHhxX2FnZ19kaXNhYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IHR4cV9pZCwKIAkJCSAgIHUxNiBzc25faWR4LCB1OCB0eF9maWZvKTsKIHZvaWQgaXdsYWduX3R4cV9zZXRfc2NoZWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgbWFzayk7Cit2b2lkIGl3bF9mcmVlX3RmZHNfaW5fcXVldWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgIGludCBzdGFfaWQsIGludCB0aWQsIGludCBmcmVlZCk7CiAKIC8qIHVDb2RlICovCiBpbnQgaXdsYWduX2xvYWRfdWNvZGUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKQEAgLTEwMiw2ICsxMzIsNyBAQAogCQkJICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpOwogdm9pZCBpd2xhZ25faW5pdF9hbGl2ZV9zdGFydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogaW50IGl3bGFnbl9hbGl2ZV9ub3RpZnkoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2ludCBpd2xfdmVyaWZ5X3Vjb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKIC8qIGxpYiAqLwogdm9pZCBpd2xfY2hlY2tfYWJvcnRfc3RhdHVzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKQEAgLTExNyw2ICsxNDgsOSBAQAogdm9pZCBpd2xhZ25fcnhfcXVldWVfcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4X3F1ZXVlICpyeHEpOwogaW50IGl3bGFnbl9yeF9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxKTsKIGludCBpd2xhZ25faHdfbmljX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2ludCBpd2xhZ25fd2FpdF90eF9xdWV1ZV9lbXB0eShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaW50IGl3bGFnbl90eGZpZm9fZmx1c2goc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgZmx1c2hfY29udHJvbCk7Cit2b2lkIGl3bGFnbl9kZXZfdHhmaWZvX2ZsdXNoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IGZsdXNoX2NvbnRyb2wpOwogCiAvKiByeCAqLwogdm9pZCBpd2xhZ25fcnhfcXVldWVfcmVzdG9jayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwpAQCAtMTcxLDYgKzIwNSwxNiBAQAogCSAgICAgICAoc3RhdHVzID09IFRYX1NUQVRVU19ESVJFQ1RfRE9ORSk7CiB9CiAKKy8qIHJ4ICovCit2b2lkIGl3bF9yeF9taXNzZWRfYmVhY29uX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQlzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7Citib29sIGl3bF9nb29kX3BsY3BfaGVhbHRoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCk7Cit2b2lkIGl3bF9yeF9zdGF0aXN0aWNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJICAgICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKTsKK3ZvaWQgaXdsX3JlcGx5X3N0YXRpc3RpY3Moc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7CisKIC8qIHNjYW4gKi8KIHZvaWQgaXdsYWduX3JlcXVlc3Rfc2NhbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwogCkBAIC0xNzgsNCArMjIyLDggQEAKIGludCBpd2xhZ25fbWFuYWdlX2lic3Nfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgYm9vbCBhZGQpOwogCisvKiBoY21kICovCitpbnQgaXdsYWduX3NlbmRfcnhvbl9hc3NvYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaW50IGl3bGFnbl9zZW5kX3R4X2FudF9jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCB2YWxpZF90eF9hbnQpOworCiAjZW5kaWYgLyogX19pd2xfYWduX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNhbGliLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlODIyNzc3My4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jYWxpYi5jCisrKyAvZGV2L251bGwKQEAgLTEsOTEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBUaGlzIGZpbGUgaXMgcHJvdmlkZWQgdW5kZXIgYSBkdWFsIEJTRC9HUEx2MiBsaWNlbnNlLiAgV2hlbiB1c2luZyBvcgotICogcmVkaXN0cmlidXRpbmcgdGhpcyBmaWxlLCB5b3UgbWF5IGRvIHNvIHVuZGVyIGVpdGhlciBsaWNlbnNlLgotICoKLSAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKLSAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwKLSAqIFVTQQotICoKLSAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS5HUEwuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KLSAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKLSAqCi0gKiBCU0QgTElDRU5TRQotICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqICAqIE5laXRoZXIgdGhlIG5hbWUgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0KLSNpbmNsdWRlICJpd2wtZGV2LmgiCi0jaW5jbHVkZSAiaXdsLWNvcmUuaCIKLSNpbmNsdWRlICJpd2wtY2FsaWIuaCIKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBJTklUIGNhbGlicmF0aW9ucyBmcmFtZXdvcmsKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbF9kYXRhIHsKLQl1MzIgYmVhY29uX3NpbGVuY2VfcnNzaV9hOwotCXUzMiBiZWFjb25fc2lsZW5jZV9yc3NpX2I7Ci0JdTMyIGJlYWNvbl9zaWxlbmNlX3Jzc2lfYzsKLQl1MzIgYmVhY29uX2VuZXJneV9hOwotCXUzMiBiZWFjb25fZW5lcmd5X2I7Ci0JdTMyIGJlYWNvbl9lbmVyZ3lfYzsKLX07Ci0KLWludCBpd2xfc2VuZF9jYWxpYl9yZXN1bHRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlpbnQgcmV0ID0gMDsKLQlpbnQgaSA9IDA7Ci0KLQlzdHJ1Y3QgaXdsX2hvc3RfY21kIGhjbWQgPSB7Ci0JCS5pZCA9IFJFUExZX1BIWV9DQUxJQlJBVElPTl9DTUQsCi0JCS5mbGFncyA9IENNRF9TSVpFX0hVR0UsCi0JfTsKLQotCWZvciAoaSA9IDA7IGkgPCBJV0xfQ0FMSUJfTUFYOyBpKyspIHsKLQkJaWYgKChCSVQoaSkgJiBwcml2LT5od19wYXJhbXMuY2FsaWJfaW5pdF9jZmcpICYmCi0JCSAgICBwcml2LT5jYWxpYl9yZXN1bHRzW2ldLmJ1ZikgewotCQkJaGNtZC5sZW4gPSBwcml2LT5jYWxpYl9yZXN1bHRzW2ldLmJ1Zl9sZW47Ci0JCQloY21kLmRhdGEgPSBwcml2LT5jYWxpYl9yZXN1bHRzW2ldLmJ1ZjsKLQkJCXJldCA9IGl3bF9zZW5kX2NtZF9zeW5jKHByaXYsICZoY21kKTsKLQkJCWlmIChyZXQpCi0JCQkJZ290byBlcnI7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLWVycjoKLQlJV0xfRVJSKHByaXYsICJFcnJvciAlZCBpdGVyYXRpb24gJWRcbiIsIHJldCwgaSk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0woaXdsX3NlbmRfY2FsaWJfcmVzdWx0cyk7Ci0KLWludCBpd2xfY2FsaWJfc2V0KHN0cnVjdCBpd2xfY2FsaWJfcmVzdWx0ICpyZXMsIGNvbnN0IHU4ICpidWYsIGludCBsZW4pCi17Ci0JaWYgKHJlcy0+YnVmX2xlbiAhPSBsZW4pIHsKLQkJa2ZyZWUocmVzLT5idWYpOwotCQlyZXMtPmJ1ZiA9IGt6YWxsb2MobGVuLCBHRlBfQVRPTUlDKTsKLQl9Ci0JaWYgKHVubGlrZWx5KHJlcy0+YnVmID09IE5VTEwpKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJlcy0+YnVmX2xlbiA9IGxlbjsKLQltZW1jcHkocmVzLT5idWYsIGJ1ZiwgbGVuKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woaXdsX2NhbGliX3NldCk7Ci0KLXZvaWQgaXdsX2NhbGliX2ZyZWVfcmVzdWx0cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSVdMX0NBTElCX01BWDsgaSsrKSB7Ci0JCWtmcmVlKHByaXYtPmNhbGliX3Jlc3VsdHNbaV0uYnVmKTsKLQkJcHJpdi0+Y2FsaWJfcmVzdWx0c1tpXS5idWYgPSBOVUxMOwotCQlwcml2LT5jYWxpYl9yZXN1bHRzW2ldLmJ1Zl9sZW4gPSAwOwotCX0KLX0KLUVYUE9SVF9TWU1CT0woaXdsX2NhbGliX2ZyZWVfcmVzdWx0cyk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUlVOVElNRSBjYWxpYnJhdGlvbnMgZnJhbWV3b3JrCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qICJmYWxzZSBhbGFybXMiIGFyZSBzaWduYWxzIHRoYXQgb3VyIERTUCB0cmllcyB0byBsb2NrIG9udG8sCi0gKiAgIGJ1dCB0aGVuIGRldGVybWluZXMgdGhhdCB0aGV5IGFyZSBlaXRoZXIgbm9pc2UsIG9yIHRyYW5zbWlzc2lvbnMKLSAqICAgZnJvbSBhIGRpc3RhbnQgd2lyZWxlc3MgbmV0d29yayAoYWxzbyAibm9pc2UiLCByZWFsbHkpIHRoYXQgZ2V0Ci0gKiAgICJzdGVwcGVkIG9uIiBieSBzdHJvbmdlciB0cmFuc21pc3Npb25zIHdpdGhpbiBvdXIgb3duIG5ldHdvcmsuCi0gKiBUaGlzIGFsZ29yaXRobSBhdHRlbXB0cyB0byBzZXQgYSBzZW5zaXRpdml0eSBsZXZlbCB0aGF0IGlzIGhpZ2gKLSAqICAgZW5vdWdoIHRvIHJlY2VpdmUgYWxsIG9mIG91ciBvd24gbmV0d29yayB0cmFmZmljLCBidXQgbm90IHNvCi0gKiAgIGhpZ2ggdGhhdCBvdXIgRFNQIGdldHMgdG9vIGJ1c3kgdHJ5aW5nIHRvIGxvY2sgb250byBub24tbmV0d29yawotICogICBhY3Rpdml0eS9ub2lzZS4gKi8KLXN0YXRpYyBpbnQgaXdsX3NlbnNfZW5lcmd5X2NjayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgdTMyIG5vcm1fZmEsCi0JCQkJICAgdTMyIHJ4X2VuYWJsZV90aW1lLAotCQkJCSAgIHN0cnVjdCBzdGF0aXN0aWNzX2dlbmVyYWxfZGF0YSAqcnhfaW5mbykKLXsKLQl1MzIgbWF4X25yZ19jY2sgPSAwOwotCWludCBpID0gMDsKLQl1OCBtYXhfc2lsZW5jZV9yc3NpID0gMDsKLQl1MzIgc2lsZW5jZV9yZWYgPSAwOwotCXU4IHNpbGVuY2VfcnNzaV9hID0gMDsKLQl1OCBzaWxlbmNlX3Jzc2lfYiA9IDA7Ci0JdTggc2lsZW5jZV9yc3NpX2MgPSAwOwotCXUzMiB2YWw7Ci0KLQkvKiAiZmFsc2VfYWxhcm1zIiB2YWx1ZXMgYmVsb3cgYXJlIGNyb3NzLW11bHRpcGxpY2F0aW9ucyB0byBhc3Nlc3MgdGhlCi0JICogICBudW1iZXJzIG9mIGZhbHNlIGFsYXJtcyB3aXRoaW4gdGhlIG1lYXN1cmVkIHBlcmlvZCBvZiBhY3R1YWwgUngKLQkgKiAgIChSeCBpcyBvZmYgd2hlbiB3ZSdyZSB0eGluZyksIHZzIHRoZSBtaW4vbWF4IGV4cGVjdGVkIGZhbHNlIGFsYXJtcwotCSAqICAgKHNvbWUgc2hvdWxkIGJlIGV4cGVjdGVkIGlmIHJ4IGlzIHNlbnNpdGl2ZSBlbm91Z2gpIGluIGEKLQkgKiAgIGh5cG90aGV0aWNhbCBsaXN0ZW5pbmcgcGVyaW9kIG9mIDIwMCB0aW1lIHVuaXRzIChUVSksIDIwNC44IG1zZWM6Ci0JICoKLQkgKiBNSU5fRkEvZml4ZWQtdGltZSA8IGZhbHNlX2FsYXJtcy9hY3R1YWwtcngtdGltZSA8IE1BWF9GQS9iZWFjb24tdGltZQotCSAqCi0JICogKi8KLQl1MzIgZmFsc2VfYWxhcm1zID0gbm9ybV9mYSAqIDIwMCAqIDEwMjQ7Ci0JdTMyIG1heF9mYWxzZV9hbGFybXMgPSBNQVhfRkFfQ0NLICogcnhfZW5hYmxlX3RpbWU7Ci0JdTMyIG1pbl9mYWxzZV9hbGFybXMgPSBNSU5fRkFfQ0NLICogcnhfZW5hYmxlX3RpbWU7Ci0Jc3RydWN0IGl3bF9zZW5zaXRpdml0eV9kYXRhICpkYXRhID0gTlVMTDsKLQljb25zdCBzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X3JhbmdlcyAqcmFuZ2VzID0gcHJpdi0+aHdfcGFyYW1zLnNlbnM7Ci0KLQlkYXRhID0gJihwcml2LT5zZW5zaXRpdml0eV9kYXRhKTsKLQotCWRhdGEtPm5yZ19hdXRvX2NvcnJfc2lsZW5jZV9kaWZmID0gMDsKLQotCS8qIEZpbmQgbWF4IHNpbGVuY2UgcnNzaSBhbW9uZyBhbGwgMyByZWNlaXZlcnMuCi0JICogVGhpcyBpcyBiYWNrZ3JvdW5kIG5vaXNlLCB3aGljaCBtYXkgaW5jbHVkZSB0cmFuc21pc3Npb25zIGZyb20gb3RoZXIKLQkgKiAgICBuZXR3b3JrcywgbWVhc3VyZWQgZHVyaW5nIHNpbGVuY2UgYmVmb3JlIG91ciBuZXR3b3JrJ3MgYmVhY29uICovCi0Jc2lsZW5jZV9yc3NpX2EgPSAodTgpKChyeF9pbmZvLT5iZWFjb25fc2lsZW5jZV9yc3NpX2EgJgotCQkJICAgIEFMTF9CQU5EX0ZJTFRFUikgPj4gOCk7Ci0Jc2lsZW5jZV9yc3NpX2IgPSAodTgpKChyeF9pbmZvLT5iZWFjb25fc2lsZW5jZV9yc3NpX2IgJgotCQkJICAgIEFMTF9CQU5EX0ZJTFRFUikgPj4gOCk7Ci0Jc2lsZW5jZV9yc3NpX2MgPSAodTgpKChyeF9pbmZvLT5iZWFjb25fc2lsZW5jZV9yc3NpX2MgJgotCQkJICAgIEFMTF9CQU5EX0ZJTFRFUikgPj4gOCk7Ci0KLQl2YWwgPSBtYXgoc2lsZW5jZV9yc3NpX2IsIHNpbGVuY2VfcnNzaV9jKTsKLQltYXhfc2lsZW5jZV9yc3NpID0gbWF4KHNpbGVuY2VfcnNzaV9hLCAodTgpIHZhbCk7Ci0KLQkvKiBTdG9yZSBzaWxlbmNlIHJzc2kgaW4gMjAtYmVhY29uIGhpc3RvcnkgdGFibGUgKi8KLQlkYXRhLT5ucmdfc2lsZW5jZV9yc3NpW2RhdGEtPm5yZ19zaWxlbmNlX2lkeF0gPSBtYXhfc2lsZW5jZV9yc3NpOwotCWRhdGEtPm5yZ19zaWxlbmNlX2lkeCsrOwotCWlmIChkYXRhLT5ucmdfc2lsZW5jZV9pZHggPj0gTlJHX05VTV9QUkVWX1NUQVRfTCkKLQkJZGF0YS0+bnJnX3NpbGVuY2VfaWR4ID0gMDsKLQotCS8qIEZpbmQgbWF4IHNpbGVuY2UgcnNzaSBhY3Jvc3MgMjAgYmVhY29uIGhpc3RvcnkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlJHX05VTV9QUkVWX1NUQVRfTDsgaSsrKSB7Ci0JCXZhbCA9IGRhdGEtPm5yZ19zaWxlbmNlX3Jzc2lbaV07Ci0JCXNpbGVuY2VfcmVmID0gbWF4KHNpbGVuY2VfcmVmLCB2YWwpOwotCX0KLQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgInNpbGVuY2UgYSAldSwgYiAldSwgYyAldSwgMjAtYmNuIG1heCAldVxuIiwKLQkJCXNpbGVuY2VfcnNzaV9hLCBzaWxlbmNlX3Jzc2lfYiwgc2lsZW5jZV9yc3NpX2MsCi0JCQlzaWxlbmNlX3JlZik7Ci0KLQkvKiBGaW5kIG1heCByeCBlbmVyZ3kgKG1pbiB2YWx1ZSEpIGFtb25nIGFsbCAzIHJlY2VpdmVycywKLQkgKiAgIG1lYXN1cmVkIGR1cmluZyBiZWFjb24gZnJhbWUuCi0JICogU2F2ZSBpdCBpbiAxMC1iZWFjb24gaGlzdG9yeSB0YWJsZS4gKi8KLQlpID0gZGF0YS0+bnJnX2VuZXJneV9pZHg7Ci0JdmFsID0gbWluKHJ4X2luZm8tPmJlYWNvbl9lbmVyZ3lfYiwgcnhfaW5mby0+YmVhY29uX2VuZXJneV9jKTsKLQlkYXRhLT5ucmdfdmFsdWVbaV0gPSBtaW4ocnhfaW5mby0+YmVhY29uX2VuZXJneV9hLCB2YWwpOwotCi0JZGF0YS0+bnJnX2VuZXJneV9pZHgrKzsKLQlpZiAoZGF0YS0+bnJnX2VuZXJneV9pZHggPj0gMTApCi0JCWRhdGEtPm5yZ19lbmVyZ3lfaWR4ID0gMDsKLQotCS8qIEZpbmQgbWluIHJ4IGVuZXJneSAobWF4IHZhbHVlKSBhY3Jvc3MgMTAgYmVhY29uIGhpc3RvcnkuCi0JICogVGhpcyBpcyB0aGUgbWluaW11bSBzaWduYWwgbGV2ZWwgdGhhdCB3ZSB3YW50IHRvIHJlY2VpdmUgd2VsbC4KLQkgKiBBZGQgYmFja29mZiAobWFyZ2luIHNvIHdlIGRvbid0IG1pc3Mgc2xpZ2h0bHkgbG93ZXIgZW5lcmd5IGZyYW1lcykuCi0JICogVGhpcyBlc3RhYmxpc2hlcyBhbiB1cHBlciBib3VuZCAobWluIHZhbHVlKSBmb3IgZW5lcmd5IHRocmVzaG9sZC4gKi8KLQltYXhfbnJnX2NjayA9IGRhdGEtPm5yZ192YWx1ZVswXTsKLQlmb3IgKGkgPSAxOyBpIDwgMTA7IGkrKykKLQkJbWF4X25yZ19jY2sgPSAodTMyKSBtYXgobWF4X25yZ19jY2ssIChkYXRhLT5ucmdfdmFsdWVbaV0pKTsKLQltYXhfbnJnX2NjayArPSA2OwotCi0JSVdMX0RFQlVHX0NBTElCKHByaXYsICJyeCBlbmVyZ3kgYSAldSwgYiAldSwgYyAldSwgMTAtYmNuIG1heC9taW4gJXVcbiIsCi0JCQlyeF9pbmZvLT5iZWFjb25fZW5lcmd5X2EsIHJ4X2luZm8tPmJlYWNvbl9lbmVyZ3lfYiwKLQkJCXJ4X2luZm8tPmJlYWNvbl9lbmVyZ3lfYywgbWF4X25yZ19jY2sgLSA2KTsKLQotCS8qIENvdW50IG51bWJlciBvZiBjb25zZWN1dGl2ZSBiZWFjb25zIHdpdGggZmV3ZXItdGhhbi1kZXNpcmVkCi0JICogICBmYWxzZSBhbGFybXMuICovCi0JaWYgKGZhbHNlX2FsYXJtcyA8IG1pbl9mYWxzZV9hbGFybXMpCi0JCWRhdGEtPm51bV9pbl9jY2tfbm9fZmErKzsKLQllbHNlCi0JCWRhdGEtPm51bV9pbl9jY2tfbm9fZmEgPSAwOwotCUlXTF9ERUJVR19DQUxJQihwcml2LCAiY29uc2VjdXRpdmUgYmNucyB3aXRoIGZldyBmYWxzZSBhbGFybXMgPSAldVxuIiwKLQkJCWRhdGEtPm51bV9pbl9jY2tfbm9fZmEpOwotCi0JLyogSWYgd2UgZ290IHRvbyBtYW55IGZhbHNlIGFsYXJtcyB0aGlzIHRpbWUsIHJlZHVjZSBzZW5zaXRpdml0eSAqLwotCWlmICgoZmFsc2VfYWxhcm1zID4gbWF4X2ZhbHNlX2FsYXJtcykgJiYKLQkJKGRhdGEtPmF1dG9fY29ycl9jY2sgPiBBVVRPX0NPUlJfTUFYX1RIX0NDSykpIHsKLQkJSVdMX0RFQlVHX0NBTElCKHByaXYsICJub3JtIEZBICV1ID4gbWF4IEZBICV1XG4iLAotCQkgICAgIGZhbHNlX2FsYXJtcywgbWF4X2ZhbHNlX2FsYXJtcyk7Ci0JCUlXTF9ERUJVR19DQUxJQihwcml2LCAiLi4uIHJlZHVjaW5nIHNlbnNpdGl2aXR5XG4iKTsKLQkJZGF0YS0+bnJnX2N1cnJfc3RhdGUgPSBJV0xfRkFfVE9PX01BTlk7Ci0JCS8qIFN0b3JlIGZvciAiZmV3ZXIgdGhhbiBkZXNpcmVkIiBvbiBsYXRlciBiZWFjb24gKi8KLQkJZGF0YS0+bnJnX3NpbGVuY2VfcmVmID0gc2lsZW5jZV9yZWY7Ci0KLQkJLyogaW5jcmVhc2UgZW5lcmd5IHRocmVzaG9sZCAocmVkdWNlIG5yZyB2YWx1ZSkKLQkJICogICB0byBkZWNyZWFzZSBzZW5zaXRpdml0eSAqLwotCQlkYXRhLT5ucmdfdGhfY2NrID0gZGF0YS0+bnJnX3RoX2NjayAtIE5SR19TVEVQX0NDSzsKLQkvKiBFbHNlIGlmIHdlIGdvdCBmZXdlciB0aGFuIGRlc2lyZWQsIGluY3JlYXNlIHNlbnNpdGl2aXR5ICovCi0JfSBlbHNlIGlmIChmYWxzZV9hbGFybXMgPCBtaW5fZmFsc2VfYWxhcm1zKSB7Ci0JCWRhdGEtPm5yZ19jdXJyX3N0YXRlID0gSVdMX0ZBX1RPT19GRVc7Ci0KLQkJLyogQ29tcGFyZSBzaWxlbmNlIGxldmVsIHdpdGggc2lsZW5jZSBsZXZlbCBmb3IgbW9zdCByZWNlbnQKLQkJICogICBoZWFsdGh5IG51bWJlciBvciB0b28gbWFueSBmYWxzZSBhbGFybXMgKi8KLQkJZGF0YS0+bnJnX2F1dG9fY29ycl9zaWxlbmNlX2RpZmYgPSAoczMyKWRhdGEtPm5yZ19zaWxlbmNlX3JlZiAtCi0JCQkJCQkgICAoczMyKXNpbGVuY2VfcmVmOwotCi0JCUlXTF9ERUJVR19DQUxJQihwcml2LCAibm9ybSBGQSAldSA8IG1pbiBGQSAldSwgc2lsZW5jZSBkaWZmICVkXG4iLAotCQkJIGZhbHNlX2FsYXJtcywgbWluX2ZhbHNlX2FsYXJtcywKLQkJCSBkYXRhLT5ucmdfYXV0b19jb3JyX3NpbGVuY2VfZGlmZik7Ci0KLQkJLyogSW5jcmVhc2UgdmFsdWUgdG8gaW5jcmVhc2Ugc2Vuc2l0aXZpdHksIGJ1dCBvbmx5IGlmOgotCQkgKiAxYSkgcHJldmlvdXMgYmVhY29uIGRpZCAqbm90KiBoYXZlICp0b28gbWFueSogZmFsc2UgYWxhcm1zCi0JCSAqIDFiKSBBTkQgdGhlcmUncyBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgaW4gUnggbGV2ZWxzCi0JCSAqICAgICAgZnJvbSBhIHByZXZpb3VzIGJlYWNvbiB3aXRoIHRvbyBtYW55LCBvciBoZWFsdGh5ICMgRkFzCi0JCSAqIE9SIDIpIFdlJ3ZlIHNlZW4gYSBsb3Qgb2YgYmVhY29ucyAoMTAwKSB3aXRoIHRvbyBmZXcKLQkJICogICAgICAgZmFsc2UgYWxhcm1zICovCi0JCWlmICgoZGF0YS0+bnJnX3ByZXZfc3RhdGUgIT0gSVdMX0ZBX1RPT19NQU5ZKSAmJgotCQkJKChkYXRhLT5ucmdfYXV0b19jb3JyX3NpbGVuY2VfZGlmZiA+IE5SR19ESUZGKSB8fAotCQkJKGRhdGEtPm51bV9pbl9jY2tfbm9fZmEgPiBNQVhfTlVNQkVSX0NDS19OT19GQSkpKSB7Ci0KLQkJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiLi4uIGluY3JlYXNpbmcgc2Vuc2l0aXZpdHlcbiIpOwotCQkJLyogSW5jcmVhc2UgbnJnIHZhbHVlIHRvIGluY3JlYXNlIHNlbnNpdGl2aXR5ICovCi0JCQl2YWwgPSBkYXRhLT5ucmdfdGhfY2NrICsgTlJHX1NURVBfQ0NLOwotCQkJZGF0YS0+bnJnX3RoX2NjayA9IG1pbigodTMyKXJhbmdlcy0+bWluX25yZ19jY2ssIHZhbCk7Ci0JCX0gZWxzZSB7Ci0JCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIi4uLiBidXQgbm90IGNoYW5naW5nIHNlbnNpdGl2aXR5XG4iKTsKLQkJfQotCi0JLyogRWxzZSB3ZSBnb3QgYSBoZWFsdGh5IG51bWJlciBvZiBmYWxzZSBhbGFybXMsIGtlZXAgc3RhdHVzIHF1byAqLwotCX0gZWxzZSB7Ci0JCUlXTF9ERUJVR19DQUxJQihwcml2LCAiIEZBIGluIHNhZmUgem9uZVxuIik7Ci0JCWRhdGEtPm5yZ19jdXJyX3N0YXRlID0gSVdMX0ZBX0dPT0RfUkFOR0U7Ci0KLQkJLyogU3RvcmUgZm9yIHVzZSBpbiAiZmV3ZXIgdGhhbiBkZXNpcmVkIiB3aXRoIGxhdGVyIGJlYWNvbiAqLwotCQlkYXRhLT5ucmdfc2lsZW5jZV9yZWYgPSBzaWxlbmNlX3JlZjsKLQotCQkvKiBJZiBwcmV2aW91cyBiZWFjb24gaGFkIHRvbyBtYW55IGZhbHNlIGFsYXJtcywKLQkJICogICBnaXZlIGl0IHNvbWUgZXh0cmEgbWFyZ2luIGJ5IHJlZHVjaW5nIHNlbnNpdGl2aXR5IGFnYWluCi0JCSAqICAgKGJ1dCBkb24ndCBnbyBiZWxvdyBtZWFzdXJlZCBlbmVyZ3kgb2YgZGVzaXJlZCBSeCkgKi8KLQkJaWYgKElXTF9GQV9UT09fTUFOWSA9PSBkYXRhLT5ucmdfcHJldl9zdGF0ZSkgewotCQkJSVdMX0RFQlVHX0NBTElCKHByaXYsICIuLi4gaW5jcmVhc2luZyBtYXJnaW5cbiIpOwotCQkJaWYgKGRhdGEtPm5yZ190aF9jY2sgPiAobWF4X25yZ19jY2sgKyBOUkdfTUFSR0lOKSkKLQkJCQlkYXRhLT5ucmdfdGhfY2NrIC09IE5SR19NQVJHSU47Ci0JCQllbHNlCi0JCQkJZGF0YS0+bnJnX3RoX2NjayA9IG1heF9ucmdfY2NrOwotCQl9Ci0JfQotCi0JLyogTWFrZSBzdXJlIHRoZSBlbmVyZ3kgdGhyZXNob2xkIGRvZXMgbm90IGdvIGFib3ZlIHRoZSBtZWFzdXJlZAotCSAqIGVuZXJneSBvZiB0aGUgZGVzaXJlZCBSeCBzaWduYWxzIChyZWR1Y2VkIGJ5IGJhY2tvZmYgbWFyZ2luKSwKLQkgKiBvciBlbHNlIHdlIG1pZ2h0IHN0YXJ0IG1pc3NpbmcgUnggZnJhbWVzLgotCSAqIExvd2VyIHZhbHVlIGlzIGhpZ2hlciBlbmVyZ3ksIHNvIHdlIHVzZSBtYXgoKSEKLQkgKi8KLQlkYXRhLT5ucmdfdGhfY2NrID0gbWF4KG1heF9ucmdfY2NrLCBkYXRhLT5ucmdfdGhfY2NrKTsKLQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm5ldyBucmdfdGhfY2NrICV1XG4iLCBkYXRhLT5ucmdfdGhfY2NrKTsKLQotCWRhdGEtPm5yZ19wcmV2X3N0YXRlID0gZGF0YS0+bnJnX2N1cnJfc3RhdGU7Ci0KLQkvKiBBdXRvLWNvcnJlbGF0aW9uIENDSyBhbGdvcml0aG0gKi8KLQlpZiAoZmFsc2VfYWxhcm1zID4gbWluX2ZhbHNlX2FsYXJtcykgewotCi0JCS8qIGluY3JlYXNlIGF1dG9fY29yciB2YWx1ZXMgdG8gZGVjcmVhc2Ugc2Vuc2l0aXZpdHkKLQkJICogc28gdGhlIERTUCB3b24ndCBiZSBkaXN0dXJiZWQgYnkgdGhlIG5vaXNlCi0JCSAqLwotCQlpZiAoZGF0YS0+YXV0b19jb3JyX2NjayA8IEFVVE9fQ09SUl9NQVhfVEhfQ0NLKQotCQkJZGF0YS0+YXV0b19jb3JyX2NjayA9IEFVVE9fQ09SUl9NQVhfVEhfQ0NLICsgMTsKLQkJZWxzZSB7Ci0JCQl2YWwgPSBkYXRhLT5hdXRvX2NvcnJfY2NrICsgQVVUT19DT1JSX1NURVBfQ0NLOwotCQkJZGF0YS0+YXV0b19jb3JyX2NjayA9Ci0JCQkJbWluKCh1MzIpcmFuZ2VzLT5hdXRvX2NvcnJfbWF4X2NjaywgdmFsKTsKLQkJfQotCQl2YWwgPSBkYXRhLT5hdXRvX2NvcnJfY2NrX21yYyArIEFVVE9fQ09SUl9TVEVQX0NDSzsKLQkJZGF0YS0+YXV0b19jb3JyX2Nja19tcmMgPQotCQkJbWluKCh1MzIpcmFuZ2VzLT5hdXRvX2NvcnJfbWF4X2Nja19tcmMsIHZhbCk7Ci0JfSBlbHNlIGlmICgoZmFsc2VfYWxhcm1zIDwgbWluX2ZhbHNlX2FsYXJtcykgJiYKLQkgICAoKGRhdGEtPm5yZ19hdXRvX2NvcnJfc2lsZW5jZV9kaWZmID4gTlJHX0RJRkYpIHx8Ci0JICAgKGRhdGEtPm51bV9pbl9jY2tfbm9fZmEgPiBNQVhfTlVNQkVSX0NDS19OT19GQSkpKSB7Ci0KLQkJLyogRGVjcmVhc2UgYXV0b19jb3JyIHZhbHVlcyB0byBpbmNyZWFzZSBzZW5zaXRpdml0eSAqLwotCQl2YWwgPSBkYXRhLT5hdXRvX2NvcnJfY2NrIC0gQVVUT19DT1JSX1NURVBfQ0NLOwotCQlkYXRhLT5hdXRvX2NvcnJfY2NrID0KLQkJCW1heCgodTMyKXJhbmdlcy0+YXV0b19jb3JyX21pbl9jY2ssIHZhbCk7Ci0JCXZhbCA9IGRhdGEtPmF1dG9fY29ycl9jY2tfbXJjIC0gQVVUT19DT1JSX1NURVBfQ0NLOwotCQlkYXRhLT5hdXRvX2NvcnJfY2NrX21yYyA9Ci0JCQltYXgoKHUzMilyYW5nZXMtPmF1dG9fY29ycl9taW5fY2NrX21yYywgdmFsKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IGl3bF9zZW5zX2F1dG9fY29ycl9vZmRtKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICAgICAgdTMyIG5vcm1fZmEsCi0JCQkJICAgICAgIHUzMiByeF9lbmFibGVfdGltZSkKLXsKLQl1MzIgdmFsOwotCXUzMiBmYWxzZV9hbGFybXMgPSBub3JtX2ZhICogMjAwICogMTAyNDsKLQl1MzIgbWF4X2ZhbHNlX2FsYXJtcyA9IE1BWF9GQV9PRkRNICogcnhfZW5hYmxlX3RpbWU7Ci0JdTMyIG1pbl9mYWxzZV9hbGFybXMgPSBNSU5fRkFfT0ZETSAqIHJ4X2VuYWJsZV90aW1lOwotCXN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfZGF0YSAqZGF0YSA9IE5VTEw7Ci0JY29uc3Qgc3RydWN0IGl3bF9zZW5zaXRpdml0eV9yYW5nZXMgKnJhbmdlcyA9IHByaXYtPmh3X3BhcmFtcy5zZW5zOwotCi0JZGF0YSA9ICYocHJpdi0+c2Vuc2l0aXZpdHlfZGF0YSk7Ci0KLQkvKiBJZiB3ZSBnb3QgdG9vIG1hbnkgZmFsc2UgYWxhcm1zIHRoaXMgdGltZSwgcmVkdWNlIHNlbnNpdGl2aXR5ICovCi0JaWYgKGZhbHNlX2FsYXJtcyA+IG1heF9mYWxzZV9hbGFybXMpIHsKLQotCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm5vcm0gRkEgJXUgPiBtYXggRkEgJXUpXG4iLAotCQkJICAgICBmYWxzZV9hbGFybXMsIG1heF9mYWxzZV9hbGFybXMpOwotCi0JCXZhbCA9IGRhdGEtPmF1dG9fY29ycl9vZmRtICsgQVVUT19DT1JSX1NURVBfT0ZETTsKLQkJZGF0YS0+YXV0b19jb3JyX29mZG0gPQotCQkJbWluKCh1MzIpcmFuZ2VzLT5hdXRvX2NvcnJfbWF4X29mZG0sIHZhbCk7Ci0KLQkJdmFsID0gZGF0YS0+YXV0b19jb3JyX29mZG1fbXJjICsgQVVUT19DT1JSX1NURVBfT0ZETTsKLQkJZGF0YS0+YXV0b19jb3JyX29mZG1fbXJjID0KLQkJCW1pbigodTMyKXJhbmdlcy0+YXV0b19jb3JyX21heF9vZmRtX21yYywgdmFsKTsKLQotCQl2YWwgPSBkYXRhLT5hdXRvX2NvcnJfb2ZkbV94MSArIEFVVE9fQ09SUl9TVEVQX09GRE07Ci0JCWRhdGEtPmF1dG9fY29ycl9vZmRtX3gxID0KLQkJCW1pbigodTMyKXJhbmdlcy0+YXV0b19jb3JyX21heF9vZmRtX3gxLCB2YWwpOwotCi0JCXZhbCA9IGRhdGEtPmF1dG9fY29ycl9vZmRtX21yY194MSArIEFVVE9fQ09SUl9TVEVQX09GRE07Ci0JCWRhdGEtPmF1dG9fY29ycl9vZmRtX21yY194MSA9Ci0JCQltaW4oKHUzMilyYW5nZXMtPmF1dG9fY29ycl9tYXhfb2ZkbV9tcmNfeDEsIHZhbCk7Ci0JfQotCi0JLyogRWxzZSBpZiB3ZSBnb3QgZmV3ZXIgdGhhbiBkZXNpcmVkLCBpbmNyZWFzZSBzZW5zaXRpdml0eSAqLwotCWVsc2UgaWYgKGZhbHNlX2FsYXJtcyA8IG1pbl9mYWxzZV9hbGFybXMpIHsKLQotCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm5vcm0gRkEgJXUgPCBtaW4gRkEgJXVcbiIsCi0JCQkgICAgIGZhbHNlX2FsYXJtcywgbWluX2ZhbHNlX2FsYXJtcyk7Ci0KLQkJdmFsID0gZGF0YS0+YXV0b19jb3JyX29mZG0gLSBBVVRPX0NPUlJfU1RFUF9PRkRNOwotCQlkYXRhLT5hdXRvX2NvcnJfb2ZkbSA9Ci0JCQltYXgoKHUzMilyYW5nZXMtPmF1dG9fY29ycl9taW5fb2ZkbSwgdmFsKTsKLQotCQl2YWwgPSBkYXRhLT5hdXRvX2NvcnJfb2ZkbV9tcmMgLSBBVVRPX0NPUlJfU1RFUF9PRkRNOwotCQlkYXRhLT5hdXRvX2NvcnJfb2ZkbV9tcmMgPQotCQkJbWF4KCh1MzIpcmFuZ2VzLT5hdXRvX2NvcnJfbWluX29mZG1fbXJjLCB2YWwpOwotCi0JCXZhbCA9IGRhdGEtPmF1dG9fY29ycl9vZmRtX3gxIC0gQVVUT19DT1JSX1NURVBfT0ZETTsKLQkJZGF0YS0+YXV0b19jb3JyX29mZG1feDEgPQotCQkJbWF4KCh1MzIpcmFuZ2VzLT5hdXRvX2NvcnJfbWluX29mZG1feDEsIHZhbCk7Ci0KLQkJdmFsID0gZGF0YS0+YXV0b19jb3JyX29mZG1fbXJjX3gxIC0gQVVUT19DT1JSX1NURVBfT0ZETTsKLQkJZGF0YS0+YXV0b19jb3JyX29mZG1fbXJjX3gxID0KLQkJCW1heCgodTMyKXJhbmdlcy0+YXV0b19jb3JyX21pbl9vZmRtX21yY194MSwgdmFsKTsKLQl9IGVsc2UgewotCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm1pbiBGQSAldSA8IG5vcm0gRkEgJXUgPCBtYXggRkEgJXUgT0tcbiIsCi0JCQkgbWluX2ZhbHNlX2FsYXJtcywgZmFsc2VfYWxhcm1zLCBtYXhfZmFsc2VfYWxhcm1zKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIFByZXBhcmUgYSBTRU5TSVRJVklUWV9DTUQsIHNlbmQgdG8gdUNvZGUgaWYgdmFsdWVzIGhhdmUgY2hhbmdlZCAqLwotc3RhdGljIGludCBpd2xfc2Vuc2l0aXZpdHlfd3JpdGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCXN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfY21kIGNtZCA7Ci0Jc3RydWN0IGl3bF9zZW5zaXRpdml0eV9kYXRhICpkYXRhID0gTlVMTDsKLQlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZF9vdXQgPSB7Ci0JCS5pZCA9IFNFTlNJVElWSVRZX0NNRCwKLQkJLmxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X2NtZCksCi0JCS5mbGFncyA9IENNRF9BU1lOQywKLQkJLmRhdGEgPSAmY21kLAotCX07Ci0KLQlkYXRhID0gJihwcml2LT5zZW5zaXRpdml0eV9kYXRhKTsKLQotCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7Ci0KLQljbWQudGFibGVbSERfQVVUT19DT1JSMzJfWDRfVEhfQUREX01JTl9JTkRFWF0gPQotCQkJCWNwdV90b19sZTE2KCh1MTYpZGF0YS0+YXV0b19jb3JyX29mZG0pOwotCWNtZC50YWJsZVtIRF9BVVRPX0NPUlIzMl9YNF9USF9BRERfTUlOX01SQ19JTkRFWF0gPQotCQkJCWNwdV90b19sZTE2KCh1MTYpZGF0YS0+YXV0b19jb3JyX29mZG1fbXJjKTsKLQljbWQudGFibGVbSERfQVVUT19DT1JSMzJfWDFfVEhfQUREX01JTl9JTkRFWF0gPQotCQkJCWNwdV90b19sZTE2KCh1MTYpZGF0YS0+YXV0b19jb3JyX29mZG1feDEpOwotCWNtZC50YWJsZVtIRF9BVVRPX0NPUlIzMl9YMV9USF9BRERfTUlOX01SQ19JTkRFWF0gPQotCQkJCWNwdV90b19sZTE2KCh1MTYpZGF0YS0+YXV0b19jb3JyX29mZG1fbXJjX3gxKTsKLQotCWNtZC50YWJsZVtIRF9BVVRPX0NPUlI0MF9YNF9USF9BRERfTUlOX0lOREVYXSA9Ci0JCQkJY3B1X3RvX2xlMTYoKHUxNilkYXRhLT5hdXRvX2NvcnJfY2NrKTsKLQljbWQudGFibGVbSERfQVVUT19DT1JSNDBfWDRfVEhfQUREX01JTl9NUkNfSU5ERVhdID0KLQkJCQljcHVfdG9fbGUxNigodTE2KWRhdGEtPmF1dG9fY29ycl9jY2tfbXJjKTsKLQotCWNtZC50YWJsZVtIRF9NSU5fRU5FUkdZX0NDS19ERVRfSU5ERVhdID0KLQkJCQljcHVfdG9fbGUxNigodTE2KWRhdGEtPm5yZ190aF9jY2spOwotCWNtZC50YWJsZVtIRF9NSU5fRU5FUkdZX09GRE1fREVUX0lOREVYXSA9Ci0JCQkJY3B1X3RvX2xlMTYoKHUxNilkYXRhLT5ucmdfdGhfb2ZkbSk7Ci0KLQljbWQudGFibGVbSERfQkFSS0VSX0NPUlJfVEhfQUREX01JTl9JTkRFWF0gPQotCQkJCWNwdV90b19sZTE2KGRhdGEtPmJhcmtlcl9jb3JyX3RoX21pbik7Ci0JY21kLnRhYmxlW0hEX0JBUktFUl9DT1JSX1RIX0FERF9NSU5fTVJDX0lOREVYXSA9Ci0JCQkJY3B1X3RvX2xlMTYoZGF0YS0+YmFya2VyX2NvcnJfdGhfbWluX21yYyk7Ci0JY21kLnRhYmxlW0hEX09GRE1fRU5FUkdZX1RIX0lOX0lOREVYXSA9Ci0JCQkJY3B1X3RvX2xlMTYoZGF0YS0+bnJnX3RoX2NjYSk7Ci0KLQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm9mZG06IGFjICV1IG1yYyAldSB4MSAldSBtcmNfeDEgJXUgdGhyZXNoICV1XG4iLAotCQkJZGF0YS0+YXV0b19jb3JyX29mZG0sIGRhdGEtPmF1dG9fY29ycl9vZmRtX21yYywKLQkJCWRhdGEtPmF1dG9fY29ycl9vZmRtX3gxLCBkYXRhLT5hdXRvX2NvcnJfb2ZkbV9tcmNfeDEsCi0JCQlkYXRhLT5ucmdfdGhfb2ZkbSk7Ci0KLQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgImNjazogYWMgJXUgbXJjICV1IHRocmVzaCAldVxuIiwKLQkJCWRhdGEtPmF1dG9fY29ycl9jY2ssIGRhdGEtPmF1dG9fY29ycl9jY2tfbXJjLAotCQkJZGF0YS0+bnJnX3RoX2Njayk7Ci0KLQkvKiBVcGRhdGUgdUNvZGUncyAid29yayIgdGFibGUsIGFuZCBjb3B5IGl0IHRvIERTUCAqLwotCWNtZC5jb250cm9sID0gU0VOU0lUSVZJVFlfQ01EX0NPTlRST0xfV09SS19UQUJMRTsKLQotCS8qIERvbid0IHNlbmQgY29tbWFuZCB0byB1Q29kZSBpZiBub3RoaW5nIGhhcyBjaGFuZ2VkICovCi0JaWYgKCFtZW1jbXAoJmNtZC50YWJsZVswXSwgJihwcml2LT5zZW5zaXRpdml0eV90YmxbMF0pLAotCQkgICAgc2l6ZW9mKHUxNikqSERfVEFCTEVfU0laRSkpIHsKLQkJSVdMX0RFQlVHX0NBTElCKHByaXYsICJObyBjaGFuZ2UgaW4gU0VOU0lUSVZJVFlfQ01EXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogQ29weSB0YWJsZSBmb3IgY29tcGFyaXNvbiBuZXh0IHRpbWUgKi8KLQltZW1jcHkoJihwcml2LT5zZW5zaXRpdml0eV90YmxbMF0pLCAmKGNtZC50YWJsZVswXSksCi0JICAgICAgIHNpemVvZih1MTYpKkhEX1RBQkxFX1NJWkUpOwotCi0JcmV0dXJuIGl3bF9zZW5kX2NtZChwcml2LCAmY21kX291dCk7Ci19Ci0KLXZvaWQgaXdsX2luaXRfc2Vuc2l0aXZpdHkoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCWludCByZXQgPSAwOwotCWludCBpOwotCXN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfZGF0YSAqZGF0YSA9IE5VTEw7Ci0JY29uc3Qgc3RydWN0IGl3bF9zZW5zaXRpdml0eV9yYW5nZXMgKnJhbmdlcyA9IHByaXYtPmh3X3BhcmFtcy5zZW5zOwotCi0JaWYgKHByaXYtPmRpc2FibGVfc2Vuc19jYWwpCi0JCXJldHVybjsKLQotCUlXTF9ERUJVR19DQUxJQihwcml2LCAiU3RhcnQgaXdsX2luaXRfc2Vuc2l0aXZpdHlcbiIpOwotCi0JLyogQ2xlYXIgZHJpdmVyJ3Mgc2Vuc2l0aXZpdHkgYWxnbyBkYXRhICovCi0JZGF0YSA9ICYocHJpdi0+c2Vuc2l0aXZpdHlfZGF0YSk7Ci0KLQlpZiAocmFuZ2VzID09IE5VTEwpCi0JCXJldHVybjsKLQotCW1lbXNldChkYXRhLCAwLCBzaXplb2Yoc3RydWN0IGl3bF9zZW5zaXRpdml0eV9kYXRhKSk7Ci0KLQlkYXRhLT5udW1faW5fY2NrX25vX2ZhID0gMDsKLQlkYXRhLT5ucmdfY3Vycl9zdGF0ZSA9IElXTF9GQV9UT09fTUFOWTsKLQlkYXRhLT5ucmdfcHJldl9zdGF0ZSA9IElXTF9GQV9UT09fTUFOWTsKLQlkYXRhLT5ucmdfc2lsZW5jZV9yZWYgPSAwOwotCWRhdGEtPm5yZ19zaWxlbmNlX2lkeCA9IDA7Ci0JZGF0YS0+bnJnX2VuZXJneV9pZHggPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCi0JCWRhdGEtPm5yZ192YWx1ZVtpXSA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlJHX05VTV9QUkVWX1NUQVRfTDsgaSsrKQotCQlkYXRhLT5ucmdfc2lsZW5jZV9yc3NpW2ldID0gMDsKLQotCWRhdGEtPmF1dG9fY29ycl9vZmRtID0gIHJhbmdlcy0+YXV0b19jb3JyX21pbl9vZmRtOwotCWRhdGEtPmF1dG9fY29ycl9vZmRtX21yYyA9IHJhbmdlcy0+YXV0b19jb3JyX21pbl9vZmRtX21yYzsKLQlkYXRhLT5hdXRvX2NvcnJfb2ZkbV94MSAgPSByYW5nZXMtPmF1dG9fY29ycl9taW5fb2ZkbV94MTsKLQlkYXRhLT5hdXRvX2NvcnJfb2ZkbV9tcmNfeDEgPSByYW5nZXMtPmF1dG9fY29ycl9taW5fb2ZkbV9tcmNfeDE7Ci0JZGF0YS0+YXV0b19jb3JyX2NjayA9IEFVVE9fQ09SUl9DQ0tfTUlOX1ZBTF9ERUY7Ci0JZGF0YS0+YXV0b19jb3JyX2Nja19tcmMgPSByYW5nZXMtPmF1dG9fY29ycl9taW5fY2NrX21yYzsKLQlkYXRhLT5ucmdfdGhfY2NrID0gcmFuZ2VzLT5ucmdfdGhfY2NrOwotCWRhdGEtPm5yZ190aF9vZmRtID0gcmFuZ2VzLT5ucmdfdGhfb2ZkbTsKLQlkYXRhLT5iYXJrZXJfY29ycl90aF9taW4gPSByYW5nZXMtPmJhcmtlcl9jb3JyX3RoX21pbjsKLQlkYXRhLT5iYXJrZXJfY29ycl90aF9taW5fbXJjID0gcmFuZ2VzLT5iYXJrZXJfY29ycl90aF9taW5fbXJjOwotCWRhdGEtPm5yZ190aF9jY2EgPSByYW5nZXMtPm5yZ190aF9jY2E7Ci0KLQlkYXRhLT5sYXN0X2JhZF9wbGNwX2NudF9vZmRtID0gMDsKLQlkYXRhLT5sYXN0X2ZhX2NudF9vZmRtID0gMDsKLQlkYXRhLT5sYXN0X2JhZF9wbGNwX2NudF9jY2sgPSAwOwotCWRhdGEtPmxhc3RfZmFfY250X2NjayA9IDA7Ci0KLQlyZXQgfD0gaXdsX3NlbnNpdGl2aXR5X3dyaXRlKHByaXYpOwotCUlXTF9ERUJVR19DQUxJQihwcml2LCAiPDxyZXR1cm4gMHglWFxuIiwgcmV0KTsKLX0KLUVYUE9SVF9TWU1CT0woaXdsX2luaXRfc2Vuc2l0aXZpdHkpOwotCi12b2lkIGl3bF9zZW5zaXRpdml0eV9jYWxpYnJhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgIHN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcyAqcmVzcCkKLXsKLQl1MzIgcnhfZW5hYmxlX3RpbWU7Ci0JdTMyIGZhX2NjazsKLQl1MzIgZmFfb2ZkbTsKLQl1MzIgYmFkX3BsY3BfY2NrOwotCXUzMiBiYWRfcGxjcF9vZmRtOwotCXUzMiBub3JtX2ZhX29mZG07Ci0JdTMyIG5vcm1fZmFfY2NrOwotCXN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfZGF0YSAqZGF0YSA9IE5VTEw7Ci0Jc3RydWN0IHN0YXRpc3RpY3Nfcnhfbm9uX3BoeSAqcnhfaW5mbyA9ICYocmVzcC0+cnguZ2VuZXJhbCk7Ci0Jc3RydWN0IHN0YXRpc3RpY3NfcnggKnN0YXRpc3RpY3MgPSAmKHJlc3AtPnJ4KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBzdGF0aXN0aWNzX2dlbmVyYWxfZGF0YSBzdGF0aXM7Ci0KLQlpZiAocHJpdi0+ZGlzYWJsZV9zZW5zX2NhbCkKLQkJcmV0dXJuOwotCi0JZGF0YSA9ICYocHJpdi0+c2Vuc2l0aXZpdHlfZGF0YSk7Ci0KLQlpZiAoIWl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19DQUxJQihwcml2LCAiPDwgLSBub3QgYXNzb2NpYXRlZFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWlmIChyeF9pbmZvLT5pbnRlcmZlcmVuY2VfZGF0YV9mbGFnICE9IElOVEVSRkVSRU5DRV9EQVRBX0FWQUlMQUJMRSkgewotCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIjw8IGludmFsaWQgZGF0YS5cbiIpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBFeHRyYWN0IFN0YXRpc3RpY3M6ICovCi0JcnhfZW5hYmxlX3RpbWUgPSBsZTMyX3RvX2NwdShyeF9pbmZvLT5jaGFubmVsX2xvYWQpOwotCWZhX2NjayA9IGxlMzJfdG9fY3B1KHN0YXRpc3RpY3MtPmNjay5mYWxzZV9hbGFybV9jbnQpOwotCWZhX29mZG0gPSBsZTMyX3RvX2NwdShzdGF0aXN0aWNzLT5vZmRtLmZhbHNlX2FsYXJtX2NudCk7Ci0JYmFkX3BsY3BfY2NrID0gbGUzMl90b19jcHUoc3RhdGlzdGljcy0+Y2NrLnBsY3BfZXJyKTsKLQliYWRfcGxjcF9vZmRtID0gbGUzMl90b19jcHUoc3RhdGlzdGljcy0+b2ZkbS5wbGNwX2Vycik7Ci0KLQlzdGF0aXMuYmVhY29uX3NpbGVuY2VfcnNzaV9hID0KLQkJCWxlMzJfdG9fY3B1KHN0YXRpc3RpY3MtPmdlbmVyYWwuYmVhY29uX3NpbGVuY2VfcnNzaV9hKTsKLQlzdGF0aXMuYmVhY29uX3NpbGVuY2VfcnNzaV9iID0KLQkJCWxlMzJfdG9fY3B1KHN0YXRpc3RpY3MtPmdlbmVyYWwuYmVhY29uX3NpbGVuY2VfcnNzaV9iKTsKLQlzdGF0aXMuYmVhY29uX3NpbGVuY2VfcnNzaV9jID0KLQkJCWxlMzJfdG9fY3B1KHN0YXRpc3RpY3MtPmdlbmVyYWwuYmVhY29uX3NpbGVuY2VfcnNzaV9jKTsKLQlzdGF0aXMuYmVhY29uX2VuZXJneV9hID0KLQkJCWxlMzJfdG9fY3B1KHN0YXRpc3RpY3MtPmdlbmVyYWwuYmVhY29uX2VuZXJneV9hKTsKLQlzdGF0aXMuYmVhY29uX2VuZXJneV9iID0KLQkJCWxlMzJfdG9fY3B1KHN0YXRpc3RpY3MtPmdlbmVyYWwuYmVhY29uX2VuZXJneV9iKTsKLQlzdGF0aXMuYmVhY29uX2VuZXJneV9jID0KLQkJCWxlMzJfdG9fY3B1KHN0YXRpc3RpY3MtPmdlbmVyYWwuYmVhY29uX2VuZXJneV9jKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCUlXTF9ERUJVR19DQUxJQihwcml2LCAicnhfZW5hYmxlX3RpbWUgPSAldSB1c2Vjc1xuIiwgcnhfZW5hYmxlX3RpbWUpOwotCi0JaWYgKCFyeF9lbmFibGVfdGltZSkgewotCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIjw8IFJYIEVuYWJsZSBUaW1lID09IDAhXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIFRoZXNlIHN0YXRpc3RpY3MgaW5jcmVhc2UgbW9ub3RvbmljYWxseSwgYW5kIGRvIG5vdCByZXNldAotCSAqICAgYXQgZWFjaCBiZWFjb24uICBDYWxjdWxhdGUgZGlmZmVyZW5jZSBmcm9tIGxhc3QgdmFsdWUsIG9yIGp1c3QKLQkgKiAgIHVzZSB0aGUgbmV3IHN0YXRpc3RpY3MgdmFsdWUgaWYgaXQgaGFzIHJlc2V0IG9yIHdyYXBwZWQgYXJvdW5kLiAqLwotCWlmIChkYXRhLT5sYXN0X2JhZF9wbGNwX2NudF9jY2sgPiBiYWRfcGxjcF9jY2spCi0JCWRhdGEtPmxhc3RfYmFkX3BsY3BfY250X2NjayA9IGJhZF9wbGNwX2NjazsKLQllbHNlIHsKLQkJYmFkX3BsY3BfY2NrIC09IGRhdGEtPmxhc3RfYmFkX3BsY3BfY250X2NjazsKLQkJZGF0YS0+bGFzdF9iYWRfcGxjcF9jbnRfY2NrICs9IGJhZF9wbGNwX2NjazsKLQl9Ci0KLQlpZiAoZGF0YS0+bGFzdF9iYWRfcGxjcF9jbnRfb2ZkbSA+IGJhZF9wbGNwX29mZG0pCi0JCWRhdGEtPmxhc3RfYmFkX3BsY3BfY250X29mZG0gPSBiYWRfcGxjcF9vZmRtOwotCWVsc2UgewotCQliYWRfcGxjcF9vZmRtIC09IGRhdGEtPmxhc3RfYmFkX3BsY3BfY250X29mZG07Ci0JCWRhdGEtPmxhc3RfYmFkX3BsY3BfY250X29mZG0gKz0gYmFkX3BsY3Bfb2ZkbTsKLQl9Ci0KLQlpZiAoZGF0YS0+bGFzdF9mYV9jbnRfb2ZkbSA+IGZhX29mZG0pCi0JCWRhdGEtPmxhc3RfZmFfY250X29mZG0gPSBmYV9vZmRtOwotCWVsc2UgewotCQlmYV9vZmRtIC09IGRhdGEtPmxhc3RfZmFfY250X29mZG07Ci0JCWRhdGEtPmxhc3RfZmFfY250X29mZG0gKz0gZmFfb2ZkbTsKLQl9Ci0KLQlpZiAoZGF0YS0+bGFzdF9mYV9jbnRfY2NrID4gZmFfY2NrKQotCQlkYXRhLT5sYXN0X2ZhX2NudF9jY2sgPSBmYV9jY2s7Ci0JZWxzZSB7Ci0JCWZhX2NjayAtPSBkYXRhLT5sYXN0X2ZhX2NudF9jY2s7Ci0JCWRhdGEtPmxhc3RfZmFfY250X2NjayArPSBmYV9jY2s7Ci0JfQotCi0JLyogVG90YWwgYWJvcnRlZCBzaWduYWwgbG9ja3MgKi8KLQlub3JtX2ZhX29mZG0gPSBmYV9vZmRtICsgYmFkX3BsY3Bfb2ZkbTsKLQlub3JtX2ZhX2NjayA9IGZhX2NjayArIGJhZF9wbGNwX2NjazsKLQotCUlXTF9ERUJVR19DQUxJQihwcml2LCAiY2NrOiBmYSAldSBiYWRwICV1ICBvZmRtOiBmYSAldSBiYWRwICV1XG4iLCBmYV9jY2ssCi0JCQliYWRfcGxjcF9jY2ssIGZhX29mZG0sIGJhZF9wbGNwX29mZG0pOwotCi0JaXdsX3NlbnNfYXV0b19jb3JyX29mZG0ocHJpdiwgbm9ybV9mYV9vZmRtLCByeF9lbmFibGVfdGltZSk7Ci0JaXdsX3NlbnNfZW5lcmd5X2Njayhwcml2LCBub3JtX2ZhX2NjaywgcnhfZW5hYmxlX3RpbWUsICZzdGF0aXMpOwotCWl3bF9zZW5zaXRpdml0eV93cml0ZShwcml2KTsKLX0KLUVYUE9SVF9TWU1CT0woaXdsX3NlbnNpdGl2aXR5X2NhbGlicmF0aW9uKTsKLQotc3RhdGljIGlubGluZSB1OCBmaW5kX2ZpcnN0X2NoYWluKHU4IG1hc2spCi17Ci0JaWYgKG1hc2sgJiBBTlRfQSkKLQkJcmV0dXJuIENIQUlOX0E7Ci0JaWYgKG1hc2sgJiBBTlRfQikKLQkJcmV0dXJuIENIQUlOX0I7Ci0JcmV0dXJuIENIQUlOX0M7Ci19Ci0KLS8qCi0gKiBBY2N1bXVsYXRlIDIwIGJlYWNvbnMgb2Ygc2lnbmFsIGFuZCBub2lzZSBzdGF0aXN0aWNzIGZvciBlYWNoIG9mCi0gKiAgIDMgcmVjZWl2ZXJzL2FudGVubmFzL3J4LWNoYWlucywgdGhlbiBmaWd1cmUgb3V0OgotICogMSkgIFdoaWNoIGFudGVubmFzIGFyZSBjb25uZWN0ZWQuCi0gKiAyKSAgRGlmZmVyZW50aWFsIHJ4IGdhaW4gc2V0dGluZ3MgdG8gYmFsYW5jZSB0aGUgMyByZWNlaXZlcnMuCi0gKi8KLXZvaWQgaXdsX2NoYWluX25vaXNlX2NhbGlicmF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzICpzdGF0X3Jlc3ApCi17Ci0Jc3RydWN0IGl3bF9jaGFpbl9ub2lzZV9kYXRhICpkYXRhID0gTlVMTDsKLQotCXUzMiBjaGFpbl9ub2lzZV9hOwotCXUzMiBjaGFpbl9ub2lzZV9iOwotCXUzMiBjaGFpbl9ub2lzZV9jOwotCXUzMiBjaGFpbl9zaWdfYTsKLQl1MzIgY2hhaW5fc2lnX2I7Ci0JdTMyIGNoYWluX3NpZ19jOwotCXUzMiBhdmVyYWdlX3NpZ1tOVU1fUlhfQ0hBSU5TXSA9IHtJTklUSUFMSVpBVElPTl9WQUxVRX07Ci0JdTMyIGF2ZXJhZ2Vfbm9pc2VbTlVNX1JYX0NIQUlOU10gPSB7SU5JVElBTElaQVRJT05fVkFMVUV9OwotCXUzMiBtYXhfYXZlcmFnZV9zaWc7Ci0JdTE2IG1heF9hdmVyYWdlX3NpZ19hbnRlbm5hX2k7Ci0JdTMyIG1pbl9hdmVyYWdlX25vaXNlID0gTUlOX0FWRVJBR0VfTk9JU0VfTUFYX1ZBTFVFOwotCXUxNiBtaW5fYXZlcmFnZV9ub2lzZV9hbnRlbm5hX2kgPSBJTklUSUFMSVpBVElPTl9WQUxVRTsKLQl1MTYgaSA9IDA7Ci0JdTE2IHJ4b25fY2hudW0gPSBJTklUSUFMSVpBVElPTl9WQUxVRTsKLQl1MTYgc3RhdF9jaG51bSA9IElOSVRJQUxJWkFUSU9OX1ZBTFVFOwotCXU4IHJ4b25fYmFuZDI0OwotCXU4IHN0YXRfYmFuZDI0OwotCXUzMiBhY3RpdmVfY2hhaW5zID0gMDsKLQl1OCBudW1fdHhfY2hhaW5zOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHN0YXRpc3RpY3Nfcnhfbm9uX3BoeSAqcnhfaW5mbyA9ICYoc3RhdF9yZXNwLT5yeC5nZW5lcmFsKTsKLQl1OCBmaXJzdF9jaGFpbjsKLQotCWlmIChwcml2LT5kaXNhYmxlX2NoYWluX25vaXNlX2NhbCkKLQkJcmV0dXJuOwotCi0JZGF0YSA9ICYocHJpdi0+Y2hhaW5fbm9pc2VfZGF0YSk7Ci0KLQkvKgotCSAqIEFjY3VtdWxhdGUganVzdCB0aGUgZmlyc3QgImNoYWluX25vaXNlX251bV9iZWFjb25zIiBhZnRlcgotCSAqIHRoZSBmaXJzdCBhc3NvY2lhdGlvbiwgdGhlbiB3ZSdyZSBkb25lIGZvcmV2ZXIuCi0JICovCi0JaWYgKGRhdGEtPnN0YXRlICE9IElXTF9DSEFJTl9OT0lTRV9BQ0NVTVVMQVRFKSB7Ci0JCWlmIChkYXRhLT5zdGF0ZSA9PSBJV0xfQ0hBSU5fTk9JU0VfQUxJVkUpCi0JCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIldhaXQgZm9yIG5vaXNlIGNhbGliIHJlc2V0XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaWYgKHJ4X2luZm8tPmludGVyZmVyZW5jZV9kYXRhX2ZsYWcgIT0gSU5URVJGRVJFTkNFX0RBVEFfQVZBSUxBQkxFKSB7Ci0JCUlXTF9ERUJVR19DQUxJQihwcml2LCAiIDw8IEludGVyZmVyZW5jZSBkYXRhIHVuYXZhaWxhYmxlXG4iKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCi0Jcnhvbl9iYW5kMjQgPSAhIShwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spOwotCXJ4b25fY2hudW0gPSBsZTE2X3RvX2NwdShwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCk7Ci0Jc3RhdF9iYW5kMjQgPSAhIShzdGF0X3Jlc3AtPmZsYWcgJiBTVEFUSVNUSUNTX1JFUExZX0ZMR19CQU5EXzI0R19NU0spOwotCXN0YXRfY2hudW0gPSBsZTMyX3RvX2NwdShzdGF0X3Jlc3AtPmZsYWcpID4+IDE2OwotCi0JLyogTWFrZSBzdXJlIHdlIGFjY3VtdWxhdGUgZGF0YSBmb3IganVzdCB0aGUgYXNzb2NpYXRlZCBjaGFubmVsCi0JICogICAoZXZlbiBpZiBzY2FubmluZykuICovCi0JaWYgKChyeG9uX2NobnVtICE9IHN0YXRfY2hudW0pIHx8IChyeG9uX2JhbmQyNCAhPSBzdGF0X2JhbmQyNCkpIHsKLQkJSVdMX0RFQlVHX0NBTElCKHByaXYsICJTdGF0cyBub3QgZnJvbSBjaGFuPSVkLCBiYW5kMjQ9JWRcbiIsCi0JCQkJcnhvbl9jaG51bSwgcnhvbl9iYW5kMjQpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqICBBY2N1bXVsYXRlIGJlYWNvbiBzdGF0aXN0aWNzIHZhbHVlcyBhY3Jvc3MKLQkgKiAiY2hhaW5fbm9pc2VfbnVtX2JlYWNvbnMiCi0JICovCi0JY2hhaW5fbm9pc2VfYSA9IGxlMzJfdG9fY3B1KHJ4X2luZm8tPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYSkgJgotCQkJCUlOX0JBTkRfRklMVEVSOwotCWNoYWluX25vaXNlX2IgPSBsZTMyX3RvX2NwdShyeF9pbmZvLT5iZWFjb25fc2lsZW5jZV9yc3NpX2IpICYKLQkJCQlJTl9CQU5EX0ZJTFRFUjsKLQljaGFpbl9ub2lzZV9jID0gbGUzMl90b19jcHUocnhfaW5mby0+YmVhY29uX3NpbGVuY2VfcnNzaV9jKSAmCi0JCQkJSU5fQkFORF9GSUxURVI7Ci0KLQljaGFpbl9zaWdfYSA9IGxlMzJfdG9fY3B1KHJ4X2luZm8tPmJlYWNvbl9yc3NpX2EpICYgSU5fQkFORF9GSUxURVI7Ci0JY2hhaW5fc2lnX2IgPSBsZTMyX3RvX2NwdShyeF9pbmZvLT5iZWFjb25fcnNzaV9iKSAmIElOX0JBTkRfRklMVEVSOwotCWNoYWluX3NpZ19jID0gbGUzMl90b19jcHUocnhfaW5mby0+YmVhY29uX3Jzc2lfYykgJiBJTl9CQU5EX0ZJTFRFUjsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCWRhdGEtPmJlYWNvbl9jb3VudCsrOwotCi0JZGF0YS0+Y2hhaW5fbm9pc2VfYSA9IChjaGFpbl9ub2lzZV9hICsgZGF0YS0+Y2hhaW5fbm9pc2VfYSk7Ci0JZGF0YS0+Y2hhaW5fbm9pc2VfYiA9IChjaGFpbl9ub2lzZV9iICsgZGF0YS0+Y2hhaW5fbm9pc2VfYik7Ci0JZGF0YS0+Y2hhaW5fbm9pc2VfYyA9IChjaGFpbl9ub2lzZV9jICsgZGF0YS0+Y2hhaW5fbm9pc2VfYyk7Ci0KLQlkYXRhLT5jaGFpbl9zaWduYWxfYSA9IChjaGFpbl9zaWdfYSArIGRhdGEtPmNoYWluX3NpZ25hbF9hKTsKLQlkYXRhLT5jaGFpbl9zaWduYWxfYiA9IChjaGFpbl9zaWdfYiArIGRhdGEtPmNoYWluX3NpZ25hbF9iKTsKLQlkYXRhLT5jaGFpbl9zaWduYWxfYyA9IChjaGFpbl9zaWdfYyArIGRhdGEtPmNoYWluX3NpZ25hbF9jKTsKLQotCUlXTF9ERUJVR19DQUxJQihwcml2LCAiY2hhbj0lZCwgYmFuZDI0PSVkLCBiZWFjb249JWRcbiIsCi0JCQlyeG9uX2NobnVtLCByeG9uX2JhbmQyNCwgZGF0YS0+YmVhY29uX2NvdW50KTsKLQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgImNoYWluX3NpZzogYSAlZCBiICVkIGMgJWRcbiIsCi0JCQljaGFpbl9zaWdfYSwgY2hhaW5fc2lnX2IsIGNoYWluX3NpZ19jKTsKLQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgImNoYWluX25vaXNlOiBhICVkIGIgJWQgYyAlZFxuIiwKLQkJCWNoYWluX25vaXNlX2EsIGNoYWluX25vaXNlX2IsIGNoYWluX25vaXNlX2MpOwotCi0JLyogSWYgdGhpcyBpcyB0aGUgImNoYWluX25vaXNlX251bV9iZWFjb25zIiwgZGV0ZXJtaW5lOgotCSAqIDEpICBEaXNjb25uZWN0ZWQgYW50ZW5uYXMgKHVzaW5nIHNpZ25hbCBzdHJlbmd0aHMpCi0JICogMikgIERpZmZlcmVudGlhbCBnYWluICh1c2luZyBzaWxlbmNlIG5vaXNlKSB0byBiYWxhbmNlIHJlY2VpdmVycyAqLwotCWlmIChkYXRhLT5iZWFjb25fY291bnQgIT0gcHJpdi0+Y2ZnLT5jaGFpbl9ub2lzZV9udW1fYmVhY29ucykKLQkJcmV0dXJuOwotCi0JLyogQW5hbHl6ZSBzaWduYWwgZm9yIGRpc2Nvbm5lY3RlZCBhbnRlbm5hICovCi0JYXZlcmFnZV9zaWdbMF0gPQotCQkoZGF0YS0+Y2hhaW5fc2lnbmFsX2EpIC8gcHJpdi0+Y2ZnLT5jaGFpbl9ub2lzZV9udW1fYmVhY29uczsKLQlhdmVyYWdlX3NpZ1sxXSA9Ci0JCShkYXRhLT5jaGFpbl9zaWduYWxfYikgLyBwcml2LT5jZmctPmNoYWluX25vaXNlX251bV9iZWFjb25zOwotCWF2ZXJhZ2Vfc2lnWzJdID0KLQkJKGRhdGEtPmNoYWluX3NpZ25hbF9jKSAvIHByaXYtPmNmZy0+Y2hhaW5fbm9pc2VfbnVtX2JlYWNvbnM7Ci0KLQlpZiAoYXZlcmFnZV9zaWdbMF0gPj0gYXZlcmFnZV9zaWdbMV0pIHsKLQkJbWF4X2F2ZXJhZ2Vfc2lnID0gYXZlcmFnZV9zaWdbMF07Ci0JCW1heF9hdmVyYWdlX3NpZ19hbnRlbm5hX2kgPSAwOwotCQlhY3RpdmVfY2hhaW5zID0gKDEgPDwgbWF4X2F2ZXJhZ2Vfc2lnX2FudGVubmFfaSk7Ci0JfSBlbHNlIHsKLQkJbWF4X2F2ZXJhZ2Vfc2lnID0gYXZlcmFnZV9zaWdbMV07Ci0JCW1heF9hdmVyYWdlX3NpZ19hbnRlbm5hX2kgPSAxOwotCQlhY3RpdmVfY2hhaW5zID0gKDEgPDwgbWF4X2F2ZXJhZ2Vfc2lnX2FudGVubmFfaSk7Ci0JfQotCi0JaWYgKGF2ZXJhZ2Vfc2lnWzJdID49IG1heF9hdmVyYWdlX3NpZykgewotCQltYXhfYXZlcmFnZV9zaWcgPSBhdmVyYWdlX3NpZ1syXTsKLQkJbWF4X2F2ZXJhZ2Vfc2lnX2FudGVubmFfaSA9IDI7Ci0JCWFjdGl2ZV9jaGFpbnMgPSAoMSA8PCBtYXhfYXZlcmFnZV9zaWdfYW50ZW5uYV9pKTsKLQl9Ci0KLQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgImF2ZXJhZ2Vfc2lnOiBhICVkIGIgJWQgYyAlZFxuIiwKLQkJICAgICBhdmVyYWdlX3NpZ1swXSwgYXZlcmFnZV9zaWdbMV0sIGF2ZXJhZ2Vfc2lnWzJdKTsKLQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm1heF9hdmVyYWdlX3NpZyA9ICVkLCBhbnRlbm5hICVkXG4iLAotCQkgICAgIG1heF9hdmVyYWdlX3NpZywgbWF4X2F2ZXJhZ2Vfc2lnX2FudGVubmFfaSk7Ci0KLQkvKiBDb21wYXJlIHNpZ25hbCBzdHJlbmd0aHMgZm9yIGFsbCAzIHJlY2VpdmVycy4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX1JYX0NIQUlOUzsgaSsrKSB7Ci0JCWlmIChpICE9IG1heF9hdmVyYWdlX3NpZ19hbnRlbm5hX2kpIHsKLQkJCXMzMiByc3NpX2RlbHRhID0gKG1heF9hdmVyYWdlX3NpZyAtIGF2ZXJhZ2Vfc2lnW2ldKTsKLQotCQkJLyogSWYgc2lnbmFsIGlzIHZlcnkgd2VhaywgY29tcGFyZWQgd2l0aAotCQkJICogc3Ryb25nZXN0LCBtYXJrIGl0IGFzIGRpc2Nvbm5lY3RlZC4gKi8KLQkJCWlmIChyc3NpX2RlbHRhID4gTUFYSU1VTV9BTExPV0VEX1BBVEhMT1NTKQotCQkJCWRhdGEtPmRpc2Nvbm5fYXJyYXlbaV0gPSAxOwotCQkJZWxzZQotCQkJCWFjdGl2ZV9jaGFpbnMgfD0gKDEgPDwgaSk7Ci0JCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgImkgPSAlZCAgcnNzaURlbHRhID0gJWQgICIKLQkJCSAgICAgImRpc2Nvbm5fYXJyYXlbaV0gPSAlZFxuIiwKLQkJCSAgICAgaSwgcnNzaV9kZWx0YSwgZGF0YS0+ZGlzY29ubl9hcnJheVtpXSk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFRoZSBhYm92ZSBhbGdvcml0aG0gc29tZXRpbWVzIGZhaWxzIHdoZW4gdGhlIHVjb2RlCi0JICogcmVwb3J0cyAwIGZvciBhbGwgY2hhaW5zLiBJdCdzIG5vdCBjbGVhciB3aHkgdGhhdAotCSAqIGhhcHBlbnMgdG8gc3RhcnQgd2l0aCwgYnV0IGl0IGlzIHRoZW4gY2F1c2luZyB0cm91YmxlCi0JICogYmVjYXVzZSB0aGlzIGNhbiBtYWtlIHVzIGVuYWJsZSBtb3JlIGNoYWlucyB0aGFuIHRoZQotCSAqIGhhcmR3YXJlIHJlYWxseSBoYXMuCi0JICoKLQkgKiBUbyBiZSBzYWZlLCBzaW1wbHkgbWFzayBvdXQgYW55IGNoYWlucyB0aGF0IHdlIGtub3cKLQkgKiBhcmUgbm90IG9uIHRoZSBkZXZpY2UuCi0JICovCi0JYWN0aXZlX2NoYWlucyAmPSBwcml2LT5od19wYXJhbXMudmFsaWRfcnhfYW50OwotCi0JbnVtX3R4X2NoYWlucyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IE5VTV9SWF9DSEFJTlM7IGkrKykgewotCQkvKiBsb29wcyBvbiBhbGwgdGhlIGJpdHMgb2YKLQkJICogcHJpdi0+aHdfc2V0dGluZy52YWxpZF90eF9hbnQgKi8KLQkJdTggYW50X21zayA9ICgxIDw8IGkpOwotCQlpZiAoIShwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50ICYgYW50X21zaykpCi0JCQljb250aW51ZTsKLQotCQludW1fdHhfY2hhaW5zKys7Ci0JCWlmIChkYXRhLT5kaXNjb25uX2FycmF5W2ldID09IDApCi0JCQkvKiB0aGVyZSBpcyBhIFR4IGFudGVubmEgY29ubmVjdGVkICovCi0JCQlicmVhazsKLQkJaWYgKG51bV90eF9jaGFpbnMgPT0gcHJpdi0+aHdfcGFyYW1zLnR4X2NoYWluc19udW0gJiYKLQkJICAgIGRhdGEtPmRpc2Nvbm5fYXJyYXlbaV0pIHsKLQkJCS8qCi0JCQkgKiBJZiBhbGwgY2hhaW5zIGFyZSBkaXNjb25uZWN0ZWQKLQkJCSAqIGNvbm5lY3QgdGhlIGZpcnN0IHZhbGlkIHR4IGNoYWluCi0JCQkgKi8KLQkJCWZpcnN0X2NoYWluID0KLQkJCQlmaW5kX2ZpcnN0X2NoYWluKHByaXYtPmNmZy0+dmFsaWRfdHhfYW50KTsKLQkJCWRhdGEtPmRpc2Nvbm5fYXJyYXlbZmlyc3RfY2hhaW5dID0gMDsKLQkJCWFjdGl2ZV9jaGFpbnMgfD0gQklUKGZpcnN0X2NoYWluKTsKLQkJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiQWxsIFR4IGNoYWlucyBhcmUgZGlzY29ubmVjdGVkIFcvQSAtIGRlY2xhcmUgJWQgYXMgY29ubmVjdGVkXG4iLAotCQkJCQlmaXJzdF9jaGFpbik7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qIFNhdmUgZm9yIHVzZSB3aXRoaW4gUlhPTiwgVFgsIFNDQU4gY29tbWFuZHMsIGV0Yy4gKi8KLQlwcml2LT5jaGFpbl9ub2lzZV9kYXRhLmFjdGl2ZV9jaGFpbnMgPSBhY3RpdmVfY2hhaW5zOwotCUlXTF9ERUJVR19DQUxJQihwcml2LCAiYWN0aXZlX2NoYWlucyAoYml0d2lzZSkgPSAweCV4XG4iLAotCQkJYWN0aXZlX2NoYWlucyk7Ci0KLQkvKiBBbmFseXplIG5vaXNlIGZvciByeCBiYWxhbmNlICovCi0JYXZlcmFnZV9ub2lzZVswXSA9Ci0JCSgoZGF0YS0+Y2hhaW5fbm9pc2VfYSkgLyBwcml2LT5jZmctPmNoYWluX25vaXNlX251bV9iZWFjb25zKTsKLQlhdmVyYWdlX25vaXNlWzFdID0KLQkJKChkYXRhLT5jaGFpbl9ub2lzZV9iKSAvIHByaXYtPmNmZy0+Y2hhaW5fbm9pc2VfbnVtX2JlYWNvbnMpOwotCWF2ZXJhZ2Vfbm9pc2VbMl0gPQotCQkoKGRhdGEtPmNoYWluX25vaXNlX2MpIC8gcHJpdi0+Y2ZnLT5jaGFpbl9ub2lzZV9udW1fYmVhY29ucyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX1JYX0NIQUlOUzsgaSsrKSB7Ci0JCWlmICghKGRhdGEtPmRpc2Nvbm5fYXJyYXlbaV0pICYmCi0JCSAgIChhdmVyYWdlX25vaXNlW2ldIDw9IG1pbl9hdmVyYWdlX25vaXNlKSkgewotCQkJLyogVGhpcyBtZWFucyB0aGF0IGNoYWluIGkgaXMgYWN0aXZlIGFuZCBoYXMKLQkJCSAqIGxvd2VyIG5vaXNlIHZhbHVlcyBzbyBmYXI6ICovCi0JCQltaW5fYXZlcmFnZV9ub2lzZSA9IGF2ZXJhZ2Vfbm9pc2VbaV07Ci0JCQltaW5fYXZlcmFnZV9ub2lzZV9hbnRlbm5hX2kgPSBpOwotCQl9Ci0JfQotCi0JSVdMX0RFQlVHX0NBTElCKHByaXYsICJhdmVyYWdlX25vaXNlOiBhICVkIGIgJWQgYyAlZFxuIiwKLQkJCWF2ZXJhZ2Vfbm9pc2VbMF0sIGF2ZXJhZ2Vfbm9pc2VbMV0sCi0JCQlhdmVyYWdlX25vaXNlWzJdKTsKLQotCUlXTF9ERUJVR19DQUxJQihwcml2LCAibWluX2F2ZXJhZ2Vfbm9pc2UgPSAlZCwgYW50ZW5uYSAlZFxuIiwKLQkJCW1pbl9hdmVyYWdlX25vaXNlLCBtaW5fYXZlcmFnZV9ub2lzZV9hbnRlbm5hX2kpOwotCi0JaWYgKHByaXYtPmNmZy0+b3BzLT51dGlscy0+Z2Fpbl9jb21wdXRhdGlvbikKLQkJcHJpdi0+Y2ZnLT5vcHMtPnV0aWxzLT5nYWluX2NvbXB1dGF0aW9uKHByaXYsIGF2ZXJhZ2Vfbm9pc2UsCi0JCQkJbWluX2F2ZXJhZ2Vfbm9pc2VfYW50ZW5uYV9pLCBtaW5fYXZlcmFnZV9ub2lzZSwKLQkJCQlmaW5kX2ZpcnN0X2NoYWluKHByaXYtPmNmZy0+dmFsaWRfcnhfYW50KSk7Ci0KLQkvKiBTb21lIHBvd2VyIGNoYW5nZXMgbWF5IGhhdmUgYmVlbiBtYWRlIGR1cmluZyB0aGUgY2FsaWJyYXRpb24uCi0JICogVXBkYXRlIGFuZCBjb21taXQgdGhlIFJYT04KLQkgKi8KLQlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dXBkYXRlX2NoYWluX2ZsYWdzKQotCQlwcml2LT5jZmctPm9wcy0+bGliLT51cGRhdGVfY2hhaW5fZmxhZ3MocHJpdik7Ci0KLQlkYXRhLT5zdGF0ZSA9IElXTF9DSEFJTl9OT0lTRV9ET05FOwotCWl3bF9wb3dlcl91cGRhdGVfbW9kZShwcml2LCBmYWxzZSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGl3bF9jaGFpbl9ub2lzZV9jYWxpYnJhdGlvbik7Ci0KLQotdm9pZCBpd2xfcmVzZXRfcnVuX3RpbWVfY2FsaWIoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCWludCBpOwotCW1lbXNldCgmKHByaXYtPnNlbnNpdGl2aXR5X2RhdGEpLCAwLAotCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9zZW5zaXRpdml0eV9kYXRhKSk7Ci0JbWVtc2V0KCYocHJpdi0+Y2hhaW5fbm9pc2VfZGF0YSksIDAsCi0JICAgICAgIHNpemVvZihzdHJ1Y3QgaXdsX2NoYWluX25vaXNlX2RhdGEpKTsKLQlmb3IgKGkgPSAwOyBpIDwgTlVNX1JYX0NIQUlOUzsgaSsrKQotCQlwcml2LT5jaGFpbl9ub2lzZV9kYXRhLmRlbHRhX2dhaW5fY29kZVtpXSA9Ci0JCQkJQ0hBSU5fTk9JU0VfREVMVEFfR0FJTl9JTklUX1ZBTDsKLQotCS8qIEFzayBmb3Igc3RhdGlzdGljcyBub3csIHRoZSB1Q29kZSB3aWxsIHNlbmQgbm90aWZpY2F0aW9uCi0JICogcGVyaW9kaWNhbGx5IGFmdGVyIGFzc29jaWF0aW9uICovCi0JaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHByaXYsIENNRF9BU1lOQywgdHJ1ZSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGl3bF9yZXNldF9ydW5fdGltZV9jYWxpYik7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNhbGliLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jYWxpYi5oCmluZGV4IDJiN2IxZGYuLmJhOTUyM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNhbGliLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuaApAQCAtNjYsMTAgKzY2LDggQEAKICNpbmNsdWRlICJpd2wtY29yZS5oIgogI2luY2x1ZGUgIml3bC1jb21tYW5kcy5oIgogCi12b2lkIGl3bF9jaGFpbl9ub2lzZV9jYWxpYnJhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzICpzdGF0X3Jlc3ApOwotdm9pZCBpd2xfc2Vuc2l0aXZpdHlfY2FsaWJyYXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcyAqcmVzcCk7Cit2b2lkIGl3bF9jaGFpbl9ub2lzZV9jYWxpYnJhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHZvaWQgKnN0YXRfcmVzcCk7Cit2b2lkIGl3bF9zZW5zaXRpdml0eV9jYWxpYnJhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHZvaWQgKnJlc3ApOwogCiB2b2lkIGl3bF9pbml0X3NlbnNpdGl2aXR5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB2b2lkIGl3bF9yZXNldF9ydW5fdGltZV9jYWxpYihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29tbWFuZHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvbW1hbmRzLmgKaW5kZXggOWFhYjAyMC4uNjA3MjVhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29tbWFuZHMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb21tYW5kcy5oCkBAIC05NSw4ICs5NSw5IEBACiAKIAkvKiBNdWx0aS1TdGF0aW9uIHN1cHBvcnQgKi8KIAlSRVBMWV9BRERfU1RBID0gMHgxOCwKLQlSRVBMWV9SRU1PVkVfU1RBID0gMHgxOSwJLyogbm90IHVzZWQgKi8KKwlSRVBMWV9SRU1PVkVfU1RBID0gMHgxOSwKIAlSRVBMWV9SRU1PVkVfQUxMX1NUQSA9IDB4MWEsCS8qIG5vdCB1c2VkICovCisJUkVQTFlfVFhGSUZPX0ZMVVNIID0gMHgxZSwKIAogCS8qIFNlY3VyaXR5ICovCiAJUkVQTFlfV0VQS0VZID0gMHgyMCwKQEAgLTIyNyw3ICsyMjgsNyBAQAogCiAJLyogY29tbWFuZCBvciByZXNwb25zZS9ub3RpZmljYXRpb24gZGF0YSBmb2xsb3dzIGltbWVkaWF0ZWx5ICovCiAJdTggZGF0YVswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogCiAvKioKQEAgLTI0Nyw3ICsyNDgsNyBAQAogc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIgewogCXU4IHR4X2dhaW47CQkvKiBnYWluIGZvciBhbmFsb2cgcmFkaW8gKi8KIAl1OCBkc3BfYXR0ZW47CQkvKiBnYWluIGZvciBEU1AgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoqCiAgKiBzdHJ1Y3QgaXdsMzk0NV9wb3dlcl9wZXJfcmF0ZQpAQCAtMjU4LDcgKzI1OSw3IEBACiAJdTggcmF0ZTsJCS8qIHBsY3AgKi8KIAlzdHJ1Y3QgaXdsMzk0NV90eF9wb3dlciB0cGM7CiAJdTggcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qKgogICogaXdsYWduIHJhdGVfbl9mbGFncyBiaXQgZmllbGRzCkBAIC0zODksNyArMzkwLDcgQEAKICAqLwogc3RydWN0IHR4X3Bvd2VyX2R1YWxfc3RyZWFtIHsKIAlfX2xlMzIgZHc7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qKgogICogc3RydWN0IGl3bDQ5NjVfdHhfcG93ZXJfZGIKQEAgLTM5OCw3ICszOTksNyBAQAogICovCiBzdHJ1Y3QgaXdsNDk2NV90eF9wb3dlcl9kYiB7CiAJc3RydWN0IHR4X3Bvd2VyX2R1YWxfc3RyZWFtIHBvd2VyX3RibFtQT1dFUl9UQUJMRV9OVU1fRU5UUklFU107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qKgogICogQ29tbWFuZCBSRVBMWV9UWF9QT1dFUl9EQk1fQ01EID0gMHg5OApAQCAtNDEyLDcgKzQxMyw3IEBACiAJdTggZmxhZ3M7CiAJczggc3J2X2NoYW5fbG10OyAvKmluIGhhbGYtZEJtIChlLmcuIDMwID0gMTUgZEJtKSAqLwogCXU4IHJlc2VydmVkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKioKICAqIENvbW1hbmQgVFhfQU5UX0NPTkZJR1VSQVRJT05fQ01EID0gMHg5OApAQCAtNDIyLDcgKzQyMyw3IEBACiAgKi8KIHN0cnVjdCBpd2xfdHhfYW50X2NvbmZpZ19jbWQgewogCV9fbGUzMiB2YWxpZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogKDBhKQpAQCAtNDc4LDcgKzQ3OSw3IEBACiAJX19sZTMyIHRoZXJtX3I0WzJdOwkvKiBzaWduZWQgKi8KIAlfX2xlMzIgdHhfYXR0ZW5bNV1bMl07CS8qIHNpZ25lZCBNSU1PIGdhaW4gY29tcCwgNSBmcmVxIGdyb3VwcywKIAkJCQkgKiAyIFR4IGNoYWlucyAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAKIC8qKgpAQCAtNTcwLDcgKzU3MSw3IEBACiAJX19sZTMyIGVycm9yX2V2ZW50X3RhYmxlX3B0cjsJLyogU1JBTSBhZGRyZXNzIGZvciBlcnJvciBsb2cgKi8KIAlfX2xlMzIgdGltZXN0YW1wOwogCV9fbGUzMiBpc192YWxpZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoKICAqIFJFUExZX0VSUk9SID0gMHgyIChyZXNwb25zZSBvbmx5LCBub3QgYSBjb21tYW5kKQpAQCAtNTgyLDcgKzU4Myw3IEBACiAJX19sZTE2IGJhZF9jbWRfc2VxX251bTsKIAlfX2xlMzIgZXJyb3JfaW5mbzsKIAlfX2xlNjQgdGltZXN0YW1wOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAoMSkKQEAgLTcxOCw3ICs3MTksNyBAQAogCV9fbGUzMiBmaWx0ZXJfZmxhZ3M7CiAJX19sZTE2IGNoYW5uZWw7CiAJX19sZTE2IHJlc2VydmVkNTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bDQ5NjVfcnhvbl9jbWQgewogCXU4IG5vZGVfYWRkcls2XTsKQEAgLTczOCw3ICs3MzksNyBAQAogCV9fbGUxNiBjaGFubmVsOwogCXU4IG9mZG1faHRfc2luZ2xlX3N0cmVhbV9iYXNpY19yYXRlczsKIAl1OCBvZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiA1MDAwIEhXIGp1c3QgZXh0ZW5kIHRoaXMgY29tbWFuZCAqLwogc3RydWN0IGl3bF9yeG9uX2NtZCB7CkBAIC03NjMsNyArNzY0LDcgQEAKIAl1OCByZXNlcnZlZDU7CiAJX19sZTE2IGFjcXVpc2l0aW9uX2RhdGE7CiAJX19sZTE2IHJlc2VydmVkNjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoKICAqIFJFUExZX1JYT05fQVNTT0MgPSAweDExIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCkBAIC03NzQsNyArNzc1LDcgQEAKIAl1OCBvZmRtX2Jhc2ljX3JhdGVzOwogCXU4IGNja19iYXNpY19yYXRlczsKIAlfX2xlMTYgcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpd2w0OTY1X3J4b25fYXNzb2NfY21kIHsKIAlfX2xlMzIgZmxhZ3M7CkBAIC03ODUsNyArNzg2LDcgQEAKIAl1OCBvZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzOwogCV9fbGUxNiByeF9jaGFpbl9zZWxlY3RfZmxhZ3M7CiAJX19sZTE2IHJlc2VydmVkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXdsNTAwMF9yeG9uX2Fzc29jX2NtZCB7CiAJX19sZTMyIGZsYWdzOwpAQCAtODAwLDcgKzgwMSw3IEBACiAJX19sZTE2IHJ4X2NoYWluX3NlbGVjdF9mbGFnczsKIAlfX2xlMTYgYWNxdWlzaXRpb25fZGF0YTsKIAlfX2xlMzIgcmVzZXJ2ZWQzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIElXTF9DT05OX01BWF9MSVNURU5fSU5URVJWQUwJMTAKICNkZWZpbmUgSVdMX01BWF9VQ09ERV9CRUFDT05fSU5URVJWQUwJNCAvKiA0MDk2ICovCkBAIC04MTYsNyArODE3LDcgQEAKIAlfX2xlMzIgYmVhY29uX2luaXRfdmFsOwogCV9fbGUxNiBsaXN0ZW5faW50ZXJ2YWw7CiAJX19sZTE2IHJlc2VydmVkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKgogICogUkVQTFlfQ0hBTk5FTF9TV0lUQ0ggPSAweDcyIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCkBAIC04MjksNyArODMwLDcgQEAKIAlfX2xlMzIgcnhvbl9maWx0ZXJfZmxhZ3M7CiAJX19sZTMyIHN3aXRjaF90aW1lOwogCXN0cnVjdCBpd2wzOTQ1X3Bvd2VyX3Blcl9yYXRlIHBvd2VyW0lXTF9NQVhfUkFURVNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX3N3aXRjaF9jbWQgewogCXU4IGJhbmQ7CkBAIC04MzksNyArODQwLDcgQEAKIAlfX2xlMzIgcnhvbl9maWx0ZXJfZmxhZ3M7CiAJX19sZTMyIHN3aXRjaF90aW1lOwogCXN0cnVjdCBpd2w0OTY1X3R4X3Bvd2VyX2RiIHR4X3Bvd2VyOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKioKICAqIHN0cnVjdCBpd2w1MDAwX2NoYW5uZWxfc3dpdGNoX2NtZApAQCAtODYwLDcgKzg2MSw3IEBACiAJX19sZTMyIHJ4b25fZmlsdGVyX2ZsYWdzOwogCV9fbGUzMiBzd2l0Y2hfdGltZTsKIAlfX2xlMzIgcmVzZXJ2ZWRbMl1bSVdMX1BXUl9OVU1fSFRfT0ZETV9FTlRSSUVTICsgSVdMX1BXUl9DQ0tfRU5UUklFU107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qKgogICogc3RydWN0IGl3bDYwMDBfY2hhbm5lbF9zd2l0Y2hfY21kCkBAIC04ODEsNyArODgyLDcgQEAKIAlfX2xlMzIgcnhvbl9maWx0ZXJfZmxhZ3M7CiAJX19sZTMyIHN3aXRjaF90aW1lOwogCV9fbGUzMiByZXNlcnZlZFszXVtJV0xfUFdSX05VTV9IVF9PRkRNX0VOVFJJRVMgKyBJV0xfUFdSX0NDS19FTlRSSUVTXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoKICAqIENIQU5ORUxfU1dJVENIX05PVElGSUNBVElPTiA9IDB4NzMgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQpAQCAtODkwLDcgKzg5MSw3IEBACiAJX19sZTE2IGJhbmQ7CiAJX19sZTE2IGNoYW5uZWw7CiAJX19sZTMyIHN0YXR1czsJCS8qIDAgLSBPSywgMSAtIGZhaWwgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogKDIpCkBAIC05MjAsNyArOTIxLDcgQEAKIAl1OCBhaWZzbjsKIAl1OCByZXNlcnZlZDE7CiAJX19sZTE2IGVkY2FfdHhvcDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogUW9TIGZsYWdzIGRlZmluZXMgKi8KICNkZWZpbmUgUU9TX1BBUkFNX0ZMR19VUERBVEVfRURDQV9NU0sJY3B1X3RvX2xlMzIoMHgwMSkKQEAgLTkzOSw3ICs5NDAsNyBAQAogc3RydWN0IGl3bF9xb3NwYXJhbV9jbWQgewogCV9fbGUzMiBxb3NfZmxhZ3M7CiAJc3RydWN0IGl3bF9hY19xb3MgYWNbQUNfTlVNXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogKDMpCkBAIC05NTIsMjAgKzk1MywxOSBAQAogCiAvKiBTcGVjaWFsLCBkZWRpY2F0ZWQgbG9jYXRpb25zIHdpdGhpbiBkZXZpY2UncyBzdGF0aW9uIHRhYmxlICovCiAjZGVmaW5lCUlXTF9BUF9JRAkJMAotI2RlZmluZSBJV0xfTVVMVElDQVNUX0lECTEKICNkZWZpbmUJSVdMX1NUQV9JRAkJMgogI2RlZmluZQlJV0wzOTQ1X0JST0FEQ0FTVF9JRAkyNAogI2RlZmluZSBJV0wzOTQ1X1NUQVRJT05fQ09VTlQJMjUKICNkZWZpbmUgSVdMNDk2NV9CUk9BRENBU1RfSUQJMzEKICNkZWZpbmUJSVdMNDk2NV9TVEFUSU9OX0NPVU5UCTMyCi0jZGVmaW5lIElXTDUwMDBfQlJPQURDQVNUX0lECTE1Ci0jZGVmaW5lCUlXTDUwMDBfU1RBVElPTl9DT1VOVAkxNgorI2RlZmluZSBJV0xBR05fQlJPQURDQVNUX0lECTE1CisjZGVmaW5lCUlXTEFHTl9TVEFUSU9OX0NPVU5UCTE2CiAKICNkZWZpbmUJSVdMX1NUQVRJT05fQ09VTlQJMzIgCS8qIE1BWCgzOTQ1LDQ5NjUpKi8KICNkZWZpbmUJSVdMX0lOVkFMSURfU1RBVElPTiAJMjU1CiAKLSNkZWZpbmUgU1RBX0ZMR19UWF9SQVRFX01TSwkJY3B1X3RvX2xlMzIoMSA8PCAyKTsKLSNkZWZpbmUgU1RBX0ZMR19QV1JfU0FWRV9NU0sJCWNwdV90b19sZTMyKDEgPDwgOCk7CisjZGVmaW5lIFNUQV9GTEdfVFhfUkFURV9NU0sJCWNwdV90b19sZTMyKDEgPDwgMikKKyNkZWZpbmUgU1RBX0ZMR19QV1JfU0FWRV9NU0sJCWNwdV90b19sZTMyKDEgPDwgOCkKICNkZWZpbmUgU1RBX0ZMR19SVFNfTUlNT19QUk9UX01TSwljcHVfdG9fbGUzMigxIDw8IDE3KQogI2RlZmluZSBTVEFfRkxHX0FHR19NUERVXzhVU19NU0sJY3B1X3RvX2xlMzIoMSA8PCAxOCkKICNkZWZpbmUgU1RBX0ZMR19NQVhfQUdHX1NJWkVfUE9TCSgxOSkKQEAgLTEwMTUsNyArMTAxNSw3IEBACiAJdTgga2V5X29mZnNldDsKIAl1OCByZXNlcnZlZDI7CiAJdTgga2V5WzE2XTsJCS8qIDE2LWJ5dGUgdW5pY2FzdCBkZWNyeXB0aW9uIGtleSAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiA1MDAwICovCiBzdHJ1Y3QgaXdsX2tleWluZm8gewpAQCAtMTAyOSw3ICsxMDI5LDcgQEAKIAlfX2xlNjQgdHhfc2VjdXJfc2VxX2NudDsKIAlfX2xlNjQgaHdfdGtpcF9taWNfcnhfa2V5OwogCV9fbGU2NCBod190a2lwX21pY190eF9rZXk7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qKgogICogc3RydWN0IHN0YV9pZF9tb2RpZnkKQEAgLTEwNDksNyArMTA0OSw3IEBACiAJdTggc3RhX2lkOwogCXU4IG1vZGlmeV9tYXNrOwogCV9fbGUxNiByZXNlcnZlZDI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qCiAgKiBSRVBMWV9BRERfU1RBID0gMHgxOCAoY29tbWFuZCkKQEAgLTExMDMsNyArMTEwMyw3IEBACiAJLyogU3RhcnRpbmcgU2VxdWVuY2UgTnVtYmVyIGZvciBhZGRlZCBibG9jay1hY2sgc3VwcG9ydC4KIAkgKiBTZXQgbW9kaWZ5X21hc2sgYml0IFNUQV9NT0RJRllfQUREQkFfVElEX01TSyB0byB1c2UgdGhpcyBmaWVsZC4gKi8KIAlfX2xlMTYgYWRkX2ltbWVkaWF0ZV9iYV9zc247Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpd2w0OTY1X2FkZHN0YV9jbWQgewogCXU4IG1vZGU7CQkvKiAxOiBtb2RpZnkgZXhpc3RpbmcsIDA6IGFkZCBuZXcgc3RhdGlvbiAqLwpAQCAtMTE0MCw3ICsxMTQwLDcgQEAKIAlfX2xlMTYgc2xlZXBfdHhfY291bnQ7CiAKIAlfX2xlMTYgcmVzZXJ2ZWQyOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiA1MDAwICovCiBzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgewpAQCAtMTE3OCw3ICsxMTc4LDcgQEAKIAlfX2xlMTYgc2xlZXBfdHhfY291bnQ7CiAKIAlfX2xlMTYgcmVzZXJ2ZWQyOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAKICNkZWZpbmUgQUREX1NUQV9TVUNDRVNTX01TSwkJMHgxCkBAIC0xMTkwLDcgKzExOTAsNyBAQAogICovCiBzdHJ1Y3QgaXdsX2FkZF9zdGFfcmVzcCB7CiAJdTggc3RhdHVzOwkvKiBBRERfU1RBXyogKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBSRU1fU1RBX1NVQ0NFU1NfTVNLICAgICAgICAgICAgICAweDEKIC8qCkBAIC0xMTk4LDcgKzExOTgsNyBAQAogICovCiBzdHJ1Y3QgaXdsX3JlbV9zdGFfcmVzcCB7CiAJdTggc3RhdHVzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKgogICogIFJFUExZX1JFTV9TVEEgPSAweDE5IChjb21tYW5kKQpAQCAtMTIwOCw3ICsxMjA4LDQ0IEBACiAJdTggcmVzZXJ2ZWRbM107CiAJdTggYWRkcltFVEhfQUxFTl07IC8qIE1BQyBhZGRyIG9mIHRoZSBmaXJzdCBzdGF0aW9uICovCiAJdTggcmVzZXJ2ZWQyWzJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOworCisjZGVmaW5lIElXTF9UWF9GSUZPX0JLX01TSwkJY3B1X3RvX2xlMzIoQklUKDApKQorI2RlZmluZSBJV0xfVFhfRklGT19CRV9NU0sJCWNwdV90b19sZTMyKEJJVCgxKSkKKyNkZWZpbmUgSVdMX1RYX0ZJRk9fVklfTVNLCQljcHVfdG9fbGUzMihCSVQoMikpCisjZGVmaW5lIElXTF9UWF9GSUZPX1ZPX01TSwkJY3B1X3RvX2xlMzIoQklUKDMpKQorI2RlZmluZSBJV0xfQUdHX1RYX1FVRVVFX01TSwkJY3B1X3RvX2xlMzIoMHhmZmMwMCkKKworI2RlZmluZSBJV0xfRFJPUF9TSU5HTEUJCTAKKyNkZWZpbmUgSVdMX0RST1BfU0VMRUNURUQJMQorI2RlZmluZSBJV0xfRFJPUF9BTEwJCTIKKworLyoKKyAqIFJFUExZX1RYRklGT19GTFVTSCA9IDB4MWUoY29tbWFuZCBhbmQgcmVzcG9uc2UpCisgKgorICogV2hlbiB1c2luZyBmdWxsIEZJRk8gZmx1c2ggdGhpcyBjb21tYW5kIGNoZWNrcyB0aGUgc2NoZWR1bGVyIEhXIGJsb2NrIFdSL1JECisgKiBwb2ludGVycyB0byBjaGVjayBpZiBhbGwgdGhlIGZyYW1lcyB3ZXJlIHRyYW5zZmVycmVkIGJ5IERNQSBpbnRvIHRoZQorICogcmVsZXZhbnQgVFggRklGTyBxdWV1ZS4gT25seSB3aGVuIHRoZSBETUEgaXMgZmluaXNoZWQgYW5kIHRoZSBxdWV1ZSBpcworICogZW1wdHkgdGhlIGNvbW1hbmQgY2FuIGZpbmlzaC4KKyAqIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGZsdXNoIHRoZSBUWEZJRk8gZnJvbSB0cmFuc21pdCBjb21tYW5kcywgaXQgbWF5CisgKiBvcGVyYXRlIG9uIHNpbmdsZSBvciBtdWx0aXBsZSBxdWV1ZXMsIHRoZSBjb21tYW5kIHF1ZXVlIGNhbid0IGJlIGZsdXNoZWQgYnkKKyAqIHRoaXMgY29tbWFuZC4gVGhlIGNvbW1hbmQgcmVzcG9uc2UgaXMgcmV0dXJuZWQgd2hlbiBhbGwgdGhlIHF1ZXVlIGZsdXNoCisgKiBvcGVyYXRpb25zIGFyZSBkb25lLiBFYWNoIFRYIGNvbW1hbmQgZmx1c2hlZCByZXR1cm4gcmVzcG9uc2Ugd2l0aCB0aGUgRkxVU0gKKyAqIHN0YXR1cyBzZXQgaW4gdGhlIFRYIHJlc3BvbnNlIHN0YXR1cy4gV2hlbiBGSUZPIGZsdXNoIG9wZXJhdGlvbiBpcyB1c2VkLAorICogdGhlIGZsdXNoIG9wZXJhdGlvbiBlbmRzIHdoZW4gYm90aCB0aGUgc2NoZWR1bGVyIERNQSBkb25lIGFuZCBUWEZJRk8gZW1wdHkKKyAqIGFyZSBzZXQuCisgKgorICogQGZpZm9fY29udHJvbDogYml0IG1hc2sgZm9yIHdoaWNoIHF1ZXVlcyB0byBmbHVzaAorICogQGZsdXNoX2NvbnRyb2w6IGZsdXNoIGNvbnRyb2xzCisgKgkwOiBEdW1wIHNpbmdsZSBNU0RVCisgKgkxOiBEdW1wIG11bHRpcGxlIE1TRFUgYWNjb3JkaW5nIHRvIFBTLCBJTlZBTElEIFNUQSwgVFRMLCBUSUQgZGlzYWJsZS4KKyAqCTI6IER1bXAgYWxsIEZJRk8KKyAqLworc3RydWN0IGl3bF90eGZpZm9fZmx1c2hfY21kIHsKKwlfX2xlMzIgZmlmb19jb250cm9sOworCV9fbGUxNiBmbHVzaF9jb250cm9sOworCV9fbGUxNiByZXNlcnZlZDsKK30gX19wYWNrZWQ7CiAKIC8qCiAgKiBSRVBMWV9XRVBfS0VZID0gMHgyMApAQCAtMTIyMCw3ICsxMjU3LDcgQEAKIAl1OCBrZXlfc2l6ZTsKIAl1OCByZXNlcnZlZDJbM107CiAJdTgga2V5WzE2XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bF93ZXBfY21kIHsKIAl1OCBudW1fa2V5czsKQEAgLTEyMjgsNyArMTI2NSw3IEBACiAJdTggZmxhZ3M7CiAJdTggcmVzZXJ2ZWQ7CiAJc3RydWN0IGl3bF93ZXBfa2V5IGtleVswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBXRVBfS0VZX1dFUF9UWVBFIDEKICNkZWZpbmUgV0VQX0tFWVNfTUFYIDQKQEAgLTEyODIsNyArMTMxOSw3IEBACiAJX19sZTE2IHNpZ19hdmc7CiAJX19sZTE2IG5vaXNlX2RpZmY7CiAJdTggcGF5bG9hZFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfaGRyIHsKIAlfX2xlMTYgY2hhbm5lbDsKQEAgLTEyOTEsMTMgKzEzMjgsMTMgQEAKIAl1OCByYXRlOwogCV9fbGUxNiBsZW47CiAJdTggcGF5bG9hZFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfZW5kIHsKIAlfX2xlMzIgc3RhdHVzOwogCV9fbGU2NCB0aW1lc3RhbXA7CiAJX19sZTMyIGJlYWNvbl90aW1lc3RhbXA7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qCiAgKiBSRVBMWV8zOTQ1X1JYID0gMHgxYiAocmVzcG9uc2Ugb25seSwgbm90IGEgY29tbWFuZCkKQEAgLTEzMTEsNyArMTM0OCw3IEBACiAJc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfc3RhdHMgc3RhdHM7CiAJc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfaGRyIGhkcjsKIAlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9lbmQgZW5kOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIElXTDM5X1JYX0ZSQU1FX1NJWkUJKDQgKyBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcnhfZnJhbWUpKQogCkBAIC0xMzI3LDcgKzEzNjQsNyBAQAogCV9fbGUxNiBhZ2NfaW5mbzsJLyogYWdjIGNvZGUgMDo2LCBhZ2MgZEIgNzoxMywgcmVzZXJ2ZWQgMTQ6MTUgKi8KIAl1OCByc3NpX2luZm9bNl07CS8qIHdlIHVzZSBldmVuIGVudHJpZXMsIDAvMi80IGZvciBBL0IvQyByc3NpICovCiAJdTggcGFkWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAKICNkZWZpbmUgSVdMNTBfUlhfUkVTX1BIWV9DTlQgOApAQCAtMTM0NSw3ICsxMzgyLDcgQEAKIAogc3RydWN0IGl3bDUwMDBfbm9uX2NmZ19waHkgewogCV9fbGUzMiBub25fY2ZnX3BoeVtJV0w1MF9SWF9SRVNfUEhZX0NOVF07ICAvKiB1cCB0byA4IHBoeSBlbnRyaWVzICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIAogLyoKQEAgLTEzNjUsMTIgKzE0MDIsMTIgQEAKIAlfX2xlMzIgcmF0ZV9uX2ZsYWdzOwkvKiBSQVRFX01DU18qICovCiAJX19sZTE2IGJ5dGVfY291bnQ7CS8qIGZyYW1lJ3MgYnl0ZS1jb3VudCAqLwogCV9fbGUxNiByZXNlcnZlZDM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKLXN0cnVjdCBpd2w0OTY1X3J4X21wZHVfcmVzX3N0YXJ0IHsKK3N0cnVjdCBpd2xfcnhfbXBkdV9yZXNfc3RhcnQgewogCV9fbGUxNiBieXRlX2NvdW50OwogCV9fbGUxNiByZXNlcnZlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNDAwLDE4ICsxNDM3LDI3IEBACiAKIC8qIFJFUExZX1RYIFR4IGZsYWdzIGZpZWxkICovCiAKLS8qIDE6IFVzZSBSVFMvQ1RTIHByb3RvY29sIG9yIENUUy10by1zZWxmIGlmIHNwZWMgYWxsb3dzIGl0CisvKgorICogMTogVXNlIFJUUy9DVFMgcHJvdG9jb2wgb3IgQ1RTLXRvLXNlbGYgaWYgc3BlYyBhbGxvd3MgaXQKICAqIGJlZm9yZSB0aGlzIGZyYW1lLiBpZiBDVFMtdG8tc2VsZiByZXF1aXJlZCBjaGVjawotICogUlhPTl9GTEdfU0VMRl9DVFNfRU4gc3RhdHVzLiAqLwotI2RlZmluZSBUWF9DTURfRkxHX1JUU19DVFNfTVNLIGNwdV90b19sZTMyKDEgPDwgMCkKKyAqIFJYT05fRkxHX1NFTEZfQ1RTX0VOIHN0YXR1cy4KKyAqIHVudXNlZCBpbiAzOTQ1LzQ5NjUsIHVzZWQgaW4gNTAwMCBzZXJpZXMgYW5kIGFmdGVyCisgKi8KKyNkZWZpbmUgVFhfQ01EX0ZMR19QUk9UX1JFUVVJUkVfTVNLIGNwdV90b19sZTMyKDEgPDwgMCkKIAotLyogMTogVXNlIFJlcXVlc3QtVG8tU2VuZCBwcm90b2NvbCBiZWZvcmUgdGhpcyBmcmFtZS4KLSAqIE11dHVhbGx5IGV4Y2x1c2l2ZSB2cy4gVFhfQ01EX0ZMR19DVFNfTVNLLiAqLworLyoKKyAqIDE6IFVzZSBSZXF1ZXN0LVRvLVNlbmQgcHJvdG9jb2wgYmVmb3JlIHRoaXMgZnJhbWUuCisgKiBNdXR1YWxseSBleGNsdXNpdmUgdnMuIFRYX0NNRF9GTEdfQ1RTX01TSy4KKyAqIHVzZWQgaW4gMzk0NS80OTY1LCB1bnVzZWQgaW4gNTAwMCBzZXJpZXMgYW5kIGFmdGVyCisgKi8KICNkZWZpbmUgVFhfQ01EX0ZMR19SVFNfTVNLIGNwdV90b19sZTMyKDEgPDwgMSkKIAotLyogMTogVHJhbnNtaXQgQ2xlYXItVG8tU2VuZCB0byBzZWxmIGJlZm9yZSB0aGlzIGZyYW1lLgorLyoKKyAqIDE6IFRyYW5zbWl0IENsZWFyLVRvLVNlbmQgdG8gc2VsZiBiZWZvcmUgdGhpcyBmcmFtZS4KICAqIERyaXZlciBzaG91bGQgc2V0IHRoaXMgZm9yIEFVVEgvREVBVVRIL0FTU09DLVJFUS9SRUFTU09DIG1nbW50IGZyYW1lcy4KLSAqIE11dHVhbGx5IGV4Y2x1c2l2ZSB2cy4gVFhfQ01EX0ZMR19SVFNfTVNLLiAqLworICogTXV0dWFsbHkgZXhjbHVzaXZlIHZzLiBUWF9DTURfRkxHX1JUU19NU0suCisgKiB1c2VkIGluIDM5NDUvNDk2NSwgdW51c2VkIGluIDUwMDAgc2VyaWVzIGFuZCBhZnRlcgorICovCiAjZGVmaW5lIFRYX0NNRF9GTEdfQ1RTX01TSyBjcHVfdG9fbGUzMigxIDw8IDIpCiAKIC8qIDE6IEV4cGVjdCBBQ0sgZnJvbSByZWNlaXZpbmcgc3RhdGlvbgpAQCAtMTQzMSw4ICsxNDc3LDExIEBACiAgKiBTZXQgd2hlbiBUeGluZyBhIGJsb2NrLWFjayByZXF1ZXN0IGZyYW1lLiAgQWxzbyBzZXQgVFhfQ01EX0ZMR19BQ0tfTVNLLiAqLwogI2RlZmluZSBUWF9DTURfRkxHX0lNTV9CQV9SU1BfTUFTSyAgY3B1X3RvX2xlMzIoMSA8PCA2KQogCi0vKiAxOiBGcmFtZSByZXF1aXJlcyBmdWxsIFR4LU9wIHByb3RlY3Rpb24uCi0gKiBTZXQgdGhpcyBpZiBlaXRoZXIgUlRTIG9yIENUUyBUeCBGbGFnIGdldHMgc2V0LiAqLworLyoKKyAqIDE6IEZyYW1lIHJlcXVpcmVzIGZ1bGwgVHgtT3AgcHJvdGVjdGlvbi4KKyAqIFNldCB0aGlzIGlmIGVpdGhlciBSVFMgb3IgQ1RTIFR4IEZsYWcgZ2V0cyBzZXQuCisgKiB1c2VkIGluIDM5NDUvNDk2NSwgdW51c2VkIGluIDUwMDAgc2VyaWVzIGFuZCBhZnRlcgorICovCiAjZGVmaW5lIFRYX0NNRF9GTEdfRlVMTF9UWE9QX1BST1RfTVNLIGNwdV90b19sZTMyKDEgPDwgNykKIAogLyogVHggYW50ZW5uYSBzZWxlY3Rpb24gZmllbGQ7IHVzZWQgb25seSBmb3IgMzk0NSwgcmVzZXJ2ZWQgKDApIGZvciA0OTY1LgpAQCAtMTU1Nyw3ICsxNjA2LDcgQEAKIAkgKi8KIAl1OCBwYXlsb2FkWzBdOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyIGhkclswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoKICAqIFJFUExZX1RYID0gMHgxYyAocmVzcG9uc2UpCkBAIC0xNTY5LDcgKzE2MTgsNyBAQAogCXU4IHJhdGU7CiAJX19sZTMyIHdpcmVsZXNzX21lZGlhX3RpbWU7CiAJX19sZTMyIHN0YXR1czsJCS8qIFRYIHN0YXR1cyAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAKIC8qCkBAIC0xNTgxLDcgKzE2MzAsNyBAQAogCXU4IHRyeV9jbnQ7CQkvKiBUeCBhdHRlbXB0cyAqLwogCXU4IGJ0X2tpbGxfY250OwkJLyogVHggYXR0ZW1wdHMgYmxvY2tlZCBieSBCbHVldG9vdGggZGV2aWNlICovCiAJX19sZTE2IHJlc2VydmVkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXdsX3R4X2NtZCB7CiAJLyoKQEAgLTE2NjAsNyArMTcwOSw3IEBACiAJICovCiAJdTggcGF5bG9hZFswXTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciBoZHJbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIFRYIGNvbW1hbmQgcmVzcG9uc2UgaXMgc2VudCBhZnRlciAqMzk0NSogdHJhbnNtaXNzaW9uIGF0dGVtcHRzLgogICoKQEAgLTE4MjYsNyArMTg3NSw3IEBACiBzdHJ1Y3QgYWdnX3R4X3N0YXR1cyB7CiAJX19sZTE2IHN0YXR1czsKIAlfX2xlMTYgc2VxdWVuY2U7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpd2w0OTY1X3R4X3Jlc3AgewogCXU4IGZyYW1lX2NvdW50OwkJLyogMSBubyBhZ2dyZWdhdGlvbiwgPjEgYWdncmVnYXRpb24gKi8KQEAgLTE4NjMsNyArMTkxMiw3IEBACiAJCV9fbGUzMiBzdGF0dXM7CiAJCXN0cnVjdCBhZ2dfdHhfc3RhdHVzIGFnZ19zdGF0dXNbMF07IC8qIGZvciBlYWNoIGFnZyBmcmFtZSAqLwogCX0gdTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoKICAqIGRlZmluaXRpb25zIGZvciBpbml0aWFsIHJhdGUgaW5kZXggZmllbGQKQEAgLTE5MjcsNyArMTk3Niw3IEBACiAJICovCiAJc3RydWN0IGFnZ190eF9zdGF0dXMgc3RhdHVzOwkvKiBUWCBzdGF0dXMgKGluIGFnZ3JlZ2F0aW9uIC0KIAkJCQkJICogc3RhdHVzIG9mIDFzdCBmcmFtZSkgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIC8qCiAgKiBSRVBMWV9DT01QUkVTU0VEX0JBID0gMHhjNSAocmVzcG9uc2Ugb25seSwgbm90IGEgY29tbWFuZCkKICAqCkBAIC0xOTQ1LDcgKzE5OTQsNyBAQAogCV9fbGU2NCBiaXRtYXA7CiAJX19sZTE2IHNjZF9mbG93OwogCV9fbGUxNiBzY2Rfc3NuOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKgogICogUkVQTFlfVFhfUFdSX1RBQkxFX0NNRCA9IDB4OTcgKGNvbW1hbmQsIGhhcyBzaW1wbGUgZ2VuZXJpYyByZXNwb25zZSkKQEAgLTE5NTgsMTQgKzIwMDcsMTQgQEAKIAl1OCByZXNlcnZlZDsKIAlfX2xlMTYgY2hhbm5lbDsKIAlzdHJ1Y3QgaXdsMzk0NV9wb3dlcl9wZXJfcmF0ZSBwb3dlcltJV0xfTUFYX1JBVEVTXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bDQ5NjVfdHhwb3dlcnRhYmxlX2NtZCB7CiAJdTggYmFuZDsJCS8qIDA6IDUgR0h6LCAxOiAyLjQgR0h6ICovCiAJdTggcmVzZXJ2ZWQ7CiAJX19sZTE2IGNoYW5uZWw7CiAJc3RydWN0IGl3bDQ5NjVfdHhfcG93ZXJfZGIgdHhfcG93ZXI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIAogLyoqCkBAIC0xOTg3LDEzICsyMDM2LDEzIEBACiAJX19sZTE2IHJhdGVfbl9mbGFnczsKIAl1OCB0cnlfY250OwogCXU4IG5leHRfcmF0ZV9pbmRleDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bDM5NDVfcmF0ZV9zY2FsaW5nX2NtZCB7CiAJdTggdGFibGVfaWQ7CiAJdTggcmVzZXJ2ZWRbM107CiAJc3RydWN0IGl3bDM5NDVfcmF0ZV9zY2FsaW5nX2luZm8gdGFibGVbSVdMX01BWF9SQVRFU107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIAogLypSU19ORVdfQVBJOiBvbmx5IFRMQ19SVFMgcmVtYWlucyBhbmQgbW92ZWQgdG8gYml0IDAgKi8KQEAgLTIwNDAsNyArMjA4OSw3IEBACiAJICogVFggRklGT3MgYWJvdmUgMyB1c2Ugc2FtZSB2YWx1ZSAodHlwaWNhbGx5IDApIGFzIFRYIEZJRk8gMy4KIAkgKi8KIAl1OCBzdGFydF9yYXRlX2luZGV4W0xJTktfUVVBTF9BQ19OVU1dOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIExJTktfUVVBTF9BR0dfVElNRV9MSU1JVF9ERUYJKDQwMDApIC8qIDQgbWlsbGlzZWNvbmRzICovCiAjZGVmaW5lIExJTktfUVVBTF9BR0dfVElNRV9MSU1JVF9NQVgJKDY1NTM1KQpAQCAtMjA4MSw3ICsyMTMwLDcgQEAKIAl1OCBhZ2dfZnJhbWVfY250X2xpbWl0OwogCiAJX19sZTMyIHJlc2VydmVkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKgogICogUkVQTFlfVFhfTElOS19RVUFMSVRZX0NNRCA9IDB4NGUgKGNvbW1hbmQsIGhhcyBzaW1wbGUgZ2VuZXJpYyByZXNwb25zZSkKQEAgLTIyODcsNyArMjMzNiw3IEBACiAJCV9fbGUzMiByYXRlX25fZmxhZ3M7CS8qIFJBVEVfTUNTXyosIElXTF9SQVRFXyogKi8KIAl9IHJzX3RhYmxlW0xJTktfUVVBTF9NQVhfUkVUUllfTlVNXTsKIAlfX2xlMzIgcmVzZXJ2ZWQyOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKgogICogQlQgY29uZmlndXJhdGlvbiBlbmFibGUgZmxhZ3M6CkBAIC0yMzI4LDcgKzIzNzcsNyBAQAogCXU4IHJlc2VydmVkOwogCV9fbGUzMiBraWxsX2Fja19tYXNrOwogCV9fbGUzMiBraWxsX2N0c19tYXNrOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAoNikKQEAgLTIzNTMsNyArMjQwMiw3IEBACiAJdTggY2hhbm5lbDsJCS8qIGNoYW5uZWwgdG8gbWVhc3VyZSAqLwogCXU4IHR5cGU7CQkvKiBzZWUgZW51bSBpd2xfbWVhc3VyZV90eXBlICovCiAJX19sZTE2IHJlc2VydmVkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKgogICogUkVQTFlfU1BFQ1RSVU1fTUVBU1VSRU1FTlRfQ01EID0gMHg3NCAoY29tbWFuZCkKQEAgLTIzNzIsNyArMjQyMSw3IEBACiAJX19sZTE2IGNoYW5uZWxfY291bnQ7CS8qIG1pbmltdW0gMSwgbWF4aW11bSAxMCAqLwogCV9fbGUxNiByZXNlcnZlZDM7CiAJc3RydWN0IGl3bF9tZWFzdXJlX2NoYW5uZWwgY2hhbm5lbHNbMTBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKgogICogUkVQTFlfU1BFQ1RSVU1fTUVBU1VSRU1FTlRfQ01EID0gMHg3NCAocmVzcG9uc2UpCkBAIC0yMzgzLDcgKzI0MzIsNyBAQAogCV9fbGUxNiBzdGF0dXM7CQkvKiAwIC0gY29tbWFuZCB3aWxsIGJlIGhhbmRsZWQKIAkJCQkgKiAxIC0gY2Fubm90IGhhbmRsZSAoY29uZmxpY3RzIHdpdGggYW5vdGhlcgogCQkJCSAqICAgICBtZWFzdXJlbWVudCkgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogZW51bSBpd2xfbWVhc3VyZW1lbnRfc3RhdGUgewogCUlXTF9NRUFTVVJFTUVOVF9TVEFSVCA9IDAsCkBAIC0yNDA2LDEzICsyNDU1LDEzIEBACiBzdHJ1Y3QgaXdsX21lYXN1cmVtZW50X2hpc3RvZ3JhbSB7CiAJX19sZTMyIG9mZG1bTlVNX0VMRU1FTlRTX0lOX0hJU1RPR1JBTV07CS8qIGluIDAuOHVzZWMgY291bnRzICovCiAJX19sZTMyIGNja1tOVU1fRUxFTUVOVFNfSU5fSElTVE9HUkFNXTsJLyogaW4gMXVzZWMgY291bnRzICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIGNsZWFyIGNoYW5uZWwgYXZhaWxhYmlsaXR5IGNvdW50ZXJzICovCiBzdHJ1Y3QgaXdsX21lYXN1cmVtZW50X2NjYV9jb3VudGVycyB7CiAJX19sZTMyIG9mZG07CiAJX19sZTMyIGNjazsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogZW51bSBpd2xfbWVhc3VyZV90eXBlIHsKIAlJV0xfTUVBU1VSRV9CQVNJQyA9ICgxIDw8IDApLApAQCAtMjQ0OCw3ICsyNDk3LDcgQEAKIAlzdHJ1Y3QgaXdsX21lYXN1cmVtZW50X2hpc3RvZ3JhbSBoaXN0b2dyYW07CiAJX19sZTMyIHN0b3BfdGltZTsJLyogbG93ZXIgMzItYml0cyBvZiBUU0YgKi8KIAlfX2xlMzIgc3RhdHVzOwkJLyogc2VlIGl3bF9tZWFzdXJlbWVudF9zdGF0dXMgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogKDcpCkBAIC0yNTA0LDcgKzI1NTMsNyBAQAogCV9fbGUzMiByeF9kYXRhX3RpbWVvdXQ7CiAJX19sZTMyIHR4X2RhdGFfdGltZW91dDsKIAlfX2xlMzIgc2xlZXBfaW50ZXJ2YWxbSVdMX1BPV0VSX1ZFQ19TSVpFXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCB7CiAJX19sZTE2IGZsYWdzOwpAQCAtMjUxNCw3ICsyNTYzLDcgQEAKIAlfX2xlMzIgdHhfZGF0YV90aW1lb3V0OwogCV9fbGUzMiBzbGVlcF9pbnRlcnZhbFtJV0xfUE9XRVJfVkVDX1NJWkVdOwogCV9fbGUzMiBrZWVwX2FsaXZlX2JlYWNvbnM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qCiAgKiBQTV9TTEVFUF9OT1RJRklDQVRJT04gPSAweDdBIChub3RpZmljYXRpb24gb25seSwgbm90IGEgY29tbWFuZCkKQEAgLTI1MjcsNyArMjU3Niw3IEBACiAJX19sZTMyIHNsZWVwX3RpbWU7CiAJX19sZTMyIHRzZl9sb3c7CiAJX19sZTMyIGJjb25fdGltZXI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIFNsZWVwIHN0YXRlcy4gIDM5NDUgYW5kIDQ5NjUgaWRlbnRpY2FsLiAqLwogZW51bSB7CkBAIC0yNTUyLDE0ICsyNjAxLDE0IEBACiAjZGVmaW5lIENBUkRfU1RBVEVfQ01EX0hBTFQgICAgMHgwMgkvKiBQb3dlciBkb3duIHBlcm1hbmVudGx5ICovCiBzdHJ1Y3QgaXdsX2NhcmRfc3RhdGVfY21kIHsKIAlfX2xlMzIgc3RhdHVzOwkJLyogQ0FSRF9TVEFURV9DTURfKiByZXF1ZXN0IG5ldyBwb3dlciBzdGF0ZSAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKgogICogQ0FSRF9TVEFURV9OT1RJRklDQVRJT04gPSAweGExIChub3RpZmljYXRpb24gb25seSwgbm90IGEgY29tbWFuZCkKICAqLwogc3RydWN0IGl3bF9jYXJkX3N0YXRlX25vdGlmIHsKIAlfX2xlMzIgZmxhZ3M7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSFdfQ0FSRF9ESVNBQkxFRCAgIDB4MDEKICNkZWZpbmUgU1dfQ0FSRF9ESVNBQkxFRCAgIDB4MDIKQEAgLTI1NzAsMTQgKzI2MTksMTQgQEAKIAlfX2xlMzIgICByZXNlcnZlZDsKIAlfX2xlMzIgICBjcml0aWNhbF90ZW1wZXJhdHVyZV9NOwogCV9fbGUzMiAgIGNyaXRpY2FsX3RlbXBlcmF0dXJlX1I7Ci19ICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9ICBfX3BhY2tlZDsKIAogLyogMTAwMCwgYW5kIDZ4MDAgKi8KIHN0cnVjdCBpd2xfY3Rfa2lsbF90aHJvdHRsaW5nX2NvbmZpZyB7CiAJX19sZTMyICAgY3JpdGljYWxfdGVtcGVyYXR1cmVfZXhpdDsKIAlfX2xlMzIgICByZXNlcnZlZDsKIAlfX2xlMzIgICBjcml0aWNhbF90ZW1wZXJhdHVyZV9lbnRlcjsKLX0gIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gIF9fcGFja2VkOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAoOCkKQEAgLTI2MjIsNyArMjY3MSw3IEBACiAJc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIgdHBjOwogCV9fbGUxNiBhY3RpdmVfZHdlbGw7CS8qIGluIDEwMjQtdVNlYyBUVSAodGltZSB1bml0cyksIHR5cCA1LTUwICovCiAJX19sZTE2IHBhc3NpdmVfZHdlbGw7CS8qIGluIDEwMjQtdVNlYyBUVSAodGltZSB1bml0cyksIHR5cCAyMC01MDAgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogc2V0IG51bWJlciBvZiBkaXJlY3QgcHJvYmVzIHU4IHR5cGUgKi8KICNkZWZpbmUgSVdMMzlfU0NBTl9QUk9CRV9NQVNLKG4pICgoQklUKG4pIHwgKEJJVChuKSAtIEJJVCgxKSkpKQpAQCAtMjY0MSw3ICsyNjkwLDcgQEAKIAl1OCBkc3BfYXR0ZW47CQkvKiBnYWluIGZvciBEU1AgKi8KIAlfX2xlMTYgYWN0aXZlX2R3ZWxsOwkvKiBpbiAxMDI0LXVTZWMgVFUgKHRpbWUgdW5pdHMpLCB0eXAgNS01MCAqLwogCV9fbGUxNiBwYXNzaXZlX2R3ZWxsOwkvKiBpbiAxMDI0LXVTZWMgVFUgKHRpbWUgdW5pdHMpLCB0eXAgMjAtNTAwICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIHNldCBudW1iZXIgb2YgZGlyZWN0IHByb2JlcyBfX2xlMzIgdHlwZSAqLwogI2RlZmluZSBJV0xfU0NBTl9QUk9CRV9NQVNLKG4pIAljcHVfdG9fbGUzMigoQklUKG4pIHwgKEJJVChuKSAtIEJJVCgxKSkpKQpAQCAtMjY1OCw3ICsyNzA3LDcgQEAKIAl1OCBpZDsKIAl1OCBsZW47CiAJdTggc3NpZFszMl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgUFJPQkVfT1BUSU9OX01BWF8zOTQ1CQk0CiAjZGVmaW5lIFBST0JFX09QVElPTl9NQVgJCTIwCkBAIC0yNzY0LDcgKzI4MTMsNyBAQAogCSAqIGJlZm9yZSByZXF1ZXN0aW5nIGFub3RoZXIgc2Nhbi4KIAkgKi8KIAl1OCBkYXRhWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXdsX3NjYW5fY21kIHsKIAlfX2xlMTYgbGVuOwpAQCAtMjgwOCw3ICsyODU3LDcgQEAKIAkgKiBiZWZvcmUgcmVxdWVzdGluZyBhbm90aGVyIHNjYW4uCiAJICovCiAJdTggZGF0YVswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogQ2FuIGFib3J0IHdpbGwgbm90aWZ5IGJ5IGNvbXBsZXRlIG5vdGlmaWNhdGlvbiB3aXRoIGFib3J0IHN0YXR1cy4gKi8KICNkZWZpbmUgQ0FOX0FCT1JUX1NUQVRVUwljcHVfdG9fbGUzMigweDEpCkBAIC0yODIwLDcgKzI4NjksNyBAQAogICovCiBzdHJ1Y3QgaXdsX3NjYW5yZXFfbm90aWZpY2F0aW9uIHsKIAlfX2xlMzIgc3RhdHVzOwkJLyogMTogb2theSwgMjogY2Fubm90IGZ1bGZpbGwgcmVxdWVzdCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKgogICogU0NBTl9TVEFSVF9OT1RJRklDQVRJT04gPSAweDgyIChub3RpZmljYXRpb24gb25seSwgbm90IGEgY29tbWFuZCkKQEAgLTI4MzMsNyArMjg4Miw3IEBACiAJdTggYmFuZDsKIAl1OCByZXNlcnZlZFsyXTsKIAlfX2xlMzIgc3RhdHVzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lICBTQ0FOX09XTkVSX1NUQVRVUyAweDE7CiAjZGVmaW5lICBNRUFTVVJFX09XTkVSX1NUQVRVUyAweDI7CkBAIC0yODQ5LDcgKzI4OTgsNyBAQAogCV9fbGUzMiB0c2ZfbG93OwogCV9fbGUzMiB0c2ZfaGlnaDsKIAlfX2xlMzIgc3RhdGlzdGljc1tOVU1CRVJfT0ZfU1RBVElTVElDU107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qCiAgKiBTQ0FOX0NPTVBMRVRFX05PVElGSUNBVElPTiA9IDB4ODQgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQpAQCAtMjg2MSw3ICsyOTEwLDcgQEAKIAl1OCBsYXN0X2NoYW5uZWw7CiAJX19sZTMyIHRzZl9sb3c7CiAJX19sZTMyIHRzZl9oaWdoOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI4NzksMTQgKzI5MjgsMTQgQEAKIAlfX2xlMzIgbG93X3RzZjsKIAlfX2xlMzIgaGlnaF90c2Y7CiAJX19sZTMyIGlic3NfbWdyX3N0YXR1czsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bDQ5NjVfYmVhY29uX25vdGlmIHsKIAlzdHJ1Y3QgaXdsNDk2NV90eF9yZXNwIGJlYWNvbl9ub3RpZnlfaGRyOwogCV9fbGUzMiBsb3dfdHNmOwogCV9fbGUzMiBoaWdoX3RzZjsKIAlfX2xlMzIgaWJzc19tZ3Jfc3RhdHVzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKgogICogUkVQTFlfVFhfQkVBQ09OID0gMHg5MSAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQpAQCAtMjg5OCw3ICsyOTQ3LDcgQEAKIAl1OCB0aW1fc2l6ZTsKIAl1OCByZXNlcnZlZDE7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgZnJhbWVbMF07CS8qIGJlYWNvbiBmcmFtZSAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXdsX3R4X2JlYWNvbl9jbWQgewogCXN0cnVjdCBpd2xfdHhfY21kIHR4OwpAQCAtMjkwNiw3ICsyOTU1LDcgQEAKIAl1OCB0aW1fc2l6ZTsKIAl1OCByZXNlcnZlZDE7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgZnJhbWVbMF07CS8qIGJlYWNvbiBmcmFtZSAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAoMTApCkBAIC0yOTMyLDcgKzI5ODEsNyBAQAogCQlfX2xlMzIgYltTVVBfUkFURV8xMUJfTUFYX05VTV9DSEFOTkVMU107CiAJCV9fbGUzMiBnW1NVUF9SQVRFXzExR19NQVhfTlVNX0NIQU5ORUxTXTsKIAl9IGZhaWxlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogc3RhdGlzdGljcyBjb21tYW5kIHJlc3BvbnNlICovCiAKQEAgLTI5NTIsNyArMzAwMSw3IEBACiAJX19sZTMyIHJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuOwogCV9fbGUzMiBzZW50X2Fja19jbnQ7CiAJX19sZTMyIHNlbnRfY3RzX2NudDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bDM5X3N0YXRpc3RpY3Nfcnhfbm9uX3BoeSB7CiAJX19sZTMyIGJvZ3VzX2N0czsJLyogQ1RTIHJlY2VpdmVkIHdoZW4gbm90IGV4cGVjdGluZyBDVFMgKi8KQEAgLTI5NjMsMTMgKzMwMTIsMTMgQEAKIAkJCQkgKiBmaWx0ZXJpbmcgcHJvY2VzcyAqLwogCV9fbGUzMiBub25fY2hhbm5lbF9iZWFjb25zOwkvKiBiZWFjb25zIHdpdGggb3VyIGJzcyBpZCBidXQgbm90IG9uCiAJCQkJCSAqIG91ciBzZXJ2aW5nIGNoYW5uZWwgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfcnggewogCXN0cnVjdCBpd2wzOV9zdGF0aXN0aWNzX3J4X3BoeSBvZmRtOwogCXN0cnVjdCBpd2wzOV9zdGF0aXN0aWNzX3J4X3BoeSBjY2s7CiAJc3RydWN0IGl3bDM5X3N0YXRpc3RpY3Nfcnhfbm9uX3BoeSBnZW5lcmFsOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc190eCB7CiAJX19sZTMyIHByZWFtYmxlX2NudDsKQEAgLTI5ODEsMjAgKzMwMzAsMjEgQEAKIAlfX2xlMzIgYWNrX3RpbWVvdXQ7CiAJX19sZTMyIGV4cGVjdGVkX2Fja19jbnQ7CiAJX19sZTMyIGFjdHVhbF9hY2tfY250OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3Qgc3RhdGlzdGljc19kYmcgewogCV9fbGUzMiBidXJzdF9jaGVjazsKIAlfX2xlMzIgYnVyc3RfY291bnQ7Ci0JX19sZTMyIHJlc2VydmVkWzRdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJX19sZTMyIHdhaXRfZm9yX3NpbGVuY2VfdGltZW91dF9jbnQ7CisJX19sZTMyIHJlc2VydmVkWzNdOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfZGl2IHsKIAlfX2xlMzIgdHhfb25fYTsKIAlfX2xlMzIgdHhfb25fYjsKIAlfX2xlMzIgZXhlY190aW1lOwogCV9fbGUzMiBwcm9iZV90aW1lOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19nZW5lcmFsIHsKIAlfX2xlMzIgdGVtcGVyYXR1cmU7CkBAIC0zMDA0LDcgKzMwNTQsNyBAQAogCV9fbGUzMiBzbG90c19pZGxlOwogCV9fbGUzMiB0dGxfdGltZXN0YW1wOwogCXN0cnVjdCBpd2wzOV9zdGF0aXN0aWNzX2RpdiBkaXY7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBzdGF0aXN0aWNzX3J4X3BoeSB7CiAJX19sZTMyIGluYV9jbnQ7CkBAIC0zMDI3LDcgKzMwNzcsNyBAQAogCV9fbGUzMiBtaF9mb3JtYXRfZXJyOwogCV9fbGUzMiByZV9hY3FfbWFpbl9yc3NpX3N1bTsKIAlfX2xlMzIgcmVzZXJ2ZWQzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3Qgc3RhdGlzdGljc19yeF9odF9waHkgewogCV9fbGUzMiBwbGNwX2VycjsKQEAgLTMwNDAsNyArMzA5MCw3IEBACiAJX19sZTMyIGFnZ19tcGR1X2NudDsKIAlfX2xlMzIgYWdnX2NudDsKIAlfX2xlMzIgdW5zdXBwb3J0X21jczsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBJTlRFUkZFUkVOQ0VfREFUQV9BVkFJTEFCTEUgICAgICBjcHVfdG9fbGUzMigxKQogCkBAIC0zMDc1LDE0ICszMTI1LDI4IEBACiAJX19sZTMyIGJlYWNvbl9lbmVyZ3lfYTsKIAlfX2xlMzIgYmVhY29uX2VuZXJneV9iOwogCV9fbGUzMiBiZWFjb25fZW5lcmd5X2M7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBzdGF0aXN0aWNzX3J4X25vbl9waHlfYnQgeworCXN0cnVjdCBzdGF0aXN0aWNzX3J4X25vbl9waHkgY29tbW9uOworCS8qIGFkZGl0aW9uYWwgc3RhdHMgZm9yIGJ0ICovCisJX19sZTMyIG51bV9idF9raWxsczsKKwlfX2xlMzIgcmVzZXJ2ZWRbMl07Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3Qgc3RhdGlzdGljc19yeCB7CiAJc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5IG9mZG07CiAJc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5IGNjazsKIAlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5IGdlbmVyYWw7CiAJc3RydWN0IHN0YXRpc3RpY3NfcnhfaHRfcGh5IG9mZG1faHQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBzdGF0aXN0aWNzX3J4X2J0IHsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgb2ZkbTsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgY2NrOworCXN0cnVjdCBzdGF0aXN0aWNzX3J4X25vbl9waHlfYnQgZ2VuZXJhbDsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9odF9waHkgb2ZkbV9odDsKK30gX19wYWNrZWQ7CiAKIC8qKgogICogc3RydWN0IHN0YXRpc3RpY3NfdHhfcG93ZXIgLSBjdXJyZW50IHR4IHBvd2VyCkBAIC0zMDk2LDcgKzMxNjAsNyBAQAogCXU4IGFudF9iOwogCXU4IGFudF9jOwogCXU4IHJlc2VydmVkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3Qgc3RhdGlzdGljc190eF9ub25fcGh5X2FnZyB7CiAJX19sZTMyIGJhX3RpbWVvdXQ7CkBAIC0zMTA5LDcgKzMxNzMsNyBAQAogCV9fbGUzMiB1bmRlcnJ1bjsKIAlfX2xlMzIgYnRfcHJpb19raWxsOwogCV9fbGUzMiByeF9iYV9yc3BfY250OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3Qgc3RhdGlzdGljc190eCB7CiAJX19sZTMyIHByZWFtYmxlX2NudDsKQEAgLTMxMzQsNyArMzE5OCw3IEBACiAJICovCiAJc3RydWN0IHN0YXRpc3RpY3NfdHhfcG93ZXIgdHhfcG93ZXI7CiAJX19sZTMyIHJlc2VydmVkMTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogCiBzdHJ1Y3Qgc3RhdGlzdGljc19kaXYgewpAQCAtMzE0NCw5ICszMjA4LDkgQEAKIAlfX2xlMzIgcHJvYmVfdGltZTsKIAlfX2xlMzIgcmVzZXJ2ZWQxOwogCV9fbGUzMiByZXNlcnZlZDI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKLXN0cnVjdCBzdGF0aXN0aWNzX2dlbmVyYWwgeworc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbF9jb21tb24gewogCV9fbGUzMiB0ZW1wZXJhdHVyZTsgICAvKiByYWRpbyB0ZW1wZXJhdHVyZSAqLwogCV9fbGUzMiB0ZW1wZXJhdHVyZV9tOyAvKiBmb3IgNTAwMCBhbmQgdXAsIHRoaXMgaXMgcmFkaW8gdm9sdGFnZSAqLwogCXN0cnVjdCBzdGF0aXN0aWNzX2RiZyBkYmc7CkBAIC0zMTYyLDkgKzMyMjYsMzMgQEAKIAkgKiAgaW4gb3JkZXIgdG8gZ2V0IG91dCBvZiBiYWQgUEhZIHN0YXR1cwogCSAqLwogCV9fbGUzMiBudW1fb2Zfc29zX3N0YXRlczsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBzdGF0aXN0aWNzX2J0X2FjdGl2aXR5IHsKKwkvKiBUeCBzdGF0aXN0aWNzICovCisJX19sZTMyIGhpX3ByaW9yaXR5X3R4X3JlcV9jbnQ7CisJX19sZTMyIGhpX3ByaW9yaXR5X3R4X2RlbmllZF9jbnQ7CisJX19sZTMyIGxvX3ByaW9yaXR5X3R4X3JlcV9jbnQ7CisJX19sZTMyIGxvX3ByaW9yaXR5X3R4X2RlbmllZF9jbnQ7CisJLyogUnggc3RhdGlzdGljcyAqLworCV9fbGUzMiBoaV9wcmlvcml0eV9yeF9yZXFfY250OworCV9fbGUzMiBoaV9wcmlvcml0eV9yeF9kZW5pZWRfY250OworCV9fbGUzMiBsb19wcmlvcml0eV9yeF9yZXFfY250OworCV9fbGUzMiBsb19wcmlvcml0eV9yeF9kZW5pZWRfY250OworfSBfX3BhY2tlZDsKKworc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbCB7CisJc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbF9jb21tb24gY29tbW9uOwogCV9fbGUzMiByZXNlcnZlZDI7CiAJX19sZTMyIHJlc2VydmVkMzsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKKworc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbF9idCB7CisJc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbF9jb21tb24gY29tbW9uOworCXN0cnVjdCBzdGF0aXN0aWNzX2J0X2FjdGl2aXR5IGFjdGl2aXR5OworCV9fbGUzMiByZXNlcnZlZDI7CisJX19sZTMyIHJlc2VydmVkMzsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgVUNPREVfU1RBVElTVElDU19DTEVBUl9NU0sJCSgweDEgPDwgMCkKICNkZWZpbmUgVUNPREVfU1RBVElTVElDU19GUkVRVUVOQ1lfTVNLCQkoMHgxIDw8IDEpCkBAIC0zMTg5LDcgKzMyNzcsNyBAQAogI2RlZmluZSBJV0xfU1RBVFNfQ09ORl9ESVNBQkxFX05PVElGIGNwdV90b19sZTMyKDB4MikvKiBzZWUgYWJvdmUgKi8KIHN0cnVjdCBpd2xfc3RhdGlzdGljc19jbWQgewogCV9fbGUzMiBjb25maWd1cmF0aW9uX2ZsYWdzOwkvKiBJV0xfU1RBVFNfQ09ORl8qICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qCiAgKiBTVEFUSVNUSUNTX05PVElGSUNBVElPTiA9IDB4OWQgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQpAQCAtMzIxNCwxNSArMzMwMiwyMSBAQAogCXN0cnVjdCBpd2wzOV9zdGF0aXN0aWNzX3J4IHJ4OwogCXN0cnVjdCBpd2wzOV9zdGF0aXN0aWNzX3R4IHR4OwogCXN0cnVjdCBpd2wzOV9zdGF0aXN0aWNzX2dlbmVyYWwgZ2VuZXJhbDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzIHsKIAlfX2xlMzIgZmxhZzsKIAlzdHJ1Y3Qgc3RhdGlzdGljc19yeCByeDsKIAlzdHJ1Y3Qgc3RhdGlzdGljc190eCB0eDsKIAlzdHJ1Y3Qgc3RhdGlzdGljc19nZW5lcmFsIGdlbmVyYWw7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKK3N0cnVjdCBpd2xfYnRfbm90aWZfc3RhdGlzdGljcyB7CisJX19sZTMyIGZsYWc7CisJc3RydWN0IHN0YXRpc3RpY3NfcnhfYnQgcng7CisJc3RydWN0IHN0YXRpc3RpY3NfdHggdHg7CisJc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbF9idCBnZW5lcmFsOworfSBfX3BhY2tlZDsKIAogLyoKICAqIE1JU1NFRF9CRUFDT05TX05PVElGSUNBVElPTiA9IDB4YTIgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQpAQCAtMzI1Myw3ICszMzQ3LDcgQEAKIAlfX2xlMzIgdG90YWxfbWlzc2VkX2JlY29uczsKIAlfX2xlMzIgbnVtX2V4cGVjdGVkX2JlYWNvbnM7CiAJX19sZTMyIG51bV9yZWN2ZF9iZWFjb25zOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTM0NDEsNiArMzUzNSw0MSBAQAogI2RlZmluZSBIRF9BVVRPX0NPUlI0MF9YNF9USF9BRERfTUlOX0lOREVYICAgICAgICAgICg5KQogI2RlZmluZSBIRF9PRkRNX0VORVJHWV9USF9JTl9JTkRFWCAgICAgICAgICAgICAgICAgICgxMCkKIAorLyoKKyAqIEFkZGl0aW9uYWwgdGFibGUgZW50cmllcyBpbiBlbmhhbmNlIFNFTlNJVElWSVRZX0NNRAorICovCisjZGVmaW5lIEhEX0lOQV9OT05fU1FVQVJFX0RFVF9PRkRNX0lOREVYCQkoMTEpCisjZGVmaW5lIEhEX0lOQV9OT05fU1FVQVJFX0RFVF9DQ0tfSU5ERVgJCQkoMTIpCisjZGVmaW5lIEhEX0NPUlJfMTFfSU5TVEVBRF9PRl9DT1JSXzlfRU5fSU5ERVgJCSgxMykKKyNkZWZpbmUgSERfT0ZETV9OT05fU1FVQVJFX0RFVF9TTE9QRV9NUkNfSU5ERVgJCSgxNCkKKyNkZWZpbmUgSERfT0ZETV9OT05fU1FVQVJFX0RFVF9JTlRFUkNFUFRfTVJDX0lOREVYCSgxNSkKKyNkZWZpbmUgSERfT0ZETV9OT05fU1FVQVJFX0RFVF9TTE9QRV9JTkRFWAkJKDE2KQorI2RlZmluZSBIRF9PRkRNX05PTl9TUVVBUkVfREVUX0lOVEVSQ0VQVF9JTkRFWAkJKDE3KQorI2RlZmluZSBIRF9DQ0tfTk9OX1NRVUFSRV9ERVRfU0xPUEVfTVJDX0lOREVYCQkoMTgpCisjZGVmaW5lIEhEX0NDS19OT05fU1FVQVJFX0RFVF9JTlRFUkNFUFRfTVJDX0lOREVYCSgxOSkKKyNkZWZpbmUgSERfQ0NLX05PTl9TUVVBUkVfREVUX1NMT1BFX0lOREVYCQkoMjApCisjZGVmaW5lIEhEX0NDS19OT05fU1FVQVJFX0RFVF9JTlRFUkNFUFRfSU5ERVgJCSgyMSkKKyNkZWZpbmUgSERfUkVTRVJWRUQJCQkJCSgyMikKKworLyogbnVtYmVyIG9mIGVudHJpZXMgZm9yIGVuaGFuY2VkIHRibCAqLworI2RlZmluZSBFTkhBTkNFX0hEX1RBQkxFX1NJWkUgICgyMykKKworLyogbnVtYmVyIG9mIGFkZGl0aW9uYWwgZW50cmllcyBmb3IgZW5oYW5jZWQgdGJsICovCisjZGVmaW5lIEVOSEFOQ0VfSERfVEFCTEVfRU5UUklFUyAgKEVOSEFOQ0VfSERfVEFCTEVfU0laRSAtIEhEX1RBQkxFX1NJWkUpCisKKyNkZWZpbmUgSERfSU5BX05PTl9TUVVBUkVfREVUX09GRE1fREFUQQkJCWNwdV90b19sZTE2KDApCisjZGVmaW5lIEhEX0lOQV9OT05fU1FVQVJFX0RFVF9DQ0tfREFUQQkJCWNwdV90b19sZTE2KDApCisjZGVmaW5lIEhEX0NPUlJfMTFfSU5TVEVBRF9PRl9DT1JSXzlfRU5fREFUQQkJY3B1X3RvX2xlMTYoMCkKKyNkZWZpbmUgSERfT0ZETV9OT05fU1FVQVJFX0RFVF9TTE9QRV9NUkNfREFUQQkJY3B1X3RvX2xlMTYoNjY4KQorI2RlZmluZSBIRF9PRkRNX05PTl9TUVVBUkVfREVUX0lOVEVSQ0VQVF9NUkNfREFUQQljcHVfdG9fbGUxNig0KQorI2RlZmluZSBIRF9PRkRNX05PTl9TUVVBUkVfREVUX1NMT1BFX0RBVEEJCWNwdV90b19sZTE2KDQ4NikKKyNkZWZpbmUgSERfT0ZETV9OT05fU1FVQVJFX0RFVF9JTlRFUkNFUFRfREFUQQkJY3B1X3RvX2xlMTYoMzcpCisjZGVmaW5lIEhEX0NDS19OT05fU1FVQVJFX0RFVF9TTE9QRV9NUkNfREFUQQkJY3B1X3RvX2xlMTYoODUzKQorI2RlZmluZSBIRF9DQ0tfTk9OX1NRVUFSRV9ERVRfSU5URVJDRVBUX01SQ19EQVRBCWNwdV90b19sZTE2KDQpCisjZGVmaW5lIEhEX0NDS19OT05fU1FVQVJFX0RFVF9TTE9QRV9EQVRBCQljcHVfdG9fbGUxNig0NzYpCisjZGVmaW5lIEhEX0NDS19OT05fU1FVQVJFX0RFVF9JTlRFUkNFUFRfREFUQQkJY3B1X3RvX2xlMTYoOTkpCisKKwogLyogQ29udHJvbCBmaWVsZCBpbiBzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X2NtZCAqLwogI2RlZmluZSBTRU5TSVRJVklUWV9DTURfQ09OVFJPTF9ERUZBVUxUX1RBQkxFCWNwdV90b19sZTE2KDApCiAjZGVmaW5lIFNFTlNJVElWSVRZX0NNRF9DT05UUk9MX1dPUktfVEFCTEUJY3B1X3RvX2xlMTYoMSkKQEAgLTM0NTUsNyArMzU4NCwxNSBAQAogc3RydWN0IGl3bF9zZW5zaXRpdml0eV9jbWQgewogCV9fbGUxNiBjb250cm9sOwkJCS8qIGFsd2F5cyB1c2UgIjEiICovCiAJX19sZTE2IHRhYmxlW0hEX1RBQkxFX1NJWkVdOwkvKiB1c2UgSERfKiBhcyBpbmRleCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOworCisvKgorICoKKyAqLworc3RydWN0IGl3bF9lbmhhbmNlX3NlbnNpdGl2aXR5X2NtZCB7CisJX19sZTE2IGNvbnRyb2w7CQkJLyogYWx3YXlzIHVzZSAiMSIgKi8KKwlfX2xlMTYgZW5oYW5jZV90YWJsZVtFTkhBTkNFX0hEX1RBQkxFX1NJWkVdOwkvKiB1c2UgSERfKiBhcyBpbmRleCAqLworfSBfX3BhY2tlZDsKIAogCiAvKioKQEAgLTM1MjMsMTAgKzM2NjAsMTAgQEAKIAlJV0xfUEhZX0NBTElCUkFURV9DUllTVEFMX0ZSUV9DTUQJPSAxNSwKIAlJV0xfUEhZX0NBTElCUkFURV9CQVNFX0JBTkRfQ01ECQk9IDE2LAogCUlXTF9QSFlfQ0FMSUJSQVRFX1RYX0lRX1BFUkRfQ01ECT0gMTcsCi0JSVdMX1BIWV9DQUxJQlJBVEVfQ0hBSU5fTk9JU0VfUkVTRVRfQ01ECT0gMTgsCi0JSVdMX1BIWV9DQUxJQlJBVEVfQ0hBSU5fTk9JU0VfR0FJTl9DTUQJPSAxOSwKKwlJV0xfTUFYX1NUQU5EQVJEX1BIWV9DQUxJQlJBVEVfVEJMX1NJWkUJPSAxOCwKIH07CiAKKyNkZWZpbmUgSVdMX01BWF9QSFlfQ0FMSUJSQVRFX1RCTF9TSVpFCQkoMjUzKQogCiAjZGVmaW5lIElXTF9DQUxJQl9JTklUX0NGR19BTEwJY3B1X3RvX2xlMzIoMHhmZmZmZmZmZikKIApAQCAtMzUzNiwzMSArMzY3MywzMSBAQAogCV9fbGUzMiBzZW5kX3JlczsKIAlfX2xlMzIgYXBwbHlfcmVzOwogCV9fbGUzMiByZXNlcnZlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bF9jYWxpYl9jZmdfc3RhdHVzX3MgewogCXN0cnVjdCBpd2xfY2FsaWJfY2ZnX2VsbW50X3Mgb25jZTsKIAlzdHJ1Y3QgaXdsX2NhbGliX2NmZ19lbG1udF9zIHBlcmQ7CiAJX19sZTMyIGZsYWdzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXdsX2NhbGliX2NmZ19jbWQgewogCXN0cnVjdCBpd2xfY2FsaWJfY2ZnX3N0YXR1c19zIHVjZF9jYWxpYl9jZmc7CiAJc3RydWN0IGl3bF9jYWxpYl9jZmdfc3RhdHVzX3MgZHJ2X2NhbGliX2NmZzsKIAlfX2xlMzIgcmVzZXJ2ZWQxOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXdsX2NhbGliX2hkciB7CiAJdTggb3BfY29kZTsKIAl1OCBmaXJzdF9ncm91cDsKIAl1OCBncm91cHNfbnVtOwogCXU4IGRhdGFfdmFsaWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpd2xfY2FsaWJfY21kIHsKIAlzdHJ1Y3QgaXdsX2NhbGliX2hkciBoZHI7CiAJdTggZGF0YVswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogSVdMX1BIWV9DQUxJQlJBVEVfRElGRl9HQUlOX0NNRCAoNykgKi8KIHN0cnVjdCBpd2xfY2FsaWJfZGlmZl9nYWluX2NtZCB7CkBAIC0zNTY5LDE0ICszNzA2LDE0IEBACiAJczggZGlmZl9nYWluX2I7CiAJczggZGlmZl9nYWluX2M7CiAJdTggcmVzZXJ2ZWQxOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXdsX2NhbGliX3h0YWxfZnJlcV9jbWQgewogCXN0cnVjdCBpd2xfY2FsaWJfaGRyIGhkcjsKIAl1OCBjYXBfcGluMTsKIAl1OCBjYXBfcGluMjsKIAl1OCBwYWRbMl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIElXTF9QSFlfQ0FMSUJSQVRFX0NIQUlOX05PSVNFX1JFU0VUX0NNRCAqLwogc3RydWN0IGl3bF9jYWxpYl9jaGFpbl9ub2lzZV9yZXNldF9jbWQgewpAQCAtMzU5MCw3ICszNzI3LDcgQEAKIAl1OCBkZWx0YV9nYWluXzE7CiAJdTggZGVsdGFfZ2Fpbl8yOwogCXU4IHBhZFsyXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogKDEyKQpAQCAtMzYxMyw3ICszNzUwLDcgQEAKIAl1OCBvbjsJCQkvKiAjIGludGVydmFscyBvbiB3aGlsZSBibGlua2luZzsKIAkJCQkgKiAiMCIsIHJlZ2FyZGxlc3Mgb2YgIm9mZiIsIHR1cm5zIExFRCBvZmYgKi8KIAl1OCByZXNlcnZlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoKICAqIHN0YXRpb24gcHJpb3JpdHkgdGFibGUgZW50cmllcwpAQCAtMzc0OSw3ICszODg2LDcgQEAKIAl1OCB3aW5fbWVkaXVtX3ByaW87CiAJdTggcmVzZXJ2ZWQ7CiAJdTggZmxhZ3M7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIENPRVggZmxhZyBtYXNrcyAqLwogCkBAIC0zNzY2LDcgKzM5MDMsNyBAQAogCXU4IGZsYWdzOwogCXU4IHJlc2VydmVkWzNdOwogCXN0cnVjdCBpd2xfd2ltYXhfY29leF9ldmVudF9lbnRyeSBzdGFfcHJpb1tDT0VYX05VTV9PRl9FVkVOVFNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKgogICogQ29leGlzdGVuY2UgTUVESVVNIE5PVElGSUNBVElPTgpAQCAtMzc5NSw3ICszOTMyLDcgQEAKIHN0cnVjdCBpd2xfY29leF9tZWRpdW1fbm90aWZpY2F0aW9uIHsKIAlfX2xlMzIgc3RhdHVzOwogCV9fbGUzMiBldmVudHM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qCiAgKiBDb2V4aXN0ZW5jZSBFVkVOVCAgQ29tbWFuZApAQCAtMzgxMCwxMSArMzk0NywxMSBAQAogCXU4IGZsYWdzOwogCXU4IGV2ZW50OwogCV9fbGUxNiByZXNlcnZlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bF9jb2V4X2V2ZW50X3Jlc3AgewogCV9fbGUzMiBzdGF0dXM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzg1MSw2ICszOTg4LDcgQEAKIAkJc3RydWN0IGl3bF9zbGVlcF9ub3RpZmljYXRpb24gc2xlZXBfbm90aWY7CiAJCXN0cnVjdCBpd2xfc3BlY3RydW1fcmVzcCBzcGVjdHJ1bTsKIAkJc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzIHN0YXRzOworCQlzdHJ1Y3QgaXdsX2J0X25vdGlmX3N0YXRpc3RpY3Mgc3RhdHNfYnQ7CiAJCXN0cnVjdCBpd2xfY29tcHJlc3NlZF9iYV9yZXNwIGNvbXByZXNzZWRfYmE7CiAJCXN0cnVjdCBpd2xfbWlzc2VkX2JlYWNvbl9ub3RpZiBtaXNzZWRfYmVhY29uOwogCQlzdHJ1Y3QgaXdsX2NvZXhfbWVkaXVtX25vdGlmaWNhdGlvbiBjb2V4X21lZGl1bV9ub3RpZjsKQEAgLTM4NTgsNyArMzk5Niw3IEBACiAJCV9fbGUzMiBzdGF0dXM7CiAJCXU4IHJhd1swXTsKIAl9IHU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIGludCBpd2xfYWduX2NoZWNrX3J4b25fY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYwppbmRleCA1YmJjNTI5Li44MDI0ZDQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCkBAIC0xNDEsMTMgKzE0MSwxNCBAQAogfQogRVhQT1JUX1NZTUJPTChpd2xfaHdyYXRlX3RvX3BsY3BfaWR4KTsKIAotdTggaXdsX3RvZ2dsZV90eF9hbnQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBhbnQpCit1OCBpd2xfdG9nZ2xlX3R4X2FudChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGFudCwgdTggdmFsaWQpCiB7CiAJaW50IGk7CiAJdTggaW5kID0gYW50OworCiAJZm9yIChpID0gMDsgaSA8IFJBVEVfQU5UX05VTSAtIDE7IGkrKykgewogCQlpbmQgPSAoaW5kICsgMSkgPCBSQVRFX0FOVF9OVU0gPyAgaW5kICsgMSA6IDA7Ci0JCWlmIChwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50ICYgQklUKGluZCkpCisJCWlmICh2YWxpZCAmIEJJVChpbmQpKQogCQkJcmV0dXJuIGluZDsKIAl9CiAJcmV0dXJuIGFudDsKQEAgLTE2OSw3ICsxNzAsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0KIAkJaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZihzdHJ1Y3QgaXdsX3ByaXYpLCBod19vcHMpOwogCWlmIChodyA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbiBub3QgYWxsb2NhdGUgbmV0d29yayBkZXZpY2VcbiIsCisJCXByX2VycigiJXM6IENhbiBub3QgYWxsb2NhdGUgbmV0d29yayBkZXZpY2VcbiIsCiAJCSAgICAgICBjZmctPm5hbWUpOwogCQlnb3RvIG91dDsKIAl9CkBAIC00NTcsNyArNDU4LDcgQEAKIAkJaWYgKCFzdGFfaHRfaW5mLT5odF9zdXBwb3J0ZWQpCiAJCQlyZXR1cm4gMDsKIAl9Ci0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVR0ZTCiAJaWYgKHByaXYtPmRpc2FibGVfaHQ0MCkKIAkJcmV0dXJuIDA7CiAjZW5kaWYKQEAgLTUwNiwxMSArNTA3LDExIEBACiAJfQogCiAJYmVhY29uX2ludCA9IGl3bF9hZGp1c3RfYmVhY29uX2ludGVydmFsKGJlYWNvbl9pbnQsCi0JCQkJcHJpdi0+aHdfcGFyYW1zLm1heF9iZWFjb25faXRydmwgKiAxMDI0KTsKKwkJCQlwcml2LT5od19wYXJhbXMubWF4X2JlYWNvbl9pdHJ2bCAqIFRJTUVfVU5JVCk7CiAJcHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2ludGVydmFsID0gY3B1X3RvX2xlMTYoYmVhY29uX2ludCk7CiAKIAl0c2YgPSBwcml2LT50aW1lc3RhbXA7IC8qIHRzZiBpcyBtb2RpZmVkIGJ5IGRvX2RpdjogY29weSBpdCAqLwotCWludGVydmFsX3RtID0gYmVhY29uX2ludCAqIDEwMjQ7CisJaW50ZXJ2YWxfdG0gPSBiZWFjb25faW50ICogVElNRV9VTklUOwogCXJlbSA9IGRvX2Rpdih0c2YsIGludGVydmFsX3RtKTsKIAlwcml2LT5yeG9uX3RpbWluZy5iZWFjb25faW5pdF92YWwgPSBjcHVfdG9fbGUzMihpbnRlcnZhbF90bSAtIHJlbSk7CiAKQEAgLTkzMiw5ICs5MzMsOSBAQAogfQogRVhQT1JUX1NZTUJPTChpd2xfc2V0X3J4b25fY2hhbm5lbCk7CiAKLXN0YXRpYyB2b2lkIGl3bF9zZXRfZmxhZ3NfZm9yX2JhbmQoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQordm9pZCBpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCisJCQkgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSB7CiAJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPQpAQCAtOTQzLDE5ICs5NDQsMTcgQEAKIAkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOwogCX0gZWxzZSB7CiAJCS8qIENvcGllZCBmcm9tIGl3bF9wb3N0X2Fzc29jaWF0ZSgpICovCi0JCWlmICh2aWYgJiYgdmlmLT5ic3NfY29uZi5hc3NvY19jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1NMT1RfVElNRSkKKwkJaWYgKHZpZiAmJiB2aWYtPmJzc19jb25mLnVzZV9zaG9ydF9zbG90KQogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOwogCQllbHNlCiAJCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOwogCi0JCWlmICh2aWYgJiYgdmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKLQogCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfQkFORF8yNEdfTVNLOwogCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLOwogCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX0NDS19NU0s7CiAJfQogfQorRVhQT1JUX1NZTUJPTChpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKTsKIAogLyoKICAqIGluaXRpYWxpemUgcnhvbiBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcyBmcm9tIGVlcHJvbQpAQCAtMTAyMSwxNSArMTAyMCwxNyBAQAogCS8qIGNsZWFyIGJvdGggTUlYIGFuZCBQVVJFNDAgbW9kZSBmbGFnICovCiAJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH4oUlhPTl9GTEdfQ0hBTk5FTF9NT0RFX01JWEVEIHwKIAkJCQkJUlhPTl9GTEdfQ0hBTk5FTF9NT0RFX1BVUkVfNDApOwotCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ud2xhcF9ic3NpZF9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOworCisJaWYgKHZpZikKKwkJbWVtY3B5KHByaXYtPnN0YWdpbmdfcnhvbi5ub2RlX2FkZHIsIHZpZi0+YWRkciwgRVRIX0FMRU4pOworCiAJcHJpdi0+c3RhZ2luZ19yeG9uLm9mZG1faHRfc2luZ2xlX3N0cmVhbV9iYXNpY19yYXRlcyA9IDB4ZmY7CiAJcHJpdi0+c3RhZ2luZ19yeG9uLm9mZG1faHRfZHVhbF9zdHJlYW1fYmFzaWNfcmF0ZXMgPSAweGZmOwogCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X3RyaXBsZV9zdHJlYW1fYmFzaWNfcmF0ZXMgPSAweGZmOwogfQogRVhQT1JUX1NZTUJPTChpd2xfY29ubmVjdGlvbl9pbml0X3J4X2NvbmZpZyk7CiAKLXN0YXRpYyB2b2lkIGl3bF9zZXRfcmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit2b2lkIGl3bF9zZXRfcmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqaHcgPSBOVUxMOwogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZTsKQEAgLTEwNTcsNiArMTA1OCwyMSBAQAogCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2Jhc2ljX3JhdGVzID0KIAkgICAoSVdMX09GRE1fQkFTSUNfUkFURVNfTUFTSyA+PiBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9zZXRfcmF0ZSk7CisKK3ZvaWQgaXdsX2Noc3dpdGNoX2RvbmUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBib29sIGlzX3N1Y2Nlc3MpCit7CisJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQorCQlyZXR1cm47CisKKwlpZiAocHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzKSB7CisJCWllZWU4MDIxMV9jaHN3aXRjaF9kb25lKHByaXYtPnZpZiwgaXNfc3VjY2Vzcyk7CisJCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwkJcHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzID0gZmFsc2U7CisJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCX0KK30KK0VYUE9SVF9TWU1CT0woaXdsX2Noc3dpdGNoX2RvbmUpOwogCiB2b2lkIGl3bF9yeF9jc2Eoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKIHsKQEAgLTEwNzEsMTEgKzEwODcsMTIgQEAKIAkJCXByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsID0gY3NhLT5jaGFubmVsOwogCQkJSVdMX0RFQlVHXzExSChwcml2LCAiQ1NBIG5vdGlmOiBjaGFubmVsICVkXG4iLAogCQkJICAgICAgbGUxNl90b19jcHUoY3NhLT5jaGFubmVsKSk7Ci0JCX0gZWxzZQorCQkJaXdsX2Noc3dpdGNoX2RvbmUocHJpdiwgdHJ1ZSk7CisJCX0gZWxzZSB7CiAJCQlJV0xfRVJSKHByaXYsICJDU0Egbm90aWYgKGZhaWwpIDogY2hhbm5lbCAlZFxuIiwKIAkJCSAgICAgIGxlMTZfdG9fY3B1KGNzYS0+Y2hhbm5lbCkpOwotCi0JCXByaXYtPnN3aXRjaF9yeG9uLnN3aXRjaF9pbl9wcm9ncmVzcyA9IGZhbHNlOworCQkJaXdsX2Noc3dpdGNoX2RvbmUocHJpdiwgZmFsc2UpOworCQl9CiAJfQogfQogRVhQT1JUX1NZTUJPTChpd2xfcnhfY3NhKTsKQEAgLTE1MDcsMTMwICsxNTI0LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KTsKIAotLyoqCi0gKiBpd2xfdmVyaWZ5X2luc3Rfc3BhcnNlIC0gdmVyaWZ5IHJ1bnRpbWUgdUNvZGUgaW1hZ2UgaW4gY2FyZCB2cy4gaG9zdCwKLSAqICAgdXNpbmcgc2FtcGxlIGRhdGEgMTAwIGJ5dGVzIGFwYXJ0LiAgSWYgdGhlc2Ugc2FtcGxlIHBvaW50cyBhcmUgZ29vZCwKLSAqICAgaXQncyBhIHByZXR0eSBnb29kIGJldCB0aGF0IGV2ZXJ5dGhpbmcgYmV0d2VlbiB0aGVtIGlzIGdvb2QsIHRvby4KLSAqLwotc3RhdGljIGludCBpd2xjb3JlX3ZlcmlmeV9pbnN0X3NwYXJzZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIF9fbGUzMiAqaW1hZ2UsIHUzMiBsZW4pCi17Ci0JdTMyIHZhbDsKLQlpbnQgcmV0ID0gMDsKLQl1MzIgZXJyY250ID0gMDsKLQl1MzIgaTsKLQotCUlXTF9ERUJVR19JTkZPKHByaXYsICJ1Y29kZSBpbnN0IGltYWdlIHNpemUgaXMgJXVcbiIsIGxlbik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDEwMCwgaW1hZ2UgKz0gMTAwL3NpemVvZih1MzIpKSB7Ci0JCS8qIHJlYWQgZGF0YSBjb21lcyB0aHJvdWdoIHNpbmdsZSBwb3J0LCBhdXRvLWluY3IgYWRkciAqLwotCQkvKiBOT1RFOiBVc2UgdGhlIGRlYnVnbGVzcyByZWFkIHNvIHdlIGRvbid0IGZsb29kIGtlcm5lbCBsb2cKLQkJICogaWYgSVdMX0RMX0lPIGlzIHNldCAqLwotCQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SQUREUiwKLQkJCWkgKyBJV0w0OV9SVENfSU5TVF9MT1dFUl9CT1VORCk7Ci0JCXZhbCA9IF9pd2xfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOwotCQlpZiAodmFsICE9IGxlMzJfdG9fY3B1KCppbWFnZSkpIHsKLQkJCXJldCA9IC1FSU87Ci0JCQllcnJjbnQrKzsKLQkJCWlmIChlcnJjbnQgPj0gMykKLQkJCQlicmVhazsKLQkJfQotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogaXdsY29yZV92ZXJpZnlfaW5zdF9mdWxsIC0gdmVyaWZ5IHJ1bnRpbWUgdUNvZGUgaW1hZ2UgaW4gY2FyZCB2cy4gaG9zdCwKLSAqICAgICBsb29raW5nIGF0IGFsbCBkYXRhLgotICovCi1zdGF0aWMgaW50IGl3bF92ZXJpZnlfaW5zdF9mdWxsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgX19sZTMyICppbWFnZSwKLQkJCQkgdTMyIGxlbikKLXsKLQl1MzIgdmFsOwotCXUzMiBzYXZlX2xlbiA9IGxlbjsKLQlpbnQgcmV0ID0gMDsKLQl1MzIgZXJyY250OwotCi0JSVdMX0RFQlVHX0lORk8ocHJpdiwgInVjb2RlIGluc3QgaW1hZ2Ugc2l6ZSBpcyAldVxuIiwgbGVuKTsKLQotCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JBRERSLAotCQkJICAgSVdMNDlfUlRDX0lOU1RfTE9XRVJfQk9VTkQpOwotCi0JZXJyY250ID0gMDsKLQlmb3IgKDsgbGVuID4gMDsgbGVuIC09IHNpemVvZih1MzIpLCBpbWFnZSsrKSB7Ci0JCS8qIHJlYWQgZGF0YSBjb21lcyB0aHJvdWdoIHNpbmdsZSBwb3J0LCBhdXRvLWluY3IgYWRkciAqLwotCQkvKiBOT1RFOiBVc2UgdGhlIGRlYnVnbGVzcyByZWFkIHNvIHdlIGRvbid0IGZsb29kIGtlcm5lbCBsb2cKLQkJICogaWYgSVdMX0RMX0lPIGlzIHNldCAqLwotCQl2YWwgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKLQkJaWYgKHZhbCAhPSBsZTMyX3RvX2NwdSgqaW1hZ2UpKSB7Ci0JCQlJV0xfRVJSKHByaXYsICJ1Q29kZSBJTlNUIHNlY3Rpb24gaXMgaW52YWxpZCBhdCAiCi0JCQkJICAib2Zmc2V0IDB4JXgsIGlzIDB4JXgsIHMvYiAweCV4XG4iLAotCQkJCSAgc2F2ZV9sZW4gLSBsZW4sIHZhbCwgbGUzMl90b19jcHUoKmltYWdlKSk7Ci0JCQlyZXQgPSAtRUlPOwotCQkJZXJyY250Kys7Ci0JCQlpZiAoZXJyY250ID49IDIwKQotCQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKCFlcnJjbnQpCi0JCUlXTF9ERUJVR19JTkZPKHByaXYsCi0JCSAgICAidWNvZGUgaW1hZ2UgaW4gSU5TVFJVQ1RJT04gbWVtb3J5IGlzIGdvb2RcbiIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBpd2xfdmVyaWZ5X3Vjb2RlIC0gZGV0ZXJtaW5lIHdoaWNoIGluc3RydWN0aW9uIGltYWdlIGlzIGluIFNSQU0sCi0gKiAgICBhbmQgdmVyaWZ5IGl0cyBjb250ZW50cwotICovCi1pbnQgaXdsX3ZlcmlmeV91Y29kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0JX19sZTMyICppbWFnZTsKLQl1MzIgbGVuOwotCWludCByZXQ7Ci0KLQkvKiBUcnkgYm9vdHN0cmFwICovCi0JaW1hZ2UgPSAoX19sZTMyICopcHJpdi0+dWNvZGVfYm9vdC52X2FkZHI7Ci0JbGVuID0gcHJpdi0+dWNvZGVfYm9vdC5sZW47Ci0JcmV0ID0gaXdsY29yZV92ZXJpZnlfaW5zdF9zcGFyc2UocHJpdiwgaW1hZ2UsIGxlbik7Ci0JaWYgKCFyZXQpIHsKLQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkJvb3RzdHJhcCB1Q29kZSBpcyBnb29kIGluIGluc3QgU1JBTVxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIFRyeSBpbml0aWFsaXplICovCi0JaW1hZ2UgPSAoX19sZTMyICopcHJpdi0+dWNvZGVfaW5pdC52X2FkZHI7Ci0JbGVuID0gcHJpdi0+dWNvZGVfaW5pdC5sZW47Ci0JcmV0ID0gaXdsY29yZV92ZXJpZnlfaW5zdF9zcGFyc2UocHJpdiwgaW1hZ2UsIGxlbik7Ci0JaWYgKCFyZXQpIHsKLQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkluaXRpYWxpemUgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBUcnkgcnVudGltZS9wcm90b2NvbCAqLwotCWltYWdlID0gKF9fbGUzMiAqKXByaXYtPnVjb2RlX2NvZGUudl9hZGRyOwotCWxlbiA9IHByaXYtPnVjb2RlX2NvZGUubGVuOwotCXJldCA9IGl3bGNvcmVfdmVyaWZ5X2luc3Rfc3BhcnNlKHByaXYsIGltYWdlLCBsZW4pOwotCWlmICghcmV0KSB7Ci0JCUlXTF9ERUJVR19JTkZPKHByaXYsICJSdW50aW1lIHVDb2RlIGlzIGdvb2QgaW4gaW5zdCBTUkFNXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JSVdMX0VSUihwcml2LCAiTk8gVkFMSUQgVUNPREUgSU1BR0UgSU4gSU5TVFJVQ1RJT04gU1JBTSEhXG4iKTsKLQotCS8qIFNpbmNlIG5vdGhpbmcgc2VlbXMgdG8gbWF0Y2gsIHNob3cgZmlyc3Qgc2V2ZXJhbCBkYXRhIGVudHJpZXMgaW4KLQkgKiBpbnN0cnVjdGlvbiBTUkFNLCBzbyBtYXliZSB2aXN1YWwgaW5zcGVjdGlvbiB3aWxsIGdpdmUgYSBjbHVlLgotCSAqIFNlbGVjdGlvbiBvZiBib290c3RyYXAgaW1hZ2UgKHZzLiBvdGhlciBpbWFnZXMpIGlzIGFyYml0cmFyeS4gKi8KLQlpbWFnZSA9IChfX2xlMzIgKilwcml2LT51Y29kZV9ib290LnZfYWRkcjsKLQlsZW4gPSBwcml2LT51Y29kZV9ib290LmxlbjsKLQlyZXQgPSBpd2xfdmVyaWZ5X2luc3RfZnVsbChwcml2LCBpbWFnZSwgbGVuKTsKLQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGl3bF92ZXJpZnlfdWNvZGUpOwotCi0KIHZvaWQgaXdsX3JmX2tpbGxfY3RfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsX2N0X2tpbGxfY29uZmlnIGNtZDsKQEAgLTE4NTUsNiArMTc0OCwzNyBAQAogCWl3bGNvcmVfY29tbWl0X3J4b24ocHJpdik7CiB9CiAKK3N0YXRpYyBpbnQgaXdsX21hY19iZWFjb25fdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJX19sZTY0IHRpbWVzdGFtcDsKKworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOworCisJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAocHJpdi0+aWJzc19iZWFjb24pCisJCWRldl9rZnJlZV9za2IocHJpdi0+aWJzc19iZWFjb24pOworCisJcHJpdi0+aWJzc19iZWFjb24gPSBza2I7CisKKwl0aW1lc3RhbXAgPSAoKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKXNrYi0+ZGF0YSktPnUuYmVhY29uLnRpbWVzdGFtcDsKKwlwcml2LT50aW1lc3RhbXAgPSBsZTY0X3RvX2NwdSh0aW1lc3RhbXApOworCisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+cG9zdF9hc3NvY2lhdGUocHJpdiwgcHJpdi0+dmlmKTsKKworCXJldHVybiAwOworfQorCiB2b2lkIGl3bF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiwKQEAgLTE4NzAsNiArMTc5NCwxNSBAQAogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCisJaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9RT1MpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlID0gYnNzX2NvbmYtPnFvczsKKwkJaXdsX3VwZGF0ZV9xb3MocHJpdik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwl9CisKIAlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0JFQUNPTiAmJiB2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKIAkJZGV2X2tmcmVlX3NrYihwcml2LT5pYnNzX2JlYWNvbik7CiAJCXByaXYtPmlic3NfYmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcsIHZpZik7CkBAIC0yMDEyLDM4ICsxOTQ1LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woaXdsX2Jzc19pbmZvX2NoYW5nZWQpOwogCi1pbnQgaXdsX21hY19iZWFjb25fdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JX19sZTY0IHRpbWVzdGFtcDsKLQotCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwotCi0JaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAocHJpdi0+aWJzc19iZWFjb24pCi0JCWRldl9rZnJlZV9za2IocHJpdi0+aWJzc19iZWFjb24pOwotCi0JcHJpdi0+aWJzc19iZWFjb24gPSBza2I7Ci0KLQl0aW1lc3RhbXAgPSAoKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKXNrYi0+ZGF0YSktPnUuYmVhY29uLnRpbWVzdGFtcDsKLQlwcml2LT50aW1lc3RhbXAgPSBsZTY0X3RvX2NwdSh0aW1lc3RhbXApOwotCi0JSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+cG9zdF9hc3NvY2lhdGUocHJpdiwgcHJpdi0+dmlmKTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChpd2xfbWFjX2JlYWNvbl91cGRhdGUpOwotCiBzdGF0aWMgaW50IGl3bF9zZXRfbW9kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJaXdsX2Nvbm5lY3Rpb25faW5pdF9yeF9jb25maWcocHJpdiwgdmlmKTsKQEAgLTIwNTEsOCArMTk1Miw2IEBACiAJaWYgKHByaXYtPmNmZy0+b3BzLT5oY21kLT5zZXRfcnhvbl9jaGFpbikKIAkJcHJpdi0+Y2ZnLT5vcHMtPmhjbWQtPnNldF9yeG9uX2NoYWluKHByaXYpOwogCi0JbWVtY3B5KHByaXYtPnN0YWdpbmdfcnhvbi5ub2RlX2FkZHIsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7Ci0KIAlyZXR1cm4gaXdsY29yZV9jb21taXRfcnhvbihwcml2KTsKIH0KIApAQCAtMjA2MSw3ICsxOTYwLDggQEAKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlpbnQgZXJyID0gMDsKIAotCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXI6IHR5cGUgJWRcbiIsIHZpZi0+dHlwZSk7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlcjogdHlwZSAlZCwgYWRkciAlcE1cbiIsCisJCQkgICB2aWYtPnR5cGUsIHZpZi0+YWRkcik7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKQEAgLTIwNzksOSArMTk3OSw2IEBACiAJcHJpdi0+dmlmID0gdmlmOwogCXByaXYtPml3X21vZGUgPSB2aWYtPnR5cGU7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIlNldCAlcE1cbiIsIHZpZi0+YWRkcik7Ci0JbWVtY3B5KHByaXYtPm1hY19hZGRyLCB2aWYtPmFkZHIsIEVUSF9BTEVOKTsKLQogCWVyciA9IGl3bF9zZXRfbW9kZShwcml2LCB2aWYpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2VycjsKQEAgLTIxMTUsNiArMjAxMiwxMSBAQAogCX0KIAlpZiAocHJpdi0+dmlmID09IHZpZikgewogCQlwcml2LT52aWYgPSBOVUxMOworCQlpZiAocHJpdi0+c2Nhbl92aWYgPT0gdmlmKSB7CisJCQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQocHJpdi0+aHcsIHRydWUpOworCQkJcHJpdi0+c2Nhbl92aWYgPSBOVUxMOworCQkJcHJpdi0+c2Nhbl9yZXF1ZXN0ID0gTlVMTDsKKwkJfQogCQltZW1zZXQocHJpdi0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CkBAIC0yMjE1LDIyICsyMTE3LDEwIEBACiAKIAkJaXdsX3NldF9mbGFnc19mb3JfYmFuZChwcml2LCBjb25mLT5jaGFubmVsLT5iYW5kLCBwcml2LT52aWYpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSAmJgotCQkgICAgKGxlMTZfdG9fY3B1KHByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwpICE9IGNoKSAmJgotCQkgICAgcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+c2V0X2NoYW5uZWxfc3dpdGNoKSB7Ci0JCQlpd2xfc2V0X3JhdGUocHJpdik7Ci0JCQkvKgotCQkJICogYXQgdGhpcyBwb2ludCwgc3RhZ2luZ19yeG9uIGhhcyB0aGUKLQkJCSAqIGNvbmZpZ3VyYXRpb24gZm9yIGNoYW5uZWwgc3dpdGNoCi0JCQkgKi8KLQkJCXJldCA9IHByaXYtPmNmZy0+b3BzLT5saWItPnNldF9jaGFubmVsX3N3aXRjaChwcml2LAotCQkJCWNoKTsKLQkJCWlmICghcmV0KSB7Ci0JCQkJaXdsX3ByaW50X3J4X2NvbmZpZ19jbWQocHJpdik7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MgPSBmYWxzZTsKLQkJfQorCisJCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT51cGRhdGVfYmNhc3Rfc3RhdGlvbikKKwkJCXJldCA9IHByaXYtPmNmZy0+b3BzLT5saWItPnVwZGF0ZV9iY2FzdF9zdGF0aW9uKHByaXYpOworCiAgc2V0X2NoX291dDoKIAkJLyogVGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHJhdGVzIGFuZCByYXRlIG1hc2sgY2FuIGJlIGRpZmZlcmVudAogCQkgKiBmb3IgZWFjaCBiYW5kOyBzaW5jZSB0aGUgYmFuZCBtYXkgaGF2ZSBjaGFuZ2VkLCByZXNldApAQCAtMjI1MiwxNSArMjE0Miw2IEBACiAJCWl3bF9zZXRfdHhfcG93ZXIocHJpdiwgY29uZi0+cG93ZXJfbGV2ZWwsIGZhbHNlKTsKIAl9CiAKLQlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9RT1MpIHsKLQkJYm9vbCBxb3NfYWN0aXZlID0gISEoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9RT1MpOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCXByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUgPSBxb3NfYWN0aXZlOwotCQlpd2xfdXBkYXRlX3Fvcyhwcml2KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCX0KLQogCWlmICghaXdsX2lzX3JlYWR5KHByaXYpKSB7CiAJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBub3QgcmVhZHlcbiIpOwogCQlnb3RvIG91dDsKQEAgLTI1ODgsNyArMjQ2OSw3IEBACiBFWFBPUlRfU1lNQk9MKGl3bF91cGRhdGVfc3RhdHMpOwogI2VuZGlmCiAKLWNvbnN0IHN0YXRpYyBjaGFyICpnZXRfY3NyX3N0cmluZyhpbnQgY21kKQorc3RhdGljIGNvbnN0IGNoYXIgKmdldF9jc3Jfc3RyaW5nKGludCBjbWQpCiB7CiAJc3dpdGNoIChjbWQpIHsKIAkJSVdMX0NNRChDU1JfSFdfSUZfQ09ORklHX1JFRyk7CkBAIC0yNjU5LDcgKzI1NDAsNyBAQAogfQogRVhQT1JUX1NZTUJPTChpd2xfZHVtcF9jc3IpOwogCi1jb25zdCBzdGF0aWMgY2hhciAqZ2V0X2ZoX3N0cmluZyhpbnQgY21kKQorc3RhdGljIGNvbnN0IGNoYXIgKmdldF9maF9zdHJpbmcoaW50IGNtZCkKIHsKIAlzd2l0Y2ggKGNtZCkgewogCQlJV0xfQ01EKEZIX1JTQ1NSX0NITkwwX1NUVFNfV1BUUl9SRUcpOwpAQCAtMjc0NSw3ICsyNjI2LDcgQEAKIH0KIAogCi1pbnQgaXdsX2ZvcmNlX3Jlc2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IG1vZGUpCitpbnQgaXdsX2ZvcmNlX3Jlc2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IG1vZGUsIGJvb2wgZXh0ZXJuYWwpCiB7CiAJc3RydWN0IGl3bF9mb3JjZV9yZXNldCAqZm9yY2VfcmVzZXQ7CiAKQEAgLTI3NTgsMTIgKzI2MzksMTQgQEAKIAl9CiAJZm9yY2VfcmVzZXQgPSAmcHJpdi0+Zm9yY2VfcmVzZXRbbW9kZV07CiAJZm9yY2VfcmVzZXQtPnJlc2V0X3JlcXVlc3RfY291bnQrKzsKLQlpZiAoZm9yY2VfcmVzZXQtPmxhc3RfZm9yY2VfcmVzZXRfamlmZmllcyAmJgotCSAgICB0aW1lX2FmdGVyKGZvcmNlX3Jlc2V0LT5sYXN0X2ZvcmNlX3Jlc2V0X2ppZmZpZXMgKwotCSAgICBmb3JjZV9yZXNldC0+cmVzZXRfZHVyYXRpb24sIGppZmZpZXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKHByaXYsICJmb3JjZSByZXNldCByZWplY3RlZFxuIik7Ci0JCWZvcmNlX3Jlc2V0LT5yZXNldF9yZWplY3RfY291bnQrKzsKLQkJcmV0dXJuIC1FQUdBSU47CisJaWYgKCFleHRlcm5hbCkgeworCQlpZiAoZm9yY2VfcmVzZXQtPmxhc3RfZm9yY2VfcmVzZXRfamlmZmllcyAmJgorCQkgICAgdGltZV9hZnRlcihmb3JjZV9yZXNldC0+bGFzdF9mb3JjZV9yZXNldF9qaWZmaWVzICsKKwkJICAgIGZvcmNlX3Jlc2V0LT5yZXNldF9kdXJhdGlvbiwgamlmZmllcykpIHsKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJmb3JjZSByZXNldCByZWplY3RlZFxuIik7CisJCQlmb3JjZV9yZXNldC0+cmVzZXRfcmVqZWN0X2NvdW50Kys7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQogCX0KIAlmb3JjZV9yZXNldC0+cmVzZXRfc3VjY2Vzc19jb3VudCsrOwogCWZvcmNlX3Jlc2V0LT5sYXN0X2ZvcmNlX3Jlc2V0X2ppZmZpZXMgPSBqaWZmaWVzOwpAQCAtMjc3Myw2ICsyNjU2LDE5IEBACiAJCWl3bF9mb3JjZV9yZl9yZXNldChwcml2KTsKIAkJYnJlYWs7CiAJY2FzZSBJV0xfRldfUkVTRVQ6CisJCS8qCisJCSAqIGlmIHRoZSByZXF1ZXN0IGlzIGZyb20gZXh0ZXJuYWwoZXg6IGRlYnVnZnMpLAorCQkgKiB0aGVuIGFsd2F5cyBwZXJmb3JtIHRoZSByZXF1ZXN0IGluIHJlZ2FyZGxlc3MgdGhlIG1vZHVsZQorCQkgKiBwYXJhbWV0ZXIgc2V0dGluZworCQkgKiBpZiB0aGUgcmVxdWVzdCBpcyBmcm9tIGludGVybmFsICh1Q29kZSBlcnJvciBvciBkcml2ZXIKKwkJICogZGV0ZWN0IGZhaWx1cmUpLCB0aGVuIGZ3X3Jlc3RhcnQgbW9kdWxlIHBhcmFtZXRlcgorCQkgKiBuZWVkIHRvIGJlIGNoZWNrIGJlZm9yZSBwZXJmb3JtaW5nIGZpcm13YXJlIHJlbG9hZAorCQkgKi8KKwkJaWYgKCFleHRlcm5hbCAmJiAhcHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5yZXN0YXJ0X2Z3KSB7CisJCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQ2FuY2VsIGZpcm13YXJlIHJlbG9hZCBiYXNlZCBvbiAiCisJCQkJICAgICAgICJtb2R1bGUgcGFyYW1ldGVyIHNldHRpbmdcbiIpOworCQkJYnJlYWs7CisJCX0KIAkJSVdMX0VSUihwcml2LCAiT24gZGVtYW5kIGZpcm13YXJlIHJlbG9hZFxuIik7CiAJCS8qIFNldCB0aGUgRlcgZXJyb3IgZmxhZyAtLSBjbGVhcmVkIG9uIGl3bF9kb3duICovCiAJCXNldF9iaXQoU1RBVFVTX0ZXX0VSUk9SLCAmcHJpdi0+c3RhdHVzKTsKQEAgLTI4MzEsNyArMjcyNyw3IEBACiAJCQkJCSJxdWV1ZSAlZCBzdHVjayAlZCB0aW1lLiBGdyByZWxvYWQuXG4iLAogCQkJCQlxLT5pZCwgcS0+cmVwZWF0X3NhbWVfcmVhZF9wdHIpOwogCQkJCXEtPnJlcGVhdF9zYW1lX3JlYWRfcHRyID0gMDsKLQkJCQlpd2xfZm9yY2VfcmVzZXQocHJpdiwgSVdMX0ZXX1JFU0VUKTsKKwkJCQlpd2xfZm9yY2VfcmVzZXQocHJpdiwgSVdMX0ZXX1JFU0VULCBmYWxzZSk7CiAJCQl9IGVsc2UgewogCQkJCXEtPnJlcGVhdF9zYW1lX3JlYWRfcHRyKys7CiAJCQkJSVdMX0RFQlVHX1JBRElPKHByaXYsCkBAIC0yODgxLDYgKzI3NzcsNjEgQEAKIH0KIEVYUE9SVF9TWU1CT0woaXdsX2JnX21vbml0b3JfcmVjb3Zlcik7CiAKKworLyoKKyAqIGV4dGVuZGVkIGJlYWNvbiB0aW1lIGZvcm1hdAorICogdGltZSBpbiB1c2VjIHdpbGwgYmUgY2hhbmdlZCBpbnRvIGEgMzItYml0IHZhbHVlIGluIGV4dGVuZGVkOmludGVybmFsIGZvcm1hdAorICogdGhlIGV4dGVuZGVkIHBhcnQgaXMgdGhlIGJlYWNvbiBjb3VudHMKKyAqIHRoZSBpbnRlcm5hbCBwYXJ0IGlzIHRoZSB0aW1lIGluIHVzZWMgd2l0aGluIG9uZSBiZWFjb24gaW50ZXJ2YWwKKyAqLwordTMyIGl3bF91c2Vjc190b19iZWFjb25zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHVzZWMsIHUzMiBiZWFjb25faW50ZXJ2YWwpCit7CisJdTMyIHF1b3Q7CisJdTMyIHJlbTsKKwl1MzIgaW50ZXJ2YWwgPSBiZWFjb25faW50ZXJ2YWwgKiBUSU1FX1VOSVQ7CisKKwlpZiAoIWludGVydmFsIHx8ICF1c2VjKQorCQlyZXR1cm4gMDsKKworCXF1b3QgPSAodXNlYyAvIGludGVydmFsKSAmCisJCShpd2xfYmVhY29uX3RpbWVfbWFza19oaWdoKHByaXYsCisJCXByaXYtPmh3X3BhcmFtcy5iZWFjb25fdGltZV90c2ZfYml0cykgPj4KKwkJcHJpdi0+aHdfcGFyYW1zLmJlYWNvbl90aW1lX3RzZl9iaXRzKTsKKwlyZW0gPSAodXNlYyAlIGludGVydmFsKSAmIGl3bF9iZWFjb25fdGltZV9tYXNrX2xvdyhwcml2LAorCQkJCSAgIHByaXYtPmh3X3BhcmFtcy5iZWFjb25fdGltZV90c2ZfYml0cyk7CisKKwlyZXR1cm4gKHF1b3QgPDwgcHJpdi0+aHdfcGFyYW1zLmJlYWNvbl90aW1lX3RzZl9iaXRzKSArIHJlbTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3VzZWNzX3RvX2JlYWNvbnMpOworCisvKiBiYXNlIGlzIHVzdWFsbHkgd2hhdCB3ZSBnZXQgZnJvbSB1Y29kZSB3aXRoIGVhY2ggcmVjZWl2ZWQgZnJhbWUsCisgKiB0aGUgc2FtZSBhcyBIVyB0aW1lciBjb3VudGVyIGNvdW50aW5nIGRvd24KKyAqLworX19sZTMyIGl3bF9hZGRfYmVhY29uX3RpbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgYmFzZSwKKwkJCSAgIHUzMiBhZGRvbiwgdTMyIGJlYWNvbl9pbnRlcnZhbCkKK3sKKwl1MzIgYmFzZV9sb3cgPSBiYXNlICYgaXdsX2JlYWNvbl90aW1lX21hc2tfbG93KHByaXYsCisJCQkJCXByaXYtPmh3X3BhcmFtcy5iZWFjb25fdGltZV90c2ZfYml0cyk7CisJdTMyIGFkZG9uX2xvdyA9IGFkZG9uICYgaXdsX2JlYWNvbl90aW1lX21hc2tfbG93KHByaXYsCisJCQkJCXByaXYtPmh3X3BhcmFtcy5iZWFjb25fdGltZV90c2ZfYml0cyk7CisJdTMyIGludGVydmFsID0gYmVhY29uX2ludGVydmFsICogVElNRV9VTklUOworCXUzMiByZXMgPSAoYmFzZSAmIGl3bF9iZWFjb25fdGltZV9tYXNrX2hpZ2gocHJpdiwKKwkJCQlwcml2LT5od19wYXJhbXMuYmVhY29uX3RpbWVfdHNmX2JpdHMpKSArCisJCQkJKGFkZG9uICYgaXdsX2JlYWNvbl90aW1lX21hc2tfaGlnaChwcml2LAorCQkJCXByaXYtPmh3X3BhcmFtcy5iZWFjb25fdGltZV90c2ZfYml0cykpOworCisJaWYgKGJhc2VfbG93ID4gYWRkb25fbG93KQorCQlyZXMgKz0gYmFzZV9sb3cgLSBhZGRvbl9sb3c7CisJZWxzZSBpZiAoYmFzZV9sb3cgPCBhZGRvbl9sb3cpIHsKKwkJcmVzICs9IGludGVydmFsICsgYmFzZV9sb3cgLSBhZGRvbl9sb3c7CisJCXJlcyArPSAoMSA8PCBwcml2LT5od19wYXJhbXMuYmVhY29uX3RpbWVfdHNmX2JpdHMpOworCX0gZWxzZQorCQlyZXMgKz0gKDEgPDwgcHJpdi0+aHdfcGFyYW1zLmJlYWNvbl90aW1lX3RzZl9iaXRzKTsKKworCXJldHVybiBjcHVfdG9fbGUzMihyZXMpOworfQorRVhQT1JUX1NZTUJPTChpd2xfYWRkX2JlYWNvbl90aW1lKTsKKwogI2lmZGVmIENPTkZJR19QTQogCiBpbnQgaXdsX3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCkBAIC0yOTA4LDYgKzI4NTksNyBAQAogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlpbnQgcmV0OworCWJvb2wgaHdfcmZraWxsID0gZmFsc2U7CiAKIAkvKgogCSAqIFdlIGRpc2FibGUgdGhlIFJFVFJZX1RJTUVPVVQgcmVnaXN0ZXIgKDB4NDEpIHRvIGtlZXAKQEAgLTI5MjIsNiArMjg3NCwxNyBAQAogCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwogCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKIAorCWlmICghKGl3bF9yZWFkMzIocHJpdiwgQ1NSX0dQX0NOVFJMKSAmCisJCQkJQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0hXX1JGX0tJTExfU1cpKQorCQlod19yZmtpbGwgPSB0cnVlOworCisJaWYgKGh3X3Jma2lsbCkKKwkJc2V0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cyk7CisJZWxzZQorCQljbGVhcl9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOworCisJd2lwaHlfcmZraWxsX3NldF9od19zdGF0ZShwcml2LT5ody0+d2lwaHksIGh3X3Jma2lsbCk7CisKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3BjaV9yZXN1bWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oCmluZGV4IDMxNzc1YmQuLmU5ZDIzZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmgKQEAgLTc5LDYgKzc5LDggQEAKIAkuc3VidmVuZG9yID0gUENJX0FOWV9JRCwgLnN1YmRldmljZSA9IChzdWJkZXYpLCBcCiAJLmRyaXZlcl9kYXRhID0gKGtlcm5lbF91bG9uZ190KSYoY2ZnKQogCisjZGVmaW5lIFRJTUVfVU5JVAkJMTAyNAorCiAjZGVmaW5lIElXTF9TS1VfRyAgICAgICAweDEKICNkZWZpbmUgSVdMX1NLVV9BICAgICAgIDB4MgogI2RlZmluZSBJV0xfU0tVX04gICAgICAgMHg4CkBAIC0xMjMsNiArMTI1LDggQEAKIAkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOwogCXNzaXplX3QgKCpnZW5lcmFsX3N0YXRzX3JlYWQpKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOworCXNzaXplX3QgKCpidF9zdGF0c19yZWFkKShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyk7CiB9OwogCiBzdHJ1Y3QgaXdsX3RlbXBfb3BzIHsKQEAgLTE3Myw3ICsxNzcsOCBAQAogCXZvaWQgKCpkdW1wX25pY19lcnJvcl9sb2cpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAJdm9pZCAoKmR1bXBfY3NyKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCWludCAoKmR1bXBfZmgpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY2hhciAqKmJ1ZiwgYm9vbCBkaXNwbGF5KTsKLQlpbnQgKCpzZXRfY2hhbm5lbF9zd2l0Y2gpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IGNoYW5uZWwpOworCWludCAoKnNldF9jaGFubmVsX3N3aXRjaCkoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3aXRjaCAqY2hfc3dpdGNoKTsKIAkvKiBwb3dlciBtYW5hZ2VtZW50ICovCiAJc3RydWN0IGl3bF9hcG1fb3BzIGFwbV9vcHM7CiAKQEAgLTE5Myw2ICsxOTgsNyBAQAogCS8qIHN0YXRpb24gbWFuYWdlbWVudCAqLwogCWludCAoKm1hbmFnZV9pYnNzX3N0YXRpb24pKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBib29sIGFkZCk7CisJaW50ICgqdXBkYXRlX2JjYXN0X3N0YXRpb24pKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAJLyogcmVjb3ZlciBmcm9tIHR4IHF1ZXVlIHN0YWxsICovCiAJdm9pZCAoKnJlY292ZXJfZnJvbV90eF9zdGFsbCkodW5zaWduZWQgbG9uZyBkYXRhKTsKIAkvKiBjaGVjayBmb3IgcGxjcCBoZWFsdGggKi8KQEAgLTIwMSw2ICsyMDcsOSBAQAogCS8qIGNoZWNrIGZvciBhY2sgaGVhbHRoICovCiAJYm9vbCAoKmNoZWNrX2Fja19oZWFsdGgpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCk7CisJaW50ICgqdHhmaWZvX2ZsdXNoKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBmbHVzaF9jb250cm9sKTsKKwl2b2lkICgqZGV2X3R4Zmlmb19mbHVzaCkoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgZmx1c2hfY29udHJvbCk7CisKIAlzdHJ1Y3QgaXdsX2RlYnVnZnNfb3BzIGRlYnVnZnNfb3BzOwogfTsKIApAQCAtMzI1LDcgKzMzNCwxMCBAQAogCWNvbnN0IGJvb2wgdWNvZGVfdHJhY2luZzsKIAljb25zdCBib29sIHNlbnNpdGl2aXR5X2NhbGliX2J5X2RyaXZlcjsKIAljb25zdCBib29sIGNoYWluX25vaXNlX2NhbGliX2J5X2RyaXZlcjsKLQl1OCBzY2FuX2FudGVubmFzW0lFRUU4MDIxMV9OVU1fQkFORFNdOworCXU4IHNjYW5fcnhfYW50ZW5uYXNbSUVFRTgwMjExX05VTV9CQU5EU107CisJdTggc2Nhbl90eF9hbnRlbm5hc1tJRUVFODAyMTFfTlVNX0JBTkRTXTsKKwljb25zdCBib29sIG5lZWRfZGNfY2FsaWI7CisJY29uc3QgYm9vbCBidF9zdGF0aXN0aWNzOwogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzQzLDYgKzM1NSw5IEBACiBpbnQgaXdsX2Z1bGxfcnhvbl9yZXF1aXJlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogdm9pZCBpd2xfc2V0X3J4b25fY2hhaW4oc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfc2V0X3J4b25fY2hhbm5lbChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2gpOwordm9pZCBpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCisJCQkgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7CiB1OCBpd2xfZ2V0X3NpbmdsZV9jaGFubmVsX251bWJlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpOwogdm9pZCBpd2xfc2V0X3J4b25faHQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX2h0X2NvbmZpZyAqaHRfY29uZik7CkBAIC0zNTAsNiArMzY1LDcgQEAKIAkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKnN0YV9odF9pbmYpOwogdm9pZCBpd2xfY29ubmVjdGlvbl9pbml0X3J4X2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7Cit2b2lkIGl3bF9zZXRfcmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogaW50IGl3bF9zZXRfZGVjcnlwdGVkX2ZsYWcoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKIAkJCSAgIHUzMiBkZWNyeXB0X3JlcywKQEAgLTM2NCw3ICszODAsNiBAQAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mLAogCQkJCSAgICAgdTMyIGNoYW5nZXMpOwotaW50IGl3bF9tYWNfYmVhY29uX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgaXdsX2NvbW1pdF9yeG9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX21hY19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKQEAgLTQ0NywyMCArNDYyLDExIEBACiBpbnQgaXdsX3J4X3F1ZXVlX3NwYWNlKGNvbnN0IHN0cnVjdCBpd2xfcnhfcXVldWUgKnEpOwogdm9pZCBpd2xfdHhfY21kX2NvbXBsZXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpOwogLyogSGFuZGxlcnMgKi8KLXZvaWQgaXdsX3J4X21pc3NlZF9iZWFjb25fbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJICAgICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKTsKIHZvaWQgaXdsX3J4X3NwZWN0cnVtX21lYXN1cmVfbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCQkgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKTsKLWJvb2wgaXdsX2dvb2RfcGxjcF9oZWFsdGgoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSBzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0KTsKLWJvb2wgaXdsX2dvb2RfYWNrX2hlYWx0aChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJIHN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QpOwogdm9pZCBpd2xfcmVjb3Zlcl9mcm9tX3N0YXRpc3RpY3Moc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QpOwotdm9pZCBpd2xfcnhfc3RhdGlzdGljcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7Ci12b2lkIGl3bF9yZXBseV9zdGF0aXN0aWNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCSAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpOwordm9pZCBpd2xfY2hzd2l0Y2hfZG9uZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGJvb2wgaXNfc3VjY2Vzcyk7CiB2b2lkIGl3bF9yeF9jc2Eoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7CiAKIC8qIFRYIGhlbHBlcnMgKi8KQEAgLTQ3NCw4ICs0ODAsNiBAQAogCQkJCSBkbWFfYWRkcl90IGFkZHIsIHUxNiBsZW4sIHU4IHJlc2V0LCB1OCBwYWQpOwogaW50IGl3bF9od190eF9xdWV1ZV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOwotdm9pZCBpd2xfZnJlZV90ZmRzX2luX3F1ZXVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCSAgICBpbnQgc3RhX2lkLCBpbnQgdGlkLCBpbnQgZnJlZWQpOwogdm9pZCBpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOwogaW50IGl3bF90eF9xdWV1ZV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLAogCQkgICAgICBpbnQgc2xvdHNfbnVtLCB1MzIgdHhxX2lkKTsKQEAgLTQ5NSw3ICs0OTksNyBAQAogCiB1OCBpd2xfcmF0ZV9nZXRfbG93ZXN0X3BsY3Aoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAotdTggaXdsX3RvZ2dsZV90eF9hbnQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBhbnRfaWR4KTsKK3U4IGl3bF90b2dnbGVfdHhfYW50KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggYW50X2lkeCwgdTggdmFsaWQpOwogCiBzdGF0aWMgaW5saW5lIHUzMiBpd2xfYW50X2lkeF90b19mbGFncyh1OCBhbnRfaWR4KQogewpAQCAtNTI2LDkgKzUzMCw5IEBACiAJCSAgICBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpOwogdm9pZCBpd2xfYmdfc3RhcnRfaW50ZXJuYWxfc2NhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBpd2xfaW50ZXJuYWxfc2hvcnRfaHdfc2NhbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotaW50IGl3bF9mb3JjZV9yZXNldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBtb2RlKTsKK2ludCBpd2xfZm9yY2VfcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbW9kZSwgYm9vbCBleHRlcm5hbCk7CiB1MTYgaXdsX2ZpbGxfcHJvYmVfcmVxKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9tZ210ICpmcmFtZSwKLQkJICAgICAgIGNvbnN0IHU4ICppZSwgaW50IGllX2xlbiwgaW50IGxlZnQpOworCQkgICAgICAgY29uc3QgdTggKnRhLCBjb25zdCB1OCAqaWUsIGludCBpZV9sZW4sIGludCBsZWZ0KTsKIHZvaWQgaXdsX3NldHVwX3J4X3NjYW5faGFuZGxlcnMoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHUxNiBpd2xfZ2V0X2FjdGl2ZV9kd2VsbF90aW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKQEAgLTU5NSw2ICs1OTksOSBAQAogfQogCiB2b2lkIGl3bF9iZ19tb25pdG9yX3JlY292ZXIodW5zaWduZWQgbG9uZyBkYXRhKTsKK3UzMiBpd2xfdXNlY3NfdG9fYmVhY29ucyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiB1c2VjLCB1MzIgYmVhY29uX2ludGVydmFsKTsKK19fbGUzMiBpd2xfYWRkX2JlYWNvbl90aW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGJhc2UsCisJCQkgICB1MzIgYWRkb24sIHUzMiBiZWFjb25faW50ZXJ2YWwpOwogCiAjaWZkZWYgQ09ORklHX1BNCiBpbnQgaXdsX3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwpAQCAtNjkzLDcgKzcwMCw2IEBACiBleHRlcm4gdm9pZCBpd2xfc2VuZF9idF9jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGV4dGVybiBpbnQgaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgICAgdTggZmxhZ3MsIGJvb2wgY2xlYXIpOwotZXh0ZXJuIGludCBpd2xfdmVyaWZ5X3Vjb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBleHRlcm4gaW50IGl3bF9zZW5kX2xxX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCXN0cnVjdCBpd2xfbGlua19xdWFsaXR5X2NtZCAqbHEsIHU4IGZsYWdzLCBib29sIGluaXQpOwogdm9pZCBpd2xfYXBtX3N0b3Aoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNzci5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY3NyLmgKaW5kZXggMjU0YzM1YS4uZWNmOThlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY3NyLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY3NyLmgKQEAgLTI5OCw2ICsyOTgsNyBAQAogI2RlZmluZSBDU1JfSFdfUkVWX1RZUEVfMTAwMCAgICAgICAgICAgKDB4MDAwMDA2MCkKICNkZWZpbmUgQ1NSX0hXX1JFVl9UWVBFXzZ4MDAgICAgICAgICAgICgweDAwMDAwNzApCiAjZGVmaW5lIENTUl9IV19SRVZfVFlQRV82eDUwICAgICAgICAgICAoMHgwMDAwMDgwKQorI2RlZmluZSBDU1JfSFdfUkVWX1RZUEVfNng1MGcyICAgICAgICAgKDB4MDAwMDA4NCkKICNkZWZpbmUgQ1NSX0hXX1JFVl9UWVBFXzZ4MDBnMiAgICAgICAgICgweDAwMDAwQjApCiAjZGVmaW5lIENTUl9IV19SRVZfVFlQRV9OT05FICAgICAgICAgICAoMHgwMDAwMEYwKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Z2ZzLmMKaW5kZXggOTY1OWM1ZC4uZTk2YTFiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnZnMuYwpAQCAtMTA2LDI3ICsxMDYsNiBAQAogCS5vcGVuID0gaXdsX2RiZ2ZzX29wZW5fZmlsZV9nZW5lcmljLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9OwogCi1pbnQgaXdsX2RiZ2ZzX3N0YXRpc3RpY3NfZmxhZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNoYXIgKmJ1ZiwgaW50IGJ1ZnN6KQotewotCWludCBwID0gMDsKLQotCXAgKz0gc2NucHJpbnRmKGJ1ZiArIHAsIGJ1ZnN6IC0gcCwgIlN0YXRpc3RpY3MgRmxhZygweCVYKTpcbiIsCi0JCSAgICAgICBsZTMyX3RvX2NwdShwcml2LT5zdGF0aXN0aWNzLmZsYWcpKTsKLQlpZiAobGUzMl90b19jcHUocHJpdi0+c3RhdGlzdGljcy5mbGFnKSAmIFVDT0RFX1NUQVRJU1RJQ1NfQ0xFQVJfTVNLKQotCQlwICs9IHNjbnByaW50ZihidWYgKyBwLCBidWZzeiAtIHAsCi0JCQkgICAgICAgIlx0U3RhdGlzdGljcyBoYXZlIGJlZW4gY2xlYXJlZFxuIik7Ci0JcCArPSBzY25wcmludGYoYnVmICsgcCwgYnVmc3ogLSBwLCAiXHRPcGVyYXRpb25hbCBGcmVxdWVuY3k6ICVzXG4iLAotCQkgICAgICAgKGxlMzJfdG9fY3B1KHByaXYtPnN0YXRpc3RpY3MuZmxhZykgJgotCQkJVUNPREVfU1RBVElTVElDU19GUkVRVUVOQ1lfTVNLKQotCQkJPyAiMi40IEdIeiIgOiAiNS4yIEdIeiIpOwotCXAgKz0gc2NucHJpbnRmKGJ1ZiArIHAsIGJ1ZnN6IC0gcCwgIlx0VEdqIE5hcnJvdyBCYW5kOiAlc1xuIiwKLQkJICAgICAgIChsZTMyX3RvX2NwdShwcml2LT5zdGF0aXN0aWNzLmZsYWcpICYKLQkJCVVDT0RFX1NUQVRJU1RJQ1NfTkFSUk9XX0JBTkRfTVNLKQotCQkJPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKLQlyZXR1cm4gcDsKLX0KLUVYUE9SVF9TWU1CT0woaXdsX2RiZ2ZzX3N0YXRpc3RpY3NfZmxhZyk7Ci0KIHN0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc190eF9zdGF0aXN0aWNzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykgewpAQCAtMzMwLDQ1ICszMDksMzUgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBtYXhfc3RhOyBpKyspIHsKIAkJc3RhdGlvbiA9ICZwcml2LT5zdGF0aW9uc1tpXTsKLQkJaWYgKHN0YXRpb24tPnVzZWQpIHsKLQkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCQkJInN0YXRpb24gJWQ6XG5nZW5lcmFsIGRhdGE6XG4iLCBpKzEpOwotCQkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiaWQ6ICV1XG4iLAotCQkJCQlzdGF0aW9uLT5zdGEuc3RhLnN0YV9pZCk7Ci0JCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJtb2RlOiAldVxuIiwKLQkJCQkJc3RhdGlvbi0+c3RhLm1vZGUpOwotCQkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJCQkiZmxhZ3M6IDB4JXhcbiIsCi0JCQkJCXN0YXRpb24tPnN0YS5zdGF0aW9uX2ZsYWdzX21zayk7Ci0JCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJ0aWQgZGF0YTpcbiIpOwotCQkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJCQkic2VxX251bVx0XHR0eHFfaWQiKTsKLQkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCQkJIlx0ZnJhbWVfY291bnRcdHdhaXRfZm9yX2JhXHQiKTsKLQkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCQkJInN0YXJ0X2lkeFx0Yml0bWFwMFx0Iik7Ci0JCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkJCSJiaXRtYXAxXHRyYXRlX25fZmxhZ3MiKTsKLQkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlxuIik7CisJCWlmICghc3RhdGlvbi0+dXNlZCkKKwkJCWNvbnRpbnVlOworCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkJICJzdGF0aW9uICVkIC0gYWRkcjogJXBNLCBmbGFnczogJSN4XG4iLAorCQkJCSBpLCBzdGF0aW9uLT5zdGEuc3RhLmFkZHIsCisJCQkJIHN0YXRpb24tPnN0YS5zdGF0aW9uX2ZsYWdzX21zayk7CisJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkiVElEXHRzZXFfbnVtXHR0eHFfaWRcdGZyYW1lc1x0dGZkc1x0Iik7CisJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkic3RhcnRfaWR4XHRiaXRtYXBcdFx0XHRyYXRlX25fZmxhZ3NcbiIpOwogCi0JCQlmb3IgKGogPSAwOyBqIDwgTUFYX1RJRF9DT1VOVDsgaisrKSB7CisJCWZvciAoaiA9IDA7IGogPCBNQVhfVElEX0NPVU5UOyBqKyspIHsKKwkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkiJWQ6XHQlI3hcdCUjeFx0JXVcdCV1XHQldVx0XHQlIy4xNmxseFx0JSN4IiwKKwkJCQlqLCBzdGF0aW9uLT50aWRbal0uc2VxX251bWJlciwKKwkJCQlzdGF0aW9uLT50aWRbal0uYWdnLnR4cV9pZCwKKwkJCQlzdGF0aW9uLT50aWRbal0uYWdnLmZyYW1lX2NvdW50LAorCQkJCXN0YXRpb24tPnRpZFtqXS50ZmRzX2luX3F1ZXVlLAorCQkJCXN0YXRpb24tPnRpZFtqXS5hZ2cuc3RhcnRfaWR4LAorCQkJCXN0YXRpb24tPnRpZFtqXS5hZ2cuYml0bWFwLAorCQkJCXN0YXRpb24tPnRpZFtqXS5hZ2cucmF0ZV9uX2ZsYWdzKTsKKworCQkJaWYgKHN0YXRpb24tPnRpZFtqXS5hZ2cud2FpdF9mb3JfYmEpCiAJCQkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJCQkJIlslZF06XHRcdCV1IiwgaiwKLQkJCQkJCXN0YXRpb24tPnRpZFtqXS5zZXFfbnVtYmVyKTsKLQkJCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkJCQkiXHQldVx0XHQldVx0XHQldVx0XHQiLAotCQkJCQkJc3RhdGlvbi0+dGlkW2pdLmFnZy50eHFfaWQsCi0JCQkJCQlzdGF0aW9uLT50aWRbal0uYWdnLmZyYW1lX2NvdW50LAotCQkJCQkJc3RhdGlvbi0+dGlkW2pdLmFnZy53YWl0X2Zvcl9iYSk7Ci0JCQkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJCQkJIiV1XHQlbGx1XHQldSIsCi0JCQkJCQlzdGF0aW9uLT50aWRbal0uYWdnLnN0YXJ0X2lkeCwKLQkJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc3RhdGlvbi0+dGlkW2pdLmFnZy5iaXRtYXAsCi0JCQkJCQlzdGF0aW9uLT50aWRbal0uYWdnLnJhdGVfbl9mbGFncyk7Ci0JCQkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiXG4iKTsKLQkJCX0KKwkJCQkJCSAiIC0gd2FpdGZvcmJhIik7CiAJCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJcbiIpOwogCQl9CisKKwkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiXG4iKTsKIAl9CiAKIAlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKQEAgLTEwNDksOCArMTAxOCwxMyBAQAogCQkJCQkJcnhxLT53cml0ZSk7CiAJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiZnJlZV9jb3VudDogJXVcbiIsCiAJCQkJCQlyeHEtPmZyZWVfY291bnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImNsb3NlZF9yYl9udW06ICV1XG4iLAorCWlmIChyeHEtPnJiX3N0dHMpIHsKKwkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiY2xvc2VkX3JiX251bTogJXVcbiIsCiAJCQkgbGUxNl90b19jcHUocnhxLT5yYl9zdHRzLT5jbG9zZWRfcmJfbnVtKSAmICAweDBGRkYpOworCX0gZWxzZSB7CisJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkJImNsb3NlZF9yYl9udW06IE5vdCBBbGxvY2F0ZWRcbiIpOworCX0KIAlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CiB9CiAKQEAgLTEyOTMsNyArMTI2Nyw3IEBACiAJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKIAkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpIHsKIAotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWludCBwb3MgPSAwOwogCWNoYXIgYnVmWzEyOF07CiAJY29uc3Qgc2l6ZV90IGJ1ZnN6ID0gc2l6ZW9mKGJ1Zik7CkBAIC0xMzQzLDcgKzEzMTcsNyBAQAogCQkJCQkgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAogCQkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpIHsKIAotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWludCBsZW4gPSAwOwogCWNoYXIgYnVmWzIwXTsKIApAQCAtMTM1NSw3ICsxMzI5LDcgQEAKIAkJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKIAkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKSB7CiAKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpbnQgbGVuID0gMDsKIAljaGFyIGJ1ZlsyMF07CiAKQEAgLTEzNjgsNyArMTM0Miw3IEBACiAJCQkJCSBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAljaGFyICpidWY7CiAJaW50IHBvcyA9IDA7CiAJc3NpemVfdCByZXQgPSAtRUZBVUxUOwpAQCAtMTQzMCw3ICsxNDA0LDcgQEAKIAkJCQkJY2hhciBfX3VzZXIgKnVzZXJfYnVmLAogCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykgewogCi0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJaW50IHBvcyA9IDA7CiAJY2hhciBidWZbMTJdOwogCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOwpAQCAtMTQ1NiwxMCArMTQzMCwxMCBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJnBsY3ApICE9IDEpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmICgocGxjcCA8PSBJV0xfTUFYX1BMQ1BfRVJSX1RIUkVTSE9MRF9NSU4pIHx8CisJaWYgKChwbGNwIDwgSVdMX01BWF9QTENQX0VSUl9USFJFU0hPTERfTUlOKSB8fAogCQkocGxjcCA+IElXTF9NQVhfUExDUF9FUlJfVEhSRVNIT0xEX01BWCkpCiAJCXByaXYtPmNmZy0+cGxjcF9kZWx0YV90aHJlc2hvbGQgPQotCQkJSVdMX01BWF9QTENQX0VSUl9USFJFU0hPTERfREVGOworCQkJSVdMX01BWF9QTENQX0VSUl9USFJFU0hPTERfRElTQUJMRTsKIAllbHNlCiAJCXByaXYtPmNmZy0+cGxjcF9kZWx0YV90aHJlc2hvbGQgPSBwbGNwOwogCXJldHVybiBjb3VudDsKQEAgLTE1MTMsNyArMTQ4Nyw3IEBACiAJc3dpdGNoIChyZXNldCkgewogCWNhc2UgSVdMX1JGX1JFU0VUOgogCWNhc2UgSVdMX0ZXX1JFU0VUOgotCQlyZXQgPSBpd2xfZm9yY2VfcmVzZXQocHJpdiwgcmVzZXQpOworCQlyZXQgPSBpd2xfZm9yY2VfcmVzZXQocHJpdiwgcmVzZXQsIHRydWUpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE1MjEsNiArMTQ5NSw0MCBAQAogCXJldHVybiByZXQgPyByZXQgOiBjb3VudDsKIH0KIAorc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3R4Zmlmb19mbHVzaF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykgeworCisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzhdOworCWludCBidWZfc2l6ZTsKKwlpbnQgZmx1c2g7CisKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisJYnVmX3NpemUgPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gIDEpOworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBidWZfc2l6ZSkpCisJCXJldHVybiAtRUZBVUxUOworCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmZmx1c2gpICE9IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGl3bF9pc19yZmtpbGwocHJpdikpCisJCXJldHVybiAtRUZBVUxUOworCisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZGV2X3R4Zmlmb19mbHVzaChwcml2LCBJV0xfRFJPUF9BTEwpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfdWNvZGVfYnRfc3RhdHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIHByaXYtPmNmZy0+b3BzLT5saWItPmRlYnVnZnNfb3BzLmJ0X3N0YXRzX3JlYWQoZmlsZSwKKwkJCXVzZXJfYnVmLCBjb3VudCwgcHBvcyk7Cit9CisKIERFQlVHRlNfUkVBRF9GSUxFX09QUyhyeF9zdGF0aXN0aWNzKTsKIERFQlVHRlNfUkVBRF9GSUxFX09QUyh0eF9zdGF0aXN0aWNzKTsKIERFQlVHRlNfUkVBRF9XUklURV9GSUxFX09QUyh0cmFmZmljX2xvZyk7CkBAIC0xNTQyLDYgKzE1NTAsOCBAQAogREVCVUdGU19SRUFEX1dSSVRFX0ZJTEVfT1BTKGZvcmNlX3Jlc2V0KTsKIERFQlVHRlNfUkVBRF9GSUxFX09QUyhyeG9uX2ZsYWdzKTsKIERFQlVHRlNfUkVBRF9GSUxFX09QUyhyeG9uX2ZpbHRlcl9mbGFncyk7CitERUJVR0ZTX1dSSVRFX0ZJTEVfT1BTKHR4Zmlmb19mbHVzaCk7CitERUJVR0ZTX1JFQURfRklMRV9PUFModWNvZGVfYnRfc3RhdHMpOwogCiAvKgogICogQ3JlYXRlIHRoZSBkZWJ1Z2ZzIGZpbGVzIGFuZCBkaXJlY3RvcmllcwpAQCAtMTYwMCw2ICsxNjEwLDggQEAKIAlERUJVR0ZTX0FERF9GSUxFKHVjb2RlX3J4X3N0YXRzLCBkaXJfZGVidWcsIFNfSVJVU1IpOwogCURFQlVHRlNfQUREX0ZJTEUodWNvZGVfdHhfc3RhdHMsIGRpcl9kZWJ1ZywgU19JUlVTUik7CiAJREVCVUdGU19BRERfRklMRSh1Y29kZV9nZW5lcmFsX3N0YXRzLCBkaXJfZGVidWcsIFNfSVJVU1IpOworCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5kZXZfdHhmaWZvX2ZsdXNoKQorCQlERUJVR0ZTX0FERF9GSUxFKHR4Zmlmb19mbHVzaCwgZGlyX2RlYnVnLCBTX0lXVVNSKTsKIAogCWlmIChwcml2LT5jZmctPnNlbnNpdGl2aXR5X2NhbGliX2J5X2RyaXZlcikKIAkJREVCVUdGU19BRERfRklMRShzZW5zaXRpdml0eSwgZGlyX2RlYnVnLCBTX0lSVVNSKTsKQEAgLTE2MDcsNiArMTYxOSw4IEBACiAJCURFQlVHRlNfQUREX0ZJTEUoY2hhaW5fbm9pc2UsIGRpcl9kZWJ1ZywgU19JUlVTUik7CiAJaWYgKHByaXYtPmNmZy0+dWNvZGVfdHJhY2luZykKIAkJREVCVUdGU19BRERfRklMRSh1Y29kZV90cmFjaW5nLCBkaXJfZGVidWcsIFNfSVdVU1IgfCBTX0lSVVNSKTsKKwlpZiAocHJpdi0+Y2ZnLT5idF9zdGF0aXN0aWNzKQorCQlERUJVR0ZTX0FERF9GSUxFKHVjb2RlX2J0X3N0YXRzLCBkaXJfZGVidWcsIFNfSVJVU1IpOwogCURFQlVHRlNfQUREX0ZJTEUocnhvbl9mbGFncywgZGlyX2RlYnVnLCBTX0lXVVNSKTsKIAlERUJVR0ZTX0FERF9GSUxFKHJ4b25fZmlsdGVyX2ZsYWdzLCBkaXJfZGVidWcsIFNfSVdVU1IpOwogCWlmIChwcml2LT5jZmctPnNlbnNpdGl2aXR5X2NhbGliX2J5X2RyaXZlcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKaW5kZXggZjNmMzQ3My4uZjM1YmNhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKQEAgLTQ4LDI1ICs0OCw2IEBACiAjaW5jbHVkZSAiaXdsLXBvd2VyLmgiCiAjaW5jbHVkZSAiaXdsLWFnbi1ycy5oIgogCi0vKiBjb25maWd1cmF0aW9uIGZvciB0aGUgaXdsNDk2NSAqLwotZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDQ5NjVfYWduX2NmZzsKLWV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MzAwX2Fnbl9jZmc7Ci1leHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNTEwMF9hZ25fY2ZnOwotZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDUzNTBfYWduX2NmZzsKLWV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTAwX2Jnbl9jZmc7Ci1leHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNTEwMF9hYmdfY2ZnOwotZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDUxNTBfYWduX2NmZzsKLWV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTUwX2FiZ19jZmc7Ci1leHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAwMGcyYV8yYWduX2NmZzsKLWV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwaV8yYWduX2NmZzsKLWV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwaV8yYWJnX2NmZzsKLWV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwaV8yYmdfY2ZnOwotZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwMDBfM2Fnbl9jZmc7Ci1leHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjA1MF8yYWduX2NmZzsKLWV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDUwXzJhYmdfY2ZnOwotZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDEwMDBfYmduX2NmZzsKLWV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2wxMDAwX2JnX2NmZzsKLQogc3RydWN0IGl3bF90eF9xdWV1ZTsKIAogLyogQ1QtS0lMTCBjb25zdGFudHMgKi8KQEAgLTEzMyw4ICsxMTQsOCBAQAogCSAqIHN0cnVjdHVyZSBpcyBzdG9yZWQgYXQgdGhlIGVuZCBvZiB0aGUgc2hhcmVkIHF1ZXVlIG1lbW9yeS4gKi8KIAl1MzIgZmxhZ3M7CiAKLQlERUNMQVJFX1BDSV9VTk1BUF9BRERSKG1hcHBpbmcpCi0JREVDTEFSRV9QQ0lfVU5NQVBfTEVOKGxlbikKKwlERUZJTkVfRE1BX1VOTUFQX0FERFIobWFwcGluZyk7CisJREVGSU5FX0RNQV9VTk1BUF9MRU4obGVuKTsKIH07CiAKIC8qCkBAIC0xNTcsMTEgKzEzOCwxMSBAQAogCQkJCSogc3BhY2UgbW9yZSB0aGFuIHRoaXMgKi8KIAlpbnQgaGlnaF9tYXJrOyAgICAgICAgIC8qIGhpZ2ggd2F0ZXJtYXJrLCBzdG9wIHF1ZXVlIGlmIGZyZWUKIAkJCQkqIHNwYWNlIGxlc3MgdGhhbiB0aGlzICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIE9uZSBmb3IgZWFjaCBURkQgKi8KIHN0cnVjdCBpd2xfdHhfaW5mbyB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYltJV0xfTlVNX09GX1RCUyAtIDFdOworCXN0cnVjdCBza19idWZmICpza2I7CiB9OwogCiAvKioKQEAgLTM0Myw4ICszMjQsOCBAQAogCQlzdHJ1Y3QgaXdsX3R4X2NtZCB0eDsKIAkJc3RydWN0IGl3bDYwMDBfY2hhbm5lbF9zd2l0Y2hfY21kIGNoc3dpdGNoOwogCQl1OCBwYXlsb2FkW0RFRl9DTURfUEFZTE9BRF9TSVpFXTsKLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBjbWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwl9IF9fcGFja2VkIGNtZDsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgVEZEX01BWF9QQVlMT0FEX1NJWkUgKHNpemVvZihzdHJ1Y3QgaXdsX2RldmljZV9jbWQpKQogCkBAIC0zNjcsNyArMzQ4LDcgQEAKIC8qKgogICogc3RydWN0IGl3bF9yeF9xdWV1ZSAtIFJ4IHF1ZXVlCiAgKiBAYmQ6IGRyaXZlcidzIHBvaW50ZXIgdG8gYnVmZmVyIG9mIHJlY2VpdmUgYnVmZmVyIGRlc2NyaXB0b3JzIChyYmQpCi0gKiBAZG1hX2FkZHI6IGJ1cyBhZGRyZXNzIG9mIGJ1ZmZlciBvZiByZWNlaXZlIGJ1ZmZlciBkZXNjcmlwdG9ycyAocmJkKQorICogQGJkX2RtYTogYnVzIGFkZHJlc3Mgb2YgYnVmZmVyIG9mIHJlY2VpdmUgYnVmZmVyIGRlc2NyaXB0b3JzIChyYmQpCiAgKiBAcmVhZDogU2hhcmVkIGluZGV4IHRvIG5ld2VzdCBhdmFpbGFibGUgUnggYnVmZmVyCiAgKiBAd3JpdGU6IFNoYXJlZCBpbmRleCB0byBvbGRlc3Qgd3JpdHRlbiBSeCBwYWNrZXQKICAqIEBmcmVlX2NvdW50OiBOdW1iZXIgb2YgcHJlLWFsbG9jYXRlZCBidWZmZXJzIGluIHJ4X2ZyZWUKQEAgLTM4MSw3ICszNjIsNyBAQAogICovCiBzdHJ1Y3QgaXdsX3J4X3F1ZXVlIHsKIAlfX2xlMzIgKmJkOwotCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisJZG1hX2FkZHJfdCBiZF9kbWE7CiAJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyIHBvb2xbUlhfUVVFVUVfU0laRSArIFJYX0ZSRUVfQlVGRkVSU107CiAJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpxdWV1ZVtSWF9RVUVVRV9TSVpFXTsKIAl1MzIgcmVhZDsKQEAgLTQzMyw3ICs0MTQsNyBAQAogCiAKIHN0cnVjdCBpd2xfdGlkX2RhdGEgewotCXUxNiBzZXFfbnVtYmVyOworCXUxNiBzZXFfbnVtYmVyOyAvKiBhZ24gb25seSAqLwogCXUxNiB0ZmRzX2luX3F1ZXVlOwogCXN0cnVjdCBpd2xfaHRfYWdnIGFnZzsKIH07CkBAIC01ODMsNiArNTY0LDE0IEBACiAJSVdMX1VDT0RFX1RMVl9JTklUX0RBVEEJCT0gNCwKIAlJV0xfVUNPREVfVExWX0JPT1QJCT0gNSwKIAlJV0xfVUNPREVfVExWX1BST0JFX01BWF9MRU4JPSA2LCAvKiBhIHUzMiB2YWx1ZSAqLworCUlXTF9VQ09ERV9UTFZfUlVOVF9FVlRMT0dfUFRSCT0gOCwKKwlJV0xfVUNPREVfVExWX1JVTlRfRVZUTE9HX1NJWkUJPSA5LAorCUlXTF9VQ09ERV9UTFZfUlVOVF9FUlJMT0dfUFRSCT0gMTAsCisJSVdMX1VDT0RFX1RMVl9JTklUX0VWVExPR19QVFIJPSAxMSwKKwlJV0xfVUNPREVfVExWX0lOSVRfRVZUTE9HX1NJWkUJPSAxMiwKKwlJV0xfVUNPREVfVExWX0lOSVRfRVJSTE9HX1BUUgk9IDEzLAorCUlXTF9VQ09ERV9UTFZfRU5IQU5DRV9TRU5TX1RCTAk9IDE0LAorCUlXTF9VQ09ERV9UTFZfUEhZX0NBTElCUkFUSU9OX1NJWkUgPSAxNSwKIH07CiAKIHN0cnVjdCBpd2xfdWNvZGVfdGx2IHsKQEAgLTU5MCw3ICs1NzksNyBAQAogCV9fbGUxNiBhbHRlcm5hdGl2ZTsJLyogc2VlIGNvbW1lbnQgKi8KIAlfX2xlMzIgbGVuZ3RoOwkJLyogbm90IGluY2x1ZGluZyB0eXBlL2xlbmd0aCBmaWVsZHMgKi8KIAl1OCBkYXRhWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIElXTF9UTFZfVUNPREVfTUFHSUMJMHgwYTRjNTc0OQogCkBAIC02NzUsNiArNjY0LDcgQEAKICAqIEBzd19jcnlwdG86IDAgZm9yIGh3LCAxIGZvciBzdwogICogQG1heF94eHhfc2l6ZTogZm9yIHVjb2RlIHVzZXMKICAqIEBjdF9raWxsX3RocmVzaG9sZDogdGVtcGVyYXR1cmUgdGhyZXNob2xkCisgKiBAYmVhY29uX3RpbWVfdHNmX2JpdHM6IG51bWJlciBvZiB2YWxpZCB0c2YgYml0cyBmb3IgYmVhY29uIHRpbWUKICAqIEBjYWxpYl9pbml0X2NmZzogc2V0dXAgaW5pdGlhbCBjYWxpYnJhdGlvbnMgZm9yIHRoZSBodwogICogQHN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfcmFuZ2VzOiByYW5nZSBvZiBzZW5zaXRpdml0eSB2YWx1ZXMKICAqLwpAQCAtNzAxLDYgKzY5MSw3IEBACiAJdTMyIGN0X2tpbGxfdGhyZXNob2xkOyAvKiB2YWx1ZSBpbiBody1kZXBlbmRlbnQgdW5pdHMgKi8KIAl1MzIgY3Rfa2lsbF9leGl0X3RocmVzaG9sZDsgLyogdmFsdWUgaW4gaHctZGVwZW5kZW50IHVuaXRzICovCiAJCQkJICAgIC8qIGZvciAxMDAwLCA2MDAwIHNlcmllcyBhbmQgdXAgKi8KKwl1MTYgYmVhY29uX3RpbWVfdHNmX2JpdHM7CiAJdTMyIGNhbGliX2luaXRfY2ZnOwogCWNvbnN0IHN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfcmFuZ2VzICpzZW5zOwogfTsKQEAgLTEwNDcsMTEgKzEwMzgsMTIgQEAKICAqIFRoaXMgaXMgdGhlIHRocmVzaG9sZCB2YWx1ZSBvZiBwbGNwIGVycm9yIHJhdGUgcGVyIDEwMG1TZWNzLiAgSXQgaXMKICAqIHVzZWQgdG8gc2V0IGFuZCBjaGVjayBmb3IgdGhlIHZhbGlkaXR5IG9mIHBsY3BfZGVsdGEuCiAgKi8KLSNkZWZpbmUgSVdMX01BWF9QTENQX0VSUl9USFJFU0hPTERfTUlOCSgwKQorI2RlZmluZSBJV0xfTUFYX1BMQ1BfRVJSX1RIUkVTSE9MRF9NSU4JKDEpCiAjZGVmaW5lIElXTF9NQVhfUExDUF9FUlJfVEhSRVNIT0xEX0RFRgkoNTApCiAjZGVmaW5lIElXTF9NQVhfUExDUF9FUlJfTE9OR19USFJFU0hPTERfREVGCSgxMDApCiAjZGVmaW5lIElXTF9NQVhfUExDUF9FUlJfRVhUX0xPTkdfVEhSRVNIT0xEX0RFRgkoMjAwKQogI2RlZmluZSBJV0xfTUFYX1BMQ1BfRVJSX1RIUkVTSE9MRF9NQVgJKDI1NSkKKyNkZWZpbmUgSVdMX01BWF9QTENQX0VSUl9USFJFU0hPTERfRElTQUJMRQkoMCkKIAogI2RlZmluZSBJV0xfREVMQVlfTkVYVF9GT1JDRV9SRl9SRVNFVCAgKEhaKjMpCiAjZGVmaW5lIElXTF9ERUxBWV9ORVhUX0ZPUkNFX0ZXX1JFTE9BRCAoSFoqNSkKQEAgLTEwNzUsNiArMTA2NywyMCBAQAogCXVuc2lnbmVkIGxvbmcgbGFzdF9mb3JjZV9yZXNldF9qaWZmaWVzOwogfTsKIAorLyogZXh0ZW5kIGJlYWNvbiB0aW1lIGZvcm1hdCBiaXQgc2hpZnRpbmcgICovCisvKgorICogZm9yIF8zOTQ1IGRldmljZXMKKyAqIGJpdHMgMzE6MjQgLSBleHRlbmRlZAorICogYml0cyAyMzowICAtIGludGVydmFsCisgKi8KKyNkZWZpbmUgSVdMMzk0NV9FWFRfQkVBQ09OX1RJTUVfUE9TCTI0CisvKgorICogZm9yIF9hZ24gZGV2aWNlcworICogYml0cyAzMToyMiAtIGV4dGVuZGVkCisgKiBiaXRzIDIxOjAgIC0gaW50ZXJ2YWwKKyAqLworI2RlZmluZSBJV0xBR05fRVhUX0JFQUNPTl9USU1FX1BPUwkyMgorCiBzdHJ1Y3QgaXdsX3ByaXYgewogCiAJLyogaWVlZSBkZXZpY2UgdXNlZCBieSBnZW5lcmljIGllZWUgcHJvY2Vzc2luZyBjb2RlICovCkBAIC0xMTA5LDcgKzExMTUsNyBAQAogCS8qIGZvcmNlIHJlc2V0ICovCiAJc3RydWN0IGl3bF9mb3JjZV9yZXNldCBmb3JjZV9yZXNldFtJV0xfTUFYX0ZPUkNFX1JFU0VUXTsKIAotCS8qIHdlIGFsbG9jYXRlIGFycmF5IG9mIGl3bDQ5NjVfY2hhbm5lbF9pbmZvIGZvciBOSUMncyB2YWxpZCBjaGFubmVscy4KKwkvKiB3ZSBhbGxvY2F0ZSBhcnJheSBvZiBpd2xfY2hhbm5lbF9pbmZvIGZvciBOSUMncyB2YWxpZCBjaGFubmVscy4KIAkgKiAgICBBY2Nlc3MgdmlhIGNoYW5uZWwgIyB1c2luZyBpbmRpcmVjdCBpbmRleCBhcnJheSAqLwogCXN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaGFubmVsX2luZm87CS8qIGNoYW5uZWwgaW5mbyBhcnJheSAqLwogCXU4IGNoYW5uZWxfY291bnQ7CS8qICMgb2YgY2hhbm5lbHMgKi8KQEAgLTExMjcsNiArMTEzMyw3IEBACiAJdm9pZCAqc2Nhbl9jbWQ7CiAJZW51bSBpZWVlODAyMTFfYmFuZCBzY2FuX2JhbmQ7CiAJc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqc2Nhbl9yZXF1ZXN0OworCXN0cnVjdCBpZWVlODAyMTFfdmlmICpzY2FuX3ZpZjsKIAlib29sIGlzX2ludGVybmFsX3Nob3J0X3NjYW47CiAJdTggc2Nhbl90eF9hbnRbSUVFRTgwMjExX05VTV9CQU5EU107CiAJdTggbWdtdF90eF9hbnQ7CkBAIC0xMTQ3LDYgKzExNTQsOSBAQAogCXUzMiAgaHdfd2FfcmV2OwogCXU4ICAgcmV2X2lkOwogCisJLyogRUVQUk9NIE1BQyBhZGRyZXNzZXMgKi8KKwlzdHJ1Y3QgbWFjX2FkZHJlc3MgYWRkcmVzc2VzWzJdOworCiAJLyogdUNvZGUgaW1hZ2VzLCBzYXZlIHRvIHJlbG9hZCBpbiBjYXNlIG9mIGZhaWx1cmUgKi8KIAlpbnQgZndfaW5kZXg7CQkJLyogZmlybXdhcmUgd2UncmUgdHJ5aW5nIHRvIGxvYWQgKi8KIAl1MzIgdWNvZGVfdmVyOwkJCS8qIHZlcnNpb24gb2YgdWNvZGUsIGNvcHkgb2YKQEAgLTExNzQsNyArMTE4NCw3IEBACiAJc3RydWN0IGl3bF9zd2l0Y2hfcnhvbiBzd2l0Y2hfcnhvbjsKIAogCS8qIDFzdCByZXNwb25zZXMgZnJvbSBpbml0aWFsaXplIGFuZCBydW50aW1lIHVDb2RlIGltYWdlcy4KLQkgKiA0OTY1J3MgaW5pdGlhbGl6ZSBhbGl2ZSByZXNwb25zZSBjb250YWlucyBzb21lIGNhbGlicmF0aW9uIGRhdGEuICovCisJICogX2FnbidzIGluaXRpYWxpemUgYWxpdmUgcmVzcG9uc2UgY29udGFpbnMgc29tZSBjYWxpYnJhdGlvbiBkYXRhLiAqLwogCXN0cnVjdCBpd2xfaW5pdF9hbGl2ZV9yZXNwIGNhcmRfYWxpdmVfaW5pdDsKIAlzdHJ1Y3QgaXdsX2FsaXZlX3Jlc3AgY2FyZF9hbGl2ZTsKIApAQCAtMTE4OCw3ICsxMTk4LDkgQEAKIAl1OCBzdGFydF9jYWxpYjsKIAlzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X2RhdGEgc2Vuc2l0aXZpdHlfZGF0YTsKIAlzdHJ1Y3QgaXdsX2NoYWluX25vaXNlX2RhdGEgY2hhaW5fbm9pc2VfZGF0YTsKKwlib29sIGVuaGFuY2Vfc2Vuc2l0aXZpdHlfdGFibGU7CiAJX19sZTE2IHNlbnNpdGl2aXR5X3RibFtIRF9UQUJMRV9TSVpFXTsKKwlfX2xlMTYgZW5oYW5jZV9zZW5zaXRpdml0eV90YmxbRU5IQU5DRV9IRF9UQUJMRV9FTlRSSUVTXTsKIAogCXN0cnVjdCBpd2xfaHRfY29uZmlnIGN1cnJlbnRfaHRfY29uZmlnOwogCkBAIC0xMjIwLDE4ICsxMjMyLDEyIEBACiAJc3RydWN0IGl3bF9wb3dlcl9tZ3IgcG93ZXJfZGF0YTsKIAlzdHJ1Y3QgaXdsX3R0X21nbXQgdGhlcm1hbF90aHJvdHRsZTsKIAotCXN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcyBzdGF0aXN0aWNzOwotI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi0Jc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzIGFjY3VtX3N0YXRpc3RpY3M7Ci0Jc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzIGRlbHRhX3N0YXRpc3RpY3M7Ci0Jc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzIG1heF9kZWx0YTsKLSNlbmRpZgotCiAJLyogY29udGV4dCBpbmZvcm1hdGlvbiAqLwogCXU4IGJzc2lkW0VUSF9BTEVOXTsgLyogdXNlZCBvbmx5IG9uIDM5NDUgYnV0IGZpbGxlZCBieSBjb3JlICovCi0JdTggbWFjX2FkZHJbRVRIX0FMRU5dOwogCi0JLypzdGF0aW9uIHRhYmxlIHZhcmlhYmxlcyAqLworCS8qIHN0YXRpb24gdGFibGUgdmFyaWFibGVzICovCisKKwkvKiBOb3RlOiBpZiBsb2NrIGFuZCBzdGFfbG9jayBhcmUgbmVlZGVkLCBsb2NrIG11c3QgYmUgYWNxdWlyZWQgZmlyc3QgKi8KIAlzcGlubG9ja190IHN0YV9sb2NrOwogCWludCBudW1fc3RhdGlvbnM7CiAJc3RydWN0IGl3bF9zdGF0aW9uX2VudHJ5IHN0YXRpb25zW0lXTF9TVEFUSU9OX0NPVU5UXTsKQEAgLTEyNzMsNyArMTI3OSw3IEBACiAJCQlzdHJ1Y3QgZGVsYXllZF93b3JrIHJma2lsbF9wb2xsOwogCiAJCQlzdHJ1Y3QgaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzIHN0YXRpc3RpY3M7Ci0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVR0ZTCiAJCQlzdHJ1Y3QgaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzIGFjY3VtX3N0YXRpc3RpY3M7CiAJCQlzdHJ1Y3QgaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzIGRlbHRhX3N0YXRpc3RpY3M7CiAJCQlzdHJ1Y3QgaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzIG1heF9kZWx0YTsKQEAgLTEzMTUsNiArMTMyMSwyOCBAQAogCQkJYm9vbCBsYXN0X3BoeV9yZXNfdmFsaWQ7CiAKIAkJCXN0cnVjdCBjb21wbGV0aW9uIGZpcm13YXJlX2xvYWRpbmdfY29tcGxldGU7CisKKwkJCXUzMiBpbml0X2V2dGxvZ19wdHIsIGluaXRfZXZ0bG9nX3NpemUsIGluaXRfZXJybG9nX3B0cjsKKwkJCXUzMiBpbnN0X2V2dGxvZ19wdHIsIGluc3RfZXZ0bG9nX3NpemUsIGluc3RfZXJybG9nX3B0cjsKKworCQkJLyoKKwkJCSAqIGNoYWluIG5vaXNlIHJlc2V0IGFuZCBnYWluIGNvbW1hbmRzIGFyZSB0aGUKKwkJCSAqIHR3byBleHRyYSBjYWxpYnJhdGlvbiBjb21tYW5kcyBmb2xsb3dzIHRoZSBzdGFuZGFyZAorCQkJICogcGh5IGNhbGlicmF0aW9uIGNvbW1hbmRzCisJCQkgKi8KKwkJCXU4IHBoeV9jYWxpYl9jaGFpbl9ub2lzZV9yZXNldF9jbWQ7CisJCQl1OCBwaHlfY2FsaWJfY2hhaW5fbm9pc2VfZ2Fpbl9jbWQ7CisKKwkJCXN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcyBzdGF0aXN0aWNzOworCQkJc3RydWN0IGl3bF9idF9ub3RpZl9zdGF0aXN0aWNzIHN0YXRpc3RpY3NfYnQ7CisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUdGUworCQkJc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzIGFjY3VtX3N0YXRpc3RpY3M7CisJCQlzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MgZGVsdGFfc3RhdGlzdGljczsKKwkJCXN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcyBtYXhfZGVsdGE7CisJCQlzdHJ1Y3QgaXdsX2J0X25vdGlmX3N0YXRpc3RpY3MgYWNjdW1fc3RhdGlzdGljc19idDsKKwkJCXN0cnVjdCBpd2xfYnRfbm90aWZfc3RhdGlzdGljcyBkZWx0YV9zdGF0aXN0aWNzX2J0OworCQkJc3RydWN0IGl3bF9idF9ub3RpZl9zdGF0aXN0aWNzIG1heF9kZWx0YV9idDsKKyNlbmRpZgogCQl9IF9hZ247CiAjZW5kaWYKIAl9OwpAQCAtMTMzNiw2ICsxMzY0LDcgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY3RfZW50ZXI7CiAJc3RydWN0IHdvcmtfc3RydWN0IGN0X2V4aXQ7CiAJc3RydWN0IHdvcmtfc3RydWN0IHN0YXJ0X2ludGVybmFsX3NjYW47CisJc3RydWN0IHdvcmtfc3RydWN0IHR4X2ZsdXNoOwogCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IGlycV90YXNrbGV0OwogCkBAIC0xMzUzLDkgKzEzODIsNyBAQAogCS8qIGRlYnVnZ2luZyBpbmZvICovCiAJdTMyIGRlYnVnX2xldmVsOyAvKiBwZXIgZGV2aWNlIGRlYnVnZ2luZyB3aWxsIG92ZXJyaWRlIGdsb2JhbAogCQkJICAgIGl3bF9kZWJ1Z19sZXZlbCBpZiBzZXQgKi8KLQl1MzIgZnJhbWVjbnRfdG9fdXM7Ci0JYXRvbWljX3QgcmVzdHJpY3RfcmVmY250OwotCWJvb2wgZGlzYWJsZV9odDQwOworI2VuZGlmIC8qIENPTkZJR19JV0xXSUZJX0RFQlVHICovCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUdGUwogCS8qIGRlYnVnZnMgKi8KIAl1MTYgdHhfdHJhZmZpY19pZHg7CkBAIC0xMzY0LDggKzEzOTEsOCBAQAogCXU4ICpyeF90cmFmZmljOwogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZGlyOwogCXUzMiBkYmdmc19zcmFtX29mZnNldCwgZGJnZnNfc3JhbV9sZW47CisJYm9vbCBkaXNhYmxlX2h0NDA7CiAjZW5kaWYgLyogQ09ORklHX0lXTFdJRklfREVCVUdGUyAqLwotI2VuZGlmIC8qIENPTkZJR19JV0xXSUZJX0RFQlVHICovCiAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhwb3dlcl93b3JrOwogCXUzMiBkaXNhYmxlX3NlbnNfY2FsOwpAQCAtMTQxOSw5ICsxNDQ2LDkgQEAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGllZWU4MDIxMV9oZHIgKml3bF90eF9xdWV1ZV9nZXRfaGRyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkJCQkgaW50IHR4cV9pZCwgaW50IGlkeCkKIHsKLQlpZiAocHJpdi0+dHhxW3R4cV9pZF0udHhiW2lkeF0uc2tiWzBdKQorCWlmIChwcml2LT50eHFbdHhxX2lkXS50eGJbaWR4XS5za2IpCiAJCXJldHVybiAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilwcml2LT50eHFbdHhxX2lkXS4KLQkJCQl0eGJbaWR4XS5za2JbMF0tPmRhdGE7CisJCQkJdHhiW2lkeF0uc2tiLT5kYXRhOwogCXJldHVybiBOVUxMOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCmluZGV4IGVlMTE0NTIuLmE0NWQwMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCkBAIC02MjksNiArNjI5LDkgQEAKIAkgICAgY2FsaWJfdmVyIDwgcHJpdi0+Y2ZnLT5lZXByb21fY2FsaWJfdmVyKQogCQlnb3RvIGVycjsKIAorCUlXTF9JTkZPKHByaXYsICJkZXZpY2UgRUVQUk9NIFZFUj0weCV4LCBDQUxJQj0weCV4XG4iLAorCQkgZWVwcm9tX3ZlciwgY2FsaWJfdmVyKTsKKwogCXJldHVybiAwOwogZXJyOgogCUlXTF9FUlIocHJpdiwgIlVuc3VwcG9ydGVkICh0b28gb2xkKSBFRVBST00gVkVSPTB4JXggPCAweCV4IENBTElCPTB4JXggPCAweCV4XG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaAppbmRleCA5NWFhMjAyLi5hNDc3MmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaApAQCAtMTE4LDcgKzExOCw3IEBACiBzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsIHsKIAl1OCBmbGFnczsJCS8qIEVFUFJPTV9DSEFOTkVMXyogZmxhZ3MgY29waWVkIGZyb20gRUVQUk9NICovCiAJczggbWF4X3Bvd2VyX2F2ZzsJLyogbWF4IHBvd2VyIChkQm0pIG9uIHRoaXMgY2hubCwgbGltaXQgMzEgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoqCiAgKiBpd2xfZWVwcm9tX2VuaGFuY2VkX3R4cHdyIHN0cnVjdHVyZQpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJczggcmVzZXJ2ZWQ7CiAJczggbWltbzJfbWF4OwogCXM4IG1pbW8zX21heDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogMzk0NSBTcGVjaWZpYyAqLwogI2RlZmluZSBFRVBST01fMzk0NV9FRVBST01fVkVSU0lPTgkoMHgyZikKQEAgLTI3Niw2ICsyNzYsMTAgQEAKICNkZWZpbmUgRUVQUk9NXzYwNTBfVFhfUE9XRVJfVkVSU0lPTiAgICAoNCkKICNkZWZpbmUgRUVQUk9NXzYwNTBfRUVQUk9NX1ZFUlNJT04JKDB4NTMyKQogCisvKiA2eDUwZzIgU3BlY2lmaWMgKi8KKyNkZWZpbmUgRUVQUk9NXzYwNTBHMl9UWF9QT1dFUl9WRVJTSU9OICAgICg2KQorI2RlZmluZSBFRVBST01fNjA1MEcyX0VFUFJPTV9WRVJTSU9OCSgweDU1MykKKwogLyogNngwMGcyIFNwZWNpZmljICovCiAjZGVmaW5lIEVFUFJPTV82MDAwRzJfVFhfUE9XRVJfVkVSU0lPTiAgICAoNikKICNkZWZpbmUgRUVQUk9NXzYwMDBHMl9FRVBST01fVkVSU0lPTgkoMHg3MDkpCkBAIC0zMTIsNyArMzE2LDcgQEAKIAl1OCBnYWluX2lkeDsJCS8qIEluZGV4IGludG8gZ2FpbiB0YWJsZSAqLwogCXU4IGFjdHVhbF9wb3c7CQkvKiBNZWFzdXJlZCBSRiBvdXRwdXQgcG93ZXIsIGhhbGYtZEJtICovCiAJczggcGFfZGV0OwkJLyogUG93ZXIgYW1wIGRldGVjdG9yIGxldmVsIChub3QgdXNlZCkgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogCiAvKgpAQCAtMzI4LDcgKzMzMiw3IEBACiAJc3RydWN0IGl3bF9lZXByb21fY2FsaWJfbWVhc3VyZQogCQltZWFzdXJlbWVudHNbRUVQUk9NX1RYX1BPV0VSX1RYX0NIQUlOU10KIAkJCVtFRVBST01fVFhfUE9XRVJfTUVBU1VSRU1FTlRTXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoKICAqIHR4cG93ZXIgc3ViYmFuZCBpbmZvLgpAQCAtMzQ1LDcgKzM0OSw3IEBACiAJdTggY2hfdG87CS8qIGNoYW5uZWwgbnVtYmVyIG9mIGhpZ2hlc3QgY2hhbm5lbCBpbiBzdWJiYW5kICovCiAJc3RydWN0IGl3bF9lZXByb21fY2FsaWJfY2hfaW5mbyBjaDE7CiAJc3RydWN0IGl3bF9lZXByb21fY2FsaWJfY2hfaW5mbyBjaDI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIAogLyoKQEAgLTM3NCw3ICszNzgsNyBAQAogCV9fbGUxNiB2b2x0YWdlOwkJLyogc2lnbmVkICovCiAJc3RydWN0IGl3bF9lZXByb21fY2FsaWJfc3ViYmFuZF9pbmZvCiAJCWJhbmRfaW5mb1tFRVBST01fVFhfUE9XRVJfQkFORFNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAKICNkZWZpbmUgQUREUkVTU19NU0sgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKQEAgLTM5OCw2ICs0MDIsNyBAQAogI2RlZmluZSBFRVBST01fV09XTEFOX01PREUgICAgICAgICAgICAgICAgICAoMioweDQ3KQkvKiAyICBieXRlcyAqLwogI2RlZmluZSBFRVBST01fUkFESU9fQ09ORklHICAgICAgICAgICAgICAgICAoMioweDQ4KQkvKiAyICBieXRlcyAqLwogI2RlZmluZSBFRVBST01fMzk0NV9NX1ZFUlNJT04gICAgICAgICAgICAgICAoMioweDRBKQkvKiAxICBieXRlcyAqLworI2RlZmluZSBFRVBST01fTlVNX01BQ19BRERSRVNTICAgICAgICAgICAgICAoMioweDRDKQkvKiAyICBieXRlcyAqLwogCiAvKiBUaGUgZm9sbG93aW5nIG1hc2tzIGFyZSB0byBiZSBhcHBsaWVkIG9uIEVFUFJPTV9SQURJT19DT05GSUcgKi8KICNkZWZpbmUgRUVQUk9NX1JGX0NGR19UWVBFX01TSyh4KSAgICh4ICYgMHgzKSAgICAgICAgIC8qIGJpdHMgMC0xICAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZoLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1maC5oCmluZGV4IDExM2MzNjYuLjU1YjgzNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZoLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZmguaApAQCAtMzk4LDEyICszOTgsNyBAQAogICovCiAjZGVmaW5lIEZIX1RTU1JfVFhfRVJST1JfUkVHCQkoRkhfVFNTUl9MT1dFUl9CT1VORCArIDB4MDE4KQogCi0jZGVmaW5lIEZIX1RTU1JfVFhfU1RBVFVTX1JFR19CSVRfQlVGU19FTVBUWShfY2hubCkgKCgxIDw8IChfY2hubCkpIDw8IDI0KQotI2RlZmluZSBGSF9UU1NSX1RYX1NUQVRVU19SRUdfQklUX05PX1BFTkRfUkVRKF9jaG5sKSAoKDEgPDwgKF9jaG5sKSkgPDwgMTYpCi0KLSNkZWZpbmUgRkhfVFNTUl9UWF9TVEFUVVNfUkVHX01TS19DSE5MX0lETEUoX2NobmwpIFwKLQkoRkhfVFNTUl9UWF9TVEFUVVNfUkVHX0JJVF9CVUZTX0VNUFRZKF9jaG5sKSB8IFwKLQlGSF9UU1NSX1RYX1NUQVRVU19SRUdfQklUX05PX1BFTkRfUkVRKF9jaG5sKSkKKyNkZWZpbmUgRkhfVFNTUl9UWF9TVEFUVVNfUkVHX01TS19DSE5MX0lETEUoX2NobmwpICgoMSA8PCAoX2NobmwpKSA8PCAxNikKIAogLyogVHggc2VydmljZSBjaGFubmVscyAqLwogI2RlZmluZSBGSF9TUlZDX0NITkwJCSg5KQpAQCAtNDQ5LDcgKzQ0NCw3IEBACiAJX19sZTE2IGZpbmlzaGVkX3JiX251bTsKIAlfX2xlMTYgZmluaXNoZWRfZnJfbmFtOwogCV9fbGUzMiBfX3VudXNlZDsgLyogMzk0NSBvbmx5ICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIAogI2RlZmluZSBURkRfUVVFVUVfU0laRV9NQVggICAgICAoMjU2KQpAQCAtNDc1LDcgKzQ3MCw3IEBACiBzdHJ1Y3QgaXdsX3RmZF90YiB7CiAJX19sZTMyIGxvOwogCV9fbGUxNiBoaV9uX2xlbjsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKioKICAqIHN0cnVjdCBpd2xfdGZkCkBAIC01MTAsNyArNTA1LDcgQEAKIAl1OCBudW1fdGJzOwogCXN0cnVjdCBpd2xfdGZkX3RiIHRic1tJV0xfTlVNX09GX1RCU107CiAJX19sZTMyIF9fcGFkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBLZWVwIFdhcm0gU2l6ZSAqLwogI2RlZmluZSBJV0xfS1dfU0laRSAweDEwMDAJLyogNGsgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYwppbmRleCA1MWY4OWU3Li4yNThkMDU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jCkBAIC00OSw2ICs0OSw3IEBACiAJCUlXTF9DTUQoUkVQTFlfQUREX1NUQSk7CiAJCUlXTF9DTUQoUkVQTFlfUkVNT1ZFX1NUQSk7CiAJCUlXTF9DTUQoUkVQTFlfUkVNT1ZFX0FMTF9TVEEpOworCQlJV0xfQ01EKFJFUExZX1RYRklGT19GTFVTSCk7CiAJCUlXTF9DTUQoUkVQTFlfV0VQS0VZKTsKIAkJSVdMX0NNRChSRVBMWV8zOTQ1X1JYKTsKIAkJSVdMX0NNRChSRVBMWV9UWCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oZWxwZXJzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oZWxwZXJzLmgKaW5kZXggM2ZmNmI5ZC4uNjIxYWJlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGVscGVycy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhlbHBlcnMuaApAQCAtOTIsNiArOTIsMTEgQEAKIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9hbGxvY19md19kZXNjKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LAogCQkJCSAgICBzdHJ1Y3QgZndfZGVzYyAqZGVzYykKIHsKKwlpZiAoIWRlc2MtPmxlbikgeworCQlkZXNjLT52X2FkZHIgPSBOVUxMOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlkZXNjLT52X2FkZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBjaV9kZXYtPmRldiwgZGVzYy0+bGVuLAogCQkJCQkgICZkZXNjLT5wX2FkZHIsIEdGUF9LRVJORUwpOwogCXJldHVybiAoZGVzYy0+dl9hZGRyICE9IE5VTEwpID8gMCA6IC1FTk9NRU07CkBAIC0xNzAsNCArMTc1LDI2IEBACiAJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVF9NQVNLLCBwcml2LT5pbnRhX21hc2spOwogfQogCisvKioKKyAqIGl3bF9iZWFjb25fdGltZV9tYXNrX2xvdyAtIG1hc2sgb2YgbG93ZXIgMzIgYml0IG9mIGJlYWNvbiB0aW1lCisgKiBAcHJpdiAtLSBwb2ludGVyIHRvIGl3bF9wcml2IGRhdGEgc3RydWN0dXJlCisgKiBAdHNmX2JpdHMgLS0gbnVtYmVyIG9mIGJpdHMgbmVlZCB0byBzaGlmdCBmb3IgbWFza2luZykKKyAqLworc3RhdGljIGlubGluZSB1MzIgaXdsX2JlYWNvbl90aW1lX21hc2tfbG93KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkJICAgdTE2IHRzZl9iaXRzKQoreworCXJldHVybiAoMSA8PCB0c2ZfYml0cykgLSAxOworfQorCisvKioKKyAqIGl3bF9iZWFjb25fdGltZV9tYXNrX2hpZ2ggLSBtYXNrIG9mIGhpZ2hlciAzMiBiaXQgb2YgYmVhY29uIHRpbWUKKyAqIEBwcml2IC0tIHBvaW50ZXIgdG8gaXdsX3ByaXYgZGF0YSBzdHJ1Y3R1cmUKKyAqIEB0c2ZfYml0cyAtLSBudW1iZXIgb2YgYml0cyBuZWVkIHRvIHNoaWZ0IGZvciBtYXNraW5nKQorICovCitzdGF0aWMgaW5saW5lIHUzMiBpd2xfYmVhY29uX3RpbWVfbWFza19oaWdoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkJICAgIHUxNiB0c2ZfYml0cykKK3sKKwlyZXR1cm4gKCgxIDw8ICgzMiAtIHRzZl9iaXRzKSkgLSAxKSA8PCB0c2ZfYml0czsKK30KKwogI2VuZGlmCQkJCS8qIF9faXdsX2hlbHBlcnNfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYwppbmRleCAwYTVkN2NmLi43OTc3M2UzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMKQEAgLTE3NSw3ICsxNzUsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZyeHEtPnJ4X3VzZWQpOwogCiAJLyogQWxsb2MgdGhlIGNpcmN1bGFyIGJ1ZmZlciBvZiBSZWFkIEJ1ZmZlciBEZXNjcmlwdG9ycyAoUkJEcykgKi8KLQlyeHEtPmJkID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgNCAqIFJYX1FVRVVFX1NJWkUsICZyeHEtPmRtYV9hZGRyLAorCXJ4cS0+YmQgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCA0ICogUlhfUVVFVUVfU0laRSwgJnJ4cS0+YmRfZG1hLAogCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyeHEtPmJkKQogCQlnb3RvIGVycl9iZDsKQEAgLTE5OSwzMiArMTk5LDEyIEBACiAKIGVycl9yYjoKIAlkbWFfZnJlZV9jb2hlcmVudCgmcHJpdi0+cGNpX2Rldi0+ZGV2LCA0ICogUlhfUVVFVUVfU0laRSwgcnhxLT5iZCwKLQkJCSAgcnhxLT5kbWFfYWRkcik7CisJCQkgIHJ4cS0+YmRfZG1hKTsKIGVycl9iZDoKIAlyZXR1cm4gLUVOT01FTTsKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3J4X3F1ZXVlX2FsbG9jKTsKIAotdm9pZCBpd2xfcnhfbWlzc2VkX2JlYWNvbl9ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCi0KLXsKLQlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gcnhiX2FkZHIocnhiKTsKLQlzdHJ1Y3QgaXdsX21pc3NlZF9iZWFjb25fbm90aWYgKm1pc3NlZF9iZWFjb247Ci0KLQltaXNzZWRfYmVhY29uID0gJnBrdC0+dS5taXNzZWRfYmVhY29uOwotCWlmIChsZTMyX3RvX2NwdShtaXNzZWRfYmVhY29uLT5jb25zZWN1dGl2ZV9taXNzZWRfYmVhY29ucykgPgotCSAgICBwcml2LT5taXNzZWRfYmVhY29uX3RocmVzaG9sZCkgewotCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm1pc3NlZCBiY24gY25zcSAlZCB0b3RsICVkIHJjZCAlZCBleHBjdGQgJWRcbiIsCi0JCSAgICBsZTMyX3RvX2NwdShtaXNzZWRfYmVhY29uLT5jb25zZWN1dGl2ZV9taXNzZWRfYmVhY29ucyksCi0JCSAgICBsZTMyX3RvX2NwdShtaXNzZWRfYmVhY29uLT50b3RhbF9taXNzZWRfYmVjb25zKSwKLQkJICAgIGxlMzJfdG9fY3B1KG1pc3NlZF9iZWFjb24tPm51bV9yZWN2ZF9iZWFjb25zKSwKLQkJICAgIGxlMzJfdG9fY3B1KG1pc3NlZF9iZWFjb24tPm51bV9leHBlY3RlZF9iZWFjb25zKSk7Ci0JCWlmICghdGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJCWl3bF9pbml0X3NlbnNpdGl2aXR5KHByaXYpOwotCX0KLX0KLUVYUE9SVF9TWU1CT0woaXdsX3J4X21pc3NlZF9iZWFjb25fbm90aWYpOwogCiB2b2lkIGl3bF9yeF9zcGVjdHJ1bV9tZWFzdXJlX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkJICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKQEAgLTI0MywxNjEgKzIyMyw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9yeF9zcGVjdHJ1bV9tZWFzdXJlX25vdGlmKTsKIAotCi0KLS8qIENhbGN1bGF0ZSBub2lzZSBsZXZlbCwgYmFzZWQgb24gbWVhc3VyZW1lbnRzIGR1cmluZyBuZXR3b3JrIHNpbGVuY2UganVzdAotICogICBiZWZvcmUgYXJyaXZpbmcgYmVhY29uLiAgVGhpcyBtZWFzdXJlbWVudCBjYW4gYmUgZG9uZSBvbmx5IGlmIHdlIGtub3cKLSAqICAgZXhhY3RseSB3aGVuIHRvIGV4cGVjdCBiZWFjb25zLCB0aGVyZWZvcmUgb25seSB3aGVuIHdlJ3JlIGFzc29jaWF0ZWQuICovCi1zdGF0aWMgdm9pZCBpd2xfcnhfY2FsY19ub2lzZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0Jc3RydWN0IHN0YXRpc3RpY3Nfcnhfbm9uX3BoeSAqcnhfaW5mbwotCQkJCT0gJihwcml2LT5zdGF0aXN0aWNzLnJ4LmdlbmVyYWwpOwotCWludCBudW1fYWN0aXZlX3J4ID0gMDsKLQlpbnQgdG90YWxfc2lsZW5jZSA9IDA7Ci0JaW50IGJjbl9zaWxlbmNlX2EgPQotCQlsZTMyX3RvX2NwdShyeF9pbmZvLT5iZWFjb25fc2lsZW5jZV9yc3NpX2EpICYgSU5fQkFORF9GSUxURVI7Ci0JaW50IGJjbl9zaWxlbmNlX2IgPQotCQlsZTMyX3RvX2NwdShyeF9pbmZvLT5iZWFjb25fc2lsZW5jZV9yc3NpX2IpICYgSU5fQkFORF9GSUxURVI7Ci0JaW50IGJjbl9zaWxlbmNlX2MgPQotCQlsZTMyX3RvX2NwdShyeF9pbmZvLT5iZWFjb25fc2lsZW5jZV9yc3NpX2MpICYgSU5fQkFORF9GSUxURVI7Ci0JaW50IGxhc3Rfcnhfbm9pc2U7Ci0KLQlpZiAoYmNuX3NpbGVuY2VfYSkgewotCQl0b3RhbF9zaWxlbmNlICs9IGJjbl9zaWxlbmNlX2E7Ci0JCW51bV9hY3RpdmVfcngrKzsKLQl9Ci0JaWYgKGJjbl9zaWxlbmNlX2IpIHsKLQkJdG90YWxfc2lsZW5jZSArPSBiY25fc2lsZW5jZV9iOwotCQludW1fYWN0aXZlX3J4Kys7Ci0JfQotCWlmIChiY25fc2lsZW5jZV9jKSB7Ci0JCXRvdGFsX3NpbGVuY2UgKz0gYmNuX3NpbGVuY2VfYzsKLQkJbnVtX2FjdGl2ZV9yeCsrOwotCX0KLQotCS8qIEF2ZXJhZ2UgYW1vbmcgYWN0aXZlIGFudGVubmFzICovCi0JaWYgKG51bV9hY3RpdmVfcngpCi0JCWxhc3Rfcnhfbm9pc2UgPSAodG90YWxfc2lsZW5jZSAvIG51bV9hY3RpdmVfcngpIC0gMTA3OwotCWVsc2UKLQkJbGFzdF9yeF9ub2lzZSA9IElXTF9OT0lTRV9NRUFTX05PVF9BVkFJTEFCTEU7Ci0KLQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgImluYmFuZCBzaWxlbmNlIGEgJXUsIGIgJXUsIGMgJXUsIGRCbSAlZFxuIiwKLQkJCWJjbl9zaWxlbmNlX2EsIGJjbl9zaWxlbmNlX2IsIGJjbl9zaWxlbmNlX2MsCi0JCQlsYXN0X3J4X25vaXNlKTsKLX0KLQotI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi0vKgotICogIGJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uIG9mIGFsbCBzdGF0aXN0aWNzIGNvdW50ZXIgYXJlIGluIERXT1JECi0gKiAgRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgZm9yIGRlYnVnZ2luZywgZG8gbm90IGRlYWwgd2l0aAotICogIHRoZSBjYXNlIG9mIGNvdW50ZXJzIHJvbGwtb3Zlci4KLSAqLwotc3RhdGljIHZvaWQgaXdsX2FjY3VtdWxhdGl2ZV9zdGF0aXN0aWNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkJX19sZTMyICpzdGF0cykKLXsKLQlpbnQgaTsKLQlfX2xlMzIgKnByZXZfc3RhdHM7Ci0JdTMyICphY2N1bV9zdGF0czsKLQl1MzIgKmRlbHRhLCAqbWF4X2RlbHRhOwotCi0JcHJldl9zdGF0cyA9IChfX2xlMzIgKikmcHJpdi0+c3RhdGlzdGljczsKLQlhY2N1bV9zdGF0cyA9ICh1MzIgKikmcHJpdi0+YWNjdW1fc3RhdGlzdGljczsKLQlkZWx0YSA9ICh1MzIgKikmcHJpdi0+ZGVsdGFfc3RhdGlzdGljczsKLQltYXhfZGVsdGEgPSAodTMyICopJnByaXYtPm1heF9kZWx0YTsKLQotCWZvciAoaSA9IHNpemVvZihfX2xlMzIpOyBpIDwgc2l6ZW9mKHN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcyk7Ci0JICAgICBpICs9IHNpemVvZihfX2xlMzIpLCBzdGF0cysrLCBwcmV2X3N0YXRzKyssIGRlbHRhKyssCi0JICAgICBtYXhfZGVsdGErKywgYWNjdW1fc3RhdHMrKykgewotCQlpZiAobGUzMl90b19jcHUoKnN0YXRzKSA+IGxlMzJfdG9fY3B1KCpwcmV2X3N0YXRzKSkgewotCQkJKmRlbHRhID0gKGxlMzJfdG9fY3B1KCpzdGF0cykgLQotCQkJCWxlMzJfdG9fY3B1KCpwcmV2X3N0YXRzKSk7Ci0JCQkqYWNjdW1fc3RhdHMgKz0gKmRlbHRhOwotCQkJaWYgKCpkZWx0YSA+ICptYXhfZGVsdGEpCi0JCQkJKm1heF9kZWx0YSA9ICpkZWx0YTsKLQkJfQotCX0KLQotCS8qIHJlc2V0IGFjY3VtdWxhdGl2ZSBzdGF0aXN0aWNzIGZvciAibm8tY291bnRlciIgdHlwZSBzdGF0aXN0aWNzICovCi0JcHJpdi0+YWNjdW1fc3RhdGlzdGljcy5nZW5lcmFsLnRlbXBlcmF0dXJlID0KLQkJcHJpdi0+c3RhdGlzdGljcy5nZW5lcmFsLnRlbXBlcmF0dXJlOwotCXByaXYtPmFjY3VtX3N0YXRpc3RpY3MuZ2VuZXJhbC50ZW1wZXJhdHVyZV9tID0KLQkJcHJpdi0+c3RhdGlzdGljcy5nZW5lcmFsLnRlbXBlcmF0dXJlX207Ci0JcHJpdi0+YWNjdW1fc3RhdGlzdGljcy5nZW5lcmFsLnR0bF90aW1lc3RhbXAgPQotCQlwcml2LT5zdGF0aXN0aWNzLmdlbmVyYWwudHRsX3RpbWVzdGFtcDsKLQlwcml2LT5hY2N1bV9zdGF0aXN0aWNzLnR4LnR4X3Bvd2VyLmFudF9hID0KLQkJcHJpdi0+c3RhdGlzdGljcy50eC50eF9wb3dlci5hbnRfYTsKLQlwcml2LT5hY2N1bV9zdGF0aXN0aWNzLnR4LnR4X3Bvd2VyLmFudF9iID0KLQkJcHJpdi0+c3RhdGlzdGljcy50eC50eF9wb3dlci5hbnRfYjsKLQlwcml2LT5hY2N1bV9zdGF0aXN0aWNzLnR4LnR4X3Bvd2VyLmFudF9jID0KLQkJcHJpdi0+c3RhdGlzdGljcy50eC50eF9wb3dlci5hbnRfYzsKLX0KLSNlbmRpZgotCi0jZGVmaW5lIFJFR19SRUNBTElCX1BFUklPRCAoNjApCi0KLS8qKgotICogaXdsX2dvb2RfcGxjcF9oZWFsdGggLSBjaGVja3MgZm9yIHBsY3AgZXJyb3IuCi0gKgotICogV2hlbiB0aGUgcGxjcCBlcnJvciBpcyBleGNlZWRpbmcgdGhlIHRocmVzaG9sZHMsIHJlc2V0IHRoZSByYWRpbwotICogdG8gaW1wcm92ZSB0aGUgdGhyb3VnaHB1dC4KLSAqLwotYm9vbCBpd2xfZ29vZF9wbGNwX2hlYWx0aChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCkKLXsKLQlib29sIHJjID0gdHJ1ZTsKLQlpbnQgY29tYmluZWRfcGxjcF9kZWx0YTsKLQl1bnNpZ25lZCBpbnQgcGxjcF9tc2VjOwotCXVuc2lnbmVkIGxvbmcgcGxjcF9yZWNlaXZlZF9qaWZmaWVzOwotCi0JLyoKLQkgKiBjaGVjayBmb3IgcGxjcF9lcnIgYW5kIHRyaWdnZXIgcmFkaW8gcmVzZXQgaWYgaXQgZXhjZWVkcwotCSAqIHRoZSBwbGNwIGVycm9yIHRocmVzaG9sZCBwbGNwX2RlbHRhLgotCSAqLwotCXBsY3BfcmVjZWl2ZWRfamlmZmllcyA9IGppZmZpZXM7Ci0JcGxjcF9tc2VjID0gamlmZmllc190b19tc2VjcygobG9uZykgcGxjcF9yZWNlaXZlZF9qaWZmaWVzIC0KLQkJCQkJKGxvbmcpIHByaXYtPnBsY3BfamlmZmllcyk7Ci0JcHJpdi0+cGxjcF9qaWZmaWVzID0gcGxjcF9yZWNlaXZlZF9qaWZmaWVzOwotCS8qCi0JICogY2hlY2sgdG8gbWFrZSBzdXJlIHBsY3BfbXNlYyBpcyBub3QgMCB0byBwcmV2ZW50IGRpdmlzaW9uCi0JICogYnkgemVyby4KLQkgKi8KLQlpZiAocGxjcF9tc2VjKSB7Ci0JCWNvbWJpbmVkX3BsY3BfZGVsdGEgPQotCQkJKGxlMzJfdG9fY3B1KHBrdC0+dS5zdGF0cy5yeC5vZmRtLnBsY3BfZXJyKSAtCi0JCQlsZTMyX3RvX2NwdShwcml2LT5zdGF0aXN0aWNzLnJ4Lm9mZG0ucGxjcF9lcnIpKSArCi0JCQkobGUzMl90b19jcHUocGt0LT51LnN0YXRzLnJ4Lm9mZG1faHQucGxjcF9lcnIpIC0KLQkJCWxlMzJfdG9fY3B1KHByaXYtPnN0YXRpc3RpY3Mucngub2ZkbV9odC5wbGNwX2VycikpOwotCi0JCWlmICgoY29tYmluZWRfcGxjcF9kZWx0YSA+IDApICYmCi0JCSAgICAoKGNvbWJpbmVkX3BsY3BfZGVsdGEgKiAxMDApIC8gcGxjcF9tc2VjKSA+Ci0JCQlwcml2LT5jZmctPnBsY3BfZGVsdGFfdGhyZXNob2xkKSB7Ci0JCQkvKgotCQkJICogaWYgcGxjcF9lcnIgZXhjZWVkIHRoZSB0aHJlc2hvbGQsCi0JCQkgKiB0aGUgZm9sbG93aW5nIGRhdGEgaXMgcHJpbnRlZCBpbiBjc3YgZm9ybWF0OgotCQkJICogICAgVGV4dDogcGxjcF9lcnIgZXhjZWVkZWQgJWQsCi0JCQkgKiAgICBSZWNlaXZlZCBvZmRtLnBsY3BfZXJyLAotCQkJICogICAgQ3VycmVudCBvZmRtLnBsY3BfZXJyLAotCQkJICogICAgUmVjZWl2ZWQgb2ZkbV9odC5wbGNwX2VyciwKLQkJCSAqICAgIEN1cnJlbnQgb2ZkbV9odC5wbGNwX2VyciwKLQkJCSAqICAgIGNvbWJpbmVkX3BsY3BfZGVsdGEsCi0JCQkgKiAgICBwbGNwX21zZWMKLQkJCSAqLwotCQkJSVdMX0RFQlVHX1JBRElPKHByaXYsICJwbGNwX2VyciBleGNlZWRlZCAldSwgIgotCQkJCSIldSwgJXUsICV1LCAldSwgJWQsICV1IG1TZWNzXG4iLAotCQkJCXByaXYtPmNmZy0+cGxjcF9kZWx0YV90aHJlc2hvbGQsCi0JCQkJbGUzMl90b19jcHUocGt0LT51LnN0YXRzLnJ4Lm9mZG0ucGxjcF9lcnIpLAotCQkJCWxlMzJfdG9fY3B1KHByaXYtPnN0YXRpc3RpY3Mucngub2ZkbS5wbGNwX2VyciksCi0JCQkJbGUzMl90b19jcHUocGt0LT51LnN0YXRzLnJ4Lm9mZG1faHQucGxjcF9lcnIpLAotCQkJCWxlMzJfdG9fY3B1KAotCQkJCSAgcHJpdi0+c3RhdGlzdGljcy5yeC5vZmRtX2h0LnBsY3BfZXJyKSwKLQkJCQljb21iaW5lZF9wbGNwX2RlbHRhLCBwbGNwX21zZWMpOwotCQkJcmMgPSBmYWxzZTsKLQkJfQotCX0KLQlyZXR1cm4gcmM7Ci19Ci1FWFBPUlRfU1lNQk9MKGl3bF9nb29kX3BsY3BfaGVhbHRoKTsKLQogdm9pZCBpd2xfcmVjb3Zlcl9mcm9tX3N0YXRpc3RpY3Moc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QpCiB7CkBAIC00MTMsNyArMjM4LDcgQEAKIAkJCQkgKi8KIAkJCQlJV0xfRVJSKHByaXYsICJsb3cgYWNrIGNvdW50IGRldGVjdGVkLCAiCiAJCQkJCSJyZXN0YXJ0IGZpcm13YXJlXG4iKTsKLQkJCQlpZiAoIWl3bF9mb3JjZV9yZXNldChwcml2LCBJV0xfRldfUkVTRVQpKQorCQkJCWlmICghaXdsX2ZvcmNlX3Jlc2V0KHByaXYsIElXTF9GV19SRVNFVCwgZmFsc2UpKQogCQkJCQlyZXR1cm47CiAJCQl9CiAJCX0KQEAgLTQyNCw3NiArMjQ5LDEzIEBACiAJCQkJICogaGlnaCBwbGNwIGVycm9yIGRldGVjdGVkCiAJCQkJICogcmVzZXQgUmFkaW8KIAkJCQkgKi8KLQkJCQlpd2xfZm9yY2VfcmVzZXQocHJpdiwgSVdMX1JGX1JFU0VUKTsKKwkJCQlpd2xfZm9yY2VfcmVzZXQocHJpdiwgSVdMX1JGX1JFU0VULCBmYWxzZSk7CiAJCQl9CiAJCX0KIAl9CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9yZWNvdmVyX2Zyb21fc3RhdGlzdGljcyk7CiAKLXZvaWQgaXdsX3J4X3N0YXRpc3RpY3Moc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0JaW50IGNoYW5nZTsKLQlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gcnhiX2FkZHIocnhiKTsKLQotCi0JSVdMX0RFQlVHX1JYKHByaXYsICJTdGF0aXN0aWNzIG5vdGlmaWNhdGlvbiByZWNlaXZlZCAoJWQgdnMgJWQpLlxuIiwKLQkJICAgICAoaW50KXNpemVvZihwcml2LT5zdGF0aXN0aWNzKSwKLQkJICAgICBsZTMyX3RvX2NwdShwa3QtPmxlbl9uX2ZsYWdzKSAmIEZIX1JTQ1NSX0ZSQU1FX1NJWkVfTVNLKTsKLQotCWNoYW5nZSA9ICgocHJpdi0+c3RhdGlzdGljcy5nZW5lcmFsLnRlbXBlcmF0dXJlICE9Ci0JCSAgIHBrdC0+dS5zdGF0cy5nZW5lcmFsLnRlbXBlcmF0dXJlKSB8fAotCQkgICgocHJpdi0+c3RhdGlzdGljcy5mbGFnICYKLQkJICAgIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0hUNDBfTU9ERV9NU0spICE9Ci0JCSAgIChwa3QtPnUuc3RhdHMuZmxhZyAmIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0hUNDBfTU9ERV9NU0spKSk7Ci0KLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotCWl3bF9hY2N1bXVsYXRpdmVfc3RhdGlzdGljcyhwcml2LCAoX19sZTMyICopJnBrdC0+dS5zdGF0cyk7Ci0jZW5kaWYKLQlpd2xfcmVjb3Zlcl9mcm9tX3N0YXRpc3RpY3MocHJpdiwgcGt0KTsKLQotCW1lbWNweSgmcHJpdi0+c3RhdGlzdGljcywgJnBrdC0+dS5zdGF0cywgc2l6ZW9mKHByaXYtPnN0YXRpc3RpY3MpKTsKLQotCXNldF9iaXQoU1RBVFVTX1NUQVRJU1RJQ1MsICZwcml2LT5zdGF0dXMpOwotCi0JLyogUmVzY2hlZHVsZSB0aGUgc3RhdGlzdGljcyB0aW1lciB0byBvY2N1ciBpbgotCSAqIFJFR19SRUNBTElCX1BFUklPRCBzZWNvbmRzIHRvIGVuc3VyZSB3ZSBnZXQgYQotCSAqIHRoZXJtYWwgdXBkYXRlIGV2ZW4gaWYgdGhlIHVDb2RlIGRvZXNuJ3QgZ2l2ZQotCSAqIHVzIG9uZSAqLwotCW1vZF90aW1lcigmcHJpdi0+c3RhdGlzdGljc19wZXJpb2RpYywgamlmZmllcyArCi0JCSAgbXNlY3NfdG9famlmZmllcyhSRUdfUkVDQUxJQl9QRVJJT0QgKiAxMDAwKSk7Ci0KLQlpZiAodW5saWtlbHkoIXRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpICYmCi0JICAgIChwa3QtPmhkci5jbWQgPT0gU1RBVElTVElDU19OT1RJRklDQVRJT04pKSB7Ci0JCWl3bF9yeF9jYWxjX25vaXNlKHByaXYpOwotCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJ1bl90aW1lX2NhbGliX3dvcmspOwotCX0KLQlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dGVtcF9vcHMudGVtcGVyYXR1cmUgJiYgY2hhbmdlKQotCQlwcml2LT5jZmctPm9wcy0+bGliLT50ZW1wX29wcy50ZW1wZXJhdHVyZShwcml2KTsKLX0KLUVYUE9SVF9TWU1CT0woaXdsX3J4X3N0YXRpc3RpY3MpOwotCi12b2lkIGl3bF9yZXBseV9zdGF0aXN0aWNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCSAgICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSByeGJfYWRkcihyeGIpOwotCi0JaWYgKGxlMzJfdG9fY3B1KHBrdC0+dS5zdGF0cy5mbGFnKSAmIFVDT0RFX1NUQVRJU1RJQ1NfQ0xFQVJfTVNLKSB7Ci0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLQkJbWVtc2V0KCZwcml2LT5hY2N1bV9zdGF0aXN0aWNzLCAwLAotCQkJc2l6ZW9mKHN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcykpOwotCQltZW1zZXQoJnByaXYtPmRlbHRhX3N0YXRpc3RpY3MsIDAsCi0JCQlzaXplb2Yoc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzKSk7Ci0JCW1lbXNldCgmcHJpdi0+bWF4X2RlbHRhLCAwLAotCQkJc2l6ZW9mKHN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcykpOwotI2VuZGlmCi0JCUlXTF9ERUJVR19SWChwcml2LCAiU3RhdGlzdGljcyBoYXZlIGJlZW4gY2xlYXJlZFxuIik7Ci0JfQotCWl3bF9yeF9zdGF0aXN0aWNzKHByaXYsIHJ4Yik7Ci19Ci1FWFBPUlRfU1lNQk9MKGl3bF9yZXBseV9zdGF0aXN0aWNzKTsKLQogLyoKICAqIHJldHVybnMgbm9uLXplcm8gaWYgcGFja2V0IHNob3VsZCBiZSBkcm9wcGVkCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNjYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNjYW4uYwppbmRleCAzODZjNWY5Li5iMGM2YjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jCkBAIC0zMzMsNyArMzMzLDggQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSB7CisJaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykgJiYKKwkgICAgIXByaXYtPmlzX2ludGVybmFsX3Nob3J0X3NjYW4pIHsKIAkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlNjYW4gYWxyZWFkeSBpbiBwcm9ncmVzcy5cbiIpOwogCQlyZXQgPSAtRUFHQUlOOwogCQlnb3RvIG91dF91bmxvY2s7CkBAIC0zNDgsOCArMzQ5LDE2IEBACiAJLyogbWFjODAyMTEgd2lsbCBvbmx5IGFzayBmb3Igb25lIGJhbmQgYXQgYSB0aW1lICovCiAJcHJpdi0+c2Nhbl9iYW5kID0gcmVxLT5jaGFubmVsc1swXS0+YmFuZDsKIAlwcml2LT5zY2FuX3JlcXVlc3QgPSByZXE7CisJcHJpdi0+c2Nhbl92aWYgPSB2aWY7CiAKLQlyZXQgPSBpd2xfc2Nhbl9pbml0aWF0ZShwcml2LCB2aWYpOworCS8qCisJICogSWYgYW4gaW50ZXJuYWwgc2NhbiBpcyBpbiBwcm9ncmVzcywganVzdCBzZXQKKwkgKiB1cCB0aGUgc2Nhbl9yZXF1ZXN0IGFzIHBlciBhYm92ZS4KKwkgKi8KKwlpZiAocHJpdi0+aXNfaW50ZXJuYWxfc2hvcnRfc2NhbikKKwkJcmV0ID0gMDsKKwllbHNlCisJCXJldCA9IGl3bF9zY2FuX2luaXRpYXRlKHByaXYsIHZpZik7CiAKIAlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIApAQCAtNDIwLDExICs0MjksMTAgQEAKIAkJcmV0dXJuOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpIHx8Ci0JICAgIHRlc3RfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfU0NBTihwcml2LCAiU2NhbiBjb21wbGV0aW9uIHdhdGNoZG9nIHJlc2V0dGluZyAiCi0JCQkiYWRhcHRlciAoJWRtcylcbiIsCi0JCQlqaWZmaWVzX3RvX21zZWNzKElXTF9TQ0FOX0NIRUNLX1dBVENIRE9HKSk7CisJaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykgJiYKKwkgICAgIXRlc3RfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKSkgeworCQlJV0xfREVCVUdfU0NBTihwcml2LCAiU2NhbiBjb21wbGV0aW9uIHdhdGNoZG9nICglZG1zKVxuIiwKKwkJCSAgICAgICBqaWZmaWVzX3RvX21zZWNzKElXTF9TQ0FOX0NIRUNLX1dBVENIRE9HKSk7CiAKIAkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKIAkJCWl3bF9zZW5kX3NjYW5fYWJvcnQocHJpdik7CkBAIC00MzgsNyArNDQ2LDcgQEAKICAqLwogCiB1MTYgaXdsX2ZpbGxfcHJvYmVfcmVxKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9tZ210ICpmcmFtZSwKLQkJICAgICAgIGNvbnN0IHU4ICppZXMsIGludCBpZV9sZW4sIGludCBsZWZ0KQorCQkgICAgICAgY29uc3QgdTggKnRhLCBjb25zdCB1OCAqaWVzLCBpbnQgaWVfbGVuLCBpbnQgbGVmdCkKIHsKIAlpbnQgbGVuID0gMDsKIAl1OCAqcG9zID0gTlVMTDsKQEAgLTQ1MSw3ICs0NTksNyBAQAogCiAJZnJhbWUtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVRKTsKIAltZW1jcHkoZnJhbWUtPmRhLCBpd2xfYmNhc3RfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShmcmFtZS0+c2EsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KGZyYW1lLT5zYSwgdGEsIEVUSF9BTEVOKTsKIAltZW1jcHkoZnJhbWUtPmJzc2lkLCBpd2xfYmNhc3RfYWRkciwgRVRIX0FMRU4pOwogCWZyYW1lLT5zZXFfY3RybCA9IDA7CiAKQEAgLTQ4OSwxMiArNDk3LDExIEBACiAJICAgICF0ZXN0X2JpdChTVEFUVVNfR0VPX0NPTkZJR1VSRUQsICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm47CiAKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5zY2FuX2NoZWNrKTsKKwogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+c2Nhbl9jaGVjayk7Ci0Jc2V0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7Ci0JaXdsX3NlbmRfc2Nhbl9hYm9ydChwcml2KTsKLQorCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cykpCisJCWl3bF9zZW5kX3NjYW5fYWJvcnQocHJpdik7CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9iZ19hYm9ydF9zY2FuKTsKQEAgLTUxNCw3ICs1MjEsMzAgQEAKIAkJcHJpdi0+aXNfaW50ZXJuYWxfc2hvcnRfc2NhbiA9IGZhbHNlOwogCQlJV0xfREVCVUdfU0NBTihwcml2LCAiaW50ZXJuYWwgc2hvcnQgc2NhbiBjb21wbGV0ZWRcbiIpOwogCQlpbnRlcm5hbCA9IHRydWU7CisJfSBlbHNlIHsKKwkJcHJpdi0+c2Nhbl9yZXF1ZXN0ID0gTlVMTDsKKwkJcHJpdi0+c2Nhbl92aWYgPSBOVUxMOwogCX0KKworCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJZ290byBvdXQ7CisKKwlpZiAoaW50ZXJuYWwgJiYgcHJpdi0+c2Nhbl9yZXF1ZXN0KQorCQlpd2xfc2Nhbl9pbml0aWF0ZShwcml2LCBwcml2LT5zY2FuX3ZpZik7CisKKwkvKiBTaW5jZSBzZXR0aW5nIHRoZSBUWFBPV0VSIG1heSBoYXZlIGJlZW4gZGVmZXJyZWQgd2hpbGUKKwkgKiBwZXJmb3JtaW5nIHRoZSBzY2FuLCBmaXJlIG9uZSBvZmYgKi8KKwlpd2xfc2V0X3R4X3Bvd2VyKHByaXYsIHByaXYtPnR4X3Bvd2VyX3VzZXJfbG10LCB0cnVlKTsKKworCS8qCisJICogU2luY2Ugc2V0dGluZyB0aGUgUlhPTiBtYXkgaGF2ZSBiZWVuIGRlZmVycmVkIHdoaWxlCisJICogcGVyZm9ybWluZyB0aGUgc2NhbiwgZmlyZSBvbmUgb2ZmIGlmIG5lZWRlZAorCSAqLworCWlmIChtZW1jbXAoJnByaXYtPmFjdGl2ZV9yeG9uLAorCQkgICAmcHJpdi0+c3RhZ2luZ19yeG9uLCBzaXplb2YocHJpdi0+c3RhZ2luZ19yeG9uKSkpCisJCWl3bGNvcmVfY29tbWl0X3J4b24ocHJpdik7CisKKyBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKIAkvKgpAQCAtNTI0LDE1ICs1NTQsNiBAQAogCSAqLwogCWlmICghaW50ZXJuYWwpCiAJCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChwcml2LT5odywgZmFsc2UpOwotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm47Ci0KLQkvKiBTaW5jZSBzZXR0aW5nIHRoZSBUWFBPV0VSIG1heSBoYXZlIGJlZW4gZGVmZXJyZWQgd2hpbGUKLQkgKiBwZXJmb3JtaW5nIHRoZSBzY2FuLCBmaXJlIG9uZSBvZmYgKi8KLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JaXdsX3NldF90eF9wb3dlcihwcml2LCBwcml2LT50eF9wb3dlcl91c2VyX2xtdCwgdHJ1ZSk7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9iZ19zY2FuX2NvbXBsZXRlZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zcGVjdHJ1bS5oCmluZGV4IGFmNmJhYmUuLmM0Y2EwYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3BlY3RydW0uaApAQCAtNDIsNyArNDIsNyBAQAogCV9fbGU2NCBzdGFydF90aW1lOwogCV9fbGUxNiBkdXJhdGlvbjsKIAl1OCBtYXA7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIGVudW0gewkJCQkvKiBpZWVlODAyMTFfbWVhc3VyZW1lbnRfcmVxdWVzdC5tb2RlICovCiAJLyogQml0IDAgaXMgcmVzZXJ2ZWQgKi8KQEAgLTYzLDEzICs2MywxMyBAQAogCXU4IGNoYW5uZWw7CiAJX19sZTY0IHN0YXJ0X3RpbWU7CiAJX19sZTE2IGR1cmF0aW9uOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCB7CiAJdTggaWQ7CiAJdTggbGVuOwogCXU4IGRhdGFbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpZWVlODAyMTFfbWVhc3VyZW1lbnRfcmVxdWVzdCB7CiAJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaWU7CkBAIC03Nyw3ICs3Nyw3IEBACiAJdTggbW9kZTsKIAl1OCB0eXBlOwogCXN0cnVjdCBpZWVlODAyMTFfbWVhc3VyZW1lbnRfcGFyYW1zIHBhcmFtc1swXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGllZWU4MDIxMV9tZWFzdXJlbWVudF9yZXBvcnQgewogCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGllOwpAQCAtODcsNiArODcsNiBAQAogCXVuaW9uIHsKIAkJc3RydWN0IGllZWU4MDIxMV9iYXNpY19yZXBvcnQgYmFzaWNbMF07CiAJfSB1OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmMKaW5kZXggYzI3YzEzZi4uOTUxMWYwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgogCiAjaW5jbHVkZSAiaXdsLWRldi5oIgogI2luY2x1ZGUgIml3bC1jb3JlLmgiCkBAIC01NCwxOCArNTUsMTkgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGl3bF9wcm9jZXNzX2FkZF9zdGFfcmVzcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgICBzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgKmFkZHN0YSwKLQkJCQkgICAgIHN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QsCi0JCQkJICAgICBib29sIHN5bmMpCitzdGF0aWMgaW50IGl3bF9wcm9jZXNzX2FkZF9zdGFfcmVzcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBpd2xfYWRkc3RhX2NtZCAqYWRkc3RhLAorCQkJCSAgICBzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0LAorCQkJCSAgICBib29sIHN5bmMpCiB7CiAJdTggc3RhX2lkID0gYWRkc3RhLT5zdGEuc3RhX2lkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IC1FSU87CiAKIAlpZiAocGt0LT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKIAkJSVdMX0VSUihwcml2LCAiQmFkIHJldHVybiBmcm9tIFJFUExZX0FERF9TVEEgKDB4JTA4WClcbiIsCiAJCQlwa3QtPmhkci5mbGFncyk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAlJV0xfREVCVUdfSU5GTyhwcml2LCAiUHJvY2Vzc2luZyByZXNwb25zZSBmb3IgYWRkaW5nIHN0YXRpb24gJXVcbiIsCkBAIC03Nyw2ICs3OSw3IEBACiAJY2FzZSBBRERfU1RBX1NVQ0NFU1NfTVNLOgogCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUkVQTFlfQUREX1NUQSBQQVNTRURcbiIpOwogCQlpd2xfc3RhX3Vjb2RlX2FjdGl2YXRlKHByaXYsIHN0YV9pZCk7CisJCXJldCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgQUREX1NUQV9OT19ST09NX0lOX1RBQkxFOgogCQlJV0xfRVJSKHByaXYsICJBZGRpbmcgc3RhdGlvbiAlZCBmYWlsZWQsIG5vIHJvb20gaW4gdGFibGUuXG4iLApAQCAtMTE0LDYgKzExNyw4IEBACiAJCSAgICAgICBTVEFfQ09OVFJPTF9NT0RJRllfTVNLID8gIk1vZGlmaWVkIiA6ICJBZGRlZCIsCiAJCSAgICAgICBhZGRzdGEtPnN0YS5hZGRyKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgaXdsX2FkZF9zdGFfY2FsbGJhY2soc3RydWN0IGl3bF9wcml2ICpwcml2LApAQCAtMTQ1LDggKzE1MCwxMCBAQAogCiAJaWYgKGZsYWdzICYgQ01EX0FTWU5DKQogCQljbWQuY2FsbGJhY2sgPSBpd2xfYWRkX3N0YV9jYWxsYmFjazsKLQllbHNlCisJZWxzZSB7CiAJCWNtZC5mbGFncyB8PSBDTURfV0FOVF9TS0I7CisJCW1pZ2h0X3NsZWVwKCk7CisJfQogCiAJY21kLmxlbiA9IHByaXYtPmNmZy0+b3BzLT51dGlscy0+YnVpbGRfYWRkc3RhX2hjbWQoc3RhLCBkYXRhKTsKIAlyZXQgPSBpd2xfc2VuZF9jbWQocHJpdiwgJmNtZCk7CkBAIC0xNTYsNyArMTYzLDcgQEAKIAogCWlmIChyZXQgPT0gMCkgewogCQlwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKiljbWQucmVwbHlfcGFnZTsKLQkJaXdsX3Byb2Nlc3NfYWRkX3N0YV9yZXNwKHByaXYsIHN0YSwgcGt0LCB0cnVlKTsKKwkJcmV0ID0gaXdsX3Byb2Nlc3NfYWRkX3N0YV9yZXNwKHByaXYsIHN0YSwgcGt0LCB0cnVlKTsKIAl9CiAJaXdsX2ZyZWVfcGFnZXMocHJpdiwgY21kLnJlcGx5X3BhZ2UpOwogCkBAIC0zMTEsMTAgKzMxOCwxMCBAQAogCQkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpodF9pbmZvLAogCQkJCSAgdTggKnN0YV9pZF9yKQogewotCXN0cnVjdCBpd2xfc3RhdGlvbl9lbnRyeSAqc3RhdGlvbjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzX3NwaW47CiAJaW50IHJldCA9IDA7CiAJdTggc3RhX2lkOworCXN0cnVjdCBpd2xfYWRkc3RhX2NtZCBzdGFfY21kOwogCiAJKnN0YV9pZF9yID0gMDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzX3NwaW4pOwpAQCAtMzQ3LDE0ICszNTQsMTUgQEAKIAl9CiAKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnVzZWQgfD0gSVdMX1NUQV9VQ09ERV9JTlBST0dSRVNTOwotCXN0YXRpb24gPSAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXTsKKwltZW1jcHkoJnN0YV9jbWQsICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YSwgc2l6ZW9mKHN0cnVjdCBpd2xfYWRkc3RhX2NtZCkpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKIAogCS8qIEFkZCBzdGF0aW9uIHRvIGRldmljZSdzIHN0YXRpb24gdGFibGUgKi8KLQlyZXQgPSBpd2xfc2VuZF9hZGRfc3RhKHByaXYsICZzdGF0aW9uLT5zdGEsIENNRF9TWU5DKTsKKwlyZXQgPSBpd2xfc2VuZF9hZGRfc3RhKHByaXYsICZzdGFfY21kLCBDTURfU1lOQyk7CiAJaWYgKHJldCkgewotCQlJV0xfRVJSKHByaXYsICJBZGRpbmcgc3RhdGlvbiAlcE0gZmFpbGVkLlxuIiwgc3RhdGlvbi0+c3RhLnN0YS5hZGRyKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKKwkJSVdMX0VSUihwcml2LCAiQWRkaW5nIHN0YXRpb24gJXBNIGZhaWxlZC5cbiIsCisJCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5zdGEuYWRkcik7CiAJCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udXNlZCAmPSB+SVdMX1NUQV9EUklWRVJfQUNUSVZFOwogCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnVzZWQgJj0gfklXTF9TVEFfVUNPREVfSU5QUk9HUkVTUzsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzX3NwaW4pOwpAQCAtNDg4LDcgKzQ5Niw3IEBACiB9CiAKIHN0YXRpYyBpbnQgaXdsX3NlbmRfcmVtb3ZlX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgIHN0cnVjdCBpd2xfc3RhdGlvbl9lbnRyeSAqc3RhdGlvbikKKwkJCQkgICBjb25zdCB1OCAqYWRkciwgaW50IHN0YV9pZCkKIHsKIAlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0OwogCWludCByZXQ7CkBAIC01MDUsNyArNTEzLDcgQEAKIAogCW1lbXNldCgmcm1fc3RhX2NtZCwgMCwgc2l6ZW9mKHJtX3N0YV9jbWQpKTsKIAlybV9zdGFfY21kLm51bV9zdGEgPSAxOwotCW1lbWNweSgmcm1fc3RhX2NtZC5hZGRyLCAmc3RhdGlvbi0+c3RhLnN0YS5hZGRyICwgRVRIX0FMRU4pOworCW1lbWNweSgmcm1fc3RhX2NtZC5hZGRyLCBhZGRyLCBFVEhfQUxFTik7CiAKIAljbWQuZmxhZ3MgfD0gQ01EX1dBTlRfU0tCOwogCkBAIC01MjUsNyArNTMzLDcgQEAKIAkJc3dpdGNoIChwa3QtPnUucmVtX3N0YS5zdGF0dXMpIHsKIAkJY2FzZSBSRU1fU1RBX1NVQ0NFU1NfTVNLOgogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKLQkJCWl3bF9zdGFfdWNvZGVfZGVhY3RpdmF0ZShwcml2LCBzdGF0aW9uLT5zdGEuc3RhLnN0YV9pZCk7CisJCQlpd2xfc3RhX3Vjb2RlX2RlYWN0aXZhdGUocHJpdiwgc3RhX2lkKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKIAkJCUlXTF9ERUJVR19BU1NPQyhwcml2LCAiUkVQTFlfUkVNT1ZFX1NUQSBQQVNTRURcbiIpOwogCQkJYnJlYWs7CkBAIC01NDYsNyArNTU0LDYgQEAKIGludCBpd2xfcmVtb3ZlX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCBzdGFfaWQsCiAJCSAgICAgICBjb25zdCB1OCAqYWRkcikKIHsKLQlzdHJ1Y3QgaXdsX3N0YXRpb25fZW50cnkgKnN0YXRpb247CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghaXdsX2lzX3JlYWR5KHByaXYpKSB7CkBAIC01OTIsMTAgKzU5OSw5IEBACiAKIAlCVUdfT04ocHJpdi0+bnVtX3N0YXRpb25zIDwgMCk7CiAKLQlzdGF0aW9uID0gJnByaXYtPnN0YXRpb25zW3N0YV9pZF07CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAotCXJldHVybiBpd2xfc2VuZF9yZW1vdmVfc3RhdGlvbihwcml2LCBzdGF0aW9uKTsKKwlyZXR1cm4gaXdsX3NlbmRfcmVtb3ZlX3N0YXRpb24ocHJpdiwgYWRkciwgc3RhX2lkKTsKIG91dF9lcnI6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTY0MywxMSArNjQ5LDEzIEBACiAgKi8KIHZvaWQgaXdsX3Jlc3RvcmVfc3RhdGlvbnMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXN0cnVjdCBpd2xfc3RhdGlvbl9lbnRyeSAqc3RhdGlvbjsKKwlzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgc3RhX2NtZDsKKwlzdHJ1Y3QgaXdsX2xpbmtfcXVhbGl0eV9jbWQgbHE7CiAJdW5zaWduZWQgbG9uZyBmbGFnc19zcGluOwogCWludCBpOwogCWJvb2wgZm91bmQgPSBmYWxzZTsKIAlpbnQgcmV0OworCWJvb2wgc2VuZF9scTsKIAogCWlmICghaXdsX2lzX3JlYWR5KHByaXYpKSB7CiAJCUlXTF9ERUJVR19JTkZPKHByaXYsICJOb3QgcmVhZHkgeWV0LCBub3QgcmVzdG9yaW5nIGFueSBzdGF0aW9ucy5cbiIpOwpAQCAtNjY5LDEzICs2NzcsMjAgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBwcml2LT5od19wYXJhbXMubWF4X3N0YXRpb25zOyBpKyspIHsKIAkJaWYgKChwcml2LT5zdGF0aW9uc1tpXS51c2VkICYgSVdMX1NUQV9VQ09ERV9JTlBST0dSRVNTKSkgeworCQkJbWVtY3B5KCZzdGFfY21kLCAmcHJpdi0+c3RhdGlvbnNbaV0uc3RhLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQpKTsKKwkJCXNlbmRfbHEgPSBmYWxzZTsKKwkJCWlmIChwcml2LT5zdGF0aW9uc1tpXS5scSkgeworCQkJCW1lbWNweSgmbHEsIHByaXYtPnN0YXRpb25zW2ldLmxxLAorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9saW5rX3F1YWxpdHlfY21kKSk7CisJCQkJc2VuZF9scSA9IHRydWU7CisJCQl9CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3Nfc3Bpbik7Ci0JCQlzdGF0aW9uID0gJnByaXYtPnN0YXRpb25zW2ldOwotCQkJcmV0ID0gaXdsX3NlbmRfYWRkX3N0YShwcml2LCAmcHJpdi0+c3RhdGlvbnNbaV0uc3RhLCBDTURfU1lOQyk7CisJCQlyZXQgPSBpd2xfc2VuZF9hZGRfc3RhKHByaXYsICZzdGFfY21kLCBDTURfU1lOQyk7CiAJCQlpZiAocmV0KSB7Ci0JCQkJSVdMX0VSUihwcml2LCAiQWRkaW5nIHN0YXRpb24gJXBNIGZhaWxlZC5cbiIsCi0JCQkJCXN0YXRpb24tPnN0YS5zdGEuYWRkcik7CiAJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKKwkJCQlJV0xfRVJSKHByaXYsICJBZGRpbmcgc3RhdGlvbiAlcE0gZmFpbGVkLlxuIiwKKwkJCQkJcHJpdi0+c3RhdGlvbnNbaV0uc3RhLnN0YS5hZGRyKTsKIAkJCQlwcml2LT5zdGF0aW9uc1tpXS51c2VkICY9IH5JV0xfU1RBX0RSSVZFUl9BQ1RJVkU7CiAJCQkJcHJpdi0+c3RhdGlvbnNbaV0udXNlZCAmPSB+SVdMX1NUQV9VQ09ERV9JTlBST0dSRVNTOwogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKQEAgLTY4NCw4ICs2OTksOCBAQAogCQkJICogUmF0ZSBzY2FsaW5nIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQsIHNlbmQKIAkJCSAqIGN1cnJlbnQgTFEgY29tbWFuZAogCQkJICovCi0JCQlpZiAoc3RhdGlvbi0+bHEpCi0JCQkJaXdsX3NlbmRfbHFfY21kKHByaXYsIHN0YXRpb24tPmxxLCBDTURfU1lOQywgdHJ1ZSk7CisJCQlpZiAoc2VuZF9scSkKKwkJCQlpd2xfc2VuZF9scV9jbWQocHJpdiwgJmxxLCBDTURfU1lOQywgdHJ1ZSk7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzX3NwaW4pOwogCQkJcHJpdi0+c3RhdGlvbnNbaV0udXNlZCAmPSB+SVdMX1NUQV9VQ09ERV9JTlBST0dSRVNTOwogCQl9CkBAIC04MjMsNyArODM4LDkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCV9fbGUxNiBrZXlfZmxhZ3MgPSAwOwotCWludCByZXQ7CisJc3RydWN0IGl3bF9hZGRzdGFfY21kIHN0YV9jbWQ7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZwcml2LT5tdXRleCk7CiAKIAlrZXljb25mLT5mbGFncyAmPSB+SUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWOwogCkBAIC04NjMsMTEgKzg4MCwxMCBAQAogCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnN0YS5tb2RpZnlfbWFzayA9IFNUQV9NT0RJRllfS0VZX01BU0s7CiAJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEubW9kZSA9IFNUQV9DT05UUk9MX01PRElGWV9NU0s7CiAKLQlyZXQgPSBpd2xfc2VuZF9hZGRfc3RhKHByaXYsICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YSwgQ01EX0FTWU5DKTsKLQorCW1lbWNweSgmc3RhX2NtZCwgJnByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLCBzaXplb2Yoc3RydWN0IGl3bF9hZGRzdGFfY21kKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIGl3bF9zZW5kX2FkZF9zdGEocHJpdiwgJnN0YV9jbWQsIENNRF9TWU5DKTsKIH0KIAogc3RhdGljIGludCBpd2xfc2V0X2NjbXBfZHluYW1pY19rZXlfaW5mbyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCkBAIC04NzYsNyArODkyLDkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCV9fbGUxNiBrZXlfZmxhZ3MgPSAwOwotCWludCByZXQ7CisJc3RydWN0IGl3bF9hZGRzdGFfY21kIHN0YV9jbWQ7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZwcml2LT5tdXRleCk7CiAKIAlrZXlfZmxhZ3MgfD0gKFNUQV9LRVlfRkxHX0NDTVAgfCBTVEFfS0VZX0ZMR19NQVBfS0VZX01TSyk7CiAJa2V5X2ZsYWdzIHw9IGNwdV90b19sZTE2KGtleWNvbmYtPmtleWlkeCA8PCBTVEFfS0VZX0ZMR19LRVlJRF9QT1MpOwpAQCAtOTExLDExICs5MjksMTAgQEAKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5zdGEubW9kaWZ5X21hc2sgPSBTVEFfTU9ESUZZX0tFWV9NQVNLOwogCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLm1vZGUgPSBTVEFfQ09OVFJPTF9NT0RJRllfTVNLOwogCi0JcmV0ID0gaXdsX3NlbmRfYWRkX3N0YShwcml2LCAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEsIENNRF9BU1lOQyk7Ci0KKwltZW1jcHkoJnN0YV9jbWQsICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YSwgc2l6ZW9mKHN0cnVjdCBpd2xfYWRkc3RhX2NtZCkpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiBpd2xfc2VuZF9hZGRfc3RhKHByaXYsICZzdGFfY21kLCBDTURfU1lOQyk7CiB9CiAKIHN0YXRpYyBpbnQgaXdsX3NldF90a2lwX2R5bmFtaWNfa2V5X2luZm8oc3RydWN0IGl3bF9wcml2ICpwcml2LApAQCAtOTcyLDI0ICs5ODksMTYgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCi0JaWYgKHN0YSkgewotCQlzdGFfaWQgPSBpd2xfc3RhX2lkKHN0YSk7Ci0KLQkJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gJXBNIG5vdCBpbml0aWFsaXNlZC5cbiIsCi0JCQkJCSAgIHN0YS0+YWRkcik7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9IGVsc2UKLQkJc3RhX2lkID0gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKLQotCiAJaWYgKGl3bF9zY2FuX2NhbmNlbChwcml2KSkgewogCQkvKiBjYW5jZWwgc2NhbiBmYWlsZWQsIGp1c3QgbGl2ZSB3LyBiYWQga2V5IGFuZCByZWx5CiAJCSAgIGJyaWVmbHkgb24gU1cgZGVjcnlwdGlvbiAqLwogCQlyZXR1cm47CiAJfQogCisJc3RhX2lkID0gaXdsX3N0YV9pZF9vcl9icm9hZGNhc3QocHJpdiwgc3RhKTsKKwlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pCisJCXJldHVybjsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCiAJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LnRraXBfcnhfdHNjX2J5dGUyID0gKHU4KSBpdjMyOwpAQCAtMTAxMyw5ICsxMDIyLDExIEBACiAJCQkJdTggc3RhX2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7CiAJdTE2IGtleV9mbGFnczsKIAl1OCBrZXlpZHg7CisJc3RydWN0IGl3bF9hZGRzdGFfY21kIHN0YV9jbWQ7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZwcml2LT5tdXRleCk7CiAKIAlwcml2LT5rZXlfbWFwcGluZ19rZXktLTsKIApAQCAtMTA2Miw5ICsxMDczLDEwIEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAJCXJldHVybiAwOwogCX0KLQlyZXQgPSAgaXdsX3NlbmRfYWRkX3N0YShwcml2LCAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEsIENNRF9BU1lOQyk7CisJbWVtY3B5KCZzdGFfY21kLCAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEsIHNpemVvZihzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQpKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQ7CisKKwlyZXR1cm4gaXdsX3NlbmRfYWRkX3N0YShwcml2LCAmc3RhX2NtZCwgQ01EX1NZTkMpOwogfQogRVhQT1JUX1NZTUJPTChpd2xfcmVtb3ZlX2R5bmFtaWNfa2V5KTsKIApAQCAtMTA3Myw2ICsxMDg1LDggQEAKIHsKIAlpbnQgcmV0OwogCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmcHJpdi0+bXV0ZXgpOworCiAJcHJpdi0+a2V5X21hcHBpbmdfa2V5Kys7CiAJa2V5Y29uZi0+aHdfa2V5X2lkeCA9IEhXX0tFWV9EWU5BTUlDOwogCkBAIC0xMjQ1LDYgKzEyNTksMzYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGl3bF9hbGxvY19iY2FzdF9zdGF0aW9uKTsKIAorLyoqCisgKiBpd2xfdXBkYXRlX2JjYXN0X3N0YXRpb24gLSB1cGRhdGUgYnJvYWRjYXN0IHN0YXRpb24ncyBMUSBjb21tYW5kCisgKgorICogT25seSB1c2VkIGJ5IGl3bGFnbi4gUGxhY2VkIGhlcmUgdG8gaGF2ZSBhbGwgYmNhc3Qgc3RhdGlvbiBtYW5hZ2VtZW50CisgKiBjb2RlIHRvZ2V0aGVyLgorICovCitpbnQgaXdsX3VwZGF0ZV9iY2FzdF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpd2xfbGlua19xdWFsaXR5X2NtZCAqbGlua19jbWQ7CisJdTggc3RhX2lkID0gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKKworCWxpbmtfY21kID0gaXdsX3N0YV9hbGxvY19scShwcml2LCBzdGFfaWQpOworCWlmICghbGlua19jbWQpIHsKKwkJSVdMX0VSUihwcml2LCAiVW5hYmxlIHRvIGluaXRpYWxpemUgcmF0ZSBzY2FsaW5nIGZvciBiY2FzdCBzdGF0aW9uLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOworCWlmIChwcml2LT5zdGF0aW9uc1tzdGFfaWRdLmxxKQorCQlrZnJlZShwcml2LT5zdGF0aW9uc1tzdGFfaWRdLmxxKTsKKwllbHNlCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJCY2FzdCBzdGF0aW9uIHJhdGUgc2NhbGluZyBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LlxuIik7CisJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5scSA9IGxpbmtfY21kOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGl3bF91cGRhdGVfYmNhc3Rfc3RhdGlvbik7CisKIHZvaWQgaXdsX2RlYWxsb2NfYmNhc3Rfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEyNjgsMTggKzEzMTIsMjIgQEAKIC8qKgogICogaXdsX3N0YV90eF9tb2RpZnlfZW5hYmxlX3RpZCAtIEVuYWJsZSBUeCBmb3IgdGhpcyBUSUQgaW4gc3RhdGlvbiB0YWJsZQogICovCi12b2lkIGl3bF9zdGFfdHhfbW9kaWZ5X2VuYWJsZV90aWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgc3RhX2lkLCBpbnQgdGlkKQoraW50IGl3bF9zdGFfdHhfbW9kaWZ5X2VuYWJsZV90aWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgc3RhX2lkLCBpbnQgdGlkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGl3bF9hZGRzdGFfY21kIHN0YV9jbWQ7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZwcml2LT5tdXRleCk7CiAKIAkvKiBSZW1vdmUgImRpc2FibGUiIGZsYWcsIHRvIGVuYWJsZSBUeCBmb3IgdGhpcyBUSUQgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5zdGEubW9kaWZ5X21hc2sgPSBTVEFfTU9ESUZZX1RJRF9ESVNBQkxFX1RYOwogCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnRpZF9kaXNhYmxlX3R4ICY9IGNwdV90b19sZTE2KH4oMSA8PCB0aWQpKTsKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5tb2RlID0gU1RBX0NPTlRST0xfTU9ESUZZX01TSzsKKwltZW1jcHkoJnN0YV9jbWQsICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YSwgc2l6ZW9mKHN0cnVjdCBpd2xfYWRkc3RhX2NtZCkpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAKLQlpd2xfc2VuZF9hZGRfc3RhKHByaXYsICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YSwgQ01EX0FTWU5DKTsKKwlyZXR1cm4gaXdsX3NlbmRfYWRkX3N0YShwcml2LCAmc3RhX2NtZCwgQ01EX1NZTkMpOwogfQogRVhQT1JUX1NZTUJPTChpd2xfc3RhX3R4X21vZGlmeV9lbmFibGVfdGlkKTsKIApAQCAtMTI4OCw2ICsxMzM2LDkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBzdGFfaWQ7CisJc3RydWN0IGl3bF9hZGRzdGFfY21kIHN0YV9jbWQ7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZwcml2LT5tdXRleCk7CiAKIAlzdGFfaWQgPSBpd2xfc3RhX2lkKHN0YSk7CiAJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKQpAQCAtMTI5OSwxMCArMTM1MCwxMCBAQAogCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmFkZF9pbW1lZGlhdGVfYmFfdGlkID0gKHU4KXRpZDsKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5hZGRfaW1tZWRpYXRlX2JhX3NzbiA9IGNwdV90b19sZTE2KHNzbik7CiAJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEubW9kZSA9IFNUQV9DT05UUk9MX01PRElGWV9NU0s7CisJbWVtY3B5KCZzdGFfY21kLCAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEsIHNpemVvZihzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQpKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIGl3bF9zZW5kX2FkZF9zdGEocHJpdiwgJnByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLAotCQkJCUNNRF9BU1lOQyk7CisJcmV0dXJuIGl3bF9zZW5kX2FkZF9zdGEocHJpdiwgJnN0YV9jbWQsIENNRF9TWU5DKTsKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3N0YV9yeF9hZ2dfc3RhcnQpOwogCkBAIC0xMzExLDYgKzEzNjIsOSBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHN0YV9pZDsKKwlzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgc3RhX2NtZDsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnByaXYtPm11dGV4KTsKIAogCXN0YV9pZCA9IGl3bF9zdGFfaWQoc3RhKTsKIAlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKQEAgLTEzMjMsMTAgKzEzNzcsMTAgQEAKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5zdGEubW9kaWZ5X21hc2sgPSBTVEFfTU9ESUZZX0RFTEJBX1RJRF9NU0s7CiAJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEucmVtb3ZlX2ltbWVkaWF0ZV9iYV90aWQgPSAodTgpdGlkOwogCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLm1vZGUgPSBTVEFfQ09OVFJPTF9NT0RJRllfTVNLOworCW1lbWNweSgmc3RhX2NtZCwgJnByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLCBzaXplb2Yoc3RydWN0IGl3bF9hZGRzdGFfY21kKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAotCXJldHVybiBpd2xfc2VuZF9hZGRfc3RhKHByaXYsICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YSwKLQkJCQkJQ01EX0FTWU5DKTsKKwlyZXR1cm4gaXdsX3NlbmRfYWRkX3N0YShwcml2LCAmc3RhX2NtZCwgQ01EX1NZTkMpOwogfQogRVhQT1JUX1NZTUJPTChpd2xfc3RhX3J4X2FnZ19zdG9wKTsKIApAQCAtMTM0MCw5ICsxMzk0LDkgQEAKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5zdGEubW9kaWZ5X21hc2sgPSAwOwogCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnNsZWVwX3R4X2NvdW50ID0gMDsKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5tb2RlID0gU1RBX0NPTlRST0xfTU9ESUZZX01TSzsKKwlpd2xfc2VuZF9hZGRfc3RhKHByaXYsICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YSwgQ01EX0FTWU5DKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCi0JaXdsX3NlbmRfYWRkX3N0YShwcml2LCAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEsIENNRF9BU1lOQyk7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9zdGFfbW9kaWZ5X3BzX3dha2UpOwogCkBAIC0xMzU3LDkgKzE0MTEsOSBAQAogCQkJCQlTVEFfTU9ESUZZX1NMRUVQX1RYX0NPVU5UX01TSzsKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5zbGVlcF90eF9jb3VudCA9IGNwdV90b19sZTE2KGNudCk7CiAJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEubW9kZSA9IFNUQV9DT05UUk9MX01PRElGWV9NU0s7CisJaXdsX3NlbmRfYWRkX3N0YShwcml2LCAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEsIENNRF9BU1lOQyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAotCWl3bF9zZW5kX2FkZF9zdGEocHJpdiwgJnByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLCBDTURfQVNZTkMpOwogfQogRVhQT1JUX1NZTUJPTChpd2xfc3RhX21vZGlmeV9zbGVlcF90eF9jb3VudCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmgKaW5kZXggYzJhNDUzYS4uZDM4YTM1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmgKQEAgLTYwLDYgKzYwLDcgQEAKIHZvaWQgaXdsX2NsZWFyX3Vjb2RlX3N0YXRpb25zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX2FsbG9jX2JjYXN0X3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBib29sIGluaXRfbHEpOwogdm9pZCBpd2xfZGVhbGxvY19iY2FzdF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitpbnQgaXdsX3VwZGF0ZV9iY2FzdF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX2dldF9mcmVlX3Vjb2RlX2tleV9pbmRleChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogaW50IGl3bF9zZW5kX2FkZF9zdGEoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkgICAgIHN0cnVjdCBpd2xfYWRkc3RhX2NtZCAqc3RhLCB1OCBmbGFncyk7CkBAIC03Myw3ICs3NCw3IEBACiAJCSAgICAgICBjb25zdCB1OCAqYWRkcik7CiBpbnQgaXdsX21hY19zdGFfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSk7Ci12b2lkIGl3bF9zdGFfdHhfbW9kaWZ5X2VuYWJsZV90aWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgc3RhX2lkLCBpbnQgdGlkKTsKK2ludCBpd2xfc3RhX3R4X21vZGlmeV9lbmFibGVfdGlkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHN0YV9pZCwgaW50IHRpZCk7CiBpbnQgaXdsX3N0YV9yeF9hZ2dfc3RhcnQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkJIGludCB0aWQsIHUxNiBzc24pOwogaW50IGl3bF9zdGFfcnhfYWdnX3N0b3Aoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLApAQCAtOTcsNiArOTgsMTcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAltZW1zZXQocHJpdi0+c3RhdGlvbnMsIDAsIHNpemVvZihwcml2LT5zdGF0aW9ucykpOwogCXByaXYtPm51bV9zdGF0aW9ucyA9IDA7CisKKwkvKgorCSAqIFJlbW92ZSBhbGwga2V5IGluZm9ybWF0aW9uIHRoYXQgaXMgbm90IHN0b3JlZCBhcyBwYXJ0IG9mIHN0YXRpb24KKwkgKiBpbmZvcm1hdGlvbiBzaW5jZSBtYWM4MDIxMSBtYXkgbm90IGhhdmUgaGFkIGEKKwkgKiBjaGFuY2UgdG8gcmVtb3ZlIGFsbCB0aGUga2V5cy4gV2hlbiBkZXZpY2UgaXMgcmVjb25maWd1cmVkIGJ5CisJICogbWFjODAyMTEgYWZ0ZXIgYW4gZXJyb3IgYWxsIGtleXMgd2lsbCBiZSByZWNvbmZpZ3VyZWQuCisJICovCisJcHJpdi0+dWNvZGVfa2V5X3RhYmxlID0gMDsKKwlwcml2LT5rZXlfbWFwcGluZ19rZXkgPSAwOworCW1lbXNldChwcml2LT53ZXBfa2V5cywgMCwgc2l6ZW9mKHByaXYtPndlcF9rZXlzKSk7CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogfQogCkBAIC0xMDcsNCArMTE5LDMzIEBACiAKIAlyZXR1cm4gKChzdHJ1Y3QgaXdsX3N0YXRpb25fcHJpdl9jb21tb24gKilzdGEtPmRydl9wcml2KS0+c3RhX2lkOwogfQorCisvKioKKyAqIGl3bF9zdGFfaWRfb3JfYnJvYWRjYXN0IC0gcmV0dXJuIHN0YV9pZCBvciBicm9hZGNhc3Qgc3RhCisgKiBAcHJpdjogaXdsIHByaXYKKyAqIEBzdGE6IG1hYzgwMjExIHN0YXRpb24KKyAqCisgKiBJbiBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgbWFjODAyMTEgcGFzc2VzIGEgc3RhdGlvbiBwb2ludGVyCisgKiB0aGF0IG1heSBiZSAlTlVMTCwgZm9yIGV4YW1wbGUgZHVyaW5nIFRYIG9yIGtleSBzZXR1cC4gSW4KKyAqIHRoYXQgY2FzZSwgd2UgbmVlZCB0byB1c2UgdGhlIGJyb2FkY2FzdCBzdGF0aW9uLCBzbyB0aGlzCisgKiBpbmxpbmUgd3JhcHMgdGhhdCBwYXR0ZXJuLgorICovCitzdGF0aWMgaW5saW5lIGludCBpd2xfc3RhX2lkX29yX2Jyb2FkY2FzdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKK3sKKwlpbnQgc3RhX2lkOworCisJaWYgKCFzdGEpCisJCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOworCisJc3RhX2lkID0gaXdsX3N0YV9pZChzdGEpOworCisJLyoKKwkgKiBtYWM4MDIxMSBzaG91bGQgbm90IGJlIHBhc3NpbmcgYSBwYXJ0aWFsbHkKKwkgKiBpbml0aWFsaXNlZCBzdGF0aW9uIQorCSAqLworCVdBUk5fT04oc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pOworCisJcmV0dXJuIHN0YV9pZDsKK30KICNlbmRpZiAvKiBfX2l3bF9zdGFfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYwppbmRleCAxZWNlMmVhLi5hODE5ODljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMKQEAgLTc3LDIxICs3Nyw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cik7CiAKLQotdm9pZCBpd2xfZnJlZV90ZmRzX2luX3F1ZXVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCSAgICBpbnQgc3RhX2lkLCBpbnQgdGlkLCBpbnQgZnJlZWQpCi17Ci0JaWYgKHByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0udGZkc19pbl9xdWV1ZSA+PSBmcmVlZCkKLQkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS50ZmRzX2luX3F1ZXVlIC09IGZyZWVkOwotCWVsc2UgewotCQlJV0xfREVCVUdfVFgocHJpdiwgImZyZWUgbW9yZSB0aGFuIHRmZHNfaW5fcXVldWUgKCV1OiVkKVxuIiwKLQkJCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0udGZkc19pbl9xdWV1ZSwKLQkJCWZyZWVkKTsKLQkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS50ZmRzX2luX3F1ZXVlID0gMDsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MKGl3bF9mcmVlX3RmZHNfaW5fcXVldWUpOwotCiAvKioKICAqIGl3bF90eF9xdWV1ZV9mcmVlIC0gRGVhbGxvY2F0ZSBETUEgcXVldWUuCiAgKiBAdHhxOiBUcmFuc21pdCBxdWV1ZSB0byBkZWFsbG9jYXRlLgpAQCAtMTY5LDE1ICsxNTQsMTUgQEAKIAkJfQogCiAJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwKLQkJCQkgcGNpX3VubWFwX2FkZHIoJnR4cS0+bWV0YVtpXSwgbWFwcGluZyksCi0JCQkJIHBjaV91bm1hcF9sZW4oJnR4cS0+bWV0YVtpXSwgbGVuKSwKKwkJCQkgZG1hX3VubWFwX2FkZHIoJnR4cS0+bWV0YVtpXSwgbWFwcGluZyksCisJCQkJIGRtYV91bm1hcF9sZW4oJnR4cS0+bWV0YVtpXSwgbGVuKSwKIAkJCQkgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKIAl9CiAJaWYgKGh1Z2UpIHsKIAkJaSA9IHEtPm5fd2luZG93OwogCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsCi0JCQkJIHBjaV91bm1hcF9hZGRyKCZ0eHEtPm1ldGFbaV0sIG1hcHBpbmcpLAotCQkJCSBwY2lfdW5tYXBfbGVuKCZ0eHEtPm1ldGFbaV0sIGxlbiksCisJCQkJIGRtYV91bm1hcF9hZGRyKCZ0eHEtPm1ldGFbaV0sIG1hcHBpbmcpLAorCQkJCSBkbWFfdW5tYXBfbGVuKCZ0eHEtPm1ldGFbaV0sIGxlbiksCiAJCQkJIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CiAJfQogCkBAIC0yODcsNyArMjcyLDcgQEAKIAkvKiBEcml2ZXIgcHJpdmF0ZSBkYXRhLCBvbmx5IGZvciBUeCAobm90IGNvbW1hbmQpIHF1ZXVlcywKIAkgKiBub3Qgc2hhcmVkIHdpdGggZGV2aWNlLiAqLwogCWlmIChpZCAhPSBJV0xfQ01EX1FVRVVFX05VTSkgewotCQl0eHEtPnR4YiA9IGttYWxsb2Moc2l6ZW9mKHR4cS0+dHhiWzBdKSAqCisJCXR4cS0+dHhiID0ga3phbGxvYyhzaXplb2YodHhxLT50eGJbMF0pICoKIAkJCQkgICBURkRfUVVFVUVfU0laRV9NQVgsIEdGUF9LRVJORUwpOwogCQlpZiAoIXR4cS0+dHhiKSB7CiAJCQlJV0xfRVJSKHByaXYsICJrbWFsbG9jIGZvciBhdXhpbGlhcnkgQkQgIgpAQCAtNTMxLDggKzUxNiw4IEBACiAKIAlwaHlzX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LCAmb3V0X2NtZC0+aGRyLAogCQkJCSAgIGZpeF9zaXplLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwotCXBjaV91bm1hcF9hZGRyX3NldChvdXRfbWV0YSwgbWFwcGluZywgcGh5c19hZGRyKTsKLQlwY2lfdW5tYXBfbGVuX3NldChvdXRfbWV0YSwgbGVuLCBmaXhfc2l6ZSk7CisJZG1hX3VubWFwX2FkZHJfc2V0KG91dF9tZXRhLCBtYXBwaW5nLCBwaHlzX2FkZHIpOworCWRtYV91bm1hcF9sZW5fc2V0KG91dF9tZXRhLCBsZW4sIGZpeF9zaXplKTsKIAogCXRyYWNlX2l3bHdpZmlfZGV2X2hjbWQocHJpdiwgJm91dF9jbWQtPmhkciwgZml4X3NpemUsIGNtZC0+ZmxhZ3MpOwogCkBAIC02MjYsOCArNjExLDggQEAKIAltZXRhID0gJnR4cS0+bWV0YVtjbWRfaW5kZXhdOwogCiAJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LAotCQkJIHBjaV91bm1hcF9hZGRyKG1ldGEsIG1hcHBpbmcpLAotCQkJIHBjaV91bm1hcF9sZW4obWV0YSwgbGVuKSwKKwkJCSBkbWFfdW5tYXBfYWRkcihtZXRhLCBtYXBwaW5nKSwKKwkJCSBkbWFfdW5tYXBfbGVuKG1ldGEsIGxlbiksCiAJCQkgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKIAogCS8qIElucHV0IGVycm9yIGNoZWNraW5nIGlzIGRvbmUgd2hlbiBjb21tYW5kcyBhcmUgYWRkZWQgdG8gcXVldWUuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYwppbmRleCBhMjc4NzJkLi5kMjRlYjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKQEAgLTI3LDYgKzI3LDggQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTE5Nyw2ICsxOTksNyBAQAogc3RhdGljIGludCBpd2wzOTQ1X2NsZWFyX3N0YV9rZXlfaW5mbyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IHN0YV9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpd2xfYWRkc3RhX2NtZCBzdGFfY21kOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAJbWVtc2V0KCZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLmtleWluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaXdsX2h3X2tleSkpOwpAQCAtMjA1LDExICsyMDgsMTEgQEAKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X2ZsYWdzID0gU1RBX0tFWV9GTEdfTk9fRU5DOwogCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnN0YS5tb2RpZnlfbWFzayA9IFNUQV9NT0RJRllfS0VZX01BU0s7CiAJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEubW9kZSA9IFNUQV9DT05UUk9MX01PRElGWV9NU0s7CisJbWVtY3B5KCZzdGFfY21kLCAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEsIHNpemVvZihzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQpKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCiAJSVdMX0RFQlVHX0lORk8ocHJpdiwgImh3Y3J5cHRvOiBjbGVhciB1Y29kZSBzdGF0aW9uIGtleSBpbmZvXG4iKTsKLQlpd2xfc2VuZF9hZGRfc3RhKHByaXYsICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YSwgMCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGl3bF9zZW5kX2FkZF9zdGEocHJpdiwgJnN0YV9jbWQsIENNRF9TWU5DKTsKIH0KIAogc3RhdGljIGludCBpd2wzOTQ1X3NldF9keW5hbWljX2tleShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCkBAIC0zMTAsOSArMzEzLDcgQEAKIAkJCQlpbnQgbGVmdCkKIHsKIAotCWlmICghaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikgfHwgIXByaXYtPmlic3NfYmVhY29uIHx8Ci0JICAgICgocHJpdi0+aXdfbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykgJiYKLQkgICAgIChwcml2LT5pd19tb2RlICE9IE5MODAyMTFfSUZUWVBFX0FQKSkpCisJaWYgKCFpd2xfaXNfYXNzb2NpYXRlZChwcml2KSB8fCAhcHJpdi0+aWJzc19iZWFjb24pCiAJCXJldHVybiAwOwogCiAJaWYgKHByaXYtPmlic3NfYmVhY29uLT5sZW4gPiBsZWZ0KQpAQCAtNDc0LDEwICs0NzUsOCBAQAogCXU4IHVuaWNhc3Q7CiAJdTggc3RhX2lkOwogCXU4IHRpZCA9IDA7Ci0JdTE2IHNlcV9udW1iZXIgPSAwOwogCV9fbGUxNiBmYzsKIAl1OCB3YWl0X3dyaXRlX3B0ciA9IDA7Ci0JdTggKnFjID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTUxMCwxMCArNTA5LDcgQEAKIAloZHJfbGVuID0gaWVlZTgwMjExX2hkcmxlbihmYyk7CiAKIAkvKiBGaW5kIGluZGV4IGludG8gc3RhdGlvbiB0YWJsZSBmb3IgZGVzdGluYXRpb24gc3RhdGlvbiAqLwotCWlmICghaW5mby0+Y29udHJvbC5zdGEpCi0JCXN0YV9pZCA9IHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQ7Ci0JZWxzZQotCQlzdGFfaWQgPSBpd2xfc3RhX2lkKGluZm8tPmNvbnRyb2wuc3RhKTsKKwlzdGFfaWQgPSBpd2xfc3RhX2lkX29yX2Jyb2FkY2FzdChwcml2LCBpbmZvLT5jb250cm9sLnN0YSk7CiAJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7CiAJCUlXTF9ERUJVR19EUk9QKHByaXYsICJEcm9wcGluZyAtIElOVkFMSUQgU1RBVElPTjogJXBNXG4iLAogCQkJICAgICAgIGhkci0+YWRkcjEpOwpAQCAtNTIzLDE2ICs1MTksMTAgQEAKIAlJV0xfREVCVUdfUkFURShwcml2LCAic3RhdGlvbiBJZCAlZFxuIiwgc3RhX2lkKTsKIAogCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7Ci0JCXFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CisJCXU4ICpxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpOwogCQl0aWQgPSBxY1swXSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOwogCQlpZiAodW5saWtlbHkodGlkID49IE1BWF9USURfQ09VTlQpKQogCQkJZ290byBkcm9wOwotCQlzZXFfbnVtYmVyID0gcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5zZXFfbnVtYmVyICYKLQkJCQlJRUVFODAyMTFfU0NUTF9TRVE7Ci0JCWhkci0+c2VxX2N0cmwgPSBjcHVfdG9fbGUxNihzZXFfbnVtYmVyKSB8Ci0JCQkoaGRyLT5zZXFfY3RybCAmCi0JCQkJY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NDVExfRlJBRykpOwotCQlzZXFfbnVtYmVyICs9IDB4MTA7CiAJfQogCiAJLyogRGVzY3JpcHRvciBmb3IgY2hvc2VuIFR4IHF1ZXVlICovCkBAIC01NDgsNyArNTM4LDcgQEAKIAogCS8qIFNldCB1cCBkcml2ZXIgZGF0YSBmb3IgdGhpcyBURkQgKi8KIAltZW1zZXQoJih0eHEtPnR4YltxLT53cml0ZV9wdHJdKSwgMCwgc2l6ZW9mKHN0cnVjdCBpd2xfdHhfaW5mbykpOwotCXR4cS0+dHhiW3EtPndyaXRlX3B0cl0uc2tiWzBdID0gc2tiOworCXR4cS0+dHhiW3EtPndyaXRlX3B0cl0uc2tiID0gc2tiOwogCiAJLyogSW5pdCBmaXJzdCBlbXB0eSBlbnRyeSBpbiBxdWV1ZSdzIGFycmF5IG9mIFR4L2NtZCBidWZmZXJzICovCiAJb3V0X2NtZCA9IHR4cS0+Y21kW2lkeF07CkBAIC01OTEsOCArNTgxLDYgQEAKIAogCWlmICghaWVlZTgwMjExX2hhc19tb3JlZnJhZ3MoaGRyLT5mcmFtZV9jb250cm9sKSkgewogCQl0eHEtPm5lZWRfdXBkYXRlID0gMTsKLQkJaWYgKHFjKQotCQkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5zZXFfbnVtYmVyID0gc2VxX251bWJlcjsKIAl9IGVsc2UgewogCQl3YWl0X3dyaXRlX3B0ciA9IDE7CiAJCXR4cS0+bmVlZF91cGRhdGUgPSAwOwpAQCAtNjMxLDggKzYxOSw4IEBACiAJCQkJICAgIGxlbiwgUENJX0RNQV9UT0RFVklDRSk7CiAJLyogd2UgZG8gbm90IG1hcCBtZXRhIGRhdGEgLi4uIHNvIHdlIGNhbiBzYWZlbHkgYWNjZXNzIGFkZHJlc3MgdG8KIAkgKiBwcm92aWRlIHRvIHVubWFwIGNvbW1hbmQqLwotCXBjaV91bm1hcF9hZGRyX3NldChvdXRfbWV0YSwgbWFwcGluZywgdHhjbWRfcGh5cyk7Ci0JcGNpX3VubWFwX2xlbl9zZXQob3V0X21ldGEsIGxlbiwgbGVuKTsKKwlkbWFfdW5tYXBfYWRkcl9zZXQob3V0X21ldGEsIG1hcHBpbmcsIHR4Y21kX3BoeXMpOworCWRtYV91bm1hcF9sZW5fc2V0KG91dF9tZXRhLCBsZW4sIGxlbik7CiAKIAkvKiBBZGQgYnVmZmVyIGNvbnRhaW5pbmcgVHggY29tbWFuZCBhbmQgTUFDKCEpIGhlYWRlciB0byBURkQncwogCSAqIGZpcnN0IGVudHJ5ICovCkBAIC02NzcsNTUgKzY2NSw2IEBACiAJcmV0dXJuIC0xOwogfQogCi0jZGVmaW5lIEJFQUNPTl9USU1FX01BU0tfTE9XCTB4MDBGRkZGRkYKLSNkZWZpbmUgQkVBQ09OX1RJTUVfTUFTS19ISUdICTB4RkYwMDAwMDAKLSNkZWZpbmUgVElNRV9VTklUCQkxMDI0Ci0KLS8qCi0gKiBleHRlbmRlZCBiZWFjb24gdGltZSBmb3JtYXQKLSAqIHRpbWUgaW4gdXNlYyB3aWxsIGJlIGNoYW5nZWQgaW50byBhIDMyLWJpdCB2YWx1ZSBpbiA4OjI0IGZvcm1hdAotICogdGhlIGhpZ2ggMSBieXRlIGlzIHRoZSBiZWFjb24gY291bnRzCi0gKiB0aGUgbG93ZXIgMyBieXRlcyBpcyB0aGUgdGltZSBpbiB1c2VjIHdpdGhpbiBvbmUgYmVhY29uIGludGVydmFsCi0gKi8KLQotc3RhdGljIHUzMiBpd2wzOTQ1X3VzZWNzX3RvX2JlYWNvbnModTMyIHVzZWMsIHUzMiBiZWFjb25faW50ZXJ2YWwpCi17Ci0JdTMyIHF1b3Q7Ci0JdTMyIHJlbTsKLQl1MzIgaW50ZXJ2YWwgPSBiZWFjb25faW50ZXJ2YWwgKiAxMDI0OwotCi0JaWYgKCFpbnRlcnZhbCB8fCAhdXNlYykKLQkJcmV0dXJuIDA7Ci0KLQlxdW90ID0gKHVzZWMgLyBpbnRlcnZhbCkgJiAoQkVBQ09OX1RJTUVfTUFTS19ISUdIID4+IDI0KTsKLQlyZW0gPSAodXNlYyAlIGludGVydmFsKSAmIEJFQUNPTl9USU1FX01BU0tfTE9XOwotCi0JcmV0dXJuIChxdW90IDw8IDI0KSArIHJlbTsKLX0KLQotLyogYmFzZSBpcyB1c3VhbGx5IHdoYXQgd2UgZ2V0IGZyb20gdWNvZGUgd2l0aCBlYWNoIHJlY2VpdmVkIGZyYW1lLAotICogdGhlIHNhbWUgYXMgSFcgdGltZXIgY291bnRlciBjb3VudGluZyBkb3duCi0gKi8KLQotc3RhdGljIF9fbGUzMiBpd2wzOTQ1X2FkZF9iZWFjb25fdGltZSh1MzIgYmFzZSwgdTMyIGFkZG9uLCB1MzIgYmVhY29uX2ludGVydmFsKQotewotCXUzMiBiYXNlX2xvdyA9IGJhc2UgJiBCRUFDT05fVElNRV9NQVNLX0xPVzsKLQl1MzIgYWRkb25fbG93ID0gYWRkb24gJiBCRUFDT05fVElNRV9NQVNLX0xPVzsKLQl1MzIgaW50ZXJ2YWwgPSBiZWFjb25faW50ZXJ2YWwgKiBUSU1FX1VOSVQ7Ci0JdTMyIHJlcyA9IChiYXNlICYgQkVBQ09OX1RJTUVfTUFTS19ISUdIKSArCi0JICAgIChhZGRvbiAmIEJFQUNPTl9USU1FX01BU0tfSElHSCk7Ci0KLQlpZiAoYmFzZV9sb3cgPiBhZGRvbl9sb3cpCi0JCXJlcyArPSBiYXNlX2xvdyAtIGFkZG9uX2xvdzsKLQllbHNlIGlmIChiYXNlX2xvdyA8IGFkZG9uX2xvdykgewotCQlyZXMgKz0gaW50ZXJ2YWwgKyBiYXNlX2xvdyAtIGFkZG9uX2xvdzsKLQkJcmVzICs9ICgxIDw8IDI0KTsKLQl9IGVsc2UKLQkJcmVzICs9ICgxIDw8IDI0KTsKLQotCXJldHVybiBjcHVfdG9fbGUzMihyZXMpOwotfQotCiBzdGF0aWMgaW50IGl3bDM5NDVfZ2V0X21lYXN1cmVtZW50KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21lYXN1cmVtZW50X3BhcmFtcyAqcGFyYW1zLAogCQkJICAgICAgIHU4IHR5cGUpCkBAIC03NDMsOCArNjgyLDcgQEAKIAlpbnQgZHVyYXRpb24gPSBsZTE2X3RvX2NwdShwYXJhbXMtPmR1cmF0aW9uKTsKIAogCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkKLQkJYWRkX3RpbWUgPQotCQkgICAgaXdsMzk0NV91c2Vjc190b19iZWFjb25zKAorCQlhZGRfdGltZSA9IGl3bF91c2Vjc190b19iZWFjb25zKHByaXYsCiAJCQlsZTY0X3RvX2NwdShwYXJhbXMtPnN0YXJ0X3RpbWUpIC0gcHJpdi0+XzM5NDUubGFzdF90c2YsCiAJCQlsZTE2X3RvX2NwdShwcml2LT5yeG9uX3RpbWluZy5iZWFjb25faW50ZXJ2YWwpKTsKIApAQCAtNzU5LDggKzY5Nyw4IEBACiAKIAlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpCiAJCXNwZWN0cnVtLnN0YXJ0X3RpbWUgPQotCQkgICAgaXdsMzk0NV9hZGRfYmVhY29uX3RpbWUocHJpdi0+XzM5NDUubGFzdF9iZWFjb25fdGltZSwKLQkJCQlhZGRfdGltZSwKKwkJCWl3bF9hZGRfYmVhY29uX3RpbWUocHJpdiwKKwkJCQlwcml2LT5fMzk0NS5sYXN0X2JlYWNvbl90aW1lLCBhZGRfdGltZSwKIAkJCQlsZTE2X3RvX2NwdShwcml2LT5yeG9uX3RpbWluZy5iZWFjb25faW50ZXJ2YWwpKTsKIAllbHNlCiAJCXNwZWN0cnVtLnN0YXJ0X3RpbWUgPSAwOwpAQCAtMTIzMyw3ICsxMTcxLDcgQEAKIAl9CiAKIAlkbWFfZnJlZV9jb2hlcmVudCgmcHJpdi0+cGNpX2Rldi0+ZGV2LCA0ICogUlhfUVVFVUVfU0laRSwgcnhxLT5iZCwKLQkJCSAgcnhxLT5kbWFfYWRkcik7CisJCQkgIHJ4cS0+YmRfZG1hKTsKIAlkbWFfZnJlZV9jb2hlcmVudCgmcHJpdi0+cGNpX2Rldi0+ZGV2LCBzaXplb2Yoc3RydWN0IGl3bF9yYl9zdGF0dXMpLAogCQkJICByeHEtPnJiX3N0dHMsIHJ4cS0+cmJfc3R0c19kbWEpOwogCXJ4cS0+YmQgPSBOVUxMOwpAQCAtMTMxNCw2ICsxMjUyLDggQEAKIAkJSVdMX0RFQlVHX1JYKHByaXYsICJyID0gJWQsIGkgPSAlZFxuIiwgciwgaSk7CiAKIAl3aGlsZSAoaSAhPSByKSB7CisJCWludCBsZW47CisKIAkJcnhiID0gcnhxLT5xdWV1ZVtpXTsKIAogCQkvKiBJZiBhbiBSWEIgZG9lc24ndCBoYXZlIGEgUnggcXVldWUgc2xvdCBhc3NvY2lhdGVkIHdpdGggaXQsCkBAIC0xMzI4LDggKzEyNjgsOSBAQAogCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCXBrdCA9IHJ4Yl9hZGRyKHJ4Yik7CiAKLQkJdHJhY2VfaXdsd2lmaV9kZXZfcngocHJpdiwgcGt0LAotCQkJbGUzMl90b19jcHUocGt0LT5sZW5fbl9mbGFncykgJiBGSF9SU0NTUl9GUkFNRV9TSVpFX01TSyk7CisJCWxlbiA9IGxlMzJfdG9fY3B1KHBrdC0+bGVuX25fZmxhZ3MpICYgRkhfUlNDU1JfRlJBTUVfU0laRV9NU0s7CisJCWxlbiArPSBzaXplb2YodTMyKTsgLyogYWNjb3VudCBmb3Igc3RhdHVzIHdvcmQgKi8KKwkJdHJhY2VfaXdsd2lmaV9kZXZfcngocHJpdiwgcGt0LCBsZW4pOwogCiAJCS8qIFJlY2xhaW0gYSBjb21tYW5kIGJ1ZmZlciBvbmx5IGlmIHRoaXMgcGFja2V0IGlzIGEgcmVzcG9uc2UKIAkJICogICB0byBhIChkcml2ZXItb3JpZ2luYXRlZCkgY29tbWFuZC4KQEAgLTE0ODMsNyArMTQyNCw3IEBACiAJCSAgICBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDYgKiBzaXplb2YodTMyKSk7CiAKIAkJSVdMX0VSUihwcml2LAotCQkJIiUtMTNzICgjJWQpICUwMTB1IDB4JTA1WCAweCUwNVggMHglMDVYIDB4JTA1WCAldVxuXG4iLAorCQkJIiUtMTNzICgweCVYKSAlMDEwdSAweCUwNVggMHglMDVYIDB4JTA1WCAweCUwNVggJXVcblxuIiwKIAkJCWRlc2NfbG9va3VwKGRlc2MpLCBkZXNjLCB0aW1lLCBibGluazEsIGJsaW5rMiwKIAkJCWlsaW5rMSwgaWxpbmsyLCBkYXRhMSk7CiAJCXRyYWNlX2l3bHdpZmlfZGV2X3Vjb2RlX2Vycm9yKHByaXYsIGRlc2MsIHRpbWUsIGRhdGExLCAwLApAQCAtMjk0Miw3ICsyODgzLDEwIEBACiAJCUlXTF9ERUJVR19JTkZPKHByaXYsICJTY2FubmluZyB3aGlsZSBhc3NvY2lhdGVkLi4uXG4iKTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQlpbnRlcnZhbCA9IHZpZiA/IHZpZi0+YnNzX2NvbmYuYmVhY29uX2ludCA6IDA7CisJCWlmIChwcml2LT5pc19pbnRlcm5hbF9zaG9ydF9zY2FuKQorCQkJaW50ZXJ2YWwgPSAwOworCQllbHNlCisJCQlpbnRlcnZhbCA9IHZpZi0+YnNzX2NvbmYuYmVhY29uX2ludDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJCXNjYW4tPnN1c3BlbmRfdGltZSA9IDA7CkBAIC0zMDIyLDE0ICsyOTY2LDE2IEBACiAJCXNjYW4tPnR4X2NtZC5sZW4gPSBjcHVfdG9fbGUxNigKIAkJCWl3bF9maWxsX3Byb2JlX3JlcShwcml2LAogCQkJCShzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilzY2FuLT5kYXRhLAorCQkJCXZpZi0+YWRkciwKIAkJCQlwcml2LT5zY2FuX3JlcXVlc3QtPmllLAogCQkJCXByaXYtPnNjYW5fcmVxdWVzdC0+aWVfbGVuLAogCQkJCUlXTF9NQVhfU0NBTl9TSVpFIC0gc2l6ZW9mKCpzY2FuKSkpOwogCX0gZWxzZSB7CisJCS8qIHVzZSBiY2FzdCBhZGRyLCB3aWxsIG5vdCBiZSB0cmFuc21pdHRlZCBidXQgbXVzdCBiZSB2YWxpZCAqLwogCQlzY2FuLT50eF9jbWQubGVuID0gY3B1X3RvX2xlMTYoCiAJCQlpd2xfZmlsbF9wcm9iZV9yZXEocHJpdiwKIAkJCQkoc3RydWN0IGllZWU4MDIxMV9tZ210ICopc2Nhbi0+ZGF0YSwKLQkJCQlOVUxMLCAwLAorCQkJCWl3bF9iY2FzdF9hZGRyLCBOVUxMLCAwLAogCQkJCUlXTF9NQVhfU0NBTl9TSVpFIC0gc2l6ZW9mKCpzY2FuKSkpOwogCX0KIAkvKiBzZWxlY3QgUnggYW50ZW5uYXMgKi8KQEAgLTMxNTgsMTkgKzMxMDQsMTYgQEAKIAlJV0xfREVCVUdfQVNTT0MocHJpdiwgImFzc29jIGlkICVkIGJlYWNvbiBpbnRlcnZhbCAlZFxuIiwKIAkJCXZpZi0+YnNzX2NvbmYuYWlkLCB2aWYtPmJzc19jb25mLmJlYWNvbl9pbnQpOwogCi0JaWYgKHZpZi0+YnNzX2NvbmYuYXNzb2NfY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkKKwlpZiAodmlmLT5ic3NfY29uZi51c2Vfc2hvcnRfcHJlYW1ibGUpCiAJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7CiAJZWxzZQogCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX1NIT1JUX1BSRUFNQkxFX01TSzsKIAogCWlmIChwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spIHsKLQkJaWYgKHZpZi0+YnNzX2NvbmYuYXNzb2NfY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9TTE9UX1RJTUUpCisJCWlmICh2aWYtPmJzc19jb25mLnVzZV9zaG9ydF9zbG90KQogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOwogCQllbHNlCiAJCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOwotCi0JCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCi0JCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOwogCX0KIAogCWl3bGNvcmVfY29tbWl0X3J4b24ocHJpdik7CkBAIC0zMzM0LDggKzMyNzcsNyBAQAogCiAJCXByaXYtPnN0YWdpbmdfcnhvbi5hc3NvY19pZCA9IDA7CiAKLQkJaWYgKHZpZi0+YnNzX2NvbmYuYXNzb2NfY2FwYWJpbGl0eSAmCi0JCQkJCVdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkKKwkJaWYgKHZpZi0+YnNzX2NvbmYudXNlX3Nob3J0X3ByZWFtYmxlKQogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9CiAJCQkJUlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOwogCQllbHNlCkBAIC0zMzQzLDE3ICszMjg1LDEyIEBACiAJCQkJflJYT05fRkxHX1NIT1JUX1BSRUFNQkxFX01TSzsKIAogCQlpZiAocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKSB7Ci0JCQlpZiAodmlmLT5ic3NfY29uZi5hc3NvY19jYXBhYmlsaXR5ICYKLQkJCQkJV0xBTl9DQVBBQklMSVRZX1NIT1JUX1NMT1RfVElNRSkKKwkJCWlmICh2aWYtPmJzc19jb25mLnVzZV9zaG9ydF9zbG90KQogCQkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PQogCQkJCQlSWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKIAkJCWVsc2UKIAkJCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0KIAkJCQkJflJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOwotCi0JCQlpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCQkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPQotCQkJCQl+UlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7CiAJCX0KIAkJLyogcmVzdG9yZSBSWE9OIGFzc29jICovCiAJCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQVNTT0NfTVNLOwpAQCAtMzM4NiwxNyArMzMyMyw5IEBACiAJc3RhdGljX2tleSA9ICFpd2xfaXNfYXNzb2NpYXRlZChwcml2KTsKIAogCWlmICghc3RhdGljX2tleSkgewotCQlpZiAoIXN0YSkgewotCQkJc3RhX2lkID0gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKLQkJfSBlbHNlIHsKLQkJCXN0YV9pZCA9IGl3bF9zdGFfaWQoc3RhKTsKLQkJCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgewotCQkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LAotCQkJCQkJICAgImxlYXZlIC0gJXBNIG5vdCBpbiBzdGF0aW9uIG1hcC5cbiIsCi0JCQkJCQkgICBzdGEtPmFkZHIpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQl9CisJCXN0YV9pZCA9IGl3bF9zdGFfaWRfb3JfYnJvYWRjYXN0KHByaXYsIHN0YSk7CisJCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikKKwkJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKQEAgLTQwMDYsNyArMzkzNSw3IEBACiAJICogICBzcGFjZSBmb3IgdGhpcyBkcml2ZXIncyBwcml2YXRlIHN0cnVjdHVyZSAqLwogCWh3ID0gaXdsX2FsbG9jX2FsbChjZmcsICZpd2wzOTQ1X2h3X29wcyk7CiAJaWYgKGh3ID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICJDYW4gbm90IGFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlXG4iKTsKKwkJcHJfZXJyKCJDYW4gbm90IGFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNDAyOCw5ICszOTU3LDYgQEAKIAlwcml2LT5wY2lfZGV2ID0gcGRldjsKIAlwcml2LT5pbnRhX21hc2sgPSBDU1JfSU5JX1NFVF9NQVNLOwogCi0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLQlhdG9taWNfc2V0KCZwcml2LT5yZXN0cmljdF9yZWZjbnQsIDApOwotI2VuZGlmCiAJaWYgKGl3bF9hbGxvY190cmFmZmljX21lbShwcml2KSkKIAkJSVdMX0VSUihwcml2LCAiTm90IGVub3VnaCBtZW1vcnkgdG8gZ2VuZXJhdGUgdHJhZmZpYyBsb2dcbiIpOwogCkBAIC00MDk5LDkgKzQwMjUsOCBAQAogCX0KIAkvKiBNQUMgQWRkcmVzcyBsb2NhdGlvbiBpbiBFRVBST00gc2FtZSBmb3IgMzk0NS80OTY1ICovCiAJZWVwcm9tID0gKHN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqKXByaXYtPmVlcHJvbTsKLQltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGVlcHJvbS0+bWFjX2FkZHJlc3MsIEVUSF9BTEVOKTsKLQlJV0xfREVCVUdfSU5GTyhwcml2LCAiTUFDIGFkZHJlc3M6ICVwTVxuIiwgcHJpdi0+bWFjX2FkZHIpOwotCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKHByaXYtPmh3LCBwcml2LT5tYWNfYWRkcik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk1BQyBhZGRyZXNzOiAlcE1cbiIsIGVlcHJvbS0+bWFjX2FkZHJlc3MpOworCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKHByaXYtPmh3LCBlZXByb20tPm1hY19hZGRyZXNzKTsKIAogCS8qKioqKioqKioqKioqKioqKioqKioqKgogCSAqIDUuIFNldHVwIEhXIENvbnN0YW50cwpAQCAtNDMwMiwxOSArNDIyNywxOCBAQAogewogCiAJaW50IHJldDsKLQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6ICIgRFJWX0RFU0NSSVBUSU9OICIsICIgRFJWX1ZFUlNJT04gIlxuIik7Ci0JcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiAiIERSVl9DT1BZUklHSFQgIlxuIik7CisJcHJfaW5mbyhEUlZfREVTQ1JJUFRJT04gIiwgIiBEUlZfVkVSU0lPTiAiXG4iKTsKKwlwcl9pbmZvKERSVl9DT1BZUklHSFQgIlxuIik7CiAKIAlyZXQgPSBpd2wzOTQ1X3JhdGVfY29udHJvbF9yZWdpc3RlcigpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCi0JCSAgICAgICAiVW5hYmxlIHRvIHJlZ2lzdGVyIHJhdGUgY29udHJvbCBhbGdvcml0aG06ICVkXG4iLCByZXQpOworCQlwcl9lcnIoIlVuYWJsZSB0byByZWdpc3RlciByYXRlIGNvbnRyb2wgYWxnb3JpdGhtOiAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpd2wzOTQ1X2RyaXZlcik7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIlVuYWJsZSB0byBpbml0aWFsaXplIFBDSSBtb2R1bGVcbiIpOworCQlwcl9lcnIoIlVuYWJsZSB0byBpbml0aWFsaXplIFBDSSBtb2R1bGVcbiIpOwogCQlnb3RvIGVycm9yX3JlZ2lzdGVyOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY2ZnODAyMTEuYwppbmRleCA5MDJlOTVmLi42MDYxOTY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY2ZnODAyMTEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY2ZnODAyMTEuYwpAQCAtNjcwLDIwICs2NzAsMjQgQEAKIH0KIAogc3RhdGljIGludCBpd21fY2ZnODAyMTFfc2V0X3R4cG93ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwKLQkJCQkgICAgZW51bSB0eF9wb3dlcl9zZXR0aW5nIHR5cGUsIGludCBkYm0pCisJCQkJICAgIGVudW0gbmw4MDIxMV90eF9wb3dlcl9zZXR0aW5nIHR5cGUsIGludCBtYm0pCiB7CiAJc3RydWN0IGl3bV9wcml2ICppd20gPSB3aXBoeV90b19pd20od2lwaHkpOwogCWludCByZXQ7CiAKIAlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIFRYX1BPV0VSX0FVVE9NQVRJQzoKKwljYXNlIE5MODAyMTFfVFhfUE9XRVJfQVVUT01BVElDOgogCQlyZXR1cm4gMDsKLQljYXNlIFRYX1BPV0VSX0ZJWEVEOgorCWNhc2UgTkw4MDIxMV9UWF9QT1dFUl9GSVhFRDoKKwkJaWYgKG1ibSA8IDAgfHwgKG1ibSAlIDEwMCkpCisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKIAkJaWYgKCF0ZXN0X2JpdChJV01fU1RBVFVTX1JFQURZLCAmaXdtLT5zdGF0dXMpKQogCQkJcmV0dXJuIDA7CiAKIAkJcmV0ID0gaXdtX3VtYWNfc2V0X2NvbmZpZ19maXgoaXdtLCBVTUFDX1BBUkFNX1RCTF9DRkdfRklYLAotCQkJCQkgICAgICBDRkdfVFhfUFdSX0xJTUlUX1VTUiwgZGJtICogMik7CisJCQkJCSAgICAgIENGR19UWF9QV1JfTElNSVRfVVNSLAorCQkJCQkgICAgICBNQk1fVE9fREJNKG1ibSkgKiAyKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY29tbWFuZHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jb21tYW5kcy5oCmluZGV4IDdlMTZiY2YuLjY0MjE2ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jb21tYW5kcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jb21tYW5kcy5oCkBAIC01Niw3ICs1Niw3IEBACiAKIHN0cnVjdCBpd21fdW1hY19jbWRfcmVzZXQgewogCV9fbGUzMiBmbGFnczsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBVTUFDX1BBUkFNX1RCTF9PUkRfRklYICAgIDB4MAogI2RlZmluZSBVTUFDX1BBUkFNX1RCTF9PUkRfVkFSICAgIDB4MQpAQCAtMjIwLDM3ICsyMjAsMzcgQEAKIAlfX2xlMTYgdGJsOwogCV9fbGUxNiBrZXk7CiAJX19sZTMyIHZhbHVlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXdtX3VtYWNfY21kX3NldF9wYXJhbV92YXIgewogCV9fbGUxNiB0Ymw7CiAJX19sZTE2IGtleTsKIAlfX2xlMTYgbGVuOwogCV9fbGUxNiByZXNlcnZlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bV91bWFjX2NtZF9nZXRfcGFyYW0gewogCV9fbGUxNiB0Ymw7CiAJX19sZTE2IGtleTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bV91bWFjX2NtZF9nZXRfcGFyYW1fcmVzcCB7CiAJX19sZTE2IHRibDsKIAlfX2xlMTYga2V5OwogCV9fbGUxNiBsZW47CiAJX19sZTE2IHJlc2VydmVkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXdtX3VtYWNfY21kX2VlcHJvbV9wcm94eV9oZHIgewogCV9fbGUzMiB0eXBlOwogCV9fbGUzMiBvZmZzZXQ7CiAJX19sZTMyIGxlbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bV91bWFjX2NtZF9lZXByb21fcHJveHkgewogCXN0cnVjdCBpd21fdW1hY19jbWRfZWVwcm9tX3Byb3h5X2hkciBoZHI7CiAJdTggYnVmWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIElXTV9VTUFDX0NNRF9FRVBST01fVFlQRV9SRUFEICAgICAgIDB4MQogI2RlZmluZSBJV01fVU1BQ19DTURfRUVQUk9NX1RZUEVfV1JJVEUgICAgICAweDIKQEAgLTI2NywxMyArMjY3LDEzIEBACiAJdTggcmVzZXJ2ZWQ7CiAJdTggZmxhZ3M7CiAJX19sZTMyIGNoYW5uZWxzX21hc2s7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpd21fdW1hY19jbWRfZ2V0X2NoYW5uZWxfbGlzdCB7CiAJX19sZTE2IGNvdW50OwogCV9fbGUxNiByZXNlcnZlZDsKIAlzdHJ1Y3QgaXdtX3VtYWNfY2hhbm5lbF9pbmZvIGNoWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAKIC8qIFVNQUMgV2lGaSBpbnRlcmZhY2UgY29tbWFuZHMgKi8KQEAgLTMwNCw3ICszMDQsNyBAQAogCXU4IHNzaWRfbGVuOwogCXU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07CiAJdTggcmVzZXJ2ZWRbM107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpd21fdW1hY19jbWRfc2Nhbl9yZXF1ZXN0IHsKIAlzdHJ1Y3QgaXdtX3VtYWNfd2lmaV9pZiBoZHI7CkBAIC0zMTQsNyArMzE0LDcgQEAKIAl1OCB0aW1lb3V0OyAvKiBJbiBzZWNvbmRzICovCiAJdTggcmVzZXJ2ZWQ7CiAJc3RydWN0IGl3bV91bWFjX3NzaWQgc3NpZHNbVU1BQ19XSUZJX0lGX1BST0JFX09QVElPTl9NQVhdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIFVNQUNfQ0lQSEVSX1RZUEVfTk9ORQkJMHhGRgogI2RlZmluZSBVTUFDX0NJUEhFUl9UWVBFX1VTRV9HUk9VUENBU1QJMHgwMApAQCAtMzU3LDcgKzM1Nyw3IEBACiAJdTggdWNhc3RfY2lwaGVyOwogCXU4IG1jYXN0X2NpcGhlcjsKIAl1OCBmbGFnczsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bV91bWFjX2lic3MgewogCXU4IGJlYWNvbl9pbnRlcnZhbDsJLyogaW4gbWlsbGlzZWNvbmQgKi8KQEAgLTM2Niw3ICszNjYsNyBAQAogCXU4IGJhbmQ7CiAJdTggY2hhbm5lbDsKIAl1OCByZXNlcnZlZFszXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBVTUFDX01PREVfQlNTCTAKICNkZWZpbmUgVU1BQ19NT0RFX0lCU1MJMQpAQCAtMzg1LDEzICszODUsMTMgQEAKIAlfX2xlMTYgZmxhZ3M7CiAJdTggd2lyZWxlc3NfbW9kZTsKIAl1OCBic3NfbnVtOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXdtX3VtYWNfaW52YWxpZGF0ZV9wcm9maWxlIHsKIAlzdHJ1Y3QgaXdtX3VtYWNfd2lmaV9pZiBoZHI7CiAJdTggcmVhc29uOwogCXU4IHJlc2VydmVkWzNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBFbmNyeXB0aW9uIGtleSBjb21tYW5kcyAqLwogc3RydWN0IGl3bV91bWFjX2tleV93ZXA0MCB7CkBAIC00MDAsNyArNDAwLDcgQEAKIAl1OCBrZXlbV0xBTl9LRVlfTEVOX1dFUDQwXTsKIAl1OCBzdGF0aWNfa2V5OwogCXU4IHJlc2VydmVkWzJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXdtX3VtYWNfa2V5X3dlcDEwNCB7CiAJc3RydWN0IGl3bV91bWFjX3dpZmlfaWYgaGRyOwpAQCAtNDA4LDcgKzQwOCw3IEBACiAJdTgga2V5W1dMQU5fS0VZX0xFTl9XRVAxMDRdOwogCXU4IHN0YXRpY19rZXk7CiAJdTggcmVzZXJ2ZWRbMl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSVdNX1RLSVBfS0VZX1NJWkUgMTYKICNkZWZpbmUgSVdNX1RLSVBfTUlDX1NJWkUgOApAQCAtNDIwLDcgKzQyMCw3IEBACiAJdTggdGtpcF9rZXlbSVdNX1RLSVBfS0VZX1NJWkVdOwogCXU4IG1pY19yeF9rZXlbSVdNX1RLSVBfTUlDX1NJWkVdOwogCXU4IG1pY190eF9rZXlbSVdNX1RLSVBfTUlDX1NJWkVdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXdtX3VtYWNfa2V5X2NjbXAgewogCXN0cnVjdCBpd21fdW1hY193aWZpX2lmIGhkcjsKQEAgLTQyOCwyNyArNDI4LDI3IEBACiAJdTggaXZfY291bnRbNl07CiAJdTggcmVzZXJ2ZWRbMl07CiAJdTgga2V5W1dMQU5fS0VZX0xFTl9DQ01QXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bV91bWFjX2tleV9yZW1vdmUgewogCXN0cnVjdCBpd21fdW1hY193aWZpX2lmIGhkcjsKIAlzdHJ1Y3QgaXdtX3VtYWNfa2V5X2hkciBrZXlfaGRyOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXdtX3VtYWNfdHhfa2V5X2lkIHsKIAlzdHJ1Y3QgaXdtX3VtYWNfd2lmaV9pZiBoZHI7CiAJdTgga2V5X2lkeDsKIAl1OCByZXNlcnZlZFszXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bV91bWFjX3B3cl90cmlnZ2VyIHsKIAlzdHJ1Y3QgaXdtX3VtYWNfd2lmaV9pZiBoZHI7CiAJX19sZTMyIHJlc2V2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpd21fdW1hY19jbWRfc3RhdHNfcmVxIHsKIAlfX2xlMzIgZmxhZ3M7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpd21fdW1hY19jbWRfc3RvcF9yZXN1bWVfdHggewogCXU4IGZsYWdzOwpAQCAtNDU2LDcgKzQ1Niw3IEBACiAJX19sZTE2IHN0b3BfcmVzdW1lX3RpZF9tc2s7CiAJX19sZTE2IGxhc3Rfc2VxX251bVtJV01fVU1BQ19USURfTlJdOwogCXUxNiByZXNlcnZlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBJV01fQ01EX1BNS0lEX0FERCAgIDEKICNkZWZpbmUgSVdNX0NNRF9QTUtJRF9ERUwgICAyCkBAIC00NjgsNyArNDY4LDcgQEAKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAJX19sZTE2IHJlc2VydmVkOwogCXU4IHBta2lkW1dMQU5fUE1LSURfTEVOXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogTE1BQyBjb21tYW5kcyAqLwogaW50IGl3bV9yZWFkX21hYyhzdHJ1Y3QgaXdtX3ByaXYgKml3bSwgdTggKm1hYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvaGFsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvaGFsLmMKaW5kZXggOTUzMWIxOC4uOTA3YWM4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2hhbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9oYWwuYwpAQCAtNTQsNyArNTQsNyBAQAogICogICBMTUFDLiBJZiB5b3UgbG9vayBhdCBMTUFDIGNvbW1hbmRzIHlvdSdsbCBzZSB0aGF0IHRoZXkKICAqICAgYXJlIGFjdHVhbGx5IHJlZ3VsYXIgaXdsd2lmaSB0YXJnZXQgY29tbWFuZHMgZW5jYXBzdWxhdGVkCiAgKiAgIGludG8gYSBzcGVjaWFsIFVNQUMgY29tbWFuZCBjYWxsZWQgVU1BQyBwYXNzdGhyb3VnaC4KLSAqICAgVGhpcyBpcyBkdWUgdG8gdGhlIGZhY3QgdGhlIHRoZSBob3N0IHRhbGtzIGV4Y2x1c2l2ZWx5CisgKiAgIFRoaXMgaXMgZHVlIHRvIHRoZSBmYWN0IHRoZSBob3N0IHRhbGtzIGV4Y2x1c2l2ZWx5CiAgKiAgIHRvIHRoZSBVTUFDIGFuZCBzbyB0aGVyZSBuZWVkcyB0byBiZSBhIHNwZWNpYWwgVU1BQwogICogICBjb21tYW5kIGZvciB0YWxraW5nIHRvIHRoZSBMTUFDLgogICogICBUaGlzIGlzIGhvdyBhIHdpZmkgY29tbWFuZCBpcyBsYXllZCBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvaXdtLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvaXdtLmgKaW5kZXggMTMyNjZjMy4uNTFkN2VmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2l3bS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9pd20uaApAQCAtMTYyLDcgKzE2Miw3IEBACiAJdTggbWFjW0VUSF9BTEVOXTsKIAl1OCBrZXlfaWR4OwogCXU4IG11bHRpY2FzdDsgLyogQkNhc3QgZW5jcnlwdCAmIEJDYXN0IGRlY3J5cHQgb2YgZnJhbWVzIEZST00gbWFjICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpd21fa2V5IHsKIAlzdHJ1Y3QgaXdtX3VtYWNfa2V5X2hkciBoZHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvbG1hYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2xtYWMuaAppbmRleCBhODU1YTk5Li41ZGRjZGY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvbG1hYy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9sbWFjLmgKQEAgLTQzLDcgKzQzLDcgQEAKIAl1OCBpZDsKIAl1OCBmbGFnczsKIAlfX2xlMTYgc2VxX251bTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogTE1BQyBjb21tYW5kcyAqLwogI2RlZmluZSBDQUxJQl9DRkdfRkxBR19TRU5EX0NPTVBMRVRFX05URllfQUZURVJfTVNLICAweDEKQEAgLTU0LDIzICs1NCwyMyBAQAogCV9fbGUzMiBzZW5kX3JlczsgLyogMSBmb3Igc2VuZGluZyBiYWNrIHJlc3VsdHMgKi8KIAlfX2xlMzIgYXBwbHlfcmVzOyAvKiAxIGZvciBhcHBseWluZyBjYWxpYnJhdGlvbiByZXN1bHRzIHRvIEhXICovCiAJX19sZTMyIHJlc2VydmVkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXdtX2xtYWNfY2FsX2NmZ19zdGF0dXMgewogCXN0cnVjdCBpd21fbG1hY19jYWxfY2ZnX2VsdCBpbml0OwogCXN0cnVjdCBpd21fbG1hY19jYWxfY2ZnX2VsdCBwZXJpb2RpYzsKIAlfX2xlMzIgZmxhZ3M7IC8qIENBTElCX0NGR19GTEFHX1NFTkRfQ09NUExFVEVfTlRGWV9BRlRFUl9NU0sgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bV9sbWFjX2NhbF9jZmdfY21kIHsKIAlzdHJ1Y3QgaXdtX2xtYWNfY2FsX2NmZ19zdGF0dXMgdWNvZGVfY2ZnOwogCXN0cnVjdCBpd21fbG1hY19jYWxfY2ZnX3N0YXR1cyBkcml2ZXJfY2ZnOwogCV9fbGUzMiByZXNlcnZlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bV9sbWFjX2NhbF9jZmdfcmVzcCB7CiAJX19sZTMyIHN0YXR1czsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBJV01fQ0FSRF9TVEFURV9TV19IV19FTkFCTEVECTB4MDAKICNkZWZpbmUgSVdNX0NBUkRfU1RBVEVfSFdfRElTQUJMRUQJMHgwMQpAQCAtODAsNyArODAsNyBAQAogCiBzdHJ1Y3QgaXdtX2xtYWNfY2FyZF9zdGF0ZSB7CiAJX19sZTMyIGZsYWdzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKioKICAqIENPRVhfUFJJT1JJVFlfVEFCTEVfQ01ECkBAIC0xMzEsNyArMTMxLDcgQEAKIAl1OCB3aW5fbWVkX3ByaW87CiAJdTggcmVzZXJ2ZWQ7CiAJdTggZmxhZ3M7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgQ09FWF9GTEFHU19TVEFfVEFCTEVfVkFMSURfTVNLCQkweDEKICNkZWZpbmUgQ09FWF9GTEFHU19VTkFTU09DX1dBS0VVUF9VTUFTS19NU0sJMHg0CkBAIC0xNDIsNyArMTQyLDcgQEAKIAl1OCBmbGFnczsKIAl1OCByZXNlcnZlZFszXTsKIAlzdHJ1Y3QgY29leF9ldmVudCBzdGFfcHJpb1tDT0VYX0VWRU5UU19OVU1dOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBDb2V4aXN0ZW5jZSBkZWZpbml0aW9ucwogICoKQEAgLTE5Miw3ICsxOTIsNyBAQAogCXUzMiBleGl0X3RocmVzaG9sZDsKIAl1MzIgcmVzZXJ2ZWQ7CiAJdTMyIGVudHJ5X3RocmVzaG9sZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogCiAvKiBMTUFDIE9QIENPREVTICovCkBAIC00MjgsNyArNDI4LDcgQEAKIAl1OCBmaXJzdF9ncnA7CiAJdTggZ3JwX251bTsKIAl1OCBhbGxfZGF0YV92YWxpZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBJV01fTE1BQ19DQUxJQl9GUkVRX0dST1VQU19OUgk3CiAjZGVmaW5lIElXTV9DQUxJQl9GUkVRX0dST1VQU19OUgk1CkBAIC00MzcsMjAgKzQzNywyMCBAQAogc3RydWN0IGl3bV9jYWxpYl9yeGlxX2VudHJ5IHsKIAl1MTYgcHRhbV9wb3N0ZGlzdF9hcnM7CiAJdTE2IHB0YW1fcG9zdGRpc3RfYXJjOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXdtX2NhbGliX3J4aXFfZ3JvdXAgewogCXN0cnVjdCBpd21fY2FsaWJfcnhpcV9lbnRyeSBtb2RlW0lXTV9DQUxJQl9EQ19NT0RFU19OUl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpd21fbG1hY19jYWxpYl9yeGlxIHsKIAlzdHJ1Y3QgaXdtX2NhbGliX3J4aXFfZ3JvdXAgZ3JvdXBbSVdNX0xNQUNfQ0FMSUJfRlJFUV9HUk9VUFNfTlJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXdtX2NhbGliX3J4aXEgewogCXN0cnVjdCBpd21fbG1hY19jYWxpYl9oZHIgaGRyOwogCXN0cnVjdCBpd21fY2FsaWJfcnhpcV9ncm91cCBncm91cFtJV01fQ0FMSUJfRlJFUV9HUk9VUFNfTlJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIExNQUNfU1RBX0lEX1NFRUQJMHgwZgogI2RlZmluZSBMTUFDX1NUQV9JRF9QT1MJCTAKQEAgLTQ2Myw3ICs0NjMsNyBAQAogCXU4IHBhX2ludGVnX3Jlc19BWzNdOwogCXU4IHBhX2ludGVnX3Jlc19CWzNdOwogCXU4IHBhX2ludGVnX3Jlc19DWzNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXdtX2xtYWNfdHhfcmVzcCB7CiAJdTggZnJhbWVfY250OyAvKiAxLW5vIGFnZ3JlZ2F0aW9uLCBncmVhdGVyIHRoZW4gMSAtIGFnZ3JlZ2F0aW9uICovCkBAIC00NzksNiArNDc5LDYgQEAKIAl1OCByYV90aWQ7CiAJX19sZTE2IGZyYW1lX2N0bDsKIAlfX2xlMzIgc3RhdHVzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3J4LmMKaW5kZXggZTExODRkZS4uYzAyZmNlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3J4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3J4LmMKQEAgLTMyMSwxNCArMzIxLDE0IEBACiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KIAotCXRpY2tldF9ub2RlLT50aWNrZXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXdtX3J4X3RpY2tldCksIEdGUF9LRVJORUwpOworCXRpY2tldF9ub2RlLT50aWNrZXQgPSBrbWVtZHVwKHRpY2tldCwgc2l6ZW9mKHN0cnVjdCBpd21fcnhfdGlja2V0KSwKKwkJCQkgICAgICBHRlBfS0VSTkVMKTsKIAlpZiAoIXRpY2tldF9ub2RlLT50aWNrZXQpIHsKIAkJSVdNX0VSUihpd20sICJDb3VsZG4ndCBhbGxvY2F0ZSBSWCB0aWNrZXRcbiIpOwogCQlrZnJlZSh0aWNrZXRfbm9kZSk7CiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KIAotCW1lbWNweSh0aWNrZXRfbm9kZS0+dGlja2V0LCB0aWNrZXQsIHNpemVvZihzdHJ1Y3QgaXdtX3J4X3RpY2tldCkpOwogCUlOSVRfTElTVF9IRUFEKCZ0aWNrZXRfbm9kZS0+bm9kZSk7CiAKIAlyZXR1cm4gdGlja2V0X25vZGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvdW1hYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3VtYWMuaAppbmRleCAwY2JiYTNlLi40YTEzN2QzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvdW1hYy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS91bWFjLmgKQEAgLTQyLDE5ICs0MiwxOSBAQAogc3RydWN0IGl3bV91ZG1hX2luX2hkciB7CiAJX19sZTMyIGNtZDsKIAlfX2xlMzIgc2l6ZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bV91ZG1hX291dF9ub253aWZpX2hkciB7CiAJX19sZTMyIGNtZDsKIAlfX2xlMzIgYWRkcjsKIAlfX2xlMzIgb3AxX3N6OwogCV9fbGUzMiBvcDI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpd21fdWRtYV9vdXRfd2lmaV9oZHIgewogCV9fbGUzMiBjbWQ7CiAJX19sZTMyIG1ldGFfZGF0YTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogU2VxdWVuY2UgbnVtYmVyaW5nICovCiAjZGVmaW5lIFVNQUNfV0lGSV9TRVFfTlVNX0JBU0UJCTEKQEAgLTQwOCwxMiArNDA4LDEyIEBACiAJX19sZTE2IGZsYWdzOwogCXU4IHBheWxvYWRfb2Zmc2V0OyAvKiBpbmNsdWRlczogTUFDIGhlYWRlciwgcGFkLCBJViAqLwogCXU4IHRhaWxfbGVuOyAvKiBpbmNsdWRlczogTUlDLCBJQ1YsIENSQyAody9vIFNUQVRVUykgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bV9yeF9tcGR1X2hkciB7CiAJX19sZTE2IGxlbjsKIAlfX2xlMTYgcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIFVNQUMgU1cgV0lGSSBBUEkgKi8KIApAQCAtNDIxLDMxICs0MjEsMzEgQEAKIAl1OCBjbWQ7CiAJdTggZmxhZ3M7CiAJX19sZTE2IHNlcV9udW07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpd21fdW1hY19md19jbWRfaGRyIHsKIAlfX2xlMzIgbWV0YV9kYXRhOwogCXN0cnVjdCBpd21fZGV2X2NtZF9oZHIgY21kOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXdtX3VtYWNfd2lmaV9vdXRfaGRyIHsKIAlzdHJ1Y3QgaXdtX3VkbWFfb3V0X3dpZmlfaGRyIGh3X2hkcjsKIAlzdHJ1Y3QgaXdtX3VtYWNfZndfY21kX2hkciBzd19oZHI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpd21fdW1hY19ub253aWZpX291dF9oZHIgewogCXN0cnVjdCBpd21fdWRtYV9vdXRfbm9ud2lmaV9oZHIgaHdfaGRyOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXdtX3VtYWNfd2lmaV9pbl9oZHIgewogCXN0cnVjdCBpd21fdWRtYV9pbl9oZHIgaHdfaGRyOwogCXN0cnVjdCBpd21fdW1hY19md19jbWRfaGRyIHN3X2hkcjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bV91bWFjX25vbndpZmlfaW5faGRyIHsKIAlzdHJ1Y3QgaXdtX3VkbWFfaW5faGRyIGh3X2hkcjsKIAlfX2xlMzIgdGltZV9zdGFtcDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBJV01fVU1BQ19QQUdFX1NJWkUJMHgyMDAKIApAQCAtNTIxLDcgKzUyMSw3IEBACiAJdTggc3RhdHVzOwogCXU4IGZsYWdzOwogCV9fbGUxNiBidWZfc2l6ZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBVTUFDX1JPQU1fUkVBU09OX0ZJUlNUX1NFTEVDVElPTgkweDEKICNkZWZpbmUgVU1BQ19ST0FNX1JFQVNPTl9BUF9ERUFVVEgJCTB4MgpAQCAtNTM1LDcgKzUzNSw3IEBACiAJX19sZTMyIHJvYW1fcmVhc29uOwogCXU4IGJzc2lkW0VUSF9BTEVOXTsKIAl1OCByZXNlcnZlZFsyXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBVTUFDX0FTU09DX0NPTVBMRVRFX1NVQ0NFU1MJCTB4MAogI2RlZmluZSBVTUFDX0FTU09DX0NPTVBMRVRFX0ZBSUxVUkUJCTB4MQpAQCAtNTQ2LDcgKzU0Niw3IEBACiAJdTggYnNzaWRbRVRIX0FMRU5dOwogCXU4IGJhbmQ7CiAJdTggY2hhbm5lbDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBVTUFDX1BST0ZJTEVfSU5WQUxJRF9BU1NPQ19USU1FT1VUCTB4MAogI2RlZmluZSBVTUFDX1BST0ZJTEVfSU5WQUxJRF9ST0FNX1RJTUVPVVQJMHgxCkBAIC01NTYsNyArNTU2LDcgQEAKIHN0cnVjdCBpd21fdW1hY19ub3RpZl9wcm9maWxlX2ludmFsaWRhdGUgewogCXN0cnVjdCBpd21fdW1hY19ub3RpZl93aWZpX2lmIG1sbWVfaGRyOwogCV9fbGUzMiByZWFzb247Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgVU1BQ19TQ0FOX1JFU1VMVF9TVUNDRVNTICAweDAKICNkZWZpbmUgVU1BQ19TQ0FOX1JFU1VMVF9BQk9SVEVEICAweDEKQEAgLTU2OCw3ICs1NjgsNyBAQAogCV9fbGUzMiB0eXBlOwogCV9fbGUzMiByZXN1bHQ7CiAJdTggc2VxX251bTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBVTUFDX09QQ09ERV9BRERfTU9ESUZZCTB4MAogI2RlZmluZSBVTUFDX09QQ09ERV9SRU1PVkUJMHgxCkBAIC01ODIsNyArNTgyLDcgQEAKIAl1OCBtYWNfYWRkcltFVEhfQUxFTl07CiAJdTggc3RhX2lkOyAvKiBiaXRzIDAtMzogc3RhdGlvbiBJRCwgYml0cyA0LTc6IHN0YXRpb24gY29sb3IgKi8KIAl1OCBmbGFnczsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBVTUFDX0JBTkRfMkdIWiAwCiAjZGVmaW5lIFVNQUNfQkFORF81R0haIDEKQEAgLTYwMSw3ICs2MDEsNyBAQAogCXM4IHJzc2k7CiAJdTggcmVzZXJ2ZWQ7CiAJdTggZnJhbWVfYnVmWzFdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIElXTV9CU1NfUkVNT1ZFX0lOREVYX01TSyAgICAgICAgICAgMHgwZmZmCiAjZGVmaW5lIElXTV9CU1NfUkVNT1ZFX0ZMQUdTX01TSyAgICAgICAgICAgMHhmYzAwCkBAIC02MTQsMTMgKzYxNCwxMyBAQAogCXN0cnVjdCBpd21fdW1hY19ub3RpZl93aWZpX2lmIG1sbWVfaGRyOwogCV9fbGUzMiBjb3VudDsKIAlfX2xlMTYgZW50cmllc1swXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bV91bWFjX25vdGlmX21ndF9mcmFtZSB7CiAJc3RydWN0IGl3bV91bWFjX25vdGlmX3dpZmlfaWYgbWxtZV9oZHI7CiAJX19sZTE2IGxlbjsKIAl1OCBmcmFtZVsxXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3bV91bWFjX25vdGlmX2FsaXZlIHsKIAlzdHJ1Y3QgaXdtX3VtYWNfd2lmaV9pbl9oZHIgaGRyOwpAQCAtNjMwLDEzICs2MzAsMTMgQEAKIAlfX2xlMTYgcmVzZXJ2ZWQyOwogCV9fbGUxNiBwYWdlX2dycF9jb3VudDsKIAlfX2xlMzIgcGFnZV9ncnBfc3RhdGVbSVdNX01BQ1NfT1VUX0dST1VQU107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpd21fdW1hY19ub3RpZl9pbml0X2NvbXBsZXRlIHsKIAlzdHJ1Y3QgaXdtX3VtYWNfd2lmaV9pbl9oZHIgaGRyOwogCV9fbGUxNiBzdGF0dXM7CiAJX19sZTE2IHJlc2VydmVkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBlcnJvciBjYXRlZ29yaWVzICovCiBlbnVtIHsKQEAgLTY2NywxMiArNjY3LDEyIEBACiAJX19sZTMyIGRibV9idWZfZW5kOwogCV9fbGUzMiBkYm1fYnVmX3dyaXRlX3B0cjsKIAlfX2xlMzIgZGJtX2J1Zl9jeWNsZV9jbnQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpd21fdW1hY19ub3RpZl9lcnJvciB7CiAJc3RydWN0IGl3bV91bWFjX3dpZmlfaW5faGRyIGhkcjsKIAlzdHJ1Y3QgaXdtX2Z3X2Vycm9yX2hkciBlcnI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgVU1BQ19ERUFMTE9DX05URllfQ0hBTkdFU19DTlRfUE9TCTAKICNkZWZpbmUgVU1BQ19ERUFMTE9DX05URllfQ0hBTkdFU19DTlRfU0VFRAkweGZmCkBAIC02ODcsMjAgKzY4NywyMCBAQAogCXN0cnVjdCBpd21fdW1hY193aWZpX2luX2hkciBoZHI7CiAJX19sZTMyIGNoYW5nZXM7CiAJX19sZTMyIGdycF9pbmZvW0lXTV9NQUNTX09VVF9HUk9VUFNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXdtX3VtYWNfbm90aWZfd2lmaV9zdGF0dXMgewogCXN0cnVjdCBpd21fdW1hY193aWZpX2luX2hkciBoZHI7CiAJX19sZTE2IHN0YXR1czsKIAlfX2xlMTYgcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpd21fdW1hY19ub3RpZl9yeF90aWNrZXQgewogCXN0cnVjdCBpd21fdW1hY193aWZpX2luX2hkciBoZHI7CiAJdTggbnVtX3RpY2tldHM7CiAJdTggcmVzZXJ2ZWRbM107CiAJc3RydWN0IGl3bV9yeF90aWNrZXQgdGlja2V0c1sxXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogVHgvUnggcmF0ZXMgd2luZG93IChudW1iZXIgb2YgbWF4IG9mIGxhc3QgdXBkYXRlIHdpbmRvdyBwZXIgc2Vjb25kKSAqLwogI2RlZmluZSBVTUFDX05URl9SQVRFX1NBTVBMRV9OUgk0CkBAIC03NTgsNyArNzU4LDcgQEAKIAlfX2xlMzIgcm9hbV91bmFzc29jOwogCV9fbGUzMiByb2FtX2RlYXV0aDsKIAlfX2xlMzIgcm9hbV9hcF9sb2FkYmxhbmNlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIFVNQUNfU1RPUF9UWF9GTEFHICAgIDB4MQogI2RlZmluZSBVTUFDX1JFU1VNRV9UWF9GTEFHICAweDIKQEAgLTc3MCw3ICs3NzAsNyBAQAogCXU4IGZsYWdzOyAvKiBVTUFDXypfVFhfRkxBR18qICovCiAJdTggc3RhX2lkOwogCV9fbGUxNiBzdG9wX3Jlc3VtZV90aWRfbXNrOyAvKiB0aWQgYml0bWFzayAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIFVNQUNfTUFYX05VTV9QTUtJRFMgNAogCkBAIC03NzksNyArNzc5LDcgQEAKIAl1OCBvaWQ7CiAJdTggZmxhZ3M7CiAJX19sZTE2IGJ1Zl9zaXplOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIElXTV9TRVFfTlVNX0hPU1RfTVNLCTB4MDAwMAogI2RlZmluZSBJV01fU0VRX05VTV9VTUFDX01TSwkweDQwMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvTWFrZWZpbGUKaW5kZXggNDVlODcwZS4uZjdkMDFiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvTWFrZWZpbGUKQEAgLTEsNCArMSwzIEBACi1saWJlcnRhcy15ICs9IGFzc29jLm8KIGxpYmVydGFzLXkgKz0gY2ZnLm8KIGxpYmVydGFzLXkgKz0gY21kLm8KIGxpYmVydGFzLXkgKz0gY21kcmVzcC5vCkBAIC02LDkgKzUsNyBAQAogbGliZXJ0YXMteSArPSBldGh0b29sLm8KIGxpYmVydGFzLXkgKz0gbWFpbi5vCiBsaWJlcnRhcy15ICs9IHJ4Lm8KLWxpYmVydGFzLXkgKz0gc2Nhbi5vCiBsaWJlcnRhcy15ICs9IHR4Lm8KLWxpYmVydGFzLXkgKz0gd2V4dC5vCiBsaWJlcnRhcy0kKENPTkZJR19MSUJFUlRBU19NRVNIKSArPSBtZXNoLm8KIAogdXNiOHh4eC1vYmpzICs9IGlmX3VzYi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9SRUFETUUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9SRUFETUUKaW5kZXggMjcyNmMwNC4uNjBmZDFhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvUkVBRE1FCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL1JFQURNRQpAQCAtMjI2LDYgKzIyNiwxOCBAQAogICAgIEFsbCBlbnRyaWVzIGluIHRoZSBzY2FuIHRhYmxlIChub3QganVzdCB0aGUgbmV3IHNjYW4gZGF0YSB3aGVuIGtlZXA9MSkKICAgICB3aWxsIGJlIGRpc3BsYXllZCB1cG9uIGNvbXBsZXRpb24gYnkgdXNlIG9mIHRoZSBnZXRzY2FudGFibGUgaW9jdGwuCiAKK2hvc3RzbGVlcAorCVRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGVuYWJsZS9kaXNhYmxlIGhvc3Qgc2xlZXAuCisJTm90ZTogSG9zdCBzbGVlcCBwYXJhbWV0ZXJzIHNob3VsZCBiZSBjb25maWd1cmVkIHVzaW5nCisJImV0aHRvb2wgLXMgZXRoWCB3b2wgWCIgY29tbWFuZCBiZWZvcmUgZW5hYmxpbmcgaG9zdCBzbGVlcC4KKworCVBhdGg6IC9zeXMva2VybmVsL2RlYnVnL2xpYmVydGFzX3dpcmVsZXNzL2V0aFgvCisKKwlVc2FnZToKKwkJY2F0IGhvc3RzbGVlcDogcmVhZHMgdGhlIGN1cnJlbnQgaG9zdHNsZWVwIHN0YXRlCisJCWVjaG8gIjEiID4gaG9zdHNsZWVwIDogZW5hYmxlIGhvc3Qgc2xlZXAuCisJCWVjaG8gIjAiID4gaG9zdHNsZWVwIDogZGlzYWJsZSBob3N0IHNsZWVwCisKID09PT09PT09PT09PT09PT09PT09PT09PQogSVdDT05GSUcgQ09NTUFORFMKID09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvYXNzb2MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Fzc29jLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMDYwNzBlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Fzc29jLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjY0ICswLDAgQEAKLS8qIENvcHlyaWdodCAoQykgMjAwNiwgUmVkIEhhdCwgSW5jLiAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KLQotI2luY2x1ZGUgImFzc29jLmgiCi0jaW5jbHVkZSAiZGVjbC5oIgotI2luY2x1ZGUgImhvc3QuaCIKLSNpbmNsdWRlICJzY2FuLmgiCi0jaW5jbHVkZSAiY21kLmgiCi0KLXN0YXRpYyBjb25zdCB1OCBic3NpZF9hbnlbRVRIX0FMRU5dICBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoMikpKSA9Ci0JeyAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGIH07Ci1zdGF0aWMgY29uc3QgdTggYnNzaWRfb2ZmW0VUSF9BTEVOXSAgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDIpKSkgPQotCXsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi0vKiBUaGUgZmlybXdhcmUgbmVlZHMgdGhlIGZvbGxvd2luZyBiaXRzIG1hc2tlZCBvdXQgb2YgdGhlIGJlYWNvbi1kZXJpdmVkCi0gKiBjYXBhYmlsaXR5IGZpZWxkIHdoZW4gYXNzb2NpYXRpbmcvam9pbmluZyB0byBhIEJTUzoKLSAqICA5IChRb1MpLCAxMSAoQVBTRCksIDEyICh1bnVzZWQpLCAxNCAodW51c2VkKSwgMTUgKHVudXNlZCkKLSAqLwotI2RlZmluZSBDQVBJTkZPX01BU0sJKH4oMHhkYTAwKSkKLQotLyoqCi0gKiA4MDIuMTFiL2cgc3VwcG9ydGVkIGJpdHJhdGVzIChpbiA1MDBLYi9zIHVuaXRzKQotICovCi11OCBsYnNfYmdfcmF0ZXNbTUFYX1JBVEVTXSA9Ci0gICAgeyAweDAyLCAweDA0LCAweDBiLCAweDE2LCAweDBjLCAweDEyLCAweDE4LCAweDI0LCAweDMwLCAweDQ4LCAweDYwLCAweDZjLAotMHgwMCwgMHgwMCB9OwotCi0KLXN0YXRpYyBpbnQgYXNzb2NfaGVscGVyX3dlcF9rZXlzKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJc3RydWN0IGFzc29jX3JlcXVlc3QgKmFzc29jX3JlcSk7Ci0KLS8qKgotICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIGZpbmRzIGNvbW1vbiByYXRlcyBiZXR3ZWVuIHJhdGVzIGFuZCBjYXJkIHJhdGVzLgotICoKLSAqIEl0IHdpbGwgZmlsbCBjb21tb24gcmF0ZXMgaW4gcmF0ZXMgYXMgb3V0cHV0IGlmIGZvdW5kLgotICoKLSAqIE5PVEU6IFNldHRpbmcgdGhlIE1TQiBvZiB0aGUgYmFzaWMgcmF0ZXMgbmVlZCB0byBiZSB0YWtlbgotICogICBjYXJlLCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbgotICoKLSAqICBAcGFyYW0gcHJpdiAgICAgQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gcmF0ZXMgICAgICAgdGhlIGJ1ZmZlciB3aGljaCBrZWVwcyBpbnB1dCBhbmQgb3V0cHV0Ci0gKiAgQHBhcmFtIHJhdGVzX3NpemUgIHRoZSBzaXplIG9mIHJhdGVzIGJ1ZmZlcjsgbmV3IHNpemUgb2YgYnVmZmVyIG9uIHJldHVybiwKLSAqICAgICAgICAgICAgICAgICAgICAgd2hpY2ggd2lsbCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gb3JpZ2luYWwgcmF0ZXNfc2l6ZQotICoKLSAqICBAcmV0dXJuICAgICAgICAgICAgMCBvbiBzdWNjZXNzLCBvciAtMSBvbiBlcnJvcgotICovCi1zdGF0aWMgaW50IGdldF9jb21tb25fcmF0ZXMoc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCXU4ICpyYXRlcywKLQl1MTYgKnJhdGVzX3NpemUpCi17Ci0JaW50IGksIGo7Ci0JdTggaW50ZXJzZWN0aW9uW01BWF9SQVRFU107Ci0JdTE2IGludGVyc2VjdGlvbl9zaXplOwotCXUxNiBudW1fcmF0ZXMgPSAwOwotCi0JaW50ZXJzZWN0aW9uX3NpemUgPSBtaW5fdCh1MTYsICpyYXRlc19zaXplLCBBUlJBWV9TSVpFKGludGVyc2VjdGlvbikpOwotCi0JLyogQWxsb3cgZWFjaCByYXRlIGZyb20gJ3JhdGVzJyB0aGF0IGlzIHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsYnNfYmdfcmF0ZXMpICYmIGxic19iZ19yYXRlc1tpXTsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBpbnRlcnNlY3Rpb25fc2l6ZSAmJiByYXRlc1tqXTsgaisrKSB7Ci0JCQlpZiAocmF0ZXNbal0gPT0gbGJzX2JnX3JhdGVzW2ldKQotCQkJCWludGVyc2VjdGlvbltudW1fcmF0ZXMrK10gPSByYXRlc1tqXTsKLQkJfQotCX0KLQotCWxic19kZWJfaGV4KExCU19ERUJfSk9JTiwgIkFQIHJhdGVzICAgICIsIHJhdGVzLCAqcmF0ZXNfc2l6ZSk7Ci0JbGJzX2RlYl9oZXgoTEJTX0RFQl9KT0lOLCAiY2FyZCByYXRlcyAgIiwgbGJzX2JnX3JhdGVzLAotCQkJQVJSQVlfU0laRShsYnNfYmdfcmF0ZXMpKTsKLQlsYnNfZGViX2hleChMQlNfREVCX0pPSU4sICJjb21tb24gcmF0ZXMiLCBpbnRlcnNlY3Rpb24sIG51bV9yYXRlcyk7Ci0JbGJzX2RlYl9qb2luKCJUWCBkYXRhIHJhdGUgMHglMDJ4XG4iLCBwcml2LT5jdXJfcmF0ZSk7Ci0KLQlpZiAoIXByaXYtPmVuYWJsZWh3YXV0bykgewotCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3JhdGVzOyBpKyspIHsKLQkJCWlmIChpbnRlcnNlY3Rpb25baV0gPT0gcHJpdi0+Y3VyX3JhdGUpCi0JCQkJZ290byBkb25lOwotCQl9Ci0JCWxic19wcl9hbGVydCgiUHJldmlvdXNseSBzZXQgZml4ZWQgZGF0YSByYXRlICUjeCBpc24ndCAiCi0JCSAgICAgICAiY29tcGF0aWJsZSB3aXRoIHRoZSBuZXR3b3JrLlxuIiwgcHJpdi0+Y3VyX3JhdGUpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi1kb25lOgotCW1lbXNldChyYXRlcywgMCwgKnJhdGVzX3NpemUpOwotCSpyYXRlc19zaXplID0gbnVtX3JhdGVzOwotCW1lbWNweShyYXRlcywgaW50ZXJzZWN0aW9uLCBudW1fcmF0ZXMpOwotCXJldHVybiAwOwotfQotCi0KLS8qKgotICogIEBicmllZiBTZXRzIHRoZSBNU0Igb24gYmFzaWMgcmF0ZXMgYXMgdGhlIGZpcm13YXJlIHJlcXVpcmVzCi0gKgotICogU2NhbiB0aHJvdWdoIGFuIGFycmF5IGFuZCBzZXQgdGhlIE1TQiBmb3IgYmFzaWMgZGF0YSByYXRlcy4KLSAqCi0gKiAgQHBhcmFtIHJhdGVzICAgICBidWZmZXIgb2YgZGF0YSByYXRlcwotICogIEBwYXJhbSBsZW4gICAgICAgc2l6ZSBvZiBidWZmZXIKLSAqLwotc3RhdGljIHZvaWQgbGJzX3NldF9iYXNpY19yYXRlX2ZsYWdzKHU4ICpyYXRlcywgc2l6ZV90IGxlbikKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQlpZiAocmF0ZXNbaV0gPT0gMHgwMiB8fCByYXRlc1tpXSA9PSAweDA0IHx8Ci0JCSAgICByYXRlc1tpXSA9PSAweDBiIHx8IHJhdGVzW2ldID09IDB4MTYpCi0JCQlyYXRlc1tpXSB8PSAweDgwOwotCX0KLX0KLQotCi1zdGF0aWMgdTggaXdfYXV0aF90b19pZWVlX2F1dGgodTggYXV0aCkKLXsKLQlpZiAoYXV0aCA9PSBJV19BVVRIX0FMR19PUEVOX1NZU1RFTSkKLQkJcmV0dXJuIDB4MDA7Ci0JZWxzZSBpZiAoYXV0aCA9PSBJV19BVVRIX0FMR19TSEFSRURfS0VZKQotCQlyZXR1cm4gMHgwMTsKLQllbHNlIGlmIChhdXRoID09IElXX0FVVEhfQUxHX0xFQVApCi0JCXJldHVybiAweDgwOwotCi0JbGJzX2RlYl9qb2luKCIlczogaW52YWxpZCBhdXRoIGFsZyAweCVYXG4iLCBfX2Z1bmNfXywgYXV0aCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIHRoZSBhdXRoZW50aWNhdGUgY29tbWFuZC4gIEFVVEhFTlRJQ0FURSBvbmx5Ci0gKiAgc2V0cyB0aGUgYXV0aGVudGljYXRpb24gc3VpdGUgZm9yIGZ1dHVyZSBhc3NvY2lhdGlvbnMsIGFzIHRoZSBmaXJtd2FyZQotICogIGhhbmRsZXMgYXV0aGVudGljYXRpb24gaW50ZXJuYWxseSBkdXJpbmcgdGhlIEFTU09DSUFURSBjb21tYW5kLgotICoKLSAqICBAcGFyYW0gcHJpdiAgICAgIEEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIGJzc2lkICAgICBUaGUgcGVlciBCU1NJRCB3aXRoIHdoaWNoIHRvIGF1dGhlbnRpY2F0ZQotICogIEBwYXJhbSBhdXRoICAgICAgVGhlIGF1dGhlbnRpY2F0aW9uIG1vZGUgdG8gdXNlIChmcm9tIHdpcmVsZXNzLmgpCi0gKgotICogIEByZXR1cm4gICAgICAgICAwIG9yIC0xCi0gKi8KLXN0YXRpYyBpbnQgbGJzX3NldF9hdXRoZW50aWNhdGlvbihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHU4IGJzc2lkWzZdLCB1OCBhdXRoKQotewotCXN0cnVjdCBjbWRfZHNfODAyXzExX2F1dGhlbnRpY2F0ZSBjbWQ7Ci0JaW50IHJldCA9IC0xOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0pPSU4pOwotCi0JY21kLmhkci5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGNtZCkpOwotCW1lbWNweShjbWQuYnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7Ci0KLQljbWQuYXV0aHR5cGUgPSBpd19hdXRoX3RvX2llZWVfYXV0aChhdXRoKTsKLQotCWxic19kZWJfam9pbigiQVVUSF9DTUQ6IEJTU0lEICVwTSwgYXV0aCAweCV4XG4iLCBic3NpZCwgY21kLmF1dGh0eXBlKTsKLQotCXJldCA9IGxic19jbWRfd2l0aF9yZXNwb25zZShwcml2LCBDTURfODAyXzExX0FVVEhFTlRJQ0FURSwgJmNtZCk7Ci0KLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9KT0lOLCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi0KLWludCBsYnNfY21kXzgwMl8xMV9zZXRfd2VwKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdWludDE2X3QgY21kX2FjdGlvbiwKLQkJCSAgIHN0cnVjdCBhc3NvY19yZXF1ZXN0ICphc3NvYykKLXsKLQlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9zZXRfd2VwIGNtZDsKLQlpbnQgcmV0ID0gMDsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DTUQpOwotCi0JbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKLQljbWQuaGRyLmNvbW1hbmQgPSBjcHVfdG9fbGUxNihDTURfODAyXzExX1NFVF9XRVApOwotCWNtZC5oZHIuc2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihjbWQpKTsKLQotCWNtZC5hY3Rpb24gPSBjcHVfdG9fbGUxNihjbWRfYWN0aW9uKTsKLQotCWlmIChjbWRfYWN0aW9uID09IENNRF9BQ1RfQUREKSB7Ci0JCWludCBpOwotCi0JCS8qIGRlZmF1bHQgdHgga2V5IGluZGV4ICovCi0JCWNtZC5rZXlpbmRleCA9IGNwdV90b19sZTE2KGFzc29jLT53ZXBfdHhfa2V5aWR4ICYKLQkJCQkJICAgQ01EX1dFUF9LRVlfSU5ERVhfTUFTSyk7Ci0KLQkJLyogQ29weSBrZXkgdHlwZXMgYW5kIG1hdGVyaWFsIHRvIGhvc3QgY29tbWFuZCBzdHJ1Y3R1cmUgKi8KLQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQkJc3RydWN0IGVuY19rZXkgKnBrZXkgPSAmYXNzb2MtPndlcF9rZXlzW2ldOwotCi0JCQlzd2l0Y2ggKHBrZXktPmxlbikgewotCQkJY2FzZSBLRVlfTEVOX1dFUF80MDoKLQkJCQljbWQua2V5dHlwZVtpXSA9IENNRF9UWVBFX1dFUF80MF9CSVQ7Ci0JCQkJbWVtbW92ZShjbWQua2V5bWF0ZXJpYWxbaV0sIHBrZXktPmtleSwgcGtleS0+bGVuKTsKLQkJCQlsYnNfZGViX2NtZCgiU0VUX1dFUDogYWRkIGtleSAlZCAoNDAgYml0KVxuIiwgaSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEtFWV9MRU5fV0VQXzEwNDoKLQkJCQljbWQua2V5dHlwZVtpXSA9IENNRF9UWVBFX1dFUF8xMDRfQklUOwotCQkJCW1lbW1vdmUoY21kLmtleW1hdGVyaWFsW2ldLCBwa2V5LT5rZXksIHBrZXktPmxlbik7Ci0JCQkJbGJzX2RlYl9jbWQoIlNFVF9XRVA6IGFkZCBrZXkgJWQgKDEwNCBiaXQpXG4iLCBpKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMDoKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJbGJzX2RlYl9jbWQoIlNFVF9XRVA6IGludmFsaWQga2V5ICVkLCBsZW5ndGggJWRcbiIsCi0JCQkJCSAgICBpLCBwa2V5LT5sZW4pOwotCQkJCXJldCA9IC0xOwotCQkJCWdvdG8gZG9uZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0gZWxzZSBpZiAoY21kX2FjdGlvbiA9PSBDTURfQUNUX1JFTU9WRSkgewotCQkvKiBBQ1RfUkVNT1ZFIGNsZWFycyBfYWxsXyBXRVAga2V5cyAqLwotCi0JCS8qIGRlZmF1bHQgdHgga2V5IGluZGV4ICovCi0JCWNtZC5rZXlpbmRleCA9IGNwdV90b19sZTE2KHByaXYtPndlcF90eF9rZXlpZHggJgotCQkJCQkgICBDTURfV0VQX0tFWV9JTkRFWF9NQVNLKTsKLQkJbGJzX2RlYl9jbWQoIlNFVF9XRVA6IHJlbW92ZSBrZXkgJWRcbiIsIHByaXYtPndlcF90eF9rZXlpZHgpOwotCX0KLQotCXJldCA9IGxic19jbWRfd2l0aF9yZXNwb25zZShwcml2LCBDTURfODAyXzExX1NFVF9XRVAsICZjbWQpOwotZG9uZToKLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9DTUQsICJyZXQgJWQiLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCBsYnNfY21kXzgwMl8xMV9lbmFibGVfcnNuKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdWludDE2X3QgY21kX2FjdGlvbiwKLQkJCSAgICAgIHVpbnQxNl90ICplbmFibGUpCi17Ci0Jc3RydWN0IGNtZF9kc184MDJfMTFfZW5hYmxlX3JzbiBjbWQ7Ci0JaW50IHJldDsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DTUQpOwotCi0JY21kLmhkci5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGNtZCkpOwotCWNtZC5hY3Rpb24gPSBjcHVfdG9fbGUxNihjbWRfYWN0aW9uKTsKLQotCWlmIChjbWRfYWN0aW9uID09IENNRF9BQ1RfR0VUKQotCQljbWQuZW5hYmxlID0gMDsKLQllbHNlIHsKLQkJaWYgKCplbmFibGUpCi0JCQljbWQuZW5hYmxlID0gY3B1X3RvX2xlMTYoQ01EX0VOQUJMRV9SU04pOwotCQllbHNlCi0JCQljbWQuZW5hYmxlID0gY3B1X3RvX2xlMTYoQ01EX0RJU0FCTEVfUlNOKTsKLQkJbGJzX2RlYl9jbWQoIkVOQUJMRV9SU046ICVkXG4iLCAqZW5hYmxlKTsKLQl9Ci0KLQlyZXQgPSBsYnNfY21kX3dpdGhfcmVzcG9uc2UocHJpdiwgQ01EXzgwMl8xMV9FTkFCTEVfUlNOLCAmY21kKTsKLQlpZiAoIXJldCAmJiBjbWRfYWN0aW9uID09IENNRF9BQ1RfR0VUKQotCQkqZW5hYmxlID0gbGUxNl90b19jcHUoY21kLmVuYWJsZSk7Ci0KLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9DTUQsICJyZXQgJWQiLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9vbmVfd3BhX2tleShzdHJ1Y3QgTXJ2bElFdHlwZV9rZXlQYXJhbVNldCAqa2V5cGFyYW0sCi0JCXN0cnVjdCBlbmNfa2V5ICprZXkpCi17Ci0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0NNRCk7Ci0KLQlpZiAoa2V5LT5mbGFncyAmIEtFWV9JTkZPX1dQQV9FTkFCTEVEKQotCQlrZXlwYXJhbS0+a2V5aW5mbyB8PSBjcHVfdG9fbGUxNihLRVlfSU5GT19XUEFfRU5BQkxFRCk7Ci0JaWYgKGtleS0+ZmxhZ3MgJiBLRVlfSU5GT19XUEFfVU5JQ0FTVCkKLQkJa2V5cGFyYW0tPmtleWluZm8gfD0gY3B1X3RvX2xlMTYoS0VZX0lORk9fV1BBX1VOSUNBU1QpOwotCWlmIChrZXktPmZsYWdzICYgS0VZX0lORk9fV1BBX01DQVNUKQotCQlrZXlwYXJhbS0+a2V5aW5mbyB8PSBjcHVfdG9fbGUxNihLRVlfSU5GT19XUEFfTUNBU1QpOwotCi0Ja2V5cGFyYW0tPnR5cGUgPSBjcHVfdG9fbGUxNihUTFZfVFlQRV9LRVlfTUFURVJJQUwpOwotCWtleXBhcmFtLT5rZXl0eXBlaWQgPSBjcHVfdG9fbGUxNihrZXktPnR5cGUpOwotCWtleXBhcmFtLT5rZXlsZW4gPSBjcHVfdG9fbGUxNihrZXktPmxlbik7Ci0JbWVtY3B5KGtleXBhcmFtLT5rZXksIGtleS0+a2V5LCBrZXktPmxlbik7Ci0KLQkvKiBMZW5ndGggZmllbGQgZG9lc24ndCBpbmNsdWRlIHRoZSB7dHlwZSxsZW5ndGh9IGhlYWRlciAqLwotCWtleXBhcmFtLT5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmtleXBhcmFtKSAtIDQpOwotCWxic19kZWJfbGVhdmUoTEJTX0RFQl9DTUQpOwotfQotCi1pbnQgbGJzX2NtZF84MDJfMTFfa2V5X21hdGVyaWFsKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdWludDE2X3QgY21kX2FjdGlvbiwKLQkJCQlzdHJ1Y3QgYXNzb2NfcmVxdWVzdCAqYXNzb2MpCi17Ci0Jc3RydWN0IGNtZF9kc184MDJfMTFfa2V5X21hdGVyaWFsIGNtZDsKLQlpbnQgcmV0ID0gMDsKLQlpbnQgaW5kZXggPSAwOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0NNRCk7Ci0KLQljbWQuYWN0aW9uID0gY3B1X3RvX2xlMTYoY21kX2FjdGlvbik7Ci0JY21kLmhkci5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGNtZCkpOwotCi0JaWYgKGNtZF9hY3Rpb24gPT0gQ01EX0FDVF9HRVQpIHsKLQkJY21kLmhkci5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBjbWRfaGVhZGVyKSArIDIpOwotCX0gZWxzZSB7Ci0JCW1lbXNldChjbWQua2V5UGFyYW1TZXQsIDAsIHNpemVvZihjbWQua2V5UGFyYW1TZXQpKTsKLQotCQlpZiAodGVzdF9iaXQoQVNTT0NfRkxBR19XUEFfVUNBU1RfS0VZLCAmYXNzb2MtPmZsYWdzKSkgewotCQkJc2V0X29uZV93cGFfa2V5KCZjbWQua2V5UGFyYW1TZXRbaW5kZXhdLAotCQkJCQkmYXNzb2MtPndwYV91bmljYXN0X2tleSk7Ci0JCQlpbmRleCsrOwotCQl9Ci0KLQkJaWYgKHRlc3RfYml0KEFTU09DX0ZMQUdfV1BBX01DQVNUX0tFWSwgJmFzc29jLT5mbGFncykpIHsKLQkJCXNldF9vbmVfd3BhX2tleSgmY21kLmtleVBhcmFtU2V0W2luZGV4XSwKLQkJCQkJJmFzc29jLT53cGFfbWNhc3Rfa2V5KTsKLQkJCWluZGV4Kys7Ci0JCX0KLQotCQkvKiBUaGUgY29tbW9uIGhlYWRlciBhbmQgYXMgbWFueSBrZXlzIGFzIHdlIGluY2x1ZGVkICovCi0JCWNtZC5oZHIuc2l6ZSA9IGNwdV90b19sZTE2KG9mZnNldG9mKHR5cGVvZihjbWQpLAotCQkJCQkJICAgIGtleVBhcmFtU2V0W2luZGV4XSkpOwotCX0KLQlyZXQgPSBsYnNfY21kX3dpdGhfcmVzcG9uc2UocHJpdiwgQ01EXzgwMl8xMV9LRVlfTUFURVJJQUwsICZjbWQpOwotCS8qIENvcHkgdGhlIHJldHVybmVkIGtleSB0byBkcml2ZXIgcHJpdmF0ZSBkYXRhICovCi0JaWYgKCFyZXQgJiYgY21kX2FjdGlvbiA9PSBDTURfQUNUX0dFVCkgewotCQl2b2lkICpidWZfcHRyID0gY21kLmtleVBhcmFtU2V0OwotCQl2b2lkICpyZXNwX2VuZCA9ICYoJmNtZClbMV07Ci0KLQkJd2hpbGUgKGJ1Zl9wdHIgPCByZXNwX2VuZCkgewotCQkJc3RydWN0IE1ydmxJRXR5cGVfa2V5UGFyYW1TZXQgKmtleXBhcmFtID0gYnVmX3B0cjsKLQkJCXN0cnVjdCBlbmNfa2V5ICprZXk7Ci0JCQl1aW50MTZfdCBwYXJhbV9zZXRfbGVuID0gbGUxNl90b19jcHUoa2V5cGFyYW0tPmxlbmd0aCk7Ci0JCQl1aW50MTZfdCBrZXlfbGVuID0gbGUxNl90b19jcHUoa2V5cGFyYW0tPmtleWxlbik7Ci0JCQl1aW50MTZfdCBrZXlfZmxhZ3MgPSBsZTE2X3RvX2NwdShrZXlwYXJhbS0+a2V5aW5mbyk7Ci0JCQl1aW50MTZfdCBrZXlfdHlwZSA9IGxlMTZfdG9fY3B1KGtleXBhcmFtLT5rZXl0eXBlaWQpOwotCQkJdm9pZCAqZW5kOwotCi0JCQllbmQgPSAodm9pZCAqKWtleXBhcmFtICsgc2l6ZW9mKGtleXBhcmFtLT50eXBlKQotCQkJCSsgc2l6ZW9mKGtleXBhcmFtLT5sZW5ndGgpICsgcGFyYW1fc2V0X2xlbjsKLQotCQkJLyogTWFrZSBzdXJlIHdlIGRvbid0IGFjY2VzcyBwYXN0IHRoZSBlbmQgb2YgdGhlIElFcyAqLwotCQkJaWYgKGVuZCA+IHJlc3BfZW5kKQotCQkJCWJyZWFrOwotCi0JCQlpZiAoa2V5X2ZsYWdzICYgS0VZX0lORk9fV1BBX1VOSUNBU1QpCi0JCQkJa2V5ID0gJnByaXYtPndwYV91bmljYXN0X2tleTsKLQkJCWVsc2UgaWYgKGtleV9mbGFncyAmIEtFWV9JTkZPX1dQQV9NQ0FTVCkKLQkJCQlrZXkgPSAmcHJpdi0+d3BhX21jYXN0X2tleTsKLQkJCWVsc2UKLQkJCQlicmVhazsKLQotCQkJLyogQ29weSByZXR1cm5lZCBrZXkgaW50byBkcml2ZXIgKi8KLQkJCW1lbXNldChrZXksIDAsIHNpemVvZihzdHJ1Y3QgZW5jX2tleSkpOwotCQkJaWYgKGtleV9sZW4gPiBzaXplb2Yoa2V5LT5rZXkpKQotCQkJCWJyZWFrOwotCQkJa2V5LT50eXBlID0ga2V5X3R5cGU7Ci0JCQlrZXktPmZsYWdzID0ga2V5X2ZsYWdzOwotCQkJa2V5LT5sZW4gPSBrZXlfbGVuOwotCQkJbWVtY3B5KGtleS0+a2V5LCBrZXlwYXJhbS0+a2V5LCBrZXktPmxlbik7Ci0KLQkJCWJ1Zl9wdHIgPSBlbmQgKyAxOwotCQl9Ci0JfQotCi0JbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfQ01ELCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgX19sZTE2IGxic19yYXRlX3RvX2Z3X2JpdG1hcChpbnQgcmF0ZSwgaW50IGxvd2VyX3JhdGVzX29rKQotewotLyoJCUJpdCAgCVJhdGUKLSoJCTE1OjEzIFJlc2VydmVkCi0qCQkxMiAgICA1NCBNYnBzCi0qCQkxMSAgICA0OCBNYnBzCi0qCQkxMCAgICAzNiBNYnBzCi0qCQk5ICAgICAyNCBNYnBzCi0qCQk4ICAgICAxOCBNYnBzCi0qCQk3ICAgICAxMiBNYnBzCi0qCQk2ICAgICA5IE1icHMKLSoJCTUgICAgIDYgTWJwcwotKgkJNCAgICAgUmVzZXJ2ZWQKLSoJCTMgICAgIDExIE1icHMKLSoJCTIgICAgIDUuNSBNYnBzCi0qCQkxICAgICAyIE1icHMKLSoJCTAgICAgIDEgTWJwcwotKiovCi0KLQl1aW50MTZfdCByYXRlbWFzazsKLQlpbnQgaSA9IGxic19kYXRhX3JhdGVfdG9fZndfaW5kZXgocmF0ZSk7Ci0JaWYgKGxvd2VyX3JhdGVzX29rKQotCQlyYXRlbWFzayA9ICgweDFmZWYgPj4gKDEyIC0gaSkpOwotCWVsc2UKLQkJcmF0ZW1hc2sgPSAoMSA8PCBpKTsKLQlyZXR1cm4gY3B1X3RvX2xlMTYocmF0ZW1hc2spOwotfQotCi1pbnQgbGJzX2NtZF84MDJfMTFfcmF0ZV9hZGFwdF9yYXRlc2V0KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCQkgICAgICB1aW50MTZfdCBjbWRfYWN0aW9uKQotewotCXN0cnVjdCBjbWRfZHNfODAyXzExX3JhdGVfYWRhcHRfcmF0ZXNldCBjbWQ7Ci0JaW50IHJldDsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DTUQpOwotCi0JaWYgKCFwcml2LT5jdXJfcmF0ZSAmJiAhcHJpdi0+ZW5hYmxlaHdhdXRvKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWNtZC5oZHIuc2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihjbWQpKTsKLQotCWNtZC5hY3Rpb24gPSBjcHVfdG9fbGUxNihjbWRfYWN0aW9uKTsKLQljbWQuZW5hYmxlaHdhdXRvID0gY3B1X3RvX2xlMTYocHJpdi0+ZW5hYmxlaHdhdXRvKTsKLQljbWQuYml0bWFwID0gbGJzX3JhdGVfdG9fZndfYml0bWFwKHByaXYtPmN1cl9yYXRlLCBwcml2LT5lbmFibGVod2F1dG8pOwotCXJldCA9IGxic19jbWRfd2l0aF9yZXNwb25zZShwcml2LCBDTURfODAyXzExX1JBVEVfQURBUFRfUkFURVNFVCwgJmNtZCk7Ci0JaWYgKCFyZXQgJiYgY21kX2FjdGlvbiA9PSBDTURfQUNUX0dFVCkKLQkJcHJpdi0+ZW5hYmxlaHdhdXRvID0gbGUxNl90b19jcHUoY21kLmVuYWJsZWh3YXV0byk7Ci0KLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9DTUQsICJyZXQgJWQiLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogIEBicmllZiBTZXQgdGhlIGRhdGEgcmF0ZQotICoKLSAqICBAcGFyYW0gcHJpdiAgICAJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gcmF0ZSAgCVRoZSBkZXNpcmVkIGRhdGEgcmF0ZSwgb3IgMCB0byBjbGVhciBhIGxvY2tlZCByYXRlCi0gKgotICogIEByZXR1cm4gCSAgIAkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKLSAqLwotaW50IGxic19zZXRfZGF0YV9yYXRlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdTggcmF0ZSkKLXsKLQlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9kYXRhX3JhdGUgY21kOwotCWludCByZXQgPSAwOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0NNRCk7Ci0KLQltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwotCWNtZC5oZHIuc2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihjbWQpKTsKLQotCWlmIChyYXRlID4gMCkgewotCQljbWQuYWN0aW9uID0gY3B1X3RvX2xlMTYoQ01EX0FDVF9TRVRfVFhfRklYX1JBVEUpOwotCQljbWQucmF0ZXNbMF0gPSBsYnNfZGF0YV9yYXRlX3RvX2Z3X2luZGV4KHJhdGUpOwotCQlpZiAoY21kLnJhdGVzWzBdID09IDApIHsKLQkJCWxic19kZWJfY21kKCJEQVRBX1JBVEU6IGludmFsaWQgcmVxdWVzdGVkIHJhdGUgb2YiCi0JCQkJIiAweCUwMlhcbiIsIHJhdGUpOwotCQkJcmV0ID0gMDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWxic19kZWJfY21kKCJEQVRBX1JBVEU6IHNldCBmaXhlZCAweCUwMlhcbiIsIGNtZC5yYXRlc1swXSk7Ci0JfSBlbHNlIHsKLQkJY21kLmFjdGlvbiA9IGNwdV90b19sZTE2KENNRF9BQ1RfU0VUX1RYX0FVVE8pOwotCQlsYnNfZGViX2NtZCgiREFUQV9SQVRFOiBzZXR0aW5nIGF1dG9cbiIpOwotCX0KLQotCXJldCA9IGxic19jbWRfd2l0aF9yZXNwb25zZShwcml2LCBDTURfODAyXzExX0RBVEFfUkFURSwgJmNtZCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQlsYnNfZGViX2hleChMQlNfREVCX0NNRCwgIkRBVEFfUkFURV9SRVNQIiwgKHU4ICopICZjbWQsIHNpemVvZihjbWQpKTsKLQotCS8qIEZJWE1FOiBnZXQgYWN0dWFsIHJhdGVzIEZXIGNhbiBkbyBpZiB0aGlzIGNvbW1hbmQgYWN0dWFsbHkgcmV0dXJucwotCSAqIGFsbCBkYXRhIHJhdGVzIHN1cHBvcnRlZC4KLQkgKi8KLQlwcml2LT5jdXJfcmF0ZSA9IGxic19md19pbmRleF90b19kYXRhX3JhdGUoY21kLnJhdGVzWzBdKTsKLQlsYnNfZGViX2NtZCgiREFUQV9SQVRFOiBjdXJyZW50IHJhdGUgaXMgMHglMDJ4XG4iLCBwcml2LT5jdXJfcmF0ZSk7Ci0KLW91dDoKLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9DTUQsICJyZXQgJWQiLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLQotaW50IGxic19jbWRfODAyXzExX3Jzc2koc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJCXN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kKQotewotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0NNRCk7Ci0JY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoQ01EXzgwMl8xMV9SU1NJKTsKLQljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGNtZF9kc184MDJfMTFfcnNzaSkgKwotCQlzaXplb2Yoc3RydWN0IGNtZF9oZWFkZXIpKTsKLQljbWQtPnBhcmFtcy5yc3NpLk4gPSBjcHVfdG9fbGUxNihERUZBVUxUX0JDTl9BVkdfRkFDVE9SKTsKLQotCS8qIHJlc2V0IEJlYWNvbiBTTlIvTkYvUlNTSSB2YWx1ZXMgKi8KLQlwcml2LT5TTlJbVFlQRV9CRUFDT05dW1RZUEVfTk9BVkddID0gMDsKLQlwcml2LT5TTlJbVFlQRV9CRUFDT05dW1RZUEVfQVZHXSA9IDA7Ci0JcHJpdi0+TkZbVFlQRV9CRUFDT05dW1RZUEVfTk9BVkddID0gMDsKLQlwcml2LT5ORltUWVBFX0JFQUNPTl1bVFlQRV9BVkddID0gMDsKLQlwcml2LT5SU1NJW1RZUEVfQkVBQ09OXVtUWVBFX05PQVZHXSA9IDA7Ci0JcHJpdi0+UlNTSVtUWVBFX0JFQUNPTl1bVFlQRV9BVkddID0gMDsKLQotCWxic19kZWJfbGVhdmUoTEJTX0RFQl9DTUQpOwotCXJldHVybiAwOwotfQotCi1pbnQgbGJzX3JldF84MDJfMTFfcnNzaShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JCQkJc3RydWN0IGNtZF9kc19jb21tYW5kICpyZXNwKQotewotCXN0cnVjdCBjbWRfZHNfODAyXzExX3Jzc2lfcnNwICpyc3NpcnNwID0gJnJlc3AtPnBhcmFtcy5yc3NpcnNwOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0NNRCk7Ci0KLQkvKiBzdG9yZSB0aGUgbm9uIGF2ZXJhZ2UgdmFsdWUgKi8KLQlwcml2LT5TTlJbVFlQRV9CRUFDT05dW1RZUEVfTk9BVkddID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZyc3NpcnNwLT5TTlIpOwotCXByaXYtPk5GW1RZUEVfQkVBQ09OXVtUWVBFX05PQVZHXSA9Ci0JCWdldF91bmFsaWduZWRfbGUxNigmcnNzaXJzcC0+bm9pc2VmbG9vcik7Ci0KLQlwcml2LT5TTlJbVFlQRV9CRUFDT05dW1RZUEVfQVZHXSA9IGdldF91bmFsaWduZWRfbGUxNigmcnNzaXJzcC0+YXZnU05SKTsKLQlwcml2LT5ORltUWVBFX0JFQUNPTl1bVFlQRV9BVkddID0KLQkJZ2V0X3VuYWxpZ25lZF9sZTE2KCZyc3NpcnNwLT5hdmdub2lzZWZsb29yKTsKLQotCXByaXYtPlJTU0lbVFlQRV9CRUFDT05dW1RZUEVfTk9BVkddID0KLQkgICAgQ0FMX1JTU0kocHJpdi0+U05SW1RZUEVfQkVBQ09OXVtUWVBFX05PQVZHXSwKLQkJICAgICBwcml2LT5ORltUWVBFX0JFQUNPTl1bVFlQRV9OT0FWR10pOwotCi0JcHJpdi0+UlNTSVtUWVBFX0JFQUNPTl1bVFlQRV9BVkddID0KLQkgICAgQ0FMX1JTU0kocHJpdi0+U05SW1RZUEVfQkVBQ09OXVtUWVBFX0FWR10gLyBBVkdfU0NBTEUsCi0JCSAgICAgcHJpdi0+TkZbVFlQRV9CRUFDT05dW1RZUEVfQVZHXSAvIEFWR19TQ0FMRSk7Ci0KLQlsYnNfZGViX2NtZCgiUlNTSTogYmVhY29uICVkLCBhdmcgJWRcbiIsCi0JICAgICAgIHByaXYtPlJTU0lbVFlQRV9CRUFDT05dW1RZUEVfTk9BVkddLAotCSAgICAgICBwcml2LT5SU1NJW1RZUEVfQkVBQ09OXVtUWVBFX0FWR10pOwotCi0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX0NNRCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotaW50IGxic19jbWRfYmNuX2N0cmwoc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJCXN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kLAotCQkJCXUxNiBjbWRfYWN0aW9uKQotewotCXN0cnVjdCBjbWRfZHNfODAyXzExX2JlYWNvbl9jb250cm9sCi0JCSpiY25fY3RybCA9ICZjbWQtPnBhcmFtcy5iY25fY3RybDsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DTUQpOwotCWNtZC0+c2l6ZSA9Ci0JICAgIGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgY21kX2RzXzgwMl8xMV9iZWFjb25fY29udHJvbCkKLQkJCSAgICAgKyBzaXplb2Yoc3RydWN0IGNtZF9oZWFkZXIpKTsKLQljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihDTURfODAyXzExX0JFQUNPTl9DVFJMKTsKLQotCWJjbl9jdHJsLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihjbWRfYWN0aW9uKTsKLQliY25fY3RybC0+YmVhY29uX2VuYWJsZSA9IGNwdV90b19sZTE2KHByaXYtPmJlYWNvbl9lbmFibGUpOwotCWJjbl9jdHJsLT5iZWFjb25fcGVyaW9kID0gY3B1X3RvX2xlMTYocHJpdi0+YmVhY29uX3BlcmlvZCk7Ci0KLQlsYnNfZGViX2xlYXZlKExCU19ERUJfQ01EKTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IGxic19yZXRfODAyXzExX2Jjbl9jdHJsKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCQkJc3RydWN0IGNtZF9kc19jb21tYW5kICpyZXNwKQotewotCXN0cnVjdCBjbWRfZHNfODAyXzExX2JlYWNvbl9jb250cm9sICpiY25fY3RybCA9Ci0JICAgICZyZXNwLT5wYXJhbXMuYmNuX2N0cmw7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfQ01EKTsKLQotCWlmIChiY25fY3RybC0+YWN0aW9uID09IENNRF9BQ1RfR0VUKSB7Ci0JCXByaXYtPmJlYWNvbl9lbmFibGUgPSAodTgpIGxlMTZfdG9fY3B1KGJjbl9jdHJsLT5iZWFjb25fZW5hYmxlKTsKLQkJcHJpdi0+YmVhY29uX3BlcmlvZCA9IGxlMTZfdG9fY3B1KGJjbl9jdHJsLT5iZWFjb25fcGVyaW9kKTsKLQl9Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfQ01EKTsKLQlyZXR1cm4gMDsKLX0KLQotCi0KLXN0YXRpYyBpbnQgbGJzX2Fzc29jX3Bvc3Qoc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJICBzdHJ1Y3QgY21kX2RzXzgwMl8xMV9hc3NvY2lhdGVfcmVzcG9uc2UgKnJlc3ApCi17Ci0JaW50IHJldCA9IDA7Ci0JdW5pb24gaXdyZXFfZGF0YSB3cnF1OwotCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqYnNzOwotCXUxNiBzdGF0dXNfY29kZTsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9BU1NPQyk7Ci0KLQlpZiAoIXByaXYtPmluX3Byb2dyZXNzX2Fzc29jX3JlcSkgewotCQlsYnNfZGViX2Fzc29jKCJBU1NPQ19SRVNQOiBubyBpbi1wcm9ncmVzcyBhc3NvYyByZXF1ZXN0XG4iKTsKLQkJcmV0ID0gLTE7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0JYnNzID0gJnByaXYtPmluX3Byb2dyZXNzX2Fzc29jX3JlcS0+YnNzOwotCi0JLyoKLQkgKiBPbGRlciBGVyB2ZXJzaW9ucyBtYXAgdGhlIElFRUUgODAyLjExIFN0YXR1cyBDb2RlIGluIHRoZSBhc3NvY2lhdGlvbgotCSAqIHJlc3BvbnNlIHRvIHRoZSBmb2xsb3dpbmcgdmFsdWVzIHJldHVybmVkIGluIHJlc3AtPnN0YXR1c2NvZGU6Ci0JICoKLQkgKiAgICBJRUVFIFN0YXR1cyBDb2RlICAgICAgICAgICAgICAgIE1hcnZlbGwgU3RhdHVzIENvZGUKLQkgKiAgICAwICAgICAgICAgICAgICAgICAgICAgICAtPiAgICAgIDB4MDAwMCBBU1NPQ19SRVNVTFRfU1VDQ0VTUwotCSAqICAgIDEzICAgICAgICAgICAgICAgICAgICAgIC0+ICAgICAgMHgwMDA0IEFTU09DX1JFU1VMVF9BVVRIX1JFRlVTRUQKLQkgKiAgICAxNCAgICAgICAgICAgICAgICAgICAgICAtPiAgICAgIDB4MDAwNCBBU1NPQ19SRVNVTFRfQVVUSF9SRUZVU0VECi0JICogICAgMTUgICAgICAgICAgICAgICAgICAgICAgLT4gICAgICAweDAwMDQgQVNTT0NfUkVTVUxUX0FVVEhfUkVGVVNFRAotCSAqICAgIDE2ICAgICAgICAgICAgICAgICAgICAgIC0+ICAgICAgMHgwMDA0IEFTU09DX1JFU1VMVF9BVVRIX1JFRlVTRUQKLQkgKiAgICBvdGhlcnMgICAgICAgICAgICAgICAgICAtPiAgICAgIDB4MDAwMyBBU1NPQ19SRVNVTFRfUkVGVVNFRAotCSAqCi0JICogT3RoZXIgcmVzcG9uc2UgY29kZXM6Ci0JICogICAgMHgwMDAxIC0+IEFTU09DX1JFU1VMVF9JTlZBTElEX1BBUkFNRVRFUlMgKHVudXNlZCkKLQkgKiAgICAweDAwMDIgLT4gQVNTT0NfUkVTVUxUX1RJTUVPVVQgKGludGVybmFsIHRpbWVyIGV4cGlyZWQgd2FpdGluZyBmb3IKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc29jaWF0aW9uIHJlc3BvbnNlIGZyb20gdGhlIEFQKQotCSAqLwotCi0Jc3RhdHVzX2NvZGUgPSBsZTE2X3RvX2NwdShyZXNwLT5zdGF0dXNjb2RlKTsKLQlpZiAocHJpdi0+ZndyZWxlYXNlIDwgMHgwOTAwMDAwMCkgewotCQlzd2l0Y2ggKHN0YXR1c19jb2RlKSB7Ci0JCWNhc2UgMHgwMDoKLQkJCWJyZWFrOwotCQljYXNlIDB4MDE6Ci0JCQlsYnNfZGViX2Fzc29jKCJBU1NPQ19SRVNQOiBpbnZhbGlkIHBhcmFtZXRlcnNcbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHgwMjoKLQkJCWxic19kZWJfYXNzb2MoIkFTU09DX1JFU1A6IGludGVybmFsIHRpbWVyICIKLQkJCQkiZXhwaXJlZCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgQVBcbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHgwMzoKLQkJCWxic19kZWJfYXNzb2MoIkFTU09DX1JFU1A6IGFzc29jaWF0aW9uICIKLQkJCQkicmVmdXNlZCBieSBBUFxuIik7Ci0JCQlicmVhazsKLQkJY2FzZSAweDA0OgotCQkJbGJzX2RlYl9hc3NvYygiQVNTT0NfUkVTUDogYXV0aGVudGljYXRpb24gIgotCQkJCSJyZWZ1c2VkIGJ5IEFQXG4iKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJbGJzX2RlYl9hc3NvYygiQVNTT0NfUkVTUDogZmFpbHVyZSByZWFzb24gMHglMDJ4ICIKLQkJCQkiIHVua25vd25cbiIsIHN0YXR1c19jb2RlKTsKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogdjkrIHJldHVybnMgdGhlIEFQJ3MgYXNzb2NpYXRpb24gcmVzcG9uc2UgKi8KLQkJbGJzX2RlYl9hc3NvYygiQVNTT0NfUkVTUDogZmFpbHVyZSByZWFzb24gMHglMDJ4XG4iLCBzdGF0dXNfY29kZSk7Ci0JfQotCi0JaWYgKHN0YXR1c19jb2RlKSB7Ci0JCWxic19tYWNfZXZlbnRfZGlzY29ubmVjdGVkKHByaXYpOwotCQlyZXQgPSBzdGF0dXNfY29kZTsKLQkJZ290byBkb25lOwotCX0KLQotCWxic19kZWJfaGV4KExCU19ERUJfQVNTT0MsICJBU1NPQ19SRVNQIiwKLQkJICAgICh2b2lkICopIChyZXNwICsgc2l6ZW9mIChyZXNwLT5oZHIpKSwKLQkJICAgIGxlMTZfdG9fY3B1KHJlc3AtPmhkci5zaXplKSAtIHNpemVvZiAocmVzcC0+aGRyKSk7Ci0KLQkvKiBTZW5kIGEgTWVkaWEgQ29ubmVjdGVkIGV2ZW50LCBhY2NvcmRpbmcgdG8gdGhlIFNwZWMgKi8KLQlwcml2LT5jb25uZWN0X3N0YXR1cyA9IExCU19DT05ORUNURUQ7Ci0KLQkvKiBVcGRhdGUgY3VycmVudCBTU0lEIGFuZCBCU1NJRCAqLwotCW1lbWNweSgmcHJpdi0+Y3VyYnNzcGFyYW1zLnNzaWQsICZic3MtPnNzaWQsIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pOwotCXByaXYtPmN1cmJzc3BhcmFtcy5zc2lkX2xlbiA9IGJzcy0+c3NpZF9sZW47Ci0JbWVtY3B5KHByaXYtPmN1cmJzc3BhcmFtcy5ic3NpZCwgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOwotCi0JcHJpdi0+U05SW1RZUEVfUlhQRF1bVFlQRV9BVkddID0gMDsKLQlwcml2LT5ORltUWVBFX1JYUERdW1RZUEVfQVZHXSA9IDA7Ci0KLQltZW1zZXQocHJpdi0+cmF3U05SLCAweDAwLCBzaXplb2YocHJpdi0+cmF3U05SKSk7Ci0JbWVtc2V0KHByaXYtPnJhd05GLCAweDAwLCBzaXplb2YocHJpdi0+cmF3TkYpKTsKLQlwcml2LT5uZXh0U05STkYgPSAwOwotCXByaXYtPm51bVNOUk5GID0gMDsKLQotCW5ldGlmX2NhcnJpZXJfb24ocHJpdi0+ZGV2KTsKLQlpZiAoIXByaXYtPnR4X3BlbmRpbmdfbGVuKQotCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPmRldik7Ci0KLQltZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIHByaXYtPmN1cmJzc3BhcmFtcy5ic3NpZCwgRVRIX0FMRU4pOwotCXdycXUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0Jd2lyZWxlc3Nfc2VuZF9ldmVudChwcml2LT5kZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOwotCi1kb25lOgotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0FTU09DLCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBhbiBhc3NvY2lhdGlvbi1jbGFzcyBjb21tYW5kLgotICoKLSAqICBAcGFyYW0gcHJpdiAgICAgIEEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIGFzc29jX3JlcSBUaGUgYXNzb2NpYXRpb24gcmVxdWVzdCBkZXNjcmliaW5nIHRoZSBCU1MgdG8gYXNzb2NpYXRlCi0gKiAgICAgICAgICAgICAgICAgICBvciByZWFzc29jaWF0ZSB3aXRoCi0gKiAgQHBhcmFtIGNvbW1hbmQgICBUaGUgYWN0dWFsIGNvbW1hbmQsIGVpdGhlciBDTURfODAyXzExX0FTU09DSUFURSBvcgotICogICAgICAgICAgICAgICAgICAgQ01EXzgwMl8xMV9SRUFTU09DSUFURQotICoKLSAqICBAcmV0dXJuICAgICAgICAgMCBvciAtMQotICovCi1zdGF0aWMgaW50IGxic19hc3NvY2lhdGUoc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJIHN0cnVjdCBhc3NvY19yZXF1ZXN0ICphc3NvY19yZXEsCi0JCQkgdTE2IGNvbW1hbmQpCi17Ci0Jc3RydWN0IGNtZF9kc184MDJfMTFfYXNzb2NpYXRlIGNtZDsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKmJzcyA9ICZhc3NvY19yZXEtPmJzczsKLQl1OCAqcG9zID0gJihjbWQuaWVidWZbMF0pOwotCXUxNiB0bXBjYXAsIHRtcGxlbiwgdG1wYXV0aDsKLQlzdHJ1Y3QgbXJ2bF9pZV9zc2lkX3BhcmFtX3NldCAqc3NpZDsKLQlzdHJ1Y3QgbXJ2bF9pZV9kc19wYXJhbV9zZXQgKmRzOwotCXN0cnVjdCBtcnZsX2llX2NmX3BhcmFtX3NldCAqY2Y7Ci0Jc3RydWN0IG1ydmxfaWVfcmF0ZXNfcGFyYW1fc2V0ICpyYXRlczsKLQlzdHJ1Y3QgbXJ2bF9pZV9yc25fcGFyYW1fc2V0ICpyc247Ci0Jc3RydWN0IG1ydmxfaWVfYXV0aF90eXBlICphdXRoOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0FTU09DKTsKLQotCUJVR19PTigoY29tbWFuZCAhPSBDTURfODAyXzExX0FTU09DSUFURSkgJiYKLQkJKGNvbW1hbmQgIT0gQ01EXzgwMl8xMV9SRUFTU09DSUFURSkpOwotCi0JbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKLQljbWQuaGRyLmNvbW1hbmQgPSBjcHVfdG9fbGUxNihjb21tYW5kKTsKLQotCS8qIEZpbGwgaW4gc3RhdGljIGZpZWxkcyAqLwotCW1lbWNweShjbWQuYnNzaWQsIGJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKLQljbWQubGlzdGVuaW50ZXJ2YWwgPSBjcHVfdG9fbGUxNihNUlZEUlZfREVGQVVMVF9MSVNURU5fSU5URVJWQUwpOwotCi0JLyogQ2FwYWJpbGl0eSBpbmZvICovCi0JdG1wY2FwID0gKGJzcy0+Y2FwYWJpbGl0eSAmIENBUElORk9fTUFTSyk7Ci0JaWYgKGJzcy0+bW9kZSA9PSBJV19NT0RFX0lORlJBKQotCQl0bXBjYXAgfD0gV0xBTl9DQVBBQklMSVRZX0VTUzsKLQljbWQuY2FwYWJpbGl0eSA9IGNwdV90b19sZTE2KHRtcGNhcCk7Ci0JbGJzX2RlYl9hc3NvYygiQVNTT0NfQ01EOiBjYXBhYmlsaXR5IDB4JTA0eFxuIiwgdG1wY2FwKTsKLQotCS8qIFNTSUQgKi8KLQlzc2lkID0gKHN0cnVjdCBtcnZsX2llX3NzaWRfcGFyYW1fc2V0ICopIHBvczsKLQlzc2lkLT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFRMVl9UWVBFX1NTSUQpOwotCXRtcGxlbiA9IGJzcy0+c3NpZF9sZW47Ci0Jc3NpZC0+aGVhZGVyLmxlbiA9IGNwdV90b19sZTE2KHRtcGxlbik7Ci0JbWVtY3B5KHNzaWQtPnNzaWQsIGJzcy0+c3NpZCwgdG1wbGVuKTsKLQlwb3MgKz0gc2l6ZW9mKHNzaWQtPmhlYWRlcikgKyB0bXBsZW47Ci0KLQlkcyA9IChzdHJ1Y3QgbXJ2bF9pZV9kc19wYXJhbV9zZXQgKikgcG9zOwotCWRzLT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFRMVl9UWVBFX1BIWV9EUyk7Ci0JZHMtPmhlYWRlci5sZW4gPSBjcHVfdG9fbGUxNigxKTsKLQlkcy0+Y2hhbm5lbCA9IGJzcy0+cGh5LmRzLmNoYW5uZWw7Ci0JcG9zICs9IHNpemVvZihkcy0+aGVhZGVyKSArIDE7Ci0KLQljZiA9IChzdHJ1Y3QgbXJ2bF9pZV9jZl9wYXJhbV9zZXQgKikgcG9zOwotCWNmLT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFRMVl9UWVBFX0NGKTsKLQl0bXBsZW4gPSBzaXplb2YoKmNmKSAtIHNpemVvZiAoY2YtPmhlYWRlcik7Ci0JY2YtPmhlYWRlci5sZW4gPSBjcHVfdG9fbGUxNih0bXBsZW4pOwotCS8qIElFIHBheWxvYWQgc2hvdWxkIGJlIHplcm9lZCwgZmlybXdhcmUgZmlsbHMgaXQgaW4gZm9yIHVzICovCi0JcG9zICs9IHNpemVvZigqY2YpOwotCi0JcmF0ZXMgPSAoc3RydWN0IG1ydmxfaWVfcmF0ZXNfcGFyYW1fc2V0ICopIHBvczsKLQlyYXRlcy0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihUTFZfVFlQRV9SQVRFUyk7Ci0JdG1wbGVuID0gbWluX3QodTE2LCBBUlJBWV9TSVpFKGJzcy0+cmF0ZXMpLCBNQVhfUkFURVMpOwotCW1lbWNweSgmcmF0ZXMtPnJhdGVzLCAmYnNzLT5yYXRlcywgdG1wbGVuKTsKLQlpZiAoZ2V0X2NvbW1vbl9yYXRlcyhwcml2LCByYXRlcy0+cmF0ZXMsICZ0bXBsZW4pKSB7Ci0JCXJldCA9IC0xOwotCQlnb3RvIGRvbmU7Ci0JfQotCXBvcyArPSBzaXplb2YocmF0ZXMtPmhlYWRlcikgKyB0bXBsZW47Ci0JcmF0ZXMtPmhlYWRlci5sZW4gPSBjcHVfdG9fbGUxNih0bXBsZW4pOwotCWxic19kZWJfYXNzb2MoIkFTU09DX0NNRDogbnVtIHJhdGVzICV1XG4iLCB0bXBsZW4pOwotCi0JLyogQ29weSB0aGUgaW5mcmEuIGFzc29jaWF0aW9uIHJhdGVzIGludG8gQ3VycmVudCBCU1Mgc3RhdGUgc3RydWN0dXJlICovCi0JbWVtc2V0KCZwcml2LT5jdXJic3NwYXJhbXMucmF0ZXMsIDAsIHNpemVvZihwcml2LT5jdXJic3NwYXJhbXMucmF0ZXMpKTsKLQltZW1jcHkoJnByaXYtPmN1cmJzc3BhcmFtcy5yYXRlcywgJnJhdGVzLT5yYXRlcywgdG1wbGVuKTsKLQotCS8qIFNldCBNU0Igb24gYmFzaWMgcmF0ZXMgYXMgdGhlIGZpcm13YXJlIHJlcXVpcmVzLCBidXQgX2FmdGVyXwotCSAqIGNvcHlpbmcgdG8gY3VycmVudCBic3MgcmF0ZXMuCi0JICovCi0JbGJzX3NldF9iYXNpY19yYXRlX2ZsYWdzKHJhdGVzLT5yYXRlcywgdG1wbGVuKTsKLQotCS8qIEZpcm13YXJlIHY5KyBpbmRpY2F0ZSBhdXRoZW50aWNhdGlvbiBzdWl0ZXMgYXMgYSBUTFYgKi8KLQlpZiAocHJpdi0+ZndyZWxlYXNlID49IDB4MDkwMDAwMDApIHsKLQkJYXV0aCA9IChzdHJ1Y3QgbXJ2bF9pZV9hdXRoX3R5cGUgKikgcG9zOwotCQlhdXRoLT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFRMVl9UWVBFX0FVVEhfVFlQRSk7Ci0JCWF1dGgtPmhlYWRlci5sZW4gPSBjcHVfdG9fbGUxNigyKTsKLQkJdG1wYXV0aCA9IGl3X2F1dGhfdG9faWVlZV9hdXRoKHByaXYtPnNlY2luZm8uYXV0aF9tb2RlKTsKLQkJYXV0aC0+YXV0aCA9IGNwdV90b19sZTE2KHRtcGF1dGgpOwotCQlwb3MgKz0gc2l6ZW9mKGF1dGgtPmhlYWRlcikgKyAyOwotCi0JCWxic19kZWJfam9pbigiQVVUSF9DTUQ6IEJTU0lEICVwTSwgYXV0aCAweCV4XG4iLAotCQkJYnNzLT5ic3NpZCwgcHJpdi0+c2VjaW5mby5hdXRoX21vZGUpOwotCX0KLQotCS8qIFdQQS9XUEEyIElFcyAqLwotCWlmIChhc3NvY19yZXEtPnNlY2luZm8uV1BBZW5hYmxlZCB8fCBhc3NvY19yZXEtPnNlY2luZm8uV1BBMmVuYWJsZWQpIHsKLQkJcnNuID0gKHN0cnVjdCBtcnZsX2llX3Jzbl9wYXJhbV9zZXQgKikgcG9zOwotCQkvKiBXUEFfSUUgb3IgV1BBMl9JRSAqLwotCQlyc24tPmhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoKHUxNikgYXNzb2NfcmVxLT53cGFfaWVbMF0pOwotCQl0bXBsZW4gPSAodTE2KSBhc3NvY19yZXEtPndwYV9pZVsxXTsKLQkJcnNuLT5oZWFkZXIubGVuID0gY3B1X3RvX2xlMTYodG1wbGVuKTsKLQkJbWVtY3B5KHJzbi0+cnNuaWUsICZhc3NvY19yZXEtPndwYV9pZVsyXSwgdG1wbGVuKTsKLQkJbGJzX2RlYl9oZXgoTEJTX0RFQl9KT0lOLCAiQVNTT0NfQ01EOiBXUEEvUlNOIElFIiwgKHU4ICopIHJzbiwKLQkJCXNpemVvZihyc24tPmhlYWRlcikgKyB0bXBsZW4pOwotCQlwb3MgKz0gc2l6ZW9mKHJzbi0+aGVhZGVyKSArIHRtcGxlbjsKLQl9Ci0KLQljbWQuaGRyLnNpemUgPSBjcHVfdG9fbGUxNigoc2l6ZW9mKGNtZCkgLSBzaXplb2YoY21kLmllYnVmKSkgKwotCQkJCSAgICh1MTYpKHBvcyAtICh1OCAqKSAmY21kLmllYnVmKSk7Ci0KLQkvKiB1cGRhdGUgY3VyYnNzcGFyYW1zICovCi0JcHJpdi0+Y2hhbm5lbCA9IGJzcy0+cGh5LmRzLmNoYW5uZWw7Ci0KLQlyZXQgPSBsYnNfY21kX3dpdGhfcmVzcG9uc2UocHJpdiwgY29tbWFuZCwgJmNtZCk7Ci0JaWYgKHJldCA9PSAwKSB7Ci0JCXJldCA9IGxic19hc3NvY19wb3N0KHByaXYsCi0JCQkoc3RydWN0IGNtZF9kc184MDJfMTFfYXNzb2NpYXRlX3Jlc3BvbnNlICopICZjbWQpOwotCX0KLQotZG9uZToKLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9BU1NPQywgInJldCAlZCIsIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiAgQGJyaWVmIEFzc29jaWF0ZSB0byBhIHNwZWNpZmljIEJTUyBkaXNjb3ZlcmVkIGluIGEgc2NhbgotICoKLSAqICBAcGFyYW0gcHJpdiAgICAgIEEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIGFzc29jX3JlcSBUaGUgYXNzb2NpYXRpb24gcmVxdWVzdCBkZXNjcmliaW5nIHRoZSBCU1MgdG8gYXNzb2NpYXRlIHdpdGgKLSAqCi0gKiAgQHJldHVybiAgICAgICAgICAwLXN1Y2Nlc3MsIG90aGVyd2lzZSBmYWlsCi0gKi8KLXN0YXRpYyBpbnQgbGJzX3RyeV9hc3NvY2lhdGUoc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCXN0cnVjdCBhc3NvY19yZXF1ZXN0ICphc3NvY19yZXEpCi17Ci0JaW50IHJldDsKLQl1OCBwcmVhbWJsZSA9IFJBRElPX1BSRUFNQkxFX0xPTkc7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfQVNTT0MpOwotCi0JLyogRlcgdjkgYW5kIGhpZ2hlciBpbmRpY2F0ZSBhdXRoZW50aWNhdGlvbiBzdWl0ZXMgYXMgYSBUTFYgaW4gdGhlCi0JICogYXNzb2NpYXRpb24gY29tbWFuZCwgbm90IGFzIGEgc2VwYXJhdGUgYXV0aGVudGljYXRpb24gY29tbWFuZC4KLQkgKi8KLQlpZiAocHJpdi0+ZndyZWxlYXNlIDwgMHgwOTAwMDAwMCkgewotCQlyZXQgPSBsYnNfc2V0X2F1dGhlbnRpY2F0aW9uKHByaXYsIGFzc29jX3JlcS0+YnNzLmJzc2lkLAotCQkJCQkgICAgIHByaXYtPnNlY2luZm8uYXV0aF9tb2RlKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OwotCX0KLQotCS8qIFVzZSBzaG9ydCBwcmVhbWJsZSBvbmx5IHdoZW4gYm90aCB0aGUgQlNTIGFuZCBmaXJtd2FyZSBzdXBwb3J0IGl0ICovCi0JaWYgKGFzc29jX3JlcS0+YnNzLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUpCi0JCXByZWFtYmxlID0gUkFESU9fUFJFQU1CTEVfU0hPUlQ7Ci0KLQlyZXQgPSBsYnNfc2V0X3JhZGlvKHByaXYsIHByZWFtYmxlLCAxKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKLQotCXJldCA9IGxic19hc3NvY2lhdGUocHJpdiwgYXNzb2NfcmVxLCBDTURfODAyXzExX0FTU09DSUFURSk7Ci0JLyogSWYgdGhlIGFzc29jaWF0aW9uIGZhaWxzIHdpdGggY3VycmVudCBhdXRoIG1vZGUsIGxldCdzCi0JICogdHJ5IGJ5IGNoYW5naW5nIHRoZSBhdXRoIG1vZGUKLQkgKi8KLQlpZiAoKHByaXYtPmF1dGh0eXBlX2F1dG8pICYmCi0JCQkocmV0ID09IFdMQU5fU1RBVFVTX05PVF9TVVBQT1JURURfQVVUSF9BTEcpICYmCi0JCQkoYXNzb2NfcmVxLT5zZWNpbmZvLndlcF9lbmFibGVkKSAmJgotCQkJKHByaXYtPmNvbm5lY3Rfc3RhdHVzICE9IExCU19DT05ORUNURUQpKSB7Ci0JCWlmIChwcml2LT5zZWNpbmZvLmF1dGhfbW9kZSA9PSBJV19BVVRIX0FMR19PUEVOX1NZU1RFTSkKLQkJCXByaXYtPnNlY2luZm8uYXV0aF9tb2RlID0gSVdfQVVUSF9BTEdfU0hBUkVEX0tFWTsKLQkJZWxzZQotCQkJcHJpdi0+c2VjaW5mby5hdXRoX21vZGUgPSBJV19BVVRIX0FMR19PUEVOX1NZU1RFTTsKLQkJaWYgKCFhc3NvY19oZWxwZXJfd2VwX2tleXMocHJpdiwgYXNzb2NfcmVxKSkKLQkJCXJldCA9IGxic19hc3NvY2lhdGUocHJpdiwgYXNzb2NfcmVxLAotCQkJCQkJQ01EXzgwMl8xMV9BU1NPQ0lBVEUpOwotCX0KLQotCWlmIChyZXQpCi0JCXJldCA9IC0xOwotb3V0OgotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0FTU09DLCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGxic19hZGhvY19wb3N0KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCSAgc3RydWN0IGNtZF9kc184MDJfMTFfYWRfaG9jX3Jlc3VsdCAqcmVzcCkKLXsKLQlpbnQgcmV0ID0gMDsKLQl1MTYgY29tbWFuZCA9IGxlMTZfdG9fY3B1KHJlc3AtPmhkci5jb21tYW5kKTsKLQl1MTYgcmVzdWx0ID0gbGUxNl90b19jcHUocmVzcC0+aGRyLnJlc3VsdCk7Ci0JdW5pb24gaXdyZXFfZGF0YSB3cnF1OwotCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqYnNzOwotCURFQ0xBUkVfU1NJRF9CVUYoc3NpZCk7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfSk9JTik7Ci0KLQlpZiAoIXByaXYtPmluX3Byb2dyZXNzX2Fzc29jX3JlcSkgewotCQlsYnNfZGViX2pvaW4oIkFESE9DX1JFU1A6IG5vIGluLXByb2dyZXNzIGFzc29jaWF0aW9uICIKLQkJCSJyZXF1ZXN0XG4iKTsKLQkJcmV0ID0gLTE7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0JYnNzID0gJnByaXYtPmluX3Byb2dyZXNzX2Fzc29jX3JlcS0+YnNzOwotCi0JLyoKLQkgKiBKb2luIHJlc3VsdCBjb2RlIDAgLS0+IFNVQ0NFU1MKLQkgKi8KLQlpZiAocmVzdWx0KSB7Ci0JCWxic19kZWJfam9pbigiQURIT0NfUkVTUDogZmFpbGVkIChyZXN1bHQgMHglWClcbiIsIHJlc3VsdCk7Ci0JCWlmIChwcml2LT5jb25uZWN0X3N0YXR1cyA9PSBMQlNfQ09OTkVDVEVEKQotCQkJbGJzX21hY19ldmVudF9kaXNjb25uZWN0ZWQocHJpdik7Ci0JCXJldCA9IC0xOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JLyogU2VuZCBhIE1lZGlhIENvbm5lY3RlZCBldmVudCwgYWNjb3JkaW5nIHRvIHRoZSBTcGVjICovCi0JcHJpdi0+Y29ubmVjdF9zdGF0dXMgPSBMQlNfQ09OTkVDVEVEOwotCi0JaWYgKGNvbW1hbmQgPT0gQ01EX1JFVChDTURfODAyXzExX0FEX0hPQ19TVEFSVCkpIHsKLQkJLyogVXBkYXRlIHRoZSBjcmVhdGVkIG5ldHdvcmsgZGVzY3JpcHRvciB3aXRoIHRoZSBuZXcgQlNTSUQgKi8KLQkJbWVtY3B5KGJzcy0+YnNzaWQsIHJlc3AtPmJzc2lkLCBFVEhfQUxFTik7Ci0JfQotCi0JLyogU2V0IHRoZSBCU1NJRCBmcm9tIHRoZSBqb2luZWQvc3RhcnRlZCBkZXNjcmlwdG9yICovCi0JbWVtY3B5KCZwcml2LT5jdXJic3NwYXJhbXMuYnNzaWQsIGJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKLQotCS8qIFNldCB0aGUgbmV3IFNTSUQgdG8gY3VycmVudCBTU0lEICovCi0JbWVtY3B5KCZwcml2LT5jdXJic3NwYXJhbXMuc3NpZCwgJmJzcy0+c3NpZCwgSUVFRTgwMjExX01BWF9TU0lEX0xFTik7Ci0JcHJpdi0+Y3VyYnNzcGFyYW1zLnNzaWRfbGVuID0gYnNzLT5zc2lkX2xlbjsKLQotCW5ldGlmX2NhcnJpZXJfb24ocHJpdi0+ZGV2KTsKLQlpZiAoIXByaXYtPnR4X3BlbmRpbmdfbGVuKQotCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPmRldik7Ci0KLQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7Ci0JbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBwcml2LT5jdXJic3NwYXJhbXMuYnNzaWQsIEVUSF9BTEVOKTsKLQl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCXdpcmVsZXNzX3NlbmRfZXZlbnQocHJpdi0+ZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKLQotCWxic19kZWJfam9pbigiQURIT0NfUkVTUDogSm9pbmVkL3N0YXJ0ZWQgJyVzJywgQlNTSUQgJXBNLCBjaGFubmVsICVkXG4iLAotCQkgICAgIHByaW50X3NzaWQoc3NpZCwgYnNzLT5zc2lkLCBic3MtPnNzaWRfbGVuKSwKLQkJICAgICBwcml2LT5jdXJic3NwYXJhbXMuYnNzaWQsCi0JCSAgICAgcHJpdi0+Y2hhbm5lbCk7Ci0KLWRvbmU6Ci0JbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfSk9JTiwgInJldCAlZCIsIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiAgQGJyaWVmIEpvaW4gYW4gYWRob2MgbmV0d29yayBmb3VuZCBpbiBhIHByZXZpb3VzIHNjYW4KLSAqCi0gKiAgQHBhcmFtIHByaXYgICAgICAgICBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEBwYXJhbSBhc3NvY19yZXEgICAgVGhlIGFzc29jaWF0aW9uIHJlcXVlc3QgZGVzY3JpYmluZyB0aGUgQlNTIHRvIGpvaW4KLSAqCi0gKiAgQHJldHVybiAgICAgICAgICAgICAwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKLSAqLwotc3RhdGljIGludCBsYnNfYWRob2Nfam9pbihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0Jc3RydWN0IGFzc29jX3JlcXVlc3QgKmFzc29jX3JlcSkKLXsKLQlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9hZF9ob2Nfam9pbiBjbWQ7Ci0Jc3RydWN0IGJzc19kZXNjcmlwdG9yICpic3MgPSAmYXNzb2NfcmVxLT5ic3M7Ci0JdTggcHJlYW1ibGUgPSBSQURJT19QUkVBTUJMRV9MT05HOwotCURFQ0xBUkVfU1NJRF9CVUYoc3NpZCk7Ci0JdTE2IHJhdGVzaXplID0gMDsKLQlpbnQgcmV0ID0gMDsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9BU1NPQyk7Ci0KLQlsYnNfZGViX2pvaW4oImN1cnJlbnQgU1NJRCAnJXMnLCBzc2lkIGxlbmd0aCAldVxuIiwKLQkJcHJpbnRfc3NpZChzc2lkLCBwcml2LT5jdXJic3NwYXJhbXMuc3NpZCwKLQkJcHJpdi0+Y3VyYnNzcGFyYW1zLnNzaWRfbGVuKSwKLQkJcHJpdi0+Y3VyYnNzcGFyYW1zLnNzaWRfbGVuKTsKLQlsYnNfZGViX2pvaW4oInJlcXVlc3RlZCBzc2lkICclcycsIHNzaWQgbGVuZ3RoICV1XG4iLAotCQlwcmludF9zc2lkKHNzaWQsIGJzcy0+c3NpZCwgYnNzLT5zc2lkX2xlbiksCi0JCWJzcy0+c3NpZF9sZW4pOwotCi0JLyogY2hlY2sgaWYgdGhlIHJlcXVlc3RlZCBTU0lEIGlzIGFscmVhZHkgam9pbmVkICovCi0JaWYgKHByaXYtPmN1cmJzc3BhcmFtcy5zc2lkX2xlbiAmJgotCSAgICAhbGJzX3NzaWRfY21wKHByaXYtPmN1cmJzc3BhcmFtcy5zc2lkLAotCQkJcHJpdi0+Y3VyYnNzcGFyYW1zLnNzaWRfbGVuLAotCQkJYnNzLT5zc2lkLCBic3MtPnNzaWRfbGVuKSAmJgotCSAgICAocHJpdi0+bW9kZSA9PSBJV19NT0RFX0FESE9DKSAmJgotCSAgICAocHJpdi0+Y29ubmVjdF9zdGF0dXMgPT0gTEJTX0NPTk5FQ1RFRCkpIHsKLQkJdW5pb24gaXdyZXFfZGF0YSB3cnF1OwotCi0JCWxic19kZWJfam9pbigiQURIT0NfSl9DTUQ6IE5ldyBhZC1ob2MgU1NJRCBpcyB0aGUgc2FtZSBhcyAiCi0JCQkiY3VycmVudCwgbm90IGF0dGVtcHRpbmcgdG8gcmUtam9pbiIpOwotCi0JCS8qIFNlbmQgdGhlIHJlLWFzc29jaWF0aW9uIGV2ZW50IHRob3VnaCwgYmVjYXVzZSB0aGUgYXNzb2NpYXRpb24KLQkJICogcmVxdWVzdCByZWFsbHkgd2FzIHN1Y2Nlc3NmdWwsIGV2ZW4gaWYganVzdCBhIG51bGwtb3AuCi0JCSAqLwotCQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7Ci0JCW1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgcHJpdi0+Y3VyYnNzcGFyYW1zLmJzc2lkLAotCQkgICAgICAgRVRIX0FMRU4pOwotCQl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCQl3aXJlbGVzc19zZW5kX2V2ZW50KHByaXYtPmRldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIFVzZSBzaG9ydCBwcmVhbWJsZSBvbmx5IHdoZW4gYm90aCB0aGUgQlNTIGFuZCBmaXJtd2FyZSBzdXBwb3J0IGl0ICovCi0JaWYgKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkgewotCQlsYnNfZGViX2pvaW4oIkFkaG9jSm9pbjogU2hvcnQgcHJlYW1ibGVcbiIpOwotCQlwcmVhbWJsZSA9IFJBRElPX1BSRUFNQkxFX1NIT1JUOwotCX0KLQotCXJldCA9IGxic19zZXRfcmFkaW8ocHJpdiwgcHJlYW1ibGUsIDEpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0JbGJzX2RlYl9qb2luKCJBZGhvY0pvaW46IGNoYW5uZWwgPSAlZFxuIiwgYXNzb2NfcmVxLT5jaGFubmVsKTsKLQlsYnNfZGViX2pvaW4oIkFkaG9jSm9pbjogYmFuZCA9ICVjXG4iLCBhc3NvY19yZXEtPmJhbmQpOwotCi0JcHJpdi0+YWRob2NjcmVhdGUgPSAwOwotCXByaXYtPmNoYW5uZWwgPSBic3MtPmNoYW5uZWw7Ci0KLQkvKiBCdWlsZCB0aGUgam9pbiBjb21tYW5kICovCi0JbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKLQljbWQuaGRyLnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoY21kKSk7Ci0KLQljbWQuYnNzLnR5cGUgPSBDTURfQlNTX1RZUEVfSUJTUzsKLQljbWQuYnNzLmJlYWNvbnBlcmlvZCA9IGNwdV90b19sZTE2KGJzcy0+YmVhY29ucGVyaW9kKTsKLQotCW1lbWNweSgmY21kLmJzcy5ic3NpZCwgJmJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKLQltZW1jcHkoJmNtZC5ic3Muc3NpZCwgJmJzcy0+c3NpZCwgYnNzLT5zc2lkX2xlbik7Ci0KLQltZW1jcHkoJmNtZC5ic3MuZHMsICZic3MtPnBoeS5kcywgc2l6ZW9mKHN0cnVjdCBpZWVlX2llX2RzX3BhcmFtX3NldCkpOwotCi0JbWVtY3B5KCZjbWQuYnNzLmlic3MsICZic3MtPnNzLmlic3MsCi0JICAgICAgIHNpemVvZihzdHJ1Y3QgaWVlZV9pZV9pYnNzX3BhcmFtX3NldCkpOwotCi0JY21kLmJzcy5jYXBhYmlsaXR5ID0gY3B1X3RvX2xlMTYoYnNzLT5jYXBhYmlsaXR5ICYgQ0FQSU5GT19NQVNLKTsKLQlsYnNfZGViX2pvaW4oIkFESE9DX0pfQ01EOiB0bXBjYXA9JTRYIENBUElORk9fTUFTSz0lNFhcbiIsCi0JICAgICAgIGJzcy0+Y2FwYWJpbGl0eSwgQ0FQSU5GT19NQVNLKTsKLQotCS8qIGluZm9ybWF0aW9uIG9uIEJTU0lEIGRlc2NyaXB0b3IgcGFzc2VkIHRvIEZXICovCi0JbGJzX2RlYl9qb2luKCJBREhPQ19KX0NNRDogQlNTSUQgPSAlcE0sIFNTSUQgPSAnJXMnXG4iLAotCQkJY21kLmJzcy5ic3NpZCwgY21kLmJzcy5zc2lkKTsKLQotCS8qIE9ubHkgdjggYW5kIGJlbG93IHN1cHBvcnQgc2V0dGluZyB0aGVzZSAqLwotCWlmIChwcml2LT5md3JlbGVhc2UgPCAweDA5MDAwMDAwKSB7Ci0JCS8qIGZhaWx0aW1lb3V0ICovCi0JCWNtZC5mYWlsdGltZW91dCA9IGNwdV90b19sZTE2KE1SVkRSVl9BU1NPQ0lBVElPTl9USU1FX09VVCk7Ci0JCS8qIHByb2JlZGVsYXkgKi8KLQkJY21kLnByb2JlZGVsYXkgPSBjcHVfdG9fbGUxNihDTURfU0NBTl9QUk9CRV9ERUxBWV9USU1FKTsKLQl9Ci0KLQkvKiBDb3B5IERhdGEgcmF0ZXMgZnJvbSB0aGUgcmF0ZXMgcmVjb3JkZWQgaW4gc2NhbiByZXNwb25zZSAqLwotCW1lbXNldChjbWQuYnNzLnJhdGVzLCAwLCBzaXplb2YoY21kLmJzcy5yYXRlcykpOwotCXJhdGVzaXplID0gbWluX3QodTE2LCBBUlJBWV9TSVpFKGNtZC5ic3MucmF0ZXMpLCBBUlJBWV9TSVpFIChic3MtPnJhdGVzKSk7Ci0JbWVtY3B5KGNtZC5ic3MucmF0ZXMsIGJzcy0+cmF0ZXMsIHJhdGVzaXplKTsKLQlpZiAoZ2V0X2NvbW1vbl9yYXRlcyhwcml2LCBjbWQuYnNzLnJhdGVzLCAmcmF0ZXNpemUpKSB7Ci0JCWxic19kZWJfam9pbigiQURIT0NfSk9JTjogZ2V0X2NvbW1vbl9yYXRlcyByZXR1cm5lZCBlcnJvci5cbiIpOwotCQlyZXQgPSAtMTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogQ29weSB0aGUgYWQtaG9jIGNyZWF0aW9uIHJhdGVzIGludG8gQ3VycmVudCBCU1Mgc3RhdGUgc3RydWN0dXJlICovCi0JbWVtc2V0KCZwcml2LT5jdXJic3NwYXJhbXMucmF0ZXMsIDAsIHNpemVvZihwcml2LT5jdXJic3NwYXJhbXMucmF0ZXMpKTsKLQltZW1jcHkoJnByaXYtPmN1cmJzc3BhcmFtcy5yYXRlcywgY21kLmJzcy5yYXRlcywgcmF0ZXNpemUpOwotCi0JLyogU2V0IE1TQiBvbiBiYXNpYyByYXRlcyBhcyB0aGUgZmlybXdhcmUgcmVxdWlyZXMsIGJ1dCBfYWZ0ZXJfCi0JICogY29weWluZyB0byBjdXJyZW50IGJzcyByYXRlcy4KLQkgKi8KLQlsYnNfc2V0X2Jhc2ljX3JhdGVfZmxhZ3MoY21kLmJzcy5yYXRlcywgcmF0ZXNpemUpOwotCi0JY21kLmJzcy5pYnNzLmF0aW13aW5kb3cgPSBic3MtPmF0aW13aW5kb3c7Ci0KLQlpZiAoYXNzb2NfcmVxLT5zZWNpbmZvLndlcF9lbmFibGVkKSB7Ci0JCXUxNiB0bXAgPSBsZTE2X3RvX2NwdShjbWQuYnNzLmNhcGFiaWxpdHkpOwotCQl0bXAgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7Ci0JCWNtZC5ic3MuY2FwYWJpbGl0eSA9IGNwdV90b19sZTE2KHRtcCk7Ci0JfQotCi0JaWYgKHByaXYtPnBzbW9kZSA9PSBMQlM4MDJfMTFQT1dFUk1PREVNQVhfUFNQKSB7Ci0JCV9fbGUzMiBsb2NhbF9wc19tb2RlID0gY3B1X3RvX2xlMzIoTEJTODAyXzExUE9XRVJNT0RFQ0FNKTsKLQotCQkvKiB3YWtlIHVwIGZpcnN0ICovCi0JCXJldCA9IGxic19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwgQ01EXzgwMl8xMV9QU19NT0RFLAotCQkJCQkJICAgQ01EX0FDVF9TRVQsIDAsIDAsCi0JCQkJCQkgICAmbG9jYWxfcHNfbW9kZSk7Ci0JCWlmIChyZXQpIHsKLQkJCXJldCA9IC0xOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KLQlyZXQgPSBsYnNfY21kX3dpdGhfcmVzcG9uc2UocHJpdiwgQ01EXzgwMl8xMV9BRF9IT0NfSk9JTiwgJmNtZCk7Ci0JaWYgKHJldCA9PSAwKSB7Ci0JCXJldCA9IGxic19hZGhvY19wb3N0KHByaXYsCi0JCQkJICAgICAoc3RydWN0IGNtZF9kc184MDJfMTFfYWRfaG9jX3Jlc3VsdCAqKSZjbWQpOwotCX0KLQotb3V0OgotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0FTU09DLCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqICBAYnJpZWYgU3RhcnQgYW4gQWRob2MgTmV0d29yawotICoKLSAqICBAcGFyYW0gcHJpdiAgICAgICAgIEEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIGFzc29jX3JlcSAgICBUaGUgYXNzb2NpYXRpb24gcmVxdWVzdCBkZXNjcmliaW5nIHRoZSBCU1MgdG8gc3RhcnQKLSAqCi0gKiAgQHJldHVybiAgICAgICAgICAgICAwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKLSAqLwotc3RhdGljIGludCBsYnNfYWRob2Nfc3RhcnQoc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCXN0cnVjdCBhc3NvY19yZXF1ZXN0ICphc3NvY19yZXEpCi17Ci0Jc3RydWN0IGNtZF9kc184MDJfMTFfYWRfaG9jX3N0YXJ0IGNtZDsKLQl1OCBwcmVhbWJsZSA9IFJBRElPX1BSRUFNQkxFX1NIT1JUOwotCXNpemVfdCByYXRlc2l6ZSA9IDA7Ci0JdTE2IHRtcGNhcCA9IDA7Ci0JaW50IHJldCA9IDA7Ci0JREVDTEFSRV9TU0lEX0JVRihzc2lkKTsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9BU1NPQyk7Ci0KLQlyZXQgPSBsYnNfc2V0X3JhZGlvKHByaXYsIHByZWFtYmxlLCAxKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKLQotCS8qIEJ1aWxkIHRoZSBzdGFydCBjb21tYW5kICovCi0JbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKLQljbWQuaGRyLnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoY21kKSk7Ci0KLQltZW1jcHkoY21kLnNzaWQsIGFzc29jX3JlcS0+c3NpZCwgYXNzb2NfcmVxLT5zc2lkX2xlbik7Ci0KLQlsYnNfZGViX2pvaW4oIkFESE9DX1NUQVJUOiBTU0lEICclcycsIHNzaWQgbGVuZ3RoICV1XG4iLAotCQlwcmludF9zc2lkKHNzaWQsIGFzc29jX3JlcS0+c3NpZCwgYXNzb2NfcmVxLT5zc2lkX2xlbiksCi0JCWFzc29jX3JlcS0+c3NpZF9sZW4pOwotCi0JY21kLmJzc3R5cGUgPSBDTURfQlNTX1RZUEVfSUJTUzsKLQotCWlmIChwcml2LT5iZWFjb25fcGVyaW9kID09IDApCi0JCXByaXYtPmJlYWNvbl9wZXJpb2QgPSBNUlZEUlZfQkVBQ09OX0lOVEVSVkFMOwotCWNtZC5iZWFjb25wZXJpb2QgPSBjcHVfdG9fbGUxNihwcml2LT5iZWFjb25fcGVyaW9kKTsKLQotCVdBUk5fT04oIWFzc29jX3JlcS0+Y2hhbm5lbCk7Ci0KLQkvKiBzZXQgUGh5c2ljYWwgcGFyYW1ldGVyIHNldCAqLwotCWNtZC5kcy5oZWFkZXIuaWQgPSBXTEFOX0VJRF9EU19QQVJBTVM7Ci0JY21kLmRzLmhlYWRlci5sZW4gPSAxOwotCWNtZC5kcy5jaGFubmVsID0gYXNzb2NfcmVxLT5jaGFubmVsOwotCi0JLyogc2V0IElCU1MgcGFyYW1ldGVyIHNldCAqLwotCWNtZC5pYnNzLmhlYWRlci5pZCA9IFdMQU5fRUlEX0lCU1NfUEFSQU1TOwotCWNtZC5pYnNzLmhlYWRlci5sZW4gPSAyOwotCWNtZC5pYnNzLmF0aW13aW5kb3cgPSBjcHVfdG9fbGUxNigwKTsKLQotCS8qIHNldCBjYXBhYmlsaXR5IGluZm8gKi8KLQl0bXBjYXAgPSBXTEFOX0NBUEFCSUxJVFlfSUJTUzsKLQlpZiAoYXNzb2NfcmVxLT5zZWNpbmZvLndlcF9lbmFibGVkIHx8Ci0JICAgIGFzc29jX3JlcS0+c2VjaW5mby5XUEFlbmFibGVkIHx8Ci0JICAgIGFzc29jX3JlcS0+c2VjaW5mby5XUEEyZW5hYmxlZCkgewotCQlsYnNfZGViX2pvaW4oIkFESE9DX1NUQVJUOiBXRVAvV1BBIGVuYWJsZWQsIHByaXZhY3kgb25cbiIpOwotCQl0bXBjYXAgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7Ci0JfSBlbHNlCi0JCWxic19kZWJfam9pbigiQURIT0NfU1RBUlQ6IFdFUCBkaXNhYmxlZCwgcHJpdmFjeSBvZmZcbiIpOwotCi0JY21kLmNhcGFiaWxpdHkgPSBjcHVfdG9fbGUxNih0bXBjYXApOwotCi0JLyogT25seSB2OCBhbmQgYmVsb3cgc3VwcG9ydCBzZXR0aW5nIHByb2JlIGRlbGF5ICovCi0JaWYgKHByaXYtPmZ3cmVsZWFzZSA8IDB4MDkwMDAwMDApCi0JCWNtZC5wcm9iZWRlbGF5ID0gY3B1X3RvX2xlMTYoQ01EX1NDQU5fUFJPQkVfREVMQVlfVElNRSk7Ci0KLQlyYXRlc2l6ZSA9IG1pbihzaXplb2YoY21kLnJhdGVzKSwgc2l6ZW9mKGxic19iZ19yYXRlcykpOwotCW1lbWNweShjbWQucmF0ZXMsIGxic19iZ19yYXRlcywgcmF0ZXNpemUpOwotCi0JLyogQ29weSB0aGUgYWQtaG9jIGNyZWF0aW5nIHJhdGVzIGludG8gQ3VycmVudCBCU1Mgc3RhdGUgc3RydWN0dXJlICovCi0JbWVtc2V0KCZwcml2LT5jdXJic3NwYXJhbXMucmF0ZXMsIDAsIHNpemVvZihwcml2LT5jdXJic3NwYXJhbXMucmF0ZXMpKTsKLQltZW1jcHkoJnByaXYtPmN1cmJzc3BhcmFtcy5yYXRlcywgJmNtZC5yYXRlcywgcmF0ZXNpemUpOwotCi0JLyogU2V0IE1TQiBvbiBiYXNpYyByYXRlcyBhcyB0aGUgZmlybXdhcmUgcmVxdWlyZXMsIGJ1dCBfYWZ0ZXJfCi0JICogY29weWluZyB0byBjdXJyZW50IGJzcyByYXRlcy4KLQkgKi8KLQlsYnNfc2V0X2Jhc2ljX3JhdGVfZmxhZ3MoY21kLnJhdGVzLCByYXRlc2l6ZSk7Ci0KLQlsYnNfZGViX2pvaW4oIkFESE9DX1NUQVJUOiByYXRlcz0lMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAotCSAgICAgICBjbWQucmF0ZXNbMF0sIGNtZC5yYXRlc1sxXSwgY21kLnJhdGVzWzJdLCBjbWQucmF0ZXNbM10pOwotCi0JbGJzX2RlYl9qb2luKCJBREhPQ19TVEFSVDogU3RhcnRpbmcgQWQtSG9jIEJTUyBvbiBjaGFubmVsICVkLCBiYW5kICVkXG4iLAotCQkgICAgIGFzc29jX3JlcS0+Y2hhbm5lbCwgYXNzb2NfcmVxLT5iYW5kKTsKLQotCXByaXYtPmFkaG9jY3JlYXRlID0gMTsKLQlwcml2LT5tb2RlID0gSVdfTU9ERV9BREhPQzsKLQotCXJldCA9IGxic19jbWRfd2l0aF9yZXNwb25zZShwcml2LCBDTURfODAyXzExX0FEX0hPQ19TVEFSVCwgJmNtZCk7Ci0JaWYgKHJldCA9PSAwKQotCQlyZXQgPSBsYnNfYWRob2NfcG9zdChwcml2LAotCQkJCSAgICAgKHN0cnVjdCBjbWRfZHNfODAyXzExX2FkX2hvY19yZXN1bHQgKikmY21kKTsKLQotb3V0OgotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0FTU09DLCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqICBAYnJpZWYgU3RvcCBhbmQgQWQtSG9jIG5ldHdvcmsgYW5kIGV4aXQgQWQtSG9jIG1vZGUKLSAqCi0gKiAgQHBhcmFtIHByaXYgICAgICAgICBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEByZXR1cm4gICAgICAgICAgICAgMCBvbiBzdWNjZXNzLCBvciBhbiBlcnJvcgotICovCi1pbnQgbGJzX2FkaG9jX3N0b3Aoc3RydWN0IGxic19wcml2YXRlICpwcml2KQotewotCXN0cnVjdCBjbWRfZHNfODAyXzExX2FkX2hvY19zdG9wIGNtZDsKLQlpbnQgcmV0OwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0pPSU4pOwotCi0JbWVtc2V0KCZjbWQsIDAsIHNpemVvZiAoY21kKSk7Ci0JY21kLmhkci5zaXplID0gY3B1X3RvX2xlMTYgKHNpemVvZiAoY21kKSk7Ci0KLQlyZXQgPSBsYnNfY21kX3dpdGhfcmVzcG9uc2UocHJpdiwgQ01EXzgwMl8xMV9BRF9IT0NfU1RPUCwgJmNtZCk7Ci0KLQkvKiBDbGVhbiB1cCBldmVyeXRoaW5nIGV2ZW4gaWYgdGhlcmUgd2FzIGFuIGVycm9yICovCi0JbGJzX21hY19ldmVudF9kaXNjb25uZWN0ZWQocHJpdik7Ci0KLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9BU1NPQywgInJldCAlZCIsIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgbWF0Y2hfYnNzX25vX3NlY3VyaXR5KHN0cnVjdCBsYnNfODAyXzExX3NlY3VyaXR5ICpzZWNpbmZvLAotCQkJCQlzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKm1hdGNoX2JzcykKLXsKLQlpZiAoIXNlY2luZm8tPndlcF9lbmFibGVkICYmCi0JICAgICFzZWNpbmZvLT5XUEFlbmFibGVkICYmICFzZWNpbmZvLT5XUEEyZW5hYmxlZCAmJgotCSAgICBtYXRjaF9ic3MtPndwYV9pZVswXSAhPSBXTEFOX0VJRF9HRU5FUklDICYmCi0JICAgIG1hdGNoX2Jzcy0+cnNuX2llWzBdICE9IFdMQU5fRUlEX1JTTiAmJgotCSAgICAhKG1hdGNoX2Jzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSkKLQkJcmV0dXJuIDE7Ci0JZWxzZQotCQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgbWF0Y2hfYnNzX3N0YXRpY193ZXAoc3RydWN0IGxic184MDJfMTFfc2VjdXJpdHkgKnNlY2luZm8sCi0JCQkJICAgICAgIHN0cnVjdCBic3NfZGVzY3JpcHRvciAqbWF0Y2hfYnNzKQotewotCWlmIChzZWNpbmZvLT53ZXBfZW5hYmxlZCAmJgotCSAgICAhc2VjaW5mby0+V1BBZW5hYmxlZCAmJiAhc2VjaW5mby0+V1BBMmVuYWJsZWQgJiYKLQkgICAgKG1hdGNoX2Jzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSkKLQkJcmV0dXJuIDE7Ci0JZWxzZQotCQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgbWF0Y2hfYnNzX3dwYShzdHJ1Y3QgbGJzXzgwMl8xMV9zZWN1cml0eSAqc2VjaW5mbywKLQkJCQlzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKm1hdGNoX2JzcykKLXsKLQlpZiAoIXNlY2luZm8tPndlcF9lbmFibGVkICYmIHNlY2luZm8tPldQQWVuYWJsZWQgJiYKLQkgICAgKG1hdGNoX2Jzcy0+d3BhX2llWzBdID09IFdMQU5fRUlEX0dFTkVSSUMpCi0JICAgIC8qIHByaXZhY3kgYml0IG1heSBOT1QgYmUgc2V0IGluIHNvbWUgQVBzIGxpa2UgTGlua1N5cyBXUlQ1NEcKLQkgICAgJiYgKG1hdGNoX2Jzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSAqLwotCSAgICkKLQkJcmV0dXJuIDE7Ci0JZWxzZQotCQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgbWF0Y2hfYnNzX3dwYTIoc3RydWN0IGxic184MDJfMTFfc2VjdXJpdHkgKnNlY2luZm8sCi0JCQkJIHN0cnVjdCBic3NfZGVzY3JpcHRvciAqbWF0Y2hfYnNzKQotewotCWlmICghc2VjaW5mby0+d2VwX2VuYWJsZWQgJiYgc2VjaW5mby0+V1BBMmVuYWJsZWQgJiYKLQkgICAgKG1hdGNoX2Jzcy0+cnNuX2llWzBdID09IFdMQU5fRUlEX1JTTikKLQkgICAgLyogcHJpdmFjeSBiaXQgbWF5IE5PVCBiZSBzZXQgaW4gc29tZSBBUHMgbGlrZSBMaW5rU3lzIFdSVDU0RwotCSAgICAobWF0Y2hfYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpICovCi0JICAgKQotCQlyZXR1cm4gMTsKLQllbHNlCi0JCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBtYXRjaF9ic3NfZHluYW1pY193ZXAoc3RydWN0IGxic184MDJfMTFfc2VjdXJpdHkgKnNlY2luZm8sCi0JCQkJCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqbWF0Y2hfYnNzKQotewotCWlmICghc2VjaW5mby0+d2VwX2VuYWJsZWQgJiYKLQkgICAgIXNlY2luZm8tPldQQWVuYWJsZWQgJiYgIXNlY2luZm8tPldQQTJlbmFibGVkICYmCi0JICAgIChtYXRjaF9ic3MtPndwYV9pZVswXSAhPSBXTEFOX0VJRF9HRU5FUklDKSAmJgotCSAgICAobWF0Y2hfYnNzLT5yc25faWVbMF0gIT0gV0xBTl9FSURfUlNOKSAmJgotCSAgICAobWF0Y2hfYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpKQotCQlyZXR1cm4gMTsKLQllbHNlCi0JCXJldHVybiAwOwotfQotCi0vKioKLSAqICBAYnJpZWYgQ2hlY2sgaWYgYSBzY2FubmVkIG5ldHdvcmsgY29tcGF0aWJsZSB3aXRoIHRoZSBkcml2ZXIgc2V0dGluZ3MKLSAqCi0gKiAgIFdFUCAgICAgV1BBICAgICBXUEEyICAgIGFkLWhvYyAgZW5jcnlwdCAgICAgICAgICAgICAgICAgICAgICBOZXR3b3JrCi0gKiBlbmFibGVkIGVuYWJsZWQgIGVuYWJsZWQgICBBRVMgICAgIG1vZGUgICBwcml2YWN5ICBXUEEgIFdQQTIgIENvbXBhdGlibGUKLSAqICAgIDAgICAgICAgMCAgICAgICAgMCAgICAgICAwICAgICAgTk9ORSAgICAgIDAgICAgICAwICAgIDAgICB5ZXMgTm8gc2VjdXJpdHkKLSAqICAgIDEgICAgICAgMCAgICAgICAgMCAgICAgICAwICAgICAgTk9ORSAgICAgIDEgICAgICAwICAgIDAgICB5ZXMgU3RhdGljIFdFUAotICogICAgMCAgICAgICAxICAgICAgICAwICAgICAgIDAgICAgICAgeCAgICAgICAgMXggICAgIDEgICAgeCAgIHllcyBXUEEKLSAqICAgIDAgICAgICAgMCAgICAgICAgMSAgICAgICAwICAgICAgIHggICAgICAgIDF4ICAgICB4ICAgIDEgICB5ZXMgV1BBMgotICogICAgMCAgICAgICAwICAgICAgICAwICAgICAgIDEgICAgICBOT05FICAgICAgMSAgICAgIDAgICAgMCAgIHllcyBBZC1ob2MgQUVTCi0gKiAgICAwICAgICAgIDAgICAgICAgIDAgICAgICAgMCAgICAgIT1OT05FICAgICAxICAgICAgMCAgICAwICAgeWVzIER5bmFtaWMgV0VQCi0gKgotICoKLSAqICBAcGFyYW0gcHJpdiBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlCi0gKiAgQHBhcmFtIGluZGV4ICAgSW5kZXggaW4gc2NhbnRhYmxlIHRvIGNoZWNrIGFnYWluc3QgY3VycmVudCBkcml2ZXIgc2V0dGluZ3MKLSAqICBAcGFyYW0gbW9kZSAgICBOZXR3b3JrIG1vZGU6IEluZnJhc3RydWN0dXJlIG9yIElCU1MKLSAqCi0gKiAgQHJldHVybiAgICAgICAgSW5kZXggaW4gc2NhbnRhYmxlLCBvciBlcnJvciBjb2RlIGlmIG5lZ2F0aXZlCi0gKi8KLXN0YXRpYyBpbnQgaXNfbmV0d29ya19jb21wYXRpYmxlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCQkgc3RydWN0IGJzc19kZXNjcmlwdG9yICpic3MsIHVpbnQ4X3QgbW9kZSkKLXsKLQlpbnQgbWF0Y2hlZCA9IDA7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfU0NBTik7Ci0KLQlpZiAoYnNzLT5tb2RlICE9IG1vZGUpCi0JCWdvdG8gZG9uZTsKLQotCW1hdGNoZWQgPSBtYXRjaF9ic3Nfbm9fc2VjdXJpdHkoJnByaXYtPnNlY2luZm8sIGJzcyk7Ci0JaWYgKG1hdGNoZWQpCi0JCWdvdG8gZG9uZTsKLQltYXRjaGVkID0gbWF0Y2hfYnNzX3N0YXRpY193ZXAoJnByaXYtPnNlY2luZm8sIGJzcyk7Ci0JaWYgKG1hdGNoZWQpCi0JCWdvdG8gZG9uZTsKLQltYXRjaGVkID0gbWF0Y2hfYnNzX3dwYSgmcHJpdi0+c2VjaW5mbywgYnNzKTsKLQlpZiAobWF0Y2hlZCkgewotCQlsYnNfZGViX3NjYW4oImlzX25ldHdvcmtfY29tcGF0aWJsZSgpIFdQQTogd3BhX2llIDB4JXggIgotCQkJICAgICAid3BhMl9pZSAweCV4IFdFUCAlcyBXUEEgJXMgV1BBMiAlcyAiCi0JCQkgICAgICJwcml2YWN5IDB4JXhcbiIsIGJzcy0+d3BhX2llWzBdLCBic3MtPnJzbl9pZVswXSwKLQkJCSAgICAgcHJpdi0+c2VjaW5mby53ZXBfZW5hYmxlZCA/ICJlIiA6ICJkIiwKLQkJCSAgICAgcHJpdi0+c2VjaW5mby5XUEFlbmFibGVkID8gImUiIDogImQiLAotCQkJICAgICBwcml2LT5zZWNpbmZvLldQQTJlbmFibGVkID8gImUiIDogImQiLAotCQkJICAgICAoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpKTsKLQkJZ290byBkb25lOwotCX0KLQltYXRjaGVkID0gbWF0Y2hfYnNzX3dwYTIoJnByaXYtPnNlY2luZm8sIGJzcyk7Ci0JaWYgKG1hdGNoZWQpIHsKLQkJbGJzX2RlYl9zY2FuKCJpc19uZXR3b3JrX2NvbXBhdGlibGUoKSBXUEEyOiB3cGFfaWUgMHgleCAiCi0JCQkgICAgICJ3cGEyX2llIDB4JXggV0VQICVzIFdQQSAlcyBXUEEyICVzICIKLQkJCSAgICAgInByaXZhY3kgMHgleFxuIiwgYnNzLT53cGFfaWVbMF0sIGJzcy0+cnNuX2llWzBdLAotCQkJICAgICBwcml2LT5zZWNpbmZvLndlcF9lbmFibGVkID8gImUiIDogImQiLAotCQkJICAgICBwcml2LT5zZWNpbmZvLldQQWVuYWJsZWQgPyAiZSIgOiAiZCIsCi0JCQkgICAgIHByaXYtPnNlY2luZm8uV1BBMmVuYWJsZWQgPyAiZSIgOiAiZCIsCi0JCQkgICAgIChic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkpOwotCQlnb3RvIGRvbmU7Ci0JfQotCW1hdGNoZWQgPSBtYXRjaF9ic3NfZHluYW1pY193ZXAoJnByaXYtPnNlY2luZm8sIGJzcyk7Ci0JaWYgKG1hdGNoZWQpIHsKLQkJbGJzX2RlYl9zY2FuKCJpc19uZXR3b3JrX2NvbXBhdGlibGUoKSBkeW5hbWljIFdFUDogIgotCQkJICAgICAid3BhX2llIDB4JXggd3BhMl9pZSAweCV4IHByaXZhY3kgMHgleFxuIiwKLQkJCSAgICAgYnNzLT53cGFfaWVbMF0sIGJzcy0+cnNuX2llWzBdLAotCQkJICAgICAoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpKTsKLQkJZ290byBkb25lOwotCX0KLQotCS8qIGJzcyBzZWN1cml0eSBzZXR0aW5ncyBkb24ndCBtYXRjaCB0aG9zZSBjb25maWd1cmVkIG9uIGNhcmQgKi8KLQlsYnNfZGViX3NjYW4oImlzX25ldHdvcmtfY29tcGF0aWJsZSgpIEZBSUxFRDogd3BhX2llIDB4JXggIgotCQkgICAgICJ3cGEyX2llIDB4JXggV0VQICVzIFdQQSAlcyBXUEEyICVzIHByaXZhY3kgMHgleFxuIiwKLQkJICAgICBic3MtPndwYV9pZVswXSwgYnNzLT5yc25faWVbMF0sCi0JCSAgICAgcHJpdi0+c2VjaW5mby53ZXBfZW5hYmxlZCA/ICJlIiA6ICJkIiwKLQkJICAgICBwcml2LT5zZWNpbmZvLldQQWVuYWJsZWQgPyAiZSIgOiAiZCIsCi0JCSAgICAgcHJpdi0+c2VjaW5mby5XUEEyZW5hYmxlZCA/ICJlIiA6ICJkIiwKLQkJICAgICAoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpKTsKLQotZG9uZToKLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TQ0FOLCAibWF0Y2hlZDogJWQiLCBtYXRjaGVkKTsKLQlyZXR1cm4gbWF0Y2hlZDsKLX0KLQotLyoqCi0gKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gZmluZHMgYSBzcGVjaWZpYyBjb21wYXRpYmxlIEJTU0lEIGluIHRoZSBzY2FuIGxpc3QKLSAqCi0gKiAgVXNlZCBpbiBhc3NvY2lhdGlvbiBjb2RlCi0gKgotICogIEBwYXJhbSBwcml2ICBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlCi0gKiAgQHBhcmFtIGJzc2lkICAgIEJTU0lEIHRvIGZpbmQgaW4gdGhlIHNjYW4gbGlzdAotICogIEBwYXJhbSBtb2RlICAgICBOZXR3b3JrIG1vZGU6IEluZnJhc3RydWN0dXJlIG9yIElCU1MKLSAqCi0gKiAgQHJldHVybiAgICAgICAgIGluZGV4IGluIEJTU0lEIGxpc3QsIG9yIGVycm9yIHJldHVybiBjb2RlICg8IDApCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKmxic19maW5kX2Jzc2lkX2luX2xpc3Qoc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJCQkgICAgICB1aW50OF90ICpic3NpZCwgdWludDhfdCBtb2RlKQotewotCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqaXRlcl9ic3M7Ci0Jc3RydWN0IGJzc19kZXNjcmlwdG9yICpmb3VuZF9ic3MgPSBOVUxMOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX1NDQU4pOwotCi0JaWYgKCFic3NpZCkKLQkJZ290byBvdXQ7Ci0KLQlsYnNfZGViX2hleChMQlNfREVCX1NDQU4sICJsb29raW5nIGZvciIsIGJzc2lkLCBFVEhfQUxFTik7Ci0KLQkvKiBMb29rIHRocm91Z2ggdGhlIHNjYW4gdGFibGUgZm9yIGEgY29tcGF0aWJsZSBtYXRjaC4gIFRoZSBsb29wIHdpbGwKLQkgKiAgIGNvbnRpbnVlIHBhc3QgYSBtYXRjaGVkIGJzc2lkIHRoYXQgaXMgbm90IGNvbXBhdGlibGUgaW4gY2FzZSB0aGVyZQotCSAqICAgaXMgYW4gQVAgd2l0aCBtdWx0aXBsZSBTU0lEcyBhc3NpZ25lZCB0byB0aGUgc2FtZSBCU1NJRAotCSAqLwotCW11dGV4X2xvY2soJnByaXYtPmxvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoaXRlcl9ic3MsICZwcml2LT5uZXR3b3JrX2xpc3QsIGxpc3QpIHsKLQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihpdGVyX2Jzcy0+YnNzaWQsIGJzc2lkKSkKLQkJCWNvbnRpbnVlOyAvKiBic3NpZCBkb2Vzbid0IG1hdGNoICovCi0JCXN3aXRjaCAobW9kZSkgewotCQljYXNlIElXX01PREVfSU5GUkE6Ci0JCWNhc2UgSVdfTU9ERV9BREhPQzoKLQkJCWlmICghaXNfbmV0d29ya19jb21wYXRpYmxlKHByaXYsIGl0ZXJfYnNzLCBtb2RlKSkKLQkJCQlicmVhazsKLQkJCWZvdW5kX2JzcyA9IGl0ZXJfYnNzOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlmb3VuZF9ic3MgPSBpdGVyX2JzczsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7Ci0KLW91dDoKLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TQ0FOLCAiZm91bmRfYnNzICVwIiwgZm91bmRfYnNzKTsKLQlyZXR1cm4gZm91bmRfYnNzOwotfQotCi0vKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBmaW5kcyBzc2lkIGluIHNzaWQgbGlzdC4KLSAqCi0gKiAgVXNlZCBpbiBhc3NvY2lhdGlvbiBjb2RlCi0gKgotICogIEBwYXJhbSBwcml2ICBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlCi0gKiAgQHBhcmFtIHNzaWQgICAgIFNTSUQgdG8gZmluZCBpbiB0aGUgbGlzdAotICogIEBwYXJhbSBic3NpZCAgICBCU1NJRCB0byBxdWFsaWZ5IHRoZSBTU0lEIHNlbGVjdGlvbiAoaWYgcHJvdmlkZWQpCi0gKiAgQHBhcmFtIG1vZGUgICAgIE5ldHdvcmsgbW9kZTogSW5mcmFzdHJ1Y3R1cmUgb3IgSUJTUwotICoKLSAqICBAcmV0dXJuICAgICAgICAgaW5kZXggaW4gQlNTSUQgbGlzdAotICovCi1zdGF0aWMgc3RydWN0IGJzc19kZXNjcmlwdG9yICpsYnNfZmluZF9zc2lkX2luX2xpc3Qoc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJCQkgICAgIHVpbnQ4X3QgKnNzaWQsIHVpbnQ4X3Qgc3NpZF9sZW4sCi0JCQkJCSAgICAgdWludDhfdCAqYnNzaWQsIHVpbnQ4X3QgbW9kZSwKLQkJCQkJICAgICBpbnQgY2hhbm5lbCkKLXsKLQl1MzIgYmVzdHJzc2kgPSAwOwotCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqaXRlcl9ic3MgPSBOVUxMOwotCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqZm91bmRfYnNzID0gTlVMTDsKLQlzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKnRtcF9vbGRlc3QgPSBOVUxMOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX1NDQU4pOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXJfYnNzLCAmcHJpdi0+bmV0d29ya19saXN0LCBsaXN0KSB7Ci0JCWlmICghdG1wX29sZGVzdCB8fAotCQkgICAgKGl0ZXJfYnNzLT5sYXN0X3NjYW5uZWQgPCB0bXBfb2xkZXN0LT5sYXN0X3NjYW5uZWQpKQotCQkJdG1wX29sZGVzdCA9IGl0ZXJfYnNzOwotCi0JCWlmIChsYnNfc3NpZF9jbXAoaXRlcl9ic3MtPnNzaWQsIGl0ZXJfYnNzLT5zc2lkX2xlbiwKLQkJCQkgc3NpZCwgc3NpZF9sZW4pICE9IDApCi0JCQljb250aW51ZTsgLyogc3NpZCBkb2Vzbid0IG1hdGNoICovCi0JCWlmIChic3NpZCAmJiBjb21wYXJlX2V0aGVyX2FkZHIoaXRlcl9ic3MtPmJzc2lkLCBic3NpZCkgIT0gMCkKLQkJCWNvbnRpbnVlOyAvKiBic3NpZCBkb2Vzbid0IG1hdGNoICovCi0JCWlmICgoY2hhbm5lbCA+IDApICYmIChpdGVyX2Jzcy0+Y2hhbm5lbCAhPSBjaGFubmVsKSkKLQkJCWNvbnRpbnVlOyAvKiBjaGFubmVsIGRvZXNuJ3QgbWF0Y2ggKi8KLQotCQlzd2l0Y2ggKG1vZGUpIHsKLQkJY2FzZSBJV19NT0RFX0lORlJBOgotCQljYXNlIElXX01PREVfQURIT0M6Ci0JCQlpZiAoIWlzX25ldHdvcmtfY29tcGF0aWJsZShwcml2LCBpdGVyX2JzcywgbW9kZSkpCi0JCQkJYnJlYWs7Ci0KLQkJCWlmIChic3NpZCkgewotCQkJCS8qIEZvdW5kIHJlcXVlc3RlZCBCU1NJRCAqLwotCQkJCWZvdW5kX2JzcyA9IGl0ZXJfYnNzOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCi0JCQlpZiAoU0NBTl9SU1NJKGl0ZXJfYnNzLT5yc3NpKSA+IGJlc3Ryc3NpKSB7Ci0JCQkJYmVzdHJzc2kgPSBTQ0FOX1JTU0koaXRlcl9ic3MtPnJzc2kpOwotCQkJCWZvdW5kX2JzcyA9IGl0ZXJfYnNzOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgSVdfTU9ERV9BVVRPOgotCQlkZWZhdWx0OgotCQkJaWYgKFNDQU5fUlNTSShpdGVyX2Jzcy0+cnNzaSkgPiBiZXN0cnNzaSkgewotCQkJCWJlc3Ryc3NpID0gU0NBTl9SU1NJKGl0ZXJfYnNzLT5yc3NpKTsKLQkJCQlmb3VuZF9ic3MgPSBpdGVyX2JzczsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JfQotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TQ0FOLCAiZm91bmRfYnNzICVwIiwgZm91bmRfYnNzKTsKLQlyZXR1cm4gZm91bmRfYnNzOwotfQotCi1zdGF0aWMgaW50IGFzc29jX2hlbHBlcl9lc3NpZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXNzb2NfcmVxdWVzdCAqIGFzc29jX3JlcSkKLXsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKiBic3M7Ci0JaW50IGNoYW5uZWwgPSAtMTsKLQlERUNMQVJFX1NTSURfQlVGKHNzaWQpOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0FTU09DKTsKLQotCS8qIEZJWE1FOiB0YWtlIGNoYW5uZWwgaW50byBhY2NvdW50IHdoZW4gcGlja2luZyBTU0lEcyBpZiBhIGNoYW5uZWwKLQkgKiBpcyBzZXQuCi0JICovCi0KLQlpZiAodGVzdF9iaXQoQVNTT0NfRkxBR19DSEFOTkVMLCAmYXNzb2NfcmVxLT5mbGFncykpCi0JCWNoYW5uZWwgPSBhc3NvY19yZXEtPmNoYW5uZWw7Ci0KLQlsYnNfZGViX2Fzc29jKCJTU0lEICclcycgcmVxdWVzdGVkXG4iLAotCSAgICAgICAgICAgICAgcHJpbnRfc3NpZChzc2lkLCBhc3NvY19yZXEtPnNzaWQsIGFzc29jX3JlcS0+c3NpZF9sZW4pKTsKLQlpZiAoYXNzb2NfcmVxLT5tb2RlID09IElXX01PREVfSU5GUkEpIHsKLQkJbGJzX3NlbmRfc3BlY2lmaWNfc3NpZF9zY2FuKHByaXYsIGFzc29jX3JlcS0+c3NpZCwKLQkJCWFzc29jX3JlcS0+c3NpZF9sZW4pOwotCi0JCWJzcyA9IGxic19maW5kX3NzaWRfaW5fbGlzdChwcml2LCBhc3NvY19yZXEtPnNzaWQsCi0JCQkJYXNzb2NfcmVxLT5zc2lkX2xlbiwgTlVMTCwgSVdfTU9ERV9JTkZSQSwgY2hhbm5lbCk7Ci0JCWlmIChic3MgIT0gTlVMTCkgewotCQkJbWVtY3B5KCZhc3NvY19yZXEtPmJzcywgYnNzLCBzaXplb2Yoc3RydWN0IGJzc19kZXNjcmlwdG9yKSk7Ci0JCQlyZXQgPSBsYnNfdHJ5X2Fzc29jaWF0ZShwcml2LCBhc3NvY19yZXEpOwotCQl9IGVsc2UgewotCQkJbGJzX2RlYl9hc3NvYygiU1NJRCBub3QgZm91bmQ7IGNhbm5vdCBhc3NvY2lhdGVcbiIpOwotCQl9Ci0JfSBlbHNlIGlmIChhc3NvY19yZXEtPm1vZGUgPT0gSVdfTU9ERV9BREhPQykgewotCQkvKiBTY2FuIGZvciB0aGUgbmV0d29yaywgZG8gbm90IHNhdmUgcHJldmlvdXMgcmVzdWx0cy4gIFN0YWxlCi0JCSAqICAgc2NhbiBkYXRhIHdpbGwgY2F1c2UgdXMgdG8gam9pbiBhIG5vbi1leGlzdGFudCBhZGhvYyBuZXR3b3JrCi0JCSAqLwotCQlsYnNfc2VuZF9zcGVjaWZpY19zc2lkX3NjYW4ocHJpdiwgYXNzb2NfcmVxLT5zc2lkLAotCQkJYXNzb2NfcmVxLT5zc2lkX2xlbik7Ci0KLQkJLyogU2VhcmNoIGZvciB0aGUgcmVxdWVzdGVkIFNTSUQgaW4gdGhlIHNjYW4gdGFibGUgKi8KLQkJYnNzID0gbGJzX2ZpbmRfc3NpZF9pbl9saXN0KHByaXYsIGFzc29jX3JlcS0+c3NpZCwKLQkJCQlhc3NvY19yZXEtPnNzaWRfbGVuLCBOVUxMLCBJV19NT0RFX0FESE9DLCBjaGFubmVsKTsKLQkJaWYgKGJzcyAhPSBOVUxMKSB7Ci0JCQlsYnNfZGViX2Fzc29jKCJTU0lEIGZvdW5kLCB3aWxsIGpvaW5cbiIpOwotCQkJbWVtY3B5KCZhc3NvY19yZXEtPmJzcywgYnNzLCBzaXplb2Yoc3RydWN0IGJzc19kZXNjcmlwdG9yKSk7Ci0JCQlsYnNfYWRob2Nfam9pbihwcml2LCBhc3NvY19yZXEpOwotCQl9IGVsc2UgewotCQkJLyogZWxzZSBzZW5kIFNUQVJUIGNvbW1hbmQgKi8KLQkJCWxic19kZWJfYXNzb2MoIlNTSUQgbm90IGZvdW5kLCBjcmVhdGluZyBhZGhvYyBuZXR3b3JrXG4iKTsKLQkJCW1lbWNweSgmYXNzb2NfcmVxLT5ic3Muc3NpZCwgJmFzc29jX3JlcS0+c3NpZCwKLQkJCQlJRUVFODAyMTFfTUFYX1NTSURfTEVOKTsKLQkJCWFzc29jX3JlcS0+YnNzLnNzaWRfbGVuID0gYXNzb2NfcmVxLT5zc2lkX2xlbjsKLQkJCWxic19hZGhvY19zdGFydChwcml2LCBhc3NvY19yZXEpOwotCQl9Ci0JfQotCi0JbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfQVNTT0MsICJyZXQgJWQiLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLQotc3RhdGljIGludCBhc3NvY19oZWxwZXJfYnNzaWQoc3RydWN0IGxic19wcml2YXRlICpwcml2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFzc29jX3JlcXVlc3QgKiBhc3NvY19yZXEpCi17Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IGJzc19kZXNjcmlwdG9yICogYnNzOwotCi0JbGJzX2RlYl9lbnRlcl9hcmdzKExCU19ERUJfQVNTT0MsICJCU1NJRCAlcE0iLCBhc3NvY19yZXEtPmJzc2lkKTsKLQotCS8qIFNlYXJjaCBmb3IgaW5kZXggcG9zaXRpb24gaW4gbGlzdCBmb3IgcmVxdWVzdGVkIE1BQyAqLwotCWJzcyA9IGxic19maW5kX2Jzc2lkX2luX2xpc3QocHJpdiwgYXNzb2NfcmVxLT5ic3NpZCwKLQkJCSAgICBhc3NvY19yZXEtPm1vZGUpOwotCWlmIChic3MgPT0gTlVMTCkgewotCQlsYnNfZGViX2Fzc29jKCJBU1NPQzogV0FQOiBCU1NJRCAlcE0gbm90IGZvdW5kLCAiCi0JCQkiY2Fubm90IGFzc29jaWF0ZS5cbiIsIGFzc29jX3JlcS0+YnNzaWQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQltZW1jcHkoJmFzc29jX3JlcS0+YnNzLCBic3MsIHNpemVvZihzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IpKTsKLQlpZiAoYXNzb2NfcmVxLT5tb2RlID09IElXX01PREVfSU5GUkEpIHsKLQkJcmV0ID0gbGJzX3RyeV9hc3NvY2lhdGUocHJpdiwgYXNzb2NfcmVxKTsKLQkJbGJzX2RlYl9hc3NvYygiQVNTT0M6IGxic190cnlfYXNzb2NpYXRlKGJzc2lkKSByZXR1cm5lZCAlZFxuIiwKLQkJCSAgICAgIHJldCk7Ci0JfSBlbHNlIGlmIChhc3NvY19yZXEtPm1vZGUgPT0gSVdfTU9ERV9BREhPQykgewotCQlsYnNfYWRob2Nfam9pbihwcml2LCBhc3NvY19yZXEpOwotCX0KLQotb3V0OgotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0FTU09DLCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyBpbnQgYXNzb2NfaGVscGVyX2Fzc29jaWF0ZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFzc29jX3JlcXVlc3QgKiBhc3NvY19yZXEpCi17Ci0JaW50IHJldCA9IDAsIGRvbmUgPSAwOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0FTU09DKTsKLQotCS8qIElmIHdlJ3JlIGdpdmVuIGFuZCAnYW55JyBCU1NJRCwgdHJ5IGFzc29jaWF0aW5nIGJhc2VkIG9uIFNTSUQgKi8KLQotCWlmICh0ZXN0X2JpdChBU1NPQ19GTEFHX0JTU0lELCAmYXNzb2NfcmVxLT5mbGFncykpIHsKLQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihic3NpZF9hbnksIGFzc29jX3JlcS0+YnNzaWQpICYmCi0JCSAgICBjb21wYXJlX2V0aGVyX2FkZHIoYnNzaWRfb2ZmLCBhc3NvY19yZXEtPmJzc2lkKSkgewotCQkJcmV0ID0gYXNzb2NfaGVscGVyX2Jzc2lkKHByaXYsIGFzc29jX3JlcSk7Ci0JCQlkb25lID0gMTsKLQkJfQotCX0KLQotCWlmICghZG9uZSAmJiB0ZXN0X2JpdChBU1NPQ19GTEFHX1NTSUQsICZhc3NvY19yZXEtPmZsYWdzKSkgewotCQlyZXQgPSBhc3NvY19oZWxwZXJfZXNzaWQocHJpdiwgYXNzb2NfcmVxKTsKLQl9Ci0KLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9BU1NPQywgInJldCAlZCIsIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotCi1zdGF0aWMgaW50IGFzc29jX2hlbHBlcl9tb2RlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFzc29jX3JlcXVlc3QgKiBhc3NvY19yZXEpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfQVNTT0MpOwotCi0JaWYgKGFzc29jX3JlcS0+bW9kZSA9PSBwcml2LT5tb2RlKQotCQlnb3RvIGRvbmU7Ci0KLQlpZiAoYXNzb2NfcmVxLT5tb2RlID09IElXX01PREVfSU5GUkEpIHsKLQkJaWYgKHByaXYtPnBzc3RhdGUgIT0gUFNfU1RBVEVfRlVMTF9QT1dFUikKLQkJCWxic19wc193YWtldXAocHJpdiwgQ01EX09QVElPTl9XQUlURk9SUlNQKTsKLQkJcHJpdi0+cHNtb2RlID0gTEJTODAyXzExUE9XRVJNT0RFQ0FNOwotCX0KLQotCXByaXYtPm1vZGUgPSBhc3NvY19yZXEtPm1vZGU7Ci0JcmV0ID0gbGJzX3NldF9zbm1wX21pYihwcml2LCBTTk1QX01JQl9PSURfQlNTX1RZUEUsCi0JCWFzc29jX3JlcS0+bW9kZSA9PSBJV19NT0RFX0FESE9DID8gMiA6IDEpOwotCi1kb25lOgotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0FTU09DLCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGFzc29jX2hlbHBlcl9jaGFubmVsKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFzc29jX3JlcXVlc3QgKiBhc3NvY19yZXEpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfQVNTT0MpOwotCi0JcmV0ID0gbGJzX3VwZGF0ZV9jaGFubmVsKHByaXYpOwotCWlmIChyZXQpIHsKLQkJbGJzX2RlYl9hc3NvYygiQVNTT0M6IGNoYW5uZWw6IGVycm9yIGdldHRpbmcgY2hhbm5lbC5cbiIpOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JaWYgKGFzc29jX3JlcS0+Y2hhbm5lbCA9PSBwcml2LT5jaGFubmVsKQotCQlnb3RvIGRvbmU7Ci0KLQlpZiAocHJpdi0+bWVzaF9kZXYpIHsKLQkJLyogQ2hhbmdlIG1lc2ggY2hhbm5lbCBmaXJzdDsgMjEucDIxIGZpcm13YXJlIHdvbid0IGxldAotCQkgICB5b3UgY2hhbmdlIGNoYW5uZWwgb3RoZXJ3aXNlIChldmVuIHRob3VnaCBpdCdsbCByZXR1cm4KLQkJICAgYW4gZXJyb3IgdG8gdGhpcyAqLwotCQlsYnNfbWVzaF9jb25maWcocHJpdiwgQ01EX0FDVF9NRVNIX0NPTkZJR19TVE9QLAotCQkJCWFzc29jX3JlcS0+Y2hhbm5lbCk7Ci0JfQotCi0JbGJzX2RlYl9hc3NvYygiQVNTT0M6IGNoYW5uZWw6ICVkIC0+ICVkXG4iLAotCQkgICAgICBwcml2LT5jaGFubmVsLCBhc3NvY19yZXEtPmNoYW5uZWwpOwotCi0JcmV0ID0gbGJzX3NldF9jaGFubmVsKHByaXYsIGFzc29jX3JlcS0+Y2hhbm5lbCk7Ci0JaWYgKHJldCA8IDApCi0JCWxic19kZWJfYXNzb2MoIkFTU09DOiBjaGFubmVsOiBlcnJvciBzZXR0aW5nIGNoYW5uZWwuXG4iKTsKLQotCS8qIEZJWE1FOiBzaG91bGRuJ3QgbmVlZCB0byBncmFiIHRoZSBjaGFubmVsIF9hZ2Fpbl8gYWZ0ZXIgc2V0dGluZwotCSAqIGl0IHNpbmNlIHRoZSBmaXJtd2FyZSBpcyBzdXBwb3NlZCB0byByZXR1cm4gdGhlIG5ldyBjaGFubmVsLCBidXQKLQkgKiB3aGF0ZXZlci4uLiAqLwotCXJldCA9IGxic191cGRhdGVfY2hhbm5lbChwcml2KTsKLQlpZiAocmV0KSB7Ci0JCWxic19kZWJfYXNzb2MoIkFTU09DOiBjaGFubmVsOiBlcnJvciBnZXR0aW5nIGNoYW5uZWwuXG4iKTsKLQkJZ290byBkb25lOwotCX0KLQotCWlmIChhc3NvY19yZXEtPmNoYW5uZWwgIT0gcHJpdi0+Y2hhbm5lbCkgewotCQlsYnNfZGViX2Fzc29jKCJBU1NPQzogY2hhbm5lbDogZmFpbGVkIHRvIHVwZGF0ZSBjaGFubmVsIHRvICVkXG4iLAotCQkgICAgICAgICAgICAgIGFzc29jX3JlcS0+Y2hhbm5lbCk7Ci0JCWdvdG8gcmVzdG9yZV9tZXNoOwotCX0KLQotCWlmIChhc3NvY19yZXEtPnNlY2luZm8ud2VwX2VuYWJsZWQgJiYKLQkgICAgKGFzc29jX3JlcS0+d2VwX2tleXNbMF0ubGVuIHx8IGFzc29jX3JlcS0+d2VwX2tleXNbMV0ubGVuIHx8Ci0JICAgICBhc3NvY19yZXEtPndlcF9rZXlzWzJdLmxlbiB8fCBhc3NvY19yZXEtPndlcF9rZXlzWzNdLmxlbikpIHsKLQkJLyogTWFrZSBzdXJlIFdFUCBrZXlzIGFyZSByZS1zZW50IHRvIGZpcm13YXJlICovCi0JCXNldF9iaXQoQVNTT0NfRkxBR19XRVBfS0VZUywgJmFzc29jX3JlcS0+ZmxhZ3MpOwotCX0KLQotCS8qIE11c3QgcmVzdGFydC9yZWpvaW4gYWRob2MgbmV0d29ya3MgYWZ0ZXIgY2hhbm5lbCBjaGFuZ2UgKi8KLSAJc2V0X2JpdChBU1NPQ19GTEFHX1NTSUQsICZhc3NvY19yZXEtPmZsYWdzKTsKLQotIHJlc3RvcmVfbWVzaDoKLQlpZiAocHJpdi0+bWVzaF9kZXYpCi0JCWxic19tZXNoX2NvbmZpZyhwcml2LCBDTURfQUNUX01FU0hfQ09ORklHX1NUQVJULAotCQkJCXByaXYtPmNoYW5uZWwpOwotCi0gZG9uZToKLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9BU1NPQywgInJldCAlZCIsIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotCi1zdGF0aWMgaW50IGFzc29jX2hlbHBlcl93ZXBfa2V5cyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JCQkJIHN0cnVjdCBhc3NvY19yZXF1ZXN0ICphc3NvY19yZXEpCi17Ci0JaW50IGk7Ci0JaW50IHJldCA9IDA7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfQVNTT0MpOwotCi0JLyogU2V0IG9yIHJlbW92ZSBXRVAga2V5cyAqLwotCWlmIChhc3NvY19yZXEtPndlcF9rZXlzWzBdLmxlbiB8fCBhc3NvY19yZXEtPndlcF9rZXlzWzFdLmxlbiB8fAotCSAgICBhc3NvY19yZXEtPndlcF9rZXlzWzJdLmxlbiB8fCBhc3NvY19yZXEtPndlcF9rZXlzWzNdLmxlbikKLQkJcmV0ID0gbGJzX2NtZF84MDJfMTFfc2V0X3dlcChwcml2LCBDTURfQUNUX0FERCwgYXNzb2NfcmVxKTsKLQllbHNlCi0JCXJldCA9IGxic19jbWRfODAyXzExX3NldF93ZXAocHJpdiwgQ01EX0FDVF9SRU1PVkUsIGFzc29jX3JlcSk7Ci0KLQlpZiAocmV0KQotCQlnb3RvIG91dDsKLQotCS8qIGVuYWJsZS9kaXNhYmxlIHRoZSBNQUMncyBXRVAgcGFja2V0IGZpbHRlciAqLwotCWlmIChhc3NvY19yZXEtPnNlY2luZm8ud2VwX2VuYWJsZWQpCi0JCXByaXYtPm1hY19jb250cm9sIHw9IENNRF9BQ1RfTUFDX1dFUF9FTkFCTEU7Ci0JZWxzZQotCQlwcml2LT5tYWNfY29udHJvbCAmPSB+Q01EX0FDVF9NQUNfV0VQX0VOQUJMRTsKLQotCWxic19zZXRfbWFjX2NvbnRyb2wocHJpdik7Ci0KLQltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKLQotCS8qIENvcHkgV0VQIGtleXMgaW50byBwcml2IHdlcCBrZXkgZmllbGRzICovCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQltZW1jcHkoJnByaXYtPndlcF9rZXlzW2ldLCAmYXNzb2NfcmVxLT53ZXBfa2V5c1tpXSwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZW5jX2tleSkpOwotCX0KLQlwcml2LT53ZXBfdHhfa2V5aWR4ID0gYXNzb2NfcmVxLT53ZXBfdHhfa2V5aWR4OwotCi0JbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKLQotb3V0OgotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0FTU09DLCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGFzc29jX2hlbHBlcl9zZWNpbmZvKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFzc29jX3JlcXVlc3QgKiBhc3NvY19yZXEpCi17Ci0JaW50IHJldCA9IDA7Ci0JdWludDE2X3QgZG9fd3BhOwotCXVpbnQxNl90IHJzbiA9IDA7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfQVNTT0MpOwotCi0JbWVtY3B5KCZwcml2LT5zZWNpbmZvLCAmYXNzb2NfcmVxLT5zZWNpbmZvLAotCQlzaXplb2Yoc3RydWN0IGxic184MDJfMTFfc2VjdXJpdHkpKTsKLQotCWxic19zZXRfbWFjX2NvbnRyb2wocHJpdik7Ci0KLQkvKiBJZiBSU04gaXMgYWxyZWFkeSBlbmFibGVkLCBkb24ndCB0cnkgdG8gZW5hYmxlIGl0IGFnYWluLCBzaW5jZQotCSAqIEVOQUJMRV9SU04gcmVzZXRzIGludGVybmFsIHN0YXRlIG1hY2hpbmVzIGFuZCB3aWxsIGNsb2JiZXIgdGhlCi0JICogNC13YXkgV1BBIGhhbmRzaGFrZS4KLQkgKi8KLQotCS8qIEdldCBSU04gZW5hYmxlZC9kaXNhYmxlZCAqLwotCXJldCA9IGxic19jbWRfODAyXzExX2VuYWJsZV9yc24ocHJpdiwgQ01EX0FDVF9HRVQsICZyc24pOwotCWlmIChyZXQpIHsKLQkJbGJzX2RlYl9hc3NvYygiRmFpbGVkIHRvIGdldCBSU04gc3RhdHVzOiAlZFxuIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogRG9uJ3QgcmUtZW5hYmxlIFJTTiBpZiBpdCdzIGFscmVhZHkgZW5hYmxlZCAqLwotCWRvX3dwYSA9IGFzc29jX3JlcS0+c2VjaW5mby5XUEFlbmFibGVkIHx8IGFzc29jX3JlcS0+c2VjaW5mby5XUEEyZW5hYmxlZDsKLQlpZiAoZG9fd3BhID09IHJzbikKLQkJZ290byBvdXQ7Ci0KLQkvKiBTZXQgUlNOIGVuYWJsZWQvZGlzYWJsZWQgKi8KLQlyZXQgPSBsYnNfY21kXzgwMl8xMV9lbmFibGVfcnNuKHByaXYsIENNRF9BQ1RfU0VULCAmZG9fd3BhKTsKLQotb3V0OgotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0FTU09DLCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyBpbnQgYXNzb2NfaGVscGVyX3dwYV9rZXlzKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhc3NvY19yZXF1ZXN0ICogYXNzb2NfcmVxKQotewotCWludCByZXQgPSAwOwotCXVuc2lnbmVkIGludCBmbGFncyA9IGFzc29jX3JlcS0+ZmxhZ3M7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfQVNTT0MpOwotCi0JLyogV29yayBhcm91bmQgb2xkZXIgZmlybXdhcmUgYnVnIHdoZXJlIFdQQSB1bmljYXN0IGFuZCBtdWx0aWNhc3QKLQkgKiBrZXlzIG11c3QgYmUgc2V0IGluZGVwZW5kZW50bHkuICBTZWVuIGluIFNESU8gcGFydHMgd2l0aCBmaXJtd2FyZQotCSAqIHZlcnNpb24gNS4wLjExcDAuCi0JICovCi0KLQlpZiAodGVzdF9iaXQoQVNTT0NfRkxBR19XUEFfVUNBU1RfS0VZLCAmYXNzb2NfcmVxLT5mbGFncykpIHsKLQkJY2xlYXJfYml0KEFTU09DX0ZMQUdfV1BBX01DQVNUX0tFWSwgJmFzc29jX3JlcS0+ZmxhZ3MpOwotCQlyZXQgPSBsYnNfY21kXzgwMl8xMV9rZXlfbWF0ZXJpYWwocHJpdiwgQ01EX0FDVF9TRVQsIGFzc29jX3JlcSk7Ci0JCWFzc29jX3JlcS0+ZmxhZ3MgPSBmbGFnczsKLQl9Ci0KLQlpZiAocmV0KQotCQlnb3RvIG91dDsKLQotCW1lbWNweSgmcHJpdi0+d3BhX3VuaWNhc3Rfa2V5LCAmYXNzb2NfcmVxLT53cGFfdW5pY2FzdF9rZXksCi0JCQlzaXplb2Yoc3RydWN0IGVuY19rZXkpKTsKLQotCWlmICh0ZXN0X2JpdChBU1NPQ19GTEFHX1dQQV9NQ0FTVF9LRVksICZhc3NvY19yZXEtPmZsYWdzKSkgewotCQljbGVhcl9iaXQoQVNTT0NfRkxBR19XUEFfVUNBU1RfS0VZLCAmYXNzb2NfcmVxLT5mbGFncyk7Ci0KLQkJcmV0ID0gbGJzX2NtZF84MDJfMTFfa2V5X21hdGVyaWFsKHByaXYsIENNRF9BQ1RfU0VULCBhc3NvY19yZXEpOwotCQlhc3NvY19yZXEtPmZsYWdzID0gZmxhZ3M7Ci0KLQkJbWVtY3B5KCZwcml2LT53cGFfbWNhc3Rfa2V5LCAmYXNzb2NfcmVxLT53cGFfbWNhc3Rfa2V5LAotCQkJCXNpemVvZihzdHJ1Y3QgZW5jX2tleSkpOwotCX0KLQotb3V0OgotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0FTU09DLCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyBpbnQgYXNzb2NfaGVscGVyX3dwYV9pZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFzc29jX3JlcXVlc3QgKiBhc3NvY19yZXEpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfQVNTT0MpOwotCi0JaWYgKGFzc29jX3JlcS0+c2VjaW5mby5XUEFlbmFibGVkIHx8IGFzc29jX3JlcS0+c2VjaW5mby5XUEEyZW5hYmxlZCkgewotCQltZW1jcHkoJnByaXYtPndwYV9pZSwgJmFzc29jX3JlcS0+d3BhX2llLCBhc3NvY19yZXEtPndwYV9pZV9sZW4pOwotCQlwcml2LT53cGFfaWVfbGVuID0gYXNzb2NfcmVxLT53cGFfaWVfbGVuOwotCX0gZWxzZSB7Ci0JCW1lbXNldCgmcHJpdi0+d3BhX2llLCAwLCBNQVhfV1BBX0lFX0xFTik7Ci0JCXByaXYtPndwYV9pZV9sZW4gPSAwOwotCX0KLQotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0FTU09DLCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyBpbnQgc2hvdWxkX2RlYXV0aF9pbmZyYXN0cnVjdHVyZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFzc29jX3JlcXVlc3QgKiBhc3NvY19yZXEpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAocHJpdi0+Y29ubmVjdF9zdGF0dXMgIT0gTEJTX0NPTk5FQ1RFRCkKLQkJcmV0dXJuIDA7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfQVNTT0MpOwotCWlmICh0ZXN0X2JpdChBU1NPQ19GTEFHX1NTSUQsICZhc3NvY19yZXEtPmZsYWdzKSkgewotCQlsYnNfZGViX2Fzc29jKCJEZWF1dGhlbnRpY2F0aW5nIGR1ZSB0byBuZXcgU1NJRFxuIik7Ci0JCXJldCA9IDE7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICh0ZXN0X2JpdChBU1NPQ19GTEFHX1NFQ0lORk8sICZhc3NvY19yZXEtPmZsYWdzKSkgewotCQlpZiAocHJpdi0+c2VjaW5mby5hdXRoX21vZGUgIT0gYXNzb2NfcmVxLT5zZWNpbmZvLmF1dGhfbW9kZSkgewotCQkJbGJzX2RlYl9hc3NvYygiRGVhdXRoZW50aWNhdGluZyBkdWUgdG8gbmV3IHNlY3VyaXR5XG4iKTsKLQkJCXJldCA9IDE7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCWlmICh0ZXN0X2JpdChBU1NPQ19GTEFHX0JTU0lELCAmYXNzb2NfcmVxLT5mbGFncykpIHsKLQkJbGJzX2RlYl9hc3NvYygiRGVhdXRoZW50aWNhdGluZyBkdWUgdG8gbmV3IEJTU0lEXG4iKTsKLQkJcmV0ID0gMTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHRlc3RfYml0KEFTU09DX0ZMQUdfQ0hBTk5FTCwgJmFzc29jX3JlcS0+ZmxhZ3MpKSB7Ci0JCWxic19kZWJfYXNzb2MoIkRlYXV0aGVudGljYXRpbmcgZHVlIHRvIGNoYW5uZWwgc3dpdGNoXG4iKTsKLQkJcmV0ID0gMTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogRklYTUU6IGRlYWwgd2l0aCAnYXV0bycgbW9kZSBzb21laG93ICovCi0JaWYgKHRlc3RfYml0KEFTU09DX0ZMQUdfTU9ERSwgJmFzc29jX3JlcS0+ZmxhZ3MpKSB7Ci0JCWlmIChhc3NvY19yZXEtPm1vZGUgIT0gSVdfTU9ERV9JTkZSQSkgewotCQkJbGJzX2RlYl9hc3NvYygiRGVhdXRoZW50aWNhdGluZyBkdWUgdG8gbGVhdmluZyAiCi0JCQkJImluZnJhIG1vZGVcbiIpOwotCQkJcmV0ID0gMTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCi1vdXQ6Ci0JbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfQVNTT0MsICJyZXQgJWQiLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLQotc3RhdGljIGludCBzaG91bGRfc3RvcF9hZGhvYyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhc3NvY19yZXF1ZXN0ICogYXNzb2NfcmVxKQotewotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9BU1NPQyk7Ci0KLQlpZiAocHJpdi0+Y29ubmVjdF9zdGF0dXMgIT0gTEJTX0NPTk5FQ1RFRCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAobGJzX3NzaWRfY21wKHByaXYtPmN1cmJzc3BhcmFtcy5zc2lkLAotCSAgICAgICAgICAgICAgICAgICAgICBwcml2LT5jdXJic3NwYXJhbXMuc3NpZF9sZW4sCi0JICAgICAgICAgICAgICAgICAgICAgIGFzc29jX3JlcS0+c3NpZCwgYXNzb2NfcmVxLT5zc2lkX2xlbikgIT0gMCkKLQkJcmV0dXJuIDE7Ci0KLQkvKiBGSVhNRTogZGVhbCB3aXRoICdhdXRvJyBtb2RlIHNvbWVob3cgKi8KLQlpZiAodGVzdF9iaXQoQVNTT0NfRkxBR19NT0RFLCAmYXNzb2NfcmVxLT5mbGFncykpIHsKLQkJaWYgKGFzc29jX3JlcS0+bW9kZSAhPSBJV19NT0RFX0FESE9DKQotCQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKHRlc3RfYml0KEFTU09DX0ZMQUdfQ0hBTk5FTCwgJmFzc29jX3JlcS0+ZmxhZ3MpKSB7Ci0JCWlmIChhc3NvY19yZXEtPmNoYW5uZWwgIT0gcHJpdi0+Y2hhbm5lbCkKLQkJCXJldHVybiAxOwotCX0KLQotCWxic19kZWJfbGVhdmUoTEJTX0RFQl9BU1NPQyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyoqCi0gKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gZmluZHMgdGhlIGJlc3QgU1NJRCBpbiB0aGUgU2NhbiBMaXN0Ci0gKgotICogIFNlYXJjaCB0aGUgc2NhbiB0YWJsZSBmb3IgdGhlIGJlc3QgU1NJRCB0aGF0IGFsc28gbWF0Y2hlcyB0aGUgY3VycmVudAotICogICBhZGFwdGVyIG5ldHdvcmsgcHJlZmVyZW5jZSAoaW5mcmFzdHJ1Y3R1cmUgb3IgYWRob2MpCi0gKgotICogIEBwYXJhbSBwcml2ICBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlCi0gKgotICogIEByZXR1cm4gICAgICAgICBpbmRleCBpbiBCU1NJRCBsaXN0Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKmxic19maW5kX2Jlc3Rfc3NpZF9pbl9saXN0KAotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdWludDhfdCBtb2RlKQotewotCXVpbnQ4X3QgYmVzdHJzc2kgPSAwOwotCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqaXRlcl9ic3M7Ci0Jc3RydWN0IGJzc19kZXNjcmlwdG9yICpiZXN0X2JzcyA9IE5VTEw7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfU0NBTik7Ci0KLQltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoaXRlcl9ic3MsICZwcml2LT5uZXR3b3JrX2xpc3QsIGxpc3QpIHsKLQkJc3dpdGNoIChtb2RlKSB7Ci0JCWNhc2UgSVdfTU9ERV9JTkZSQToKLQkJY2FzZSBJV19NT0RFX0FESE9DOgotCQkJaWYgKCFpc19uZXR3b3JrX2NvbXBhdGlibGUocHJpdiwgaXRlcl9ic3MsIG1vZGUpKQotCQkJCWJyZWFrOwotCQkJaWYgKFNDQU5fUlNTSShpdGVyX2Jzcy0+cnNzaSkgPD0gYmVzdHJzc2kpCi0JCQkJYnJlYWs7Ci0JCQliZXN0cnNzaSA9IFNDQU5fUlNTSShpdGVyX2Jzcy0+cnNzaSk7Ci0JCQliZXN0X2JzcyA9IGl0ZXJfYnNzOwotCQkJYnJlYWs7Ci0JCWNhc2UgSVdfTU9ERV9BVVRPOgotCQlkZWZhdWx0OgotCQkJaWYgKFNDQU5fUlNTSShpdGVyX2Jzcy0+cnNzaSkgPD0gYmVzdHJzc2kpCi0JCQkJYnJlYWs7Ci0JCQliZXN0cnNzaSA9IFNDQU5fUlNTSShpdGVyX2Jzcy0+cnNzaSk7Ci0JCQliZXN0X2JzcyA9IGl0ZXJfYnNzOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQltdXRleF91bmxvY2soJnByaXYtPmxvY2spOwotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1NDQU4sICJiZXN0X2JzcyAlcCIsIGJlc3RfYnNzKTsKLQlyZXR1cm4gYmVzdF9ic3M7Ci19Ci0KLS8qKgotICogIEBicmllZiBGaW5kIHRoZSBiZXN0IEFQCi0gKgotICogIFVzZWQgZnJvbSBhc3NvY2lhdGlvbiB3b3JrZXIuCi0gKgotICogIEBwYXJhbSBwcml2ICAgICAgICAgQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gcFNTSUQgICAgICAgIEEgcG9pbnRlciB0byBBUCdzIHNzaWQKLSAqCi0gKiAgQHJldHVybiAgICAgICAgICAgICAwLS1zdWNjZXNzLCBvdGhlcndpc2UtLWZhaWwKLSAqLwotc3RhdGljIGludCBsYnNfZmluZF9iZXN0X25ldHdvcmtfc3NpZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JdWludDhfdCAqb3V0X3NzaWQsIHVpbnQ4X3QgKm91dF9zc2lkX2xlbiwgdWludDhfdCBwcmVmZXJyZWRfbW9kZSwKLQl1aW50OF90ICpvdXRfbW9kZSkKLXsKLQlpbnQgcmV0ID0gLTE7Ci0Jc3RydWN0IGJzc19kZXNjcmlwdG9yICpmb3VuZDsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TQ0FOKTsKLQotCXByaXYtPnNjYW5fc3NpZF9sZW4gPSAwOwotCWxic19zY2FuX25ldHdvcmtzKHByaXYsIDEpOwotCWlmIChwcml2LT5zdXJwcmlzZXJlbW92ZWQpCi0JCWdvdG8gb3V0OwotCi0JZm91bmQgPSBsYnNfZmluZF9iZXN0X3NzaWRfaW5fbGlzdChwcml2LCBwcmVmZXJyZWRfbW9kZSk7Ci0JaWYgKGZvdW5kICYmIChmb3VuZC0+c3NpZF9sZW4gPiAwKSkgewotCQltZW1jcHkob3V0X3NzaWQsICZmb3VuZC0+c3NpZCwgSUVFRTgwMjExX01BWF9TU0lEX0xFTik7Ci0JCSpvdXRfc3NpZF9sZW4gPSBmb3VuZC0+c3NpZF9sZW47Ci0JCSpvdXRfbW9kZSA9IGZvdW5kLT5tb2RlOwotCQlyZXQgPSAwOwotCX0KLQotb3V0OgotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1NDQU4sICJyZXQgJWQiLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLQotdm9pZCBsYnNfYXNzb2NpYXRpb25fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxic19wcml2YXRlLAotCQlhc3NvY193b3JrLndvcmspOwotCXN0cnVjdCBhc3NvY19yZXF1ZXN0ICogYXNzb2NfcmVxID0gTlVMTDsKLQlpbnQgcmV0ID0gMDsKLQlpbnQgZmluZF9hbnlfc3NpZCA9IDA7Ci0JREVDTEFSRV9TU0lEX0JVRihzc2lkKTsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9BU1NPQyk7Ci0KLQltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKLQlhc3NvY19yZXEgPSBwcml2LT5wZW5kaW5nX2Fzc29jX3JlcTsKLQlwcml2LT5wZW5kaW5nX2Fzc29jX3JlcSA9IE5VTEw7Ci0JcHJpdi0+aW5fcHJvZ3Jlc3NfYXNzb2NfcmVxID0gYXNzb2NfcmVxOwotCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7Ci0KLQlpZiAoIWFzc29jX3JlcSkKLQkJZ290byBkb25lOwotCi0JbGJzX2RlYl9hc3NvYygKLQkJIkFzc29jaWF0aW9uIFJlcXVlc3Q6XG4iCi0JCSIgICAgZmxhZ3M6ICAgICAweCUwOGx4XG4iCi0JCSIgICAgU1NJRDogICAgICAnJXMnXG4iCi0JCSIgICAgY2hhbm46ICAgICAlZFxuIgotCQkiICAgIGJhbmQ6ICAgICAgJWRcbiIKLQkJIiAgICBtb2RlOiAgICAgICVkXG4iCi0JCSIgICAgQlNTSUQ6ICAgICAlcE1cbiIKLQkJIiAgICBzZWNpbmZvOiAgJXMlcyVzXG4iCi0JCSIgICAgYXV0aF9tb2RlOiAlZFxuIiwKLQkJYXNzb2NfcmVxLT5mbGFncywKLQkJcHJpbnRfc3NpZChzc2lkLCBhc3NvY19yZXEtPnNzaWQsIGFzc29jX3JlcS0+c3NpZF9sZW4pLAotCQlhc3NvY19yZXEtPmNoYW5uZWwsIGFzc29jX3JlcS0+YmFuZCwgYXNzb2NfcmVxLT5tb2RlLAotCQlhc3NvY19yZXEtPmJzc2lkLAotCQlhc3NvY19yZXEtPnNlY2luZm8uV1BBZW5hYmxlZCA/ICIgV1BBIiA6ICIiLAotCQlhc3NvY19yZXEtPnNlY2luZm8uV1BBMmVuYWJsZWQgPyAiIFdQQTIiIDogIiIsCi0JCWFzc29jX3JlcS0+c2VjaW5mby53ZXBfZW5hYmxlZCA/ICIgV0VQIiA6ICIiLAotCQlhc3NvY19yZXEtPnNlY2luZm8uYXV0aF9tb2RlKTsKLQotCS8qIElmICdhbnknIFNTSUQgd2FzIHNwZWNpZmllZCwgZmluZCBhbiBTU0lEIHRvIGFzc29jaWF0ZSB3aXRoICovCi0JaWYgKHRlc3RfYml0KEFTU09DX0ZMQUdfU1NJRCwgJmFzc29jX3JlcS0+ZmxhZ3MpICYmCi0JICAgICFhc3NvY19yZXEtPnNzaWRfbGVuKQotCQlmaW5kX2FueV9zc2lkID0gMTsKLQotCS8qIEJ1dCBkb24ndCB1c2UgJ2FueScgU1NJRCBpZiB0aGVyZSdzIGEgdmFsaWQgbG9ja2VkIEJTU0lEIHRvIHVzZSAqLwotCWlmICh0ZXN0X2JpdChBU1NPQ19GTEFHX0JTU0lELCAmYXNzb2NfcmVxLT5mbGFncykpIHsKLQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihhc3NvY19yZXEtPmJzc2lkLCBic3NpZF9hbnkpICYmCi0JCSAgICBjb21wYXJlX2V0aGVyX2FkZHIoYXNzb2NfcmVxLT5ic3NpZCwgYnNzaWRfb2ZmKSkKLQkJCWZpbmRfYW55X3NzaWQgPSAwOwotCX0KLQotCWlmIChmaW5kX2FueV9zc2lkKSB7Ci0JCXU4IG5ld19tb2RlID0gYXNzb2NfcmVxLT5tb2RlOwotCi0JCXJldCA9IGxic19maW5kX2Jlc3RfbmV0d29ya19zc2lkKHByaXYsIGFzc29jX3JlcS0+c3NpZCwKLQkJCQkmYXNzb2NfcmVxLT5zc2lkX2xlbiwgYXNzb2NfcmVxLT5tb2RlLCAmbmV3X21vZGUpOwotCQlpZiAocmV0KSB7Ci0JCQlsYnNfZGViX2Fzc29jKCJDb3VsZCBub3QgZmluZCBiZXN0IG5ldHdvcmtcbiIpOwotCQkJcmV0ID0gLUVORVRVTlJFQUNIOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQkvKiBFbnN1cmUgd2Ugc3dpdGNoIHRvIHRoZSBtb2RlIG9mIHRoZSBBUCAqLwotCQlpZiAoYXNzb2NfcmVxLT5tb2RlID09IElXX01PREVfQVVUTykgewotCQkJc2V0X2JpdChBU1NPQ19GTEFHX01PREUsICZhc3NvY19yZXEtPmZsYWdzKTsKLQkJCWFzc29jX3JlcS0+bW9kZSA9IG5ld19tb2RlOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBDaGVjayBpZiB0aGUgYXR0cmlidXRlcyBiZWluZyBjaGFuZ2luZyByZXF1aXJlIGRlYXV0aGVudGljYXRpb24KLQkgKiBmcm9tIHRoZSBjdXJyZW50bHkgYXNzb2NpYXRlZCBpbmZyYXN0cnVjdHVyZSBhY2Nlc3MgcG9pbnQuCi0JICovCi0JaWYgKHByaXYtPm1vZGUgPT0gSVdfTU9ERV9JTkZSQSkgewotCQlpZiAoc2hvdWxkX2RlYXV0aF9pbmZyYXN0cnVjdHVyZShwcml2LCBhc3NvY19yZXEpKSB7Ci0JCQlyZXQgPSBsYnNfY21kXzgwMjExX2RlYXV0aGVudGljYXRlKHByaXYsCi0JCQkJCQkJICAgcHJpdi0+Y3VyYnNzcGFyYW1zLmJzc2lkLAotCQkJCQkJCSAgIFdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HKTsKLQkJCWlmIChyZXQpIHsKLQkJCQlsYnNfZGViX2Fzc29jKCJEZWF1dGhlbnRpY2F0aW9uIGR1ZSB0byBuZXcgIgotCQkJCQkiY29uZmlndXJhdGlvbiByZXF1ZXN0IGZhaWxlZDogJWRcbiIsCi0JCQkJCXJldCk7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgaWYgKHByaXYtPm1vZGUgPT0gSVdfTU9ERV9BREhPQykgewotCQlpZiAoc2hvdWxkX3N0b3BfYWRob2MocHJpdiwgYXNzb2NfcmVxKSkgewotCQkJcmV0ID0gbGJzX2FkaG9jX3N0b3AocHJpdik7Ci0JCQlpZiAocmV0KSB7Ci0JCQkJbGJzX2RlYl9hc3NvYygiVGVhcmRvd24gb2YgQWRIb2MgbmV0d29yayBkdWUgdG8gIgotCQkJCQkibmV3IGNvbmZpZ3VyYXRpb24gcmVxdWVzdCBmYWlsZWQ6ICVkXG4iLAotCQkJCQlyZXQpOwotCQkJfQotCi0JCX0KLQl9Ci0KLQkvKiBTZW5kIHRoZSB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gYml0cyB0byB0aGUgZmlybXdhcmUgKi8KLQlpZiAodGVzdF9iaXQoQVNTT0NfRkxBR19NT0RFLCAmYXNzb2NfcmVxLT5mbGFncykpIHsKLQkJcmV0ID0gYXNzb2NfaGVscGVyX21vZGUocHJpdiwgYXNzb2NfcmVxKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OwotCX0KLQotCWlmICh0ZXN0X2JpdChBU1NPQ19GTEFHX0NIQU5ORUwsICZhc3NvY19yZXEtPmZsYWdzKSkgewotCQlyZXQgPSBhc3NvY19oZWxwZXJfY2hhbm5lbChwcml2LCBhc3NvY19yZXEpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHRlc3RfYml0KEFTU09DX0ZMQUdfU0VDSU5GTywgJmFzc29jX3JlcS0+ZmxhZ3MpKSB7Ci0JCXJldCA9IGFzc29jX2hlbHBlcl9zZWNpbmZvKHByaXYsIGFzc29jX3JlcSk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAodGVzdF9iaXQoQVNTT0NfRkxBR19XUEFfSUUsICZhc3NvY19yZXEtPmZsYWdzKSkgewotCQlyZXQgPSBhc3NvY19oZWxwZXJfd3BhX2llKHByaXYsIGFzc29jX3JlcSk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKLQl9Ci0KLQkvKgotCSAqIHYxMCBGVyB3YW50cyBXUEEga2V5cyB0byBiZSBzZXQvY2xlYXJlZCBiZWZvcmUgV0VQIGtleSBvcGVyYXRpb25zLAotCSAqIG90aGVyd2lzZSBpdCB3aWxsIGZhaWwgdG8gY29ycmVjdGx5IGFzc29jaWF0ZSB0byBXRVAgbmV0d29ya3MuCi0JICogT3RoZXIgZmlybXdhcmUgdmVyc2lvbnMgZG9uJ3QgYXBwZWFyIHRvIGNhcmUuCi0JICovCi0JaWYgKHRlc3RfYml0KEFTU09DX0ZMQUdfV1BBX01DQVNUX0tFWSwgJmFzc29jX3JlcS0+ZmxhZ3MpIHx8Ci0JICAgIHRlc3RfYml0KEFTU09DX0ZMQUdfV1BBX1VDQVNUX0tFWSwgJmFzc29jX3JlcS0+ZmxhZ3MpKSB7Ci0JCXJldCA9IGFzc29jX2hlbHBlcl93cGFfa2V5cyhwcml2LCBhc3NvY19yZXEpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHRlc3RfYml0KEFTU09DX0ZMQUdfV0VQX0tFWVMsICZhc3NvY19yZXEtPmZsYWdzKSB8fAotCSAgICB0ZXN0X2JpdChBU1NPQ19GTEFHX1dFUF9UWF9LRVlJRFgsICZhc3NvY19yZXEtPmZsYWdzKSkgewotCQlyZXQgPSBhc3NvY19oZWxwZXJfd2VwX2tleXMocHJpdiwgYXNzb2NfcmVxKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OwotCX0KLQotCi0JLyogU1NJRC9CU1NJRCBzaG91bGQgYmUgdGhlIF9sYXN0XyBjb25maWcgb3B0aW9uIHNldCwgYmVjYXVzZSB0aGV5Ci0JICogdHJpZ2dlciB0aGUgYXNzb2NpYXRpb24gYXR0ZW1wdC4KLQkgKi8KLQlpZiAodGVzdF9iaXQoQVNTT0NfRkxBR19CU1NJRCwgJmFzc29jX3JlcS0+ZmxhZ3MpIHx8Ci0JICAgIHRlc3RfYml0KEFTU09DX0ZMQUdfU1NJRCwgJmFzc29jX3JlcS0+ZmxhZ3MpKSB7Ci0JCWludCBzdWNjZXNzID0gMTsKLQotCQlyZXQgPSBhc3NvY19oZWxwZXJfYXNzb2NpYXRlKHByaXYsIGFzc29jX3JlcSk7Ci0JCWlmIChyZXQpIHsKLQkJCWxic19kZWJfYXNzb2MoIkFTU09DOiBhc3NvY2lhdGlvbiB1bnN1Y2Nlc3NmdWw6ICVkXG4iLAotCQkJCXJldCk7Ci0JCQlzdWNjZXNzID0gMDsKLQkJfQotCi0JCWlmIChwcml2LT5jb25uZWN0X3N0YXR1cyAhPSBMQlNfQ09OTkVDVEVEKSB7Ci0JCQlsYnNfZGViX2Fzc29jKCJBU1NPQzogYXNzb2NpYXRpb24gdW5zdWNjZXNzZnVsLCAiCi0JCQkJIm5vdCBjb25uZWN0ZWRcbiIpOwotCQkJc3VjY2VzcyA9IDA7Ci0JCX0KLQotCQlpZiAoc3VjY2VzcykgewotCQkJbGJzX2RlYl9hc3NvYygiYXNzb2NpYXRlZCB0byAlcE1cbiIsCi0JCQkJcHJpdi0+Y3VyYnNzcGFyYW1zLmJzc2lkKTsKLQkJCWxic19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwKLQkJCQlDTURfODAyXzExX1JTU0ksCi0JCQkJMCwgQ01EX09QVElPTl9XQUlURk9SUlNQLCAwLCBOVUxMKTsKLQkJfSBlbHNlIHsKLQkJCXJldCA9IC0xOwotCQl9Ci0JfQotCi1vdXQ6Ci0JaWYgKHJldCkgewotCQlsYnNfZGViX2Fzc29jKCJBU1NPQzogcmVjb25maWd1cmF0aW9uIGF0dGVtcHQgdW5zdWNjZXNzZnVsOiAlZFxuIiwKLQkJCXJldCk7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7Ci0JcHJpdi0+aW5fcHJvZ3Jlc3NfYXNzb2NfcmVxID0gTlVMTDsKLQltdXRleF91bmxvY2soJnByaXYtPmxvY2spOwotCWtmcmVlKGFzc29jX3JlcSk7Ci0KLWRvbmU6Ci0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX0FTU09DKTsKLX0KLQotCi0vKgotICogQ2FsbGVyIE1VU1QgaG9sZCBhbnkgbmVjZXNzYXJ5IGxvY2tzCi0gKi8KLXN0cnVjdCBhc3NvY19yZXF1ZXN0ICpsYnNfZ2V0X2Fzc29jaWF0aW9uX3JlcXVlc3Qoc3RydWN0IGxic19wcml2YXRlICpwcml2KQotewotCXN0cnVjdCBhc3NvY19yZXF1ZXN0ICogYXNzb2NfcmVxOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0FTU09DKTsKLQlpZiAoIXByaXYtPnBlbmRpbmdfYXNzb2NfcmVxKSB7Ci0JCXByaXYtPnBlbmRpbmdfYXNzb2NfcmVxID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFzc29jX3JlcXVlc3QpLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcHJpdi0+cGVuZGluZ19hc3NvY19yZXEpIHsKLQkJCWxic19wcl9pbmZvKCJOb3QgZW5vdWdoIG1lbW9yeSB0byBhbGxvY2F0ZSBhc3NvY2lhdGlvbiIKLQkJCQkiIHJlcXVlc3QhXG4iKTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JfQotCi0JLyogQ29weSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gYXR0cmlidXRlcyB0byB0aGUgYXNzb2NpYXRpb24gcmVxdWVzdCwKLQkgKiBidXQgZG9uJ3Qgb3ZlcndyaXRlIGFueSB0aGF0IGFyZSBhbHJlYWR5IHNldC4KLQkgKi8KLQlhc3NvY19yZXEgPSBwcml2LT5wZW5kaW5nX2Fzc29jX3JlcTsKLQlpZiAoIXRlc3RfYml0KEFTU09DX0ZMQUdfU1NJRCwgJmFzc29jX3JlcS0+ZmxhZ3MpKSB7Ci0JCW1lbWNweSgmYXNzb2NfcmVxLT5zc2lkLCAmcHJpdi0+Y3VyYnNzcGFyYW1zLnNzaWQsCi0JCSAgICAgICBJRUVFODAyMTFfTUFYX1NTSURfTEVOKTsKLQkJYXNzb2NfcmVxLT5zc2lkX2xlbiA9IHByaXYtPmN1cmJzc3BhcmFtcy5zc2lkX2xlbjsKLQl9Ci0KLQlpZiAoIXRlc3RfYml0KEFTU09DX0ZMQUdfQ0hBTk5FTCwgJmFzc29jX3JlcS0+ZmxhZ3MpKQotCQlhc3NvY19yZXEtPmNoYW5uZWwgPSBwcml2LT5jaGFubmVsOwotCi0JaWYgKCF0ZXN0X2JpdChBU1NPQ19GTEFHX0JBTkQsICZhc3NvY19yZXEtPmZsYWdzKSkKLQkJYXNzb2NfcmVxLT5iYW5kID0gcHJpdi0+Y3VyYnNzcGFyYW1zLmJhbmQ7Ci0KLQlpZiAoIXRlc3RfYml0KEFTU09DX0ZMQUdfTU9ERSwgJmFzc29jX3JlcS0+ZmxhZ3MpKQotCQlhc3NvY19yZXEtPm1vZGUgPSBwcml2LT5tb2RlOwotCi0JaWYgKCF0ZXN0X2JpdChBU1NPQ19GTEFHX0JTU0lELCAmYXNzb2NfcmVxLT5mbGFncykpIHsKLQkJbWVtY3B5KCZhc3NvY19yZXEtPmJzc2lkLCBwcml2LT5jdXJic3NwYXJhbXMuYnNzaWQsCi0JCQlFVEhfQUxFTik7Ci0JfQotCi0JaWYgKCF0ZXN0X2JpdChBU1NPQ19GTEFHX1dFUF9LRVlTLCAmYXNzb2NfcmVxLT5mbGFncykpIHsKLQkJaW50IGk7Ci0JCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJCW1lbWNweSgmYXNzb2NfcmVxLT53ZXBfa2V5c1tpXSwgJnByaXYtPndlcF9rZXlzW2ldLAotCQkJCXNpemVvZihzdHJ1Y3QgZW5jX2tleSkpOwotCQl9Ci0JfQotCi0JaWYgKCF0ZXN0X2JpdChBU1NPQ19GTEFHX1dFUF9UWF9LRVlJRFgsICZhc3NvY19yZXEtPmZsYWdzKSkKLQkJYXNzb2NfcmVxLT53ZXBfdHhfa2V5aWR4ID0gcHJpdi0+d2VwX3R4X2tleWlkeDsKLQotCWlmICghdGVzdF9iaXQoQVNTT0NfRkxBR19XUEFfTUNBU1RfS0VZLCAmYXNzb2NfcmVxLT5mbGFncykpIHsKLQkJbWVtY3B5KCZhc3NvY19yZXEtPndwYV9tY2FzdF9rZXksICZwcml2LT53cGFfbWNhc3Rfa2V5LAotCQkJc2l6ZW9mKHN0cnVjdCBlbmNfa2V5KSk7Ci0JfQotCi0JaWYgKCF0ZXN0X2JpdChBU1NPQ19GTEFHX1dQQV9VQ0FTVF9LRVksICZhc3NvY19yZXEtPmZsYWdzKSkgewotCQltZW1jcHkoJmFzc29jX3JlcS0+d3BhX3VuaWNhc3Rfa2V5LCAmcHJpdi0+d3BhX3VuaWNhc3Rfa2V5LAotCQkJc2l6ZW9mKHN0cnVjdCBlbmNfa2V5KSk7Ci0JfQotCi0JaWYgKCF0ZXN0X2JpdChBU1NPQ19GTEFHX1NFQ0lORk8sICZhc3NvY19yZXEtPmZsYWdzKSkgewotCQltZW1jcHkoJmFzc29jX3JlcS0+c2VjaW5mbywgJnByaXYtPnNlY2luZm8sCi0JCQlzaXplb2Yoc3RydWN0IGxic184MDJfMTFfc2VjdXJpdHkpKTsKLQl9Ci0KLQlpZiAoIXRlc3RfYml0KEFTU09DX0ZMQUdfV1BBX0lFLCAmYXNzb2NfcmVxLT5mbGFncykpIHsKLQkJbWVtY3B5KCZhc3NvY19yZXEtPndwYV9pZSwgJnByaXYtPndwYV9pZSwKLQkJCU1BWF9XUEFfSUVfTEVOKTsKLQkJYXNzb2NfcmVxLT53cGFfaWVfbGVuID0gcHJpdi0+d3BhX2llX2xlbjsKLQl9Ci0KLQlsYnNfZGViX2xlYXZlKExCU19ERUJfQVNTT0MpOwotCXJldHVybiBhc3NvY19yZXE7Ci19Ci0KLQotLyoqCi0gKiAgQGJyaWVmIERlYXV0aGVudGljYXRlIGZyb20gYSBzcGVjaWZpYyBCU1MKLSAqCi0gKiAgQHBhcmFtIHByaXYgICAgICAgIEEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIGJzc2lkICAgICAgIFRoZSBzcGVjaWZpYyBCU1MgdG8gZGVhdXRoZW50aWNhdGUgZnJvbQotICogIEBwYXJhbSByZWFzb24gICAgICBUaGUgODAyLjExIHNlYy4gNy4zLjEuNyBSZWFzb24gQ29kZSBmb3IgZGVhdXRoZW50aWNhdGluZwotICoKLSAqICBAcmV0dXJuICAgICAgICAgICAgMCBvbiBzdWNjZXNzLCBlcnJvciBvbiBmYWlsdXJlCi0gKi8KLWludCBsYnNfY21kXzgwMjExX2RlYXV0aGVudGljYXRlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdTggYnNzaWRbRVRIX0FMRU5dLAotCQkJCSB1MTYgcmVhc29uKQotewotCXN0cnVjdCBjbWRfZHNfODAyXzExX2RlYXV0aGVudGljYXRlIGNtZDsKLQlpbnQgcmV0OwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0pPSU4pOwotCi0JbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKLQljbWQuaGRyLnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoY21kKSk7Ci0JbWVtY3B5KGNtZC5tYWNhZGRyLCAmYnNzaWRbMF0sIEVUSF9BTEVOKTsKLQljbWQucmVhc29uY29kZSA9IGNwdV90b19sZTE2KHJlYXNvbik7Ci0KLQlyZXQgPSBsYnNfY21kX3dpdGhfcmVzcG9uc2UocHJpdiwgQ01EXzgwMl8xMV9ERUFVVEhFTlRJQ0FURSwgJmNtZCk7Ci0KLQkvKiBDbGVhbiB1cCBldmVyeXRoaW5nIGV2ZW4gaWYgdGhlcmUgd2FzIGFuIGVycm9yOyBjYW4ndCBhc3N1bWUgdGhhdAotCSAqIHdlJ3JlIHN0aWxsIGF1dGhlbnRpY2F0ZWQgdG8gdGhlIEFQIGFmdGVyIHRyeWluZyB0byBkZWF1dGguCi0JICovCi0JbGJzX21hY19ldmVudF9kaXNjb25uZWN0ZWQocHJpdik7Ci0KLQlsYnNfZGViX2xlYXZlKExCU19ERUJfSk9JTik7Ci0JcmV0dXJuIHJldDsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvYXNzb2MuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Fzc29jLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwNjIxYjcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvYXNzb2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1NSArMCwwIEBACi0vKiBDb3B5cmlnaHQgKEMpIDIwMDYsIFJlZCBIYXQsIEluYy4gKi8KLQotI2lmbmRlZiBfTEJTX0FTU09DX0hfCi0jZGVmaW5lIF9MQlNfQVNTT0NfSF8KLQotCi0jaW5jbHVkZSAiZGVmcy5oIgotI2luY2x1ZGUgImhvc3QuaCIKLQotCi1zdHJ1Y3QgbGJzX3ByaXZhdGU7Ci0KLS8qCi0gKiBJbiB0aGVvcnksIHRoZSBJRSBpcyBsaW1pdGVkIHRvIHRoZSBJRSBsZW5ndGgsIDI1NSwKLSAqIGJ1dCBpbiBwcmFjdGljZSA2NCBieXRlcyBhcmUgZW5vdWdoLgotICovCi0jZGVmaW5lIE1BWF9XUEFfSUVfTEVOIDY0Ci0KLQotCi1zdHJ1Y3QgbGJzXzgwMl8xMV9zZWN1cml0eSB7Ci0JdTggV1BBZW5hYmxlZDsKLQl1OCBXUEEyZW5hYmxlZDsKLQl1OCB3ZXBfZW5hYmxlZDsKLQl1OCBhdXRoX21vZGU7Ci0JdTMyIGtleV9tZ210OwotfTsKLQotLyoqIEN1cnJlbnQgQmFzaWMgU2VydmljZSBTZXQgU3RhdGUgU3RydWN0dXJlICovCi1zdHJ1Y3QgY3VycmVudF9ic3NfcGFyYW1zIHsKLQkvKiogYnNzaWQgKi8KLQl1OCBic3NpZFtFVEhfQUxFTl07Ci0JLyoqIHNzaWQgKi8KLQl1OCBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU4gKyAxXTsKLQl1OCBzc2lkX2xlbjsKLQotCS8qKiBiYW5kICovCi0JdTggYmFuZDsKLQkvKiogY2hhbm5lbCBpcyBkaXJlY3RseSBpbiBwcml2LT5jaGFubmVsICovCi0JLyoqIHplcm8tdGVybWluYXRlZCBhcnJheSBvZiBzdXBwb3J0ZWQgZGF0YSByYXRlcyAqLwotCXU4IHJhdGVzW01BWF9SQVRFUyArIDFdOwotfTsKLQotLyoqCi0gKiAgQGJyaWVmIFN0cnVjdHVyZSB1c2VkIHRvIHN0b3JlIGluZm9ybWF0aW9uIGZvciBlYWNoIGJlYWNvbi9wcm9iZSByZXNwb25zZQotICovCi1zdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgewotCXU4IGJzc2lkW0VUSF9BTEVOXTsKLQotCXU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTiArIDFdOwotCXU4IHNzaWRfbGVuOwotCi0JdTE2IGNhcGFiaWxpdHk7Ci0JdTMyIHJzc2k7Ci0JdTMyIGNoYW5uZWw7Ci0JdTE2IGJlYWNvbnBlcmlvZDsKLQlfX2xlMTYgYXRpbXdpbmRvdzsKLQotCS8qIElXX01PREVfQVVUTywgSVdfTU9ERV9BREhPQywgSVdfTU9ERV9JTkZSQSAqLwotCXU4IG1vZGU7Ci0KLQkvKiB6ZXJvLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3VwcG9ydGVkIGRhdGEgcmF0ZXMgKi8KLQl1OCByYXRlc1tNQVhfUkFURVMgKyAxXTsKLQotCXVuc2lnbmVkIGxvbmcgbGFzdF9zY2FubmVkOwotCi0JdW5pb24gaWVlZV9waHlfcGFyYW1fc2V0IHBoeTsKLQl1bmlvbiBpZWVlX3NzX3BhcmFtX3NldCBzczsKLQotCXU4IHdwYV9pZVtNQVhfV1BBX0lFX0xFTl07Ci0Jc2l6ZV90IHdwYV9pZV9sZW47Ci0JdTggcnNuX2llW01BWF9XUEFfSUVfTEVOXTsKLQlzaXplX3QgcnNuX2llX2xlbjsKLQotCXU4IG1lc2g7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci19OwotCi0vKiogQXNzb2NpYXRpb24gcmVxdWVzdAotICoKLSAqIEVuY2Fwc3VsYXRlcyBhbGwgdGhlIG9wdGlvbnMgdGhhdCBkZXNjcmliZSBhIHNwZWNpZmljIGFzc29jYXRpb24gcmVxdWVzdAotICogb3IgY29uZmlndXJhdGlvbiBvZiB0aGUgd2lyZWxlc3MgY2FyZCdzIHJhZGlvLCBtb2RlLCBhbmQgc2VjdXJpdHkgc2V0dGluZ3MuCi0gKi8KLXN0cnVjdCBhc3NvY19yZXF1ZXN0IHsKLSNkZWZpbmUgQVNTT0NfRkxBR19TU0lECQkJMQotI2RlZmluZSBBU1NPQ19GTEFHX0NIQU5ORUwJCTIKLSNkZWZpbmUgQVNTT0NfRkxBR19CQU5ECQkJMwotI2RlZmluZSBBU1NPQ19GTEFHX01PREUJCQk0Ci0jZGVmaW5lIEFTU09DX0ZMQUdfQlNTSUQJCTUKLSNkZWZpbmUgQVNTT0NfRkxBR19XRVBfS0VZUwkJNgotI2RlZmluZSBBU1NPQ19GTEFHX1dFUF9UWF9LRVlJRFgJNwotI2RlZmluZSBBU1NPQ19GTEFHX1dQQV9NQ0FTVF9LRVkJOAotI2RlZmluZSBBU1NPQ19GTEFHX1dQQV9VQ0FTVF9LRVkJOQotI2RlZmluZSBBU1NPQ19GTEFHX1NFQ0lORk8JCTEwCi0jZGVmaW5lIEFTU09DX0ZMQUdfV1BBX0lFCQkxMQotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQl1OCBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU4gKyAxXTsKLQl1OCBzc2lkX2xlbjsKLQl1OCBjaGFubmVsOwotCXU4IGJhbmQ7Ci0JdTggbW9kZTsKLQl1OCBic3NpZFtFVEhfQUxFTl0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDIpKSk7Ci0KLQkvKiogV0VQIGtleXMgKi8KLQlzdHJ1Y3QgZW5jX2tleSB3ZXBfa2V5c1s0XTsKLQl1MTYgd2VwX3R4X2tleWlkeDsKLQotCS8qKiBXUEEga2V5cyAqLwotCXN0cnVjdCBlbmNfa2V5IHdwYV9tY2FzdF9rZXk7Ci0Jc3RydWN0IGVuY19rZXkgd3BhX3VuaWNhc3Rfa2V5OwotCi0Jc3RydWN0IGxic184MDJfMTFfc2VjdXJpdHkgc2VjaW5mbzsKLQotCS8qKiBXUEEgSW5mb3JtYXRpb24gRWxlbWVudHMqLwotCXU4IHdwYV9pZVtNQVhfV1BBX0lFX0xFTl07Ci0JdTggd3BhX2llX2xlbjsKLQotCS8qIEJTUyB0byBhc3NvY2lhdGUgd2l0aCBmb3IgaW5mcmFzdHJ1Y3R1cmUgb2YgQWQtSG9jIGpvaW4gKi8KLQlzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgYnNzOwotfTsKLQotCi1leHRlcm4gdTggbGJzX2JnX3JhdGVzW01BWF9SQVRFU107Ci0KLXZvaWQgbGJzX2Fzc29jaWF0aW9uX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotc3RydWN0IGFzc29jX3JlcXVlc3QgKmxic19nZXRfYXNzb2NpYXRpb25fcmVxdWVzdChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpOwotCi1pbnQgbGJzX2FkaG9jX3N0b3Aoc3RydWN0IGxic19wcml2YXRlICpwcml2KTsKLQotaW50IGxic19jbWRfODAyMTFfZGVhdXRoZW50aWNhdGUoc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJCSB1OCBic3NpZFtFVEhfQUxFTl0sIHUxNiByZWFzb24pOwotCi1pbnQgbGJzX2NtZF84MDJfMTFfcnNzaShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JCQkJc3RydWN0IGNtZF9kc19jb21tYW5kICpjbWQpOwotaW50IGxic19yZXRfODAyXzExX3Jzc2koc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJCXN0cnVjdCBjbWRfZHNfY29tbWFuZCAqcmVzcCk7Ci0KLWludCBsYnNfY21kX2Jjbl9jdHJsKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCQlzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKmNtZCwKLQkJCQl1MTYgY21kX2FjdGlvbik7Ci1pbnQgbGJzX3JldF84MDJfMTFfYmNuX2N0cmwoc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJCQlzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKnJlc3ApOwotCi1pbnQgbGJzX2NtZF84MDJfMTFfc2V0X3dlcChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHVpbnQxNl90IGNtZF9hY3Rpb24sCi0JCQkgICBzdHJ1Y3QgYXNzb2NfcmVxdWVzdCAqYXNzb2MpOwotCi1pbnQgbGJzX2NtZF84MDJfMTFfZW5hYmxlX3JzbihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHVpbnQxNl90IGNtZF9hY3Rpb24sCi0JCQkgICAgICB1aW50MTZfdCAqZW5hYmxlKTsKLQotaW50IGxic19jbWRfODAyXzExX2tleV9tYXRlcmlhbChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHVpbnQxNl90IGNtZF9hY3Rpb24sCi0JCQkJc3RydWN0IGFzc29jX3JlcXVlc3QgKmFzc29jKTsKLQotI2VuZGlmIC8qIF9MQlNfQVNTT0NfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY2ZnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jZmcuYwppbmRleCA5ZDVkM2NjLi4yNWY5MDI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jZmcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jZmcuYwpAQCAtNyw4ICs3LDExIEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KICNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKKyNpbmNsdWRlICJkZWNsLmgiCiAjaW5jbHVkZSAiY2ZnLmgiCiAjaW5jbHVkZSAiY21kLmgiCiAKQEAgLTM5LDI2ICs0MiwyNyBAQAogCUNIQU4yRygxNCwgMjQ4NCwgMCksCiB9OwogCi0jZGVmaW5lIFJBVEVUQUJfRU5UKF9yYXRlLCBfcmF0ZWlkLCBfZmxhZ3MpIHsgXAotCS5iaXRyYXRlICA9IChfcmF0ZSksICAgICAgICAgICAgICAgICAgXAotCS5od192YWx1ZSA9IChfcmF0ZWlkKSwgICAgICAgICAgICAgICAgXAotCS5mbGFncyAgICA9IChfZmxhZ3MpLCAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBSQVRFVEFCX0VOVChfcmF0ZSwgX2h3X3ZhbHVlLCBfZmxhZ3MpIHsgXAorCS5iaXRyYXRlICA9IChfcmF0ZSksICAgICAgICAgICAgICAgICAgICBcCisJLmh3X3ZhbHVlID0gKF9od192YWx1ZSksICAgICAgICAgICAgICAgIFwKKwkuZmxhZ3MgICAgPSAoX2ZsYWdzKSwgICAgICAgICAgICAgICAgICAgXAogfQogCiAKKy8qIFRhYmxlIDYgaW4gc2VjdGlvbiAzLjIuMS4xICovCiBzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIGxic19yYXRlc1tdID0gewotCVJBVEVUQUJfRU5UKDEwLCAgMHgxLCAgIDApLAotCVJBVEVUQUJfRU5UKDIwLCAgMHgyLCAgIDApLAotCVJBVEVUQUJfRU5UKDU1LCAgMHg0LCAgIDApLAotCVJBVEVUQUJfRU5UKDExMCwgMHg4LCAgIDApLAotCVJBVEVUQUJfRU5UKDYwLCAgMHgxMCwgIDApLAotCVJBVEVUQUJfRU5UKDkwLCAgMHgyMCwgIDApLAotCVJBVEVUQUJfRU5UKDEyMCwgMHg0MCwgIDApLAotCVJBVEVUQUJfRU5UKDE4MCwgMHg4MCwgIDApLAotCVJBVEVUQUJfRU5UKDI0MCwgMHgxMDAsIDApLAotCVJBVEVUQUJfRU5UKDM2MCwgMHgyMDAsIDApLAotCVJBVEVUQUJfRU5UKDQ4MCwgMHg0MDAsIDApLAotCVJBVEVUQUJfRU5UKDU0MCwgMHg4MDAsIDApLAorCVJBVEVUQUJfRU5UKDEwLCAgMCwgIDApLAorCVJBVEVUQUJfRU5UKDIwLCAgMSwgIDApLAorCVJBVEVUQUJfRU5UKDU1LCAgMiwgIDApLAorCVJBVEVUQUJfRU5UKDExMCwgMywgIDApLAorCVJBVEVUQUJfRU5UKDYwLCAgOSwgIDApLAorCVJBVEVUQUJfRU5UKDkwLCAgNiwgIDApLAorCVJBVEVUQUJfRU5UKDEyMCwgNywgIDApLAorCVJBVEVUQUJfRU5UKDE4MCwgOCwgIDApLAorCVJBVEVUQUJfRU5UKDI0MCwgOSwgIDApLAorCVJBVEVUQUJfRU5UKDM2MCwgMTAsIDApLAorCVJBVEVUQUJfRU5UKDQ4MCwgMTEsIDApLAorCVJBVEVUQUJfRU5UKDU0MCwgMTIsIDApLAogfTsKIAogc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgbGJzX2JhbmRfMmdoeiA9IHsKQEAgLTc2LDIyICs4MCw2MzkgQEAKIAlXTEFOX0NJUEhFUl9TVUlURV9DQ01QLAogfTsKIAorLyogVGltZSB0byBzdGF5IG9uIHRoZSBjaGFubmVsICovCisjZGVmaW5lIExCU19EV0VMTF9QQVNTSVZFIDEwMAorI2RlZmluZSBMQlNfRFdFTExfQUNUSVZFICA0MAogCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1pc2MgdXRpbGl0eSBmdW5jdGlvbnMKKyAqCisgKiBUTFZzIGFyZSBNYXJ2ZWxsIHNwZWNpZmljLiBUaGV5IGFyZSB2ZXJ5IHNpbWlsYXIgdG8gSUVzLCB0aGV5IGhhdmUgdGhlCisgKiBzYW1lIHN0cnVjdHVyZTogdHlwZSwgbGVuZ3RoLCBkYXRhKi4gVGhlIG9ubHkgZGlmZmVyZW5jZTogZm9yIElFcywgdGhlCisgKiB0eXBlIGFuZCBsZW5ndGggYXJlIHU4LCBidXQgZm9yIFRMVnMgdGhleSdyZSBfX2xlMTYuCisgKi8KKworLyoKKyAqIENvbnZlcnQgTkw4MDIxMSdzIGF1dGhfdHlwZSB0byB0aGUgb25lIGZyb20gTGliZXJ0YXMsIHNlZSBjaGFwdGVyIDUuOS4xCisgKiBpbiB0aGUgZmlybXdhcmUgc3BlYworICovCitzdGF0aWMgdTggbGJzX2F1dGhfdG9fYXV0aHR5cGUoZW51bSBubDgwMjExX2F1dGhfdHlwZSBhdXRoX3R5cGUpCit7CisJaW50IHJldCA9IC1FTk9UU1VQUDsKKworCXN3aXRjaCAoYXV0aF90eXBlKSB7CisJY2FzZSBOTDgwMjExX0FVVEhUWVBFX09QRU5fU1lTVEVNOgorCWNhc2UgTkw4MDIxMV9BVVRIVFlQRV9TSEFSRURfS0VZOgorCQlyZXQgPSBhdXRoX3R5cGU7CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9BVVRIVFlQRV9BVVRPTUFUSUM6CisJCXJldCA9IE5MODAyMTFfQVVUSFRZUEVfT1BFTl9TWVNURU07CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9BVVRIVFlQRV9ORVRXT1JLX0VBUDoKKwkJcmV0ID0gMHg4MDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogc2lsZW5jZSBjb21waWxlciAqLworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworCisvKiBWYXJpb3VzIGZpcm13YXJlIGNvbW1hbmRzIG5lZWQgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHJhdGVzLCBidXQgd2l0aAorICAgdGhlIGhpZ2h0LWJpdCBzZXQgZm9yIGJhc2ljIHJhdGVzICovCitzdGF0aWMgaW50IGxic19hZGRfcmF0ZXModTggKnJhdGVzKQoreworCXNpemVfdCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobGJzX3JhdGVzKTsgaSsrKSB7CisJCXU4IHJhdGUgPSBsYnNfcmF0ZXNbaV0uYml0cmF0ZSAvIDU7CisJCWlmIChyYXRlID09IDB4MDIgfHwgcmF0ZSA9PSAweDA0IHx8CisJCSAgICByYXRlID09IDB4MGIgfHwgcmF0ZSA9PSAweDE2KQorCQkJcmF0ZSB8PSAweDgwOworCQlyYXRlc1tpXSA9IHJhdGU7CisJfQorCXJldHVybiBBUlJBWV9TSVpFKGxic19yYXRlcyk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVExWIHV0aWxpdHkgZnVuY3Rpb25zCisgKgorICogVExWcyBhcmUgTWFydmVsbCBzcGVjaWZpYy4gVGhleSBhcmUgdmVyeSBzaW1pbGFyIHRvIElFcywgdGhleSBoYXZlIHRoZQorICogc2FtZSBzdHJ1Y3R1cmU6IHR5cGUsIGxlbmd0aCwgZGF0YSouIFRoZSBvbmx5IGRpZmZlcmVuY2U6IGZvciBJRXMsIHRoZQorICogdHlwZSBhbmQgbGVuZ3RoIGFyZSB1OCwgYnV0IGZvciBUTFZzIHRoZXkncmUgX19sZTE2LgorICovCisKKworLyoKKyAqIEFkZCBzc2lkIFRMVgorICovCisjZGVmaW5lIExCU19NQVhfU1NJRF9UTFZfU0laRQkJCVwKKwkoc2l6ZW9mKHN0cnVjdCBtcnZsX2llX2hlYWRlcikJCVwKKwkgKyBJRUVFODAyMTFfTUFYX1NTSURfTEVOKQorCitzdGF0aWMgaW50IGxic19hZGRfc3NpZF90bHYodTggKnRsdiwgY29uc3QgdTggKnNzaWQsIGludCBzc2lkX2xlbikKK3sKKwlzdHJ1Y3QgbXJ2bF9pZV9zc2lkX3BhcmFtX3NldCAqc3NpZF90bHYgPSAodm9pZCAqKXRsdjsKKworCS8qCisJICogVExWLUlEIFNTSUQgIDAwIDAwCisJICogbGVuZ3RoICAgICAgIDA2IDAwCisJICogc3NpZCAgICAgICAgIDRkIDRlIDU0IDQ1IDUzIDU0CisJICovCisJc3NpZF90bHYtPmhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoVExWX1RZUEVfU1NJRCk7CisJc3NpZF90bHYtPmhlYWRlci5sZW4gPSBjcHVfdG9fbGUxNihzc2lkX2xlbik7CisJbWVtY3B5KHNzaWRfdGx2LT5zc2lkLCBzc2lkLCBzc2lkX2xlbik7CisJcmV0dXJuIHNpemVvZihzc2lkX3Rsdi0+aGVhZGVyKSArIHNzaWRfbGVuOworfQorCisKKy8qCisgKiBBZGQgY2hhbm5lbCBsaXN0IFRMViAoc2VjdGlvbiA4LjQuMikKKyAqCisgKiBBY3R1YWwgY2hhbm5lbCBkYXRhIGNvbWVzIGZyb20gcHJpdi0+d2Rldi0+d2lwaHktPmNoYW5uZWxzLgorICovCisjZGVmaW5lIExCU19NQVhfQ0hBTk5FTF9MSVNUX1RMVl9TSVpFCQkJCQlcCisJKHNpemVvZihzdHJ1Y3QgbXJ2bF9pZV9oZWFkZXIpCQkJCQlcCisJICsgKExCU19TQ0FOX0JFRk9SRV9OQVAgKiBzaXplb2Yoc3RydWN0IGNoYW5zY2FucGFyYW1zZXQpKSkKKworc3RhdGljIGludCBsYnNfYWRkX2NoYW5uZWxfbGlzdF90bHYoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1OCAqdGx2LAorCQkJCSAgICBpbnQgbGFzdF9jaGFubmVsLCBpbnQgYWN0aXZlX3NjYW4pCit7CisJaW50IGNoYW5zY2FucGFyYW1zaXplID0gc2l6ZW9mKHN0cnVjdCBjaGFuc2NhbnBhcmFtc2V0KSAqCisJCShsYXN0X2NoYW5uZWwgLSBwcml2LT5zY2FuX2NoYW5uZWwpOworCisJc3RydWN0IG1ydmxfaWVfaGVhZGVyICpoZWFkZXIgPSAodm9pZCAqKSB0bHY7CisKKwkvKgorCSAqIFRMVi1JRCBDSEFOTElTVCAgMDEgMDEKKwkgKiBsZW5ndGggICAgICAgICAgIDBlIDAwCisJICogY2hhbm5lbCAgICAgICAgICAwMCAwMSAwMCAwMCAwMCA2NCAwMAorCSAqICAgcmFkaW8gdHlwZSAgICAgMDAKKwkgKiAgIGNoYW5uZWwgICAgICAgICAgIDAxCisJICogICBzY2FuIHR5cGUgICAgICAgICAgICAwMAorCSAqICAgbWluIHNjYW4gdGltZSAgICAgICAgICAgMDAgMDAKKwkgKiAgIG1heCBzY2FuIHRpbWUgICAgICAgICAgICAgICAgIDY0IDAwCisJICogY2hhbm5lbCAyICAgICAgICAwMCAwMiAwMCAwMCAwMCA2NCAwMAorCSAqCisJICovCisKKwloZWFkZXItPnR5cGUgPSBjcHVfdG9fbGUxNihUTFZfVFlQRV9DSEFOTElTVCk7CisJaGVhZGVyLT5sZW4gID0gY3B1X3RvX2xlMTYoY2hhbnNjYW5wYXJhbXNpemUpOworCXRsdiArPSBzaXplb2Yoc3RydWN0IG1ydmxfaWVfaGVhZGVyKTsKKworCS8qIGxic19kZWJfc2Nhbigic2NhbjogY2hhbm5lbHMgJWQgdG8gJWRcbiIsIHByaXYtPnNjYW5fY2hhbm5lbCwKKwkJICAgICBsYXN0X2NoYW5uZWwpOyAqLworCW1lbXNldCh0bHYsIDAsIGNoYW5zY2FucGFyYW1zaXplKTsKKworCXdoaWxlIChwcml2LT5zY2FuX2NoYW5uZWwgPCBsYXN0X2NoYW5uZWwpIHsKKwkJc3RydWN0IGNoYW5zY2FucGFyYW1zZXQgKnBhcmFtID0gKHZvaWQgKikgdGx2OworCisJCXBhcmFtLT5yYWRpb3R5cGUgPSBDTURfU0NBTl9SQURJT19UWVBFX0JHOworCQlwYXJhbS0+Y2hhbm51bWJlciA9CisJCQlwcml2LT5zY2FuX3JlcS0+Y2hhbm5lbHNbcHJpdi0+c2Nhbl9jaGFubmVsXS0+aHdfdmFsdWU7CisJCWlmIChhY3RpdmVfc2NhbikgeworCQkJcGFyYW0tPm1heHNjYW50aW1lID0gY3B1X3RvX2xlMTYoTEJTX0RXRUxMX0FDVElWRSk7CisJCX0gZWxzZSB7CisJCQlwYXJhbS0+Y2hhbnNjYW5tb2RlLnBhc3NpdmVzY2FuID0gMTsKKwkJCXBhcmFtLT5tYXhzY2FudGltZSA9IGNwdV90b19sZTE2KExCU19EV0VMTF9QQVNTSVZFKTsKKwkJfQorCQl0bHYgKz0gc2l6ZW9mKHN0cnVjdCBjaGFuc2NhbnBhcmFtc2V0KTsKKwkJcHJpdi0+c2Nhbl9jaGFubmVsKys7CisJfQorCXJldHVybiBzaXplb2Yoc3RydWN0IG1ydmxfaWVfaGVhZGVyKSArIGNoYW5zY2FucGFyYW1zaXplOworfQorCisKKy8qCisgKiBBZGQgcmF0ZXMgVExWCisgKgorICogVGhlIHJhdGVzIGFyZSBpbiBsYnNfYmdfcmF0ZXNbXSwgYnV0IGZvciB0aGUgODAyLjExYgorICogcmF0ZXMgdGhlIGhpZ2ggYml0IGlzIHNldC4gV2UgYWRkIHRoaXMgVExWIG9ubHkgYmVjYXVzZQorICogdGhlcmUncyBhIGZpcm13YXJlIHdoaWNoIG90aGVyd2lzZSBkb2Vzbid0IHJlcG9ydCBhbGwKKyAqIEFQcyBpbiByYW5nZS4KKyAqLworI2RlZmluZSBMQlNfTUFYX1JBVEVTX1RMVl9TSVpFCQkJXAorCShzaXplb2Yoc3RydWN0IG1ydmxfaWVfaGVhZGVyKQkJXAorCSArIChBUlJBWV9TSVpFKGxic19yYXRlcykpKQorCisvKiBBZGRzIGEgVExWIHdpdGggYWxsIHJhdGVzIHRoZSBoYXJkd2FyZSBzdXBwb3J0cyAqLworc3RhdGljIGludCBsYnNfYWRkX3N1cHBvcnRlZF9yYXRlc190bHYodTggKnRsdikKK3sKKwlzaXplX3QgaTsKKwlzdHJ1Y3QgbXJ2bF9pZV9yYXRlc19wYXJhbV9zZXQgKnJhdGVfdGx2ID0gKHZvaWQgKil0bHY7CisKKwkvKgorCSAqIFRMVi1JRCBSQVRFUyAgMDEgMDAKKwkgKiBsZW5ndGggICAgICAgIDBlIDAwCisJICogcmF0ZXMgICAgICAgICA4MiA4NCA4YiA5NiAwYyAxMiAxOCAyNCAzMCA0OCA2MCA2YworCSAqLworCXJhdGVfdGx2LT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFRMVl9UWVBFX1JBVEVTKTsKKwl0bHYgKz0gc2l6ZW9mKHJhdGVfdGx2LT5oZWFkZXIpOworCWkgPSBsYnNfYWRkX3JhdGVzKHRsdik7CisJdGx2ICs9IGk7CisJcmF0ZV90bHYtPmhlYWRlci5sZW4gPSBjcHVfdG9fbGUxNihpKTsKKwlyZXR1cm4gc2l6ZW9mKHJhdGVfdGx2LT5oZWFkZXIpICsgaTsKK30KKworCisvKgorICogQWRkcyBhIFRMViB3aXRoIGFsbCByYXRlcyB0aGUgaGFyZHdhcmUgKmFuZCogQlNTIHN1cHBvcnRzLgorICovCitzdGF0aWMgaW50IGxic19hZGRfY29tbW9uX3JhdGVzX3Rsdih1OCAqdGx2LCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MpCit7CisJc3RydWN0IG1ydmxfaWVfcmF0ZXNfcGFyYW1fc2V0ICpyYXRlX3RsdiA9ICh2b2lkICopdGx2OworCWNvbnN0IHU4ICpyYXRlc19laWQgPSBpZWVlODAyMTFfYnNzX2dldF9pZShic3MsIFdMQU5fRUlEX1NVUFBfUkFURVMpOworCWludCBuOworCisJLyoKKwkgKiAwMSAwMCAgICAgICAgICAgICAgICAgICBUTFZfVFlQRV9SQVRFUworCSAqIDA0IDAwICAgICAgICAgICAgICAgICAgIGxlbgorCSAqIDgyIDg0IDhiIDk2ICAgICAgICAgICAgIHJhdGVzCisJICovCisJcmF0ZV90bHYtPmhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoVExWX1RZUEVfUkFURVMpOworCXRsdiArPSBzaXplb2YocmF0ZV90bHYtPmhlYWRlcik7CisKKwlpZiAoIXJhdGVzX2VpZCkgeworCQkvKiBGYWxsYmFjazogYWRkIGJhc2ljIDgwMi4xMWIgcmF0ZXMgKi8KKwkJKnRsdisrID0gMHg4MjsKKwkJKnRsdisrID0gMHg4NDsKKwkJKnRsdisrID0gMHg4YjsKKwkJKnRsdisrID0gMHg5NjsKKwkJbiA9IDQ7CisJfSBlbHNlIHsKKwkJaW50IGh3LCBhcDsKKwkJdTggYXBfbWF4ID0gcmF0ZXNfZWlkWzFdOworCQluID0gMDsKKwkJZm9yIChodyA9IDA7IGh3IDwgQVJSQVlfU0laRShsYnNfcmF0ZXMpOyBodysrKSB7CisJCQl1OCBod19yYXRlID0gbGJzX3JhdGVzW2h3XS5iaXRyYXRlIC8gNTsKKwkJCWZvciAoYXAgPSAwOyBhcCA8IGFwX21heDsgYXArKykgeworCQkJCWlmIChod19yYXRlID09IChyYXRlc19laWRbYXArMl0gJiAweDdmKSkgeworCQkJCQkqdGx2KysgPSByYXRlc19laWRbYXArMl07CisJCQkJCW4rKzsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlyYXRlX3Rsdi0+aGVhZGVyLmxlbiA9IGNwdV90b19sZTE2KG4pOworCXJldHVybiBzaXplb2YocmF0ZV90bHYtPmhlYWRlcikgKyBuOworfQorCisKKy8qCisgKiBBZGQgYXV0aCB0eXBlIFRMVi4KKyAqCisgKiBUaGlzIGlzIG9ubHkgbmVlZGVkIGZvciBuZXdlciBmaXJtd2FyZSAoVjkgYW5kIHVwKS4KKyAqLworI2RlZmluZSBMQlNfTUFYX0FVVEhfVFlQRV9UTFZfU0laRSBcCisJc2l6ZW9mKHN0cnVjdCBtcnZsX2llX2F1dGhfdHlwZSkKKworc3RhdGljIGludCBsYnNfYWRkX2F1dGhfdHlwZV90bHYodTggKnRsdiwgZW51bSBubDgwMjExX2F1dGhfdHlwZSBhdXRoX3R5cGUpCit7CisJc3RydWN0IG1ydmxfaWVfYXV0aF90eXBlICphdXRoID0gKHZvaWQgKikgdGx2OworCisJLyoKKwkgKiAxZiAwMSAgVExWX1RZUEVfQVVUSF9UWVBFCisJICogMDEgMDAgIGxlbgorCSAqIDAxICAgICBhdXRoIHR5cGUKKwkgKi8KKwlhdXRoLT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFRMVl9UWVBFX0FVVEhfVFlQRSk7CisJYXV0aC0+aGVhZGVyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqYXV0aCktc2l6ZW9mKGF1dGgtPmhlYWRlcikpOworCWF1dGgtPmF1dGggPSBjcHVfdG9fbGUxNihsYnNfYXV0aF90b19hdXRodHlwZShhdXRoX3R5cGUpKTsKKwlyZXR1cm4gc2l6ZW9mKCphdXRoKTsKK30KKworCisvKgorICogQWRkIGNoYW5uZWwgKHBoeSBkcykgVExWCisgKi8KKyNkZWZpbmUgTEJTX01BWF9DSEFOTkVMX1RMVl9TSVpFIFwKKwlzaXplb2Yoc3RydWN0IG1ydmxfaWVfaGVhZGVyKQorCitzdGF0aWMgaW50IGxic19hZGRfY2hhbm5lbF90bHYodTggKnRsdiwgdTggY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgbXJ2bF9pZV9kc19wYXJhbV9zZXQgKmRzID0gKHZvaWQgKikgdGx2OworCisJLyoKKwkgKiAwMyAwMCAgVExWX1RZUEVfUEhZX0RTCisJICogMDEgMDAgIGxlbgorCSAqIDA2ICAgICBjaGFubmVsCisJICovCisJZHMtPmhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoVExWX1RZUEVfUEhZX0RTKTsKKwlkcy0+aGVhZGVyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqZHMpLXNpemVvZihkcy0+aGVhZGVyKSk7CisJZHMtPmNoYW5uZWwgPSBjaGFubmVsOworCXJldHVybiBzaXplb2YoKmRzKTsKK30KKworCisvKgorICogQWRkIChlbXB0eSkgQ0YgcGFyYW0gVExWIG9mIHRoZSBmb3JtOgorICovCisjZGVmaW5lIExCU19NQVhfQ0ZfUEFSQU1fVExWX1NJWkUJCVwKKwlzaXplb2Yoc3RydWN0IG1ydmxfaWVfaGVhZGVyKQorCitzdGF0aWMgaW50IGxic19hZGRfY2ZfcGFyYW1fdGx2KHU4ICp0bHYpCit7CisJc3RydWN0IG1ydmxfaWVfY2ZfcGFyYW1fc2V0ICpjZiA9ICh2b2lkICopdGx2OworCisJLyoKKwkgKiAwNCAwMCAgVExWX1RZUEVfQ0YKKwkgKiAwNiAwMCAgbGVuCisJICogMDAgICAgIGNmcGNudAorCSAqIDAwICAgICBjZnBwZXJpb2QKKwkgKiAwMCAwMCAgY2ZwbWF4ZHVyYXRpb24KKwkgKiAwMCAwMCAgY2ZwZHVyYXRpb25yZW1haW5pbmcKKwkgKi8KKwljZi0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihUTFZfVFlQRV9DRik7CisJY2YtPmhlYWRlci5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKmNmKS1zaXplb2YoY2YtPmhlYWRlcikpOworCXJldHVybiBzaXplb2YoKmNmKTsKK30KKworLyoKKyAqIEFkZCBXUEEgVExWCisgKi8KKyNkZWZpbmUgTEJTX01BWF9XUEFfVExWX1NJWkUJCQlcCisJKHNpemVvZihzdHJ1Y3QgbXJ2bF9pZV9oZWFkZXIpCQlcCisJICsgMTI4IC8qIFRPRE86IEkgZ3Vlc3NlZCB0aGUgc2l6ZSAqLykKKworc3RhdGljIGludCBsYnNfYWRkX3dwYV90bHYodTggKnRsdiwgY29uc3QgdTggKmllLCB1OCBpZV9sZW4pCit7CisJc2l6ZV90IHRsdl9sZW47CisKKwkvKgorCSAqIFdlIG5lZWQganVzdCBjb252ZXJ0IGFuIElFIHRvIGFuIFRMVi4gSUVzIHVzZSB1OCBmb3IgdGhlIGhlYWRlciwKKwkgKiAgIHU4ICAgICAgdHlwZQorCSAqICAgdTggICAgICBsZW4KKwkgKiAgIHU4W10gICAgZGF0YQorCSAqIGJ1dCBUTFZzIHVzZSBfX2xlMTYgaW5zdGVhZDoKKwkgKiAgIF9fbGUxNiAgdHlwZQorCSAqICAgX19sZTE2ICBsZW4KKwkgKiAgIHU4W10gICAgZGF0YQorCSAqLworCSp0bHYrKyA9ICppZSsrOworCSp0bHYrKyA9IDA7CisJdGx2X2xlbiA9ICp0bHYrKyA9ICppZSsrOworCSp0bHYrKyA9IDA7CisJd2hpbGUgKHRsdl9sZW4tLSkKKwkJKnRsdisrID0gKmllKys7CisJLyogdGhlIFRMViBpcyB0d28gYnl0ZXMgbGFyZ2VyIHRoYW4gdGhlIElFICovCisJcmV0dXJuIGllX2xlbiArIDI7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNldCBDaGFubmVsCisgKi8KKwogc3RhdGljIGludCBsYnNfY2ZnX3NldF9jaGFubmVsKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAogCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlKQogewogCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IHdpcGh5X3ByaXYod2lwaHkpOwogCWludCByZXQgPSAtRU5PVFNVUFA7CiAKLQlsYnNfZGViX2VudGVyX2FyZ3MoTEJTX0RFQl9DRkc4MDIxMSwgImZyZXEgJWQsIHR5cGUgJWQiLCBjaGFuLT5jZW50ZXJfZnJlcSwgY2hhbm5lbF90eXBlKTsKKwlsYnNfZGViX2VudGVyX2FyZ3MoTEJTX0RFQl9DRkc4MDIxMSwgImZyZXEgJWQsIHR5cGUgJWQiLAorCQkJICAgY2hhbm5lbC0+Y2VudGVyX2ZyZXEsIGNoYW5uZWxfdHlwZSk7CiAKIAlpZiAoY2hhbm5lbF90eXBlICE9IE5MODAyMTFfQ0hBTl9OT19IVCkKIAkJZ290byBvdXQ7CiAKLQlyZXQgPSBsYnNfc2V0X2NoYW5uZWwocHJpdiwgY2hhbi0+aHdfdmFsdWUpOworCXJldCA9IGxic19zZXRfY2hhbm5lbChwcml2LCBjaGFubmVsLT5od192YWx1ZSk7CisKKyBvdXQ6CisJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfQ0ZHODAyMTEsICJyZXQgJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTY2FubmluZworICovCisKKy8qCisgKiBXaGVuIHNjYW5uaW5nLCB0aGUgZmlybXdhcmUgZG9lc24ndCBzZW5kIGEgbnVsIHBhY2tldCB3aXRoIHRoZSBwb3dlci1zYWZlCisgKiBiaXQgdG8gdGhlIEFQLiBTbyB3ZSBjYW5ub3Qgc3RheSBhd2F5IGZyb20gb3VyIGN1cnJlbnQgY2hhbm5lbCB0b28gbG9uZywKKyAqIG90aGVyd2lzZSB3ZSBsb29zZSBkYXRhLiBTbyB0YWtlIGEgIm5hcCIgd2hpbGUgc2Nhbm5pbmcgZXZlcnkgb3RoZXIKKyAqIHdoaWxlLgorICovCisjZGVmaW5lIExCU19TQ0FOX0JFRk9SRV9OQVAgNAorCisKKy8qCisgKiBXaGVuIHRoZSBmaXJtd2FyZSByZXBvcnRzIGJhY2sgYSBzY2FuLXJlc3VsdCwgaXQgZ2l2ZXMgdXMgYW4gInU4IHJzc2kiLAorICogd2hpY2ggaXNuJ3QgcmVhbGx5IGFuIFJTU0ksIGFzIGl0IGJlY29tZXMgbGFyZ2VyIHdoZW4gbW92aW5nIGF3YXkgZnJvbQorICogdGhlIEFQLiBBbnl3YXksIHdlIG5lZWQgdG8gY29udmVydCB0aGF0IGludG8gbUJtLgorICovCisjZGVmaW5lIExCU19TQ0FOX1JTU0lfVE9fTUJNKHJzc2kpIFwKKwkoKC0oaW50KXJzc2kgKyAzKSoxMDApCisKK3N0YXRpYyBpbnQgbGJzX3JldF9zY2FuKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdW5zaWduZWQgbG9uZyBkdW1teSwKKwlzdHJ1Y3QgY21kX2hlYWRlciAqcmVzcCkKK3sKKwlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9zY2FuX3JzcCAqc2NhbnJlc3AgPSAodm9pZCAqKXJlc3A7CisJaW50IGJzc3NpemU7CisJY29uc3QgdTggKnBvczsKKwl1MTYgbnJfc2V0czsKKwljb25zdCB1OCAqdHNmZGVzYzsKKwlpbnQgdHNmc2l6ZTsKKwlpbnQgaTsKKwlpbnQgcmV0ID0gLUVJTFNFUTsKKworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DRkc4MDIxMSk7CisKKwlic3NzaXplID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZzY2FucmVzcC0+YnNzZGVzY3JpcHRzaXplKTsKKwlucl9zZXRzID0gbGUxNl90b19jcHUocmVzcC0+c2l6ZSk7CisKKwkvKgorCSAqIFRoZSBnZW5lcmFsIGxheW91dCBvZiB0aGUgc2NhbiByZXNwb25zZSBpcyBkZXNjcmliZWQgaW4gY2hhcHRlcgorCSAqIDUuNy4xLiBCYXNpY2FsbHkgd2UgaGF2ZSBhIGNvbW1vbiBwYXJ0LCB0aGVuIGFueSBudW1iZXIgb2YgQlNTCisJICogZGVzY3JpcHRvciBzZWN0aW9ucy4gRmluYWxseSB3ZSBoYXZlIHNlY3Rpb24gd2l0aCB0aGUgc2FtZSBudW1iZXIKKwkgKiBvZiBUU0ZzLgorCSAqCisJICogY21kX2RzXzgwMl8xMV9zY2FuX3JzcAorCSAqICAgY21kX2hlYWRlcgorCSAqICAgcG9zX3NpemUKKwkgKiAgIG5yX3NldHMKKwkgKiAgIGJzc2Rlc2MgMQorCSAqICAgICBic3NpZAorCSAqICAgICByc3NpCisJICogICAgIHRpbWVzdGFtcAorCSAqICAgICBpbnR2bAorCSAqICAgICBjYXBhCisJICogICAgIElFcworCSAqICAgYnNzZGVzYyAyCisJICogICBic3NkZXNjIG4KKwkgKiAgIE1ydmxJRXR5cGVzX1RzZkZpbWVzdGFtcF90CisJICogICAgIFRTRiBmb3IgQlNTIDEKKwkgKiAgICAgVFNGIGZvciBCU1MgMgorCSAqICAgICBUU0YgZm9yIEJTUyBuCisJICovCisKKwlwb3MgPSBzY2FucmVzcC0+YnNzZGVzY19hbmRfdGx2YnVmZmVyOworCisJdHNmZGVzYyA9IHBvcyArIGJzc3NpemU7CisJdHNmc2l6ZSA9IDQgKyA4ICogc2NhbnJlc3AtPm5yX3NldHM7CisKKwkvKiBWYWxpZGl0eSBjaGVjazogd2UgZXhwZWN0IGEgTWFydmVsbC1Mb2NhbCBUTFYgKi8KKwlpID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHRzZmRlc2MpOworCXRzZmRlc2MgKz0gMjsKKwlpZiAoaSAhPSBUTFZfVFlQRV9UU0ZUSU1FU1RBTVApCisJCWdvdG8gZG9uZTsKKwkvKiBWYWxpZGl0eSBjaGVjazogdGhlIFRMViBob2xkcyBUU0YgdmFsdWVzIHdpdGggOCBieXRlcyBlYWNoLCBzbworCSAqIHRoZSBzaXplIGluIHRoZSBUTFYgbXVzdCBtYXRjaCB0aGUgbnJfc2V0cyB2YWx1ZSAqLworCWkgPSBnZXRfdW5hbGlnbmVkX2xlMTYodHNmZGVzYyk7CisJdHNmZGVzYyArPSAyOworCWlmIChpIC8gOCAhPSBzY2FucmVzcC0+bnJfc2V0cykKKwkJZ290byBkb25lOworCisJZm9yIChpID0gMDsgaSA8IHNjYW5yZXNwLT5ucl9zZXRzOyBpKyspIHsKKwkJY29uc3QgdTggKmJzc2lkOworCQljb25zdCB1OCAqaWU7CisJCWludCBsZWZ0OworCQlpbnQgaWVsZW47CisJCWludCByc3NpOworCQl1MTYgaW50dmw7CisJCXUxNiBjYXBhOworCQlpbnQgY2hhbl9ubyA9IC0xOworCQljb25zdCB1OCAqc3NpZCA9IE5VTEw7CisJCXU4IHNzaWRfbGVuID0gMDsKKwkJREVDTEFSRV9TU0lEX0JVRihzc2lkX2J1Zik7CisKKwkJaW50IGxlbiA9IGdldF91bmFsaWduZWRfbGUxNihwb3MpOworCQlwb3MgKz0gMjsKKworCQkvKiBCU1NJRCAqLworCQlic3NpZCA9IHBvczsKKwkJcG9zICs9IEVUSF9BTEVOOworCQkvKiBSU1NJICovCisJCXJzc2kgPSAqcG9zKys7CisJCS8qIFBhY2tldCB0aW1lIHN0YW1wICovCisJCXBvcyArPSA4OworCQkvKiBCZWFjb24gaW50ZXJ2YWwgKi8KKwkJaW50dmwgPSBnZXRfdW5hbGlnbmVkX2xlMTYocG9zKTsKKwkJcG9zICs9IDI7CisJCS8qIENhcGFiaWxpdGllcyAqLworCQljYXBhID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHBvcyk7CisJCXBvcyArPSAyOworCisJCS8qIFRvIGZpbmQgb3V0IHRoZSBjaGFubmVsLCB3ZSBtdXN0IHBhcnNlIHRoZSBJRXMgKi8KKwkJaWUgPSBwb3M7CisJCS8qIDYrMSs4KzIrMjogc2l6ZSBvZiBCU1NJRCwgUlNTSSwgdGltZSBzdGFtcCwgYmVhY29uCisJCSAgIGludGVydmFsLCBjYXBhYmlsaXRpZXMgKi8KKwkJaWVsZW4gPSBsZWZ0ID0gbGVuIC0gKDYgKyAxICsgOCArIDIgKyAyKTsKKwkJd2hpbGUgKGxlZnQgPj0gMikgeworCQkJdTggaWQsIGVsZW47CisJCQlpZCA9ICpwb3MrKzsKKwkJCWVsZW4gPSAqcG9zKys7CisJCQlsZWZ0IC09IDI7CisJCQlpZiAoZWxlbiA+IGxlZnQgfHwgZWxlbiA9PSAwKQorCQkJCWdvdG8gZG9uZTsKKwkJCWlmIChpZCA9PSBXTEFOX0VJRF9EU19QQVJBTVMpCisJCQkJY2hhbl9ubyA9ICpwb3M7CisJCQlpZiAoaWQgPT0gV0xBTl9FSURfU1NJRCkgeworCQkJCXNzaWQgPSBwb3M7CisJCQkJc3NpZF9sZW4gPSBlbGVuOworCQkJfQorCQkJbGVmdCAtPSBlbGVuOworCQkJcG9zICs9IGVsZW47CisJCX0KKworCQkvKiBObyBjaGFubmVsLCBubyBsdWNrICovCisJCWlmIChjaGFuX25vICE9IC0xKSB7CisJCQlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gcHJpdi0+d2Rldi0+d2lwaHk7CisJCQlpbnQgZnJlcSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShjaGFuX25vKTsKKwkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9CisJCQkJaWVlZTgwMjExX2dldF9jaGFubmVsKHdpcGh5LCBmcmVxKTsKKworCQkJbGJzX2RlYl9zY2FuKCJzY2FuOiAlcE0sIGNhcGEgJTA0eCwgY2hhbiAlMmQsICVzLCAiCisJCQkJICAgICAiJWQgZEJtXG4iLAorCQkJCSAgICAgYnNzaWQsIGNhcGEsIGNoYW5fbm8sCisJCQkJICAgICBwcmludF9zc2lkKHNzaWRfYnVmLCBzc2lkLCBzc2lkX2xlbiksCisJCQkJICAgICBMQlNfU0NBTl9SU1NJX1RPX01CTShyc3NpKS8xMDApOworCisJCQlpZiAoY2hhbm5lbCB8fAorCQkJICAgICEoY2hhbm5lbC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkpCisJCQkJY2ZnODAyMTFfaW5mb3JtX2Jzcyh3aXBoeSwgY2hhbm5lbCwKKwkJCQkJYnNzaWQsIGxlNjRfdG9fY3B1KCooX19sZTY0ICopdHNmZGVzYyksCisJCQkJCWNhcGEsIGludHZsLCBpZSwgaWVsZW4sCisJCQkJCUxCU19TQ0FOX1JTU0lfVE9fTUJNKHJzc2kpLAorCQkJCQlHRlBfS0VSTkVMKTsKKwkJfQorCQl0c2ZkZXNjICs9IDg7CisJfQorCXJldCA9IDA7CisKKyBkb25lOgorCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1NDQU4sICJyZXQgJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKworLyoKKyAqIE91ciBzY2FuIGNvbW1hbmQgY29udGFpbnMgYSBUTFYsIGNvbnN0aW5nIG9mIGEgU1NJRCBUTFYsIGEgY2hhbm5lbCBsaXN0CisgKiBUTFYgYW5kIGEgcmF0ZXMgVExWLiBEZXRlcm1pbmUgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGVtOgorICovCisjZGVmaW5lIExCU19TQ0FOX01BWF9DTURfU0laRQkJCVwKKwkoc2l6ZW9mKHN0cnVjdCBjbWRfZHNfODAyXzExX3NjYW4pCVwKKwkgKyBMQlNfTUFYX1NTSURfVExWX1NJWkUJCVwKKwkgKyBMQlNfTUFYX0NIQU5ORUxfTElTVF9UTFZfU0laRQlcCisJICsgTEJTX01BWF9SQVRFU19UTFZfU0laRSkKKworLyoKKyAqIEFzc3VtZXMgcHJpdi0+c2Nhbl9yZXEgaXMgaW5pdGlhbGl6ZWQgYW5kIHZhbGlkCisgKiBBc3N1bWVzIHByaXYtPnNjYW5fY2hhbm5lbCBpcyBpbml0aWFsaXplZAorICovCitzdGF0aWMgdm9pZCBsYnNfc2Nhbl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGJzX3ByaXZhdGUsIHNjYW5fd29yay53b3JrKTsKKwlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9zY2FuICpzY2FuX2NtZDsKKwl1OCAqdGx2OyAvKiBwb2ludGVyIGludG8gb3VyIGN1cnJlbnQsIGdyb3dpbmcgVExWIHN0b3JhZ2UgYXJlYSAqLworCWludCBsYXN0X2NoYW5uZWw7CisJaW50IHJ1bm5pbmcsIGNhcnJpZXI7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfU0NBTik7CisKKwlzY2FuX2NtZCA9IGt6YWxsb2MoTEJTX1NDQU5fTUFYX0NNRF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoc2Nhbl9jbWQgPT0gTlVMTCkKKwkJZ290byBvdXRfbm9fc2Nhbl9jbWQ7CisKKwkvKiBwcmVwYXJlIGZpeGVkIHBhcnQgb2Ygc2NhbiBjb21tYW5kICovCisJc2Nhbl9jbWQtPmJzc3R5cGUgPSBDTURfQlNTX1RZUEVfQU5ZOworCisJLyogc3RvcCBuZXR3b3JrIHdoaWxlIHdlJ3JlIGF3YXkgZnJvbSBvdXIgbWFpbiBjaGFubmVsICovCisJcnVubmluZyA9ICFuZXRpZl9xdWV1ZV9zdG9wcGVkKHByaXYtPmRldik7CisJY2FycmllciA9IG5ldGlmX2NhcnJpZXJfb2socHJpdi0+ZGV2KTsKKwlpZiAocnVubmluZykKKwkJbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5kZXYpOworCWlmIChjYXJyaWVyKQorCQluZXRpZl9jYXJyaWVyX29mZihwcml2LT5kZXYpOworCisJLyogcHJlcGFyZSBmaXhlZCBwYXJ0IG9mIHNjYW4gY29tbWFuZCAqLworCXRsdiA9IHNjYW5fY21kLT50bHZidWZmZXI7CisKKwkvKiBhZGQgU1NJRCBUTFYgKi8KKwlpZiAocHJpdi0+c2Nhbl9yZXEtPm5fc3NpZHMpCisJCXRsdiArPSBsYnNfYWRkX3NzaWRfdGx2KHRsdiwKKwkJCQkJcHJpdi0+c2Nhbl9yZXEtPnNzaWRzWzBdLnNzaWQsCisJCQkJCXByaXYtPnNjYW5fcmVxLT5zc2lkc1swXS5zc2lkX2xlbik7CisKKwkvKiBhZGQgY2hhbm5lbCBUTFZzICovCisJbGFzdF9jaGFubmVsID0gcHJpdi0+c2Nhbl9jaGFubmVsICsgTEJTX1NDQU5fQkVGT1JFX05BUDsKKwlpZiAobGFzdF9jaGFubmVsID4gcHJpdi0+c2Nhbl9yZXEtPm5fY2hhbm5lbHMpCisJCWxhc3RfY2hhbm5lbCA9IHByaXYtPnNjYW5fcmVxLT5uX2NoYW5uZWxzOworCXRsdiArPSBsYnNfYWRkX2NoYW5uZWxfbGlzdF90bHYocHJpdiwgdGx2LCBsYXN0X2NoYW5uZWwsCisJCXByaXYtPnNjYW5fcmVxLT5uX3NzaWRzKTsKKworCS8qIGFkZCByYXRlcyBUTFYgKi8KKwl0bHYgKz0gbGJzX2FkZF9zdXBwb3J0ZWRfcmF0ZXNfdGx2KHRsdik7CisKKwlpZiAocHJpdi0+c2Nhbl9jaGFubmVsIDwgcHJpdi0+c2Nhbl9yZXEtPm5fY2hhbm5lbHMpIHsKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+c2Nhbl93b3JrKTsKKwkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtfdGhyZWFkLCAmcHJpdi0+c2Nhbl93b3JrLAorCQkJbXNlY3NfdG9famlmZmllcygzMDApKTsKKwl9CisKKwkvKiBUaGlzIGlzIHRoZSBmaW5hbCBkYXRhIHdlIGFyZSBhYm91dCB0byBzZW5kICovCisJc2Nhbl9jbWQtPmhkci5zaXplID0gY3B1X3RvX2xlMTYodGx2IC0gKHU4ICopc2Nhbl9jbWQpOworCWxic19kZWJfaGV4KExCU19ERUJfU0NBTiwgIlNDQU5fQ01EIiwgKHZvaWQgKilzY2FuX2NtZCwKKwkJICAgIHNpemVvZigqc2Nhbl9jbWQpKTsKKwlsYnNfZGViX2hleChMQlNfREVCX1NDQU4sICJTQ0FOX1RMViIsIHNjYW5fY21kLT50bHZidWZmZXIsCisJCSAgICB0bHYgLSBzY2FuX2NtZC0+dGx2YnVmZmVyKTsKKworCV9fbGJzX2NtZChwcml2LCBDTURfODAyXzExX1NDQU4sICZzY2FuX2NtZC0+aGRyLAorCQlsZTE2X3RvX2NwdShzY2FuX2NtZC0+aGRyLnNpemUpLAorCQlsYnNfcmV0X3NjYW4sIDApOworCisJaWYgKHByaXYtPnNjYW5fY2hhbm5lbCA+PSBwcml2LT5zY2FuX3JlcS0+bl9jaGFubmVscykgeworCQkvKiBNYXJrIHNjYW4gZG9uZSAqLworCQljZmc4MDIxMV9zY2FuX2RvbmUocHJpdi0+c2Nhbl9yZXEsIGZhbHNlKTsKKwkJcHJpdi0+c2Nhbl9yZXEgPSBOVUxMOworCX0KKworCS8qIFJlc3RhcnQgbmV0d29yayAqLworCWlmIChjYXJyaWVyKQorCQluZXRpZl9jYXJyaWVyX29uKHByaXYtPmRldik7CisJaWYgKHJ1bm5pbmcgJiYgIXByaXYtPnR4X3BlbmRpbmdfbGVuKQorCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPmRldik7CisKKwlrZnJlZShzY2FuX2NtZCk7CisKKyBvdXRfbm9fc2Nhbl9jbWQ6CisJbGJzX2RlYl9sZWF2ZShMQlNfREVCX1NDQU4pOworfQorCisKK3N0YXRpYyBpbnQgbGJzX2NmZ19zY2FuKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0KQoreworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IHdpcGh5X3ByaXYod2lwaHkpOworCWludCByZXQgPSAwOworCisJbGJzX2RlYl9lbnRlcihMQlNfREVCX0NGRzgwMjExKTsKKworCWlmIChwcml2LT5zY2FuX3JlcSB8fCBkZWxheWVkX3dvcmtfcGVuZGluZygmcHJpdi0+c2Nhbl93b3JrKSkgeworCQkvKiBvbGQgc2NhbiByZXF1ZXN0IG5vdCB5ZXQgcHJvY2Vzc2VkICovCisJCXJldCA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKworCWxic19kZWJfc2Nhbigic2Nhbjogc3NpZHMgJWQsIGNoYW5uZWxzICVkLCBpZV9sZW4gJXpkXG4iLAorCQlyZXF1ZXN0LT5uX3NzaWRzLCByZXF1ZXN0LT5uX2NoYW5uZWxzLCByZXF1ZXN0LT5pZV9sZW4pOworCisJcHJpdi0+c2Nhbl9jaGFubmVsID0gMDsKKwlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya190aHJlYWQsICZwcml2LT5zY2FuX3dvcmssCisJCW1zZWNzX3RvX2ppZmZpZXMoNTApKTsKKworCWlmIChwcml2LT5zdXJwcmlzZXJlbW92ZWQpCisJCXJldCA9IC1FSU87CisKKwlwcml2LT5zY2FuX3JlcSA9IHJlcXVlc3Q7CiAKICBvdXQ6CiAJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfQ0ZHODAyMTEsICJyZXQgJWQiLCByZXQpOwpAQCAtMTAxLDggKzcyMiwxMTQ1IEBACiAKIAogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFdmVudHMKKyAqLworCit2b2lkIGxic19zZW5kX2Rpc2Nvbm5lY3Rfbm90aWZpY2F0aW9uKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKK3sKKwlsYnNfZGViX2VudGVyKExCU19ERUJfQ0ZHODAyMTEpOworCisJY2ZnODAyMTFfZGlzY29ubmVjdGVkKHByaXYtPmRldiwKKwkJMCwKKwkJTlVMTCwgMCwKKwkJR0ZQX0tFUk5FTCk7CisKKwlsYnNfZGViX2xlYXZlKExCU19ERUJfQ0ZHODAyMTEpOworfQorCit2b2lkIGxic19zZW5kX21pY19mYWlsdXJlZXZlbnQoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1MzIgZXZlbnQpCit7CisJbGJzX2RlYl9lbnRlcihMQlNfREVCX0NGRzgwMjExKTsKKworCWNmZzgwMjExX21pY2hhZWxfbWljX2ZhaWx1cmUocHJpdi0+ZGV2LAorCQlwcml2LT5hc3NvY19ic3MsCisJCWV2ZW50ID09IE1BQ1JFR19JTlRfQ09ERV9NSUNfRVJSX01VTFRJQ0FTVCA/CisJCQlOTDgwMjExX0tFWVRZUEVfR1JPVVAgOgorCQkJTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLAorCQktMSwKKwkJTlVMTCwKKwkJR0ZQX0tFUk5FTCk7CisKKwlsYnNfZGViX2xlYXZlKExCU19ERUJfQ0ZHODAyMTEpOworfQorCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb25uZWN0L2Rpc2Nvbm5lY3QKKyAqLworCisKKy8qCisgKiBUaGlzIHJlbW92ZXMgYWxsIFdFUCBrZXlzCisgKi8KK3N0YXRpYyBpbnQgbGJzX3JlbW92ZV93ZXBfa2V5cyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCit7CisJc3RydWN0IGNtZF9kc184MDJfMTFfc2V0X3dlcCBjbWQ7CisJaW50IHJldDsKKworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DRkc4MDIxMSk7CisKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCWNtZC5oZHIuc2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihjbWQpKTsKKwljbWQua2V5aW5kZXggPSBjcHVfdG9fbGUxNihwcml2LT53ZXBfdHhfa2V5KTsKKwljbWQuYWN0aW9uID0gY3B1X3RvX2xlMTYoQ01EX0FDVF9SRU1PVkUpOworCisJcmV0ID0gbGJzX2NtZF93aXRoX3Jlc3BvbnNlKHByaXYsIENNRF84MDJfMTFfU0VUX1dFUCwgJmNtZCk7CisKKwlsYnNfZGViX2xlYXZlKExCU19ERUJfQ0ZHODAyMTEpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBTZXQgV0VQIGtleXMKKyAqLworc3RhdGljIGludCBsYnNfc2V0X3dlcF9rZXlzKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKK3sKKwlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9zZXRfd2VwIGNtZDsKKwlpbnQgaTsKKwlpbnQgcmV0OworCisJbGJzX2RlYl9lbnRlcihMQlNfREVCX0NGRzgwMjExKTsKKworCS8qCisJICogY29tbWFuZCAgICAgICAgIDEzIDAwCisJICogc2l6ZSAgICAgICAgICAgIDUwIDAwCisJICogc2VxdWVuY2UgICAgICAgIHh4IHh4CisJICogcmVzdWx0ICAgICAgICAgIDAwIDAwCisJICogYWN0aW9uICAgICAgICAgIDAyIDAwICAgICBBQ1RfQURECisJICogdHJhbnNtaXQga2V5ICAgIDAwIDAwCisJICogdHlwZSBmb3Iga2V5IDEgIDAxICAgICAgICBXRVA0MAorCSAqIHR5cGUgZm9yIGtleSAyICAwMAorCSAqIHR5cGUgZm9yIGtleSAzICAwMAorCSAqIHR5cGUgZm9yIGtleSA0ICAwMAorCSAqIGtleSAxICAgICAgICAgICAzOSAzOSAzOSAzOSAzOSAwMCAwMCAwMAorCSAqICAgICAgICAgICAgICAgICAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMAorCSAqIGtleSAyICAgICAgICAgICAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMAorCSAqICAgICAgICAgICAgICAgICAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMAorCSAqIGtleSAzICAgICAgICAgICAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMAorCSAqICAgICAgICAgICAgICAgICAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMAorCSAqIGtleSA0ICAgICAgICAgICAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMAorCSAqLworCWlmIChwcml2LT53ZXBfa2V5X2xlblswXSB8fCBwcml2LT53ZXBfa2V5X2xlblsxXSB8fAorCSAgICBwcml2LT53ZXBfa2V5X2xlblsyXSB8fCBwcml2LT53ZXBfa2V5X2xlblszXSkgeworCQkvKiBPbmx5IHNldCB3ZXAga2V5cyBpZiB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBvZiB0aGVtICovCisJCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJCWNtZC5oZHIuc2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihjbWQpKTsKKwkJY21kLmtleWluZGV4ID0gY3B1X3RvX2xlMTYocHJpdi0+d2VwX3R4X2tleSk7CisJCWNtZC5hY3Rpb24gPSBjcHVfdG9fbGUxNihDTURfQUNUX0FERCk7CisKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJc3dpdGNoIChwcml2LT53ZXBfa2V5X2xlbltpXSkgeworCQkJY2FzZSBXTEFOX0tFWV9MRU5fV0VQNDA6CisJCQkJY21kLmtleXR5cGVbaV0gPSBDTURfVFlQRV9XRVBfNDBfQklUOworCQkJCWJyZWFrOworCQkJY2FzZSBXTEFOX0tFWV9MRU5fV0VQMTA0OgorCQkJCWNtZC5rZXl0eXBlW2ldID0gQ01EX1RZUEVfV0VQXzEwNF9CSVQ7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWNtZC5rZXl0eXBlW2ldID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW1lbWNweShjbWQua2V5bWF0ZXJpYWxbaV0sIHByaXYtPndlcF9rZXlbaV0sCisJCQkgICAgICAgcHJpdi0+d2VwX2tleV9sZW5baV0pOworCQl9CisKKwkJcmV0ID0gbGJzX2NtZF93aXRoX3Jlc3BvbnNlKHByaXYsIENNRF84MDJfMTFfU0VUX1dFUCwgJmNtZCk7CisJfSBlbHNlIHsKKwkJLyogT3RoZXJ3aXNlIHJlbW92ZSBhbGwgd2VwIGtleXMgKi8KKwkJcmV0ID0gbGJzX3JlbW92ZV93ZXBfa2V5cyhwcml2KTsKKwl9CisKKwlsYnNfZGViX2xlYXZlKExCU19ERUJfQ0ZHODAyMTEpOworCXJldHVybiByZXQ7Cit9CisKKworLyoKKyAqIEVuYWJsZS9EaXNhYmxlIFJTTiBzdGF0dXMKKyAqLworc3RhdGljIGludCBsYnNfZW5hYmxlX3JzbihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGludCBlbmFibGUpCit7CisJc3RydWN0IGNtZF9kc184MDJfMTFfZW5hYmxlX3JzbiBjbWQ7CisJaW50IHJldDsKKworCWxic19kZWJfZW50ZXJfYXJncyhMQlNfREVCX0NGRzgwMjExLCAiJWQiLCBlbmFibGUpOworCisJLyoKKwkgKiBjbWQgICAgICAgMmYgMDAKKwkgKiBzaXplICAgICAgMGMgMDAKKwkgKiBzZXF1ZW5jZSAgeHggeHgKKwkgKiByZXN1bHQgICAgMDAgMDAKKwkgKiBhY3Rpb24gICAgMDEgMDAgICAgQUNUX1NFVAorCSAqIGVuYWJsZSAgICAwMSAwMAorCSAqLworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLmhkci5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGNtZCkpOworCWNtZC5hY3Rpb24gPSBjcHVfdG9fbGUxNihDTURfQUNUX1NFVCk7CisJY21kLmVuYWJsZSA9IGNwdV90b19sZTE2KGVuYWJsZSk7CisKKwlyZXQgPSBsYnNfY21kX3dpdGhfcmVzcG9uc2UocHJpdiwgQ01EXzgwMl8xMV9FTkFCTEVfUlNOLCAmY21kKTsKKworCWxic19kZWJfbGVhdmUoTEJTX0RFQl9DRkc4MDIxMSk7CisJcmV0dXJuIHJldDsKK30KKworCisvKgorICogU2V0IFdQQS9XUEEga2V5IG1hdGVyaWFsCisgKi8KKworLyogbGlrZSAic3RydWN0IGNtZF9kc184MDJfMTFfa2V5X21hdGVyaWFsIiwgYnV0IHdpdGggY21kX2hlYWRlci4gT25jZSB3ZQorICogZ2V0IHJpZCBvZiBXRVhULCB0aGlzIHNob3VsZCBnbyBpbnRvIGhvc3QuaCAqLworCitzdHJ1Y3QgY21kX2tleV9tYXRlcmlhbCB7CisJc3RydWN0IGNtZF9oZWFkZXIgaGRyOworCisJX19sZTE2IGFjdGlvbjsKKwlzdHJ1Y3QgTXJ2bElFdHlwZV9rZXlQYXJhbVNldCBwYXJhbTsKK30gX19wYWNrZWQ7CisKK3N0YXRpYyBpbnQgbGJzX3NldF9rZXlfbWF0ZXJpYWwoc3RydWN0IGxic19wcml2YXRlICpwcml2LAorCQkJCWludCBrZXlfdHlwZSwKKwkJCQlpbnQga2V5X2luZm8sCisJCQkJdTggKmtleSwgdTE2IGtleV9sZW4pCit7CisJc3RydWN0IGNtZF9rZXlfbWF0ZXJpYWwgY21kOworCWludCByZXQ7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfQ0ZHODAyMTEpOworCisJLyoKKwkgKiBFeGFtcGxlIGZvciBXUEEgKFRLSVApOgorCSAqCisJICogY21kICAgICAgIDVlIDAwCisJICogc2l6ZSAgICAgIDM0IDAwCisJICogc2VxdWVuY2UgIHh4IHh4CisJICogcmVzdWx0ICAgIDAwIDAwCisJICogYWN0aW9uICAgIDAxIDAwCisJICogVExWIHR5cGUgIDAwIDAxICAgIGtleSBwYXJhbQorCSAqIGxlbmd0aCAgICAwMCAyNgorCSAqIGtleSB0eXBlICAwMSAwMCAgICBUS0lQCisJICoga2V5IGluZm8gIDA2IDAwICAgIFVOSUNBU1QgfCBFTkFCTEVECisJICoga2V5IGxlbiAgIDIwIDAwCisJICoga2V5ICAgICAgIDMyIGJ5dGVzCisJICovCisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQuaGRyLnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoY21kKSk7CisJY21kLmFjdGlvbiA9IGNwdV90b19sZTE2KENNRF9BQ1RfU0VUKTsKKwljbWQucGFyYW0udHlwZSA9IGNwdV90b19sZTE2KFRMVl9UWVBFX0tFWV9NQVRFUklBTCk7CisJY21kLnBhcmFtLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZihjbWQucGFyYW0pIC0gNCk7CisJY21kLnBhcmFtLmtleXR5cGVpZCA9IGNwdV90b19sZTE2KGtleV90eXBlKTsKKwljbWQucGFyYW0ua2V5aW5mbyA9IGNwdV90b19sZTE2KGtleV9pbmZvKTsKKwljbWQucGFyYW0ua2V5bGVuID0gY3B1X3RvX2xlMTYoa2V5X2xlbik7CisJaWYgKGtleSAmJiBrZXlfbGVuKQorCQltZW1jcHkoY21kLnBhcmFtLmtleSwga2V5LCBrZXlfbGVuKTsKKworCXJldCA9IGxic19jbWRfd2l0aF9yZXNwb25zZShwcml2LCBDTURfODAyXzExX0tFWV9NQVRFUklBTCwgJmNtZCk7CisKKwlsYnNfZGViX2xlYXZlKExCU19ERUJfQ0ZHODAyMTEpOworCXJldHVybiByZXQ7Cit9CisKKworLyoKKyAqIFNldHMgdGhlIGF1dGggdHlwZSAob3Blbiwgc2hhcmVkLCBldGMpIGluIHRoZSBmaXJtd2FyZS4gVGhhdAorICogd2UgdXNlIENNRF84MDJfMTFfQVVUSEVOVElDQVRFIGlzIG1pc2xlYWRpbmcsIHRoaXMgZmlybXdhcmUKKyAqIGNvbW1hbmQgZG9lc24ndCBzZW5kIGFuIGF1dGhlbnRpY2F0aW9uIGZyYW1lIGF0IGFsbCwgaXQganVzdAorICogc3RvcmVzIHRoZSBhdXRoX3R5cGUuCisgKi8KK3N0YXRpYyBpbnQgbGJzX3NldF9hdXRodHlwZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCisJCQkgICAgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpCit7CisJc3RydWN0IGNtZF9kc184MDJfMTFfYXV0aGVudGljYXRlIGNtZDsKKwlpbnQgcmV0OworCisJbGJzX2RlYl9lbnRlcl9hcmdzKExCU19ERUJfQ0ZHODAyMTEsICIlZCIsIHNtZS0+YXV0aF90eXBlKTsKKworCS8qCisJICogY21kICAgICAgICAxMSAwMAorCSAqIHNpemUgICAgICAgMTkgMDAKKwkgKiBzZXF1ZW5jZSAgIHh4IHh4CisJICogcmVzdWx0ICAgICAwMCAwMAorCSAqIEJTUyBpZCAgICAgMDAgMTMgMTkgODAgZGEgMzAKKwkgKiBhdXRoIHR5cGUgIDAwCisJICogcmVzZXJ2ZWQgICAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMAorCSAqLworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLmhkci5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGNtZCkpOworCWlmIChzbWUtPmJzc2lkKQorCQltZW1jcHkoY21kLmJzc2lkLCBzbWUtPmJzc2lkLCBFVEhfQUxFTik7CisJLyogY29udmVydCBhdXRoX3R5cGUgKi8KKwlyZXQgPSBsYnNfYXV0aF90b19hdXRodHlwZShzbWUtPmF1dGhfdHlwZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZG9uZTsKKworCWNtZC5hdXRodHlwZSA9IHJldDsKKwlyZXQgPSBsYnNfY21kX3dpdGhfcmVzcG9uc2UocHJpdiwgQ01EXzgwMl8xMV9BVVRIRU5USUNBVEUsICZjbWQpOworCisgZG9uZToKKwlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9DRkc4MDIxMSwgInJldCAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworCisvKgorICogQ3JlYXRlIGFzc29jaWF0aW9uIHJlcXVlc3QKKyAqLworI2RlZmluZSBMQlNfQVNTT0NfTUFYX0NNRF9TSVpFICAgICAgICAgICAgICAgICAgICAgXAorCShzaXplb2Yoc3RydWN0IGNtZF9kc184MDJfMTFfYXNzb2NpYXRlKSAgICBcCisJIC0gNTEyIC8qIGNtZF9kc184MDJfMTFfYXNzb2NpYXRlLmllYnVmICovIFwKKwkgKyBMQlNfTUFYX1NTSURfVExWX1NJWkUgICAgICAgICAgICAgICAgICAgXAorCSArIExCU19NQVhfQ0hBTk5FTF9UTFZfU0laRSAgICAgICAgICAgICAgICBcCisJICsgTEJTX01BWF9DRl9QQVJBTV9UTFZfU0laRSAgICAgICAgICAgICAgIFwKKwkgKyBMQlNfTUFYX0FVVEhfVFlQRV9UTFZfU0laRSAgICAgICAgICAgICAgXAorCSArIExCU19NQVhfV1BBX1RMVl9TSVpFKQorCitzdGF0aWMgaW50IGxic19hc3NvY2lhdGUoc3RydWN0IGxic19wcml2YXRlICpwcml2LAorCQlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MsCisJCXN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKQoreworCXN0cnVjdCBjbWRfZHNfODAyXzExX2Fzc29jaWF0ZV9yZXNwb25zZSAqcmVzcDsKKwlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9hc3NvY2lhdGUgKmNtZCA9IGt6YWxsb2MoTEJTX0FTU09DX01BWF9DTURfU0laRSwKKwkJCQkJCSAgICAgIEdGUF9LRVJORUwpOworCWNvbnN0IHU4ICpzc2lkX2VpZDsKKwlzaXplX3QgbGVuLCByZXNwX2llX2xlbjsKKwlpbnQgc3RhdHVzOworCWludCByZXQ7CisJdTggKnBvcyA9ICYoY21kLT5pZWJ1ZlswXSk7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfQ0ZHODAyMTEpOworCisJaWYgKCFjbWQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKworCS8qCisJICogY21kICAgICAgICAgICAgICA1MCAwMAorCSAqIGxlbmd0aCAgICAgICAgICAgMzQgMDAKKwkgKiBzZXF1ZW5jZSAgICAgICAgIHh4IHh4CisJICogcmVzdWx0ICAgICAgICAgICAwMCAwMAorCSAqIEJTUyBpZCAgICAgICAgICAgMDAgMTMgMTkgODAgZGEgMzAKKwkgKiBjYXBhYmlsaXRpZXMgICAgIDExIDAwCisJICogbGlzdGVuIGludGVydmFsICAwYSAwMAorCSAqIGJlYWNvbiBpbnRlcnZhbCAgMDAgMDAKKwkgKiBEVElNIHBlcmlvZCAgICAgIDAwCisJICogVExWcyAgICAgICAgICAgICB4eCAgICh1cCB0byA1MTIgYnl0ZXMpCisJICovCisJY21kLT5oZHIuY29tbWFuZCA9IGNwdV90b19sZTE2KENNRF84MDJfMTFfQVNTT0NJQVRFKTsKKworCS8qIEZpbGwgaW4gc3RhdGljIGZpZWxkcyAqLworCW1lbWNweShjbWQtPmJzc2lkLCBic3MtPmJzc2lkLCBFVEhfQUxFTik7CisJY21kLT5saXN0ZW5pbnRlcnZhbCA9IGNwdV90b19sZTE2KE1SVkRSVl9ERUZBVUxUX0xJU1RFTl9JTlRFUlZBTCk7CisJY21kLT5jYXBhYmlsaXR5ID0gY3B1X3RvX2xlMTYoYnNzLT5jYXBhYmlsaXR5KTsKKworCS8qIGFkZCBTU0lEIFRMViAqLworCXNzaWRfZWlkID0gaWVlZTgwMjExX2Jzc19nZXRfaWUoYnNzLCBXTEFOX0VJRF9TU0lEKTsKKwlpZiAoc3NpZF9laWQpCisJCXBvcyArPSBsYnNfYWRkX3NzaWRfdGx2KHBvcywgc3NpZF9laWQgKyAyLCBzc2lkX2VpZFsxXSk7CisJZWxzZQorCQlsYnNfZGViX2Fzc29jKCJubyBTU0lEXG4iKTsKKworCS8qIGFkZCBEUyBwYXJhbSBUTFYgKi8KKwlpZiAoYnNzLT5jaGFubmVsKQorCQlwb3MgKz0gbGJzX2FkZF9jaGFubmVsX3Rsdihwb3MsIGJzcy0+Y2hhbm5lbC0+aHdfdmFsdWUpOworCWVsc2UKKwkJbGJzX2RlYl9hc3NvYygibm8gY2hhbm5lbFxuIik7CisKKwkvKiBhZGQgKGVtcHR5KSBDRiBwYXJhbSBUTFYgKi8KKwlwb3MgKz0gbGJzX2FkZF9jZl9wYXJhbV90bHYocG9zKTsKKworCS8qIGFkZCByYXRlcyBUTFYgKi8KKwlwb3MgKz0gbGJzX2FkZF9jb21tb25fcmF0ZXNfdGx2KHBvcywgYnNzKTsKKworCS8qIGFkZCBhdXRoIHR5cGUgVExWICovCisJaWYgKHByaXYtPmZ3cmVsZWFzZSA+PSAweDA5MDAwMDAwKQorCQlwb3MgKz0gbGJzX2FkZF9hdXRoX3R5cGVfdGx2KHBvcywgc21lLT5hdXRoX3R5cGUpOworCisJLyogYWRkIFdQQS9XUEEyIFRMViAqLworCWlmIChzbWUtPmllICYmIHNtZS0+aWVfbGVuKQorCQlwb3MgKz0gbGJzX2FkZF93cGFfdGx2KHBvcywgc21lLT5pZSwgc21lLT5pZV9sZW4pOworCisJbGVuID0gKHNpemVvZigqY21kKSAtIHNpemVvZihjbWQtPmllYnVmKSkgKworCQkodTE2KShwb3MgLSAodTggKikgJmNtZC0+aWVidWYpOworCWNtZC0+aGRyLnNpemUgPSBjcHVfdG9fbGUxNihsZW4pOworCisJLyogc3RvcmUgZm9yIGxhdGVyIHVzZSAqLworCW1lbWNweShwcml2LT5hc3NvY19ic3MsIGJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKKworCXJldCA9IGxic19jbWRfd2l0aF9yZXNwb25zZShwcml2LCBDTURfODAyXzExX0FTU09DSUFURSwgY21kKTsKKwlpZiAocmV0KQorCQlnb3RvIGRvbmU7CisKKworCS8qIGdlbmVyYXRlIGNvbm5lY3QgbWVzc2FnZSB0byBjZmc4MDIxMSAqLworCisJcmVzcCA9ICh2b2lkICopIGNtZDsgLyogcmVjYXN0IGZvciBlYXNpZXIgZmllbGQgYWNjZXNzICovCisJc3RhdHVzID0gbGUxNl90b19jcHUocmVzcC0+c3RhdHVzY29kZSk7CisKKwkvKiBDb252ZXJ0IHN0YXRpcyBjb2RlIG9mIG9sZCBmaXJtd2FyZSAqLworCWlmIChwcml2LT5md3JlbGVhc2UgPCAweDA5MDAwMDAwKQorCQlzd2l0Y2ggKHN0YXR1cykgeworCQljYXNlIDA6CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJbGJzX2RlYl9hc3NvYygiaW52YWxpZCBhc3NvY2lhdGlvbiBwYXJhbWV0ZXJzXG4iKTsKKwkJCXN0YXR1cyA9IFdMQU5fU1RBVFVTX0NBUFNfVU5TVVBQT1JURUQ7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJbGJzX2RlYl9hc3NvYygidGltZXIgZXhwaXJlZCB3aGlsZSB3YWl0aW5nIGZvciBBUFxuIik7CisJCQlzdGF0dXMgPSBXTEFOX1NUQVRVU19BVVRIX1RJTUVPVVQ7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJbGJzX2RlYl9hc3NvYygiYXNzb2NpYXRpb24gcmVmdXNlZCBieSBBUFxuIik7CisJCQlzdGF0dXMgPSBXTEFOX1NUQVRVU19BU1NPQ19ERU5JRURfVU5TUEVDOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCWxic19kZWJfYXNzb2MoImF1dGhlbnRpY2F0aW9uIHJlZnVzZWQgYnkgQVBcbiIpOworCQkJc3RhdHVzID0gV0xBTl9TVEFUVVNfVU5LTk9XTl9BVVRIX1RSQU5TQUNUSU9OOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlsYnNfZGViX2Fzc29jKCJhc3NvY2lhdGlvbiBmYWlsdXJlICVkXG4iLCBzdGF0dXMpOworCQkJc3RhdHVzID0gV0xBTl9TVEFUVVNfVU5TUEVDSUZJRURfRkFJTFVSRTsKKwl9CisKKwlsYnNfZGViX2Fzc29jKCJzdGF0dXMgJWQsIGNhcGFiaWxpdHkgMHglMDR4XG4iLCBzdGF0dXMsCisJCSAgICAgIGxlMTZfdG9fY3B1KHJlc3AtPmNhcGFiaWxpdHkpKTsKKworCXJlc3BfaWVfbGVuID0gbGUxNl90b19jcHUocmVzcC0+aGRyLnNpemUpCisJCS0gc2l6ZW9mKHJlc3AtPmhkcikKKwkJLSA2OworCWNmZzgwMjExX2Nvbm5lY3RfcmVzdWx0KHByaXYtPmRldiwKKwkJCQlwcml2LT5hc3NvY19ic3MsCisJCQkJc21lLT5pZSwgc21lLT5pZV9sZW4sCisJCQkJcmVzcC0+aWVidWYsIHJlc3BfaWVfbGVuLAorCQkJCXN0YXR1cywKKwkJCQlHRlBfS0VSTkVMKTsKKworCWlmIChzdGF0dXMgPT0gMCkgeworCQkvKiBUT0RPOiBnZXQgcmlkIG9mIHByaXYtPmNvbm5lY3Rfc3RhdHVzICovCisJCXByaXYtPmNvbm5lY3Rfc3RhdHVzID0gTEJTX0NPTk5FQ1RFRDsKKwkJbmV0aWZfY2Fycmllcl9vbihwcml2LT5kZXYpOworCQlpZiAoIXByaXYtPnR4X3BlbmRpbmdfbGVuKQorCQkJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKHByaXYtPmRldik7CisJfQorCisKK2RvbmU6CisJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfQ0ZHODAyMTEsICJyZXQgJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKworCitzdGF0aWMgaW50IGxic19jZmdfY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpCit7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gd2lwaHlfcHJpdih3aXBoeSk7CisJc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzID0gTlVMTDsKKwlpbnQgcmV0ID0gMDsKKwl1OCBwcmVhbWJsZSA9IFJBRElPX1BSRUFNQkxFX1NIT1JUOworCisJbGJzX2RlYl9lbnRlcihMQlNfREVCX0NGRzgwMjExKTsKKworCWlmIChzbWUtPmJzc2lkKSB7CisJCWJzcyA9IGNmZzgwMjExX2dldF9ic3Mod2lwaHksIHNtZS0+Y2hhbm5lbCwgc21lLT5ic3NpZCwKKwkJCXNtZS0+c3NpZCwgc21lLT5zc2lkX2xlbiwKKwkJCVdMQU5fQ0FQQUJJTElUWV9FU1MsIFdMQU5fQ0FQQUJJTElUWV9FU1MpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIEhlcmUgd2UgaGF2ZSBhbiBpbXBlZGFuY2UgbWlzbWF0Y2guIFRoZSBmaXJtd2FyZSBjb21tYW5kCisJCSAqIENNRF84MDJfMTFfQVNTT0NJQVRFIGFsd2F5cyBuZWVkcyBhIEJTU0lELCBpdCBjYW5ub3QKKwkJICogY29ubmVjdCBvdGhlcndpc2UuIEhvd2V2ZXIsIGZvciB0aGUgY29ubmVjdC1BUEkgb2YKKwkJICogY2ZnODAyMTEgdGhlIGJzc2lkIGlzIHB1cmVseSBvcHRpb25hbC4gV2UgZG9uJ3QgZ2V0IG9uZSwKKwkJICogZXhjZXB0IHRoZSB1c2VyIHNwZWNpZmllcyBvbmUgb24gdGhlICJpdyIgY29tbWFuZCBsaW5lLgorCQkgKgorCQkgKiBJZiB3ZSBkb24ndCBnb3Qgb25lLCB3ZSBjb3VsZCBpbml0aWF0ZSBhIHNjYW4gYW5kIGxvb2sKKwkJICogZm9yIHRoZSBiZXN0IG1hdGNoaW5nIGNmZzgwMjExX2JzcyBlbnRyeS4KKwkJICoKKwkJICogT3IsIGJldHRlciB5ZXQsIG5ldC93aXJlbGVzcy9zbWUuYyBnZXQncyByZXdyaXR0ZW4gaW50bworCQkgKiBzb21ldGhpbmcgbW9yZSBnZW5lcmFsbHkgdXNlZnVsLgorCQkgKi8KKwkJbGJzX3ByX2VycigiVE9ETzogbm8gQlNTIHNwZWNpZmllZFxuIik7CisJCXJldCA9IC1FTk9UU1VQUDsKKwkJZ290byBkb25lOworCX0KKworCisJaWYgKCFic3MpIHsKKwkJbGJzX3ByX2VycigiYXNzaWNhdGU6IGJzcyAlcE0gbm90IGluIHNjYW4gcmVzdWx0c1xuIiwKKwkJCSAgIHNtZS0+YnNzaWQpOworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGRvbmU7CisJfQorCWxic19kZWJfYXNzb2MoInRyeWluZyAlcE0iLCBzbWUtPmJzc2lkKTsKKwlsYnNfZGViX2Fzc29jKCJjaXBoZXIgMHgleCwga2V5IGluZGV4ICVkLCBrZXkgbGVuICVkXG4iLAorCQkgICAgICBzbWUtPmNyeXB0by5jaXBoZXJfZ3JvdXAsCisJCSAgICAgIHNtZS0+a2V5X2lkeCwgc21lLT5rZXlfbGVuKTsKKworCS8qIEFzIHRoaXMgaXMgYSBuZXcgY29ubmVjdGlvbiwgY2xlYXIgbG9jYWxseSBzdG9yZWQgV0VQIGtleXMgKi8KKwlwcml2LT53ZXBfdHhfa2V5ID0gMDsKKwltZW1zZXQocHJpdi0+d2VwX2tleSwgMCwgc2l6ZW9mKHByaXYtPndlcF9rZXkpKTsKKwltZW1zZXQocHJpdi0+d2VwX2tleV9sZW4sIDAsIHNpemVvZihwcml2LT53ZXBfa2V5X2xlbikpOworCisJLyogc2V0L3JlbW92ZSBXRVAga2V5cyAqLworCXN3aXRjaCAoc21lLT5jcnlwdG8uY2lwaGVyX2dyb3VwKSB7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDoKKwkJLyogU3RvcmUgcHJvdmlkZWQgV0VQIGtleXMgaW4gcHJpdi0+ICovCisJCXByaXYtPndlcF90eF9rZXkgPSBzbWUtPmtleV9pZHg7CisJCXByaXYtPndlcF9rZXlfbGVuW3NtZS0+a2V5X2lkeF0gPSBzbWUtPmtleV9sZW47CisJCW1lbWNweShwcml2LT53ZXBfa2V5W3NtZS0+a2V5X2lkeF0sIHNtZS0+a2V5LCBzbWUtPmtleV9sZW4pOworCQkvKiBTZXQgV0VQIGtleXMgYW5kIFdFUCBtb2RlICovCisJCWxic19zZXRfd2VwX2tleXMocHJpdik7CisJCXByaXYtPm1hY19jb250cm9sIHw9IENNRF9BQ1RfTUFDX1dFUF9FTkFCTEU7CisJCWxic19zZXRfbWFjX2NvbnRyb2wocHJpdik7CisJCS8qIE5vIFJTTiBtb2RlIGZvciBXRVAgKi8KKwkJbGJzX2VuYWJsZV9yc24ocHJpdiwgMCk7CisJCWJyZWFrOworCWNhc2UgMDogLyogdGhlcmUncyBubyBXTEFOX0NJUEhFUl9TVUlURV9OT05FIGRlZmluaXRpb24gKi8KKwkJLyoKKwkJICogSWYgd2UgZG9uJ3QgaGF2ZSBubyBXRVAsIG5vIFdQQSBhbmQgbm8gV1BBMiwKKwkJICogd2UgcmVtb3ZlIGFsbCBrZXlzIGxpa2UgaW4gdGhlIFdQQS9XUEEyIHNldHVwLAorCQkgKiB3ZSBqdXN0IGRvbid0IHNldCBSU04uCisJCSAqCisJCSAqIFRoZXJlZm9yZTogZmFsbC10aHJvdWdodAorCQkgKi8KKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVA6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOgorCQkvKiBSZW1vdmUgV0VQIGtleXMgYW5kIFdFUCBtb2RlICovCisJCWxic19yZW1vdmVfd2VwX2tleXMocHJpdik7CisJCXByaXYtPm1hY19jb250cm9sICY9IH5DTURfQUNUX01BQ19XRVBfRU5BQkxFOworCQlsYnNfc2V0X21hY19jb250cm9sKHByaXYpOworCisJCS8qIGNsZWFyIHRoZSBXUEEvV1BBMiBrZXlzICovCisJCWxic19zZXRfa2V5X21hdGVyaWFsKHByaXYsCisJCQlLRVlfVFlQRV9JRF9XRVAsIC8qIGRvZXNuJ3QgbWF0dGVyICovCisJCQlLRVlfSU5GT19XUEFfVU5JQ0FTVCwKKwkJCU5VTEwsIDApOworCQlsYnNfc2V0X2tleV9tYXRlcmlhbChwcml2LAorCQkJS0VZX1RZUEVfSURfV0VQLCAvKiBkb2Vzbid0IG1hdHRlciAqLworCQkJS0VZX0lORk9fV1BBX01DQVNULAorCQkJTlVMTCwgMCk7CisJCS8qIFJTTiBtb2RlIGZvciBXUEEvV1BBMiAqLworCQlsYnNfZW5hYmxlX3Jzbihwcml2LCBzbWUtPmNyeXB0by5jaXBoZXJfZ3JvdXAgIT0gMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWxic19wcl9lcnIoInVuc3VwcG9ydGVkIGNpcGhlciBncm91cCAweCV4XG4iLAorCQkJICAgc21lLT5jcnlwdG8uY2lwaGVyX2dyb3VwKTsKKwkJcmV0ID0gLUVOT1RTVVBQOworCQlnb3RvIGRvbmU7CisJfQorCisJbGJzX3NldF9hdXRodHlwZShwcml2LCBzbWUpOworCWxic19zZXRfcmFkaW8ocHJpdiwgcHJlYW1ibGUsIDEpOworCisJLyogRG8gdGhlIGFjdHVhbCBhc3NvY2lhdGlvbiAqLworCWxic19hc3NvY2lhdGUocHJpdiwgYnNzLCBzbWUpOworCisgZG9uZToKKwlpZiAoYnNzKQorCQljZmc4MDIxMV9wdXRfYnNzKGJzcyk7CisJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfQ0ZHODAyMTEsICJyZXQgJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbGJzX2NmZ19kaXNjb25uZWN0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJdTE2IHJlYXNvbl9jb2RlKQoreworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IHdpcGh5X3ByaXYod2lwaHkpOworCXN0cnVjdCBjbWRfZHNfODAyXzExX2RlYXV0aGVudGljYXRlIGNtZDsKKworCWxic19kZWJfZW50ZXJfYXJncyhMQlNfREVCX0NGRzgwMjExLCAicmVhc29uX2NvZGUgJWQiLCByZWFzb25fY29kZSk7CisKKwkvKiBzdG9yZSBmb3IgbGJzX2NmZ19yZXRfZGlzY29ubmVjdCgpICovCisJcHJpdi0+ZGlzYXNzb2NfcmVhc29uID0gcmVhc29uX2NvZGU7CisKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCWNtZC5oZHIuc2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihjbWQpKTsKKwkvKiBNaWxkbHkgdWdseSB0byB1c2UgYSBsb2NhbGx5IHN0b3JlIG15IG93biBCU1NJRCAuLi4gKi8KKwltZW1jcHkoY21kLm1hY2FkZHIsICZwcml2LT5hc3NvY19ic3MsIEVUSF9BTEVOKTsKKwljbWQucmVhc29uY29kZSA9IGNwdV90b19sZTE2KHJlYXNvbl9jb2RlKTsKKworCWlmIChsYnNfY21kX3dpdGhfcmVzcG9uc2UocHJpdiwgQ01EXzgwMl8xMV9ERUFVVEhFTlRJQ0FURSwgJmNtZCkpCisJCXJldHVybiAtRUZBVUxUOworCisJY2ZnODAyMTFfZGlzY29ubmVjdGVkKHByaXYtPmRldiwKKwkJCXByaXYtPmRpc2Fzc29jX3JlYXNvbiwKKwkJCU5VTEwsIDAsCisJCQlHRlBfS0VSTkVMKTsKKwlwcml2LT5jb25uZWN0X3N0YXR1cyA9IExCU19ESVNDT05ORUNURUQ7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGxic19jZmdfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICB1OCBrZXlfaW5kZXgpCit7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gd2lwaHlfcHJpdih3aXBoeSk7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfQ0ZHODAyMTEpOworCisJaWYgKGtleV9pbmRleCAhPSBwcml2LT53ZXBfdHhfa2V5KSB7CisJCWxic19kZWJfYXNzb2MoInNldF9kZWZhdWx0X2tleTogdG8gJWRcbiIsIGtleV9pbmRleCk7CisJCXByaXYtPndlcF90eF9rZXkgPSBrZXlfaW5kZXg7CisJCWxic19zZXRfd2VwX2tleXMocHJpdik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBsYnNfY2ZnX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgIHU4IGlkeCwgY29uc3QgdTggKm1hY19hZGRyLAorCQkJICAgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKKwl1MTYga2V5X2luZm87CisJdTE2IGtleV90eXBlOworCWludCByZXQgPSAwOworCisJbGJzX2RlYl9lbnRlcihMQlNfREVCX0NGRzgwMjExKTsKKworCWxic19kZWJfYXNzb2MoImFkZF9rZXk6IGNpcGhlciAweCV4LCBtYWNfYWRkciAlcE1cbiIsCisJCSAgICAgIHBhcmFtcy0+Y2lwaGVyLCBtYWNfYWRkcik7CisJbGJzX2RlYl9hc3NvYygiYWRkX2tleToga2V5IGluZGV4ICVkLCBrZXkgbGVuICVkXG4iLAorCQkgICAgICBpZHgsIHBhcmFtcy0+a2V5X2xlbik7CisJaWYgKHBhcmFtcy0+a2V5X2xlbikKKwkJbGJzX2RlYl9oZXgoTEJTX0RFQl9DRkc4MDIxMSwgIktFWSIsCisJCQkgICAgcGFyYW1zLT5rZXksIHBhcmFtcy0+a2V5X2xlbik7CisKKwlsYnNfZGViX2Fzc29jKCJhZGRfa2V5OiBzZXEgbGVuICVkXG4iLCBwYXJhbXMtPnNlcV9sZW4pOworCWlmIChwYXJhbXMtPnNlcV9sZW4pCisJCWxic19kZWJfaGV4KExCU19ERUJfQ0ZHODAyMTEsICJTRVEiLAorCQkJICAgIHBhcmFtcy0+c2VxLCBwYXJhbXMtPnNlcV9sZW4pOworCisJc3dpdGNoIChwYXJhbXMtPmNpcGhlcikgeworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6CisJCS8qIGFjdHVhbGx5IGNvbXBhcmUgaWYgc29tZXRoaW5nIGhhcyBjaGFuZ2VkIC4uLiAqLworCQlpZiAoKHByaXYtPndlcF9rZXlfbGVuW2lkeF0gIT0gcGFyYW1zLT5rZXlfbGVuKSB8fAorCQkJbWVtY21wKHByaXYtPndlcF9rZXlbaWR4XSwKKwkJCSAgICAgICBwYXJhbXMtPmtleSwgcGFyYW1zLT5rZXlfbGVuKSAhPSAwKSB7CisJCQlwcml2LT53ZXBfa2V5X2xlbltpZHhdID0gcGFyYW1zLT5rZXlfbGVuOworCQkJbWVtY3B5KHByaXYtPndlcF9rZXlbaWR4XSwKKwkJCSAgICAgICBwYXJhbXMtPmtleSwgcGFyYW1zLT5rZXlfbGVuKTsKKwkJCWxic19zZXRfd2VwX2tleXMocHJpdik7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9US0lQOgorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDoKKwkJa2V5X2luZm8gPSBLRVlfSU5GT19XUEFfRU5BQkxFRCB8ICgoaWR4ID09IDApCisJCQkJCQkgICA/IEtFWV9JTkZPX1dQQV9VTklDQVNUCisJCQkJCQkgICA6IEtFWV9JTkZPX1dQQV9NQ0FTVCk7CisJCWtleV90eXBlID0gKHBhcmFtcy0+Y2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApCisJCQk/IEtFWV9UWVBFX0lEX1RLSVAKKwkJCTogS0VZX1RZUEVfSURfQUVTOworCQlsYnNfc2V0X2tleV9tYXRlcmlhbChwcml2LAorCQkJCSAgICAga2V5X3R5cGUsCisJCQkJICAgICBrZXlfaW5mbywKKwkJCQkgICAgIHBhcmFtcy0+a2V5LCBwYXJhbXMtPmtleV9sZW4pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlsYnNfcHJfZXJyKCJ1bmhhbmRsZWQgY2lwaGVyIDB4JXhcbiIsIHBhcmFtcy0+Y2lwaGVyKTsKKwkJcmV0ID0gLUVOT1RTVVBQOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBpbnQgbGJzX2NmZ19kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkgICB1OCBrZXlfaW5kZXgsIGNvbnN0IHU4ICptYWNfYWRkcikKK3sKKworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DRkc4MDIxMSk7CisKKwlsYnNfZGViX2Fzc29jKCJkZWxfa2V5OiBrZXlfaWR4ICVkLCBtYWNfYWRkciAlcE1cbiIsCisJCSAgICAgIGtleV9pbmRleCwgbWFjX2FkZHIpOworCisjaWZkZWYgVE9ETworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IHdpcGh5X3ByaXYod2lwaHkpOworCS8qCisJICogSSB0aGluayBjYW4ga2VlcCB0aGlzIGEgTk8tT1AsIGJlY2F1c2U6CisKKwkgKiAtIHdlIGNsZWFyIGFsbCBrZXlzIHdoZW5ldmVyIHdlIGRvIGxic19jZmdfY29ubmVjdCgpIGFueXdheQorCSAqIC0gbmVpdGhlciAiaXciIG5vciAid3BhX3N1cHBsaWNhbnQiIHdvbid0IGNhbGwgdGhpcyBkdXJpbmcKKwkgKiAgIGFuIG9uZ29pbmcgY29ubmVjdGlvbgorCSAqIC0gVE9ETzogYnV0IEkgaGF2ZSB0byBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIHRydWUgd2hlbgorCSAqICAgSSBzZXQgdGhlIEFQIHRvIHBlcmlvZGljIHJlLWtleWluZworCSAqIC0gd2UndmUgbm90IGt6YWxsZWMoKSBzb21ldGhpbmcgd2hlbiB3ZSd2ZSBhZGRlZCBhIGtleSBhdAorCSAqICAgbGJzX2NmZ19jb25uZWN0KCkgb3IgbGJzX2NmZ19hZGRfa2V5KCkuCisJICoKKwkgKiBUaGlzIGNhdXNlcyBsYnNfY2ZnX2RlbF9rZXkoKSBvbmx5IGNhbGxlZCBhdCBkaXNjb25uZWN0IHRpbWUsCisJICogd2hlcmUgd2UnZCBqdXN0IHdhc3RlIHRpbWUgZGVsZXRpbmcgYSBrZXkgdGhhdCBpcyBub3QgZ29pbmcKKwkgKiB0byBiZSB1c2VkIGFueXdheS4KKwkgKi8KKwlpZiAoa2V5X2luZGV4IDwgMyAmJiBwcml2LT53ZXBfa2V5X2xlbltrZXlfaW5kZXhdKSB7CisJCXByaXYtPndlcF9rZXlfbGVuW2tleV9pbmRleF0gPSAwOworCQlsYnNfc2V0X3dlcF9rZXlzKHByaXYpOworCX0KKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR2V0IHN0YXRpb24KKyAqLworCitzdGF0aWMgaW50IGxic19jZmdfZ2V0X3N0YXRpb24oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHU4ICptYWMsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvKQoreworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IHdpcGh5X3ByaXYod2lwaHkpOworCXM4IHNpZ25hbCwgbm9pc2U7CisJaW50IHJldDsKKwlzaXplX3QgaTsKKworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DRkc4MDIxMSk7CisKKwlzaW5mby0+ZmlsbGVkIHw9IFNUQVRJT05fSU5GT19UWF9CWVRFUyB8CisJCQkgU1RBVElPTl9JTkZPX1RYX1BBQ0tFVFMgfAorCQkJIFNUQVRJT05fSU5GT19SWF9CWVRFUyB8CisJCQkgU1RBVElPTl9JTkZPX1JYX1BBQ0tFVFM7CisJc2luZm8tPnR4X2J5dGVzID0gcHJpdi0+ZGV2LT5zdGF0cy50eF9ieXRlczsKKwlzaW5mby0+dHhfcGFja2V0cyA9IHByaXYtPmRldi0+c3RhdHMudHhfcGFja2V0czsKKwlzaW5mby0+cnhfYnl0ZXMgPSBwcml2LT5kZXYtPnN0YXRzLnJ4X2J5dGVzOworCXNpbmZvLT5yeF9wYWNrZXRzID0gcHJpdi0+ZGV2LT5zdGF0cy5yeF9wYWNrZXRzOworCisJLyogR2V0IGN1cnJlbnQgUlNTSSAqLworCXJldCA9IGxic19nZXRfcnNzaShwcml2LCAmc2lnbmFsLCAmbm9pc2UpOworCWlmIChyZXQgPT0gMCkgeworCQlzaW5mby0+c2lnbmFsID0gc2lnbmFsOworCQlzaW5mby0+ZmlsbGVkIHw9IFNUQVRJT05fSU5GT19TSUdOQUw7CisJfQorCisJLyogQ29udmVydCBwcml2LT5jdXJfcmF0ZSBmcm9tIGh3X3ZhbHVlIHRvIE5MODAyMTEgdmFsdWUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsYnNfcmF0ZXMpOyBpKyspIHsKKwkJaWYgKHByaXYtPmN1cl9yYXRlID09IGxic19yYXRlc1tpXS5od192YWx1ZSkgeworCQkJc2luZm8tPnR4cmF0ZS5sZWdhY3kgPSBsYnNfcmF0ZXNbaV0uYml0cmF0ZTsKKwkJCXNpbmZvLT5maWxsZWQgfD0gU1RBVElPTl9JTkZPX1RYX0JJVFJBVEU7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAiU2l0ZSBzdXJ2ZXkiLCBoZXJlIGp1c3QgY3VycmVudCBjaGFubmVsIGFuZCBub2lzZSBsZXZlbAorICovCisKK3N0YXRpYyBpbnQgbGJzX2dldF9zdXJ2ZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwlpbnQgaWR4LCBzdHJ1Y3Qgc3VydmV5X2luZm8gKnN1cnZleSkKK3sKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKKwlzOCBzaWduYWwsIG5vaXNlOworCWludCByZXQ7CisKKwlpZiAoaWR4ICE9IDApCisJCXJldCA9IC1FTk9FTlQ7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfQ0ZHODAyMTEpOworCisJc3VydmV5LT5jaGFubmVsID0gaWVlZTgwMjExX2dldF9jaGFubmVsKHdpcGh5LAorCQlpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3kocHJpdi0+Y2hhbm5lbCkpOworCisJcmV0ID0gbGJzX2dldF9yc3NpKHByaXYsICZzaWduYWwsICZub2lzZSk7CisJaWYgKHJldCA9PSAwKSB7CisJCXN1cnZleS0+ZmlsbGVkID0gU1VSVkVZX0lORk9fTk9JU0VfREJNOworCQlzdXJ2ZXktPm5vaXNlID0gbm9pc2U7CisJfQorCisJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfQ0ZHODAyMTEsICJyZXQgJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENoYW5nZSBpbnRlcmZhY2UKKyAqLworCitzdGF0aWMgaW50IGxic19jaGFuZ2VfaW50ZihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCWVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSwgdTMyICpmbGFncywKKwkgICAgICAgc3RydWN0IHZpZl9wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKKwlpbnQgcmV0ID0gMDsKKworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DRkc4MDIxMSk7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6CisJCXJldCA9IGxic19zZXRfbW9uaXRvcl9tb2RlKHByaXYsIDEpOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCWlmIChwcml2LT53ZGV2LT5pZnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKKwkJCXJldCA9IGxic19zZXRfbW9uaXRvcl9tb2RlKHByaXYsIDApOworCQlpZiAoIXJldCkKKwkJCXJldCA9IGxic19zZXRfc25tcF9taWIocHJpdiwgU05NUF9NSUJfT0lEX0JTU19UWVBFLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJaWYgKHByaXYtPndkZXYtPmlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKQorCQkJcmV0ID0gbGJzX3NldF9tb25pdG9yX21vZGUocHJpdiwgMCk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gbGJzX3NldF9zbm1wX21pYihwcml2LCBTTk1QX01JQl9PSURfQlNTX1RZUEUsIDIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU5PVFNVUFA7CisJfQorCisJaWYgKCFyZXQpCisJCXByaXYtPndkZXYtPmlmdHlwZSA9IHR5cGU7CisKKwlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9DRkc4MDIxMSwgInJldCAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElCU1MgKEFkLUhvYykKKyAqLworCisvKiBUaGUgZmlybXdhcmUgbmVlZHMgdGhlIGZvbGxvd2luZyBiaXRzIG1hc2tlZCBvdXQgb2YgdGhlIGJlYWNvbi1kZXJpdmVkCisgKiBjYXBhYmlsaXR5IGZpZWxkIHdoZW4gYXNzb2NpYXRpbmcvam9pbmluZyB0byBhIEJTUzoKKyAqICA5IChRb1MpLCAxMSAoQVBTRCksIDEyICh1bnVzZWQpLCAxNCAodW51c2VkKSwgMTUgKHVudXNlZCkKKyAqLworI2RlZmluZSBDQVBJTkZPX01BU0sgKH4oMHhkYTAwKSkKKworCitzdGF0aWMgdm9pZCBsYnNfam9pbl9wb3N0KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgc3RydWN0IGNmZzgwMjExX2lic3NfcGFyYW1zICpwYXJhbXMsCisJCQkgIHU4ICpic3NpZCwgdTE2IGNhcGFiaWxpdHkpCit7CisJdTggZmFrZV9pZVsyICsgSUVFRTgwMjExX01BWF9TU0lEX0xFTiArIC8qIHNzaWQgKi8KKwkJICAgMiArIDQgKyAgICAgICAgICAgICAgICAgICAgICAvKiBiYXNpYyByYXRlcyAqLworCQkgICAyICsgMSArICAgICAgICAgICAgICAgICAgICAgIC8qIERTIHBhcmFtZXRlciAqLworCQkgICAyICsgMiArICAgICAgICAgICAgICAgICAgICAgIC8qIGF0aW0gKi8KKwkJICAgMiArIDhdOyAgICAgICAgICAgICAgICAgICAgICAvKiBleHRlbmRlZCByYXRlcyAqLworCXU4ICpmYWtlID0gZmFrZV9pZTsKKworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DRkc4MDIxMSk7CisKKwkvKgorCSAqIEZvciBjZmc4MDIxMV9pbmZvcm1fYnNzLCB3ZSdsbCBuZWVkIGEgZmFrZSBJRSwgYXMgd2UgY2FuJ3QgZ2V0CisJICogdGhlIHJlYWwgSUUgZnJvbSB0aGUgZmlybXdhcmUuIFNvIHdlIGZhYnJpY2F0ZSBhIGZha2UgSUUgYmFzZWQgb24KKwkgKiB3aGF0IHRoZSBmaXJtd2FyZSBhY3R1YWxseSBzZW5kcyAoc25pZmZlZCB3aXRoIHdpcmVzaGFyaykuCisJICovCisJLyogRmFrZSBTU0lEIElFICovCisJKmZha2UrKyA9IFdMQU5fRUlEX1NTSUQ7CisJKmZha2UrKyA9IHBhcmFtcy0+c3NpZF9sZW47CisJbWVtY3B5KGZha2UsIHBhcmFtcy0+c3NpZCwgcGFyYW1zLT5zc2lkX2xlbik7CisJZmFrZSArPSBwYXJhbXMtPnNzaWRfbGVuOworCS8qIEZha2Ugc3VwcG9ydGVkIGJhc2ljIHJhdGVzIElFICovCisJKmZha2UrKyA9IFdMQU5fRUlEX1NVUFBfUkFURVM7CisJKmZha2UrKyA9IDQ7CisJKmZha2UrKyA9IDB4ODI7CisJKmZha2UrKyA9IDB4ODQ7CisJKmZha2UrKyA9IDB4OGI7CisJKmZha2UrKyA9IDB4OTY7CisJLyogRmFrZSBEUyBjaGFubmVsIElFICovCisJKmZha2UrKyA9IFdMQU5fRUlEX0RTX1BBUkFNUzsKKwkqZmFrZSsrID0gMTsKKwkqZmFrZSsrID0gcGFyYW1zLT5jaGFubmVsLT5od192YWx1ZTsKKwkvKiBGYWtlIElCU1MgcGFyYW1zIElFICovCisJKmZha2UrKyA9IFdMQU5fRUlEX0lCU1NfUEFSQU1TOworCSpmYWtlKysgPSAyOworCSpmYWtlKysgPSAwOyAvKiBBVElNPTAgKi8KKwkqZmFrZSsrID0gMDsKKwkvKiBGYWtlIGV4dGVuZGVkIHJhdGVzIElFLCBUT0RPOiBkb24ndCBhZGQgdGhpcyBmb3IgODAyLjExYiBvbmx5LAorCSAqIGJ1dCBJIGRvbid0IGtub3cgaG93IHRoaXMgY291bGQgYmUgY2hlY2tlZCAqLworCSpmYWtlKysgPSBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzsKKwkqZmFrZSsrID0gODsKKwkqZmFrZSsrID0gMHgwYzsKKwkqZmFrZSsrID0gMHgxMjsKKwkqZmFrZSsrID0gMHgxODsKKwkqZmFrZSsrID0gMHgyNDsKKwkqZmFrZSsrID0gMHgzMDsKKwkqZmFrZSsrID0gMHg0ODsKKwkqZmFrZSsrID0gMHg2MDsKKwkqZmFrZSsrID0gMHg2YzsKKwlsYnNfZGViX2hleChMQlNfREVCX0NGRzgwMjExLCAiSUUiLCBmYWtlX2llLCBmYWtlIC0gZmFrZV9pZSk7CisKKwljZmc4MDIxMV9pbmZvcm1fYnNzKHByaXYtPndkZXYtPndpcGh5LAorCQkJICAgIHBhcmFtcy0+Y2hhbm5lbCwKKwkJCSAgICBic3NpZCwKKwkJCSAgICAwLAorCQkJICAgIGNhcGFiaWxpdHksCisJCQkgICAgcGFyYW1zLT5iZWFjb25faW50ZXJ2YWwsCisJCQkgICAgZmFrZV9pZSwgZmFrZSAtIGZha2VfaWUsCisJCQkgICAgMCwgR0ZQX0tFUk5FTCk7CisKKwltZW1jcHkocHJpdi0+d2Rldi0+c3NpZCwgcGFyYW1zLT5zc2lkLCBwYXJhbXMtPnNzaWRfbGVuKTsKKwlwcml2LT53ZGV2LT5zc2lkX2xlbiA9IHBhcmFtcy0+c3NpZF9sZW47CisKKwljZmc4MDIxMV9pYnNzX2pvaW5lZChwcml2LT5kZXYsIGJzc2lkLCBHRlBfS0VSTkVMKTsKKworCS8qIFRPRE86IGNvbnNpZGVyIGRvaW5nIHRoaXMgYXQgTUFDUkVHX0lOVF9DT0RFX0xJTktfU0VOU0VEIHRpbWUgKi8KKwlwcml2LT5jb25uZWN0X3N0YXR1cyA9IExCU19DT05ORUNURUQ7CisJbmV0aWZfY2Fycmllcl9vbihwcml2LT5kZXYpOworCWlmICghcHJpdi0+dHhfcGVuZGluZ19sZW4pCisJCW5ldGlmX3dha2VfcXVldWUocHJpdi0+ZGV2KTsKKworCWxic19kZWJfbGVhdmUoTEJTX0RFQl9DRkc4MDIxMSk7Cit9CisKK3N0YXRpYyBpbnQgbGJzX2lic3Nfam9pbl9leGlzdGluZyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCisJc3RydWN0IGNmZzgwMjExX2lic3NfcGFyYW1zICpwYXJhbXMsCisJc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzKQoreworCWNvbnN0IHU4ICpyYXRlc19laWQgPSBpZWVlODAyMTFfYnNzX2dldF9pZShic3MsIFdMQU5fRUlEX1NVUFBfUkFURVMpOworCXN0cnVjdCBjbWRfZHNfODAyXzExX2FkX2hvY19qb2luIGNtZDsKKwl1OCBwcmVhbWJsZSA9IFJBRElPX1BSRUFNQkxFX1NIT1JUOworCWludCByZXQgPSAwOworCisJbGJzX2RlYl9lbnRlcihMQlNfREVCX0NGRzgwMjExKTsKKworCS8qIFRPRE86IHNldCBwcmVhbWJsZSBiYXNlZCBvbiBzY2FuIHJlc3VsdCAqLworCXJldCA9IGxic19zZXRfcmFkaW8ocHJpdiwgcHJlYW1ibGUsIDEpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBFeGFtcGxlIENNRF84MDJfMTFfQURfSE9DX0pPSU4gY29tbWFuZDoKKwkgKgorCSAqIGNvbW1hbmQgICAgICAgICAyYyAwMCAgICAgICAgIENNRF84MDJfMTFfQURfSE9DX0pPSU4KKwkgKiBzaXplICAgICAgICAgICAgNjUgMDAKKwkgKiBzZXF1ZW5jZSAgICAgICAgeHggeHgKKwkgKiByZXN1bHQgICAgICAgICAgMDAgMDAKKwkgKiBic3NpZCAgICAgICAgICAgMDIgMjcgMjcgOTcgMmYgOTYKKwkgKiBzc2lkICAgICAgICAgICAgNDkgNDIgNTMgNTMgMDAgMDAgMDAgMDAKKwkgKiAgICAgICAgICAgICAgICAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKKwkgKiAgICAgICAgICAgICAgICAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKKwkgKiAgICAgICAgICAgICAgICAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKKwkgKiB0eXBlICAgICAgICAgICAgMDIgICAgICAgICAgICBDTURfQlNTX1RZUEVfSUJTUworCSAqIGJlYWNvbiBwZXJpb2QgICA2NCAwMAorCSAqIGR0aW0gcGVyaW9kICAgICAwMAorCSAqIHRpbWVzdGFtcCAgICAgICAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMAorCSAqIGxvY2FsdGltZSAgICAgICAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMAorCSAqIElFIERTICAgICAgICAgICAwMworCSAqIElFIERTIGxlbiAgICAgICAwMQorCSAqIElFIERTIGNoYW5uZWwgICAwMQorCSAqIHJlc2VydmVlZCAgICAgICAwMCAwMCAwMCAwMAorCSAqIElFIElCU1MgICAgICAgICAwNgorCSAqIElFIElCU1MgbGVuICAgICAwMgorCSAqIElFIElCU1MgYXRpbSAgICAwMCAwMAorCSAqIHJlc2VydmVkICAgICAgICAwMCAwMCAwMCAwMAorCSAqIGNhcGFiaWxpdHkgICAgICAwMiAwMAorCSAqIHJhdGVzICAgICAgICAgICA4MiA4NCA4YiA5NiAwYyAxMiAxOCAyNCAzMCA0OCA2MCA2YyAwMAorCSAqIGZhaWwgdGltZW91dCAgICBmZiAwMAorCSAqIHByb2JlIGRlbGF5ICAgICAwMCAwMAorCSAqLworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLmhkci5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGNtZCkpOworCisJbWVtY3B5KGNtZC5ic3MuYnNzaWQsIGJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkoY21kLmJzcy5zc2lkLCBwYXJhbXMtPnNzaWQsIHBhcmFtcy0+c3NpZF9sZW4pOworCWNtZC5ic3MudHlwZSA9IENNRF9CU1NfVFlQRV9JQlNTOworCWNtZC5ic3MuYmVhY29ucGVyaW9kID0gY3B1X3RvX2xlMTYocGFyYW1zLT5iZWFjb25faW50ZXJ2YWwpOworCWNtZC5ic3MuZHMuaGVhZGVyLmlkID0gV0xBTl9FSURfRFNfUEFSQU1TOworCWNtZC5ic3MuZHMuaGVhZGVyLmxlbiA9IDE7CisJY21kLmJzcy5kcy5jaGFubmVsID0gcGFyYW1zLT5jaGFubmVsLT5od192YWx1ZTsKKwljbWQuYnNzLmlic3MuaGVhZGVyLmlkID0gV0xBTl9FSURfSUJTU19QQVJBTVM7CisJY21kLmJzcy5pYnNzLmhlYWRlci5sZW4gPSAyOworCWNtZC5ic3MuaWJzcy5hdGltd2luZG93ID0gMDsKKwljbWQuYnNzLmNhcGFiaWxpdHkgPSBjcHVfdG9fbGUxNihic3MtPmNhcGFiaWxpdHkgJiBDQVBJTkZPX01BU0spOworCisJLyogc2V0IHJhdGVzIHRvIHRoZSBpbnRlcnNlY3Rpb24gb2Ygb3VyIHJhdGVzIGFuZCB0aGUgcmF0ZXMgaW4gdGhlCisJICAgYnNzICovCisJaWYgKCFyYXRlc19laWQpIHsKKwkJbGJzX2FkZF9yYXRlcyhjbWQuYnNzLnJhdGVzKTsKKwl9IGVsc2UgeworCQlpbnQgaHcsIGk7CisJCXU4IHJhdGVzX21heCA9IHJhdGVzX2VpZFsxXTsKKwkJdTggKnJhdGVzID0gY21kLmJzcy5yYXRlczsKKwkJZm9yIChodyA9IDA7IGh3IDwgQVJSQVlfU0laRShsYnNfcmF0ZXMpOyBodysrKSB7CisJCQl1OCBod19yYXRlID0gbGJzX3JhdGVzW2h3XS5iaXRyYXRlIC8gNTsKKwkJCWZvciAoaSA9IDA7IGkgPCByYXRlc19tYXg7IGkrKykgeworCQkJCWlmIChod19yYXRlID09IChyYXRlc19laWRbaSsyXSAmIDB4N2YpKSB7CisJCQkJCXU4IHJhdGUgPSByYXRlc19laWRbaSsyXTsKKwkJCQkJaWYgKHJhdGUgPT0gMHgwMiB8fCByYXRlID09IDB4MDQgfHwKKwkJCQkJICAgIHJhdGUgPT0gMHgwYiB8fCByYXRlID09IDB4MTYpCisJCQkJCQlyYXRlIHw9IDB4ODA7CisJCQkJCSpyYXRlcysrID0gcmF0ZTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKiBPbmx5IHY4IGFuZCBiZWxvdyBzdXBwb3J0IHNldHRpbmcgdGhpcyAqLworCWlmIChNUlZMX0ZXX01BSk9SX1JFVihwcml2LT5md3JlbGVhc2UpIDw9IDgpIHsKKwkJY21kLmZhaWx0aW1lb3V0ID0gY3B1X3RvX2xlMTYoTVJWRFJWX0FTU09DSUFUSU9OX1RJTUVfT1VUKTsKKwkJY21kLnByb2JlZGVsYXkgPSBjcHVfdG9fbGUxNihDTURfU0NBTl9QUk9CRV9ERUxBWV9USU1FKTsKKwl9CisJcmV0ID0gbGJzX2NtZF93aXRoX3Jlc3BvbnNlKHByaXYsIENNRF84MDJfMTFfQURfSE9DX0pPSU4sICZjbWQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBUaGlzIGlzIGEgc2FtcGxlIHJlc3BvbnNlIHRvIENNRF84MDJfMTFfQURfSE9DX0pPSU46CisJICoKKwkgKiByZXNwb25zZSAgICAgICAgMmMgODAKKwkgKiBzaXplICAgICAgICAgICAgMDkgMDAKKwkgKiBzZXF1ZW5jZSAgICAgICAgeHggeHgKKwkgKiByZXN1bHQgICAgICAgICAgMDAgMDAKKwkgKiByZXNlcnZlZCAgICAgICAgMDAKKwkgKi8KKwlsYnNfam9pbl9wb3N0KHByaXYsIHBhcmFtcywgYnNzLT5ic3NpZCwgYnNzLT5jYXBhYmlsaXR5KTsKKworIG91dDoKKwlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9DRkc4MDIxMSwgInJldCAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworCisKK3N0YXRpYyBpbnQgbGJzX2lic3Nfc3RhcnRfbmV3KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKKwlzdHJ1Y3QgY2ZnODAyMTFfaWJzc19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9hZF9ob2Nfc3RhcnQgY21kOworCXN0cnVjdCBjbWRfZHNfODAyXzExX2FkX2hvY19yZXN1bHQgKnJlc3AgPQorCQkoc3RydWN0IGNtZF9kc184MDJfMTFfYWRfaG9jX3Jlc3VsdCAqKSAmY21kOworCXU4IHByZWFtYmxlID0gUkFESU9fUFJFQU1CTEVfU0hPUlQ7CisJaW50IHJldCA9IDA7CisJdTE2IGNhcGFiaWxpdHk7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfQ0ZHODAyMTEpOworCisJcmV0ID0gbGJzX3NldF9yYWRpbyhwcml2LCBwcmVhbWJsZSwgMSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwkvKgorCSAqIEV4YW1wbGUgQ01EXzgwMl8xMV9BRF9IT0NfU1RBUlQgY29tbWFuZDoKKwkgKgorCSAqIGNvbW1hbmQgICAgICAgICAyYiAwMCAgICAgICAgIENNRF84MDJfMTFfQURfSE9DX1NUQVJUCisJICogc2l6ZSAgICAgICAgICAgIGIxIDAwCisJICogc2VxdWVuY2UgICAgICAgIHh4IHh4CisJICogcmVzdWx0ICAgICAgICAgIDAwIDAwCisJICogc3NpZCAgICAgICAgICAgIDU0IDQ1IDUzIDU0IDAwIDAwIDAwIDAwCisJICogICAgICAgICAgICAgICAgIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCisJICogICAgICAgICAgICAgICAgIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCisJICogICAgICAgICAgICAgICAgIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCisJICogYnNzIHR5cGUgICAgICAgIDAyCisJICogYmVhY29uIHBlcmlvZCAgIDY0IDAwCisJICogZHRpbSBwZXJpb2QgICAgIDAwCisJICogSUUgSUJTUyAgICAgICAgIDA2CisJICogSUUgSUJTUyBsZW4gICAgIDAyCisJICogSUUgSUJTUyBhdGltICAgIDAwIDAwCisJICogcmVzZXJ2ZWQgICAgICAgIDAwIDAwIDAwIDAwCisJICogSUUgRFMgICAgICAgICAgIDAzCisJICogSUUgRFMgbGVuICAgICAgIDAxCisJICogSUUgRFMgY2hhbm5lbCAgIDAxCisJICogcmVzZXJ2ZWQgICAgICAgIDAwIDAwIDAwIDAwCisJICogcHJvYmUgZGVsYXkgICAgIDAwIDAwCisJICogY2FwYWJpbGl0eSAgICAgIDAyIDAwCisJICogcmF0ZXMgICAgICAgICAgIDgyIDg0IDhiIDk2ICAgKGJhc2ljIHJhdGVzIHdpdGggaGF2ZSBiaXQgNyBzZXQpCisJICogICAgICAgICAgICAgICAgIDBjIDEyIDE4IDI0IDMwIDQ4IDYwIDZjCisJICogcGFkZGluZyAgICAgICAgIDEwMCBieXRlcworCSAqLworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLmhkci5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGNtZCkpOworCW1lbWNweShjbWQuc3NpZCwgcGFyYW1zLT5zc2lkLCBwYXJhbXMtPnNzaWRfbGVuKTsKKwljbWQuYnNzdHlwZSA9IENNRF9CU1NfVFlQRV9JQlNTOworCWNtZC5iZWFjb25wZXJpb2QgPSBjcHVfdG9fbGUxNihwYXJhbXMtPmJlYWNvbl9pbnRlcnZhbCk7CisJY21kLmlic3MuaGVhZGVyLmlkID0gV0xBTl9FSURfSUJTU19QQVJBTVM7CisJY21kLmlic3MuaGVhZGVyLmxlbiA9IDI7CisJY21kLmlic3MuYXRpbXdpbmRvdyA9IDA7CisJY21kLmRzLmhlYWRlci5pZCA9IFdMQU5fRUlEX0RTX1BBUkFNUzsKKwljbWQuZHMuaGVhZGVyLmxlbiA9IDE7CisJY21kLmRzLmNoYW5uZWwgPSBwYXJhbXMtPmNoYW5uZWwtPmh3X3ZhbHVlOworCS8qIE9ubHkgdjggYW5kIGJlbG93IHN1cHBvcnQgc2V0dGluZyBwcm9iZSBkZWxheSAqLworCWlmIChNUlZMX0ZXX01BSk9SX1JFVihwcml2LT5md3JlbGVhc2UpIDw9IDgpCisJCWNtZC5wcm9iZWRlbGF5ID0gY3B1X3RvX2xlMTYoQ01EX1NDQU5fUFJPQkVfREVMQVlfVElNRSk7CisJLyogVE9ETzogbWl4IGluIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZICovCisJY2FwYWJpbGl0eSA9IFdMQU5fQ0FQQUJJTElUWV9JQlNTOworCWNtZC5jYXBhYmlsaXR5ID0gY3B1X3RvX2xlMTYoY2FwYWJpbGl0eSk7CisJbGJzX2FkZF9yYXRlcyhjbWQucmF0ZXMpOworCisKKwlyZXQgPSBsYnNfY21kX3dpdGhfcmVzcG9uc2UocHJpdiwgQ01EXzgwMl8xMV9BRF9IT0NfU1RBUlQsICZjbWQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBUaGlzIGlzIGEgc2FtcGxlIHJlc3BvbnNlIHRvIENNRF84MDJfMTFfQURfSE9DX0pPSU46CisJICoKKwkgKiByZXNwb25zZSAgICAgICAgMmIgODAKKwkgKiBzaXplICAgICAgICAgICAgMTQgMDAKKwkgKiBzZXF1ZW5jZSAgICAgICAgeHggeHgKKwkgKiByZXN1bHQgICAgICAgICAgMDAgMDAKKwkgKiByZXNlcnZlZCAgICAgICAgMDAKKwkgKiBic3NpZCAgICAgICAgICAgMDIgMmIgN2IgMGYgODYgMGUKKwkgKi8KKwlsYnNfam9pbl9wb3N0KHByaXYsIHBhcmFtcywgcmVzcC0+YnNzaWQsIGNhcGFiaWxpdHkpOworCisgb3V0OgorCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0NGRzgwMjExLCAicmV0ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBpbnQgbGJzX2pvaW5faWJzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgY2ZnODAyMTFfaWJzc19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3M7CisJREVDTEFSRV9TU0lEX0JVRihzc2lkX2J1Zik7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfQ0ZHODAyMTEpOworCisJaWYgKCFwYXJhbXMtPmNoYW5uZWwpIHsKKwkJcmV0ID0gLUVOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBsYnNfc2V0X2NoYW5uZWwocHJpdiwgcGFyYW1zLT5jaGFubmVsLT5od192YWx1ZSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwkvKiBTZWFyY2ggaWYgc29tZW9uZSBpcyBiZWFjb25pbmcuIFRoaXMgYXNzdW1lcyB0aGF0IHRoZQorCSAqIGJzcyBsaXN0IGlzIHBvcHVsYXRlZCBhbHJlYWR5ICovCisJYnNzID0gY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgcGFyYW1zLT5jaGFubmVsLCBwYXJhbXMtPmJzc2lkLAorCQlwYXJhbXMtPnNzaWQsIHBhcmFtcy0+c3NpZF9sZW4sCisJCVdMQU5fQ0FQQUJJTElUWV9JQlNTLCBXTEFOX0NBUEFCSUxJVFlfSUJTUyk7CisKKwlpZiAoYnNzKSB7CisJCXJldCA9IGxic19pYnNzX2pvaW5fZXhpc3RpbmcocHJpdiwgcGFyYW1zLCBic3MpOworCQljZmc4MDIxMV9wdXRfYnNzKGJzcyk7CisJfSBlbHNlCisJCXJldCA9IGxic19pYnNzX3N0YXJ0X25ldyhwcml2LCBwYXJhbXMpOworCisKKyBvdXQ6CisJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfQ0ZHODAyMTEsICJyZXQgJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIGludCBsYnNfbGVhdmVfaWJzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IHdpcGh5X3ByaXYod2lwaHkpOworCXN0cnVjdCBjbWRfZHNfODAyXzExX2FkX2hvY19zdG9wIGNtZDsKKwlpbnQgcmV0ID0gMDsKKworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DRkc4MDIxMSk7CisKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCWNtZC5oZHIuc2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihjbWQpKTsKKwlyZXQgPSBsYnNfY21kX3dpdGhfcmVzcG9uc2UocHJpdiwgQ01EXzgwMl8xMV9BRF9IT0NfU1RPUCwgJmNtZCk7CisKKwkvKiBUT0RPOiBjb25zaWRlciBkb2luZyB0aGlzIGF0IE1BQ1JFR19JTlRfQ09ERV9BREhPQ19CQ05fTE9TVCB0aW1lICovCisJbGJzX21hY19ldmVudF9kaXNjb25uZWN0ZWQocHJpdik7CisKKwlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9DRkc4MDIxMSwgInJldCAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSW5pdGlhbGl6YXRpb24KKyAqLworCiBzdGF0aWMgc3RydWN0IGNmZzgwMjExX29wcyBsYnNfY2ZnODAyMTFfb3BzID0gewogCS5zZXRfY2hhbm5lbCA9IGxic19jZmdfc2V0X2NoYW5uZWwsCisJLnNjYW4gPSBsYnNfY2ZnX3NjYW4sCisJLmNvbm5lY3QgPSBsYnNfY2ZnX2Nvbm5lY3QsCisJLmRpc2Nvbm5lY3QgPSBsYnNfY2ZnX2Rpc2Nvbm5lY3QsCisJLmFkZF9rZXkgPSBsYnNfY2ZnX2FkZF9rZXksCisJLmRlbF9rZXkgPSBsYnNfY2ZnX2RlbF9rZXksCisJLnNldF9kZWZhdWx0X2tleSA9IGxic19jZmdfc2V0X2RlZmF1bHRfa2V5LAorCS5nZXRfc3RhdGlvbiA9IGxic19jZmdfZ2V0X3N0YXRpb24sCisJLmR1bXBfc3VydmV5ID0gbGJzX2dldF9zdXJ2ZXksCisJLmNoYW5nZV92aXJ0dWFsX2ludGYgPSBsYnNfY2hhbmdlX2ludGYsCisJLmpvaW5faWJzcyA9IGxic19qb2luX2lic3MsCisJLmxlYXZlX2lic3MgPSBsYnNfbGVhdmVfaWJzcywKIH07CiAKIApAQCAtMTQyLDYgKzE5MDAsMzYgQEAKIH0KIAogCitzdGF0aWMgdm9pZCBsYnNfY2ZnX3NldF9yZWd1bGF0b3J5X2hpbnQoc3RydWN0IGxic19wcml2YXRlICpwcml2KQoreworCXN0cnVjdCByZWdpb25fY29kZV9tYXBwaW5nIHsKKwkJY29uc3QgY2hhciAqY247CisJCWludCBjb2RlOworCX07CisKKwkvKiBTZWN0aW9uIDUuMTcuMiAqLworCXN0YXRpYyBzdHJ1Y3QgcmVnaW9uX2NvZGVfbWFwcGluZyByZWdtYXBbXSA9IHsKKwkJeyJVUyAiLCAweDEwfSwgLyogVVMgRkNDICovCisJCXsiQ0EgIiwgMHgyMH0sIC8qIENhbmFkYSAqLworCQl7IkVVICIsIDB4MzB9LCAvKiBFVFNJICAgKi8KKwkJeyJFUyAiLCAweDMxfSwgLyogU3BhaW4gICovCisJCXsiRlIgIiwgMHgzMn0sIC8qIEZyYW5jZSAqLworCQl7IkpQICIsIDB4NDB9LCAvKiBKYXBhbiAgKi8KKwl9OworCXNpemVfdCBpOworCisJbGJzX2RlYl9lbnRlcihMQlNfREVCX0NGRzgwMjExKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZ21hcCk7IGkrKykKKwkJaWYgKHJlZ21hcFtpXS5jb2RlID09IHByaXYtPnJlZ2lvbmNvZGUpIHsKKwkJCXJlZ3VsYXRvcnlfaGludChwcml2LT53ZGV2LT53aXBoeSwgcmVnbWFwW2ldLmNuKTsKKwkJCWJyZWFrOworCQl9CisKKwlsYnNfZGViX2xlYXZlKExCU19ERUJfQ0ZHODAyMTEpOworfQorCisKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGdldCdzIGNhbGxlZCBhZnRlciBsYnNfc2V0dXBfZmlybXdhcmUoKSBkZXRlcm1pbmVkIHRoZQogICogZmlybXdhcmUgY2FwYWJpdGllcy4gU28gd2UgY2FuIHNldHVwIHRoZSB3aXBoeSBhY2NvcmRpbmcgdG8gb3VyCkBAIC0xNTcsMTAgKzE5NDUsMTIgQEAKIAl3ZGV2LT53aXBoeS0+bWF4X3NjYW5fc3NpZHMgPSAxOwogCXdkZXYtPndpcGh5LT5zaWduYWxfdHlwZSA9IENGRzgwMjExX1NJR05BTF9UWVBFX01CTTsKIAotCS8qIFRPRE86IEJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7ICovCi0Jd2Rldi0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKTsKKwl3ZGV2LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0KKwkJCUJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8CisJCQlCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpOworCWlmIChsYnNfcnRhcF9zdXBwb3J0ZWQocHJpdikpCisJCXdkZXYtPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgfD0gQklUKE5MODAyMTFfSUZUWVBFX01PTklUT1IpOwogCi0JLyogVE9ETzogaG9ub3IgcHJpdi0+cmVnaW9uY29kZSAqLwogCXdkZXYtPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZsYnNfYmFuZF8yZ2h6OwogCiAJLyoKQEAgLTE2OSw2ICsxOTU5LDcgQEAKIAkgKi8KIAl3ZGV2LT53aXBoeS0+Y2lwaGVyX3N1aXRlcyA9IGNpcGhlcl9zdWl0ZXM7CiAJd2Rldi0+d2lwaHktPm5fY2lwaGVyX3N1aXRlcyA9IEFSUkFZX1NJWkUoY2lwaGVyX3N1aXRlcyk7CisJd2Rldi0+d2lwaHktPnJlZ19ub3RpZmllciA9IGxic19yZWdfbm90aWZpZXI7CiAKIAlyZXQgPSB3aXBoeV9yZWdpc3Rlcih3ZGV2LT53aXBoeSk7CiAJaWYgKHJldCA8IDApCkBAIC0xODAsMTAgKzE5NzEsMzYgQEAKIAlpZiAocmV0KQogCQlsYnNfcHJfZXJyKCJjYW5ub3QgcmVnaXN0ZXIgbmV0d29yayBkZXZpY2VcbiIpOwogCisJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPnNjYW5fd29yaywgbGJzX3NjYW5fd29ya2VyKTsKKworCWxic19jZmdfc2V0X3JlZ3VsYXRvcnlfaGludChwcml2KTsKKwogCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0NGRzgwMjExLCAicmV0ICVkIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCitpbnQgbGJzX3JlZ19ub3RpZmllcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0KQoreworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IHdpcGh5X3ByaXYod2lwaHkpOworCWludCByZXQ7CisKKwlsYnNfZGViX2VudGVyX2FyZ3MoTEJTX0RFQl9DRkc4MDIxMSwgImNmZzgwMjExIHJlZ3VsYXRvcnkgZG9tYWluICIKKwkJCSJjYWxsYmFjayBmb3IgZG9tYWluICVjJWNcbiIsIHJlcXVlc3QtPmFscGhhMlswXSwKKwkJCXJlcXVlc3QtPmFscGhhMlsxXSk7CisKKwlyZXQgPSBsYnNfc2V0XzExZF9kb21haW5faW5mbyhwcml2LCByZXF1ZXN0LCB3aXBoeS0+YmFuZHMpOworCisJbGJzX2RlYl9sZWF2ZShMQlNfREVCX0NGRzgwMjExKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGxic19zY2FuX2RlaW5pdChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCit7CisJbGJzX2RlYl9lbnRlcihMQlNfREVCX0NGRzgwMjExKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPnNjYW5fd29yayk7Cit9CisKIAogdm9pZCBsYnNfY2ZnX2ZyZWUoc3RydWN0IGxic19wcml2YXRlICpwcml2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY2ZnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jZmcuaAppbmRleCBlMDlhMTkzLi40ZjQ2YmI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jZmcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jZmcuaApAQCAtMSwxNiArMSwyMSBAQAogI2lmbmRlZiBfX0xCU19DRkc4MDIxMV9IX18KICNkZWZpbmUgX19MQlNfQ0ZHODAyMTFfSF9fCiAKLSNpbmNsdWRlICJkZXYuaCIKK3N0cnVjdCBkZXZpY2U7CitzdHJ1Y3QgbGJzX3ByaXZhdGU7CitzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0Oworc3RydWN0IHdpcGh5OwogCiBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICpsYnNfY2ZnX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldik7CiBpbnQgbGJzX2NmZ19yZWdpc3RlcihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpOwogdm9pZCBsYnNfY2ZnX2ZyZWUoc3RydWN0IGxic19wcml2YXRlICpwcml2KTsKIAotaW50IGxic19zZW5kX3NwZWNpZmljX3NzaWRfc2NhbihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHU4ICpzc2lkLAotCXU4IHNzaWRfbGVuKTsKLWludCBsYnNfc2Nhbl9uZXR3b3JrcyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGludCBmdWxsX3NjYW4pOwotdm9pZCBsYnNfY2ZnX3NjYW5fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitpbnQgbGJzX3JlZ19ub3RpZmllcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0KTsKIAordm9pZCBsYnNfc2VuZF9kaXNjb25uZWN0X25vdGlmaWNhdGlvbihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpOwordm9pZCBsYnNfc2VuZF9taWNfZmFpbHVyZWV2ZW50KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdTMyIGV2ZW50KTsKKwordm9pZCBsYnNfc2Nhbl9kZWluaXQoc3RydWN0IGxic19wcml2YXRlICpwcml2KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCmluZGV4IGNkYjliOTYuLjcwNzQ1OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCkBAIC02LDE4ICs2LDE0IEBACiAjaW5jbHVkZSA8bGludXgva2ZpZm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KIAotI2luY2x1ZGUgImhvc3QuaCIKICNpbmNsdWRlICJkZWNsLmgiCi0jaW5jbHVkZSAiZGVmcy5oIgotI2luY2x1ZGUgImRldi5oIgotI2luY2x1ZGUgImFzc29jLmgiCi0jaW5jbHVkZSAid2V4dC5oIgotI2luY2x1ZGUgInNjYW4uaCIKKyNpbmNsdWRlICJjZmcuaCIKICNpbmNsdWRlICJjbWQuaCIKIAotCi1zdGF0aWMgc3RydWN0IGNtZF9jdHJsX25vZGUgKmxic19nZXRfY21kX2N0cmxfbm9kZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpOworI2RlZmluZSBDQUxfTkYobmYpCQkoKHMzMikoLShzMzIpKG5mKSkpCisjZGVmaW5lIENBTF9SU1NJKHNuciwgbmYpCSgoczMyKSgoczMyKShzbnIpICsgQ0FMX05GKG5mKSkpCiAKIC8qKgogICogIEBicmllZiBTaW1wbGUgY2FsbGJhY2sgdGhhdCBjb3BpZXMgcmVzcG9uc2UgYmFjayBpbnRvIGNvbW1hbmQKQEAgLTcwLDYgKzY2LDggQEAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgQ01EXzgwMl8xMV9SU1NJOgogCQlyZXR1cm4gMTsKKwljYXNlIENNRF84MDJfMTFfSE9TVF9TTEVFUF9DRkc6CisJCXJldHVybiAxOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTc3LDMwICs3NSw2IEBACiB9CiAKIC8qKgotICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgY29tbWFuZCBpcyBhbGxvd2VkLgotICoKLSAqICBAcGFyYW0gcHJpdiAgICAgICAgIEEgcG9pbnRlciB0byBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcmV0dXJuICAgICAgICAgICAgIGFsbG93ZWQgb3Igbm90IGFsbG93ZWQuCi0gKi8KLQotc3RhdGljIGludCBsYnNfaXNfY21kX2FsbG93ZWQoc3RydWN0IGxic19wcml2YXRlICpwcml2KQotewotCWludCByZXQgPSAxOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0NNRCk7Ci0KLQlpZiAoIXByaXYtPmlzX2F1dG9fZGVlcF9zbGVlcF9lbmFibGVkKSB7Ci0JCWlmIChwcml2LT5pc19kZWVwX3NsZWVwKSB7Ci0JCQlsYnNfZGViX2NtZCgiY29tbWFuZCBub3QgYWxsb3dlZCBpbiBkZWVwIHNsZWVwXG4iKTsKLQkJCXJldCA9IDA7Ci0JCX0KLQl9Ci0KLQlsYnNfZGViX2xlYXZlKExCU19ERUJfQ01EKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKICAqICBAYnJpZWYgVXBkYXRlcyB0aGUgaGFyZHdhcmUgZGV0YWlscyBsaWtlIE1BQyBhZGRyZXNzIGFuZCByZWd1bGF0b3J5IHJlZ2lvbgogICoKICAqICBAcGFyYW0gcHJpdiAgICAJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKQEAgLTE3NSwxNiArMTQ5LDI4IEBACiAJaWYgKHByaXYtPm1lc2hfZGV2KQogCQltZW1jcHkocHJpdi0+bWVzaF9kZXYtPmRldl9hZGRyLCBwcml2LT5jdXJyZW50X2FkZHIsIEVUSF9BTEVOKTsKIAotCWlmIChsYnNfc2V0X3JlZ2lvbnRhYmxlKHByaXYsIHByaXYtPnJlZ2lvbmNvZGUsIDApKSB7Ci0JCXJldCA9IC0xOwotCQlnb3RvIG91dDsKLQl9Ci0KIG91dDoKIAlsYnNfZGViX2xlYXZlKExCU19ERUJfQ01EKTsKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGxic19yZXRfaG9zdF9zbGVlcF9jZmcoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1bnNpZ25lZCBsb25nIGR1bW15LAorCQkJc3RydWN0IGNtZF9oZWFkZXIgKnJlc3ApCit7CisJbGJzX2RlYl9lbnRlcihMQlNfREVCX0NNRCk7CisJaWYgKHByaXYtPmlzX2hvc3Rfc2xlZXBfYWN0aXZhdGVkKSB7CisJCXByaXYtPmlzX2hvc3Rfc2xlZXBfY29uZmlndXJlZCA9IDA7CisJCWlmIChwcml2LT5wc3N0YXRlID09IFBTX1NUQVRFX0ZVTExfUE9XRVIpIHsKKwkJCXByaXYtPmlzX2hvc3Rfc2xlZXBfYWN0aXZhdGVkID0gMDsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+aG9zdF9zbGVlcF9xKTsKKwkJfQorCX0gZWxzZSB7CisJCXByaXYtPmlzX2hvc3Rfc2xlZXBfY29uZmlndXJlZCA9IDE7CisJfQorCWxic19kZWJfbGVhdmUoTEJTX0RFQl9DTUQpOworCXJldHVybiAwOworfQorCiBpbnQgbGJzX2hvc3Rfc2xlZXBfY2ZnKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdWludDMyX3QgY3JpdGVyaWEsCiAJCXN0cnVjdCB3b2xfY29uZmlnICpwX3dvbF9jb25maWcpCiB7CkBAIC0yMDIsMTIgKzE4OCwxMSBAQAogCWVsc2UKIAkJY21kX2NvbmZpZy53b2xfY29uZi5hY3Rpb24gPSBDTURfQUNUX0FDVElPTl9OT05FOwogCi0JcmV0ID0gbGJzX2NtZF93aXRoX3Jlc3BvbnNlKHByaXYsIENNRF84MDJfMTFfSE9TVF9TTEVFUF9DRkcsICZjbWRfY29uZmlnKTsKKwlyZXQgPSBfX2xic19jbWQocHJpdiwgQ01EXzgwMl8xMV9IT1NUX1NMRUVQX0NGRywgJmNtZF9jb25maWcuaGRyLAorCQkJbGUxNl90b19jcHUoY21kX2NvbmZpZy5oZHIuc2l6ZSksCisJCQlsYnNfcmV0X2hvc3Rfc2xlZXBfY2ZnLCAwKTsKIAlpZiAoIXJldCkgewotCQlpZiAoY3JpdGVyaWEpIHsKLQkJCWxic19kZWJfY21kKCJTZXQgV09MIGNyaXRlcmlhIHRvICV4XG4iLCBjcml0ZXJpYSk7Ci0JCQlwcml2LT53b2xfY3JpdGVyaWEgPSBjcml0ZXJpYTsKLQkJfSBlbHNlCisJCWlmIChwX3dvbF9jb25maWcpCiAJCQltZW1jcHkoKHVpbnQ4X3QgKikgcF93b2xfY29uZmlnLAogCQkJCQkodWludDhfdCAqKSZjbWRfY29uZmlnLndvbF9jb25mLAogCQkJCQlzaXplb2Yoc3RydWN0IHdvbF9jb25maWcpKTsKQEAgLTIxOSw0MiArMjA0LDQ5IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChsYnNfaG9zdF9zbGVlcF9jZmcpOwogCi1zdGF0aWMgaW50IGxic19jbWRfODAyXzExX3BzX21vZGUoc3RydWN0IGNtZF9kc19jb21tYW5kICpjbWQsCi0JCQkJICAgdTE2IGNtZF9hY3Rpb24pCisvKioKKyAqICBAYnJpZWYgU2V0cyB0aGUgUG93ZXIgU2F2ZSBtb2RlCisgKgorICogIEBwYXJhbSBwcml2ICAgIAlBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQorICogIEBwYXJhbSBjbWRfYWN0aW9uCVRoZSBQb3dlciBTYXZlIG9wZXJhdGlvbiAoUFNfTU9ERV9BQ1RJT05fRU5URVJfUFMgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIFBTX01PREVfQUNUSU9OX0VYSVRfUFMpCisgKiAgQHBhcmFtIGJsb2NrCVdoZXRoZXIgdG8gYmxvY2sgb24gYSByZXNwb25zZSBvciBub3QKKyAqCisgKiAgQHJldHVybiAJICAgCTAgb24gc3VjY2VzcywgZXJyb3Igb24gZmFpbHVyZQorICovCitpbnQgbGJzX3NldF9wc19tb2RlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdTE2IGNtZF9hY3Rpb24sIGJvb2wgYmxvY2spCiB7Ci0Jc3RydWN0IGNtZF9kc184MDJfMTFfcHNfbW9kZSAqcHNtID0gJmNtZC0+cGFyYW1zLnBzbW9kZTsKKwlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9wc19tb2RlIGNtZDsKKwlpbnQgcmV0ID0gMDsKIAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DTUQpOwogCi0JY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoQ01EXzgwMl8xMV9QU19NT0RFKTsKLQljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGNtZF9kc184MDJfMTFfcHNfbW9kZSkgKwotCQkJCXNpemVvZihzdHJ1Y3QgY21kX2hlYWRlcikpOwotCXBzbS0+YWN0aW9uID0gY3B1X3RvX2xlMTYoY21kX2FjdGlvbik7Ci0JcHNtLT5tdWx0aXBsZWR0aW0gPSAwOwotCXN3aXRjaCAoY21kX2FjdGlvbikgewotCWNhc2UgQ01EX1NVQkNNRF9FTlRFUl9QUzoKLQkJbGJzX2RlYl9jbWQoIlBTIGNvbW1hbmQ6IiAiU3ViQ29kZS0gRW50ZXIgUFNcbiIpOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLmhkci5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGNtZCkpOworCWNtZC5hY3Rpb24gPSBjcHVfdG9fbGUxNihjbWRfYWN0aW9uKTsKIAotCQlwc20tPmxvY2FsbGlzdGVuaW50ZXJ2YWwgPSAwOwotCQlwc20tPm51bGxwa3RpbnRlcnZhbCA9IDA7Ci0JCXBzbS0+bXVsdGlwbGVkdGltID0KLQkJICAgIGNwdV90b19sZTE2KE1SVkRSVl9ERUZBVUxUX01VTFRJUExFX0RUSU0pOwotCQlicmVhazsKLQotCWNhc2UgQ01EX1NVQkNNRF9FWElUX1BTOgotCQlsYnNfZGViX2NtZCgiUFMgY29tbWFuZDoiICJTdWJDb2RlLSBFeGl0IFBTXG4iKTsKLQkJYnJlYWs7Ci0KLQljYXNlIENNRF9TVUJDTURfU0xFRVBfQ09ORklSTUVEOgotCQlsYnNfZGViX2NtZCgiUFMgY29tbWFuZDogU3ViQ29kZS0gc2xlZXAgY29uZmlybVxuIik7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7CisJaWYgKGNtZF9hY3Rpb24gPT0gUFNfTU9ERV9BQ1RJT05fRU5URVJfUFMpIHsKKwkJbGJzX2RlYl9jbWQoIlBTX01PREU6IGFjdGlvbiBFTlRFUl9QU1xuIik7CisJCWNtZC5tdWx0aXBsZWR0aW0gPSBjcHVfdG9fbGUxNigxKTsgIC8qIERlZmF1bHQgRFRJTSBtdWx0aXBsZSAqLworCX0gZWxzZSBpZiAoY21kX2FjdGlvbiA9PSBQU19NT0RFX0FDVElPTl9FWElUX1BTKSB7CisJCWxic19kZWJfY21kKCJQU19NT0RFOiBhY3Rpb24gRVhJVF9QU1xuIik7CisJfSBlbHNlIHsKKwkJLyogV2UgZG9uJ3QgaGFuZGxlIENPTkZJUk1fU0xFRVAgaGVyZSBiZWNhdXNlIGl0IG5lZWRzIHRvCisJCSAqIGJlIGZhc3RwYXRoZWQgdG8gdGhlIGZpcm13YXJlLgorCQkgKi8KKwkJbGJzX2RlYl9jbWQoIlBTX01PREU6IHVua25vd24gYWN0aW9uIDB4JVhcbiIsIGNtZF9hY3Rpb24pOworCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CiAJfQogCi0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX0NNRCk7Ci0JcmV0dXJuIDA7CisJaWYgKGJsb2NrKQorCQlyZXQgPSBsYnNfY21kX3dpdGhfcmVzcG9uc2UocHJpdiwgQ01EXzgwMl8xMV9QU19NT0RFLCAmY21kKTsKKwllbHNlCisJCWxic19jbWRfYXN5bmMocHJpdiwgQ01EXzgwMl8xMV9QU19NT0RFLCAmY21kLmhkciwgc2l6ZW9mIChjbWQpKTsKKworb3V0OgorCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0NNRCwgInJldCAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogaW50IGxic19jbWRfODAyXzExX3NsZWVwX3BhcmFtcyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHVpbnQxNl90IGNtZF9hY3Rpb24sCkBAIC0zNTMsNiArMzQ1LDY1IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBsYnNfcmV0X2hvc3Rfc2xlZXBfYWN0aXZhdGUoc3RydWN0IGxic19wcml2YXRlICpwcml2LAorCQl1bnNpZ25lZCBsb25nIGR1bW15LAorCQlzdHJ1Y3QgY21kX2hlYWRlciAqY21kKQoreworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9GVyk7CisJcHJpdi0+aXNfaG9zdF9zbGVlcF9hY3RpdmF0ZWQgPSAxOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+aG9zdF9zbGVlcF9xKTsKKwlsYnNfZGViX2xlYXZlKExCU19ERUJfRlcpOworCXJldHVybiAwOworfQorCitpbnQgbGJzX3NldF9ob3N0X3NsZWVwKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgaW50IGhvc3Rfc2xlZXApCit7CisJc3RydWN0IGNtZF9oZWFkZXIgY21kOworCWludCByZXQgPSAwOworCXVpbnQzMl90IGNyaXRlcmlhID0gRUhTX1JFTU9WRV9XQUtFVVA7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfQ01EKTsKKworCWlmIChob3N0X3NsZWVwKSB7CisJCWlmIChwcml2LT5pc19ob3N0X3NsZWVwX2FjdGl2YXRlZCAhPSAxKSB7CisJCQltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCQkJcmV0ID0gbGJzX2hvc3Rfc2xlZXBfY2ZnKHByaXYsIHByaXYtPndvbF9jcml0ZXJpYSwKKwkJCQkJKHN0cnVjdCB3b2xfY29uZmlnICopTlVMTCk7CisJCQlpZiAocmV0KSB7CisJCQkJbGJzX3ByX2luZm8oIkhvc3Qgc2xlZXAgY29uZmlndXJhdGlvbiBmYWlsZWQ6ICIKKwkJCQkJCSIlZFxuIiwgcmV0KTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQkJaWYgKHByaXYtPnBzc3RhdGUgPT0gUFNfU1RBVEVfRlVMTF9QT1dFUikgeworCQkJCXJldCA9IF9fbGJzX2NtZChwcml2LAorCQkJCQkJQ01EXzgwMl8xMV9IT1NUX1NMRUVQX0FDVElWQVRFLAorCQkJCQkJJmNtZCwKKwkJCQkJCXNpemVvZihjbWQpLAorCQkJCQkJbGJzX3JldF9ob3N0X3NsZWVwX2FjdGl2YXRlLCAwKTsKKwkJCQlpZiAocmV0KQorCQkJCQlsYnNfcHJfaW5mbygiSE9TVF9TTEVFUF9BQ1RJVkFURSAiCisJCQkJCQkJImZhaWxlZDogJWRcbiIsIHJldCk7CisJCQl9CisKKwkJCWlmICghd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoCisJCQkJCQlwcml2LT5ob3N0X3NsZWVwX3EsCisJCQkJCQlwcml2LT5pc19ob3N0X3NsZWVwX2FjdGl2YXRlZCwKKwkJCQkJCSgxMCAqIEhaKSkpIHsKKwkJCQlsYnNfcHJfZXJyKCJob3N0X3NsZWVwX3E6IHRpbWVyIGV4cGlyZWRcbiIpOworCQkJCXJldCA9IC0xOworCQkJfQorCQl9IGVsc2UgeworCQkJbGJzX3ByX2VycigiaG9zdCBzbGVlcDogYWxyZWFkeSBlbmFibGVkXG4iKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChwcml2LT5pc19ob3N0X3NsZWVwX2FjdGl2YXRlZCkKKwkJCXJldCA9IGxic19ob3N0X3NsZWVwX2NmZyhwcml2LCBjcml0ZXJpYSwKKwkJCQkJKHN0cnVjdCB3b2xfY29uZmlnICopTlVMTCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwogLyoqCiAgKiAgQGJyaWVmIFNldCBhbiBTTk1QIE1JQiB2YWx1ZQogICoKQEAgLTUwOSwyMyArNTYwLDM1IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBsYnNfY21kXzgwMl8xMV9tb25pdG9yX21vZGUoc3RydWN0IGNtZF9kc19jb21tYW5kICpjbWQsCi0JCQkJICAgICAgdTE2IGNtZF9hY3Rpb24sIHZvaWQgKnBkYXRhX2J1ZikKKy8qKgorICogIEBicmllZiBFbmFibGUgb3IgZGlzYWJsZSBtb25pdG9yIG1vZGUgKG9ubHkgaW1wbGVtZW50ZWQgb24gT0xQQyB1c2I4Mzg4IEZXKQorICoKKyAqICBAcGFyYW0gcHJpdiAgICAgICAgQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqICBAcGFyYW0gZW5hYmxlICAgICAgMSB0byBlbmFibGUgbW9uaXRvciBtb2RlLCAwIHRvIGRpc2FibGUKKyAqCisgKiAgQHJldHVybiAgICAgICAgICAgIDAgb24gc3VjY2VzcywgZXJyb3Igb24gZmFpbHVyZQorICovCitpbnQgbGJzX3NldF9tb25pdG9yX21vZGUoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBpbnQgZW5hYmxlKQogewotCXN0cnVjdCBjbWRfZHNfODAyXzExX21vbml0b3JfbW9kZSAqbW9uaXRvciA9ICZjbWQtPnBhcmFtcy5tb25pdG9yOworCXN0cnVjdCBjbWRfZHNfODAyXzExX21vbml0b3JfbW9kZSBjbWQ7CisJaW50IHJldDsKIAotCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KENNRF84MDJfMTFfTU9OSVRPUl9NT0RFKTsKLQljbWQtPnNpemUgPQotCSAgICBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGNtZF9kc184MDJfMTFfbW9uaXRvcl9tb2RlKSArCi0JCQkgICAgIHNpemVvZihzdHJ1Y3QgY21kX2hlYWRlcikpOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLmhkci5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGNtZCkpOworCWNtZC5hY3Rpb24gPSBjcHVfdG9fbGUxNihDTURfQUNUX1NFVCk7CisJaWYgKGVuYWJsZSkKKwkJY21kLm1vZGUgPSBjcHVfdG9fbGUxNigweDEpOwogCi0JbW9uaXRvci0+YWN0aW9uID0gY3B1X3RvX2xlMTYoY21kX2FjdGlvbik7Ci0JaWYgKGNtZF9hY3Rpb24gPT0gQ01EX0FDVF9TRVQpIHsKLQkJbW9uaXRvci0+bW9kZSA9Ci0JCSAgICBjcHVfdG9fbGUxNigodTE2KSAoKih1MzIgKikgcGRhdGFfYnVmKSk7CisJbGJzX2RlYl9jbWQoIlNFVF9NT05JVE9SX01PREU6ICVkXG4iLCBlbmFibGUpOworCisJcmV0ID0gbGJzX2NtZF93aXRoX3Jlc3BvbnNlKHByaXYsIENNRF84MDJfMTFfTU9OSVRPUl9NT0RFLCAmY21kKTsKKwlpZiAocmV0ID09IDApIHsKKwkJcHJpdi0+ZGV2LT50eXBlID0gZW5hYmxlID8gQVJQSFJEX0lFRUU4MDIxMV9SQURJT1RBUCA6CisJCQkJCQlBUlBIUkRfRVRIRVI7CiAJfQogCi0JcmV0dXJuIDA7CisJbGJzX2RlYl9sZWF2ZShMQlNfREVCX0NNRCk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC02MTAsNzggKzY3MywyNDIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGxic19jbWRfcmVnX2FjY2VzcyhzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKmNtZHB0ciwKLQkJCSAgICAgICB1OCBjbWRfYWN0aW9uLCB2b2lkICpwZGF0YV9idWYpCisvKioKKyAqICBAYnJpZWYgR2V0IGN1cnJlbnQgUlNTSSBhbmQgbm9pc2UgZmxvb3IKKyAqCisgKiAgQHBhcmFtIHByaXYJCUEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKiAgQHBhcmFtIHJzc2kJCU9uIHN1Y2Nlc3NmdWwgcmV0dXJuLCBzaWduYWwgbGV2ZWwgaW4gbUJtCisgKgorICogIEByZXR1cm4gCSAgIAlUaGUgY2hhbm5lbCBvbiBzdWNjZXNzLCBlcnJvciBvbiBmYWlsdXJlCisgKi8KK2ludCBsYnNfZ2V0X3Jzc2koc3RydWN0IGxic19wcml2YXRlICpwcml2LCBzOCAqcnNzaSwgczggKm5mKQogewotCXN0cnVjdCBsYnNfb2Zmc2V0X3ZhbHVlICpvZmZ2YWw7CisJc3RydWN0IGNtZF9kc184MDJfMTFfcnNzaSBjbWQ7CisJaW50IHJldCA9IDA7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfQ01EKTsKIAotCW9mZnZhbCA9IChzdHJ1Y3QgbGJzX29mZnNldF92YWx1ZSAqKXBkYXRhX2J1ZjsKKwlCVUdfT04ocnNzaSA9PSBOVUxMKTsKKwlCVUdfT04obmYgPT0gTlVMTCk7CiAKLQlzd2l0Y2ggKGxlMTZfdG9fY3B1KGNtZHB0ci0+Y29tbWFuZCkpIHsKLQljYXNlIENNRF9NQUNfUkVHX0FDQ0VTUzoKLQkJewotCQkJc3RydWN0IGNtZF9kc19tYWNfcmVnX2FjY2VzcyAqbWFjcmVnOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLmhkci5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGNtZCkpOworCS8qIEF2ZXJhZ2UgU05SIG92ZXIgbGFzdCA4IGJlYWNvbnMgKi8KKwljbWQubl9vcl9zbnIgPSBjcHVfdG9fbGUxNig4KTsKIAotCQkJY21kcHRyLT5zaXplID0KLQkJCSAgICBjcHVfdG9fbGUxNihzaXplb2YgKHN0cnVjdCBjbWRfZHNfbWFjX3JlZ19hY2Nlc3MpCi0JCQkJCSsgc2l6ZW9mKHN0cnVjdCBjbWRfaGVhZGVyKSk7Ci0JCQltYWNyZWcgPQotCQkJICAgIChzdHJ1Y3QgY21kX2RzX21hY19yZWdfYWNjZXNzICopJmNtZHB0ci0+cGFyYW1zLgotCQkJICAgIG1hY3JlZzsKLQotCQkJbWFjcmVnLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihjbWRfYWN0aW9uKTsKLQkJCW1hY3JlZy0+b2Zmc2V0ID0gY3B1X3RvX2xlMTYoKHUxNikgb2ZmdmFsLT5vZmZzZXQpOwotCQkJbWFjcmVnLT52YWx1ZSA9IGNwdV90b19sZTMyKG9mZnZhbC0+dmFsdWUpOwotCi0JCQlicmVhazsKLQkJfQotCi0JY2FzZSBDTURfQkJQX1JFR19BQ0NFU1M6Ci0JCXsKLQkJCXN0cnVjdCBjbWRfZHNfYmJwX3JlZ19hY2Nlc3MgKmJicHJlZzsKLQotCQkJY21kcHRyLT5zaXplID0KLQkJCSAgICBjcHVfdG9fbGUxNihzaXplb2YKLQkJCQkJICAgICAoc3RydWN0IGNtZF9kc19iYnBfcmVnX2FjY2VzcykKLQkJCQkJICAgICArIHNpemVvZihzdHJ1Y3QgY21kX2hlYWRlcikpOwotCQkJYmJwcmVnID0KLQkJCSAgICAoc3RydWN0IGNtZF9kc19iYnBfcmVnX2FjY2VzcyAqKSZjbWRwdHItPnBhcmFtcy4KLQkJCSAgICBiYnByZWc7Ci0KLQkJCWJicHJlZy0+YWN0aW9uID0gY3B1X3RvX2xlMTYoY21kX2FjdGlvbik7Ci0JCQliYnByZWctPm9mZnNldCA9IGNwdV90b19sZTE2KCh1MTYpIG9mZnZhbC0+b2Zmc2V0KTsKLQkJCWJicHJlZy0+dmFsdWUgPSAodTgpIG9mZnZhbC0+dmFsdWU7Ci0KLQkJCWJyZWFrOwotCQl9Ci0KLQljYXNlIENNRF9SRl9SRUdfQUNDRVNTOgotCQl7Ci0JCQlzdHJ1Y3QgY21kX2RzX3JmX3JlZ19hY2Nlc3MgKnJmcmVnOwotCi0JCQljbWRwdHItPnNpemUgPQotCQkJICAgIGNwdV90b19sZTE2KHNpemVvZgotCQkJCQkgICAgIChzdHJ1Y3QgY21kX2RzX3JmX3JlZ19hY2Nlc3MpICsKLQkJCQkJICAgICBzaXplb2Yoc3RydWN0IGNtZF9oZWFkZXIpKTsKLQkJCXJmcmVnID0KLQkJCSAgICAoc3RydWN0IGNtZF9kc19yZl9yZWdfYWNjZXNzICopJmNtZHB0ci0+cGFyYW1zLgotCQkJICAgIHJmcmVnOwotCi0JCQlyZnJlZy0+YWN0aW9uID0gY3B1X3RvX2xlMTYoY21kX2FjdGlvbik7Ci0JCQlyZnJlZy0+b2Zmc2V0ID0gY3B1X3RvX2xlMTYoKHUxNikgb2ZmdmFsLT5vZmZzZXQpOwotCQkJcmZyZWctPnZhbHVlID0gKHU4KSBvZmZ2YWwtPnZhbHVlOwotCi0JCQlicmVhazsKLQkJfQotCi0JZGVmYXVsdDoKLQkJYnJlYWs7CisJcmV0ID0gbGJzX2NtZF93aXRoX3Jlc3BvbnNlKHByaXYsIENNRF84MDJfMTFfUlNTSSwgJmNtZCk7CisJaWYgKHJldCA9PSAwKSB7CisJCSpuZiA9IENBTF9ORihsZTE2X3RvX2NwdShjbWQubmYpKTsKKwkJKnJzc2kgPSBDQUxfUlNTSShsZTE2X3RvX2NwdShjbWQubl9vcl9zbnIpLCBsZTE2X3RvX2NwdShjbWQubmYpKTsKIAl9CiAKLQlsYnNfZGViX2xlYXZlKExCU19ERUJfQ01EKTsKLQlyZXR1cm4gMDsKKwlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9DTUQsICJyZXQgJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogIEBicmllZiBTZW5kIHJlZ3VsYXRvcnkgYW5kIDgwMi4xMWQgZG9tYWluIGluZm9ybWF0aW9uIHRvIHRoZSBmaXJtd2FyZQorICoKKyAqICBAcGFyYW0gcHJpdgkJcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUKKyAqICBAcGFyYW0gcmVxdWVzdAljZmc4MDIxMSByZWd1bGF0b3J5IHJlcXVlc3Qgc3RydWN0dXJlCisgKiAgQHBhcmFtIGJhbmRzCXRoZSBkZXZpY2UncyBzdXBwb3J0ZWQgYmFuZHMgYW5kIGNoYW5uZWxzCisgKgorICogIEByZXR1cm4JCTAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvbiBmYWlsdXJlCisqLworaW50IGxic19zZXRfMTFkX2RvbWFpbl9pbmZvKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0LAorCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKipiYW5kcykKK3sKKwlzdHJ1Y3QgY21kX2RzXzgwMl8xMWRfZG9tYWluX2luZm8gY21kOworCXN0cnVjdCBtcnZsX2llX2RvbWFpbl9wYXJhbV9zZXQgKmRvbWFpbiA9ICZjbWQuZG9tYWluOworCXN0cnVjdCBpZWVlODAyMTFfY291bnRyeV9pZV90cmlwbGV0ICp0OworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoOworCXU4IG51bV90cmlwbGV0ID0gMDsKKwl1OCBudW1fcGFyc2VkX2NoYW4gPSAwOworCXU4IGZpcnN0X2NoYW5uZWwgPSAwLCBuZXh0X2NoYW4gPSAwLCBtYXhfcHdyID0gMDsKKwl1OCBpLCBmbGFnID0gMDsKKwlzaXplX3QgdHJpcGxldF9zaXplOworCWludCByZXQ7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfMTFEKTsKKworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLmFjdGlvbiA9IGNwdV90b19sZTE2KENNRF9BQ1RfU0VUKTsKKworCWxic19kZWJfMTFkKCJTZXR0aW5nIGNvdW50cnkgY29kZSAnJWMlYydcbiIsCisJCSAgICByZXF1ZXN0LT5hbHBoYTJbMF0sIHJlcXVlc3QtPmFscGhhMlsxXSk7CisKKwlkb21haW4tPmhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoVExWX1RZUEVfRE9NQUlOKTsKKworCS8qIFNldCBjb3VudHJ5IGNvZGUgKi8KKwlkb21haW4tPmNvdW50cnlfY29kZVswXSA9IHJlcXVlc3QtPmFscGhhMlswXTsKKwlkb21haW4tPmNvdW50cnlfY29kZVsxXSA9IHJlcXVlc3QtPmFscGhhMlsxXTsKKwlkb21haW4tPmNvdW50cnlfY29kZVsyXSA9ICcgJzsKKworCS8qIE5vdyBzZXQgdXAgdGhlIGNoYW5uZWwgdHJpcGxldHM7IGZpcm13YXJlIGlzIHNvbWV3aGF0IHBpY2t5IGhlcmUKKwkgKiBhbmQgZG9lc24ndCB2YWxpZGF0ZSBjaGFubmVsIG51bWJlcnMgYW5kIHNwYW5zOyBoZW5jZSBpdCB3b3VsZAorCSAqIGludGVycHJldCBhIHRyaXBsZXQgb2YgKDM2LCA0LCAyMCkgYXMgY2hhbm5lbHMgMzYsIDM3LCAzOCwgMzkuICBTaW5jZQorCSAqIHRoZSBsYXN0IDMgYXJlbid0IHZhbGlkIGNoYW5uZWxzLCB0aGUgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvcgorCSAqIHNwbGl0dGluZyB0aGF0IHVwIGludG8gNCB0cmlwbGV0IHBhaXJzIG9mICgzNiwgMSwgMjApICsgKDQwLCAxLCAyMCkKKwkgKiBldGMuCisJICovCisJZm9yIChiYW5kID0gMDsKKwkgICAgIChiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUykgJiYgKG51bV90cmlwbGV0IDwgTUFYXzExRF9UUklQTEVUUyk7CisJICAgICBiYW5kKyspIHsKKworCQlpZiAoIWJhbmRzW2JhbmRdKQorCQkJY29udGludWU7CisKKwkJZm9yIChpID0gMDsKKwkJICAgICAoaSA8IGJhbmRzW2JhbmRdLT5uX2NoYW5uZWxzKSAmJiAobnVtX3RyaXBsZXQgPCBNQVhfMTFEX1RSSVBMRVRTKTsKKwkJICAgICBpKyspIHsKKwkJCWNoID0gJmJhbmRzW2JhbmRdLT5jaGFubmVsc1tpXTsKKwkJCWlmIChjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKCFmbGFnKSB7CisJCQkJZmxhZyA9IDE7CisJCQkJbmV4dF9jaGFuID0gZmlyc3RfY2hhbm5lbCA9ICh1MzIpIGNoLT5od192YWx1ZTsKKwkJCQltYXhfcHdyID0gY2gtPm1heF9wb3dlcjsKKwkJCQludW1fcGFyc2VkX2NoYW4gPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAoKGNoLT5od192YWx1ZSA9PSBuZXh0X2NoYW4gKyAxKSAmJgorCQkJCQkoY2gtPm1heF9wb3dlciA9PSBtYXhfcHdyKSkgeworCQkJCS8qIENvbnNvbGlkYXRlIGFkamFjZW50IGNoYW5uZWxzICovCisJCQkJbmV4dF9jaGFuKys7CisJCQkJbnVtX3BhcnNlZF9jaGFuKys7CisJCQl9IGVsc2UgeworCQkJCS8qIEFkZCB0aGlzIHRyaXBsZXQgKi8KKwkJCQlsYnNfZGViXzExZCgiMTFEIHRyaXBsZXQgKCVkLCAlZCwgJWQpXG4iLAorCQkJCQlmaXJzdF9jaGFubmVsLCBudW1fcGFyc2VkX2NoYW4sCisJCQkJCW1heF9wd3IpOworCQkJCXQgPSAmZG9tYWluLT50cmlwbGV0W251bV90cmlwbGV0XTsKKwkJCQl0LT5jaGFucy5maXJzdF9jaGFubmVsID0gZmlyc3RfY2hhbm5lbDsKKwkJCQl0LT5jaGFucy5udW1fY2hhbm5lbHMgPSBudW1fcGFyc2VkX2NoYW47CisJCQkJdC0+Y2hhbnMubWF4X3Bvd2VyID0gbWF4X3B3cjsKKwkJCQludW1fdHJpcGxldCsrOworCQkJCWZsYWcgPSAwOworCQkJfQorCQl9CisKKwkJaWYgKGZsYWcpIHsKKwkJCS8qIEFkZCBsYXN0IHRyaXBsZXQgKi8KKwkJCWxic19kZWJfMTFkKCIxMUQgdHJpcGxldCAoJWQsICVkLCAlZClcbiIsIGZpcnN0X2NoYW5uZWwsCisJCQkJbnVtX3BhcnNlZF9jaGFuLCBtYXhfcHdyKTsKKwkJCXQgPSAmZG9tYWluLT50cmlwbGV0W251bV90cmlwbGV0XTsKKwkJCXQtPmNoYW5zLmZpcnN0X2NoYW5uZWwgPSBmaXJzdF9jaGFubmVsOworCQkJdC0+Y2hhbnMubnVtX2NoYW5uZWxzID0gbnVtX3BhcnNlZF9jaGFuOworCQkJdC0+Y2hhbnMubWF4X3Bvd2VyID0gbWF4X3B3cjsKKwkJCW51bV90cmlwbGV0Kys7CisJCX0KKwl9CisKKwlsYnNfZGViXzExZCgiIyB0cmlwbGV0cyAlZFxuIiwgbnVtX3RyaXBsZXQpOworCisJLyogU2V0IGNvbW1hbmQgaGVhZGVyIHNpemVzICovCisJdHJpcGxldF9zaXplID0gbnVtX3RyaXBsZXQgKiBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jb3VudHJ5X2llX3RyaXBsZXQpOworCWRvbWFpbi0+aGVhZGVyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZihkb21haW4tPmNvdW50cnlfY29kZSkgKworCQkJCQl0cmlwbGV0X3NpemUpOworCisJbGJzX2RlYl9oZXgoTEJTX0RFQl8xMUQsICI4MDIuMTFEIGRvbWFpbiBwYXJhbSBzZXQiLAorCQkJKHU4ICopICZjbWQuZG9tYWluLmNvdW50cnlfY29kZSwKKwkJCWxlMTZfdG9fY3B1KGRvbWFpbi0+aGVhZGVyLmxlbikpOworCisJY21kLmhkci5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGNtZC5oZHIpICsKKwkJCQkgICBzaXplb2YoY21kLmFjdGlvbikgKworCQkJCSAgIHNpemVvZihjbWQuZG9tYWluLmhlYWRlcikgKworCQkJCSAgIHNpemVvZihjbWQuZG9tYWluLmNvdW50cnlfY29kZSkgKworCQkJCSAgIHRyaXBsZXRfc2l6ZSk7CisKKwlyZXQgPSBsYnNfY21kX3dpdGhfcmVzcG9uc2UocHJpdiwgQ01EXzgwMl8xMURfRE9NQUlOX0lORk8sICZjbWQpOworCisJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfMTFELCAicmV0ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqICBAYnJpZWYgUmVhZCBhIE1BQywgQmFzZWJhbmQsIG9yIFJGIHJlZ2lzdGVyCisgKgorICogIEBwYXJhbSBwcml2CQlwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZQorICogIEBwYXJhbSBjbWQJCXJlZ2lzdGVyIGNvbW1hbmQsIG9uZSBvZiBDTURfTUFDX1JFR19BQ0NFU1MsCisgKiAgICAgICAgICAgICAgICAgICAgICAgIENNRF9CQlBfUkVHX0FDQ0VTUywgb3IgQ01EX1JGX1JFR19BQ0NFU1MKKyAqICBAcGFyYW0gb2Zmc2V0ICAgICAgIGJ5dGUgb2Zmc2V0IG9mIHRoZSByZWdpc3RlciB0byBnZXQKKyAqICBAcGFyYW0gdmFsdWUgICAgICAgIG9uIHN1Y2Nlc3MsIHRoZSB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgYXQgJ29mZnNldCcKKyAqCisgKiAgQHJldHVybgkJMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmUKKyovCitpbnQgbGJzX2dldF9yZWcoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1MTYgcmVnLCB1MTYgb2Zmc2V0LCB1MzIgKnZhbHVlKQoreworCXN0cnVjdCBjbWRfZHNfcmVnX2FjY2VzcyBjbWQ7CisJaW50IHJldCA9IDA7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfQ01EKTsKKworCUJVR19PTih2YWx1ZSA9PSBOVUxMKTsKKworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLmhkci5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGNtZCkpOworCWNtZC5hY3Rpb24gPSBjcHVfdG9fbGUxNihDTURfQUNUX0dFVCk7CisKKwlpZiAocmVnICE9IENNRF9NQUNfUkVHX0FDQ0VTUyAmJgorCSAgICByZWcgIT0gQ01EX0JCUF9SRUdfQUNDRVNTICYmCisJICAgIHJlZyAhPSBDTURfUkZfUkVHX0FDQ0VTUykgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBsYnNfY21kX3dpdGhfcmVzcG9uc2UocHJpdiwgcmVnLCAmY21kKTsKKwlpZiAocmV0KSB7CisJCWlmIChyZWcgPT0gQ01EX0JCUF9SRUdfQUNDRVNTIHx8IHJlZyA9PSBDTURfUkZfUkVHX0FDQ0VTUykKKwkJCSp2YWx1ZSA9IGNtZC52YWx1ZS5iYnBfcmY7CisJCWVsc2UgaWYgKHJlZyA9PSBDTURfTUFDX1JFR19BQ0NFU1MpCisJCQkqdmFsdWUgPSBsZTMyX3RvX2NwdShjbWQudmFsdWUubWFjKTsKKwl9CisKK291dDoKKwlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9DTUQsICJyZXQgJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogIEBicmllZiBXcml0ZSBhIE1BQywgQmFzZWJhbmQsIG9yIFJGIHJlZ2lzdGVyCisgKgorICogIEBwYXJhbSBwcml2CQlwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZQorICogIEBwYXJhbSBjbWQJCXJlZ2lzdGVyIGNvbW1hbmQsIG9uZSBvZiBDTURfTUFDX1JFR19BQ0NFU1MsCisgKiAgICAgICAgICAgICAgICAgICAgICAgIENNRF9CQlBfUkVHX0FDQ0VTUywgb3IgQ01EX1JGX1JFR19BQ0NFU1MKKyAqICBAcGFyYW0gb2Zmc2V0ICAgICAgIGJ5dGUgb2Zmc2V0IG9mIHRoZSByZWdpc3RlciB0byBzZXQKKyAqICBAcGFyYW0gdmFsdWUgICAgICAgIHRoZSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgcmVnaXN0ZXIgYXQgJ29mZnNldCcKKyAqCisgKiAgQHJldHVybgkJMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmUKKyovCitpbnQgbGJzX3NldF9yZWcoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1MTYgcmVnLCB1MTYgb2Zmc2V0LCB1MzIgdmFsdWUpCit7CisJc3RydWN0IGNtZF9kc19yZWdfYWNjZXNzIGNtZDsKKwlpbnQgcmV0ID0gMDsKKworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DTUQpOworCisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQuaGRyLnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoY21kKSk7CisJY21kLmFjdGlvbiA9IGNwdV90b19sZTE2KENNRF9BQ1RfU0VUKTsKKworCWlmIChyZWcgPT0gQ01EX0JCUF9SRUdfQUNDRVNTIHx8IHJlZyA9PSBDTURfUkZfUkVHX0FDQ0VTUykKKwkJY21kLnZhbHVlLmJicF9yZiA9ICh1OCkgKHZhbHVlICYgMHhGRik7CisJZWxzZSBpZiAocmVnID09IENNRF9NQUNfUkVHX0FDQ0VTUykKKwkJY21kLnZhbHVlLm1hYyA9IGNwdV90b19sZTMyKHZhbHVlKTsKKwllbHNlIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gbGJzX2NtZF93aXRoX3Jlc3BvbnNlKHByaXYsIHJlZywgJmNtZCk7CisKK291dDoKKwlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9DTUQsICJyZXQgJWQiLCByZXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGxic19xdWV1ZV9jbWQoc3RydWN0IGxic19wcml2YXRlICpwcml2LApAQCAtNzA0LDE0ICs5MzEsMTcgQEAKIAogCS8qIEV4aXRfUFMgY29tbWFuZCBuZWVkcyB0byBiZSBxdWV1ZWQgaW4gdGhlIGhlYWRlciBhbHdheXMuICovCiAJaWYgKGxlMTZfdG9fY3B1KGNtZG5vZGUtPmNtZGJ1Zi0+Y29tbWFuZCkgPT0gQ01EXzgwMl8xMV9QU19NT0RFKSB7Ci0JCXN0cnVjdCBjbWRfZHNfODAyXzExX3BzX21vZGUgKnBzbSA9ICh2b2lkICopICZjbWRub2RlLT5jbWRidWZbMV07CisJCXN0cnVjdCBjbWRfZHNfODAyXzExX3BzX21vZGUgKnBzbSA9ICh2b2lkICopICZjbWRub2RlLT5jbWRidWY7CiAKLQkJaWYgKHBzbS0+YWN0aW9uID09IGNwdV90b19sZTE2KENNRF9TVUJDTURfRVhJVF9QUykpIHsKKwkJaWYgKHBzbS0+YWN0aW9uID09IGNwdV90b19sZTE2KFBTX01PREVfQUNUSU9OX0VYSVRfUFMpKSB7CiAJCQlpZiAocHJpdi0+cHNzdGF0ZSAhPSBQU19TVEFURV9GVUxMX1BPV0VSKQogCQkJCWFkZHRhaWwgPSAwOwogCQl9CiAJfQogCisJaWYgKGxlMTZfdG9fY3B1KGNtZG5vZGUtPmNtZGJ1Zi0+Y29tbWFuZCkgPT0gQ01EXzgwMl8xMV9XQUtFVVBfQ09ORklSTSkKKwkJYWRkdGFpbCA9IDA7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAogCWlmIChhZGR0YWlsKQpAQCAtNzQ0LDcgKzk3NCw2IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAlwcml2LT5jdXJfY21kID0gY21kbm9kZTsKLQlwcml2LT5jdXJfY21kX3JldGNvZGUgPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CiAKIAljbWRzaXplID0gbGUxNl90b19jcHUoY21kLT5zaXplKTsKQEAgLTgxNyw5ICsxMDQ2LDYgQEAKIHZvaWQgbGJzX2NvbXBsZXRlX2NvbW1hbmQoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBzdHJ1Y3QgY21kX2N0cmxfbm9kZSAqY21kLAogCQkJICBpbnQgcmVzdWx0KQogewotCWlmIChjbWQgPT0gcHJpdi0+Y3VyX2NtZCkKLQkJcHJpdi0+Y3VyX2NtZF9yZXRjb2RlID0gcmVzdWx0OwotCiAJY21kLT5yZXN1bHQgPSByZXN1bHQ7CiAJY21kLT5jbWR3YWl0cXdva2VuID0gMTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNtZC0+Y21kd2FpdF9xKTsKQEAgLTg4NywxNzUgKzExMTMsNiBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBwcmVwYXJlIHRoZSBjb21tYW5kIGJlZm9yZSBzZW5kIHRvIGZpcm13YXJlLgotICoKLSAqICBAcGFyYW0gcHJpdgkJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gY21kX25vCWNvbW1hbmQgbnVtYmVyCi0gKiAgQHBhcmFtIGNtZF9hY3Rpb24JY29tbWFuZCBhY3Rpb246IEdFVCBvciBTRVQKLSAqICBAcGFyYW0gd2FpdF9vcHRpb24Jd2FpdCBvcHRpb246IHdhaXQgcmVzcG9uc2Ugb3Igbm90Ci0gKiAgQHBhcmFtIGNtZF9vaWQJY21kIG9pZDogdHJlYXRlZCBhcyBzdWIgY29tbWFuZAotICogIEBwYXJhbSBwZGF0YV9idWYJQSBwb2ludGVyIHRvIGluZm9ybWFpb24gYnVmZmVyCi0gKiAgQHJldHVybiAJCTAgb3IgLTEKLSAqLwotaW50IGxic19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQoc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJICB1MTYgY21kX25vLAotCQkJICB1MTYgY21kX2FjdGlvbiwKLQkJCSAgdTE2IHdhaXRfb3B0aW9uLCB1MzIgY21kX29pZCwgdm9pZCAqcGRhdGFfYnVmKQotewotCWludCByZXQgPSAwOwotCXN0cnVjdCBjbWRfY3RybF9ub2RlICpjbWRub2RlOwotCXN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kcHRyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfSE9TVCk7Ci0KLQlpZiAoIXByaXYpIHsKLQkJbGJzX2RlYl9ob3N0KCJQUkVQX0NNRDogcHJpdiBpcyBOVUxMXG4iKTsKLQkJcmV0ID0gLTE7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlpZiAocHJpdi0+c3VycHJpc2VyZW1vdmVkKSB7Ci0JCWxic19kZWJfaG9zdCgiUFJFUF9DTUQ6IGNhcmQgcmVtb3ZlZFxuIik7Ci0JCXJldCA9IC0xOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JaWYgKCFsYnNfaXNfY21kX2FsbG93ZWQocHJpdikpIHsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JY21kbm9kZSA9IGxic19nZXRfY21kX2N0cmxfbm9kZShwcml2KTsKLQotCWlmIChjbWRub2RlID09IE5VTEwpIHsKLQkJbGJzX2RlYl9ob3N0KCJQUkVQX0NNRDogY21kbm9kZSBpcyBOVUxMXG4iKTsKLQotCQkvKiBXYWtlIHVwIG1haW4gdGhyZWFkIHRvIGV4ZWN1dGUgbmV4dCBjb21tYW5kICovCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdHEpOwotCQlyZXQgPSAtMTsKLQkJZ290byBkb25lOwotCX0KLQotCWNtZG5vZGUtPmNhbGxiYWNrID0gTlVMTDsKLQljbWRub2RlLT5jYWxsYmFja19hcmcgPSAodW5zaWduZWQgbG9uZylwZGF0YV9idWY7Ci0KLQljbWRwdHIgPSAoc3RydWN0IGNtZF9kc19jb21tYW5kICopY21kbm9kZS0+Y21kYnVmOwotCi0JbGJzX2RlYl9ob3N0KCJQUkVQX0NNRDogY29tbWFuZCAweCUwNHhcbiIsIGNtZF9ubyk7Ci0KLQkvKiBTZXQgc2VxdWVuY2UgbnVtYmVyLCBjb21tYW5kIGFuZCBJTlQgb3B0aW9uICovCi0JcHJpdi0+c2VxbnVtKys7Ci0JY21kcHRyLT5zZXFudW0gPSBjcHVfdG9fbGUxNihwcml2LT5zZXFudW0pOwotCi0JY21kcHRyLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoY21kX25vKTsKLQljbWRwdHItPnJlc3VsdCA9IDA7Ci0KLQlzd2l0Y2ggKGNtZF9ubykgewotCWNhc2UgQ01EXzgwMl8xMV9QU19NT0RFOgotCQlyZXQgPSBsYnNfY21kXzgwMl8xMV9wc19tb2RlKGNtZHB0ciwgY21kX2FjdGlvbik7Ci0JCWJyZWFrOwotCi0JY2FzZSBDTURfTUFDX1JFR19BQ0NFU1M6Ci0JY2FzZSBDTURfQkJQX1JFR19BQ0NFU1M6Ci0JY2FzZSBDTURfUkZfUkVHX0FDQ0VTUzoKLQkJcmV0ID0gbGJzX2NtZF9yZWdfYWNjZXNzKGNtZHB0ciwgY21kX2FjdGlvbiwgcGRhdGFfYnVmKTsKLQkJYnJlYWs7Ci0KLQljYXNlIENNRF84MDJfMTFfTU9OSVRPUl9NT0RFOgotCQlyZXQgPSBsYnNfY21kXzgwMl8xMV9tb25pdG9yX21vZGUoY21kcHRyLAotCQkJCSAgICAgICAgICBjbWRfYWN0aW9uLCBwZGF0YV9idWYpOwotCQlicmVhazsKLQotCWNhc2UgQ01EXzgwMl8xMV9SU1NJOgotCQlyZXQgPSBsYnNfY21kXzgwMl8xMV9yc3NpKHByaXYsIGNtZHB0cik7Ci0JCWJyZWFrOwotCi0JY2FzZSBDTURfODAyXzExX1NFVF9BRkM6Ci0JY2FzZSBDTURfODAyXzExX0dFVF9BRkM6Ci0KLQkJY21kcHRyLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoY21kX25vKTsKLQkJY21kcHRyLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBjbWRfZHNfODAyXzExX2FmYykgKwotCQkJCQkgICBzaXplb2Yoc3RydWN0IGNtZF9oZWFkZXIpKTsKLQotCQltZW1tb3ZlKCZjbWRwdHItPnBhcmFtcy5hZmMsCi0JCQlwZGF0YV9idWYsIHNpemVvZihzdHJ1Y3QgY21kX2RzXzgwMl8xMV9hZmMpKTsKLQotCQlyZXQgPSAwOwotCQlnb3RvIGRvbmU7Ci0KLQljYXNlIENNRF84MDJfMTFfVFBDX0NGRzoKLQkJY21kcHRyLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoQ01EXzgwMl8xMV9UUENfQ0ZHKTsKLQkJY21kcHRyLT5zaXplID0KLQkJICAgIGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgY21kX2RzXzgwMl8xMV90cGNfY2ZnKSArCi0JCQkJICAgICBzaXplb2Yoc3RydWN0IGNtZF9oZWFkZXIpKTsKLQotCQltZW1tb3ZlKCZjbWRwdHItPnBhcmFtcy50cGNjZmcsCi0JCQlwZGF0YV9idWYsIHNpemVvZihzdHJ1Y3QgY21kX2RzXzgwMl8xMV90cGNfY2ZnKSk7Ci0KLQkJcmV0ID0gMDsKLQkJYnJlYWs7Ci0KLSNpZmRlZiBDT05GSUdfTElCRVJUQVNfTUVTSAotCi0JY2FzZSBDTURfQlRfQUNDRVNTOgotCQlyZXQgPSBsYnNfY21kX2J0X2FjY2VzcyhjbWRwdHIsIGNtZF9hY3Rpb24sIHBkYXRhX2J1Zik7Ci0JCWJyZWFrOwotCi0JY2FzZSBDTURfRldUX0FDQ0VTUzoKLQkJcmV0ID0gbGJzX2NtZF9md3RfYWNjZXNzKGNtZHB0ciwgY21kX2FjdGlvbiwgcGRhdGFfYnVmKTsKLQkJYnJlYWs7Ci0KLSNlbmRpZgotCi0JY2FzZSBDTURfODAyXzExX0JFQUNPTl9DVFJMOgotCQlyZXQgPSBsYnNfY21kX2Jjbl9jdHJsKHByaXYsIGNtZHB0ciwgY21kX2FjdGlvbik7Ci0JCWJyZWFrOwotCWNhc2UgQ01EXzgwMl8xMV9ERUVQX1NMRUVQOgotCQljbWRwdHItPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihDTURfODAyXzExX0RFRVBfU0xFRVApOwotCQljbWRwdHItPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGNtZF9oZWFkZXIpKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbGJzX3ByX2VycigiUFJFUF9DTUQ6IHVua25vd24gY29tbWFuZCAweCUwNHhcbiIsIGNtZF9ubyk7Ci0JCXJldCA9IC0xOwotCQlicmVhazsKLQl9Ci0KLQkvKiByZXR1cm4gZXJyb3IsIHNpbmNlIHRoZSBjb21tYW5kIHByZXBhcmF0aW9uIGZhaWxlZCAqLwotCWlmIChyZXQgIT0gMCkgewotCQlsYnNfZGViX2hvc3QoIlBSRVBfQ01EOiBjb21tYW5kIHByZXBhcmF0aW9uIGZhaWxlZFxuIik7Ci0JCWxic19jbGVhbnVwX2FuZF9pbnNlcnRfY21kKHByaXYsIGNtZG5vZGUpOwotCQlyZXQgPSAtMTsKLQkJZ290byBkb25lOwotCX0KLQotCWNtZG5vZGUtPmNtZHdhaXRxd29rZW4gPSAwOwotCi0JbGJzX3F1ZXVlX2NtZChwcml2LCBjbWRub2RlKTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRxKTsKLQotCWlmICh3YWl0X29wdGlvbiAmIENNRF9PUFRJT05fV0FJVEZPUlJTUCkgewotCQlsYnNfZGViX2hvc3QoIlBSRVBfQ01EOiB3YWl0IGZvciByZXNwb25zZVxuIik7Ci0JCW1pZ2h0X3NsZWVwKCk7Ci0JCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjbWRub2RlLT5jbWR3YWl0X3EsCi0JCQkJCSBjbWRub2RlLT5jbWR3YWl0cXdva2VuKTsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKLQlpZiAocHJpdi0+Y3VyX2NtZF9yZXRjb2RlKSB7Ci0JCWxic19kZWJfaG9zdCgiUFJFUF9DTUQ6IGNvbW1hbmQgZmFpbGVkIHdpdGggcmV0dXJuIGNvZGUgJWRcbiIsCi0JCSAgICAgICBwcml2LT5jdXJfY21kX3JldGNvZGUpOwotCQlwcml2LT5jdXJfY21kX3JldGNvZGUgPSAwOwotCQlyZXQgPSAtMTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKLQotZG9uZToKLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9IT1NULCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKICAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgdGhlIGNvbW1hbmQgYnVmZmVyIGFuZCBsaW5rCiAgKiAgaXQgdG8gY29tbWFuZCBmcmVlIHF1ZXVlLgogICoKQEAgLTExNDgsNyArMTIwNSw3IEBACiAgKiAgQHBhcmFtIHByaXYJCUEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCiAgKiAgQHJldHVybiBjbWRfY3RybF9ub2RlIEEgcG9pbnRlciB0byBjbWRfY3RybF9ub2RlIHN0cnVjdHVyZSBvciBOVUxMCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgY21kX2N0cmxfbm9kZSAqbGJzX2dldF9jbWRfY3RybF9ub2RlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKK3N0YXRpYyBzdHJ1Y3QgY21kX2N0cmxfbm9kZSAqbGJzX2dldF9mcmVlX2NtZF9ub2RlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKIHsKIAlzdHJ1Y3QgY21kX2N0cmxfbm9kZSAqdGVtcG5vZGU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEyMzEsMTAgKzEyODgsMTAgQEAKIAkJCS8qCiAJCQkgKiAxLiBOb24tUFMgY29tbWFuZDoKIAkJCSAqIFF1ZXVlIGl0LiBzZXQgbmVlZHRvd2FrZXVwIHRvIFRSVUUgaWYgY3VycmVudCBzdGF0ZQotCQkJICogaXMgU0xFRVAsIG90aGVyd2lzZSBjYWxsIGxic19wc193YWtldXAgdG8gc2VuZCBFeGl0X1BTLgotCQkJICogMi4gUFMgY29tbWFuZCBidXQgbm90IEV4aXRfUFM6CisJCQkgKiBpcyBTTEVFUCwgb3RoZXJ3aXNlIGNhbGwgc2VuZCBFWElUX1BTLgorCQkJICogMi4gUFMgY29tbWFuZCBidXQgbm90IEVYSVRfUFM6CiAJCQkgKiBJZ25vcmUgaXQuCi0JCQkgKiAzLiBQUyBjb21tYW5kIEV4aXRfUFM6CisJCQkgKiAzLiBQUyBjb21tYW5kIEVYSVRfUFM6CiAJCQkgKiBTZXQgbmVlZHRvd2FrZXVwIHRvIFRSVUUgaWYgY3VycmVudCBzdGF0ZSBpcyBTTEVFUCwKIAkJCSAqIG90aGVyd2lzZSBzZW5kIHRoaXMgY29tbWFuZCBkb3duIHRvIGZpcm13YXJlCiAJCQkgKiBpbW1lZGlhdGVseS4KQEAgLTEyNDgsOCArMTMwNSwxMSBAQAogCQkJCQkvKiB3LyBuZXcgc2NoZW1lLCBpdCB3aWxsIG5vdCByZWFjaCBoZXJlLgogCQkJCQkgICBzaW5jZSBpdCBpcyBibG9ja2VkIGluIG1haW5fdGhyZWFkLiAqLwogCQkJCQlwcml2LT5uZWVkdG93YWtldXAgPSAxOwotCQkJCX0gZWxzZQotCQkJCQlsYnNfcHNfd2FrZXVwKHByaXYsIDApOworCQkJCX0gZWxzZSB7CisJCQkJCWxic19zZXRfcHNfbW9kZShwcml2LAorCQkJCQkJCVBTX01PREVfQUNUSU9OX0VYSVRfUFMsCisJCQkJCQkJZmFsc2UpOworCQkJCX0KIAogCQkJCXJldCA9IDA7CiAJCQkJZ290byBkb25lOwpAQCAtMTI2NCw3ICsxMzI0LDcgQEAKIAkJCQkgICAgICAgIkVYRUNfTkVYVF9DTUQ6IFBTIGNtZCwgYWN0aW9uIDB4JTAyeFxuIiwKIAkJCQkgICAgICAgcHNtLT5hY3Rpb24pOwogCQkJCWlmIChwc20tPmFjdGlvbiAhPQotCQkJCSAgICBjcHVfdG9fbGUxNihDTURfU1VCQ01EX0VYSVRfUFMpKSB7CisJCQkJICAgIGNwdV90b19sZTE2KFBTX01PREVfQUNUSU9OX0VYSVRfUFMpKSB7CiAJCQkJCWxic19kZWJfaG9zdCgKIAkJCQkJICAgICAgICJFWEVDX05FWFRfQ01EOiBpZ25vcmUgRU5URVJfUFMgY21kXG4iKTsKIAkJCQkJbGlzdF9kZWwoJmNtZG5vZGUtPmxpc3QpOwpAQCAtMTMwMyw2ICsxMzYzLDE1IEBACiAJCSAqIGNoZWNrIGlmIGluIHBvd2VyIHNhdmUgbW9kZSwgaWYgeWVzLCBwdXQgdGhlIGRldmljZSBiYWNrCiAJCSAqIHRvIFBTIG1vZGUKIAkJICovCisjaWZkZWYgVE9ETworCQkvKgorCQkgKiBUaGlzIHdhcyB0aGUgb2xkIGNvZGUgZm9yIGxpYmVydGFzK3dleHQuIFNvbWVvbmUgdGhhdAorCQkgKiB1bmRlcnN0YW5kcyB0aGlzIGJlYXN0IHNob3VsZCByZS1jb2RlIGl0IGluIGEgc2FuZSB3YXkuCisJCSAqCisJCSAqIEkgYWN0dWFsbHkgZG9uJ3QgdW5kZXJzdGFuZCB3aHkgdGhpcyBpcyByZWxhdGVkIHRvIFdQQQorCQkgKiBhbmQgdG8gY29ubmVjdGlvbiBzdGF0dXMsIHNob3VsZG4ndCBwb3dlcmluZyBzaG91bGQgYmUKKwkJICogaW5kZXBlbmQgb2Ygc3VjaCB0aGluZ3M/CisJCSAqLwogCQlpZiAoKHByaXYtPnBzbW9kZSAhPSBMQlM4MDJfMTFQT1dFUk1PREVDQU0pICYmCiAJCSAgICAocHJpdi0+cHNzdGF0ZSA9PSBQU19TVEFURV9GVUxMX1BPV0VSKSAmJgogCQkgICAgKChwcml2LT5jb25uZWN0X3N0YXR1cyA9PSBMQlNfQ09OTkVDVEVEKSB8fApAQCAtMTMxNSwxNSArMTM4NCwxOSBAQAogCQkJCQlsYnNfZGViX2hvc3QoCiAJCQkJCSAgICAgICAiRVhFQ19ORVhUX0NNRDogV1BBIGVuYWJsZWQgYW5kIEdUS19TRVQiCiAJCQkJCSAgICAgICAiIGdvIGJhY2sgdG8gUFNfU0xFRVAiKTsKLQkJCQkJbGJzX3BzX3NsZWVwKHByaXYsIDApOworCQkJCQlsYnNfc2V0X3BzX21vZGUocHJpdiwKKwkJCQkJCQlQU19NT0RFX0FDVElPTl9FTlRFUl9QUywKKwkJCQkJCQlmYWxzZSk7CiAJCQkJfQogCQkJfSBlbHNlIHsKIAkJCQlsYnNfZGViX2hvc3QoCiAJCQkJICAgICAgICJFWEVDX05FWFRfQ01EOiBjbWRwZW5kaW5ncSBlbXB0eSwgIgogCQkJCSAgICAgICAiZ28gYmFjayB0byBQU19TTEVFUCIpOwotCQkJCWxic19wc19zbGVlcChwcml2LCAwKTsKKwkJCQlsYnNfc2V0X3BzX21vZGUocHJpdiwgUFNfTU9ERV9BQ1RJT05fRU5URVJfUFMsCisJCQkJCQlmYWxzZSk7CiAJCQl9CiAJCX0KKyNlbmRpZgogCX0KIAogCXJldCA9IDA7CkBAIC0xMzUzLDYgKzE0MjYsMTEgQEAKIAkvKiBXZSBkb24ndCBnZXQgYSByZXNwb25zZSBvbiB0aGUgc2xlZXAtY29uZmlybWF0aW9uICovCiAJcHJpdi0+ZG5sZF9zZW50ID0gRE5MRF9SRVNfUkVDRUlWRUQ7CiAKKwlpZiAocHJpdi0+aXNfaG9zdF9zbGVlcF9jb25maWd1cmVkKSB7CisJCXByaXYtPmlzX2hvc3Rfc2xlZXBfYWN0aXZhdGVkID0gMTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT5ob3N0X3NsZWVwX3EpOworCX0KKwogCS8qIElmIG5vdGhpbmcgdG8gZG8sIGdvIGJhY2sgdG8gc2xlZXAgKD8pICovCiAJaWYgKCFrZmlmb19sZW4oJnByaXYtPmV2ZW50X2ZpZm8pICYmICFwcml2LT5yZXNwX2xlbltwcml2LT5yZXNwX2lkeF0pCiAJCXByaXYtPnBzc3RhdGUgPSBQU19TVEFURV9TTEVFUDsKQEAgLTEzNjMsNDMgKzE0NDEsNiBAQAogCWxic19kZWJfbGVhdmUoTEJTX0RFQl9IT1NUKTsKIH0KIAotdm9pZCBsYnNfcHNfc2xlZXAoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBpbnQgd2FpdF9vcHRpb24pCi17Ci0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0hPU1QpOwotCi0JLyoKLQkgKiBQUyBpcyBjdXJyZW50bHkgc3VwcG9ydGVkIG9ubHkgaW4gSW5mcmFzdHJ1Y3R1cmUgbW9kZQotCSAqIFJlbW92ZSB0aGlzIGNoZWNrIGlmIGl0IGlzIHRvIGJlIHN1cHBvcnRlZCBpbiBJQlNTIG1vZGUgYWxzbwotCSAqLwotCi0JbGJzX3ByZXBhcmVfYW5kX3NlbmRfY29tbWFuZChwcml2LCBDTURfODAyXzExX1BTX01PREUsCi0JCQkgICAgICBDTURfU1VCQ01EX0VOVEVSX1BTLCB3YWl0X29wdGlvbiwgMCwgTlVMTCk7Ci0KLQlsYnNfZGViX2xlYXZlKExCU19ERUJfSE9TVCk7Ci19Ci0KLS8qKgotICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIHNlbmRzIEV4aXRfUFMgY29tbWFuZCB0byBmaXJtd2FyZS4KLSAqCi0gKiAgQHBhcmFtIHByaXYgICAgCUEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIHdhaXRfb3B0aW9uCXdhaXQgcmVzcG9uc2Ugb3Igbm90Ci0gKiAgQHJldHVybiAJICAgCW4vYQotICovCi12b2lkIGxic19wc193YWtldXAoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBpbnQgd2FpdF9vcHRpb24pCi17Ci0JX19sZTMyIExvY2FscHNtb2RlOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0hPU1QpOwotCi0JTG9jYWxwc21vZGUgPSBjcHVfdG9fbGUzMihMQlM4MDJfMTFQT1dFUk1PREVDQU0pOwotCi0JbGJzX3ByZXBhcmVfYW5kX3NlbmRfY29tbWFuZChwcml2LCBDTURfODAyXzExX1BTX01PREUsCi0JCQkgICAgICBDTURfU1VCQ01EX0VYSVRfUFMsCi0JCQkgICAgICB3YWl0X29wdGlvbiwgMCwgJkxvY2FscHNtb2RlKTsKLQotCWxic19kZWJfbGVhdmUoTEJTX0RFQl9IT1NUKTsKLX0KLQogLyoqCiAgKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGNvbmRpdGlvbiBhbmQgcHJlcGFyZXMgdG8KICAqICBzZW5kIHNsZWVwIGNvbmZpcm0gY29tbWFuZCB0byBmaXJtd2FyZSBpZiBvay4KQEAgLTE1MjQsMTIgKzE1NjUsMTggQEAKIAkJZ290byBkb25lOwogCX0KIAotCWlmICghbGJzX2lzX2NtZF9hbGxvd2VkKHByaXYpKSB7Ci0JCWNtZG5vZGUgPSBFUlJfUFRSKC1FQlVTWSk7Ci0JCWdvdG8gZG9uZTsKKwkvKiBObyBjb21tYW5kcyBhcmUgYWxsb3dlZCBpbiBEZWVwIFNsZWVwIHVudGlsIHdlIHRvZ2dsZSB0aGUgR1BJTworCSAqIHRvIHdha2UgdXAgdGhlIGNhcmQgYW5kIGl0IGhhcyBzaWduYWxlZCB0aGF0IGl0J3MgcmVhZHkuCisJICovCisJaWYgKCFwcml2LT5pc19hdXRvX2RlZXBfc2xlZXBfZW5hYmxlZCkgeworCQlpZiAocHJpdi0+aXNfZGVlcF9zbGVlcCkgeworCQkJbGJzX2RlYl9jbWQoImNvbW1hbmQgbm90IGFsbG93ZWQgaW4gZGVlcCBzbGVlcFxuIik7CisJCQljbWRub2RlID0gRVJSX1BUUigtRUJVU1kpOworCQkJZ290byBkb25lOworCQl9CiAJfQogCi0JY21kbm9kZSA9IGxic19nZXRfY21kX2N0cmxfbm9kZShwcml2KTsKKwljbWRub2RlID0gbGJzX2dldF9mcmVlX2NtZF9ub2RlKHByaXYpOwogCWlmIChjbWRub2RlID09IE5VTEwpIHsKIAkJbGJzX2RlYl9ob3N0KCJQUkVQX0NNRDogY21kbm9kZSBpcyBOVUxMXG4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuaAppbmRleCBjYjQxMzhhLi43MTA5ZDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuaApAQCAtMyw2ICszLDggQEAKICNpZm5kZWYgX0xCU19DTURfSF8KICNkZWZpbmUgX0xCU19DTURfSF8KIAorI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgorCiAjaW5jbHVkZSAiaG9zdC5oIgogI2luY2x1ZGUgImRldi5oIgogCkBAIC0zNywxMSArMzksNiBAQAogI2RlZmluZSBsYnNfY21kX3dpdGhfcmVzcG9uc2UocHJpdiwgY21kbnIsIGNtZCkJXAogCWxic19jbWQocHJpdiwgY21kbnIsIGNtZCwgbGJzX2NtZF9jb3B5YmFjaywgKHVuc2lnbmVkIGxvbmcpIChjbWQpKQogCi1pbnQgbGJzX3ByZXBhcmVfYW5kX3NlbmRfY29tbWFuZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JdTE2IGNtZF9ubywKLQl1MTYgY21kX2FjdGlvbiwKLQl1MTYgd2FpdF9vcHRpb24sIHUzMiBjbWRfb2lkLCB2b2lkICpwZGF0YV9idWYpOwotCiB2b2lkIGxic19jbWRfYXN5bmMoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1aW50MTZfdCBjb21tYW5kLAogCXN0cnVjdCBjbWRfaGVhZGVyICppbl9jbWQsIGludCBpbl9jbWRfc2l6ZSk7CiAKQEAgLTkyLDEwICs4OSw2IEBACiBpbnQgbGJzX2NtZF84MDJfMTFfc2xlZXBfcGFyYW1zKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdWludDE2X3QgY21kX2FjdGlvbiwKIAkJCQlzdHJ1Y3Qgc2xlZXBfcGFyYW1zICpzcCk7CiAKLXZvaWQgbGJzX3BzX3NsZWVwKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgaW50IHdhaXRfb3B0aW9uKTsKLQotdm9pZCBsYnNfcHNfd2FrZXVwKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgaW50IHdhaXRfb3B0aW9uKTsKLQogdm9pZCBsYnNfcHNfY29uZmlybV9zbGVlcChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpOwogCiBpbnQgbGJzX3NldF9yYWRpbyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHU4IHByZWFtYmxlLCB1OCByYWRpb19vbik7CkBAIC0xMjcsNCArMTIwLDIwIEBACiAKIGludCBsYnNfc2V0X2RlZXBfc2xlZXAoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBpbnQgZGVlcF9zbGVlcCk7CiAKK2ludCBsYnNfc2V0X2hvc3Rfc2xlZXAoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBpbnQgaG9zdF9zbGVlcCk7CisKK2ludCBsYnNfc2V0X21vbml0b3JfbW9kZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGludCBlbmFibGUpOworCitpbnQgbGJzX2dldF9yc3NpKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgczggKnNuciwgczggKm5mKTsKKworaW50IGxic19zZXRfMTFkX2RvbWFpbl9pbmZvKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0LAorCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKipiYW5kcyk7CisKK2ludCBsYnNfZ2V0X3JlZyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHUxNiByZWcsIHUxNiBvZmZzZXQsIHUzMiAqdmFsdWUpOworCitpbnQgbGJzX3NldF9yZWcoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1MTYgcmVnLCB1MTYgb2Zmc2V0LCB1MzIgdmFsdWUpOworCitpbnQgbGJzX3NldF9wc19tb2RlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdTE2IGNtZF9hY3Rpb24sIGJvb2wgYmxvY2spOworCiAjZW5kaWYgLyogX0xCU19DTURfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kcmVzcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kcmVzcC5jCmluZGV4IDg4ZjcxMzEuLjVlOTVkYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZHJlc3AuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWRyZXNwLmMKQEAgLTUsMTggKzUsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KLSNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgogCi0jaW5jbHVkZSAiaG9zdC5oIgotI2luY2x1ZGUgImRlY2wuaCIKKyNpbmNsdWRlICJjZmcuaCIKICNpbmNsdWRlICJjbWQuaCIKLSNpbmNsdWRlICJkZWZzLmgiCi0jaW5jbHVkZSAiZGV2LmgiCi0jaW5jbHVkZSAiYXNzb2MuaCIKLSNpbmNsdWRlICJ3ZXh0LmgiCiAKIC8qKgogICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgZGlzY29ubmVjdCBldmVudC4gaXQKQEAgLTM4LDcgKzMxLDkgQEAKIAkgKiBJdCBjYXVzZXMgcHJvYmxlbSBpbiB0aGUgU3VwcGxpY2FudAogCSAqLwogCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMDApOwotCWxic19zZW5kX2Rpc2Nvbm5lY3Rfbm90aWZpY2F0aW9uKHByaXYpOworCisJaWYgKHByaXYtPndkZXYtPmlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQlsYnNfc2VuZF9kaXNjb25uZWN0X25vdGlmaWNhdGlvbihwcml2KTsKIAogCS8qIHJlcG9ydCBkaXNjb25uZWN0IHRvIHVwcGVyIGxheWVyICovCiAJbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5kZXYpOwpAQCAtNDksMTQxICs0NCwxNiBAQAogCXByaXYtPmN1cnJlbnR0eHNrYiA9IE5VTEw7CiAJcHJpdi0+dHhfcGVuZGluZ19sZW4gPSAwOwogCi0JLyogcmVzZXQgU05SL05GL1JTU0kgdmFsdWVzICovCi0JbWVtc2V0KHByaXYtPlNOUiwgMHgwMCwgc2l6ZW9mKHByaXYtPlNOUikpOwotCW1lbXNldChwcml2LT5ORiwgMHgwMCwgc2l6ZW9mKHByaXYtPk5GKSk7Ci0JbWVtc2V0KHByaXYtPlJTU0ksIDB4MDAsIHNpemVvZihwcml2LT5SU1NJKSk7Ci0JbWVtc2V0KHByaXYtPnJhd1NOUiwgMHgwMCwgc2l6ZW9mKHByaXYtPnJhd1NOUikpOwotCW1lbXNldChwcml2LT5yYXdORiwgMHgwMCwgc2l6ZW9mKHByaXYtPnJhd05GKSk7Ci0JcHJpdi0+bmV4dFNOUk5GID0gMDsKLQlwcml2LT5udW1TTlJORiA9IDA7CiAJcHJpdi0+Y29ubmVjdF9zdGF0dXMgPSBMQlNfRElTQ09OTkVDVEVEOwogCi0JLyogQ2xlYXIgb3V0IGFzc29jaWF0ZWQgU1NJRCBhbmQgQlNTSUQgc2luY2UgY29ubmVjdGlvbiBpcwotCSAqIG5vIGxvbmdlciB2YWxpZC4KLQkgKi8KLQltZW1zZXQoJnByaXYtPmN1cmJzc3BhcmFtcy5ic3NpZCwgMCwgRVRIX0FMRU4pOwotCW1lbXNldCgmcHJpdi0+Y3VyYnNzcGFyYW1zLnNzaWQsIDAsIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pOwotCXByaXYtPmN1cmJzc3BhcmFtcy5zc2lkX2xlbiA9IDA7Ci0KIAlpZiAocHJpdi0+cHNzdGF0ZSAhPSBQU19TVEFURV9GVUxMX1BPV0VSKSB7CiAJCS8qIG1ha2UgZmlybXdhcmUgdG8gZXhpdCBQUyBtb2RlICovCiAJCWxic19kZWJfY21kKCJkaXNjb25uZWN0ZWQsIHNvIGV4aXQgUFMgbW9kZVxuIik7Ci0JCWxic19wc193YWtldXAocHJpdiwgMCk7CisJCWxic19zZXRfcHNfbW9kZShwcml2LCBQU19NT0RFX0FDVElPTl9FWElUX1BTLCBmYWxzZSk7CiAJfQogCWxic19kZWJfbGVhdmUoTEJTX0RFQl9BU1NPQyk7CiB9CiAKLXN0YXRpYyBpbnQgbGJzX3JldF9yZWdfYWNjZXNzKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCSAgICAgICB1MTYgdHlwZSwgc3RydWN0IGNtZF9kc19jb21tYW5kICpyZXNwKQotewotCWludCByZXQgPSAwOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0NNRCk7Ci0KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIENNRF9SRVQoQ01EX01BQ19SRUdfQUNDRVNTKToKLQkJewotCQkJc3RydWN0IGNtZF9kc19tYWNfcmVnX2FjY2VzcyAqcmVnID0gJnJlc3AtPnBhcmFtcy5tYWNyZWc7Ci0KLQkJCXByaXYtPm9mZnNldHZhbHVlLm9mZnNldCA9ICh1MzIpbGUxNl90b19jcHUocmVnLT5vZmZzZXQpOwotCQkJcHJpdi0+b2Zmc2V0dmFsdWUudmFsdWUgPSBsZTMyX3RvX2NwdShyZWctPnZhbHVlKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQljYXNlIENNRF9SRVQoQ01EX0JCUF9SRUdfQUNDRVNTKToKLQkJewotCQkJc3RydWN0IGNtZF9kc19iYnBfcmVnX2FjY2VzcyAqcmVnID0gJnJlc3AtPnBhcmFtcy5iYnByZWc7Ci0KLQkJCXByaXYtPm9mZnNldHZhbHVlLm9mZnNldCA9ICh1MzIpbGUxNl90b19jcHUocmVnLT5vZmZzZXQpOwotCQkJcHJpdi0+b2Zmc2V0dmFsdWUudmFsdWUgPSByZWctPnZhbHVlOwotCQkJYnJlYWs7Ci0JCX0KLQotCWNhc2UgQ01EX1JFVChDTURfUkZfUkVHX0FDQ0VTUyk6Ci0JCXsKLQkJCXN0cnVjdCBjbWRfZHNfcmZfcmVnX2FjY2VzcyAqcmVnID0gJnJlc3AtPnBhcmFtcy5yZnJlZzsKLQotCQkJcHJpdi0+b2Zmc2V0dmFsdWUub2Zmc2V0ID0gKHUzMilsZTE2X3RvX2NwdShyZWctPm9mZnNldCk7Ci0JCQlwcml2LT5vZmZzZXR2YWx1ZS52YWx1ZSA9IHJlZy0+dmFsdWU7Ci0JCQlicmVhazsKLQkJfQotCi0JZGVmYXVsdDoKLQkJcmV0ID0gLTE7Ci0JfQotCi0JbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfQ01ELCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5lIGludCBoYW5kbGVfY21kX3Jlc3BvbnNlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCQkgICAgICBzdHJ1Y3QgY21kX2hlYWRlciAqY21kX3Jlc3BvbnNlKQotewotCXN0cnVjdCBjbWRfZHNfY29tbWFuZCAqcmVzcCA9IChzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKikgY21kX3Jlc3BvbnNlOwotCWludCByZXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdWludDE2X3QgcmVzcGNtZCA9IGxlMTZfdG9fY3B1KHJlc3AtPmNvbW1hbmQpOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0hPU1QpOwotCi0Jc3dpdGNoIChyZXNwY21kKSB7Ci0JY2FzZSBDTURfUkVUKENNRF9NQUNfUkVHX0FDQ0VTUyk6Ci0JY2FzZSBDTURfUkVUKENNRF9CQlBfUkVHX0FDQ0VTUyk6Ci0JY2FzZSBDTURfUkVUKENNRF9SRl9SRUdfQUNDRVNTKToKLQkJcmV0ID0gbGJzX3JldF9yZWdfYWNjZXNzKHByaXYsIHJlc3BjbWQsIHJlc3ApOwotCQlicmVhazsKLQotCWNhc2UgQ01EX1JFVChDTURfODAyXzExX1NFVF9BRkMpOgotCWNhc2UgQ01EX1JFVChDTURfODAyXzExX0dFVF9BRkMpOgotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKLQkJbWVtbW92ZSgodm9pZCAqKXByaXYtPmN1cl9jbWQtPmNhbGxiYWNrX2FyZywgJnJlc3AtPnBhcmFtcy5hZmMsCi0JCQlzaXplb2Yoc3RydWN0IGNtZF9kc184MDJfMTFfYWZjKSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIENNRF9SRVQoQ01EXzgwMl8xMV9CRUFDT05fU1RPUCk6Ci0JCWJyZWFrOwotCi0JY2FzZSBDTURfUkVUKENNRF84MDJfMTFfUlNTSSk6Ci0JCXJldCA9IGxic19yZXRfODAyXzExX3Jzc2kocHJpdiwgcmVzcCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBDTURfUkVUKENNRF84MDJfMTFfVFBDX0NGRyk6Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOwotCQltZW1tb3ZlKCh2b2lkICopcHJpdi0+Y3VyX2NtZC0+Y2FsbGJhY2tfYXJnLCAmcmVzcC0+cGFyYW1zLnRwY2NmZywKLQkJCXNpemVvZihzdHJ1Y3QgY21kX2RzXzgwMl8xMV90cGNfY2ZnKSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBDTURfUkVUKENNRF9CVF9BQ0NFU1MpOgotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKLQkJaWYgKHByaXYtPmN1cl9jbWQtPmNhbGxiYWNrX2FyZykKLQkJCW1lbWNweSgodm9pZCAqKXByaXYtPmN1cl9jbWQtPmNhbGxiYWNrX2FyZywKLQkJCSAgICAgICAmcmVzcC0+cGFyYW1zLmJ0LmFkZHIxLCAyICogRVRIX0FMRU4pOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOwotCQlicmVhazsKLQljYXNlIENNRF9SRVQoQ01EX0ZXVF9BQ0NFU1MpOgotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKLQkJaWYgKHByaXYtPmN1cl9jbWQtPmNhbGxiYWNrX2FyZykKLQkJCW1lbWNweSgodm9pZCAqKXByaXYtPmN1cl9jbWQtPmNhbGxiYWNrX2FyZywgJnJlc3AtPnBhcmFtcy5md3QsCi0JCQkgICAgICAgc2l6ZW9mKHJlc3AtPnBhcmFtcy5md3QpKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfUkVUKENNRF84MDJfMTFfQkVBQ09OX0NUUkwpOgotCQlyZXQgPSBsYnNfcmV0XzgwMl8xMV9iY25fY3RybChwcml2LCByZXNwKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlsYnNfcHJfZXJyKCJDTURfUkVTUDogdW5rbm93biBjbWQgcmVzcG9uc2UgMHglMDR4XG4iLAotCQkJICAgbGUxNl90b19jcHUocmVzcC0+Y29tbWFuZCkpOwotCQlicmVhazsKLQl9Ci0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX0hPU1QpOwotCXJldHVybiByZXQ7Ci19Ci0KIGludCBsYnNfcHJvY2Vzc19jb21tYW5kX3Jlc3BvbnNlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdTggKmRhdGEsIHUzMiBsZW4pCiB7CiAJdWludDE2X3QgcmVzcGNtZCwgY3VyY21kOwpAQCAtMjQyLDkgKzExMiw2IEBACiAJZGVsX3RpbWVyKCZwcml2LT5jb21tYW5kX3RpbWVyKTsKIAlwcml2LT5jbWRfdGltZWRfb3V0ID0gMDsKIAotCS8qIFN0b3JlIHRoZSByZXNwb25zZSBjb2RlIHRvIGN1cl9jbWRfcmV0Y29kZS4gKi8KLQlwcml2LT5jdXJfY21kX3JldGNvZGUgPSByZXN1bHQ7Ci0KIAlpZiAocmVzcGNtZCA9PSBDTURfUkVUKENNRF84MDJfMTFfUFNfTU9ERSkpIHsKIAkJc3RydWN0IGNtZF9kc184MDJfMTFfcHNfbW9kZSAqcHNtb2RlID0gKHZvaWQgKikgJnJlc3BbMV07CiAJCXUxNiBhY3Rpb24gPSBsZTE2X3RvX2NwdShwc21vZGUtPmFjdGlvbik7CkBAIC0yNjEsMTAgKzEyOCwxMCBAQAogCQkJICogYWQtaG9jIG1vZGUuIEl0IHRha2VzIHBsYWNlIGluCiAJCQkgKiBsYnNfZXhlY3V0ZV9uZXh0X2NvbW1hbmQoKS4KIAkJCSAqLwotCQkJaWYgKHByaXYtPm1vZGUgPT0gSVdfTU9ERV9BREhPQyAmJgotCQkJICAgIGFjdGlvbiA9PSBDTURfU1VCQ01EX0VOVEVSX1BTKQorCQkJaWYgKHByaXYtPndkZXYtPmlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SICYmCisJCQkgICAgYWN0aW9uID09IFBTX01PREVfQUNUSU9OX0VOVEVSX1BTKQogCQkJCXByaXYtPnBzbW9kZSA9IExCUzgwMl8xMVBPV0VSTU9ERUNBTTsKLQkJfSBlbHNlIGlmIChhY3Rpb24gPT0gQ01EX1NVQkNNRF9FTlRFUl9QUykgeworCQl9IGVsc2UgaWYgKGFjdGlvbiA9PSBQU19NT0RFX0FDVElPTl9FTlRFUl9QUykgewogCQkJcHJpdi0+bmVlZHRvd2FrZXVwID0gMDsKIAkJCXByaXYtPnBzc3RhdGUgPSBQU19TVEFURV9BV0FLRTsKIApAQCAtMjc5LDExICsxNDYsMTIgQEAKIAogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CiAJCQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKLQkJCQlsYnNfcHNfd2FrZXVwKHByaXYsIDApOworCQkJCWxic19zZXRfcHNfbW9kZShwcml2LCBQU19NT0RFX0FDVElPTl9FWElUX1BTLAorCQkJCQkJZmFsc2UpOwogCQkJCW11dGV4X2xvY2soJnByaXYtPmxvY2spOwogCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOwogCQkJfQotCQl9IGVsc2UgaWYgKGFjdGlvbiA9PSBDTURfU1VCQ01EX0VYSVRfUFMpIHsKKwkJfSBlbHNlIGlmIChhY3Rpb24gPT0gUFNfTU9ERV9BQ1RJT05fRVhJVF9QUykgewogCQkJcHJpdi0+bmVlZHRvd2FrZXVwID0gMDsKIAkJCXByaXYtPnBzc3RhdGUgPSBQU19TVEFURV9GVUxMX1BPV0VSOwogCQkJbGJzX2RlYl9ob3N0KCJDTURfUkVTUDogRVhJVF9QUyBjb21tYW5kIHJlc3BvbnNlXG4iKTsKQEAgLTMyNCw4ICsxOTIsNyBAQAogCWlmIChwcml2LT5jdXJfY21kICYmIHByaXYtPmN1cl9jbWQtPmNhbGxiYWNrKSB7CiAJCXJldCA9IHByaXYtPmN1cl9jbWQtPmNhbGxiYWNrKHByaXYsIHByaXYtPmN1cl9jbWQtPmNhbGxiYWNrX2FyZywKIAkJCQlyZXNwKTsKLQl9IGVsc2UKLQkJcmV0ID0gaGFuZGxlX2NtZF9yZXNwb25zZShwcml2LCByZXNwKTsKKwl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKIApAQCAtMzQxLDMyICsyMDgsMTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGxic19zZW5kX2NvbmZpcm13YWtlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKLXsKLQlzdHJ1Y3QgY21kX2hlYWRlciBjbWQ7Ci0JaW50IHJldCA9IDA7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfSE9TVCk7Ci0KLQljbWQuY29tbWFuZCA9IGNwdV90b19sZTE2KENNRF84MDJfMTFfV0FLRVVQX0NPTkZJUk0pOwotCWNtZC5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGNtZCkpOwotCWNtZC5zZXFudW0gPSBjcHVfdG9fbGUxNigrK3ByaXYtPnNlcW51bSk7Ci0JY21kLnJlc3VsdCA9IDA7Ci0KLQlsYnNfZGViX2hleChMQlNfREVCX0hPU1QsICJ3YWtlIGNvbmZpcm0iLCAodTggKikgJmNtZCwKLQkJc2l6ZW9mKGNtZCkpOwotCi0JcmV0ID0gcHJpdi0+aHdfaG9zdF90b19jYXJkKHByaXYsIE1WTVNfQ01ELCAodTggKikgJmNtZCwgc2l6ZW9mKGNtZCkpOwotCWlmIChyZXQpCi0JCWxic19wcl9hbGVydCgiU0VORF9XQUtFQ19DTUQ6IEhvc3QgdG8gQ2FyZCBmYWlsZWQgZm9yIENvbmZpcm0gV2FrZVxuIik7Ci0KLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9IT1NULCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCiBpbnQgbGJzX3Byb2Nlc3NfZXZlbnQoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1MzIgZXZlbnQpCiB7CiAJaW50IHJldCA9IDA7CisJc3RydWN0IGNtZF9oZWFkZXIgY21kOwogCiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX0NNRCk7CiAKQEAgLTQxMCw3ICsyNTUsMTAgQEAKIAkJaWYgKHByaXYtPnJlc2V0X2RlZXBfc2xlZXBfd2FrZXVwKQogCQkJcHJpdi0+cmVzZXRfZGVlcF9zbGVlcF93YWtldXAocHJpdik7CiAJCXByaXYtPmlzX2RlZXBfc2xlZXAgPSAwOwotCQlsYnNfc2VuZF9jb25maXJtd2FrZShwcml2KTsKKwkJbGJzX2NtZF9hc3luYyhwcml2LCBDTURfODAyXzExX1dBS0VVUF9DT05GSVJNLCAmY21kLAorCQkJCXNpemVvZihjbWQpKTsKKwkJcHJpdi0+aXNfaG9zdF9zbGVlcF9hY3RpdmF0ZWQgPSAwOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPmhvc3Rfc2xlZXBfcSk7CiAJCWJyZWFrOwogCiAJY2FzZSBNQUNSRUdfSU5UX0NPREVfREVFUF9TTEVFUF9BV0FLRToKQEAgLTQ0MSw3ICsyODksNyBAQAogCQkJICogaW4gbGJzX3BzX3dha2V1cCgpCiAJCQkgKi8KIAkJCWxic19kZWJfY21kKCJ3YWtpbmcgdXAgLi4uXG4iKTsKLQkJCWxic19wc193YWtldXAocHJpdiwgMCk7CisJCQlsYnNfc2V0X3BzX21vZGUocHJpdiwgUFNfTU9ERV9BQ1RJT05fRVhJVF9QUywgZmFsc2UpOwogCQl9CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWJ1Z2ZzLmMKaW5kZXggZGUyY2FhYy4uNjUxYTc5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlYnVnZnMuYwpAQCAtMSwxOCArMSwxMyBAQAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RjYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+Ci0jaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+CiAKLSNpbmNsdWRlICJkZXYuaCIKICNpbmNsdWRlICJkZWNsLmgiCi0jaW5jbHVkZSAiaG9zdC5oIgotI2luY2x1ZGUgImRlYnVnZnMuaCIKICNpbmNsdWRlICJjbWQuaCIKKyNpbmNsdWRlICJkZWJ1Z2ZzLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsYnNfZGlyOwogc3RhdGljIGNoYXIgKnN6U3RhdGVzW10gPSB7CkBAIC02MCw1MSArNTUsNiBAQAogCXJldHVybiByZXM7CiB9CiAKLQotc3RhdGljIHNzaXplX3QgbGJzX2dldHNjYW50YWJsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCi0JCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc2l6ZV90IHBvcyA9IDA7Ci0JaW50IG51bXNjYW5zZG9uZSA9IDAsIHJlczsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JY2hhciAqYnVmID0gKGNoYXIgKilhZGRyOwotCURFQ0xBUkVfU1NJRF9CVUYoc3NpZCk7Ci0Jc3RydWN0IGJzc19kZXNjcmlwdG9yICogaXRlcl9ic3M7Ci0JaWYgKCFidWYpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcG9zICs9IHNucHJpbnRmKGJ1Zitwb3MsIGxlbi1wb3MsCi0JCSIjIHwgY2ggIHwgcnNzaSB8ICAgICAgIGJzc2lkICAgICAgIHwgICBjYXAgICAgfCBRdWFsIHwgU1NJRFxuIik7Ci0KLQltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5IChpdGVyX2JzcywgJnByaXYtPm5ldHdvcmtfbGlzdCwgbGlzdCkgewotCQl1MTYgaWJzcyA9IChpdGVyX2Jzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9JQlNTKTsKLQkJdTE2IHByaXZhY3kgPSAoaXRlcl9ic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSk7Ci0JCXUxNiBzcGVjdHJ1bV9tZ210ID0gKGl0ZXJfYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NQRUNUUlVNX01HTVQpOwotCi0JCXBvcyArPSBzbnByaW50ZihidWYrcG9zLCBsZW4tcG9zLCAiJTAydXwgJTAzZCB8ICUwNGQgfCAlcE0gfCIsCi0JCQludW1zY2Fuc2RvbmUsIGl0ZXJfYnNzLT5jaGFubmVsLCBpdGVyX2Jzcy0+cnNzaSwKLQkJCWl0ZXJfYnNzLT5ic3NpZCk7Ci0JCXBvcyArPSBzbnByaW50ZihidWYrcG9zLCBsZW4tcG9zLCAiICUwNHgtIiwgaXRlcl9ic3MtPmNhcGFiaWxpdHkpOwotCQlwb3MgKz0gc25wcmludGYoYnVmK3BvcywgbGVuLXBvcywgIiVjJWMlYyB8IiwKLQkJCQlpYnNzID8gJ0EnIDogJ0knLCBwcml2YWN5ID8gJ1AnIDogJyAnLAotCQkJCXNwZWN0cnVtX21nbXQgPyAnUycgOiAnICcpOwotCQlwb3MgKz0gc25wcmludGYoYnVmK3BvcywgbGVuLXBvcywgIiAlMDRkIHwiLCBTQ0FOX1JTU0koaXRlcl9ic3MtPnJzc2kpKTsKLQkJcG9zICs9IHNucHJpbnRmKGJ1Zitwb3MsIGxlbi1wb3MsICIgJXNcbiIsCi0JCSAgICAgICAgICAgICAgICBwcmludF9zc2lkKHNzaWQsIGl0ZXJfYnNzLT5zc2lkLAotCQkJCQkgICBpdGVyX2Jzcy0+c3NpZF9sZW4pKTsKLQotCQludW1zY2Fuc2RvbmUrKzsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKLQotCXJlcyA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7Ci0KLQlmcmVlX3BhZ2UoYWRkcik7Ci0JcmV0dXJuIHJlczsKLX0KLQogc3RhdGljIHNzaXplX3QgbGJzX3NsZWVwcGFyYW1zX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCWNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1Ziwgc2l6ZV90IGNvdW50LAogCQkJCWxvZmZfdCAqcHBvcykKQEAgLTE3NCw2ICsxMjQsNzAgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc3NpemVfdCBsYnNfaG9zdF9zbGVlcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQljb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsIHNpemVfdCBjb3VudCwKKwkJCQlsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXNzaXplX3QgYnVmX3NpemUsIHJldDsKKwlpbnQgaG9zdF9zbGVlcDsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJY2hhciAqYnVmID0gKGNoYXIgKilhZGRyOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWJ1Zl9zaXplID0gbWluKGNvdW50LCBsZW4gLSAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgYnVmX3NpemUpKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisJcmV0ID0gc3NjYW5mKGJ1ZiwgIiVkIiwgJmhvc3Rfc2xlZXApOworCWlmIChyZXQgIT0gMSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJaWYgKGhvc3Rfc2xlZXAgPT0gMCkKKwkJcmV0ID0gbGJzX3NldF9ob3N0X3NsZWVwKHByaXYsIDApOworCWVsc2UgaWYgKGhvc3Rfc2xlZXAgPT0gMSkgeworCQlpZiAocHJpdi0+d29sX2NyaXRlcmlhID09IEVIU19SRU1PVkVfV0FLRVVQKSB7CisJCQlsYnNfcHJfaW5mbygid2FrZSBwYXJhbWV0ZXJzIG5vdCBjb25maWd1cmVkIik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CisJCXJldCA9IGxic19zZXRfaG9zdF9zbGVlcChwcml2LCAxKTsKKwl9IGVsc2UgeworCQlsYnNfcHJfZXJyKCJpbnZhbGlkIG9wdGlvblxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJaWYgKCFyZXQpCisJCXJldCA9IGNvdW50OworCitvdXRfdW5sb2NrOgorCWZyZWVfcGFnZShhZGRyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBsYnNfaG9zdF9zbGVlcF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKKwkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzc2l6ZV90IHJldDsKKwlzaXplX3QgcG9zID0gMDsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJY2hhciAqYnVmID0gKGNoYXIgKilhZGRyOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBvcyArPSBzbnByaW50ZihidWYsIGxlbiwgIiVkXG4iLCBwcml2LT5pc19ob3N0X3NsZWVwX2FjdGl2YXRlZCk7CisKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworCisJZnJlZV9wYWdlKGFkZHIpOworCXJldHVybiByZXQ7Cit9CisKIC8qCiAgKiBXaGVuIGNhbGxpbmcgQ01EXzgwMl8xMV9TVUJTQ1JJQkVfRVZFTlQgd2l0aCBDTURfQUNUX0dFVCwgbWUgbWlnaHQKICAqIGdldCBhIGJ1bmNoIG9mIHZlbmRvci1zcGVjaWZpYyBUTFZzIChhLmsuYS4gSUVzKSBiYWNrIGZyb20gdGhlCkBAIC00MzIsMzAgKzQ0NiwyNCBAQAogfQogCiAKLQogc3RhdGljIHNzaXplX3QgbGJzX3JkbWFjX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLAogCQkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBsYnNfb2Zmc2V0X3ZhbHVlIG9mZnZhbDsKIAlzc2l6ZV90IHBvcyA9IDA7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJY2hhciAqYnVmID0gKGNoYXIgKilhZGRyOworCXUzMiB2YWwgPSAwOworCiAJaWYgKCFidWYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jb2ZmdmFsLm9mZnNldCA9IHByaXYtPm1hY19vZmZzZXQ7Ci0Jb2ZmdmFsLnZhbHVlID0gMDsKLQotCXJldCA9IGxic19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwKLQkJCQlDTURfTUFDX1JFR19BQ0NFU1MsIDAsCi0JCQkJQ01EX09QVElPTl9XQUlURk9SUlNQLCAwLCAmb2ZmdmFsKTsKKwlyZXQgPSBsYnNfZ2V0X3JlZyhwcml2LCBDTURfTUFDX1JFR19BQ0NFU1MsIHByaXYtPm1hY19vZmZzZXQsICZ2YWwpOwogCW1kZWxheSgxMCk7CiAJaWYgKCFyZXQpIHsKLQkJcG9zICs9IHNucHJpbnRmKGJ1Zitwb3MsIGxlbi1wb3MsICJNQUNbMHgleF0gPSAweCUwOHhcbiIsCi0JCQkJcHJpdi0+bWFjX29mZnNldCwgcHJpdi0+b2Zmc2V0dmFsdWUudmFsdWUpOwotCisJCXBvcyA9IHNucHJpbnRmKGJ1ZiwgbGVuLCAiTUFDWzB4JXhdID0gMHglMDh4XG4iLAorCQkJCXByaXYtPm1hY19vZmZzZXQsIHZhbCk7CiAJCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CiAJfQogCWZyZWVfcGFnZShhZGRyKTsKQEAgLTQ5Myw3ICs1MDEsNiBAQAogCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzc2l6ZV90IHJlcywgYnVmX3NpemU7CiAJdTMyIG9mZnNldCwgdmFsdWU7Ci0Jc3RydWN0IGxic19vZmZzZXRfdmFsdWUgb2ZmdmFsOwogCXVuc2lnbmVkIGxvbmcgYWRkciA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAljaGFyICpidWYgPSAoY2hhciAqKWFkZHI7CiAJaWYgKCFidWYpCkBAIC01MTAsMTEgKzUxNyw3IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQlvZmZ2YWwub2Zmc2V0ID0gb2Zmc2V0OwotCW9mZnZhbC52YWx1ZSA9IHZhbHVlOwotCXJlcyA9IGxic19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwKLQkJCQlDTURfTUFDX1JFR19BQ0NFU1MsIDEsCi0JCQkJQ01EX09QVElPTl9XQUlURk9SUlNQLCAwLCAmb2ZmdmFsKTsKKwlyZXMgPSBsYnNfc2V0X3JlZyhwcml2LCBDTURfTUFDX1JFR19BQ0NFU1MsIG9mZnNldCwgdmFsdWUpOwogCW1kZWxheSgxMCk7CiAKIAlpZiAoIXJlcykKQEAgLTUyOCwyNSArNTMxLDIwIEBACiAJCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGxic19vZmZzZXRfdmFsdWUgb2ZmdmFsOwogCXNzaXplX3QgcG9zID0gMDsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgYWRkciA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAljaGFyICpidWYgPSAoY2hhciAqKWFkZHI7CisJdTMyIHZhbDsKKwogCWlmICghYnVmKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW9mZnZhbC5vZmZzZXQgPSBwcml2LT5iYnBfb2Zmc2V0OwotCW9mZnZhbC52YWx1ZSA9IDA7Ci0KLQlyZXQgPSBsYnNfcHJlcGFyZV9hbmRfc2VuZF9jb21tYW5kKHByaXYsCi0JCQkJQ01EX0JCUF9SRUdfQUNDRVNTLCAwLAotCQkJCUNNRF9PUFRJT05fV0FJVEZPUlJTUCwgMCwgJm9mZnZhbCk7CisJcmV0ID0gbGJzX2dldF9yZWcocHJpdiwgQ01EX0JCUF9SRUdfQUNDRVNTLCBwcml2LT5iYnBfb2Zmc2V0LCAmdmFsKTsKIAltZGVsYXkoMTApOwogCWlmICghcmV0KSB7Ci0JCXBvcyArPSBzbnByaW50ZihidWYrcG9zLCBsZW4tcG9zLCAiQkJQWzB4JXhdID0gMHglMDh4XG4iLAotCQkJCXByaXYtPmJicF9vZmZzZXQsIHByaXYtPm9mZnNldHZhbHVlLnZhbHVlKTsKLQorCQlwb3MgPSBzbnByaW50ZihidWYsIGxlbiwgIkJCUFsweCV4XSA9IDB4JTA4eFxuIiwKKwkJCQlwcml2LT5iYnBfb2Zmc2V0LCB2YWwpOwogCQlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOwogCX0KIAlmcmVlX3BhZ2UoYWRkcik7CkBAIC01ODUsNyArNTgzLDYgQEAKIAlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3NpemVfdCByZXMsIGJ1Zl9zaXplOwogCXUzMiBvZmZzZXQsIHZhbHVlOwotCXN0cnVjdCBsYnNfb2Zmc2V0X3ZhbHVlIG9mZnZhbDsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJY2hhciAqYnVmID0gKGNoYXIgKilhZGRyOwogCWlmICghYnVmKQpAQCAtNjAyLDExICs1OTksNyBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0Jb2ZmdmFsLm9mZnNldCA9IG9mZnNldDsKLQlvZmZ2YWwudmFsdWUgPSB2YWx1ZTsKLQlyZXMgPSBsYnNfcHJlcGFyZV9hbmRfc2VuZF9jb21tYW5kKHByaXYsCi0JCQkJQ01EX0JCUF9SRUdfQUNDRVNTLCAxLAotCQkJCUNNRF9PUFRJT05fV0FJVEZPUlJTUCwgMCwgJm9mZnZhbCk7CisJcmVzID0gbGJzX3NldF9yZWcocHJpdiwgQ01EX0JCUF9SRUdfQUNDRVNTLCBvZmZzZXQsIHZhbHVlKTsKIAltZGVsYXkoMTApOwogCiAJaWYgKCFyZXMpCkBAIC02MjAsMjUgKzYxMywyMCBAQAogCQkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBsYnNfb2Zmc2V0X3ZhbHVlIG9mZnZhbDsKIAlzc2l6ZV90IHBvcyA9IDA7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJY2hhciAqYnVmID0gKGNoYXIgKilhZGRyOworCXUzMiB2YWw7CisKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlvZmZ2YWwub2Zmc2V0ID0gcHJpdi0+cmZfb2Zmc2V0OwotCW9mZnZhbC52YWx1ZSA9IDA7Ci0KLQlyZXQgPSBsYnNfcHJlcGFyZV9hbmRfc2VuZF9jb21tYW5kKHByaXYsCi0JCQkJQ01EX1JGX1JFR19BQ0NFU1MsIDAsCi0JCQkJQ01EX09QVElPTl9XQUlURk9SUlNQLCAwLCAmb2ZmdmFsKTsKKwlyZXQgPSBsYnNfZ2V0X3JlZyhwcml2LCBDTURfUkZfUkVHX0FDQ0VTUywgcHJpdi0+cmZfb2Zmc2V0LCAmdmFsKTsKIAltZGVsYXkoMTApOwogCWlmICghcmV0KSB7Ci0JCXBvcyArPSBzbnByaW50ZihidWYrcG9zLCBsZW4tcG9zLCAiUkZbMHgleF0gPSAweCUwOHhcbiIsCi0JCQkJcHJpdi0+cmZfb2Zmc2V0LCBwcml2LT5vZmZzZXR2YWx1ZS52YWx1ZSk7Ci0KKwkJcG9zID0gc25wcmludGYoYnVmLCBsZW4sICJSRlsweCV4XSA9IDB4JTA4eFxuIiwKKwkJCQlwcml2LT5yZl9vZmZzZXQsIHZhbCk7CiAJCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CiAJfQogCWZyZWVfcGFnZShhZGRyKTsKQEAgLTY3Nyw3ICs2NjUsNiBAQAogCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzc2l6ZV90IHJlcywgYnVmX3NpemU7CiAJdTMyIG9mZnNldCwgdmFsdWU7Ci0Jc3RydWN0IGxic19vZmZzZXRfdmFsdWUgb2ZmdmFsOwogCXVuc2lnbmVkIGxvbmcgYWRkciA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAljaGFyICpidWYgPSAoY2hhciAqKWFkZHI7CiAJaWYgKCFidWYpCkBAIC02OTQsMTEgKzY4MSw3IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQlvZmZ2YWwub2Zmc2V0ID0gb2Zmc2V0OwotCW9mZnZhbC52YWx1ZSA9IHZhbHVlOwotCXJlcyA9IGxic19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwKLQkJCQlDTURfUkZfUkVHX0FDQ0VTUywgMSwKLQkJCQlDTURfT1BUSU9OX1dBSVRGT1JSU1AsIDAsICZvZmZ2YWwpOworCXJlcyA9IGxic19zZXRfcmVnKHByaXYsIENNRF9SRl9SRUdfQUNDRVNTLCBvZmZzZXQsIHZhbHVlKTsKIAltZGVsYXkoMTApOwogCiAJaWYgKCFyZXMpCkBAIC03MjMsMTAgKzcwNiwxMCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGxic19kZWJ1Z2ZzX2ZpbGVzIGRlYnVnZnNfZmlsZXNbXSA9IHsKIAl7ICJpbmZvIiwgMDQ0NCwgRk9QUyhsYnNfZGV2X2luZm8sIHdyaXRlX2ZpbGVfZHVtbXkpLCB9LAotCXsgImdldHNjYW50YWJsZSIsIDA0NDQsIEZPUFMobGJzX2dldHNjYW50YWJsZSwKLQkJCQkJd3JpdGVfZmlsZV9kdW1teSksIH0sCiAJeyAic2xlZXBwYXJhbXMiLCAwNjQ0LCBGT1BTKGxic19zbGVlcHBhcmFtc19yZWFkLAogCQkJCWxic19zbGVlcHBhcmFtc193cml0ZSksIH0sCisJeyAiaG9zdHNsZWVwIiwgMDY0NCwgRk9QUyhsYnNfaG9zdF9zbGVlcF9yZWFkLAorCQkJCWxic19ob3N0X3NsZWVwX3dyaXRlKSwgfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbGJzX2RlYnVnZnNfZmlsZXMgZGVidWdmc19ldmVudHNfZmlsZXNbXSA9IHsKQEAgLTg5MSw3ICs4NzQsNyBAQAogCiAJcCA9IGJ1ZjsKIAotCWQgPSAoc3RydWN0IGRlYnVnX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJZCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1fb2ZfaXRlbXM7IGkrKykgewogCQlpZiAoZFtpXS5zaXplID09IDEpCkBAIC05MzAsNyArOTEzLDcgQEAKIAljaGFyICpwMDsKIAljaGFyICpwMTsKIAljaGFyICpwMjsKLQlzdHJ1Y3QgZGVidWdfZGF0YSAqZCA9IChzdHJ1Y3QgZGVidWdfZGF0YSAqKWYtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGVidWdfZGF0YSAqZCA9IGYtPnByaXZhdGVfZGF0YTsKIAogCXBkYXRhID0ga21hbGxvYyhjbnQsIEdGUF9LRVJORUwpOwogCWlmIChwZGF0YSA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVjbC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVjbC5oCmluZGV4IDcwOWZmY2EuLjFkMTQxZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlY2wuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWNsLmgKQEAgLTEsMyArMSw0IEBACisKIC8qKgogICAqICBUaGlzIGZpbGUgY29udGFpbnMgZGVjbGFyYXRpb24gcmVmZXJyaW5nIHRvCiAgICogIGZ1bmN0aW9ucyBkZWZpbmVkIGluIG90aGVyIHNvdXJjZSBmaWxlcwpAQCAtMTIsNiArMTMsNyBAQAogc3RydWN0IGxic19wcml2YXRlOwogc3RydWN0IHNrX2J1ZmY7CiBzdHJ1Y3QgbmV0X2RldmljZTsKK3N0cnVjdCBjbWRfZHNfY29tbWFuZDsKIAogCiAvKiBldGh0b29sLmMgKi8KQEAgLTM0LDExICszNiwxMyBAQAogdm9pZCBsYnNfc3RvcF9jYXJkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdik7CiB2b2lkIGxic19ob3N0X3RvX2NhcmRfZG9uZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpOwogCitpbnQgbGJzX3J0YXBfc3VwcG9ydGVkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdik7CisKIGludCBsYnNfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpOwogdm9pZCBsYnNfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBpbnQgbGJzX3N1c3BlbmQoc3RydWN0IGxic19wcml2YXRlICpwcml2KTsKLXZvaWQgbGJzX3Jlc3VtZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpOworaW50IGxic19yZXN1bWUoc3RydWN0IGxic19wcml2YXRlICpwcml2KTsKIAogdm9pZCBsYnNfcXVldWVfZXZlbnQoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1MzIgZXZlbnQpOwogdm9pZCBsYnNfbm90aWZ5X2NvbW1hbmRfcmVzcG9uc2Uoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1OCByZXNwX2lkeCk7CkBAIC00OSw1ICs1Myw0IEBACiB1MzIgbGJzX2Z3X2luZGV4X3RvX2RhdGFfcmF0ZSh1OCBpbmRleCk7CiB1OCBsYnNfZGF0YV9yYXRlX3RvX2Z3X2luZGV4KHUzMiByYXRlKTsKIAotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlZnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlZnMuaAppbmRleCBlYTNmMTBlLi5kMDBjNzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVmcy5oCkBAIC0xNzIsMTEgKzE3Miw2IEBACiAjZGVmaW5lIE1SVkRSVl9NQVhfQlNTX0RFU0NSSVBUUwkJMTYKICNkZWZpbmUgTVJWRFJWX01BWF9SRUdJT05fQ09ERQkJCTYKIAotI2RlZmluZSBNUlZEUlZfSUdOT1JFX01VTFRJUExFX0RUSU0JCTB4ZmZmZQotI2RlZmluZSBNUlZEUlZfTUlOX01VTFRJUExFX0RUSU0JCTEKLSNkZWZpbmUgTVJWRFJWX01BWF9NVUxUSVBMRV9EVElNCQk1Ci0jZGVmaW5lIE1SVkRSVl9ERUZBVUxUX01VTFRJUExFX0RUSU0JCTEKLQogI2RlZmluZSBNUlZEUlZfREVGQVVMVF9MSVNURU5fSU5URVJWQUwJCTEwCiAKICNkZWZpbmUJTVJWRFJWX0NIQU5ORUxTX1BFUl9TQ0FOCQk0CkBAIC0zMDEsMTkgKzI5Niw2IEBACiAjZGVmaW5lCUJBTkRfRwkJCSgweDAyKQogI2RlZmluZSBBTExfODAyXzExX0JBTkRTCShCQU5EX0IgfCBCQU5EX0cpCiAKLS8qKiBNQUNSTyBERUZJTklUSU9OUyAqLwotI2RlZmluZSBDQUxfTkYoTkYpCQkJKChzMzIpKC0oczMyKShORikpKQotI2RlZmluZSBDQUxfUlNTSShTTlIsIE5GKSAJCSgoczMyKSgoczMyKShTTlIpICsgQ0FMX05GKE5GKSkpCi0jZGVmaW5lIFNDQU5fUlNTSShSU1NJKQkJCSgweDEwMCAtICgodTgpKFJTU0kpKSkKLQotI2RlZmluZSBERUZBVUxUX0JDTl9BVkdfRkFDVE9SCQk4Ci0jZGVmaW5lIERFRkFVTFRfREFUQV9BVkdfRkFDVE9SCQk4Ci0jZGVmaW5lIEFWR19TQ0FMRQkJCTEwMAotI2RlZmluZSBDQUxfQVZHX1NOUl9ORihBVkcsIFNOUk5GLCBOKSAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICgoKEFWRykgPT0gMCkgPyAoKHUxNikoU05STkYpICogQVZHX1NDQUxFKSA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICgoKChpbnQpKEFWRykgKiAoTiAtMSkpICsgKCh1MTYpKFNOUk5GKSAqIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIEFWR19TQ0FMRSkpICAvIE4pKQotCiAjZGVmaW5lIE1BWF9SQVRFUwkJCTE0CiAKICNkZWZpbmUJTUFYX0xFRFMJCQk4CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCmluZGV4IGE1NDg4MGUuLjNjN2UyNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCkBAIC03LDggKzcsOCBAQAogI2RlZmluZSBfTEJTX0RFVl9IXwogCiAjaW5jbHVkZSAibWVzaC5oIgotI2luY2x1ZGUgInNjYW4uaCIKLSNpbmNsdWRlICJhc3NvYy5oIgorI2luY2x1ZGUgImRlZnMuaCIKKyNpbmNsdWRlICJob3N0LmgiCiAKICNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgogCkBAIC0yOSw3ICsyOSw2IEBACiAJLyogQmFzaWMgbmV0d29ya2luZyAqLwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJdTMyIGNvbm5lY3Rfc3RhdHVzOwotCWludCBpbmZyYV9vcGVuOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBtY2FzdF93b3JrOwogCXUzMiBucl9vZl9tdWx0aWNhc3RtYWNhZGRyOwogCXU4IG11bHRpY2FzdGxpc3RbTVJWRFJWX01BWF9NVUxUSUNBU1RfTElTVF9TSVpFXVtFVEhfQUxFTl07CkBAIC0zNyw2ICszNiw5IEBACiAJLyogQ0ZHODAyMTEgKi8KIAlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2OwogCWJvb2wgd2lwaHlfcmVnaXN0ZXJlZDsKKwlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpzY2FuX3JlcTsKKwl1OCBhc3NvY19ic3NbRVRIX0FMRU5dOworCXU4IGRpc2Fzc29jX3JlYXNvbjsKIAogCS8qIE1lc2ggKi8KIAlzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9kZXY7IC8qIFZpcnR1YWwgZGV2aWNlICovCkBAIC00OSwxMCArNTEsNiBAQAogCXU4IG1lc2hfc3NpZF9sZW47CiAjZW5kaWYKIAotCS8qIE1vbml0b3IgbW9kZSAqLwotCXN0cnVjdCBuZXRfZGV2aWNlICpydGFwX25ldF9kZXY7Ci0JdTMyIG1vbml0b3Jtb2RlOwotCiAJLyogRGVidWdmcyAqLwogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZGlyOwogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZGVidWc7CkBAIC02Niw3ICs2NCw2IEBACiAJdTMyIG1hY19vZmZzZXQ7CiAJdTMyIGJicF9vZmZzZXQ7CiAJdTMyIHJmX29mZnNldDsKLQlzdHJ1Y3QgbGJzX29mZnNldF92YWx1ZSBvZmZzZXR2YWx1ZTsKIAogCS8qIFBvd2VyIG1hbmFnZW1lbnQgKi8KIAl1MTYgcHNtb2RlOwpAQCAtNzUsNiArNzIsNyBAQAogCiAJLyogRGVlcCBzbGVlcCAqLwogCWludCBpc19kZWVwX3NsZWVwOworCWludCBkZWVwX3NsZWVwX3JlcXVpcmVkOwogCWludCBpc19hdXRvX2RlZXBfc2xlZXBfZW5hYmxlZDsKIAlpbnQgd2FrZXVwX2Rldl9yZXF1aXJlZDsKIAlpbnQgaXNfYWN0aXZpdHlfZGV0ZWN0ZWQ7CkBAIC04Miw2ICs4MCwxMSBAQAogCXdhaXRfcXVldWVfaGVhZF90IGRzX2F3YWtlX3E7CiAJc3RydWN0IHRpbWVyX2xpc3QgYXV0b19kZWVwc2xlZXBfdGltZXI7CiAKKwkvKiBIb3N0IHNsZWVwKi8KKwlpbnQgaXNfaG9zdF9zbGVlcF9jb25maWd1cmVkOworCWludCBpc19ob3N0X3NsZWVwX2FjdGl2YXRlZDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBob3N0X3NsZWVwX3E7CisKIAkvKiBIYXJkd2FyZSBhY2Nlc3MgKi8KIAl2b2lkICpjYXJkOwogCXU4IGZ3X3JlYWR5OwpAQCAtMTA4LDEyICsxMTEsMTAgQEAKIAlzdHJ1Y3QgY21kX2N0cmxfbm9kZSAqY3VyX2NtZDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNtZGZyZWVxOyAgICAvKiBmcmVlIGNvbW1hbmQgYnVmZmVycyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgY21kcGVuZGluZ3E7IC8qIHBlbmRpbmcgY29tbWFuZCBidWZmZXJzICovCi0Jd2FpdF9xdWV1ZV9oZWFkX3QgY21kX3BlbmRpbmc7CiAJc3RydWN0IHRpbWVyX2xpc3QgY29tbWFuZF90aW1lcjsKIAlpbnQgY21kX3RpbWVkX291dDsKIAogCS8qIENvbW1hbmQgcmVzcG9uc2VzIHNlbnQgZnJvbSB0aGUgaGFyZHdhcmUgdG8gdGhlIGRyaXZlciAqLwotCWludCBjdXJfY21kX3JldGNvZGU7CiAJdTggcmVzcF9pZHg7CiAJdTggcmVzcF9idWZbMl1bTEJTX1VQTERfU0laRV07CiAJdTMyIHJlc3BfbGVuWzJdOwpAQCAtMTI3LDE0ICsxMjgsMTAgQEAKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya190aHJlYWQ7CiAKIAkvKiogRW5jcnlwdGlvbiBzdHVmZiAqLwotCXN0cnVjdCBsYnNfODAyXzExX3NlY3VyaXR5IHNlY2luZm87Ci0Jc3RydWN0IGVuY19rZXkgd3BhX21jYXN0X2tleTsKLQlzdHJ1Y3QgZW5jX2tleSB3cGFfdW5pY2FzdF9rZXk7Ci0JdTggd3BhX2llW01BWF9XUEFfSUVfTEVOXTsKLQl1OCB3cGFfaWVfbGVuOwotCXUxNiB3ZXBfdHhfa2V5aWR4OwotCXN0cnVjdCBlbmNfa2V5IHdlcF9rZXlzWzRdOwogCXU4IGF1dGh0eXBlX2F1dG87CisJdTggd2VwX3R4X2tleTsKKwl1OCB3ZXBfa2V5WzRdW1dMQU5fS0VZX0xFTl9XRVAxMDRdOworCXU4IHdlcF9rZXlfbGVuWzRdOwogCiAJLyogV2FrZSBPbiBMQU4gKi8KIAl1aW50MzJfdCB3b2xfY3JpdGVyaWE7CkBAIC0xNTUsNiArMTUyLDcgQEAKIAkvKiBOSUMvbGluayBvcGVyYXRpb24gY2hhcmFjdGVyaXN0aWNzICovCiAJdTE2IG1hY19jb250cm9sOwogCXU4IHJhZGlvX29uOworCXU4IGN1cl9yYXRlOwogCXU4IGNoYW5uZWw7CiAJczE2IHR4cG93ZXJfY3VyOwogCXMxNiB0eHBvd2VyX21pbjsKQEAgLTE2Myw0MiArMTYxLDYgQEAKIAkvKiogU2Nhbm5pbmcgKi8KIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHNjYW5fd29yazsKIAlpbnQgc2Nhbl9jaGFubmVsOwotCS8qIHJlbWVtYmVyIHdoaWNoIGNoYW5uZWwgd2FzIHNjYW5uZWQgbGFzdCwgIT0gMCBpZiBjdXJyZW50bHkgc2Nhbm5pbmcgKi8KLQl1OCBzY2FuX3NzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTiArIDFdOwotCXU4IHNjYW5fc3NpZF9sZW47Ci0KLQkvKiBBc3NvY2lhdGluZyAqLwotCXN0cnVjdCBkZWxheWVkX3dvcmsgYXNzb2Nfd29yazsKLQlzdHJ1Y3QgY3VycmVudF9ic3NfcGFyYW1zIGN1cmJzc3BhcmFtczsKLQl1OCBtb2RlOwotCXN0cnVjdCBsaXN0X2hlYWQgbmV0d29ya19saXN0OwotCXN0cnVjdCBsaXN0X2hlYWQgbmV0d29ya19mcmVlX2xpc3Q7Ci0Jc3RydWN0IGJzc19kZXNjcmlwdG9yICpuZXR3b3JrczsKLQlzdHJ1Y3QgYXNzb2NfcmVxdWVzdCAqIHBlbmRpbmdfYXNzb2NfcmVxOwotCXN0cnVjdCBhc3NvY19yZXF1ZXN0ICogaW5fcHJvZ3Jlc3NfYXNzb2NfcmVxOwotCXVpbnQxNl90IGVuYWJsZWh3YXV0bzsKLQotCS8qIEFESE9DICovCi0JdTE2IGJlYWNvbl9wZXJpb2Q7Ci0JdTggYmVhY29uX2VuYWJsZTsKLQl1OCBhZGhvY2NyZWF0ZTsKLQotCS8qIFdFWFQgKi8KLQljaGFyIG5hbWVbREVWX05BTUVfTEVOXTsKLQl1OCBub2RlbmFtZVsxNl07Ci0Jc3RydWN0IGl3X3N0YXRpc3RpY3Mgd3N0YXRzOwotCXU4IGN1cl9yYXRlOwotI2RlZmluZQlNQVhfUkVHSU9OX0NIQU5ORUxfTlVNCTIKLQlzdHJ1Y3QgcmVnaW9uX2NoYW5uZWwgcmVnaW9uX2NoYW5uZWxbTUFYX1JFR0lPTl9DSEFOTkVMX05VTV07Ci0KLQkvKiogUmVxdWVzdGVkIFNpZ25hbCBTdHJlbmd0aCovCi0JdTE2IFNOUltNQVhfVFlQRV9CXVtNQVhfVFlQRV9BVkddOwotCXUxNiBORltNQVhfVFlQRV9CXVtNQVhfVFlQRV9BVkddOwotCXU4IFJTU0lbTUFYX1RZUEVfQl1bTUFYX1RZUEVfQVZHXTsKLQl1OCByYXdTTlJbREVGQVVMVF9EQVRBX0FWR19GQUNUT1JdOwotCXU4IHJhd05GW0RFRkFVTFRfREFUQV9BVkdfRkFDVE9SXTsKLQl1MTYgbmV4dFNOUk5GOwotCXUxNiBudW1TTlJORjsKIH07CiAKIGV4dGVybiBzdHJ1Y3QgY21kX2NvbmZpcm1fc2xlZXAgY29uZmlybV9zbGVlcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2V0aHRvb2wuYwppbmRleCAzODA0YTU4Li41MDE5M2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZXRodG9vbC5jCkBAIC0yLDEzICsyLDggQEAKICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAotI2luY2x1ZGUgImhvc3QuaCIKICNpbmNsdWRlICJkZWNsLmgiCi0jaW5jbHVkZSAiZGVmcy5oIgotI2luY2x1ZGUgImRldi5oIgotI2luY2x1ZGUgIndleHQuaCIKICNpbmNsdWRlICJjbWQuaCIKLSNpbmNsdWRlICJtZXNoLmgiCiAKIAogc3RhdGljIHZvaWQgbGJzX2V0aHRvb2xfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTY5LDE0ICs2NCwxMSBAQAogewogCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKIAotCWlmIChwcml2LT53b2xfY3JpdGVyaWEgPT0gMHhmZmZmZmZmZikgewotCQkvKiBJbnRlcmZhY2UgZHJpdmVyIGRpZG4ndCBjb25maWd1cmUgd2FrZSAqLwotCQl3b2wtPnN1cHBvcnRlZCA9IHdvbC0+d29sb3B0cyA9IDA7Ci0JCXJldHVybjsKLQl9Ci0KIAl3b2wtPnN1cHBvcnRlZCA9IFdBS0VfVUNBU1R8V0FLRV9NQ0FTVHxXQUtFX0JDQVNUfFdBS0VfUEhZOwogCisJaWYgKHByaXYtPndvbF9jcml0ZXJpYSA9PSBFSFNfUkVNT1ZFX1dBS0VVUCkKKwkJcmV0dXJuOworCiAJaWYgKHByaXYtPndvbF9jcml0ZXJpYSAmIEVIU19XQUtFX09OX1VOSUNBU1RfREFUQSkKIAkJd29sLT53b2xvcHRzIHw9IFdBS0VfVUNBU1Q7CiAJaWYgKHByaXYtPndvbF9jcml0ZXJpYSAmIEVIU19XQUtFX09OX01VTFRJQ0FTVF9EQVRBKQpAQCAtOTEsMjMgKzgzLDIyIEBACiAJCQkgICAgICAgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQogewogCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKLQl1aW50MzJfdCBjcml0ZXJpYSA9IDA7CiAKIAlpZiAod29sLT53b2xvcHRzICYgfihXQUtFX1VDQVNUfFdBS0VfTUNBU1R8V0FLRV9CQ0FTVHxXQUtFX1BIWSkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAorCXByaXYtPndvbF9jcml0ZXJpYSA9IDA7CiAJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfVUNBU1QpCi0JCWNyaXRlcmlhIHw9IEVIU19XQUtFX09OX1VOSUNBU1RfREFUQTsKKwkJcHJpdi0+d29sX2NyaXRlcmlhIHw9IEVIU19XQUtFX09OX1VOSUNBU1RfREFUQTsKIAlpZiAod29sLT53b2xvcHRzICYgV0FLRV9NQ0FTVCkKLQkJY3JpdGVyaWEgfD0gRUhTX1dBS0VfT05fTVVMVElDQVNUX0RBVEE7CisJCXByaXYtPndvbF9jcml0ZXJpYSB8PSBFSFNfV0FLRV9PTl9NVUxUSUNBU1RfREFUQTsKIAlpZiAod29sLT53b2xvcHRzICYgV0FLRV9CQ0FTVCkKLQkJY3JpdGVyaWEgfD0gRUhTX1dBS0VfT05fQlJPQURDQVNUX0RBVEE7CisJCXByaXYtPndvbF9jcml0ZXJpYSB8PSBFSFNfV0FLRV9PTl9CUk9BRENBU1RfREFUQTsKIAlpZiAod29sLT53b2xvcHRzICYgV0FLRV9QSFkpCi0JCWNyaXRlcmlhIHw9IEVIU19XQUtFX09OX01BQ19FVkVOVDsKKwkJcHJpdi0+d29sX2NyaXRlcmlhIHw9IEVIU19XQUtFX09OX01BQ19FVkVOVDsKIAlpZiAod29sLT53b2xvcHRzID09IDApCi0JCWNyaXRlcmlhIHw9IEVIU19SRU1PVkVfV0FLRVVQOwotCi0JcmV0dXJuIGxic19ob3N0X3NsZWVwX2NmZyhwcml2LCBjcml0ZXJpYSwgKHN0cnVjdCB3b2xfY29uZmlnICopTlVMTCk7CisJCXByaXYtPndvbF9jcml0ZXJpYSB8PSBFSFNfUkVNT1ZFX1dBS0VVUDsKKwlyZXR1cm4gMDsKIH0KIAogY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGxic19ldGh0b29sX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hvc3QuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hvc3QuaAppbmRleCAzODA5YzBiLi41ZWFjMTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaG9zdC5oCkBAIC05NCwxMSArOTQsOSBAQAogI2RlZmluZSBDTURfODAyXzExX0JFQUNPTl9DVFJMICAgICAgICAgICAgICAgICAgMHgwMGIwCiAKIC8qIEZvciB0aGUgSUVFRSBQb3dlciBTYXZlICovCi0jZGVmaW5lIENNRF9TVUJDTURfRU5URVJfUFMgICAgICAgICAgICAgICAgICAgICAweDAwMzAKLSNkZWZpbmUgQ01EX1NVQkNNRF9FWElUX1BTICAgICAgICAgICAgICAgICAgICAgIDB4MDAzMQotI2RlZmluZSBDTURfU1VCQ01EX1NMRUVQX0NPTkZJUk1FRCAgICAgICAgICAgICAgMHgwMDM0Ci0jZGVmaW5lIENNRF9TVUJDTURfRlVMTF9QT1dFUkRPV04gICAgICAgICAgICAgICAweDAwMzUKLSNkZWZpbmUgQ01EX1NVQkNNRF9GVUxMX1BPV0VSVVAgICAgICAgICAgICAgICAgIDB4MDAzNgorI2RlZmluZSBQU19NT0RFX0FDVElPTl9FTlRFUl9QUyAgICAgICAgICAgICAgICAgMHgwMDMwCisjZGVmaW5lIFBTX01PREVfQUNUSU9OX0VYSVRfUFMgICAgICAgICAgICAgICAgICAweDAwMzEKKyNkZWZpbmUgUFNfTU9ERV9BQ1RJT05fU0xFRVBfQ09ORklSTUVEICAgICAgICAgIDB4MDAzNAogCiAjZGVmaW5lIENNRF9FTkFCTEVfUlNOICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKICNkZWZpbmUgQ01EX0RJU0FCTEVfUlNOICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMApAQCAtMTYzLDExICsxNjEsNiBAQAogI2RlZmluZSBDTURfQUNUX1NFVF9UWF9GSVhfUkFURSAgICAgICAgICAgICAgICAgMHgwMDAxCiAjZGVmaW5lIENNRF9BQ1RfR0VUX1RYX1JBVEUgICAgICAgICAgICAgICAgICAgICAweDAwMDIKIAotLyogRGVmaW5lIGFjdGlvbiBvciBvcHRpb24gZm9yIENNRF84MDJfMTFfUFNfTU9ERSAqLwotI2RlZmluZSBDTURfVFlQRV9DQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwCi0jZGVmaW5lIENNRF9UWVBFX01BWF9QU1AgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKLSNkZWZpbmUgQ01EX1RZUEVfRkFTVF9QU1AgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgotCiAvKiBPcHRpb25zIGZvciBDTURfODAyXzExX0ZXX1dBS0VfTUVUSE9EICovCiAjZGVmaW5lIENNRF9XQUtFX01FVEhPRF9VTkNIQU5HRUQgICAgICAgICAgICAgICAweDAwMDAKICNkZWZpbmUgQ01EX1dBS0VfTUVUSE9EX0NPTU1BTkRfSU5UICAgICAgICAgICAgIDB4MDAwMQpAQCAtMzI2LDcgKzMxOSw3IEBACiAJdTggcGt0ZGVsYXlfMm1zOwogCS8qIHJlc2VydmVkICovCiAJdTggcmVzZXJ2ZWQxOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBSeFBEIERlc2NyaXB0b3IgKi8KIHN0cnVjdCByeHBkIHsKQEAgLTMzOSw4ICszMzIsOCBAQAogCQkJdTggYnNzX3R5cGU7CiAJCQkvKiBCU1MgbnVtYmVyICovCiAJCQl1OCBic3NfbnVtOwotCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBic3M7Ci0JfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgdTsKKwkJfSBfX3BhY2tlZCBic3M7CisJfSBfX3BhY2tlZCB1OwogCiAJLyogU05SICovCiAJdTggc25yOwpAQCAtMzY2LDE0ICszNTksMTQgQEAKIAkvKiBQa3QgUHJpb3JpdHkgKi8KIAl1OCBwcmlvcml0eTsKIAl1OCByZXNlcnZlZFszXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGNtZF9oZWFkZXIgewogCV9fbGUxNiBjb21tYW5kOwogCV9fbGUxNiBzaXplOwogCV9fbGUxNiBzZXFudW07CiAJX19sZTE2IHJlc3VsdDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogR2VuZXJpYyBzdHJ1Y3R1cmUgdG8gaG9sZCBhbGwga2V5IHR5cGVzLiAqLwogc3RydWN0IGVuY19rZXkgewpAQCAtMzg3LDcgKzM4MCwyMyBAQAogc3RydWN0IGxic19vZmZzZXRfdmFsdWUgewogCXUzMiBvZmZzZXQ7CiAJdTMyIHZhbHVlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOworCisjZGVmaW5lIE1BWF8xMURfVFJJUExFVFMJODMKKworc3RydWN0IG1ydmxfaWVfZG9tYWluX3BhcmFtX3NldCB7CisJc3RydWN0IG1ydmxfaWVfaGVhZGVyIGhlYWRlcjsKKworCXU4IGNvdW50cnlfY29kZVszXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvdW50cnlfaWVfdHJpcGxldCB0cmlwbGV0W01BWF8xMURfVFJJUExFVFNdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGNtZF9kc184MDJfMTFkX2RvbWFpbl9pbmZvIHsKKwlzdHJ1Y3QgY21kX2hlYWRlciBoZHI7CisKKwlfX2xlMTYgYWN0aW9uOworCXN0cnVjdCBtcnZsX2llX2RvbWFpbl9wYXJhbV9zZXQgZG9tYWluOworfSBfX3BhY2tlZDsKIAogLyoKICAqIERlZmluZSBkYXRhIHN0cnVjdHVyZSBmb3IgQ01EX0dFVF9IV19TUEVDCkBAIC00MjYsNyArNDM1LDcgQEAKIAogCS8qRlcvSFcgY2FwYWJpbGl0eSAqLwogCV9fbGUzMiBmd2NhcGluZm87Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBjbWRfZHNfODAyXzExX3N1YnNjcmliZV9ldmVudCB7CiAJc3RydWN0IGNtZF9oZWFkZXIgaGRyOwpAQCAtNDQwLDcgKzQ0OSw3IEBACiAJICogYnVtcCB0aGlzIHVwIGEgYml0LgogCSAqLwogCXVpbnQ4X3QgdGx2WzEyOF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qCiAgKiBUaGlzIHNjYW4gaGFuZGxlIENvdW50cnkgSW5mb3JtYXRpb24gSUUoODAyLjExZCBjb21wbGlhbnQpCkBAIC00NTIsNyArNDYxLDcgQEAKIAl1aW50OF90IGJzc3R5cGU7CiAJdWludDhfdCBic3NpZFtFVEhfQUxFTl07CiAJdWludDhfdCB0bHZidWZmZXJbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBjbWRfZHNfODAyXzExX3NjYW5fcnNwIHsKIAlzdHJ1Y3QgY21kX2hlYWRlciBoZHI7CkBAIC00NjAsNyArNDY5LDcgQEAKIAlfX2xlMTYgYnNzZGVzY3JpcHRzaXplOwogCXVpbnQ4X3QgbnJfc2V0czsKIAl1aW50OF90IGJzc2Rlc2NfYW5kX3RsdmJ1ZmZlclswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGNtZF9kc184MDJfMTFfZ2V0X2xvZyB7CiAJc3RydWN0IGNtZF9oZWFkZXIgaGRyOwpAQCAtNDc4LDIwICs0ODcsMjAgQEAKIAlfX2xlMzIgZmNzZXJyb3I7CiAJX19sZTMyIHR4ZnJhbWU7CiAJX19sZTMyIHdlcHVuZGVjcnlwdGFibGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBjbWRfZHNfbWFjX2NvbnRyb2wgewogCXN0cnVjdCBjbWRfaGVhZGVyIGhkcjsKIAlfX2xlMTYgYWN0aW9uOwogCXUxNiByZXNlcnZlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGNtZF9kc19tYWNfbXVsdGljYXN0X2FkciB7CiAJc3RydWN0IGNtZF9oZWFkZXIgaGRyOwogCV9fbGUxNiBhY3Rpb247CiAJX19sZTE2IG5yX29mX2FkcnM7CiAJdTggbWFjbGlzdFtFVEhfQUxFTiAqIE1SVkRSVl9NQVhfTVVMVElDQVNUX0xJU1RfU0laRV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBjbWRfZHNfODAyXzExX2F1dGhlbnRpY2F0ZSB7CiAJc3RydWN0IGNtZF9oZWFkZXIgaGRyOwpAQCAtNDk5LDE0ICs1MDgsMTQgQEAKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAJdTggYXV0aHR5cGU7CiAJdTggcmVzZXJ2ZWRbMTBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgY21kX2RzXzgwMl8xMV9kZWF1dGhlbnRpY2F0ZSB7CiAJc3RydWN0IGNtZF9oZWFkZXIgaGRyOwogCiAJdTggbWFjYWRkcltFVEhfQUxFTl07CiAJX19sZTE2IHJlYXNvbmNvZGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBjbWRfZHNfODAyXzExX2Fzc29jaWF0ZSB7CiAJc3RydWN0IGNtZF9oZWFkZXIgaGRyOwpAQCAtNTE3LDcgKzUyNiw3IEBACiAJX19sZTE2IGJjbnBlcmlvZDsKIAl1OCBkdGltcGVyaW9kOwogCXU4IGllYnVmWzUxMl07ICAgIC8qIEVub3VnaCBmb3IgcmVxdWlyZWQgYW5kIG1vc3Qgb3B0aW9uYWwgSUVzICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBjbWRfZHNfODAyXzExX2Fzc29jaWF0ZV9yZXNwb25zZSB7CiAJc3RydWN0IGNtZF9oZWFkZXIgaGRyOwpAQCAtNTI2LDcgKzUzNSw3IEBACiAJX19sZTE2IHN0YXR1c2NvZGU7CiAJX19sZTE2IGFpZDsKIAl1OCBpZWJ1Zls1MTJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgY21kX2RzXzgwMl8xMV9zZXRfd2VwIHsKIAlzdHJ1Y3QgY21kX2hlYWRlciBoZHI7CkBAIC01NDAsNyArNTQ5LDcgQEAKIAkvKiA0MCwgMTI4Yml0IG9yIFRYV0VQICovCiAJdWludDhfdCBrZXl0eXBlWzRdOwogCXVpbnQ4X3Qga2V5bWF0ZXJpYWxbNF1bMTZdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgY21kX2RzXzgwMl8xMV9zbm1wX21pYiB7CiAJc3RydWN0IGNtZF9oZWFkZXIgaGRyOwpAQCAtNTQ5LDQwICs1NTgsMzMgQEAKIAlfX2xlMTYgb2lkOwogCV9fbGUxNiBidWZzaXplOwogCXU4IHZhbHVlWzEyOF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKLXN0cnVjdCBjbWRfZHNfbWFjX3JlZ19hY2Nlc3Mgeworc3RydWN0IGNtZF9kc19yZWdfYWNjZXNzIHsKKwlzdHJ1Y3QgY21kX2hlYWRlciBoZHI7CisKIAlfX2xlMTYgYWN0aW9uOwogCV9fbGUxNiBvZmZzZXQ7Ci0JX19sZTMyIHZhbHVlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBjbWRfZHNfYmJwX3JlZ19hY2Nlc3MgewotCV9fbGUxNiBhY3Rpb247Ci0JX19sZTE2IG9mZnNldDsKLQl1OCB2YWx1ZTsKLQl1OCByZXNlcnZlZFszXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgY21kX2RzX3JmX3JlZ19hY2Nlc3MgewotCV9fbGUxNiBhY3Rpb247Ci0JX19sZTE2IG9mZnNldDsKLQl1OCB2YWx1ZTsKLQl1OCByZXNlcnZlZFszXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCXVuaW9uIHsKKwkJdTggYmJwX3JmOyAgLyogZm9yIEJCUCBhbmQgUkYgcmVnaXN0ZXJzICovCisJCV9fbGUzMiBtYWM7IC8qIGZvciBNQUMgcmVnaXN0ZXJzICovCisJfSB2YWx1ZTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBjbWRfZHNfODAyXzExX3JhZGlvX2NvbnRyb2wgewogCXN0cnVjdCBjbWRfaGVhZGVyIGhkcjsKIAogCV9fbGUxNiBhY3Rpb247CiAJX19sZTE2IGNvbnRyb2w7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBjbWRfZHNfODAyXzExX2JlYWNvbl9jb250cm9sIHsKKwlzdHJ1Y3QgY21kX2hlYWRlciBoZHI7CisKIAlfX2xlMTYgYWN0aW9uOwogCV9fbGUxNiBiZWFjb25fZW5hYmxlOwogCV9fbGUxNiBiZWFjb25fcGVyaW9kOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgY21kX2RzXzgwMl8xMV9zbGVlcF9wYXJhbXMgewogCXN0cnVjdCBjbWRfaGVhZGVyIGhkcjsKQEAgLTYwNyw3ICs2MDksNyBAQAogCiAJLyogcmVzZXJ2ZWQgZmllbGQsIHNob3VsZCBiZSBzZXQgdG8gemVybyAqLwogCV9fbGUxNiByZXNlcnZlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGNtZF9kc184MDJfMTFfcmZfY2hhbm5lbCB7CiAJc3RydWN0IGNtZF9oZWFkZXIgaGRyOwpAQCAtNjE3LDMwICs2MTksMzAgQEAKIAlfX2xlMTYgcmZ0eXBlOyAgICAgIC8qIHVudXNlZCAqLwogCV9fbGUxNiByZXNlcnZlZDsgICAgLyogdW51c2VkICovCiAJdTggY2hhbm5lbGxpc3RbMzJdOyAvKiB1bnVzZWQgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGNtZF9kc184MDJfMTFfcnNzaSB7Ci0JLyogd2VpZ2h0aW5nIGZhY3RvciAqLwotCV9fbGUxNiBOOworCXN0cnVjdCBjbWRfaGVhZGVyIGhkcjsKIAotCV9fbGUxNiByZXNlcnZlZF8wOwotCV9fbGUxNiByZXNlcnZlZF8xOwotCV9fbGUxNiByZXNlcnZlZF8yOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJLyogcmVxdWVzdDogIG51bWJlciBvZiBiZWFjb25zIChOKSB0byBhdmVyYWdlIHRoZSBTTlIgYW5kIE5GIG92ZXIKKwkgKiByZXNwb25zZTogU05SIG9mIG1vc3QgcmVjZW50IGJlYWNvbgorCSAqLworCV9fbGUxNiBuX29yX3NucjsKIAotc3RydWN0IGNtZF9kc184MDJfMTFfcnNzaV9yc3AgewotCV9fbGUxNiBTTlI7Ci0JX19sZTE2IG5vaXNlZmxvb3I7Ci0JX19sZTE2IGF2Z1NOUjsKLQlfX2xlMTYgYXZnbm9pc2VmbG9vcjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCS8qIFRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBvbmx5IHNldCBpbiB0aGUgcmVzcG9uc2UuCisJICogSW4gdGhlIHJlcXVlc3QgdGhlc2UgYXJlIHJlc2VydmVkIGFuZCBzaG91bGQgYmUgc2V0IHRvIDAuCisJICovCisJX19sZTE2IG5mOyAgICAgICAvKiBtb3N0IHJlY2VudCBiZWFjb24gbm9pc2UgZmxvb3IgKi8KKwlfX2xlMTYgYXZnX3NucjsgIC8qIGF2ZXJhZ2UgU05SIHdlaWdodGVkIGJ5IE4gZnJvbSByZXF1ZXN0ICovCisJX19sZTE2IGF2Z19uZjsgICAvKiBhdmVyYWdlIG5vaXNlIGZsb29yIHdlaWdodGVkIGJ5IE4gZnJvbSByZXF1ZXN0ICovCit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgY21kX2RzXzgwMl8xMV9tYWNfYWRkcmVzcyB7CiAJc3RydWN0IGNtZF9oZWFkZXIgaGRyOwogCiAJX19sZTE2IGFjdGlvbjsKIAl1OCBtYWNhZGRbRVRIX0FMRU5dOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgY21kX2RzXzgwMl8xMV9yZl90eF9wb3dlciB7CiAJc3RydWN0IGNtZF9oZWFkZXIgaGRyOwpAQCAtNjQ5LDM0ICs2NTEsNjEgQEAKIAlfX2xlMTYgY3VybGV2ZWw7CiAJczggbWF4bGV2ZWw7CiAJczggbWlubGV2ZWw7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKKy8qIE1PTklUT1JfTU9ERSBvbmx5IGV4aXN0cyBpbiBPTFBDIHY1IGZpcm13YXJlICovCiBzdHJ1Y3QgY21kX2RzXzgwMl8xMV9tb25pdG9yX21vZGUgeworCXN0cnVjdCBjbWRfaGVhZGVyIGhkcjsKKwogCV9fbGUxNiBhY3Rpb247CiAJX19sZTE2IG1vZGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBjbWRfZHNfc2V0X2Jvb3QyX3ZlciB7CiAJc3RydWN0IGNtZF9oZWFkZXIgaGRyOwogCiAJX19sZTE2IGFjdGlvbjsKIAlfX2xlMTYgdmVyc2lvbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGNtZF9kc184MDJfMTFfZndfd2FrZV9tZXRob2QgewogCXN0cnVjdCBjbWRfaGVhZGVyIGhkcjsKIAogCV9fbGUxNiBhY3Rpb247CiAJX19sZTE2IG1ldGhvZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGNtZF9kc184MDJfMTFfcHNfbW9kZSB7CisJc3RydWN0IGNtZF9oZWFkZXIgaGRyOworCiAJX19sZTE2IGFjdGlvbjsKKworCS8qIEludGVydmFsIGZvciBrZWVwYWxpdmUgaW4gUFMgbW9kZToKKwkgKiAweDAwMDAgPSBkb24ndCBjaGFuZ2UKKwkgKiAweDAwMUUgPSBmaXJtd2FyZSBkZWZhdWx0CisJICogMHhGRkZGID0gZGlzYWJsZQorCSAqLwogCV9fbGUxNiBudWxscGt0aW50ZXJ2YWw7CisKKwkvKiBOdW1iZXIgb2YgRFRJTSBpbnRlcnZhbHMgdG8gd2FrZSB1cCBmb3I6CisJICogMCA9IGRvbid0IGNoYW5nZQorCSAqIDEgPSBmaXJtd2FyZSBkZWZhdWx0CisJICogNSA9IG1heAorCSAqLwogCV9fbGUxNiBtdWx0aXBsZWR0aW07CisKIAlfX2xlMTYgcmVzZXJ2ZWQ7CiAJX19sZTE2IGxvY2FsbGlzdGVuaW50ZXJ2YWw7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCS8qIEFkSG9jIGF3YWtlIHBlcmlvZCAoRlcgdjkrIG9ubHkpOgorCSAqIDAgPSBkb24ndCBjaGFuZ2UKKwkgKiAxID0gYWx3YXlzIGF3YWtlIChJRUVFIHN0YW5kYXJkIGJlaGF2aW9yKQorCSAqIDIgLSAzMSA9IHNsZWVwIGZvciAobiAtIDEpIHBlcmlvZHMgYW5kIGF3YWtlIGZvciAxIHBlcmlvZAorCSAqIDMyIC0gMjU0ID0gaW52YWxpZAorCSAqIDI1NSA9IHNsZWVwIGF0IGVhY2ggQVRJTQorCSAqLworCV9fbGUxNiBhZGhvY19hd2FrZV9wZXJpb2Q7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgY21kX2NvbmZpcm1fc2xlZXAgewogCXN0cnVjdCBjbWRfaGVhZGVyIGhkcjsKQEAgLTY4Niw3ICs3MTUsNyBAQAogCV9fbGUxNiBtdWx0aXBsZWR0aW07CiAJX19sZTE2IHJlc2VydmVkOwogCV9fbGUxNiBsb2NhbGxpc3RlbmludGVydmFsOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgY21kX2RzXzgwMl8xMV9kYXRhX3JhdGUgewogCXN0cnVjdCBjbWRfaGVhZGVyIGhkcjsKQEAgLTY5NCwxNCArNzIzLDE0IEBACiAJX19sZTE2IGFjdGlvbjsKIAlfX2xlMTYgcmVzZXJ2ZWQ7CiAJdTggcmF0ZXNbTUFYX1JBVEVTXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGNtZF9kc184MDJfMTFfcmF0ZV9hZGFwdF9yYXRlc2V0IHsKIAlzdHJ1Y3QgY21kX2hlYWRlciBoZHI7CiAJX19sZTE2IGFjdGlvbjsKIAlfX2xlMTYgZW5hYmxlaHdhdXRvOwogCV9fbGUxNiBiaXRtYXA7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBjbWRfZHNfODAyXzExX2FkX2hvY19zdGFydCB7CiAJc3RydWN0IGNtZF9oZWFkZXIgaGRyOwpAQCAtNzE4LDE0ICs3NDcsMTQgQEAKIAlfX2xlMTYgY2FwYWJpbGl0eTsKIAl1OCByYXRlc1tNQVhfUkFURVNdOwogCXU4IHRsdl9tZW1vcnlfc2l6ZV9wYWRbMTAwXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGNtZF9kc184MDJfMTFfYWRfaG9jX3Jlc3VsdCB7CiAJc3RydWN0IGNtZF9oZWFkZXIgaGRyOwogCiAJdTggcGFkWzNdOwogCXU4IGJzc2lkW0VUSF9BTEVOXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGFkaG9jX2Jzc2Rlc2MgewogCXU4IGJzc2lkW0VUSF9BTEVOXTsKQEAgLTc0Niw3ICs3NzUsNyBAQAogCSAqIEFkaG9jIGpvaW4gY29tbWFuZCBhbmQgd2lsbCBjYXVzZSBhIGJpbmFyeSBsYXlvdXQgbWlzbWF0Y2ggd2l0aAogCSAqIHRoZSBmaXJtd2FyZQogCSAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgY21kX2RzXzgwMl8xMV9hZF9ob2Nfam9pbiB7CiAJc3RydWN0IGNtZF9oZWFkZXIgaGRyOwpAQCAtNzU0LDE4ICs3ODMsMTggQEAKIAlzdHJ1Y3QgYWRob2NfYnNzZGVzYyBic3M7CiAJX19sZTE2IGZhaWx0aW1lb3V0OyAgIC8qIFJlc2VydmVkIG9uIHY5IGFuZCBsYXRlciAqLwogCV9fbGUxNiBwcm9iZWRlbGF5OyAgICAvKiBSZXNlcnZlZCBvbiB2OSBhbmQgbGF0ZXIgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGNtZF9kc184MDJfMTFfYWRfaG9jX3N0b3AgewogCXN0cnVjdCBjbWRfaGVhZGVyIGhkcjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGNtZF9kc184MDJfMTFfZW5hYmxlX3JzbiB7CiAJc3RydWN0IGNtZF9oZWFkZXIgaGRyOwogCiAJX19sZTE2IGFjdGlvbjsKIAlfX2xlMTYgZW5hYmxlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgTXJ2bElFdHlwZV9rZXlQYXJhbVNldCB7CiAJLyogdHlwZSBJRCAqLwpAQCAtNzg1LDcgKzgxNCw3IEBACiAKIAkvKiBrZXkgbWF0ZXJpYWwgb2Ygc2l6ZSBrZXlsZW4gKi8KIAl1OCBrZXlbMzJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIE1BWF9XT0xfUlVMRVMgCQkxNgogCkBAIC03OTcsNyArODI2LDcgQEAKIAlfX2xlMTYgcmVzZXJ2ZTsKIAlfX2JlMzIgc2lnX21hc2s7CiAJX19iZTMyIHNpZ25hdHVyZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHdvbF9jb25maWcgewogCXVpbnQ4X3QgYWN0aW9uOwpAQCAtODA1LDcgKzgzNCw3IEBACiAJdWludDhfdCBub19ydWxlc19pbl9jbWQ7CiAJdWludDhfdCByZXN1bHQ7CiAJc3RydWN0IGhvc3Rfd29sX3J1bGUgcnVsZVtNQVhfV09MX1JVTEVTXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGNtZF9kc19ob3N0X3NsZWVwIHsKIAlzdHJ1Y3QgY21kX2hlYWRlciBoZHI7CkBAIC04MTMsNyArODQyLDcgQEAKIAl1aW50OF90IGdwaW87CiAJdWludDE2X3QgZ2FwOwogCXN0cnVjdCB3b2xfY29uZmlnIHdvbF9jb25mOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAKIApAQCAtODIyLDcgKzg1MSw3IEBACiAKIAlfX2xlMTYgYWN0aW9uOwogCXN0cnVjdCBNcnZsSUV0eXBlX2tleVBhcmFtU2V0IGtleVBhcmFtU2V0WzJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgY21kX2RzXzgwMl8xMV9lZXByb21fYWNjZXNzIHsKIAlzdHJ1Y3QgY21kX2hlYWRlciBoZHI7CkBAIC04MzIsNyArODYxLDcgQEAKIAkvKiBmaXJtd2FyZSBzYXlzIGl0IHJldHVybnMgYSBtYXhpbXVtIG9mIDIwIGJ5dGVzICovCiAjZGVmaW5lIExCU19FRVBST01fUkVBRF9MRU4gMjAKIAl1OCB2YWx1ZVtMQlNfRUVQUk9NX1JFQURfTEVOXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGNtZF9kc184MDJfMTFfdHBjX2NmZyB7CiAJc3RydWN0IGNtZF9oZWFkZXIgaGRyOwpAQCAtODQzLDcgKzg3Miw3IEBACiAJaW50OF90IFAxOwogCWludDhfdCBQMjsKIAl1aW50OF90IHVzZXNucjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogCiBzdHJ1Y3QgY21kX2RzXzgwMl8xMV9wYV9jZmcgewpAQCAtODU0LDE2ICs4ODMsMjEgQEAKIAlpbnQ4X3QgUDA7CiAJaW50OF90IFAxOwogCWludDhfdCBQMjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogCiBzdHJ1Y3QgY21kX2RzXzgwMl8xMV9sZWRfY3RybCB7CisJc3RydWN0IGNtZF9oZWFkZXIgaGRyOworCiAJX19sZTE2IGFjdGlvbjsKIAlfX2xlMTYgbnVtbGVkOwogCXU4IGRhdGFbMjU2XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAorLyogQXV0b21hdGljIEZyZXF1ZW5jeSBDb250cm9sICovCiBzdHJ1Y3QgY21kX2RzXzgwMl8xMV9hZmMgeworCXN0cnVjdCBjbWRfaGVhZGVyIGhkcjsKKwogCV9fbGUxNiBhZmNfYXV0bzsKIAl1bmlvbiB7CiAJCXN0cnVjdCB7CkBAIC04NzUsMjQgKzkwOSwyOCBAQAogCQkJX19sZTE2IGNhcnJpZXJfb2Zmc2V0OyAvKiBzaWduZWQgKi8KIAkJfTsKIAl9OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgY21kX3R4X3JhdGVfcXVlcnkgewogCV9fbGUxNiB0eHJhdGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBjbWRfZHNfZ2V0X3RzZiB7CiAJX19sZTY0IHRzZnZhbHVlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgY21kX2RzX2J0X2FjY2VzcyB7CisJc3RydWN0IGNtZF9oZWFkZXIgaGRyOworCiAJX19sZTE2IGFjdGlvbjsKIAlfX2xlMzIgaWQ7CiAJdTggYWRkcjFbRVRIX0FMRU5dOwogCXU4IGFkZHIyW0VUSF9BTEVOXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGNtZF9kc19md3RfYWNjZXNzIHsKKwlzdHJ1Y3QgY21kX2hlYWRlciBoZHI7CisKIAlfX2xlMTYgYWN0aW9uOwogCV9fbGUzMiBpZDsKIAl1OCB2YWxpZDsKQEAgLTkxMCw3ICs5NDgsNyBAQAogCV9fbGUzMiBzbnI7CiAJX19sZTMyIHJlZmVyZW5jZXM7CiAJdTggcHJlY1tFVEhfQUxFTl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBjbWRfZHNfbWVzaF9jb25maWcgewogCXN0cnVjdCBjbWRfaGVhZGVyIGhkcjsKQEAgLTkyMCw0MyArOTU4LDE1IEBACiAJX19sZTE2IHR5cGU7CiAJX19sZTE2IGxlbmd0aDsKIAl1OCBkYXRhWzEyOF07CS8qIGxhc3QgcG9zaXRpb24gcmVzZXJ2ZWQgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGNtZF9kc19tZXNoX2FjY2VzcyB7CiAJc3RydWN0IGNtZF9oZWFkZXIgaGRyOwogCiAJX19sZTE2IGFjdGlvbjsKIAlfX2xlMzIgZGF0YVszMl07CS8qIGxhc3QgcG9zaXRpb24gcmVzZXJ2ZWQgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogTnVtYmVyIG9mIHN0YXRzIGNvdW50ZXJzIHJldHVybmVkIGJ5IHRoZSBmaXJtd2FyZSAqLwogI2RlZmluZSBNRVNIX1NUQVRTX05VTSA4Ci0KLXN0cnVjdCBjbWRfZHNfY29tbWFuZCB7Ci0JLyogY29tbWFuZCBoZWFkZXIgKi8KLQlfX2xlMTYgY29tbWFuZDsKLQlfX2xlMTYgc2l6ZTsKLQlfX2xlMTYgc2VxbnVtOwotCV9fbGUxNiByZXN1bHQ7Ci0KLQkvKiBjb21tYW5kIEJvZHkgKi8KLQl1bmlvbiB7Ci0JCXN0cnVjdCBjbWRfZHNfODAyXzExX3BzX21vZGUgcHNtb2RlOwotCQlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9tb25pdG9yX21vZGUgbW9uaXRvcjsKLQkJc3RydWN0IGNtZF9kc184MDJfMTFfcnNzaSByc3NpOwotCQlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9yc3NpX3JzcCByc3NpcnNwOwotCQlzdHJ1Y3QgY21kX2RzX21hY19yZWdfYWNjZXNzIG1hY3JlZzsKLQkJc3RydWN0IGNtZF9kc19iYnBfcmVnX2FjY2VzcyBiYnByZWc7Ci0JCXN0cnVjdCBjbWRfZHNfcmZfcmVnX2FjY2VzcyByZnJlZzsKLQotCQlzdHJ1Y3QgY21kX2RzXzgwMl8xMV90cGNfY2ZnIHRwY2NmZzsKLQkJc3RydWN0IGNtZF9kc184MDJfMTFfYWZjIGFmYzsKLQkJc3RydWN0IGNtZF9kc184MDJfMTFfbGVkX2N0cmwgbGVkZ3BpbzsKLQotCQlzdHJ1Y3QgY21kX2RzX2J0X2FjY2VzcyBidDsKLQkJc3RydWN0IGNtZF9kc19md3RfYWNjZXNzIGZ3dDsKLQkJc3RydWN0IGNtZF9kc184MDJfMTFfYmVhY29uX2NvbnRyb2wgYmNuX2N0cmw7Ci0JfSBwYXJhbXM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYwppbmRleCAwOGU0ZTM5Li45YzI5ODM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgpAQCAtODAyLDkgKzgwMSw5IEBACiAJCQkgdW5zaWduZWQgaW50IHZjYywKIAkJCSB2b2lkICpwcml2X2RhdGEpCiB7Ci0JcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGNmZy0+aW8ud2luWzBdLmJhc2U7Ci0JcF9kZXYtPmlvLk51bVBvcnRzMSA9IGNmZy0+aW8ud2luWzBdLmxlbjsKKwlwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOworCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBjZmctPmlvLndpblswXS5iYXNlOworCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gY2ZnLT5pby53aW5bMF0ubGVuOwogCiAJLyogRG8gd2UgbmVlZCB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQ/ICovCiAJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7CkBAIC04MTYsNyArODE1LDcgQEAKIAl9CiAKIAkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLwotCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbyk7CisJcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2KTsKIH0KIAogc3RhdGljIGludCBpZl9jc19wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCkBAIC04NTQsNyArODUzLDggQEAKIAkJZ290byBvdXQxOwogCiAJLyogSW5pdGlhbGl6ZSBpbyBhY2Nlc3MgKi8KLQljYXJkLT5pb2Jhc2UgPSBpb3BvcnRfbWFwKHBfZGV2LT5pby5CYXNlUG9ydDEsIHBfZGV2LT5pby5OdW1Qb3J0czEpOworCWNhcmQtPmlvYmFzZSA9IGlvcG9ydF9tYXAocF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCwKKwkJCQlyZXNvdXJjZV9zaXplKHBfZGV2LT5yZXNvdXJjZVswXSkpOwogCWlmICghY2FyZC0+aW9iYXNlKSB7CiAJCWxic19wcl9lcnIoImVycm9yIGluIGlvcG9ydF9tYXBcbiIpOwogCQlyZXQgPSAtRUlPOwpAQCAtODczLDkgKzg3Myw3IEBACiAJfQogCiAJLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLwotCWxic19kZWJfY3MoImlycSAlZCwgaW8gMHglMDR4LTB4JTA0eFxuIiwKLQkgICAgICAgcF9kZXYtPmlycSwgcF9kZXYtPmlvLkJhc2VQb3J0MSwKLQkgICAgICAgcF9kZXYtPmlvLkJhc2VQb3J0MSArIHBfZGV2LT5pby5OdW1Qb3J0czEgLSAxKTsKKwlsYnNfZGViX2NzKCJpcnEgJWQsIGlvICVwUiIsIHBfZGV2LT5pcnEsIHBfZGV2LT5yZXNvdXJjZVswXSk7CiAKIAkvKgogCSAqIE1vc3Qgb2YgdGhlIGxpYmVydGFzIGNhcmRzIGNhbiBkbyB1bmFsaWduZWQgcmVnaXN0ZXIgYWNjZXNzLCBidXQgc29tZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5jCmluZGV4IDY0ZGQzNDUuLjZlNzEzNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NkaW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmMKQEAgLTExODIsMTEgKzExODIsNjkgQEAKIAlsYnNfZGViX2xlYXZlKExCU19ERUJfU0RJTyk7CiB9CiAKK3N0YXRpYyBpbnQgaWZfc2Rpb19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jID0gZGV2X3RvX3NkaW9fZnVuYyhkZXYpOworCWludCByZXQ7CisJc3RydWN0IGlmX3NkaW9fY2FyZCAqY2FyZCA9IHNkaW9fZ2V0X2RydmRhdGEoZnVuYyk7CisKKwltbWNfcG1fZmxhZ190IGZsYWdzID0gc2Rpb19nZXRfaG9zdF9wbV9jYXBzKGZ1bmMpOworCisJbGJzX3ByX2luZm8oIiVzOiBzdXNwZW5kOiBQTSBmbGFncyA9IDB4JXhcbiIsCisJCQkJCQlzZGlvX2Z1bmNfaWQoZnVuYyksIGZsYWdzKTsKKworCS8qIElmIHdlIGFyZW4ndCBiZWluZyBhc2tlZCB0byB3YWtlIG9uIGFueXRoaW5nLCB3ZSBzaG91bGQgYmFpbCBvdXQKKwkgKiBhbmQgbGV0IHRoZSBTRCBzdGFjayBwb3dlciBkb3duIHRoZSBjYXJkLgorCSAqLworCWlmIChjYXJkLT5wcml2LT53b2xfY3JpdGVyaWEgPT0gRUhTX1JFTU9WRV9XQUtFVVApIHsKKwkJbGJzX3ByX2luZm8oIlN1c3BlbmQgd2l0aG91dCB3YWtlIHBhcmFtcyAtLSAiCisJCQkJCQkicG93ZXJpbmcgZG93biBjYXJkLiIpOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisKKwlpZiAoIShmbGFncyAmIE1NQ19QTV9LRUVQX1BPV0VSKSkgeworCQlsYnNfcHJfZXJyKCIlczogY2Fubm90IHJlbWFpbiBhbGl2ZSB3aGlsZSBob3N0IGlzIHN1c3BlbmRlZFxuIiwKKwkJCXNkaW9fZnVuY19pZChmdW5jKSk7CisJCXJldHVybiAtRU5PU1lTOworCX0KKworCXJldCA9IHNkaW9fc2V0X2hvc3RfcG1fZmxhZ3MoZnVuYywgTU1DX1BNX0tFRVBfUE9XRVIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBsYnNfc3VzcGVuZChjYXJkLT5wcml2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHNkaW9fc2V0X2hvc3RfcG1fZmxhZ3MoZnVuYywgTU1DX1BNX1dBS0VfU0RJT19JUlEpOworfQorCitzdGF0aWMgaW50IGlmX3NkaW9fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jID0gZGV2X3RvX3NkaW9fZnVuYyhkZXYpOworCXN0cnVjdCBpZl9zZGlvX2NhcmQgKmNhcmQgPSBzZGlvX2dldF9kcnZkYXRhKGZ1bmMpOworCWludCByZXQ7CisKKwlsYnNfcHJfaW5mbygiJXM6IHJlc3VtZTogd2UncmUgYmFja1xuIiwgc2Rpb19mdW5jX2lkKGZ1bmMpKTsKKworCXJldCA9IGxic19yZXN1bWUoY2FyZC0+cHJpdik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgaWZfc2Rpb19wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBpZl9zZGlvX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBpZl9zZGlvX3Jlc3VtZSwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgaWZfc2Rpb19kcml2ZXIgPSB7CiAJLm5hbWUJCT0gImxpYmVydGFzX3NkaW8iLAogCS5pZF90YWJsZQk9IGlmX3NkaW9faWRzLAogCS5wcm9iZQkJPSBpZl9zZGlvX3Byb2JlLAogCS5yZW1vdmUJCT0gaWZfc2Rpb19yZW1vdmUsCisJLmRydiA9IHsKKwkJLnBtID0gJmlmX3NkaW9fcG1fb3BzLAorCX0sCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmMKaW5kZXggZjQxNTk0Yy4uMDdlY2U5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmMKQEAgLTQzMyw3ICs0MzMsNyBAQAogCiBzdGF0aWMgaW50IGlmX3VzYl9yZXNldF9kZXZpY2Uoc3RydWN0IGlmX3VzYl9jYXJkICpjYXJkcCkKIHsKLQlzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKmNtZCA9IGNhcmRwLT5lcF9vdXRfYnVmICsgNDsKKwlzdHJ1Y3QgY21kX2hlYWRlciAqY21kID0gY2FyZHAtPmVwX291dF9idWYgKyA0OwogCWludCByZXQ7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfVVNCKTsKQEAgLTQ0MSw3ICs0NDEsNyBAQAogCSooX19sZTMyICopY2FyZHAtPmVwX291dF9idWYgPSBjcHVfdG9fbGUzMihDTURfVFlQRV9SRVFVRVNUKTsKIAogCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KENNRF84MDJfMTFfUkVTRVQpOwotCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgY21kX2hlYWRlcikpOworCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihjbWQpKTsKIAljbWQtPnJlc3VsdCA9IGNwdV90b19sZTE2KDApOwogCWNtZC0+c2VxbnVtID0gY3B1X3RvX2xlMTYoMHg1YTVhKTsKIAl1c2JfdHhfYmxvY2soY2FyZHAsIGNhcmRwLT5lcF9vdXRfYnVmLCA0ICsgc2l6ZW9mKHN0cnVjdCBjbWRfaGVhZGVyKSk7CkBAIC02MTMsMTYgKzYxMywxNCBAQAogCQlyZXR1cm47CiAJfQogCi0Jc3luY2Z3aGVhZGVyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGZ3c3luY2hlYWRlciksIEdGUF9BVE9NSUMpOworCXN5bmNmd2hlYWRlciA9IGttZW1kdXAoc2tiLT5kYXRhICsgSVBGSUVMRF9BTElHTl9PRkZTRVQsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBmd3N5bmNoZWFkZXIpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXN5bmNmd2hlYWRlcikgewogCQlsYnNfZGViX3VzYmQoJmNhcmRwLT51ZGV2LT5kZXYsICJGYWlsdXJlIHRvIGFsbG9jYXRlIHN5bmNmd2hlYWRlclxuIik7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm47CiAJfQogCi0JbWVtY3B5KHN5bmNmd2hlYWRlciwgc2tiLT5kYXRhICsgSVBGSUVMRF9BTElHTl9PRkZTRVQsCi0JICAgICAgIHNpemVvZihzdHJ1Y3QgZndzeW5jaGVhZGVyKSk7Ci0KIAlpZiAoIXN5bmNmd2hlYWRlci0+Y21kKSB7CiAJCWxic19kZWJfdXNiMigmY2FyZHAtPnVkZXYtPmRldiwgIkZXIHJlY2VpdmVkIEJsayB3aXRoIGNvcnJlY3QgQ1JDXG4iKTsKIAkJbGJzX2RlYl91c2IyKCZjYXJkcC0+dWRldi0+ZGV2LCAiRlcgcmVjZWl2ZWQgQmxrIHNlcW51bSA9ICVkXG4iLApAQCAtMTA0Myw2ICsxMDQxLDEyIEBACiAJaWYgKHByaXYtPnBzc3RhdGUgIT0gUFNfU1RBVEVfRlVMTF9QT1dFUikKIAkJcmV0dXJuIC0xOwogCisJaWYgKHByaXYtPndvbF9jcml0ZXJpYSA9PSBFSFNfUkVNT1ZFX1dBS0VVUCkgeworCQlsYnNfcHJfaW5mbygiU3VzcGVuZCBhdHRlbXB0IHdpdGhvdXQgIgorCQkJCQkJImNvbmZpZ3VyaW5nIHdha2UgcGFyYW1zIVxuIik7CisJCXJldHVybiAtRU5PU1lTOworCX0KKwogCXJldCA9IGxic19zdXNwZW5kKHByaXYpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jCmluZGV4IGQ5YjhlZTEuLjI1ODk2NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMKQEAgLTExLDIwICsxMSwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgotI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgogI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgogCiAjaW5jbHVkZSAiaG9zdC5oIgogI2luY2x1ZGUgImRlY2wuaCIKICNpbmNsdWRlICJkZXYuaCIKLSNpbmNsdWRlICJ3ZXh0LmgiCiAjaW5jbHVkZSAiY2ZnLmgiCiAjaW5jbHVkZSAiZGVidWdmcy5oIgotI2luY2x1ZGUgInNjYW4uaCIKLSNpbmNsdWRlICJhc3NvYy5oIgogI2luY2x1ZGUgImNtZC5oIgogCiAjZGVmaW5lIERSSVZFUl9SRUxFQVNFX1ZFUlNJT04gIjMyMy5wMCIKQEAgLTk2LDcyICs5MCw2IEBACiB9CiAKIAotc3RhdGljIGludCBsYnNfYWRkX3J0YXAoc3RydWN0IGxic19wcml2YXRlICpwcml2KTsKLXN0YXRpYyB2b2lkIGxic19yZW1vdmVfcnRhcChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpOwotCi0KLS8qKgotICogR2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgcnRhcAotICovCi1zdGF0aWMgc3NpemVfdCBsYnNfcnRhcF9nZXQoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqIGJ1ZikKLXsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSB0b19uZXRfZGV2KGRldiktPm1sX3ByaXY7Ci0JcmV0dXJuIHNucHJpbnRmKGJ1ZiwgNSwgIjB4JVhcbiIsIHByaXYtPm1vbml0b3Jtb2RlKTsKLX0KLQotLyoqCi0gKiAgU2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgcnRhcAotICovCi1zdGF0aWMgc3NpemVfdCBsYnNfcnRhcF9zZXQoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqIGJ1Ziwgc2l6ZV90IGNvdW50KQotewotCWludCBtb25pdG9yX21vZGU7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gdG9fbmV0X2RldihkZXYpLT5tbF9wcml2OwotCi0Jc3NjYW5mKGJ1ZiwgIiV4IiwgJm1vbml0b3JfbW9kZSk7Ci0JaWYgKG1vbml0b3JfbW9kZSkgewotCQlpZiAocHJpdi0+bW9uaXRvcm1vZGUgPT0gbW9uaXRvcl9tb2RlKQotCQkJcmV0dXJuIHN0cmxlbihidWYpOwotCQlpZiAoIXByaXYtPm1vbml0b3Jtb2RlKSB7Ci0JCQlpZiAocHJpdi0+aW5mcmFfb3BlbiB8fCBsYnNfbWVzaF9vcGVuKHByaXYpKQotCQkJCXJldHVybiAtRUJVU1k7Ci0JCQlpZiAocHJpdi0+bW9kZSA9PSBJV19NT0RFX0lORlJBKQotCQkJCWxic19jbWRfODAyMTFfZGVhdXRoZW50aWNhdGUocHJpdiwKLQkJCQkJCQkgICAgIHByaXYtPmN1cmJzc3BhcmFtcy5ic3NpZCwKLQkJCQkJCQkgICAgIFdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HKTsKLQkJCWVsc2UgaWYgKHByaXYtPm1vZGUgPT0gSVdfTU9ERV9BREhPQykKLQkJCQlsYnNfYWRob2Nfc3RvcChwcml2KTsKLQkJCWxic19hZGRfcnRhcChwcml2KTsKLQkJfQotCQlwcml2LT5tb25pdG9ybW9kZSA9IG1vbml0b3JfbW9kZTsKLQl9IGVsc2UgewotCQlpZiAoIXByaXYtPm1vbml0b3Jtb2RlKQotCQkJcmV0dXJuIHN0cmxlbihidWYpOwotCQlwcml2LT5tb25pdG9ybW9kZSA9IDA7Ci0JCWxic19yZW1vdmVfcnRhcChwcml2KTsKLQotCQlpZiAocHJpdi0+Y3VycmVudHR4c2tiKSB7Ci0JCQlkZXZfa2ZyZWVfc2tiX2FueShwcml2LT5jdXJyZW50dHhza2IpOwotCQkJcHJpdi0+Y3VycmVudHR4c2tiID0gTlVMTDsKLQkJfQotCi0JCS8qIFdha2UgcXVldWVzLCBjb21tYW5kIHRocmVhZCwgZXRjLiAqLwotCQlsYnNfaG9zdF90b19jYXJkX2RvbmUocHJpdik7Ci0JfQotCi0JbGJzX3ByZXBhcmVfYW5kX3NlbmRfY29tbWFuZChwcml2LAotCQkJQ01EXzgwMl8xMV9NT05JVE9SX01PREUsIENNRF9BQ1RfU0VULAotCQkJQ01EX09QVElPTl9XQUlURk9SUlNQLCAwLCAmcHJpdi0+bW9uaXRvcm1vZGUpOwotCXJldHVybiBzdHJsZW4oYnVmKTsKLX0KLQotLyoqCi0gKiBsYnNfcnRhcCBhdHRyaWJ1dGUgdG8gYmUgZXhwb3J0ZWQgcGVyIGV0aFggaW50ZXJmYWNlCi0gKiB0aHJvdWdoIHN5c2ZzICgvc3lzL2NsYXNzL25ldC9ldGhYL2xic19ydGFwKQotICovCi1zdGF0aWMgREVWSUNFX0FUVFIobGJzX3J0YXAsIDA2NDQsIGxic19ydGFwX2dldCwgbGJzX3J0YXBfc2V0ICk7Ci0KIC8qKgogICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIG9wZW5zIHRoZSBldGhYIGludGVyZmFjZQogICoKQEAgLTE3NywxMyArMTA1LDYgQEAKIAogCXNwaW5fbG9ja19pcnEoJnByaXYtPmRyaXZlcl9sb2NrKTsKIAotCWlmIChwcml2LT5tb25pdG9ybW9kZSkgewotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXByaXYtPmluZnJhX29wZW4gPSAxOwotCiAJaWYgKHByaXYtPmNvbm5lY3Rfc3RhdHVzID09IExCU19DT05ORUNURUQpCiAJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKIAllbHNlCkBAIC0xOTEsNyArMTEyLDYgQEAKIAogCWlmICghcHJpdi0+dHhfcGVuZGluZ19sZW4pCiAJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLSBvdXQ6CiAKIAlzcGluX3VubG9ja19pcnEoJnByaXYtPmRyaXZlcl9sb2NrKTsKIAlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9ORVQsICJyZXQgJWQiLCByZXQpOwpAQCAtMjExLDcgKzEzMSw2IEBACiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX05FVCk7CiAKIAlzcGluX2xvY2tfaXJxKCZwcml2LT5kcml2ZXJfbG9jayk7Ci0JcHJpdi0+aW5mcmFfb3BlbiA9IDA7CiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+ZHJpdmVyX2xvY2spOwogCkBAIC0yMzgsMTIgKzE1Nyw3IEBACiAJICAgdG8ga2ljayBpdCBzb21laG93PyAqLwogCWxic19ob3N0X3RvX2NhcmRfZG9uZShwcml2KTsKIAotCS8qIE1vcmUgb2Z0ZW4gdGhhbiBub3QsIHRoaXMgYWN0dWFsbHkgaGFwcGVucyBiZWNhdXNlIHRoZQotCSAgIGZpcm13YXJlIGhhcyBjcmFwcGVkIGl0c2VsZiAtLSByYXRoZXIgdGhhbiBqdXN0IGEgdmVyeQotCSAgIGJ1c3kgbWVkaXVtLiBTbyBzZW5kIGEgaGFybWxlc3MgY29tbWFuZCwgYW5kIGlmL3doZW4KLQkgICBfdGhhdF8gdGltZXMgb3V0LCB3ZSdsbCBraWNrIGl0IGluIHRoZSBoZWFkLiAqLwotCWxic19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwgQ01EXzgwMl8xMV9SU1NJLCAwLAotCQkJCSAgICAgMCwgMCwgTlVMTCk7CisJLyogRklYTUU6IHJlc2V0IHRoZSBjYXJkICovCiAKIAlsYnNfZGViX2xlYXZlKExCU19ERUJfVFgpOwogfQpAQCAtNTg4LDEyICs1MDIsNiBAQAogCQlpZiAoIXByaXYtPmRubGRfc2VudCAmJiAhcHJpdi0+Y3VyX2NtZCkKIAkJCWxic19leGVjdXRlX25leHRfY29tbWFuZChwcml2KTsKIAotCQkvKiBXYWtlLXVwIGNvbW1hbmQgd2FpdGVycyB3aGljaCBjYW4ndCBzbGVlcCBpbgotCQkgKiBsYnNfcHJlcGFyZV9hbmRfc2VuZF9jb21tYW5kCi0JCSAqLwotCQlpZiAoIWxpc3RfZW1wdHkoJnByaXYtPmNtZHBlbmRpbmdxKSkKLQkJCXdha2VfdXBfYWxsKCZwcml2LT5jbWRfcGVuZGluZyk7Ci0KIAkJc3Bpbl9sb2NrX2lycSgmcHJpdi0+ZHJpdmVyX2xvY2spOwogCQlpZiAoIXByaXYtPmRubGRfc2VudCAmJiBwcml2LT50eF9wZW5kaW5nX2xlbiA+IDApIHsKIAkJCWludCByZXQgPSBwcml2LT5od19ob3N0X3RvX2NhcmQocHJpdiwgTVZNU19EQVQsCkBAIC02MTksNjYgKzUyNyw1OCBAQAogCiAJZGVsX3RpbWVyKCZwcml2LT5jb21tYW5kX3RpbWVyKTsKIAlkZWxfdGltZXIoJnByaXYtPmF1dG9fZGVlcHNsZWVwX3RpbWVyKTsKLQl3YWtlX3VwX2FsbCgmcHJpdi0+Y21kX3BlbmRpbmcpOwogCiAJbGJzX2RlYl9sZWF2ZShMQlNfREVCX1RIUkVBRCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbGJzX3N1c3BlbmRfY2FsbGJhY2soc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1bnNpZ25lZCBsb25nIGR1bW15LAotCQkJCXN0cnVjdCBjbWRfaGVhZGVyICpjbWQpCi17Ci0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0ZXKTsKLQotCW5ldGlmX2RldmljZV9kZXRhY2gocHJpdi0+ZGV2KTsKLQlpZiAocHJpdi0+bWVzaF9kZXYpCi0JCW5ldGlmX2RldmljZV9kZXRhY2gocHJpdi0+bWVzaF9kZXYpOwotCi0JcHJpdi0+ZndfcmVhZHkgPSAwOwotCWxic19kZWJfbGVhdmUoTEJTX0RFQl9GVyk7Ci0JcmV0dXJuIDA7Ci19Ci0KIGludCBsYnNfc3VzcGVuZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCiB7Ci0Jc3RydWN0IGNtZF9oZWFkZXIgY21kOwogCWludCByZXQ7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfRlcpOwogCi0JaWYgKHByaXYtPndvbF9jcml0ZXJpYSA9PSAweGZmZmZmZmZmKSB7Ci0JCWxic19wcl9pbmZvKCJTdXNwZW5kIGF0dGVtcHQgd2l0aG91dCBjb25maWd1cmluZyB3YWtlIHBhcmFtcyFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocHJpdi0+aXNfZGVlcF9zbGVlcCkgeworCQlyZXQgPSBsYnNfc2V0X2RlZXBfc2xlZXAocHJpdiwgMCk7CisJCWlmIChyZXQpIHsKKwkJCWxic19wcl9lcnIoImRlZXAgc2xlZXAgY2FuY2VsbGF0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCXByaXYtPmRlZXBfc2xlZXBfcmVxdWlyZWQgPSAxOwogCX0KIAotCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJcmV0ID0gbGJzX3NldF9ob3N0X3NsZWVwKHByaXYsIDEpOwogCi0JcmV0ID0gX19sYnNfY21kKHByaXYsIENNRF84MDJfMTFfSE9TVF9TTEVFUF9BQ1RJVkFURSwgJmNtZCwKLQkJCXNpemVvZihjbWQpLCBsYnNfc3VzcGVuZF9jYWxsYmFjaywgMCk7Ci0JaWYgKHJldCkKLQkJbGJzX3ByX2luZm8oIkhPU1RfU0xFRVBfQUNUSVZBVEUgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwluZXRpZl9kZXZpY2VfZGV0YWNoKHByaXYtPmRldik7CisJaWYgKHByaXYtPm1lc2hfZGV2KQorCQluZXRpZl9kZXZpY2VfZGV0YWNoKHByaXYtPm1lc2hfZGV2KTsKIAogCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0ZXLCAicmV0ICVkIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwobGJzX3N1c3BlbmQpOwogCi12b2lkIGxic19yZXN1bWUoc3RydWN0IGxic19wcml2YXRlICpwcml2KQoraW50IGxic19yZXN1bWUoc3RydWN0IGxic19wcml2YXRlICpwcml2KQogeworCWludCByZXQ7CisKIAlsYnNfZGViX2VudGVyKExCU19ERUJfRlcpOwogCi0JcHJpdi0+ZndfcmVhZHkgPSAxOwotCi0JLyogRmlybXdhcmUgZG9lc24ndCBzZWVtIHRvIGdpdmUgdXMgUlggcGFja2V0cyBhbnkgbW9yZQotCSAgIHVudGlsIHdlIHNlbmQgaXQgc29tZSBjb21tYW5kLiBNaWdodCBhcyB3ZWxsIHVwZGF0ZSAqLwotCWxic19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwgQ01EXzgwMl8xMV9SU1NJLCAwLAotCQkJCSAgICAgMCwgMCwgTlVMTCk7CisJcmV0ID0gbGJzX3NldF9ob3N0X3NsZWVwKHByaXYsIDApOwogCiAJbmV0aWZfZGV2aWNlX2F0dGFjaChwcml2LT5kZXYpOwogCWlmIChwcml2LT5tZXNoX2RldikKIAkJbmV0aWZfZGV2aWNlX2F0dGFjaChwcml2LT5tZXNoX2Rldik7CiAKLQlsYnNfZGViX2xlYXZlKExCU19ERUJfRlcpOworCWlmIChwcml2LT5kZWVwX3NsZWVwX3JlcXVpcmVkKSB7CisJCXByaXYtPmRlZXBfc2xlZXBfcmVxdWlyZWQgPSAwOworCQlyZXQgPSBsYnNfc2V0X2RlZXBfc2xlZXAocHJpdiwgMSk7CisJCWlmIChyZXQpCisJCQlsYnNfcHJfZXJyKCJkZWVwIHNsZWVwIGFjdGl2YXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwl9CisKKwlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9GVywgInJldCAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGxic19yZXN1bWUpOwogCkBAIC03MTAsNiArNjEwLDkgQEAKIAkJcHJpdi0+dHhwb3dlcl9tYXggPSBtYXhsZXZlbDsKIAl9CiAKKwkvKiBTZW5kIGNtZCB0byBGVyB0byBlbmFibGUgMTFEIGZ1bmN0aW9uICovCisJcmV0ID0gbGJzX3NldF9zbm1wX21pYihwcml2LCBTTk1QX01JQl9PSURfMTFEX0VOQUJMRSwgMSk7CisKIAlsYnNfc2V0X21hY19jb250cm9sKHByaXYpOwogZG9uZToKIAlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9GVywgInJldCAlZCIsIHJldCk7CkBAIC03NDgsNyArNjUxLDYgQEAKIHN0YXRpYyB2b2lkIGF1dG9fZGVlcHNsZWVwX3RpbWVyX2ZuKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSAoc3RydWN0IGxic19wcml2YXRlICopZGF0YTsKLQlpbnQgcmV0OwogCiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX0NNRCk7CiAKQEAgLTc1NiwxNCArNjU4LDE1IEBACiAJCXByaXYtPmlzX2FjdGl2aXR5X2RldGVjdGVkID0gMDsKIAl9IGVsc2UgewogCQlpZiAocHJpdi0+aXNfYXV0b19kZWVwX3NsZWVwX2VuYWJsZWQgJiYKLQkJCQkoIXByaXYtPndha2V1cF9kZXZfcmVxdWlyZWQpICYmCi0JCQkJKHByaXYtPmNvbm5lY3Rfc3RhdHVzICE9IExCU19DT05ORUNURUQpKSB7CisJCSAgICAoIXByaXYtPndha2V1cF9kZXZfcmVxdWlyZWQpICYmCisJCSAgICAocHJpdi0+Y29ubmVjdF9zdGF0dXMgIT0gTEJTX0NPTk5FQ1RFRCkpIHsKKwkJCXN0cnVjdCBjbWRfaGVhZGVyIGNtZDsKKwogCQkJbGJzX2RlYl9tYWluKCJFbnRlcmluZyBhdXRvIGRlZXAgc2xlZXAgbW9kZS4uLlxuIik7Ci0JCQlyZXQgPSBsYnNfcHJlcGFyZV9hbmRfc2VuZF9jb21tYW5kKHByaXYsCi0JCQkJCUNNRF84MDJfMTFfREVFUF9TTEVFUCwgMCwKLQkJCQkJMCwgMCwgTlVMTCk7Ci0JCQlpZiAocmV0KQotCQkJCWxic19wcl9lcnIoIkVudGVyIERlZXAgU2xlZXAgY29tbWFuZCBmYWlsZWRcbiIpOworCQkJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwkJCWNtZC5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGNtZCkpOworCQkJbGJzX2NtZF9hc3luYyhwcml2LCBDTURfODAyXzExX0RFRVBfU0xFRVAsICZjbWQsCisJCQkJCXNpemVvZihjbWQpKTsKIAkJfQogCX0KIAltb2RfdGltZXIoJnByaXYtPmF1dG9fZGVlcHNsZWVwX3RpbWVyICwgamlmZmllcyArCkBAIC03OTksNDUgKzcwMiwyNyBAQAogCiBzdGF0aWMgaW50IGxic19pbml0X2FkYXB0ZXIoc3RydWN0IGxic19wcml2YXRlICpwcml2KQogewotCXNpemVfdCBidWZzaXplOwotCWludCBpLCByZXQgPSAwOworCWludCByZXQ7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfTUFJTik7CiAKLQkvKiBBbGxvY2F0ZSBidWZmZXIgdG8gc3RvcmUgdGhlIEJTU0lEIGxpc3QgKi8KLQlidWZzaXplID0gTUFYX05FVFdPUktfQ09VTlQgKiBzaXplb2Yoc3RydWN0IGJzc19kZXNjcmlwdG9yKTsKLQlwcml2LT5uZXR3b3JrcyA9IGt6YWxsb2MoYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwcml2LT5uZXR3b3JrcykgewotCQlsYnNfcHJfZXJyKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgYmVhY29uc1xuIik7Ci0JCXJldCA9IC0xOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBJbml0aWFsaXplIHNjYW4gcmVzdWx0IGxpc3RzICovCi0JSU5JVF9MSVNUX0hFQUQoJnByaXYtPm5ldHdvcmtfZnJlZV9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmcHJpdi0+bmV0d29ya19saXN0KTsKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX05FVFdPUktfQ09VTlQ7IGkrKykgewotCQlsaXN0X2FkZF90YWlsKCZwcml2LT5uZXR3b3Jrc1tpXS5saXN0LAotCQkJICAgICAgJnByaXYtPm5ldHdvcmtfZnJlZV9saXN0KTsKLQl9Ci0KIAltZW1zZXQocHJpdi0+Y3VycmVudF9hZGRyLCAweGZmLCBFVEhfQUxFTik7CiAKIAlwcml2LT5jb25uZWN0X3N0YXR1cyA9IExCU19ESVNDT05ORUNURUQ7Ci0JcHJpdi0+c2VjaW5mby5hdXRoX21vZGUgPSBJV19BVVRIX0FMR19PUEVOX1NZU1RFTTsKLQlwcml2LT5tb2RlID0gSVdfTU9ERV9JTkZSQTsKIAlwcml2LT5jaGFubmVsID0gREVGQVVMVF9BRF9IT0NfQ0hBTk5FTDsKIAlwcml2LT5tYWNfY29udHJvbCA9IENNRF9BQ1RfTUFDX1JYX09OIHwgQ01EX0FDVF9NQUNfVFhfT047CiAJcHJpdi0+cmFkaW9fb24gPSAxOwotCXByaXYtPmVuYWJsZWh3YXV0byA9IDE7CiAJcHJpdi0+cHNtb2RlID0gTEJTODAyXzExUE9XRVJNT0RFQ0FNOwogCXByaXYtPnBzc3RhdGUgPSBQU19TVEFURV9GVUxMX1BPV0VSOwogCXByaXYtPmlzX2RlZXBfc2xlZXAgPSAwOwogCXByaXYtPmlzX2F1dG9fZGVlcF9zbGVlcF9lbmFibGVkID0gMDsKKwlwcml2LT5kZWVwX3NsZWVwX3JlcXVpcmVkID0gMDsKIAlwcml2LT53YWtldXBfZGV2X3JlcXVpcmVkID0gMDsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5kc19hd2FrZV9xKTsKIAlwcml2LT5hdXRodHlwZV9hdXRvID0gMTsKLQorCXByaXYtPmlzX2hvc3Rfc2xlZXBfY29uZmlndXJlZCA9IDA7CisJcHJpdi0+aXNfaG9zdF9zbGVlcF9hY3RpdmF0ZWQgPSAwOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPmhvc3Rfc2xlZXBfcSk7CiAJbXV0ZXhfaW5pdCgmcHJpdi0+bG9jayk7CiAKIAlzZXR1cF90aW1lcigmcHJpdi0+Y29tbWFuZF90aW1lciwgbGJzX2NtZF90aW1lb3V0X2hhbmRsZXIsCkBAIC04NDksNyArNzM0LDYgQEAKIAlJTklUX0xJU1RfSEVBRCgmcHJpdi0+Y21kcGVuZGluZ3EpOwogCiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmRyaXZlcl9sb2NrKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5jbWRfcGVuZGluZyk7CiAKIAkvKiBBbGxvY2F0ZSB0aGUgY29tbWFuZCBidWZmZXJzICovCiAJaWYgKGxic19hbGxvY2F0ZV9jbWRfYnVmZmVyKHByaXYpKSB7CkBAIC04ODEsOCArNzY1LDYgQEAKIAlrZmlmb19mcmVlKCZwcml2LT5ldmVudF9maWZvKTsKIAlkZWxfdGltZXIoJnByaXYtPmNvbW1hbmRfdGltZXIpOwogCWRlbF90aW1lcigmcHJpdi0+YXV0b19kZWVwc2xlZXBfdGltZXIpOwotCWtmcmVlKHByaXYtPm5ldHdvcmtzKTsKLQlwcml2LT5uZXR3b3JrcyA9IE5VTEw7CiAKIAlsYnNfZGViX2xlYXZlKExCU19ERUJfTUFJTik7CiB9CkBAIC05MTksNyArODAxLDcgQEAKIAkJbGJzX3ByX2VycigiY2ZnODAyMTEgaW5pdCBmYWlsZWRcbiIpOwogCQlnb3RvIGRvbmU7CiAJfQotCS8qIFRPRE8/ICovCisKIAl3ZGV2LT5pZnR5cGUgPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOwogCXByaXYgPSB3ZGV2X3ByaXYod2Rldik7CiAJcHJpdi0+d2RldiA9IHdkZXY7CkBAIC05MjksNyArODExLDYgQEAKIAkJZ290byBlcnJfd2RldjsKIAl9CiAKLQkvL1RPRE8/IGRldiA9IGFsbG9jX25ldGRldl9tcSgwLCAid2xhbiVkIiwgZXRoZXJfc2V0dXAsIElXTV9UWF9RVUVVRVMpOwogCWRldiA9IGFsbG9jX25ldGRldigwLCAid2xhbiVkIiwgZXRoZXJfc2V0dXApOwogCWlmICghZGV2KSB7CiAJCWRldl9lcnIoZG1kZXYsICJubyBtZW1vcnkgZm9yIG5ldHdvcmsgZGV2aWNlIGluc3RhbmNlXG4iKTsKQEAgLTk0NSwyMCArODI2LDEwIEBACiAgCWRldi0+bmV0ZGV2X29wcyA9ICZsYnNfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogCWRldi0+ZXRodG9vbF9vcHMgPSAmbGJzX2V0aHRvb2xfb3BzOwotI2lmZGVmCVdJUkVMRVNTX0VYVAotCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmbGJzX2hhbmRsZXJfZGVmOwotI2VuZGlmCiAJZGV2LT5mbGFncyB8PSBJRkZfQlJPQURDQVNUIHwgSUZGX01VTFRJQ0FTVDsKIAotCi0JLy8gVE9ETzoga3phbGxvYyArIGl3bV9pbml0X2RlZmF1bHRfcHJvZmlsZShpd20sIGl3bS0+dW1hY19wcm9maWxlKTsgPz8KLQotCiAJcHJpdi0+Y2FyZCA9IGNhcmQ7Ci0JcHJpdi0+aW5mcmFfb3BlbiA9IDA7CiAKLQotCXByaXYtPnJ0YXBfbmV0X2RldiA9IE5VTEw7CiAJc3RyY3B5KGRldi0+bmFtZSwgIndsYW4lZCIpOwogCiAJbGJzX2RlYl90aHJlYWQoIlN0YXJ0aW5nIG1haW4gdGhyZWFkLi4uXG4iKTsKQEAgLTk3MCwxMiArODQxLDExIEBACiAJfQogCiAJcHJpdi0+d29ya190aHJlYWQgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgibGJzX3dvcmtlciIpOwotCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5hc3NvY193b3JrLCBsYnNfYXNzb2NpYXRpb25fd29ya2VyKTsKLQlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+c2Nhbl93b3JrLCBsYnNfc2Nhbl93b3JrZXIpOwogCUlOSVRfV09SSygmcHJpdi0+bWNhc3Rfd29yaywgbGJzX3NldF9tY2FzdF93b3JrZXIpOwogCiAJcHJpdi0+d29sX2NyaXRlcmlhID0gMHhmZmZmZmZmZjsKIAlwcml2LT53b2xfZ3BpbyA9IDB4ZmY7CisJcHJpdi0+d29sX2dhcCA9IDIwOwogCiAJZ290byBkb25lOwogCkBAIC0xMDA0LDEyICs4NzQsMTAgQEAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfTUFJTik7CiAKIAlsYnNfcmVtb3ZlX21lc2gocHJpdik7Ci0JbGJzX3JlbW92ZV9ydGFwKHByaXYpOworCWxic19zY2FuX2RlaW5pdChwcml2KTsKIAogCWRldiA9IHByaXYtPmRldjsKIAotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+c2Nhbl93b3JrKTsKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmFzc29jX3dvcmspOwogCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPm1jYXN0X3dvcmspOwogCiAJLyogd29ya2VyIHRocmVhZCBkZXN0cnVjdGlvbiBibG9ja3Mgb24gdGhlIGluLWZsaWdodCBjb21tYW5kIHdoaWNoCkBAIC0xMDIxLDE2ICs4ODksMTggQEAKIAogCWlmIChwcml2LT5wc21vZGUgPT0gTEJTODAyXzExUE9XRVJNT0RFTUFYX1BTUCkgewogCQlwcml2LT5wc21vZGUgPSBMQlM4MDJfMTFQT1dFUk1PREVDQU07Ci0JCWxic19wc193YWtldXAocHJpdiwgQ01EX09QVElPTl9XQUlURk9SUlNQKTsKKwkJbGJzX3NldF9wc19tb2RlKHByaXYsIFBTX01PREVfQUNUSU9OX0VYSVRfUFMsIHRydWUpOwogCX0KIAotCWxic19zZW5kX2Rpc2Nvbm5lY3Rfbm90aWZpY2F0aW9uKHByaXYpOwotCiAJaWYgKHByaXYtPmlzX2RlZXBfc2xlZXApIHsKIAkJcHJpdi0+aXNfZGVlcF9zbGVlcCA9IDA7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+ZHNfYXdha2VfcSk7CiAJfQogCisJcHJpdi0+aXNfaG9zdF9zbGVlcF9jb25maWd1cmVkID0gMDsKKwlwcml2LT5pc19ob3N0X3NsZWVwX2FjdGl2YXRlZCA9IDA7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT5ob3N0X3NsZWVwX3EpOworCiAJLyogU3RvcCB0aGUgdGhyZWFkIHNlcnZpY2luZyB0aGUgaW50ZXJydXB0cyAqLwogCXByaXYtPnN1cnByaXNlcmVtb3ZlZCA9IDE7CiAJa3RocmVhZF9zdG9wKHByaXYtPm1haW5fdGhyZWFkKTsKQEAgLTEwNDYsNyArOTE2LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGxic19yZW1vdmVfY2FyZCk7CiAKIAotc3RhdGljIGludCBsYnNfcnRhcF9zdXBwb3J0ZWQoc3RydWN0IGxic19wcml2YXRlICpwcml2KQoraW50IGxic19ydGFwX3N1cHBvcnRlZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCiB7CiAJaWYgKE1SVkxfRldfTUFKT1JfUkVWKHByaXYtPmZ3cmVsZWFzZSkgPT0gTVJWTF9GV19WNSkKIAkJcmV0dXJuIDE7CkBAIC0xMDc4LDE2ICs5NDgsNiBAQAogCiAJbGJzX2luaXRfbWVzaChwcml2KTsKIAotCS8qCi0JICogV2hpbGUgcnRhcCBpc24ndCByZWxhdGVkIHRvIG1lc2gsIG9ubHkgbWVzaC1lbmFibGVkCi0JICogZmlybXdhcmUgaW1wbGVtZW50cyB0aGUgcnRhcCBmdW5jdGlvbmFsaXR5IHZpYQotCSAqIENNRF84MDJfMTFfTU9OSVRPUl9NT0RFLgotCSAqLwotCWlmIChsYnNfcnRhcF9zdXBwb3J0ZWQocHJpdikpIHsKLQkJaWYgKGRldmljZV9jcmVhdGVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9sYnNfcnRhcCkpCi0JCQlsYnNfcHJfZXJyKCJjYW5ub3QgcmVnaXN0ZXIgbGJzX3J0YXAgYXR0cmlidXRlXG4iKTsKLQl9Ci0KIAlsYnNfZGVidWdmc19pbml0X29uZShwcml2LCBkZXYpOwogCiAJbGJzX3ByX2luZm8oIiVzOiBNYXJ2ZWxsIFdMQU4gODAyLjExIGFkYXB0ZXJcbiIsIGRldi0+bmFtZSk7CkBAIC0xMTE5LDkgKzk3OSw2IEBACiAJbGJzX2RlYnVnZnNfcmVtb3ZlX29uZShwcml2KTsKIAlsYnNfZGVpbml0X21lc2gocHJpdik7CiAKLQlpZiAobGJzX3J0YXBfc3VwcG9ydGVkKHByaXYpKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfbGJzX3J0YXApOwotCiAJLyogRGVsZXRlIHRoZSB0aW1lb3V0IG9mIHRoZSBjdXJyZW50bHkgcHJvY2Vzc2luZyBjb21tYW5kICovCiAJZGVsX3RpbWVyX3N5bmMoJnByaXYtPmNvbW1hbmRfdGltZXIpOwogCWRlbF90aW1lcl9zeW5jKCZwcml2LT5hdXRvX2RlZXBzbGVlcF90aW1lcik7CkBAIC0xMTk1LDcgKzEwNTIsNyBAQAogCW1lbXNldCgmY29uZmlybV9zbGVlcCwgMCwgc2l6ZW9mKGNvbmZpcm1fc2xlZXApKTsKIAljb25maXJtX3NsZWVwLmhkci5jb21tYW5kID0gY3B1X3RvX2xlMTYoQ01EXzgwMl8xMV9QU19NT0RFKTsKIAljb25maXJtX3NsZWVwLmhkci5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGNvbmZpcm1fc2xlZXApKTsKLQljb25maXJtX3NsZWVwLmFjdGlvbiA9IGNwdV90b19sZTE2KENNRF9TVUJDTURfU0xFRVBfQ09ORklSTUVEKTsKKwljb25maXJtX3NsZWVwLmFjdGlvbiA9IGNwdV90b19sZTE2KFBTX01PREVfQUNUSU9OX1NMRUVQX0NPTkZJUk1FRCk7CiAJbGJzX2RlYnVnZnNfaW5pdCgpOwogCWxic19kZWJfbGVhdmUoTEJTX0RFQl9NQUlOKTsKIAlyZXR1cm4gMDsKQEAgLTEyMDgsODcgKzEwNjUsNiBAQAogCWxic19kZWJfbGVhdmUoTEJTX0RFQl9NQUlOKTsKIH0KIAotLyoKLSAqIHJ0YXAgaW50ZXJmYWNlIHN1cHBvcnQgZnVjdGlvbnMKLSAqLwotCi1zdGF0aWMgaW50IGxic19ydGFwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQkvKiBZZXMsIF9zdG9wXyB0aGUgcXVldWUuIEJlY2F1c2Ugd2UgZG9uJ3Qgc3VwcG9ydCBpbmplY3Rpb24gKi8KLQlsYnNfZGViX2VudGVyKExCU19ERUJfTUFJTik7Ci0JbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX0xFQVZFKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBsYnNfcnRhcF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JbGJzX2RlYl9lbnRlcihMQlNfREVCX01BSU4pOwotCWxic19kZWJfbGVhdmUoTEJTX0RFQl9NQUlOKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIG5ldGRldl90eF90IGxic19ydGFwX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JcmV0dXJuIE5FVERFVl9UWF9CVVNZOwotfQotCi1zdGF0aWMgdm9pZCBsYnNfcmVtb3ZlX3J0YXAoc3RydWN0IGxic19wcml2YXRlICpwcml2KQotewotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9NQUlOKTsKLQlpZiAocHJpdi0+cnRhcF9uZXRfZGV2ID09IE5VTEwpCi0JCWdvdG8gb3V0OwotCXVucmVnaXN0ZXJfbmV0ZGV2KHByaXYtPnJ0YXBfbmV0X2Rldik7Ci0JZnJlZV9uZXRkZXYocHJpdi0+cnRhcF9uZXRfZGV2KTsKLQlwcml2LT5ydGFwX25ldF9kZXYgPSBOVUxMOwotb3V0OgotCWxic19kZWJfbGVhdmUoTEJTX0RFQl9NQUlOKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGFwX25ldGRldl9vcHMgPSB7Ci0JLm5kb19vcGVuID0gbGJzX3J0YXBfb3BlbiwKLQkubmRvX3N0b3AgPSBsYnNfcnRhcF9zdG9wLAotCS5uZG9fc3RhcnRfeG1pdCA9IGxic19ydGFwX2hhcmRfc3RhcnRfeG1pdCwKLX07Ci0KLXN0YXRpYyBpbnQgbGJzX2FkZF9ydGFwKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKLXsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqcnRhcF9kZXY7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfTUFJTik7Ci0JaWYgKHByaXYtPnJ0YXBfbmV0X2RldikgewotCQlyZXQgPSAtRVBFUk07Ci0JCWdvdG8gb3V0OwotCX0KLQotCXJ0YXBfZGV2ID0gYWxsb2NfbmV0ZGV2KDAsICJydGFwJWQiLCBldGhlcl9zZXR1cCk7Ci0JaWYgKHJ0YXBfZGV2ID09IE5VTEwpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbWVtY3B5KHJ0YXBfZGV2LT5kZXZfYWRkciwgcHJpdi0+Y3VycmVudF9hZGRyLCBFVEhfQUxFTik7Ci0JcnRhcF9kZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQOwotCXJ0YXBfZGV2LT5uZXRkZXZfb3BzID0gJnJ0YXBfbmV0ZGV2X29wczsKLQlydGFwX2Rldi0+bWxfcHJpdiA9IHByaXY7Ci0JU0VUX05FVERFVl9ERVYocnRhcF9kZXYsIHByaXYtPmRldi0+ZGV2LnBhcmVudCk7Ci0KLQlyZXQgPSByZWdpc3Rlcl9uZXRkZXYocnRhcF9kZXYpOwotCWlmIChyZXQpIHsKLQkJZnJlZV9uZXRkZXYocnRhcF9kZXYpOwotCQlnb3RvIG91dDsKLQl9Ci0JcHJpdi0+cnRhcF9uZXRfZGV2ID0gcnRhcF9kZXY7Ci0KLW91dDoKLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9NQUlOLCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCiBtb2R1bGVfaW5pdChsYnNfaW5pdF9tb2R1bGUpOwogbW9kdWxlX2V4aXQobGJzX2V4aXRfbW9kdWxlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWVzaC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWVzaC5jCmluZGV4IGUzODVhZjEuLjE5NDc2MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21lc2guYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tZXNoLmMKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CisjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CiAKICNpbmNsdWRlICJtZXNoLmgiCiAjaW5jbHVkZSAiZGVjbC5oIgpAQCAtMzE0LDcgKzMxNSw3IEBACiAKIAlzcGluX2xvY2tfaXJxKCZwcml2LT5kcml2ZXJfbG9jayk7CiAKLQlpZiAocHJpdi0+bW9uaXRvcm1vZGUpIHsKKwlpZiAocHJpdi0+d2Rldi0+aWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpIHsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIG91dDsKIAl9CkBAIC0zNjksOSArMzcwLDYgQEAKIAogCVNFVF9ORVRERVZfREVWKHByaXYtPm1lc2hfZGV2LCBwcml2LT5kZXYtPmRldi5wYXJlbnQpOwogCi0jaWZkZWYJV0lSRUxFU1NfRVhUCi0JbWVzaF9kZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJm1lc2hfaGFuZGxlcl9kZWY7Ci0jZW5kaWYKIAltZXNoX2Rldi0+ZmxhZ3MgfD0gSUZGX0JST0FEQ0FTVCB8IElGRl9NVUxUSUNBU1Q7CiAJLyogUmVnaXN0ZXIgdmlydHVhbCBtZXNoIGludGVyZmFjZSAqLwogCXJldCA9IHJlZ2lzdGVyX25ldGRldihtZXNoX2Rldik7CkBAIC00NTcsNjUgKzQ1NSwxODkgQEAKICAqIE1lc2ggY29tbWFuZCBoYW5kbGluZwogICovCiAKLWludCBsYnNfY21kX2J0X2FjY2VzcyhzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKmNtZCwKLQkJCSAgICAgICB1MTYgY21kX2FjdGlvbiwgdm9pZCAqcGRhdGFfYnVmKQorLyoqCisgKiAgQGJyaWVmIEFkZCBvciBkZWxldGUgTWVzaCBCbGluZGluZyBUYWJsZSBlbnRyaWVzCisgKgorICogIEBwYXJhbSBwcml2ICAgIAlBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQorICogIEBwYXJhbSBhZGQgIAlUUlVFIHRvIGFkZCB0aGUgZW50cnksIEZBTFNFIHRvIGRlbGV0ZSBpdAorICogIEBwYXJhbSBhZGRyMSAgICAgICAgRGVzdGluYXRpb24gYWRkcmVzcyB0byBibGluZCBvciB1bmJsaW5kCisgKgorICogIEByZXR1cm4gCSAgIAkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKKyAqLworaW50IGxic19tZXNoX2J0X2FkZF9kZWwoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBib29sIGFkZCwgdTggKmFkZHIxKQogewotCXN0cnVjdCBjbWRfZHNfYnRfYWNjZXNzICpidF9hY2Nlc3MgPSAmY21kLT5wYXJhbXMuYnQ7Ci0JbGJzX2RlYl9lbnRlcl9hcmdzKExCU19ERUJfQ01ELCAiYWN0aW9uICVkIiwgY21kX2FjdGlvbik7CisJc3RydWN0IGNtZF9kc19idF9hY2Nlc3MgY21kOworCWludCByZXQgPSAwOwogCi0JY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoQ01EX0JUX0FDQ0VTUyk7Ci0JY21kLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBjbWRfZHNfYnRfYWNjZXNzKSArCi0JCXNpemVvZihzdHJ1Y3QgY21kX2hlYWRlcikpOwotCWNtZC0+cmVzdWx0ID0gMDsKLQlidF9hY2Nlc3MtPmFjdGlvbiA9IGNwdV90b19sZTE2KGNtZF9hY3Rpb24pOworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DTUQpOwogCi0Jc3dpdGNoIChjbWRfYWN0aW9uKSB7Ci0JY2FzZSBDTURfQUNUX0JUX0FDQ0VTU19BREQ6Ci0JCW1lbWNweShidF9hY2Nlc3MtPmFkZHIxLCBwZGF0YV9idWYsIDIgKiBFVEhfQUxFTik7CisJQlVHX09OKGFkZHIxID09IE5VTEwpOworCisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQuaGRyLnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoY21kKSk7CisJbWVtY3B5KGNtZC5hZGRyMSwgYWRkcjEsIEVUSF9BTEVOKTsKKwlpZiAoYWRkKSB7CisJCWNtZC5hY3Rpb24gPSBjcHVfdG9fbGUxNihDTURfQUNUX0JUX0FDQ0VTU19BREQpOwogCQlsYnNfZGViX2hleChMQlNfREVCX01FU0gsICJCVF9BREQ6IGJsaW5kZWQgTUFDIGFkZHIiLAotCQkJYnRfYWNjZXNzLT5hZGRyMSwgNik7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0FDVF9CVF9BQ0NFU1NfREVMOgotCQltZW1jcHkoYnRfYWNjZXNzLT5hZGRyMSwgcGRhdGFfYnVmLCAxICogRVRIX0FMRU4pOworCQkJYWRkcjEsIEVUSF9BTEVOKTsKKwl9IGVsc2UgeworCQljbWQuYWN0aW9uID0gY3B1X3RvX2xlMTYoQ01EX0FDVF9CVF9BQ0NFU1NfREVMKTsKIAkJbGJzX2RlYl9oZXgoTEJTX0RFQl9NRVNILCAiQlRfREVMOiBibGluZGVkIE1BQyBhZGRyIiwKLQkJCWJ0X2FjY2Vzcy0+YWRkcjEsIDYpOwotCQlicmVhazsKLQljYXNlIENNRF9BQ1RfQlRfQUNDRVNTX0xJU1Q6Ci0JCWJ0X2FjY2Vzcy0+aWQgPSBjcHVfdG9fbGUzMigqKHUzMiAqKSBwZGF0YV9idWYpOwotCQlicmVhazsKLQljYXNlIENNRF9BQ1RfQlRfQUNDRVNTX1JFU0VUOgotCQlicmVhazsKLQljYXNlIENNRF9BQ1RfQlRfQUNDRVNTX1NFVF9JTlZFUlQ6Ci0JCWJ0X2FjY2Vzcy0+aWQgPSBjcHVfdG9fbGUzMigqKHUzMiAqKSBwZGF0YV9idWYpOwotCQlicmVhazsKLQljYXNlIENNRF9BQ1RfQlRfQUNDRVNTX0dFVF9JTlZFUlQ6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOworCQkJYWRkcjEsIEVUSF9BTEVOKTsKIAl9Ci0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX0NNRCk7Ci0JcmV0dXJuIDA7CisKKwlyZXQgPSBsYnNfY21kX3dpdGhfcmVzcG9uc2UocHJpdiwgQ01EX0JUX0FDQ0VTUywgJmNtZCk7CisKKwlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9DTUQsICJyZXQgJWQiLCByZXQpOworCXJldHVybiByZXQ7CiB9CiAKLWludCBsYnNfY21kX2Z3dF9hY2Nlc3Moc3RydWN0IGNtZF9kc19jb21tYW5kICpjbWQsCi0JCQkgICAgICAgdTE2IGNtZF9hY3Rpb24sIHZvaWQgKnBkYXRhX2J1ZikKKy8qKgorICogIEBicmllZiBSZXNldC9jbGVhciB0aGUgbWVzaCBibGluZGluZyB0YWJsZQorICoKKyAqICBAcGFyYW0gcHJpdiAgICAJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiAgQHJldHVybiAJICAgCTAgb24gc3VjY2VzcywgZXJyb3Igb24gZmFpbHVyZQorICovCitpbnQgbGJzX21lc2hfYnRfcmVzZXQoc3RydWN0IGxic19wcml2YXRlICpwcml2KQogewotCXN0cnVjdCBjbWRfZHNfZnd0X2FjY2VzcyAqZnd0X2FjY2VzcyA9ICZjbWQtPnBhcmFtcy5md3Q7CisJc3RydWN0IGNtZF9kc19idF9hY2Nlc3MgY21kOworCWludCByZXQgPSAwOworCisJbGJzX2RlYl9lbnRlcihMQlNfREVCX0NNRCk7CisKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCWNtZC5oZHIuc2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihjbWQpKTsKKwljbWQuYWN0aW9uID0gY3B1X3RvX2xlMTYoQ01EX0FDVF9CVF9BQ0NFU1NfUkVTRVQpOworCisJcmV0ID0gbGJzX2NtZF93aXRoX3Jlc3BvbnNlKHByaXYsIENNRF9CVF9BQ0NFU1MsICZjbWQpOworCisJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfQ01ELCAicmV0ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqICBAYnJpZWYgR2V0cyB0aGUgaW52ZXJ0ZWQgc3RhdHVzIG9mIHRoZSBtZXNoIGJsaW5kaW5nIHRhYmxlCisgKgorICogIE5vcm1hbGx5IHRoZSBmaXJtd2FyZSAiYmxpbmRzIiBvciBpZ25vcmVzIHRyYWZmaWMgZnJvbSBtZXNoIG5vZGVzIGluIHRoZQorICogIHRhYmxlLCBidXQgYW4gaW52ZXJ0ZWQgdGFibGUgYWxsb3dzICpvbmx5KiB0cmFmZmljIGZyb20gbm9kZXMgbGlzdGVkIGluCisgKiAgdGhlIHRhYmxlLgorICoKKyAqICBAcGFyYW0gcHJpdiAgICAJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqICBAcGFyYW0gaW52ZXJ0ICAJT24gc3VjY2VzcywgVFJVRSBpZiB0aGUgYmxpbmRpbmcgdGFibGUgaXMgaW52ZXJ0ZWQsCisgKiAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFIGlmIGl0IGlzIG5vdCBpbnZlcnRlZAorICoKKyAqICBAcmV0dXJuIAkgICAJMCBvbiBzdWNjZXNzLCBlcnJvciBvbiBmYWlsdXJlCisgKi8KK2ludCBsYnNfbWVzaF9idF9nZXRfaW52ZXJ0ZWQoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBib29sICppbnZlcnRlZCkKK3sKKwlzdHJ1Y3QgY21kX2RzX2J0X2FjY2VzcyBjbWQ7CisJaW50IHJldCA9IDA7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfQ01EKTsKKworCUJVR19PTihpbnZlcnRlZCA9PSBOVUxMKTsKKworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLmhkci5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGNtZCkpOworCWNtZC5hY3Rpb24gPSBjcHVfdG9fbGUxNihDTURfQUNUX0JUX0FDQ0VTU19HRVRfSU5WRVJUKTsKKworCXJldCA9IGxic19jbWRfd2l0aF9yZXNwb25zZShwcml2LCBDTURfQlRfQUNDRVNTLCAmY21kKTsKKwlpZiAocmV0ID09IDApCisJCSppbnZlcnRlZCA9ICEhY21kLmlkOworCisJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfQ01ELCAicmV0ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqICBAYnJpZWYgU2V0cyB0aGUgaW52ZXJ0ZWQgc3RhdHVzIG9mIHRoZSBtZXNoIGJsaW5kaW5nIHRhYmxlCisgKgorICogIE5vcm1hbGx5IHRoZSBmaXJtd2FyZSAiYmxpbmRzIiBvciBpZ25vcmVzIHRyYWZmaWMgZnJvbSBtZXNoIG5vZGVzIGluIHRoZQorICogIHRhYmxlLCBidXQgYW4gaW52ZXJ0ZWQgdGFibGUgYWxsb3dzICpvbmx5KiB0cmFmZmljIGZyb20gbm9kZXMgbGlzdGVkIGluCisgKiAgdGhlIHRhYmxlLgorICoKKyAqICBAcGFyYW0gcHJpdiAgICAJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqICBAcGFyYW0gaW52ZXJ0ICAJVFJVRSB0byBpbnZlcnQgdGhlIGJsaW5kaW5nIHRhYmxlIChvbmx5IHRyYWZmaWMgZnJvbQorICogICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVkIG5vZGVzIGFsbG93ZWQpLCBGQUxTRSB0byByZXR1cm4gaXQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHRvIG5vcm1hbCBzdGF0ZSAobGlzdGVkIG5vZGVzIGlnbm9yZWQpCisgKgorICogIEByZXR1cm4gCSAgIAkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKKyAqLworaW50IGxic19tZXNoX2J0X3NldF9pbnZlcnRlZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGJvb2wgaW52ZXJ0ZWQpCit7CisJc3RydWN0IGNtZF9kc19idF9hY2Nlc3MgY21kOworCWludCByZXQgPSAwOworCisJbGJzX2RlYl9lbnRlcihMQlNfREVCX0NNRCk7CisKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCWNtZC5oZHIuc2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihjbWQpKTsKKwljbWQuYWN0aW9uID0gY3B1X3RvX2xlMTYoQ01EX0FDVF9CVF9BQ0NFU1NfU0VUX0lOVkVSVCk7CisJY21kLmlkID0gISFpbnZlcnRlZDsKKworCXJldCA9IGxic19jbWRfd2l0aF9yZXNwb25zZShwcml2LCBDTURfQlRfQUNDRVNTLCAmY21kKTsKKworCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0NNRCwgInJldCAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiAgQGJyaWVmIExpc3QgYW4gZW50cnkgaW4gdGhlIG1lc2ggYmxpbmRpbmcgdGFibGUKKyAqCisgKiAgQHBhcmFtIHByaXYgICAgCUEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKiAgQHBhcmFtIGlkCQlUaGUgSUQgb2YgdGhlIGVudHJ5IHRvIGxpc3QKKyAqICBAcGFyYW0gYWRkcjEJTUFDIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWJsZSBlbnRyeQorICoKKyAqICBAcmV0dXJuIAkgICAJMCBvbiBzdWNjZXNzLCBlcnJvciBvbiBmYWlsdXJlCisgKi8KK2ludCBsYnNfbWVzaF9idF9nZXRfZW50cnkoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1MzIgaWQsIHU4ICphZGRyMSkKK3sKKwlzdHJ1Y3QgY21kX2RzX2J0X2FjY2VzcyBjbWQ7CisJaW50IHJldCA9IDA7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfQ01EKTsKKworCUJVR19PTihhZGRyMSA9PSBOVUxMKTsKKworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLmhkci5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGNtZCkpOworCWNtZC5hY3Rpb24gPSBjcHVfdG9fbGUxNihDTURfQUNUX0JUX0FDQ0VTU19TRVRfSU5WRVJUKTsKKwljbWQuaWQgPSBjcHVfdG9fbGUzMihpZCk7CisKKwlyZXQgPSBsYnNfY21kX3dpdGhfcmVzcG9uc2UocHJpdiwgQ01EX0JUX0FDQ0VTUywgJmNtZCk7CisJaWYgKHJldCA9PSAwKQorCQltZW1jcHkoYWRkcjEsIGNtZC5hZGRyMSwgc2l6ZW9mKGNtZC5hZGRyMSkpOworCisJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfQ01ELCAicmV0ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqICBAYnJpZWYgQWNjZXNzIHRoZSBtZXNoIGZvcndhcmRpbmcgdGFibGUKKyAqCisgKiAgQHBhcmFtIHByaXYgICAgCUEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKiAgQHBhcmFtIGNtZF9hY3Rpb24JVGhlIGZvcndhcmRpbmcgdGFibGUgYWN0aW9uIHRvIHBlcmZvcm0KKyAqICBAcGFyYW0gY21kCQlUaGUgcHJlLWZpbGxlZCBGV1RfQUNDRVNTIGNvbW1hbmQKKyAqCisgKiAgQHJldHVybiAJICAgCTAgb24gc3VjY2VzcyBhbmQgJ2NtZCcgd2lsbCBiZSBmaWxsZWQgd2l0aCB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgZmlybXdhcmUncyByZXNwb25zZQorICovCitpbnQgbGJzX2NtZF9md3RfYWNjZXNzKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdTE2IGNtZF9hY3Rpb24sCisJCQlzdHJ1Y3QgY21kX2RzX2Z3dF9hY2Nlc3MgKmNtZCkKK3sKKwlpbnQgcmV0OworCiAJbGJzX2RlYl9lbnRlcl9hcmdzKExCU19ERUJfQ01ELCAiYWN0aW9uICVkIiwgY21kX2FjdGlvbik7CiAKLQljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihDTURfRldUX0FDQ0VTUyk7Ci0JY21kLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBjbWRfZHNfZnd0X2FjY2VzcykgKwotCQlzaXplb2Yoc3RydWN0IGNtZF9oZWFkZXIpKTsKLQljbWQtPnJlc3VsdCA9IDA7CisJY21kLT5oZHIuY29tbWFuZCA9IGNwdV90b19sZTE2KENNRF9GV1RfQUNDRVNTKTsKKwljbWQtPmhkci5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBjbWRfZHNfZnd0X2FjY2VzcykpOworCWNtZC0+aGRyLnJlc3VsdCA9IDA7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihjbWRfYWN0aW9uKTsKIAotCWlmIChwZGF0YV9idWYpCi0JCW1lbWNweShmd3RfYWNjZXNzLCBwZGF0YV9idWYsIHNpemVvZigqZnd0X2FjY2VzcykpOwotCWVsc2UKLQkJbWVtc2V0KGZ3dF9hY2Nlc3MsIDAsIHNpemVvZigqZnd0X2FjY2VzcykpOworCXJldCA9IGxic19jbWRfd2l0aF9yZXNwb25zZShwcml2LCBDTURfRldUX0FDQ0VTUywgY21kKTsKIAotCWZ3dF9hY2Nlc3MtPmFjdGlvbiA9IGNwdV90b19sZTE2KGNtZF9hY3Rpb24pOwotCi0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX0NNRCk7CisJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfQ01ELCAicmV0ICVkIiwgcmV0KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWVzaC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWVzaC5oCmluZGV4IGUyNTczMzAuLmFmYjJlOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21lc2guaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tZXNoLmgKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KICNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KIAorI2luY2x1ZGUgImhvc3QuaCIKIAogI2lmZGVmIENPTkZJR19MSUJFUlRBU19NRVNICiAKQEAgLTUxLDEwICs1MiwxNSBAQAogc3RydWN0IGNtZF9kc19tZXNoX2FjY2VzczsKIHN0cnVjdCBjbWRfZHNfbWVzaF9jb25maWc7CiAKLWludCBsYnNfY21kX2J0X2FjY2VzcyhzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKmNtZCwKLQl1MTYgY21kX2FjdGlvbiwgdm9pZCAqcGRhdGFfYnVmKTsKLWludCBsYnNfY21kX2Z3dF9hY2Nlc3Moc3RydWN0IGNtZF9kc19jb21tYW5kICpjbWQsCi0JdTE2IGNtZF9hY3Rpb24sIHZvaWQgKnBkYXRhX2J1Zik7CitpbnQgbGJzX21lc2hfYnRfYWRkX2RlbChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGJvb2wgYWRkLCB1OCAqYWRkcjEpOworaW50IGxic19tZXNoX2J0X3Jlc2V0KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdik7CitpbnQgbGJzX21lc2hfYnRfZ2V0X2ludmVydGVkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgYm9vbCAqaW52ZXJ0ZWQpOworaW50IGxic19tZXNoX2J0X3NldF9pbnZlcnRlZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGJvb2wgaW52ZXJ0ZWQpOworaW50IGxic19tZXNoX2J0X2dldF9lbnRyeShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHUzMiBpZCwgdTggKmFkZHIxKTsKKworaW50IGxic19jbWRfZnd0X2FjY2VzcyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHUxNiBjbWRfYWN0aW9uLAorCQkJc3RydWN0IGNtZF9kc19md3RfYWNjZXNzICpjbWQpOworCiBpbnQgbGJzX21lc2hfYWNjZXNzKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdWludDE2X3QgY21kX2FjdGlvbiwKIAkJICAgIHN0cnVjdCBjbWRfZHNfbWVzaF9hY2Nlc3MgKmNtZCk7CiBpbnQgbGJzX21lc2hfY29uZmlnX3NlbmQoc3RydWN0IGxic19wcml2YXRlICpwcml2LApAQCAtNzAsMTEgKzc2LDYgQEAKIHZvaWQgbGJzX3BlcnNpc3RfY29uZmlnX3JlbW92ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KTsKIAogCi0vKiBXRVhUIGhhbmRsZXIgKi8KLQotZXh0ZXJuIHN0cnVjdCBpd19oYW5kbGVyX2RlZiBtZXNoX2hhbmRsZXJfZGVmOwotCi0KIC8qIEV0aHRvb2wgc3RhdGlzdGljcyAqLwogCiBzdHJ1Y3QgZXRodG9vbF9zdGF0czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3JhZGlvdGFwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9yYWRpb3RhcC5oCmluZGV4IGQxNmIyNjQuLmIzYzhlYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3JhZGlvdGFwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcmFkaW90YXAuaApAQCAtNiw3ICs2LDcgQEAKIAl1OCB0eHBvd2VyOwogCXU4IHJ0c19yZXRyaWVzOwogCXU4IGRhdGFfcmV0cmllczsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBUWF9SQURJT1RBUF9QUkVTRU5UICgJCQkJXAogCSgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9SQVRFKSB8CQlcCkBAIC0zNCw3ICszNCw3IEBACiAJdTggZmxhZ3M7CiAJdTggcmF0ZTsKIAl1OCBhbnRzaWduYWw7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgUlhfUkFESU9UQVBfUFJFU0VOVCAoCQkJXAogCSgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9GTEFHUykgfAlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcnguYwppbmRleCA3YTM3N2Y1Li5hNGQwYmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3J4LmMKQEAgLTQsMTggKzQsMTkgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgogCisjaW5jbHVkZSAiZGVmcy5oIgogI2luY2x1ZGUgImhvc3QuaCIKICNpbmNsdWRlICJyYWRpb3RhcC5oIgogI2luY2x1ZGUgImRlY2wuaCIKICNpbmNsdWRlICJkZXYuaCIKLSNpbmNsdWRlICJ3ZXh0LmgiCiAKIHN0cnVjdCBldGg4MDNoZHIgewogCXU4IGRlc3RfYWRkcls2XTsKIAl1OCBzcmNfYWRkcls2XTsKIAl1MTYgaDgwM19sZW47Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCByZmMxMDQyaGRyIHsKIAl1OCBsbGNfZHNhcDsKQEAgLTIzLDExNCArMjQsMjIgQEAKIAl1OCBsbGNfY3RybDsKIAl1OCBzbmFwX291aVszXTsKIAl1MTYgc25hcF90eXBlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgcnhwYWNrZXRoZHIgewogCXN0cnVjdCBldGg4MDNoZHIgZXRoODAzX2hkcjsKIAlzdHJ1Y3QgcmZjMTA0MmhkciByZmMxMDQyX2hkcjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHJ4ODAyMTFwYWNrZXRoZHIgewogCXN0cnVjdCByeHBkIHJ4X3BkOwogCXZvaWQgKmV0aDgwMjExX2hkcjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RhdGljIGludCBwcm9jZXNzX3J4ZWRfODAyXzExX3BhY2tldChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCiAJc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIC8qKgotICogIEBicmllZglUaGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRoZSBhdmdTTlIgLgotICoKLSAqICBAcGFyYW0JcHJpdglBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEByZXR1cm4JYXZnU05SCi0gKi8KLXN0YXRpYyB1OCBsYnNfZ2V0YXZnc25yKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKLXsKLQl1OCBpOwotCXUxNiB0ZW1wID0gMDsKLQlpZiAocHJpdi0+bnVtU05STkYgPT0gMCkKLQkJcmV0dXJuIDA7Ci0JZm9yIChpID0gMDsgaSA8IHByaXYtPm51bVNOUk5GOyBpKyspCi0JCXRlbXAgKz0gcHJpdi0+cmF3U05SW2ldOwotCXJldHVybiAodTgpICh0ZW1wIC8gcHJpdi0+bnVtU05STkYpOwotCi19Ci0KLS8qKgotICogIEBicmllZglUaGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRoZSBBdmdORgotICoKLSAqICBAcGFyYW0JcHJpdglBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEByZXR1cm4JQXZnTkYKLSAqLwotc3RhdGljIHU4IGxic19nZXRhdmduZihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCi17Ci0JdTggaTsKLQl1MTYgdGVtcCA9IDA7Ci0JaWYgKHByaXYtPm51bVNOUk5GID09IDApCi0JCXJldHVybiAwOwotCWZvciAoaSA9IDA7IGkgPCBwcml2LT5udW1TTlJORjsgaSsrKQotCQl0ZW1wICs9IHByaXYtPnJhd05GW2ldOwotCXJldHVybiAodTgpICh0ZW1wIC8gcHJpdi0+bnVtU05STkYpOwotCi19Ci0KLS8qKgotICogIEBicmllZglUaGlzIGZ1bmN0aW9uIHNhdmUgdGhlIHJhdyBTTlIvTkYgdG8gb3VyIGludGVybmVsIGJ1ZmZlcgotICoKLSAqICBAcGFyYW0JcHJpdglBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEBwYXJhbQlwcnhwZAlBIHBvaW50ZXIgdG8gcnhwZCBzdHJ1Y3R1cmUgb2YgcmVjZWl2ZWQgcGFja2V0Ci0gKiAgQHJldHVybgluL2EKLSAqLwotc3RhdGljIHZvaWQgbGJzX3NhdmVfcmF3U05STkYoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBzdHJ1Y3QgcnhwZCAqcF9yeF9wZCkKLXsKLQlpZiAocHJpdi0+bnVtU05STkYgPCBERUZBVUxUX0RBVEFfQVZHX0ZBQ1RPUikKLQkJcHJpdi0+bnVtU05STkYrKzsKLQlwcml2LT5yYXdTTlJbcHJpdi0+bmV4dFNOUk5GXSA9IHBfcnhfcGQtPnNucjsKLQlwcml2LT5yYXdORltwcml2LT5uZXh0U05STkZdID0gcF9yeF9wZC0+bmY7Ci0JcHJpdi0+bmV4dFNOUk5GKys7Ci0JaWYgKHByaXYtPm5leHRTTlJORiA+PSBERUZBVUxUX0RBVEFfQVZHX0ZBQ1RPUikKLQkJcHJpdi0+bmV4dFNOUk5GID0gMDsKLX0KLQotLyoqCi0gKiAgQGJyaWVmCVRoaXMgZnVuY3Rpb24gY29tcHV0ZXMgdGhlIFJTU0kgaW4gcmVjZWl2ZWQgcGFja2V0LgotICoKLSAqICBAcGFyYW0JcHJpdglBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEBwYXJhbQlwcnhwZAlBIHBvaW50ZXIgdG8gcnhwZCBzdHJ1Y3R1cmUgb2YgcmVjZWl2ZWQgcGFja2V0Ci0gKiAgQHJldHVybgluL2EKLSAqLwotc3RhdGljIHZvaWQgbGJzX2NvbXB1dGVfcnNzaShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHN0cnVjdCByeHBkICpwX3J4X3BkKQotewotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX1JYKTsKLQotCWxic19kZWJfcngoInJ4cGQ6IFNOUiAlZCwgTkYgJWRcbiIsIHBfcnhfcGQtPnNuciwgcF9yeF9wZC0+bmYpOwotCWxic19kZWJfcngoImJlZm9yZSBjb21wdXRpbmcgU05SOiBTTlItYXZnID0gJWQsIE5GLWF2ZyA9ICVkXG4iLAotCSAgICAgICBwcml2LT5TTlJbVFlQRV9SWFBEXVtUWVBFX0FWR10gLyBBVkdfU0NBTEUsCi0JICAgICAgIHByaXYtPk5GW1RZUEVfUlhQRF1bVFlQRV9BVkddIC8gQVZHX1NDQUxFKTsKLQotCXByaXYtPlNOUltUWVBFX1JYUERdW1RZUEVfTk9BVkddID0gcF9yeF9wZC0+c25yOwotCXByaXYtPk5GW1RZUEVfUlhQRF1bVFlQRV9OT0FWR10gPSBwX3J4X3BkLT5uZjsKLQlsYnNfc2F2ZV9yYXdTTlJORihwcml2LCBwX3J4X3BkKTsKLQotCXByaXYtPlNOUltUWVBFX1JYUERdW1RZUEVfQVZHXSA9IGxic19nZXRhdmdzbnIocHJpdikgKiBBVkdfU0NBTEU7Ci0JcHJpdi0+TkZbVFlQRV9SWFBEXVtUWVBFX0FWR10gPSBsYnNfZ2V0YXZnbmYocHJpdikgKiBBVkdfU0NBTEU7Ci0JbGJzX2RlYl9yeCgiYWZ0ZXIgY29tcHV0aW5nIFNOUjogU05SLWF2ZyA9ICVkLCBORi1hdmcgPSAlZFxuIiwKLQkgICAgICAgcHJpdi0+U05SW1RZUEVfUlhQRF1bVFlQRV9BVkddIC8gQVZHX1NDQUxFLAotCSAgICAgICBwcml2LT5ORltUWVBFX1JYUERdW1RZUEVfQVZHXSAvIEFWR19TQ0FMRSk7Ci0KLQlwcml2LT5SU1NJW1RZUEVfUlhQRF1bVFlQRV9OT0FWR10gPQotCSAgICBDQUxfUlNTSShwcml2LT5TTlJbVFlQRV9SWFBEXVtUWVBFX05PQVZHXSwKLQkJICAgICBwcml2LT5ORltUWVBFX1JYUERdW1RZUEVfTk9BVkddKTsKLQotCXByaXYtPlJTU0lbVFlQRV9SWFBEXVtUWVBFX0FWR10gPQotCSAgICBDQUxfUlNTSShwcml2LT5TTlJbVFlQRV9SWFBEXVtUWVBFX0FWR10gLyBBVkdfU0NBTEUsCi0JCSAgICAgcHJpdi0+TkZbVFlQRV9SWFBEXVtUWVBFX0FWR10gLyBBVkdfU0NBTEUpOwotCi0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX1JYKTsKLX0KLQotLyoqCiAgKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gcHJvY2Vzc2VzIHJlY2VpdmVkIHBhY2tldCBhbmQgZm9yd2FyZHMgaXQKICAqICB0byBrZXJuZWwvdXBwZXIgbGF5ZXIKICAqCkBAIC0xNTQsNyArNjMsNyBAQAogCiAJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCi0JaWYgKHByaXYtPm1vbml0b3Jtb2RlKQorCWlmIChwcml2LT53ZGV2LT5pZnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKIAkJcmV0dXJuIHByb2Nlc3NfcnhlZF84MDJfMTFfcGFja2V0KHByaXYsIHNrYik7CiAKIAlwX3J4X3BkID0gKHN0cnVjdCByeHBkICopIHNrYi0+ZGF0YTsKQEAgLTIyNSwxMyArMTM0LDcgQEAKIAkgKi8KIAlza2JfcHVsbChza2IsIGhkcmNob3ApOwogCi0JLyogVGFrZSB0aGUgZGF0YSByYXRlIGZyb20gdGhlIHJ4cGQgc3RydWN0dXJlCi0JICogb25seSBpZiB0aGUgcmF0ZSBpcyBhdXRvCi0JICovCi0JaWYgKHByaXYtPmVuYWJsZWh3YXV0bykKLQkJcHJpdi0+Y3VyX3JhdGUgPSBsYnNfZndfaW5kZXhfdG9fZGF0YV9yYXRlKHBfcnhfcGQtPnJ4X3JhdGUpOwotCi0JbGJzX2NvbXB1dGVfcnNzaShwcml2LCBwX3J4X3BkKTsKKwlwcml2LT5jdXJfcmF0ZSA9IGxic19md19pbmRleF90b19kYXRhX3JhdGUocF9yeF9wZC0+cnhfcmF0ZSk7CiAKIAlsYnNfZGViX3J4KCJyeCBkYXRhOiBzaXplIG9mIGFjdHVhbCBwYWNrZXQgJWRcbiIsIHNrYi0+bGVuKTsKIAlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwpAQCAtMzUyLDIwICsyNTUsMTggQEAKIAlwcmFkaW90YXBfaGRyID0gKHZvaWQgKilza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgcnhfcmFkaW90YXBfaGRyKSk7CiAJbWVtY3B5KHByYWRpb3RhcF9oZHIsICZyYWRpb3RhcF9oZHIsIHNpemVvZihzdHJ1Y3QgcnhfcmFkaW90YXBfaGRyKSk7CiAKLQkvKiBUYWtlIHRoZSBkYXRhIHJhdGUgZnJvbSB0aGUgcnhwZCBzdHJ1Y3R1cmUKLQkgKiBvbmx5IGlmIHRoZSByYXRlIGlzIGF1dG8KLQkgKi8KLQlpZiAocHJpdi0+ZW5hYmxlaHdhdXRvKQotCQlwcml2LT5jdXJfcmF0ZSA9IGxic19md19pbmRleF90b19kYXRhX3JhdGUocHJ4cGQtPnJ4X3JhdGUpOwotCi0JbGJzX2NvbXB1dGVfcnNzaShwcml2LCBwcnhwZCk7CisJcHJpdi0+Y3VyX3JhdGUgPSBsYnNfZndfaW5kZXhfdG9fZGF0YV9yYXRlKHByeHBkLT5yeF9yYXRlKTsKIAogCWxic19kZWJfcngoInJ4IGRhdGE6IHNpemUgb2YgYWN0dWFsIHBhY2tldCAlZFxuIiwgc2tiLT5sZW4pOwogCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAKLQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBwcml2LT5ydGFwX25ldF9kZXYpOwotCW5ldGlmX3J4KHNrYik7CisJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgcHJpdi0+ZGV2KTsKKworCWlmIChpbl9pbnRlcnJ1cHQoKSkKKwkJbmV0aWZfcngoc2tiKTsKKwllbHNlCisJCW5ldGlmX3J4X25pKHNrYik7CiAKIAlyZXQgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0Y2Q1NGIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvc2Nhbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTM1NCArMCwwIEBACi0vKioKLSAgKiBGdW5jdGlvbnMgaW1wbGVtZW50aW5nIHdsYW4gc2NhbiBJT0NUTCBhbmQgZmlybXdhcmUgY29tbWFuZCBBUElzCi0gICoKLSAgKiBJT0NUTCBoYW5kbGVycyBhcyB3ZWxsIGFzIGNvbW1hbmQgcHJlcGVyYXRpb24gYW5kIHJlc3BvbnNlIHJvdXRpbmVzCi0gICogIGZvciBzZW5kaW5nIHNjYW4gY29tbWFuZHMgdG8gdGhlIGZpcm13YXJlLgotICAqLwotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+Ci0jaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgotI2luY2x1ZGUgPG5ldC9saWI4MDIxMS5oPgotCi0jaW5jbHVkZSAiaG9zdC5oIgotI2luY2x1ZGUgImRldi5oIgotI2luY2x1ZGUgInNjYW4uaCIKLSNpbmNsdWRlICJhc3NvYy5oIgotI2luY2x1ZGUgIndleHQuaCIKLSNpbmNsdWRlICJjbWQuaCIKLQotLy8hIEFwcHJveGltYXRlIGFtb3VudCBvZiBkYXRhIG5lZWRlZCB0byBwYXNzIGEgc2NhbiByZXN1bHQgYmFjayB0byBpd2xpc3QKLSNkZWZpbmUgTUFYX1NDQU5fQ0VMTF9TSVpFICAoSVdfRVZfQUREUl9MRU4gICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4gICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgSVdfRVZfVUlOVF9MRU4gICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBJV19FVl9GUkVRX0xFTiAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIElXX0VWX1FVQUxfTEVOICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgSUVFRTgwMjExX01BWF9TU0lEX0xFTiAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBJV19FVl9QQVJBTV9MRU4gICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQwKQkvKiA0MCBmb3IgV1BBSUUgKi8KLQotLy8hIE1lbW9yeSBuZWVkZWQgdG8gc3RvcmUgYSBtYXggc2l6ZWQgY2hhbm5lbCBMaXN0IFRMViBmb3IgYSBmaXJtd2FyZSBzY2FuCi0jZGVmaW5lIENIQU5fVExWX01BWF9TSVpFICAoc2l6ZW9mKHN0cnVjdCBtcnZsX2llX2hlYWRlcikgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKE1SVkRSVl9NQVhfQ0hBTk5FTFNfUEVSX1NDQU4gICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpemVvZihzdHJ1Y3QgY2hhbnNjYW5wYXJhbXNldCkpKQotCi0vLyEgTWVtb3J5IG5lZWRlZCB0byBzdG9yZSBhIG1heCBudW1iZXIvc2l6ZSBTU0lEIFRMViBmb3IgYSBmaXJtd2FyZSBzY2FuCi0jZGVmaW5lIFNTSURfVExWX01BWF9TSVpFICAoMSAqIHNpemVvZihzdHJ1Y3QgbXJ2bF9pZV9zc2lkX3BhcmFtX3NldCkpCi0KLS8vISBNYXhpbXVtIG1lbW9yeSBuZWVkZWQgZm9yIGEgY21kX2RzXzgwMl8xMV9zY2FuIHdpdGggYWxsIFRMVnMgYXQgbWF4Ci0jZGVmaW5lIE1BWF9TQ0FOX0NGR19BTExPQyAoc2l6ZW9mKHN0cnVjdCBjbWRfZHNfODAyXzExX3NjYW4pCVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArIENIQU5fVExWX01BWF9TSVpFICsgU1NJRF9UTFZfTUFYX1NJWkUpCi0KLS8vISBUaGUgbWF4aW11bSBudW1iZXIgb2YgY2hhbm5lbHMgdGhlIGZpcm13YXJlIGNhbiBzY2FuIHBlciBjb21tYW5kCi0jZGVmaW5lIE1SVkRSVl9NQVhfQ0hBTk5FTFNfUEVSX1NDQU4gICAxNAotCi0vKioKLSAqIEBicmllZiBOdW1iZXIgb2YgY2hhbm5lbHMgdG8gc2NhbiBwZXIgZmlybXdhcmUgc2NhbiBjb21tYW5kIGlzc3VhbmNlLgotICoKLSAqICBOdW1iZXIgcmVzdHJpY3RlZCB0byBwcmV2ZW50IGhpdHRpbmcgdGhlIGxpbWl0IG9uIHRoZSBhbW91bnQgb2Ygc2NhbiBkYXRhCi0gKiAgcmV0dXJuZWQgaW4gYSBzaW5nbGUgZmlybXdhcmUgc2NhbiBjb21tYW5kLgotICovCi0jZGVmaW5lIE1SVkRSVl9DSEFOTkVMU19QRVJfU0NBTl9DTUQgICA0Ci0KLS8vISBTY2FuIHRpbWUgc3BlY2lmaWVkIGluIHRoZSBjaGFubmVsIFRMViBmb3IgZWFjaCBjaGFubmVsIGZvciBwYXNzaXZlIHNjYW5zCi0jZGVmaW5lIE1SVkRSVl9QQVNTSVZFX1NDQU5fQ0hBTl9USU1FICAxMDAKLQotLy8hIFNjYW4gdGltZSBzcGVjaWZpZWQgaW4gdGhlIGNoYW5uZWwgVExWIGZvciBlYWNoIGNoYW5uZWwgZm9yIGFjdGl2ZSBzY2FucwotI2RlZmluZSBNUlZEUlZfQUNUSVZFX1NDQU5fQ0hBTl9USU1FICAgMTAwCi0KLSNkZWZpbmUgREVGQVVMVF9NQVhfU0NBTl9BR0UgKDE1ICogSFopCi0KLXN0YXRpYyBpbnQgbGJzX3JldF84MDIxMV9zY2FuKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdW5zaWduZWQgbG9uZyBkdW1teSwKLQkJCSAgICAgIHN0cnVjdCBjbWRfaGVhZGVyICpyZXNwKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgTWlzYyBoZWxwZXIgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKgotICogIEBicmllZiBVbnNldHMgdGhlIE1TQiBvbiBiYXNpYyByYXRlcwotICoKLSAqIFNjYW4gdGhyb3VnaCBhbiBhcnJheSBhbmQgdW5zZXQgdGhlIE1TQiBmb3IgYmFzaWMgZGF0YSByYXRlcy4KLSAqCi0gKiAgQHBhcmFtIHJhdGVzICAgICBidWZmZXIgb2YgZGF0YSByYXRlcwotICogIEBwYXJhbSBsZW4gICAgICAgc2l6ZSBvZiBidWZmZXIKLSAqLwotc3RhdGljIHZvaWQgbGJzX3Vuc2V0X2Jhc2ljX3JhdGVfZmxhZ3ModTggKnJhdGVzLCBzaXplX3QgbGVuKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotCQlyYXRlc1tpXSAmPSAweDdmOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9ic3NfZGVzY3JpcHRvcihzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKmJzcykKLXsKLQkvKiBEb24ndCBibG93IGF3YXkgLT5saXN0LCBqdXN0IEJTUyBkYXRhICovCi0JbWVtc2V0KGJzcywgMCwgb2Zmc2V0b2Yoc3RydWN0IGJzc19kZXNjcmlwdG9yLCBsaXN0KSk7Ci19Ci0KLS8qKgotICogIEBicmllZiBDb21wYXJlIHR3byBTU0lEcwotICoKLSAqICBAcGFyYW0gc3NpZDEgICAgQSBwb2ludGVyIHRvIHNzaWQgdG8gY29tcGFyZQotICogIEBwYXJhbSBzc2lkMiAgICBBIHBvaW50ZXIgdG8gc3NpZCB0byBjb21wYXJlCi0gKgotICogIEByZXR1cm4gICAgICAgICAwOiBzc2lkIGlzIHNhbWUsIG90aGVyd2lzZSBpcyBkaWZmZXJlbnQKLSAqLwotaW50IGxic19zc2lkX2NtcCh1aW50OF90ICpzc2lkMSwgdWludDhfdCBzc2lkMV9sZW4sIHVpbnQ4X3QgKnNzaWQyLAotCQkgdWludDhfdCBzc2lkMl9sZW4pCi17Ci0JaWYgKHNzaWQxX2xlbiAhPSBzc2lkMl9sZW4pCi0JCXJldHVybiAtMTsKLQotCXJldHVybiBtZW1jbXAoc3NpZDEsIHNzaWQyLCBzc2lkMV9sZW4pOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpc19zYW1lX25ldHdvcmsoc3RydWN0IGJzc19kZXNjcmlwdG9yICpzcmMsCi0JCQkJICBzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKmRzdCkKLXsKLQkvKiBBIG5ldHdvcmsgaXMgb25seSBhIGR1cGxpY2F0ZSBpZiB0aGUgY2hhbm5lbCwgQlNTSUQsIGFuZCBFU1NJRAotCSAqIGFsbCBtYXRjaC4gIFdlIHRyZWF0IGFsbCA8aGlkZGVuPiB3aXRoIHRoZSBzYW1lIEJTU0lEIGFuZCBjaGFubmVsCi0JICogYXMgb25lIG5ldHdvcmsgKi8KLQlyZXR1cm4gKChzcmMtPnNzaWRfbGVuID09IGRzdC0+c3NpZF9sZW4pICYmCi0JCShzcmMtPmNoYW5uZWwgPT0gZHN0LT5jaGFubmVsKSAmJgotCQkhY29tcGFyZV9ldGhlcl9hZGRyKHNyYy0+YnNzaWQsIGRzdC0+YnNzaWQpICYmCi0JCSFtZW1jbXAoc3JjLT5zc2lkLCBkc3QtPnNzaWQsIHNyYy0+c3NpZF9sZW4pKTsKLX0KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogUmVnaW9uIGNoYW5uZWwgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIExCU19UWF9QV1JfREVGQVVMVAkJMjAJLyoxMDBtVyAqLwotI2RlZmluZSBMQlNfVFhfUFdSX1VTX0RFRkFVTFQJCTIwCS8qMTAwbVcgKi8KLSNkZWZpbmUgTEJTX1RYX1BXUl9KUF9ERUZBVUxUCQkxNgkvKjUwbVcgKi8KLSNkZWZpbmUgTEJTX1RYX1BXUl9GUl9ERUZBVUxUCQkyMAkvKjEwMG1XICovCi0jZGVmaW5lIExCU19UWF9QV1JfRU1FQV9ERUZBVUxUCTIwCS8qMTAwbVcgKi8KLQotLyogRm9ybWF0IHsgY2hhbm5lbCwgZnJlcXVlbmN5IChNSHopLCBtYXh0eHBvd2VyIH0gKi8KLS8qIGJhbmQ6ICdCL0cnLCByZWdpb246IFVTQSBGQ0MvQ2FuYWRhIElDICovCi1zdGF0aWMgc3RydWN0IGNoYW5fZnJlcV9wb3dlciBjaGFubmVsX2ZyZXFfcG93ZXJfVVNfQkdbXSA9IHsKLQl7MSwgMjQxMiwgTEJTX1RYX1BXUl9VU19ERUZBVUxUfSwKLQl7MiwgMjQxNywgTEJTX1RYX1BXUl9VU19ERUZBVUxUfSwKLQl7MywgMjQyMiwgTEJTX1RYX1BXUl9VU19ERUZBVUxUfSwKLQl7NCwgMjQyNywgTEJTX1RYX1BXUl9VU19ERUZBVUxUfSwKLQl7NSwgMjQzMiwgTEJTX1RYX1BXUl9VU19ERUZBVUxUfSwKLQl7NiwgMjQzNywgTEJTX1RYX1BXUl9VU19ERUZBVUxUfSwKLQl7NywgMjQ0MiwgTEJTX1RYX1BXUl9VU19ERUZBVUxUfSwKLQl7OCwgMjQ0NywgTEJTX1RYX1BXUl9VU19ERUZBVUxUfSwKLQl7OSwgMjQ1MiwgTEJTX1RYX1BXUl9VU19ERUZBVUxUfSwKLQl7MTAsIDI0NTcsIExCU19UWF9QV1JfVVNfREVGQVVMVH0sCi0JezExLCAyNDYyLCBMQlNfVFhfUFdSX1VTX0RFRkFVTFR9Ci19OwotCi0vKiBiYW5kOiAnQi9HJywgcmVnaW9uOiBFdXJvcGUgRVRTSSAqLwotc3RhdGljIHN0cnVjdCBjaGFuX2ZyZXFfcG93ZXIgY2hhbm5lbF9mcmVxX3Bvd2VyX0VVX0JHW10gPSB7Ci0JezEsIDI0MTIsIExCU19UWF9QV1JfRU1FQV9ERUZBVUxUfSwKLQl7MiwgMjQxNywgTEJTX1RYX1BXUl9FTUVBX0RFRkFVTFR9LAotCXszLCAyNDIyLCBMQlNfVFhfUFdSX0VNRUFfREVGQVVMVH0sCi0JezQsIDI0MjcsIExCU19UWF9QV1JfRU1FQV9ERUZBVUxUfSwKLQl7NSwgMjQzMiwgTEJTX1RYX1BXUl9FTUVBX0RFRkFVTFR9LAotCXs2LCAyNDM3LCBMQlNfVFhfUFdSX0VNRUFfREVGQVVMVH0sCi0JezcsIDI0NDIsIExCU19UWF9QV1JfRU1FQV9ERUZBVUxUfSwKLQl7OCwgMjQ0NywgTEJTX1RYX1BXUl9FTUVBX0RFRkFVTFR9LAotCXs5LCAyNDUyLCBMQlNfVFhfUFdSX0VNRUFfREVGQVVMVH0sCi0JezEwLCAyNDU3LCBMQlNfVFhfUFdSX0VNRUFfREVGQVVMVH0sCi0JezExLCAyNDYyLCBMQlNfVFhfUFdSX0VNRUFfREVGQVVMVH0sCi0JezEyLCAyNDY3LCBMQlNfVFhfUFdSX0VNRUFfREVGQVVMVH0sCi0JezEzLCAyNDcyLCBMQlNfVFhfUFdSX0VNRUFfREVGQVVMVH0KLX07Ci0KLS8qIGJhbmQ6ICdCL0cnLCByZWdpb246IFNwYWluICovCi1zdGF0aWMgc3RydWN0IGNoYW5fZnJlcV9wb3dlciBjaGFubmVsX2ZyZXFfcG93ZXJfU1BOX0JHW10gPSB7Ci0JezEwLCAyNDU3LCBMQlNfVFhfUFdSX0RFRkFVTFR9LAotCXsxMSwgMjQ2MiwgTEJTX1RYX1BXUl9ERUZBVUxUfQotfTsKLQotLyogYmFuZDogJ0IvRycsIHJlZ2lvbjogRnJhbmNlICovCi1zdGF0aWMgc3RydWN0IGNoYW5fZnJlcV9wb3dlciBjaGFubmVsX2ZyZXFfcG93ZXJfRlJfQkdbXSA9IHsKLQl7MTAsIDI0NTcsIExCU19UWF9QV1JfRlJfREVGQVVMVH0sCi0JezExLCAyNDYyLCBMQlNfVFhfUFdSX0ZSX0RFRkFVTFR9LAotCXsxMiwgMjQ2NywgTEJTX1RYX1BXUl9GUl9ERUZBVUxUfSwKLQl7MTMsIDI0NzIsIExCU19UWF9QV1JfRlJfREVGQVVMVH0KLX07Ci0KLS8qIGJhbmQ6ICdCL0cnLCByZWdpb246IEphcGFuICovCi1zdGF0aWMgc3RydWN0IGNoYW5fZnJlcV9wb3dlciBjaGFubmVsX2ZyZXFfcG93ZXJfSlBOX0JHW10gPSB7Ci0JezEsIDI0MTIsIExCU19UWF9QV1JfSlBfREVGQVVMVH0sCi0JezIsIDI0MTcsIExCU19UWF9QV1JfSlBfREVGQVVMVH0sCi0JezMsIDI0MjIsIExCU19UWF9QV1JfSlBfREVGQVVMVH0sCi0JezQsIDI0MjcsIExCU19UWF9QV1JfSlBfREVGQVVMVH0sCi0JezUsIDI0MzIsIExCU19UWF9QV1JfSlBfREVGQVVMVH0sCi0JezYsIDI0MzcsIExCU19UWF9QV1JfSlBfREVGQVVMVH0sCi0JezcsIDI0NDIsIExCU19UWF9QV1JfSlBfREVGQVVMVH0sCi0JezgsIDI0NDcsIExCU19UWF9QV1JfSlBfREVGQVVMVH0sCi0JezksIDI0NTIsIExCU19UWF9QV1JfSlBfREVGQVVMVH0sCi0JezEwLCAyNDU3LCBMQlNfVFhfUFdSX0pQX0RFRkFVTFR9LAotCXsxMSwgMjQ2MiwgTEJTX1RYX1BXUl9KUF9ERUZBVUxUfSwKLQl7MTIsIDI0NjcsIExCU19UWF9QV1JfSlBfREVGQVVMVH0sCi0JezEzLCAyNDcyLCBMQlNfVFhfUFdSX0pQX0RFRkFVTFR9LAotCXsxNCwgMjQ4NCwgTEJTX1RYX1BXUl9KUF9ERUZBVUxUfQotfTsKLQotLyoqCi0gKiB0aGUgc3RydWN0dXJlIGZvciBjaGFubmVsLCBmcmVxdWVuY3kgYW5kIHBvd2VyCi0gKi8KLXN0cnVjdCByZWdpb25fY2ZwX3RhYmxlIHsKLQl1OCByZWdpb247Ci0Jc3RydWN0IGNoYW5fZnJlcV9wb3dlciAqY2ZwX0JHOwotCWludCBjZnBfbm9fQkc7Ci19OwotCi0vKioKLSAqIHRoZSBzdHJ1Y3R1cmUgZm9yIHRoZSBtYXBwaW5nIGJldHdlZW4gcmVnaW9uIGFuZCBDRlAKLSAqLwotc3RhdGljIHN0cnVjdCByZWdpb25fY2ZwX3RhYmxlIHJlZ2lvbl9jZnBfdGFibGVbXSA9IHsKLQl7MHgxMCwJCQkvKlVTIEZDQyAqLwotCSBjaGFubmVsX2ZyZXFfcG93ZXJfVVNfQkcsCi0JIEFSUkFZX1NJWkUoY2hhbm5lbF9mcmVxX3Bvd2VyX1VTX0JHKSwKLQkgfQotCSwKLQl7MHgyMCwJCQkvKkNBTkFEQSBJQyAqLwotCSBjaGFubmVsX2ZyZXFfcG93ZXJfVVNfQkcsCi0JIEFSUkFZX1NJWkUoY2hhbm5lbF9mcmVxX3Bvd2VyX1VTX0JHKSwKLQkgfQotCSwKLQl7MHgzMCwgLypFVSovIGNoYW5uZWxfZnJlcV9wb3dlcl9FVV9CRywKLQkgQVJSQVlfU0laRShjaGFubmVsX2ZyZXFfcG93ZXJfRVVfQkcpLAotCSB9Ci0JLAotCXsweDMxLCAvKlNQQUlOKi8gY2hhbm5lbF9mcmVxX3Bvd2VyX1NQTl9CRywKLQkgQVJSQVlfU0laRShjaGFubmVsX2ZyZXFfcG93ZXJfU1BOX0JHKSwKLQkgfQotCSwKLQl7MHgzMiwgLypGUkFOQ0UqLyBjaGFubmVsX2ZyZXFfcG93ZXJfRlJfQkcsCi0JIEFSUkFZX1NJWkUoY2hhbm5lbF9mcmVxX3Bvd2VyX0ZSX0JHKSwKLQkgfQotCSwKLQl7MHg0MCwgLypKQVBBTiovIGNoYW5uZWxfZnJlcV9wb3dlcl9KUE5fQkcsCi0JIEFSUkFZX1NJWkUoY2hhbm5lbF9mcmVxX3Bvd2VyX0pQTl9CRyksCi0JIH0KLQksCi0vKkFkZCBuZXcgcmVnaW9uIGhlcmUgKi8KLX07Ci0KLS8qKgotICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSBDRlAgaW4KLSAqICByZWdpb25fY2ZwX3RhYmxlIGJhc2VkIG9uIHJlZ2lvbiBhbmQgYmFuZCBwYXJhbWV0ZXIuCi0gKgotICogIEBwYXJhbSByZWdpb24gIFRoZSByZWdpb24gY29kZQotICogIEBwYXJhbSBiYW5kCSAgIFRoZSBiYW5kCi0gKiAgQHBhcmFtIGNmcF9ubyAgQSBwb2ludGVyIHRvIENGUCBudW1iZXIKLSAqICBAcmV0dXJuIAkgICBBIHBvaW50ZXIgdG8gQ0ZQCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2hhbl9mcmVxX3Bvd2VyICpsYnNfZ2V0X3JlZ2lvbl9jZnBfdGFibGUodTggcmVnaW9uLCBpbnQgKmNmcF9ubykKLXsKLQlpbnQgaSwgZW5kOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX01BSU4pOwotCi0JZW5kID0gQVJSQVlfU0laRShyZWdpb25fY2ZwX3RhYmxlKTsKLQotCWZvciAoaSA9IDA7IGkgPCBlbmQgOyBpKyspIHsKLQkJbGJzX2RlYl9tYWluKCJyZWdpb25fY2ZwX3RhYmxlW2ldLnJlZ2lvbj0lZFxuIiwKLQkJCXJlZ2lvbl9jZnBfdGFibGVbaV0ucmVnaW9uKTsKLQkJaWYgKHJlZ2lvbl9jZnBfdGFibGVbaV0ucmVnaW9uID09IHJlZ2lvbikgewotCQkJKmNmcF9ubyA9IHJlZ2lvbl9jZnBfdGFibGVbaV0uY2ZwX25vX0JHOwotCQkJbGJzX2RlYl9sZWF2ZShMQlNfREVCX01BSU4pOwotCQkJcmV0dXJuIHJlZ2lvbl9jZnBfdGFibGVbaV0uY2ZwX0JHOwotCQl9Ci0JfQotCi0JbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfTUFJTiwgInJldCBOVUxMIik7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLWludCBsYnNfc2V0X3JlZ2lvbnRhYmxlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdTggcmVnaW9uLCB1OCBiYW5kKQotewotCWludCByZXQgPSAwOwotCWludCBpID0gMDsKLQotCXN0cnVjdCBjaGFuX2ZyZXFfcG93ZXIgKmNmcDsKLQlpbnQgY2ZwX25vOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX01BSU4pOwotCi0JbWVtc2V0KHByaXYtPnJlZ2lvbl9jaGFubmVsLCAwLCBzaXplb2YocHJpdi0+cmVnaW9uX2NoYW5uZWwpKTsKLQotCWNmcCA9IGxic19nZXRfcmVnaW9uX2NmcF90YWJsZShyZWdpb24sICZjZnBfbm8pOwotCWlmIChjZnAgIT0gTlVMTCkgewotCQlwcml2LT5yZWdpb25fY2hhbm5lbFtpXS5ucmNmcCA9IGNmcF9ubzsKLQkJcHJpdi0+cmVnaW9uX2NoYW5uZWxbaV0uQ0ZQID0gY2ZwOwotCX0gZWxzZSB7Ci0JCWxic19kZWJfbWFpbigid3JvbmcgcmVnaW9uIGNvZGUgJSN4IGluIGJhbmQgQi9HXG4iLAotCQkgICAgICAgcmVnaW9uKTsKLQkJcmV0ID0gLTE7Ci0JCWdvdG8gb3V0OwotCX0KLQlwcml2LT5yZWdpb25fY2hhbm5lbFtpXS52YWxpZCA9IDE7Ci0JcHJpdi0+cmVnaW9uX2NoYW5uZWxbaV0ucmVnaW9uID0gcmVnaW9uOwotCXByaXYtPnJlZ2lvbl9jaGFubmVsW2ldLmJhbmQgPSBiYW5kOwotCWkrKzsKLW91dDoKLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9NQUlOLCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBNYWluIHNjYW5uaW5nIHN1cHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqCi0gKiAgQGJyaWVmIENyZWF0ZSBhIGNoYW5uZWwgbGlzdCBmb3IgdGhlIGRyaXZlciB0byBzY2FuIGJhc2VkIG9uIHJlZ2lvbiBpbmZvCi0gKgotICogIE9ubHkgdXNlZCBmcm9tIGxic19zY2FuX3NldHVwX3NjYW5fY29uZmlnKCkKLSAqCi0gKiAgVXNlIHRoZSBkcml2ZXIgcmVnaW9uL2JhbmQgaW5mb3JtYXRpb24gdG8gY29uc3RydWN0IGEgY29tcHJlaGVuc2l2ZSBsaXN0Ci0gKiAgICBvZiBjaGFubmVscyB0byBzY2FuLiAgVGhpcyByb3V0aW5lIGlzIHVzZWQgZm9yIGFueSBzY2FuIHRoYXQgaXMgbm90Ci0gKiAgICBwcm92aWRlZCBhIHNwZWNpZmljIGNoYW5uZWwgbGlzdCB0byBzY2FuLgotICoKLSAqICBAcGFyYW0gcHJpdiAgICAgICAgICBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEBwYXJhbSBzY2FuY2hhbmxpc3QgIE91dHB1dCBwYXJhbWV0ZXI6IHJlc3VsdGluZyBjaGFubmVsIGxpc3QgdG8gc2NhbgotICoKLSAqICBAcmV0dXJuICAgICAgICAgICAgICB2b2lkCi0gKi8KLXN0YXRpYyBpbnQgbGJzX3NjYW5fY3JlYXRlX2NoYW5uZWxfbGlzdChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JCQkJCXN0cnVjdCBjaGFuc2NhbnBhcmFtc2V0ICpzY2FuY2hhbmxpc3QpCi17Ci0Jc3RydWN0IHJlZ2lvbl9jaGFubmVsICpzY2FucmVnaW9uOwotCXN0cnVjdCBjaGFuX2ZyZXFfcG93ZXIgKmNmcDsKLQlpbnQgcmduaWR4OwotCWludCBjaGFuaWR4OwotCWludCBuZXh0Y2hhbjsKLQl1aW50OF90IHNjYW50eXBlOwotCi0JY2hhbmlkeCA9IDA7Ci0KLQkvKiBTZXQgdGhlIGRlZmF1bHQgc2NhbiB0eXBlIHRvIHRoZSB1c2VyIHNwZWNpZmllZCB0eXBlLCB3aWxsIGxhdGVyCi0JICogICBiZSBjaGFuZ2VkIHRvIHBhc3NpdmUgb24gYSBwZXIgY2hhbm5lbCBiYXNpcyBpZiByZXN0cmljdGVkIGJ5Ci0JICogICByZWd1bGF0b3J5IHJlcXVpcmVtZW50cyAoMTFkIG9yIDExaCkKLQkgKi8KLQlzY2FudHlwZSA9IENNRF9TQ0FOX1RZUEVfQUNUSVZFOwotCi0JZm9yIChyZ25pZHggPSAwOyByZ25pZHggPCBBUlJBWV9TSVpFKHByaXYtPnJlZ2lvbl9jaGFubmVsKTsgcmduaWR4KyspIHsKLQkJaWYgKCFwcml2LT5yZWdpb25fY2hhbm5lbFtyZ25pZHhdLnZhbGlkKQotCQkJY29udGludWU7Ci0JCXNjYW5yZWdpb24gPSAmcHJpdi0+cmVnaW9uX2NoYW5uZWxbcmduaWR4XTsKLQotCQlmb3IgKG5leHRjaGFuID0gMDsgbmV4dGNoYW4gPCBzY2FucmVnaW9uLT5ucmNmcDsgbmV4dGNoYW4rKywgY2hhbmlkeCsrKSB7Ci0JCQlzdHJ1Y3QgY2hhbnNjYW5wYXJhbXNldCAqY2hhbiA9ICZzY2FuY2hhbmxpc3RbY2hhbmlkeF07Ci0KLQkJCWNmcCA9IHNjYW5yZWdpb24tPkNGUCArIG5leHRjaGFuOwotCi0JCQlpZiAoc2NhbnJlZ2lvbi0+YmFuZCA9PSBCQU5EX0IgfHwgc2NhbnJlZ2lvbi0+YmFuZCA9PSBCQU5EX0cpCi0JCQkJY2hhbi0+cmFkaW90eXBlID0gQ01EX1NDQU5fUkFESU9fVFlQRV9CRzsKLQotCQkJaWYgKHNjYW50eXBlID09IENNRF9TQ0FOX1RZUEVfUEFTU0lWRSkgewotCQkJCWNoYW4tPm1heHNjYW50aW1lID0gY3B1X3RvX2xlMTYoTVJWRFJWX1BBU1NJVkVfU0NBTl9DSEFOX1RJTUUpOwotCQkJCWNoYW4tPmNoYW5zY2FubW9kZS5wYXNzaXZlc2NhbiA9IDE7Ci0JCQl9IGVsc2UgewotCQkJCWNoYW4tPm1heHNjYW50aW1lID0gY3B1X3RvX2xlMTYoTVJWRFJWX0FDVElWRV9TQ0FOX0NIQU5fVElNRSk7Ci0JCQkJY2hhbi0+Y2hhbnNjYW5tb2RlLnBhc3NpdmVzY2FuID0gMDsKLQkJCX0KLQotCQkJY2hhbi0+Y2hhbm51bWJlciA9IGNmcC0+Y2hhbm5lbDsKLQkJfQotCX0KLQlyZXR1cm4gY2hhbmlkeDsKLX0KLQotLyoKLSAqIEFkZCBTU0lEIFRMViBvZiB0aGUgZm9ybToKLSAqCi0gKiBUTFYtSUQgU1NJRCAgICAgMDAgMDAKLSAqIGxlbmd0aCAgICAgICAgICAwNiAwMAotICogc3NpZCAgICAgICAgICAgIDRkIDRlIDU0IDQ1IDUzIDU0Ci0gKi8KLXN0YXRpYyBpbnQgbGJzX3NjYW5fYWRkX3NzaWRfdGx2KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdTggKnRsdikKLXsKLQlzdHJ1Y3QgbXJ2bF9pZV9zc2lkX3BhcmFtX3NldCAqc3NpZF90bHYgPSAodm9pZCAqKXRsdjsKLQotCXNzaWRfdGx2LT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFRMVl9UWVBFX1NTSUQpOwotCXNzaWRfdGx2LT5oZWFkZXIubGVuID0gY3B1X3RvX2xlMTYocHJpdi0+c2Nhbl9zc2lkX2xlbik7Ci0JbWVtY3B5KHNzaWRfdGx2LT5zc2lkLCBwcml2LT5zY2FuX3NzaWQsIHByaXYtPnNjYW5fc3NpZF9sZW4pOwotCXJldHVybiBzaXplb2Yoc3NpZF90bHYtPmhlYWRlcikgKyBwcml2LT5zY2FuX3NzaWRfbGVuOwotfQotCi0vKgotICogQWRkIENIQU5MSVNUIFRMViBvZiB0aGUgZm9ybQotICoKLSAqIFRMVi1JRCBDSEFOTElTVCAwMSAwMQotICogbGVuZ3RoICAgICAgICAgIDViIDAwCi0gKiBjaGFubmVsIDEgICAgICAgMDAgMDEgMDAgMDAgMDAgNjQgMDAKLSAqICAgcmFkaW8gdHlwZSAgICAwMAotICogICBjaGFubmVsICAgICAgICAgIDAxCi0gKiAgIHNjYW4gdHlwZSAgICAgICAgICAgMDAKLSAqICAgbWluIHNjYW4gdGltZSAgICAgICAgICAwMCAwMAotICogICBtYXggc2NhbiB0aW1lICAgICAgICAgICAgICAgIDY0IDAwCi0gKiBjaGFubmVsIDIgICAgICAgMDAgMDIgMDAgMDAgMDAgNjQgMDAKLSAqIGNoYW5uZWwgMyAgICAgICAwMCAwMyAwMCAwMCAwMCA2NCAwMAotICogY2hhbm5lbCA0ICAgICAgIDAwIDA0IDAwIDAwIDAwIDY0IDAwCi0gKiBjaGFubmVsIDUgICAgICAgMDAgMDUgMDAgMDAgMDAgNjQgMDAKLSAqIGNoYW5uZWwgNiAgICAgICAwMCAwNiAwMCAwMCAwMCA2NCAwMAotICogY2hhbm5lbCA3ICAgICAgIDAwIDA3IDAwIDAwIDAwIDY0IDAwCi0gKiBjaGFubmVsIDggICAgICAgMDAgMDggMDAgMDAgMDAgNjQgMDAKLSAqIGNoYW5uZWwgOSAgICAgICAwMCAwOSAwMCAwMCAwMCA2NCAwMAotICogY2hhbm5lbCAxMCAgICAgIDAwIDBhIDAwIDAwIDAwIDY0IDAwCi0gKiBjaGFubmVsIDExICAgICAgMDAgMGIgMDAgMDAgMDAgNjQgMDAKLSAqIGNoYW5uZWwgMTIgICAgICAwMCAwYyAwMCAwMCAwMCA2NCAwMAotICogY2hhbm5lbCAxMyAgICAgIDAwIDBkIDAwIDAwIDAwIDY0IDAwCi0gKgotICovCi1zdGF0aWMgaW50IGxic19zY2FuX2FkZF9jaGFubGlzdF90bHYodWludDhfdCAqdGx2LAotCQkJCSAgICAgc3RydWN0IGNoYW5zY2FucGFyYW1zZXQgKmNoYW5fbGlzdCwKLQkJCQkgICAgIGludCBjaGFuX2NvdW50KQotewotCXNpemVfdCBzaXplID0gc2l6ZW9mKHN0cnVjdCBjaGFuc2NhbnBhcmFtc2V0KSAqY2hhbl9jb3VudDsKLQlzdHJ1Y3QgbXJ2bF9pZV9jaGFubGlzdF9wYXJhbV9zZXQgKmNoYW5fdGx2ID0gKHZvaWQgKil0bHY7Ci0KLQljaGFuX3Rsdi0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihUTFZfVFlQRV9DSEFOTElTVCk7Ci0JbWVtY3B5KGNoYW5fdGx2LT5jaGFuc2NhbnBhcmFtLCBjaGFuX2xpc3QsIHNpemUpOwotCWNoYW5fdGx2LT5oZWFkZXIubGVuID0gY3B1X3RvX2xlMTYoc2l6ZSk7Ci0JcmV0dXJuIHNpemVvZihjaGFuX3Rsdi0+aGVhZGVyKSArIHNpemU7Ci19Ci0KLS8qCi0gKiBBZGQgUkFURVMgVExWIG9mIHRoZSBmb3JtCi0gKgotICogVExWLUlEIFJBVEVTICAgIDAxIDAwCi0gKiBsZW5ndGggICAgICAgICAgMGUgMDAKLSAqIHJhdGVzICAgICAgICAgICA4MiA4NCA4YiA5NiAwYyAxMiAxOCAyNCAzMCA0OCA2MCA2YwotICoKLSAqIFRoZSByYXRlcyBhcmUgaW4gbGJzX2JnX3JhdGVzW10sIGJ1dCBmb3IgdGhlIDgwMi4xMWIKLSAqIHJhdGVzIHRoZSBoaWdoIGJpdCBpc24ndCBzZXQuCi0gKi8KLXN0YXRpYyBpbnQgbGJzX3NjYW5fYWRkX3JhdGVzX3Rsdih1aW50OF90ICp0bHYpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IG1ydmxfaWVfcmF0ZXNfcGFyYW1fc2V0ICpyYXRlX3RsdiA9ICh2b2lkICopdGx2OwotCi0JcmF0ZV90bHYtPmhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoVExWX1RZUEVfUkFURVMpOwotCXRsdiArPSBzaXplb2YocmF0ZV90bHYtPmhlYWRlcik7Ci0JZm9yIChpID0gMDsgaSA8IE1BWF9SQVRFUzsgaSsrKSB7Ci0JCSp0bHYgPSBsYnNfYmdfcmF0ZXNbaV07Ci0JCWlmICgqdGx2ID09IDApCi0JCQlicmVhazsKLQkJLyogVGhpcyBjb2RlIG1ha2VzIHN1cmUgdGhhdCB0aGUgODAyLjExYiByYXRlcyAoMSBNQml0L3MsIDIKLQkJICAgTUJpdC9zLCA1LjUgTUJpdC9zIGFuZCAxMSBNQml0L3MgZ2V0J3MgdGhlIGhpZ2ggYml0IHNldC4KLQkJICAgTm90ZSB0aGF0IHRoZSB2YWx1ZXMgYXJlIE1CaXQvcyAqIDIsIHRvIG1hcmsgdGhlbSBhcwotCQkgICBiYXNpYyByYXRlcyBzbyB0aGF0IHRoZSBmaXJtd2FyZSBsaWtlcyBpdCBiZXR0ZXIgKi8KLQkJaWYgKCp0bHYgPT0gMHgwMiB8fCAqdGx2ID09IDB4MDQgfHwKLQkJICAgICp0bHYgPT0gMHgwYiB8fCAqdGx2ID09IDB4MTYpCi0JCQkqdGx2IHw9IDB4ODA7Ci0JCXRsdisrOwotCX0KLQlyYXRlX3Rsdi0+aGVhZGVyLmxlbiA9IGNwdV90b19sZTE2KGkpOwotCXJldHVybiBzaXplb2YocmF0ZV90bHYtPmhlYWRlcikgKyBpOwotfQotCi0vKgotICogR2VuZXJhdGUgdGhlIENNRF84MDJfMTFfU0NBTiBjb21tYW5kIHdpdGggdGhlIHByb3BlciB0bHYKLSAqIGZvciBhIGJ1bmNoIG9mIGNoYW5uZWxzLgotICovCi1zdGF0aWMgaW50IGxic19kb19zY2FuKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdWludDhfdCBic3N0eXBlLAotCQkgICAgICAgc3RydWN0IGNoYW5zY2FucGFyYW1zZXQgKmNoYW5fbGlzdCwgaW50IGNoYW5fY291bnQpCi17Ci0JaW50IHJldCA9IC1FTk9NRU07Ci0Jc3RydWN0IGNtZF9kc184MDJfMTFfc2NhbiAqc2Nhbl9jbWQ7Ci0JdWludDhfdCAqdGx2OwkvKiBwb2ludGVyIGludG8gb3VyIGN1cnJlbnQsIGdyb3dpbmcgVExWIHN0b3JhZ2UgYXJlYSAqLwotCi0JbGJzX2RlYl9lbnRlcl9hcmdzKExCU19ERUJfU0NBTiwgImJzc3R5cGUgJWQsIGNoYW5saXN0W10uY2hhbiAlZCwgY2hhbl9jb3VudCAlZCIsCi0JCWJzc3R5cGUsIGNoYW5fbGlzdCA/IGNoYW5fbGlzdFswXS5jaGFubnVtYmVyIDogLTEsCi0JCWNoYW5fY291bnQpOwotCi0JLyogY3JlYXRlIHRoZSBmaXhlZCBwYXJ0IGZvciBzY2FuIGNvbW1hbmQgKi8KLQlzY2FuX2NtZCA9IGt6YWxsb2MoTUFYX1NDQU5fQ0ZHX0FMTE9DLCBHRlBfS0VSTkVMKTsKLQlpZiAoc2Nhbl9jbWQgPT0gTlVMTCkKLQkJZ290byBvdXQ7Ci0KLQl0bHYgPSBzY2FuX2NtZC0+dGx2YnVmZmVyOwotCS8qIFRPRE86IGRvIHdlIG5lZWQgdG8gc2NhbiBmb3IgYSBzcGVjaWZpYyBCU1NJRD8KLQltZW1jcHkoc2Nhbl9jbWQtPmJzc2lkLCBwcml2LT5zY2FuX2Jzc2lkLCBFVEhfQUxFTik7ICovCi0Jc2Nhbl9jbWQtPmJzc3R5cGUgPSBic3N0eXBlOwotCi0JLyogYWRkIFRMVnMgKi8KLQlpZiAocHJpdi0+c2Nhbl9zc2lkX2xlbikKLQkJdGx2ICs9IGxic19zY2FuX2FkZF9zc2lkX3Rsdihwcml2LCB0bHYpOwotCWlmIChjaGFuX2xpc3QgJiYgY2hhbl9jb3VudCkKLQkJdGx2ICs9IGxic19zY2FuX2FkZF9jaGFubGlzdF90bHYodGx2LCBjaGFuX2xpc3QsIGNoYW5fY291bnQpOwotCXRsdiArPSBsYnNfc2Nhbl9hZGRfcmF0ZXNfdGx2KHRsdik7Ci0KLQkvKiBUaGlzIGlzIHRoZSBmaW5hbCBkYXRhIHdlIGFyZSBhYm91dCB0byBzZW5kICovCi0Jc2Nhbl9jbWQtPmhkci5zaXplID0gY3B1X3RvX2xlMTYodGx2IC0gKHVpbnQ4X3QgKilzY2FuX2NtZCk7Ci0JbGJzX2RlYl9oZXgoTEJTX0RFQl9TQ0FOLCAiU0NBTl9DTUQiLCAodm9pZCAqKXNjYW5fY21kLAotCQkgICAgc2l6ZW9mKCpzY2FuX2NtZCkpOwotCWxic19kZWJfaGV4KExCU19ERUJfU0NBTiwgIlNDQU5fVExWIiwgc2Nhbl9jbWQtPnRsdmJ1ZmZlciwKLQkJICAgIHRsdiAtIHNjYW5fY21kLT50bHZidWZmZXIpOwotCi0JcmV0ID0gX19sYnNfY21kKHByaXYsIENNRF84MDJfMTFfU0NBTiwgJnNjYW5fY21kLT5oZHIsCi0JCQlsZTE2X3RvX2NwdShzY2FuX2NtZC0+aGRyLnNpemUpLAotCQkJbGJzX3JldF84MDIxMV9zY2FuLCAwKTsKLQotb3V0OgotCWtmcmVlKHNjYW5fY21kKTsKLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TQ0FOLCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqICBAYnJpZWYgSW50ZXJuYWwgZnVuY3Rpb24gdXNlZCB0byBzdGFydCBhIHNjYW4gYmFzZWQgb24gYW4gaW5wdXQgY29uZmlnCi0gKgotICogIFVzZSB0aGUgaW5wdXQgdXNlciBzY2FuIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gd2hlbiBwcm92aWRlZCBpbgotICogICAgb3JkZXIgdG8gc2VuZCB0aGUgYXBwcm9wcmlhdGUgc2NhbiBjb21tYW5kcyB0byBmaXJtd2FyZSB0byBwb3B1bGF0ZSBvcgotICogICAgdXBkYXRlIHRoZSBpbnRlcm5hbCBkcml2ZXIgc2NhbiB0YWJsZQotICoKLSAqICBAcGFyYW0gcHJpdiAgICAgICAgICBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEBwYXJhbSBmdWxsX3NjYW4gICAgIERvIGEgZnVsbC1zY2FuIChibG9ja2luZykKLSAqCi0gKiAgQHJldHVybiAgICAgICAgICAgICAgMCBvciA8IDAgaWYgZXJyb3IKLSAqLwotaW50IGxic19zY2FuX25ldHdvcmtzKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgaW50IGZ1bGxfc2NhbikKLXsKLQlpbnQgcmV0ID0gLUVOT01FTTsKLQlzdHJ1Y3QgY2hhbnNjYW5wYXJhbXNldCAqY2hhbl9saXN0OwotCXN0cnVjdCBjaGFuc2NhbnBhcmFtc2V0ICpjdXJyX2NoYW5zOwotCWludCBjaGFuX2NvdW50OwotCXVpbnQ4X3QgYnNzdHlwZSA9IENNRF9CU1NfVFlQRV9BTlk7Ci0JaW50IG51bWNoYW5uZWxzID0gTVJWRFJWX0NIQU5ORUxTX1BFUl9TQ0FOX0NNRDsKLQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7Ci0jaWZkZWYgQ09ORklHX0xJQkVSVEFTX0RFQlVHCi0Jc3RydWN0IGJzc19kZXNjcmlwdG9yICppdGVyOwotCWludCBpID0gMDsKLQlERUNMQVJFX1NTSURfQlVGKHNzaWQpOwotI2VuZGlmCi0KLQlsYnNfZGViX2VudGVyX2FyZ3MoTEJTX0RFQl9TQ0FOLCAiZnVsbF9zY2FuICVkIiwgZnVsbF9zY2FuKTsKLQotCS8qIENhbmNlbCBhbnkgcGFydGlhbCBvdXRzdGFuZGluZyBwYXJ0aWFsIHNjYW5zIGlmIHRoaXMgc2NhbgotCSAqIGlzIGEgZnVsbCBzY2FuLgotCSAqLwotCWlmIChmdWxsX3NjYW4gJiYgZGVsYXllZF93b3JrX3BlbmRpbmcoJnByaXYtPnNjYW5fd29yaykpCi0JCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnNjYW5fd29yayk7Ci0KLQkvKiBVc2VyLXNwZWNpZmllZCBic3N0eXBlIG9yIGNoYW5uZWwgbGlzdAotCVRPRE86IHRoaXMgY2FuIGJlIGltcGxlbWVudGVkIGlmIHNvbWUgdXNlci1zcGFjZSBhcHBsaWNhdGlvbgotCW5lZWQgdGhlIGZlYXR1cmUuIEZvcm1lcmx5LCBpdCB3YXMgYWNjZXNzaWJsZSBmcm9tIGRlYnVnZnMsCi0JYnV0IHRoZW4gbm93aGVyZSB1c2VkLgotCWlmICh1c2VyX2NmZykgewotCQlpZiAodXNlcl9jZmctPmJzc3R5cGUpCi0JCWJzc3R5cGUgPSB1c2VyX2NmZy0+YnNzdHlwZTsKLQl9ICovCi0KLQlsYnNfZGViX3NjYW4oIm51bWNoYW5uZWxzICVkLCBic3N0eXBlICVkXG4iLCBudW1jaGFubmVscywgYnNzdHlwZSk7Ci0KLQkvKiBDcmVhdGUgbGlzdCBvZiBjaGFubmVscyB0byBzY2FuICovCi0JY2hhbl9saXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNoYW5zY2FucGFyYW1zZXQpICoKLQkJCSAgICBMQlNfSU9DVExfVVNFUl9TQ0FOX0NIQU5fTUFYLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNoYW5fbGlzdCkgewotCQlsYnNfcHJfYWxlcnQoIlNDQU46IGNoYW5fbGlzdCBlbXB0eVxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIFdlIHdhbnQgdG8gc2NhbiBhbGwgY2hhbm5lbHMgKi8KLQljaGFuX2NvdW50ID0gbGJzX3NjYW5fY3JlYXRlX2NoYW5uZWxfbGlzdChwcml2LCBjaGFuX2xpc3QpOwotCi0JbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5kZXYpOwotCWlmIChwcml2LT5tZXNoX2RldikKLQkJbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5tZXNoX2Rldik7Ci0KLQkvKiBQcmVwYXJlIHRvIGNvbnRpbnVlIGFuIGludGVycnVwdGVkIHNjYW4gKi8KLQlsYnNfZGViX3NjYW4oImNoYW5fY291bnQgJWQsIHNjYW5fY2hhbm5lbCAlZFxuIiwKLQkJICAgICBjaGFuX2NvdW50LCBwcml2LT5zY2FuX2NoYW5uZWwpOwotCWN1cnJfY2hhbnMgPSBjaGFuX2xpc3Q7Ci0JLyogYWR2YW5jZSBjaGFubmVsIGxpc3QgYnkgYWxyZWFkeS1zY2FubmVkLWNoYW5uZWxzICovCi0JaWYgKHByaXYtPnNjYW5fY2hhbm5lbCA+IDApIHsKLQkJY3Vycl9jaGFucyArPSBwcml2LT5zY2FuX2NoYW5uZWw7Ci0JCWNoYW5fY291bnQgLT0gcHJpdi0+c2Nhbl9jaGFubmVsOwotCX0KLQotCS8qIFNlbmQgc2NhbiBjb21tYW5kKHMpCi0JICogbnVtY2hhbm5lbHMgY29udGFpbnMgdGhlIG51bWJlciBvZiBjaGFubmVscyB3ZSBzaG91bGQgbWF4aW1hbGx5IHNjYW4KLQkgKiBjaGFuX2NvdW50IGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgY2hhbm5lbHMgdG8gc2NhbgotCSAqLwotCi0Jd2hpbGUgKGNoYW5fY291bnQpIHsKLQkJaW50IHRvX3NjYW4gPSBtaW4obnVtY2hhbm5lbHMsIGNoYW5fY291bnQpOwotCQlsYnNfZGViX3NjYW4oInNjYW5uaW5nICVkIG9mICVkIGNoYW5uZWxzXG4iLAotCQkJICAgICB0b19zY2FuLCBjaGFuX2NvdW50KTsKLQkJcmV0ID0gbGJzX2RvX3NjYW4ocHJpdiwgYnNzdHlwZSwgY3Vycl9jaGFucywKLQkJCQkgIHRvX3NjYW4pOwotCQlpZiAocmV0KSB7Ci0JCQlsYnNfcHJfZXJyKCJTQ0FOX0NNRCBmYWlsZWRcbiIpOwotCQkJZ290byBvdXQyOwotCQl9Ci0JCWN1cnJfY2hhbnMgKz0gdG9fc2NhbjsKLQkJY2hhbl9jb3VudCAtPSB0b19zY2FuOwotCi0JCS8qIHNvbWVob3cgc2NoZWR1bGUgdGhlIG5leHQgcGFydCBvZiB0aGUgc2NhbiAqLwotCQlpZiAoY2hhbl9jb3VudCAmJiAhZnVsbF9zY2FuICYmCi0JCSAgICAhcHJpdi0+c3VycHJpc2VyZW1vdmVkKSB7Ci0JCQkvKiAtMSBtYXJrcyBqdXN0IHRoYXQgd2UncmUgY3VycmVudGx5IHNjYW5uaW5nICovCi0JCQlpZiAocHJpdi0+c2Nhbl9jaGFubmVsIDwgMCkKLQkJCQlwcml2LT5zY2FuX2NoYW5uZWwgPSB0b19zY2FuOwotCQkJZWxzZQotCQkJCXByaXYtPnNjYW5fY2hhbm5lbCArPSB0b19zY2FuOwotCQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+c2Nhbl93b3JrKTsKLQkJCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrX3RocmVhZCwgJnByaXYtPnNjYW5fd29yaywKLQkJCQkJICAgbXNlY3NfdG9famlmZmllcygzMDApKTsKLQkJCS8qIHNraXAgb3ZlciBHSVdTQ0FOIGV2ZW50ICovCi0JCQlnb3RvIG91dDsKLQkJfQotCi0JfQotCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHVuaW9uIGl3cmVxX2RhdGEpKTsKLQl3aXJlbGVzc19zZW5kX2V2ZW50KHByaXYtPmRldiwgU0lPQ0dJV1NDQU4sICZ3cnF1LCBOVUxMKTsKLQotI2lmZGVmIENPTkZJR19MSUJFUlRBU19ERUJVRwotCS8qIER1bXAgdGhlIHNjYW4gdGFibGUgKi8KLQltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKLQlsYnNfZGViX3NjYW4oInNjYW4gdGFibGU6XG4iKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsICZwcml2LT5uZXR3b3JrX2xpc3QsIGxpc3QpCi0JCWxic19kZWJfc2NhbigiJTAyZDogQlNTSUQgJXBNLCBSU1NJICVkLCBTU0lEICclcydcbiIsCi0JCQkgICAgIGkrKywgaXRlci0+YnNzaWQsIGl0ZXItPnJzc2ksCi0JCQkgICAgIHByaW50X3NzaWQoc3NpZCwgaXRlci0+c3NpZCwgaXRlci0+c3NpZF9sZW4pKTsKLQltdXRleF91bmxvY2soJnByaXYtPmxvY2spOwotI2VuZGlmCi0KLW91dDI6Ci0JcHJpdi0+c2Nhbl9jaGFubmVsID0gMDsKLQotb3V0OgotCWlmIChwcml2LT5jb25uZWN0X3N0YXR1cyA9PSBMQlNfQ09OTkVDVEVEICYmICFwcml2LT50eF9wZW5kaW5nX2xlbikKLQkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5kZXYpOwotCi0JaWYgKHByaXYtPm1lc2hfZGV2ICYmIGxic19tZXNoX2Nvbm5lY3RlZChwcml2KSAmJgotCSAgICAhcHJpdi0+dHhfcGVuZGluZ19sZW4pCi0JCW5ldGlmX3dha2VfcXVldWUocHJpdi0+bWVzaF9kZXYpOwotCi0Ja2ZyZWUoY2hhbl9saXN0KTsKLQotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1NDQU4sICJyZXQgJWQiLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQgbGJzX3NjYW5fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGxic19wcml2YXRlLCBzY2FuX3dvcmsud29yayk7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfU0NBTik7Ci0JbGJzX3NjYW5fbmV0d29ya3MocHJpdiwgMCk7Ci0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX1NDQU4pOwotfQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFJlc3VsdCBpbnRlcnByZXRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioKLSAqICBAYnJpZWYgSW50ZXJwcmV0IGEgQlNTIHNjYW4gcmVzcG9uc2UgcmV0dXJuZWQgZnJvbSB0aGUgZmlybXdhcmUKLSAqCi0gKiAgUGFyc2UgdGhlIHZhcmlvdXMgZml4ZWQgZmllbGRzIGFuZCBJRXMgcGFzc2VkIGJhY2sgZm9yIGEgYSBCU1MgcHJvYmUKLSAqICByZXNwb25zZSBvciBiZWFjb24gZnJvbSB0aGUgc2NhbiBjb21tYW5kLiAgUmVjb3JkIGluZm9ybWF0aW9uIGFzIG5lZWRlZAotICogIGluIHRoZSBzY2FuIHRhYmxlIHN0cnVjdCBic3NfZGVzY3JpcHRvciBmb3IgdGhhdCBlbnRyeS4KLSAqCi0gKiAgQHBhcmFtIGJzcyAgT3V0cHV0IHBhcmFtZXRlcjogUG9pbnRlciB0byB0aGUgQlNTIEVudHJ5Ci0gKgotICogIEByZXR1cm4gICAgICAgICAgICAgMCBvciAtMQotICovCi1zdGF0aWMgaW50IGxic19wcm9jZXNzX2JzcyhzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKmJzcywKLQkJCSAgIHVpbnQ4X3QgKipwYmVhY29uaW5mbywgaW50ICpieXRlc2xlZnQpCi17Ci0Jc3RydWN0IGllZWVfaWVfZmhfcGFyYW1fc2V0ICpmaDsKLQlzdHJ1Y3QgaWVlZV9pZV9kc19wYXJhbV9zZXQgKmRzOwotCXN0cnVjdCBpZWVlX2llX2NmX3BhcmFtX3NldCAqY2Y7Ci0Jc3RydWN0IGllZWVfaWVfaWJzc19wYXJhbV9zZXQgKmlic3M7Ci0JREVDTEFSRV9TU0lEX0JVRihzc2lkKTsKLQl1aW50OF90ICpwb3MsICplbmQsICpwOwotCXVpbnQ4X3Qgbl9leF9yYXRlcyA9IDAsIGdvdF9iYXNpY19yYXRlcyA9IDAsIG5fYmFzaWNfcmF0ZXMgPSAwOwotCXVpbnQxNl90IGJlYWNvbnNpemUgPSAwOwotCWludCByZXQ7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfU0NBTik7Ci0KLQlpZiAoKmJ5dGVzbGVmdCA+PSBzaXplb2YoYmVhY29uc2l6ZSkpIHsKLQkJLyogRXh0cmFjdCAmIGNvbnZlcnQgYmVhY29uIHNpemUgZnJvbSB0aGUgY29tbWFuZCBidWZmZXIgKi8KLQkJYmVhY29uc2l6ZSA9IGdldF91bmFsaWduZWRfbGUxNigqcGJlYWNvbmluZm8pOwotCQkqYnl0ZXNsZWZ0IC09IHNpemVvZihiZWFjb25zaXplKTsKLQkJKnBiZWFjb25pbmZvICs9IHNpemVvZihiZWFjb25zaXplKTsKLQl9Ci0KLQlpZiAoYmVhY29uc2l6ZSA9PSAwIHx8IGJlYWNvbnNpemUgPiAqYnl0ZXNsZWZ0KSB7Ci0JCSpwYmVhY29uaW5mbyArPSAqYnl0ZXNsZWZ0OwotCQkqYnl0ZXNsZWZ0ID0gMDsKLQkJcmV0ID0gLTE7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBjdXJyZW50IHdvcmtpbmcgYmVhY29uIHBvaW50ZXIgZm9yIHRoaXMgQlNTIGl0ZXJhdGlvbiAqLwotCXBvcyA9ICpwYmVhY29uaW5mbzsKLQllbmQgPSBwb3MgKyBiZWFjb25zaXplOwotCi0JLyogQWR2YW5jZSB0aGUgcmV0dXJuIGJlYWNvbiBwb2ludGVyIHBhc3QgdGhlIGN1cnJlbnQgYmVhY29uICovCi0JKnBiZWFjb25pbmZvICs9IGJlYWNvbnNpemU7Ci0JKmJ5dGVzbGVmdCAtPSBiZWFjb25zaXplOwotCi0JbWVtY3B5KGJzcy0+YnNzaWQsIHBvcywgRVRIX0FMRU4pOwotCWxic19kZWJfc2NhbigicHJvY2Vzc19ic3M6IEJTU0lEICVwTVxuIiwgYnNzLT5ic3NpZCk7Ci0JcG9zICs9IEVUSF9BTEVOOwotCi0JaWYgKChlbmQgLSBwb3MpIDwgMTIpIHsKLQkJbGJzX2RlYl9zY2FuKCJwcm9jZXNzX2JzczogTm90IGVub3VnaCBieXRlcyBsZWZ0XG4iKTsKLQkJcmV0ID0gLTE7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQkvKgotCSAqIG5leHQgNCBmaWVsZHMgYXJlIFJTU0ksIHRpbWUgc3RhbXAsIGJlYWNvbiBpbnRlcnZhbCwKLQkgKiAgIGFuZCBjYXBhYmlsaXR5IGluZm9ybWF0aW9uCi0JICovCi0KLQkvKiBSU1NJIGlzIDEgYnl0ZSBsb25nICovCi0JYnNzLT5yc3NpID0gKnBvczsKLQlsYnNfZGViX3NjYW4oInByb2Nlc3NfYnNzOiBSU1NJICVkXG4iLCAqcG9zKTsKLQlwb3MrKzsKLQotCS8qIHRpbWUgc3RhbXAgaXMgOCBieXRlcyBsb25nICovCi0JcG9zICs9IDg7Ci0KLQkvKiBiZWFjb24gaW50ZXJ2YWwgaXMgMiBieXRlcyBsb25nICovCi0JYnNzLT5iZWFjb25wZXJpb2QgPSBnZXRfdW5hbGlnbmVkX2xlMTYocG9zKTsKLQlwb3MgKz0gMjsKLQotCS8qIGNhcGFiaWxpdHkgaW5mb3JtYXRpb24gaXMgMiBieXRlcyBsb25nICovCi0JYnNzLT5jYXBhYmlsaXR5ID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHBvcyk7Ci0JbGJzX2RlYl9zY2FuKCJwcm9jZXNzX2JzczogY2FwYWJpbGl0aWVzIDB4JTA0eFxuIiwgYnNzLT5jYXBhYmlsaXR5KTsKLQlwb3MgKz0gMjsKLQotCWlmIChic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKLQkJbGJzX2RlYl9zY2FuKCJwcm9jZXNzX2JzczogV0VQIGVuYWJsZWRcbiIpOwotCWlmIChic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfSUJTUykKLQkJYnNzLT5tb2RlID0gSVdfTU9ERV9BREhPQzsKLQllbHNlCi0JCWJzcy0+bW9kZSA9IElXX01PREVfSU5GUkE7Ci0KLQkvKiByZXN0IG9mIHRoZSBjdXJyZW50IGJ1ZmZlciBhcmUgSUUncyAqLwotCWxic19kZWJfc2NhbigicHJvY2Vzc19ic3M6IElFIGxlbiAlemRcbiIsIGVuZCAtIHBvcyk7Ci0JbGJzX2RlYl9oZXgoTEJTX0RFQl9TQ0FOLCAicHJvY2Vzc19ic3M6IElFIGluZm8iLCBwb3MsIGVuZCAtIHBvcyk7Ci0KLQkvKiBwcm9jZXNzIHZhcmlhYmxlIElFICovCi0Jd2hpbGUgKHBvcyA8PSBlbmQgLSAyKSB7Ci0JCWlmIChwb3MgKyBwb3NbMV0gPiBlbmQpIHsKLQkJCWxic19kZWJfc2NhbigicHJvY2Vzc19ic3M6IGVycm9yIGluIHByb2Nlc3NpbmcgSUUsICIKLQkJCQkgICAgICJieXRlcyBsZWZ0IDwgSUUgbGVuZ3RoXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJc3dpdGNoIChwb3NbMF0pIHsKLQkJY2FzZSBXTEFOX0VJRF9TU0lEOgotCQkJYnNzLT5zc2lkX2xlbiA9IG1pbl90KGludCwgSUVFRTgwMjExX01BWF9TU0lEX0xFTiwgcG9zWzFdKTsKLQkJCW1lbWNweShic3MtPnNzaWQsIHBvcyArIDIsIGJzcy0+c3NpZF9sZW4pOwotCQkJbGJzX2RlYl9zY2FuKCJnb3QgU1NJRCBJRTogJyVzJywgbGVuICV1XG4iLAotCQkJICAgICAgICAgICAgIHByaW50X3NzaWQoc3NpZCwgYnNzLT5zc2lkLCBic3MtPnNzaWRfbGVuKSwKLQkJCSAgICAgICAgICAgICBic3MtPnNzaWRfbGVuKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgV0xBTl9FSURfU1VQUF9SQVRFUzoKLQkJCW5fYmFzaWNfcmF0ZXMgPSBtaW5fdCh1aW50OF90LCBNQVhfUkFURVMsIHBvc1sxXSk7Ci0JCQltZW1jcHkoYnNzLT5yYXRlcywgcG9zICsgMiwgbl9iYXNpY19yYXRlcyk7Ci0JCQlnb3RfYmFzaWNfcmF0ZXMgPSAxOwotCQkJbGJzX2RlYl9zY2FuKCJnb3QgUkFURVMgSUVcbiIpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBXTEFOX0VJRF9GSF9QQVJBTVM6Ci0JCQlmaCA9IChzdHJ1Y3QgaWVlZV9pZV9maF9wYXJhbV9zZXQgKikgcG9zOwotCQkJbWVtY3B5KCZic3MtPnBoeS5maCwgZmgsIHNpemVvZigqZmgpKTsKLQkJCWxic19kZWJfc2NhbigiZ290IEZIIElFXG4iKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgV0xBTl9FSURfRFNfUEFSQU1TOgotCQkJZHMgPSAoc3RydWN0IGllZWVfaWVfZHNfcGFyYW1fc2V0ICopIHBvczsKLQkJCWJzcy0+Y2hhbm5lbCA9IGRzLT5jaGFubmVsOwotCQkJbWVtY3B5KCZic3MtPnBoeS5kcywgZHMsIHNpemVvZigqZHMpKTsKLQkJCWxic19kZWJfc2NhbigiZ290IERTIElFLCBjaGFubmVsICVkXG4iLCBic3MtPmNoYW5uZWwpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBXTEFOX0VJRF9DRl9QQVJBTVM6Ci0JCQljZiA9IChzdHJ1Y3QgaWVlZV9pZV9jZl9wYXJhbV9zZXQgKikgcG9zOwotCQkJbWVtY3B5KCZic3MtPnNzLmNmLCBjZiwgc2l6ZW9mKCpjZikpOwotCQkJbGJzX2RlYl9zY2FuKCJnb3QgQ0YgSUVcbiIpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBXTEFOX0VJRF9JQlNTX1BBUkFNUzoKLQkJCWlic3MgPSAoc3RydWN0IGllZWVfaWVfaWJzc19wYXJhbV9zZXQgKikgcG9zOwotCQkJYnNzLT5hdGltd2luZG93ID0gaWJzcy0+YXRpbXdpbmRvdzsKLQkJCW1lbWNweSgmYnNzLT5zcy5pYnNzLCBpYnNzLCBzaXplb2YoKmlic3MpKTsKLQkJCWxic19kZWJfc2NhbigiZ290IElCU1MgSUVcbiIpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzoKLQkJCS8qIG9ubHkgcHJvY2VzcyBleHRlbmRlZCBzdXBwb3J0ZWQgcmF0ZSBpZiBkYXRhIHJhdGUgaXMKLQkJCSAqIGFscmVhZHkgZm91bmQuIERhdGEgcmF0ZSBJRSBzaG91bGQgY29tZSBiZWZvcmUKLQkJCSAqIGV4dGVuZGVkIHN1cHBvcnRlZCByYXRlIElFCi0JCQkgKi8KLQkJCWxic19kZWJfc2NhbigiZ290IFJBVEVTRVggSUVcbiIpOwotCQkJaWYgKCFnb3RfYmFzaWNfcmF0ZXMpIHsKLQkJCQlsYnNfZGViX3NjYW4oIi4uLiBidXQgaWdub3JpbmcgaXRcbiIpOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQluX2V4X3JhdGVzID0gcG9zWzFdOwotCQkJaWYgKG5fYmFzaWNfcmF0ZXMgKyBuX2V4X3JhdGVzID4gTUFYX1JBVEVTKQotCQkJCW5fZXhfcmF0ZXMgPSBNQVhfUkFURVMgLSBuX2Jhc2ljX3JhdGVzOwotCi0JCQlwID0gYnNzLT5yYXRlcyArIG5fYmFzaWNfcmF0ZXM7Ci0JCQltZW1jcHkocCwgcG9zICsgMiwgbl9leF9yYXRlcyk7Ci0JCQlicmVhazsKLQotCQljYXNlIFdMQU5fRUlEX0dFTkVSSUM6Ci0JCQlpZiAocG9zWzFdID49IDQgJiYKLQkJCSAgICBwb3NbMl0gPT0gMHgwMCAmJiBwb3NbM10gPT0gMHg1MCAmJgotCQkJICAgIHBvc1s0XSA9PSAweGYyICYmIHBvc1s1XSA9PSAweDAxKSB7Ci0JCQkJYnNzLT53cGFfaWVfbGVuID0gbWluKHBvc1sxXSArIDIsIE1BWF9XUEFfSUVfTEVOKTsKLQkJCQltZW1jcHkoYnNzLT53cGFfaWUsIHBvcywgYnNzLT53cGFfaWVfbGVuKTsKLQkJCQlsYnNfZGViX3NjYW4oImdvdCBXUEEgSUVcbiIpOwotCQkJCWxic19kZWJfaGV4KExCU19ERUJfU0NBTiwgIldQQSBJRSIsIGJzcy0+d3BhX2llLAotCQkJCQkgICAgYnNzLT53cGFfaWVfbGVuKTsKLQkJCX0gZWxzZSBpZiAocG9zWzFdID49IE1BUlZFTExfTUVTSF9JRV9MRU5HVEggJiYKLQkJCQkgICBwb3NbMl0gPT0gMHgwMCAmJiBwb3NbM10gPT0gMHg1MCAmJgotCQkJCSAgIHBvc1s0XSA9PSAweDQzICYmIHBvc1s1XSA9PSAweDA0KSB7Ci0JCQkJbGJzX2RlYl9zY2FuKCJnb3QgbWVzaCBJRVxuIik7Ci0JCQkJYnNzLT5tZXNoID0gMTsKLQkJCX0gZWxzZSB7Ci0JCQkJbGJzX2RlYl9zY2FuKCJnb3QgZ2VuZXJpYyBJRTogJTAyeDolMDJ4OiUwMng6JTAyeCwgbGVuICVkXG4iLAotCQkJCQlwb3NbMl0sIHBvc1szXSwKLQkJCQkJcG9zWzRdLCBwb3NbNV0sCi0JCQkJCXBvc1sxXSk7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQljYXNlIFdMQU5fRUlEX1JTTjoKLQkJCWxic19kZWJfc2NhbigiZ290IFJTTiBJRVxuIik7Ci0JCQlic3MtPnJzbl9pZV9sZW4gPSBtaW4ocG9zWzFdICsgMiwgTUFYX1dQQV9JRV9MRU4pOwotCQkJbWVtY3B5KGJzcy0+cnNuX2llLCBwb3MsIGJzcy0+cnNuX2llX2xlbik7Ci0JCQlsYnNfZGViX2hleChMQlNfREVCX1NDQU4sICJwcm9jZXNzX2JzczogUlNOX0lFIiwKLQkJCQkgICAgYnNzLT5yc25faWUsIGJzcy0+cnNuX2llX2xlbik7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJbGJzX2RlYl9zY2FuKCJnb3QgSUUgMHglMDR4LCBsZW4gJWRcbiIsCi0JCQkJICAgICBwb3NbMF0sIHBvc1sxXSk7Ci0JCQlicmVhazsKLQkJfQotCi0JCXBvcyArPSBwb3NbMV0gKyAyOwotCX0KLQotCS8qIFRpbWVzdGFtcCAqLwotCWJzcy0+bGFzdF9zY2FubmVkID0gamlmZmllczsKLQlsYnNfdW5zZXRfYmFzaWNfcmF0ZV9mbGFncyhic3MtPnJhdGVzLCBzaXplb2YoYnNzLT5yYXRlcykpOwotCi0JcmV0ID0gMDsKLQotZG9uZToKLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TQ0FOLCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqICBAYnJpZWYgU2VuZCBhIHNjYW4gY29tbWFuZCBmb3IgYWxsIGF2YWlsYWJsZSBjaGFubmVscyBmaWx0ZXJlZCBvbiBhIHNwZWMKLSAqCi0gKiAgVXNlZCBpbiBhc3NvY2lhdGlvbiBjb2RlIGFuZCBmcm9tIGRlYnVnZnMKLSAqCi0gKiAgQHBhcmFtIHByaXYgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gc3NpZCAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIFNTSUQgdG8gc2NhbiBmb3IKLSAqICBAcGFyYW0gc3NpZF9sZW4gICAgICAgICBMZW5ndGggb2YgdGhlIFNTSUQKLSAqCi0gKiAgQHJldHVybiAgICAgICAgICAgICAgICAwLXN1Y2Nlc3MsIG90aGVyd2lzZSBmYWlsCi0gKi8KLWludCBsYnNfc2VuZF9zcGVjaWZpY19zc2lkX3NjYW4oc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1aW50OF90ICpzc2lkLAotCQkJCXVpbnQ4X3Qgc3NpZF9sZW4pCi17Ci0JREVDTEFSRV9TU0lEX0JVRihzc2lkX2J1Zik7Ci0JaW50IHJldCA9IDA7Ci0KLQlsYnNfZGViX2VudGVyX2FyZ3MoTEJTX0RFQl9TQ0FOLCAiU1NJRCAnJXMnXG4iLAotCQkJICAgcHJpbnRfc3NpZChzc2lkX2J1Ziwgc3NpZCwgc3NpZF9sZW4pKTsKLQotCWlmICghc3NpZF9sZW4pCi0JCWdvdG8gb3V0OwotCi0JbWVtY3B5KHByaXYtPnNjYW5fc3NpZCwgc3NpZCwgc3NpZF9sZW4pOwotCXByaXYtPnNjYW5fc3NpZF9sZW4gPSBzc2lkX2xlbjsKLQotCWxic19zY2FuX25ldHdvcmtzKHByaXYsIDEpOwotCWlmIChwcml2LT5zdXJwcmlzZXJlbW92ZWQpIHsKLQkJcmV0ID0gLTE7Ci0JCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1NDQU4sICJyZXQgJWQiLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFN1cHBvcnQgZm9yIFdpcmVsZXNzIEV4dGVuc2lvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLSNkZWZpbmUgTUFYX0NVU1RPTV9MRU4gNjQKLQotc3RhdGljIGlubGluZSBjaGFyICpsYnNfdHJhbnNsYXRlX3NjYW4oc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkJICAgIGNoYXIgKnN0YXJ0LCBjaGFyICpzdG9wLAotCQkJCQkgICAgc3RydWN0IGJzc19kZXNjcmlwdG9yICpic3MpCi17Ci0Jc3RydWN0IGNoYW5fZnJlcV9wb3dlciAqY2ZwOwotCWNoYXIgKmN1cnJlbnRfdmFsOwkvKiBGb3IgcmF0ZXMgKi8KLQlzdHJ1Y3QgaXdfZXZlbnQgaXdlOwkvKiBUZW1wb3JhcnkgYnVmZmVyICovCi0JaW50IGo7Ci0jZGVmaW5lIFBFUkZFQ1RfUlNTSSAoKHVpbnQ4X3QpNTApCi0jZGVmaW5lIFdPUlNUX1JTU0kgICAoKHVpbnQ4X3QpMCkKLSNkZWZpbmUgUlNTSV9ESUZGICAgICgodWludDhfdCkoUEVSRkVDVF9SU1NJIC0gV09SU1RfUlNTSSkpCi0JdWludDhfdCByc3NpOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX1NDQU4pOwotCi0JY2ZwID0gbGJzX2ZpbmRfY2ZwX2J5X2JhbmRfYW5kX2NoYW5uZWwocHJpdiwgMCwgYnNzLT5jaGFubmVsKTsKLQlpZiAoIWNmcCkgewotCQlsYnNfZGViX3NjYW4oIkludmFsaWQgY2hhbm5lbCBudW1iZXIgJWRcbiIsIGJzcy0+Y2hhbm5lbCk7Ci0JCXN0YXJ0ID0gTlVMTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogRmlyc3QgZW50cnkgKk1VU1QqIGJlIHRoZSBCU1NJRCAqLwotCWl3ZS5jbWQgPSBTSU9DR0lXQVA7Ci0JaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0JbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgJmJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKLQlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBJV19FVl9BRERSX0xFTik7Ci0KLQkvKiBTU0lEICovCi0JaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKLQlpd2UudS5kYXRhLmZsYWdzID0gMTsKLQlpd2UudS5kYXRhLmxlbmd0aCA9IG1pbigodWludDMyX3QpIGJzcy0+c3NpZF9sZW4sICh1aW50MzJfdCkgSUVFRTgwMjExX01BWF9TU0lEX0xFTik7Ci0Jc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBzdGFydCwgc3RvcCwgJml3ZSwgYnNzLT5zc2lkKTsKLQotCS8qIE1vZGUgKi8KLQlpd2UuY21kID0gU0lPQ0dJV01PREU7Ci0JaXdlLnUubW9kZSA9IGJzcy0+bW9kZTsKLQlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBJV19FVl9VSU5UX0xFTik7Ci0KLQkvKiBGcmVxdWVuY3kgKi8KLQlpd2UuY21kID0gU0lPQ0dJV0ZSRVE7Ci0JaXdlLnUuZnJlcS5tID0gKGxvbmcpY2ZwLT5mcmVxICogMTAwMDAwOwotCWl3ZS51LmZyZXEuZSA9IDE7Ci0Jc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBzdGFydCwgc3RvcCwgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOwotCi0JLyogQWRkIHF1YWxpdHkgc3RhdGlzdGljcyAqLwotCWl3ZS5jbWQgPSBJV0VWUVVBTDsKLQlpd2UudS5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX0FMTF9VUERBVEVEOwotCWl3ZS51LnF1YWwubGV2ZWwgPSBTQ0FOX1JTU0koYnNzLT5yc3NpKTsKLQotCXJzc2kgPSBpd2UudS5xdWFsLmxldmVsIC0gTVJWRFJWX05GX0RFRkFVTFRfU0NBTl9WQUxVRTsKLQlpd2UudS5xdWFsLnF1YWwgPQotCQkoMTAwICogUlNTSV9ESUZGICogUlNTSV9ESUZGIC0gKFBFUkZFQ1RfUlNTSSAtIHJzc2kpICoKLQkJICgxNSAqIChSU1NJX0RJRkYpICsgNjIgKiAoUEVSRkVDVF9SU1NJIC0gcnNzaSkpKSAvCi0JCShSU1NJX0RJRkYgKiBSU1NJX0RJRkYpOwotCWlmIChpd2UudS5xdWFsLnF1YWwgPiAxMDApCi0JCWl3ZS51LnF1YWwucXVhbCA9IDEwMDsKLQotCWlmIChwcml2LT5ORltUWVBFX0JFQUNPTl1bVFlQRV9OT0FWR10gPT0gMCkgewotCQlpd2UudS5xdWFsLm5vaXNlID0gTVJWRFJWX05GX0RFRkFVTFRfU0NBTl9WQUxVRTsKLQl9IGVsc2UgewotCQlpd2UudS5xdWFsLm5vaXNlID0gQ0FMX05GKHByaXYtPk5GW1RZUEVfQkVBQ09OXVtUWVBFX05PQVZHXSk7Ci0JfQotCi0JLyogTG9jYWxseSBjcmVhdGVkIGFkLWhvYyBCU1NzIHdvbid0IGhhdmUgYmVhY29ucyBpZiB0aGlzIGlzIHRoZQotCSAqIG9ubHkgc3RhdGlvbiBpbiB0aGUgYWRob2MgbmV0d29yazsgc28gZ2V0IHNpZ25hbCBzdHJlbmd0aAotCSAqIGZyb20gcmVjZWl2ZSBzdGF0aXN0aWNzLgotCSAqLwotCWlmICgocHJpdi0+bW9kZSA9PSBJV19NT0RFX0FESE9DKSAmJiBwcml2LT5hZGhvY2NyZWF0ZQotCSAgICAmJiAhbGJzX3NzaWRfY21wKHByaXYtPmN1cmJzc3BhcmFtcy5zc2lkLAotCQkJICAgICBwcml2LT5jdXJic3NwYXJhbXMuc3NpZF9sZW4sCi0JCQkgICAgIGJzcy0+c3NpZCwgYnNzLT5zc2lkX2xlbikpIHsKLQkJaW50IHNuciwgbmY7Ci0JCXNuciA9IHByaXYtPlNOUltUWVBFX1JYUERdW1RZUEVfQVZHXSAvIEFWR19TQ0FMRTsKLQkJbmYgPSBwcml2LT5ORltUWVBFX1JYUERdW1RZUEVfQVZHXSAvIEFWR19TQ0FMRTsKLQkJaXdlLnUucXVhbC5sZXZlbCA9IENBTF9SU1NJKHNuciwgbmYpOwotCX0KLQlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBJV19FVl9RVUFMX0xFTik7Ci0KLQkvKiBBZGQgZW5jcnlwdGlvbiBjYXBhYmlsaXR5ICovCi0JaXdlLmNtZCA9IFNJT0NHSVdFTkNPREU7Ci0JaWYgKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSB7Ci0JCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKLQl9IGVsc2UgewotCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOwotCX0KLQlpd2UudS5kYXRhLmxlbmd0aCA9IDA7Ci0Jc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBzdGFydCwgc3RvcCwgJml3ZSwgYnNzLT5zc2lkKTsKLQotCWN1cnJlbnRfdmFsID0gc3RhcnQgKyBpd2Vfc3RyZWFtX2xjcF9sZW4oaW5mbyk7Ci0KLQlpd2UuY21kID0gU0lPQ0dJV1JBVEU7Ci0JaXdlLnUuYml0cmF0ZS5maXhlZCA9IDA7Ci0JaXdlLnUuYml0cmF0ZS5kaXNhYmxlZCA9IDA7Ci0JaXdlLnUuYml0cmF0ZS52YWx1ZSA9IDA7Ci0KLQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShic3MtPnJhdGVzKSAmJiBic3MtPnJhdGVzW2pdOyBqKyspIHsKLQkJLyogQml0IHJhdGUgZ2l2ZW4gaW4gNTAwIGtiL3MgdW5pdHMgKi8KLQkJaXdlLnUuYml0cmF0ZS52YWx1ZSA9IGJzcy0+cmF0ZXNbal0gKiA1MDAwMDA7Ci0JCWN1cnJlbnRfdmFsID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoaW5mbywgc3RhcnQsIGN1cnJlbnRfdmFsLAotCQkJCQkJICAgc3RvcCwgJml3ZSwgSVdfRVZfUEFSQU1fTEVOKTsKLQl9Ci0JaWYgKChic3MtPm1vZGUgPT0gSVdfTU9ERV9BREhPQykgJiYgcHJpdi0+YWRob2NjcmVhdGUKLQkgICAgJiYgIWxic19zc2lkX2NtcChwcml2LT5jdXJic3NwYXJhbXMuc3NpZCwKLQkJCSAgICAgcHJpdi0+Y3VyYnNzcGFyYW1zLnNzaWRfbGVuLAotCQkJICAgICBic3MtPnNzaWQsIGJzcy0+c3NpZF9sZW4pKSB7Ci0JCWl3ZS51LmJpdHJhdGUudmFsdWUgPSAyMiAqIDUwMDAwMDsKLQkJY3VycmVudF92YWwgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZShpbmZvLCBzdGFydCwgY3VycmVudF92YWwsCi0JCQkJCQkgICBzdG9wLCAmaXdlLCBJV19FVl9QQVJBTV9MRU4pOwotCX0KLQkvKiBDaGVjayBpZiB3ZSBhZGRlZCBhbnkgZXZlbnQgKi8KLQlpZiAoKGN1cnJlbnRfdmFsIC0gc3RhcnQpID4gaXdlX3N0cmVhbV9sY3BfbGVuKGluZm8pKQotCQlzdGFydCA9IGN1cnJlbnRfdmFsOwotCi0JbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQlpZiAoYnNzLT53cGFfaWVfbGVuKSB7Ci0JCWNoYXIgYnVmW01BWF9XUEFfSUVfTEVOXTsKLQkJbWVtY3B5KGJ1ZiwgYnNzLT53cGFfaWUsIGJzcy0+d3BhX2llX2xlbik7Ci0JCWl3ZS5jbWQgPSBJV0VWR0VOSUU7Ci0JCWl3ZS51LmRhdGEubGVuZ3RoID0gYnNzLT53cGFfaWVfbGVuOwotCQlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBidWYpOwotCX0KLQotCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JaWYgKGJzcy0+cnNuX2llX2xlbikgewotCQljaGFyIGJ1ZltNQVhfV1BBX0lFX0xFTl07Ci0JCW1lbWNweShidWYsIGJzcy0+cnNuX2llLCBic3MtPnJzbl9pZV9sZW4pOwotCQlpd2UuY21kID0gSVdFVkdFTklFOwotCQlpd2UudS5kYXRhLmxlbmd0aCA9IGJzcy0+cnNuX2llX2xlbjsKLQkJc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBzdGFydCwgc3RvcCwgJml3ZSwgYnVmKTsKLQl9Ci0KLQlpZiAoYnNzLT5tZXNoKSB7Ci0JCWNoYXIgY3VzdG9tW01BWF9DVVNUT01fTEVOXTsKLQkJY2hhciAqcCA9IGN1c3RvbTsKLQotCQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQkJcCArPSBzbnByaW50ZihwLCBNQVhfQ1VTVE9NX0xFTiwgIm1lc2gtdHlwZTogb2xwYyIpOwotCQlpd2UudS5kYXRhLmxlbmd0aCA9IHAgLSBjdXN0b207Ci0JCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKLQkJCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgc3RhcnQsIHN0b3AsCi0JCQkJCQkgICAgICZpd2UsIGN1c3RvbSk7Ci0JfQotCi1vdXQ6Ci0JbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfU0NBTiwgInN0YXJ0ICVwIiwgc3RhcnQpOwotCXJldHVybiBzdGFydDsKLX0KLQotCi0vKioKLSAqICBAYnJpZWYgSGFuZGxlIFNjYW4gTmV0d29yayBpb2N0bAotICoKLSAqICBAcGFyYW0gZGV2ICAgICAgICAgIEEgcG9pbnRlciB0byBuZXRfZGV2aWNlIHN0cnVjdHVyZQotICogIEBwYXJhbSBpbmZvICAgICAgICAgQSBwb2ludGVyIHRvIGl3X3JlcXVlc3RfaW5mbyBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gdndycSAgICAgICAgIEEgcG9pbnRlciB0byBpd19wYXJhbSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gZXh0cmEgICAgICAgIEEgcG9pbnRlciB0byBleHRyYSBkYXRhIGJ1ZgotICoKLSAqICBAcmV0dXJuICAgICAgICAgICAgIDAgLS1zdWNjZXNzLCBvdGhlcndpc2UgZmFpbAotICovCi1pbnQgbGJzX3NldF9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCSB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlERUNMQVJFX1NTSURfQlVGKHNzaWQpOwotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKLQlpbnQgcmV0ID0gMDsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsKLQotCWlmICghcHJpdi0+cmFkaW9fb24pIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJcmV0ID0gLUVORVRET1dOOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBtYWM4MDIxMSBkb2VzIHRoaXM6Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCWlmIChzZGF0YS0+dHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV94eHgpIHsKLQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gb3V0OwotCX0KLQkqLwotCi0JaWYgKHdycXUtPmRhdGEubGVuZ3RoID09IHNpemVvZihzdHJ1Y3QgaXdfc2Nhbl9yZXEpICYmCi0JICAgIHdycXUtPmRhdGEuZmxhZ3MgJiBJV19TQ0FOX1RISVNfRVNTSUQpIHsKLQkJc3RydWN0IGl3X3NjYW5fcmVxICpyZXEgPSAoc3RydWN0IGl3X3NjYW5fcmVxICopZXh0cmE7Ci0JCXByaXYtPnNjYW5fc3NpZF9sZW4gPSByZXEtPmVzc2lkX2xlbjsKLQkJbWVtY3B5KHByaXYtPnNjYW5fc3NpZCwgcmVxLT5lc3NpZCwgcHJpdi0+c2Nhbl9zc2lkX2xlbik7Ci0JCWxic19kZWJfd2V4dCgic2V0X3NjYW4sIGVzc2lkICclcydcbiIsCi0JCQlwcmludF9zc2lkKHNzaWQsIHByaXYtPnNjYW5fc3NpZCwgcHJpdi0+c2Nhbl9zc2lkX2xlbikpOwotCX0gZWxzZSB7Ci0JCXByaXYtPnNjYW5fc3NpZF9sZW4gPSAwOwotCX0KLQotCWlmICghZGVsYXllZF93b3JrX3BlbmRpbmcoJnByaXYtPnNjYW5fd29yaykpCi0JCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrX3RocmVhZCwgJnByaXYtPnNjYW5fd29yaywKLQkJCQkgICBtc2Vjc190b19qaWZmaWVzKDUwKSk7Ci0JLyogc2V0IG1hcmtlciB0aGF0IGN1cnJlbnRseSBhIHNjYW4gaXMgdGFraW5nIHBsYWNlICovCi0JcHJpdi0+c2Nhbl9jaGFubmVsID0gLTE7Ci0KLQlpZiAocHJpdi0+c3VycHJpc2VyZW1vdmVkKQotCQlyZXQgPSAtRUlPOwotCi1vdXQ6Ci0JbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfV0VYVCwgInJldCAlZCIsIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotCi0vKioKLSAqICBAYnJpZWYgIEhhbmRsZSBSZXRyaWV2ZSBzY2FuIHRhYmxlIGlvY3RsCi0gKgotICogIEBwYXJhbSBkZXYgICAgICAgICAgQSBwb2ludGVyIHRvIG5ldF9kZXZpY2Ugc3RydWN0dXJlCi0gKiAgQHBhcmFtIGluZm8gICAgICAgICBBIHBvaW50ZXIgdG8gaXdfcmVxdWVzdF9pbmZvIHN0cnVjdHVyZQotICogIEBwYXJhbSBkd3JxICAgICAgICAgQSBwb2ludGVyIHRvIGl3X3BvaW50IHN0cnVjdHVyZQotICogIEBwYXJhbSBleHRyYSAgICAgICAgQSBwb2ludGVyIHRvIGV4dHJhIGRhdGEgYnVmCi0gKgotICogIEByZXR1cm4gICAgICAgICAgICAgMCAtLXN1Y2Nlc3MsIG90aGVyd2lzZSBmYWlsCi0gKi8KLWludCBsYnNfZ2V0X3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJIHN0cnVjdCBpd19wb2ludCAqZHdycSwgY2hhciAqZXh0cmEpCi17Ci0jZGVmaW5lIFNDQU5fSVRFTV9TSVpFIDEyOAotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKLQlpbnQgZXJyID0gMDsKLQljaGFyICpldiA9IGV4dHJhOwotCWNoYXIgKnN0b3AgPSBldiArIGR3cnEtPmxlbmd0aDsKLQlzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKml0ZXJfYnNzOwotCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqc2FmZTsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsKLQotCS8qIGl3bGlzdCBzaG91bGQgd2FpdCB1bnRpbCB0aGUgY3VycmVudCBzY2FuIGlzIGZpbmlzaGVkICovCi0JaWYgKHByaXYtPnNjYW5fY2hhbm5lbCkKLQkJcmV0dXJuIC1FQUdBSU47Ci0KLQkvKiBVcGRhdGUgUlNTSSBpZiBjdXJyZW50IEJTUyBpcyBhIGxvY2FsbHkgY3JlYXRlZCBhZC1ob2MgQlNTICovCi0JaWYgKChwcml2LT5tb2RlID09IElXX01PREVfQURIT0MpICYmIHByaXYtPmFkaG9jY3JlYXRlKSB7Ci0JCWVyciA9IGxic19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwgQ01EXzgwMl8xMV9SU1NJLCAwLAotCQkJCUNNRF9PUFRJT05fV0FJVEZPUlJTUCwgMCwgTlVMTCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUgKGl0ZXJfYnNzLCBzYWZlLCAmcHJpdi0+bmV0d29ya19saXN0LCBsaXN0KSB7Ci0JCWNoYXIgKm5leHRfZXY7Ci0JCXVuc2lnbmVkIGxvbmcgc3RhbGVfdGltZTsKLQotCQlpZiAoc3RvcCAtIGV2IDwgU0NBTl9JVEVNX1NJWkUpIHsKLQkJCWVyciA9IC1FMkJJRzsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogRm9yIG1lc2ggZGV2aWNlLCBsaXN0IG9ubHkgbWVzaCBuZXR3b3JrcyAqLwotCQlpZiAoZGV2ID09IHByaXYtPm1lc2hfZGV2ICYmICFpdGVyX2Jzcy0+bWVzaCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIFBydW5lIG9sZCBhbiBvbGQgc2NhbiByZXN1bHQgKi8KLQkJc3RhbGVfdGltZSA9IGl0ZXJfYnNzLT5sYXN0X3NjYW5uZWQgKyBERUZBVUxUX01BWF9TQ0FOX0FHRTsKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgc3RhbGVfdGltZSkpIHsKLQkJCWxpc3RfbW92ZV90YWlsKCZpdGVyX2Jzcy0+bGlzdCwgJnByaXYtPm5ldHdvcmtfZnJlZV9saXN0KTsKLQkJCWNsZWFyX2Jzc19kZXNjcmlwdG9yKGl0ZXJfYnNzKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogVHJhbnNsYXRlIHRvIFdFIGZvcm1hdCB0aGlzIGVudHJ5ICovCi0JCW5leHRfZXYgPSBsYnNfdHJhbnNsYXRlX3NjYW4ocHJpdiwgaW5mbywgZXYsIHN0b3AsIGl0ZXJfYnNzKTsKLQkJaWYgKG5leHRfZXYgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQlldiA9IG5leHRfZXY7Ci0JfQotCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7Ci0KLQlkd3JxLT5sZW5ndGggPSAoZXYgLSBleHRyYSk7Ci0JZHdycS0+ZmxhZ3MgPSAwOwotb3V0OgotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1dFWFQsICJyZXQgJWQiLCBlcnIpOwotCXJldHVybiBlcnI7Ci19Ci0KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvbW1hbmQgZXhlY3V0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLS8qKgotICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNvbW1hbmQgcmVzcG9uc2Ugb2Ygc2NhbgotICoKLSAqICBDYWxsZWQgZnJvbSBoYW5kbGVfY21kX3Jlc3BvbnNlKCkgaW4gY21kcmVzcGMuCi0gKgotICogICBUaGUgcmVzcG9uc2UgYnVmZmVyIGZvciB0aGUgc2NhbiBjb21tYW5kIGhhcyB0aGUgZm9sbG93aW5nCi0gKiAgICAgIG1lbW9yeSBsYXlvdXQ6Ci0gKgotICogICAgIC4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLSAqICAgICB8ICBoZWFkZXIgKDQgKiBzaXplb2YodTE2KSk6ICBTdGFuZGFyZCBjb21tYW5kIHJlc3BvbnNlIGhkciB8Ci0gKiAgICAgLi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotICogICAgIHwgIGJ1ZnNpemUgKHUxNikgOiBzaXplb2YgdGhlIEJTUyBEZXNjcmlwdGlvbiBkYXRhICAgICAgICAgIHwKLSAqICAgICAuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi0gKiAgICAgfCAgTnVtT2ZTZXQgKHU4KSA6IE51bWJlciBvZiBCU1MgRGVzY3MgcmV0dXJuZWQgICAgICAgICAgICAgfAotICogICAgIC4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLSAqICAgICB8ICBCU1NEZXNjcmlwdGlvbiBkYXRhICh2YXJpYWJsZSwgc2l6ZSBnaXZlbiBpbiBidWZzaXplKSAgICB8Ci0gKiAgICAgLi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotICogICAgIHwgIFRMViBkYXRhICh2YXJpYWJsZSwgc2l6ZSBjYWxjdWxhdGVkIHVzaW5nIGhlYWRlci0+c2l6ZSwgIHwKLSAqICAgICB8ICAgICAgICAgICAgYnVmc2l6ZSBhbmQgc2l6ZW9mIHRoZSBmaXhlZCBmaWVsZHMgYWJvdmUpICAgICB8Ci0gKiAgICAgLi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotICoKLSAqICBAcGFyYW0gcHJpdiAgICBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEBwYXJhbSByZXNwICAgIEEgcG9pbnRlciB0byBjbWRfZHNfY29tbWFuZAotICoKLSAqICBAcmV0dXJuICAgICAgICAwIG9yIC0xCi0gKi8KLXN0YXRpYyBpbnQgbGJzX3JldF84MDIxMV9zY2FuKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdW5zaWduZWQgbG9uZyBkdW1teSwKLQkJCSAgICAgIHN0cnVjdCBjbWRfaGVhZGVyICpyZXNwKQotewotCXN0cnVjdCBjbWRfZHNfODAyXzExX3NjYW5fcnNwICpzY2FucmVzcCA9ICh2b2lkICopcmVzcDsKLQlzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKml0ZXJfYnNzOwotCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqc2FmZTsKLQl1aW50OF90ICpic3NpbmZvOwotCXVpbnQxNl90IHNjYW5yZXNwc2l6ZTsKLQlpbnQgYnl0ZXNsZWZ0OwotCWludCBpZHg7Ci0JaW50IHRsdmJ1ZnNpemU7Ci0JaW50IHJldDsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TQ0FOKTsKLQotCS8qIFBydW5lIG9sZCBlbnRyaWVzIGZyb20gc2NhbiB0YWJsZSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSAoaXRlcl9ic3MsIHNhZmUsICZwcml2LT5uZXR3b3JrX2xpc3QsIGxpc3QpIHsKLQkJdW5zaWduZWQgbG9uZyBzdGFsZV90aW1lID0gaXRlcl9ic3MtPmxhc3Rfc2Nhbm5lZCArIERFRkFVTFRfTUFYX1NDQU5fQUdFOwotCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgc3RhbGVfdGltZSkpCi0JCQljb250aW51ZTsKLQkJbGlzdF9tb3ZlX3RhaWwgKCZpdGVyX2Jzcy0+bGlzdCwgJnByaXYtPm5ldHdvcmtfZnJlZV9saXN0KTsKLQkJY2xlYXJfYnNzX2Rlc2NyaXB0b3IoaXRlcl9ic3MpOwotCX0KLQotCWlmIChzY2FucmVzcC0+bnJfc2V0cyA+IE1BWF9ORVRXT1JLX0NPVU5UKSB7Ci0JCWxic19kZWJfc2NhbigiU0NBTl9SRVNQOiB0b28gbWFueSBzY2FuIHJlc3VsdHMgKCVkLCBtYXggJWQpXG4iLAotCQkJICAgICBzY2FucmVzcC0+bnJfc2V0cywgTUFYX05FVFdPUktfQ09VTlQpOwotCQlyZXQgPSAtMTsKLQkJZ290byBkb25lOwotCX0KLQotCWJ5dGVzbGVmdCA9IGdldF91bmFsaWduZWRfbGUxNigmc2NhbnJlc3AtPmJzc2Rlc2NyaXB0c2l6ZSk7Ci0JbGJzX2RlYl9zY2FuKCJTQ0FOX1JFU1A6IGJzc2Rlc2NyaXB0c2l6ZSAlZFxuIiwgYnl0ZXNsZWZ0KTsKLQotCXNjYW5yZXNwc2l6ZSA9IGxlMTZfdG9fY3B1KHJlc3AtPnNpemUpOwotCWxic19kZWJfc2NhbigiU0NBTl9SRVNQOiBzY2FuIHJlc3VsdHMgJWRcbiIsIHNjYW5yZXNwLT5ucl9zZXRzKTsKLQotCWJzc2luZm8gPSBzY2FucmVzcC0+YnNzZGVzY19hbmRfdGx2YnVmZmVyOwotCi0JLyogVGhlIHNpemUgb2YgdGhlIFRMViBidWZmZXIgaXMgZXF1YWwgdG8gdGhlIGVudGlyZSBjb21tYW5kIHJlc3BvbnNlCi0JICogICBzaXplIChzY2FucmVzcHNpemUpIG1pbnVzIHRoZSBmaXhlZCBmaWVsZHMgKHNpemVvZigpJ3MpLCB0aGUKLQkgKiAgIEJTUyBEZXNjcmlwdGlvbnMgKGJzc2Rlc2NyaXB0c2l6ZSBhcyBieXRlc0xlZikgYW5kIHRoZSBjb21tYW5kCi0JICogICByZXNwb25zZSBoZWFkZXIgKHNpemVvZihzdHJ1Y3QgY21kX2hlYWRlcikpCi0JICovCi0JdGx2YnVmc2l6ZSA9IHNjYW5yZXNwc2l6ZSAtIChieXRlc2xlZnQgKyBzaXplb2Yoc2NhbnJlc3AtPmJzc2Rlc2NyaXB0c2l6ZSkKLQkJCQkgICAgICsgc2l6ZW9mKHNjYW5yZXNwLT5ucl9zZXRzKQotCQkJCSAgICAgKyBzaXplb2Yoc3RydWN0IGNtZF9oZWFkZXIpKTsKLQotCS8qCi0JICogIFByb2Nlc3MgZWFjaCBzY2FuIHJlc3BvbnNlIHJldHVybmVkIChzY2FucmVzcC0+bnJfc2V0cykuIFNhdmUKLQkgKiAgICB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIG5ld2Jzc2VudHJ5IGFuZCB0aGVuIGluc2VydCBpbnRvIHRoZQotCSAqICAgIGRyaXZlciBzY2FuIHRhYmxlIGVpdGhlciBhcyBhbiB1cGRhdGUgdG8gYW4gZXhpc3RpbmcgZW50cnkKLQkgKiAgICBvciBhcyBhbiBhZGRpdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSB0YWJsZQotCSAqLwotCWZvciAoaWR4ID0gMDsgaWR4IDwgc2NhbnJlc3AtPm5yX3NldHMgJiYgYnl0ZXNsZWZ0OyBpZHgrKykgewotCQlzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgbmV3OwotCQlzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKmZvdW5kID0gTlVMTDsKLQkJc3RydWN0IGJzc19kZXNjcmlwdG9yICpvbGRlc3QgPSBOVUxMOwotCi0JCS8qIFByb2Nlc3MgdGhlIGRhdGEgZmllbGRzIGFuZCBJRXMgcmV0dXJuZWQgZm9yIHRoaXMgQlNTICovCi0JCW1lbXNldCgmbmV3LCAwLCBzaXplb2YgKHN0cnVjdCBic3NfZGVzY3JpcHRvcikpOwotCQlpZiAobGJzX3Byb2Nlc3NfYnNzKCZuZXcsICZic3NpbmZvLCAmYnl0ZXNsZWZ0KSAhPSAwKSB7Ci0JCQkvKiBlcnJvciBwYXJzaW5nIHRoZSBzY2FuIHJlc3BvbnNlLCBza2lwcGVkICovCi0JCQlsYnNfZGViX3NjYW4oIlNDQU5fUkVTUDogcHJvY2Vzc19ic3MgcmV0dXJuZWQgRVJST1JcbiIpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBUcnkgdG8gZmluZCB0aGlzIGJzcyBpbiB0aGUgc2NhbiB0YWJsZSAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5IChpdGVyX2JzcywgJnByaXYtPm5ldHdvcmtfbGlzdCwgbGlzdCkgewotCQkJaWYgKGlzX3NhbWVfbmV0d29yayhpdGVyX2JzcywgJm5ldykpIHsKLQkJCQlmb3VuZCA9IGl0ZXJfYnNzOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQlpZiAoKG9sZGVzdCA9PSBOVUxMKSB8fAotCQkJICAgIChpdGVyX2Jzcy0+bGFzdF9zY2FubmVkIDwgb2xkZXN0LT5sYXN0X3NjYW5uZWQpKQotCQkJCW9sZGVzdCA9IGl0ZXJfYnNzOwotCQl9Ci0KLQkJaWYgKGZvdW5kKSB7Ci0JCQkvKiBmb3VuZCwgY2xlYXIgaXQgKi8KLQkJCWNsZWFyX2Jzc19kZXNjcmlwdG9yKGZvdW5kKTsKLQkJfSBlbHNlIGlmICghbGlzdF9lbXB0eSgmcHJpdi0+bmV0d29ya19mcmVlX2xpc3QpKSB7Ci0JCQkvKiBQdWxsIG9uZSBmcm9tIHRoZSBmcmVlIGxpc3QgKi8KLQkJCWZvdW5kID0gbGlzdF9lbnRyeShwcml2LT5uZXR3b3JrX2ZyZWVfbGlzdC5uZXh0LAotCQkJCQkgICBzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IsIGxpc3QpOwotCQkJbGlzdF9tb3ZlX3RhaWwoJmZvdW5kLT5saXN0LCAmcHJpdi0+bmV0d29ya19saXN0KTsKLQkJfSBlbHNlIGlmIChvbGRlc3QpIHsKLQkJCS8qIElmIHRoZXJlIGFyZSBubyBtb3JlIHNsb3RzLCBleHBpcmUgdGhlIG9sZGVzdCAqLwotCQkJZm91bmQgPSBvbGRlc3Q7Ci0JCQljbGVhcl9ic3NfZGVzY3JpcHRvcihmb3VuZCk7Ci0JCQlsaXN0X21vdmVfdGFpbCgmZm91bmQtPmxpc3QsICZwcml2LT5uZXR3b3JrX2xpc3QpOwotCQl9IGVsc2UgewotCQkJY29udGludWU7Ci0JCX0KLQotCQlsYnNfZGViX3NjYW4oIlNDQU5fUkVTUDogQlNTSUQgJXBNXG4iLCBuZXcuYnNzaWQpOwotCi0JCS8qIENvcHkgdGhlIGxvY2FsbHkgY3JlYXRlZCBuZXdic3NlbnRyeSB0byB0aGUgc2NhbiB0YWJsZSAqLwotCQltZW1jcHkoZm91bmQsICZuZXcsIG9mZnNldG9mKHN0cnVjdCBic3NfZGVzY3JpcHRvciwgbGlzdCkpOwotCX0KLQotCXJldCA9IDA7Ci0KLWRvbmU6Ci0JbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfU0NBTiwgInJldCAlZCIsIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZiMTcwNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioKLSAgKiBJbnRlcmZhY2UgZm9yIHRoZSB3bGFuIG5ldHdvcmsgc2NhbiByb3V0aW5lcwotICAqCi0gICogRHJpdmVyIGludGVyZmFjZSBmdW5jdGlvbnMgYW5kIHR5cGUgZGVjbGFyYXRpb25zIGZvciB0aGUgc2NhbiBtb2R1bGUKLSAgKiBpbXBsZW1lbnRlZCBpbiBzY2FuLmMuCi0gICovCi0jaWZuZGVmIF9MQlNfU0NBTl9ICi0jZGVmaW5lIF9MQlNfU0NBTl9ICi0KLSNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgotCi1zdHJ1Y3QgbGJzX3ByaXZhdGU7Ci0KLSNkZWZpbmUgTUFYX05FVFdPUktfQ09VTlQgMTI4Ci0KLS8qKiBDaGFuLWZyZXEtVHhQb3dlciBtYXBwaW5nIHRhYmxlKi8KLXN0cnVjdCBjaGFuX2ZyZXFfcG93ZXIgewotCS8qKiBjaGFubmVsIE51bWJlcgkJKi8KLQl1MTYgY2hhbm5lbDsKLQkvKiogZnJlcXVlbmN5IG9mIHRoaXMgY2hhbm5lbAkqLwotCXUzMiBmcmVxOwotCS8qKiBNYXggYWxsb3dlZCBUeCBwb3dlciBsZXZlbAkqLwotCXUxNiBtYXh0eHBvd2VyOwotCS8qKiBUUlVFOmNoYW5uZWwgdW5zdXBwb3J0ZWQ7ICBGTEFTRTpzdXBwb3J0ZWQqLwotCXU4IHVuc3VwcG9ydGVkOwotfTsKLQotLyoqIHJlZ2lvbi1iYW5kIG1hcHBpbmcgdGFibGUqLwotc3RydWN0IHJlZ2lvbl9jaGFubmVsIHsKLQkvKiogVFJVRSBpZiB0aGlzIGVudHJ5IGlzIHZhbGlkCQkgICAgICovCi0JdTggdmFsaWQ7Ci0JLyoqIHJlZ2lvbiBjb2RlIGZvciBVUywgSmFwYW4gLi4uCSAgICAgKi8KLQl1OCByZWdpb247Ci0JLyoqIGJhbmQgQi9HL0EsIHVzZWQgZm9yIEJBTkRfQ09ORklHIGNtZAkgICAgICovCi0JdTggYmFuZDsKLQkvKiogQWN0dWFsIE5vLiBvZiBlbGVtZW50cyBpbiB0aGUgYXJyYXkgYmVsb3cgKi8KLQl1OCBucmNmcDsKLQkvKiogY2hhbi1mcmVxLXR4cG93ZXIgbWFwcGluZyB0YWJsZSovCi0Jc3RydWN0IGNoYW5fZnJlcV9wb3dlciAqQ0ZQOwotfTsKLQotLyoqCi0gKiAgQGJyaWVmIE1heGltdW0gbnVtYmVyIG9mIGNoYW5uZWxzIHRoYXQgY2FuIGJlIHNlbnQgaW4gYSBzZXR1c2Vyc2NhbiBpb2N0bAotICovCi0jZGVmaW5lIExCU19JT0NUTF9VU0VSX1NDQU5fQ0hBTl9NQVggIDUwCi0KLWludCBsYnNfc3NpZF9jbXAodTggKnNzaWQxLCB1OCBzc2lkMV9sZW4sIHU4ICpzc2lkMiwgdTggc3NpZDJfbGVuKTsKLQotaW50IGxic19zZXRfcmVnaW9udGFibGUoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1OCByZWdpb24sIHU4IGJhbmQpOwotCi1pbnQgbGJzX3NlbmRfc3BlY2lmaWNfc3NpZF9zY2FuKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdTggKnNzaWQsCi0JCQkJdTggc3NpZF9sZW4pOwotCi1pbnQgbGJzX2dldF9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgc3RydWN0IGl3X3BvaW50ICpkd3JxLCBjaGFyICpleHRyYSk7Ci1pbnQgbGJzX3NldF9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpOwotCi1pbnQgbGJzX3NjYW5fbmV0d29ya3Moc3RydWN0IGxic19wcml2YXRlICpwcml2LCBpbnQgZnVsbF9zY2FuKTsKLQotdm9pZCBsYnNfc2Nhbl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYwppbmRleCBhOWJmNjU4Li44MDAwY2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMKQEAgLTQsMTMgKzQsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CiAKICNpbmNsdWRlICJob3N0LmgiCiAjaW5jbHVkZSAicmFkaW90YXAuaCIKICNpbmNsdWRlICJkZWNsLmgiCiAjaW5jbHVkZSAiZGVmcy5oIgogI2luY2x1ZGUgImRldi5oIgotI2luY2x1ZGUgIndleHQuaCIKIAogLyoqCiAgKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gY29udmVydHMgVHgvUnggcmF0ZXMgZnJvbSBJRUVFODAyMTFfUkFESU9UQVBfUkFURQpAQCAtMTExLDcgKzExMSw3IEBACiAJcDgwMnhfaGRyID0gc2tiLT5kYXRhOwogCXBrdF9sZW4gPSBza2ItPmxlbjsKIAotCWlmIChkZXYgPT0gcHJpdi0+cnRhcF9uZXRfZGV2KSB7CisJaWYgKHByaXYtPndkZXYtPmlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSB7CiAJCXN0cnVjdCB0eF9yYWRpb3RhcF9oZHIgKnJ0YXBfaGRyID0gKHZvaWQgKilza2ItPmRhdGE7CiAKIAkJLyogc2V0IHR4cGQgZmllbGRzIGZyb20gdGhlIHJhZGlvdGFwIGhlYWRlciAqLwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAotCWlmIChwcml2LT5tb25pdG9ybW9kZSkgeworCWlmIChwcml2LT53ZGV2LT5pZnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikgewogCQkvKiBLZWVwIHRoZSBza2IgdG8gZWNobyBpdCBiYWNrIG9uY2UgVHggZmVlZGJhY2sgaXMKIAkJICAgcmVjZWl2ZWQgZnJvbSBGVyAqLwogCQlza2Jfb3JwaGFuKHNrYik7CkBAIC0xNTgsNiArMTU4LDcgQEAKICBmcmVlOgogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCX0KKwogIHVubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOwogCXdha2VfdXAoJnByaXYtPndhaXRxKTsKQEAgLTE3OSw3ICsxODAsOCBAQAogewogCXN0cnVjdCB0eF9yYWRpb3RhcF9oZHIgKnJhZGlvdGFwX2hkcjsKIAotCWlmICghcHJpdi0+bW9uaXRvcm1vZGUgfHwgcHJpdi0+Y3VycmVudHR4c2tiID09IE5VTEwpCisJaWYgKHByaXYtPndkZXYtPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SIHx8CisJICAgIHByaXYtPmN1cnJlbnR0eHNrYiA9PSBOVUxMKQogCQlyZXR1cm47CiAKIAlyYWRpb3RhcF9oZHIgPSAoc3RydWN0IHR4X3JhZGlvdGFwX2hkciAqKXByaXYtPmN1cnJlbnR0eHNrYi0+ZGF0YTsKQEAgLTE4OCw3ICsxOTAsNyBAQAogCQkoMSArIHByaXYtPnR4cmV0cnljb3VudCAtIHRyeV9jb3VudCkgOiAwOwogCiAJcHJpdi0+Y3VycmVudHR4c2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHByaXYtPmN1cnJlbnR0eHNrYiwKLQkJCQkJCSAgICAgIHByaXYtPnJ0YXBfbmV0X2Rldik7CisJCQkJCQkgICAgICBwcml2LT5kZXYpOwogCW5ldGlmX3J4KHByaXYtPmN1cnJlbnR0eHNrYik7CiAKIAlwcml2LT5jdXJyZW50dHhza2IgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHlwZXMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R5cGVzLmgKaW5kZXggM2U3MmM4Ni4uNDYyZmJiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHlwZXMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eXBlcy5oCkBAIC0xMSw3ICsxMSw3IEBACiBzdHJ1Y3QgaWVlZV9pZV9oZWFkZXIgewogCXU4IGlkOwogCXU4IGxlbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGllZWVfaWVfY2ZfcGFyYW1fc2V0IHsKIAlzdHJ1Y3QgaWVlZV9pZV9oZWFkZXIgaGVhZGVyOwpAQCAtMjAsMTkgKzIwLDE5IEBACiAJdTggY2ZwcGVyaW9kOwogCV9fbGUxNiBjZnBtYXhkdXJhdGlvbjsKIAlfX2xlMTYgY2ZwZHVyYXRpb25yZW1haW5pbmc7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIAogc3RydWN0IGllZWVfaWVfaWJzc19wYXJhbV9zZXQgewogCXN0cnVjdCBpZWVlX2llX2hlYWRlciBoZWFkZXI7CiAKIAlfX2xlMTYgYXRpbXdpbmRvdzsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogdW5pb24gaWVlZV9zc19wYXJhbV9zZXQgewogCXN0cnVjdCBpZWVlX2llX2NmX3BhcmFtX3NldCBjZjsKIAlzdHJ1Y3QgaWVlZV9pZV9pYnNzX3BhcmFtX3NldCBpYnNzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaWVlZV9pZV9maF9wYXJhbV9zZXQgewogCXN0cnVjdCBpZWVlX2llX2hlYWRlciBoZWFkZXI7CkBAIC00MSwxOCArNDEsMTggQEAKIAl1OCBob3BzZXQ7CiAJdTggaG9wcGF0dGVybjsKIAl1OCBob3BpbmRleDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGllZWVfaWVfZHNfcGFyYW1fc2V0IHsKIAlzdHJ1Y3QgaWVlZV9pZV9oZWFkZXIgaGVhZGVyOwogCiAJdTggY2hhbm5lbDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogdW5pb24gaWVlZV9waHlfcGFyYW1fc2V0IHsKIAlzdHJ1Y3QgaWVlZV9pZV9maF9wYXJhbV9zZXQgZmg7CiAJc3RydWN0IGllZWVfaWVfZHNfcGFyYW1fc2V0IGRzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiogVExWICB0eXBlIElEIGRlZmluaXRpb24gKi8KICNkZWZpbmUgUFJPUFJJRVRBUllfVExWX0JBU0VfSUQJCTB4MDEwMApAQCAtMTAwLDI4ICsxMDAsMjggQEAKIHN0cnVjdCBtcnZsX2llX2hlYWRlciB7CiAJX19sZTE2IHR5cGU7CiAJX19sZTE2IGxlbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IG1ydmxfaWVfZGF0YSB7CiAJc3RydWN0IG1ydmxfaWVfaGVhZGVyIGhlYWRlcjsKIAl1OCBEYXRhWzFdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbXJ2bF9pZV9yYXRlc19wYXJhbV9zZXQgewogCXN0cnVjdCBtcnZsX2llX2hlYWRlciBoZWFkZXI7CiAJdTggcmF0ZXNbMV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBtcnZsX2llX3NzaWRfcGFyYW1fc2V0IHsKIAlzdHJ1Y3QgbXJ2bF9pZV9oZWFkZXIgaGVhZGVyOwogCXU4IHNzaWRbMV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBtcnZsX2llX3dpbGRjYXJkX3NzaWRfcGFyYW1fc2V0IHsKIAlzdHJ1Y3QgbXJ2bF9pZV9oZWFkZXIgaGVhZGVyOwogCXU4IE1heFNzaWRsZW5ndGg7CiAJdTggc3NpZFsxXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGNoYW5zY2FubW9kZSB7CiAjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECkBAIC0xMzMsNyArMTMzLDcgQEAKIAl1OCBkaXNhYmxlY2hhbmZpbHQ6MTsKIAl1OCByZXNlcnZlZF8yXzc6NjsKICNlbmRpZgotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgY2hhbnNjYW5wYXJhbXNldCB7CiAJdTggcmFkaW90eXBlOwpAQCAtMTQxLDEyICsxNDEsMTIgQEAKIAlzdHJ1Y3QgY2hhbnNjYW5tb2RlIGNoYW5zY2FubW9kZTsKIAlfX2xlMTYgbWluc2NhbnRpbWU7CiAJX19sZTE2IG1heHNjYW50aW1lOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbXJ2bF9pZV9jaGFubGlzdF9wYXJhbV9zZXQgewogCXN0cnVjdCBtcnZsX2llX2hlYWRlciBoZWFkZXI7CiAJc3RydWN0IGNoYW5zY2FucGFyYW1zZXQgY2hhbnNjYW5wYXJhbVsxXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IG1ydmxfaWVfY2ZfcGFyYW1fc2V0IHsKIAlzdHJ1Y3QgbXJ2bF9pZV9oZWFkZXIgaGVhZGVyOwpAQCAtMTU0LDg2ICsxNTQsODYgQEAKIAl1OCBjZnBwZXJpb2Q7CiAJX19sZTE2IGNmcG1heGR1cmF0aW9uOwogCV9fbGUxNiBjZnBkdXJhdGlvbnJlbWFpbmluZzsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IG1ydmxfaWVfZHNfcGFyYW1fc2V0IHsKIAlzdHJ1Y3QgbXJ2bF9pZV9oZWFkZXIgaGVhZGVyOwogCXU4IGNoYW5uZWw7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBtcnZsX2llX3Jzbl9wYXJhbV9zZXQgewogCXN0cnVjdCBtcnZsX2llX2hlYWRlciBoZWFkZXI7CiAJdTggcnNuaWVbMV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBtcnZsX2llX3RzZl90aW1lc3RhbXAgewogCXN0cnVjdCBtcnZsX2llX2hlYWRlciBoZWFkZXI7CiAJX19sZTY0IHRzZnRhYmxlWzFdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiB2OSBhbmQgbGF0ZXIgZmlybXdhcmUgb25seSAqLwogc3RydWN0IG1ydmxfaWVfYXV0aF90eXBlIHsKIAlzdHJ1Y3QgbXJ2bF9pZV9oZWFkZXIgaGVhZGVyOwogCV9fbGUxNiBhdXRoOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiogIExvY2FsIFBvd2VyIGNhcGFiaWxpdHkgKi8KIHN0cnVjdCBtcnZsX2llX3Bvd2VyX2NhcGFiaWxpdHkgewogCXN0cnVjdCBtcnZsX2llX2hlYWRlciBoZWFkZXI7CiAJczggbWlucG93ZXI7CiAJczggbWF4cG93ZXI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIHVzZWQgaW4gQ01EXzgwMl8xMV9TVUJTQ1JJQkVfRVZFTlQgZm9yIFNOUiwgUlNTSSBhbmQgRmFpbHVyZSAqLwogc3RydWN0IG1ydmxfaWVfdGhyZXNob2xkcyB7CiAJc3RydWN0IG1ydmxfaWVfaGVhZGVyIGhlYWRlcjsKIAl1OCB2YWx1ZTsKIAl1OCBmcmVxOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbXJ2bF9pZV9iZWFjb25zX21pc3NlZCB7CiAJc3RydWN0IG1ydmxfaWVfaGVhZGVyIGhlYWRlcjsKIAl1OCBiZWFjb25taXNzZWQ7CiAJdTggcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBtcnZsX2llX251bV9wcm9iZXMgewogCXN0cnVjdCBtcnZsX2llX2hlYWRlciBoZWFkZXI7CiAJX19sZTE2IG51bXByb2JlczsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IG1ydmxfaWVfYmNhc3RfcHJvYmUgewogCXN0cnVjdCBtcnZsX2llX2hlYWRlciBoZWFkZXI7CiAJX19sZTE2IGJjYXN0cHJvYmU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBtcnZsX2llX251bV9zc2lkX3Byb2JlIHsKIAlzdHJ1Y3QgbXJ2bF9pZV9oZWFkZXIgaGVhZGVyOwogCV9fbGUxNiBudW1zc2lkcHJvYmU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBsZWRfcGluIHsKIAl1OCBsZWQ7CiAJdTggcGluOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbXJ2bF9pZV9sZWRncGlvIHsKIAlzdHJ1Y3QgbXJ2bF9pZV9oZWFkZXIgaGVhZGVyOwogCXN0cnVjdCBsZWRfcGluIGxlZHBpblsxXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGxlZF9iaHYgewogCXVpbnQ4X3QJZmlybXdhcmVzdGF0ZTsKIAl1aW50OF90CWxlZDsKIAl1aW50OF90CWxlZHN0YXRlOwogCXVpbnQ4X3QJbGVkYXJnOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAKIHN0cnVjdCBtcnZsX2llX2xlZGJodiB7CiAJc3RydWN0IG1ydmxfaWVfaGVhZGVyIGhlYWRlcjsKIAlzdHJ1Y3QgbGVkX2JodiBsZWRiaHZbMV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIE1lYW50IHRvIGJlIHBhY2tlZCBhcyB0aGUgdmFsdWUgbWVtYmVyIG9mIGEgc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQuCiAgKiBOb3RlIHRoYXQgdGhlIGxlbiBtZW1iZXIgb2YgdGhlIGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgdmFyaWVzIGRlcGVuZGluZyBvbgpAQCAtMjQ4LDEyICsyNDgsMTIgQEAKIAl1aW50OF90IG1lc2hfY2FwYWJpbGl0eTsKIAl1aW50OF90IG1lc2hfaWRfbGVuOwogCXVpbnQ4X3QgbWVzaF9pZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IG1ydmxfbWVzaGllIHsKIAl1OCBpZCwgbGVuOwogCXN0cnVjdCBtcnZsX21lc2hpZV92YWwgdmFsOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbXJ2bF9tZXNoX2RlZmF1bHRzIHsKIAlfX2xlMzIgYm9vdGZsYWc7CkBAIC0yNjEsNiArMjYxLDYgQEAKIAl1aW50OF90IHJlc2VydmVkOwogCV9fbGUxNiBjaGFubmVsOwogCXN0cnVjdCBtcnZsX21lc2hpZSBtZXNoaWU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTZhOTYwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYworKysgL2Rldi9udWxsCkBAIC0xLDIzNTMgKzAsMCBAQAotLyoqCi0gICogVGhpcyBmaWxlIGNvbnRhaW5zIGlvY3RsIGZ1bmN0aW9ucwotICAqLwotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaWYuaD4KLSNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KLSNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotCi0jaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+Ci0jaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KLQotI2luY2x1ZGUgImhvc3QuaCIKLSNpbmNsdWRlICJyYWRpb3RhcC5oIgotI2luY2x1ZGUgImRlY2wuaCIKLSNpbmNsdWRlICJkZWZzLmgiCi0jaW5jbHVkZSAiZGV2LmgiCi0jaW5jbHVkZSAid2V4dC5oIgotI2luY2x1ZGUgInNjYW4uaCIKLSNpbmNsdWRlICJhc3NvYy5oIgotI2luY2x1ZGUgImNtZC5oIgotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBsYnNfcG9zdHBvbmVfYXNzb2NpYXRpb25fd29yayhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCi17Ci0JaWYgKHByaXYtPnN1cnByaXNlcmVtb3ZlZCkKLQkJcmV0dXJuOwotCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmFzc29jX3dvcmspOwotCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrX3RocmVhZCwgJnByaXYtPmFzc29jX3dvcmssIEhaIC8gMik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBsYnNfZG9fYXNzb2NpYXRpb25fd29yayhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCi17Ci0JaWYgKHByaXYtPnN1cnByaXNlcmVtb3ZlZCkKLQkJcmV0dXJuOwotCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmFzc29jX3dvcmspOwotCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrX3RocmVhZCwgJnByaXYtPmFzc29jX3dvcmssIDApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbGJzX2NhbmNlbF9hc3NvY2lhdGlvbl93b3JrKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKLXsKLQljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5hc3NvY193b3JrKTsKLQlrZnJlZShwcml2LT5wZW5kaW5nX2Fzc29jX3JlcSk7Ci0JcHJpdi0+cGVuZGluZ19hc3NvY19yZXEgPSBOVUxMOwotfQotCi12b2lkIGxic19zZW5kX2Rpc2Nvbm5lY3Rfbm90aWZpY2F0aW9uKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKLXsKLQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7Ci0KLQltZW1zZXQod3JxdS5hcF9hZGRyLnNhX2RhdGEsIDB4MDAsIEVUSF9BTEVOKTsKLQl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCXdpcmVsZXNzX3NlbmRfZXZlbnQocHJpdi0+ZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQgbGJzX3NlbmRfaXdldmN1c3RvbV9ldmVudChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHM4ICpzdHIpCi17Ci0JdW5pb24gaXdyZXFfZGF0YSBpd3JxOwotCXU4IGJ1Zls1MF07Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7Ci0KLQltZW1zZXQoJml3cnEsIDAsIHNpemVvZih1bmlvbiBpd3JlcV9kYXRhKSk7Ci0JbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwotCi0Jc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSAtIDEsICIlcyIsIHN0cik7Ci0KLQlpd3JxLmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1ZikgKyAxICsgSVdfRVZfTENQX0xFTjsKLQotCS8qIFNlbmQgRXZlbnQgdG8gdXBwZXIgbGF5ZXIgKi8KLQlsYnNfZGViX3dleHQoImV2ZW50IGluZGljYXRpb24gc3RyaW5nICVzXG4iLCAoY2hhciAqKWJ1Zik7Ci0JbGJzX2RlYl93ZXh0KCJldmVudCBpbmRpY2F0aW9uIGxlbmd0aCAlZFxuIiwgaXdycS5kYXRhLmxlbmd0aCk7Ci0JbGJzX2RlYl93ZXh0KCJzZW5kaW5nIHdpcmVsZXNzIGV2ZW50IElXRVZDVVNUT00gZm9yICVzXG4iLCBzdHIpOwotCi0Jd2lyZWxlc3Nfc2VuZF9ldmVudChwcml2LT5kZXYsIElXRVZDVVNUT00sICZpd3JxLCBidWYpOwotCi0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX1dFWFQpOwotfQotCi0vKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBoYW5kbGVzIE1JQyBmYWlsdXJlIGV2ZW50LgotICoKLSAqICBAcGFyYW0gcHJpdiAgICBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEBwYXJhICBldmVudCAgIHRoZSBldmVudCBpZAotICogIEByZXR1cm4gCSAgIG4vYQotICovCi12b2lkIGxic19zZW5kX21pY19mYWlsdXJlZXZlbnQoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1MzIgZXZlbnQpCi17Ci0JY2hhciBidWZbNTBdOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0NNRCk7Ci0JbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwotCi0Jc3ByaW50ZihidWYsICIlcyIsICJNTE1FLU1JQ0hBRUxNSUNGQUlMVVJFLmluZGljYXRpb24gIik7Ci0KLQlpZiAoZXZlbnQgPT0gTUFDUkVHX0lOVF9DT0RFX01JQ19FUlJfVU5JQ0FTVCkKLQkJc3RyY2F0KGJ1ZiwgInVuaWNhc3QgIik7Ci0JZWxzZQotCQlzdHJjYXQoYnVmLCAibXVsdGljYXN0ICIpOwotCi0JbGJzX3NlbmRfaXdldmN1c3RvbV9ldmVudChwcml2LCBidWYpOwotCWxic19kZWJfbGVhdmUoTEJTX0RFQl9DTUQpOwotfQotCi0vKioKLSAqICBAYnJpZWYgRmluZCB0aGUgY2hhbm5lbCBmcmVxdWVuY3kgcG93ZXIgaW5mbyB3aXRoIHNwZWNpZmljIGNoYW5uZWwKLSAqCi0gKiAgQHBhcmFtIHByaXYgCUEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIGJhbmQJCWl0IGNhbiBiZSBCQU5EX0EsIEJBTkRfRyBvciBCQU5EX0IKLSAqICBAcGFyYW0gY2hhbm5lbCAgICAgIHRoZSBjaGFubmVsIGZvciBsb29raW5nCi0gKiAgQHJldHVybiAJICAgCUEgcG9pbnRlciB0byBzdHJ1Y3QgY2hhbl9mcmVxX3Bvd2VyIHN0cnVjdHVyZSBvciBOVUxMIGlmIG5vdCBmaW5kLgotICovCi1zdHJ1Y3QgY2hhbl9mcmVxX3Bvd2VyICpsYnNfZmluZF9jZnBfYnlfYmFuZF9hbmRfY2hhbm5lbCgKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JdTggYmFuZCwKLQl1MTYgY2hhbm5lbCkKLXsKLQlzdHJ1Y3QgY2hhbl9mcmVxX3Bvd2VyICpjZnAgPSBOVUxMOwotCXN0cnVjdCByZWdpb25fY2hhbm5lbCAqcmM7Ci0JaW50IGksIGo7Ci0KLQlmb3IgKGogPSAwOyAhY2ZwICYmIChqIDwgQVJSQVlfU0laRShwcml2LT5yZWdpb25fY2hhbm5lbCkpOyBqKyspIHsKLQkJcmMgPSAmcHJpdi0+cmVnaW9uX2NoYW5uZWxbal07Ci0KLQkJaWYgKCFyYy0+dmFsaWQgfHwgIXJjLT5DRlApCi0JCQljb250aW51ZTsKLQkJaWYgKHJjLT5iYW5kICE9IGJhbmQpCi0JCQljb250aW51ZTsKLQkJZm9yIChpID0gMDsgaSA8IHJjLT5ucmNmcDsgaSsrKSB7Ci0JCQlpZiAocmMtPkNGUFtpXS5jaGFubmVsID09IGNoYW5uZWwpIHsKLQkJCQljZnAgPSAmcmMtPkNGUFtpXTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQotCWlmICghY2ZwICYmIGNoYW5uZWwpCi0JCWxic19kZWJfd2V4dCgibGJzX2ZpbmRfY2ZwX2J5X2JhbmRfYW5kX2NoYW5uZWw6IGNhbid0IGZpbmQgIgotCQkgICAgICAgImNmcCBieSBiYW5kICVkIC8gY2hhbm5lbCAlZFxuIiwgYmFuZCwgY2hhbm5lbCk7Ci0KLQlyZXR1cm4gY2ZwOwotfQotCi0vKioKLSAqICBAYnJpZWYgRmluZCB0aGUgY2hhbm5lbCBmcmVxdWVuY3kgcG93ZXIgaW5mbyB3aXRoIHNwZWNpZmljIGZyZXF1ZW5jeQotICoKLSAqICBAcGFyYW0gcHJpdiAJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gYmFuZAkJaXQgY2FuIGJlIEJBTkRfQSwgQkFORF9HIG9yIEJBTkRfQgotICogIEBwYXJhbSBmcmVxCSAgICAgICAgdGhlIGZyZXF1ZW5jeSBmb3IgbG9va2luZwotICogIEByZXR1cm4gCSAgIAlBIHBvaW50ZXIgdG8gc3RydWN0IGNoYW5fZnJlcV9wb3dlciBzdHJ1Y3R1cmUgb3IgTlVMTCBpZiBub3QgZmluZC4KLSAqLwotc3RhdGljIHN0cnVjdCBjaGFuX2ZyZXFfcG93ZXIgKmZpbmRfY2ZwX2J5X2JhbmRfYW5kX2ZyZXEoCi0Jc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCXU4IGJhbmQsCi0JdTMyIGZyZXEpCi17Ci0Jc3RydWN0IGNoYW5fZnJlcV9wb3dlciAqY2ZwID0gTlVMTDsKLQlzdHJ1Y3QgcmVnaW9uX2NoYW5uZWwgKnJjOwotCWludCBpLCBqOwotCi0JZm9yIChqID0gMDsgIWNmcCAmJiAoaiA8IEFSUkFZX1NJWkUocHJpdi0+cmVnaW9uX2NoYW5uZWwpKTsgaisrKSB7Ci0JCXJjID0gJnByaXYtPnJlZ2lvbl9jaGFubmVsW2pdOwotCi0JCWlmICghcmMtPnZhbGlkIHx8ICFyYy0+Q0ZQKQotCQkJY29udGludWU7Ci0JCWlmIChyYy0+YmFuZCAhPSBiYW5kKQotCQkJY29udGludWU7Ci0JCWZvciAoaSA9IDA7IGkgPCByYy0+bnJjZnA7IGkrKykgewotCQkJaWYgKHJjLT5DRlBbaV0uZnJlcSA9PSBmcmVxKSB7Ci0JCQkJY2ZwID0gJnJjLT5DRlBbaV07Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoIWNmcCAmJiBmcmVxKQotCQlsYnNfZGViX3dleHQoImZpbmRfY2ZwX2J5X2JhbmRfYW5kX2ZyZXFsOiBjYW4ndCBmaW5kIGNmcCBieSAiCi0JCSAgICAgICAiYmFuZCAlZCAvIGZyZXEgJWRcbiIsIGJhbmQsIGZyZXEpOwotCi0JcmV0dXJuIGNmcDsKLX0KLQotLyoqCi0gKiAgQGJyaWVmIENvcHkgYWN0aXZlIGRhdGEgcmF0ZXMgYmFzZWQgb24gYWRhcHRlciBtb2RlIGFuZCBzdGF0dXMKLSAqCi0gKiAgQHBhcmFtIHByaXYgICAgICAgICAgICAgIEEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIHJhdGUJCSAgICAgICAgVGhlIGJ1ZiB0byByZXR1cm4gdGhlIGFjdGl2ZSByYXRlcwotICovCi1zdGF0aWMgdm9pZCBjb3B5X2FjdGl2ZV9kYXRhX3JhdGVzKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdTggKnJhdGVzKQotewotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsKLQotCWlmICgocHJpdi0+Y29ubmVjdF9zdGF0dXMgIT0gTEJTX0NPTk5FQ1RFRCkgJiYKLQkJIWxic19tZXNoX2Nvbm5lY3RlZChwcml2KSkKLQkJbWVtY3B5KHJhdGVzLCBsYnNfYmdfcmF0ZXMsIE1BWF9SQVRFUyk7Ci0JZWxzZQotCQltZW1jcHkocmF0ZXMsIHByaXYtPmN1cmJzc3BhcmFtcy5yYXRlcywgTUFYX1JBVEVTKTsKLQotCWxic19kZWJfbGVhdmUoTEJTX0RFQl9XRVhUKTsKLX0KLQotc3RhdGljIGludCBsYnNfZ2V0X25hbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSBjaGFyICpjd3JxLCBjaGFyICpleHRyYSkKLXsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsKLQotCS8qIFdlIGNvdWxkIGFkZCBzdXBwb3J0IGZvciA4MDIuMTFuIGhlcmUgYXMgbmVlZGVkLiBKZWFuIElJICovCi0Jc25wcmludGYoY3dycSwgSUZOQU1TSVosICJJRUVFIDgwMi4xMWIvZyIpOwotCi0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX1dFWFQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGxic19nZXRfZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJIHN0cnVjdCBpd19mcmVxICpmd3JxLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7Ci0Jc3RydWN0IGNoYW5fZnJlcV9wb3dlciAqY2ZwOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOwotCi0JY2ZwID0gbGJzX2ZpbmRfY2ZwX2J5X2JhbmRfYW5kX2NoYW5uZWwocHJpdiwgMCwKLQkJCQkJICAgcHJpdi0+Y2hhbm5lbCk7Ci0KLQlpZiAoIWNmcCkgewotCQlpZiAocHJpdi0+Y2hhbm5lbCkKLQkJCWxic19kZWJfd2V4dCgiaW52YWxpZCBjaGFubmVsICVkXG4iLAotCQkJICAgICAgIHByaXYtPmNoYW5uZWwpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlmd3JxLT5tID0gKGxvbmcpY2ZwLT5mcmVxICogMTAwMDAwOwotCWZ3cnEtPmUgPSAxOwotCi0JbGJzX2RlYl93ZXh0KCJmcmVxICV1XG4iLCBmd3JxLT5tKTsKLQlsYnNfZGViX2xlYXZlKExCU19ERUJfV0VYVCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbGJzX2dldF93YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCXN0cnVjdCBzb2NrYWRkciAqYXdycSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOwotCi0JaWYgKHByaXYtPmNvbm5lY3Rfc3RhdHVzID09IExCU19DT05ORUNURUQpIHsKLQkJbWVtY3B5KGF3cnEtPnNhX2RhdGEsIHByaXYtPmN1cmJzc3BhcmFtcy5ic3NpZCwgRVRIX0FMRU4pOwotCX0gZWxzZSB7Ci0JCW1lbXNldChhd3JxLT5zYV9kYXRhLCAwLCBFVEhfQUxFTik7Ci0JfQotCWF3cnEtPnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQotCWxic19kZWJfbGVhdmUoTEJTX0RFQl9XRVhUKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBsYnNfc2V0X25pY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsKLQotCS8qCi0JICogQ2hlY2sgdGhlIHNpemUgb2YgdGhlIHN0cmluZwotCSAqLwotCi0JaWYgKGR3cnEtPmxlbmd0aCA+IDE2KSB7Ci0JCXJldHVybiAtRTJCSUc7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7Ci0JbWVtc2V0KHByaXYtPm5vZGVuYW1lLCAwLCBzaXplb2YocHJpdi0+bm9kZW5hbWUpKTsKLQltZW1jcHkocHJpdi0+bm9kZW5hbWUsIGV4dHJhLCBkd3JxLT5sZW5ndGgpOwotCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7Ci0KLQlsYnNfZGViX2xlYXZlKExCU19ERUJfV0VYVCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbGJzX2dldF9uaWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgc3RydWN0IGl3X3BvaW50ICpkd3JxLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7Ci0KLQlkd3JxLT5sZW5ndGggPSBzdHJsZW4ocHJpdi0+bm9kZW5hbWUpOwotCW1lbWNweShleHRyYSwgcHJpdi0+bm9kZW5hbWUsIGR3cnEtPmxlbmd0aCk7Ci0JZXh0cmFbZHdycS0+bGVuZ3RoXSA9ICdcMCc7Ci0KLQlkd3JxLT5mbGFncyA9IDE7CS8qIGFjdGl2ZSAqLwotCi0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX1dFWFQpOwotCXJldHVybiAwOwotfQotCi0jaWZkZWYgQ09ORklHX0xJQkVSVEFTX01FU0gKLXN0YXRpYyBpbnQgbWVzaF9nZXRfbmljayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJIHN0cnVjdCBpd19wb2ludCAqZHdycSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOwotCi0JLyogVXNlIG5pY2tuYW1lIHRvIGluZGljYXRlIHRoYXQgbWVzaCBpcyBvbiAqLwotCi0JaWYgKGxic19tZXNoX2Nvbm5lY3RlZChwcml2KSkgewotCQlzdHJuY3B5KGV4dHJhLCAiTWVzaCIsIDEyKTsKLQkJZXh0cmFbMTJdID0gJ1wwJzsKLQkJZHdycS0+bGVuZ3RoID0gc3RybGVuKGV4dHJhKTsKLQl9Ci0KLQllbHNlIHsKLQkJZXh0cmFbMF0gPSAnXDAnOwotCQlkd3JxLT5sZW5ndGggPSAwOwotCX0KLQotCWxic19kZWJfbGVhdmUoTEJTX0RFQl9XRVhUKTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IGxic19zZXRfcnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQlzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsIGNoYXIgKmV4dHJhKQotewotCWludCByZXQgPSAwOwotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKLQl1MzIgdmFsID0gdndycS0+dmFsdWU7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7Ci0KLQlpZiAodndycS0+ZGlzYWJsZWQpCi0JCXZhbCA9IE1SVkRSVl9SVFNfTUFYX1ZBTFVFOwotCi0JaWYgKHZhbCA+IE1SVkRSVl9SVFNfTUFYX1ZBTFVFKSAvKiBtaW4gcnRzIHZhbHVlIGlzIDAgKi8KLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXQgPSBsYnNfc2V0X3NubXBfbWliKHByaXYsIFNOTVBfTUlCX09JRF9SVFNfVEhSRVNIT0xELCAodTE2KSB2YWwpOwotCi0JbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfV0VYVCwgInJldCAlZCIsIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBsYnNfZ2V0X3J0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7Ci0JaW50IHJldCA9IDA7Ci0JdTE2IHZhbCA9IDA7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7Ci0KLQlyZXQgPSBsYnNfZ2V0X3NubXBfbWliKHByaXYsIFNOTVBfTUlCX09JRF9SVFNfVEhSRVNIT0xELCAmdmFsKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKLQotCXZ3cnEtPnZhbHVlID0gdmFsOwotCXZ3cnEtPmRpc2FibGVkID0gdmFsID4gTVJWRFJWX1JUU19NQVhfVkFMVUU7IC8qIG1pbiBydHMgdmFsdWUgaXMgMCAqLwotCXZ3cnEtPmZpeGVkID0gMTsKLQotb3V0OgotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1dFWFQsICJyZXQgJWQiLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgbGJzX3NldF9mcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7Ci0JaW50IHJldCA9IDA7Ci0JdTMyIHZhbCA9IHZ3cnEtPnZhbHVlOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOwotCi0JaWYgKHZ3cnEtPmRpc2FibGVkKQotCQl2YWwgPSBNUlZEUlZfRlJBR19NQVhfVkFMVUU7Ci0KLQlpZiAodmFsIDwgTVJWRFJWX0ZSQUdfTUlOX1ZBTFVFIHx8IHZhbCA+IE1SVkRSVl9GUkFHX01BWF9WQUxVRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXQgPSBsYnNfc2V0X3NubXBfbWliKHByaXYsIFNOTVBfTUlCX09JRF9GUkFHX1RIUkVTSE9MRCwgKHUxNikgdmFsKTsKLQotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1dFWFQsICJyZXQgJWQiLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgbGJzX2dldF9mcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7Ci0JaW50IHJldCA9IDA7Ci0JdTE2IHZhbCA9IDA7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7Ci0KLQlyZXQgPSBsYnNfZ2V0X3NubXBfbWliKHByaXYsIFNOTVBfTUlCX09JRF9GUkFHX1RIUkVTSE9MRCwgJnZhbCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQl2d3JxLT52YWx1ZSA9IHZhbDsKLQl2d3JxLT5kaXNhYmxlZCA9ICgodmFsIDwgTVJWRFJWX0ZSQUdfTUlOX1ZBTFVFKQotCQkJICB8fCAodmFsID4gTVJWRFJWX0ZSQUdfTUFYX1ZBTFVFKSk7Ci0JdndycS0+Zml4ZWQgPSAxOwotCi1vdXQ6Ci0JbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfV0VYVCwgInJldCAlZCIsIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBsYnNfZ2V0X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCB1MzIgKiB1d3JxLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7Ci0KLQkqdXdycSA9IHByaXYtPm1vZGU7Ci0KLQlsYnNfZGViX2xlYXZlKExCU19ERUJfV0VYVCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNpZmRlZiBDT05GSUdfTElCRVJUQVNfTUVTSAotc3RhdGljIGludCBtZXNoX3dsYW5fZ2V0X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCB1MzIgKiB1d3JxLAotCQkJICAgICAgY2hhciAqZXh0cmEpCi17Ci0JbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOwotCi0JKnV3cnEgPSBJV19NT0RFX1JFUEVBVDsKLQotCWxic19kZWJfbGVhdmUoTEJTX0RFQl9XRVhUKTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IGxic19nZXRfdHhwb3coc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7Ci0JczE2IGN1cmxldmVsID0gMDsKLQlpbnQgcmV0ID0gMDsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsKLQotCWlmICghcHJpdi0+cmFkaW9fb24pIHsKLQkJbGJzX2RlYl93ZXh0KCJ0eCBwb3dlciBvZmZcbiIpOwotCQl2d3JxLT52YWx1ZSA9IDA7Ci0JCXZ3cnEtPmRpc2FibGVkID0gMTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmV0ID0gbGJzX2dldF90eF9wb3dlcihwcml2LCAmY3VybGV2ZWwsIE5VTEwsIE5VTEwpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0JbGJzX2RlYl93ZXh0KCJ0eCBwb3dlciBsZXZlbCAlZCBkYm1cbiIsIGN1cmxldmVsKTsKLQlwcml2LT50eHBvd2VyX2N1ciA9IGN1cmxldmVsOwotCi0JdndycS0+dmFsdWUgPSBjdXJsZXZlbDsKLQl2d3JxLT5maXhlZCA9IDE7Ci0JdndycS0+ZGlzYWJsZWQgPSAwOwotCXZ3cnEtPmZsYWdzID0gSVdfVFhQT1dfREJNOwotCi1vdXQ6Ci0JbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfV0VYVCwgInJldCAlZCIsIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBsYnNfc2V0X3JldHJ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgIHN0cnVjdCBpd19wYXJhbSAqdndycSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwotCWludCByZXQgPSAwOwotCXUxNiBzbGltaXQgPSAwLCBsbGltaXQgPSAwOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOwotCi0gICAgICAgIGlmICgodndycS0+ZmxhZ3MgJiBJV19SRVRSWV9UWVBFKSAhPSBJV19SRVRSWV9MSU1JVCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQkvKiBUaGUgTUFDIGhhcyBhIDQtYml0IFRvdGFsX1R4X0NvdW50IHJlZ2lzdGVyCi0JICAgVG90YWxfVHhfQ291bnQgPSAxICsgVHhfUmV0cnlfQ291bnQgKi8KLSNkZWZpbmUgVFhfUkVUUllfTUlOIDAKLSNkZWZpbmUgVFhfUkVUUllfTUFYIDE0Ci0JaWYgKHZ3cnEtPnZhbHVlIDwgVFhfUkVUUllfTUlOIHx8IHZ3cnEtPnZhbHVlID4gVFhfUkVUUllfTUFYKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIEFkZCAxIHRvIGNvbnZlcnQgcmV0cnkgY291bnQgdG8gdHJ5IGNvdW50ICovCi0JaWYgKHZ3cnEtPmZsYWdzICYgSVdfUkVUUllfU0hPUlQpCi0JCXNsaW1pdCA9ICh1MTYpICh2d3JxLT52YWx1ZSArIDEpOwotCWVsc2UgaWYgKHZ3cnEtPmZsYWdzICYgSVdfUkVUUllfTE9ORykKLQkJbGxpbWl0ID0gKHUxNikgKHZ3cnEtPnZhbHVlICsgMSk7Ci0JZWxzZQotCQlzbGltaXQgPSBsbGltaXQgPSAodTE2KSAodndycS0+dmFsdWUgKyAxKTsgLyogc2V0IGJvdGggKi8KLQotCWlmIChsbGltaXQpIHsKLQkJcmV0ID0gbGJzX3NldF9zbm1wX21pYihwcml2LCBTTk1QX01JQl9PSURfTE9OR19SRVRSWV9MSU1JVCwKLQkJCQkgICAgICAgbGxpbWl0KTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OwotCX0KLQotCWlmIChzbGltaXQpIHsKLQkJLyogdHhyZXRyeWNvdW50IGZvbGxvd3MgdGhlIHNob3J0IHJldHJ5IGxpbWl0ICovCi0JCXByaXYtPnR4cmV0cnljb3VudCA9IHNsaW1pdDsKLQkJcmV0ID0gbGJzX3NldF9zbm1wX21pYihwcml2LCBTTk1QX01JQl9PSURfU0hPUlRfUkVUUllfTElNSVQsCi0JCQkJICAgICAgIHNsaW1pdCk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9XRVhULCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGxic19nZXRfcmV0cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7Ci0JaW50IHJldCA9IDA7Ci0JdTE2IHZhbCA9IDA7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7Ci0KLQl2d3JxLT5kaXNhYmxlZCA9IDA7Ci0KLQlpZiAodndycS0+ZmxhZ3MgJiBJV19SRVRSWV9MT05HKSB7Ci0JCXJldCA9IGxic19nZXRfc25tcF9taWIocHJpdiwgU05NUF9NSUJfT0lEX0xPTkdfUkVUUllfTElNSVQsICZ2YWwpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0KLQkJLyogU3VidHJhY3QgMSB0byBjb252ZXJ0IHRyeSBjb3VudCB0byByZXRyeSBjb3VudCAqLwotCQl2d3JxLT52YWx1ZSA9IHZhbCAtIDE7Ci0JCXZ3cnEtPmZsYWdzID0gSVdfUkVUUllfTElNSVQgfCBJV19SRVRSWV9MT05HOwotCX0gZWxzZSB7Ci0JCXJldCA9IGxic19nZXRfc25tcF9taWIocHJpdiwgU05NUF9NSUJfT0lEX1NIT1JUX1JFVFJZX0xJTUlULCAmdmFsKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OwotCi0JCS8qIHR4cmV0cnkgY291bnQgZm9sbG93cyB0aGUgc2hvcnQgcmV0cnkgbGltaXQgKi8KLQkJcHJpdi0+dHhyZXRyeWNvdW50ID0gdmFsOwotCQkvKiBTdWJ0cmFjdCAxIHRvIGNvbnZlcnQgdHJ5IGNvdW50IHRvIHJldHJ5IGNvdW50ICovCi0JCXZ3cnEtPnZhbHVlID0gdmFsIC0gMTsKLQkJdndycS0+ZmxhZ3MgPSBJV19SRVRSWV9MSU1JVCB8IElXX1JFVFJZX1NIT1JUOwotCX0KLQotb3V0OgotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1dFWFQsICJyZXQgJWQiLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzb3J0X2NoYW5uZWxzKHN0cnVjdCBpd19mcmVxICpmcmVxLCBpbnQgbnVtKQotewotCWludCBpLCBqOwotCXN0cnVjdCBpd19mcmVxIHRlbXA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCi0JCWZvciAoaiA9IGkgKyAxOyBqIDwgbnVtOyBqKyspCi0JCQlpZiAoZnJlcVtpXS5pID4gZnJlcVtqXS5pKSB7Ci0JCQkJdGVtcC5pID0gZnJlcVtpXS5pOwotCQkJCXRlbXAubSA9IGZyZXFbaV0ubTsKLQotCQkJCWZyZXFbaV0uaSA9IGZyZXFbal0uaTsKLQkJCQlmcmVxW2ldLm0gPSBmcmVxW2pdLm07Ci0KLQkJCQlmcmVxW2pdLmkgPSB0ZW1wLmk7Ci0JCQkJZnJlcVtqXS5tID0gdGVtcC5tOwotCQkJfQotfQotCi0vKiBkYXRhIHJhdGUgbGlzdGluZwotCU1VTFRJX0JBTkRTOgotCQlhYmcJCWEJYgliL2cKLSAgIEluZnJhIAlHKDEyKQkJQSg4KQlCKDQpCUcoMTIpCi0gICBBZGhvYyAJQStCKDEyKQkJQSg4KQlCKDQpCUIoNCkKLQotCW5vbi1NVUxUSV9CQU5EUzoKLQkJCQkJYgliL2cKLSAgIEluZnJhIAkgICAgIAkJICAgIAlCKDQpCUcoMTIpCi0gICBBZGhvYyAJICAgICAgCQkgICAgCUIoNCkJQig0KQotICovCi0vKioKLSAqICBAYnJpZWYgR2V0IFJhbmdlIEluZm8KLSAqCi0gKiAgQHBhcmFtIGRldiAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byBuZXRfZGV2aWNlIHN0cnVjdHVyZQotICogIEBwYXJhbSBpbmZvCQkJQSBwb2ludGVyIHRvIGl3X3JlcXVlc3RfaW5mbyBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gdndycSAJCUEgcG9pbnRlciB0byBpd19wYXJhbSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gZXh0cmEJCUEgcG9pbnRlciB0byBleHRyYSBkYXRhIGJ1ZgotICogIEByZXR1cm4gCSAgIAkJMCAtLXN1Y2Nlc3MsIG90aGVyd2lzZSBmYWlsCi0gKi8KLXN0YXRpYyBpbnQgbGJzX2dldF9yYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICBzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEsIGNoYXIgKmV4dHJhKQotewotCWludCBpLCBqOwotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKLQlzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKWV4dHJhOwotCXN0cnVjdCBjaGFuX2ZyZXFfcG93ZXIgKmNmcDsKLQl1OCByYXRlc1tNQVhfUkFURVMgKyAxXTsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsKLQotCWR3cnEtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpOwotCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSkpOwotCi0JcmFuZ2UtPm1pbl9ud2lkID0gMDsKLQlyYW5nZS0+bWF4X253aWQgPSAwOwotCi0JbWVtc2V0KHJhdGVzLCAwLCBzaXplb2YocmF0ZXMpKTsKLQljb3B5X2FjdGl2ZV9kYXRhX3JhdGVzKHByaXYsIHJhdGVzKTsKLQlyYW5nZS0+bnVtX2JpdHJhdGVzID0gc3RybmxlbihyYXRlcywgSVdfTUFYX0JJVFJBVEVTKTsKLQlmb3IgKGkgPSAwOyBpIDwgcmFuZ2UtPm51bV9iaXRyYXRlczsgaSsrKQotCQlyYW5nZS0+Yml0cmF0ZVtpXSA9IHJhdGVzW2ldICogNTAwMDAwOwotCXJhbmdlLT5udW1fYml0cmF0ZXMgPSBpOwotCWxic19kZWJfd2V4dCgiSVdfTUFYX0JJVFJBVEVTICVkLCBudW1fYml0cmF0ZXMgJWRcbiIsIElXX01BWF9CSVRSQVRFUywKLQkgICAgICAgcmFuZ2UtPm51bV9iaXRyYXRlcyk7Ci0KLQlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IDA7Ci0KLQlyYW5nZS0+c2Nhbl9jYXBhID0gSVdfU0NBTl9DQVBBX0VTU0lEOwotCi0JZm9yIChqID0gMDsgKHJhbmdlLT5udW1fZnJlcXVlbmN5IDwgSVdfTUFYX0ZSRVFVRU5DSUVTKQotCSAgICAgJiYgKGogPCBBUlJBWV9TSVpFKHByaXYtPnJlZ2lvbl9jaGFubmVsKSk7IGorKykgewotCQljZnAgPSBwcml2LT5yZWdpb25fY2hhbm5lbFtqXS5DRlA7Ci0JCWZvciAoaSA9IDA7IChyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA8IElXX01BWF9GUkVRVUVOQ0lFUykKLQkJICAgICAmJiBwcml2LT5yZWdpb25fY2hhbm5lbFtqXS52YWxpZAotCQkgICAgICYmIGNmcAotCQkgICAgICYmIChpIDwgcHJpdi0+cmVnaW9uX2NoYW5uZWxbal0ubnJjZnApOyBpKyspIHsKLQkJCXJhbmdlLT5mcmVxW3JhbmdlLT5udW1fZnJlcXVlbmN5XS5pID0KLQkJCSAgICAobG9uZyljZnAtPmNoYW5uZWw7Ci0JCQlyYW5nZS0+ZnJlcVtyYW5nZS0+bnVtX2ZyZXF1ZW5jeV0ubSA9Ci0JCQkgICAgKGxvbmcpY2ZwLT5mcmVxICogMTAwMDAwOwotCQkJcmFuZ2UtPmZyZXFbcmFuZ2UtPm51bV9mcmVxdWVuY3ldLmUgPSAxOwotCQkJY2ZwKys7Ci0JCQlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSsrOwotCQl9Ci0JfQotCi0JbGJzX2RlYl93ZXh0KCJJV19NQVhfRlJFUVVFTkNJRVMgJWQsIG51bV9mcmVxdWVuY3kgJWRcbiIsCi0JICAgICAgIElXX01BWF9GUkVRVUVOQ0lFUywgcmFuZ2UtPm51bV9mcmVxdWVuY3kpOwotCi0JcmFuZ2UtPm51bV9jaGFubmVscyA9IHJhbmdlLT5udW1fZnJlcXVlbmN5OwotCi0Jc29ydF9jaGFubmVscygmcmFuZ2UtPmZyZXFbMF0sIHJhbmdlLT5udW1fZnJlcXVlbmN5KTsKLQotCS8qCi0JICogU2V0IGFuIGluZGljYXRpb24gb2YgdGhlIG1heCBUQ1AgdGhyb3VnaHB1dCBpbiBiaXQvcyB0aGF0IHdlIGNhbgotCSAqIGV4cGVjdCB1c2luZyB0aGlzIGludGVyZmFjZQotCSAqLwotCWlmIChpID4gMikKLQkJcmFuZ2UtPnRocm91Z2hwdXQgPSA1MDAwICogMTAwMDsKLQllbHNlCi0JCXJhbmdlLT50aHJvdWdocHV0ID0gMTUwMCAqIDEwMDA7Ci0KLQlyYW5nZS0+bWluX3J0cyA9IE1SVkRSVl9SVFNfTUlOX1ZBTFVFOwotCXJhbmdlLT5tYXhfcnRzID0gTVJWRFJWX1JUU19NQVhfVkFMVUU7Ci0JcmFuZ2UtPm1pbl9mcmFnID0gTVJWRFJWX0ZSQUdfTUlOX1ZBTFVFOwotCXJhbmdlLT5tYXhfZnJhZyA9IE1SVkRSVl9GUkFHX01BWF9WQUxVRTsKLQotCXJhbmdlLT5lbmNvZGluZ19zaXplWzBdID0gNTsKLQlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVsxXSA9IDEzOwotCXJhbmdlLT5udW1fZW5jb2Rpbmdfc2l6ZXMgPSAyOwotCXJhbmdlLT5tYXhfZW5jb2RpbmdfdG9rZW5zID0gNDsKLQotCS8qCi0JICogUmlnaHQgbm93IHdlIHN1cHBvcnQgb25seSAiaXdjb25maWcgZXRoWCBwb3dlciBvbnxvZmYiCi0JICovCi0JcmFuZ2UtPnBtX2NhcGEgPSBJV19QT1dFUl9PTjsKLQotCS8qCi0JICogTWluaW11bSB2ZXJzaW9uIHdlIHJlY29tbWVuZAotCSAqLwotCXJhbmdlLT53ZV92ZXJzaW9uX3NvdXJjZSA9IDE1OwotCi0JLyoKLQkgKiBWZXJzaW9uIHdlIGFyZSBjb21waWxlZCB3aXRoCi0JICovCi0JcmFuZ2UtPndlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7Ci0KLQlyYW5nZS0+cmV0cnlfY2FwYSA9IElXX1JFVFJZX0xJTUlUOwotCXJhbmdlLT5yZXRyeV9mbGFncyA9IElXX1JFVFJZX0xJTUlUIHwgSVdfUkVUUllfTUFYOwotCi0JcmFuZ2UtPm1pbl9yZXRyeSA9IFRYX1JFVFJZX01JTjsKLQlyYW5nZS0+bWF4X3JldHJ5ID0gVFhfUkVUUllfTUFYOwotCi0JLyoKLQkgKiBTZXQgdGhlIHF1YWwsIGxldmVsIGFuZCBub2lzZSByYW5nZSB2YWx1ZXMKLQkgKi8KLQlyYW5nZS0+bWF4X3F1YWwucXVhbCA9IDEwMDsKLQlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAwOwotCXJhbmdlLT5tYXhfcXVhbC5ub2lzZSA9IDA7Ci0JcmFuZ2UtPm1heF9xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX0FMTF9VUERBVEVEIHwgSVdfUVVBTF9EQk07Ci0KLQlyYW5nZS0+YXZnX3F1YWwucXVhbCA9IDcwOwotCS8qIFRPRE86IEZpbmQgcmVhbCAnZ29vZCcgdG8gJ2JhZCcgdGhyZXNob2xkIHZhbHVlIGZvciBSU1NJICovCi0JcmFuZ2UtPmF2Z19xdWFsLmxldmVsID0gMDsKLQlyYW5nZS0+YXZnX3F1YWwubm9pc2UgPSAwOwotCXJhbmdlLT5hdmdfcXVhbC51cGRhdGVkID0gSVdfUVVBTF9BTExfVVBEQVRFRCB8IElXX1FVQUxfREJNOwotCi0JcmFuZ2UtPnNlbnNpdGl2aXR5ID0gMDsKLQotCS8qIFNldHVwIHRoZSBzdXBwb3J0ZWQgcG93ZXIgbGV2ZWwgcmFuZ2VzICovCi0JbWVtc2V0KHJhbmdlLT50eHBvd2VyLCAwLCBzaXplb2YocmFuZ2UtPnR4cG93ZXIpKTsKLQlyYW5nZS0+dHhwb3dlcl9jYXBhID0gSVdfVFhQT1dfREJNIHwgSVdfVFhQT1dfUkFOR0U7Ci0JcmFuZ2UtPnR4cG93ZXJbMF0gPSBwcml2LT50eHBvd2VyX21pbjsKLQlyYW5nZS0+dHhwb3dlclsxXSA9IHByaXYtPnR4cG93ZXJfbWF4OwotCXJhbmdlLT5udW1fdHhwb3dlciA9IDI7Ci0KLQlyYW5nZS0+ZXZlbnRfY2FwYVswXSA9IChJV19FVkVOVF9DQVBBX0tfMCB8Ci0JCQkJSVdfRVZFTlRfQ0FQQV9NQVNLKFNJT0NHSVdBUCkgfAotCQkJCUlXX0VWRU5UX0NBUEFfTUFTSyhTSU9DR0lXU0NBTikpOwotCXJhbmdlLT5ldmVudF9jYXBhWzFdID0gSVdfRVZFTlRfQ0FQQV9LXzE7Ci0KLQlpZiAocHJpdi0+ZndjYXBpbmZvICYgRldfQ0FQSU5GT19XUEEpIHsKLQkJcmFuZ2UtPmVuY19jYXBhID0gICBJV19FTkNfQ0FQQV9XUEEKLQkJICAgICAgICAgICAgICAgICAgfCBJV19FTkNfQ0FQQV9XUEEyCi0JCSAgICAgICAgICAgICAgICAgIHwgSVdfRU5DX0NBUEFfQ0lQSEVSX1RLSVAKLQkJICAgICAgICAgICAgICAgICAgfCBJV19FTkNfQ0FQQV9DSVBIRVJfQ0NNUDsKLQl9Ci0KLQlsYnNfZGViX2xlYXZlKExCU19ERUJfV0VYVCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbGJzX3NldF9wb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKLQlpbnQgcmV0ID0gMDsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsKLQotCWlmICghKHByaXYtPmZ3Y2FwaW5mbyAmIEZXX0NBUElORk9fUFMpKSB7Ci0JCWlmICh2d3JxLT5kaXNhYmxlZCkKLQkJCXJldHVybiAwOwotCQllbHNlCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBQUyBpcyBjdXJyZW50bHkgc3VwcG9ydGVkIG9ubHkgaW4gSW5mcmFzdHJ1Y3R1cmUgbW9kZQotCSAqIFJlbW92ZSB0aGlzIGNoZWNrIGlmIGl0IGlzIHRvIGJlIHN1cHBvcnRlZCBpbiBJQlNTIG1vZGUgYWxzbwotCSAqLwotCi0JaWYgKHZ3cnEtPmRpc2FibGVkKSB7Ci0JCXByaXYtPnBzbW9kZSA9IExCUzgwMl8xMVBPV0VSTU9ERUNBTTsKLQkJaWYgKHByaXYtPnBzc3RhdGUgIT0gUFNfU1RBVEVfRlVMTF9QT1dFUikgewotCQkJbGJzX3BzX3dha2V1cChwcml2LCBDTURfT1BUSU9OX1dBSVRGT1JSU1ApOwotCQl9Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKCh2d3JxLT5mbGFncyAmIElXX1BPV0VSX1RZUEUpID09IElXX1BPV0VSX1RJTUVPVVQpIHsKLQkJbGJzX2RlYl93ZXh0KAotCQkgICAgICAgInNldHRpbmcgcG93ZXIgdGltZW91dCBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlIGlmICgodndycS0+ZmxhZ3MgJiBJV19QT1dFUl9UWVBFKSA9PSBJV19QT1dFUl9QRVJJT0QpIHsKLQkJdndycS0+dmFsdWUgPSB2d3JxLT52YWx1ZSAvIDEwMDA7Ci0JCWlmICghcHJpdi0+ZW50ZXJfZGVlcF9zbGVlcCkgewotCQkJbGJzX3ByX2VycigiZGVlcCBzbGVlcCBmZWF0dXJlIGlzIG5vdCBpbXBsZW1lbnRlZCAiCi0JCQkJCSJmb3IgdGhpcyBpbnRlcmZhY2UgZHJpdmVyXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJaWYgKHByaXYtPmNvbm5lY3Rfc3RhdHVzID09IExCU19DT05ORUNURUQpIHsKLQkJCWlmICgocHJpdi0+aXNfYXV0b19kZWVwX3NsZWVwX2VuYWJsZWQpICYmCi0JCQkJCQkodndycS0+dmFsdWUgPT0gLTEwMDApKSB7Ci0JCQkJbGJzX2V4aXRfYXV0b19kZWVwX3NsZWVwKHByaXYpOwotCQkJCXJldHVybiAwOwotCQkJfSBlbHNlIHsKLQkJCQlsYnNfcHJfZXJyKCJjYW4ndCB1c2UgZGVlcCBzbGVlcCBjbWQgaW4gIgotCQkJCQkJImNvbm5lY3RlZCBzdGF0ZVxuIik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoKHZ3cnEtPnZhbHVlIDwgMCkgJiYgKHZ3cnEtPnZhbHVlICE9IC0xMDAwKSkgewotCQkJbGJzX3ByX2VycigidW5rbm93biBvcHRpb25cbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlpZiAodndycS0+dmFsdWUgPiAwKSB7Ci0JCQlpZiAoIXByaXYtPmlzX2F1dG9fZGVlcF9zbGVlcF9lbmFibGVkKSB7Ci0JCQkJcHJpdi0+aXNfYWN0aXZpdHlfZGV0ZWN0ZWQgPSAwOwotCQkJCXByaXYtPmF1dG9fZGVlcF9zbGVlcF90aW1lb3V0ID0gdndycS0+dmFsdWU7Ci0JCQkJbGJzX2VudGVyX2F1dG9fZGVlcF9zbGVlcChwcml2KTsKLQkJCX0gZWxzZSB7Ci0JCQkJcHJpdi0+YXV0b19kZWVwX3NsZWVwX3RpbWVvdXQgPSB2d3JxLT52YWx1ZTsKLQkJCQlsYnNfZGViX2RlYnVnZnMoImF1dG8gZGVlcCBzbGVlcDogIgotCQkJCQkJImFscmVhZHkgZW5hYmxlZFxuIik7Ci0JCQl9Ci0JCQlyZXR1cm4gMDsKLQkJfSBlbHNlIHsKLQkJCWlmIChwcml2LT5pc19hdXRvX2RlZXBfc2xlZXBfZW5hYmxlZCkgewotCQkJCWxic19leGl0X2F1dG9fZGVlcF9zbGVlcChwcml2KTsKLQkJCQkvKiBUcnkgdG8gZXhpdCBkZWVwIHNsZWVwIGlmIGF1dG8gKi8KLQkJCQkvKmRlZXAgc2xlZXAgZGlzYWJsZWQgKi8KLQkJCQlyZXQgPSBsYnNfc2V0X2RlZXBfc2xlZXAocHJpdiwgMCk7Ci0JCQl9Ci0JCQlpZiAodndycS0+dmFsdWUgPT0gMCkKLQkJCQlyZXQgPSBsYnNfc2V0X2RlZXBfc2xlZXAocHJpdiwgMSk7Ci0JCQllbHNlIGlmICh2d3JxLT52YWx1ZSA9PSAtMTAwMCkKLQkJCQlyZXQgPSBsYnNfc2V0X2RlZXBfc2xlZXAocHJpdiwgMCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0JaWYgKHByaXYtPnBzbW9kZSAhPSBMQlM4MDJfMTFQT1dFUk1PREVDQU0pIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcHJpdi0+cHNtb2RlID0gTEJTODAyXzExUE9XRVJNT0RFTUFYX1BTUDsKLQotCWlmIChwcml2LT5jb25uZWN0X3N0YXR1cyA9PSBMQlNfQ09OTkVDVEVEKSB7Ci0JCWxic19wc19zbGVlcChwcml2LCBDTURfT1BUSU9OX1dBSVRGT1JSU1ApOwotCX0KLQotCWxic19kZWJfbGVhdmUoTEJTX0RFQl9XRVhUKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGxic19nZXRfcG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7Ci0KLQl2d3JxLT52YWx1ZSA9IDA7Ci0JdndycS0+ZmxhZ3MgPSAwOwotCXZ3cnEtPmRpc2FibGVkID0gcHJpdi0+cHNtb2RlID09IExCUzgwMl8xMVBPV0VSTU9ERUNBTQotCQl8fCBwcml2LT5jb25uZWN0X3N0YXR1cyA9PSBMQlNfRElTQ09OTkVDVEVEOwotCi0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX1dFWFQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGl3X3N0YXRpc3RpY3MgKmxic19nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQllbnVtIHsKLQkJUE9PUiA9IDMwLAotCQlGQUlSID0gNjAsCi0JCUdPT0QgPSA4MCwKLQkJVkVSWV9HT09EID0gOTAsCi0JCUVYQ0VMTEVOVCA9IDk1LAotCQlQRVJGRUNUID0gMTAwCi0JfTsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7Ci0JdTMyIHJzc2lfcXVhbDsKLQl1MzIgdHhfcXVhbDsKLQl1MzIgcXVhbGl0eSA9IDA7Ci0JaW50IHJldCwgc3RhdHNfdmFsaWQgPSAwOwotCXU4IHJzc2k7Ci0JdTMyIHR4X3JldHJpZXM7Ci0Jc3RydWN0IGNtZF9kc184MDJfMTFfZ2V0X2xvZyBsb2c7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7Ci0KLQlwcml2LT53c3RhdHMuc3RhdHVzID0gcHJpdi0+bW9kZTsKLQotCS8qIElmIHdlJ3JlIG5vdCBhc3NvY2lhdGVkLCBhbGwgcXVhbGl0eSB2YWx1ZXMgYXJlIG1lYW5pbmdsZXNzICovCi0JaWYgKChwcml2LT5jb25uZWN0X3N0YXR1cyAhPSBMQlNfQ09OTkVDVEVEKSAmJgotCSAgICAhbGJzX21lc2hfY29ubmVjdGVkKHByaXYpKQotCQlnb3RvIG91dDsKLQotCS8qIFF1YWxpdHkgYnkgUlNTSSAqLwotCXByaXYtPndzdGF0cy5xdWFsLmxldmVsID0KLQkgICAgQ0FMX1JTU0kocHJpdi0+U05SW1RZUEVfQkVBQ09OXVtUWVBFX05PQVZHXSwKLQkgICAgIHByaXYtPk5GW1RZUEVfQkVBQ09OXVtUWVBFX05PQVZHXSk7Ci0KLQlpZiAocHJpdi0+TkZbVFlQRV9CRUFDT05dW1RZUEVfTk9BVkddID09IDApIHsKLQkJcHJpdi0+d3N0YXRzLnF1YWwubm9pc2UgPSBNUlZEUlZfTkZfREVGQVVMVF9TQ0FOX1ZBTFVFOwotCX0gZWxzZSB7Ci0JCXByaXYtPndzdGF0cy5xdWFsLm5vaXNlID0KLQkJICAgIENBTF9ORihwcml2LT5ORltUWVBFX0JFQUNPTl1bVFlQRV9OT0FWR10pOwotCX0KLQotCWxic19kZWJfd2V4dCgic2lnbmFsIGxldmVsICUjeFxuIiwgcHJpdi0+d3N0YXRzLnF1YWwubGV2ZWwpOwotCWxic19kZWJfd2V4dCgibm9pc2UgJSN4XG4iLCBwcml2LT53c3RhdHMucXVhbC5ub2lzZSk7Ci0KLQlyc3NpID0gcHJpdi0+d3N0YXRzLnF1YWwubGV2ZWwgLSBwcml2LT53c3RhdHMucXVhbC5ub2lzZTsKLQlpZiAocnNzaSA8IDE1KQotCQlyc3NpX3F1YWwgPSByc3NpICogUE9PUiAvIDEwOwotCWVsc2UgaWYgKHJzc2kgPCAyMCkKLQkJcnNzaV9xdWFsID0gKHJzc2kgLSAxNSkgKiAoRkFJUiAtIFBPT1IpIC8gNSArIFBPT1I7Ci0JZWxzZSBpZiAocnNzaSA8IDMwKQotCQlyc3NpX3F1YWwgPSAocnNzaSAtIDIwKSAqIChHT09EIC0gRkFJUikgLyA1ICsgRkFJUjsKLQllbHNlIGlmIChyc3NpIDwgNDApCi0JCXJzc2lfcXVhbCA9IChyc3NpIC0gMzApICogKFZFUllfR09PRCAtIEdPT0QpIC8KLQkJICAgIDEwICsgR09PRDsKLQllbHNlCi0JCXJzc2lfcXVhbCA9IChyc3NpIC0gNDApICogKFBFUkZFQ1QgLSBWRVJZX0dPT0QpIC8KLQkJICAgIDEwICsgVkVSWV9HT09EOwotCXF1YWxpdHkgPSByc3NpX3F1YWw7Ci0KLQkvKiBRdWFsaXR5IGJ5IFRYIGVycm9ycyAqLwotCXByaXYtPndzdGF0cy5kaXNjYXJkLnJldHJpZXMgPSBkZXYtPnN0YXRzLnR4X2Vycm9yczsKLQotCW1lbXNldCgmbG9nLCAwLCBzaXplb2YobG9nKSk7Ci0JbG9nLmhkci5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGxvZykpOwotCXJldCA9IGxic19jbWRfd2l0aF9yZXNwb25zZShwcml2LCBDTURfODAyXzExX0dFVF9MT0csICZsb2cpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0JdHhfcmV0cmllcyA9IGxlMzJfdG9fY3B1KGxvZy5yZXRyeSk7Ci0KLQlpZiAodHhfcmV0cmllcyA+IDc1KQotCQl0eF9xdWFsID0gKDkwIC0gdHhfcmV0cmllcykgKiBQT09SIC8gMTU7Ci0JZWxzZSBpZiAodHhfcmV0cmllcyA+IDcwKQotCQl0eF9xdWFsID0gKDc1IC0gdHhfcmV0cmllcykgKiAoRkFJUiAtIFBPT1IpIC8gNSArIFBPT1I7Ci0JZWxzZSBpZiAodHhfcmV0cmllcyA+IDY1KQotCQl0eF9xdWFsID0gKDcwIC0gdHhfcmV0cmllcykgKiAoR09PRCAtIEZBSVIpIC8gNSArIEZBSVI7Ci0JZWxzZSBpZiAodHhfcmV0cmllcyA+IDUwKQotCQl0eF9xdWFsID0gKDY1IC0gdHhfcmV0cmllcykgKiAoVkVSWV9HT09EIC0gR09PRCkgLwotCQkgICAgMTUgKyBHT09EOwotCWVsc2UKLQkJdHhfcXVhbCA9ICg1MCAtIHR4X3JldHJpZXMpICoKLQkJICAgIChQRVJGRUNUIC0gVkVSWV9HT09EKSAvIDUwICsgVkVSWV9HT09EOwotCXF1YWxpdHkgPSBtaW4ocXVhbGl0eSwgdHhfcXVhbCk7Ci0KLQlwcml2LT53c3RhdHMuZGlzY2FyZC5jb2RlID0gbGUzMl90b19jcHUobG9nLndlcHVuZGVjcnlwdGFibGUpOwotCXByaXYtPndzdGF0cy5kaXNjYXJkLnJldHJpZXMgPSB0eF9yZXRyaWVzOwotCXByaXYtPndzdGF0cy5kaXNjYXJkLm1pc2MgPSBsZTMyX3RvX2NwdShsb2cuYWNrZmFpbHVyZSk7Ci0KLQkvKiBDYWxjdWxhdGUgcXVhbGl0eSAqLwotCXByaXYtPndzdGF0cy5xdWFsLnF1YWwgPSBtaW5fdCh1OCwgcXVhbGl0eSwgMTAwKTsKLQlwcml2LT53c3RhdHMucXVhbC51cGRhdGVkID0gSVdfUVVBTF9BTExfVVBEQVRFRCB8IElXX1FVQUxfREJNOwotCXN0YXRzX3ZhbGlkID0gMTsKLQotCS8qIHVwZGF0ZSBzdGF0cyBhc3luY2hyb25vdXNseSBmb3IgZnV0dXJlIGNhbGxzICovCi0JcmV0ID0gbGJzX3ByZXBhcmVfYW5kX3NlbmRfY29tbWFuZChwcml2LCBDTURfODAyXzExX1JTU0ksIDAsCi0JCQkJCTAsIDAsIE5VTEwpOwotCWlmIChyZXQpCi0JCWxic19wcl9lcnIoIlJTU0kgY29tbWFuZCBmYWlsZWRcbiIpOwotb3V0OgotCWlmICghc3RhdHNfdmFsaWQpIHsKLQkJcHJpdi0+d3N0YXRzLm1pc3MuYmVhY29uID0gMDsKLQkJcHJpdi0+d3N0YXRzLmRpc2NhcmQucmV0cmllcyA9IDA7Ci0JCXByaXYtPndzdGF0cy5xdWFsLnF1YWwgPSAwOwotCQlwcml2LT53c3RhdHMucXVhbC5sZXZlbCA9IDA7Ci0JCXByaXYtPndzdGF0cy5xdWFsLm5vaXNlID0gMDsKLQkJcHJpdi0+d3N0YXRzLnF1YWwudXBkYXRlZCA9IElXX1FVQUxfQUxMX1VQREFURUQ7Ci0JCXByaXYtPndzdGF0cy5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9OT0lTRV9JTlZBTElEIHwKLQkJICAgIElXX1FVQUxfUVVBTF9JTlZBTElEIHwgSVdfUVVBTF9MRVZFTF9JTlZBTElEOwotCX0KLQotCWxic19kZWJfbGVhdmUoTEJTX0RFQl9XRVhUKTsKLQlyZXR1cm4gJnByaXYtPndzdGF0czsKLQotCi19Ci0KLXN0YXRpYyBpbnQgbGJzX3NldF9mcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCSAgc3RydWN0IGl3X2ZyZXEgKmZ3cnEsIGNoYXIgKmV4dHJhKQotewotCWludCByZXQgPSAtRUlOVkFMOwotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKLQlzdHJ1Y3QgY2hhbl9mcmVxX3Bvd2VyICpjZnA7Ci0Jc3RydWN0IGFzc29jX3JlcXVlc3QgKiBhc3NvY19yZXE7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7Ci0KLQltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKLQlhc3NvY19yZXEgPSBsYnNfZ2V0X2Fzc29jaWF0aW9uX3JlcXVlc3QocHJpdik7Ci0JaWYgKCFhc3NvY19yZXEpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogSWYgc2V0dGluZyBieSBmcmVxdWVuY3ksIGNvbnZlcnQgdG8gYSBjaGFubmVsICovCi0JaWYgKGZ3cnEtPmUgPT0gMSkgewotCQlsb25nIGYgPSBmd3JxLT5tIC8gMTAwMDAwOwotCi0JCWNmcCA9IGZpbmRfY2ZwX2J5X2JhbmRfYW5kX2ZyZXEocHJpdiwgMCwgZik7Ci0JCWlmICghY2ZwKSB7Ci0JCQlsYnNfZGViX3dleHQoImludmFsaWQgZnJlcSAlbGRcbiIsIGYpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlmd3JxLT5lID0gMDsKLQkJZndycS0+bSA9IChpbnQpIGNmcC0+Y2hhbm5lbDsKLQl9Ci0KLQkvKiBTZXR0aW5nIGJ5IGNoYW5uZWwgbnVtYmVyICovCi0JaWYgKGZ3cnEtPm0gPiAxMDAwIHx8IGZ3cnEtPmUgPiAwKSB7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWNmcCA9IGxic19maW5kX2NmcF9ieV9iYW5kX2FuZF9jaGFubmVsKHByaXYsIDAsIGZ3cnEtPm0pOwotCWlmICghY2ZwKSB7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWFzc29jX3JlcS0+Y2hhbm5lbCA9IGZ3cnEtPm07Ci0JcmV0ID0gMDsKLQotb3V0OgotCWlmIChyZXQgPT0gMCkgewotCQlzZXRfYml0KEFTU09DX0ZMQUdfQ0hBTk5FTCwgJmFzc29jX3JlcS0+ZmxhZ3MpOwotCQlsYnNfcG9zdHBvbmVfYXNzb2NpYXRpb25fd29yayhwcml2KTsKLQl9IGVsc2UgewotCQlsYnNfY2FuY2VsX2Fzc29jaWF0aW9uX3dvcmsocHJpdik7Ci0JfQotCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7Ci0KLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9XRVhULCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi0jaWZkZWYgQ09ORklHX0xJQkVSVEFTX01FU0gKLXN0YXRpYyBpbnQgbGJzX21lc2hfc2V0X2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgc3RydWN0IGl3X2ZyZXEgKmZ3cnEsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKLQlzdHJ1Y3QgY2hhbl9mcmVxX3Bvd2VyICpjZnA7Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7Ci0KLQkvKiBJZiBzZXR0aW5nIGJ5IGZyZXF1ZW5jeSwgY29udmVydCB0byBhIGNoYW5uZWwgKi8KLQlpZiAoZndycS0+ZSA9PSAxKSB7Ci0JCWxvbmcgZiA9IGZ3cnEtPm0gLyAxMDAwMDA7Ci0KLQkJY2ZwID0gZmluZF9jZnBfYnlfYmFuZF9hbmRfZnJlcShwcml2LCAwLCBmKTsKLQkJaWYgKCFjZnApIHsKLQkJCWxic19kZWJfd2V4dCgiaW52YWxpZCBmcmVxICVsZFxuIiwgZik7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCWZ3cnEtPmUgPSAwOwotCQlmd3JxLT5tID0gKGludCkgY2ZwLT5jaGFubmVsOwotCX0KLQotCS8qIFNldHRpbmcgYnkgY2hhbm5lbCBudW1iZXIgKi8KLQlpZiAoZndycS0+bSA+IDEwMDAgfHwgZndycS0+ZSA+IDApIHsKLQkJZ290byBvdXQ7Ci0JfQotCi0JY2ZwID0gbGJzX2ZpbmRfY2ZwX2J5X2JhbmRfYW5kX2NoYW5uZWwocHJpdiwgMCwgZndycS0+bSk7Ci0JaWYgKCFjZnApIHsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGZ3cnEtPm0gIT0gcHJpdi0+Y2hhbm5lbCkgewotCQlsYnNfZGViX3dleHQoIm1lc2ggY2hhbm5lbCBjaGFuZ2UgZm9yY2VzIGV0aCBkaXNjb25uZWN0XG4iKTsKLQkJaWYgKHByaXYtPm1vZGUgPT0gSVdfTU9ERV9JTkZSQSkKLQkJCWxic19jbWRfODAyMTFfZGVhdXRoZW50aWNhdGUocHJpdiwKLQkJCQkJCSAgICAgcHJpdi0+Y3VyYnNzcGFyYW1zLmJzc2lkLAotCQkJCQkJICAgICBXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORyk7Ci0JCWVsc2UgaWYgKHByaXYtPm1vZGUgPT0gSVdfTU9ERV9BREhPQykKLQkJCWxic19hZGhvY19zdG9wKHByaXYpOwotCX0KLQlsYnNfbWVzaF9jb25maWcocHJpdiwgQ01EX0FDVF9NRVNIX0NPTkZJR19TVEFSVCwgZndycS0+bSk7Ci0JbGJzX3VwZGF0ZV9jaGFubmVsKHByaXYpOwotCXJldCA9IDA7Ci0KLW91dDoKLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9XRVhULCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgbGJzX3NldF9yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCSAgc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7Ci0JdTggbmV3X3JhdGUgPSAwOwotCWludCByZXQgPSAtRUlOVkFMOwotCXU4IHJhdGVzW01BWF9SQVRFUyArIDFdOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOwotCi0JbGJzX2RlYl93ZXh0KCJ2d3JxLT52YWx1ZSAlZFxuIiwgdndycS0+dmFsdWUpOwotCWxic19kZWJfd2V4dCgidndycS0+Zml4ZWQgJWRcbiIsIHZ3cnEtPmZpeGVkKTsKLQotCWlmICh2d3JxLT5maXhlZCAmJiB2d3JxLT52YWx1ZSA9PSAtMSkKLQkJZ290byBvdXQ7Ci0KLQkvKiBBdXRvIHJhdGU/ICovCi0JcHJpdi0+ZW5hYmxlaHdhdXRvID0gIXZ3cnEtPmZpeGVkOwotCi0JaWYgKHZ3cnEtPnZhbHVlID09IC0xKQotCQlwcml2LT5jdXJfcmF0ZSA9IDA7Ci0JZWxzZSB7Ci0JCWlmICh2d3JxLT52YWx1ZSAlIDEwMDAwMCkKLQkJCWdvdG8gb3V0OwotCi0JCW5ld19yYXRlID0gdndycS0+dmFsdWUgLyA1MDAwMDA7Ci0JCXByaXYtPmN1cl9yYXRlID0gbmV3X3JhdGU7Ci0JCS8qIHRoZSByZXN0IGlzIG9ubHkgbmVlZGVkIGZvciBsYnNfc2V0X2RhdGFfcmF0ZSgpICovCi0JCW1lbXNldChyYXRlcywgMCwgc2l6ZW9mKHJhdGVzKSk7Ci0JCWNvcHlfYWN0aXZlX2RhdGFfcmF0ZXMocHJpdiwgcmF0ZXMpOwotCQlpZiAoIW1lbWNocihyYXRlcywgbmV3X3JhdGUsIHNpemVvZihyYXRlcykpKSB7Ci0JCQlsYnNfcHJfYWxlcnQoImZpeGVkIGRhdGEgcmF0ZSAweCVYIG91dCBvZiByYW5nZVxuIiwKLQkJCQluZXdfcmF0ZSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlpZiAocHJpdi0+ZndyZWxlYXNlIDwgMHgwOTAwMDAwMCkgewotCQkJcmV0ID0gbGJzX3NldF9wb3dlcl9hZGFwdF9jZmcocHJpdiwgMCwKLQkJCQkJUE9XX0FEQVBUX0RFRkFVTFRfUDAsCi0JCQkJCVBPV19BREFQVF9ERUZBVUxUX1AxLAotCQkJCQlQT1dfQURBUFRfREVGQVVMVF9QMik7Ci0JCQlpZiAocmV0KQotCQkJCWdvdG8gb3V0OwotCQl9Ci0JCXJldCA9IGxic19zZXRfdHBjX2NmZyhwcml2LCAwLCBUUENfREVGQVVMVF9QMCwgVFBDX0RFRkFVTFRfUDEsCi0JCQkJVFBDX0RFRkFVTFRfUDIsIDEpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0JfQotCi0JLyogVHJ5IHRoZSBuZXdlciBjb21tYW5kIGZpcnN0IChGaXJtd2FyZSBTcGVjIDUuMSBhbmQgYWJvdmUpICovCi0JcmV0ID0gbGJzX2NtZF84MDJfMTFfcmF0ZV9hZGFwdF9yYXRlc2V0KHByaXYsIENNRF9BQ1RfU0VUKTsKLQotCS8qIEZhbGxiYWNrIHRvIG9sZGVyIHZlcnNpb24gKi8KLQlpZiAocmV0KQotCQlyZXQgPSBsYnNfc2V0X2RhdGFfcmF0ZShwcml2LCBuZXdfcmF0ZSk7Ci0KLW91dDoKLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9XRVhULCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGxic19nZXRfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkgIHN0cnVjdCBpd19wYXJhbSAqdndycSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOwotCi0JaWYgKHByaXYtPmNvbm5lY3Rfc3RhdHVzID09IExCU19DT05ORUNURUQpIHsKLQkJdndycS0+dmFsdWUgPSBwcml2LT5jdXJfcmF0ZSAqIDUwMDAwMDsKLQotCQlpZiAocHJpdi0+ZW5hYmxlaHdhdXRvKQotCQkJdndycS0+Zml4ZWQgPSAwOwotCQllbHNlCi0JCQl2d3JxLT5maXhlZCA9IDE7Ci0KLQl9IGVsc2UgewotCQl2d3JxLT5maXhlZCA9IDA7Ci0JCXZ3cnEtPnZhbHVlID0gMDsKLQl9Ci0KLQlsYnNfZGViX2xlYXZlKExCU19ERUJfV0VYVCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbGJzX3NldF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgdTMyICogdXdycSwgY2hhciAqZXh0cmEpCi17Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwotCXN0cnVjdCBhc3NvY19yZXF1ZXN0ICogYXNzb2NfcmVxOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOwotCi0JaWYgKCAgICgqdXdycSAhPSBJV19NT0RFX0FESE9DKQotCSAgICAmJiAoKnV3cnEgIT0gSVdfTU9ERV9JTkZSQSkKLQkgICAgJiYgKCp1d3JxICE9IElXX01PREVfQVVUTykpIHsKLQkJbGJzX2RlYl93ZXh0KCJJbnZhbGlkIG1vZGU6IDB4JXhcbiIsICp1d3JxKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7Ci0JYXNzb2NfcmVxID0gbGJzX2dldF9hc3NvY2lhdGlvbl9yZXF1ZXN0KHByaXYpOwotCWlmICghYXNzb2NfcmVxKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWxic19jYW5jZWxfYXNzb2NpYXRpb25fd29yayhwcml2KTsKLQl9IGVsc2UgewotCQlhc3NvY19yZXEtPm1vZGUgPSAqdXdycTsKLQkJc2V0X2JpdChBU1NPQ19GTEFHX01PREUsICZhc3NvY19yZXEtPmZsYWdzKTsKLQkJbGJzX3Bvc3Rwb25lX2Fzc29jaWF0aW9uX3dvcmsocHJpdik7Ci0JCWxic19kZWJfd2V4dCgiU3dpdGNoaW5nIHRvIG1vZGU6IDB4JXhcbiIsICp1d3JxKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKLQotb3V0OgotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1dFWFQsICJyZXQgJWQiLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLQotLyoqCi0gKiAgQGJyaWVmIEdldCBFbmNyeXB0aW9uIGtleQotICoKLSAqICBAcGFyYW0gZGV2ICAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIG5ldF9kZXZpY2Ugc3RydWN0dXJlCi0gKiAgQHBhcmFtIGluZm8JCQlBIHBvaW50ZXIgdG8gaXdfcmVxdWVzdF9pbmZvIHN0cnVjdHVyZQotICogIEBwYXJhbSB2d3JxIAkJQSBwb2ludGVyIHRvIGl3X3BhcmFtIHN0cnVjdHVyZQotICogIEBwYXJhbSBleHRyYQkJQSBwb2ludGVyIHRvIGV4dHJhIGRhdGEgYnVmCi0gKiAgQHJldHVybiAJICAgCQkwIC0tc3VjY2Vzcywgb3RoZXJ3aXNlIGZhaWwKLSAqLwotc3RhdGljIGludCBsYnNfZ2V0X2VuY29kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgIHN0cnVjdCBpd19wb2ludCAqZHdycSwgdTggKiBleHRyYSkKLXsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7Ci0JaW50IGluZGV4ID0gKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7Ci0KLQlsYnNfZGViX3dleHQoImZsYWdzIDB4JXgsIGluZGV4ICVkLCBsZW5ndGggJWQsIHdlcF90eF9rZXlpZHggJWRcbiIsCi0JICAgICAgIGR3cnEtPmZsYWdzLCBpbmRleCwgZHdycS0+bGVuZ3RoLCBwcml2LT53ZXBfdHhfa2V5aWR4KTsKLQotCWR3cnEtPmZsYWdzID0gMDsKLQotCS8qIEF1dGhlbnRpY2F0aW9uIG1ldGhvZCAqLwotCXN3aXRjaCAocHJpdi0+c2VjaW5mby5hdXRoX21vZGUpIHsKLQljYXNlIElXX0FVVEhfQUxHX09QRU5fU1lTVEVNOgotCQlkd3JxLT5mbGFncyA9IElXX0VOQ09ERV9PUEVOOwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF9BTEdfU0hBUkVEX0tFWToKLQljYXNlIElXX0FVVEhfQUxHX0xFQVA6Ci0JCWR3cnEtPmZsYWdzID0gSVdfRU5DT0RFX1JFU1RSSUNURUQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWR3cnEtPmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEIHwgSVdfRU5DT0RFX09QRU47Ci0JCWJyZWFrOwotCX0KLQotCW1lbXNldChleHRyYSwgMCwgMTYpOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7Ci0KLQkvKiBEZWZhdWx0IHRvIHJldHVybmluZyBjdXJyZW50IHRyYW5zbWl0IGtleSAqLwotCWlmIChpbmRleCA8IDApCi0JCWluZGV4ID0gcHJpdi0+d2VwX3R4X2tleWlkeDsKLQotCWlmICgocHJpdi0+d2VwX2tleXNbaW5kZXhdLmxlbikgJiYgcHJpdi0+c2VjaW5mby53ZXBfZW5hYmxlZCkgewotCQltZW1jcHkoZXh0cmEsIHByaXYtPndlcF9rZXlzW2luZGV4XS5rZXksCi0JCSAgICAgICBwcml2LT53ZXBfa2V5c1tpbmRleF0ubGVuKTsKLQkJZHdycS0+bGVuZ3RoID0gcHJpdi0+d2VwX2tleXNbaW5kZXhdLmxlbjsKLQotCQlkd3JxLT5mbGFncyB8PSAoaW5kZXggKyAxKTsKLQkJLyogUmV0dXJuIFdFUCBlbmFibGVkICovCi0JCWR3cnEtPmZsYWdzICY9IH5JV19FTkNPREVfRElTQUJMRUQ7Ci0JfSBlbHNlIGlmICgocHJpdi0+c2VjaW5mby5XUEFlbmFibGVkKQotCQkgICB8fCAocHJpdi0+c2VjaW5mby5XUEEyZW5hYmxlZCkpIHsKLQkJLyogcmV0dXJuIFdQQSBlbmFibGVkICovCi0JCWR3cnEtPmZsYWdzICY9IH5JV19FTkNPREVfRElTQUJMRUQ7Ci0JCWR3cnEtPmZsYWdzIHw9IElXX0VOQ09ERV9OT0tFWTsKLQl9IGVsc2UgewotCQlkd3JxLT5mbGFncyB8PSBJV19FTkNPREVfRElTQUJMRUQ7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKLQotCWxic19kZWJfd2V4dCgia2V5OiAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCwga2V5bGVuICVkXG4iLAotCSAgICAgICBleHRyYVswXSwgZXh0cmFbMV0sIGV4dHJhWzJdLAotCSAgICAgICBleHRyYVszXSwgZXh0cmFbNF0sIGV4dHJhWzVdLCBkd3JxLT5sZW5ndGgpOwotCi0JbGJzX2RlYl93ZXh0KCJyZXR1cm4gZmxhZ3MgMHgleFxuIiwgZHdycS0+ZmxhZ3MpOwotCi0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX1dFWFQpOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqICBAYnJpZWYgU2V0IEVuY3J5cHRpb24ga2V5IChpbnRlcm5hbCkKLSAqCi0gKiAgQHBhcmFtIHByaXYJCQlBIHBvaW50ZXIgdG8gcHJpdmF0ZSBjYXJkIHN0cnVjdHVyZQotICogIEBwYXJhbSBrZXlfbWF0ZXJpYWwJCUEgcG9pbnRlciB0byBrZXkgbWF0ZXJpYWwKLSAqICBAcGFyYW0ga2V5X2xlbmd0aAkJbGVuZ3RoIG9mIGtleSBtYXRlcmlhbAotICogIEBwYXJhbSBpbmRleAkJa2V5IGluZGV4IHRvIHNldAotICogIEBwYXJhbSBzZXRfdHhfa2V5CQlGb3JjZSBzZXQgVFgga2V5ICgxID0geWVzLCAwID0gbm8pCi0gKiAgQHJldHVybiAJICAgCQkwIC0tc3VjY2Vzcywgb3RoZXJ3aXNlIGZhaWwKLSAqLwotc3RhdGljIGludCBsYnNfc2V0X3dlcF9rZXkoc3RydWN0IGFzc29jX3JlcXVlc3QgKmFzc29jX3JlcSwKLQkJCSAgICBjb25zdCBjaGFyICprZXlfbWF0ZXJpYWwsCi0JCQkgICAgdTE2IGtleV9sZW5ndGgsCi0JCQkgICAgdTE2IGluZGV4LAotCQkJICAgIGludCBzZXRfdHhfa2V5KQotewotCWludCByZXQgPSAwOwotCXN0cnVjdCBlbmNfa2V5ICpwa2V5OwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOwotCi0JLyogUGFyYW5vaWQgdmFsaWRhdGlvbiBvZiBrZXkgaW5kZXggKi8KLQlpZiAoaW5kZXggPiAzKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIHZhbGlkYXRlIG1heCBrZXkgbGVuZ3RoICovCi0JaWYgKGtleV9sZW5ndGggPiBLRVlfTEVOX1dFUF8xMDQpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcGtleSA9ICZhc3NvY19yZXEtPndlcF9rZXlzW2luZGV4XTsKLQotCWlmIChrZXlfbGVuZ3RoID4gMCkgewotCQltZW1zZXQocGtleSwgMCwgc2l6ZW9mKHN0cnVjdCBlbmNfa2V5KSk7Ci0JCXBrZXktPnR5cGUgPSBLRVlfVFlQRV9JRF9XRVA7Ci0KLQkJLyogU3RhbmRhcmRpemUgdGhlIGtleSBsZW5ndGggKi8KLQkJcGtleS0+bGVuID0gKGtleV9sZW5ndGggPiBLRVlfTEVOX1dFUF80MCkgPwotCQkgICAgICAgICAgICAgICAgS0VZX0xFTl9XRVBfMTA0IDogS0VZX0xFTl9XRVBfNDA7Ci0JCW1lbWNweShwa2V5LT5rZXksIGtleV9tYXRlcmlhbCwga2V5X2xlbmd0aCk7Ci0JfQotCi0JaWYgKHNldF90eF9rZXkpIHsKLQkJLyogRW5zdXJlIHRoZSBjaG9zZW4ga2V5IGlzIHZhbGlkICovCi0JCWlmICghcGtleS0+bGVuKSB7Ci0JCQlsYnNfZGViX3dleHQoImtleSBub3Qgc2V0LCBzbyBjYW5ub3QgZW5hYmxlIGl0XG4iKTsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlhc3NvY19yZXEtPndlcF90eF9rZXlpZHggPSBpbmRleDsKLQl9Ci0KLQlhc3NvY19yZXEtPnNlY2luZm8ud2VwX2VuYWJsZWQgPSAxOwotCi1vdXQ6Ci0JbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfV0VYVCwgInJldCAlZCIsIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB2YWxpZGF0ZV9rZXlfaW5kZXgodTE2IGRlZl9pbmRleCwgdTE2IHJhd19pbmRleCwKLQkJCSAgICAgIHUxNiAqb3V0X2luZGV4LCB1MTYgKmlzX2RlZmF1bHQpCi17Ci0JaWYgKCFvdXRfaW5kZXggfHwgIWlzX2RlZmF1bHQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogVmVyaWZ5IGluZGV4IGlmIHByZXNlbnQsIG90aGVyd2lzZSB1c2UgZGVmYXVsdCBUWCBrZXkgaW5kZXggKi8KLQlpZiAocmF3X2luZGV4ID4gMCkgewotCQlpZiAocmF3X2luZGV4ID4gNCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQkqb3V0X2luZGV4ID0gcmF3X2luZGV4IC0gMTsKLQl9IGVsc2UgewotCQkqb3V0X2luZGV4ID0gZGVmX2luZGV4OwotCQkqaXNfZGVmYXVsdCA9IDE7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBkaXNhYmxlX3dlcChzdHJ1Y3QgYXNzb2NfcmVxdWVzdCAqYXNzb2NfcmVxKQotewotCWludCBpOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOwotCi0JLyogU2V0IE9wZW4gU3lzdGVtIGF1dGggbW9kZSAqLwotCWFzc29jX3JlcS0+c2VjaW5mby5hdXRoX21vZGUgPSBJV19BVVRIX0FMR19PUEVOX1NZU1RFTTsKLQotCS8qIENsZWFyIFdFUCBrZXlzIGFuZCBtYXJrIFdFUCBhcyBkaXNhYmxlZCAqLwotCWFzc29jX3JlcS0+c2VjaW5mby53ZXBfZW5hYmxlZCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLQkJYXNzb2NfcmVxLT53ZXBfa2V5c1tpXS5sZW4gPSAwOwotCi0Jc2V0X2JpdChBU1NPQ19GTEFHX1NFQ0lORk8sICZhc3NvY19yZXEtPmZsYWdzKTsKLQlzZXRfYml0KEFTU09DX0ZMQUdfV0VQX0tFWVMsICZhc3NvY19yZXEtPmZsYWdzKTsKLQotCWxic19kZWJfbGVhdmUoTEJTX0RFQl9XRVhUKTsKLX0KLQotc3RhdGljIHZvaWQgZGlzYWJsZV93cGEoc3RydWN0IGFzc29jX3JlcXVlc3QgKmFzc29jX3JlcSkKLXsKLQlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7Ci0KLQltZW1zZXQoJmFzc29jX3JlcS0+d3BhX21jYXN0X2tleSwgMCwgc2l6ZW9mIChzdHJ1Y3QgZW5jX2tleSkpOwotCWFzc29jX3JlcS0+d3BhX21jYXN0X2tleS5mbGFncyA9IEtFWV9JTkZPX1dQQV9NQ0FTVDsKLQlzZXRfYml0KEFTU09DX0ZMQUdfV1BBX01DQVNUX0tFWSwgJmFzc29jX3JlcS0+ZmxhZ3MpOwotCi0JbWVtc2V0KCZhc3NvY19yZXEtPndwYV91bmljYXN0X2tleSwgMCwgc2l6ZW9mIChzdHJ1Y3QgZW5jX2tleSkpOwotCWFzc29jX3JlcS0+d3BhX3VuaWNhc3Rfa2V5LmZsYWdzID0gS0VZX0lORk9fV1BBX1VOSUNBU1Q7Ci0Jc2V0X2JpdChBU1NPQ19GTEFHX1dQQV9VQ0FTVF9LRVksICZhc3NvY19yZXEtPmZsYWdzKTsKLQotCWFzc29jX3JlcS0+c2VjaW5mby5XUEFlbmFibGVkID0gMDsKLQlhc3NvY19yZXEtPnNlY2luZm8uV1BBMmVuYWJsZWQgPSAwOwotCXNldF9iaXQoQVNTT0NfRkxBR19TRUNJTkZPLCAmYXNzb2NfcmVxLT5mbGFncyk7Ci0KLQlsYnNfZGViX2xlYXZlKExCU19ERUJfV0VYVCk7Ci19Ci0KLS8qKgotICogIEBicmllZiBTZXQgRW5jcnlwdGlvbiBrZXkKLSAqCi0gKiAgQHBhcmFtIGRldiAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byBuZXRfZGV2aWNlIHN0cnVjdHVyZQotICogIEBwYXJhbSBpbmZvCQkJQSBwb2ludGVyIHRvIGl3X3JlcXVlc3RfaW5mbyBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gdndycSAJCUEgcG9pbnRlciB0byBpd19wYXJhbSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gZXh0cmEJCUEgcG9pbnRlciB0byBleHRyYSBkYXRhIGJ1ZgotICogIEByZXR1cm4gCSAgIAkJMCAtLXN1Y2Nlc3MsIG90aGVyd2lzZSBmYWlsCi0gKi8KLXN0YXRpYyBpbnQgbGJzX3NldF9lbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCSAgICBzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEsIGNoYXIgKmV4dHJhKQotewotCWludCByZXQgPSAwOwotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKLQlzdHJ1Y3QgYXNzb2NfcmVxdWVzdCAqIGFzc29jX3JlcTsKLQl1MTYgaXNfZGVmYXVsdCA9IDAsIGluZGV4ID0gMCwgc2V0X3R4X2tleSA9IDA7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7Ci0KLQltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKLQlhc3NvY19yZXEgPSBsYnNfZ2V0X2Fzc29jaWF0aW9uX3JlcXVlc3QocHJpdik7Ci0JaWYgKCFhc3NvY19yZXEpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKSB7Ci0JCWRpc2FibGVfd2VwIChhc3NvY19yZXEpOwotCQlkaXNhYmxlX3dwYSAoYXNzb2NfcmVxKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmV0ID0gdmFsaWRhdGVfa2V5X2luZGV4KGFzc29jX3JlcS0+d2VwX3R4X2tleWlkeCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgJmluZGV4LCAmaXNfZGVmYXVsdCk7Ci0JaWYgKHJldCkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBJZiBXRVAgaXNuJ3QgZW5hYmxlZCwgb3IgaWYgdGhlcmUgaXMgbm8ga2V5IGRhdGEgYnV0IGEgdmFsaWQKLQkgKiBpbmRleCwgc2V0IHRoZSBUWCBrZXkuCi0JICovCi0JaWYgKCFhc3NvY19yZXEtPnNlY2luZm8ud2VwX2VuYWJsZWQgfHwgKGR3cnEtPmxlbmd0aCA9PSAwICYmICFpc19kZWZhdWx0KSkKLQkJc2V0X3R4X2tleSA9IDE7Ci0KLQlyZXQgPSBsYnNfc2V0X3dlcF9rZXkoYXNzb2NfcmVxLCBleHRyYSwgZHdycS0+bGVuZ3RoLCBpbmRleCwgc2V0X3R4X2tleSk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQlpZiAoZHdycS0+bGVuZ3RoKQotCQlzZXRfYml0KEFTU09DX0ZMQUdfV0VQX0tFWVMsICZhc3NvY19yZXEtPmZsYWdzKTsKLQlpZiAoc2V0X3R4X2tleSkKLQkJc2V0X2JpdChBU1NPQ19GTEFHX1dFUF9UWF9LRVlJRFgsICZhc3NvY19yZXEtPmZsYWdzKTsKLQotCWlmIChkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9SRVNUUklDVEVEKSB7Ci0JCXByaXYtPmF1dGh0eXBlX2F1dG8gPSAwOwotCQlhc3NvY19yZXEtPnNlY2luZm8uYXV0aF9tb2RlID0gSVdfQVVUSF9BTEdfU0hBUkVEX0tFWTsKLQl9IGVsc2UgaWYgKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX09QRU4pIHsKLQkJcHJpdi0+YXV0aHR5cGVfYXV0byA9IDA7Ci0JCWFzc29jX3JlcS0+c2VjaW5mby5hdXRoX21vZGUgPSBJV19BVVRIX0FMR19PUEVOX1NZU1RFTTsKLQl9Ci0KLW91dDoKLQlpZiAocmV0ID09IDApIHsKLQkJc2V0X2JpdChBU1NPQ19GTEFHX1NFQ0lORk8sICZhc3NvY19yZXEtPmZsYWdzKTsKLQkJbGJzX3Bvc3Rwb25lX2Fzc29jaWF0aW9uX3dvcmsocHJpdik7Ci0JfSBlbHNlIHsKLQkJbGJzX2NhbmNlbF9hc3NvY2lhdGlvbl93b3JrKHByaXYpOwotCX0KLQltdXRleF91bmxvY2soJnByaXYtPmxvY2spOwotCi0JbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfV0VYVCwgInJldCAlZCIsIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiAgQGJyaWVmIEdldCBFeHRlbmRlZCBFbmNyeXB0aW9uIGtleSAoV1BBLzgwMi4xeCBhbmQgV0VQKQotICoKLSAqICBAcGFyYW0gZGV2ICAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIG5ldF9kZXZpY2Ugc3RydWN0dXJlCi0gKiAgQHBhcmFtIGluZm8JCQlBIHBvaW50ZXIgdG8gaXdfcmVxdWVzdF9pbmZvIHN0cnVjdHVyZQotICogIEBwYXJhbSB2d3JxIAkJQSBwb2ludGVyIHRvIGl3X3BhcmFtIHN0cnVjdHVyZQotICogIEBwYXJhbSBleHRyYQkJQSBwb2ludGVyIHRvIGV4dHJhIGRhdGEgYnVmCi0gKiAgQHJldHVybiAJICAgCQkwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBmYWlsdXJlCi0gKi8KLXN0YXRpYyBpbnQgbGJzX2dldF9lbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEsCi0JCQkgICAgICBjaGFyICpleHRyYSkKLXsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7Ci0Jc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOwotCWludCBpbmRleCwgbWF4X2tleV9sZW47Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7Ci0KLQltYXhfa2V5X2xlbiA9IGR3cnEtPmxlbmd0aCAtIHNpemVvZigqZXh0KTsKLQlpZiAobWF4X2tleV9sZW4gPCAwKQotCQlnb3RvIG91dDsKLQotCWluZGV4ID0gZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7Ci0JaWYgKGluZGV4KSB7Ci0JCWlmIChpbmRleCA8IDEgfHwgaW5kZXggPiA0KQotCQkJZ290byBvdXQ7Ci0JCWluZGV4LS07Ci0JfSBlbHNlIHsKLQkJaW5kZXggPSBwcml2LT53ZXBfdHhfa2V5aWR4OwotCX0KLQotCWlmICghKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9HUk9VUF9LRVkpICYmCi0JICAgIGV4dC0+YWxnICE9IElXX0VOQ09ERV9BTEdfV0VQKSB7Ci0JCWlmIChpbmRleCAhPSAwIHx8IHByaXYtPm1vZGUgIT0gSVdfTU9ERV9JTkZSQSkKLQkJCWdvdG8gb3V0OwotCX0KLQotCWR3cnEtPmZsYWdzID0gaW5kZXggKyAxOwotCW1lbXNldChleHQsIDAsIHNpemVvZigqZXh0KSk7Ci0KLQlpZiAoICAgIXByaXYtPnNlY2luZm8ud2VwX2VuYWJsZWQKLQkgICAgJiYgIXByaXYtPnNlY2luZm8uV1BBZW5hYmxlZAotCSAgICAmJiAhcHJpdi0+c2VjaW5mby5XUEEyZW5hYmxlZCkgewotCQlleHQtPmFsZyA9IElXX0VOQ09ERV9BTEdfTk9ORTsKLQkJZXh0LT5rZXlfbGVuID0gMDsKLQkJZHdycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0RJU0FCTEVEOwotCX0gZWxzZSB7Ci0JCXU4ICprZXkgPSBOVUxMOwotCi0JCWlmICggICBwcml2LT5zZWNpbmZvLndlcF9lbmFibGVkCi0JCSAgICAmJiAhcHJpdi0+c2VjaW5mby5XUEFlbmFibGVkCi0JCSAgICAmJiAhcHJpdi0+c2VjaW5mby5XUEEyZW5hYmxlZCkgewotCQkJLyogV0VQICovCi0JCQlleHQtPmFsZyA9IElXX0VOQ09ERV9BTEdfV0VQOwotCQkJZXh0LT5rZXlfbGVuID0gcHJpdi0+d2VwX2tleXNbaW5kZXhdLmxlbjsKLQkJCWtleSA9ICZwcml2LT53ZXBfa2V5c1tpbmRleF0ua2V5WzBdOwotCQl9IGVsc2UgaWYgKCAgICFwcml2LT5zZWNpbmZvLndlcF9lbmFibGVkCi0JCSAgICAgICAgICAgJiYgKHByaXYtPnNlY2luZm8uV1BBZW5hYmxlZCB8fAotCQkgICAgICAgICAgICAgICBwcml2LT5zZWNpbmZvLldQQTJlbmFibGVkKSkgewotCQkJLyogV1BBICovCi0JCQlzdHJ1Y3QgZW5jX2tleSAqIHBrZXkgPSBOVUxMOwotCi0JCQlpZiAoICAgcHJpdi0+d3BhX21jYXN0X2tleS5sZW4KLQkJCSAgICAmJiAocHJpdi0+d3BhX21jYXN0X2tleS5mbGFncyAmIEtFWV9JTkZPX1dQQV9FTkFCTEVEKSkKLQkJCQlwa2V5ID0gJnByaXYtPndwYV9tY2FzdF9rZXk7Ci0JCQllbHNlIGlmICggICBwcml2LT53cGFfdW5pY2FzdF9rZXkubGVuCi0JCQkgICAgICAgICAmJiAocHJpdi0+d3BhX3VuaWNhc3Rfa2V5LmZsYWdzICYgS0VZX0lORk9fV1BBX0VOQUJMRUQpKQotCQkJCXBrZXkgPSAmcHJpdi0+d3BhX3VuaWNhc3Rfa2V5OwotCi0JCQlpZiAocGtleSkgewotCQkJCWlmIChwa2V5LT50eXBlID09IEtFWV9UWVBFX0lEX0FFUykgewotCQkJCQlleHQtPmFsZyA9IElXX0VOQ09ERV9BTEdfQ0NNUDsKLQkJCQl9IGVsc2UgewotCQkJCQlleHQtPmFsZyA9IElXX0VOQ09ERV9BTEdfVEtJUDsKLQkJCQl9Ci0JCQkJZXh0LT5rZXlfbGVuID0gcGtleS0+bGVuOwotCQkJCWtleSA9ICZwa2V5LT5rZXlbMF07Ci0JCQl9IGVsc2UgewotCQkJCWV4dC0+YWxnID0gSVdfRU5DT0RFX0FMR19US0lQOwotCQkJCWV4dC0+a2V5X2xlbiA9IDA7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCWlmIChleHQtPmtleV9sZW4gPiBtYXhfa2V5X2xlbikgewotCQkJcmV0ID0gLUUyQklHOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlpZiAoZXh0LT5rZXlfbGVuKQotCQkJbWVtY3B5KGV4dC0+a2V5LCBrZXksIGV4dC0+a2V5X2xlbik7Ci0JCWVsc2UKLQkJCWR3cnEtPmZsYWdzIHw9IElXX0VOQ09ERV9OT0tFWTsKLQkJZHdycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0VOQUJMRUQ7Ci0JfQotCXJldCA9IDA7Ci0KLW91dDoKLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9XRVhULCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqICBAYnJpZWYgU2V0IEVuY3J5cHRpb24ga2V5IEV4dGVuZGVkIChXUEEvODAyLjF4IGFuZCBXRVApCi0gKgotICogIEBwYXJhbSBkZXYgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gbmV0X2RldmljZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gaW5mbwkJCUEgcG9pbnRlciB0byBpd19yZXF1ZXN0X2luZm8gc3RydWN0dXJlCi0gKiAgQHBhcmFtIHZ3cnEgCQlBIHBvaW50ZXIgdG8gaXdfcGFyYW0gc3RydWN0dXJlCi0gKiAgQHBhcmFtIGV4dHJhCQlBIHBvaW50ZXIgdG8gZXh0cmEgZGF0YSBidWYKLSAqICBAcmV0dXJuIAkgICAJCTAgLS1zdWNjZXNzLCBvdGhlcndpc2UgZmFpbAotICovCi1zdGF0aWMgaW50IGxic19zZXRfZW5jb2RlZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICAgc3RydWN0IGl3X3BvaW50ICpkd3JxLAotCQkJICAgICAgY2hhciAqZXh0cmEpCi17Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwotCXN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKLQlpbnQgYWxnID0gZXh0LT5hbGc7Ci0Jc3RydWN0IGFzc29jX3JlcXVlc3QgKiBhc3NvY19yZXE7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7Ci0KLQltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKLQlhc3NvY19yZXEgPSBsYnNfZ2V0X2Fzc29jaWF0aW9uX3JlcXVlc3QocHJpdik7Ci0JaWYgKCFhc3NvY19yZXEpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKChhbGcgPT0gSVdfRU5DT0RFX0FMR19OT05FKSB8fCAoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpKSB7Ci0JCWRpc2FibGVfd2VwIChhc3NvY19yZXEpOwotCQlkaXNhYmxlX3dwYSAoYXNzb2NfcmVxKTsKLQl9IGVsc2UgaWYgKGFsZyA9PSBJV19FTkNPREVfQUxHX1dFUCkgewotCQl1MTYgaXNfZGVmYXVsdCA9IDAsIGluZGV4LCBzZXRfdHhfa2V5ID0gMDsKLQotCQlyZXQgPSB2YWxpZGF0ZV9rZXlfaW5kZXgoYXNzb2NfcmVxLT53ZXBfdHhfa2V5aWR4LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICZpbmRleCwgJmlzX2RlZmF1bHQpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0KLQkJLyogSWYgV0VQIGlzbid0IGVuYWJsZWQsIG9yIGlmIHRoZXJlIGlzIG5vIGtleSBkYXRhIGJ1dCBhIHZhbGlkCi0JCSAqIGluZGV4LCBvciBpZiB0aGUgc2V0LVRYLWtleSBmbGFnIHdhcyBwYXNzZWQsIHNldCB0aGUgVFgga2V5LgotCQkgKi8KLQkJaWYgKCAgICFhc3NvY19yZXEtPnNlY2luZm8ud2VwX2VuYWJsZWQKLQkJICAgIHx8IChkd3JxLT5sZW5ndGggPT0gMCAmJiAhaXNfZGVmYXVsdCkKLQkJICAgIHx8IChleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfU0VUX1RYX0tFWSkpCi0JCQlzZXRfdHhfa2V5ID0gMTsKLQotCQkvKiBDb3B5IGtleSB0byBkcml2ZXIgKi8KLQkJcmV0ID0gbGJzX3NldF93ZXBfa2V5KGFzc29jX3JlcSwgZXh0LT5rZXksIGV4dC0+a2V5X2xlbiwgaW5kZXgsCi0JCQkJCXNldF90eF9rZXkpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0KLQkJaWYgKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX1JFU1RSSUNURUQpIHsKLQkJCXByaXYtPmF1dGh0eXBlX2F1dG8gPSAwOwotCQkJYXNzb2NfcmVxLT5zZWNpbmZvLmF1dGhfbW9kZSA9IElXX0FVVEhfQUxHX1NIQVJFRF9LRVk7Ci0JCX0gZWxzZSBpZiAoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfT1BFTikgewotCQkJcHJpdi0+YXV0aHR5cGVfYXV0byA9IDA7Ci0JCQlhc3NvY19yZXEtPnNlY2luZm8uYXV0aF9tb2RlID0gSVdfQVVUSF9BTEdfT1BFTl9TWVNURU07Ci0JCX0KLQotCQkvKiBNYXJrIHRoZSB2YXJpb3VzIFdFUCBiaXRzIGFzIG1vZGlmaWVkICovCi0JCXNldF9iaXQoQVNTT0NfRkxBR19TRUNJTkZPLCAmYXNzb2NfcmVxLT5mbGFncyk7Ci0JCWlmIChkd3JxLT5sZW5ndGgpCi0JCQlzZXRfYml0KEFTU09DX0ZMQUdfV0VQX0tFWVMsICZhc3NvY19yZXEtPmZsYWdzKTsKLQkJaWYgKHNldF90eF9rZXkpCi0JCQlzZXRfYml0KEFTU09DX0ZMQUdfV0VQX1RYX0tFWUlEWCwgJmFzc29jX3JlcS0+ZmxhZ3MpOwotCX0gZWxzZSBpZiAoKGFsZyA9PSBJV19FTkNPREVfQUxHX1RLSVApIHx8IChhbGcgPT0gSVdfRU5DT0RFX0FMR19DQ01QKSkgewotCQlzdHJ1Y3QgZW5jX2tleSAqIHBrZXk7Ci0KLQkJLyogdmFsaWRhdGUga2V5IGxlbmd0aCAqLwotCQlpZiAoKChhbGcgPT0gSVdfRU5DT0RFX0FMR19US0lQKQotCQkJJiYgKGV4dC0+a2V5X2xlbiAhPSBLRVlfTEVOX1dQQV9US0lQKSkKLQkJICAgIHx8ICgoYWxnID09IElXX0VOQ09ERV9BTEdfQ0NNUCkKLQkJICAgICAgICAmJiAoZXh0LT5rZXlfbGVuICE9IEtFWV9MRU5fV1BBX0FFUykpKSB7Ci0JCQkJbGJzX2RlYl93ZXh0KCJpbnZhbGlkIHNpemUgJWQgZm9yIGtleSBvZiBhbGcgIgotCQkJCSAgICAgICAidHlwZSAlZFxuIiwKLQkJCQkgICAgICAgZXh0LT5rZXlfbGVuLAotCQkJCSAgICAgICBhbGcpOwotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlpZiAoZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX0dST1VQX0tFWSkgewotCQkJcGtleSA9ICZhc3NvY19yZXEtPndwYV9tY2FzdF9rZXk7Ci0JCQlzZXRfYml0KEFTU09DX0ZMQUdfV1BBX01DQVNUX0tFWSwgJmFzc29jX3JlcS0+ZmxhZ3MpOwotCQl9IGVsc2UgewotCQkJcGtleSA9ICZhc3NvY19yZXEtPndwYV91bmljYXN0X2tleTsKLQkJCXNldF9iaXQoQVNTT0NfRkxBR19XUEFfVUNBU1RfS0VZLCAmYXNzb2NfcmVxLT5mbGFncyk7Ci0JCX0KLQotCQltZW1zZXQocGtleSwgMCwgc2l6ZW9mIChzdHJ1Y3QgZW5jX2tleSkpOwotCQltZW1jcHkocGtleS0+a2V5LCBleHQtPmtleSwgZXh0LT5rZXlfbGVuKTsKLQkJcGtleS0+bGVuID0gZXh0LT5rZXlfbGVuOwotCQlpZiAocGtleS0+bGVuKQotCQkJcGtleS0+ZmxhZ3MgfD0gS0VZX0lORk9fV1BBX0VOQUJMRUQ7Ci0KLQkJLyogRG8gdGhpcyBhZnRlciB6ZXJvaW5nIGtleSBzdHJ1Y3R1cmUgKi8KLQkJaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9HUk9VUF9LRVkpIHsKLQkJCXBrZXktPmZsYWdzIHw9IEtFWV9JTkZPX1dQQV9NQ0FTVDsKLQkJfSBlbHNlIHsKLQkJCXBrZXktPmZsYWdzIHw9IEtFWV9JTkZPX1dQQV9VTklDQVNUOwotCQl9Ci0KLQkJaWYgKGFsZyA9PSBJV19FTkNPREVfQUxHX1RLSVApIHsKLQkJCXBrZXktPnR5cGUgPSBLRVlfVFlQRV9JRF9US0lQOwotCQl9IGVsc2UgaWYgKGFsZyA9PSBJV19FTkNPREVfQUxHX0NDTVApIHsKLQkJCXBrZXktPnR5cGUgPSBLRVlfVFlQRV9JRF9BRVM7Ci0JCX0KLQotCQkvKiBJZiBXUEEgaXNuJ3QgZW5hYmxlZCB5ZXQsIGRvIHRoYXQgbm93ICovCi0JCWlmICggICBhc3NvY19yZXEtPnNlY2luZm8uV1BBZW5hYmxlZCA9PSAwCi0JCSAgICAmJiBhc3NvY19yZXEtPnNlY2luZm8uV1BBMmVuYWJsZWQgPT0gMCkgewotCQkJYXNzb2NfcmVxLT5zZWNpbmZvLldQQWVuYWJsZWQgPSAxOwotCQkJYXNzb2NfcmVxLT5zZWNpbmZvLldQQTJlbmFibGVkID0gMTsKLQkJCXNldF9iaXQoQVNTT0NfRkxBR19TRUNJTkZPLCAmYXNzb2NfcmVxLT5mbGFncyk7Ci0JCX0KLQotCQkvKiBPbmx5IGRpc2FibGUgd2VwIGlmIG5lY2Vzc2FyeTogY2FuJ3Qgd2FzdGUgdGltZSBoZXJlLiAqLwotCQlpZiAocHJpdi0+bWFjX2NvbnRyb2wgJiBDTURfQUNUX01BQ19XRVBfRU5BQkxFKQotCQkJZGlzYWJsZV93ZXAoYXNzb2NfcmVxKTsKLQl9Ci0KLW91dDoKLQlpZiAocmV0ID09IDApIHsKLQkJLyogODAyLjF4IGFuZCBXUEEgcmVrZXlpbmcgbXVzdCBoYXBwZW4gYXMgcXVpY2tseSBhcyBwb3NzaWJsZSwKLQkJICogZXNwZWNpYWxseSBkdXJpbmcgdGhlIDQtd2F5IGhhbmRzaGFrZTsgdGh1cyBpZiBpbgotCQkgKiBpbmZyYXN0cnVjdHVyZSBtb2RlLCBhbmQgZWl0aGVyIChhKSA4MDIuMXggaXMgZW5hYmxlZCBvcgotCQkgKiAoYikgV1BBIGlzIGJlaW5nIHVzZWQsIHNldCB0aGUga2V5IHJpZ2h0IGF3YXkuCi0JCSAqLwotCQlpZiAoYXNzb2NfcmVxLT5tb2RlID09IElXX01PREVfSU5GUkEgJiYKLQkJICAgICgoYXNzb2NfcmVxLT5zZWNpbmZvLmtleV9tZ210ICYgSVdfQVVUSF9LRVlfTUdNVF84MDJfMVgpIHx8Ci0JCSAgICAgKGFzc29jX3JlcS0+c2VjaW5mby5rZXlfbWdtdCAmIElXX0FVVEhfS0VZX01HTVRfUFNLKSB8fAotCQkgICAgICBhc3NvY19yZXEtPnNlY2luZm8uV1BBZW5hYmxlZCB8fAotCQkgICAgICBhc3NvY19yZXEtPnNlY2luZm8uV1BBMmVuYWJsZWQpKSB7Ci0JCQlsYnNfZG9fYXNzb2NpYXRpb25fd29yayhwcml2KTsKLQkJfSBlbHNlCi0JCQlsYnNfcG9zdHBvbmVfYXNzb2NpYXRpb25fd29yayhwcml2KTsKLQl9IGVsc2UgewotCQlsYnNfY2FuY2VsX2Fzc29jaWF0aW9uX3dvcmsocHJpdik7Ci0JfQotCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7Ci0KLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9XRVhULCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyBpbnQgbGJzX3NldF9nZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICBzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEsCi0JCQkgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgYXNzb2NfcmVxdWVzdCAqIGFzc29jX3JlcTsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsKLQotCW11dGV4X2xvY2soJnByaXYtPmxvY2spOwotCWFzc29jX3JlcSA9IGxic19nZXRfYXNzb2NpYXRpb25fcmVxdWVzdChwcml2KTsKLQlpZiAoIWFzc29jX3JlcSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoZHdycS0+bGVuZ3RoID4gTUFYX1dQQV9JRV9MRU4gfHwKLQkgICAgKGR3cnEtPmxlbmd0aCAmJiBleHRyYSA9PSBOVUxMKSkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoZHdycS0+bGVuZ3RoKSB7Ci0JCW1lbWNweSgmYXNzb2NfcmVxLT53cGFfaWVbMF0sIGV4dHJhLCBkd3JxLT5sZW5ndGgpOwotCQlhc3NvY19yZXEtPndwYV9pZV9sZW4gPSBkd3JxLT5sZW5ndGg7Ci0JfSBlbHNlIHsKLQkJbWVtc2V0KCZhc3NvY19yZXEtPndwYV9pZVswXSwgMCwgc2l6ZW9mKHByaXYtPndwYV9pZSkpOwotCQlhc3NvY19yZXEtPndwYV9pZV9sZW4gPSAwOwotCX0KLQotb3V0OgotCWlmIChyZXQgPT0gMCkgewotCQlzZXRfYml0KEFTU09DX0ZMQUdfV1BBX0lFLCAmYXNzb2NfcmVxLT5mbGFncyk7Ci0JCWxic19wb3N0cG9uZV9hc3NvY2lhdGlvbl93b3JrKHByaXYpOwotCX0gZWxzZSB7Ci0JCWxic19jYW5jZWxfYXNzb2NpYXRpb25fd29yayhwcml2KTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKLQotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1dFWFQsICJyZXQgJWQiLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgbGJzX2dldF9nZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICBzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEsCi0JCQkgIGNoYXIgKmV4dHJhKQotewotCWludCByZXQgPSAwOwotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsKLQotCWlmIChwcml2LT53cGFfaWVfbGVuID09IDApIHsKLQkJZHdycS0+bGVuZ3RoID0gMDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGR3cnEtPmxlbmd0aCA8IHByaXYtPndwYV9pZV9sZW4pIHsKLQkJcmV0ID0gLUUyQklHOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlkd3JxLT5sZW5ndGggPSBwcml2LT53cGFfaWVfbGVuOwotCW1lbWNweShleHRyYSwgJnByaXYtPndwYV9pZVswXSwgcHJpdi0+d3BhX2llX2xlbik7Ci0KLW91dDoKLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9XRVhULCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyBpbnQgbGJzX3NldF9hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSBzdHJ1Y3QgaXdfcGFyYW0gKmR3cnEsCi0JCQkgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwotCXN0cnVjdCBhc3NvY19yZXF1ZXN0ICogYXNzb2NfcmVxOwotCWludCByZXQgPSAwOwotCWludCB1cGRhdGVkID0gMDsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsKLQotCW11dGV4X2xvY2soJnByaXYtPmxvY2spOwotCWFzc29jX3JlcSA9IGxic19nZXRfYXNzb2NpYXRpb25fcmVxdWVzdChwcml2KTsKLQlpZiAoIWFzc29jX3JlcSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlzd2l0Y2ggKGR3cnEtPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgewotCWNhc2UgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQ6Ci0JY2FzZSBJV19BVVRIX1JYX1VORU5DUllQVEVEX0VBUE9MOgotCWNhc2UgSVdfQVVUSF9US0lQX0NPVU5URVJNRUFTVVJFUzoKLQljYXNlIElXX0FVVEhfQ0lQSEVSX1BBSVJXSVNFOgotCWNhc2UgSVdfQVVUSF9DSVBIRVJfR1JPVVA6Ci0JY2FzZSBJV19BVVRIX0RST1BfVU5FTkNSWVBURUQ6Ci0JCS8qCi0JCSAqIGxpYmVydGFzIGRvZXMgbm90IHVzZSB0aGVzZSBwYXJhbWV0ZXJzCi0JCSAqLwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF9LRVlfTUdNVDoKLQkJYXNzb2NfcmVxLT5zZWNpbmZvLmtleV9tZ210ID0gZHdycS0+dmFsdWU7Ci0JCXVwZGF0ZWQgPSAxOwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF9XUEFfVkVSU0lPTjoKLQkJaWYgKGR3cnEtPnZhbHVlICYgSVdfQVVUSF9XUEFfVkVSU0lPTl9ESVNBQkxFRCkgewotCQkJYXNzb2NfcmVxLT5zZWNpbmZvLldQQWVuYWJsZWQgPSAwOwotCQkJYXNzb2NfcmVxLT5zZWNpbmZvLldQQTJlbmFibGVkID0gMDsKLQkJCWRpc2FibGVfd3BhIChhc3NvY19yZXEpOwotCQl9Ci0JCWlmIChkd3JxLT52YWx1ZSAmIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBKSB7Ci0JCQlhc3NvY19yZXEtPnNlY2luZm8uV1BBZW5hYmxlZCA9IDE7Ci0JCQlhc3NvY19yZXEtPnNlY2luZm8ud2VwX2VuYWJsZWQgPSAwOwotCQkJYXNzb2NfcmVxLT5zZWNpbmZvLmF1dGhfbW9kZSA9IElXX0FVVEhfQUxHX09QRU5fU1lTVEVNOwotCQl9Ci0JCWlmIChkd3JxLT52YWx1ZSAmIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBMikgewotCQkJYXNzb2NfcmVxLT5zZWNpbmZvLldQQTJlbmFibGVkID0gMTsKLQkJCWFzc29jX3JlcS0+c2VjaW5mby53ZXBfZW5hYmxlZCA9IDA7Ci0JCQlhc3NvY19yZXEtPnNlY2luZm8uYXV0aF9tb2RlID0gSVdfQVVUSF9BTEdfT1BFTl9TWVNURU07Ci0JCX0KLQkJdXBkYXRlZCA9IDE7Ci0JCWJyZWFrOwotCi0JY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgotCQlpZiAoZHdycS0+dmFsdWUgJiBJV19BVVRIX0FMR19TSEFSRURfS0VZKSB7Ci0JCQlhc3NvY19yZXEtPnNlY2luZm8uYXV0aF9tb2RlID0gSVdfQVVUSF9BTEdfU0hBUkVEX0tFWTsKLQkJfSBlbHNlIGlmIChkd3JxLT52YWx1ZSAmIElXX0FVVEhfQUxHX09QRU5fU1lTVEVNKSB7Ci0JCQlhc3NvY19yZXEtPnNlY2luZm8uYXV0aF9tb2RlID0gSVdfQVVUSF9BTEdfT1BFTl9TWVNURU07Ci0JCX0gZWxzZSBpZiAoZHdycS0+dmFsdWUgJiBJV19BVVRIX0FMR19MRUFQKSB7Ci0JCQlhc3NvY19yZXEtPnNlY2luZm8uYXV0aF9tb2RlID0gSVdfQVVUSF9BTEdfTEVBUDsKLQkJfSBlbHNlIHsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCX0KLQkJdXBkYXRlZCA9IDE7Ci0JCWJyZWFrOwotCi0JY2FzZSBJV19BVVRIX1dQQV9FTkFCTEVEOgotCQlpZiAoZHdycS0+dmFsdWUpIHsKLQkJCWlmICghYXNzb2NfcmVxLT5zZWNpbmZvLldQQWVuYWJsZWQgJiYKLQkJCSAgICAhYXNzb2NfcmVxLT5zZWNpbmZvLldQQTJlbmFibGVkKSB7Ci0JCQkJYXNzb2NfcmVxLT5zZWNpbmZvLldQQWVuYWJsZWQgPSAxOwotCQkJCWFzc29jX3JlcS0+c2VjaW5mby5XUEEyZW5hYmxlZCA9IDE7Ci0JCQkJYXNzb2NfcmVxLT5zZWNpbmZvLndlcF9lbmFibGVkID0gMDsKLQkJCQlhc3NvY19yZXEtPnNlY2luZm8uYXV0aF9tb2RlID0gSVdfQVVUSF9BTEdfT1BFTl9TWVNURU07Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlhc3NvY19yZXEtPnNlY2luZm8uV1BBZW5hYmxlZCA9IDA7Ci0JCQlhc3NvY19yZXEtPnNlY2luZm8uV1BBMmVuYWJsZWQgPSAwOwotCQkJZGlzYWJsZV93cGEgKGFzc29jX3JlcSk7Ci0JCX0KLQkJdXBkYXRlZCA9IDE7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JCWJyZWFrOwotCX0KLQotb3V0OgotCWlmIChyZXQgPT0gMCkgewotCQlpZiAodXBkYXRlZCkKLQkJCXNldF9iaXQoQVNTT0NfRkxBR19TRUNJTkZPLCAmYXNzb2NfcmVxLT5mbGFncyk7Ci0JCWxic19wb3N0cG9uZV9hc3NvY2lhdGlvbl93b3JrKHByaXYpOwotCX0gZWxzZSBpZiAocmV0ICE9IC1FT1BOT1RTVVBQKSB7Ci0JCWxic19jYW5jZWxfYXNzb2NpYXRpb25fd29yayhwcml2KTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKLQotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1dFWFQsICJyZXQgJWQiLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgbGJzX2dldF9hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSBzdHJ1Y3QgaXdfcGFyYW0gKmR3cnEsCi0JCQkgY2hhciAqZXh0cmEpCi17Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOwotCi0Jc3dpdGNoIChkd3JxLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKLQljYXNlIElXX0FVVEhfS0VZX01HTVQ6Ci0JCWR3cnEtPnZhbHVlID0gcHJpdi0+c2VjaW5mby5rZXlfbWdtdDsKLQkJYnJlYWs7Ci0KLQljYXNlIElXX0FVVEhfV1BBX1ZFUlNJT046Ci0JCWR3cnEtPnZhbHVlID0gMDsKLQkJaWYgKHByaXYtPnNlY2luZm8uV1BBZW5hYmxlZCkKLQkJCWR3cnEtPnZhbHVlIHw9IElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBOwotCQlpZiAocHJpdi0+c2VjaW5mby5XUEEyZW5hYmxlZCkKLQkJCWR3cnEtPnZhbHVlIHw9IElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBMjsKLQkJaWYgKCFkd3JxLT52YWx1ZSkKLQkJCWR3cnEtPnZhbHVlIHw9IElXX0FVVEhfV1BBX1ZFUlNJT05fRElTQUJMRUQ7Ci0JCWJyZWFrOwotCi0JY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgotCQlkd3JxLT52YWx1ZSA9IHByaXYtPnNlY2luZm8uYXV0aF9tb2RlOwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF9XUEFfRU5BQkxFRDoKLQkJaWYgKHByaXYtPnNlY2luZm8uV1BBZW5hYmxlZCAmJiBwcml2LT5zZWNpbmZvLldQQTJlbmFibGVkKQotCQkJZHdycS0+dmFsdWUgPSAxOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FT1BOT1RTVVBQOwotCX0KLQotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1dFWFQsICJyZXQgJWQiLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLQotc3RhdGljIGludCBsYnNfc2V0X3R4cG93KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCSAgIHN0cnVjdCBpd19wYXJhbSAqdndycSwgY2hhciAqZXh0cmEpCi17Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwotCXMxNiBkYm0gPSAoczE2KSB2d3JxLT52YWx1ZTsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsKLQotCWlmICh2d3JxLT5kaXNhYmxlZCkgewotCQlsYnNfc2V0X3JhZGlvKHByaXYsIFJBRElPX1BSRUFNQkxFX0FVVE8sIDApOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAodndycS0+Zml4ZWQgPT0gMCkgewotCQkvKiBVc2VyIHJlcXVlc3RzIGF1dG9tYXRpYyB0eCBwb3dlciBjb250cm9sLCBob3dldmVyIHRoZXJlIGFyZQotCQkgKiBtYW55IGF1dG8gdHggc2V0dGluZ3MuICBGb3Igbm93IHVzZSBmaXJtd2FyZSBkZWZhdWx0cyB1bnRpbAotCQkgKiB3ZSBjb21lIHVwIHdpdGggYSBnb29kIHdheSB0byBleHBvc2UgdGhlc2UgdG8gdGhlIHVzZXIuICovCi0JCWlmIChwcml2LT5md3JlbGVhc2UgPCAweDA5MDAwMDAwKSB7Ci0JCQlyZXQgPSBsYnNfc2V0X3Bvd2VyX2FkYXB0X2NmZyhwcml2LCAxLAotCQkJCQlQT1dfQURBUFRfREVGQVVMVF9QMCwKLQkJCQkJUE9XX0FEQVBUX0RFRkFVTFRfUDEsCi0JCQkJCVBPV19BREFQVF9ERUZBVUxUX1AyKTsKLQkJCWlmIChyZXQpCi0JCQkJZ290byBvdXQ7Ci0JCX0KLQkJcmV0ID0gbGJzX3NldF90cGNfY2ZnKHByaXYsIDAsIFRQQ19ERUZBVUxUX1AwLCBUUENfREVGQVVMVF9QMSwKLQkJCQlUUENfREVGQVVMVF9QMiwgMSk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKLQkJZGJtID0gcHJpdi0+dHhwb3dlcl9tYXg7Ci0JfSBlbHNlIHsKLQkJLyogVXNlcnNwYWNlIGNoZWNrIGluIGl3cmFuZ2UgaWYgaXQgc2hvdWxkIHVzZSBkQm0gb3IgbVcsCi0JCSAqIHRoZXJlZm9yZSB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4uLi4gSmVhbiBJSSAqLwotCQlpZiAoKHZ3cnEtPmZsYWdzICYgSVdfVFhQT1dfVFlQRSkgIT0gSVdfVFhQT1dfREJNKSB7Ci0JCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJLyogVmFsaWRhdGUgcmVxdWVzdGVkIHBvd2VyIGxldmVsIGFnYWluc3QgZmlybXdhcmUgYWxsb3dlZAotCQkgKiBsZXZlbHMgKi8KLQkJaWYgKHByaXYtPnR4cG93ZXJfbWluICYmIChkYm0gPCBwcml2LT50eHBvd2VyX21pbikpIHsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCWlmIChwcml2LT50eHBvd2VyX21heCAmJiAoZGJtID4gcHJpdi0+dHhwb3dlcl9tYXgpKSB7Ci0JCQlyZXQgPSAtRUlOVkFMOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJaWYgKHByaXYtPmZ3cmVsZWFzZSA8IDB4MDkwMDAwMDApIHsKLQkJCXJldCA9IGxic19zZXRfcG93ZXJfYWRhcHRfY2ZnKHByaXYsIDAsCi0JCQkJCVBPV19BREFQVF9ERUZBVUxUX1AwLAotCQkJCQlQT1dfQURBUFRfREVGQVVMVF9QMSwKLQkJCQkJUE9XX0FEQVBUX0RFRkFVTFRfUDIpOwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIG91dDsKLQkJfQotCQlyZXQgPSBsYnNfc2V0X3RwY19jZmcocHJpdiwgMCwgVFBDX0RFRkFVTFRfUDAsIFRQQ19ERUZBVUxUX1AxLAotCQkJCVRQQ19ERUZBVUxUX1AyLCAxKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OwotCX0KLQotCS8qIElmIHRoZSByYWRpbyB3YXMgb2ZmLCB0dXJuIGl0IG9uICovCi0JaWYgKCFwcml2LT5yYWRpb19vbikgewotCQlyZXQgPSBsYnNfc2V0X3JhZGlvKHByaXYsIFJBRElPX1BSRUFNQkxFX0FVVE8sIDEpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0JfQotCi0JbGJzX2RlYl93ZXh0KCJ0eHBvd2VyIHNldCAlZCBkQm1cbiIsIGRibSk7Ci0KLQlyZXQgPSBsYnNfc2V0X3R4X3Bvd2VyKHByaXYsIGRibSk7Ci0KLW91dDoKLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9XRVhULCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGxic19nZXRfZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJICAgc3RydWN0IGl3X3BvaW50ICpkd3JxLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7Ci0KLQkvKgotCSAqIE5vdGUgOiBpZiBkd3JxLT5mbGFncyAhPSAwLCB3ZSBzaG91bGQgZ2V0IHRoZSByZWxldmFudCBTU0lEIGZyb20KLQkgKiB0aGUgU1NJRCBsaXN0Li4uCi0JICovCi0KLQkvKgotCSAqIEdldCB0aGUgY3VycmVudCBTU0lECi0JICovCi0JaWYgKHByaXYtPmNvbm5lY3Rfc3RhdHVzID09IExCU19DT05ORUNURUQpIHsKLQkJbWVtY3B5KGV4dHJhLCBwcml2LT5jdXJic3NwYXJhbXMuc3NpZCwKLQkJICAgICAgIHByaXYtPmN1cmJzc3BhcmFtcy5zc2lkX2xlbik7Ci0JfSBlbHNlIHsKLQkJbWVtc2V0KGV4dHJhLCAwLCAzMik7Ci0JfQotCS8qCi0JICogSWYgbm9uZSwgd2UgbWF5IHdhbnQgdG8gZ2V0IHRoZSBvbmUgdGhhdCB3YXMgc2V0Ci0JICovCi0KLQlkd3JxLT5sZW5ndGggPSBwcml2LT5jdXJic3NwYXJhbXMuc3NpZF9sZW47Ci0KLQlkd3JxLT5mbGFncyA9IDE7CS8qIGFjdGl2ZSAqLwotCi0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX1dFWFQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGxic19zZXRfZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJICAgc3RydWN0IGl3X3BvaW50ICpkd3JxLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7Ci0JaW50IHJldCA9IDA7Ci0JdTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKLQl1OCBzc2lkX2xlbiA9IDA7Ci0Jc3RydWN0IGFzc29jX3JlcXVlc3QgKiBhc3NvY19yZXE7Ci0JaW50IGluX3NzaWRfbGVuID0gZHdycS0+bGVuZ3RoOwotCURFQ0xBUkVfU1NJRF9CVUYoc3NpZF9idWYpOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOwotCi0JaWYgKCFwcml2LT5yYWRpb19vbikgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBDaGVjayB0aGUgc2l6ZSBvZiB0aGUgc3RyaW5nICovCi0JaWYgKGluX3NzaWRfbGVuID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikgewotCQlyZXQgPSAtRTJCSUc7Ci0JCWdvdG8gb3V0OwotCX0KLQotCW1lbXNldCgmc3NpZCwgMCwgc2l6ZW9mKHNzaWQpKTsKLQotCWlmICghZHdycS0+ZmxhZ3MgfHwgIWluX3NzaWRfbGVuKSB7Ci0JCS8qICJhbnkiIFNTSUQgcmVxdWVzdGVkOyBsZWF2ZSBTU0lEIGJsYW5rICovCi0JfSBlbHNlIHsKLQkJLyogU3BlY2lmaWMgU1NJRCByZXF1ZXN0ZWQgKi8KLQkJbWVtY3B5KCZzc2lkLCBleHRyYSwgaW5fc3NpZF9sZW4pOwotCQlzc2lkX2xlbiA9IGluX3NzaWRfbGVuOwotCX0KLQotCWlmICghc3NpZF9sZW4pIHsKLQkJbGJzX2RlYl93ZXh0KCJyZXF1ZXN0ZWQgYW55IFNTSURcbiIpOwotCX0gZWxzZSB7Ci0JCWxic19kZWJfd2V4dCgicmVxdWVzdGVkIFNTSUQgJyVzJ1xuIiwKLQkJICAgICAgICAgICAgIHByaW50X3NzaWQoc3NpZF9idWYsIHNzaWQsIHNzaWRfbGVuKSk7Ci0JfQotCi1vdXQ6Ci0JbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7Ci0JaWYgKHJldCA9PSAwKSB7Ci0JCS8qIEdldCBvciBjcmVhdGUgdGhlIGN1cnJlbnQgYXNzb2NpYXRpb24gcmVxdWVzdCAqLwotCQlhc3NvY19yZXEgPSBsYnNfZ2V0X2Fzc29jaWF0aW9uX3JlcXVlc3QocHJpdik7Ci0JCWlmICghYXNzb2NfcmVxKSB7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQl9IGVsc2UgewotCQkJLyogQ29weSB0aGUgU1NJRCB0byB0aGUgYXNzb2NpYXRpb24gcmVxdWVzdCAqLwotCQkJbWVtY3B5KCZhc3NvY19yZXEtPnNzaWQsICZzc2lkLCBJRUVFODAyMTFfTUFYX1NTSURfTEVOKTsKLQkJCWFzc29jX3JlcS0+c3NpZF9sZW4gPSBzc2lkX2xlbjsKLQkJCXNldF9iaXQoQVNTT0NfRkxBR19TU0lELCAmYXNzb2NfcmVxLT5mbGFncyk7Ci0JCQlsYnNfcG9zdHBvbmVfYXNzb2NpYXRpb25fd29yayhwcml2KTsKLQkJfQotCX0KLQotCS8qIENhbmNlbCB0aGUgYXNzb2NpYXRpb24gcmVxdWVzdCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgKi8KLQlpZiAocmV0ICE9IDApIHsKLQkJbGJzX2NhbmNlbF9hc3NvY2lhdGlvbl93b3JrKHByaXYpOwotCX0KLQotCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7Ci0KLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9XRVhULCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi0jaWZkZWYgQ09ORklHX0xJQkVSVEFTX01FU0gKLXN0YXRpYyBpbnQgbGJzX21lc2hfZ2V0X2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICAgc3RydWN0IGl3X3BvaW50ICpkd3JxLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7Ci0KLQltZW1jcHkoZXh0cmEsIHByaXYtPm1lc2hfc3NpZCwgcHJpdi0+bWVzaF9zc2lkX2xlbik7Ci0KLQlkd3JxLT5sZW5ndGggPSBwcml2LT5tZXNoX3NzaWRfbGVuOwotCi0JZHdycS0+ZmxhZ3MgPSAxOwkvKiBhY3RpdmUgKi8KLQotCWxic19kZWJfbGVhdmUoTEJTX0RFQl9XRVhUKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBsYnNfbWVzaF9zZXRfZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKLQlpbnQgcmV0ID0gMDsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsKLQotCWlmICghcHJpdi0+cmFkaW9fb24pIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogQ2hlY2sgdGhlIHNpemUgb2YgdGhlIHN0cmluZyAqLwotCWlmIChkd3JxLT5sZW5ndGggPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKSB7Ci0JCXJldCA9IC1FMkJJRzsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKCFkd3JxLT5mbGFncyB8fCAhZHdycS0+bGVuZ3RoKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0gZWxzZSB7Ci0JCS8qIFNwZWNpZmljIFNTSUQgcmVxdWVzdGVkICovCi0JCW1lbWNweShwcml2LT5tZXNoX3NzaWQsIGV4dHJhLCBkd3JxLT5sZW5ndGgpOwotCQlwcml2LT5tZXNoX3NzaWRfbGVuID0gZHdycS0+bGVuZ3RoOwotCX0KLQotCWxic19tZXNoX2NvbmZpZyhwcml2LCBDTURfQUNUX01FU0hfQ09ORklHX1NUQVJULAotCQkJcHJpdi0+Y2hhbm5lbCk7Ci0gb3V0OgotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1dFWFQsICJyZXQgJWQiLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0jZW5kaWYKLQotLyoqCi0gKiAgQGJyaWVmIENvbm5lY3QgdG8gdGhlIEFQIG9yIEFkLWhvYyBOZXR3b3JrIHdpdGggc3BlY2lmaWMgYnNzaWQKLSAqCi0gKiAgQHBhcmFtIGRldiAgICAgICAgICBBIHBvaW50ZXIgdG8gbmV0X2RldmljZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gaW5mbyAgICAgICAgIEEgcG9pbnRlciB0byBpd19yZXF1ZXN0X2luZm8gc3RydWN0dXJlCi0gKiAgQHBhcmFtIGF3cnEgICAgICAgICBBIHBvaW50ZXIgdG8gaXdfcGFyYW0gc3RydWN0dXJlCi0gKiAgQHBhcmFtIGV4dHJhICAgICAgICBBIHBvaW50ZXIgdG8gZXh0cmEgZGF0YSBidWYKLSAqICBAcmV0dXJuICAgICAgICAgICAgIDAgLS1zdWNjZXNzLCBvdGhlcndpc2UgZmFpbAotICovCi1zdGF0aWMgaW50IGxic19zZXRfd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCSBzdHJ1Y3Qgc29ja2FkZHIgKmF3cnEsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKLQlzdHJ1Y3QgYXNzb2NfcmVxdWVzdCAqIGFzc29jX3JlcTsKLQlpbnQgcmV0ID0gMDsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsKLQotCWlmICghcHJpdi0+cmFkaW9fb24pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGF3cnEtPnNhX2ZhbWlseSAhPSBBUlBIUkRfRVRIRVIpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbGJzX2RlYl93ZXh0KCJBU1NPQzogV0FQOiBzYV9kYXRhICVwTVxuIiwgYXdycS0+c2FfZGF0YSk7Ci0KLQltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKLQotCS8qIEdldCBvciBjcmVhdGUgdGhlIGN1cnJlbnQgYXNzb2NpYXRpb24gcmVxdWVzdCAqLwotCWFzc29jX3JlcSA9IGxic19nZXRfYXNzb2NpYXRpb25fcmVxdWVzdChwcml2KTsKLQlpZiAoIWFzc29jX3JlcSkgewotCQlsYnNfY2FuY2VsX2Fzc29jaWF0aW9uX3dvcmsocHJpdik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JfSBlbHNlIHsKLQkJLyogQ29weSB0aGUgQlNTSUQgdG8gdGhlIGFzc29jaWF0aW9uIHJlcXVlc3QgKi8KLQkJbWVtY3B5KCZhc3NvY19yZXEtPmJzc2lkLCBhd3JxLT5zYV9kYXRhLCBFVEhfQUxFTik7Ci0JCXNldF9iaXQoQVNTT0NfRkxBR19CU1NJRCwgJmFzc29jX3JlcS0+ZmxhZ3MpOwotCQlsYnNfcG9zdHBvbmVfYXNzb2NpYXRpb25fd29yayhwcml2KTsKLQl9Ci0KLQltdXRleF91bmxvY2soJnByaXYtPmxvY2spOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIGl3Y29uZmlnIHNldHRhYmxlIGNhbGxiYWNrcwotICovCi1zdGF0aWMgY29uc3QgaXdfaGFuZGxlciBsYnNfaGFuZGxlcltdID0gewotCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DU0lXQ09NTUlUICovCi0JKGl3X2hhbmRsZXIpIGxic19nZXRfbmFtZSwJLyogU0lPQ0dJV05BTUUgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ1NJV05XSUQgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ0dJV05XSUQgKi8KLQkoaXdfaGFuZGxlcikgbGJzX3NldF9mcmVxLAkvKiBTSU9DU0lXRlJFUSAqLwotCShpd19oYW5kbGVyKSBsYnNfZ2V0X2ZyZXEsCS8qIFNJT0NHSVdGUkVRICovCi0JKGl3X2hhbmRsZXIpIGxic19zZXRfbW9kZSwJLyogU0lPQ1NJV01PREUgKi8KLQkoaXdfaGFuZGxlcikgbGJzX2dldF9tb2RlLAkvKiBTSU9DR0lXTU9ERSAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DU0lXU0VOUyAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DR0lXU0VOUyAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DU0lXUkFOR0UgKi8KLQkoaXdfaGFuZGxlcikgbGJzX2dldF9yYW5nZSwJLyogU0lPQ0dJV1JBTkdFICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCS8qIFNJT0NTSVdQUklWICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCS8qIFNJT0NHSVdQUklWICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCS8qIFNJT0NTSVdTVEFUUyAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DR0lXU1RBVFMgKi8KLQlpd19oYW5kbGVyX3NldF9zcHksCS8qIFNJT0NTSVdTUFkgKi8KLQlpd19oYW5kbGVyX2dldF9zcHksCS8qIFNJT0NHSVdTUFkgKi8KLQlpd19oYW5kbGVyX3NldF90aHJzcHksCS8qIFNJT0NTSVdUSFJTUFkgKi8KLQlpd19oYW5kbGVyX2dldF90aHJzcHksCS8qIFNJT0NHSVdUSFJTUFkgKi8KLQkoaXdfaGFuZGxlcikgbGJzX3NldF93YXAsCS8qIFNJT0NTSVdBUCAqLwotCShpd19oYW5kbGVyKSBsYnNfZ2V0X3dhcCwJLyogU0lPQ0dJV0FQICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCS8qIFNJT0NTSVdNTE1FICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCS8qIFNJT0NHSVdBUExJU1QgLSBkZXByZWNhdGVkICovCi0JKGl3X2hhbmRsZXIpIGxic19zZXRfc2NhbiwJLyogU0lPQ1NJV1NDQU4gKi8KLQkoaXdfaGFuZGxlcikgbGJzX2dldF9zY2FuLAkvKiBTSU9DR0lXU0NBTiAqLwotCShpd19oYW5kbGVyKSBsYnNfc2V0X2Vzc2lkLAkvKiBTSU9DU0lXRVNTSUQgKi8KLQkoaXdfaGFuZGxlcikgbGJzX2dldF9lc3NpZCwJLyogU0lPQ0dJV0VTU0lEICovCi0JKGl3X2hhbmRsZXIpIGxic19zZXRfbmljaywJLyogU0lPQ1NJV05JQ0tOICovCi0JKGl3X2hhbmRsZXIpIGxic19nZXRfbmljaywJLyogU0lPQ0dJV05JQ0tOICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCS8qIC0tIGhvbGUgLS0gKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJLyogLS0gaG9sZSAtLSAqLwotCShpd19oYW5kbGVyKSBsYnNfc2V0X3JhdGUsCS8qIFNJT0NTSVdSQVRFICovCi0JKGl3X2hhbmRsZXIpIGxic19nZXRfcmF0ZSwJLyogU0lPQ0dJV1JBVEUgKi8KLQkoaXdfaGFuZGxlcikgbGJzX3NldF9ydHMsCS8qIFNJT0NTSVdSVFMgKi8KLQkoaXdfaGFuZGxlcikgbGJzX2dldF9ydHMsCS8qIFNJT0NHSVdSVFMgKi8KLQkoaXdfaGFuZGxlcikgbGJzX3NldF9mcmFnLAkvKiBTSU9DU0lXRlJBRyAqLwotCShpd19oYW5kbGVyKSBsYnNfZ2V0X2ZyYWcsCS8qIFNJT0NHSVdGUkFHICovCi0JKGl3X2hhbmRsZXIpIGxic19zZXRfdHhwb3csCS8qIFNJT0NTSVdUWFBPVyAqLwotCShpd19oYW5kbGVyKSBsYnNfZ2V0X3R4cG93LAkvKiBTSU9DR0lXVFhQT1cgKi8KLQkoaXdfaGFuZGxlcikgbGJzX3NldF9yZXRyeSwJLyogU0lPQ1NJV1JFVFJZICovCi0JKGl3X2hhbmRsZXIpIGxic19nZXRfcmV0cnksCS8qIFNJT0NHSVdSRVRSWSAqLwotCShpd19oYW5kbGVyKSBsYnNfc2V0X2VuY29kZSwJLyogU0lPQ1NJV0VOQ09ERSAqLwotCShpd19oYW5kbGVyKSBsYnNfZ2V0X2VuY29kZSwJLyogU0lPQ0dJV0VOQ09ERSAqLwotCShpd19oYW5kbGVyKSBsYnNfc2V0X3Bvd2VyLAkvKiBTSU9DU0lXUE9XRVIgKi8KLQkoaXdfaGFuZGxlcikgbGJzX2dldF9wb3dlciwJLyogU0lPQ0dJV1BPV0VSICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCS8qIC0tIGhvbGUgLS0gKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJLyogLS0gaG9sZSAtLSAqLwotCShpd19oYW5kbGVyKSBsYnNfc2V0X2dlbmllLAkvKiBTSU9DU0lXR0VOSUUgKi8KLQkoaXdfaGFuZGxlcikgbGJzX2dldF9nZW5pZSwJLyogU0lPQ0dJV0dFTklFICovCi0JKGl3X2hhbmRsZXIpIGxic19zZXRfYXV0aCwJLyogU0lPQ1NJV0FVVEggKi8KLQkoaXdfaGFuZGxlcikgbGJzX2dldF9hdXRoLAkvKiBTSU9DR0lXQVVUSCAqLwotCShpd19oYW5kbGVyKSBsYnNfc2V0X2VuY29kZWV4dCwvKiBTSU9DU0lXRU5DT0RFRVhUICovCi0JKGl3X2hhbmRsZXIpIGxic19nZXRfZW5jb2RlZXh0LC8qIFNJT0NHSVdFTkNPREVFWFQgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCS8qIFNJT0NTSVdQTUtTQSAqLwotfTsKLXN0cnVjdCBpd19oYW5kbGVyX2RlZiBsYnNfaGFuZGxlcl9kZWYgPSB7Ci0JLm51bV9zdGFuZGFyZAk9IEFSUkFZX1NJWkUobGJzX2hhbmRsZXIpLAotCS5zdGFuZGFyZAk9IChpd19oYW5kbGVyICopIGxic19oYW5kbGVyLAotCS5nZXRfd2lyZWxlc3Nfc3RhdHMgPSBsYnNfZ2V0X3dpcmVsZXNzX3N0YXRzLAotfTsKLQotI2lmZGVmIENPTkZJR19MSUJFUlRBU19NRVNICi1zdGF0aWMgY29uc3QgaXdfaGFuZGxlciBtZXNoX3dsYW5faGFuZGxlcltdID0gewotCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DU0lXQ09NTUlUICovCi0JKGl3X2hhbmRsZXIpIGxic19nZXRfbmFtZSwJLyogU0lPQ0dJV05BTUUgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ1NJV05XSUQgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ0dJV05XSUQgKi8KLQkoaXdfaGFuZGxlcikgbGJzX21lc2hfc2V0X2ZyZXEsCS8qIFNJT0NTSVdGUkVRICovCi0JKGl3X2hhbmRsZXIpIGxic19nZXRfZnJlcSwJLyogU0lPQ0dJV0ZSRVEgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCS8qIFNJT0NTSVdNT0RFICovCi0JKGl3X2hhbmRsZXIpIG1lc2hfd2xhbl9nZXRfbW9kZSwJLyogU0lPQ0dJV01PREUgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ1NJV1NFTlMgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ0dJV1NFTlMgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ1NJV1JBTkdFICovCi0JKGl3X2hhbmRsZXIpIGxic19nZXRfcmFuZ2UsCS8qIFNJT0NHSVdSQU5HRSAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DU0lXUFJJViAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DR0lXUFJJViAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DU0lXU1RBVFMgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ0dJV1NUQVRTICovCi0JaXdfaGFuZGxlcl9zZXRfc3B5LAkvKiBTSU9DU0lXU1BZICovCi0JaXdfaGFuZGxlcl9nZXRfc3B5LAkvKiBTSU9DR0lXU1BZICovCi0JaXdfaGFuZGxlcl9zZXRfdGhyc3B5LAkvKiBTSU9DU0lXVEhSU1BZICovCi0JaXdfaGFuZGxlcl9nZXRfdGhyc3B5LAkvKiBTSU9DR0lXVEhSU1BZICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCS8qIFNJT0NTSVdBUCAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DR0lXQVAgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ1NJV01MTUUgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ0dJV0FQTElTVCAtIGRlcHJlY2F0ZWQgKi8KLQkoaXdfaGFuZGxlcikgbGJzX3NldF9zY2FuLAkvKiBTSU9DU0lXU0NBTiAqLwotCShpd19oYW5kbGVyKSBsYnNfZ2V0X3NjYW4sCS8qIFNJT0NHSVdTQ0FOICovCi0JKGl3X2hhbmRsZXIpIGxic19tZXNoX3NldF9lc3NpZCwvKiBTSU9DU0lXRVNTSUQgKi8KLQkoaXdfaGFuZGxlcikgbGJzX21lc2hfZ2V0X2Vzc2lkLC8qIFNJT0NHSVdFU1NJRCAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJLyogU0lPQ1NJV05JQ0tOICovCi0JKGl3X2hhbmRsZXIpIG1lc2hfZ2V0X25pY2ssCS8qIFNJT0NHSVdOSUNLTiAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkvKiAtLSBob2xlIC0tICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCS8qIC0tIGhvbGUgLS0gKi8KLQkoaXdfaGFuZGxlcikgbGJzX3NldF9yYXRlLAkvKiBTSU9DU0lXUkFURSAqLwotCShpd19oYW5kbGVyKSBsYnNfZ2V0X3JhdGUsCS8qIFNJT0NHSVdSQVRFICovCi0JKGl3X2hhbmRsZXIpIGxic19zZXRfcnRzLAkvKiBTSU9DU0lXUlRTICovCi0JKGl3X2hhbmRsZXIpIGxic19nZXRfcnRzLAkvKiBTSU9DR0lXUlRTICovCi0JKGl3X2hhbmRsZXIpIGxic19zZXRfZnJhZywJLyogU0lPQ1NJV0ZSQUcgKi8KLQkoaXdfaGFuZGxlcikgbGJzX2dldF9mcmFnLAkvKiBTSU9DR0lXRlJBRyAqLwotCShpd19oYW5kbGVyKSBsYnNfc2V0X3R4cG93LAkvKiBTSU9DU0lXVFhQT1cgKi8KLQkoaXdfaGFuZGxlcikgbGJzX2dldF90eHBvdywJLyogU0lPQ0dJV1RYUE9XICovCi0JKGl3X2hhbmRsZXIpIGxic19zZXRfcmV0cnksCS8qIFNJT0NTSVdSRVRSWSAqLwotCShpd19oYW5kbGVyKSBsYnNfZ2V0X3JldHJ5LAkvKiBTSU9DR0lXUkVUUlkgKi8KLQkoaXdfaGFuZGxlcikgbGJzX3NldF9lbmNvZGUsCS8qIFNJT0NTSVdFTkNPREUgKi8KLQkoaXdfaGFuZGxlcikgbGJzX2dldF9lbmNvZGUsCS8qIFNJT0NHSVdFTkNPREUgKi8KLQkoaXdfaGFuZGxlcikgbGJzX3NldF9wb3dlciwJLyogU0lPQ1NJV1BPV0VSICovCi0JKGl3X2hhbmRsZXIpIGxic19nZXRfcG93ZXIsCS8qIFNJT0NHSVdQT1dFUiAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkvKiAtLSBob2xlIC0tICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCS8qIC0tIGhvbGUgLS0gKi8KLQkoaXdfaGFuZGxlcikgbGJzX3NldF9nZW5pZSwJLyogU0lPQ1NJV0dFTklFICovCi0JKGl3X2hhbmRsZXIpIGxic19nZXRfZ2VuaWUsCS8qIFNJT0NHSVdHRU5JRSAqLwotCShpd19oYW5kbGVyKSBsYnNfc2V0X2F1dGgsCS8qIFNJT0NTSVdBVVRIICovCi0JKGl3X2hhbmRsZXIpIGxic19nZXRfYXV0aCwJLyogU0lPQ0dJV0FVVEggKi8KLQkoaXdfaGFuZGxlcikgbGJzX3NldF9lbmNvZGVleHQsLyogU0lPQ1NJV0VOQ09ERUVYVCAqLwotCShpd19oYW5kbGVyKSBsYnNfZ2V0X2VuY29kZWV4dCwvKiBTSU9DR0lXRU5DT0RFRVhUICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkvKiBTSU9DU0lXUE1LU0EgKi8KLX07Ci0KLXN0cnVjdCBpd19oYW5kbGVyX2RlZiBtZXNoX2hhbmRsZXJfZGVmID0gewotCS5udW1fc3RhbmRhcmQJPSBBUlJBWV9TSVpFKG1lc2hfd2xhbl9oYW5kbGVyKSwKLQkuc3RhbmRhcmQJPSAoaXdfaGFuZGxlciAqKSBtZXNoX3dsYW5faGFuZGxlciwKLQkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gbGJzX2dldF93aXJlbGVzc19zdGF0cywKLX07Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNmMTlmZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy93ZXh0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKioKLSAgKiBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW5pdGlvbiBmb3IgSU9DVEwgY2FsbC4KLSAgKi8KLSNpZm5kZWYJX0xCU19XRVhUX0hfCi0jZGVmaW5lCV9MQlNfV0VYVF9IXwotCi12b2lkIGxic19zZW5kX2Rpc2Nvbm5lY3Rfbm90aWZpY2F0aW9uKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdik7Ci12b2lkIGxic19zZW5kX21pY19mYWlsdXJlZXZlbnQoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1MzIgZXZlbnQpOwotCi1zdHJ1Y3QgY2hhbl9mcmVxX3Bvd2VyICpsYnNfZmluZF9jZnBfYnlfYmFuZF9hbmRfY2hhbm5lbCgKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JdTggYmFuZCwKLQl1MTYgY2hhbm5lbCk7Ci0KLWV4dGVybiBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgbGJzX2hhbmRsZXJfZGVmOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL2lmX3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvaWZfdXNiLmMKaW5kZXggYzQ0NTUwMC4uYjE3MmY1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvaWZfdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvaWZfdXNiLmMKQEAgLTUzOCw3ICs1MzgsOCBAQAogCQlyZXR1cm47CiAJfQogCi0Jc3luY2Z3aGVhZGVyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGZ3c3luY2hlYWRlciksIEdGUF9BVE9NSUMpOworCXN5bmNmd2hlYWRlciA9IGttZW1kdXAoc2tiLT5kYXRhLCBzaXplb2Yoc3RydWN0IGZ3c3luY2hlYWRlciksCisJCQkgICAgICAgR0ZQX0FUT01JQyk7CiAJaWYgKCFzeW5jZndoZWFkZXIpIHsKIAkJbGJ0Zl9kZWJfdXNiZCgmY2FyZHAtPnVkZXYtPmRldiwgIkZhaWx1cmUgdG8gYWxsb2NhdGUgc3luY2Z3aGVhZGVyXG4iKTsKIAkJa2ZyZWVfc2tiKHNrYik7CkBAIC01NDYsOCArNTQ3LDYgQEAKIAkJcmV0dXJuOwogCX0KIAotCW1lbWNweShzeW5jZndoZWFkZXIsIHNrYi0+ZGF0YSwgc2l6ZW9mKHN0cnVjdCBmd3N5bmNoZWFkZXIpKTsKLQogCWlmICghc3luY2Z3aGVhZGVyLT5jbWQpIHsKIAkJbGJ0Zl9kZWJfdXNiMigmY2FyZHAtPnVkZXYtPmRldiwgIkZXIHJlY2VpdmVkIEJsayB3aXRoIGNvcnJlY3QgQ1JDXG4iKTsKIAkJbGJ0Zl9kZWJfdXNiMigmY2FyZHAtPnVkZXYtPmRldiwgIkZXIHJlY2VpdmVkIEJsayBzZXFudW0gPSAlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL2xpYmVydGFzX3RmLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9saWJlcnRhc190Zi5oCmluZGV4IGZiYmFhYWUuLmFkNzdiOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL2xpYmVydGFzX3RmLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvbGliZXJ0YXNfdGYuaApAQCAtMjUzLDYgKzI1Myw5IEBACiAJdTggZndfcmVhZHk7CiAJdTggc3VycHJpc2VyZW1vdmVkOwogCXN0cnVjdCBza19idWZmX2hlYWQgYmNfcHNfYnVmOworCisJLyogTW9zdCByZWNlbnRseSByZXBvcnRlZCBub2lzZSBpbiBkQm0gKi8KKwlzOCBub2lzZTsKIH07CiAKIC8qIDgwMi4xMS1yZWxhdGVkIGRlZmluaXRpb25zICovCkBAIC0zMTYsNyArMzE5LDcgQEAKIAlfX2xlMTYgc2l6ZTsKIAlfX2xlMTYgc2VxbnVtOwogCV9fbGUxNiByZXN1bHQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBjbWRfY3RybF9ub2RlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CkBAIC0zNjksNyArMzcyLDcgQEAKIAogCS8qRlcvSFcgY2FwYWJpbGl0eSAqLwogCV9fbGUzMiBmd2NhcGluZm87Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBjbWRfZHNfbWFjX2NvbnRyb2wgewogCXN0cnVjdCBjbWRfaGVhZGVyIGhkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL21haW4uYwppbmRleCA4MTdmZmZjLi45Mjc4YjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvbWFpbi5jCkBAIC01MjUsNiArNTI1LDIyIEBACiAJbGJ0Zl9kZWJfbGVhdmUoTEJURl9ERUJfTUFDT1BTKTsKIH0KIAorc3RhdGljIGludCBsYnRmX29wX2dldF9zdXJ2ZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBpZHgsCisJCQkJc3RydWN0IHN1cnZleV9pbmZvICpzdXJ2ZXkpCit7CisJc3RydWN0IGxidGZfcHJpdmF0ZSAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKKworCWlmIChpZHggIT0gMCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlzdXJ2ZXktPmNoYW5uZWwgPSBjb25mLT5jaGFubmVsOworCXN1cnZleS0+ZmlsbGVkID0gU1VSVkVZX0lORk9fTk9JU0VfREJNOworCXN1cnZleS0+bm9pc2UgPSBwcml2LT5ub2lzZTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgbGJ0Zl9vcHMgPSB7CiAJLnR4CQkJPSBsYnRmX29wX3R4LAogCS5zdGFydAkJCT0gbGJ0Zl9vcF9zdGFydCwKQEAgLTUzNSw2ICs1NTEsNyBAQAogCS5wcmVwYXJlX211bHRpY2FzdAk9IGxidGZfb3BfcHJlcGFyZV9tdWx0aWNhc3QsCiAJLmNvbmZpZ3VyZV9maWx0ZXIJPSBsYnRmX29wX2NvbmZpZ3VyZV9maWx0ZXIsCiAJLmJzc19pbmZvX2NoYW5nZWQJPSBsYnRmX29wX2Jzc19pbmZvX2NoYW5nZWQsCisJLmdldF9zdXJ2ZXkJCT0gbGJ0Zl9vcF9nZXRfc3VydmV5LAogfTsKIAogaW50IGxidGZfcngoc3RydWN0IGxidGZfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTU1NSw2ICs1NzIsNyBAQAogCXN0YXRzLmZyZXEgPSBwcml2LT5jdXJfZnJlcTsKIAlzdGF0cy5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKIAlzdGF0cy5zaWduYWwgPSBwcnhwZC0+c25yOworCXByaXYtPm5vaXNlID0gcHJ4cGQtPm5mOwogCS8qIE1hcnZlbGwgcmF0ZSBpbmRleCBoYXMgYSBob2xlIGF0IHZhbHVlIDQgKi8KIAlpZiAocHJ4cGQtPnJ4X3JhdGUgPiA0KQogCQktLXByeHBkLT5yeF9yYXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMKaW5kZXggNmY4Y2IzZS4uMDFhZDdmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jCkBAIC0zMTcsNyArMzE3LDcgQEAKIAl1OCBydF9yYXRlOwogCV9fbGUxNiBydF9jaGFubmVsOwogCV9fbGUxNiBydF9jaGJpdG1hc2s7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIAogc3RhdGljIG5ldGRldl90eF90IGh3c2ltX21vbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCkBAIC00ODYsOCArNDg2LDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyByeF9zdGF0dXM7CiAKIAlpZiAoZGF0YS0+aWRsZSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRyeWluZyB0byBUWCB3aGVuIGlkbGUgLSByZWplY3RcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOworCQl3aXBoeV9kZWJ1Zyhody0+d2lwaHksICJ0cnlpbmcgdG8gdHggd2hlbiBpZGxlIC0gcmVqZWN0XG4iKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtNTc2LDcgKzU3NSw3IEBACiBzdGF0aWMgaW50IG1hYzgwMjExX2h3c2ltX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhID0gaHctPnByaXY7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiVzXG4iLCB3aXBoeV9uYW1lKGh3LT53aXBoeSksIF9fZnVuY19fKTsKKwl3aXBoeV9kZWJ1Zyhody0+d2lwaHksICIlc1xuIiwgX19mdW5jX18pOwogCWRhdGEtPnN0YXJ0ZWQgPSAxOwogCXJldHVybiAwOwogfQpAQCAtNTg3LDE2ICs1ODYsMTUgQEAKIAlzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSA9IGh3LT5wcml2OwogCWRhdGEtPnN0YXJ0ZWQgPSAwOwogCWRlbF90aW1lcigmZGF0YS0+YmVhY29uX3RpbWVyKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6JXNcbiIsIHdpcGh5X25hbWUoaHctPndpcGh5KSwgX19mdW5jX18pOworCXdpcGh5X2RlYnVnKGh3LT53aXBoeSwgIiVzXG4iLCBfX2Z1bmNfXyk7CiB9CiAKIAogc3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewotCXByaW50ayhLRVJOX0RFQlVHICIlczolcyAodHlwZT0lZCBtYWNfYWRkcj0lcE0pXG4iLAotCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSksIF9fZnVuY19fLCB2aWYtPnR5cGUsCi0JICAgICAgIHZpZi0+YWRkcik7CisJd2lwaHlfZGVidWcoaHctPndpcGh5LCAiJXMgKHR5cGU9JWQgbWFjX2FkZHI9JXBNKVxuIiwKKwkJICAgIF9fZnVuY19fLCB2aWYtPnR5cGUsIHZpZi0+YWRkcik7CiAJaHdzaW1fc2V0X21hZ2ljKHZpZik7CiAJcmV0dXJuIDA7CiB9CkBAIC02MDUsOSArNjAzLDggQEAKIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX3JlbW92ZV9pbnRlcmZhY2UoCiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiVzICh0eXBlPSVkIG1hY19hZGRyPSVwTSlcbiIsCi0JICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSwgX19mdW5jX18sIHZpZi0+dHlwZSwKLQkgICAgICAgdmlmLT5hZGRyKTsKKwl3aXBoeV9kZWJ1Zyhody0+d2lwaHksICIlcyAodHlwZT0lZCBtYWNfYWRkcj0lcE0pXG4iLAorCQkgICAgX19mdW5jX18sIHZpZi0+dHlwZSwgdmlmLT5hZGRyKTsKIAlod3NpbV9jaGVja19tYWdpYyh2aWYpOwogCWh3c2ltX2NsZWFyX21hZ2ljKHZpZik7CiB9CkBAIC02NzAsMTMgKzY2NywxNCBAQAogCQlbSUVFRTgwMjExX1NNUFNfRFlOQU1JQ10gPSAiZHluYW1pYyIsCiAJfTsKIAotCXByaW50ayhLRVJOX0RFQlVHICIlczolcyAoZnJlcT0lZC8lcyBpZGxlPSVkIHBzPSVkIHNtcHM9JXMpXG4iLAotCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSksIF9fZnVuY19fLAotCSAgICAgICBjb25mLT5jaGFubmVsLT5jZW50ZXJfZnJlcSwKLQkgICAgICAgaHdzaW1fY2hhbnR5cGVzW2NvbmYtPmNoYW5uZWxfdHlwZV0sCi0JICAgICAgICEhKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfSURMRSksCi0JICAgICAgICEhKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpLAotCSAgICAgICBzbXBzX21vZGVzW2NvbmYtPnNtcHNfbW9kZV0pOworCXdpcGh5X2RlYnVnKGh3LT53aXBoeSwKKwkJICAgICIlcyAoZnJlcT0lZC8lcyBpZGxlPSVkIHBzPSVkIHNtcHM9JXMpXG4iLAorCQkgICAgX19mdW5jX18sCisJCSAgICBjb25mLT5jaGFubmVsLT5jZW50ZXJfZnJlcSwKKwkJICAgIGh3c2ltX2NoYW50eXBlc1tjb25mLT5jaGFubmVsX3R5cGVdLAorCQkgICAgISEoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9JRExFKSwKKwkJICAgICEhKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpLAorCQkgICAgc21wc19tb2Rlc1tjb25mLT5zbXBzX21vZGVdKTsKIAogCWRhdGEtPmlkbGUgPSAhIShjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX0lETEUpOwogCkBAIC02OTYsNyArNjk0LDcgQEAKIHsKIAlzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSA9IGh3LT5wcml2OwogCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiVzXG4iLCB3aXBoeV9uYW1lKGh3LT53aXBoeSksIF9fZnVuY19fKTsKKwl3aXBoeV9kZWJ1Zyhody0+d2lwaHksICIlc1xuIiwgX19mdW5jX18pOwogCiAJZGF0YS0+cnhfZmlsdGVyID0gMDsKIAlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKQpAQCAtNzE3LDI2ICs3MTUsMjMgQEAKIAogCWh3c2ltX2NoZWNrX21hZ2ljKHZpZik7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6JXMoY2hhbmdlZD0weCV4KVxuIiwKLQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLCBfX2Z1bmNfXywgY2hhbmdlZCk7CisJd2lwaHlfZGVidWcoaHctPndpcGh5LCAiJXMoY2hhbmdlZD0weCV4KVxuIiwgX19mdW5jX18sIGNoYW5nZWQpOwogCiAJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CU1NJRCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6JXM6IEJTU0lEIGNoYW5nZWQ6ICVwTVxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSwgX19mdW5jX18sCi0JCSAgICAgICBpbmZvLT5ic3NpZCk7CisJCXdpcGh5X2RlYnVnKGh3LT53aXBoeSwgIiVzOiBCU1NJRCBjaGFuZ2VkOiAlcE1cbiIsCisJCQkgICAgX19mdW5jX18sIGluZm8tPmJzc2lkKTsKIAkJbWVtY3B5KHZwLT5ic3NpZCwgaW5mby0+YnNzaWQsIEVUSF9BTEVOKTsKIAl9CiAKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FTU09DKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIgICVzOiBBU1NPQzogYXNzb2M9JWQgYWlkPSVkXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLCBpbmZvLT5hc3NvYywgaW5mby0+YWlkKTsKKwkJd2lwaHlfZGVidWcoaHctPndpcGh5LCAiICBBU1NPQzogYXNzb2M9JWQgYWlkPSVkXG4iLAorCQkJICAgIGluZm8tPmFzc29jLCBpbmZvLT5haWQpOwogCQl2cC0+YXNzb2MgPSBpbmZvLT5hc3NvYzsKIAkJdnAtPmFpZCA9IGluZm8tPmFpZDsKIAl9CiAKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTl9JTlQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgJXM6IEJDTklOVDogJWRcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSksIGluZm8tPmJlYWNvbl9pbnQpOworCQl3aXBoeV9kZWJ1Zyhody0+d2lwaHksICIgIEJDTklOVDogJWRcbiIsIGluZm8tPmJlYWNvbl9pbnQpOwogCQlkYXRhLT5iZWFjb25faW50ID0gMTAyNCAqIGluZm8tPmJlYWNvbl9pbnQgLyAxMDAwICogSFogLyAxMDAwOwogCQlpZiAoV0FSTl9PTighZGF0YS0+YmVhY29uX2ludCkpCiAJCQlkYXRhLT5iZWFjb25faW50ID0gMTsKQEAgLTc0NiwzMSArNzQxLDI4IEBACiAJfQogCiAJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfQ1RTX1BST1QpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgJXM6IEVSUF9DVFNfUFJPVDogJWRcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSksIGluZm8tPnVzZV9jdHNfcHJvdCk7CisJCXdpcGh5X2RlYnVnKGh3LT53aXBoeSwgIiAgRVJQX0NUU19QUk9UOiAlZFxuIiwKKwkJCSAgICBpbmZvLT51c2VfY3RzX3Byb3QpOwogCX0KIAogCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQX1BSRUFNQkxFKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIgICVzOiBFUlBfUFJFQU1CTEU6ICVkXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLCBpbmZvLT51c2Vfc2hvcnRfcHJlYW1ibGUpOworCQl3aXBoeV9kZWJ1Zyhody0+d2lwaHksICIgIEVSUF9QUkVBTUJMRTogJWRcbiIsCisJCQkgICAgaW5mby0+dXNlX3Nob3J0X3ByZWFtYmxlKTsKIAl9CiAKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9TTE9UKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIgICVzOiBFUlBfU0xPVDogJWRcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSksIGluZm8tPnVzZV9zaG9ydF9zbG90KTsKKwkJd2lwaHlfZGVidWcoaHctPndpcGh5LCAiICBFUlBfU0xPVDogJWRcbiIsIGluZm8tPnVzZV9zaG9ydF9zbG90KTsKIAl9CiAKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0hUKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIgICVzOiBIVDogb3BfbW9kZT0weCV4LCBjaGFudHlwZT0lc1xuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSwKLQkJICAgICAgIGluZm8tPmh0X29wZXJhdGlvbl9tb2RlLAotCQkgICAgICAgaHdzaW1fY2hhbnR5cGVzW2luZm8tPmNoYW5uZWxfdHlwZV0pOworCQl3aXBoeV9kZWJ1Zyhody0+d2lwaHksICIgIEhUOiBvcF9tb2RlPTB4JXgsIGNoYW50eXBlPSVzXG4iLAorCQkJICAgIGluZm8tPmh0X29wZXJhdGlvbl9tb2RlLAorCQkJICAgIGh3c2ltX2NoYW50eXBlc1tpbmZvLT5jaGFubmVsX3R5cGVdKTsKIAl9CiAKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JBU0lDX1JBVEVTKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIgICVzOiBCQVNJQ19SQVRFUzogMHglbGx4XG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgaW5mby0+YmFzaWNfcmF0ZXMpOworCQl3aXBoeV9kZWJ1Zyhody0+d2lwaHksICIgIEJBU0lDX1JBVEVTOiAweCVsbHhcbiIsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgaW5mby0+YmFzaWNfcmF0ZXMpOwogCX0KIH0KIApAQCAtODI0LDEwICs4MTYsMTEgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlLAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpCiB7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiVzIChxdWV1ZT0lZCB0eG9wPSVkIGN3X21pbj0lZCBjd19tYXg9JWQgIgotCSAgICAgICAiYWlmcz0lZClcbiIsCi0JICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSwgX19mdW5jX18sIHF1ZXVlLAotCSAgICAgICBwYXJhbXMtPnR4b3AsIHBhcmFtcy0+Y3dfbWluLCBwYXJhbXMtPmN3X21heCwgcGFyYW1zLT5haWZzKTsKKwl3aXBoeV9kZWJ1Zyhody0+d2lwaHksCisJCSAgICAiJXMgKHF1ZXVlPSVkIHR4b3A9JWQgY3dfbWluPSVkIGN3X21heD0lZCBhaWZzPSVkKVxuIiwKKwkJICAgIF9fZnVuY19fLCBxdWV1ZSwKKwkJICAgIHBhcmFtcy0+dHhvcCwgcGFyYW1zLT5jd19taW4sCisJCSAgICBwYXJhbXMtPmN3X21heCwgcGFyYW1zLT5haWZzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODM3LDggKzgzMCw3IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiVzIChpZHg9JWQpXG4iLAotCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSksIF9fZnVuY19fLCBpZHgpOworCXdpcGh5X2RlYnVnKGh3LT53aXBoeSwgIiVzIChpZHg9JWQpXG4iLCBfX2Z1bmNfXywgaWR4KTsKIAogCWlmIChpZHggIT0gMCkKIAkJcmV0dXJuIC1FTk9FTlQ7CkBAIC0xMTA4LDggKzExMDAsOSBAQAogCWlmICghdnAtPmFzc29jKQogCQlyZXR1cm47CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6JXM6IHNlbmQgUFMtUG9sbCB0byAlcE0gZm9yIGFpZCAlZFxuIiwKLQkgICAgICAgd2lwaHlfbmFtZShkYXRhLT5ody0+d2lwaHkpLCBfX2Z1bmNfXywgdnAtPmJzc2lkLCB2cC0+YWlkKTsKKwl3aXBoeV9kZWJ1ZyhkYXRhLT5ody0+d2lwaHksCisJCSAgICAiJXM6IHNlbmQgUFMtUG9sbCB0byAlcE0gZm9yIGFpZCAlZFxuIiwKKwkJICAgIF9fZnVuY19fLCB2cC0+YnNzaWQsIHZwLT5haWQpOwogCiAJc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoKnBzcG9sbCkpOwogCWlmICghc2tiKQpAQCAtMTEzNyw4ICsxMTMwLDkgQEAKIAlpZiAoIXZwLT5hc3NvYykKIAkJcmV0dXJuOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiVzOiBzZW5kIGRhdGE6Om51bGxmdW5jIHRvICVwTSBwcz0lZFxuIiwKLQkgICAgICAgd2lwaHlfbmFtZShkYXRhLT5ody0+d2lwaHkpLCBfX2Z1bmNfXywgdnAtPmJzc2lkLCBwcyk7CisJd2lwaHlfZGVidWcoZGF0YS0+aHctPndpcGh5LAorCQkgICAgIiVzOiBzZW5kIGRhdGE6Om51bGxmdW5jIHRvICVwTSBwcz0lZFxuIiwKKwkJICAgIF9fZnVuY19fLCB2cC0+YnNzaWQsIHBzKTsKIAogCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKCpoZHIpKTsKIAlpZiAoIXNrYikKQEAgLTEyOTEsNiArMTI4NSwxMSBAQAogCQlody0+d2lwaHktPm5fYWRkcmVzc2VzID0gMjsKIAkJaHctPndpcGh5LT5hZGRyZXNzZXMgPSBkYXRhLT5hZGRyZXNzZXM7CiAKKwkJaWYgKGZha2VfaHdfc2NhbikgeworCQkJaHctPndpcGh5LT5tYXhfc2Nhbl9zc2lkcyA9IDI1NTsKKwkJCWh3LT53aXBoeS0+bWF4X3NjYW5faWVfbGVuID0gSUVFRTgwMjExX01BWF9EQVRBX0xFTjsKKwkJfQorCiAJCWh3LT5jaGFubmVsX2NoYW5nZV90aW1lID0gMTsKIAkJaHctPnF1ZXVlcyA9IDQ7CiAJCWh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0KQEAgLTE0NjgsOSArMTQ2Nyw4IEBACiAJCQlicmVhazsKIAkJfQogCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogaHdhZGRyICVwTSByZWdpc3RlcmVkXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLAotCQkgICAgICAgaHctPndpcGh5LT5wZXJtX2FkZHIpOworCQl3aXBoeV9kZWJ1Zyhody0+d2lwaHksICJod2FkZHIgJXBtIHJlZ2lzdGVyZWRcbiIsCisJCQkgICAgaHctPndpcGh5LT5wZXJtX2FkZHIpOwogCiAJCWRhdGEtPmRlYnVnZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImh3c2ltIiwKIAkJCQkJCSAgIGh3LT53aXBoeS0+ZGVidWdmc2Rpcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYwppbmRleCA4MDhhZGI5Li5kNzYxZWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMKQEAgLTg2LDcgKzg2LDcgQEAKIAl2b2lkICgqcnhkX2luaXQpKHZvaWQgKnJ4ZCwgZG1hX2FkZHJfdCBuZXh0X2RtYV9hZGRyKTsKIAl2b2lkICgqcnhkX3JlZmlsbCkodm9pZCAqcnhkLCBkbWFfYWRkcl90IGFkZHIsIGludCBsZW4pOwogCWludCAoKnJ4ZF9wcm9jZXNzKSh2b2lkICpyeGQsIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMsCi0JCQkgICBfX2xlMTYgKnFvcyk7CisJCQkgICBfX2xlMTYgKnFvcywgczggKm5vaXNlKTsKIH07CiAKIHN0cnVjdCBtd2w4a19kZXZpY2VfaW5mbyB7CkBAIC0xMDksNyArMTA5LDcgQEAKIAlkbWFfYWRkcl90IHJ4ZF9kbWE7CiAJc3RydWN0IHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkJREVDTEFSRV9QQ0lfVU5NQVBfQUREUihkbWEpCisJCURFRklORV9ETUFfVU5NQVBfQUREUihkbWEpOwogCX0gKmJ1ZjsKIH07CiAKQEAgLTIwNyw2ICsyMDcsOSBAQAogCiAJLyogVGFza2xldCB0byBwZXJmb3JtIFJYLiAgKi8KIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcG9sbF9yeF90YXNrOworCisJLyogTW9zdCByZWNlbnRseSByZXBvcnRlZCBub2lzZSBpbiBkQm0gKi8KKwlzOCBub2lzZTsKIH07CiAKIC8qIFBlciBpbnRlcmZhY2Ugc3BlY2lmaWMgcHJpdmF0ZSBkYXRhICovCkBAIC0zMTQsMTMgKzMxNywxNSBAQAogI2RlZmluZSBNV0w4S19DTURfU0VUX05FV19TVE4JCTB4MTExMQkJLyogcGVyLXZpZiAqLwogI2RlZmluZSBNV0w4S19DTURfVVBEQVRFX1NUQURCCQkweDExMjMKIAotc3RhdGljIGNvbnN0IGNoYXIgKm13bDhrX2NtZF9uYW1lKHUxNiBjbWQsIGNoYXIgKmJ1ZiwgaW50IGJ1ZnNpemUpCitzdGF0aWMgY29uc3QgY2hhciAqbXdsOGtfY21kX25hbWUoX19sZTE2IGNtZCwgY2hhciAqYnVmLCBpbnQgYnVmc2l6ZSkKIHsKKwl1MTYgY29tbWFuZCA9IGxlMTZfdG9fY3B1KGNtZCk7CisKICNkZWZpbmUgTVdMOEtfQ01ETkFNRSh4KQljYXNlIE1XTDhLX0NNRF8jI3g6IGRvIHtcCiAJCQkJCXNucHJpbnRmKGJ1ZiwgYnVmc2l6ZSwgIiVzIiwgI3gpO1wKIAkJCQkJcmV0dXJuIGJ1ZjtcCiAJCQkJCX0gd2hpbGUgKDApCi0Jc3dpdGNoIChjbWQgJiB+MHg4MDAwKSB7CisJc3dpdGNoIChjb21tYW5kICYgfjB4ODAwMCkgewogCQlNV0w4S19DTUROQU1FKENPREVfRE5MRCk7CiAJCU1XTDhLX0NNRE5BTUUoR0VUX0hXX1NQRUMpOwogCQlNV0w4S19DTUROQU1FKFNFVF9IV19TUEVDKTsKQEAgLTQyNiw3ICs0MzEsNyBAQAogCV9fdTgJbWFjaWQ7CiAJX19sZTE2CXJlc3VsdDsKIAljaGFyCXBheWxvYWRbMF07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoKICAqIEZpcm13YXJlIGxvYWRpbmcuCkBAIC02MzIsNyArNjM3LDcgQEAKIAlfX2xlMTYgZndsZW47CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgd2g7CiAJY2hhciBkYXRhWzBdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIFJvdXRpbmVzIHRvIGFkZC9yZW1vdmUgRE1BIGhlYWRlciBmcm9tIHNrYi4gICovCiBzdGF0aWMgaW5saW5lIHZvaWQgbXdsOGtfcmVtb3ZlX2RtYV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19sZTE2IHFvcykKQEAgLTcxMSw3ICs3MTYsNyBAQAogCV9fdTggcnhfc3RhdHVzOwogCV9fdTggY2hhbm5lbDsKIAlfX3U4IHJ4X2N0cmw7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBNV0w4S184MzY2X0FQX1JBVEVfSU5GT19NQ1NfRk9STUFUCTB4ODAKICNkZWZpbmUgTVdMOEtfODM2Nl9BUF9SQVRFX0lORk9fNDBNSFoJCTB4NDAKQEAgLTczOSw3ICs3NDQsNyBAQAogCiBzdGF0aWMgaW50CiBtd2w4a19yeGRfODM2Nl9hcF9wcm9jZXNzKHZvaWQgKl9yeGQsIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMsCi0JCQkgIF9fbGUxNiAqcW9zKQorCQkJICBfX2xlMTYgKnFvcywgczggKm5vaXNlKQogewogCXN0cnVjdCBtd2w4a19yeGRfODM2Nl9hcCAqcnhkID0gX3J4ZDsKIApAQCAtNzUwLDYgKzc1NSw3IEBACiAJbWVtc2V0KHN0YXR1cywgMCwgc2l6ZW9mKCpzdGF0dXMpKTsKIAogCXN0YXR1cy0+c2lnbmFsID0gLXJ4ZC0+cnNzaTsKKwkqbm9pc2UgPSAtcnhkLT5ub2lzZV9mbG9vcjsKIAogCWlmIChyeGQtPnJhdGUgJiBNV0w4S184MzY2X0FQX1JBVEVfSU5GT19NQ1NfRk9STUFUKSB7CiAJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0hUOwpAQCAtODA2LDcgKzgxMiw3IEBACiAJX191OCByeF9jdHJsOwogCV9fdTggcnhfc3RhdHVzOwogCV9fdTggcGFkMlsyXTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIE1XTDhLX1NUQV9SQVRFX0lORk9fU0hPUlRQUkUJCTB4ODAwMAogI2RlZmluZSBNV0w4S19TVEFfUkFURV9JTkZPX0FOVFNFTEVDVCh4KQkoKCh4KSA+PiAxMSkgJiAweDMpCkBAIC04MzcsNyArODQzLDcgQEAKIAogc3RhdGljIGludAogbXdsOGtfcnhkX3N0YV9wcm9jZXNzKHZvaWQgKl9yeGQsIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMsCi0JCSAgICAgICBfX2xlMTYgKnFvcykKKwkJICAgICAgIF9fbGUxNiAqcW9zLCBzOCAqbm9pc2UpCiB7CiAJc3RydWN0IG13bDhrX3J4ZF9zdGEgKnJ4ZCA9IF9yeGQ7CiAJdTE2IHJhdGVfaW5mbzsKQEAgLTg1MSw2ICs4NTcsNyBAQAogCW1lbXNldChzdGF0dXMsIDAsIHNpemVvZigqc3RhdHVzKSk7CiAKIAlzdGF0dXMtPnNpZ25hbCA9IC1yeGQtPnJzc2k7CisJKm5vaXNlID0gLXJ4ZC0+bm9pc2VfbGV2ZWw7CiAJc3RhdHVzLT5hbnRlbm5hID0gTVdMOEtfU1RBX1JBVEVfSU5GT19BTlRTRUxFQ1QocmF0ZV9pbmZvKTsKIAlzdGF0dXMtPnJhdGVfaWR4ID0gTVdMOEtfU1RBX1JBVEVfSU5GT19SQVRFSUQocmF0ZV9pbmZvKTsKIApAQCAtOTAzLDE2ICs5MTAsMTQgQEAKIAogCXJ4cS0+cnhkID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocHJpdi0+cGRldiwgc2l6ZSwgJnJ4cS0+cnhkX2RtYSk7CiAJaWYgKHJ4cS0+cnhkID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jIFJYIGRlc2NyaXB0b3JzXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxlZCB0byBhbGxvYyByeCBkZXNjcmlwdG9yc1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAltZW1zZXQocnhxLT5yeGQsIDAsIHNpemUpOwogCiAJcnhxLT5idWYgPSBrbWFsbG9jKE1XTDhLX1JYX0RFU0NTICogc2l6ZW9mKCpyeHEtPmJ1ZiksIEdGUF9LRVJORUwpOwogCWlmIChyeHEtPmJ1ZiA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvYyBSWCBza2J1ZmYgbGlzdFxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJCXdpcGh5X2Vycihody0+d2lwaHksICJmYWlsZWQgdG8gYWxsb2Mgcnggc2tidWZmIGxpc3RcbiIpOwogCQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBkZXYsIHNpemUsIHJ4cS0+cnhkLCByeHEtPnJ4ZF9kbWEpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC05NjMsNyArOTY4LDcgQEAKIAkJaWYgKHJ4cS0+dGFpbCA9PSBNV0w4S19SWF9ERVNDUykKIAkJCXJ4cS0+dGFpbCA9IDA7CiAJCXJ4cS0+YnVmW3J4XS5za2IgPSBza2I7Ci0JCXBjaV91bm1hcF9hZGRyX3NldCgmcnhxLT5idWZbcnhdLCBkbWEsIGFkZHIpOworCQlkbWFfdW5tYXBfYWRkcl9zZXQoJnJ4cS0+YnVmW3J4XSwgZG1hLCBhZGRyKTsKIAogCQlyeGQgPSByeHEtPnJ4ZCArIChyeCAqIHByaXYtPnJ4ZF9vcHMtPnJ4ZF9zaXplKTsKIAkJcHJpdi0+cnhkX29wcy0+cnhkX3JlZmlsbChyeGQsIGFkZHIsIE1XTDhLX1JYX01BWFNaKTsKQEAgLTk4NCw5ICs5ODksOSBAQAogCWZvciAoaSA9IDA7IGkgPCBNV0w4S19SWF9ERVNDUzsgaSsrKSB7CiAJCWlmIChyeHEtPmJ1ZltpXS5za2IgIT0gTlVMTCkgewogCQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LAotCQkJCQkgcGNpX3VubWFwX2FkZHIoJnJ4cS0+YnVmW2ldLCBkbWEpLAorCQkJCQkgZG1hX3VubWFwX2FkZHIoJnJ4cS0+YnVmW2ldLCBkbWEpLAogCQkJCQkgTVdMOEtfUlhfTUFYU1osIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlwY2lfdW5tYXBfYWRkcl9zZXQoJnJ4cS0+YnVmW2ldLCBkbWEsIDApOworCQkJZG1hX3VubWFwX2FkZHJfc2V0KCZyeHEtPmJ1ZltpXSwgZG1hLCAwKTsKIAogCQkJa2ZyZWVfc2tiKHJ4cS0+YnVmW2ldLnNrYik7CiAJCQlyeHEtPmJ1ZltpXS5za2IgPSBOVUxMOwpAQCAtMTA1MywxNiArMTA1OCwxNyBAQAogCiAJCXJ4ZCA9IHJ4cS0+cnhkICsgKHJ4cS0+aGVhZCAqIHByaXYtPnJ4ZF9vcHMtPnJ4ZF9zaXplKTsKIAotCQlwa3RfbGVuID0gcHJpdi0+cnhkX29wcy0+cnhkX3Byb2Nlc3MocnhkLCAmc3RhdHVzLCAmcW9zKTsKKwkJcGt0X2xlbiA9IHByaXYtPnJ4ZF9vcHMtPnJ4ZF9wcm9jZXNzKHJ4ZCwgJnN0YXR1cywgJnFvcywKKwkJCQkJCQkmcHJpdi0+bm9pc2UpOwogCQlpZiAocGt0X2xlbiA8IDApCiAJCQlicmVhazsKIAogCQlyeHEtPmJ1ZltyeHEtPmhlYWRdLnNrYiA9IE5VTEw7CiAKIAkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LAotCQkJCSBwY2lfdW5tYXBfYWRkcigmcnhxLT5idWZbcnhxLT5oZWFkXSwgZG1hKSwKKwkJCQkgZG1hX3VubWFwX2FkZHIoJnJ4cS0+YnVmW3J4cS0+aGVhZF0sIGRtYSksCiAJCQkJIE1XTDhLX1JYX01BWFNaLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQlwY2lfdW5tYXBfYWRkcl9zZXQoJnJ4cS0+YnVmW3J4cS0+aGVhZF0sIGRtYSwgMCk7CisJCWRtYV91bm1hcF9hZGRyX3NldCgmcnhxLT5idWZbcnhxLT5oZWFkXSwgZG1hLCAwKTsKIAogCQlyeHEtPmhlYWQrKzsKIAkJaWYgKHJ4cS0+aGVhZCA9PSBNV0w4S19SWF9ERVNDUykKQEAgLTExMjAsNyArMTEyNiw3IEBACiAJX19sZTE2IHJhdGVfaW5mbzsKIAlfX3U4IHBlZXJfaWQ7CiAJX191OCB0eF9mcmFnX2NudDsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIE1XTDhLX1RYX0RFU0NTCQkxMjgKIApAQCAtMTEzOSwxNiArMTE0NSwxNCBAQAogCiAJdHhxLT50eGQgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwcml2LT5wZGV2LCBzaXplLCAmdHhxLT50eGRfZG1hKTsKIAlpZiAodHhxLT50eGQgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2MgVFggZGVzY3JpcHRvcnNcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOworCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiZmFpbGVkIHRvIGFsbG9jIHR4IGRlc2NyaXB0b3JzXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW1lbXNldCh0eHEtPnR4ZCwgMCwgc2l6ZSk7CiAKIAl0eHEtPnNrYiA9IGttYWxsb2MoTVdMOEtfVFhfREVTQ1MgKiBzaXplb2YoKnR4cS0+c2tiKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHR4cS0+c2tiID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jIFRYIHNrYnVmZiBsaXN0XG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxlZCB0byBhbGxvYyB0eCBza2J1ZmYgbGlzdFxuIik7CiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGRldiwgc2l6ZSwgdHhxLT50eGQsIHR4cS0+dHhkX2RtYSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTEyMDQsMTEgKzEyMDgsMTIgQEAKIAkJCQl1bnVzZWQrKzsKIAkJfQogCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHR4cVslZF0gbGVuPSVkIGhlYWQ9JWQgdGFpbD0lZCAiCi0JCSAgICAgICAiZndfb3duZWQ9JWQgZHJ2X293bmVkPSVkIHVudXNlZD0lZFxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSwgaSwKLQkJICAgICAgIHR4cS0+bGVuLCB0eHEtPmhlYWQsIHR4cS0+dGFpbCwKLQkJICAgICAgIGZ3X293bmVkLCBkcnZfb3duZWQsIHVudXNlZCk7CisJCXdpcGh5X2Vycihody0+d2lwaHksCisJCQkgICJ0eHFbJWRdIGxlbj0lZCBoZWFkPSVkIHRhaWw9JWQgIgorCQkJICAiZndfb3duZWQ9JWQgZHJ2X293bmVkPSVkIHVudXNlZD0lZFxuIiwKKwkJCSAgaSwKKwkJCSAgdHhxLT5sZW4sIHR4cS0+aGVhZCwgdHhxLT50YWlsLAorCQkJICBmd19vd25lZCwgZHJ2X293bmVkLCB1bnVzZWQpOwogCX0KIH0KIApAQCAtMTI1MiwyNSArMTI1NywyMyBAQAogCQlpZiAodGltZW91dCkgewogCQkJV0FSTl9PTihwcml2LT5wZW5kaW5nX3R4X3BrdHMpOwogCQkJaWYgKHJldHJ5KSB7Ci0JCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogdHggcmluZ3MgZHJhaW5lZFxuIiwKLQkJCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKKwkJCQl3aXBoeV9ub3RpY2UoaHctPndpcGh5LCAidHggcmluZ3MgZHJhaW5lZFxuIik7CiAJCQl9CiAJCQlicmVhazsKIAkJfQogCiAJCWlmIChwcml2LT5wZW5kaW5nX3R4X3BrdHMgPCBvbGRjb3VudCkgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogd2FpdGluZyBmb3IgdHggcmluZ3MgIgotCQkJICAgICAgICJ0byBkcmFpbiAoJWQgLT4gJWQgcGt0cylcbiIsCi0JCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLCBvbGRjb3VudCwKLQkJCSAgICAgICBwcml2LT5wZW5kaW5nX3R4X3BrdHMpOworCQkJd2lwaHlfbm90aWNlKGh3LT53aXBoeSwKKwkJCQkgICAgICJ3YWl0aW5nIGZvciB0eCByaW5ncyB0byBkcmFpbiAoJWQgLT4gJWQgcGt0cylcbiIsCisJCQkJICAgICBvbGRjb3VudCwgcHJpdi0+cGVuZGluZ190eF9wa3RzKTsKIAkJCXJldHJ5ID0gMTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJcHJpdi0+dHhfd2FpdCA9IE5VTEw7CiAKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogdHggcmluZ3Mgc3R1Y2sgZm9yICVkIG1zXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLCBNV0w4S19UWF9XQUlUX1RJTUVPVVRfTVMpOworCQl3aXBoeV9lcnIoaHctPndpcGh5LCAidHggcmluZ3Mgc3R1Y2sgZm9yICVkIG1zXG4iLAorCQkJICBNV0w4S19UWF9XQUlUX1RJTUVPVVRfTVMpOwogCQltd2w4a19kdW1wX3R4X3JpbmdzKGh3KTsKIAogCQlyYyA9IC1FVElNRURPVVQ7CkBAIC0xNDIxLDggKzE0MjQsOCBAQAogCQkJCXNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAogCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocHJpdi0+cGRldiwgZG1hKSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBkbWEgbWFwIHNrYiwgIgotCQkgICAgICAgImRyb3BwaW5nIFRYIGZyYW1lLlxuIiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKKwkJd2lwaHlfZGVidWcoaHctPndpcGh5LAorCQkJICAgICJmYWlsZWQgdG8gZG1hIG1hcCBza2IsIGRyb3BwaW5nIFRYIGZyYW1lLlxuIik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CkBAIC0xNTM4LDcgKzE1NDEsNyBAQAogCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDA7CiAJdTggYnVmWzMyXTsKIAotCWNtZC0+cmVzdWx0ID0gMHhmZmZmOworCWNtZC0+cmVzdWx0ID0gKF9fZm9yY2UgX19sZTE2KSAweGZmZmY7CiAJZG1hX3NpemUgPSBsZTE2X3RvX2NwdShjbWQtPmxlbmd0aCk7CiAJZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LCBjbWQsIGRtYV9zaXplLAogCQkJCSAgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKQEAgLTE1NzAsMTAgKzE1NzMsOSBAQAogCQkJCQlQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwogCiAJaWYgKCF0aW1lb3V0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENvbW1hbmQgJXMgdGltZW91dCBhZnRlciAldSBtc1xuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSwKLQkJICAgICAgIG13bDhrX2NtZF9uYW1lKGNtZC0+Y29kZSwgYnVmLCBzaXplb2YoYnVmKSksCi0JCSAgICAgICBNV0w4S19DTURfVElNRU9VVF9NUyk7CisJCXdpcGh5X2Vycihody0+d2lwaHksICJjb21tYW5kICVzIHRpbWVvdXQgYWZ0ZXIgJXUgbXNcbiIsCisJCQkgIG13bDhrX2NtZF9uYW1lKGNtZC0+Y29kZSwgYnVmLCBzaXplb2YoYnVmKSksCisJCQkgIE1XTDhLX0NNRF9USU1FT1VUX01TKTsKIAkJcmMgPSAtRVRJTUVET1VUOwogCX0gZWxzZSB7CiAJCWludCBtczsKQEAgLTE1ODIsMTUgKzE1ODQsMTQgQEAKIAogCQlyYyA9IGNtZC0+cmVzdWx0ID8gLUVJTlZBTCA6IDA7CiAJCWlmIChyYykKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENvbW1hbmQgJXMgZXJyb3IgMHgleFxuIiwKLQkJCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSksCi0JCQkgICAgICAgbXdsOGtfY21kX25hbWUoY21kLT5jb2RlLCBidWYsIHNpemVvZihidWYpKSwKLQkJCSAgICAgICBsZTE2X3RvX2NwdShjbWQtPnJlc3VsdCkpOworCQkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImNvbW1hbmQgJXMgZXJyb3IgMHgleFxuIiwKKwkJCQkgIG13bDhrX2NtZF9uYW1lKGNtZC0+Y29kZSwgYnVmLCBzaXplb2YoYnVmKSksCisJCQkJICBsZTE2X3RvX2NwdShjbWQtPnJlc3VsdCkpOwogCQllbHNlIGlmIChtcyA+IDIwMDApCi0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBDb21tYW5kICVzIHRvb2sgJWQgbXNcbiIsCi0JCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLAotCQkJICAgICAgIG13bDhrX2NtZF9uYW1lKGNtZC0+Y29kZSwgYnVmLCBzaXplb2YoYnVmKSksCi0JCQkgICAgICAgbXMpOworCQkJd2lwaHlfbm90aWNlKGh3LT53aXBoeSwgImNvbW1hbmQgJXMgdG9vayAlZCBtc1xuIiwKKwkJCQkgICAgIG13bDhrX2NtZF9uYW1lKGNtZC0+Y29kZSwKKwkJCQkJCSAgICBidWYsIHNpemVvZihidWYpKSwKKwkJCQkgICAgIG1zKTsKIAl9CiAKIAlyZXR1cm4gcmM7CkBAIC0xNjY2LDcgKzE2NjcsNyBAQAogCV9fbGUzMiBjYXBzMjsKIAlfX2xlMzIgbnVtX3R4X2Rlc2NfcGVyX3F1ZXVlOwogCV9fbGUzMiB0b3RhbF9yeGQ7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBNV0w4S19DQVBfTUFYX0FNU0RVCQkweDIwMDAwMDAwCiAjZGVmaW5lIE1XTDhLX0NBUF9HUkVFTkZJRUxECQkweDA4MDAwMDAwCkBAIC0xODEwLDcgKzE4MTEsNyBAQAogCV9fbGUzMiB3Y2JiYXNlMTsKIAlfX2xlMzIgd2NiYmFzZTI7CiAJX19sZTMyIHdjYmJhc2UzOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0YXRpYyBpbnQgbXdsOGtfY21kX2dldF9od19zcGVjX2FwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewpAQCAtMTg0MiwyMiArMTg0MywyMiBAQAogCQlwcml2LT5zdGFfbWFjaWRzX3N1cHBvcnRlZCA9IDB4MDAwMDAwMDA7CiAKIAkJb2ZmID0gbGUzMl90b19jcHUoY21kLT53Y2JiYXNlMCkgJiAweGZmZmY7Ci0JCWlvd3JpdGUzMihjcHVfdG9fbGUzMihwcml2LT50eHFbMF0udHhkX2RtYSksIHByaXYtPnNyYW0gKyBvZmYpOworCQlpb3dyaXRlMzIocHJpdi0+dHhxWzBdLnR4ZF9kbWEsIHByaXYtPnNyYW0gKyBvZmYpOwogCiAJCW9mZiA9IGxlMzJfdG9fY3B1KGNtZC0+cnh3cnB0cikgJiAweGZmZmY7Ci0JCWlvd3JpdGUzMihjcHVfdG9fbGUzMihwcml2LT5yeHFbMF0ucnhkX2RtYSksIHByaXYtPnNyYW0gKyBvZmYpOworCQlpb3dyaXRlMzIocHJpdi0+cnhxWzBdLnJ4ZF9kbWEsIHByaXYtPnNyYW0gKyBvZmYpOwogCiAJCW9mZiA9IGxlMzJfdG9fY3B1KGNtZC0+cnhyZHB0cikgJiAweGZmZmY7Ci0JCWlvd3JpdGUzMihjcHVfdG9fbGUzMihwcml2LT5yeHFbMF0ucnhkX2RtYSksIHByaXYtPnNyYW0gKyBvZmYpOworCQlpb3dyaXRlMzIocHJpdi0+cnhxWzBdLnJ4ZF9kbWEsIHByaXYtPnNyYW0gKyBvZmYpOwogCiAJCW9mZiA9IGxlMzJfdG9fY3B1KGNtZC0+d2NiYmFzZTEpICYgMHhmZmZmOwotCQlpb3dyaXRlMzIoY3B1X3RvX2xlMzIocHJpdi0+dHhxWzFdLnR4ZF9kbWEpLCBwcml2LT5zcmFtICsgb2ZmKTsKKwkJaW93cml0ZTMyKHByaXYtPnR4cVsxXS50eGRfZG1hLCBwcml2LT5zcmFtICsgb2ZmKTsKIAogCQlvZmYgPSBsZTMyX3RvX2NwdShjbWQtPndjYmJhc2UyKSAmIDB4ZmZmZjsKLQkJaW93cml0ZTMyKGNwdV90b19sZTMyKHByaXYtPnR4cVsyXS50eGRfZG1hKSwgcHJpdi0+c3JhbSArIG9mZik7CisJCWlvd3JpdGUzMihwcml2LT50eHFbMl0udHhkX2RtYSwgcHJpdi0+c3JhbSArIG9mZik7CiAKIAkJb2ZmID0gbGUzMl90b19jcHUoY21kLT53Y2JiYXNlMykgJiAweGZmZmY7Ci0JCWlvd3JpdGUzMihjcHVfdG9fbGUzMihwcml2LT50eHFbM10udHhkX2RtYSksIHByaXYtPnNyYW0gKyBvZmYpOworCQlpb3dyaXRlMzIocHJpdi0+dHhxWzNdLnR4ZF9kbWEsIHByaXYtPnNyYW0gKyBvZmYpOwogCX0KIAogCWtmcmVlKGNtZCk7CkBAIC0xODgzLDcgKzE4ODQsNyBAQAogCV9fbGUzMiBmbGFnczsKIAlfX2xlMzIgbnVtX3R4X2Rlc2NfcGVyX3F1ZXVlOwogCV9fbGUzMiB0b3RhbF9yeGQ7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBNV0w4S19TRVRfSFdfU1BFQ19GTEFHX0hPU1RfREVDUl9NR01UCQkweDAwMDAwMDgwCiAjZGVmaW5lIE1XTDhLX1NFVF9IV19TUEVDX0ZMQUdfSE9TVEZPUk1fUFJPQkVSRVNQCTB4MDAwMDAwMjAKQEAgLTE5ODUsNyArMTk4Niw3IEBACiBzdHJ1Y3QgbXdsOGtfY21kX2dldF9zdGF0IHsKIAlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CiAJX19sZTMyIHN0YXRzWzY0XTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIE1XTDhLX1NUQVRfQUNLX0ZBSUxVUkUJOQogI2RlZmluZSBNV0w4S19TVEFUX1JUU19GQUlMVVJFCTEyCkBAIC0yMDI5LDcgKzIwMzAsNyBAQAogCV9fbGUxNiBhY3Rpb247CiAJX19sZTE2IGNvbnRyb2w7CiAJX19sZTE2IHJhZGlvX29uOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0YXRpYyBpbnQKIG13bDhrX2NtZF9yYWRpb19jb250cm9sKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGVuYWJsZSwgYm9vbCBmb3JjZSkKQEAgLTIwOTIsNyArMjA5Myw3IEBACiAJX19sZTE2IGN1cnJlbnRfbGV2ZWw7CiAJX19sZTE2IHJlc2VydmVkOwogCV9fbGUxNiBwb3dlcl9sZXZlbF9saXN0W01XTDhLX1RYX1BPV0VSX0xFVkVMX1RPVEFMXTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdGF0aWMgaW50IG13bDhrX2NtZF9yZl90eF9wb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGRCbSkKIHsKQEAgLTIxMjEsNyArMjEyMiw3IEBACiAJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOwogCV9fbGUxNiBhbnRlbm5hOwogCV9fbGUxNiBtb2RlOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgTVdMOEtfUkZfQU5URU5OQV9SWAkJMQogI2RlZmluZSBNV0w4S19SRl9BTlRFTk5BX1RYCQkyCkBAIC0yMTgyLDcgKzIxODMsNyBAQAogICovCiBzdHJ1Y3QgbXdsOGtfY21kX3NldF9wcmVfc2NhbiB7CiAJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0YXRpYyBpbnQgbXdsOGtfY21kX3NldF9wcmVfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKQEAgLTIyMDksNyArMjIxMCw3IEBACiAJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOwogCV9fbGUzMiBpc2lic3M7CiAJX191OCBic3NpZFtFVEhfQUxFTl07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RhdGljIGludAogbXdsOGtfY21kX3NldF9wb3N0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNvbnN0IF9fdTggKm1hYykKQEAgLTIyNDAsNyArMjI0MSw3IEBACiAJX19sZTE2IGFjdGlvbjsKIAlfX3U4IGN1cnJlbnRfY2hhbm5lbDsKIAlfX2xlMzIgY2hhbm5lbF9mbGFnczsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdGF0aWMgaW50IG13bDhrX2NtZF9zZXRfcmZfY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQpAQCAtMjI5Myw3ICsyMjk0LDcgQEAKIAlfX3U4CWJzc2lkW0VUSF9BTEVOXTsKIAlfX2xlMTYJcHJvdGVjdGlvbl9tb2RlOwogCV9fdTgJc3VwcF9yYXRlc1sxNF07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RhdGljIHZvaWQgbGVnYWN5X3JhdGVfbWFza190b19hcnJheSh1OCAqcmF0ZXMsIHUzMiBtYXNrKQogewpAQCAtMjM2NCw3ICsyMzY1LDcgQEAKIAkvKiBCaXRtYXAgZm9yIHN1cHBvcnRlZCBNQ1MgY29kZXMuICAqLwogCV9fdTgJbWNzX3NldFsxNl07CiAJX191OAlyZXNlcnZlZFsxNl07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RhdGljIGludAogbXdsOGtfY21kX3NldF9yYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLApAQCAtMjM5Nyw3ICsyMzk4LDcgQEAKIAlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CiAJX19sZTMyIHNsZWVwX2ludGVydmFsOwkvKiBOdW1iZXIgb2YgYmVhY29uIHBlcmlvZHMgdG8gc2xlZXAgKi8KIAlfX3U4IGJlYWNvbl9kYXRhW01XTDhLX0ZKX0JFQUNPTl9NQVhMRU5dOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0YXRpYyBpbnQgbXdsOGtfY21kX2ZpbmFsaXplX2pvaW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHZvaWQgKmZyYW1lLAogCQkJCSAgIGludCBmcmFtZWxlbiwgaW50IGR0aW0pCkBAIC0yNDM2LDcgKzI0MzcsNyBAQAogCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKIAlfX2xlMTYgYWN0aW9uOwogCV9fbGUxNiB0aHJlc2hvbGQ7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RhdGljIGludAogbXdsOGtfY21kX3NldF9ydHNfdGhyZXNob2xkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgcnRzX3RocmVzaCkKQEAgLTI0NjYsNyArMjQ2Nyw3IEBACiAJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOwogCV9fbGUxNiBhY3Rpb247CiAJX191OCBzaG9ydF9zbG90OwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0YXRpYyBpbnQgbXdsOGtfY21kX3NldF9zbG90KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIHNob3J0X3Nsb3RfdGltZSkKIHsKQEAgLTI1MjgsNyArMjUyOSw3IEBACiAJCQlfX3U4IHR4cTsKIAkJfSBzdGE7CiAJfTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIE1XTDhLX1NFVF9FRENBX0NXCTB4MDEKICNkZWZpbmUgTVdMOEtfU0VUX0VEQ0FfVFhPUAkweDAyCkBAIC0yNTc5LDcgKzI1ODAsNyBAQAogc3RydWN0IG13bDhrX2NtZF9zZXRfd21tX21vZGUgewogCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKIAlfX2xlMTYgYWN0aW9uOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0YXRpYyBpbnQgbXdsOGtfY21kX3NldF93bW1fbW9kZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBlbmFibGUpCiB7CkBAIC0yNjEyLDcgKzI2MTMsNyBAQAogCV9fbGUzMiBhY3Rpb247CiAJX191OCByeF9hbnRlbm5hX21hcDsKIAlfX3U4IHR4X2FudGVubmFfbWFwOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0YXRpYyBpbnQgbXdsOGtfY21kX21pbW9fY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBfX3U4IHJ4LCBfX3U4IHR4KQogewpAQCAtMjY1Miw3ICsyNjUzLDcgQEAKIAlfX2xlMzIgcmF0ZV90eXBlOwogCV9fbGUzMiByZXNlcnZlZDE7CiAJX19sZTMyIHJlc2VydmVkMjsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIE1XTDhLX1VTRV9BVVRPX1JBVEUJMHgwMDAyCiAjZGVmaW5lIE1XTDhLX1VDQVNUX1JBVEUJMApAQCAtMjY5NCw3ICsyNjk1LDcgQEAKIAl1OCBtdWx0aWNhc3RfcmF0ZTsKIAl1OCBtdWx0aWNhc3RfcmF0ZV90eXBlOwogCXU4IG1hbmFnZW1lbnRfcmF0ZTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdGF0aWMgaW50CiBtd2w4a19jbWRfdXNlX2ZpeGVkX3JhdGVfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBtY2FzdCwgaW50IG1nbXQpCkBAIC0yNzI0LDcgKzI3MjUsNyBAQAogc3RydWN0IG13bDhrX2NtZF9lbmFibGVfc25pZmZlciB7CiAJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOwogCV9fbGUzMiBhY3Rpb247Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RhdGljIGludCBtd2w4a19jbWRfZW5hYmxlX3NuaWZmZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgZW5hYmxlKQogewpAQCAtMjc1Nyw3ICsyNzU4LDcgQEAKIAkJfSBtYnNzOwogCQlfX3U4IG1hY19hZGRyW0VUSF9BTEVOXTsKIAl9OwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgTVdMOEtfTUFDX1RZUEVfUFJJTUFSWV9DTElFTlQJCTAKICNkZWZpbmUgTVdMOEtfTUFDX1RZUEVfU0VDT05EQVJZX0NMSUVOVAkJMQpAQCAtMjgxMiw3ICsyODEzLDcgQEAKIAlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CiAJX19sZTE2IGFjdGlvbjsKIAlfX2xlMTYgbW9kZTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdGF0aWMgaW50IG13bDhrX2NtZF9zZXRfcmF0ZWFkYXB0X21vZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIF9fdTE2IG1vZGUpCiB7CkBAIC0yODQwLDcgKzI4NDEsNyBAQAogc3RydWN0IG13bDhrX2NtZF9ic3Nfc3RhcnQgewogCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKIAlfX2xlMzIgZW5hYmxlOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0YXRpYyBpbnQgbXdsOGtfY21kX2Jzc19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBpbnQgZW5hYmxlKQpAQCAtMjg4NSw3ICsyODg2LDcgQEAKIAlfX3U4IGFkZF9xb3NfaW5mbzsKIAlfX3U4IGlzX3Fvc19zdGE7CiAJX19sZTMyIGZ3X3N0YV9wdHI7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBNV0w4S19TVEFfQUNUSU9OX0FERAkJMAogI2RlZmluZSBNV0w4S19TVEFfQUNUSU9OX1JFTU9WRQkJMgpAQCAtMjk3OCw3ICsyOTc5LDcgQEAKIAlfX2xlMTYJY29udHJvbDE7CiAJX19sZTE2CWNvbnRyb2wyOwogCV9fbGUxNgljb250cm9sMzsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgcGVlcl9jYXBhYmlsaXR5X2luZm8gewogCS8qIFBlZXIgdHlwZSAtIEFQIHZzLiBTVEEuICAqLwpAQCAtMzAwNyw3ICszMDA4LDcgQEAKIAlfX3U4CXBhZDI7CiAJX191OAlzdGF0aW9uX2lkOwogCV9fbGUxNglhbXNkdV9lbmFibGVkOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3N0YWRiIHsKIAlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CkBAIC0zMDIyLDcgKzMwMjMsNyBAQAogCiAJLyogUGVlciBpbmZvIC0gdmFsaWQgZHVyaW5nIGFkZC91cGRhdGUuICAqLwogCXN0cnVjdCBwZWVyX2NhcGFiaWxpdHlfaW5mbwlwZWVyX2luZm87Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBNV0w4S19TVEFfREJfTU9ESUZZX0VOVFJZCTEKICNkZWZpbmUgTVdMOEtfU1RBX0RCX0RFTF9FTlRSWQkJMgpAQCAtMzA1Miw3ICszMDUzLDcgQEAKIAlwLT5wZWVyX3R5cGUgPSBNV0w4S19QRUVSX1RZUEVfQUNDRVNTUE9JTlQ7CiAJcC0+YmFzaWNfY2FwcyA9IGNwdV90b19sZTE2KHZpZi0+YnNzX2NvbmYuYXNzb2NfY2FwYWJpbGl0eSk7CiAJcC0+aHRfc3VwcG9ydCA9IHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZDsKLQlwLT5odF9jYXBzID0gc3RhLT5odF9jYXAuY2FwOworCXAtPmh0X2NhcHMgPSBjcHVfdG9fbGUxNihzdGEtPmh0X2NhcC5jYXApOwogCXAtPmV4dGVuZGVkX2h0X2NhcHMgPSAoc3RhLT5odF9jYXAuYW1wZHVfZmFjdG9yICYgMykgfAogCQkoKHN0YS0+aHRfY2FwLmFtcGR1X2RlbnNpdHkgJiA3KSA8PCAyKTsKIAlpZiAoaHctPmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQpAQCAtMzE5MCw4ICszMTkxLDggQEAKIAlpbnQgcmM7CiAKIAlpZiAoIXByaXYtPnJhZGlvX29uKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZHJvcHBlZCBUWCBmcmFtZSBzaW5jZSByYWRpbyAiCi0JCSAgICAgICAiZGlzYWJsZWRcbiIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJCXdpcGh5X2RlYnVnKGh3LT53aXBoeSwKKwkJCSAgICAiZHJvcHBlZCBUWCBmcmFtZSBzaW5jZSByYWRpbyBkaXNhYmxlZFxuIik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CkBAIC0zMjA5LDggKzMyMTAsNyBAQAogCXJjID0gcmVxdWVzdF9pcnEocHJpdi0+cGRldi0+aXJxLCBtd2w4a19pbnRlcnJ1cHQsCiAJCQkgSVJRRl9TSEFSRUQsIE1XTDhLX05BTUUsIGh3KTsKIAlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlZ2lzdGVyIElSUSBoYW5kbGVyXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxlZCB0byByZWdpc3RlciBpcnEgaGFuZGxlclxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMzI5Nyw5ICszMjk3LDggQEAKIAkgKiBtb2RlLiAgKFNuaWZmZXIgbW9kZSBpcyBvbmx5IHVzZWQgb24gU1RBIGZpcm13YXJlLikKIAkgKi8KIAlpZiAocHJpdi0+c25pZmZlcl9lbmFibGVkKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiB1bmFibGUgdG8gY3JlYXRlIFNUQSAiCi0JCSAgICAgICAiaW50ZXJmYWNlIGR1ZSB0byBzbmlmZmVyIG1vZGUgYmVpbmcgZW5hYmxlZFxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJCXdpcGh5X2luZm8oaHctPndpcGh5LAorCQkJICAgInVuYWJsZSB0byBjcmVhdGUgU1RBIGludGVyZmFjZSBiZWNhdXNlIHNuaWZmZXIgbW9kZSBpcyBlbmFibGVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0zNTgxLDkgKzM1ODAsOCBAQAogCSAqLwogCWlmICghbGlzdF9lbXB0eSgmcHJpdi0+dmlmX2xpc3QpKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogbm90IGVuYWJsaW5nIHNuaWZmZXIgIgotCQkJICAgICAgICJtb2RlIGJlY2F1c2UgU1RBIGludGVyZmFjZSBpcyBhY3RpdmVcbiIsCi0JCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKKwkJCXdpcGh5X2luZm8oaHctPndpcGh5LAorCQkJCSAgICJub3QgZW5hYmxpbmcgc25pZmZlciBtb2RlIGJlY2F1c2UgU1RBIGludGVyZmFjZSBpcyBhY3RpdmVcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTM3NjMsNiArMzc2MSwyMiBAQAogCXJldHVybiBtd2w4a19jbWRfZ2V0X3N0YXQoaHcsIHN0YXRzKTsKIH0KIAorc3RhdGljIGludCBtd2w4a19nZXRfc3VydmV5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaWR4LAorCQkJCXN0cnVjdCBzdXJ2ZXlfaW5mbyAqc3VydmV5KQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOworCisJaWYgKGlkeCAhPSAwKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXN1cnZleS0+Y2hhbm5lbCA9IGNvbmYtPmNoYW5uZWw7CisJc3VydmV5LT5maWxsZWQgPSBTVVJWRVlfSU5GT19OT0lTRV9EQk07CisJc3VydmV5LT5ub2lzZSA9IHByaXYtPm5vaXNlOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQKIG13bDhrX2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJICAgZW51bSBpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24gYWN0aW9uLApAQCAtMzc5NCw2ICszODA4LDcgQEAKIAkuc3RhX3JlbW92ZQkJPSBtd2w4a19zdGFfcmVtb3ZlLAogCS5jb25mX3R4CQk9IG13bDhrX2NvbmZfdHgsCiAJLmdldF9zdGF0cwkJPSBtd2w4a19nZXRfc3RhdHMsCisJLmdldF9zdXJ2ZXkJCT0gbXdsOGtfZ2V0X3N1cnZleSwKIAkuYW1wZHVfYWN0aW9uCQk9IG13bDhrX2FtcGR1X2FjdGlvbiwKIH07CiAKQEAgLTM5MTEsOCArMzkyNiw3IEBACiAKIAlwcml2LT5zcmFtID0gcGNpX2lvbWFwKHBkZXYsIDAsIDB4MTAwMDApOwogCWlmIChwcml2LT5zcmFtID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG1hcCBkZXZpY2UgU1JBTVxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJCXdpcGh5X2Vycihody0+d2lwaHksICJjYW5ub3QgbWFwIGRldmljZSBzcmFtXG4iKTsKIAkJZ290byBlcnJfaW91bm1hcDsKIAl9CiAKQEAgLTM5MjQsOCArMzkzOCw3IEBACiAJaWYgKHByaXYtPnJlZ3MgPT0gTlVMTCkgewogCQlwcml2LT5yZWdzID0gcGNpX2lvbWFwKHBkZXYsIDIsIDB4MTAwMDApOwogCQlpZiAocHJpdi0+cmVncyA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgbWFwIGRldmljZSByZWdpc3RlcnNcbiIsCi0JCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKKwkJCXdpcGh5X2Vycihody0+d2lwaHksICJjYW5ub3QgbWFwIGRldmljZSByZWdpc3RlcnNcbiIpOwogCQkJZ290byBlcnJfaW91bm1hcDsKIAkJfQogCX0KQEAgLTM5MzcsMTYgKzM5NTAsMTQgQEAKIAkvKiBBc2sgdXNlcmxhbmQgaG90cGx1ZyBkYWVtb24gZm9yIHRoZSBkZXZpY2UgZmlybXdhcmUgKi8KIAlyYyA9IG13bDhrX3JlcXVlc3RfZmlybXdhcmUocHJpdik7CiAJaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEZpcm13YXJlIGZpbGVzIG5vdCBmb3VuZFxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJCXdpcGh5X2Vycihody0+d2lwaHksICJmaXJtd2FyZSBmaWxlcyBub3QgZm91bmRcbiIpOwogCQlnb3RvIGVycl9zdG9wX2Zpcm13YXJlOwogCX0KIAogCS8qIExvYWQgZmlybXdhcmUgaW50byBoYXJkd2FyZSAqLwogCXJjID0gbXdsOGtfbG9hZF9maXJtd2FyZShodyk7CiAJaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBzdGFydCBmaXJtd2FyZVxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJCXdpcGh5X2Vycihody0+d2lwaHksICJjYW5ub3Qgc3RhcnQgZmlybXdhcmVcbiIpOwogCQlnb3RvIGVycl9zdG9wX2Zpcm13YXJlOwogCX0KIApAQCAtMzk1Nyw5ICszOTY4LDggQEAKIAlpZiAocHJpdi0+YXBfZncpIHsKIAkJcHJpdi0+cnhkX29wcyA9IHByaXYtPmRldmljZV9pbmZvLT5hcF9yeGRfb3BzOwogCQlpZiAocHJpdi0+cnhkX29wcyA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBEcml2ZXIgZG9lcyBub3QgaGF2ZSBBUCAiCi0JCQkgICAgICAgImZpcm13YXJlIGltYWdlIHN1cHBvcnQgZm9yIHRoaXMgaGFyZHdhcmVcbiIsCi0JCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKKwkJCXdpcGh5X2Vycihody0+d2lwaHksCisJCQkJICAiRHJpdmVyIGRvZXMgbm90IGhhdmUgQVAgZmlybXdhcmUgaW1hZ2Ugc3VwcG9ydCBmb3IgdGhpcyBoYXJkd2FyZVxuIik7CiAJCQlnb3RvIGVycl9zdG9wX2Zpcm13YXJlOwogCQl9CiAJfSBlbHNlIHsKQEAgLTQwMzcsOCArNDA0Nyw3IEBACiAJcmMgPSByZXF1ZXN0X2lycShwcml2LT5wZGV2LT5pcnEsIG13bDhrX2ludGVycnVwdCwKIAkJCSBJUlFGX1NIQVJFRCwgTVdMOEtfTkFNRSwgaHcpOwogCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgSVJRIGhhbmRsZXJcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOworCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGlycSBoYW5kbGVyXG4iKTsKIAkJZ290byBlcnJfZnJlZV9xdWV1ZXM7CiAJfQogCkBAIC00MDU4LDggKzQwNjcsNyBAQAogCQlyYyA9IG13bDhrX2NtZF9nZXRfaHdfc3BlY19zdGEoaHcpOwogCX0KIAlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGluaXRpYWxpc2UgZmlybXdhcmVcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOworCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiY2Fubm90IGluaXRpYWxpc2UgZmlybXdhcmVcbiIpOwogCQlnb3RvIGVycl9mcmVlX2lycTsKIAl9CiAKQEAgLTQwNzMsMTUgKzQwODEsMTQgQEAKIAkvKiBUdXJuIHJhZGlvIG9mZiAqLwogCXJjID0gbXdsOGtfY21kX3JhZGlvX2Rpc2FibGUoaHcpOwogCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgZGlzYWJsZVxuIiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImNhbm5vdCBkaXNhYmxlXG4iKTsKIAkJZ290byBlcnJfZnJlZV9pcnE7CiAJfQogCiAJLyogQ2xlYXIgTUFDIGFkZHJlc3MgKi8KIAlyYyA9IG13bDhrX2NtZF9zZXRfbWFjX2FkZHIoaHcsIE5VTEwsICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiKTsKIAlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGNsZWFyIE1BQyBhZGRyZXNzXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImNhbm5vdCBjbGVhciBtYWMgYWRkcmVzc1xuIik7CiAJCWdvdG8gZXJyX2ZyZWVfaXJxOwogCX0KIApAQCAtNDA5MSwxNyArNDA5OCwxNiBAQAogCiAJcmMgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoaHcpOwogCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVnaXN0ZXIgZGV2aWNlXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImNhbm5vdCByZWdpc3RlciBkZXZpY2VcbiIpOwogCQlnb3RvIGVycl9mcmVlX3F1ZXVlczsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogJXMgdiVkLCAlcE0sICVzIGZpcm13YXJlICV1LiV1LiV1LiV1XG4iLAotCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSksIHByaXYtPmRldmljZV9pbmZvLT5wYXJ0X25hbWUsCi0JICAgICAgIHByaXYtPmh3X3JldiwgaHctPndpcGh5LT5wZXJtX2FkZHIsCi0JICAgICAgIHByaXYtPmFwX2Z3ID8gIkFQIiA6ICJTVEEiLAotCSAgICAgICAocHJpdi0+ZndfcmV2ID4+IDI0KSAmIDB4ZmYsIChwcml2LT5md19yZXYgPj4gMTYpICYgMHhmZiwKLQkgICAgICAgKHByaXYtPmZ3X3JldiA+PiA4KSAmIDB4ZmYsIHByaXYtPmZ3X3JldiAmIDB4ZmYpOworCXdpcGh5X2luZm8oaHctPndpcGh5LCAiJXMgdiVkLCAlcG0sICVzIGZpcm13YXJlICV1LiV1LiV1LiV1XG4iLAorCQkgICBwcml2LT5kZXZpY2VfaW5mby0+cGFydF9uYW1lLAorCQkgICBwcml2LT5od19yZXYsIGh3LT53aXBoeS0+cGVybV9hZGRyLAorCQkgICBwcml2LT5hcF9mdyA/ICJBUCIgOiAiU1RBIiwKKwkJICAgKHByaXYtPmZ3X3JldiA+PiAyNCkgJiAweGZmLCAocHJpdi0+ZndfcmV2ID4+IDE2KSAmIDB4ZmYsCisJCSAgIChwcml2LT5md19yZXYgPj4gOCkgJiAweGZmLCBwcml2LT5md19yZXYgJiAweGZmKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2NmZy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9jZmcuYwppbmRleCA4YzQxNjljLi4wOWZhZTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2NmZy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vY2ZnLmMKQEAgLTExNyw5ICsxMTcsOCBAQAogCiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgogCQlpZiAocHJpdi0+YnJva2VuX21vbml0b3IgJiYgIWZvcmNlX21vbml0b3IpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBNb25pdG9yIG1vZGUgc3VwcG9ydCBpcyAiCi0JCQkgICAgICAgImJ1Z2d5IGluIHRoaXMgZmlybXdhcmUsIG5vdCBlbmFibGluZ1xuIiwKLQkJCSAgICAgICB3aXBoeV9uYW1lKHdpcGh5KSk7CisJCQl3aXBoeV93YXJuKHdpcGh5LAorCQkJCSAgICJNb25pdG9yIG1vZGUgc3VwcG9ydCBpcyBidWdneSBpbiB0aGlzIGZpcm13YXJlLCBub3QgZW5hYmxpbmdcbiIpOwogCQkJZXJyID0gLUVJTlZBTDsKIAkJfQogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vZncuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vZncuYwppbmRleCAzZTE5NDdkLi4yNTlkNzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2Z3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9mdy5jCkBAIC00OSw3ICs0OSw3IEBACiAJX19sZTMyIHByaV9vZmZzZXQ7ICAgICAgLyogT2Zmc2V0IHRvIHByaW1hcnkgcGx1ZyBkYXRhICovCiAJX19sZTMyIGNvbXBhdF9vZmZzZXQ7ICAgLyogT2Zmc2V0IHRvIGNvbXBhdGliaWxpdHkgZGF0YSovCiAJY2hhciBzaWduYXR1cmVbMF07ICAgICAgLyogRlcgc2lnbmF0dXJlIGxlbmd0aCBoZWFkZXJzaXplLTIwICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIENoZWNrIHRoZSByYW5nZSBvZiB2YXJpb3VzIGhlYWRlciBlbnRyaWVzLiBSZXR1cm4gYSBwb2ludGVyIHRvIGEKICAqIGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9ibGVtLCBvciBOVUxMIGlmIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lcy5oCmluZGV4IDljYTM0ZTcuLmQ5ZjE4YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXMuaApAQCAtMjA1LDcgKzIwNSw3IEBACiAJdTggcmV0cnlfY291bnQ7CiAJdTggdHhfcmF0ZTsKIAlfX2xlMTYgdHhfY29udHJvbDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBIRVJNRVNfVFhTVEFUX1JFVFJZRVJSCQkoMHgwMDAxKQogI2RlZmluZSBIRVJNRVNfVFhTVEFUX0FHRURFUlIJCSgweDAwMDIpCkBAIC0yNTQsNyArMjU0LDcgQEAKIAkvKiBUaG9zZSBsYXN0IGFyZSBwcm9iYWJseSBub3QgYXZhaWxhYmxlIGluIHZlcnkgb2xkIGZpcm13YXJlcyAqLwogCV9fbGUxNiBSeERpc2NhcmRzX1dFUElDVkVycm9yOwogCV9fbGUxNiBSeERpc2NhcmRzX1dFUEV4Y2x1ZGVkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBHcmFiYmVkIGZyb20gd2xhbi1uZyAtIFRoYW5rcyBNYXJrLi4uIC0gSmVhbiBJSQogICogVGhpcyBpcyB0aGUgcmVzdWx0IG9mIGEgc2NhbiBpbnF1aXJ5IGNvbW1hbmQgKi8KQEAgLTI3MSw3ICsyNzEsNyBAQAogCXU4IHJhdGVzWzEwXTsJCS8qIEJpdCByYXRlIHN1cHBvcnRlZCAqLwogCV9fbGUxNiBwcm9iZXJlc3BfcmF0ZTsJLyogRGF0YSByYXRlIG9mIHRoZSByZXNwb25zZSBmcmFtZSAqLwogCV9fbGUxNiBhdGltOwkJLyogQVRJTSB3aW5kb3cgdGltZSwgS3VzIChob3N0c2NhbiBvbmx5KSAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBTYW1lIHN0dWZmIGZvciB0aGUgTHVjZW50L0FnZXJlIGNhcmQuCiAgKiBUaGFua3MgdG8gaDFrYXJpIDxoMWthcmkgQVQgZGFjaGIwZGVuLmNvbT4gLSBKZWFuIElJICovCkBAIC0yODUsNyArMjg1LDcgQEAKIAkvKiBiaXRzOiAwLWVzcywgMS1pYnNzLCA0LXByaXZhY3kgW3dlcF0gKi8KIAlfX2xlMTYgZXNzaWRfbGVuOwkvKiBFU1NJRCBsZW5ndGggKi8KIAl1OCBlc3NpZFszMl07CQkvKiBFU1NJRCBvZiB0aGUgbmV0d29yayAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBNb3VzdGFmYTogU2NhbiBzdHJ1Y3R1cmUgZm9yIFN5bWJvbCBjYXJkcyAqLwogc3RydWN0IHN5bWJvbF9zY2FuX2FwaW5mbyB7CkBAIC0zMDMsNyArMzAzLDcgQEAKIAlfX2xlMTYgYmFzaWNfcmF0ZXM7CS8qIEJhc2ljIHJhdGVzIGJpdG1hc2sgKi8KIAl1OCB1bmtub3duMls2XTsJCS8qIEFsd2F5cyBGRjpGRjpGRjpGRjowMDowMCAqLwogCXU4IHVua25vd24zWzhdOwkJLyogQWx3YXlzIDAsIGFwcGVhcmVkIGluIGYvdyAzLjkxLTY4ICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHVuaW9uIGhlcm1lc19zY2FuX2luZm8gewogCXN0cnVjdCBhZ2VyZV9zY2FuX2FwaW5mbwlhOwpAQCAtMzQzLDcgKzM0Myw3IEBACiAJX19sZTE2CWJlYWNvbl9pbnRlcnZhbDsKIAlfX2xlMTYJY2FwYWJpbGl0aWVzOwogCXU4CWRhdGFbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSEVSTUVTX0xJTktTVEFUVVNfTk9UX0NPTk5FQ1RFRCAgICgweDAwMDApCiAjZGVmaW5lIEhFUk1FU19MSU5LU1RBVFVTX0NPTk5FQ1RFRCAgICAgICAoMHgwMDAxKQpAQCAtMzU1LDcgKzM1NSw3IEBACiAKIHN0cnVjdCBoZXJtZXNfbGlua3N0YXR1cyB7CiAJX19sZTE2IGxpbmtzdGF0dXM7ICAgICAgICAgLyogTGluayBzdGF0dXMgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGhlcm1lc19yZXNwb25zZSB7CiAJdTE2IHN0YXR1cywgcmVzcDAsIHJlc3AxLCByZXNwMjsKQEAgLTM2NSwxMSArMzY1LDExIEBACiBzdHJ1Y3QgaGVybWVzX2lkc3RyaW5nIHsKIAlfX2xlMTYgbGVuOwogCV9fbGUxNiB2YWxbMTZdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaGVybWVzX211bHRpY2FzdCB7CiAJdTggYWRkcltIRVJNRVNfTUFYX01VTFRJQ0FTVF1bRVRIX0FMRU5dOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBUaW1lb3V0cyAqLwogI2RlZmluZSBIRVJNRVNfQkFQX0JVU1lfVElNRU9VVCAoMTAwMDApIC8qIEluIGl0ZXJhdGlvbnMgb2YgfjF1cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXNfZGxkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lc19kbGQuYwppbmRleCA2ZGE4NWU3Li4yYjJiOWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lc19kbGQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lc19kbGQuYwpAQCAtNjUsMTAgKzY1LDEwIEBACiAJX19sZTMyIGFkZHI7CQkvKiBhZGFwdGVyIGFkZHJlc3Mgd2hlcmUgdG8gd3JpdGUgdGhlIGJsb2NrICovCiAJX19sZTE2IGxlbjsJCS8qIGxlbmd0aCBvZiB0aGUgZGF0YSBvbmx5LCBpbiBieXRlcyAqLwogCWNoYXIgZGF0YVswXTsJCS8qIGRhdGEgdG8gYmUgd3JpdHRlbiAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKgotICogUGx1ZyBEYXRhIFJlZmVyZW5jZXMgYXJlIGxvY2F0ZWQgaW4gaW4gdGhlIGltYWdlIGFmdGVyIHRoZSBsYXN0IGRhdGEKKyAqIFBsdWcgRGF0YSBSZWZlcmVuY2VzIGFyZSBsb2NhdGVkIGluIHRoZSBpbWFnZSBhZnRlciB0aGUgbGFzdCBkYXRhCiAgKiBibG9jay4gIFRoZXkgcmVmZXIgdG8gYXJlYXMgaW4gdGhlIGFkYXB0ZXIgbWVtb3J5IHdoZXJlIHRoZSBwbHVnIGRhdGEKICAqIGl0ZW1zIHdpdGggbWF0Y2hpbmcgSUQgc2hvdWxkIGJlIHdyaXR0ZW4uCiAgKi8KQEAgLTc3LDcgKzc3LDcgQEAKIAlfX2xlMzIgYWRkcjsJCS8qIGFkYXB0ZXIgYWRkcmVzcyB3aGVyZSB0byB3cml0ZSB0aGUgZGF0YSAqLwogCV9fbGUzMiBsZW47CQkvKiBleHBlY3RlZCBsZW5ndGggb2YgdGhlIGRhdGEsIGluIGJ5dGVzICovCiAJY2hhciBuZXh0WzBdOwkJLyogbmV4dCBQRFIgc3RhcnRzIGhlcmUgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoKICAqIFBsdWcgRGF0YSBJdGVtcyBhcmUgbG9jYXRlZCBpbiB0aGUgRUVQUk9NIHJlYWQgZnJvbSB0aGUgYWRhcHRlciBieQpAQCAtODgsNyArODgsNyBAQAogCV9fbGUxNiBsZW47CQkvKiBsZW5ndGggb2YgSUQgYW5kIGRhdGEsIGluIHdvcmRzICovCiAJX19sZTE2IGlkOwkJLyogcmVjb3JkIElEICovCiAJY2hhciBkYXRhWzBdOwkJLyogcGx1ZyBkYXRhICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qKiogRlcgZGF0YSBibG9jayBhY2Nlc3MgZnVuY3Rpb25zICoqKi8KIApAQCAtMzE3LDcgKzMxNyw3IEBACiAJX19sZTE2IGxlbjsJCQkJCQkJXAogCV9fbGUxNiBpZDsJCQkJCQkJXAogCXU4IHZhbFtsZW5ndGhdOwkJCQkJCQlcCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBkZWZhdWx0X3Bkcl9kYXRhXyMjcGlkID0gewkJCVwKK30gX19wYWNrZWQgZGVmYXVsdF9wZHJfZGF0YV8jI3BpZCA9IHsJCQlcCiAJY3B1X3RvX2xlMTYoKHNpemVvZihkZWZhdWx0X3Bkcl9kYXRhXyMjcGlkKS8JCQlcCiAJCQkJc2l6ZW9mKF9fbGUxNikpIC0gMSksCQkJXAogCWNwdV90b19sZTE2KHBpZCksCQkJCQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9ody5jCmluZGV4IDZmYmQ3ODguLjA3N2JhYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2h3LmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIC8qIEZpcm13YXJlIHZlcnNpb24gZW5jb2RpbmcgKi8KIHN0cnVjdCBjb21wX2lkIHsKIAl1MTYgaWQsIHZhcmlhbnQsIG1ham9yLCBtaW5vcjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RhdGljIGlubGluZSBmd3R5cGVfdCBkZXRlcm1pbmVfZmlybXdhcmVfdHlwZShzdHJ1Y3QgY29tcF9pZCAqbmljX2lkKQogewpAQCAtOTk1LDcgKzk5NSw3IEBACiAJCXU4IHR4X21pY1tNSUNfS0VZTEVOXTsKIAkJdTggcnhfbWljW01JQ19LRVlMRU5dOwogCQl1OCB0c2NbT1JJTk9DT19TRVFfTEVOXTsKLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBidWY7CisJfSBfX3BhY2tlZCBidWY7CiAJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwogCWludCByZXQ7CiAJaW50IGVycjsKQEAgLTEzMjYsNyArMTMyNiw3IEBACiAJc3RydWN0IHsKIAkJdTggYWRkcltFVEhfQUxFTl07CiAJCV9fbGUxNiByZWFzb25fY29kZTsKLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBidWY7CisJfSBfX3BhY2tlZCBidWY7CiAKIAkvKiBDdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgYnkgV1BBIGVuYWJsZWQgQWdlcmUgZncgKi8KIAlpZiAoIXByaXYtPmhhc193cGEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5jCmluZGV4IGNhNzFmMDguLmU4ZTJkMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5jCkBAIC0xNzIsNyArMTcyLDcgQEAKIAlfX2xlMTYgZnJhbWVfY3RsOwogCV9fbGUxNiBkdXJhdGlvbl9pZDsKIAl1OCBhZGRyMVtFVEhfQUxFTl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIFJ4IGZyYW1lIGhlYWRlciBleGNlcHQgY29tcGF0aWJpbGl0eSA4MDIuMyBoZWFkZXIgKi8KIHN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciB7CkBAIC0xOTYsNyArMTk2LDcgQEAKIAogCS8qIERhdGEgbGVuZ3RoICovCiAJX19sZTE2IGRhdGFfbGVuOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3Qgb3Jpbm9jb19yeF9kYXRhIHsKIAlzdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3IgKmRlc2M7CkBAIC0zOTAsNyArMzkwLDcgQEAKIAkJc3RydWN0IGhlYWRlcl9zdHJ1Y3QgewogCQkJc3RydWN0IGV0aGhkciBldGg7CS8qIDgwMi4zIGhlYWRlciAqLwogCQkJdTggZW5jYXBbNl07CQkvKiA4MDIuMiBoZWFkZXIgKi8KLQkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGRyOworCQl9IF9fcGFja2VkIGhkcjsKIAkJaW50IGxlbiA9IHNrYi0+bGVuICsgc2l6ZW9mKGVuY2Fwc19oZHIpIC0gKDIgKiBFVEhfQUxFTik7CiAKIAkJaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgRU5DQVBTX09WRVJIRUFEKSB7CkBAIC0xMTcwLDcgKzExNzAsNyBAQAogCXN0cnVjdCBqb2luX3JlcSB7CiAJCXU4IGJzc2lkW0VUSF9BTEVOXTsKIAkJX19sZTE2IGNoYW5uZWw7Ci0JfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcmVxOworCX0gX19wYWNrZWQgcmVxOwogCWNvbnN0IGludCBhdG9tX2xlbiA9IG9mZnNldG9mKHN0cnVjdCBwcmlzbTJfc2Nhbl9hcGluZm8sIGF0aW0pOwogCXN0cnVjdCBwcmlzbTJfc2Nhbl9hcGluZm8gKmF0b20gPSBOVUxMOwogCWludCBvZmZzZXQgPSA0OwpAQCAtMTQxMCw3ICsxNDEwLDcgQEAKIAlzdHJ1Y3QgewogCQlfX2xlMTYgbGVuOwogCQlfX2xlMTYgdHlwZTsKLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBpbmZvOworCX0gX19wYWNrZWQgaW5mbzsKIAlpbnQgbGVuLCB0eXBlOwogCWludCBlcnI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvLmgKaW5kZXggYTZkYTg2ZS4uMjU1NzEwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvLmgKQEAgLTMyLDcgKzMyLDcgQEAKIHN0cnVjdCBvcmlub2NvX2tleSB7CiAJX19sZTE2IGxlbjsJLyogYWx3YXlzIHN0b3JlZCBhcyBsaXR0bGUtZW5kaWFuICovCiAJY2hhciBkYXRhW09SSU5PQ09fTUFYX0tFWV9TSVpFXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBUS0lQX0tFWUxFTgkxNgogI2RlZmluZSBNSUNfS0VZTEVOCTgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX2NzLmMKaW5kZXggYjE2ZDVkYi4uZWY0NmEyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX2NzLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgpAQCAtMTkyLDI1ICsxOTEsMjMgQEAKIAlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKIAogCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLwotCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwlwX2Rldi0+cmVzb3VyY2VbMF0tPmVuZCA9IHBfZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gMDsKIAlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKIAkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKLQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKLQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKLQkJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQlwX2Rldi0+aW9fbGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyAmPSB+SU9fREFUQV9QQVRIX1dJRFRIOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9CisJCQlwY21jaWFfaW9fY2ZnX2RhdGFfd2lkdGgoaW8tPmZsYWdzKTsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGlvLT53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBpby0+d2luWzBdLmxlbjsKIAkJaWYgKGlvLT5ud2luID4gMSkgewotCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMyID0gcF9kZXYtPmlvLkF0dHJpYnV0ZXMxOwotCQkJcF9kZXYtPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKLQkJCXBfZGV2LT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+ZmxhZ3MgPSBwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzOworCQkJcF9kZXYtPnJlc291cmNlWzFdLT5zdGFydCA9IGlvLT53aW5bMV0uYmFzZTsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gaW8tPndpblsxXS5sZW47CiAJCX0KIAogCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLwotCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pICE9IDApCisJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwX2RldikgIT0gMCkKIAkJCWdvdG8gbmV4dF9lbnRyeTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0yNTgsNyArMjU1LDggQEAKIAkvKiBXZSBpbml0aWFsaXplIHRoZSBoZXJtZXMgc3RydWN0dXJlIGJlZm9yZSBjb21wbGV0aW5nIFBDTUNJQQogCSAqIGNvbmZpZ3VyYXRpb24ganVzdCBpbiBjYXNlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBnZXRzCiAJICogY2FsbGVkLiAqLwotCW1lbSA9IGlvcG9ydF9tYXAobGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pby5OdW1Qb3J0czEpOworCW1lbSA9IGlvcG9ydF9tYXAobGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0LAorCQkJcmVzb3VyY2Vfc2l6ZShsaW5rLT5yZXNvdXJjZVswXSkpOwogCWlmICghbWVtKQogCQlnb3RvIGZhaWxlZDsKIApAQCAtMjgwLDcgKzI3OCw3IEBACiAJfQogCiAJLyogUmVnaXN0ZXIgYW4gaW50ZXJmYWNlIHdpdGggdGhlIHN0YWNrICovCi0JaWYgKG9yaW5vY29faWZfYWRkKHByaXYsIGxpbmstPmlvLkJhc2VQb3J0MSwKKwlpZiAob3Jpbm9jb19pZl9hZGQocHJpdiwgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0LAogCQkJICAgbGluay0+aXJxLCBOVUxMKSAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIm9yaW5vY29faWZfYWRkKCkgZmFpbGVkXG4iKTsKIAkJZ290byBmYWlsZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fdXNiLmMKaW5kZXggNzhmMDg5Yi4uYTM4YTdiZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb191c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fdXNiLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAkvKiBTTkFQICovCiAJdTggb3VpWzNdOwogCV9fYmUxNiBldGhlcnR5cGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBlel91c2JfZncgewogCXUxNiBzaXplOwpAQCAtMjIyLDcgKzIyMiw3IEBACiAJX19sZTE2IGhlcm1lc19sZW47CiAJX19sZTE2IGhlcm1lc19yaWQ7CiAJdTggZGF0YVswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogVGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgb3IgbWF5IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLwogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGV6dXNiX3RhYmxlW10gPSB7CkBAIC0zNTYsMTIgKzM1NiwxMCBAQAogewogCXN0cnVjdCByZXF1ZXN0X2NvbnRleHQgKmN0eDsKIAotCWN0eCA9IGttYWxsb2Moc2l6ZW9mKCpjdHgpLCBHRlBfQVRPTUlDKTsKKwljdHggPSBremFsbG9jKHNpemVvZigqY3R4KSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFjdHgpCiAJCXJldHVybiBOVUxMOwogCi0JbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTsKLQogCWN0eC0+YnVmID0ga21hbGxvYyhCVUxLX0JVRl9TSVpFLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWN0eC0+YnVmKSB7CiAJCWtmcmVlKGN0eCk7CkBAIC0xNTA0LDE2ICsxNTAyLDE2IEBACiAJICAgIGV6dXNiX2N0eF9jb21wbGV0ZShsaXN0X2VudHJ5KGl0ZW0sCiAJCQkJCSAgc3RydWN0IHJlcXVlc3RfY29udGV4dCwgbGlzdCkpOwogCi0JaWYgKHVwcml2LT5yZWFkX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykKKwlpZiAodXByaXYtPnJlYWRfdXJiICYmIHVwcml2LT5yZWFkX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiU29tZSBVUkIgaW4gcHJvZ3Jlc3NcbiIpOwogCiAJbXV0ZXhfdW5sb2NrKCZ1cHJpdi0+bXR4KTsKIAotCWtmcmVlKHVwcml2LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKLQlpZiAodXByaXYtPmJhcF9idWYgIT0gTlVMTCkKLQkJa2ZyZWUodXByaXYtPmJhcF9idWYpOwotCWlmICh1cHJpdi0+cmVhZF91cmIgIT0gTlVMTCkKKwlpZiAodXByaXYtPnJlYWRfdXJiKSB7CisJCWtmcmVlKHVwcml2LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKIAkJdXNiX2ZyZWVfdXJiKHVwcml2LT5yZWFkX3VyYik7CisJfQorCWtmcmVlKHVwcml2LT5iYXBfYnVmKTsKIAlpZiAodXByaXYtPmRldikgewogCQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KHVwcml2LT5kZXYpOwogCQlvcmlub2NvX2lmX2RlbChwcml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc3BlY3RydW1fY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc3BlY3RydW1fY3MuYwppbmRleCBiNTFhOWFkLi44NzM4NzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3NwZWN0cnVtX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zcGVjdHJ1bV9jcy5jCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KQEAgLTgwLDM1ICs3OSwyNyBAQAogc3BlY3RydW1fcmVzZXQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBpZGxlKQogewogCWludCByZXQ7Ci0JY29uZl9yZWdfdCByZWc7Ci0JdV9pbnQgc2F2ZV9jb3I7CisJdTggc2F2ZV9jb3I7CisJdTggY2NzcjsKIAogCS8qIERvaW5nIGl0IGlmIGhhcmR3YXJlIGlzIGdvbmUgaXMgZ3VhcmFudGVlZCBjcmFzaCAqLwogCWlmICghcGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIFNhdmUgb3JpZ2luYWwgQ09SIHZhbHVlICovCi0JcmVnLkZ1bmN0aW9uID0gMDsKLQlyZWcuQWN0aW9uID0gQ1NfUkVBRDsKLQlyZWcuT2Zmc2V0ID0gQ0lTUkVHX0NPUjsKLQlyZXQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluaywgJnJlZyk7CisJcmV0ID0gcGNtY2lhX3JlYWRfY29uZmlnX2J5dGUobGluaywgQ0lTUkVHX0NPUiwgJnNhdmVfY29yKTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZDsKLQlzYXZlX2NvciA9IHJlZy5WYWx1ZTsKIAogCS8qIFNvZnQtUmVzZXQgY2FyZCAqLwotCXJlZy5BY3Rpb24gPSBDU19XUklURTsKLQlyZWcuT2Zmc2V0ID0gQ0lTUkVHX0NPUjsKLQlyZWcuVmFsdWUgPSAoc2F2ZV9jb3IgfCBDT1JfU09GVF9SRVNFVCk7Ci0JcmV0ID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpOworCXJldCA9IHBjbWNpYV93cml0ZV9jb25maWdfYnl0ZShsaW5rLCBDSVNSRUdfQ09SLAorCQkJCShzYXZlX2NvciB8IENPUl9TT0ZUX1JFU0VUKSk7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsZWQ7CiAJdWRlbGF5KDEwMDApOwogCiAJLyogUmVhZCBDQ1NSICovCi0JcmVnLkFjdGlvbiA9IENTX1JFQUQ7Ci0JcmVnLk9mZnNldCA9IENJU1JFR19DQ1NSOwotCXJldCA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKTsKKwlyZXQgPSBwY21jaWFfcmVhZF9jb25maWdfYnl0ZShsaW5rLCBDSVNSRUdfQ0NTUiwgJmNjc3IpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbGVkOwogCkBAIC0xMTYsMTkgKzEwNywxNSBAQAogCSAqIFN0YXJ0IG9yIHN0b3AgdGhlIGZpcm13YXJlLiAgTWVtb3J5IHdpZHRoIGJpdCBzaG91bGQgYmUKIAkgKiBwcmVzZXJ2ZWQgZnJvbSB0aGUgdmFsdWUgd2UndmUganVzdCByZWFkLgogCSAqLwotCXJlZy5BY3Rpb24gPSBDU19XUklURTsKLQlyZWcuT2Zmc2V0ID0gQ0lTUkVHX0NDU1I7Ci0JcmVnLlZhbHVlID0gKGlkbGUgPyBIQ1JfSURMRSA6IEhDUl9SVU4pIHwgKHJlZy5WYWx1ZSAmIEhDUl9NRU0xNik7Ci0JcmV0ID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpOworCWNjc3IgPSAoaWRsZSA/IEhDUl9JRExFIDogSENSX1JVTikgfCAoY2NzciAmIEhDUl9NRU0xNik7CisJcmV0ID0gcGNtY2lhX3dyaXRlX2NvbmZpZ19ieXRlKGxpbmssIENJU1JFR19DQ1NSLCBjY3NyKTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZDsKIAl1ZGVsYXkoMTAwMCk7CiAKIAkvKiBSZXN0b3JlIG9yaWdpbmFsIENPUiBjb25maWd1cmF0aW9uIGluZGV4ICovCi0JcmVnLkFjdGlvbiA9IENTX1dSSVRFOwotCXJlZy5PZmZzZXQgPSBDSVNSRUdfQ09SOwotCXJlZy5WYWx1ZSA9IChzYXZlX2NvciAmIH5DT1JfU09GVF9SRVNFVCk7Ci0JcmV0ID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpOworCXJldCA9IHBjbWNpYV93cml0ZV9jb25maWdfYnl0ZShsaW5rLCBDSVNSRUdfQ09SLAorCQkJCShzYXZlX2NvciAmIH5DT1JfU09GVF9SRVNFVCkpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbGVkOwogCXVkZWxheSgxMDAwKTsKQEAgLTI2NiwyNSArMjUzLDIzIEBACiAJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7CiAKIAkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KLQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gcF9kZXYtPmlvLk51bVBvcnRzMiA9IDA7CisJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA9IDA7CiAJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC0+aW8ubndpbiA+IDApKSB7CiAJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC0+aW87Ci0JCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCi0JCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7Ci0JCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCi0JCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7Ci0JCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKKwkJcF9kZXYtPmlvX2xpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgJj0gfklPX0RBVEFfUEFUSF9XSURUSDsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyB8PQorCQkJcGNtY2lhX2lvX2NmZ19kYXRhX3dpZHRoKGlvLT5mbGFncyk7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBpby0+d2luWzBdLmJhc2U7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gaW8tPndpblswXS5sZW47CiAJCWlmIChpby0+bndpbiA+IDEpIHsKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMiA9IHBfZGV2LT5pby5BdHRyaWJ1dGVzMTsKLQkJCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7Ci0JCQlwX2Rldi0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPmZsYWdzID0gcF9kZXYtPnJlc291cmNlWzBdLT5mbGFnczsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+c3RhcnQgPSBpby0+d2luWzFdLmJhc2U7CisJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA9IGlvLT53aW5bMV0ubGVuOwogCQl9CiAKIAkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KLQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSAhPSAwKQorCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpICE9IDApCiAJCQlnb3RvIG5leHRfZW50cnk7CiAJfQogCXJldHVybiAwOwpAQCAtMzMyLDcgKzMxNyw4IEBACiAJLyogV2UgaW5pdGlhbGl6ZSB0aGUgaGVybWVzIHN0cnVjdHVyZSBiZWZvcmUgY29tcGxldGluZyBQQ01DSUEKIAkgKiBjb25maWd1cmF0aW9uIGp1c3QgaW4gY2FzZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgZ2V0cwogCSAqIGNhbGxlZC4gKi8KLQltZW0gPSBpb3BvcnRfbWFwKGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aW8uTnVtUG9ydHMxKTsKKwltZW0gPSBpb3BvcnRfbWFwKGxpbmstPnJlc291cmNlWzBdLT5zdGFydCwKKwkJCXJlc291cmNlX3NpemUobGluay0+cmVzb3VyY2VbMF0pKTsKIAlpZiAoIW1lbSkKIAkJZ290byBmYWlsZWQ7CiAKQEAgLTM1OSw3ICszNDUsNyBAQAogCX0KIAogCS8qIFJlZ2lzdGVyIGFuIGludGVyZmFjZSB3aXRoIHRoZSBzdGFjayAqLwotCWlmIChvcmlub2NvX2lmX2FkZChwcml2LCBsaW5rLT5pby5CYXNlUG9ydDEsCisJaWYgKG9yaW5vY29faWZfYWRkKHByaXYsIGxpbmstPnJlc291cmNlWzBdLT5zdGFydCwKIAkJCSAgIGxpbmstPmlycSwgTlVMTCkgIT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJvcmlub2NvX2lmX2FkZCgpIGZhaWxlZFxuIik7CiAJCWdvdG8gZmFpbGVkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby93ZXh0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3dleHQuYwppbmRleCA1Nzc1MTI0Li5jZjdiZTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3dleHQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3dleHQuYwpAQCAtMTI4LDcgKzEyOCw3IEBACiAJfSBlbHNlIHsKIAkJc3RydWN0IHsKIAkJCV9fbGUxNiBxdWFsLCBzaWduYWwsIG5vaXNlLCB1bnVzZWQ7Ci0JCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGNxOworCQl9IF9fcGFja2VkIGNxOwogCiAJCWVyciA9IEhFUk1FU19SRUFEX1JFQ09SRChodywgVVNFUl9CQVAsCiAJCQkJCSBIRVJNRVNfUklEX0NPTU1TUVVBTElUWSwgJmNxKTsKQEAgLTk5MywxMSArOTkzLDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAod3JxdS0+ZGF0YS5sZW5ndGgpIHsKLQkJYnVmID0ga21hbGxvYyh3cnF1LT5kYXRhLmxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJCWJ1ZiA9IGttZW1kdXAoZXh0cmEsIHdycXUtPmRhdGEubGVuZ3RoLCBHRlBfS0VSTkVMKTsKIAkJaWYgKGJ1ZiA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJbWVtY3B5KGJ1ZiwgZXh0cmEsIHdycXUtPmRhdGEubGVuZ3RoKTsKIAl9IGVsc2UKIAkJYnVmID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L2VlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L2VlcHJvbS5jCmluZGV4IDE4N2UyNjMuLmQ2ODdjYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9lZXByb20uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvZWVwcm9tLmMKQEAgLTE0OSwxNiArMTQ5LDE1IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAobGlzdC0+Y2hhbm5lbHNbaV0uZGF0YSAhPSBDSEFOX0hBU19BTEwpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6JXMlcyVzIGlzL2FyZSBtaXNzaW5nIGZvciAiCi0JCQkJCSJjaGFubmVsOiVkIFslZCBNSHpdLlxuIiwKLQkJCSAgICAgICB3aXBoeV9uYW1lKGRldi0+d2lwaHkpLAotCQkJICAgICAgIChsaXN0LT5jaGFubmVsc1tpXS5kYXRhICYgQ0hBTl9IQVNfQ0FMID8gIiIgOgotCQkJCSIgW2lxYXV0byBjYWxpYnJhdGlvbiBkYXRhXSIpLAotCQkJICAgICAgIChsaXN0LT5jaGFubmVsc1tpXS5kYXRhICYgQ0hBTl9IQVNfTElNSVQgPyAiIiA6Ci0JCQkJIiBbb3V0cHV0IHBvd2VyIGxpbWl0c10iKSwKLQkJCSAgICAgICAobGlzdC0+Y2hhbm5lbHNbaV0uZGF0YSAmIENIQU5fSEFTX0NVUlZFID8gIiIgOgotCQkJCSIgW2N1cnZlIGRhdGFdIiksCi0JCQkgICAgICAgbGlzdC0+Y2hhbm5lbHNbaV0uaW5kZXgsIGxpc3QtPmNoYW5uZWxzW2ldLmZyZXEpOworCQkJd2lwaHlfZXJyKGRldi0+d2lwaHksCisJCQkJICAiJXMlcyVzIGlzL2FyZSBtaXNzaW5nIGZvciBjaGFubmVsOiVkIFslZCBNSHpdLlxuIiwKKwkJCQkgIChsaXN0LT5jaGFubmVsc1tpXS5kYXRhICYgQ0hBTl9IQVNfQ0FMID8gIiIgOgorCQkJCSAgICIgW2lxYXV0byBjYWxpYnJhdGlvbiBkYXRhXSIpLAorCQkJCSAgKGxpc3QtPmNoYW5uZWxzW2ldLmRhdGEgJiBDSEFOX0hBU19MSU1JVCA/ICIiIDoKKwkJCQkgICAiIFtvdXRwdXQgcG93ZXIgbGltaXRzXSIpLAorCQkJCSAgKGxpc3QtPmNoYW5uZWxzW2ldLmRhdGEgJiBDSEFOX0hBU19DVVJWRSA/ICIiIDoKKwkJCQkgICAiIFtjdXJ2ZSBkYXRhXSIpLAorCQkJCSAgbGlzdC0+Y2hhbm5lbHNbaV0uaW5kZXgsIGxpc3QtPmNoYW5uZWxzW2ldLmZyZXEpOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtMTY4LDkgKzE2Nyw4IEBACiAJfQogCiAJaWYgKGogPT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBEaXNhYmxpbmcgdG90YWxseSBkYW1hZ2VkICVzIGJhbmQuXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgPwotCQkgICAgICAgIjIgR0h6IiA6ICI1IEdIeiIpOworCQl3aXBoeV9lcnIoZGV2LT53aXBoeSwgImRpc2FibGluZyB0b3RhbGx5IGRhbWFnZWQgJWQgR0h6IGJhbmRcbiIsCisJCQkgIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopID8gMiA6IDUpOwogCiAJCXJldCA9IC1FTk9EQVRBOwogCQlnb3RvIGVycl9vdXQ7CkBAIC0yNDQsOSArMjQyLDkgQEAKIAogCWlmICgocHJpdi0+aXFfYXV0b2NhbF9sZW4gIT0gcHJpdi0+Y3VydmVfZGF0YS0+ZW50cmllcykgfHwKIAkgICAgKHByaXYtPmlxX2F1dG9jYWxfbGVuICE9IHByaXYtPm91dHB1dF9saW1pdC0+ZW50cmllcykpCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFVuc3VwcG9ydGVkIG9yIGRhbWFnZWQgRUVQUk9NIGRldGVjdGVkLiAiCi0JCQkJIllvdSBtYXkgbm90IGJlIGFibGUgdG8gdXNlIGFsbCBjaGFubmVscy5cbiIsCi0JCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7CisJCXdpcGh5X2VycihkZXYtPndpcGh5LAorCQkJICAiVW5zdXBwb3J0ZWQgb3IgZGFtYWdlZCBFRVBST00gZGV0ZWN0ZWQuICIKKwkJCSAgIllvdSBtYXkgbm90IGJlIGFibGUgdG8gdXNlIGFsbCBjaGFubmVscy5cbiIpOwogCiAJbWF4X2NoYW5uZWxfbnVtID0gbWF4X3QodW5zaWduZWQgaW50LCBwcml2LT5vdXRwdXRfbGltaXQtPmVudHJpZXMsCiAJCQkJcHJpdi0+aXFfYXV0b2NhbF9sZW4pOwpAQCAtNDE5LDE1ICs0MTcsMTQgQEAKIAlpbnQgaTsKIAogCWlmIChsZW4gIT0gKGVudHJ5X3NpemUgKiBudW1fZW50cmllcykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5rbm93biByc3NpIGNhbGlicmF0aW9uIGRhdGEgcGFja2luZyAiCi0JCQkJICIgdHlwZTooJXgpIGxlbjolZC5cbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKGRldi0+d2lwaHkpLCB0eXBlLCBsZW4pOworCQl3aXBoeV9lcnIoZGV2LT53aXBoeSwKKwkJCSAgInVua25vd24gcnNzaSBjYWxpYnJhdGlvbiBkYXRhIHBhY2tpbmcgdHlwZTooJXgpIGxlbjolZC5cbiIsCisJCQkgIHR5cGUsIGxlbik7CiAKIAkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoInJzc2ljYWw6IiwgRFVNUF9QUkVGSVhfTk9ORSwKIAkJCQkgICAgIGRhdGEsIGxlbik7CiAKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogcGxlYXNlIHJlcG9ydCB0aGlzIGlzc3VlLlxuIiwKLQkJCXdpcGh5X25hbWUoZGV2LT53aXBoeSkpOworCQl3aXBoeV9lcnIoZGV2LT53aXBoeSwgInBsZWFzZSByZXBvcnQgdGhpcyBpc3N1ZS5cbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC00NDUsMTUgKzQ0MiwxNCBAQAogCXN0cnVjdCBwZGFfY291bnRyeSAqY291bnRyeTsKIAogCWlmIChsZW4gIT0gc2l6ZW9mKCpjb3VudHJ5KSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmb3VuZCBwb3NzaWJsZSBpbnZhbGlkIGRlZmF1bHQgY291bnRyeSAiCi0JCQkJImVlcHJvbSBlbnRyeS4gKGVudHJ5IHNpemU6ICVkKVxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoZGV2LT53aXBoeSksIGxlbik7CisJCXdpcGh5X2VycihkZXYtPndpcGh5LAorCQkJICAiZm91bmQgcG9zc2libGUgaW52YWxpZCBkZWZhdWx0IGNvdW50cnkgZWVwcm9tIGVudHJ5LiAoZW50cnkgc2l6ZTogJWQpXG4iLAorCQkJICBsZW4pOwogCiAJCXByaW50X2hleF9kdW1wX2J5dGVzKCJjb3VudHJ5OiIsIERVTVBfUFJFRklYX05PTkUsCiAJCQkJICAgICBkYXRhLCBsZW4pOwogCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHBsZWFzZSByZXBvcnQgdGhpcyBpc3N1ZS5cbiIsCi0JCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKKwkJd2lwaHlfZXJyKGRldi0+d2lwaHksICJwbGVhc2UgcmVwb3J0IHRoaXMgaXNzdWUuXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDc4LDggKzQ3NCw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGRhdGFbMF0gIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmtub3duIG91dHB1dCBwb3dlciBkYiByZXZpc2lvbjoleFxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoZGV2LT53aXBoeSksIGRhdGFbMF0pOworCQl3aXBoeV9lcnIoZGV2LT53aXBoeSwgInVua25vd24gb3V0cHV0IHBvd2VyIGRiIHJldmlzaW9uOiV4XG4iLAorCQkJICBkYXRhWzBdKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC01ODcsMTAgKzU4Myw5IEBACiAJCQkJZXJyID0gcDU0X2NvbnZlcnRfcmV2MShkZXYsIGN1cnZlX2RhdGEpOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmtub3duIGN1cnZlIGRhdGEgIgotCQkJCQkJInJldmlzaW9uICVkXG4iLAotCQkJCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSwKLQkJCQkJCWN1cnZlX2RhdGEtPmNhbF9tZXRob2RfcmV2KTsKKwkJCQl3aXBoeV9lcnIoZGV2LT53aXBoeSwKKwkJCQkJICAidW5rbm93biBjdXJ2ZSBkYXRhIHJldmlzaW9uICVkXG4iLAorCQkJCQkgIGN1cnZlX2RhdGEtPmNhbF9tZXRob2RfcmV2KTsKIAkJCQllcnIgPSAtRU5PREVWOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtNTk5LDEzICs1OTQsMTMgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFBEUl9QUklTTV9aSUZfVFhfSVFfQ0FMSUJSQVRJT046Ci0JCQlwcml2LT5pcV9hdXRvY2FsID0ga21hbGxvYyhkYXRhX2xlbiwgR0ZQX0tFUk5FTCk7CisJCQlwcml2LT5pcV9hdXRvY2FsID0ga21lbWR1cChlbnRyeS0+ZGF0YSwgZGF0YV9sZW4sCisJCQkJCQkgICBHRlBfS0VSTkVMKTsKIAkJCWlmICghcHJpdi0+aXFfYXV0b2NhbCkgewogCQkJCWVyciA9IC1FTk9NRU07CiAJCQkJZ290byBlcnI7CiAJCQl9CiAKLQkJCW1lbWNweShwcml2LT5pcV9hdXRvY2FsLCBlbnRyeS0+ZGF0YSwgZGF0YV9sZW4pOwogCQkJcHJpdi0+aXFfYXV0b2NhbF9sZW4gPSBkYXRhX2xlbiAvIHNpemVvZihzdHJ1Y3QgcGRhX2lxX2F1dG9jYWxfZW50cnkpOwogCQkJYnJlYWs7CiAJCWNhc2UgUERSX0RFRkFVTFRfQ09VTlRSWToKQEAgLTY3Miw4ICs2NjcsOCBAQAogCiAJaWYgKCFzeW50aCB8fCAhcHJpdi0+aXFfYXV0b2NhbCB8fCAhcHJpdi0+b3V0cHV0X2xpbWl0IHx8CiAJICAgICFwcml2LT5jdXJ2ZV9kYXRhKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vdCBhbGwgcmVxdWlyZWQgZW50cmllcyBmb3VuZCBpbiBlZXByb20hXG4iLAotCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7CisJCXdpcGh5X2VycihkZXYtPndpcGh5LAorCQkJICAibm90IGFsbCByZXF1aXJlZCBlbnRyaWVzIGZvdW5kIGluIGVlcHJvbSFcbiIpOwogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIGVycjsKIAl9CkBAIC02OTksMTUgKzY5NCwxNSBAQAogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPndpcGh5LT5wZXJtX2FkZHIpKSB7CiAJCXU4IHBlcm1fYWRkcltFVEhfQUxFTl07CiAKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEludmFsaWQgaHdhZGRyISBVc2luZyByYW5kb21seSBnZW5lcmF0ZWQgTUFDIGFkZHJcbiIsCi0JCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKKwkJd2lwaHlfd2FybihkZXYtPndpcGh5LAorCQkJICAgImludmFsaWQgaHdhZGRyISB1c2luZyByYW5kb21seSBnZW5lcmF0ZWQgbWFjIGFkZHJcbiIpOwogCQlyYW5kb21fZXRoZXJfYWRkcihwZXJtX2FkZHIpOwogCQlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihkZXYsIHBlcm1fYWRkcik7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGh3YWRkciAlcE0sIE1BQzppc2wzOCUwMnggUkY6JXNcbiIsCi0JCXdpcGh5X25hbWUoZGV2LT53aXBoeSksCWRldi0+d2lwaHktPnBlcm1fYWRkciwgcHJpdi0+dmVyc2lvbiwKLQkJcDU0X3JmX2NoaXBzW3ByaXYtPnJ4aHddKTsKKwl3aXBoeV9pbmZvKGRldi0+d2lwaHksICJod2FkZHIgJXBtLCBtYWM6aXNsMzglMDJ4IHJmOiVzXG4iLAorCQkgICBkZXYtPndpcGh5LT5wZXJtX2FkZHIsIHByaXYtPnZlcnNpb24sCisJCSAgIHA1NF9yZl9jaGlwc1twcml2LT5yeGh3XSk7CiAKIAlyZXR1cm4gMDsKIApAQCAtNzE5LDggKzcxNCw3IEBACiAJcHJpdi0+b3V0cHV0X2xpbWl0ID0gTlVMTDsKIAlwcml2LT5jdXJ2ZV9kYXRhID0gTlVMTDsKIAotCXByaW50ayhLRVJOX0VSUiAiJXM6IGVlcHJvbSBwYXJzZSBmYWlsZWQhXG4iLAotCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKKwl3aXBoeV9lcnIoZGV2LT53aXBoeSwgImVlcHJvbSBwYXJzZSBmYWlsZWQhXG4iKTsKIAlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocDU0X3BhcnNlX2VlcHJvbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvZndpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L2Z3aW8uYwppbmRleCBjNDNhNWQ0Li40NzAwNmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvZndpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9md2lvLmMKQEAgLTYyLDE2ICs2MiwxNSBAQAogCQkJY2FzZSBGV19MTTIwOgogCQkJY2FzZSBGV19MTTg3OiB7CiAJCQkJY2hhciAqaWZ0eXBlID0gKGNoYXIgKilib290cmVjLT5kYXRhOwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwNTQgZGV0ZWN0ZWQgYSBMTSVjJWMgIgotCQkJCQkJICJmaXJtd2FyZVxuIiwKLQkJCQkJd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLAotCQkJCQlpZnR5cGVbMl0sIGlmdHlwZVszXSk7CisJCQkJd2lwaHlfaW5mbyhwcml2LT5ody0+d2lwaHksCisJCQkJCSAgICJwNTQgZGV0ZWN0ZWQgYSBMTSVjJWMgZmlybXdhcmVcbiIsCisJCQkJCSAgIGlmdHlwZVsyXSwgaWZ0eXBlWzNdKTsKIAkJCQlicmVhazsKIAkJCQl9CiAJCQljYXNlIEZXX0ZNQUM6CiAJCQlkZWZhdWx0OgotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuc3VwcG9ydGVkIGZpcm13YXJlXG4iLAotCQkJCQl3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOworCQkJCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksCisJCQkJCSAgInVuc3VwcG9ydGVkIGZpcm13YXJlXG4iKTsKIAkJCQlyZXR1cm4gLUVOT0RFVjsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMTI1LDE1ICsxMjQsMTUgQEAKIAl9CiAKIAlpZiAoZndfdmVyc2lvbikKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZXIHJldiAlcyAtIFNvZnRtYWMgcHJvdG9jb2wgJXguJXhcbiIsCi0JCQl3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGZ3X3ZlcnNpb24sCi0JCQlwcml2LT5md192YXIgPj4gOCwgcHJpdi0+ZndfdmFyICYgMHhmZik7CisJCXdpcGh5X2luZm8ocHJpdi0+aHctPndpcGh5LAorCQkJICAgImZ3IHJldiAlcyAtIHNvZnRtYWMgcHJvdG9jb2wgJXguJXhcbiIsCisJCQkgICBmd192ZXJzaW9uLCBwcml2LT5md192YXIgPj4gOCwgcHJpdi0+ZndfdmFyICYgMHhmZik7CiAKIAlpZiAocHJpdi0+ZndfdmFyIDwgMHg1MDApCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiB5b3UgYXJlIHVzaW5nIGFuIG9ic29sZXRlIGZpcm13YXJlLiAiCi0JCSAgICAgICAidmlzaXQgaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vdXNlcnMvRHJpdmVycy9wNTQgIgotCQkgICAgICAgImFuZCBncmFiIG9uZSBmb3IgXCJrZXJuZWwgPj0gMi42LjI4XCIhXG4iLAotCQkJd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKKwkJd2lwaHlfaW5mbyhwcml2LT5ody0+d2lwaHksCisJCQkgICAieW91IGFyZSB1c2luZyBhbiBvYnNvbGV0ZSBmaXJtd2FyZS4gIgorCQkJICAgInZpc2l0IGh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnL2VuL3VzZXJzL0RyaXZlcnMvcDU0ICIKKwkJCSAgICJhbmQgZ3JhYiBvbmUgZm9yIFwia2VybmVsID49IDIuNi4yOFwiIVxuIik7CiAKIAlpZiAocHJpdi0+ZndfdmFyID49IDB4MzAwKSB7CiAJCS8qIEZpcm13YXJlIHN1cHBvcnRzIFFvUywgdXNlIGl0ISAqLwpAQCAtMTUyLDEzICsxNTEsMTQgQEAKIAkJcHJpdi0+aHctPnF1ZXVlcyA9IFA1NF9RVUVVRV9BQ19OVU07CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNyeXB0b2dyYXBoaWMgYWNjZWxlcmF0b3IgIgotCSAgICAgICAiV0VQOiVzLCBUS0lQOiVzLCBDQ01QOiVzXG4iLCB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksCi0JCShwcml2LT5wcml2YWN5X2NhcHMgJiBCUl9ERVNDX1BSSVZfQ0FQX1dFUCkgPyAiWUVTIiA6Ci0JCSJubyIsIChwcml2LT5wcml2YWN5X2NhcHMgJiAoQlJfREVTQ19QUklWX0NBUF9US0lQIHwKLQkJQlJfREVTQ19QUklWX0NBUF9NSUNIQUVMKSkgPyAiWUVTIiA6ICJubyIsCi0JCShwcml2LT5wcml2YWN5X2NhcHMgJiBCUl9ERVNDX1BSSVZfQ0FQX0FFU0NDTVApID8KLQkJIllFUyIgOiAibm8iKTsKKwl3aXBoeV9pbmZvKHByaXYtPmh3LT53aXBoeSwKKwkJICAgImNyeXB0b2dyYXBoaWMgYWNjZWxlcmF0b3IgV0VQOiVzLCBUS0lQOiVzLCBDQ01QOiVzXG4iLAorCQkgICAocHJpdi0+cHJpdmFjeV9jYXBzICYgQlJfREVTQ19QUklWX0NBUF9XRVApID8gIllFUyIgOiAibm8iLAorCQkgICAocHJpdi0+cHJpdmFjeV9jYXBzICYKKwkJICAgIChCUl9ERVNDX1BSSVZfQ0FQX1RLSVAgfCBCUl9ERVNDX1BSSVZfQ0FQX01JQ0hBRUwpKQorCQkgICA/ICJZRVMiIDogIm5vIiwKKwkJICAgKHByaXYtPnByaXZhY3lfY2FwcyAmIEJSX0RFU0NfUFJJVl9DQVBfQUVTQ0NNUCkKKwkJICAgPyAiWUVTIiA6ICJubyIpOwogCiAJaWYgKHByaXYtPnJ4X2tleWNhY2hlX3NpemUpIHsKIAkJLyoKQEAgLTI0Nyw4ICsyNDcsNyBAQAogCiAJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgKIAkgICAgICZwcml2LT5lZXByb21fY29tcCwgSFopKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGRldmljZSBkb2VzIG5vdCByZXNwb25kIVxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CisJCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksICJkZXZpY2UgZG9lcyBub3QgcmVzcG9uZCFcbiIpOwogCQlyZXQgPSAtRUJVU1k7CiAJfQogCXByaXYtPmVlcHJvbSA9IE5VTEw7CkBAIC01MjMsOSArNTIyLDkgQEAKIAlyZXR1cm4gMDsKIAogZXJyOgotCXByaW50ayhLRVJOX0VSUiAiJXM6IGZyZXF1ZW5jeSBjaGFuZ2UgdG8gY2hhbm5lbCAlZCBmYWlsZWQuXG4iLAotCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbCgKLQkgICAgICAgcHJpdi0+aHctPmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEpKTsKKwl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LCAiZnJlcXVlbmN5IGNoYW5nZSB0byBjaGFubmVsICVkIGZhaWxlZC5cbiIsCisJCSAgaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKAorCQkJICBwcml2LT5ody0+Y29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSkpOwogCiAJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTY3Niw4ICs2NzUsOCBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgY3J5cHRvZ3JhcGhpYyBhbGdvcml0aG06ICVkXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBhbGdvKTsKKwkJd2lwaHlfZXJyKHByaXYtPmh3LT53aXBoeSwKKwkJCSAgImludmFsaWQgY3J5cHRvZ3JhcGhpYyBhbGdvcml0aG06ICVkXG4iLCBhbGdvKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbGVkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbGVkLmMKaW5kZXggOTU3NWFjMC4uZWE5MWY1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L2xlZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9sZWQuYwpAQCAtNTcsOCArNTcsOCBAQAogCiAJZXJyID0gcDU0X3NldF9sZWRzKHByaXYpOwogCWlmIChlcnIgJiYgbmV0X3JhdGVsaW1pdCgpKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gdXBkYXRlIExFRHMgKCVkKS5cbiIsCi0JCQl3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGVycik7CisJCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksCisJCQkgICJmYWlsZWQgdG8gdXBkYXRlIGxlZHMgKCVkKS5cbiIsIGVycik7CiAKIAlpZiAocmVydW4pCiAJCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+aHcsICZwcml2LT5sZWRfd29yaywKQEAgLTEwMiw4ICsxMDIsOCBAQAogCiAJZXJyID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKHdpcGh5X2Rldihwcml2LT5ody0+d2lwaHkpLCAmbGVkLT5sZWRfZGV2KTsKIAlpZiAoZXJyKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gcmVnaXN0ZXIgJXMgTEVELlxuIiwKLQkJCXdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgbmFtZSk7CisJCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksCisJCQkgICJmYWlsZWQgdG8gcmVnaXN0ZXIgJXMgbGVkLlxuIiwgbmFtZSk7CiAJZWxzZQogCQlsZWQtPnJlZ2lzdGVyZWQgPSAxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L21haW4uYwppbmRleCBjMDcyZjQxLi40N2RiNDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9tYWluLmMKQEAgLTUwNyw2ICs1MDcsMjIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHA1NF9nZXRfc3VydmV5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgaW50IGlkeCwKKwkJCQlzdHJ1Y3Qgc3VydmV5X2luZm8gKnN1cnZleSkKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmZGV2LT5jb25mOworCisJaWYgKGlkeCAhPSAwKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXN1cnZleS0+Y2hhbm5lbCA9IGNvbmYtPmNoYW5uZWw7CisJc3VydmV5LT5maWxsZWQgPSBTVVJWRVlfSU5GT19OT0lTRV9EQk07CisJc3VydmV5LT5ub2lzZSA9IGNsYW1wX3QoczgsIHByaXYtPm5vaXNlLCAtMTI4LCAxMjcpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBwNTRfb3BzID0gewogCS50eAkJCT0gcDU0X3R4XzgwMjExLAogCS5zdGFydAkJCT0gcDU0X3N0YXJ0LApAQCAtNTIzLDYgKzUzOSw3IEBACiAJLmNvbmZpZ3VyZV9maWx0ZXIJPSBwNTRfY29uZmlndXJlX2ZpbHRlciwKIAkuY29uZl90eAkJPSBwNTRfY29uZl90eCwKIAkuZ2V0X3N0YXRzCQk9IHA1NF9nZXRfc3RhdHMsCisJLmdldF9zdXJ2ZXkJCT0gcDU0X2dldF9zdXJ2ZXksCiB9OwogCiBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpwNTRfaW5pdF9jb21tb24oc2l6ZV90IHByaXZfZGF0YV9sZW4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbmV0MjI4MC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L25ldDIyODAuaAppbmRleCA0OTE1ZDlkLi5lM2VkODkzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L25ldDIyODAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbmV0MjI4MC5oCkBAIC0yMzIsNyArMjMyLDcgQEAKICNkZWZpbmUgR1BJTzJfSU5URVJSVVBUCQkJCQkJMgogI2RlZmluZSBHUElPMV9JTlRFUlJVUFQJCQkJCQkxCiAjZGVmaW5lIEdQSU8wX0lOVEVSUlVQVAkJCQkJCTAKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogdXNiIGNvbnRyb2wsIEJBUjAgKyAweDAwODAgKi8KIHN0cnVjdCBuZXQyMjgwX3VzYl9yZWdzIHsKQEAgLTI5Niw3ICsyOTYsNyBAQAogI2RlZmluZSBGT1JDRV9JTU1FRElBVEUJCQkJCQk3CiAjZGVmaW5lIE9VUl9VU0JfQUREUkVTUwkJCQkJCTAKIAlfX2xlMzIJCQlvdXJjb25maWc7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIHBjaSBjb250cm9sLCBCQVIwICsgMHgwMTAwICovCiBzdHJ1Y3QgbmV0MjI4MF9wY2lfcmVncyB7CkBAIC0zMjMsNyArMzIzLDcgQEAKICNkZWZpbmUgUENJX0FSQklURVJfQ0xFQVIJCQkJCTIKICNkZWZpbmUgUENJX0VYVEVSTkFMX0FSQklURVIJCQkJCTEKICNkZWZpbmUgUENJX0hPU1RfTU9ERQkJCQkJCTAKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogZG1hIGNvbnRyb2wsIEJBUjAgKyAweDAxODAgLi4uIGFycmF5IG9mIGZvdXIgc3RydWN0cyBsaWtlIHRoaXMsCiAgKiBmb3IgY2hhbm5lbHMgMC4uMy4gIHNlZSBhbHNvIHN0cnVjdCBuZXQyMjgwX2RtYTogIGRlc2NyaXB0b3IKQEAgLTM2NCw3ICszNjQsNyBAQAogCV9fbGUzMgkJCWRtYWFkZHI7CiAJX19sZTMyCQkJZG1hZGVzYzsKIAl1MzIJCQlfdW51c2VkMTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogZGVkaWNhdGVkIGVuZHBvaW50IHJlZ2lzdGVycywgQkFSMCArIDB4MDIwMCAqLwogCkBAIC0zNzQsNyArMzc0LDcgQEAKIAkvKiBvZmZzZXQgMHgwMjA0LCAweDAyMTQsIDB4MjI0LCAweDIzNCwgMHgyNDQgKi8KIAlfX2xlMzIJCQlkZXBfcnNwOwogCXUzMgkJCV91bnVzZWRbMl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIGNvbmZpZ3VyYWJsZSBlbmRwb2ludCByZWdpc3RlcnMsIEJBUjAgKyAweDAzMDAgLi4uIGFycmF5IG9mIHNldmVuIHN0cnVjdHMKICAqIGxpa2UgdGhpcywgZm9yIGVwMCB0aGVuIHRoZSBjb25maWd1cmFibGUgZW5kcG9pbnRzIEEuLkYKQEAgLTQzNywxNiArNDM3LDE2IEBACiAJX19sZTMyCQkJZXBfYXZhaWw7CiAJX19sZTMyCQkJZXBfZGF0YTsKIAl1MzIJCQlfdW51c2VkMFsyXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IG5ldDIyODBfcmVnX3dyaXRlIHsKIAlfX2xlMTYgcG9ydDsKIAlfX2xlMzIgYWRkcjsKIAlfX2xlMzIgdmFsOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbmV0MjI4MF9yZWdfcmVhZCB7CiAJX19sZTE2IHBvcnQ7CiAJX19sZTMyIGFkZHI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAjZW5kaWYgLyogTkVUMjI4MF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMKaW5kZXggYTVlYTg5Yy4uODIyZjhkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuYwpAQCAtNDY2LDggKzQ2Niw3IEBACiAJUDU0UF9SRUFEKGRldl9pbnQpOwogCiAJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgmcHJpdi0+Ym9vdF9jb21wLCBIWikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGJvb3QgZmlybXdhcmUhXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7CisJCXdpcGh5X2VycihkZXYtPndpcGh5LCAiY2Fubm90IGJvb3QgZmlybXdhcmUhXG4iKTsKIAkJcDU0cF9zdG9wKGRldik7CiAJCXJldHVybiAtRVRJTUVET1VUOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuaAppbmRleCAyZmVlYWQ2Li5lZTliYzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5oCkBAIC02NSw3ICs2NSw3IEBACiAJdTggdW51c2VkXzZbMTkyNF07CiAJdTggY2FyZGJ1c19jaXNbMHg4MDBdOwogCXU4IGRpcmVjdF9tZW1fd2luWzB4MTAwMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIHVzYiBiYWNrZW5kIG9ubHkgbmVlZHMgdGhlIHJlZ2lzdGVyIGRlZmluZXMgYWJvdmUgKi8KICNpZm5kZWYgUDU0VVNCX0gKQEAgLTc0LDcgKzc0LDcgQEAKIAlfX2xlMzIgZGV2aWNlX2FkZHI7CiAJX19sZTE2IGxlbjsKIAlfX2xlMTYgZmxhZ3M7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBwNTRwX3JpbmdfY29udHJvbCB7CiAJX19sZTMyIGhvc3RfaWR4WzRdOwpAQCAtODMsNyArODMsNyBAQAogCXN0cnVjdCBwNTRwX2Rlc2MgdHhfZGF0YVszMl07CiAJc3RydWN0IHA1NHBfZGVzYyByeF9tZ210WzRdOwogCXN0cnVjdCBwNTRwX2Rlc2MgdHhfbWdtdFs0XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBQNTRQX1JFQUQocikgKF9fZm9yY2UgX19sZTMyKV9fcmF3X3JlYWRsKCZwcml2LT5tYXAtPnIpCiAjZGVmaW5lIFA1NFBfV1JJVEUociwgdmFsKSBfX3Jhd193cml0ZWwoKF9fZm9yY2UgdTMyKShfX2xlMzIpKHZhbCksICZwcml2LT5tYXAtPnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0c3BpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0c3BpLmMKaW5kZXggYzhmMDlkYS4uMDg3YmYwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRzcGkuYwpAQCAtNjk3LDkgKzY5Nyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBwNTRzcGlfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCS8qIHVzZSBjeDMxMTB4IG5hbWUgYmVjYXVzZSBib2FyZC1uODAwLmMgdXNlcyB0aGF0IGZvciB0aGUKLQkJICogU1BJIHBvcnQgKi8KLQkJLm5hbWUJCT0gImN4MzExMHgiLAorCQkubmFtZQkJPSAicDU0c3BpIiwKIAkJLmJ1cwkJPSAmc3BpX2J1c190eXBlLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJfSwKQEAgLTczMywzICs3MzEsNCBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAd2ViLmRlPiIpOwogTU9EVUxFX0FMSUFTKCJzcGk6Y3gzMTEweCIpOworTU9EVUxFX0FMSUFTKCJzcGk6cDU0c3BpIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0c3BpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0c3BpLmgKaW5kZXggN2ZiZThkOC4uZGZhYTYyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRzcGkuaApAQCAtOTYsNyArOTYsNyBAQAogCV9fbGUxNiBjbWQ7CiAJX19sZTE2IGxlbjsKIAlfX2xlMzIgYWRkcjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHA1NHNfdHhfaW5mbyB7CiAJc3RydWN0IGxpc3RfaGVhZCB0eF9saXN0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jCmluZGV4IDczMDczMjUuLmFkNTk1OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmMKQEAgLTY5LDcgKzY5LDggQEAKIAl7VVNCX0RFVklDRSgweDA5MTUsIDB4MjAwMil9LAkvKiBDb2hpYmEgUHJvdG8gYm9hcmQgKi8KIAl7VVNCX0RFVklDRSgweDBiYWYsIDB4MDExOCl9LCAgIC8qIFUuUy4gUm9ib3RpY3MgVTUgODAyLjExZyBBZGFwdGVyKi8KIAl7VVNCX0RFVklDRSgweDBiZjgsIDB4MTAwOSl9LCAgIC8qIEZVSklUU1UgRS01NDAwIFVTQiBEMTcwMCovCi0Je1VTQl9ERVZJQ0UoMHgwY2RlLCAweDAwMDYpfSwgICAvKiBNZWRpb24gTUQ0MDkwMCAqLworCS8qIHtVU0JfREVWSUNFKDB4MGNkZSwgMHgwMDA2KX0sICogTWVkaW9uIE1ENDA5MDAgYWxyZWFkeSBsaXN0ZWQgYWJvdmUsCisJCQkJCSAqIGp1c3Qgbm90aW5nIGl0IGhlcmUgZm9yIGNsYXJpdHkgKi8KIAl7VVNCX0RFVklDRSgweDBjZGUsIDB4MDAwOCl9LAkvKiBTYWdlbSBYRzcwM0EgKi8KIAl7VVNCX0RFVklDRSgweDBjZGUsIDB4MDAxNSl9LAkvKiBaY29tYXggWEctNzA1QSAqLwogCXtVU0JfREVWSUNFKDB4MGQ4ZSwgMHgzNzYyKX0sCS8qIERMaW5rIERXTC1HMTIwIENvaGliYSAqLwpAQCAtNDM0LDEwICs0MzUsOSBAQAogCXU4ICpidWY7CiAJaW50IHJldDsKIAotCWJ1ZiA9IGttYWxsb2MoNCwgR0ZQX0tFUk5FTCk7CisJYnVmID0ga21lbWR1cChwNTR1X3JvbWJvb3RfMzg4NywgNCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbWNweShidWYsIHA1NHVfcm9tYm9vdF8zODg3LCA0KTsKIAlyZXQgPSBwNTR1X2J1bGtfbXNnKHByaXYsIFA1NFVfUElQRV9EQVRBLAogCQkJICAgIGJ1ZiwgNCk7CiAJa2ZyZWUoYnVmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuaAppbmRleCBlOTM1Yjc5Li5lZDQwMzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5oCkBAIC03MCwxMiArNzAsMTIgQEAKIAlfX2xlMTYgbGVuOwogCV9fbGUxNiBmb2xsb3dlcjsJLyogPyAqLwogCXU4IHBhZGRpbmdbOF07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGxtODdfdHhfaGRyIHsKIAlfX2xlMzIgZGV2aWNlX2FkZHI7CiAJX19sZTMyIGNoa3N1bTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBTb21lIGZsYWdzIGZvciB0aGUgaXNsIGhhcmR3YXJlIHJlZ2lzdGVycyBjb250cm9sbGluZyBETUEgaW5zaWRlIHRoZQogICogY2hpcCAqLwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJX19sZTMyIGZ3X2xvYWRfYWRkcjsKIAlfX2xlMzIgZndfbGVuZ3RoOwogCV9fbGUzMiBjcmM7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogcGlwZXMgMyBhbmQgNCBhcmUgbm90IHVzZWQgYnkgdGhlIGRyaXZlciAqLwogI2RlZmluZSBQNTRVX1BJUEVfTlVNQkVSIDkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC90eHJ4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvdHhyeC5jCmluZGV4IDRlNjg5MTAuLjQyN2I0NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC90eHJ4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3R4cnguYwpAQCAtMzgsOCArMzgsOCBAQAogCXUzMiBsYXJnZXN0X2hvbGUgPSAwLCBmcmVlOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4X3F1ZXVlLmxvY2ssIGZsYWdzKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IC8gLS0tIHR4IHF1ZXVlIGR1bXAgKCVkIGVudHJpZXMpIC0tLVxuIiwKLQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBza2JfcXVldWVfbGVuKCZwcml2LT50eF9xdWV1ZSkpOworCXdpcGh5X2RlYnVnKHByaXYtPmh3LT53aXBoeSwgIi8gLS0tIHR4IHF1ZXVlIGR1bXAgKCVkIGVudHJpZXMpIC0tLVxuIiwKKwkJICAgIHNrYl9xdWV1ZV9sZW4oJnByaXYtPnR4X3F1ZXVlKSk7CiAKIAlwcmV2X2FkZHIgPSBwcml2LT5yeF9zdGFydDsKIAlza2JfcXVldWVfd2FsaygmcHJpdi0+dHhfcXVldWUsIHNrYikgewpAQCAtNDgsMjEgKzQ4LDIzIEBACiAJCWhkciA9ICh2b2lkICopIHNrYi0+ZGF0YTsKIAogCQlmcmVlID0gcmFuZ2UtPnN0YXJ0X2FkZHIgLSBwcmV2X2FkZHI7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogfCBbJTAyZF0gPT4gW3NrYjolcCBza2JfbGVuOjB4JTA0eCAiCi0JCSAgICAgICAiaGRyOntmbGFnczolMDJ4IGxlbjolMDR4IHJlcV9pZDolMDR4IHR5cGU6JTAyeH0gIgotCQkgICAgICAgIm1lbTp7c3RhcnQ6JTA0eCBlbmQ6JTA0eCwgZnJlZTolZH1dXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBpKyssIHNrYiwgc2tiLT5sZW4sCi0JCSAgICAgICBsZTE2X3RvX2NwdShoZHItPmZsYWdzKSwgbGUxNl90b19jcHUoaGRyLT5sZW4pLAotCQkgICAgICAgbGUzMl90b19jcHUoaGRyLT5yZXFfaWQpLCBsZTE2X3RvX2NwdShoZHItPnR5cGUpLAotCQkgICAgICAgcmFuZ2UtPnN0YXJ0X2FkZHIsIHJhbmdlLT5lbmRfYWRkciwgZnJlZSk7CisJCXdpcGh5X2RlYnVnKHByaXYtPmh3LT53aXBoeSwKKwkJCSAgICAifCBbJTAyZF0gPT4gW3NrYjolcCBza2JfbGVuOjB4JTA0eCAiCisJCQkgICAgImhkcjp7ZmxhZ3M6JTAyeCBsZW46JTA0eCByZXFfaWQ6JTA0eCB0eXBlOiUwMnh9ICIKKwkJCSAgICAibWVtOntzdGFydDolMDR4IGVuZDolMDR4LCBmcmVlOiVkfV1cbiIsCisJCQkgICAgaSsrLCBza2IsIHNrYi0+bGVuLAorCQkJICAgIGxlMTZfdG9fY3B1KGhkci0+ZmxhZ3MpLCBsZTE2X3RvX2NwdShoZHItPmxlbiksCisJCQkgICAgbGUzMl90b19jcHUoaGRyLT5yZXFfaWQpLCBsZTE2X3RvX2NwdShoZHItPnR5cGUpLAorCQkJICAgIHJhbmdlLT5zdGFydF9hZGRyLCByYW5nZS0+ZW5kX2FkZHIsIGZyZWUpOwogCiAJCXByZXZfYWRkciA9IHJhbmdlLT5lbmRfYWRkcjsKIAkJbGFyZ2VzdF9ob2xlID0gbWF4KGxhcmdlc3RfaG9sZSwgZnJlZSk7CiAJfQogCWZyZWUgPSBwcml2LT5yeF9lbmQgLSBwcmV2X2FkZHI7CiAJbGFyZ2VzdF9ob2xlID0gbWF4KGxhcmdlc3RfaG9sZSwgZnJlZSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBcXCAtLS0gW2ZyZWU6ICVkXSwgbGFyZ2VzdCBmcmVlIGJsb2NrOiAlZCAtLS1cbiIsCi0JICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgZnJlZSwgbGFyZ2VzdF9ob2xlKTsKKwl3aXBoeV9kZWJ1Zyhwcml2LT5ody0+d2lwaHksCisJCSAgICAiXFwgLS0tIFtmcmVlOiAlZF0sIGxhcmdlc3QgZnJlZSBibG9jazogJWQgLS0tXG4iLAorCQkgICAgZnJlZSwgbGFyZ2VzdF9ob2xlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9xdWV1ZS5sb2NrLCBmbGFncyk7CiB9CiAjZW5kaWYgLyogUDU0X01NX0RFQlVHICovCkBAIC01MzgsOCArNTQwLDcgQEAKIAljYXNlIFA1NF9UUkFQX0JFQUNPTl9UWDoKIAkJYnJlYWs7CiAJY2FzZSBQNTRfVFJBUF9SQURBUjoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJhZGFyIChmcmVxOiVkIE1IeilcbiIsCi0JCQl3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGZyZXEpOworCQl3aXBoeV9pbmZvKHByaXYtPmh3LT53aXBoeSwgInJhZGFyIChmcmVxOiVkIG1oeilcbiIsIGZyZXEpOwogCQlicmVhazsKIAljYXNlIFA1NF9UUkFQX05PX0JFQUNPTjoKIAkJaWYgKHByaXYtPnZpZikKQEAgLTU1OCw4ICs1NTksOCBAQAogCQl3aXBoeV9yZmtpbGxfc2V0X2h3X3N0YXRlKHByaXYtPmh3LT53aXBoeSwgZmFsc2UpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVjZWl2ZWQgZXZlbnQ6JXggZnJlcTolZFxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgZXZlbnQsIGZyZXEpOworCQl3aXBoeV9pbmZvKHByaXYtPmh3LT53aXBoeSwgInJlY2VpdmVkIGV2ZW50OiV4IGZyZXE6JWRcbiIsCisJCQkgICBldmVudCwgZnJlcSk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTU4NCw4ICs1ODUsOSBAQAogCQlwNTRfcnhfZWVwcm9tX3JlYWRiYWNrKHByaXYsIHNrYik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogbm90IGhhbmRsaW5nIDB4JTAyeCB0eXBlIGNvbnRyb2wgZnJhbWVcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGxlMTZfdG9fY3B1KGhkci0+dHlwZSkpOworCQl3aXBoeV9kZWJ1Zyhwcml2LT5ody0+d2lwaHksCisJCQkgICAgIm5vdCBoYW5kbGluZyAweCUwMnggdHlwZSBjb250cm9sIGZyYW1lXG4iLAorCQkJICAgIGxlMTZfdG9fY3B1KGhkci0+dHlwZSkpOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYwppbmRleCA4ZDExOTBjLi43N2NkNjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMKQEAgLTIwNjcsNyArMjA2Nyw3IEBACiAJbWVtcHRyID0ga21hbGxvYyhJV19DVVNUT01fTUFYLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1lbXB0cikKIAkJcmV0dXJuOwotCUJVR19PTihuID4gSVdfQ1VTVE9NX01BWCk7CisJQlVHX09OKG4gPj0gSVdfQ1VTVE9NX01BWCk7CiAJd3JxdS5kYXRhLnBvaW50ZXIgPSBtZW1wdHI7CiAJd3JxdS5kYXRhLmxlbmd0aCA9IG47CiAJc3RyY3B5KG1lbXB0ciwgc3RyKTsKQEAgLTIxMDEsNyArMjEwMSw3IEBACiAJdTggdGltZXN0YW1wWzhdOwogCXUxNiBiZWFjb25faW50OwogCXUxNiBjYXBhYl9pbmZvOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIFdMQU5fRUlEX0dFTkVSSUMgMHhkZAogc3RhdGljIHU4IHdwYV9vaWRbNF0gPSB7IDB4MDAsIDB4NTAsIDB4ZjIsIDEgfTsKQEAgLTI3NTEsMTQgKzI3NTEsOSBAQAogICAgICAgICAgICBwLT5sZW5ndGggPiBQUklTTTJfSE9TVEFQRF9NQVhfQlVGX1NJWkUgfHwgIXAtPnBvaW50ZXIpCiAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKIAotICAgICAgIHBhcmFtID0ga21hbGxvYyhwLT5sZW5ndGgsIEdGUF9LRVJORUwpOwotICAgICAgIGlmIChwYXJhbSA9PSBOVUxMKQotICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Ci0KLSAgICAgICBpZiAoY29weV9mcm9tX3VzZXIocGFyYW0sIHAtPnBvaW50ZXIsIHAtPmxlbmd0aCkpIHsKLSAgICAgICAgICAgICAgIGtmcmVlKHBhcmFtKTsKLSAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgIH0KKwlwYXJhbSA9IG1lbWR1cF91c2VyKHAtPnBvaW50ZXIsIHAtPmxlbmd0aCk7CisJaWYgKElTX0VSUihwYXJhbSkpCisJCXJldHVybiBQVFJfRVJSKHBhcmFtKTsKIAogICAgICAgIHN3aXRjaCAocGFyYW0tPmNtZCkgewogICAgICAgIGNhc2UgUFJJU00yX1NFVF9FTkNSWVBUSU9OOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfb2lkLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9vaWQuaAppbmRleCBiNzUzNGMyLi41OWUzMTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9vaWQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9vaWQuaApAQCAtMjksMjAgKzI5LDIwIEBACiBzdHJ1Y3Qgb2JqX3NzaWQgewogCXU4IGxlbmd0aDsKIAljaGFyIG9jdGV0c1szM107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBvYmpfa2V5IHsKIAl1OCB0eXBlOwkJLyogZG90MTFfcHJpdl90ICovCiAJdTggbGVuZ3RoOwogCWNoYXIga2V5WzMyXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IG9ial9tbG1lIHsKIAl1OCBhZGRyZXNzWzZdOwogCXUxNiBpZDsKIAl1MTYgc3RhdGU7CiAJdTE2IGNvZGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBvYmpfbWxtZWV4IHsKIAl1OCBhZGRyZXNzWzZdOwpAQCAtNTEsMTIgKzUxLDEyIEBACiAJdTE2IGNvZGU7CiAJdTE2IHNpemU7CiAJdTggZGF0YVswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IG9ial9idWZmZXIgewogCXUzMiBzaXplOwogCXUzMiBhZGRyOwkJLyogMzJiaXQgYnVzIGFkZHJlc3MgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IG9ial9ic3MgewogCXU4IGFkZHJlc3NbNl07CkBAIC03NywxNyArNzcsMTcgQEAKIAlzaG9ydCByYXRlczsKIAlzaG9ydCBiYXNpY19yYXRlczsKIAlpbnQ6MTY7CQkJLyogcGFkZGluZyAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3Qgb2JqX2Jzc2xpc3QgewogCXUzMiBucjsKIAlzdHJ1Y3Qgb2JqX2JzcyBic3NsaXN0WzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3Qgb2JqX2ZyZXF1ZW5jaWVzIHsKIAl1MTYgbnI7CiAJdTE2IG1oelswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IG9ial9hdHRhY2htZW50IHsKIAljaGFyIHR5cGU7CkBAIC05NSw3ICs5NSw3IEBACiAJc2hvcnQgaWQ7CiAJc2hvcnQgc2l6ZTsKIAljaGFyIGRhdGFbMF07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoKICAqIGluIGNhc2UgZXZlcnl0aGluZydzIG9rLCB0aGUgaW5saW5lZCBmdW5jdGlvbiBiZWxvdyB3aWxsIGJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ldGguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5oCmluZGV4IDU0ZjlhNGIuLjZjYTMwYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5oCkBAIC0zNCwxMyArMzQsMTMgQEAKIAlfX2xlMTYgdW5rMzsKIAl1OCByc3NpOwogCXU4IHBhZGRpbmdbM107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCByeF9hbm5leF9oZWFkZXIgewogCXU4IGFkZHIxW0VUSF9BTEVOXTsKIAl1OCBhZGRyMltFVEhfQUxFTl07CiAJc3RydWN0IHJmbW9uX2hlYWRlciByZm1vbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogd2xhbi1uZyAoYW5kIGhvcGVmdWxseSBvdGhlcnMpIEFWUyBoZWFkZXIsIHZlcnNpb24gb25lLiAgRmllbGRzIGluCiAgKiBuZXR3b3JrIGJ5dGUgb3JkZXIuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9tZ3QuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX21ndC5oCmluZGV4IDBiMjdlNTAuLjBkYjkzZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX21ndC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX21ndC5oCkBAIC0xMDEsNyArMTAxLDcgQEAKIAl1OCBkZXZpY2VfaWQ7CiAJdTggZmxhZ3M7CiAJdTMyIGxlbmd0aDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpCit9IF9fcGFja2VkCiBwaW1mb3JfaGVhZGVyX3Q7CiAKIC8qIEEgcmVjZWl2ZWQgYW5kIGludGVycnVwdC1wcm9jZXNzZWQgbWFuYWdlbWVudCBmcmFtZSwgZWl0aGVyIGZvcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwppbmRleCBhYmZmODkzLi44ODU2MGQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwpAQCAtNDYsNyArNDYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CkBAIC05Nyw3ICs5Niw2IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIHJheV9oYW5kbGVyX2RlZjsKIAogLyoqKioqIFByb3RvdHlwZXMgZm9yIHJheWxpbmsgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBhc2NfdG9faW50KGNoYXIgYSk7CiBzdGF0aWMgdm9pZCBhdXRoZW50aWNhdGUocmF5X2Rldl90ICpsb2NhbCk7CiBzdGF0aWMgaW50IGJ1aWxkX2F1dGhfZnJhbWUocmF5X2Rldl90ICpsb2NhbCwgVUNIQVIgKmRlc3QsIGludCBhdXRoX3R5cGUpOwogc3RhdGljIHZvaWQgYXV0aGVudGljYXRlX3RpbWVvdXQodV9sb25nKTsKQEAgLTMxNiw5ICszMTQsOCBAQAogCWxvY2FsLT5maW5kZXIgPSBwX2RldjsKIAogCS8qIFRoZSBpbyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIElPIHBvcnQgbWFwcGluZy4gTm9uZSB1c2VkIGhlcmUgKi8KLQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gMDsKLQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSA1OworCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gMDsKKwlwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF84OwogCiAJLyogR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiAqLwogCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CkBAIC0zOTUsNyArMzkyLDYgQEAKIAlpbnQgcmV0ID0gMDsKIAlpbnQgaTsKIAl3aW5fcmVxX3QgcmVxOwotCW1lbXJlcV90IG1lbTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopbGluay0+cHJpdjsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIApAQCAtNDMyLDkgKzQyOCw3IEBACiAJcmV0ID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KGxpbmssICZyZXEsICZsaW5rLT53aW4pOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbGVkOwotCW1lbS5DYXJkT2Zmc2V0ID0gMHgwMDAwOwotCW1lbS5QYWdlID0gMDsKLQlyZXQgPSBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmssIGxpbmstPndpbiwgJm1lbSk7CisJcmV0ID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsaW5rLT53aW4sIDApOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbGVkOwogCWxvY2FsLT5zcmFtID0gaW9yZW1hcChyZXEuQmFzZSwgcmVxLlNpemUpOwpAQCAtNDQ4LDkgKzQ0Miw3IEBACiAJcmV0ID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KGxpbmssICZyZXEsICZsb2NhbC0+cm1lbV9oYW5kbGUpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbGVkOwotCW1lbS5DYXJkT2Zmc2V0ID0gMHg4MDAwOwotCW1lbS5QYWdlID0gMDsKLQlyZXQgPSBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmssIGxvY2FsLT5ybWVtX2hhbmRsZSwgJm1lbSk7CisJcmV0ID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsb2NhbC0+cm1lbV9oYW5kbGUsIDB4ODAwMCk7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsZWQ7CiAJbG9jYWwtPnJtZW0gPSBpb3JlbWFwKHJlcS5CYXNlLCByZXEuU2l6ZSk7CkBAIC00NjQsOSArNDU2LDcgQEAKIAlyZXQgPSBwY21jaWFfcmVxdWVzdF93aW5kb3cobGluaywgJnJlcSwgJmxvY2FsLT5hbWVtX2hhbmRsZSk7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsZWQ7Ci0JbWVtLkNhcmRPZmZzZXQgPSAweDAwMDA7Ci0JbWVtLlBhZ2UgPSAwOwotCXJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluaywgbG9jYWwtPmFtZW1faGFuZGxlLCAmbWVtKTsKKwlyZXQgPSBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmssIGxvY2FsLT5hbWVtX2hhbmRsZSwgMCk7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsZWQ7CiAJbG9jYWwtPmFtZW0gPSBpb3JlbWFwKHJlcS5CYXNlLCByZXEuU2l6ZSk7CkBAIC03OTQsNyArNzg0LDYgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgaTsKIAogCWRldl9kYmcoJmxpbmstPmRldiwgInJheV9yZWxlYXNlXG4iKTsKIApAQCAtODAzLDEzICs3OTIsNiBAQAogCWlvdW5tYXAobG9jYWwtPnNyYW0pOwogCWlvdW5tYXAobG9jYWwtPnJtZW0pOwogCWlvdW5tYXAobG9jYWwtPmFtZW0pOwotCS8qIERvIGJvdGhlciBjaGVja2luZyB0byBzZWUgaWYgdGhlc2Ugc3VjY2VlZCBvciBub3QgKi8KLQlpID0gcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmssIGxvY2FsLT5hbWVtX2hhbmRsZSk7Ci0JaWYgKGkgIT0gMCkKLQkJZGV2X2RiZygmbGluay0+ZGV2LCAiUmVsZWFzZVdpbmRvdyhsb2NhbC0+YW1lbSkgcmV0ID0gJXhcbiIsIGkpOwotCWkgPSBwY21jaWFfcmVsZWFzZV93aW5kb3cobGluaywgbG9jYWwtPnJtZW1faGFuZGxlKTsKLQlpZiAoaSAhPSAwKQotCQlkZXZfZGJnKCZsaW5rLT5kZXYsICJSZWxlYXNlV2luZG93KGxvY2FsLT5ybWVtKSByZXQgPSAleFxuIiwgaSk7CiAJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogCiAJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5X3JlbGVhc2UgZW5kaW5nXG4iKTsKQEAgLTE3MTcsMjQgKzE2OTksNiBAQAogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgaW50IGFzY190b19pbnQoY2hhciBhKQotewotCWlmIChhIDwgJzAnKQotCQlyZXR1cm4gLTE7Ci0JaWYgKGEgPD0gJzknKQotCQlyZXR1cm4gKGEgLSAnMCcpOwotCWlmIChhIDwgJ0EnKQotCQlyZXR1cm4gLTE7Ci0JaWYgKGEgPD0gJ0YnKQotCQlyZXR1cm4gKDEwICsgYSAtICdBJyk7Ci0JaWYgKGEgPCAnYScpCi0JCXJldHVybiAtMTsKLQlpZiAoYSA8PSAnZicpCi0JCXJldHVybiAoMTAgKyBhIC0gJ2EnKTsKLQlyZXR1cm4gLTE7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyBpbnQgcGFyc2VfYWRkcihjaGFyICppbl9zdHIsIFVDSEFSICpvdXQpCiB7CiAJaW50IGxlbjsKQEAgLTE3NTQsMTQgKzE3MTgsMTQgQEAKIAlpID0gNTsKIAogCXdoaWxlIChqID4gMCkgewotCQlpZiAoKGsgPSBhc2NfdG9faW50KGluX3N0cltqLS1dKSkgIT0gLTEpCisJCWlmICgoayA9IGhleF90b19iaW4oaW5fc3RyW2otLV0pKSAhPSAtMSkKIAkJCW91dFtpXSA9IGs7CiAJCWVsc2UKIAkJCXJldHVybiAwOwogCiAJCWlmIChqID09IDApCiAJCQlicmVhazsKLQkJaWYgKChrID0gYXNjX3RvX2ludChpbl9zdHJbai0tXSkpICE9IC0xKQorCQlpZiAoKGsgPSBoZXhfdG9fYmluKGluX3N0cltqLS1dKSkgIT0gLTEpCiAJCQlvdXRbaV0gKz0gayA8PCA0OwogCQllbHNlCiAJCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JuZGlzX3dsYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JuZGlzX3dsYW4uYwppbmRleCA0YmQ2MWVlLi43MTk1NzNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvcm5kaXNfd2xhbi5jCkBAIC0yMzgsMTkgKzIzOCwxOSBAQAogCXU4IGJzc2lkWzZdOwogCXU4IHBhZGRpbmdbMl07CiAJX19sZTMyIGZsYWdzOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBuZGlzXzgwMjExX3Bta2lkX2NhbmRpZGF0ZSB7CiAJdTggYnNzaWRbNl07CiAJdTggcGFkZGluZ1syXTsKIAlfX2xlMzIgZmxhZ3M7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IG5kaXNfODAyMTFfcG1raWRfY2FuZF9saXN0IHsKIAlfX2xlMzIgdmVyc2lvbjsKIAlfX2xlMzIgbnVtX2NhbmRpZGF0ZXM7CiAJc3RydWN0IG5kaXNfODAyMTFfcG1raWRfY2FuZGlkYXRlIGNhbmRpZGF0ZV9saXN0WzBdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBuZGlzXzgwMjExX3N0YXR1c19pbmRpY2F0aW9uIHsKIAlfX2xlMzIgc3RhdHVzX3R5cGU7CkBAIC0yNjAsMTkgKzI2MCwxOSBAQAogCQlzdHJ1Y3QgbmRpc184MDIxMV9hdXRoX3JlcXVlc3QJCWF1dGhfcmVxdWVzdFswXTsKIAkJc3RydWN0IG5kaXNfODAyMTFfcG1raWRfY2FuZF9saXN0CWNhbmRfbGlzdDsKIAl9IHU7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IG5kaXNfODAyMTFfc3NpZCB7CiAJX19sZTMyIGxlbmd0aDsKIAl1OCBlc3NpZFtORElTXzgwMl8xMV9MRU5HVEhfU1NJRF07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IG5kaXNfODAyMTFfY29uZl9mcmVxX2hvcCB7CiAJX19sZTMyIGxlbmd0aDsKIAlfX2xlMzIgaG9wX3BhdHRlcm47CiAJX19sZTMyIGhvcF9zZXQ7CiAJX19sZTMyIGR3ZWxsX3RpbWU7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IG5kaXNfODAyMTFfY29uZiB7CiAJX19sZTMyIGxlbmd0aDsKQEAgLTI4MCw3ICsyODAsNyBAQAogCV9fbGUzMiBhdGltX3dpbmRvdzsKIAlfX2xlMzIgZHNfY29uZmlnOwogCXN0cnVjdCBuZGlzXzgwMjExX2NvbmZfZnJlcV9ob3AgZmhfY29uZmlnOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBuZGlzXzgwMjExX2Jzc2lkX2V4IHsKIAlfX2xlMzIgbGVuZ3RoOwpAQCAtMjk1LDI1ICsyOTUsMjUgQEAKIAl1OCByYXRlc1tORElTXzgwMl8xMV9MRU5HVEhfUkFURVNfRVhdOwogCV9fbGUzMiBpZV9sZW5ndGg7CiAJdTggaWVzWzBdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBuZGlzXzgwMjExX2Jzc2lkX2xpc3RfZXggewogCV9fbGUzMiBudW1faXRlbXM7CiAJc3RydWN0IG5kaXNfODAyMTFfYnNzaWRfZXggYnNzaWRbMF07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IG5kaXNfODAyMTFfZml4ZWRfaWVzIHsKIAl1OCB0aW1lc3RhbXBbOF07CiAJX19sZTE2IGJlYWNvbl9pbnRlcnZhbDsKIAlfX2xlMTYgY2FwYWJpbGl0aWVzOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBuZGlzXzgwMjExX3dlcF9rZXkgewogCV9fbGUzMiBzaXplOwogCV9fbGUzMiBpbmRleDsKIAlfX2xlMzIgbGVuZ3RoOwogCXU4IG1hdGVyaWFsWzMyXTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbmRpc184MDIxMV9rZXkgewogCV9fbGUzMiBzaXplOwpAQCAtMzIzLDE0ICszMjMsMTQgQEAKIAl1OCBwYWRkaW5nWzZdOwogCXU4IHJzY1s4XTsKIAl1OCBtYXRlcmlhbFszMl07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IG5kaXNfODAyMTFfcmVtb3ZlX2tleSB7CiAJX19sZTMyIHNpemU7CiAJX19sZTMyIGluZGV4OwogCXU4IGJzc2lkWzZdOwogCXU4IHBhZGRpbmdbMl07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IG5kaXNfY29uZmlnX3BhcmFtIHsKIAlfX2xlMzIgbmFtZV9vZmZzOwpAQCAtMzM4LDcgKzMzOCw3IEBACiAJX19sZTMyIHR5cGU7CiAJX19sZTMyIHZhbHVlX29mZnM7CiAJX19sZTMyIHZhbHVlX2xlbmd0aDsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbmRpc184MDIxMV9hc3NvY19pbmZvIHsKIAlfX2xlMzIgbGVuZ3RoOwpAQCAtMzU4LDEyICszNTgsMTIgQEAKIAl9IHJlc3BfaWU7CiAJX19sZTMyIHJlc3BfaWVfbGVuZ3RoOwogCV9fbGUzMiBvZmZzZXRfcmVzcF9pZXM7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IG5kaXNfODAyMTFfYXV0aF9lbmNyX3BhaXIgewogCV9fbGUzMiBhdXRoX21vZGU7CiAJX19sZTMyIGVuY3JfbW9kZTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbmRpc184MDIxMV9jYXBhYmlsaXR5IHsKIAlfX2xlMzIgbGVuZ3RoOwpAQCAtMzcxLDcgKzM3MSw3IEBACiAJX19sZTMyIG51bV9wbWtpZHM7CiAJX19sZTMyIG51bV9hdXRoX2VuY3JfcGFpcjsKIAlzdHJ1Y3QgbmRpc184MDIxMV9hdXRoX2VuY3JfcGFpciBhdXRoX2VuY3JfcGFpclswXTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbmRpc184MDIxMV9ic3NpZF9pbmZvIHsKIAl1OCBic3NpZFs2XTsKQEAgLTUyMCw4ICs1MjAsOSBAQAogCiBzdGF0aWMgaW50IHJuZGlzX3NldF93aXBoeV9wYXJhbXMoc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIGNoYW5nZWQpOwogCi1zdGF0aWMgaW50IHJuZGlzX3NldF90eF9wb3dlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIHR4X3Bvd2VyX3NldHRpbmcgdHlwZSwKLQkJCQlpbnQgZGJtKTsKK3N0YXRpYyBpbnQgcm5kaXNfc2V0X3R4X3Bvd2VyKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgICAgICBlbnVtIG5sODAyMTFfdHhfcG93ZXJfc2V0dGluZyB0eXBlLAorCQkJICAgICAgaW50IG1ibSk7CiBzdGF0aWMgaW50IHJuZGlzX2dldF90eF9wb3dlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBpbnQgKmRibSk7CiAKIHN0YXRpYyBpbnQgcm5kaXNfY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtMTg1NiwyMCArMTg1NywyNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJuZGlzX3NldF90eF9wb3dlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIHR4X3Bvd2VyX3NldHRpbmcgdHlwZSwKLQkJCQlpbnQgZGJtKQorc3RhdGljIGludCBybmRpc19zZXRfdHhfcG93ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgICAgIGVudW0gbmw4MDIxMV90eF9wb3dlcl9zZXR0aW5nIHR5cGUsCisJCQkgICAgICBpbnQgbWJtKQogewogCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKIAlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBwcml2LT51c2JkZXY7CiAKLQluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoKTogdHlwZToweCV4IGRibTolaVxuIiwKLQkJICAgX19mdW5jX18sIHR5cGUsIGRibSk7CisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIiVzKCk6IHR5cGU6MHgleCBtYm06JWlcbiIsCisJCSAgIF9fZnVuY19fLCB0eXBlLCBtYm0pOworCisJaWYgKG1ibSA8IDAgfHwgKG1ibSAlIDEwMCkpCisJCXJldHVybiAtRU5PVFNVUFA7CiAKIAkvKiBEZXZpY2UgZG9lc24ndCBzdXBwb3J0IGNoYW5naW5nIHR4cG93ZXIgYWZ0ZXIgaW5pdGlhbGl6YXRpb24sIG9ubHkKIAkgKiB0dXJuIG9mZi9vbiByYWRpby4gU3VwcG9ydCAnYXV0bycgbW9kZSBhbmQgc2V0dGluZyBzYW1lIGRCbSB0aGF0IGlzCiAJICogY3VycmVudGx5IHVzZWQuCiAJICovCi0JaWYgKHR5cGUgPT0gVFhfUE9XRVJfQVVUT01BVElDIHx8IGRibSA9PSBnZXRfYmNtNDMyMF9wb3dlcl9kYm0ocHJpdikpIHsKKwlpZiAodHlwZSA9PSBOTDgwMjExX1RYX1BPV0VSX0FVVE9NQVRJQyB8fAorCSAgICBNQk1fVE9fREJNKG1ibSkgPT0gZ2V0X2JjbTQzMjBfcG93ZXJfZGJtKHByaXYpKSB7CiAJCWlmICghcHJpdi0+cmFkaW9fb24pCiAJCQlkaXNhc3NvY2lhdGUodXNiZGV2LCB0cnVlKTsgLyogdHVybiBvbiByYWRpbyAqLwogCkBAIC0yNDk1LDggKzI1MDEsNyBAQAogc3RhdGljIHZvaWQgcm5kaXNfd2xhbl9kb19saW5rX3VwX3dvcmsoc3RydWN0IHVzYm5ldCAqdXNiZGV2KQogewogCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2xhbl9wcml2KHVzYmRldik7Ci0Jc3RydWN0IG5kaXNfODAyMTFfYXNzb2NfaW5mbyAqaW5mbzsKLQl1OCBhc3NvY19idWZbc2l6ZW9mKCppbmZvKSArIElXX0NVU1RPTV9NQVggKyAzMl07CisJc3RydWN0IG5kaXNfODAyMTFfYXNzb2NfaW5mbyAqaW5mbyA9IE5VTEw7CiAJdTggYnNzaWRbRVRIX0FMRU5dOwogCWludCByZXNwX2llX2xlbiwgcmVxX2llX2xlbjsKIAl1OCAqcmVxX2llLCAqcmVzcF9pZTsKQEAgLTI1MTUsMjMgKzI1MjAsNDMgQEAKIAlyZXNwX2llID0gTlVMTDsKIAogCWlmIChwcml2LT5pbmZyYV9tb2RlID09IE5ESVNfODAyMTFfSU5GUkFfSU5GUkEpIHsKLQkJbWVtc2V0KGFzc29jX2J1ZiwgMCwgc2l6ZW9mKGFzc29jX2J1ZikpOwotCQlpbmZvID0gKHZvaWQgKilhc3NvY19idWY7CisJCWluZm8gPSBremFsbG9jKENPTlRST0xfQlVGRkVSX1NJWkUsIEdGUF9LRVJORUwpOworCQlpZiAoIWluZm8pIHsKKwkJCS8qIE5vIG1lbW9yeT8gVHJ5IHJlc3VtZSB3b3JrIGxhdGVyICovCisJCQlzZXRfYml0KFdPUktfTElOS19VUCwgJnByaXYtPndvcmtfcGVuZGluZyk7CisJCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPndvcmspOworCQkJcmV0dXJuOworCQl9CiAKLQkJLyogR2V0IGFzc29jaWF0aW9uIGluZm8gSUVzIGZyb20gZGV2aWNlIGFuZCBzZW5kIHRoZW0gYmFjayB0bwotCQkgKiB1c2Vyc3BhY2UuICovCi0JCXJldCA9IGdldF9hc3NvY2lhdGlvbl9pbmZvKHVzYmRldiwgaW5mbywgc2l6ZW9mKGFzc29jX2J1ZikpOworCQkvKiBHZXQgYXNzb2NpYXRpb24gaW5mbyBJRXMgZnJvbSBkZXZpY2UuICovCisJCXJldCA9IGdldF9hc3NvY2lhdGlvbl9pbmZvKHVzYmRldiwgaW5mbywgQ09OVFJPTF9CVUZGRVJfU0laRSk7CiAJCWlmICghcmV0KSB7CiAJCQlyZXFfaWVfbGVuID0gbGUzMl90b19jcHUoaW5mby0+cmVxX2llX2xlbmd0aCk7CiAJCQlpZiAocmVxX2llX2xlbiA+IDApIHsKIAkJCQlvZmZzZXQgPSBsZTMyX3RvX2NwdShpbmZvLT5vZmZzZXRfcmVxX2llcyk7CisKKwkJCQlpZiAob2Zmc2V0ID4gQ09OVFJPTF9CVUZGRVJfU0laRSkKKwkJCQkJb2Zmc2V0ID0gQ09OVFJPTF9CVUZGRVJfU0laRTsKKwogCQkJCXJlcV9pZSA9ICh1OCAqKWluZm8gKyBvZmZzZXQ7CisKKwkJCQlpZiAob2Zmc2V0ICsgcmVxX2llX2xlbiA+IENPTlRST0xfQlVGRkVSX1NJWkUpCisJCQkJCXJlcV9pZV9sZW4gPQorCQkJCQkJQ09OVFJPTF9CVUZGRVJfU0laRSAtIG9mZnNldDsKIAkJCX0KIAogCQkJcmVzcF9pZV9sZW4gPSBsZTMyX3RvX2NwdShpbmZvLT5yZXNwX2llX2xlbmd0aCk7CiAJCQlpZiAocmVzcF9pZV9sZW4gPiAwKSB7CiAJCQkJb2Zmc2V0ID0gbGUzMl90b19jcHUoaW5mby0+b2Zmc2V0X3Jlc3BfaWVzKTsKKworCQkJCWlmIChvZmZzZXQgPiBDT05UUk9MX0JVRkZFUl9TSVpFKQorCQkJCQlvZmZzZXQgPSBDT05UUk9MX0JVRkZFUl9TSVpFOworCiAJCQkJcmVzcF9pZSA9ICh1OCAqKWluZm8gKyBvZmZzZXQ7CisKKwkJCQlpZiAob2Zmc2V0ICsgcmVzcF9pZV9sZW4gPiBDT05UUk9MX0JVRkZFUl9TSVpFKQorCQkJCQlyZXNwX2llX2xlbiA9CisJCQkJCQlDT05UUk9MX0JVRkZFUl9TSVpFIC0gb2Zmc2V0OwogCQkJfQogCQl9CiAJfSBlbHNlIGlmIChXQVJOX09OKHByaXYtPmluZnJhX21vZGUgIT0gTkRJU184MDIxMV9JTkZSQV9BREhPQykpCkBAIC0yNTYzLDYgKzI1ODgsOSBAQAogCX0gZWxzZSBpZiAocHJpdi0+aW5mcmFfbW9kZSA9PSBORElTXzgwMjExX0lORlJBX0FESE9DKQogCQljZmc4MDIxMV9pYnNzX2pvaW5lZCh1c2JkZXYtPm5ldCwgYnNzaWQsIEdGUF9LRVJORUwpOwogCisJaWYgKGluZm8gIT0gTlVMTCkKKwkJa2ZyZWUoaW5mbyk7CisKIAlwcml2LT5jb25uZWN0ZWQgPSB0cnVlOwogCW1lbWNweShwcml2LT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jCmluZGV4IGFkMmM5OGEuLjUwNjNlMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmMKQEAgLTU4Niw5ICs1ODYsMTEgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBydDI0MDBwY2lfc2V0X3ZnYyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJCSAgICAgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCwgdTggdmdjX2xldmVsKQogewotCXJ0MjQwMHBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxMywgdmdjX2xldmVsKTsKLQlxdWFsLT52Z2NfbGV2ZWwgPSB2Z2NfbGV2ZWw7Ci0JcXVhbC0+dmdjX2xldmVsX3JlZyA9IHZnY19sZXZlbDsKKwlpZiAocXVhbC0+dmdjX2xldmVsX3JlZyAhPSB2Z2NfbGV2ZWwpIHsKKwkJcnQyNDAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDEzLCB2Z2NfbGV2ZWwpOworCQlxdWFsLT52Z2NfbGV2ZWwgPSB2Z2NfbGV2ZWw7CisJCXF1YWwtPnZnY19sZXZlbF9yZWcgPSB2Z2NfbGV2ZWw7CisJfQogfQogCiBzdGF0aWMgdm9pZCBydDI0MDBwY2lfcmVzZXRfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKQEAgLTg3Nyw3ICs4NzksOCBAQAogc3RhdGljIHZvaWQgcnQyNDAwcGNpX3RvZ2dsZV9pcnEoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCQkgZW51bSBkZXZfc3RhdGUgc3RhdGUpCiB7Ci0JaW50IG1hc2sgPSAoc3RhdGUgPT0gU1RBVEVfUkFESU9fSVJRX09GRik7CisJaW50IG1hc2sgPSAoc3RhdGUgPT0gU1RBVEVfUkFESU9fSVJRX09GRikgfHwKKwkJICAgKHN0YXRlID09IFNUQVRFX1JBRElPX0lSUV9PRkZfSVNSKTsKIAl1MzIgcmVnOwogCiAJLyoKQEAgLTk3OCw3ICs5ODEsOSBAQAogCQlydDI0MDBwY2lfdG9nZ2xlX3J4KHJ0MngwMGRldiwgc3RhdGUpOwogCQlicmVhazsKIAljYXNlIFNUQVRFX1JBRElPX0lSUV9PTjoKKwljYXNlIFNUQVRFX1JBRElPX0lSUV9PTl9JU1I6CiAJY2FzZSBTVEFURV9SQURJT19JUlFfT0ZGOgorCWNhc2UgU1RBVEVfUkFESU9fSVJRX09GRl9JU1I6CiAJCXJ0MjQwMHBjaV90b2dnbGVfaXJxKHJ0MngwMGRldiwgc3RhdGUpOwogCQlicmVhazsKIAljYXNlIFNUQVRFX0RFRVBfU0xFRVA6CkBAIC0xMDc2LDkgKzEwODEsNiBAQAogCQkJCSAgIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYykKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZW50cnktPnF1ZXVlLT5ydDJ4MDBkZXY7Ci0Jc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpICplbnRyeV9wcml2ID0gZW50cnktPnByaXZfZGF0YTsKLQlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2MoZW50cnktPnNrYik7Ci0JdTMyIHdvcmQ7CiAJdTMyIHJlZzsKIAogCS8qCkBAIC0xMDkxLDkgKzEwOTMsMTUgQEAKIAogCXJ0MngwMHF1ZXVlX21hcF90eHNrYihydDJ4MDBkZXYsIGVudHJ5LT5za2IpOwogCi0JcnQyeDAwX2Rlc2NfcmVhZChlbnRyeV9wcml2LT5kZXNjLCAxLCAmd29yZCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzFfQlVGRkVSX0FERFJFU1MsIHNrYmRlc2MtPnNrYl9kbWEpOwotCXJ0MngwMF9kZXNjX3dyaXRlKGVudHJ5X3ByaXYtPmRlc2MsIDEsIHdvcmQpOworCS8qCisJICogV3JpdGUgdGhlIFRYIGRlc2NyaXB0b3IgZm9yIHRoZSBiZWFjb24uCisJICovCisJcnQyNDAwcGNpX3dyaXRlX3R4X2Rlc2MocnQyeDAwZGV2LCBlbnRyeS0+c2tiLCB0eGRlc2MpOworCisJLyoKKwkgKiBEdW1wIGJlYWNvbiB0byB1c2Vyc3BhY2UgdGhyb3VnaCBkZWJ1Z2ZzLgorCSAqLworCXJ0MngwMGRlYnVnX2R1bXBfZnJhbWUocnQyeDAwZGV2LCBEVU1QX0ZSQU1FX0JFQUNPTiwgZW50cnktPnNrYik7CiAKIAkvKgogCSAqIEVuYWJsZSBiZWFjb25pbmcgYWdhaW4uCkBAIC0xMjMwLDIzICsxMjM4LDEwIEBACiAJfQogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgcnQyNDAwcGNpX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpCitzdGF0aWMgaXJxcmV0dXJuX3QgcnQyNDAwcGNpX2ludGVycnVwdF90aHJlYWQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBkZXZfaW5zdGFuY2U7Ci0JdTMyIHJlZzsKLQotCS8qCi0JICogR2V0IHRoZSBpbnRlcnJ1cHQgc291cmNlcyAmIHNhdmVkIHRvIGxvY2FsIHZhcmlhYmxlLgotCSAqIFdyaXRlIHJlZ2lzdGVyIHZhbHVlIGJhY2sgdG8gY2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzLgotCSAqLwotCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQ1NSNywgJnJlZyk7Ci0JcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSNywgcmVnKTsKLQotCWlmICghcmVnKQotCQlyZXR1cm4gSVJRX05PTkU7Ci0KLQlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9FTkFCTEVEX1JBRElPLCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXJldHVybiBJUlFfSEFORExFRDsKKwl1MzIgcmVnID0gcnQyeDAwZGV2LT5pcnF2YWx1ZVswXTsKIAogCS8qCiAJICogSGFuZGxlIGludGVycnVwdHMsIHdhbGsgdGhyb3VnaCBhbGwgYml0cwpAQCAtMTI4NCw5ICsxMjc5LDQwIEBACiAJaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIENTUjdfVFhET05FX1RYUklORykpCiAJCXJ0MjQwMHBjaV90eGRvbmUocnQyeDAwZGV2LCBRSURfQUNfQkspOwogCisJLyogRW5hYmxlIGludGVycnVwdHMgYWdhaW4uICovCisJcnQyeDAwZGV2LT5vcHMtPmxpYi0+c2V0X2RldmljZV9zdGF0ZShydDJ4MDBkZXYsCisJCQkJCSAgICAgIFNUQVRFX1JBRElPX0lSUV9PTl9JU1IpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAorc3RhdGljIGlycXJldHVybl90IHJ0MjQwMHBjaV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQoreworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBkZXZfaW5zdGFuY2U7CisJdTMyIHJlZzsKKworCS8qCisJICogR2V0IHRoZSBpbnRlcnJ1cHQgc291cmNlcyAmIHNhdmVkIHRvIGxvY2FsIHZhcmlhYmxlLgorCSAqIFdyaXRlIHJlZ2lzdGVyIHZhbHVlIGJhY2sgdG8gY2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzLgorCSAqLworCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQ1NSNywgJnJlZyk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSNywgcmVnKTsKKworCWlmICghcmVnKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9FTkFCTEVEX1JBRElPLCAmcnQyeDAwZGV2LT5mbGFncykpCisJCXJldHVybiBJUlFfSEFORExFRDsKKworCS8qIFN0b3JlIGlycXZhbHVlcyBmb3IgdXNlIGluIHRoZSBpbnRlcnJ1cHQgdGhyZWFkLiAqLworCXJ0MngwMGRldi0+aXJxdmFsdWVbMF0gPSByZWc7CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMsIHdpbGwgYmUgZW5hYmxlZCBhZ2FpbiBpbiB0aGUgaW50ZXJydXB0IHRocmVhZC4gKi8KKwlydDJ4MDBkZXYtPm9wcy0+bGliLT5zZXRfZGV2aWNlX3N0YXRlKHJ0MngwMGRldiwKKwkJCQkJICAgICAgU1RBVEVfUkFESU9fSVJRX09GRl9JU1IpOworCisJcmV0dXJuIElSUV9XQUtFX1RIUkVBRDsKK30KKwogLyoKICAqIERldmljZSBwcm9iZSBmdW5jdGlvbnMuCiAgKi8KQEAgLTEzOTYsOCArMTQyMiw4IEBACiAJLyoKIAkgKiBDaGVjayBpZiB0aGUgQkJQIHR1bmluZyBzaG91bGQgYmUgZW5hYmxlZC4KIAkgKi8KLQlpZiAoIXJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX1JYX0FHQ1ZHQ19UVU5JTkcpKQotCQlfX3NldF9iaXQoQ09ORklHX0RJU0FCTEVfTElOS19UVU5JTkcsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfUlhfQUdDVkdDX1RVTklORykpCisJCV9fc2V0X2JpdChEUklWRVJfU1VQUE9SVF9MSU5LX1RVTklORywgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTYzLDcgKzE1ODksOCBAQAogCS5yZW1vdmVfaW50ZXJmYWNlCT0gcnQyeDAwbWFjX3JlbW92ZV9pbnRlcmZhY2UsCiAJLmNvbmZpZwkJCT0gcnQyeDAwbWFjX2NvbmZpZywKIAkuY29uZmlndXJlX2ZpbHRlcgk9IHJ0MngwMG1hY19jb25maWd1cmVfZmlsdGVyLAotCS5zZXRfdGltCQk9IHJ0MngwMG1hY19zZXRfdGltLAorCS5zd19zY2FuX3N0YXJ0CQk9IHJ0MngwMG1hY19zd19zY2FuX3N0YXJ0LAorCS5zd19zY2FuX2NvbXBsZXRlCT0gcnQyeDAwbWFjX3N3X3NjYW5fY29tcGxldGUsCiAJLmdldF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3N0YXRzLAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gcnQyeDAwbWFjX2Jzc19pbmZvX2NoYW5nZWQsCiAJLmNvbmZfdHgJCT0gcnQyNDAwcGNpX2NvbmZfdHgsCkBAIC0xNTc0LDYgKzE2MDEsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0MngwMGxpYl9vcHMgcnQyNDAwcGNpX3J0MngwMF9vcHMgPSB7CiAJLmlycV9oYW5kbGVyCQk9IHJ0MjQwMHBjaV9pbnRlcnJ1cHQsCisJLmlycV9oYW5kbGVyX3RocmVhZAk9IHJ0MjQwMHBjaV9pbnRlcnJ1cHRfdGhyZWFkLAogCS5wcm9iZV9odwkJPSBydDI0MDBwY2lfcHJvYmVfaHcsCiAJLmluaXRpYWxpemUJCT0gcnQyeDAwcGNpX2luaXRpYWxpemUsCiAJLnVuaW5pdGlhbGl6ZQkJPSBydDJ4MDBwY2lfdW5pbml0aWFsaXplLApAQCAtMTU4NSw3ICsxNjEzLDYgQEAKIAkucmVzZXRfdHVuZXIJCT0gcnQyNDAwcGNpX3Jlc2V0X3R1bmVyLAogCS5saW5rX3R1bmVyCQk9IHJ0MjQwMHBjaV9saW5rX3R1bmVyLAogCS53cml0ZV90eF9kZXNjCQk9IHJ0MjQwMHBjaV93cml0ZV90eF9kZXNjLAotCS53cml0ZV90eF9kYXRhCQk9IHJ0MngwMHBjaV93cml0ZV90eF9kYXRhLAogCS53cml0ZV9iZWFjb24JCT0gcnQyNDAwcGNpX3dyaXRlX2JlYWNvbiwKIAkua2lja190eF9xdWV1ZQkJPSBydDI0MDBwY2lfa2lja190eF9xdWV1ZSwKIAkua2lsbF90eF9xdWV1ZQkJPSBydDI0MDBwY2lfa2lsbF90eF9xdWV1ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuYwppbmRleCA0MWRhM2QyLi5jMmE1NTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5jCkBAIC02MjYsNiArNjI2LDcgQEAKIHsKIAlpZiAocXVhbC0+dmdjX2xldmVsX3JlZyAhPSB2Z2NfbGV2ZWwpIHsKIAkJcnQyNTAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCB2Z2NfbGV2ZWwpOworCQlxdWFsLT52Z2NfbGV2ZWwgPSB2Z2NfbGV2ZWw7CiAJCXF1YWwtPnZnY19sZXZlbF9yZWcgPSB2Z2NfbGV2ZWw7CiAJfQogfQpAQCAtNzAwLDEzICs3MDEsMTAgQEAKIAkgKiBSMTcgaXMgaW5zaWRlIHRoZSBkeW5hbWljIHR1bmluZyByYW5nZSwKIAkgKiBzdGFydCB0dW5pbmcgdGhlIGxpbmsgYmFzZWQgb24gdGhlIGZhbHNlIGNjYSBjb3VudGVyLgogCSAqLwotCWlmIChxdWFsLT5mYWxzZV9jY2EgPiA1MTIgJiYgcXVhbC0+dmdjX2xldmVsX3JlZyA8IDB4NDApIHsKKwlpZiAocXVhbC0+ZmFsc2VfY2NhID4gNTEyICYmIHF1YWwtPnZnY19sZXZlbF9yZWcgPCAweDQwKQogCQlydDI1MDBwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsICsrcXVhbC0+dmdjX2xldmVsX3JlZyk7Ci0JCXF1YWwtPnZnY19sZXZlbCA9IHF1YWwtPnZnY19sZXZlbF9yZWc7Ci0JfSBlbHNlIGlmIChxdWFsLT5mYWxzZV9jY2EgPCAxMDAgJiYgcXVhbC0+dmdjX2xldmVsX3JlZyA+IDB4MzIpIHsKKwllbHNlIGlmIChxdWFsLT5mYWxzZV9jY2EgPCAxMDAgJiYgcXVhbC0+dmdjX2xldmVsX3JlZyA+IDB4MzIpCiAJCXJ0MjUwMHBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgLS1xdWFsLT52Z2NfbGV2ZWxfcmVnKTsKLQkJcXVhbC0+dmdjX2xldmVsID0gcXVhbC0+dmdjX2xldmVsX3JlZzsKLQl9CiB9CiAKIC8qCkBAIC0xMDM1LDcgKzEwMzMsOCBAQAogc3RhdGljIHZvaWQgcnQyNTAwcGNpX3RvZ2dsZV9pcnEoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCQkgZW51bSBkZXZfc3RhdGUgc3RhdGUpCiB7Ci0JaW50IG1hc2sgPSAoc3RhdGUgPT0gU1RBVEVfUkFESU9fSVJRX09GRik7CisJaW50IG1hc2sgPSAoc3RhdGUgPT0gU1RBVEVfUkFESU9fSVJRX09GRikgfHwKKwkJICAgKHN0YXRlID09IFNUQVRFX1JBRElPX0lSUV9PRkZfSVNSKTsKIAl1MzIgcmVnOwogCiAJLyoKQEAgLTExMzYsNyArMTEzNSw5IEBACiAJCXJ0MjUwMHBjaV90b2dnbGVfcngocnQyeDAwZGV2LCBzdGF0ZSk7CiAJCWJyZWFrOwogCWNhc2UgU1RBVEVfUkFESU9fSVJRX09OOgorCWNhc2UgU1RBVEVfUkFESU9fSVJRX09OX0lTUjoKIAljYXNlIFNUQVRFX1JBRElPX0lSUV9PRkY6CisJY2FzZSBTVEFURV9SQURJT19JUlFfT0ZGX0lTUjoKIAkJcnQyNTAwcGNpX3RvZ2dsZV9pcnEocnQyeDAwZGV2LCBzdGF0ZSk7CiAJCWJyZWFrOwogCWNhc2UgU1RBVEVfREVFUF9TTEVFUDoKQEAgLTEyMzMsOSArMTIzNCw2IEBACiAJCQkJICAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjKQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBlbnRyeS0+cXVldWUtPnJ0MngwMGRldjsKLQlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2kgKmVudHJ5X3ByaXYgPSBlbnRyeS0+cHJpdl9kYXRhOwotCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhlbnRyeS0+c2tiKTsKLQl1MzIgd29yZDsKIAl1MzIgcmVnOwogCiAJLyoKQEAgLTEyNDgsOSArMTI0NiwxNSBAQAogCiAJcnQyeDAwcXVldWVfbWFwX3R4c2tiKHJ0MngwMGRldiwgZW50cnktPnNrYik7CiAKLQlydDJ4MDBfZGVzY19yZWFkKGVudHJ5X3ByaXYtPmRlc2MsIDEsICZ3b3JkKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMV9CVUZGRVJfQUREUkVTUywgc2tiZGVzYy0+c2tiX2RtYSk7Ci0JcnQyeDAwX2Rlc2Nfd3JpdGUoZW50cnlfcHJpdi0+ZGVzYywgMSwgd29yZCk7CisJLyoKKwkgKiBXcml0ZSB0aGUgVFggZGVzY3JpcHRvciBmb3IgdGhlIGJlYWNvbi4KKwkgKi8KKwlydDI1MDBwY2lfd3JpdGVfdHhfZGVzYyhydDJ4MDBkZXYsIGVudHJ5LT5za2IsIHR4ZGVzYyk7CisKKwkvKgorCSAqIER1bXAgYmVhY29uIHRvIHVzZXJzcGFjZSB0aHJvdWdoIGRlYnVnZnMuCisJICovCisJcnQyeDAwZGVidWdfZHVtcF9mcmFtZShydDJ4MDBkZXYsIERVTVBfRlJBTUVfQkVBQ09OLCBlbnRyeS0+c2tiKTsKIAogCS8qCiAJICogRW5hYmxlIGJlYWNvbmluZyBhZ2Fpbi4KQEAgLTEzNjYsMjMgKzEzNzAsMTAgQEAKIAl9CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBydDI1MDBwY2lfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKK3N0YXRpYyBpcnFyZXR1cm5fdCBydDI1MDBwY2lfaW50ZXJydXB0X3RocmVhZChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpCiB7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGRldl9pbnN0YW5jZTsKLQl1MzIgcmVnOwotCi0JLyoKLQkgKiBHZXQgdGhlIGludGVycnVwdCBzb3VyY2VzICYgc2F2ZWQgdG8gbG9jYWwgdmFyaWFibGUuCi0JICogV3JpdGUgcmVnaXN0ZXIgdmFsdWUgYmFjayB0byBjbGVhciBwZW5kaW5nIGludGVycnVwdHMuCi0JICovCi0JcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBDU1I3LCAmcmVnKTsKLQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBDU1I3LCByZWcpOwotCi0JaWYgKCFyZWcpCi0JCXJldHVybiBJUlFfTk9ORTsKLQotCWlmICghdGVzdF9iaXQoREVWSUNFX1NUQVRFX0VOQUJMRURfUkFESU8sICZydDJ4MDBkZXYtPmZsYWdzKSkKLQkJcmV0dXJuIElSUV9IQU5ETEVEOworCXUzMiByZWcgPSBydDJ4MDBkZXYtPmlycXZhbHVlWzBdOwogCiAJLyoKIAkgKiBIYW5kbGUgaW50ZXJydXB0cywgd2FsayB0aHJvdWdoIGFsbCBiaXRzCkBAIC0xNDIwLDkgKzE0MTEsNDEgQEAKIAlpZiAocnQyeDAwX2dldF9maWVsZDMyKHJlZywgQ1NSN19UWERPTkVfVFhSSU5HKSkKIAkJcnQyNTAwcGNpX3R4ZG9uZShydDJ4MDBkZXYsIFFJRF9BQ19CSyk7CiAKKwkvKiBFbmFibGUgaW50ZXJydXB0cyBhZ2Fpbi4gKi8KKwlydDJ4MDBkZXYtPm9wcy0+bGliLT5zZXRfZGV2aWNlX3N0YXRlKHJ0MngwMGRldiwKKwkJCQkJICAgICAgU1RBVEVfUkFESU9fSVJRX09OX0lTUik7CisKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKK3N0YXRpYyBpcnFyZXR1cm5fdCBydDI1MDBwY2lfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKK3sKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZGV2X2luc3RhbmNlOworCXUzMiByZWc7CisKKwkvKgorCSAqIEdldCB0aGUgaW50ZXJydXB0IHNvdXJjZXMgJiBzYXZlZCB0byBsb2NhbCB2YXJpYWJsZS4KKwkgKiBXcml0ZSByZWdpc3RlciB2YWx1ZSBiYWNrIHRvIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0cy4KKwkgKi8KKwlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIENTUjcsICZyZWcpOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjcsIHJlZyk7CisKKwlpZiAoIXJlZykKKwkJcmV0dXJuIElSUV9OT05FOworCisJaWYgKCF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfRU5BQkxFRF9SQURJTywgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwkvKiBTdG9yZSBpcnF2YWx1ZXMgZm9yIHVzZSBpbiB0aGUgaW50ZXJydXB0IHRocmVhZC4gKi8KKwlydDJ4MDBkZXYtPmlycXZhbHVlWzBdID0gcmVnOworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzLCB3aWxsIGJlIGVuYWJsZWQgYWdhaW4gaW4gdGhlIGludGVycnVwdCB0aHJlYWQuICovCisJcnQyeDAwZGV2LT5vcHMtPmxpYi0+c2V0X2RldmljZV9zdGF0ZShydDJ4MDBkZXYsCisJCQkJCSAgICAgIFNUQVRFX1JBRElPX0lSUV9PRkZfSVNSKTsKKworCXJldHVybiBJUlFfV0FLRV9USFJFQUQ7Cit9CisKIC8qCiAgKiBEZXZpY2UgcHJvYmUgZnVuY3Rpb25zLgogICovCkBAIC0xNTU0LDkgKzE1NzcsOCBAQAogCSAqIENoZWNrIGlmIHRoZSBCQlAgdHVuaW5nIHNob3VsZCBiZSBlbmFibGVkLgogCSAqLwogCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9OSUMsICZlZXByb20pOwotCi0JaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9OSUNfRFlOX0JCUF9UVU5FKSkKLQkJX19zZXRfYml0KENPTkZJR19ESVNBQkxFX0xJTktfVFVOSU5HLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJaWYgKCFydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX0RZTl9CQlBfVFVORSkpCisJCV9fc2V0X2JpdChEUklWRVJfU1VQUE9SVF9MSU5LX1RVTklORywgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCiAJLyoKIAkgKiBSZWFkIHRoZSBSU1NJIDwtPiBkQm0gb2Zmc2V0IGluZm9ybWF0aW9uLgpAQCAtMTg2MSw3ICsxODgzLDggQEAKIAkucmVtb3ZlX2ludGVyZmFjZQk9IHJ0MngwMG1hY19yZW1vdmVfaW50ZXJmYWNlLAogCS5jb25maWcJCQk9IHJ0MngwMG1hY19jb25maWcsCiAJLmNvbmZpZ3VyZV9maWx0ZXIJPSBydDJ4MDBtYWNfY29uZmlndXJlX2ZpbHRlciwKLQkuc2V0X3RpbQkJPSBydDJ4MDBtYWNfc2V0X3RpbSwKKwkuc3dfc2Nhbl9zdGFydAkJPSBydDJ4MDBtYWNfc3dfc2Nhbl9zdGFydCwKKwkuc3dfc2Nhbl9jb21wbGV0ZQk9IHJ0MngwMG1hY19zd19zY2FuX2NvbXBsZXRlLAogCS5nZXRfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF9zdGF0cywKIAkuYnNzX2luZm9fY2hhbmdlZAk9IHJ0MngwMG1hY19ic3NfaW5mb19jaGFuZ2VkLAogCS5jb25mX3R4CQk9IHJ0MngwMG1hY19jb25mX3R4LApAQCAtMTg3Miw2ICsxODk1LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydDJ4MDBsaWJfb3BzIHJ0MjUwMHBjaV9ydDJ4MDBfb3BzID0gewogCS5pcnFfaGFuZGxlcgkJPSBydDI1MDBwY2lfaW50ZXJydXB0LAorCS5pcnFfaGFuZGxlcl90aHJlYWQJPSBydDI1MDBwY2lfaW50ZXJydXB0X3RocmVhZCwKIAkucHJvYmVfaHcJCT0gcnQyNTAwcGNpX3Byb2JlX2h3LAogCS5pbml0aWFsaXplCQk9IHJ0MngwMHBjaV9pbml0aWFsaXplLAogCS51bmluaXRpYWxpemUJCT0gcnQyeDAwcGNpX3VuaW5pdGlhbGl6ZSwKQEAgLTE4ODMsNyArMTkwNyw2IEBACiAJLnJlc2V0X3R1bmVyCQk9IHJ0MjUwMHBjaV9yZXNldF90dW5lciwKIAkubGlua190dW5lcgkJPSBydDI1MDBwY2lfbGlua190dW5lciwKIAkud3JpdGVfdHhfZGVzYwkJPSBydDI1MDBwY2lfd3JpdGVfdHhfZGVzYywKLQkud3JpdGVfdHhfZGF0YQkJPSBydDJ4MDBwY2lfd3JpdGVfdHhfZGF0YSwKIAkud3JpdGVfYmVhY29uCQk9IHJ0MjUwMHBjaV93cml0ZV9iZWFjb24sCiAJLmtpY2tfdHhfcXVldWUJCT0gcnQyNTAwcGNpX2tpY2tfdHhfcXVldWUsCiAJLmtpbGxfdHhfcXVldWUJCT0gcnQyNTAwcGNpX2tpbGxfdHhfcXVldWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmMKaW5kZXggOWFlOTZhNi4uY2RhZjkzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuYwpAQCAtMzQ1LDEyICszNDUsMjAgQEAKIAkJCQlzdHJ1Y3QgcnQyeDAwbGliX2NyeXB0byAqY3J5cHRvLAogCQkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKIHsKLQlpbnQgdGltZW91dDsKIAl1MzIgbWFzazsKIAl1MTYgcmVnOworCWVudW0gY2lwaGVyIGN1cnJfY2lwaGVyOwogCiAJaWYgKGNyeXB0by0+Y21kID09IFNFVF9LRVkpIHsKIAkJLyoKKwkJICogRGlzYWxsb3cgdG8gc2V0IFdFUCBrZXkgb3RoZXIgdGhhbiB3aXRoIGluZGV4IDAsCisJCSAqIGl0IGlzIGtub3duIHRoYXQgbm90IHdvcmsgYXQgbGVhc3Qgb24gc29tZSBoYXJkd2FyZS4KKwkJICogU1cgY3J5cHRvIHdpbGwgYmUgdXNlZCBpbiB0aGF0IGNhc2UuCisJCSAqLworCQlpZiAoa2V5LT5hbGcgPT0gQUxHX1dFUCAmJiBrZXktPmtleWlkeCAhPSAwKQorCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJCS8qCiAJCSAqIFBhaXJ3aXNlIGtleSB3aWxsIGFsd2F5cyBiZSBlbnRyeSAwLCBidXQgdGhpcwogCQkgKiBjb3VsZCBjb2xsaWRlIHdpdGggYSBzaGFyZWQga2V5IG9uIHRoZSBzYW1lCiAJCSAqIHBvc2l0aW9uLi4uCkBAIC0zNTgsNiArMzY2LDcgQEAKIAkJbWFzayA9IFRYUlhfQ1NSMF9LRVlfSUQuYml0X21hc2s7CiAKIAkJcnQyNTAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWFJYX0NTUjAsICZyZWcpOworCQljdXJyX2NpcGhlciA9IHJ0MngwMF9nZXRfZmllbGQxNihyZWcsIFRYUlhfQ1NSMF9BTEdPUklUSE0pOwogCQlyZWcgJj0gbWFzazsKIAogCQlpZiAocmVnICYmIHJlZyA9PSBtYXNrKQpAQCAtMzY2LDE5ICszNzUsMTcgQEAKIAkJcmVnID0gcnQyeDAwX2dldF9maWVsZDE2KHJlZywgVFhSWF9DU1IwX0tFWV9JRCk7CiAKIAkJa2V5LT5od19rZXlfaWR4ICs9IHJlZyA/IGZmeihyZWcpIDogMDsKLQogCQkvKgotCQkgKiBUaGUgZW5jcnlwdGlvbiBrZXkgZG9lc24ndCBmaXQgd2l0aGluIHRoZSBDU1IgY2FjaGUsCi0JCSAqIHRoaXMgbWVhbnMgd2Ugc2hvdWxkIGFsbG9jYXRlIGl0IHNlcGFyYXRlbHkgYW5kIHVzZQotCQkgKiBydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3QoKSB0byBzZW5kIHRoZSBrZXkgdG8gdGhlIGhhcmR3YXJlLgorCQkgKiBIYXJkd2FyZSByZXF1aXJlcyB0aGF0IGFsbCBrZXlzIHVzZSB0aGUgc2FtZSBjaXBoZXIKKwkJICogKGUuZy4gVEtJUC1vbmx5LCBBRVMtb25seSwgYnV0IG5vdCBUS0lQK0FFUykuCisJCSAqIElmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBrZXksIGNvbXBhcmUgdGhlIGNpcGhlciB3aXRoIHRoZQorCQkgKiBmaXJzdCBvbmUgYW5kIGZhbGwgYmFjayB0byBTVyBjcnlwdG8gaWYgbm90IHRoZSBzYW1lLgogCQkgKi8KLQkJcmVnID0gS0VZX0VOVFJZKGtleS0+aHdfa2V5X2lkeCk7Ci0JCXRpbWVvdXQgPSBSRUdJU1RFUl9USU1FT1VUMzIoc2l6ZW9mKGNyeXB0by0+a2V5KSk7Ci0JCXJ0MngwMHVzYl92ZW5kb3JfcmVxdWVzdF9sYXJnZV9idWZmKHJ0MngwMGRldiwgVVNCX01VTFRJX1dSSVRFLAotCQkJCQkJICAgIFVTQl9WRU5ET1JfUkVRVUVTVF9PVVQsIHJlZywKLQkJCQkJCSAgICBjcnlwdG8tPmtleSwKLQkJCQkJCSAgICBzaXplb2YoY3J5cHRvLT5rZXkpLAotCQkJCQkJICAgIHRpbWVvdXQpOworCQlpZiAoa2V5LT5od19rZXlfaWR4ID4gMCAmJiBjcnlwdG8tPmNpcGhlciAhPSBjdXJyX2NpcGhlcikKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCQlydDI1MDB1c2JfcmVnaXN0ZXJfbXVsdGl3cml0ZShydDJ4MDBkZXYsIEtFWV9FTlRSWShrZXktPmh3X2tleV9pZHgpLAorCQkJCQkgICAgICBjcnlwdG8tPmtleSwgc2l6ZW9mKGNyeXB0by0+a2V5KSk7CiAKIAkJLyoKIAkJICogVGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBJVi9FSVYgZ2VuZXJhdGlvbgpAQCAtODE4LDYgKzgyNSw3IEBACiAJcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX0NTUjgsIHJlZyk7CiAKIAlydDI1MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSMCwgJnJlZyk7CisJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMF9BTEdPUklUSE0sIENJUEhFUl9OT05FKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgVFhSWF9DU1IwX0lWX09GRlNFVCwgSUVFRTgwMjExX0hFQURFUik7CiAJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMF9LRVlfSUQsIDApOwogCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMCwgcmVnKTsKQEAgLTEwMDUsNyArMTAxMyw5IEBACiAJCXJ0MjUwMHVzYl90b2dnbGVfcngocnQyeDAwZGV2LCBzdGF0ZSk7CiAJCWJyZWFrOwogCWNhc2UgU1RBVEVfUkFESU9fSVJRX09OOgorCWNhc2UgU1RBVEVfUkFESU9fSVJRX09OX0lTUjoKIAljYXNlIFNUQVRFX1JBRElPX0lSUV9PRkY6CisJY2FzZSBTVEFURV9SQURJT19JUlFfT0ZGX0lTUjoKIAkJLyogTm8gc3VwcG9ydCwgYnV0IG5vIGVycm9yIGVpdGhlciAqLwogCQlicmVhazsKIAljYXNlIFNUQVRFX0RFRVBfU0xFRVA6CkBAIC0xMDM0LDcgKzEwNDQsNyBAQAogCQkJCSAgICBzdHJ1Y3QgdHhlbnRyeV9kZXNjICp0eGRlc2MpCiB7CiAJc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjID0gZ2V0X3NrYl9mcmFtZV9kZXNjKHNrYik7Ci0JX19sZTMyICp0eGQgPSAoX19sZTMyICopKHNrYi0+ZGF0YSAtIFRYRF9ERVNDX1NJWkUpOworCV9fbGUzMiAqdHhkID0gKF9fbGUzMiAqKSBza2ItPmRhdGE7CiAJdTMyIHdvcmQ7CiAKIAkvKgpAQCAtMTA4MCw2ICsxMDkwLDcgQEAKIAkvKgogCSAqIFJlZ2lzdGVyIGRlc2NyaXB0b3IgZGV0YWlscyBpbiBza2IgZnJhbWUgZGVzY3JpcHRvci4KIAkgKi8KKwlza2JkZXNjLT5mbGFncyB8PSBTS0JERVNDX0RFU0NfSU5fU0tCOwogCXNrYmRlc2MtPmRlc2MgPSB0eGQ7CiAJc2tiZGVzYy0+ZGVzY19sZW4gPSBUWERfREVTQ19TSVpFOwogfQpAQCAtMTEwOCw5ICsxMTE5LDIwIEBACiAJcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1IxOSwgcmVnKTsKIAogCS8qCi0JICogVGFrZSB0aGUgZGVzY3JpcHRvciBpbiBmcm9udCBvZiB0aGUgc2tiIGludG8gYWNjb3VudC4KKwkgKiBBZGQgc3BhY2UgZm9yIHRoZSBkZXNjcmlwdG9yIGluIGZyb250IG9mIHRoZSBza2IuCiAJICovCiAJc2tiX3B1c2goZW50cnktPnNrYiwgVFhEX0RFU0NfU0laRSk7CisJbWVtc2V0KGVudHJ5LT5za2ItPmRhdGEsIDAsIFRYRF9ERVNDX1NJWkUpOworCisJLyoKKwkgKiBXcml0ZSB0aGUgVFggZGVzY3JpcHRvciBmb3IgdGhlIGJlYWNvbi4KKwkgKi8KKwlydDI1MDB1c2Jfd3JpdGVfdHhfZGVzYyhydDJ4MDBkZXYsIGVudHJ5LT5za2IsIHR4ZGVzYyk7CisKKwkvKgorCSAqIER1bXAgYmVhY29uIHRvIHVzZXJzcGFjZSB0aHJvdWdoIGRlYnVnZnMuCisJICovCisJcnQyeDAwZGVidWdfZHVtcF9mcmFtZShydDJ4MDBkZXYsIERVTVBfRlJBTUVfQkVBQ09OLCBlbnRyeS0+c2tiKTsKIAogCS8qCiAJICogVVNCIGRldmljZXMgY2Fubm90IGJsaW5kbHkgcGFzcyB0aGUgc2tiLT5sZW4gYXMgdGhlCkBAIC0xNDYwLDEzICsxNDgyLDYgQEAKIAkJX19zZXRfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCiAJLyoKLQkgKiBDaGVjayBpZiB0aGUgQkJQIHR1bmluZyBzaG91bGQgYmUgZGlzYWJsZWQuCi0JICovCi0JcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX05JQywgJmVlcHJvbSk7Ci0JaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9OSUNfRFlOX0JCUF9UVU5FKSkKLQkJX19zZXRfYml0KENPTkZJR19ESVNBQkxFX0xJTktfVFVOSU5HLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0KLQkvKgogCSAqIFJlYWQgdGhlIFJTU0kgPC0+IGRCbSBvZmZzZXQgaW5mb3JtYXRpb24uCiAJICovCiAJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX0NBTElCUkFURV9PRkZTRVQsICZlZXByb20pOwpAQCAtMTczMiw3ICsxNzQ3LDcgQEAKIAkJX19zZXRfYml0KENPTkZJR19TVVBQT1JUX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCQlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfQ09QWV9JViwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCX0KLQlfX3NldF9iaXQoQ09ORklHX0RJU0FCTEVfTElOS19UVU5JTkcsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwlfX3NldF9iaXQoRFJJVkVSX1NVUFBPUlRfV0FUQ0hET0csICZydDJ4MDBkZXYtPmZsYWdzKTsKIAogCS8qCiAJICogU2V0IHRoZSByc3NpIG9mZnNldC4KQEAgLTE3NTIsNiArMTc2Nyw4IEBACiAJLmNvbmZpZ3VyZV9maWx0ZXIJPSBydDJ4MDBtYWNfY29uZmlndXJlX2ZpbHRlciwKIAkuc2V0X3RpbQkJPSBydDJ4MDBtYWNfc2V0X3RpbSwKIAkuc2V0X2tleQkJPSBydDJ4MDBtYWNfc2V0X2tleSwKKwkuc3dfc2Nhbl9zdGFydAkJPSBydDJ4MDBtYWNfc3dfc2Nhbl9zdGFydCwKKwkuc3dfc2Nhbl9jb21wbGV0ZQk9IHJ0MngwMG1hY19zd19zY2FuX2NvbXBsZXRlLAogCS5nZXRfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF9zdGF0cywKIAkuYnNzX2luZm9fY2hhbmdlZAk9IHJ0MngwMG1hY19ic3NfaW5mb19jaGFuZ2VkLAogCS5jb25mX3R4CQk9IHJ0MngwMG1hY19jb25mX3R4LApAQCAtMTc2Nyw4ICsxNzg0LDggQEAKIAkucmZraWxsX3BvbGwJCT0gcnQyNTAwdXNiX3Jma2lsbF9wb2xsLAogCS5saW5rX3N0YXRzCQk9IHJ0MjUwMHVzYl9saW5rX3N0YXRzLAogCS5yZXNldF90dW5lcgkJPSBydDI1MDB1c2JfcmVzZXRfdHVuZXIsCisJLndhdGNoZG9nCQk9IHJ0MngwMHVzYl93YXRjaGRvZywKIAkud3JpdGVfdHhfZGVzYwkJPSBydDI1MDB1c2Jfd3JpdGVfdHhfZGVzYywKLQkud3JpdGVfdHhfZGF0YQkJPSBydDJ4MDB1c2Jfd3JpdGVfdHhfZGF0YSwKIAkud3JpdGVfYmVhY29uCQk9IHJ0MjUwMHVzYl93cml0ZV9iZWFjb24sCiAJLmdldF90eF9kYXRhX2xlbgk9IHJ0MjUwMHVzYl9nZXRfdHhfZGF0YV9sZW4sCiAJLmtpY2tfdHhfcXVldWUJCT0gcnQyeDAwdXNiX2tpY2tfdHhfcXVldWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwLmgKaW5kZXggMmFhMDM3NS4uZWQ0ZWJjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDAuaApAQCAtNjMsNyArNjMsNiBAQAogICovCiAjZGVmaW5lIFJFVl9SVDI4NjBDCQkJMHgwMTAwCiAjZGVmaW5lIFJFVl9SVDI4NjBECQkJMHgwMTAxCi0jZGVmaW5lIFJFVl9SVDI4NzBECQkJMHgwMTAxCiAjZGVmaW5lIFJFVl9SVDI4NzJFCQkJMHgwMjAwCiAjZGVmaW5lIFJFVl9SVDMwNzBFCQkJMHgwMjAwCiAjZGVmaW5lIFJFVl9SVDMwNzBGCQkJMHgwMjAxCkBAIC03NSw3ICs3NCw3IEBACiAgKiBTaWduYWwgaW5mb3JtYXRpb24uCiAgKiBEZWZhdWx0IG9mZnNldCBpcyByZXF1aXJlZCBmb3IgUlNTSSA8LT4gZEJtIGNvbnZlcnNpb24uCiAgKi8KLSNkZWZpbmUgREVGQVVMVF9SU1NJX09GRlNFVAkJMTIwIC8qIEZJWE1FICovCisjZGVmaW5lIERFRkFVTFRfUlNTSV9PRkZTRVQJCTEyMAogCiAvKgogICogUmVnaXN0ZXIgbGF5b3V0IGluZm9ybWF0aW9uLgpAQCAtOTksNiArOTgsMjEgQEAKICAqLwogCiAvKgorICogRTJQUk9NX0NTUjogUENJIEVFUFJPTSBjb250cm9sIHJlZ2lzdGVyLgorICogUkVMT0FEOiBXcml0ZSAxIHRvIHJlbG9hZCBlZXByb20gY29udGVudC4KKyAqIFRZUEU6IDA6IDkzYzQ2LCAxOjkzYzY2LgorICogTE9BRF9TVEFUVVM6IDE6bG9hZGluZywgMDpkb25lLgorICovCisjZGVmaW5lIEUyUFJPTV9DU1IJCQkweDAwMDQKKyNkZWZpbmUgRTJQUk9NX0NTUl9EQVRBX0NMT0NLCQlGSUVMRDMyKDB4MDAwMDAwMDEpCisjZGVmaW5lIEUyUFJPTV9DU1JfQ0hJUF9TRUxFQ1QJCUZJRUxEMzIoMHgwMDAwMDAwMikKKyNkZWZpbmUgRTJQUk9NX0NTUl9EQVRBX0lOCQlGSUVMRDMyKDB4MDAwMDAwMDQpCisjZGVmaW5lIEUyUFJPTV9DU1JfREFUQV9PVVQJCUZJRUxEMzIoMHgwMDAwMDAwOCkKKyNkZWZpbmUgRTJQUk9NX0NTUl9UWVBFCQkJRklFTEQzMigweDAwMDAwMDMwKQorI2RlZmluZSBFMlBST01fQ1NSX0xPQURfU1RBVFVTCQlGSUVMRDMyKDB4MDAwMDAwNDApCisjZGVmaW5lIEUyUFJPTV9DU1JfUkVMT0FECQlGSUVMRDMyKDB4MDAwMDAwODApCisKKy8qCiAgKiBPUFRfMTQ6IFVua25vd24gcmVnaXN0ZXIgdXNlZCBieSBydDN4eHggZGV2aWNlcy4KICAqLwogI2RlZmluZSBPUFRfMTRfQ1NSCQkJMHgwMTE0CkBAIC0zMjIsNiArMzM2LDM5IEBACiAjZGVmaW5lIFJYX0RSWF9JRFgJCQkweDAyOWMKIAogLyoKKyAqIFVTQl9ETUFfQ0ZHCisgKiBSWF9CVUxLX0FHR19USU1FT1VUOiBSeCBCdWxrIEFnZ3JlZ2F0aW9uIFRpbWVPdXQgaW4gdW5pdCBvZiAzM25zLgorICogUlhfQlVMS19BR0dfTElNSVQ6IFJ4IEJ1bGsgQWdncmVnYXRpb24gTGltaXQgaW4gdW5pdCBvZiAyNTYgYnl0ZXMuCisgKiBQSFlfQ0xFQVI6IHBoeSB3YXRjaCBkb2cgZW5hYmxlLgorICogVFhfQ0xFQVI6IENsZWFyIFVTQiBETUEgVFggcGF0aC4KKyAqIFRYT1BfSEFMVDogSGFsdCBUWE9QIGNvdW50IGRvd24gd2hlbiBUWCBidWZmZXIgaXMgZnVsbC4KKyAqIFJYX0JVTEtfQUdHX0VOOiBFbmFibGUgUnggQnVsayBBZ2dyZWdhdGlvbi4KKyAqIFJYX0JVTEtfRU46IEVuYWJsZSBVU0IgRE1BIFJ4LgorICogVFhfQlVMS19FTjogRW5hYmxlIFVTQiBETUEgVHguCisgKiBFUF9PVVRfVkFMSUQ6IE9VVCBlbmRwb2ludCBkYXRhIHZhbGlkLgorICogUlhfQlVTWTogVVNCIERNQSBSWCBGU00gYnVzeS4KKyAqIFRYX0JVU1k6IFVTQiBETUEgVFggRlNNIGJ1c3kuCisgKi8KKyNkZWZpbmUgVVNCX0RNQV9DRkcJCQkweDAyYTAKKyNkZWZpbmUgVVNCX0RNQV9DRkdfUlhfQlVMS19BR0dfVElNRU9VVAlGSUVMRDMyKDB4MDAwMDAwZmYpCisjZGVmaW5lIFVTQl9ETUFfQ0ZHX1JYX0JVTEtfQUdHX0xJTUlUCUZJRUxEMzIoMHgwMDAwZmYwMCkKKyNkZWZpbmUgVVNCX0RNQV9DRkdfUEhZX0NMRUFSCQlGSUVMRDMyKDB4MDAwMTAwMDApCisjZGVmaW5lIFVTQl9ETUFfQ0ZHX1RYX0NMRUFSCQlGSUVMRDMyKDB4MDAwODAwMDApCisjZGVmaW5lIFVTQl9ETUFfQ0ZHX1RYT1BfSEFMVAkJRklFTEQzMigweDAwMTAwMDAwKQorI2RlZmluZSBVU0JfRE1BX0NGR19SWF9CVUxLX0FHR19FTglGSUVMRDMyKDB4MDAyMDAwMDApCisjZGVmaW5lIFVTQl9ETUFfQ0ZHX1JYX0JVTEtfRU4JCUZJRUxEMzIoMHgwMDQwMDAwMCkKKyNkZWZpbmUgVVNCX0RNQV9DRkdfVFhfQlVMS19FTgkJRklFTEQzMigweDAwODAwMDAwKQorI2RlZmluZSBVU0JfRE1BX0NGR19FUF9PVVRfVkFMSUQJRklFTEQzMigweDNmMDAwMDAwKQorI2RlZmluZSBVU0JfRE1BX0NGR19SWF9CVVNZCQlGSUVMRDMyKDB4NDAwMDAwMDApCisjZGVmaW5lIFVTQl9ETUFfQ0ZHX1RYX0JVU1kJCUZJRUxEMzIoMHg4MDAwMDAwMCkKKworLyoKKyAqIFVTX0NZQ19DTlQKKyAqLworI2RlZmluZSBVU19DWUNfQ05UCQkJMHgwMmE0CisjZGVmaW5lIFVTX0NZQ19DTlRfQ0xPQ0tfQ1lDTEUJCUZJRUxEMzIoMHgwMDAwMDBmZikKKworLyoKICAqIFBCRl9TWVNfQ1RSTAogICogSE9TVF9SQU1fV1JJVEU6IGVuYWJsZSBIb3N0IHByb2dyYW0gcmFtIHdyaXRlIHNlbGVjdGlvbgogICovCkBAIC02NzIsMTQgKzcxOSwyMCBAQAogI2RlZmluZSBUQlRUX1RJTUVSCQkJMHgxMTI0CiAKIC8qCi0gKiBJTlRfVElNRVJfQ0ZHOgorICogSU5UX1RJTUVSX0NGRzogdGltZXIgY29uZmlndXJhdGlvbgorICogUFJFX1RCVFRfVElNRVI6IGxlYWR0aW1lIHRvIHRidHQgZm9yIHByZXRidHQgaW50ZXJydXB0IGluIHVuaXRzIG9mIDEvMTYgVFUKKyAqIEdQX1RJTUVSOiBwZXJpb2Qgb2YgZ2VuZXJhbCBwdXJwb3NlIHRpbWVyIGluIHVuaXRzIG9mIDEvMTYgVFUKICAqLwogI2RlZmluZSBJTlRfVElNRVJfQ0ZHCQkJMHgxMTI4CisjZGVmaW5lIElOVF9USU1FUl9DRkdfUFJFX1RCVFRfVElNRVIJRklFTEQzMigweDAwMDBmZmZmKQorI2RlZmluZSBJTlRfVElNRVJfQ0ZHX0dQX1RJTUVSCQlGSUVMRDMyKDB4ZmZmZjAwMDApCiAKIC8qCiAgKiBJTlRfVElNRVJfRU46IEdQLXRpbWVyIGFuZCBwcmUtdGJ0dCBJbnQgZW5hYmxlCiAgKi8KICNkZWZpbmUgSU5UX1RJTUVSX0VOCQkJMHgxMTJjCisjZGVmaW5lIElOVF9USU1FUl9FTl9QUkVfVEJUVF9USU1FUglGSUVMRDMyKDB4MDAwMDAwMDEpCisjZGVmaW5lIElOVF9USU1FUl9FTl9HUF9USU1FUgkJRklFTEQzMigweDAwMDAwMDAyKQogCiAvKgogICogQ0hfSURMRV9TVEE6IGNoYW5uZWwgaWRsZSB0aW1lCkBAIC03NTYsNiArODA5LDE4IEBACiAjZGVmaW5lIEVEQ0FfVElEX0FDX01BUAkJCTB4MTMxMAogCiAvKgorICogVFhfUFdSX0NGRzoKKyAqLworI2RlZmluZSBUWF9QV1JfQ0ZHX1JBVEUwCQlGSUVMRDMyKDB4MDAwMDAwMGYpCisjZGVmaW5lIFRYX1BXUl9DRkdfUkFURTEJCUZJRUxEMzIoMHgwMDAwMDBmMCkKKyNkZWZpbmUgVFhfUFdSX0NGR19SQVRFMgkJRklFTEQzMigweDAwMDAwZjAwKQorI2RlZmluZSBUWF9QV1JfQ0ZHX1JBVEUzCQlGSUVMRDMyKDB4MDAwMGYwMDApCisjZGVmaW5lIFRYX1BXUl9DRkdfUkFURTQJCUZJRUxEMzIoMHgwMDBmMDAwMCkKKyNkZWZpbmUgVFhfUFdSX0NGR19SQVRFNQkJRklFTEQzMigweDAwZjAwMDAwKQorI2RlZmluZSBUWF9QV1JfQ0ZHX1JBVEU2CQlGSUVMRDMyKDB4MGYwMDAwMDApCisjZGVmaW5lIFRYX1BXUl9DRkdfUkFURTcJCUZJRUxEMzIoMHhmMDAwMDAwMCkKKworLyoKICAqIFRYX1BXUl9DRkdfMDoKICAqLwogI2RlZmluZSBUWF9QV1JfQ0ZHXzAJCQkweDEzMTQKQEAgLTEzNzAsMTcgKzE0MzUsMTcgQEAKIHN0cnVjdCBtYWNfd2NpZF9lbnRyeSB7CiAJdTggbWFjWzZdOwogCXU4IHJlc2VydmVkWzJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaHdfa2V5X2VudHJ5IHsKIAl1OCBrZXlbMTZdOwogCXU4IHR4X21pY1s4XTsKIAl1OCByeF9taWNbOF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBtYWNfaXZlaXZfZW50cnkgewogCXU4IGl2WzhdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKgogICogTUFDX1dDSURfQVRUUklCVVRFOgpAQCAtMTM4OSw2ICsxNDU0LDEwIEBACiAjZGVmaW5lIE1BQ19XQ0lEX0FUVFJJQlVURV9DSVBIRVIJRklFTEQzMigweDAwMDAwMDBlKQogI2RlZmluZSBNQUNfV0NJRF9BVFRSSUJVVEVfQlNTX0lEWAlGSUVMRDMyKDB4MDAwMDAwNzApCiAjZGVmaW5lIE1BQ19XQ0lEX0FUVFJJQlVURV9SWF9XSVVERglGSUVMRDMyKDB4MDAwMDAzODApCisjZGVmaW5lIE1BQ19XQ0lEX0FUVFJJQlVURV9DSVBIRVJfRVhUCUZJRUxEMzIoMHgwMDAwMDQwMCkKKyNkZWZpbmUgTUFDX1dDSURfQVRUUklCVVRFX0JTU19JRFhfRVhUCUZJRUxEMzIoMHgwMDAwMDgwMCkKKyNkZWZpbmUgTUFDX1dDSURfQVRUUklCVVRFX1dBUElfTUNCQwlGSUVMRDMyKDB4MDAwMDgwMDApCisjZGVmaW5lIE1BQ19XQ0lEX0FUVFJJQlVURV9XQVBJX0tFWV9JRFgJRklFTEQzMigweGZmMDAwMDAwKQogCiAvKgogICogU0hBUkVEX0tFWV9NT0RFOgpAQCAtMTUxMCw3ICsxNTc5LDkgQEAKICAqLwogCiAvKgotICogQkJQIDE6IFRYIEFudGVubmEKKyAqIEJCUCAxOiBUWCBBbnRlbm5hICYgUG93ZXIKKyAqIFBPV0VSOiAwIC0gbm9ybWFsLCAxIC0gZHJvcCB0eCBwb3dlciBieSA2ZEJtLCAyIC0gZHJvcCB0eCBwb3dlciBieSAxMmRCbSwKKyAqCTMgLSBpbmNyZWFzZSB0eCBwb3dlciBieSA2ZEJtCiAgKi8KICNkZWZpbmUgQkJQMV9UWF9QT1dFUgkJCUZJRUxEOCgweDA3KQogI2RlZmluZSBCQlAxX1RYX0FOVEVOTkEJCQlGSUVMRDgoMHgxOCkKQEAgLTE4MDAsOSArMTg3MSwxNSBAQAogI2RlZmluZSBFRVBST01fVFhQT1dFUl9BXzIJCUZJRUxEMTYoMHhmZjAwKQogCiAvKgotICogRUVQUk9NIFRYcG93ZXIgYnlyYXRlOiAyME1IWiBwb3dlcgorICogRUVQUk9NIFRYUE9XRVIgYnkgcmF0ZTogdHggcG93ZXIgcGVyIHR4IHJhdGUgZm9yIEhUMjAgbW9kZQogICovCiAjZGVmaW5lIEVFUFJPTV9UWFBPV0VSX0JZUkFURQkJMHgwMDZmCisjZGVmaW5lIEVFUFJPTV9UWFBPV0VSX0JZUkFURV9TSVpFCTkKKworI2RlZmluZSBFRVBST01fVFhQT1dFUl9CWVJBVEVfUkFURTAJRklFTEQxNigweDAwMGYpCisjZGVmaW5lIEVFUFJPTV9UWFBPV0VSX0JZUkFURV9SQVRFMQlGSUVMRDE2KDB4MDBmMCkKKyNkZWZpbmUgRUVQUk9NX1RYUE9XRVJfQllSQVRFX1JBVEUyCUZJRUxEMTYoMHgwZjAwKQorI2RlZmluZSBFRVBST01fVFhQT1dFUl9CWVJBVEVfUkFURTMJRklFTEQxNigweGYwMDApCiAKIC8qCiAgKiBFRVBST00gQkJQLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMGxpYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMGxpYi5jCmluZGV4IGRiNDI1MGQuLmI2NmUwZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBsaWIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmMKQEAgLTEsOSArMSw5IEBACiAvKgorCUNvcHlyaWdodCAoQykgMjAxMCBJdm8gdmFuIERvb3JuIDxJdkRvb3JuQGdtYWlsLmNvbT4KIAlDb3B5cmlnaHQgKEMpIDIwMDkgQmFydGxvbWllaiBab2xuaWVya2lld2ljeiA8YnpvbG5pZXJAZ21haWwuY29tPgogCUNvcHlyaWdodCAoQykgMjAwOSBHZXJ0amFuIHZhbiBXaW5nZXJkZSA8Z3dpbmdlcmRlQGdtYWlsLmNvbT4KIAogCUJhc2VkIG9uIHRoZSBvcmlnaW5hbCBydDI4MDBwY2kuYyBhbmQgcnQyODAwdXNiLmMuCi0JICBDb3B5cmlnaHQgKEMpIDIwMDkgSXZvIHZhbiBEb29ybiA8SXZEb29ybkBnbWFpbC5jb20+CiAJICBDb3B5cmlnaHQgKEMpIDIwMDkgQWxiYW4gQnJvd2FleXMgPHByYWhhbEB5YWhvby5jb20+CiAJICBDb3B5cmlnaHQgKEMpIDIwMDkgRmVsaXggRmlldGthdSA8bmJkQG9wZW53cnQub3JnPgogCSAgQ29weXJpZ2h0IChDKSAyMDA5IEx1aXMgQ29ycmVpYSA8bHVpcy5mLmNvcnJlaWFAZ21haWwuY29tPgpAQCAtMzMsMjEgKzMzLDE0IEBACiAJQWJzdHJhY3Q6IHJ0MjgwMCBnZW5lcmljIGRldmljZSByb3V0aW5lcy4KICAqLwogCisjaW5jbHVkZSA8bGludXgvY3JjLWNjaXR0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSAicnQyeDAwLmgiCi0jaWYgZGVmaW5lZChDT05GSUdfUlQyWDAwX0xJQl9VU0IpIHx8IGRlZmluZWQoQ09ORklHX1JUMlgwMF9MSUJfVVNCX01PRFVMRSkKLSNpbmNsdWRlICJydDJ4MDB1c2IuaCIKLSNlbmRpZgogI2luY2x1ZGUgInJ0MjgwMGxpYi5oIgogI2luY2x1ZGUgInJ0MjgwMC5oIgotI2luY2x1ZGUgInJ0MjgwMHVzYi5oIgotCi1NT0RVTEVfQVVUSE9SKCJCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oInJ0MjgwMCBsaWJyYXJ5Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIC8qCiAgKiBSZWdpc3RlciBhY2Nlc3MuCkBAIC0xMDcsOCArMTAwLDcgQEAKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJCUF9DU1JfQ0ZHX1JFR05VTSwgd29yZCk7CiAJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQlBfQ1NSX0NGR19CVVNZLCAxKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJCUF9DU1JfQ0ZHX1JFQURfQ09OVFJPTCwgMCk7Ci0JCWlmIChydDJ4MDBfaXNfcGNpKHJ0MngwMGRldikgfHwgcnQyeDAwX2lzX3NvYyhydDJ4MDBkZXYpKQotCQkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJCUF9DU1JfQ0ZHX0JCUF9SV19NT0RFLCAxKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJCUF9DU1JfQ0ZHX0JCUF9SV19NT0RFLCAxKTsKIAogCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGVfbG9jayhydDJ4MDBkZXYsIEJCUF9DU1JfQ0ZHLCByZWcpOwogCX0KQEAgLTEzNiw4ICsxMjgsNyBAQAogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkJQX0NTUl9DRkdfUkVHTlVNLCB3b3JkKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJCUF9DU1JfQ0ZHX0JVU1ksIDEpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkJQX0NTUl9DRkdfUkVBRF9DT05UUk9MLCAxKTsKLQkJaWYgKHJ0MngwMF9pc19wY2kocnQyeDAwZGV2KSB8fCBydDJ4MDBfaXNfc29jKHJ0MngwMGRldikpCi0JCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkJQX0NTUl9DRkdfQkJQX1JXX01PREUsIDEpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkJQX0NTUl9DRkdfQkJQX1JXX01PREUsIDEpOwogCiAJCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZV9sb2NrKHJ0MngwMGRldiwgQkJQX0NTUl9DRkcsIHJlZyk7CiAKQEAgLTI4Miw5ICsyNzMsMTYyIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDI4MDBfd2FpdF93cGRtYV9yZWFkeSk7CiAKLXZvaWQgcnQyODAwX3dyaXRlX3R4d2koc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjKQorc3RhdGljIGJvb2wgcnQyODAwX2NoZWNrX2Zpcm13YXJlX2NyYyhjb25zdCB1OCAqZGF0YSwgY29uc3Qgc2l6ZV90IGxlbikKIHsKLQlfX2xlMzIgKnR4d2kgPSAoX19sZTMyICopKHNrYi0+ZGF0YSAtIFRYV0lfREVTQ19TSVpFKTsKKwl1MTYgZndfY3JjOworCXUxNiBjcmM7CisKKwkvKgorCSAqIFRoZSBsYXN0IDIgYnl0ZXMgaW4gdGhlIGZpcm13YXJlIGFycmF5IGFyZSB0aGUgY3JjIGNoZWNrc3VtIGl0c2VsZiwKKwkgKiB0aGlzIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIG5ldmVyIHBhc3MgdGhvc2UgMiBieXRlcyB0byB0aGUgY3JjCisJICogYWxnb3JpdGhtLgorCSAqLworCWZ3X2NyYyA9IChkYXRhW2xlbiAtIDJdIDw8IDggfCBkYXRhW2xlbiAtIDFdKTsKKworCS8qCisJICogVXNlIHRoZSBjcmMgY2NpdHQgYWxnb3JpdGhtLgorCSAqIFRoaXMgd2lsbCByZXR1cm4gdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGxlZ2FjeSBkcml2ZXIgd2hpY2gKKwkgKiB1c2VkIGJpdCBvcmRlcmluZyByZXZlcnNpb24gb24gdGhlIGJvdGggdGhlIGZpcm13YXJlIGJ5dGVzCisJICogYmVmb3JlIGlucHV0IGlucHV0IGFzIHdlbGwgYXMgb24gdGhlIGZpbmFsIG91dHB1dC4KKwkgKiBPYnZpb3VzbHkgdXNpbmcgY3JjIGNjaXR0IGRpcmVjdGx5IGlzIG11Y2ggbW9yZSBlZmZpY2llbnQuCisJICovCisJY3JjID0gY3JjX2NjaXR0KH4wLCBkYXRhLCBsZW4gLSAyKTsKKworCS8qCisJICogVGhlcmUgaXMgYSBzbWFsbCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGNyYy1pdHUtdCArIGJpdHJldiBhbmQKKwkgKiB0aGUgY3JjLWNjaXR0IGNyYyBjYWxjdWxhdGlvbi4gSW4gdGhlIGxhdHRlciBtZXRob2QgdGhlIDIgYnl0ZXMKKwkgKiB3aWxsIGJlIHN3YXBwZWQsIHVzZSBzd2FiMTYgdG8gY29udmVydCB0aGUgY3JjIHRvIHRoZSBjb3JyZWN0CisJICogdmFsdWUuCisJICovCisJY3JjID0gc3dhYjE2KGNyYyk7CisKKwlyZXR1cm4gZndfY3JjID09IGNyYzsKK30KKworaW50IHJ0MjgwMF9jaGVja19maXJtd2FyZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICBjb25zdCB1OCAqZGF0YSwgY29uc3Qgc2l6ZV90IGxlbikKK3sKKwlzaXplX3Qgb2Zmc2V0ID0gMDsKKwlzaXplX3QgZndfbGVuOworCWJvb2wgbXVsdGlwbGU7CisKKwkvKgorCSAqIFBDSShlKSAmIFNPQyBkZXZpY2VzIHJlcXVpcmUgZmlybXdhcmUgd2l0aCBhIGxlbmd0aAorCSAqIG9mIDhrYi4gVVNCIGRldmljZXMgcmVxdWlyZSBmaXJtd2FyZSBmaWxlcyB3aXRoIGEgbGVuZ3RoCisJICogb2YgNGtiLiBDZXJ0YWluIFVTQiBjaGlwc2V0cyBob3dldmVyIHJlcXVpcmUgZGlmZmVyZW50IGZpcm13YXJlLAorCSAqIHdoaWNoIFJhbGluayBvbmx5IHByb3ZpZGVzIGF0dGFjaGVkIHRvIHRoZSBvcmlnaW5hbCBmaXJtd2FyZQorCSAqIGZpbGUuIFRodXMgZm9yIFVTQiBkZXZpY2VzLCBmaXJtd2FyZSBmaWxlcyBoYXZlIGEgbGVuZ3RoCisJICogd2hpY2ggaXMgYSBtdWx0aXBsZSBvZiA0a2IuCisJICovCisJaWYgKHJ0MngwMF9pc191c2IocnQyeDAwZGV2KSkgeworCQlmd19sZW4gPSA0MDk2OworCQltdWx0aXBsZSA9IHRydWU7CisJfSBlbHNlIHsKKwkJZndfbGVuID0gODE5MjsKKwkJbXVsdGlwbGUgPSB0cnVlOworCX0KKworCS8qCisJICogVmFsaWRhdGUgdGhlIGZpcm13YXJlIGxlbmd0aAorCSAqLworCWlmIChsZW4gIT0gZndfbGVuICYmICghbXVsdGlwbGUgfHwgKGxlbiAlIGZ3X2xlbikgIT0gMCkpCisJCXJldHVybiBGV19CQURfTEVOR1RIOworCisJLyoKKwkgKiBDaGVjayBpZiB0aGUgY2hpcHNldCByZXF1aXJlcyBvbmUgb2YgdGhlIHVwcGVyIHBhcnRzCisJICogb2YgdGhlIGZpcm13YXJlLgorCSAqLworCWlmIChydDJ4MDBfaXNfdXNiKHJ0MngwMGRldikgJiYKKwkgICAgIXJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMjg2MCkgJiYKKwkgICAgIXJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMjg3MikgJiYKKwkgICAgIXJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMzA3MCkgJiYKKwkgICAgKChsZW4gLyBmd19sZW4pID09IDEpKQorCQlyZXR1cm4gRldfQkFEX1ZFUlNJT047CisKKwkvKgorCSAqIDhrYiBmaXJtd2FyZSBmaWxlcyBtdXN0IGJlIGNoZWNrZWQgYXMgaWYgaXQgd2VyZQorCSAqIDIgc2VwYXJhdGUgZmlybXdhcmUgZmlsZXMuCisJICovCisJd2hpbGUgKG9mZnNldCA8IGxlbikgeworCQlpZiAoIXJ0MjgwMF9jaGVja19maXJtd2FyZV9jcmMoZGF0YSArIG9mZnNldCwgZndfbGVuKSkKKwkJCXJldHVybiBGV19CQURfQ1JDOworCisJCW9mZnNldCArPSBmd19sZW47CisJfQorCisJcmV0dXJuIEZXX09LOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnQyODAwX2NoZWNrX2Zpcm13YXJlKTsKKworaW50IHJ0MjgwMF9sb2FkX2Zpcm13YXJlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pCit7CisJdW5zaWduZWQgaW50IGk7CisJdTMyIHJlZzsKKworCS8qCisJICogV2FpdCBmb3Igc3RhYmxlIGhhcmR3YXJlLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBSRUdJU1RFUl9CVVNZX0NPVU5UOyBpKyspIHsKKwkJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfQ1NSMCwgJnJlZyk7CisJCWlmIChyZWcgJiYgcmVnICE9IH4wKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxKTsKKwl9CisKKwlpZiAoaSA9PSBSRUdJU1RFUl9CVVNZX0NPVU5UKSB7CisJCUVSUk9SKHJ0MngwMGRldiwgIlVuc3RhYmxlIGhhcmR3YXJlLlxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKHJ0MngwMF9pc19wY2kocnQyeDAwZGV2KSkKKwkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUFdSX1BJTl9DRkcsIDB4MDAwMDAwMDIpOworCisJLyoKKwkgKiBEaXNhYmxlIERNQSwgd2lsbCBiZSByZWVuYWJsZWQgbGF0ZXIgd2hlbiBlbmFibGluZworCSAqIHRoZSByYWRpby4KKwkgKi8KKwlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFdQRE1BX0dMT19DRkcsICZyZWcpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBXUERNQV9HTE9fQ0ZHX0VOQUJMRV9UWF9ETUEsIDApOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBXUERNQV9HTE9fQ0ZHX1RYX0RNQV9CVVNZLCAwKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgV1BETUFfR0xPX0NGR19FTkFCTEVfUlhfRE1BLCAwKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgV1BETUFfR0xPX0NGR19SWF9ETUFfQlVTWSwgMCk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFdQRE1BX0dMT19DRkdfVFhfV1JJVEVCQUNLX0RPTkUsIDEpOworCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFdQRE1BX0dMT19DRkcsIHJlZyk7CisKKwkvKgorCSAqIFdyaXRlIGZpcm13YXJlIHRvIHRoZSBkZXZpY2UuCisJICovCisJcnQyODAwX2Rydl93cml0ZV9maXJtd2FyZShydDJ4MDBkZXYsIGRhdGEsIGxlbik7CisKKwkvKgorCSAqIFdhaXQgZm9yIGRldmljZSB0byBzdGFiaWxpemUuCisJICovCisJZm9yIChpID0gMDsgaSA8IFJFR0lTVEVSX0JVU1lfQ09VTlQ7IGkrKykgeworCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFBCRl9TWVNfQ1RSTCwgJnJlZyk7CisJCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBQQkZfU1lTX0NUUkxfUkVBRFkpKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxKTsKKwl9CisKKwlpZiAoaSA9PSBSRUdJU1RFUl9CVVNZX0NPVU5UKSB7CisJCUVSUk9SKHJ0MngwMGRldiwgIlBCRiBzeXN0ZW0gcmVnaXN0ZXIgbm90IHJlYWR5LlxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJLyoKKwkgKiBJbml0aWFsaXplIGZpcm13YXJlLgorCSAqLworCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEgyTV9CQlBfQUdFTlQsIDApOworCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEgyTV9NQUlMQk9YX0NTUiwgMCk7CisJbXNsZWVwKDEpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydDI4MDBfbG9hZF9maXJtd2FyZSk7CisKK3ZvaWQgcnQyODAwX3dyaXRlX3R4d2koX19sZTMyICp0eHdpLCBzdHJ1Y3QgdHhlbnRyeV9kZXNjICp0eGRlc2MpCit7CiAJdTMyIHdvcmQ7CiAKIAkvKgpAQCAtMzM2LDkgKzQ4MCw1MyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyODAwX3dyaXRlX3R4d2kpOwogCi12b2lkIHJ0MjgwMF9wcm9jZXNzX3J4d2koc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJ4ZG9uZV9lbnRyeV9kZXNjICpyeGRlc2MpCitzdGF0aWMgaW50IHJ0MjgwMF9hZ2NfdG9fcnNzaShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBpbnQgcnh3aV93MikKIHsKLQlfX2xlMzIgKnJ4d2kgPSAoX19sZTMyICopIHNrYi0+ZGF0YTsKKwlpbnQgcnNzaTAgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIocnh3aV93MiwgUlhXSV9XMl9SU1NJMCk7CisJaW50IHJzc2kxID0gcnQyeDAwX2dldF9maWVsZDMyKHJ4d2lfdzIsIFJYV0lfVzJfUlNTSTEpOworCWludCByc3NpMiA9IHJ0MngwMF9nZXRfZmllbGQzMihyeHdpX3cyLCBSWFdJX1cyX1JTU0kyKTsKKwl1MTYgZWVwcm9tOworCXU4IG9mZnNldDA7CisJdTggb2Zmc2V0MTsKKwl1OCBvZmZzZXQyOworCisJaWYgKHJ0MngwMGRldi0+cnhfc3RhdHVzLmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fUlNTSV9CRywgJmVlcHJvbSk7CisJCW9mZnNldDAgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fUlNTSV9CR19PRkZTRVQwKTsKKwkJb2Zmc2V0MSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9SU1NJX0JHX09GRlNFVDEpOworCQlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fUlNTSV9CRzIsICZlZXByb20pOworCQlvZmZzZXQyID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX1JTU0lfQkcyX09GRlNFVDIpOworCX0gZWxzZSB7CisJCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9SU1NJX0EsICZlZXByb20pOworCQlvZmZzZXQwID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX1JTU0lfQV9PRkZTRVQwKTsKKwkJb2Zmc2V0MSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9SU1NJX0FfT0ZGU0VUMSk7CisJCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9SU1NJX0EyLCAmZWVwcm9tKTsKKwkJb2Zmc2V0MiA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9SU1NJX0EyX09GRlNFVDIpOworCX0KKworCS8qCisJICogQ29udmVydCB0aGUgdmFsdWUgZnJvbSB0aGUgZGVzY3JpcHRvciBpbnRvIHRoZSBSU1NJIHZhbHVlCisJICogSWYgdGhlIHZhbHVlIGluIHRoZSBkZXNjcmlwdG9yIGlzIDAsIGl0IGlzIGNvbnNpZGVyZWQgaW52YWxpZAorCSAqIGFuZCB0aGUgZGVmYXVsdCAoZXh0cmVtZWx5IGxvdykgcnNzaSB2YWx1ZSBpcyBhc3N1bWVkCisJICovCisJcnNzaTAgPSAocnNzaTApID8gKC0xMiAtIG9mZnNldDAgLSBydDJ4MDBkZXYtPmxuYV9nYWluIC0gcnNzaTApIDogLTEyODsKKwlyc3NpMSA9IChyc3NpMSkgPyAoLTEyIC0gb2Zmc2V0MSAtIHJ0MngwMGRldi0+bG5hX2dhaW4gLSByc3NpMSkgOiAtMTI4OworCXJzc2kyID0gKHJzc2kyKSA/ICgtMTIgLSBvZmZzZXQyIC0gcnQyeDAwZGV2LT5sbmFfZ2FpbiAtIHJzc2kyKSA6IC0xMjg7CisKKwkvKgorCSAqIG1hYzgwMjExIG9ubHkgYWNjZXB0cyBhIHNpbmdsZSBSU1NJIHZhbHVlLiBDYWxjdWxhdGluZyB0aGUKKwkgKiBhdmVyYWdlIGRvZXNuJ3QgZGVsaXZlciBhIGZhaXIgYW5zd2VyIGVpdGhlciBzaW5jZSAtNjA6LTYwIHdvdWxkCisJICogYmUgY29uc2lkZXJlZCBlcXVhbGx5IGdvb2QgYXMgLTUwOi03MCB3aGlsZSB0aGUgc2Vjb25kIGlzIHRoZSBvbmUKKwkgKiB3aGljaCBnaXZlcyBsZXNzIGVuZXJneS4uLgorCSAqLworCXJzc2kwID0gbWF4KHJzc2kwLCByc3NpMSk7CisJcmV0dXJuIG1heChyc3NpMCwgcnNzaTIpOworfQorCit2b2lkIHJ0MjgwMF9wcm9jZXNzX3J4d2koc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwKKwkJCSBzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2MgKnJ4ZGVzYykKK3sKKwlfX2xlMzIgKnJ4d2kgPSAoX19sZTMyICopIGVudHJ5LT5za2ItPmRhdGE7CiAJdTMyIHdvcmQ7CiAKIAlydDJ4MDBfZGVzY19yZWFkKHJ4d2ksIDAsICZ3b3JkKTsKQEAgLTM2OSwxNyArNTU3LDkzIEBACiAKIAlydDJ4MDBfZGVzY19yZWFkKHJ4d2ksIDIsICZ3b3JkKTsKIAotCXJ4ZGVzYy0+cnNzaSA9Ci0JICAgIChydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZCwgUlhXSV9XMl9SU1NJMCkgKwotCSAgICAgcnQyeDAwX2dldF9maWVsZDMyKHdvcmQsIFJYV0lfVzJfUlNTSTEpKSAvIDI7CisJLyoKKwkgKiBDb252ZXJ0IGRlc2NyaXB0b3IgQUdDIHZhbHVlIHRvIFJTU0kgdmFsdWUuCisJICovCisJcnhkZXNjLT5yc3NpID0gcnQyODAwX2FnY190b19yc3NpKGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2LCB3b3JkKTsKIAogCS8qCiAJICogUmVtb3ZlIFJYV0kgZGVzY3JpcHRvciBmcm9tIHN0YXJ0IG9mIGJ1ZmZlci4KIAkgKi8KLQlza2JfcHVsbChza2IsIFJYV0lfREVTQ19TSVpFKTsKKwlza2JfcHVsbChlbnRyeS0+c2tiLCBSWFdJX0RFU0NfU0laRSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDI4MDBfcHJvY2Vzc19yeHdpKTsKIAordm9pZCBydDI4MDBfd3JpdGVfYmVhY29uKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYykKK3sKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZW50cnktPnF1ZXVlLT5ydDJ4MDBkZXY7CisJc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjID0gZ2V0X3NrYl9mcmFtZV9kZXNjKGVudHJ5LT5za2IpOworCXVuc2lnbmVkIGludCBiZWFjb25fYmFzZTsKKwl1MzIgcmVnOworCisJLyoKKwkgKiBEaXNhYmxlIGJlYWNvbmluZyB3aGlsZSB3ZSBhcmUgcmVsb2FkaW5nIHRoZSBiZWFjb24gZGF0YSwKKwkgKiBvdGhlcndpc2Ugd2UgbWlnaHQgYmUgc2VuZGluZyBvdXQgaW52YWxpZCBkYXRhLgorCSAqLworCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQkNOX1RJTUVfQ0ZHLCAmcmVnKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkNOX1RJTUVfQ0ZHX0JFQUNPTl9HRU4sIDApOworCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEJDTl9USU1FX0NGRywgcmVnKTsKKworCS8qCisJICogQWRkIHNwYWNlIGZvciB0aGUgVFhXSSBpbiBmcm9udCBvZiB0aGUgc2tiLgorCSAqLworCXNrYl9wdXNoKGVudHJ5LT5za2IsIFRYV0lfREVTQ19TSVpFKTsKKwltZW1zZXQoZW50cnktPnNrYiwgMCwgVFhXSV9ERVNDX1NJWkUpOworCisJLyoKKwkgKiBSZWdpc3RlciBkZXNjcmlwdG9yIGRldGFpbHMgaW4gc2tiIGZyYW1lIGRlc2NyaXB0b3IuCisJICovCisJc2tiZGVzYy0+ZmxhZ3MgfD0gU0tCREVTQ19ERVNDX0lOX1NLQjsKKwlza2JkZXNjLT5kZXNjID0gZW50cnktPnNrYi0+ZGF0YTsKKwlza2JkZXNjLT5kZXNjX2xlbiA9IFRYV0lfREVTQ19TSVpFOworCisJLyoKKwkgKiBBZGQgdGhlIFRYV0kgZm9yIHRoZSBiZWFjb24gdG8gdGhlIHNrYi4KKwkgKi8KKwlydDI4MDBfd3JpdGVfdHh3aSgoX19sZTMyICopZW50cnktPnNrYi0+ZGF0YSwgdHhkZXNjKTsKKworCS8qCisJICogRHVtcCBiZWFjb24gdG8gdXNlcnNwYWNlIHRocm91Z2ggZGVidWdmcy4KKwkgKi8KKwlydDJ4MDBkZWJ1Z19kdW1wX2ZyYW1lKHJ0MngwMGRldiwgRFVNUF9GUkFNRV9CRUFDT04sIGVudHJ5LT5za2IpOworCisJLyoKKwkgKiBXcml0ZSBlbnRpcmUgYmVhY29uIHdpdGggVFhXSSB0byByZWdpc3Rlci4KKwkgKi8KKwliZWFjb25fYmFzZSA9IEhXX0JFQUNPTl9PRkZTRVQoZW50cnktPmVudHJ5X2lkeCk7CisJcnQyODAwX3JlZ2lzdGVyX211bHRpd3JpdGUocnQyeDAwZGV2LCBiZWFjb25fYmFzZSwKKwkJCQkgICBlbnRyeS0+c2tiLT5kYXRhLCBlbnRyeS0+c2tiLT5sZW4pOworCisJLyoKKwkgKiBFbmFibGUgYmVhY29uaW5nIGFnYWluLgorCSAqLworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05fVElNRV9DRkdfVFNGX1RJQ0tJTkcsIDEpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05fVElNRV9DRkdfVEJUVF9FTkFCTEUsIDEpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05fVElNRV9DRkdfQkVBQ09OX0dFTiwgMSk7CisJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQkNOX1RJTUVfQ0ZHLCByZWcpOworCisJLyoKKwkgKiBDbGVhbiB1cCBiZWFjb24gc2tiLgorCSAqLworCWRldl9rZnJlZV9za2JfYW55KGVudHJ5LT5za2IpOworCWVudHJ5LT5za2IgPSBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnQyODAwX3dyaXRlX2JlYWNvbik7CisKK3N0YXRpYyB2b2lkIGlubGluZSBydDI4MDBfY2xlYXJfYmVhY29uKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBiZWFjb25fYmFzZSkKK3sKKwlpbnQgaTsKKworCS8qCisJICogRm9yIHRoZSBCZWFjb24gYmFzZSByZWdpc3RlcnMgd2Ugb25seSBuZWVkIHRvIGNsZWFyCisJICogdGhlIHdob2xlIFRYV0kgd2hpY2ggKHdoZW4gc2V0IHRvIDApIHdpbGwgaW52YWxpZGF0ZQorCSAqIHRoZSBlbnRpcmUgYmVhY29uLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBUWFdJX0RFU0NfU0laRTsgaSArPSBzaXplb2YoX19sZTMyKSkKKwkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgYmVhY29uX2Jhc2UgKyBpLCAwKTsKK30KKwogI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX0RFQlVHRlMKIGNvbnN0IHN0cnVjdCBydDJ4MDBkZWJ1ZyBydDI4MDBfcnQyeDAwZGVidWcgPSB7CiAJLm93bmVyCT0gVEhJU19NT0RVTEUsCkBAIC01MDIsMTUgKzc2NiwyOCBAQAogCiAJb2Zmc2V0ID0gTUFDX1dDSURfQVRUUl9FTlRSWShrZXktPmh3X2tleV9pZHgpOwogCi0JcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBvZmZzZXQsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfV0NJRF9BVFRSSUJVVEVfS0VZVEFCLAotCQkJICAgISEoa2V5LT5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSkpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfV0NJRF9BVFRSSUJVVEVfQ0lQSEVSLAotCQkJICAgKGNyeXB0by0+Y21kID09IFNFVF9LRVkpICogY3J5cHRvLT5jaXBoZXIpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfV0NJRF9BVFRSSUJVVEVfQlNTX0lEWCwKLQkJCSAgIChjcnlwdG8tPmNtZCA9PSBTRVRfS0VZKSAqIGNyeXB0by0+YnNzaWR4KTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX1dDSURfQVRUUklCVVRFX1JYX1dJVURGLCBjcnlwdG8tPmNpcGhlcik7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgb2Zmc2V0LCByZWcpOworCWlmIChjcnlwdG8tPmNtZCA9PSBTRVRfS0VZKSB7CisJCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgb2Zmc2V0LCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19XQ0lEX0FUVFJJQlVURV9LRVlUQUIsCisJCQkJICAgISEoa2V5LT5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSkpOworCQkvKgorCQkgKiBCb3RoIHRoZSBjaXBoZXIgYXMgdGhlIEJTUyBJZHggbnVtYmVycyBhcmUgc3BsaXQgaW4gYSBtYWluCisJCSAqIHZhbHVlIG9mIDMgYml0cywgYW5kIGEgZXh0ZW5kZWQgZmllbGQgZm9yIGFkZGluZyBvbmUgYWRkaXRpb25hbAorCQkgKiBiaXQgdG8gdGhlIHZhbHVlLgorCQkgKi8KKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19XQ0lEX0FUVFJJQlVURV9DSVBIRVIsCisJCQkJICAgKGNyeXB0by0+Y2lwaGVyICYgMHg3KSk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfV0NJRF9BVFRSSUJVVEVfQ0lQSEVSX0VYVCwKKwkJCQkgICAoY3J5cHRvLT5jaXBoZXIgJiAweDgpID4+IDMpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX1dDSURfQVRUUklCVVRFX0JTU19JRFgsCisJCQkJICAgKGNyeXB0by0+YnNzaWR4ICYgMHg3KSk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfV0NJRF9BVFRSSUJVVEVfQlNTX0lEWF9FWFQsCisJCQkJICAgKGNyeXB0by0+YnNzaWR4ICYgMHg4KSA+PiAzKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19XQ0lEX0FUVFJJQlVURV9SWF9XSVVERiwgY3J5cHRvLT5jaXBoZXIpOworCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBvZmZzZXQsIHJlZyk7CisJfSBlbHNlIHsKKwkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgb2Zmc2V0LCAwKTsKKwl9CiAKIAlvZmZzZXQgPSBNQUNfSVZFSVZfRU5UUlkoa2V5LT5od19rZXlfaWR4KTsKIApAQCAtNjY4LDE5ICs5NDUsMTQgQEAKIHZvaWQgcnQyODAwX2NvbmZpZ19pbnRmKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIHN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiwKIAkJCXN0cnVjdCBydDJ4MDBpbnRmX2NvbmYgKmNvbmYsIGNvbnN0IHVuc2lnbmVkIGludCBmbGFncykKIHsKLQl1bnNpZ25lZCBpbnQgYmVhY29uX2Jhc2U7CiAJdTMyIHJlZzsKIAogCWlmIChmbGFncyAmIENPTkZJR19VUERBVEVfVFlQRSkgewogCQkvKgogCQkgKiBDbGVhciBjdXJyZW50IHN5bmNocm9uaXNhdGlvbiBzZXR1cC4KLQkJICogRm9yIHRoZSBCZWFjb24gYmFzZSByZWdpc3RlcnMgd2Ugb25seSBuZWVkIHRvIGNsZWFyCi0JCSAqIHRoZSBmaXJzdCBieXRlIHNpbmNlIHRoYXQgYnl0ZSBjb250YWlucyB0aGUgVkFMSUQgYW5kIE9XTkVSCi0JCSAqIGJpdHMgd2hpY2ggKHdoZW4gc2V0IHRvIDApIHdpbGwgaW52YWxpZGF0ZSB0aGUgZW50aXJlIGJlYWNvbi4KIAkJICovCi0JCWJlYWNvbl9iYXNlID0gSFdfQkVBQ09OX09GRlNFVChpbnRmLT5iZWFjb24tPmVudHJ5X2lkeCk7Ci0JCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIGJlYWNvbl9iYXNlLCAwKTsKLQorCQlydDI4MDBfY2xlYXJfYmVhY29uKHJ0MngwMGRldiwKKwkJCQkgICAgSFdfQkVBQ09OX09GRlNFVChpbnRmLT5iZWFjb24tPmVudHJ5X2lkeCkpOwogCQkvKgogCQkgKiBFbmFibGUgc3luY2hyb25pc2F0aW9uLgogCQkgKi8KQEAgLTY4OCw4ICs5NjAsMTggQEAKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJDTl9USU1FX0NGR19UU0ZfVElDS0lORywgMSk7CiAJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05fVElNRV9DRkdfVFNGX1NZTkMsIGNvbmYtPnN5bmMpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkNOX1RJTUVfQ0ZHX1RCVFRfRU5BQkxFLAotCQkJCSAgIChjb25mLT5zeW5jID09IFRTRl9TWU5DX0JFQUNPTikpOworCQkJCSAgIChjb25mLT5zeW5jID09IFRTRl9TWU5DX0FESE9DIHx8CisJCQkJICAgIGNvbmYtPnN5bmMgPT0gVFNGX1NZTkNfQVBfTk9ORSkpOwogCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBCQ05fVElNRV9DRkcsIHJlZyk7CisKKwkJLyoKKwkJICogRW5hYmxlIHByZSB0YnR0IGludGVycnVwdCBmb3IgYmVhY29uaW5nIG1vZGVzCisJCSAqLworCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIElOVF9USU1FUl9FTiwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBJTlRfVElNRVJfRU5fUFJFX1RCVFRfVElNRVIsCisJCQkJICAgKGNvbmYtPnN5bmMgPT0gVFNGX1NZTkNfQVBfTk9ORSkpOworCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBJTlRfVElNRVJfRU4sIHJlZyk7CisKIAl9CiAKIAlpZiAoZmxhZ3MgJiBDT05GSUdfVVBEQVRFX01BQykgewpAQCAtNzAzLDggKzk4NSw4IEBACiAKIAlpZiAoZmxhZ3MgJiBDT05GSUdfVVBEQVRFX0JTU0lEKSB7CiAJCXJlZyA9IGxlMzJfdG9fY3B1KGNvbmYtPmJzc2lkWzFdKTsKLQkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19CU1NJRF9EVzFfQlNTX0lEX01BU0ssIDApOwotCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0JTU0lEX0RXMV9CU1NfQkNOX05VTSwgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQlNTSURfRFcxX0JTU19JRF9NQVNLLCAzKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19CU1NJRF9EVzFfQlNTX0JDTl9OVU0sIDcpOwogCQljb25mLT5ic3NpZFsxXSA9IGNwdV90b19sZTMyKHJlZyk7CiAKIAkJcnQyODAwX3JlZ2lzdGVyX211bHRpd3JpdGUocnQyeDAwZGV2LCBNQUNfQlNTSURfRFcwLApAQCAtNzYyLDE0ICsxMDQ0LDEyIEBACiAJc3dpdGNoICgoaW50KWFudC0+dHgpIHsKIAljYXNlIDE6CiAJCXJ0MngwMF9zZXRfZmllbGQ4KCZyMSwgQkJQMV9UWF9BTlRFTk5BLCAwKTsKLQkJaWYgKHJ0MngwMF9pc19wY2kocnQyeDAwZGV2KSB8fCBydDJ4MDBfaXNfc29jKHJ0MngwMGRldikpCi0JCQlydDJ4MDBfc2V0X2ZpZWxkOCgmcjMsIEJCUDNfUlhfQU5URU5OQSwgMCk7CiAJCWJyZWFrOwogCWNhc2UgMjoKIAkJcnQyeDAwX3NldF9maWVsZDgoJnIxLCBCQlAxX1RYX0FOVEVOTkEsIDIpOwogCQlicmVhazsKIAljYXNlIDM6Ci0JCS8qIERvIG5vdGhpbmcgKi8KKwkJcnQyeDAwX3NldF9maWVsZDgoJnIxLCBCQlAxX1RYX0FOVEVOTkEsIDApOwogCQlicmVhazsKIAl9CiAKQEAgLTEwMTYsNjYgKzEyOTYsMTE1IEBACiB9CiAKIHN0YXRpYyB2b2lkIHJ0MjgwMF9jb25maWdfdHhwb3dlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCSAgY29uc3QgaW50IHR4cG93ZXIpCisJCQkJICBjb25zdCBpbnQgbWF4X3R4cG93ZXIpCiB7CisJdTggdHhwb3dlcjsKKwl1OCBtYXhfdmFsdWUgPSAodTgpbWF4X3R4cG93ZXI7CisJdTE2IGVlcHJvbTsKKwlpbnQgaTsKIAl1MzIgcmVnOwotCXUzMiB2YWx1ZSA9IFRYUE9XRVJfR19UT19ERVYodHhwb3dlcik7CiAJdTggcjE7CisJdTMyIG9mZnNldDsKIAorCS8qCisJICogc2V0IHRvIG5vcm1hbCB0eCBwb3dlciBtb2RlOiArLy0gMGRCbQorCSAqLwogCXJ0MjgwMF9iYnBfcmVhZChydDJ4MDBkZXYsIDEsICZyMSk7Ci0JcnQyeDAwX3NldF9maWVsZDgoJnJlZywgQkJQMV9UWF9QT1dFUiwgMCk7CisJcnQyeDAwX3NldF9maWVsZDgoJnIxLCBCQlAxX1RYX1BPV0VSLCAwKTsKIAlydDI4MDBfYmJwX3dyaXRlKHJ0MngwMGRldiwgMSwgcjEpOwogCi0JcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWF9QV1JfQ0ZHXzAsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHXzBfMU1CUywgdmFsdWUpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHXzBfMk1CUywgdmFsdWUpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHXzBfNTVNQlMsIHZhbHVlKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfUFdSX0NGR18wXzExTUJTLCB2YWx1ZSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX1BXUl9DRkdfMF82TUJTLCB2YWx1ZSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX1BXUl9DRkdfMF85TUJTLCB2YWx1ZSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX1BXUl9DRkdfMF8xMk1CUywgdmFsdWUpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHXzBfMThNQlMsIHZhbHVlKTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9QV1JfQ0ZHXzAsIHJlZyk7CisJLyoKKwkgKiBUaGUgZWVwcm9tIGNvbnRhaW5zIHRoZSB0eCBwb3dlciB2YWx1ZXMgZm9yIGVhY2ggcmF0ZS4gVGhlc2UKKwkgKiB2YWx1ZXMgbWFwIHRvIDEwMCUgdHggcG93ZXIuIEVhY2ggMTZiaXQgd29yZCBjb250YWlucyBmb3VyIHR4CisJICogcG93ZXIgdmFsdWVzIGFuZCB0aGUgb3JkZXIgaXMgdGhlIHNhbWUgYXMgdXNlZCBpbiB0aGUgVFhfUFdSX0NGRworCSAqIHJlZ2lzdGVycy4KKwkgKi8KKwlvZmZzZXQgPSBUWF9QV1JfQ0ZHXzA7CiAKLQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYX1BXUl9DRkdfMSwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX1BXUl9DRkdfMV8yNE1CUywgdmFsdWUpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHXzFfMzZNQlMsIHZhbHVlKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfUFdSX0NGR18xXzQ4TUJTLCB2YWx1ZSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX1BXUl9DRkdfMV81NE1CUywgdmFsdWUpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHXzFfTUNTMCwgdmFsdWUpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHXzFfTUNTMSwgdmFsdWUpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHXzFfTUNTMiwgdmFsdWUpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHXzFfTUNTMywgdmFsdWUpOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX1BXUl9DRkdfMSwgcmVnKTsKKwlmb3IgKGkgPSAwOyBpIDwgRUVQUk9NX1RYUE9XRVJfQllSQVRFX1NJWkU7IGkgKz0gMikgeworCQkvKiBqdXN0IHRvIGJlIHNhZmUgKi8KKwkJaWYgKG9mZnNldCA+IFRYX1BXUl9DRkdfNCkKKwkJCWJyZWFrOwogCi0JcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWF9QV1JfQ0ZHXzIsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHXzJfTUNTNCwgdmFsdWUpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHXzJfTUNTNSwgdmFsdWUpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHXzJfTUNTNiwgdmFsdWUpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHXzJfTUNTNywgdmFsdWUpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHXzJfTUNTOCwgdmFsdWUpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHXzJfTUNTOSwgdmFsdWUpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHXzJfTUNTMTAsIHZhbHVlKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfUFdSX0NGR18yX01DUzExLCB2YWx1ZSk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfUFdSX0NGR18yLCByZWcpOworCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIG9mZnNldCwgJnJlZyk7CiAKLQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYX1BXUl9DRkdfMywgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX1BXUl9DRkdfM19NQ1MxMiwgdmFsdWUpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHXzNfTUNTMTMsIHZhbHVlKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfUFdSX0NGR18zX01DUzE0LCB2YWx1ZSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX1BXUl9DRkdfM19NQ1MxNSwgdmFsdWUpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHXzNfVUtOT1dOMSwgdmFsdWUpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHXzNfVUtOT1dOMiwgdmFsdWUpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHXzNfVUtOT1dOMywgdmFsdWUpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHXzNfVUtOT1dONCwgdmFsdWUpOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX1BXUl9DRkdfMywgcmVnKTsKKwkJLyogcmVhZCB0aGUgbmV4dCBmb3VyIHR4cG93ZXIgdmFsdWVzICovCisJCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9UWFBPV0VSX0JZUkFURSArIGksCisJCQkJICAgJmVlcHJvbSk7CiAKLQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYX1BXUl9DRkdfNCwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX1BXUl9DRkdfNF9VS05PV041LCB2YWx1ZSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX1BXUl9DRkdfNF9VS05PV042LCB2YWx1ZSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX1BXUl9DRkdfNF9VS05PV043LCB2YWx1ZSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX1BXUl9DRkdfNF9VS05PV044LCB2YWx1ZSk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfUFdSX0NGR180LCByZWcpOworCQkvKiBUWF9QV1JfQ0ZHXzA6IDFNQlMsIFRYX1BXUl9DRkdfMTogMjRNQlMsCisJCSAqIFRYX1BXUl9DRkdfMjogTUNTNCwgVFhfUFdSX0NGR18zOiBNQ1MxMiwKKwkJICogVFhfUFdSX0NGR180OiB1bmtub3duICovCisJCXR4cG93ZXIgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLAorCQkJCQkgICAgIEVFUFJPTV9UWFBPV0VSX0JZUkFURV9SQVRFMCk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHX1JBVEUwLAorCQkJCSAgIG1pbih0eHBvd2VyLCBtYXhfdmFsdWUpKTsKKworCQkvKiBUWF9QV1JfQ0ZHXzA6IDJNQlMsIFRYX1BXUl9DRkdfMTogMzZNQlMsCisJCSAqIFRYX1BXUl9DRkdfMjogTUNTNSwgVFhfUFdSX0NGR18zOiBNQ1MxMywKKwkJICogVFhfUFdSX0NGR180OiB1bmtub3duICovCisJCXR4cG93ZXIgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLAorCQkJCQkgICAgIEVFUFJPTV9UWFBPV0VSX0JZUkFURV9SQVRFMSk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHX1JBVEUxLAorCQkJCSAgIG1pbih0eHBvd2VyLCBtYXhfdmFsdWUpKTsKKworCQkvKiBUWF9QV1JfQ0ZHXzA6IDU1TUJTLCBUWF9QV1JfQ0ZHXzE6IDQ4TUJTLAorCQkgKiBUWF9QV1JfQ0ZHXzI6IE1DUzYsICBUWF9QV1JfQ0ZHXzM6IE1DUzE0LAorCQkgKiBUWF9QV1JfQ0ZHXzQ6IHVua25vd24gKi8KKwkJdHhwb3dlciA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sCisJCQkJCSAgICAgRUVQUk9NX1RYUE9XRVJfQllSQVRFX1JBVEUyKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX1BXUl9DRkdfUkFURTIsCisJCQkJICAgbWluKHR4cG93ZXIsIG1heF92YWx1ZSkpOworCisJCS8qIFRYX1BXUl9DRkdfMDogMTFNQlMsIFRYX1BXUl9DRkdfMTogNTRNQlMsCisJCSAqIFRYX1BXUl9DRkdfMjogTUNTNywgIFRYX1BXUl9DRkdfMzogTUNTMTUsCisJCSAqIFRYX1BXUl9DRkdfNDogdW5rbm93biAqLworCQl0eHBvd2VyID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKKwkJCQkJICAgICBFRVBST01fVFhQT1dFUl9CWVJBVEVfUkFURTMpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfUFdSX0NGR19SQVRFMywKKwkJCQkgICBtaW4odHhwb3dlciwgbWF4X3ZhbHVlKSk7CisKKwkJLyogcmVhZCB0aGUgbmV4dCBmb3VyIHR4cG93ZXIgdmFsdWVzICovCisJCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9UWFBPV0VSX0JZUkFURSArIGkgKyAxLAorCQkJCSAgICZlZXByb20pOworCisJCS8qIFRYX1BXUl9DRkdfMDogNk1CUywgVFhfUFdSX0NGR18xOiBNQ1MwLAorCQkgKiBUWF9QV1JfQ0ZHXzI6IE1DUzgsIFRYX1BXUl9DRkdfMzogdW5rbm93biwKKwkJICogVFhfUFdSX0NGR180OiB1bmtub3duICovCisJCXR4cG93ZXIgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLAorCQkJCQkgICAgIEVFUFJPTV9UWFBPV0VSX0JZUkFURV9SQVRFMCk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHX1JBVEU0LAorCQkJCSAgIG1pbih0eHBvd2VyLCBtYXhfdmFsdWUpKTsKKworCQkvKiBUWF9QV1JfQ0ZHXzA6IDlNQlMsIFRYX1BXUl9DRkdfMTogTUNTMSwKKwkJICogVFhfUFdSX0NGR18yOiBNQ1M5LCBUWF9QV1JfQ0ZHXzM6IHVua25vd24sCisJCSAqIFRYX1BXUl9DRkdfNDogdW5rbm93biAqLworCQl0eHBvd2VyID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKKwkJCQkJICAgICBFRVBST01fVFhQT1dFUl9CWVJBVEVfUkFURTEpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfUFdSX0NGR19SQVRFNSwKKwkJCQkgICBtaW4odHhwb3dlciwgbWF4X3ZhbHVlKSk7CisKKwkJLyogVFhfUFdSX0NGR18wOiAxMk1CUywgVFhfUFdSX0NGR18xOiBNQ1MyLAorCQkgKiBUWF9QV1JfQ0ZHXzI6IE1DUzEwLCBUWF9QV1JfQ0ZHXzM6IHVua25vd24sCisJCSAqIFRYX1BXUl9DRkdfNDogdW5rbm93biAqLworCQl0eHBvd2VyID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKKwkJCQkJICAgICBFRVBST01fVFhQT1dFUl9CWVJBVEVfUkFURTIpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfUFdSX0NGR19SQVRFNiwKKwkJCQkgICBtaW4odHhwb3dlciwgbWF4X3ZhbHVlKSk7CisKKwkJLyogVFhfUFdSX0NGR18wOiAxOE1CUywgVFhfUFdSX0NGR18xOiBNQ1MzLAorCQkgKiBUWF9QV1JfQ0ZHXzI6IE1DUzExLCBUWF9QV1JfQ0ZHXzM6IHVua25vd24sCisJCSAqIFRYX1BXUl9DRkdfNDogdW5rbm93biAqLworCQl0eHBvd2VyID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKKwkJCQkJICAgICBFRVBST01fVFhQT1dFUl9CWVJBVEVfUkFURTMpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfUFdSX0NGR19SQVRFNywKKwkJCQkgICBtaW4odHhwb3dlciwgbWF4X3ZhbHVlKSk7CisKKwkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgb2Zmc2V0LCByZWcpOworCisJCS8qIG5leHQgVFhfUFdSX0NGRyByZWdpc3RlciAqLworCQlvZmZzZXQgKz0gNDsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHJ0MjgwMF9jb25maWdfcmV0cnlfbGltaXQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKQEAgLTEyMTIsNiArMTU0MSw3IEBACiAJdTMyIHJlZzsKIAl1MTYgZWVwcm9tOwogCXVuc2lnbmVkIGludCBpOworCWludCByZXQ7CiAKIAlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFdQRE1BX0dMT19DRkcsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBXUERNQV9HTE9fQ0ZHX0VOQUJMRV9UWF9ETUEsIDApOwpAQCAtMTIyMSw1OSArMTU1MSw5IEBACiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFdQRE1BX0dMT19DRkdfVFhfV1JJVEVCQUNLX0RPTkUsIDEpOwogCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFdQRE1BX0dMT19DRkcsIHJlZyk7CiAKLQlpZiAocnQyeDAwX2lzX3VzYihydDJ4MDBkZXYpKSB7Ci0JCS8qCi0JCSAqIFdhaXQgdW50aWwgQkJQIGFuZCBSRiBhcmUgcmVhZHkuCi0JCSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgUkVHSVNURVJfQlVTWV9DT1VOVDsgaSsrKSB7Ci0JCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19DU1IwLCAmcmVnKTsKLQkJCWlmIChyZWcgJiYgcmVnICE9IH4wKQotCQkJCWJyZWFrOwotCQkJbXNsZWVwKDEpOwotCQl9Ci0KLQkJaWYgKGkgPT0gUkVHSVNURVJfQlVTWV9DT1VOVCkgewotCQkJRVJST1IocnQyeDAwZGV2LCAiVW5zdGFibGUgaGFyZHdhcmUuXG4iKTsKLQkJCXJldHVybiAtRUJVU1k7Ci0JCX0KLQotCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFBCRl9TWVNfQ1RSTCwgJnJlZyk7Ci0JCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBCRl9TWVNfQ1RSTCwKLQkJCQkgICAgICByZWcgJiB+MHgwMDAwMjAwMCk7Ci0JfSBlbHNlIGlmIChydDJ4MDBfaXNfcGNpKHJ0MngwMGRldikgfHwgcnQyeDAwX2lzX3NvYyhydDJ4MDBkZXYpKSB7Ci0JCS8qCi0JCSAqIFJlc2V0IERNQSBpbmRleGVzCi0JCSAqLwotCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFdQRE1BX1JTVF9JRFgsICZyZWcpOwotCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgV1BETUFfUlNUX0lEWF9EVFhfSURYMCwgMSk7Ci0JCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBXUERNQV9SU1RfSURYX0RUWF9JRFgxLCAxKTsKLQkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFdQRE1BX1JTVF9JRFhfRFRYX0lEWDIsIDEpOwotCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgV1BETUFfUlNUX0lEWF9EVFhfSURYMywgMSk7Ci0JCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBXUERNQV9SU1RfSURYX0RUWF9JRFg0LCAxKTsKLQkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFdQRE1BX1JTVF9JRFhfRFRYX0lEWDUsIDEpOwotCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgV1BETUFfUlNUX0lEWF9EUlhfSURYMCwgMSk7Ci0JCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFdQRE1BX1JTVF9JRFgsIHJlZyk7Ci0KLQkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEJGX1NZU19DVFJMLCAweDAwMDAwZTFmKTsKLQkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEJGX1NZU19DVFJMLCAweDAwMDAwZTAwKTsKLQotCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQV1JfUElOX0NGRywgMHgwMDAwMDAwMyk7Ci0JfQotCi0JcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfU1lTX0NUUkwsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfU1lTX0NUUkxfUkVTRVRfQ1NSLCAxKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX1NZU19DVFJMX1JFU0VUX0JCUCwgMSk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCByZWcpOwotCi0JaWYgKHJ0MngwMF9pc191c2IocnQyeDAwZGV2KSkgewotCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBVU0JfRE1BX0NGRywgMHgwMDAwMDAwMCk7Ci0jaWYgZGVmaW5lZChDT05GSUdfUlQyWDAwX0xJQl9VU0IpIHx8IGRlZmluZWQoQ09ORklHX1JUMlgwMF9MSUJfVVNCX01PRFVMRSkKLQkJcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0X3N3KHJ0MngwMGRldiwgVVNCX0RFVklDRV9NT0RFLCAwLAotCQkJCQkgICAgVVNCX01PREVfUkVTRVQsIFJFR0lTVEVSX1RJTUVPVVQpOwotI2VuZGlmCi0JfQotCi0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCAweDAwMDAwMDAwKTsKKwlyZXQgPSBydDI4MDBfZHJ2X2luaXRfcmVnaXN0ZXJzKHJ0MngwMGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAogCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQkNOX09GRlNFVDAsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05fT0ZGU0VUMF9CQ04wLCAweGUwKTsgLyogMHgzODAwICovCkBAIC0xMjk1LDcgKzE1NzUsNyBAQAogCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgMHgwMDAwMDAwMCk7CiAKIAlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEJDTl9USU1FX0NGRywgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJDTl9USU1FX0NGR19CRUFDT05fSU5URVJWQUwsIDApOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05fVElNRV9DRkdfQkVBQ09OX0lOVEVSVkFMLCAxNjAwKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkNOX1RJTUVfQ0ZHX1RTRl9USUNLSU5HLCAwKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkNOX1RJTUVfQ0ZHX1RTRl9TWU5DLCAwKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkNOX1RJTUVfQ0ZHX1RCVFRfRU5BQkxFLCAwKTsKQEAgLTEzMjgsNyArMTYwOCw2IEBACiAJCX0gZWxzZSB7CiAJCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9TV19DRkcyLCAweDAwMDAwMDAwKTsKIAkJfQotCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9TV19DRkcyLCByZWcpOwogCX0gZWxzZSBpZiAocnQyeDAwX3J0KHJ0MngwMGRldiwgUlQzMDcwKSkgewogCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9TV19DRkcwLCAweDAwMDAwNDAwKTsKIApAQCAtMTMzOSw2ICsxNjE4LDEwIEBACiAJCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9TV19DRkcxLCAweDAwMDgwNjA2KTsKIAkJCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX1NXX0NGRzIsIDB4MDAwMDAwMDApOwogCQl9CisJfSBlbHNlIGlmIChydDI4MDBfaXNfMzA1eF9zb2MocnQyeDAwZGV2KSkgeworCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9TV19DRkcwLCAweDAwMDAwNDAwKTsKKwkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfU1dfQ0ZHMSwgMHgwMDAwMDAwMCk7CisJCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX1NXX0NGRzIsIDB4MDAwMDAwMWYpOwogCX0gZWxzZSB7CiAJCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX1NXX0NGRzAsIDB4MDAwMDAwMDApOwogCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9TV19DRkcxLCAweDAwMDgwNjA2KTsKQEAgLTE1NDYsMjMgKzE4MjksMjAgQEAKIAogCS8qCiAJICogQ2xlYXIgYWxsIGJlYWNvbnMKLQkgKiBGb3IgdGhlIEJlYWNvbiBiYXNlIHJlZ2lzdGVycyB3ZSBvbmx5IG5lZWQgdG8gY2xlYXIKLQkgKiB0aGUgZmlyc3QgYnl0ZSBzaW5jZSB0aGF0IGJ5dGUgY29udGFpbnMgdGhlIFZBTElEIGFuZCBPV05FUgotCSAqIGJpdHMgd2hpY2ggKHdoZW4gc2V0IHRvIDApIHdpbGwgaW52YWxpZGF0ZSB0aGUgZW50aXJlIGJlYWNvbi4KIAkgKi8KLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIV19CRUFDT05fQkFTRTAsIDApOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEhXX0JFQUNPTl9CQVNFMSwgMCk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSFdfQkVBQ09OX0JBU0UyLCAwKTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIV19CRUFDT05fQkFTRTMsIDApOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEhXX0JFQUNPTl9CQVNFNCwgMCk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSFdfQkVBQ09OX0JBU0U1LCAwKTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIV19CRUFDT05fQkFTRTYsIDApOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEhXX0JFQUNPTl9CQVNFNywgMCk7CisJcnQyODAwX2NsZWFyX2JlYWNvbihydDJ4MDBkZXYsIEhXX0JFQUNPTl9CQVNFMCk7CisJcnQyODAwX2NsZWFyX2JlYWNvbihydDJ4MDBkZXYsIEhXX0JFQUNPTl9CQVNFMSk7CisJcnQyODAwX2NsZWFyX2JlYWNvbihydDJ4MDBkZXYsIEhXX0JFQUNPTl9CQVNFMik7CisJcnQyODAwX2NsZWFyX2JlYWNvbihydDJ4MDBkZXYsIEhXX0JFQUNPTl9CQVNFMyk7CisJcnQyODAwX2NsZWFyX2JlYWNvbihydDJ4MDBkZXYsIEhXX0JFQUNPTl9CQVNFNCk7CisJcnQyODAwX2NsZWFyX2JlYWNvbihydDJ4MDBkZXYsIEhXX0JFQUNPTl9CQVNFNSk7CisJcnQyODAwX2NsZWFyX2JlYWNvbihydDJ4MDBkZXYsIEhXX0JFQUNPTl9CQVNFNik7CisJcnQyODAwX2NsZWFyX2JlYWNvbihydDJ4MDBkZXYsIEhXX0JFQUNPTl9CQVNFNyk7CiAKIAlpZiAocnQyeDAwX2lzX3VzYihydDJ4MDBkZXYpKSB7Ci0JCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVVNCX0NZQ19DRkcsICZyZWcpOwotCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVVNCX0NZQ19DRkdfQ0xPQ0tfQ1lDTEUsIDMwKTsKLQkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVVNCX0NZQ19DRkcsIHJlZyk7CisJCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVVNfQ1lDX0NOVCwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBVU19DWUNfQ05UX0NMT0NLX0NZQ0xFLCAzMCk7CisJCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFVTX0NZQ19DTlQsIHJlZyk7CiAJfQogCiAJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBIVF9GQktfQ0ZHMCwgJnJlZyk7CkBAIC0xNjE3LDYgKzE4OTcsMTMgQEAKIAlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYX1NUQV9DTlQxLCAmcmVnKTsKIAlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYX1NUQV9DTlQyLCAmcmVnKTsKIAorCS8qCisJICogU2V0dXAgbGVhZHRpbWUgZm9yIHByZSB0YnR0IGludGVycnVwdCB0byA2bXMKKwkgKi8KKwlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIElOVF9USU1FUl9DRkcsICZyZWcpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBJTlRfVElNRVJfQ0ZHX1BSRV9UQlRUX1RJTUVSLCA2IDw8IDQpOworCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIElOVF9USU1FUl9DRkcsIHJlZyk7CisKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MjgwMF9pbml0X3JlZ2lzdGVycyk7CkBAIC0xNzA2LDggKzE5OTMsNyBAQAogCXJ0MjgwMF9iYnBfd3JpdGUocnQyeDAwZGV2LCA4MiwgMHg2Mik7CiAJcnQyODAwX2JicF93cml0ZShydDJ4MDBkZXYsIDgzLCAweDZhKTsKIAotCWlmIChydDJ4MDBfcnRfcmV2KHJ0MngwMGRldiwgUlQyODYwLCBSRVZfUlQyODYwRCkgfHwKLQkgICAgcnQyeDAwX3J0X3JldihydDJ4MDBkZXYsIFJUMjg3MCwgUkVWX1JUMjg3MEQpKQorCWlmIChydDJ4MDBfcnRfcmV2KHJ0MngwMGRldiwgUlQyODYwLCBSRVZfUlQyODYwRCkpCiAJCXJ0MjgwMF9iYnBfd3JpdGUocnQyeDAwZGV2LCA4NCwgMHgxOSk7CiAJZWxzZQogCQlydDI4MDBfYmJwX3dyaXRlKHJ0MngwMGRldiwgODQsIDB4OTkpOwpAQCAtMjAxMyw4ICsyMjk5LDcgQEAKIAlpZiAocnQyeDAwX3J0X3Jldl9sdChydDJ4MDBkZXYsIFJUMzA3MSwgUkVWX1JUMzA3MUUpIHx8CiAJICAgIHJ0MngwMF9ydF9yZXZfbHQocnQyeDAwZGV2LCBSVDMwOTAsIFJFVl9SVDMwOTBFKSB8fAogCSAgICBydDJ4MDBfcnRfcmV2X2x0KHJ0MngwMGRldiwgUlQzMzkwLCBSRVZfUlQzMzkwRSkpIHsKLQkJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX05JQywgJmVlcHJvbSk7Ci0JCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX0VYVEVSTkFMX0xOQV9CRykpCisJCWlmICh0ZXN0X2JpdChDT05GSUdfRVhURVJOQUxfTE5BX0JHLCAmcnQyeDAwZGV2LT5mbGFncykpCiAJCQlydDJ4MDBfc2V0X2ZpZWxkOCgmcmZjc3IsIFJGQ1NSMTdfUiwgMSk7CiAJfQogCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9UWE1JWEVSX0dBSU5fQkcsICZlZXByb20pOwpAQCAtMjE0Nyw3ICsyNDMyLDYgQEAKIAkJcnQyeDAwX2VlcHJvbV93cml0ZShydDJ4MDBkZXYsIEVFUFJPTV9BTlRFTk5BLCB3b3JkKTsKIAkJRUVQUk9NKHJ0MngwMGRldiwgIkFudGVubmE6IDB4JTA0eFxuIiwgd29yZCk7CiAJfSBlbHNlIGlmIChydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDI4NjApIHx8Ci0JCSAgIHJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMjg3MCkgfHwKIAkJICAgcnQyeDAwX3J0KHJ0MngwMGRldiwgUlQyODcyKSkgewogCQkvKgogCQkgKiBUaGVyZSBpcyBhIG1heCBvZiAyIFJYIHN0cmVhbXMgZm9yIFJUMjh4MCBzZXJpZXMKQEAgLTIxNjksNiArMjQ1Myw4IEBACiAJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX05JQ19XUFNfUEJDLCAwKTsKIAkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX0JXNDBNX0JHLCAwKTsKIAkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX0JXNDBNX0EsIDApOworCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfQU5UX0RJVkVSU0lUWSwgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX05JQ19EQUNfVEVTVCwgMCk7CiAJCXJ0MngwMF9lZXByb21fd3JpdGUocnQyeDAwZGV2LCBFRVBST01fTklDLCB3b3JkKTsKIAkJRUVQUk9NKHJ0MngwMGRldiwgIk5JQzogMHglMDR4XG4iLCB3b3JkKTsKIAl9CkBAIC0yMTc2LDYgKzI0NjIsMTAgQEAKIAlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fRlJFUSwgJndvcmQpOwogCWlmICgod29yZCAmIDB4MDBmZikgPT0gMHgwMGZmKSB7CiAJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX0ZSRVFfT0ZGU0VULCAwKTsKKwkJcnQyeDAwX2VlcHJvbV93cml0ZShydDJ4MDBkZXYsIEVFUFJPTV9GUkVRLCB3b3JkKTsKKwkJRUVQUk9NKHJ0MngwMGRldiwgIkZyZXE6IDB4JTA0eFxuIiwgd29yZCk7CisJfQorCWlmICgod29yZCAmIDB4ZmYwMCkgPT0gMHhmZjAwKSB7CiAJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX0ZSRVFfTEVEX01PREUsCiAJCQkJICAgTEVEX01PREVfVFhSWF9BQ1RJVklUWSk7CiAJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX0ZSRVFfTEVEX1BPTEFSSVRZLCAwKTsKQEAgLTIxODMsNyArMjQ3Myw3IEBACiAJCXJ0MngwMF9lZXByb21fd3JpdGUocnQyeDAwZGV2LCBFRVBST01fTEVEMSwgMHg1NTU1KTsKIAkJcnQyeDAwX2VlcHJvbV93cml0ZShydDJ4MDBkZXYsIEVFUFJPTV9MRUQyLCAweDIyMjEpOwogCQlydDJ4MDBfZWVwcm9tX3dyaXRlKHJ0MngwMGRldiwgRUVQUk9NX0xFRDMsIDB4YTlmOCk7Ci0JCUVFUFJPTShydDJ4MDBkZXYsICJGcmVxOiAweCUwNHhcbiIsIHdvcmQpOworCQlFRVBST00ocnQyeDAwZGV2LCAiTGVkIE1vZGU6IDB4JTA0eFxuIiwgd29yZCk7CiAJfQogCiAJLyoKQEAgLTIyNTEsNyArMjU0MSw2IEBACiAJCQl2YWx1ZSwgcnQyeDAwX2dldF9maWVsZDMyKHJlZywgTUFDX0NTUjBfUkVWSVNJT04pKTsKIAogCWlmICghcnQyeDAwX3J0KHJ0MngwMGRldiwgUlQyODYwKSAmJgotCSAgICAhcnQyeDAwX3J0KHJ0MngwMGRldiwgUlQyODcwKSAmJgogCSAgICAhcnQyeDAwX3J0KHJ0MngwMGRldiwgUlQyODcyKSAmJgogCSAgICAhcnQyeDAwX3J0KHJ0MngwMGRldiwgUlQyODgzKSAmJgogCSAgICAhcnQyeDAwX3J0KHJ0MngwMGRldiwgUlQzMDcwKSAmJgpAQCAtMjQ4NCwxMyArMjc3MywyNiBAQAogCSAgICBJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HIHwKIAkgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAogCSAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMgfAotCSAgICBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0s7CisJICAgIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSyB8CisJICAgIElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTjsKIAogCVNFVF9JRUVFODAyMTFfREVWKHJ0MngwMGRldi0+aHcsIHJ0MngwMGRldi0+ZGV2KTsKIAlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihydDJ4MDBkZXYtPmh3LAogCQkJCXJ0MngwMF9lZXByb21fYWRkcihydDJ4MDBkZXYsCiAJCQkJCQkgICBFRVBST01fTUFDX0FERFJfMCkpOwogCisJLyoKKwkgKiBBcyBydDI4MDAgaGFzIGEgZ2xvYmFsIGZhbGxiYWNrIHRhYmxlIHdlIGNhbm5vdCBzcGVjaWZ5CisJICogbW9yZSB0aGVuIG9uZSB0eCByYXRlIHBlciBmcmFtZSBidXQgc2luY2UgdGhlIGh3IHdpbGwKKwkgKiB0cnkgc2V2ZXJhbCByYXRlcyAoYmFzZWQgb24gdGhlIGZhbGxiYWNrIHRhYmxlKSB3ZSBzaG91bGQKKwkgKiBzdGlsbCBpbml0aWFsaXplIG1heF9yYXRlcyB0byB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmF0ZXMKKwkgKiB3ZSBhcmUgZ29pbmcgdG8gdHJ5LiBPdGhlcndpc2UgbWFjODAyMTEgd2lsbCB0cnVuY2F0ZSBvdXIKKwkgKiByZXBvcnRlZCB0eCByYXRlcyBhbmQgdGhlIHJjIGFsZ29ydGlobSB3aWxsIGVuZCB1cCB3aXRoCisJICogaW5jb3JyZWN0IGRhdGEuCisJICovCisJcnQyeDAwZGV2LT5ody0+bWF4X3JhdGVzID0gNzsKKwlydDJ4MDBkZXYtPmh3LT5tYXhfcmF0ZV90cmllcyA9IDE7CisKIAlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fQU5URU5OQSwgJmVlcHJvbSk7CiAKIAkvKgpAQCAtMjUyOCwxNiArMjgzMCwxOSBAQAogCWVsc2UKIAkJc3BlYy0+aHQuaHRfc3VwcG9ydGVkID0gZmFsc2U7CiAKLQkvKgotCSAqIERvbid0IHNldCBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCBmb3Igbm93IGFzIGl0IGNhdXNlcwotCSAqIHJlY2VwdGlvbiBwcm9ibGVtcyB3aXRoIEhUNDAgY2FwYWJsZSAxMW4gQVBzCi0JICovCiAJc3BlYy0+aHQuY2FwID0KKwkgICAgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDAgfAogCSAgICBJRUVFODAyMTFfSFRfQ0FQX0dSTl9GTEQgfAogCSAgICBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMCB8Ci0JICAgIElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwIHwKLQkgICAgSUVFRTgwMjExX0hUX0NBUF9UWF9TVEJDIHwKLQkgICAgSUVFRTgwMjExX0hUX0NBUF9SWF9TVEJDOworCSAgICBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MDsKKworCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9UWFBBVEgpID49IDIpCisJCXNwZWMtPmh0LmNhcCB8PSBJRUVFODAyMTFfSFRfQ0FQX1RYX1NUQkM7CisKKwlzcGVjLT5odC5jYXAgfD0KKwkgICAgcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfUlhQQVRIKSA8PAorCQlJRUVFODAyMTFfSFRfQ0FQX1JYX1NUQkNfU0hJRlQ7CisKIAlzcGVjLT5odC5hbXBkdV9mYWN0b3IgPSAzOwogCXNwZWMtPmh0LmFtcGR1X2RlbnNpdHkgPSA0OwogCXNwZWMtPmh0Lm1jcy50eF9wYXJhbXMgPQpAQCAtMjU5MSw4ICsyODk2LDggQEAKIC8qCiAgKiBJRUVFODAyMTEgc3RhY2sgY2FsbGJhY2sgZnVuY3Rpb25zLgogICovCi1zdGF0aWMgdm9pZCBydDI4MDBfZ2V0X3RraXBfc2VxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBod19rZXlfaWR4LAotCQkJCXUzMiAqaXYzMiwgdTE2ICppdjE2KQordm9pZCBydDI4MDBfZ2V0X3RraXBfc2VxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBod19rZXlfaWR4LCB1MzIgKml2MzIsCisJCQkgdTE2ICppdjE2KQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKIAlzdHJ1Y3QgbWFjX2l2ZWl2X2VudHJ5IGl2ZWl2X2VudHJ5OwpAQCAtMjYwNSw4ICsyOTEwLDkgQEAKIAltZW1jcHkoaXYxNiwgJml2ZWl2X2VudHJ5Lml2WzBdLCBzaXplb2YoKml2MTYpKTsKIAltZW1jcHkoaXYzMiwgJml2ZWl2X2VudHJ5Lml2WzRdLCBzaXplb2YoKml2MzIpKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0MjgwMF9nZXRfdGtpcF9zZXEpOwogCi1zdGF0aWMgaW50IHJ0MjgwMF9zZXRfcnRzX3RocmVzaG9sZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHZhbHVlKQoraW50IHJ0MjgwMF9zZXRfcnRzX3RocmVzaG9sZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHZhbHVlKQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKIAl1MzIgcmVnOwpAQCAtMjY0Miw5ICsyOTQ4LDEwIEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0MjgwMF9zZXRfcnRzX3RocmVzaG9sZCk7CiAKLXN0YXRpYyBpbnQgcnQyODAwX2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBxdWV1ZV9pZHgsCi0JCQkgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpCitpbnQgcnQyODAwX2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBxdWV1ZV9pZHgsCisJCSAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OwogCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZTsKQEAgLTI3MDksOCArMzAxNiw5IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0MjgwMF9jb25mX3R4KTsKIAotc3RhdGljIHU2NCBydDI4MDBfZ2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3U2NCBydDI4MDBfZ2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gaHctPnByaXY7CiAJdTY0IHRzZjsKQEAgLTI3MjMsMjMgKzMwMzEsMzcgQEAKIAogCXJldHVybiB0c2Y7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChydDI4MDBfZ2V0X3RzZik7CiAKLWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIHJ0MjgwMF9tYWM4MDIxMV9vcHMgPSB7Ci0JLnR4CQkJPSBydDJ4MDBtYWNfdHgsCi0JLnN0YXJ0CQkJPSBydDJ4MDBtYWNfc3RhcnQsCi0JLnN0b3AJCQk9IHJ0MngwMG1hY19zdG9wLAotCS5hZGRfaW50ZXJmYWNlCQk9IHJ0MngwMG1hY19hZGRfaW50ZXJmYWNlLAotCS5yZW1vdmVfaW50ZXJmYWNlCT0gcnQyeDAwbWFjX3JlbW92ZV9pbnRlcmZhY2UsCi0JLmNvbmZpZwkJCT0gcnQyeDAwbWFjX2NvbmZpZywKLQkuY29uZmlndXJlX2ZpbHRlcgk9IHJ0MngwMG1hY19jb25maWd1cmVfZmlsdGVyLAotCS5zZXRfdGltCQk9IHJ0MngwMG1hY19zZXRfdGltLAotCS5zZXRfa2V5CQk9IHJ0MngwMG1hY19zZXRfa2V5LAotCS5nZXRfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF9zdGF0cywKLQkuZ2V0X3RraXBfc2VxCQk9IHJ0MjgwMF9nZXRfdGtpcF9zZXEsCi0JLnNldF9ydHNfdGhyZXNob2xkCT0gcnQyODAwX3NldF9ydHNfdGhyZXNob2xkLAotCS5ic3NfaW5mb19jaGFuZ2VkCT0gcnQyeDAwbWFjX2Jzc19pbmZvX2NoYW5nZWQsCi0JLmNvbmZfdHgJCT0gcnQyODAwX2NvbmZfdHgsCi0JLmdldF90c2YJCT0gcnQyODAwX2dldF90c2YsCi0JLnJma2lsbF9wb2xsCQk9IHJ0MngwMG1hY19yZmtpbGxfcG9sbCwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChydDI4MDBfbWFjODAyMTFfb3BzKTsKK2ludCBydDI4MDBfYW1wZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJZW51bSBpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24gYWN0aW9uLAorCQkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCwgdTE2ICpzc24pCit7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUQVJUOgorCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUT1A6CisJCS8qIHdlIGRvbid0IHN1cHBvcnQgUlggYWdncmVnYXRpb24geWV0ICovCisJCXJldCA9IC1FTk9UU1VQUDsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQ6CisJCWllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlKHZpZiwgc3RhLT5hZGRyLCB0aWQpOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QOgorCQlpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlKHZpZiwgc3RhLT5hZGRyLCB0aWQpOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9PUEVSQVRJT05BTDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTklORygoc3RydWN0IHJ0MngwMF9kZXYgKilody0+cHJpdiwgIlVua25vd24gQU1QRFUgYWN0aW9uXG4iKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwocnQyODAwX2FtcGR1X2FjdGlvbik7CisKK01PRFVMRV9BVVRIT1IoRFJWX1BST0pFQ1QgIiwgQmFydGxvbWllaiBab2xuaWVya2lld2ljeiIpOworTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSYWxpbmsgUlQyODAwIGxpYnJhcnkiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBsaWIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBsaWIuaAppbmRleCA5NGRlOTk5Li4wOTE2NDFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMGxpYi5oCkBAIC00MCwxMyArNDAsMTcgQEAKIAlpbnQgKCpyZWdidXN5X3JlYWQpKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgICAgY29uc3QgdW5zaWduZWQgaW50IG9mZnNldCwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgcnQyeDAwX2ZpZWxkMzIgZmllbGQsIHUzMiAqcmVnKTsKKworCWludCAoKmRydl93cml0ZV9maXJtd2FyZSkoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgIGNvbnN0IHU4ICpkYXRhLCBjb25zdCBzaXplX3QgbGVuKTsKKwlpbnQgKCpkcnZfaW5pdF9yZWdpc3RlcnMpKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkJCWNvbnN0IHVuc2lnbmVkIGludCBvZmZzZXQsCiAJCQkJCXUzMiAqdmFsdWUpCiB7Ci0JY29uc3Qgc3RydWN0IHJ0MjgwMF9vcHMgKnJ0MjgwMG9wcyA9IHJ0MngwMGRldi0+cHJpdjsKKwljb25zdCBzdHJ1Y3QgcnQyODAwX29wcyAqcnQyODAwb3BzID0gcnQyeDAwZGV2LT5vcHMtPmRydjsKIAogCXJ0MjgwMG9wcy0+cmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIG9mZnNldCwgdmFsdWUpOwogfQpAQCAtNTUsNyArNTksNyBAQAogCQkJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGludCBvZmZzZXQsCiAJCQkJCSAgICAgdTMyICp2YWx1ZSkKIHsKLQljb25zdCBzdHJ1Y3QgcnQyODAwX29wcyAqcnQyODAwb3BzID0gcnQyeDAwZGV2LT5wcml2OworCWNvbnN0IHN0cnVjdCBydDI4MDBfb3BzICpydDI4MDBvcHMgPSBydDJ4MDBkZXYtPm9wcy0+ZHJ2OwogCiAJcnQyODAwb3BzLT5yZWdpc3Rlcl9yZWFkX2xvY2socnQyeDAwZGV2LCBvZmZzZXQsIHZhbHVlKTsKIH0KQEAgLTY0LDcgKzY4LDcgQEAKIAkJCQkJIGNvbnN0IHVuc2lnbmVkIGludCBvZmZzZXQsCiAJCQkJCSB1MzIgdmFsdWUpCiB7Ci0JY29uc3Qgc3RydWN0IHJ0MjgwMF9vcHMgKnJ0MjgwMG9wcyA9IHJ0MngwMGRldi0+cHJpdjsKKwljb25zdCBzdHJ1Y3QgcnQyODAwX29wcyAqcnQyODAwb3BzID0gcnQyeDAwZGV2LT5vcHMtPmRydjsKIAogCXJ0MjgwMG9wcy0+cmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBvZmZzZXQsIHZhbHVlKTsKIH0KQEAgLTczLDcgKzc3LDcgQEAKIAkJCQkJICAgICAgY29uc3QgdW5zaWduZWQgaW50IG9mZnNldCwKIAkJCQkJICAgICAgdTMyIHZhbHVlKQogewotCWNvbnN0IHN0cnVjdCBydDI4MDBfb3BzICpydDI4MDBvcHMgPSBydDJ4MDBkZXYtPnByaXY7CisJY29uc3Qgc3RydWN0IHJ0MjgwMF9vcHMgKnJ0MjgwMG9wcyA9IHJ0MngwMGRldi0+b3BzLT5kcnY7CiAKIAlydDI4MDBvcHMtPnJlZ2lzdGVyX3dyaXRlX2xvY2socnQyeDAwZGV2LCBvZmZzZXQsIHZhbHVlKTsKIH0KQEAgLTgyLDcgKzg2LDcgQEAKIAkJCQkJICAgICBjb25zdCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAogCQkJCQkgICAgIHZvaWQgKnZhbHVlLCBjb25zdCB1MzIgbGVuZ3RoKQogewotCWNvbnN0IHN0cnVjdCBydDI4MDBfb3BzICpydDI4MDBvcHMgPSBydDJ4MDBkZXYtPnByaXY7CisJY29uc3Qgc3RydWN0IHJ0MjgwMF9vcHMgKnJ0MjgwMG9wcyA9IHJ0MngwMGRldi0+b3BzLT5kcnY7CiAKIAlydDI4MDBvcHMtPnJlZ2lzdGVyX211bHRpcmVhZChydDJ4MDBkZXYsIG9mZnNldCwgdmFsdWUsIGxlbmd0aCk7CiB9CkBAIC05Miw3ICs5Niw3IEBACiAJCQkJCSAgICAgIGNvbnN0IHZvaWQgKnZhbHVlLAogCQkJCQkgICAgICBjb25zdCB1MzIgbGVuZ3RoKQogewotCWNvbnN0IHN0cnVjdCBydDI4MDBfb3BzICpydDI4MDBvcHMgPSBydDJ4MDBkZXYtPnByaXY7CisJY29uc3Qgc3RydWN0IHJ0MjgwMF9vcHMgKnJ0MjgwMG9wcyA9IHJ0MngwMGRldi0+b3BzLT5kcnY7CiAKIAlydDI4MDBvcHMtPnJlZ2lzdGVyX211bHRpd3JpdGUocnQyeDAwZGV2LCBvZmZzZXQsIHZhbHVlLCBsZW5ndGgpOwogfQpAQCAtMTAyLDE3ICsxMDYsMzkgQEAKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcnQyeDAwX2ZpZWxkMzIgZmllbGQsCiAJCQkJICAgICAgdTMyICpyZWcpCiB7Ci0JY29uc3Qgc3RydWN0IHJ0MjgwMF9vcHMgKnJ0MjgwMG9wcyA9IHJ0MngwMGRldi0+cHJpdjsKKwljb25zdCBzdHJ1Y3QgcnQyODAwX29wcyAqcnQyODAwb3BzID0gcnQyeDAwZGV2LT5vcHMtPmRydjsKIAogCXJldHVybiBydDI4MDBvcHMtPnJlZ2J1c3lfcmVhZChydDJ4MDBkZXYsIG9mZnNldCwgZmllbGQsIHJlZyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHJ0MjgwMF9kcnZfd3JpdGVfZmlybXdhcmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkJICAgIGNvbnN0IHU4ICpkYXRhLCBjb25zdCBzaXplX3QgbGVuKQoreworCWNvbnN0IHN0cnVjdCBydDI4MDBfb3BzICpydDI4MDBvcHMgPSBydDJ4MDBkZXYtPm9wcy0+ZHJ2OworCisJcmV0dXJuIHJ0MjgwMG9wcy0+ZHJ2X3dyaXRlX2Zpcm13YXJlKHJ0MngwMGRldiwgZGF0YSwgbGVuKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcnQyODAwX2Rydl9pbml0X3JlZ2lzdGVycyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCWNvbnN0IHN0cnVjdCBydDI4MDBfb3BzICpydDI4MDBvcHMgPSBydDJ4MDBkZXYtPm9wcy0+ZHJ2OworCisJcmV0dXJuIHJ0MjgwMG9wcy0+ZHJ2X2luaXRfcmVnaXN0ZXJzKHJ0MngwMGRldik7Cit9CisKIHZvaWQgcnQyODAwX21jdV9yZXF1ZXN0KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQljb25zdCB1OCBjb21tYW5kLCBjb25zdCB1OCB0b2tlbiwKIAkJCWNvbnN0IHU4IGFyZzAsIGNvbnN0IHU4IGFyZzEpOwogCi12b2lkIHJ0MjgwMF93cml0ZV90eHdpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYyk7Ci12b2lkIHJ0MjgwMF9wcm9jZXNzX3J4d2koc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJ4ZG9uZV9lbnRyeV9kZXNjICp0eGRlc2MpOworaW50IHJ0MjgwMF9jaGVja19maXJtd2FyZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICBjb25zdCB1OCAqZGF0YSwgY29uc3Qgc2l6ZV90IGxlbik7CitpbnQgcnQyODAwX2xvYWRfZmlybXdhcmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSBjb25zdCB1OCAqZGF0YSwgY29uc3Qgc2l6ZV90IGxlbik7CisKK3ZvaWQgcnQyODAwX3dyaXRlX3R4d2koX19sZTMyICp0eHdpLCBzdHJ1Y3QgdHhlbnRyeV9kZXNjICp0eGRlc2MpOwordm9pZCBydDI4MDBfcHJvY2Vzc19yeHdpKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksIHN0cnVjdCByeGRvbmVfZW50cnlfZGVzYyAqdHhkZXNjKTsKKwordm9pZCBydDI4MDBfd3JpdGVfYmVhY29uKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYyk7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgcnQyeDAwZGVidWcgcnQyODAwX3J0MngwMGRlYnVnOwogCkBAIC0xNDgsNiArMTc0LDE0IEBACiBpbnQgcnQyODAwX2luaXRfZWVwcm9tKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogaW50IHJ0MjgwMF9wcm9iZV9od19tb2RlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogCi1leHRlcm4gY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgcnQyODAwX21hYzgwMjExX29wczsKK3ZvaWQgcnQyODAwX2dldF90a2lwX3NlcShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggaHdfa2V5X2lkeCwgdTMyICppdjMyLAorCQkJIHUxNiAqaXYxNik7CitpbnQgcnQyODAwX3NldF9ydHNfdGhyZXNob2xkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgdmFsdWUpOworaW50IHJ0MjgwMF9jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgcXVldWVfaWR4LAorCQkgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKTsKK3U2NCBydDI4MDBfZ2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CitpbnQgcnQyODAwX2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCWVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uIGFjdGlvbiwKKwkJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQsIHUxNiAqc3NuKTsKIAogI2VuZGlmIC8qIFJUMjgwMExJQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwcGNpLmMKaW5kZXggYjJmMjMyNy4uMzliMzg0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBwY2kuYwpAQCAtMzEsNyArMzEsNiBAQAogCVN1cHBvcnRlZCBjaGlwc2V0czogUlQyODAwRSAmIFJUMjgwMEVELgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jcmMtY2NpdHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNTEsNyArNTAsNyBAQAogLyoKICAqIEFsbG93IGhhcmR3YXJlIGVuY3J5cHRpb24gdG8gYmUgZGlzYWJsZWQuCiAgKi8KLXN0YXRpYyBpbnQgbW9kcGFyYW1fbm9od2NyeXB0ID0gMTsKK3N0YXRpYyBpbnQgbW9kcGFyYW1fbm9od2NyeXB0ID0gMDsKIG1vZHVsZV9wYXJhbV9uYW1lZChub2h3Y3J5cHQsIG1vZHBhcmFtX25vaHdjcnlwdCwgYm9vbCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKG5vaHdjcnlwdCwgIkRpc2FibGUgaGFyZHdhcmUgZW5jcnlwdGlvbi4iKTsKIApAQCAtMTM5LDggKzEzOCwxOCBAQAogCWVlcHJvbS5kYXRhID0gcnQyeDAwZGV2OwogCWVlcHJvbS5yZWdpc3Rlcl9yZWFkID0gcnQyODAwcGNpX2VlcHJvbXJlZ2lzdGVyX3JlYWQ7CiAJZWVwcm9tLnJlZ2lzdGVyX3dyaXRlID0gcnQyODAwcGNpX2VlcHJvbXJlZ2lzdGVyX3dyaXRlOwotCWVlcHJvbS53aWR0aCA9ICFydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBFMlBST01fQ1NSX1RZUEUpID8KLQkgICAgUENJX0VFUFJPTV9XSURUSF85M0M0NiA6IFBDSV9FRVBST01fV0lEVEhfOTNDNjY7CisJc3dpdGNoIChydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBFMlBST01fQ1NSX1RZUEUpKQorCXsKKwljYXNlIDA6CisJCWVlcHJvbS53aWR0aCA9IFBDSV9FRVBST01fV0lEVEhfOTNDNDY7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZWVwcm9tLndpZHRoID0gUENJX0VFUFJPTV9XSURUSF85M0M2NjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZWVwcm9tLndpZHRoID0gUENJX0VFUFJPTV9XSURUSF85M0M4NjsKKwkJYnJlYWs7CisJfQogCWVlcHJvbS5yZWdfZGF0YV9pbiA9IDA7CiAJZWVwcm9tLnJlZ19kYXRhX291dCA9IDA7CiAJZWVwcm9tLnJlZ19kYXRhX2Nsb2NrID0gMDsKQEAgLTE4Miw4MiArMTkxLDE0IEBACiAJcmV0dXJuIEZJUk1XQVJFX1JUMjg2MDsKIH0KIAotc3RhdGljIGludCBydDI4MDBwY2lfY2hlY2tfZmlybXdhcmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKK3N0YXRpYyBpbnQgcnQyODAwcGNpX3dyaXRlX2Zpcm13YXJlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkJICAgIGNvbnN0IHU4ICpkYXRhLCBjb25zdCBzaXplX3QgbGVuKQogewotCXUxNiBmd19jcmM7Ci0JdTE2IGNyYzsKLQotCS8qCi0JICogT25seSBzdXBwb3J0IDhrYiBmaXJtd2FyZSBmaWxlcy4KLQkgKi8KLQlpZiAobGVuICE9IDgxOTIpCi0JCXJldHVybiBGV19CQURfTEVOR1RIOwotCi0JLyoKLQkgKiBUaGUgbGFzdCAyIGJ5dGVzIGluIHRoZSBmaXJtd2FyZSBhcnJheSBhcmUgdGhlIGNyYyBjaGVja3N1bSBpdHNlbGYsCi0JICogdGhpcyBtZWFucyB0aGF0IHdlIHNob3VsZCBuZXZlciBwYXNzIHRob3NlIDIgYnl0ZXMgdG8gdGhlIGNyYwotCSAqIGFsZ29yaXRobS4KLQkgKi8KLQlmd19jcmMgPSAoZGF0YVtsZW4gLSAyXSA8PCA4IHwgZGF0YVtsZW4gLSAxXSk7Ci0KLQkvKgotCSAqIFVzZSB0aGUgY3JjIGNjaXR0IGFsZ29yaXRobS4KLQkgKiBUaGlzIHdpbGwgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBsZWdhY3kgZHJpdmVyIHdoaWNoCi0JICogdXNlZCBiaXQgb3JkZXJpbmcgcmV2ZXJzaW9uIG9uIHRoZSBib3RoIHRoZSBmaXJtd2FyZSBieXRlcwotCSAqIGJlZm9yZSBpbnB1dCBpbnB1dCBhcyB3ZWxsIGFzIG9uIHRoZSBmaW5hbCBvdXRwdXQuCi0JICogT2J2aW91c2x5IHVzaW5nIGNyYyBjY2l0dCBkaXJlY3RseSBpcyBtdWNoIG1vcmUgZWZmaWNpZW50LgotCSAqLwotCWNyYyA9IGNyY19jY2l0dCh+MCwgZGF0YSwgbGVuIC0gMik7Ci0KLQkvKgotCSAqIFRoZXJlIGlzIGEgc21hbGwgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjcmMtaXR1LXQgKyBiaXRyZXYgYW5kCi0JICogdGhlIGNyYy1jY2l0dCBjcmMgY2FsY3VsYXRpb24uIEluIHRoZSBsYXR0ZXIgbWV0aG9kIHRoZSAyIGJ5dGVzCi0JICogd2lsbCBiZSBzd2FwcGVkLCB1c2Ugc3dhYjE2IHRvIGNvbnZlcnQgdGhlIGNyYyB0byB0aGUgY29ycmVjdAotCSAqIHZhbHVlLgotCSAqLwotCWNyYyA9IHN3YWIxNihjcmMpOwotCi0JcmV0dXJuIChmd19jcmMgPT0gY3JjKSA/IEZXX09LIDogRldfQkFEX0NSQzsKLX0KLQotc3RhdGljIGludCBydDI4MDBwY2lfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCSAgIGNvbnN0IHU4ICpkYXRhLCBjb25zdCBzaXplX3QgbGVuKQotewotCXVuc2lnbmVkIGludCBpOwogCXUzMiByZWc7CiAKLQkvKgotCSAqIFdhaXQgZm9yIHN0YWJsZSBoYXJkd2FyZS4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgUkVHSVNURVJfQlVTWV9DT1VOVDsgaSsrKSB7Ci0JCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX0NTUjAsICZyZWcpOwotCQlpZiAocmVnICYmIHJlZyAhPSB+MCkKLQkJCWJyZWFrOwotCQltc2xlZXAoMSk7Ci0JfQotCi0JaWYgKGkgPT0gUkVHSVNURVJfQlVTWV9DT1VOVCkgewotCQlFUlJPUihydDJ4MDBkZXYsICJVbnN0YWJsZSBoYXJkd2FyZS5cbiIpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBXUl9QSU5fQ0ZHLCAweDAwMDAwMDAyKTsKIAlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBBVVRPV0FLRVVQX0NGRywgMHgwMDAwMDAwMCk7CiAKIAkvKgotCSAqIERpc2FibGUgRE1BLCB3aWxsIGJlIHJlZW5hYmxlZCBsYXRlciB3aGVuIGVuYWJsaW5nCi0JICogdGhlIHJhZGlvLgotCSAqLwotCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgV1BETUFfR0xPX0NGRywgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFdQRE1BX0dMT19DRkdfRU5BQkxFX1RYX0RNQSwgMCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFdQRE1BX0dMT19DRkdfVFhfRE1BX0JVU1ksIDApOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBXUERNQV9HTE9fQ0ZHX0VOQUJMRV9SWF9ETUEsIDApOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBXUERNQV9HTE9fQ0ZHX1JYX0RNQV9CVVNZLCAwKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgV1BETUFfR0xPX0NGR19UWF9XUklURUJBQ0tfRE9ORSwgMSk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgV1BETUFfR0xPX0NGRywgcmVnKTsKLQotCS8qCiAJICogZW5hYmxlIEhvc3QgcHJvZ3JhbSByYW0gd3JpdGUgc2VsZWN0aW9uCiAJICovCiAJcmVnID0gMDsKQEAgLTI2OCwzNCArMjA5LDExIEBACiAJICogV3JpdGUgZmlybXdhcmUgdG8gZGV2aWNlLgogCSAqLwogCXJ0MjgwMF9yZWdpc3Rlcl9tdWx0aXdyaXRlKHJ0MngwMGRldiwgRklSTVdBUkVfSU1BR0VfQkFTRSwKLQkJCQkgICAgICBkYXRhLCBsZW4pOworCQkJCSAgIGRhdGEsIGxlbik7CiAKIAlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQQkZfU1lTX0NUUkwsIDB4MDAwMDApOwogCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBCRl9TWVNfQ1RSTCwgMHgwMDAwMSk7CiAKLQkvKgotCSAqIFdhaXQgZm9yIGRldmljZSB0byBzdGFiaWxpemUuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IFJFR0lTVEVSX0JVU1lfQ09VTlQ7IGkrKykgewotCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFBCRl9TWVNfQ1RSTCwgJnJlZyk7Ci0JCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBQQkZfU1lTX0NUUkxfUkVBRFkpKQotCQkJYnJlYWs7Ci0JCW1zbGVlcCgxKTsKLQl9Ci0KLQlpZiAoaSA9PSBSRUdJU1RFUl9CVVNZX0NPVU5UKSB7Ci0JCUVSUk9SKHJ0MngwMGRldiwgIlBCRiBzeXN0ZW0gcmVnaXN0ZXIgbm90IHJlYWR5LlxuIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JLyoKLQkgKiBEaXNhYmxlIGludGVycnVwdHMKLQkgKi8KLQlydDJ4MDBkZXYtPm9wcy0+bGliLT5zZXRfZGV2aWNlX3N0YXRlKHJ0MngwMGRldiwgU1RBVEVfUkFESU9fSVJRX09GRik7Ci0KLQkvKgotCSAqIEluaXRpYWxpemUgQkJQIFIvVyBhY2Nlc3MgYWdlbnQKLQkgKi8KIAlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIMk1fQkJQX0FHRU5ULCAwKTsKIAlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIMk1fTUFJTEJPWF9DU1IsIDApOwogCkBAIC00MTIsNyArMzMwLDggQEAKIHN0YXRpYyB2b2lkIHJ0MjgwMHBjaV90b2dnbGVfaXJxKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkJIGVudW0gZGV2X3N0YXRlIHN0YXRlKQogewotCWludCBtYXNrID0gKHN0YXRlID09IFNUQVRFX1JBRElPX0lSUV9PTik7CisJaW50IG1hc2sgPSAoc3RhdGUgPT0gU1RBVEVfUkFESU9fSVJRX09OKSB8fAorCQkgICAoc3RhdGUgPT0gU1RBVEVfUkFESU9fSVJRX09OX0lTUik7CiAJdTMyIHJlZzsKIAogCS8qCkBAIC00NDYsNiArMzY1LDM4IEBACiAJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSU5UX01BU0tfQ1NSLCByZWcpOwogfQogCitzdGF0aWMgaW50IHJ0MjgwMHBjaV9pbml0X3JlZ2lzdGVycyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXUzMiByZWc7CisKKwkvKgorCSAqIFJlc2V0IERNQSBpbmRleGVzCisJICovCisJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBXUERNQV9SU1RfSURYLCAmcmVnKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgV1BETUFfUlNUX0lEWF9EVFhfSURYMCwgMSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFdQRE1BX1JTVF9JRFhfRFRYX0lEWDEsIDEpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBXUERNQV9SU1RfSURYX0RUWF9JRFgyLCAxKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgV1BETUFfUlNUX0lEWF9EVFhfSURYMywgMSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFdQRE1BX1JTVF9JRFhfRFRYX0lEWDQsIDEpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBXUERNQV9SU1RfSURYX0RUWF9JRFg1LCAxKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgV1BETUFfUlNUX0lEWF9EUlhfSURYMCwgMSk7CisJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgV1BETUFfUlNUX0lEWCwgcmVnKTsKKworCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBCRl9TWVNfQ1RSTCwgMHgwMDAwMGUxZik7CisJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEJGX1NZU19DVFJMLCAweDAwMDAwZTAwKTsKKworCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBXUl9QSU5fQ0ZHLCAweDAwMDAwMDAzKTsKKworCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCAmcmVnKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX1NZU19DVFJMX1JFU0VUX0NTUiwgMSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19TWVNfQ1RSTF9SRVNFVF9CQlAsIDEpOworCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgcmVnKTsKKworCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgMHgwMDAwMDAwMCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBydDI4MDBwY2lfZW5hYmxlX3JhZGlvKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CiAJdTMyIHJlZzsKQEAgLTQ2NSw3ICs0MTYsNyBAQAogCS8qCiAJICogU2VuZCBzaWduYWwgdG8gZmlybXdhcmUgZHVyaW5nIGJvb3QgdGltZS4KIAkgKi8KLQlydDI4MDBfbWN1X3JlcXVlc3QocnQyeDAwZGV2LCBNQ1VfQk9PVF9TSUdOQUwsIDB4ZmYsIDAsIDApOworCXJ0MjgwMF9tY3VfcmVxdWVzdChydDJ4MDBkZXYsIE1DVV9CT09UX1NJR05BTCwgMCwgMCwgMCk7CiAKIAkvKgogCSAqIEVuYWJsZSBSWC4KQEAgLTU4OSw3ICs1NDAsOSBAQAogCQlydDI4MDBwY2lfdG9nZ2xlX3J4KHJ0MngwMGRldiwgc3RhdGUpOwogCQlicmVhazsKIAljYXNlIFNUQVRFX1JBRElPX0lSUV9PTjoKKwljYXNlIFNUQVRFX1JBRElPX0lSUV9PTl9JU1I6CiAJY2FzZSBTVEFURV9SQURJT19JUlFfT0ZGOgorCWNhc2UgU1RBVEVfUkFESU9fSVJRX09GRl9JU1I6CiAJCXJ0MjgwMHBjaV90b2dnbGVfaXJxKHJ0MngwMGRldiwgc3RhdGUpOwogCQlicmVhazsKIAljYXNlIFNUQVRFX0RFRVBfU0xFRVA6CkBAIC02MTMsMTggKzU2NiwxMiBAQAogLyoKICAqIFRYIGRlc2NyaXB0b3IgaW5pdGlhbGl6YXRpb24KICAqLwotc3RhdGljIGludCBydDI4MDBwY2lfd3JpdGVfdHhfZGF0YShzdHJ1Y3QgcXVldWVfZW50cnkqIGVudHJ5LAotCQkJCSAgIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYykKK3N0YXRpYyB2b2lkIHJ0MjgwMHBjaV93cml0ZV90eF9kYXRhKHN0cnVjdCBxdWV1ZV9lbnRyeSogZW50cnksCisJCQkJICAgIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYykKIHsKLQlpbnQgcmV0OworCV9fbGUzMiAqdHh3aSA9IChfX2xlMzIgKikgZW50cnktPnNrYi0+ZGF0YTsKIAotCXJldCA9IHJ0MngwMHBjaV93cml0ZV90eF9kYXRhKGVudHJ5LCB0eGRlc2MpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlydDI4MDBfd3JpdGVfdHh3aShlbnRyeS0+c2tiLCB0eGRlc2MpOwotCi0JcmV0dXJuIDA7CisJcnQyODAwX3dyaXRlX3R4d2kodHh3aSwgdHhkZXNjKTsKIH0KIAogCkBAIC02ODQsNDkgKzYzMSw2IEBACiAvKgogICogVFggZGF0YSBpbml0aWFsaXphdGlvbgogICovCi1zdGF0aWMgdm9pZCBydDI4MDBwY2lfd3JpdGVfYmVhY29uKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCi0JCQkJICAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjKQotewotCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBlbnRyeS0+cXVldWUtPnJ0MngwMGRldjsKLQl1bnNpZ25lZCBpbnQgYmVhY29uX2Jhc2U7Ci0JdTMyIHJlZzsKLQotCS8qCi0JICogRGlzYWJsZSBiZWFjb25pbmcgd2hpbGUgd2UgYXJlIHJlbG9hZGluZyB0aGUgYmVhY29uIGRhdGEsCi0JICogb3RoZXJ3aXNlIHdlIG1pZ2h0IGJlIHNlbmRpbmcgb3V0IGludmFsaWQgZGF0YS4KLQkgKi8KLQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEJDTl9USU1FX0NGRywgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJDTl9USU1FX0NGR19CRUFDT05fR0VOLCAwKTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBCQ05fVElNRV9DRkcsIHJlZyk7Ci0KLQkvKgotCSAqIEFkZCB0aGUgVFhXSSBmb3IgdGhlIGJlYWNvbiB0byB0aGUgc2tiLgotCSAqLwotCXJ0MjgwMF93cml0ZV90eHdpKGVudHJ5LT5za2IsIHR4ZGVzYyk7Ci0Jc2tiX3B1c2goZW50cnktPnNrYiwgVFhXSV9ERVNDX1NJWkUpOwotCi0JLyoKLQkgKiBXcml0ZSBlbnRpcmUgYmVhY29uIHdpdGggVFhXSSB0byByZWdpc3Rlci4KLQkgKi8KLQliZWFjb25fYmFzZSA9IEhXX0JFQUNPTl9PRkZTRVQoZW50cnktPmVudHJ5X2lkeCk7Ci0JcnQyODAwX3JlZ2lzdGVyX211bHRpd3JpdGUocnQyeDAwZGV2LCBiZWFjb25fYmFzZSwKLQkJCQkgICBlbnRyeS0+c2tiLT5kYXRhLCBlbnRyeS0+c2tiLT5sZW4pOwotCi0JLyoKLQkgKiBFbmFibGUgYmVhY29uaW5nIGFnYWluLgotCSAqLwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05fVElNRV9DRkdfVFNGX1RJQ0tJTkcsIDEpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05fVElNRV9DRkdfVEJUVF9FTkFCTEUsIDEpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05fVElNRV9DRkdfQkVBQ09OX0dFTiwgMSk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQkNOX1RJTUVfQ0ZHLCByZWcpOwotCi0JLyoKLQkgKiBDbGVhbiB1cCBiZWFjb24gc2tiLgotCSAqLwotCWRldl9rZnJlZV9za2JfYW55KGVudHJ5LT5za2IpOwotCWVudHJ5LT5za2IgPSBOVUxMOwotfQotCiBzdGF0aWMgdm9pZCBydDI4MDBwY2lfa2lja190eF9xdWV1ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJCSAgICBjb25zdCBlbnVtIGRhdGFfcXVldWVfcWlkIHF1ZXVlX2lkeCkKIHsKQEAgLTgxMiw3ICs3MTYsNyBAQAogCS8qCiAJICogUHJvY2VzcyB0aGUgUlhXSSBzdHJ1Y3R1cmUgdGhhdCBpcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4KIAkgKi8KLQlydDI4MDBfcHJvY2Vzc19yeHdpKGVudHJ5LT5za2IsIHJ4ZGVzYyk7CisJcnQyODAwX3Byb2Nlc3Nfcnh3aShlbnRyeSwgcnhkZXNjKTsKIAogCS8qCiAJICogU2V0IFJYIElEWCBpbiByZWdpc3RlciB0byBpbmZvcm0gaGFyZHdhcmUgdGhhdCB3ZSBoYXZlIGhhbmRsZWQKQEAgLTgzMiwyOSArNzM2LDI0IEBACiAJc3RydWN0IHR4ZG9uZV9lbnRyeV9kZXNjIHR4ZGVzYzsKIAl1MzIgd29yZDsKIAl1MzIgcmVnOwotCXUzMiBvbGRfcmVnOwogCWludCB3Y2lkLCBhY2ssIHBpZCwgdHhfd2NpZCwgdHhfYWNrLCB0eF9waWQ7CiAJdTE2IG1jcywgcmVhbF9tY3M7CisJaW50IGk7CiAKIAkvKgotCSAqIER1cmluZyBlYWNoIGxvb3Agd2Ugd2lsbCBjb21wYXJlIHRoZSBmcmVzaGx5IHJlYWQKLQkgKiBUWF9TVEFfRklGTyByZWdpc3RlciB2YWx1ZSB3aXRoIHRoZSB2YWx1ZSByZWFkIGZyb20KLQkgKiB0aGUgcHJldmlvdXMgbG9vcC4gSWYgdGhlIDIgdmFsdWVzIGFyZSBlcXVhbCB0aGVuCi0JICogd2Ugc2hvdWxkIHN0b3AgcHJvY2Vzc2luZyBiZWNhdXNlIHRoZSBjaGFuY2UgaXQKLQkgKiBxdWl0ZSBiaWcgdGhhdCB0aGUgZGV2aWNlIGhhcyBiZWVuIHVucGx1Z2dlZCBhbmQKLQkgKiB3ZSByaXNrIGdvaW5nIGludG8gYW4gZW5kbGVzcyBsb29wLgorCSAqIFRYX1NUQV9GSUZPIGlzIGEgc3RhY2sgb2YgWCBlbnRyaWVzLCBoZW5jZSByZWFkIFRYX1NUQV9GSUZPCisJICogYXQgbW9zdCBYIHRpbWVzIGFuZCBhbHNvIHN0b3AgcHJvY2Vzc2luZyBvbmNlIHRoZSBUWF9TVEFfRklGT19WQUxJRAorCSAqIGZsYWcgaXMgbm90IHNldCBhbnltb3JlLgorCSAqCisJICogVGhlIGxlZ2FjeSBkcml2ZXJzIHVzZSBYPVRYX1JJTkdfU0laRSBidXQgc3RhdGUgaW4gYSBjb21tZW50CisJICogdGhhdCB0aGUgVFhfU1RBX0ZJRk8gc3RhY2sgaGFzIGEgc2l6ZSBvZiAxNi4gV2Ugc3RpY2sgdG8gb3VyCisJICogdHggcmluZyBzaXplIGZvciBub3cuCiAJICovCi0Jb2xkX3JlZyA9IDA7Ci0KLQl3aGlsZSAoMSkgeworCWZvciAoaSA9IDA7IGkgPCBUWF9FTlRSSUVTOyBpKyspIHsKIAkJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWF9TVEFfRklGTywgJnJlZyk7CiAJCWlmICghcnQyeDAwX2dldF9maWVsZDMyKHJlZywgVFhfU1RBX0ZJRk9fVkFMSUQpKQogCQkJYnJlYWs7CiAKLQkJaWYgKG9sZF9yZWcgPT0gcmVnKQotCQkJYnJlYWs7Ci0JCW9sZF9yZWcgPSByZWc7Ci0KIAkJd2NpZCAgICA9IHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIFRYX1NUQV9GSUZPX1dDSUQpOwogCQlhY2sgICAgID0gcnQyeDAwX2dldF9maWVsZDMyKHJlZywgVFhfU1RBX0ZJRk9fVFhfQUNLX1JFUVVJUkVEKTsKIAkJcGlkICAgICA9IHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIFRYX1NUQV9GSUZPX1BJRF9UWVBFKTsKQEAgLTg4MCw4ICs3NzksNyBAQAogCiAJCS8qIENoZWNrIGlmIHdlIGdvdCBhIG1hdGNoIGJ5IGxvb2tpbmcgYXQgV0NJRC9BQ0svUElECiAJCSAqIGZpZWxkcyAqLwotCQl0eHdpID0gKF9fbGUzMiAqKShlbnRyeS0+c2tiLT5kYXRhIC0KLQkJCQkgIHJ0MngwMGRldi0+b3BzLT5leHRyYV90eF9oZWFkcm9vbSk7CisJCXR4d2kgPSAoX19sZTMyICopIGVudHJ5LT5za2ItPmRhdGE7CiAKIAkJcnQyeDAwX2Rlc2NfcmVhZCh0eHdpLCAxLCAmd29yZCk7CiAJCXR4X3djaWQgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZCwgVFhXSV9XMV9XSVJFTEVTU19DTElfSUQpOwpAQCAtOTIzLDggKzgyMSwxMiBAQAogCQkJdHhkZXNjLnJldHJ5ID0gNzsKIAkJfQogCi0JCV9fc2V0X2JpdChUWERPTkVfRkFMTEJBQ0ssICZ0eGRlc2MuZmxhZ3MpOwotCisJCS8qCisJCSAqIHRoZSBmcmFtZSB3YXMgcmV0cmllZCBhdCBsZWFzdCBvbmNlCisJCSAqIC0+IGh3IHVzZWQgZmFsbGJhY2sgcmF0ZXMKKwkJICovCisJCWlmICh0eGRlc2MucmV0cnkpCisJCQlfX3NldF9iaXQoVFhET05FX0ZBTExCQUNLLCAmdHhkZXNjLmZsYWdzKTsKIAogCQlydDJ4MDBsaWJfdHhkb25lKGVudHJ5LCAmdHhkZXNjKTsKIAl9CkBAIC05MzgsNiArODQwLDQ4IEBACiAJcnQyODAwX2NvbmZpZyhydDJ4MDBkZXYsICZsaWJjb25mLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOwogfQogCitzdGF0aWMgaXJxcmV0dXJuX3QgcnQyODAwcGNpX2ludGVycnVwdF90aHJlYWQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQoreworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBkZXZfaW5zdGFuY2U7CisJdTMyIHJlZyA9IHJ0MngwMGRldi0+aXJxdmFsdWVbMF07CisKKwkvKgorCSAqIDEgLSBQcmUgVEJUVCBpbnRlcnJ1cHQuCisJICovCisJaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIElOVF9TT1VSQ0VfQ1NSX1BSRV9UQlRUKSkKKwkJcnQyeDAwbGliX3ByZXRidHQocnQyeDAwZGV2KTsKKworCS8qCisJICogMiAtIEJlYWNvbmRvbmUgaW50ZXJydXB0LgorCSAqLworCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBJTlRfU09VUkNFX0NTUl9UQlRUKSkKKwkJcnQyeDAwbGliX2JlYWNvbmRvbmUocnQyeDAwZGV2KTsKKworCS8qCisJICogMyAtIFJ4IHJpbmcgZG9uZSBpbnRlcnJ1cHQuCisJICovCisJaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIElOVF9TT1VSQ0VfQ1NSX1JYX0RPTkUpKQorCQlydDJ4MDBwY2lfcnhkb25lKHJ0MngwMGRldik7CisKKwkvKgorCSAqIDQgLSBUeCBkb25lIGludGVycnVwdC4KKwkgKi8KKwlpZiAocnQyeDAwX2dldF9maWVsZDMyKHJlZywgSU5UX1NPVVJDRV9DU1JfVFhfRklGT19TVEFUVVMpKQorCQlydDI4MDBwY2lfdHhkb25lKHJ0MngwMGRldik7CisKKwkvKgorCSAqIDUgLSBBdXRvIHdha2V1cCBpbnRlcnJ1cHQuCisJICovCisJaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIElOVF9TT1VSQ0VfQ1NSX0FVVE9fV0FLRVVQKSkKKwkJcnQyODAwcGNpX3dha2V1cChydDJ4MDBkZXYpOworCisJLyogRW5hYmxlIGludGVycnVwdHMgYWdhaW4uICovCisJcnQyeDAwZGV2LT5vcHMtPmxpYi0+c2V0X2RldmljZV9zdGF0ZShydDJ4MDBkZXYsCisJCQkJCSAgICAgIFNUQVRFX1JBRElPX0lSUV9PTl9JU1IpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCiBzdGF0aWMgaXJxcmV0dXJuX3QgcnQyODAwcGNpX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpCiB7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGRldl9pbnN0YW5jZTsKQEAgLTk1MywxOSArODk3LDE1IEBACiAJaWYgKCF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfRU5BQkxFRF9SQURJTywgJnJ0MngwMGRldi0+ZmxhZ3MpKQogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKLQkvKgotCSAqIDEgLSBSeCByaW5nIGRvbmUgaW50ZXJydXB0LgotCSAqLwotCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBJTlRfU09VUkNFX0NTUl9SWF9ET05FKSkKLQkJcnQyeDAwcGNpX3J4ZG9uZShydDJ4MDBkZXYpOworCS8qIFN0b3JlIGlycXZhbHVlIGZvciB1c2UgaW4gdGhlIGludGVycnVwdCB0aHJlYWQuICovCisJcnQyeDAwZGV2LT5pcnF2YWx1ZVswXSA9IHJlZzsKIAotCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBJTlRfU09VUkNFX0NTUl9UWF9GSUZPX1NUQVRVUykpCi0JCXJ0MjgwMHBjaV90eGRvbmUocnQyeDAwZGV2KTsKKwkvKiBEaXNhYmxlIGludGVycnVwdHMsIHdpbGwgYmUgZW5hYmxlZCBhZ2FpbiBpbiB0aGUgaW50ZXJydXB0IHRocmVhZC4gKi8KKwlydDJ4MDBkZXYtPm9wcy0+bGliLT5zZXRfZGV2aWNlX3N0YXRlKHJ0MngwMGRldiwKKwkJCQkJICAgICAgU1RBVEVfUkFESU9fSVJRX09GRl9JU1IpOwogCi0JaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIElOVF9TT1VSQ0VfQ1NSX0FVVE9fV0FLRVVQKSkKLQkJcnQyODAwcGNpX3dha2V1cChydDJ4MDBkZXYpOwogCi0JcmV0dXJuIElSUV9IQU5ETEVEOworCXJldHVybiBJUlFfV0FLRV9USFJFQUQ7CiB9CiAKIC8qCkBAIC05ODYsMjQgKzkyNiwxMCBAQAogCXJldHVybiBydDI4MDBfdmFsaWRhdGVfZWVwcm9tKHJ0MngwMGRldik7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnQyODAwX29wcyBydDI4MDBwY2lfcnQyODAwX29wcyA9IHsKLQkucmVnaXN0ZXJfcmVhZAkJPSBydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZCwKLQkucmVnaXN0ZXJfcmVhZF9sb2NrCT0gcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQsIC8qIHNhbWUgZm9yIFBDSSAqLwotCS5yZWdpc3Rlcl93cml0ZQkJPSBydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUsCi0JLnJlZ2lzdGVyX3dyaXRlX2xvY2sJPSBydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUsIC8qIHNhbWUgZm9yIFBDSSAqLwotCi0JLnJlZ2lzdGVyX211bHRpcmVhZAk9IHJ0MngwMHBjaV9yZWdpc3Rlcl9tdWx0aXJlYWQsCi0JLnJlZ2lzdGVyX211bHRpd3JpdGUJPSBydDJ4MDBwY2lfcmVnaXN0ZXJfbXVsdGl3cml0ZSwKLQotCS5yZWdidXN5X3JlYWQJCT0gcnQyeDAwcGNpX3JlZ2J1c3lfcmVhZCwKLX07Ci0KIHN0YXRpYyBpbnQgcnQyODAwcGNpX3Byb2JlX2h3KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CiAJaW50IHJldHZhbDsKIAotCXJ0MngwMGRldi0+cHJpdiA9ICh2b2lkICopJnJ0MjgwMHBjaV9ydDI4MDBfb3BzOwotCiAJLyoKIAkgKiBBbGxvY2F0ZSBlZXByb20gZGF0YS4KIAkgKi8KQEAgLTEwMzAsNiArOTU2LDEyIEBACiAJX19zZXRfYml0KERSSVZFUl9TVVBQT1JUX0NPTlRST0xfRklMVEVSX1BTUE9MTCwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCiAJLyoKKwkgKiBUaGlzIGRldmljZSBoYXMgYSBwcmUgdGJ0dCBpbnRlcnJ1cHQgYW5kIHRodXMgZmV0Y2hlcworCSAqIGEgbmV3IGJlYWNvbiBkaXJlY3RseSBwcmlvciB0byB0cmFuc21pc3Npb24uCisJICovCisJX19zZXRfYml0KERSSVZFUl9TVVBQT1JUX1BSRV9UQlRUX0lOVEVSUlVQVCwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCisJLyoKIAkgKiBUaGlzIGRldmljZSByZXF1aXJlcyBmaXJtd2FyZS4KIAkgKi8KIAlpZiAoIXJ0MngwMF9pc19zb2MocnQyeDAwZGV2KSkKQEAgLTEwMzgsNiArOTcwLDcgQEAKIAlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfTDJQQUQsICZydDJ4MDBkZXYtPmZsYWdzKTsKIAlpZiAoIW1vZHBhcmFtX25vaHdjcnlwdCkKIAkJX19zZXRfYml0KENPTkZJR19TVVBQT1JUX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+ZmxhZ3MpOworCV9fc2V0X2JpdChEUklWRVJfU1VQUE9SVF9MSU5LX1RVTklORywgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCiAJLyoKIAkgKiBTZXQgdGhlIHJzc2kgb2Zmc2V0LgpAQCAtMTA0NywxMiArOTgwLDQ2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBydDI4MDBwY2lfbWFjODAyMTFfb3BzID0geworCS50eAkJCT0gcnQyeDAwbWFjX3R4LAorCS5zdGFydAkJCT0gcnQyeDAwbWFjX3N0YXJ0LAorCS5zdG9wCQkJPSBydDJ4MDBtYWNfc3RvcCwKKwkuYWRkX2ludGVyZmFjZQkJPSBydDJ4MDBtYWNfYWRkX2ludGVyZmFjZSwKKwkucmVtb3ZlX2ludGVyZmFjZQk9IHJ0MngwMG1hY19yZW1vdmVfaW50ZXJmYWNlLAorCS5jb25maWcJCQk9IHJ0MngwMG1hY19jb25maWcsCisJLmNvbmZpZ3VyZV9maWx0ZXIJPSBydDJ4MDBtYWNfY29uZmlndXJlX2ZpbHRlciwKKwkuc2V0X2tleQkJPSBydDJ4MDBtYWNfc2V0X2tleSwKKwkuc3dfc2Nhbl9zdGFydAkJPSBydDJ4MDBtYWNfc3dfc2Nhbl9zdGFydCwKKwkuc3dfc2Nhbl9jb21wbGV0ZQk9IHJ0MngwMG1hY19zd19zY2FuX2NvbXBsZXRlLAorCS5nZXRfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF9zdGF0cywKKwkuZ2V0X3RraXBfc2VxCQk9IHJ0MjgwMF9nZXRfdGtpcF9zZXEsCisJLnNldF9ydHNfdGhyZXNob2xkCT0gcnQyODAwX3NldF9ydHNfdGhyZXNob2xkLAorCS5ic3NfaW5mb19jaGFuZ2VkCT0gcnQyeDAwbWFjX2Jzc19pbmZvX2NoYW5nZWQsCisJLmNvbmZfdHgJCT0gcnQyODAwX2NvbmZfdHgsCisJLmdldF90c2YJCT0gcnQyODAwX2dldF90c2YsCisJLnJma2lsbF9wb2xsCQk9IHJ0MngwMG1hY19yZmtpbGxfcG9sbCwKKwkuYW1wZHVfYWN0aW9uCQk9IHJ0MjgwMF9hbXBkdV9hY3Rpb24sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0MjgwMF9vcHMgcnQyODAwcGNpX3J0MjgwMF9vcHMgPSB7CisJLnJlZ2lzdGVyX3JlYWQJCT0gcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQsCisJLnJlZ2lzdGVyX3JlYWRfbG9jawk9IHJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkLCAvKiBzYW1lIGZvciBQQ0kgKi8KKwkucmVnaXN0ZXJfd3JpdGUJCT0gcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlLAorCS5yZWdpc3Rlcl93cml0ZV9sb2NrCT0gcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlLCAvKiBzYW1lIGZvciBQQ0kgKi8KKwkucmVnaXN0ZXJfbXVsdGlyZWFkCT0gcnQyeDAwcGNpX3JlZ2lzdGVyX211bHRpcmVhZCwKKwkucmVnaXN0ZXJfbXVsdGl3cml0ZQk9IHJ0MngwMHBjaV9yZWdpc3Rlcl9tdWx0aXdyaXRlLAorCS5yZWdidXN5X3JlYWQJCT0gcnQyeDAwcGNpX3JlZ2J1c3lfcmVhZCwKKwkuZHJ2X3dyaXRlX2Zpcm13YXJlCT0gcnQyODAwcGNpX3dyaXRlX2Zpcm13YXJlLAorCS5kcnZfaW5pdF9yZWdpc3RlcnMJPSBydDI4MDBwY2lfaW5pdF9yZWdpc3RlcnMsCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0MngwMGxpYl9vcHMgcnQyODAwcGNpX3J0MngwMF9vcHMgPSB7CiAJLmlycV9oYW5kbGVyCQk9IHJ0MjgwMHBjaV9pbnRlcnJ1cHQsCisJLmlycV9oYW5kbGVyX3RocmVhZAk9IHJ0MjgwMHBjaV9pbnRlcnJ1cHRfdGhyZWFkLAogCS5wcm9iZV9odwkJPSBydDI4MDBwY2lfcHJvYmVfaHcsCiAJLmdldF9maXJtd2FyZV9uYW1lCT0gcnQyODAwcGNpX2dldF9maXJtd2FyZV9uYW1lLAotCS5jaGVja19maXJtd2FyZQkJPSBydDI4MDBwY2lfY2hlY2tfZmlybXdhcmUsCi0JLmxvYWRfZmlybXdhcmUJCT0gcnQyODAwcGNpX2xvYWRfZmlybXdhcmUsCisJLmNoZWNrX2Zpcm13YXJlCQk9IHJ0MjgwMF9jaGVja19maXJtd2FyZSwKKwkubG9hZF9maXJtd2FyZQkJPSBydDI4MDBfbG9hZF9maXJtd2FyZSwKIAkuaW5pdGlhbGl6ZQkJPSBydDJ4MDBwY2lfaW5pdGlhbGl6ZSwKIAkudW5pbml0aWFsaXplCQk9IHJ0MngwMHBjaV91bmluaXRpYWxpemUsCiAJLmdldF9lbnRyeV9zdGF0ZQk9IHJ0MjgwMHBjaV9nZXRfZW50cnlfc3RhdGUsCkBAIC0xMDY0LDcgKzEwMzEsNyBAQAogCS5saW5rX3R1bmVyCQk9IHJ0MjgwMF9saW5rX3R1bmVyLAogCS53cml0ZV90eF9kZXNjCQk9IHJ0MjgwMHBjaV93cml0ZV90eF9kZXNjLAogCS53cml0ZV90eF9kYXRhCQk9IHJ0MjgwMHBjaV93cml0ZV90eF9kYXRhLAotCS53cml0ZV9iZWFjb24JCT0gcnQyODAwcGNpX3dyaXRlX2JlYWNvbiwKKwkud3JpdGVfYmVhY29uCQk9IHJ0MjgwMF93cml0ZV9iZWFjb24sCiAJLmtpY2tfdHhfcXVldWUJCT0gcnQyODAwcGNpX2tpY2tfdHhfcXVldWUsCiAJLmtpbGxfdHhfcXVldWUJCT0gcnQyODAwcGNpX2tpbGxfdHhfcXVldWUsCiAJLmZpbGxfcnhkb25lCQk9IHJ0MjgwMHBjaV9maWxsX3J4ZG9uZSwKQEAgLTExMTAsNyArMTA3Nyw4IEBACiAJLnR4CQkJPSAmcnQyODAwcGNpX3F1ZXVlX3R4LAogCS5iY24JCQk9ICZydDI4MDBwY2lfcXVldWVfYmNuLAogCS5saWIJCQk9ICZydDI4MDBwY2lfcnQyeDAwX29wcywKLQkuaHcJCQk9ICZydDI4MDBfbWFjODAyMTFfb3BzLAorCS5kcnYJCQk9ICZydDI4MDBwY2lfcnQyODAwX29wcywKKwkuaHcJCQk9ICZydDI4MDBwY2lfbWFjODAyMTFfb3BzLAogI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX0RFQlVHRlMKIAkuZGVidWdmcwkJPSAmcnQyODAwX3J0MngwMGRlYnVnLAogI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX0RFQlVHRlMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBwY2kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBwY2kuaAppbmRleCBhZmM4ZTdkLi41YThkZGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwcGNpLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHBjaS5oCkBAIC0zNSwyNSArMzUsNiBAQAogI2RlZmluZSBSVDI4MDBQQ0lfSAogCiAvKgotICogUENJIHJlZ2lzdGVycy4KLSAqLwotCi0vKgotICogRTJQUk9NX0NTUjogRUVQUk9NIGNvbnRyb2wgcmVnaXN0ZXIuCi0gKiBSRUxPQUQ6IFdyaXRlIDEgdG8gcmVsb2FkIGVlcHJvbSBjb250ZW50LgotICogVFlQRTogMDogOTNjNDYsIDE6OTNjNjYuCi0gKiBMT0FEX1NUQVRVUzogMTpsb2FkaW5nLCAwOmRvbmUuCi0gKi8KLSNkZWZpbmUgRTJQUk9NX0NTUgkJCTB4MDAwNAotI2RlZmluZSBFMlBST01fQ1NSX0RBVEFfQ0xPQ0sJCUZJRUxEMzIoMHgwMDAwMDAwMSkKLSNkZWZpbmUgRTJQUk9NX0NTUl9DSElQX1NFTEVDVAkJRklFTEQzMigweDAwMDAwMDAyKQotI2RlZmluZSBFMlBST01fQ1NSX0RBVEFfSU4JCUZJRUxEMzIoMHgwMDAwMDAwNCkKLSNkZWZpbmUgRTJQUk9NX0NTUl9EQVRBX09VVAkJRklFTEQzMigweDAwMDAwMDA4KQotI2RlZmluZSBFMlBST01fQ1NSX1RZUEUJCQlGSUVMRDMyKDB4MDAwMDAwMzApCi0jZGVmaW5lIEUyUFJPTV9DU1JfTE9BRF9TVEFUVVMJCUZJRUxEMzIoMHgwMDAwMDA0MCkKLSNkZWZpbmUgRTJQUk9NX0NTUl9SRUxPQUQJCUZJRUxEMzIoMHgwMDAwMDA4MCkKLQotLyoKICAqIFF1ZXVlIHJlZ2lzdGVyIG9mZnNldCBtYWNyb3MKICAqLwogI2RlZmluZSBUWF9RVUVVRV9SRUdfT0ZGU0VUCQkweDEwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMKaW5kZXggMGY4Yjg0Yi4uNWEyZGZlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuYwpAQCAtMjgsNyArMjgsNiBAQAogCVN1cHBvcnRlZCBjaGlwc2V0czogUlQyODAwVS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY3JjLWNjaXR0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTQ1LDcgKzQ0LDcgQEAKIC8qCiAgKiBBbGxvdyBoYXJkd2FyZSBlbmNyeXB0aW9uIHRvIGJlIGRpc2FibGVkLgogICovCi1zdGF0aWMgaW50IG1vZHBhcmFtX25vaHdjcnlwdCA9IDE7CitzdGF0aWMgaW50IG1vZHBhcmFtX25vaHdjcnlwdCA9IDA7CiBtb2R1bGVfcGFyYW1fbmFtZWQobm9od2NyeXB0LCBtb2RwYXJhbV9ub2h3Y3J5cHQsIGJvb2wsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhub2h3Y3J5cHQsICJEaXNhYmxlIGhhcmR3YXJlIGVuY3J5cHRpb24uIik7CiAKQEAgLTU3LDg0ICs1NiwxMCBAQAogCXJldHVybiBGSVJNV0FSRV9SVDI4NzA7CiB9CiAKLXN0YXRpYyBib29sIHJ0MjgwMHVzYl9jaGVja19jcmMoY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pCi17Ci0JdTE2IGZ3X2NyYzsKLQl1MTYgY3JjOwotCi0JLyoKLQkgKiBUaGUgbGFzdCAyIGJ5dGVzIGluIHRoZSBmaXJtd2FyZSBhcnJheSBhcmUgdGhlIGNyYyBjaGVja3N1bSBpdHNlbGYsCi0JICogdGhpcyBtZWFucyB0aGF0IHdlIHNob3VsZCBuZXZlciBwYXNzIHRob3NlIDIgYnl0ZXMgdG8gdGhlIGNyYwotCSAqIGFsZ29yaXRobS4KLQkgKi8KLQlmd19jcmMgPSAoZGF0YVtsZW4gLSAyXSA8PCA4IHwgZGF0YVtsZW4gLSAxXSk7Ci0KLQkvKgotCSAqIFVzZSB0aGUgY3JjIGNjaXR0IGFsZ29yaXRobS4KLQkgKiBUaGlzIHdpbGwgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBsZWdhY3kgZHJpdmVyIHdoaWNoCi0JICogdXNlZCBiaXQgb3JkZXJpbmcgcmV2ZXJzaW9uIG9uIHRoZSBib3RoIHRoZSBmaXJtd2FyZSBieXRlcwotCSAqIGJlZm9yZSBpbnB1dCBpbnB1dCBhcyB3ZWxsIGFzIG9uIHRoZSBmaW5hbCBvdXRwdXQuCi0JICogT2J2aW91c2x5IHVzaW5nIGNyYyBjY2l0dCBkaXJlY3RseSBpcyBtdWNoIG1vcmUgZWZmaWNpZW50LgotCSAqLwotCWNyYyA9IGNyY19jY2l0dCh+MCwgZGF0YSwgbGVuIC0gMik7Ci0KLQkvKgotCSAqIFRoZXJlIGlzIGEgc21hbGwgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjcmMtaXR1LXQgKyBiaXRyZXYgYW5kCi0JICogdGhlIGNyYy1jY2l0dCBjcmMgY2FsY3VsYXRpb24uIEluIHRoZSBsYXR0ZXIgbWV0aG9kIHRoZSAyIGJ5dGVzCi0JICogd2lsbCBiZSBzd2FwcGVkLCB1c2Ugc3dhYjE2IHRvIGNvbnZlcnQgdGhlIGNyYyB0byB0aGUgY29ycmVjdAotCSAqIHZhbHVlLgotCSAqLwotCWNyYyA9IHN3YWIxNihjcmMpOwotCi0JcmV0dXJuIGZ3X2NyYyA9PSBjcmM7Ci19Ci0KLXN0YXRpYyBpbnQgcnQyODAwdXNiX2NoZWNrX2Zpcm13YXJlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCitzdGF0aWMgaW50IHJ0MjgwMHVzYl93cml0ZV9maXJtd2FyZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJCSAgICBjb25zdCB1OCAqZGF0YSwgY29uc3Qgc2l6ZV90IGxlbikKIHsKLQlzaXplX3Qgb2Zmc2V0ID0gMDsKLQotCS8qCi0JICogRmlybXdhcmUgZmlsZXM6Ci0JICogVGhlcmUgYXJlIDIgdmFyaWF0aW9ucyBvZiB0aGUgcnQyODcwIGZpcm13YXJlLgotCSAqIGEpIHNpemU6IDRrYgotCSAqIGIpIHNpemU6IDhrYgotCSAqIE5vdGUgdGhhdCAoYikgY29udGFpbnMgMiBzZXBhcmF0ZSBmaXJtd2FyZSBibG9icyBvZiA0awotCSAqIHdpdGhpbiB0aGUgZmlsZS4gVGhlIGZpcnN0IGJsb2IgaXMgdGhlIHNhbWUgZmlybXdhcmUgYXMgKGEpLAotCSAqIGJ1dCB0aGUgc2Vjb25kIGJsb2IgaXMgZm9yIHRoZSBhZGRpdGlvbmFsIGNoaXBzZXRzLgotCSAqLwotCWlmIChsZW4gIT0gNDA5NiAmJiBsZW4gIT0gODE5MikKLQkJcmV0dXJuIEZXX0JBRF9MRU5HVEg7Ci0KLQkvKgotCSAqIENoZWNrIGlmIHdlIG5lZWQgdGhlIHVwcGVyIDRrYiBmaXJtd2FyZSBkYXRhIG9yIG5vdC4KLQkgKi8KLQlpZiAoKGxlbiA9PSA0MDk2KSAmJgotCSAgICAhcnQyeDAwX3J0KHJ0MngwMGRldiwgUlQyODYwKSAmJgotCSAgICAhcnQyeDAwX3J0KHJ0MngwMGRldiwgUlQyODcyKSAmJgotCSAgICAhcnQyeDAwX3J0KHJ0MngwMGRldiwgUlQzMDcwKSkKLQkJcmV0dXJuIEZXX0JBRF9WRVJTSU9OOwotCi0JLyoKLQkgKiA4a2IgZmlybXdhcmUgZmlsZXMgbXVzdCBiZSBjaGVja2VkIGFzIGlmIGl0IHdlcmUKLQkgKiAyIHNlcGFyYXRlIGZpcm13YXJlIGZpbGVzLgotCSAqLwotCXdoaWxlIChvZmZzZXQgPCBsZW4pIHsKLQkJaWYgKCFydDI4MDB1c2JfY2hlY2tfY3JjKGRhdGEgKyBvZmZzZXQsIDQwOTYpKQotCQkJcmV0dXJuIEZXX0JBRF9DUkM7Ci0KLQkJb2Zmc2V0ICs9IDQwOTY7Ci0JfQotCi0JcmV0dXJuIEZXX09LOwotfQotCi1zdGF0aWMgaW50IHJ0MjgwMHVzYl9sb2FkX2Zpcm13YXJlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkJICAgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pCi17Ci0JdW5zaWduZWQgaW50IGk7CiAJaW50IHN0YXR1czsKLQl1MzIgcmVnOwogCXUzMiBvZmZzZXQ7CiAJdTMyIGxlbmd0aDsKIApAQCAtMTUyLDI4ICs3NywxMCBAQAogCX0KIAogCS8qCi0JICogV2FpdCBmb3Igc3RhYmxlIGhhcmR3YXJlLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBSRUdJU1RFUl9CVVNZX0NPVU5UOyBpKyspIHsKLQkJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfQ1NSMCwgJnJlZyk7Ci0JCWlmIChyZWcgJiYgcmVnICE9IH4wKQotCQkJYnJlYWs7Ci0JCW1zbGVlcCgxKTsKLQl9Ci0KLQlpZiAoaSA9PSBSRUdJU1RFUl9CVVNZX0NPVU5UKSB7Ci0JCUVSUk9SKHJ0MngwMGRldiwgIlVuc3RhYmxlIGhhcmR3YXJlLlxuIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JLyoKIAkgKiBXcml0ZSBmaXJtd2FyZSB0byBkZXZpY2UuCiAJICovCi0JcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0X2xhcmdlX2J1ZmYocnQyeDAwZGV2LCBVU0JfTVVMVElfV1JJVEUsCi0JCQkJCSAgICBVU0JfVkVORE9SX1JFUVVFU1RfT1VULAotCQkJCQkgICAgRklSTVdBUkVfSU1BR0VfQkFTRSwKLQkJCQkJICAgIGRhdGEgKyBvZmZzZXQsIGxlbmd0aCwKLQkJCQkJICAgIFJFR0lTVEVSX1RJTUVPVVQzMihsZW5ndGgpKTsKKwlydDI4MDBfcmVnaXN0ZXJfbXVsdGl3cml0ZShydDJ4MDBkZXYsIEZJUk1XQVJFX0lNQUdFX0JBU0UsCisJCQkJICAgZGF0YSArIG9mZnNldCwgbGVuZ3RoKTsKIAogCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEgyTV9NQUlMQk9YX0NJRCwgfjApOwogCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEgyTV9NQUlMQk9YX1NUQVRVUywgfjApOwpAQCAtMTk2LDcgKzEwMyw3IEBACiAJLyoKIAkgKiBTZW5kIHNpZ25hbCB0byBmaXJtd2FyZSBkdXJpbmcgYm9vdCB0aW1lLgogCSAqLwotCXJ0MjgwMF9tY3VfcmVxdWVzdChydDJ4MDBkZXYsIE1DVV9CT09UX1NJR05BTCwgMHhmZiwgMCwgMCk7CisJcnQyODAwX21jdV9yZXF1ZXN0KHJ0MngwMGRldiwgTUNVX0JPT1RfU0lHTkFMLCAwLCAwLCAwKTsKIAogCWlmIChydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwNzApIHx8CiAJICAgIHJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMzA3MSkgfHwKQEAgLTIwNiwyOCArMTEzLDYgQEAKIAkJdWRlbGF5KDEwKTsKIAl9CiAKLQkvKgotCSAqIFdhaXQgZm9yIGRldmljZSB0byBzdGFiaWxpemUuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IFJFR0lTVEVSX0JVU1lfQ09VTlQ7IGkrKykgewotCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFBCRl9TWVNfQ1RSTCwgJnJlZyk7Ci0JCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBQQkZfU1lTX0NUUkxfUkVBRFkpKQotCQkJYnJlYWs7Ci0JCW1zbGVlcCgxKTsKLQl9Ci0KLQlpZiAoaSA9PSBSRUdJU1RFUl9CVVNZX0NPVU5UKSB7Ci0JCUVSUk9SKHJ0MngwMGRldiwgIlBCRiBzeXN0ZW0gcmVnaXN0ZXIgbm90IHJlYWR5LlxuIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JLyoKLQkgKiBJbml0aWFsaXplIGZpcm13YXJlLgotCSAqLwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEgyTV9CQlBfQUdFTlQsIDApOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEgyTV9NQUlMQk9YX0NTUiwgMCk7Ci0JbXNsZWVwKDEpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0Niw2ICsxMzEsNDQgQEAKIAlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfU1lTX0NUUkwsIHJlZyk7CiB9CiAKK3N0YXRpYyBpbnQgcnQyODAwdXNiX2luaXRfcmVnaXN0ZXJzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJdTMyIHJlZzsKKwlpbnQgaTsKKworCS8qCisJICogV2FpdCB1bnRpbCBCQlAgYW5kIFJGIGFyZSByZWFkeS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgUkVHSVNURVJfQlVTWV9DT1VOVDsgaSsrKSB7CisJCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX0NTUjAsICZyZWcpOworCQlpZiAocmVnICYmIHJlZyAhPSB+MCkKKwkJCWJyZWFrOworCQltc2xlZXAoMSk7CisJfQorCisJaWYgKGkgPT0gUkVHSVNURVJfQlVTWV9DT1VOVCkgeworCQlFUlJPUihydDJ4MDBkZXYsICJVbnN0YWJsZSBoYXJkd2FyZS5cbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgUEJGX1NZU19DVFJMLCAmcmVnKTsKKwlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQQkZfU1lTX0NUUkwsIHJlZyAmIH4weDAwMDAyMDAwKTsKKworCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCAmcmVnKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX1NZU19DVFJMX1JFU0VUX0NTUiwgMSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19TWVNfQ1RSTF9SRVNFVF9CQlAsIDEpOworCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgcmVnKTsKKworCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFVTQl9ETUFfQ0ZHLCAweDAwMDAwMDAwKTsKKworCXJ0MngwMHVzYl92ZW5kb3JfcmVxdWVzdF9zdyhydDJ4MDBkZXYsIFVTQl9ERVZJQ0VfTU9ERSwgMCwKKwkJCQkgICAgVVNCX01PREVfUkVTRVQsIFJFR0lTVEVSX1RJTUVPVVQpOworCisJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCAweDAwMDAwMDAwKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHJ0MjgwMHVzYl9lbmFibGVfcmFkaW8oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKIAl1MzIgcmVnOwpAQCAtMzcxLDcgKzI5NCw5IEBACiAJCXJ0MjgwMHVzYl90b2dnbGVfcngocnQyeDAwZGV2LCBzdGF0ZSk7CiAJCWJyZWFrOwogCWNhc2UgU1RBVEVfUkFESU9fSVJRX09OOgorCWNhc2UgU1RBVEVfUkFESU9fSVJRX09OX0lTUjoKIAljYXNlIFNUQVRFX1JBRElPX0lSUV9PRkY6CisJY2FzZSBTVEFURV9SQURJT19JUlFfT0ZGX0lTUjoKIAkJLyogTm8gc3VwcG9ydCwgYnV0IG5vIGVycm9yIGVpdGhlciAqLwogCQlicmVhazsKIAljYXNlIFNUQVRFX0RFRVBfU0xFRVA6CkBAIC0zOTUsMjUgKzMyMCwyOSBAQAogLyoKICAqIFRYIGRlc2NyaXB0b3IgaW5pdGlhbGl6YXRpb24KICAqLworc3RhdGljIHZvaWQgcnQyODAwdXNiX3dyaXRlX3R4X2RhdGEoc3RydWN0IHF1ZXVlX2VudHJ5KiBlbnRyeSwKKwkJCQkgICAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjKQoreworCV9fbGUzMiAqdHh3aSA9IChfX2xlMzIgKikgKGVudHJ5LT5za2ItPmRhdGEgKyBUWElORk9fREVTQ19TSVpFKTsKKworCXJ0MjgwMF93cml0ZV90eHdpKHR4d2ksIHR4ZGVzYyk7Cit9CisKKwogc3RhdGljIHZvaWQgcnQyODAwdXNiX3dyaXRlX3R4X2Rlc2Moc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjKQogewogCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhza2IpOwotCV9fbGUzMiAqdHhpID0gKF9fbGUzMiAqKShza2ItPmRhdGEgLSBUWFdJX0RFU0NfU0laRSAtIFRYSU5GT19ERVNDX1NJWkUpOworCV9fbGUzMiAqdHhpID0gKF9fbGUzMiAqKSBza2ItPmRhdGE7CiAJdTMyIHdvcmQ7CiAKIAkvKgotCSAqIEluaXRpYWxpemUgVFhXSSBkZXNjcmlwdG9yCi0JICovCi0JcnQyODAwX3dyaXRlX3R4d2koc2tiLCB0eGRlc2MpOwotCi0JLyoKIAkgKiBJbml0aWFsaXplIFRYSU5GTyBkZXNjcmlwdG9yCiAJICovCiAJcnQyeDAwX2Rlc2NfcmVhZCh0eGksIDAsICZ3b3JkKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYSU5GT19XMF9VU0JfRE1BX1RYX1BLVF9MRU4sCi0JCQkgICBza2ItPmxlbiArIFRYV0lfREVTQ19TSVpFKTsKKwkJCSAgIHNrYi0+bGVuIC0gVFhJTkZPX0RFU0NfU0laRSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWElORk9fVzBfV0lWLAogCQkJICAgIXRlc3RfYml0KEVOVFJZX1RYRF9FTkNSWVBUX0lWLCAmdHhkZXNjLT5mbGFncykpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhJTkZPX1cwX1FTRUwsIDIpOwpAQCAtNDI2LDYgKzM1NSw3IEBACiAJLyoKIAkgKiBSZWdpc3RlciBkZXNjcmlwdG9yIGRldGFpbHMgaW4gc2tiIGZyYW1lIGRlc2NyaXB0b3IuCiAJICovCisJc2tiZGVzYy0+ZmxhZ3MgfD0gU0tCREVTQ19ERVNDX0lOX1NLQjsKIAlza2JkZXNjLT5kZXNjID0gdHhpOwogCXNrYmRlc2MtPmRlc2NfbGVuID0gVFhJTkZPX0RFU0NfU0laRSArIFRYV0lfREVTQ19TSVpFOwogfQpAQCAtNDMzLDUxICszNjMsNiBAQAogLyoKICAqIFRYIGRhdGEgaW5pdGlhbGl6YXRpb24KICAqLwotc3RhdGljIHZvaWQgcnQyODAwdXNiX3dyaXRlX2JlYWNvbihzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAotCQkJCSAgIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYykKLXsKLQlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZW50cnktPnF1ZXVlLT5ydDJ4MDBkZXY7Ci0JdW5zaWduZWQgaW50IGJlYWNvbl9iYXNlOwotCXUzMiByZWc7Ci0KLQkvKgotCSAqIERpc2FibGUgYmVhY29uaW5nIHdoaWxlIHdlIGFyZSByZWxvYWRpbmcgdGhlIGJlYWNvbiBkYXRhLAotCSAqIG90aGVyd2lzZSB3ZSBtaWdodCBiZSBzZW5kaW5nIG91dCBpbnZhbGlkIGRhdGEuCi0JICovCi0JcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBCQ05fVElNRV9DRkcsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05fVElNRV9DRkdfQkVBQ09OX0dFTiwgMCk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQkNOX1RJTUVfQ0ZHLCByZWcpOwotCi0JLyoKLQkgKiBBZGQgdGhlIFRYV0kgZm9yIHRoZSBiZWFjb24gdG8gdGhlIHNrYi4KLQkgKi8KLQlydDI4MDBfd3JpdGVfdHh3aShlbnRyeS0+c2tiLCB0eGRlc2MpOwotCXNrYl9wdXNoKGVudHJ5LT5za2IsIFRYV0lfREVTQ19TSVpFKTsKLQotCS8qCi0JICogV3JpdGUgZW50aXJlIGJlYWNvbiB3aXRoIGRlc2NyaXB0b3IgdG8gcmVnaXN0ZXIuCi0JICovCi0JYmVhY29uX2Jhc2UgPSBIV19CRUFDT05fT0ZGU0VUKGVudHJ5LT5lbnRyeV9pZHgpOwotCXJ0MngwMHVzYl92ZW5kb3JfcmVxdWVzdF9sYXJnZV9idWZmKHJ0MngwMGRldiwgVVNCX01VTFRJX1dSSVRFLAotCQkJCQkgICAgVVNCX1ZFTkRPUl9SRVFVRVNUX09VVCwgYmVhY29uX2Jhc2UsCi0JCQkJCSAgICBlbnRyeS0+c2tiLT5kYXRhLCBlbnRyeS0+c2tiLT5sZW4sCi0JCQkJCSAgICBSRUdJU1RFUl9USU1FT1VUMzIoZW50cnktPnNrYi0+bGVuKSk7Ci0KLQkvKgotCSAqIEVuYWJsZSBiZWFjb25pbmcgYWdhaW4uCi0JICovCi0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJDTl9USU1FX0NGR19UU0ZfVElDS0lORywgMSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJDTl9USU1FX0NGR19UQlRUX0VOQUJMRSwgMSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJDTl9USU1FX0NGR19CRUFDT05fR0VOLCAxKTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBCQ05fVElNRV9DRkcsIHJlZyk7Ci0KLQkvKgotCSAqIENsZWFuIHVwIHRoZSBiZWFjb24gc2tiLgotCSAqLwotCWRldl9rZnJlZV9za2IoZW50cnktPnNrYik7Ci0JZW50cnktPnNrYiA9IE5VTEw7Ci19Ci0KIHN0YXRpYyBpbnQgcnQyODAwdXNiX2dldF90eF9kYXRhX2xlbihzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KQogewogCWludCBsZW5ndGg7CkBAIC01NjgsNyArNDUzLDcgQEAKIAkvKgogCSAqIFByb2Nlc3MgdGhlIFJYV0kgc3RydWN0dXJlLgogCSAqLwotCXJ0MjgwMF9wcm9jZXNzX3J4d2koZW50cnktPnNrYiwgcnhkZXNjKTsKKwlydDI4MDBfcHJvY2Vzc19yeHdpKGVudHJ5LCByeGRlc2MpOwogfQogCiAvKgpAQCAtNTg1LDI0ICs0NzAsMTAgQEAKIAlyZXR1cm4gcnQyODAwX3ZhbGlkYXRlX2VlcHJvbShydDJ4MDBkZXYpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0MjgwMF9vcHMgcnQyODAwdXNiX3J0MjgwMF9vcHMgPSB7Ci0JLnJlZ2lzdGVyX3JlYWQJCT0gcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWQsCi0JLnJlZ2lzdGVyX3JlYWRfbG9jawk9IHJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkX2xvY2ssCi0JLnJlZ2lzdGVyX3dyaXRlCQk9IHJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZSwKLQkucmVnaXN0ZXJfd3JpdGVfbG9jawk9IHJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZV9sb2NrLAotCi0JLnJlZ2lzdGVyX211bHRpcmVhZAk9IHJ0MngwMHVzYl9yZWdpc3Rlcl9tdWx0aXJlYWQsCi0JLnJlZ2lzdGVyX211bHRpd3JpdGUJPSBydDJ4MDB1c2JfcmVnaXN0ZXJfbXVsdGl3cml0ZSwKLQotCS5yZWdidXN5X3JlYWQJCT0gcnQyeDAwdXNiX3JlZ2J1c3lfcmVhZCwKLX07Ci0KIHN0YXRpYyBpbnQgcnQyODAwdXNiX3Byb2JlX2h3KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CiAJaW50IHJldHZhbDsKIAotCXJ0MngwMGRldi0+cHJpdiA9ICh2b2lkICopJnJ0MjgwMHVzYl9ydDI4MDBfb3BzOwotCiAJLyoKIAkgKiBBbGxvY2F0ZSBlZXByb20gZGF0YS4KIAkgKi8KQEAgLTYzNSw2ICs1MDYsOCBAQAogCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9MMlBBRCwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCWlmICghbW9kcGFyYW1fbm9od2NyeXB0KQogCQlfX3NldF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJX19zZXRfYml0KERSSVZFUl9TVVBQT1JUX0xJTktfVFVOSU5HLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJX19zZXRfYml0KERSSVZFUl9TVVBQT1JUX1dBVENIRE9HLCAmcnQyeDAwZGV2LT5mbGFncyk7CiAKIAkvKgogCSAqIFNldCB0aGUgcnNzaSBvZmZzZXQuCkBAIC02NDQsMTEgKzUxNyw0NSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgcnQyODAwdXNiX21hYzgwMjExX29wcyA9IHsKKwkudHgJCQk9IHJ0MngwMG1hY190eCwKKwkuc3RhcnQJCQk9IHJ0MngwMG1hY19zdGFydCwKKwkuc3RvcAkJCT0gcnQyeDAwbWFjX3N0b3AsCisJLmFkZF9pbnRlcmZhY2UJCT0gcnQyeDAwbWFjX2FkZF9pbnRlcmZhY2UsCisJLnJlbW92ZV9pbnRlcmZhY2UJPSBydDJ4MDBtYWNfcmVtb3ZlX2ludGVyZmFjZSwKKwkuY29uZmlnCQkJPSBydDJ4MDBtYWNfY29uZmlnLAorCS5jb25maWd1cmVfZmlsdGVyCT0gcnQyeDAwbWFjX2NvbmZpZ3VyZV9maWx0ZXIsCisJLnNldF90aW0JCT0gcnQyeDAwbWFjX3NldF90aW0sCisJLnNldF9rZXkJCT0gcnQyeDAwbWFjX3NldF9rZXksCisJLnN3X3NjYW5fc3RhcnQJCT0gcnQyeDAwbWFjX3N3X3NjYW5fc3RhcnQsCisJLnN3X3NjYW5fY29tcGxldGUJPSBydDJ4MDBtYWNfc3dfc2Nhbl9jb21wbGV0ZSwKKwkuZ2V0X3N0YXRzCQk9IHJ0MngwMG1hY19nZXRfc3RhdHMsCisJLmdldF90a2lwX3NlcQkJPSBydDI4MDBfZ2V0X3RraXBfc2VxLAorCS5zZXRfcnRzX3RocmVzaG9sZAk9IHJ0MjgwMF9zZXRfcnRzX3RocmVzaG9sZCwKKwkuYnNzX2luZm9fY2hhbmdlZAk9IHJ0MngwMG1hY19ic3NfaW5mb19jaGFuZ2VkLAorCS5jb25mX3R4CQk9IHJ0MjgwMF9jb25mX3R4LAorCS5nZXRfdHNmCQk9IHJ0MjgwMF9nZXRfdHNmLAorCS5yZmtpbGxfcG9sbAkJPSBydDJ4MDBtYWNfcmZraWxsX3BvbGwsCisJLmFtcGR1X2FjdGlvbgkJPSBydDI4MDBfYW1wZHVfYWN0aW9uLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBydDI4MDBfb3BzIHJ0MjgwMHVzYl9ydDI4MDBfb3BzID0geworCS5yZWdpc3Rlcl9yZWFkCQk9IHJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkLAorCS5yZWdpc3Rlcl9yZWFkX2xvY2sJPSBydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZF9sb2NrLAorCS5yZWdpc3Rlcl93cml0ZQkJPSBydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUsCisJLnJlZ2lzdGVyX3dyaXRlX2xvY2sJPSBydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGVfbG9jaywKKwkucmVnaXN0ZXJfbXVsdGlyZWFkCT0gcnQyeDAwdXNiX3JlZ2lzdGVyX211bHRpcmVhZCwKKwkucmVnaXN0ZXJfbXVsdGl3cml0ZQk9IHJ0MngwMHVzYl9yZWdpc3Rlcl9tdWx0aXdyaXRlLAorCS5yZWdidXN5X3JlYWQJCT0gcnQyeDAwdXNiX3JlZ2J1c3lfcmVhZCwKKwkuZHJ2X3dyaXRlX2Zpcm13YXJlCT0gcnQyODAwdXNiX3dyaXRlX2Zpcm13YXJlLAorCS5kcnZfaW5pdF9yZWdpc3RlcnMJPSBydDI4MDB1c2JfaW5pdF9yZWdpc3RlcnMsCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0MngwMGxpYl9vcHMgcnQyODAwdXNiX3J0MngwMF9vcHMgPSB7CiAJLnByb2JlX2h3CQk9IHJ0MjgwMHVzYl9wcm9iZV9odywKIAkuZ2V0X2Zpcm13YXJlX25hbWUJPSBydDI4MDB1c2JfZ2V0X2Zpcm13YXJlX25hbWUsCi0JLmNoZWNrX2Zpcm13YXJlCQk9IHJ0MjgwMHVzYl9jaGVja19maXJtd2FyZSwKLQkubG9hZF9maXJtd2FyZQkJPSBydDI4MDB1c2JfbG9hZF9maXJtd2FyZSwKKwkuY2hlY2tfZmlybXdhcmUJCT0gcnQyODAwX2NoZWNrX2Zpcm13YXJlLAorCS5sb2FkX2Zpcm13YXJlCQk9IHJ0MjgwMF9sb2FkX2Zpcm13YXJlLAogCS5pbml0aWFsaXplCQk9IHJ0MngwMHVzYl9pbml0aWFsaXplLAogCS51bmluaXRpYWxpemUJCT0gcnQyeDAwdXNiX3VuaW5pdGlhbGl6ZSwKIAkuY2xlYXJfZW50cnkJCT0gcnQyeDAwdXNiX2NsZWFyX2VudHJ5LApAQCAtNjU3LDkgKzU2NCwxMCBAQAogCS5saW5rX3N0YXRzCQk9IHJ0MjgwMF9saW5rX3N0YXRzLAogCS5yZXNldF90dW5lcgkJPSBydDI4MDBfcmVzZXRfdHVuZXIsCiAJLmxpbmtfdHVuZXIJCT0gcnQyODAwX2xpbmtfdHVuZXIsCisJLndhdGNoZG9nCQk9IHJ0MngwMHVzYl93YXRjaGRvZywKIAkud3JpdGVfdHhfZGVzYwkJPSBydDI4MDB1c2Jfd3JpdGVfdHhfZGVzYywKLQkud3JpdGVfdHhfZGF0YQkJPSBydDJ4MDB1c2Jfd3JpdGVfdHhfZGF0YSwKLQkud3JpdGVfYmVhY29uCQk9IHJ0MjgwMHVzYl93cml0ZV9iZWFjb24sCisJLndyaXRlX3R4X2RhdGEJCT0gcnQyODAwdXNiX3dyaXRlX3R4X2RhdGEsCisJLndyaXRlX2JlYWNvbgkJPSBydDI4MDBfd3JpdGVfYmVhY29uLAogCS5nZXRfdHhfZGF0YV9sZW4JPSBydDI4MDB1c2JfZ2V0X3R4X2RhdGFfbGVuLAogCS5raWNrX3R4X3F1ZXVlCQk9IHJ0MngwMHVzYl9raWNrX3R4X3F1ZXVlLAogCS5raWxsX3R4X3F1ZXVlCQk9IHJ0MngwMHVzYl9raWxsX3R4X3F1ZXVlLApAQCAtNzA2LDcgKzYxNCw4IEBACiAJLnR4CQkJPSAmcnQyODAwdXNiX3F1ZXVlX3R4LAogCS5iY24JCQk9ICZydDI4MDB1c2JfcXVldWVfYmNuLAogCS5saWIJCQk9ICZydDI4MDB1c2JfcnQyeDAwX29wcywKLQkuaHcJCQk9ICZydDI4MDBfbWFjODAyMTFfb3BzLAorCS5kcnYJCQk9ICZydDI4MDB1c2JfcnQyODAwX29wcywKKwkuaHcJCQk9ICZydDI4MDB1c2JfbWFjODAyMTFfb3BzLAogI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX0RFQlVHRlMKIAkuZGVidWdmcwkJPSAmcnQyODAwX3J0MngwMGRlYnVnLAogI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX0RFQlVHRlMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuaAppbmRleCAyYmNhNmE3Li4wNzIyYmFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5oCkBAIC0zMiw0MyArMzIsNiBAQAogI2RlZmluZSBSVDI4MDBVU0JfSAogCiAvKgotICogVVNCIHJlZ2lzdGVycy4KLSAqLwotCi0vKgotICogVVNCX0RNQV9DRkcKLSAqIFJYX0JVTEtfQUdHX1RJTUVPVVQ6IFJ4IEJ1bGsgQWdncmVnYXRpb24gVGltZU91dCBpbiB1bml0IG9mIDMzbnMuCi0gKiBSWF9CVUxLX0FHR19MSU1JVDogUnggQnVsayBBZ2dyZWdhdGlvbiBMaW1pdCBpbiB1bml0IG9mIDI1NiBieXRlcy4KLSAqIFBIWV9DTEVBUjogcGh5IHdhdGNoIGRvZyBlbmFibGUuCi0gKiBUWF9DTEVBUjogQ2xlYXIgVVNCIERNQSBUWCBwYXRoLgotICogVFhPUF9IQUxUOiBIYWx0IFRYT1AgY291bnQgZG93biB3aGVuIFRYIGJ1ZmZlciBpcyBmdWxsLgotICogUlhfQlVMS19BR0dfRU46IEVuYWJsZSBSeCBCdWxrIEFnZ3JlZ2F0aW9uLgotICogUlhfQlVMS19FTjogRW5hYmxlIFVTQiBETUEgUnguCi0gKiBUWF9CVUxLX0VOOiBFbmFibGUgVVNCIERNQSBUeC4KLSAqIEVQX09VVF9WQUxJRDogT1VUIGVuZHBvaW50IGRhdGEgdmFsaWQuCi0gKiBSWF9CVVNZOiBVU0IgRE1BIFJYIEZTTSBidXN5LgotICogVFhfQlVTWTogVVNCIERNQSBUWCBGU00gYnVzeS4KLSAqLwotI2RlZmluZSBVU0JfRE1BX0NGRwkJCTB4MDJhMAotI2RlZmluZSBVU0JfRE1BX0NGR19SWF9CVUxLX0FHR19USU1FT1VUCUZJRUxEMzIoMHgwMDAwMDBmZikKLSNkZWZpbmUgVVNCX0RNQV9DRkdfUlhfQlVMS19BR0dfTElNSVQJRklFTEQzMigweDAwMDBmZjAwKQotI2RlZmluZSBVU0JfRE1BX0NGR19QSFlfQ0xFQVIJCUZJRUxEMzIoMHgwMDAxMDAwMCkKLSNkZWZpbmUgVVNCX0RNQV9DRkdfVFhfQ0xFQVIJCUZJRUxEMzIoMHgwMDA4MDAwMCkKLSNkZWZpbmUgVVNCX0RNQV9DRkdfVFhPUF9IQUxUCQlGSUVMRDMyKDB4MDAxMDAwMDApCi0jZGVmaW5lIFVTQl9ETUFfQ0ZHX1JYX0JVTEtfQUdHX0VOCUZJRUxEMzIoMHgwMDIwMDAwMCkKLSNkZWZpbmUgVVNCX0RNQV9DRkdfUlhfQlVMS19FTgkJRklFTEQzMigweDAwNDAwMDAwKQotI2RlZmluZSBVU0JfRE1BX0NGR19UWF9CVUxLX0VOCQlGSUVMRDMyKDB4MDA4MDAwMDApCi0jZGVmaW5lIFVTQl9ETUFfQ0ZHX0VQX09VVF9WQUxJRAlGSUVMRDMyKDB4M2YwMDAwMDApCi0jZGVmaW5lIFVTQl9ETUFfQ0ZHX1JYX0JVU1kJCUZJRUxEMzIoMHg0MDAwMDAwMCkKLSNkZWZpbmUgVVNCX0RNQV9DRkdfVFhfQlVTWQkJRklFTEQzMigweDgwMDAwMDAwKQotCi0vKgotICogVVNCX0NZQ19DRkcKLSAqLwotI2RlZmluZSBVU0JfQ1lDX0NGRwkJCTB4MDJhNAotI2RlZmluZSBVU0JfQ1lDX0NGR19DTE9DS19DWUNMRQkJRklFTEQzMigweDAwMDAwMGZmKQotCi0vKgogICogODA1MSBmaXJtd2FyZSBpbWFnZS4KICAqLwogI2RlZmluZSBGSVJNV0FSRV9SVDI4NzAJCQkicnQyODcwLmJpbiIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaAppbmRleCA2YzFmZjRjLi5jMjFhZjM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMC5oCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAKICNpbmNsdWRlICJydDJ4MDBkZWJ1Zy5oIgorI2luY2x1ZGUgInJ0MngwMGR1bXAuaCIKICNpbmNsdWRlICJydDJ4MDBsZWRzLmgiCiAjaW5jbHVkZSAicnQyeDAwcmVnLmgiCiAjaW5jbHVkZSAicnQyeDAwcXVldWUuaCIKQEAgLTE1OSw2ICsxNjAsNyBAQAogCiBlbnVtIHJ0MngwMF9jaGlwX2ludGYgewogCVJUMlgwMF9DSElQX0lOVEZfUENJLAorCVJUMlgwMF9DSElQX0lOVEZfUENJRSwKIAlSVDJYMDBfQ0hJUF9JTlRGX1VTQiwKIAlSVDJYMDBfQ0hJUF9JTlRGX1NPQywKIH07CkBAIC0xNzUsOCArMTc3LDcgQEAKICNkZWZpbmUgUlQyNTcwCQkweDI1NzAKICNkZWZpbmUgUlQyNjYxCQkweDI2NjEKICNkZWZpbmUgUlQyNTczCQkweDI1NzMKLSNkZWZpbmUgUlQyODYwCQkweDI4NjAJLyogMi40R0h6IFBDSS9DQiAqLwotI2RlZmluZSBSVDI4NzAJCTB4Mjg3MAorI2RlZmluZSBSVDI4NjAJCTB4Mjg2MAkvKiAyLjRHSHogKi8KICNkZWZpbmUgUlQyODcyCQkweDI4NzIJLyogV1NPQyAqLwogI2RlZmluZSBSVDI4ODMJCTB4Mjg4MwkvKiBXU09DICovCiAjZGVmaW5lIFJUMzA3MAkJMHgzMDcwCkBAIC0zMzEsNiArMzMyLDExIEBACiAJICogV29yayBzdHJ1Y3R1cmUgZm9yIHNjaGVkdWxpbmcgcGVyaW9kaWMgbGluayB0dW5pbmcuCiAJICovCiAJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOworCisJLyoKKwkgKiBXb3JrIHN0cnVjdHVyZSBmb3Igc2NoZWR1bGluZyBwZXJpb2RpYyB3YXRjaGRvZyBtb25pdG9yaW5nLgorCSAqLworCXN0cnVjdCBkZWxheWVkX3dvcmsgd2F0Y2hkb2dfd29yazsKIH07CiAKIC8qCkBAIC01MDksNiArNTE1LDExIEBACiAJaXJxX2hhbmRsZXJfdCBpcnFfaGFuZGxlcjsKIAogCS8qCisJICogVGhyZWFkZWQgSW50ZXJydXB0IGhhbmRsZXJzLgorCSAqLworCWlycV9oYW5kbGVyX3QgaXJxX2hhbmRsZXJfdGhyZWFkOworCisJLyoKIAkgKiBEZXZpY2UgaW5pdCBoYW5kbGVycy4KIAkgKi8KIAlpbnQgKCpwcm9iZV9odykgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwpAQCAtNTQyLDYgKzU1Myw3IEBACiAJCQkgICAgIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwpOwogCXZvaWQgKCpsaW5rX3R1bmVyKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgICBzdHJ1Y3QgbGlua19xdWFsICpxdWFsLCBjb25zdCB1MzIgY291bnQpOworCXZvaWQgKCp3YXRjaGRvZykgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogCiAJLyoKIAkgKiBUWCBjb250cm9sIGhhbmRsZXJzCkBAIC01NDksOCArNTYxLDggQEAKIAl2b2lkICgqd3JpdGVfdHhfZGVzYykgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgICBzdHJ1Y3QgdHhlbnRyeV9kZXNjICp0eGRlc2MpOwotCWludCAoKndyaXRlX3R4X2RhdGEpIChzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAotCQkJICAgICAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjKTsKKwl2b2lkICgqd3JpdGVfdHhfZGF0YSkgKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCisJCQkgICAgICAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjKTsKIAl2b2lkICgqd3JpdGVfYmVhY29uKSAoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwKIAkJCSAgICAgIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYyk7CiAJaW50ICgqZ2V0X3R4X2RhdGFfbGVuKSAoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSk7CkBAIC02MDksNiArNjIxLDcgQEAKIAljb25zdCBzdHJ1Y3QgZGF0YV9xdWV1ZV9kZXNjICpiY247CiAJY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyAqYXRpbTsKIAljb25zdCBzdHJ1Y3QgcnQyeDAwbGliX29wcyAqbGliOworCWNvbnN0IHZvaWQgKmRydjsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyAqaHc7CiAjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfREVCVUdGUwogCWNvbnN0IHN0cnVjdCBydDJ4MDBkZWJ1ZyAqZGVidWdmczsKQEAgLTYyNyw2ICs2NDAsNyBAQAogCURFVklDRV9TVEFURV9JTklUSUFMSVpFRCwKIAlERVZJQ0VfU1RBVEVfU1RBUlRFRCwKIAlERVZJQ0VfU1RBVEVfRU5BQkxFRF9SQURJTywKKwlERVZJQ0VfU1RBVEVfU0NBTk5JTkcsCiAKIAkvKgogCSAqIERyaXZlciByZXF1aXJlbWVudHMKQEAgLTY0NSw2ICs2NTksOSBAQAogCUNPTkZJR19TVVBQT1JUX0hXX0NSWVBUTywKIAlEUklWRVJfU1VQUE9SVF9DT05UUk9MX0ZJTFRFUlMsCiAJRFJJVkVSX1NVUFBPUlRfQ09OVFJPTF9GSUxURVJfUFNQT0xMLAorCURSSVZFUl9TVVBQT1JUX1BSRV9UQlRUX0lOVEVSUlVQVCwKKwlEUklWRVJfU1VQUE9SVF9MSU5LX1RVTklORywKKwlEUklWRVJfU1VQUE9SVF9XQVRDSERPRywKIAogCS8qCiAJICogRHJpdmVyIGNvbmZpZ3VyYXRpb24KQEAgLTY1NCw3ICs2NzEsNiBAQAogCUNPTkZJR19FWFRFUk5BTF9MTkFfQSwKIAlDT05GSUdfRVhURVJOQUxfTE5BX0JHLAogCUNPTkZJR19ET1VCTEVfQU5URU5OQSwKLQlDT05GSUdfRElTQUJMRV9MSU5LX1RVTklORywKIAlDT05GSUdfQ0hBTk5FTF9IVDQwLAogfTsKIApAQCAtODYyLDkgKzg3OCwxMCBAQAogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CiAKIAkvKgotCSAqIERyaXZlciBzcGVjaWZpYyBkYXRhLgorCSAqIEludGVycnVwdCB2YWx1ZXMsIHN0b3JlZCBiZXR3ZWVuIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUKKwkgKiBhbmQgaW50ZXJydXB0IHRocmVhZCByb3V0aW5lLgogCSAqLwotCXZvaWQgKnByaXY7CisJdTMyIGlycXZhbHVlWzJdOwogfTsKIAogLyoKQEAgLTk3OCw3ICs5OTUsMTMgQEAKIAogc3RhdGljIGlubGluZSBib29sIHJ0MngwMF9pc19wY2koc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlyZXR1cm4gcnQyeDAwX2ludGYocnQyeDAwZGV2LCBSVDJYMDBfQ0hJUF9JTlRGX1BDSSk7CisJcmV0dXJuIHJ0MngwMF9pbnRmKHJ0MngwMGRldiwgUlQyWDAwX0NISVBfSU5URl9QQ0kpIHx8CisJICAgICAgIHJ0MngwMF9pbnRmKHJ0MngwMGRldiwgUlQyWDAwX0NISVBfSU5URl9QQ0lFKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHJ0MngwMF9pc19wY2llKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJcmV0dXJuIHJ0MngwMF9pbnRmKHJ0MngwMGRldiwgUlQyWDAwX0NISVBfSU5URl9QQ0lFKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHJ0MngwMF9pc191c2Ioc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKQEAgLTk5OSw2ICsxMDIyLDEzIEBACiB2b2lkIHJ0MngwMHF1ZXVlX21hcF90eHNrYihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogLyoqCisgKiBydDJ4MDBxdWV1ZV91bm1hcF9za2IgLSBVbm1hcCBhIHNrYiBmcm9tIERNQS4KKyAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgorICogQHNrYjogVGhlIHNrYiB0byB1bm1hcC4KKyAqLwordm9pZCBydDJ4MDBxdWV1ZV91bm1hcF9za2Ioc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKy8qKgogICogcnQyeDAwcXVldWVfZ2V0X3F1ZXVlIC0gQ29udmVydCBxdWV1ZSBpbmRleCB0byBxdWV1ZSBwb2ludGVyCiAgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2Rldi4KICAqIEBxdWV1ZTogcnQyeDAwIHF1ZXVlIGluZGV4IChzZWUgJmVudW0gZGF0YV9xdWV1ZV9xaWQpLgpAQCAtMTAxNSw5ICsxMDQ1LDMwIEBACiAJCQkJCSAgZW51bSBxdWV1ZV9pbmRleCBpbmRleCk7CiAKIC8qCisgKiBEZWJ1Z2ZzIGhhbmRsZXJzLgorICovCisvKioKKyAqIHJ0MngwMGRlYnVnX2R1bXBfZnJhbWUgLSBEdW1wIGEgZnJhbWUgdG8gdXNlcnNwYWNlIHRocm91Z2ggZGVidWdmcy4KKyAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgorICogQHR5cGU6IFRoZSB0eXBlIG9mIGZyYW1lIHRoYXQgaXMgYmVpbmcgZHVtcGVkLgorICogQHNrYjogVGhlIHNrYiBjb250YWluaW5nIHRoZSBmcmFtZSB0byBiZSBkdW1wZWQuCisgKi8KKyNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9ERUJVR0ZTCit2b2lkIHJ0MngwMGRlYnVnX2R1bXBfZnJhbWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICBlbnVtIHJ0MngwMF9kdW1wX3R5cGUgdHlwZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMGRlYnVnX2R1bXBfZnJhbWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkJICBlbnVtIHJ0MngwMF9kdW1wX3R5cGUgdHlwZSwKKwkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworfQorI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX0RFQlVHRlMgKi8KKworLyoKICAqIEludGVycnVwdCBjb250ZXh0IGhhbmRsZXJzLgogICovCiB2b2lkIHJ0MngwMGxpYl9iZWFjb25kb25lKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwordm9pZCBydDJ4MDBsaWJfcHJldGJ0dChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKIHZvaWQgcnQyeDAwbGliX3R4ZG9uZShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAogCQkgICAgICBzdHJ1Y3QgdHhkb25lX2VudHJ5X2Rlc2MgKnR4ZGVzYyk7CiB2b2lkIHJ0MngwMGxpYl9yeGRvbmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKQEAgLTEwNDcsNiArMTA5OCw4IEBACiAjZWxzZQogI2RlZmluZSBydDJ4MDBtYWNfc2V0X2tleQlOVUxMCiAjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfQ1JZUFRPICovCit2b2lkIHJ0MngwMG1hY19zd19zY2FuX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnQyeDAwbWFjX3N3X3NjYW5fY29tcGxldGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogaW50IHJ0MngwMG1hY19nZXRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQlzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpOwogdm9pZCBydDJ4MDBtYWNfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYwppbmRleCAwOTgzMTVhLi45NTNkYzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY29uZmlnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNvbmZpZy5jCkBAIC00MSwxMCArNDEsMTIgQEAKIAogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCWNvbmYuc3luYyA9IFRTRl9TWU5DX0FESE9DOworCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKIAljYXNlIE5MODAyMTFfSUZUWVBFX1dEUzoKLQkJY29uZi5zeW5jID0gVFNGX1NZTkNfQkVBQ09OOworCQljb25mLnN5bmMgPSBUU0ZfU1lOQ19BUF9OT05FOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCWNvbmYuc3luYyA9IFRTRl9TWU5DX0lORlJBOwpAQCAtMTcwLDIzICsxNzIsMjcgQEAKIAkJICAgICAgdW5zaWduZWQgaW50IGllZWU4MDIxMV9mbGFncykKIHsKIAlzdHJ1Y3QgcnQyeDAwbGliX2NvbmYgbGliY29uZjsKKwl1MTYgaHdfdmFsdWU7CiAKIAltZW1zZXQoJmxpYmNvbmYsIDAsIHNpemVvZihsaWJjb25mKSk7CiAKIAlsaWJjb25mLmNvbmYgPSBjb25mOwogCiAJaWYgKGllZWU4MDIxMV9mbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMKSB7Ci0JCWlmIChjb25mX2lzX2h0NDAoY29uZikpCisJCWlmIChjb25mX2lzX2h0NDAoY29uZikpIHsKIAkJCV9fc2V0X2JpdChDT05GSUdfQ0hBTk5FTF9IVDQwLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0JCWVsc2UKKwkJCWh3X3ZhbHVlID0gcnQyeDAwaHRfY2VudGVyX2NoYW5uZWwocnQyeDAwZGV2LCBjb25mKTsKKwkJfSBlbHNlIHsKIAkJCV9fY2xlYXJfYml0KENPTkZJR19DSEFOTkVMX0hUNDAsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwkJCWh3X3ZhbHVlID0gY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWU7CisJCX0KIAogCQltZW1jcHkoJmxpYmNvbmYucmYsCi0JCSAgICAgICAmcnQyeDAwZGV2LT5zcGVjLmNoYW5uZWxzW2NvbmYtPmNoYW5uZWwtPmh3X3ZhbHVlXSwKKwkJICAgICAgICZydDJ4MDBkZXYtPnNwZWMuY2hhbm5lbHNbaHdfdmFsdWVdLAogCQkgICAgICAgc2l6ZW9mKGxpYmNvbmYucmYpKTsKIAogCQltZW1jcHkoJmxpYmNvbmYuY2hhbm5lbCwKLQkJICAgICAgICZydDJ4MDBkZXYtPnNwZWMuY2hhbm5lbHNfaW5mb1tjb25mLT5jaGFubmVsLT5od192YWx1ZV0sCisJCSAgICAgICAmcnQyeDAwZGV2LT5zcGVjLmNoYW5uZWxzX2luZm9baHdfdmFsdWVdLAogCQkgICAgICAgc2l6ZW9mKGxpYmNvbmYuY2hhbm5lbCkpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuYwppbmRleCBlOWZlOTNmLi5iMDQ5OGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuYwpAQCAtMjExLDYgKzIxMSw3IEBACiAJaWYgKCF0ZXN0X2JpdChGUkFNRV9EVU1QX0ZJTEVfT1BFTiwgJmludGYtPmZyYW1lX2R1bXBfZmxhZ3MpKQogCQlza2JfcXVldWVfcHVyZ2UoJmludGYtPmZyYW1lX2R1bXBfc2ticXVldWUpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwZGVidWdfZHVtcF9mcmFtZSk7CiAKIHN0YXRpYyBpbnQgcnQyeDAwZGVidWdfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCmluZGV4IDNhZTQ2OGMuLjU4NWU4MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMKQEAgLTcwLDYgKzcwLDExIEBACiAJcnQyeDAwbGliX3RvZ2dsZV9yeChydDJ4MDBkZXYsIFNUQVRFX1JBRElPX1JYX09OKTsKIAogCS8qCisJICogU3RhcnQgd2F0Y2hkb2cgbW9uaXRvcmluZy4KKwkgKi8KKwlydDJ4MDBsaW5rX3N0YXJ0X3dhdGNoZG9nKHJ0MngwMGRldik7CisKKwkvKgogCSAqIFN0YXJ0IHRoZSBUWCBxdWV1ZXMuCiAJICovCiAJaWVlZTgwMjExX3dha2VfcXVldWVzKHJ0MngwMGRldi0+aHcpOwpAQCAtODksNiArOTQsMTEgQEAKIAlydDJ4MDBxdWV1ZV9zdG9wX3F1ZXVlcyhydDJ4MDBkZXYpOwogCiAJLyoKKwkgKiBTdG9wIHdhdGNoZG9nIG1vbml0b3JpbmcuCisJICovCisJcnQyeDAwbGlua19zdG9wX3dhdGNoZG9nKHJ0MngwMGRldik7CisKKwkvKgogCSAqIERpc2FibGUgUlguCiAJICovCiAJcnQyeDAwbGliX3RvZ2dsZV9yeChydDJ4MDBkZXYsIFNUQVRFX1JBRElPX1JYX09GRik7CkBAIC0xNjgsMTAgKzE3OCwzMiBAQAogLyoKICAqIEludGVycnVwdCBjb250ZXh0IGhhbmRsZXJzLgogICovCi1zdGF0aWMgdm9pZCBydDJ4MDBsaWJfYmVhY29uZG9uZV9pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsCi0JCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3N0YXRpYyB2b2lkIHJ0MngwMGxpYl9iY19idWZmZXJfaXRlcih2b2lkICpkYXRhLCB1OCAqbWFjLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKLQlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zih2aWYpOworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBkYXRhOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwkvKgorCSAqIE9ubHkgQVAgbW9kZSBpbnRlcmZhY2VzIGRvIGJyb2FkLSBhbmQgbXVsdGljYXN0IGJ1ZmZlcmluZworCSAqLworCWlmICh2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApCisJCXJldHVybjsKKworCS8qCisJICogU2VuZCBvdXQgYnVmZmVyZWQgYnJvYWQtIGFuZCBtdWx0aWNhc3QgZnJhbWVzCisJICovCisJc2tiID0gaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYyhydDJ4MDBkZXYtPmh3LCB2aWYpOworCXdoaWxlIChza2IpIHsKKwkJcnQyeDAwbWFjX3R4KHJ0MngwMGRldi0+aHcsIHNrYik7CisJCXNrYiA9IGllZWU4MDIxMV9nZXRfYnVmZmVyZWRfYmMocnQyeDAwZGV2LT5odywgdmlmKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ0MngwMGxpYl9iZWFjb251cGRhdGVfaXRlcih2b2lkICpkYXRhLCB1OCAqbWFjLAorCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBkYXRhOwogCiAJaWYgKHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCAmJgogCSAgICB2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKQEAgLTE3OSw5ICsyMTEsNyBAQAogCSAgICB2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfV0RTKQogCQlyZXR1cm47CiAKLQlzcGluX2xvY2soJmludGYtPmxvY2spOwotCWludGYtPmRlbGF5ZWRfZmxhZ3MgfD0gREVMQVlFRF9VUERBVEVfQkVBQ09OOwotCXNwaW5fdW5sb2NrKCZpbnRmLT5sb2NrKTsKKwlydDJ4MDBxdWV1ZV91cGRhdGVfYmVhY29uKHJ0MngwMGRldiwgdmlmLCB0cnVlKTsKIH0KIAogdm9pZCBydDJ4MDBsaWJfYmVhY29uZG9uZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQpAQCAtMTg5LDE0ICsyMTksMzcgQEAKIAlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9FTkFCTEVEX1JBRElPLCAmcnQyeDAwZGV2LT5mbGFncykpCiAJCXJldHVybjsKIAotCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzX2F0b21pYyhydDJ4MDBkZXYtPmh3LAotCQkJCQkJICAgcnQyeDAwbGliX2JlYWNvbmRvbmVfaXRlciwKLQkJCQkJCSAgIHJ0MngwMGRldik7CisJLyogc2VuZCBidWZmZXJlZCBiYy9tYyBmcmFtZXMgb3V0IGZvciBldmVyeSBic3NpZCAqLworCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzKHJ0MngwMGRldi0+aHcsCisJCQkJCSAgICBydDJ4MDBsaWJfYmNfYnVmZmVyX2l0ZXIsCisJCQkJCSAgICBydDJ4MDBkZXYpOworCS8qCisJICogRGV2aWNlcyB3aXRoIHByZSB0YnR0IGludGVycnVwdCBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgYmVhY29uCisJICogaGVyZSBhcyB0aGV5IHdpbGwgZmV0Y2ggdGhlIG5leHQgYmVhY29uIGRpcmVjdGx5IHByaW9yIHRvCisJICogdHJhbnNtaXNzaW9uLgorCSAqLworCWlmICh0ZXN0X2JpdChEUklWRVJfU1VQUE9SVF9QUkVfVEJUVF9JTlRFUlJVUFQsICZydDJ4MDBkZXYtPmZsYWdzKSkKKwkJcmV0dXJuOwogCi0JaWVlZTgwMjExX3F1ZXVlX3dvcmsocnQyeDAwZGV2LT5odywgJnJ0MngwMGRldi0+aW50Zl93b3JrKTsKKwkvKiBmZXRjaCBuZXh0IGJlYWNvbiAqLworCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzKHJ0MngwMGRldi0+aHcsCisJCQkJCSAgICBydDJ4MDBsaWJfYmVhY29udXBkYXRlX2l0ZXIsCisJCQkJCSAgICBydDJ4MDBkZXYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbGliX2JlYWNvbmRvbmUpOwogCit2b2lkIHJ0MngwMGxpYl9wcmV0YnR0KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJaWYgKCF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfRU5BQkxFRF9SQURJTywgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlyZXR1cm47CisKKwkvKiBmZXRjaCBuZXh0IGJlYWNvbiAqLworCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzKHJ0MngwMGRldi0+aHcsCisJCQkJCSAgICBydDJ4MDBsaWJfYmVhY29udXBkYXRlX2l0ZXIsCisJCQkJCSAgICBydDJ4MDBkZXYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbGliX3ByZXRidHQpOworCiB2b2lkIHJ0MngwMGxpYl90eGRvbmUoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwKIAkJICAgICAgc3RydWN0IHR4ZG9uZV9lbnRyeV9kZXNjICp0eGRlc2MpCiB7CkBAIC0yMTYsNiArMjY5LDE2IEBACiAJcnQyeDAwcXVldWVfdW5tYXBfc2tiKHJ0MngwMGRldiwgZW50cnktPnNrYik7CiAKIAkvKgorCSAqIFJlbW92ZSB0aGUgZXh0cmEgdHggaGVhZHJvb20gZnJvbSB0aGUgc2tiLgorCSAqLworCXNrYl9wdWxsKGVudHJ5LT5za2IsIHJ0MngwMGRldi0+b3BzLT5leHRyYV90eF9oZWFkcm9vbSk7CisKKwkvKgorCSAqIFNpZ25hbCB0aGF0IHRoZSBUWCBkZXNjcmlwdG9yIGlzIG5vIGxvbmdlciBpbiB0aGUgc2tiLgorCSAqLworCXNrYmRlc2MtPmZsYWdzICY9IH5TS0JERVNDX0RFU0NfSU5fU0tCOworCisJLyoKIAkgKiBSZW1vdmUgTDIgcGFkZGluZyB3aGljaCB3YXMgYWRkZWQgZHVyaW5nCiAJICovCiAJaWYgKHRlc3RfYml0KERSSVZFUl9SRVFVSVJFX0wyUEFELCAmcnQyeDAwZGV2LT5mbGFncykpCkBAIC0yMjQsNyArMjg3LDcgQEAKIAkvKgogCSAqIElmIHRoZSBJVi9FSVYgZGF0YSB3YXMgc3RyaXBwZWQgZnJvbSB0aGUgZnJhbWUgYmVmb3JlIGl0IHdhcwogCSAqIHBhc3NlZCB0byB0aGUgaGFyZHdhcmUsIHdlIHNob3VsZCBub3cgcmVpbnNlcnQgaXQgYWdhaW4gYmVjYXVzZQotCSAqIG1hYzgwMjExIHdpbGwgZXhwZWN0IHRoZSB0aGUgc2FtZSBkYXRhIHRvIGJlIHByZXNlbnQgaXQgdGhlCisJICogbWFjODAyMTEgd2lsbCBleHBlY3QgdGhlIHNhbWUgZGF0YSB0byBiZSBwcmVzZW50IGl0IHRoZQogCSAqIGZyYW1lIGFzIGl0IHdhcyBwYXNzZWQgdG8gdXMuCiAJICovCiAJaWYgKHRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+ZmxhZ3MpKQpAQCAtMjQxLDggKzMwNCw3IEBACiAJICovCiAJc3VjY2VzcyA9CiAJICAgIHRlc3RfYml0KFRYRE9ORV9TVUNDRVNTLCAmdHhkZXNjLT5mbGFncykgfHwKLQkgICAgdGVzdF9iaXQoVFhET05FX1VOS05PV04sICZ0eGRlc2MtPmZsYWdzKSB8fAotCSAgICB0ZXN0X2JpdChUWERPTkVfRkFMTEJBQ0ssICZ0eGRlc2MtPmZsYWdzKTsKKwkgICAgdGVzdF9iaXQoVFhET05FX1VOS05PV04sICZ0eGRlc2MtPmZsYWdzKTsKIAogCS8qCiAJICogVXBkYXRlIFRYIHN0YXRpc3RpY3MuCkBAIC0yNjQsMTEgKzMyNiwyMiBAQAogCS8qCiAJICogRnJhbWUgd2FzIHNlbmQgd2l0aCByZXRyaWVzLCBoYXJkd2FyZSB0cmllZAogCSAqIGRpZmZlcmVudCByYXRlcyB0byBzZW5kIG91dCB0aGUgZnJhbWUsIGF0IGVhY2gKLQkgKiByZXRyeSBpdCBsb3dlcmVkIHRoZSByYXRlIDEgc3RlcC4KKwkgKiByZXRyeSBpdCBsb3dlcmVkIHRoZSByYXRlIDEgc3RlcCBleGNlcHQgd2hlbiB0aGUKKwkgKiBsb3dlc3QgcmF0ZSB3YXMgdXNlZC4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgcmV0cnlfcmF0ZXMgJiYgaSA8IElFRUU4MDIxMV9UWF9NQVhfUkFURVM7IGkrKykgewogCQl0eF9pbmZvLT5zdGF0dXMucmF0ZXNbaV0uaWR4ID0gcmF0ZV9pZHggLSBpOwogCQl0eF9pbmZvLT5zdGF0dXMucmF0ZXNbaV0uZmxhZ3MgPSByYXRlX2ZsYWdzOworCisJCWlmIChyYXRlX2lkeCAtIGkgPT0gMCkgeworCQkJLyoKKwkJCSAqIFRoZSBsb3dlc3QgcmF0ZSAoaW5kZXggMCkgd2FzIHVzZWQgdW50aWwgdGhlCisJCQkgKiBudW1iZXIgb2YgbWF4IHJldHJpZXMgd2FzIHJlYWNoZWQuCisJCQkgKi8KKwkJCXR4X2luZm8tPnN0YXR1cy5yYXRlc1tpXS5jb3VudCA9IHJldHJ5X3JhdGVzIC0gaTsKKwkJCWkrKzsKKwkJCWJyZWFrOworCQl9CiAJCXR4X2luZm8tPnN0YXR1cy5yYXRlc1tpXS5jb3VudCA9IDE7CiAJfQogCWlmIChpIDwgKElFRUU4MDIxMV9UWF9NQVhfUkFURVMgLSAxKSkKQEAgLTI4MSw2ICszNTQsMjEgQEAKIAkJCXJ0MngwMGRldi0+bG93X2xldmVsX3N0YXRzLmRvdDExQUNLRmFpbHVyZUNvdW50Kys7CiAJfQogCisJLyoKKwkgKiBFdmVyeSBzaW5nbGUgZnJhbWUgaGFzIGl0J3Mgb3duIHR4IHN0YXR1cywgaGVuY2UgcmVwb3J0CisJICogZXZlcnkgZnJhbWUgYXMgYW1wZHUgb2Ygc2l6ZSAxLgorCSAqCisJICogVE9ETzogaWYgd2UgY2FuIGZpbmQgb3V0IGhvdyBtYW55IGZyYW1lcyB3ZXJlIGFnZ3JlZ2F0ZWQKKwkgKiBieSB0aGUgaHcgd2UgY291bGQgcHJvdmlkZSB0aGUgcmVhbCBhbXBkdV9sZW4gdG8gbWFjODAyMTEKKwkgKiB3aGljaCB3b3VsZCBhbGxvdyB0aGUgcmMgYWxnb3JpdGhtIHRvIGJldHRlciBkZWNpZGUgb24KKwkgKiB3aGljaCByYXRlcyBhcmUgc3VpdGFibGUuCisJICovCisJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkgeworCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVTsKKwkJdHhfaW5mby0+c3RhdHVzLmFtcGR1X2xlbiA9IDE7CisJCXR4X2luZm8tPnN0YXR1cy5hbXBkdV9hY2tfbGVuID0gc3VjY2VzcyA/IDEgOiAwOworCX0KKwogCWlmIChyYXRlX2ZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKSB7CiAJCWlmIChzdWNjZXNzKQogCQkJcnQyeDAwZGV2LT5sb3dfbGV2ZWxfc3RhdHMuZG90MTFSVFNTdWNjZXNzQ291bnQrKzsKQEAgLTI5NSw5ICszODMsMTcgQEAKIAkgKiBzZW5kIHRoZSBzdGF0dXMgcmVwb3J0IGJhY2suCiAJICovCiAJaWYgKCEoc2tiZGVzY19mbGFncyAmIFNLQkRFU0NfTk9UX01BQzgwMjExKSkKLQkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKHJ0MngwMGRldi0+aHcsIGVudHJ5LT5za2IpOworCQkvKgorCQkgKiBPbmx5IFBDSSBhbmQgU09DIGRldmljZXMgcHJvY2VzcyB0aGUgdHggc3RhdHVzIGluIHByb2Nlc3MKKwkJICogY29udGV4dC4gSGVuY2UgdXNlIGllZWU4MDIxMV90eF9zdGF0dXMgZm9yIFBDSSBhbmQgU09DCisJCSAqIGRldmljZXMgYW5kIHN0aWNrIHRvIGllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZSBmb3IgVVNCLgorCQkgKi8KKwkJaWYgKHJ0MngwMF9pc191c2IocnQyeDAwZGV2KSkKKwkJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShydDJ4MDBkZXYtPmh3LCBlbnRyeS0+c2tiKTsKKwkJZWxzZQorCQkJaWVlZTgwMjExX3R4X3N0YXR1cyhydDJ4MDBkZXYtPmh3LCBlbnRyeS0+c2tiKTsKIAllbHNlCi0JCWRldl9rZnJlZV9za2JfaXJxKGVudHJ5LT5za2IpOworCQlkZXZfa2ZyZWVfc2tiX2FueShlbnRyeS0+c2tiKTsKIAogCS8qCiAJICogTWFrZSB0aGlzIGVudHJ5IGF2YWlsYWJsZSBmb3IgcmV1c2UuCkBAIC00NDQsNyArNTQwLDE2IEBACiAJICovCiAJcnQyeDAwZGVidWdfZHVtcF9mcmFtZShydDJ4MDBkZXYsIERVTVBfRlJBTUVfUlhET05FLCBlbnRyeS0+c2tiKTsKIAltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKGVudHJ5LT5za2IpLCByeF9zdGF0dXMsIHNpemVvZigqcnhfc3RhdHVzKSk7Ci0JaWVlZTgwMjExX3J4X2lycXNhZmUocnQyeDAwZGV2LT5odywgZW50cnktPnNrYik7CisKKwkvKgorCSAqIEN1cnJlbnRseSBvbmx5IFBDSSBhbmQgU09DIGRldmljZXMgaGFuZGxlIHJ4IGludGVycnVwdHMgaW4gcHJvY2VzcworCSAqIGNvbnRleHQuIEhlbmNlLCB1c2UgaWVlZTgwMjExX3J4X2lycXNhZmUgZm9yIFVTQiBhbmQgaWVlZTgwMjExX3J4X25pCisJICogZm9yIFBDSSBhbmQgU09DIGRldmljZXMuCisJICovCisJaWYgKHJ0MngwMF9pc191c2IocnQyeDAwZGV2KSkKKwkJaWVlZTgwMjExX3J4X2lycXNhZmUocnQyeDAwZGV2LT5odywgZW50cnktPnNrYik7CisJZWxzZQorCQlpZWVlODAyMTFfcnhfbmkocnQyeDAwZGV2LT5odywgZW50cnktPnNrYik7CiAKIAkvKgogCSAqIFJlcGxhY2UgdGhlIHNrYiB3aXRoIHRoZSBmcmVzaGx5IGFsbG9jYXRlZCBvbmUuCkBAIC04NTQsNiArOTU5LDExIEBACiAJCSAgICBCSVQoTkw4MDIxMV9JRlRZUEVfV0RTKTsKIAogCS8qCisJICogSW5pdGlhbGl6ZSBjb25maWd1cmF0aW9uIHdvcmsuCisJICovCisJSU5JVF9XT1JLKCZydDJ4MDBkZXYtPmludGZfd29yaywgcnQyeDAwbGliX2ludGZfc2NoZWR1bGVkKTsKKworCS8qCiAJICogTGV0IHRoZSBkcml2ZXIgcHJvYmUgdGhlIGRldmljZSB0byBkZXRlY3QgdGhlIGNhcGFiaWxpdGllcy4KIAkgKi8KIAlyZXR2YWwgPSBydDJ4MDBkZXYtPm9wcy0+bGliLT5wcm9iZV9odyhydDJ4MDBkZXYpOwpAQCAtODYzLDExICs5NzMsNiBAQAogCX0KIAogCS8qCi0JICogSW5pdGlhbGl6ZSBjb25maWd1cmF0aW9uIHdvcmsuCi0JICovCi0JSU5JVF9XT1JLKCZydDJ4MDBkZXYtPmludGZfd29yaywgcnQyeDAwbGliX2ludGZfc2NoZWR1bGVkKTsKLQotCS8qCiAJICogQWxsb2NhdGUgcXVldWUgYXJyYXkuCiAJICovCiAJcmV0dmFsID0gcnQyeDAwcXVldWVfYWxsb2NhdGUocnQyeDAwZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkdW1wLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZHVtcC5oCmluZGV4IGVkMzAzYjQuLjVkNmUwYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkdW1wLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGR1bXAuaApAQCAtMjAsNyArMjAsMTIgQEAKIAogLyoKIAlNb2R1bGU6IHJ0MngwMGR1bXAKLQlBYnN0cmFjdDogRGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGUgcnQyeDAwZGVidWcgJiB1c2Vyc3BhY2UuCisJQWJzdHJhY3Q6CisJCURhdGEgc3RydWN0dXJlcyBmb3IgdGhlIHJ0MngwMGRlYnVnICYgdXNlcnNwYWNlLgorCisJCVRoZSBkZWNsYXJhdGlvbnMgaW4gdGhpcyBmaWxlIGNhbiBiZSB1c2VkIGJ5IGJvdGggcnQyeDAwCisJCWFuZCB1c2Vyc3BhY2UgYW5kIHRoZXJlZm9yZSBzaG91bGQgYmUga2VwdCB0b2dldGhlciBpbgorCQl0aGlzIGZpbGUuCiAgKi8KIAogI2lmbmRlZiBSVDJYMDBEVU1QX0gKQEAgLTExMSw3ICsxMTYsNyBAQAogCiAJX19sZTE2IGNoaXBfcnQ7CiAJX19sZTE2IGNoaXBfcmY7Ci0JX19sZTMyIGNoaXBfcmV2OworCV9fbGUxNiBjaGlwX3JldjsKIAogCV9fbGUxNiB0eXBlOwogCV9fdTggcXVldWVfaW5kZXg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwaHQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBodC5jCmluZGV4IDVhNDA3NjAuLmMwMDRjZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBodC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBodC5jCkBAIC00NCwxMSArNDQsMjIgQEAKIAkJdHhkZXNjLT5tcGR1X2RlbnNpdHkgPSAwOwogCiAJdHhkZXNjLT5iYV9zaXplID0gNzsJLyogRklYTUU6IFdoYXQgdmFsdWUgaXMgbmVlZGVkPyAqLwotCXR4ZGVzYy0+c3RiYyA9IDA7CS8qIEZJWE1FOiBXaGF0IHZhbHVlIGlzIG5lZWRlZD8gKi8KIAotCXR4ZGVzYy0+bWNzID0gcnQyeDAwX2dldF9yYXRlX21jcyhod3JhdGUtPm1jcyk7Ci0JaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFKQotCQl0eGRlc2MtPm1jcyB8PSAweDA4OworCXR4ZGVzYy0+c3RiYyA9CisJICAgICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfU1RCQykgPj4gSUVFRTgwMjExX1RYX0NUTF9TVEJDX1NISUZUOworCisJLyoKKwkgKiBJZiBJRUVFODAyMTFfVFhfUkNfTUNTIGlzIHNldCB0eHJhdGUtPmlkeCBqdXN0IGNvbnRhaW5zIHRoZQorCSAqIG1jcyByYXRlIHRvIGJlIHVzZWQKKwkgKi8KKwlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19NQ1MpIHsKKwkJdHhkZXNjLT5tY3MgPSB0eHJhdGUtPmlkeDsKKwl9IGVsc2UgeworCQl0eGRlc2MtPm1jcyA9IHJ0MngwMF9nZXRfcmF0ZV9tY3MoaHdyYXRlLT5tY3MpOworCQlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEUpCisJCQl0eGRlc2MtPm1jcyB8PSAweDA4OworCX0KKwogCiAJLyoKIAkgKiBDb252ZXJ0IGZsYWdzCkBAIC04NCwzICs5NSwzMSBAQAogCWVsc2UKIAkJdHhkZXNjLT50eG9wID0gVFhPUF9IVFRYT1A7CiB9CisKK3UxNiBydDJ4MDBodF9jZW50ZXJfY2hhbm5lbChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3QgaHdfbW9kZV9zcGVjICpzcGVjID0gJnJ0MngwMGRldi0+c3BlYzsKKwlpbnQgY2VudGVyX2NoYW5uZWw7CisJdTE2IGk7CisKKwkvKgorCSAqIEluaXRpYWxpemUgY2VudGVyIGNoYW5uZWwgdG8gY3VycmVudCBjaGFubmVsLgorCSAqLworCWNlbnRlcl9jaGFubmVsID0gc3BlYy0+Y2hhbm5lbHNbY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWVdLmNoYW5uZWw7CisKKwkvKgorCSAqIEFkanVzdCBjZW50ZXIgY2hhbm5lbCB0byBIVDQwKyBhbmQgSFQ0MC0gb3BlcmF0aW9uLgorCSAqLworCWlmIChjb25mX2lzX2h0NDBfcGx1cyhjb25mKSkKKwkJY2VudGVyX2NoYW5uZWwgKz0gMjsKKwllbHNlIGlmIChjb25mX2lzX2h0NDBfbWludXMoY29uZikpCisJCWNlbnRlcl9jaGFubmVsIC09IChjZW50ZXJfY2hhbm5lbCA9PSAxNCkgPyAxIDogMjsKKworCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fY2hhbm5lbHM7IGkrKykKKwkJaWYgKHNwZWMtPmNoYW5uZWxzW2ldLmNoYW5uZWwgPT0gY2VudGVyX2NoYW5uZWwpCisJCQlyZXR1cm4gaTsKKworCVdBUk5fT04oMSk7CisJcmV0dXJuIGNvbmYtPmNoYW5uZWwtPmh3X3ZhbHVlOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpYi5oCmluZGV4IGJlMmUzN2YuLmRjNWM2NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaWIuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGliLmgKQEAgLTI3LDExICsyNywxMCBAQAogI2lmbmRlZiBSVDJYMDBMSUJfSAogI2RlZmluZSBSVDJYMDBMSUJfSAogCi0jaW5jbHVkZSAicnQyeDAwZHVtcC5oIgotCiAvKgogICogSW50ZXJ2YWwgZGVmaW5lcwogICovCisjZGVmaW5lIFdBVENIRE9HX0lOVEVSVkFMCXJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoSFopCiAjZGVmaW5lIExJTktfVFVORV9JTlRFUlZBTAlyb3VuZF9qaWZmaWVzX3JlbGF0aXZlKEhaKQogCiAvKgpAQCAtMTA3LDEzICsxMDYsNiBAQAogCQkJCQlzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KTsKIAogLyoqCi0gKiBydDJ4MDBxdWV1ZV91bm1hcF9za2IgLSBVbm1hcCBhIHNrYiBmcm9tIERNQS4KLSAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgotICogQHNrYjogVGhlIHNrYiB0byB1bm1hcC4KLSAqLwotdm9pZCBydDJ4MDBxdWV1ZV91bm1hcF9za2Ioc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0KLS8qKgogICogcnQyeDAwcXVldWVfZnJlZV9za2IgLSBmcmVlIGEgc2tiCiAgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2Rldi4KICAqIEBza2I6IFRoZSBza2IgdG8gZnJlZS4KQEAgLTI2NiwxMSArMjU4LDMwIEBACiB2b2lkIHJ0MngwMGxpbmtfcmVzZXRfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgYm9vbCBhbnRlbm5hKTsKIAogLyoqCi0gKiBydDJ4MDBsaW5rX3JlZ2lzdGVyIC0gSW5pdGlhbGl6ZSBsaW5rIHR1bmluZyBmdW5jdGlvbmFsaXR5CisgKiBydDJ4MDBsaW5rX3N0YXJ0X3dhdGNoZG9nIC0gU3RhcnQgcGVyaW9kaWMgd2F0Y2hkb2cgbW9uaXRvcmluZwogICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYuCiAgKgotICogSW5pdGlhbGl6ZSB3b3JrIHN0cnVjdHVyZSBhbmQgYWxsIGxpbmsgdHVuaW5nIHJlbGF0ZWQKLSAqIHBhcmFtZXRlcnMuIFRoaXMgd2lsbCBub3Qgc3RhcnQgdGhlIGxpbmsgdHVuaW5nIHByb2Nlc3MgaXRzZWxmLgorICogVGhpcyBzdGFydCB0aGUgd2F0Y2hkb2cgcGVyaW9kaWMgd29yaywgdGhpcyB3b3JrIHdpbGwKKyAqYmUgZXhlY3V0ZWQgcGVyaW9kaWNhbGx5IHVudGlsICZydDJ4MDBsaW5rX3N0b3Bfd2F0Y2hkb2cgaGFzCisgKiBiZWVuIGNhbGxlZC4KKyAqLwordm9pZCBydDJ4MDBsaW5rX3N0YXJ0X3dhdGNoZG9nKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOworCisvKioKKyAqIHJ0MngwMGxpbmtfc3RvcF93YXRjaGRvZyAtIFN0b3AgcGVyaW9kaWMgd2F0Y2hkb2cgbW9uaXRvcmluZworICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYuCisgKgorICogQWZ0ZXIgdGhpcyBmdW5jdGlvbiBjb21wbGV0ZWQgdGhlIHdhdGNoZG9nIG1vbml0b3Jpbmcgd2lsbCBub3QKKyAqIGJlIHJ1bm5pbmcgdW50aWwgJnJ0MngwMGxpbmtfc3RhcnRfd2F0Y2hkb2cgaXMgY2FsbGVkLgorICovCit2b2lkIHJ0MngwMGxpbmtfc3RvcF93YXRjaGRvZyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKKworLyoqCisgKiBydDJ4MDBsaW5rX3JlZ2lzdGVyIC0gSW5pdGlhbGl6ZSBsaW5rIHR1bmluZyAmIHdhdGNoZG9nIGZ1bmN0aW9uYWxpdHkKKyAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgorICoKKyAqIEluaXRpYWxpemUgd29yayBzdHJ1Y3R1cmUgYW5kIGFsbCBsaW5rIHR1bmluZyBhbmQgd2F0Y2hkb2cgcmVsYXRlZAorICogcGFyYW1ldGVycy4gVGhpcyB3aWxsIG5vdCBzdGFydCB0aGUgcGVyaW9kaWMgd29yayBpdHNlbGYuCiAgKi8KIHZvaWQgcnQyeDAwbGlua19yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKIApAQCAtMjk2LDggKzMwNyw2IEBACiAjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfREVCVUdGUwogdm9pZCBydDJ4MDBkZWJ1Z19yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKIHZvaWQgcnQyeDAwZGVidWdfZGVyZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKLXZvaWQgcnQyeDAwZGVidWdfZHVtcF9mcmFtZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJICAgIGVudW0gcnQyeDAwX2R1bXBfdHlwZSB0eXBlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHZvaWQgcnQyeDAwZGVidWdfdXBkYXRlX2NyeXB0byhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgICAgIHN0cnVjdCByeGRvbmVfZW50cnlfZGVzYyAqcnhkZXNjKTsKICNlbHNlCkBAIC0zMDksMTIgKzMxOCw2IEBACiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBydDJ4MDBkZWJ1Z19kdW1wX2ZyYW1lKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkJCSAgZW51bSBydDJ4MDBfZHVtcF90eXBlIHR5cGUsCi0JCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMGRlYnVnX3VwZGF0ZV9jcnlwdG8oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCQkJICAgICBzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2MgKnJ4ZGVzYykKIHsKQEAgLTM4NCwxMiArMzg3LDIxIEBACiB2b2lkIHJ0MngwMGh0X2NyZWF0ZV90eF9kZXNjcmlwdG9yKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCiAJCQkJICAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBydDJ4MDBfcmF0ZSAqaHdyYXRlKTsKKwordTE2IHJ0MngwMGh0X2NlbnRlcl9jaGFubmVsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkgICAgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwaHRfY3JlYXRlX3R4X2Rlc2NyaXB0b3Ioc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwKIAkJCQkJCSBzdHJ1Y3QgdHhlbnRyeV9kZXNjICp0eGRlc2MsCiAJCQkJCQkgY29uc3Qgc3RydWN0IHJ0MngwMF9yYXRlICpod3JhdGUpCiB7CiB9CisKK3N0YXRpYyBpbmxpbmUgdTE2IHJ0MngwMGh0X2NlbnRlcl9jaGFubmVsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJCSAgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQoreworCXJldHVybiBjb25mLT5jaGFubmVsLT5od192YWx1ZTsKK30KICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9IVCAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpbmsuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaW5rLmMKaW5kZXggMGVmYmY1YS4uNjY2Y2VmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpbmsuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGluay5jCkBAIC0yNzEsMTEgKzI3MSwyMCBAQAogCiAJLyoKIAkgKiBMaW5rIHR1bmluZyBzaG91bGQgb25seSBiZSBwZXJmb3JtZWQgd2hlbgotCSAqIGFuIGFjdGl2ZSBzdGEgb3IgbWFzdGVyIGludGVyZmFjZSBleGlzdHMuCi0JICogU2luZ2xlIG1vbml0b3IgbW9kZSBpbnRlcmZhY2VzIHNob3VsZCBuZXZlciBoYXZlCi0JICogd29yayB3aXRoIGxpbmsgdHVuZXJzLgorCSAqIGFuIGFjdGl2ZSBzdGEgaW50ZXJmYWNlIGV4aXN0cy4gQVAgaW50ZXJmYWNlcworCSAqIGRvbid0IG5lZWQgbGluayB0dW5pbmcgYW5kIG1vbml0b3IgbW9kZSBpbnRlcmZhY2VzCisJICogc2hvdWxkIG5ldmVyIGhhdmUgdG8gd29yayB3aXRoIGxpbmsgdHVuZXJzLgogCSAqLwotCWlmICghcnQyeDAwZGV2LT5pbnRmX2FwX2NvdW50ICYmICFydDJ4MDBkZXYtPmludGZfc3RhX2NvdW50KQorCWlmICghcnQyeDAwZGV2LT5pbnRmX3N0YV9jb3VudCkKKwkJcmV0dXJuOworCisJLyoqCisJICogV2hpbGUgc2Nhbm5pbmcsIGxpbmsgdHVuaW5nIGlzIGRpc2FibGVkLiBCeSBkZWZhdWx0CisJICogdGhlIG1vc3Qgc2Vuc2l0aXZlIHNldHRpbmdzIHdpbGwgYmUgdXNlZCB0byBtYWtlIHN1cmUKKwkgKiB0aGF0IGFsbCBiZWFjb25zIGFuZCBwcm9iZSByZXNwb25zZXMgd2lsbCBiZSByZWNpZXZlZAorCSAqIGR1cmluZyB0aGUgc2Nhbi4KKwkgKi8KKwlpZiAodGVzdF9iaXQoREVWSUNFX1NUQVRFX1NDQU5OSU5HLCAmcnQyeDAwZGV2LT5mbGFncykpCiAJCXJldHVybjsKIAogCXJ0MngwMGxpbmtfcmVzZXRfdHVuZXIocnQyeDAwZGV2LCBmYWxzZSk7CkBAIC0yOTMsNiArMzAyLDcgQEAKIHZvaWQgcnQyeDAwbGlua19yZXNldF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBib29sIGFudGVubmEpCiB7CiAJc3RydWN0IGxpbmtfcXVhbCAqcXVhbCA9ICZydDJ4MDBkZXYtPmxpbmsucXVhbDsKKwl1OCB2Z2NfbGV2ZWwgPSBxdWFsLT52Z2NfbGV2ZWxfcmVnOwogCiAJaWYgKCF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfRU5BQkxFRF9SQURJTywgJnJ0MngwMGRldi0+ZmxhZ3MpKQogCQlyZXR1cm47CkBAIC0zMDksNiArMzE5LDEzIEBACiAJbWVtc2V0KHF1YWwsIDAsIHNpemVvZigqcXVhbCkpOwogCiAJLyoKKwkgKiBSZXN0b3JlIHRoZSBWR0MgbGV2ZWwgYXMgc3RvcmVkIGluIHRoZSByZWdpc3RlcnMsCisJICogdGhlIGRyaXZlciBjYW4gdXNlIHRoaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZWdpc3RlcgorCSAqIG11c3QgYmUgdXBkYXRlZCBkdXJpbmcgcmVzZXQgb3Igbm90LgorCSAqLworCXF1YWwtPnZnY19sZXZlbF9yZWcgPSB2Z2NfbGV2ZWw7CisKKwkvKgogCSAqIFJlc2V0IHRoZSBsaW5rIHR1bmVyLgogCSAqLwogCXJ0MngwMGRldi0+b3BzLT5saWItPnJlc2V0X3R1bmVyKHJ0MngwMGRldiwgcXVhbCk7CkBAIC0zMzgsNyArMzU1LDggQEAKIAkgKiBXaGVuIHRoZSByYWRpbyBpcyBzaHV0dGluZyBkb3duIHdlIHNob3VsZAogCSAqIGltbWVkaWF0ZWx5IGNlYXNlIGFsbCBsaW5rIHR1bmluZy4KIAkgKi8KLQlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9FTkFCTEVEX1JBRElPLCAmcnQyeDAwZGV2LT5mbGFncykpCisJaWYgKCF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfRU5BQkxFRF9SQURJTywgJnJ0MngwMGRldi0+ZmxhZ3MpIHx8CisJICAgIHRlc3RfYml0KERFVklDRV9TVEFURV9TQ0FOTklORywgJnJ0MngwMGRldi0+ZmxhZ3MpKQogCQlyZXR1cm47CiAKIAkvKgpAQCAtMzU5LDEwICszNzcsMTEgQEAKIAkJcXVhbC0+cnNzaSA9IGxpbmstPmF2Z19yc3NpLmF2ZzsKIAogCS8qCi0JICogT25seSBwZXJmb3JtIHRoZSBsaW5rIHR1bmluZyB3aGVuIExpbmsgdHVuaW5nCi0JICogaGFzIGJlZW4gZW5hYmxlZCAoVGhpcyBjb3VsZCBoYXZlIGJlZW4gZGlzYWJsZWQgZnJvbSB0aGUgRUVQUk9NKS4KKwkgKiBDaGVjayBpZiBsaW5rIHR1bmluZyBpcyBzdXBwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlLCBzb21lIGhhcmR3YXJlCisJICogZG8gbm90IHN1cHBvcnQgbGluayB0dW5pbmcgYXQgYWxsLCB3aGlsZSBvdGhlciBkZXZpY2VzIGNhbiBkaXNhYmxlCisJICogdGhlIGZlYXR1cmUgZnJvbSB0aGUgRUVQUk9NLgogCSAqLwotCWlmICghdGVzdF9iaXQoQ09ORklHX0RJU0FCTEVfTElOS19UVU5JTkcsICZydDJ4MDBkZXYtPmZsYWdzKSkKKwlpZiAodGVzdF9iaXQoRFJJVkVSX1NVUFBPUlRfTElOS19UVU5JTkcsICZydDJ4MDBkZXYtPmZsYWdzKSkKIAkJcnQyeDAwZGV2LT5vcHMtPmxpYi0+bGlua190dW5lcihydDJ4MDBkZXYsIHF1YWwsIGxpbmstPmNvdW50KTsKIAogCS8qCkBAIC0zODgsNyArNDA3LDQ1IEBACiAJCQkJCSAgICAgJmxpbmstPndvcmssIExJTktfVFVORV9JTlRFUlZBTCk7CiB9CiAKK3ZvaWQgcnQyeDAwbGlua19zdGFydF93YXRjaGRvZyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXN0cnVjdCBsaW5rICpsaW5rID0gJnJ0MngwMGRldi0+bGluazsKKworCWlmICghdGVzdF9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKSB8fAorCSAgICAhdGVzdF9iaXQoRFJJVkVSX1NVUFBPUlRfV0FUQ0hET0csICZydDJ4MDBkZXYtPmZsYWdzKSkKKwkJcmV0dXJuOworCisJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhydDJ4MDBkZXYtPmh3LAorCQkJCSAgICAgJmxpbmstPndhdGNoZG9nX3dvcmssIFdBVENIRE9HX0lOVEVSVkFMKTsKK30KKwordm9pZCBydDJ4MDBsaW5rX3N0b3Bfd2F0Y2hkb2coc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnJ0MngwMGRldi0+bGluay53YXRjaGRvZ193b3JrKTsKK30KKworc3RhdGljIHZvaWQgcnQyeDAwbGlua193YXRjaGRvZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9CisJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnQyeDAwX2RldiwgbGluay53YXRjaGRvZ193b3JrLndvcmspOworCXN0cnVjdCBsaW5rICpsaW5rID0gJnJ0MngwMGRldi0+bGluazsKKworCS8qCisJICogV2hlbiB0aGUgcmFkaW8gaXMgc2h1dHRpbmcgZG93biB3ZSBzaG91bGQKKwkgKiBpbW1lZGlhdGVseSBjZWFzZSB0aGUgd2F0Y2hkb2cgbW9uaXRvcmluZy4KKwkgKi8KKwlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9FTkFCTEVEX1JBRElPLCAmcnQyeDAwZGV2LT5mbGFncykpCisJCXJldHVybjsKKworCXJ0MngwMGRldi0+b3BzLT5saWItPndhdGNoZG9nKHJ0MngwMGRldik7CisKKwlpZiAodGVzdF9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKSkKKwkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhydDJ4MDBkZXYtPmh3LAorCQkJCQkgICAgICZsaW5rLT53YXRjaGRvZ193b3JrLCBXQVRDSERPR19JTlRFUlZBTCk7Cit9CisKIHZvaWQgcnQyeDAwbGlua19yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogeworCUlOSVRfREVMQVlFRF9XT1JLKCZydDJ4MDBkZXYtPmxpbmsud2F0Y2hkb2dfd29yaywgcnQyeDAwbGlua193YXRjaGRvZyk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnJ0MngwMGRldi0+bGluay53b3JrLCBydDJ4MDBsaW5rX3R1bmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBtYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBtYWMuYwppbmRleCBhYmJkODU3Li4yMzVlMDM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jCkBAIC0yNzMsMTYgKzI3MywyNCBAQAogCW11dGV4X2luaXQoJmludGYtPmJlYWNvbl9za2JfbXV0ZXgpOwogCWludGYtPmJlYWNvbiA9IGVudHJ5OwogCi0JaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJbWVtY3B5KCZpbnRmLT5ic3NpZCwgdmlmLT5hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KCZpbnRmLT5tYWMsIHZpZi0+YWRkciwgRVRIX0FMRU4pOwotCiAJLyoKIAkgKiBUaGUgTUFDIGFkZGRyZXNzIG11c3QgYmUgY29uZmlndXJlZCBhZnRlciB0aGUgZGV2aWNlCiAJICogaGFzIGJlZW4gaW5pdGlhbGl6ZWQuIE90aGVyd2lzZSB0aGUgZGV2aWNlIGNhbiByZXNldAogCSAqIHRoZSBNQUMgcmVnaXN0ZXJzLgorCSAqIFRoZSBCU1NJRCBhZGRyZXNzIG11c3Qgb25seSBiZSBjb25maWd1cmVkIGluIEFQIG1vZGUsCisJICogaG93ZXZlciB3ZSBzaG91bGQgbm90IHNlbmQgYW4gZW1wdHkgQlNTSUQgYWRkcmVzcyBmb3IKKwkgKiBTVEEgaW50ZXJmYWNlcyBhdCB0aGlzIHRpbWUsIHNpbmNlIHRoaXMgY2FuIGNhdXNlCisJICogaW52YWxpZCBiZWhhdmlvciBpbiB0aGUgZGV2aWNlLgogCSAqLwotCXJ0MngwMGxpYl9jb25maWdfaW50ZihydDJ4MDBkZXYsIGludGYsIHZpZi0+dHlwZSwgaW50Zi0+bWFjLCBOVUxMKTsKKwltZW1jcHkoJmludGYtPm1hYywgdmlmLT5hZGRyLCBFVEhfQUxFTik7CisJaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgeworCQltZW1jcHkoJmludGYtPmJzc2lkLCB2aWYtPmFkZHIsIEVUSF9BTEVOKTsKKwkJcnQyeDAwbGliX2NvbmZpZ19pbnRmKHJ0MngwMGRldiwgaW50ZiwgdmlmLT50eXBlLAorCQkJCSAgICAgIGludGYtPm1hYywgaW50Zi0+YnNzaWQpOworCX0gZWxzZSB7CisJCXJ0MngwMGxpYl9jb25maWdfaW50ZihydDJ4MDBkZXYsIGludGYsIHZpZi0+dHlwZSwKKwkJCQkgICAgICBpbnRmLT5tYWMsIE5VTEwpOworCX0KIAogCS8qCiAJICogU29tZSBmaWx0ZXJzIGRlcGVuZCBvbiB0aGUgY3VycmVudCB3b3JraW5nIG1vZGUuIFdlIGNhbiBmb3JjZQpAQCAtMzQ2LDkgKzM1NCwxMSBAQAogCS8qCiAJICogU29tZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgKGUuZy4gY2hhbm5lbCBhbmQgYW50ZW5uYSB2YWx1ZXMpIGNhbgogCSAqIG9ubHkgYmUgc2V0IHdoZW4gdGhlIHJhZGlvIGlzIGVuYWJsZWQsIGJ1dCBkbyByZXF1aXJlIHRoZSBSWCB0bwotCSAqIGJlIG9mZi4KKwkgKiBiZSBvZmYuIER1cmluZyB0aGlzIHBlcmlvZCB3ZSBzaG91bGQga2VlcCBsaW5rIHR1bmluZyBlbmFibGVkLAorCSAqIGlmIGZvciBhbnkgcmVhc29uIHRoZSBsaW5rIHR1bmVyIG11c3QgYmUgcmVzZXQsIHRoaXMgd2lsbCBiZQorCSAqIGhhbmRsZWQgYnkgcnQyeDAwbGliX2NvbmZpZygpLgogCSAqLwotCXJ0MngwMGxpYl90b2dnbGVfcngocnQyeDAwZGV2LCBTVEFURV9SQURJT19SWF9PRkYpOworCXJ0MngwMGxpYl90b2dnbGVfcngocnQyeDAwZGV2LCBTVEFURV9SQURJT19SWF9PRkZfTElOSyk7CiAKIAkvKgogCSAqIFdoZW4gd2UndmUganVzdCB0dXJuZWQgb24gdGhlIHJhZGlvLCB3ZSB3YW50IHRvIHJlcHJvZ3JhbQpAQCAtMzY2LDcgKzM3Niw3IEBACiAJcnQyeDAwbGliX2NvbmZpZ19hbnRlbm5hKHJ0MngwMGRldiwgcnQyeDAwZGV2LT5kZWZhdWx0X2FudCk7CiAKIAkvKiBUdXJuIFJYIGJhY2sgb24gKi8KLQlydDJ4MDBsaWJfdG9nZ2xlX3J4KHJ0MngwMGRldiwgU1RBVEVfUkFESU9fUlhfT04pOworCXJ0MngwMGxpYl90b2dnbGVfcngocnQyeDAwZGV2LCBTVEFURV9SQURJT19SWF9PTl9MSU5LKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDMwLDEyICs0NDAsMzYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMG1hY19jb25maWd1cmVfZmlsdGVyKTsKIAorc3RhdGljIHZvaWQgcnQyeDAwbWFjX3NldF90aW1faXRlcih2b2lkICpkYXRhLCB1OCAqbWFjLAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IHJ0MngwMF9pbnRmICppbnRmID0gdmlmX3RvX2ludGYodmlmKTsKKworCWlmICh2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVAgJiYKKwkgICAgdmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DICYmCisJICAgIHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UICYmCisJICAgIHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9XRFMpCisJCXJldHVybjsKKworCXNwaW5fbG9jaygmaW50Zi0+bG9jayk7CisJaW50Zi0+ZGVsYXllZF9mbGFncyB8PSBERUxBWUVEX1VQREFURV9CRUFDT047CisJc3Bpbl91bmxvY2soJmludGYtPmxvY2spOworfQorCiBpbnQgcnQyeDAwbWFjX3NldF90aW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCSAgICAgIGJvb2wgc2V0KQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKIAotCXJ0MngwMGxpYl9iZWFjb25kb25lKHJ0MngwMGRldik7CisJaWYgKCF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfRU5BQkxFRF9SQURJTywgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlyZXR1cm4gMDsKKworCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzX2F0b21pYyhydDJ4MDBkZXYtPmh3LAorCQkJCQkJICAgcnQyeDAwbWFjX3NldF90aW1faXRlciwKKwkJCQkJCSAgIHJ0MngwMGRldik7CisKKwkvKiBxdWV1ZSB3b3JrIHRvIHVwb2RhdGUgdGhlIGJlYWNvbiB0ZW1wbGF0ZSAqLworCWllZWU4MDIxMV9xdWV1ZV93b3JrKHJ0MngwMGRldi0+aHcsICZydDJ4MDBkZXYtPmludGZfd29yayk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBtYWNfc2V0X3RpbSk7CkBAIC01MzksNiArNTczLDIyIEBACiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBtYWNfc2V0X2tleSk7CiAjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfQ1JZUFRPICovCiAKK3ZvaWQgcnQyeDAwbWFjX3N3X3NjYW5fc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OworCV9fc2V0X2JpdChERVZJQ0VfU1RBVEVfU0NBTk5JTkcsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwlydDJ4MDBsaW5rX3N0b3BfdHVuZXIocnQyeDAwZGV2KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMG1hY19zd19zY2FuX3N0YXJ0KTsKKwordm9pZCBydDJ4MDBtYWNfc3dfc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gaHctPnByaXY7CisJX19jbGVhcl9iaXQoREVWSUNFX1NUQVRFX1NDQU5OSU5HLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJcnQyeDAwbGlua19zdGFydF90dW5lcihydDJ4MDBkZXYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbWFjX3N3X3NjYW5fY29tcGxldGUpOworCiBpbnQgcnQyeDAwbWFjX2dldF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCXN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cykKIHsKQEAgLTU2Miw3ICs2MTIsNiBAQAogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKIAlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zih2aWYpOwotCWludCB1cGRhdGVfYnNzaWQgPSAwOwogCiAJLyoKIAkgKiBtYWM4MDIxMSBtaWdodCBiZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2hpbGUgd2UgYXJlIHRyeWluZwpAQCAtNTc3LDEwICs2MjYsOCBAQAogCSAqIGNvbmYtPmJzc2lkIGNhbiBiZSBOVUxMIGlmIGNvbWluZyBmcm9tIHRoZSBpbnRlcm5hbAogCSAqIGJlYWNvbiB1cGRhdGUgcm91dGluZS4KIAkgKi8KLQlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0JTU0lEKSB7Ci0JCXVwZGF0ZV9ic3NpZCA9IDE7CisJaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9CU1NJRCkKIAkJbWVtY3B5KCZpbnRmLT5ic3NpZCwgYnNzX2NvbmYtPmJzc2lkLCBFVEhfQUxFTik7Ci0JfQogCiAJc3Bpbl91bmxvY2soJmludGYtPmxvY2spOwogCkBAIC01OTIsNyArNjM5LDcgQEAKIAkgKi8KIAlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0JTU0lEKQogCQlydDJ4MDBsaWJfY29uZmlnX2ludGYocnQyeDAwZGV2LCBpbnRmLCB2aWYtPnR5cGUsIE5VTEwsCi0JCQkJICAgICAgdXBkYXRlX2Jzc2lkID8gYnNzX2NvbmYtPmJzc2lkIDogTlVMTCk7CisJCQkJICAgICAgYnNzX2NvbmYtPmJzc2lkKTsKIAogCS8qCiAJICogVXBkYXRlIHRoZSBiZWFjb24uCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmMKaW5kZXggZjcxZWVlNi4uMTliMjYyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuYwpAQCAtNjAsMzQgKzYwLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMHBjaV9yZWdidXN5X3JlYWQpOwogCi0vKgotICogVFggZGF0YSBoYW5kbGVycy4KLSAqLwotaW50IHJ0MngwMHBjaV93cml0ZV90eF9kYXRhKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCi0JCQkgICAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjKQotewotCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBlbnRyeS0+cXVldWUtPnJ0MngwMGRldjsKLQotCS8qCi0JICogVGhpcyBzaG91bGQgbm90IGhhcHBlbiwgd2UgYWxyZWFkeSBjaGVja2VkIHRoZSBlbnRyeQotCSAqIHdhcyBvdXJzLiBXaGVuIHRoZSBoYXJkd2FyZSBkaXNhZ3JlZXMgdGhlcmUgaGFzIGJlZW4KLQkgKiBhIHF1ZXVlIGNvcnJ1cHRpb24hCi0JICovCi0JaWYgKHVubGlrZWx5KHJ0MngwMGRldi0+b3BzLT5saWItPmdldF9lbnRyeV9zdGF0ZShlbnRyeSkpKSB7Ci0JCUVSUk9SKHJ0MngwMGRldiwKLQkJICAgICAgIkNvcnJ1cHQgcXVldWUgJWQsIGFjY2Vzc2luZyBlbnRyeSB3aGljaCBpcyBub3Qgb3Vycy5cbiIKLQkJICAgICAgIlBsZWFzZSBmaWxlIGJ1ZyByZXBvcnQgdG8gJXMuXG4iLAotCQkgICAgICBlbnRyeS0+cXVldWUtPnFpZCwgRFJWX1BST0pFQ1QpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMHBjaV93cml0ZV90eF9kYXRhKTsKLQotLyoKLSAqIFRYL1JYIGRhdGEgaGFuZGxlcnMuCi0gKi8KIHZvaWQgcnQyeDAwcGNpX3J4ZG9uZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewogCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSA9IHJ0MngwMGRldi0+cng7CkBAIC0xODEsOCArMTUzLDEwIEBACiAJLyoKIAkgKiBSZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlci4KIAkgKi8KLQlzdGF0dXMgPSByZXF1ZXN0X2lycShydDJ4MDBkZXYtPmlycSwgcnQyeDAwZGV2LT5vcHMtPmxpYi0+aXJxX2hhbmRsZXIsCi0JCQkgICAgIElSUUZfU0hBUkVELCBydDJ4MDBkZXYtPm5hbWUsIHJ0MngwMGRldik7CisJc3RhdHVzID0gcmVxdWVzdF90aHJlYWRlZF9pcnEocnQyeDAwZGV2LT5pcnEsCisJCQkJICAgICAgcnQyeDAwZGV2LT5vcHMtPmxpYi0+aXJxX2hhbmRsZXIsCisJCQkJICAgICAgcnQyeDAwZGV2LT5vcHMtPmxpYi0+aXJxX2hhbmRsZXJfdGhyZWFkLAorCQkJCSAgICAgIElSUUZfU0hBUkVELCBydDJ4MDBkZXYtPm5hbWUsIHJ0MngwMGRldik7CiAJaWYgKHN0YXR1cykgewogCQlFUlJPUihydDJ4MDBkZXYsICJJUlEgJWQgYWxsb2NhdGlvbiBmYWlsZWQgKGVycm9yICVkKS5cbiIsCiAJCSAgICAgIHJ0MngwMGRldi0+aXJxLCBzdGF0dXMpOwpAQCAtMzA1LDcgKzI3OSwxMCBAQAogCXJ0MngwMGRldi0+aXJxID0gcGNpX2Rldi0+aXJxOwogCXJ0MngwMGRldi0+bmFtZSA9IHBjaV9uYW1lKHBjaV9kZXYpOwogCi0JcnQyeDAwX3NldF9jaGlwX2ludGYocnQyeDAwZGV2LCBSVDJYMDBfQ0hJUF9JTlRGX1BDSSk7CisJaWYgKHBjaV9kZXYtPmlzX3BjaWUpCisJCXJ0MngwMF9zZXRfY2hpcF9pbnRmKHJ0MngwMGRldiwgUlQyWDAwX0NISVBfSU5URl9QQ0lFKTsKKwllbHNlCisJCXJ0MngwMF9zZXRfY2hpcF9pbnRmKHJ0MngwMGRldiwgUlQyWDAwX0NISVBfSU5URl9QQ0kpOwogCiAJcmV0dmFsID0gcnQyeDAwcGNpX2FsbG9jX3JlZyhydDJ4MDBkZXYpOwogCWlmIChyZXR2YWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmgKaW5kZXggNTFiY2VmMy4uYjg1NGQ2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuaApAQCAtODYsMTYgKzg2LDYgQEAKIAkJCSAgIHUzMiAqcmVnKTsKIAogLyoqCi0gKiBydDJ4MDBwY2lfd3JpdGVfdHhfZGF0YSAtIEluaXRpYWxpemUgZGF0YSBmb3IgVFggb3BlcmF0aW9uCi0gKiBAZW50cnk6IFRoZSBlbnRyeSB3aGVyZSB0aGUgZnJhbWUgaXMgbG9jYXRlZAotICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBpbml0aWFsaXplIHRoZSBETUEgYW5kIHNrYiBkZXNjcmlwdG9yCi0gKiB0byBwcmVwYXJlIHRoZSBlbnRyeSBmb3IgdGhlIGFjdHVhbCBUWCBvcGVyYXRpb24uCi0gKi8KLWludCBydDJ4MDBwY2lfd3JpdGVfdHhfZGF0YShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAotCQkJICAgIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYyk7Ci0KLS8qKgogICogc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpOiBQZXIgZW50cnkgUENJIHNwZWNpZmljIGluZm9ybWF0aW9uCiAgKgogICogQGRlc2M6IFBvaW50ZXIgdG8gZGV2aWNlIGRlc2NyaXB0b3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKaW5kZXggMjBkYmRkNi4uYTM0MDFkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKQEAgLTEwMCwyMSArMTAwLDggQEAKIHsKIAlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2Moc2tiKTsKIAotCS8qCi0JICogSWYgZGV2aWNlIGhhcyByZXF1ZXN0ZWQgaGVhZHJvb20sIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhhdAotCSAqIGlzIGFsc28gbWFwcGVkIHRvIHRoZSBETUEgc28gaXQgY2FuIGJlIHVzZWQgZm9yIHRyYW5zZmVyaW5nCi0JICogYWRkaXRpb25hbCBkZXNjcmlwdG9yIGluZm9ybWF0aW9uIHRvIHRoZSBoYXJkd2FyZS4KLQkgKi8KLQlza2JfcHVzaChza2IsIHJ0MngwMGRldi0+b3BzLT5leHRyYV90eF9oZWFkcm9vbSk7Ci0KIAlza2JkZXNjLT5za2JfZG1hID0KIAkgICAgZG1hX21hcF9zaW5nbGUocnQyeDAwZGV2LT5kZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOwotCi0JLyoKLQkgKiBSZXN0b3JlIGRhdGEgcG9pbnRlciB0byBvcmlnaW5hbCBsb2NhdGlvbiBhZ2Fpbi4KLQkgKi8KLQlza2JfcHVsbChza2IsIHJ0MngwMGRldi0+b3BzLT5leHRyYV90eF9oZWFkcm9vbSk7Ci0KIAlza2JkZXNjLT5mbGFncyB8PSBTS0JERVNDX0RNQV9NQVBQRURfVFg7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBxdWV1ZV9tYXBfdHhza2IpOwpAQCAtMTMwLDE2ICsxMTcsMTIgQEAKIAl9CiAKIAlpZiAoc2tiZGVzYy0+ZmxhZ3MgJiBTS0JERVNDX0RNQV9NQVBQRURfVFgpIHsKLQkJLyoKLQkJICogQWRkIGhlYWRyb29tIHRvIHRoZSBza2IgbGVuZ3RoLCBpdCBoYXMgYmVlbiByZW1vdmVkCi0JCSAqIGJ5IHRoZSBkcml2ZXIsIGJ1dCBpdCB3YXMgYWN0dWFsbHkgbWFwcGVkIHRvIERNQS4KLQkJICovCi0JCWRtYV91bm1hcF9zaW5nbGUocnQyeDAwZGV2LT5kZXYsIHNrYmRlc2MtPnNrYl9kbWEsCi0JCQkJIHNrYi0+bGVuICsgcnQyeDAwZGV2LT5vcHMtPmV4dHJhX3R4X2hlYWRyb29tLAorCQlkbWFfdW5tYXBfc2luZ2xlKHJ0MngwMGRldi0+ZGV2LCBza2JkZXNjLT5za2JfZG1hLCBza2ItPmxlbiwKIAkJCQkgRE1BX1RPX0RFVklDRSk7CiAJCXNrYmRlc2MtPmZsYWdzICY9IH5TS0JERVNDX0RNQV9NQVBQRURfVFg7CiAJfQogfQorRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwcXVldWVfdW5tYXBfc2tiKTsKIAogdm9pZCBydDJ4MDBxdWV1ZV9mcmVlX3NrYihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtMzcwLDEzICszNTMsMTggQEAKIAkvKgogCSAqIENoZWNrIGlmIG1vcmUgZnJhZ21lbnRzIGFyZSBwZW5kaW5nCiAJICovCi0JaWYgKGllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGhkci0+ZnJhbWVfY29udHJvbCkgfHwKLQkgICAgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9NT1JFX0ZSQU1FUykpIHsKKwlpZiAoaWVlZTgwMjExX2hhc19tb3JlZnJhZ3MoaGRyLT5mcmFtZV9jb250cm9sKSkgewogCQlfX3NldF9iaXQoRU5UUllfVFhEX0JVUlNULCAmdHhkZXNjLT5mbGFncyk7CiAJCV9fc2V0X2JpdChFTlRSWV9UWERfTU9SRV9GUkFHLCAmdHhkZXNjLT5mbGFncyk7CiAJfQogCiAJLyoKKwkgKiBDaGVjayBpZiBtb3JlIGZyYW1lcyAoIT0gZnJhZ21lbnRzKSBhcmUgcGVuZGluZworCSAqLworCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTU9SRV9GUkFNRVMpCisJCV9fc2V0X2JpdChFTlRSWV9UWERfQlVSU1QsICZ0eGRlc2MtPmZsYWdzKTsKKworCS8qCiAJICogQmVhY29ucyBhbmQgcHJvYmUgcmVzcG9uc2VzIHJlcXVpcmUgdGhlIHRzZiB0aW1lc3RhbXAKIAkgKiB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZSBmcmFtZSwgZXhjZXB0IGZvciBhIGZyYW1lIHRoYXQgaGFzIGJlZW4gaW5qZWN0ZWQKIAkgKiB0aHJvdWdoIGEgbW9uaXRvciBpbnRlcmZhY2UuIFRoaXMgbGF0dGVyIGlzIG5lZWRlZCBmb3IgdGVzdGluZyBhCkBAIC00MTYsMTIgKzQwNCw1MSBAQAogCXJ0MngwMHF1ZXVlX2NyZWF0ZV90eF9kZXNjcmlwdG9yX3BsY3AoZW50cnksIHR4ZGVzYywgaHdyYXRlKTsKIH0KIAorc3RhdGljIGludCBydDJ4MDBxdWV1ZV93cml0ZV90eF9kYXRhKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCisJCQkJICAgICBzdHJ1Y3QgdHhlbnRyeV9kZXNjICp0eGRlc2MpCit7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2OworCisJLyoKKwkgKiBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCB3ZSBhbHJlYWR5IGNoZWNrZWQgdGhlIGVudHJ5CisJICogd2FzIG91cnMuIFdoZW4gdGhlIGhhcmR3YXJlIGRpc2FncmVlcyB0aGVyZSBoYXMgYmVlbgorCSAqIGEgcXVldWUgY29ycnVwdGlvbiEKKwkgKi8KKwlpZiAodW5saWtlbHkocnQyeDAwZGV2LT5vcHMtPmxpYi0+Z2V0X2VudHJ5X3N0YXRlICYmCisJCSAgICAgcnQyeDAwZGV2LT5vcHMtPmxpYi0+Z2V0X2VudHJ5X3N0YXRlKGVudHJ5KSkpIHsKKwkJRVJST1IocnQyeDAwZGV2LAorCQkgICAgICAiQ29ycnVwdCBxdWV1ZSAlZCwgYWNjZXNzaW5nIGVudHJ5IHdoaWNoIGlzIG5vdCBvdXJzLlxuIgorCQkgICAgICAiUGxlYXNlIGZpbGUgYnVnIHJlcG9ydCB0byAlcy5cbiIsCisJCSAgICAgIGVudHJ5LT5xdWV1ZS0+cWlkLCBEUlZfUFJPSkVDVCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogQWRkIHRoZSByZXF1ZXN0ZWQgZXh0cmEgdHggaGVhZHJvb20gaW4gZnJvbnQgb2YgdGhlIHNrYi4KKwkgKi8KKwlza2JfcHVzaChlbnRyeS0+c2tiLCBydDJ4MDBkZXYtPm9wcy0+ZXh0cmFfdHhfaGVhZHJvb20pOworCW1lbXNldChlbnRyeS0+c2tiLT5kYXRhLCAwLCBydDJ4MDBkZXYtPm9wcy0+ZXh0cmFfdHhfaGVhZHJvb20pOworCisJLyoKKwkgKiBDYWxsIHRoZSBkcml2ZXIncyB3cml0ZV90eF9kYXRhIGZ1bmN0aW9uLCBpZiBpdCBleGlzdHMuCisJICovCisJaWYgKHJ0MngwMGRldi0+b3BzLT5saWItPndyaXRlX3R4X2RhdGEpCisJCXJ0MngwMGRldi0+b3BzLT5saWItPndyaXRlX3R4X2RhdGEoZW50cnksIHR4ZGVzYyk7CisKKwkvKgorCSAqIE1hcCB0aGUgc2tiIHRvIERNQS4KKwkgKi8KKwlpZiAodGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfRE1BLCAmcnQyeDAwZGV2LT5mbGFncykpCisJCXJ0MngwMHF1ZXVlX21hcF90eHNrYihydDJ4MDBkZXYsIGVudHJ5LT5za2IpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIHJ0MngwMHF1ZXVlX3dyaXRlX3R4X2Rlc2NyaXB0b3Ioc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwKIAkJCQkJICAgIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYykKIHsKIAlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUgPSBlbnRyeS0+cXVldWU7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IHF1ZXVlLT5ydDJ4MDBkZXY7Ci0JZW51bSBydDJ4MDBfZHVtcF90eXBlIGR1bXBfdHlwZTsKIAogCXJ0MngwMGRldi0+b3BzLT5saWItPndyaXRlX3R4X2Rlc2MocnQyeDAwZGV2LCBlbnRyeS0+c2tiLCB0eGRlc2MpOwogCkBAIC00MjksOSArNDU2LDcgQEAKIAkgKiBBbGwgcHJvY2Vzc2luZyBvbiB0aGUgZnJhbWUgaGFzIGJlZW4gY29tcGxldGVkLCB0aGlzIG1lYW5zCiAJICogaXQgaXMgbm93IHJlYWR5IHRvIGJlIGR1bXBlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCBkZWJ1Z2ZzLgogCSAqLwotCWR1bXBfdHlwZSA9ICh0eGRlc2MtPnF1ZXVlID09IFFJRF9CRUFDT04pID8KLQkJCQkJRFVNUF9GUkFNRV9CRUFDT04gOiBEVU1QX0ZSQU1FX1RYOwotCXJ0MngwMGRlYnVnX2R1bXBfZnJhbWUocnQyeDAwZGV2LCBkdW1wX3R5cGUsIGVudHJ5LT5za2IpOworCXJ0MngwMGRlYnVnX2R1bXBfZnJhbWUocnQyeDAwZGV2LCBEVU1QX0ZSQU1FX1RYLCBlbnRyeS0+c2tiKTsKIH0KIAogc3RhdGljIHZvaWQgcnQyeDAwcXVldWVfa2lja190eF9xdWV1ZShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LApAQCAtNTMwLDE2ICs1NTUsMTIgQEAKIAkgKiBjYWxsIGZhaWxlZC4gU2luY2Ugd2UgYWx3YXlzIHJldHVybiBORVRERVZfVFhfT0sgdG8gbWFjODAyMTEsCiAJICogdGhpcyBmcmFtZSB3aWxsIHNpbXBseSBiZSBkcm9wcGVkLgogCSAqLwotCWlmICh1bmxpa2VseShxdWV1ZS0+cnQyeDAwZGV2LT5vcHMtPmxpYi0+d3JpdGVfdHhfZGF0YShlbnRyeSwKLQkJCQkJCQkgICAgICAgJnR4ZGVzYykpKSB7CisJaWYgKHVubGlrZWx5KHJ0MngwMHF1ZXVlX3dyaXRlX3R4X2RhdGEoZW50cnksICZ0eGRlc2MpKSkgewogCQljbGVhcl9iaXQoRU5UUllfT1dORVJfREVWSUNFX0RBVEEsICZlbnRyeS0+ZmxhZ3MpOwogCQllbnRyeS0+c2tiID0gTlVMTDsKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JaWYgKHRlc3RfYml0KERSSVZFUl9SRVFVSVJFX0RNQSwgJnF1ZXVlLT5ydDJ4MDBkZXYtPmZsYWdzKSkKLQkJcnQyeDAwcXVldWVfbWFwX3R4c2tiKHF1ZXVlLT5ydDJ4MDBkZXYsIHNrYik7Ci0KIAlzZXRfYml0KEVOVFJZX0RBVEFfUEVORElORywgJmVudHJ5LT5mbGFncyk7CiAKIAlydDJ4MDBxdWV1ZV9pbmRleF9pbmMocXVldWUsIFFfSU5ERVgpOwpAQCAtNTk1LDExICs2MTYsNiBAQAogCXNrYmRlc2MtPmVudHJ5ID0gaW50Zi0+YmVhY29uOwogCiAJLyoKLQkgKiBXcml0ZSBUWCBkZXNjcmlwdG9yIGludG8gcmVzZXJ2ZWQgcm9vbSBpbiBmcm9udCBvZiB0aGUgYmVhY29uLgotCSAqLwotCXJ0MngwMHF1ZXVlX3dyaXRlX3R4X2Rlc2NyaXB0b3IoaW50Zi0+YmVhY29uLCAmdHhkZXNjKTsKLQotCS8qCiAJICogU2VuZCBiZWFjb24gdG8gaGFyZHdhcmUgYW5kIGVuYWJsZSBiZWFjb24gZ2VuYXJhdGlvbi4uCiAJICovCiAJcnQyeDAwZGV2LT5vcHMtPmxpYi0+d3JpdGVfYmVhY29uKGludGYtPmJlYWNvbiwgJnR4ZGVzYyk7CkBAIC02NzIsOSArNjg4LDExIEBACiAKIAlpZiAoaW5kZXggPT0gUV9JTkRFWCkgewogCQlxdWV1ZS0+bGVuZ3RoKys7CisJCXF1ZXVlLT5sYXN0X2luZGV4ID0gamlmZmllczsKIAl9IGVsc2UgaWYgKGluZGV4ID09IFFfSU5ERVhfRE9ORSkgewogCQlxdWV1ZS0+bGVuZ3RoLS07CiAJCXF1ZXVlLT5jb3VudCsrOworCQlxdWV1ZS0+bGFzdF9pbmRleF9kb25lID0gamlmZmllczsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxdWV1ZS0+bG9jaywgaXJxZmxhZ3MpOwpAQCAtNjg4LDYgKzcwNiw4IEBACiAKIAlxdWV1ZS0+Y291bnQgPSAwOwogCXF1ZXVlLT5sZW5ndGggPSAwOworCXF1ZXVlLT5sYXN0X2luZGV4ID0gamlmZmllczsKKwlxdWV1ZS0+bGFzdF9pbmRleF9kb25lID0gamlmZmllczsKIAltZW1zZXQocXVldWUtPmluZGV4LCAwLCBzaXplb2YocXVldWUtPmluZGV4KSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxdWV1ZS0+bG9jaywgaXJxZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuaAppbmRleCBmNzkxNzA4Li4xOTFlNzc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuaApAQCAtMjEzLDkgKzIxMywxNiBAQAogLyoqCiAgKiBlbnVtIHR4ZG9uZV9lbnRyeV9kZXNjX2ZsYWdzOiBGbGFncyBmb3IgJnN0cnVjdCB0eGRvbmVfZW50cnlfZGVzYwogICoKKyAqIEV2ZXJ5IHR4ZG9uZSByZXBvcnQgaGFzIHRvIGNvbnRhaW4gdGhlIGJhc2ljIHJlc3VsdCBvZiB0aGUKKyAqIHRyYW5zbWlzc2lvbiwgZWl0aGVyICZUWERPTkVfVU5LTk9XTiwgJlRYRE9ORV9TVUNDRVNTIG9yCisgKiAmVFhET05FX0ZBSUxVUkUuIFRoZSBmbGFnICZUWERPTkVfRkFMTEJBQ0sgY2FuIGJlIHVzZWQgaW4KKyAqIGNvbmp1bmN0aW9uIHdpdGggYWxsIG9mIHRoZXNlIGZsYWdzIGJ1dCBzaG91bGQgb25seSBiZSBzZXQKKyAqIGlmIHJldGlyZXMgPiAwLiBUaGUgZmxhZyAmVFhET05FX0VYQ0VTU0lWRV9SRVRSWSBjYW4gb25seSBiZSB1c2VkCisgKiBpbiBjb25qdW5jdGlvbiB3aXRoICZUWERPTkVfRkFJTFVSRS4KKyAqCiAgKiBAVFhET05FX1VOS05PV046IEhhcmR3YXJlIGNvdWxkIG5vdCBkZXRlcm1pbmUgc3VjY2VzcyBvZiB0cmFuc21pc3Npb24uCiAgKiBAVFhET05FX1NVQ0NFU1M6IEZyYW1lIHdhcyBzdWNjZXNzZnVsbHkgc2VuZAotICogQFRYRE9ORV9GQUxMQkFDSzogRnJhbWUgd2FzIHN1Y2Nlc3NmdWxseSBzZW5kIHVzaW5nIGEgZmFsbGJhY2sgcmF0ZS4KKyAqIEBUWERPTkVfRkFMTEJBQ0s6IEhhcmR3YXJlIHVzZWQgZmFsbGJhY2sgcmF0ZXMgZm9yIHJldHJpZXMKICAqIEBUWERPTkVfRkFJTFVSRTogRnJhbWUgd2FzIG5vdCBzdWNjZXNzZnVsbHkgc2VuZAogICogQFRYRE9ORV9FWENFU1NJVkVfUkVUUlk6IEluIGFkZGl0aW9uIHRvICZUWERPTkVfRkFJTFVSRSwgdGhlCiAgKglmcmFtZSB0cmFuc21pc3Npb24gZmFpbGVkIGR1ZSB0byBleGNlc3NpdmUgcmV0cmllcy4KQEAgLTQzOSw2ICs0NDYsOCBAQAogCWVudW0gZGF0YV9xdWV1ZV9xaWQgcWlkOwogCiAJc3BpbmxvY2tfdCBsb2NrOworCXVuc2lnbmVkIGxvbmcgbGFzdF9pbmRleDsKKwl1bnNpZ25lZCBsb25nIGxhc3RfaW5kZXhfZG9uZTsKIAl1bnNpZ25lZCBpbnQgY291bnQ7CiAJdW5zaWduZWQgc2hvcnQgbGltaXQ7CiAJdW5zaWduZWQgc2hvcnQgdGhyZXNob2xkOwpAQCAtNTkyLDYgKzYwMSwxNSBAQAogfQogCiAvKioKKyAqIHJ0MngwMHF1ZXVlX3RpbWVvdXQgLSBDaGVjayBpZiBhIHRpbWVvdXQgb2NjdXJlZCBmb3IgdGhpcyBxdWV1ZQorICogQHF1ZXVlOiBRdWV1ZSB0byBjaGVjay4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcnQyeDAwcXVldWVfdGltZW91dChzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCit7CisJcmV0dXJuIHRpbWVfYWZ0ZXIocXVldWUtPmxhc3RfaW5kZXgsIHF1ZXVlLT5sYXN0X2luZGV4X2RvbmUgKyAoSFogLyAxMCkpOworfQorCisvKioKICAqIF9ydDJ4MDBfZGVzY19yZWFkIC0gUmVhZCBhIHdvcmQgZnJvbSB0aGUgaGFyZHdhcmUgZGVzY3JpcHRvci4KICAqIEBkZXNjOiBCYXNlIGRlc2NyaXB0b3IgYWRkcmVzcwogICogQHdvcmQ6IFdvcmQgaW5kZXggZnJvbSB3aGVyZSB0aGUgZGVzY3JpcHRvciBzaG91bGQgYmUgcmVhZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByZWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByZWcuaAppbmRleCBiOWZlOTQ4Li5jZWY5NDYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJlZy5oCkBAIC02Myw3ICs2Myw4IEBACiBlbnVtIHRzZl9zeW5jIHsKIAlUU0ZfU1lOQ19OT05FID0gMCwKIAlUU0ZfU1lOQ19JTkZSQSA9IDEsCi0JVFNGX1NZTkNfQkVBQ09OID0gMiwKKwlUU0ZfU1lOQ19BREhPQyA9IDIsCisJVFNGX1NZTkNfQVBfTk9ORSA9IDMsCiB9OwogCiAvKgpAQCAtODgsNiArODksOCBAQAogCVNUQVRFX1JBRElPX1JYX09GRl9MSU5LLAogCVNUQVRFX1JBRElPX0lSUV9PTiwKIAlTVEFURV9SQURJT19JUlFfT0ZGLAorCVNUQVRFX1JBRElPX0lSUV9PTl9JU1IsCisJU1RBVEVfUkFESU9fSVJRX09GRl9JU1IsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5jCmluZGV4IGJkMTU0NmIuLmZmM2EzNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmMKQEAgLTExMywyNiArMTEzLDYgQEAKIAkJCQkgIGNvbnN0IHUxNiBvZmZzZXQsIHZvaWQgKmJ1ZmZlciwKIAkJCQkgIGNvbnN0IHUxNiBidWZmZXJfbGVuZ3RoLCBjb25zdCBpbnQgdGltZW91dCkKIHsKLQlpbnQgc3RhdHVzOwotCi0JbXV0ZXhfbG9jaygmcnQyeDAwZGV2LT5jc3JfbXV0ZXgpOwotCi0Jc3RhdHVzID0gcnQyeDAwdXNiX3ZlbmRvcl9yZXFfYnVmZl9sb2NrKHJ0MngwMGRldiwgcmVxdWVzdCwKLQkJCQkJCXJlcXVlc3R0eXBlLCBvZmZzZXQsIGJ1ZmZlciwKLQkJCQkJCWJ1ZmZlcl9sZW5ndGgsIHRpbWVvdXQpOwotCi0JbXV0ZXhfdW5sb2NrKCZydDJ4MDBkZXYtPmNzcl9tdXRleCk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0X2J1ZmYpOwotCi1pbnQgcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0X2xhcmdlX2J1ZmYoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkJY29uc3QgdTggcmVxdWVzdCwgY29uc3QgdTggcmVxdWVzdHR5cGUsCi0JCQkJCWNvbnN0IHUxNiBvZmZzZXQsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKLQkJCQkJY29uc3QgdTE2IGJ1ZmZlcl9sZW5ndGgsCi0JCQkJCWNvbnN0IGludCB0aW1lb3V0KQotewogCWludCBzdGF0dXMgPSAwOwogCXVuc2lnbmVkIGNoYXIgKnRiOwogCXUxNiBvZmYsIGxlbiwgYnNpemU7CkBAIC0xNTcsNyArMTM3LDcgQEAKIAogCXJldHVybiBzdGF0dXM7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3RfbGFyZ2VfYnVmZik7CitFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3RfYnVmZik7CiAKIGludCBydDJ4MDB1c2JfcmVnYnVzeV9yZWFkKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgICBjb25zdCB1bnNpZ25lZCBpbnQgb2Zmc2V0LApAQCAtMjE2LDQ4ICsxOTYsMjggQEAKIAlydDJ4MDBsaWJfdHhkb25lKGVudHJ5LCAmdHhkZXNjKTsKIH0KIAotaW50IHJ0MngwMHVzYl93cml0ZV90eF9kYXRhKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCi0JCQkgICAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjKQorc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMHVzYl9raWNrX3R4X2VudHJ5KHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkpCiB7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2OwogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gdG9fdXNiX2RldmljZV9pbnRmKHJ0MngwMGRldi0+ZGV2KTsKIAlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2IgKmVudHJ5X3ByaXYgPSBlbnRyeS0+cHJpdl9kYXRhOwogCXUzMiBsZW5ndGg7CiAKLQkvKgotCSAqIEFkZCB0aGUgZGVzY3JpcHRvciBpbiBmcm9udCBvZiB0aGUgc2tiLgotCSAqLwotCXNrYl9wdXNoKGVudHJ5LT5za2IsIGVudHJ5LT5xdWV1ZS0+ZGVzY19zaXplKTsKLQltZW1zZXQoZW50cnktPnNrYi0+ZGF0YSwgMCwgZW50cnktPnF1ZXVlLT5kZXNjX3NpemUpOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRU5UUllfREFUQV9QRU5ESU5HLCAmZW50cnktPmZsYWdzKSkgeworCQkvKgorCQkgKiBVU0IgZGV2aWNlcyBjYW5ub3QgYmxpbmRseSBwYXNzIHRoZSBza2ItPmxlbiBhcyB0aGUKKwkJICogbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIHVzYl9maWxsX2J1bGtfdXJiLiBQYXNzIHRoZSBza2IKKwkJICogdG8gdGhlIGRyaXZlciB0byBkZXRlcm1pbmUgd2hhdCB0aGUgbGVuZ3RoIHNob3VsZCBiZS4KKwkJICovCisJCWxlbmd0aCA9IHJ0MngwMGRldi0+b3BzLT5saWItPmdldF90eF9kYXRhX2xlbihlbnRyeSk7CiAKLQkvKgotCSAqIFVTQiBkZXZpY2VzIGNhbm5vdCBibGluZGx5IHBhc3MgdGhlIHNrYi0+bGVuIGFzIHRoZQotCSAqIGxlbmd0aCBvZiB0aGUgZGF0YSB0byB1c2JfZmlsbF9idWxrX3VyYi4gUGFzcyB0aGUgc2tiCi0JICogdG8gdGhlIGRyaXZlciB0byBkZXRlcm1pbmUgd2hhdCB0aGUgbGVuZ3RoIHNob3VsZCBiZS4KLQkgKi8KLQlsZW5ndGggPSBydDJ4MDBkZXYtPm9wcy0+bGliLT5nZXRfdHhfZGF0YV9sZW4oZW50cnkpOworCQl1c2JfZmlsbF9idWxrX3VyYihlbnRyeV9wcml2LT51cmIsIHVzYl9kZXYsCisJCQkJICB1c2Jfc25kYnVsa3BpcGUodXNiX2RldiwgZW50cnktPnF1ZXVlLT51c2JfZW5kcG9pbnQpLAorCQkJCSAgZW50cnktPnNrYi0+ZGF0YSwgbGVuZ3RoLAorCQkJCSAgcnQyeDAwdXNiX2ludGVycnVwdF90eGRvbmUsIGVudHJ5KTsKIAotCXVzYl9maWxsX2J1bGtfdXJiKGVudHJ5X3ByaXYtPnVyYiwgdXNiX2RldiwKLQkJCSAgdXNiX3NuZGJ1bGtwaXBlKHVzYl9kZXYsIGVudHJ5LT5xdWV1ZS0+dXNiX2VuZHBvaW50KSwKLQkJCSAgZW50cnktPnNrYi0+ZGF0YSwgbGVuZ3RoLAotCQkJICBydDJ4MDB1c2JfaW50ZXJydXB0X3R4ZG9uZSwgZW50cnkpOwotCi0JLyoKLQkgKiBNYWtlIHN1cmUgdGhlIHNrYi0+ZGF0YSBwb2ludGVyIHBvaW50cyB0byB0aGUgZnJhbWUsIG5vdCB0aGUKLQkgKiBkZXNjcmlwdG9yLgotCSAqLwotCXNrYl9wdWxsKGVudHJ5LT5za2IsIGVudHJ5LT5xdWV1ZS0+ZGVzY19zaXplKTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwdXNiX3dyaXRlX3R4X2RhdGEpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwdXNiX2tpY2tfdHhfZW50cnkoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSkKLXsKLQlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2IgKmVudHJ5X3ByaXYgPSBlbnRyeS0+cHJpdl9kYXRhOwotCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChFTlRSWV9EQVRBX1BFTkRJTkcsICZlbnRyeS0+ZmxhZ3MpKQogCQl1c2Jfc3VibWl0X3VyYihlbnRyeV9wcml2LT51cmIsIEdGUF9BVE9NSUMpOworCX0KIH0KIAogdm9pZCBydDJ4MDB1c2Jfa2lja190eF9xdWV1ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LApAQCAtMzMyLDYgKzI5Miw1NiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwdXNiX2tpbGxfdHhfcXVldWUpOwogCitzdGF0aWMgdm9pZCBydDJ4MDB1c2Jfd2F0Y2hkb2dfcmVzZXRfdHgoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKQoreworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYiAqZW50cnlfcHJpdjsKKwl1bnNpZ25lZCBzaG9ydCB0aHJlc2hvbGQgPSBxdWV1ZS0+dGhyZXNob2xkOworCisJV0FSTklORyhxdWV1ZS0+cnQyeDAwZGV2LCAiVFggcXVldWUgJWQgdGltZWQgb3V0LCBpbnZva2UgcmVzZXQiLCBxdWV1ZS0+cWlkKTsKKworCS8qCisJICogVGVtcG9yYXJpbHkgZGlzYWJsZSB0aGUgVFggcXVldWUsIHRoaXMgd2lsbCBmb3JjZSBtYWM4MDIxMQorCSAqIHRvIHVzZSB0aGUgb3RoZXIgcXVldWVzIHVudGlsIHRoaXMgcXVldWUgaGFzIGJlZW4gcmVzdG9yZWQuCisJICoKKwkgKiBTZXQgdGhlIHF1ZXVlIHRocmVzaG9sZCB0byB0aGUgcXVldWUgbGltaXQuIFRoaXMgcHJldmVudHMgdGhlCisJICogcXVldWUgZnJvbSBiZWluZyBlbmFibGVkIGR1cmluZyB0aGUgdHhkb25lIGhhbmRsZXIuCisJICovCisJcXVldWUtPnRocmVzaG9sZCA9IHF1ZXVlLT5saW1pdDsKKwlpZWVlODAyMTFfc3RvcF9xdWV1ZShxdWV1ZS0+cnQyeDAwZGV2LT5odywgcXVldWUtPnFpZCk7CisKKwkvKgorCSAqIFJlc2V0IGFsbCBjdXJyZW50bHkgdXBsb2FkZWQgVFggZnJhbWVzLgorCSAqLworCXdoaWxlICghcnQyeDAwcXVldWVfZW1wdHkocXVldWUpKSB7CisJCWVudHJ5X3ByaXYgPSBydDJ4MDBxdWV1ZV9nZXRfZW50cnkocXVldWUsIFFfSU5ERVhfRE9ORSktPnByaXZfZGF0YTsKKwkJdXNiX2tpbGxfdXJiKGVudHJ5X3ByaXYtPnVyYik7CisKKwkJLyoKKwkJICogV2UgbmVlZCBhIHNob3J0IGRlbGF5IGhlcmUgdG8gd2FpdCBmb3IKKwkJICogdGhlIFVSQiB0byBiZSBjYW5jZWxlZCBhbmQgaW52b2tlZCB0aGUgdHhfZG9uZSBoYW5kbGVyLgorCQkgKi8KKwkJdWRlbGF5KDIwMCk7CisJfQorCisJLyoKKwkgKiBUaGUgcXVldWUgaGFzIGJlZW4gcmVzZXQsIGFuZCBtYWM4MDIxMSBpcyBhbGxvd2VkIHRvIHVzZSB0aGUKKwkgKiBxdWV1ZSBhZ2Fpbi4KKwkgKi8KKwlxdWV1ZS0+dGhyZXNob2xkID0gdGhyZXNob2xkOworCWllZWU4MDIxMV93YWtlX3F1ZXVlKHF1ZXVlLT5ydDJ4MDBkZXYtPmh3LCBxdWV1ZS0+cWlkKTsKK30KKwordm9pZCBydDJ4MDB1c2Jfd2F0Y2hkb2coc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWU7CisKKwl0eF9xdWV1ZV9mb3JfZWFjaChydDJ4MDBkZXYsIHF1ZXVlKSB7CisJCWlmIChydDJ4MDBxdWV1ZV90aW1lb3V0KHF1ZXVlKSkKKwkJCXJ0MngwMHVzYl93YXRjaGRvZ19yZXNldF90eChxdWV1ZSk7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwdXNiX3dhdGNoZG9nKTsKKwogLyoKICAqIFJYIGRhdGEgaGFuZGxlcnMuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuaAppbmRleCA2MjFkMGY4Li5kM2QzZGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5oCkBAIC0xNjcsMjUgKzE2Nyw2IEBACiAJCQkJICAgY29uc3QgdTE2IGJ1ZmZlcl9sZW5ndGgsIGNvbnN0IGludCB0aW1lb3V0KTsKIAogLyoqCi0gKiBydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3RfbGFyZ2VfYnVmZiAtIFNlbmQgcmVnaXN0ZXIgY29tbWFuZCB0byBkZXZpY2UgKGJ1ZmZlcmVkKQotICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYKLSAqIEByZXF1ZXN0OiBVU0IgdmVuZG9yIGNvbW1hbmQgKFNlZSAmZW51bSBydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3QpCi0gKiBAcmVxdWVzdHR5cGU6IFJlcXVlc3QgdHlwZSAmVVNCX1ZFTkRPUl9SRVFVRVNUXyoKLSAqIEBvZmZzZXQ6IFJlZ2lzdGVyIHN0YXJ0IG9mZnNldCB0byBwZXJmb3JtIGFjdGlvbiBvbgotICogQGJ1ZmZlcjogQnVmZmVyIHdoZXJlIGluZm9ybWF0aW9uIHdpbGwgYmUgcmVhZC93cml0dGVuIHRvIGJ5IGRldmljZQotICogQGJ1ZmZlcl9sZW5ndGg6IFNpemUgb2YgJmJ1ZmZlcgotICogQHRpbWVvdXQ6IE9wZXJhdGlvbiB0aW1lb3V0Ci0gKgotICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHRyYW5zZmVyIHJlZ2lzdGVyIGRhdGEgaW4gYmxvY2tzIGxhcmdlcgotICogdGhlbiBDU1JfQ0FDSEVfU0laRS4gVXNlIGZvciBmaXJtd2FyZSB1cGxvYWQsIGtleXMgYW5kIGJlYWNvbnMuCi0gKi8KLWludCBydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3RfbGFyZ2VfYnVmZihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCQljb25zdCB1OCByZXF1ZXN0LCBjb25zdCB1OCByZXF1ZXN0dHlwZSwKLQkJCQkJY29uc3QgdTE2IG9mZnNldCwgY29uc3Qgdm9pZCAqYnVmZmVyLAotCQkJCQljb25zdCB1MTYgYnVmZmVyX2xlbmd0aCwKLQkJCQkJY29uc3QgaW50IHRpbWVvdXQpOwotCi0vKioKICAqIHJ0MngwMHVzYl92ZW5kb3JfcmVxdWVzdF9zdyAtIFNlbmQgc2luZ2xlIHJlZ2lzdGVyIGNvbW1hbmQgdG8gZGV2aWNlCiAgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2RldgogICogQHJlcXVlc3Q6IFVTQiB2ZW5kb3IgY29tbWFuZCAoU2VlICZlbnVtIHJ0MngwMHVzYl92ZW5kb3JfcmVxdWVzdCkKQEAgLTM3MCwxNiArMzUxLDYgQEAKIHZvaWQgcnQyeDAwdXNiX2Rpc2FibGVfcmFkaW8oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CiAKIC8qKgotICogcnQyeDAwdXNiX3dyaXRlX3R4X2RhdGEgLSBJbml0aWFsaXplIFVSQiBmb3IgVFggb3BlcmF0aW9uCi0gKiBAZW50cnk6IFRoZSBlbnRyeSB3aGVyZSB0aGUgZnJhbWUgaXMgbG9jYXRlZAotICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBpbml0aWFsaXplIHRoZSBVUkIgYW5kIHNrYiBkZXNjcmlwdG9yCi0gKiB0byBwcmVwYXJlIHRoZSBlbnRyeSBmb3IgdGhlIGFjdHVhbCBUWCBvcGVyYXRpb24uCi0gKi8KLWludCBydDJ4MDB1c2Jfd3JpdGVfdHhfZGF0YShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAotCQkJICAgIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYyk7Ci0KLS8qKgogICogc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiOiBQZXIgZW50cnkgVVNCIHNwZWNpZmljIGluZm9ybWF0aW9uCiAgKgogICogQHVyYjogVXJiIHN0cnVjdHVyZSB1c2VkIGZvciBkZXZpY2UgY29tbXVuaWNhdGlvbi4KQEAgLTQyOCw2ICszOTksMTYgQEAKIHZvaWQgcnQyeDAwdXNiX2tpbGxfdHhfcXVldWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgICAgIGNvbnN0IGVudW0gZGF0YV9xdWV1ZV9xaWQgcWlkKTsKIAorLyoqCisgKiBydDJ4MDB1c2Jfd2F0Y2hkb2cgLSBXYXRjaGRvZyBmb3IgVVNCIGNvbW11bmljYXRpb24KKyAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2CisgKgorICogQ2hlY2sgdGhlIGhlYWx0aCBvZiB0aGUgVVNCIGNvbW11bmljYXRpb24gYW5kIGRldGVybWluZQorICogaWYgdGltZW91dHMgaGF2ZSBvY2N1cmVkLiBJZiB0aGlzIGlzIHRoZSBjYXNlLCB0aGlzIGZ1bmN0aW9uCisgKiB3aWxsIHJlc2V0IGFsbCBjb21tdW5pY2F0aW9uIHRvIHJlc3RvcmUgZnVuY3Rpb25hbGl0eSBhZ2Fpbi4KKyAqLwordm9pZCBydDJ4MDB1c2Jfd2F0Y2hkb2coc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CisKIC8qCiAgKiBEZXZpY2UgaW5pdGlhbGl6YXRpb24gaGFuZGxlcnMuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jCmluZGV4IDZhNzRiYWYuLmU1MzljNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuYwpAQCAtOTMxLDYgKzkzMSw5IEBACiAJdTMyIHJlZzsKIAogCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1I0LCAmcmVnKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I0X09GRE1fVFhfUkFURV9ET1dOLCAxKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I0X09GRE1fVFhfUkFURV9TVEVQLCAwKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I0X09GRE1fVFhfRkFMTEJBQ0tfQ0NLLCAwKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I0X0xPTkdfUkVUUllfTElNSVQsCiAJCQkgICBsaWJjb25mLT5jb25mLT5sb25nX2ZyYW1lX21heF90eF9jb3VudCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSNF9TSE9SVF9SRVRSWV9MSU1JVCwKQEAgLTE2MTksNyArMTYyMiw4IEBACiBzdGF0aWMgdm9pZCBydDYxcGNpX3RvZ2dsZV9pcnEoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgICAgICBlbnVtIGRldl9zdGF0ZSBzdGF0ZSkKIHsKLQlpbnQgbWFzayA9IChzdGF0ZSA9PSBTVEFURV9SQURJT19JUlFfT0ZGKTsKKwlpbnQgbWFzayA9IChzdGF0ZSA9PSBTVEFURV9SQURJT19JUlFfT0ZGKSB8fAorCQkgICAoc3RhdGUgPT0gU1RBVEVfUkFESU9fSVJRX09GRl9JU1IpOwogCXUzMiByZWc7CiAKIAkvKgpAQCAtMTczNiw3ICsxNzQwLDkgQEAKIAkJcnQ2MXBjaV90b2dnbGVfcngocnQyeDAwZGV2LCBzdGF0ZSk7CiAJCWJyZWFrOwogCWNhc2UgU1RBVEVfUkFESU9fSVJRX09OOgorCWNhc2UgU1RBVEVfUkFESU9fSVJRX09OX0lTUjoKIAljYXNlIFNUQVRFX1JBRElPX0lSUV9PRkY6CisJY2FzZSBTVEFURV9SQURJT19JUlFfT0ZGX0lTUjoKIAkJcnQ2MXBjaV90b2dnbGVfaXJxKHJ0MngwMGRldiwgc3RhdGUpOwogCQlicmVhazsKIAljYXNlIFNUQVRFX0RFRVBfU0xFRVA6CkBAIC0xODc0LDYgKzE4ODAsMTYgQEAKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjksIHJlZyk7CiAKIAkvKgorCSAqIFdyaXRlIHRoZSBUWCBkZXNjcmlwdG9yIGZvciB0aGUgYmVhY29uLgorCSAqLworCXJ0NjFwY2lfd3JpdGVfdHhfZGVzYyhydDJ4MDBkZXYsIGVudHJ5LT5za2IsIHR4ZGVzYyk7CisKKwkvKgorCSAqIER1bXAgYmVhY29uIHRvIHVzZXJzcGFjZSB0aHJvdWdoIGRlYnVnZnMuCisJICovCisJcnQyeDAwZGVidWdfZHVtcF9mcmFtZShydDJ4MDBkZXYsIERVTVBfRlJBTUVfQkVBQ09OLCBlbnRyeS0+c2tiKTsKKworCS8qCiAJICogV3JpdGUgZW50aXJlIGJlYWNvbiB3aXRoIGRlc2NyaXB0b3IgdG8gcmVnaXN0ZXIuCiAJICovCiAJYmVhY29uX2Jhc2UgPSBIV19CRUFDT05fT0ZGU0VUKGVudHJ5LT5lbnRyeV9pZHgpOwpAQCAtMjAzOSwyOSArMjA1NSwyNCBAQAogCXN0cnVjdCB0eGRvbmVfZW50cnlfZGVzYyB0eGRlc2M7CiAJdTMyIHdvcmQ7CiAJdTMyIHJlZzsKLQl1MzIgb2xkX3JlZzsKIAlpbnQgdHlwZTsKIAlpbnQgaW5kZXg7CisJaW50IGk7CiAKIAkvKgotCSAqIER1cmluZyBlYWNoIGxvb3Agd2Ugd2lsbCBjb21wYXJlIHRoZSBmcmVzaGx5IHJlYWQKLQkgKiBTVEFfQ1NSNCByZWdpc3RlciB2YWx1ZSB3aXRoIHRoZSB2YWx1ZSByZWFkIGZyb20KLQkgKiB0aGUgcHJldmlvdXMgbG9vcC4gSWYgdGhlIDIgdmFsdWVzIGFyZSBlcXVhbCB0aGVuCi0JICogd2Ugc2hvdWxkIHN0b3AgcHJvY2Vzc2luZyBiZWNhdXNlIHRoZSBjaGFuY2UgaXMKLQkgKiBxdWl0ZSBiaWcgdGhhdCB0aGUgZGV2aWNlIGhhcyBiZWVuIHVucGx1Z2dlZCBhbmQKLQkgKiB3ZSByaXNrIGdvaW5nIGludG8gYW4gZW5kbGVzcyBsb29wLgorCSAqIFRYX1NUQV9GSUZPIGlzIGEgc3RhY2sgb2YgWCBlbnRyaWVzLCBoZW5jZSByZWFkIFRYX1NUQV9GSUZPCisJICogYXQgbW9zdCBYIHRpbWVzIGFuZCBhbHNvIHN0b3AgcHJvY2Vzc2luZyBvbmNlIHRoZSBUWF9TVEFfRklGT19WQUxJRAorCSAqIGZsYWcgaXMgbm90IHNldCBhbnltb3JlLgorCSAqCisJICogVGhlIGxlZ2FjeSBkcml2ZXJzIHVzZSBYPVRYX1JJTkdfU0laRSBidXQgc3RhdGUgaW4gYSBjb21tZW50CisJICogdGhhdCB0aGUgVFhfU1RBX0ZJRk8gc3RhY2sgaGFzIGEgc2l6ZSBvZiAxNi4gV2Ugc3RpY2sgdG8gb3VyCisJICogdHggcmluZyBzaXplIGZvciBub3cuCiAJICovCi0Jb2xkX3JlZyA9IDA7Ci0KLQl3aGlsZSAoMSkgeworCWZvciAoaSA9IDA7IGkgPCBUWF9FTlRSSUVTOyBpKyspIHsKIAkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBTVEFfQ1NSNCwgJnJlZyk7CiAJCWlmICghcnQyeDAwX2dldF9maWVsZDMyKHJlZywgU1RBX0NTUjRfVkFMSUQpKQogCQkJYnJlYWs7CiAKLQkJaWYgKG9sZF9yZWcgPT0gcmVnKQotCQkJYnJlYWs7Ci0JCW9sZF9yZWcgPSByZWc7Ci0KIAkJLyoKIAkJICogU2tpcCB0aGlzIGVudHJ5IHdoZW4gaXQgY29udGFpbnMgYW4gaW52YWxpZAogCQkgKiBxdWV1ZSBpZGVudGljYXRpb24gbnVtYmVyLgpAQCAtMjEyMCw2ICsyMTMxLDEzIEBACiAJCX0KIAkJdHhkZXNjLnJldHJ5ID0gcnQyeDAwX2dldF9maWVsZDMyKHJlZywgU1RBX0NTUjRfUkVUUllfQ09VTlQpOwogCisJCS8qCisJCSAqIHRoZSBmcmFtZSB3YXMgcmV0cmllZCBhdCBsZWFzdCBvbmNlCisJCSAqIC0+IGh3IHVzZWQgZmFsbGJhY2sgcmF0ZXMKKwkJICovCisJCWlmICh0eGRlc2MucmV0cnkpCisJCQlfX3NldF9iaXQoVFhET05FX0ZBTExCQUNLLCAmdHhkZXNjLmZsYWdzKTsKKwogCQlydDJ4MDBsaWJfdHhkb25lKGVudHJ5LCAmdHhkZXNjKTsKIAl9CiB9CkBAIC0yMTMyLDI3ICsyMTUwLDExIEBACiAJcnQ2MXBjaV9jb25maWcocnQyeDAwZGV2LCAmbGliY29uZiwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKIH0KIAotc3RhdGljIGlycXJldHVybl90IHJ0NjFwY2lfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKK3N0YXRpYyBpcnFyZXR1cm5fdCBydDYxcGNpX2ludGVycnVwdF90aHJlYWQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBkZXZfaW5zdGFuY2U7Ci0JdTMyIHJlZ19tY3U7Ci0JdTMyIHJlZzsKLQotCS8qCi0JICogR2V0IHRoZSBpbnRlcnJ1cHQgc291cmNlcyAmIHNhdmVkIHRvIGxvY2FsIHZhcmlhYmxlLgotCSAqIFdyaXRlIHJlZ2lzdGVyIHZhbHVlIGJhY2sgdG8gY2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzLgotCSAqLwotCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUNVX0lOVF9TT1VSQ0VfQ1NSLCAmcmVnX21jdSk7Ci0JcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUNVX0lOVF9TT1VSQ0VfQ1NSLCByZWdfbWN1KTsKLQotCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgSU5UX1NPVVJDRV9DU1IsICZyZWcpOwotCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIElOVF9TT1VSQ0VfQ1NSLCByZWcpOwotCi0JaWYgKCFyZWcgJiYgIXJlZ19tY3UpCi0JCXJldHVybiBJUlFfTk9ORTsKLQotCWlmICghdGVzdF9iaXQoREVWSUNFX1NUQVRFX0VOQUJMRURfUkFESU8sICZydDJ4MDBkZXYtPmZsYWdzKSkKLQkJcmV0dXJuIElSUV9IQU5ETEVEOworCXUzMiByZWcgPSBydDJ4MDBkZXYtPmlycXZhbHVlWzBdOworCXUzMiByZWdfbWN1ID0gcnQyeDAwZGV2LT5pcnF2YWx1ZVsxXTsKIAogCS8qCiAJICogSGFuZGxlIGludGVycnVwdHMsIHdhbGsgdGhyb3VnaCBhbGwgYml0cwpAQCAtMjE4NSw5ICsyMTg3LDUxIEBACiAJaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyZWdfbWN1LCBNQ1VfSU5UX1NPVVJDRV9DU1JfVFdBS0VVUCkpCiAJCXJ0NjFwY2lfd2FrZXVwKHJ0MngwMGRldik7CiAKKwkvKgorCSAqIDUgLSBCZWFjb24gZG9uZSBpbnRlcnJ1cHQuCisJICovCisJaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIElOVF9TT1VSQ0VfQ1NSX0JFQUNPTl9ET05FKSkKKwkJcnQyeDAwbGliX2JlYWNvbmRvbmUocnQyeDAwZGV2KTsKKworCS8qIEVuYWJsZSBpbnRlcnJ1cHRzIGFnYWluLiAqLworCXJ0MngwMGRldi0+b3BzLT5saWItPnNldF9kZXZpY2Vfc3RhdGUocnQyeDAwZGV2LAorCQkJCQkgICAgICBTVEFURV9SQURJT19JUlFfT05fSVNSKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKKworc3RhdGljIGlycXJldHVybl90IHJ0NjFwY2lfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKK3sKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZGV2X2luc3RhbmNlOworCXUzMiByZWdfbWN1OworCXUzMiByZWc7CisKKwkvKgorCSAqIEdldCB0aGUgaW50ZXJydXB0IHNvdXJjZXMgJiBzYXZlZCB0byBsb2NhbCB2YXJpYWJsZS4KKwkgKiBXcml0ZSByZWdpc3RlciB2YWx1ZSBiYWNrIHRvIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0cy4KKwkgKi8KKwlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1DVV9JTlRfU09VUkNFX0NTUiwgJnJlZ19tY3UpOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1DVV9JTlRfU09VUkNFX0NTUiwgcmVnX21jdSk7CisKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIElOVF9TT1VSQ0VfQ1NSLCAmcmVnKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBJTlRfU09VUkNFX0NTUiwgcmVnKTsKKworCWlmICghcmVnICYmICFyZWdfbWN1KQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9FTkFCTEVEX1JBRElPLCAmcnQyeDAwZGV2LT5mbGFncykpCisJCXJldHVybiBJUlFfSEFORExFRDsKKworCS8qIFN0b3JlIGlycXZhbHVlcyBmb3IgdXNlIGluIHRoZSBpbnRlcnJ1cHQgdGhyZWFkLiAqLworCXJ0MngwMGRldi0+aXJxdmFsdWVbMF0gPSByZWc7CisJcnQyeDAwZGV2LT5pcnF2YWx1ZVsxXSA9IHJlZ19tY3U7CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMsIHdpbGwgYmUgZW5hYmxlZCBhZ2FpbiBpbiB0aGUgaW50ZXJydXB0IHRocmVhZC4gKi8KKwlydDJ4MDBkZXYtPm9wcy0+bGliLT5zZXRfZGV2aWNlX3N0YXRlKHJ0MngwMGRldiwKKwkJCQkJICAgICAgU1RBVEVfUkFESU9fSVJRX09GRl9JU1IpOworCXJldHVybiBJUlFfV0FLRV9USFJFQUQ7Cit9CisKIC8qCiAgKiBEZXZpY2UgcHJvYmUgZnVuY3Rpb25zLgogICovCkBAIC0yNTc3LDYgKzI2MjEsMTggQEAKIAkJCQkJCSAgIEVFUFJPTV9NQUNfQUREUl8wKSk7CiAKIAkvKgorCSAqIEFzIHJ0NjEgaGFzIGEgZ2xvYmFsIGZhbGxiYWNrIHRhYmxlIHdlIGNhbm5vdCBzcGVjaWZ5CisJICogbW9yZSB0aGVuIG9uZSB0eCByYXRlIHBlciBmcmFtZSBidXQgc2luY2UgdGhlIGh3IHdpbGwKKwkgKiB0cnkgc2V2ZXJhbCByYXRlcyAoYmFzZWQgb24gdGhlIGZhbGxiYWNrIHRhYmxlKSB3ZSBzaG91bGQKKwkgKiBzdGlsbCBpbml0aWFsaXplIG1heF9yYXRlcyB0byB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmF0ZXMKKwkgKiB3ZSBhcmUgZ29pbmcgdG8gdHJ5LiBPdGhlcndpc2UgbWFjODAyMTEgd2lsbCB0cnVuY2F0ZSBvdXIKKwkgKiByZXBvcnRlZCB0eCByYXRlcyBhbmQgdGhlIHJjIGFsZ29ydGlobSB3aWxsIGVuZCB1cCB3aXRoCisJICogaW5jb3JyZWN0IGRhdGEuCisJICovCisJcnQyeDAwZGV2LT5ody0+bWF4X3JhdGVzID0gNzsKKwlydDJ4MDBkZXYtPmh3LT5tYXhfcmF0ZV90cmllcyA9IDE7CisKKwkvKgogCSAqIEluaXRpYWxpemUgaHdfbW9kZSBpbmZvcm1hdGlvbi4KIAkgKi8KIAlzcGVjLT5zdXBwb3J0ZWRfYmFuZHMgPSBTVVBQT1JUX0JBTkRfMkdIWjsKQEAgLTI2NTcsNiArMjcxMyw3IEBACiAJX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX0RNQSwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCWlmICghbW9kcGFyYW1fbm9od2NyeXB0KQogCQlfX3NldF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJX19zZXRfYml0KERSSVZFUl9TVVBQT1JUX0xJTktfVFVOSU5HLCAmcnQyeDAwZGV2LT5mbGFncyk7CiAKIAkvKgogCSAqIFNldCB0aGUgcnNzaSBvZmZzZXQuCkBAIC0yNzQ4LDggKzI4MDUsOSBAQAogCS5yZW1vdmVfaW50ZXJmYWNlCT0gcnQyeDAwbWFjX3JlbW92ZV9pbnRlcmZhY2UsCiAJLmNvbmZpZwkJCT0gcnQyeDAwbWFjX2NvbmZpZywKIAkuY29uZmlndXJlX2ZpbHRlcgk9IHJ0MngwMG1hY19jb25maWd1cmVfZmlsdGVyLAotCS5zZXRfdGltCQk9IHJ0MngwMG1hY19zZXRfdGltLAogCS5zZXRfa2V5CQk9IHJ0MngwMG1hY19zZXRfa2V5LAorCS5zd19zY2FuX3N0YXJ0CQk9IHJ0MngwMG1hY19zd19zY2FuX3N0YXJ0LAorCS5zd19zY2FuX2NvbXBsZXRlCT0gcnQyeDAwbWFjX3N3X3NjYW5fY29tcGxldGUsCiAJLmdldF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3N0YXRzLAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gcnQyeDAwbWFjX2Jzc19pbmZvX2NoYW5nZWQsCiAJLmNvbmZfdHgJCT0gcnQ2MXBjaV9jb25mX3R4LApAQCAtMjc1OSw2ICsyODE3LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydDJ4MDBsaWJfb3BzIHJ0NjFwY2lfcnQyeDAwX29wcyA9IHsKIAkuaXJxX2hhbmRsZXIJCT0gcnQ2MXBjaV9pbnRlcnJ1cHQsCisJLmlycV9oYW5kbGVyX3RocmVhZAk9IHJ0NjFwY2lfaW50ZXJydXB0X3RocmVhZCwKIAkucHJvYmVfaHcJCT0gcnQ2MXBjaV9wcm9iZV9odywKIAkuZ2V0X2Zpcm13YXJlX25hbWUJPSBydDYxcGNpX2dldF9maXJtd2FyZV9uYW1lLAogCS5jaGVja19maXJtd2FyZQkJPSBydDYxcGNpX2NoZWNrX2Zpcm13YXJlLApAQCAtMjc3Myw3ICsyODMyLDYgQEAKIAkucmVzZXRfdHVuZXIJCT0gcnQ2MXBjaV9yZXNldF90dW5lciwKIAkubGlua190dW5lcgkJPSBydDYxcGNpX2xpbmtfdHVuZXIsCiAJLndyaXRlX3R4X2Rlc2MJCT0gcnQ2MXBjaV93cml0ZV90eF9kZXNjLAotCS53cml0ZV90eF9kYXRhCQk9IHJ0MngwMHBjaV93cml0ZV90eF9kYXRhLAogCS53cml0ZV9iZWFjb24JCT0gcnQ2MXBjaV93cml0ZV9iZWFjb24sCiAJLmtpY2tfdHhfcXVldWUJCT0gcnQ2MXBjaV9raWNrX3R4X3F1ZXVlLAogCS5raWxsX3R4X3F1ZXVlCQk9IHJ0NjFwY2lfa2lsbF90eF9xdWV1ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5oCmluZGV4IGRmODBmMWEuLmUyZTcyOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuaApAQCAtMTUzLDEzICsxNTMsMTMgQEAKIAl1OCBrZXlbMTZdOwogCXU4IHR4X21pY1s4XTsKIAl1OCByeF9taWNbOF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBod19wYWlyd2lzZV90YV9lbnRyeSB7CiAJdTggYWRkcmVzc1s2XTsKIAl1OCBjaXBoZXI7CiAJdTggcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qCiAgKiBPdGhlciBvbi1jaGlwIHNoYXJlZCBtZW1vcnkgc3BhY2UuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYwppbmRleCA2ZTBkODJlLi5hYTlkZTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKQEAgLTI3MCw3ICsyNzAsNiBAQAogewogCXN0cnVjdCBod19rZXlfZW50cnkga2V5X2VudHJ5OwogCXN0cnVjdCBydDJ4MDBfZmllbGQzMiBmaWVsZDsKLQlpbnQgdGltZW91dDsKIAl1MzIgbWFzazsKIAl1MzIgcmVnOwogCkBAIC0zMDYsMTIgKzMwNSw4IEBACiAJCSAgICAgICBzaXplb2Yoa2V5X2VudHJ5LnJ4X21pYykpOwogCiAJCXJlZyA9IFNIQVJFRF9LRVlfRU5UUlkoa2V5LT5od19rZXlfaWR4KTsKLQkJdGltZW91dCA9IFJFR0lTVEVSX1RJTUVPVVQzMihzaXplb2Yoa2V5X2VudHJ5KSk7Ci0JCXJ0MngwMHVzYl92ZW5kb3JfcmVxdWVzdF9sYXJnZV9idWZmKHJ0MngwMGRldiwgVVNCX01VTFRJX1dSSVRFLAotCQkJCQkJICAgIFVTQl9WRU5ET1JfUkVRVUVTVF9PVVQsIHJlZywKLQkJCQkJCSAgICAma2V5X2VudHJ5LAotCQkJCQkJICAgIHNpemVvZihrZXlfZW50cnkpLAotCQkJCQkJICAgIHRpbWVvdXQpOworCQlydDJ4MDB1c2JfcmVnaXN0ZXJfbXVsdGl3cml0ZShydDJ4MDBkZXYsIHJlZywKKwkJCQkJICAgICAgJmtleV9lbnRyeSwgc2l6ZW9mKGtleV9lbnRyeSkpOwogCiAJCS8qCiAJCSAqIFRoZSBjaXBoZXIgdHlwZXMgYXJlIHN0b3JlZCBvdmVyIDIgcmVnaXN0ZXJzLgpAQCAtMzcyLDcgKzM2Nyw2IEBACiB7CiAJc3RydWN0IGh3X3BhaXJ3aXNlX3RhX2VudHJ5IGFkZHJfZW50cnk7CiAJc3RydWN0IGh3X2tleV9lbnRyeSBrZXlfZW50cnk7Ci0JaW50IHRpbWVvdXQ7CiAJdTMyIG1hc2s7CiAJdTMyIHJlZzsKIApAQCAtNDA3LDE3ICs0MDEsMTEgQEAKIAkJICAgICAgIHNpemVvZihrZXlfZW50cnkucnhfbWljKSk7CiAKIAkJcmVnID0gUEFJUldJU0VfS0VZX0VOVFJZKGtleS0+aHdfa2V5X2lkeCk7Ci0JCXRpbWVvdXQgPSBSRUdJU1RFUl9USU1FT1VUMzIoc2l6ZW9mKGtleV9lbnRyeSkpOwotCQlydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3RfbGFyZ2VfYnVmZihydDJ4MDBkZXYsIFVTQl9NVUxUSV9XUklURSwKLQkJCQkJCSAgICBVU0JfVkVORE9SX1JFUVVFU1RfT1VULCByZWcsCi0JCQkJCQkgICAgJmtleV9lbnRyeSwKLQkJCQkJCSAgICBzaXplb2Yoa2V5X2VudHJ5KSwKLQkJCQkJCSAgICB0aW1lb3V0KTsKKwkJcnQyeDAwdXNiX3JlZ2lzdGVyX211bHRpd3JpdGUocnQyeDAwZGV2LCByZWcsCisJCQkJCSAgICAgICZrZXlfZW50cnksIHNpemVvZihrZXlfZW50cnkpKTsKIAogCQkvKgogCQkgKiBTZW5kIHRoZSBhZGRyZXNzIGFuZCBjaXBoZXIgdHlwZSB0byB0aGUgaGFyZHdhcmUgcmVnaXN0ZXIuCi0JCSAqIFRoaXMgZGF0YSBmaXRzIHdpdGhpbiB0aGUgQ1NSIGNhY2hlIHNpemUsIHNvIHdlIGNhbiB1c2UKLQkJICogcnQyeDAwdXNiX3JlZ2lzdGVyX211bHRpd3JpdGUoKSBkaXJlY3RseS4KIAkJICovCiAJCW1lbXNldCgmYWRkcl9lbnRyeSwgMCwgc2l6ZW9mKGFkZHJfZW50cnkpKTsKIAkJbWVtY3B5KCZhZGRyX2VudHJ5LCBjcnlwdG8tPmFkZHJlc3MsIEVUSF9BTEVOKTsKQEAgLTgyOCw2ICs4MTYsOSBAQAogCXUzMiByZWc7CiAKIAlydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSNCwgJnJlZyk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSNF9PRkRNX1RYX1JBVEVfRE9XTiwgMSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSNF9PRkRNX1RYX1JBVEVfU1RFUCwgMCk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSNF9PRkRNX1RYX0ZBTExCQUNLX0NDSywgMCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSNF9MT05HX1JFVFJZX0xJTUlULAogCQkJICAgbGliY29uZi0+Y29uZi0+bG9uZ19mcmFtZV9tYXhfdHhfY291bnQpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjRfU0hPUlRfUkVUUllfTElNSVQsCkBAIC0xMDkyLDExICsxMDgzLDcgQEAKIAkvKgogCSAqIFdyaXRlIGZpcm13YXJlIHRvIGRldmljZS4KIAkgKi8KLQlydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3RfbGFyZ2VfYnVmZihydDJ4MDBkZXYsIFVTQl9NVUxUSV9XUklURSwKLQkJCQkJICAgIFVTQl9WRU5ET1JfUkVRVUVTVF9PVVQsCi0JCQkJCSAgICBGSVJNV0FSRV9JTUFHRV9CQVNFLAotCQkJCQkgICAgZGF0YSwgbGVuLAotCQkJCQkgICAgUkVHSVNURVJfVElNRU9VVDMyKGxlbikpOworCXJ0MngwMHVzYl9yZWdpc3Rlcl9tdWx0aXdyaXRlKHJ0MngwMGRldiwgRklSTVdBUkVfSU1BR0VfQkFTRSwgZGF0YSwgbGVuKTsKIAogCS8qCiAJICogU2VuZCBmaXJtd2FyZSByZXF1ZXN0IHRvIGRldmljZSB0byBsb2FkIGZpcm13YXJlLApAQCAtMTQxMyw3ICsxNDAwLDkgQEAKIAkJcnQ3M3VzYl90b2dnbGVfcngocnQyeDAwZGV2LCBzdGF0ZSk7CiAJCWJyZWFrOwogCWNhc2UgU1RBVEVfUkFESU9fSVJRX09OOgorCWNhc2UgU1RBVEVfUkFESU9fSVJRX09OX0lTUjoKIAljYXNlIFNUQVRFX1JBRElPX0lSUV9PRkY6CisJY2FzZSBTVEFURV9SQURJT19JUlFfT0ZGX0lTUjoKIAkJLyogTm8gc3VwcG9ydCwgYnV0IG5vIGVycm9yIGVpdGhlciAqLwogCQlicmVhazsKIAljYXNlIFNUQVRFX0RFRVBfU0xFRVA6CkBAIC0xNDQyLDcgKzE0MzEsNyBAQAogCQkJCSAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjKQogewogCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhza2IpOwotCV9fbGUzMiAqdHhkID0gKF9fbGUzMiAqKShza2ItPmRhdGEgLSBUWERfREVTQ19TSVpFKTsKKwlfX2xlMzIgKnR4ZCA9IChfX2xlMzIgKikgc2tiLT5kYXRhOwogCXUzMiB3b3JkOwogCiAJLyoKQEAgLTE1MDUsNiArMTQ5NCw3IEBACiAJLyoKIAkgKiBSZWdpc3RlciBkZXNjcmlwdG9yIGRldGFpbHMgaW4gc2tiIGZyYW1lIGRlc2NyaXB0b3IuCiAJICovCisJc2tiZGVzYy0+ZmxhZ3MgfD0gU0tCREVTQ19ERVNDX0lOX1NLQjsKIAlza2JkZXNjLT5kZXNjID0gdHhkOwogCXNrYmRlc2MtPmRlc2NfbGVuID0gVFhEX0RFU0NfU0laRTsKIH0KQEAgLTE1MjgsMTggKzE1MTgsMjcgQEAKIAlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjksIHJlZyk7CiAKIAkvKgotCSAqIFRha2UgdGhlIGRlc2NyaXB0b3IgaW4gZnJvbnQgb2YgdGhlIHNrYiBpbnRvIGFjY291bnQuCisJICogQWRkIHNwYWNlIGZvciB0aGUgZGVzY3JpcHRvciBpbiBmcm9udCBvZiB0aGUgc2tiLgogCSAqLwogCXNrYl9wdXNoKGVudHJ5LT5za2IsIFRYRF9ERVNDX1NJWkUpOworCW1lbXNldChlbnRyeS0+c2tiLT5kYXRhLCAwLCBUWERfREVTQ19TSVpFKTsKKworCS8qCisJICogV3JpdGUgdGhlIFRYIGRlc2NyaXB0b3IgZm9yIHRoZSBiZWFjb24uCisJICovCisJcnQ3M3VzYl93cml0ZV90eF9kZXNjKHJ0MngwMGRldiwgZW50cnktPnNrYiwgdHhkZXNjKTsKKworCS8qCisJICogRHVtcCBiZWFjb24gdG8gdXNlcnNwYWNlIHRocm91Z2ggZGVidWdmcy4KKwkgKi8KKwlydDJ4MDBkZWJ1Z19kdW1wX2ZyYW1lKHJ0MngwMGRldiwgRFVNUF9GUkFNRV9CRUFDT04sIGVudHJ5LT5za2IpOwogCiAJLyoKIAkgKiBXcml0ZSBlbnRpcmUgYmVhY29uIHdpdGggZGVzY3JpcHRvciB0byByZWdpc3Rlci4KIAkgKi8KIAliZWFjb25fYmFzZSA9IEhXX0JFQUNPTl9PRkZTRVQoZW50cnktPmVudHJ5X2lkeCk7Ci0JcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0X2xhcmdlX2J1ZmYocnQyeDAwZGV2LCBVU0JfTVVMVElfV1JJVEUsCi0JCQkJCSAgICBVU0JfVkVORE9SX1JFUVVFU1RfT1VULCBiZWFjb25fYmFzZSwKLQkJCQkJICAgIGVudHJ5LT5za2ItPmRhdGEsIGVudHJ5LT5za2ItPmxlbiwKLQkJCQkJICAgIFJFR0lTVEVSX1RJTUVPVVQzMihlbnRyeS0+c2tiLT5sZW4pKTsKKwlydDJ4MDB1c2JfcmVnaXN0ZXJfbXVsdGl3cml0ZShydDJ4MDBkZXYsIGJlYWNvbl9iYXNlLAorCQkJCSAgICAgIGVudHJ5LT5za2ItPmRhdGEsIGVudHJ5LT5za2ItPmxlbik7CiAKIAkvKgogCSAqIEVuYWJsZSBiZWFjb25pbmcgYWdhaW4uCkBAIC0yMTM4LDYgKzIxMzcsOCBAQAogCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9GSVJNV0FSRSwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCWlmICghbW9kcGFyYW1fbm9od2NyeXB0KQogCQlfX3NldF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJX19zZXRfYml0KERSSVZFUl9TVVBQT1JUX0xJTktfVFVOSU5HLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJX19zZXRfYml0KERSSVZFUl9TVVBQT1JUX1dBVENIRE9HLCAmcnQyeDAwZGV2LT5mbGFncyk7CiAKIAkvKgogCSAqIFNldCB0aGUgcnNzaSBvZmZzZXQuCkBAIC0yMjMxLDYgKzIyMzIsOCBAQAogCS5jb25maWd1cmVfZmlsdGVyCT0gcnQyeDAwbWFjX2NvbmZpZ3VyZV9maWx0ZXIsCiAJLnNldF90aW0JCT0gcnQyeDAwbWFjX3NldF90aW0sCiAJLnNldF9rZXkJCT0gcnQyeDAwbWFjX3NldF9rZXksCisJLnN3X3NjYW5fc3RhcnQJCT0gcnQyeDAwbWFjX3N3X3NjYW5fc3RhcnQsCisJLnN3X3NjYW5fY29tcGxldGUJPSBydDJ4MDBtYWNfc3dfc2Nhbl9jb21wbGV0ZSwKIAkuZ2V0X3N0YXRzCQk9IHJ0MngwMG1hY19nZXRfc3RhdHMsCiAJLmJzc19pbmZvX2NoYW5nZWQJPSBydDJ4MDBtYWNfYnNzX2luZm9fY2hhbmdlZCwKIAkuY29uZl90eAkJPSBydDczdXNiX2NvbmZfdHgsCkBAIC0yMjUxLDggKzIyNTQsOCBAQAogCS5saW5rX3N0YXRzCQk9IHJ0NzN1c2JfbGlua19zdGF0cywKIAkucmVzZXRfdHVuZXIJCT0gcnQ3M3VzYl9yZXNldF90dW5lciwKIAkubGlua190dW5lcgkJPSBydDczdXNiX2xpbmtfdHVuZXIsCisJLndhdGNoZG9nCQk9IHJ0MngwMHVzYl93YXRjaGRvZywKIAkud3JpdGVfdHhfZGVzYwkJPSBydDczdXNiX3dyaXRlX3R4X2Rlc2MsCi0JLndyaXRlX3R4X2RhdGEJCT0gcnQyeDAwdXNiX3dyaXRlX3R4X2RhdGEsCiAJLndyaXRlX2JlYWNvbgkJPSBydDczdXNiX3dyaXRlX2JlYWNvbiwKIAkuZ2V0X3R4X2RhdGFfbGVuCT0gcnQ3M3VzYl9nZXRfdHhfZGF0YV9sZW4sCiAJLmtpY2tfdHhfcXVldWUJCT0gcnQyeDAwdXNiX2tpY2tfdHhfcXVldWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuaAppbmRleCA3YWJlN2ViLi40NGQ1YjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmgKQEAgLTEwOCwxMyArMTA4LDEzIEBACiAJdTgga2V5WzE2XTsKIAl1OCB0eF9taWNbOF07CiAJdTggcnhfbWljWzhdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaHdfcGFpcndpc2VfdGFfZW50cnkgewogCXU4IGFkZHJlc3NbNl07CiAJdTggY2lwaGVyOwogCXU4IHJlc2VydmVkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKgogICogU2luY2UgTlVMTCBmcmFtZSB3b24ndCBiZSB0aGF0IGxvbmcgKDI1NiBieXRlKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwLmgKaW5kZXggNGJhZjBjZi4uMzA1MjMzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwLmgKQEAgLTM2LDcgKzM2LDcgQEAKIAl1OCBhZ2M7CiAJdTggZmxhZ3MyOwogCXUzMiByZXNlcnZlZFsyXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHJ0bDgxODBfcnhfZGVzYyB7CiAJX19sZTMyIGZsYWdzOwpAQCAtNDUsNyArNDUsNyBAQAogCQlfX2xlMzIgcnhfYnVmOwogCQlfX2xlNjQgdHNmdDsKIAl9OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgcnRsODE4MF90eF9yaW5nIHsKIAlzdHJ1Y3QgcnRsODE4MF90eF9kZXNjICpkZXNjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX2Rldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX2Rldi5jCmluZGV4IDUxNTgxN2QuLjFkODE3ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MF9kZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODBfZGV2LmMKQEAgLTEwMyw2ICsxMDMsNyBAQAogewogCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CiAJdW5zaWduZWQgaW50IGNvdW50ID0gMzI7CisJdTggc2lnbmFsLCBhZ2MsIHNxOwogCiAJd2hpbGUgKGNvdW50LS0pIHsKIAkJc3RydWN0IHJ0bDgxODBfcnhfZGVzYyAqZW50cnkgPSAmcHJpdi0+cnhfcmluZ1twcml2LT5yeF9pZHhdOwpAQCAtMTMwLDEwICsxMzEsMTggQEAKIAkJCXNrYl9wdXQoc2tiLCBmbGFncyAmIDB4RkZGKTsKIAogCQkJcnhfc3RhdHVzLmFudGVubmEgPSAoZmxhZ3MyID4+IDE1KSAmIDE7Ci0JCQkvKiBUT0RPOiBpbXByb3ZlIHNpZ25hbC9yc3NpIHJlcG9ydGluZyAqLwotCQkJcnhfc3RhdHVzLnNpZ25hbCA9IChmbGFnczIgPj4gOCkgJiAweDdGOwotCQkJLyogWFhYOiBpcyB0aGlzIGNvcnJlY3Q/ICovCiAJCQlyeF9zdGF0dXMucmF0ZV9pZHggPSAoZmxhZ3MgPj4gMjApICYgMHhGOworCQkJYWdjID0gKGZsYWdzMiA+PiAxNykgJiAweDdGOworCQkJaWYgKHByaXYtPnI4MTg1KSB7CisJCQkJaWYgKHJ4X3N0YXR1cy5yYXRlX2lkeCA+IDMpCisJCQkJCXNpZ25hbCA9IDkwIC0gY2xhbXBfdCh1OCwgYWdjLCAyNSwgOTApOworCQkJCWVsc2UKKwkJCQkJc2lnbmFsID0gOTUgLSBjbGFtcF90KHU4LCBhZ2MsIDMwLCA5NSk7CisJCQl9IGVsc2UgeworCQkJCXNxID0gZmxhZ3MyICYgMHhmZjsKKwkJCQlzaWduYWwgPSBwcml2LT5yZi0+Y2FsY19yc3NpKGFnYywgc3EpOworCQkJfQorCQkJcnhfc3RhdHVzLnNpZ25hbCA9IHNpZ25hbDsKIAkJCXJ4X3N0YXR1cy5mcmVxID0gZGV2LT5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxOwogCQkJcnhfc3RhdHVzLmJhbmQgPSBkZXYtPmNvbmYuY2hhbm5lbC0+YmFuZDsKIAkJCXJ4X3N0YXR1cy5tYWN0aW1lID0gbGU2NF90b19jcHUoZW50cnktPnRzZnQpOwpAQCAtMzUyLDcgKzM2MSw3IEBACiAKIAkvKiBjaGVjayBzdWNjZXNzIG9mIHJlc2V0ICovCiAJaWYgKHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DTUQpICYgUlRMODE4WF9DTURfUkVTRVQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVzZXQgdGltZW91dCFcbiIsIHdpcGh5X25hbWUoZGV2LT53aXBoeSkpOworCQl3aXBoeV9lcnIoZGV2LT53aXBoeSwgInJlc2V0IHRpbWVvdXQhXG4iKTsKIAkJcmV0dXJuIC1FVElNRURPVVQ7CiAJfQogCkBAIC00MzYsOCArNDQ1LDcgQEAKIAkJCQkJICAgICAmcHJpdi0+cnhfcmluZ19kbWEpOwogCiAJaWYgKCFwcml2LT5yeF9yaW5nIHx8ICh1bnNpZ25lZCBsb25nKXByaXYtPnJ4X3JpbmcgJiAweEZGKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBhbGxvY2F0ZSBSWCByaW5nXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7CisJCXdpcGh5X2VycihkZXYtPndpcGh5LCAiY2Fubm90IGFsbG9jYXRlIHJ4IHJpbmdcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTQ5NCw4ICs1MDIsOCBAQAogCiAJcmluZyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYtPnBkZXYsIHNpemVvZigqcmluZykgKiBlbnRyaWVzLCAmZG1hKTsKIAlpZiAoIXJpbmcgfHwgKHVuc2lnbmVkIGxvbmcpcmluZyAmIDB4RkYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGFsbG9jYXRlIFRYIHJpbmcgKHByaW8gPSAlZClcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKGRldi0+d2lwaHkpLCBwcmlvKTsKKwkJd2lwaHlfZXJyKGRldi0+d2lwaHksICJjYW5ub3QgYWxsb2NhdGUgdHggcmluZyAocHJpbyA9ICVkKVxuIiwKKwkJCSAgcHJpbyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtNTYwLDggKzU2OCw3IEBACiAJcmV0ID0gcmVxdWVzdF9pcnEocHJpdi0+cGRldi0+aXJxLCBydGw4MTgwX2ludGVycnVwdCwKIAkJCSAgSVJRRl9TSEFSRUQsIEtCVUlMRF9NT0ROQU1FLCBkZXYpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlZ2lzdGVyIElSUSBoYW5kbGVyXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7CisJCXdpcGh5X2VycihkZXYtPndpcGh5LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGlycSBoYW5kbGVyXG4iKTsKIAkJZ290byBlcnJfZnJlZV9yaW5nczsKIAl9CiAKQEAgLTY3MSw3ICs2NzgsNyBAQAogCSAgICAgICAodTY0KShydGw4MTh4X2lvcmVhZDMyKHByaXYsICZwcml2LT5tYXAtPlRTRlRbMV0pKSA8PCAzMjsKIH0KIAotdm9pZCBydGw4MTgwX2JlYWNvbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyB2b2lkIHJ0bDgxODBfYmVhY29uX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBydGw4MTgwX3ZpZiAqdmlmX3ByaXYgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0bDgxODBfdmlmLCBiZWFjb25fd29yay53b3JrKTsKQEAgLTEwOTgsOSArMTEwNSw4IEBACiAJCWdvdG8gZXJyX2lvdW5tYXA7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGh3YWRkciAlcE0sICVzICsgJXNcbiIsCi0JICAgICAgIHdpcGh5X25hbWUoZGV2LT53aXBoeSksIG1hY19hZGRyLAotCSAgICAgICBjaGlwX25hbWUsIHByaXYtPnJmLT5uYW1lKTsKKwl3aXBoeV9pbmZvKGRldi0+d2lwaHksICJod2FkZHIgJXBtLCAlcyArICVzXG4iLAorCQkgICBtYWNfYWRkciwgY2hpcF9uYW1lLCBwcml2LT5yZi0+bmFtZSk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX2dyZjUxMDEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MF9ncmY1MTAxLmMKaW5kZXggOTQ3ZWU1NS4uNWNhYjlkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX2dyZjUxMDEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODBfZ3JmNTEwMS5jCkBAIC02OSw2ICs2OSwxNSBAQAogCXJ0bDgxODBfd3JpdGVfcGh5KGRldiwgMHgxMCwgYW50KTsKIH0KIAorc3RhdGljIHU4IGdyZjUxMDFfcmZfY2FsY19yc3NpKHU4IGFnYywgdTggc3EpCit7CisJaWYgKGFnYyA+IDYwKQorCQlyZXR1cm4gNjU7CisKKwkvKiBUT0RPKD8pOiBqdXN0IHJldHVybiBhZ2MgKG9yIGFnYyArIDUpIHRvIGF2b2lkIG11bHQgLyBkaXYgKi8KKwlyZXR1cm4gNjUgKiBhZ2MgLyA2MDsKK30KKwogc3RhdGljIHZvaWQgZ3JmNTEwMV9yZl9zZXRfY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQogewpAQCAtMTc2LDUgKzE4NSw2IEBACiAJLm5hbWUJCT0gIkdDVCIsCiAJLmluaXQJCT0gZ3JmNTEwMV9yZl9pbml0LAogCS5zdG9wCQk9IGdyZjUxMDFfcmZfc3RvcCwKLQkuc2V0X2NoYW4JPSBncmY1MTAxX3JmX3NldF9jaGFubmVsCisJLnNldF9jaGFuCT0gZ3JmNTEwMV9yZl9zZXRfY2hhbm5lbCwKKwkuY2FsY19yc3NpCT0gZ3JmNTEwMV9yZl9jYWxjX3Jzc2ksCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX21heDI4MjAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MF9tYXgyODIwLmMKaW5kZXggNmM4MjVmZC4uMTZjNDY1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX21heDI4MjAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODBfbWF4MjgyMC5jCkBAIC03NCw2ICs3NCwyMiBAQAogCXJ0bDgxODBfd3JpdGVfcGh5KGRldiwgMHgxMCwgYW50KTsKIH0KIAorc3RhdGljIHU4IG1heDI4MjBfcmZfY2FsY19yc3NpKHU4IGFnYywgdTggc3EpCit7CisJYm9vbCBvZGQ7CisKKwlvZGQgPSAhIShhZ2MgJiAxKTsKKworCWFnYyA+Pj0gMTsKKwlpZiAob2RkKQorCQlhZ2MgKz0gNzY7CisJZWxzZQorCQlhZ2MgKz0gNjY7CisKKwkvKiBUT0RPOiBjaGFuZ2UgYWRkZW5kcyBhYm92ZSB0byBhdm9pZCBtdWx0IC8gZGl2IGJlbG93ICovCisJcmV0dXJuIDY1ICogYWdjIC8gMTAwOworfQorCiBzdGF0aWMgdm9pZCBtYXgyODIwX3JmX3NldF9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCiB7CkBAIC0xNDgsNSArMTY0LDYgQEAKIAkubmFtZQkJPSAiTWF4aW0iLAogCS5pbml0CQk9IG1heDI4MjBfcmZfaW5pdCwKIAkuc3RvcAkJPSBtYXgyODIwX3JmX3N0b3AsCi0JLnNldF9jaGFuCT0gbWF4MjgyMF9yZl9zZXRfY2hhbm5lbAorCS5zZXRfY2hhbgk9IG1heDI4MjBfcmZfc2V0X2NoYW5uZWwsCisJLmNhbGNfcnNzaQk9IG1heDI4MjBfcmZfY2FsY19yc3NpLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MF9ydGw4MjI1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODBfcnRsODIyNS5jCmluZGV4IDRkMmJlMGQuLjY5ZTRkNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MF9ydGw4MjI1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX3J0bDgyMjUuYwpAQCAtNTAsNyArNTAsMTAgQEAKIAl1ZGVsYXkoMTApOwogCiAJZm9yIChpID0gMTU7IGkgPj0gMDsgaS0tKSB7Ci0JCXUxNiByZWcgPSByZWc4MCB8ICEhKGJhbmdkYXRhICYgKDEgPDwgaSkpOworCQl1MTYgcmVnID0gcmVnODA7CisKKwkJaWYgKGJhbmdkYXRhICYgKDEgPDwgaSkpCisJCQlyZWcgfD0gMTsKIAogCQlpZiAoaSAmIDEpCiAJCQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsIHJlZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODBfc2EyNDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODBfc2EyNDAwLmMKaW5kZXggY2VhNGUwYy4uZDA2NGZjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX3NhMjQwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MF9zYTI0MDAuYwpAQCAtNzYsNiArNzYsMzEgQEAKIAogfQogCitzdGF0aWMgdTggc2EyNDAwX3JmX3Jzc2lfbWFwW10gPSB7CisJMHg2NCwgMHg2NCwgMHg2MywgMHg2MiwgMHg2MSwgMHg2MCwgMHg1ZiwgMHg1ZSwKKwkweDVkLCAweDVjLCAweDViLCAweDVhLCAweDU3LCAweDU0LCAweDUyLCAweDUwLAorCTB4NGUsIDB4NGMsIDB4NGEsIDB4NDgsIDB4NDYsIDB4NDQsIDB4NDEsIDB4M2YsCisJMHgzYywgMHgzYSwgMHgzNywgMHgzNiwgMHgzNiwgMHgxYywgMHgxYywgMHgxYiwKKwkweDFiLCAweDFhLCAweDFhLCAweDE5LCAweDE5LCAweDE4LCAweDE4LCAweDE3LAorCTB4MTcsIDB4MTYsIDB4MTYsIDB4MTUsIDB4MTUsIDB4MTQsIDB4MTQsIDB4MTMsCisJMHgxMywgMHgxMiwgMHgxMiwgMHgxMSwgMHgxMSwgMHgxMCwgMHgxMCwgMHgwZiwKKwkweDBmLCAweDBlLCAweDBlLCAweDBkLCAweDBkLCAweDBjLCAweDBjLCAweDBiLAorCTB4MGIsIDB4MGEsIDB4MGEsIDB4MDksIDB4MDksIDB4MDgsIDB4MDgsIDB4MDcsCisJMHgwNywgMHgwNiwgMHgwNiwgMHgwNSwgMHgwNCwgMHgwMywgMHgwMiwKK307CisKK3N0YXRpYyB1OCBzYTI0MDBfcmZfY2FsY19yc3NpKHU4IGFnYywgdTggc3EpCit7CisJaWYgKHNxID09IDB4ODApCisJCXJldHVybiAxOworCisJaWYgKHNxID4gNzgpCisJCXJldHVybiAzMjsKKworCS8qIFRPRE86IHJlY2FsYyBzYTI0MDBfcmZfcnNzaV9tYXAgdG8gYXZvaWQgbXVsdCAvIGRpdiAqLworCXJldHVybiA2NSAqIHNhMjQwMF9yZl9yc3NpX21hcFtzcV0gLyAxMDA7Cit9CisKIHN0YXRpYyB2b2lkIHNhMjQwMF9yZl9zZXRfY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCiAJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCiB7CkBAIC0xOTgsNSArMjIzLDYgQEAKIAkubmFtZQkJPSAiUGhpbGlwcyIsCiAJLmluaXQJCT0gc2EyNDAwX3JmX2luaXQsCiAJLnN0b3AJCT0gc2EyNDAwX3JmX3N0b3AsCi0JLnNldF9jaGFuCT0gc2EyNDAwX3JmX3NldF9jaGFubmVsCisJLnNldF9jaGFuCT0gc2EyNDAwX3JmX3NldF9jaGFubmVsLAorCS5jYWxjX3Jzc2kJPSBzYTI0MDBfcmZfY2FsY19yc3NpLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3LmgKaW5kZXggNmJiMzIxMS4uOTg4NzgxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3LmgKQEAgLTQ3LDcgKzQ3LDcgQEAKIAl1OCBhZ2M7CiAJdTggcmVzZXJ2ZWQ7CiAJX19sZTY0IG1hY190aW1lOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBydGw4MTg3Yl9yeF9oZHIgewogCV9fbGUzMiBmbGFnczsKQEAgLTU5LDcgKzU5LDcgQEAKIAlfX2xlMTYgc25yX2xvbmcyZW5kOwogCXM4IHB3ZGJfZzEyOwogCXU4IGZvdDsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiB7cnRsODE4NyxydGw4MTg3Yn1fdHhfaW5mbyBpcyBpbiBza2IgKi8KIApAQCAtNjgsNyArNjgsNyBAQAogCV9fbGUxNiBydHNfZHVyYXRpb247CiAJX19sZTE2IGxlbjsKIAlfX2xlMzIgcmV0cnk7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHJ0bDgxODdiX3R4X2hkciB7CiAJX19sZTMyIGZsYWdzOwpAQCAtODAsNyArODAsNyBAQAogCV9fbGUzMiB1bnVzZWRfMzsKIAlfX2xlMzIgcmV0cnk7CiAJX19sZTMyIHVudXNlZF80WzJdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIGVudW0gewogCURFVklDRV9SVEw4MTg3LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2Rldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2Rldi5jCmluZGV4IDg5MWI4NDkuLjU3MzhhNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19kZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfZGV2LmMKQEAgLTU3Myw3ICs1NzMsNyBAQAogCX0gd2hpbGUgKC0taSk7CiAKIAlpZiAoIWkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogUmVzZXQgdGltZW91dCFcbiIsIHdpcGh5X25hbWUoZGV2LT53aXBoeSkpOworCQl3aXBoeV9lcnIoZGV2LT53aXBoeSwgInJlc2V0IHRpbWVvdXQhXG4iKTsKIAkJcmV0dXJuIC1FVElNRURPVVQ7CiAJfQogCkBAIC01ODksOCArNTg5LDcgQEAKIAl9IHdoaWxlICgtLWkpOwogCiAJaWYgKCFpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGVlcHJvbSByZXNldCB0aW1lb3V0IVxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoZGV2LT53aXBoeSkpOworCQl3aXBoeV9lcnIoZGV2LT53aXBoeSwgImVlcHJvbSByZXNldCB0aW1lb3V0IVxuIik7CiAJCXJldHVybiAtRVRJTUVET1VUOwogCX0KIApAQCAtMTUyNyw5ICsxNTI2LDkgQEAKIAltdXRleF9pbml0KCZwcml2LT5jb25mX211dGV4KTsKIAlza2JfcXVldWVfaGVhZF9pbml0KCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSk7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogaHdhZGRyICVwTSwgJXMgViVkICsgJXMsIHJma2lsbCBtYXNrICVkXG4iLAotCSAgICAgICB3aXBoeV9uYW1lKGRldi0+d2lwaHkpLCBtYWNfYWRkciwKLQkgICAgICAgY2hpcF9uYW1lLCBwcml2LT5hc2ljX3JldiwgcHJpdi0+cmYtPm5hbWUsIHByaXYtPnJma2lsbF9tYXNrKTsKKwl3aXBoeV9pbmZvKGRldi0+d2lwaHksICJod2FkZHIgJXBtLCAlcyB2JWQgKyAlcywgcmZraWxsIG1hc2sgJWRcbiIsCisJCSAgIG1hY19hZGRyLCBjaGlwX25hbWUsIHByaXYtPmFzaWNfcmV2LCBwcml2LT5yZi0+bmFtZSwKKwkJICAgcHJpdi0+cmZraWxsX21hc2spOwogCiAjaWZkZWYgQ09ORklHX1JUTDgxODdfTEVEUwogCWVlcHJvbV85M2N4Nl9yZWFkKCZlZXByb20sIDB4M0YsICZyZWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X3J0bDgyMjUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19ydGw4MjI1LmMKaW5kZXggYTA5ODE5My4uZmQ5NmY5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X3J0bDgyMjUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfcnRsODIyNS5jCkBAIC0zNjYsOCArMzY2LDggQEAKIAkJcnRsODIyNV93cml0ZShkZXYsIDB4MDIsIDB4MDQ0ZCk7CiAJCW1zbGVlcCgxMDApOwogCQlpZiAoIShydGw4MjI1X3JlYWQoZGV2LCA2KSAmICgxIDw8IDcpKSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBSRiBDYWxpYnJhdGlvbiBGYWlsZWQhICV4XG4iLAotCQkJICAgICAgIHdpcGh5X25hbWUoZGV2LT53aXBoeSksIHJ0bDgyMjVfcmVhZChkZXYsIDYpKTsKKwkJCXdpcGh5X3dhcm4oZGV2LT53aXBoeSwgInJmIGNhbGlicmF0aW9uIGZhaWxlZCEgJXhcbiIsCisJCQkJICAgcnRsODIyNV9yZWFkKGRldiwgNikpOwogCX0KIAogCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDAsIDB4MTI3KTsKQEAgLTczNSw4ICs3MzUsOCBAQAogCQlydGw4MjI1X3dyaXRlKGRldiwgMHgwMiwgMHgwNDREKTsKIAkJbXNsZWVwKDEwMCk7CiAJCWlmICghKHJ0bDgyMjVfcmVhZChkZXYsIDYpICYgKDEgPDwgNykpKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFJGIENhbGlicmF0aW9uIEZhaWxlZCEgJXhcbiIsCi0JCQkgICAgICAgd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgcnRsODIyNV9yZWFkKGRldiwgNikpOworCQkJd2lwaHlfd2FybihkZXYtPndpcGh5LCAicmYgY2FsaWJyYXRpb24gZmFpbGVkISAleFxuIiwKKwkJCQkgICBydGw4MjI1X3JlYWQoZGV2LCA2KSk7CiAJfQogCiAJbXNsZWVwKDIwMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxOHguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4eC5oCmluZGV4IDg1MjI0OTAuLjE2MTVmNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4eC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4eC5oCkBAIC0xODUsNyArMTg1LDcgQEAKIAl1OAlyZXNlcnZlZF8yMls0XTsKIAlfX2xlMTYJVEFMTFlfQ05UOwogCXU4CVRBTExZX1NFTDsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgcnRsODE4eF9yZl9vcHMgewogCWNoYXIgKm5hbWU7CkBAIC0xOTMsNiArMTkzLDcgQEAKIAl2b2lkICgqc3RvcCkoc3RydWN0IGllZWU4MDIxMV9odyAqKTsKIAl2b2lkICgqc2V0X2NoYW4pKHN0cnVjdCBpZWVlODAyMTFfaHcgKiwgc3RydWN0IGllZWU4MDIxMV9jb25mICopOwogCXZvaWQgKCpjb25mX2VycCkoc3RydWN0IGllZWU4MDIxMV9odyAqLCBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICopOworCXU4ICgqY2FsY19yc3NpKSh1OCBhZ2MsIHU4IHNxKTsKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvS2NvbmZpZwppbmRleCAzMzdmYzdiLi4yZjk4MDU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvS2NvbmZpZwpAQCAtNDEsNyArNDEsNyBAQAogCiBjb25maWcgV0wxMjcxCiAJdHJpc3RhdGUgIlRJIHdsMTI3MSBzdXBwb3J0IgotCWRlcGVuZHMgb24gV0wxMlhYICYmIFNQSV9NQVNURVIgJiYgR0VORVJJQ19IQVJESVJRUworCWRlcGVuZHMgb24gV0wxMlhYICYmIEdFTkVSSUNfSEFSRElSUVMKIAlkZXBlbmRzIG9uIElORVQKIAlzZWxlY3QgRldfTE9BREVSCiAJc2VsZWN0IENSQzcKQEAgLTY1LDcgKzY1LDcgQEAKIAogY29uZmlnIFdMMTI3MV9TRElPCiAJdHJpc3RhdGUgIlRJIHdsMTI3MSBTRElPIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBXTDEyNzEgJiYgTU1DICYmIEFSTQorCWRlcGVuZHMgb24gV0wxMjcxICYmIE1NQwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFNESU8gaW50ZXJmYWNlIG9mIGFkYXB0ZXJzIHVzaW5nCiAJICBUSSB3bDEyNzEgY2hpcHNldC4gIFNlbGVjdCB0aGlzIGlmIHlvdXIgcGxhdGZvcm0gaXMgdXNpbmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9NYWtlZmlsZQppbmRleCAyN2RkZDJiLi4wNzhiNDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L01ha2VmaWxlCkBAIC0xMCw3ICsxMCw3IEBACiB3bDEyNzEtb2JqcwkJPSB3bDEyNzFfbWFpbi5vICB3bDEyNzFfY21kLm8gd2wxMjcxX2lvLm8gXAogCQkJICB3bDEyNzFfZXZlbnQubyB3bDEyNzFfdHgubyAgd2wxMjcxX3J4Lm8gICBcCiAJCQkgIHdsMTI3MV9wcy5vICAgIHdsMTI3MV9hY3gubyB3bDEyNzFfYm9vdC5vIFwKLQkJCSAgd2wxMjcxX2luaXQubyAgd2wxMjcxX2RlYnVnZnMubworCQkJICB3bDEyNzFfaW5pdC5vICB3bDEyNzFfZGVidWdmcy5vIHdsMTI3MV9zY2FuLm8KIAogd2wxMjcxLSQoQ09ORklHX05MODAyMTFfVEVTVE1PREUpCSs9IHdsMTI3MV90ZXN0bW9kZS5vCiBvYmotJChDT05GSUdfV0wxMjcxKQkrPSB3bDEyNzEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MS5oCmluZGV4IDRmNWYwMmEuLjZiOTQyYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxLmgKQEAgLTM4MSw2ICszODEsOSBAQAogCiAJdTMyIGNoaXBfaWQ7CiAJY2hhciBmd192ZXJbMjFdOworCisJLyogTW9zdCByZWNlbnRseSByZXBvcnRlZCBub2lzZSBpbiBkQm0gKi8KKwlzOCBub2lzZTsKIH07CiAKIGludCB3bDEyNTFfcGx0X3N0YXJ0KHN0cnVjdCB3bDEyNTEgKndsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfYWN4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2FjeC5oCmluZGV4IDI2MTYwYzQuLjg0MmRmMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfYWN4LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9hY3guaApAQCAtNjAsNyArNjAsNyBAQAogCS8qIHRoZSBudW1iZXIgb2YgbWlzc2VkIHNlcXVlbmNlIG51bWJlcnMgaW4gdGhlIHNxdWVudGlhbGx5ICovCiAJLyogdmFsdWVzIG9mIGZyYW1lcyBzZXEgbnVtYmVycyAqLwogCXUzMiBzZXFfbnVtX21pc3M7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBhY3hfcmV2aXNpb24gewogCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKQEAgLTg5LDcgKzg5LDcgQEAKIAkgKiBiaXRzIDI0IC0gMzE6IENoaXAgSUQgLSBUaGUgV2lMaW5rIGNoaXAgSUQuCiAJICovCiAJdTMyIGh3X3ZlcnNpb247Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIGVudW0gd2wxMjUxX3BzbV9tb2RlIHsKIAkvKiBBY3RpdmUgbW9kZSAqLwpAQCAtMTExLDcgKzExMSw3IEBACiAJLyogMiAtIEVMUCBtb2RlOiBEZWVwIC8gTWF4IHNsZWVwKi8KIAl1OCAgc2xlZXBfYXV0aDsKIAl1OCAgcGFkZGluZ1szXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogZW51bSB7CiAJSE9TVElGX1BDSV9NQVNURVJfSE9TVF9JTkRJUkVDVCwKQEAgLTE1OSw3ICsxNTksNyBAQAogCSAqIGNvbXBsZXRlIHJpbmcgdW50aWwgYW4gaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4KIAkgKi8KIAl1MzIgdHhfY29tcGxldGVfdGltZW91dDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogCiBzdHJ1Y3QgYWN4X2RhdGFfcGF0aF9wYXJhbXNfcmVzcCB7CkBAIC0xODAsNyArMTgwLDcgQEAKIAl1MzIgdHhfY29udHJvbF9hZGRyOwogCiAJdTMyIHR4X2NvbXBsZXRlX2FkZHI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgVFhfTVNEVV9MSUZFVElNRV9NSU4gICAgICAgMAogI2RlZmluZSBUWF9NU0RVX0xJRkVUSU1FX01BWCAgICAgICAzMDAwCkBAIC0xOTcsNyArMTk3LDcgQEAKIAkgKiBmaXJtd2FyZSBkaXNjYXJkcyB0aGUgTVNEVS4KIAkgKi8KIAl1MzIgbGlmZXRpbWU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qCiAgKiBSWCBDb25maWcgT3B0aW9ucyBUYWJsZQpAQCAtMjg1LDcgKzI4NSw3IEBACiAKIAl1MzIgY29uZmlnX29wdGlvbnM7CiAJdTMyIGZpbHRlcl9vcHRpb25zOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBlbnVtIHsKIAlRT1NfQUNfQkUgPSAwLApAQCAtMzI1LDEzICszMjUsMTMgQEAKIAogCS8qIExvd2VzdCBtZW1vcnkgYmxvY2tzIGd1YXJhbnRlZWQgZm9yIHRoaXMgcXVldWUgKi8KIAl1MTYgbG93X3RocmVzaG9sZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGFjeF9wYWNrZXRfZGV0ZWN0aW9uIHsKIAlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CiAKIAl1MzIgdGhyZXNob2xkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAKIGVudW0gYWN4X3Nsb3RfdHlwZSB7CkBAIC0zNDksNyArMzQ5LDcgQEAKIAl1OCB3b25lX2luZGV4OyAvKiBSZXNlcnZlZCAqLwogCXU4IHNsb3RfdGltZTsKIAl1OCByZXNlcnZlZFs2XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogCiAjZGVmaW5lIEFERFJFU1NfR1JPVVBfTUFYCSg4KQpAQCAtMzYyLDcgKzM2Miw3IEBACiAJdTggbnVtX2dyb3VwczsKIAl1OCBwYWRbMl07CiAJdTggbWFjX3RhYmxlW0FERFJFU1NfR1JPVVBfTUFYX0xFTl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIAogI2RlZmluZSAgUlhfVElNRU9VVF9QU19QT0xMX01JTiAgICAwCkBAIC0zODgsNyArMzg4LDcgQEAKIAkgKiBmcm9tIGFuIFVQU0QgZW5hYmxlZCBxdWV1ZS4KIAkgKi8KIAl1MTYgdXBzZF90aW1lb3V0OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIFJUU19USFJFU0hPTERfTUlOICAgICAgICAgICAgICAwCiAjZGVmaW5lIFJUU19USFJFU0hPTERfTUFYICAgICAgICAgICAgICA0MDk2CkBAIC0zOTksNyArMzk5LDcgQEAKIAogCXUxNiB0aHJlc2hvbGQ7CiAJdTggcGFkWzJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYWN4X2JlYWNvbl9maWx0ZXJfb3B0aW9uIHsKIAlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CkBAIC00MTUsNyArNDE1LDcgQEAKIAkgKi8KIAl1OCBtYXhfbnVtX2JlYWNvbnM7CiAJdTggcGFkWzJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKgogICogQUNYQmVhY29uRmlsdGVyRW50cnkgKG5vdCAyMjEpCkBAIC00NjEsNyArNDYxLDcgQEAKIAl1OCBudW1faWU7CiAJdTggdGFibGVbQkVBQ09OX0ZJTFRFUl9UQUJMRV9NQVhfU0laRV07CiAJdTggcGFkWzNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIFNZTkNIX0ZBSUxfREVGQVVMVF9USFJFU0hPTEQgICAgMTAgICAgIC8qIG51bWJlciBvZiBiZWFjb25zICovCiAjZGVmaW5lIE5PX0JFQUNPTl9ERUZBVUxUX1RJTUVPVVQgICAgICAgKDUwMCkgLyogaW4gbWljcm9zZWNvbmRzICovCkBAIC00OTQsNyArNDk0LDcgQEAKIAkgKi8KIAl1OCBlbmFibGU7CiAJdTggcGFkWzNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIFBUQV9BTlRFTk5BX1RZUEVfREVGCQkgICgwKQogI2RlZmluZSBQVEFfQlRfSFBfTUFYVElNRV9ERUYJCSAgKDIwMDApCkBAIC02NDgsNyArNjQ4LDcgQEAKIAogCS8qIHJhbmdlOiAwIC0gMjAgIGRlZmF1bHQ6IDEgKi8KIAl1OCBidF9ocF9yZXNwZWN0ZWRfbnVtOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIENDQV9USFJTSF9FTkFCTEVfRU5FUkdZX0QgICAgICAgMHgxNDBBCiAjZGVmaW5lIENDQV9USFJTSF9ESVNBQkxFX0VORVJHWV9EICAgICAgMHhGRkVGCkBAIC02NjAsNyArNjYwLDcgQEAKIAl1MTYgcnhfY2NhX3RocmVzaG9sZDsKIAl1OCB0eF9lbmVyZ3lfZGV0ZWN0aW9uOwogCXU4IHBhZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBCQ05fUlhfVElNRU9VVF9ERUZfVkFMVUUgICAgICAgIDEwMDAwCiAjZGVmaW5lIEJST0FEQ0FTVF9SWF9USU1FT1VUX0RFRl9WQUxVRSAgMjAwMDAKQEAgLTY3OSwxNCArNjc5LDE0IEBACiAJLyogQ29uc2VjdXRpdmUgUFMgUG9sbCBmYWlsdXJlcyBiZWZvcmUgdXBkYXRpbmcgdGhlIGhvc3QgKi8KIAl1OCBwc19wb2xsX3RocmVzaG9sZDsKIAl1OCBwYWRbMl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBhY3hfZXZlbnRfbWFzayB7CiAJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwogCiAJdTMyIGV2ZW50X21hc2s7CiAJdTMyIGhpZ2hfZXZlbnRfbWFzazsgLyogVW51c2VkICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgQ0ZHX1JYX0ZDUwkJQklUKDIpCiAjZGVmaW5lIENGR19SWF9BTExfR09PRAkJQklUKDMpCkBAIC03MjksNyArNzI5LDcgQEAKIAl1OCB0eF9jdHJsX2ZyYW1lX21vZDsgLyogQ0NLXyogb3IgUEJDQ18qICovCiAJdTggdHhfbWd0X2ZyYW1lX3JhdGU7CiAJdTggdHhfbWd0X2ZyYW1lX21vZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogU1RBIE1BQyAqLwogc3RydWN0IGFjeF9kb3QxMV9zdGF0aW9uX2lkIHsKQEAgLTczNywyOCArNzM3LDI4IEBACiAKIAl1OCBtYWNbRVRIX0FMRU5dOwogCXU4IHBhZFsyXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGFjeF9mZWF0dXJlX2NvbmZpZyB7CiAJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwogCiAJdTMyIG9wdGlvbnM7CiAJdTMyIGRhdGFfZmxvd19vcHRpb25zOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYWN4X2N1cnJlbnRfdHhfcG93ZXIgewogCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKIAogCXU4ICBjdXJyZW50X3R4X3Bvd2VyOwogCXU4ICBwYWRkaW5nWzNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYWN4X2RvdDExX2RlZmF1bHRfa2V5IHsKIAlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CiAKIAl1OCBpZDsKIAl1OCBwYWRbM107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBhY3hfdHNmX2luZm8gewogCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKQEAgLTc2OSw3ICs3NjksNyBAQAogCXUzMiBsYXN0X1RCVFRfbHNiOwogCXU4IGxhc3RfZHRpbV9jb3VudDsKIAl1OCBwYWRbM107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIGVudW0gYWN4X3dha2VfdXBfZXZlbnQgewogCVdBS0VfVVBfRVZFTlRfQkVBQ09OX0JJVE1BUAk9IDB4MDEsIC8qIFdha2Ugb24gZXZlcnkgQmVhY29uKi8KQEAgLTc4NSw3ICs3ODUsNyBAQAogCXU4IHdha2VfdXBfZXZlbnQ7IC8qIE9ubHkgb25lIGJpdCBjYW4gYmUgc2V0ICovCiAJdTggbGlzdGVuX2ludGVydmFsOwogCXU4IHBhZFsyXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGFjeF9haWQgewogCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKQEAgLTc5NSw3ICs3OTUsNyBAQAogCSAqLwogCXUxNiBhaWQ7CiAJdTggcGFkWzJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBlbnVtIGFjeF9wcmVhbWJsZV90eXBlIHsKIAlBQ1hfUFJFQU1CTEVfTE9ORyA9IDAsCkBAIC04MTEsNyArODExLDcgQEAKIAkgKi8KIAl1OCBwcmVhbWJsZTsKIAl1OCBwYWRkaW5nWzNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBlbnVtIGFjeF9jdHNwcm90ZWN0X3R5cGUgewogCUNUU1BST1RFQ1RfRElTQUJMRSA9IDAsCkBAIC04MjIsMTEgKzgyMiwxMSBAQAogCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKIAl1OCBjdHNwcm90ZWN0OwogCXU4IHBhZGRpbmdbM107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBhY3hfdHhfc3RhdGlzdGljcyB7CiAJdTMyIGludGVybmFsX2Rlc2Nfb3ZlcmZsb3c7Ci19ICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9ICBfX3BhY2tlZDsKIAogc3RydWN0IGFjeF9yeF9zdGF0aXN0aWNzIHsKIAl1MzIgb3V0X29mX21lbTsKQEAgLTgzNywxNCArODM3LDE0IEBACiAJdTMyIHhmcl9oaW50X3RyaWc7CiAJdTMyIHBhdGhfcmVzZXQ7CiAJdTMyIHJlc2V0X2NvdW50ZXI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBhY3hfZG1hX3N0YXRpc3RpY3MgewogCXUzMiByeF9yZXF1ZXN0ZWQ7CiAJdTMyIHJ4X2Vycm9yczsKIAl1MzIgdHhfcmVxdWVzdGVkOwogCXUzMiB0eF9lcnJvcnM7Ci19ICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9ICBfX3BhY2tlZDsKIAogc3RydWN0IGFjeF9pc3Jfc3RhdGlzdGljcyB7CiAJLyogaG9zdCBjb21tYW5kIGNvbXBsZXRlICovCkBAIC05MDMsNyArOTAzLDcgQEAKIAogCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfTE9XX1JTU0kpICovCiAJdTMyIGxvd19yc3NpOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYWN4X3dlcF9zdGF0aXN0aWNzIHsKIAkvKiBXRVAgYWRkcmVzcyBrZXlzIGNvbmZpZ3VyZWQgKi8KQEAgLTkyNSw3ICs5MjUsNyBAQAogCiAJLyogV0VQIGRlY3J5cHQgaW50ZXJydXB0cyAqLwogCXUzMiBpbnRlcnJ1cHQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgQUNYX01JU1NFRF9CRUFDT05TX1NQUkVBRCAxMAogCkBAIC05ODUsMTIgKzk4NSwxMiBAQAogCiAJLyogdGhlIG51bWJlciBvZiBiZWFjb25zIGluIGF3YWtlIG1vZGUgKi8KIAl1MzIgcmN2ZF9hd2FrZV9iZWFjb25zOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYWN4X21pY19zdGF0aXN0aWNzIHsKIAl1MzIgcnhfcGt0czsKIAl1MzIgY2FsY19mYWlsdXJlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYWN4X2Flc19zdGF0aXN0aWNzIHsKIAl1MzIgZW5jcnlwdF9mYWlsOwpAQCAtOTk5LDcgKzk5OSw3IEBACiAJdTMyIGRlY3J5cHRfcGFja2V0czsKIAl1MzIgZW5jcnlwdF9pbnRlcnJ1cHQ7CiAJdTMyIGRlY3J5cHRfaW50ZXJydXB0OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYWN4X2V2ZW50X3N0YXRpc3RpY3MgewogCXUzMiBoZWFydF9iZWF0OwpAQCAtMTAxMCw3ICsxMDEwLDcgQEAKIAl1MzIgb29tX2xhdGU7CiAJdTMyIHBoeV90cmFuc21pdF9lcnJvcjsKIAl1MzIgdHhfc3R1Y2s7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBhY3hfcHNfc3RhdGlzdGljcyB7CiAJdTMyIHBzcG9sbF90aW1lb3V0czsKQEAgLTEwMjAsNyArMTAyMCw3IEBACiAJdTMyIHBzcG9sbF9tYXhfYXB0dXJuOwogCXUzMiBwc3BvbGxfdXRpbGl6YXRpb247CiAJdTMyIHVwc2RfdXRpbGl6YXRpb247Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBhY3hfcnhwaXBlX3N0YXRpc3RpY3MgewogCXUzMiByeF9wcmVwX2JlYWNvbl9kcm9wOwpAQCAtMTAyOCw3ICsxMDI4LDcgQEAKIAl1MzIgYmVhY29uX2J1ZmZlcl90aHJlc19ob3N0X2ludF90cmlnX3J4X2RhdGE7CiAJdTMyIG1pc3NlZF9iZWFjb25faG9zdF9pbnRfdHJpZ19yeF9kYXRhOwogCXUzMiB0eF94ZnJfaG9zdF9pbnRfdHJpZ19yeF9kYXRhOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYWN4X3N0YXRpc3RpY3MgewogCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKQEAgLTEwNDQsNyArMTA0NCw3IEBACiAJc3RydWN0IGFjeF9ldmVudF9zdGF0aXN0aWNzIGV2ZW50OwogCXN0cnVjdCBhY3hfcHNfc3RhdGlzdGljcyBwczsKIAlzdHJ1Y3QgYWN4X3J4cGlwZV9zdGF0aXN0aWNzIHJ4cGlwZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBBQ1hfTUFYX1JBVEVfQ0xBU1NFUyAgICAgICA4CiAjZGVmaW5lIEFDWF9SQVRFX01BU0tfVU5TUEVDSUZJRUQgIDAKQEAgLTEwNjMsNyArMTA2Myw3IEBACiAKIAl1MzIgcmF0ZV9jbGFzc19jbnQ7CiAJc3RydWN0IGFjeF9yYXRlX2NsYXNzIHJhdGVfY2xhc3NbQUNYX01BWF9SQVRFX0NMQVNTRVNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3Qgd2wxMjUxX2FjeF9tZW1vcnkgewogCV9fbGUxNiBudW1fc3RhdGlvbnM7IC8qIG51bWJlciBvZiBTVEFzIHRvIGJlIHN1cHBvcnRlZC4gKi8KQEAgLTEwODIsNyArMTA4Miw3IEBACiAJdTggdHhfbWluX21lbV9ibG9ja19udW07CiAJdTggbnVtX3NzaWRfcHJvZmlsZXM7CiAJX19sZTE2IGRlYnVnX2J1ZmZlcl9zaXplOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAKICNkZWZpbmUgQUNYX1JYX0RFU0NfTUlOICAgICAgICAgICAgICAgIDEKQEAgLTEwOTQsNyArMTA5NCw3IEBACiAJdTggdHlwZTsKIAl1OCBwcmlvcml0eTsKIAlfX2xlMzIgZG1hX2FkZHJlc3M7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgQUNYX1RYX0RFU0NfTUlOICAgICAgICAgICAgICAgIDEKICNkZWZpbmUgQUNYX1RYX0RFU0NfTUFYICAgICAgICAgICAgICAgIDEyNwpAQCAtMTEwMyw3ICsxMTAzLDcgQEAKICAgICB1OCBudW1fZGVzY3M7CiAgICAgdTggcGFkWzJdOwogICAgIHU4IGF0dHJpYnV0ZXM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgTUFYX1RYX1FVRVVFX0NPTkZJR1MgNQogI2RlZmluZSBNQVhfVFhfUVVFVUVTIDQKQEAgLTExMTMsNyArMTExMyw3IEBACiAJc3RydWN0IHdsMTI1MV9hY3hfbWVtb3J5IG1lbV9jb25maWc7CiAJc3RydWN0IHdsMTI1MV9hY3hfcnhfcXVldWVfY29uZmlnIHJ4X3F1ZXVlX2NvbmZpZzsKIAlzdHJ1Y3Qgd2wxMjUxX2FjeF90eF9xdWV1ZV9jb25maWcgdHhfcXVldWVfY29uZmlnW01BWF9UWF9RVUVVRV9DT05GSUdTXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHdsMTI1MV9hY3hfbWVtX21hcCB7CiAJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwpAQCAtMTE0Nyw3ICsxMTQ3LDcgQEAKIAogCS8qIE51bWJlciBvZiBibG9ja3MgRlcgYWxsb2NhdGVkIGZvciBSWCBwYWNrZXRzICovCiAJdTMyIG51bV9yeF9tZW1fYmxvY2tzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAKIHN0cnVjdCB3bDEyNTFfYWN4X3dyX3RidHRfYW5kX2R0aW0gewpAQCAtMTE2NCw3ICsxMTY0LDcgQEAKIAkqLwogCXU4ICBkdGltOwogCXU4ICBwYWRkaW5nOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3Qgd2wxMjUxX2FjeF9hY19jZmcgewogCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKQEAgLTExOTQsNyArMTE5NCw3IEBACiAKIAkvKiBUaGUgVFggT3AgTGltaXQgKGluIG1pY3Jvc2Vjb25kcykgZm9yIHRoZSBhY2Nlc3MgY2xhc3MuICovCiAJdTE2IHR4b3BfbGltaXQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIAogZW51bSB3bDEyNTFfYWN4X2NoYW5uZWxfdHlwZSB7CkBAIC0xMjQ1LDcgKzEyNDUsNyBAQAogCiAJLyogbm90IHN1cHBvcnRlZCAqLwogCXUzMiBhcHNkY29uZlsyXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9ib290LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2Jvb3QuYwppbmRleCAyNTQ1MTIzLi42NWUwNDE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2Jvb3QuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2Jvb3QuYwpAQCAtMjI1LDcgKzIyNSw3IEBACiBpbnQgd2wxMjUxX2Jvb3RfcnVuX2Zpcm13YXJlKHN0cnVjdCB3bDEyNTEgKndsKQogewogCWludCBsb29wLCByZXQ7Ci0JdTMyIGNoaXBfaWQsIGludGVycnVwdDsKKwl1MzIgY2hpcF9pZCwgYWN4X2ludHI7CiAKIAl3bDEyNTFfYm9vdF9zZXRfZWNwdV9jdHJsKHdsLCBFQ1BVX0NPTlRST0xfSEFMVCk7CiAKQEAgLTI0MiwxNSArMjQyLDE1IEBACiAJbG9vcCA9IDA7CiAJd2hpbGUgKGxvb3ArKyA8IElOSVRfTE9PUCkgewogCQl1ZGVsYXkoSU5JVF9MT09QX0RFTEFZKTsKLQkJaW50ZXJydXB0ID0gd2wxMjUxX3JlZ19yZWFkMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX05PX0NMRUFSKTsKKwkJYWN4X2ludHIgPSB3bDEyNTFfcmVnX3JlYWQzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTk9fQ0xFQVIpOwogCi0JCWlmIChpbnRlcnJ1cHQgPT0gMHhmZmZmZmZmZikgeworCQlpZiAoYWN4X2ludHIgPT0gMHhmZmZmZmZmZikgewogCQkJd2wxMjUxX2Vycm9yKCJlcnJvciByZWFkaW5nIGhhcmR3YXJlIGNvbXBsZXRlICIKIAkJCQkgICAgICJpbml0IGluZGljYXRpb24iKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CiAJCS8qIGNoZWNrIHRoYXQgQUNYX0lOVFJfSU5JVF9DT01QTEVURSBpcyBlbmFibGVkICovCi0JCWVsc2UgaWYgKGludGVycnVwdCAmIFdMMTI1MV9BQ1hfSU5UUl9JTklUX0NPTVBMRVRFKSB7CisJCWVsc2UgaWYgKGFjeF9pbnRyICYgV0wxMjUxX0FDWF9JTlRSX0lOSVRfQ09NUExFVEUpIHsKIAkJCXdsMTI1MV9yZWdfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfQUNLLAogCQkJCQkgICBXTDEyNTFfQUNYX0lOVFJfSU5JVF9DT01QTEVURSk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfY21kLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2NtZC5oCmluZGV4IDRhZDY3Y2EuLmE5ZTQ5OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfY21kLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9jbWQuaApAQCAtMTA2LDcgKzEwNiw3IEBACiAJdTE2IHN0YXR1czsKIAkvKiBwYXlsb2FkICovCiAJdTggZGF0YVswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0ICB3bDEyNTFfY29tbWFuZCB7CiAJc3RydWN0IHdsMTI1MV9jbWRfaGVhZGVyIGhlYWRlcjsKQEAgLTE3NSw4ICsxNzUsOCBAQAogI2RlZmluZSBXTDEyNTFfU0NBTl9OVU1fUFJPQkVTIDMKIAogc3RydWN0IHdsMTI1MV9zY2FuX3BhcmFtZXRlcnMgewotCXUzMiByeF9jb25maWdfb3B0aW9uczsKLQl1MzIgcnhfZmlsdGVyX29wdGlvbnM7CisJX19sZTMyIHJ4X2NvbmZpZ19vcHRpb25zOworCV9fbGUzMiByeF9maWx0ZXJfb3B0aW9uczsKIAogCS8qCiAJICogU2NhbiBvcHRpb25zOgpAQCAtMTg2LDcgKzE4Niw3IEBACiAJICogYml0IDI6IHZvaWNlIG1vZGUsIDAgZm9yIG5vcm1hbCBzY2FuLgogCSAqIGJpdCAzOiBzY2FuIHByaW9yaXR5LCAxIGZvciBoaWdoIHByaW9yaXR5LgogCSAqLwotCXUxNiBzY2FuX29wdGlvbnM7CisJX19sZTE2IHNjYW5fb3B0aW9uczsKIAogCS8qIE51bWJlciBvZiBjaGFubmVscyB0byBzY2FuICovCiAJdTggbnVtX2NoYW5uZWxzOwpAQCAtMTk1LDE3ICsxOTUsMTcgQEAKIAl1OCBudW1fcHJvYmVfcmVxdWVzdHM7CiAKIAkvKiBSYXRlIGFuZCBtb2R1bGF0aW9uIGZvciBwcm9iZSByZXF1ZXN0cyAqLwotCXUxNiB0eF9yYXRlOworCV9fbGUxNiB0eF9yYXRlOwogCiAJdTggdGlkX3RyaWdnZXI7CiAJdTggc3NpZF9sZW47CiAJdTggc3NpZFszMl07CiAKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHdsMTI1MV9zY2FuX2NoX3BhcmFtZXRlcnMgewotCXUzMiBtaW5fZHVyYXRpb247IC8qIGluIFRVICovCi0JdTMyIG1heF9kdXJhdGlvbjsgLyogaW4gVFUgKi8KKwlfX2xlMzIgbWluX2R1cmF0aW9uOyAvKiBpbiBUVSAqLworCV9fbGUzMiBtYXhfZHVyYXRpb247IC8qIGluIFRVICovCiAJdTMyIGJzc2lkX2xzYjsKIAl1MTYgYnNzaWRfbXNiOwogCkBAIC0yMTgsNyArMjE4LDcgQEAKIAl1OCB0eF9wb3dlcl9hdHQ7CiAJdTggY2hhbm5lbDsKIAl1OCBwYWRbM107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIFNDQU4gcGFyYW1ldGVycyAqLwogI2RlZmluZSBTQ0FOX01BWF9OVU1fT0ZfQ0hBTk5FTFMgMTYKQEAgLTIyOCw3ICsyMjgsNyBAQAogCiAJc3RydWN0IHdsMTI1MV9zY2FuX3BhcmFtZXRlcnMgcGFyYW1zOwogCXN0cnVjdCB3bDEyNTFfc2Nhbl9jaF9wYXJhbWV0ZXJzIGNoYW5uZWxzW1NDQU5fTUFYX05VTV9PRl9DSEFOTkVMU107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIGVudW0gewogCUJTU19UWVBFX0lCU1MgPSAwLApAQCAtMjc2LDE0ICsyNzYsMTQgQEAKIAl1OCB0eF9tZ3RfZnJhbWVfcmF0ZTsgLyogT0JTT0xFVEUgKi8KIAl1OCB0eF9tZ3RfZnJhbWVfbW9kOyAgLyogT0JTT0xFVEUgKi8KIAl1OCByZXNlcnZlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGNtZF9lbmFibGVkaXNhYmxlX3BhdGggewogCXN0cnVjdCB3bDEyNTFfY21kX2hlYWRlciBoZWFkZXI7CiAKIAl1OCBjaGFubmVsOwogCXU4IHBhZGRpbmdbM107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgV0wxMjUxX01BWF9URU1QTEFURV9TSVpFIDMwMAogCkBAIC0yOTIsNyArMjkyLDcgQEAKIAogCV9fbGUxNiBzaXplOwogCXU4IGRhdGFbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgVElNX0VMRV9JRCAgICA1CiAjZGVmaW5lIFBBUlRJQUxfVkJNX01BWCAgICAyNTEKQEAgLTMwNCw3ICszMDQsNyBAQAogCXU4IGR0aW1fcGVyaW9kOwogCXU4IGJpdG1hcF9jdHJsOwogCXU4IHB2Yl9maWVsZFtQQVJUSUFMX1ZCTV9NQVhdOyAvKiBQYXJ0aWFsIFZpcnR1YWwgQml0bWFwICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIFZpcnR1YWwgQml0IE1hcCB1cGRhdGUgKi8KIHN0cnVjdCB3bDEyNTFfY21kX3ZibV91cGRhdGUgewpAQCAtMzEyLDcgKzMxMiw3IEBACiAJX19sZTE2IGxlbjsKIAl1OCAgcGFkZGluZ1syXTsKIAlzdHJ1Y3Qgd2wxMjUxX3RpbSB0aW07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIGVudW0gd2wxMjUxX2NtZF9wc19tb2RlIHsKIAlTVEFUSU9OX0FDVElWRV9NT0RFLApAQCAtMzMzLDcgKzMzMyw3IEBACiAJdTggaGFuZ19vdmVyX3BlcmlvZDsKIAl1MTYgbnVsbF9kYXRhX3JhdGU7CiAJdTggcGFkWzJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3Qgd2wxMjUxX2NtZF90cmlnZ2VyX3NjYW5fdG8gewogCXN0cnVjdCB3bDEyNTFfY21kX2hlYWRlciBoZWFkZXI7CkBAIC00MTEsNyArNDExLDcgQEAKIAl1OCBrZXlbTUFYX0tFWV9TSVpFXTsKIAl1MTYgYWNfc2VxX251bTE2W05VTV9BQ0NFU1NfQ0FURUdPUklFU19DT1BZXTsKIAl1MzIgYWNfc2VxX251bTMyW05VTV9BQ0NFU1NfQ0FURUdPUklFU19DT1BZXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogCiAjZW5kaWYgLyogX19XTDEyNTFfQ01EX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9ldmVudC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9ldmVudC5oCmluZGV4IGJlMGFjNTQuLmY0OGEyYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfZXZlbnQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2V2ZW50LmgKQEAgLTgyLDcgKzgyLDcgQEAKIAl1MzIgcmVwb3J0XzE7CiAJdTMyIHJlcG9ydF8yOwogCXUzMiByZXBvcnRfMzsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGV2ZW50X21haWxib3ggewogCXUzMiBldmVudHNfdmVjdG9yOwpAQCAtMTEyLDcgKzExMiw3IEBACiAJc3RydWN0IGV2ZW50X2RlYnVnX3JlcG9ydCByZXBvcnQ7CiAJdTggYXZlcmFnZV9zbnJfbGV2ZWw7CiAJdTggcGFkZGluZ1sxOV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIGludCB3bDEyNTFfZXZlbnRfdW5tYXNrKHN0cnVjdCB3bDEyNTEgKndsKTsKIHZvaWQgd2wxMjUxX2V2ZW50X21ib3hfY29uZmlnKHN0cnVjdCB3bDEyNTEgKndsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9tYWluLmMKaW5kZXggMDBiMjQyOC4uODYxYTVmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9tYWluLmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogCX0KIAogCXdsLT5udnNfbGVuID0gZnctPnNpemU7Ci0Jd2wtPm52cyA9IGttYWxsb2Mod2wtPm52c19sZW4sIEdGUF9LRVJORUwpOworCXdsLT5udnMgPSBrbWVtZHVwKGZ3LT5kYXRhLCB3bC0+bnZzX2xlbiwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIXdsLT5udnMpIHsKIAkJd2wxMjUxX2Vycm9yKCJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgbnZzIGZpbGUiKTsKQEAgLTEzMiw4ICsxMzIsNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQltZW1jcHkod2wtPm52cywgZnctPmRhdGEsIHdsLT5udnNfbGVuKTsKLQogCXJldCA9IDA7CiAKIG91dDoKQEAgLTQxMyw2ICs0MTEsNyBAQAogc3RhdGljIGludCB3bDEyNTFfb3Bfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IHdsMTI1MSAqd2wgPSBody0+cHJpdjsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gaHctPndpcGh5OwogCWludCByZXQgPSAwOwogCiAJd2wxMjUxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgc3RhcnQiKTsKQEAgLTQ0Niw2ICs0NDUsMTAgQEAKIAogCXdsMTI1MV9pbmZvKCJmaXJtd2FyZSBib290ZWQgKCVzKSIsIHdsLT5md192ZXIpOwogCisJLyogdXBkYXRlIGh3L2Z3IHZlcnNpb24gaW5mbyBpbiB3aXBoeSBzdHJ1Y3QgKi8KKwl3aXBoeS0+aHdfdmVyc2lvbiA9IHdsLT5jaGlwX2lkOworCXN0cm5jcHkod2lwaHktPmZ3X3ZlcnNpb24sIHdsLT5md192ZXIsIHNpemVvZih3aXBoeS0+ZndfdmVyc2lvbikpOworCiBvdXQ6CiAJaWYgKHJldCA8IDApCiAJCXdsMTI1MV9wb3dlcl9vZmYod2wpOwpAQCAtMTE3NCw2ICsxMTc3LDIyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCB3bDEyNTFfb3BfZ2V0X3N1cnZleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGlkeCwKKwkJCQlzdHJ1Y3Qgc3VydmV5X2luZm8gKnN1cnZleSkKK3sKKwlzdHJ1Y3Qgd2wxMjUxICp3bCA9IGh3LT5wcml2OworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKKyAKKwlpZiAoaWR4ICE9IDApCisJCXJldHVybiAtRU5PRU5UOworIAorCXN1cnZleS0+Y2hhbm5lbCA9IGNvbmYtPmNoYW5uZWw7CisJc3VydmV5LT5maWxsZWQgPSBTVVJWRVlfSU5GT19OT0lTRV9EQk07CisJc3VydmV5LT5ub2lzZSA9IHdsLT5ub2lzZTsKKyAKKwlyZXR1cm4gMDsKK30KKwogLyogY2FuJ3QgYmUgY29uc3QsIG1hYzgwMjExIHdyaXRlcyB0byB0aGlzICovCiBzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCB3bDEyNTFfYmFuZF8yZ2h6ID0gewogCS5jaGFubmVscyA9IHdsMTI1MV9jaGFubmVscywKQEAgLTExOTUsNiArMTIxNCw3IEBACiAJLmJzc19pbmZvX2NoYW5nZWQgPSB3bDEyNTFfb3BfYnNzX2luZm9fY2hhbmdlZCwKIAkuc2V0X3J0c190aHJlc2hvbGQgPSB3bDEyNTFfb3Bfc2V0X3J0c190aHJlc2hvbGQsCiAJLmNvbmZfdHggPSB3bDEyNTFfb3BfY29uZl90eCwKKwkuZ2V0X3N1cnZleSA9IHdsMTI1MV9vcF9nZXRfc3VydmV5LAogfTsKIAogc3RhdGljIGludCB3bDEyNTFfcmVhZF9lZXByb21fYnl0ZShzdHJ1Y3Qgd2wxMjUxICp3bCwgb2ZmX3Qgb2Zmc2V0LCB1OCAqZGF0YSkKQEAgLTE0MTksNSArMTQzOSw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlRJIHdsMTI1MSBXaXJlbGVzIExBTiBEcml2ZXIgQ29yZSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+Iik7Ci1NT0RVTEVfQUxJQVMoInNwaTp3bDEyNTEiKTsKIE1PRFVMRV9GSVJNV0FSRShXTDEyNTFfRldfTkFNRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3J4LmMKaW5kZXggODUxNTE1OC4uMWI2Mjk0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfcnguYwpAQCAtNzQsNiArNzQsMTIgQEAKIAogCXN0YXR1cy0+c2lnbmFsID0gZGVzYy0+cnNzaTsKIAorCS8qCisJICogRklYTUU6IGd1ZXNzaW5nIHRoYXQgc25yIG5lZWRzIHRvIGJlIGRpdmlkZWQgYnkgdHdvLCBvdGhlcndpc2UKKwkgKiB0aGUgdmFsdWVzIGRvbid0IG1ha2UgYW55IHNlbnNlCisJICovCisJd2wtPm5vaXNlID0gZGVzYy0+cnNzaSAtIGRlc2MtPnNuciAvIDI7CisKIAlzdGF0dXMtPmZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koZGVzYy0+Y2hhbm5lbCk7CiAKIAlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19UU0ZUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9yeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9yeC5oCmluZGV4IDU2M2EzZmQuLmRhNGU1MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfcnguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3J4LmgKQEAgLTExNyw3ICsxMTcsNyBAQAogCXM4IHJzc2k7IC8qIGluIGRCICovCiAJdTggcmNwaTsgLyogaW4gZEIgKi8KIAl1OCBzbnI7IC8qIGluIGRCICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHZvaWQgd2wxMjUxX3J4KHN0cnVjdCB3bDEyNTEgKndsKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3NkaW8uYwppbmRleCBjNTYxMzMyLi5iOTAxYjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3NkaW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3NkaW8uYwpAQCAtMzcsMTEgKzM3LDE3IEBACiAjZGVmaW5lIFNESU9fREVWSUNFX0lEX1RJX1dMMTI1MQkweDkwNjYKICNlbmRpZgogCitzdHJ1Y3Qgd2wxMjUxX3NkaW8geworCXN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmM7CisJdTMyIGVscF92YWw7Cit9OworCiBzdGF0aWMgc3RydWN0IHdsMTJ4eF9wbGF0Zm9ybV9kYXRhICp3bDEyeHhfYm9hcmRfZGF0YTsKIAogc3RhdGljIHN0cnVjdCBzZGlvX2Z1bmMgKndsX3RvX2Z1bmMoc3RydWN0IHdsMTI1MSAqd2wpCiB7Ci0JcmV0dXJuIHdsLT5pZl9wcml2OworCXN0cnVjdCB3bDEyNTFfc2RpbyAqd2xfc2RpbyA9IHdsLT5pZl9wcml2OworCXJldHVybiB3bF9zZGlvLT5mdW5jOwogfQogCiBzdGF0aWMgdm9pZCB3bDEyNTFfc2Rpb19pbnRlcnJ1cHQoc3RydWN0IHNkaW9fZnVuYyAqZnVuYykKQEAgLTkwLDEwICs5NiwxNyBAQAogc3RhdGljIHZvaWQgd2wxMjUxX3NkaW9fcmVhZF9lbHAoc3RydWN0IHdsMTI1MSAqd2wsIGludCBhZGRyLCB1MzIgKnZhbCkKIHsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jID0gd2xfdG9fZnVuYyh3bCk7CisJc3RydWN0IHdsMTI1MV9zZGlvICp3bF9zZGlvID0gd2wtPmlmX3ByaXY7CisJc3RydWN0IHNkaW9fZnVuYyAqZnVuYyA9IHdsX3NkaW8tPmZ1bmM7CiAKKwkvKgorCSAqIFRoZSBoYXJkd2FyZSBvbmx5IHN1cHBvcnRzIFJBVyAocmVhZCBhZnRlciB3cml0ZSkgYWNjZXNzIGZvcgorCSAqIHJlYWRpbmcsIHJlZ3VsYXIgc2Rpb19yZWFkYiB3b24ndCB3b3JrIGhlcmUgKGl0IGludGVycHJldHMKKwkgKiB0aGUgdW51c2VkIGJpdHMgb2YgQ01ENTIgYXMgd3JpdGUgZGF0YSBldmVuIGlmIHdlIHNlbmQgcmVhZAorCSAqIHJlcXVlc3QpLgorCSAqLwogCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKLQkqdmFsID0gc2Rpb19yZWFkYihmdW5jLCBhZGRyLCAmcmV0KTsKKwkqdmFsID0gc2Rpb193cml0ZWJfcmVhZGIoZnVuYywgd2xfc2Rpby0+ZWxwX3ZhbCwgYWRkciwgJnJldCk7CiAJc2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7CiAKIAlpZiAocmV0KQpAQCAtMTAzLDcgKzExNiw4IEBACiBzdGF0aWMgdm9pZCB3bDEyNTFfc2Rpb193cml0ZV9lbHAoc3RydWN0IHdsMTI1MSAqd2wsIGludCBhZGRyLCB1MzIgdmFsKQogewogCWludCByZXQgPSAwOwotCXN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMgPSB3bF90b19mdW5jKHdsKTsKKwlzdHJ1Y3Qgd2wxMjUxX3NkaW8gKndsX3NkaW8gPSB3bC0+aWZfcHJpdjsKKwlzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jID0gd2xfc2Rpby0+ZnVuYzsKIAogCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKIAlzZGlvX3dyaXRlYihmdW5jLCB2YWwsIGFkZHIsICZyZXQpOwpAQCAtMTExLDYgKzEyNSw4IEBACiAKIAlpZiAocmV0KQogCQl3bDEyNTFfZXJyb3IoInNkaW9fd3JpdGViIGZhaWxlZCAoJWQpIiwgcmV0KTsKKwllbHNlCisJCXdsX3NkaW8tPmVscF92YWwgPSB2YWw7CiB9CiAKIHN0YXRpYyB2b2lkIHdsMTI1MV9zZGlvX3Jlc2V0KHN0cnVjdCB3bDEyNTEgKndsKQpAQCAtMTk3LDYgKzIxMyw3IEBACiAJaW50IHJldDsKIAlzdHJ1Y3Qgd2wxMjUxICp3bDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlzdHJ1Y3Qgd2wxMjUxX3NkaW8gKndsX3NkaW87CiAKIAlodyA9IHdsMTI1MV9hbGxvY19odygpOwogCWlmIChJU19FUlIoaHcpKQpAQCAtMjA0LDYgKzIyMSwxMiBAQAogCiAJd2wgPSBody0+cHJpdjsKIAorCXdsX3NkaW8gPSBremFsbG9jKHNpemVvZigqd2xfc2RpbyksIEdGUF9LRVJORUwpOworCWlmICh3bF9zZGlvID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZV9odzsKKwl9CisKIAlzZGlvX2NsYWltX2hvc3QoZnVuYyk7CiAJcmV0ID0gc2Rpb19lbmFibGVfZnVuYyhmdW5jKTsKIAlpZiAocmV0KQpAQCAtMjEzLDcgKzIzNiw4IEBACiAJc2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7CiAKIAlTRVRfSUVFRTgwMjExX0RFVihodywgJmZ1bmMtPmRldik7Ci0Jd2wtPmlmX3ByaXYgPSBmdW5jOworCXdsX3NkaW8tPmZ1bmMgPSBmdW5jOworCXdsLT5pZl9wcml2ID0gd2xfc2RpbzsKIAl3bC0+aWZfb3BzID0gJndsMTI1MV9zZGlvX29wczsKIAl3bC0+c2V0X3Bvd2VyID0gd2wxMjUxX3NkaW9fc2V0X3Bvd2VyOwogCkBAIC0yNTksNiArMjgzLDggQEAKIAlzZGlvX2Rpc2FibGVfZnVuYyhmdW5jKTsKIHJlbGVhc2U6CiAJc2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7CisJa2ZyZWUod2xfc2Rpbyk7CitvdXRfZnJlZV9odzoKIAl3bDEyNTFfZnJlZV9odyh3bCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTI2Niw5ICsyOTIsMTEgQEAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCB3bDEyNTFfc2Rpb19yZW1vdmUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYykKIHsKIAlzdHJ1Y3Qgd2wxMjUxICp3bCA9IHNkaW9fZ2V0X2RydmRhdGEoZnVuYyk7CisJc3RydWN0IHdsMTI1MV9zZGlvICp3bF9zZGlvID0gd2wtPmlmX3ByaXY7CiAKIAlpZiAod2wtPmlycSkKIAkJZnJlZV9pcnEod2wtPmlycSwgd2wpOworCWtmcmVlKHdsX3NkaW8pOwogCXdsMTI1MV9mcmVlX2h3KHdsKTsKIAogCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfc3BpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3NwaS5jCmluZGV4IGU4MTQ3NDIuLjI3ZmRmYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfc3BpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9zcGkuYwpAQCAtMzQ1LDMgKzM0NSw0IEBACiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPiIpOworTU9EVUxFX0FMSUFTKCJzcGk6d2wxMjUxIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3R4LmMKaW5kZXggYzgyMjMxOC4uYTM4ZWMxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV90eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfdHguYwpAQCAtMTE3LDcgKzExNyw3IEBACiAJZnJhZ190aHJlc2hvbGQgPSBJRUVFODAyMTFfTUFYX0ZSQUdfVEhSRVNIT0xEOwogCXR4X2hkci0+ZnJhZ190aHJlc2hvbGQgPSBjcHVfdG9fbGUxNihmcmFnX3RocmVzaG9sZCk7CiAKLQlwYXlsb2FkX2xlbiA9IHR4X2hkci0+bGVuZ3RoICsgTUFYX01TRFVfU0VDVVJJVFlfTEVOR1RIOworCXBheWxvYWRfbGVuID0gbGUxNl90b19jcHUodHhfaGRyLT5sZW5ndGgpICsgTUFYX01TRFVfU0VDVVJJVFlfTEVOR1RIOwogCiAJaWYgKHBheWxvYWRfbGVuID4gZnJhZ190aHJlc2hvbGQpIHsKIAkJbWVtX2Jsb2Nrc19wZXJfZnJhZyA9CkBAIC0xOTEsMTEgKzE5MSwxMyBAQAogCWlmIChjb250cm9sLT5jb250cm9sLmh3X2tleSAmJgogCSAgICBjb250cm9sLT5jb250cm9sLmh3X2tleS0+YWxnID09IEFMR19US0lQKSB7CiAJCWludCBoZHJsZW47Ci0JCXUxNiBmYzsKKwkJX19sZTE2IGZjOworCQl1MTYgbGVuZ3RoOwogCQl1OCAqcG9zOwogCi0JCWZjID0gKih1MTYgKikoc2tiLT5kYXRhICsgc2l6ZW9mKCp0eF9oZHIpKTsKLQkJdHhfaGRyLT5sZW5ndGggKz0gV0wxMjUxX1RLSVBfSVZfU1BBQ0U7CisJCWZjID0gKihfX2xlMTYgKikoc2tiLT5kYXRhICsgc2l6ZW9mKCp0eF9oZHIpKTsKKwkJbGVuZ3RoID0gbGUxNl90b19jcHUodHhfaGRyLT5sZW5ndGgpICsgV0wxMjUxX1RLSVBfSVZfU1BBQ0U7CisJCXR4X2hkci0+bGVuZ3RoID0gY3B1X3RvX2xlMTYobGVuZ3RoKTsKIAogCQloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGZjKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV90eC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV90eC5oCmluZGV4IDU1ODU2YzYuLmY0MGVlYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfdHguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3R4LmgKQEAgLTEwOSwxMiArMTA5LDEyIEBACiAJdW5zaWduZWQgeGZlcl9wYWQ6MTsKIAogCXVuc2lnbmVkIHJlc2VydmVkOjc7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIAogc3RydWN0IHR4X2RvdWJsZV9idWZmZXJfZGVzYyB7CiAJLyogTGVuZ3RoIG9mIHBheWxvYWQsIGluY2x1ZGluZyBoZWFkZXJzLiAqLwotCXUxNiBsZW5ndGg7CisJX19sZTE2IGxlbmd0aDsKIAogCS8qCiAJICogQSBiaXQgbWFzayB0aGF0IHNwZWNpZmllcyB0aGUgaW5pdGlhbCByYXRlIHRvIGJlIHVzZWQKQEAgLTEzMywxMCArMTMzLDEwIEBACiAJICogMHgwODAwIC0gNDhNYml0cwogCSAqIDB4MTAwMCAtIDU0TWJpdHMKIAkgKi8KLQl1MTYgcmF0ZTsKKwlfX2xlMTYgcmF0ZTsKIAogCS8qIFRpbWUgaW4gdXMgdGhhdCBhIHBhY2tldCBjYW4gc3BlbmQgaW4gdGhlIHRhcmdldCAqLwotCXUzMiBleHBpcnlfdGltZTsKKwlfX2xlMzIgZXhwaXJ5X3RpbWU7CiAKIAkvKiBpbmRleCBvZiB0aGUgVFggcXVldWUgdXNlZCBmb3IgdGhpcyBwYWNrZXQgKi8KIAl1OCB4bWl0X3F1ZXVlOwpAQCAtMTUwLDEzICsxNTAsMTMgQEAKIAkgKiBUaGUgRlcgc2hvdWxkIGN1dCB0aGUgcGFja2V0IGludG8gZnJhZ21lbnRzCiAJICogb2YgdGhpcyBzaXplLgogCSAqLwotCXUxNiBmcmFnX3RocmVzaG9sZDsKKwlfX2xlMTYgZnJhZ190aHJlc2hvbGQ7CiAKIAkvKiBOdW1iZXJzIG9mIEhXIHF1ZXVlIGJsb2NrcyB0byBiZSBhbGxvY2F0ZWQgKi8KIAl1OCBudW1fbWVtX2Jsb2NrczsKIAogCXU4IHJlc2VydmVkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBlbnVtIHsKIAlUWF9TVUNDRVNTICAgICAgICAgICAgICA9IDAsCkBAIC0yMDgsNyArMjA4LDcgQEAKIAogCS8qIFNlZSBkb25lXzEgKi8KIAl1OCBkb25lXzI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0YXRpYyBpbmxpbmUgaW50IHdsMTI1MV90eF9nZXRfcXVldWUoaW50IHF1ZXVlKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MS5oCmluZGV4IDZmMWI2YjUuLmRkM2NlZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxLmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KIAogI2luY2x1ZGUgIndsMTI3MV9jb25mLmgiCisjaW5jbHVkZSAid2wxMjcxX2luaS5oIgogCiAjZGVmaW5lIERSSVZFUl9OQU1FICJ3bDEyNzEiCiAjZGVmaW5lIERSSVZFUl9QUkVGSVggRFJJVkVSX05BTUUgIjogIgpAQCAtMTE2LDMzICsxMTcsNiBAQAogI2RlZmluZSBXTDEyNzFfVFhfU0VDVVJJVFlfTE8xNihzKSAoKHUxNikoKHMpICYgMHhmZmZmKSkKICNkZWZpbmUgV0wxMjcxX1RYX1NFQ1VSSVRZX0hJMzIocykgKCh1MzIpKCgocykgPj4gMTYpICYgMHhmZmZmZmZmZikpCiAKLS8qIE5WUyBkYXRhIHN0cnVjdHVyZSAqLwotI2RlZmluZSBXTDEyNzFfTlZTX1NFQ1RJT05fU0laRSAgICAgICAgICAgICAgICAgIDQ2OAotCi0jZGVmaW5lIFdMMTI3MV9OVlNfR0VORVJBTF9QQVJBTVNfU0laRSAgICAgICAgICAgIDU3Ci0jZGVmaW5lIFdMMTI3MV9OVlNfR0VORVJBTF9QQVJBTVNfU0laRV9QQURERUQgXAotCShXTDEyNzFfTlZTX0dFTkVSQUxfUEFSQU1TX1NJWkUgKyAxKQotI2RlZmluZSBXTDEyNzFfTlZTX1NUQVRfUkFESU9fUEFSQU1TX1NJWkUgICAgICAgICAxNwotI2RlZmluZSBXTDEyNzFfTlZTX1NUQVRfUkFESU9fUEFSQU1TX1NJWkVfUEFEREVEIFwKLQkoV0wxMjcxX05WU19TVEFUX1JBRElPX1BBUkFNU19TSVpFICsgMSkKLSNkZWZpbmUgV0wxMjcxX05WU19EWU5fUkFESU9fUEFSQU1TX1NJWkUgICAgICAgICAgNjUKLSNkZWZpbmUgV0wxMjcxX05WU19EWU5fUkFESU9fUEFSQU1TX1NJWkVfUEFEREVEIFwKLQkoV0wxMjcxX05WU19EWU5fUkFESU9fUEFSQU1TX1NJWkUgKyAxKQotI2RlZmluZSBXTDEyNzFfTlZTX0ZFTV9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBXTDEyNzFfTlZTX0lOSV9TUEFSRV9TSVpFICAgICAgICAgICAgICAgIDEyNAotCi1zdHJ1Y3Qgd2wxMjcxX252c19maWxlIHsKLQkvKiBOVlMgc2VjdGlvbiAqLwotCXU4IG52c1tXTDEyNzFfTlZTX1NFQ1RJT05fU0laRV07Ci0KLQkvKiBJTkkgc2VjdGlvbiAqLwotCXU4IGdlbmVyYWxfcGFyYW1zW1dMMTI3MV9OVlNfR0VORVJBTF9QQVJBTVNfU0laRV9QQURERURdOwotCXU4IHN0YXRfcmFkaW9fcGFyYW1zW1dMMTI3MV9OVlNfU1RBVF9SQURJT19QQVJBTVNfU0laRV9QQURERURdOwotCXU4IGR5bl9yYWRpb19wYXJhbXNbV0wxMjcxX05WU19GRU1fQ09VTlRdCi0JCQkgICBbV0wxMjcxX05WU19EWU5fUkFESU9fUEFSQU1TX1NJWkVfUEFEREVEXTsKLQl1OCBpbmlfc3BhcmVbV0wxMjcxX05WU19JTklfU1BBUkVfU0laRV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogLyoKICAqIEVuYWJsZS9kaXNhYmxlIDgwMi4xMWEgc3VwcG9ydCBmb3IgV0wxMjczCiAgKi8KQEAgLTMxNyw3ICsyOTEsNyBAQAogCV9fbGUzMiB0eF9yZWxlYXNlZF9ibGtzW05VTV9UWF9RVUVVRVNdOwogCV9fbGUzMiBmd19sb2NhbHRpbWU7CiAJX19sZTMyIHBhZGRpbmdbMl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCB3bDEyNzFfcnhfbWVtX3Bvb2xfYWRkciB7CiAJdTMyIGFkZHI7CkBAIC0zMjUsMTIgKzI5OSwxMSBAQAogfTsKIAogc3RydWN0IHdsMTI3MV9zY2FuIHsKKwlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXE7CisJYm9vbCAqc2Nhbm5lZF9jaDsKIAl1OCBzdGF0ZTsKIAl1OCBzc2lkW0lXX0VTU0lEX01BWF9TSVpFKzFdOwogCXNpemVfdCBzc2lkX2xlbjsKLQl1OCBhY3RpdmU7Ci0JdTggaGlnaF9wcmlvOwotCXU4IHByb2JlX3JlcXVlc3RzOwogfTsKIAogc3RydWN0IHdsMTI3MV9pZl9vcGVyYXRpb25zIHsKQEAgLTM2OCwxMyArMzQxLDE0IEBACiAjZGVmaW5lIFdMMTI3MV9GTEFHX0pPSU5FRCAgICAgICAgICAgICAoMikKICNkZWZpbmUgV0wxMjcxX0ZMQUdfR1BJT19QT1dFUiAgICAgICAgICgzKQogI2RlZmluZSBXTDEyNzFfRkxBR19UWF9RVUVVRV9TVE9QUEVEICAgKDQpCi0jZGVmaW5lIFdMMTI3MV9GTEFHX1NDQU5OSU5HICAgICAgICAgICAoNSkKLSNkZWZpbmUgV0wxMjcxX0ZMQUdfSU5fRUxQICAgICAgICAgICAgICg2KQotI2RlZmluZSBXTDEyNzFfRkxBR19QU00gICAgICAgICAgICAgICAgKDcpCi0jZGVmaW5lIFdMMTI3MV9GTEFHX1BTTV9SRVFVRVNURUQgICAgICAoOCkKLSNkZWZpbmUgV0wxMjcxX0ZMQUdfSVJRX1BFTkRJTkcgICAgICAgICg5KQotI2RlZmluZSBXTDEyNzFfRkxBR19JUlFfUlVOTklORyAgICAgICAoMTApCi0jZGVmaW5lIFdMMTI3MV9GTEFHX0lETEUgICAgICAgICAgICAgICgxMSkKKyNkZWZpbmUgV0wxMjcxX0ZMQUdfSU5fRUxQICAgICAgICAgICAgICg1KQorI2RlZmluZSBXTDEyNzFfRkxBR19QU00gICAgICAgICAgICAgICAgKDYpCisjZGVmaW5lIFdMMTI3MV9GTEFHX1BTTV9SRVFVRVNURUQgICAgICAoNykKKyNkZWZpbmUgV0wxMjcxX0ZMQUdfSVJRX1BFTkRJTkcgICAgICAgICg4KQorI2RlZmluZSBXTDEyNzFfRkxBR19JUlFfUlVOTklORyAgICAgICAgKDkpCisjZGVmaW5lIFdMMTI3MV9GTEFHX0lETEUgICAgICAgICAgICAgICgxMCkKKyNkZWZpbmUgV0wxMjcxX0ZMQUdfSURMRV9SRVFVRVNURUQgICAgKDExKQorI2RlZmluZSBXTDEyNzFfRkxBR19QU1BPTExfRkFJTFVSRSAgICAoMTIpCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXN0cnVjdCB3bDEyNzFfcGFydGl0aW9uX3NldCBwYXJ0OwpAQCAtNDIxLDYgKzM5NSw3IEBACiAKIAkvKiBQZW5kaW5nIFRYIGZyYW1lcyAqLwogCXN0cnVjdCBza19idWZmICp0eF9mcmFtZXNbQUNYX1RYX0RFU0NSSVBUT1JTXTsKKwlpbnQgdHhfZnJhbWVzX2NudDsKIAogCS8qIFNlY3VyaXR5IHNlcXVlbmNlIG51bWJlciBjb3VudGVycyAqLwogCXU4IHR4X3NlY3VyaXR5X2xhc3Rfc2VxOwpAQCAtNDY4LDYgKzQ0MywxMCBAQAogCiAJc3RydWN0IGNvbXBsZXRpb24gKmVscF9jb21wbDsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGVscF93b3JrOworCXN0cnVjdCBkZWxheWVkX3dvcmsgcHNwb2xsX3dvcms7CisKKwkvKiBjb3VudGVyIGZvciBwcy1wb2xsIGRlbGl2ZXJ5IGZhaWx1cmVzICovCisJaW50IHBzX3BvbGxfZmFpbHVyZXM7CiAKIAkvKiByZXRyeSBjb3VudGVyIGZvciBQU00gZW50cmllcyAqLwogCXU4IHBzbV9lbnRyeV9yZXRyeTsKQEAgLTQ5Niw2ICs0NzUsOSBAQAogCWJvb2wgc2dfZW5hYmxlZDsKIAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCS8qIE1vc3QgcmVjZW50bHkgcmVwb3J0ZWQgbm9pc2UgaW4gZEJtICovCisJczggbm9pc2U7CiB9OwogCiBpbnQgd2wxMjcxX3BsdF9zdGFydChzdHJ1Y3Qgd2wxMjcxICp3bCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2FjeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9hY3guYwppbmRleCBlMTllMmY4Li5iYjI0NWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2FjeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYWN4LmMKQEAgLTEwNzUsOCArMTA3NSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IHdsMTI3MV9hY3hfYXJwX2lwX2ZpbHRlcihzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBlbmFibGUsIHU4ICphZGRyZXNzLAotCQkJICAgICB1OCB2ZXJzaW9uKQoraW50IHdsMTI3MV9hY3hfYXJwX2lwX2ZpbHRlcihzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBlbmFibGUsIF9fYmUzMiBhZGRyZXNzKQogewogCXN0cnVjdCB3bDEyNzFfYWN4X2FycF9maWx0ZXIgKmFjeDsKIAlpbnQgcmV0OwpAQCAtMTA4OSwxNyArMTA4OCwxMSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlhY3gtPnZlcnNpb24gPSB2ZXJzaW9uOworCWFjeC0+dmVyc2lvbiA9IEFDWF9JUFY0X1ZFUlNJT047CiAJYWN4LT5lbmFibGUgPSBlbmFibGU7CiAKLQlpZiAoZW5hYmxlID09IHRydWUpIHsKLQkJaWYgKHZlcnNpb24gPT0gQUNYX0lQVjRfVkVSU0lPTikKLQkJCW1lbWNweShhY3gtPmFkZHJlc3MsIGFkZHJlc3MsIEFDWF9JUFY0X0FERFJfU0laRSk7Ci0JCWVsc2UgaWYgKHZlcnNpb24gPT0gQUNYX0lQVjZfVkVSU0lPTikKLQkJCW1lbWNweShhY3gtPmFkZHJlc3MsIGFkZHJlc3MsIHNpemVvZihhY3gtPmFkZHJlc3MpKTsKLQkJZWxzZQotCQkJd2wxMjcxX2Vycm9yKCJJbnZhbGlkIElQIHZlcnNpb24iKTsKLQl9CisJaWYgKGVuYWJsZSA9PSB0cnVlKQorCQltZW1jcHkoYWN4LT5hZGRyZXNzLCAmYWRkcmVzcywgQUNYX0lQVjRfQUREUl9TSVpFKTsKIAogCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfQVJQX0lQX0ZJTFRFUiwKIAkJCQkgICBhY3gsIHNpemVvZigqYWN4KSk7CkBAIC0xMjY2LDMgKzEyNTksMjkgQEAKIAlrZnJlZShhY3gpOwogCXJldHVybiByZXQ7CiB9CisKK2ludCB3bDEyNzFfYWN4X3RzZl9pbmZvKHN0cnVjdCB3bDEyNzEgKndsLCB1NjQgKm1hY3RpbWUpCit7CisJc3RydWN0IHdsMTI3MV9hY3hfZndfdHNmX2luZm9ybWF0aW9uICp0c2ZfaW5mbzsKKwlpbnQgcmV0OworCisJdHNmX2luZm8gPSBremFsbG9jKHNpemVvZigqdHNmX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRzZl9pbmZvKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IHdsMTI3MV9jbWRfaW50ZXJyb2dhdGUod2wsIEFDWF9UU0ZfSU5GTywKKwkJCQkgICAgIHRzZl9pbmZvLCBzaXplb2YoKnRzZl9pbmZvKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImFjeCB0c2YgaW5mbyBpbnRlcnJvZ2F0ZSBmYWlsZWQiKTsKKwkJZ290byBvdXQ7CisJfQorCisJKm1hY3RpbWUgPSBsZTMyX3RvX2NwdSh0c2ZfaW5mby0+Y3VycmVudF90c2ZfbG93KSB8CisJCSgodTY0KSBsZTMyX3RvX2NwdSh0c2ZfaW5mby0+Y3VycmVudF90c2ZfaGlnaCkgPDwgMzIpOworCitvdXQ6CisJa2ZyZWUodHNmX2luZm8pOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2FjeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9hY3guaAppbmRleCA0MjBlN2UyLi40MjM1YmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2FjeC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYWN4LmgKQEAgLTc1LDcgKzc1LDcgQEAKIAogCS8qIHBheWxvYWQgbGVuZ3RoIChub3QgaW5jbHVkaW5nIGhlYWRlcnMgKi8KIAlfX2xlMTYgbGVuOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYWN4X2Vycm9yX2NvdW50ZXIgewogCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKQEAgLTk4LDcgKzk4LDcgQEAKIAkvKiB0aGUgbnVtYmVyIG9mIG1pc3NlZCBzZXF1ZW5jZSBudW1iZXJzIGluIHRoZSBzcXVlbnRpYWxseSAqLwogCS8qIHZhbHVlcyBvZiBmcmFtZXMgc2VxIG51bWJlcnMgKi8KIAlfX2xlMzIgc2VxX251bV9taXNzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYWN4X3JldmlzaW9uIHsKIAlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CkBAIC0xMjcsNyArMTI3LDcgQEAKIAkgKiBiaXRzIDI0IC0gMzE6IENoaXAgSUQgLSBUaGUgV2lMaW5rIGNoaXAgSUQuCiAJICovCiAJX19sZTMyIGh3X3ZlcnNpb247Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIGVudW0gd2wxMjcxX3BzbV9tb2RlIHsKIAkvKiBBY3RpdmUgbW9kZSAqLwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAJLyogMiAtIEVMUCBtb2RlOiBEZWVwIC8gTWF4IHNsZWVwKi8KIAl1OCAgc2xlZXBfYXV0aDsKIAl1OCAgcGFkZGluZ1szXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogZW51bSB7CiAJSE9TVElGX1BDSV9NQVNURVJfSE9TVF9JTkRJUkVDVCwKQEAgLTE4Nyw3ICsxODcsNyBAQAogCSAqIGZpcm13YXJlIGRpc2NhcmRzIHRoZSBNU0RVLgogCSAqLwogCV9fbGUzMiBsaWZldGltZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoKICAqIFJYIENvbmZpZyBPcHRpb25zIFRhYmxlCkBAIC0yNzUsMTMgKzI3NSwxMyBAQAogCiAJX19sZTMyIGNvbmZpZ19vcHRpb25zOwogCV9fbGUzMiBmaWx0ZXJfb3B0aW9uczsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGFjeF9wYWNrZXRfZGV0ZWN0aW9uIHsKIAlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CiAKIAlfX2xlMzIgdGhyZXNob2xkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAKIGVudW0gYWN4X3Nsb3RfdHlwZSB7CkBAIC0yOTksNyArMjk5LDcgQEAKIAl1OCB3b25lX2luZGV4OyAvKiBSZXNlcnZlZCAqLwogCXU4IHNsb3RfdGltZTsKIAl1OCByZXNlcnZlZFs2XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogCiAjZGVmaW5lIEFDWF9NQ19BRERSRVNTX0dST1VQX01BWAkoOCkKQEAgLTMxMiwyMSArMzEyLDIxIEBACiAJdTggbnVtX2dyb3VwczsKIAl1OCBwYWRbMl07CiAJdTggbWFjX3RhYmxlW0FERFJFU1NfR1JPVVBfTUFYX0xFTl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBhY3hfcnhfdGltZW91dCB7CiAJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwogCiAJX19sZTE2IHBzX3BvbGxfdGltZW91dDsKIAlfX2xlMTYgdXBzZF90aW1lb3V0OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYWN4X3J0c190aHJlc2hvbGQgewogCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKIAogCV9fbGUxNiB0aHJlc2hvbGQ7CiAJdTggcGFkWzJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYWN4X2JlYWNvbl9maWx0ZXJfb3B0aW9uIHsKIAlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CkBAIC0zNDIsNyArMzQyLDcgQEAKIAkgKi8KIAl1OCBtYXhfbnVtX2JlYWNvbnM7CiAJdTggcGFkWzJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKgogICogQUNYQmVhY29uRmlsdGVyRW50cnkgKG5vdCAyMjEpCkBAIC0zODMsMjEgKzM4MywyMSBAQAogCXU4IG51bV9pZTsKIAl1OCBwYWRbM107CiAJdTggdGFibGVbQkVBQ09OX0ZJTFRFUl9UQUJMRV9NQVhfU0laRV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBhY3hfY29ubl9tb25pdF9wYXJhbXMgewogICAgICAgIHN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKIAogICAgICAgIF9fbGUzMiBzeW5jaF9mYWlsX3Rob2xkOyAvKiBudW1iZXIgb2YgYmVhY29ucyBtaXNzZWQgKi8KICAgICAgICBfX2xlMzIgYnNzX2xvc2VfdGltZW91dDsgLyogbnVtYmVyIG9mIFRVJ3MgZnJvbSBzeW5jaCBmYWlsICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBhY3hfYnRfd2xhbl9jb2V4IHsKIAlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CiAKIAl1OCBlbmFibGU7CiAJdTggcGFkWzNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYWN4X2J0X3dsYW5fY29leF9wYXJhbSB7CiAJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwpAQCAtNDA1LDcgKzQwNSw3IEBACiAJX19sZTMyIHBhcmFtc1tDT05GX1NHX1BBUkFNU19NQVhdOwogCXU4IHBhcmFtX2lkeDsKIAl1OCBwYWRkaW5nWzNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYWN4X2Rjb19pdHJpbV9wYXJhbXMgewogCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKQEAgLTQxMyw3ICs0MTMsNyBAQAogCXU4IGVuYWJsZTsKIAl1OCBwYWRkaW5nWzNdOwogCV9fbGUzMiB0aW1lb3V0OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYWN4X2VuZXJneV9kZXRlY3Rpb24gewogCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKQEAgLTQyMiw3ICs0MjIsNyBAQAogCV9fbGUxNiByeF9jY2FfdGhyZXNob2xkOwogCXU4IHR4X2VuZXJneV9kZXRlY3Rpb247CiAJdTggcGFkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYWN4X2JlYWNvbl9icm9hZGNhc3QgewogCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKQEAgLTQzNiwxNCArNDM2LDE0IEBACiAJLyogQ29uc2VjdXRpdmUgUFMgUG9sbCBmYWlsdXJlcyBiZWZvcmUgdXBkYXRpbmcgdGhlIGhvc3QgKi8KIAl1OCBwc19wb2xsX3RocmVzaG9sZDsKIAl1OCBwYWRbMl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBhY3hfZXZlbnRfbWFzayB7CiAJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwogCiAJX19sZTMyIGV2ZW50X21hc2s7CiAJX19sZTMyIGhpZ2hfZXZlbnRfbWFzazsgLyogVW51c2VkICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgQ0ZHX1JYX0ZDUwkJQklUKDIpCiAjZGVmaW5lIENGR19SWF9BTExfR09PRAkJQklUKDMpCkBAIC00ODgsMTQgKzQ4OCwxNCBAQAogCiAJX19sZTMyIG9wdGlvbnM7CiAJX19sZTMyIGRhdGFfZmxvd19vcHRpb25zOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYWN4X2N1cnJlbnRfdHhfcG93ZXIgewogCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKIAogCXU4ICBjdXJyZW50X3R4X3Bvd2VyOwogCXU4ICBwYWRkaW5nWzNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYWN4X3dha2VfdXBfY29uZGl0aW9uIHsKIAlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CkBAIC01MDMsNyArNTAzLDcgQEAKIAl1OCB3YWtlX3VwX2V2ZW50OyAvKiBPbmx5IG9uZSBiaXQgY2FuIGJlIHNldCAqLwogCXU4IGxpc3Rlbl9pbnRlcnZhbDsKIAl1OCBwYWRbMl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBhY3hfYWlkIHsKIAlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CkBAIC01MTMsNyArNTEzLDcgQEAKIAkgKi8KIAlfX2xlMTYgYWlkOwogCXU4IHBhZFsyXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogZW51bSBhY3hfcHJlYW1ibGVfdHlwZSB7CiAJQUNYX1BSRUFNQkxFX0xPTkcgPSAwLApAQCAtNTI5LDcgKzUyOSw3IEBACiAJICovCiAJdTggcHJlYW1ibGU7CiAJdTggcGFkZGluZ1szXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogZW51bSBhY3hfY3RzcHJvdGVjdF90eXBlIHsKIAlDVFNQUk9URUNUX0RJU0FCTEUgPSAwLApAQCAtNTQwLDExICs1NDAsMTEgQEAKIAlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CiAJdTggY3RzcHJvdGVjdDsKIAl1OCBwYWRkaW5nWzNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYWN4X3R4X3N0YXRpc3RpY3MgewogCV9fbGUzMiBpbnRlcm5hbF9kZXNjX292ZXJmbG93OwotfSAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSAgX19wYWNrZWQ7CiAKIHN0cnVjdCBhY3hfcnhfc3RhdGlzdGljcyB7CiAJX19sZTMyIG91dF9vZl9tZW07CkBAIC01NTUsMTQgKzU1NSwxNCBAQAogCV9fbGUzMiB4ZnJfaGludF90cmlnOwogCV9fbGUzMiBwYXRoX3Jlc2V0OwogCV9fbGUzMiByZXNldF9jb3VudGVyOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYWN4X2RtYV9zdGF0aXN0aWNzIHsKIAlfX2xlMzIgcnhfcmVxdWVzdGVkOwogCV9fbGUzMiByeF9lcnJvcnM7CiAJX19sZTMyIHR4X3JlcXVlc3RlZDsKIAlfX2xlMzIgdHhfZXJyb3JzOwotfSAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSAgX19wYWNrZWQ7CiAKIHN0cnVjdCBhY3hfaXNyX3N0YXRpc3RpY3MgewogCS8qIGhvc3QgY29tbWFuZCBjb21wbGV0ZSAqLwpAQCAtNjIxLDcgKzYyMSw3IEBACiAKIAkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX0xPV19SU1NJKSAqLwogCV9fbGUzMiBsb3dfcnNzaTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGFjeF93ZXBfc3RhdGlzdGljcyB7CiAJLyogV0VQIGFkZHJlc3Mga2V5cyBjb25maWd1cmVkICovCkBAIC02NDMsNyArNjQzLDcgQEAKIAogCS8qIFdFUCBkZWNyeXB0IGludGVycnVwdHMgKi8KIAlfX2xlMzIgaW50ZXJydXB0OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEFDWF9NSVNTRURfQkVBQ09OU19TUFJFQUQgMTAKIApAQCAtNzAzLDEyICs3MDMsMTIgQEAKIAogCS8qIHRoZSBudW1iZXIgb2YgYmVhY29ucyBpbiBhd2FrZSBtb2RlICovCiAJX19sZTMyIHJjdmRfYXdha2VfYmVhY29uczsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGFjeF9taWNfc3RhdGlzdGljcyB7CiAJX19sZTMyIHJ4X3BrdHM7CiAJX19sZTMyIGNhbGNfZmFpbHVyZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGFjeF9hZXNfc3RhdGlzdGljcyB7CiAJX19sZTMyIGVuY3J5cHRfZmFpbDsKQEAgLTcxNyw3ICs3MTcsNyBAQAogCV9fbGUzMiBkZWNyeXB0X3BhY2tldHM7CiAJX19sZTMyIGVuY3J5cHRfaW50ZXJydXB0OwogCV9fbGUzMiBkZWNyeXB0X2ludGVycnVwdDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGFjeF9ldmVudF9zdGF0aXN0aWNzIHsKIAlfX2xlMzIgaGVhcnRfYmVhdDsKQEAgLTcyOCw3ICs3MjgsNyBAQAogCV9fbGUzMiBvb21fbGF0ZTsKIAlfX2xlMzIgcGh5X3RyYW5zbWl0X2Vycm9yOwogCV9fbGUzMiB0eF9zdHVjazsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGFjeF9wc19zdGF0aXN0aWNzIHsKIAlfX2xlMzIgcHNwb2xsX3RpbWVvdXRzOwpAQCAtNzM4LDcgKzczOCw3IEBACiAJX19sZTMyIHBzcG9sbF9tYXhfYXB0dXJuOwogCV9fbGUzMiBwc3BvbGxfdXRpbGl6YXRpb247CiAJX19sZTMyIHVwc2RfdXRpbGl6YXRpb247Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBhY3hfcnhwaXBlX3N0YXRpc3RpY3MgewogCV9fbGUzMiByeF9wcmVwX2JlYWNvbl9kcm9wOwpAQCAtNzQ2LDcgKzc0Niw3IEBACiAJX19sZTMyIGJlYWNvbl9idWZmZXJfdGhyZXNfaG9zdF9pbnRfdHJpZ19yeF9kYXRhOwogCV9fbGUzMiBtaXNzZWRfYmVhY29uX2hvc3RfaW50X3RyaWdfcnhfZGF0YTsKIAlfX2xlMzIgdHhfeGZyX2hvc3RfaW50X3RyaWdfcnhfZGF0YTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGFjeF9zdGF0aXN0aWNzIHsKIAlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CkBAIC03NjIsNyArNzYyLDcgQEAKIAlzdHJ1Y3QgYWN4X2V2ZW50X3N0YXRpc3RpY3MgZXZlbnQ7CiAJc3RydWN0IGFjeF9wc19zdGF0aXN0aWNzIHBzOwogCXN0cnVjdCBhY3hfcnhwaXBlX3N0YXRpc3RpY3MgcnhwaXBlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYWN4X3JhdGVfY2xhc3MgewogCV9fbGUzMiBlbmFibGVkX3JhdGVzOwpAQCAtNzgwLDcgKzc4MCw3IEBACiAKIAlfX2xlMzIgcmF0ZV9jbGFzc19jbnQ7CiAJc3RydWN0IGFjeF9yYXRlX2NsYXNzIHJhdGVfY2xhc3NbQ09ORl9UWF9NQVhfUkFURV9DTEFTU0VTXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGFjeF9hY19jZmcgewogCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKQEAgLTc5MCw3ICs3OTAsNyBAQAogCXU4IGFpZnNuOwogCXU4IHJlc2VydmVkOwogCV9fbGUxNiB0eF9vcF9saW1pdDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGFjeF90aWRfY29uZmlnIHsKIAlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CkBAIC04MDEsMTkgKzgwMSwxOSBAQAogCXU4IGFja19wb2xpY3k7CiAJdTggcGFkZGluZ1szXTsKIAlfX2xlMzIgYXBzZF9jb25mWzJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYWN4X2ZyYWdfdGhyZXNob2xkIHsKIAlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CiAJX19sZTE2IGZyYWdfdGhyZXNob2xkOwogCXU4IHBhZGRpbmdbMl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBhY3hfdHhfY29uZmlnX29wdGlvbnMgewogCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKIAlfX2xlMTYgdHhfY29tcGxfdGltZW91dDsgICAgIC8qIG1zZWMgKi8KIAlfX2xlMTYgdHhfY29tcGxfdGhyZXNob2xkOyAgIC8qIG51bWJlciBvZiBwYWNrZXRzICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgQUNYX1JYX01FTV9CTE9DS1MgICAgIDcwCiAjZGVmaW5lIEFDWF9UWF9NSU5fTUVNX0JMT0NLUyA0MApAQCAtODI4LDcgKzgyOCw3IEBACiAJdTggbnVtX3N0YXRpb25zOwogCXU4IG51bV9zc2lkX3Byb2ZpbGVzOwogCV9fbGUzMiB0b3RhbF90eF9kZXNjcmlwdG9yczsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHdsMTI3MV9hY3hfbWVtX21hcCB7CiAJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwpAQCAtODcyLDcgKzg3Miw3IEBACiAJdTggKnJ4X2NidWY7CiAJX19sZTMyIHJ4X2N0cmw7CiAJX19sZTMyIHR4X2N0cmw7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCB3bDEyNzFfYWN4X3J4X2NvbmZpZ19vcHQgewogCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKQEAgLTg4Miw3ICs4ODIsNyBAQAogCV9fbGUxNiB0aW1lb3V0OwogCXU4IHF1ZXVlX3R5cGU7CiAJdTggcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIAogc3RydWN0IHdsMTI3MV9hY3hfYmV0X2VuYWJsZSB7CkBAIC04OTEsNyArODkxLDcgQEAKIAl1OCBlbmFibGU7CiAJdTggbWF4X2NvbnNlY3V0aXZlOwogCXU4IHBhZGRpbmdbMl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgQUNYX0lQVjRfVkVSU0lPTiA0CiAjZGVmaW5lIEFDWF9JUFY2X1ZFUlNJT04gNgpAQCAtOTA1LDcgKzkwNSw3IEBACiAJCQkgICAgICAgcmVxdWVzdHMgZGlyZWN0ZWQgdG8gdGhpcyBJUCBhZGRyZXNzIHdpbGwgcGFzcwogCQkJICAgICAgIHRocm91Z2guIEZvciBJUHY0LCB0aGUgZmlyc3QgZm91ciBieXRlcyBhcmUKIAkJCSAgICAgICB1c2VkLiAqLwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCB3bDEyNzFfYWN4X3BtX2NvbmZpZyB7CiAJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwpAQCAtOTEzLDE0ICs5MTMsMTQgQEAKIAlfX2xlMzIgaG9zdF9jbGtfc2V0dGxpbmdfdGltZTsKIAl1OCBob3N0X2Zhc3Rfd2FrZXVwX3N1cHBvcnQ7CiAJdTggcGFkZGluZ1szXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHdsMTI3MV9hY3hfa2VlcF9hbGl2ZV9tb2RlIHsKIAlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CiAKIAl1OCBlbmFibGVkOwogCXU4IHBhZGRpbmdbM107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIGVudW0gewogCUFDWF9LRUVQX0FMSVZFX05PX1RYID0gMCwKQEAgLTk0MCw3ICs5NDAsNyBAQAogCXU4IHRwbF92YWxpZGF0aW9uOwogCXU4IHRyaWdnZXI7CiAJdTggcGFkZGluZzsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogZW51bSB7CiAJV0wxMjcxX0FDWF9UUklHX1RZUEVfTEVWRUwgPSAwLApAQCAtOTkzLDYgKzk5MywxNyBAQAogCXU4IHNucl9kYXRhOwogfTsKIAorc3RydWN0IHdsMTI3MV9hY3hfZndfdHNmX2luZm9ybWF0aW9uIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwlfX2xlMzIgY3VycmVudF90c2ZfaGlnaDsKKwlfX2xlMzIgY3VycmVudF90c2ZfbG93OworCV9fbGUzMiBsYXN0X2J0dHRfaGlnaDsKKwlfX2xlMzIgbGFzdF90YnR0X2xvdzsKKwl1OCBsYXN0X2R0aW1fY291bnQ7CisJdTggcGFkZGluZ1szXTsKK30gX19wYWNrZWQ7CisKIGVudW0gewogCUFDWF9XQUtFX1VQX0NPTkRJVElPTlMgICAgICA9IDB4MDAwMiwKIAlBQ1hfTUVNX0NGRyAgICAgICAgICAgICAgICAgPSAweDAwMDMsCkBAIC0xMTA2LDEzICsxMTE3LDEzIEBACiBpbnQgd2wxMjcxX2FjeF9pbml0X3J4X2ludGVycnVwdChzdHJ1Y3Qgd2wxMjcxICp3bCk7CiBpbnQgd2wxMjcxX2FjeF9zbWFydF9yZWZsZXgoc3RydWN0IHdsMTI3MSAqd2wpOwogaW50IHdsMTI3MV9hY3hfYmV0X2VuYWJsZShzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBlbmFibGUpOwotaW50IHdsMTI3MV9hY3hfYXJwX2lwX2ZpbHRlcihzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBlbmFibGUsIHU4ICphZGRyZXNzLAotCQkJICAgICB1OCB2ZXJzaW9uKTsKK2ludCB3bDEyNzFfYWN4X2FycF9pcF9maWx0ZXIoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgZW5hYmxlLCBfX2JlMzIgYWRkcmVzcyk7CiBpbnQgd2wxMjcxX2FjeF9wbV9jb25maWcoc3RydWN0IHdsMTI3MSAqd2wpOwogaW50IHdsMTI3MV9hY3hfa2VlcF9hbGl2ZV9tb2RlKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSk7CiBpbnQgd2wxMjcxX2FjeF9rZWVwX2FsaXZlX2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggaW5kZXgsIHU4IHRwbF92YWxpZCk7CiBpbnQgd2wxMjcxX2FjeF9yc3NpX3Nucl90cmlnZ2VyKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSwKIAkJCQlzMTYgdGhvbGQsIHU4IGh5c3QpOwogaW50IHdsMTI3MV9hY3hfcnNzaV9zbnJfYXZnX3dlaWdodHMoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9hY3hfdHNmX2luZm8oc3RydWN0IHdsMTI3MSAqd2wsIHU2NCAqbWFjdGltZSk7CiAKICNlbmRpZiAvKiBfX1dMMTI3MV9BQ1hfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2Jvb3QuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYm9vdC5jCmluZGV4IDFhMzZkOGEuLmYzNjQzMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYm9vdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYm9vdC5jCkBAIC00MTQsNyArNDE0LDkgQEAKIAkJUFNfUkVQT1JUX0VWRU5UX0lEIHwKIAkJSk9JTl9FVkVOVF9DT01QTEVURV9JRCB8CiAJCURJU0NPTk5FQ1RfRVZFTlRfQ09NUExFVEVfSUQgfAotCQlSU1NJX1NOUl9UUklHR0VSXzBfRVZFTlRfSUQ7CisJCVJTU0lfU05SX1RSSUdHRVJfMF9FVkVOVF9JRCB8CisJCVBTUE9MTF9ERUxJVkVSWV9GQUlMVVJFX0VWRU5UX0lEIHwKKwkJU09GVF9HRU1JTklfU0VOU0VfRVZFTlRfSUQ7CiAKIAlyZXQgPSB3bDEyNzFfZXZlbnRfdW5tYXNrKHdsKTsKIAlpZiAocmV0IDwgMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9jbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfY21kLmMKaW5kZXggMTkzOTNlMi4uY2U1MDNkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9jbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NtZC5jCkBAIC0xMDQsMTAwICsxMDQsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgd2wxMjcxX2NtZF9jYWxfY2hhbm5lbF90dW5lKHN0cnVjdCB3bDEyNzEgKndsKQotewotCXN0cnVjdCB3bDEyNzFfY21kX2NhbF9jaGFubmVsX3R1bmUgKmNtZDsKLQlpbnQgcmV0ID0gMDsKLQotCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNtZCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQljbWQtPnRlc3QuaWQgPSBURVNUX0NNRF9DSEFOTkVMX1RVTkU7Ci0KLQljbWQtPmJhbmQgPSBXTDEyNzFfQ0hBTk5FTF9UVU5FX0JBTkRfMl80OwotCS8qIHNldCB1cCBhbnkgY2hhbm5lbCwgNyBpcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSByYW5nZSAqLwotCWNtZC0+Y2hhbm5lbCA9IDc7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX3Rlc3Qod2wsIGNtZCwgc2l6ZW9mKCpjbWQpLCAwKTsKLQlpZiAocmV0IDwgMCkKLQkJd2wxMjcxX3dhcm5pbmcoIlRFU1RfQ01EX0NIQU5ORUxfVFVORSBmYWlsZWQiKTsKLQotCWtmcmVlKGNtZCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB3bDEyNzFfY21kX2NhbF91cGRhdGVfcmVmX3BvaW50KHN0cnVjdCB3bDEyNzEgKndsKQotewotCXN0cnVjdCB3bDEyNzFfY21kX2NhbF91cGRhdGVfcmVmX3BvaW50ICpjbWQ7Ci0JaW50IHJldCA9IDA7Ci0KLQljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjbWQpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JY21kLT50ZXN0LmlkID0gVEVTVF9DTURfVVBEQVRFX1BEX1JFRkVSRU5DRV9QT0lOVDsKLQotCS8qIEZJWE1FOiBzdGlsbCB3YWl0aW5nIGZvciB0aGUgY29ycmVjdCB2YWx1ZXMgKi8KLQljbWQtPnJlZl9wb3dlciAgICA9IDA7Ci0JY21kLT5yZWZfZGV0ZWN0b3IgPSAwOwotCi0JY21kLT5zdWJfYmFuZCAgICAgPSBXTDEyNzFfUERfUkVGRVJFTkNFX1BPSU5UX0JBTkRfQl9HOwotCi0JcmV0ID0gd2wxMjcxX2NtZF90ZXN0KHdsLCBjbWQsIHNpemVvZigqY21kKSwgMCk7Ci0JaWYgKHJldCA8IDApCi0JCXdsMTI3MV93YXJuaW5nKCJURVNUX0NNRF9VUERBVEVfUERfUkVGRVJFTkNFX1BPSU5UIGZhaWxlZCIpOwotCi0Ja2ZyZWUoY21kKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHdsMTI3MV9jbWRfY2FsX3AyZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQlzdHJ1Y3Qgd2wxMjcxX2NtZF9jYWxfcDJnICpjbWQ7Ci0JaW50IHJldCA9IDA7Ci0KLQljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjbWQpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JY21kLT50ZXN0LmlkID0gVEVTVF9DTURfUDJHX0NBTDsKLQotCWNtZC0+c3ViX2JhbmRfbWFzayA9IFdMMTI3MV9DQUxfUDJHX0JBTkRfQl9HOwotCi0JcmV0ID0gd2wxMjcxX2NtZF90ZXN0KHdsLCBjbWQsIHNpemVvZigqY21kKSwgMCk7Ci0JaWYgKHJldCA8IDApCi0JCXdsMTI3MV93YXJuaW5nKCJURVNUX0NNRF9QMkdfQ0FMIGZhaWxlZCIpOwotCi0Ja2ZyZWUoY21kKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHdsMTI3MV9jbWRfY2FsKHN0cnVjdCB3bDEyNzEgKndsKQotewotCS8qCi0JICogRklYTUU6IHdlIG11c3QgbWFrZSBzdXJlIHRoYXQgd2UncmUgbm90IHNsZWVwaW5nIHdoZW4gY2FsaWJyYXRpb24KLQkgKiBpcyBkb25lCi0JICovCi0JaW50IHJldDsKLQotCXdsMTI3MV9ub3RpY2UoInBlcmZvcm1pbmcgdHggY2FsaWJyYXRpb24iKTsKLQotCXJldCA9IHdsMTI3MV9jbWRfY2FsX2NoYW5uZWxfdHVuZSh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX2NhbF91cGRhdGVfcmVmX3BvaW50KHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHdsMTI3MV9jbWRfY2FsX3AyZyh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBpbnQgd2wxMjcxX2NtZF9nZW5lcmFsX3Bhcm1zKHN0cnVjdCB3bDEyNzEgKndsKQogewogCXN0cnVjdCB3bDEyNzFfZ2VuZXJhbF9wYXJtc19jbWQgKmdlbl9wYXJtczsKQEAgLTIxMiw4ICsxMTgsOCBAQAogCiAJZ2VuX3Bhcm1zLT50ZXN0LmlkID0gVEVTVF9DTURfSU5JX0ZJTEVfR0VORVJBTF9QQVJBTTsKIAotCW1lbWNweShnZW5fcGFybXMtPnBhcmFtcywgd2wtPm52cy0+Z2VuZXJhbF9wYXJhbXMsCi0JICAgICAgIFdMMTI3MV9OVlNfR0VORVJBTF9QQVJBTVNfU0laRSk7CisJbWVtY3B5KCZnZW5fcGFybXMtPmdlbmVyYWxfcGFyYW1zLCAmd2wtPm52cy0+Z2VuZXJhbF9wYXJhbXMsCisJICAgICAgIHNpemVvZihzdHJ1Y3Qgd2wxMjcxX2luaV9nZW5lcmFsX3BhcmFtcykpOwogCiAJcmV0ID0gd2wxMjcxX2NtZF90ZXN0KHdsLCBnZW5fcGFybXMsIHNpemVvZigqZ2VuX3Bhcm1zKSwgMCk7CiAJaWYgKHJldCA8IDApCkBAIC0yMjYsNyArMTMyLDcgQEAKIGludCB3bDEyNzFfY21kX3JhZGlvX3Bhcm1zKHN0cnVjdCB3bDEyNzEgKndsKQogewogCXN0cnVjdCB3bDEyNzFfcmFkaW9fcGFybXNfY21kICpyYWRpb19wYXJtczsKLQlzdHJ1Y3QgY29uZl9yYWRpb19wYXJtcyAqcnBhcmFtID0gJndsLT5jb25mLmluaXQucmFkaW9wYXJhbTsKKwlzdHJ1Y3Qgd2wxMjcxX2luaV9nZW5lcmFsX3BhcmFtcyAqZ3AgPSAmd2wtPm52cy0+Z2VuZXJhbF9wYXJhbXM7CiAJaW50IHJldDsKIAogCWlmICghd2wtPm52cykKQEAgLTIzOCwxMyArMTQ0LDIwIEBACiAKIAlyYWRpb19wYXJtcy0+dGVzdC5pZCA9IFRFU1RfQ01EX0lOSV9GSUxFX1JBRElPX1BBUkFNOwogCi0JbWVtY3B5KHJhZGlvX3Bhcm1zLT5zdGF0X3JhZGlvX3BhcmFtcywgd2wtPm52cy0+c3RhdF9yYWRpb19wYXJhbXMsCi0JICAgICAgIFdMMTI3MV9OVlNfU1RBVF9SQURJT19QQVJBTVNfU0laRSk7Ci0JbWVtY3B5KHJhZGlvX3Bhcm1zLT5keW5fcmFkaW9fcGFyYW1zLAotCSAgICAgICB3bC0+bnZzLT5keW5fcmFkaW9fcGFyYW1zW3JwYXJhbS0+ZmVtXSwKLQkgICAgICAgV0wxMjcxX05WU19EWU5fUkFESU9fUEFSQU1TX1NJWkUpOworCS8qIDIuNEdIeiBwYXJhbWV0ZXJzICovCisJbWVtY3B5KCZyYWRpb19wYXJtcy0+c3RhdGljX3BhcmFtc18yLCAmd2wtPm52cy0+c3RhdF9yYWRpb19wYXJhbXNfMiwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCB3bDEyNzFfaW5pX2JhbmRfcGFyYW1zXzIpKTsKKwltZW1jcHkoJnJhZGlvX3Bhcm1zLT5keW5fcGFyYW1zXzIsCisJICAgICAgICZ3bC0+bnZzLT5keW5fcmFkaW9fcGFyYW1zXzJbZ3AtPnR4X2JpcF9mZW1fbWFudWZhY3R1cmVyXS5wYXJhbXMsCisJICAgICAgIHNpemVvZihzdHJ1Y3Qgd2wxMjcxX2luaV9mZW1fcGFyYW1zXzIpKTsKIAotCS8qIEZJWE1FOiBjdXJyZW50IE5WUyBpcyBtaXNzaW5nIDVHSHogcGFyYW1ldGVycyAqLworCS8qIDVHSHogcGFyYW1ldGVycyAqLworCW1lbWNweSgmcmFkaW9fcGFybXMtPnN0YXRpY19wYXJhbXNfNSwKKwkgICAgICAgJndsLT5udnMtPnN0YXRfcmFkaW9fcGFyYW1zXzUsCisJICAgICAgIHNpemVvZihzdHJ1Y3Qgd2wxMjcxX2luaV9iYW5kX3BhcmFtc181KSk7CisJbWVtY3B5KCZyYWRpb19wYXJtcy0+ZHluX3BhcmFtc181LAorCSAgICAgICAmd2wtPm52cy0+ZHluX3JhZGlvX3BhcmFtc181W2dwLT50eF9iaXBfZmVtX21hbnVmYWN0dXJlcl0ucGFyYW1zLAorCSAgICAgICBzaXplb2Yoc3RydWN0IHdsMTI3MV9pbmlfZmVtX3BhcmFtc181KSk7CiAKIAl3bDEyNzFfZHVtcChERUJVR19DTUQsICJURVNUX0NNRF9JTklfRklMRV9SQURJT19QQVJBTTogIiwKIAkJICAgIHJhZGlvX3Bhcm1zLCBzaXplb2YoKnJhZGlvX3Bhcm1zKSk7CkBAIC0yODgsMjAgKzIwMSwxMCBAQAogCiBpbnQgd2wxMjcxX2NtZF9qb2luKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBic3NfdHlwZSkKIHsKLQlzdGF0aWMgYm9vbCBkb19jYWwgPSB0cnVlOwogCXN0cnVjdCB3bDEyNzFfY21kX2pvaW4gKmpvaW47CiAJaW50IHJldCwgaTsKIAl1OCAqYnNzaWQ7CiAKLQkvKiBGSVhNRTogcmVtb3ZlIHdoZW4gd2UgZ2V0IGNhbGlicmF0aW9uIGZyb20gdGhlIGZhY3RvcnkgKi8KLQlpZiAoZG9fY2FsKSB7Ci0JCXJldCA9IHdsMTI3MV9jbWRfY2FsKHdsKTsKLQkJaWYgKHJldCA8IDApCi0JCQl3bDEyNzFfd2FybmluZygiY291bGRuJ3QgY2FsaWJyYXRlIik7Ci0JCWVsc2UKLQkJCWRvX2NhbCA9IGZhbHNlOwotCX0KLQogCWpvaW4gPSBremFsbG9jKHNpemVvZigqam9pbiksIEdGUF9LRVJORUwpOwogCWlmICgham9pbikgewogCQlyZXQgPSAtRU5PTUVNOwpAQCAtMzI5LDEyICsyMzIsNiBAQAogCWpvaW4tPmNoYW5uZWwgPSB3bC0+Y2hhbm5lbDsKIAlqb2luLT5zc2lkX2xlbiA9IHdsLT5zc2lkX2xlbjsKIAltZW1jcHkoam9pbi0+c3NpZCwgd2wtPnNzaWQsIHdsLT5zc2lkX2xlbik7Ci0Jam9pbi0+Y3RybCA9IFdMMTI3MV9KT0lOX0NNRF9DVFJMX1RYX0ZMVVNIOwotCi0JLyogaW5jcmVtZW50IHRoZSBzZXNzaW9uIGNvdW50ZXIgKi8KLQl3bC0+c2Vzc2lvbl9jb3VudGVyKys7Ci0JaWYgKHdsLT5zZXNzaW9uX2NvdW50ZXIgPj0gU0VTU0lPTl9DT1VOVEVSX01BWCkKLQkJd2wtPnNlc3Npb25fY291bnRlciA9IDA7CiAKIAlqb2luLT5jdHJsIHw9IHdsLT5zZXNzaW9uX2NvdW50ZXIgPDwgV0wxMjcxX0pPSU5fQ01EX1RYX1NFU1NJT05fT0ZGU0VUOwogCkBAIC01MTcsNyArNDE0LDcgQEAKIAlwc19wYXJhbXMtPnNlbmRfbnVsbF9kYXRhID0gc2VuZDsKIAlwc19wYXJhbXMtPnJldHJpZXMgPSA1OwogCXBzX3BhcmFtcy0+aGFuZ19vdmVyX3BlcmlvZCA9IDE7Ci0JcHNfcGFyYW1zLT5udWxsX2RhdGFfcmF0ZSA9IGNwdV90b19sZTMyKDEpOyAvKiAxIE1icHMgKi8KKwlwc19wYXJhbXMtPm51bGxfZGF0YV9yYXRlID0gY3B1X3RvX2xlMzIod2wtPmJhc2ljX3JhdGVfc2V0KTsKIAogCXJldCA9IHdsMTI3MV9jbWRfc2VuZCh3bCwgQ01EX1NFVF9QU19NT0RFLCBwc19wYXJhbXMsCiAJCQkgICAgICBzaXplb2YoKnBzX3BhcmFtcyksIDApOwpAQCAtNTY2LDE0MCArNDYzLDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgd2wxMjcxX2NtZF9zY2FuKHN0cnVjdCB3bDEyNzEgKndsLCBjb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLAotCQkgICAgY29uc3QgdTggKmllLCBzaXplX3QgaWVfbGVuLCB1OCBhY3RpdmVfc2NhbiwKLQkJICAgIHU4IGhpZ2hfcHJpbywgdTggYmFuZCwgdTggcHJvYmVfcmVxdWVzdHMpCi17Ci0KLQlzdHJ1Y3Qgd2wxMjcxX2NtZF90cmlnZ2VyX3NjYW5fdG8gKnRyaWdnZXIgPSBOVUxMOwotCXN0cnVjdCB3bDEyNzFfY21kX3NjYW4gKnBhcmFtcyA9IE5VTEw7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsczsKLQl1MzIgcmF0ZTsKLQlpbnQgaSwgaiwgbl9jaCwgcmV0OwotCXUxNiBzY2FuX29wdGlvbnMgPSAwOwotCXU4IGllZWVfYmFuZDsKLQotCWlmIChiYW5kID09IFdMMTI3MV9TQ0FOX0JBTkRfMl80X0dIWikgewotCQlpZWVlX2JhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwotCQlyYXRlID0gd2wtPmNvbmYudHguYmFzaWNfcmF0ZTsKLQl9IGVsc2UgaWYgKGJhbmQgPT0gV0wxMjcxX1NDQU5fQkFORF9EVUFMICYmIHdsMTI3MV8xMWFfZW5hYmxlZCgpKSB7Ci0JCWllZWVfYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7Ci0JCXJhdGUgPSB3bC0+Y29uZi50eC5iYXNpY19yYXRlOwotCX0gZWxzZSBpZiAoYmFuZCA9PSBXTDEyNzFfU0NBTl9CQU5EXzVfR0haICYmIHdsMTI3MV8xMWFfZW5hYmxlZCgpKSB7Ci0JCWllZWVfYmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFo7Ci0JCXJhdGUgPSB3bC0+Y29uZi50eC5iYXNpY19yYXRlXzU7Ci0JfSBlbHNlCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHdsLT5ody0+d2lwaHktPmJhbmRzW2llZWVfYmFuZF0tPmNoYW5uZWxzID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY2hhbm5lbHMgPSB3bC0+aHctPndpcGh5LT5iYW5kc1tpZWVlX2JhbmRdLT5jaGFubmVsczsKLQluX2NoID0gd2wtPmh3LT53aXBoeS0+YmFuZHNbaWVlZV9iYW5kXS0+bl9jaGFubmVsczsKLQotCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19TQ0FOTklORywgJndsLT5mbGFncykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcGFyYW1zID0ga3phbGxvYyhzaXplb2YoKnBhcmFtcyksIEdGUF9LRVJORUwpOwotCWlmICghcGFyYW1zKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXBhcmFtcy0+cGFyYW1zLnJ4X2NvbmZpZ19vcHRpb25zID0gY3B1X3RvX2xlMzIoQ0ZHX1JYX0FMTF9HT09EKTsKLQlwYXJhbXMtPnBhcmFtcy5yeF9maWx0ZXJfb3B0aW9ucyA9Ci0JCWNwdV90b19sZTMyKENGR19SWF9QUlNQX0VOIHwgQ0ZHX1JYX01HTVRfRU4gfCBDRkdfUlhfQkNOX0VOKTsKLQotCWlmICghYWN0aXZlX3NjYW4pCi0JCXNjYW5fb3B0aW9ucyB8PSBXTDEyNzFfU0NBTl9PUFRfUEFTU0lWRTsKLQlpZiAoaGlnaF9wcmlvKQotCQlzY2FuX29wdGlvbnMgfD0gV0wxMjcxX1NDQU5fT1BUX1BSSU9SSVRZX0hJR0g7Ci0JcGFyYW1zLT5wYXJhbXMuc2Nhbl9vcHRpb25zID0gY3B1X3RvX2xlMTYoc2Nhbl9vcHRpb25zKTsKLQotCXBhcmFtcy0+cGFyYW1zLm51bV9wcm9iZV9yZXF1ZXN0cyA9IHByb2JlX3JlcXVlc3RzOwotCXBhcmFtcy0+cGFyYW1zLnR4X3JhdGUgPSBjcHVfdG9fbGUzMihyYXRlKTsKLQlwYXJhbXMtPnBhcmFtcy50aWRfdHJpZ2dlciA9IDA7Ci0JcGFyYW1zLT5wYXJhbXMuc2Nhbl90YWcgPSBXTDEyNzFfU0NBTl9ERUZBVUxUX1RBRzsKLQotCWlmIChiYW5kID09IFdMMTI3MV9TQ0FOX0JBTkRfRFVBTCkKLQkJcGFyYW1zLT5wYXJhbXMuYmFuZCA9IFdMMTI3MV9TQ0FOX0JBTkRfMl80X0dIWjsKLQllbHNlCi0JCXBhcmFtcy0+cGFyYW1zLmJhbmQgPSBiYW5kOwotCi0JZm9yIChpID0gMCwgaiA9IDA7IGkgPCBuX2NoICYmIGkgPCBXTDEyNzFfU0NBTl9NQVhfQ0hBTk5FTFM7IGkrKykgewotCQlpZiAoIShjaGFubmVsc1tpXS5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKSkgewotCQkJcGFyYW1zLT5jaGFubmVsc1tqXS5taW5fZHVyYXRpb24gPQotCQkJCWNwdV90b19sZTMyKFdMMTI3MV9TQ0FOX0NIQU5fTUlOX0RVUkFUSU9OKTsKLQkJCXBhcmFtcy0+Y2hhbm5lbHNbal0ubWF4X2R1cmF0aW9uID0KLQkJCQljcHVfdG9fbGUzMihXTDEyNzFfU0NBTl9DSEFOX01BWF9EVVJBVElPTik7Ci0JCQltZW1zZXQoJnBhcmFtcy0+Y2hhbm5lbHNbal0uYnNzaWRfbHNiLCAweGZmLCA0KTsKLQkJCW1lbXNldCgmcGFyYW1zLT5jaGFubmVsc1tqXS5ic3NpZF9tc2IsIDB4ZmYsIDIpOwotCQkJcGFyYW1zLT5jaGFubmVsc1tqXS5lYXJseV90ZXJtaW5hdGlvbiA9IDA7Ci0JCQlwYXJhbXMtPmNoYW5uZWxzW2pdLnR4X3Bvd2VyX2F0dCA9Ci0JCQkJV0wxMjcxX1NDQU5fQ1VSUkVOVF9UWF9QV1I7Ci0JCQlwYXJhbXMtPmNoYW5uZWxzW2pdLmNoYW5uZWwgPSBjaGFubmVsc1tpXS5od192YWx1ZTsKLQkJCWorKzsKLQkJfQotCX0KLQotCXBhcmFtcy0+cGFyYW1zLm51bV9jaGFubmVscyA9IGo7Ci0KLQlpZiAoc3NpZF9sZW4gJiYgc3NpZCkgewotCQlwYXJhbXMtPnBhcmFtcy5zc2lkX2xlbiA9IHNzaWRfbGVuOwotCQltZW1jcHkocGFyYW1zLT5wYXJhbXMuc3NpZCwgc3NpZCwgc3NpZF9sZW4pOwotCX0KLQotCXJldCA9IHdsMTI3MV9jbWRfYnVpbGRfcHJvYmVfcmVxKHdsLCBzc2lkLCBzc2lkX2xlbiwKLQkJCQkJIGllLCBpZV9sZW4sIGllZWVfYmFuZCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX2Vycm9yKCJQUk9CRSByZXF1ZXN0IHRlbXBsYXRlIGZhaWxlZCIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQl0cmlnZ2VyID0ga3phbGxvYyhzaXplb2YoKnRyaWdnZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRyaWdnZXIpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogZGlzYWJsZSB0aGUgdGltZW91dCAqLwotCXRyaWdnZXItPnRpbWVvdXQgPSAwOwotCi0JcmV0ID0gd2wxMjcxX2NtZF9zZW5kKHdsLCBDTURfVFJJR0dFUl9TQ0FOX1RPLCB0cmlnZ2VyLAotCQkJICAgICAgc2l6ZW9mKCp0cmlnZ2VyKSwgMCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX2Vycm9yKCJ0cmlnZ2VyIHNjYW4gdG8gZmFpbGVkIGZvciBodyBzY2FuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXdsMTI3MV9kdW1wKERFQlVHX1NDQU4sICJTQ0FOOiAiLCBwYXJhbXMsIHNpemVvZigqcGFyYW1zKSk7Ci0KLQlzZXRfYml0KFdMMTI3MV9GTEFHX1NDQU5OSU5HLCAmd2wtPmZsYWdzKTsKLQlpZiAod2wxMjcxXzExYV9lbmFibGVkKCkpIHsKLQkJd2wtPnNjYW4uc3RhdGUgPSBiYW5kOwotCQlpZiAoYmFuZCA9PSBXTDEyNzFfU0NBTl9CQU5EX0RVQUwpIHsKLQkJCXdsLT5zY2FuLmFjdGl2ZSA9IGFjdGl2ZV9zY2FuOwotCQkJd2wtPnNjYW4uaGlnaF9wcmlvID0gaGlnaF9wcmlvOwotCQkJd2wtPnNjYW4ucHJvYmVfcmVxdWVzdHMgPSBwcm9iZV9yZXF1ZXN0czsKLQkJCWlmIChzc2lkX2xlbiAmJiBzc2lkKSB7Ci0JCQkJd2wtPnNjYW4uc3NpZF9sZW4gPSBzc2lkX2xlbjsKLQkJCQltZW1jcHkod2wtPnNjYW4uc3NpZCwgc3NpZCwgc3NpZF9sZW4pOwotCQkJfSBlbHNlCi0JCQkJd2wtPnNjYW4uc3NpZF9sZW4gPSAwOwotCQl9Ci0JfQotCi0JcmV0ID0gd2wxMjcxX2NtZF9zZW5kKHdsLCBDTURfU0NBTiwgcGFyYW1zLCBzaXplb2YoKnBhcmFtcyksIDApOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTI3MV9lcnJvcigiU0NBTiBmYWlsZWQiKTsKLQkJY2xlYXJfYml0KFdMMTI3MV9GTEFHX1NDQU5OSU5HLCAmd2wtPmZsYWdzKTsKLQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0Ja2ZyZWUocGFyYW1zKTsKLQlrZnJlZSh0cmlnZ2VyKTsKLQlyZXR1cm4gcmV0OwotfQotCiBpbnQgd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiB0ZW1wbGF0ZV9pZCwKIAkJCSAgICB2b2lkICpidWYsIHNpemVfdCBidWZfbGVuLCBpbnQgaW5kZXgsIHUzMiByYXRlcykKIHsKQEAgLTgwNCw3ICs1NjcsNyBAQAogCQlnb3RvIG91dDsKIAogCXJldCA9IHdsMTI3MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfVEVNUExfUFNfUE9MTCwgc2tiLT5kYXRhLAotCQkJCSAgICAgIHNrYi0+bGVuLCAwLCB3bC0+YmFzaWNfcmF0ZSk7CisJCQkJICAgICAgc2tiLT5sZW4sIDAsIHdsLT5iYXNpY19yYXRlX3NldCk7CiAKIG91dDoKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NtZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9jbWQuaAppbmRleCBmMjgyMGI0Li5hZjU3N2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NtZC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfY21kLmgKQEAgLTQxLDkgKzQxLDYgQEAKIGludCB3bDEyNzFfY21kX3BzX21vZGUoc3RydWN0IHdsMTI3MSAqd2wsIHU4IHBzX21vZGUsIGJvb2wgc2VuZCk7CiBpbnQgd2wxMjcxX2NtZF9yZWFkX21lbW9yeShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTMyIGFkZHIsIHZvaWQgKmFuc3dlciwKIAkJCSAgIHNpemVfdCBsZW4pOwotaW50IHdsMTI3MV9jbWRfc2NhbihzdHJ1Y3Qgd2wxMjcxICp3bCwgY29uc3QgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbiwKLQkJICAgIGNvbnN0IHU4ICppZSwgc2l6ZV90IGllX2xlbiwgdTggYWN0aXZlX3NjYW4sCi0JCSAgICB1OCBoaWdoX3ByaW8sIHU4IGJhbmQsIHU4IHByb2JlX3JlcXVlc3RzKTsKIGludCB3bDEyNzFfY21kX3RlbXBsYXRlX3NldChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IHRlbXBsYXRlX2lkLAogCQkJICAgIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIGludCBpbmRleCwgdTMyIHJhdGVzKTsKIGludCB3bDEyNzFfY21kX2J1aWxkX251bGxfZGF0YShzdHJ1Y3Qgd2wxMjcxICp3bCk7CkBAIC0xMzYsMTQgKzEzMywxNCBAQAogCV9fbGUxNiBzdGF0dXM7CiAJLyogcGF5bG9hZCAqLwogCXU4IGRhdGFbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgV0wxMjcxX0NNRF9NQVhfUEFSQU1TIDU3MgogCiBzdHJ1Y3Qgd2wxMjcxX2NvbW1hbmQgewogCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7CiAJdTggIHBhcmFtZXRlcnNbV0wxMjcxX0NNRF9NQVhfUEFSQU1TXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogZW51bSB7CiAJQ01EX01BSUxCT1hfSURMRQkJPSAgMCwKQEAgLTE5Niw3ICsxOTMsNyBAQAogCSAgIG9mIHRoaXMgZmllbGQgaXMgdGhlIEhvc3QgaW4gV1JJVEUgY29tbWFuZCBvciB0aGUgV2lsaW5rIGluIFJFQUQKIAkgICBjb21tYW5kLiAqLwogCXU4IHZhbHVlW01BWF9SRUFEX1NJWkVdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIENNRE1CT1hfSEVBREVSX0xFTiA0CiAjZGVmaW5lIENNRE1CT1hfSU5GT19FTEVNX0hFQURFUl9MRU4gNApAQCAtMjQzLDE0ICsyNDAsMTQgQEAKIAl1OCBzc2lkW0lXX0VTU0lEX01BWF9TSVpFXTsKIAl1OCBjdHJsOyAvKiBKT0lOX0NNRF9DVFJMXyogKi8KIAl1OCByZXNlcnZlZFszXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGNtZF9lbmFibGVkaXNhYmxlX3BhdGggewogCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7CiAKIAl1OCBjaGFubmVsOwogCXU4IHBhZGRpbmdbM107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgV0wxMjcxX1JBVEVfQVVUT01BVElDICAwCiAKQEAgLTI2Niw3ICsyNjMsNyBAQAogCXU4IGFmbGFnczsKIAl1OCByZXNlcnZlZDsKIAl1OCB0ZW1wbGF0ZV9kYXRhW1dMMTI3MV9DTURfVEVNUExfTUFYX1NJWkVdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIFRJTV9FTEVfSUQgICAgNQogI2RlZmluZSBQQVJUSUFMX1ZCTV9NQVggICAgMjUxCkBAIC0yNzgsNyArMjc1LDcgQEAKIAl1OCBkdGltX3BlcmlvZDsKIAl1OCBiaXRtYXBfY3RybDsKIAl1OCBwdmJfZmllbGRbUEFSVElBTF9WQk1fTUFYXTsgLyogUGFydGlhbCBWaXJ0dWFsIEJpdG1hcCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBlbnVtIHdsMTI3MV9jbWRfcHNfbW9kZSB7CiAJU1RBVElPTl9BQ1RJVkVfTU9ERSwKQEAgLTI5OCw3ICsyOTUsNyBAQAogCSAgKi8KIAl1OCBoYW5nX292ZXJfcGVyaW9kOwogCV9fbGUzMiBudWxsX2RhdGFfcmF0ZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogSFcgZW5jcnlwdGlvbiBrZXlzICovCiAjZGVmaW5lIE5VTV9BQ0NFU1NfQ0FURUdPUklFU19DT1BZIDQKQEAgLTM0OCw3NyArMzQ1LDEyIEBACiAJdTgga2V5W01BWF9LRVlfU0laRV07CiAJX19sZTE2IGFjX3NlcV9udW0xNltOVU1fQUNDRVNTX0NBVEVHT1JJRVNfQ09QWV07CiAJX19sZTMyIGFjX3NlcV9udW0zMltOVU1fQUNDRVNTX0NBVEVHT1JJRVNfQ09QWV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotCi0jZGVmaW5lIFdMMTI3MV9TQ0FOX01BWF9DSEFOTkVMUyAgICAgICAyNAotI2RlZmluZSBXTDEyNzFfU0NBTl9ERUZBVUxUX1RBRyAgICAgICAgMQotI2RlZmluZSBXTDEyNzFfU0NBTl9DVVJSRU5UX1RYX1BXUiAgICAgMAotI2RlZmluZSBXTDEyNzFfU0NBTl9PUFRfQUNUSVZFICAgICAgICAgMAotI2RlZmluZSBXTDEyNzFfU0NBTl9PUFRfUEFTU0lWRQkgICAgICAgMQotI2RlZmluZSBXTDEyNzFfU0NBTl9PUFRfUFJJT1JJVFlfSElHSCAgNAotI2RlZmluZSBXTDEyNzFfU0NBTl9DSEFOX01JTl9EVVJBVElPTiAgMzAwMDAgIC8qIFRVICovCi0jZGVmaW5lIFdMMTI3MV9TQ0FOX0NIQU5fTUFYX0RVUkFUSU9OICA2MDAwMCAgLyogVFUgKi8KLSNkZWZpbmUgV0wxMjcxX1NDQU5fQkFORF8yXzRfR0haIDAKLSNkZWZpbmUgV0wxMjcxX1NDQU5fQkFORF81X0dIWiAxCi0jZGVmaW5lIFdMMTI3MV9TQ0FOX0JBTkRfRFVBTCAyCi0KLXN0cnVjdCBiYXNpY19zY2FuX3BhcmFtcyB7Ci0JX19sZTMyIHJ4X2NvbmZpZ19vcHRpb25zOwotCV9fbGUzMiByeF9maWx0ZXJfb3B0aW9uczsKLQkvKiBTY2FuIG9wdGlvbiBmbGFncyAoV0wxMjcxX1NDQU5fT1BUXyopICovCi0JX19sZTE2IHNjYW5fb3B0aW9uczsKLQkvKiBOdW1iZXIgb2Ygc2NhbiBjaGFubmVscyBpbiB0aGUgbGlzdCAobWF4aW11bSAzMCkgKi8KLQl1OCBudW1fY2hhbm5lbHM7Ci0JLyogVGhpcyBmaWVsZCBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBwcm9iZSByZXF1ZXN0cyB0byBzZW5kCi0JICAgcGVyIGNoYW5uZWwgZm9yIGFuIGFjdGl2ZSBzY2FuICovCi0JdTggbnVtX3Byb2JlX3JlcXVlc3RzOwotCS8qIFJhdGUgYml0IGZpZWxkIGZvciBzZW5kaW5nIHRoZSBwcm9iZXMgKi8KLQlfX2xlMzIgdHhfcmF0ZTsKLQl1OCB0aWRfdHJpZ2dlcjsKLQl1OCBzc2lkX2xlbjsKLQkvKiBpbiBvcmRlciB0byBhbGlnbiAqLwotCXU4IHBhZGRpbmcxWzJdOwotCXU4IHNzaWRbSVdfRVNTSURfTUFYX1NJWkVdOwotCS8qIEJhbmQgdG8gc2NhbiAqLwotCXU4IGJhbmQ7Ci0JdTggdXNlX3NzaWRfbGlzdDsKLQl1OCBzY2FuX3RhZzsKLQl1OCBwYWRkaW5nMjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgYmFzaWNfc2Nhbl9jaGFubmVsX3BhcmFtcyB7Ci0JLyogRHVyYXRpb24gaW4gVFUgdG8gd2FpdCBmb3IgZnJhbWVzIG9uIGEgY2hhbm5lbCBmb3IgYWN0aXZlIHNjYW4gKi8KLQlfX2xlMzIgbWluX2R1cmF0aW9uOwotCV9fbGUzMiBtYXhfZHVyYXRpb247Ci0JX19sZTMyIGJzc2lkX2xzYjsKLQlfX2xlMTYgYnNzaWRfbXNiOwotCXU4IGVhcmx5X3Rlcm1pbmF0aW9uOwotCXU4IHR4X3Bvd2VyX2F0dDsKLQl1OCBjaGFubmVsOwotCS8qIEZXIGludGVybmFsIHVzZSBvbmx5ISAqLwotCXU4IGRmc19jYW5kaWRhdGU7Ci0JdTggYWN0aXZpdHlfZGV0ZWN0ZWQ7Ci0JdTggcGFkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCB3bDEyNzFfY21kX3NjYW4gewotCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7Ci0KLQlzdHJ1Y3QgYmFzaWNfc2Nhbl9wYXJhbXMgcGFyYW1zOwotCXN0cnVjdCBiYXNpY19zY2FuX2NoYW5uZWxfcGFyYW1zIGNoYW5uZWxzW1dMMTI3MV9TQ0FOX01BWF9DSEFOTkVMU107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHdsMTI3MV9jbWRfdHJpZ2dlcl9zY2FuX3RvIHsKLQlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgaGVhZGVyOwotCi0JX19sZTMyIHRpbWVvdXQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCB3bDEyNzFfY21kX3Rlc3RfaGVhZGVyIHsKIAl1OCBpZDsKIAl1OCBwYWRkaW5nWzNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBlbnVtIHdsMTI3MV9jaGFubmVsX3R1bmVfYmFuZHMgewogCVdMMTI3MV9DSEFOTkVMX1RVTkVfQkFORF8yXzQsCkBAIC00MzksMjUgKzM3MSwzMSBAQAogCiAJc3RydWN0IHdsMTI3MV9jbWRfdGVzdF9oZWFkZXIgdGVzdDsKIAotCXU4IHBhcmFtc1tXTDEyNzFfTlZTX0dFTkVSQUxfUEFSQU1TX1NJWkVdOwotCXM4IHJlc2VydmVkWzIzXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCXN0cnVjdCB3bDEyNzFfaW5pX2dlbmVyYWxfcGFyYW1zIGdlbmVyYWxfcGFyYW1zOwogCi0jZGVmaW5lIFdMMTI3MV9TVEFUX1JBRElPX1BBUkFNU181X1NJWkUgICAgMjkKLSNkZWZpbmUgV0wxMjcxX0RZTl9SQURJT19QQVJBTVNfNV9TSVpFICAgIDEwNAorCXU4IHNyX2RlYnVnX3RhYmxlW1dMMTI3MV9JTklfTUFYX1NNQVJUX1JFRkxFWF9QQVJBTV07CisJdTggc3Jfc2VuX25fcDsKKwl1OCBzcl9zZW5fbl9wX2dhaW47CisJdTggc3Jfc2VuX25ybjsKKwl1OCBzcl9zZW5fcHJuOworCXU4IHBhZGRpbmdbM107Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3Qgd2wxMjcxX3JhZGlvX3Bhcm1zX2NtZCB7CiAJc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKIAogCXN0cnVjdCB3bDEyNzFfY21kX3Rlc3RfaGVhZGVyIHRlc3Q7CiAKLQl1OCBzdGF0X3JhZGlvX3BhcmFtc1tXTDEyNzFfTlZTX1NUQVRfUkFESU9fUEFSQU1TX1NJWkVdOwotCXU4IHN0YXRfcmFkaW9fcGFyYW1zXzVbV0wxMjcxX1NUQVRfUkFESU9fUEFSQU1TXzVfU0laRV07CisJLyogU3RhdGljIHJhZGlvIHBhcmFtZXRlcnMgKi8KKwlzdHJ1Y3Qgd2wxMjcxX2luaV9iYW5kX3BhcmFtc18yIHN0YXRpY19wYXJhbXNfMjsKKwlzdHJ1Y3Qgd2wxMjcxX2luaV9iYW5kX3BhcmFtc181IHN0YXRpY19wYXJhbXNfNTsKIAotCXU4IGR5bl9yYWRpb19wYXJhbXNbV0wxMjcxX05WU19EWU5fUkFESU9fUEFSQU1TX1NJWkVdOwotCXU4IHJlc2VydmVkOwotCXU4IGR5bl9yYWRpb19wYXJhbXNfNVtXTDEyNzFfRFlOX1JBRElPX1BBUkFNU181X1NJWkVdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJLyogRHluYW1pYyByYWRpbyBwYXJhbWV0ZXJzICovCisJc3RydWN0IHdsMTI3MV9pbmlfZmVtX3BhcmFtc18yIGR5bl9wYXJhbXNfMjsKKwl1OCBwYWRkaW5nMjsKKwlzdHJ1Y3Qgd2wxMjcxX2luaV9mZW1fcGFyYW1zXzUgZHluX3BhcmFtc181OworCXU4IHBhZGRpbmczWzJdOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHdsMTI3MV9jbWRfY2FsX2NoYW5uZWxfdHVuZSB7CiAJc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKQEAgLTQ2OCw3ICs0MDYsNyBAQAogCXU4IGNoYW5uZWw7CiAKIAlfX2xlMTYgcmFkaW9fc3RhdHVzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3Qgd2wxMjcxX2NtZF9jYWxfdXBkYXRlX3JlZl9wb2ludCB7CiAJc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKQEAgLTQ3OSw3ICs0MTcsNyBAQAogCV9fbGUzMiByZWZfZGV0ZWN0b3I7CiAJdTggIHN1Yl9iYW5kOwogCXU4ICBwYWRkaW5nWzNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIE1BWF9UTFZfTEVOR1RIICAgICAgICAgNDAwCiAjZGVmaW5lCU1BWF9OVlNfVkVSU0lPTl9MRU5HVEggMTIKQEAgLTUwMSw3ICs0MzksNyBAQAogCiAJdTggIHN1Yl9iYW5kX21hc2s7CiAJdTggIHBhZGRpbmcyOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAKIC8qCkBAIC01MjksNiArNDY3LDYgQEAKIAl1OCAgdHlwZTsKIAogCXU4ICBwYWRkaW5nOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZW5kaWYgLyogX19XTDEyNzFfQ01EX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9jb25mLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NvbmYuaAppbmRleCBkMDQ2ZDA0Li4wNDM1ZmZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NvbmYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NvbmYuaApAQCAtODc0LDYgKzg3NCwxMyBAQAogCXU4IHBzX3BvbGxfdGhyZXNob2xkOwogCiAJLyoKKwkgKiBQUyBQb2xsIGZhaWx1cmUgcmVjb3ZlcnkgQUNUSVZFIHBlcmlvZCBsZW5ndGgKKwkgKgorCSAqIFJhbmdlOiB1MzIgKG1zKQorCSAqLworCXUzMiBwc19wb2xsX3JlY292ZXJ5X3BlcmlvZDsKKworCS8qCiAJICogQ29uZmlndXJhdGlvbiBvZiBzaWduYWwgYXZlcmFnZSB3ZWlnaHRzLgogCSAqLwogCXN0cnVjdCBjb25mX3NpZ193ZWlnaHRzIHNpZ193ZWlnaHRzOwpAQCAtOTQ4LDE0ICs5NTUsNiBAQAogCXU4IGZlbTsKIH07CiAKLXN0cnVjdCBjb25mX2luaXRfc2V0dGluZ3MgewotCS8qCi0JICogQ29uZmlndXJlIHJhZGlvIHBhcmFtZXRlcnMuCi0JICovCi0Jc3RydWN0IGNvbmZfcmFkaW9fcGFybXMgcmFkaW9wYXJhbTsKLQotfTsKLQogc3RydWN0IGNvbmZfaXRyaW1fc2V0dGluZ3MgewogCS8qIGVuYWJsZSBkY28gaXRyaW0gKi8KIAl1OCBlbmFibGU7CkBAIC0xMDIyLDcgKzEwMjEsNiBAQAogCXN0cnVjdCBjb25mX3J4X3NldHRpbmdzIHJ4OwogCXN0cnVjdCBjb25mX3R4X3NldHRpbmdzIHR4OwogCXN0cnVjdCBjb25mX2Nvbm5fc2V0dGluZ3MgY29ubjsKLQlzdHJ1Y3QgY29uZl9pbml0X3NldHRpbmdzIGluaXQ7CiAJc3RydWN0IGNvbmZfaXRyaW1fc2V0dGluZ3MgaXRyaW07CiAJc3RydWN0IGNvbmZfcG1fY29uZmlnX3NldHRpbmdzIHBtX2NvbmZpZzsKIAlzdHJ1Y3QgY29uZl9yb2FtX3RyaWdnZXJfc2V0dGluZ3Mgcm9hbV90cmlnZ2VyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ldmVudC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ldmVudC5jCmluZGV4IGNmMzdhYTYuLjI1Y2UyY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfZXZlbnQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2V2ZW50LmMKQEAgLTI2LDM2ICsyNiw2NCBAQAogI2luY2x1ZGUgIndsMTI3MV9pby5oIgogI2luY2x1ZGUgIndsMTI3MV9ldmVudC5oIgogI2luY2x1ZGUgIndsMTI3MV9wcy5oIgorI2luY2x1ZGUgIndsMTI3MV9zY2FuLmgiCiAjaW5jbHVkZSAid2wxMnh4XzgwMjExLmgiCiAKLXN0YXRpYyBpbnQgd2wxMjcxX2V2ZW50X3NjYW5fY29tcGxldGUoc3RydWN0IHdsMTI3MSAqd2wsCi0JCQkJICAgICAgc3RydWN0IGV2ZW50X21haWxib3ggKm1ib3gpCit2b2lkIHdsMTI3MV9wc3BvbGxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jd2wxMjcxX2RlYnVnKERFQlVHX0VWRU5ULCAic3RhdHVzOiAweCV4IiwKLQkJICAgICBtYm94LT5zY2hlZHVsZWRfc2Nhbl9zdGF0dXMpOworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrOworCXN0cnVjdCB3bDEyNzEgKndsOwogCi0JaWYgKHRlc3RfYml0KFdMMTI3MV9GTEFHX1NDQU5OSU5HLCAmd2wtPmZsYWdzKSkgewotCQlpZiAod2wtPnNjYW4uc3RhdGUgPT0gV0wxMjcxX1NDQU5fQkFORF9EVUFMKSB7Ci0JCQkvKiAyLjQgR0h6IGJhbmQgc2Nhbm5lZCwgc2NhbiA1IEdIeiBiYW5kLCBwcmV0ZW5kCi0JCQkgKiB0byB0aGUgd2wxMjcxX2NtZF9zY2FuIGZ1bmN0aW9uIHRoYXQgd2UgYXJlIG5vdAotCQkJICogc2Nhbm5pbmcgYXMgaXQgY2hlY2tzIHRoYXQuCi0JCQkgKi8KLQkJCWNsZWFyX2JpdChXTDEyNzFfRkxBR19TQ0FOTklORywgJndsLT5mbGFncyk7Ci0JCQkvKiBGSVhNRTogaWUgbWlzc2luZyEgKi8KLQkJCXdsMTI3MV9jbWRfc2Nhbih3bCwgd2wtPnNjYW4uc3NpZCwgd2wtPnNjYW4uc3NpZF9sZW4sCi0JCQkJCQlOVUxMLCAwLAotCQkJCQkJd2wtPnNjYW4uYWN0aXZlLAotCQkJCQkJd2wtPnNjYW4uaGlnaF9wcmlvLAotCQkJCQkJV0wxMjcxX1NDQU5fQkFORF81X0dIWiwKLQkJCQkJCXdsLT5zY2FuLnByb2JlX3JlcXVlc3RzKTsKLQkJfSBlbHNlIHsKLQkJCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKLQkJCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZCh3bC0+aHcsIGZhbHNlKTsKLQkJCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0JCQljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfU0NBTk5JTkcsICZ3bC0+ZmxhZ3MpOwotCQl9CisJZHdvcmsgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CisJd2wgPSBjb250YWluZXJfb2YoZHdvcmssIHN0cnVjdCB3bDEyNzEsIHBzcG9sbF93b3JrKTsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19FVkVOVCwgInBzcG9sbCB3b3JrIik7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV0wxMjcxX0ZMQUdfUFNQT0xMX0ZBSUxVUkUsICZ3bC0+ZmxhZ3MpKQorCQlnb3RvIG91dDsKKworCWlmICghdGVzdF9iaXQoV0wxMjcxX0ZMQUdfU1RBX0FTU09DSUFURUQsICZ3bC0+ZmxhZ3MpKQorCQlnb3RvIG91dDsKKworCS8qCisJICogaWYgd2UgZW5kIHVwIGhlcmUsIHRoZW4gd2Ugd2VyZSBpbiBwb3dlcnNhdmUgd2hlbiB0aGUgcHNwb2xsCisJICogZGVsaXZlcnkgZmFpbHVyZSBvY2N1cnJlZCwgYW5kIG5vLW9uZSBjaGFuZ2VkIHN0YXRlIHNpbmNlLCBzbworCSAqIHdlIHNob3VsZCBnbyBiYWNrIHRvIHBvd2Vyc2F2ZS4KKwkgKi8KKwl3bDEyNzFfcHNfc2V0X21vZGUod2wsIFNUQVRJT05fUE9XRVJfU0FWRV9NT0RFLCB0cnVlKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKK307CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9ldmVudF9wc3BvbGxfZGVsaXZlcnlfZmFpbChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgZGVsYXkgPSB3bC0+Y29uZi5jb25uLnBzX3BvbGxfcmVjb3ZlcnlfcGVyaW9kOworCWludCByZXQ7CisKKwl3bC0+cHNfcG9sbF9mYWlsdXJlcysrOworCWlmICh3bC0+cHNfcG9sbF9mYWlsdXJlcyA9PSAxKQorCQl3bDEyNzFfaW5mbygiQVAgd2l0aCBkeXNmdW5jdGlvbmFsIHBzLXBvbGwsICIKKwkJCSAgICAidHJ5aW5nIHRvIHdvcmsgYXJvdW5kIGl0LiIpOworCisJLyogZm9yY2UgYWN0aXZlIG1vZGUgcmVjZWl2ZSBkYXRhIGZyb20gdGhlIEFQICovCisJaWYgKHRlc3RfYml0KFdMMTI3MV9GTEFHX1BTTSwgJndsLT5mbGFncykpIHsKKwkJcmV0ID0gd2wxMjcxX3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX0FDVElWRV9NT0RFLCB0cnVlKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm47CisJCXNldF9iaXQoV0wxMjcxX0ZMQUdfUFNQT0xMX0ZBSUxVUkUsICZ3bC0+ZmxhZ3MpOworCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHdsLT5odywgJndsLT5wc3BvbGxfd29yaywKKwkJCQkJICAgICBtc2Vjc190b19qaWZmaWVzKGRlbGF5KSk7CiAJfQotCXJldHVybiAwOworCisJLyoKKwkgKiBJZiBhbHJlYWR5IGluIGFjdGl2ZSBtb2RlLCBsZXRzIHdlIHNob3VsZCBiZSBnZXR0aW5nIGRhdGEgZnJvbQorCSAqIHRoZSBBUCByaWdodCBhd2F5LiBJZiB3ZSBlbnRlciBQU00gdG9vIGZhc3QgYWZ0ZXIgdGhpcywgYW5kIGRhdGEKKwkgKiByZW1haW5zIG9uIHRoZSBBUCwgd2Ugd2lsbCBnZXQgYW5vdGhlciBldmVudCBsaWtlIHRoaXMsIGFuZCB3ZSdsbAorCSAqIGdvIGludG8gYWN0aXZlIG9uY2UgbW9yZS4KKwkgKi8KIH0KIAogc3RhdGljIGludCB3bDEyNzFfZXZlbnRfcHNfcmVwb3J0KHN0cnVjdCB3bDEyNzEgKndsLApAQCAtMTYzLDkgKzE5MSwxOSBAQAogCXdsMTI3MV9kZWJ1ZyhERUJVR19FVkVOVCwgInZlY3RvcjogMHgleCIsIHZlY3Rvcik7CiAKIAlpZiAodmVjdG9yICYgU0NBTl9DT01QTEVURV9FVkVOVF9JRCkgewotCQlyZXQgPSB3bDEyNzFfZXZlbnRfc2Nhbl9jb21wbGV0ZSh3bCwgbWJveCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKKwkJd2wxMjcxX2RlYnVnKERFQlVHX0VWRU5ULCAic3RhdHVzOiAweCV4IiwKKwkJCSAgICAgbWJveC0+c2NoZWR1bGVkX3NjYW5fc3RhdHVzKTsKKworCQl3bDEyNzFfc2Nhbl9zdG0od2wpOworCX0KKworCS8qIGRpc2FibGUgZHluYW1pYyBQUyB3aGVuIHJlcXVlc3RlZCBieSB0aGUgZmlybXdhcmUgKi8KKwlpZiAodmVjdG9yICYgU09GVF9HRU1JTklfU0VOU0VfRVZFTlRfSUQgJiYKKwkgICAgd2wtPmJzc190eXBlID09IEJTU19UWVBFX1NUQV9CU1MpIHsKKwkJaWYgKG1ib3gtPnNvZnRfZ2VtaW5pX3NlbnNlX2luZm8pCisJCQlpZWVlODAyMTFfZGlzYWJsZV9keW5fcHMod2wtPnZpZik7CisJCWVsc2UKKwkJCWllZWU4MDIxMV9lbmFibGVfZHluX3BzKHdsLT52aWYpOwogCX0KIAogCS8qCkBAIC0xOTEsNiArMjI5LDkgQEAKIAkJCXJldHVybiByZXQ7CiAJfQogCisJaWYgKHZlY3RvciAmIFBTUE9MTF9ERUxJVkVSWV9GQUlMVVJFX0VWRU5UX0lEKQorCQl3bDEyNzFfZXZlbnRfcHNwb2xsX2RlbGl2ZXJ5X2ZhaWwod2wpOworCiAJaWYgKHZlY3RvciAmIFJTU0lfU05SX1RSSUdHRVJfMF9FVkVOVF9JRCkgewogCQl3bDEyNzFfZGVidWcoREVCVUdfRVZFTlQsICJSU1NJX1NOUl9UUklHR0VSXzBfRVZFTlQiKTsKIAkJaWYgKHdsLT52aWYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2V2ZW50LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2V2ZW50LmgKaW5kZXggNTgzNzEwMC4uZTQ3NTE2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ldmVudC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfZXZlbnQuaApAQCAtODUsNyArODUsNyBAQAogCV9fbGUzMiByZXBvcnRfMTsKIAlfX2xlMzIgcmVwb3J0XzI7CiAJX19sZTMyIHJlcG9ydF8zOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIE5VTV9PRl9SU1NJX1NOUl9UUklHR0VSUyA4CiAKQEAgLTExNiwxMCArMTE2LDExIEBACiAJdTggcHNfc3RhdHVzOwogCiAJdTggcmVzZXJ2ZWRfNVsyOV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIGludCB3bDEyNzFfZXZlbnRfdW5tYXNrKHN0cnVjdCB3bDEyNzEgKndsKTsKIHZvaWQgd2wxMjcxX2V2ZW50X21ib3hfY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsKTsKIGludCB3bDEyNzFfZXZlbnRfaGFuZGxlKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBtYm94KTsKK3ZvaWQgd2wxMjcxX3BzcG9sbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9pbmkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfaW5pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMxMzA0NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfaW5pLmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX1dMMTI3MV9JTklfSF9fCisjZGVmaW5lIF9fV0wxMjcxX0lOSV9IX18KKworI2RlZmluZSBXTDEyNzFfSU5JX01BWF9TTUFSVF9SRUZMRVhfUEFSQU0gMTYKKworc3RydWN0IHdsMTI3MV9pbmlfZ2VuZXJhbF9wYXJhbXMgeworCXU4IHJlZl9jbG9jazsKKwl1OCBzZXR0bGluZ190aW1lOworCXU4IGNsa192YWxpZF9vbl93YWtldXA7CisJdTggZGMyZGNfbW9kZTsKKwl1OCBkdWFsX21vZGVfc2VsZWN0OworCXU4IHR4X2JpcF9mZW1fYXV0b19kZXRlY3Q7CisJdTggdHhfYmlwX2ZlbV9tYW51ZmFjdHVyZXI7CisJdTggZ2VuZXJhbF9zZXR0aW5nczsKKwl1OCBzcl9zdGF0ZTsKKwl1OCBzcmYxW1dMMTI3MV9JTklfTUFYX1NNQVJUX1JFRkxFWF9QQVJBTV07CisJdTggc3JmMltXTDEyNzFfSU5JX01BWF9TTUFSVF9SRUZMRVhfUEFSQU1dOworCXU4IHNyZjNbV0wxMjcxX0lOSV9NQVhfU01BUlRfUkVGTEVYX1BBUkFNXTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgV0wxMjcxX0lOSV9SU1NJX1BST0NFU1NfQ09NUEVOU19TSVpFIDE1CisKK3N0cnVjdCB3bDEyNzFfaW5pX2JhbmRfcGFyYW1zXzIgeworCXU4IHJ4X3RyYWNlX2luc2VydGlvbl9sb3NzOworCXU4IHR4X3RyYWNlX2xvc3M7CisJdTggcnhfcnNzaV9wcm9jZXNzX2NvbXBlbnNbV0wxMjcxX0lOSV9SU1NJX1BST0NFU1NfQ09NUEVOU19TSVpFXTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgV0wxMjcxX0lOSV9SQVRFX0dST1VQX0NPVU5UIDYKKyNkZWZpbmUgV0wxMjcxX0lOSV9DSEFOTkVMX0NPVU5UXzIgMTQKKworc3RydWN0IHdsMTI3MV9pbmlfZmVtX3BhcmFtc18yIHsKKwlfX2xlMTYgdHhfYmlwX3JlZl9wZF92b2x0YWdlOworCXU4IHR4X2JpcF9yZWZfcG93ZXI7CisJdTggdHhfYmlwX3JlZl9vZmZzZXQ7CisJdTggdHhfcGVyX3JhdGVfcHdyX2xpbWl0c19ub3JtYWxbV0wxMjcxX0lOSV9SQVRFX0dST1VQX0NPVU5UXTsKKwl1OCB0eF9wZXJfcmF0ZV9wd3JfbGltaXRzX2RlZ3JhZGVkW1dMMTI3MV9JTklfUkFURV9HUk9VUF9DT1VOVF07CisJdTggdHhfcGVyX3JhdGVfcHdyX2xpbWl0c19leHRyZW1lW1dMMTI3MV9JTklfUkFURV9HUk9VUF9DT1VOVF07CisJdTggdHhfcGVyX2NoYW5fcHdyX2xpbWl0c18xMWJbV0wxMjcxX0lOSV9DSEFOTkVMX0NPVU5UXzJdOworCXU4IHR4X3Blcl9jaGFuX3B3cl9saW1pdHNfb2ZkbVtXTDEyNzFfSU5JX0NIQU5ORUxfQ09VTlRfMl07CisJdTggdHhfcGRfdnNfcmF0ZV9vZmZzZXRzW1dMMTI3MV9JTklfUkFURV9HUk9VUF9DT1VOVF07CisJdTggdHhfaWJpYXNbV0wxMjcxX0lOSV9SQVRFX0dST1VQX0NPVU5UXTsKKwl1OCByeF9mZW1faW5zZXJ0aW9uX2xvc3M7CisJdTggZGVncmFkZWRfbG93X3RvX25vcm1hbF90aHI7CisJdTggbm9ybWFsX3RvX2RlZ3JhZGVkX2hpZ2hfdGhyOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBXTDEyNzFfSU5JX0NIQU5ORUxfQ09VTlRfNSAzNQorI2RlZmluZSBXTDEyNzFfSU5JX1NVQl9CQU5EX0NPVU5UXzUgNworCitzdHJ1Y3Qgd2wxMjcxX2luaV9iYW5kX3BhcmFtc181IHsKKwl1OCByeF90cmFjZV9pbnNlcnRpb25fbG9zc1tXTDEyNzFfSU5JX1NVQl9CQU5EX0NPVU5UXzVdOworCXU4IHR4X3RyYWNlX2xvc3NbV0wxMjcxX0lOSV9TVUJfQkFORF9DT1VOVF81XTsKKwl1OCByeF9yc3NpX3Byb2Nlc3NfY29tcGVuc1tXTDEyNzFfSU5JX1JTU0lfUFJPQ0VTU19DT01QRU5TX1NJWkVdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHdsMTI3MV9pbmlfZmVtX3BhcmFtc181IHsKKwlfX2xlMTYgdHhfYmlwX3JlZl9wZF92b2x0YWdlW1dMMTI3MV9JTklfU1VCX0JBTkRfQ09VTlRfNV07CisJdTggdHhfYmlwX3JlZl9wb3dlcltXTDEyNzFfSU5JX1NVQl9CQU5EX0NPVU5UXzVdOworCXU4IHR4X2JpcF9yZWZfb2Zmc2V0W1dMMTI3MV9JTklfU1VCX0JBTkRfQ09VTlRfNV07CisJdTggdHhfcGVyX3JhdGVfcHdyX2xpbWl0c19ub3JtYWxbV0wxMjcxX0lOSV9SQVRFX0dST1VQX0NPVU5UXTsKKwl1OCB0eF9wZXJfcmF0ZV9wd3JfbGltaXRzX2RlZ3JhZGVkW1dMMTI3MV9JTklfUkFURV9HUk9VUF9DT1VOVF07CisJdTggdHhfcGVyX3JhdGVfcHdyX2xpbWl0c19leHRyZW1lW1dMMTI3MV9JTklfUkFURV9HUk9VUF9DT1VOVF07CisJdTggdHhfcGVyX2NoYW5fcHdyX2xpbWl0c19vZmRtW1dMMTI3MV9JTklfQ0hBTk5FTF9DT1VOVF81XTsKKwl1OCB0eF9wZF92c19yYXRlX29mZnNldHNbV0wxMjcxX0lOSV9SQVRFX0dST1VQX0NPVU5UXTsKKwl1OCB0eF9pYmlhc1tXTDEyNzFfSU5JX1JBVEVfR1JPVVBfQ09VTlRdOworCXU4IHJ4X2ZlbV9pbnNlcnRpb25fbG9zc1tXTDEyNzFfSU5JX1NVQl9CQU5EX0NPVU5UXzVdOworCXU4IGRlZ3JhZGVkX2xvd190b19ub3JtYWxfdGhyOworCXU4IG5vcm1hbF90b19kZWdyYWRlZF9oaWdoX3RocjsKK30gX19wYWNrZWQ7CisKKworLyogTlZTIGRhdGEgc3RydWN0dXJlICovCisjZGVmaW5lIFdMMTI3MV9JTklfTlZTX1NFQ1RJT05fU0laRQkJICAgICA0NjgKKyNkZWZpbmUgV0wxMjcxX0lOSV9GRU1fTU9EVUxFX0NPVU5UICAgICAgICAgICAgICAgICAgMgorCisjZGVmaW5lIFdMMTI3MV9JTklfTEVHQUNZX05WU19GSUxFX1NJWkUgICAgICAgICAgICAgIDgwMAorCitzdHJ1Y3Qgd2wxMjcxX252c19maWxlIHsKKwkvKiBOVlMgc2VjdGlvbiAqLworCXU4IG52c1tXTDEyNzFfSU5JX05WU19TRUNUSU9OX1NJWkVdOworCisJLyogSU5JIHNlY3Rpb24gKi8KKwlzdHJ1Y3Qgd2wxMjcxX2luaV9nZW5lcmFsX3BhcmFtcyBnZW5lcmFsX3BhcmFtczsKKwl1OCBwYWRkaW5nMTsKKwlzdHJ1Y3Qgd2wxMjcxX2luaV9iYW5kX3BhcmFtc18yIHN0YXRfcmFkaW9fcGFyYW1zXzI7CisJdTggcGFkZGluZzI7CisJc3RydWN0IHsKKwkJc3RydWN0IHdsMTI3MV9pbmlfZmVtX3BhcmFtc18yIHBhcmFtczsKKwkJdTggcGFkZGluZzsKKwl9IGR5bl9yYWRpb19wYXJhbXNfMltXTDEyNzFfSU5JX0ZFTV9NT0RVTEVfQ09VTlRdOworCXN0cnVjdCB3bDEyNzFfaW5pX2JhbmRfcGFyYW1zXzUgc3RhdF9yYWRpb19wYXJhbXNfNTsKKwl1OCBwYWRkaW5nMzsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3Qgd2wxMjcxX2luaV9mZW1fcGFyYW1zXzUgcGFyYW1zOworCQl1OCBwYWRkaW5nOworCX0gZHluX3JhZGlvX3BhcmFtc181W1dMMTI3MV9JTklfRkVNX01PRFVMRV9DT1VOVF07Cit9IF9fcGFja2VkOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9tYWluLmMKaW5kZXggYjdkOTEzNy4uOWQ2OGYwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9tYWluLmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKQEAgLTQ1LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJ3bDEyNzFfY21kLmgiCiAjaW5jbHVkZSAid2wxMjcxX2Jvb3QuaCIKICNpbmNsdWRlICJ3bDEyNzFfdGVzdG1vZGUuaCIKKyNpbmNsdWRlICJ3bDEyNzFfc2Nhbi5oIgogCiAjZGVmaW5lIFdMMTI3MV9CT09UX1JFVFJJRVMgMwogCkBAIC01NSw3ICs1NSw3IEBACiAJCQlbQ09ORl9TR19IVjNfTUFYX09WRVJSSURFXSAgICAgICAgICAgICAgICAgID0gMCwKIAkJCVtDT05GX1NHX0JUX05GU19TQU1QTEVfSU5URVJWQUxdICAgICAgICAgICAgPSA0MDAsCiAJCQlbQ09ORl9TR19CVF9MT0FEX1JBVElPXSAgICAgICAgICAgICAgICAgICAgID0gNTAsCi0JCQlbQ09ORl9TR19BVVRPX1BTX01PREVdICAgICAgICAgICAgICAgICAgICAgID0gMCwKKwkJCVtDT05GX1NHX0FVVE9fUFNfTU9ERV0gICAgICAgICAgICAgICAgICAgICAgPSAxLAogCQkJW0NPTkZfU0dfQVVUT19TQ0FOX1BST0JFX1JFUV0gICAgICAgICAgICAgICA9IDE3MCwKIAkJCVtDT05GX1NHX0FDVElWRV9TQ0FOX0RVUkFUSU9OX0ZBQ1RPUl9IVjNdICAgPSA1MCwKIAkJCVtDT05GX1NHX0FOVEVOTkFfQ09ORklHVVJBVElPTl0gICAgICAgICAgICAgPSAwLApAQCAtMjM0LDE4ICsyMzQsMTQgQEAKIAkJLmJlYWNvbl9yeF90aW1lb3V0ICAgICAgICAgICA9IDEwMDAwLAogCQkuYnJvYWRjYXN0X3RpbWVvdXQgICAgICAgICAgID0gMjAwMDAsCiAJCS5yeF9icm9hZGNhc3RfaW5fcHMgICAgICAgICAgPSAxLAotCQkucHNfcG9sbF90aHJlc2hvbGQgICAgICAgICAgID0gMjAsCisJCS5wc19wb2xsX3RocmVzaG9sZCAgICAgICAgICAgPSAxMCwKKwkJLnBzX3BvbGxfcmVjb3ZlcnlfcGVyaW9kICAgICA9IDcwMCwKIAkJLmJldF9lbmFibGUgICAgICAgICAgICAgICAgICA9IENPTkZfQkVUX01PREVfRU5BQkxFLAogCQkuYmV0X21heF9jb25zZWN1dGl2ZSAgICAgICAgID0gMTAsCiAJCS5wc21fZW50cnlfcmV0cmllcyAgICAgICAgICAgPSAzLAogCQkua2VlcF9hbGl2ZV9pbnRlcnZhbCAgICAgICAgID0gNTUwMDAsCiAJCS5tYXhfbGlzdGVuX2ludGVydmFsICAgICAgICAgPSAyMCwKIAl9LAotCS5pbml0ID0gewotCQkucmFkaW9wYXJhbSA9IHsKLQkJCS5mZW0gICAgICAgICAgICAgICAgID0gMSwKLQkJfQotCX0sCiAJLml0cmltID0gewogCQkuZW5hYmxlID0gZmFsc2UsCiAJCS50aW1lb3V0ID0gNTAwMDAsCkBAIC01NjYsMTQgKzU2MiwyMSBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmIChmdy0+c2l6ZSAhPSBzaXplb2Yoc3RydWN0IHdsMTI3MV9udnNfZmlsZSkpIHsKKwkvKgorCSAqIEZJWE1FOiB0aGUgTEVHQUNZIE5WUyBpbWFnZSBzdXBwb3J0IChOVlMncyBtaXNzaW5nIHRoZSA1R0h6IGJhbmQKKwkgKiBjb25maWd1cmF0aW9ucykgY2FuIGJlIHJlbW92ZWQgd2hlbiB0aG9zZSBOVlMgZmlsZXMgc3RvcCBmbG9hdGluZworCSAqIGFyb3VuZC4KKwkgKi8KKwlpZiAoZnctPnNpemUgIT0gc2l6ZW9mKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUpICYmCisJICAgIChmdy0+c2l6ZSAhPSBXTDEyNzFfSU5JX0xFR0FDWV9OVlNfRklMRV9TSVpFIHx8CisJICAgICB3bDEyNzFfMTFhX2VuYWJsZWQoKSkpIHsKIAkJd2wxMjcxX2Vycm9yKCJudnMgc2l6ZSBpcyBub3QgYXMgZXhwZWN0ZWQ6ICV6dSAhPSAlenUiLAogCQkJICAgICBmdy0+c2l6ZSwgc2l6ZW9mKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUpKTsKIAkJcmV0ID0gLUVJTFNFUTsKIAkJZ290byBvdXQ7CiAJfQogCi0Jd2wtPm52cyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUpLCBHRlBfS0VSTkVMKTsKKwl3bC0+bnZzID0ga21lbWR1cChmdy0+ZGF0YSwgc2l6ZW9mKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUpLCBHRlBfS0VSTkVMKTsKIAogCWlmICghd2wtPm52cykgewogCQl3bDEyNzFfZXJyb3IoImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBudnMgZmlsZSIpOwpAQCAtNTgxLDggKzU4NCw2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCW1lbWNweSh3bC0+bnZzLCBmdy0+ZGF0YSwgc2l6ZW9mKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUpKTsKLQogb3V0OgogCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCkBAIC04MTEsOTMgKzgxMiw2IEBACiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAotc3RhdGljIGludCB3bDEyNzFfZGV2X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm1lLCB1bnNpZ25lZCBsb25nIHdoYXQsCi0JCQkgICAgIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7Ci0Jc3RydWN0IHdpcGh5ICp3aXBoeTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKLQlzdHJ1Y3Qgd2wxMjcxICp3bDsKLQlzdHJ1Y3Qgd2wxMjcxICp3bF90ZW1wOwotCXN0cnVjdCBpbl9kZXZpY2UgKmlkZXY7Ci0Jc3RydWN0IGluX2lmYWRkciAqaWZhID0gYXJnOwotCWludCByZXQgPSAwOwotCi0JLyogRklYTUU6IHRoaXMgdWdseSBmdW5jdGlvbiBzaG91bGQgcHJvYmFibHkgYmUgaW1wbGVtZW50ZWQgaW4gdGhlCi0JICogbWFjODAyMTEsIGFuZCBoZXJlIHNob3VsZCBvbmx5IGJlIGEgc2ltcGxlIGNhbGxiYWNrIGhhbmRsaW5nIGFjdHVhbAotCSAqIHNldHRpbmcgb2YgdGhlIGZpbHRlcnMuIE5vdyB3ZSBuZWVkIHRvIGRpZyB1cCByZWZlcmVuY2VzIHRvCi0JICogdmFyaW91cyBzdHJ1Y3R1cmVzIHRvIGdhaW4gYWNjZXNzIHRvIHdoYXQgd2UgbmVlZC4KLQkgKiBBbHNvLCBiZWNhdXNlIG9mIHRoaXMsIHRoZXJlIGlzIG5vICJpbml0aWFsIiBzZXR0aW5nIG9mIHRoZSBmaWx0ZXIKLQkgKiBpbiAib3Bfc3RhcnQiLCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gZGlnIHVwIHN0cnVjdCBuZXRfZGV2aWNlCi0JICogdGhlcmUgLSB0aGUgZmlsdGVyIHdpbGwgYmUgc2V0IHVwb24gZmlyc3QgY2hhbmdlIG9mIHRoZSBpbnRlcmZhY2UKLQkgKiBJUCBhZGRyZXNzLiAqLwotCi0JZGV2ID0gaWZhLT5pZmFfZGV2LT5kZXY7Ci0KLQl3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOwotCWlmICh3ZGV2ID09IE5VTEwpCi0JCXJldHVybiBOT1RJRllfRE9ORTsKLQotCXdpcGh5ID0gd2Rldi0+d2lwaHk7Ci0JaWYgKHdpcGh5ID09IE5VTEwpCi0JCXJldHVybiBOT1RJRllfRE9ORTsKLQotCWh3ID0gd2lwaHlfcHJpdih3aXBoeSk7Ci0JaWYgKGh3ID09IE5VTEwpCi0JCXJldHVybiBOT1RJRllfRE9ORTsKLQotCS8qIENoZWNrIHRoYXQgdGhlIGludGVyZmFjZSBpcyBvbmUgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLiAqLwotCXdsX3RlbXAgPSBody0+cHJpdjsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdsLCAmd2xfbGlzdCwgbGlzdCkgewotCQlpZiAod2wgPT0gd2xfdGVtcCkKLQkJCWJyZWFrOwotCX0KLQlpZiAod2wgIT0gd2xfdGVtcCkKLQkJcmV0dXJuIE5PVElGWV9ET05FOwotCi0JLyogR2V0IHRoZSBpbnRlcmZhY2UgSVAgYWRkcmVzcyBmb3IgdGhlIGRldmljZS4gImlmYSIgd2lsbCBiZWNvbWUKLQkgICBOVUxMIGlmOgotCSAgICAgLSB0aGVyZSBpcyBubyBJUFY0IHByb3RvY29sIGFkZHJlc3MgY29uZmlndXJlZAotCSAgICAgLSB0aGVyZSBhcmUgbXVsdGlwbGUgKHZpcnR1YWwpIElQVjQgYWRkcmVzc2VzIGNvbmZpZ3VyZWQKLQkgICBXaGVuICJpZmEiIGlzIE5VTEwsIGZpbHRlcmluZyB3aWxsIGJlIGRpc2FibGVkLgotCSovCi0JaWZhID0gTlVMTDsKLQlpZGV2ID0gZGV2LT5pcF9wdHI7Ci0JaWYgKGlkZXYpCi0JCWlmYSA9IGlkZXYtPmlmYV9saXN0OwotCi0JaWYgKGlmYSAmJiBpZmEtPmlmYV9uZXh0KQotCQlpZmEgPSBOVUxMOwotCi0JbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQotCWlmICh3bC0+c3RhdGUgPT0gV0wxMjcxX1NUQVRFX09GRikKLQkJZ290byBvdXQ7Ci0KLQlyZXQgPSB3bDEyNzFfcHNfZWxwX3dha2V1cCh3bCwgZmFsc2UpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQlpZiAoaWZhKQotCQlyZXQgPSB3bDEyNzFfYWN4X2FycF9pcF9maWx0ZXIod2wsIHRydWUsCi0JCQkJCSAgICAgICAodTggKikmaWZhLT5pZmFfYWRkcmVzcywKLQkJCQkJICAgICAgIEFDWF9JUFY0X1ZFUlNJT04pOwotCWVsc2UKLQkJcmV0ID0gd2wxMjcxX2FjeF9hcnBfaXBfZmlsdGVyKHdsLCBmYWxzZSwgTlVMTCwKLQkJCQkJICAgICAgIEFDWF9JUFY0X1ZFUlNJT04pOwotCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOwotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotCi0JcmV0dXJuIE5PVElGWV9PSzsKLX0KLQotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB3bDEyNzFfZGV2X25vdGlmaWVyID0gewotCS5ub3RpZmllcl9jYWxsID0gd2wxMjcxX2Rldl9ub3RpZnksCi19OwotCi0KIHN0YXRpYyBpbnQgd2wxMjcxX29wX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIHN0YXJ0Iik7CkBAIC05MjUsNiArODM5LDcgQEAKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCB3bDEyNzEgKndsID0gaHctPnByaXY7CisJc3RydWN0IHdpcGh5ICp3aXBoeSA9IGh3LT53aXBoeTsKIAlpbnQgcmV0cmllcyA9IFdMMTI3MV9CT09UX1JFVFJJRVM7CiAJaW50IHJldCA9IDA7CiAKQEAgLTk3OCw2ICs4OTMsMTIgQEAKIAogCQl3bC0+c3RhdGUgPSBXTDEyNzFfU1RBVEVfT047CiAJCXdsMTI3MV9pbmZvKCJmaXJtd2FyZSBib290ZWQgKCVzKSIsIHdsLT5jaGlwLmZ3X3Zlcik7CisKKwkJLyogdXBkYXRlIGh3L2Z3IHZlcnNpb24gaW5mbyBpbiB3aXBoeSBzdHJ1Y3QgKi8KKwkJd2lwaHktPmh3X3ZlcnNpb24gPSB3bC0+Y2hpcC5pZDsKKwkJc3RybmNweSh3aXBoeS0+ZndfdmVyc2lvbiwgd2wtPmNoaXAuZndfdmVyLAorCQkJc2l6ZW9mKHdpcGh5LT5md192ZXJzaW9uKSk7CisKIAkJZ290byBvdXQ7CiAKIGlycV9kaXNhYmxlOgpAQCAtMTAwMSwxMCArOTIyLDggQEAKIG91dDoKIAltdXRleF91bmxvY2soJndsLT5tdXRleCk7CiAKLQlpZiAoIXJldCkgeworCWlmICghcmV0KQogCQlsaXN0X2FkZCgmd2wtPmxpc3QsICZ3bF9saXN0KTsKLQkJcmVnaXN0ZXJfaW5ldGFkZHJfbm90aWZpZXIoJndsMTI3MV9kZXZfbm90aWZpZXIpOwotCX0KIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMDE1LDggKzkzNCw2IEBACiAJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKIAlpbnQgaTsKIAotCXVucmVnaXN0ZXJfaW5ldGFkZHJfbm90aWZpZXIoJndsMTI3MV9kZXZfbm90aWZpZXIpOwotCiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKIAl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSByZW1vdmUgaW50ZXJmYWNlIik7CiAKQEAgLTEwMjYsMTAgKzk0MywxNyBAQAogCiAJV0FSTl9PTih3bC0+c3RhdGUgIT0gV0wxMjcxX1NUQVRFX09OKTsKIAotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoV0wxMjcxX0ZMQUdfU0NBTk5JTkcsICZ3bC0+ZmxhZ3MpKSB7CisJLyogZW5hYmxlIGR5biBwcyBqdXN0IGluIGNhc2UgKGlmIGxlZnQgb24gZHVlIHRvIGZ3IGNyYXNoIGV0YykgKi8KKwlpZiAod2wtPmJzc190eXBlID09IEJTU19UWVBFX1NUQV9CU1MpCisJCWllZWU4MDIxMV9lbmFibGVfZHluX3BzKHdsLT52aWYpOworCisJaWYgKHdsLT5zY2FuLnN0YXRlICE9IFdMMTI3MV9TQ0FOX1NUQVRFX0lETEUpIHsKIAkJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogCQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQod2wtPmh3LCB0cnVlKTsKIAkJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKwkJd2wtPnNjYW4uc3RhdGUgPSBXTDEyNzFfU0NBTl9TVEFURV9JRExFOworCQlrZnJlZSh3bC0+c2Nhbi5zY2FubmVkX2NoKTsKKwkJd2wtPnNjYW4uc2Nhbm5lZF9jaCA9IE5VTEw7CiAJfQogCiAJd2wtPnN0YXRlID0gV0wxMjcxX1NUQVRFX09GRjsKQEAgLTEwNDAsMTEgKzk2NCwxMiBAQAogCiAJY2FuY2VsX3dvcmtfc3luYygmd2wtPmlycV93b3JrKTsKIAljYW5jZWxfd29ya19zeW5jKCZ3bC0+dHhfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ3bC0+cHNwb2xsX3dvcmspOwogCiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKIAogCS8qIGxldCdzIG5vdGlmeSBNQUM4MDIxMSBhYm91dCB0aGUgcmVtYWluaW5nIHBlbmRpbmcgVFggZnJhbWVzICovCi0Jd2wxMjcxX3R4X2ZsdXNoKHdsKTsKKwl3bDEyNzFfdHhfcmVzZXQod2wpOwogCXdsMTI3MV9wb3dlcl9vZmYod2wpOwogCiAJbWVtc2V0KHdsLT5ic3NpZCwgMCwgRVRIX0FMRU4pOwpAQCAtMTI0MSw2ICsxMTY2LDQyIEBACiAJcmV0dXJuIHJhdGU7CiB9CiAKK3N0YXRpYyBpbnQgd2wxMjcxX2hhbmRsZV9pZGxlKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGlkbGUpCit7CisJaW50IHJldDsKKworCWlmIChpZGxlKSB7CisJCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19KT0lORUQsICZ3bC0+ZmxhZ3MpKSB7CisJCQlyZXQgPSB3bDEyNzFfdW5qb2luKHdsKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gb3V0OworCQl9CisJCXdsLT5yYXRlX3NldCA9IHdsMTI3MV9taW5fcmF0ZV9nZXQod2wpOworCQl3bC0+c3RhX3JhdGVfc2V0ID0gMDsKKwkJcmV0ID0gd2wxMjcxX2FjeF9yYXRlX3BvbGljaWVzKHdsKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwkJcmV0ID0gd2wxMjcxX2FjeF9rZWVwX2FsaXZlX2NvbmZpZygKKwkJCXdsLCBDTURfVEVNUExfS0xWX0lEWF9OVUxMX0RBVEEsCisJCQlBQ1hfS0VFUF9BTElWRV9UUExfSU5WQUxJRCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJCXNldF9iaXQoV0wxMjcxX0ZMQUdfSURMRSwgJndsLT5mbGFncyk7CisJfSBlbHNlIHsKKwkJLyogaW5jcmVtZW50IHRoZSBzZXNzaW9uIGNvdW50ZXIgKi8KKwkJd2wtPnNlc3Npb25fY291bnRlcisrOworCQlpZiAod2wtPnNlc3Npb25fY291bnRlciA+PSBTRVNTSU9OX0NPVU5URVJfTUFYKQorCQkJd2wtPnNlc3Npb25fY291bnRlciA9IDA7CisJCXJldCA9IHdsMTI3MV9kdW1teV9qb2luKHdsKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwkJY2xlYXJfYml0KFdMMTI3MV9GTEFHX0lETEUsICZ3bC0+ZmxhZ3MpOworCX0KKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgd2wxMjcxX29wX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCiB7CiAJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKQEAgLTEyNTUsNiArMTIxNiwxNSBAQAogCQkgICAgIGNvbmYtPnBvd2VyX2xldmVsLAogCQkgICAgIGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfSURMRSA/ICJpZGxlIiA6ICJpbiB1c2UiKTsKIAorCS8qCisJICogbWFjODAyMTEgd2lsbCBnbyB0byBpZGxlIG5lYXJseSBpbW1lZGlhdGVseSBhZnRlciB0cmFuc21pdHRpbmcgc29tZQorCSAqIGZyYW1lcywgc3VjaCBhcyB0aGUgZGVhdXRoLiBUbyBtYWtlIHN1cmUgdGhvc2UgZnJhbWVzIHJlYWNoIHRoZSBhaXIsCisJICogd2FpdCBoZXJlIHVudGlsIHRoZSBUWCBxdWV1ZSBpcyBmdWxseSBmbHVzaGVkLgorCSAqLworCWlmICgoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9JRExFKSAmJgorCSAgICAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9JRExFKSkKKwkJd2wxMjcxX3R4X2ZsdXNoKHdsKTsKKwogCW11dGV4X2xvY2soJndsLT5tdXRleCk7CiAKIAlpZiAodW5saWtlbHkod2wtPnN0YXRlID09IFdMMTI3MV9TVEFURV9PRkYpKQpAQCAtMTI5NSwyNCArMTI2NSwxOCBAQAogCX0KIAogCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0lETEUpIHsKLQkJaWYgKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfSURMRSAmJgotCQkgICAgdGVzdF9iaXQoV0wxMjcxX0ZMQUdfSk9JTkVELCAmd2wtPmZsYWdzKSkKLQkJCXdsMTI3MV91bmpvaW4od2wpOwotCQllbHNlIGlmICghKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfSURMRSkpCi0JCQl3bDEyNzFfZHVtbXlfam9pbih3bCk7Ci0KLQkJaWYgKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfSURMRSkgewotCQkJd2wtPnJhdGVfc2V0ID0gd2wxMjcxX21pbl9yYXRlX2dldCh3bCk7Ci0JCQl3bC0+c3RhX3JhdGVfc2V0ID0gMDsKLQkJCXdsMTI3MV9hY3hfcmF0ZV9wb2xpY2llcyh3bCk7Ci0JCQl3bDEyNzFfYWN4X2tlZXBfYWxpdmVfY29uZmlnKAotCQkJCXdsLCBDTURfVEVNUExfS0xWX0lEWF9OVUxMX0RBVEEsCi0JCQkJQUNYX0tFRVBfQUxJVkVfVFBMX0lOVkFMSUQpOwotCQkJc2V0X2JpdChXTDEyNzFfRkxBR19JRExFLCAmd2wtPmZsYWdzKTsKLQkJfSBlbHNlCi0JCQljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfSURMRSwgJndsLT5mbGFncyk7CisJCXJldCA9IHdsMTI3MV9oYW5kbGVfaWRsZSh3bCwgY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9JRExFKTsKKwkJaWYgKHJldCA8IDApCisJCQl3bDEyNzFfd2FybmluZygiaWRsZSBtb2RlIGNoYW5nZSBmYWlsZWQgJWQiLCByZXQpOwogCX0KIAorCS8qCisJICogaWYgbWFjODAyMTEgY2hhbmdlcyB0aGUgUFNNIG1vZGUsIG1ha2Ugc3VyZSB0aGUgbW9kZSBpcyBub3QKKwkgKiBpbmNvcnJlY3RseSBjaGFuZ2VkIGFmdGVyIHRoZSBwc3BvbGwgZmFpbHVyZSBhY3RpdmUgd2luZG93LgorCSAqLworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKQorCQljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfUFNQT0xMX0ZBSUxVUkUsICZ3bC0+ZmxhZ3MpOworCiAJaWYgKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMgJiYKIAkgICAgIXRlc3RfYml0KFdMMTI3MV9GTEFHX1BTTV9SRVFVRVNURUQsICZ3bC0+ZmxhZ3MpKSB7CiAJCXNldF9iaXQoV0wxMjcxX0ZMQUdfUFNNX1JFUVVFU1RFRCwgJndsLT5mbGFncyk7CkBAIC0xNTk1LDEzICsxNTU5LDkgQEAKIAkJZ290byBvdXQ7CiAKIAlpZiAod2wxMjcxXzExYV9lbmFibGVkKCkpCi0JCXJldCA9IHdsMTI3MV9jbWRfc2Nhbihody0+cHJpdiwgc3NpZCwgbGVuLAotCQkJCSAgICAgIHJlcS0+aWUsIHJlcS0+aWVfbGVuLCAxLCAwLAotCQkJCSAgICAgIFdMMTI3MV9TQ0FOX0JBTkRfRFVBTCwgMyk7CisJCXJldCA9IHdsMTI3MV9zY2FuKGh3LT5wcml2LCBzc2lkLCBsZW4sIHJlcSk7CiAJZWxzZQotCQlyZXQgPSB3bDEyNzFfY21kX3NjYW4oaHctPnByaXYsIHNzaWQsIGxlbiwKLQkJCQkgICAgICByZXEtPmllLCByZXEtPmllX2xlbiwgMSwgMCwKLQkJCQkgICAgICBXTDEyNzFfU0NBTl9CQU5EXzJfNF9HSFosIDMpOworCQlyZXQgPSB3bDEyNzFfc2Nhbihody0+cHJpdiwgc3NpZCwgbGVuLCByZXEpOwogCiAJd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7CiAKQEAgLTE3NzQsNiArMTczNCw4IEBACiAJCQl3bC0+YWlkID0gYnNzX2NvbmYtPmFpZDsKIAkJCXNldF9hc3NvYyA9IHRydWU7CiAKKwkJCXdsLT5wc19wb2xsX2ZhaWx1cmVzID0gMDsKKwogCQkJLyoKIAkJCSAqIHVzZSBiYXNpYyByYXRlcyBmcm9tIEFQLCBhbmQgZGV0ZXJtaW5lIGxvd2VzdCByYXRlCiAJCQkgKiB0byB1c2Ugd2l0aCBjb250cm9sIGZyYW1lcy4KQEAgLTE4MjMsNiArMTc4NSw5IEBACiAJCQljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfU1RBX0FTU09DSUFURUQsICZ3bC0+ZmxhZ3MpOwogCQkJd2wtPmFpZCA9IDA7CiAKKwkJCS8qIHJlLWVuYWJsZSBkeW5hbWljIHBzIC0ganVzdCBpbiBjYXNlICovCisJCQlpZWVlODAyMTFfZW5hYmxlX2R5bl9wcyh3bC0+dmlmKTsKKwogCQkJLyogcmV2ZXJ0IGJhY2sgdG8gbWluaW11bSByYXRlcyBmb3IgdGhlIGN1cnJlbnQgYmFuZCAqLwogCQkJd2wxMjcxX3NldF9iYW5kX3JhdGUod2wpOwogCQkJd2wtPmJhc2ljX3JhdGUgPSB3bDEyNzFfbWluX3JhdGVfZ2V0KHdsKTsKQEAgLTE4NzEsNiArMTgzNiwxOSBAQAogCQl9CiAJfQogCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BUlBfRklMVEVSKSB7CisJCV9fYmUzMiBhZGRyID0gYnNzX2NvbmYtPmFycF9hZGRyX2xpc3RbMF07CisJCVdBUk5fT04od2wtPmJzc190eXBlICE9IEJTU19UWVBFX1NUQV9CU1MpOworCisJCWlmIChic3NfY29uZi0+YXJwX2FkZHJfY250ID09IDEgJiYgYnNzX2NvbmYtPmFycF9maWx0ZXJfZW5hYmxlZCkKKwkJCXJldCA9IHdsMTI3MV9hY3hfYXJwX2lwX2ZpbHRlcih3bCwgdHJ1ZSwgYWRkcik7CisJCWVsc2UKKwkJCXJldCA9IHdsMTI3MV9hY3hfYXJwX2lwX2ZpbHRlcih3bCwgZmFsc2UsIGFkZHIpOworCisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXRfc2xlZXA7CisJfQorCiAJaWYgKGRvX2pvaW4pIHsKIAkJcmV0ID0gd2wxMjcxX2pvaW4od2wsIHNldF9hc3NvYyk7CiAJCWlmIChyZXQgPCAwKSB7CkBAIC0xOTI5LDYgKzE5MDcsNDggQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdTY0IHdsMTI3MV9vcF9nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCisJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKKwl1NjQgbWFjdGltZSA9IFVMTE9OR19NQVg7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIGdldCB0c2YiKTsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlyZXQgPSB3bDEyNzFfcHNfZWxwX3dha2V1cCh3bCwgZmFsc2UpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IHdsMTI3MV9hY3hfdHNmX2luZm8od2wsICZtYWN0aW1lKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfc2xlZXA7CisKK291dF9zbGVlcDoKKwl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKwlyZXR1cm4gbWFjdGltZTsKK30KKworc3RhdGljIGludCB3bDEyNzFfb3BfZ2V0X3N1cnZleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGlkeCwKKwkJCQlzdHJ1Y3Qgc3VydmV5X2luZm8gKnN1cnZleSkKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKKyAKKwlpZiAoaWR4ICE9IDApCisJCXJldHVybiAtRU5PRU5UOworIAorCXN1cnZleS0+Y2hhbm5lbCA9IGNvbmYtPmNoYW5uZWw7CisJc3VydmV5LT5maWxsZWQgPSBTVVJWRVlfSU5GT19OT0lTRV9EQk07CisJc3VydmV5LT5ub2lzZSA9IHdsLT5ub2lzZTsKKyAKKwlyZXR1cm4gMDsKK30KIAogLyogY2FuJ3QgYmUgY29uc3QsIG1hYzgwMjExIHdyaXRlcyB0byB0aGlzICovCiBzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIHdsMTI3MV9yYXRlc1tdID0gewpAQCAtMTk5MSw3ICsyMDExLDcgQEAKIH07CiAKIC8qIG1hcHBpbmcgdG8gaW5kZXhlcyBmb3Igd2wxMjcxX3JhdGVzICovCi1jb25zdCBzdGF0aWMgdTggd2wxMjcxX3JhdGVfdG9faWR4XzJnaHpbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCB3bDEyNzFfcmF0ZV90b19pZHhfMmdoeltdID0gewogCS8qIE1DUyByYXRlcyBhcmUgdXNlZCBvbmx5IHdpdGggMTFuICovCiAJQ09ORl9IV19SWFRYX1JBVEVfVU5TVVBQT1JURUQsIC8qIENPTkZfSFdfUlhUWF9SQVRFX01DUzcgKi8KIAlDT05GX0hXX1JYVFhfUkFURV9VTlNVUFBPUlRFRCwgLyogQ09ORl9IV19SWFRYX1JBVEVfTUNTNiAqLwpAQCAtMjEwMyw3ICsyMTIzLDcgQEAKIH07CiAKIC8qIG1hcHBpbmcgdG8gaW5kZXhlcyBmb3Igd2wxMjcxX3JhdGVzXzVnaHogKi8KLWNvbnN0IHN0YXRpYyB1OCB3bDEyNzFfcmF0ZV90b19pZHhfNWdoeltdID0geworc3RhdGljIGNvbnN0IHU4IHdsMTI3MV9yYXRlX3RvX2lkeF81Z2h6W10gPSB7CiAJLyogTUNTIHJhdGVzIGFyZSB1c2VkIG9ubHkgd2l0aCAxMW4gKi8KIAlDT05GX0hXX1JYVFhfUkFURV9VTlNVUFBPUlRFRCwgLyogQ09ORl9IV19SWFRYX1JBVEVfTUNTNyAqLwogCUNPTkZfSFdfUlhUWF9SQVRFX1VOU1VQUE9SVEVELCAvKiBDT05GX0hXX1JYVFhfUkFURV9NQ1M2ICovCkBAIC0yMTM5LDcgKzIxNTksNyBAQAogCS5uX2JpdHJhdGVzID0gQVJSQVlfU0laRSh3bDEyNzFfcmF0ZXNfNWdoeiksCiB9OwogCi1jb25zdCBzdGF0aWMgdTggKndsMTI3MV9iYW5kX3JhdGVfdG9faWR4W10gPSB7CitzdGF0aWMgY29uc3QgdTggKndsMTI3MV9iYW5kX3JhdGVfdG9faWR4W10gPSB7CiAJW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gd2wxMjcxX3JhdGVfdG9faWR4XzJnaHosCiAJW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0gd2wxMjcxX3JhdGVfdG9faWR4XzVnaHoKIH07CkBAIC0yMTU4LDYgKzIxNzgsOCBAQAogCS5ic3NfaW5mb19jaGFuZ2VkID0gd2wxMjcxX29wX2Jzc19pbmZvX2NoYW5nZWQsCiAJLnNldF9ydHNfdGhyZXNob2xkID0gd2wxMjcxX29wX3NldF9ydHNfdGhyZXNob2xkLAogCS5jb25mX3R4ID0gd2wxMjcxX29wX2NvbmZfdHgsCisJLmdldF90c2YgPSB3bDEyNzFfb3BfZ2V0X3RzZiwKKwkuZ2V0X3N1cnZleSA9IHdsMTI3MV9vcF9nZXRfc3VydmV5LAogCUNGRzgwMjExX1RFU1RNT0RFX0NNRCh3bDEyNzFfdG1fY21kKQogfTsKIApAQCAtMjM1MCwxNSArMjM3MiwxMyBAQAogCQlnb3RvIGVycl9od19hbGxvYzsKIAl9CiAKLQlwbGF0X2RldiA9IGttYWxsb2Moc2l6ZW9mKHdsMTI3MV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlwbGF0X2RldiA9IGttZW1kdXAoJndsMTI3MV9kZXZpY2UsIHNpemVvZih3bDEyNzFfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwbGF0X2RldikgewogCQl3bDEyNzFfZXJyb3IoImNvdWxkIG5vdCBhbGxvY2F0ZSBwbGF0Zm9ybV9kZXZpY2UiKTsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJfcGxhdF9hbGxvYzsKIAl9CiAKLQltZW1jcHkocGxhdF9kZXYsICZ3bDEyNzFfZGV2aWNlLCBzaXplb2Yod2wxMjcxX2RldmljZSkpOwotCiAJd2wgPSBody0+cHJpdjsKIAltZW1zZXQod2wsIDAsIHNpemVvZigqd2wpKTsKIApAQCAtMjM3MCw2ICsyMzkwLDcgQEAKIAlza2JfcXVldWVfaGVhZF9pbml0KCZ3bC0+dHhfcXVldWUpOwogCiAJSU5JVF9ERUxBWUVEX1dPUksoJndsLT5lbHBfd29yaywgd2wxMjcxX2VscF93b3JrKTsKKwlJTklUX0RFTEFZRURfV09SSygmd2wtPnBzcG9sbF93b3JrLCB3bDEyNzFfcHNwb2xsX3dvcmspOwogCXdsLT5jaGFubmVsID0gV0wxMjcxX0RFRkFVTFRfQ0hBTk5FTDsKIAl3bC0+YmVhY29uX2ludCA9IFdMMTI3MV9ERUZBVUxUX0JFQUNPTl9JTlQ7CiAJd2wtPmRlZmF1bHRfa2V5ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfcnguYwppbmRleCBiOThmYjY0Li4wMTlhYTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3J4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9yeC5jCkBAIC01MywxNCArNTMsMTUgQEAKIAlzdGF0dXMtPmJhbmQgPSB3bC0+YmFuZDsKIAlzdGF0dXMtPnJhdGVfaWR4ID0gd2wxMjcxX3JhdGVfdG9faWR4KHdsLCBkZXNjLT5yYXRlKTsKIAotCS8qCi0JICogRklYTUU6IEFkZCBtYWN0aW1lIGhhbmRsaW5nLiAgRm9yIElCU1MgKGFkLWhvYykgd2UgbmVlZCB0byBnZXQgdGhlCi0JICogdGltZXN0YW1wIGZyb20gdGhlIGJlYWNvbiAoYWN4X3RzZl9pbmZvKS4gIEluIEJTUyBtb2RlIChpbmZyYSkgd2UKLQkgKiBvbmx5IG5lZWQgdGhlIG1hY3RpbWUgZm9yIG1vbml0b3IgbW9kZS4gIEZvciBub3cgdGhlIG1hY3RpbWUgaXMKLQkgKiBub3QgdmFsaWQsIHNvIFJYX0ZMQUdfVFNGVCBzaG91bGQgbm90IGJlIHNldAotCSAqLwogCXN0YXR1cy0+c2lnbmFsID0gZGVzYy0+cnNzaTsKIAorCS8qCisJICogRklYTUU6IEluIHdsMTI1MSwgdGhlIFNOUiBzaG91bGQgYmUgZGl2aWRlZCBieSB0d28uICBJbiB3bDEyNzEgd2UKKwkgKiBuZWVkIHRvIGRpdmlkZSBieSB0d28gZm9yIG5vdywgYnV0IFRJIGhhcyBiZWVuIGRpc2N1c3NpbmcgYWJvdXQKKwkgKiBjaGFuZ2luZyBpdC4gIFRoaXMgbmVlZHMgdG8gYmUgcmVjaGVja2VkLgorCSAqLworCXdsLT5ub2lzZSA9IGRlc2MtPnJzc2kgLSAoZGVzYy0+c25yID4+IDEpOworCiAJc3RhdHVzLT5mcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KGRlc2MtPmNoYW5uZWwpOwogCiAJaWYgKGRlc2MtPmZsYWdzICYgV0wxMjcxX1JYX0RFU0NfRU5DUllQVF9NQVNLKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3J4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3J4LmgKaW5kZXggYjg5YmU0Ny4uMTNhMjMyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9yeC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfcnguaApAQCAtMTEzLDcgKzExMyw3IEBACiAJdTggIHByb2Nlc3NfaWQ7CiAJdTggIHBhZF9sZW47CiAJdTggIHJlc2VydmVkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiB2b2lkIHdsMTI3MV9yeChzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IHdsMTI3MV9md19zdGF0dXMgKnN0YXR1cyk7CiB1OCB3bDEyNzFfcmF0ZV90b19pZHgoc3RydWN0IHdsMTI3MSAqd2wsIGludCByYXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9zY2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVjNDNlZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfc2Nhbi5jCkBAIC0wLDAgKzEsMjU3IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgorCisjaW5jbHVkZSAid2wxMjcxLmgiCisjaW5jbHVkZSAid2wxMjcxX2NtZC5oIgorI2luY2x1ZGUgIndsMTI3MV9zY2FuLmgiCisjaW5jbHVkZSAid2wxMjcxX2FjeC5oIgorCitzdGF0aWMgaW50IHdsMTI3MV9nZXRfc2Nhbl9jaGFubmVscyhzdHJ1Y3Qgd2wxMjcxICp3bCwKKwkJCQkgICAgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxLAorCQkJCSAgICBzdHJ1Y3QgYmFzaWNfc2Nhbl9jaGFubmVsX3BhcmFtcyAqY2hhbm5lbHMsCisJCQkJICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwgYm9vbCBwYXNzaXZlKQoreworCWludCBpLCBqOworCXUzMiBmbGFnczsKKworCWZvciAoaSA9IDAsIGogPSAwOworCSAgICAgaSA8IHJlcS0+bl9jaGFubmVscyAmJiBqIDwgV0wxMjcxX1NDQU5fTUFYX0NIQU5ORUxTOworCSAgICAgaSsrKSB7CisKKwkJZmxhZ3MgPSByZXEtPmNoYW5uZWxzW2ldLT5mbGFnczsKKworCQlpZiAoIXdsLT5zY2FuLnNjYW5uZWRfY2hbaV0gJiYKKwkJICAgICEoZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkgJiYKKwkJICAgICgoISEoZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pKSA9PSBwYXNzaXZlKSAmJgorCQkgICAgKHJlcS0+Y2hhbm5lbHNbaV0tPmJhbmQgPT0gYmFuZCkpIHsKKworCQkJd2wxMjcxX2RlYnVnKERFQlVHX1NDQU4sICJiYW5kICVkLCBjZW50ZXJfZnJlcSAlZCAiLAorCQkJCSAgICAgcmVxLT5jaGFubmVsc1tpXS0+YmFuZCwKKwkJCQkgICAgIHJlcS0+Y2hhbm5lbHNbaV0tPmNlbnRlcl9mcmVxKTsKKwkJCXdsMTI3MV9kZWJ1ZyhERUJVR19TQ0FOLCAiaHdfdmFsdWUgJWQsIGZsYWdzICVYIiwKKwkJCQkgICAgIHJlcS0+Y2hhbm5lbHNbaV0tPmh3X3ZhbHVlLAorCQkJCSAgICAgcmVxLT5jaGFubmVsc1tpXS0+ZmxhZ3MpOworCQkJd2wxMjcxX2RlYnVnKERFQlVHX1NDQU4sCisJCQkJICAgICAibWF4X2FudGVubmFfZ2FpbiAlZCwgbWF4X3Bvd2VyICVkIiwKKwkJCQkgICAgIHJlcS0+Y2hhbm5lbHNbaV0tPm1heF9hbnRlbm5hX2dhaW4sCisJCQkJICAgICByZXEtPmNoYW5uZWxzW2ldLT5tYXhfcG93ZXIpOworCQkJd2wxMjcxX2RlYnVnKERFQlVHX1NDQU4sICJiZWFjb25fZm91bmQgJWQiLAorCQkJCSAgICAgcmVxLT5jaGFubmVsc1tpXS0+YmVhY29uX2ZvdW5kKTsKKworCQkJY2hhbm5lbHNbal0ubWluX2R1cmF0aW9uID0KKwkJCQljcHVfdG9fbGUzMihXTDEyNzFfU0NBTl9DSEFOX01JTl9EVVJBVElPTik7CisJCQljaGFubmVsc1tqXS5tYXhfZHVyYXRpb24gPQorCQkJCWNwdV90b19sZTMyKFdMMTI3MV9TQ0FOX0NIQU5fTUFYX0RVUkFUSU9OKTsKKwkJCWNoYW5uZWxzW2pdLmVhcmx5X3Rlcm1pbmF0aW9uID0gMDsKKwkJCWNoYW5uZWxzW2pdLnR4X3Bvd2VyX2F0dCA9IHJlcS0+Y2hhbm5lbHNbaV0tPm1heF9wb3dlcjsKKwkJCWNoYW5uZWxzW2pdLmNoYW5uZWwgPSByZXEtPmNoYW5uZWxzW2ldLT5od192YWx1ZTsKKworCQkJbWVtc2V0KCZjaGFubmVsc1tqXS5ic3NpZF9sc2IsIDB4ZmYsIDQpOworCQkJbWVtc2V0KCZjaGFubmVsc1tqXS5ic3NpZF9tc2IsIDB4ZmYsIDIpOworCisJCQkvKiBNYXJrIHRoZSBjaGFubmVscyB3ZSBhbHJlYWR5IHVzZWQgKi8KKwkJCXdsLT5zY2FuLnNjYW5uZWRfY2hbaV0gPSB0cnVlOworCisJCQlqKys7CisJCX0KKwl9CisKKwlyZXR1cm4gajsKK30KKworI2RlZmluZSBXTDEyNzFfTk9USElOR19UT19TQ0FOIDEKKworc3RhdGljIGludCB3bDEyNzFfc2Nhbl9zZW5kKHN0cnVjdCB3bDEyNzEgKndsLCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCisJCQkgICAgIGJvb2wgcGFzc2l2ZSwgdTMyIGJhc2ljX3JhdGUpCit7CisJc3RydWN0IHdsMTI3MV9jbWRfc2NhbiAqY21kOworCXN0cnVjdCB3bDEyNzFfY21kX3RyaWdnZXJfc2Nhbl90byAqdHJpZ2dlcjsKKwlpbnQgcmV0OworCXUxNiBzY2FuX29wdGlvbnMgPSAwOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCXRyaWdnZXIgPSBremFsbG9jKHNpemVvZigqdHJpZ2dlciksIEdGUF9LRVJORUwpOworCWlmICghY21kIHx8ICF0cmlnZ2VyKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCS8qIFdlIGFsd2F5cyB1c2UgaGlnaCBwcmlvcml0eSBzY2FucyAqLworCXNjYW5fb3B0aW9ucyA9IFdMMTI3MV9TQ0FOX09QVF9QUklPUklUWV9ISUdIOworCWlmKHBhc3NpdmUpCisJCXNjYW5fb3B0aW9ucyB8PSBXTDEyNzFfU0NBTl9PUFRfUEFTU0lWRTsKKwljbWQtPnBhcmFtcy5zY2FuX29wdGlvbnMgPSBjcHVfdG9fbGUxNihzY2FuX29wdGlvbnMpOworCisJY21kLT5wYXJhbXMubl9jaCA9IHdsMTI3MV9nZXRfc2Nhbl9jaGFubmVscyh3bCwgd2wtPnNjYW4ucmVxLAorCQkJCQkJICAgIGNtZC0+Y2hhbm5lbHMsCisJCQkJCQkgICAgYmFuZCwgcGFzc2l2ZSk7CisJaWYgKGNtZC0+cGFyYW1zLm5fY2ggPT0gMCkgeworCQlyZXQgPSBXTDEyNzFfTk9USElOR19UT19TQ0FOOworCQlnb3RvIG91dDsKKwl9CisKKwljbWQtPnBhcmFtcy50eF9yYXRlID0gY3B1X3RvX2xlMzIoYmFzaWNfcmF0ZSk7CisJY21kLT5wYXJhbXMucnhfY29uZmlnX29wdGlvbnMgPSBjcHVfdG9fbGUzMihDRkdfUlhfQUxMX0dPT0QpOworCWNtZC0+cGFyYW1zLnJ4X2ZpbHRlcl9vcHRpb25zID0KKwkJY3B1X3RvX2xlMzIoQ0ZHX1JYX1BSU1BfRU4gfCBDRkdfUlhfTUdNVF9FTiB8IENGR19SWF9CQ05fRU4pOworCisJY21kLT5wYXJhbXMubl9wcm9iZV9yZXFzID0gV0wxMjcxX1NDQU5fUFJPQkVfUkVRUzsKKwljbWQtPnBhcmFtcy50eF9yYXRlID0gY3B1X3RvX2xlMzIoYmFzaWNfcmF0ZSk7CisJY21kLT5wYXJhbXMudGlkX3RyaWdnZXIgPSAwOworCWNtZC0+cGFyYW1zLnNjYW5fdGFnID0gV0wxMjcxX1NDQU5fREVGQVVMVF9UQUc7CisKKwlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQorCQljbWQtPnBhcmFtcy5iYW5kID0gV0wxMjcxX1NDQU5fQkFORF8yXzRfR0haOworCWVsc2UKKwkJY21kLT5wYXJhbXMuYmFuZCA9IFdMMTI3MV9TQ0FOX0JBTkRfNV9HSFo7CisKKwlpZiAod2wtPnNjYW4uc3NpZF9sZW4gJiYgd2wtPnNjYW4uc3NpZCkgeworCQljbWQtPnBhcmFtcy5zc2lkX2xlbiA9IHdsLT5zY2FuLnNzaWRfbGVuOworCQltZW1jcHkoY21kLT5wYXJhbXMuc3NpZCwgd2wtPnNjYW4uc3NpZCwgd2wtPnNjYW4uc3NpZF9sZW4pOworCX0KKworCXJldCA9IHdsMTI3MV9jbWRfYnVpbGRfcHJvYmVfcmVxKHdsLCB3bC0+c2Nhbi5zc2lkLCB3bC0+c2Nhbi5zc2lkX2xlbiwKKwkJCQkJIHdsLT5zY2FuLnJlcS0+aWUsIHdsLT5zY2FuLnJlcS0+aWVfbGVuLAorCQkJCQkgYmFuZCk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJQUk9CRSByZXF1ZXN0IHRlbXBsYXRlIGZhaWxlZCIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBkaXNhYmxlIHRoZSB0aW1lb3V0ICovCisJdHJpZ2dlci0+dGltZW91dCA9IDA7CisJcmV0ID0gd2wxMjcxX2NtZF9zZW5kKHdsLCBDTURfVFJJR0dFUl9TQ0FOX1RPLCB0cmlnZ2VyLAorCQkJICAgICAgc2l6ZW9mKCp0cmlnZ2VyKSwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJ0cmlnZ2VyIHNjYW4gdG8gZmFpbGVkIGZvciBodyBzY2FuIik7CisJCWdvdG8gb3V0OworCX0KKworCXdsMTI3MV9kdW1wKERFQlVHX1NDQU4sICJTQ0FOOiAiLCBjbWQsIHNpemVvZigqY21kKSk7CisKKwlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIENNRF9TQ0FOLCBjbWQsIHNpemVvZigqY21kKSwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJTQ0FOIGZhaWxlZCIpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShjbWQpOworCWtmcmVlKHRyaWdnZXIpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgd2wxMjcxX3NjYW5fc3RtKHN0cnVjdCB3bDEyNzEgKndsKQoreworCWludCByZXQ7CisKKwlzd2l0Y2ggKHdsLT5zY2FuLnN0YXRlKSB7CisJY2FzZSBXTDEyNzFfU0NBTl9TVEFURV9JRExFOgorCQlicmVhazsKKworCWNhc2UgV0wxMjcxX1NDQU5fU1RBVEVfMkdIWl9BQ1RJVkU6CisJCXJldCA9IHdsMTI3MV9zY2FuX3NlbmQod2wsIElFRUU4MDIxMV9CQU5EXzJHSFosIGZhbHNlLAorCQkJCSAgICAgICB3bC0+Y29uZi50eC5iYXNpY19yYXRlKTsKKwkJaWYgKHJldCA9PSBXTDEyNzFfTk9USElOR19UT19TQ0FOKSB7CisJCQl3bC0+c2Nhbi5zdGF0ZSA9IFdMMTI3MV9TQ0FOX1NUQVRFXzJHSFpfUEFTU0lWRTsKKwkJCXdsMTI3MV9zY2FuX3N0bSh3bCk7CisJCX0KKworCQlicmVhazsKKworCWNhc2UgV0wxMjcxX1NDQU5fU1RBVEVfMkdIWl9QQVNTSVZFOgorCQlyZXQgPSB3bDEyNzFfc2Nhbl9zZW5kKHdsLCBJRUVFODAyMTFfQkFORF8yR0haLCB0cnVlLAorCQkJCSAgICAgICB3bC0+Y29uZi50eC5iYXNpY19yYXRlKTsKKwkJaWYgKHJldCA9PSBXTDEyNzFfTk9USElOR19UT19TQ0FOKSB7CisJCQlpZiAod2wxMjcxXzExYV9lbmFibGVkKCkpCisJCQkJd2wtPnNjYW4uc3RhdGUgPSBXTDEyNzFfU0NBTl9TVEFURV81R0haX0FDVElWRTsKKwkJCWVsc2UKKwkJCQl3bC0+c2Nhbi5zdGF0ZSA9IFdMMTI3MV9TQ0FOX1NUQVRFX0RPTkU7CisJCQl3bDEyNzFfc2Nhbl9zdG0od2wpOworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIFdMMTI3MV9TQ0FOX1NUQVRFXzVHSFpfQUNUSVZFOgorCQlyZXQgPSB3bDEyNzFfc2Nhbl9zZW5kKHdsLCBJRUVFODAyMTFfQkFORF81R0haLCBmYWxzZSwKKwkJCQkgICAgICAgd2wtPmNvbmYudHguYmFzaWNfcmF0ZV81KTsKKwkJaWYgKHJldCA9PSBXTDEyNzFfTk9USElOR19UT19TQ0FOKSB7CisJCQl3bC0+c2Nhbi5zdGF0ZSA9IFdMMTI3MV9TQ0FOX1NUQVRFXzVHSFpfUEFTU0lWRTsKKwkJCXdsMTI3MV9zY2FuX3N0bSh3bCk7CisJCX0KKworCQlicmVhazsKKworCWNhc2UgV0wxMjcxX1NDQU5fU1RBVEVfNUdIWl9QQVNTSVZFOgorCQlyZXQgPSB3bDEyNzFfc2Nhbl9zZW5kKHdsLCBJRUVFODAyMTFfQkFORF81R0haLCB0cnVlLAorCQkJCSAgICAgICB3bC0+Y29uZi50eC5iYXNpY19yYXRlXzUpOworCQlpZiAocmV0ID09IFdMMTI3MV9OT1RISU5HX1RPX1NDQU4pIHsKKwkJCXdsLT5zY2FuLnN0YXRlID0gV0wxMjcxX1NDQU5fU1RBVEVfRE9ORTsKKwkJCXdsMTI3MV9zY2FuX3N0bSh3bCk7CisJCX0KKworCQlicmVhazsKKworCWNhc2UgV0wxMjcxX1NDQU5fU1RBVEVfRE9ORToKKwkJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQod2wtPmh3LCBmYWxzZSk7CisJCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwkJa2ZyZWUod2wtPnNjYW4uc2Nhbm5lZF9jaCk7CisJCXdsLT5zY2FuLnNjYW5uZWRfY2ggPSBOVUxMOworCisJCXdsLT5zY2FuLnN0YXRlID0gV0wxMjcxX1NDQU5fU1RBVEVfSURMRTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQl3bDEyNzFfZXJyb3IoImludmFsaWQgc2NhbiBzdGF0ZSIpOworCQlicmVhazsKKwl9Cit9CisKK2ludCB3bDEyNzFfc2NhbihzdHJ1Y3Qgd2wxMjcxICp3bCwgY29uc3QgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbiwKKwkJc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKQoreworCWlmICh3bC0+c2Nhbi5zdGF0ZSAhPSBXTDEyNzFfU0NBTl9TVEFURV9JRExFKQorCQlyZXR1cm4gLUVCVVNZOworCisJd2wtPnNjYW4uc3RhdGUgPSBXTDEyNzFfU0NBTl9TVEFURV8yR0haX0FDVElWRTsKKworCWlmIChzc2lkX2xlbiAmJiBzc2lkKSB7CisJCXdsLT5zY2FuLnNzaWRfbGVuID0gc3NpZF9sZW47CisJCW1lbWNweSh3bC0+c2Nhbi5zc2lkLCBzc2lkLCBzc2lkX2xlbik7CisJfSBlbHNlIHsKKwkJd2wtPnNjYW4uc3NpZF9sZW4gPSAwOworCX0KKworCXdsLT5zY2FuLnJlcSA9IHJlcTsKKworCXdsLT5zY2FuLnNjYW5uZWRfY2ggPSBremFsbG9jKHJlcS0+bl9jaGFubmVscyAqCisJCQkJICAgICAgc2l6ZW9mKCp3bC0+c2Nhbi5zY2FubmVkX2NoKSwKKwkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwl3bDEyNzFfc2Nhbl9zdG0od2wpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3NjYW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfc2Nhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxODE1NzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3NjYW4uaApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19XTDEyNzFfU0NBTl9IX18KKyNkZWZpbmUgX19XTDEyNzFfU0NBTl9IX18KKworI2luY2x1ZGUgIndsMTI3MS5oIgorCitpbnQgd2wxMjcxX3NjYW4oc3RydWN0IHdsMTI3MSAqd2wsIGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCisJCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSk7CitpbnQgd2wxMjcxX3NjYW5fYnVpbGRfcHJvYmVfcmVxKHN0cnVjdCB3bDEyNzEgKndsLAorCQkJCWNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCisJCQkJY29uc3QgdTggKmllLCBzaXplX3QgaWVfbGVuLCB1OCBiYW5kKTsKK3ZvaWQgd2wxMjcxX3NjYW5fc3RtKHN0cnVjdCB3bDEyNzEgKndsKTsKKworI2RlZmluZSBXTDEyNzFfU0NBTl9NQVhfQ0hBTk5FTFMgICAgICAgMjQKKyNkZWZpbmUgV0wxMjcxX1NDQU5fREVGQVVMVF9UQUcgICAgICAgIDEKKyNkZWZpbmUgV0wxMjcxX1NDQU5fQ1VSUkVOVF9UWF9QV1IgICAgIDAKKyNkZWZpbmUgV0wxMjcxX1NDQU5fT1BUX0FDVElWRSAgICAgICAgIDAKKyNkZWZpbmUgV0wxMjcxX1NDQU5fT1BUX1BBU1NJVkUJICAgICAgIDEKKyNkZWZpbmUgV0wxMjcxX1NDQU5fT1BUX1BSSU9SSVRZX0hJR0ggIDQKKyNkZWZpbmUgV0wxMjcxX1NDQU5fQ0hBTl9NSU5fRFVSQVRJT04gIDMwMDAwICAvKiBUVSAqLworI2RlZmluZSBXTDEyNzFfU0NBTl9DSEFOX01BWF9EVVJBVElPTiAgNjAwMDAgIC8qIFRVICovCisjZGVmaW5lIFdMMTI3MV9TQ0FOX0JBTkRfMl80X0dIWiAwCisjZGVmaW5lIFdMMTI3MV9TQ0FOX0JBTkRfNV9HSFogMQorI2RlZmluZSBXTDEyNzFfU0NBTl9QUk9CRV9SRVFTIDMKKworZW51bSB7CisJV0wxMjcxX1NDQU5fU1RBVEVfSURMRSwKKwlXTDEyNzFfU0NBTl9TVEFURV8yR0haX0FDVElWRSwKKwlXTDEyNzFfU0NBTl9TVEFURV8yR0haX1BBU1NJVkUsCisJV0wxMjcxX1NDQU5fU1RBVEVfNUdIWl9BQ1RJVkUsCisJV0wxMjcxX1NDQU5fU1RBVEVfNUdIWl9QQVNTSVZFLAorCVdMMTI3MV9TQ0FOX1NUQVRFX0RPTkUKK307CisKK3N0cnVjdCBiYXNpY19zY2FuX3BhcmFtcyB7CisJX19sZTMyIHJ4X2NvbmZpZ19vcHRpb25zOworCV9fbGUzMiByeF9maWx0ZXJfb3B0aW9uczsKKwkvKiBTY2FuIG9wdGlvbiBmbGFncyAoV0wxMjcxX1NDQU5fT1BUXyopICovCisJX19sZTE2IHNjYW5fb3B0aW9uczsKKwkvKiBOdW1iZXIgb2Ygc2NhbiBjaGFubmVscyBpbiB0aGUgbGlzdCAobWF4aW11bSAzMCkgKi8KKwl1OCBuX2NoOworCS8qIFRoaXMgZmllbGQgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgcHJvYmUgcmVxdWVzdHMgdG8gc2VuZAorCSAgIHBlciBjaGFubmVsIGZvciBhbiBhY3RpdmUgc2NhbiAqLworCXU4IG5fcHJvYmVfcmVxczsKKwkvKiBSYXRlIGJpdCBmaWVsZCBmb3Igc2VuZGluZyB0aGUgcHJvYmVzICovCisJX19sZTMyIHR4X3JhdGU7CisJdTggdGlkX3RyaWdnZXI7CisJdTggc3NpZF9sZW47CisJLyogaW4gb3JkZXIgdG8gYWxpZ24gKi8KKwl1OCBwYWRkaW5nMVsyXTsKKwl1OCBzc2lkW0lXX0VTU0lEX01BWF9TSVpFXTsKKwkvKiBCYW5kIHRvIHNjYW4gKi8KKwl1OCBiYW5kOworCXU4IHVzZV9zc2lkX2xpc3Q7CisJdTggc2Nhbl90YWc7CisJdTggcGFkZGluZzI7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmFzaWNfc2Nhbl9jaGFubmVsX3BhcmFtcyB7CisJLyogRHVyYXRpb24gaW4gVFUgdG8gd2FpdCBmb3IgZnJhbWVzIG9uIGEgY2hhbm5lbCBmb3IgYWN0aXZlIHNjYW4gKi8KKwlfX2xlMzIgbWluX2R1cmF0aW9uOworCV9fbGUzMiBtYXhfZHVyYXRpb247CisJX19sZTMyIGJzc2lkX2xzYjsKKwlfX2xlMTYgYnNzaWRfbXNiOworCXU4IGVhcmx5X3Rlcm1pbmF0aW9uOworCXU4IHR4X3Bvd2VyX2F0dDsKKwl1OCBjaGFubmVsOworCS8qIEZXIGludGVybmFsIHVzZSBvbmx5ISAqLworCXU4IGRmc19jYW5kaWRhdGU7CisJdTggYWN0aXZpdHlfZGV0ZWN0ZWQ7CisJdTggcGFkOworfSBfX3BhY2tlZDsKKworc3RydWN0IHdsMTI3MV9jbWRfc2NhbiB7CisJc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKKworCXN0cnVjdCBiYXNpY19zY2FuX3BhcmFtcyBwYXJhbXM7CisJc3RydWN0IGJhc2ljX3NjYW5fY2hhbm5lbF9wYXJhbXMgY2hhbm5lbHNbV0wxMjcxX1NDQU5fTUFYX0NIQU5ORUxTXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB3bDEyNzFfY21kX3RyaWdnZXJfc2Nhbl90byB7CisJc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKKworCV9fbGUzMiB0aW1lb3V0OworfSBfX3BhY2tlZDsKKworI2VuZGlmIC8qIF9fV0wxMjcxX1NDQU5fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfc2Rpby5jCmluZGV4IGQzZDZmMzAuLjcwNTliNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfc2Rpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfc2Rpby5jCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW1jL3NkaW9fZnVuYy5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9zZGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9jYXJkLmg+Ci0jaW5jbHVkZSA8cGxhdC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSAid2wxMjcxLmgiCiAjaW5jbHVkZSAid2wxMnh4XzgwMjExLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3NwaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9zcGkuYwppbmRleCA1MTg5YjgxLi45NmQyNWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3NwaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfc3BpLmMKQEAgLTQ2MSwzICs0NjEsNCBAQAogTU9EVUxFX0FVVEhPUigiTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4iKTsKIE1PRFVMRV9BVVRIT1IoIkp1dXNvIE9pa2FyaW5lbiA8anV1c28ub2lrYXJpbmVuQG5va2lhLmNvbT4iKTsKIE1PRFVMRV9GSVJNV0FSRShXTDEyNzFfRldfTkFNRSk7CitNT0RVTEVfQUxJQVMoInNwaTp3bDEyNzEiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfdGVzdG1vZGUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfdGVzdG1vZGUuYwppbmRleCA1NTRkZWI0Li42ZTA5NTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3Rlc3Rtb2RlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV90ZXN0bW9kZS5jCkBAIC0xOTksNyArMTk5LDE0IEBACiAJYnVmID0gbmxhX2RhdGEodGJbV0wxMjcxX1RNX0FUVFJfREFUQV0pOwogCWxlbiA9IG5sYV9sZW4odGJbV0wxMjcxX1RNX0FUVFJfREFUQV0pOwogCi0JaWYgKGxlbiAhPSBzaXplb2Yoc3RydWN0IHdsMTI3MV9udnNfZmlsZSkpIHsKKwkvKgorCSAqIEZJWE1FOiB0aGUgTEVHQUNZIE5WUyBpbWFnZSBzdXBwb3J0IChOVlMncyBtaXNzaW5nIHRoZSA1R0h6IGJhbmQKKwkgKiBjb25maWd1cmF0aW9ucykgY2FuIGJlIHJlbW92ZWQgd2hlbiB0aG9zZSBOVlMgZmlsZXMgc3RvcCBmbG9hdGluZworCSAqIGFyb3VuZC4KKwkgKi8KKwlpZiAobGVuICE9IHNpemVvZihzdHJ1Y3Qgd2wxMjcxX252c19maWxlKSAmJgorCSAgICAobGVuICE9IFdMMTI3MV9JTklfTEVHQUNZX05WU19GSUxFX1NJWkUgfHwKKwkgICAgIHdsMTI3MV8xMWFfZW5hYmxlZCgpKSkgewogCQl3bDEyNzFfZXJyb3IoIm52cyBzaXplIGlzIG5vdCBhcyBleHBlY3RlZDogJXp1ICE9ICV6dSIsCiAJCQkgICAgIGxlbiwgc2l6ZW9mKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUpKTsKIAkJcmV0dXJuIC1FTVNHU0laRTsKQEAgLTIwOSw3ICsyMTYsNyBAQAogCiAJa2ZyZWUod2wtPm52cyk7CiAKLQl3bC0+bnZzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHdsMTI3MV9udnNfZmlsZSksIEdGUF9LRVJORUwpOworCXdsLT5udnMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd2wxMjcxX252c19maWxlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF3bC0+bnZzKSB7CiAJCXdsMTI3MV9lcnJvcigiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIG52cyBmaWxlIik7CiAJCXJldCA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3R4LmMKaW5kZXggNjJkYjc5NS4uYzU5MmNjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV90eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfdHguYwpAQCAtMzYsNiArMzYsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBBQ1hfVFhfREVTQ1JJUFRPUlM7IGkrKykKIAkJaWYgKHdsLT50eF9mcmFtZXNbaV0gPT0gTlVMTCkgewogCQkJd2wtPnR4X2ZyYW1lc1tpXSA9IHNrYjsKKwkJCXdsLT50eF9mcmFtZXNfY250Kys7CiAJCQlyZXR1cm4gaTsKIAkJfQogCkBAIC03Myw4ICs3NCwxMCBAQAogCQl3bDEyNzFfZGVidWcoREVCVUdfVFgsCiAJCQkgICAgICJ0eF9hbGxvY2F0ZTogc2l6ZTogJWQsIGJsb2NrczogJWQsIGlkOiAlZCIsCiAJCQkgICAgIHRvdGFsX2xlbiwgdG90YWxfYmxvY2tzLCBpZCk7Ci0JfSBlbHNlCisJfSBlbHNlIHsKIAkJd2wtPnR4X2ZyYW1lc1tpZF0gPSBOVUxMOworCQl3bC0+dHhfZnJhbWVzX2NudC0tOworCX0KIAogCXJldHVybiByZXQ7CiB9CkBAIC0zNTgsNiArMzYxLDcgQEAKIAkvKiByZXR1cm4gdGhlIHBhY2tldCB0byB0aGUgc3RhY2sgKi8KIAlpZWVlODAyMTFfdHhfc3RhdHVzKHdsLT5odywgc2tiKTsKIAl3bC0+dHhfZnJhbWVzW3Jlc3VsdC0+aWRdID0gTlVMTDsKKwl3bC0+dHhfZnJhbWVzX2NudC0tOwogfQogCiAvKiBDYWxsZWQgdXBvbiByZWNlcHRpb24gb2YgYSBUWCBjb21wbGV0ZSBpbnRlcnJ1cHQgKi8KQEAgLTQxMiw3ICs0MTYsNyBAQAogfQogCiAvKiBjYWxsZXIgbXVzdCBob2xkIHdsLT5tdXRleCAqLwotdm9pZCB3bDEyNzFfdHhfZmx1c2goc3RydWN0IHdsMTI3MSAqd2wpCit2b2lkIHdsMTI3MV90eF9yZXNldChzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtNDIxLDcgKzQyNSw3IEBACiAvKiAJY29udHJvbC0+ZmxhZ3MgPSAwOyBGSVhNRSAqLwogCiAJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmd2wtPnR4X3F1ZXVlKSkpIHsKLQkJd2wxMjcxX2RlYnVnKERFQlVHX1RYLCAiZmx1c2hpbmcgc2tiIDB4JXAiLCBza2IpOworCQl3bDEyNzFfZGVidWcoREVCVUdfVFgsICJmcmVlaW5nIHNrYiAweCVwIiwgc2tiKTsKIAkJaWVlZTgwMjExX3R4X3N0YXR1cyh3bC0+aHcsIHNrYik7CiAJfQogCkBAIC00MjksNiArNDMzLDMyIEBACiAJCWlmICh3bC0+dHhfZnJhbWVzW2ldICE9IE5VTEwpIHsKIAkJCXNrYiA9IHdsLT50eF9mcmFtZXNbaV07CiAJCQl3bC0+dHhfZnJhbWVzW2ldID0gTlVMTDsKKwkJCXdsMTI3MV9kZWJ1ZyhERUJVR19UWCwgImZyZWVpbmcgc2tiIDB4JXAiLCBza2IpOwogCQkJaWVlZTgwMjExX3R4X3N0YXR1cyh3bC0+aHcsIHNrYik7CiAJCX0KKwl3bC0+dHhfZnJhbWVzX2NudCA9IDA7Cit9CisKKyNkZWZpbmUgV0wxMjcxX1RYX0ZMVVNIX1RJTUVPVVQgNTAwMDAwCisKKy8qIGNhbGxlciBtdXN0ICpOT1QqIGhvbGQgd2wtPm11dGV4ICovCit2b2lkIHdsMTI3MV90eF9mbHVzaChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdGltZW91dCA9IGppZmZpZXMgKyB1c2Vjc190b19qaWZmaWVzKFdMMTI3MV9UWF9GTFVTSF9USU1FT1VUKTsKKworCXdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCQl3bDEyNzFfZGVidWcoREVCVUdfVFgsICJmbHVzaGluZyB0eCBidWZmZXI6ICVkIiwKKwkJCSAgICAgd2wtPnR4X2ZyYW1lc19jbnQpOworCQlpZiAoKHdsLT50eF9mcmFtZXNfY250ID09IDApICYmCisJCSAgICBza2JfcXVldWVfZW1wdHkoJndsLT50eF9xdWV1ZSkpIHsKKwkJCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKwkJCXJldHVybjsKKwkJfQorCQltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisJCW1zbGVlcCgxKTsKKwl9CisKKwl3bDEyNzFfd2FybmluZygiVW5hYmxlIHRvIGZsdXNoIGFsbCBUWCBidWZmZXJzLCB0aW1lZCBvdXQuIik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3R4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3R4LmgKaW5kZXggM2I4YjdhYy4uNDhiZjkyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV90eC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfdHguaApAQCAtODAsNyArODAsNyBAQAogCS8qIElkZW50aWZpZXIgb2YgdGhlIHJlbW90ZSBTVEEgaW4gSUJTUywgMSBpbiBpbmZyYS1CU1MgKi8KIAl1OCBhaWQ7CiAJdTggcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIGVudW0gd2wxMjcxX3R4X2h3X3Jlc19zdGF0dXMgewogCVRYX1NVQ0NFU1MgICAgICAgICAgPSAwLApAQCAtMTE1LDEzICsxMTUsMTMgQEAKIAl1OCByYXRlX2NsYXNzX2luZGV4OwogCS8qIGZvciA0LWJ5dGUgYWxpZ25tZW50LiAqLwogCXU4IHNwYXJlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3Qgd2wxMjcxX3R4X2h3X3Jlc19pZiB7CiAJX19sZTMyIHR4X3Jlc3VsdF9md19jb3VudGVyOwogCV9fbGUzMiB0eF9yZXN1bHRfaG9zdF9jb3VudGVyOwogCXN0cnVjdCB3bDEyNzFfdHhfaHdfcmVzX2Rlc2NyIHR4X3Jlc3VsdHNfcXVldWVbVFhfSFdfUkVTVUxUX1FVRVVFX0xFTl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0YXRpYyBpbmxpbmUgaW50IHdsMTI3MV90eF9nZXRfcXVldWUoaW50IHF1ZXVlKQogewpAQCAtMTU4LDYgKzE1OCw3IEBACiAKIHZvaWQgd2wxMjcxX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHZvaWQgd2wxMjcxX3R4X2NvbXBsZXRlKHN0cnVjdCB3bDEyNzEgKndsKTsKK3ZvaWQgd2wxMjcxX3R4X3Jlc2V0KHN0cnVjdCB3bDEyNzEgKndsKTsKIHZvaWQgd2wxMjcxX3R4X2ZsdXNoKHN0cnVjdCB3bDEyNzEgKndsKTsKIHU4IHdsMTI3MV9yYXRlX3RvX2lkeChzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IHJhdGUpOwogdTMyIHdsMTI3MV90eF9lbmFibGVkX3JhdGVzX2dldChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTMyIHJhdGVfc2V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyeHhfODAyMTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyeHhfODAyMTEuaAppbmRleCAwNTVkN2JjLi4xODQ2MjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMnh4XzgwMjExLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTJ4eF84MDIxMS5oCkBAIC02Niw0MSArNjYsNDEgQEAKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAJX19sZTE2IHNlcV9jdGw7CiAJdTggcGF5bG9hZFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHdsMTJ4eF9pZV9oZWFkZXIgewogCXU4IGlkOwogCXU4IGxlbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogSUVzICovCiAKIHN0cnVjdCB3bDEyeHhfaWVfc3NpZCB7CiAJc3RydWN0IHdsMTJ4eF9pZV9oZWFkZXIgaGVhZGVyOwogCWNoYXIgc3NpZFtJV19FU1NJRF9NQVhfU0laRV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCB3bDEyeHhfaWVfcmF0ZXMgewogCXN0cnVjdCB3bDEyeHhfaWVfaGVhZGVyIGhlYWRlcjsKIAl1OCByYXRlc1tNQVhfU1VQUE9SVEVEX1JBVEVTXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHdsMTJ4eF9pZV9kc19wYXJhbXMgewogCXN0cnVjdCB3bDEyeHhfaWVfaGVhZGVyIGhlYWRlcjsKIAl1OCBjaGFubmVsOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgY291bnRyeV90cmlwbGV0IHsKIAl1OCBjaGFubmVsOwogCXU4IG51bV9jaGFubmVsczsKIAl1OCBtYXhfdHhfcG93ZXI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCB3bDEyeHhfaWVfY291bnRyeSB7CiAJc3RydWN0IHdsMTJ4eF9pZV9oZWFkZXIgaGVhZGVyOwogCXU4IGNvdW50cnlfc3RyaW5nW0NPVU5UUllfU1RSSU5HX0xFTl07CiAJc3RydWN0IGNvdW50cnlfdHJpcGxldCB0cmlwbGV0c1tNQVhfQ09VTlRSWV9UUklQTEVUU107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIAogLyogVGVtcGxhdGVzICovCkBAIC0xMTUsMzAgKzExNSwzMCBAQAogCXN0cnVjdCB3bDEyeHhfaWVfcmF0ZXMgZXh0X3JhdGVzOwogCXN0cnVjdCB3bDEyeHhfaWVfZHNfcGFyYW1zIGRzX3BhcmFtczsKIAlzdHJ1Y3Qgd2wxMnh4X2llX2NvdW50cnkgY291bnRyeTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHdsMTJ4eF9udWxsX2RhdGFfdGVtcGxhdGUgewogCXN0cnVjdCBpZWVlODAyMTFfaGVhZGVyIGhlYWRlcjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHdsMTJ4eF9wc19wb2xsX3RlbXBsYXRlIHsKIAlfX2xlMTYgZmM7CiAJX19sZTE2IGFpZDsKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAJdTggdGFbRVRIX0FMRU5dOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3Qgd2wxMnh4X3Fvc19udWxsX2RhdGFfdGVtcGxhdGUgewogCXN0cnVjdCBpZWVlODAyMTFfaGVhZGVyIGhlYWRlcjsKIAlfX2xlMTYgcW9zX2N0bDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHdsMTJ4eF9wcm9iZV9yZXFfdGVtcGxhdGUgewogCXN0cnVjdCBpZWVlODAyMTFfaGVhZGVyIGhlYWRlcjsKIAlzdHJ1Y3Qgd2wxMnh4X2llX3NzaWQgc3NpZDsKIAlzdHJ1Y3Qgd2wxMnh4X2llX3JhdGVzIHJhdGVzOwogCXN0cnVjdCB3bDEyeHhfaWVfcmF0ZXMgZXh0X3JhdGVzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAKIHN0cnVjdCB3bDEyeHhfcHJvYmVfcmVzcF90ZW1wbGF0ZSB7CkBAIC0xNTEsNiArMTUxLDYgQEAKIAlzdHJ1Y3Qgd2wxMnh4X2llX3JhdGVzIGV4dF9yYXRlczsKIAlzdHJ1Y3Qgd2wxMnh4X2llX2RzX3BhcmFtcyBkc19wYXJhbXM7CiAJc3RydWN0IHdsMTJ4eF9pZV9jb3VudHJ5IGNvdW50cnk7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDEuaAppbmRleCA4ODE2ZTM3Li4zZmJmZDE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDEuaApAQCAtMjMxLDEyICsyMzEsMTIgQEAKIAkJICBidXQgc2l6ZW9mKGVudW0pID4gc2l6ZW9mKHU4KSA6LSggKi8KIAl1OCBsZW47CiAJdTggZGF0YVswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGl3X21nbXRfZXNzaWRfcHNldCB7CiAJc3RydWN0IGl3X21nbXRfaW5mb19lbGVtZW50IGVsOwogCXU4IAkJCSAgICBlc3NpZFtJV19FU1NJRF9NQVhfU0laRV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qCiAgKiBBY2NvcmRpbmcgdG8gODAyLjExIFdpcmVsZXNzIE5ldG93b3JzLCB0aGUgZGVmaW5pdGl2ZSBndWlkZSAtIE8nUmVpbGx5CkBAIC0yNDcsMTIgKzI0NywxMiBAQAogc3RydWN0IGl3X21nbXRfZGF0YV9yc2V0IHsKIAlzdHJ1Y3QgaXdfbWdtdF9pbmZvX2VsZW1lbnQgZWw7CiAJdTggCQkJICAgIGRhdGFfcmF0ZV9sYWJlbHNbSVdfREFUQV9SQVRFX01BWF9MQUJFTFNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaXdfbWdtdF9kc19wc2V0IHsKIAlzdHJ1Y3QgaXdfbWdtdF9pbmZvX2VsZW1lbnQgZWw7CiAJdTggCQkJICAgIGNoYW47Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpd19tZ210X2NmX3BzZXQgewogCXN0cnVjdCBpd19tZ210X2luZm9fZWxlbWVudCBlbDsKQEAgLTI2MCwxMiArMjYwLDEyIEBACiAJdTggCQkJICAgIGNmcF9wZXJpb2Q7CiAJdTE2IAkJCSAgICBjZnBfbWF4X2R1cmF0aW9uOwogCXUxNiAJCQkgICAgY2ZwX2R1cl9yZW1haW5pbmc7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBpd19tZ210X2lic3NfcHNldCB7CiAJc3RydWN0IGl3X21nbXRfaW5mb19lbGVtZW50IGVsOwogCXUxNiAJCQkgICAgYXRpbV93aW5kb3c7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCB3bDM1MDFfdHhfaGRyIHsKIAl1MTYJdHhfY250OwpAQCAtNTQ0LDEyICs1NDQsMTIgQEAKIAl1OAlzZXJ2aWNlOwogCXUxNglsZW47CiAJdTE2CWNyYzE2OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3Qgd2wzNTAxXzgwMjExX3R4X2hkciB7CiAJc3RydWN0IHdsMzUwMV84MDIxMV90eF9wbGNwX2hkcglwY2xwX2hkcjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkcgkJbWFjX2hkcjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoKICAgIFJlc2VydmUgdGhlIGJlZ2lubmluZyBUeCBzcGFjZSBmb3IgZGVzY3JpcHRvciB1c2UuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDFfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCmluZGV4IDM3NmM2YjkuLmExY2MyZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCkBAIC00OCw3ICs0OCw2IEBACiAKICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KQEAgLTg5LDEzICs4OCw2IEBACiBzdGF0aWMgaW50IHdsMzUwMV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogc3RhdGljIHZvaWQgd2wzNTAxX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogCi0vKgotICogVGhlIGRldl9pbmZvIHZhcmlhYmxlIGlzIHRoZSAia2V5IiB0aGF0IGlzIHVzZWQgdG8gbWF0Y2ggdXAgdGhpcwotICogZGV2aWNlIGRyaXZlciB3aXRoIGFwcHJvcHJpYXRlIGNhcmRzLCB0aHJvdWdoIHRoZSBjYXJkIGNvbmZpZ3VyYXRpb24KLSAqIGRhdGFiYXNlLgotICovCi1zdGF0aWMgZGV2X2luZm9fdCB3bDM1MDFfZGV2X2luZm8gPSAid2wzNTAxX2NzIjsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJaW50IHJlZ19kb21haW47CiAJaW50IG1pbiwgbWF4LCBkZWZsdDsKQEAgLTE0MjEsNyArMTQxMyw3IEBACiAKIHN0YXRpYyB2b2lkIHdsMzUwMV9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQogewotCXN0cmxjcHkoaW5mby0+ZHJpdmVyLCB3bDM1MDFfZGV2X2luZm8sIHNpemVvZihpbmZvLT5kcml2ZXIpKTsKKwlzdHJsY3B5KGluZm8tPmRyaXZlciwgIndsMzUwMV9jcyIsIHNpemVvZihpbmZvLT5kcml2ZXIpKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBvcHMgPSB7CkBAIC0xODkyLDkgKzE4ODQsOCBAQAogCXN0cnVjdCB3bDM1MDFfY2FyZCAqdGhpczsKIAogCS8qIFRoZSBpbyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIElPIHBvcnQgbWFwcGluZyAqLwotCXBfZGV2LT5pby5OdW1Qb3J0czEJPSAxNjsKLQlwX2Rldi0+aW8uQXR0cmlidXRlczEJPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQlwX2Rldi0+aW8uSU9BZGRyTGluZXMJPSA1OworCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kCT0gMTY7CisJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncwk9IElPX0RBVEFfUEFUSF9XSURUSF84OwogCiAJLyogR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiAqLwogCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMJPSBDT05GX0VOQUJMRV9JUlE7CkBAIC0xOTQwLDEzICsxOTMxLDE0IEBACiAJLyogVHJ5IGFsbG9jYXRpbmcgSU8gcG9ydHMuICBUaGlzIHRyaWVzIGEgZmV3IGZpeGVkIGFkZHJlc3Nlcy4gIElmIHlvdQogCSAqIHdhbnQsIHlvdSBjYW4gYWxzbyByZWFkIHRoZSBjYXJkJ3MgY29uZmlnIHRhYmxlIHRvIHBpY2sgYWRkcmVzc2VzIC0tCiAJICogc2VlIHRoZSBzZXJpYWwgZHJpdmVyIGZvciBhbiBleGFtcGxlLiAqLworCWxpbmstPmlvX2xpbmVzID0gNTsKIAogCWZvciAoaiA9IDB4MjgwOyBqIDwgMHg0MDA7IGogKz0gMHgyMCkgewogCQkvKiBUaGUgJ14weDMwMCcgaXMgc28gdGhhdCB3ZSBwcm9iZSAweDMwMC0weDNmZiBmaXJzdCwgdGhlbgogCQkgKiAweDIwMC0weDJmZiwgYW5kIHNvIG9uLCBiZWNhdXNlIHRoaXMgc2VlbXMgc2FmZXIgKi8KLQkJbGluay0+aW8uQmFzZVBvcnQxID0gajsKLQkJbGluay0+aW8uQmFzZVBvcnQyID0gbGluay0+aW8uQmFzZVBvcnQxICsgMHgxMDsKLQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CisJCWxpbmstPnJlc291cmNlWzBdLT5zdGFydCA9IGo7CisJCWxpbmstPnJlc291cmNlWzFdLT5zdGFydCA9IGxpbmstPnJlc291cmNlWzBdLT5zdGFydCArIDB4MTA7CisJCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rKTsKIAkJaWYgKGkgPT0gMCkKIAkJCWJyZWFrOwogCX0KQEAgLTE5NjgsNyArMTk2MCw3IEBACiAJCWdvdG8gZmFpbGVkOwogCiAJZGV2LT5pcnEgPSBsaW5rLT5pcnE7Ci0JZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisJZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmbGluay0+ZGV2KTsKIAlpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJ3bDM1MDFfY3M6IHJlZ2lzdGVyX25ldGRldigpIGZhaWxlZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCmluZGV4IGIwYjY2NjAuLjQzMzA3YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCkBAIC00Miw3ICs0Miw4IEBACiAJeyBaRF9SRUdET01BSU5fSUMsICJDQSIgfSwKIAl7IFpEX1JFR0RPTUFJTl9FVFNJLCAiREUiIH0sIC8qIEdlbmVyaWMgRVRTSSwgdXNlIG1vc3QgcmVzdHJpY3RpdmUgKi8KIAl7IFpEX1JFR0RPTUFJTl9KQVBBTiwgIkpQIiB9LAotCXsgWkRfUkVHRE9NQUlOX0pBUEFOX0FERCwgIkpQIiB9LAorCXsgWkRfUkVHRE9NQUlOX0pBUEFOXzIsICJKUCIgfSwKKwl7IFpEX1JFR0RPTUFJTl9KQVBBTl8zLCAiSlAiIH0sCiAJeyBaRF9SRUdET01BSU5fU1BBSU4sICJFUyIgfSwKIAl7IFpEX1JFR0RPTUFJTl9GUkFOQ0UsICJGUiIgfSwKIH07CkBAIC04NTUsNyArODU2LDcgQEAKIAlpZiAoc2tiID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCWlmIChuZWVkX3BhZGRpbmcpIHsKLQkJLyogTWFrZSBzdXJlIHRoZSB0aGUgcGF5bG9hZCBkYXRhIGlzIDQgYnl0ZSBhbGlnbmVkLiAqLworCQkvKiBNYWtlIHN1cmUgdGhlIHBheWxvYWQgZGF0YSBpcyA0IGJ5dGUgYWxpZ25lZC4gKi8KIAkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmgKaW5kZXggNjMwYzI5OC4uYTZkODZiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmgKQEAgLTM1LDcgKzM1LDcgQEAKIAlfX2xlMTYgY3VycmVudF9sZW5ndGg7CiAJdTggICAgIHNlcnZpY2U7CiAJX19sZTE2ICBuZXh0X2ZyYW1lX2xlbmd0aDsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIFpEX0NTX1JFU0VSVkVEX1NJWkUJMjUKIApAQCAtMTA2LDcgKzEwNiw3IEBACiBzdHJ1Y3QgcnhfbGVuZ3RoX2luZm8gewogCV9fbGUxNiBsZW5ndGhbM107CiAJX19sZTE2IHRhZzsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIFJYX0xFTkdUSF9JTkZPX1RBRwkJMHg2OTdlCiAKQEAgLTExNyw3ICsxMTcsNyBAQAogCXU4IHNpZ25hbF9xdWFsaXR5X29mZG07CiAJdTggZGVjcnlwdGlvbl90eXBlOwogCXU4IGZyYW1lX3N0YXR1czsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiByeF9zdGF0dXMgZmllbGQgZGVjcnlwdGlvbl90eXBlICovCiAjZGVmaW5lIFpEX1JYX05PX1dFUAkwCkBAIC0xNTMsNyArMTUzLDcgQEAKIAl1OCBtYWNbRVRIX0FMRU5dOwogCXU4IHJldHJ5OwogCXU4IGZhaWx1cmU7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogZW51bSBtYWNfZmxhZ3MgewogCU1BQ19GSVhFRF9DSEFOTkVMID0gMHgwMSwKQEAgLTIxMiw4ICsyMTIsOSBAQAogI2RlZmluZSBaRF9SRUdET01BSU5fRVRTSQkweDMwCiAjZGVmaW5lIFpEX1JFR0RPTUFJTl9TUEFJTgkweDMxCiAjZGVmaW5lIFpEX1JFR0RPTUFJTl9GUkFOQ0UJMHgzMgotI2RlZmluZSBaRF9SRUdET01BSU5fSkFQQU5fQURECTB4NDAKKyNkZWZpbmUgWkRfUkVHRE9NQUlOX0pBUEFOXzIJMHg0MAogI2RlZmluZSBaRF9SRUdET01BSU5fSkFQQU4JMHg0MQorI2RlZmluZSBaRF9SRUdET01BSU5fSkFQQU5fMwkweDQ5CiAKIGVudW0gewogCU1JTl9DSEFOTkVMMjQgPSAxLApAQCAtMjI1LDcgKzIyNiw3IEBACiBzdHJ1Y3Qgb2ZkbV9wbGNwX2hlYWRlciB7CiAJdTggcHJlZml4WzNdOwogCV9fbGUxNiBzZXJ2aWNlOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0YXRpYyBpbmxpbmUgdTggemRfb2ZkbV9wbGNwX2hlYWRlcl9yYXRlKGNvbnN0IHN0cnVjdCBvZmRtX3BsY3BfaGVhZGVyICpoZWFkZXIpCiB7CkBAIC0yNTIsNyArMjUzLDcgQEAKIAl1OCBzZXJ2aWNlOwogCV9fbGUxNiBsZW5ndGg7CiAJX19sZTE2IGNyYzE2OwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0YXRpYyBpbmxpbmUgdTggemRfY2NrX3BsY3BfaGVhZGVyX3NpZ25hbChjb25zdCBzdHJ1Y3QgY2NrX3BsY3BfaGVhZGVyICpoZWFkZXIpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5jCmluZGV4IGMyNTc5NDAuLjgxOGUxNDgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYwpAQCAtODQ0LDcgKzg0NCw3IEBACiAgKiBAdXNiOiBhICZzdHJ1Y3QgemRfdXNiIHBvaW50ZXIKICAqIEB1cmI6IFVSQiB0byBiZSBmcmVlZAogICoKLSAqIEZyZWVzIHRoZSB0aGUgdHJhbnNtaXNzaW9uIFVSQiwgd2hpY2ggbWVhbnMgdG8gcHV0IGl0IG9uIHRoZSBmcmVlIFVSQgorICogRnJlZXMgdGhlIHRyYW5zbWlzc2lvbiBVUkIsIHdoaWNoIG1lYW5zIHRvIHB1dCBpdCBvbiB0aGUgZnJlZSBVUkIKICAqIGxpc3QuCiAgKi8KIHN0YXRpYyB2b2lkIGZyZWVfdHhfdXJiKHN0cnVjdCB6ZF91c2IgKnVzYiwgc3RydWN0IHVyYiAqdXJiKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuaAppbmRleCAwNDlmOGI5Li4xYjE2NTVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuaApAQCAtNzksMTcgKzc5LDE3IEBACiBzdHJ1Y3QgdXNiX3JlcV9yZWFkX3JlZ3MgewogCV9fbGUxNiBpZDsKIAlfX2xlMTYgYWRkclswXTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgcmVnX2RhdGEgewogCV9fbGUxNiBhZGRyOwogCV9fbGUxNiB2YWx1ZTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgdXNiX3JlcV93cml0ZV9yZWdzIHsKIAlfX2xlMTYgaWQ7CiAJc3RydWN0IHJlZ19kYXRhIHJlZ193cml0ZXNbMF07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogZW51bSB7CiAJUkZfSUZfTEUgPSAweDAyLApAQCAtMTA2LDcgKzEwNiw3IEBACiAJLyogUkYyNTk1OiAyNCAqLwogCV9fbGUxNiBiaXRfdmFsdWVzWzBdOwogCS8qIChDUjIwMyAmIH4oUkZfSUZfTEUgfCBSRl9DTEsgfCBSRl9EQVRBKSkgfCAoYml0ID8gUkZfREFUQSA6IDApICovCi19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogVVNCIGludGVycnVwdCAqLwogCkBAIC0xMjMsMTIgKzEyMywxMiBAQAogc3RydWN0IHVzYl9pbnRfaGVhZGVyIHsKIAl1OCB0eXBlOwkvKiBtdXN0IGFsd2F5cyBiZSAxICovCiAJdTggaWQ7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHVzYl9pbnRfcmVncyB7CiAJc3RydWN0IHVzYl9pbnRfaGVhZGVyIGhkcjsKIAlzdHJ1Y3QgcmVnX2RhdGEgcmVnc1swXTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgdXNiX2ludF9yZXRyeV9mYWlsIHsKIAlzdHJ1Y3QgdXNiX2ludF9oZWFkZXIgaGRyOwpAQCAtMTM2LDcgKzEzNiw3IEBACiAJdTggX2R1bW15OwogCXU4IGFkZHJbRVRIX0FMRU5dOwogCXU4IGlic3Nfd2FrZXVwX2Rlc3Q7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHJlYWRfcmVnc19pbnQgewogCXN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRpb247CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYyBiL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jCmluZGV4IGQ1MDRlMmIuLmI1MGZlZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jCisrKyBiL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jCkBAIC0xNjIxLDYgKzE2MjEsNyBAQAogCQlpZiAoeGVubmV0X2Nvbm5lY3QobmV0ZGV2KSAhPSAwKQogCQkJYnJlYWs7CiAJCXhlbmJ1c19zd2l0Y2hfc3RhdGUoZGV2LCBYZW5idXNTdGF0ZUNvbm5lY3RlZCk7CisJCW5ldGlmX25vdGlmeV9wZWVycyhuZXRkZXYpOwogCQlicmVhazsKIAogCWNhc2UgWGVuYnVzU3RhdGVDbG9zaW5nOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveGlsaW54X2VtYWNsaXRlLmMgYi9kcml2ZXJzL25ldC94aWxpbnhfZW1hY2xpdGUuYwppbmRleCBkMDRjNWIyLi5iMmMyZjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC94aWxpbnhfZW1hY2xpdGUuYworKysgYi9kcml2ZXJzL25ldC94aWxpbnhfZW1hY2xpdGUuYwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfbWRpby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveHRzb25pYy5jIGIvZHJpdmVycy9uZXQveHRzb25pYy5jCmluZGV4IGZkYmE5Y2IuLjlmMTIwMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3h0c29uaWMuYworKysgYi9kcml2ZXJzL25ldC94dHNvbmljLmMKQEAgLTkzLDEyICs5MywyMCBAQAogCiBzdGF0aWMgaW50IHh0c29uaWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSxzb25pY19pbnRlcnJ1cHQsSVJRRl9ESVNBQkxFRCwic29uaWMiLGRldikpIHsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHNvbmljX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKKwkJCQkic29uaWMiLCBkZXYpOworCWlmIChyZXR2YWwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIGdldCBJUlEgJWQuXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBkZXYtPmlycSk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KLQlyZXR1cm4gc29uaWNfb3BlbihkZXYpOworCisJcmV0dmFsID0gc29uaWNfb3BlbihkZXYpOworCWlmIChyZXR2YWwpCisJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyBpbnQgeHRzb25pY19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9LY29uZmlnIGIvZHJpdmVycy9vZi9LY29uZmlnCmluZGV4IDdjZWNjOGYuLjZhY2JmZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2YvS2NvbmZpZworKysgYi9kcml2ZXJzL29mL0tjb25maWcKQEAgLTEsMzUgKzEsNjEgQEAKK2NvbmZpZyBEVEMKKwlib29sCisKK2NvbmZpZyBPRgorCWJvb2wKKworbWVudSAiRmxhdHRlbmVkIERldmljZSBUcmVlIGFuZCBPcGVuIEZpcm13YXJlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBPRgorCitjb25maWcgUFJPQ19ERVZJQ0VUUkVFCisJYm9vbCAiU3VwcG9ydCBmb3IgZGV2aWNlIHRyZWUgaW4gL3Byb2MiCisJZGVwZW5kcyBvbiBQUk9DX0ZTICYmICFTUEFSQworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGFkZHMgYSBkZXZpY2UtdHJlZSBkaXJlY3RvcnkgdW5kZXIgL3Byb2Mgd2hpY2ggY29udGFpbnMKKwkgIGFuIGltYWdlIG9mIHRoZSBkZXZpY2UgdHJlZSB0aGF0IHRoZSBrZXJuZWwgY29waWVzIGZyb20gT3BlbgorCSAgRmlybXdhcmUgb3Igb3RoZXIgYm9vdCBmaXJtd2FyZS4gSWYgdW5zdXJlLCBzYXkgWSBoZXJlLgorCiBjb25maWcgT0ZfRkxBVFRSRUUKIAlib29sCi0JZGVwZW5kcyBvbiBPRgorCXNlbGVjdCBEVEMKIAogY29uZmlnIE9GX0RZTkFNSUMKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBPRiAmJiBQUENfT0YKKwlkZXBlbmRzIG9uIFBQQ19PRgorCitjb25maWcgT0ZfQUREUkVTUworCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uICFTUEFSQworCitjb25maWcgT0ZfSVJRCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gIVNQQVJDCiAKIGNvbmZpZyBPRl9ERVZJQ0UKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBPRiAmJiAoU1BBUkMgfHwgUFBDX09GIHx8IE1JQ1JPQkxBWkUpCiAKIGNvbmZpZyBPRl9HUElPCiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gT0YgJiYgKFBQQ19PRiB8fCBNSUNST0JMQVpFKSAmJiBHUElPTElCCisJZGVwZW5kcyBvbiBHUElPTElCICYmICFTUEFSQwogCWhlbHAKIAkgIE9wZW5GaXJtd2FyZSBHUElPIGFjY2Vzc29ycwogCiBjb25maWcgT0ZfSTJDCiAJZGVmX3RyaXN0YXRlIEkyQwotCWRlcGVuZHMgb24gKFBQQ19PRiB8fCBNSUNST0JMQVpFKSAmJiBJMkMKKwlkZXBlbmRzIG9uIEkyQyAmJiAhU1BBUkMKIAloZWxwCiAJICBPcGVuRmlybXdhcmUgSTJDIGFjY2Vzc29ycwogCiBjb25maWcgT0ZfU1BJCiAJZGVmX3RyaXN0YXRlIFNQSQotCWRlcGVuZHMgb24gT0YgJiYgKFBQQ19PRiB8fCBNSUNST0JMQVpFKSAmJiBTUEkKKwlkZXBlbmRzIG9uIFNQSSAmJiAhU1BBUkMKIAloZWxwCiAJICBPcGVuRmlybXdhcmUgU1BJIGFjY2Vzc29ycwogCiBjb25maWcgT0ZfTURJTwogCWRlZl90cmlzdGF0ZSBQSFlMSUIKLQlkZXBlbmRzIG9uIE9GICYmIFBIWUxJQgorCWRlcGVuZHMgb24gUEhZTElCCiAJaGVscAogCSAgT3BlbkZpcm13YXJlIE1ESU8gYnVzIChFdGhlcm5ldCBQSFkpIGFjY2Vzc29ycworCitlbmRtZW51ICMgT0YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvTWFrZWZpbGUgYi9kcml2ZXJzL29mL01ha2VmaWxlCmluZGV4IGYyMzJjYzkuLjAwNTJjNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2YvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9vZi9NYWtlZmlsZQpAQCAtMSw1ICsxLDcgQEAKIG9iai15ID0gYmFzZS5vCiBvYmotJChDT05GSUdfT0ZfRkxBVFRSRUUpICs9IGZkdC5vCitvYmotJChDT05GSUdfT0ZfQUREUkVTUykgICs9IGFkZHJlc3Mubworb2JqLSQoQ09ORklHX09GX0lSUSkgICAgKz0gaXJxLm8KIG9iai0kKENPTkZJR19PRl9ERVZJQ0UpICs9IGRldmljZS5vIHBsYXRmb3JtLm8KIG9iai0kKENPTkZJR19PRl9HUElPKSAgICs9IGdwaW8ubwogb2JqLSQoQ09ORklHX09GX0kyQykJKz0gb2ZfaTJjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvYWRkcmVzcy5jIGIvZHJpdmVycy9vZi9hZGRyZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNhZGI3MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvb2YvYWRkcmVzcy5jCkBAIC0wLDAgKzEsNTk1IEBACisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2lfcmVncy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCisvKiBNYXggYWRkcmVzcyBzaXplIHdlIGRlYWwgd2l0aCAqLworI2RlZmluZSBPRl9NQVhfQUREUl9DRUxMUwk0CisjZGVmaW5lIE9GX0NIRUNLX0NPVU5UUyhuYSwgbnMpCSgobmEpID4gMCAmJiAobmEpIDw9IE9GX01BWF9BRERSX0NFTExTICYmIFwKKwkJCShucykgPiAwKQorCitzdGF0aWMgc3RydWN0IG9mX2J1cyAqb2ZfbWF0Y2hfYnVzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApOworc3RhdGljIGludCBfX29mX2FkZHJlc3NfdG9fcmVzb3VyY2Uoc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGNvbnN0IHUzMiAqYWRkcnAsCisJCQkJICAgIHU2NCBzaXplLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCQkJICAgIHN0cnVjdCByZXNvdXJjZSAqcik7CisKKy8qIERlYnVnIHV0aWxpdHkgKi8KKyNpZmRlZiBERUJVRworc3RhdGljIHZvaWQgb2ZfZHVtcF9hZGRyKGNvbnN0IGNoYXIgKnMsIGNvbnN0IHUzMiAqYWRkciwgaW50IG5hKQoreworCXByaW50ayhLRVJOX0RFQlVHICIlcyIsIHMpOworCXdoaWxlIChuYS0tKQorCQlwcmludGsoIiAlMDh4IiwgYmUzMl90b19jcHUoKihhZGRyKyspKSk7CisJcHJpbnRrKCJcbiIpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIG9mX2R1bXBfYWRkcihjb25zdCBjaGFyICpzLCBjb25zdCB1MzIgKmFkZHIsIGludCBuYSkgeyB9CisjZW5kaWYKKworLyogQ2FsbGJhY2tzIGZvciBidXMgc3BlY2lmaWMgdHJhbnNsYXRvcnMgKi8KK3N0cnVjdCBvZl9idXMgeworCWNvbnN0IGNoYXIJKm5hbWU7CisJY29uc3QgY2hhcgkqYWRkcmVzc2VzOworCWludAkJKCptYXRjaCkoc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQpOworCXZvaWQJCSgqY291bnRfY2VsbHMpKHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQsCisJCQkJICAgICAgIGludCAqYWRkcmMsIGludCAqc2l6ZWMpOworCXU2NAkJKCptYXApKHUzMiAqYWRkciwgY29uc3QgdTMyICpyYW5nZSwKKwkJCQlpbnQgbmEsIGludCBucywgaW50IHBuYSk7CisJaW50CQkoKnRyYW5zbGF0ZSkodTMyICphZGRyLCB1NjQgb2Zmc2V0LCBpbnQgbmEpOworCXVuc2lnbmVkIGludAkoKmdldF9mbGFncykoY29uc3QgdTMyICphZGRyKTsKK307CisKKy8qCisgKiBEZWZhdWx0IHRyYW5zbGF0b3IgKGdlbmVyaWMgYnVzKQorICovCisKK3N0YXRpYyB2b2lkIG9mX2J1c19kZWZhdWx0X2NvdW50X2NlbGxzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LAorCQkJCSAgICAgICBpbnQgKmFkZHJjLCBpbnQgKnNpemVjKQoreworCWlmIChhZGRyYykKKwkJKmFkZHJjID0gb2Zfbl9hZGRyX2NlbGxzKGRldik7CisJaWYgKHNpemVjKQorCQkqc2l6ZWMgPSBvZl9uX3NpemVfY2VsbHMoZGV2KTsKK30KKworc3RhdGljIHU2NCBvZl9idXNfZGVmYXVsdF9tYXAodTMyICphZGRyLCBjb25zdCB1MzIgKnJhbmdlLAorCQlpbnQgbmEsIGludCBucywgaW50IHBuYSkKK3sKKwl1NjQgY3AsIHMsIGRhOworCisJY3AgPSBvZl9yZWFkX251bWJlcihyYW5nZSwgbmEpOworCXMgID0gb2ZfcmVhZF9udW1iZXIocmFuZ2UgKyBuYSArIHBuYSwgbnMpOworCWRhID0gb2ZfcmVhZF9udW1iZXIoYWRkciwgbmEpOworCisJcHJfZGVidWcoIk9GOiBkZWZhdWx0IG1hcCwgY3A9JWxseCwgcz0lbGx4LCBkYT0lbGx4XG4iLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyljcCwgKHVuc2lnbmVkIGxvbmcgbG9uZylzLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylkYSk7CisKKwlpZiAoZGEgPCBjcCB8fCBkYSA+PSAoY3AgKyBzKSkKKwkJcmV0dXJuIE9GX0JBRF9BRERSOworCXJldHVybiBkYSAtIGNwOworfQorCitzdGF0aWMgaW50IG9mX2J1c19kZWZhdWx0X3RyYW5zbGF0ZSh1MzIgKmFkZHIsIHU2NCBvZmZzZXQsIGludCBuYSkKK3sKKwl1NjQgYSA9IG9mX3JlYWRfbnVtYmVyKGFkZHIsIG5hKTsKKwltZW1zZXQoYWRkciwgMCwgbmEgKiA0KTsKKwlhICs9IG9mZnNldDsKKwlpZiAobmEgPiAxKQorCQlhZGRyW25hIC0gMl0gPSBjcHVfdG9fYmUzMihhID4+IDMyKTsKKwlhZGRyW25hIC0gMV0gPSBjcHVfdG9fYmUzMihhICYgMHhmZmZmZmZmZnUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb2ZfYnVzX2RlZmF1bHRfZ2V0X2ZsYWdzKGNvbnN0IHUzMiAqYWRkcikKK3sKKwlyZXR1cm4gSU9SRVNPVVJDRV9NRU07Cit9CisKKyNpZmRlZiBDT05GSUdfUENJCisvKgorICogUENJIGJ1cyBzcGVjaWZpYyB0cmFuc2xhdG9yCisgKi8KKworc3RhdGljIGludCBvZl9idXNfcGNpX21hdGNoKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJLyogInZjaSIgaXMgZm9yIHRoZSAvY2hhb3MgYnJpZGdlIG9uIDFzdC1nZW4gUENJIHBvd2VybWFjcyAqLworCXJldHVybiAhc3RyY21wKG5wLT50eXBlLCAicGNpIikgfHwgIXN0cmNtcChucC0+dHlwZSwgInZjaSIpOworfQorCitzdGF0aWMgdm9pZCBvZl9idXNfcGNpX2NvdW50X2NlbGxzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJICAgaW50ICphZGRyYywgaW50ICpzaXplYykKK3sKKwlpZiAoYWRkcmMpCisJCSphZGRyYyA9IDM7CisJaWYgKHNpemVjKQorCQkqc2l6ZWMgPSAyOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG9mX2J1c19wY2lfZ2V0X2ZsYWdzKGNvbnN0IHUzMiAqYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOworCXUzMiB3ID0gYWRkclswXTsKKworCXN3aXRjaCgodyA+PiAyNCkgJiAweDAzKSB7CisJY2FzZSAweDAxOgorCQlmbGFncyB8PSBJT1JFU09VUkNFX0lPOworCQlicmVhazsKKwljYXNlIDB4MDI6IC8qIDMyIGJpdHMgKi8KKwljYXNlIDB4MDM6IC8qIDY0IGJpdHMgKi8KKwkJZmxhZ3MgfD0gSU9SRVNPVVJDRV9NRU07CisJCWJyZWFrOworCX0KKwlpZiAodyAmIDB4NDAwMDAwMDApCisJCWZsYWdzIHw9IElPUkVTT1VSQ0VfUFJFRkVUQ0g7CisJcmV0dXJuIGZsYWdzOworfQorCitzdGF0aWMgdTY0IG9mX2J1c19wY2lfbWFwKHUzMiAqYWRkciwgY29uc3QgdTMyICpyYW5nZSwgaW50IG5hLCBpbnQgbnMsIGludCBwbmEpCit7CisJdTY0IGNwLCBzLCBkYTsKKwl1bnNpZ25lZCBpbnQgYWYsIHJmOworCisJYWYgPSBvZl9idXNfcGNpX2dldF9mbGFncyhhZGRyKTsKKwlyZiA9IG9mX2J1c19wY2lfZ2V0X2ZsYWdzKHJhbmdlKTsKKworCS8qIENoZWNrIGFkZHJlc3MgdHlwZSBtYXRjaCAqLworCWlmICgoYWYgXiByZikgJiAoSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX0lPKSkKKwkJcmV0dXJuIE9GX0JBRF9BRERSOworCisJLyogUmVhZCBhZGRyZXNzIHZhbHVlcywgc2tpcHBpbmcgaGlnaCBjZWxsICovCisJY3AgPSBvZl9yZWFkX251bWJlcihyYW5nZSArIDEsIG5hIC0gMSk7CisJcyAgPSBvZl9yZWFkX251bWJlcihyYW5nZSArIG5hICsgcG5hLCBucyk7CisJZGEgPSBvZl9yZWFkX251bWJlcihhZGRyICsgMSwgbmEgLSAxKTsKKworCXByX2RlYnVnKCJPRjogUENJIG1hcCwgY3A9JWxseCwgcz0lbGx4LCBkYT0lbGx4XG4iLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyljcCwgKHVuc2lnbmVkIGxvbmcgbG9uZylzLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylkYSk7CisKKwlpZiAoZGEgPCBjcCB8fCBkYSA+PSAoY3AgKyBzKSkKKwkJcmV0dXJuIE9GX0JBRF9BRERSOworCXJldHVybiBkYSAtIGNwOworfQorCitzdGF0aWMgaW50IG9mX2J1c19wY2lfdHJhbnNsYXRlKHUzMiAqYWRkciwgdTY0IG9mZnNldCwgaW50IG5hKQoreworCXJldHVybiBvZl9idXNfZGVmYXVsdF90cmFuc2xhdGUoYWRkciArIDEsIG9mZnNldCwgbmEgLSAxKTsKK30KKworY29uc3QgdTMyICpvZl9nZXRfcGNpX2FkZHJlc3Moc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGludCBiYXJfbm8sIHU2NCAqc2l6ZSwKKwkJCXVuc2lnbmVkIGludCAqZmxhZ3MpCit7CisJY29uc3QgdTMyICpwcm9wOworCXVuc2lnbmVkIGludCBwc2l6ZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudDsKKwlzdHJ1Y3Qgb2ZfYnVzICpidXM7CisJaW50IG9uZXNpemUsIGksIG5hLCBuczsKKworCS8qIEdldCBwYXJlbnQgJiBtYXRjaCBidXMgdHlwZSAqLworCXBhcmVudCA9IG9mX2dldF9wYXJlbnQoZGV2KTsKKwlpZiAocGFyZW50ID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCWJ1cyA9IG9mX21hdGNoX2J1cyhwYXJlbnQpOworCWlmIChzdHJjbXAoYnVzLT5uYW1lLCAicGNpIikpIHsKKwkJb2Zfbm9kZV9wdXQocGFyZW50KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWJ1cy0+Y291bnRfY2VsbHMoZGV2LCAmbmEsICZucyk7CisJb2Zfbm9kZV9wdXQocGFyZW50KTsKKwlpZiAoIU9GX0NIRUNLX0NPVU5UUyhuYSwgbnMpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEdldCAicmVnIiBvciAiYXNzaWduZWQtYWRkcmVzc2VzIiBwcm9wZXJ0eSAqLworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkoZGV2LCBidXMtPmFkZHJlc3NlcywgJnBzaXplKTsKKwlpZiAocHJvcCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwlwc2l6ZSAvPSA0OworCisJb25lc2l6ZSA9IG5hICsgbnM7CisJZm9yIChpID0gMDsgcHNpemUgPj0gb25lc2l6ZTsgcHNpemUgLT0gb25lc2l6ZSwgcHJvcCArPSBvbmVzaXplLCBpKyspIHsKKwkJdTMyIHZhbCA9IGJlMzJfdG9fY3B1KHByb3BbMF0pOworCQlpZiAoKHZhbCAmIDB4ZmYpID09ICgoYmFyX25vICogNCkgKyBQQ0lfQkFTRV9BRERSRVNTXzApKSB7CisJCQlpZiAoc2l6ZSkKKwkJCQkqc2l6ZSA9IG9mX3JlYWRfbnVtYmVyKHByb3AgKyBuYSwgbnMpOworCQkJaWYgKGZsYWdzKQorCQkJCSpmbGFncyA9IGJ1cy0+Z2V0X2ZsYWdzKHByb3ApOworCQkJcmV0dXJuIHByb3A7CisJCX0KKwl9CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKG9mX2dldF9wY2lfYWRkcmVzcyk7CisKK2ludCBvZl9wY2lfYWRkcmVzc190b19yZXNvdXJjZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgaW50IGJhciwKKwkJCSAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnIpCit7CisJY29uc3QgdTMyCSphZGRycDsKKwl1NjQJCXNpemU7CisJdW5zaWduZWQgaW50CWZsYWdzOworCisJYWRkcnAgPSBvZl9nZXRfcGNpX2FkZHJlc3MoZGV2LCBiYXIsICZzaXplLCAmZmxhZ3MpOworCWlmIChhZGRycCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gX19vZl9hZGRyZXNzX3RvX3Jlc291cmNlKGRldiwgYWRkcnAsIHNpemUsIGZsYWdzLCByKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG9mX3BjaV9hZGRyZXNzX3RvX3Jlc291cmNlKTsKKyNlbmRpZiAvKiBDT05GSUdfUENJICovCisKKy8qCisgKiBJU0EgYnVzIHNwZWNpZmljIHRyYW5zbGF0b3IKKyAqLworCitzdGF0aWMgaW50IG9mX2J1c19pc2FfbWF0Y2goc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlyZXR1cm4gIXN0cmNtcChucC0+bmFtZSwgImlzYSIpOworfQorCitzdGF0aWMgdm9pZCBvZl9idXNfaXNhX2NvdW50X2NlbGxzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQsCisJCQkJICAgaW50ICphZGRyYywgaW50ICpzaXplYykKK3sKKwlpZiAoYWRkcmMpCisJCSphZGRyYyA9IDI7CisJaWYgKHNpemVjKQorCQkqc2l6ZWMgPSAxOworfQorCitzdGF0aWMgdTY0IG9mX2J1c19pc2FfbWFwKHUzMiAqYWRkciwgY29uc3QgdTMyICpyYW5nZSwgaW50IG5hLCBpbnQgbnMsIGludCBwbmEpCit7CisJdTY0IGNwLCBzLCBkYTsKKworCS8qIENoZWNrIGFkZHJlc3MgdHlwZSBtYXRjaCAqLworCWlmICgoYWRkclswXSBeIHJhbmdlWzBdKSAmIDB4MDAwMDAwMDEpCisJCXJldHVybiBPRl9CQURfQUREUjsKKworCS8qIFJlYWQgYWRkcmVzcyB2YWx1ZXMsIHNraXBwaW5nIGhpZ2ggY2VsbCAqLworCWNwID0gb2ZfcmVhZF9udW1iZXIocmFuZ2UgKyAxLCBuYSAtIDEpOworCXMgID0gb2ZfcmVhZF9udW1iZXIocmFuZ2UgKyBuYSArIHBuYSwgbnMpOworCWRhID0gb2ZfcmVhZF9udW1iZXIoYWRkciArIDEsIG5hIC0gMSk7CisKKwlwcl9kZWJ1ZygiT0Y6IElTQSBtYXAsIGNwPSVsbHgsIHM9JWxseCwgZGE9JWxseFxuIiwKKwkJICh1bnNpZ25lZCBsb25nIGxvbmcpY3AsICh1bnNpZ25lZCBsb25nIGxvbmcpcywKKwkJICh1bnNpZ25lZCBsb25nIGxvbmcpZGEpOworCisJaWYgKGRhIDwgY3AgfHwgZGEgPj0gKGNwICsgcykpCisJCXJldHVybiBPRl9CQURfQUREUjsKKwlyZXR1cm4gZGEgLSBjcDsKK30KKworc3RhdGljIGludCBvZl9idXNfaXNhX3RyYW5zbGF0ZSh1MzIgKmFkZHIsIHU2NCBvZmZzZXQsIGludCBuYSkKK3sKKwlyZXR1cm4gb2ZfYnVzX2RlZmF1bHRfdHJhbnNsYXRlKGFkZHIgKyAxLCBvZmZzZXQsIG5hIC0gMSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb2ZfYnVzX2lzYV9nZXRfZmxhZ3MoY29uc3QgdTMyICphZGRyKQoreworCXVuc2lnbmVkIGludCBmbGFncyA9IDA7CisJdTMyIHcgPSBhZGRyWzBdOworCisJaWYgKHcgJiAxKQorCQlmbGFncyB8PSBJT1JFU09VUkNFX0lPOworCWVsc2UKKwkJZmxhZ3MgfD0gSU9SRVNPVVJDRV9NRU07CisJcmV0dXJuIGZsYWdzOworfQorCisvKgorICogQXJyYXkgb2YgYnVzIHNwZWNpZmljIHRyYW5zbGF0b3JzCisgKi8KKworc3RhdGljIHN0cnVjdCBvZl9idXMgb2ZfYnVzc2VzW10gPSB7CisjaWZkZWYgQ09ORklHX1BDSQorCS8qIFBDSSAqLworCXsKKwkJLm5hbWUgPSAicGNpIiwKKwkJLmFkZHJlc3NlcyA9ICJhc3NpZ25lZC1hZGRyZXNzZXMiLAorCQkubWF0Y2ggPSBvZl9idXNfcGNpX21hdGNoLAorCQkuY291bnRfY2VsbHMgPSBvZl9idXNfcGNpX2NvdW50X2NlbGxzLAorCQkubWFwID0gb2ZfYnVzX3BjaV9tYXAsCisJCS50cmFuc2xhdGUgPSBvZl9idXNfcGNpX3RyYW5zbGF0ZSwKKwkJLmdldF9mbGFncyA9IG9mX2J1c19wY2lfZ2V0X2ZsYWdzLAorCX0sCisjZW5kaWYgLyogQ09ORklHX1BDSSAqLworCS8qIElTQSAqLworCXsKKwkJLm5hbWUgPSAiaXNhIiwKKwkJLmFkZHJlc3NlcyA9ICJyZWciLAorCQkubWF0Y2ggPSBvZl9idXNfaXNhX21hdGNoLAorCQkuY291bnRfY2VsbHMgPSBvZl9idXNfaXNhX2NvdW50X2NlbGxzLAorCQkubWFwID0gb2ZfYnVzX2lzYV9tYXAsCisJCS50cmFuc2xhdGUgPSBvZl9idXNfaXNhX3RyYW5zbGF0ZSwKKwkJLmdldF9mbGFncyA9IG9mX2J1c19pc2FfZ2V0X2ZsYWdzLAorCX0sCisJLyogRGVmYXVsdCAqLworCXsKKwkJLm5hbWUgPSAiZGVmYXVsdCIsCisJCS5hZGRyZXNzZXMgPSAicmVnIiwKKwkJLm1hdGNoID0gTlVMTCwKKwkJLmNvdW50X2NlbGxzID0gb2ZfYnVzX2RlZmF1bHRfY291bnRfY2VsbHMsCisJCS5tYXAgPSBvZl9idXNfZGVmYXVsdF9tYXAsCisJCS50cmFuc2xhdGUgPSBvZl9idXNfZGVmYXVsdF90cmFuc2xhdGUsCisJCS5nZXRfZmxhZ3MgPSBvZl9idXNfZGVmYXVsdF9nZXRfZmxhZ3MsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfYnVzICpvZl9tYXRjaF9idXMoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG9mX2J1c3Nlcyk7IGkrKykKKwkJaWYgKCFvZl9idXNzZXNbaV0ubWF0Y2ggfHwgb2ZfYnVzc2VzW2ldLm1hdGNoKG5wKSkKKwkJCXJldHVybiAmb2ZfYnVzc2VzW2ldOworCUJVRygpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IG9mX3RyYW5zbGF0ZV9vbmUoc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQsIHN0cnVjdCBvZl9idXMgKmJ1cywKKwkJCSAgICBzdHJ1Y3Qgb2ZfYnVzICpwYnVzLCB1MzIgKmFkZHIsCisJCQkgICAgaW50IG5hLCBpbnQgbnMsIGludCBwbmEsIGNvbnN0IGNoYXIgKnJwcm9wKQoreworCWNvbnN0IHUzMiAqcmFuZ2VzOworCXVuc2lnbmVkIGludCBybGVuOworCWludCByb25lOworCXU2NCBvZmZzZXQgPSBPRl9CQURfQUREUjsKKworCS8qIE5vcm1hbGx5LCBhbiBhYnNlbmNlIG9mIGEgInJhbmdlcyIgcHJvcGVydHkgbWVhbnMgd2UgYXJlCisJICogY3Jvc3NpbmcgYSBub24tdHJhbnNsYXRhYmxlIGJvdW5kYXJ5LCBhbmQgdGh1cyB0aGUgYWRkcmVzc2VzCisJICogYmVsb3cgdGhlIGN1cnJlbnQgbm90IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gQ1BVIHBoeXNpY2FsIG9uZXMuCisJICogVW5mb3J0dW5hdGVseSwgd2hpbGUgdGhpcyBpcyB2ZXJ5IGNsZWFyIGluIHRoZSBzcGVjLCBpdCdzIG5vdAorCSAqIHdoYXQgQXBwbGUgdW5kZXJzdG9vZCwgYW5kIHRoZXkgZG8gaGF2ZSB0aGluZ3MgbGlrZSAvdW5pLW4gb3IKKwkgKiAvaHQgbm9kZXMgd2l0aCBubyAicmFuZ2VzIiBwcm9wZXJ0eSBhbmQgYSBsb3Qgb2YgcGVyZmVjdGx5CisJICogdXNlYWJsZSBtYXBwZWQgZGV2aWNlcyBiZWxvdyB0aGVtLiBUaHVzIHdlIHRyZWF0IHRoZSBhYnNlbmNlIG9mCisJICogInJhbmdlcyIgYXMgZXF1aXZhbGVudCB0byBhbiBlbXB0eSAicmFuZ2VzIiBwcm9wZXJ0eSB3aGljaCBtZWFucworCSAqIGEgMToxIHRyYW5zbGF0aW9uIGF0IHRoYXQgbGV2ZWwuIEl0J3MgdXAgdG8gdGhlIGNhbGxlciBub3QgdG8gdHJ5CisJICogdG8gdHJhbnNsYXRlIGFkZHJlc3NlcyB0aGF0IGFyZW4ndCBzdXBwb3NlZCB0byBiZSB0cmFuc2xhdGVkIGluCisJICogdGhlIGZpcnN0IHBsYWNlLiAtLUJlbkguCisJICoKKwkgKiBBcyBmYXIgYXMgd2Uga25vdywgdGhpcyBkYW1hZ2Ugb25seSBleGlzdHMgb24gQXBwbGUgbWFjaGluZXMsIHNvCisJICogVGhpcyBjb2RlIGlzIG9ubHkgZW5hYmxlZCBvbiBwb3dlcnBjLiAtLWdjbAorCSAqLworCXJhbmdlcyA9IG9mX2dldF9wcm9wZXJ0eShwYXJlbnQsIHJwcm9wLCAmcmxlbik7CisjaWYgIWRlZmluZWQoQ09ORklHX1BQQykKKwlpZiAocmFuZ2VzID09IE5VTEwpIHsKKwkJcHJfZXJyKCJPRjogbm8gcmFuZ2VzOyBjYW5ub3QgdHJhbnNsYXRlXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorI2VuZGlmIC8qICFkZWZpbmVkKENPTkZJR19QUEMpICovCisJaWYgKHJhbmdlcyA9PSBOVUxMIHx8IHJsZW4gPT0gMCkgeworCQlvZmZzZXQgPSBvZl9yZWFkX251bWJlcihhZGRyLCBuYSk7CisJCW1lbXNldChhZGRyLCAwLCBwbmEgKiA0KTsKKwkJcHJfZGVidWcoIk9GOiBlbXB0eSByYW5nZXM7IDE6MSB0cmFuc2xhdGlvblxuIik7CisJCWdvdG8gZmluaXNoOworCX0KKworCXByX2RlYnVnKCJPRjogd2Fsa2luZyByYW5nZXMuLi5cbiIpOworCisJLyogTm93IHdhbGsgdGhyb3VnaCB0aGUgcmFuZ2VzICovCisJcmxlbiAvPSA0OworCXJvbmUgPSBuYSArIHBuYSArIG5zOworCWZvciAoOyBybGVuID49IHJvbmU7IHJsZW4gLT0gcm9uZSwgcmFuZ2VzICs9IHJvbmUpIHsKKwkJb2Zmc2V0ID0gYnVzLT5tYXAoYWRkciwgcmFuZ2VzLCBuYSwgbnMsIHBuYSk7CisJCWlmIChvZmZzZXQgIT0gT0ZfQkFEX0FERFIpCisJCQlicmVhazsKKwl9CisJaWYgKG9mZnNldCA9PSBPRl9CQURfQUREUikgeworCQlwcl9kZWJ1ZygiT0Y6IG5vdCBmb3VuZCAhXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCW1lbWNweShhZGRyLCByYW5nZXMgKyBuYSwgNCAqIHBuYSk7CisKKyBmaW5pc2g6CisJb2ZfZHVtcF9hZGRyKCJPRjogcGFyZW50IHRyYW5zbGF0aW9uIGZvcjoiLCBhZGRyLCBwbmEpOworCXByX2RlYnVnKCJPRjogd2l0aCBvZmZzZXQ6ICVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpb2Zmc2V0KTsKKworCS8qIFRyYW5zbGF0ZSBpdCBpbnRvIHBhcmVudCBidXMgc3BhY2UgKi8KKwlyZXR1cm4gcGJ1cy0+dHJhbnNsYXRlKGFkZHIsIG9mZnNldCwgcG5hKTsKK30KKworLyoKKyAqIFRyYW5zbGF0ZSBhbiBhZGRyZXNzIGZyb20gdGhlIGRldmljZS10cmVlIGludG8gYSBDUFUgcGh5c2ljYWwgYWRkcmVzcywKKyAqIHRoaXMgd2Fsa3MgdXAgdGhlIHRyZWUgYW5kIGFwcGxpZXMgdGhlIHZhcmlvdXMgYnVzIG1hcHBpbmdzIG9uIHRoZQorICogd2F5LgorICoKKyAqIE5vdGU6IFdlIGNvbnNpZGVyIHRoYXQgY3Jvc3NpbmcgYW55IGxldmVsIHdpdGggI3NpemUtY2VsbHMgPT0gMCB0byBtZWFuCisgKiB0aGF0IHRyYW5zbGF0aW9uIGlzIGltcG9zc2libGUgKHRoYXQgaXMgd2UgYXJlIG5vdCBkZWFsaW5nIHdpdGggYSB2YWx1ZQorICogdGhhdCBjYW4gYmUgbWFwcGVkIHRvIGEgY3B1IHBoeXNpY2FsIGFkZHJlc3MpLiBUaGlzIGlzIG5vdCByZWFsbHkgc3BlY2lmaWVkCisgKiB0aGF0IHdheSwgYnV0IHRoaXMgaXMgdHJhZGl0aW9uYWxseSB0aGUgd2F5IElCTSBhdCBsZWFzdCBkbyB0aGluZ3MKKyAqLwordTY0IF9fb2ZfdHJhbnNsYXRlX2FkZHJlc3Moc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGNvbnN0IHUzMiAqaW5fYWRkciwKKwkJCSAgIGNvbnN0IGNoYXIgKnJwcm9wKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3Qgb2ZfYnVzICpidXMsICpwYnVzOworCXUzMiBhZGRyW09GX01BWF9BRERSX0NFTExTXTsKKwlpbnQgbmEsIG5zLCBwbmEsIHBuczsKKwl1NjQgcmVzdWx0ID0gT0ZfQkFEX0FERFI7CisKKwlwcl9kZWJ1ZygiT0Y6ICoqIHRyYW5zbGF0aW9uIGZvciBkZXZpY2UgJXMgKipcbiIsIGRldi0+ZnVsbF9uYW1lKTsKKworCS8qIEluY3JlYXNlIHJlZmNvdW50IGF0IGN1cnJlbnQgbGV2ZWwgKi8KKwlvZl9ub2RlX2dldChkZXYpOworCisJLyogR2V0IHBhcmVudCAmIG1hdGNoIGJ1cyB0eXBlICovCisJcGFyZW50ID0gb2ZfZ2V0X3BhcmVudChkZXYpOworCWlmIChwYXJlbnQgPT0gTlVMTCkKKwkJZ290byBiYWlsOworCWJ1cyA9IG9mX21hdGNoX2J1cyhwYXJlbnQpOworCisJLyogQ291bmQgYWRkcmVzcyBjZWxscyAmIGNvcHkgYWRkcmVzcyBsb2NhbGx5ICovCisJYnVzLT5jb3VudF9jZWxscyhkZXYsICZuYSwgJm5zKTsKKwlpZiAoIU9GX0NIRUNLX0NPVU5UUyhuYSwgbnMpKSB7CisJCXByaW50ayhLRVJOX0VSUiAicHJvbV9wYXJzZTogQmFkIGNlbGwgY291bnQgZm9yICVzXG4iLAorCQkgICAgICAgZGV2LT5mdWxsX25hbWUpOworCQlnb3RvIGJhaWw7CisJfQorCW1lbWNweShhZGRyLCBpbl9hZGRyLCBuYSAqIDQpOworCisJcHJfZGVidWcoIk9GOiBidXMgaXMgJXMgKG5hPSVkLCBucz0lZCkgb24gJXNcbiIsCisJICAgIGJ1cy0+bmFtZSwgbmEsIG5zLCBwYXJlbnQtPmZ1bGxfbmFtZSk7CisJb2ZfZHVtcF9hZGRyKCJPRjogdHJhbnNsYXRpbmcgYWRkcmVzczoiLCBhZGRyLCBuYSk7CisKKwkvKiBUcmFuc2xhdGUgKi8KKwlmb3IgKDs7KSB7CisJCS8qIFN3aXRjaCB0byBwYXJlbnQgYnVzICovCisJCW9mX25vZGVfcHV0KGRldik7CisJCWRldiA9IHBhcmVudDsKKwkJcGFyZW50ID0gb2ZfZ2V0X3BhcmVudChkZXYpOworCisJCS8qIElmIHJvb3QsIHdlIGhhdmUgZmluaXNoZWQgKi8KKwkJaWYgKHBhcmVudCA9PSBOVUxMKSB7CisJCQlwcl9kZWJ1ZygiT0Y6IHJlYWNoZWQgcm9vdCBub2RlXG4iKTsKKwkJCXJlc3VsdCA9IG9mX3JlYWRfbnVtYmVyKGFkZHIsIG5hKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogR2V0IG5ldyBwYXJlbnQgYnVzIGFuZCBjb3VudHMgKi8KKwkJcGJ1cyA9IG9mX21hdGNoX2J1cyhwYXJlbnQpOworCQlwYnVzLT5jb3VudF9jZWxscyhkZXYsICZwbmEsICZwbnMpOworCQlpZiAoIU9GX0NIRUNLX0NPVU5UUyhwbmEsIHBucykpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAicHJvbV9wYXJzZTogQmFkIGNlbGwgY291bnQgZm9yICVzXG4iLAorCQkJICAgICAgIGRldi0+ZnVsbF9uYW1lKTsKKwkJCWJyZWFrOworCQl9CisKKwkJcHJfZGVidWcoIk9GOiBwYXJlbnQgYnVzIGlzICVzIChuYT0lZCwgbnM9JWQpIG9uICVzXG4iLAorCQkgICAgcGJ1cy0+bmFtZSwgcG5hLCBwbnMsIHBhcmVudC0+ZnVsbF9uYW1lKTsKKworCQkvKiBBcHBseSBidXMgdHJhbnNsYXRpb24gKi8KKwkJaWYgKG9mX3RyYW5zbGF0ZV9vbmUoZGV2LCBidXMsIHBidXMsIGFkZHIsIG5hLCBucywgcG5hLCBycHJvcCkpCisJCQlicmVhazsKKworCQkvKiBDb21wbGV0ZSB0aGUgbW92ZSB1cCBvbmUgbGV2ZWwgKi8KKwkJbmEgPSBwbmE7CisJCW5zID0gcG5zOworCQlidXMgPSBwYnVzOworCisJCW9mX2R1bXBfYWRkcigiT0Y6IG9uZSBsZXZlbCB0cmFuc2xhdGlvbjoiLCBhZGRyLCBuYSk7CisJfQorIGJhaWw6CisJb2Zfbm9kZV9wdXQocGFyZW50KTsKKwlvZl9ub2RlX3B1dChkZXYpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKwordTY0IG9mX3RyYW5zbGF0ZV9hZGRyZXNzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCBjb25zdCB1MzIgKmluX2FkZHIpCit7CisJcmV0dXJuIF9fb2ZfdHJhbnNsYXRlX2FkZHJlc3MoZGV2LCBpbl9hZGRyLCAicmFuZ2VzIik7Cit9CitFWFBPUlRfU1lNQk9MKG9mX3RyYW5zbGF0ZV9hZGRyZXNzKTsKKwordTY0IG9mX3RyYW5zbGF0ZV9kbWFfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgY29uc3QgdTMyICppbl9hZGRyKQoreworCXJldHVybiBfX29mX3RyYW5zbGF0ZV9hZGRyZXNzKGRldiwgaW5fYWRkciwgImRtYS1yYW5nZXMiKTsKK30KK0VYUE9SVF9TWU1CT0wob2ZfdHJhbnNsYXRlX2RtYV9hZGRyZXNzKTsKKworY29uc3QgdTMyICpvZl9nZXRfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgaW50IGluZGV4LCB1NjQgKnNpemUsCisJCSAgICB1bnNpZ25lZCBpbnQgKmZsYWdzKQoreworCWNvbnN0IHUzMiAqcHJvcDsKKwl1bnNpZ25lZCBpbnQgcHNpemU7CisJc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQ7CisJc3RydWN0IG9mX2J1cyAqYnVzOworCWludCBvbmVzaXplLCBpLCBuYSwgbnM7CisKKwkvKiBHZXQgcGFyZW50ICYgbWF0Y2ggYnVzIHR5cGUgKi8KKwlwYXJlbnQgPSBvZl9nZXRfcGFyZW50KGRldik7CisJaWYgKHBhcmVudCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwlidXMgPSBvZl9tYXRjaF9idXMocGFyZW50KTsKKwlidXMtPmNvdW50X2NlbGxzKGRldiwgJm5hLCAmbnMpOworCW9mX25vZGVfcHV0KHBhcmVudCk7CisJaWYgKCFPRl9DSEVDS19DT1VOVFMobmEsIG5zKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBHZXQgInJlZyIgb3IgImFzc2lnbmVkLWFkZHJlc3NlcyIgcHJvcGVydHkgKi8KKwlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KGRldiwgYnVzLT5hZGRyZXNzZXMsICZwc2l6ZSk7CisJaWYgKHByb3AgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJcHNpemUgLz0gNDsKKworCW9uZXNpemUgPSBuYSArIG5zOworCWZvciAoaSA9IDA7IHBzaXplID49IG9uZXNpemU7IHBzaXplIC09IG9uZXNpemUsIHByb3AgKz0gb25lc2l6ZSwgaSsrKQorCQlpZiAoaSA9PSBpbmRleCkgeworCQkJaWYgKHNpemUpCisJCQkJKnNpemUgPSBvZl9yZWFkX251bWJlcihwcm9wICsgbmEsIG5zKTsKKwkJCWlmIChmbGFncykKKwkJCQkqZmxhZ3MgPSBidXMtPmdldF9mbGFncyhwcm9wKTsKKwkJCXJldHVybiBwcm9wOworCQl9CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKG9mX2dldF9hZGRyZXNzKTsKKworc3RhdGljIGludCBfX29mX2FkZHJlc3NfdG9fcmVzb3VyY2Uoc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGNvbnN0IHUzMiAqYWRkcnAsCisJCQkJICAgIHU2NCBzaXplLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCQkJICAgIHN0cnVjdCByZXNvdXJjZSAqcikKK3sKKwl1NjQgdGFkZHI7CisKKwlpZiAoKGZsYWdzICYgKElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSkpID09IDApCisJCXJldHVybiAtRUlOVkFMOworCXRhZGRyID0gb2ZfdHJhbnNsYXRlX2FkZHJlc3MoZGV2LCBhZGRycCk7CisJaWYgKHRhZGRyID09IE9GX0JBRF9BRERSKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltZW1zZXQociwgMCwgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkpOworCWlmIChmbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKKwkJdW5zaWduZWQgbG9uZyBwb3J0OworCQlwb3J0ID0gcGNpX2FkZHJlc3NfdG9fcGlvKHRhZGRyKTsKKwkJaWYgKHBvcnQgPT0gKHVuc2lnbmVkIGxvbmcpLTEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJci0+c3RhcnQgPSBwb3J0OworCQlyLT5lbmQgPSBwb3J0ICsgc2l6ZSAtIDE7CisJfSBlbHNlIHsKKwkJci0+c3RhcnQgPSB0YWRkcjsKKwkJci0+ZW5kID0gdGFkZHIgKyBzaXplIC0gMTsKKwl9CisJci0+ZmxhZ3MgPSBmbGFnczsKKwlyLT5uYW1lID0gZGV2LT5mdWxsX25hbWU7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb2ZfYWRkcmVzc190b19yZXNvdXJjZSAtIFRyYW5zbGF0ZSBkZXZpY2UgdHJlZSBhZGRyZXNzIGFuZCByZXR1cm4gYXMgcmVzb3VyY2UKKyAqCisgKiBOb3RlIHRoYXQgaWYgeW91ciBhZGRyZXNzIGlzIGEgUElPIGFkZHJlc3MsIHRoZSBjb252ZXJzaW9uIHdpbGwgZmFpbCBpZgorICogdGhlIHBoeXNpY2FsIGFkZHJlc3MgY2FuJ3QgYmUgaW50ZXJuYWxseSBjb252ZXJ0ZWQgdG8gYW4gSU8gdG9rZW4gd2l0aAorICogcGNpX2FkZHJlc3NfdG9fcGlvKCksIHRoYXQgaXMgYmVjYXVzZSBpdCdzIGVpdGhlciBjYWxsZWQgdG8gZWFybHkgb3IgaXQKKyAqIGNhbid0IGJlIG1hdGNoZWQgdG8gYW55IGhvc3QgYnJpZGdlIElPIHNwYWNlCisgKi8KK2ludCBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCBpbnQgaW5kZXgsCisJCQkgICBzdHJ1Y3QgcmVzb3VyY2UgKnIpCit7CisJY29uc3QgdTMyCSphZGRycDsKKwl1NjQJCXNpemU7CisJdW5zaWduZWQgaW50CWZsYWdzOworCisJYWRkcnAgPSBvZl9nZXRfYWRkcmVzcyhkZXYsIGluZGV4LCAmc2l6ZSwgJmZsYWdzKTsKKwlpZiAoYWRkcnAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIF9fb2ZfYWRkcmVzc190b19yZXNvdXJjZShkZXYsIGFkZHJwLCBzaXplLCBmbGFncywgcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKTsKKworCisvKioKKyAqIG9mX2lvbWFwIC0gTWFwcyB0aGUgbWVtb3J5IG1hcHBlZCBJTyBmb3IgYSBnaXZlbiBkZXZpY2Vfbm9kZQorICogQGRldmljZToJdGhlIGRldmljZSB3aG9zZSBpbyByYW5nZSB3aWxsIGJlIG1hcHBlZAorICogQGluZGV4OglpbmRleCBvZiB0aGUgaW8gcmFuZ2UKKyAqCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbWFwcGVkIG1lbW9yeQorICovCit2b2lkIF9faW9tZW0gKm9mX2lvbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzOworCisJaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIGluZGV4LCAmcmVzKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gaW9yZW1hcChyZXMuc3RhcnQsIDEgKyByZXMuZW5kIC0gcmVzLnN0YXJ0KTsKK30KK0VYUE9SVF9TWU1CT0wob2ZfaW9tYXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9iYXNlLmMgYi9kcml2ZXJzL29mL2Jhc2UuYwppbmRleCBiNWFkOTc0Li5hYTgwNTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL2Jhc2UuYworKysgYi9kcml2ZXJzL29mL2Jhc2UuYwpAQCAtNTQ1LDc0ICs1NDUsMjggQEAKIEVYUE9SVF9TWU1CT0wob2ZfZmluZF9tYXRjaGluZ19ub2RlKTsKIAogLyoqCi0gKiBvZl9tb2RhbGlhc190YWJsZTogVGFibGUgb2YgZXhwbGljaXQgY29tcGF0aWJsZSA9PT4gbW9kYWxpYXMgbWFwcGluZ3MKLSAqCi0gKiBUaGlzIHRhYmxlIGFsbG93cyBwYXJ0aWN1bGFyZSBjb21wYXRpYmxlIHByb3BlcnR5IHZhbHVlcyB0byBiZSBtYXBwZWQKLSAqIHRvIG1vZGFsaWFzIHN0cmluZ3MuICBUaGlzIGlzIHVzZWZ1bCBmb3IgYnVzc2VzIHdoaWNoIGRvIG5vdCBkaXJlY3RseQotICogdW5kZXJzdGFuZCB0aGUgT0YgZGV2aWNlIHRyZWUgYnV0IGFyZSBwb3B1bGF0ZWQgYmFzZWQgb24gZGF0YSBjb250YWluZWQKLSAqIHdpdGhpbiB0aGUgZGV2aWNlIHRyZWUuICBTUEkgYW5kIEkyQyBhcmUgdGhlIHR3byBjdXJyZW50IHVzZXJzIG9mIHRoaXMKLSAqIHRhYmxlLgotICoKLSAqIEluIG1vc3QgY2FzZXMsIGRldmljZXMgZG8gbm90IG5lZWQgdG8gYmUgbGlzdGVkIGluIHRoaXMgdGFibGUgYmVjYXVzZQotICogdGhlIG1vZGFsaWFzIHZhbHVlIGNhbiBiZSBkZXJpdmVkIGRpcmVjdGx5IGZyb20gdGhlIGNvbXBhdGlibGUgdGFibGUuCi0gKiBIb3dldmVyLCBpZiBmb3IgYW55IHJlYXNvbiBhIHZhbHVlIGNhbm5vdCBiZSBkZXJpdmVkLCB0aGVuIHRoaXMgdGFibGUKLSAqIHByb3ZpZGVzIGEgbWV0aG9kIHRvIG92ZXJyaWRlIHRoZSBpbXBsaWNpdCBkZXJpdmF0aW9uLgotICoKLSAqIEF0IHRoZSBtb21lbnQsIGEgc2luZ2xlIHRhYmxlIGlzIHVzZWQgZm9yIGFsbCBidXMgdHlwZXMgYmVjYXVzZSBpdCBpcwotICogYXNzdW1lZCB0aGF0IHRoZSBkYXRhIHNpemUgaXMgc21hbGwgYW5kIHRoYXQgdGhlIGNvbXBhdGlibGUgdmFsdWVzCi0gKiBzaG91bGQgYWxyZWFkeSBiZSBkaXN0aW5jdCBlbm91Z2ggdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIFNQSSwgSTJDCi0gKiBhbmQgb3RoZXIgZGV2aWNlcy4KLSAqLwotc3RydWN0IG9mX21vZGFsaWFzX3RhYmxlIHsKLQljaGFyICpvZl9kZXZpY2U7Ci0JY2hhciAqbW9kYWxpYXM7Ci19Owotc3RhdGljIHN0cnVjdCBvZl9tb2RhbGlhc190YWJsZSBvZl9tb2RhbGlhc190YWJsZVtdID0gewotCXsgImZzbCxtY3UtbXBjODM0OWVtaXR4IiwgIm1jdS1tcGM4MzQ5ZW1pdHgiIH0sCi0JeyAibW1jLXNwaS1zbG90IiwgIm1tY19zcGkiIH0sCi19OwotCi0vKioKICAqIG9mX21vZGFsaWFzX25vZGUgLSBMb29rdXAgYXBwcm9wcmlhdGUgbW9kYWxpYXMgZm9yIGEgZGV2aWNlIG5vZGUKICAqIEBub2RlOglwb2ludGVyIHRvIGEgZGV2aWNlIHRyZWUgbm9kZQogICogQG1vZGFsaWFzOglQb2ludGVyIHRvIGJ1ZmZlciB0aGF0IG1vZGFsaWFzIHZhbHVlIHdpbGwgYmUgY29waWVkIGludG8KICAqIEBsZW46CUxlbmd0aCBvZiBtb2RhbGlhcyB2YWx1ZQogICoKLSAqIEJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgY29tcGF0aWJsZSBwcm9wZXJ0eSwgdGhpcyByb3V0aW5lIHdpbGwgZGV0ZXJtaW5lCi0gKiBhbiBhcHByb3ByaWF0ZSBtb2RhbGlhcyB2YWx1ZSBmb3IgYSBwYXJ0aWN1bGFyIGRldmljZSB0cmVlIG5vZGUuICBUd28KLSAqIHNlcGFyYXRlIG1ldGhvZHMgYXJlIGF0dGVtcHRlZCB0byBkZXJpdmUgYSBtb2RhbGlhcyB2YWx1ZS4KKyAqIEJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgY29tcGF0aWJsZSBwcm9wZXJ0eSwgdGhpcyByb3V0aW5lIHdpbGwgYXR0ZW1wdAorICogdG8gY2hvb3NlIGFuIGFwcHJvcHJpYXRlIG1vZGFsaWFzIHZhbHVlIGZvciBhIHBhcnRpY3VsYXIgZGV2aWNlIHRyZWUgbm9kZS4KKyAqIEl0IGRvZXMgdGhpcyBieSBzdHJpcHBpbmcgdGhlIG1hbnVmYWN0dXJlciBwcmVmaXggKGFzIGRlbGltaXRlZCBieSBhICcsJykKKyAqIGZyb20gdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBjb21wYXRpYmxlIGxpc3QgcHJvcGVydHkuCiAgKgotICogRmlyc3QgbWV0aG9kIGlzIHRvIGxvb2t1cCB0aGUgY29tcGF0aWJsZSB2YWx1ZSBpbiBvZl9tb2RhbGlhc190YWJsZS4KLSAqIFNlY29uZCBpcyB0byBzdHJpcCBvZmYgdGhlIG1hbnVmYWN0dXJlciBwcmVmaXggZnJvbSB0aGUgZmlyc3QKLSAqIGNvbXBhdGlibGUgZW50cnkgYW5kIHVzZSB0aGUgcmVtYWluZGVyIGFzIG1vZGFsaWFzCi0gKgotICogVGhpcyByb3V0aW5lIHJldHVybnMgMCBvbiBzdWNjZXNzCisgKiBUaGlzIHJvdXRpbmUgcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCiAgKi8KIGludCBvZl9tb2RhbGlhc19ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgY2hhciAqbW9kYWxpYXMsIGludCBsZW4pCiB7Ci0JaW50IGksIGNwbGVuOwotCWNvbnN0IGNoYXIgKmNvbXBhdGlibGU7Ci0JY29uc3QgY2hhciAqcDsKLQotCS8qIDEuIHNlYXJjaCBmb3IgZXhjZXB0aW9uIGxpc3QgZW50cnkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvZl9tb2RhbGlhc190YWJsZSk7IGkrKykgewotCQljb21wYXRpYmxlID0gb2ZfbW9kYWxpYXNfdGFibGVbaV0ub2ZfZGV2aWNlOwotCQlpZiAoIW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5vZGUsIGNvbXBhdGlibGUpKQotCQkJY29udGludWU7Ci0JCXN0cmxjcHkobW9kYWxpYXMsIG9mX21vZGFsaWFzX3RhYmxlW2ldLm1vZGFsaWFzLCBsZW4pOwotCQlyZXR1cm4gMDsKLQl9CisJY29uc3QgY2hhciAqY29tcGF0aWJsZSwgKnA7CisJaW50IGNwbGVuOwogCiAJY29tcGF0aWJsZSA9IG9mX2dldF9wcm9wZXJ0eShub2RlLCAiY29tcGF0aWJsZSIsICZjcGxlbik7Ci0JaWYgKCFjb21wYXRpYmxlKQorCWlmICghY29tcGF0aWJsZSB8fCBzdHJsZW4oY29tcGF0aWJsZSkgPiBjcGxlbikKIAkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKiAyLiB0YWtlIGZpcnN0IGNvbXBhdGlibGUgZW50cnkgYW5kIHN0cmlwIG1hbnVmYWN0dXJlciAqLwogCXAgPSBzdHJjaHIoY29tcGF0aWJsZSwgJywnKTsKLQlpZiAoIXApCi0JCXJldHVybiAtRU5PREVWOwotCXArKzsKLQlzdHJsY3B5KG1vZGFsaWFzLCBwLCBsZW4pOworCXN0cmxjcHkobW9kYWxpYXMsIHAgPyBwICsgMSA6IGNvbXBhdGlibGUsIGxlbik7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChvZl9tb2RhbGlhc19ub2RlKTsKQEAgLTY1MSwxNCArNjA1LDE0IEBACiBzdHJ1Y3QgZGV2aWNlX25vZGUgKgogb2ZfcGFyc2VfcGhhbmRsZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpwaGFuZGxlX25hbWUsIGludCBpbmRleCkKIHsKLQljb25zdCBwaGFuZGxlICpwaGFuZGxlOworCWNvbnN0IF9fYmUzMiAqcGhhbmRsZTsKIAlpbnQgc2l6ZTsKIAogCXBoYW5kbGUgPSBvZl9nZXRfcHJvcGVydHkobnAsIHBoYW5kbGVfbmFtZSwgJnNpemUpOwogCWlmICgoIXBoYW5kbGUpIHx8IChzaXplIDwgc2l6ZW9mKCpwaGFuZGxlKSAqIChpbmRleCArIDEpKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUocGhhbmRsZVtpbmRleF0pOworCXJldHVybiBvZl9maW5kX25vZGVfYnlfcGhhbmRsZShiZTMyX3RvX2NwdXAocGhhbmRsZSArIGluZGV4KSk7CiB9CiBFWFBPUlRfU1lNQk9MKG9mX3BhcnNlX3BoYW5kbGUpOwogCkBAIC03MTQsMTYgKzY2OCwxNiBAQAogCiAJd2hpbGUgKGxpc3QgPCBsaXN0X2VuZCkgewogCQljb25zdCBfX2JlMzIgKmNlbGxzOwotCQljb25zdCBwaGFuZGxlICpwaGFuZGxlOworCQlwaGFuZGxlIHBoYW5kbGU7CiAKLQkJcGhhbmRsZSA9IGxpc3QrKzsKKwkJcGhhbmRsZSA9IGJlMzJfdG9fY3B1cChsaXN0KyspOwogCQlhcmdzID0gbGlzdDsKIAogCQkvKiBvbmUgY2VsbCBob2xlIGluIHRoZSBsaXN0ID0gPD47ICovCi0JCWlmICghKnBoYW5kbGUpCisJCWlmICghcGhhbmRsZSkKIAkJCWdvdG8gbmV4dDsKIAotCQlub2RlID0gb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUoKnBoYW5kbGUpOworCQlub2RlID0gb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUocGhhbmRsZSk7CiAJCWlmICghbm9kZSkgewogCQkJcHJfZGVidWcoIiVzOiBjb3VsZCBub3QgZmluZCBwaGFuZGxlXG4iLAogCQkJCSBucC0+ZnVsbF9uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvZGV2aWNlLmMgYi9kcml2ZXJzL29mL2RldmljZS5jCmluZGV4IDdkMThmOGUuLjBkOGEwNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2YvZGV2aWNlLmMKKysrIGIvZHJpdmVycy9vZi9kZXZpY2UuYwpAQCAtMjAsMTMgKzIwLDEzIEBACiBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9tYXRjaF9kZXZpY2UoY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2hlcywKIAkJCQkJICAgY29uc3Qgc3RydWN0IGRldmljZSAqZGV2KQogewotCWlmICghZGV2LT5vZl9ub2RlKQorCWlmICgoIW1hdGNoZXMpIHx8ICghZGV2LT5vZl9ub2RlKSkKIAkJcmV0dXJuIE5VTEw7CiAJcmV0dXJuIG9mX21hdGNoX25vZGUobWF0Y2hlcywgZGV2LT5vZl9ub2RlKTsKIH0KIEVYUE9SVF9TWU1CT0wob2ZfbWF0Y2hfZGV2aWNlKTsKIAotc3RydWN0IG9mX2RldmljZSAqb2ZfZGV2X2dldChzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYpCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXZfZ2V0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlICp0bXA7CiAKQEAgLTM0LDEzICszNCwxMyBAQAogCQlyZXR1cm4gTlVMTDsKIAl0bXAgPSBnZXRfZGV2aWNlKCZkZXYtPmRldik7CiAJaWYgKHRtcCkKLQkJcmV0dXJuIHRvX29mX2RldmljZSh0bXApOworCQlyZXR1cm4gdG9fcGxhdGZvcm1fZGV2aWNlKHRtcCk7CiAJZWxzZQogCQlyZXR1cm4gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0wob2ZfZGV2X2dldCk7CiAKLXZvaWQgb2ZfZGV2X3B1dChzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYpCit2b2lkIG9mX2Rldl9wdXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWlmIChkZXYpCiAJCXB1dF9kZXZpY2UoJmRldi0+ZGV2KTsKQEAgLTUwLDI4ICs1MCwyNSBAQAogc3RhdGljIHNzaXplX3QgZGV2c3BlY19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2OwogCi0Jb2ZkZXYgPSB0b19vZl9kZXZpY2UoZGV2KTsKKwlvZmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBvZmRldi0+ZGV2Lm9mX25vZGUtPmZ1bGxfbmFtZSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IG5hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldjsKIAotCW9mZGV2ID0gdG9fb2ZfZGV2aWNlKGRldik7CisJb2ZkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgb2ZkZXYtPmRldi5vZl9ub2RlLT5uYW1lKTsKIH0KIAogc3RhdGljIHNzaXplX3QgbW9kYWxpYXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiA9IHRvX29mX2RldmljZShkZXYpOwotCXNzaXplX3QgbGVuID0gMDsKLQotCWxlbiA9IG9mX2RldmljZV9nZXRfbW9kYWxpYXMob2ZkZXYsIGJ1ZiwgUEFHRV9TSVpFIC0gMik7CisJc3NpemVfdCBsZW4gPSBvZl9kZXZpY2VfZ2V0X21vZGFsaWFzKGRldiwgYnVmLCBQQUdFX1NJWkUgLSAyKTsKIAlidWZbbGVuXSA9ICdcbic7CiAJYnVmW2xlbisxXSA9IDA7CiAJcmV0dXJuIGxlbisxOwpAQCAtOTMsMjAgKzkwLDI1IEBACiAgKi8KIHZvaWQgb2ZfcmVsZWFzZV9kZXYoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2OwogCi0Jb2ZkZXYgPSB0b19vZl9kZXZpY2UoZGV2KTsKKwlvZmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCW9mX25vZGVfcHV0KG9mZGV2LT5kZXYub2Zfbm9kZSk7CiAJa2ZyZWUob2ZkZXYpOwogfQogRVhQT1JUX1NZTUJPTChvZl9yZWxlYXNlX2Rldik7CiAKLWludCBvZl9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCitpbnQgb2ZfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KQogewogCUJVR19PTihvZmRldi0+ZGV2Lm9mX25vZGUgPT0gTlVMTCk7CiAKIAlkZXZpY2VfaW5pdGlhbGl6ZSgmb2ZkZXYtPmRldik7CiAKKwkvKiBuYW1lIGFuZCBpZCBoYXZlIHRvIGJlIHNldCBzbyB0aGF0IHRoZSBwbGF0Zm9ybSBidXMgZG9lc24ndCBnZXQKKwkgKiBjb25mdXNlZCBvbiBtYXRjaGluZyAqLworCW9mZGV2LT5uYW1lID0gZGV2X25hbWUoJm9mZGV2LT5kZXYpOworCW9mZGV2LT5pZCA9IC0xOworCiAJLyogZGV2aWNlX2FkZCB3aWxsIGFzc3VtZSB0aGF0IHRoaXMgZGV2aWNlIGlzIG9uIHRoZSBzYW1lIG5vZGUgYXMKIAkgKiB0aGUgcGFyZW50LiBJZiB0aGVyZSBpcyBubyBwYXJlbnQgZGVmaW5lZCwgc2V0IHRoZSBub2RlCiAJICogZXhwbGljaXRseSAqLwpAQCAtMTE3LDI1ICsxMTksMjQgQEAKIH0KIEVYUE9SVF9TWU1CT0wob2ZfZGV2aWNlX3JlZ2lzdGVyKTsKIAotdm9pZCBvZl9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKK3ZvaWQgb2ZfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpCiB7CiAJZGV2aWNlX3VucmVnaXN0ZXIoJm9mZGV2LT5kZXYpOwogfQogRVhQT1JUX1NZTUJPTChvZl9kZXZpY2VfdW5yZWdpc3Rlcik7CiAKLXNzaXplX3Qgb2ZfZGV2aWNlX2dldF9tb2RhbGlhcyhzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKLQkJCQljaGFyICpzdHIsIHNzaXplX3QgbGVuKQorc3NpemVfdCBvZl9kZXZpY2VfZ2V0X21vZGFsaWFzKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqc3RyLCBzc2l6ZV90IGxlbikKIHsKIAljb25zdCBjaGFyICpjb21wYXQ7CiAJaW50IGNwbGVuLCBpOwogCXNzaXplX3QgdHNpemUsIGNzaXplLCByZXBlbmQ7CiAKIAkvKiBOYW1lICYgVHlwZSAqLwotCWNzaXplID0gc25wcmludGYoc3RyLCBsZW4sICJvZjpOJXNUJXMiLCBvZmRldi0+ZGV2Lm9mX25vZGUtPm5hbWUsCi0JCQkgb2ZkZXYtPmRldi5vZl9ub2RlLT50eXBlKTsKKwljc2l6ZSA9IHNucHJpbnRmKHN0ciwgbGVuLCAib2Y6TiVzVCVzIiwgZGV2LT5vZl9ub2RlLT5uYW1lLAorCQkJIGRldi0+b2Zfbm9kZS0+dHlwZSk7CiAKIAkvKiBHZXQgY29tcGF0aWJsZSBwcm9wZXJ0eSBpZiBhbnkgKi8KLQljb21wYXQgPSBvZl9nZXRfcHJvcGVydHkob2ZkZXYtPmRldi5vZl9ub2RlLCAiY29tcGF0aWJsZSIsICZjcGxlbik7CisJY29tcGF0ID0gb2ZfZ2V0X3Byb3BlcnR5KGRldi0+b2Zfbm9kZSwgImNvbXBhdGlibGUiLCAmY3BsZW4pOwogCWlmICghY29tcGF0KQogCQlyZXR1cm4gY3NpemU7CiAKQEAgLTE3MCwzICsxNzEsNTEgQEAKIAogCXJldHVybiB0c2l6ZTsKIH0KKworLyoqCisgKiBvZl9kZXZpY2VfdWV2ZW50IC0gRGlzcGxheSBPRiByZWxhdGVkIHVldmVudCBpbmZvcm1hdGlvbgorICovCitpbnQgb2ZfZGV2aWNlX3VldmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudikKK3sKKwljb25zdCBjaGFyICpjb21wYXQ7CisJaW50IHNlZW4gPSAwLCBjcGxlbiwgc2w7CisKKwlpZiAoKCFkZXYpIHx8ICghZGV2LT5vZl9ub2RlKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoYWRkX3VldmVudF92YXIoZW52LCAiT0ZfTkFNRT0lcyIsIGRldi0+b2Zfbm9kZS0+bmFtZSkpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGFkZF91ZXZlbnRfdmFyKGVudiwgIk9GX1RZUEU9JXMiLCBkZXYtPm9mX25vZGUtPnR5cGUpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIFNpbmNlIHRoZSBjb21wYXRpYmxlIGZpZWxkIGNhbiBjb250YWluIHByZXR0eSBtdWNoIGFueXRoaW5nCisJICogaXQncyBub3QgcmVhbGx5IGxlZ2FsIHRvIHNwbGl0IGl0IG91dCB3aXRoIGNvbW1hcy4gV2Ugc3BsaXQgaXQKKwkgKiB1cCB1c2luZyBhIG51bWJlciBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW5zdGVhZC4gKi8KKworCWNvbXBhdCA9IG9mX2dldF9wcm9wZXJ0eShkZXYtPm9mX25vZGUsICJjb21wYXRpYmxlIiwgJmNwbGVuKTsKKwl3aGlsZSAoY29tcGF0ICYmICpjb21wYXQgJiYgY3BsZW4gPiAwKSB7CisJCWlmIChhZGRfdWV2ZW50X3ZhcihlbnYsICJPRl9DT01QQVRJQkxFXyVkPSVzIiwgc2VlbiwgY29tcGF0KSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXNsID0gc3RybGVuKGNvbXBhdCkgKyAxOworCQljb21wYXQgKz0gc2w7CisJCWNwbGVuIC09IHNsOworCQlzZWVuKys7CisJfQorCisJaWYgKGFkZF91ZXZlbnRfdmFyKGVudiwgIk9GX0NPTVBBVElCTEVfTj0lZCIsIHNlZW4pKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIG1vZGFsaWFzIGlzIHRyaWNraWVyLCB3ZSBhZGQgaXQgaW4gMiBzdGVwcyAqLworCWlmIChhZGRfdWV2ZW50X3ZhcihlbnYsICJNT0RBTElBUz0iKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzbCA9IG9mX2RldmljZV9nZXRfbW9kYWxpYXMoZGV2LCAmZW52LT5idWZbZW52LT5idWZsZW4tMV0sCisJCQkJICAgIHNpemVvZihlbnYtPmJ1ZikgLSBlbnYtPmJ1Zmxlbik7CisJaWYgKHNsID49IChzaXplb2YoZW52LT5idWYpIC0gZW52LT5idWZsZW4pKQorCQlyZXR1cm4gLUVOT01FTTsKKwllbnYtPmJ1ZmxlbiArPSBzbDsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9mZHQuYyBiL2RyaXZlcnMvb2YvZmR0LmMKaW5kZXggYjY5ODdiYi4uNjVkYTVhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9mZHQuYworKysgYi9kcml2ZXJzL29mL2ZkdC5jCkBAIC02OSw5ICs2OSw5IEBACiAJCQl1MzIgc3ogPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKXApOwogCQkJcCArPSA4OwogCQkJaWYgKGJlMzJfdG9fY3B1KGluaXRpYWxfYm9vdF9wYXJhbXMtPnZlcnNpb24pIDwgMHgxMCkKLQkJCQlwID0gX0FMSUdOKHAsIHN6ID49IDggPyA4IDogNCk7CisJCQkJcCA9IEFMSUdOKHAsIHN6ID49IDggPyA4IDogNCk7CiAJCQlwICs9IHN6OwotCQkJcCA9IF9BTElHTihwLCA0KTsKKwkJCXAgPSBBTElHTihwLCA0KTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmICh0YWcgIT0gT0ZfRFRfQkVHSU5fTk9ERSkgewpAQCAtODAsNyArODAsNyBAQAogCQl9CiAJCWRlcHRoKys7CiAJCXBhdGhwID0gKGNoYXIgKilwOwotCQlwID0gX0FMSUdOKHAgKyBzdHJsZW4ocGF0aHApICsgMSwgNCk7CisJCXAgPSBBTElHTihwICsgc3RybGVuKHBhdGhwKSArIDEsIDQpOwogCQlpZiAoKCpwYXRocCkgPT0gJy8nKSB7CiAJCQljaGFyICpscCwgKm5wOwogCQkJZm9yIChscCA9IE5VTEwsIG5wID0gcGF0aHA7ICpucDsgbnArKykKQEAgLTEwOSw3ICsxMDksNyBAQAogCQlwICs9IDQ7CiAJQlVHX09OKGJlMzJfdG9fY3B1cCgoX19iZTMyICopcCkgIT0gT0ZfRFRfQkVHSU5fTk9ERSk7CiAJcCArPSA0OwotCXJldHVybiBfQUxJR04ocCArIHN0cmxlbigoY2hhciAqKXApICsgMSwgNCk7CisJcmV0dXJuIEFMSUdOKHAgKyBzdHJsZW4oKGNoYXIgKilwKSArIDEsIDQpOwogfQogCiAvKioKQEAgLTEzOCw3ICsxMzgsNyBAQAogCQlub2ZmID0gYmUzMl90b19jcHVwKChfX2JlMzIgKikocCArIDQpKTsKIAkJcCArPSA4OwogCQlpZiAoYmUzMl90b19jcHUoaW5pdGlhbF9ib290X3BhcmFtcy0+dmVyc2lvbikgPCAweDEwKQotCQkJcCA9IF9BTElHTihwLCBzeiA+PSA4ID8gOCA6IDQpOworCQkJcCA9IEFMSUdOKHAsIHN6ID49IDggPyA4IDogNCk7CiAKIAkJbnN0ciA9IGZpbmRfZmxhdF9kdF9zdHJpbmcobm9mZik7CiAJCWlmIChuc3RyID09IE5VTEwpIHsKQEAgLTE1MSw3ICsxNTEsNyBAQAogCQkJcmV0dXJuICh2b2lkICopcDsKIAkJfQogCQlwICs9IHN6OwotCQlwID0gX0FMSUdOKHAsIDQpOworCQlwID0gQUxJR04ocCwgNCk7CiAJfSB3aGlsZSAoMSk7CiB9CiAKQEAgLTE2OSw3ICsxNjksNyBAQAogCWlmIChjcCA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAl3aGlsZSAoY3BsZW4gPiAwKSB7Ci0JCWlmIChzdHJuY2FzZWNtcChjcCwgY29tcGF0LCBzdHJsZW4oY29tcGF0KSkgPT0gMCkKKwkJaWYgKG9mX2NvbXBhdF9jbXAoY3AsIGNvbXBhdCwgc3RybGVuKGNvbXBhdCkpID09IDApCiAJCQlyZXR1cm4gMTsKIAkJbCA9IHN0cmxlbihjcCkgKyAxOwogCQljcCArPSBsOwpAQCAtMTg0LDcgKzE4NCw3IEBACiB7CiAJdm9pZCAqcmVzOwogCi0JKm1lbSA9IF9BTElHTigqbWVtLCBhbGlnbik7CisJKm1lbSA9IEFMSUdOKCptZW0sIGFsaWduKTsKIAlyZXMgPSAodm9pZCAqKSptZW07CiAJKm1lbSArPSBzaXplOwogCkBAIC0yMjAsNyArMjIwLDcgQEAKIAkqcCArPSA0OwogCXBhdGhwID0gKGNoYXIgKikqcDsKIAlsID0gYWxsb2NsID0gc3RybGVuKHBhdGhwKSArIDE7Ci0JKnAgPSBfQUxJR04oKnAgKyBsLCA0KTsKKwkqcCA9IEFMSUdOKCpwICsgbCwgNCk7CiAKIAkvKiB2ZXJzaW9uIDB4MTAgaGFzIGEgbW9yZSBjb21wYWN0IHVuaXQgbmFtZSBoZXJlIGluc3RlYWQgb2YgdGhlIGZ1bGwKIAkgKiBwYXRoLiB3ZSBhY2N1bXVsYXRlIHRoZSBmdWxsIHBhdGggc2l6ZSB1c2luZyAiZnBzaXplIiwgd2UnbGwgcmVidWlsZApAQCAtMjk5LDcgKzI5OSw3IEBACiAJCW5vZmYgPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKSgoKnApICsgNCkpOwogCQkqcCArPSA4OwogCQlpZiAoYmUzMl90b19jcHUoaW5pdGlhbF9ib290X3BhcmFtcy0+dmVyc2lvbikgPCAweDEwKQotCQkJKnAgPSBfQUxJR04oKnAsIHN6ID49IDggPyA4IDogNCk7CisJCQkqcCA9IEFMSUdOKCpwLCBzeiA+PSA4ID8gOCA6IDQpOwogCiAJCXBuYW1lID0gZmluZF9mbGF0X2R0X3N0cmluZyhub2ZmKTsKIAkJaWYgKHBuYW1lID09IE5VTEwpIHsKQEAgLTMyMCwyMCArMzIwLDIwIEBACiAJCQlpZiAoKHN0cmNtcChwbmFtZSwgInBoYW5kbGUiKSA9PSAwKSB8fAogCQkJICAgIChzdHJjbXAocG5hbWUsICJsaW51eCxwaGFuZGxlIikgPT0gMCkpIHsKIAkJCQlpZiAobnAtPnBoYW5kbGUgPT0gMCkKLQkJCQkJbnAtPnBoYW5kbGUgPSAqKCh1MzIgKikqcCk7CisJCQkJCW5wLT5waGFuZGxlID0gYmUzMl90b19jcHVwKChfX2JlMzIqKSpwKTsKIAkJCX0KIAkJCS8qIEFuZCB3ZSBwcm9jZXNzIHRoZSAiaWJtLHBoYW5kbGUiIHByb3BlcnR5CiAJCQkgKiB1c2VkIGluIHBTZXJpZXMgZHluYW1pYyBkZXZpY2UgdHJlZQogCQkJICogc3R1ZmYgKi8KIAkJCWlmIChzdHJjbXAocG5hbWUsICJpYm0scGhhbmRsZSIpID09IDApCi0JCQkJbnAtPnBoYW5kbGUgPSAqKCh1MzIgKikqcCk7CisJCQkJbnAtPnBoYW5kbGUgPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKSpwKTsKIAkJCXBwLT5uYW1lID0gcG5hbWU7CiAJCQlwcC0+bGVuZ3RoID0gc3o7CiAJCQlwcC0+dmFsdWUgPSAodm9pZCAqKSpwOwogCQkJKnByZXZfcHAgPSBwcDsKIAkJCXByZXZfcHAgPSAmcHAtPm5leHQ7CiAJCX0KLQkJKnAgPSBfQUxJR04oKCpwKSArIHN6LCA0KTsKKwkJKnAgPSBBTElHTigoKnApICsgc3osIDQpOwogCX0KIAkvKiB3aXRoIHZlcnNpb24gMHgxMCB3ZSBtYXkgbm90IGhhdmUgdGhlIG5hbWUgcHJvcGVydHksIHJlY3JlYXRlCiAJICogaXQgaGVyZSBmcm9tIHRoZSB1bml0IG5hbWUgaWYgYWJzZW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL2dwaW8uYyBiL2RyaXZlcnMvb2YvZ3Bpby5jCmluZGV4IGExYjMxYTQuLjkwNTk2MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2YvZ3Bpby5jCisrKyBiL2RyaXZlcnMvb2YvZ3Bpby5jCkBAIC0xMSwxMyArMTEsMTQgQEAKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAvKioKICAqIG9mX2dldF9ncGlvX2ZsYWdzIC0gR2V0IGEgR1BJTyBudW1iZXIgYW5kIGZsYWdzIHRvIHVzZSB3aXRoIEdQSU8gQVBJCkBAIC0zMywzMiArMzQsMzIgQEAKIAkJICAgICAgZW51bSBvZl9ncGlvX2ZsYWdzICpmbGFncykKIHsKIAlpbnQgcmV0OwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZ2M7Ci0Jc3RydWN0IG9mX2dwaW9fY2hpcCAqb2ZfZ2MgPSBOVUxMOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZ3Bpb19ucDsKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpnYzsKIAlpbnQgc2l6ZTsKIAljb25zdCB2b2lkICpncGlvX3NwZWM7CiAJY29uc3QgX19iZTMyICpncGlvX2NlbGxzOwogCiAJcmV0ID0gb2ZfcGFyc2VfcGhhbmRsZXNfd2l0aF9hcmdzKG5wLCAiZ3Bpb3MiLCAiI2dwaW8tY2VsbHMiLCBpbmRleCwKLQkJCQkJICAmZ2MsICZncGlvX3NwZWMpOworCQkJCQkgICZncGlvX25wLCAmZ3Bpb19zcGVjKTsKIAlpZiAocmV0KSB7CiAJCXByX2RlYnVnKCIlczogY2FuJ3QgcGFyc2UgZ3Bpb3MgcHJvcGVydHlcbiIsIF9fZnVuY19fKTsKIAkJZ290byBlcnIwOwogCX0KIAotCW9mX2djID0gZ2MtPmRhdGE7Ci0JaWYgKCFvZl9nYykgeworCWdjID0gb2Zfbm9kZV90b19ncGlvY2hpcChncGlvX25wKTsKKwlpZiAoIWdjKSB7CiAJCXByX2RlYnVnKCIlczogZ3BpbyBjb250cm9sbGVyICVzIGlzbid0IHJlZ2lzdGVyZWRcbiIsCi0JCQkgbnAtPmZ1bGxfbmFtZSwgZ2MtPmZ1bGxfbmFtZSk7CisJCQkgbnAtPmZ1bGxfbmFtZSwgZ3Bpb19ucC0+ZnVsbF9uYW1lKTsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBlcnIxOwogCX0KIAotCWdwaW9fY2VsbHMgPSBvZl9nZXRfcHJvcGVydHkoZ2MsICIjZ3Bpby1jZWxscyIsICZzaXplKTsKKwlncGlvX2NlbGxzID0gb2ZfZ2V0X3Byb3BlcnR5KGdwaW9fbnAsICIjZ3Bpby1jZWxscyIsICZzaXplKTsKIAlpZiAoIWdwaW9fY2VsbHMgfHwgc2l6ZSAhPSBzaXplb2YoKmdwaW9fY2VsbHMpIHx8Ci0JCQliZTMyX3RvX2NwdXAoZ3Bpb19jZWxscykgIT0gb2ZfZ2MtPmdwaW9fY2VsbHMpIHsKKwkJCWJlMzJfdG9fY3B1cChncGlvX2NlbGxzKSAhPSBnYy0+b2ZfZ3Bpb19uX2NlbGxzKSB7CiAJCXByX2RlYnVnKCIlczogd3JvbmcgI2dwaW8tY2VsbHMgZm9yICVzXG4iLAotCQkJIG5wLT5mdWxsX25hbWUsIGdjLT5mdWxsX25hbWUpOworCQkJIG5wLT5mdWxsX25hbWUsIGdwaW9fbnAtPmZ1bGxfbmFtZSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyMTsKIAl9CkBAIC02NywxMyArNjgsMTMgQEAKIAlpZiAoZmxhZ3MpCiAJCSpmbGFncyA9IDA7CiAKLQlyZXQgPSBvZl9nYy0+eGxhdGUob2ZfZ2MsIG5wLCBncGlvX3NwZWMsIGZsYWdzKTsKKwlyZXQgPSBnYy0+b2ZfeGxhdGUoZ2MsIG5wLCBncGlvX3NwZWMsIGZsYWdzKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnIxOwogCi0JcmV0ICs9IG9mX2djLT5nYy5iYXNlOworCXJldCArPSBnYy0+YmFzZTsKIGVycjE6Ci0Jb2Zfbm9kZV9wdXQoZ2MpOworCW9mX25vZGVfcHV0KGdwaW9fbnApOwogZXJyMDoKIAlwcl9kZWJ1ZygiJXMgZXhpdGVkIHdpdGggc3RhdHVzICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIAlyZXR1cm4gcmV0OwpAQCAtMTE2LDcgKzExNyw3IEBACiAKIC8qKgogICogb2ZfZ3Bpb19zaW1wbGVfeGxhdGUgLSB0cmFuc2xhdGUgZ3Bpb19zcGVjIHRvIHRoZSBHUElPIG51bWJlciBhbmQgZmxhZ3MKLSAqIEBvZl9nYzoJcG9pbnRlciB0byB0aGUgb2ZfZ3Bpb19jaGlwIHN0cnVjdHVyZQorICogQGdjOgkJcG9pbnRlciB0byB0aGUgZ3Bpb19jaGlwIHN0cnVjdHVyZQogICogQG5wOgkJZGV2aWNlIG5vZGUgb2YgdGhlIEdQSU8gY2hpcAogICogQGdwaW9fc3BlYzoJZ3BpbyBzcGVjaWZpZXIgYXMgZm91bmQgaW4gdGhlIGRldmljZSB0cmVlCiAgKiBAZmxhZ3M6CWEgZmxhZ3MgcG9pbnRlciB0byBmaWxsIGluCkBAIC0xMjUsOCArMTI2LDggQEAKICAqIGdwaW8gY2hpcHMuIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgb25seSBvbmUgc2FuaXR5IGNoZWNrOiB3aGV0aGVyIGdwaW8KICAqIGlzIGxlc3MgdGhhbiBuZ3Bpb3MgKHRoYXQgaXMgc3BlY2lmaWVkIGluIHRoZSBncGlvX2NoaXApLgogICovCi1pbnQgb2ZfZ3Bpb19zaW1wbGVfeGxhdGUoc3RydWN0IG9mX2dwaW9fY2hpcCAqb2ZfZ2MsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCQkgY29uc3Qgdm9pZCAqZ3Bpb19zcGVjLCBlbnVtIG9mX2dwaW9fZmxhZ3MgKmZsYWdzKQorc3RhdGljIGludCBvZl9ncGlvX3NpbXBsZV94bGF0ZShzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCQljb25zdCB2b2lkICpncGlvX3NwZWMsIHUzMiAqZmxhZ3MpCiB7CiAJY29uc3QgX19iZTMyICpncGlvID0gZ3Bpb19zcGVjOwogCWNvbnN0IHUzMiBuID0gYmUzMl90b19jcHVwKGdwaW8pOwpAQCAtMTM3LDEyICsxMzgsMTIgQEAKIAkgKiBudW1iZXIgYW5kIHRoZSBmbGFncyBmcm9tIGEgc2luZ2xlIGdwaW8gY2VsbCAtLSB0aGlzIGlzIHBvc3NpYmxlLAogCSAqIGJ1dCBub3QgcmVjb21tZW5kZWQpLgogCSAqLwotCWlmIChvZl9nYy0+Z3Bpb19jZWxscyA8IDIpIHsKKwlpZiAoZ2MtPm9mX2dwaW9fbl9jZWxscyA8IDIpIHsKIAkJV0FSTl9PTigxKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKG4gPiBvZl9nYy0+Z2MubmdwaW8pCisJaWYgKG4gPiBnYy0+bmdwaW8pCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGZsYWdzKQpAQCAtMTUwLDcgKzE1MSw2IEBACiAKIAlyZXR1cm4gbjsKIH0KLUVYUE9SVF9TWU1CT0wob2ZfZ3Bpb19zaW1wbGVfeGxhdGUpOwogCiAvKioKICAqIG9mX21tX2dwaW9jaGlwX2FkZCAtIEFkZCBtZW1vcnkgbWFwcGVkIEdQSU8gY2hpcCAoYmFuaykKQEAgLTE2MSwxMCArMTYxLDggQEAKICAqCiAgKiAxKSBJbiB0aGUgZ3Bpb19jaGlwIHN0cnVjdHVyZToKICAqICAgIC0gYWxsIHRoZSBjYWxsYmFja3MKLSAqCi0gKiAyKSBJbiB0aGUgb2ZfZ3Bpb19jaGlwIHN0cnVjdHVyZToKLSAqICAgIC0gZ3Bpb19jZWxscwotICogICAgLSB4bGF0ZSBjYWxsYmFjayAob3B0aW9uYWwpCisgKiAgICAtIG9mX2dwaW9fbl9jZWxscworICogICAgLSBvZl94bGF0ZSBjYWxsYmFjayAob3B0aW9uYWwpCiAgKgogICogMykgSW4gdGhlIG9mX21tX2dwaW9fY2hpcCBzdHJ1Y3R1cmU6CiAgKiAgICAtIHNhdmVfcmVncyBjYWxsYmFjayAob3B0aW9uYWwpCkBAIC0xNzcsOCArMTc1LDcgQEAKIAkJICAgICAgIHN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djKQogewogCWludCByZXQgPSAtRU5PTUVNOwotCXN0cnVjdCBvZl9ncGlvX2NoaXAgKm9mX2djID0gJm1tX2djLT5vZl9nYzsKLQlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9ICZvZl9nYy0+Z2M7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSAmbW1fZ2MtPmdjOwogCiAJZ2MtPmxhYmVsID0ga3N0cmR1cChucC0+ZnVsbF9uYW1lLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWdjLT5sYWJlbCkKQEAgLTE5MCwyNiArMTg3LDE5IEBACiAKIAlnYy0+YmFzZSA9IC0xOwogCi0JaWYgKCFvZl9nYy0+eGxhdGUpCi0JCW9mX2djLT54bGF0ZSA9IG9mX2dwaW9fc2ltcGxlX3hsYXRlOwotCiAJaWYgKG1tX2djLT5zYXZlX3JlZ3MpCiAJCW1tX2djLT5zYXZlX3JlZ3MobW1fZ2MpOwogCi0JbnAtPmRhdGEgPSBvZl9nYzsKKwltbV9nYy0+Z2Mub2Zfbm9kZSA9IG5wOwogCiAJcmV0ID0gZ3Bpb2NoaXBfYWRkKGdjKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjI7CiAKLQkvKiBXZSBkb24ndCB3YW50IHRvIGxvc2UgdGhlIG5vZGUgYW5kIGl0cyAtPmRhdGEgKi8KLQlvZl9ub2RlX2dldChucCk7Ci0KIAlwcl9kZWJ1ZygiJXM6IHJlZ2lzdGVyZWQgYXMgZ2VuZXJpYyBHUElPIGNoaXAsIGJhc2UgaXMgJWRcbiIsCiAJCSBucC0+ZnVsbF9uYW1lLCBnYy0+YmFzZSk7CiAJcmV0dXJuIDA7CiBlcnIyOgotCW5wLT5kYXRhID0gTlVMTDsKIAlpb3VubWFwKG1tX2djLT5yZWdzKTsKIGVycjE6CiAJa2ZyZWUoZ2MtPmxhYmVsKTsKQEAgLTIxOSwzICsyMDksMzYgQEAKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChvZl9tbV9ncGlvY2hpcF9hZGQpOworCit2b2lkIG9mX2dwaW9jaGlwX2FkZChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwKQoreworCWlmICgoIWNoaXAtPm9mX25vZGUpICYmIChjaGlwLT5kZXYpKQorCQljaGlwLT5vZl9ub2RlID0gY2hpcC0+ZGV2LT5vZl9ub2RlOworCisJaWYgKCFjaGlwLT5vZl9ub2RlKQorCQlyZXR1cm47CisKKwlpZiAoIWNoaXAtPm9mX3hsYXRlKSB7CisJCWNoaXAtPm9mX2dwaW9fbl9jZWxscyA9IDI7CisJCWNoaXAtPm9mX3hsYXRlID0gb2ZfZ3Bpb19zaW1wbGVfeGxhdGU7CisJfQorCisJb2Zfbm9kZV9nZXQoY2hpcC0+b2Zfbm9kZSk7Cit9CisKK3ZvaWQgb2ZfZ3Bpb2NoaXBfcmVtb3ZlKHN0cnVjdCBncGlvX2NoaXAgKmNoaXApCit7CisJaWYgKGNoaXAtPm9mX25vZGUpCisJCW9mX25vZGVfcHV0KGNoaXAtPm9mX25vZGUpOworfQorCisvKiBQcml2YXRlIGZ1bmN0aW9uIGZvciByZXNvbHZpbmcgbm9kZSBwb2ludGVyIHRvIGdwaW9fY2hpcCAqLworc3RhdGljIGludCBvZl9ncGlvY2hpcF9pc19tYXRjaChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB2b2lkICpkYXRhKQoreworCXJldHVybiBjaGlwLT5vZl9ub2RlID09IGRhdGE7Cit9CisKK3N0cnVjdCBncGlvX2NoaXAgKm9mX25vZGVfdG9fZ3Bpb2NoaXAoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlyZXR1cm4gZ3Bpb2NoaXBfZmluZChucCwgb2ZfZ3Bpb2NoaXBfaXNfbWF0Y2gpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9pcnEuYyBiL2RyaXZlcnMvb2YvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU1OTVlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvb2YvaXJxLmMKQEAgLTAsMCArMSwzNDkgQEAKKy8qCisgKiAgRGVyaXZlZCBmcm9tIGFyY2gvaTM4Ni9rZXJuZWwvaXJxLmMKKyAqICAgIENvcHlyaWdodCAoQykgMTk5MiBMaW51cyBUb3J2YWxkcworICogIEFkYXB0ZWQgZnJvbSBhcmNoL2kzODYgYnkgR2FyeSBUaG9tYXMKKyAqICAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk2IEdhcnkgVGhvbWFzIChnZHRAbGludXhwcGMub3JnKQorICogIFVwZGF0ZWQgYW5kIG1vZGlmaWVkIGJ5IENvcnQgRG91Z2FuIDxjb3J0QGZzbWxhYnMuY29tPgorICogICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDEgQ29ydCBEb3VnYW4KKyAqICBBZGFwdGVkIGZvciBQb3dlciBNYWNpbnRvc2ggYnkgUGF1bCBNYWNrZXJyYXMKKyAqICAgIENvcHlyaWdodCAoQykgMTk5NiBQYXVsIE1hY2tlcnJhcyAocGF1bHVzQGNzLmFudS5lZHUuYXUpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGNvZGUgdXNlZCB0byBtYWtlIElSUSBkZXNjcmlwdGlvbnMgaW4gdGhlCisgKiBkZXZpY2UgdHJlZSB0byBhY3R1YWwgaXJxIG51bWJlcnMgb24gYW4gaW50ZXJydXB0IGNvbnRyb2xsZXIKKyAqIGRyaXZlci4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCisvKioKKyAqIGlycV9vZl9wYXJzZV9hbmRfbWFwIC0gUGFyc2UgYW5kIG1hcCBhbiBpbnRlcnJ1cHQgaW50byBsaW51eCB2aXJxIHNwYWNlCisgKiBAZGV2aWNlOiBEZXZpY2Ugbm9kZSBvZiB0aGUgZGV2aWNlIHdob3NlIGludGVycnVwdCBpcyB0byBiZSBtYXBwZWQKKyAqIEBpbmRleDogSW5kZXggb2YgdGhlIGludGVycnVwdCB0byBtYXAKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGEgd3JhcHBlciB0aGF0IGNoYWlucyBvZl9pcnFfbWFwX29uZSgpIGFuZAorICogaXJxX2NyZWF0ZV9vZl9tYXBwaW5nKCkgdG8gbWFrZSB0aGluZ3MgZWFzaWVyIHRvIGNhbGxlcnMKKyAqLwordW5zaWduZWQgaW50IGlycV9vZl9wYXJzZV9hbmRfbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCBpbnQgaW5kZXgpCit7CisJc3RydWN0IG9mX2lycSBvaXJxOworCisJaWYgKG9mX2lycV9tYXBfb25lKGRldiwgaW5kZXgsICZvaXJxKSkKKwkJcmV0dXJuIE5PX0lSUTsKKworCXJldHVybiBpcnFfY3JlYXRlX29mX21hcHBpbmcob2lycS5jb250cm9sbGVyLCBvaXJxLnNwZWNpZmllciwKKwkJCQkgICAgIG9pcnEuc2l6ZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpcnFfb2ZfcGFyc2VfYW5kX21hcCk7CisKKy8qKgorICogb2ZfaXJxX2ZpbmRfcGFyZW50IC0gR2l2ZW4gYSBkZXZpY2Ugbm9kZSwgZmluZCBpdHMgaW50ZXJydXB0IHBhcmVudCBub2RlCisgKiBAY2hpbGQ6IHBvaW50ZXIgdG8gZGV2aWNlIG5vZGUKKyAqCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgaW50ZXJydXB0IHBhcmVudCBub2RlLCBvciBOVUxMIGlmIHRoZSBpbnRlcnJ1cHQKKyAqIHBhcmVudCBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4KKyAqLworc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfaXJxX2ZpbmRfcGFyZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpwOworCWNvbnN0IF9fYmUzMiAqcGFycDsKKworCWlmICghb2Zfbm9kZV9nZXQoY2hpbGQpKQorCQlyZXR1cm4gTlVMTDsKKworCWRvIHsKKwkJcGFycCA9IG9mX2dldF9wcm9wZXJ0eShjaGlsZCwgImludGVycnVwdC1wYXJlbnQiLCBOVUxMKTsKKwkJaWYgKHBhcnAgPT0gTlVMTCkKKwkJCXAgPSBvZl9nZXRfcGFyZW50KGNoaWxkKTsKKwkJZWxzZSB7CisJCQlpZiAob2ZfaXJxX3dvcmthcm91bmRzICYgT0ZfSU1BUF9OT19QSEFORExFKQorCQkJCXAgPSBvZl9ub2RlX2dldChvZl9pcnFfZGZsdF9waWMpOworCQkJZWxzZQorCQkJCXAgPSBvZl9maW5kX25vZGVfYnlfcGhhbmRsZShiZTMyX3RvX2NwdXAocGFycCkpOworCQl9CisJCW9mX25vZGVfcHV0KGNoaWxkKTsKKwkJY2hpbGQgPSBwOworCX0gd2hpbGUgKHAgJiYgb2ZfZ2V0X3Byb3BlcnR5KHAsICIjaW50ZXJydXB0LWNlbGxzIiwgTlVMTCkgPT0gTlVMTCk7CisKKwlyZXR1cm4gcDsKK30KKworLyoqCisgKiBvZl9pcnFfbWFwX3JhdyAtIExvdyBsZXZlbCBpbnRlcnJ1cHQgdHJlZSBwYXJzaW5nCisgKiBAcGFyZW50Ogl0aGUgZGV2aWNlIGludGVycnVwdCBwYXJlbnQKKyAqIEBpbnRzcGVjOglpbnRlcnJ1cHQgc3BlY2lmaWVyICgiaW50ZXJydXB0cyIgcHJvcGVydHkgb2YgdGhlIGRldmljZSkKKyAqIEBvaW50c2l6ZTogICBzaXplIG9mIHRoZSBwYXNzZWQgaW4gaW50ZXJydXB0IHNwZWNpZmllcgorICogQGFkZHI6CWFkZHJlc3Mgc3BlY2lmaWVyIChzdGFydCBvZiAicmVnIiBwcm9wZXJ0eSBvZiB0aGUgZGV2aWNlKQorICogQG91dF9pcnE6CXN0cnVjdHVyZSBvZl9pcnEgZmlsbGVkIGJ5IHRoaXMgZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgYSBuZWdhdGl2ZSBudW1iZXIgb24gZXJyb3IKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGEgbG93LWxldmVsIGludGVycnVwdCB0cmVlIHdhbGtpbmcgZnVuY3Rpb24uIEl0CisgKiBjYW4gYmUgdXNlZCB0byBkbyBhIHBhcnRpYWwgd2FsayB3aXRoIHN5bnRoZXRpemVkIHJlZyBhbmQgaW50ZXJydXB0cworICogcHJvcGVydGllcywgZm9yIGV4YW1wbGUgd2hlbiByZXNvbHZpbmcgUENJIGludGVycnVwdHMgd2hlbiBubyBkZXZpY2UKKyAqIG5vZGUgZXhpc3QgZm9yIHRoZSBwYXJlbnQuCisgKi8KK2ludCBvZl9pcnFfbWFwX3JhdyhzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCwgY29uc3QgX19iZTMyICppbnRzcGVjLAorCQkgICB1MzIgb2ludHNpemUsIGNvbnN0IF9fYmUzMiAqYWRkciwgc3RydWN0IG9mX2lycSAqb3V0X2lycSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmlwYXIsICp0bm9kZSwgKm9sZCA9IE5VTEwsICpuZXdwYXIgPSBOVUxMOworCWNvbnN0IF9fYmUzMiAqdG1wLCAqaW1hcCwgKmltYXNrOworCXUzMiBpbnRzaXplID0gMSwgYWRkcnNpemUsIG5ld2ludHNpemUgPSAwLCBuZXdhZGRyc2l6ZSA9IDA7CisJaW50IGltYXBsZW4sIG1hdGNoLCBpOworCisJcHJfZGVidWcoIm9mX2lycV9tYXBfcmF3OiBwYXI9JXMsaW50c3BlYz1bMHglMDh4IDB4JTA4eC4uLl0sb2ludHNpemU9JWRcbiIsCisJCSBwYXJlbnQtPmZ1bGxfbmFtZSwgYmUzMl90b19jcHVwKGludHNwZWMpLAorCQkgYmUzMl90b19jcHVwKGludHNwZWMgKyAxKSwgb2ludHNpemUpOworCisJaXBhciA9IG9mX25vZGVfZ2V0KHBhcmVudCk7CisKKwkvKiBGaXJzdCBnZXQgdGhlICNpbnRlcnJ1cHQtY2VsbHMgcHJvcGVydHkgb2YgdGhlIGN1cnJlbnQgY3Vyc29yCisJICogdGhhdCB0ZWxscyB1cyBob3cgdG8gaW50ZXJwcmV0IHRoZSBwYXNzZWQtaW4gaW50c3BlYy4gSWYgdGhlcmUKKwkgKiBpcyBub25lLCB3ZSBhcmUgbmljZSBhbmQganVzdCB3YWxrIHVwIHRoZSB0cmVlCisJICovCisJZG8geworCQl0bXAgPSBvZl9nZXRfcHJvcGVydHkoaXBhciwgIiNpbnRlcnJ1cHQtY2VsbHMiLCBOVUxMKTsKKwkJaWYgKHRtcCAhPSBOVUxMKSB7CisJCQlpbnRzaXplID0gYmUzMl90b19jcHUoKnRtcCk7CisJCQlicmVhazsKKwkJfQorCQl0bm9kZSA9IGlwYXI7CisJCWlwYXIgPSBvZl9pcnFfZmluZF9wYXJlbnQoaXBhcik7CisJCW9mX25vZGVfcHV0KHRub2RlKTsKKwl9IHdoaWxlIChpcGFyKTsKKwlpZiAoaXBhciA9PSBOVUxMKSB7CisJCXByX2RlYnVnKCIgLT4gbm8gcGFyZW50IGZvdW5kICFcbiIpOworCQlnb3RvIGZhaWw7CisJfQorCisJcHJfZGVidWcoIm9mX2lycV9tYXBfcmF3OiBpcGFyPSVzLCBzaXplPSVkXG4iLCBpcGFyLT5mdWxsX25hbWUsIGludHNpemUpOworCisJaWYgKG9pbnRzaXplICE9IGludHNpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogTG9vayBmb3IgdGhpcyAjYWRkcmVzcy1jZWxscy4gV2UgaGF2ZSB0byBpbXBsZW1lbnQgdGhlIG9sZCBsaW51eAorCSAqIHRyaWNrIG9mIGxvb2tpbmcgZm9yIHRoZSBwYXJlbnQgaGVyZSBhcyBzb21lIGRldmljZS10cmVlcyByZWx5IG9uIGl0CisJICovCisJb2xkID0gb2Zfbm9kZV9nZXQoaXBhcik7CisJZG8geworCQl0bXAgPSBvZl9nZXRfcHJvcGVydHkob2xkLCAiI2FkZHJlc3MtY2VsbHMiLCBOVUxMKTsKKwkJdG5vZGUgPSBvZl9nZXRfcGFyZW50KG9sZCk7CisJCW9mX25vZGVfcHV0KG9sZCk7CisJCW9sZCA9IHRub2RlOworCX0gd2hpbGUgKG9sZCAmJiB0bXAgPT0gTlVMTCk7CisJb2Zfbm9kZV9wdXQob2xkKTsKKwlvbGQgPSBOVUxMOworCWFkZHJzaXplID0gKHRtcCA9PSBOVUxMKSA/IDIgOiBiZTMyX3RvX2NwdSgqdG1wKTsKKworCXByX2RlYnVnKCIgLT4gYWRkcnNpemU9JWRcbiIsIGFkZHJzaXplKTsKKworCS8qIE5vdyBzdGFydCB0aGUgYWN0dWFsICJwcm9wZXIiIHdhbGsgb2YgdGhlIGludGVycnVwdCB0cmVlICovCisJd2hpbGUgKGlwYXIgIT0gTlVMTCkgeworCQkvKiBOb3cgY2hlY2sgaWYgY3Vyc29yIGlzIGFuIGludGVycnVwdC1jb250cm9sbGVyIGFuZCBpZiBpdCBpcworCQkgKiB0aGVuIHdlIGFyZSBkb25lCisJCSAqLworCQlpZiAob2ZfZ2V0X3Byb3BlcnR5KGlwYXIsICJpbnRlcnJ1cHQtY29udHJvbGxlciIsIE5VTEwpICE9CisJCQkJTlVMTCkgeworCQkJcHJfZGVidWcoIiAtPiBnb3QgaXQgIVxuIik7CisJCQlmb3IgKGkgPSAwOyBpIDwgaW50c2l6ZTsgaSsrKQorCQkJCW91dF9pcnEtPnNwZWNpZmllcltpXSA9CisJCQkJCQlvZl9yZWFkX251bWJlcihpbnRzcGVjICtpLCAxKTsKKwkJCW91dF9pcnEtPnNpemUgPSBpbnRzaXplOworCQkJb3V0X2lycS0+Y29udHJvbGxlciA9IGlwYXI7CisJCQlvZl9ub2RlX3B1dChvbGQpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKiBOb3cgbG9vayBmb3IgYW4gaW50ZXJydXB0LW1hcCAqLworCQlpbWFwID0gb2ZfZ2V0X3Byb3BlcnR5KGlwYXIsICJpbnRlcnJ1cHQtbWFwIiwgJmltYXBsZW4pOworCQkvKiBObyBpbnRlcnJ1cHQgbWFwLCBjaGVjayBmb3IgYW4gaW50ZXJydXB0IHBhcmVudCAqLworCQlpZiAoaW1hcCA9PSBOVUxMKSB7CisJCQlwcl9kZWJ1ZygiIC0+IG5vIG1hcCwgZ2V0dGluZyBwYXJlbnRcbiIpOworCQkJbmV3cGFyID0gb2ZfaXJxX2ZpbmRfcGFyZW50KGlwYXIpOworCQkJZ290byBza2lwbGV2ZWw7CisJCX0KKwkJaW1hcGxlbiAvPSBzaXplb2YodTMyKTsKKworCQkvKiBMb29rIGZvciBhIG1hc2sgKi8KKwkJaW1hc2sgPSBvZl9nZXRfcHJvcGVydHkoaXBhciwgImludGVycnVwdC1tYXAtbWFzayIsIE5VTEwpOworCisJCS8qIElmIHdlIHdlcmUgcGFzc2VkIG5vICJyZWciIHByb3BlcnR5IGFuZCB3ZSBhdHRlbXB0IHRvIHBhcnNlCisJCSAqIGFuIGludGVycnVwdC1tYXAsIHRoZW4gI2FkZHJlc3MtY2VsbHMgbXVzdCBiZSAwLgorCQkgKiBGYWlsIGlmIGl0J3Mgbm90LgorCQkgKi8KKwkJaWYgKGFkZHIgPT0gTlVMTCAmJiBhZGRyc2l6ZSAhPSAwKSB7CisJCQlwcl9kZWJ1ZygiIC0+IG5vIHJlZyBwYXNzZWQgaW4gd2hlbiBuZWVkZWQgIVxuIik7CisJCQlnb3RvIGZhaWw7CisJCX0KKworCQkvKiBQYXJzZSBpbnRlcnJ1cHQtbWFwICovCisJCW1hdGNoID0gMDsKKwkJd2hpbGUgKGltYXBsZW4gPiAoYWRkcnNpemUgKyBpbnRzaXplICsgMSkgJiYgIW1hdGNoKSB7CisJCQkvKiBDb21wYXJlIHNwZWNpZmllcnMgKi8KKwkJCW1hdGNoID0gMTsKKwkJCWZvciAoaSA9IDA7IGkgPCBhZGRyc2l6ZSAmJiBtYXRjaDsgKytpKSB7CisJCQkJdTMyIG1hc2sgPSBpbWFzayA/IGltYXNrW2ldIDogMHhmZmZmZmZmZnU7CisJCQkJbWF0Y2ggPSAoKGFkZHJbaV0gXiBpbWFwW2ldKSAmIG1hc2spID09IDA7CisJCQl9CisJCQlmb3IgKDsgaSA8IChhZGRyc2l6ZSArIGludHNpemUpICYmIG1hdGNoOyArK2kpIHsKKwkJCQl1MzIgbWFzayA9IGltYXNrID8gaW1hc2tbaV0gOiAweGZmZmZmZmZmdTsKKwkJCQltYXRjaCA9CisJCQkJICAgKChpbnRzcGVjW2ktYWRkcnNpemVdIF4gaW1hcFtpXSkgJiBtYXNrKSA9PSAwOworCQkJfQorCQkJaW1hcCArPSBhZGRyc2l6ZSArIGludHNpemU7CisJCQlpbWFwbGVuIC09IGFkZHJzaXplICsgaW50c2l6ZTsKKworCQkJcHJfZGVidWcoIiAtPiBtYXRjaD0lZCAoaW1hcGxlbj0lZClcbiIsIG1hdGNoLCBpbWFwbGVuKTsKKworCQkJLyogR2V0IHRoZSBpbnRlcnJ1cHQgcGFyZW50ICovCisJCQlpZiAob2ZfaXJxX3dvcmthcm91bmRzICYgT0ZfSU1BUF9OT19QSEFORExFKQorCQkJCW5ld3BhciA9IG9mX25vZGVfZ2V0KG9mX2lycV9kZmx0X3BpYyk7CisJCQllbHNlCisJCQkJbmV3cGFyID0gb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUoYmUzMl90b19jcHVwKGltYXApKTsKKwkJCWltYXArKzsKKwkJCS0taW1hcGxlbjsKKworCQkJLyogQ2hlY2sgaWYgbm90IGZvdW5kICovCisJCQlpZiAobmV3cGFyID09IE5VTEwpIHsKKwkJCQlwcl9kZWJ1ZygiIC0+IGltYXAgcGFyZW50IG5vdCBmb3VuZCAhXG4iKTsKKwkJCQlnb3RvIGZhaWw7CisJCQl9CisKKwkJCS8qIEdldCAjaW50ZXJydXB0LWNlbGxzIGFuZCAjYWRkcmVzcy1jZWxscyBvZiBuZXcKKwkJCSAqIHBhcmVudAorCQkJICovCisJCQl0bXAgPSBvZl9nZXRfcHJvcGVydHkobmV3cGFyLCAiI2ludGVycnVwdC1jZWxscyIsIE5VTEwpOworCQkJaWYgKHRtcCA9PSBOVUxMKSB7CisJCQkJcHJfZGVidWcoIiAtPiBwYXJlbnQgbGFja3MgI2ludGVycnVwdC1jZWxscyFcbiIpOworCQkJCWdvdG8gZmFpbDsKKwkJCX0KKwkJCW5ld2ludHNpemUgPSBiZTMyX3RvX2NwdSgqdG1wKTsKKwkJCXRtcCA9IG9mX2dldF9wcm9wZXJ0eShuZXdwYXIsICIjYWRkcmVzcy1jZWxscyIsIE5VTEwpOworCQkJbmV3YWRkcnNpemUgPSAodG1wID09IE5VTEwpID8gMCA6IGJlMzJfdG9fY3B1KCp0bXApOworCisJCQlwcl9kZWJ1ZygiIC0+IG5ld2ludHNpemU9JWQsIG5ld2FkZHJzaXplPSVkXG4iLAorCQkJICAgIG5ld2ludHNpemUsIG5ld2FkZHJzaXplKTsKKworCQkJLyogQ2hlY2sgZm9yIG1hbGZvcm1lZCBwcm9wZXJ0aWVzICovCisJCQlpZiAoaW1hcGxlbiA8IChuZXdhZGRyc2l6ZSArIG5ld2ludHNpemUpKQorCQkJCWdvdG8gZmFpbDsKKworCQkJaW1hcCArPSBuZXdhZGRyc2l6ZSArIG5ld2ludHNpemU7CisJCQlpbWFwbGVuIC09IG5ld2FkZHJzaXplICsgbmV3aW50c2l6ZTsKKworCQkJcHJfZGVidWcoIiAtPiBpbWFwbGVuPSVkXG4iLCBpbWFwbGVuKTsKKwkJfQorCQlpZiAoIW1hdGNoKQorCQkJZ290byBmYWlsOworCisJCW9mX25vZGVfcHV0KG9sZCk7CisJCW9sZCA9IG9mX25vZGVfZ2V0KG5ld3Bhcik7CisJCWFkZHJzaXplID0gbmV3YWRkcnNpemU7CisJCWludHNpemUgPSBuZXdpbnRzaXplOworCQlpbnRzcGVjID0gaW1hcCAtIGludHNpemU7CisJCWFkZHIgPSBpbnRzcGVjIC0gYWRkcnNpemU7CisKKwlza2lwbGV2ZWw6CisJCS8qIEl0ZXJhdGUgYWdhaW4gd2l0aCBuZXcgcGFyZW50ICovCisJCXByX2RlYnVnKCIgLT4gbmV3IHBhcmVudDogJXNcbiIsIG5ld3BhciA/IG5ld3Bhci0+ZnVsbF9uYW1lIDogIjw+Iik7CisJCW9mX25vZGVfcHV0KGlwYXIpOworCQlpcGFyID0gbmV3cGFyOworCQluZXdwYXIgPSBOVUxMOworCX0KKyBmYWlsOgorCW9mX25vZGVfcHV0KGlwYXIpOworCW9mX25vZGVfcHV0KG9sZCk7CisJb2Zfbm9kZV9wdXQobmV3cGFyKTsKKworCXJldHVybiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTF9HUEwob2ZfaXJxX21hcF9yYXcpOworCisvKioKKyAqIG9mX2lycV9tYXBfb25lIC0gUmVzb2x2ZSBhbiBpbnRlcnJ1cHQgZm9yIGEgZGV2aWNlCisgKiBAZGV2aWNlOiB0aGUgZGV2aWNlIHdob3NlIGludGVycnVwdCBpcyB0byBiZSByZXNvbHZlZAorICogQGluZGV4OiBpbmRleCBvZiB0aGUgaW50ZXJydXB0IHRvIHJlc29sdmUKKyAqIEBvdXRfaXJxOiBzdHJ1Y3R1cmUgb2ZfaXJxIGZpbGxlZCBieSB0aGlzIGZ1bmN0aW9uCisgKgorICogVGhpcyBmdW5jdGlvbiByZXNvbHZlcyBhbiBpbnRlcnJ1cHQsIHdhbGtpbmcgdGhlIHRyZWUsIGZvciBhIGdpdmVuCisgKiBkZXZpY2UtdHJlZSBub2RlLiBJdCdzIHRoZSBoaWdoIGxldmVsIHBlbmRhbnQgdG8gb2ZfaXJxX21hcF9yYXcoKS4KKyAqLworaW50IG9mX2lycV9tYXBfb25lKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlLCBpbnQgaW5kZXgsIHN0cnVjdCBvZl9pcnEgKm91dF9pcnEpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpwOworCWNvbnN0IF9fYmUzMiAqaW50c3BlYywgKnRtcCwgKmFkZHI7CisJdTMyIGludHNpemUsIGludGxlbjsKKwlpbnQgcmVzID0gLUVJTlZBTDsKKworCXByX2RlYnVnKCJvZl9pcnFfbWFwX29uZTogZGV2PSVzLCBpbmRleD0lZFxuIiwgZGV2aWNlLT5mdWxsX25hbWUsIGluZGV4KTsKKworCS8qIE9sZFdvcmxkIG1hYyBzdHVmZiBpcyAic3BlY2lhbCIsIGhhbmRsZSBvdXQgb2YgbGluZSAqLworCWlmIChvZl9pcnFfd29ya2Fyb3VuZHMgJiBPRl9JTUFQX09MRFdPUkxEX01BQykKKwkJcmV0dXJuIG9mX2lycV9tYXBfb2xkd29ybGQoZGV2aWNlLCBpbmRleCwgb3V0X2lycSk7CisKKwkvKiBHZXQgdGhlIGludGVycnVwdHMgcHJvcGVydHkgKi8KKwlpbnRzcGVjID0gb2ZfZ2V0X3Byb3BlcnR5KGRldmljZSwgImludGVycnVwdHMiLCAmaW50bGVuKTsKKwlpZiAoaW50c3BlYyA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpbnRsZW4gLz0gc2l6ZW9mKCppbnRzcGVjKTsKKworCXByX2RlYnVnKCIgaW50c3BlYz0lZCBpbnRsZW49JWRcbiIsIGJlMzJfdG9fY3B1cChpbnRzcGVjKSwgaW50bGVuKTsKKworCS8qIEdldCB0aGUgcmVnIHByb3BlcnR5IChpZiBhbnkpICovCisJYWRkciA9IG9mX2dldF9wcm9wZXJ0eShkZXZpY2UsICJyZWciLCBOVUxMKTsKKworCS8qIExvb2sgZm9yIHRoZSBpbnRlcnJ1cHQgcGFyZW50LiAqLworCXAgPSBvZl9pcnFfZmluZF9wYXJlbnQoZGV2aWNlKTsKKwlpZiAocCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEdldCBzaXplIG9mIGludGVycnVwdCBzcGVjaWZpZXIgKi8KKwl0bXAgPSBvZl9nZXRfcHJvcGVydHkocCwgIiNpbnRlcnJ1cHQtY2VsbHMiLCBOVUxMKTsKKwlpZiAodG1wID09IE5VTEwpCisJCWdvdG8gb3V0OworCWludHNpemUgPSBiZTMyX3RvX2NwdSgqdG1wKTsKKworCXByX2RlYnVnKCIgaW50c2l6ZT0lZCBpbnRsZW49JWRcbiIsIGludHNpemUsIGludGxlbik7CisKKwkvKiBDaGVjayBpbmRleCAqLworCWlmICgoaW5kZXggKyAxKSAqIGludHNpemUgPiBpbnRsZW4pCisJCWdvdG8gb3V0OworCisJLyogR2V0IG5ldyBzcGVjaWZpZXIgYW5kIG1hcCBpdCAqLworCXJlcyA9IG9mX2lycV9tYXBfcmF3KHAsIGludHNwZWMgKyBpbmRleCAqIGludHNpemUsIGludHNpemUsCisJCQkgICAgIGFkZHIsIG91dF9pcnEpOworIG91dDoKKwlvZl9ub2RlX3B1dChwKTsKKwlyZXR1cm4gcmVzOworfQorRVhQT1JUX1NZTUJPTF9HUEwob2ZfaXJxX21hcF9vbmUpOworCisvKioKKyAqIG9mX2lycV90b19yZXNvdXJjZSAtIERlY29kZSBhIG5vZGUncyBJUlEgYW5kIHJldHVybiBpdCBhcyBhIHJlc291cmNlCisgKiBAZGV2OiBwb2ludGVyIHRvIGRldmljZSB0cmVlIG5vZGUKKyAqIEBpbmRleDogemVyby1iYXNlZCBpbmRleCBvZiB0aGUgaXJxCisgKiBAcjogcG9pbnRlciB0byByZXNvdXJjZSBzdHJ1Y3R1cmUgdG8gcmV0dXJuIHJlc3VsdCBpbnRvLgorICovCitpbnQgb2ZfaXJxX3RvX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCBpbnQgaW5kZXgsIHN0cnVjdCByZXNvdXJjZSAqcikKK3sKKwlpbnQgaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoZGV2LCBpbmRleCk7CisKKwkvKiBPbmx5IGRlcmVmZXJlbmNlIHRoZSByZXNvdXJjZSBpZiBib3RoIHRoZQorCSAqIHJlc291cmNlIGFuZCB0aGUgaXJxIGFyZSB2YWxpZC4gKi8KKwlpZiAociAmJiBpcnEgIT0gTk9fSVJRKSB7CisJCXItPnN0YXJ0ID0gci0+ZW5kID0gaXJxOworCQlyLT5mbGFncyA9IElPUkVTT1VSQ0VfSVJROworCQlyLT5uYW1lID0gZGV2LT5mdWxsX25hbWU7CisJfQorCisJcmV0dXJuIGlycTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG9mX2lycV90b19yZXNvdXJjZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL29mX2kyYy5jIGIvZHJpdmVycy9vZi9vZl9pMmMuYwppbmRleCBhYjY1MjJjLi4wYTY5NGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL29mX2kyYy5jCisrKyBiL2RyaXZlcnMvb2Yvb2ZfaTJjLmMKQEAgLTE0LDU3ICsxNCw2NSBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfaTJjLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKLXZvaWQgb2ZfcmVnaXN0ZXJfaTJjX2RldmljZXMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLAotCQkJICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmFkYXBfbm9kZSkKK3ZvaWQgb2ZfaTJjX3JlZ2lzdGVyX2RldmljZXMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQogewogCXZvaWQgKnJlc3VsdDsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7CiAKLQlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKGFkYXBfbm9kZSwgbm9kZSkgeworCS8qIE9ubHkgcmVnaXN0ZXIgY2hpbGQgZGV2aWNlcyBpZiB0aGUgYWRhcHRlciBoYXMgYSBub2RlIHBvaW50ZXIgc2V0ICovCisJaWYgKCFhZGFwLT5kZXYub2Zfbm9kZSkKKwkJcmV0dXJuOworCisJZGV2X2RiZygmYWRhcC0+ZGV2LCAib2ZfaTJjOiB3YWxraW5nIGNoaWxkIG5vZGVzXG4iKTsKKworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUoYWRhcC0+ZGV2Lm9mX25vZGUsIG5vZGUpIHsKIAkJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm8gPSB7fTsKIAkJc3RydWN0IGRldl9hcmNoZGF0YSBkZXZfYWQgPSB7fTsKIAkJY29uc3QgX19iZTMyICphZGRyOwogCQlpbnQgbGVuOwogCi0JCWlmIChvZl9tb2RhbGlhc19ub2RlKG5vZGUsIGluZm8udHlwZSwgc2l6ZW9mKGluZm8udHlwZSkpIDwgMCkKKwkJZGV2X2RiZygmYWRhcC0+ZGV2LCAib2ZfaTJjOiByZWdpc3RlciAlc1xuIiwgbm9kZS0+ZnVsbF9uYW1lKTsKKworCQlpZiAob2ZfbW9kYWxpYXNfbm9kZShub2RlLCBpbmZvLnR5cGUsIHNpemVvZihpbmZvLnR5cGUpKSA8IDApIHsKKwkJCWRldl9lcnIoJmFkYXAtPmRldiwgIm9mX2kyYzogbW9kYWxpYXMgZmFpbHVyZSBvbiAlc1xuIiwKKwkJCQlub2RlLT5mdWxsX25hbWUpOwogCQkJY29udGludWU7CisJCX0KIAogCQlhZGRyID0gb2ZfZ2V0X3Byb3BlcnR5KG5vZGUsICJyZWciLCAmbGVuKTsKLQkJaWYgKCFhZGRyIHx8IGxlbiA8IHNpemVvZihpbnQpIHx8ICphZGRyID4gKDEgPDwgMTApIC0gMSkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIm9mLWkyYzogaW52YWxpZCBpMmMgZGV2aWNlIGVudHJ5XG4iKTsKKwkJaWYgKCFhZGRyIHx8IChsZW4gPCBzaXplb2YoaW50KSkpIHsKKwkJCWRldl9lcnIoJmFkYXAtPmRldiwgIm9mX2kyYzogaW52YWxpZCByZWcgb24gJXNcbiIsCisJCQkJbm9kZS0+ZnVsbF9uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaW5mby5hZGRyID0gYmUzMl90b19jcHVwKGFkZHIpOworCQlpZiAoaW5mby5hZGRyID4gKDEgPDwgMTApIC0gMSkgeworCQkJZGV2X2VycigmYWRhcC0+ZGV2LCAib2ZfaTJjOiBpbnZhbGlkIGFkZHI9JXggb24gJXNcbiIsCisJCQkJaW5mby5hZGRyLCBub2RlLT5mdWxsX25hbWUpOwogCQkJY29udGludWU7CiAJCX0KIAogCQlpbmZvLmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5vZGUsIDApOwotCi0JCWluZm8uYWRkciA9IGJlMzJfdG9fY3B1cChhZGRyKTsKLQotCQlpbmZvLm9mX25vZGUgPSBub2RlOworCQlpbmZvLm9mX25vZGUgPSBvZl9ub2RlX2dldChub2RlKTsKIAkJaW5mby5hcmNoZGF0YSA9ICZkZXZfYWQ7CiAKIAkJcmVxdWVzdF9tb2R1bGUoIiVzIiwgaW5mby50eXBlKTsKIAogCQlyZXN1bHQgPSBpMmNfbmV3X2RldmljZShhZGFwLCAmaW5mbyk7CiAJCWlmIChyZXN1bHQgPT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIm9mLWkyYzogRmFpbGVkIHRvIGxvYWQgZHJpdmVyIGZvciAlc1xuIiwKLQkJCSAgICAgICBpbmZvLnR5cGUpOworCQkJZGV2X2VycigmYWRhcC0+ZGV2LCAib2ZfaTJjOiBGYWlsdXJlIHJlZ2lzdGVyaW5nICVzXG4iLAorCQkJICAgICAgICBub2RlLT5mdWxsX25hbWUpOworCQkJb2Zfbm9kZV9wdXQobm9kZSk7CiAJCQlpcnFfZGlzcG9zZV9tYXBwaW5nKGluZm8uaXJxKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0KLQkJLyoKLQkJICogR2V0IHRoZSBub2RlIHRvIG5vdCBsb3NlIHRoZSBkZXZfYXJjaGRhdGEtPm9mX25vZGUuCi0JCSAqIEN1cnJlbnRseSB0aGVyZSBpcyBubyB3YXkgdG8gcHV0IGl0IGJhY2ssIGFzIHdlbGwgYXMgbm8KLQkJICogb2ZfdW5yZWdpc3Rlcl9pMmNfZGV2aWNlcygpIGNhbGwuCi0JCSAqLwotCQlvZl9ub2RlX2dldChub2RlKTsKIAl9CiB9Ci1FWFBPUlRfU1lNQk9MKG9mX3JlZ2lzdGVyX2kyY19kZXZpY2VzKTsKK0VYUE9SVF9TWU1CT0wob2ZfaTJjX3JlZ2lzdGVyX2RldmljZXMpOwogCiBzdGF0aWMgaW50IG9mX2Rldl9ub2RlX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2Yvb2ZfbWRpby5jIGIvZHJpdmVycy9vZi9vZl9tZGlvLmMKaW5kZXggNDJhNjcxNS4uMWZjZTAwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9vZl9tZGlvLmMKKysrIGIvZHJpdmVycy9vZi9vZl9tZGlvLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9waHkuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L29mX21kaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9vZl9zcGkuYyBiL2RyaXZlcnMvb2Yvb2Zfc3BpLmMKaW5kZXggNWZlZDdlMy4uMWRiY2U1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9vZl9zcGkuYworKysgYi9kcml2ZXJzL29mL29mX3NwaS5jCkBAIC05LDE3ICs5LDE3IEBACiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvb2Zfc3BpLmg+CiAKIC8qKgogICogb2ZfcmVnaXN0ZXJfc3BpX2RldmljZXMgLSBSZWdpc3RlciBjaGlsZCBkZXZpY2VzIG9udG8gdGhlIFNQSSBidXMKICAqIEBtYXN0ZXI6CVBvaW50ZXIgdG8gc3BpX21hc3RlciBkZXZpY2UKLSAqIEBucDoJCXBhcmVudCBub2RlIG9mIFNQSSBkZXZpY2Ugbm9kZXMKICAqCi0gKiBSZWdpc3RlcnMgYW4gc3BpX2RldmljZSBmb3IgZWFjaCBjaGlsZCBub2RlIG9mICducCcgd2hpY2ggaGFzIGEgJ3JlZycKKyAqIFJlZ2lzdGVycyBhbiBzcGlfZGV2aWNlIGZvciBlYWNoIGNoaWxkIG5vZGUgb2YgbWFzdGVyIG5vZGUgd2hpY2ggaGFzIGEgJ3JlZycKICAqIHByb3BlcnR5LgogICovCi12b2lkIG9mX3JlZ2lzdGVyX3NwaV9kZXZpY2VzKHN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit2b2lkIG9mX3JlZ2lzdGVyX3NwaV9kZXZpY2VzKHN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIpCiB7CiAJc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5jOwpAQCAtMjcsNyArMjcsMTAgQEAKIAlpbnQgcmM7CiAJaW50IGxlbjsKIAotCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobnAsIG5jKSB7CisJaWYgKCFtYXN0ZXItPmRldi5vZl9ub2RlKQorCQlyZXR1cm47CisKKwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKG1hc3Rlci0+ZGV2Lm9mX25vZGUsIG5jKSB7CiAJCS8qIEFsbG9jIGFuIHNwaV9kZXZpY2UgKi8KIAkJc3BpID0gc3BpX2FsbG9jX2RldmljZShtYXN0ZXIpOwogCQlpZiAoIXNwaSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9wbGF0Zm9ybS5jIGIvZHJpdmVycy9vZi9wbGF0Zm9ybS5jCmluZGV4IDdkYWNjMWUuLmJiNzIyMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2YvcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL29mL3BsYXRmb3JtLmMKQEAgLTE0LDggKzE0LDEwNSBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKK3N0YXRpYyBpbnQgb2ZfZGV2X25vZGVfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCXJldHVybiBkZXYtPm9mX25vZGUgPT0gZGF0YTsKK30KKworLyoqCisgKiBvZl9maW5kX2RldmljZV9ieV9ub2RlIC0gRmluZCB0aGUgcGxhdGZvcm1fZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBhIG5vZGUKKyAqIEBucDogUG9pbnRlciB0byBkZXZpY2UgdHJlZSBub2RlCisgKgorICogUmV0dXJucyBwbGF0Zm9ybV9kZXZpY2UgcG9pbnRlciwgb3IgTlVMTCBpZiBub3QgZm91bmQKKyAqLworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCWRldiA9IGJ1c19maW5kX2RldmljZSgmcGxhdGZvcm1fYnVzX3R5cGUsIE5VTEwsIG5wLCBvZl9kZXZfbm9kZV9tYXRjaCk7CisJcmV0dXJuIGRldiA/IHRvX3BsYXRmb3JtX2RldmljZShkZXYpIDogTlVMTDsKK30KK0VYUE9SVF9TWU1CT0wob2ZfZmluZF9kZXZpY2VfYnlfbm9kZSk7CisKK3N0YXRpYyBpbnQgcGxhdGZvcm1fZHJpdmVyX3Byb2JlX3NoaW0oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpwZHJ2OworCXN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgKm9mcGRydjsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKKworCXBkcnYgPSBjb250YWluZXJfb2YocGRldi0+ZGV2LmRyaXZlciwgc3RydWN0IHBsYXRmb3JtX2RyaXZlciwgZHJpdmVyKTsKKwlvZnBkcnYgPSBjb250YWluZXJfb2YocGRydiwgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciwgcGxhdGZvcm1fZHJpdmVyKTsKKworCS8qIFRoZXJlIGlzIGFuIHVubGlrZWx5IGNoYW5jZSB0aGF0IGFuIG9mX3BsYXRmb3JtIGRyaXZlciBtaWdodCBtYXRjaAorCSAqIG9uIGEgbm9uLU9GIHBsYXRmb3JtIGRldmljZS4gIElmIHNvLCB0aGVuIG9mX21hdGNoX2RldmljZSgpIHdpbGwKKwkgKiBjb21lIHVwIGVtcHR5LiAgUmV0dXJuIC1FSU5WQUwgaW4gdGhpcyBjYXNlIHNvIG90aGVyIGRyaXZlcnMgZ2V0CisJICogdGhlIGNoYW5jZSB0byBiaW5kLiAqLworCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKHBkZXYtPmRldi5kcml2ZXItPm9mX21hdGNoX3RhYmxlLCAmcGRldi0+ZGV2KTsKKwlyZXR1cm4gbWF0Y2ggPyBvZnBkcnYtPnByb2JlKHBkZXYsIG1hdGNoKSA6IC1FSU5WQUw7Cit9CisKK3N0YXRpYyB2b2lkIHBsYXRmb3JtX2RyaXZlcl9zaHV0ZG93bl9zaGltKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqcGRydjsKKwlzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyICpvZnBkcnY7CisKKwlwZHJ2ID0gY29udGFpbmVyX29mKHBkZXYtPmRldi5kcml2ZXIsIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIsIGRyaXZlcik7CisJb2ZwZHJ2ID0gY29udGFpbmVyX29mKHBkcnYsIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIsIHBsYXRmb3JtX2RyaXZlcik7CisJb2ZwZHJ2LT5zaHV0ZG93bihwZGV2KTsKK30KKworLyoqCisgKiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIKKyAqLworaW50IG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcihzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyICpkcnYpCit7CisJY2hhciAqb2ZfbmFtZTsKKworCS8qIHNldHVwIG9mX3BsYXRmb3JtX2RyaXZlciB0byBwbGF0Zm9ybV9kcml2ZXIgYWRhcHRvcnMgKi8KKwlkcnYtPnBsYXRmb3JtX2RyaXZlci5kcml2ZXIgPSBkcnYtPmRyaXZlcjsKKworCS8qIFByZWZpeCB0aGUgZHJpdmVyIG5hbWUgd2l0aCAnb2Y6JyB0byBhdm9pZCBuYW1lc3BhY2UgY29sbGlzaW9ucworCSAqIGFuZCBib2d1cyBtYXRjaGVzLiAgVGhlcmUgYXJlIHNvbWUgZHJpdmVycyBpbiB0aGUgdHJlZSB0aGF0CisJICogcmVnaXN0ZXIgYm90aCBhbiBvZl9wbGF0Zm9ybV9kcml2ZXIgYW5kIGEgcGxhdGZvcm1fZHJpdmVyIHdpdGgKKwkgKiB0aGUgc2FtZSBuYW1lLiAgVGhpcyBpcyBhIHRlbXBvcmFyeSBtZWFzdXJlIHVudGlsIHRoZXkgYXJlIGFsbAorCSAqIGNsZWFuZWQgdXAgLS1nY2wgSnVseSAyOSwgMjAxMCAqLworCW9mX25hbWUgPSBrbWFsbG9jKHN0cmxlbihkcnYtPmRyaXZlci5uYW1lKSArIDUsIEdGUF9LRVJORUwpOworCWlmICghb2ZfbmFtZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJc3ByaW50ZihvZl9uYW1lLCAib2Y6JXMiLCBkcnYtPmRyaXZlci5uYW1lKTsKKwlkcnYtPnBsYXRmb3JtX2RyaXZlci5kcml2ZXIubmFtZSA9IG9mX25hbWU7CisKKwlpZiAoZHJ2LT5wcm9iZSkKKwkJZHJ2LT5wbGF0Zm9ybV9kcml2ZXIucHJvYmUgPSBwbGF0Zm9ybV9kcml2ZXJfcHJvYmVfc2hpbTsKKwlkcnYtPnBsYXRmb3JtX2RyaXZlci5yZW1vdmUgPSBkcnYtPnJlbW92ZTsKKwlpZiAoZHJ2LT5zaHV0ZG93bikKKwkJZHJ2LT5wbGF0Zm9ybV9kcml2ZXIuc2h1dGRvd24gPSBwbGF0Zm9ybV9kcml2ZXJfc2h1dGRvd25fc2hpbTsKKwlkcnYtPnBsYXRmb3JtX2RyaXZlci5zdXNwZW5kID0gZHJ2LT5zdXNwZW5kOworCWRydi0+cGxhdGZvcm1fZHJpdmVyLnJlc3VtZSA9IGRydi0+cmVzdW1lOworCisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZHJ2LT5wbGF0Zm9ybV9kcml2ZXIpOworfQorRVhQT1JUX1NZTUJPTChvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIpOworCit2b2lkIG9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgKmRydikKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZHJ2LT5wbGF0Zm9ybV9kcml2ZXIpOworCWtmcmVlKGRydi0+cGxhdGZvcm1fZHJpdmVyLmRyaXZlci5uYW1lKTsKKwlkcnYtPnBsYXRmb3JtX2RyaXZlci5kcml2ZXIubmFtZSA9IE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKG9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1BQQ19EQ1IpCisjaW5jbHVkZSA8YXNtL2Rjci5oPgorI2VuZGlmCiAKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBvZl9wbGF0Zm9ybV9kZXZpY2VfYXR0cnNbXTsKIApAQCAtMzMsMTEgKzEzMCwxMSBAQAogewogCWludCBlcnJvciA9IC1FTk9ERVY7CiAJc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciAqZHJ2OwotCXN0cnVjdCBvZl9kZXZpY2UgKm9mX2RldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXY7CiAJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CiAKIAlkcnYgPSB0b19vZl9wbGF0Zm9ybV9kcml2ZXIoZGV2LT5kcml2ZXIpOwotCW9mX2RldiA9IHRvX29mX2RldmljZShkZXYpOworCW9mX2RldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCiAJaWYgKCFkcnYtPnByb2JlKQogCQlyZXR1cm4gZXJyb3I7CkBAIC01NSw3ICsxNTIsNyBAQAogCiBzdGF0aWMgaW50IG9mX3BsYXRmb3JtX2RldmljZV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBvZl9kZXZpY2UgKm9mX2RldiA9IHRvX29mX2RldmljZShkZXYpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgKmRydiA9IHRvX29mX3BsYXRmb3JtX2RyaXZlcihkZXYtPmRyaXZlcik7CiAKIAlpZiAoZGV2LT5kcml2ZXIgJiYgZHJ2LT5yZW1vdmUpCkBAIC02NSw3ICsxNjIsNyBAQAogCiBzdGF0aWMgdm9pZCBvZl9wbGF0Zm9ybV9kZXZpY2Vfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBvZl9kZXZpY2UgKm9mX2RldiA9IHRvX29mX2RldmljZShkZXYpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgKmRydiA9IHRvX29mX3BsYXRmb3JtX2RyaXZlcihkZXYtPmRyaXZlcik7CiAKIAlpZiAoZGV2LT5kcml2ZXIgJiYgZHJ2LT5zaHV0ZG93bikKQEAgLTc2LDcgKzE3Myw3IEBACiAKIHN0YXRpYyBpbnQgb2ZfcGxhdGZvcm1fbGVnYWN5X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKIHsKLQlzdHJ1Y3Qgb2ZfZGV2aWNlICpvZl9kZXYgPSB0b19vZl9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyICpkcnYgPSB0b19vZl9wbGF0Zm9ybV9kcml2ZXIoZGV2LT5kcml2ZXIpOwogCWludCByZXQgPSAwOwogCkBAIC04Nyw3ICsxODQsNyBAQAogCiBzdGF0aWMgaW50IG9mX3BsYXRmb3JtX2xlZ2FjeV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBvZl9kZXZpY2UgKm9mX2RldiA9IHRvX29mX2RldmljZShkZXYpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgKmRydiA9IHRvX29mX3BsYXRmb3JtX2RyaXZlcihkZXYtPmRyaXZlcik7CiAJaW50IHJldCA9IDA7CiAKQEAgLTM4NCwxNSArNDgxLDI4NiBAQAogCiBpbnQgb2ZfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgKmRydiwgc3RydWN0IGJ1c190eXBlICpidXMpCiB7Ci0JZHJ2LT5kcml2ZXIuYnVzID0gYnVzOworCS8qCisJICogVGVtcG9yYXJ5OiBvZl9wbGF0Zm9ybV9idXMgdXNlZCB0byBiZSBkaXN0aW5jdCBmcm9tIHRoZSBwbGF0Zm9ybQorCSAqIGJ1cy4gIEl0IGlzbid0IGFueW1vcmUsIGFuZCBzbyBkcml2ZXJzIG9uIHRoZSBwbGF0Zm9ybSBidXMgbmVlZAorCSAqIHRvIGJlIHJlZ2lzdGVyZWQgaW4gYSBzcGVjaWFsIHdheS4KKwkgKgorCSAqIEFmdGVyIGFsbCBvZl9wbGF0Zm9ybV9idXNfdHlwZSBkcml2ZXJzIGFyZSBjb252ZXJ0ZWQgdG8KKwkgKiBwbGF0Zm9ybV9kcml2ZXJzLCB0aGlzIGV4Y2VwdGlvbiBjYW4gYmUgcmVtb3ZlZC4KKwkgKi8KKwlpZiAoYnVzID09ICZwbGF0Zm9ybV9idXNfdHlwZSkKKwkJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcihkcnYpOwogCiAJLyogcmVnaXN0ZXIgd2l0aCBjb3JlICovCisJZHJ2LT5kcml2ZXIuYnVzID0gYnVzOwogCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmRydi0+ZHJpdmVyKTsKIH0KIEVYUE9SVF9TWU1CT0wob2ZfcmVnaXN0ZXJfZHJpdmVyKTsKIAogdm9pZCBvZl91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyICpkcnYpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmRydi0+ZHJpdmVyKTsKKwlpZiAoZHJ2LT5kcml2ZXIuYnVzID09ICZwbGF0Zm9ybV9idXNfdHlwZSkKKwkJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoZHJ2KTsKKwllbHNlCisJCWRyaXZlcl91bnJlZ2lzdGVyKCZkcnYtPmRyaXZlcik7CiB9CiBFWFBPUlRfU1lNQk9MKG9mX3VucmVnaXN0ZXJfZHJpdmVyKTsKKworI2lmICFkZWZpbmVkKENPTkZJR19TUEFSQykKKy8qCisgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIHNjYW4gYSBzdWJ0cmVlIGFuZCByZWdpc3RlcnMgYSBkZXZpY2UgZm9yCisgKiBlYWNoIGFwcGxpY2FibGUgbm9kZS4KKyAqCisgKiBOb3RlOiBzcGFyYyBkb2Vzbid0IHVzZSB0aGVzZSByb3V0aW5lcyBiZWNhdXNlIGl0IGhhcyBhIGRpZmZlcmVudAorICogbWVjaGFuaXNtIGZvciBjcmVhdGluZyBkZXZpY2VzIGZyb20gZGV2aWNlIHRyZWUgbm9kZXMuCisgKi8KKworLyoqCisgKiBvZl9kZXZpY2VfbWFrZV9idXNfaWQgLSBVc2UgdGhlIGRldmljZSBub2RlIGRhdGEgdG8gYXNzaWduIGEgdW5pcXVlIG5hbWUKKyAqIEBkZXY6IHBvaW50ZXIgdG8gZGV2aWNlIHN0cnVjdHVyZSB0aGF0IGlzIGxpbmtlZCB0byBhIGRldmljZSB0cmVlIG5vZGUKKyAqCisgKiBUaGlzIHJvdXRpbmUgd2lsbCBmaXJzdCB0cnkgdXNpbmcgZWl0aGVyIHRoZSBkY3ItcmVnIG9yIHRoZSByZWcgcHJvcGVydHkKKyAqIHZhbHVlIHRvIGRlcml2ZSBhIHVuaXF1ZSBuYW1lLiAgQXMgYSBsYXN0IHJlc29ydCBpdCB3aWxsIHVzZSB0aGUgbm9kZQorICogbmFtZSBmb2xsb3dlZCBieSBhIHVuaXF1ZSBudW1iZXIuCisgKi8KK3ZvaWQgb2ZfZGV2aWNlX21ha2VfYnVzX2lkKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdGF0aWMgYXRvbWljX3QgYnVzX25vX3JlZ19tYWdpYzsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBkZXYtPm9mX25vZGU7CisJY29uc3QgdTMyICpyZWc7CisJdTY0IGFkZHI7CisJaW50IG1hZ2ljOworCisjaWZkZWYgQ09ORklHX1BQQ19EQ1IKKwkvKgorCSAqIElmIGl0J3MgYSBEQ1IgYmFzZWQgZGV2aWNlLCB1c2UgJ2QnIGZvciBuYXRpdmUgRENScworCSAqIGFuZCAnRCcgZm9yIE1NSU8gRENScy4KKwkgKi8KKwlyZWcgPSBvZl9nZXRfcHJvcGVydHkobm9kZSwgImRjci1yZWciLCBOVUxMKTsKKwlpZiAocmVnKSB7CisjaWZkZWYgQ09ORklHX1BQQ19EQ1JfTkFUSVZFCisJCWRldl9zZXRfbmFtZShkZXYsICJkJXguJXMiLCAqcmVnLCBub2RlLT5uYW1lKTsKKyNlbHNlIC8qIENPTkZJR19QUENfRENSX05BVElWRSAqLworCQl1NjQgYWRkciA9IG9mX3RyYW5zbGF0ZV9kY3JfYWRkcmVzcyhub2RlLCAqcmVnLCBOVUxMKTsKKwkJaWYgKGFkZHIgIT0gT0ZfQkFEX0FERFIpIHsKKwkJCWRldl9zZXRfbmFtZShkZXYsICJEJWxseC4lcyIsCisJCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWFkZHIsIG5vZGUtPm5hbWUpOworCQkJcmV0dXJuOworCQl9CisjZW5kaWYgLyogIUNPTkZJR19QUENfRENSX05BVElWRSAqLworCX0KKyNlbmRpZiAvKiBDT05GSUdfUFBDX0RDUiAqLworCisJLyoKKwkgKiBGb3IgTU1JTywgZ2V0IHRoZSBwaHlzaWNhbCBhZGRyZXNzCisJICovCisJcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KG5vZGUsICJyZWciLCBOVUxMKTsKKwlpZiAocmVnKSB7CisJCWFkZHIgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyhub2RlLCByZWcpOworCQlpZiAoYWRkciAhPSBPRl9CQURfQUREUikgeworCQkJZGV2X3NldF9uYW1lKGRldiwgIiVsbHguJXMiLAorCQkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhZGRyLCBub2RlLT5uYW1lKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qCisJICogTm8gQnVzSUQsIHVzZSB0aGUgbm9kZSBuYW1lIGFuZCBhZGQgYSBnbG9iYWxseSBpbmNyZW1lbnRlZAorCSAqIGNvdW50ZXIgKGFuZCBwcmF5Li4uKQorCSAqLworCW1hZ2ljID0gYXRvbWljX2FkZF9yZXR1cm4oMSwgJmJ1c19ub19yZWdfbWFnaWMpOworCWRldl9zZXRfbmFtZShkZXYsICIlcy4lZCIsIG5vZGUtPm5hbWUsIG1hZ2ljIC0gMSk7Cit9CisKKy8qKgorICogb2ZfZGV2aWNlX2FsbG9jIC0gQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gb2ZfZGV2aWNlCisgKiBAbnA6IGRldmljZSBub2RlIHRvIGFzc2lnbiB0byBkZXZpY2UKKyAqIEBidXNfaWQ6IE5hbWUgdG8gYXNzaWduIHRvIHRoZSBkZXZpY2UuICBNYXkgYmUgbnVsbCB0byB1c2UgZGVmYXVsdCBuYW1lLgorICogQHBhcmVudDogUGFyZW50IGRldmljZS4KKyAqLworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2aWNlX2FsbG9jKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJICBjb25zdCBjaGFyICpidXNfaWQsCisJCQkJICBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2OworCWludCByYywgaSwgbnVtX3JlZyA9IDAsIG51bV9pcnEgPSAwOworCXN0cnVjdCByZXNvdXJjZSAqcmVzLCB0ZW1wX3JlczsKKworCS8qIEZpcnN0IGNvdW50IGhvdyBtYW55IHJlc291cmNlcyBhcmUgbmVlZGVkICovCisJd2hpbGUgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIG51bV9yZWcsICZ0ZW1wX3JlcykgPT0gMCkKKwkJbnVtX3JlZysrOworCXdoaWxlIChvZl9pcnFfdG9fcmVzb3VyY2UobnAsIG51bV9pcnEsICZ0ZW1wX3JlcykgIT0gTk9fSVJRKQorCQludW1faXJxKys7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGJvdGggdGhlIHN0cnVjdCBkZXZpY2UgYW5kIHRoZSByZXNvdXJjZSB0YWJsZSAqLworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpICsgKHNpemVvZigqcmVzKSAqIChudW1fcmVnICsgbnVtX2lycSkpLAorCQkgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIE5VTEw7CisJcmVzID0gKHN0cnVjdCByZXNvdXJjZSAqKSAmZGV2WzFdOworCisJLyogUG9wdWxhdGUgdGhlIHJlc291cmNlIHRhYmxlICovCisJaWYgKG51bV9pcnEgfHwgbnVtX3JlZykgeworCQlkZXYtPm51bV9yZXNvdXJjZXMgPSBudW1fcmVnICsgbnVtX2lycTsKKwkJZGV2LT5yZXNvdXJjZSA9IHJlczsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9yZWc7IGkrKywgcmVzKyspIHsKKwkJCXJjID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgaSwgcmVzKTsKKwkJCVdBUk5fT04ocmMpOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBudW1faXJxOyBpKyssIHJlcysrKSB7CisJCQlyYyA9IG9mX2lycV90b19yZXNvdXJjZShucCwgaSwgcmVzKTsKKwkJCVdBUk5fT04ocmMgPT0gTk9fSVJRKTsKKwkJfQorCX0KKworCWRldi0+ZGV2Lm9mX25vZGUgPSBvZl9ub2RlX2dldChucCk7CisjaWYgZGVmaW5lZChDT05GSUdfUFBDKSB8fCBkZWZpbmVkKENPTkZJR19NSUNST0JMQVpFKQorCWRldi0+ZGV2LmRtYV9tYXNrID0gJmRldi0+YXJjaGRhdGEuZG1hX21hc2s7CisjZW5kaWYKKwlkZXYtPmRldi5wYXJlbnQgPSBwYXJlbnQ7CisJZGV2LT5kZXYucmVsZWFzZSA9IG9mX3JlbGVhc2VfZGV2OworCisJaWYgKGJ1c19pZCkKKwkJZGV2X3NldF9uYW1lKCZkZXYtPmRldiwgIiVzIiwgYnVzX2lkKTsKKwllbHNlCisJCW9mX2RldmljZV9tYWtlX2J1c19pZCgmZGV2LT5kZXYpOworCisJcmV0dXJuIGRldjsKK30KK0VYUE9SVF9TWU1CT0wob2ZfZGV2aWNlX2FsbG9jKTsKKworLyoqCisgKiBvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlIC0gQWxsb2MsIGluaXRpYWxpemUgYW5kIHJlZ2lzdGVyIGFuIG9mX2RldmljZQorICogQG5wOiBwb2ludGVyIHRvIG5vZGUgdG8gY3JlYXRlIGRldmljZSBmb3IKKyAqIEBidXNfaWQ6IG5hbWUgdG8gYXNzaWduIGRldmljZQorICogQHBhcmVudDogTGludXggZGV2aWNlIG1vZGVsIHBhcmVudCBkZXZpY2UuCisgKi8KK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX3BsYXRmb3JtX2RldmljZV9jcmVhdGUoc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKmJ1c19pZCwKKwkJCQkJICAgIHN0cnVjdCBkZXZpY2UgKnBhcmVudCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXY7CisKKwlkZXYgPSBvZl9kZXZpY2VfYWxsb2MobnAsIGJ1c19pZCwgcGFyZW50KTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIE5VTEw7CisKKyNpZiBkZWZpbmVkKENPTkZJR19QUEMpIHx8IGRlZmluZWQoQ09ORklHX01JQ1JPQkxBWkUpCisJZGV2LT5hcmNoZGF0YS5kbWFfbWFzayA9IDB4ZmZmZmZmZmZVTDsKKyNlbmRpZgorCWRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKwlkZXYtPmRldi5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGU7CisKKwkvKiBXZSBkbyBub3QgZmlsbCB0aGUgRE1BIG9wcyBmb3IgcGxhdGZvcm0gZGV2aWNlcyBieSBkZWZhdWx0LgorCSAqIFRoaXMgaXMgY3VycmVudGx5IHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgcGxhdGZvcm0gY29kZQorCSAqIHRvIGRvIHN1Y2gsIHBvc3NpYmx5IHVzaW5nIGEgZGV2aWNlIG5vdGlmaWVyCisJICovCisKKwlpZiAob2ZfZGV2aWNlX3JlZ2lzdGVyKGRldikgIT0gMCkgeworCQlvZl9kZXZpY2VfZnJlZShkZXYpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gZGV2OworfQorRVhQT1JUX1NZTUJPTChvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKTsKKworLyoqCisgKiBvZl9wbGF0Zm9ybV9idXNfY3JlYXRlIC0gQ3JlYXRlIGFuIE9GIGRldmljZSBmb3IgYSBidXMgbm9kZSBhbmQgYWxsIGl0cworICogY2hpbGRyZW4uIE9wdGlvbmFsbHkgcmVjdXJzaXZlbHkgaW5zdGFudGlhdGUgbWF0Y2hpbmcgYnVzc2VzLgorICogQGJ1czogZGV2aWNlIG5vZGUgb2YgdGhlIGJ1cyB0byBpbnN0YW50aWF0ZQorICogQG1hdGNoZXM6IG1hdGNoIHRhYmxlLCBOVUxMIHRvIHVzZSB0aGUgZGVmYXVsdCwgT0ZfTk9fREVFUF9QUk9CRSB0bworICogZGlzYWxsb3cgcmVjdXJzaXZlIGNyZWF0aW9uIG9mIGNoaWxkIGJ1c3NlcworICovCitzdGF0aWMgaW50IG9mX3BsYXRmb3JtX2J1c19jcmVhdGUoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpidXMsCisJCQkJICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaGVzLAorCQkJCSAgc3RydWN0IGRldmljZSAqcGFyZW50KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2OworCWludCByYyA9IDA7CisKKwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKGJ1cywgY2hpbGQpIHsKKwkJcHJfZGVidWcoIiAgIGNyZWF0ZSBjaGlsZDogJXNcbiIsIGNoaWxkLT5mdWxsX25hbWUpOworCQlkZXYgPSBvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKGNoaWxkLCBOVUxMLCBwYXJlbnQpOworCQlpZiAoZGV2ID09IE5VTEwpCisJCQlyYyA9IC1FTk9NRU07CisJCWVsc2UgaWYgKCFvZl9tYXRjaF9ub2RlKG1hdGNoZXMsIGNoaWxkKSkKKwkJCWNvbnRpbnVlOworCQlpZiAocmMgPT0gMCkgeworCQkJcHJfZGVidWcoIiAgIGFuZCBzdWIgYnVzc2VzXG4iKTsKKwkJCXJjID0gb2ZfcGxhdGZvcm1fYnVzX2NyZWF0ZShjaGlsZCwgbWF0Y2hlcywgJmRldi0+ZGV2KTsKKwkJfQorCQlpZiAocmMpIHsKKwkJCW9mX25vZGVfcHV0KGNoaWxkKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiByYzsKK30KKworLyoqCisgKiBvZl9wbGF0Zm9ybV9idXNfcHJvYmUgLSBQcm9iZSB0aGUgZGV2aWNlLXRyZWUgZm9yIHBsYXRmb3JtIGJ1c3NlcworICogQHJvb3Q6IHBhcmVudCBvZiB0aGUgZmlyc3QgbGV2ZWwgdG8gcHJvYmUgb3IgTlVMTCBmb3IgdGhlIHJvb3Qgb2YgdGhlIHRyZWUKKyAqIEBtYXRjaGVzOiBtYXRjaCB0YWJsZSwgTlVMTCB0byB1c2UgdGhlIGRlZmF1bHQKKyAqIEBwYXJlbnQ6IHBhcmVudCB0byBob29rIGRldmljZXMgZnJvbSwgTlVMTCBmb3IgdG9wbGV2ZWwKKyAqCisgKiBOb3RlIHRoYXQgY2hpbGRyZW4gb2YgdGhlIHByb3ZpZGVkIHJvb3QgYXJlIG5vdCBpbnN0YW50aWF0ZWQgYXMgZGV2aWNlcworICogdW5sZXNzIHRoZSBzcGVjaWZpZWQgcm9vdCBpdHNlbGYgbWF0Y2hlcyB0aGUgYnVzIGxpc3QgYW5kIGlzIG5vdCBOVUxMLgorICovCitpbnQgb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdCwKKwkJCSAgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2hlcywKKwkJCSAgc3RydWN0IGRldmljZSAqcGFyZW50KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2OworCWludCByYyA9IDA7CisKKwlpZiAoV0FSTl9PTighbWF0Y2hlcyB8fCBtYXRjaGVzID09IE9GX05PX0RFRVBfUFJPQkUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocm9vdCA9PSBOVUxMKQorCQlyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKKwllbHNlCisJCW9mX25vZGVfZ2V0KHJvb3QpOworCWlmIChyb290ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJfZGVidWcoIm9mX3BsYXRmb3JtX2J1c19wcm9iZSgpXG4iKTsKKwlwcl9kZWJ1ZygiIHN0YXJ0aW5nIGF0OiAlc1xuIiwgcm9vdC0+ZnVsbF9uYW1lKTsKKworCS8qIERvIGEgc2VsZiBjaGVjayBvZiBidXMgdHlwZSwgaWYgdGhlcmUncyBhIG1hdGNoLCBjcmVhdGUKKwkgKiBjaGlsZHJlbgorCSAqLworCWlmIChvZl9tYXRjaF9ub2RlKG1hdGNoZXMsIHJvb3QpKSB7CisJCXByX2RlYnVnKCIgcm9vdCBtYXRjaCwgY3JlYXRlIGFsbCBzdWIgZGV2aWNlc1xuIik7CisJCWRldiA9IG9mX3BsYXRmb3JtX2RldmljZV9jcmVhdGUocm9vdCwgTlVMTCwgcGFyZW50KTsKKwkJaWYgKGRldiA9PSBOVUxMKSB7CisJCQlyYyA9IC1FTk9NRU07CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJcHJfZGVidWcoIiBjcmVhdGUgYWxsIHN1YiBidXNzZXNcbiIpOworCQlyYyA9IG9mX3BsYXRmb3JtX2J1c19jcmVhdGUocm9vdCwgbWF0Y2hlcywgJmRldi0+ZGV2KTsKKwkJZ290byBiYWlsOworCX0KKwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKHJvb3QsIGNoaWxkKSB7CisJCWlmICghb2ZfbWF0Y2hfbm9kZShtYXRjaGVzLCBjaGlsZCkpCisJCQljb250aW51ZTsKKworCQlwcl9kZWJ1ZygiICBtYXRjaDogJXNcbiIsIGNoaWxkLT5mdWxsX25hbWUpOworCQlkZXYgPSBvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKGNoaWxkLCBOVUxMLCBwYXJlbnQpOworCQlpZiAoZGV2ID09IE5VTEwpCisJCQlyYyA9IC1FTk9NRU07CisJCWVsc2UKKwkJCXJjID0gb2ZfcGxhdGZvcm1fYnVzX2NyZWF0ZShjaGlsZCwgbWF0Y2hlcywgJmRldi0+ZGV2KTsKKwkJaWYgKHJjKSB7CisJCQlvZl9ub2RlX3B1dChjaGlsZCk7CisJCQlicmVhazsKKwkJfQorCX0KKyBiYWlsOgorCW9mX25vZGVfcHV0KHJvb3QpOworCXJldHVybiByYzsKK30KK0VYUE9SVF9TWU1CT0wob2ZfcGxhdGZvcm1fYnVzX3Byb2JlKTsKKyNlbmRpZiAvKiAhQ09ORklHX1NQQVJDICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL2V2ZW50X2J1ZmZlci5jIGIvZHJpdmVycy9vcHJvZmlsZS9ldmVudF9idWZmZXIuYwppbmRleCA1ZGY2MGE2Li5kZDg3ZTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL29wcm9maWxlL2V2ZW50X2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvZXZlbnRfYnVmZmVyLmMKQEAgLTEzNSw3ICsxMzUsNyBAQAogCSAqIGVjaG8gMSA+L2Rldi9vcHJvZmlsZS9lbmFibGUKIAkgKi8KIAotCXJldHVybiAwOworCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKIAogZmFpbDoKIAlkY29va2llX3VucmVnaXN0ZXIoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKQEAgLTIwNSw0ICsyMDUsNSBAQAogCS5vcGVuCQk9IGV2ZW50X2J1ZmZlcl9vcGVuLAogCS5yZWxlYXNlCT0gZXZlbnRfYnVmZmVyX3JlbGVhc2UsCiAJLnJlYWQJCT0gZXZlbnRfYnVmZmVyX3JlYWQsCisJLmxsc2VlawkJPSBub19sbHNlZWssCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvY2Npby1kbWEuYyBiL2RyaXZlcnMvcGFyaXNjL2NjaW8tZG1hLmMKaW5kZXggZjUxMWU3MC4uNzVhODBlNDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9jY2lvLWRtYS5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL2NjaW8tZG1hLmMKQEAgLTEyNDEsMTAgKzEyNDEsMTAgQEAKIH07CiAKIC8qKgotICogY2Npb19pb2NfaW5pdCAtIEluaXRhbGl6ZSB0aGUgSS9PIENvbnRyb2xsZXIKKyAqIGNjaW9faW9jX2luaXQgLSBJbml0aWFsaXplIHRoZSBJL08gQ29udHJvbGxlcgogICogQGlvYzogVGhlIEkvTyBDb250cm9sbGVyLgogICoKLSAqIEluaXRhbGl6ZSB0aGUgSS9PIENvbnRyb2xsZXIgd2hpY2ggaW5jbHVkZXMgc2V0dGluZyB1cCB0aGUKKyAqIEluaXRpYWxpemUgdGhlIEkvTyBDb250cm9sbGVyIHdoaWNoIGluY2x1ZGVzIHNldHRpbmcgdXAgdGhlCiAgKiBJL08gUGFnZSBEaXJlY3RvcnksIHRoZSByZXNvdXJjZSBtYXAsIGFuZCBpbml0YWxpemluZyB0aGUKICAqIFUyL1V0dXJuIGNoaXAgaW50byB2aXJ0dWFsIG1vZGUuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL2xlZC5jIGIvZHJpdmVycy9wYXJpc2MvbGVkLmMKaW5kZXggMTg4YmM4NC4uYzVjMTRkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvbGVkLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvbGVkLmMKQEAgLTE3NiwxNiArMTc2LDE4IEBACiAJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKIAl2b2lkICpkYXRhID0gUERFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLT5kYXRhOwotCWNoYXIgKmN1ciwgbGJ1Zltjb3VudCArIDFdOworCWNoYXIgKmN1ciwgbGJ1ZlszMl07CiAJaW50IGQ7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwogCi0JbWVtc2V0KGxidWYsIDAsIGNvdW50ICsgMSk7CisJaWYgKGNvdW50ID49IHNpemVvZihsYnVmKSkKKwkJY291bnQgPSBzaXplb2YobGJ1ZiktMTsKIAogCWlmIChjb3B5X2Zyb21fdXNlcihsYnVmLCBidWYsIGNvdW50KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CisJbGJ1Zltjb3VudF0gPSAwOwogCiAJY3VyID0gbGJ1ZjsKIApAQCAtMzU1LDEyICszNTcsMTMgQEAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yX2VhY2hfbmV0ZGV2X3JjdSgmaW5pdF9uZXQsIGRldikgewogCSAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHM7CisJICAgIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCB0ZW1wOwogCSAgICBzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7CiAJICAgIGlmICghaW5fZGV2IHx8ICFpbl9kZXYtPmlmYV9saXN0KQogCQljb250aW51ZTsKIAkgICAgaWYgKGlwdjRfaXNfbG9vcGJhY2soaW5fZGV2LT5pZmFfbGlzdC0+aWZhX2xvY2FsKSkKIAkJY29udGludWU7Ci0JICAgIHN0YXRzID0gZGV2X2dldF9zdGF0cyhkZXYpOworCSAgICBzdGF0cyA9IGRldl9nZXRfc3RhdHMoZGV2LCAmdGVtcCk7CiAJICAgIHJ4X3RvdGFsICs9IHN0YXRzLT5yeF9wYWNrZXRzOwogCSAgICB0eF90b3RhbCArPSBzdGF0cy0+dHhfcGFja2V0czsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9jcy5jIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfY3MuYwppbmRleCBmZDhjZmU5Li4yM2U1MGY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9jcy5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X2NzLmMKQEAgLTQ4LDcgKzQ4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGFycG9ydF9wYy5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgpAQCAtMTAyLDggKzEwMSw4IEBACiAgICAgbGluay0+cHJpdiA9IGluZm87CiAgICAgaW5mby0+cF9kZXYgPSBsaW5rOwogCi0gICAgbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLSAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IElPX0RBVEFfUEFUSF9XSURUSF84OworICAgIGxpbmstPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKyAgICBsaW5rLT5yZXNvdXJjZVsxXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCkBAIC0xNDQsMTYgKzE0MywxNiBAQAogewogCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQtPmlvLm53aW4gPiAwKSkgewogCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQtPmlvOworCQlwX2Rldi0+aW9fbGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKIAkJaWYgKGVwcF9tb2RlKQogCQkJcF9kZXYtPmNvbmYuQ29uZmlnSW5kZXggfD0gRk9SQ0VfRVBQX01PREU7Ci0JCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7Ci0JCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKLQkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBpby0+d2luWzBdLmJhc2U7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gaW8tPndpblswXS5sZW47CiAJCWlmIChpby0+bndpbiA9PSAyKSB7Ci0JCQlwX2Rldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOwotCQkJcF9kZXYtPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOworCQkJcF9kZXYtPnJlc291cmNlWzFdLT5zdGFydCA9IGlvLT53aW5bMV0uYmFzZTsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gaW8tPndpblsxXS5sZW47CiAJCX0KLQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSAhPSAwKQorCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpICE9IDApCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTc4LDEyICsxNzcsMTQgQEAKICAgICBpZiAocmV0KQogCSAgICBnb3RvIGZhaWxlZDsKIAotICAgIHAgPSBwYXJwb3J0X3BjX3Byb2JlX3BvcnQobGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pby5CYXNlUG9ydDIsCisgICAgcCA9IHBhcnBvcnRfcGNfcHJvYmVfcG9ydChsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQsCisJCQkgICAgICBsaW5rLT5yZXNvdXJjZVsxXS0+c3RhcnQsCiAJCQkgICAgICBsaW5rLT5pcnEsIFBBUlBPUlRfRE1BX05PTkUsCiAJCQkgICAgICAmbGluay0+ZGV2LCBJUlFGX1NIQVJFRCk7CiAgICAgaWYgKHAgPT0gTlVMTCkgewogCXByaW50ayhLRVJOX05PVElDRSAicGFycG9ydF9jczogcGFycG9ydF9wY19wcm9iZV9wb3J0KCkgYXQgIgotCSAgICAgICAiMHglM3gsIGlycSAldSBmYWlsZWRcbiIsIGxpbmstPmlvLkJhc2VQb3J0MSwKKwkgICAgICAgIjB4JTN4LCBpcnEgJXUgZmFpbGVkXG4iLAorCSAgICAgICAodW5zaWduZWQgaW50KSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQsCiAJICAgICAgIGxpbmstPmlycSk7CiAJZ290byBmYWlsZWQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfc3VuYnBwLmMgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9zdW5icHAuYwppbmRleCA5YTViNGI4Li4yMTBhNjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9zdW5icHAuYworKysgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9zdW5icHAuYwpAQCAtMjk1LDcgKzI5NSw3IEBACiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCXN0cnVjdCBwYXJwb3J0ICpwOwogCi0JaXJxID0gb3AtPmlycXNbMF07CisJaXJxID0gb3AtPmFyY2hkYXRhLmlycXNbMF07CiAJYmFzZSA9IG9mX2lvcmVtYXAoJm9wLT5yZXNvdXJjZVswXSwgMCwKIAkJCSAgcmVzb3VyY2Vfc2l6ZSgmb3AtPnJlc291cmNlWzBdKSwKIAkJCSAgInN1bmJwcCIpOwpAQCAtMzkzLDEyICszOTMsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgcGFycG9ydF9zdW5icHBfaW5pdCh2b2lkKQogewotCXJldHVybiBvZl9yZWdpc3Rlcl9kcml2ZXIoJmJwcF9zYnVzX2RyaXZlciwgJm9mX2J1c190eXBlKTsKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZicHBfc2J1c19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcGFycG9ydF9zdW5icHBfZXhpdCh2b2lkKQogewotCW9mX3VucmVnaXN0ZXJfZHJpdmVyKCZicHBfc2J1c19kcml2ZXIpOworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZicHBfc2J1c19kcml2ZXIpOwogfQogCiBNT0RVTEVfQVVUSE9SKCJEZXJyaWNrIEogQnJhc2hlYXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL01ha2VmaWxlIGIvZHJpdmVycy9wY2kvTWFrZWZpbGUKaW5kZXggMGI1MTg1Ny4uZGMxYWEwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wY2kvTWFrZWZpbGUKQEAgLTU1LDYgKzU1LDkgQEAKICMKIG9iai0kKENPTkZJR19BQ1BJKSAgICArPSBwY2ktYWNwaS5vCiAKKyMgU01CSU9TIHByb3ZpZGVkIGZpcm13YXJlIGluc3RhbmNlIGFuZCBsYWJlbHMKK29iai0kKENPTkZJR19ETUkpICAgICs9IHBjaS1sYWJlbC5vCisKICMgQ2FyZGJ1cyAmIENvbXBhY3RQQ0kgdXNlIHNldHVwLWJ1cwogb2JqLSQoQ09ORklHX0hPVFBMVUcpICs9IHNldHVwLWJ1cy5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2J1cy5jIGIvZHJpdmVycy9wY2kvYnVzLmMKaW5kZXggNjI4ZWEyMC4uN2YwYWYwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvYnVzLmMKKysrIGIvZHJpdmVycy9wY2kvYnVzLmMKQEAgLTU2LDcgKzU2LDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBQQ0lfQlJJREdFX1JFU09VUkNFX05VTTsgaSsrKQotCQlidXMtPnJlc291cmNlW2ldID0gMDsKKwkJYnVzLT5yZXNvdXJjZVtpXSA9IE5VTEw7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnVzX3JlcywgdG1wLCAmYnVzLT5yZXNvdXJjZXMsIGxpc3QpIHsKIAkJbGlzdF9kZWwoJmJ1c19yZXMtPmxpc3QpOwpAQCAtMjQwLDYgKzI0MCw4IEBACiAJCWlmIChkZXYtPnN1Ym9yZGluYXRlKSB7CiAJCQlpZiAoIXBjaV9pc19lbmFibGVkKGRldikpIHsKIAkJCQlyZXR2YWwgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOworCQkJCWlmIChyZXR2YWwpCisJCQkJCWRldl9lcnIoJmRldi0+ZGV2LCAiRXJyb3IgZW5hYmxpbmcgYnJpZGdlICglZCksIGNvbnRpbnVpbmdcbiIsIHJldHZhbCk7CiAJCQkJcGNpX3NldF9tYXN0ZXIoZGV2KTsKIAkJCX0KIAkJCXBjaV9lbmFibGVfYnJpZGdlcyhkZXYtPnN1Ym9yZGluYXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvZmFrZXBocC5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9mYWtlcGhwLmMKaW5kZXggNTMxN2U0ZDcuLjE3ZDEwZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvZmFrZXBocC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvZmFrZXBocC5jCkBAIC0xMzUsNyArMTM1LDcgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7CiAKIAkvKiBBZGQgZXhpc3RpbmcgZGV2aWNlcyAqLwotCXdoaWxlICgocGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBkZXYpKSkKKwlmb3JfZWFjaF9wY2lfZGV2KHBkZXYpCiAJCWxlZ2FjeV9hZGRfc2xvdChwZGV2KTsKIAogCS8qIEJlIGFsZXJ0ZWQgb2YgYW55IG5ldyBvbmVzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9wY2kuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX3BjaS5jCmluZGV4IDJmY2U3MjYuLmE0MDMxZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX3BjaS5jCkBAIC0xMzcsNyArMTM3LDcgQEAKIAkJCQkJICJDYW5ub3QgcmVtb3ZlIGRpc3BsYXkgZGV2aWNlICVzXG4iLAogCQkJCQkgcGNpX25hbWUodGVtcCkpOwogCQkJCXBjaV9kZXZfcHV0KHRlbXApOwotCQkJCXJjID0gRUlOVkFMOworCQkJCXJjID0gLUVJTlZBTDsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfaHBjLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9ocGMuYwppbmRleCA1ZjVlOGQyLi5kMzk4NWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9ocGMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9ocGMuYwpAQCAtMTEzLDcgKzExMyw3IEBACiAjZGVmaW5lIENPTl9QRkFVTFRfSU5UUl9NQVNLCSgxIDw8IDI4KQogI2RlZmluZSBNUkxfQ0hBTkdFX1NFUlJfTUFTSwkoMSA8PCAyOSkKICNkZWZpbmUgQ09OX1BGQVVMVF9TRVJSX01BU0sJKDEgPDwgMzApCi0jZGVmaW5lIFNMT1RfUkVHX1JTVkRaX01BU0sJKDEgPDwgMTUpIHwgKDcgPDwgMjEpCisjZGVmaW5lIFNMT1RfUkVHX1JTVkRaX01BU0sJKCgxIDw8IDE1KSB8ICg3IDw8IDIxKSkKIAogLyoKICAqIFNIUEMgQ29tbWFuZCBDb2RlIGRlZmluaXRuaW9ucwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfcGNpLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9wY2kuYwppbmRleCA4YzNkMzIxLi5hMmNjZmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9wY2kuYwpAQCAtNjAsMTIgKzYwLDYgQEAKIAkJZGV2ID0gcGNpX2dldF9zbG90KHBhcmVudCwgUENJX0RFVkZOKHBfc2xvdC0+ZGV2aWNlLCBmbikpOwogCQlpZiAoIWRldikKIAkJCWNvbnRpbnVlOwotCQlpZiAoKGRldi0+Y2xhc3MgPj4gMTYpID09IFBDSV9CQVNFX0NMQVNTX0RJU1BMQVkpIHsKLQkJCWN0cmxfZXJyKGN0cmwsICJDYW5ub3QgaG90LWFkZCBkaXNwbGF5IGRldmljZSAlc1xuIiwKLQkJCQkgcGNpX25hbWUoZGV2KSk7Ci0JCQlwY2lfZGV2X3B1dChkZXYpOwotCQkJY29udGludWU7Ci0JCX0KIAkJaWYgKChkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHx8CiAJCQkJKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0NBUkRCVVMpKSB7CiAJCQkvKiBGaW5kIGFuIHVudXNlZCBidXMgbnVtYmVyIGZvciB0aGUgbmV3IGJyaWRnZSAqLwpAQCAtMTE0LDE3ICsxMDgsMTEgQEAKIAljdHJsX2RiZyhjdHJsLCAiJXM6IGRvbWFpbjpidXM6ZGV2ID0gJTA0eDolMDJ4OiUwMnhcbiIsCiAJCSBfX2Z1bmNfXywgcGNpX2RvbWFpbl9ucihwYXJlbnQpLCBwX3Nsb3QtPmJ1cywgcF9zbG90LT5kZXZpY2UpOwogCi0JZm9yIChqPTA7IGo8OCA7IGorKykgewotCQlzdHJ1Y3QgcGNpX2RldiogdGVtcCA9IHBjaV9nZXRfc2xvdChwYXJlbnQsCisJZm9yIChqID0gMDsgaiA8IDggOyBqKyspIHsKKwkJc3RydWN0IHBjaV9kZXYgKnRlbXAgPSBwY2lfZ2V0X3Nsb3QocGFyZW50LAogCQkJCShwX3Nsb3QtPmRldmljZSA8PCAzKSB8IGopOwogCQlpZiAoIXRlbXApCiAJCQljb250aW51ZTsKLQkJaWYgKCh0ZW1wLT5jbGFzcyA+PiAxNikgPT0gUENJX0JBU0VfQ0xBU1NfRElTUExBWSkgewotCQkJY3RybF9lcnIoY3RybCwgIkNhbm5vdCByZW1vdmUgZGlzcGxheSBkZXZpY2UgJXNcbiIsCi0JCQkJIHBjaV9uYW1lKHRlbXApKTsKLQkJCXBjaV9kZXZfcHV0KHRlbXApOwotCQkJY29udGludWU7Ci0JCX0KIAkJaWYgKHRlbXAtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHsKIAkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHRlbXAsIFBDSV9CUklER0VfQ09OVFJPTCwgJmJjdGwpOwogCQkJaWYgKGJjdGwgJiBQQ0lfQlJJREdFX0NUTF9WR0EpIHsKQEAgLTEzMiw3ICsxMjAsOCBAQAogCQkJCQkgIkNhbm5vdCByZW1vdmUgZGlzcGxheSBkZXZpY2UgJXNcbiIsCiAJCQkJCSBwY2lfbmFtZSh0ZW1wKSk7CiAJCQkJcGNpX2Rldl9wdXQodGVtcCk7Ci0JCQkJY29udGludWU7CisJCQkJcmMgPSAtRUlOVkFMOworCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJCXBjaV9yZW1vdmVfYnVzX2RldmljZSh0ZW1wKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMgYi9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCmluZGV4IGM5MTcxYmUuLjZhNWFmMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKKysrIGIvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYwpAQCAtMzY5OCw2ICszNjk4LDggQEAKIAogCWlmIChjYXAgPT0gSU9NTVVfQ0FQX0NBQ0hFX0NPSEVSRU5DWSkKIAkJcmV0dXJuIGRtYXJfZG9tYWluLT5pb21tdV9zbm9vcGluZzsKKwlpZiAoY2FwID09IElPTU1VX0NBUF9JTlRSX1JFTUFQKQorCQlyZXR1cm4gaW50cl9yZW1hcHBpbmdfZW5hYmxlZDsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYyBiL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKaW5kZXggMTMxNWFjNi4uMTY5NGEwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYworKysgYi9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCkBAIC0zMTEsOCArMzExLDggQEAKIAlpbmRleCA9IGlycV9pb21tdS0+aXJ0ZV9pbmRleCArIGlycV9pb21tdS0+c3ViX2hhbmRsZTsKIAlpcnRlID0gJmlvbW11LT5pcl90YWJsZS0+YmFzZVtpbmRleF07CiAKLQlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgKikmaXJ0ZS0+bG93LCBpcnRlX21vZGlmaWVkLT5sb3cpOwotCXNldF82NGJpdCgodW5zaWduZWQgbG9uZyAqKSZpcnRlLT5oaWdoLCBpcnRlX21vZGlmaWVkLT5oaWdoKTsKKwlzZXRfNjRiaXQoJmlydGUtPmxvdywgaXJ0ZV9tb2RpZmllZC0+bG93KTsKKwlzZXRfNjRiaXQoJmlydGUtPmhpZ2gsIGlydGVfbW9kaWZpZWQtPmhpZ2gpOwogCV9faW9tbXVfZmx1c2hfY2FjaGUoaW9tbXUsIGlydGUsIHNpemVvZigqaXJ0ZSkpOwogCiAJcmMgPSBxaV9mbHVzaF9pZWMoaW9tbXUsIGluZGV4LCAwKTsKQEAgLTM5Myw4ICszOTMsOCBAQAogCWVuZCA9IHN0YXJ0ICsgKDEgPDwgaXJxX2lvbW11LT5pcnRlX21hc2spOwogCiAJZm9yIChlbnRyeSA9IHN0YXJ0OyBlbnRyeSA8IGVuZDsgZW50cnkrKykgewotCQlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgKikmZW50cnktPmxvdywgMCk7Ci0JCXNldF82NGJpdCgodW5zaWduZWQgbG9uZyAqKSZlbnRyeS0+aGlnaCwgMCk7CisJCXNldF82NGJpdCgmZW50cnktPmxvdywgMCk7CisJCXNldF82NGJpdCgmZW50cnktPmhpZ2gsIDApOwogCX0KIAogCXJldHVybiBxaV9mbHVzaF9pZWMoaW9tbXUsIGluZGV4LCBpcnFfaW9tbXUtPmlydGVfbWFzayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9tc2kuYyBiL2RyaXZlcnMvcGNpL21zaS5jCmluZGV4IDc3YjY4ZWEuLjY5YjdiZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL21zaS5jCisrKyBiL2RyaXZlcnMvcGNpL21zaS5jCkBAIC0xOTYsNiArMTk2LDkgQEAKIHZvaWQgcmVhZF9tc2lfbXNnX2Rlc2Moc3RydWN0IGlycV9kZXNjICpkZXNjLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQogewogCXN0cnVjdCBtc2lfZGVzYyAqZW50cnkgPSBnZXRfaXJxX2Rlc2NfbXNpKGRlc2MpOworCisJQlVHX09OKGVudHJ5LT5kZXYtPmN1cnJlbnRfc3RhdGUgIT0gUENJX0QwKTsKKwogCWlmIChlbnRyeS0+bXNpX2F0dHJpYi5pc19tc2l4KSB7CiAJCXZvaWQgX19pb21lbSAqYmFzZSA9IGVudHJ5LT5tYXNrX2Jhc2UgKwogCQkJZW50cnktPm1zaV9hdHRyaWIuZW50cnlfbnIgKiBQQ0lfTVNJWF9FTlRSWV9TSVpFOwpAQCAtMjI5LDEwICsyMzIsMzIgQEAKIAlyZWFkX21zaV9tc2dfZGVzYyhkZXNjLCBtc2cpOwogfQogCit2b2lkIGdldF9jYWNoZWRfbXNpX21zZ19kZXNjKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgc3RydWN0IG1zaV9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5ID0gZ2V0X2lycV9kZXNjX21zaShkZXNjKTsKKworCS8qIEFzc2VydCB0aGF0IHRoZSBjYWNoZSBpcyB2YWxpZCwgYXNzdW1pbmcgdGhhdAorCSAqIHZhbGlkIG1lc3NhZ2VzIGFyZSBub3QgYWxsLXplcm9lcy4gKi8KKwlCVUdfT04oIShlbnRyeS0+bXNnLmFkZHJlc3NfaGkgfCBlbnRyeS0+bXNnLmFkZHJlc3NfbG8gfAorCQkgZW50cnktPm1zZy5kYXRhKSk7CisKKwkqbXNnID0gZW50cnktPm1zZzsKK30KKwordm9pZCBnZXRfY2FjaGVkX21zaV9tc2codW5zaWduZWQgaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCisJZ2V0X2NhY2hlZF9tc2lfbXNnX2Rlc2MoZGVzYywgbXNnKTsKK30KKwogdm9pZCB3cml0ZV9tc2lfbXNnX2Rlc2Moc3RydWN0IGlycV9kZXNjICpkZXNjLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQogewogCXN0cnVjdCBtc2lfZGVzYyAqZW50cnkgPSBnZXRfaXJxX2Rlc2NfbXNpKGRlc2MpOwotCWlmIChlbnRyeS0+bXNpX2F0dHJpYi5pc19tc2l4KSB7CisKKwlpZiAoZW50cnktPmRldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfRDApIHsKKwkJLyogRG9uJ3QgdG91Y2ggdGhlIGhhcmR3YXJlIG5vdyAqLworCX0gZWxzZSBpZiAoZW50cnktPm1zaV9hdHRyaWIuaXNfbXNpeCkgewogCQl2b2lkIF9faW9tZW0gKmJhc2U7CiAJCWJhc2UgPSBlbnRyeS0+bWFza19iYXNlICsKIAkJCWVudHJ5LT5tc2lfYXR0cmliLmVudHJ5X25yICogUENJX01TSVhfRU5UUllfU0laRTsKQEAgLTQzNSw3ICs0NjAsNyBAQAogc3RhdGljIHZvaWQgX19pb21lbSAqbXNpeF9tYXBfcmVnaW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVuc2lnbmVkIHBvcywKIAkJCQkJCQl1bnNpZ25lZCBucl9lbnRyaWVzKQogewotCXVuc2lnbmVkIGxvbmcgcGh5c19hZGRyOworCXJlc291cmNlX3NpemVfdCBwaHlzX2FkZHI7CiAJdTMyIHRhYmxlX29mZnNldDsKIAl1OCBiaXI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMgYi9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jCmluZGV4IDJlN2EzYmYuLjFhYjk4YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLWFjcGkuYwpAQCAtNDgsNiArNDgsNyBAQAogCWlmIChldmVudCA9PSBBQ1BJX05PVElGWV9ERVZJQ0VfV0FLRSAmJiBwY2lfZGV2KSB7CiAJCXBjaV9jaGVja19wbWVfc3RhdHVzKHBjaV9kZXYpOwogCQlwbV9ydW50aW1lX3Jlc3VtZSgmcGNpX2Rldi0+ZGV2KTsKKwkJcGNpX3dha2V1cF9ldmVudChwY2lfZGV2KTsKIAkJaWYgKHBjaV9kZXYtPnN1Ym9yZGluYXRlKQogCQkJcGNpX3BtZV93YWtldXBfYnVzKHBjaV9kZXYtPnN1Ym9yZGluYXRlKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKaW5kZXggZjlhMGFlYy4uOGE2Zjc5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwpAQCAtMjg5LDggKzI4OSwyNiBAQAogc3RhdGljIGxvbmcgbG9jYWxfcGNpX3Byb2JlKHZvaWQgKl9kZGkpCiB7CiAJc3RydWN0IGRydl9kZXZfYW5kX2lkICpkZGkgPSBfZGRpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkZGktPmRldi0+ZGV2OworCWludCByYzsKIAotCXJldHVybiBkZGktPmRydi0+cHJvYmUoZGRpLT5kZXYsIGRkaS0+aWQpOworCS8qIFVuYm91bmQgUENJIGRldmljZXMgYXJlIGFsd2F5cyBzZXQgdG8gZGlzYWJsZWQgYW5kIHN1c3BlbmRlZC4KKwkgKiBEdXJpbmcgcHJvYmUsIHRoZSBkZXZpY2UgaXMgc2V0IHRvIGVuYWJsZWQgYW5kIGFjdGl2ZSBhbmQgdGhlCisJICogdXNhZ2UgY291bnQgaXMgaW5jcmVtZW50ZWQuICBJZiB0aGUgZHJpdmVyIHN1cHBvcnRzIHJ1bnRpbWUgUE0sCisJICogaXQgc2hvdWxkIGNhbGwgcG1fcnVudGltZV9wdXRfbm9pZGxlKCkgaW4gaXRzIHByb2JlIHJvdXRpbmUgYW5kCisJICogcG1fcnVudGltZV9nZXRfbm9yZXN1bWUoKSBpbiBpdHMgcmVtb3ZlIHJvdXRpbmUuCisJICovCisJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUoZGV2KTsKKwlwbV9ydW50aW1lX3NldF9hY3RpdmUoZGV2KTsKKwlwbV9ydW50aW1lX2VuYWJsZShkZXYpOworCisJcmMgPSBkZGktPmRydi0+cHJvYmUoZGRpLT5kZXYsIGRkaS0+aWQpOworCWlmIChyYykgeworCQlwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsKKwkJcG1fcnVudGltZV9zZXRfc3VzcGVuZGVkKGRldik7CisJCXBtX3J1bnRpbWVfcHV0X25vaWRsZShkZXYpOworCX0KKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgcGNpX2NhbGxfcHJvYmUoc3RydWN0IHBjaV9kcml2ZXIgKmRydiwgc3RydWN0IHBjaV9kZXYgKmRldiwKQEAgLTM2OSwxMSArMzg3LDE5IEBACiAJc3RydWN0IHBjaV9kcml2ZXIgKiBkcnYgPSBwY2lfZGV2LT5kcml2ZXI7CiAKIAlpZiAoZHJ2KSB7Ci0JCWlmIChkcnYtPnJlbW92ZSkKKwkJaWYgKGRydi0+cmVtb3ZlKSB7CisJCQlwbV9ydW50aW1lX2dldF9zeW5jKGRldik7CiAJCQlkcnYtPnJlbW92ZShwY2lfZGV2KTsKKwkJCXBtX3J1bnRpbWVfcHV0X25vaWRsZShkZXYpOworCQl9CiAJCXBjaV9kZXYtPmRyaXZlciA9IE5VTEw7CiAJfQogCisJLyogVW5kbyB0aGUgcnVudGltZSBQTSBzZXR0aW5ncyBpbiBsb2NhbF9wY2lfcHJvYmUoKSAqLworCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOworCXBtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZChkZXYpOworCXBtX3J1bnRpbWVfcHV0X25vaWRsZShkZXYpOworCiAJLyoKIAkgKiBJZiB0aGUgZGV2aWNlIGlzIHN0aWxsIG9uLCBzZXQgdGhlIHBvd2VyIHN0YXRlIGFzICJ1bmtub3duIiwKIAkgKiBzaW5jZSBpdCBtaWdodCBjaGFuZ2UgYnkgdGhlIG5leHQgdGltZSB3ZSBsb2FkIHRoZSBkcml2ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktbGFiZWwuYyBiL2RyaXZlcnMvcGNpL3BjaS1sYWJlbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYzBhNzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BjaS9wY2ktbGFiZWwuYwpAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIFB1cnBvc2U6IEV4cG9ydCB0aGUgZmlybXdhcmUgaW5zdGFuY2UgYW5kIGxhYmVsIGFzc29jaWF0ZWQgd2l0aAorICogYSBwY2kgZGV2aWNlIHRvIHN5c2ZzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRGVsbCBJbmMuCisgKiBieSBOYXJlbmRyYSBLIDxOYXJlbmRyYV9LQGRlbGwuY29tPiwKKyAqIEpvcmRhbiBIYXJncmF2ZSA8Sm9yZGFuX0hhcmdyYXZlQGRlbGwuY29tPgorICoKKyAqIFNNQklPUyBkZWZpbmVzIHR5cGUgNDEgZm9yIG9uYm9hcmQgcGNpIGRldmljZXMuIFRoaXMgY29kZSByZXRyaWV2ZXMKKyAqIHRoZSBpbnN0YW5jZSBudW1iZXIgYW5kIHN0cmluZyBmcm9tIHRoZSB0eXBlIDQxIHJlY29yZCBhbmQgZXhwb3J0cworICogaXQgdG8gc3lzZnMuCisgKgorICogUGxlYXNlIHNlZSBodHRwOi8vbGludXguZGVsbC5jb20vd2lraS9pbmRleC5waHAvT3NzL2xpYm5ldGRldm5hbWUgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlICJwY2kuaCIKKworZW51bSBzbWJpb3NfYXR0cl9lbnVtIHsKKwlTTUJJT1NfQVRUUl9OT05FID0gMCwKKwlTTUJJT1NfQVRUUl9MQUJFTF9TSE9XLAorCVNNQklPU19BVFRSX0lOU1RBTkNFX1NIT1csCit9OworCitzdGF0aWMgbW9kZV90CitmaW5kX3NtYmlvc19pbnN0YW5jZV9zdHJpbmcoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNoYXIgKmJ1ZiwKKwkJCSAgICBlbnVtIHNtYmlvc19hdHRyX2VudW0gYXR0cmlidXRlKQoreworCWNvbnN0IHN0cnVjdCBkbWlfZGV2aWNlICpkbWk7CisJc3RydWN0IGRtaV9kZXZfb25ib2FyZCAqZG9uYm9hcmQ7CisJaW50IGJ1czsKKwlpbnQgZGV2Zm47CisKKwlidXMgPSBwZGV2LT5idXMtPm51bWJlcjsKKwlkZXZmbiA9IHBkZXYtPmRldmZuOworCisJZG1pID0gTlVMTDsKKwl3aGlsZSAoKGRtaSA9IGRtaV9maW5kX2RldmljZShETUlfREVWX1RZUEVfREVWX09OQk9BUkQsCisJCQkJICAgICAgTlVMTCwgZG1pKSkgIT0gTlVMTCkgeworCQlkb25ib2FyZCA9IGRtaS0+ZGV2aWNlX2RhdGE7CisJCWlmIChkb25ib2FyZCAmJiBkb25ib2FyZC0+YnVzID09IGJ1cyAmJgorCQkJCQlkb25ib2FyZC0+ZGV2Zm4gPT0gZGV2Zm4pIHsKKwkJCWlmIChidWYpIHsKKwkJCQlpZiAoYXR0cmlidXRlID09IFNNQklPU19BVFRSX0lOU1RBTkNFX1NIT1cpCisJCQkJCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsCisJCQkJCQkJICIlZFxuIiwKKwkJCQkJCQkgZG9uYm9hcmQtPmluc3RhbmNlKTsKKwkJCQllbHNlIGlmIChhdHRyaWJ1dGUgPT0gU01CSU9TX0FUVFJfTEFCRUxfU0hPVykKKwkJCQkJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwKKwkJCQkJCQkgIiVzXG4iLAorCQkJCQkJCSBkbWktPm5hbWUpOworCQkJfQorCQkJcmV0dXJuIHN0cmxlbihkbWktPm5hbWUpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgbW9kZV90CitzbWJpb3NfaW5zdGFuY2Vfc3RyaW5nX2V4aXN0KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCQkJICAgICBpbnQgbikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisKKwlkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CisJcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKKworCXJldHVybiBmaW5kX3NtYmlvc19pbnN0YW5jZV9zdHJpbmcocGRldiwgTlVMTCwgU01CSU9TX0FUVFJfTk9ORSkgPworCQkJCQkgICBTX0lSVUdPIDogMDsKK30KKworc3RhdGljIHNzaXplX3QKK3NtYmlvc2xhYmVsX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXBkZXYgPSB0b19wY2lfZGV2KGRldik7CisKKwlyZXR1cm4gZmluZF9zbWJpb3NfaW5zdGFuY2Vfc3RyaW5nKHBkZXYsIGJ1ZiwKKwkJCQkJICAgU01CSU9TX0FUVFJfTEFCRUxfU0hPVyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzbWJpb3NpbnN0YW5jZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKKworCXJldHVybiBmaW5kX3NtYmlvc19pbnN0YW5jZV9zdHJpbmcocGRldiwgYnVmLAorCQkJCQkgICBTTUJJT1NfQVRUUl9JTlNUQU5DRV9TSE9XKTsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHNtYmlvc19hdHRyX2xhYmVsID0geworCS5hdHRyID0gey5uYW1lID0gImxhYmVsIiwgLm1vZGUgPSAwNDQ0fSwKKwkuc2hvdyA9IHNtYmlvc2xhYmVsX3Nob3csCit9OworCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgc21iaW9zX2F0dHJfaW5zdGFuY2UgPSB7CisJLmF0dHIgPSB7Lm5hbWUgPSAiaW5kZXgiLCAubW9kZSA9IDA0NDR9LAorCS5zaG93ID0gc21iaW9zaW5zdGFuY2Vfc2hvdywKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpzbWJpb3NfYXR0cmlidXRlc1tdID0geworCSZzbWJpb3NfYXR0cl9sYWJlbC5hdHRyLAorCSZzbWJpb3NfYXR0cl9pbnN0YW5jZS5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBzbWJpb3NfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBzbWJpb3NfYXR0cmlidXRlcywKKwkuaXNfdmlzaWJsZSA9IHNtYmlvc19pbnN0YW5jZV9zdHJpbmdfZXhpc3QsCit9OworCitzdGF0aWMgaW50CitwY2lfY3JlYXRlX3NtYmlvc25hbWVfZmlsZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpZiAoIXN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZzbWJpb3NfYXR0cl9ncm91cCkpCisJCXJldHVybiAwOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgdm9pZAorcGNpX3JlbW92ZV9zbWJpb3NuYW1lX2ZpbGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnNtYmlvc19hdHRyX2dyb3VwKTsKK30KKwordm9pZCBwY2lfY3JlYXRlX2Zpcm13YXJlX2xhYmVsX2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWlmICghcGNpX2NyZWF0ZV9zbWJpb3NuYW1lX2ZpbGUocGRldikpCisJCTsKK30KKwordm9pZCBwY2lfcmVtb3ZlX2Zpcm13YXJlX2xhYmVsX2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXBjaV9yZW1vdmVfc21iaW9zbmFtZV9maWxlKHBkZXYpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYwppbmRleCBjOTk1N2Y2Li5iNWE3ZDliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYwpAQCAtNzM0LDcgKzczNCw3IEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGNvbnRhaW5lcl9vZihrb2JqLAogCQkJCQkJICAgICAgIHN0cnVjdCBkZXZpY2UsIGtvYmopKTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IChzdHJ1Y3QgcmVzb3VyY2UgKilhdHRyLT5wcml2YXRlOworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gYXR0ci0+cHJpdmF0ZTsKIAllbnVtIHBjaV9tbWFwX3N0YXRlIG1tYXBfdHlwZTsKIAlyZXNvdXJjZV9zaXplX3Qgc3RhcnQsIGVuZDsKIAlpbnQgaTsKQEAgLTc3OCw2ICs3NzgsNzAgQEAKIAlyZXR1cm4gcGNpX21tYXBfcmVzb3VyY2Uoa29iaiwgYXR0ciwgdm1hLCAxKTsKIH0KIAorc3RhdGljIHNzaXplX3QKK3BjaV9yZXNvdXJjZV9pbyhzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosCisJCXN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsCisJCWxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCwgYm9vbCB3cml0ZSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoY29udGFpbmVyX29mKGtvYmosCisJCQkJCQkgICAgICAgc3RydWN0IGRldmljZSwga29iaikpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gYXR0ci0+cHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIHBvcnQgPSBvZmY7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUENJX1JPTV9SRVNPVVJDRTsgaSsrKQorCQlpZiAocmVzID09ICZwZGV2LT5yZXNvdXJjZVtpXSkKKwkJCWJyZWFrOworCWlmIChpID49IFBDSV9ST01fUkVTT1VSQ0UpCisJCXJldHVybiAtRU5PREVWOworCisJcG9ydCArPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaSk7CisKKwlpZiAocG9ydCA+IHBjaV9yZXNvdXJjZV9lbmQocGRldiwgaSkpCisJCXJldHVybiAwOworCisJaWYgKHBvcnQgKyBjb3VudCAtIDEgPiBwY2lfcmVzb3VyY2VfZW5kKHBkZXYsIGkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoY291bnQpIHsKKwljYXNlIDE6CisJCWlmICh3cml0ZSkKKwkJCW91dGIoKih1OCAqKWJ1ZiwgcG9ydCk7CisJCWVsc2UKKwkJCSoodTggKilidWYgPSBpbmIocG9ydCk7CisJCXJldHVybiAxOworCWNhc2UgMjoKKwkJaWYgKHdyaXRlKQorCQkJb3V0dygqKHUxNiAqKWJ1ZiwgcG9ydCk7CisJCWVsc2UKKwkJCSoodTE2ICopYnVmID0gaW53KHBvcnQpOworCQlyZXR1cm4gMjsKKwljYXNlIDQ6CisJCWlmICh3cml0ZSkKKwkJCW91dGwoKih1MzIgKilidWYsIHBvcnQpOworCQllbHNlCisJCQkqKHUzMiAqKWJ1ZiA9IGlubChwb3J0KTsKKwkJcmV0dXJuIDQ7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgc3NpemVfdAorcGNpX3JlYWRfcmVzb3VyY2VfaW8oc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkgICAgIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsCisJCSAgICAgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBwY2lfcmVzb3VyY2VfaW8oZmlscCwga29iaiwgYXR0ciwgYnVmLCBvZmYsIGNvdW50LCBmYWxzZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitwY2lfd3JpdGVfcmVzb3VyY2VfaW8oc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkgICAgICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLAorCQkgICAgICBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIHBjaV9yZXNvdXJjZV9pbyhmaWxwLCBrb2JqLCBhdHRyLCBidWYsIG9mZiwgY291bnQsIHRydWUpOworfQorCiAvKioKICAqIHBjaV9yZW1vdmVfcmVzb3VyY2VfZmlsZXMgLSBjbGVhbnVwIHJlc291cmNlIGZpbGVzCiAgKiBAcGRldjogZGV2IHRvIGNsZWFudXAKQEAgLTgyOCw2ICs4OTIsMTAgQEAKIAkJCXNwcmludGYocmVzX2F0dHJfbmFtZSwgInJlc291cmNlJWQiLCBudW0pOwogCQkJcmVzX2F0dHItPm1tYXAgPSBwY2lfbW1hcF9yZXNvdXJjZV91YzsKIAkJfQorCQlpZiAocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIG51bSkgJiBJT1JFU09VUkNFX0lPKSB7CisJCQlyZXNfYXR0ci0+cmVhZCA9IHBjaV9yZWFkX3Jlc291cmNlX2lvOworCQkJcmVzX2F0dHItPndyaXRlID0gcGNpX3dyaXRlX3Jlc291cmNlX2lvOworCQl9CiAJCXJlc19hdHRyLT5hdHRyLm5hbWUgPSByZXNfYXR0cl9uYW1lOwogCQlyZXNfYXR0ci0+YXR0ci5tb2RlID0gU19JUlVTUiB8IFNfSVdVU1I7CiAJCXJlc19hdHRyLT5zaXplID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBudW0pOwpAQCAtMTA5Nyw2ICsxMTY1LDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGVycl92Z2FfZmlsZTsKIAorCXBjaV9jcmVhdGVfZmlybXdhcmVfbGFiZWxfZmlsZXMocGRldik7CisKIAlyZXR1cm4gMDsKIAogZXJyX3ZnYV9maWxlOgpAQCAtMTE2NCw2ICsxMjM0LDkgQEAKIAkJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgcGRldi0+cm9tX2F0dHIpOwogCQlrZnJlZShwZGV2LT5yb21fYXR0cik7CiAJfQorCisJcGNpX3JlbW92ZV9maXJtd2FyZV9sYWJlbF9maWxlcyhwZGV2KTsKKwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBwY2lfc3lzZnNfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCA3NDBmYjRlLi43ZmEzY2JkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtMTI3NSw2ICsxMjc1LDIyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoKKyAqIFRpbWUgdG8gd2FpdCBiZWZvcmUgdGhlIHN5c3RlbSBjYW4gYmUgcHV0IGludG8gYSBzbGVlcCBzdGF0ZSBhZnRlciByZXBvcnRpbmcKKyAqIGEgd2FrZXVwIGV2ZW50IHNpZ25hbGVkIGJ5IGEgUENJIGRldmljZS4KKyAqLworI2RlZmluZSBQQ0lfV0FLRVVQX0NPT0xET1dOCTEwMAorCisvKioKKyAqIHBjaV93YWtldXBfZXZlbnQgLSBSZXBvcnQgYSB3YWtldXAgZXZlbnQgcmVsYXRlZCB0byBhIGdpdmVuIFBDSSBkZXZpY2UuCisgKiBAZGV2OiBEZXZpY2UgdG8gcmVwb3J0IHRoZSB3YWtldXAgZXZlbnQgZm9yLgorICovCit2b2lkIHBjaV93YWtldXBfZXZlbnQoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpZiAoZGV2aWNlX21heV93YWtldXAoJmRldi0+ZGV2KSkKKwkJcG1fd2FrZXVwX2V2ZW50KCZkZXYtPmRldiwgUENJX1dBS0VVUF9DT09MRE9XTik7Cit9CisKIC8qKgogICogcGNpX3BtZV93YWtldXAgLSBXYWtlIHVwIGEgUENJIGRldmljZSBpZiBpdHMgUE1FIFN0YXR1cyBiaXQgaXMgc2V0LgogICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KQEAgLTEyODUsOCArMTMwMSwxMCBAQAogICovCiBzdGF0aWMgaW50IHBjaV9wbWVfd2FrZXVwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmlnbikKIHsKLQlpZiAocGNpX2NoZWNrX3BtZV9zdGF0dXMoZGV2KSkKKwlpZiAocGNpX2NoZWNrX3BtZV9zdGF0dXMoZGV2KSkgewogCQlwbV9yZXF1ZXN0X3Jlc3VtZSgmZGV2LT5kZXYpOworCQlwY2lfd2FrZXVwX2V2ZW50KGRldik7CisJfQogCXJldHVybiAwOwogfQogCkBAIC0yMjk0LDIxICsyMzEyLDE3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfbXNpX29mZik7CiAKLSNpZm5kZWYgSEFWRV9BUkNIX1BDSV9TRVRfRE1BX01BWF9TRUdNRU5UX1NJWkUKIGludCBwY2lfc2V0X2RtYV9tYXhfc2VnX3NpemUoc3RydWN0IHBjaV9kZXYgKmRldiwgdW5zaWduZWQgaW50IHNpemUpCiB7CiAJcmV0dXJuIGRtYV9zZXRfbWF4X3NlZ19zaXplKCZkZXYtPmRldiwgc2l6ZSk7CiB9CiBFWFBPUlRfU1lNQk9MKHBjaV9zZXRfZG1hX21heF9zZWdfc2l6ZSk7Ci0jZW5kaWYKIAotI2lmbmRlZiBIQVZFX0FSQ0hfUENJX1NFVF9ETUFfU0VHTUVOVF9CT1VOREFSWQogaW50IHBjaV9zZXRfZG1hX3NlZ19ib3VuZGFyeShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spCiB7CiAJcmV0dXJuIGRtYV9zZXRfc2VnX2JvdW5kYXJ5KCZkZXYtPmRldiwgbWFzayk7CiB9CiBFWFBPUlRfU1lNQk9MKHBjaV9zZXRfZG1hX3NlZ19ib3VuZGFyeSk7Ci0jZW5kaWYKIAogc3RhdGljIGludCBwY2llX2ZscihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcHJvYmUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuaCBiL2RyaXZlcnMvcGNpL3BjaS5oCmluZGV4IGY4MDc3YjMuLjY3OWMzOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5oCisrKyBiL2RyaXZlcnMvcGNpL3BjaS5oCkBAIC0xMSw2ICsxMSwxNSBAQAogZXh0ZXJuIGludCBwY2lfdWV2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KTsKIGV4dGVybiBpbnQgcGNpX2NyZWF0ZV9zeXNmc19kZXZfZmlsZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogZXh0ZXJuIHZvaWQgcGNpX3JlbW92ZV9zeXNmc19kZXZfZmlsZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworI2lmbmRlZiBDT05GSUdfRE1JCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2NyZWF0ZV9maXJtd2FyZV9sYWJlbF9maWxlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sgcmV0dXJuOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3JlbW92ZV9maXJtd2FyZV9sYWJlbF9maWxlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sgcmV0dXJuOyB9CisjZWxzZQorZXh0ZXJuIHZvaWQgcGNpX2NyZWF0ZV9maXJtd2FyZV9sYWJlbF9maWxlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldik7CitleHRlcm4gdm9pZCBwY2lfcmVtb3ZlX2Zpcm13YXJlX2xhYmVsX2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKKyNlbmRpZgogZXh0ZXJuIHZvaWQgcGNpX2NsZWFudXBfcm9tKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogI2lmZGVmIEhBVkVfUENJX01NQVAKIGV4dGVybiBpbnQgcGNpX21tYXBfZml0cyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IHJlc25vLApAQCAtNTYsNiArNjUsNyBAQAogZXh0ZXJuIHZvaWQgcGNpX2Rpc2FibGVfZW5hYmxlZF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldik7CiBleHRlcm4gYm9vbCBwY2lfY2hlY2tfcG1lX3N0YXR1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGV4dGVybiBpbnQgcGNpX2ZpbmlzaF9ydW50aW1lX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKmRldik7CitleHRlcm4gdm9pZCBwY2lfd2FrZXVwX2V2ZW50KHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogZXh0ZXJuIGludCBfX3BjaV9wbWVfd2FrZXVwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmlnbik7CiBleHRlcm4gdm9pZCBwY2lfcG1lX3dha2V1cF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cyk7CiBleHRlcm4gdm9pZCBwY2lfcG1faW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL3BjaWUvS2NvbmZpZwppbmRleCBiOGI0OTRiLi5kZGE3MDk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL0tjb25maWcKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9LY29uZmlnCkBAIC0zMSwxNCArMzEsMjIgQEAKICMgUENJIEV4cHJlc3MgQVNQTQogIwogY29uZmlnIFBDSUVBU1BNCi0JYm9vbCAiUENJIEV4cHJlc3MgQVNQTSBzdXBwb3J0KEV4cGVyaW1lbnRhbCkiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgRVhQRVJJTUVOVEFMICYmIFBDSUVQT1JUQlVTCi0JZGVmYXVsdCBuCisJYm9vbCAiUENJIEV4cHJlc3MgQVNQTSBjb250cm9sIiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gUENJICYmIFBDSUVQT1JUQlVTCisJZGVmYXVsdCB5CiAJaGVscAotCSAgVGhpcyBlbmFibGVzIFBDSSBFeHByZXNzIEFTUE0gKEFjdGl2ZSBTdGF0ZSBQb3dlciBNYW5hZ2VtZW50KSBhbmQKLQkgIENsb2NrIFBvd2VyIE1hbmFnZW1lbnQuIEFTUE0gc3VwcG9ydHMgc3RhdGUgTDAvTDBzL0wxLgorCSAgVGhpcyBlbmFibGVzIE9TIGNvbnRyb2wgb3ZlciBQQ0kgRXhwcmVzcyBBU1BNIChBY3RpdmUgU3RhdGUKKwkgIFBvd2VyIE1hbmFnZW1lbnQpIGFuZCBDbG9jayBQb3dlciBNYW5hZ2VtZW50LiBBU1BNIHN1cHBvcnRzCisJICBzdGF0ZSBMMC9MMHMvTDEuCiAKLQkgIFdoZW4gaW4gZG91YnQsIHNheSBOLgorCSAgQVNQTSBpcyBpbml0aWFsbHkgc2V0IHVwIHRoZSB0aGUgZmlybXdhcmUuIFdpdGggdGhpcyBvcHRpb24gZW5hYmxlZCwKKwkgIExpbnV4IGNhbiBtb2RpZnkgdGhpcyBzdGF0ZSBpbiBvcmRlciB0byBkaXNhYmxlIEFTUE0gb24ga25vd24tYmFkCisJICBoYXJkd2FyZSBvciBjb25maWd1cmF0aW9ucyBhbmQgZW5hYmxlIGl0IHdoZW4ga25vd24tc2FmZS4KKworCSAgQVNQTSBjYW4gYmUgZGlzYWJsZWQgb3IgZW5hYmxlZCBhdCBydW50aW1lIHZpYQorCSAgL3N5cy9tb2R1bGUvcGNpZV9hc3BtL3BhcmFtZXRlcnMvcG9saWN5CisKKwkgIFdoZW4gaW4gZG91YnQsIHNheSBZLgogY29uZmlnIFBDSUVBU1BNX0RFQlVHCiAJYm9vbCAiRGVidWcgUENJIEV4cHJlc3MgQVNQTSIKIAlkZXBlbmRzIG9uIFBDSUVBU1BNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfY29yZS5jIGIvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2NvcmUuYwppbmRleCA4YWY0ZjYxLi5mYzBiNWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9jb3JlLmMKQEAgLTcyNywyMCArNzI3LDIxIEBACiBzdGF0aWMgaW50IGdldF9lX3NvdXJjZShzdHJ1Y3QgYWVyX3JwYyAqcnBjLCBzdHJ1Y3QgYWVyX2Vycl9zb3VyY2UgKmVfc3JjKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7CiAKIAkvKiBMb2NrIGFjY2VzcyB0byBSb290IGVycm9yIHByb2R1Y2VyL2NvbnN1bWVyIGluZGV4ICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJwYy0+ZV9sb2NrLCBmbGFncyk7Ci0JaWYgKHJwYy0+cHJvZF9pZHggIT0gcnBjLT5jb25zX2lkeCkgewotCQkqZV9zcmMgPSBycGMtPmVfc291cmNlc1tycGMtPmNvbnNfaWR4XTsKLQkJcnBjLT5jb25zX2lkeCsrOwotCQlpZiAocnBjLT5jb25zX2lkeCA9PSBBRVJfRVJST1JfU09VUkNFU19NQVgpCi0JCQlycGMtPmNvbnNfaWR4ID0gMDsKLQkJcmV0ID0gMTsKKwlpZiAocnBjLT5wcm9kX2lkeCA9PSBycGMtPmNvbnNfaWR4KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJwYy0+ZV9sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOwogCX0KKworCSplX3NyYyA9IHJwYy0+ZV9zb3VyY2VzW3JwYy0+Y29uc19pZHhdOworCXJwYy0+Y29uc19pZHgrKzsKKwlpZiAocnBjLT5jb25zX2lkeCA9PSBBRVJfRVJST1JfU09VUkNFU19NQVgpCisJCXJwYy0+Y29uc19pZHggPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJwYy0+ZV9sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAxOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvYXNwbS5jIGIvZHJpdmVycy9wY2kvcGNpZS9hc3BtLmMKaW5kZXggYmU1M2Q5OC4uNzEyMjI4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9hc3BtLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9hc3BtLmMKQEAgLTU4OCwxMSArNTg4LDIzIEBACiAJICogdXBkYXRlIHRocm91Z2ggcGNpZV9hc3BtX2NhcF9pbml0KCkuCiAJICovCiAJcGNpZV9hc3BtX2NhcF9pbml0KGxpbmssIGJsYWNrbGlzdCk7Ci0JcGNpZV9jb25maWdfYXNwbV9wYXRoKGxpbmspOwogCiAJLyogU2V0dXAgaW5pdGlhbCBDbG9jayBQTSBzdGF0ZSAqLwogCXBjaWVfY2xrcG1fY2FwX2luaXQobGluaywgYmxhY2tsaXN0KTsKLQlwY2llX3NldF9jbGtwbShsaW5rLCBwb2xpY3lfdG9fY2xrcG1fc3RhdGUobGluaykpOworCisJLyoKKwkgKiBBdCB0aGlzIHN0YWdlIGRyaXZlcnMgaGF2ZW4ndCBoYWQgYW4gb3Bwb3J0dW5pdHkgdG8gY2hhbmdlIHRoZQorCSAqIGxpbmsgcG9saWN5IHNldHRpbmcuIEVuYWJsaW5nIEFTUE0gb24gYnJva2VuIGhhcmR3YXJlIGNhbiBjcmlwcGxlCisJICogaXQgZXZlbiBiZWZvcmUgdGhlIGRyaXZlciBoYXMgaGFkIGEgY2hhbmNlIHRvIGRpc2FibGUgQVNQTSwgc28KKwkgKiBkZWZhdWx0IHRvIGEgc2FmZSBsZXZlbCByaWdodCBub3cuIElmIHdlJ3JlIGVuYWJsaW5nIEFTUE0gYmV5b25kCisJICogdGhlIEJJT1MncyBleHBlY3RhdGlvbiwgd2UnbGwgZG8gc28gb25jZSBwY2lfZW5hYmxlX2RldmljZSgpIGlzCisJICogY2FsbGVkLgorCSAqLworCWlmIChhc3BtX3BvbGljeSAhPSBQT0xJQ1lfUE9XRVJTQVZFKSB7CisJCXBjaWVfY29uZmlnX2FzcG1fcGF0aChsaW5rKTsKKwkJcGNpZV9zZXRfY2xrcG0obGluaywgcG9saWN5X3RvX2Nsa3BtX3N0YXRlKGxpbmspKTsKKwl9CisKIHVubG9jazoKIAltdXRleF91bmxvY2soJmFzcG1fbG9jayk7CiBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL3BtZS9wY2llX3BtZS5jIGIvZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWUuYwppbmRleCBkNjcyYTBhLi5iYmRlYTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL3BtZS9wY2llX3BtZS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvcG1lL3BjaWVfcG1lLmMKQEAgLTE1NCw2ICsxNTQsNyBAQAogCQkvKiBTa2lwIFBDSWUgZGV2aWNlcyBpbiBjYXNlIHdlIHN0YXJ0ZWQgZnJvbSBhIHJvb3QgcG9ydC4gKi8KIAkJaWYgKCFwY2lfaXNfcGNpZShkZXYpICYmIHBjaV9jaGVja19wbWVfc3RhdHVzKGRldikpIHsKIAkJCXBtX3JlcXVlc3RfcmVzdW1lKCZkZXYtPmRldik7CisJCQlwY2lfd2FrZXVwX2V2ZW50KGRldik7CiAJCQlyZXQgPSB0cnVlOwogCQl9CiAKQEAgLTI1NCw4ICsyNTUsMTAgQEAKIAlpZiAoZm91bmQpIHsKIAkJLyogVGhlIGRldmljZSBpcyB0aGVyZSwgYnV0IHdlIGhhdmUgdG8gY2hlY2sgaXRzIFBNRSBzdGF0dXMuICovCiAJCWZvdW5kID0gcGNpX2NoZWNrX3BtZV9zdGF0dXMoZGV2KTsKLQkJaWYgKGZvdW5kKQorCQlpZiAoZm91bmQpIHsKIAkJCXBtX3JlcXVlc3RfcmVzdW1lKCZkZXYtPmRldik7CisJCQlwY2lfd2FrZXVwX2V2ZW50KGRldik7CisJCX0KIAkJcGNpX2Rldl9wdXQoZGV2KTsKIAl9IGVsc2UgaWYgKGRldmZuKSB7CiAJCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wcm9iZS5jIGIvZHJpdmVycy9wY2kvcHJvYmUuYwppbmRleCBmNGFkYmEyLi4xMjYyNWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wcm9iZS5jCisrKyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMKQEAgLTE2Myw5ICsxNjMsMTYgQEAKIAkJCXN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBpbnQgcG9zKQogewogCXUzMiBsLCBzeiwgbWFzazsKKwl1MTYgb3JpZ19jbWQ7CiAKIAltYXNrID0gdHlwZSA/IFBDSV9ST01fQUREUkVTU19NQVNLIDogfjA7CiAKKwlpZiAoIWRldi0+bW1pb19hbHdheXNfb24pIHsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJm9yaWdfY21kKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsCisJCQlvcmlnX2NtZCAmIH4oUENJX0NPTU1BTkRfTUVNT1JZIHwgUENJX0NPTU1BTkRfSU8pKTsKKwl9CisKIAlyZXMtPm5hbWUgPSBwY2lfbmFtZShkZXYpOwogCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zLCAmbCk7CkBAIC0xNzMsNiArMTgwLDkgQEAKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MsICZzeik7CiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHBvcywgbCk7CiAKKwlpZiAoIWRldi0+bW1pb19hbHdheXNfb24pCisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBvcmlnX2NtZCk7CisKIAkvKgogCSAqIEFsbCBiaXRzIHNldCBpbiBzeiBtZWFucyB0aGUgZGV2aWNlIGlzbid0IHdvcmtpbmcgcHJvcGVybHkuCiAJICogSWYgdGhlIEJBUiBpc24ndCBpbXBsZW1lbnRlZCwgYWxsIGJpdHMgbXVzdCBiZSAwLiAgSWYgaXQncyBhCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wcm9jLmMgYi9kcml2ZXJzL3BjaS9wcm9jLmMKaW5kZXggNDQ5ZTg5MC4uMDFmMDMwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcHJvYy5jCisrKyBiL2RyaXZlcnMvcGNpL3Byb2MuYwpAQCAtNDMxLDggKzQzMSw2IEBACiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplOwogCiAJaWYgKChlID0gZGV2LT5wcm9jZW50KSkgewotCQlpZiAoYXRvbWljX3JlYWQoJmUtPmNvdW50KSA+IDEpCi0JCQlyZXR1cm4gLUVCVVNZOwogCQlyZW1vdmVfcHJvY19lbnRyeShlLT5uYW1lLCBkZXYtPmJ1cy0+cHJvY2Rpcik7CiAJCWRldi0+cHJvY2VudCA9IE5VTEw7CiAJfQpAQCAtNDg1LDkgKzQ4Myw5IEBACiAJcHJvY19jcmVhdGUoImRldmljZXMiLCAwLCBwcm9jX2J1c19wY2lfZGlyLAogCQkgICAgJnByb2NfYnVzX3BjaV9kZXZfb3BlcmF0aW9ucyk7CiAJcHJvY19pbml0aWFsaXplZCA9IDE7Ci0Jd2hpbGUgKChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkZXYpKSAhPSBOVUxMKSB7CisJZm9yX2VhY2hfcGNpX2RldihkZXYpCiAJCXBjaV9wcm9jX2F0dGFjaF9kZXZpY2UoZGV2KTsKLQl9CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcXVpcmtzLmMgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwppbmRleCA0NzczNDVkLi44OWVkMTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9xdWlya3MuYworKysgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwpAQCAtOTEsNiArOTEsMTkgQEAKIH0KIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBxdWlya19yZXNvdXJjZV9hbGlnbm1lbnQpOwogCisvKgorICogRGVjb2Rpbmcgc2hvdWxkIGJlIGRpc2FibGVkIGZvciBhIFBDSSBkZXZpY2UgZHVyaW5nIEJBUiBzaXppbmcgdG8gYXZvaWQKKyAqIGNvbmZsaWN0LiBCdXQgZG9pbmcgc28gbWF5IGNhdXNlIHByb2JsZW1zIG9uIGhvc3QgYnJpZGdlIGFuZCBwZXJoYXBzIG90aGVyCisgKiBrZXkgc3lzdGVtIGRldmljZXMuIEZvciBkZXZpY2VzIHRoYXQgbmVlZCB0byBoYXZlIG1taW8gZGVjb2RpbmcgYWx3YXlzLW9uLAorICogd2UgbmVlZCB0byBzZXQgdGhlIGRldi0+bW1pb19hbHdheXNfb24gYml0LgorICovCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfbW1pb19hbHdheXNfb24oc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpZiAoKGRldi0+Y2xhc3MgPj4gOCkgPT0gUENJX0NMQVNTX0JSSURHRV9IT1NUKQorCQlkZXYtPm1taW9fYWx3YXlzX29uID0gMTsKK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0VBUkxZKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHF1aXJrX21taW9fYWx3YXlzX29uKTsKKwogLyogVGhlIE1lbGxhbm94IFRhdm9yIGRldmljZSBnaXZlcyBmYWxzZSBwb3NpdGl2ZSBwYXJpdHkgZXJyb3JzCiAgKiBNYXJrIHRoaXMgZGV2aWNlIHdpdGggYSBicm9rZW5fcGFyaXR5X3N0YXR1cywgdG8gYWxsb3cKICAqIFBDSSBzY2FubmluZyBjb2RlIHRvICJza2lwIiB0aGlzIG5vdyBibGFja2xpc3RlZCBkZXZpY2UuCkBAIC0xNDU5LDYgKzE0NzIsNyBAQAogCXN3aXRjaCAocGRldi0+ZGV2aWNlKSB7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzYwOiAvKiBTQVRBIHNpbmdsZSBwb3J0ICovCiAJY2FzZSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzYyOiAvKiBTQVRBIGR1YWwgcG9ydHMgKi8KKwljYXNlIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzNjQ6IC8qIFNBVEEgZHVhbCBwb3J0cyAqLwogCQkvKiBUaGUgY29udHJvbGxlciBzaG91bGQgYmUgaW4gc2luZ2xlIGZ1bmN0aW9uIGFoY2kgbW9kZSAqLwogCQljb25mMSB8PSAweDAwMDJBMTAwOyAvKiBTZXQgOCwgMTMsIDE1LCAxNyAqLwogCQlicmVhazsKQEAgLTE0NzAsNiArMTQ4NCw3IEBACiAJCS8qIEZhbGwgdGhyb3VnaCAqLwogCWNhc2UgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2MToKIAljYXNlIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzNjM6CisJY2FzZSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzY5OgogCQkvKiBFbmFibGUgZHVhbCBmdW5jdGlvbiBtb2RlLCBBSENJIG9uIGZuIDAsIElERSBmbjEgKi8KIAkJLyogU2V0IHRoZSBjbGFzcyBjb2RlcyBjb3JyZWN0bHkgYW5kIHRoZW4gZGlyZWN0IElERSAwICovCiAJCWNvbmYxIHw9IDB4MDBDMkExQjM7IC8qIFNldCAwLCAxLCA0LCA1LCA3LCA4LCAxMywgMTUsIDE3LCAyMiwgMjMgKi8KQEAgLTE0OTYsMTYgKzE1MTEsMjAgQEAKIERFQ0xBUkVfUENJX0ZJWFVQX0VBUkxZKFBDSV9WRU5ET1JfSURfSk1JQ1JPTiwgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2MSwgcXVpcmtfam1pY3Jvbl9hdGEpOwogREVDTEFSRV9QQ0lfRklYVVBfRUFSTFkoUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzYyLCBxdWlya19qbWljcm9uX2F0YSk7CiBERUNMQVJFX1BDSV9GSVhVUF9FQVJMWShQQ0lfVkVORE9SX0lEX0pNSUNST04sIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzNjMsIHF1aXJrX2ptaWNyb25fYXRhKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0VBUkxZKFBDSV9WRU5ET1JfSURfSk1JQ1JPTiwgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2NCwgcXVpcmtfam1pY3Jvbl9hdGEpOwogREVDTEFSRV9QQ0lfRklYVVBfRUFSTFkoUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzY1LCBxdWlya19qbWljcm9uX2F0YSk7CiBERUNMQVJFX1BDSV9GSVhVUF9FQVJMWShQQ0lfVkVORE9SX0lEX0pNSUNST04sIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzNjYsIHF1aXJrX2ptaWNyb25fYXRhKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0VBUkxZKFBDSV9WRU5ET1JfSURfSk1JQ1JPTiwgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2OCwgcXVpcmtfam1pY3Jvbl9hdGEpOworREVDTEFSRV9QQ0lfRklYVVBfRUFSTFkoUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzY5LCBxdWlya19qbWljcm9uX2F0YSk7CiBERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzYwLCBxdWlya19qbWljcm9uX2F0YSk7CiBERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzYxLCBxdWlya19qbWljcm9uX2F0YSk7CiBERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzYyLCBxdWlya19qbWljcm9uX2F0YSk7CiBERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzYzLCBxdWlya19qbWljcm9uX2F0YSk7CitERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzY0LCBxdWlya19qbWljcm9uX2F0YSk7CiBERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzY1LCBxdWlya19qbWljcm9uX2F0YSk7CiBERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzY2LCBxdWlya19qbWljcm9uX2F0YSk7CiBERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzY4LCBxdWlya19qbWljcm9uX2F0YSk7CitERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzY5LCBxdWlya19qbWljcm9uX2F0YSk7CiAKICNlbmRpZgogCkBAIC0yMTE1LDYgKzIxMzQsNyBAQAogREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBX1ZUMzMzNiwgcXVpcmtfZGlzYWJsZV9hbGxfbXNpKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV9WVDMzNTEsIHF1aXJrX2Rpc2FibGVfYWxsX21zaSk7CiBERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfVlQzMzY0LCBxdWlya19kaXNhYmxlX2FsbF9tc2kpOworREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBXzgzODBfMCwgcXVpcmtfZGlzYWJsZV9hbGxfbXNpKTsKIAogLyogRGlzYWJsZSBNU0kgb24gY2hpcHNldHMgdGhhdCBhcmUga25vd24gdG8gbm90IHN1cHBvcnQgaXQgKi8KIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBxdWlya19kaXNhYmxlX21zaShzdHJ1Y3QgcGNpX2RldiAqZGV2KQpAQCAtMjEyNiwxMiArMjE0NiwyOSBAQAogCX0KIH0KIERFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF84MTMxX0JSSURHRSwgcXVpcmtfZGlzYWJsZV9tc2kpOwotREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9BTUQsIDB4OTYwMiwgcXVpcmtfZGlzYWJsZV9tc2kpOwotREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9BU1VTVEVLLCAweDk2MDIsIHF1aXJrX2Rpc2FibGVfbXNpKTsKLURFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfQUksIDB4OTYwMiwgcXVpcmtfZGlzYWJsZV9tc2kpOwogREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9WSUEsIDB4YTIzOCwgcXVpcmtfZGlzYWJsZV9tc2kpOwogREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9BVEksIDB4NWEzZiwgcXVpcmtfZGlzYWJsZV9tc2kpOwogCisvKgorICogVGhlIEFQQyBicmlkZ2UgZGV2aWNlIGluIEFNRCA3ODAgZmFtaWx5IG5vcnRoYnJpZGdlcyBoYXMgc29tZSByYW5kb20KKyAqIE9FTSBzdWJzeXN0ZW0gSUQgaW4gaXRzIHZlbmRvciBJRCByZWdpc3RlciAoZXJyYXR1bSAxOCksIHNvIGluc3RlYWQKKyAqIHdlIHVzZSB0aGUgcG9zc2libGUgdmVuZG9yL2RldmljZSBJRHMgb2YgdGhlIGhvc3QgYnJpZGdlIGZvciB0aGUKKyAqIGRlY2xhcmVkIHF1aXJrLCBhbmQgc2VhcmNoIGZvciB0aGUgQVBDIGJyaWRnZSBieSBzbG90IG51bWJlci4KKyAqLworc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX2FtZF83ODBfYXBjX21zaShzdHJ1Y3QgcGNpX2RldiAqaG9zdF9icmlkZ2UpCit7CisJc3RydWN0IHBjaV9kZXYgKmFwY19icmlkZ2U7CisKKwlhcGNfYnJpZGdlID0gcGNpX2dldF9zbG90KGhvc3RfYnJpZGdlLT5idXMsIFBDSV9ERVZGTigxLCAwKSk7CisJaWYgKGFwY19icmlkZ2UpIHsKKwkJaWYgKGFwY19icmlkZ2UtPmRldmljZSA9PSAweDk2MDIpCisJCQlxdWlya19kaXNhYmxlX21zaShhcGNfYnJpZGdlKTsKKwkJcGNpX2Rldl9wdXQoYXBjX2JyaWRnZSk7CisJfQorfQorREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9BTUQsIDB4OTYwMCwgcXVpcmtfYW1kXzc4MF9hcGNfbXNpKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfQU1ELCAweDk2MDEsIHF1aXJrX2FtZF83ODBfYXBjX21zaSk7CisKIC8qIEdvIHRocm91Z2ggdGhlIGxpc3Qgb2YgSHlwZXJ0cmFuc3BvcnQgY2FwYWJpbGl0aWVzIGFuZAogICogcmV0dXJuIDEgaWYgYSBIVCBNU0kgY2FwYWJpbGl0eSBpcyBmb3VuZCBhbmQgZW5hYmxlZCAqLwogc3RhdGljIGludCBfX2RldmluaXQgbXNpX2h0X2NhcF9lbmFibGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYpCkBAIC0yMzkwLDYgKzI0MjcsOSBAQAogCWludCBwb3M7CiAJaW50IGZvdW5kOwogCisJaWYgKCFwY2lfbXNpX2VuYWJsZWQoKSkKKwkJcmV0dXJuOworCiAJLyogY2hlY2sgaWYgdGhlcmUgaXMgSFQgTVNJIGNhcCBvciBlbmFibGVkIG9uIHRoaXMgZGV2aWNlICovCiAJZm91bmQgPSBodF9jaGVja19tc2lfbWFwcGluZyhkZXYpOwogCkBAIC0yNzQyLDcgKzI3ODIsNyBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBDTFMgJXUgYnl0ZXNcbiIsCiAJCSAgICAgICBwY2lfY2FjaGVfbGluZV9zaXplIDw8IDIpOwogCi0Jd2hpbGUgKChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkZXYpKSAhPSBOVUxMKSB7CisJZm9yX2VhY2hfcGNpX2RldihkZXYpIHsKIAkJcGNpX2ZpeHVwX2RldmljZShwY2lfZml4dXBfZmluYWwsIGRldik7CiAJCS8qCiAJCSAqIElmIGFyY2ggaGFzbid0IHNldCBpdCBleHBsaWNpdGx5IHlldCwgdXNlIHRoZSBDTFMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3NlYXJjaC5jIGIvZHJpdmVycy9wY2kvc2VhcmNoLmMKaW5kZXggMjBkMDNmNy4uOWQ3NWRjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvc2VhcmNoLmMKKysrIGIvZHJpdmVycy9wY2kvc2VhcmNoLmMKQEAgLTE2OSw3ICsxNjksNyBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOwogCi0Jd2hpbGUgKChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkZXYpKSAhPSBOVUxMKSB7CisJZm9yX2VhY2hfcGNpX2RldihkZXYpIHsKIAkJaWYgKHBjaV9kb21haW5fbnIoZGV2LT5idXMpID09IGRvbWFpbiAmJgogCQkgICAgKGRldi0+YnVzLT5udW1iZXIgPT0gYnVzICYmIGRldi0+ZGV2Zm4gPT0gZGV2Zm4pKQogCQkJcmV0dXJuIGRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jIGIvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMKaW5kZXggMTliMTExMy4uNjZjYjhmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMKKysrIGIvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMKQEAgLTg3NCwxOSArODc0LDE2IEBACiBhZ2FpbjoKIAlwY2lfYnVzX3NpemVfYnJpZGdlcyhwYXJlbnQpOwogCV9fcGNpX2JyaWRnZV9hc3NpZ25fcmVzb3VyY2VzKGJyaWRnZSwgJmhlYWQpOwotCXJldHZhbCA9IHBjaV9yZWVuYWJsZV9kZXZpY2UoYnJpZGdlKTsKLQlwY2lfc2V0X21hc3RlcihicmlkZ2UpOwotCXBjaV9lbmFibGVfYnJpZGdlcyhwYXJlbnQpOwogCiAJdHJpZWRfdGltZXMrKzsKIAogCWlmICghaGVhZC5uZXh0KQotCQlyZXR1cm47CisJCWdvdG8gZW5hYmxlX2FsbDsKIAogCWlmICh0cmllZF90aW1lcyA+PSAyKSB7CiAJCS8qIHN0aWxsIGZhaWwsIGRvbid0IG5lZWQgdG8gdHJ5IG1vcmUgKi8KIAkJZnJlZV9mYWlsZWRfbGlzdCgmaGVhZCk7Ci0JCXJldHVybjsKKwkJZ290byBlbmFibGVfYWxsOwogCX0KIAogCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IE5vLiAlZCB0cnkgdG8gYXNzaWduIHVuYXNzaWduZWQgcmVzXG4iLApAQCAtOTE5LDUgKzkxNiwxMCBAQAogCWZyZWVfZmFpbGVkX2xpc3QoJmhlYWQpOwogCiAJZ290byBhZ2FpbjsKKworZW5hYmxlX2FsbDoKKwlyZXR2YWwgPSBwY2lfcmVlbmFibGVfZGV2aWNlKGJyaWRnZSk7CisJcGNpX3NldF9tYXN0ZXIoYnJpZGdlKTsKKwlwY2lfZW5hYmxlX2JyaWRnZXMocGFyZW50KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV9hc3NpZ25fdW5hc3NpZ25lZF9icmlkZ2VfcmVzb3VyY2VzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3NldHVwLWlycS5jIGIvZHJpdmVycy9wY2kvc2V0dXAtaXJxLmMKaW5kZXggYWE3OTVmZC4uZWVjOTczOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvc2V0dXAtaXJxLmMKKysrIGIvZHJpdmVycy9wY2kvc2V0dXAtaXJxLmMKQEAgLTU5LDcgKzU5LDYgQEAKIAkgICAgICAgaW50ICgqbWFwX2lycSkoc3RydWN0IHBjaV9kZXYgKiwgdTgsIHU4KSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKLQl3aGlsZSAoKGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGRldikpICE9IE5VTEwpIHsKKwlmb3JfZWFjaF9wY2lfZGV2KGRldikKIAkJcGRldl9maXh1cF9pcnEoZGV2LCBzd2l6emxlLCBtYXBfaXJxKTsKLQl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYyBiL2RyaXZlcnMvcGNpL3NldHVwLXJlcy5jCmluZGV4IDkyMzc5ZTIuLjJhYWExMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3NldHVwLXJlcy5jCisrKyBiL2RyaXZlcnMvcGNpL3NldHVwLXJlcy5jCkBAIC0xNTYsNiArMTU2LDM4IEBACiAJCQkJCSAgICAgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSwgZGV2KTsKIAl9CiAKKwlpZiAocmV0IDwgMCAmJiBkZXYtPmZ3X2FkZHJbcmVzbm9dKSB7CisJCXN0cnVjdCByZXNvdXJjZSAqcm9vdCwgKmNvbmZsaWN0OworCQlyZXNvdXJjZV9zaXplX3Qgc3RhcnQsIGVuZDsKKworCQkvKgorCQkgKiBJZiB3ZSBmYWlsZWQgdG8gYXNzaWduIGFueXRoaW5nLCBsZXQncyB0cnkgdGhlIGFkZHJlc3MKKwkJICogd2hlcmUgZmlybXdhcmUgbGVmdCBpdC4gIFRoYXQgYXQgbGVhc3QgaGFzIGEgY2hhbmNlIG9mCisJCSAqIHdvcmtpbmcsIHdoaWNoIGlzIGJldHRlciB0aGFuIGp1c3QgbGVhdmluZyBpdCBkaXNhYmxlZC4KKwkJICovCisKKwkJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKQorCQkJcm9vdCA9ICZpb3BvcnRfcmVzb3VyY2U7CisJCWVsc2UKKwkJCXJvb3QgPSAmaW9tZW1fcmVzb3VyY2U7CisKKwkJc3RhcnQgPSByZXMtPnN0YXJ0OworCQllbmQgPSByZXMtPmVuZDsKKwkJcmVzLT5zdGFydCA9IGRldi0+ZndfYWRkcltyZXNub107CisJCXJlcy0+ZW5kID0gcmVzLT5zdGFydCArIHNpemUgLSAxOworCQlkZXZfaW5mbygmZGV2LT5kZXYsICJCQVIgJWQ6IHRyeWluZyBmaXJtd2FyZSBhc3NpZ25tZW50ICVwUlxuIiwKKwkJCSByZXNubywgcmVzKTsKKwkJY29uZmxpY3QgPSByZXF1ZXN0X3Jlc291cmNlX2NvbmZsaWN0KHJvb3QsIHJlcyk7CisJCWlmIChjb25mbGljdCkgeworCQkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJCSAiQkFSICVkOiAlcFIgY29uZmxpY3RzIHdpdGggJXMgJXBSXG4iLCByZXNubywKKwkJCQkgcmVzLCBjb25mbGljdC0+bmFtZSwgY29uZmxpY3QpOworCQkJcmVzLT5zdGFydCA9IHN0YXJ0OworCQkJcmVzLT5lbmQgPSBlbmQ7CisJCX0gZWxzZQorCQkJcmV0ID0gMDsKKwl9CisKIAlpZiAoIXJldCkgewogCQlyZXMtPmZsYWdzICY9IH5JT1JFU09VUkNFX1NUQVJUQUxJR047CiAJCWRldl9pbmZvKCZkZXYtPmRldiwgIkJBUiAlZDogYXNzaWduZWQgJXBSXG4iLCByZXNubywgcmVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL0tjb25maWcgYi9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCmluZGV4IGQwZjVhZDMuLmM5ODg1MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKKysrIGIvZHJpdmVycy9wY21jaWEvS2NvbmZpZwpAQCAtMTU3LDExICsxNTcsMTEgQEAKIAogY29uZmlnIFBDTUNJQV9BVTFYMDAKIAl0cmlzdGF0ZSAiQXUxeDAwIHBjbWNpYSBzdXBwb3J0IgotCWRlcGVuZHMgb24gU09DX0FVMVgwMCAmJiBQQ01DSUEKKwlkZXBlbmRzIG9uIE1JUFNfQUxDSEVNWSAmJiBQQ01DSUEKIAogY29uZmlnIFBDTUNJQV9BTENIRU1ZX0RFVkJPQVJECiAJdHJpc3RhdGUgIkFsY2hlbXkgRGIvUGIxeHh4IFBDTUNJQSBzb2NrZXQgc2VydmljZXMiCi0JZGVwZW5kcyBvbiBTT0NfQVUxWDAwICYmIFBDTUNJQQorCWRlcGVuZHMgb24gTUlQU19BTENIRU1ZICYmIFBDTUNJQQogCXNlbGVjdCA2NEJJVF9QSFlTX0FERFIKIAloZWxwCiAJICBFbmFibGUgdGhpcyBkcml2ZXIgb2YgeW91IHdhbnQgUENNQ0lBIHN1cHBvcnQgb24geW91ciBBbGNoZW15CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZSBiL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlCmluZGV4IGQwMDZlOGJlLi43YTJiMTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQpAQCAtNyw3ICs3LDYgQEAKIG9iai0kKENPTkZJR19QQ0NBUkQpCQkJCSs9IHBjbWNpYV9jb3JlLm8KIAogcGNtY2lhLXkJCQkJCSs9IGRzLm8gcGNtY2lhX3Jlc291cmNlLm8gY2lzdHBsLm8gcGNtY2lhX2Npcy5vCi1wY21jaWEtJChDT05GSUdfUENNQ0lBX0lPQ1RMKQkJCSs9IHBjbWNpYV9pb2N0bC5vCiBvYmotJChDT05GSUdfUENNQ0lBKQkJCQkrPSBwY21jaWEubwogCiBwY21jaWFfcnNyYy15CQkJCQkrPSByc3JjX21nci5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5oIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuaAppbmRleCBhMzI0ZDMyLi42NzUzMGNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmgKQEAgLTIzLDcgKzIzLDYgQEAKIAogLyogaW5jbHVkZSB0aGUgd29ybGQgKi8KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9wYjF4MDAuYyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9wYjF4MDAuYwppbmRleCA1YTk3OWNiLi44MDdmMmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfcGIxeDAwLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX3BiMXgwMC5jCkBAIC0zMSwxMSArMzEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgotI2luY2x1ZGUgPHBjbWNpYS9idXNfb3BzLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYyBiL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCmluZGV4IDg4NDRiYzNlLi45MTQxNGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYworKysgYi9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CkBAIC01NCw2ICs1Myw5IEBACiAvKiBVcHBlciBsaW1pdCBvbiByZWFzb25hYmxlICMgb2YgdHVwbGVzICovCiAjZGVmaW5lIE1BWF9UVVBMRVMJCTIwMAogCisvKiBCaXRzIGluIElSUUluZm8xIGZpZWxkICovCisjZGVmaW5lIElSUV9JTkZPMl9WQUxJRAkJMHgxMAorCiAvKiAxNi1iaXQgQ0lTPyAqLwogc3RhdGljIGludCBjaXNfd2lkdGg7CiBtb2R1bGVfcGFyYW0oY2lzX3dpZHRoLCBpbnQsIDA0NDQpOwpAQCAtMjEwLDcgKzIxMiw3IEBACiAgKiBQcm9iYWJseSBvbmx5IHVzZWZ1bCBmb3Igd3JpdGluZyBvbmUtYnl0ZSByZWdpc3RlcnMuIE11c3QgYmUgY2FsbGVkCiAgKiB3aXRoIG9wc19tdXRleCBoZWxkLgogICovCi12b2lkIHBjbWNpYV93cml0ZV9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgYXR0ciwgdV9pbnQgYWRkciwKK2ludCBwY21jaWFfd3JpdGVfY2lzX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgaW50IGF0dHIsIHVfaW50IGFkZHIsCiAJCSAgIHVfaW50IGxlbiwgdm9pZCAqcHRyKQogewogCXZvaWQgX19pb21lbSAqc3lzLCAqZW5kOwpAQCAtMjMyLDcgKzIzNCw3IEBACiAJCQkJKChjaXNfd2lkdGgpID8gTUFQXzE2QklUIDogMCkpOwogCQlpZiAoIXN5cykgewogCQkJZGV2X2RiZygmcy0+ZGV2LCAiY291bGQgbm90IG1hcCBtZW1vcnlcbiIpOwotCQkJcmV0dXJuOyAvKiBGSVhNRTogRXJyb3IgKi8KKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKIAkJd3JpdGViKGZsYWdzLCBzeXMrQ0lTUkVHX0lDVFJMMCk7CkBAIC0yNTcsNyArMjU5LDcgQEAKIAkJCXN5cyA9IHNldF9jaXNfbWFwKHMsIGNhcmRfb2Zmc2V0LCBmbGFncyk7CiAJCQlpZiAoIXN5cykgewogCQkJCWRldl9kYmcoJnMtPmRldiwgImNvdWxkIG5vdCBtYXAgbWVtb3J5XG4iKTsKLQkJCQlyZXR1cm47IC8qIEZJWE1FOiBlcnJvciAqLworCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCiAJCQllbmQgPSBzeXMgKyBzLT5tYXBfc2l6ZTsKQEAgLTI3MSw2ICsyNzMsNyBAQAogCQkJYWRkciA9IDA7CiAJCX0KIAl9CisJcmV0dXJuIDA7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvY3MuYyBiL2RyaXZlcnMvcGNtY2lhL2NzLmMKaW5kZXggOTc2ZDgwNy4uMmVjOGFjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvY3MuYworKysgYi9kcml2ZXJzL3BjbWNpYS9jcy5jCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KQEAgLTI1MiwzOCArMjUxLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0wocGNtY2lhX2dldF9zb2NrZXRfYnlfbnIpOwogCi0vKgotICogVGhlIGNlbnRyYWwgZXZlbnQgaGFuZGxlci4gIFNlbmRfZXZlbnQoKSBzZW5kcyBhbiBldmVudCB0byB0aGUKLSAqIDE2LWJpdCBzdWJzeXN0ZW0sIHdoaWNoIHRoZW4gY2FsbHMgdGhlIHJlbGV2YW50IGRldmljZSBkcml2ZXJzLgotICogUGFyc2VfZXZlbnRzKCkgaW50ZXJwcmV0cyB0aGUgZXZlbnQgYml0cyBmcm9tCi0gKiBhIGNhcmQgc3RhdHVzIGNoYW5nZSByZXBvcnQuICBEb19zaHV0ZG93bigpIGhhbmRsZXMgdGhlIGhpZ2gKLSAqIHByaW9yaXR5IHN0dWZmIGFzc29jaWF0ZWQgd2l0aCBhIGNhcmQgcmVtb3ZhbC4KLSAqLwotCi0vKiBOT1RFOiBzZW5kX2V2ZW50IG5lZWRzIHRvIGJlIGNhbGxlZCB3aXRoIHNrdC0+c2VtIGhlbGQuICovCi0KLXN0YXRpYyBpbnQgc2VuZF9ldmVudChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgZXZlbnRfdCBldmVudCwgaW50IHByaW9yaXR5KQotewotCWludCByZXQ7Ci0KLQlpZiAoKHMtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpICYmIChldmVudCAhPSBDU19FVkVOVF9DQVJEX1JFTU9WQUwpKQotCQlyZXR1cm4gMDsKLQotCWRldl9kYmcoJnMtPmRldiwgInNlbmRfZXZlbnQoZXZlbnQgJWQsIHByaSAlZCwgY2FsbGJhY2sgMHglcClcbiIsCi0JICAgZXZlbnQsIHByaW9yaXR5LCBzLT5jYWxsYmFjayk7Ci0KLQlpZiAoIXMtPmNhbGxiYWNrKQotCQlyZXR1cm4gMDsKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHMtPmNhbGxiYWNrLT5vd25lcikpCi0JCXJldHVybiAwOwotCi0JcmV0ID0gcy0+Y2FsbGJhY2stPmV2ZW50KHMsIGV2ZW50LCBwcmlvcml0eSk7Ci0KLQltb2R1bGVfcHV0KHMtPmNhbGxiYWNrLT5vd25lcik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgaW50IHNvY2tldF9yZXNldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQogewogCWludCBzdGF0dXMsIGk7CkBAIC0zMjYsNyArMjkzLDggQEAKIAogCWRldl9kYmcoJnMtPmRldiwgInNodXRkb3duXG4iKTsKIAotCXNlbmRfZXZlbnQocywgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMLCBDU19FVkVOVF9QUklfSElHSCk7CisJaWYgKHMtPmNhbGxiYWNrKQorCQlzLT5jYWxsYmFjay0+cmVtb3ZlKHMpOwogCiAJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlzLT5zdGF0ZSAmPSBTT0NLRVRfSU5VU0UgfCBTT0NLRVRfUFJFU0VOVDsKQEAgLTQ3Nyw3ICs0NDUsOCBAQAogCQlkZXZfZGJnKCZza3QtPmRldiwgImluc2VydCBkb25lXG4iKTsKIAkJbXV0ZXhfdW5sb2NrKCZza3QtPm9wc19tdXRleCk7CiAKLQkJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX0NBUkRfSU5TRVJUSU9OLCBDU19FVkVOVF9QUklfTE9XKTsKKwkJaWYgKCEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSAmJiAoc2t0LT5jYWxsYmFjaykpCisJCQlza3QtPmNhbGxiYWNrLT5hZGQoc2t0KTsKIAl9IGVsc2UgewogCQltdXRleF91bmxvY2soJnNrdC0+b3BzX211dGV4KTsKIAkJc29ja2V0X3NodXRkb3duKHNrdCk7CkBAIC00OTQsNyArNDYzLDYgQEAKIAltdXRleF9sb2NrKCZza3QtPm9wc19tdXRleCk7CiAJc2t0LT5zdXNwZW5kZWRfc3RhdGUgPSBza3QtPnN0YXRlOwogCi0Jc2VuZF9ldmVudChza3QsIENTX0VWRU5UX1BNX1NVU1BFTkQsIENTX0VWRU5UX1BSSV9MT1cpOwogCXNrdC0+c29ja2V0ID0gZGVhZF9zb2NrZXQ7CiAJc2t0LT5vcHMtPnNldF9zb2NrZXQoc2t0LCAmc2t0LT5zb2NrZXQpOwogCWlmIChza3QtPm9wcy0+c3VzcGVuZCkKQEAgLTU1NSw4ICs1MjMsOCBAQAogCQlyZXR1cm4gMDsKIAl9CiAjZW5kaWYKLQotCXNlbmRfZXZlbnQoc2t0LCBDU19FVkVOVF9QTV9SRVNVTUUsIENTX0VWRU5UX1BSSV9MT1cpOworCWlmICghKHNrdC0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykgJiYgKHNrdC0+Y2FsbGJhY2spKQorCQlza3QtPmNhbGxiYWNrLT5lYXJseV9yZXN1bWUoc2t0KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjU0LDE2ICs2MjIsOCBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZza3QtPnRocmVhZF9sb2NrLCBmbGFncyk7CiAKIAkJbXV0ZXhfbG9jaygmc2t0LT5za3RfbXV0ZXgpOwotCQlpZiAoZXZlbnRzKSB7Ci0JCQlpZiAoZXZlbnRzICYgU1NfREVURUNUKQotCQkJCXNvY2tldF9kZXRlY3RfY2hhbmdlKHNrdCk7Ci0JCQlpZiAoZXZlbnRzICYgU1NfQkFUREVBRCkKLQkJCQlzZW5kX2V2ZW50KHNrdCwgQ1NfRVZFTlRfQkFUVEVSWV9ERUFELCBDU19FVkVOVF9QUklfTE9XKTsKLQkJCWlmIChldmVudHMgJiBTU19CQVRXQVJOKQotCQkJCXNlbmRfZXZlbnQoc2t0LCBDU19FVkVOVF9CQVRURVJZX0xPVywgQ1NfRVZFTlRfUFJJX0xPVyk7Ci0JCQlpZiAoZXZlbnRzICYgU1NfUkVBRFkpCi0JCQkJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX1JFQURZX0NIQU5HRSwgQ1NfRVZFTlRfUFJJX0xPVyk7Ci0JCX0KKwkJaWYgKGV2ZW50cyAmIFNTX0RFVEVDVCkKKwkJCXNvY2tldF9kZXRlY3RfY2hhbmdlKHNrdCk7CiAKIAkJaWYgKHN5c2ZzX2V2ZW50cykgewogCQkJaWYgKHN5c2ZzX2V2ZW50cyAmIFBDTUNJQV9VRVZFTlRfRUpFQ1QpCkBAIC03ODMsNyArNzQzLDcgQEAKIAkJcy0+Y2FsbGJhY2sgPSBjOwogCiAJCWlmICgocy0+c3RhdGUgJiAoU09DS0VUX1BSRVNFTlR8U09DS0VUX0NBUkRCVVMpKSA9PSBTT0NLRVRfUFJFU0VOVCkKLQkJCXNlbmRfZXZlbnQocywgQ1NfRVZFTlRfQ0FSRF9JTlNFUlRJT04sIENTX0VWRU5UX1BSSV9MT1cpOworCQkJcy0+Y2FsbGJhY2stPmFkZChzKTsKIAl9IGVsc2UKIAkJcy0+Y2FsbGJhY2sgPSBOVUxMOwogIGVycjoKQEAgLTgyMywyMCArNzgzLDEzIEBACiAJCQlicmVhazsKIAkJfQogCi0JCXJldCA9IHNlbmRfZXZlbnQoc2t0LCBDU19FVkVOVF9SRVNFVF9SRVFVRVNULCBDU19FVkVOVF9QUklfTE9XKTsKLQkJaWYgKHJldCA9PSAwKSB7Ci0JCQlzZW5kX2V2ZW50KHNrdCwgQ1NfRVZFTlRfUkVTRVRfUEhZU0lDQUwsIENTX0VWRU5UX1BSSV9MT1cpOwotCQkJaWYgKHNrdC0+Y2FsbGJhY2spCi0JCQkJc2t0LT5jYWxsYmFjay0+c3VzcGVuZChza3QpOwotCQkJbXV0ZXhfbG9jaygmc2t0LT5vcHNfbXV0ZXgpOwotCQkJcmV0ID0gc29ja2V0X3Jlc2V0KHNrdCk7Ci0JCQltdXRleF91bmxvY2soJnNrdC0+b3BzX211dGV4KTsKLQkJCWlmIChyZXQgPT0gMCkgewotCQkJCXNlbmRfZXZlbnQoc2t0LCBDU19FVkVOVF9DQVJEX1JFU0VULCBDU19FVkVOVF9QUklfTE9XKTsKLQkJCQlpZiAoc2t0LT5jYWxsYmFjaykKLQkJCQkJc2t0LT5jYWxsYmFjay0+cmVzdW1lKHNrdCk7Ci0JCQl9Ci0JCX0KKwkJaWYgKHNrdC0+Y2FsbGJhY2spCisJCQlza3QtPmNhbGxiYWNrLT5zdXNwZW5kKHNrdCk7CisJCW11dGV4X2xvY2soJnNrdC0+b3BzX211dGV4KTsKKwkJcmV0ID0gc29ja2V0X3Jlc2V0KHNrdCk7CisJCW11dGV4X3VubG9jaygmc2t0LT5vcHNfbXV0ZXgpOworCQlpZiAoKHJldCA9PSAwKSAmJiAoc2t0LT5jYWxsYmFjaykpCisJCQlza3QtPmNhbGxiYWNrLT5yZXN1bWUoc2t0KTsKIAogCQlyZXQgPSAwOwogCX0gd2hpbGUgKDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvY3NfaW50ZXJuYWwuaCBiL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmgKaW5kZXggNDEyNmE3NS4uZGEwNTVkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvY3NfaW50ZXJuYWwuaAorKysgYi9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oCkBAIC0xMCw3ICsxMCw3IEBACiAgKiBhcmUgQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIEEuIEhpbmRzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAoQykgMTk5OQkJRGF2aWQgQS4gSGluZHMKLSAqIChDKSAyMDAzIC0gMjAwOAlEb21pbmlrIEJyb2Rvd3NraQorICogKEMpIDIwMDMgLSAyMDEwCURvbWluaWsgQnJvZG93c2tpCiAgKgogICoKICAqIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyBfb25seV8gbmVlZGVkIGJ5IHRoZSBQQ01DSUEgY29yZSBtb2R1bGVzLgpAQCAtMjYsNiArMjYsOSBAQAogLyogRmxhZ3MgaW4gY2xpZW50IHN0YXRlICovCiAjZGVmaW5lIENMSUVOVF9XSU5fUkVRKGkpCSgweDE8PChpKSkKIAorLyogRmxhZyB0byBhY2Nlc3MgYWxsIGZ1bmN0aW9ucyAqLworI2RlZmluZSBCSU5EX0ZOX0FMTAkweGZmCisKIC8qIEVhY2ggY2FyZCBmdW5jdGlvbiBnZXRzIG9uZSBvZiB0aGVzZSBndXlzICovCiB0eXBlZGVmIHN0cnVjdCBjb25maWdfdCB7CiAJc3RydWN0IGtyZWYJcmVmOwpAQCAtMzUsNyArMzgsMTAgQEAKIAl1bnNpZ25lZCBpbnQJQ29uZmlnQmFzZTsKIAl1bnNpZ25lZCBjaGFyCVN0YXR1cywgUGluLCBDb3B5LCBPcHRpb24sIEV4dFN0YXR1czsKIAl1bnNpZ25lZCBpbnQJQ2FyZFZhbHVlczsKLQlpb19yZXFfdAlpbzsKKworCXN0cnVjdCByZXNvdXJjZSBpb1tNQVhfSU9fV0lOXTsgLyogaW8gcG9ydHMgKi8KKwlzdHJ1Y3QgcmVzb3VyY2UgbWVtW01BWF9XSU5dOyAgIC8qIG1lbSBhcmVhcyAqLworCiAJc3RydWN0IHsKIAkJdV9pbnQJQXR0cmlidXRlczsKIAl9IGlycTsKQEAgLTU2LDE4ICs2MiwxMSBAQAogCQkJCQkgdW5zaWduZWQgaW50IGF0dHIsCiAJCQkJCSB1bnNpZ25lZCBpbnQgKmJhc2UsCiAJCQkJCSB1bnNpZ25lZCBpbnQgbnVtLAotCQkJCQkgdW5zaWduZWQgaW50IGFsaWduKTsKKwkJCQkJIHVuc2lnbmVkIGludCBhbGlnbiwKKwkJCQkJIHN0cnVjdCByZXNvdXJjZSAqKnBhcmVudCk7CiAJc3RydWN0IHJlc291cmNlKiAoKmZpbmRfbWVtKQkodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIG51bSwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgYWxpZ24sIGludCBsb3csCiAJCQkJCSBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7Ci0JaW50CSgqYWRkX2lvKQkJKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAotCQkJCQkgdW5zaWduZWQgaW50IGFjdGlvbiwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgcl9zdGFydCwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgcl9lbmQpOwotCWludAkoKmFkZF9tZW0pCQkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsCi0JCQkJCSB1bnNpZ25lZCBpbnQgYWN0aW9uLAotCQkJCQkgdW5zaWduZWQgbG9uZyByX3N0YXJ0LAotCQkJCQkgdW5zaWduZWQgbG9uZyByX2VuZCk7CiAJaW50CSgqaW5pdCkJCQkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwogCXZvaWQJKCpleGl0KQkJCShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CiB9OwpAQCAtMTE0LDExICsxMTMsMTIgQEAKIAogc3RydWN0IHBjbWNpYV9jYWxsYmFja3sKIAlzdHJ1Y3QgbW9kdWxlCSpvd25lcjsKLQlpbnQJCSgqZXZlbnQpIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKLQkJCQkgIGV2ZW50X3QgZXZlbnQsIGludCBwcmlvcml0eSk7CisJaW50CQkoKmFkZCkgKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKKwlpbnQJCSgqcmVtb3ZlKSAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwogCXZvaWQJCSgqcmVxdWVyeSkgKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKIAlpbnQJCSgqdmFsaWRhdGUpIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50ICppKTsKIAlpbnQJCSgqc3VzcGVuZCkgKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKKwlpbnQJCSgqZWFybHlfcmVzdW1lKSAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwogCWludAkJKCpyZXN1bWUpIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CiB9OwogCkBAIC0xNDYsNiArMTQ2LDggQEAKIC8qIGRzLmMgKi8KIGV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgcGNtY2lhX2J1c190eXBlOwogCitzdHJ1Y3QgcGNtY2lhX2RldmljZTsKKwogLyogcGNtY2lhX3Jlc291cmNlLmMgKi8KIGV4dGVybiBpbnQgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwogZXh0ZXJuIGludCBwY21jaWFfdmFsaWRhdGVfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKQEAgLTE2Myw4ICsxNjUsOCBAQAogCiBpbnQgcGNtY2lhX3JlYWRfY2lzX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgaW50IGF0dHIsCiAJCQl1X2ludCBhZGRyLCB1X2ludCBsZW4sIHZvaWQgKnB0cik7Ci12b2lkIHBjbWNpYV93cml0ZV9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgYXR0ciwKLQkJCSAgdV9pbnQgYWRkciwgdV9pbnQgbGVuLCB2b2lkICpwdHIpOworaW50IHBjbWNpYV93cml0ZV9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgYXR0ciwKKwkJCXVfaW50IGFkZHIsIHVfaW50IGxlbiwgdm9pZCAqcHRyKTsKIHZvaWQgcmVsZWFzZV9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKIHZvaWQgZGVzdHJveV9jaXNfY2FjaGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwogaW50IHBjY2FyZF9yZWFkX3R1cGxlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24sCkBAIC0xODgsMzQgKzE5MCw0IEBACiAKIGludCBwY2NhcmRfZ2V0X3R1cGxlX2RhdGEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHR1cGxlX3QgKnR1cGxlKTsKIAotCi0jaWZkZWYgQ09ORklHX1BDTUNJQV9JT0NUTAotLyogZHMuYyAqLwotZXh0ZXJuIHN0cnVjdCBwY21jaWFfZGV2aWNlICpwY21jaWFfZ2V0X2RldihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwotZXh0ZXJuIHZvaWQgcGNtY2lhX3B1dF9kZXYoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKLQotc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBjbWNpYV9kZXZpY2VfYWRkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAotCQkJCQl1bnNpZ25lZCBpbnQgZnVuY3Rpb24pOwotCi0vKiBwY21jaWFfaW9jdGwuYyAqLwotZXh0ZXJuIHZvaWQgX19pbml0IHBjbWNpYV9zZXR1cF9pb2N0bCh2b2lkKTsKLWV4dGVybiB2b2lkIF9fZXhpdCBwY21jaWFfY2xlYW51cF9pb2N0bCh2b2lkKTsKLWV4dGVybiB2b2lkIGhhbmRsZV9ldmVudChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgZXZlbnRfdCBldmVudCk7Ci1leHRlcm4gaW50IGhhbmRsZV9yZXF1ZXN0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBldmVudF90IGV2ZW50KTsKLQotI2Vsc2UgLyogQ09ORklHX1BDTUNJQV9JT0NUTCAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHBjbWNpYV9zZXR1cF9pb2N0bCh2b2lkKSB7IHJldHVybjsgfQotc3RhdGljIGlubGluZSB2b2lkIF9fZXhpdCBwY21jaWFfY2xlYW51cF9pb2N0bCh2b2lkKSB7IHJldHVybjsgfQotc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9ldmVudChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgZXZlbnRfdCBldmVudCkKLXsKLQlyZXR1cm47Ci19Ci1zdGF0aWMgaW5saW5lIGludCBoYW5kbGVfcmVxdWVzdChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgZXZlbnRfdCBldmVudCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19QQ01DSUFfSU9DVEwgKi8KLQogI2VuZGlmIC8qIF9MSU5VWF9DU19JTlRFUk5BTF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9kYjF4eHhfc3MuYyBiL2RyaXZlcnMvcGNtY2lhL2RiMXh4eF9zcy5jCmluZGV4IDBmNGNjM2YuLjI3NTc1ZTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9kYjF4eHhfc3MuYworKysgYi9kcml2ZXJzL3BjbWNpYS9kYjF4eHhfc3MuYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9kcy5jIGIvZHJpdmVycy9wY21jaWEvZHMuYwppbmRleCBlYWM5NjE0Li41NTU3MGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9kcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2RzLmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTkgRGF2aWQgQS4gSGluZHMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIChDKSAxOTk5CQlEYXZpZCBBLiBIaW5kcwotICogKEMpIDIwMDMgLSAyMDA2CURvbWluaWsgQnJvZG93c2tpCisgKiAoQykgMjAwMyAtIDIwMTAJRG9taW5payBCcm9kb3dza2kKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CkBAIC0yMTMsNyArMjEyLDcgQEAKIAogLyogcGNtY2lhX2RldmljZSBoYW5kbGluZyAqLwogCi1zdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhX2dldF9kZXYoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlICpwY21jaWFfZ2V0X2RldihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCiB7CiAJc3RydWN0IGRldmljZSAqdG1wX2RldjsKIAl0bXBfZGV2ID0gZ2V0X2RldmljZSgmcF9kZXYtPmRldik7CkBAIC0yMjIsNyArMjIxLDcgQEAKIAlyZXR1cm4gdG9fcGNtY2lhX2Rldih0bXBfZGV2KTsKIH0KIAotdm9pZCBwY21jaWFfcHV0X2RldihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgdm9pZCBwY21jaWFfcHV0X2RldihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCiB7CiAJaWYgKHBfZGV2KQogCQlwdXRfZGV2aWNlKCZwX2Rldi0+ZGV2KTsKQEAgLTI5NCw3ICsyOTMsNyBAQAogCX0KIAogCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7Ci0JaWYgKChzLT5wY21jaWFfc3RhdGUuaGFzX3BmYykgJiYKKwlpZiAoKHMtPnBjbWNpYV9wZmMpICYmCiAJICAgIChwX2Rldi0+c29ja2V0LT5kZXZpY2VfY291bnQgPT0gMSkgJiYgKHBfZGV2LT5kZXZpY2Vfbm8gPT0gMCkpCiAJCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfUkVRVUVSWSk7CiAJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwpAQCAtMzU5LDcgKzM1OCw3IEBACiAJICogcHNldWRvIG11bHRpLWZ1bmN0aW9uIGNhcmQsIHdlIG5lZWQgdG8gdW5iaW5kCiAJICogYWxsIGRldmljZXMKIAkgKi8KLQlpZiAoKHBfZGV2LT5zb2NrZXQtPnBjbWNpYV9zdGF0ZS5oYXNfcGZjKSAmJgorCWlmICgocF9kZXYtPnNvY2tldC0+cGNtY2lhX3BmYykgJiYKIAkgICAgKHBfZGV2LT5zb2NrZXQtPmRldmljZV9jb3VudCA+IDApICYmCiAJICAgIChwX2Rldi0+ZGV2aWNlX25vID09IDApKQogCQlwY21jaWFfY2FyZF9yZW1vdmUocF9kZXYtPnNvY2tldCwgcF9kZXYpOwpAQCAtNDc3LDcgKzQ3Niw4IEBACiB9CiAKIAotc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBjbWNpYV9kZXZpY2VfYWRkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24pCitzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBjbWNpYV9kZXZpY2VfYWRkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGZ1bmN0aW9uKQogewogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgKnRtcF9kZXY7CiAJaW50IGk7CkBAIC01MzEsNyArNTMxLDYgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcF9kZXYsICZzLT5kZXZpY2VzX2xpc3QsIHNvY2tldF9kZXZpY2VfbGlzdCkKIAkJaWYgKHBfZGV2LT5mdW5jID09IHRtcF9kZXYtPmZ1bmMpIHsKIAkJCXBfZGV2LT5mdW5jdGlvbl9jb25maWcgPSB0bXBfZGV2LT5mdW5jdGlvbl9jb25maWc7Ci0JCQlwX2Rldi0+aW8gPSB0bXBfZGV2LT5pbzsKIAkJCXBfZGV2LT5pcnEgPSB0bXBfZGV2LT5pcnE7CiAJCQlrcmVmX2dldCgmcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZy0+cmVmKTsKIAkJfQpAQCAtNTQ0LDE1ICs1NDMsMjkgQEAKIAkJCSJJUlEgc2V0dXAgZmFpbGVkIC0tIGRldmljZSBtaWdodCBub3Qgd29ya1xuIik7CiAKIAlpZiAoIXBfZGV2LT5mdW5jdGlvbl9jb25maWcpIHsKKwkJY29uZmlnX3QgKmM7CiAJCWRldl9kYmcoJnBfZGV2LT5kZXYsICJjcmVhdGluZyBjb25maWdfdFxuIik7Ci0JCXBfZGV2LT5mdW5jdGlvbl9jb25maWcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY29uZmlnX3QpLAotCQkJCQkJIEdGUF9LRVJORUwpOwotCQlpZiAoIXBfZGV2LT5mdW5jdGlvbl9jb25maWcpIHsKKwkJYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjb25maWdfdCksIEdGUF9LRVJORUwpOworCQlpZiAoIWMpIHsKIAkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJCWdvdG8gZXJyX3VucmVnOwogCQl9Ci0JCWtyZWZfaW5pdCgmcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZy0+cmVmKTsKKwkJcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZyA9IGM7CisJCWtyZWZfaW5pdCgmYy0+cmVmKTsKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9JT19XSU47IGkrKykgeworCQkJYy0+aW9baV0ubmFtZSA9IHBfZGV2LT5kZXZuYW1lOworCQkJYy0+aW9baV0uZmxhZ3MgPSBJT1JFU09VUkNFX0lPOworCQl9CisJCWZvciAoaSA9IDA7IGk8IE1BWF9XSU47IGkrKykgeworCQkJYy0+bWVtW2ldLm5hbWUgPSBwX2Rldi0+ZGV2bmFtZTsKKwkJCWMtPm1lbVtpXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOworCQl9CiAJfQorCWZvciAoaSA9IDA7IGkgPCBNQVhfSU9fV0lOOyBpKyspCisJCXBfZGV2LT5yZXNvdXJjZVtpXSA9ICZwX2Rldi0+ZnVuY3Rpb25fY29uZmlnLT5pb1tpXTsKKwlmb3IgKDsgaSA8IChNQVhfSU9fV0lOICsgTUFYX1dJTik7IGkrKykKKwkJcF9kZXYtPnJlc291cmNlW2ldID0gJnBfZGV2LT5mdW5jdGlvbl9jb25maWctPm1lbVtpLU1BWF9JT19XSU5dOworCiAJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJZGV2X3ByaW50ayhLRVJOX05PVElDRSwgJnBfZGV2LT5kZXYsCkBAIC02ODAsNyArNjkzLDcgQEAKIAkgKiBjYWxsIHBjbWNpYV9kZXZpY2VfYWRkKCkgLS0gd2hpY2ggd2lsbCBmYWlsIGlmIGJvdGgKIAkgKiBkZXZpY2VzIGFyZSBhbHJlYWR5IHJlZ2lzdGVyZWQuICovCiAJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKLQloYXNfcGZjID0gcy0+cGNtY2lhX3N0YXRlLmhhc19wZmM7CisJaGFzX3BmYyA9IHMtPnBjbWNpYV9wZmM7CiAJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWlmIChoYXNfcGZjKQogCQlwY21jaWFfZGV2aWNlX2FkZChzLCAwKTsKQEAgLTgxMiw3ICs4MjUsNyBAQAogCWlmIChkaWQtPm1hdGNoX2ZsYWdzICYgUENNQ0lBX0RFVl9JRF9NQVRDSF9ERVZJQ0VfTk8pIHsKIAkJZGV2X2RiZygmZGV2LT5kZXYsICJ0aGlzIGlzIGEgcHNldWRvLW11bHRpLWZ1bmN0aW9uIGRldmljZVxuIik7CiAJCW11dGV4X2xvY2soJmRldi0+c29ja2V0LT5vcHNfbXV0ZXgpOwotCQlkZXYtPnNvY2tldC0+cGNtY2lhX3N0YXRlLmhhc19wZmMgPSAxOworCQlkZXYtPnNvY2tldC0+cGNtY2lhX3BmYyA9IDE7CiAJCW11dGV4X3VubG9jaygmZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJCWlmIChkZXYtPmRldmljZV9ubyAhPSBkaWQtPmRldmljZV9ubykKIAkJCXJldHVybiAwOwpAQCAtODI2LDcgKzgzOSw3IEBACiAKIAkJLyogaWYgdGhpcyBpcyBhIHBzZXVkby1tdWx0aS1mdW5jdGlvbiBkZXZpY2UsCiAJCSAqIHdlIG5lZWQgZXhwbGljaXQgbWF0Y2hlcyAqLwotCQlpZiAoZGV2LT5zb2NrZXQtPnBjbWNpYV9zdGF0ZS5oYXNfcGZjKQorCQlpZiAoZGV2LT5zb2NrZXQtPnBjbWNpYV9wZmMpCiAJCQlyZXR1cm4gMDsKIAkJaWYgKGRldi0+ZGV2aWNlX25vKQogCQkJcmV0dXJuIDA7CkBAIC04ODUsMTQgKzg5OCw2IEBACiAJfQogCW11dGV4X3VubG9jaygmcF9kcnYtPmR5bmlkcy5sb2NrKTsKIAotI2lmZGVmIENPTkZJR19QQ01DSUFfSU9DVEwKLQkvKiBtYXRjaGluZyBieSBjYXJkbWdyICovCi0JaWYgKHBfZGV2LT5jYXJkbWdyID09IHBfZHJ2KSB7Ci0JCWRldl9kYmcoZGV2LCAiY2FyZG1nciBtYXRjaGVkIHRvICVzXG4iLCBkcnYtPm5hbWUpOwotCQlyZXR1cm4gMTsKLQl9Ci0jZW5kaWYKLQogCXdoaWxlIChkaWQgJiYgZGlkLT5tYXRjaF9mbGFncykgewogCQlkZXZfZGJnKGRldiwgInRyeWluZyB0byBtYXRjaCB0byAlc1xuIiwgZHJ2LT5uYW1lKTsKIAkJaWYgKHBjbWNpYV9kZXZtYXRjaChwX2RldiwgZGlkKSkgewpAQCAtMTAwNiw2ICsxMDExLDE4IEBACiBwY21jaWFfZGV2aWNlX3N0cmluZ2F0dHIocHJvZF9pZDMsIHByb2RfaWRbMl0pOwogcGNtY2lhX2RldmljZV9zdHJpbmdhdHRyKHByb2RfaWQ0LCBwcm9kX2lkWzNdKTsKIAorc3RhdGljIHNzaXplX3QgcGNtY2lhX3Nob3dfcmVzb3VyY2VzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2ID0gdG9fcGNtY2lhX2RldihkZXYpOworCWNoYXIgKnN0ciA9IGJ1ZjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBQQ01DSUFfTlVNX1JFU09VUkNFUzsgaSsrKQorCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlcHJcbiIsIHBfZGV2LT5yZXNvdXJjZVtpXSk7CisKKwlyZXR1cm4gc3RyIC0gYnVmOworfQogCiBzdGF0aWMgc3NpemVfdCBwY21jaWFfc2hvd19wbV9zdGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC0xMDc2LDYgKzEwOTMsNyBAQAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHBjbWNpYV9kZXZfYXR0cnNbXSA9IHsKIAlfX0FUVFIoZnVuY3Rpb24sIDA0NDQsIGZ1bmNfc2hvdywgTlVMTCksCiAJX19BVFRSKHBtX3N0YXRlLCAwNjQ0LCBwY21jaWFfc2hvd19wbV9zdGF0ZSwgcGNtY2lhX3N0b3JlX3BtX3N0YXRlKSwKKwlfX0FUVFIocmVzb3VyY2VzLCAwNDQ0LCBwY21jaWFfc2hvd19yZXNvdXJjZXMsIE5VTEwpLAogCV9fQVRUUl9STyhmdW5jX2lkKSwKIAlfX0FUVFJfUk8obWFuZl9pZCksCiAJX19BVFRSX1JPKGNhcmRfaWQpLApAQCAtMTIxNSw4NiArMTIzMyw1NyBAQAogCXJldHVybiAwOwogfQogCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gICAgVGhlIGNhcmQgc3RhdHVzIGV2ZW50IGhhbmRsZXIuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0vKiBOb3JtYWxseSwgdGhlIGV2ZW50IGlzIHBhc3NlZCB0byBpbmRpdmlkdWFsIGRyaXZlcnMgYWZ0ZXIKLSAqIGluZm9ybWluZyB1c2Vyc3BhY2UuIE9ubHkgZm9yIENTX0VWRU5UX0NBUkRfUkVNT1ZBTCB0aGlzCi0gKiBpcyBpbnZlcnNlZCB0byBtYWludGFpbiBoaXN0b3JpYyBjb21wYXRpYmlsaXR5LgotICovCi0KLXN0YXRpYyBpbnQgZHNfZXZlbnQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCwgZXZlbnRfdCBldmVudCwgaW50IHByaW9yaXR5KQorc3RhdGljIGludCBwY21jaWFfYnVzX3JlbW92ZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQogewotCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gcGNtY2lhX2dldF9zb2NrZXQoc2t0KTsKKwlhdG9taWNfc2V0KCZza3QtPnByZXNlbnQsIDApOworCXBjbWNpYV9jYXJkX3JlbW92ZShza3QsIE5VTEwpOwogCi0JaWYgKCFzKSB7Ci0JCWRldl9wcmludGsoS0VSTl9FUlIsICZza3QtPmRldiwKLQkJCSAgICJQQ01DSUEgb2J0YWluaW5nIHJlZmVyZW5jZSB0byBzb2NrZXQgIglcCi0JCQkgICAiZmFpbGVkLCBldmVudCAweCV4IGxvc3QhXG4iLCBldmVudCk7Ci0JCXJldHVybiAtRU5PREVWOworCW11dGV4X2xvY2soJnNrdC0+b3BzX211dGV4KTsKKwlkZXN0cm95X2Npc19jYWNoZShza3QpOworCXBjbWNpYV9jbGVhbnVwX2lycShza3QpOworCW11dGV4X3VubG9jaygmc2t0LT5vcHNfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNtY2lhX2J1c19hZGQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKK3sKKwlhdG9taWNfc2V0KCZza3QtPnByZXNlbnQsIDEpOworCisJbXV0ZXhfbG9jaygmc2t0LT5vcHNfbXV0ZXgpOworCXNrdC0+cGNtY2lhX3BmYyA9IDA7CisJZGVzdHJveV9jaXNfY2FjaGUoc2t0KTsgLyogdG8gYmUgb24gdGhlIHNhZmUgc2lkZS4uLiAqLworCW11dGV4X3VubG9jaygmc2t0LT5vcHNfbXV0ZXgpOworCisJcGNtY2lhX2NhcmRfYWRkKHNrdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY21jaWFfYnVzX2Vhcmx5X3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQoreworCWlmICghdmVyaWZ5X2Npc19jYWNoZShza3QpKSB7CisJCXBjbWNpYV9wdXRfc29ja2V0KHNrdCk7CisJCXJldHVybiAwOwogCX0KIAotCWRldl9kYmcoJnNrdC0+ZGV2LCAiZHNfZXZlbnQoMHglMDZ4LCAlZCwgMHglcClcbiIsCi0JCSAgIGV2ZW50LCBwcmlvcml0eSwgc2t0KTsKKwlkZXZfZGJnKCZza3QtPmRldiwgImNpcyBtaXNtYXRjaCAtIGRpZmZlcmVudCBjYXJkXG4iKTsKIAotCXN3aXRjaCAoZXZlbnQpIHsKLQljYXNlIENTX0VWRU5UX0NBUkRfUkVNT1ZBTDoKLQkJYXRvbWljX3NldCgmc2t0LT5wcmVzZW50LCAwKTsKLQkJcGNtY2lhX2NhcmRfcmVtb3ZlKHNrdCwgTlVMTCk7Ci0JCWhhbmRsZV9ldmVudChza3QsIGV2ZW50KTsKLQkJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKLQkJZGVzdHJveV9jaXNfY2FjaGUocyk7Ci0JCXBjbWNpYV9jbGVhbnVwX2lycShzKTsKLQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwotCQlicmVhazsKKwkvKiBmaXJzdCwgcmVtb3ZlIHRoZSBjYXJkICovCisJcGNtY2lhX2J1c19yZW1vdmUoc2t0KTsKIAotCWNhc2UgQ1NfRVZFTlRfQ0FSRF9JTlNFUlRJT046Ci0JCWF0b21pY19zZXQoJnNrdC0+cHJlc2VudCwgMSk7Ci0JCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7Ci0JCXMtPnBjbWNpYV9zdGF0ZS5oYXNfcGZjID0gMDsKLQkJZGVzdHJveV9jaXNfY2FjaGUocyk7IC8qIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUuLi4gKi8KLQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwotCQlwY21jaWFfY2FyZF9hZGQoc2t0KTsKLQkJaGFuZGxlX2V2ZW50KHNrdCwgZXZlbnQpOwotCQlicmVhazsKKwltdXRleF9sb2NrKCZza3QtPm9wc19tdXRleCk7CisJZGVzdHJveV9jaXNfY2FjaGUoc2t0KTsKKwlrZnJlZShza3QtPmZha2VfY2lzKTsKKwlza3QtPmZha2VfY2lzID0gTlVMTDsKKwlza3QtPmZ1bmN0aW9ucyA9IDA7CisJbXV0ZXhfdW5sb2NrKCZza3QtPm9wc19tdXRleCk7CiAKLQljYXNlIENTX0VWRU5UX0VKRUNUSU9OX1JFUVVFU1Q6Ci0JCWJyZWFrOworCS8qIG5vdywgYWRkIHRoZSBuZXcgY2FyZCAqLworCXBjbWNpYV9idXNfYWRkKHNrdCk7CisJcmV0dXJuIDA7Cit9CiAKLQljYXNlIENTX0VWRU5UX1BNX1JFU1VNRToKLQkJaWYgKHZlcmlmeV9jaXNfY2FjaGUoc2t0KSAhPSAwKSB7Ci0JCQlkZXZfZGJnKCZza3QtPmRldiwgImNpcyBtaXNtYXRjaCAtIGRpZmZlcmVudCBjYXJkXG4iKTsKLQkJCS8qIGZpcnN0LCByZW1vdmUgdGhlIGNhcmQgKi8KLQkJCWRzX2V2ZW50KHNrdCwgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMLCBDU19FVkVOVF9QUklfSElHSCk7Ci0JCQltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwotCQkJZGVzdHJveV9jaXNfY2FjaGUoc2t0KTsKLQkJCWtmcmVlKHNrdC0+ZmFrZV9jaXMpOwotCQkJc2t0LT5mYWtlX2NpcyA9IE5VTEw7Ci0JCQlzLT5mdW5jdGlvbnMgPSAwOwotCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwotCQkJLyogbm93LCBhZGQgdGhlIG5ldyBjYXJkICovCi0JCQlkc19ldmVudChza3QsIENTX0VWRU5UX0NBUkRfSU5TRVJUSU9OLAotCQkJCSBDU19FVkVOVF9QUklfTE9XKTsKLQkJfQotCQloYW5kbGVfZXZlbnQoc2t0LCBldmVudCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBDU19FVkVOVF9QTV9TVVNQRU5EOgotCWNhc2UgQ1NfRVZFTlRfUkVTRVRfUEhZU0lDQUw6Ci0JY2FzZSBDU19FVkVOVF9DQVJEX1JFU0VUOgotCWRlZmF1bHQ6Ci0JCWhhbmRsZV9ldmVudChza3QsIGV2ZW50KTsKLQkJYnJlYWs7Ci0gICAgfQotCi0gICAgcGNtY2lhX3B1dF9zb2NrZXQocyk7Ci0KLSAgICByZXR1cm4gMDsKLX0gLyogZHNfZXZlbnQgKi8KIAogLyoKICAqIE5PVEU6IFRoaXMgaXMgcmFjeS4gVGhlcmUncyBubyBndWFyYW50ZWUgdGhlIGNhcmQgd2lsbCBzdGlsbCBiZQpAQCAtMTMyMywxMCArMTMxMiwxMiBAQAogCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9jYWxsYmFjayBwY21jaWFfYnVzX2NhbGxiYWNrID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5ldmVudCA9IGRzX2V2ZW50LAorCS5hZGQgPSBwY21jaWFfYnVzX2FkZCwKKwkucmVtb3ZlID0gcGNtY2lhX2J1c19yZW1vdmUsCiAJLnJlcXVlcnkgPSBwY21jaWFfcmVxdWVyeSwKIAkudmFsaWRhdGUgPSBwY2NhcmRfdmFsaWRhdGVfY2lzLAogCS5zdXNwZW5kID0gcGNtY2lhX2J1c19zdXNwZW5kLAorCS5lYXJseV9yZXN1bWUgPSBwY21jaWFfYnVzX2Vhcmx5X3Jlc3VtZSwKIAkucmVzdW1lID0gcGNtY2lhX2J1c19yZXN1bWUsCiB9OwogCkBAIC0xMzUwLDExICsxMzQxLDggQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLSNpZmRlZiBDT05GSUdfUENNQ0lBX0lPQ1RMCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmc29ja2V0LT5xdWV1ZSk7Ci0jZW5kaWYKIAlJTklUX0xJU1RfSEVBRCgmc29ja2V0LT5kZXZpY2VzX2xpc3QpOwotCW1lbXNldCgmc29ja2V0LT5wY21jaWFfc3RhdGUsIDAsIHNpemVvZih1OCkpOworCXNvY2tldC0+cGNtY2lhX3BmYyA9IDA7CiAJc29ja2V0LT5kZXZpY2VfY291bnQgPSAwOwogCWF0b21pY19zZXQoJnNvY2tldC0+cHJlc2VudCwgMCk7CiAKQEAgLTE0MjksOCArMTQxNyw2IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JcGNtY2lhX3NldHVwX2lvY3RsKCk7Ci0KIAlyZXR1cm4gMDsKIH0KIGZzX2luaXRjYWxsKGluaXRfcGNtY2lhX2J1cyk7IC8qIG9uZSBsZXZlbCBhZnRlciBzdWJzeXNfaW5pdGNhbGwgc28gdGhhdApAQCAtMTQzOSw4ICsxNDI1LDYgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcGNtY2lhX2J1cyh2b2lkKQogewotCXBjbWNpYV9jbGVhbnVwX2lvY3RsKCk7Ci0KIAljbGFzc19pbnRlcmZhY2VfdW5yZWdpc3RlcigmcGNtY2lhX2J1c19pbnRlcmZhY2UpOwogCiAJYnVzX3VucmVnaXN0ZXIoJnBjbWNpYV9idXNfdHlwZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9pODIwOTIuYyBiL2RyaXZlcnMvcGNtY2lhL2k4MjA5Mi5jCmluZGV4IDMwMDNiYjMuLjA1ZDA4NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2k4MjA5Mi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2k4MjA5Mi5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvaTgyMzY1LmMgYi9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYwppbmRleCA5ZTJhMTU2Li42MTc0NmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYworKysgYi9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYwpAQCAtNTAsNyArNTAsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jIGIvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYwppbmRleCA3ZTE2ZWQ4Li4yNGRlNDk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMKaW5kZXggNmM1YzNmOS4uOGU0NzIzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYworKysgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jIGIvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYwppbmRleCAyNWU1ZTMwLi5mMmY5MGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMKQEAgLTU5LDcgKzU5LDYgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2ZzX3BkLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX2Npcy5jIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX2Npcy5jCmluZGV4IDRhNjVlYWYuLjBhYzU0ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9jaXMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfY2lzLmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYyBiL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDA3YTJhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA3NyArMCwwIEBACi0vKgotICogcGNtY2lhX2lvY3RsLmMgLS0gaW9jdGwgaW50ZXJmYWNlIGZvciBjYXJkbWdyIGFuZCBjYXJkY3RsCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIG9yaWdpbmFsIGNvZGUgaXMgRGF2aWQgQS4gSGluZHMKLSAqIDxkYWhpbmRzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4uICBQb3J0aW9ucyBjcmVhdGVkIGJ5IERhdmlkIEEuIEhpbmRzCi0gKiBhcmUgQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIEEuIEhpbmRzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAoQykgMTk5OQkJRGF2aWQgQS4gSGluZHMKLSAqIChDKSAyMDAzIC0gMjAwNAlEb21pbmlrIEJyb2Rvd3NraQotICovCi0KLS8qCi0gKiBUaGlzIGZpbGUgd2lsbCBnbyBhd2F5IHNvb24uCi0gKi8KLQotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLQotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgotI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgotI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KLSNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+Ci0jaW5jbHVkZSA8cGNtY2lhL2RzLmg+Ci0jaW5jbHVkZSA8cGNtY2lhL3NzLmg+Ci0KLSNpbmNsdWRlICJjc19pbnRlcm5hbC5oIgotCi1zdGF0aWMgaW50IG1ham9yX2RldiA9IC0xOwotCi0KLS8qIERldmljZSB1c2VyIGluZm9ybWF0aW9uICovCi0jZGVmaW5lIE1BWF9FVkVOVFMJMzIKLSNkZWZpbmUgVVNFUl9NQUdJQwkweDdlYTQKLSNkZWZpbmUgQ0hFQ0tfVVNFUih1KSBcCi0gICAgKCgodSkgPT0gTlVMTCkgfHwgKCh1KS0+dXNlcl9tYWdpYyAhPSBVU0VSX01BR0lDKSkKLQotdHlwZWRlZiBzdHJ1Y3QgdXNlcl9pbmZvX3QgewotCXVfaW50CQkJdXNlcl9tYWdpYzsKLQlpbnQJCQlldmVudF9oZWFkLCBldmVudF90YWlsOwotCWV2ZW50X3QJCQlldmVudFtNQVhfRVZFTlRTXTsKLQlzdHJ1Y3QgdXNlcl9pbmZvX3QJKm5leHQ7Ci0Jc3RydWN0IHBjbWNpYV9zb2NrZXQJKnNvY2tldDsKLX0gdXNlcl9pbmZvX3Q7Ci0KLQotc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlICpnZXRfcGNtY2lhX2RldmljZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKLQkJCQkJCXVuc2lnbmVkIGludCBmdW5jdGlvbikKLXsKLQlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSBOVUxMOwotCi0JbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBfZGV2LCAmcy0+ZGV2aWNlc19saXN0LCBzb2NrZXRfZGV2aWNlX2xpc3QpIHsKLQkJaWYgKHBfZGV2LT5mdW5jID09IGZ1bmN0aW9uKSB7Ci0JCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7Ci0JCQlyZXR1cm4gcGNtY2lhX2dldF9kZXYocF9kZXYpOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotLyogYmFja3dhcmRzLWNvbXBhdGlibGUgYWNjZXNzaW5nIG9mIGRyaXZlciAtLS0gYnkgbmFtZSEgKi8KLQotc3RhdGljIHN0cnVjdCBwY21jaWFfZHJpdmVyICpnZXRfcGNtY2lhX2RyaXZlcihkZXZfaW5mb190ICpkZXZfaW5mbykKLXsKLQlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2OwotCXN0cnVjdCBwY21jaWFfZHJpdmVyICpwX2RydjsKLQotCWRydiA9IGRyaXZlcl9maW5kKChjaGFyICopIGRldl9pbmZvLCAmcGNtY2lhX2J1c190eXBlKTsKLQlpZiAoIWRydikKLQkJcmV0dXJuIE5VTEw7Ci0KLQlwX2RydiA9IGNvbnRhaW5lcl9vZihkcnYsIHN0cnVjdCBwY21jaWFfZHJpdmVyLCBkcnYpOwotCi0JcmV0dXJuIHBfZHJ2OwotfQotCi0KLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19wY2NhcmQ7Ci0KLXN0YXRpYyBpbnQgcHJvY19yZWFkX2RyaXZlcnNfY2FsbGJhY2soc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwgdm9pZCAqX20pCi17Ci0Jc3RydWN0IHNlcV9maWxlICptID0gX207Ci0Jc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2ID0gY29udGFpbmVyX29mKGRyaXZlciwKLQkJCQkJCSAgIHN0cnVjdCBwY21jaWFfZHJpdmVyLCBkcnYpOwotCi0Jc2VxX3ByaW50ZihtLCAiJS0yNC4yNHMgMSAlZFxuIiwgcF9kcnYtPmRydi5uYW1lLAotI2lmZGVmIENPTkZJR19NT0RVTEVfVU5MT0FECi0JCSAgICAgIChwX2Rydi0+b3duZXIpID8gbW9kdWxlX3JlZmNvdW50KHBfZHJ2LT5vd25lcikgOiAxCi0jZWxzZQotCQkgICAgICAxCi0jZW5kaWYKLQkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBjY2FyZF9kcml2ZXJzX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCi17Ci0JcmV0dXJuIGJ1c19mb3JfZWFjaF9kcnYoJnBjbWNpYV9idXNfdHlwZSwgTlVMTCwKLQkJCQltLCBwcm9jX3JlYWRfZHJpdmVyc19jYWxsYmFjayk7Ci19Ci0KLXN0YXRpYyBpbnQgcGNjYXJkX2RyaXZlcnNfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwY2NhcmRfZHJpdmVyc19wcm9jX3Nob3csIE5VTEwpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwY2NhcmRfZHJpdmVyc19wcm9jX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IHBjY2FyZF9kcml2ZXJzX3Byb2Nfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAotfTsKLSNlbmRpZgotCi0KLSNpZmRlZiBDT05GSUdfUENNQ0lBX1BST0JFCi0KLXN0YXRpYyBpbnQgYWRqdXN0X2lycShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgYWRqdXN0X3QgKmFkaikKLXsKLQlpbnQgaXJxOwotCXUzMiBtYXNrOwotCi0JaXJxID0gYWRqLT5yZXNvdXJjZS5pcnEuSVJROwotCWlmICgoaXJxIDwgMCkgfHwgKGlycSA+IDE1KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoYWRqLT5BY3Rpb24gIT0gUkVNT1ZFX01BTkFHRURfUkVTT1VSQ0UpCi0JCXJldHVybiAwOwotCi0JbWFzayA9IDEgPDwgaXJxOwotCi0JaWYgKCEocy0+aXJxX21hc2sgJiBtYXNrKSkKLQkJcmV0dXJuIDA7Ci0KLQlzLT5pcnFfbWFzayAmPSB+bWFzazsKLQotCXJldHVybiAwOwotfQotCi0jZWxzZQotCi1zdGF0aWMgaW5saW5lIGludCBhZGp1c3RfaXJxKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBhZGp1c3RfdCAqYWRqKQotewotCXJldHVybiAwOwotfQotCi0jZW5kaWYKLQotc3RhdGljIGludCBwY21jaWFfYWRqdXN0X3Jlc291cmNlX2luZm8oYWRqdXN0X3QgKmFkaikKLXsKLQlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqczsKLQlpbnQgcmV0ID0gLUVOT1NZUzsKLQotCWRvd25fcmVhZCgmcGNtY2lhX3NvY2tldF9saXN0X3J3c2VtKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHMsICZwY21jaWFfc29ja2V0X2xpc3QsIHNvY2tldF9saXN0KSB7Ci0KLQkJaWYgKGFkai0+UmVzb3VyY2UgPT0gUkVTX0lSUSkKLQkJCXJldCA9IGFkanVzdF9pcnEocywgYWRqKTsKLQotCQllbHNlIGlmIChzLT5yZXNvdXJjZV9vcHMtPmFkZF9pbykgewotCQkJdW5zaWduZWQgbG9uZyBiZWdpbiwgZW5kOwotCi0JCQkvKiB5b3UgY2FuJ3QgdXNlIHRoZSBvbGQgaW50ZXJmYWNlIGlmIHRoZSBuZXcKLQkJCSAqIG9uZSB3YXMgdXNlZCBiZWZvcmUgKi8KLQkJCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7Ci0JCQlpZiAoKHMtPnJlc291cmNlX3NldHVwX25ldykgJiYKLQkJCSAgICAhKHMtPnJlc291cmNlX3NldHVwX29sZCkpIHsKLQkJCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7Ci0JCQkJY29udGludWU7Ci0JCQl9IGVsc2UgaWYgKCEocy0+cmVzb3VyY2Vfc2V0dXBfb2xkKSkKLQkJCQlzLT5yZXNvdXJjZV9zZXR1cF9vbGQgPSAxOwotCi0JCQlzd2l0Y2ggKGFkai0+UmVzb3VyY2UpIHsKLQkJCWNhc2UgUkVTX01FTU9SWV9SQU5HRToKLQkJCQliZWdpbiA9IGFkai0+cmVzb3VyY2UubWVtb3J5LkJhc2U7Ci0JCQkJZW5kID0gYWRqLT5yZXNvdXJjZS5tZW1vcnkuQmFzZSArIGFkai0+cmVzb3VyY2UubWVtb3J5LlNpemUgLSAxOwotCQkJCWlmIChzLT5yZXNvdXJjZV9vcHMtPmFkZF9tZW0pCi0JCQkJCXJldCA9IHMtPnJlc291cmNlX29wcy0+YWRkX21lbShzLCBhZGotPkFjdGlvbiwgYmVnaW4sIGVuZCk7Ci0JCQljYXNlIFJFU19JT19SQU5HRToKLQkJCQliZWdpbiA9IGFkai0+cmVzb3VyY2UuaW8uQmFzZVBvcnQ7Ci0JCQkJZW5kID0gYWRqLT5yZXNvdXJjZS5pby5CYXNlUG9ydCArIGFkai0+cmVzb3VyY2UuaW8uTnVtUG9ydHMgLSAxOwotCQkJCWlmIChzLT5yZXNvdXJjZV9vcHMtPmFkZF9pbykKLQkJCQkJcmV0ID0gcy0+cmVzb3VyY2Vfb3BzLT5hZGRfaW8ocywgYWRqLT5BY3Rpb24sIGJlZ2luLCBlbmQpOwotCQkJfQotCQkJaWYgKCFyZXQpIHsKLQkJCQkvKiBhcyB0aGVyZSdzIG5vIHdheSB3ZSBrbm93IHRoaXMgaXMgdGhlCi0JCQkJICogbGFzdCBjYWxsIHRvIGFkanVzdF9yZXNvdXJjZV9pbmZvLCB3ZQotCQkJCSAqIGFsd2F5cyBuZWVkIHRvIGFzc3VtZSB0aGlzIGlzIHRoZSBsYXRlc3QKLQkJCQkgKiBvbmUuLi4gKi8KLQkJCQlzLT5yZXNvdXJjZV9zZXR1cF9kb25lID0gMTsKLQkJCX0KLQkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKLQkJfQotCX0KLQl1cF9yZWFkKCZwY21jaWFfc29ja2V0X2xpc3RfcndzZW0pOwotCi0JcmV0dXJuIHJldDsKLX0KLQotCi0vKiogcGNtY2lhX2dldF93aW5kb3cKLSAqLwotc3RhdGljIGludCBwY21jaWFfZ2V0X3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgd2luZG93X2hhbmRsZV90ICp3aF9vdXQsCi0JCQl3aW5kb3dfaGFuZGxlX3Qgd2gsIHdpbl9yZXFfdCAqcmVxKQotewotCXBjY2FyZF9tZW1fbWFwICp3aW47Ci0Jd2luZG93X2hhbmRsZV90IHc7Ci0KLQl3aC0tOwotCWlmICghcyB8fCAhKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlpZiAod2ggPj0gTUFYX1dJTikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZm9yICh3ID0gd2g7IHcgPCBNQVhfV0lOOyB3KyspCi0JCWlmIChzLT5zdGF0ZSAmIFNPQ0tFVF9XSU5fUkVRKHcpKQotCQkJYnJlYWs7Ci0JaWYgKHcgPT0gTUFYX1dJTikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0Jd2luID0gJnMtPndpblt3XTsKLQlyZXEtPkJhc2UgPSB3aW4tPnJlcy0+c3RhcnQ7Ci0JcmVxLT5TaXplID0gd2luLT5yZXMtPmVuZCAtIHdpbi0+cmVzLT5zdGFydCArIDE7Ci0JcmVxLT5BY2Nlc3NTcGVlZCA9IHdpbi0+c3BlZWQ7Ci0JcmVxLT5BdHRyaWJ1dGVzID0gMDsKLQlpZiAod2luLT5mbGFncyAmIE1BUF9BVFRSSUIpCi0JCXJlcS0+QXR0cmlidXRlcyB8PSBXSU5fTUVNT1JZX1RZUEVfQU07Ci0JaWYgKHdpbi0+ZmxhZ3MgJiBNQVBfQUNUSVZFKQotCQlyZXEtPkF0dHJpYnV0ZXMgfD0gV0lOX0VOQUJMRTsKLQlpZiAod2luLT5mbGFncyAmIE1BUF8xNkJJVCkKLQkJcmVxLT5BdHRyaWJ1dGVzIHw9IFdJTl9EQVRBX1dJRFRIXzE2OwotCWlmICh3aW4tPmZsYWdzICYgTUFQX1VTRV9XQUlUKQotCQlyZXEtPkF0dHJpYnV0ZXMgfD0gV0lOX1VTRV9XQUlUOwotCi0JKndoX291dCA9IHcgKyAxOwotCXJldHVybiAwOwotfSAvKiBwY21jaWFfZ2V0X3dpbmRvdyAqLwotCi0KLS8qKiBwY21jaWFfZ2V0X21lbV9wYWdlCi0gKgotICogQ2hhbmdlIHRoZSBjYXJkIGFkZHJlc3Mgb2YgYW4gYWxyZWFkeSBvcGVuIG1lbW9yeSB3aW5kb3cuCi0gKi8KLXN0YXRpYyBpbnQgcGNtY2lhX2dldF9tZW1fcGFnZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0LCB3aW5kb3dfaGFuZGxlX3Qgd2gsCi0JCQltZW1yZXFfdCAqcmVxKQotewotCXdoLS07Ci0JaWYgKHdoID49IE1BWF9XSU4pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmVxLT5QYWdlID0gMDsKLQlyZXEtPkNhcmRPZmZzZXQgPSBza3QtPndpblt3aF0uY2FyZF9zdGFydDsKLQlyZXR1cm4gMDsKLX0gLyogcGNtY2lhX2dldF9tZW1fcGFnZSAqLwotCi0KLS8qKiBwY2NhcmRfZ2V0X3N0YXR1cwotICoKLSAqIEdldCB0aGUgY3VycmVudCBzb2NrZXQgc3RhdGUgYml0cy4gIFdlIGRvbid0IHN1cHBvcnQgdGhlIGxhdGNoZWQKLSAqIFNvY2tldFN0YXRlIHlldDogSSBoYXZlbid0IHNlZW4gYW55IHBvaW50IGZvciBpdC4KLSAqLwotCi1zdGF0aWMgaW50IHBjY2FyZF9nZXRfc3RhdHVzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAotCQkJICAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCi0JCQkgICAgIGNzX3N0YXR1c190ICpzdGF0dXMpCi17Ci0JY29uZmlnX3QgKmM7Ci0JaW50IHZhbDsKLQotCXMtPm9wcy0+Z2V0X3N0YXR1cyhzLCAmdmFsKTsKLQlzdGF0dXMtPkNhcmRTdGF0ZSA9IHN0YXR1cy0+U29ja2V0U3RhdGUgPSAwOwotCXN0YXR1cy0+Q2FyZFN0YXRlIHw9ICh2YWwgJiBTU19ERVRFQ1QpID8gQ1NfRVZFTlRfQ0FSRF9ERVRFQ1QgOiAwOwotCXN0YXR1cy0+Q2FyZFN0YXRlIHw9ICh2YWwgJiBTU19DQVJEQlVTKSA/IENTX0VWRU5UX0NCX0RFVEVDVCA6IDA7Ci0Jc3RhdHVzLT5DYXJkU3RhdGUgfD0gKHZhbCAmIFNTXzNWQ0FSRCkgPyBDU19FVkVOVF8zVkNBUkQgOiAwOwotCXN0YXR1cy0+Q2FyZFN0YXRlIHw9ICh2YWwgJiBTU19YVkNBUkQpID8gQ1NfRVZFTlRfWFZDQVJEIDogMDsKLQlpZiAocy0+c3RhdGUgJiBTT0NLRVRfU1VTUEVORCkKLQkJc3RhdHVzLT5DYXJkU3RhdGUgfD0gQ1NfRVZFTlRfUE1fU1VTUEVORDsKLQlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQljID0gKHBfZGV2KSA/IHBfZGV2LT5mdW5jdGlvbl9jb25maWcgOiBOVUxMOwotCi0JaWYgKChjICE9IE5VTEwpICYmIChjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpICYmCi0JICAgIChjLT5JbnRUeXBlICYgKElOVF9NRU1PUllfQU5EX0lPIHwgSU5UX1pPT01FRF9WSURFTykpKSB7Ci0JCXVfY2hhciByZWc7Ci0JCWlmIChjLT5DYXJkVmFsdWVzICYgUFJFU0VOVF9QSU5fUkVQTEFDRSkgewotCQkJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKLQkJCXBjbWNpYV9yZWFkX2Npc19tZW0ocywgMSwgKGMtPkNvbmZpZ0Jhc2UrQ0lTUkVHX1BSUik+PjEsIDEsICZyZWcpOwotCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwotCQkJc3RhdHVzLT5DYXJkU3RhdGUgfD0KLQkJCQkocmVnICYgUFJSX1dQX1NUQVRVUykgPyBDU19FVkVOVF9XUklURV9QUk9URUNUIDogMDsKLQkJCXN0YXR1cy0+Q2FyZFN0YXRlIHw9Ci0JCQkJKHJlZyAmIFBSUl9SRUFEWV9TVEFUVVMpID8gQ1NfRVZFTlRfUkVBRFlfQ0hBTkdFIDogMDsKLQkJCXN0YXR1cy0+Q2FyZFN0YXRlIHw9Ci0JCQkJKHJlZyAmIFBSUl9CVkQyX1NUQVRVUykgPyBDU19FVkVOVF9CQVRURVJZX0xPVyA6IDA7Ci0JCQlzdGF0dXMtPkNhcmRTdGF0ZSB8PQotCQkJCShyZWcgJiBQUlJfQlZEMV9TVEFUVVMpID8gQ1NfRVZFTlRfQkFUVEVSWV9ERUFEIDogMDsKLQkJfSBlbHNlIHsKLQkJCS8qIE5vIFBSUj8gIFRoZW4gYXNzdW1lIHdlJ3JlIGFsd2F5cyByZWFkeSAqLwotCQkJc3RhdHVzLT5DYXJkU3RhdGUgfD0gQ1NfRVZFTlRfUkVBRFlfQ0hBTkdFOwotCQl9Ci0JCWlmIChjLT5DYXJkVmFsdWVzICYgUFJFU0VOVF9FWFRfU1RBVFVTKSB7Ci0JCQltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwotCQkJcGNtY2lhX3JlYWRfY2lzX21lbShzLCAxLCAoYy0+Q29uZmlnQmFzZStDSVNSRUdfRVNSKT4+MSwgMSwgJnJlZyk7Ci0JCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7Ci0JCQlzdGF0dXMtPkNhcmRTdGF0ZSB8PQotCQkJCShyZWcgJiBFU1JfUkVRX0FUVE4pID8gQ1NfRVZFTlRfUkVRVUVTVF9BVFRFTlRJT04gOiAwOwotCQl9Ci0JCXJldHVybiAwOwotCX0KLQlzdGF0dXMtPkNhcmRTdGF0ZSB8PQotCQkodmFsICYgU1NfV1JQUk9UKSA/IENTX0VWRU5UX1dSSVRFX1BST1RFQ1QgOiAwOwotCXN0YXR1cy0+Q2FyZFN0YXRlIHw9Ci0JCSh2YWwgJiBTU19CQVRERUFEKSA/IENTX0VWRU5UX0JBVFRFUllfREVBRCA6IDA7Ci0Jc3RhdHVzLT5DYXJkU3RhdGUgfD0KLQkJKHZhbCAmIFNTX0JBVFdBUk4pID8gQ1NfRVZFTlRfQkFUVEVSWV9MT1cgOiAwOwotCXN0YXR1cy0+Q2FyZFN0YXRlIHw9Ci0JCSh2YWwgJiBTU19SRUFEWSkgPyBDU19FVkVOVF9SRUFEWV9DSEFOR0UgOiAwOwotCXJldHVybiAwOwotfSAvKiBwY2NhcmRfZ2V0X3N0YXR1cyAqLwotCi1zdGF0aWMgaW50IHBjY2FyZF9nZXRfY29uZmlndXJhdGlvbl9pbmZvKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAotCQkJCSAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAotCQkJCSAgY29uZmlnX2luZm9fdCAqY29uZmlnKQotewotCWNvbmZpZ190ICpjOwotCi0JaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCi0JCXJldHVybiAtRU5PREVWOwotCi0KLSNpZmRlZiBDT05GSUdfQ0FSREJVUwotCWlmIChzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSB7Ci0JCW1lbXNldChjb25maWcsIDAsIHNpemVvZihjb25maWdfaW5mb190KSk7Ci0JCWNvbmZpZy0+VmNjID0gcy0+c29ja2V0LlZjYzsKLQkJY29uZmlnLT5WcHAxID0gY29uZmlnLT5WcHAyID0gcy0+c29ja2V0LlZwcDsKLQkJY29uZmlnLT5PcHRpb24gPSBzLT5jYl9kZXYtPnN1Ym9yZGluYXRlLT5udW1iZXI7Ci0JCWlmIChzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTX0NPTkZJRykgewotCQkJY29uZmlnLT5BdHRyaWJ1dGVzID0gQ09ORl9WQUxJRF9DTElFTlQ7Ci0JCQljb25maWctPkludFR5cGUgPSBJTlRfQ0FSREJVUzsKLQkJCWNvbmZpZy0+QXNzaWduZWRJUlEgPSBzLT5wY21jaWFfaXJxOwotCQkJaWYgKGNvbmZpZy0+QXNzaWduZWRJUlEpCi0JCQkJY29uZmlnLT5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKLQkJCWlmIChzLT5pb1swXS5yZXMpIHsKLQkJCQljb25maWctPkJhc2VQb3J0MSA9IHMtPmlvWzBdLnJlcy0+c3RhcnQ7Ci0JCQkJY29uZmlnLT5OdW1Qb3J0czEgPSBzLT5pb1swXS5yZXMtPmVuZCAtCi0JCQkJCWNvbmZpZy0+QmFzZVBvcnQxICsgMTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gMDsKLQl9Ci0jZW5kaWYKLQotCWlmIChwX2RldikgewotCQljID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKLQkJY29uZmlnLT5GdW5jdGlvbiA9IHBfZGV2LT5mdW5jOwotCX0gZWxzZSB7Ci0JCWMgPSBOVUxMOwotCQljb25maWctPkZ1bmN0aW9uID0gMDsKLQl9Ci0KLQlpZiAoKGMgPT0gTlVMTCkgfHwgIShjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpKSB7Ci0JCWNvbmZpZy0+QXR0cmlidXRlcyA9IDA7Ci0JCWNvbmZpZy0+VmNjID0gcy0+c29ja2V0LlZjYzsKLQkJY29uZmlnLT5WcHAxID0gY29uZmlnLT5WcHAyID0gcy0+c29ja2V0LlZwcDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JY29uZmlnLT5BdHRyaWJ1dGVzID0gYy0+QXR0cmlidXRlcyB8IENPTkZfVkFMSURfQ0xJRU5UOwotCWNvbmZpZy0+VmNjID0gcy0+c29ja2V0LlZjYzsKLQljb25maWctPlZwcDEgPSBjb25maWctPlZwcDIgPSBzLT5zb2NrZXQuVnBwOwotCWNvbmZpZy0+SW50VHlwZSA9IGMtPkludFR5cGU7Ci0JY29uZmlnLT5Db25maWdCYXNlID0gYy0+Q29uZmlnQmFzZTsKLQljb25maWctPlN0YXR1cyA9IGMtPlN0YXR1czsKLQljb25maWctPlBpbiA9IGMtPlBpbjsKLQljb25maWctPkNvcHkgPSBjLT5Db3B5OwotCWNvbmZpZy0+T3B0aW9uID0gYy0+T3B0aW9uOwotCWNvbmZpZy0+RXh0U3RhdHVzID0gYy0+RXh0U3RhdHVzOwotCWNvbmZpZy0+UHJlc2VudCA9IGNvbmZpZy0+Q2FyZFZhbHVlcyA9IGMtPkNhcmRWYWx1ZXM7Ci0JY29uZmlnLT5JUlFBdHRyaWJ1dGVzID0gYy0+aXJxLkF0dHJpYnV0ZXM7Ci0JY29uZmlnLT5Bc3NpZ25lZElSUSA9IHMtPnBjbWNpYV9pcnE7Ci0JY29uZmlnLT5CYXNlUG9ydDEgPSBjLT5pby5CYXNlUG9ydDE7Ci0JY29uZmlnLT5OdW1Qb3J0czEgPSBjLT5pby5OdW1Qb3J0czE7Ci0JY29uZmlnLT5BdHRyaWJ1dGVzMSA9IGMtPmlvLkF0dHJpYnV0ZXMxOwotCWNvbmZpZy0+QmFzZVBvcnQyID0gYy0+aW8uQmFzZVBvcnQyOwotCWNvbmZpZy0+TnVtUG9ydHMyID0gYy0+aW8uTnVtUG9ydHMyOwotCWNvbmZpZy0+QXR0cmlidXRlczIgPSBjLT5pby5BdHRyaWJ1dGVzMjsKLQljb25maWctPklPQWRkckxpbmVzID0gYy0+aW8uSU9BZGRyTGluZXM7Ci0KLQlyZXR1cm4gMDsKLX0gLyogcGNjYXJkX2dldF9jb25maWd1cmF0aW9uX2luZm8gKi8KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgIFRoZXNlIG1hbmFnZSBhIHJpbmcgYnVmZmVyIG9mIGV2ZW50cyBwZW5kaW5nIGZvciBvbmUgdXNlciBwcm9jZXNzCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0KLXN0YXRpYyBpbnQgcXVldWVfZW1wdHkodXNlcl9pbmZvX3QgKnVzZXIpCi17Ci0gICAgcmV0dXJuICh1c2VyLT5ldmVudF9oZWFkID09IHVzZXItPmV2ZW50X3RhaWwpOwotfQotCi1zdGF0aWMgZXZlbnRfdCBnZXRfcXVldWVkX2V2ZW50KHVzZXJfaW5mb190ICp1c2VyKQotewotICAgIHVzZXItPmV2ZW50X3RhaWwgPSAodXNlci0+ZXZlbnRfdGFpbCsxKSAlIE1BWF9FVkVOVFM7Ci0gICAgcmV0dXJuIHVzZXItPmV2ZW50W3VzZXItPmV2ZW50X3RhaWxdOwotfQotCi1zdGF0aWMgdm9pZCBxdWV1ZV9ldmVudCh1c2VyX2luZm9fdCAqdXNlciwgZXZlbnRfdCBldmVudCkKLXsKLSAgICB1c2VyLT5ldmVudF9oZWFkID0gKHVzZXItPmV2ZW50X2hlYWQrMSkgJSBNQVhfRVZFTlRTOwotICAgIGlmICh1c2VyLT5ldmVudF9oZWFkID09IHVzZXItPmV2ZW50X3RhaWwpCi0JdXNlci0+ZXZlbnRfdGFpbCA9ICh1c2VyLT5ldmVudF90YWlsKzEpICUgTUFYX0VWRU5UUzsKLSAgICB1c2VyLT5ldmVudFt1c2VyLT5ldmVudF9oZWFkXSA9IGV2ZW50OwotfQotCi12b2lkIGhhbmRsZV9ldmVudChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgZXZlbnRfdCBldmVudCkKLXsKLSAgICB1c2VyX2luZm9fdCAqdXNlcjsKLSAgICBmb3IgKHVzZXIgPSBzLT51c2VyOyB1c2VyOyB1c2VyID0gdXNlci0+bmV4dCkKLQlxdWV1ZV9ldmVudCh1c2VyLCBldmVudCk7Ci0gICAgd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzLT5xdWV1ZSk7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgICBiaW5kX3JlcXVlc3QoKSBhbmQgYmluZF9kZXZpY2UoKSBhcmUgbWVyZ2VkIGJ5IG5vdy4gUmVnaXN0ZXJfY2xpZW50KCkKLSAgICBpcyBjYWxsZWQgcmlnaHQgYXQgdGhlIGVuZCBvZiBiaW5kX3JlcXVlc3QoKSwgZHVyaW5nIHRoZSBkcml2ZXIncwotICAgIC0+YXR0YWNoKCkgY2FsbC4gSW5kaXZpZHVhbCBkZXNjcmlwdGlvbnM6Ci0KLSAgICBiaW5kX3JlcXVlc3QoKSBjb25uZWN0cyBhIHNvY2tldCB0byBhIHBhcnRpY3VsYXIgY2xpZW50IGRyaXZlci4KLSAgICBJdCBsb29rcyB1cCB0aGUgc3BlY2lmaWVkIGRldmljZSBJRCBpbiB0aGUgbGlzdCBvZiByZWdpc3RlcmVkCi0gICAgZHJpdmVycywgYmluZHMgaXQgdG8gdGhlIHNvY2tldCwgYW5kIHRyaWVzIHRvIGNyZWF0ZSBhbiBpbnN0YW5jZQotICAgIG9mIHRoZSBkZXZpY2UuICB1bmJpbmRfcmVxdWVzdCgpIGRlbGV0ZXMgYSBkcml2ZXIgaW5zdGFuY2UuCi0KLSAgICBCaW5kX2RldmljZSgpIGFzc29jaWF0ZXMgYSBkZXZpY2UgZHJpdmVyIHdpdGggYSBwYXJ0aWN1bGFyIHNvY2tldC4KLSAgICBJdCBpcyBub3JtYWxseSBjYWxsZWQgYnkgRHJpdmVyIFNlcnZpY2VzIGFmdGVyIGl0IGhhcyBpZGVudGlmaWVkCi0gICAgYSBuZXdseSBpbnNlcnRlZCBjYXJkLiAgQW4gaW5zdGFuY2Ugb2YgdGhhdCBkcml2ZXIgd2lsbCB0aGVuIGJlCi0gICAgZWxpZ2libGUgdG8gcmVnaXN0ZXIgYXMgYSBjbGllbnQgb2YgdGhpcyBzb2NrZXQuCi0KLSAgICBSZWdpc3Rlcl9jbGllbnQoKSB1c2VzIHRoZSBkZXZfaW5mb190IGhhbmRsZSB0byBtYXRjaCB0aGUKLSAgICBjYWxsZXIgd2l0aCBhIHNvY2tldC4gIFRoZSBkcml2ZXIgbXVzdCBoYXZlIGFscmVhZHkgYmVlbiBib3VuZAotICAgIHRvIGEgc29ja2V0IHdpdGggYmluZF9kZXZpY2UoKSAtLSBpbiBmYWN0LCBiaW5kX2RldmljZSgpCi0gICAgYWxsb2NhdGVzIHRoZSBjbGllbnQgc3RydWN0dXJlIHRoYXQgd2lsbCBiZSB1c2VkLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCBiaW5kX3JlcXVlc3Qoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGJpbmRfaW5mb190ICpiaW5kX2luZm8pCi17Ci0Jc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2OwotCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldjsKLQlpbnQgcmV0ID0gMDsKLQotCXMgPSBwY21jaWFfZ2V0X3NvY2tldChzKTsKLQlpZiAoIXMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcHJfZGVidWcoImJpbmRfcmVxdWVzdCglZCwgJyVzJylcbiIsIHMtPnNvY2ssCi0JICAgICAgIChjaGFyICopYmluZF9pbmZvLT5kZXZfaW5mbyk7Ci0KLQlwX2RydiA9IGdldF9wY21jaWFfZHJpdmVyKCZiaW5kX2luZm8tPmRldl9pbmZvKTsKLQlpZiAoIXBfZHJ2KSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyX3B1dDsKLQl9Ci0KLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHBfZHJ2LT5vd25lcikpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBlcnJfcHV0X2RyaXZlcjsKLQl9Ci0KLQltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocF9kZXYsICZzLT5kZXZpY2VzX2xpc3QsIHNvY2tldF9kZXZpY2VfbGlzdCkgewotCQlpZiAocF9kZXYtPmZ1bmMgPT0gYmluZF9pbmZvLT5mdW5jdGlvbikgewotCQkJaWYgKChwX2Rldi0+ZGV2LmRyaXZlciA9PSAmcF9kcnYtPmRydikpIHsKLQkJCQlpZiAocF9kZXYtPmNhcmRtZ3IpIHsKLQkJCQkJLyogaWYgdGhlcmUncyBhbHJlYWR5IGEgZGV2aWNlCi0JCQkJCSAqIHJlZ2lzdGVyZWQsIGFuZCBpdCB3YXMgcmVnaXN0ZXJlZAotCQkJCQkgKiBieSB1c2Vyc3BhY2UgYmVmb3JlLCB3ZSBuZWVkIHRvCi0JCQkJCSAqIHJldHVybiB0aGUgImluc3RhbmNlIi4gKi8KLQkJCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwotCQkJCQliaW5kX2luZm8tPmluc3RhbmNlID0gcF9kZXY7Ci0JCQkJCXJldCA9IC1FQlVTWTsKLQkJCQkJZ290byBlcnJfcHV0X21vZHVsZTsKLQkJCQl9IGVsc2UgewotCQkJCQkvKiB0aGUgY29ycmVjdCBkcml2ZXIgbWFuYWdlZCB0byBiaW5kCi0JCQkJCSAqIGl0c2VsZiBtYWdpY2FsbHkgdG8gdGhlIGNvcnJlY3QKLQkJCQkJICogZGV2aWNlLiAqLwotCQkJCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7Ci0JCQkJCXBfZGV2LT5jYXJkbWdyID0gcF9kcnY7Ci0JCQkJCXJldCA9IDA7Ci0JCQkJCWdvdG8gZXJyX3B1dF9tb2R1bGU7Ci0JCQkJfQotCQkJfSBlbHNlIGlmICghcF9kZXYtPmRldi5kcml2ZXIpIHsKLQkJCQkvKiB0aGVyZSdzIGFscmVhZHkgYSBkZXZpY2UgYXZhaWxhYmxlIHdoZXJlCi0JCQkJICogbm8gZGV2aWNlIGhhcyBiZWVuIGJvdW5kIHRvIHlldC4gU28gd2UgZG9uJ3QKLQkJCQkgKiBuZWVkIHRvIHJlZ2lzdGVyIGEgZGV2aWNlISAqLwotCQkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKLQkJCQlnb3RvIHJlc2NhbjsKLQkJCX0KLQkJfQotCX0KLQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7Ci0KLQlwX2RldiA9IHBjbWNpYV9kZXZpY2VfYWRkKHMsIGJpbmRfaW5mby0+ZnVuY3Rpb24pOwotCWlmICghcF9kZXYpIHsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBlcnJfcHV0X21vZHVsZTsKLQl9Ci0KLXJlc2NhbjoKLQlwX2Rldi0+Y2FyZG1nciA9IHBfZHJ2OwotCi0JLyogaWYgYSBkcml2ZXIgaXMgYWxyZWFkeSBydW5uaW5nLCB3ZSBjYW4gYWJvcnQgKi8KLQlpZiAocF9kZXYtPmRldi5kcml2ZXIpCi0JCWdvdG8gZXJyX3B1dF9tb2R1bGU7Ci0KLQkvKgotCSAqIFByZXZlbnQgdGhpcyByYWNpbmcgd2l0aCBhIGNhcmQgaW5zZXJ0aW9uLgotCSAqLwotCW11dGV4X2xvY2soJnMtPnNrdF9tdXRleCk7Ci0JcmV0ID0gYnVzX3Jlc2Nhbl9kZXZpY2VzKCZwY21jaWFfYnVzX3R5cGUpOwotCW11dGV4X3VubG9jaygmcy0+c2t0X211dGV4KTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9wdXRfbW9kdWxlOwotCi0JLyogY2hlY2sgd2hldGhlciB0aGUgZHJpdmVyIGluZGVlZCBtYXRjaGVkLiBJIGRvbid0IGNhcmUgaWYgdGhpcwotCSAqIGlzIHJhY3kgb3Igbm90LCBiZWNhdXNlIGl0IGNhbiBvbmx5IGhhcHBlbiBvbiBjYXJkbWdyIGFjY2VzcwotCSAqIHBhdGhzLi4uCi0JICovCi0JaWYgKCEocF9kZXYtPmRldi5kcml2ZXIgPT0gJnBfZHJ2LT5kcnYpKQotCQlwX2Rldi0+Y2FyZG1nciA9IE5VTEw7Ci0KLSBlcnJfcHV0X21vZHVsZToKLQltb2R1bGVfcHV0KHBfZHJ2LT5vd25lcik7Ci0gZXJyX3B1dF9kcml2ZXI6Ci0JcHV0X2RyaXZlcigmcF9kcnYtPmRydik7Ci0gZXJyX3B1dDoKLQlwY21jaWFfcHV0X3NvY2tldChzKTsKLQotCXJldHVybiByZXQ7Ci19IC8qIGJpbmRfcmVxdWVzdCAqLwotCi0jaWZkZWYgQ09ORklHX0NBUkRCVVMKLQotc3RhdGljIHN0cnVjdCBwY2lfYnVzICpwY21jaWFfbG9va3VwX2J1cyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKLXsKLQlpZiAoIXMgfHwgIShzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gcy0+Y2JfZGV2LT5zdWJvcmRpbmF0ZTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IGdldF9kZXZpY2VfaW5mbyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgYmluZF9pbmZvX3QgKmJpbmRfaW5mbywgaW50IGZpcnN0KQotewotCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldjsKLQlzdHJ1Y3QgcGNtY2lhX2RyaXZlciAqcF9kcnY7Ci0JaW50IHJldCA9IDA7Ci0KLSNpZmRlZiBDT05GSUdfQ0FSREJVUwotCS8qCi0JICogU29tZSB1bmJlbGlldmFibHkgdWdseSBjb2RlIHRvIGFzc29jaWF0ZSB0aGUgUENJIGNhcmRidXMKLQkgKiBkZXZpY2UgYW5kIGl0cyBkcml2ZXIgd2l0aCB0aGUgUENNQ0lBICJiaW5kIiBpbmZvcm1hdGlvbi4KLQkgKi8KLQl7Ci0JCXN0cnVjdCBwY2lfYnVzICpidXM7Ci0KLQkJYnVzID0gcGNtY2lhX2xvb2t1cF9idXMocyk7Ci0JCWlmIChidXMpIHsKLQkJCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7Ci0JCQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKLQotCQkJbGlzdCA9IGJ1cy0+ZGV2aWNlcy5uZXh0OwotCQkJd2hpbGUgKGxpc3QgIT0gJmJ1cy0+ZGV2aWNlcykgewotCQkJCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcGNpX2Rldl9iKGxpc3QpOwotCQkJCWxpc3QgPSBsaXN0LT5uZXh0OwotCi0JCQkJaWYgKGZpcnN0KSB7Ci0JCQkJCWRldiA9IHBkZXY7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJCS8qIFRyeSB0byBoYW5kbGUgIm5leHQiIGhlcmUgc29tZSB3YXk/ICovCi0JCQl9Ci0JCQlpZiAoZGV2ICYmIGRldi0+ZHJpdmVyKSB7Ci0JCQkJc3RybGNweShiaW5kX2luZm8tPm5hbWUsIGRldi0+ZHJpdmVyLT5uYW1lLCBERVZfTkFNRV9MRU4pOwotCQkJCWJpbmRfaW5mby0+bWFqb3IgPSAwOwotCQkJCWJpbmRfaW5mby0+bWlub3IgPSAwOwotCQkJCWJpbmRfaW5mby0+bmV4dCA9IE5VTEw7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCX0KLQl9Ci0jZW5kaWYKLQotCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwX2RldiwgJnMtPmRldmljZXNfbGlzdCwgc29ja2V0X2RldmljZV9saXN0KSB7Ci0JCWlmIChwX2Rldi0+ZnVuYyA9PSBiaW5kX2luZm8tPmZ1bmN0aW9uKSB7Ci0JCQlwX2RldiA9IHBjbWNpYV9nZXRfZGV2KHBfZGV2KTsKLQkJCWlmICghcF9kZXYpCi0JCQkJY29udGludWU7Ci0JCQlnb3RvIGZvdW5kOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKLQlyZXR1cm4gLUVOT0RFVjsKLQotIGZvdW5kOgotCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKLQotCXBfZHJ2ID0gdG9fcGNtY2lhX2RydihwX2Rldi0+ZGV2LmRyaXZlcik7Ci0JaWYgKHBfZHJ2ICYmICFwX2Rldi0+X2xvY2tlZCkgewotCQlyZXQgPSAtRUFHQUlOOwotCQlnb3RvIGVycl9wdXQ7Ci0JfQotCi0JaWYgKCFmaXJzdCkgewotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGVycl9wdXQ7Ci0JfQotCi0Jc3RybGNweShiaW5kX2luZm8tPm5hbWUsIGRldl9uYW1lKCZwX2Rldi0+ZGV2KSwgREVWX05BTUVfTEVOKTsKLQliaW5kX2luZm8tPm5leHQgPSBOVUxMOwotCi0gZXJyX3B1dDoKLQlwY21jaWFfcHV0X2RldihwX2Rldik7Ci0JcmV0dXJuIHJldDsKLX0gLyogZ2V0X2RldmljZV9pbmZvICovCi0KLQotc3RhdGljIGludCBkc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotICAgIHNvY2tldF90IGkgPSBpbWlub3IoaW5vZGUpOwotICAgIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzOwotICAgIHVzZXJfaW5mb190ICp1c2VyOwotICAgIHN0YXRpYyBpbnQgd2FybmluZ19wcmludGVkOwotICAgIGludCByZXQgPSAwOwotCi0gICAgcHJfZGVidWcoImRzX29wZW4oc29ja2V0ICVkKVxuIiwgaSk7Ci0KLSAgICBsb2NrX2tlcm5lbCgpOwotICAgIHMgPSBwY21jaWFfZ2V0X3NvY2tldF9ieV9ucihpKTsKLSAgICBpZiAoIXMpIHsKLQkgICAgcmV0ID0gLUVOT0RFVjsKLQkgICAgZ290byBvdXQ7Ci0gICAgfQotICAgIHMgPSBwY21jaWFfZ2V0X3NvY2tldChzKTsKLSAgICBpZiAoIXMpIHsKLQkgICAgcmV0ID0gLUVOT0RFVjsKLQkgICAgZ290byBvdXQ7Ci0gICAgfQotCi0gICAgaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSAhPSBPX1JET05MWSkgewotCSAgICBpZiAocy0+cGNtY2lhX3N0YXRlLmJ1c3kpIHsKLQkJICAgIHBjbWNpYV9wdXRfc29ja2V0KHMpOwotCQkgICAgcmV0ID0gLUVCVVNZOwotCQkgICAgZ290byBvdXQ7Ci0JICAgIH0KLQllbHNlCi0JICAgIHMtPnBjbWNpYV9zdGF0ZS5idXN5ID0gMTsKLSAgICB9Ci0KLSAgICB1c2VyID0ga21hbGxvYyhzaXplb2YodXNlcl9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKLSAgICBpZiAoIXVzZXIpIHsKLQkgICAgcGNtY2lhX3B1dF9zb2NrZXQocyk7Ci0JICAgIHJldCA9IC1FTk9NRU07Ci0JICAgIGdvdG8gb3V0OwotICAgIH0KLSAgICB1c2VyLT5ldmVudF90YWlsID0gdXNlci0+ZXZlbnRfaGVhZCA9IDA7Ci0gICAgdXNlci0+bmV4dCA9IHMtPnVzZXI7Ci0gICAgdXNlci0+dXNlcl9tYWdpYyA9IFVTRVJfTUFHSUM7Ci0gICAgdXNlci0+c29ja2V0ID0gczsKLSAgICBzLT51c2VyID0gdXNlcjsKLSAgICBmaWxlLT5wcml2YXRlX2RhdGEgPSB1c2VyOwotCi0gICAgaWYgKCF3YXJuaW5nX3ByaW50ZWQpIHsKLQkgICAgcHJpbnRrKEtFUk5fSU5GTyAicGNtY2lhOiBEZXRlY3RlZCBkZXByZWNhdGVkIFBDTUNJQSBpb2N0bCAiCi0JCQkidXNhZ2UgZnJvbSBwcm9jZXNzOiAlcy5cbiIsIGN1cnJlbnQtPmNvbW0pOwotCSAgICBwcmludGsoS0VSTl9JTkZPICJwY21jaWE6IFRoaXMgaW50ZXJmYWNlIHdpbGwgc29vbiBiZSByZW1vdmVkIGZyb20gIgotCQkJInRoZSBrZXJuZWw7IHBsZWFzZSBleHBlY3QgYnJlYWthZ2UgdW5sZXNzIHlvdSB1cGdyYWRlICIKLQkJCSJ0byBuZXcgdG9vbHMuXG4iKTsKLQkgICAgcHJpbnRrKEtFUk5fSU5GTyAicGNtY2lhOiBzZWUgaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC8iCi0JCQkidXRpbHMva2VybmVsL3BjbWNpYS9wY21jaWEuaHRtbCBmb3IgZGV0YWlscy5cbiIpOwotCSAgICB3YXJuaW5nX3ByaW50ZWQgPSAxOwotICAgIH0KLQotICAgIGlmIChhdG9taWNfcmVhZCgmcy0+cHJlc2VudCkpCi0JcXVldWVfZXZlbnQodXNlciwgQ1NfRVZFTlRfQ0FSRF9JTlNFUlRJT04pOwotb3V0OgotICAgIHVubG9ja19rZXJuZWwoKTsKLSAgICByZXR1cm4gcmV0OwotfSAvKiBkc19vcGVuICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IGRzX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0gICAgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnM7Ci0gICAgdXNlcl9pbmZvX3QgKnVzZXIsICoqbGluazsKLQotICAgIHByX2RlYnVnKCJkc19yZWxlYXNlKHNvY2tldCAlZClcbiIsIGltaW5vcihpbm9kZSkpOwotCi0gICAgdXNlciA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLSAgICBpZiAoQ0hFQ0tfVVNFUih1c2VyKSkKLQlnb3RvIG91dDsKLQotICAgIHMgPSB1c2VyLT5zb2NrZXQ7Ci0KLSAgICAvKiBVbmxpbmsgdXNlciBkYXRhIHN0cnVjdHVyZSAqLwotICAgIGlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgIT0gT19SRE9OTFkpCi0Jcy0+cGNtY2lhX3N0YXRlLmJ1c3kgPSAwOwotCi0gICAgZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKLSAgICBmb3IgKGxpbmsgPSAmcy0+dXNlcjsgKmxpbms7IGxpbmsgPSAmKCpsaW5rKS0+bmV4dCkKLQlpZiAoKmxpbmsgPT0gdXNlcikKLQkJYnJlYWs7Ci0gICAgaWYgKGxpbmsgPT0gTlVMTCkKLQlnb3RvIG91dDsKLSAgICAqbGluayA9IHVzZXItPm5leHQ7Ci0gICAgdXNlci0+dXNlcl9tYWdpYyA9IDA7Ci0gICAga2ZyZWUodXNlcik7Ci0gICAgcGNtY2lhX3B1dF9zb2NrZXQocyk7Ci1vdXQ6Ci0gICAgcmV0dXJuIDA7Ci19IC8qIGRzX3JlbGVhc2UgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBzc2l6ZV90IGRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCi0JCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLSAgICBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqczsKLSAgICB1c2VyX2luZm9fdCAqdXNlcjsKLSAgICBpbnQgcmV0OwotCi0gICAgcHJfZGVidWcoImRzX3JlYWQoc29ja2V0ICVkKVxuIiwgaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpKTsKLQotICAgIGlmIChjb3VudCA8IDQpCi0JcmV0dXJuIC1FSU5WQUw7Ci0KLSAgICB1c2VyID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotICAgIGlmIChDSEVDS19VU0VSKHVzZXIpKQotCXJldHVybiAtRUlPOwotCi0gICAgcyA9IHVzZXItPnNvY2tldDsKLSAgICByZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocy0+cXVldWUsICFxdWV1ZV9lbXB0eSh1c2VyKSk7Ci0gICAgaWYgKHJldCA9PSAwKQotCXJldCA9IHB1dF91c2VyKGdldF9xdWV1ZWRfZXZlbnQodXNlciksIChpbnQgX191c2VyICopYnVmKSA/IC1FRkFVTFQgOiA0OwotCi0gICAgcmV0dXJuIHJldDsKLX0gLyogZHNfcmVhZCAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIHNzaXplX3QgZHNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCi0JCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLSAgICBwcl9kZWJ1ZygiZHNfd3JpdGUoc29ja2V0ICVkKVxuIiwgaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpKTsKLQotICAgIGlmIChjb3VudCAhPSA0KQotCXJldHVybiAtRUlOVkFMOwotICAgIGlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgPT0gT19SRE9OTFkpCi0JcmV0dXJuIC1FQkFERjsKLQotICAgIHJldHVybiAtRUlPOwotfSAvKiBkc193cml0ZSAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotLyogTm8ga2VybmVsIGxvY2sgLSBmaW5lICovCi1zdGF0aWMgdV9pbnQgZHNfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKLXsKLSAgICBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqczsKLSAgICB1c2VyX2luZm9fdCAqdXNlcjsKLQotICAgIHByX2RlYnVnKCJkc19wb2xsKHNvY2tldCAlZClcbiIsIGltaW5vcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSk7Ci0KLSAgICB1c2VyID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotICAgIGlmIChDSEVDS19VU0VSKHVzZXIpKQotCXJldHVybiBQT0xMRVJSOwotICAgIHMgPSB1c2VyLT5zb2NrZXQ7Ci0gICAgLyoKLSAgICAgKiBXZSBkb24ndCBjaGVjayBmb3IgYSBkZWFkIHNvY2tldCBoZXJlIHNpbmNlIHRoYXQKLSAgICAgKiB3aWxsIHNlbmQgY2FyZG1nciBpbnRvIGFuIGVuZGxlc3Mgc3Bpbi4KLSAgICAgKi8KLSAgICBwb2xsX3dhaXQoZmlsZSwgJnMtPnF1ZXVlLCB3YWl0KTsKLSAgICBpZiAoIXF1ZXVlX2VtcHR5KHVzZXIpKQotCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOwotICAgIHJldHVybiAwOwotfSAvKiBkc19wb2xsICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IGRzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1X2ludCBjbWQsIHVfbG9uZyBhcmcpCi17Ci0gICAgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnM7Ci0gICAgdm9pZCBfX3VzZXIgKnVhcmcgPSAoY2hhciBfX3VzZXIgKilhcmc7Ci0gICAgdV9pbnQgc2l6ZTsKLSAgICBpbnQgcmV0LCBlcnI7Ci0gICAgZHNfaW9jdGxfYXJnX3QgKmJ1ZjsKLSAgICB1c2VyX2luZm9fdCAqdXNlcjsKLQotICAgIHByX2RlYnVnKCJkc19pb2N0bChzb2NrZXQgJWQsICUjeCwgJSNseClcbiIsIGltaW5vcihpbm9kZSksIGNtZCwgYXJnKTsKLQotICAgIHVzZXIgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0gICAgaWYgKENIRUNLX1VTRVIodXNlcikpCi0JcmV0dXJuIC1FSU87Ci0KLSAgICBzID0gdXNlci0+c29ja2V0OwotCi0gICAgc2l6ZSA9IChjbWQgJiBJT0NTSVpFX01BU0spID4+IElPQ1NJWkVfU0hJRlQ7Ci0gICAgaWYgKHNpemUgPiBzaXplb2YoZHNfaW9jdGxfYXJnX3QpKQotCXJldHVybiAtRUlOVkFMOwotCi0gICAgLyogUGVybWlzc2lvbiBjaGVjayAqLwotICAgIGlmICghKGNtZCAmIElPQ19PVVQpICYmICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCXJldHVybiAtRVBFUk07Ci0KLSAgICBpZiAoY21kICYgSU9DX0lOKSB7Ci0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHVhcmcsIHNpemUpKSB7Ci0JICAgIHByX2RlYnVnKCJkc19pb2N0bCgpOiB2ZXJpZnlfcmVhZCA9ICVkXG4iLCAtRUZBVUxUKTsKLQkgICAgcmV0dXJuIC1FRkFVTFQ7Ci0JfQotICAgIH0KLSAgICBpZiAoY21kICYgSU9DX09VVCkgewotCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdWFyZywgc2l6ZSkpIHsKLQkgICAgcHJfZGVidWcoImRzX2lvY3RsKCk6IHZlcmlmeV93cml0ZSA9ICVkXG4iLCAtRUZBVUxUKTsKLQkgICAgcmV0dXJuIC1FRkFVTFQ7Ci0JfQotICAgIH0KLSAgICBidWYgPSBrbWFsbG9jKHNpemVvZihkc19pb2N0bF9hcmdfdCksIEdGUF9LRVJORUwpOwotICAgIGlmICghYnVmKQotCXJldHVybiAtRU5PTUVNOwotCi0gICAgZXJyID0gcmV0ID0gMDsKLQotICAgIGlmIChjbWQgJiBJT0NfSU4pIHsKLQlpZiAoX19jb3B5X2Zyb21fdXNlcigoY2hhciAqKWJ1ZiwgdWFyZywgc2l6ZSkpIHsKLQkgICAgZXJyID0gLUVGQVVMVDsKLQkgICAgZ290byBmcmVlX291dDsKLQl9Ci0gICAgfQotCi0gICAgc3dpdGNoIChjbWQpIHsKLSAgICBjYXNlIERTX0FESlVTVF9SRVNPVVJDRV9JTkZPOgotCXJldCA9IHBjbWNpYV9hZGp1c3RfcmVzb3VyY2VfaW5mbygmYnVmLT5hZGp1c3QpOwotCWJyZWFrOwotICAgIGNhc2UgRFNfR0VUX0NPTkZJR1VSQVRJT05fSU5GTzoKLQlpZiAoYnVmLT5jb25maWcuRnVuY3Rpb24gJiYKLQkgICAoYnVmLT5jb25maWcuRnVuY3Rpb24gPj0gcy0+ZnVuY3Rpb25zKSkKLQkgICAgcmV0ID0gLUVJTlZBTDsKLQllbHNlIHsKLQkgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2ID0gZ2V0X3BjbWNpYV9kZXZpY2UocywgYnVmLT5jb25maWcuRnVuY3Rpb24pOwotCSAgICByZXQgPSBwY2NhcmRfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhzLCBwX2RldiwgJmJ1Zi0+Y29uZmlnKTsKLQkgICAgcGNtY2lhX3B1dF9kZXYocF9kZXYpOwotCX0KLQlicmVhazsKLSAgICBjYXNlIERTX0dFVF9GSVJTVF9UVVBMRToKLQltdXRleF9sb2NrKCZzLT5za3RfbXV0ZXgpOwotCXBjbWNpYV92YWxpZGF0ZV9tZW0ocyk7Ci0JbXV0ZXhfdW5sb2NrKCZzLT5za3RfbXV0ZXgpOwotCXJldCA9IHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUocywgQklORF9GTl9BTEwsICZidWYtPnR1cGxlKTsKLQlicmVhazsKLSAgICBjYXNlIERTX0dFVF9ORVhUX1RVUExFOgotCXJldCA9IHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgJmJ1Zi0+dHVwbGUpOwotCWJyZWFrOwotICAgIGNhc2UgRFNfR0VUX1RVUExFX0RBVEE6Ci0JYnVmLT50dXBsZS5UdXBsZURhdGEgPSBidWYtPnR1cGxlX3BhcnNlLmRhdGE7Ci0JYnVmLT50dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmLT50dXBsZV9wYXJzZS5kYXRhKTsKLQlyZXQgPSBwY2NhcmRfZ2V0X3R1cGxlX2RhdGEocywgJmJ1Zi0+dHVwbGUpOwotCWJyZWFrOwotICAgIGNhc2UgRFNfUEFSU0VfVFVQTEU6Ci0JYnVmLT50dXBsZS5UdXBsZURhdGEgPSBidWYtPnR1cGxlX3BhcnNlLmRhdGE7Ci0JcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKCZidWYtPnR1cGxlLCAmYnVmLT50dXBsZV9wYXJzZS5wYXJzZSk7Ci0JYnJlYWs7Ci0gICAgY2FzZSBEU19SRVNFVF9DQVJEOgotCXJldCA9IHBjbWNpYV9yZXNldF9jYXJkKHMpOwotCWJyZWFrOwotICAgIGNhc2UgRFNfR0VUX1NUQVRVUzoKLQkgICAgaWYgKGJ1Zi0+c3RhdHVzLkZ1bmN0aW9uICYmCi0JCShidWYtPnN0YXR1cy5GdW5jdGlvbiA+PSBzLT5mdW5jdGlvbnMpKQotCQkgICAgcmV0ID0gLUVJTlZBTDsKLQkgICAgZWxzZSB7Ci0JCSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSBnZXRfcGNtY2lhX2RldmljZShzLCBidWYtPnN0YXR1cy5GdW5jdGlvbik7Ci0JCSAgICByZXQgPSBwY2NhcmRfZ2V0X3N0YXR1cyhzLCBwX2RldiwgJmJ1Zi0+c3RhdHVzKTsKLQkJICAgIHBjbWNpYV9wdXRfZGV2KHBfZGV2KTsKLQkgICAgfQotCSAgICBicmVhazsKLSAgICBjYXNlIERTX1ZBTElEQVRFX0NJUzoKLQltdXRleF9sb2NrKCZzLT5za3RfbXV0ZXgpOwotCXBjbWNpYV92YWxpZGF0ZV9tZW0ocyk7Ci0JbXV0ZXhfdW5sb2NrKCZzLT5za3RfbXV0ZXgpOwotCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgJmJ1Zi0+Y2lzaW5mby5DaGFpbnMpOwotCWJyZWFrOwotICAgIGNhc2UgRFNfU1VTUEVORF9DQVJEOgotCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfU1VTUEVORCk7Ci0JYnJlYWs7Ci0gICAgY2FzZSBEU19SRVNVTUVfQ0FSRDoKLQlwY21jaWFfcGFyc2VfdWV2ZW50cyhzLCBQQ01DSUFfVUVWRU5UX1JFU1VNRSk7Ci0JYnJlYWs7Ci0gICAgY2FzZSBEU19FSkVDVF9DQVJEOgotCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfRUpFQ1QpOwotCWJyZWFrOwotICAgIGNhc2UgRFNfSU5TRVJUX0NBUkQ6Ci0JcGNtY2lhX3BhcnNlX3VldmVudHMocywgUENNQ0lBX1VFVkVOVF9JTlNFUlQpOwotCWJyZWFrOwotICAgIGNhc2UgRFNfQUNDRVNTX0NPTkZJR1VSQVRJT05fUkVHSVNURVI6Ci0JaWYgKChidWYtPmNvbmZfcmVnLkFjdGlvbiA9PSBDU19XUklURSkgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKLQkgICAgZXJyID0gLUVQRVJNOwotCSAgICBnb3RvIGZyZWVfb3V0OwotCX0KLQotCXJldCA9IC1FSU5WQUw7Ci0KLQlpZiAoIShidWYtPmNvbmZfcmVnLkZ1bmN0aW9uICYmCi0JICAgICAoYnVmLT5jb25mX3JlZy5GdW5jdGlvbiA+PSBzLT5mdW5jdGlvbnMpKSkgewotCQlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSBnZXRfcGNtY2lhX2RldmljZShzLCBidWYtPmNvbmZfcmVnLkZ1bmN0aW9uKTsKLQkJaWYgKHBfZGV2KSB7Ci0JCQlyZXQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIocF9kZXYsICZidWYtPmNvbmZfcmVnKTsKLQkJCXBjbWNpYV9wdXRfZGV2KHBfZGV2KTsKLQkJfQotCX0KLQlicmVhazsKLSAgICBjYXNlIERTX0dFVF9GSVJTVF9SRUdJT046Ci0gICAgY2FzZSBEU19HRVRfTkVYVF9SRUdJT046Ci0gICAgY2FzZSBEU19CSU5EX01URDoKLQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKLQkJZXJyID0gLUVQRVJNOwotCQlnb3RvIGZyZWVfb3V0OwotCX0gZWxzZSB7Ci0JCQlwcmludGtfb25jZShLRVJOX1dBUk5JTkcKLQkJCQkiMi42LiBrZXJuZWxzIHVzZSBwY21jaWFtdGQgaW5zdGVhZCBvZiBtZW1vcnlfY3MuYyBhbmQgZG8gbm90IHJlcXVpcmUgc3BlY2lhbFxuIik7Ci0JCQlwcmludGtfb25jZShLRVJOX1dBUk5JTkcgIk1URCBoYW5kbGluZyBhbnkgbW9yZS5cbiIpOwotCX0KLQllcnIgPSAtRUlOVkFMOwotCWdvdG8gZnJlZV9vdXQ7Ci0JYnJlYWs7Ci0gICAgY2FzZSBEU19HRVRfRklSU1RfV0lORE9XOgotCXJldCA9IHBjbWNpYV9nZXRfd2luZG93KHMsICZidWYtPndpbl9pbmZvLmhhbmRsZSwgMSwKLQkJCSZidWYtPndpbl9pbmZvLndpbmRvdyk7Ci0JYnJlYWs7Ci0gICAgY2FzZSBEU19HRVRfTkVYVF9XSU5ET1c6Ci0JcmV0ID0gcGNtY2lhX2dldF93aW5kb3cocywgJmJ1Zi0+d2luX2luZm8uaGFuZGxlLAotCQkJYnVmLT53aW5faW5mby5oYW5kbGUgKyAxLCAmYnVmLT53aW5faW5mby53aW5kb3cpOwotCWJyZWFrOwotICAgIGNhc2UgRFNfR0VUX01FTV9QQUdFOgotCXJldCA9IHBjbWNpYV9nZXRfbWVtX3BhZ2UocywgYnVmLT53aW5faW5mby5oYW5kbGUsCi0JCQkgICAmYnVmLT53aW5faW5mby5tYXApOwotCWJyZWFrOwotICAgIGNhc2UgRFNfUkVQTEFDRV9DSVM6Ci0JcmV0ID0gcGNtY2lhX3JlcGxhY2VfY2lzKHMsIGJ1Zi0+Y2lzZHVtcC5EYXRhLCBidWYtPmNpc2R1bXAuTGVuZ3RoKTsKLQlicmVhazsKLSAgICBjYXNlIERTX0JJTkRfUkVRVUVTVDoKLQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKLQkJZXJyID0gLUVQRVJNOwotCQlnb3RvIGZyZWVfb3V0OwotCX0KLQllcnIgPSBiaW5kX3JlcXVlc3QocywgJmJ1Zi0+YmluZF9pbmZvKTsKLQlicmVhazsKLSAgICBjYXNlIERTX0dFVF9ERVZJQ0VfSU5GTzoKLQllcnIgPSBnZXRfZGV2aWNlX2luZm8ocywgJmJ1Zi0+YmluZF9pbmZvLCAxKTsKLQlicmVhazsKLSAgICBjYXNlIERTX0dFVF9ORVhUX0RFVklDRToKLQllcnIgPSBnZXRfZGV2aWNlX2luZm8ocywgJmJ1Zi0+YmluZF9pbmZvLCAwKTsKLQlicmVhazsKLSAgICBjYXNlIERTX1VOQklORF9SRVFVRVNUOgotCWVyciA9IDA7Ci0JYnJlYWs7Ci0gICAgZGVmYXVsdDoKLQllcnIgPSAtRUlOVkFMOwotICAgIH0KLQotICAgIGlmICgoZXJyID09IDApICYmIChyZXQgIT0gMCkpIHsKLQlwcl9kZWJ1ZygiZHNfaW9jdGw6IHJldCA9ICVkXG4iLCByZXQpOwotCXN3aXRjaCAocmV0KSB7Ci0JY2FzZSAtRU5PREVWOgotCWNhc2UgLUVJTlZBTDoKLQljYXNlIC1FQlVTWToKLQljYXNlIC1FTk9TWVM6Ci0JICAgIGVyciA9IHJldDsKLQkgICAgYnJlYWs7Ci0JY2FzZSAtRU5PTUVNOgotCSAgICBlcnIgPSAtRU5PU1BDOyBicmVhazsKLQljYXNlIC1FTk9TUEM6Ci0JICAgIGVyciA9IC1FTk9EQVRBOyBicmVhazsKLQlkZWZhdWx0OgotCSAgICBlcnIgPSAtRUlPOyBicmVhazsKLQl9Ci0gICAgfQotCi0gICAgaWYgKGNtZCAmIElPQ19PVVQpIHsKLQlpZiAoX19jb3B5X3RvX3VzZXIodWFyZywgKGNoYXIgKilidWYsIHNpemUpKQotCQllcnIgPSAtRUZBVUxUOwotICAgIH0KLQotZnJlZV9vdXQ6Ci0gICAga2ZyZWUoYnVmKTsKLSAgICByZXR1cm4gZXJyOwotfSAvKiBkc19pb2N0bCAqLwotCi1zdGF0aWMgbG9uZyBkc191bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JaW50IHJldDsKLQotCWxvY2tfa2VybmVsKCk7Ci0JcmV0ID0gZHNfaW9jdGwoZmlsZSwgY21kLCBhcmcpOwotCXVubG9ja19rZXJuZWwoKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRzX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IGRzX29wZW4sCi0JLnJlbGVhc2UJPSBkc19yZWxlYXNlLAotCS51bmxvY2tlZF9pb2N0bAk9IGRzX3VubG9ja2VkX2lvY3RsLAotCS5yZWFkCQk9IGRzX3JlYWQsCi0JLndyaXRlCQk9IGRzX3dyaXRlLAotCS5wb2xsCQk9IGRzX3BvbGwsCi19OwotCi12b2lkIF9faW5pdCBwY21jaWFfc2V0dXBfaW9jdGwodm9pZCkKLXsKLQlpbnQgaTsKLQotCS8qIFNldCB1cCBjaGFyYWN0ZXIgZGV2aWNlIGZvciB1c2VyIG1vZGUgY2xpZW50cyAqLwotCWkgPSByZWdpc3Rlcl9jaHJkZXYoMCwgInBjbWNpYSIsICZkc19mb3BzKTsKLQlpZiAoaSA8IDApCi0JCXByaW50ayhLRVJOX05PVElDRSAidW5hYmxlIHRvIGZpbmQgYSBmcmVlIGRldmljZSAjIGZvciAiCi0JCSAgICAgICAiRHJpdmVyIFNlcnZpY2VzIChlcnJvcj0lZClcbiIsIGkpOwotCWVsc2UKLQkJbWFqb3JfZGV2ID0gaTsKLQotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JcHJvY19wY2NhcmQgPSBwcm9jX21rZGlyKCJidXMvcGNjYXJkIiwgTlVMTCk7Ci0JaWYgKHByb2NfcGNjYXJkKQotCQlwcm9jX2NyZWF0ZSgiZHJpdmVycyIsIDAsIHByb2NfcGNjYXJkLCAmcGNjYXJkX2RyaXZlcnNfcHJvY19mb3BzKTsKLSNlbmRpZgotfQotCi0KLXZvaWQgX19leGl0IHBjbWNpYV9jbGVhbnVwX2lvY3RsKHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQlpZiAocHJvY19wY2NhcmQpIHsKLQkJcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlcnMiLCBwcm9jX3BjY2FyZCk7Ci0JCXJlbW92ZV9wcm9jX2VudHJ5KCJidXMvcGNjYXJkIiwgTlVMTCk7Ci0JfQotI2VuZGlmCi0JaWYgKG1ham9yX2RldiAhPSAtMSkKLQkJdW5yZWdpc3Rlcl9jaHJkZXYobWFqb3JfZGV2LCAicGNtY2lhIik7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYyBiL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jCmluZGV4IDI5ZjkxZmEuLjU0YWExYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jCkBAIC0yNSw3ICsyNSw2IEBACiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CkBAIC01Nyw0NyArNTYsMjMgQEAKIH0KIAogCi0vKiogYWxsb2NfaW9fc3BhY2UKLSAqCi0gKiBTcGVjaWFsIHN0dWZmIGZvciBtYW5hZ2luZyBJTyB3aW5kb3dzLCBiZWNhdXNlIHRoZXkgYXJlIHNjYXJjZQotICovCi0KLXN0YXRpYyBpbnQgYWxsb2NfaW9fc3BhY2Uoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVfaW50IGF0dHIsCi0JCQkgIHVuc2lnbmVkIGludCAqYmFzZSwgdW5zaWduZWQgaW50IG51bSwgdV9pbnQgbGluZXMpCitzdGF0aWMgdm9pZCByZWxlYXNlX2lvX3NwYWNlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKIHsKLQl1bnNpZ25lZCBpbnQgYWxpZ247Ci0KLQlhbGlnbiA9ICgqYmFzZSkgPyAobGluZXMgPyAxPDxsaW5lcyA6IDApIDogMTsKLQlpZiAoYWxpZ24gJiYgKGFsaWduIDwgbnVtKSkgewotCQlpZiAoKmJhc2UpIHsKLQkJCWRldl9kYmcoJnMtPmRldiwgIm9kZCBJTyByZXF1ZXN0OiBudW0gJSN4IGFsaWduICUjeFxuIiwKLQkJCSAgICAgICBudW0sIGFsaWduKTsKLQkJCWFsaWduID0gMDsKLQkJfSBlbHNlCi0JCQl3aGlsZSAoYWxpZ24gJiYgKGFsaWduIDwgbnVtKSkKLQkJCQlhbGlnbiA8PD0gMTsKLQl9Ci0JaWYgKCpiYXNlICYgfihhbGlnbi0xKSkgewotCQlkZXZfZGJnKCZzLT5kZXYsICJvZGQgSU8gcmVxdWVzdDogYmFzZSAlI3ggYWxpZ24gJSN4XG4iLAotCQkgICAgICAgKmJhc2UsIGFsaWduKTsKLQkJYWxpZ24gPSAwOwotCX0KLQotCXJldHVybiBzLT5yZXNvdXJjZV9vcHMtPmZpbmRfaW8ocywgYXR0ciwgYmFzZSwgbnVtLCBhbGlnbik7Ci19IC8qIGFsbG9jX2lvX3NwYWNlICovCi0KLQotc3RhdGljIHZvaWQgcmVsZWFzZV9pb19zcGFjZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGJhc2UsCi0JCQkgICAgIHVuc2lnbmVkIGludCBudW0pCi17CisJcmVzb3VyY2Vfc2l6ZV90IG51bSA9IHJlc291cmNlX3NpemUocmVzKTsKIAlpbnQgaTsKIAorCWRldl9kYmcoJnMtPmRldiwgInJlbGVhc2VfaW9fc3BhY2UgZm9yICVwUlxuIiwgcmVzKTsKKwogCWZvciAoaSA9IDA7IGkgPCBNQVhfSU9fV0lOOyBpKyspIHsKIAkJaWYgKCFzLT5pb1tpXS5yZXMpCiAJCQljb250aW51ZTsKLQkJaWYgKChzLT5pb1tpXS5yZXMtPnN0YXJ0IDw9IGJhc2UpICYmCi0JCSAgICAocy0+aW9baV0ucmVzLT5lbmQgPj0gYmFzZStudW0tMSkpIHsKKwkJaWYgKChzLT5pb1tpXS5yZXMtPnN0YXJ0IDw9IHJlcy0+c3RhcnQpICYmCisJCSAgICAocy0+aW9baV0ucmVzLT5lbmQgPj0gcmVzLT5lbmQpKSB7CiAJCQlzLT5pb1tpXS5JblVzZSAtPSBudW07CisJCQlpZiAocmVzLT5wYXJlbnQpCisJCQkJcmVsZWFzZV9yZXNvdXJjZShyZXMpOworCQkJcmVzLT5zdGFydCA9IHJlcy0+ZW5kID0gMDsKKwkJCXJlcy0+ZmxhZ3MgPSBJT1JFU09VUkNFX0lPOwogCQkJLyogRnJlZSB0aGUgd2luZG93IGlmIG5vIG9uZSBlbHNlIGlzIHVzaW5nIGl0ICovCiAJCQlpZiAocy0+aW9baV0uSW5Vc2UgPT0gMCkgewogCQkJCXJlbGVhc2VfcmVzb3VyY2Uocy0+aW9baV0ucmVzKTsKQEAgLTEwOCwyNiArODMsODAgQEAKIAl9CiB9IC8qIHJlbGVhc2VfaW9fc3BhY2UgKi8KIAotCi0vKiogcGNjYXJkX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyCisvKiogYWxsb2NfaW9fc3BhY2UKICAqCi0gKiBBY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcigpIHJlYWRzIGFuZCB3cml0ZXMgY29uZmlndXJhdGlvbgotICogcmVnaXN0ZXJzIGluIGF0dHJpYnV0ZSBtZW1vcnkuICBNZW1vcnkgd2luZG93IDAgaXMgcmVzZXJ2ZWQgZm9yCi0gKiB0aGlzIGFuZCB0aGUgdHVwbGUgcmVhZGluZyBzZXJ2aWNlcy4KKyAqIFNwZWNpYWwgc3R1ZmYgZm9yIG1hbmFnaW5nIElPIHdpbmRvd3MsIGJlY2F1c2UgdGhleSBhcmUgc2NhcmNlCiAgKi8KK3N0YXRpYyBpbnQgYWxsb2NfaW9fc3BhY2Uoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJdW5zaWduZWQgaW50IGxpbmVzKQoreworCXVuc2lnbmVkIGludCBhbGlnbjsKKwl1bnNpZ25lZCBpbnQgYmFzZSA9IHJlcy0+c3RhcnQ7CisJdW5zaWduZWQgaW50IG51bSA9IHJlcy0+ZW5kOworCWludCByZXQ7CiAKLWludCBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAotCQkJCQkgY29uZl9yZWdfdCAqcmVnKQorCXJlcy0+ZmxhZ3MgfD0gSU9SRVNPVVJDRV9JTzsKKworCWRldl9kYmcoJnMtPmRldiwgImFsbG9jX2lvX3NwYWNlIHJlcXVlc3QgZm9yICVwUiwgJWQgbGluZXNcbiIsCisJCXJlcywgbGluZXMpOworCisJYWxpZ24gPSBiYXNlID8gKGxpbmVzID8gMTw8bGluZXMgOiAwKSA6IDE7CisJaWYgKGFsaWduICYmIChhbGlnbiA8IG51bSkpIHsKKwkJaWYgKGJhc2UpIHsKKwkJCWRldl9kYmcoJnMtPmRldiwgIm9kZCBJTyByZXF1ZXN0XG4iKTsKKwkJCWFsaWduID0gMDsKKwkJfSBlbHNlCisJCQl3aGlsZSAoYWxpZ24gJiYgKGFsaWduIDwgbnVtKSkKKwkJCQlhbGlnbiA8PD0gMTsKKwl9CisJaWYgKGJhc2UgJiB+KGFsaWduLTEpKSB7CisJCWRldl9kYmcoJnMtPmRldiwgIm9kZCBJTyByZXF1ZXN0XG4iKTsKKwkJYWxpZ24gPSAwOworCX0KKworCXJldCA9IHMtPnJlc291cmNlX29wcy0+ZmluZF9pbyhzLCByZXMtPmZsYWdzLCAmYmFzZSwgbnVtLCBhbGlnbiwKKwkJCQkmcmVzLT5wYXJlbnQpOworCWlmIChyZXQpIHsKKwkJZGV2X2RiZygmcy0+ZGV2LCAiYWxsb2NfaW9fc3BhY2UgcmVxdWVzdCBmYWlsZWQgKCVkKVxuIiwgcmV0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVzLT5zdGFydCA9IGJhc2U7CisJcmVzLT5lbmQgPSByZXMtPnN0YXJ0ICsgbnVtIC0gMTsKKworCWlmIChyZXMtPnBhcmVudCkgeworCQlyZXQgPSByZXF1ZXN0X3Jlc291cmNlKHJlcy0+cGFyZW50LCByZXMpOworCQlpZiAocmV0KSB7CisJCQlkZXZfd2Fybigmcy0+ZGV2LAorCQkJCSJyZXF1ZXN0X3Jlc291cmNlICVwUiBmYWlsZWQ6ICVkXG4iLCByZXMsIHJldCk7CisJCQlyZXMtPnBhcmVudCA9IE5VTEw7CisJCQlyZWxlYXNlX2lvX3NwYWNlKHMsIHJlcyk7CisJCX0KKwl9CisJZGV2X2RiZygmcy0+ZGV2LCAiYWxsb2NfaW9fc3BhY2UgcmVxdWVzdCByZXN1bHQgJWQ6ICVwUlxuIiwgcmV0LCByZXMpOworCXJldHVybiByZXQ7Cit9IC8qIGFsbG9jX2lvX3NwYWNlICovCisKKworLyoqCisgKiBwY21jaWFfYWNjZXNzX2NvbmZpZygpIC0gcmVhZCBvciB3cml0ZSBjYXJkIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCisgKgorICogcGNtY2lhX2FjY2Vzc19jb25maWcoKSByZWFkcyBhbmQgd3JpdGVzIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIGluCisgKiBhdHRyaWJ1dGUgbWVtb3J5LiAgTWVtb3J5IHdpbmRvdyAwIGlzIHJlc2VydmVkIGZvciB0aGlzIGFuZCB0aGUgdHVwbGUKKyAqIHJlYWRpbmcgc2VydmljZXMuIERyaXZlcnMgbXVzdCB1c2UgcGNtY2lhX3JlYWRfY29uZmlnX2J5dGUoKSBvcgorICogcGNtY2lhX3dyaXRlX2NvbmZpZ19ieXRlKCkuCisgKi8KK3N0YXRpYyBpbnQgcGNtY2lhX2FjY2Vzc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJCW9mZl90IHdoZXJlLCB1OCAqdmFsLAorCQkJCWludCAoKmFjY2Vzc2YpIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKKwkJCQkJCWludCBhdHRyLCB1bnNpZ25lZCBpbnQgYWRkciwKKwkJCQkJCXVuc2lnbmVkIGludCBsZW4sIHZvaWQgKnB0cikpCiB7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnM7CiAJY29uZmlnX3QgKmM7CiAJaW50IGFkZHI7Ci0JdV9jaGFyIHZhbDsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICghcF9kZXYgfHwgIXBfZGV2LT5mdW5jdGlvbl9jb25maWcpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJcyA9IHBfZGV2LT5zb2NrZXQ7CiAKIAltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwpAQCAtMTM5LDQ0ICsxNjgsNTcgQEAKIAkJcmV0dXJuIC1FQUNDRVM7CiAJfQogCi0JYWRkciA9IChjLT5Db25maWdCYXNlICsgcmVnLT5PZmZzZXQpID4+IDE7CisJYWRkciA9IChjLT5Db25maWdCYXNlICsgd2hlcmUpID4+IDE7CiAKLQlzd2l0Y2ggKHJlZy0+QWN0aW9uKSB7Ci0JY2FzZSBDU19SRUFEOgotCQlyZXQgPSBwY21jaWFfcmVhZF9jaXNfbWVtKHMsIDEsIGFkZHIsIDEsICZ2YWwpOwotCQlyZWctPlZhbHVlID0gdmFsOwotCQlicmVhazsKLQljYXNlIENTX1dSSVRFOgotCQl2YWwgPSByZWctPlZhbHVlOwotCQlwY21jaWFfd3JpdGVfY2lzX21lbShzLCAxLCBhZGRyLCAxLCAmdmFsKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGV2X2RiZygmcy0+ZGV2LCAiSW52YWxpZCBjb25mIHJlZ2lzdGVyIHJlcXVlc3RcbiIpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9CisJcmV0ID0gYWNjZXNzZihzLCAxLCBhZGRyLCAxLCB2YWwpOworCiAJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOworCiAJcmV0dXJuIHJldDsKLX0gLyogcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyICovCi1FWFBPUlRfU1lNQk9MKHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcik7Cit9IC8qIHBjbWNpYV9hY2Nlc3NfY29uZmlnICovCisKKworLyoqCisgKiBwY21jaWFfcmVhZF9jb25maWdfYnl0ZSgpIC0gcmVhZCBhIGJ5dGUgZnJvbSBhIGNhcmQgY29uZmlndXJhdGlvbiByZWdpc3RlcgorICoKKyAqIHBjbWNpYV9yZWFkX2NvbmZpZ19ieXRlKCkgcmVhZHMgYSBieXRlIGZyb20gYSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGluCisgKiBhdHRyaWJ1dGUgbWVtb3J5LgorICovCitpbnQgcGNtY2lhX3JlYWRfY29uZmlnX2J5dGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBvZmZfdCB3aGVyZSwgdTggKnZhbCkKK3sKKwlyZXR1cm4gcGNtY2lhX2FjY2Vzc19jb25maWcocF9kZXYsIHdoZXJlLCB2YWwsIHBjbWNpYV9yZWFkX2Npc19tZW0pOworfQorRVhQT1JUX1NZTUJPTChwY21jaWFfcmVhZF9jb25maWdfYnl0ZSk7CisKKworLyoqCisgKiBwY21jaWFfd3JpdGVfY29uZmlnX2J5dGUoKSAtIHdyaXRlIGEgYnl0ZSB0byBhIGNhcmQgY29uZmlndXJhdGlvbiByZWdpc3RlcgorICoKKyAqIHBjbWNpYV93cml0ZV9jb25maWdfYnl0ZSgpIHdyaXRlcyBhIGJ5dGUgdG8gYSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGluCisgKiBhdHRyaWJ1dGUgbWVtb3J5LgorICovCitpbnQgcGNtY2lhX3dyaXRlX2NvbmZpZ19ieXRlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldiwgb2ZmX3Qgd2hlcmUsIHU4IHZhbCkKK3sKKwlyZXR1cm4gcGNtY2lhX2FjY2Vzc19jb25maWcocF9kZXYsIHdoZXJlLCAmdmFsLCBwY21jaWFfd3JpdGVfY2lzX21lbSk7Cit9CitFWFBPUlRfU1lNQk9MKHBjbWNpYV93cml0ZV9jb25maWdfYnl0ZSk7CiAKIAogaW50IHBjbWNpYV9tYXBfbWVtX3BhZ2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCB3aW5kb3dfaGFuZGxlX3Qgd2gsCi0JCQltZW1yZXFfdCAqcmVxKQorCQkJdW5zaWduZWQgaW50IG9mZnNldCkKIHsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHBfZGV2LT5zb2NrZXQ7CisJc3RydWN0IHJlc291cmNlICpyZXMgPSB3aDsKKwl1bnNpZ25lZCBpbnQgdzsKIAlpbnQgcmV0OwogCi0Jd2gtLTsKLQlpZiAod2ggPj0gTUFYX1dJTikKKwl3ID0gKChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9CSVRTICYgV0lOX0ZMQUdTX1JFUSkgPj4gMikgLSAxOworCWlmICh3ID49IE1BWF9XSU4pCiAJCXJldHVybiAtRUlOVkFMOwotCWlmIChyZXEtPlBhZ2UgIT0gMCkgewotCQlkZXZfZGJnKCZzLT5kZXYsICJmYWlsdXJlOiByZXF1ZXN0ZWQgcGFnZSBpcyB6ZXJvXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCiAJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKLQlzLT53aW5bd2hdLmNhcmRfc3RhcnQgPSByZXEtPkNhcmRPZmZzZXQ7Ci0JcmV0ID0gcy0+b3BzLT5zZXRfbWVtX21hcChzLCAmcy0+d2luW3doXSk7CisJcy0+d2luW3ddLmNhcmRfc3RhcnQgPSBvZmZzZXQ7CisJcmV0ID0gcy0+b3BzLT5zZXRfbWVtX21hcChzLCAmcy0+d2luW3ddKTsKIAlpZiAocmV0KQogCQlkZXZfd2Fybigmcy0+ZGV2LCAiZmFpbGVkIHRvIHNldF9tZW1fbWFwXG4iKTsKIAltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CkBAIC0zMTYsMzIgKzM1OCwyNiBAQAogICogZG9uJ3QgYm90aGVyIGNoZWNraW5nIHRoZSBwb3J0IHJhbmdlcyBhZ2FpbnN0IHRoZSBjdXJyZW50IHNvY2tldAogICogdmFsdWVzLgogICovCi1zdGF0aWMgaW50IHBjbWNpYV9yZWxlYXNlX2lvKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgaW9fcmVxX3QgKnJlcSkKK3N0YXRpYyBpbnQgcGNtY2lhX3JlbGVhc2VfaW8oc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQogewogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gcF9kZXYtPnNvY2tldDsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAljb25maWdfdCAqYzsKIAogCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7Ci0JYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7Ci0KIAlpZiAoIXBfZGV2LT5faW8pCiAJCWdvdG8gb3V0OwogCisJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CisKKwlyZWxlYXNlX2lvX3NwYWNlKHMsICZjLT5pb1swXSk7CisKKwlpZiAoYy0+aW9bMV0uZW5kKQorCQlyZWxlYXNlX2lvX3NwYWNlKHMsICZjLT5pb1sxXSk7CisKIAlwX2Rldi0+X2lvID0gMDsKLQotCWlmICgoYy0+aW8uQmFzZVBvcnQxICE9IHJlcS0+QmFzZVBvcnQxKSB8fAotCSAgICAoYy0+aW8uTnVtUG9ydHMxICE9IHJlcS0+TnVtUG9ydHMxKSB8fAotCSAgICAoYy0+aW8uQmFzZVBvcnQyICE9IHJlcS0+QmFzZVBvcnQyKSB8fAotCSAgICAoYy0+aW8uTnVtUG9ydHMyICE9IHJlcS0+TnVtUG9ydHMyKSkKLQkJZ290byBvdXQ7Ci0KIAljLT5zdGF0ZSAmPSB+Q09ORklHX0lPX1JFUTsKIAotCXJlbGVhc2VfaW9fc3BhY2UocywgcmVxLT5CYXNlUG9ydDEsIHJlcS0+TnVtUG9ydHMxKTsKLQlpZiAocmVxLT5OdW1Qb3J0czIpCi0JCXJlbGVhc2VfaW9fc3BhY2UocywgcmVxLT5CYXNlUG9ydDIsIHJlcS0+TnVtUG9ydHMyKTsKLQogb3V0OgogCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIApAQCAtMzQ5LDE5ICszODUsMjIgQEAKIH0gLyogcGNtY2lhX3JlbGVhc2VfaW8gKi8KIAogCi1pbnQgcGNtY2lhX3JlbGVhc2Vfd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldiwgd2luZG93X2hhbmRsZV90IHdoKQoraW50IHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzKQogewogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gcF9kZXYtPnNvY2tldDsKIAlwY2NhcmRfbWVtX21hcCAqd2luOworCXVuc2lnbmVkIGludCB3OwogCi0Jd2gtLTsKLQlpZiAod2ggPj0gTUFYX1dJTikKKwlkZXZfZGJnKCZwX2Rldi0+ZGV2LCAicmVsZWFzaW5nIHdpbmRvdyAlcFJcbiIsIHJlcyk7CisKKwl3ID0gKChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9CSVRTICYgV0lOX0ZMQUdTX1JFUSkgPj4gMikgLSAxOworCWlmICh3ID49IE1BWF9XSU4pCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKLQl3aW4gPSAmcy0+d2luW3doXTsKKwl3aW4gPSAmcy0+d2luW3ddOwogCi0JaWYgKCEocF9kZXYtPl93aW4gJiBDTElFTlRfV0lOX1JFUSh3aCkpKSB7CisJaWYgKCEocF9kZXYtPl93aW4gJiBDTElFTlRfV0lOX1JFUSh3KSkpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAibm90IHJlbGVhc2luZyB1bmtub3duIHdpbmRvd1xuIik7CiAJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zNzAsMTUgKzQwOSwxNiBAQAogCS8qIFNodXQgZG93biBtZW1vcnkgd2luZG93ICovCiAJd2luLT5mbGFncyAmPSB+TUFQX0FDVElWRTsKIAlzLT5vcHMtPnNldF9tZW1fbWFwKHMsIHdpbik7Ci0Jcy0+c3RhdGUgJj0gflNPQ0tFVF9XSU5fUkVRKHdoKTsKKwlzLT5zdGF0ZSAmPSB+U09DS0VUX1dJTl9SRVEodyk7CiAKIAkvKiBSZWxlYXNlIHN5c3RlbSBtZW1vcnkgKi8KIAlpZiAod2luLT5yZXMpIHsKKwkJcmVsZWFzZV9yZXNvdXJjZShyZXMpOwogCQlyZWxlYXNlX3Jlc291cmNlKHdpbi0+cmVzKTsKIAkJa2ZyZWUod2luLT5yZXMpOwogCQl3aW4tPnJlcyA9IE5VTEw7CiAJfQotCXBfZGV2LT5fd2luICY9IH5DTElFTlRfV0lOX1JFUSh3aCk7CisJcF9kZXYtPl93aW4gJj0gfkNMSUVOVF9XSU5fUkVRKHcpOwogCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAogCXJldHVybiAwOwpAQCAtNDczLDEzICs1MTMsMTMgQEAKIAkJcGNtY2lhX3dyaXRlX2Npc19tZW0ocywgMSwgKGJhc2UgKyBDSVNSRUdfRVNSKT4+MSwgMSwgJmMtPkV4dFN0YXR1cyk7CiAJfQogCWlmIChyZXEtPlByZXNlbnQgJiBQUkVTRU5UX0lPQkFTRV8wKSB7Ci0JCXVfY2hhciBiID0gYy0+aW8uQmFzZVBvcnQxICYgMHhmZjsKKwkJdTggYiA9IGMtPmlvWzBdLnN0YXJ0ICYgMHhmZjsKIAkJcGNtY2lhX3dyaXRlX2Npc19tZW0ocywgMSwgKGJhc2UgKyBDSVNSRUdfSU9CQVNFXzApPj4xLCAxLCAmYik7Ci0JCWIgPSAoYy0+aW8uQmFzZVBvcnQxID4+IDgpICYgMHhmZjsKKwkJYiA9IChjLT5pb1swXS5zdGFydCA+PiA4KSAmIDB4ZmY7CiAJCXBjbWNpYV93cml0ZV9jaXNfbWVtKHMsIDEsIChiYXNlICsgQ0lTUkVHX0lPQkFTRV8xKT4+MSwgMSwgJmIpOwogCX0KIAlpZiAocmVxLT5QcmVzZW50ICYgUFJFU0VOVF9JT1NJWkUpIHsKLQkJdV9jaGFyIGIgPSBjLT5pby5OdW1Qb3J0czEgKyBjLT5pby5OdW1Qb3J0czIgLSAxOworCQl1OCBiID0gcmVzb3VyY2Vfc2l6ZSgmYy0+aW9bMF0pICsgcmVzb3VyY2Vfc2l6ZSgmYy0+aW9bMV0pIC0gMTsKIAkJcGNtY2lhX3dyaXRlX2Npc19tZW0ocywgMSwgKGJhc2UgKyBDSVNSRUdfSU9TSVpFKT4+MSwgMSwgJmIpOwogCX0KIApAQCAtNTEzLDI4ICs1NTMsMjkgQEAKIEVYUE9SVF9TWU1CT0wocGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbik7CiAKIAotLyoqIHBjbWNpYV9yZXF1ZXN0X2lvCisvKioKKyAqIHBjbWNpYV9yZXF1ZXN0X2lvKCkgLSBhdHRlbXB0IHRvIHJlc2VydmUgcG9ydCByYW5nZXMgZm9yIFBDTUNJQSBkZXZpY2VzCiAgKgotICogUmVxdWVzdF9pbygpIHJlc2VydmVzIHJhbmdlcyBvZiBwb3J0IGFkZHJlc3NlcyBmb3IgYSBzb2NrZXQuCi0gKiBJIGhhdmUgbm90IGltcGxlbWVudGVkIHJhbmdlIHNoYXJpbmcgb3IgYWxpYXMgYWRkcmVzc2luZy4KKyAqIHBjbWNpYV9yZXF1ZXN0X2lvKCkgYXR0ZXB0cyB0byByZXNlcnZlIHRoZSBJTyBwb3J0IHJhbmdlcyBzcGVjaWZpZWQgaW4KKyAqICZzdHJ1Y3QgcGNtY2lhX2RldmljZSBAcF9kZXYtPnJlc291cmNlWzBdIGFuZCBAcF9kZXYtPnJlc291cmNlWzFdLiBUaGUKKyAqICJzdGFydCIgdmFsdWUgaXMgdGhlIHJlcXVlc3RlZCBzdGFydCBvZiB0aGUgSU8gcG9ydCByZXNvdXJjZTsgImVuZCIKKyAqIHJlZmxlY3RzIHRoZSBudW1iZXIgb2YgcG9ydHMgcmVxdWVzdGVkLiBUaGUgbnVtYmVyIG9mIElPIGxpbmVzIHJlcXVlc3RlZAorICogaXMgc3BlY2lmaWVkIGluICZzdHJ1Y3QgcGNtY2lhX2RldmljZSBAcF9kZXYtPmlvX2xpbmVzLgogICovCi1pbnQgcGNtY2lhX3JlcXVlc3RfaW8oc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBpb19yZXFfdCAqcmVxKQoraW50IHBjbWNpYV9yZXF1ZXN0X2lvKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKIHsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHBfZGV2LT5zb2NrZXQ7Ci0JY29uZmlnX3QgKmM7CisJY29uZmlnX3QgKmMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCWludCByZXQgPSAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKwlkZXZfZGJnKCZzLT5kZXYsICJwY21jaWFfcmVxdWVzdF9pbzogJXBSICwgJXBSIiwgJmMtPmlvWzBdLCAmYy0+aW9bMV0pOwogCiAJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpIHsKLQkJZGV2X2RiZygmcy0+ZGV2LCAiTm8gY2FyZCBwcmVzZW50XG4iKTsKKwkJZGV2X2RiZygmcy0+ZGV2LCAicGNtY2lhX3JlcXVlc3RfaW86IE5vIGNhcmQgcHJlc2VudFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlmICghcmVxKQotCQlnb3RvIG91dDsKLQotCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiQ29uZmlndXJhdGlvbiBpcyBsb2NrZWRcbiIpOwogCQlnb3RvIG91dDsKQEAgLTU0Myw0MCArNTg0LDI1IEBACiAJCWRldl9kYmcoJnMtPmRldiwgIklPIGFscmVhZHkgY29uZmlndXJlZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KLQlpZiAocmVxLT5BdHRyaWJ1dGVzMSAmIChJT19TSEFSRUQgfCBJT19GT1JDRV9BTElBU19BQ0NFU1MpKSB7Ci0JCWRldl9kYmcoJnMtPmRldiwgImJhZCBhdHRyaWJ1dGUgc2V0dGluZyBmb3IgSU8gcmVnaW9uIDFcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKChyZXEtPk51bVBvcnRzMiA+IDApICYmCi0JICAgIChyZXEtPkF0dHJpYnV0ZXMyICYgKElPX1NIQVJFRCB8IElPX0ZPUkNFX0FMSUFTX0FDQ0VTUykpKSB7Ci0JCWRldl9kYmcoJnMtPmRldiwgImJhZCBhdHRyaWJ1dGUgc2V0dGluZyBmb3IgSU8gcmVnaW9uIDJcbiIpOwotCQlnb3RvIG91dDsKLQl9CiAKLQlkZXZfZGJnKCZzLT5kZXYsICJ0cnlpbmcgdG8gYWxsb2NhdGUgcmVzb3VyY2UgMVxuIik7Ci0JcmV0ID0gYWxsb2NfaW9fc3BhY2UocywgcmVxLT5BdHRyaWJ1dGVzMSwgJnJlcS0+QmFzZVBvcnQxLAotCQkJICAgICByZXEtPk51bVBvcnRzMSwgcmVxLT5JT0FkZHJMaW5lcyk7Ci0JaWYgKHJldCkgewotCQlkZXZfZGJnKCZzLT5kZXYsICJhbGxvY2F0aW9uIG9mIHJlc291cmNlIDEgZmFpbGVkXG4iKTsKKwlyZXQgPSBhbGxvY19pb19zcGFjZShzLCAmYy0+aW9bMF0sIHBfZGV2LT5pb19saW5lcyk7CisJaWYgKHJldCkKIAkJZ290byBvdXQ7Ci0JfQogCi0JaWYgKHJlcS0+TnVtUG9ydHMyKSB7Ci0JCWRldl9kYmcoJnMtPmRldiwgInRyeWluZyB0byBhbGxvY2F0ZSByZXNvdXJjZSAyXG4iKTsKLQkJcmV0ID0gYWxsb2NfaW9fc3BhY2UocywgcmVxLT5BdHRyaWJ1dGVzMiwgJnJlcS0+QmFzZVBvcnQyLAotCQkJCSAgICAgcmVxLT5OdW1Qb3J0czIsIHJlcS0+SU9BZGRyTGluZXMpOworCWlmIChjLT5pb1sxXS5lbmQpIHsKKwkJcmV0ID0gYWxsb2NfaW9fc3BhY2UocywgJmMtPmlvWzFdLCBwX2Rldi0+aW9fbGluZXMpOwogCQlpZiAocmV0KSB7Ci0JCQlkZXZfZGJnKCZzLT5kZXYsICJhbGxvY2F0aW9uIG9mIHJlc291cmNlIDIgZmFpbGVkXG4iKTsKLQkJCXJlbGVhc2VfaW9fc3BhY2UocywgcmVxLT5CYXNlUG9ydDEsIHJlcS0+TnVtUG9ydHMxKTsKKwkJCXJlbGVhc2VfaW9fc3BhY2UocywgJmMtPmlvWzBdKTsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JfQorCX0gZWxzZQorCQljLT5pb1sxXS5zdGFydCA9IDA7CiAKLQljLT5pbyA9ICpyZXE7CiAJYy0+c3RhdGUgfD0gQ09ORklHX0lPX1JFUTsKIAlwX2Rldi0+X2lvID0gMTsKLQlkZXZfZGJnKCZzLT5kZXYsICJhbGxvY2F0aW5nIHJlc291cmNlcyBzdWNjZWVkZWQ6ICVkXG4iLCByZXQpOwogCisJZGV2X2RiZygmcy0+ZGV2LCAicGNtY2lhX3JlcXVlc3RfaW8gc3VjY2VlZGVkOiAlcFIgLCAlcFIiLAorCQkmYy0+aW9bMF0sICZjLT5pb1sxXSk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCkBAIC02NTEsNyArNjc3LDcgQEAKICNpZmRlZiBDT05GSUdfUENNQ0lBX1BST0JFCiAKIC8qIG1hc2sgb2YgSVJRcyBhbHJlYWR5IHJlc2VydmVkIGJ5IG90aGVyIGNhcmRzLCB3ZSBzaG91bGQgYXZvaWQgdXNpbmcgdGhlbSAqLwotc3RhdGljIHU4IHBjbWNpYV91c2VkX2lycVtOUl9JUlFTXTsKK3N0YXRpYyB1OCBwY21jaWFfdXNlZF9pcnFbMzJdOwogCiBzdGF0aWMgaXJxcmV0dXJuX3QgdGVzdF9hY3Rpb24oaW50IGNwbCwgdm9pZCAqZGV2X2lkKQogewpAQCAtNjc0LDYgKzcwMCw5IEBACiAJZm9yICh0cnkgPSAwOyB0cnkgPCA2NDsgdHJ5KyspIHsKIAkJaXJxID0gdHJ5ICUgMzI7CiAKKwkJaWYgKGlycSA+IE5SX0lSUVMpCisJCQljb250aW51ZTsKKwogCQkvKiBtYXJrZWQgYXMgYXZhaWxhYmxlIGJ5IGRyaXZlciwgbm90IGJsb2NrZWQgYnkgdXNlcnNwYWNlPyAqLwogCQlpZiAoISgobWFzayA+PiBpcnEpICYgMSkpCiAJCQljb250aW51ZTsKQEAgLTc2NywyMyArNzk2LDE4IEBACiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSBwX2Rldi0+c29ja2V0OwogCXBjY2FyZF9tZW1fbWFwICp3aW47CiAJdV9sb25nIGFsaWduOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWludCB3OwogCiAJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiTm8gY2FyZCBwcmVzZW50XG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCWlmIChyZXEtPkF0dHJpYnV0ZXMgJiAoV0lOX1BBR0VEIHwgV0lOX1NIQVJFRCkpIHsKLQkJZGV2X2RiZygmcy0+ZGV2LCAiYmFkIGF0dHJpYnV0ZSBzZXR0aW5nIGZvciBpb21lbSByZWdpb25cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKIAkvKiBXaW5kb3cgc2l6ZSBkZWZhdWx0cyB0byBzbWFsbGVzdCBhdmFpbGFibGUgKi8KIAlpZiAocmVxLT5TaXplID09IDApCiAJCXJlcS0+U2l6ZSA9IHMtPm1hcF9zaXplOwotCWFsaWduID0gKCgocy0+ZmVhdHVyZXMgJiBTU19DQVBfTUVNX0FMSUdOKSB8fAotCQkgIChyZXEtPkF0dHJpYnV0ZXMgJiBXSU5fU1RSSUNUX0FMSUdOKSkgPwotCQkgcmVxLT5TaXplIDogcy0+bWFwX3NpemUpOworCWFsaWduID0gKHMtPmZlYXR1cmVzICYgU1NfQ0FQX01FTV9BTElHTikgPyByZXEtPlNpemUgOiBzLT5tYXBfc2l6ZTsKIAlpZiAocmVxLT5TaXplICYgKHMtPm1hcF9zaXplLTEpKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgImludmFsaWQgbWFwIHNpemVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTc5NywyMCArODIxLDIxIEBACiAJCWFsaWduID0gMDsKIAogCS8qIEFsbG9jYXRlIHN5c3RlbSBtZW1vcnkgd2luZG93ICovCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlmb3IgKHcgPSAwOyB3IDwgTUFYX1dJTjsgdysrKQogCQlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9XSU5fUkVRKHcpKSkKIAkJCWJyZWFrOwogCWlmICh3ID09IE1BWF9XSU4pIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiYWxsIHdpbmRvd3MgYXJlIHVzZWQgYWxyZWFkeVxuIik7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAl3aW4gPSAmcy0+d2luW3ddOwogCiAJaWYgKCEocy0+ZmVhdHVyZXMgJiBTU19DQVBfU1RBVElDX01BUCkpIHsKIAkJd2luLT5yZXMgPSBwY21jaWFfZmluZF9tZW1fcmVnaW9uKHJlcS0+QmFzZSwgcmVxLT5TaXplLCBhbGlnbiwKLQkJCQkJCSAgICAgIChyZXEtPkF0dHJpYnV0ZXMgJiBXSU5fTUFQX0JFTE9XXzFNQiksIHMpOworCQkJCQkJMCwgcyk7CiAJCWlmICghd2luLT5yZXMpIHsKIAkJCWRldl9kYmcoJnMtPmRldiwgImFsbG9jYXRpbmcgbWVtIHJlZ2lvbiBmYWlsZWRcbiIpOwogCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwpAQCAtODIxLDE2ICs4NDYsOCBAQAogCiAJLyogQ29uZmlndXJlIHRoZSBzb2NrZXQgY29udHJvbGxlciAqLwogCXdpbi0+bWFwID0gdysxOwotCXdpbi0+ZmxhZ3MgPSAwOworCXdpbi0+ZmxhZ3MgPSByZXEtPkF0dHJpYnV0ZXM7CiAJd2luLT5zcGVlZCA9IHJlcS0+QWNjZXNzU3BlZWQ7Ci0JaWYgKHJlcS0+QXR0cmlidXRlcyAmIFdJTl9NRU1PUllfVFlQRSkKLQkJd2luLT5mbGFncyB8PSBNQVBfQVRUUklCOwotCWlmIChyZXEtPkF0dHJpYnV0ZXMgJiBXSU5fRU5BQkxFKQotCQl3aW4tPmZsYWdzIHw9IE1BUF9BQ1RJVkU7Ci0JaWYgKHJlcS0+QXR0cmlidXRlcyAmIFdJTl9EQVRBX1dJRFRIXzE2KQotCQl3aW4tPmZsYWdzIHw9IE1BUF8xNkJJVDsKLQlpZiAocmVxLT5BdHRyaWJ1dGVzICYgV0lOX1VTRV9XQUlUKQotCQl3aW4tPmZsYWdzIHw9IE1BUF9VU0VfV0FJVDsKIAl3aW4tPmNhcmRfc3RhcnQgPSAwOwogCiAJaWYgKHMtPm9wcy0+c2V0X21lbV9tYXAocywgd2luKSAhPSAwKSB7CkBAIC04NDYsOCArODYzLDIxIEBACiAJZWxzZQogCQlyZXEtPkJhc2UgPSB3aW4tPnJlcy0+c3RhcnQ7CiAKKwkvKiBjb252ZXJ0IHRvIG5ldy1zdHlsZSByZXNvdXJjZXMgKi8KKwlyZXMgPSBwX2Rldi0+cmVzb3VyY2VbdyArIE1BWF9JT19XSU5dOworCXJlcy0+c3RhcnQgPSByZXEtPkJhc2U7CisJcmVzLT5lbmQgPSByZXEtPkJhc2UgKyByZXEtPlNpemUgLSAxOworCXJlcy0+ZmxhZ3MgJj0gfklPUkVTT1VSQ0VfQklUUzsKKwlyZXMtPmZsYWdzIHw9IChyZXEtPkF0dHJpYnV0ZXMgJiBXSU5fRkxBR1NfTUFQKSB8ICh3aW4tPm1hcCA8PCAyKTsKKwlyZXMtPmZsYWdzIHw9IElPUkVTT1VSQ0VfTUVNOworCXJlcy0+cGFyZW50ID0gd2luLT5yZXM7CisJaWYgKHdpbi0+cmVzKQorCQlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgcmVzKTsKKworCWRldl9kYmcoJnMtPmRldiwgInJlcXVlc3Rfd2luZG93IHJlc3VsdHMgaW4gJXBSXG4iLCByZXMpOworCiAJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwotCSp3aCA9IHcgKyAxOworCSp3aCA9IHJlczsKIAogCXJldHVybiAwOwogfSAvKiBwY21jaWFfcmVxdWVzdF93aW5kb3cgKi8KQEAgLTg1NSwxMSArODg1LDE4IEBACiAKIHZvaWQgcGNtY2lhX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKIHsKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1dJTjsgaSsrKSB7CisJCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcF9kZXYtPnJlc291cmNlW01BWF9JT19XSU4gKyBpXTsKKwkJaWYgKHJlcy0+ZmxhZ3MgJiBXSU5fRkxBR1NfUkVRKQorCQkJcGNtY2lhX3JlbGVhc2Vfd2luZG93KHBfZGV2LCByZXMpOworCX0KKwogCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24ocF9kZXYpOwotCXBjbWNpYV9yZWxlYXNlX2lvKHBfZGV2LCAmcF9kZXYtPmlvKTsKLQlpZiAocF9kZXYtPl9pcnEpCisJcGNtY2lhX3JlbGVhc2VfaW8ocF9kZXYpOworCWlmIChwX2Rldi0+X2lycSkgewogCQlmcmVlX2lycShwX2Rldi0+aXJxLCBwX2Rldi0+cHJpdik7Ci0JaWYgKHBfZGV2LT53aW4pCi0JCXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhwX2RldiwgcF9kZXYtPndpbik7CisJCXBfZGV2LT5faXJxID0gMDsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9kaXNhYmxlX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9wZDY3MjkuYyBiL2RyaXZlcnMvcGNtY2lhL3BkNjcyOS5jCmluZGV4IGI2MWExMzYuLmI4YTg2OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3BkNjcyOS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3BkNjcyOS5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYwppbmRleCBkZjQ1MzJlLi5hZTA3YjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmMKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KIApAQCAtMTc4LDcgKzE3Nyw2IEBACiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyB2YWwsCiAJCQkgICAgICAgc3RydWN0IGNwdWZyZXFfZnJlcXMgKmZyZXFzKQogewotI3dhcm5pbmcgIml0J3Mgbm90IGNsZWFyIGlmIHRoaXMgaXMgcmlnaHQgc2luY2UgdGhlIGNvcmUgQ1BVIChOKSBjbG9jayBoYXMgbm8gZWZmZWN0IG9uIHRoZSBtZW1vcnkgKEwpIGNsb2NrIgogCXN3aXRjaCAodmFsKSB7CiAJY2FzZSBDUFVGUkVRX1BSRUNIQU5HRToKIAkJaWYgKGZyZXFzLT5uZXcgPiBmcmVxcy0+b2xkKSB7CkBAIC0xODYsNyArMTg0LDcgQEAKIAkJCSAgICAgICAicHJlLXVwZGF0aW5nXG4iLAogCQkJICAgICAgIGZyZXFzLT5uZXcgLyAxMDAwLCAoZnJlcXMtPm5ldyAvIDEwMCkgJSAxMCwKIAkJCSAgICAgICBmcmVxcy0+b2xkIC8gMTAwMCwgKGZyZXFzLT5vbGQgLyAxMDApICUgMTApOwotCQkJcHhhMnh4X3BjbWNpYV9zZXRfbWN4eChza3QsIGZyZXFzLT5uZXcpOworCQkJcHhhMnh4X3BjbWNpYV9zZXRfdGltaW5nKHNrdCk7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTE5Niw3ICsxOTQsNyBAQAogCQkJICAgICAgICJwb3N0LXVwZGF0aW5nXG4iLAogCQkJICAgICAgIGZyZXFzLT5uZXcgLyAxMDAwLCAoZnJlcXMtPm5ldyAvIDEwMCkgJSAxMCwKIAkJCSAgICAgICBmcmVxcy0+b2xkIC8gMTAwMCwgKGZyZXFzLT5vbGQgLyAxMDApICUgMTApOwotCQkJcHhhMnh4X3BjbWNpYV9zZXRfbWN4eChza3QsIGZyZXFzLT5uZXcpOworCQkJcHhhMnh4X3BjbWNpYV9zZXRfdGltaW5nKHNrdCk7CiAJCX0KIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcnNyY19pb2R5bi5jIGIvZHJpdmVycy9wY21jaWEvcnNyY19pb2R5bi5jCmluZGV4IGQwYmYzNTAuLjg1MTBjMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3JzcmNfaW9keW4uYworKysgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX2lvZHluLmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KQEAgLTg4LDcgKzg3LDcgQEAKIAogc3RhdGljIGludCBpb2R5bl9maW5kX2lvKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgYXR0ciwKIAkJCXVuc2lnbmVkIGludCAqYmFzZSwgdW5zaWduZWQgaW50IG51bSwKLQkJCXVuc2lnbmVkIGludCBhbGlnbikKKwkJCXVuc2lnbmVkIGludCBhbGlnbiwgc3RydWN0IHJlc291cmNlICoqcGFyZW50KQogewogCWludCBpLCByZXQgPSAwOwogCkBAIC0xMjksNiArMTI4LDcgQEAKIAkJCQkoKHJlcy0+ZmxhZ3MgJiB+SU9SRVNPVVJDRV9CSVRTKSB8CiAJCQkJCShhdHRyICYgSU9SRVNPVVJDRV9CSVRTKSk7CiAJCQlzLT5pb1tpXS5JblVzZSA9IG51bTsKKwkJCSpwYXJlbnQgPSByZXM7CiAJCQlyZXR1cm4gMDsKIAkJfQogCkBAIC0xNDAsNiArMTQwLDcgQEAKIAkJCQljb250aW51ZTsKIAkJCSpiYXNlID0gdHJ5OwogCQkJcy0+aW9baV0uSW5Vc2UgKz0gbnVtOworCQkJKnBhcmVudCA9IHJlczsKIAkJCXJldHVybiAwOwogCQl9CiAKQEAgLTE1Miw2ICsxNTMsNyBAQAogCQkJCWNvbnRpbnVlOwogCQkJKmJhc2UgPSB0cnk7CiAJCQlzLT5pb1tpXS5JblVzZSArPSBudW07CisJCQkqcGFyZW50ID0gcmVzOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CkBAIC0xNjQsOCArMTY2LDYgQEAKIAkudmFsaWRhdGVfbWVtID0gTlVMTCwKIAkuZmluZF9pbyA9IGlvZHluX2ZpbmRfaW8sCiAJLmZpbmRfbWVtID0gTlVMTCwKLQkuYWRkX2lvID0gTlVMTCwKLQkuYWRkX21lbSA9IE5VTEwsCiAJLmluaXQgPSBzdGF0aWNfaW5pdCwKIAkuZXhpdCA9IE5VTEwsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbWdyLmMKaW5kZXggMTQyZWZhYy4uNGU4MDQyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYworKysgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX21nci5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CkBAIC00OCwxMSArNDcsMTIgQEAKIAogc3RhdGljIGludCBzdGF0aWNfZmluZF9pbyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGF0dHIsCiAJCQl1bnNpZ25lZCBpbnQgKmJhc2UsIHVuc2lnbmVkIGludCBudW0sCi0JCQl1bnNpZ25lZCBpbnQgYWxpZ24pCisJCQl1bnNpZ25lZCBpbnQgYWxpZ24sIHN0cnVjdCByZXNvdXJjZSAqKnBhcmVudCkKIHsKIAlpZiAoIXMtPmlvX29mZnNldCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJKmJhc2UgPSBzLT5pb19vZmZzZXQgfCAoKmJhc2UgJiAweDBmZmYpOworCSpwYXJlbnQgPSBOVUxMOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02Miw4ICs2Miw2IEBACiAJLnZhbGlkYXRlX21lbSA9IE5VTEwsCiAJLmZpbmRfaW8gPSBzdGF0aWNfZmluZF9pbywKIAkuZmluZF9tZW0gPSBOVUxMLAotCS5hZGRfaW8gPSBOVUxMLAotCS5hZGRfbWVtID0gTlVMTCwKIAkuaW5pdCA9IHN0YXRpY19pbml0LAogCS5leGl0ID0gTlVMTCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jIGIvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYwppbmRleCBkY2QxYTRhLi45NmYzNDhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KQEAgLTY0LDYgKzYzLDkgQEAKICNkZWZpbmUgTUVNX1BST0JFX0xPVwkoMSA8PCAwKQogI2RlZmluZSBNRU1fUFJPQkVfSElHSAkoMSA8PCAxKQogCisvKiBBY3Rpb24gZmllbGQgKi8KKyNkZWZpbmUgUkVNT1ZFX01BTkFHRURfUkVTT1VSQ0UJCTEKKyNkZWZpbmUgQUREX01BTkFHRURfUkVTT1VSQ0UJCTIKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTcxNiw3ICs3MTgsNyBAQAogCiBzdGF0aWMgaW50IG5vbnN0YXRpY19maW5kX2lvKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgYXR0ciwKIAkJCXVuc2lnbmVkIGludCAqYmFzZSwgdW5zaWduZWQgaW50IG51bSwKLQkJCXVuc2lnbmVkIGludCBhbGlnbikKKwkJCXVuc2lnbmVkIGludCBhbGlnbiwgc3RydWN0IHJlc291cmNlICoqcGFyZW50KQogewogCWludCBpLCByZXQgPSAwOwogCkBAIC03NTgsNiArNzYwLDcgQEAKIAkJCQkoKHJlcy0+ZmxhZ3MgJiB+SU9SRVNPVVJDRV9CSVRTKSB8CiAJCQkJCShhdHRyICYgSU9SRVNPVVJDRV9CSVRTKSk7CiAJCQlzLT5pb1tpXS5JblVzZSA9IG51bTsKKwkJCSpwYXJlbnQgPSByZXM7CiAJCQlyZXR1cm4gMDsKIAkJfQogCkBAIC03NzMsNiArNzc2LDcgQEAKIAkJCQkJY29udGludWU7CiAJCQkJKmJhc2UgPSB0cnk7CiAJCQkJcy0+aW9baV0uSW5Vc2UgKz0gbnVtOworCQkJCSpwYXJlbnQgPSByZXM7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCX0KQEAgLTc5MSw2ICs3OTUsNyBAQAogCQkJCQljb250aW51ZTsKIAkJCQkqYmFzZSA9IHRyeTsKIAkJCQlzLT5pb1tpXS5JblVzZSArPSBudW07CisJCQkJKnBhcmVudCA9IHJlczsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJfQpAQCAtMTA1NSw4ICsxMDYwLDYgQEAKIAkudmFsaWRhdGVfbWVtID0gcGNtY2lhX25vbnN0YXRpY192YWxpZGF0ZV9tZW0sCiAJLmZpbmRfaW8gPSBub25zdGF0aWNfZmluZF9pbywKIAkuZmluZF9tZW0gPSBub25zdGF0aWNfZmluZF9tZW1fcmVnaW9uLAotCS5hZGRfaW8gPSBhZGp1c3RfaW8sCi0JLmFkZF9tZW0gPSBhZGp1c3RfbWVtb3J5LAogCS5pbml0ID0gbm9uc3RhdGljX2luaXQsCiAJLmV4aXQgPSBub25zdGF0aWNfcmVsZWFzZV9yZXNvdXJjZV9kYiwKIH07CkBAIC0xMTE1LDggKzExMTgsNiBAQAogCiAJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlyZXQgPSBhZGp1c3RfaW8ocywgYWRkLCBzdGFydF9hZGRyLCBlbmRfYWRkcik7Ci0JaWYgKCFyZXQpCi0JCXMtPnJlc291cmNlX3NldHVwX25ldyA9IDE7CiAJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJcmV0dXJuIHJldCA/IHJldCA6IGNvdW50OwpAQCAtMTE4Myw4ICsxMTg0LDYgQEAKIAogCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJcmV0ID0gYWRqdXN0X21lbW9yeShzLCBhZGQsIHN0YXJ0X2FkZHIsIGVuZF9hZGRyKTsKLQlpZiAoIXJldCkKLQkJcy0+cmVzb3VyY2Vfc2V0dXBfbmV3ID0gMTsKIAltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAlyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX2dlbmVyaWMuYwppbmRleCBlZGJkOGM0Li5lMDk4NTE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9nZW5lcmljLmMKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc2ExMXh4X2Jhc2UuYyBiL2RyaXZlcnMvcGNtY2lhL3NhMTF4eF9iYXNlLmMKaW5kZXggZmEyOGQ4OS4uMGM2MmZlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc2ExMXh4X2Jhc2UuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zYTExeHhfYmFzZS5jCkBAIC0yMzEsNyArMjMxLDcgQEAKIAogCXNpbmZvLT5uc2t0ID0gbnI7CiAKLQkvKiBJbml0aWxpYXplIHByb2Nlc3NvciBzcGVjaWZpYyBwYXJhbWV0ZXJzICovCisJLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3Igc3BlY2lmaWMgcGFyYW1ldGVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CiAJCXNrdCA9ICZzaW5mby0+c2t0W2ldOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmggYi9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmgKaW5kZXggZTQwODI0Yy4uM2ZiYTNhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uaApAQCAtMTEsNyArMTEsNiBAQAogCiAvKiBpbmNsdWRlIHRoZSB3b3JsZCAqLwogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYyBiL2RyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jCmluZGV4IDgwZTM2YmMuLmNiMGQzYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3RjaWMuYyBiL2RyaXZlcnMvcGNtY2lhL3RjaWMuYwppbmRleCA1NjAwNGExLi5iZTBkODQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS90Y2ljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvdGNpYy5jCkBAIC00OSw3ICs0OSw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CiAjaW5jbHVkZSAidGNpYy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEveHhzMTUwMF9zcy5jIGIvZHJpdmVycy9wY21jaWEveHhzMTUwMF9zcy5jCmluZGV4IDIwMWNjZmEuLmZhODhjMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3h4czE1MDBfc3MuYworKysgYi9kcml2ZXJzL3BjbWNpYS94eHMxNTAwX3NzLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jIGIvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKaW5kZXggZjFkNDEzNy4uNDE0ZDlhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKKysrIGIvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZwppbmRleCAzZTFiOGEyLi43OWJhYTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKQEAgLTUsNiArNSw3IEBACiBtZW51Y29uZmlnIFg4Nl9QTEFURk9STV9ERVZJQ0VTCiAJYm9vbCAiWDg2IFBsYXRmb3JtIFNwZWNpZmljIERldmljZSBEcml2ZXJzIgogCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gWDg2CiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSB0byBnZXQgdG8gc2VlIG9wdGlvbnMgZm9yIGRldmljZSBkcml2ZXJzIGZvciB2YXJpb3VzCiAJICB4ODYgcGxhdGZvcm1zLCBpbmNsdWRpbmcgdmVuZG9yLXNwZWNpZmljIGxhcHRvcCBleHRlbnNpb24gZHJpdmVycy4KQEAgLTE1MSw2ICsxNTIsNyBAQAogCWRlcGVuZHMgb24gQUNQSQogCWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRQogCWRlcGVuZHMgb24gUkZLSUxMCisJZGVwZW5kcyBvbiBTRVJJT19JODA0MgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIGxhcHRvcHMgYnVpbHQgYnkgTVNJIChNSUNSTy1TVEFSCiAJICBJTlRFUk5BVElPTkFMKToKQEAgLTE4MSw2ICsxODMsOCBAQAogCWRlcGVuZHMgb24gQUNQSQogCWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRQogCWRlcGVuZHMgb24gUkZLSUxMCisJZGVwZW5kcyBvbiBIV01PTgorCWRlcGVuZHMgb24gUE9XRVJfU1VQUExZCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgbGFwdG9wcyBidWlsdCBieSBDb21wYWw6CiAKQEAgLTUyMCw2ICs1MjQsNyBAQAogY29uZmlnIEFDUElfQ01QQwogCXRyaXN0YXRlICJDTVBDIExhcHRvcCBFeHRyYXMiCiAJZGVwZW5kcyBvbiBYODYgJiYgQUNQSQorCWRlcGVuZHMgb24gUkZLSUxMIHx8IFJGS0lMTD1uCiAJc2VsZWN0IElOUFVUCiAJc2VsZWN0IEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKIAlkZWZhdWx0IG4KQEAgLTUzNyw0ICs1NDIsNDMgQEAKIAkgIHNvbWUgZW1iZWRkZWQgSW50ZWwgeDg2IHBsYXRmb3Jtcy4gVGhpcyBpcyBub3QgbmVlZGVkIGZvciBQQy10eXBlCiAJICBtYWNoaW5lcy4KIAorY29uZmlnIEdQSU9fSU5URUxfUE1JQworCWJvb2wgIkludGVsIFBNSUMgR1BJTyBzdXBwb3J0IgorCWRlcGVuZHMgb24gSU5URUxfU0NVX0lQQyAmJiBHUElPTElCCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IEdQSU8gdmlhIHRoZSBTQ1UgSVBDIGludGVyZmFjZQorCSAgb24gSW50ZWwgTUlEIHBsYXRmb3Jtcy4KKworY29uZmlnIFJBUl9SRUdJU1RFUgorCWJvb2wgIlJlc3RyaWN0ZWQgQWNjZXNzIFJlZ2lvbiBSZWdpc3RlciBEcml2ZXIiCisJZGVwZW5kcyBvbiBQQ0kgJiYgWDg2X01SU1QKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBhbGxvd3Mgb3RoZXIga2VybmVsIGRyaXZlcnMgYWNjZXNzIHRvIHRoZQorCSAgY29udGVudHMgb2YgdGhlIHJlc3RyaWN0ZWQgYWNjZXNzIHJlZ2lvbiBjb250cm9sIHJlZ2lzdGVycy4KKworCSAgVGhlIHJlc3RyaWN0ZWQgYWNjZXNzIHJlZ2lvbiBjb250cm9sIHJlZ2lzdGVycworCSAgKHJhcl9yZWdpc3RlcnMpIGFyZSB1c2VkIHRvIHBhc3MgYWRkcmVzcyBhbmQKKwkgIGxvY2tpbmcgaW5mb3JtYXRpb24gb24gcmVzdHJpY3RlZCBhY2Nlc3MgcmVnaW9ucworCSAgdG8gb3RoZXIgZHJpdmVycyB0aGF0IHVzZSByZXN0cmljdGVkIGFjY2VzcyByZWdpb25zLgorCisJICBUaGUgcmVzdHJpY3RlZCBhY2Nlc3MgcmVnaW9ucyBhcmUgcmVnaW9ucyBvZiBtZW1vcnkKKwkgIG9uIHRoZSBJbnRlbCBNSUQgUGxhdGZvcm0gdGhhdCBhcmUgbm90IGFjY2Vzc2libGUgdG8KKwkgIHRoZSB4ODYgcHJvY2Vzc29yLCBidXQgYXJlIGFjY2Vzc2libGUgdG8gZGVkaWNhdGVkCisJICBwcm9jZXNzb3JzIG9uIGJvYXJkIHBlcmlwaGVyYWwgZGV2aWNlcy4KKworCSAgVGhlIHB1cnBvc2Ugb2YgdGhlIHJlc3RyaWN0ZWQgYWNjZXNzIHJlZ2lvbnMgaXMgdG8KKwkgIHByb3RlY3Qgc2Vuc2l0aXZlIGRhdGEgZnJvbSBjb21wcm9taXNlIGJ5IHVuYXV0aG9yaXplZAorCSAgcHJvZ3JhbXMgcnVubmluZyBvbiB0aGUgeDg2IHByb2Nlc3Nvci4KKworY29uZmlnIElOVEVMX0lQUworCXRyaXN0YXRlICJJbnRlbCBJbnRlbGxpZ2VudCBQb3dlciBTaGFyaW5nIgorCWRlcGVuZHMgb24gQUNQSQorCS0tLWhlbHAtLS0KKwkgIEludGVsIENhbHBlbGxhIHBsYXRmb3JtcyBzdXBwb3J0IGR5bmFtaWMgcG93ZXIgc2hhcmluZyBiZXR3ZWVuIHRoZQorCSAgQ1BVIGFuZCBHUFUsIG1heGltaXppbmcgcGVyZm9ybWFuY2UgaW4gYSBnaXZlbiBURFAuICBUaGlzIGRyaXZlciwKKwkgIGFsb25nIHdpdGggdGhlIENQVSBmcmVxdWVuY3kgYW5kIGk5MTUgZHJpdmVycywgcHJvdmlkZXMgdGhhdAorCSAgZnVuY3Rpb25hbGl0eS4gIElmIGluIGRvdWJ0LCBzYXkgWSBoZXJlOyBpdCB3aWxsIG9ubHkgbG9hZCBvbgorCSAgc3VwcG9ydGVkIHBsYXRmb3Jtcy4KKwogZW5kaWYgIyBYODZfUExBVEZPUk1fREVWSUNFUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvTWFrZWZpbGUgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9NYWtlZmlsZQppbmRleCA4NzcwYmZlLi40NzQ0Yzc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9NYWtlZmlsZQpAQCAtMjYsMyArMjYsNyBAQAogb2JqLSQoQ09ORklHX0FDUElfVE9TSElCQSkJKz0gdG9zaGliYV9hY3BpLm8KIG9iai0kKENPTkZJR19UT1NISUJBX0JUX1JGS0lMTCkJKz0gdG9zaGliYV9ibHVldG9vdGgubwogb2JqLSQoQ09ORklHX0lOVEVMX1NDVV9JUEMpCSs9IGludGVsX3NjdV9pcGMubworb2JqLSQoQ09ORklHX1JBUl9SRUdJU1RFUikJKz0gaW50ZWxfcmFyX3JlZ2lzdGVyLm8KK29iai0kKENPTkZJR19JTlRFTF9JUFMpCQkrPSBpbnRlbF9pcHMubworb2JqLSQoQ09ORklHX0dQSU9fSU5URUxfUE1JQykJKz0gaW50ZWxfcG1pY19ncGlvLm8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlci13bWkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMKaW5kZXggMWVhNmM0My4uMmJhZGVlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlci13bWkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jCkBAIC01MCwxNyArNTAsNiBAQAogI2RlZmluZSBBQ0VSX0lORk8gS0VSTl9JTkZPIEFDRVJfTE9HUFJFRklYCiAKIC8qCi0gKiBUaGUgZm9sbG93aW5nIGRlZmluZXMgcXVpcmtzIHRvIGdldCBzb21lIHNwZWNpZmljIGZ1bmN0aW9ucyB0byB3b3JrCi0gKiB3aGljaCBhcmUga25vd24gdG8gbm90IGJlIHN1cHBvcnRlZCBvdmVyIEFDUEktV01JIChzdWNoIGFzIHRoZSBtYWlsIExFRAotICogb24gV01JRCBiYXNlZCBBY2VyJ3MpCi0gKi8KLXN0cnVjdCBhY2VyX3F1aXJrcyB7Ci0JY29uc3QgY2hhciAqdmVuZG9yOwotCWNvbnN0IGNoYXIgKm1vZGVsOwotCXUxNiBxdWlya3M7Ci19OwotCi0vKgogICogTWFnaWMgTnVtYmVyCiAgKiBNZWFuaW5nIGlzIHVua25vd24gLSB0aGlzIG51bWJlciBpcyByZXF1aXJlZCBmb3Igd3JpdGluZyB0byBBQ1BJIGZvciBBTVcwCiAgKiAoaXQncyBhbHNvIHVzZWQgaW4gYWNlcmhrIHdoZW4gZGlyZWN0bHkgYWNjZXNzaW5nIHRoZSBCSU9TKQpAQCAtMjAwLDcgKzE4OSw3IEBACiBzdGF0aWMgaW50IGRtaV9tYXRjaGVkKGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICpkbWkpCiB7CiAJcXVpcmtzID0gZG1pLT5kcml2ZXJfZGF0YTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0KIAogc3RhdGljIHN0cnVjdCBxdWlya19lbnRyeSBxdWlya191bmtub3duID0gewpAQCAtNTU1LDYgKzU0NCw3IEBACiAJb2JqLT5idWZmZXIubGVuZ3RoID09IHNpemVvZihzdHJ1Y3Qgd21hYl9yZXQpKSB7CiAJCXJldCA9ICooKHN0cnVjdCB3bWFiX3JldCAqKSBvYmotPmJ1ZmZlci5wb2ludGVyKTsKIAl9IGVsc2UgeworCQlrZnJlZShvdXQucG9pbnRlcik7CiAJCXJldHVybiBBRV9FUlJPUjsKIAl9CiAKQEAgLTU3MCw3ICs1NjAsNyBAQAogewogCXN0cnVjdCB3bWFiX2FyZ3MgYXJnczsKIAlzdHJ1Y3Qgd21hYl9yZXQgcmV0OwotCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOworCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgb3V0ID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OwogCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CiAKQEAgLTU5MywxMiArNTgzLDEzIEBACiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQlyZXR1cm4gc3RhdHVzOwogCi0Jb2JqID0gKHVuaW9uIGFjcGlfb2JqZWN0ICopIG91dC5wb2ludGVyOworCW9iaiA9IG91dC5wb2ludGVyOwogCWlmIChvYmogJiYgb2JqLT50eXBlID09IEFDUElfVFlQRV9CVUZGRVIgJiYKIAlvYmotPmJ1ZmZlci5sZW5ndGggPT0gc2l6ZW9mKHN0cnVjdCB3bWFiX3JldCkpIHsKIAkJcmV0ID0gKigoc3RydWN0IHdtYWJfcmV0ICopIG9iai0+YnVmZmVyLnBvaW50ZXIpOwogCX0gZWxzZSB7Ci0JCXJldHVybiBBRV9FUlJPUjsKKwkJc3RhdHVzID0gQUVfRVJST1I7CisJCWdvdG8gb3V0OwogCX0KIAogCWlmIChyZXQuZWF4ICYgMHgxKQpAQCAtNjA3LDIzICs1OTgsMjYgQEAKIAlhcmdzLmVieCA9IDIgPDwgODsKIAlhcmdzLmVieCB8PSBBQ0VSX0FNVzBfQkxVRVRPT1RIX01BU0s7CiAKKwkvKgorCSAqIEl0J3Mgb2sgdG8gdXNlIGV4aXN0aW5nIGJ1ZmZlciBmb3IgbmV4dCB3bWFiX2V4ZWN1dGUgY2FsbC4KKwkgKiBCdXQgd2UgbmVlZCB0byBrZnJlZShvdXQucG9pbnRlcikgaWYgbmV4dCB3bWFiX2V4ZWN1dGUgZmFpbC4KKwkgKi8KIAlzdGF0dXMgPSB3bWFiX2V4ZWN1dGUoJmFyZ3MsICZvdXQpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJcmV0dXJuIHN0YXR1czsKKwkJZ290byBvdXQ7CiAKIAlvYmogPSAodW5pb24gYWNwaV9vYmplY3QgKikgb3V0LnBvaW50ZXI7CiAJaWYgKG9iaiAmJiBvYmotPnR5cGUgPT0gQUNQSV9UWVBFX0JVRkZFUgogCSYmIG9iai0+YnVmZmVyLmxlbmd0aCA9PSBzaXplb2Yoc3RydWN0IHdtYWJfcmV0KSkgewogCQlyZXQgPSAqKChzdHJ1Y3Qgd21hYl9yZXQgKikgb2JqLT5idWZmZXIucG9pbnRlcik7CiAJfSBlbHNlIHsKLQkJcmV0dXJuIEFFX0VSUk9SOworCQlzdGF0dXMgPSBBRV9FUlJPUjsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKHJldC5lYXggJiAweDEpCiAJCWludGVyZmFjZS0+Y2FwYWJpbGl0eSB8PSBBQ0VSX0NBUF9CTFVFVE9PVEg7CiAKLQlrZnJlZShvdXQucG9pbnRlcik7Ci0KIAkvKgogCSAqIFRoaXMgYXBwZWFycyB0byBiZSBzYWZlIHRvIGVuYWJsZSwgc2luY2UgYWxsIFdpc3Ryb24gYmFzZWQgbGFwdG9wcwogCSAqIGFwcGVhciB0byB1c2UgdGhlIHNhbWUgRUMgcmVnaXN0ZXIgZm9yIGJyaWdodG5lc3MsIGV2ZW4gaWYgdGhleQpAQCAtNjMyLDcgKzYyNiwxMCBAQAogCWlmIChxdWlya3MtPmJyaWdodG5lc3MgPj0gMCkKIAkJaW50ZXJmYWNlLT5jYXBhYmlsaXR5IHw9IEFDRVJfQ0FQX0JSSUdIVE5FU1M7CiAKLQlyZXR1cm4gQUVfT0s7CisJc3RhdHVzID0gQUVfT0s7CitvdXQ6CisJa2ZyZWUob3V0LnBvaW50ZXIpOworCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgd21pX2ludGVyZmFjZSBBTVcwX2ludGVyZmFjZSA9IHsKQEAgLTc3Miw2ICs3NjksNyBAQAogCQlvYmotPmJ1ZmZlci5sZW5ndGggPT0gc2l6ZW9mKHUzMikpIHsKIAkJZGV2aWNlcyA9ICooKHUzMiAqKSBvYmotPmJ1ZmZlci5wb2ludGVyKTsKIAl9IGVsc2UgeworCQlrZnJlZShvdXQucG9pbnRlcik7CiAJCXJldHVybiBBRV9FUlJPUjsKIAl9CiAKQEAgLTc4OCw2ICs3ODYsNyBAQAogCWlmICghKGRldmljZXMgJiAweDIwKSkKIAkJbWF4X2JyaWdodG5lc3MgPSAweDk7CiAKKwlrZnJlZShvdXQucG9pbnRlcik7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMTA4NCw4ICsxMDgzLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihpbnRlcmZhY2UsIFNfSVdVR08gfCBTX0lSVUdPIHwgU19JV1VTUiwKLQlzaG93X2ludGVyZmFjZSwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoaW50ZXJmYWNlLCBTX0lSVUdPLCBzaG93X2ludGVyZmFjZSwgTlVMTCk7CiAKIC8qCiAgKiBkZWJ1Z2ZzIGZ1bmN0aW9ucwpAQCAtMTA5NSw2ICsxMDkzLDcgQEAKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgb3V0ID0ge0FDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMfTsKIAl1bmlvbiBhY3BpX29iamVjdCAqb2JqOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKKwl1MzIgZGV2aWNlcyA9IDA7CiAKIAlzdGF0dXMgPSB3bWlfcXVlcnlfYmxvY2soV01JRF9HVUlEMiwgMSwgJm91dCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQpAQCAtMTEwMywxMCArMTEwMiwxMSBAQAogCW9iaiA9ICh1bmlvbiBhY3BpX29iamVjdCAqKSBvdXQucG9pbnRlcjsKIAlpZiAob2JqICYmIG9iai0+dHlwZSA9PSBBQ1BJX1RZUEVfQlVGRkVSICYmCiAJCW9iai0+YnVmZmVyLmxlbmd0aCA9PSBzaXplb2YodTMyKSkgewotCQlyZXR1cm4gKigodTMyICopIG9iai0+YnVmZmVyLnBvaW50ZXIpOwotCX0gZWxzZSB7Ci0JCXJldHVybiAwOworCQlkZXZpY2VzID0gKigodTMyICopIG9iai0+YnVmZmVyLnBvaW50ZXIpOwogCX0KKworCWtmcmVlKG91dC5wb2ludGVyKTsKKwlyZXR1cm4gZGV2aWNlczsKIH0KIAogLyoKQEAgLTEzMjcsMjIgKzEzMjcsMzEgQEAKIAkJICAgICAgICJnZW5lcmljIHZpZGVvIGRyaXZlclxuIik7CiAJfQogCi0JaWYgKHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYWNlcl9wbGF0Zm9ybV9kcml2ZXIpKSB7CisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhY2VyX3BsYXRmb3JtX2RyaXZlcik7CisJaWYgKGVycikgewogCQlwcmludGsoQUNFUl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBwbGF0Zm9ybSBkcml2ZXIuXG4iKTsKIAkJZ290byBlcnJvcl9wbGF0Zm9ybV9yZWdpc3RlcjsKIAl9CisKIAlhY2VyX3BsYXRmb3JtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygiYWNlci13bWkiLCAtMSk7Ci0JcGxhdGZvcm1fZGV2aWNlX2FkZChhY2VyX3BsYXRmb3JtX2RldmljZSk7CisJaWYgKCFhY2VyX3BsYXRmb3JtX2RldmljZSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yX2RldmljZV9hbGxvYzsKKwl9CisKKwllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGFjZXJfcGxhdGZvcm1fZGV2aWNlKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yX2RldmljZV9hZGQ7CiAKIAllcnIgPSBjcmVhdGVfc3lzZnMoKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIGVycm9yX2NyZWF0ZV9zeXM7CiAKIAlpZiAod21pX2hhc19ndWlkKFdNSURfR1VJRDIpKSB7CiAJCWludGVyZmFjZS0+ZGVidWcud21pZF9kZXZpY2VzID0gZ2V0X3dtaWRfZGV2aWNlcygpOwogCQllcnIgPSBjcmVhdGVfZGVidWdmcygpOwogCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKKwkJCWdvdG8gZXJyb3JfY3JlYXRlX2RlYnVnZnM7CiAJfQogCiAJLyogT3ZlcnJpZGUgYW55IGluaXRpYWwgc2V0dGluZ3Mgd2l0aCB2YWx1ZXMgZnJvbSB0aGUgY29tbWFuZGxpbmUgKi8KQEAgLTEzNTAsMTUgKzEzNTksMjMgQEAKIAogCXJldHVybiAwOwogCitlcnJvcl9jcmVhdGVfZGVidWdmczoKKwlyZW1vdmVfc3lzZnMoYWNlcl9wbGF0Zm9ybV9kZXZpY2UpOworZXJyb3JfY3JlYXRlX3N5czoKKwlwbGF0Zm9ybV9kZXZpY2VfZGVsKGFjZXJfcGxhdGZvcm1fZGV2aWNlKTsKK2Vycm9yX2RldmljZV9hZGQ6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChhY2VyX3BsYXRmb3JtX2RldmljZSk7CitlcnJvcl9kZXZpY2VfYWxsb2M6CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmFjZXJfcGxhdGZvcm1fZHJpdmVyKTsKIGVycm9yX3BsYXRmb3JtX3JlZ2lzdGVyOgotCXJldHVybiAtRU5PREVWOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhY2VyX3dtaV9leGl0KHZvaWQpCiB7CiAJcmVtb3ZlX3N5c2ZzKGFjZXJfcGxhdGZvcm1fZGV2aWNlKTsKIAlyZW1vdmVfZGVidWdmcygpOwotCXBsYXRmb3JtX2RldmljZV9kZWwoYWNlcl9wbGF0Zm9ybV9kZXZpY2UpOworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGFjZXJfcGxhdGZvcm1fZGV2aWNlKTsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYWNlcl9wbGF0Zm9ybV9kcml2ZXIpOwogCiAJcHJpbnRrKEFDRVJfSU5GTyAiQWNlciBMYXB0b3AgV01JIEV4dHJhcyB1bmxvYWRlZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyaGRmLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyaGRmLmMKaW5kZXggN2IyMzg0ZC4uNjBmOWNmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlcmhkZi5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXJoZGYuYwpAQCAtNTIsNyArNTIsNyBAQAogICovCiAjdW5kZWYgU1RBUlRfSU5fS0VSTkVMX01PREUKIAotI2RlZmluZSBEUlZfVkVSICIwLjUuMjIiCisjZGVmaW5lIERSVl9WRVIgIjAuNS4yNCIKIAogLyoKICAqIEFjY29yZGluZyB0byB0aGUgQXRvbSBOMjcwIGRhdGFzaGVldCwKQEAgLTkyLDkgKzkyLDkgQEAKIHN0YXRpYyBjaGFyIGZvcmNlX2Jpb3NbMTZdOwogc3RhdGljIGNoYXIgZm9yY2VfcHJvZHVjdFsxNl07CiBzdGF0aWMgdW5zaWduZWQgaW50IHByZXZfaW50ZXJ2YWw7Ci1zdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdGh6X2RldjsKLXN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjbF9kZXY7Ci1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphY2VyaGRmX2RldjsKK3N0YXRpYyBzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdGh6X2RldjsKK3N0YXRpYyBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2xfZGV2Oworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmFjZXJoZGZfZGV2OwogCiBtb2R1bGVfcGFyYW0oa2VybmVsbW9kZSwgdWludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGtlcm5lbG1vZGUsICJLZXJuZWwgbW9kZSBmYW4gY29udHJvbCBvbiAvIG9mZiIpOwpAQCAtMTEyLDE0ICsxMTIsMTIgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZm9yY2VfcHJvZHVjdCwgIkZvcmNlIEJJT1MgcHJvZHVjdCBhbmQgb21pdCBCSU9TIGNoZWNrIik7CiAKIC8qCi0gKiBjbWRfb2ZmOiB0byBzd2l0Y2ggdGhlIGZhbiBjb21wbGV0ZWx5IG9mZgotICogY2hrX29mZjogdG8gY2hlY2sgaWYgdGhlIGZhbiBpcyBvZmYKKyAqIGNtZF9vZmY6IHRvIHN3aXRjaCB0aGUgZmFuIGNvbXBsZXRlbHkgb2ZmIGFuZCBjaGVjayBpZiB0aGUgZmFuIGlzIG9mZgogICoJY21kX2F1dG86IHRvIHNldCB0aGUgQklPUyBpbiBjb250cm9sIG9mIHRoZSBmYW4uIFRoZSBCSU9TIHJlZ3VsYXRlcyB0aGVuCiAgKgkJdGhlIGZhbiBzcGVlZCBkZXBlbmRpbmcgb24gdGhlIHRlbXBlcmF0dXJlCiAgKi8KIHN0cnVjdCBmYW5jbWQgewogCXU4IGNtZF9vZmY7Ci0JdTggY2hrX29mZjsKIAl1OCBjbWRfYXV0bzsKIH07CiAKQEAgLTEzNiw0NyArMTM0LDgxIEBACiAvKiBSZWdpc3RlciBhZGRyZXNzZXMgYW5kIHZhbHVlcyBmb3IgZGlmZmVyZW50IEJJT1MgdmVyc2lvbnMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmlvc19zZXR0aW5nc190IGJpb3NfdGJsW10gPSB7CiAJLyogQU9BMTEwICovCi0JeyJBY2VyIiwgIkFPQTExMCIsICJ2MC4zMTA5IiwgMHg1NSwgMHg1OCwgezB4MWYsIDB4MWYsIDB4MDB9IH0sCi0JeyJBY2VyIiwgIkFPQTExMCIsICJ2MC4zMTE0IiwgMHg1NSwgMHg1OCwgezB4MWYsIDB4MWYsIDB4MDB9IH0sCi0JeyJBY2VyIiwgIkFPQTExMCIsICJ2MC4zMzAxIiwgMHg1NSwgMHg1OCwgezB4YWYsIDB4YWYsIDB4MDB9IH0sCi0JeyJBY2VyIiwgIkFPQTExMCIsICJ2MC4zMzA0IiwgMHg1NSwgMHg1OCwgezB4YWYsIDB4YWYsIDB4MDB9IH0sCi0JeyJBY2VyIiwgIkFPQTExMCIsICJ2MC4zMzA1IiwgMHg1NSwgMHg1OCwgezB4YWYsIDB4YWYsIDB4MDB9IH0sCi0JeyJBY2VyIiwgIkFPQTExMCIsICJ2MC4zMzA3IiwgMHg1NSwgMHg1OCwgezB4YWYsIDB4YWYsIDB4MDB9IH0sCi0JeyJBY2VyIiwgIkFPQTExMCIsICJ2MC4zMzA4IiwgMHg1NSwgMHg1OCwgezB4MjEsIDB4MjEsIDB4MDB9IH0sCi0JeyJBY2VyIiwgIkFPQTExMCIsICJ2MC4zMzA5IiwgMHg1NSwgMHg1OCwgezB4MjEsIDB4MjEsIDB4MDB9IH0sCi0JeyJBY2VyIiwgIkFPQTExMCIsICJ2MC4zMzEwIiwgMHg1NSwgMHg1OCwgezB4MjEsIDB4MjEsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFPQTExMCIsICJ2MC4zMTA5IiwgMHg1NSwgMHg1OCwgezB4MWYsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFPQTExMCIsICJ2MC4zMTE0IiwgMHg1NSwgMHg1OCwgezB4MWYsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFPQTExMCIsICJ2MC4zMzAxIiwgMHg1NSwgMHg1OCwgezB4YWYsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFPQTExMCIsICJ2MC4zMzA0IiwgMHg1NSwgMHg1OCwgezB4YWYsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFPQTExMCIsICJ2MC4zMzA1IiwgMHg1NSwgMHg1OCwgezB4YWYsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFPQTExMCIsICJ2MC4zMzA3IiwgMHg1NSwgMHg1OCwgezB4YWYsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFPQTExMCIsICJ2MC4zMzA4IiwgMHg1NSwgMHg1OCwgezB4MjEsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFPQTExMCIsICJ2MC4zMzA5IiwgMHg1NSwgMHg1OCwgezB4MjEsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFPQTExMCIsICJ2MC4zMzEwIiwgMHg1NSwgMHg1OCwgezB4MjEsIDB4MDB9IH0sCiAJLyogQU9BMTUwICovCi0JeyJBY2VyIiwgIkFPQTE1MCIsICJ2MC4zMTE0IiwgMHg1NSwgMHg1OCwgezB4MjAsIDB4MjAsIDB4MDB9IH0sCi0JeyJBY2VyIiwgIkFPQTE1MCIsICJ2MC4zMzAxIiwgMHg1NSwgMHg1OCwgezB4MjAsIDB4MjAsIDB4MDB9IH0sCi0JeyJBY2VyIiwgIkFPQTE1MCIsICJ2MC4zMzA0IiwgMHg1NSwgMHg1OCwgezB4MjAsIDB4MjAsIDB4MDB9IH0sCi0JeyJBY2VyIiwgIkFPQTE1MCIsICJ2MC4zMzA1IiwgMHg1NSwgMHg1OCwgezB4MjAsIDB4MjAsIDB4MDB9IH0sCi0JeyJBY2VyIiwgIkFPQTE1MCIsICJ2MC4zMzA3IiwgMHg1NSwgMHg1OCwgezB4MjAsIDB4MjAsIDB4MDB9IH0sCi0JeyJBY2VyIiwgIkFPQTE1MCIsICJ2MC4zMzA4IiwgMHg1NSwgMHg1OCwgezB4MjAsIDB4MjAsIDB4MDB9IH0sCi0JeyJBY2VyIiwgIkFPQTE1MCIsICJ2MC4zMzA5IiwgMHg1NSwgMHg1OCwgezB4MjAsIDB4MjAsIDB4MDB9IH0sCi0JeyJBY2VyIiwgIkFPQTE1MCIsICJ2MC4zMzEwIiwgMHg1NSwgMHg1OCwgezB4MjAsIDB4MjAsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFPQTE1MCIsICJ2MC4zMTE0IiwgMHg1NSwgMHg1OCwgezB4MWYsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFPQTE1MCIsICJ2MC4zMzAxIiwgMHg1NSwgMHg1OCwgezB4MjAsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFPQTE1MCIsICJ2MC4zMzA0IiwgMHg1NSwgMHg1OCwgezB4MjAsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFPQTE1MCIsICJ2MC4zMzA1IiwgMHg1NSwgMHg1OCwgezB4MjAsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFPQTE1MCIsICJ2MC4zMzA3IiwgMHg1NSwgMHg1OCwgezB4MjAsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFPQTE1MCIsICJ2MC4zMzA4IiwgMHg1NSwgMHg1OCwgezB4MjAsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFPQTE1MCIsICJ2MC4zMzA5IiwgMHg1NSwgMHg1OCwgezB4MjAsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFPQTE1MCIsICJ2MC4zMzEwIiwgMHg1NSwgMHg1OCwgezB4MjAsIDB4MDB9IH0sCiAJLyogQWNlciAxNDEwICovCi0JeyJBY2VyIiwgIkFzcGlyZSAxNDEwIiwgInYwLjMxMjAiLCAweDU1LCAweDU4LCB7MHg5ZSwgMHg5ZSwgMHgwMH0gfSwKLQl7IkFjZXIiLCAiQXNwaXJlIDE0MTAiLCAidjEuMzMwMyIsIDB4NTUsIDB4NTgsIHsweDllLCAweDllLCAweDAwfSB9LAorCXsiQWNlciIsICJBc3BpcmUgMTQxMCIsICJ2MC4zMTA4IiwgMHg1NSwgMHg1OCwgezB4OWUsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFzcGlyZSAxNDEwIiwgInYwLjMxMTMiLCAweDU1LCAweDU4LCB7MHg5ZSwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQXNwaXJlIDE0MTAiLCAidjAuMzExNSIsIDB4NTUsIDB4NTgsIHsweDllLCAweDAwfSB9LAorCXsiQWNlciIsICJBc3BpcmUgMTQxMCIsICJ2MC4zMTE3IiwgMHg1NSwgMHg1OCwgezB4OWUsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFzcGlyZSAxNDEwIiwgInYwLjMxMTkiLCAweDU1LCAweDU4LCB7MHg5ZSwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQXNwaXJlIDE0MTAiLCAidjAuMzEyMCIsIDB4NTUsIDB4NTgsIHsweDllLCAweDAwfSB9LAorCXsiQWNlciIsICJBc3BpcmUgMTQxMCIsICJ2MS4zMjA0IiwgMHg1NSwgMHg1OCwgezB4OWUsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFzcGlyZSAxNDEwIiwgInYxLjMzMDMiLCAweDU1LCAweDU4LCB7MHg5ZSwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQXNwaXJlIDE0MTAiLCAidjEuMzMwOCIsIDB4NTUsIDB4NTgsIHsweDllLCAweDAwfSB9LAorCXsiQWNlciIsICJBc3BpcmUgMTQxMCIsICJ2MS4zMzEwIiwgMHg1NSwgMHg1OCwgezB4OWUsIDB4MDB9IH0sCiAJLyogQWNlciAxODEweHggKi8KLQl7IkFjZXIiLCAiQXNwaXJlIDE4MTBUWiIsICJ2MC4zMTIwIiwgMHg1NSwgMHg1OCwgezB4OWUsIDB4OWUsIDB4MDB9IH0sCi0JeyJBY2VyIiwgIkFzcGlyZSAxODEwVCIsICJ2MC4zMTIwIiwgMHg1NSwgMHg1OCwgezB4OWUsIDB4OWUsIDB4MDB9IH0sCi0JeyJBY2VyIiwgIkFzcGlyZSAxODEwVCIsICJ2MS4zMzAzIiwgMHg1NSwgMHg1OCwgezB4OWUsIDB4OWUsIDB4MDB9IH0sCi0JeyJBY2VyIiwgIkFzcGlyZSAxODEwVFoiLCAidjEuMzMwMyIsIDB4NTUsIDB4NTgsIHsweDllLCAweDllLCAweDAwfSB9LAorCXsiQWNlciIsICJBc3BpcmUgMTgxMFRaIiwgInYwLjMxMDgiLCAweDU1LCAweDU4LCB7MHg5ZSwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQXNwaXJlIDE4MTBUIiwgICJ2MC4zMTA4IiwgMHg1NSwgMHg1OCwgezB4OWUsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFzcGlyZSAxODEwVFoiLCAidjAuMzExMyIsIDB4NTUsIDB4NTgsIHsweDllLCAweDAwfSB9LAorCXsiQWNlciIsICJBc3BpcmUgMTgxMFQiLCAgInYwLjMxMTMiLCAweDU1LCAweDU4LCB7MHg5ZSwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQXNwaXJlIDE4MTBUWiIsICJ2MC4zMTE1IiwgMHg1NSwgMHg1OCwgezB4OWUsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFzcGlyZSAxODEwVCIsICAidjAuMzExNSIsIDB4NTUsIDB4NTgsIHsweDllLCAweDAwfSB9LAorCXsiQWNlciIsICJBc3BpcmUgMTgxMFRaIiwgInYwLjMxMTciLCAweDU1LCAweDU4LCB7MHg5ZSwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQXNwaXJlIDE4MTBUIiwgICJ2MC4zMTE3IiwgMHg1NSwgMHg1OCwgezB4OWUsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFzcGlyZSAxODEwVFoiLCAidjAuMzExOSIsIDB4NTUsIDB4NTgsIHsweDllLCAweDAwfSB9LAorCXsiQWNlciIsICJBc3BpcmUgMTgxMFQiLCAgInYwLjMxMTkiLCAweDU1LCAweDU4LCB7MHg5ZSwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQXNwaXJlIDE4MTBUWiIsICJ2MC4zMTIwIiwgMHg1NSwgMHg1OCwgezB4OWUsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFzcGlyZSAxODEwVCIsICAidjAuMzEyMCIsIDB4NTUsIDB4NTgsIHsweDllLCAweDAwfSB9LAorCXsiQWNlciIsICJBc3BpcmUgMTgxMFRaIiwgInYxLjMyMDQiLCAweDU1LCAweDU4LCB7MHg5ZSwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQXNwaXJlIDE4MTBUIiwgICJ2MS4zMjA0IiwgMHg1NSwgMHg1OCwgezB4OWUsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFzcGlyZSAxODEwVFoiLCAidjEuMzMwMyIsIDB4NTUsIDB4NTgsIHsweDllLCAweDAwfSB9LAorCXsiQWNlciIsICJBc3BpcmUgMTgxMFQiLCAgInYxLjMzMDMiLCAweDU1LCAweDU4LCB7MHg5ZSwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQXNwaXJlIDE4MTBUWiIsICJ2MS4zMzA4IiwgMHg1NSwgMHg1OCwgezB4OWUsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFzcGlyZSAxODEwVCIsICAidjEuMzMwOCIsIDB4NTUsIDB4NTgsIHsweDllLCAweDAwfSB9LAorCXsiQWNlciIsICJBc3BpcmUgMTgxMFRaIiwgInYxLjMzMTAiLCAweDU1LCAweDU4LCB7MHg5ZSwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQXNwaXJlIDE4MTBUIiwgICJ2MS4zMzEwIiwgMHg1NSwgMHg1OCwgezB4OWUsIDB4MDB9IH0sCisJLyogQWNlciA1MzEgKi8KKwl7IkFjZXIiLCAiQU81MzFoIiwgInYwLjMyMDEiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgwMH0gfSwKIAkvKiBHYXRld2F5ICovCi0JeyJHYXRld2F5IiwgIkFPQTExMCIsICJ2MC4zMTAzIiwgMHg1NSwgMHg1OCwgezB4MjEsIDB4MjEsIDB4MDB9IH0sCi0JeyJHYXRld2F5IiwgIkFPQTE1MCIsICJ2MC4zMTAzIiwgMHg1NSwgMHg1OCwgezB4MjAsIDB4MjAsIDB4MDB9IH0sCi0JeyJHYXRld2F5IiwgIkxUMzEiLCAidjEuMzEwMyIsIDB4NTUsIDB4NTgsIHsweDEwLCAweDBmLCAweDAwfSB9LAotCXsiR2F0ZXdheSIsICJMVDMxIiwgInYxLjMyMDEiLCAweDU1LCAweDU4LCB7MHgxMCwgMHgwZiwgMHgwMH0gfSwKLQl7IkdhdGV3YXkiLCAiTFQzMSIsICJ2MS4zMzAyIiwgMHg1NSwgMHg1OCwgezB4MTAsIDB4MGYsIDB4MDB9IH0sCisJeyJHYXRld2F5IiwgIkFPQTExMCIsICJ2MC4zMTAzIiwgMHg1NSwgMHg1OCwgezB4MjEsIDB4MDB9IH0sCisJeyJHYXRld2F5IiwgIkFPQTE1MCIsICJ2MC4zMTAzIiwgMHg1NSwgMHg1OCwgezB4MjAsIDB4MDB9IH0sCisJeyJHYXRld2F5IiwgIkxUMzEiLCAgICJ2MS4zMTAzIiwgMHg1NSwgMHg1OCwgezB4OWUsIDB4MDB9IH0sCisJeyJHYXRld2F5IiwgIkxUMzEiLCAgICJ2MS4zMjAxIiwgMHg1NSwgMHg1OCwgezB4OWUsIDB4MDB9IH0sCisJeyJHYXRld2F5IiwgIkxUMzEiLCAgICJ2MS4zMzAyIiwgMHg1NSwgMHg1OCwgezB4OWUsIDB4MDB9IH0sCiAJLyogUGFja2FyZCBCZWxsICovCi0JeyJQYWNrYXJkIEJlbGwiLCAiRE9BMTUwIiwgInYwLjMxMDQiLCAweDU1LCAweDU4LCB7MHgyMSwgMHgyMSwgMHgwMH0gfSwKLQl7IlBhY2thcmQgQmVsbCIsICJET0ExNTAiLCAidjAuMzEwNSIsIDB4NTUsIDB4NTgsIHsweDIwLCAweDIwLCAweDAwfSB9LAotCXsiUGFja2FyZCBCZWxsIiwgIkFPQTExMCIsICJ2MC4zMTA1IiwgMHg1NSwgMHg1OCwgezB4MjEsIDB4MjEsIDB4MDB9IH0sCi0JeyJQYWNrYXJkIEJlbGwiLCAiQU9BMTUwIiwgInYwLjMxMDUiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgyMCwgMHgwMH0gfSwKLQl7IlBhY2thcmQgQmVsbCIsICJET1RNVSIsICJ2MS4zMzAzIiwgMHg1NSwgMHg1OCwgezB4OWUsIDB4OWUsIDB4MDB9IH0sCi0JeyJQYWNrYXJkIEJlbGwiLCAiRE9UTVUiLCAidjAuMzEyMCIsIDB4NTUsIDB4NTgsIHsweDllLCAweDllLCAweDAwfSB9LAorCXsiUGFja2FyZCBCZWxsIiwgIkRPQTE1MCIsICJ2MC4zMTA0IiwgMHg1NSwgMHg1OCwgezB4MjEsIDB4MDB9IH0sCisJeyJQYWNrYXJkIEJlbGwiLCAiRE9BMTUwIiwgInYwLjMxMDUiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgwMH0gfSwKKwl7IlBhY2thcmQgQmVsbCIsICJBT0ExMTAiLCAidjAuMzEwNSIsIDB4NTUsIDB4NTgsIHsweDIxLCAweDAwfSB9LAorCXsiUGFja2FyZCBCZWxsIiwgIkFPQTE1MCIsICJ2MC4zMTA1IiwgMHg1NSwgMHg1OCwgezB4MjAsIDB4MDB9IH0sCisJeyJQYWNrYXJkIEJlbGwiLCAiRE9UTVUiLCAgInYxLjMzMDMiLCAweDU1LCAweDU4LCB7MHg5ZSwgMHgwMH0gfSwKKwl7IlBhY2thcmQgQmVsbCIsICJET1RNVSIsICAidjAuMzEyMCIsIDB4NTUsIDB4NTgsIHsweDllLCAweDAwfSB9LAorCXsiUGFja2FyZCBCZWxsIiwgIkRPVE1VIiwgICJ2MC4zMTA4IiwgMHg1NSwgMHg1OCwgezB4OWUsIDB4MDB9IH0sCisJeyJQYWNrYXJkIEJlbGwiLCAiRE9UTVUiLCAgInYwLjMxMTMiLCAweDU1LCAweDU4LCB7MHg5ZSwgMHgwMH0gfSwKKwl7IlBhY2thcmQgQmVsbCIsICJET1RNVSIsICAidjAuMzExNSIsIDB4NTUsIDB4NTgsIHsweDllLCAweDAwfSB9LAorCXsiUGFja2FyZCBCZWxsIiwgIkRPVE1VIiwgICJ2MC4zMTE3IiwgMHg1NSwgMHg1OCwgezB4OWUsIDB4MDB9IH0sCisJeyJQYWNrYXJkIEJlbGwiLCAiRE9UTVUiLCAgInYwLjMxMTkiLCAweDU1LCAweDU4LCB7MHg5ZSwgMHgwMH0gfSwKKwl7IlBhY2thcmQgQmVsbCIsICJET1RNVSIsICAidjEuMzIwNCIsIDB4NTUsIDB4NTgsIHsweDllLCAweDAwfSB9LAorCXsiUGFja2FyZCBCZWxsIiwgIkRPVE1BIiwgICJ2MS4zMjAxIiwgMHg1NSwgMHg1OCwgezB4OWUsIDB4MDB9IH0sCisJeyJQYWNrYXJkIEJlbGwiLCAiRE9UTUEiLCAgInYxLjMzMDIiLCAweDU1LCAweDU4LCB7MHg5ZSwgMHgwMH0gfSwKIAkvKiBwZXdwZXctdGVybWluYXRvciAqLwotCXsiIiwgIiIsICIiLCAwLCAwLCB7MCwgMCwgMH0gfQorCXsiIiwgIiIsICIiLCAwLCAwLCB7MCwgMH0gfQogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBiaW9zX3NldHRpbmdzX3QgKmJpb3NfY2ZnIF9fcmVhZF9tb3N0bHk7CkBAIC0yMDAsNyArMjMyLDcgQEAKIAlpZiAoZWNfcmVhZChiaW9zX2NmZy0+ZmFucmVnLCAmZmFuKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoZmFuICE9IGJpb3NfY2ZnLT5jbWQuY2hrX29mZikKKwlpZiAoZmFuICE9IGJpb3NfY2ZnLT5jbWQuY21kX29mZikKIAkJKnN0YXRlID0gQUNFUkhERl9GQU5fQVVUTzsKIAllbHNlCiAJCSpzdGF0ZSA9IEFDRVJIREZfRkFOX09GRjsKQEAgLTM3NCw3ICs0MDYsNyBAQAogfQogCiAvKiBiaW5kIGNhbGxiYWNrIGZ1bmN0aW9ucyB0byB0aGVybWFsem9uZSAqLwotc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2Vfb3BzIGFjZXJoZGZfZGV2X29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZV9vcHMgYWNlcmhkZl9kZXZfb3BzID0gewogCS5iaW5kID0gYWNlcmhkZl9iaW5kLAogCS51bmJpbmQgPSBhY2VyaGRmX3VuYmluZCwKIAkuZ2V0X3RlbXAgPSBhY2VyaGRmX2dldF9lY190ZW1wLApAQCAtNDQ5LDcgKzQ4MSw3IEBACiB9CiAKIC8qIGJpbmQgZmFuIGNhbGxiYWNrcyB0byBmYW4gZGV2aWNlICovCi1zdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZV9vcHMgYWNlcmhkZl9jb29saW5nX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZV9vcHMgYWNlcmhkZl9jb29saW5nX29wcyA9IHsKIAkuZ2V0X21heF9zdGF0ZSA9IGFjZXJoZGZfZ2V0X21heF9zdGF0ZSwKIAkuZ2V0X2N1cl9zdGF0ZSA9IGFjZXJoZGZfZ2V0X2N1cl9zdGF0ZSwKIAkuc2V0X2N1cl9zdGF0ZSA9IGFjZXJoZGZfc2V0X2N1cl9zdGF0ZSwKQEAgLTUxOCw2ICs1NTAsMTAgQEAKIAl2ZXJzaW9uID0gZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19WRVJTSU9OKTsKIAlwcm9kdWN0ID0gZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfUFJPRFVDVF9OQU1FKTsKIAorCWlmICghdmVuZG9yIHx8ICF2ZXJzaW9uIHx8ICFwcm9kdWN0KSB7CisJCXByX2VycigiZXJyb3IgZ2V0dGluZyBoYXJkd2FyZSBpbmZvcm1hdGlvblxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCXByX2luZm8oIkFjZXIgQXNwaXJlIE9uZSBGYW4gZHJpdmVyLCB2LiVzXG4iLCBEUlZfVkVSKTsKIApAQCAtNTc5LDE3ICs2MTUsMjYgQEAKIAkJcmV0dXJuIGVycjsKIAogCWFjZXJoZGZfZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJhY2VyaGRmIiwgLTEpOwotCXBsYXRmb3JtX2RldmljZV9hZGQoYWNlcmhkZl9kZXYpOworCWlmICghYWNlcmhkZl9kZXYpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfZGV2aWNlX2FsbG9jOworCX0KKwllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGFjZXJoZGZfZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9kZXZpY2VfYWRkOwogCiAJcmV0dXJuIDA7CisKK2Vycl9kZXZpY2VfYWRkOgorCXBsYXRmb3JtX2RldmljZV9wdXQoYWNlcmhkZl9kZXYpOworZXJyX2RldmljZV9hbGxvYzoKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYWNlcmhkZl9kcml2ZXIpOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIGFjZXJoZGZfdW5yZWdpc3Rlcl9wbGF0Zm9ybSh2b2lkKQogewotCWlmICghYWNlcmhkZl9kZXYpCi0JCXJldHVybjsKLQotCXBsYXRmb3JtX2RldmljZV9kZWwoYWNlcmhkZl9kZXYpOworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGFjZXJoZGZfZGV2KTsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYWNlcmhkZl9kcml2ZXIpOwogfQogCkBAIC02MzMsNyArNjc4LDcgQEAKIAogCWVyciA9IGFjZXJoZGZfcmVnaXN0ZXJfcGxhdGZvcm0oKTsKIAlpZiAoZXJyKQotCQlnb3RvIGVycl91bnJlZzsKKwkJZ290byBvdXRfZXJyOwogCiAJZXJyID0gYWNlcmhkZl9yZWdpc3Rlcl90aGVybWFsKCk7CiAJaWYgKGVycikKQEAgLTY0Niw3ICs2OTEsNyBAQAogCWFjZXJoZGZfdW5yZWdpc3Rlcl9wbGF0Zm9ybSgpOwogCiBvdXRfZXJyOgotCXJldHVybiAtRU5PREVWOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhY2VyaGRmX2V4aXQodm9pZCkKQEAgLTY2MiwxMSArNzA3LDEzIEBACiBNT0RVTEVfQUxJQVMoImRtaToqOipBY2VyKjpwbkFPQSo6Iik7CiBNT0RVTEVfQUxJQVMoImRtaToqOipBY2VyKjpwbkFzcGlyZSAxNDEwKjoiKTsKIE1PRFVMRV9BTElBUygiZG1pOio6KkFjZXIqOnBuQXNwaXJlIDE4MTAqOiIpOworTU9EVUxFX0FMSUFTKCJkbWk6KjoqQWNlcio6cG5BTzUzMSo6Iik7CiBNT0RVTEVfQUxJQVMoImRtaToqOipHYXRld2F5KjpwbkFPQSo6Iik7CiBNT0RVTEVfQUxJQVMoImRtaToqOipHYXRld2F5KjpwbkxUMzEqOiIpOwogTU9EVUxFX0FMSUFTKCJkbWk6KjoqUGFja2FyZCBCZWxsKjpwbkFPQSo6Iik7CiBNT0RVTEVfQUxJQVMoImRtaToqOipQYWNrYXJkIEJlbGwqOnBuRE9BKjoiKTsKIE1PRFVMRV9BTElBUygiZG1pOio6KlBhY2thcmQgQmVsbCo6cG5ET1RNVSo6Iik7CitNT0RVTEVfQUxJQVMoImRtaToqOipQYWNrYXJkIEJlbGwqOnBuRE9UTUEqOiIpOwogCiBtb2R1bGVfaW5pdChhY2VyaGRmX2luaXQpOwogbW9kdWxlX2V4aXQoYWNlcmhkZl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLWxhcHRvcC5jCmluZGV4IGVmZThmNjMuLmI3NTZlMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy1sYXB0b3AuYwpAQCAtNzYsMTggKzc2LDE4IEBACiAgKiBTbywgaWYgc29tZXRoaW5nIGRvZXNuJ3Qgd29yayBhcyB5b3Ugd2FudCwganVzdCB0cnkgb3RoZXIgdmFsdWVzID0pCiAgKi8KIHN0YXRpYyB1aW50IHdhcGYgPSAxOwotbW9kdWxlX3BhcmFtKHdhcGYsIHVpbnQsIDA2NDQpOworbW9kdWxlX3BhcmFtKHdhcGYsIHVpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyh3YXBmLCAiV0FQRiB2YWx1ZSIpOwogCiBzdGF0aWMgaW50IHdsYW5fc3RhdHVzID0gMTsKIHN0YXRpYyBpbnQgYmx1ZXRvb3RoX3N0YXR1cyA9IDE7CiAKLW1vZHVsZV9wYXJhbSh3bGFuX3N0YXR1cywgaW50LCAwNjQ0KTsKK21vZHVsZV9wYXJhbSh3bGFuX3N0YXR1cywgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0Mod2xhbl9zdGF0dXMsICJTZXQgdGhlIHdpcmVsZXNzIHN0YXR1cyBvbiBib290ICIKIAkJICIoMCA9IGRpc2FibGVkLCAxID0gZW5hYmxlZCwgLTEgPSBkb24ndCBkbyBhbnl0aGluZykuICIKIAkJICJkZWZhdWx0IGlzIDEiKTsKIAotbW9kdWxlX3BhcmFtKGJsdWV0b290aF9zdGF0dXMsIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0oYmx1ZXRvb3RoX3N0YXR1cywgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoYmx1ZXRvb3RoX3N0YXR1cywgIlNldCB0aGUgd2lyZWxlc3Mgc3RhdHVzIG9uIGJvb3QgIgogCQkgIigwID0gZGlzYWJsZWQsIDEgPSBlbmFibGVkLCAtMSA9IGRvbid0IGRvIGFueXRoaW5nKS4gIgogCQkgImRlZmF1bHQgaXMgMSIpOwpAQCAtMjk3LDcgKzI5Nyw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCiAJaWYgKCFoYW5kbGUpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLTE7CiAKIAlwYXJhbXMuY291bnQgPSAxOwogCXBhcmFtcy5wb2ludGVyID0gJmluX29iajsKQEAgLTc5NiwxMCArNzk2LDExIEBACiAKIAlydiA9IHBhcnNlX2FyZyhidWYsIGNvdW50LCAmdmFsdWUpOwogCWlmIChydiA+IDApIHsKLQkJaWYgKHdyaXRlX2FjcGlfaW50KGFzdXMtPmhhbmRsZSwgTUVUSE9EX0xFREQsIHZhbHVlKSkKKwkJaWYgKHdyaXRlX2FjcGlfaW50KGFzdXMtPmhhbmRsZSwgTUVUSE9EX0xFREQsIHZhbHVlKSkgewogCQkJcHJfd2FybmluZygiTEVEIGRpc3BsYXkgd3JpdGUgZmFpbGVkXG4iKTsKLQkJZWxzZQotCQkJYXN1cy0+bGVkZF9zdGF0dXMgPSAodTMyKSB2YWx1ZTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCWFzdXMtPmxlZGRfc3RhdHVzID0gKHUzMikgdmFsdWU7CiAJfQogCXJldHVybiBydjsKIH0KQEAgLTExMjMsNyArMTEyNCw3IEBACiAJaW5wdXQgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIWlucHV0KSB7CiAJCXByX2luZm8oIlVuYWJsZSB0byBhbGxvY2F0ZSBpbnB1dCBkZXZpY2VcbiIpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWlucHV0LT5uYW1lID0gIkFzdXMgTGFwdG9wIGV4dHJhIGJ1dHRvbnMiOwogCWlucHV0LT5waHlzID0gQVNVU19MQVBUT1BfRklMRSAiL2lucHV0MCI7CkBAIC0xMTM0LDIwICsxMTM1LDIwIEBACiAJZXJyb3IgPSBzcGFyc2Vfa2V5bWFwX3NldHVwKGlucHV0LCBhc3VzX2tleW1hcCwgTlVMTCk7CiAJaWYgKGVycm9yKSB7CiAJCXByX2VycigiVW5hYmxlIHRvIHNldHVwIGlucHV0IGRldmljZSBrZXltYXBcbiIpOwotCQlnb3RvIGVycl9rZXltYXA7CisJCWdvdG8gZXJyX2ZyZWVfZGV2OwogCX0KIAllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dCk7CiAJaWYgKGVycm9yKSB7CiAJCXByX2luZm8oIlVuYWJsZSB0byByZWdpc3RlciBpbnB1dCBkZXZpY2VcbiIpOwotCQlnb3RvIGVycl9kZXZpY2U7CisJCWdvdG8gZXJyX2ZyZWVfa2V5bWFwOwogCX0KIAogCWFzdXMtPmlucHV0ZGV2ID0gaW5wdXQ7CiAJcmV0dXJuIDA7CiAKLWVycl9rZXltYXA6CitlcnJfZnJlZV9rZXltYXA6CiAJc3BhcnNlX2tleW1hcF9mcmVlKGlucHV0KTsKLWVycl9kZXZpY2U6CitlcnJfZnJlZV9kZXY6CiAJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXQpOwogCXJldHVybiBlcnJvcjsKIH0KQEAgLTEzOTcsOCArMTM5OCwxMCBAQAogCQl9CiAJfQogCWFzdXMtPm5hbWUgPSBrc3RyZHVwKHN0cmluZywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhc3VzLT5uYW1lKQorCWlmICghYXN1cy0+bmFtZSkgeworCQlrZnJlZShidWZmZXIucG9pbnRlcik7CiAJCXJldHVybiAtRU5PTUVNOworCX0KIAogCWlmICgqc3RyaW5nKQogCQlwcl9ub3RpY2UoIiAgJXMgbW9kZWwgZGV0ZWN0ZWRcbiIsIHN0cmluZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzX2FjcGkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXNfYWNwaS5jCmluZGV4IDkyZmQzMGMuLmUwNThjMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXNfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXNfYWNwaS5jCkBAIC0xMzMwLDYgKzEzMzAsOSBAQAogCQkJaG90ay0+bW9kZWwgPSBQMzA7CiAJCQlwcmludGsoS0VSTl9OT1RJQ0UKIAkJCSAgICAgICAiICBTYW1zdW5nIFAzMCBkZXRlY3RlZCwgc3VwcG9ydGVkXG4iKTsKKwkJCWhvdGstPm1ldGhvZHMgPSAmbW9kZWxfY29uZltob3RrLT5tb2RlbF07CisJCQlrZnJlZShtb2RlbCk7CisJCQlyZXR1cm4gMDsKIAkJfSBlbHNlIHsKIAkJCWhvdGstPm1vZGVsID0gTTJFOwogCQkJcHJpbnRrKEtFUk5fTk9USUNFICIgIHVuc3VwcG9ydGVkIG1vZGVsICVzLCB0cnlpbmcgIgpAQCAtMTMzOSw4ICsxMzQyLDYgQEAKIAkJCWtmcmVlKG1vZGVsKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9Ci0JCWhvdGstPm1ldGhvZHMgPSAmbW9kZWxfY29uZltob3RrLT5tb2RlbF07Ci0JCXJldHVybiBBRV9PSzsKIAl9CiAJaG90ay0+bWV0aG9kcyA9ICZtb2RlbF9jb25mW2hvdGstPm1vZGVsXTsKIAlwcmludGsoS0VSTl9OT1RJQ0UgIiAgJXMgbW9kZWwgZGV0ZWN0ZWQsIHN1cHBvcnRlZFxuIiwgc3RyaW5nKTsKQEAgLTEzNzQsNyArMTM3NSw3IEBACiAKIAlrZnJlZShtb2RlbCk7CiAKLQlyZXR1cm4gQUVfT0s7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYXN1c19ob3RrX2NoZWNrKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9jbGFzc21hdGUtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9jbGFzc21hdGUtbGFwdG9wLmMKaW5kZXggM2JmMzk5Zi4uMzQxY2JmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvY2xhc3NtYXRlLWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NsYXNzbWF0ZS1sYXB0b3AuYwpAQCAtMjA4LDcgKzIwOCw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGNtcGNfYWNjZWxfc2Vuc2l0aXZpdHlfYXR0ciA9IHsKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBjbXBjX2FjY2VsX3NlbnNpdGl2aXR5X2F0dHIgPSB7CiAJLmF0dHIgPSB7IC5uYW1lID0gInNlbnNpdGl2aXR5IiwgLm1vZGUgPSAwNjYwIH0sCiAJLnNob3cgPSBjbXBjX2FjY2VsX3NlbnNpdGl2aXR5X3Nob3csCiAJLnN0b3JlID0gY21wY19hY2NlbF9zZW5zaXRpdml0eV9zdG9yZQpAQCAtNTczLDE2ICs1NzMsMTcgQEAKIAogCWlwbWwtPnJmID0gcmZraWxsX2FsbG9jKCJjbXBjX3Jma2lsbCIsICZhY3BpLT5kZXYsIFJGS0lMTF9UWVBFX1dMQU4sCiAJCQkJJmNtcGNfcmZraWxsX29wcywgYWNwaS0+aGFuZGxlKTsKLQkvKiByZmtpbGxfYWxsb2MgbWF5IGZhaWwgaWYgUkZLSUxMIGlzIGRpc2FibGVkLiBXZSBzaG91bGQgc3RpbGwgd29yawotCSAqIGFueXdheS4gKi8KLQlpZiAoIUlTX0VSUihpcG1sLT5yZikpIHsKKwkvKgorCSAqIElmIFJGS0lMTCBpcyBkaXNhYmxlZCwgcmZraWxsX2FsbG9jIHdpbGwgcmV0dXJuIEVSUl9QVFIoLUVOT0RFVikuCisJICogVGhpcyBpcyBPSywgaG93ZXZlciwgc2luY2UgYWxsIG90aGVyIHVzZXMgb2YgdGhlIGRldmljZSB3aWxsIG5vdAorCSAqIGRlcmVmZW5jZSBpdC4KKwkgKi8KKwlpZiAoaXBtbC0+cmYpIHsKIAkJcmV0dmFsID0gcmZraWxsX3JlZ2lzdGVyKGlwbWwtPnJmKTsKIAkJaWYgKHJldHZhbCkgewogCQkJcmZraWxsX2Rlc3Ryb3koaXBtbC0+cmYpOwogCQkJaXBtbC0+cmYgPSBOVUxMOwogCQl9Ci0JfSBlbHNlIHsKLQkJaXBtbC0+cmYgPSBOVUxMOwogCX0KIAogCWRldl9zZXRfZHJ2ZGF0YSgmYWNwaS0+ZGV2LCBpcG1sKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NvbXBhbC1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NvbXBhbC1sYXB0b3AuYwppbmRleCA3MWZmMTU0Li5kMDcxY2UwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9jb21wYWwtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvY29tcGFsLWxhcHRvcC5jCkBAIC0yNCwxNyArMjQsNTAgQEAKICAqLwogCiAvKgotICogY29tYXBsLWxhcHRvcC5jIC0gQ29tcGFsIGxhcHRvcCBzdXBwb3J0LgorICogY29tcGFsLWxhcHRvcC5jIC0gQ29tcGFsIGxhcHRvcCBzdXBwb3J0LgogICoKLSAqIFRoZSBkcml2ZXIgcmVnaXN0ZXJzIGl0c2VsZiB3aXRoIHRoZSByZmtpbGwgc3Vic3lzdGVtIGFuZAotICogdGhlIExpbnV4IGJhY2tsaWdodCBjb250cm9sIHN1YnN5c3RlbS4KKyAqIFRoaXMgZHJpdmVyIGV4cG9ydHMgYSBmZXcgZmlsZXMgaW4gL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2NvbXBhbC1sYXB0b3AvOgorICogICB3YWtlX3VwX1hYWCAgIFdoZXRoZXIgb3Igbm90IHdlIGxpc3RlbiB0byBzdWNoIHdha2UgdXAgZXZlbnRzIChydykKKyAqCisgKiBJbiBhZGRpdGlvbiB0byB0aGVzZSBwbGF0Zm9ybSBkZXZpY2UgYXR0cmlidXRlcyB0aGUgZHJpdmVyCisgKiByZWdpc3RlcnMgaXRzZWxmIGluIHRoZSBMaW51eCBiYWNrbGlnaHQgY29udHJvbCwgcG93ZXJfc3VwcGx5LCByZmtpbGwKKyAqIGFuZCBod21vbiBzdWJzeXN0ZW0gYW5kIGlzIGF2YWlsYWJsZSB0byB1c2Vyc3BhY2UgdW5kZXI6CisgKgorICogICAvc3lzL2NsYXNzL2JhY2tsaWdodC9jb21wYWwtbGFwdG9wLworICogICAvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS9jb21wYWwtbGFwdG9wLworICogICAvc3lzL2NsYXNzL3Jma2lsbC9yZmtpbGxYLworICogICAvc3lzL2NsYXNzL2h3bW9uL2h3bW9uWC8KKyAqCisgKiBOb3RlcyBvbiB0aGUgcG93ZXJfc3VwcGx5IGJhdHRlcnkgaW50ZXJmYWNlOgorICogICAtIHRoZSAibWluaW11bSIgZGVzaWduIHZvbHRhZ2UgaXMgKnRoZSogZGVzaWduIHZvbHRhZ2UKKyAqICAgLSB0aGUgYW1iaWVudCB0ZW1wZXJhdHVyZSBpcyB0aGUgYXZlcmFnZSBiYXR0ZXJ5IHRlbXBlcmF0dXJlCisgKiAgICAgYW5kIHRoZSB2YWx1ZSBpcyBhbiBlZHVjYXRlZCBndWVzcyAoc2VlIGNvbW1lbnRlZCBjb2RlIGJlbG93KQorICoKICAqCiAgKiBUaGlzIGRyaXZlciBtaWdodCB3b3JrIG9uIG90aGVyIGxhcHRvcHMgcHJvZHVjZWQgYnkgQ29tcGFsLiBJZiB5b3UKICAqIHdhbnQgdG8gdHJ5IGl0IHlvdSBjYW4gcGFzcyBmb3JjZT0xIGFzIGFyZ3VtZW50IHRvIHRoZSBtb2R1bGUgd2hpY2gKICAqIHdpbGwgZm9yY2UgaXQgdG8gbG9hZCBldmVuIHdoZW4gdGhlIERNSSBkYXRhIGRvZXNuJ3QgaWRlbnRpZnkgdGhlCi0gKiBsYXB0b3AgYXMgRkw5eC4KKyAqIGxhcHRvcCBhcyBjb21wYXRpYmxlLgorICoKKyAqIExvdHMgb2YgZGF0YSBhdmFpbGFibGUgYXQ6CisgKiBodHRwOi8vc2VydmljZTEubWFyYXNzdC5jb20vQ29tcGFsL0pITDkwXzkxL1NlcnZpY2UlMjBNYW51YWwvCisgKiBKSEw5MCUyMHNlcnZpY2UlMjBtYW51YWwtRmluYWwtMDcyNS5wZGYKKyAqCisgKgorICoKKyAqIFN1cHBvcnQgZm9yIHRoZSBDb21wYWwgSkhMOTAgYWRkZWQgYnkgUm9hbGQgRnJlZGVyaWNreAorICogKHJvYWxkLmZyZWRlcmlja3hAZ21haWwuY29tKToKKyAqIERyaXZlciBnb3QgbGFyZ2UgcmV2aXNpb24uIEFkZGVkIGZ1bmN0aW9uYWxpdGllczogYmFja2xpZ2h0CisgKiBwb3dlciwgd2FrZV9vbl9YWFgsIGEgaHdtb24gYW5kIHBvd2VyX3N1cHBseSBpbnRlcmZhY2UuCisgKgorICogSW4gY2FzZSB0aGlzIGdldHMgbWVyZ2VkIGludG8gdGhlIGtlcm5lbCBzb3VyY2U6IEkgd2FudCB0byBkZWRpY2F0ZSB0aGlzCisgKiB0byBLYXNwZXIgTWVlcnRzLCB0aGUgYXdlc29tZSBndXkgd2hvIHNob3dlZCBtZSBMaW51eCBhbmQgQyEKICAqLwogCisvKiBOT1RFOiBjdXJyZW50bHkgdGhlIHdha2Vfb25fWFhYLCBod21vbiBhbmQgcG93ZXJfc3VwcGx5IGludGVyZmFjZXMgYXJlCisgKiBvbmx5IGVuYWJsZWQgb24gYSBKSEw5MCBib2FyZCB1bnRpbCBpdCBpcyB2ZXJpZmllZCB0aGF0IHRoZXkgd29yayBvbiB0aGUKKyAqIG90aGVyIGJvYXJkcyB0b28uICBTZWUgdGhlIGV4dHJhX2ZlYXR1cmVzIHZhcmlhYmxlLiAqLworCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNDMsNzEgKzc2LDI5NiBAQAogI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Jma2lsbC5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHkuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgogCi0jZGVmaW5lIENPTVBBTF9EUklWRVJfVkVSU0lPTiAiMC4yLjYiCiAKLSNkZWZpbmUgQ09NUEFMX0xDRF9MRVZFTF9NQVggOAorLyogPT09PT09PSAqLworLyogRGVmaW5lcyAqLworLyogPT09PT09PSAqLworI2RlZmluZSBEUklWRVJfTkFNRSAiY29tcGFsLWxhcHRvcCIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjAuMi43IgogCi0jZGVmaW5lIENPTVBBTF9FQ19DT01NQU5EX1dJUkVMRVNTIDB4QkIKLSNkZWZpbmUgQ09NUEFMX0VDX0NPTU1BTkRfTENEX0xFVkVMIDB4QjkKKyNkZWZpbmUgQkFDS0xJR0hUX0xFVkVMX0FERFIJCTB4QjkKKyNkZWZpbmUgQkFDS0xJR0hUX0xFVkVMX01BWAkJNworI2RlZmluZSBCQUNLTElHSFRfU1RBVEVfQUREUgkJMHg1OQorI2RlZmluZSBCQUNLTElHSFRfU1RBVEVfT05fREFUQQkJMHhFMQorI2RlZmluZSBCQUNLTElHSFRfU1RBVEVfT0ZGX0RBVEEJMHhFMgogCi0jZGVmaW5lIEtJTExTV0lUQ0hfTUFTSyAweDEwCi0jZGVmaW5lIFdMQU5fTUFTSwkweDAxCi0jZGVmaW5lIEJUX01BU0sgCTB4MDIKKyNkZWZpbmUgV0FLRV9VUF9BRERSCQkJMHhBNAorI2RlZmluZSBXQUtFX1VQX1BNRQkJCSgxIDw8IDApCisjZGVmaW5lIFdBS0VfVVBfTU9ERU0JCQkoMSA8PCAxKQorI2RlZmluZSBXQUtFX1VQX0xBTgkJCSgxIDw8IDIpCisjZGVmaW5lIFdBS0VfVVBfV0xBTgkJCSgxIDw8IDQpCisjZGVmaW5lIFdBS0VfVVBfS0VZCQkJKDEgPDwgNikKKyNkZWZpbmUgV0FLRV9VUF9NT1VTRQkJCSgxIDw8IDcpCiAKLXN0YXRpYyBzdHJ1Y3QgcmZraWxsICp3aWZpX3Jma2lsbDsKLXN0YXRpYyBzdHJ1Y3QgcmZraWxsICpidF9yZmtpbGw7Ci1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqY29tcGFsX2RldmljZTsKKyNkZWZpbmUgV0lSRUxFU1NfQUREUgkJCTB4QkIKKyNkZWZpbmUgV0lSRUxFU1NfV0xBTgkJCSgxIDw8IDApCisjZGVmaW5lIFdJUkVMRVNTX0JUCQkJKDEgPDwgMSkKKyNkZWZpbmUgV0lSRUxFU1NfV0xBTl9FWElTVFMJCSgxIDw8IDIpCisjZGVmaW5lIFdJUkVMRVNTX0JUX0VYSVNUUwkJKDEgPDwgMykKKyNkZWZpbmUgV0lSRUxFU1NfS0lMTFNXSVRDSAkJKDEgPDwgNCkKIAorI2RlZmluZSBQV01fQUREUkVTUwkJCTB4NDYKKyNkZWZpbmUgUFdNX0RJU0FCTEVfQUREUgkJMHg1OQorI2RlZmluZSBQV01fRElTQUJMRV9EQVRBCQkweEE1CisjZGVmaW5lIFBXTV9FTkFCTEVfQUREUgkJCTB4NTkKKyNkZWZpbmUgUFdNX0VOQUJMRV9EQVRBCQkJMHhBOAorCisjZGVmaW5lIEZBTl9BRERSRVNTCQkJMHg0NgorI2RlZmluZSBGQU5fREFUQQkJCTB4ODEKKyNkZWZpbmUgRkFOX0ZVTExfT05fQ01ECQkJMHg1OSAvKiBEb2Vzbid0IHNlZW0gdG8gd29yay4gSnVzdCAqLworI2RlZmluZSBGQU5fRlVMTF9PTl9FTkFCTEUJCTB4NzYgLyogZm9yY2UgdGhlIHB3bSBzaWduYWwgdG8gaXRzICovCisjZGVmaW5lIEZBTl9GVUxMX09OX0RJU0FCTEUJCTB4NzcgLyogbWF4aW11bSB2YWx1ZSBpbnN0ZWFkICovCisKKyNkZWZpbmUgVEVNUF9DUFUJCQkweEIwCisjZGVmaW5lIFRFTVBfQ1BVX0xPQ0FMCQkJMHhCMQorI2RlZmluZSBURU1QX0NQVV9EVFMJCQkweEI1CisjZGVmaW5lIFRFTVBfTk9SVEhCUklER0UJCTB4QjYKKyNkZWZpbmUgVEVNUF9WR0EJCQkweEI0CisjZGVmaW5lIFRFTVBfU0tJTgkJCTB4QjIKKworI2RlZmluZSBCQVRfTUFOVUZBQ1RVUkVSX05BTUVfQUREUgkweDEwCisjZGVmaW5lIEJBVF9NQU5VRkFDVFVSRVJfTkFNRV9MRU4JOQorI2RlZmluZSBCQVRfTU9ERUxfTkFNRV9BRERSCQkweDE5CisjZGVmaW5lIEJBVF9NT0RFTF9OQU1FX0xFTgkJNgorI2RlZmluZSBCQVRfU0VSSUFMX05VTUJFUl9BRERSCQkweEM0CisjZGVmaW5lIEJBVF9TRVJJQUxfTlVNQkVSX0xFTgkJNQorI2RlZmluZSBCQVRfQ0hBUkdFX05PVwkJCTB4QzIKKyNkZWZpbmUgQkFUX0NIQVJHRV9ERVNJR04JCTB4Q0EKKyNkZWZpbmUgQkFUX1ZPTFRBR0VfTk9XCQkJMHhDNgorI2RlZmluZSBCQVRfVk9MVEFHRV9ERVNJR04JCTB4QzgKKyNkZWZpbmUgQkFUX0NVUlJFTlRfTk9XCQkJMHhEMAorI2RlZmluZSBCQVRfQ1VSUkVOVF9BVkcJCQkweEQyCisjZGVmaW5lIEJBVF9QT1dFUgkJCTB4RDQKKyNkZWZpbmUgQkFUX0NBUEFDSVRZCQkJMHhDRQorI2RlZmluZSBCQVRfVEVNUAkJCTB4RDYKKyNkZWZpbmUgQkFUX1RFTVBfQVZHCQkJMHhENworI2RlZmluZSBCQVRfU1RBVFVTMAkJCTB4QzEKKyNkZWZpbmUgQkFUX1NUQVRVUzEJCQkweEYwCisjZGVmaW5lIEJBVF9TVEFUVVMyCQkJMHhGMQorI2RlZmluZSBCQVRfU1RPUF9DSEFSR0UxCQkweEYyCisjZGVmaW5lIEJBVF9TVE9QX0NIQVJHRTIJCTB4RjMKKworI2RlZmluZSBCQVRfUzBfRElTQ0hBUkdFCQkoMSA8PCAwKQorI2RlZmluZSBCQVRfUzBfRElTQ0hSR19DUklUSUNBTAkJKDEgPDwgMikKKyNkZWZpbmUgQkFUX1MwX0xPVwkJCSgxIDw8IDMpCisjZGVmaW5lIEJBVF9TMF9DSEFSR0lORwkJCSgxIDw8IDEpCisjZGVmaW5lIEJBVF9TMF9BQwkJCSgxIDw8IDcpCisjZGVmaW5lIEJBVF9TMV9FWElTVFMJCQkoMSA8PCAwKQorI2RlZmluZSBCQVRfUzFfRlVMTAkJCSgxIDw8IDEpCisjZGVmaW5lIEJBVF9TMV9FTVBUWQkJCSgxIDw8IDIpCisjZGVmaW5lIEJBVF9TMV9MaUlPTl9PUl9OaU1ICQkoMSA8PCA3KQorI2RlZmluZSBCQVRfUzJfTE9XX0xPVwkJCSgxIDw8IDApCisjZGVmaW5lIEJBVF9TVE9QX0NIUkcxX0JBRF9DRUxMCQkoMSA8PCAxKQorI2RlZmluZSBCQVRfU1RPUF9DSFJHMV9DT01NX0ZBSUwJKDEgPDwgMikKKyNkZWZpbmUgQkFUX1NUT1BfQ0hSRzFfT1ZFUlZPTFRBR0UJKDEgPDwgNikKKyNkZWZpbmUgQkFUX1NUT1BfQ0hSRzFfT1ZFUlRFTVBFUkFUVVJFCSgxIDw8IDcpCisKKworLyogPT09PT09PSAqLworLyogU3RydWN0cyAqLworLyogPT09PT09PSAqLworc3RydWN0IGNvbXBhbF9kYXRheworCS8qIEZhbiBjb250cm9sICovCisJc3RydWN0IGRldmljZSAqaHdtb25fZGV2OworCWludCBwd21fZW5hYmxlOyAvKiAwOmZ1bGwgb24sIDE6c2V0IGJ5IHB3bTEsIDI6Y29udHJvbCBieSBtb3RlcmJvYXJkICovCisJdW5zaWduZWQgY2hhciBjdXJyX3B3bTsKKworCS8qIFBvd2VyIHN1cHBseSAqLworCXN0cnVjdCBwb3dlcl9zdXBwbHkgcHN5OworCXN0cnVjdCBwb3dlcl9zdXBwbHlfaW5mbyBwc3lfaW5mbzsKKwljaGFyIGJhdF9tb2RlbF9uYW1lW0JBVF9NT0RFTF9OQU1FX0xFTiArIDFdOworCWNoYXIgYmF0X21hbnVmYWN0dXJlcl9uYW1lW0JBVF9NQU5VRkFDVFVSRVJfTkFNRV9MRU4gKyAxXTsKKwljaGFyIGJhdF9zZXJpYWxfbnVtYmVyW0JBVF9TRVJJQUxfTlVNQkVSX0xFTiArIDFdOworfTsKKworCisvKiA9PT09PT09PT09PT09PT0gKi8KKy8qIEdlbmVyYWwgZ2xvYmFscyAqLworLyogPT09PT09PT09PT09PT09ICovCiBzdGF0aWMgaW50IGZvcmNlOwogbW9kdWxlX3BhcmFtKGZvcmNlLCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZm9yY2UsICJGb3JjZSBkcml2ZXIgbG9hZCwgaWdub3JlIERNSSBkYXRhIik7CiAKLS8qIEhhcmR3YXJlIGFjY2VzcyAqLworLyogU3VwcG9ydCBmb3IgdGhlIHdha2Vfb25fWFhYLCBod21vbiBhbmQgcG93ZXJfc3VwcGx5IGludGVyZmFjZS4gQ3VycmVudGx5CisgKiBvbmx5IGdldHMgZW5hYmxlZCBvbiBhIEpITDkwIGJvYXJkLiBNaWdodCB3b3JrIHdpdGggdGhlIG90aGVycyB0b28gKi8KK3N0YXRpYyBib29sIGV4dHJhX2ZlYXR1cmVzOwogCi1zdGF0aWMgaW50IHNldF9sY2RfbGV2ZWwoaW50IGxldmVsKQorLyogTmFzdHkgc3R1ZmYuIEZvciBzb21lIHJlYXNvbiB0aGUgZmFuIGNvbnRyb2wgaXMgdmVyeSB1bi1saW5lYXIuICBJJ3ZlCisgKiBjb21lIHVwIHdpdGggdGhlc2UgdmFsdWVzIGJ5IGxvb3BpbmcgdGhyb3VnaCB0aGUgcG9zc2libGUgaW5wdXRzIGFuZAorICogd2F0Y2hpbmcgdGhlIG91dHB1dCBvZiBhZGRyZXNzIDB4NEYgKGRvIGFuIGVjX3RyYW5zYWN0aW9uIHdyaXRpbmcgMHgzMworICogaW50byAweDRGIGFuZCByZWFkIGEgZmV3IGJ5dGVzIGZyb20gdGhlIG91dHB1dCwgbGlrZSBzbzoKKyAqCXU4IHdyaXRlRGF0YSA9IDB4MzM7CisgKgllY190cmFuc2FjdGlvbigweDRGLCAmd3JpdGVEYXRhLCAxLCBidWZmZXIsIDMyLCAwKTsKKyAqIFRoYXQgYWRkcmVzcyBpcyBsYWJsZWQgImZhbjEgdGFibGUgaW5mb3JtYXRpb24iIGluIHRoZSBzZXJ2aWNlIG1hbnVhbC4KKyAqIEl0IHNob3VsZCBiZSBjbGVhciB3aGljaCB2YWx1ZSBpbiAnYnVmZmVyJyBjaGFuZ2VzKS4gVGhpcyBzZWVtcyB0byBiZQorICogcmVsYXRlZCB0byBmYW4gc3BlZWQuIEl0IGlzbid0IGEgcHJvcGVyICdyZWFsdGltZScgZmFuIHNwZWVkIHZhbHVlCisgKiB0aG91Z2gsIGJlY2F1c2UgcGh5c2ljYWxseSBzdG9wcGluZyBvciBzcGVlZGluZyB1cCB0aGUgZmFuIGRvZXNuJ3QKKyAqIGNoYW5nZSBpdC4gSXQgbWlnaHQgYmUgdGhlIGF2ZXJhZ2Ugdm9sdGFnZSBvciBjdXJyZW50IG9mIHRoZSBwd20gb3V0cHV0LgorICogTmV2ZXJ0aGVsZXNzLCBpdCBpcyBtb3JlIGZpbmUtZ3JhaW5lZCB0aGFuIHRoZSBhY3R1YWwgUlBNIHJlYWRpbmcgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHB3bV9sb29rdXBfdGFibGVbMjU2XSA9IHsKKwkwLCAwLCAwLCAxLCAxLCAxLCAyLCAyNTMsIDI1NCwgMywgMywgMywgNCwgNCwgNCwgNSwgNSwgNSwgNiwgNiwgNiwKKwk3LCA3LCA3LCA4LCA4NiwgODYsIDksIDksIDksIDEwLCAxMCwgMTAsIDExLCA5MiwgOTIsIDEyLCAxMiwgOTUsCisJMTMsIDY2LCA2NiwgMTQsIDE0LCA5OCwgMTUsIDE1LCAxNSwgMTYsIDE2LCA2NywgMTcsIDE3LCA3MiwgMTgsIDcwLAorCTc1LCAxOSwgOTAsIDkwLCA3MywgNzMsIDczLCAyMSwgMjEsIDkxLCA5MSwgOTEsIDk2LCAyMywgOTQsIDk0LCA5NCwKKwk5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgMTQxLCAxNDEsIDIzOCwgMjIzLCAxOTIsIDEzOSwgMTM5LCAxMzksCisJMTM5LCAxMzksIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc2LCA3NiwgNzYsCisJNzYsIDc2LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMiwgMjIsIDIyLAorCTIyLCAyMiwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjE5LCAyMTksIDIxOSwgMjE5LCAyMTksIDIxOSwgMjE5LAorCTIxOSwgMjcsIDI3LCAxODgsIDE4OCwgMjgsIDI4LCAyOCwgMjksIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LAorCTE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMyLCAzMiwgMzIsIDQxLCAzMywKKwkzMywgMzMsIDMzLCAzMywgMjUyLCAyNTIsIDM0LCAzNCwgMzQsIDQzLCAzNSwgMzUsIDM1LCAzNiwgMzYsIDM4LAorCTIwNiwgMjA2LCAyMDYsIDIwNiwgMjA2LCAyMDYsIDIwNiwgMjA2LCAyMDYsIDM3LCAzNywgMzcsIDQ2LCA0NiwKKwk0NywgNDcsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNDgsIDQ4LAorCTQ4LCA0OCwgNDgsIDQwLCA0MCwgNDAsIDQ5LCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQ0LAorCTE4OSwgMTg5LCAxODksIDE4OSwgNTQsIDU0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDI1MSwKKwkxOTEsIDE5OSwgMTk5LCAxOTksIDE5OSwgMTk5LCAyMTUsIDIxNSwgMjE1LCAyMTUsIDE4NywgMTg3LCAxODcsCisJMTg3LCAxODcsIDE5MywgNTAKK307CisKKworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qIEhhcmR3YXJlIGFjY2VzcyBmdW5jdGlvbnMgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qIEdlbmVyYWwgYWNjZXNzICovCitzdGF0aWMgdTggZWNfcmVhZF91OCh1OCBhZGRyKQogewotCWlmIChsZXZlbCA8IDAgfHwgbGV2ZWwgPj0gQ09NUEFMX0xDRF9MRVZFTF9NQVgpCisJdTggdmFsdWU7CisJZWNfcmVhZChhZGRyLCAmdmFsdWUpOworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHM4IGVjX3JlYWRfczgodTggYWRkcikKK3sKKwlyZXR1cm4gKHM4KWVjX3JlYWRfdTgoYWRkcik7Cit9CisKK3N0YXRpYyB1MTYgZWNfcmVhZF91MTYodTggYWRkcikKK3sKKwlpbnQgaGksIGxvOworCWxvID0gZWNfcmVhZF91OChhZGRyKTsKKwloaSA9IGVjX3JlYWRfdTgoYWRkciArIDEpOworCXJldHVybiAoaGkgPDwgOCkgKyBsbzsKK30KKworc3RhdGljIHMxNiBlY19yZWFkX3MxNih1OCBhZGRyKQoreworCXJldHVybiAoczE2KSBlY19yZWFkX3UxNihhZGRyKTsKK30KKworc3RhdGljIHZvaWQgZWNfcmVhZF9zZXF1ZW5jZSh1OCBhZGRyLCB1OCAqYnVmLCBpbnQgbGVuKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJZWNfcmVhZChhZGRyICsgaSwgYnVmICsgaSk7Cit9CisKKworLyogQmFja2xpZ2h0IGFjY2VzcyAqLworc3RhdGljIGludCBzZXRfYmFja2xpZ2h0X2xldmVsKGludCBsZXZlbCkKK3sKKwlpZiAobGV2ZWwgPCAwIHx8IGxldmVsID4gQkFDS0xJR0hUX0xFVkVMX01BWCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQllY193cml0ZShDT01QQUxfRUNfQ09NTUFORF9MQ0RfTEVWRUwsIGxldmVsKTsKKwllY193cml0ZShCQUNLTElHSFRfTEVWRUxfQUREUiwgbGV2ZWwpOwogCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2JhY2tsaWdodF9sZXZlbCh2b2lkKQoreworCXJldHVybiAoaW50KSBlY19yZWFkX3U4KEJBQ0tMSUdIVF9MRVZFTF9BRERSKTsKK30KKworc3RhdGljIHZvaWQgc2V0X2JhY2tsaWdodF9zdGF0ZShib29sIG9uKQoreworCXU4IGRhdGEgPSBvbiA/IEJBQ0tMSUdIVF9TVEFURV9PTl9EQVRBIDogQkFDS0xJR0hUX1NUQVRFX09GRl9EQVRBOworCWVjX3RyYW5zYWN0aW9uKEJBQ0tMSUdIVF9TVEFURV9BRERSLCAmZGF0YSwgMSwgTlVMTCwgMCwgMCk7Cit9CisKKworLyogRmFuIGNvbnRyb2wgYWNjZXNzICovCitzdGF0aWMgdm9pZCBwd21fZW5hYmxlX2NvbnRyb2wodm9pZCkKK3sKKwl1bnNpZ25lZCBjaGFyIHdyaXRlRGF0YSA9IFBXTV9FTkFCTEVfREFUQTsKKwllY190cmFuc2FjdGlvbihQV01fRU5BQkxFX0FERFIsICZ3cml0ZURhdGEsIDEsIE5VTEwsIDAsIDApOworfQorCitzdGF0aWMgdm9pZCBwd21fZGlzYWJsZV9jb250cm9sKHZvaWQpCit7CisJdW5zaWduZWQgY2hhciB3cml0ZURhdGEgPSBQV01fRElTQUJMRV9EQVRBOworCWVjX3RyYW5zYWN0aW9uKFBXTV9ESVNBQkxFX0FERFIsICZ3cml0ZURhdGEsIDEsIE5VTEwsIDAsIDApOworfQorCitzdGF0aWMgdm9pZCBzZXRfcHdtKGludCBwd20pCit7CisJZWNfdHJhbnNhY3Rpb24oUFdNX0FERFJFU1MsICZwd21fbG9va3VwX3RhYmxlW3B3bV0sIDEsIE5VTEwsIDAsIDApOworfQorCitzdGF0aWMgaW50IGdldF9mYW5fcnBtKHZvaWQpCit7CisJdTggdmFsdWUsIGRhdGEgPSBGQU5fREFUQTsKKwllY190cmFuc2FjdGlvbihGQU5fQUREUkVTUywgJmRhdGEsIDEsICZ2YWx1ZSwgMSwgMCk7CisJcmV0dXJuIDEwMCAqIChpbnQpdmFsdWU7Cit9CisKKworCisKKy8qID09PT09PT09PT09PT09PT09PT0gKi8KKy8qIEludGVyZmFjZSBmdW5jdGlvbnMgKi8KKy8qID09PT09PT09PT09PT09PT09PT0gKi8KKworLyogQmFja2xpZ2h0IGludGVyZmFjZSAqLworc3RhdGljIGludCBibF9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYikKK3sKKwlyZXR1cm4gZ2V0X2JhY2tsaWdodF9sZXZlbCgpOworfQorCitzdGF0aWMgaW50IGJsX3VwZGF0ZV9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmIpCit7CisJaW50IHJldCA9IHNldF9iYWNrbGlnaHRfbGV2ZWwoYi0+cHJvcHMuYnJpZ2h0bmVzcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNldF9iYWNrbGlnaHRfc3RhdGUoKGItPnByb3BzLnBvd2VyID09IEZCX0JMQU5LX1VOQkxBTkspCisJCSYmICAgICEoYi0+cHJvcHMuc3RhdGUgJiBCTF9DT1JFX1NVU1BFTkRFRCkKKwkJJiYgICAgIShiLT5wcm9wcy5zdGF0ZSAmIEJMX0NPUkVfRkJCTEFOSykpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdldF9sY2RfbGV2ZWwodm9pZCkKLXsKLQl1OCByZXN1bHQ7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgY29tcGFsYmxfb3BzID0geworCS5nZXRfYnJpZ2h0bmVzcyA9IGJsX2dldF9icmlnaHRuZXNzLAorCS51cGRhdGVfc3RhdHVzCT0gYmxfdXBkYXRlX3N0YXR1cywKK307CiAKLQllY19yZWFkKENPTVBBTF9FQ19DT01NQU5EX0xDRF9MRVZFTCwgJnJlc3VsdCk7CiAKLQlyZXR1cm4gKGludCkgcmVzdWx0OwotfQotCisvKiBXaXJlbGVzcyBpbnRlcmZhY2UgKi8KIHN0YXRpYyBpbnQgY29tcGFsX3Jma2lsbF9zZXQodm9pZCAqZGF0YSwgYm9vbCBibG9ja2VkKQogewogCXVuc2lnbmVkIGxvbmcgcmFkaW8gPSAodW5zaWduZWQgbG9uZykgZGF0YTsKLQl1OCByZXN1bHQsIHZhbHVlOwotCi0JZWNfcmVhZChDT01QQUxfRUNfQ09NTUFORF9XSVJFTEVTUywgJnJlc3VsdCk7CisJdTggcmVzdWx0ID0gZWNfcmVhZF91OChXSVJFTEVTU19BRERSKTsKKwl1OCB2YWx1ZTsKIAogCWlmICghYmxvY2tlZCkKIAkJdmFsdWUgPSAodTgpIChyZXN1bHQgfCByYWRpbyk7CiAJZWxzZQogCQl2YWx1ZSA9ICh1OCkgKHJlc3VsdCAmIH5yYWRpbyk7Ci0JZWNfd3JpdGUoQ09NUEFMX0VDX0NPTU1BTkRfV0lSRUxFU1MsIHZhbHVlKTsKKwllY193cml0ZShXSVJFTEVTU19BRERSLCB2YWx1ZSk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgY29tcGFsX3Jma2lsbF9wb2xsKHN0cnVjdCByZmtpbGwgKnJma2lsbCwgdm9pZCAqZGF0YSkKIHsKLQl1OCByZXN1bHQ7Ci0JYm9vbCBod19ibG9ja2VkOwotCi0JZWNfcmVhZChDT01QQUxfRUNfQ09NTUFORF9XSVJFTEVTUywgJnJlc3VsdCk7Ci0KLQlod19ibG9ja2VkID0gIShyZXN1bHQgJiBLSUxMU1dJVENIX01BU0spOworCXU4IHJlc3VsdCA9IGVjX3JlYWRfdTgoV0lSRUxFU1NfQUREUik7CisJYm9vbCBod19ibG9ja2VkID0gIShyZXN1bHQgJiBXSVJFTEVTU19LSUxMU1dJVENIKTsKIAlyZmtpbGxfc2V0X2h3X3N0YXRlKHJma2lsbCwgaHdfYmxvY2tlZCk7CiB9CiAKQEAgLTExNiw4MCArMzc0LDQwNCBAQAogCS5zZXRfYmxvY2sgPSBjb21wYWxfcmZraWxsX3NldCwKIH07CiAKLXN0YXRpYyBpbnQgc2V0dXBfcmZraWxsKHZvaWQpCisKKy8qIFdha2VfdXAgaW50ZXJmYWNlICovCisjZGVmaW5lIFNJTVBMRV9NQVNLRURfU1RPUkVfU0hPVyhOQU1FLCBBRERSLCBNQVNLKQkJCVwKK3N0YXRpYyBzc2l6ZV90IE5BTUUjI19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwJCQkJXAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCQkJXAorewkJCQkJCQkJCVwKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgKChlY19yZWFkX3U4KEFERFIpICYgTUFTSykgIT0gMCkpOwlcCit9CQkJCQkJCQkJXAorc3RhdGljIHNzaXplX3QgTkFNRSMjX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwJCQkJXAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJXAorewkJCQkJCQkJCVwKKwlpbnQgc3RhdGU7CQkJCQkJCVwKKwl1OCBvbGRfdmFsID0gZWNfcmVhZF91OChBRERSKTsJCQkJCVwKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJnN0YXRlKSAhPSAxIHx8IChzdGF0ZSA8IDAgfHwgc3RhdGUgPiAxKSkJXAorCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCisJZWNfd3JpdGUoQUREUiwgc3RhdGUgPyAob2xkX3ZhbCB8IE1BU0spIDogKG9sZF92YWwgJiB+TUFTSykpOwlcCisJcmV0dXJuIGNvdW50OwkJCQkJCQlcCit9CisKK1NJTVBMRV9NQVNLRURfU1RPUkVfU0hPVyh3YWtlX3VwX3BtZSwJV0FLRV9VUF9BRERSLCBXQUtFX1VQX1BNRSkKK1NJTVBMRV9NQVNLRURfU1RPUkVfU0hPVyh3YWtlX3VwX21vZGVtLAlXQUtFX1VQX0FERFIsIFdBS0VfVVBfTU9ERU0pCitTSU1QTEVfTUFTS0VEX1NUT1JFX1NIT1cod2FrZV91cF9sYW4sCVdBS0VfVVBfQUREUiwgV0FLRV9VUF9MQU4pCitTSU1QTEVfTUFTS0VEX1NUT1JFX1NIT1cod2FrZV91cF93bGFuLAlXQUtFX1VQX0FERFIsIFdBS0VfVVBfV0xBTikKK1NJTVBMRV9NQVNLRURfU1RPUkVfU0hPVyh3YWtlX3VwX2tleSwJV0FLRV9VUF9BRERSLCBXQUtFX1VQX0tFWSkKK1NJTVBMRV9NQVNLRURfU1RPUkVfU0hPVyh3YWtlX3VwX21vdXNlLAlXQUtFX1VQX0FERFIsIFdBS0VfVVBfTU9VU0UpCisKKworLyogR2VuZXJhbCBod21vbiBpbnRlcmZhY2UgKi8KK3N0YXRpYyBzc2l6ZV90IGh3bW9uX25hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0JaW50IHJldDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgRFJJVkVSX05BTUUpOworfQogCi0Jd2lmaV9yZmtpbGwgPSByZmtpbGxfYWxsb2MoImNvbXBhbC13aWZpIiwgJmNvbXBhbF9kZXZpY2UtPmRldiwKLQkJCQlSRktJTExfVFlQRV9XTEFOLCAmY29tcGFsX3Jma2lsbF9vcHMsCi0JCQkJKHZvaWQgKikgV0xBTl9NQVNLKTsKLQlpZiAoIXdpZmlfcmZraWxsKQotCQlyZXR1cm4gLUVOT01FTTsKIAotCXJldCA9IHJma2lsbF9yZWdpc3Rlcih3aWZpX3Jma2lsbCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJfd2lmaTsKKy8qIEZhbiBjb250cm9sIGludGVyZmFjZSAqLworc3RhdGljIHNzaXplX3QgcHdtX2VuYWJsZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgY29tcGFsX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+cHdtX2VuYWJsZSk7Cit9CiAKLQlidF9yZmtpbGwgPSByZmtpbGxfYWxsb2MoImNvbXBhbC1ibHVldG9vdGgiLCAmY29tcGFsX2RldmljZS0+ZGV2LAotCQkJCVJGS0lMTF9UWVBFX0JMVUVUT09USCwgJmNvbXBhbF9yZmtpbGxfb3BzLAotCQkJCSh2b2lkICopIEJUX01BU0spOwotCWlmICghYnRfcmZraWxsKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2FsbG9jYXRlX2J0Oworc3RhdGljIHNzaXplX3QgcHdtX2VuYWJsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgY29tcGFsX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlsb25nIHZhbDsKKwlpbnQgZXJyOworCWVyciA9IHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnZhbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlpZiAodmFsIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkYXRhLT5wd21fZW5hYmxlID0gdmFsOworCisJc3dpdGNoICh2YWwpIHsKKwljYXNlIDA6ICAvKiBGdWxsIHNwZWVkICovCisJCXB3bV9lbmFibGVfY29udHJvbCgpOworCQlzZXRfcHdtKDI1NSk7CisJCWJyZWFrOworCWNhc2UgMTogIC8qIEFzIHNldCBieSBwd20xICovCisJCXB3bV9lbmFibGVfY29udHJvbCgpOworCQlzZXRfcHdtKGRhdGEtPmN1cnJfcHdtKTsKKwkJYnJlYWs7CisJZGVmYXVsdDogLyogQ29udHJvbCBieSBtb3RoZXJib2FyZCAqLworCQlwd21fZGlzYWJsZV9jb250cm9sKCk7CisJCWJyZWFrOwogCX0KLQlyZXQgPSByZmtpbGxfcmVnaXN0ZXIoYnRfcmZraWxsKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9yZWdpc3Rlcl9idDsKIAorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgcHdtX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKQoreworCXN0cnVjdCBjb21wYWxfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVoaHVcbiIsIGRhdGEtPmN1cnJfcHdtKTsKK30KKworc3RhdGljIHNzaXplX3QgcHdtX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBjb21wYWxfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWxvbmcgdmFsOworCWludCBlcnI7CisJZXJyID0gc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWlmICh2YWwgPCAwIHx8IHZhbCA+IDI1NSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkYXRhLT5jdXJyX3B3bSA9IHZhbDsKKworCWlmIChkYXRhLT5wd21fZW5hYmxlICE9IDEpCisJCXJldHVybiBjb3VudDsKKwlzZXRfcHdtKHZhbCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGZhbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZ2V0X2Zhbl9ycG0oKSk7Cit9CisKKworLyogVGVtcGVyYXR1cmUgaW50ZXJmYWNlICovCisjZGVmaW5lIFRFTVBFUkFUVVJFX1NIT1dfVEVNUF9BTkRfTEFCRUwoUE9TVEZJWCwgQUREUkVTUywgTEFCRUwpCVwKK3N0YXRpYyBzc2l6ZV90IHRlbXBfIyNQT1NURklYKHN0cnVjdCBkZXZpY2UgKmRldiwJCQlcCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCQlcCit7CQkJCQkJCQkJXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAxMDAwICogKGludCllY19yZWFkX3M4KEFERFJFU1MpKTsJXAorfQkJCQkJCQkJCVwKK3N0YXRpYyBzc2l6ZV90IGxhYmVsXyMjUE9TVEZJWChzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJXAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQkJXAorewkJCQkJCQkJCVwKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgTEFCRUwpOwkJCQlcCit9CisKKy8qIExhYmVscyBhcyBpbiBzZXJ2aWNlIGd1aWRlICovCitURU1QRVJBVFVSRV9TSE9XX1RFTVBfQU5EX0xBQkVMKGNwdSwgICAgICAgIFRFTVBfQ1BVLCAgICAgICAgIkNQVV9URU1QIik7CitURU1QRVJBVFVSRV9TSE9XX1RFTVBfQU5EX0xBQkVMKGNwdV9sb2NhbCwgIFRFTVBfQ1BVX0xPQ0FMLCAgIkNQVV9URU1QX0xPQ0FMIik7CitURU1QRVJBVFVSRV9TSE9XX1RFTVBfQU5EX0xBQkVMKGNwdV9EVFMsICAgIFRFTVBfQ1BVX0RUUywgICAgIkNQVV9EVFMiKTsKK1RFTVBFUkFUVVJFX1NIT1dfVEVNUF9BTkRfTEFCRUwobm9ydGhicmlkZ2UsVEVNUF9OT1JUSEJSSURHRSwiTm9ydGhCcmlkZ2UiKTsKK1RFTVBFUkFUVVJFX1NIT1dfVEVNUF9BTkRfTEFCRUwodmdhLCAgICAgICAgVEVNUF9WR0EsICAgICAgICAiVkdBX1RFTVAiKTsKK1RFTVBFUkFUVVJFX1NIT1dfVEVNUF9BTkRfTEFCRUwoU0tJTiwgICAgICAgVEVNUF9TS0lOLCAgICAgICAiU0tJTl9URU1QOTAiKTsKKworCisvKiBQb3dlciBzdXBwbHkgaW50ZXJmYWNlICovCitzdGF0aWMgaW50IGJhdF9zdGF0dXModm9pZCkKK3sKKwl1OCBzdGF0dXMwID0gZWNfcmVhZF91OChCQVRfU1RBVFVTMCk7CisJdTggc3RhdHVzMSA9IGVjX3JlYWRfdTgoQkFUX1NUQVRVUzEpOworCisJaWYgKHN0YXR1czAgJiBCQVRfUzBfQ0hBUkdJTkcpCisJCXJldHVybiBQT1dFUl9TVVBQTFlfU1RBVFVTX0NIQVJHSU5HOworCWlmIChzdGF0dXMwICYgQkFUX1MwX0RJU0NIQVJHRSkKKwkJcmV0dXJuIFBPV0VSX1NVUFBMWV9TVEFUVVNfRElTQ0hBUkdJTkc7CisJaWYgKHN0YXR1czEgJiBCQVRfUzFfRlVMTCkKKwkJcmV0dXJuIFBPV0VSX1NVUFBMWV9TVEFUVVNfRlVMTDsKKwlyZXR1cm4gUE9XRVJfU1VQUExZX1NUQVRVU19OT1RfQ0hBUkdJTkc7Cit9CisKK3N0YXRpYyBpbnQgYmF0X2hlYWx0aCh2b2lkKQoreworCXU4IHN0YXR1cyA9IGVjX3JlYWRfdTgoQkFUX1NUT1BfQ0hBUkdFMSk7CisKKwlpZiAoc3RhdHVzICYgQkFUX1NUT1BfQ0hSRzFfT1ZFUlRFTVBFUkFUVVJFKQorCQlyZXR1cm4gUE9XRVJfU1VQUExZX0hFQUxUSF9PVkVSSEVBVDsKKwlpZiAoc3RhdHVzICYgQkFUX1NUT1BfQ0hSRzFfT1ZFUlZPTFRBR0UpCisJCXJldHVybiBQT1dFUl9TVVBQTFlfSEVBTFRIX09WRVJWT0xUQUdFOworCWlmIChzdGF0dXMgJiBCQVRfU1RPUF9DSFJHMV9CQURfQ0VMTCkKKwkJcmV0dXJuIFBPV0VSX1NVUFBMWV9IRUFMVEhfREVBRDsKKwlpZiAoc3RhdHVzICYgQkFUX1NUT1BfQ0hSRzFfQ09NTV9GQUlMKQorCQlyZXR1cm4gUE9XRVJfU1VQUExZX0hFQUxUSF9VTktOT1dOOworCXJldHVybiBQT1dFUl9TVVBQTFlfSEVBTFRIX0dPT0Q7Cit9CisKK3N0YXRpYyBpbnQgYmF0X2lzX3ByZXNlbnQodm9pZCkKK3sKKwl1OCBzdGF0dXMgPSBlY19yZWFkX3U4KEJBVF9TVEFUVVMyKTsKKwlyZXR1cm4gKChzdGF0dXMgJiBCQVRfUzFfRVhJU1RTKSAhPSAwKTsKK30KKworc3RhdGljIGludCBiYXRfdGVjaG5vbG9neSh2b2lkKQoreworCXU4IHN0YXR1cyA9IGVjX3JlYWRfdTgoQkFUX1NUQVRVUzEpOworCisJaWYgKHN0YXR1cyAmIEJBVF9TMV9MaUlPTl9PUl9OaU1IKQorCQlyZXR1cm4gUE9XRVJfU1VQUExZX1RFQ0hOT0xPR1lfTElPTjsKKwlyZXR1cm4gUE9XRVJfU1VQUExZX1RFQ0hOT0xPR1lfTmlNSDsKK30KKworc3RhdGljIGludCBiYXRfY2FwYWNpdHlfbGV2ZWwodm9pZCkKK3sKKwl1OCBzdGF0dXMwID0gZWNfcmVhZF91OChCQVRfU1RBVFVTMCk7CisJdTggc3RhdHVzMSA9IGVjX3JlYWRfdTgoQkFUX1NUQVRVUzEpOworCXU4IHN0YXR1czIgPSBlY19yZWFkX3U4KEJBVF9TVEFUVVMyKTsKKworCWlmIChzdGF0dXMwICYgQkFUX1MwX0RJU0NIUkdfQ1JJVElDQUwKKwkJCXx8IHN0YXR1czEgJiBCQVRfUzFfRU1QVFkKKwkJCXx8IHN0YXR1czIgJiBCQVRfUzJfTE9XX0xPVykKKwkJcmV0dXJuIFBPV0VSX1NVUFBMWV9DQVBBQ0lUWV9MRVZFTF9DUklUSUNBTDsKKwlpZiAoc3RhdHVzMCAmIEJBVF9TMF9MT1cpCisJCXJldHVybiBQT1dFUl9TVVBQTFlfQ0FQQUNJVFlfTEVWRUxfTE9XOworCWlmIChzdGF0dXMxICYgQkFUX1MxX0ZVTEwpCisJCXJldHVybiBQT1dFUl9TVVBQTFlfQ0FQQUNJVFlfTEVWRUxfRlVMTDsKKwlyZXR1cm4gUE9XRVJfU1VQUExZX0NBUEFDSVRZX0xFVkVMX05PUk1BTDsKK30KKworc3RhdGljIGludCBiYXRfZ2V0X3Byb3BlcnR5KHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSwKKwkJCQllbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBwc3AsCisJCQkJdW5pb24gcG93ZXJfc3VwcGx5X3Byb3B2YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgY29tcGFsX2RhdGEgKmRhdGE7CisJZGF0YSA9IGNvbnRhaW5lcl9vZihwc3ksIHN0cnVjdCBjb21wYWxfZGF0YSwgcHN5KTsKKworCXN3aXRjaCAocHNwKSB7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVM6CisJCXZhbC0+aW50dmFsID0gYmF0X3N0YXR1cygpOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0hFQUxUSDoKKwkJdmFsLT5pbnR2YWwgPSBiYXRfaGVhbHRoKCk7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVDoKKwkJdmFsLT5pbnR2YWwgPSBiYXRfaXNfcHJlc2VudCgpOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1RFQ0hOT0xPR1k6CisJCXZhbC0+aW50dmFsID0gYmF0X3RlY2hub2xvZ3koKTsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX01JTl9ERVNJR046IC8qIFRIRSBkZXNpZ24gdm9sdGFnZS4uLiAqLworCQl2YWwtPmludHZhbCA9IGVjX3JlYWRfdTE2KEJBVF9WT0xUQUdFX0RFU0lHTikgKiAxMDAwOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTk9XOgorCQl2YWwtPmludHZhbCA9IGVjX3JlYWRfdTE2KEJBVF9WT0xUQUdFX05PVykgKiAxMDAwOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfTk9XOgorCQl2YWwtPmludHZhbCA9IGVjX3JlYWRfczE2KEJBVF9DVVJSRU5UX05PVykgKiAxMDAwOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfQVZHOgorCQl2YWwtPmludHZhbCA9IGVjX3JlYWRfczE2KEJBVF9DVVJSRU5UX0FWRykgKiAxMDAwOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1BPV0VSX05PVzoKKwkJdmFsLT5pbnR2YWwgPSBlY19yZWFkX3U4KEJBVF9QT1dFUikgKiAxMDAwMDAwOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9GVUxMX0RFU0lHTjoKKwkJdmFsLT5pbnR2YWwgPSBlY19yZWFkX3UxNihCQVRfQ0hBUkdFX0RFU0lHTikgKiAxMDAwOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9OT1c6CisJCXZhbC0+aW50dmFsID0gZWNfcmVhZF91MTYoQkFUX0NIQVJHRV9OT1cpICogMTAwMDsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DQVBBQ0lUWToKKwkJdmFsLT5pbnR2YWwgPSBlY19yZWFkX3U4KEJBVF9DQVBBQ0lUWSk7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ0FQQUNJVFlfTEVWRUw6CisJCXZhbC0+aW50dmFsID0gYmF0X2NhcGFjaXR5X2xldmVsKCk7CisJCWJyZWFrOworCS8qIEl0IHNtZWVzIHRoYXQgQkFUX1RFTVBfQVZHIGlzIGEgKDIncyBjb21wbGVtZW50PykgdmFsdWUgc2hvd2luZworCSAqIHRoZSBudW1iZXIgb2YgZGVncmVlcywgd2hlcmVhcyBCQVRfVEVNUCBpcyBzb21ld2hhdCBtb3JlCisJICogY29tcGxpY2F0ZWQuIEl0IGxvb2tzIGxpa2UgdGhpcyBpcyBhIG5lZ2F0aXZlIG5lbWJlciB3aXRoIGEKKwkgKiAxMDAvMjU2IGRpdmlkZXIgYW5kIGFuIG9mZnNldCBvZiAyMjIuIEJvdGggd2VyZSBkZXRlcm1pbmVkCisJICogZXhwZXJpbWVudGFsbHkgYnkgY29tcGFyaW5nIEJBVF9URU1QIGFuZCBCQVRfVEVNUF9BVkcuICovCisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9URU1QOgorCQl2YWwtPmludHZhbCA9ICgoMjIyIC0gKGludCllY19yZWFkX3U4KEJBVF9URU1QKSkgKiAxMDAwKSA+PiA4OworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1RFTVBfQU1CSUVOVDogLyogQW1iaWVudCwgQXZnLCAuLi4gc2FtZSB0aGluZyAqLworCQl2YWwtPmludHZhbCA9IGVjX3JlYWRfczgoQkFUX1RFTVBfQVZHKSAqIDEwOworCQlicmVhazsKKwkvKiBOZWl0aGVyIHRoZSBtb2RlbCBuYW1lIG5vciBtYW51ZmFjdHVyZXIgbmFtZSB3b3JrIGZvciBtZS4gKi8KKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX01PREVMX05BTUU6CisJCXZhbC0+c3RydmFsID0gZGF0YS0+YmF0X21vZGVsX25hbWU7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfTUFOVUZBQ1RVUkVSOgorCQl2YWwtPnN0cnZhbCA9IGRhdGEtPmJhdF9tYW51ZmFjdHVyZXJfbmFtZTsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9TRVJJQUxfTlVNQkVSOgorCQl2YWwtPnN0cnZhbCA9IGRhdGEtPmJhdF9zZXJpYWxfbnVtYmVyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CiAJcmV0dXJuIDA7Ci0KLWVycl9yZWdpc3Rlcl9idDoKLQlyZmtpbGxfZGVzdHJveShidF9yZmtpbGwpOwotCi1lcnJfYWxsb2NhdGVfYnQ6Ci0JcmZraWxsX3VucmVnaXN0ZXIod2lmaV9yZmtpbGwpOwotCi1lcnJfd2lmaToKLQlyZmtpbGxfZGVzdHJveSh3aWZpX3Jma2lsbCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKiBCYWNrbGlnaHQgZGV2aWNlIHN0dWZmICovCi0KLXN0YXRpYyBpbnQgYmxfZ2V0X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmIpCi17Ci0JcmV0dXJuIGdldF9sY2RfbGV2ZWwoKTsKIH0KIAogCi1zdGF0aWMgaW50IGJsX3VwZGF0ZV9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmIpCi17Ci0JcmV0dXJuIHNldF9sY2RfbGV2ZWwoYi0+cHJvcHMuYnJpZ2h0bmVzcyk7Ci19CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBjb21wYWxibF9vcHMgPSB7Ci0JLmdldF9icmlnaHRuZXNzID0gYmxfZ2V0X2JyaWdodG5lc3MsCi0JLnVwZGF0ZV9zdGF0dXMJPSBibF91cGRhdGVfc3RhdHVzLAorCisKKy8qID09PT09PT09PT09PT09ICovCisvKiBEcml2ZXIgR2xvYmFscyAqLworLyogPT09PT09PT09PT09PT0gKi8KK3N0YXRpYyBERVZJQ0VfQVRUUih3YWtlX3VwX3BtZSwKKwkJMDY0NCwgd2FrZV91cF9wbWVfc2hvdywJCXdha2VfdXBfcG1lX3N0b3JlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih3YWtlX3VwX21vZGVtLAorCQkwNjQ0LCB3YWtlX3VwX21vZGVtX3Nob3csCXdha2VfdXBfbW9kZW1fc3RvcmUpOworc3RhdGljIERFVklDRV9BVFRSKHdha2VfdXBfbGFuLAorCQkwNjQ0LCB3YWtlX3VwX2xhbl9zaG93LAl3YWtlX3VwX2xhbl9zdG9yZSk7CitzdGF0aWMgREVWSUNFX0FUVFIod2FrZV91cF93bGFuLAorCQkwNjQ0LCB3YWtlX3VwX3dsYW5fc2hvdywJd2FrZV91cF93bGFuX3N0b3JlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih3YWtlX3VwX2tleSwKKwkJMDY0NCwgd2FrZV91cF9rZXlfc2hvdywJd2FrZV91cF9rZXlfc3RvcmUpOworc3RhdGljIERFVklDRV9BVFRSKHdha2VfdXBfbW91c2UsCisJCTA2NDQsIHdha2VfdXBfbW91c2Vfc2hvdywJd2FrZV91cF9tb3VzZV9zdG9yZSk7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIobmFtZSwgICAgICAgIFNfSVJVR08sIGh3bW9uX25hbWVfc2hvdywgICBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMV9pbnB1dCwgIFNfSVJVR08sIGZhbl9zaG93LCAgICAgICAgICBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfaW5wdXQsIFNfSVJVR08sIHRlbXBfY3B1LCAgICAgICAgICBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfaW5wdXQsIFNfSVJVR08sIHRlbXBfY3B1X2xvY2FsLCAgICBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfaW5wdXQsIFNfSVJVR08sIHRlbXBfY3B1X0RUUywgICAgICBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDRfaW5wdXQsIFNfSVJVR08sIHRlbXBfbm9ydGhicmlkZ2UsICBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDVfaW5wdXQsIFNfSVJVR08sIHRlbXBfdmdhLCAgICAgICAgICBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDZfaW5wdXQsIFNfSVJVR08sIHRlbXBfU0tJTiwgICAgICAgICBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbGFiZWwsIFNfSVJVR08sIGxhYmVsX2NwdSwgICAgICAgICBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfbGFiZWwsIFNfSVJVR08sIGxhYmVsX2NwdV9sb2NhbCwgICBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfbGFiZWwsIFNfSVJVR08sIGxhYmVsX2NwdV9EVFMsICAgICBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDRfbGFiZWwsIFNfSVJVR08sIGxhYmVsX25vcnRoYnJpZGdlLCBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDVfbGFiZWwsIFNfSVJVR08sIGxhYmVsX3ZnYSwgICAgICAgICBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDZfbGFiZWwsIFNfSVJVR08sIGxhYmVsX1NLSU4sICAgICAgICBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMSwgU19JUlVHTyB8IFNfSVdVU1IsIHB3bV9zaG93LCBwd21fc3RvcmUsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20xX2VuYWJsZSwKKwkJU19JUlVHTyB8IFNfSVdVU1IsIHB3bV9lbmFibGVfc2hvdywgcHdtX2VuYWJsZV9zdG9yZSwgMCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpjb21wYWxfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl93YWtlX3VwX3BtZS5hdHRyLAorCSZkZXZfYXR0cl93YWtlX3VwX21vZGVtLmF0dHIsCisJJmRldl9hdHRyX3dha2VfdXBfbGFuLmF0dHIsCisJJmRldl9hdHRyX3dha2VfdXBfd2xhbi5hdHRyLAorCSZkZXZfYXR0cl93YWtlX3VwX2tleS5hdHRyLAorCSZkZXZfYXR0cl93YWtlX3VwX21vdXNlLmF0dHIsCisJLyogTWF5YmUgcHV0IHRoZSBzZW5zb3Itc3R1ZmYgaW4gYSBzZXBhcmF0ZSBod21vbi1kcml2ZXI/IFRoYXQgd2F5LAorCSAqIHRoZSBod21vbiBzeXNmcyB3b24ndCBiZSBjbHV0dGVyZWQgd2l0aCB0aGUgYWJvdmUgZmlsZXMuICovCisJJnNlbnNvcl9kZXZfYXR0cl9uYW1lLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbGFiZWwuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2xhYmVsLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19sYWJlbC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfbGFiZWwuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X2xhYmVsLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNl9sYWJlbC5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGNvbXBhbF9hdHRyaWJ1dGVfZ3JvdXAgPSB7CisJLmF0dHJzID0gY29tcGFsX2F0dHJpYnV0ZXMKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGNvbXBhbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOworc3RhdGljIGludCBfX2RldmV4aXQgY29tcGFsX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY29tcGFsX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9IERSSVZFUl9OQU1FLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQk9IGNvbXBhbF9wcm9iZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3AoY29tcGFsX3JlbW92ZSkKK307CisKK3N0YXRpYyBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBjb21wYWxfYmF0X3Byb3BlcnRpZXNbXSA9IHsKKwlQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVMsCisJUE9XRVJfU1VQUExZX1BST1BfSEVBTFRILAorCVBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQsCisJUE9XRVJfU1VQUExZX1BST1BfVEVDSE5PTE9HWSwKKwlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX01JTl9ERVNJR04sCisJUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9OT1csCisJUE9XRVJfU1VQUExZX1BST1BfQ1VSUkVOVF9OT1csCisJUE9XRVJfU1VQUExZX1BST1BfQ1VSUkVOVF9BVkcsCisJUE9XRVJfU1VQUExZX1BST1BfUE9XRVJfTk9XLAorCVBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9GVUxMX0RFU0lHTiwKKwlQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfTk9XLAorCVBPV0VSX1NVUFBMWV9QUk9QX0NBUEFDSVRZLAorCVBPV0VSX1NVUFBMWV9QUk9QX0NBUEFDSVRZX0xFVkVMLAorCVBPV0VSX1NVUFBMWV9QUk9QX1RFTVAsCisJUE9XRVJfU1VQUExZX1BST1BfVEVNUF9BTUJJRU5ULAorCVBPV0VSX1NVUFBMWV9QUk9QX01PREVMX05BTUUsCisJUE9XRVJfU1VQUExZX1BST1BfTUFOVUZBQ1RVUkVSLAorCVBPV0VSX1NVUFBMWV9QUk9QX1NFUklBTF9OVU1CRVIsCiB9OwogCiBzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmNvbXBhbGJsX2RldmljZTsKIAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmNvbXBhbF9kZXZpY2U7CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNvbXBhbF9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAiY29tcGFsLWxhcHRvcCIsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCX0KLX07CitzdGF0aWMgc3RydWN0IHJma2lsbCAqd2lmaV9yZmtpbGw7CitzdGF0aWMgc3RydWN0IHJma2lsbCAqYnRfcmZraWxsOwogCi0vKiBJbml0aWFsaXphdGlvbiAqLworCisKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogSW5pdGlhbGl6YXRpb24gJiBjbGVhbi11cCBmdW5jdGlvbnMgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAKIHN0YXRpYyBpbnQgZG1pX2NoZWNrX2NiKGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKIHsKLQlwcmludGsoS0VSTl9JTkZPICJjb21wYWwtbGFwdG9wOiBJZGVudGlmaWVkIGxhcHRvcCBtb2RlbCAnJXMnLlxuIiwKKwlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FIjogSWRlbnRpZmllZCBsYXB0b3AgbW9kZWwgJyVzJ1xuIiwKIAkJaWQtPmlkZW50KTsKKwlleHRyYV9mZWF0dXJlcyA9IGZhbHNlOworCXJldHVybiAwOworfQogCitzdGF0aWMgaW50IGRtaV9jaGVja19jYl9leHRyYShjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSI6IElkZW50aWZpZWQgbGFwdG9wIG1vZGVsICclcycsICIKKwkJImVuYWJsaW5nIGV4dHJhIGZlYXR1cmVzXG4iLAorCQlpZC0+aWRlbnQpOworCWV4dHJhX2ZlYXR1cmVzID0gdHJ1ZTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjc0LDI3ICs4NTYsMTA2IEBACiAJCX0sCiAJCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYgogCX0sCi0KKwl7CisJCS5pZGVudCA9ICJKSEw5MCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiSkhMOTAiKSwKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfVkVSU0lPTiwgIlJFRkVSRU5DRSIpLAorCQl9LAorCQkuY2FsbGJhY2sgPSBkbWlfY2hlY2tfY2JfZXh0cmEKKwl9LAogCXsgfQogfTsKIAorc3RhdGljIHZvaWQgaW5pdGlhbGl6ZV9wb3dlcl9zdXBwbHlfZGF0YShzdHJ1Y3QgY29tcGFsX2RhdGEgKmRhdGEpCit7CisJZGF0YS0+cHN5Lm5hbWUgPSBEUklWRVJfTkFNRTsKKwlkYXRhLT5wc3kudHlwZSA9IFBPV0VSX1NVUFBMWV9UWVBFX0JBVFRFUlk7CisJZGF0YS0+cHN5LnByb3BlcnRpZXMgPSBjb21wYWxfYmF0X3Byb3BlcnRpZXM7CisJZGF0YS0+cHN5Lm51bV9wcm9wZXJ0aWVzID0gQVJSQVlfU0laRShjb21wYWxfYmF0X3Byb3BlcnRpZXMpOworCWRhdGEtPnBzeS5nZXRfcHJvcGVydHkgPSBiYXRfZ2V0X3Byb3BlcnR5OworCisJZWNfcmVhZF9zZXF1ZW5jZShCQVRfTUFOVUZBQ1RVUkVSX05BTUVfQUREUiwKKwkJCQkJZGF0YS0+YmF0X21hbnVmYWN0dXJlcl9uYW1lLAorCQkJCQlCQVRfTUFOVUZBQ1RVUkVSX05BTUVfTEVOKTsKKwlkYXRhLT5iYXRfbWFudWZhY3R1cmVyX25hbWVbQkFUX01BTlVGQUNUVVJFUl9OQU1FX0xFTl0gPSAwOworCisJZWNfcmVhZF9zZXF1ZW5jZShCQVRfTU9ERUxfTkFNRV9BRERSLAorCQkJCQlkYXRhLT5iYXRfbW9kZWxfbmFtZSwKKwkJCQkJQkFUX01PREVMX05BTUVfTEVOKTsKKwlkYXRhLT5iYXRfbW9kZWxfbmFtZVtCQVRfTU9ERUxfTkFNRV9MRU5dID0gMDsKKworCXNjbnByaW50ZihkYXRhLT5iYXRfc2VyaWFsX251bWJlciwgQkFUX1NFUklBTF9OVU1CRVJfTEVOICsgMSwgIiVkIiwKKwkJCQllY19yZWFkX3UxNihCQVRfU0VSSUFMX05VTUJFUl9BRERSKSk7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVfZmFuX2NvbnRyb2xfZGF0YShzdHJ1Y3QgY29tcGFsX2RhdGEgKmRhdGEpCit7CisJZGF0YS0+cHdtX2VuYWJsZSA9IDI7IC8qIEtlZXAgbW90aGVyYm9hcmQgaW4gY29udHJvbCBmb3Igbm93ICovCisJZGF0YS0+Y3Vycl9wd20gPSAyNTU7IC8qIFRyeSBub3QgdG8gY2F1c2UgYSBDUFVfb25fZmlyZSBleGNlcHRpb24KKwkJCQkgaWYgd2UgdGFrZSBvdmVyLi4uICovCit9CisKK3N0YXRpYyBpbnQgc2V0dXBfcmZraWxsKHZvaWQpCit7CisJaW50IHJldDsKKworCXdpZmlfcmZraWxsID0gcmZraWxsX2FsbG9jKCJjb21wYWwtd2lmaSIsICZjb21wYWxfZGV2aWNlLT5kZXYsCisJCQkJUkZLSUxMX1RZUEVfV0xBTiwgJmNvbXBhbF9yZmtpbGxfb3BzLAorCQkJCSh2b2lkICopIFdJUkVMRVNTX1dMQU4pOworCWlmICghd2lmaV9yZmtpbGwpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gcmZraWxsX3JlZ2lzdGVyKHdpZmlfcmZraWxsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl93aWZpOworCisJYnRfcmZraWxsID0gcmZraWxsX2FsbG9jKCJjb21wYWwtYmx1ZXRvb3RoIiwgJmNvbXBhbF9kZXZpY2UtPmRldiwKKwkJCQlSRktJTExfVFlQRV9CTFVFVE9PVEgsICZjb21wYWxfcmZraWxsX29wcywKKwkJCQkodm9pZCAqKSBXSVJFTEVTU19CVCk7CisJaWYgKCFidF9yZmtpbGwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfYWxsb2NhdGVfYnQ7CisJfQorCXJldCA9IHJma2lsbF9yZWdpc3RlcihidF9yZmtpbGwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3JlZ2lzdGVyX2J0OworCisJcmV0dXJuIDA7CisKK2Vycl9yZWdpc3Rlcl9idDoKKwlyZmtpbGxfZGVzdHJveShidF9yZmtpbGwpOworCitlcnJfYWxsb2NhdGVfYnQ6CisJcmZraWxsX3VucmVnaXN0ZXIod2lmaV9yZmtpbGwpOworCitlcnJfd2lmaToKKwlyZmtpbGxfZGVzdHJveSh3aWZpX3Jma2lsbCk7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IF9faW5pdCBjb21wYWxfaW5pdCh2b2lkKQogewogCWludCByZXQ7CiAKLQlpZiAoYWNwaV9kaXNhYmxlZCkKKwlpZiAoYWNwaV9kaXNhYmxlZCkgeworCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUiOiBBQ1BJIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yICIKKwkJCQkJCSJ0aGlzIGRyaXZlciB0byB3b3JrIVxuIik7CiAJCXJldHVybiAtRU5PREVWOworCX0KIAotCWlmICghZm9yY2UgJiYgIWRtaV9jaGVja19zeXN0ZW0oY29tcGFsX2RtaV90YWJsZSkpCisJaWYgKCFmb3JjZSAmJiAhZG1pX2NoZWNrX3N5c3RlbShjb21wYWxfZG1pX3RhYmxlKSkgeworCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUiOiBNb3RoZXJib2FyZCBub3QgcmVjb2duaXplZCAoWW91ICIKKwkJCQkiY291bGQgdHJ5IHRoZSBtb2R1bGUncyBmb3JjZS1wYXJhbWV0ZXIpIik7CiAJCXJldHVybiAtRU5PREVWOwotCi0JLyogUmVnaXN0ZXIgYmFja2xpZ2h0IHN0dWZmICovCisJfQogCiAJaWYgKCFhY3BpX3ZpZGVvX2JhY2tsaWdodF9zdXBwb3J0KCkpIHsKIAkJc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIHByb3BzOwogCQltZW1zZXQoJnByb3BzLCAwLCBzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzKSk7Ci0JCXByb3BzLm1heF9icmlnaHRuZXNzID0gQ09NUEFMX0xDRF9MRVZFTF9NQVggLSAxOwotCQljb21wYWxibF9kZXZpY2UgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJjb21wYWwtbGFwdG9wIiwKKwkJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBCQUNLTElHSFRfTEVWRUxfTUFYOworCQljb21wYWxibF9kZXZpY2UgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKERSSVZFUl9OQU1FLAogCQkJCQkJCSAgICBOVUxMLCBOVUxMLAogCQkJCQkJCSAgICAmY29tcGFsYmxfb3BzLAogCQkJCQkJCSAgICAmcHJvcHMpOwpAQCAtMzA0LDY3ICs5NjUsMTIyIEBACiAKIAlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmNvbXBhbF9kcml2ZXIpOwogCWlmIChyZXQpCi0JCWdvdG8gZmFpbF9iYWNrbGlnaHQ7CisJCWdvdG8gZXJyX2JhY2tsaWdodDsKIAotCS8qIFJlZ2lzdGVyIHBsYXRmb3JtIHN0dWZmICovCi0KLQljb21wYWxfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJjb21wYWwtbGFwdG9wIiwgLTEpOworCWNvbXBhbF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoRFJJVkVSX05BTUUsIC0xKTsKIAlpZiAoIWNvbXBhbF9kZXZpY2UpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBmYWlsX3BsYXRmb3JtX2RyaXZlcjsKKwkJZ290byBlcnJfcGxhdGZvcm1fZHJpdmVyOwogCX0KIAotCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoY29tcGFsX2RldmljZSk7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChjb21wYWxfZGV2aWNlKTsgLyogVGhpcyBjYWxscyBjb21wYWxfcHJvYmUgKi8KIAlpZiAocmV0KQotCQlnb3RvIGZhaWxfcGxhdGZvcm1fZGV2aWNlOworCQlnb3RvIGVycl9wbGF0Zm9ybV9kZXZpY2U7CiAKIAlyZXQgPSBzZXR1cF9yZmtpbGwoKTsKIAlpZiAocmV0KQotCQlnb3RvIGZhaWxfcmZraWxsOworCQlnb3RvIGVycl9yZmtpbGw7CiAKLQlwcmludGsoS0VSTl9JTkZPICJjb21wYWwtbGFwdG9wOiBkcml2ZXIgIkNPTVBBTF9EUklWRVJfVkVSU0lPTgotCQkiIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4iKTsKLQorCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUiOiBEcml2ZXIgIkRSSVZFUl9WRVJTSU9OCisJCQkJCQkiIHN1Y2Nlc3NmdWxseSBsb2FkZWRcbiIpOwogCXJldHVybiAwOwogCi1mYWlsX3Jma2lsbDoKK2Vycl9yZmtpbGw6CiAJcGxhdGZvcm1fZGV2aWNlX2RlbChjb21wYWxfZGV2aWNlKTsKIAotZmFpbF9wbGF0Zm9ybV9kZXZpY2U6Ci0KK2Vycl9wbGF0Zm9ybV9kZXZpY2U6CiAJcGxhdGZvcm1fZGV2aWNlX3B1dChjb21wYWxfZGV2aWNlKTsKIAotZmFpbF9wbGF0Zm9ybV9kcml2ZXI6Ci0KK2Vycl9wbGF0Zm9ybV9kcml2ZXI6CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmNvbXBhbF9kcml2ZXIpOwogCi1mYWlsX2JhY2tsaWdodDoKLQorZXJyX2JhY2tsaWdodDoKIAliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoY29tcGFsYmxfZGV2aWNlKTsKIAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgX19kZXZpbml0IGNvbXBhbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCBlcnI7CisJc3RydWN0IGNvbXBhbF9kYXRhICpkYXRhOworCisJaWYgKCFleHRyYV9mZWF0dXJlcykKKwkJcmV0dXJuIDA7CisKKwkvKiBGYW4gY29udHJvbCAqLworCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY29tcGFsX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJaW5pdGlhbGl6ZV9mYW5fY29udHJvbF9kYXRhKGRhdGEpOworCisJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJmNvbXBhbF9hdHRyaWJ1dGVfZ3JvdXApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlkYXRhLT5od21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldik7CisJaWYgKElTX0VSUihkYXRhLT5od21vbl9kZXYpKSB7CisJCWVyciA9IFBUUl9FUlIoZGF0YS0+aHdtb25fZGV2KTsKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwKKwkJCQkmY29tcGFsX2F0dHJpYnV0ZV9ncm91cCk7CisJCWtmcmVlKGRhdGEpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFBvd2VyIHN1cHBseSAqLworCWluaXRpYWxpemVfcG93ZXJfc3VwcGx5X2RhdGEoZGF0YSk7CisJcG93ZXJfc3VwcGx5X3JlZ2lzdGVyKCZjb21wYWxfZGV2aWNlLT5kZXYsICZkYXRhLT5wc3kpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgX19leGl0IGNvbXBhbF9jbGVhbnVwKHZvaWQpCiB7Ci0KIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihjb21wYWxfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmY29tcGFsX2RyaXZlcik7CiAJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGNvbXBhbGJsX2RldmljZSk7CiAJcmZraWxsX3VucmVnaXN0ZXIod2lmaV9yZmtpbGwpOwotCXJma2lsbF9kZXN0cm95KHdpZmlfcmZraWxsKTsKIAlyZmtpbGxfdW5yZWdpc3RlcihidF9yZmtpbGwpOworCXJma2lsbF9kZXN0cm95KHdpZmlfcmZraWxsKTsKIAlyZmtpbGxfZGVzdHJveShidF9yZmtpbGwpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiY29tcGFsLWxhcHRvcDogZHJpdmVyIHVubG9hZGVkLlxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSI6IERyaXZlciB1bmxvYWRlZFxuIik7CiB9CiAKK3N0YXRpYyBpbnQgX19kZXZleGl0IGNvbXBhbF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgY29tcGFsX2RhdGEgKmRhdGE7CisKKwlpZiAoIWV4dHJhX2ZlYXR1cmVzKQorCQlyZXR1cm4gMDsKKworCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUiOiBVbmxvYWRpbmc6IHJlc2V0dGluZyBmYW4gY29udHJvbCAiCisJCQkJCQkJInRvIG1vdGhlcmJvYXJkXG4iKTsKKwlwd21fZGlzYWJsZV9jb250cm9sKCk7CisKKwlkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKKwlwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcigmZGF0YS0+cHN5KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWtmcmVlKGRhdGEpOworCisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJmNvbXBhbF9hdHRyaWJ1dGVfZ3JvdXApOworCisJcmV0dXJuIDA7Cit9CisKKwogbW9kdWxlX2luaXQoY29tcGFsX2luaXQpOwogbW9kdWxlX2V4aXQoY29tcGFsX2NsZWFudXApOwogCiBNT0RVTEVfQVVUSE9SKCJDZXphcnkgSmFja2lld2ljeiIpOworTU9EVUxFX0FVVEhPUigiUm9hbGQgRnJlZGVyaWNreCAocm9hbGQuZnJlZGVyaWNreEBnbWFpbC5jb20pIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkNvbXBhbCBMYXB0b3AgU3VwcG9ydCIpOwotTU9EVUxFX1ZFUlNJT04oQ09NUEFMX0RSSVZFUl9WRVJTSU9OKTsKK01PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogTU9EVUxFX0FMSUFTKCJkbWk6KjpybklGTDkwOnJ2cklGVDAwOioiKTsKQEAgLTM3Miw2ICsxMDg4LDcgQEAKIE1PRFVMRV9BTElBUygiZG1pOio6cm5JRkw5MTpydnJJRlQwMDoqIik7CiBNT0RVTEVfQUxJQVMoImRtaToqOnJuSkZMOTI6cnZySUZUMDA6KiIpOwogTU9EVUxFX0FMSUFTKCJkbWk6KjpybklGVDAwOnJ2cklGVDAwOioiKTsKK01PRFVMRV9BTElBUygiZG1pOio6cm5KSEw5MDpydnJSRUZFUkVOQ0U6KiIpOwogTU9EVUxFX0FMSUFTKCJkbWk6Kjpzdm5EZWxsSW5jLjpwbkluc3Bpcm9uOTEwOioiKTsKIE1PRFVMRV9BTElBUygiZG1pOio6c3ZuRGVsbEluYy46cG5JbnNwaXJvbjEwMTA6KiIpOwogTU9EVUxFX0FMSUFTKCJkbWk6Kjpzdm5EZWxsSW5jLjpwbkluc3Bpcm9uMTAxMToqIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYwppbmRleCA2NjFlM2FjLi5iNDFlZDVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMKQEAgLTgzLDYgKzgzLDEyIEBACiAJCX0sCiAJfSwKIAl7CisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX0NIQVNTSVNfVFlQRSwgIjkiKSwgLypMYXB0b3AqLworCQl9LAorCX0sCisJewogCQkuaWRlbnQgPSAiRGVsbCBDb21wdXRlciBDb3Jwb3JhdGlvbiIsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBDb21wdXRlciBDb3Jwb3JhdGlvbiIpLApAQCAtNDY3LDcgKzQ3Myw3IEBACiAJLnVwZGF0ZV9zdGF0dXMgID0gZGVsbF9zZW5kX2ludGVuc2l0eSwKIH07CiAKLWJvb2wgZGVsbF9sYXB0b3BfaTgwNDJfZmlsdGVyKHVuc2lnbmVkIGNoYXIgZGF0YSwgdW5zaWduZWQgY2hhciBzdHIsCitzdGF0aWMgYm9vbCBkZWxsX2xhcHRvcF9pODA0Ml9maWx0ZXIodW5zaWduZWQgY2hhciBkYXRhLCB1bnNpZ25lZCBjaGFyIHN0ciwKIAkJCSAgICAgIHN0cnVjdCBzZXJpbyAqcG9ydCkKIHsKIAlzdGF0aWMgYm9vbCBleHRlbmRlZDsKQEAgLTYyMSw0ICs2MjcsNSBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEZWxsIGxhcHRvcCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBUygiZG1pOipzdm5EZWxsSW5jLjoqOmN0ODoqIik7CitNT0RVTEVfQUxJQVMoImRtaToqc3ZuRGVsbEluYy46KjpjdDk6KiIpOwogTU9EVUxFX0FMSUFTKCJkbWk6KnN2bkRlbGxDb21wdXRlckNvcnBvcmF0aW9uLjoqOmN0ODoqIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC13bWkuYwppbmRleCA2NmY1M2MzLi4wOGZiNzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLXdtaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtd21pLmMKQEAgLTIyMSw3ICsyMjEsNyBAQAogCQkJcmV0dXJuOwogCQl9CiAKLQkJaWYgKGRlbGxfbmV3X2hrX3R5cGUpCisJCWlmIChkZWxsX25ld19oa190eXBlIHx8IGJ1ZmZlcl9lbnRyeVsxXSA9PSAweDApCiAJCQlyZXBvcnRlZF9rZXkgPSAoaW50KWJ1ZmZlcl9lbnRyeVsyXTsKIAkJZWxzZQogCQkJcmVwb3J0ZWRfa2V5ID0gKGludClidWZmZXJfZW50cnlbMV0gJiAweGZmZmY7CkBAIC0zMzksMTMgKzMzOSwxOCBAQAogCWFjcGlfdmlkZW8gPSBhY3BpX3ZpZGVvX2JhY2tsaWdodF9zdXBwb3J0KCk7CiAKIAllcnIgPSBkZWxsX3dtaV9pbnB1dF9zZXR1cCgpOwotCWlmIChlcnIpCisJaWYgKGVycikgeworCQlpZiAoZGVsbF9uZXdfaGtfdHlwZSkKKwkJCWtmcmVlKGRlbGxfd21pX2tleW1hcCk7CiAJCXJldHVybiBlcnI7CisJfQogCiAJc3RhdHVzID0gd21pX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoREVMTF9FVkVOVF9HVUlELAogCQkJCQkgZGVsbF93bWlfbm90aWZ5LCBOVUxMKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoZGVsbF93bWlfaW5wdXRfZGV2KTsKKwkJaWYgKGRlbGxfbmV3X2hrX3R5cGUpCisJCQlrZnJlZShkZWxsX3dtaV9rZXltYXApOwogCQlwcmludGsoS0VSTl9FUlIKIAkJCSJkZWxsLXdtaTogVW5hYmxlIHRvIHJlZ2lzdGVyIG5vdGlmeSBoYW5kbGVyIC0gJWRcbiIsCiAJCQlzdGF0dXMpOwpAQCAtMzU5LDYgKzM2NCw4IEBACiB7CiAJd21pX3JlbW92ZV9ub3RpZnlfaGFuZGxlcihERUxMX0VWRU5UX0dVSUQpOwogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGRlbGxfd21pX2lucHV0X2Rldik7CisJaWYgKGRlbGxfbmV3X2hrX3R5cGUpCisJCWtmcmVlKGRlbGxfd21pX2tleW1hcCk7CiB9CiAKIG1vZHVsZV9pbml0KGRlbGxfd21pX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZWVlcGMtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYwppbmRleCAwMzA2MTc0Li42YjhlMDYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYwpAQCAtNTMsNyArNTMsNyBAQAogCiBzdGF0aWMgYm9vbCBob3RwbHVnX2Rpc2FibGVkOwogCi1tb2R1bGVfcGFyYW0oaG90cGx1Z19kaXNhYmxlZCwgYm9vbCwgMDY0NCk7Cittb2R1bGVfcGFyYW0oaG90cGx1Z19kaXNhYmxlZCwgYm9vbCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGhvdHBsdWdfZGlzYWJsZWQsCiAJCSAiRGlzYWJsZSBob3RwbHVnIGZvciB3aXJlbGVzcyBkZXZpY2UuICIKIAkJICJJZiB5b3VyIGxhcHRvcCBuZWVkIHRoYXQsIHBsZWFzZSByZXBvcnQgdG8gIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZnVqaXRzdS1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMKaW5kZXggZTMyNWFlYi4uZjQ0Y2QyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZnVqaXRzdS1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jCkBAIC0xODIsNyArMTgyLDcgQEAKIHN0YXRpYyB2b2lkIGxvZ29sYW1wX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2LAogCQkJICAgICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcyk7CiAKLXN0cnVjdCBsZWRfY2xhc3NkZXYgbG9nb2xhbXBfbGVkID0geworc3RhdGljIHN0cnVjdCBsZWRfY2xhc3NkZXYgbG9nb2xhbXBfbGVkID0gewogIC5uYW1lID0gImZ1aml0c3U6OmxvZ29sYW1wIiwKICAuYnJpZ2h0bmVzc19nZXQgPSBsb2dvbGFtcF9nZXQsCiAgLmJyaWdodG5lc3Nfc2V0ID0gbG9nb2xhbXBfc2V0CkBAIC0xOTIsNyArMTkyLDcgQEAKIHN0YXRpYyB2b2lkIGtibGFtcHNfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXYsCiAJCQkgICAgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKTsKIAotc3RydWN0IGxlZF9jbGFzc2RldiBrYmxhbXBzX2xlZCA9IHsKK3N0YXRpYyBzdHJ1Y3QgbGVkX2NsYXNzZGV2IGtibGFtcHNfbGVkID0gewogIC5uYW1lID0gImZ1aml0c3U6OmtibGFtcHMiLAogIC5icmlnaHRuZXNzX2dldCA9IGtibGFtcHNfZ2V0LAogIC5icmlnaHRuZXNzX3NldCA9IGtibGFtcHNfc2V0CkBAIC02MDMsNyArNjAzLDcgQEAKIAlkbWlfY2hlY2tfY2JfY29tbW9uKGlkKTsKIAlmdWppdHN1LT5rZXljb2RlMSA9IEtFWV9TQ1JFRU5MT0NLOwkvKiAiTG9jayIgKi8KIAlmdWppdHN1LT5rZXljb2RlMiA9IEtFWV9IRUxQOwkvKiAiTW9iaWxpdHkgQ2VudGVyIiAqLwotCXJldHVybiAwOworCXJldHVybiAxOwogfQogCiBzdGF0aWMgaW50IGRtaV9jaGVja19jYl9zNjQyMChjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCkBAIC02MTEsNyArNjExLDcgQEAKIAlkbWlfY2hlY2tfY2JfY29tbW9uKGlkKTsKIAlmdWppdHN1LT5rZXljb2RlMSA9IEtFWV9TQ1JFRU5MT0NLOwkvKiAiTG9jayIgKi8KIAlmdWppdHN1LT5rZXljb2RlMiA9IEtFWV9IRUxQOwkvKiAiTW9iaWxpdHkgQ2VudGVyIiAqLwotCXJldHVybiAwOworCXJldHVybiAxOwogfQogCiBzdGF0aWMgaW50IGRtaV9jaGVja19jYl9wODAxMChjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCkBAIC02MjAsNyArNjIwLDcgQEAKIAlmdWppdHN1LT5rZXljb2RlMSA9IEtFWV9IRUxQOwkvKiAiU3VwcG9ydCIgKi8KIAlmdWppdHN1LT5rZXljb2RlMyA9IEtFWV9TV0lUQ0hWSURFT01PREU7CS8qICJQcmVzZW50YXRpb24iICovCiAJZnVqaXRzdS0+a2V5Y29kZTQgPSBLRVlfV1dXOwkvKiAiSW50ZXJuZXQiICovCi0JcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBmdWppdHN1X2RtaV90YWJsZVtdID0gewpAQCAtNzI1LDYgKzcyNSw3IEBACiAKIGVycl91bnJlZ2lzdGVyX2lucHV0X2RldjoKIAlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShpbnB1dCk7CisJaW5wdXQgPSBOVUxMOwogZXJyX2ZyZWVfaW5wdXRfZGV2OgogCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0KTsKIGVycl9zdG9wOgpAQCAtNzM4LDggKzczOSw2IEBACiAKIAlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShpbnB1dCk7CiAKLQlpbnB1dF9mcmVlX2RldmljZShpbnB1dCk7Ci0KIAlmdWppdHN1LT5hY3BpX2hhbmRsZSA9IE5VTEw7CiAKIAlyZXR1cm4gMDsKQEAgLTkzMCw2ICs5MjksNyBAQAogCiBlcnJfdW5yZWdpc3Rlcl9pbnB1dF9kZXY6CiAJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaW5wdXQpOworCWlucHV0ID0gTlVMTDsKIGVycl9mcmVlX2lucHV0X2RldjoKIAlpbnB1dF9mcmVlX2RldmljZShpbnB1dCk7CiBlcnJfZnJlZV9maWZvOgpAQCAtOTUzLDggKzk1Myw2IEBACiAKIAlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShpbnB1dCk7CiAKLQlpbnB1dF9mcmVlX2RldmljZShpbnB1dCk7Ci0KIAlrZmlmb19mcmVlKCZmdWppdHN1X2hvdGtleS0+Zmlmbyk7CiAKIAlmdWppdHN1X2hvdGtleS0+YWNwaV9oYW5kbGUgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHAtd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9ocC13bWkuYwppbmRleCA1MWMwN2EwLi5mMTU1MTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9ocC13bWkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9ocC13bWkuYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvcmZraWxsLmg+CkBAIC01MiwxMiArNTEsMjUgQEAKICNkZWZpbmUgSFBXTUlfV0lSRUxFU1NfUVVFUlkgMHg1CiAjZGVmaW5lIEhQV01JX0hPVEtFWV9RVUVSWSAweGMKIAorI2RlZmluZSBQUkVGSVggIkhQIFdNSTogIgorI2RlZmluZSBVTklNUCAiVW5pbXBsZW1lbnRlZCAiCisKIGVudW0gaHBfd21pX3JhZGlvIHsKIAlIUFdNSV9XSUZJID0gMCwKIAlIUFdNSV9CTFVFVE9PVEggPSAxLAogCUhQV01JX1dXQU4gPSAyLAogfTsKIAorZW51bSBocF93bWlfZXZlbnRfaWRzIHsKKwlIUFdNSV9ET0NLX0VWRU5UID0gMSwKKwlIUFdNSV9QQVJLX0hERCA9IDIsCisJSFBXTUlfU01BUlRfQURBUFRFUiA9IDMsCisJSFBXTUlfQkVaRUxfQlVUVE9OID0gNCwKKwlIUFdNSV9XSVJFTEVTUyA9IDUsCisJSFBXTUlfQ1BVX0JBVFRFUllfVEhST1RUTEUgPSA2LAorCUhQV01JX0xPQ0tfU1dJVENIID0gNywKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGhwX3dtaV9iaW9zX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSk7CiBzdGF0aWMgaW50IF9fZXhpdCBocF93bWlfYmlvc19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKTsKIHN0YXRpYyBpbnQgaHBfd21pX3Jlc3VtZV9oYW5kbGVyKHN0cnVjdCBkZXZpY2UgKmRldmljZSk7CkBAIC02NywxMyArNzksMTIgQEAKIAl1MzIgY29tbWFuZDsKIAl1MzIgY29tbWFuZHR5cGU7CiAJdTMyIGRhdGFzaXplOwotCXUzMiBkYXRhOworCWNoYXIgKmRhdGE7CiB9OwogCiBzdHJ1Y3QgYmlvc19yZXR1cm4gewogCXUzMiBzaWdwYXNzOwogCXUzMiByZXR1cm5fY29kZTsKLQl1MzIgdmFsdWU7CiB9OwogCiBzdHJ1Y3Qga2V5X2VudHJ5IHsKQEAgLTg4LDYgKzk5LDcgQEAKIAl7S0VfS0VZLCAweDAyLCBLRVlfQlJJR0hUTkVTU1VQfSwKIAl7S0VfS0VZLCAweDAzLCBLRVlfQlJJR0hUTkVTU0RPV059LAogCXtLRV9LRVksIDB4MjBlNiwgS0VZX1BST0cxfSwKKwl7S0VfS0VZLCAweDIwZTgsIEtFWV9NRURJQX0sCiAJe0tFX0tFWSwgMHgyMTQyLCBLRVlfTUVESUF9LAogCXtLRV9LRVksIDB4MjEzYiwgS0VZX0lORk99LAogCXtLRV9LRVksIDB4MjE2OSwgS0VZX0RJUkVDVElPTn0sCkBAIC0xMTcsNyArMTI5LDI3IEBACiAJLnJlbW92ZSA9IGhwX3dtaV9iaW9zX3JlbW92ZSwKIH07CiAKLXN0YXRpYyBpbnQgaHBfd21pX3BlcmZvcm1fcXVlcnkoaW50IHF1ZXJ5LCBpbnQgd3JpdGUsIGludCB2YWx1ZSkKKy8qCisgKiBocF93bWlfcGVyZm9ybV9xdWVyeQorICoKKyAqIHF1ZXJ5OglUaGUgY29tbWFuZHR5cGUgLT4gV2hhdCBzaG91bGQgYmUgcXVlcmllZAorICogd3JpdGU6CVRoZSBjb21tYW5kIC0+IDAgcmVhZCwgMSB3cml0ZSwgMyBPRE0gc3BlY2lmaWMKKyAqIGJ1ZmZlcjoJQnVmZmVyIHVzZWQgYXMgaW5wdXQgYW5kL29yIG91dHB1dAorICogYnVmZmVyc2l6ZToJU2l6ZSBvZiBidWZmZXIKKyAqCisgKiByZXR1cm5zIHplcm8gb24gc3VjY2VzcworICogICAgICAgICBhbiBIUCBXTUkgcXVlcnkgc3BlY2lmaWMgZXJyb3IgY29kZSAod2hpY2ggaXMgcG9zaXRpdmUpCisgKiAgICAgICAgIC1FSU5WQUwgaWYgdGhlIHF1ZXJ5IHdhcyBub3Qgc3VjY2Vzc2Z1bCBhdCBhbGwKKyAqICAgICAgICAgLUVJTlZBTCBpZiB0aGUgb3V0cHV0IGJ1ZmZlciBzaXplIGV4Y2VlZHMgYnVmZmVyc2l6ZQorICoKKyAqIE5vdGU6IFRoZSBidWZmZXJzaXplIG11c3QgYXQgbGVhc3QgYmUgdGhlIG1heGltdW0gb2YgdGhlIGlucHV0IGFuZCBvdXRwdXQKKyAqICAgICAgIHNpemUuIEUuZy4gQmF0dGVyeSBpbmZvIHF1ZXJ5ICgweDcpIGlzIGRlZmluZWQgdG8gaGF2ZSAxIGJ5dGUgaW5wdXQKKyAqICAgICAgIGFuZCAxMjggYnl0ZSBvdXRwdXQuIFRoZSBjYWxsZXIgd291bGQgZG86CisgKiAgICAgICBidWZmZXIgPSBremFsbG9jKDEyOCwgR0ZQX0tFUk5FTCk7CisgKiAgICAgICByZXQgPSBocF93bWlfcGVyZm9ybV9xdWVyeSgweDcsIDAsIGJ1ZmZlciwgMTI4KQorICovCitzdGF0aWMgaW50IGhwX3dtaV9wZXJmb3JtX3F1ZXJ5KGludCBxdWVyeSwgaW50IHdyaXRlLCBjaGFyICpidWZmZXIsCisJCQkJaW50IGJ1ZmZlcnNpemUpCiB7CiAJc3RydWN0IGJpb3NfcmV0dXJuIGJpb3NfcmV0dXJuOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKQEAgLTEyNiw4ICsxNTgsOCBAQAogCQkuc2lnbmF0dXJlID0gMHg1NTQzNDU1MywKIAkJLmNvbW1hbmQgPSB3cml0ZSA/IDB4MiA6IDB4MSwKIAkJLmNvbW1hbmR0eXBlID0gcXVlcnksCi0JCS5kYXRhc2l6ZSA9IHdyaXRlID8gMHg0IDogMCwKLQkJLmRhdGEgPSB2YWx1ZSwKKwkJLmRhdGFzaXplID0gYnVmZmVyc2l6ZSwKKwkJLmRhdGEgPSBidWZmZXIsCiAJfTsKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgaW5wdXQgPSB7IHNpemVvZihzdHJ1Y3QgYmlvc19hcmdzKSwgJmFyZ3MgfTsKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgb3V0cHV0ID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OwpAQCAtMTQ0LDU0ICsxNzYsOTAgQEAKIAl9CiAKIAliaW9zX3JldHVybiA9ICooKHN0cnVjdCBiaW9zX3JldHVybiAqKW9iai0+YnVmZmVyLnBvaW50ZXIpOworCisJaWYgKGJpb3NfcmV0dXJuLnJldHVybl9jb2RlKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJRdWVyeSAlZCByZXR1cm5lZCAlZFxuIiwgcXVlcnksCisJCSAgICAgICBiaW9zX3JldHVybi5yZXR1cm5fY29kZSk7CisJCWtmcmVlKG9iaik7CisJCXJldHVybiBiaW9zX3JldHVybi5yZXR1cm5fY29kZTsKKwl9CisJaWYgKG9iai0+YnVmZmVyLmxlbmd0aCAtIHNpemVvZihiaW9zX3JldHVybikgPiBidWZmZXJzaXplKSB7CisJCWtmcmVlKG9iaik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1lbXNldChidWZmZXIsIDAsIGJ1ZmZlcnNpemUpOworCW1lbWNweShidWZmZXIsCisJICAgICAgICgoY2hhciAqKW9iai0+YnVmZmVyLnBvaW50ZXIpICsgc2l6ZW9mKHN0cnVjdCBiaW9zX3JldHVybiksCisJICAgICAgIG9iai0+YnVmZmVyLmxlbmd0aCAtIHNpemVvZihiaW9zX3JldHVybikpOwogCWtmcmVlKG9iaik7Ci0JaWYgKGJpb3NfcmV0dXJuLnJldHVybl9jb2RlID4gMCkKLQkJcmV0dXJuIGJpb3NfcmV0dXJuLnJldHVybl9jb2RlICogLTE7Ci0JZWxzZQotCQlyZXR1cm4gYmlvc19yZXR1cm4udmFsdWU7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaHBfd21pX2Rpc3BsYXlfc3RhdGUodm9pZCkKIHsKLQlyZXR1cm4gaHBfd21pX3BlcmZvcm1fcXVlcnkoSFBXTUlfRElTUExBWV9RVUVSWSwgMCwgMCk7CisJaW50IHN0YXRlOworCWludCByZXQgPSBocF93bWlfcGVyZm9ybV9xdWVyeShIUFdNSV9ESVNQTEFZX1FVRVJZLCAwLCAoY2hhciAqKSZzdGF0ZSwKKwkJCQkgICAgICAgc2l6ZW9mKHN0YXRlKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIHN0YXRlOwogfQogCiBzdGF0aWMgaW50IGhwX3dtaV9oZGR0ZW1wX3N0YXRlKHZvaWQpCiB7Ci0JcmV0dXJuIGhwX3dtaV9wZXJmb3JtX3F1ZXJ5KEhQV01JX0hERFRFTVBfUVVFUlksIDAsIDApOworCWludCBzdGF0ZTsKKwlpbnQgcmV0ID0gaHBfd21pX3BlcmZvcm1fcXVlcnkoSFBXTUlfSEREVEVNUF9RVUVSWSwgMCwgKGNoYXIgKikmc3RhdGUsCisJCQkJICAgICAgIHNpemVvZihzdGF0ZSkpOworCWlmIChyZXQpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBzdGF0ZTsKIH0KIAogc3RhdGljIGludCBocF93bWlfYWxzX3N0YXRlKHZvaWQpCiB7Ci0JcmV0dXJuIGhwX3dtaV9wZXJmb3JtX3F1ZXJ5KEhQV01JX0FMU19RVUVSWSwgMCwgMCk7CisJaW50IHN0YXRlOworCWludCByZXQgPSBocF93bWlfcGVyZm9ybV9xdWVyeShIUFdNSV9BTFNfUVVFUlksIDAsIChjaGFyICopJnN0YXRlLAorCQkJCSAgICAgICBzaXplb2Yoc3RhdGUpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gc3RhdGU7CiB9CiAKIHN0YXRpYyBpbnQgaHBfd21pX2RvY2tfc3RhdGUodm9pZCkKIHsKLQlpbnQgcmV0ID0gaHBfd21pX3BlcmZvcm1fcXVlcnkoSFBXTUlfSEFSRFdBUkVfUVVFUlksIDAsIDApOworCWludCBzdGF0ZTsKKwlpbnQgcmV0ID0gaHBfd21pX3BlcmZvcm1fcXVlcnkoSFBXTUlfSEFSRFdBUkVfUVVFUlksIDAsIChjaGFyICopJnN0YXRlLAorCQkJCSAgICAgICBzaXplb2Yoc3RhdGUpKTsKIAotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OworCWlmIChyZXQpCisJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIHJldCAmIDB4MTsKKwlyZXR1cm4gc3RhdGUgJiAweDE7CiB9CiAKIHN0YXRpYyBpbnQgaHBfd21pX3RhYmxldF9zdGF0ZSh2b2lkKQogewotCWludCByZXQgPSBocF93bWlfcGVyZm9ybV9xdWVyeShIUFdNSV9IQVJEV0FSRV9RVUVSWSwgMCwgMCk7Ci0KLQlpZiAocmV0IDwgMCkKKwlpbnQgc3RhdGU7CisJaW50IHJldCA9IGhwX3dtaV9wZXJmb3JtX3F1ZXJ5KEhQV01JX0hBUkRXQVJFX1FVRVJZLCAwLCAoY2hhciAqKSZzdGF0ZSwKKwkJCQkgICAgICAgc2l6ZW9mKHN0YXRlKSk7CisJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldHVybiAocmV0ICYgMHg0KSA/IDEgOiAwOworCXJldHVybiAoc3RhdGUgJiAweDQpID8gMSA6IDA7CiB9CiAKIHN0YXRpYyBpbnQgaHBfd21pX3NldF9ibG9jayh2b2lkICpkYXRhLCBib29sIGJsb2NrZWQpCiB7CiAJZW51bSBocF93bWlfcmFkaW8gciA9IChlbnVtIGhwX3dtaV9yYWRpbykgZGF0YTsKIAlpbnQgcXVlcnkgPSBCSVQociArIDgpIHwgKCghYmxvY2tlZCkgPDwgcik7CisJaW50IHJldDsKIAotCXJldHVybiBocF93bWlfcGVyZm9ybV9xdWVyeShIUFdNSV9XSVJFTEVTU19RVUVSWSwgMSwgcXVlcnkpOworCXJldCA9IGhwX3dtaV9wZXJmb3JtX3F1ZXJ5KEhQV01JX1dJUkVMRVNTX1FVRVJZLCAxLAorCQkJCSAgIChjaGFyICopJnF1ZXJ5LCBzaXplb2YocXVlcnkpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCByZmtpbGxfb3BzIGhwX3dtaV9yZmtpbGxfb3BzID0gewpAQCAtMjAwLDggKzI2OCwxMyBAQAogCiBzdGF0aWMgYm9vbCBocF93bWlfZ2V0X3N3X3N0YXRlKGVudW0gaHBfd21pX3JhZGlvIHIpCiB7Ci0JaW50IHdpcmVsZXNzID0gaHBfd21pX3BlcmZvcm1fcXVlcnkoSFBXTUlfV0lSRUxFU1NfUVVFUlksIDAsIDApOwotCWludCBtYXNrID0gMHgyMDAgPDwgKHIgKiA4KTsKKwlpbnQgd2lyZWxlc3M7CisJaW50IG1hc2s7CisJaHBfd21pX3BlcmZvcm1fcXVlcnkoSFBXTUlfV0lSRUxFU1NfUVVFUlksIDAsCisJCQkgICAgIChjaGFyICopJndpcmVsZXNzLCBzaXplb2Yod2lyZWxlc3MpKTsKKwkvKiBUQkQ6IFBhc3MgZXJyb3IgKi8KKworCW1hc2sgPSAweDIwMCA8PCAociAqIDgpOwogCiAJaWYgKHdpcmVsZXNzICYgbWFzaykKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMjExLDggKzI4NCwxMyBAQAogCiBzdGF0aWMgYm9vbCBocF93bWlfZ2V0X2h3X3N0YXRlKGVudW0gaHBfd21pX3JhZGlvIHIpCiB7Ci0JaW50IHdpcmVsZXNzID0gaHBfd21pX3BlcmZvcm1fcXVlcnkoSFBXTUlfV0lSRUxFU1NfUVVFUlksIDAsIDApOwotCWludCBtYXNrID0gMHg4MDAgPDwgKHIgKiA4KTsKKwlpbnQgd2lyZWxlc3M7CisJaW50IG1hc2s7CisJaHBfd21pX3BlcmZvcm1fcXVlcnkoSFBXTUlfV0lSRUxFU1NfUVVFUlksIDAsCisJCQkgICAgIChjaGFyICopJndpcmVsZXNzLCBzaXplb2Yod2lyZWxlc3MpKTsKKwkvKiBUQkQ6IFBhc3MgZXJyb3IgKi8KKworCW1hc2sgPSAweDgwMCA8PCAociAqIDgpOwogCiAJaWYgKHdpcmVsZXNzICYgbWFzaykKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMjY5LDcgKzM0NywxMSBAQAogCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJdTMyIHRtcCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwotCWhwX3dtaV9wZXJmb3JtX3F1ZXJ5KEhQV01JX0FMU19RVUVSWSwgMSwgdG1wKTsKKwlpbnQgcmV0ID0gaHBfd21pX3BlcmZvcm1fcXVlcnkoSFBXTUlfQUxTX1FVRVJZLCAxLCAoY2hhciAqKSZ0bXAsCisJCQkJICAgICAgIHNpemVvZih0bXApKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMzM4LDQ3ICs0MjAsODIgQEAKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgcmVzcG9uc2UgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CiAJc3RhdGljIHN0cnVjdCBrZXlfZW50cnkgKmtleTsKIAl1bmlvbiBhY3BpX29iamVjdCAqb2JqOwotCWludCBldmVudGNvZGU7CisJdTMyIGV2ZW50X2lkLCBldmVudF9kYXRhOworCWludCBrZXlfY29kZSwgcmV0OworCXUzMiAqbG9jYXRpb247CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCiAJc3RhdHVzID0gd21pX2dldF9ldmVudF9kYXRhKHZhbHVlLCAmcmVzcG9uc2UpOwogCWlmIChzdGF0dXMgIT0gQUVfT0spIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiaHAtd21pOiBiYWQgZXZlbnQgc3RhdHVzIDB4JXhcbiIsIHN0YXR1cyk7CisJCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJiYWQgZXZlbnQgc3RhdHVzIDB4JXhcbiIsIHN0YXR1cyk7CiAJCXJldHVybjsKIAl9CiAKIAlvYmogPSAodW5pb24gYWNwaV9vYmplY3QgKilyZXNwb25zZS5wb2ludGVyOwogCi0JaWYgKCFvYmogfHwgb2JqLT50eXBlICE9IEFDUElfVFlQRV9CVUZGRVIgfHwgb2JqLT5idWZmZXIubGVuZ3RoICE9IDgpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiSFAgV01JOiBVbmtub3duIHJlc3BvbnNlIHJlY2VpdmVkXG4iKTsKKwlpZiAoIW9iaikKKwkJcmV0dXJuOworCWlmIChvYmotPnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUikgeworCQlwcmludGsoS0VSTl9JTkZPICJocC13bWk6IFVua25vd24gcmVzcG9uc2UgcmVjZWl2ZWQgJWRcbiIsCisJCSAgICAgICBvYmotPnR5cGUpOwogCQlrZnJlZShvYmopOwogCQlyZXR1cm47CiAJfQogCi0JZXZlbnRjb2RlID0gKigodTggKikgb2JqLT5idWZmZXIucG9pbnRlcik7CisJLyoKKwkgKiBEZXBlbmRpbmcgb24gQUNQSSB2ZXJzaW9uIHRoZSBjb25jYXRlbmF0aW9uIG9mIGlkIGFuZCBldmVudCBkYXRhCisJICogaW5zaWRlIF9XRUQgZnVuY3Rpb24gd2lsbCByZXN1bHQgaW4gYSA4IG9yIDE2IGJ5dGUgYnVmZmVyLgorCSAqLworCWxvY2F0aW9uID0gKHUzMiAqKW9iai0+YnVmZmVyLnBvaW50ZXI7CisJaWYgKG9iai0+YnVmZmVyLmxlbmd0aCA9PSA4KSB7CisJCWV2ZW50X2lkID0gKmxvY2F0aW9uOworCQlldmVudF9kYXRhID0gKihsb2NhdGlvbiArIDEpOworCX0gZWxzZSBpZiAob2JqLT5idWZmZXIubGVuZ3RoID09IDE2KSB7CisJCWV2ZW50X2lkID0gKmxvY2F0aW9uOworCQlldmVudF9kYXRhID0gKihsb2NhdGlvbiArIDIpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0lORk8gImhwLXdtaTogVW5rbm93biBidWZmZXIgbGVuZ3RoICVkXG4iLAorCQkgICAgICAgb2JqLT5idWZmZXIubGVuZ3RoKTsKKwkJa2ZyZWUob2JqKTsKKwkJcmV0dXJuOworCX0KIAlrZnJlZShvYmopOwotCWlmIChldmVudGNvZGUgPT0gMHg0KQotCQlldmVudGNvZGUgPSBocF93bWlfcGVyZm9ybV9xdWVyeShIUFdNSV9IT1RLRVlfUVVFUlksIDAsCi0JCQkJCQkwKTsKLQlrZXkgPSBocF93bWlfZ2V0X2VudHJ5X2J5X3NjYW5jb2RlKGV2ZW50Y29kZSk7Ci0JaWYgKGtleSkgewotCQlzd2l0Y2ggKGtleS0+dHlwZSkgewotCQljYXNlIEtFX0tFWToKLQkJCWlucHV0X3JlcG9ydF9rZXkoaHBfd21pX2lucHV0X2RldiwKLQkJCQkJIGtleS0+a2V5Y29kZSwgMSk7Ci0JCQlpbnB1dF9zeW5jKGhwX3dtaV9pbnB1dF9kZXYpOwotCQkJaW5wdXRfcmVwb3J0X2tleShocF93bWlfaW5wdXRfZGV2LAotCQkJCQkga2V5LT5rZXljb2RlLCAwKTsKLQkJCWlucHV0X3N5bmMoaHBfd21pX2lucHV0X2Rldik7Ci0JCQlicmVhazsKLQkJfQotCX0gZWxzZSBpZiAoZXZlbnRjb2RlID09IDB4MSkgeworCisJc3dpdGNoIChldmVudF9pZCkgeworCWNhc2UgSFBXTUlfRE9DS19FVkVOVDoKIAkJaW5wdXRfcmVwb3J0X3N3aXRjaChocF93bWlfaW5wdXRfZGV2LCBTV19ET0NLLAogCQkJCSAgICBocF93bWlfZG9ja19zdGF0ZSgpKTsKIAkJaW5wdXRfcmVwb3J0X3N3aXRjaChocF93bWlfaW5wdXRfZGV2LCBTV19UQUJMRVRfTU9ERSwKIAkJCQkgICAgaHBfd21pX3RhYmxldF9zdGF0ZSgpKTsKIAkJaW5wdXRfc3luYyhocF93bWlfaW5wdXRfZGV2KTsKLQl9IGVsc2UgaWYgKGV2ZW50Y29kZSA9PSAweDUpIHsKKwkJYnJlYWs7CisJY2FzZSBIUFdNSV9QQVJLX0hERDoKKwkJYnJlYWs7CisJY2FzZSBIUFdNSV9TTUFSVF9BREFQVEVSOgorCQlicmVhazsKKwljYXNlIEhQV01JX0JFWkVMX0JVVFRPTjoKKwkJcmV0ID0gaHBfd21pX3BlcmZvcm1fcXVlcnkoSFBXTUlfSE9US0VZX1FVRVJZLCAwLAorCQkJCQkgICAoY2hhciAqKSZrZXlfY29kZSwKKwkJCQkJICAgc2l6ZW9mKGtleV9jb2RlKSk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwkJa2V5ID0gaHBfd21pX2dldF9lbnRyeV9ieV9zY2FuY29kZShrZXlfY29kZSk7CisJCWlmIChrZXkpIHsKKwkJCXN3aXRjaCAoa2V5LT50eXBlKSB7CisJCQljYXNlIEtFX0tFWToKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGhwX3dtaV9pbnB1dF9kZXYsCisJCQkJCQkga2V5LT5rZXljb2RlLCAxKTsKKwkJCQlpbnB1dF9zeW5jKGhwX3dtaV9pbnB1dF9kZXYpOworCQkJCWlucHV0X3JlcG9ydF9rZXkoaHBfd21pX2lucHV0X2RldiwKKwkJCQkJCSBrZXktPmtleWNvZGUsIDApOworCQkJCWlucHV0X3N5bmMoaHBfd21pX2lucHV0X2Rldik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZQorCQkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIlVua25vd24ga2V5IGNvZGUgLSAweCV4XG4iLAorCQkJICAgICAgIGtleV9jb2RlKTsKKwkJYnJlYWs7CisJY2FzZSBIUFdNSV9XSVJFTEVTUzoKIAkJaWYgKHdpZmlfcmZraWxsKQogCQkJcmZraWxsX3NldF9zdGF0ZXMod2lmaV9yZmtpbGwsCiAJCQkJCSAgaHBfd21pX2dldF9zd19zdGF0ZShIUFdNSV9XSUZJKSwKQEAgLTM5MSw5ICs1MDgsMTggQEAKIAkJCXJma2lsbF9zZXRfc3RhdGVzKHd3YW5fcmZraWxsLAogCQkJCQkgIGhwX3dtaV9nZXRfc3dfc3RhdGUoSFBXTUlfV1dBTiksCiAJCQkJCSAgaHBfd21pX2dldF9od19zdGF0ZShIUFdNSV9XV0FOKSk7Ci0JfSBlbHNlCi0JCXByaW50ayhLRVJOX0lORk8gIkhQIFdNSTogVW5rbm93biBrZXkgcHJlc3NlZCAtICV4XG4iLAotCQkJZXZlbnRjb2RlKTsKKwkJYnJlYWs7CisJY2FzZSBIUFdNSV9DUFVfQkFUVEVSWV9USFJPVFRMRToKKwkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggVU5JTVAgIkNQVSB0aHJvdHRsZSBiZWNhdXNlIG9mIDMgQ2VsbCIKKwkJICAgICAgICIgYmF0dGVyeSBldmVudCBkZXRlY3RlZFxuIik7CisJCWJyZWFrOworCWNhc2UgSFBXTUlfTE9DS19TV0lUQ0g6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJVbmtub3duIGV2ZW50X2lkIC0gJWQgLSAweCV4XG4iLAorCQkgICAgICAgZXZlbnRfaWQsIGV2ZW50X2RhdGEpOworCQlicmVhazsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGhwX3dtaV9pbnB1dF9zZXR1cCh2b2lkKQpAQCAtNDAyLDYgKzUyOCw4IEBACiAJaW50IGVycjsKIAogCWhwX3dtaV9pbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWhwX3dtaV9pbnB1dF9kZXYpCisJCXJldHVybiAtRU5PTUVNOwogCiAJaHBfd21pX2lucHV0X2Rldi0+bmFtZSA9ICJIUCBXTUkgaG90a2V5cyI7CiAJaHBfd21pX2lucHV0X2Rldi0+cGh5cyA9ICJ3bWkvaW5wdXQwIjsKQEAgLTQ1MCw3ICs1NzgsMTIgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGhwX3dtaV9iaW9zX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSkKIHsKIAlpbnQgZXJyOwotCWludCB3aXJlbGVzcyA9IGhwX3dtaV9wZXJmb3JtX3F1ZXJ5KEhQV01JX1dJUkVMRVNTX1FVRVJZLCAwLCAwKTsKKwlpbnQgd2lyZWxlc3M7CisKKwllcnIgPSBocF93bWlfcGVyZm9ybV9xdWVyeShIUFdNSV9XSVJFTEVTU19RVUVSWSwgMCwgKGNoYXIgKikmd2lyZWxlc3MsCisJCQkJICAgc2l6ZW9mKHdpcmVsZXNzKSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9kaXNwbGF5KTsKIAlpZiAoZXJyKQpAQCAtNTgxLDI3ICs3MTQsNTEgQEAKIHN0YXRpYyBpbnQgX19pbml0IGhwX3dtaV9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKKwlpbnQgZXZlbnRfY2FwYWJsZSA9IHdtaV9oYXNfZ3VpZChIUFdNSV9FVkVOVF9HVUlEKTsKKwlpbnQgYmlvc19jYXBhYmxlID0gd21pX2hhc19ndWlkKEhQV01JX0JJT1NfR1VJRCk7CiAKLQlpZiAod21pX2hhc19ndWlkKEhQV01JX0VWRU5UX0dVSUQpKSB7CisJaWYgKGV2ZW50X2NhcGFibGUpIHsKIAkJZXJyID0gd21pX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoSFBXTUlfRVZFTlRfR1VJRCwKIAkJCQkJCSBocF93bWlfbm90aWZ5LCBOVUxMKTsKLQkJaWYgKEFDUElfU1VDQ0VTUyhlcnIpKQotCQkJaHBfd21pX2lucHV0X3NldHVwKCk7CisJCWlmIChBQ1BJX0ZBSUxVUkUoZXJyKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQllcnIgPSBocF93bWlfaW5wdXRfc2V0dXAoKTsKKwkJaWYgKGVycikgeworCQkJd21pX3JlbW92ZV9ub3RpZnlfaGFuZGxlcihIUFdNSV9FVkVOVF9HVUlEKTsKKwkJCXJldHVybiBlcnI7CisJCX0KIAl9CiAKLQlpZiAod21pX2hhc19ndWlkKEhQV01JX0JJT1NfR1VJRCkpIHsKKwlpZiAoYmlvc19jYXBhYmxlKSB7CiAJCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaHBfd21pX2RyaXZlcik7CiAJCWlmIChlcnIpCi0JCQlyZXR1cm4gMDsKKwkJCWdvdG8gZXJyX2RyaXZlcl9yZWc7CiAJCWhwX3dtaV9wbGF0Zm9ybV9kZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoImhwLXdtaSIsIC0xKTsKIAkJaWYgKCFocF93bWlfcGxhdGZvcm1fZGV2KSB7Ci0JCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaHBfd21pX2RyaXZlcik7Ci0JCQlyZXR1cm4gMDsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9kZXZpY2VfYWxsb2M7CiAJCX0KLQkJcGxhdGZvcm1fZGV2aWNlX2FkZChocF93bWlfcGxhdGZvcm1fZGV2KTsKKwkJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZChocF93bWlfcGxhdGZvcm1fZGV2KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX2RldmljZV9hZGQ7CiAJfQogCisJaWYgKCFiaW9zX2NhcGFibGUgJiYgIWV2ZW50X2NhcGFibGUpCisJCXJldHVybiAtRU5PREVWOworCiAJcmV0dXJuIDA7CisKK2Vycl9kZXZpY2VfYWRkOgorCXBsYXRmb3JtX2RldmljZV9wdXQoaHBfd21pX3BsYXRmb3JtX2Rldik7CitlcnJfZGV2aWNlX2FsbG9jOgorCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZocF93bWlfZHJpdmVyKTsKK2Vycl9kcml2ZXJfcmVnOgorCWlmICh3bWlfaGFzX2d1aWQoSFBXTUlfRVZFTlRfR1VJRCkpIHsKKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaHBfd21pX2lucHV0X2Rldik7CisJCXdtaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIoSFBXTUlfRVZFTlRfR1VJRCk7CisJfQorCisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGhwX3dtaV9leGl0KHZvaWQpCkBAIC02MTEsNyArNzY4LDcgQEAKIAkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaHBfd21pX2lucHV0X2Rldik7CiAJfQogCWlmIChocF93bWlfcGxhdGZvcm1fZGV2KSB7Ci0JCXBsYXRmb3JtX2RldmljZV9kZWwoaHBfd21pX3BsYXRmb3JtX2Rldik7CisJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGhwX3dtaV9wbGF0Zm9ybV9kZXYpOwogCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaHBfd21pX2RyaXZlcik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfaXBzLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9pcHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmU4MmU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfaXBzLmMKQEAgLTAsMCArMSwxNjYwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgKiB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorICoKKyAqIEF1dGhvcnM6CisgKglKZXNzZSBCYXJuZXMgPGpiYXJuZXNAdmlydHVvdXNnZWVrLm9yZz4KKyAqLworCisvKgorICogU29tZSBJbnRlbCBJYmV4IFBlYWsgYmFzZWQgcGxhdGZvcm1zIHN1cHBvcnQgc28tY2FsbGVkICJpbnRlbGxpZ2VudAorICogcG93ZXIgc2hhcmluZyIsIHdoaWNoIGFsbG93cyB0aGUgQ1BVIGFuZCBHUFUgdG8gY29vcGVyYXRlIHRvIG1heGltaXplCisgKiBwZXJmb3JtYW5jZSB3aXRoaW4gYSBnaXZlbiBURFAgKHRoZXJtYWwgZGVzaWduIHBvaW50KS4gIFRoaXMgZHJpdmVyCisgKiBwZXJmb3JtcyB0aGUgY29vcmRpbmF0aW9uIGJldHdlZW4gdGhlIENQVSBhbmQgR1BVLCBtb25pdG9ycyB0aGVybWFsIGFuZAorICogcG93ZXIgc3RhdGlzdGljcyBpbiB0aGUgcGxhdGZvcm0sIGFuZCBpbml0aWFsaXplcyBwb3dlciBtb25pdG9yaW5nCisgKiBoYXJkd2FyZS4gIEl0IGFsc28gcHJvdmlkZXMgYSBmZXcgdHVuYWJsZXMgdG8gY29udHJvbCBiZWhhdmlvci4gIEl0cworICogcHJpbWFyeSBwdXJwb3NlIGlzIHRvIHNhZmVseSBhbGxvdyBDUFUgYW5kIEdQVSB0dXJibyBtb2RlcyB0byBiZSBlbmFibGVkCisgKiBieSB0cmFja2luZyBwb3dlciBhbmQgdGhlcm1hbCBidWRnZXQ7IHNlY29uZGFyaWx5IGl0IGNhbiBib29zdCB0dXJibworICogcGVyZm9ybWFuY2UgYnkgYWxsb2NhdGluZyBtb3JlIHBvd2VyIG9yIHRoZXJtYWwgYnVkZ2V0IHRvIHRoZSBDUFUgb3IgR1BVCisgKiBiYXNlZCBvbiBhdmFpbGFibGUgaGVhZHJvb20gYW5kIGFjdGl2aXR5LgorICoKKyAqIFRoZSBiYXNpYyBhbGdvcml0aG0gaXMgZHJpdmVuIGJ5IGEgNXMgbW92aW5nIGF2ZXJhZ2Ugb2YgdGVtcHVyYXR1cmUuICBJZgorICogdGhlcm1hbCBoZWFkcm9vbSBpcyBhdmFpbGFibGUsIHRoZSBDUFUgYW5kL29yIEdQVSBwb3dlciBjbGFtcHMgbWF5IGJlCisgKiBhZGp1c3RlZCB1cHdhcmRzLiAgSWYgd2UgaGl0IHRoZSB0aGVybWFsIGNlaWxpbmcgb3IgYSB0aGVybWFsIHRyaWdnZXIsCisgKiB3ZSBzY2FsZSBiYWNrIHRoZSBjbGFtcC4gIEFzaWRlIGZyb20gdHJpZ2dlciBldmVudHMgKHdoZW4gd2UncmUgY3JpdGljYWxseQorICogY2xvc2Ugb3Igb3ZlciBvdXIgVERQKSB3ZSBkb24ndCBhZGp1c3QgdGhlIGNsYW1wcyBtb3JlIHRoYW4gb25jZSBldmVyeQorICogZml2ZSBzZWNvbmRzLgorICoKKyAqIFRoZSB0aGVybWFsIGRldmljZSAoZGV2aWNlIDMxLCBmdW5jdGlvbiA2KSBoYXMgYSBzZXQgb2YgcmVnaXN0ZXJzIHRoYXQKKyAqIGFyZSB1cGRhdGVkIGJ5IHRoZSBNRSBmaXJtd2FyZS4gIFRoZSBNRSBzaG91bGQgYWxzbyB0YWtlIHRoZSBjbGFtcCB2YWx1ZXMKKyAqIHdyaXR0ZW4gdG8gdGhvc2UgcmVnaXN0ZXJzIGFuZCB3cml0ZSB0aGVtIHRvIHRoZSBDUFUsIGJ1dCB3ZSBjdXJyZW50bHkKKyAqIGJ5cGFzcyB0aGF0IGZ1bmN0aW9uYWxpdHkgYW5kIHdyaXRlIHRoZSBDUFUgTVNSIGRpcmVjdGx5LgorICoKKyAqIFVOU1VQUE9SVEVEOgorICogICAtIGR1YWwgTUNQIGNvbmZpZ3MKKyAqCisgKiBUT0RPOgorICogICAtIGhhbmRsZSBDUFUgaG90cGx1ZworICogICAtIHByb3ZpZGUgdHVyYm8gZW5hYmxlL2Rpc2FibGUgYXBpCisgKiAgIC0gbWFrZSBzdXJlIHdlIGNhbiB3cml0ZSB0dXJibyBlbmFibGUvZGlzYWJsZSByZWcgYmFzZWQgb24gTUlTQ19FTgorICoKKyAqIFJlbGF0ZWQgZG9jdW1lbnRzOgorICogICAtIENESSA0MDM3NzcsIDQwMzc3OCAtIEF1YnVybmRhbGUgRURTIHZvbCAxICYgMgorICogICAtIENESSA0MDEzNzYgLSBJYmV4IFBlYWsgRURTCisgKiAgIC0gcmVmIDI2MDM3LCAyNjY0MSAtIElQUyBCSU9TIHNwZWMKKyAqICAgLSByZWYgMjY0ODkgLSBOZWhhbGVtIEJJT1Mgd3JpdGVyJ3MgZ3VpZGUKKyAqICAgLSByZWYgMjY5MjEgLSBJYmV4IFBlYWsgQklPUyBTcGVjaWZpY2F0aW9uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdGljay5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8ZHJtL2k5MTVfZHJtLmg+CisjaW5jbHVkZSA8YXNtL21zci5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1RIRVJNQUxfU0VOU09SIDB4M2IzMgorCisvKgorICogUGFja2FnZSBsZXZlbCBNU1JzIGZvciBtb25pdG9yL2NvbnRyb2wKKyAqLworI2RlZmluZSBQTEFURk9STV9JTkZPCTB4Y2UKKyNkZWZpbmUgICBQTEFURk9STV9URFAJCSgxPDwyOSkKKyNkZWZpbmUgICBQTEFURk9STV9SQVRJTwkoMTw8MjgpCisKKyNkZWZpbmUgSUEzMl9NSVNDX0VOQUJMRQkweDFhMAorI2RlZmluZSAgIElBMzJfTUlTQ19UVVJCT19FTgkoMVVMTDw8MzgpCisKKyNkZWZpbmUgVFVSQk9fUE9XRVJfQ1VSUkVOVF9MSU1JVAkweDFhYworI2RlZmluZSAgIFRVUkJPX1REQ19PVlJfRU4JKDFVTDw8MzEpCisjZGVmaW5lICAgVFVSQk9fVERDX01BU0sJKDB4MDAwMDAwMDA3ZmZmMDAwMFVMKQorI2RlZmluZSAgIFRVUkJPX1REQ19TSElGVAkoMTYpCisjZGVmaW5lICAgVFVSQk9fVERQX09WUl9FTgkoMVVMPDwxNSkKKyNkZWZpbmUgICBUVVJCT19URFBfTUFTSwkoMHgwMDAwMDAwMDAwMDAzZmZmVUwpCisKKy8qCisgKiBDb3JlL3RocmVhZCBNU1JzIGZvciBtb25pdG9yaW5nCisgKi8KKyNkZWZpbmUgSUEzMl9QRVJGX0NUTAkJMHgxOTkKKyNkZWZpbmUgICBJQTMyX1BFUkZfVFVSQk9fRElTCSgxVUxMPDwzMikKKworLyoKKyAqIFRoZXJtYWwgUENJIGRldmljZSByZWdzCisgKi8KKyNkZWZpbmUgVEhNX0NGR19UQkFSCTB4MTAKKyNkZWZpbmUgVEhNX0NGR19UQkFSX0hJCTB4MTQKKworI2RlZmluZSBUSE1fVFNJVQkweDAwCisjZGVmaW5lIFRITV9UU0UJCTB4MDEKKyNkZWZpbmUgICBUU0VfRU4JMHhiOAorI2RlZmluZSBUSE1fVFNTCQkweDAyCisjZGVmaW5lIFRITV9UU1RSCTB4MDMKKyNkZWZpbmUgVEhNX1RTVFRQCTB4MDQKKyNkZWZpbmUgVEhNX1RTQ08JMHgwOAorI2RlZmluZSBUSE1fVFNFUwkweDBjCisjZGVmaW5lIFRITV9UU0dQRU4JMHgwZAorI2RlZmluZSAgIFRTR1BFTl9IT1RfTE9ISQkoMTw8MSkKKyNkZWZpbmUgICBUU0dQRU5fQ1JJVF9MT0hJCSgxPDwyKQorI2RlZmluZSBUSE1fVFNQQwkweDBlCisjZGVmaW5lIFRITV9QUEVDCTB4MTAKKyNkZWZpbmUgVEhNX0NUQQkJMHgxMgorI2RlZmluZSBUSE1fUFRBCQkweDE0CisjZGVmaW5lICAgUFRBX1NMT1BFX01BU0sJKDB4ZmYwMCkKKyNkZWZpbmUgICBQVEFfU0xPUEVfU0hJRlQJOAorI2RlZmluZSAgIFBUQV9PRkZTRVRfTUFTSwkoMHgwMGZmKQorI2RlZmluZSBUSE1fTUdUQQkweDE2CisjZGVmaW5lICAgTUdUQV9TTE9QRV9NQVNLCSgweGZmMDApCisjZGVmaW5lICAgTUdUQV9TTE9QRV9TSElGVAk4CisjZGVmaW5lICAgTUdUQV9PRkZTRVRfTUFTSwkoMHgwMGZmKQorI2RlZmluZSBUSE1fVFJDCQkweDFhCisjZGVmaW5lICAgVFJDX0NPUkUyX0VOCSgxPDwxNSkKKyNkZWZpbmUgICBUUkNfVEhNX0VOCSgxPDwxMikKKyNkZWZpbmUgICBUUkNfQzZfV0FSCSgxPDw4KQorI2RlZmluZSAgIFRSQ19DT1JFMV9FTgkoMTw8NykKKyNkZWZpbmUgICBUUkNfQ09SRV9QV1IJKDE8PDYpCisjZGVmaW5lICAgVFJDX1BDSF9FTgkoMTw8NSkKKyNkZWZpbmUgICBUUkNfTUNIX0VOCSgxPDw0KQorI2RlZmluZSAgIFRSQ19ESU1NNAkoMTw8MykKKyNkZWZpbmUgICBUUkNfRElNTTMJKDE8PDIpCisjZGVmaW5lICAgVFJDX0RJTU0yCSgxPDwxKQorI2RlZmluZSAgIFRSQ19ESU1NMQkoMTw8MCkKKyNkZWZpbmUgVEhNX1RFUwkJMHgyMAorI2RlZmluZSBUSE1fVEVOCQkweDIxCisjZGVmaW5lICAgVEVOX1VQREFURV9FTgkxCisjZGVmaW5lIFRITV9QU0MJCTB4MjQKKyNkZWZpbmUgICBQU0NfTlRHCSgxPDwwKSAvKiBObyBHRlggdHVyYm8gc3VwcG9ydCAqLworI2RlZmluZSAgIFBTQ19OVFBDCSgxPDwxKSAvKiBObyBDUFUgdHVyYm8gc3VwcG9ydCAqLworI2RlZmluZSAgIFBTQ19QUF9ERUYJKDA8PDIpIC8qIFBlcmYgcG9saWN5IHVwIHRvIGRyaXZlciAqLworI2RlZmluZSAgIFBTUF9QUF9QQwkoMTw8MikgLyogQklPUyBwcmVmZXJzIENQVSBwZXJmICovCisjZGVmaW5lICAgUFNQX1BQX0JBTAkoMjw8MikgLyogQklPUyB3YW50cyBiYWxhbmNlZCBwZXJmICovCisjZGVmaW5lICAgUFNQX1BQX0dGWAkoMzw8MikgLyogQklPUyBwcmVmZXJzIEdGWCBwZXJmICovCisjZGVmaW5lICAgUFNQX1BCUlQJKDE8PDQpIC8qIEJJT1MgcnVuIHRpbWUgc3VwcG9ydCAqLworI2RlZmluZSBUSE1fQ1RWMQkweDMwCisjZGVmaW5lICAgQ1RWX1RFTVBfRVJST1IgKDE8PDE1KQorI2RlZmluZSAgIENUVl9URU1QX01BU0sJMHgzZgorI2RlZmluZSAgIENUVl8KKyNkZWZpbmUgVEhNX0NUVjIJMHgzMgorI2RlZmluZSBUSE1fQ0VDCQkweDM0IC8qIHVuZG9jdW1lbnRlZCBwb3dlciBhY2N1bXVsYXRvciBpbiBqb3VsZXMgKi8KKyNkZWZpbmUgVEhNX0FFCQkweDNmCisjZGVmaW5lIFRITV9IVFMJCTB4NTAgLyogMzIgYml0cyAqLworI2RlZmluZSAgIEhUU19QQ1BMX01BU0sJKDB4N2ZlMDAwMDApCisjZGVmaW5lICAgSFRTX1BDUExfU0hJRlQgMjEKKyNkZWZpbmUgICBIVFNfR1BMX01BU0sgICgweDAwMWZmMDAwKQorI2RlZmluZSAgIEhUU19HUExfU0hJRlQgMTIKKyNkZWZpbmUgICBIVFNfUFBfTUFTSwkoMHgwMDAwMGMwMCkKKyNkZWZpbmUgICBIVFNfUFBfU0hJRlQgIDEwCisjZGVmaW5lICAgSFRTX1BQX0RFRgkwCisjZGVmaW5lICAgSFRTX1BQX1BST0MJMQorI2RlZmluZSAgIEhUU19QUF9CQUwJMgorI2RlZmluZSAgIEhUU19QUF9HRlgJMworI2RlZmluZSAgIEhUU19QQ1REX0RJUwkoMTw8OSkKKyNkZWZpbmUgICBIVFNfR1REX0RJUwkoMTw8OCkKKyNkZWZpbmUgICBIVFNfUFRMX01BU0sgICgweDAwMDAwMGZlKQorI2RlZmluZSAgIEhUU19QVExfU0hJRlQgMQorI2RlZmluZSAgIEhUU19OVlYJKDE8PDApCisjZGVmaW5lIFRITV9IVFNISQkweDU0IC8qIDE2IGJpdHMgKi8KKyNkZWZpbmUgICBIVFMyX1BQTF9NQVNLCQkoMHgwM2ZmKQorI2RlZmluZSAgIEhUUzJfUFJTVF9NQVNLCSgweDNjMDApCisjZGVmaW5lICAgSFRTMl9QUlNUX1NISUZUCTEwCisjZGVmaW5lICAgSFRTMl9QUlNUX1VOTE9BREVECTAKKyNkZWZpbmUgICBIVFMyX1BSU1RfUlVOTklORwkxCisjZGVmaW5lICAgSFRTMl9QUlNUX1RESVNPUAkyIC8qIHR1cmJvIGRpc2FibGVkIGR1ZSB0byBwb3dlciAqLworI2RlZmluZSAgIEhUUzJfUFJTVF9URElTSFQJMyAvKiB0dXJibyBkaXNhYmxlZCBkdWUgdG8gaGlnaCB0ZW1wICovCisjZGVmaW5lICAgSFRTMl9QUlNUX1RESVNVU1IJNCAvKiB1c2VyIGRpc2FibGVkIHR1cmJvICovCisjZGVmaW5lICAgSFRTMl9QUlNUX1RESVNQTEFUCTUgLyogcGxhdGZvcm0gZGlzYWJsZWQgdHVyYm8gKi8KKyNkZWZpbmUgICBIVFMyX1BSU1RfVERJU1BNCTYgLyogcG93ZXIgbWFuYWdlbWVudCBkaXNhYmxlZCB0dXJibyAqLworI2RlZmluZSAgIEhUUzJfUFJTVF9URElTRVJSCTcgLyogc29tZSBraW5kIG9mIGVycm9yIGRpc2FibGVkIHR1cmJvICovCisjZGVmaW5lIFRITV9QVEwJCTB4NTYKKyNkZWZpbmUgVEhNX01HVFYJMHg1OAorI2RlZmluZSAgIFRWX01BU0sJMHgwMDAwMDAwMDAwMDBmZjAwCisjZGVmaW5lICAgVFZfU0hJRlQJOAorI2RlZmluZSBUSE1fUFRWCQkweDYwCisjZGVmaW5lICAgUFRWX01BU0sJMHgwMGZmCisjZGVmaW5lIFRITV9NTUdQQwkweDY0CisjZGVmaW5lIFRITV9NUFBDCTB4NjYKKyNkZWZpbmUgVEhNX01QQ1BDCTB4NjgKKyNkZWZpbmUgVEhNX1RTUElFTgkweDgyCisjZGVmaW5lICAgVFNQSUVOX0FVWF9MT0hJCSgxPDwwKQorI2RlZmluZSAgIFRTUElFTl9IT1RfTE9ISQkoMTw8MSkKKyNkZWZpbmUgICBUU1BJRU5fQ1JJVF9MT0hJCSgxPDwyKQorI2RlZmluZSAgIFRTUElFTl9BVVgyX0xPSEkJKDE8PDMpCisjZGVmaW5lIFRITV9UU0xPQ0sJMHg4MworI2RlZmluZSBUSE1fQVRSCQkweDg0CisjZGVmaW5lIFRITV9UT0YJCTB4ODcKKyNkZWZpbmUgVEhNX1NUUwkJMHg5OAorI2RlZmluZSAgIFNUU19QQ1BMX01BU0sJCSgweDdmZTAwMDAwKQorI2RlZmluZSAgIFNUU19QQ1BMX1NISUZUCTIxCisjZGVmaW5lICAgU1RTX0dQTF9NQVNLCQkoMHgwMDFmZjAwMCkKKyNkZWZpbmUgICBTVFNfR1BMX1NISUZUCQkxMgorI2RlZmluZSAgIFNUU19QUF9NQVNLCQkoMHgwMDAwMGMwMCkKKyNkZWZpbmUgICBTVFNfUFBfU0hJRlQJCTEwCisjZGVmaW5lICAgU1RTX1BQX0RFRgkJMAorI2RlZmluZSAgIFNUU19QUF9QUk9DCQkxCisjZGVmaW5lICAgU1RTX1BQX0JBTAkJMgorI2RlZmluZSAgIFNUU19QUF9HRlgJCTMKKyNkZWZpbmUgICBTVFNfUENURF9ESVMJCSgxPDw5KQorI2RlZmluZSAgIFNUU19HVERfRElTCQkoMTw8OCkKKyNkZWZpbmUgICBTVFNfUFRMX01BU0sJCSgweDAwMDAwMGZlKQorI2RlZmluZSAgIFNUU19QVExfU0hJRlQJCTEKKyNkZWZpbmUgICBTVFNfTlZWCQkoMTw8MCkKKyNkZWZpbmUgVEhNX1NFQwkJMHg5YworI2RlZmluZSAgIFNFQ19BQ0sJKDE8PDApCisjZGVmaW5lIFRITV9UQzMJCTB4YTQKKyNkZWZpbmUgVEhNX1RDMQkJMHhhOAorI2RlZmluZSAgIFNUU19QUExfTUFTSwkJKDB4MDAwM2ZmMDApCisjZGVmaW5lICAgU1RTX1BQTF9TSElGVAkJMTYKKyNkZWZpbmUgVEhNX1RDMgkJMHhhYworI2RlZmluZSBUSE1fRFRWCQkweGIwCisjZGVmaW5lIFRITV9JVFYJCTB4ZDgKKyNkZWZpbmUgICBJVFZfTUVfU0VRTk9fTUFTSyAweDAwMGYwMDAwIC8qIE1FIHNob3VsZCB1cGRhdGUgZXZlcnkgfjIwMG1zICovCisjZGVmaW5lICAgSVRWX01FX1NFUU5PX1NISUZUICgxNikKKyNkZWZpbmUgICBJVFZfTUNIX1RFTVBfTUFTSyAweDAwMDBmZjAwCisjZGVmaW5lICAgSVRWX01DSF9URU1QX1NISUZUICg4KQorI2RlZmluZSAgIElUVl9QQ0hfVEVNUF9NQVNLIDB4MDAwMDAwZmYKKworI2RlZmluZSB0aG1fcmVhZGIob2ZmKSByZWFkYihpcHMtPnJlZ21hcCArIChvZmYpKQorI2RlZmluZSB0aG1fcmVhZHcob2ZmKSByZWFkdyhpcHMtPnJlZ21hcCArIChvZmYpKQorI2RlZmluZSB0aG1fcmVhZGwob2ZmKSByZWFkbChpcHMtPnJlZ21hcCArIChvZmYpKQorI2RlZmluZSB0aG1fcmVhZHEob2ZmKSByZWFkcShpcHMtPnJlZ21hcCArIChvZmYpKQorCisjZGVmaW5lIHRobV93cml0ZWIob2ZmLCB2YWwpIHdyaXRlYigodmFsKSwgaXBzLT5yZWdtYXAgKyAob2ZmKSkKKyNkZWZpbmUgdGhtX3dyaXRldyhvZmYsIHZhbCkgd3JpdGV3KCh2YWwpLCBpcHMtPnJlZ21hcCArIChvZmYpKQorI2RlZmluZSB0aG1fd3JpdGVsKG9mZiwgdmFsKSB3cml0ZWwoKHZhbCksIGlwcy0+cmVnbWFwICsgKG9mZikpCisKK3N0YXRpYyBjb25zdCBpbnQgSVBTX0FESlVTVF9QRVJJT0QgPSA1MDAwOyAvKiBtcyAqLworCisvKiBGb3IgaW5pdGlhbCBhdmVyYWdlIGNvbGxlY3Rpb24gKi8KK3N0YXRpYyBjb25zdCBpbnQgSVBTX1NBTVBMRV9QRVJJT0QgPSAyMDA7IC8qIG1zICovCitzdGF0aWMgY29uc3QgaW50IElQU19TQU1QTEVfV0lORE9XID0gNTAwMDsgLyogNXMgbW92aW5nIHdpbmRvdyBvZiBzYW1wbGVzICovCisjZGVmaW5lIElQU19TQU1QTEVfQ09VTlQgKElQU19TQU1QTEVfV0lORE9XIC8gSVBTX1NBTVBMRV9QRVJJT0QpCisKKy8qIFBlci1TS1UgbGltaXRzICovCitzdHJ1Y3QgaXBzX21jcF9saW1pdHMgeworCWludCBjcHVfZmFtaWx5OworCWludCBjcHVfbW9kZWw7IC8qIGluY2x1ZGVzIGV4dGVuZGVkIG1vZGVsLi4uICovCisJaW50IG1jcF9wb3dlcl9saW1pdDsgLyogbVcgdW5pdHMgKi8KKwlpbnQgY29yZV9wb3dlcl9saW1pdDsKKwlpbnQgbWNoX3Bvd2VyX2xpbWl0OworCWludCBjb3JlX3RlbXBfbGltaXQ7IC8qIGRlZ3JlZXMgQyAqLworCWludCBtY2hfdGVtcF9saW1pdDsKK307CisKKy8qIE1heCB0ZW1wcyBhcmUgLTEwIGRlZ3JlZXMgQyB0byBhdm9pZCBQUk9DSE9UIyAqLworCitzdHJ1Y3QgaXBzX21jcF9saW1pdHMgaXBzX3N2X2xpbWl0cyA9IHsKKwkubWNwX3Bvd2VyX2xpbWl0ID0gMzUwMDAsCisJLmNvcmVfcG93ZXJfbGltaXQgPSAyOTAwMCwKKwkubWNoX3Bvd2VyX2xpbWl0ID0gMjAwMDAsCisJLmNvcmVfdGVtcF9saW1pdCA9IDk1LAorCS5tY2hfdGVtcF9saW1pdCA9IDkwCit9OworCitzdHJ1Y3QgaXBzX21jcF9saW1pdHMgaXBzX2x2X2xpbWl0cyA9IHsKKwkubWNwX3Bvd2VyX2xpbWl0ID0gMjUwMDAsCisJLmNvcmVfcG93ZXJfbGltaXQgPSAyMTAwMCwKKwkubWNoX3Bvd2VyX2xpbWl0ID0gMTMwMDAsCisJLmNvcmVfdGVtcF9saW1pdCA9IDk1LAorCS5tY2hfdGVtcF9saW1pdCA9IDkwCit9OworCitzdHJ1Y3QgaXBzX21jcF9saW1pdHMgaXBzX3Vsdl9saW1pdHMgPSB7CisJLm1jcF9wb3dlcl9saW1pdCA9IDE4MDAwLAorCS5jb3JlX3Bvd2VyX2xpbWl0ID0gMTQwMDAsCisJLm1jaF9wb3dlcl9saW1pdCA9IDExMDAwLAorCS5jb3JlX3RlbXBfbGltaXQgPSA5NSwKKwkubWNoX3RlbXBfbGltaXQgPSA5MAorfTsKKworc3RydWN0IGlwc19kcml2ZXIgeworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJdm9pZCAqcmVnbWFwOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqbW9uaXRvcjsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmFkanVzdDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z19yb290OworCisJLyogQXZlcmFnZSBDUFUgY29yZSB0ZW1wcyAoYWxsIGF2ZXJhZ2VzIGluIC4wMSBkZWdyZWVzIEMgZm9yIHByZWNpc2lvbikgKi8KKwl1MTYgY3R2MV9hdmdfdGVtcDsKKwl1MTYgY3R2Ml9hdmdfdGVtcDsKKwkvKiBHTUNIIGF2ZXJhZ2UgKi8KKwl1MTYgbWNoX2F2Z190ZW1wOworCS8qIEF2ZXJhZ2UgZm9yIHRoZSBDUFUgKGJvdGggY29yZXM/KSAqLworCXUxNiBtY3BfYXZnX3RlbXA7CisJLyogQXZlcmFnZSBwb3dlciBjb25zdW1wdGlvbiAoaW4gbVcpICovCisJdTMyIGNwdV9hdmdfcG93ZXI7CisJdTMyIG1jaF9hdmdfcG93ZXI7CisKKwkvKiBPZmZzZXQgdmFsdWVzICovCisJdTE2IGN0YV92YWw7CisJdTE2IHB0YV92YWw7CisJdTE2IG1ndGFfdmFsOworCisJLyogTWF4aW11bXMgJiBwcmVmcywgcHJvdGVjdGVkIGJ5IHR1cmJvIHN0YXR1cyBsb2NrICovCisJc3BpbmxvY2tfdCB0dXJib19zdGF0dXNfbG9jazsKKwl1MTYgbWNwX3RlbXBfbGltaXQ7CisJdTE2IG1jcF9wb3dlcl9saW1pdDsKKwl1MTYgY29yZV9wb3dlcl9saW1pdDsKKwl1MTYgbWNoX3Bvd2VyX2xpbWl0OworCWJvb2wgY3B1X3R1cmJvX2VuYWJsZWQ7CisJYm9vbCBfX2NwdV90dXJib19vbjsKKwlib29sIGdwdV90dXJib19lbmFibGVkOworCWJvb2wgX19ncHVfdHVyYm9fb247CisJYm9vbCBncHVfcHJlZmVycmVkOworCWJvb2wgcG9sbF90dXJib19zdGF0dXM7CisJYm9vbCBzZWNvbmRfY3B1OworCXN0cnVjdCBpcHNfbWNwX2xpbWl0cyAqbGltaXRzOworCisJLyogT3B0aW9uYWwgTUNIIGludGVyZmFjZXMgZm9yIGlmIGk5MTUgaXMgaW4gdXNlICovCisJdW5zaWduZWQgbG9uZyAoKnJlYWRfbWNoX3ZhbCkodm9pZCk7CisJYm9vbCAoKmdwdV9yYWlzZSkodm9pZCk7CisJYm9vbCAoKmdwdV9sb3dlcikodm9pZCk7CisJYm9vbCAoKmdwdV9idXN5KSh2b2lkKTsKKwlib29sICgqZ3B1X3R1cmJvX2Rpc2FibGUpKHZvaWQpOworCisJLyogRm9yIHJlc3RvcmF0aW9uIGF0IHVubG9hZCAqLworCXU2NCBvcmlnX3R1cmJvX2xpbWl0OworCXU2NCBvcmlnX3R1cmJvX3JhdGlvczsKK307CisKKy8qKgorICogaXBzX2NwdV9idXN5IC0gaXMgQ1BVIGJ1c3k/CisgKiBAaXBzOiBJUFMgZHJpdmVyIHN0cnVjdAorICoKKyAqIENoZWNrIENQVSBmb3IgbG9hZCB0byBzZWUgd2hldGhlciB3ZSBzaG91bGQgaW5jcmVhc2UgaXRzIHRoZXJtYWwgYnVkZ2V0LgorICoKKyAqIFJFVFVSTlM6CisgKiBUcnVlIGlmIHRoZSBDUFUgY291bGQgdXNlIG1vcmUgcG93ZXIsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgaXBzX2NwdV9idXN5KHN0cnVjdCBpcHNfZHJpdmVyICppcHMpCit7CisJaWYgKChhdmVucnVuWzBdID4+IEZTSElGVCkgPiAxKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiBpcHNfY3B1X3JhaXNlIC0gcmFpc2UgQ1BVIHBvd2VyIGNsYW1wCisgKiBAaXBzOiBJUFMgZHJpdmVyIHN0cnVjdAorICoKKyAqIFJhaXNlIHRoZSBDUFUgcG93ZXIgY2xhbXAgYnkgJUlQU19DUFVfU1RFUCwgaW4gYWNjb3JkYW5jZSB3aXRoIFREUCBmb3IKKyAqIHRoaXMgcGxhdGZvcm0uCisgKgorICogV2UgZG8gdGhpcyBieSBhZGp1c3RpbmcgdGhlIFRVUkJPX1BPV0VSX0NVUlJFTlRfTElNSVQgTVNSIHVwd2FyZHMgKGFzCisgKiBsb25nIGFzIHdlIGhhdmVuJ3QgaGl0IHRoZSBURFAgbGltaXQgZm9yIHRoZSBTS1UpLgorICovCitzdGF0aWMgdm9pZCBpcHNfY3B1X3JhaXNlKHN0cnVjdCBpcHNfZHJpdmVyICppcHMpCit7CisJdTY0IHR1cmJvX292ZXJyaWRlOworCXUxNiBjdXJfdGRwX2xpbWl0LCBuZXdfdGRwX2xpbWl0OworCisJaWYgKCFpcHMtPmNwdV90dXJib19lbmFibGVkKQorCQlyZXR1cm47CisKKwlyZG1zcmwoVFVSQk9fUE9XRVJfQ1VSUkVOVF9MSU1JVCwgdHVyYm9fb3ZlcnJpZGUpOworCisJY3VyX3RkcF9saW1pdCA9IHR1cmJvX292ZXJyaWRlICYgVFVSQk9fVERQX01BU0s7CisJbmV3X3RkcF9saW1pdCA9IGN1cl90ZHBfbGltaXQgKyA4OyAvKiAxVyBpbmNyZWFzZSAqLworCisJLyogQ2xhbXAgdG8gU0tVIFREUCBsaW1pdCAqLworCWlmICgoKG5ld190ZHBfbGltaXQgKiAxMCkgLyA4KSA+IGlwcy0+Y29yZV9wb3dlcl9saW1pdCkKKwkJbmV3X3RkcF9saW1pdCA9IGN1cl90ZHBfbGltaXQ7CisKKwl0aG1fd3JpdGV3KFRITV9NUENQQywgKG5ld190ZHBfbGltaXQgKiAxMCkgLyA4KTsKKworCXR1cmJvX292ZXJyaWRlIHw9IFRVUkJPX1REQ19PVlJfRU4gfCBUVVJCT19URENfT1ZSX0VOOworCXdybXNybChUVVJCT19QT1dFUl9DVVJSRU5UX0xJTUlULCB0dXJib19vdmVycmlkZSk7CisKKwl0dXJib19vdmVycmlkZSAmPSB+VFVSQk9fVERQX01BU0s7CisJdHVyYm9fb3ZlcnJpZGUgfD0gbmV3X3RkcF9saW1pdDsKKworCXdybXNybChUVVJCT19QT1dFUl9DVVJSRU5UX0xJTUlULCB0dXJib19vdmVycmlkZSk7Cit9CisKKy8qKgorICogaXBzX2NwdV9sb3dlciAtIGxvd2VyIENQVSBwb3dlciBjbGFtcAorICogQGlwczogSVBTIGRyaXZlciBzdHJ1Y3QKKyAqCisgKiBMb3dlciBDUFUgcG93ZXIgY2xhbXAgYiAlSVBTX0NQVV9TVEVQIGlmIHBvc3NpYmxlLgorICoKKyAqIFdlIGRvIHRoaXMgYnkgYWRqdXN0aW5nIHRoZSBUVVJCT19QT1dFUl9DVVJSRU5UX0xJTUlUIE1TUiBkb3duLCBnb2luZworICogYXMgbG93IGFzIHRoZSBwbGF0Zm9ybSBsaW1pdHMgd2lsbCBhbGxvdyAodGhvdWdoIHdlIGNvdWxkIGdvIGxvd2VyIHRoZXJlCisgKiB3b3VsZG4ndCBiZSBtdWNoIHBvaW50KS4KKyAqLworc3RhdGljIHZvaWQgaXBzX2NwdV9sb3dlcihzdHJ1Y3QgaXBzX2RyaXZlciAqaXBzKQoreworCXU2NCB0dXJib19vdmVycmlkZTsKKwl1MTYgY3VyX2xpbWl0LCBuZXdfbGltaXQ7CisKKwlyZG1zcmwoVFVSQk9fUE9XRVJfQ1VSUkVOVF9MSU1JVCwgdHVyYm9fb3ZlcnJpZGUpOworCisJY3VyX2xpbWl0ID0gdHVyYm9fb3ZlcnJpZGUgJiBUVVJCT19URFBfTUFTSzsKKwluZXdfbGltaXQgPSBjdXJfbGltaXQgLSA4OyAvKiAxVyBkZWNyZWFzZSAqLworCisJLyogQ2xhbXAgdG8gU0tVIFREUCBsaW1pdCAqLworCWlmICgoKG5ld19saW1pdCAqIDEwKSAvIDgpIDwgKGlwcy0+b3JpZ190dXJib19saW1pdCAmIFRVUkJPX1REUF9NQVNLKSkKKwkJbmV3X2xpbWl0ID0gaXBzLT5vcmlnX3R1cmJvX2xpbWl0ICYgVFVSQk9fVERQX01BU0s7CisKKwl0aG1fd3JpdGV3KFRITV9NUENQQywgKG5ld19saW1pdCAqIDEwKSAvIDgpOworCisJdHVyYm9fb3ZlcnJpZGUgfD0gVFVSQk9fVERDX09WUl9FTiB8IFRVUkJPX1REQ19PVlJfRU47CisJd3Jtc3JsKFRVUkJPX1BPV0VSX0NVUlJFTlRfTElNSVQsIHR1cmJvX292ZXJyaWRlKTsKKworCXR1cmJvX292ZXJyaWRlICY9IH5UVVJCT19URFBfTUFTSzsKKwl0dXJib19vdmVycmlkZSB8PSBuZXdfbGltaXQ7CisKKwl3cm1zcmwoVFVSQk9fUE9XRVJfQ1VSUkVOVF9MSU1JVCwgdHVyYm9fb3ZlcnJpZGUpOworfQorCisvKioKKyAqIGRvX2VuYWJsZV9jcHVfdHVyYm8gLSBpbnRlcm5hbCB0dXJibyBlbmFibGUgZnVuY3Rpb24KKyAqIEBkYXRhOiB1bnVzZWQKKyAqCisgKiBJbnRlcm5hbCBmdW5jdGlvbiBmb3IgYWN0dWFsbHkgdXBkYXRpbmcgTVNScy4gIFdoZW4gd2UgZW5hYmxlL2Rpc2FibGUKKyAqIHR1cmJvLCB3ZSBuZWVkIHRvIGRvIGl0IG9uIGVhY2ggQ1BVOyB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBvbmUgY2FsbGVkCisgKiBieSBvbl9lYWNoX2NwdSgpIHdoZW4gbmVlZGVkLgorICovCitzdGF0aWMgdm9pZCBkb19lbmFibGVfY3B1X3R1cmJvKHZvaWQgKmRhdGEpCit7CisJdTY0IHBlcmZfY3RsOworCisJcmRtc3JsKElBMzJfUEVSRl9DVEwsIHBlcmZfY3RsKTsKKwlpZiAocGVyZl9jdGwgJiBJQTMyX1BFUkZfVFVSQk9fRElTKSB7CisJCXBlcmZfY3RsICY9IH5JQTMyX1BFUkZfVFVSQk9fRElTOworCQl3cm1zcmwoSUEzMl9QRVJGX0NUTCwgcGVyZl9jdGwpOworCX0KK30KKworLyoqCisgKiBpcHNfZW5hYmxlX2NwdV90dXJibyAtIGVuYWJsZSB0dXJibyBtb2RlIG9uIGFsbCBDUFVzCisgKiBAaXBzOiBJUFMgZHJpdmVyIHN0cnVjdAorICoKKyAqIEVuYWJsZSB0dXJibyBtb2RlIGJ5IGNsZWFyaW5nIHRoZSBkaXNhYmxlIGJpdCBpbiBJQTMyX1BFUkZfQ1RMIG9uCisgKiBhbGwgbG9naWNhbCB0aHJlYWRzLgorICovCitzdGF0aWMgdm9pZCBpcHNfZW5hYmxlX2NwdV90dXJibyhzdHJ1Y3QgaXBzX2RyaXZlciAqaXBzKQoreworCS8qIEFscmVhZHkgb24sIG5vIG5lZWQgdG8gbWVzcyB3aXRoIE1TUnMgKi8KKwlpZiAoaXBzLT5fX2NwdV90dXJib19vbikKKwkJcmV0dXJuOworCisJb25fZWFjaF9jcHUoZG9fZW5hYmxlX2NwdV90dXJibywgaXBzLCAxKTsKKworCWlwcy0+X19jcHVfdHVyYm9fb24gPSB0cnVlOworfQorCisvKioKKyAqIGRvX2Rpc2FibGVfY3B1X3R1cmJvIC0gaW50ZXJuYWwgdHVyYm8gZGlzYWJsZSBmdW5jdGlvbgorICogQGRhdGE6IHVudXNlZAorICoKKyAqIEludGVybmFsIGZ1bmN0aW9uIGZvciBhY3R1YWxseSB1cGRhdGluZyBNU1JzLiAgV2hlbiB3ZSBlbmFibGUvZGlzYWJsZQorICogdHVyYm8sIHdlIG5lZWQgdG8gZG8gaXQgb24gZWFjaCBDUFU7IHRoaXMgZnVuY3Rpb24gaXMgdGhlIG9uZSBjYWxsZWQKKyAqIGJ5IG9uX2VhY2hfY3B1KCkgd2hlbiBuZWVkZWQuCisgKi8KK3N0YXRpYyB2b2lkIGRvX2Rpc2FibGVfY3B1X3R1cmJvKHZvaWQgKmRhdGEpCit7CisJdTY0IHBlcmZfY3RsOworCisJcmRtc3JsKElBMzJfUEVSRl9DVEwsIHBlcmZfY3RsKTsKKwlpZiAoIShwZXJmX2N0bCAmIElBMzJfUEVSRl9UVVJCT19ESVMpKSB7CisJCXBlcmZfY3RsIHw9IElBMzJfUEVSRl9UVVJCT19ESVM7CisJCXdybXNybChJQTMyX1BFUkZfQ1RMLCBwZXJmX2N0bCk7CisJfQorfQorCisvKioKKyAqIGlwc19kaXNhYmxlX2NwdV90dXJibyAtIGRpc2FibGUgdHVyYm8gbW9kZSBvbiBhbGwgQ1BVcworICogQGlwczogSVBTIGRyaXZlciBzdHJ1Y3QKKyAqCisgKiBEaXNhYmxlIHR1cmJvIG1vZGUgYnkgc2V0dGluZyB0aGUgZGlzYWJsZSBiaXQgaW4gSUEzMl9QRVJGX0NUTCBvbgorICogYWxsIGxvZ2ljYWwgdGhyZWFkcy4KKyAqLworc3RhdGljIHZvaWQgaXBzX2Rpc2FibGVfY3B1X3R1cmJvKHN0cnVjdCBpcHNfZHJpdmVyICppcHMpCit7CisJLyogQWxyZWFkeSBvZmYsIGxlYXZlIGl0ICovCisJaWYgKCFpcHMtPl9fY3B1X3R1cmJvX29uKQorCQlyZXR1cm47CisKKwlvbl9lYWNoX2NwdShkb19kaXNhYmxlX2NwdV90dXJibywgaXBzLCAxKTsKKworCWlwcy0+X19jcHVfdHVyYm9fb24gPSBmYWxzZTsKK30KKworLyoqCisgKiBpcHNfZ3B1X2J1c3kgLSBpcyBHUFUgYnVzeT8KKyAqIEBpcHM6IElQUyBkcml2ZXIgc3RydWN0CisgKgorICogQ2hlY2sgR1BVIGZvciBsb2FkIHRvIHNlZSB3aGV0aGVyIHdlIHNob3VsZCBpbmNyZWFzZSBpdHMgdGhlcm1hbCBidWRnZXQuCisgKiBXZSBuZWVkIHRvIGNhbGwgaW50byB0aGUgaTkxNSBkcml2ZXIgaW4gdGhpcyBjYXNlLgorICoKKyAqIFJFVFVSTlM6CisgKiBUcnVlIGlmIHRoZSBHUFUgY291bGQgdXNlIG1vcmUgcG93ZXIsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgaXBzX2dwdV9idXN5KHN0cnVjdCBpcHNfZHJpdmVyICppcHMpCit7CisJaWYgKCFpcHMtPmdwdV90dXJib19lbmFibGVkKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gaXBzLT5ncHVfYnVzeSgpOworfQorCisvKioKKyAqIGlwc19ncHVfcmFpc2UgLSByYWlzZSBHUFUgcG93ZXIgY2xhbXAKKyAqIEBpcHM6IElQUyBkcml2ZXIgc3RydWN0CisgKgorICogUmFpc2UgdGhlIEdQVSBmcmVxdWVuY3kvcG93ZXIgaWYgcG9zc2libGUuICBXZSBuZWVkIHRvIGNhbGwgaW50byB0aGUKKyAqIGk5MTUgZHJpdmVyIGluIHRoaXMgY2FzZS4KKyAqLworc3RhdGljIHZvaWQgaXBzX2dwdV9yYWlzZShzdHJ1Y3QgaXBzX2RyaXZlciAqaXBzKQoreworCWlmICghaXBzLT5ncHVfdHVyYm9fZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKCFpcHMtPmdwdV9yYWlzZSgpKQorCQlpcHMtPmdwdV90dXJib19lbmFibGVkID0gZmFsc2U7CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogaXBzX2dwdV9sb3dlciAtIGxvd2VyIEdQVSBwb3dlciBjbGFtcAorICogQGlwczogSVBTIGRyaXZlciBzdHJ1Y3QKKyAqCisgKiBMb3dlciBHUFUgZnJlcXVlbmN5L3Bvd2VyIGlmIHBvc3NpYmxlLiAgTmVlZCB0byBjYWxsIGk5MTUuCisgKi8KK3N0YXRpYyB2b2lkIGlwc19ncHVfbG93ZXIoc3RydWN0IGlwc19kcml2ZXIgKmlwcykKK3sKKwlpZiAoIWlwcy0+Z3B1X3R1cmJvX2VuYWJsZWQpCisJCXJldHVybjsKKworCWlmICghaXBzLT5ncHVfbG93ZXIoKSkKKwkJaXBzLT5ncHVfdHVyYm9fZW5hYmxlZCA9IGZhbHNlOworCisJcmV0dXJuOworfQorCisvKioKKyAqIGlwc19lbmFibGVfZ3B1X3R1cmJvIC0gbm90aWZ5IHRoZSBnZnggZHJpdmVyIHR1cmJvIGlzIGF2YWlsYWJsZQorICogQGlwczogSVBTIGRyaXZlciBzdHJ1Y3QKKyAqCisgKiBDYWxsIGludG8gdGhlIGdyYXBoaWNzIGRyaXZlciBpbmRpY2F0aW5nIHRoYXQgaXQgY2FuIHNhZmVseSB1c2UKKyAqIHR1cmJvIG1vZGUuCisgKi8KK3N0YXRpYyB2b2lkIGlwc19lbmFibGVfZ3B1X3R1cmJvKHN0cnVjdCBpcHNfZHJpdmVyICppcHMpCit7CisJaWYgKGlwcy0+X19ncHVfdHVyYm9fb24pCisJCXJldHVybjsKKwlpcHMtPl9fZ3B1X3R1cmJvX29uID0gdHJ1ZTsKK30KKworLyoqCisgKiBpcHNfZGlzYWJsZV9ncHVfdHVyYm8gLSBub3RpZnkgdGhlIGdmeCBkcml2ZXIgdG8gZGlzYWJsZSB0dXJibyBtb2RlCisgKiBAaXBzOiBJUFMgZHJpdmVyIHN0cnVjdAorICoKKyAqIFJlcXVlc3QgdGhhdCB0aGUgZ3JhcGhpY3MgZHJpdmVyIGRpc2FibGUgdHVyYm8gbW9kZS4KKyAqLworc3RhdGljIHZvaWQgaXBzX2Rpc2FibGVfZ3B1X3R1cmJvKHN0cnVjdCBpcHNfZHJpdmVyICppcHMpCit7CisJLyogQXZvaWQgY2FsbGluZyBpOTE1IGlmIHR1cmJvIGlzIGFscmVhZHkgZGlzYWJsZWQgKi8KKwlpZiAoIWlwcy0+X19ncHVfdHVyYm9fb24pCisJCXJldHVybjsKKworCWlmICghaXBzLT5ncHVfdHVyYm9fZGlzYWJsZSgpKQorCQlkZXZfZXJyKCZpcHMtPmRldi0+ZGV2LCAiZmFpbGVkIHRvIGRpc2FibGUgZ3JhcGhpcyB0dXJib1xuIik7CisJZWxzZQorCQlpcHMtPl9fZ3B1X3R1cmJvX29uID0gZmFsc2U7Cit9CisKKy8qKgorICogbWNwX2V4Y2VlZGVkIC0gY2hlY2sgd2hldGhlciB3ZSdyZSBvdXRzaWRlIG91ciB0aGVybWFsICYgcG93ZXIgbGltaXRzCisgKiBAaXBzOiBJUFMgZHJpdmVyIHN0cnVjdAorICoKKyAqIENoZWNrIHdoZXRoZXIgdGhlIE1DUCBpcyBvdmVyIGl0cyB0aGVybWFsIG9yIHBvd2VyIGJ1ZGdldC4KKyAqLworc3RhdGljIGJvb2wgbWNwX2V4Y2VlZGVkKHN0cnVjdCBpcHNfZHJpdmVyICppcHMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlib29sIHJldCA9IGZhbHNlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlwcy0+dHVyYm9fc3RhdHVzX2xvY2ssIGZsYWdzKTsKKwlpZiAoaXBzLT5tY3BfYXZnX3RlbXAgPiAoaXBzLT5tY3BfdGVtcF9saW1pdCAqIDEwMCkpCisJCXJldCA9IHRydWU7CisJaWYgKGlwcy0+Y3B1X2F2Z19wb3dlciArIGlwcy0+bWNoX2F2Z19wb3dlciA+IGlwcy0+bWNwX3Bvd2VyX2xpbWl0KQorCQlyZXQgPSB0cnVlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwcy0+dHVyYm9fc3RhdHVzX2xvY2ssIGZsYWdzKTsKKworCWlmIChyZXQpCisJCWRldl9pbmZvKCZpcHMtPmRldi0+ZGV2LAorCQkJICJNQ1AgcG93ZXIgb3IgdGhlcm1hbCBsaW1pdCBleGNlZWRlZFxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGNwdV9leGNlZWRlZCAtIGNoZWNrIHdoZXRoZXIgYSBDUFUgY29yZSBpcyBvdXRzaWRlIGl0cyBsaW1pdHMKKyAqIEBpcHM6IElQUyBkcml2ZXIgc3RydWN0CisgKiBAY3B1OiBDUFUgbnVtYmVyIHRvIGNoZWNrCisgKgorICogQ2hlY2sgYSBnaXZlbiBDUFUncyBhdmVyYWdlIHRlbXAgb3IgcG93ZXIgaXMgb3ZlciBpdHMgbGltaXQuCisgKi8KK3N0YXRpYyBib29sIGNwdV9leGNlZWRlZChzdHJ1Y3QgaXBzX2RyaXZlciAqaXBzLCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGF2ZzsKKwlib29sIHJldCA9IGZhbHNlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlwcy0+dHVyYm9fc3RhdHVzX2xvY2ssIGZsYWdzKTsKKwlhdmcgPSBjcHUgPyBpcHMtPmN0djJfYXZnX3RlbXAgOiBpcHMtPmN0djFfYXZnX3RlbXA7CisJaWYgKGF2ZyA+IChpcHMtPmxpbWl0cy0+Y29yZV90ZW1wX2xpbWl0ICogMTAwKSkKKwkJcmV0ID0gdHJ1ZTsKKwlpZiAoaXBzLT5jcHVfYXZnX3Bvd2VyID4gaXBzLT5jb3JlX3Bvd2VyX2xpbWl0ICogMTAwKQorCQlyZXQgPSB0cnVlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwcy0+dHVyYm9fc3RhdHVzX2xvY2ssIGZsYWdzKTsKKworCWlmIChyZXQpCisJCWRldl9pbmZvKCZpcHMtPmRldi0+ZGV2LAorCQkJICJDUFUgcG93ZXIgb3IgdGhlcm1hbCBsaW1pdCBleGNlZWRlZFxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIG1jaF9leGNlZWRlZCAtIGNoZWNrIHdoZXRoZXIgdGhlIEdQVSBpcyBvdmVyIGJ1ZGdldAorICogQGlwczogSVBTIGRyaXZlciBzdHJ1Y3QKKyAqCisgKiBDaGVjayB0aGUgTUNIIHRlbXAgJiBwb3dlciBhZ2FpbnN0IHRoZWlyIG1heGltdW1zLgorICovCitzdGF0aWMgYm9vbCBtY2hfZXhjZWVkZWQoc3RydWN0IGlwc19kcml2ZXIgKmlwcykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWJvb2wgcmV0ID0gZmFsc2U7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXBzLT50dXJib19zdGF0dXNfbG9jaywgZmxhZ3MpOworCWlmIChpcHMtPm1jaF9hdmdfdGVtcCA+IChpcHMtPmxpbWl0cy0+bWNoX3RlbXBfbGltaXQgKiAxMDApKQorCQlyZXQgPSB0cnVlOworCWlmIChpcHMtPm1jaF9hdmdfcG93ZXIgPiBpcHMtPm1jaF9wb3dlcl9saW1pdCkKKwkJcmV0ID0gdHJ1ZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcHMtPnR1cmJvX3N0YXR1c19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHVwZGF0ZV90dXJib19saW1pdHMgLSBnZXQgdmFyaW91cyBsaW1pdHMgJiBzZXR0aW5ncyBmcm9tIHJlZ3MKKyAqIEBpcHM6IElQUyBkcml2ZXIgc3RydWN0CisgKgorICogVXBkYXRlIHRoZSBJUFMgcG93ZXIgJiB0ZW1wIGxpbWl0cywgYWxvbmcgd2l0aCB0dXJibyBlbmFibGUgZmxhZ3MsCisgKiBiYXNlZCBvbiBsYXRlc3QgcmVnaXN0ZXIgY29udGVudHMuCisgKgorICogVXNlZCBhdCBpbml0IHRpbWUgYW5kIGZvciBydW50aW1lIEJJT1Mgc3VwcG9ydCwgd2hpY2ggcmVxdWlyZXMgcG9sbGluZworICogdGhlIHJlZ3MgZm9yIHVwZGF0ZXMgKGFzIGEgcmVzdWx0IG9mIEFDLT5EQyB0cmFuc2l0aW9uIGZvciBleGFtcGxlKS4KKyAqCisgKiBMT0NLSU5HOgorICogQ2FsbGVyIG11c3QgaG9sZCB0dXJib19zdGF0dXNfbG9jayAob3V0c2lkZSBvZiBpbml0KQorICovCitzdGF0aWMgdm9pZCB1cGRhdGVfdHVyYm9fbGltaXRzKHN0cnVjdCBpcHNfZHJpdmVyICppcHMpCit7CisJdTMyIGh0cyA9IHRobV9yZWFkbChUSE1fSFRTKTsKKworCWlwcy0+Y3B1X3R1cmJvX2VuYWJsZWQgPSAhKGh0cyAmIEhUU19QQ1REX0RJUyk7CisJaXBzLT5ncHVfdHVyYm9fZW5hYmxlZCA9ICEoaHRzICYgSFRTX0dURF9ESVMpOworCWlwcy0+Y29yZV9wb3dlcl9saW1pdCA9IHRobV9yZWFkdyhUSE1fTVBDUEMpOworCWlwcy0+bWNoX3Bvd2VyX2xpbWl0ID0gdGhtX3JlYWR3KFRITV9NTUdQQyk7CisJaXBzLT5tY3BfdGVtcF9saW1pdCA9IHRobV9yZWFkdyhUSE1fUFRMKTsKKwlpcHMtPm1jcF9wb3dlcl9saW1pdCA9IHRobV9yZWFkdyhUSE1fTVBQQyk7CisKKwkvKiBJZ25vcmUgQklPUyBDUFUgdnMgR1BVIHByZWYgKi8KK30KKworLyoqCisgKiBpcHNfYWRqdXN0IC0gYWRqdXN0IHBvd2VyIGNsYW1wIGJhc2VkIG9uIHRoZXJtYWwgc3RhdGUKKyAqIEBkYXRhOiBpcHMgZHJpdmVyIHN0cnVjdHVyZQorICoKKyAqIFdha2UgdXAgZXZlcnkgNXMgb3Igc28gYW5kIGNoZWNrIHdoZXRoZXIgd2Ugc2hvdWxkIGFkanVzdCB0aGUgcG93ZXIgY2xhbXAuCisgKiBDaGVjayBDUFUgYW5kIEdQVSBsb2FkIHRvIGRldGVybWluZSB3aGljaCBuZWVkcyBhZGp1c3RtZW50LiAgVGhlcmUgYXJlCisgKiBzZXZlcmFsIHRoaW5ncyB0byBjb25zaWRlciBoZXJlOgorICogICAtIGRvIHdlIG5lZWQgdG8gYWRqdXN0IHVwIG9yIGRvd24/CisgKiAgIC0gaXMgQ1BVIGJ1c3k/CisgKiAgIC0gaXMgR1BVIGJ1c3k/CisgKiAgIC0gaXMgQ1BVIGluIHR1cmJvPworICogICAtIGlzIEdQVSBpbiB0dXJibz8KKyAqICAgLSBpcyBDUFUgb3IgR1BVIHByZWZlcnJlZD8gKENQVSBpcyBkZWZhdWx0KQorICoKKyAqIFNvLCBnaXZlbiB0aGUgYWJvdmUsIHdlIGRvIHRoZSBmb2xsb3dpbmc6CisgKiAgIC0gdXAgKFREUCBhdmFpbGFibGUpCisgKiAgICAgLSBDUFUgbm90IGJ1c3ksIEdQVSBub3QgYnVzeSAtIG5vdGhpbmcKKyAqICAgICAtIENQVSBidXN5LCBHUFUgbm90IGJ1c3kgLSBhZGp1c3QgQ1BVIHVwCisgKiAgICAgLSBDUFUgbm90IGJ1c3ksIEdQVSBidXN5IC0gYWRqdXN0IEdQVSB1cAorICogICAgIC0gQ1BVIGJ1c3ksIEdQVSBidXN5IC0gYWRqdXN0IHByZWZlcnJlZCB1bml0IHVwLCB0YWtpbmcgaGVhZHJvb20gZnJvbQorICogICAgICAgbm9uLXByZWZlcnJlZCB1bml0IGlmIG5lY2Vzc2FyeQorICogICAtIGRvd24gKGF0IFREUCBsaW1pdCkKKyAqICAgICAtIGFkanVzdCBib3RoIENQVSBhbmQgR1BVIGRvd24gaWYgcG9zc2libGUKKyAqCisJCWNwdSsgZ3B1KwljcHUrZ3B1LQljcHUtZ3B1KwljcHUtZ3B1LQorY3B1IDwgZ3B1IDwJY3B1K2dwdSsJY3B1KwkJZ3B1KwkJbm90aGluZworY3B1IDwgZ3B1ID49CWNwdStncHUtKG1jcDwpCWNwdStncHUtKG1jcDwpCWdwdS0JCWdwdS0KK2NwdSA+PSBncHUgPAljcHUtZ3B1KyhtY3A8KQljcHUtCQljcHUtZ3B1KyhtY3A8KQljcHUtCitjcHUgPj0gZ3B1ID49CWNwdS1ncHUtCWNwdS1ncHUtCWNwdS1ncHUtCWNwdS1ncHUtCisgKgorICovCitzdGF0aWMgaW50IGlwc19hZGp1c3Qodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXBzX2RyaXZlciAqaXBzID0gZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGV2X2RiZygmaXBzLT5kZXYtPmRldiwgInN0YXJ0aW5nIGlwcy1hZGp1c3QgdGhyZWFkXG4iKTsKKworCS8qCisJICogQWRqdXN0IENQVSBhbmQgR1BVIGNsYW1wcyBldmVyeSA1cyBpZiBuZWVkZWQuICBEb2luZyBpdCBtb3JlCisJICogb2Z0ZW4gaXNuJ3QgcmVjb21tZW5kZWQgZHVlIHRvIE1FIGludGVyYWN0aW9uLgorCSAqLworCWRvIHsKKwkJYm9vbCBjcHVfYnVzeSA9IGlwc19jcHVfYnVzeShpcHMpOworCQlib29sIGdwdV9idXN5ID0gaXBzX2dwdV9idXN5KGlwcyk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlwcy0+dHVyYm9fc3RhdHVzX2xvY2ssIGZsYWdzKTsKKwkJaWYgKGlwcy0+cG9sbF90dXJib19zdGF0dXMpCisJCQl1cGRhdGVfdHVyYm9fbGltaXRzKGlwcyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwcy0+dHVyYm9fc3RhdHVzX2xvY2ssIGZsYWdzKTsKKworCQkvKiBVcGRhdGUgdHVyYm8gc3RhdHVzIGlmIG5lY2Vzc2FyeSAqLworCQlpZiAoaXBzLT5jcHVfdHVyYm9fZW5hYmxlZCkKKwkJCWlwc19lbmFibGVfY3B1X3R1cmJvKGlwcyk7CisJCWVsc2UKKwkJCWlwc19kaXNhYmxlX2NwdV90dXJibyhpcHMpOworCisJCWlmIChpcHMtPmdwdV90dXJib19lbmFibGVkKQorCQkJaXBzX2VuYWJsZV9ncHVfdHVyYm8oaXBzKTsKKwkJZWxzZQorCQkJaXBzX2Rpc2FibGVfZ3B1X3R1cmJvKGlwcyk7CisKKwkJLyogV2UncmUgb3V0c2lkZSBvdXIgY29tZm9ydCB6b25lLCBjcmFuayB0aGVtIGRvd24gKi8KKwkJaWYgKG1jcF9leGNlZWRlZChpcHMpKSB7CisJCQlpcHNfY3B1X2xvd2VyKGlwcyk7CisJCQlpcHNfZ3B1X2xvd2VyKGlwcyk7CisJCQlnb3RvIHNsZWVwOworCQl9CisKKwkJaWYgKCFjcHVfZXhjZWVkZWQoaXBzLCAwKSAmJiBjcHVfYnVzeSkKKwkJCWlwc19jcHVfcmFpc2UoaXBzKTsKKwkJZWxzZQorCQkJaXBzX2NwdV9sb3dlcihpcHMpOworCisJCWlmICghbWNoX2V4Y2VlZGVkKGlwcykgJiYgZ3B1X2J1c3kpCisJCQlpcHNfZ3B1X3JhaXNlKGlwcyk7CisJCWVsc2UKKwkJCWlwc19ncHVfbG93ZXIoaXBzKTsKKworc2xlZXA6CisJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKElQU19BREpVU1RfUEVSSU9EKSk7CisJfSB3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7CisKKwlkZXZfZGJnKCZpcHMtPmRldi0+ZGV2LCAiaXBzLWFkanVzdCB0aHJlYWQgc3RvcHBlZFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEhlbHBlcnMgZm9yIHJlYWRpbmcgb3V0IHRlbXAvcG93ZXIgdmFsdWVzIGFuZCBjYWxjdWxhdGluZyB0aGVpcgorICogYXZlcmFnZXMgZm9yIHRoZSBkZWNpc2lvbiBtYWtpbmcgYW5kIG1vbml0b3JpbmcgZnVuY3Rpb25zLgorICovCisKK3N0YXRpYyB1MTYgY2FsY19hdmdfdGVtcChzdHJ1Y3QgaXBzX2RyaXZlciAqaXBzLCB1MTYgKmFycmF5KQoreworCXU2NCB0b3RhbCA9IDA7CisJaW50IGk7CisJdTE2IGF2ZzsKKworCWZvciAoaSA9IDA7IGkgPCBJUFNfU0FNUExFX0NPVU5UOyBpKyspCisJCXRvdGFsICs9ICh1NjQpKGFycmF5W2ldICogMTAwKTsKKworCWRvX2Rpdih0b3RhbCwgSVBTX1NBTVBMRV9DT1VOVCk7CisKKwlhdmcgPSAodTE2KXRvdGFsOworCisJcmV0dXJuIGF2ZzsKK30KKworc3RhdGljIHUxNiByZWFkX21ndHYoc3RydWN0IGlwc19kcml2ZXIgKmlwcykKK3sKKwl1MTYgcmV0OworCXU2NCBzbG9wZSwgb2Zmc2V0OworCXU2NCB2YWw7CisKKwl2YWwgPSB0aG1fcmVhZHEoVEhNX01HVFYpOworCXZhbCA9ICh2YWwgJiBUVl9NQVNLKSA+PiBUVl9TSElGVDsKKworCXNsb3BlID0gb2Zmc2V0ID0gdGhtX3JlYWR3KFRITV9NR1RBKTsKKwlzbG9wZSA9IChzbG9wZSAmIE1HVEFfU0xPUEVfTUFTSykgPj4gTUdUQV9TTE9QRV9TSElGVDsKKwlvZmZzZXQgPSBvZmZzZXQgJiBNR1RBX09GRlNFVF9NQVNLOworCisJcmV0ID0gKCh2YWwgKiBzbG9wZSArIDB4NDApID4+IDcpICsgb2Zmc2V0OworCisJcmV0dXJuIDA7IC8qIE1DSCB0ZW1wIHJlcG9ydGluZyBidWdneSAqLworfQorCitzdGF0aWMgdTE2IHJlYWRfcHR2KHN0cnVjdCBpcHNfZHJpdmVyICppcHMpCit7CisJdTE2IHZhbCwgc2xvcGUsIG9mZnNldDsKKworCXNsb3BlID0gKGlwcy0+cHRhX3ZhbCAmIFBUQV9TTE9QRV9NQVNLKSA+PiBQVEFfU0xPUEVfU0hJRlQ7CisJb2Zmc2V0ID0gaXBzLT5wdGFfdmFsICYgUFRBX09GRlNFVF9NQVNLOworCisJdmFsID0gdGhtX3JlYWR3KFRITV9QVFYpICYgUFRWX01BU0s7CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgdTE2IHJlYWRfY3R2KHN0cnVjdCBpcHNfZHJpdmVyICppcHMsIGludCBjcHUpCit7CisJaW50IHJlZyA9IGNwdSA/IFRITV9DVFYyIDogVEhNX0NUVjE7CisJdTE2IHZhbDsKKworCXZhbCA9IHRobV9yZWFkdyhyZWcpOworCWlmICghKHZhbCAmIENUVl9URU1QX0VSUk9SKSkKKwkJdmFsID0gKHZhbCkgPj4gNjsgLyogZGlzY2FyZCBmcmFjdGlvbmFsIGNvbXBvbmVudCAqLworCWVsc2UKKwkJdmFsID0gMDsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyB1MzIgZ2V0X2NwdV9wb3dlcihzdHJ1Y3QgaXBzX2RyaXZlciAqaXBzLCB1MzIgKmxhc3QsIGludCBwZXJpb2QpCit7CisJdTMyIHZhbDsKKwl1MzIgcmV0OworCisJLyoKKwkgKiBDRUMgaXMgaW4gam91bGVzLzY1NTM1LiAgVGFrZSBkaWZmZXJlbmNlIG92ZXIgdGltZSB0bworCSAqIGdldCB3YXR0cy4KKwkgKi8KKwl2YWwgPSB0aG1fcmVhZGwoVEhNX0NFQyk7CisKKwkvKiBwZXJpb2QgaXMgaW4gbXMgYW5kIHdlIHdhbnQgbVcgKi8KKwlyZXQgPSAoKCh2YWwgLSAqbGFzdCkgKiAxMDAwKSAvIHBlcmlvZCk7CisJcmV0ID0gKHJldCAqIDEwMDApIC8gNjU1MzU7CisJKmxhc3QgPSB2YWw7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3QgdTE2IHRlbXBfZGVjYXlfZmFjdG9yID0gMjsKK3N0YXRpYyB1MTYgdXBkYXRlX2F2ZXJhZ2VfdGVtcCh1MTYgYXZnLCB1MTYgdmFsKQoreworCXUxNiByZXQ7CisKKwkvKiBNdWx0aXBseSBieSAxMDAgZm9yIGV4dHJhIHByZWNpc2lvbiAqLworCXJldCA9ICh2YWwgKiAxMDAgLyB0ZW1wX2RlY2F5X2ZhY3RvcikgKworCQkoKCh0ZW1wX2RlY2F5X2ZhY3RvciAtIDEpICogYXZnKSAvIHRlbXBfZGVjYXlfZmFjdG9yKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3QgdTE2IHBvd2VyX2RlY2F5X2ZhY3RvciA9IDI7CitzdGF0aWMgdTE2IHVwZGF0ZV9hdmVyYWdlX3Bvd2VyKHUzMiBhdmcsIHUzMiB2YWwpCit7CisJdTMyIHJldDsKKworCXJldCA9ICh2YWwgLyBwb3dlcl9kZWNheV9mYWN0b3IpICsKKwkJKCgocG93ZXJfZGVjYXlfZmFjdG9yIC0gMSkgKiBhdmcpIC8gcG93ZXJfZGVjYXlfZmFjdG9yKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1MzIgY2FsY19hdmdfcG93ZXIoc3RydWN0IGlwc19kcml2ZXIgKmlwcywgdTMyICphcnJheSkKK3sKKwl1NjQgdG90YWwgPSAwOworCXUzMiBhdmc7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSVBTX1NBTVBMRV9DT1VOVDsgaSsrKQorCQl0b3RhbCArPSBhcnJheVtpXTsKKworCWRvX2Rpdih0b3RhbCwgSVBTX1NBTVBMRV9DT1VOVCk7CisJYXZnID0gKHUzMil0b3RhbDsKKworCXJldHVybiBhdmc7Cit9CisKK3N0YXRpYyB2b2lkIG1vbml0b3JfdGltZW91dCh1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl3YWtlX3VwX3Byb2Nlc3MoKHN0cnVjdCB0YXNrX3N0cnVjdCAqKWFyZyk7Cit9CisKKy8qKgorICogaXBzX21vbml0b3IgLSB0ZW1wL3Bvd2VyIG1vbml0b3JpbmcgdGhyZWFkCisgKiBAZGF0YTogaXBzIGRyaXZlciBzdHJ1Y3R1cmUKKyAqCisgKiBUaGlzIGlzIHRoZSBtYWluIGZ1bmN0aW9uIGZvciB0aGUgSVBTIGRyaXZlci4gIEl0IG1vbml0b3JzIHBvd2VyIGFuZAorICogdGVtcHVyYXR1cmUgaW4gdGhlIE1DUCBhbmQgYWRqdXN0cyBDUFUgYW5kIEdQVSBwb3dlciBjbGFtcyBhY2NvcmRpbmdseS4KKyAqCisgKiBXZSBrZWVwIGEgNXMgbW92aW5nIGF2ZXJhZ2Ugb2YgcG93ZXIgY29uc3VtcHRpb24gYW5kIHRlbXB1cmF0dXJlLiAgVXNpbmcKKyAqIHRoYXQgZGF0YSwgYWxvbmcgd2l0aCBDUFUgdnMgR1BVIHByZWZlcmVuY2UsIHdlIGFkanVzdCB0aGUgcG93ZXIgY2xhbXBzCisgKiB1cCBvciBkb3duLgorICovCitzdGF0aWMgaW50IGlwc19tb25pdG9yKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGlwc19kcml2ZXIgKmlwcyA9IGRhdGE7CisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJdW5zaWduZWQgbG9uZyBzZXFub190aW1lc3RhbXAsIGV4cGlyZSwgbGFzdF9tc2VjcywgbGFzdF9zYW1wbGVfcGVyaW9kOworCWludCBpOworCXUzMiAqY3B1X3NhbXBsZXMsICptY2hwX3NhbXBsZXMsIG9sZF9jcHVfcG93ZXI7CisJdTE2ICptY3Bfc2FtcGxlcywgKmN0djFfc2FtcGxlcywgKmN0djJfc2FtcGxlcywgKm1jaF9zYW1wbGVzOworCXU4IGN1cl9zZXFubywgbGFzdF9zZXFubzsKKworCW1jcF9zYW1wbGVzID0ga3phbGxvYyhzaXplb2YodTE2KSAqIElQU19TQU1QTEVfQ09VTlQsIEdGUF9LRVJORUwpOworCWN0djFfc2FtcGxlcyA9IGt6YWxsb2Moc2l6ZW9mKHUxNikgKiBJUFNfU0FNUExFX0NPVU5ULCBHRlBfS0VSTkVMKTsKKwljdHYyX3NhbXBsZXMgPSBremFsbG9jKHNpemVvZih1MTYpICogSVBTX1NBTVBMRV9DT1VOVCwgR0ZQX0tFUk5FTCk7CisJbWNoX3NhbXBsZXMgPSBremFsbG9jKHNpemVvZih1MTYpICogSVBTX1NBTVBMRV9DT1VOVCwgR0ZQX0tFUk5FTCk7CisJY3B1X3NhbXBsZXMgPSBremFsbG9jKHNpemVvZih1MzIpICogSVBTX1NBTVBMRV9DT1VOVCwgR0ZQX0tFUk5FTCk7CisJbWNocF9zYW1wbGVzID0ga3phbGxvYyhzaXplb2YodTMyKSAqIElQU19TQU1QTEVfQ09VTlQsIEdGUF9LRVJORUwpOworCWlmICghbWNwX3NhbXBsZXMgfHwgIWN0djFfc2FtcGxlcyB8fCAhY3R2Ml9zYW1wbGVzIHx8ICFtY2hfc2FtcGxlcyB8fAorCQkJIWNwdV9zYW1wbGVzIHx8ICFtY2hwX3NhbXBsZXMpIHsKKwkJZGV2X2VycigmaXBzLT5kZXYtPmRldiwKKwkJCSJmYWlsZWQgdG8gYWxsb2NhdGUgc2FtcGxlIGFycmF5LCBpcHMgZGlzYWJsZWRcbiIpOworCQlrZnJlZShtY3Bfc2FtcGxlcyk7CisJCWtmcmVlKGN0djFfc2FtcGxlcyk7CisJCWtmcmVlKGN0djJfc2FtcGxlcyk7CisJCWtmcmVlKG1jaF9zYW1wbGVzKTsKKwkJa2ZyZWUoY3B1X3NhbXBsZXMpOworCQlrZnJlZShtY2hwX3NhbXBsZXMpOworCQlrdGhyZWFkX3N0b3AoaXBzLT5hZGp1c3QpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlsYXN0X3NlcW5vID0gKHRobV9yZWFkbChUSE1fSVRWKSAmIElUVl9NRV9TRVFOT19NQVNLKSA+PgorCQlJVFZfTUVfU0VRTk9fU0hJRlQ7CisJc2Vxbm9fdGltZXN0YW1wID0gZ2V0X2ppZmZpZXNfNjQoKTsKKworCW9sZF9jcHVfcG93ZXIgPSB0aG1fcmVhZGwoVEhNX0NFQykgLyA2NTUzNTsKKwlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcyhJUFNfU0FNUExFX1BFUklPRCkpOworCisJLyogQ29sbGVjdCBhbiBpbml0aWFsIGF2ZXJhZ2UgKi8KKwlmb3IgKGkgPSAwOyBpIDwgSVBTX1NBTVBMRV9DT1VOVDsgaSsrKSB7CisJCXUzMiBtY2hwLCBjcHVfcG93ZXI7CisJCXUxNiB2YWw7CisKKwkJbWNwX3NhbXBsZXNbaV0gPSByZWFkX3B0dihpcHMpOworCisJCXZhbCA9IHJlYWRfY3R2KGlwcywgMCk7CisJCWN0djFfc2FtcGxlc1tpXSA9IHZhbDsKKworCQl2YWwgPSByZWFkX2N0dihpcHMsIDEpOworCQljdHYyX3NhbXBsZXNbaV0gPSB2YWw7CisKKwkJdmFsID0gcmVhZF9tZ3R2KGlwcyk7CisJCW1jaF9zYW1wbGVzW2ldID0gdmFsOworCisJCWNwdV9wb3dlciA9IGdldF9jcHVfcG93ZXIoaXBzLCAmb2xkX2NwdV9wb3dlciwKKwkJCQkJICBJUFNfU0FNUExFX1BFUklPRCk7CisJCWNwdV9zYW1wbGVzW2ldID0gY3B1X3Bvd2VyOworCisJCWlmIChpcHMtPnJlYWRfbWNoX3ZhbCkgeworCQkJbWNocCA9IGlwcy0+cmVhZF9tY2hfdmFsKCk7CisJCQltY2hwX3NhbXBsZXNbaV0gPSBtY2hwOworCQl9CisKKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoSVBTX1NBTVBMRV9QRVJJT0QpKTsKKwkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKKwkJCWJyZWFrOworCX0KKworCWlwcy0+bWNwX2F2Z190ZW1wID0gY2FsY19hdmdfdGVtcChpcHMsIG1jcF9zYW1wbGVzKTsKKwlpcHMtPmN0djFfYXZnX3RlbXAgPSBjYWxjX2F2Z190ZW1wKGlwcywgY3R2MV9zYW1wbGVzKTsKKwlpcHMtPmN0djJfYXZnX3RlbXAgPSBjYWxjX2F2Z190ZW1wKGlwcywgY3R2Ml9zYW1wbGVzKTsKKwlpcHMtPm1jaF9hdmdfdGVtcCA9IGNhbGNfYXZnX3RlbXAoaXBzLCBtY2hfc2FtcGxlcyk7CisJaXBzLT5jcHVfYXZnX3Bvd2VyID0gY2FsY19hdmdfcG93ZXIoaXBzLCBjcHVfc2FtcGxlcyk7CisJaXBzLT5tY2hfYXZnX3Bvd2VyID0gY2FsY19hdmdfcG93ZXIoaXBzLCBtY2hwX3NhbXBsZXMpOworCWtmcmVlKG1jcF9zYW1wbGVzKTsKKwlrZnJlZShjdHYxX3NhbXBsZXMpOworCWtmcmVlKGN0djJfc2FtcGxlcyk7CisJa2ZyZWUobWNoX3NhbXBsZXMpOworCWtmcmVlKGNwdV9zYW1wbGVzKTsKKwlrZnJlZShtY2hwX3NhbXBsZXMpOworCisJLyogU3RhcnQgdGhlIGFkanVzdG1lbnQgdGhyZWFkIG5vdyB0aGF0IHdlIGhhdmUgZGF0YSAqLworCXdha2VfdXBfcHJvY2VzcyhpcHMtPmFkanVzdCk7CisKKwkvKgorCSAqIE9rLCBub3cgd2UgaGF2ZSBhbiBpbml0aWFsIGF2Zy4gIEZyb20gaGVyZSBvbiBvdXQsIHdlIHRyYWNrIHRoZQorCSAqIHJ1bm5pbmcgYXZnIHVzaW5nIGEgZGVjYXlpbmcgYXZlcmFnZSBjYWxjdWxhdGlvbi4gIFRoaXMgYWxsb3dzCisJICogdXMgdG8gcmVkdWNlIHRoZSBzYW1wbGUgZnJlcXVlbmN5IGlmIHRoZSBDUFUgYW5kIEdQVSBhcmUgaWRsZS4KKwkgKi8KKwlvbGRfY3B1X3Bvd2VyID0gdGhtX3JlYWRsKFRITV9DRUMpOworCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKElQU19TQU1QTEVfUEVSSU9EKSk7CisJbGFzdF9zYW1wbGVfcGVyaW9kID0gSVBTX1NBTVBMRV9QRVJJT0Q7CisKKwlzZXR1cF9kZWZlcnJhYmxlX3RpbWVyX29uX3N0YWNrKCZ0aW1lciwgbW9uaXRvcl90aW1lb3V0LAorCQkJCQkodW5zaWduZWQgbG9uZyljdXJyZW50KTsKKwlkbyB7CisJCXUzMiBjcHVfdmFsLCBtY2hfdmFsOworCQl1MTYgdmFsOworCisJCS8qIE1DUCBpdHNlbGYgKi8KKwkJdmFsID0gcmVhZF9wdHYoaXBzKTsKKwkJaXBzLT5tY3BfYXZnX3RlbXAgPSB1cGRhdGVfYXZlcmFnZV90ZW1wKGlwcy0+bWNwX2F2Z190ZW1wLCB2YWwpOworCisJCS8qIFByb2Nlc3NvciAwICovCisJCXZhbCA9IHJlYWRfY3R2KGlwcywgMCk7CisJCWlwcy0+Y3R2MV9hdmdfdGVtcCA9CisJCQl1cGRhdGVfYXZlcmFnZV90ZW1wKGlwcy0+Y3R2MV9hdmdfdGVtcCwgdmFsKTsKKwkJLyogUG93ZXIgKi8KKwkJY3B1X3ZhbCA9IGdldF9jcHVfcG93ZXIoaXBzLCAmb2xkX2NwdV9wb3dlciwKKwkJCQkJbGFzdF9zYW1wbGVfcGVyaW9kKTsKKwkJaXBzLT5jcHVfYXZnX3Bvd2VyID0KKwkJCXVwZGF0ZV9hdmVyYWdlX3Bvd2VyKGlwcy0+Y3B1X2F2Z19wb3dlciwgY3B1X3ZhbCk7CisKKwkJaWYgKGlwcy0+c2Vjb25kX2NwdSkgeworCQkJLyogUHJvY2Vzc29yIDEgKi8KKwkJCXZhbCA9IHJlYWRfY3R2KGlwcywgMSk7CisJCQlpcHMtPmN0djJfYXZnX3RlbXAgPQorCQkJCXVwZGF0ZV9hdmVyYWdlX3RlbXAoaXBzLT5jdHYyX2F2Z190ZW1wLCB2YWwpOworCQl9CisKKwkJLyogTUNIICovCisJCXZhbCA9IHJlYWRfbWd0dihpcHMpOworCQlpcHMtPm1jaF9hdmdfdGVtcCA9IHVwZGF0ZV9hdmVyYWdlX3RlbXAoaXBzLT5tY2hfYXZnX3RlbXAsIHZhbCk7CisJCS8qIFBvd2VyICovCisJCWlmIChpcHMtPnJlYWRfbWNoX3ZhbCkgeworCQkJbWNoX3ZhbCA9IGlwcy0+cmVhZF9tY2hfdmFsKCk7CisJCQlpcHMtPm1jaF9hdmdfcG93ZXIgPQorCQkJCXVwZGF0ZV9hdmVyYWdlX3Bvd2VyKGlwcy0+bWNoX2F2Z19wb3dlciwKKwkJCQkJCSAgICAgbWNoX3ZhbCk7CisJCX0KKworCQkvKgorCQkgKiBNYWtlIHN1cmUgTUUgaXMgdXBkYXRpbmcgdGhlcm1hbCByZWdzLgorCQkgKiBOb3RlOgorCQkgKiBJZiBpdCdzIGJlZW4gbW9yZSB0aGFuIGEgc2Vjb25kIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZSwKKwkJICogdGhlIE1FIGlzIHByb2JhYmx5IGh1bmcuCisJCSAqLworCQljdXJfc2Vxbm8gPSAodGhtX3JlYWRsKFRITV9JVFYpICYgSVRWX01FX1NFUU5PX01BU0spID4+CisJCQlJVFZfTUVfU0VRTk9fU0hJRlQ7CisJCWlmIChjdXJfc2Vxbm8gPT0gbGFzdF9zZXFubyAmJgorCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBzZXFub190aW1lc3RhbXAgKyBIWikpIHsKKwkJCWRldl93YXJuKCZpcHMtPmRldi0+ZGV2LCAiTUUgZmFpbGVkIHRvIHVwZGF0ZSBmb3IgbW9yZSB0aGFuIDFzLCBsaWtlbHkgaHVuZ1xuIik7CisJCX0gZWxzZSB7CisJCQlzZXFub190aW1lc3RhbXAgPSBnZXRfamlmZmllc182NCgpOworCQkJbGFzdF9zZXFubyA9IGN1cl9zZXFubzsKKwkJfQorCisJCWxhc3RfbXNlY3MgPSBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMpOworCQlleHBpcmUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhJUFNfU0FNUExFX1BFUklPRCk7CisKKwkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCW1vZF90aW1lcigmdGltZXIsIGV4cGlyZSk7CisJCXNjaGVkdWxlKCk7CisKKwkJLyogQ2FsY3VsYXRlIGFjdHVhbCBzYW1wbGUgcGVyaW9kIGZvciBwb3dlciBhdmVyYWdpbmcgKi8KKwkJbGFzdF9zYW1wbGVfcGVyaW9kID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzKSAtIGxhc3RfbXNlY3M7CisJCWlmICghbGFzdF9zYW1wbGVfcGVyaW9kKQorCQkJbGFzdF9zYW1wbGVfcGVyaW9kID0gMTsKKwl9IHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKTsKKworCWRlbF90aW1lcl9zeW5jKCZ0aW1lcik7CisJZGVzdHJveV90aW1lcl9vbl9zdGFjaygmdGltZXIpOworCisJZGV2X2RiZygmaXBzLT5kZXYtPmRldiwgImlwcy1tb25pdG9yIHRocmVhZCBzdG9wcGVkXG4iKTsKKworCXJldHVybiAwOworfQorCisjaWYgMAorI2RlZmluZSBUSE1fRFVNUFcocmVnKSBcCisJeyBcCisJdTE2IHZhbCA9IHRobV9yZWFkdyhyZWcpOyBcCisJZGV2X2RiZygmaXBzLT5kZXYtPmRldiwgI3JlZyAiOiAweCUwNHhcbiIsIHZhbCk7IFwKKwl9CisjZGVmaW5lIFRITV9EVU1QTChyZWcpIFwKKwl7IFwKKwl1MzIgdmFsID0gdGhtX3JlYWRsKHJlZyk7IFwKKwlkZXZfZGJnKCZpcHMtPmRldi0+ZGV2LCAjcmVnICI6IDB4JTA4eFxuIiwgdmFsKTsgXAorCX0KKyNkZWZpbmUgVEhNX0RVTVBRKHJlZykgXAorCXsgXAorCXU2NCB2YWwgPSB0aG1fcmVhZHEocmVnKTsgXAorCWRldl9kYmcoJmlwcy0+ZGV2LT5kZXYsICNyZWcgIjogMHglMDE2eFxuIiwgdmFsKTsgXAorCX0KKworc3RhdGljIHZvaWQgZHVtcF90aGVybWFsX2luZm8oc3RydWN0IGlwc19kcml2ZXIgKmlwcykKK3sKKwl1MTYgcHRsOworCisJcHRsID0gdGhtX3JlYWR3KFRITV9QVEwpOworCWRldl9kYmcoJmlwcy0+ZGV2LT5kZXYsICJQcm9jZXNzb3IgdGVtcCBsaW1pdDogJWRcbiIsIHB0bCk7CisKKwlUSE1fRFVNUFcoVEhNX0NUQSk7CisJVEhNX0RVTVBXKFRITV9UUkMpOworCVRITV9EVU1QVyhUSE1fQ1RWMSk7CisJVEhNX0RVTVBMKFRITV9TVFMpOworCVRITV9EVU1QVyhUSE1fUFRWKTsKKwlUSE1fRFVNUFEoVEhNX01HVFYpOworfQorI2VuZGlmCisKKy8qKgorICogaXBzX2lycV9oYW5kbGVyIC0gaGFuZGxlIHRlbXBlcmF0dXJlIHRyaWdnZXJzIGFuZCBvdGhlciBJUFMgZXZlbnRzCisgKiBAaXJxOiBpcnEgbnVtYmVyCisgKiBAYXJnOiB1bnVzZWQKKyAqCisgKiBIYW5kbGUgdGVtcGVyYXR1cmUgbGltaXQgdHJpZ2dlciBldmVudHMsIGdlbmVyYWxseSBieSBsb3dlcmluZyB0aGUgY2xhbXBzLgorICogSWYgd2UncmUgYXQgYSBjcml0aWNhbCBsaW1pdCwgd2UgY2xhbXAgYmFjayB0byB0aGUgbG93ZXN0IHBvc3NpYmxlIHZhbHVlCisgKiB0byBwcmV2ZW50IGVtZXJnZW5jeSBzaHV0ZG93bi4KKyAqLworc3RhdGljIGlycXJldHVybl90IGlwc19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCit7CisJc3RydWN0IGlwc19kcml2ZXIgKmlwcyA9IGFyZzsKKwl1OCB0c2VzID0gdGhtX3JlYWRiKFRITV9UU0VTKTsKKwl1OCB0ZXMgPSB0aG1fcmVhZGIoVEhNX1RFUyk7CisKKwlpZiAoIXRzZXMgJiYgIXRlcykKKwkJcmV0dXJuIElSUV9OT05FOworCisJZGV2X2luZm8oJmlwcy0+ZGV2LT5kZXYsICJUU0VTOiAweCUwMnhcbiIsIHRzZXMpOworCWRldl9pbmZvKCZpcHMtPmRldi0+ZGV2LCAiVEVTOiAweCUwMnhcbiIsIHRlcyk7CisKKwkvKiBTVFMgdXBkYXRlIGZyb20gRUM/ICovCisJaWYgKHRlcyAmIDEpIHsKKwkJdTMyIHN0cywgdGMxOworCisJCXN0cyA9IHRobV9yZWFkbChUSE1fU1RTKTsKKwkJdGMxID0gdGhtX3JlYWRsKFRITV9UQzEpOworCisJCWlmIChzdHMgJiBTVFNfTlZWKSB7CisJCQlzcGluX2xvY2soJmlwcy0+dHVyYm9fc3RhdHVzX2xvY2spOworCQkJaXBzLT5jb3JlX3Bvd2VyX2xpbWl0ID0gKHN0cyAmIFNUU19QQ1BMX01BU0spID4+CisJCQkJU1RTX1BDUExfU0hJRlQ7CisJCQlpcHMtPm1jaF9wb3dlcl9saW1pdCA9IChzdHMgJiBTVFNfR1BMX01BU0spID4+CisJCQkJU1RTX0dQTF9TSElGVDsKKwkJCS8qIGlnbm9yZSBFQyBDUFUgdnMgR1BVIHByZWYgKi8KKwkJCWlwcy0+Y3B1X3R1cmJvX2VuYWJsZWQgPSAhKHN0cyAmIFNUU19QQ1REX0RJUyk7CisJCQlpcHMtPmdwdV90dXJib19lbmFibGVkID0gIShzdHMgJiBTVFNfR1REX0RJUyk7CisJCQlpcHMtPm1jcF90ZW1wX2xpbWl0ID0gKHN0cyAmIFNUU19QVExfTUFTSykgPj4KKwkJCQlTVFNfUFRMX1NISUZUOworCQkJaXBzLT5tY3BfcG93ZXJfbGltaXQgPSAodGMxICYgU1RTX1BQTF9NQVNLKSA+PgorCQkJCVNUU19QUExfU0hJRlQ7CisJCQlzcGluX3VubG9jaygmaXBzLT50dXJib19zdGF0dXNfbG9jayk7CisKKwkJCXRobV93cml0ZWIoVEhNX1NFQywgU0VDX0FDSyk7CisJCX0KKwkJdGhtX3dyaXRlYihUSE1fVEVTLCB0ZXMpOworCX0KKworCS8qIFRoZXJtYWwgdHJpcCAqLworCWlmICh0c2VzKSB7CisJCWRldl93YXJuKCZpcHMtPmRldi0+ZGV2LAorCQkJICJ0aGVybWFsIHRyaXAgb2NjdXJyZWQsIHRzZXM6IDB4JTA0eFxuIiwgdHNlcyk7CisJCXRobV93cml0ZWIoVEhNX1RTRVMsIHRzZXMpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworI2lmbmRlZiBDT05GSUdfREVCVUdfRlMKK3N0YXRpYyB2b2lkIGlwc19kZWJ1Z2ZzX2luaXQoc3RydWN0IGlwc19kcml2ZXIgKmlwcykgeyByZXR1cm47IH0KK3N0YXRpYyB2b2lkIGlwc19kZWJ1Z2ZzX2NsZWFudXAoc3RydWN0IGlwc19kcml2ZXIgKmlwcykgeyByZXR1cm47IH0KKyNlbHNlCisKKy8qIEV4cG9zZSBjdXJyZW50IHN0YXRlIGFuZCBsaW1pdHMgaW4gZGVidWdmcyBpZiBwb3NzaWJsZSAqLworCitzdHJ1Y3QgaXBzX2RlYnVnZnNfbm9kZSB7CisJc3RydWN0IGlwc19kcml2ZXIgKmlwczsKKwljaGFyICpuYW1lOworCWludCAoKnNob3cpKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSk7Cit9OworCitzdGF0aWMgaW50IHNob3dfY3B1X3RlbXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBpcHNfZHJpdmVyICppcHMgPSBtLT5wcml2YXRlOworCisJc2VxX3ByaW50ZihtLCAiJWQuJTAyZFxuIiwgaXBzLT5jdHYxX2F2Z190ZW1wIC8gMTAwLAorCQkgICBpcHMtPmN0djFfYXZnX3RlbXAgJSAxMDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19jcHVfcG93ZXIoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBpcHNfZHJpdmVyICppcHMgPSBtLT5wcml2YXRlOworCisJc2VxX3ByaW50ZihtLCAiJWRtV1xuIiwgaXBzLT5jcHVfYXZnX3Bvd2VyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNob3dfY3B1X2NsYW1wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwl1NjQgdHVyYm9fb3ZlcnJpZGU7CisJaW50IHRkcCwgdGRjOworCisJcmRtc3JsKFRVUkJPX1BPV0VSX0NVUlJFTlRfTElNSVQsIHR1cmJvX292ZXJyaWRlKTsKKworCXRkcCA9IChpbnQpKHR1cmJvX292ZXJyaWRlICYgVFVSQk9fVERQX01BU0spOworCXRkYyA9IChpbnQpKCh0dXJib19vdmVycmlkZSAmIFRVUkJPX1REQ19NQVNLKSA+PiBUVVJCT19URENfU0hJRlQpOworCisJLyogQ29udmVydCB0byAuMVcvQSB1bml0cyAqLworCXRkcCA9IHRkcCAqIDEwIC8gODsKKwl0ZGMgPSB0ZGMgKiAxMCAvIDg7CisKKwkvKiBXYXR0cyBBbXBlcmVzICovCisJc2VxX3ByaW50ZihtLCAiJWQuJWRXICVkLiVkQVxuIiwgdGRwIC8gMTAsIHRkcCAlIDEwLAorCQkgICB0ZGMgLyAxMCwgdGRjICUgMTApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19tY2hfdGVtcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGlwc19kcml2ZXIgKmlwcyA9IG0tPnByaXZhdGU7CisKKwlzZXFfcHJpbnRmKG0sICIlZC4lMDJkXG4iLCBpcHMtPm1jaF9hdmdfdGVtcCAvIDEwMCwKKwkJICAgaXBzLT5tY2hfYXZnX3RlbXAgJSAxMDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19tY2hfcG93ZXIoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBpcHNfZHJpdmVyICppcHMgPSBtLT5wcml2YXRlOworCisJc2VxX3ByaW50ZihtLCAiJWRtV1xuIiwgaXBzLT5tY2hfYXZnX3Bvd2VyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlwc19kZWJ1Z2ZzX25vZGUgaXBzX2RlYnVnX2ZpbGVzW10gPSB7CisJeyBOVUxMLCAiY3B1X3RlbXAiLCBzaG93X2NwdV90ZW1wIH0sCisJeyBOVUxMLCAiY3B1X3Bvd2VyIiwgc2hvd19jcHVfcG93ZXIgfSwKKwl7IE5VTEwsICJjcHVfY2xhbXAiLCBzaG93X2NwdV9jbGFtcCB9LAorCXsgTlVMTCwgIm1jaF90ZW1wIiwgc2hvd19tY2hfdGVtcCB9LAorCXsgTlVMTCwgIm1jaF9wb3dlciIsIHNob3dfbWNoX3Bvd2VyIH0sCit9OworCitzdGF0aWMgaW50IGlwc19kZWJ1Z2ZzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGlwc19kZWJ1Z2ZzX25vZGUgKm5vZGUgPSBpbm9kZS0+aV9wcml2YXRlOworCisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIG5vZGUtPnNob3csIG5vZGUtPmlwcyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlwc19kZWJ1Z2ZzX29wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IGlwc19kZWJ1Z2ZzX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgdm9pZCBpcHNfZGVidWdmc19jbGVhbnVwKHN0cnVjdCBpcHNfZHJpdmVyICppcHMpCit7CisJaWYgKGlwcy0+ZGVidWdfcm9vdCkKKwkJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGlwcy0+ZGVidWdfcm9vdCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBpcHNfZGVidWdmc19pbml0KHN0cnVjdCBpcHNfZHJpdmVyICppcHMpCit7CisJaW50IGk7CisKKwlpcHMtPmRlYnVnX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImlwcyIsIE5VTEwpOworCWlmICghaXBzLT5kZWJ1Z19yb290KSB7CisJCWRldl9lcnIoJmlwcy0+ZGV2LT5kZXYsCisJCQkiZmFpbGVkIHRvIGNyZWF0ZSBkZWJ1Z2ZzIGVudHJpZXM6ICVsZFxuIiwKKwkJCVBUUl9FUlIoaXBzLT5kZWJ1Z19yb290KSk7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpcHNfZGVidWdfZmlsZXMpOyBpKyspIHsKKwkJc3RydWN0IGRlbnRyeSAqZW50OworCQlzdHJ1Y3QgaXBzX2RlYnVnZnNfbm9kZSAqbm9kZSA9ICZpcHNfZGVidWdfZmlsZXNbaV07CisKKwkJbm9kZS0+aXBzID0gaXBzOworCQllbnQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG5vZGUtPm5hbWUsIFNfSUZSRUcgfCBTX0lSVUdPLAorCQkJCQkgIGlwcy0+ZGVidWdfcm9vdCwgbm9kZSwKKwkJCQkJICAmaXBzX2RlYnVnZnNfb3BzKTsKKwkJaWYgKCFlbnQpIHsKKwkJCWRldl9lcnIoJmlwcy0+ZGV2LT5kZXYsCisJCQkJImZhaWxlZCB0byBjcmVhdGUgZGVidWcgZmlsZTogJWxkXG4iLAorCQkJCVBUUl9FUlIoZW50KSk7CisJCQlnb3RvIGVycl9jbGVhbnVwOworCQl9CisJfQorCisJcmV0dXJuOworCitlcnJfY2xlYW51cDoKKwlpcHNfZGVidWdmc19jbGVhbnVwKGlwcyk7CisJcmV0dXJuOworfQorI2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqLworCisvKioKKyAqIGlwc19kZXRlY3RfY3B1IC0gZGV0ZWN0IHdoZXRoZXIgQ1BVIHN1cHBvcnRzIElQUworICoKKyAqIFdhbGsgb3VyIGxpc3QgYW5kIHNlZSBpZiB3ZSdyZSBvbiBhIHN1cHBvcnRlZCBDUFUuICBJZiB3ZSBmaW5kIG9uZSwKKyAqIHJldHVybiB0aGUgbGltaXRzIGZvciBpdC4KKyAqLworc3RhdGljIHN0cnVjdCBpcHNfbWNwX2xpbWl0cyAqaXBzX2RldGVjdF9jcHUoc3RydWN0IGlwc19kcml2ZXIgKmlwcykKK3sKKwl1NjQgdHVyYm9fcG93ZXIsIG1pc2NfZW47CisJc3RydWN0IGlwc19tY3BfbGltaXRzICpsaW1pdHMgPSBOVUxMOworCXUxNiB0ZHA7CisKKwlpZiAoIShib290X2NwdV9kYXRhLng4NiA9PSA2ICYmIGJvb3RfY3B1X2RhdGEueDg2X21vZGVsID09IDM3KSkgeworCQlkZXZfaW5mbygmaXBzLT5kZXYtPmRldiwgIk5vbi1JUFMgQ1BVIGRldGVjdGVkLlxuIik7CisJCWdvdG8gb3V0OworCX0KKworCXJkbXNybChJQTMyX01JU0NfRU5BQkxFLCBtaXNjX2VuKTsKKwkvKgorCSAqIElmIHRoZSB0dXJibyBlbmFibGUgYml0IGlzbid0IHNldCwgd2Ugc2hvdWxkbid0IHRyeSB0byBlbmFibGUvZGlzYWJsZQorCSAqIHR1cmJvIG1hbnVhbGx5IG9yIHdlJ2xsIGdldCBhbiBpbGxlZ2FsIE1TUiBhY2Nlc3MsIGV2ZW4gdGhvdWdoCisJICogdHVyYm8gd2lsbCBzdGlsbCBiZSBhdmFpbGFibGUuCisJICovCisJaWYgKCEobWlzY19lbiAmIElBMzJfTUlTQ19UVVJCT19FTikpCisJCTsgLyogYWRkIHR1cmJvIE1TUiB3cml0ZSBhbGxvd2VkIGZsYWcgaWYgbmVjZXNzYXJ5ICovCisKKwlpZiAoc3Ryc3RyKGJvb3RfY3B1X2RhdGEueDg2X21vZGVsX2lkLCAiQ1BVICAgICAgIE0iKSkKKwkJbGltaXRzID0gJmlwc19zdl9saW1pdHM7CisJZWxzZSBpZiAoc3Ryc3RyKGJvb3RfY3B1X2RhdGEueDg2X21vZGVsX2lkLCAiQ1BVICAgICAgIEwiKSkKKwkJbGltaXRzID0gJmlwc19sdl9saW1pdHM7CisJZWxzZSBpZiAoc3Ryc3RyKGJvb3RfY3B1X2RhdGEueDg2X21vZGVsX2lkLCAiQ1BVICAgICAgIFUiKSkKKwkJbGltaXRzID0gJmlwc191bHZfbGltaXRzOworCWVsc2UKKwkJZGV2X2luZm8oJmlwcy0+ZGV2LT5kZXYsICJObyBDUFVJRCBtYXRjaCBmb3VuZC5cbiIpOworCisJcmRtc3JsKFRVUkJPX1BPV0VSX0NVUlJFTlRfTElNSVQsIHR1cmJvX3Bvd2VyKTsKKwl0ZHAgPSB0dXJib19wb3dlciAmIFRVUkJPX1REUF9NQVNLOworCisJLyogU2FuaXR5IGNoZWNrIFREUCBhZ2FpbnN0IENQVSAqLworCWlmIChsaW1pdHMtPm1jcF9wb3dlcl9saW1pdCAhPSAodGRwIC8gOCkgKiAxMDAwKSB7CisJCWRldl93YXJuKCZpcHMtPmRldi0+ZGV2LCAiV2FybmluZzogQ1BVIFREUCBkb2Vzbid0IG1hdGNoIGV4cGVjdGVkIHZhbHVlIChmb3VuZCAlZCwgZXhwZWN0ZWQgJWQpXG4iLAorCQkJIHRkcCAvIDgsIGxpbWl0cy0+bWNwX3Bvd2VyX2xpbWl0IC8gMTAwMCk7CisJfQorCitvdXQ6CisJcmV0dXJuIGxpbWl0czsKK30KKworLyoqCisgKiBpcHNfZ2V0X2k5MTVfc3ltcyAtIHRyeSB0byBnZXQgR1BVIGNvbnRyb2wgbWV0aG9kcyBmcm9tIGk5MTUgZHJpdmVyCisgKiBAaXBzOiBJUFMgZHJpdmVyCisgKgorICogVGhlIGk5MTUgZHJpdmVyIGV4cG9ydHMgc2V2ZXJhbCBpbnRlcmZhY2VzIHRvIGFsbG93IHRoZSBJUFMgZHJpdmVyIHRvCisgKiBtb25pdG9yIGFuZCBjb250cm9sIGdyYXBoaWNzIHR1cmJvIG1vZGUuICBJZiB3ZSBjYW4gZmluZCB0aGVtLCB3ZSBjYW4KKyAqIGVuYWJsZSBncmFwaGljcyB0dXJibywgb3RoZXJ3aXNlIHdlIG11c3QgZGlzYWJsZSBpdCB0byBhdm9pZCBleGNlZWRpbmcKKyAqIHRoZXJtYWwgYW5kIHBvd2VyIGxpbWl0cyBpbiB0aGUgTUNQLgorICovCitzdGF0aWMgYm9vbCBpcHNfZ2V0X2k5MTVfc3ltcyhzdHJ1Y3QgaXBzX2RyaXZlciAqaXBzKQoreworCWlwcy0+cmVhZF9tY2hfdmFsID0gc3ltYm9sX2dldChpOTE1X3JlYWRfbWNoX3ZhbCk7CisJaWYgKCFpcHMtPnJlYWRfbWNoX3ZhbCkKKwkJZ290byBvdXRfZXJyOworCWlwcy0+Z3B1X3JhaXNlID0gc3ltYm9sX2dldChpOTE1X2dwdV9yYWlzZSk7CisJaWYgKCFpcHMtPmdwdV9yYWlzZSkKKwkJZ290byBvdXRfcHV0X21jaDsKKwlpcHMtPmdwdV9sb3dlciA9IHN5bWJvbF9nZXQoaTkxNV9ncHVfbG93ZXIpOworCWlmICghaXBzLT5ncHVfbG93ZXIpCisJCWdvdG8gb3V0X3B1dF9yYWlzZTsKKwlpcHMtPmdwdV9idXN5ID0gc3ltYm9sX2dldChpOTE1X2dwdV9idXN5KTsKKwlpZiAoIWlwcy0+Z3B1X2J1c3kpCisJCWdvdG8gb3V0X3B1dF9sb3dlcjsKKwlpcHMtPmdwdV90dXJib19kaXNhYmxlID0gc3ltYm9sX2dldChpOTE1X2dwdV90dXJib19kaXNhYmxlKTsKKwlpZiAoIWlwcy0+Z3B1X3R1cmJvX2Rpc2FibGUpCisJCWdvdG8gb3V0X3B1dF9idXN5OworCisJcmV0dXJuIHRydWU7CisKK291dF9wdXRfYnVzeToKKwlzeW1ib2xfcHV0KGk5MTVfZ3B1X3R1cmJvX2Rpc2FibGUpOworb3V0X3B1dF9sb3dlcjoKKwlzeW1ib2xfcHV0KGk5MTVfZ3B1X2xvd2VyKTsKK291dF9wdXRfcmFpc2U6CisJc3ltYm9sX3B1dChpOTE1X2dwdV9yYWlzZSk7CitvdXRfcHV0X21jaDoKKwlzeW1ib2xfcHV0KGk5MTVfcmVhZF9tY2hfdmFsKTsKK291dF9lcnI6CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoaXBzX2lkX3RhYmxlKSA9IHsKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwKKwkJICAgICBQQ0lfREVWSUNFX0lEX0lOVEVMX1RIRVJNQUxfU0VOU09SKSwgfSwKKwl7IDAsIH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpcHNfaWRfdGFibGUpOworCitzdGF0aWMgaW50IGlwc19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJdTY0IHBsYXRmb3JtX2luZm87CisJc3RydWN0IGlwc19kcml2ZXIgKmlwczsKKwl1MzIgaHRzOworCWludCByZXQgPSAwOworCXUxNiBodHNoaSwgdHJjLCB0cmNfcmVxdWlyZWRfbWFzazsKKwl1OCB0c2U7CisKKwlpcHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXBzX2RyaXZlciksIEdGUF9LRVJORUwpOworCWlmICghaXBzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIGlwcyk7CisJaXBzLT5kZXYgPSBkZXY7CisKKwlpcHMtPmxpbWl0cyA9IGlwc19kZXRlY3RfY3B1KGlwcyk7CisJaWYgKCFpcHMtPmxpbWl0cykgeworCQlkZXZfaW5mbygmZGV2LT5kZXYsICJJUFMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIENQVVxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBlcnJvcl9mcmVlOworCX0KKworCXNwaW5fbG9ja19pbml0KCZpcHMtPnR1cmJvX3N0YXR1c19sb2NrKTsKKworCWlmICghcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCkpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJUQkFSIG5vdCBhc3NpZ25lZCwgYWJvcnRpbmdcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZXJyb3JfZnJlZTsKKwl9CisKKwlyZXQgPSBwY2lfcmVxdWVzdF9yZWdpb25zKGRldiwgImlwcyB0aGVybWFsIHNlbnNvciIpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJ0aGVybWFsIHJlc291cmNlIGJ1c3ksIGFib3J0aW5nXG4iKTsKKwkJZ290byBlcnJvcl9mcmVlOworCX0KKworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgImNhbid0IGVuYWJsZSBQQ0kgZGV2aWNlLCBhYm9ydGluZ1xuIik7CisJCWdvdG8gZXJyb3JfZnJlZTsKKwl9CisKKwlpcHMtPnJlZ21hcCA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCksCisJCQkgICAgICBwY2lfcmVzb3VyY2VfbGVuKGRldiwgMCkpOworCWlmICghaXBzLT5yZWdtYXApIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJmYWlsZWQgdG8gbWFwIHRoZXJtYWwgcmVncywgYWJvcnRpbmdcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyb3JfcmVsZWFzZTsKKwl9CisKKwl0c2UgPSB0aG1fcmVhZGIoVEhNX1RTRSk7CisJaWYgKHRzZSAhPSBUU0VfRU4pIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJ0aGVybWFsIGRldmljZSBub3QgZW5hYmxlZCAoMHglMDJ4KSwgYWJvcnRpbmdcbiIsIHRzZSk7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBlcnJvcl91bm1hcDsKKwl9CisKKwl0cmMgPSB0aG1fcmVhZHcoVEhNX1RSQyk7CisJdHJjX3JlcXVpcmVkX21hc2sgPSBUUkNfQ09SRTFfRU4gfCBUUkNfQ09SRV9QV1IgfCBUUkNfTUNIX0VOOworCWlmICgodHJjICYgdHJjX3JlcXVpcmVkX21hc2spICE9IHRyY19yZXF1aXJlZF9tYXNrKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAidGhlcm1hbCByZXBvcnRpbmcgZm9yIHJlcXVpcmVkIGRldmljZXMgbm90IGVuYWJsZWQsIGFib3J0aW5nXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGVycm9yX3VubWFwOworCX0KKworCWlmICh0cmMgJiBUUkNfQ09SRTJfRU4pCisJCWlwcy0+c2Vjb25kX2NwdSA9IHRydWU7CisKKwl1cGRhdGVfdHVyYm9fbGltaXRzKGlwcyk7CisJZGV2X2RiZygmZGV2LT5kZXYsICJtYXggY3B1IHBvd2VyIGNsYW1wOiAlZFdcbiIsCisJCWlwcy0+bWNwX3Bvd2VyX2xpbWl0IC8gMTApOworCWRldl9kYmcoJmRldi0+ZGV2LCAibWF4IGNvcmUgcG93ZXIgY2xhbXA6ICVkV1xuIiwKKwkJaXBzLT5jb3JlX3Bvd2VyX2xpbWl0IC8gMTApOworCS8qIEJJT1MgbWF5IHVwZGF0ZSBsaW1pdHMgYXQgcnVudGltZSAqLworCWlmICh0aG1fcmVhZGwoVEhNX1BTQykgJiBQU1BfUEJSVCkKKwkJaXBzLT5wb2xsX3R1cmJvX3N0YXR1cyA9IHRydWU7CisKKwlpZiAoIWlwc19nZXRfaTkxNV9zeW1zKGlwcykpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGk5MTUgc3ltYm9scywgZ3JhcGhpY3MgdHVyYm8gZGlzYWJsZWRcbiIpOworCQlpcHMtPmdwdV90dXJib19lbmFibGVkID0gZmFsc2U7CisJfSBlbHNlIHsKKwkJZGV2X2RiZygmZGV2LT5kZXYsICJncmFwaGljcyB0dXJibyBlbmFibGVkXG4iKTsKKwkJaXBzLT5ncHVfdHVyYm9fZW5hYmxlZCA9IHRydWU7CisJfQorCisJLyoKKwkgKiBDaGVjayBQTEFURk9STV9JTkZPIE1TUiB0byBtYWtlIHN1cmUgdGhpcyBjaGlwIGlzCisJICogdHVyYm8gY2FwYWJsZS4KKwkgKi8KKwlyZG1zcmwoUExBVEZPUk1fSU5GTywgcGxhdGZvcm1faW5mbyk7CisJaWYgKCEocGxhdGZvcm1faW5mbyAmIFBMQVRGT1JNX1REUCkpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJwbGF0Zm9ybSBpbmRpY2F0ZXMgVERQIG92ZXJyaWRlIHVuYXZhaWxhYmxlLCBhYm9ydGluZ1xuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3JfdW5tYXA7CisJfQorCisJLyoKKwkgKiBJUlEgaGFuZGxlciBmb3IgTUUgaW50ZXJhY3Rpb24KKwkgKiBOb3RlOiBkb24ndCB1c2UgTVNJIGhlcmUgYXMgdGhlIFBDSCBoYXMgYnVncy4KKwkgKi8KKwlwY2lfZGlzYWJsZV9tc2koZGV2KTsKKwlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgaXBzX2lycV9oYW5kbGVyLCBJUlFGX1NIQVJFRCwgImlwcyIsCisJCQkgIGlwcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgInJlcXVlc3QgaXJxIGZhaWxlZCwgYWJvcnRpbmdcbiIpOworCQlnb3RvIGVycm9yX3VubWFwOworCX0KKworCS8qIEVuYWJsZSBhdXgsIGhvdCAmIGNyaXRpY2FsIGludGVycnVwdHMgKi8KKwl0aG1fd3JpdGViKFRITV9UU1BJRU4sIFRTUElFTl9BVVgyX0xPSEkgfCBUU1BJRU5fQ1JJVF9MT0hJIHwKKwkJICAgVFNQSUVOX0hPVF9MT0hJIHwgVFNQSUVOX0FVWF9MT0hJKTsKKwl0aG1fd3JpdGViKFRITV9URU4sIFRFTl9VUERBVEVfRU4pOworCisJLyogQ29sbGVjdCBhZGp1c3RtZW50IHZhbHVlcyAqLworCWlwcy0+Y3RhX3ZhbCA9IHRobV9yZWFkdyhUSE1fQ1RBKTsKKwlpcHMtPnB0YV92YWwgPSB0aG1fcmVhZHcoVEhNX1BUQSk7CisJaXBzLT5tZ3RhX3ZhbCA9IHRobV9yZWFkdyhUSE1fTUdUQSk7CisKKwkvKiBTYXZlIHR1cmJvIGxpbWl0cyAmIHJhdGlvcyAqLworCXJkbXNybChUVVJCT19QT1dFUl9DVVJSRU5UX0xJTUlULCBpcHMtPm9yaWdfdHVyYm9fbGltaXQpOworCisJaXBzX2VuYWJsZV9jcHVfdHVyYm8oaXBzKTsKKwlpcHMtPmNwdV90dXJib19lbmFibGVkID0gdHJ1ZTsKKworCS8qIFNldCB1cCB0aGUgd29yayBxdWV1ZSBhbmQgbW9uaXRvci9hZGp1c3QgdGhyZWFkcyAqLworCWlwcy0+bW9uaXRvciA9IGt0aHJlYWRfcnVuKGlwc19tb25pdG9yLCBpcHMsICJpcHMtbW9uaXRvciIpOworCWlmIChJU19FUlIoaXBzLT5tb25pdG9yKSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwKKwkJCSJmYWlsZWQgdG8gY3JlYXRlIHRoZXJtYWwgbW9uaXRvciB0aHJlYWQsIGFib3J0aW5nXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcl9mcmVlX2lycTsKKwl9CisKKwlpcHMtPmFkanVzdCA9IGt0aHJlYWRfY3JlYXRlKGlwc19hZGp1c3QsIGlwcywgImlwcy1hZGp1c3QiKTsKKwlpZiAoSVNfRVJSKGlwcy0+YWRqdXN0KSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwKKwkJCSJmYWlsZWQgdG8gY3JlYXRlIHRoZXJtYWwgYWRqdXN0IHRocmVhZCwgYWJvcnRpbmdcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yX3RocmVhZF9jbGVhbnVwOworCX0KKworCWh0cyA9IChpcHMtPmNvcmVfcG93ZXJfbGltaXQgPDwgSFRTX1BDUExfU0hJRlQpIHwKKwkJKGlwcy0+bWNwX3RlbXBfbGltaXQgPDwgSFRTX1BUTF9TSElGVCkgfCBIVFNfTlZWOworCWh0c2hpID0gSFRTMl9QUlNUX1JVTk5JTkcgPDwgSFRTMl9QUlNUX1NISUZUOworCisJdGhtX3dyaXRldyhUSE1fSFRTSEksIGh0c2hpKTsKKwl0aG1fd3JpdGVsKFRITV9IVFMsIGh0cyk7CisKKwlpcHNfZGVidWdmc19pbml0KGlwcyk7CisKKwlkZXZfaW5mbygmZGV2LT5kZXYsICJJUFMgZHJpdmVyIGluaXRpYWxpemVkLCBNQ1AgdGVtcCBsaW1pdCAlZFxuIiwKKwkJIGlwcy0+bWNwX3RlbXBfbGltaXQpOworCXJldHVybiByZXQ7CisKK2Vycm9yX3RocmVhZF9jbGVhbnVwOgorCWt0aHJlYWRfc3RvcChpcHMtPm1vbml0b3IpOworZXJyb3JfZnJlZV9pcnE6CisJZnJlZV9pcnEoaXBzLT5kZXYtPmlycSwgaXBzKTsKK2Vycm9yX3VubWFwOgorCWlvdW5tYXAoaXBzLT5yZWdtYXApOworZXJyb3JfcmVsZWFzZToKKwlwY2lfcmVsZWFzZV9yZWdpb25zKGRldik7CitlcnJvcl9mcmVlOgorCWtmcmVlKGlwcyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaXBzX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBpcHNfZHJpdmVyICppcHMgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwl1NjQgdHVyYm9fb3ZlcnJpZGU7CisKKwlpZiAoIWlwcykKKwkJcmV0dXJuOworCisJaXBzX2RlYnVnZnNfY2xlYW51cChpcHMpOworCisJLyogUmVsZWFzZSBpOTE1IGRyaXZlciAqLworCWlmIChpcHMtPnJlYWRfbWNoX3ZhbCkKKwkJc3ltYm9sX3B1dChpOTE1X3JlYWRfbWNoX3ZhbCk7CisJaWYgKGlwcy0+Z3B1X3JhaXNlKQorCQlzeW1ib2xfcHV0KGk5MTVfZ3B1X3JhaXNlKTsKKwlpZiAoaXBzLT5ncHVfbG93ZXIpCisJCXN5bWJvbF9wdXQoaTkxNV9ncHVfbG93ZXIpOworCWlmIChpcHMtPmdwdV9idXN5KQorCQlzeW1ib2xfcHV0KGk5MTVfZ3B1X2J1c3kpOworCWlmIChpcHMtPmdwdV90dXJib19kaXNhYmxlKQorCQlzeW1ib2xfcHV0KGk5MTVfZ3B1X3R1cmJvX2Rpc2FibGUpOworCisJcmRtc3JsKFRVUkJPX1BPV0VSX0NVUlJFTlRfTElNSVQsIHR1cmJvX292ZXJyaWRlKTsKKwl0dXJib19vdmVycmlkZSAmPSB+KFRVUkJPX1REQ19PVlJfRU4gfCBUVVJCT19URFBfT1ZSX0VOKTsKKwl3cm1zcmwoVFVSQk9fUE9XRVJfQ1VSUkVOVF9MSU1JVCwgdHVyYm9fb3ZlcnJpZGUpOworCXdybXNybChUVVJCT19QT1dFUl9DVVJSRU5UX0xJTUlULCBpcHMtPm9yaWdfdHVyYm9fbGltaXQpOworCisJZnJlZV9pcnEoaXBzLT5kZXYtPmlycSwgaXBzKTsKKwlpZiAoaXBzLT5hZGp1c3QpCisJCWt0aHJlYWRfc3RvcChpcHMtPmFkanVzdCk7CisJaWYgKGlwcy0+bW9uaXRvcikKKwkJa3RocmVhZF9zdG9wKGlwcy0+bW9uaXRvcik7CisJaW91bm1hcChpcHMtPnJlZ21hcCk7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYpOworCWtmcmVlKGlwcyk7CisJZGV2X2RiZygmZGV2LT5kZXYsICJJUFMgZHJpdmVyIHJlbW92ZWRcbiIpOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGlwc19zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcHNfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBpcHNfc3VzcGVuZCBOVUxMCisjZGVmaW5lIGlwc19yZXN1bWUgTlVMTAorI2VuZGlmIC8qIENPTkZJR19QTSAqLworCitzdGF0aWMgdm9pZCBpcHNfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKmRldikKK3sKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGlwc19wY2lfZHJpdmVyID0geworCS5uYW1lID0gImludGVsIGlwcyIsCisJLmlkX3RhYmxlID0gaXBzX2lkX3RhYmxlLAorCS5wcm9iZSA9IGlwc19wcm9iZSwKKwkucmVtb3ZlID0gaXBzX3JlbW92ZSwKKwkuc3VzcGVuZCA9IGlwc19zdXNwZW5kLAorCS5yZXN1bWUgPSBpcHNfcmVzdW1lLAorCS5zaHV0ZG93biA9IGlwc19zaHV0ZG93biwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGlwc19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmlwc19wY2lfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGlwc19pbml0KTsKKworc3RhdGljIHZvaWQgaXBzX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmlwc19wY2lfZHJpdmVyKTsKKwlyZXR1cm47Cit9Cittb2R1bGVfZXhpdChpcHNfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkplc3NlIEJhcm5lcyA8amJhcm5lc0B2aXJ0dW91c2dlZWsub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlbGxpZ2VudCBQb3dlciBTaGFyaW5nIERyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfbWVubG93LmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9tZW5sb3cuYwppbmRleCAyZjc5NWNlLi5lYWNkNWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9tZW5sb3cuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9tZW5sb3cuYwpAQCAtNTMsNiArNTMsOCBAQAogI2RlZmluZSBNRU1PUllfQVJHX0NVUl9CQU5EV0lEVEggMQogI2RlZmluZSBNRU1PUllfQVJHX01BWF9CQU5EV0lEVEggMAogCitzdGF0aWMgdm9pZCBpbnRlbF9tZW5sb3dfdW5yZWdpc3Rlcl9zZW5zb3Iodm9pZCk7CisKIC8qCiAgKiBHVEhTIHJldHVybmluZyAnbicgd291bGQgbWVhbiB0aGF0IFswLG4tMV0gc3RhdGVzIGFyZSBzdXBwb3J0ZWQKICAqIEluIHRoYXQgY2FzZSBtYXhfY3N0YXRlIHdvdWxkIGJlIG4tMQpAQCAtNDA2LDggKzQwOCwxMCBAQAogCWF0dHItPmhhbmRsZSA9IGhhbmRsZTsKIAogCXJlc3VsdCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZhdHRyLT5hdHRyKTsKLQlpZiAocmVzdWx0KQorCWlmIChyZXN1bHQpIHsKKwkJa2ZyZWUoYXR0cik7CiAJCXJldHVybiByZXN1bHQ7CisJfQogCiAJbXV0ZXhfbG9jaygmaW50ZWxfbWVubG93X2F0dHJfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmYXR0ci0+bm9kZSwgJmludGVsX21lbmxvd19hdHRyX2xpc3QpOwpAQCAtNDMxLDExICs0MzUsMTEgQEAKIAkvKiBfVFogbXVzdCBoYXZlIHRoZSBBVVgwLzEgbWV0aG9kcyAqLwogCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShoYW5kbGUsIEdFVF9BVVgwLCAmZHVtbXkpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJZ290byBub3RfZm91bmQ7CisJCXJldHVybiAoc3RhdHVzID09IEFFX05PVF9GT1VORCkgPyBBRV9PSyA6IHN0YXR1czsKIAogCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShoYW5kbGUsIFNFVF9BVVgwLCAmZHVtbXkpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJZ290byBub3RfZm91bmQ7CisJCXJldHVybiAoc3RhdHVzID09IEFFX05PVF9GT1VORCkgPyBBRV9PSyA6IHN0YXR1czsKIAogCXJlc3VsdCA9IGludGVsX21lbmxvd19hZGRfb25lX2F0dHJpYnV0ZSgiYXV4MCIsIDA2NDQsCiAJCQkJCQlhdXgwX3Nob3csIGF1eDBfc3RvcmUsCkBAIC00NDUsMTcgKzQ0OSwxOSBAQAogCiAJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGhhbmRsZSwgR0VUX0FVWDEsICZkdW1teSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQlnb3RvIG5vdF9mb3VuZDsKKwkJZ290byBhdXgxX25vdF9mb3VuZDsKIAogCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShoYW5kbGUsIFNFVF9BVVgxLCAmZHVtbXkpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJZ290byBub3RfZm91bmQ7CisJCWdvdG8gYXV4MV9ub3RfZm91bmQ7CiAKIAlyZXN1bHQgPSBpbnRlbF9tZW5sb3dfYWRkX29uZV9hdHRyaWJ1dGUoImF1eDEiLCAwNjQ0LAogCQkJCQkJYXV4MV9zaG93LCBhdXgxX3N0b3JlLAogCQkJCQkJJnRoZXJtYWwtPmRldmljZSwgaGFuZGxlKTsKLQlpZiAocmVzdWx0KQorCWlmIChyZXN1bHQpIHsKKwkJaW50ZWxfbWVubG93X3VucmVnaXN0ZXJfc2Vuc29yKCk7CiAJCXJldHVybiBBRV9FUlJPUjsKKwl9CiAKIAkvKgogCSAqIGNyZWF0ZSB0aGUgImRhYm5leV9lbmFibGVkIiBhdHRyaWJ1dGUgd2hpY2ggbWVhbnMgdGhlIHVzZXIgYXBwCkBAIC00NjUsMTQgKzQ3MSwxNyBAQAogCXJlc3VsdCA9IGludGVsX21lbmxvd19hZGRfb25lX2F0dHJpYnV0ZSgiYmlvc19lbmFibGVkIiwgMDQ0NCwKIAkJCQkJCWJpb3NfZW5hYmxlZF9zaG93LCBOVUxMLAogCQkJCQkJJnRoZXJtYWwtPmRldmljZSwgaGFuZGxlKTsKLQlpZiAocmVzdWx0KQorCWlmIChyZXN1bHQpIHsKKwkJaW50ZWxfbWVubG93X3VucmVnaXN0ZXJfc2Vuc29yKCk7CiAJCXJldHVybiBBRV9FUlJPUjsKKwl9CiAKLSBub3RfZm91bmQ6CisgYXV4MV9ub3RfZm91bmQ6CiAJaWYgKHN0YXR1cyA9PSBBRV9OT1RfRk9VTkQpCiAJCXJldHVybiBBRV9PSzsKLQllbHNlCi0JCXJldHVybiBzdGF0dXM7CisKKwlpbnRlbF9tZW5sb3dfdW5yZWdpc3Rlcl9zZW5zb3IoKTsKKwlyZXR1cm4gc3RhdHVzOwogfQogCiBzdGF0aWMgdm9pZCBpbnRlbF9tZW5sb3dfdW5yZWdpc3Rlcl9zZW5zb3Iodm9pZCkKQEAgLTUxMyw4ICs1MjIsMTAgQEAKIAlzdGF0dXMgPSBhY3BpX3dhbGtfbmFtZXNwYWNlKEFDUElfVFlQRV9USEVSTUFMLCBBQ1BJX1JPT1RfT0JKRUNULAogCQkJCSAgICAgQUNQSV9VSU5UMzJfTUFYLAogCQkJCSAgICAgaW50ZWxfbWVubG93X3JlZ2lzdGVyX3NlbnNvciwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmaW50ZWxfbWVubG93X21lbW9yeV9kcml2ZXIpOwogCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3BtaWNfZ3Bpby5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfcG1pY19ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNkY2ZmNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3BtaWNfZ3Bpby5jCkBAIC0wLDAgKzEsMzQwIEBACisvKiBNb29yZXN0b3duIFBNSUMgR1BJTyAoYWNjZXNzIHRocm91Z2ggSVBDKSBkcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAwOCAtIDIwMDksIEludGVsIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qIFN1cHBvcnRzOgorICogTW9vcmVzdG93biBwbGF0Zm9ybSBQTUlDIGNoaXAKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGFzbS9pbnRlbF9zY3VfaXBjLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZWxfcG1pY19ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNkZWZpbmUgRFJJVkVSX05BTUUgInBtaWNfZ3BpbyIKKworLyogcmVnaXN0ZXIgb2Zmc2V0IHRoYXQgSVBDIGRyaXZlciBzaG91bGQgdXNlCisgKiA4IEdQSU8gKyA4IEdQT1NXICg2IGNvbnRyb2xsYWJsZSkgKyA4R1BPCisgKi8KK2VudW0gcG1pY19ncGlvX3JlZ2lzdGVyIHsKKwlHUElPMAkJPSAweEUwLAorCUdQSU83CQk9IDB4RTcsCisJR1BJT0lOVAkJPSAweEU4LAorCUdQT1NXQ1RMMAk9IDB4RUMsCisJR1BPU1dDVEw1CT0gMHhGMSwKKwlHUE8JCT0gMHhGNCwKK307CisKKy8qIGJpdHMgZGVmaW5pdGlvbiBmb3IgR1BJTyAmIEdQT1NXICovCisjZGVmaW5lIEdQSU9fRFJWIDB4MDEKKyNkZWZpbmUgR1BJT19ESVIgMHgwMgorI2RlZmluZSBHUElPX0RJTiAweDA0CisjZGVmaW5lIEdQSU9fRE9VIDB4MDgKKyNkZWZpbmUgR1BJT19JTlRDVEwgMHgzMAorI2RlZmluZSBHUElPX0RCQyAweGMwCisKKyNkZWZpbmUgR1BPU1dfRFJWIDB4MDEKKyNkZWZpbmUgR1BPU1dfRE9VIDB4MDgKKyNkZWZpbmUgR1BPU1dfUkRSViAweDMwCisKKworI2RlZmluZSBOVU1fR1BJTyAyNAorCitzdHJ1Y3QgcG1pY19ncGlvX2lycSB7CisJc3BpbmxvY2tfdCBsb2NrOworCXUzMiB0cmlnZ2VyW05VTV9HUElPXTsKKwl1MzIgZGlydHk7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Cit9OworCisKK3N0cnVjdCBwbWljX2dwaW8geworCXN0cnVjdCBncGlvX2NoaXAJY2hpcDsKKwlzdHJ1Y3QgcG1pY19ncGlvX2lycQlpcnF0eXBlczsKKwl2b2lkCQkJKmdwaW9pbnRyOworCWludAkJCWlycTsKKwl1bnNpZ25lZAkJaXJxX2Jhc2U7Cit9OworCitzdGF0aWMgdm9pZCBwbWljX3Byb2dyYW1faXJxdHlwZShpbnQgZ3BpbywgaW50IHR5cGUpCit7CisJaWYgKHR5cGUgJiBJUlFfVFlQRV9FREdFX1JJU0lORykKKwkJaW50ZWxfc2N1X2lwY191cGRhdGVfcmVnaXN0ZXIoR1BJTzAgKyBncGlvLCAweDIwLCAweDIwKTsKKwllbHNlCisJCWludGVsX3NjdV9pcGNfdXBkYXRlX3JlZ2lzdGVyKEdQSU8wICsgZ3BpbywgMHgwMCwgMHgyMCk7CisKKwlpZiAodHlwZSAmIElSUV9UWVBFX0VER0VfRkFMTElORykKKwkJaW50ZWxfc2N1X2lwY191cGRhdGVfcmVnaXN0ZXIoR1BJTzAgKyBncGlvLCAweDEwLCAweDEwKTsKKwllbHNlCisJCWludGVsX3NjdV9pcGNfdXBkYXRlX3JlZ2lzdGVyKEdQSU8wICsgZ3BpbywgMHgwMCwgMHgxMCk7Cit9OworCitzdGF0aWMgdm9pZCBwbWljX2lycXR5cGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHBtaWNfZ3Bpb19pcnEgKnQgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHBtaWNfZ3Bpb19pcnEsIHdvcmspOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisJdTE2IHR5cGU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdC0+bG9jaywgZmxhZ3MpOworCS8qIEFzIHdlIGRyb3AgdGhlIGxvY2ssIHdlIG1heSBuZWVkIG11bHRpcGxlIHNjYW5zIGlmIHdlIHJhY2UgdGhlCisJICAgcG1pY19pcnFfdHlwZSBmdW5jdGlvbiAqLworCXdoaWxlICh0LT5kaXJ0eSkgeworCQkvKgorCQkgKglGb3IgZWFjaCBwaW4gdGhhdCBoYXMgdGhlIGRpcnR5IGJpdCBzZXQgc2VuZCBhbiBJUEMKKwkJICoJbWVzc2FnZSB0byBjb25maWd1cmUgdGhlIGhhcmR3YXJlIHZpYSB0aGUgUE1JQworCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IE5VTV9HUElPOyBpKyspIHsKKwkJCWlmICghKHQtPmRpcnR5ICYgKDEgPDwgaSkpKQorCQkJCWNvbnRpbnVlOworCQkJdC0+ZGlydHkgJj0gfigxIDw8IGkpOworCQkJLyogV2UgY2FuJ3QgdHJ1c3QgdGhlIGFycmF5IGVudHJ5IG9yIGRpcnR5CisJCQkgICBvbmNlIHRoZSBsb2NrIGlzIGRyb3BwZWQgKi8KKwkJCXR5cGUgPSB0LT50cmlnZ2VyW2ldOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdC0+bG9jaywgZmxhZ3MpOworCQkJcG1pY19wcm9ncmFtX2lycXR5cGUoaSwgdHlwZSk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmdC0+bG9jaywgZmxhZ3MpOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnQtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBwbWljX2dwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlpZiAob2Zmc2V0ID4gOCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSIlczogb25seSBwaW4gMC03IHN1cHBvcnQgaW5wdXRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOy8qIHdlIG9ubHkgaGF2ZSA4IEdQSU8gY2FuIHVzZSBhcyBpbnB1dCAqLworCX0KKwlyZXR1cm4gaW50ZWxfc2N1X2lwY191cGRhdGVfcmVnaXN0ZXIoR1BJTzAgKyBvZmZzZXQsCisJCQkJCQkJR1BJT19ESVIsIEdQSU9fRElSKTsKK30KKworc3RhdGljIGludCBwbWljX2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJaW50IHJjID0gMDsKKworCWlmIChvZmZzZXQgPCA4KS8qIGl0IGlzIEdQSU8gKi8KKwkJcmMgPSBpbnRlbF9zY3VfaXBjX3VwZGF0ZV9yZWdpc3RlcihHUElPMCArIG9mZnNldCwKKwkJCQlHUElPX0RSViB8IEdQSU9fRE9VIHwgR1BJT19ESVIsCisJCQkJR1BJT19EUlYgfCAodmFsdWUgPyBHUElPX0RPVSA6IDApKTsKKwllbHNlIGlmIChvZmZzZXQgPCAxNikvKiBpdCBpcyBHUE9TVyAqLworCQlyYyA9IGludGVsX3NjdV9pcGNfdXBkYXRlX3JlZ2lzdGVyKEdQT1NXQ1RMMCArIG9mZnNldCAtIDgsCisJCQkJR1BPU1dfRFJWIHwgR1BPU1dfRE9VIHwgR1BPU1dfUkRSViwKKwkJCQlHUE9TV19EUlYgfCAodmFsdWUgPyBHUE9TV19ET1UgOiAwKSk7CisJZWxzZSBpZiAob2Zmc2V0ID4gMTUgJiYgb2Zmc2V0IDwgMjQpLyogaXQgaXMgR1BPICovCisJCXJjID0gaW50ZWxfc2N1X2lwY191cGRhdGVfcmVnaXN0ZXIoR1BPLAorCQkJCTEgPDwgKG9mZnNldCAtIDE2KSwKKwkJCQl2YWx1ZSA/IDEgPDwgKG9mZnNldCAtIDE2KSA6IDApOworCWVsc2UgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSIlczogaW52YWxpZCBQTUlDIEdQSU8gcGluICVkIVxuIiwgX19mdW5jX18sIG9mZnNldCk7CisJCVdBUk5fT04oMSk7CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHBtaWNfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXU4IHI7CisJaW50IHJldDsKKworCS8qIHdlIG9ubHkgaGF2ZSA4IEdQSU8gcGlucyB3ZSBjYW4gdXNlIGFzIGlucHV0ICovCisJaWYgKG9mZnNldCA+IDgpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwlyZXQgPSBpbnRlbF9zY3VfaXBjX2lvcmVhZDgoR1BJTzAgKyBvZmZzZXQsICZyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gciAmIEdQSU9fRElOOworfQorCitzdGF0aWMgdm9pZCBwbWljX2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCWlmIChvZmZzZXQgPCA4KS8qIGl0IGlzIEdQSU8gKi8KKwkJaW50ZWxfc2N1X2lwY191cGRhdGVfcmVnaXN0ZXIoR1BJTzAgKyBvZmZzZXQsCisJCQlHUElPX0RSViB8IEdQSU9fRE9VLAorCQkJR1BJT19EUlYgfCAodmFsdWUgPyBHUElPX0RPVSA6IDApKTsKKwllbHNlIGlmIChvZmZzZXQgPCAxNikvKiBpdCBpcyBHUE9TVyAqLworCQlpbnRlbF9zY3VfaXBjX3VwZGF0ZV9yZWdpc3RlcihHUE9TV0NUTDAgKyBvZmZzZXQgLSA4LAorCQkJR1BPU1dfRFJWIHwgR1BPU1dfRE9VIHwgR1BPU1dfUkRSViwKKwkJCUdQT1NXX0RSViB8ICh2YWx1ZSA/IEdQT1NXX0RPVSA6IDApKTsKKwllbHNlIGlmIChvZmZzZXQgPiAxNSAmJiBvZmZzZXQgPCAyNCkgLyogaXQgaXMgR1BPICovCisJCWludGVsX3NjdV9pcGNfdXBkYXRlX3JlZ2lzdGVyKEdQTywKKwkJCTEgPDwgKG9mZnNldCAtIDE2KSwKKwkJCXZhbHVlID8gMSA8PCAob2Zmc2V0IC0gMTYpIDogMCk7Cit9CisKK3N0YXRpYyBpbnQgcG1pY19pcnFfdHlwZSh1bnNpZ25lZCBpcnEsIHVuc2lnbmVkIHR5cGUpCit7CisJc3RydWN0IHBtaWNfZ3BpbyAqcGcgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXUzMiBncGlvID0gaXJxIC0gcGctPmlycV9iYXNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoZ3BpbyA+IHBnLT5jaGlwLm5ncGlvKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwZy0+aXJxdHlwZXMubG9jaywgZmxhZ3MpOworCXBnLT5pcnF0eXBlcy50cmlnZ2VyW2dwaW9dID0gdHlwZTsKKwlwZy0+aXJxdHlwZXMuZGlydHkgfD0gICgxIDw8IGdwaW8pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBnLT5pcnF0eXBlcy5sb2NrLCBmbGFncyk7CisJc2NoZWR1bGVfd29yaygmcGctPmlycXR5cGVzLndvcmspOworCXJldHVybiAwOworfQorCisKKworc3RhdGljIGludCBwbWljX2dwaW9fdG9faXJxKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgcG1pY19ncGlvICpwZyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcG1pY19ncGlvLCBjaGlwKTsKKworCXJldHVybiBwZy0+aXJxX2Jhc2UgKyBvZmZzZXQ7Cit9CisKKy8qIHRoZSBncGlvaW50ciByZWdpc3RlciBpcyByZWFkLWNsZWFyLCBzbyBqdXN0IGRvIG5vdGhpbmcuICovCitzdGF0aWMgdm9pZCBwbWljX2lycV91bm1hc2sodW5zaWduZWQgaXJxKQoreworfTsKKworc3RhdGljIHZvaWQgcG1pY19pcnFfbWFzayh1bnNpZ25lZCBpcnEpCit7Cit9OworCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHBtaWNfaXJxY2hpcCA9IHsKKwkubmFtZQkJPSAiUE1JQy1HUElPIiwKKwkubWFzawkJPSBwbWljX2lycV9tYXNrLAorCS51bm1hc2sJCT0gcG1pY19pcnFfdW5tYXNrLAorCS5zZXRfdHlwZQk9IHBtaWNfaXJxX3R5cGUsCit9OworCitzdGF0aWMgdm9pZCBwbWljX2lycV9oYW5kbGVyKHVuc2lnbmVkIGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXN0cnVjdCBwbWljX2dwaW8gKnBnID0gKHN0cnVjdCBwbWljX2dwaW8gKilnZXRfaXJxX2RhdGEoaXJxKTsKKwl1OCBpbnRzdHMgPSAqKCh1OCAqKXBnLT5ncGlvaW50ciArIDQpOworCWludCBncGlvOworCisJZm9yIChncGlvID0gMDsgZ3BpbyA8IDg7IGdwaW8rKykgeworCQlpZiAoaW50c3RzICYgKDEgPDwgZ3BpbykpIHsKKwkJCXByX2RlYnVnKCJwbWljIHBpbiAlZCB0cmlnZ2VyZWRcbiIsIGdwaW8pOworCQkJZ2VuZXJpY19oYW5kbGVfaXJxKHBnLT5pcnFfYmFzZSArIGdwaW8pOworCQl9CisJfQorCWRlc2MtPmNoaXAtPmVvaShpcnEpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwbGF0Zm9ybV9wbWljX2dwaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCWludCBpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCXN0cnVjdCBpbnRlbF9wbWljX2dwaW9fcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisKKwlzdHJ1Y3QgcG1pY19ncGlvICpwZzsKKwlpbnQgcmV0dmFsOworCWludCBpOworCisJaWYgKGlycSA8IDApIHsKKwkJZGV2X2RiZyhkZXYsICJubyBJUlEgbGluZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghcGRhdGEgfHwgIXBkYXRhLT5ncGlvX2Jhc2UgfHwgIXBkYXRhLT5pcnFfYmFzZSkgeworCQlkZXZfZGJnKGRldiwgImluY29ycmVjdCBvciBtaXNzaW5nIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwZyA9IGt6YWxsb2Moc2l6ZW9mKCpwZyksIEdGUF9LRVJORUwpOworCWlmICghcGcpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2X3NldF9kcnZkYXRhKGRldiwgcGcpOworCisJcGctPmlycSA9IGlycTsKKwkvKiBzZXR0aW5nIHVwIFNSQU0gbWFwcGluZyBmb3IgR1BJT0lOVCByZWdpc3RlciAqLworCXBnLT5ncGlvaW50ciA9IGlvcmVtYXBfbm9jYWNoZShwZGF0YS0+Z3Bpb2ludHIsIDgpOworCWlmICghcGctPmdwaW9pbnRyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbiBub3QgbWFwIEdQSU9JTlQuXG4iLCBfX2Z1bmNfXyk7CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyMjsKKwl9CisJcGctPmlycV9iYXNlID0gcGRhdGEtPmlycV9iYXNlOworCXBnLT5jaGlwLmxhYmVsID0gImludGVsX3BtaWMiOworCXBnLT5jaGlwLmRpcmVjdGlvbl9pbnB1dCA9IHBtaWNfZ3Bpb19kaXJlY3Rpb25faW5wdXQ7CisJcGctPmNoaXAuZGlyZWN0aW9uX291dHB1dCA9IHBtaWNfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0OworCXBnLT5jaGlwLmdldCA9IHBtaWNfZ3Bpb19nZXQ7CisJcGctPmNoaXAuc2V0ID0gcG1pY19ncGlvX3NldDsKKwlwZy0+Y2hpcC50b19pcnEgPSBwbWljX2dwaW9fdG9faXJxOworCXBnLT5jaGlwLmJhc2UgPSBwZGF0YS0+Z3Bpb19iYXNlOworCXBnLT5jaGlwLm5ncGlvID0gTlVNX0dQSU87CisJcGctPmNoaXAuY2FuX3NsZWVwID0gMTsKKwlwZy0+Y2hpcC5kZXYgPSBkZXY7CisKKwlJTklUX1dPUksoJnBnLT5pcnF0eXBlcy53b3JrLCBwbWljX2lycXR5cGVfd29yayk7CisJc3Bpbl9sb2NrX2luaXQoJnBnLT5pcnF0eXBlcy5sb2NrKTsKKworCXBnLT5jaGlwLmRldiA9IGRldjsKKwlyZXR2YWwgPSBncGlvY2hpcF9hZGQoJnBnLT5jaGlwKTsKKwlpZiAocmV0dmFsKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbiBub3QgYWRkIHBtaWMgZ3BpbyBjaGlwLlxuIiwgX19mdW5jX18pOworCQlnb3RvIGVycjsKKwl9CisJc2V0X2lycV9kYXRhKHBnLT5pcnEsIHBnKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihwZy0+aXJxLCBwbWljX2lycV9oYW5kbGVyKTsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGkgKyBwZy0+aXJxX2Jhc2UsICZwbWljX2lycWNoaXAsCisJCQkJCWhhbmRsZV9zaW1wbGVfaXJxLCAiZGVtdXgiKTsKKwkJc2V0X2lycV9jaGlwX2RhdGEoaSArIHBnLT5pcnFfYmFzZSwgcGcpOworCX0KKwlyZXR1cm4gMDsKK2VycjoKKwlpb3VubWFwKHBnLT5ncGlvaW50cik7CitlcnIyOgorCWtmcmVlKHBnKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiBhdCB0aGUgc2FtZSB0aW1lLCByZWdpc3RlciBhIHBsYXRmb3JtIGRyaXZlcgorICogdGhpcyBzdXBwb3J0cyB0aGUgc2ZpIDAuODEgZncgKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBsYXRmb3JtX3BtaWNfZ3Bpb19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gRFJJVkVSX05BTUUsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBwbGF0Zm9ybV9wbWljX2dwaW9fcHJvYmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwbGF0Zm9ybV9wbWljX2dwaW9faW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnBsYXRmb3JtX3BtaWNfZ3Bpb19kcml2ZXIpOworfQorCitzdWJzeXNfaW5pdGNhbGwocGxhdGZvcm1fcG1pY19ncGlvX2luaXQpOworCitNT0RVTEVfQVVUSE9SKCJBbGVrIER1IDxhbGVrLmR1QGludGVsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSW50ZWwgTW9vcmVzdG93biBQTUlDIEdQSU8gZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9yYXJfcmVnaXN0ZXIuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3Jhcl9yZWdpc3Rlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZjhlNmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9yYXJfcmVnaXN0ZXIuYwpAQCAtMCwwICsxLDY3MSBAQAorLyoKKyAqICByYXJfcmVnaXN0ZXIuYyAtIEFuIEludGVsIFJlc3RyaWN0ZWQgQWNjZXNzIFJlZ2lvbiByZWdpc3RlciBkcml2ZXIKKyAqCisgKiAgQ29weXJpZ2h0KGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAqICAwMjExMS0xMzA3LCBVU0EuCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIDIwMDkxMjA0IE1hcmsgQWxseW4gPG1hcmsuYS5hbGx5bkBpbnRlbC5jb20+CisgKgkgICAgIE9zc2FtYSBPdGhtYW4gPG9zc2FtYS5vdGhtYW5AaW50ZWwuY29tPgorICoJQ2xlYW51cCBwZXIgZmVlZGJhY2sgZnJvbSBBbGFuIENveCBhbmQgQXJqYW4gVmFuIERlIFZlbgorICoKKyAqICAyMDA5MDgwNiBPc3NhbWEgT3RobWFuIDxvc3NhbWEub3RobWFuQGludGVsLmNvbT4KKyAqICAgICAgUmV0dXJuIHplcm8gaGlnaCBhZGRyZXNzIGlmIHVwcGVyIDIyIGJpdHMgaXMgemVyby4KKyAqICAgICAgQ2xlYW5lZCB1cCBjaGVja3BhdGNoIGVycm9ycy4KKyAqICAgICAgQ2xhcmlmaWVkIHRoYXQgZHJpdmVyIGlzIGRlYWxpbmcgd2l0aCBidXMgYWRkcmVzc2VzLgorICoKKyAqICAyMDA5MDcwMiBPc3NhbWEgT3RobWFuIDxvc3NhbWEub3RobWFuQGludGVsLmNvbT4KKyAqICAgICAgUmVtb3ZlZCB1bm5lY2Vzc2FyeSBpbmNsdWRlIGRpcmVjdGl2ZXMKKyAqICAgICAgQ2xlYW5lZCB1cCBzcGlubG9ja3MuCisgKiAgICAgIENsZWFuZWQgdXAgbG9nZ2luZy4KKyAqICAgICAgSW1wcm92ZWQgaW52YWxpZCBwYXJhbWV0ZXIgY2hlY2tzLgorICogICAgICBGaXhlZCBhbmQgc2ltcGxpZmllZCBSQVIgYWRkcmVzcyByZXRyaWV2YWwgYW5kIFJBUiBsb2NraW5nCisgKiAgICAgIGNvZGUuCisgKgorICogIDIwMDkwNjI2IE1hcmsgQWxseW4gPG1hcmsuYS5hbGx5bkBpbnRlbC5jb20+CisgKiAgICAgIEluaXRpYWwgcHVibGlzaAorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3Jhcl9yZWdpc3Rlci5oPgorCisvKiA9PT0gTGluY3JvZnQgTWVzc2FnZSBCdXMgSW50ZXJmYWNlID09PSAqLworI2RlZmluZSBMTkNfTUNSX09GRlNFVAkJMHhEMAkvKiBNZXNzYWdlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTE5DX01EUl9PRkZTRVQJCTB4RDQJLyogTWVzc2FnZSBEYXRhIFJlZ2lzdGVyICovCisKKy8qIE1lc3NhZ2UgT3Bjb2RlcyAqLworI2RlZmluZSBMTkNfTUVTU0FHRV9SRUFEX09QQ09ERQkweEQwCisjZGVmaW5lIExOQ19NRVNTQUdFX1dSSVRFX09QQ09ERSAweEUwCisKKy8qIE1lc3NhZ2UgV3JpdGUgQnl0ZSBFbmFibGVzICovCisjZGVmaW5lIExOQ19NRVNTQUdFX0JZVEVfV1JJVEVfRU5BQkxFUwkweEYKKworLyogQi11bml0IFBvcnQgKi8KKyNkZWZpbmUgTE5DX0JVTklUX1BPUlQJMHgzCisKKy8qID09PSBMaW5jcm9mdCBCLVVuaXQgUmVnaXN0ZXJzIC0gUHJvZ3JhbW1lZCBieSBJQTMyIGZpcm13YXJlID09PSAqLworI2RlZmluZSBMTkNfQlJBUjBMCTB4MTAKKyNkZWZpbmUgTE5DX0JSQVIwSAkweDExCisjZGVmaW5lIExOQ19CUkFSMUwJMHgxMgorI2RlZmluZSBMTkNfQlJBUjFICTB4MTMKKy8qIFJlc2VydmVkIGZvciBTZVAgKi8KKyNkZWZpbmUgTE5DX0JSQVIyTAkweDE0CisjZGVmaW5lIExOQ19CUkFSMkgJMHgxNQorCisvKiBNb29yZXN0b3duIHN1cHBvcnRzIHRocmVlIHJlc3RyaWN0ZWQgYWNjZXNzIHJlZ2lvbnMuICovCisjZGVmaW5lIE1SU1RfTlVNX1JBUiAzCisKKy8qIFJBUiBCdXMgQWRkcmVzcyBSYW5nZSAqLworc3RydWN0IHJhcl9hZGRyIHsKKwlkbWFfYWRkcl90IGxvdzsKKwlkbWFfYWRkcl90IGhpZ2g7Cit9OworCisvKgorICoJV2UgY3JlYXRlIG9uZSBvZiB0aGVzZSBmb3IgZWFjaCBSQVIKKyAqLworc3RydWN0IGNsaWVudCB7CisJaW50ICgqY2FsbGJhY2spKHVuc2lnbmVkIGxvbmcgZGF0YSk7CisJdW5zaWduZWQgbG9uZyBkcml2ZXJfcHJpdjsKKwlib29sIGJ1c3k7Cit9OworCitzdGF0aWMgREVGSU5FX01VVEVYKHJhcl9tdXRleCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGxuY19yZWdfbXV0ZXgpOworCisvKgorICoJT25lIHBlciBSQVIgZGV2aWNlIChjdXJyZW50bHkgb25seSBvbmUgZGV2aWNlKQorICovCitzdHJ1Y3QgcmFyX2RldmljZSB7CisJc3RydWN0IHJhcl9hZGRyIHJhcl9hZGRyW01SU1RfTlVNX1JBUl07CisJc3RydWN0IHBjaV9kZXYgKnJhcl9kZXY7CisJYm9vbCByZWdpc3RlcmVkOworCWJvb2wgYWxsb2NhdGVkOworCXN0cnVjdCBjbGllbnQgY2xpZW50W01SU1RfTlVNX1JBUl07Cit9OworCisvKiBDdXJyZW50IHBsYXRmb3JtcyBoYXZlIG9ubHkgb25lIHJhcl9kZXZpY2UgZm9yIDMgcmFyIHJlZ2lvbnMgKi8KK3N0YXRpYyBzdHJ1Y3QgcmFyX2RldmljZSBteV9yYXJfZGV2aWNlOworCisvKgorICoJQWJzdHJhY3Qgb3V0IG11bHRpcGxlIGRldmljZSBzdXBwb3J0LiBDdXJyZW50IHBsYXRmb3JtcyBvbmx5CisgKgloYXZlIGEgc2luZ2xlIFJBUiBkZXZpY2UuCisgKi8KKworLyoqCisgKglhbGxvY19yYXJfZGV2aWNlCS0JcmV0dXJuIGEgbmV3IFJBUiBzdHJ1Y3R1cmUKKyAqCisgKglSZXR1cm4gYSBuZXcgKGJ1dCBub3QgeWV0IHJlYWR5KSBSQVIgZGV2aWNlIG9iamVjdAorICovCitzdGF0aWMgc3RydWN0IHJhcl9kZXZpY2UgKmFsbG9jX3Jhcl9kZXZpY2Uodm9pZCkKK3sKKwlpZiAobXlfcmFyX2RldmljZS5hbGxvY2F0ZWQpCisJCXJldHVybiBOVUxMOworCW15X3Jhcl9kZXZpY2UuYWxsb2NhdGVkID0gMTsKKwlyZXR1cm4gJm15X3Jhcl9kZXZpY2U7Cit9CisKKy8qKgorICoJZnJlZV9yYXJfZGV2aWNlCQktCWZyZWUgYSBSQVIgb2JqZWN0CisgKglAcmFyOiB0aGUgUkFSIGRldmljZSBiZWluZyBmcmVlZAorICoKKyAqCVJlbGVhc2UgYSBSQVIgb2JqZWN0IGFuZCBhbnkgYXR0YWNoZWQgcmVzb3VyY2VzCisgKi8KK3N0YXRpYyB2b2lkIGZyZWVfcmFyX2RldmljZShzdHJ1Y3QgcmFyX2RldmljZSAqcmFyKQoreworCXBjaV9kZXZfcHV0KHJhci0+cmFyX2Rldik7CisJcmFyLT5hbGxvY2F0ZWQgPSAwOworfQorCisvKioKKyAqCV9yYXJfdG9fZGV2aWNlCQktCXJldHVybiB0aGUgZGV2aWNlIGhhbmRsaW5nIHRoaXMgUkFSCisgKglAcmFyOiBSQVIgbnVtYmVyCisgKglAb2ZmOiByZXR1cm5lZCBvZmZzZXQKKyAqCisgKglJbnRlcm5hbCBoZWxwZXIgZm9yIGxvb2tpbmcgdXAgUkFSIGRldmljZXMuIFRoaXMgYW5kIGFsbG9jIGFyZSB0aGUKKyAqCXR3byBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvdWNoaW5nIHRvIGdvIHRvIG11bHRpcGxlIFJBUiBkZXZpY2VzLgorICovCitzdGF0aWMgc3RydWN0IHJhcl9kZXZpY2UgKl9yYXJfdG9fZGV2aWNlKGludCByYXIsIGludCAqb2ZmKQoreworCWlmIChyYXIgPj0gMCAmJiByYXIgPD0gMykgeworCQkqb2ZmID0gcmFyOworCQlyZXR1cm4gJm15X3Jhcl9kZXZpY2U7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKioKKyAqCXJhcl90b19kZXZpY2UJCS0JcmV0dXJuIHRoZSBkZXZpY2UgaGFuZGxpbmcgdGhpcyBSQVIKKyAqCUByYXI6IFJBUiBudW1iZXIKKyAqCUBvZmY6IHJldHVybmVkIG9mZnNldAorICoKKyAqCVJldHVybiB0aGUgZGV2aWNlIHRoaXMgUkFSIG1hcHMgdG8gaWYgb25lIGlzIHByZXNlbnQsIG90aGVyd2lzZQorICoJcmV0dXJucyBOVUxMLiBSZXBvcnRzIHRoZSBvZmZzZXQgcmVsYXRpdmUgdG8gdGhlIGJhc2Ugb2YgdGhpcworICoJUkFSIGRldmljZSBpbiBvZmYuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmFyX2RldmljZSAqcmFyX3RvX2RldmljZShpbnQgcmFyLCBpbnQgKm9mZikKK3sKKwlzdHJ1Y3QgcmFyX2RldmljZSAqcmFyX2RldiA9IF9yYXJfdG9fZGV2aWNlKHJhciwgb2ZmKTsKKwlpZiAocmFyX2RldiA9PSBOVUxMIHx8ICFyYXJfZGV2LT5yZWdpc3RlcmVkKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gcmFyX2RldjsKK30KKworLyoqCisgKglyYXJfdG9fY2xpZW50CQktCXJldHVybiB0aGUgY2xpZW50IGhhbmRsaW5nIHRoaXMgUkFSCisgKglAcmFyOiBSQVIgbnVtYmVyCisgKgorICoJUmV0dXJuIHRoZSBjbGllbnQgdGhpcyBSQVIgbWFwcyB0byBpZiBhIG1hcHBpbmcgaXMga25vd24sIG90aGVyd2lzZQorICoJcmV0dXJucyBOVUxMLgorICovCitzdGF0aWMgc3RydWN0IGNsaWVudCAqcmFyX3RvX2NsaWVudChpbnQgcmFyKQoreworCWludCBpZHg7CisJc3RydWN0IHJhcl9kZXZpY2UgKnIgPSBfcmFyX3RvX2RldmljZShyYXIsICZpZHgpOworCWlmIChyICE9IE5VTEwpCisJCXJldHVybiAmci0+Y2xpZW50W2lkeF07CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICoJcmFyX3JlYWRfYWRkcgkJLQlyZXRyaWV2ZSBhIFJBUiBtYXBwaW5nCisgKglAcGRldjogUENJIGRldmljZSBmb3IgdGhlIFJBUgorICoJQG9mZnNldDogb2Zmc2V0IGZvciBtZXNzYWdlCisgKglAYWRkcjogcmV0dXJuZWQgYWRkcmVzcworICoKKyAqCVJlYWRzIHRoZSBhZGRyZXNzIG9mIGEgZ2l2ZW4gUkFSIHJlZ2lzdGVyLiBSZXR1cm5zIDAgb24gc3VjY2VzcworICoJb3IgYW4gZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHJhcl9yZWFkX2FkZHIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBvZmZzZXQsIGRtYV9hZGRyX3QgKmFkZHIpCit7CisJLyoKKwkgKiA9PT09PT09PSBUaGUgTGluY3JvZnQgTWVzc2FnZSBCdXMgSW50ZXJmYWNlID09PT09PT09CisJICogTGluY3JvZnQgcmVnaXN0ZXJzIG1heSBiZSBvYnRhaW5lZCB2aWEgUENJIGZyb20KKwkgKiB0aGUgaG9zdCBicmlkZ2UgdXNpbmcgdGhlIExpbmNyb2Z0IE1lc3NhZ2UgQnVzCisJICogSW50ZXJmYWNlLiAgVGhhdCBtZXNzYWdlIGJ1cyBpbnRlcmZhY2UgaXMgZ2VuZXJhbGx5CisJICogY29tcHJpc2VkIG9mIHR3byByZWdpc3RlcnM6IGEgY29udHJvbCByZWdpc3RlciAoTUNSLCAweERPKQorCSAqIGFuZCBhIGRhdGEgcmVnaXN0ZXIgKE1EUiwgMHhENCkuCisJICoKKwkgKiBUaGUgTUNSIChtZXNzYWdlIGNvbnRyb2wgcmVnaXN0ZXIpIGZvcm1hdCBpcyB0aGUgZm9sbG93aW5nOgorCSAqICAgMS4gIFszMToyNF06IE9wY29kZQorCSAqICAgMi4gIFsyMzoxNl06IFBvcnQKKwkgKiAgIDMuICBbMTU6OF06IFJlZ2lzdGVyIE9mZnNldAorCSAqICAgNC4gIFs3OjRdOiBCeXRlIEVuYWJsZXMgKHVzZSAweEYgdG8gc2V0IGFsbCBvZiB0aGVzZSBiaXRzCisJICogICAgICAgICAgICAgIHRvIDEpCisJICogICA1LiAgWzM6MF06IHJlc2VydmVkCisJICoKKwkgKiAgUmVhZCAoMHhEMCkgYW5kIHdyaXRlICgweEUwKSBvcGNvZGVzIGFyZSB3cml0dGVuIHRvIHRoZQorCSAqICBjb250cm9sIHJlZ2lzdGVyIHdoZW4gcmVhZGluZyBhbmQgd3JpdGluZyB0byBMaW5jcm9mdAorCSAqICByZWdpc3RlcnMsIHJlc3BlY3RpdmVseS4KKwkgKgorCSAqICBXZSdyZSBpbnRlcmVzdGVkIGluIHJlZ2lzdGVycyBmb3VuZCBpbiB0aGUgTGluY3JvZnQKKwkgKiAgQi11bml0LiAgVGhlIEItdW5pdCBwb3J0IGlzIDB4My4KKwkgKgorCSAqICBUaGUgc2l4IEItdW5pdCBSQVIgcmVnaXN0ZXIgb2Zmc2V0cyB3ZSB1c2UgYXJlIGxpc3RlZAorCSAqICBlYXJsaWVyIGluIHRoaXMgZmlsZS4KKwkgKgorCSAqICBMYXN0bHkgd3JpdGluZyB0byB0aGUgTUNSIHJlZ2lzdGVyIHJlcXVpcmVzIHRoZSAiQnl0ZQorCSAqICBlbmFibGVzIiBiaXRzIHRvIGJlIHNldCB0byAxLiAgVGhpcyBtYXkgYmUgYWNoaWV2ZWQgYnkKKwkgKiAgd3JpdGluZyAweEYgYXQgYml0IDQuCisJICoKKwkgKiBUaGUgTURSIChtZXNzYWdlIGRhdGEgcmVnaXN0ZXIpIGZvcm1hdCBpcyB0aGUgZm9sbG93aW5nOgorCSAqICAgMS4gWzMxOjBdOiBSZWFkL1dyaXRlIERhdGEKKwkgKgorCSAqICBEYXRhIGJlaW5nIHJlYWQgZnJvbSB0aGlzIHJlZ2lzdGVyIGlzIG9ubHkgYXZhaWxhYmxlIGFmdGVyCisJICogIHdyaXRpbmcgdGhlIGFwcHJvcHJpYXRlIGNvbnRyb2wgbWVzc2FnZSB0byB0aGUgTUNSCisJICogIHJlZ2lzdGVyLgorCSAqCisJICogIERhdGEgYmVpbmcgd3JpdHRlbiB0byB0aGlzIHJlZ2lzdGVyIG11c3QgYmUgd3JpdHRlbiBiZWZvcmUKKwkgKiAgd3JpdGluZyB0aGUgYXBwcm9wcmlhdGUgY29udHJvbCBtZXNzYWdlIHRvIHRoZSBNQ1IKKwkgKiAgcmVnaXN0ZXIuCisJKi8KKworCWludCByZXN1bHQ7CisJdTMyIGFkZHIzMjsKKworCS8qIENvbnN0cnVjdCBjb250cm9sIG1lc3NhZ2UgKi8KKwl1MzIgY29uc3QgbWVzc2FnZSA9CisJCSAoTE5DX01FU1NBR0VfUkVBRF9PUENPREUgPDwgMjQpCisJCSB8IChMTkNfQlVOSVRfUE9SVCA8PCAxNikKKwkJIHwgKG9mZnNldCA8PCA4KQorCQkgfCAoTE5DX01FU1NBR0VfQllURV9XUklURV9FTkFCTEVTIDw8IDQpOworCisJZGV2X2RiZygmcGRldi0+ZGV2LCAiT2Zmc2V0IGZvciAnZ2V0JyBMTkMgTVNHIGlzICV4XG4iLCBvZmZzZXQpOworCisJLyoKKwkqIFdlIHN5bmNocm9uaXplIGFjY2VzcyB0byB0aGUgTGluY3JvZnQgTUNSIGFuZCBNRFIgcmVnaXN0ZXJzCisJKiB1bnRpbCBCT1RIIHRoZSBjb21tYW5kIGlzIGlzc3VlZCB0aHJvdWdoIHRoZSBNQ1IgcmVnaXN0ZXIKKwkqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgTURSIHJlZ2lzdGVyLgorCSogT3RoZXJ3aXNlIGEgcmFjZSBjb25kaXRpb24gd291bGQgZXhpc3QgYmV0d2VlbiBhY2Nlc3NlcyB0bworCSogYm90aCByZWdpc3RlcnMuCisJKi8KKworCW11dGV4X2xvY2soJmxuY19yZWdfbXV0ZXgpOworCisJLyogU2VuZCB0aGUgY29udHJvbCBtZXNzYWdlICovCisJcmVzdWx0ID0gcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBMTkNfTUNSX09GRlNFVCwgbWVzc2FnZSk7CisJaWYgKCFyZXN1bHQpIHsKKwkJLyogUmVhZCBiYWNrIHRoZSBhZGRyZXNzIGFzIGEgMzJiaXQgdmFsdWUgKi8KKwkJcmVzdWx0ID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIExOQ19NRFJfT0ZGU0VULCAmYWRkcjMyKTsKKwkJKmFkZHIgPSAoZG1hX2FkZHJfdClhZGRyMzI7CisJfQorCW11dGV4X3VubG9jaygmbG5jX3JlZ19tdXRleCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKglyYXJfc2V0X2FkZHIJCS0JU2V0IGEgUkFSIG1hcHBpbmcKKyAqCUBwZGV2OiBQQ0kgZGV2aWNlIGZvciB0aGUgUkFSCisgKglAb2Zmc2V0OiBvZmZzZXQgZm9yIG1lc3NhZ2UKKyAqCUBhZGRyOiBhZGRyZXNzIHRvIHNldAorICoKKyAqCVNldHMgdGhlIGFkZHJlc3Mgb2YgYSBnaXZlbiBSQVIgcmVnaXN0ZXIuIFJldHVybnMgMCBvbiBzdWNjZXNzCisgKglvciBhbiBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgcmFyX3NldF9hZGRyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCWludCBvZmZzZXQsCisJZG1hX2FkZHJfdCBhZGRyKQoreworCS8qCisJKiBEYXRhIGJlaW5nIHdyaXR0ZW4gdG8gdGhpcyByZWdpc3RlciBtdXN0IGJlIHdyaXR0ZW4gYmVmb3JlCisJKiB3cml0aW5nIHRoZSBhcHByb3ByaWF0ZSBjb250cm9sIG1lc3NhZ2UgdG8gdGhlIE1DUgorCSogcmVnaXN0ZXIuCisJKiBTZWUgcmFyX2dldF9hZGRycygpIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZQorCSogbWVzc2FnZSBidXMgaW50ZXJmYWNlIGJlaW5nIHVzZWQgaGVyZS4KKwkqLworCisJaW50IHJlc3VsdDsKKworCS8qIENvbnN0cnVjdCBjb250cm9sIG1lc3NhZ2UgKi8KKwl1MzIgY29uc3QgbWVzc2FnZSA9IChMTkNfTUVTU0FHRV9XUklURV9PUENPREUgPDwgMjQpCisJCXwgKExOQ19CVU5JVF9QT1JUIDw8IDE2KQorCQl8IChvZmZzZXQgPDwgOCkKKwkJfCAoTE5DX01FU1NBR0VfQllURV9XUklURV9FTkFCTEVTIDw8IDQpOworCisJLyoKKwkqIFdlIHN5bmNocm9uaXplIGFjY2VzcyB0byB0aGUgTGluY3JvZnQgTUNSIGFuZCBNRFIgcmVnaXN0ZXJzCisJKiB1bnRpbCBCT1RIIHRoZSBjb21tYW5kIGlzIGlzc3VlZCB0aHJvdWdoIHRoZSBNQ1IgcmVnaXN0ZXIKKwkqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgTURSIHJlZ2lzdGVyLgorCSogT3RoZXJ3aXNlIGEgcmFjZSBjb25kaXRpb24gd291bGQgZXhpc3QgYmV0d2VlbiBhY2Nlc3NlcyB0bworCSogYm90aCByZWdpc3RlcnMuCisJKi8KKworCW11dGV4X2xvY2soJmxuY19yZWdfbXV0ZXgpOworCisJLyogU2VuZCB0aGUgY29udHJvbCBtZXNzYWdlICovCisJcmVzdWx0ID0gcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBMTkNfTURSX09GRlNFVCwgYWRkcik7CisJaWYgKCFyZXN1bHQpCisJCS8qIEFuZCBhZGRyZXNzICovCisJCXJlc3VsdCA9IHBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgTE5DX01DUl9PRkZTRVQsIG1lc3NhZ2UpOworCisJbXV0ZXhfdW5sb2NrKCZsbmNfcmVnX211dGV4KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICoJcmFyX2luaXRfcGFyYW1zCQktCUluaXRpYWxpemUgUkFSIHBhcmFtZXRlcnMKKyAqCUByYXI6IFJBUiBkZXZpY2UgdG8gaW5pdGlhbGlzZQorICoKKyAqCUluaXRpYWxpemUgUkFSIHBhcmFtZXRlcnMsIHN1Y2ggYXMgYnVzIGFkZHJlc3NlcywgZXRjLiBSZXR1cm5zIDAKKyAqCW9uIHN1Y2Nlc3MsIG9yIGFuIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBpbml0X3Jhcl9wYXJhbXMoc3RydWN0IHJhcl9kZXZpY2UgKnJhcikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHJhci0+cmFyX2RldjsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgb2Zmc2V0ID0gMHgxMDsJLyogUkFSIDAgdG8gMiBpbiBvcmRlciBsb3cvaGlnaC9sb3cvaGlnaC8uLi4gKi8KKworCS8qIFJldHJpZXZlIFJBUiBzdGFydCBhbmQgZW5kIGJ1cyBhZGRyZXNzZXMuCisJKiBBY2Nlc3MgdGhlIFJBUiByZWdpc3RlcnMgdGhyb3VnaCB0aGUgTGluY3JvZnQgTWVzc2FnZSBCdXMKKwkqIEludGVyZmFjZSBvbiBQQ0kgZGV2aWNlOiAwMDowMC4wIEhvc3QgYnJpZGdlLgorCSovCisKKwlmb3IgKGkgPSAwOyBpIDwgTVJTVF9OVU1fUkFSOyArK2kpIHsKKwkJc3RydWN0IHJhcl9hZGRyICphZGRyID0gJnJhci0+cmFyX2FkZHJbaV07CisKKwkJcmVzdWx0ID0gcmFyX3JlYWRfYWRkcihwZGV2LCBvZmZzZXQrKywgJmFkZHItPmxvdyk7CisJCWlmIChyZXN1bHQgIT0gMCkKKwkJCXJldHVybiByZXN1bHQ7CisKKwkJcmVzdWx0ID0gcmFyX3JlYWRfYWRkcihwZGV2LCBvZmZzZXQrKywgJmFkZHItPmhpZ2gpOworCQlpZiAocmVzdWx0ICE9IDApCisJCQlyZXR1cm4gcmVzdWx0OworCisKKwkJLyoKKwkJKiBPbmx5IHRoZSB1cHBlciAyMiBiaXRzIG9mIHRoZSBSQVIgYWRkcmVzc2VzIGFyZQorCQkqIHN0b3JlZCBpbiB0aGVpciBjb3JyZXNwb25kaW5nIFJBUiByZWdpc3RlcnMgc28gd2UKKwkJKiBtdXN0IHNldCB0aGUgbG93ZXIgMTAgYml0cyBhY2NvcmRpbmdseS4KKworCQkqIFRoZSBsb3cgYWRkcmVzcyBoYXMgaXRzIGxvd2VyIDEwIGJpdHMgY2xlYXJlZCwgYW5kCisJCSogdGhlIGhpZ2ggYWRkcmVzcyBoYXMgYWxsIGl0cyBsb3dlciAxMCBiaXRzIHNldCwKKwkJKiBlLmcuOgorCQkqIGxvdyA9IDB4MmZmZmZjMDAKKwkJKi8KKworCQlhZGRyLT5sb3cgJj0gKGRtYV9hZGRyX3QpMHhmZmZmZmMwMHU7CisKKwkJLyoKKwkJKiBTZXQgYml0cyA5OjAgb24gdXBwc2VyIGFkZHJlc3MgaWYgYml0cyAzMToxMCBhcmUgbm9uCisJCSogemVybzsgb3RoZXJ3aXplIGNsZWFyIGFsbCBiaXRzCisJCSovCisKKwkJaWYgKChhZGRyLT5oaWdoICYgMHhmZmZmZmMwMHUpID09IDApCisJCQlhZGRyLT5oaWdoID0gMDsKKwkJZWxzZQorCQkJYWRkci0+aGlnaCB8PSAweDNmZnU7CisJfQorCS8qIERvbmUgYWNjZXNzaW5nIHRoZSBkZXZpY2UuICovCisKKwlpZiAocmVzdWx0ID09IDApIHsKKwkJZm9yIChpID0gMDsgaSAhPSBNUlNUX05VTV9SQVI7ICsraSkgeworCQkJLyoKKwkJCSogIkJSQVIiIHJlZmVycyB0byB0aGUgUkFSIHJlZ2lzdGVycyBpbiB0aGUKKwkJCSogTGluY3JvZnQgQi11bml0LgorCQkJKi8KKwkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJCUkFSWyV1XSBidXMgYWRkcmVzcyByYW5nZSA9ICIKKwkJCSAgIlslbHgsICVseF1cbiIsIGksCisJCQkgICh1bnNpZ25lZCBsb25nKXJhci0+cmFyX2FkZHJbaV0ubG93LAorCQkJICAodW5zaWduZWQgbG9uZylyYXItPnJhcl9hZGRyW2ldLmhpZ2gpOworCQl9CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICoJcmFyX2dldF9hZGRyZXNzCQktCWdldCB0aGUgYnVzIGFkZHJlc3MgaW4gYSBSQVIKKyAqCUBzdGFydDogcmV0dXJuIHZhbHVlIG9mIHN0YXJ0IGFkZHJlc3Mgb2YgYmxvY2sKKyAqCUBlbmQ6IHJldHVybiB2YWx1ZSBvZiBlbmQgYWRkcmVzcyBvZiBibG9jaworICoKKyAqCVRoZSByYXJfZ2V0X2FkZHJlc3MgZnVuY3Rpb24gaXMgdXNlZCBieSBvdGhlciBkZXZpY2UgZHJpdmVycworICoJdG8gb2J0YWluIFJBUiBhZGRyZXNzIGluZm9ybWF0aW9uIG9uIGEgUkFSLiBJdCB0YWtlcyB0aHJlZQorICoJcGFyYW1ldGVyczoKKyAqCisgKglUaGUgZnVuY3Rpb24gcmV0dXJucyBhIDAgdXBvbiBzdWNjZXNzIG9yIGFuIGVycm9yIGlmIHRoZXJlIGlzIG5vIFJBUgorICoJZmFjaWxpdHkgb24gdGhpcyBzeXN0ZW0uCisgKi8KK2ludCByYXJfZ2V0X2FkZHJlc3MoaW50IHJhcl9pbmRleCwgZG1hX2FkZHJfdCAqc3RhcnQsIGRtYV9hZGRyX3QgKmVuZCkKK3sKKwlpbnQgaWR4OworCXN0cnVjdCByYXJfZGV2aWNlICpyYXIgPSByYXJfdG9fZGV2aWNlKHJhcl9pbmRleCwgJmlkeCk7CisKKwlpZiAocmFyID09IE5VTEwpIHsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJKnN0YXJ0ID0gcmFyLT5yYXJfYWRkcltpZHhdLmxvdzsKKwkqZW5kID0gcmFyLT5yYXJfYWRkcltpZHhdLmhpZ2g7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHJhcl9nZXRfYWRkcmVzcyk7CisKKy8qKgorICoJcmFyX2xvY2sJLQlsb2NrIGEgUkFSIHJlZ2lzdGVyCisgKglAcmFyX2luZGV4OiBSQVIgdG8gbG9jayAoMC0yKQorICoKKyAqCVRoZSByYXJfbG9jayBmdW5jdGlvbiBpcyB1ZWQgYnkgb3RoZXIgZGV2aWNlIGRyaXZlcnMgdG8gbG9jayBhbiBSQVIuCisgKglvbmNlIGEgUkFSIGlzIGxvY2tlZCwgaXQgc3RheXMgbG9ja2VkIHVudGlsIHRoZSBuZXh0IHN5c3RlbSByZWJvb3QuCisgKgorICoJVGhlIGZ1bmN0aW9uIHJldHVybnMgYSAwIHVwb24gc3VjY2VzcyBvciBhbiBlcnJvciBpZiB0aGVyZSBpcyBubyBSQVIKKyAqCWZhY2lsaXR5IG9uIHRoaXMgc3lzdGVtLCBvciB0aGUgbG9ja2luZyBmYWlscworICovCitpbnQgcmFyX2xvY2soaW50IHJhcl9pbmRleCkKK3sKKwlzdHJ1Y3QgcmFyX2RldmljZSAqcmFyOworCWludCByZXN1bHQ7CisJaW50IGlkeDsKKwlkbWFfYWRkcl90IGxvdywgaGlnaDsKKworCXJhciA9IHJhcl90b19kZXZpY2UocmFyX2luZGV4LCAmaWR4KTsKKworCWlmIChyYXIgPT0gTlVMTCkgeworCQlXQVJOX09OKDEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlsb3cgPSByYXItPnJhcl9hZGRyW2lkeF0ubG93ICYgMHhmZmZmZmMwMHU7CisJaGlnaCA9IHJhci0+cmFyX2FkZHJbaWR4XS5oaWdoICYgMHhmZmZmZmMwMHU7CisKKwkvKgorCSogT25seSBhbGxvdyBJL08gZnJvbSB0aGUgZ3JhcGhpY3MgYW5kIExhbmd3ZWxsOworCSogbm90IGZyb20gdGhlIHg4NiBwcm9jZXNzb3IKKwkqLworCisJaWYgKHJhcl9pbmRleCA9PSBSQVJfVFlQRV9WSURFTykgeworCQlsb3cgfD0gMHgwMDAwMDAwOTsKKwkJaGlnaCB8PSAweDAwMDAwMDE1OworCX0gZWxzZSBpZiAocmFyX2luZGV4ID09IFJBUl9UWVBFX0FVRElPKSB7CisJCS8qIE9ubHkgYWxsb3cgSS9PIGZyb20gTGFuZ3dlbGw7IG5vdGhpbmcgZnJvbSB4ODYgKi8KKwkJbG93IHw9IDB4MDAwMDAwMDg7CisJCWhpZ2ggfD0gMHgwMDAwMDAxODsKKwl9IGVsc2UKKwkJLyogUmVhZC1vbmx5IGZyb20gYWxsIGFnZW50cyAqLworCQloaWdoIHw9IDB4MDAwMDAwMTg7CisKKwkvKgorCSogTm93IHByb2dyYW0gdGhlIHJlZ2lzdGVyIHVzaW5nIHRoZSBMaW5jcm9mdCBtZXNzYWdlCisJKiBidXMgaW50ZXJmYWNlLgorCSovCisJcmVzdWx0ID0gcmFyX3NldF9hZGRyKHJhci0+cmFyX2RldiwKKwkJCQkyICogaWR4LCBsb3cpOworCisJaWYgKHJlc3VsdCA9PSAwKQorCQlyZXN1bHQgPSByYXJfc2V0X2FkZHIocmFyLT5yYXJfZGV2LAorCQkJCTIgKiBpZHggKyAxLCBoaWdoKTsKKworCXJldHVybiByZXN1bHQ7Cit9CitFWFBPUlRfU1lNQk9MKHJhcl9sb2NrKTsKKworLyoqCisgKglyZWdpc3Rlcl9yYXIJCS0JcmVnaXN0ZXIgYSBSQVIgaGFuZGxlcgorICoJQG51bTogUkFSIHdlIHdpc2ggdG8gcmVnaXN0ZXIgZm9yCisgKglAY2FsbGJhY2s6IGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBSQVIgc3VwcG9ydCBpcyBhdmFpbGFibGUKKyAqCUBkYXRhOiBkYXRhIHRvIHBhc3MgdG8gdGhpcyBmdW5jdGlvbgorICoKKyAqCVRoZSByZWdpc3Rlcl9yYXIgZnVuY3Rpb24gaXMgdG8gdXNlZCBieSBvdGhlciBkZXZpY2UgZHJpdmVycworICoJdG8gZW5zdXJlIHRoYXQgdGhpcyBkcml2ZXIgaXMgcmVhZHkuIEFzIHdlIGNhbm5vdCBiZSBzdXJlIG9mCisgKgl0aGUgY29tcGlsZS9leGVjdXRlIG9yZGVyIG9mIGRyaXZlcnMgaW4gdGhlciBrZXJuZWwsIGl0IGlzCisgKgliZXN0IHRvIGdpdmUgdGhpcyBkcml2ZXIgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdoZW4KKyAqCWl0IGlzIHJlYWR5IHRvIGdpdmUgb3V0IGFkZHJlc3Nlcy4gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uCisgKgl3b3VsZCBoYXZlIHRob3NlIHN0ZXBzIHRoYXQgY29udGludWUgdGhlIGluaXRpYWxpemF0aW9uIG9mCisgKglhIGRyaXZlciB0aGF0IGRvIHJlcXVpcmUgYSB2YWxpZCBSQVIgYWRkcmVzcy4gT25lIG9mIHRob3NlCisgKglzdGVwcyB3b3VsZCBiZSB0byBjYWxsIHJhcl9nZXRfYWRkcmVzcygpCisgKgorICoJVGhpcyBmdW5jdGlvbiByZXR1cm4gMCBvbiBzdWNjZXNzIG9yIGFuIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworaW50IHJlZ2lzdGVyX3JhcihpbnQgbnVtLCBpbnQgKCpjYWxsYmFjaykodW5zaWduZWQgbG9uZyBkYXRhKSwKKwkJCQkJCQl1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJLyogRm9yIG5vdyB3ZSBoYXJkY29kZSBhIHNpbmdsZSBSQVIgZGV2aWNlICovCisJc3RydWN0IHJhcl9kZXZpY2UgKnJhcjsKKwlzdHJ1Y3QgY2xpZW50ICpjOworCWludCBpZHg7CisJaW50IHJldHZhbCA9IDA7CisKKwltdXRleF9sb2NrKCZyYXJfbXV0ZXgpOworCisJLyogRG8gd2UgaGF2ZSBhIGNsaWVudCBtYXBwaW5nIGZvciB0aGlzIFJBUiBudW1iZXIgPyAqLworCWMgPSByYXJfdG9fY2xpZW50KG51bSk7CisJaWYgKGMgPT0gTlVMTCkgeworCQlyZXR2YWwgPSAtRVJBTkdFOworCQlnb3RvIGRvbmU7CisJfQorCS8qIElzIGl0IGNsYWltZWQgPyAqLworCWlmIChjLT5idXN5KSB7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBkb25lOworCX0KKwljLT5idXN5ID0gMTsKKworCS8qIFNlZSBpZiB3ZSBoYXZlIGEgaGFuZGxlciBmb3IgdGhpcyBSQVIgeWV0LCBpZiB3ZSBkbyB0aGVuIGZpcmUgaXQgKi8KKwlyYXIgPSByYXJfdG9fZGV2aWNlKG51bSwgJmlkeCk7CisKKwlpZiAocmFyKSB7CisJCS8qCisJCSogaWYgdGhlIGRyaXZlciBhbHJlYWR5IHJlZ2lzdGVyZWQsIHRoZW4gd2UgY2FuIHNpbXBseQorCQkqIGNhbGwgdGhlIGNhbGxiYWNrIHJpZ2h0IG5vdworCQkqLworCQkoKmNhbGxiYWNrKShkYXRhKTsKKwkJZ290byBkb25lOworCX0KKworCS8qIEFycmFuZ2UgdG8gYmUgY2FsbGVkIGJhY2sgd2hlbiB0aGUgaGFyZHdhcmUgaXMgZm91bmQgKi8KKwljLT5jYWxsYmFjayA9IGNhbGxiYWNrOworCWMtPmRyaXZlcl9wcml2ID0gZGF0YTsKK2RvbmU6CisJbXV0ZXhfdW5sb2NrKCZyYXJfbXV0ZXgpOworCXJldHVybiByZXR2YWw7Cit9CitFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX3Jhcik7CisKKy8qKgorICoJdW5yZWdpc3Rlcl9yYXIJLQlyZWxlYXNlIGEgUkFSIGFsbG9jYXRpb24KKyAqCUBudW06IFJBUiBudW1iZXIKKyAqCisgKglSZWxlYXNlcyBhIFJBUiBhbGxvY2F0aW9uLCBvciBwZW5kaW5nIGFsbG9jYXRpb24uIElmIGEgY2FsbGJhY2sgaXMKKyAqCXBlbmRpbmcgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgZWl0aGVyIGNvbXBsZXRlIGJlZm9yZSB0aGUgdW5yZWdpc3RlcgorICoJcmV0dXJucyBvciBub3QgYXQgYWxsLgorICovCisKK3ZvaWQgdW5yZWdpc3Rlcl9yYXIoaW50IG51bSkKK3sKKwlzdHJ1Y3QgY2xpZW50ICpjOworCisJbXV0ZXhfbG9jaygmcmFyX211dGV4KTsKKwljID0gcmFyX3RvX2NsaWVudChudW0pOworCWlmIChjID09IE5VTEwgfHwgIWMtPmJ1c3kpCisJCVdBUk5fT04oMSk7CisJZWxzZQorCQljLT5idXN5ID0gMDsKKwltdXRleF91bmxvY2soJnJhcl9tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfcmFyKTsKKworLyoqCisgKglyYXJfY2FsbGJhY2sJCS0JUHJvY2VzcyBjYWxsYmFja3MKKyAqCUByYXI6IG5ldyBSQVIgZGV2aWNlCisgKgorICoJUHJvY2VzcyB0aGUgY2FsbGJhY2tzIGZvciBhIG5ld2x5IGZvdW5kIFJBUiBkZXZpY2UuCisgKi8KKworc3RhdGljIHZvaWQgcmFyX2NhbGxiYWNrKHN0cnVjdCByYXJfZGV2aWNlICpyYXIpCit7CisJc3RydWN0IGNsaWVudCAqYyA9ICZyYXItPmNsaWVudFswXTsKKwlpbnQgaTsKKworCW11dGV4X2xvY2soJnJhcl9tdXRleCk7CisKKwlyYXItPnJlZ2lzdGVyZWQgPSAxOwkvKiBFbnN1cmUgbm8gbW9yZSBjYWxsYmFja3MgcXVldWUgKi8KKworCWZvciAoaSA9IDA7IGkgPCBNUlNUX05VTV9SQVI7IGkrKykgeworCQlpZiAoYy0+Y2FsbGJhY2sgJiYgYy0+YnVzeSkgeworCQkJYy0+Y2FsbGJhY2soYy0+ZHJpdmVyX3ByaXYpOworCQkJYy0+Y2FsbGJhY2sgPSBOVUxMOworCQl9CisJCWMrKzsKKwl9CisJbXV0ZXhfdW5sb2NrKCZyYXJfbXV0ZXgpOworfQorCisvKioKKyAqCXJhcl9wcm9iZQkJLQlQQ0kgcHJvYmUgY2FsbGJhY2sKKyAqCUBkZXY6IFBDSSBkZXZpY2UKKyAqCUBpZDogbWF0Y2hpbmcgZW50cnkgaW4gdGhlIG1hdGNoIHRhYmxlCisgKgorICoJQSBSQVIgZGV2aWNlIGhhcyBiZWVuIGRpc2NvdmVyZWQuIEluaXRpYWxpc2UgaXQgYW5kIGlmIHN1Y2Nlc3NmdWwKKyAqCXByb2Nlc3MgYW55IHBlbmRpbmcgY2FsbGJhY2tzIHRoYXQgY2FuIG5vdyBiZSBjb21wbGV0ZWQuCisgKi8KK3N0YXRpYyBpbnQgcmFyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgZXJyb3I7CisJc3RydWN0IHJhcl9kZXZpY2UgKnJhcjsKKworCWRldl9kYmcoJmRldi0+ZGV2LCAiUENJIHByb2JlIHN0YXJ0aW5nXG4iKTsKKworCXJhciA9IGFsbG9jX3Jhcl9kZXZpY2UoKTsKKwlpZiAocmFyID09IE5VTEwpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBFbmFibGUgdGhlIGRldmljZSAqLworCWVycm9yID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsCisJCQkiRXJyb3IgZW5hYmxpbmcgUkFSIHJlZ2lzdGVyIFBDSSBkZXZpY2VcbiIpOworCQlnb3RvIGVuZF9mdW5jdGlvbjsKKwl9CisKKwkvKiBGaWxsIGluIHRoZSByYXJfZGV2aWNlIHN0cnVjdHVyZSAqLworCXJhci0+cmFyX2RldiA9IHBjaV9kZXZfZ2V0KGRldik7CisJcGNpX3NldF9kcnZkYXRhKGRldiwgcmFyKTsKKworCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgUkFSIHBhcmFtZXRlcnMsIHdoaWNoIGhhdmUgdG8gYmUgcmV0cmlldmVkCisJICogdmlhIHRoZSBtZXNzYWdlIGJ1cyBpbnRlcmZhY2UuCisJICovCisJZXJyb3IgPSBpbml0X3Jhcl9wYXJhbXMocmFyKTsKKwlpZiAoZXJyb3IpIHsKKwkJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiRXJyb3IgcmV0cmlldmluZyBSQVIgYWRkcmVzc2VzXG4iKTsKKwkJZ290byBlbmRfZnVuY3Rpb247CisJfQorCS8qIG5vdyBjYWxsIGFueW9uZSB3aG8gaGFzIHJlZ2lzdGVyZWQgKHVzaW5nIGNhbGxiYWNrcykgKi8KKwlyYXJfY2FsbGJhY2socmFyKTsKKwlyZXR1cm4gMDsKK2VuZF9mdW5jdGlvbjoKKwlmcmVlX3Jhcl9kZXZpY2UocmFyKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK2NvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJhcl9wY2lfaWRfdGJsW10gPSB7CisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHg0MTEwKSB9LAorCXsgMCB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcmFyX3BjaV9pZF90YmwpOworCitjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqbXlfaWRfdGFibGUgPSByYXJfcGNpX2lkX3RibDsKKworLyogZmllbGQgZm9yIHJlZ2lzdGVyaW5nIGRyaXZlciB0byBQQ0kgZGV2aWNlICovCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcmFyX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgPSAicmFyX3JlZ2lzdGVyX2RyaXZlciIsCisJLmlkX3RhYmxlID0gcmFyX3BjaV9pZF90YmwsCisJLnByb2JlID0gcmFyX3Byb2JlLAorCS8qIENhbm5vdCBiZSB1bnBsdWdnZWQgLSBubyByZW1vdmUgKi8KK307CisKK3N0YXRpYyBpbnQgX19pbml0IHJhcl9pbml0X2hhbmRsZXIodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcmFyX3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcmFyX2V4aXRfaGFuZGxlcih2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcmFyX3BjaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChyYXJfaW5pdF9oYW5kbGVyKTsKK21vZHVsZV9leGl0KHJhcl9leGl0X2hhbmRsZXIpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkludGVsIFJlc3RyaWN0ZWQgQWNjZXNzIFJlZ2lvbiBSZWdpc3RlciBEcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3NjdV9pcGMuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3NjdV9pcGMuYwppbmRleCA0MDY1OGUzLi45NDNmOTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9zY3VfaXBjLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfc2N1X2lwYy5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbXJzdC5oPgogI2luY2x1ZGUgPGFzbS9pbnRlbF9zY3VfaXBjLmg+CiAKIC8qIElQQyBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgbWVzc2FnZSB0eXBlcyAqLwpAQCAtMzgsMTAgKzM4LDYgQEAKICNkZWZpbmUgSVBDX0NNRF9QQ05UUkxfUiAgICAgIDEgLyogUmVnaXN0ZXIgcmVhZCAqLwogI2RlZmluZSBJUENfQ01EX1BDTlRSTF9NICAgICAgMiAvKiBSZWdpc3RlciByZWFkLW1vZGlmeS13cml0ZSAqLwogCi0vKiBNaXNjZWxhbmVvdXMgQ29tbWFuZCBpZHMgKi8KLSNkZWZpbmUgSVBDX0NNRF9JTkRJUkVDVF9SRCAgIDIgLyogMzJiaXQgaW5kaXJlY3QgcmVhZCAqLwotI2RlZmluZSBJUENfQ01EX0lORElSRUNUX1dSICAgNSAvKiAzMmJpdCBpbmRpcmVjdCB3cml0ZSAqLwotCiAvKgogICogSVBDIHJlZ2lzdGVyIHN1bW1hcnkKICAqCkBAIC02Miw4ICs1OCw4IEBACiAKICNkZWZpbmUgSVBDX0JBU0VfQUREUiAgICAgMHhGRjExQzAwMAkvKiBJUEMxIGJhc2UgcmVnaXN0ZXIgYWRkcmVzcyAqLwogI2RlZmluZSBJUENfTUFYX0FERFIgICAgICAweDEwMAkJLyogTWF4aW11bSBJUEMgcmVnaXNlcnMgKi8KLSNkZWZpbmUgSVBDX1dXQlVGX1NJWkUgICAgMTYJCS8qIElQQyBXcml0ZSBidWZmZXIgU2l6ZSAqLwotI2RlZmluZSBJUENfUldCVUZfU0laRSAgICAxNgkJLyogSVBDIFJlYWQgYnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgSVBDX1dXQlVGX1NJWkUgICAgMjAJCS8qIElQQyBXcml0ZSBidWZmZXIgU2l6ZSAqLworI2RlZmluZSBJUENfUldCVUZfU0laRSAgICAyMAkJLyogSVBDIFJlYWQgYnVmZmVyIFNpemUgKi8KICNkZWZpbmUgSVBDX0kyQ19CQVNFICAgICAgMHhGRjEyQjAwMAkvKiBJMkMgY29udHJvbCByZWdpc3RlciBiYXNlIGFkZHJlc3MgKi8KICNkZWZpbmUgSVBDX0kyQ19NQVhfQUREUiAgMHgxMAkJLyogTWF4aW11bSBJMkMgcmVnaXNlcnMgKi8KIApAQCAtNzgsMTIgKzc0LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpbnRlbF9zY3VfaXBjX2RldiAgaXBjZGV2OyAvKiBPbmx5IG9uZSBmb3Igbm93ICovCiAKLXN0YXRpYyBpbnQgcGxhdGZvcm0gPSAxOwotbW9kdWxlX3BhcmFtKHBsYXRmb3JtLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhwbGF0Zm9ybSwgIjEgZm9yIG1vb3Jlc3Rvd24gcGxhdGZvcm0iKTsKLQotCi0KK3N0YXRpYyBpbnQgcGxhdGZvcm07CQkvKiBQbGF0Zm9ybSB0eXBlICovCiAKIC8qCiAgKiBJUEMgUmVhZCBCdWZmZXIgKFJlYWQgT25seSk6CkBAIC0xMTksMjQgKzExMCw2IEBACiB9CiAKIC8qCi0gKiBJUEMgZGVzdGluYXRpb24gUG9pbnRlciAoV3JpdGUgT25seSk6Ci0gKiBVc2UgY29udGVudCBhcyBwb2ludGVyIGZvciBkZXN0aW5hdGlvbiB3cml0ZQotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaXBjX3dyaXRlX2RwdHIodTMyIGRhdGEpIC8qIFdyaXRlIGRwdHIgZGF0YSAqLwotewotCXdyaXRlbChkYXRhLCBpcGNkZXYuaXBjX2Jhc2UgKyAweDBDKTsKLX0KLQotLyoKLSAqIElQQyBTb3VyY2UgUG9pbnRlciAoV3JpdGUgT25seSk6Ci0gKiBVc2UgY29udGVudCBhcyBwb2ludGVyIGZvciByZWFkIGxvY2F0aW9uCi0qLwotc3RhdGljIGlubGluZSB2b2lkIGlwY193cml0ZV9zcHRyKHUzMiBkYXRhKSAvKiBXcml0ZSBkcHRyIGRhdGEgKi8KLXsKLQl3cml0ZWwoZGF0YSwgaXBjZGV2LmlwY19iYXNlICsgMHgwOCk7Ci19Ci0KLS8qCiAgKiBTdGF0dXMgUmVnaXN0ZXIgKFJlYWQgT25seSk6CiAgKiBEcml2ZXIgd2lsbCByZWFkIHRoaXMgcmVnaXN0ZXIgdG8gZ2V0IHRoZSByZWFkeS9idXN5IHN0YXR1cyBvZiB0aGUgSVBDCiAgKiBibG9jayBhbmQgZXJyb3Igc3RhdHVzIG9mIHRoZSBJUEMgY29tbWFuZCB0aGF0IHdhcyBqdXN0IHByb2Nlc3NlZCBieSBTQ1UKQEAgLTE1NCw3ICsxMjcsNyBAQAogCXJldHVybiByZWFkYihpcGNkZXYuaXBjX2Jhc2UgKyBJUENfUkVBRF9CVUZGRVIgKyBvZmZzZXQpOwogfQogCi1zdGF0aWMgaW5saW5lIHU4IGlwY19kYXRhX3JlYWRsKHUzMiBvZmZzZXQpIC8qIFJlYWQgaXBjIHUzMiBkYXRhICovCitzdGF0aWMgaW5saW5lIHUzMiBpcGNfZGF0YV9yZWFkbCh1MzIgb2Zmc2V0KSAvKiBSZWFkIGlwYyB1MzIgZGF0YSAqLwogewogCXJldHVybiByZWFkbChpcGNkZXYuaXBjX2Jhc2UgKyBJUENfUkVBRF9CVUZGRVIgKyBvZmZzZXQpOwogfQpAQCAtMTc1LDYyICsxNDgsNzMgQEAKIAkJCXJldHVybiAtRVRJTUVET1VUOwogCQl9CiAJfQotCXJldHVybiAoc3RhdHVzID4+IDEpICYgMTsKKwlpZiAoKHN0YXR1cyA+PiAxKSAmIDEpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7CiB9CiAKIC8qIFJlYWQvV3JpdGUgcG93ZXIgY29udHJvbChQTUlDIGluIExhbmd3ZWxsLCBNU0lDIGluIFBlbldlbGwpIHJlZ2lzdGVycyAqLwogc3RhdGljIGludCBwd3JfcmVnX3Jkd3IodTE2ICphZGRyLCB1OCAqZGF0YSwgdTMyIGNvdW50LCB1MzIgb3AsIHUzMiBpZCkKIHsKLQlpbnQgbmM7CisJaW50IGksIG5jLCBieXRlcywgZDsKIAl1MzIgb2Zmc2V0ID0gMDsKIAl1MzIgZXJyID0gMDsKLQl1OCBjYnVmW0lQQ19XV0JVRl9TSVpFXSA9IHsgJ1wwJyB9OworCXU4IGNidWZbSVBDX1dXQlVGX1NJWkVdID0geyB9OwogCXUzMiAqd2J1ZiA9ICh1MzIgKikmY2J1ZjsKIAogCW11dGV4X2xvY2soJmlwY2xvY2spOworCisJbWVtc2V0KGNidWYsIDAsIHNpemVvZihjYnVmKSk7CisKIAlpZiAoaXBjZGV2LnBkZXYgPT0gTlVMTCkgewogCQltdXRleF91bmxvY2soJmlwY2xvY2spOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpZiAocGxhdGZvcm0gPT0gMSkgewotCQkvKiBFbnRyeSBpcyA0IGJ5dGVzIGZvciByZWFkL3dyaXRlLCA1IGJ5dGVzIGZvciByZWFkIG1vZGlmeSAqLwotCQlmb3IgKG5jID0gMDsgbmMgPCBjb3VudDsgbmMrKykgeworCWlmIChwbGF0Zm9ybSAhPSBNUlNUX0NQVV9DSElQX1BFTldFTEwpIHsKKwkJYnl0ZXMgPSAwOworCQlkID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJCWNidWZbYnl0ZXMrK10gPSBhZGRyW2ldOworCQkJY2J1ZltieXRlcysrXSA9IGFkZHJbaV0gPj4gODsKKwkJCWlmIChpZCAhPSBJUENfQ01EX1BDTlRSTF9SKQorCQkJCWNidWZbYnl0ZXMrK10gPSBkYXRhW2QrK107CisJCQlpZiAoaWQgPT0gSVBDX0NNRF9QQ05UUkxfTSkKKwkJCQljYnVmW2J5dGVzKytdID0gZGF0YVtkKytdOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBieXRlczsgaSArPSA0KQorCQkJaXBjX2RhdGFfd3JpdGVsKHdidWZbaS80XSwgaSk7CisJCWlwY19jb21tYW5kKGJ5dGVzIDw8IDE2IHwgIGlkIDw8IDEyIHwgMCA8PCA4IHwgb3ApOworCX0gZWxzZSB7CisJCWZvciAobmMgPSAwOyBuYyA8IGNvdW50OyBuYysrLCBvZmZzZXQgKz0gMikgewogCQkJY2J1ZltvZmZzZXRdID0gYWRkcltuY107CiAJCQljYnVmW29mZnNldCArIDFdID0gYWRkcltuY10gPj4gODsKLQkJCWlmIChpZCAhPSBJUENfQ01EX1BDTlRSTF9SKQotCQkJCWNidWZbb2Zmc2V0ICsgMl0gPSBkYXRhW25jXTsKLQkJCWlmIChpZCA9PSBJUENfQ01EX1BDTlRSTF9NKSB7Ci0JCQkJY2J1ZltvZmZzZXQgKyAzXSA9IGRhdGFbbmMgKyAxXTsKLQkJCQlvZmZzZXQgKz0gMTsKLQkJCX0KLQkJCW9mZnNldCArPSAzOwogCQl9Ci0JCWZvciAobmMgPSAwLCBvZmZzZXQgPSAwOyBuYyA8IGNvdW50OyBuYysrLCBvZmZzZXQgKz0gNCkKLQkJCWlwY19kYXRhX3dyaXRlbCh3YnVmW25jXSwgb2Zmc2V0KTsgLyogV3JpdGUgd2J1ZmYgKi8KIAotCX0gZWxzZSB7Ci0JCWZvciAobmMgPSAwLCBvZmZzZXQgPSAwOyBuYyA8IGNvdW50OyBuYysrLCBvZmZzZXQgKz0gMikKLQkJCWlwY19kYXRhX3dyaXRlbChhZGRyW25jXSwgb2Zmc2V0KTsgLyogV3JpdGUgYWRkcmVzc2VzICovCi0JCWlmIChpZCAhPSBJUENfQ01EX1BDTlRSTF9SKSB7Ci0JCQlmb3IgKG5jID0gMDsgbmMgPCBjb3VudDsgbmMrKywgb2Zmc2V0KyspCi0JCQkJaXBjX2RhdGFfd3JpdGVsKGRhdGFbbmNdLCBvZmZzZXQpOyAvKiBXcml0ZSBkYXRhICovCi0JCQlpZiAoaWQgPT0gSVBDX0NNRF9QQ05UUkxfTSkKLQkJCQlpcGNfZGF0YV93cml0ZWwoZGF0YVtuYyArIDFdLCBvZmZzZXQpOyAvKiBNYXNrIHZhbHVlKi8KKwkJaWYgKGlkID09IElQQ19DTURfUENOVFJMX1IpIHsKKwkJCWZvciAobmMgPSAwLCBvZmZzZXQgPSAwOyBuYyA8IGNvdW50OyBuYysrLCBvZmZzZXQgKz0gNCkKKwkJCQlpcGNfZGF0YV93cml0ZWwod2J1ZltuY10sIG9mZnNldCk7CisJCQlpcGNfY29tbWFuZCgoY291bnQqMikgPDwgMTYgfCAgaWQgPDwgMTIgfCAwIDw8IDggfCBvcCk7CisJCX0gZWxzZSBpZiAoaWQgPT0gSVBDX0NNRF9QQ05UUkxfVykgeworCQkJZm9yIChuYyA9IDA7IG5jIDwgY291bnQ7IG5jKyssIG9mZnNldCArPSAxKQorCQkJCWNidWZbb2Zmc2V0XSA9IGRhdGFbbmNdOworCQkJZm9yIChuYyA9IDAsIG9mZnNldCA9IDA7IG5jIDwgY291bnQ7IG5jKyssIG9mZnNldCArPSA0KQorCQkJCWlwY19kYXRhX3dyaXRlbCh3YnVmW25jXSwgb2Zmc2V0KTsKKwkJCWlwY19jb21tYW5kKChjb3VudCozKSA8PCAxNiB8ICBpZCA8PCAxMiB8IDAgPDwgOCB8IG9wKTsKKwkJfSBlbHNlIGlmIChpZCA9PSBJUENfQ01EX1BDTlRSTF9NKSB7CisJCQljYnVmW29mZnNldF0gPSBkYXRhWzBdOworCQkJY2J1ZltvZmZzZXQgKyAxXSA9IGRhdGFbMV07CisJCQlpcGNfZGF0YV93cml0ZWwod2J1ZlswXSwgMCk7IC8qIFdyaXRlIHdidWZmICovCisJCQlpcGNfY29tbWFuZCg0IDw8IDE2IHwgIGlkIDw8IDEyIHwgMCA8PCA4IHwgb3ApOwogCQl9CiAJfQogCi0JaWYgKGlkICE9IElQQ19DTURfUENOVFJMX00pCi0JCWlwY19jb21tYW5kKChjb3VudCAqIDMpIDw8IDE2IHwgIGlkIDw8IDEyIHwgMCA8PCA4IHwgb3ApOwotCWVsc2UKLQkJaXBjX2NvbW1hbmQoKGNvdW50ICogNCkgPDwgMTYgfCAgaWQgPDwgMTIgfCAwIDw8IDggfCBvcCk7Ci0KIAllcnIgPSBidXN5X2xvb3AoKTsKLQogCWlmIChpZCA9PSBJUENfQ01EX1BDTlRSTF9SKSB7IC8qIFJlYWQgcmJ1ZiAqLwogCQkvKiBXb3JrYXJvdW5kOiB2YWx1ZXMgYXJlIHJlYWQgYXMgMCB3aXRob3V0IG1lbWNweV9mcm9taW8gKi8KLQkJbWVtY3B5X2Zyb21pbyhjYnVmLCBpcGNkZXYuaXBjX2Jhc2UgKyBJUENfUkVBRF9CVUZGRVIsIDE2KTsKLQkJaWYgKHBsYXRmb3JtID09IDEpIHsKKwkJbWVtY3B5X2Zyb21pbyhjYnVmLCBpcGNkZXYuaXBjX2Jhc2UgKyAweDkwLCAxNik7CisJCWlmIChwbGF0Zm9ybSAhPSBNUlNUX0NQVV9DSElQX1BFTldFTEwpIHsKIAkJCWZvciAobmMgPSAwLCBvZmZzZXQgPSAyOyBuYyA8IGNvdW50OyBuYysrLCBvZmZzZXQgKz0gMykKIAkJCQlkYXRhW25jXSA9IGlwY19kYXRhX3JlYWRiKG9mZnNldCk7CiAJCX0gZWxzZSB7CkBAIC00MDUsNzAgKzM4OSw2IEBACiBFWFBPUlRfU1lNQk9MKGludGVsX3NjdV9pcGNfdXBkYXRlX3JlZ2lzdGVyKTsKIAogLyoqCi0gKglpbnRlbF9zY3VfaXBjX3JlZ2lzdGVyX3JlYWQJLQkzMmJpdCBpbmRpcmVjdCByZWFkCi0gKglAYWRkcjogcmVnaXN0ZXIgYWRkcmVzcwotICoJQHZhbHVlOiAzMmJpdCB2YWx1ZSByZXR1cm4KLSAqCi0gKglQZXJmb3JtcyBJQSAzMiBiaXQgaW5kaXJlY3QgcmVhZCwgcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGFuCi0gKgllcnJvciBjb2RlLgotICoKLSAqCUNhbiBiZSB1c2VkIHdoZW4gU0NDQihTeXN0ZW0gQ29udHJvbGxlciBDb25maWd1cmF0aW9uIEJsb2NrKSByZWdpc3RlcgotICoJSFJJTShIb25vciBSZXN0cmljdGVkIElQQyBNZXNzYWdlcykgaXMgc2V0IChiaXQgMjMpCi0gKgotICoJVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuIExvY2tpbmcgZm9yIFNDVSBhY2Nlc3NlcyBpcyBoYW5kbGVkIGZvcgotICoJdGhlIGNhbGxlci4KLSAqLwotaW50IGludGVsX3NjdV9pcGNfcmVnaXN0ZXJfcmVhZCh1MzIgYWRkciwgdTMyICp2YWx1ZSkKLXsKLQl1MzIgZXJyID0gMDsKLQotCW11dGV4X2xvY2soJmlwY2xvY2spOwotCWlmIChpcGNkZXYucGRldiA9PSBOVUxMKSB7Ci0JCW11dGV4X3VubG9jaygmaXBjbG9jayk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlpcGNfd3JpdGVfc3B0cihhZGRyKTsKLQlpcGNfY29tbWFuZCg0IDw8IDE2IHwgSVBDX0NNRF9JTkRJUkVDVF9SRCk7Ci0JZXJyID0gYnVzeV9sb29wKCk7Ci0JKnZhbHVlID0gaXBjX2RhdGFfcmVhZGwoMCk7Ci0JbXV0ZXhfdW5sb2NrKCZpcGNsb2NrKTsKLQlyZXR1cm4gZXJyOwotfQotRVhQT1JUX1NZTUJPTChpbnRlbF9zY3VfaXBjX3JlZ2lzdGVyX3JlYWQpOwotCi0vKioKLSAqCWludGVsX3NjdV9pcGNfcmVnaXN0ZXJfd3JpdGUJLQkzMmJpdCBpbmRpcmVjdCB3cml0ZQotICoJQGFkZHI6IHJlZ2lzdGVyIGFkZHJlc3MKLSAqCUB2YWx1ZTogMzJiaXQgdmFsdWUgdG8gd3JpdGUKLSAqCi0gKglQZXJmb3JtcyBJQSAzMiBiaXQgaW5kaXJlY3Qgd3JpdGUsIHJldHVybnMgMCBvbiBzdWNjZXNzLCBvciBhbgotICoJZXJyb3IgY29kZS4KLSAqCi0gKglDYW4gYmUgdXNlZCB3aGVuIFNDQ0IoU3lzdGVtIENvbnRyb2xsZXIgQ29uZmlndXJhdGlvbiBCbG9jaykgcmVnaXN0ZXIKLSAqCUhSSU0oSG9ub3IgUmVzdHJpY3RlZCBJUEMgTWVzc2FnZXMpIGlzIHNldCAoYml0IDIzKQotICoKLSAqCVRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwLiBMb2NraW5nIGZvciBTQ1UgYWNjZXNzZXMgaXMgaGFuZGxlZCBmb3IKLSAqCXRoZSBjYWxsZXIuCi0gKi8KLWludCBpbnRlbF9zY3VfaXBjX3JlZ2lzdGVyX3dyaXRlKHUzMiBhZGRyLCB1MzIgdmFsdWUpCi17Ci0JdTMyIGVyciA9IDA7Ci0KLQltdXRleF9sb2NrKCZpcGNsb2NrKTsKLQlpZiAoaXBjZGV2LnBkZXYgPT0gTlVMTCkgewotCQltdXRleF91bmxvY2soJmlwY2xvY2spOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JaXBjX3dyaXRlX2RwdHIoYWRkcik7Ci0JaXBjX2RhdGFfd3JpdGVsKHZhbHVlLCAwKTsKLQlpcGNfY29tbWFuZCg0IDw8IDE2IHwgSVBDX0NNRF9JTkRJUkVDVF9XUik7Ci0JZXJyID0gYnVzeV9sb29wKCk7Ci0JbXV0ZXhfdW5sb2NrKCZpcGNsb2NrKTsKLQlyZXR1cm4gZXJyOwotfQotRVhQT1JUX1NZTUJPTChpbnRlbF9zY3VfaXBjX3JlZ2lzdGVyX3dyaXRlKTsKLQotLyoqCiAgKglpbnRlbF9zY3VfaXBjX3NpbXBsZV9jb21tYW5kCS0Jc2VuZCBhIHNpbXBsZSBjb21tYW5kCiAgKglAY21kOiBjb21tYW5kCiAgKglAc3ViOiBzdWIgdHlwZQpAQCAtNDg5LDcgKzQwOSw3IEBACiAJCW11dGV4X3VubG9jaygmaXBjbG9jayk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQlpcGNfY29tbWFuZChjbWQgPDwgMTIgfCBzdWIpOworCWlwY19jb21tYW5kKHN1YiA8PCAxMiB8IGNtZCk7CiAJZXJyID0gYnVzeV9sb29wKCk7CiAJbXV0ZXhfdW5sb2NrKCZpcGNsb2NrKTsKIAlyZXR1cm4gZXJyOwpAQCAtNTAxLDkgKzQyMSw5IEBACiAgKglAY21kOiBjb21tYW5kCiAgKglAc3ViOiBzdWIgdHlwZQogICoJQGluOiBpbnB1dCBkYXRhCi0gKglAaW5sZW46IGlucHV0IGxlbmd0aAorICoJQGlubGVuOiBpbnB1dCBsZW5ndGggaW4gZHdvcmRzCiAgKglAb3V0OiBvdXRwdXQgZGF0YQotICoJQG91dGxlaW46IG91dHB1dCBsZW5ndGgKKyAqCUBvdXRsZWluOiBvdXRwdXQgbGVuZ3RoIGluIGR3b3JkcwogICoKICAqCUlzc3VlIGEgY29tbWFuZCB0byB0aGUgU0NVIHdoaWNoIGludm9sdmVzIGRhdGEgdHJhbnNmZXJzLiBEbyB0aGUKICAqCWRhdGEgY29waWVzIHVuZGVyIHRoZSBsb2NrIGJ1dCBsZWF2ZSBpdCBmb3IgdGhlIGNhbGxlciB0byBpbnRlcnByZXQKQEAgLTUyNCw3ICs0NDQsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBpbmxlbjsgaSsrKQogCQlpcGNfZGF0YV93cml0ZWwoKmluKyssIDQgKiBpKTsKIAotCWlwY19jb21tYW5kKChjbWQgPDwgMTIpIHwgc3ViIHwgKGlubGVuIDw8IDE4KSk7CisJaXBjX2NvbW1hbmQoKGlubGVuIDw8IDE2KSB8IChzdWIgPDwgMTIpIHwgY21kKTsKIAllcnIgPSBidXN5X2xvb3AoKTsKIAogCWZvciAoaSA9IDA7IGkgPCBvdXRsZW47IGkrKykKQEAgLTU1Niw2ICs0NzYsMTAgQEAKIAl1MzIgY21kID0gMDsKIAogCW11dGV4X2xvY2soJmlwY2xvY2spOworCWlmIChpcGNkZXYucGRldiA9PSBOVUxMKSB7CisJCW11dGV4X3VubG9jaygmaXBjbG9jayk7CisJCXJldHVybiAtRU5PREVWOworCX0KIAljbWQgPSAoYWRkciA+PiAyNCkgJiAweEZGOwogCWlmIChjbWQgPT0gSVBDX0kyQ19SRUFEKSB7CiAJCXdyaXRlbChhZGRyLCBpcGNkZXYuaTJjX2Jhc2UgKyBJUENfSTJDX0NOVFJMX0FERFIpOwpAQCAtNzk5LDYgKzcyMyw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfaWRzW10gPSB7CiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgwODBlKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgwODJhKX0sCiAJeyAwLH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpX2lkcyk7CkBAIC04MTMsNiArNzM4LDkgQEAKIAogc3RhdGljIGludCBfX2luaXQgaW50ZWxfc2N1X2lwY19pbml0KHZvaWQpCiB7CisJcGxhdGZvcm0gPSBtcnN0X2lkZW50aWZ5X2NwdSgpOworCWlmIChwbGF0Zm9ybSA9PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKIAlyZXR1cm4gIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmlwY19kcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9tc2ktbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9tc2ktbGFwdG9wLmMKaW5kZXggYWZkNzYyYi4uN2U5YmI2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbXNpLWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L21zaS1sYXB0b3AuYwpAQCAtNDM0LDcgKzQzNCw3IEBACiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAibXNpLWxhcHRvcDogSWRlbnRpZmllZCBsYXB0b3AgbW9kZWwgJyVzJy5cbiIsCiAJICAgICAgIGlkLT5pZGVudCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2luaXRkYXRhIG1zaV9kbWlfdGFibGVbXSA9IHsKQEAgLTU2MiwxNSArNTYyLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcmZraWxsX29wcyByZmtpbGxfYmx1ZXRvb3RoX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmZraWxsX29wcyByZmtpbGxfYmx1ZXRvb3RoX29wcyA9IHsKIAkuc2V0X2Jsb2NrID0gcmZraWxsX2JsdWV0b290aF9zZXQKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmZraWxsX29wcyByZmtpbGxfd2xhbl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJma2lsbF9vcHMgcmZraWxsX3dsYW5fb3BzID0gewogCS5zZXRfYmxvY2sgPSByZmtpbGxfd2xhbl9zZXQKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmZraWxsX29wcyByZmtpbGxfdGhyZWVnX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmZraWxsX29wcyByZmtpbGxfdGhyZWVnX29wcyA9IHsKIAkuc2V0X2Jsb2NrID0gcmZraWxsX3RocmVlZ19zZXQKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L21zaS13bWkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L21zaS13bWkuYwppbmRleCBkMTczNjAwLi40MmE1NDY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9tc2ktd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbXNpLXdtaS5jCkBAIC01Nyw3ICs1Nyw3IEBACiB9Owogc3RhdGljIGt0aW1lX3QgbGFzdF9wcmVzc2VkW0FSUkFZX1NJWkUobXNpX3dtaV9rZXltYXApIC0gMV07CiAKLXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHQ7CitzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodDsKIAogc3RhdGljIGludCBiYWNrbGlnaHRfbWFwW10gPSB7IDB4MDAsIDB4MzMsIDB4NjYsIDB4OTksIDB4Q0MsIDB4RkYgfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvcGFuYXNvbmljLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvcGFuYXNvbmljLWxhcHRvcC5jCmluZGV4IDJmYjlhMzIuLmVjMDFjM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3BhbmFzb25pYy1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMKQEAgLTI0OCw3ICsyNDgsNyBAQAogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KHBjYy0+aGFuZGxlLCBNRVRIT0RfSEtFWV9TU0VULAogCQkJCSAgICAgICZwYXJhbXMsIE5VTEwpOwogCi0JcmV0dXJuIHN0YXR1cyA9PSBBRV9PSzsKKwlyZXR1cm4gKHN0YXR1cyA9PSBBRV9PSykgPyAwIDogLUVJTzsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgYWNwaV9wY2NfZ2V0X3NxdHkoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCkBAIC01ODYsNyArNTg2LDYgQEAKIHN0YXRpYyBpbnQgYWNwaV9wY2NfaG90a2V5X3Jlc3VtZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgcGNjX2FjcGkgKnBjYyA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKLQlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAogCWlmIChkZXZpY2UgPT0gTlVMTCB8fCBwY2MgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01OTQsOSArNTkzLDcgQEAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLCAiU3RpY2t5IG1vZGUgcmVzdG9yZTogJWRcbiIsCiAJCQkgIHBjYy0+c3RpY2t5X21vZGUpKTsKIAotCXN0YXR1cyA9IGFjcGlfcGNjX3dyaXRlX3NzZXQocGNjLCBTSU5GX1NUSUNLWV9LRVksIHBjYy0+c3RpY2t5X21vZGUpOwotCi0JcmV0dXJuIHN0YXR1cyA9PSBBRV9PSyA/IDAgOiAtRUlOVkFMOworCXJldHVybiBhY3BpX3BjY193cml0ZV9zc2V0KHBjYywgU0lORl9TVElDS1lfS0VZLCBwY2MtPnN0aWNreV9tb2RlKTsKIH0KIAogc3RhdGljIGludCBhY3BpX3BjY19ob3RrZXlfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKaW5kZXggMTM4N2M1Zi4uZTMxNTRmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCkBAIC01NjEsOCArNTYxLDcgQEAKIAlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJnNvbnlfcGZfdXNlcnMpKQogCQlyZXR1cm47CiAKLQlwbGF0Zm9ybV9kZXZpY2VfZGVsKHNvbnlfcGZfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHNvbnlfcGZfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihzb255X3BmX2RldmljZSk7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNvbnlfcGZfZHJpdmVyKTsKIH0KIApAQCAtMTE5Niw5ICsxMTk1LDEzIEBACiAJfQogCiAJZGV2aWNlX2VudW0gPSAodW5pb24gYWNwaV9vYmplY3QgKikgYnVmZmVyLnBvaW50ZXI7Ci0JaWYgKCFkZXZpY2VfZW51bSB8fCBkZXZpY2VfZW51bS0+dHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBTTjA2IHJldHVybiBvYmplY3QgMHglLjJ4XG4iLAotCQkJCWRldmljZV9lbnVtLT50eXBlKTsKKwlpZiAoIWRldmljZV9lbnVtKSB7CisJCXByX2VycigiSW52YWxpZCBTTjA2IHJldHVybiBvYmplY3RcbiIpOworCQlnb3RvIG91dF9ub19lbnVtOworCX0KKwlpZiAoZGV2aWNlX2VudW0tPnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUikgeworCQlwcl9lcnIoIkludmFsaWQgU04wNiByZXR1cm4gb2JqZWN0IHR5cGUgMHglLjJ4XG4iLAorCQkgICAgICAgZGV2aWNlX2VudW0tPnR5cGUpOwogCQlnb3RvIG91dF9ub19lbnVtOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCmluZGV4IDRiZGIxMzcuLjVkNjExOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKQEAgLTU4MzgsNzUgKzU4MzgsNiBAQAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEVDIER1bXAgc3ViZHJpdmVyCi0gKi8KLQotc3RhdGljIHU4IGVjZHVtcF9yZWdzWzI1Nl07Ci0KLXN0YXRpYyBpbnQgZWNkdW1wX3JlYWQoc3RydWN0IHNlcV9maWxlICptKQotewotCWludCBpLCBqOwotCXU4IHY7Ci0KLQlzZXFfcHJpbnRmKG0sICJFQyAgICAgICIKLQkJICAgICAgICIgKzAwICswMSArMDIgKzAzICswNCArMDUgKzA2ICswNyIKLQkJICAgICAgICIgKzA4ICswOSArMGEgKzBiICswYyArMGQgKzBlICswZlxuIik7Ci0JZm9yIChpID0gMDsgaSA8IDI1NjsgaSArPSAxNikgewotCQlzZXFfcHJpbnRmKG0sICJFQyAweCUwMng6IiwgaSk7Ci0JCWZvciAoaiA9IDA7IGogPCAxNjsgaisrKSB7Ci0JCQlpZiAoIWFjcGlfZWNfcmVhZChpICsgaiwgJnYpKQotCQkJCWJyZWFrOwotCQkJaWYgKHYgIT0gZWNkdW1wX3JlZ3NbaSArIGpdKQotCQkJCXNlcV9wcmludGYobSwgIiAqJTAyeCIsIHYpOwotCQkJZWxzZQotCQkJCXNlcV9wcmludGYobSwgIiAgJTAyeCIsIHYpOwotCQkJZWNkdW1wX3JlZ3NbaSArIGpdID0gdjsKLQkJfQotCQlzZXFfcHV0YyhtLCAnXG4nKTsKLQkJaWYgKGogIT0gMTYpCi0JCQlicmVhazsKLQl9Ci0KLQkvKiBUaGVzZSBhcmUgd2F5IHRvbyBkYW5nZXJvdXMgdG8gYWR2ZXJ0aXNlIG9wZW5seS4uLiAqLwotI2lmIDAKLQlzZXFfcHJpbnRmKG0sICJjb21tYW5kczpcdDB4PG9mZnNldD4gMHg8dmFsdWU+IgotCQkgICAgICAgIiAoPG9mZnNldD4gaXMgMDAtZmYsIDx2YWx1ZT4gaXMgMDAtZmYpXG4iKTsKLQlzZXFfcHJpbnRmKG0sICJjb21tYW5kczpcdDB4PG9mZnNldD4gPHZhbHVlPiAgIgotCQkgICAgICAgIiAoPG9mZnNldD4gaXMgMDAtZmYsIDx2YWx1ZT4gaXMgMC0yNTUpXG4iKTsKLSNlbmRpZgotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGVjZHVtcF93cml0ZShjaGFyICpidWYpCi17Ci0JY2hhciAqY21kOwotCWludCBpLCB2OwotCi0Jd2hpbGUgKChjbWQgPSBuZXh0X2NtZCgmYnVmKSkpIHsKLQkJaWYgKHNzY2FuZihjbWQsICIweCV4IDB4JXgiLCAmaSwgJnYpID09IDIpIHsKLQkJCS8qIGkgYW5kIHYgc2V0ICovCi0JCX0gZWxzZSBpZiAoc3NjYW5mKGNtZCwgIjB4JXggJXUiLCAmaSwgJnYpID09IDIpIHsKLQkJCS8qIGkgYW5kIHYgc2V0ICovCi0JCX0gZWxzZQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChpID49IDAgJiYgaSA8IDI1NiAmJiB2ID49IDAgJiYgdiA8IDI1NikgewotCQkJaWYgKCFhY3BpX2VjX3dyaXRlKGksIHYpKQotCQkJCXJldHVybiAtRUlPOwotCQl9IGVsc2UKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGlibV9zdHJ1Y3QgZWNkdW1wX2RyaXZlcl9kYXRhID0gewotCS5uYW1lID0gImVjZHVtcCIsCi0JLnJlYWQgPSBlY2R1bXBfcmVhZCwKLQkud3JpdGUgPSBlY2R1bXBfd3JpdGUsCi0JLmZsYWdzLmV4cGVyaW1lbnRhbCA9IDEsCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogQmFja2xpZ2h0L2JyaWdodG5lc3Mgc3ViZHJpdmVyCiAgKi8KIApAQCAtODg4Myw5ICs4ODE0LDYgQEAKIAkJLmRhdGEgPSAmdGhlcm1hbF9kcml2ZXJfZGF0YSwKIAl9LAogCXsKLQkJLmRhdGEgPSAmZWNkdW1wX2RyaXZlcl9kYXRhLAotCX0sCi0JewogCQkuaW5pdCA9IGJyaWdodG5lc3NfaW5pdCwKIAkJLmRhdGEgPSAmYnJpZ2h0bmVzc19kcml2ZXJfZGF0YSwKIAl9LApAQCAtODk5Myw3ICs4OTIxLDYgQEAKIFRQQUNQSV9QQVJBTShjbW9zKTsKIFRQQUNQSV9QQVJBTShsZWQpOwogVFBBQ1BJX1BBUkFNKGJlZXApOwotVFBBQ1BJX1BBUkFNKGVjZHVtcCk7CiBUUEFDUElfUEFSQU0oYnJpZ2h0bmVzcyk7CiBUUEFDUElfUEFSQU0odm9sdW1lKTsKIFRQQUNQSV9QQVJBTShmYW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9zaGliYV9hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYwppbmRleCAzN2FhMTQ3Li43ZDY3YTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYwpAQCAtNCw2ICs0LDcgQEAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQgSm9obiBCZWxtb250ZQogICogIENvcHlyaWdodCAoQykgMjAwOCBQaGlsaXAgTGFuZ2RhbGUKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgUGllcnJlIER1Y3JvcXVldAogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC00Nyw2ICs0OCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcmZraWxsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTEyOSw2ICsxMzEsOCBAQAogCiBzdGF0aWMgc3RydWN0IGtleV9lbnRyeSB0b3NoaWJhX2FjcGlfa2V5bWFwW10gID0gewogCXtLRV9LRVksIDB4MTAxLCBLRVlfTVVURX0sCisJe0tFX0tFWSwgMHgxMDIsIEtFWV9aT09NT1VUfSwKKwl7S0VfS0VZLCAweDEwMywgS0VZX1pPT01JTn0sCiAJe0tFX0tFWSwgMHgxM2IsIEtFWV9DT0ZGRUV9LAogCXtLRV9LRVksIDB4MTNjLCBLRVlfQkFUVEVSWX0sCiAJe0tFX0tFWSwgMHgxM2QsIEtFWV9TTEVFUH0sCkBAIC0yODUsNiArMjg5LDcgQEAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwX2RldjsKIAlzdHJ1Y3QgcmZraWxsICpidF9yZms7CiAJc3RydWN0IGlucHV0X2RldiAqaG90a2V5X2RldjsKKwlpbnQgaWxsdW1pbmF0aW9uX2luc3RhbGxlZDsKIAlhY3BpX2hhbmRsZSBoYW5kbGU7CiAKIAljb25zdCBjaGFyICpidF9uYW1lOwpAQCAtMjkyLDYgKzI5NywxMTAgQEAKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CiB9OwogCisvKiBJbGx1bWluYXRpb24gc3VwcG9ydCAqLworc3RhdGljIGludCB0b3NoaWJhX2lsbHVtaW5hdGlvbl9hdmFpbGFibGUodm9pZCkKK3sKKwl1MzIgaW5bSENJX1dPUkRTXSA9IHsgMCwgMCwgMCwgMCwgMCwgMCB9OworCXUzMiBvdXRbSENJX1dPUkRTXTsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlpblswXSA9IDB4ZjEwMDsKKwlzdGF0dXMgPSBoY2lfcmF3KGluLCBvdXQpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlwcmludGsoTVlfSU5GTyAiSWxsdW1pbmF0aW9uIGRldmljZSBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCWluWzBdID0gMHhmNDAwOworCXN0YXR1cyA9IGhjaV9yYXcoaW4sIG91dCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHRvc2hpYmFfaWxsdW1pbmF0aW9uX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2LAorCQkJCSAgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQoreworCXUzMiBpbltIQ0lfV09SRFNdID0geyAwLCAwLCAwLCAwLCAwLCAwIH07CisJdTMyIG91dFtIQ0lfV09SRFNdOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCS8qIEZpcnN0IHJlcXVlc3QgOiBpbml0aWFsaXplIGNvbW11bmljYXRpb24uICovCisJaW5bMF0gPSAweGYxMDA7CisJc3RhdHVzID0gaGNpX3Jhdyhpbiwgb3V0KTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcHJpbnRrKE1ZX0lORk8gIklsbHVtaW5hdGlvbiBkZXZpY2Ugbm90IGF2YWlsYWJsZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoYnJpZ2h0bmVzcykgeworCQkvKiBTd2l0Y2ggdGhlIGlsbHVtaW5hdGlvbiBvbiAqLworCQlpblswXSA9IDB4ZjQwMDsKKwkJaW5bMV0gPSAweDE0ZTsKKwkJaW5bMl0gPSAxOworCQlzdGF0dXMgPSBoY2lfcmF3KGluLCBvdXQpOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCXByaW50ayhNWV9JTkZPICJBQ1BJIGNhbGwgZm9yIGlsbHVtaW5hdGlvbiBmYWlsZWQuXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFN3aXRjaCB0aGUgaWxsdW1pbmF0aW9uIG9mZiAqLworCQlpblswXSA9IDB4ZjQwMDsKKwkJaW5bMV0gPSAweDE0ZTsKKwkJaW5bMl0gPSAwOworCQlzdGF0dXMgPSBoY2lfcmF3KGluLCBvdXQpOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCXByaW50ayhNWV9JTkZPICJBQ1BJIGNhbGwgZm9yIGlsbHVtaW5hdGlvbiBmYWlsZWQuXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIExhc3QgcmVxdWVzdCA6IGNsb3NlIGNvbW11bmljYXRpb24uICovCisJaW5bMF0gPSAweGYyMDA7CisJaW5bMV0gPSAwOworCWluWzJdID0gMDsKKwloY2lfcmF3KGluLCBvdXQpOworfQorCitzdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyB0b3NoaWJhX2lsbHVtaW5hdGlvbl9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqY2RldikKK3sKKwl1MzIgaW5bSENJX1dPUkRTXSA9IHsgMCwgMCwgMCwgMCwgMCwgMCB9OworCXUzMiBvdXRbSENJX1dPUkRTXTsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJZW51bSBsZWRfYnJpZ2h0bmVzcyByZXN1bHQ7CisKKwkvKsKgRmlyc3QgcmVxdWVzdCA6IGluaXRpYWxpemUgY29tbXVuaWNhdGlvbi4gKi8KKwlpblswXSA9IDB4ZjEwMDsKKwlzdGF0dXMgPSBoY2lfcmF3KGluLCBvdXQpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlwcmludGsoTVlfSU5GTyAiSWxsdW1pbmF0aW9uIGRldmljZSBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIExFRF9PRkY7CisJfQorCisJLyogQ2hlY2sgdGhlIGlsbHVtaW5hdGlvbiAqLworCWluWzBdID0gMHhmMzAwOworCWluWzFdID0gMHgxNGU7CisJc3RhdHVzID0gaGNpX3Jhdyhpbiwgb3V0KTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcHJpbnRrKE1ZX0lORk8gIkFDUEkgY2FsbCBmb3IgaWxsdW1pbmF0aW9uIGZhaWxlZC5cbiIpOworCQlyZXR1cm4gTEVEX09GRjsKKwl9CisKKwlyZXN1bHQgPSBvdXRbMl0gPyBMRURfRlVMTCA6IExFRF9PRkY7CisKKwkvKiBMYXN0IHJlcXVlc3QgOiBjbG9zZSBjb21tdW5pY2F0aW9uLiAqLworCWluWzBdID0gMHhmMjAwOworCWluWzFdID0gMDsKKwlpblsyXSA9IDA7CisJaGNpX3Jhdyhpbiwgb3V0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGVkX2NsYXNzZGV2IHRvc2hpYmFfbGVkID0geworCS5uYW1lICAgICAgICAgICA9ICJ0b3NoaWJhOjppbGx1bWluYXRpb24iLAorCS5tYXhfYnJpZ2h0bmVzcyA9IDEsCisJLmJyaWdodG5lc3Nfc2V0ID0gdG9zaGliYV9pbGx1bWluYXRpb25fc2V0LAorCS5icmlnaHRuZXNzX2dldCA9IHRvc2hpYmFfaWxsdW1pbmF0aW9uX2dldCwKK307CisKIHN0YXRpYyBzdHJ1Y3QgdG9zaGliYV9hY3BpX2RldiB0b3NoaWJhX2FjcGkgPSB7CiAJLmJ0X25hbWUgPSAiVG9zaGliYSBCbHVldG9vdGgiLAogfTsKQEAgLTcyMCwyNSArODI5LDIyIEBACiAKICNkZWZpbmUgUFJPQ19UT1NISUJBCQkidG9zaGliYSIKIAotc3RhdGljIGFjcGlfc3RhdHVzIF9faW5pdCBhZGRfZGV2aWNlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgY3JlYXRlX3Rvc2hpYmFfcHJvY19lbnRyaWVzKHZvaWQpCiB7CiAJcHJvY19jcmVhdGUoImxjZCIsIFNfSVJVR08gfCBTX0lXVVNSLCB0b3NoaWJhX3Byb2NfZGlyLCAmbGNkX3Byb2NfZm9wcyk7CiAJcHJvY19jcmVhdGUoInZpZGVvIiwgU19JUlVHTyB8IFNfSVdVU1IsIHRvc2hpYmFfcHJvY19kaXIsICZ2aWRlb19wcm9jX2ZvcHMpOwogCXByb2NfY3JlYXRlKCJmYW4iLCBTX0lSVUdPIHwgU19JV1VTUiwgdG9zaGliYV9wcm9jX2RpciwgJmZhbl9wcm9jX2ZvcHMpOwogCXByb2NfY3JlYXRlKCJrZXlzIiwgU19JUlVHTyB8IFNfSVdVU1IsIHRvc2hpYmFfcHJvY19kaXIsICZrZXlzX3Byb2NfZm9wcyk7CiAJcHJvY19jcmVhdGUoInZlcnNpb24iLCBTX0lSVUdPLCB0b3NoaWJhX3Byb2NfZGlyLCAmdmVyc2lvbl9wcm9jX2ZvcHMpOwotCi0JcmV0dXJuIEFFX09LOwogfQogCi1zdGF0aWMgYWNwaV9zdGF0dXMgcmVtb3ZlX2RldmljZSh2b2lkKQorc3RhdGljIHZvaWQgcmVtb3ZlX3Rvc2hpYmFfcHJvY19lbnRyaWVzKHZvaWQpCiB7CiAJcmVtb3ZlX3Byb2NfZW50cnkoImxjZCIsIHRvc2hpYmFfcHJvY19kaXIpOwogCXJlbW92ZV9wcm9jX2VudHJ5KCJ2aWRlbyIsIHRvc2hpYmFfcHJvY19kaXIpOwogCXJlbW92ZV9wcm9jX2VudHJ5KCJmYW4iLCB0b3NoaWJhX3Byb2NfZGlyKTsKIAlyZW1vdmVfcHJvY19lbnRyeSgia2V5cyIsIHRvc2hpYmFfcHJvY19kaXIpOwogCXJlbW92ZV9wcm9jX2VudHJ5KCJ2ZXJzaW9uIiwgdG9zaGliYV9wcm9jX2Rpcik7Ci0JcmV0dXJuIEFFX09LOwogfQogCiBzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgdG9zaGliYV9iYWNrbGlnaHRfZGF0YSA9IHsKQEAgLTkwNiw3ICsxMDEyLDcgQEAKIAlpZiAodG9zaGliYV9iYWNrbGlnaHRfZGV2aWNlKQogCQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIodG9zaGliYV9iYWNrbGlnaHRfZGV2aWNlKTsKIAotCXJlbW92ZV9kZXZpY2UoKTsKKwlyZW1vdmVfdG9zaGliYV9wcm9jX2VudHJpZXMoKTsKIAogCWlmICh0b3NoaWJhX3Byb2NfZGlyKQogCQlyZW1vdmVfcHJvY19lbnRyeShQUk9DX1RPU0hJQkEsIGFjcGlfcm9vdF9kaXIpOwpAQCAtOTE0LDYgKzEwMjAsOSBAQAogCWFjcGlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKHRvc2hpYmFfYWNwaS5oYW5kbGUsIEFDUElfREVWSUNFX05PVElGWSwKIAkJCQkgICB0b3NoaWJhX2FjcGlfbm90aWZ5KTsKIAorCWlmICh0b3NoaWJhX2FjcGkuaWxsdW1pbmF0aW9uX2luc3RhbGxlZCkKKwkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJnRvc2hpYmFfbGVkKTsKKwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHRvc2hpYmFfYWNwaS5wX2Rldik7CiAKIAlyZXR1cm47CkBAIC05MjEsNyArMTAzMCw2IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHRvc2hpYmFfYWNwaV9pbml0KHZvaWQpCiB7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJdTMyIGhjaV9yZXN1bHQ7CiAJYm9vbCBidF9wcmVzZW50OwogCWludCByZXQgPSAwOwpAQCAtOTY5LDExICsxMDc3LDcgQEAKIAkJdG9zaGliYV9hY3BpX2V4aXQoKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfSBlbHNlIHsKLQkJc3RhdHVzID0gYWRkX2RldmljZSgpOwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCXRvc2hpYmFfYWNwaV9leGl0KCk7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQorCQljcmVhdGVfdG9zaGliYV9wcm9jX2VudHJpZXMoKTsKIAl9CiAKIAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IEhDSV9MQ0RfQlJJR0hUTkVTU19MRVZFTFMgLSAxOwpAQCAtMTAxMyw2ICsxMTE3LDEzIEBACiAJCX0KIAl9CiAKKwl0b3NoaWJhX2FjcGkuaWxsdW1pbmF0aW9uX2luc3RhbGxlZCA9IDA7CisJaWYgKHRvc2hpYmFfaWxsdW1pbmF0aW9uX2F2YWlsYWJsZSgpKSB7CisJCWlmICghbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKCYodG9zaGliYV9hY3BpLnBfZGV2LT5kZXYpLAorCQkJCQkgICAmdG9zaGliYV9sZWQpKQorCQkJdG9zaGliYV9hY3BpLmlsbHVtaW5hdGlvbl9pbnN0YWxsZWQgPSAxOworCX0KKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni93bWkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3dtaS5jCmluZGV4IGU0ZWFhMTQuLmIyOTc4YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3dtaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3dtaS5jCkBAIC01MTgsOCArNTE4LDEzIEBACiB7CiAJc3RydWN0IGFjcGlfYnVmZmVyIHJlc3BvbnNlID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OwogCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CisJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0Jd21pX2dldF9ldmVudF9kYXRhKHZhbHVlLCAmcmVzcG9uc2UpOworCXN0YXR1cyA9IHdtaV9nZXRfZXZlbnRfZGF0YSh2YWx1ZSwgJnJlc3BvbnNlKTsKKwlpZiAoc3RhdHVzICE9IEFFX09LKSB7CisJCXByaW50ayhLRVJOX0lORk8gIndtaTogYmFkIGV2ZW50IHN0YXR1cyAweCV4XG4iLCBzdGF0dXMpOworCQlyZXR1cm47CisJfQogCiAJb2JqID0gKHVuaW9uIGFjcGlfb2JqZWN0ICopcmVzcG9uc2UucG9pbnRlcjsKIApAQCAtNTQzLDYgKzU0OCw3IEBACiAJZGVmYXVsdDoKIAkJcHJpbnRrKCJvYmplY3QgdHlwZSAweCVYXG4iLCBvYmotPnR5cGUpOwogCX0KKwlrZnJlZShvYmopOwogfQogCiAvKioKQEAgLTgwNCw3ICs4MTAsNyBAQAogLyoKICAqIFBhcnNlIHRoZSBfV0RHIG1ldGhvZCBmb3IgdGhlIEdVSUQgZGF0YSBibG9ja3MKICAqLwotc3RhdGljIF9faW5pdCBhY3BpX3N0YXR1cyBwYXJzZV93ZGcoYWNwaV9oYW5kbGUgaGFuZGxlKQorc3RhdGljIGFjcGlfc3RhdHVzIHBhcnNlX3dkZyhhY3BpX2hhbmRsZSBoYW5kbGUpCiB7CiAJc3RydWN0IGFjcGlfYnVmZmVyIG91dCA9IHtBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTH07CiAJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKQEAgLTgyNyw4ICs4MzMsMTAgQEAKIAl0b3RhbCA9IG9iai0+YnVmZmVyLmxlbmd0aCAvIHNpemVvZihzdHJ1Y3QgZ3VpZF9ibG9jayk7CiAKIAlnYmxvY2sgPSBrbWVtZHVwKG9iai0+YnVmZmVyLnBvaW50ZXIsIG9iai0+YnVmZmVyLmxlbmd0aCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFnYmxvY2spCi0JCXJldHVybiBBRV9OT19NRU1PUlk7CisJaWYgKCFnYmxvY2spIHsKKwkJc3RhdHVzID0gQUVfTk9fTUVNT1JZOworCQlnb3RvIG91dF9mcmVlX3BvaW50ZXI7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHsKIAkJLyoKQEAgLTg0OCw4ICs4NTYsMTAgQEAKIAkJCXdtaV9kdW1wX3dkZygmZ2Jsb2NrW2ldKTsKIAogCQl3YmxvY2sgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd21pX2Jsb2NrKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghd2Jsb2NrKQotCQkJcmV0dXJuIEFFX05PX01FTU9SWTsKKwkJaWYgKCF3YmxvY2spIHsKKwkJCXN0YXR1cyA9IEFFX05PX01FTU9SWTsKKwkJCWdvdG8gb3V0X2ZyZWVfZ2Jsb2NrOworCQl9CiAKIAkJd2Jsb2NrLT5nYmxvY2sgPSBnYmxvY2tbaV07CiAJCXdibG9jay0+aGFuZGxlID0gaGFuZGxlOwpAQCAtODYwLDggKzg3MCwxMCBAQAogCQlsaXN0X2FkZF90YWlsKCZ3YmxvY2stPmxpc3QsICZ3bWlfYmxvY2tzLmxpc3QpOwogCX0KIAotCWtmcmVlKG91dC5wb2ludGVyKTsKK291dF9mcmVlX2dibG9jazoKIAlrZnJlZShnYmxvY2spOworb3V0X2ZyZWVfcG9pbnRlcjoKKwlrZnJlZShvdXQucG9pbnRlcik7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtOTQ3LDcgKzk1OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGFjcGlfd21pX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgYWNwaV93bWlfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlpbnQgcmVzdWx0ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL2NvcmUuYyBiL2RyaXZlcnMvcG5wL2NvcmUuYwppbmRleCA1ZGJhOTA5Li44OGIzY2RlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9jb3JlLmMKKysrIGIvZHJpdmVycy9wbnAvY29yZS5jCkBAIC0xNjQsNiArMTY0LDkgQEAKIAlsaXN0X2FkZF90YWlsKCZkZXYtPmdsb2JhbF9saXN0LCAmcG5wX2dsb2JhbCk7CiAJbGlzdF9hZGRfdGFpbCgmZGV2LT5wcm90b2NvbF9saXN0LCAmZGV2LT5wcm90b2NvbC0+ZGV2aWNlcyk7CiAJc3Bpbl91bmxvY2soJnBucF9sb2NrKTsKKwlpZiAoZGV2LT5wcm90b2NvbC0+Y2FuX3dha2V1cCkKKwkJZGV2aWNlX3NldF93YWtldXBfY2FwYWJsZSgmZGV2LT5kZXYsCisJCQkJZGV2LT5wcm90b2NvbC0+Y2FuX3dha2V1cChkZXYpKTsKIAlyZXR1cm4gZGV2aWNlX3JlZ2lzdGVyKCZkZXYtPmRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL3BucGFjcGkvY29yZS5jIGIvZHJpdmVycy9wbnAvcG5wYWNwaS9jb3JlLmMKaW5kZXggZjdmZjYyOC4uZGM0ZTMyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvcG5wYWNwaS9jb3JlLmMKKysrIGIvZHJpdmVycy9wbnAvcG5wYWNwaS9jb3JlLmMKQEAgLTEyMiwxNyArMTIyLDM3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfQUNQSV9TTEVFUAorc3RhdGljIGJvb2wgcG5wYWNwaV9jYW5fd2FrZXVwKHN0cnVjdCBwbnBfZGV2ICpkZXYpCit7CisJc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX2RldiA9IGRldi0+ZGF0YTsKKwlhY3BpX2hhbmRsZSBoYW5kbGUgPSBhY3BpX2Rldi0+aGFuZGxlOworCisJcmV0dXJuIGFjcGlfYnVzX2Nhbl93YWtldXAoaGFuZGxlKTsKK30KKwogc3RhdGljIGludCBwbnBhY3BpX3N1c3BlbmQoc3RydWN0IHBucF9kZXYgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXYgPSBkZXYtPmRhdGE7CiAJYWNwaV9oYW5kbGUgaGFuZGxlID0gYWNwaV9kZXYtPmhhbmRsZTsKIAlpbnQgcG93ZXJfc3RhdGU7CiAKKwlpZiAoZGV2aWNlX2Nhbl93YWtldXAoJmRldi0+ZGV2KSkgeworCQlpbnQgcmMgPSBhY3BpX3BtX2RldmljZV9zbGVlcF93YWtlKCZkZXYtPmRldiwKKwkJCQlkZXZpY2VfbWF5X3dha2V1cCgmZGV2LT5kZXYpKTsKKworCQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CisJfQogCXBvd2VyX3N0YXRlID0gYWNwaV9wbV9kZXZpY2Vfc2xlZXBfc3RhdGUoJmRldi0+ZGV2LCBOVUxMKTsKIAlpZiAocG93ZXJfc3RhdGUgPCAwKQogCQlwb3dlcl9zdGF0ZSA9IChzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9PTikgPwogCQkJCUFDUElfU1RBVEVfRDAgOiBBQ1BJX1NUQVRFX0QzOwogCisJLyogYWNwaV9idXNfc2V0X3Bvd2VyKCkgb2Z0ZW4gZmFpbHMgKGtleWJvYXJkIHBvcnQgY2FuJ3QgYmUKKwkgKiBwb3dlcmVkLWRvd24/KSwgYW5kIGluIGFueSBjYXNlLCBvdXIgcmV0dXJuIHZhbHVlIGlzIGlnbm9yZWQKKwkgKiBieSBwbnBfYnVzX3N1c3BlbmQoKS4gIEhlbmNlIHdlIGRvbid0IHJldmVydCB0aGUgd2FrZXVwCisJICogc2V0dGluZyBpZiB0aGUgc2V0X3Bvd2VyIGZhaWxzLgorCSAqLwogCXJldHVybiBhY3BpX2J1c19zZXRfcG93ZXIoaGFuZGxlLCBwb3dlcl9zdGF0ZSk7CiB9CiAKQEAgLTE0MSw2ICsxNjEsOCBAQAogCXN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXYgPSBkZXYtPmRhdGE7CiAJYWNwaV9oYW5kbGUgaGFuZGxlID0gYWNwaV9kZXYtPmhhbmRsZTsKIAorCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmZGV2LT5kZXYpKQorCQlhY3BpX3BtX2RldmljZV9zbGVlcF93YWtlKCZkZXYtPmRldiwgZmFsc2UpOwogCXJldHVybiBhY3BpX2J1c19zZXRfcG93ZXIoaGFuZGxlLCBBQ1BJX1NUQVRFX0QwKTsKIH0KICNlbmRpZgpAQCAtMTUxLDYgKzE3Myw3IEBACiAJLnNldAkgPSBwbnBhY3BpX3NldF9yZXNvdXJjZXMsCiAJLmRpc2FibGUgPSBwbnBhY3BpX2Rpc2FibGVfcmVzb3VyY2VzLAogI2lmZGVmIENPTkZJR19BQ1BJX1NMRUVQCisJLmNhbl93YWtldXAgPSBwbnBhY3BpX2Nhbl93YWtldXAsCiAJLnN1c3BlbmQgPSBwbnBhY3BpX3N1c3BlbmQsCiAJLnJlc3VtZSA9IHBucGFjcGlfcmVzdW1lLAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL0tjb25maWcgYi9kcml2ZXJzL3Bvd2VyL0tjb25maWcKaW5kZXggOGU5YmExNy4uMWU1NTA2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9LY29uZmlnCisrKyBiL2RyaXZlcnMvcG93ZXIvS2NvbmZpZwpAQCAtMTQyLDQgKzE0MiwxNSBAQAogCWhlbHAKIAkgU2F5IFkgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBOWFAgUENGNTA2MzMgTWFpbiBCYXR0ZXJ5IENoYXJnZXIuCiAKK2NvbmZpZyBCQVRURVJZX0paNDc0MAorCXRyaXN0YXRlICJJbmdlbmljIEpaNDc0MCBiYXR0ZXJ5IgorCWRlcGVuZHMgb24gTUFDSF9KWjQ3NDAKKwlkZXBlbmRzIG9uIE1GRF9KWjQ3NDBfQURDCisJaGVscAorCSAgU2F5IFkgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBiYXR0ZXJ5IG9uIEluZ2VuaWMgSlo0NzQwIGJhc2VkCisJICBib2FyZHMuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBiZSBidWlsZCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUgd2lsbCBiZQorCSAgY2FsbGVkIGp6NDc0MC1iYXR0ZXJ5LgorCiBlbmRpZiAjIFBPV0VSX1NVUFBMWQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9NYWtlZmlsZSBiL2RyaXZlcnMvcG93ZXIvTWFrZWZpbGUKaW5kZXggMDAwNTA4MC4uY2Y5NTAwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Bvd2VyL01ha2VmaWxlCkBAIC0zNCwzICszNCw0IEBACiBvYmotJChDT05GSUdfQkFUVEVSWV9NQVgxNzA0MCkJKz0gbWF4MTcwNDBfYmF0dGVyeS5vCiBvYmotJChDT05GSUdfQkFUVEVSWV9aMikJKz0gejJfYmF0dGVyeS5vCiBvYmotJChDT05GSUdfQ0hBUkdFUl9QQ0Y1MDYzMykJKz0gcGNmNTA2MzMtY2hhcmdlci5vCitvYmotJChDT05GSUdfQkFUVEVSWV9KWjQ3NDApCSs9IGp6NDc0MC1iYXR0ZXJ5Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvZHMyNzgyX2JhdHRlcnkuYyBiL2RyaXZlcnMvcG93ZXIvZHMyNzgyX2JhdHRlcnkuYwppbmRleCBkNzYyYTBjLi44NGQzYzQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL2RzMjc4Ml9iYXR0ZXJ5LmMKKysrIGIvZHJpdmVycy9wb3dlci9kczI3ODJfYmF0dGVyeS5jCkBAIC00MywxMCArNDMsOSBAQAogc3RydWN0IGRzMjc4eF9pbmZvOwogCiBzdHJ1Y3QgZHMyNzh4X2JhdHRlcnlfb3BzIHsKLQlpbnQJKCpnZXRfY3VycmVudCkoc3RydWN0IGRzMjc4eF9pbmZvICppbmZvLCBpbnQgKmN1cnJlbnRfdUEpOwotCWludAkoKmdldF92b2x0YWdlKShzdHJ1Y3QgZHMyNzh4X2luZm8gKmluZm8sIGludCAqdm9sdGFnZV91QSk7Ci0JaW50CSgqZ2V0X2NhcGFjaXR5KShzdHJ1Y3QgZHMyNzh4X2luZm8gKmluZm8sIGludCAqY2FwYWNpdHlfdUEpOwotCisJaW50ICgqZ2V0X2JhdHRlcnlfY3VycmVudCkoc3RydWN0IGRzMjc4eF9pbmZvICppbmZvLCBpbnQgKmN1cnJlbnRfdUEpOworCWludCAoKmdldF9iYXR0ZXJ5X3ZvbHRhZ2UpKHN0cnVjdCBkczI3OHhfaW5mbyAqaW5mbywgaW50ICp2b2x0YWdlX3VBKTsKKwlpbnQgKCpnZXRfYmF0dGVyeV9jYXBhY2l0eSkoc3RydWN0IGRzMjc4eF9pbmZvICppbmZvLCBpbnQgKmNhcGFjaXR5X3VBKTsKIH07CiAKICNkZWZpbmUgdG9fZHMyNzh4X2luZm8oeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBkczI3OHhfaW5mbywgYmF0dGVyeSkKQEAgLTE2Myw3ICsxNjIsNyBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAJKmNhcGFjaXR5ID0gcmF3OwotCXJldHVybiByYXc7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZHMyNzg2X2dldF9jdXJyZW50KHN0cnVjdCBkczI3OHhfaW5mbyAqaW5mbywgaW50ICpjdXJyZW50X3VBKQpAQCAtMjEzLDExICsyMTIsMTEgQEAKIAlpbnQgY3VycmVudF91QTsKIAlpbnQgY2FwYWNpdHk7CiAKLQllcnIgPSBpbmZvLT5vcHMtPmdldF9jdXJyZW50KGluZm8sICZjdXJyZW50X3VBKTsKKwllcnIgPSBpbmZvLT5vcHMtPmdldF9iYXR0ZXJ5X2N1cnJlbnQoaW5mbywgJmN1cnJlbnRfdUEpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQllcnIgPSBpbmZvLT5vcHMtPmdldF9jYXBhY2l0eShpbmZvLCAmY2FwYWNpdHkpOworCWVyciA9IGluZm8tPm9wcy0+Z2V0X2JhdHRlcnlfY2FwYWNpdHkoaW5mbywgJmNhcGFjaXR5KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC0yNDYsMTUgKzI0NSwxNSBAQAogCQlicmVhazsKIAogCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ0FQQUNJVFk6Ci0JCXJldCA9IGluZm8tPm9wcy0+Z2V0X2NhcGFjaXR5KGluZm8sICZ2YWwtPmludHZhbCk7CisJCXJldCA9IGluZm8tPm9wcy0+Z2V0X2JhdHRlcnlfY2FwYWNpdHkoaW5mbywgJnZhbC0+aW50dmFsKTsKIAkJYnJlYWs7CiAKIAljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTk9XOgotCQlyZXQgPSBpbmZvLT5vcHMtPmdldF92b2x0YWdlKGluZm8sICZ2YWwtPmludHZhbCk7CisJCXJldCA9IGluZm8tPm9wcy0+Z2V0X2JhdHRlcnlfdm9sdGFnZShpbmZvLCAmdmFsLT5pbnR2YWwpOwogCQlicmVhazsKIAogCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ1VSUkVOVF9OT1c6Ci0JCXJldCA9IGluZm8tPm9wcy0+Z2V0X2N1cnJlbnQoaW5mbywgJnZhbC0+aW50dmFsKTsKKwkJcmV0ID0gaW5mby0+b3BzLT5nZXRfYmF0dGVyeV9jdXJyZW50KGluZm8sICZ2YWwtPmludHZhbCk7CiAJCWJyZWFrOwogCiAJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9URU1QOgpAQCAtMzA3LDE0ICszMDYsMTQgQEAKIAogc3RhdGljIHN0cnVjdCBkczI3OHhfYmF0dGVyeV9vcHMgZHMyNzh4X29wc1tdID0gewogCVtEUzI3ODJdID0gewotCQkuZ2V0X2N1cnJlbnQgID0gZHMyNzgyX2dldF9jdXJyZW50LAotCQkuZ2V0X3ZvbHRhZ2UgID0gZHMyNzgyX2dldF92b2x0YWdlLAotCQkuZ2V0X2NhcGFjaXR5ID0gZHMyNzgyX2dldF9jYXBhY2l0eSwKKwkJLmdldF9iYXR0ZXJ5X2N1cnJlbnQgID0gZHMyNzgyX2dldF9jdXJyZW50LAorCQkuZ2V0X2JhdHRlcnlfdm9sdGFnZSAgPSBkczI3ODJfZ2V0X3ZvbHRhZ2UsCisJCS5nZXRfYmF0dGVyeV9jYXBhY2l0eSA9IGRzMjc4Ml9nZXRfY2FwYWNpdHksCiAJfSwKIAlbRFMyNzg2XSA9IHsKLQkJLmdldF9jdXJyZW50ICA9IGRzMjc4Nl9nZXRfY3VycmVudCwKLQkJLmdldF92b2x0YWdlICA9IGRzMjc4Nl9nZXRfdm9sdGFnZSwKLQkJLmdldF9jYXBhY2l0eSA9IGRzMjc4Nl9nZXRfY2FwYWNpdHksCisJCS5nZXRfYmF0dGVyeV9jdXJyZW50ICA9IGRzMjc4Nl9nZXRfY3VycmVudCwKKwkJLmdldF9iYXR0ZXJ5X3ZvbHRhZ2UgID0gZHMyNzg2X2dldF92b2x0YWdlLAorCQkuZ2V0X2JhdHRlcnlfY2FwYWNpdHkgPSBkczI3ODZfZ2V0X2NhcGFjaXR5LAogCX0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvano0NzQwLWJhdHRlcnkuYyBiL2RyaXZlcnMvcG93ZXIvano0NzQwLWJhdHRlcnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGM0Yjk1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wb3dlci9qejQ3NDAtYmF0dGVyeS5jCkBAIC0wLDAgKzEsNDQ1IEBACisvKgorICogQmF0dGVyeSBtZWFzdXJlbWVudCBjb2RlIGZvciBJbmdlbmljIEpaIFNPQy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmllamluZyBaaGFuZyA8a3pqZWVmQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgTGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+CisgKgorICogYmFzZWQgb24gdG9zYV9iYXR0ZXJ5LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgorCisjaW5jbHVkZSA8bGludXgvcG93ZXIvano0NzQwLWJhdHRlcnkuaD4KKyNpbmNsdWRlIDxsaW51eC9qejQ3NDAtYWRjLmg+CisKK3N0cnVjdCBqel9iYXR0ZXJ5IHsKKwlzdHJ1Y3QganpfYmF0dGVyeV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCisJc3RydWN0IHJlc291cmNlICptZW07CisJdm9pZCBfX2lvbWVtICpiYXNlOworCisJaW50IGlycTsKKwlpbnQgY2hhcmdlX2lycTsKKworCXN0cnVjdCBtZmRfY2VsbCAqY2VsbDsKKworCWludCBzdGF0dXM7CisJbG9uZyB2b2x0YWdlOworCisJc3RydWN0IGNvbXBsZXRpb24gcmVhZF9jb21wbGV0aW9uOworCisJc3RydWN0IHBvd2VyX3N1cHBseSBiYXR0ZXJ5OworCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGp6X2JhdHRlcnkgKnBzeV90b19qel9iYXR0ZXJ5KHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHBzeSwgc3RydWN0IGp6X2JhdHRlcnksIGJhdHRlcnkpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QganpfYmF0dGVyeV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZpZCkKK3sKKwlzdHJ1Y3QganpfYmF0dGVyeSAqYmF0dGVyeSA9IGRldmlkOworCisJY29tcGxldGUoJmJhdHRlcnktPnJlYWRfY29tcGxldGlvbik7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgbG9uZyBqel9iYXR0ZXJ5X3JlYWRfdm9sdGFnZShzdHJ1Y3QganpfYmF0dGVyeSAqYmF0dGVyeSkKK3sKKwl1bnNpZ25lZCBsb25nIHQ7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJbG9uZyB2b2x0YWdlOworCisJSU5JVF9DT01QTEVUSU9OKGJhdHRlcnktPnJlYWRfY29tcGxldGlvbik7CisKKwllbmFibGVfaXJxKGJhdHRlcnktPmlycSk7CisJYmF0dGVyeS0+Y2VsbC0+ZW5hYmxlKGJhdHRlcnktPnBkZXYpOworCisJdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZiYXR0ZXJ5LT5yZWFkX2NvbXBsZXRpb24sCisJCUhaKTsKKworCWlmICh0ID4gMCkgeworCQl2YWwgPSByZWFkdyhiYXR0ZXJ5LT5iYXNlKSAmIDB4ZmZmOworCisJCWlmIChiYXR0ZXJ5LT5wZGF0YS0+aW5mby52b2x0YWdlX21heF9kZXNpZ24gPD0gMjUwMDAwMCkKKwkJCXZhbCA9ICh2YWwgKiA3ODEyNVVMKSA+PiA3VUw7CisJCWVsc2UKKwkJCXZhbCA9ICgodmFsICogOTI0Mzc1VUwpID4+IDlVTCkgKyAzMzAwMDsKKwkJdm9sdGFnZSA9IChsb25nKXZhbDsKKwl9IGVsc2UgeworCQl2b2x0YWdlID0gdCA/IHQgOiAtRVRJTUVET1VUOworCX0KKworCWJhdHRlcnktPmNlbGwtPmRpc2FibGUoYmF0dGVyeS0+cGRldik7CisJZGlzYWJsZV9pcnEoYmF0dGVyeS0+aXJxKTsKKworCXJldHVybiB2b2x0YWdlOworfQorCitzdGF0aWMgaW50IGp6X2JhdHRlcnlfZ2V0X2NhcGFjaXR5KHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSkKK3sKKwlzdHJ1Y3QganpfYmF0dGVyeSAqanpfYmF0dGVyeSA9IHBzeV90b19qel9iYXR0ZXJ5KHBzeSk7CisJc3RydWN0IHBvd2VyX3N1cHBseV9pbmZvICppbmZvID0gJmp6X2JhdHRlcnktPnBkYXRhLT5pbmZvOworCWxvbmcgdm9sdGFnZTsKKwlpbnQgcmV0OworCWludCB2b2x0YWdlX3NwYW47CisKKwl2b2x0YWdlID0ganpfYmF0dGVyeV9yZWFkX3ZvbHRhZ2UoanpfYmF0dGVyeSk7CisKKwlpZiAodm9sdGFnZSA8IDApCisJCXJldHVybiB2b2x0YWdlOworCisJdm9sdGFnZV9zcGFuID0gaW5mby0+dm9sdGFnZV9tYXhfZGVzaWduIC0gaW5mby0+dm9sdGFnZV9taW5fZGVzaWduOworCXJldCA9ICgodm9sdGFnZSAtIGluZm8tPnZvbHRhZ2VfbWluX2Rlc2lnbikgKiAxMDApIC8gdm9sdGFnZV9zcGFuOworCisJaWYgKHJldCA+IDEwMCkKKwkJcmV0ID0gMTAwOworCWVsc2UgaWYgKHJldCA8IDApCisJCXJldCA9IDA7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGp6X2JhdHRlcnlfZ2V0X3Byb3BlcnR5KHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSwKKwllbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBwc3AsIHVuaW9uIHBvd2VyX3N1cHBseV9wcm9wdmFsICp2YWwpCit7CisJc3RydWN0IGp6X2JhdHRlcnkgKmp6X2JhdHRlcnkgPSBwc3lfdG9fanpfYmF0dGVyeShwc3kpOworCXN0cnVjdCBwb3dlcl9zdXBwbHlfaW5mbyAqaW5mbyA9ICZqel9iYXR0ZXJ5LT5wZGF0YS0+aW5mbzsKKwlsb25nIHZvbHRhZ2U7CisKKwlzd2l0Y2ggKHBzcCkgeworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfU1RBVFVTOgorCQl2YWwtPmludHZhbCA9IGp6X2JhdHRlcnktPnN0YXR1czsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9URUNITk9MT0dZOgorCQl2YWwtPmludHZhbCA9IGp6X2JhdHRlcnktPnBkYXRhLT5pbmZvLnRlY2hub2xvZ3k7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfSEVBTFRIOgorCQl2b2x0YWdlID0ganpfYmF0dGVyeV9yZWFkX3ZvbHRhZ2UoanpfYmF0dGVyeSk7CisJCWlmICh2b2x0YWdlIDwgaW5mby0+dm9sdGFnZV9taW5fZGVzaWduKQorCQkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfSEVBTFRIX0RFQUQ7CisJCWVsc2UKKwkJCXZhbC0+aW50dmFsID0gUE9XRVJfU1VQUExZX0hFQUxUSF9HT09EOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NBUEFDSVRZOgorCQl2YWwtPmludHZhbCA9IGp6X2JhdHRlcnlfZ2V0X2NhcGFjaXR5KHBzeSk7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9OT1c6CisJCXZhbC0+aW50dmFsID0ganpfYmF0dGVyeV9yZWFkX3ZvbHRhZ2UoanpfYmF0dGVyeSk7CisJCWlmICh2YWwtPmludHZhbCA8IDApCisJCQlyZXR1cm4gdmFsLT5pbnR2YWw7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9NQVhfREVTSUdOOgorCQl2YWwtPmludHZhbCA9IGluZm8tPnZvbHRhZ2VfbWF4X2Rlc2lnbjsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX01JTl9ERVNJR046CisJCXZhbC0+aW50dmFsID0gaW5mby0+dm9sdGFnZV9taW5fZGVzaWduOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQ6CisJCXZhbC0+aW50dmFsID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBqel9iYXR0ZXJ5X2V4dGVybmFsX3Bvd2VyX2NoYW5nZWQoc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5KQoreworCXN0cnVjdCBqel9iYXR0ZXJ5ICpqel9iYXR0ZXJ5ID0gcHN5X3RvX2p6X2JhdHRlcnkocHN5KTsKKworCWNhbmNlbF9kZWxheWVkX3dvcmsoJmp6X2JhdHRlcnktPndvcmspOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmanpfYmF0dGVyeS0+d29yaywgMCk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBqel9iYXR0ZXJ5X2NoYXJnZV9pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QganpfYmF0dGVyeSAqanpfYmF0dGVyeSA9IGRhdGE7CisKKwljYW5jZWxfZGVsYXllZF93b3JrKCZqel9iYXR0ZXJ5LT53b3JrKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmp6X2JhdHRlcnktPndvcmssIDApOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBqel9iYXR0ZXJ5X3VwZGF0ZShzdHJ1Y3QganpfYmF0dGVyeSAqanpfYmF0dGVyeSkKK3sKKwlpbnQgc3RhdHVzOworCWxvbmcgdm9sdGFnZTsKKwlib29sIGhhc19jaGFuZ2VkID0gZmFsc2U7CisJaW50IGlzX2NoYXJnaW5nOworCisJaWYgKGdwaW9faXNfdmFsaWQoanpfYmF0dGVyeS0+cGRhdGEtPmdwaW9fY2hhcmdlKSkgeworCQlpc19jaGFyZ2luZyA9IGdwaW9fZ2V0X3ZhbHVlKGp6X2JhdHRlcnktPnBkYXRhLT5ncGlvX2NoYXJnZSk7CisJCWlzX2NoYXJnaW5nIF49IGp6X2JhdHRlcnktPnBkYXRhLT5ncGlvX2NoYXJnZV9hY3RpdmVfbG93OworCQlpZiAoaXNfY2hhcmdpbmcpCisJCQlzdGF0dXMgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0NIQVJHSU5HOworCQllbHNlCisJCQlzdGF0dXMgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX05PVF9DSEFSR0lORzsKKworCQlpZiAoc3RhdHVzICE9IGp6X2JhdHRlcnktPnN0YXR1cykgeworCQkJanpfYmF0dGVyeS0+c3RhdHVzID0gc3RhdHVzOworCQkJaGFzX2NoYW5nZWQgPSB0cnVlOworCQl9CisJfQorCisJdm9sdGFnZSA9IGp6X2JhdHRlcnlfcmVhZF92b2x0YWdlKGp6X2JhdHRlcnkpOworCWlmIChhYnModm9sdGFnZSAtIGp6X2JhdHRlcnktPnZvbHRhZ2UpIDwgNTAwMDApIHsKKwkJanpfYmF0dGVyeS0+dm9sdGFnZSA9IHZvbHRhZ2U7CisJCWhhc19jaGFuZ2VkID0gdHJ1ZTsKKwl9CisKKwlpZiAoaGFzX2NoYW5nZWQpCisJCXBvd2VyX3N1cHBseV9jaGFuZ2VkKCZqel9iYXR0ZXJ5LT5iYXR0ZXJ5KTsKK30KKworc3RhdGljIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IGp6X2JhdHRlcnlfcHJvcGVydGllc1tdID0geworCVBPV0VSX1NVUFBMWV9QUk9QX1NUQVRVUywKKwlQT1dFUl9TVVBQTFlfUFJPUF9URUNITk9MT0dZLAorCVBPV0VSX1NVUFBMWV9QUk9QX0hFQUxUSCwKKwlQT1dFUl9TVVBQTFlfUFJPUF9DQVBBQ0lUWSwKKwlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX01BWF9ERVNJR04sCisJUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9NSU5fREVTSUdOLAorCVBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQsCit9OworCitzdGF0aWMgdm9pZCBqel9iYXR0ZXJ5X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCS8qIFRvbyBzbWFsbCBpbnRlcnZhbCB3aWxsIGluY3JlYXNlIHN5c3RlbSB3b3JrbG9hZCAqLworCWNvbnN0IGludCBpbnRlcnZhbCA9IEhaICogMzA7CisJc3RydWN0IGp6X2JhdHRlcnkgKmp6X2JhdHRlcnkgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGp6X2JhdHRlcnksCisJCQkJCSAgICB3b3JrLndvcmspOworCisJanpfYmF0dGVyeV91cGRhdGUoanpfYmF0dGVyeSk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZqel9iYXR0ZXJ5LT53b3JrLCBpbnRlcnZhbCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGp6X2JhdHRlcnlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QganpfYmF0dGVyeV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wYXJlbnQtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGp6X2JhdHRlcnkgKmp6X2JhdHRlcnk7CisJc3RydWN0IHBvd2VyX3N1cHBseSAqYmF0dGVyeTsKKworCWp6X2JhdHRlcnkgPSBremFsbG9jKHNpemVvZigqanpfYmF0dGVyeSksIEdGUF9LRVJORUwpOworCWlmICghanpfYmF0dGVyeSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgZHJpdmVyIHN0cnVjdHVyZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWp6X2JhdHRlcnktPmNlbGwgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWp6X2JhdHRlcnktPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGp6X2JhdHRlcnktPmlycSA8IDApIHsKKwkJcmV0ID0ganpfYmF0dGVyeS0+aXJxOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IHBsYXRmb3JtIGlycTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJanpfYmF0dGVyeS0+bWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIWp6X2JhdHRlcnktPm1lbSkgeworCQlyZXQgPSAtRU5PRU5UOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IHBsYXRmb3JtIG1taW8gcmVzb3VyY2VcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWp6X2JhdHRlcnktPm1lbSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihqel9iYXR0ZXJ5LT5tZW0tPnN0YXJ0LAorCQkJCXJlc291cmNlX3NpemUoanpfYmF0dGVyeS0+bWVtKSwJcGRldi0+bmFtZSk7CisJaWYgKCFqel9iYXR0ZXJ5LT5tZW0pIHsKKwkJcmV0ID0gLUVCVVNZOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBtbWlvIG1lbW9yeSByZWdpb25cbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWp6X2JhdHRlcnktPmJhc2UgPSBpb3JlbWFwX25vY2FjaGUoanpfYmF0dGVyeS0+bWVtLT5zdGFydCwKKwkJCQlyZXNvdXJjZV9zaXplKGp6X2JhdHRlcnktPm1lbSkpOworCWlmICghanpfYmF0dGVyeS0+YmFzZSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBpb3JlbWFwIG1taW8gbWVtb3J5XG4iKTsKKwkJZ290byBlcnJfcmVsZWFzZV9tZW1fcmVnaW9uOworCX0KKworCWJhdHRlcnkgPSAmanpfYmF0dGVyeS0+YmF0dGVyeTsKKwliYXR0ZXJ5LT5uYW1lID0gcGRhdGEtPmluZm8ubmFtZTsKKwliYXR0ZXJ5LT50eXBlID0gUE9XRVJfU1VQUExZX1RZUEVfQkFUVEVSWTsKKwliYXR0ZXJ5LT5wcm9wZXJ0aWVzCT0ganpfYmF0dGVyeV9wcm9wZXJ0aWVzOworCWJhdHRlcnktPm51bV9wcm9wZXJ0aWVzCT0gQVJSQVlfU0laRShqel9iYXR0ZXJ5X3Byb3BlcnRpZXMpOworCWJhdHRlcnktPmdldF9wcm9wZXJ0eSA9IGp6X2JhdHRlcnlfZ2V0X3Byb3BlcnR5OworCWJhdHRlcnktPmV4dGVybmFsX3Bvd2VyX2NoYW5nZWQgPSBqel9iYXR0ZXJ5X2V4dGVybmFsX3Bvd2VyX2NoYW5nZWQ7CisJYmF0dGVyeS0+dXNlX2Zvcl9hcG0gPSAxOworCisJanpfYmF0dGVyeS0+cGRhdGEgPSBwZGF0YTsKKwlqel9iYXR0ZXJ5LT5wZGV2ID0gcGRldjsKKworCWluaXRfY29tcGxldGlvbigmanpfYmF0dGVyeS0+cmVhZF9jb21wbGV0aW9uKTsKKworCUlOSVRfREVMQVlFRF9XT1JLKCZqel9iYXR0ZXJ5LT53b3JrLCBqel9iYXR0ZXJ5X3dvcmspOworCisJcmV0ID0gcmVxdWVzdF9pcnEoanpfYmF0dGVyeS0+aXJxLCBqel9iYXR0ZXJ5X2lycV9oYW5kbGVyLCAwLCBwZGV2LT5uYW1lLAorCQkJanpfYmF0dGVyeSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2lvdW5tYXA7CisJfQorCWRpc2FibGVfaXJxKGp6X2JhdHRlcnktPmlycSk7CisKKwlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bpb19jaGFyZ2UpKSB7CisJCXJldCA9IGdwaW9fcmVxdWVzdChwZGF0YS0+Z3Bpb19jaGFyZ2UsIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2hhcmdlciBzdGF0ZSBncGlvIHJlcXVlc3QgZmFpbGVkLlxuIik7CisJCQlnb3RvIGVycl9mcmVlX2lycTsKKwkJfQorCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChwZGF0YS0+Z3Bpb19jaGFyZ2UpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjaGFyZ2VyIHN0YXRlIGdwaW8gc2V0IGRpcmVjdGlvbiBmYWlsZWQuXG4iKTsKKwkJCWdvdG8gZXJyX2ZyZWVfZ3BpbzsKKwkJfQorCisJCWp6X2JhdHRlcnktPmNoYXJnZV9pcnEgPSBncGlvX3RvX2lycShwZGF0YS0+Z3Bpb19jaGFyZ2UpOworCisJCWlmIChqel9iYXR0ZXJ5LT5jaGFyZ2VfaXJxID49IDApIHsKKwkJCXJldCA9IHJlcXVlc3RfaXJxKGp6X2JhdHRlcnktPmNoYXJnZV9pcnEsCisJCQkJICAgIGp6X2JhdHRlcnlfY2hhcmdlX2lycSwKKwkJCQkgICAgSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJCSAgICBkZXZfbmFtZSgmcGRldi0+ZGV2KSwganpfYmF0dGVyeSk7CisJCQlpZiAocmV0KSB7CisJCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgY2hhcmdlIGlycTogJWRcbiIsIHJldCk7CisJCQkJZ290byBlcnJfZnJlZV9ncGlvOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJanpfYmF0dGVyeS0+Y2hhcmdlX2lycSA9IC0xOworCX0KKworCWlmIChqel9iYXR0ZXJ5LT5wZGF0YS0+aW5mby52b2x0YWdlX21heF9kZXNpZ24gPD0gMjUwMDAwMCkKKwkJano0NzQwX2FkY19zZXRfY29uZmlnKHBkZXYtPmRldi5wYXJlbnQsIEpaX0FEQ19DT05GSUdfQkFUX01CLAorCQkJSlpfQURDX0NPTkZJR19CQVRfTUIpOworCWVsc2UKKwkJano0NzQwX2FkY19zZXRfY29uZmlnKHBkZXYtPmRldi5wYXJlbnQsIEpaX0FEQ19DT05GSUdfQkFUX01CLCAwKTsKKworCXJldCA9IHBvd2VyX3N1cHBseV9yZWdpc3RlcigmcGRldi0+ZGV2LCAmanpfYmF0dGVyeS0+YmF0dGVyeSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwb3dlciBzdXBwbHkgYmF0dGVyeSByZWdpc3RlciBmYWlsZWQuXG4iKTsKKwkJZ290byBlcnJfZnJlZV9jaGFyZ2VfaXJxOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGp6X2JhdHRlcnkpOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmanpfYmF0dGVyeS0+d29yaywgMCk7CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfY2hhcmdlX2lycToKKwlpZiAoanpfYmF0dGVyeS0+Y2hhcmdlX2lycSA+PSAwKQorCQlmcmVlX2lycShqel9iYXR0ZXJ5LT5jaGFyZ2VfaXJxLCBqel9iYXR0ZXJ5KTsKK2Vycl9mcmVlX2dwaW86CisJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPmdwaW9fY2hhcmdlKSkKKwkJZ3Bpb19mcmVlKGp6X2JhdHRlcnktPnBkYXRhLT5ncGlvX2NoYXJnZSk7CitlcnJfZnJlZV9pcnE6CisJZnJlZV9pcnEoanpfYmF0dGVyeS0+aXJxLCBqel9iYXR0ZXJ5KTsKK2Vycl9pb3VubWFwOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWlvdW5tYXAoanpfYmF0dGVyeS0+YmFzZSk7CitlcnJfcmVsZWFzZV9tZW1fcmVnaW9uOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihqel9iYXR0ZXJ5LT5tZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKGp6X2JhdHRlcnktPm1lbSkpOworZXJyX2ZyZWU6CisJa2ZyZWUoanpfYmF0dGVyeSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQganpfYmF0dGVyeV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QganpfYmF0dGVyeSAqanpfYmF0dGVyeSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZqel9iYXR0ZXJ5LT53b3JrKTsKKworCWlmIChncGlvX2lzX3ZhbGlkKGp6X2JhdHRlcnktPnBkYXRhLT5ncGlvX2NoYXJnZSkpIHsKKwkJaWYgKGp6X2JhdHRlcnktPmNoYXJnZV9pcnEgPj0gMCkKKwkJCWZyZWVfaXJxKGp6X2JhdHRlcnktPmNoYXJnZV9pcnEsIGp6X2JhdHRlcnkpOworCQlncGlvX2ZyZWUoanpfYmF0dGVyeS0+cGRhdGEtPmdwaW9fY2hhcmdlKTsKKwl9CisKKwlwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcigmanpfYmF0dGVyeS0+YmF0dGVyeSk7CisKKwlmcmVlX2lycShqel9iYXR0ZXJ5LT5pcnEsIGp6X2JhdHRlcnkpOworCisJaW91bm1hcChqel9iYXR0ZXJ5LT5iYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oanpfYmF0dGVyeS0+bWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShqel9iYXR0ZXJ5LT5tZW0pKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGp6X2JhdHRlcnlfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGp6X2JhdHRlcnkgKmp6X2JhdHRlcnkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmanpfYmF0dGVyeS0+d29yayk7CisJanpfYmF0dGVyeS0+c3RhdHVzID0gUE9XRVJfU1VQUExZX1NUQVRVU19VTktOT1dOOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQganpfYmF0dGVyeV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBqel9iYXR0ZXJ5ICpqel9iYXR0ZXJ5ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmp6X2JhdHRlcnktPndvcmssIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBqel9iYXR0ZXJ5X3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IGp6X2JhdHRlcnlfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGp6X2JhdHRlcnlfcmVzdW1lLAorfTsKKworI2RlZmluZSBKWl9CQVRURVJZX1BNX09QUyAoJmp6X2JhdHRlcnlfcG1fb3BzKQorI2Vsc2UKKyNkZWZpbmUgSlpfQkFUVEVSWV9QTV9PUFMgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGp6X2JhdHRlcnlfZHJpdmVyID0geworCS5wcm9iZQkJPSBqel9iYXR0ZXJ5X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoanpfYmF0dGVyeV9yZW1vdmUpLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImp6NDc0MC1iYXR0ZXJ5IiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5wbSA9IEpaX0JBVFRFUllfUE1fT1BTLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBqel9iYXR0ZXJ5X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZqel9iYXR0ZXJ5X2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChqel9iYXR0ZXJ5X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQganpfYmF0dGVyeV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmp6X2JhdHRlcnlfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGp6X2JhdHRlcnlfZXhpdCk7CisKK01PRFVMRV9BTElBUygicGxhdGZvcm06ano0NzQwLWJhdHRlcnkiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkxhcnMtUGV0ZXIgQ2xhdXNlbiA8bGFyc0BtZXRhZm9vLmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJKWjQ3NDAgU29DIGJhdHRlcnkgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JhcGlkaW8vcmlvLmMgYi9kcml2ZXJzL3JhcGlkaW8vcmlvLmMKaW5kZXggMDhmYTQ1My4uNzRlOWQyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yYXBpZGlvL3Jpby5jCisrKyBiL2RyaXZlcnMvcmFwaWRpby9yaW8uYwpAQCAtODA4LDcgKzgwOCw3IEBACiAKIC8qKgogICogcmlvX3N0ZF9yb3V0ZV9nZXRfZW50cnkgLSBSZWFkIHN3aXRjaCByb3V0ZSB0YWJsZSBlbnRyeSAocG9ydCBudW1iZXIpCi0gKiAgIGFzc29zaWF0ZWQgd2l0aCBzcGVjaWZpZWQgZGVzdElEIHVzaW5nIHN0YW5kYXJkIHJlZ2lzdGVycyBkZWZpbmVkIGluIFJJTworICogICBhc3NvY2lhdGVkIHdpdGggc3BlY2lmaWVkIGRlc3RJRCB1c2luZyBzdGFuZGFyZCByZWdpc3RlcnMgZGVmaW5lZCBpbiBSSU8KICAqICAgc3BlY2lmaWNhdGlvbiByZXYuMS4zCiAgKiBAbXBvcnQ6IE1hc3RlciBwb3J0IHRvIGlzc3VlIHRyYW5zYWN0aW9uCiAgKiBAZGVzdGlkOiBEZXN0aW5hdGlvbiBJRCBvZiB0aGUgZGV2aWNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9hYjMxMDAuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2FiMzEwMC5jCmluZGV4IDdiMTRhNjcuLjExNzkwOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2FiMzEwMC5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2FiMzEwMC5jCkBAIC0yODYsNyArMjg2LDcgQEAKIHsKIAlzdHJ1Y3QgYWIzMTAwX3JlZ3VsYXRvciAqYWJyZWcgPSByZWctPnJlZ19kYXRhOwogCi0JaWYgKHNlbGVjdG9yID4gYWJyZWctPnZvbHRhZ2VzX2xlbikKKwlpZiAoc2VsZWN0b3IgPj0gYWJyZWctPnZvbHRhZ2VzX2xlbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0dXJuIGFicmVnLT50eXBfdm9sdGFnZXNbc2VsZWN0b3JdOwogfQpAQCAtMzE4LDcgKzMxOCw3IEBACiAJcmVndmFsICY9IDB4RTA7CiAJcmVndmFsID4+PSA1OwogCi0JaWYgKHJlZ3ZhbCA+IGFicmVnLT52b2x0YWdlc19sZW4pIHsKKwlpZiAocmVndmFsID49IGFicmVnLT52b2x0YWdlc19sZW4pIHsKIAkJZGV2X2VycigmcmVnLT5kZXYsCiAJCQkicmVndWxhdG9yIHJlZ2lzdGVyICUwMnggY29udGFpbnMgYW4gaWxsZWdhbCB2b2x0YWdlIHNldHRpbmdcbiIsCiAJCQlhYnJlZy0+cmVncmVnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYwppbmRleCAyMjQ4MDg3Li40MjJhNzA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCkBAIC0xMDI1LDcgKzEwMjUsNiBAQAogCQlpZiAocmVndWxhdG9yLT5kZXZfYXR0ci5hdHRyLm5hbWUgPT0gTlVMTCkKIAkJCWdvdG8gYXR0cl9uYW1lX2VycjsKIAotCQlyZWd1bGF0b3ItPmRldl9hdHRyLmF0dHIub3duZXIgPSBUSElTX01PRFVMRTsKIAkJcmVndWxhdG9yLT5kZXZfYXR0ci5hdHRyLm1vZGUgPSAwNDQ0OwogCQlyZWd1bGF0b3ItPmRldl9hdHRyLnNob3cgPSBkZXZpY2VfcmVxdWVzdGVkX3VBX3Nob3c7CiAJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZyZWd1bGF0b3ItPmRldl9hdHRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDd4LXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvdHBzNjUwN3gtcmVndWxhdG9yLmMKaW5kZXggMTRiNDU3NjIuLjgxNTJkNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDd4LXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDd4LXJlZ3VsYXRvci5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL3RwczY1MDd4Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3RwczY1MDd4Lmg+CkBAIC0xMDEsOSArMTAyLDEyIEBACiAJdW5zaWduZWQgbWF4X3VWOwogCXU4IHRhYmxlX2xlbjsKIAljb25zdCB1MTYgKnRhYmxlOworCisJLyogRG9lcyBEQ0RDIGhpZ2ggb3IgdGhlIGxvdyByZWdpc3RlciBkZWZpbmVzIG91dHB1dCB2b2x0YWdlPyAqLworCWJvb2wgZGVmZGNkY19kZWZhdWx0OwogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB0cHNfaW5mbyB0cHM2NTA3eF9wbWljX3JlZ3NbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdHBzX2luZm8gdHBzNjUwN3hfcG1pY19yZWdzW10gPSB7CiAJewogCQkubmFtZSA9ICJWRENEQzEiLAogCQkubWluX3VWID0gNzI1MDAwLApAQCAtMTQ1LDcgKzE0OSw3IEBACiAJc3RydWN0IHJlZ3VsYXRvcl9kZXNjIGRlc2NbVFBTNjUwN1hfTlVNX1JFR1VMQVRPUl07CiAJc3RydWN0IHRwczY1MDd4X2RldiAqbWZkOwogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2W1RQUzY1MDdYX05VTV9SRUdVTEFUT1JdOwotCWNvbnN0IHN0cnVjdCB0cHNfaW5mbyAqaW5mb1tUUFM2NTA3WF9OVU1fUkVHVUxBVE9SXTsKKwlzdHJ1Y3QgdHBzX2luZm8gKmluZm9bVFBTNjUwN1hfTlVNX1JFR1VMQVRPUl07CiAJc3RydWN0IG11dGV4IGlvX2xvY2s7CiB9Owogc3RhdGljIGlubGluZSBpbnQgdHBzNjUwN3hfcG1pY19yZWFkKHN0cnVjdCB0cHM2NTA3eF9wbWljICp0cHMsIHU4IHJlZykKQEAgLTM0MSwxMCArMzQ1LDE2IEBACiAJCXJlZyA9IFRQUzY1MDdYX1JFR19ERUZEQ0RDMTsKIAkJYnJlYWs7CiAJY2FzZSBUUFM2NTA3WF9EQ0RDXzI6Ci0JCXJlZyA9IFRQUzY1MDdYX1JFR19ERUZEQ0RDMl9MT1c7CisJCWlmICh0cHMtPmluZm9bZGNkY10tPmRlZmRjZGNfZGVmYXVsdCkKKwkJCXJlZyA9IFRQUzY1MDdYX1JFR19ERUZEQ0RDMl9ISUdIOworCQllbHNlCisJCQlyZWcgPSBUUFM2NTA3WF9SRUdfREVGRENEQzJfTE9XOwogCQlicmVhazsKIAljYXNlIFRQUzY1MDdYX0RDRENfMzoKLQkJcmVnID0gVFBTNjUwN1hfUkVHX0RFRkRDREMzX0xPVzsKKwkJaWYgKHRwcy0+aW5mb1tkY2RjXS0+ZGVmZGNkY19kZWZhdWx0KQorCQkJcmVnID0gVFBTNjUwN1hfUkVHX0RFRkRDREMzX0hJR0g7CisJCWVsc2UKKwkJCXJlZyA9IFRQUzY1MDdYX1JFR19ERUZEQ0RDM19MT1c7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzcwLDEwICszODAsMTYgQEAKIAkJcmVnID0gVFBTNjUwN1hfUkVHX0RFRkRDREMxOwogCQlicmVhazsKIAljYXNlIFRQUzY1MDdYX0RDRENfMjoKLQkJcmVnID0gVFBTNjUwN1hfUkVHX0RFRkRDREMyX0xPVzsKKwkJaWYgKHRwcy0+aW5mb1tkY2RjXS0+ZGVmZGNkY19kZWZhdWx0KQorCQkJcmVnID0gVFBTNjUwN1hfUkVHX0RFRkRDREMyX0hJR0g7CisJCWVsc2UKKwkJCXJlZyA9IFRQUzY1MDdYX1JFR19ERUZEQ0RDMl9MT1c7CiAJCWJyZWFrOwogCWNhc2UgVFBTNjUwN1hfRENEQ18zOgotCQlyZWcgPSBUUFM2NTA3WF9SRUdfREVGRENEQzNfTE9XOworCQlpZiAodHBzLT5pbmZvW2RjZGNdLT5kZWZkY2RjX2RlZmF1bHQpCisJCQlyZWcgPSBUUFM2NTA3WF9SRUdfREVGRENEQzNfSElHSDsKKwkJZWxzZQorCQkJcmVnID0gVFBTNjUwN1hfUkVHX0RFRkRDREMzX0xPVzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01MzIsNyArNTQ4LDcgQEAKIHsKIAlzdHJ1Y3QgdHBzNjUwN3hfZGV2ICp0cHM2NTA3eF9kZXYgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CiAJc3RhdGljIGludCBkZXNjX2lkOwotCWNvbnN0IHN0cnVjdCB0cHNfaW5mbyAqaW5mbyA9ICZ0cHM2NTA3eF9wbWljX3JlZ3NbMF07CisJc3RydWN0IHRwc19pbmZvICppbmZvID0gJnRwczY1MDd4X3BtaWNfcmVnc1swXTsKIAlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhOwogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2OwogCXN0cnVjdCB0cHM2NTA3eF9wbWljICp0cHM7CkBAIC01NjksNiArNTg1LDEyIEBACiAJZm9yIChpID0gMDsgaSA8IFRQUzY1MDdYX05VTV9SRUdVTEFUT1I7IGkrKywgaW5mbysrLCBpbml0X2RhdGErKykgewogCQkvKiBSZWdpc3RlciB0aGUgcmVndWxhdG9ycyAqLwogCQl0cHMtPmluZm9baV0gPSBpbmZvOworCQlpZiAoaW5pdF9kYXRhLT5kcml2ZXJfZGF0YSkgeworCQkJc3RydWN0IHRwczY1MDd4X3JlZ19wbGF0Zm9ybV9kYXRhICpkYXRhID0KKwkJCQkJCQlpbml0X2RhdGEtPmRyaXZlcl9kYXRhOworCQkJdHBzLT5pbmZvW2ldLT5kZWZkY2RjX2RlZmF1bHQgPSBkYXRhLT5kZWZkY2RjX2RlZmF1bHQ7CisJCX0KKwogCQl0cHMtPmRlc2NbaV0ubmFtZSA9IGluZm8tPm5hbWU7CiAJCXRwcy0+ZGVzY1tpXS5pZCA9IGRlc2NfaWQrKzsKIAkJdHBzLT5kZXNjW2ldLm5fdm9sdGFnZXMgPSBudW1fdm9sdGFnZXNbaV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci93bTgzNTAtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTgzNTAtcmVndWxhdG9yLmMKaW5kZXggNzIzY2QxZi4uMGU2ZWQ3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3Ivd204MzUwLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODM1MC1yZWd1bGF0b3IuYwpAQCAtMTQ5NSw3ICsxNDk1LDcgQEAKIAlpZiAocmV0ICE9IDApIHsKIAkJZGV2X2Vycih3bTgzNTAtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciByZWd1bGF0b3IgJWQ6ICVkXG4iLAogCQkJcmVnLCByZXQpOwotCQlwbGF0Zm9ybV9kZXZpY2VfZGVsKHBkZXYpOworCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOwogCQl3bTgzNTAtPnBtaWMucGRldltyZWddID0gTlVMTDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL0tjb25maWcgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCmluZGV4IDEwYmExMmMuLjQzMDFhNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL0tjb25maWcKKysrIGIvZHJpdmVycy9ydGMvS2NvbmZpZwpAQCAtNzc0LDcgKzc3NCw3IEBACiAKIGNvbmZpZyBSVENfRFJWX0FVMVhYWAogCXRyaXN0YXRlICJBdTF4eHggQ291bnRlcjAgUlRDIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTT0NfQVUxWDAwCisJZGVwZW5kcyBvbiBNSVBTX0FMQ0hFTVkKIAloZWxwCiAJICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgQXUxeHh4IG9uLWNoaXAgQ291bnRlcjAgKFRpbWUtT2YtWWVhcgogCSAgY291bnRlcikgdG8gYmUgdXNlZCBhcyBhIFJUQy4KQEAgLTkwNSw0ICs5MDUsMTUgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgcnRjLW1wYzUxMjEuCiAKK2NvbmZpZyBSVENfRFJWX0paNDc0MAorCXRyaXN0YXRlICJJbmdlbmljIEpaNDc0MCBTb0MiCisJZGVwZW5kcyBvbiBSVENfQ0xBU1MKKwlkZXBlbmRzIG9uIE1BQ0hfSlo0NzQwCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBJbmdlbmljIEpaNDc0MCBTb0MgUlRDCisJICBjb250cm9sbGVyLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBydGMtano0NzQwLgorCiBlbmRpZiAjIFJUQ19DTEFTUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvTWFrZWZpbGUgYi9kcml2ZXJzL3J0Yy9NYWtlZmlsZQppbmRleCA1YWRiYmE3Li5mZWRmOWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3J0Yy9NYWtlZmlsZQpAQCAtNDcsNiArNDcsNyBAQAogb2JqLSQoQ09ORklHX1JUQ19EUlZfRk0zMTMwKQkrPSBydGMtZm0zMTMwLm8KIG9iai0kKENPTkZJR19SVENfRFJWX0dFTkVSSUMpCSs9IHJ0Yy1nZW5lcmljLm8KIG9iai0kKENPTkZJR19SVENfRFJWX0lTTDEyMDgpCSs9IHJ0Yy1pc2wxMjA4Lm8KK29iai0kKENPTkZJR19SVENfRFJWX0paNDc0MCkJKz0gcnRjLWp6NDc0MC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9NNDFUODApCSs9IHJ0Yy1tNDF0ODAubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfTTQxVDk0KQkrPSBydGMtbTQxdDk0Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX000OFQzNSkJKz0gcnRjLW00OHQzNS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZm0zMTMwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtZm0zMTMwLmMKaW5kZXggZmY2ZmNlNi4uZTRkZThmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWZtMzEzMC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1mbTMxMzAuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAJaWYgKCFmbTMxMzAtPmRhdGFfdmFsaWQpIHsKIAkJLyogV2UgaGF2ZSBpbnZhbGlkIGRhdGEgaW4gUlRDLCBwcm9iYWJseSBkdWUKIAkJdG8gYmF0dGVyeSBmYXVsdHMgb3Igb3RoZXIgcHJvYmxlbXMuIFJldHVybiBFSU8KLQkJZm9yIG5vdywgaXQgd2lsbCBhbGxvdyB1cyB0byBzZXQgZGF0YSBsYXRlciBpbnN0ZWQKKwkJZm9yIG5vdywgaXQgd2lsbCBhbGxvdyB1cyB0byBzZXQgZGF0YSBsYXRlciBpbnN0ZWFkCiAJCW9mIGVycm9yIGR1cmluZyBwcm9iaW5nIHdoaWNoIGRpc2FibGVzIGRldmljZSAqLwogCQlyZXR1cm4gLUVJTzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtano0NzQwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtano0NzQwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYxOWQ1NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1qejQ3NDAuYwpAQCAtMCwwICsxLDM0NSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCwgTGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+CisgKgkgSlo0NzQwIFNvQyBSVEMgZHJpdmVyCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjZGVmaW5lIEpaX1JFR19SVENfQ1RSTAkJMHgwMAorI2RlZmluZSBKWl9SRUdfUlRDX1NFQwkJMHgwNAorI2RlZmluZSBKWl9SRUdfUlRDX1NFQ19BTEFSTQkweDA4CisjZGVmaW5lIEpaX1JFR19SVENfUkVHVUxBVE9SCTB4MEMKKyNkZWZpbmUgSlpfUkVHX1JUQ19ISUJFUk5BVEUJMHgyMAorI2RlZmluZSBKWl9SRUdfUlRDX1NDUkFUQ0hQQUQJMHgzNAorCisjZGVmaW5lIEpaX1JUQ19DVFJMX1dSRFkJQklUKDcpCisjZGVmaW5lIEpaX1JUQ19DVFJMXzFIWgkJQklUKDYpCisjZGVmaW5lIEpaX1JUQ19DVFJMXzFIWl9JUlEJQklUKDUpCisjZGVmaW5lIEpaX1JUQ19DVFJMX0FGCQlCSVQoNCkKKyNkZWZpbmUgSlpfUlRDX0NUUkxfQUZfSVJRCUJJVCgzKQorI2RlZmluZSBKWl9SVENfQ1RSTF9BRQkJQklUKDIpCisjZGVmaW5lIEpaX1JUQ19DVFJMX0VOQUJMRQlCSVQoMCkKKworc3RydWN0IGp6NDc0MF9ydGMgeworCXN0cnVjdCByZXNvdXJjZSAqbWVtOworCXZvaWQgX19pb21lbSAqYmFzZTsKKworCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CisKKwl1bnNpZ25lZCBpbnQgaXJxOworCisJc3BpbmxvY2tfdCBsb2NrOworfTsKKworc3RhdGljIGlubGluZSB1aW50MzJfdCBqejQ3NDBfcnRjX3JlZ19yZWFkKHN0cnVjdCBqejQ3NDBfcnRjICpydGMsIHNpemVfdCByZWcpCit7CisJcmV0dXJuIHJlYWRsKHJ0Yy0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbnQgano0NzQwX3J0Y193YWl0X3dyaXRlX3JlYWR5KHN0cnVjdCBqejQ3NDBfcnRjICpydGMpCit7CisJdWludDMyX3QgY3RybDsKKwlpbnQgdGltZW91dCA9IDEwMDA7CisKKwlkbyB7CisJCWN0cmwgPSBqejQ3NDBfcnRjX3JlZ19yZWFkKHJ0YywgSlpfUkVHX1JUQ19DVFJMKTsKKwl9IHdoaWxlICghKGN0cmwgJiBKWl9SVENfQ1RSTF9XUkRZKSAmJiAtLXRpbWVvdXQpOworCisJcmV0dXJuIHRpbWVvdXQgPyAwIDogLUVJTzsKK30KKworc3RhdGljIGlubGluZSBpbnQgano0NzQwX3J0Y19yZWdfd3JpdGUoc3RydWN0IGp6NDc0MF9ydGMgKnJ0Yywgc2l6ZV90IHJlZywKKwl1aW50MzJfdCB2YWwpCit7CisJaW50IHJldDsKKwlyZXQgPSBqejQ3NDBfcnRjX3dhaXRfd3JpdGVfcmVhZHkocnRjKTsKKwlpZiAocmV0ID09IDApCisJCXdyaXRlbCh2YWwsIHJ0Yy0+YmFzZSArIHJlZyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGp6NDc0MF9ydGNfY3RybF9zZXRfYml0cyhzdHJ1Y3Qgano0NzQwX3J0YyAqcnRjLCB1aW50MzJfdCBtYXNrLAorCWJvb2wgc2V0KQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1aW50MzJfdCBjdHJsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0Yy0+bG9jaywgZmxhZ3MpOworCisJY3RybCA9IGp6NDc0MF9ydGNfcmVnX3JlYWQocnRjLCBKWl9SRUdfUlRDX0NUUkwpOworCisJLyogRG9uJ3QgY2xlYXIgaW50ZXJydXB0IGZsYWdzIGJ5IGFjY2lkZW50ICovCisJY3RybCB8PSBKWl9SVENfQ1RSTF8xSFogfCBKWl9SVENfQ1RSTF9BRjsKKworCWlmIChzZXQpCisJCWN0cmwgfD0gbWFzazsKKwllbHNlCisJCWN0cmwgJj0gfm1hc2s7CisKKwlyZXQgPSBqejQ3NDBfcnRjX3JlZ193cml0ZShydGMsIEpaX1JFR19SVENfQ1RSTCwgY3RybCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGMtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgano0NzQwX3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpCit7CisJc3RydWN0IGp6NDc0MF9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVpbnQzMl90IHNlY3MsIHNlY3MyOworCWludCB0aW1lb3V0ID0gNTsKKworCS8qIElmIHRoZSBzZWNvbmRzIHJlZ2lzdGVyIGlzIHJlYWQgd2hpbGUgaXQgaXMgdXBkYXRlZCwgaXQgY2FuIGNvbnRhaW4gYQorCSAqIGJvZ3VzIHZhbHVlLiBUaGlzIGNhbiBiZSBhdm9pZGVkIGJ5IG1ha2luZyBzdXJlIHRoYXQgdHdvIGNvbnNlY3V0aXZlCisJICogcmVhZHMgaGF2ZSB0aGUgc2FtZSB2YWx1ZS4KKwkgKi8KKwlzZWNzID0gano0NzQwX3J0Y19yZWdfcmVhZChydGMsIEpaX1JFR19SVENfU0VDKTsKKwlzZWNzMiA9IGp6NDc0MF9ydGNfcmVnX3JlYWQocnRjLCBKWl9SRUdfUlRDX1NFQyk7CisKKwl3aGlsZSAoc2VjcyAhPSBzZWNzMiAmJiAtLXRpbWVvdXQpIHsKKwkJc2VjcyA9IHNlY3MyOworCQlzZWNzMiA9IGp6NDc0MF9ydGNfcmVnX3JlYWQocnRjLCBKWl9SRUdfUlRDX1NFQyk7CisJfQorCisJaWYgKHRpbWVvdXQgPT0gMCkKKwkJcmV0dXJuIC1FSU87CisKKwlydGNfdGltZV90b190bShzZWNzLCB0aW1lKTsKKworCXJldHVybiBydGNfdmFsaWRfdG0odGltZSk7Cit9CisKK3N0YXRpYyBpbnQgano0NzQwX3J0Y19zZXRfbW1zcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgc2VjcykKK3sKKwlzdHJ1Y3Qgano0NzQwX3J0YyAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gano0NzQwX3J0Y19yZWdfd3JpdGUocnRjLCBKWl9SRUdfUlRDX1NFQywgc2Vjcyk7Cit9CisKK3N0YXRpYyBpbnQgano0NzQwX3J0Y19yZWFkX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pCit7CisJc3RydWN0IGp6NDc0MF9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVpbnQzMl90IHNlY3M7CisJdWludDMyX3QgY3RybDsKKworCXNlY3MgPSBqejQ3NDBfcnRjX3JlZ19yZWFkKHJ0YywgSlpfUkVHX1JUQ19TRUNfQUxBUk0pOworCisJY3RybCA9IGp6NDc0MF9ydGNfcmVnX3JlYWQocnRjLCBKWl9SRUdfUlRDX0NUUkwpOworCisJYWxybS0+ZW5hYmxlZCA9ICEhKGN0cmwgJiBKWl9SVENfQ1RSTF9BRSk7CisJYWxybS0+cGVuZGluZyA9ICEhKGN0cmwgJiBKWl9SVENfQ1RSTF9BRik7CisKKwlydGNfdGltZV90b190bShzZWNzLCAmYWxybS0+dGltZSk7CisKKwlyZXR1cm4gcnRjX3ZhbGlkX3RtKCZhbHJtLT50aW1lKTsKK30KKworc3RhdGljIGludCBqejQ3NDBfcnRjX3NldF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbHJtKQoreworCWludCByZXQ7CisJc3RydWN0IGp6NDc0MF9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgc2VjczsKKworCXJ0Y190bV90b190aW1lKCZhbHJtLT50aW1lLCAmc2Vjcyk7CisKKwlyZXQgPSBqejQ3NDBfcnRjX3JlZ193cml0ZShydGMsIEpaX1JFR19SVENfU0VDX0FMQVJNLCBzZWNzKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gano0NzQwX3J0Y19jdHJsX3NldF9iaXRzKHJ0YywgSlpfUlRDX0NUUkxfQUUsIGFscm0tPmVuYWJsZWQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBqejQ3NDBfcnRjX3VwZGF0ZV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3Qgano0NzQwX3J0YyAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJcmV0dXJuIGp6NDc0MF9ydGNfY3RybF9zZXRfYml0cyhydGMsIEpaX1JUQ19DVFJMXzFIWl9JUlEsIGVuYWJsZSk7Cit9CisKK3N0YXRpYyBpbnQgano0NzQwX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3Qgano0NzQwX3J0YyAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJcmV0dXJuIGp6NDc0MF9ydGNfY3RybF9zZXRfYml0cyhydGMsIEpaX1JUQ19DVFJMX0FGX0lSUSwgZW5hYmxlKTsKK30KKworc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIGp6NDc0MF9ydGNfb3BzID0geworCS5yZWFkX3RpbWUJPSBqejQ3NDBfcnRjX3JlYWRfdGltZSwKKwkuc2V0X21tc3MJPSBqejQ3NDBfcnRjX3NldF9tbXNzLAorCS5yZWFkX2FsYXJtCT0gano0NzQwX3J0Y19yZWFkX2FsYXJtLAorCS5zZXRfYWxhcm0JPSBqejQ3NDBfcnRjX3NldF9hbGFybSwKKwkudXBkYXRlX2lycV9lbmFibGUgPSBqejQ3NDBfcnRjX3VwZGF0ZV9pcnFfZW5hYmxlLAorCS5hbGFybV9pcnFfZW5hYmxlID0gano0NzQwX3J0Y19hbGFybV9pcnFfZW5hYmxlLAorfTsKKworc3RhdGljIGlycXJldHVybl90IGp6NDc0MF9ydGNfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGp6NDc0MF9ydGMgKnJ0YyA9IGRhdGE7CisJdWludDMyX3QgY3RybDsKKwl1bnNpZ25lZCBsb25nIGV2ZW50cyA9IDA7CisKKwljdHJsID0gano0NzQwX3J0Y19yZWdfcmVhZChydGMsIEpaX1JFR19SVENfQ1RSTCk7CisKKwlpZiAoY3RybCAmIEpaX1JUQ19DVFJMXzFIWikKKwkJZXZlbnRzIHw9IChSVENfVUYgfCBSVENfSVJRRik7CisKKwlpZiAoY3RybCAmIEpaX1JUQ19DVFJMX0FGKQorCQlldmVudHMgfD0gKFJUQ19BRiB8IFJUQ19JUlFGKTsKKworCXJ0Y191cGRhdGVfaXJxKHJ0Yy0+cnRjLCAxLCBldmVudHMpOworCisJano0NzQwX3J0Y19jdHJsX3NldF9iaXRzKHJ0YywgSlpfUlRDX0NUUkxfMUhaIHwgSlpfUlRDX0NUUkxfQUYsIGZhbHNlKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwordm9pZCBqejQ3NDBfcnRjX3Bvd2Vyb2ZmKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgano0NzQwX3J0YyAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJano0NzQwX3J0Y19yZWdfd3JpdGUocnRjLCBKWl9SRUdfUlRDX0hJQkVSTkFURSwgMSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChqejQ3NDBfcnRjX3Bvd2Vyb2ZmKTsKKworc3RhdGljIGludCBfX2RldmluaXQgano0NzQwX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQ7CisJc3RydWN0IGp6NDc0MF9ydGMgKnJ0YzsKKwl1aW50MzJfdCBzY3JhdGNocGFkOworCisJcnRjID0ga3phbGxvYyhzaXplb2YoKnJ0YyksIEdGUF9LRVJORUwpOworCWlmICghcnRjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJ0Yy0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAocnRjLT5pcnEgPCAwKSB7CisJCXJldCA9IC1FTk9FTlQ7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgcGxhdGZvcm0gaXJxXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlydGMtPm1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFydGMtPm1lbSkgeworCQlyZXQgPSAtRU5PRU5UOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IHBsYXRmb3JtIG1taW8gbWVtb3J5XG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlydGMtPm1lbSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihydGMtPm1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUocnRjLT5tZW0pLAorCQkJCQlwZGV2LT5uYW1lKTsKKwlpZiAoIXJ0Yy0+bWVtKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgbW1pbyBtZW1vcnkgcmVnaW9uXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlydGMtPmJhc2UgPSBpb3JlbWFwX25vY2FjaGUocnRjLT5tZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJ0Yy0+bWVtKSk7CisJaWYgKCFydGMtPmJhc2UpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gaW9yZW1hcCBtbWlvIG1lbW9yeVxuIik7CisJCWdvdG8gZXJyX3JlbGVhc2VfbWVtX3JlZ2lvbjsKKwl9CisKKwlzcGluX2xvY2tfaW5pdCgmcnRjLT5sb2NrKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJ0Yyk7CisKKwlydGMtPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIocGRldi0+bmFtZSwgJnBkZXYtPmRldiwgJmp6NDc0MF9ydGNfb3BzLAorCQkJCQlUSElTX01PRFVMRSk7CisJaWYgKElTX0VSUihydGMtPnJ0YykpIHsKKwkJcmV0ID0gUFRSX0VSUihydGMtPnJ0Yyk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBydGMgZGV2aWNlOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfaW91bm1hcDsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2lycShydGMtPmlycSwgano0NzQwX3J0Y19pcnEsIDAsCisJCQkJcGRldi0+bmFtZSwgcnRjKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IHJ0YyBpcnE6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl91bnJlZ2lzdGVyX3J0YzsKKwl9CisKKwlzY3JhdGNocGFkID0gano0NzQwX3J0Y19yZWdfcmVhZChydGMsIEpaX1JFR19SVENfU0NSQVRDSFBBRCk7CisJaWYgKHNjcmF0Y2hwYWQgIT0gMHgxMjM0NTY3OCkgeworCQlyZXQgPSBqejQ3NDBfcnRjX3JlZ193cml0ZShydGMsIEpaX1JFR19SVENfU0NSQVRDSFBBRCwgMHgxMjM0NTY3OCk7CisJCXJldCA9IGp6NDc0MF9ydGNfcmVnX3dyaXRlKHJ0YywgSlpfUkVHX1JUQ19TRUMsIDApOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZCBub3Qgd3JpdGUgd3JpdGUgdG8gUlRDIHJlZ2lzdGVyc1xuIik7CisJCQlnb3RvIGVycl9mcmVlX2lycTsKKwkJfQorCX0KKworCXJldHVybiAwOworCitlcnJfZnJlZV9pcnE6CisJZnJlZV9pcnEocnRjLT5pcnEsIHJ0Yyk7CitlcnJfdW5yZWdpc3Rlcl9ydGM6CisJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yy0+cnRjKTsKK2Vycl9pb3VubWFwOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWlvdW5tYXAocnRjLT5iYXNlKTsKK2Vycl9yZWxlYXNlX21lbV9yZWdpb246CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJ0Yy0+bWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShydGMtPm1lbSkpOworZXJyX2ZyZWU6CisJa2ZyZWUocnRjKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGp6NDc0MF9ydGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGp6NDc0MF9ydGMgKnJ0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZnJlZV9pcnEocnRjLT5pcnEsIHJ0Yyk7CisKKwlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjLT5ydGMpOworCisJaW91bm1hcChydGMtPmJhc2UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihydGMtPm1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUocnRjLT5tZW0pKTsKKworCWtmcmVlKHJ0Yyk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGp6NDc0MF9ydGNfZHJpdmVyID0geworCS5wcm9iZSA9IGp6NDc0MF9ydGNfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGp6NDc0MF9ydGNfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJqejQ3NDAtcnRjIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGp6NDc0MF9ydGNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmp6NDc0MF9ydGNfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGp6NDc0MF9ydGNfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBqejQ3NDBfcnRjX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmano0NzQwX3J0Y19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoano0NzQwX3J0Y19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJUQyBkcml2ZXIgZm9yIHRoZSBKWjQ3NDAgU29DXG4iKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06ano0NzQwLXJ0YyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXBsMDMxLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcGwwMzEuYwppbmRleCAzNTg3ZDk5Li43MWJiZWZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcGwwMzEuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcGwwMzEuYwpAQCAtNDU2LDcgKzQ1Niw3IEBACiAJLmlycV9zZXRfZnJlcSA9IHBsMDMxX2lycV9zZXRfZnJlcSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYW1iYV9pZCBwbDAzMV9pZHNbXSBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBhbWJhX2lkIHBsMDMxX2lkc1tdID0gewogCXsKIAkJLmlkID0gMHgwMDA0MTAzMSwKIAkJLm1hc2sgPSAweDAwMGZmZmZmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXJ4ODAyNS5jIGIvZHJpdmVycy9ydGMvcnRjLXJ4ODAyNS5jCmluZGV4IDc4OWY2MmYuLjExNDZlMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1yeDgwMjUuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcng4MDI1LmMKQEAgLTQ2MSw3ICs0NjEsNyBAQAogICogQ2xvY2sgcHJlY2lzaW9uIGFkanVzdG1lbnQgc3VwcG9ydAogICoKICAqIEFjY29yZGluZyB0byB0aGUgUlg4MDI1IFNBL05CIGFwcGxpY2F0aW9uIG1hbnVhbCB0aGUgZnJlcXVlbmN5IGFuZAotICogdGVtcGVyYXR1cmUgY2hhcmF0ZXJpc3RpY3MgY2FuIGJlIGFwcHJveGltYXRlZCB1c2luZyB0aGUgZm9sbG93aW5nCisgKiB0ZW1wZXJhdHVyZSBjaGFyYWN0ZXJpc3RpY3MgY2FuIGJlIGFwcHJveGltYXRlZCB1c2luZyB0aGUgZm9sbG93aW5nCiAgKiBlcXVhdGlvbjoKICAqCiAgKiAgIGRmID0gYSAqICh1dCAtIHQpKioyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcng4NTgxLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcng4NTgxLmMKaW5kZXggOTcxOGFhYS4uNjAwYjg5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXJ4ODU4MS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1yeDg1ODEuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCWVyciA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBSWDg1ODFfUkVHX0ZMQUcsCisJZXJyID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFJYODU4MV9SRUdfQ1RSTCwKIAkJKGRhdGEgfCBSWDg1ODFfQ1RSTF9TVE9QKSk7CiAJaWYgKGVyciA8IDApIHsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJVbmFibGUgdG8gd3JpdGUgY29udHJvbCByZWdpc3RlclxuIik7CkBAIC0xODIsNiArMTgyLDIwIEBACiAJCXJldHVybiAtRUlPOwogCX0KIAorCS8qIGdldCBWTEYgYW5kIGNsZWFyIGl0ICovCisJZGF0YSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIFJYODU4MV9SRUdfRkxBRyk7CisJaWYgKGRhdGEgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiVW5hYmxlIHRvIHJlYWQgZmxhZyByZWdpc3RlclxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWVyciA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBSWDg1ODFfUkVHX0ZMQUcsCisJCShkYXRhICYgfihSWDg1ODFfRkxBR19WTEYpKSk7CisJaWYgKGVyciAhPSAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiVW5hYmxlIHRvIHdyaXRlIGZsYWcgcmVnaXN0ZXJcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKIAkvKiBSZXN0YXJ0IHRoZSBjbG9jayAqLwogCWRhdGEgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBSWDg1ODFfUkVHX0NUUkwpOwogCWlmIChkYXRhIDwgMCkgewpAQCAtMTg5LDggKzIwMyw4IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCWVyciA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBSWDg1ODFfUkVHX0ZMQUcsCi0JCShkYXRhIHwgfihSWDg1ODFfQ1RSTF9TVE9QKSkpOworCWVyciA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBSWDg1ODFfUkVHX0NUUkwsCisJCShkYXRhICYgfihSWDg1ODFfQ1RSTF9TVE9QKSkpOwogCWlmIChlcnIgIT0gMCkgewogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIlVuYWJsZSB0byB3cml0ZSBjb250cm9sIHJlZ2lzdGVyXG4iKTsKIAkJcmV0dXJuIC1FSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCmluZGV4IDM0ZDUxZGQuLmJlZDdiNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCkBAIC05NDgsOCArOTQ4LDEwIEBACiAJaWYgKGRldmljZS0+ZGlzY2lwbGluZSAmJiBkZXZpY2UtPmRpc2NpcGxpbmUtPmdldF91aWQgJiYKIAkgICAgIWRldmljZS0+ZGlzY2lwbGluZS0+Z2V0X3VpZChkZXZpY2UsICZ1aWQpKSB7CiAJCWlmICh1aWQudHlwZSA9PSBVQV9CQVNFX1BBVl9BTElBUyB8fAotCQkgICAgdWlkLnR5cGUgPT0gVUFfSFlQRVJfUEFWX0FMSUFTKQorCQkgICAgdWlkLnR5cGUgPT0gVUFfSFlQRVJfUEFWX0FMSUFTKSB7CisJCQlkYXNkX3B1dF9kZXZpY2UoZGV2aWNlKTsKIAkJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjFcbiIpOworCQl9CiAJfQogCWRhc2RfcHV0X2RldmljZShkZXZpY2UpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jCmluZGV4IGNlN2NiODcuLjQwN2QwZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jCkBAIC03MTMsNyArNzEzLDcgQEAKIAlyZXQgPSBjaHNjX2RldGVybWluZV9jaGFubmVsX3BhdGhfZGVzYyhjaHBpZCwgMCwgMCwgMCwgMCwgY2hzY19yZXNwKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9mcmVlOwotCW1lbWNweShkZXNjLCAmY2hzY19yZXNwLT5kYXRhLCBjaHNjX3Jlc3AtPmxlbmd0aCk7CisJbWVtY3B5KGRlc2MsICZjaHNjX3Jlc3AtPmRhdGEsIHNpemVvZigqZGVzYykpOwogb3V0X2ZyZWU6CiAJa2ZyZWUoY2hzY19yZXNwKTsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYwppbmRleCA2MzI2YjY3Li4zNGM3ZTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYwpAQCAtMzY4LDYgKzM2OCw4IEBACiAJaWYgKHFlYnNtX3Bvc3NpYmxlKCkpCiAJCWlycV9wdHItPnFpYi5yZmxhZ3MgfD0gUUlCX1JGTEFHU19FTkFCTEVfUUVCU007CiAKKwlpcnFfcHRyLT5xaWIucmZsYWdzIHw9IGluaXRfZGF0YS0+cWliX3JmbGFnczsKKwogCWlycV9wdHItPnFpYi5xZm10ID0gaW5pdF9kYXRhLT5xX2Zvcm1hdDsKIAlpZiAoaW5pdF9kYXRhLT5ub19pbnB1dF9xcykKIAkJaXJxX3B0ci0+cWliLmlzbGliYSA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYyBiL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCmluZGV4IDE0N2JiMWEuLmE3NWVkMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCkBAIC0yOTUsNyArMjk1LDcgQEAKIAlpbnQgZXJyOwogCWVyciA9IGNjd2dyb3VwX2NyZWF0ZV9mcm9tX3N0cmluZyhjbGF3X3Jvb3RfZGV2LAogCQkJCQkgIGNsYXdfZ3JvdXBfZHJpdmVyLmRyaXZlcl9pZCwKLQkJCQkJICAmY2xhd19jY3dfZHJpdmVyLCAzLCBidWYpOworCQkJCQkgICZjbGF3X2Njd19kcml2ZXIsIDIsIGJ1Zik7CiAJcmV0dXJuIGVyciA/IGVyciA6IGNvdW50OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaAppbmRleCA3YTQ0YzM4Li5kMTI1Nzc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmgKQEAgLTQwLDExICs0MCw3IEBACiAgKi8KIGVudW0gcWV0aF9kYmZfbmFtZXMgewogCVFFVEhfREJGX1NFVFVQLAotCVFFVEhfREJGX1FFUlIsCi0JUUVUSF9EQkZfVFJBQ0UsCiAJUUVUSF9EQkZfTVNHLAotCVFFVEhfREJGX1NFTlNFLAotCVFFVEhfREJGX01JU0MsCiAJUUVUSF9EQkZfQ1RSTCwKIAlRRVRIX0RCRl9JTkZPUwkvKiBtdXN0IGJlIGxhc3QgZWxlbWVudCAqLwogfTsKQEAgLTcxLDcgKzY3LDE5IEBACiAJZGVidWdfc3ByaW50Zl9ldmVudChxZXRoX2RiZltRRVRIX0RCRl9NU0ddLmlkLCBsZXZlbCwgdGV4dCkKIAogI2RlZmluZSBRRVRIX0RCRl9URVhUXyhuYW1lLCBsZXZlbCwgdGV4dC4uLikgXAotCXFldGhfZGJmX2xvbmd0ZXh0KFFFVEhfREJGXyMjbmFtZSwgbGV2ZWwsIHRleHQpCisJcWV0aF9kYmZfbG9uZ3RleHQocWV0aF9kYmZbUUVUSF9EQkZfIyNuYW1lXS5pZCwgbGV2ZWwsIHRleHQpCisKKyNkZWZpbmUgUUVUSF9DQVJEX1RFWFQoY2FyZCwgbGV2ZWwsIHRleHQpIFwKKwlkZWJ1Z190ZXh0X2V2ZW50KGNhcmQtPmRlYnVnLCBsZXZlbCwgdGV4dCkKKworI2RlZmluZSBRRVRIX0NBUkRfSEVYKGNhcmQsIGxldmVsLCBhZGRyLCBsZW4pIFwKKwlkZWJ1Z19ldmVudChjYXJkLT5kZWJ1ZywgbGV2ZWwsICh2b2lkICopKGFkZHIpLCBsZW4pCisKKyNkZWZpbmUgUUVUSF9DQVJEX01FU1NBR0UoY2FyZCwgdGV4dC4uLikgXAorCWRlYnVnX3NwcmludGZfZXZlbnQoY2FyZC0+ZGVidWcsIGxldmVsLCB0ZXh0KQorCisjZGVmaW5lIFFFVEhfQ0FSRF9URVhUXyhjYXJkLCBsZXZlbCwgdGV4dC4uLikgXAorCXFldGhfZGJmX2xvbmd0ZXh0KGNhcmQtPmRlYnVnLCBsZXZlbCwgdGV4dCkKIAogI2RlZmluZSBTRU5TRV9DT01NQU5EX1JFSkVDVF9CWVRFIDAKICNkZWZpbmUgU0VOU0VfQ09NTUFORF9SRUpFQ1RfRkxBRyAweDgwCkBAIC0xODAsOCArMTg4LDcgQEAKIAkJcWV0aF9pc19lbmFibGVkNihjLCBmKSA6IHFldGhfaXNfZW5hYmxlZChjLCBmKSkKIAogI2RlZmluZSBRRVRIX0lEWF9GVU5DX0xFVkVMX09TRAkJIDB4MDEwMQotI2RlZmluZSBRRVRIX0lEWF9GVU5DX0xFVkVMX0lRRF9FTkFfSVBBVCAweDQxMDgKLSNkZWZpbmUgUUVUSF9JRFhfRlVOQ19MRVZFTF9JUURfRElTX0lQQVQgMHg1MTA4CisjZGVmaW5lIFFFVEhfSURYX0ZVTkNfTEVWRUxfSVFECQkgMHg0MTA4CiAKICNkZWZpbmUgUUVUSF9NT0RFTExJU1RfQVJSQVkgXAogCXt7MHgxNzMxLCAweDAxLCAweDE3MzIsIFFFVEhfQ0FSRF9UWVBFX09TRCwgUUVUSF9NQVhfUVVFVUVTLCAwfSwgXApAQCAtNzMzLDEyICs3NDAsMTUgQEAKIAlzdHJ1Y3QgcWV0aF9xZGlvX2luZm8gcWRpbzsKIAlzdHJ1Y3QgcWV0aF9wZXJmX3N0YXRzIHBlcmZfc3RhdHM7CiAJaW50IHVzZV9oYXJkX3N0b3A7CisJaW50IHJlYWRfb3Jfd3JpdGVfcHJvYmxlbTsKIAlzdHJ1Y3QgcWV0aF9vc25faW5mbyBvc25faW5mbzsKIAlzdHJ1Y3QgcWV0aF9kaXNjaXBsaW5lIGRpc2NpcGxpbmU7CiAJYXRvbWljX3QgZm9yY2VfYWxsb2Nfc2tiOwogCXN0cnVjdCBzZXJ2aWNlX2xldmVsIHFldGhfc2VydmljZV9sZXZlbDsKIAlzdHJ1Y3QgcWRpb19zc3FkX2Rlc2Mgc3NxZDsKKwlkZWJ1Z19pbmZvX3QgKmRlYnVnOwogCXN0cnVjdCBtdXRleCBjb25mX211dGV4OworCXN0cnVjdCBtdXRleCBkaXNjaXBsaW5lX211dGV4OwogfTsKIAogc3RydWN0IHFldGhfY2FyZF9saXN0X3N0cnVjdCB7CkBAIC04NTcsOSArODY3LDEwIEBACiAJCQkJc3RydWN0IGV0aHRvb2xfc3RhdHMgKiwgdTY0ICopOwogdm9pZCBxZXRoX2NvcmVfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKiwgdTMyLCB1OCAqKTsKIHZvaWQgcWV0aF9jb3JlX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX2RydmluZm8gKik7Ci12b2lkIHFldGhfZGJmX2xvbmd0ZXh0KGVudW0gcWV0aF9kYmZfbmFtZXMgZGJmX25peCwgaW50IGxldmVsLCBjaGFyICp0ZXh0LCAuLi4pOwordm9pZCBxZXRoX2RiZl9sb25ndGV4dChkZWJ1Z19pbmZvX3QgKmlkLCBpbnQgbGV2ZWwsIGNoYXIgKnRleHQsIC4uLik7CiBpbnQgcWV0aF9jb3JlX2V0aHRvb2xfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX2NtZCAqKTsKIGludCBxZXRoX3NldF9hY2Nlc3NfY3RybF9vbmxpbmUoc3RydWN0IHFldGhfY2FyZCAqY2FyZCk7CitpbnQgcWV0aF9oZHJfY2hrX2FuZF9ib3VuY2Uoc3RydWN0IHNrX2J1ZmYgKiwgaW50KTsKIAogLyogZXhwb3J0cyBmb3IgT1NOICovCiBpbnQgcWV0aF9vc25fYXNzaXN0KHN0cnVjdCBuZXRfZGV2aWNlICosIHZvaWQgKiwgaW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYwppbmRleCAxM2VmNDZiLi4zYTVhMThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCkBAIC0zMiwxNiArMzIsOCBAQAogCS8qICAgICAgICAgICAgICAgICAgIE4gIFAgIEEgICAgTSAgTCAgViAgICAgICAgICAgICAgICAgICAgICBIICAqLwogCVtRRVRIX0RCRl9TRVRVUF0gPSB7InFldGhfc2V0dXAiLAogCQkJCTgsIDEsICAgOCwgNSwgJmRlYnVnX2hleF9hc2NpaV92aWV3LCBOVUxMfSwKLQlbUUVUSF9EQkZfUUVSUl0gID0geyJxZXRoX3FlcnIiLAotCQkJCTIsIDEsICAgOCwgMiwgJmRlYnVnX2hleF9hc2NpaV92aWV3LCBOVUxMfSwKLQlbUUVUSF9EQkZfVFJBQ0VdID0geyJxZXRoX3RyYWNlIiwKLQkJCQk0LCAxLCAgIDgsIDMsICZkZWJ1Z19oZXhfYXNjaWlfdmlldywgTlVMTH0sCiAJW1FFVEhfREJGX01TR10gICA9IHsicWV0aF9tc2ciLAogCQkJCTgsIDEsIDEyOCwgMywgJmRlYnVnX3NwcmludGZfdmlldywgICBOVUxMfSwKLQlbUUVUSF9EQkZfU0VOU0VdID0geyJxZXRoX3NlbnNlIiwKLQkJCQkyLCAxLCAgNjQsIDIsICZkZWJ1Z19oZXhfYXNjaWlfdmlldywgTlVMTH0sCi0JW1FFVEhfREJGX01JU0NdCSA9IHsicWV0aF9taXNjIiwKLQkJCQkyLCAxLCAyNTYsIDIsICZkZWJ1Z19oZXhfYXNjaWlfdmlldywgTlVMTH0sCiAJW1FFVEhfREJGX0NUUkxdICA9IHsicWV0aF9jb250cm9sIiwKIAkJOCwgMSwgUUVUSF9EQkZfQ1RSTF9MRU4sIDUsICZkZWJ1Z19oZXhfYXNjaWlfdmlldywgTlVMTH0sCiB9OwpAQCAtNjUsNDggKzU3LDYgQEAKIHN0YXRpYyBpbnQgcWV0aF9xZGlvX2VzdGFibGlzaChzdHJ1Y3QgcWV0aF9jYXJkICopOwogCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3FldGhfZmlsbF9idWZmZXJfZnJhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQlzdHJ1Y3QgcWRpb19idWZmZXIgKmJ1ZmZlciwgaW50IGlzX3RzbywKLQkJaW50ICpuZXh0X2VsZW1lbnRfdG9fZmlsbCkKLXsKLQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnOwotCWludCBmcmFnbm87Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwotCWludCBlbGVtZW50LCBjbnQsIGRsZW47Ci0KLQlmcmFnbm8gPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOwotCWVsZW1lbnQgPSAqbmV4dF9lbGVtZW50X3RvX2ZpbGw7Ci0JZGxlbiA9IDA7Ci0KLQlpZiAoaXNfdHNvKQotCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPQotCQkJU0JBTF9GTEFHU19NSURETEVfRlJBRzsKLQllbHNlCi0JCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5mbGFncyA9Ci0JCQlTQkFMX0ZMQUdTX0ZJUlNUX0ZSQUc7Ci0JZGxlbiA9IHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbjsKLQlpZiAoZGxlbikgewotCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uYWRkciA9IHNrYi0+ZGF0YTsKLQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmxlbmd0aCA9IGRsZW47Ci0JCWVsZW1lbnQrKzsKLQl9Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBmcmFnbm87IGNudCsrKSB7Ci0JCWZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tjbnRdOwotCQlhZGRyID0gKHBhZ2VfdG9fcGZuKGZyYWctPnBhZ2UpIDw8IFBBR0VfU0hJRlQpICsKLQkJCWZyYWctPnBhZ2Vfb2Zmc2V0OwotCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uYWRkciA9IChjaGFyICopYWRkcjsKLQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmxlbmd0aCA9IGZyYWctPnNpemU7Ci0JCWlmIChjbnQgPCAoZnJhZ25vIC0gMSkpCi0JCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPQotCQkJCVNCQUxfRkxBR1NfTUlERExFX0ZSQUc7Ci0JCWVsc2UKLQkJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5mbGFncyA9Ci0JCQkJU0JBTF9GTEFHU19MQVNUX0ZSQUc7Ci0JCWVsZW1lbnQrKzsKLQl9Ci0JKm5leHRfZWxlbWVudF90b19maWxsID0gZWxlbWVudDsKLX0KLQogc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpxZXRoX2dldF9jYXJkbmFtZShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQogewogCWlmIChjYXJkLT5pbmZvLmd1ZXN0bGFuKSB7CkBAIC0yMzIsNyArMTgyLDcgQEAKIHsKIAlzdHJ1Y3QgcWV0aF9idWZmZXJfcG9vbF9lbnRyeSAqcG9vbF9lbnRyeSwgKnRtcDsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJjbHdya2xzdCIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDUsICJjbHdya2xzdCIpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb29sX2VudHJ5LCB0bXAsCiAJCQkgICAgJmNhcmQtPnFkaW8uaW5fYnVmX3Bvb2wuZW50cnlfbGlzdCwgbGlzdCl7CiAJCQlsaXN0X2RlbCgmcG9vbF9lbnRyeS0+bGlzdCk7CkBAIC0yNDYsNyArMTk2LDcgQEAKIAl2b2lkICpwdHI7CiAJaW50IGksIGo7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiYWxvY3Bvb2wiKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCA1LCAiYWxvY3Bvb2wiKTsKIAlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+cWRpby5pbml0X3Bvb2wuYnVmX2NvdW50OyArK2kpIHsKIAkJcG9vbF9lbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCpwb29sX2VudHJ5KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghcG9vbF9lbnRyeSkgewpAQCAtMjczLDcgKzIyMyw3IEBACiAKIGludCBxZXRoX3JlYWxsb2NfYnVmZmVyX3Bvb2woc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgaW50IGJ1ZmNudCkKIHsKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAicmVhbGNicCIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJyZWFsY2JwIik7CiAKIAlpZiAoKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfRE9XTikgJiYKIAkgICAgKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfUkVDT1ZFUikpCkBAIC0yOTMsNyArMjQzLDcgQEAKIAlpbnQgcmM7CiAJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImlzc254cmQiKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCA1LCAiaXNzbnhyZCIpOwogCWlmIChjYXJkLT5yZWFkLnN0YXRlICE9IENIX1NUQVRFX1VQKQogCQlyZXR1cm4gLUVJTzsKIAlpb2IgPSBxZXRoX2dldF9idWZmZXIoJmNhcmQtPnJlYWQpOwpAQCAtMzA1LDEzICsyNTUsMTQgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXFldGhfc2V0dXBfY2N3KCZjYXJkLT5yZWFkLCBpb2ItPmRhdGEsIFFFVEhfQlVGU0laRSk7Ci0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgIm5vaXJxcG5kIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNiwgIm5vaXJxcG5kIik7CiAJcmMgPSBjY3dfZGV2aWNlX3N0YXJ0KGNhcmQtPnJlYWQuY2N3ZGV2LCAmY2FyZC0+cmVhZC5jY3csCiAJCQkgICAgICAoYWRkcl90KSBpb2IsIDAsIDApOwogCWlmIChyYykgewogCQlRRVRIX0RCRl9NRVNTQUdFKDIsICIlcyBlcnJvciBpbiBzdGFydGluZyBuZXh0IHJlYWQgY2N3ISAiCiAJCQkicmM9JWlcbiIsIGRldl9uYW1lKCZjYXJkLT5nZGV2LT5kZXYpLCByYyk7CiAJCWF0b21pY19zZXQoJmNhcmQtPnJlYWQuaXJxX3BlbmRpbmcsIDApOworCQljYXJkLT5yZWFkX29yX3dyaXRlX3Byb2JsZW0gPSAxOwogCQlxZXRoX3NjaGVkdWxlX3JlY292ZXJ5KGNhcmQpOwogCQl3YWtlX3VwKCZjYXJkLT53YWl0X3EpOwogCX0KQEAgLTM2NCw3ICszMTUsNyBAQAogewogCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZCA9IE5VTEw7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiY2hraXBhZCIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDUsICJjaGtpcGFkIik7CiAJaWYgKElTX0lQQShpb2ItPmRhdGEpKSB7CiAJCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIFBEVV9FTkNBUFNVTEFUSU9OKGlvYi0+ZGF0YSk7CiAJCWlmIChJU19JUEFfUkVQTFkoY21kKSkgewpAQCAtNDAwLDEwICszNTEsMTAgQEAKIAkJCWNhc2UgSVBBX0NNRF9NT0RDQ0lEOgogCQkJCXJldHVybiBjbWQ7CiAJCQljYXNlIElQQV9DTURfUkVHSVNURVJfTE9DQUxfQUREUjoKLQkJCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAiaXJsYSIpOworCQkJCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDMsICJpcmxhIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIElQQV9DTURfVU5SRUdJU1RFUl9MT0NBTF9BRERSOgotCQkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJ1cmxhIik7CisJCQkJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMywgInVybGEiKTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiUmVjZWl2ZWQgZGF0YSBpcyBJUEEgIgpAQCAtNDIwLDcgKzM3MSw3IEBACiAJc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LCAqcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgImNsaXBhbHN0Iik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgImNsaXBhbHN0Iik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXBseSwgciwgJmNhcmQtPmNtZF93YWl0ZXJfbGlzdCwgbGlzdCkgewpAQCAtNDMyLDYgKzM4Myw3IEBACiAJCXFldGhfcHV0X3JlcGx5KHJlcGx5KTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCWF0b21pY19zZXQoJmNhcmQtPndyaXRlLmlycV9wZW5kaW5nLCAwKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHFldGhfY2xlYXJfaXBhY21kX2xpc3QpOwogCkBAIC00NDgsOSArNDAwLDkgQEAKIAkJCSAgIGJ1ZmZlcls0XSwKIAkJCSAgICgoYnVmZmVyWzRdID09IDB4MjIpID8KIAkJCSAgICAiIC0tIHRyeSBhbm90aGVyIHBvcnRuYW1lIiA6ICIiKSk7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJja2lkeHJlcyIpOwotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiIGlkeHRlcm0iKTsKLQkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDIsICIgIHJjJWQiLCAtRUlPKTsKKwkJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgImNraWR4cmVzIik7CisJCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICIgaWR4dGVybSIpOworCQlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgMiwgIiAgcmMlZCIsIC1FSU8pOwogCQlpZiAoYnVmZmVyWzRdID09IDB4ZjYpIHsKIAkJCWRldl9lcnIoJmNhcmQtPmdkZXYtPmRldiwKIAkJCSJUaGUgcWV0aCBkZXZpY2UgaXMgbm90IGNvbmZpZ3VyZWQgIgpAQCAtNDY3LDggKzQxOSw4IEBACiB7CiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJzZXR1cGNjdyIpOwogCWNhcmQgPSBDQVJEX0ZST01fQ0RFVihjaGFubmVsLT5jY3dkZXYpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDQsICJzZXR1cGNjdyIpOwogCWlmIChjaGFubmVsID09ICZjYXJkLT5yZWFkKQogCQltZW1jcHkoJmNoYW5uZWwtPmNjdywgUkVBRF9DQ1csIHNpemVvZihzdHJ1Y3QgY2N3MSkpOwogCWVsc2UKQEAgLTQ4MSw3ICs0MzMsNyBAQAogewogCV9fdTggaW5kZXg7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA2LCAiZ2V0YnVmZiIpOworCVFFVEhfQ0FSRF9URVhUKENBUkRfRlJPTV9DREVWKGNoYW5uZWwtPmNjd2RldiksIDYsICJnZXRidWZmIik7CiAJaW5kZXggPSBjaGFubmVsLT5pb19idWZfbm87CiAJZG8gewogCQlpZiAoY2hhbm5lbC0+aW9iW2luZGV4XS5zdGF0ZSA9PSBCVUZfU1RBVEVfRlJFRSkgewpAQCAtNTAyLDcgKzQ1NCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJyZWxidWZmIik7CisJUUVUSF9DQVJEX1RFWFQoQ0FSRF9GUk9NX0NERVYoY2hhbm5lbC0+Y2N3ZGV2KSwgNiwgInJlbGJ1ZmYiKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbm5lbC0+aW9iX2xvY2ssIGZsYWdzKTsKIAltZW1zZXQoaW9iLT5kYXRhLCAwLCBRRVRIX0JVRlNJWkUpOwogCWlvYi0+c3RhdGUgPSBCVUZfU1RBVEVfRlJFRTsKQEAgLTU1Myw5ICs1MDUsOCBAQAogCWludCBrZWVwX3JlcGx5OwogCWludCByYyA9IDA7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCAic25kY3RsY2IiKTsKLQogCWNhcmQgPSBDQVJEX0ZST01fQ0RFVihjaGFubmVsLT5jY3dkZXYpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDQsICJzbmRjdGxjYiIpOwogCXJjID0gcWV0aF9jaGVja19pZHhfcmVzcG9uc2UoY2FyZCwgaW9iLT5kYXRhKTsKIAlzd2l0Y2ggKHJjKSB7CiAJY2FzZSAwOgpAQCAtNTYzLDYgKzUxNCw3IEBACiAJY2FzZSAtRUlPOgogCQlxZXRoX2NsZWFyX2lwYWNtZF9saXN0KGNhcmQpOwogCQlxZXRoX3NjaGVkdWxlX3JlY292ZXJ5KGNhcmQpOworCQkvKiBmYWxsIHRocm91Z2ggKi8KIAlkZWZhdWx0OgogCQlnb3RvIG91dDsKIAl9CkBAIC03MjIsNyArNjc0LDcgQEAKIAogdm9pZCBxZXRoX3NjaGVkdWxlX3JlY292ZXJ5KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCiB7Ci0JUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgInN0YXJ0cmVjIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgInN0YXJ0cmVjIik7CiAJaWYgKHFldGhfc2V0X3RocmVhZF9zdGFydF9iaXQoY2FyZCwgUUVUSF9SRUNPVkVSX1RIUkVBRCkgPT0gMCkKIAkJc2NoZWR1bGVfd29yaygmY2FyZC0+a2VybmVsX3RocmVhZF9zdGFydGVyKTsKIH0KQEAgLTczMiwxNSArNjg0LDE3IEBACiB7CiAJaW50IGRzdGF0LCBjc3RhdDsKIAljaGFyICpzZW5zZTsKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOwogCiAJc2Vuc2UgPSAoY2hhciAqKSBpcmItPmVjdzsKIAljc3RhdCA9IGlyYi0+c2Nzdy5jbWQuY3N0YXQ7CiAJZHN0YXQgPSBpcmItPnNjc3cuY21kLmRzdGF0OworCWNhcmQgPSBDQVJEX0ZST01fQ0RFVihjZGV2KTsKIAogCWlmIChjc3RhdCAmIChTQ0hOX1NUQVRfQ0hOX0NUUkxfQ0hLIHwgU0NITl9TVEFUX0lOVEZfQ1RSTF9DSEsgfAogCQkgICAgIFNDSE5fU1RBVF9DSE5fREFUQV9DSEsgfCBTQ0hOX1NUQVRfQ0hBSU5fQ0hFQ0sgfAogCQkgICAgIFNDSE5fU1RBVF9QUk9UX0NIRUNLIHwgU0NITl9TVEFUX1BST0dfQ0hFQ0spKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJDR0VOQ0hLIik7CisJCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJDR0VOQ0hLIik7CiAJCWRldl93YXJuKCZjZGV2LT5kZXYsICJUaGUgcWV0aCBkZXZpY2UgZHJpdmVyICIKIAkJCSJmYWlsZWQgdG8gcmVjb3ZlciBhbiBlcnJvciBvbiB0aGUgZGV2aWNlXG4iKTsKIAkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiJXMgY2hlY2sgb24gZGV2aWNlIGRzdGF0PXgleCwgY3N0YXQ9eCV4XG4iLApAQCAtNzUzLDIzICs3MDcsMjMgQEAKIAlpZiAoZHN0YXQgJiBERVZfU1RBVF9VTklUX0NIRUNLKSB7CiAJCWlmIChzZW5zZVtTRU5TRV9SRVNFVFRJTkdfRVZFTlRfQllURV0gJgogCQkgICAgU0VOU0VfUkVTRVRUSU5HX0VWRU5UX0ZMQUcpIHsKLQkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJSRVZJTkQiKTsKKwkJCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJSRVZJTkQiKTsKIAkJCXJldHVybiAxOwogCQl9CiAJCWlmIChzZW5zZVtTRU5TRV9DT01NQU5EX1JFSkVDVF9CWVRFXSAmCiAJCSAgICBTRU5TRV9DT01NQU5EX1JFSkVDVF9GTEFHKSB7Ci0JCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiQ01EUkVKaSIpOworCQkJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgIkNNRFJFSmkiKTsKIAkJCXJldHVybiAxOwogCQl9CiAJCWlmICgoc2Vuc2VbMl0gPT0gMHhhZikgJiYgKHNlbnNlWzNdID09IDB4ZmUpKSB7Ci0JCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiQUZGRSIpOworCQkJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgIkFGRkUiKTsKIAkJCXJldHVybiAxOwogCQl9CiAJCWlmICgoIXNlbnNlWzBdKSAmJiAoIXNlbnNlWzFdKSAmJiAoIXNlbnNlWzJdKSAmJiAoIXNlbnNlWzNdKSkgewotCQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgIlpFUk9TRU4iKTsKKwkJCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJaRVJPU0VOIik7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiREdFTkNISyIpOworCQlRRVRIX0NBUkRfVEVYVChjYXJkLCAyLCAiREdFTkNISyIpOwogCQkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAwOwpAQCAtNzc4LDYgKzczMiwxMCBAQAogc3RhdGljIGxvbmcgX19xZXRoX2NoZWNrX2lyYl9lcnJvcihzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwKIAkJdW5zaWduZWQgbG9uZyBpbnRwYXJtLCBzdHJ1Y3QgaXJiICppcmIpCiB7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKKworCWNhcmQgPSBDQVJEX0ZST01fQ0RFVihjZGV2KTsKKwogCWlmICghSVNfRVJSKGlyYikpCiAJCXJldHVybiAwOwogCkBAIC03ODUsMTcgKzc0MywxNSBAQAogCWNhc2UgLUVJTzoKIAkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiJXMgaS9vLWVycm9yIG9uIGRldmljZVxuIiwKIAkJCWRldl9uYW1lKCZjZGV2LT5kZXYpKTsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImNraXJiZXJyIik7Ci0JCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAyLCAiICByYyVkIiwgLUVJTyk7CisJCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJja2lyYmVyciIpOworCQlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgMiwgIiAgcmMlZCIsIC1FSU8pOwogCQlicmVhazsKIAljYXNlIC1FVElNRURPVVQ6CiAJCWRldl93YXJuKCZjZGV2LT5kZXYsICJBIGhhcmR3YXJlIG9wZXJhdGlvbiB0aW1lZCBvdXQiCiAJCQkiIG9uIHRoZSBkZXZpY2VcbiIpOwotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiY2tpcmJlcnIiKTsKLQkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDIsICIgIHJjJWQiLCAtRVRJTUVET1VUKTsKKwkJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgImNraXJiZXJyIik7CisJCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCAyLCAiICByYyVkIiwgLUVUSU1FRE9VVCk7CiAJCWlmIChpbnRwYXJtID09IFFFVEhfUkNEX1BBUk0pIHsKLQkJCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBDQVJEX0ZST01fQ0RFVihjZGV2KTsKLQogCQkJaWYgKGNhcmQgJiYgKGNhcmQtPmRhdGEuY2N3ZGV2ID09IGNkZXYpKSB7CiAJCQkJY2FyZC0+ZGF0YS5zdGF0ZSA9IENIX1NUQVRFX0RPV047CiAJCQkJd2FrZV91cCgmY2FyZC0+d2FpdF9xKTsKQEAgLTgwNSw4ICs3NjEsOCBAQAogCWRlZmF1bHQ6CiAJCVFFVEhfREJGX01FU1NBR0UoMiwgIiVzIHVua25vd24gZXJyb3IgJWxkIG9uIGRldmljZVxuIiwKIAkJCWRldl9uYW1lKCZjZGV2LT5kZXYpLCBQVFJfRVJSKGlyYikpOwotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiY2tpcmJlcnIiKTsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgIiAgcmM/Pz8iKTsKKwkJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgImNraXJiZXJyIik7CisJCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICIgIHJjPz8/Iik7CiAJfQogCXJldHVybiBQVFJfRVJSKGlyYik7CiB9CkBAIC04MjIsOCArNzc4LDYgQEAKIAlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7CiAJX191OCBpbmRleDsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJpcnEiKTsKLQogCWlmIChfX3FldGhfY2hlY2tfaXJiX2Vycm9yKGNkZXYsIGludHBhcm0sIGlyYikpCiAJCXJldHVybjsKIAljc3RhdCA9IGlyYi0+c2Nzdy5jbWQuY3N0YXQ7CkBAIC04MzMsMTUgKzc4NywxNyBAQAogCWlmICghY2FyZCkKIAkJcmV0dXJuOwogCisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNSwgImlycSIpOworCiAJaWYgKGNhcmQtPnJlYWQuY2N3ZGV2ID09IGNkZXYpIHsKIAkJY2hhbm5lbCA9ICZjYXJkLT5yZWFkOwotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAicmVhZCIpOworCQlRRVRIX0NBUkRfVEVYVChjYXJkLCA1LCAicmVhZCIpOwogCX0gZWxzZSBpZiAoY2FyZC0+d3JpdGUuY2N3ZGV2ID09IGNkZXYpIHsKIAkJY2hhbm5lbCA9ICZjYXJkLT53cml0ZTsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgIndyaXRlIik7CisJCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDUsICJ3cml0ZSIpOwogCX0gZWxzZSB7CiAJCWNoYW5uZWwgPSAmY2FyZC0+ZGF0YTsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImRhdGEiKTsKKwkJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNSwgImRhdGEiKTsKIAl9CiAJYXRvbWljX3NldCgmY2hhbm5lbC0+aXJxX3BlbmRpbmcsIDApOwogCkBAIC04NTcsMTIgKzgxMywxMiBAQAogCQlnb3RvIG91dDsKIAogCWlmIChpbnRwYXJtID09IFFFVEhfQ0xFQVJfQ0hBTk5FTF9QQVJNKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJjbHJjaHBhciIpOworCQlRRVRIX0NBUkRfVEVYVChjYXJkLCA2LCAiY2xyY2hwYXIiKTsKIAkJLyogd2UgZG9uJ3QgaGF2ZSB0byBoYW5kbGUgdGhpcyBmdXJ0aGVyICovCiAJCWludHBhcm0gPSAwOwogCX0KIAlpZiAoaW50cGFybSA9PSBRRVRIX0hBTFRfQ0hBTk5FTF9QQVJNKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJobHRjaHBhciIpOworCQlRRVRIX0NBUkRfVEVYVChjYXJkLCA2LCAiaGx0Y2hwYXIiKTsKIAkJLyogd2UgZG9uJ3QgaGF2ZSB0byBoYW5kbGUgdGhpcyBmdXJ0aGVyICovCiAJCWludHBhcm0gPSAwOwogCX0KQEAgLTk2Myw3ICs5MTksNyBAQAogewogCWludCBpLCBqOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImNsZWFycWRiZiIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJjbGVhcnFkYmYiKTsKIAkvKiBjbGVhciBvdXRib3VuZCBidWZmZXJzIHRvIGZyZWUgc2ticyAqLwogCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5xZGlvLm5vX291dF9xdWV1ZXM7ICsraSkKIAkJaWYgKGNhcmQtPnFkaW8ub3V0X3FzW2ldKSB7CkBAIC05NzgsNyArOTM0LDYgQEAKIHsKIAlzdHJ1Y3QgcWV0aF9idWZmZXJfcG9vbF9lbnRyeSAqcG9vbF9lbnRyeSwgKnRtcDsKIAlpbnQgaSA9IDA7Ci0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImZyZWVwb29sIik7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvb2xfZW50cnksIHRtcCwKIAkJCQkgJmNhcmQtPnFkaW8uaW5pdF9wb29sLmVudHJ5X2xpc3QsIGluaXRfbGlzdCl7CiAJCWZvciAoaSA9IDA7IGkgPCBRRVRIX01BWF9CVUZGRVJfRUxFTUVOVFMoY2FyZCk7ICsraSkKQEAgLTk5Miw3ICs5NDcsNiBAQAogewogCWludCBpLCBqOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImZyZWVxZGJmIik7CiAJaWYgKGF0b21pY194Y2hnKCZjYXJkLT5xZGlvLnN0YXRlLCBRRVRIX1FESU9fVU5JTklUSUFMSVpFRCkgPT0KIAkJUUVUSF9RRElPX1VOSU5JVElBTElaRUQpCiAJCXJldHVybjsKQEAgLTEwODksNyArMTA0Myw3IEBACiAJaW50IHJjID0gMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT50aHJlYWRfbWFza19sb2NrLCBmbGFncyk7Ci0JUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDQsICIgICUwMnglMDJ4JTAyeCIsCisJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDQsICIgICUwMnglMDJ4JTAyeCIsCiAJCQkodTgpIGNhcmQtPnRocmVhZF9zdGFydF9tYXNrLAogCQkJKHU4KSBjYXJkLT50aHJlYWRfYWxsb3dlZF9tYXNrLAogCQkJKHU4KSBjYXJkLT50aHJlYWRfcnVubmluZ19tYXNrKTsKQEAgLTExMDIsNyArMTA1Niw3IEBACiB7CiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcWV0aF9jYXJkLAogCQkJCQlrZXJuZWxfdGhyZWFkX3N0YXJ0ZXIpOwotCVFFVEhfREJGX1RFWFQoVFJBQ0UgLCAyLCAic3RydGhyZCIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQgLCAyLCAic3RydGhyZCIpOwogCiAJaWYgKGNhcmQtPnJlYWQuc3RhdGUgIT0gQ0hfU1RBVEVfVVAgJiYKIAkgICAgY2FyZC0+d3JpdGUuc3RhdGUgIT0gQ0hfU1RBVEVfVVApCkBAIC0xMTI0LDYgKzEwNzgsNyBAQAogCWNhcmQtPnN0YXRlID0gQ0FSRF9TVEFURV9ET1dOOwogCWNhcmQtPmxhbl9vbmxpbmUgPSAwOwogCWNhcmQtPnVzZV9oYXJkX3N0b3AgPSAwOworCWNhcmQtPnJlYWRfb3Jfd3JpdGVfcHJvYmxlbSA9IDA7CiAJY2FyZC0+ZGV2ID0gTlVMTDsKIAlzcGluX2xvY2tfaW5pdCgmY2FyZC0+dmxhbmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZjYXJkLT5tY2xvY2spOwpAQCAtMTEzMiw2ICsxMDg3LDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmY2FyZC0+aXBfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPnRocmVhZF9tYXNrX2xvY2spOwogCW11dGV4X2luaXQoJmNhcmQtPmNvbmZfbXV0ZXgpOworCW11dGV4X2luaXQoJmNhcmQtPmRpc2NpcGxpbmVfbXV0ZXgpOwogCWNhcmQtPnRocmVhZF9zdGFydF9tYXNrID0gMDsKIAljYXJkLT50aHJlYWRfYWxsb3dlZF9tYXNrID0gMDsKIAljYXJkLT50aHJlYWRfcnVubmluZ19tYXNrID0gMDsKQEAgLTEyMjksOCArMTE4NSw4IEBACiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKIAlpbnQgcmM7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAiY2xlYXJjaCIpOwogCWNhcmQgPSBDQVJEX0ZST01fQ0RFVihjaGFubmVsLT5jY3dkZXYpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDMsICJjbGVhcmNoIik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGNoYW5uZWwtPmNjd2RldiksIGZsYWdzKTsKIAlyYyA9IGNjd19kZXZpY2VfY2xlYXIoY2hhbm5lbC0+Y2N3ZGV2LCBRRVRIX0NMRUFSX0NIQU5ORUxfUEFSTSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2soY2hhbm5lbC0+Y2N3ZGV2KSwgZmxhZ3MpOwpAQCAtMTI1Myw4ICsxMjA5LDggQEAKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOwogCWludCByYzsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJoYWx0Y2giKTsKIAljYXJkID0gQ0FSRF9GUk9NX0NERVYoY2hhbm5lbC0+Y2N3ZGV2KTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCAzLCAiaGFsdGNoIik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGNoYW5uZWwtPmNjd2RldiksIGZsYWdzKTsKIAlyYyA9IGNjd19kZXZpY2VfaGFsdChjaGFubmVsLT5jY3dkZXYsIFFFVEhfSEFMVF9DSEFOTkVMX1BBUk0pOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKGNoYW5uZWwtPmNjd2RldiksIGZsYWdzKTsKQEAgLTEyNzQsNyArMTIzMCw3IEBACiB7CiAJaW50IHJjMSA9IDAsIHJjMiA9IDAsIHJjMyA9IDA7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAiaGFsdGNocyIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDMsICJoYWx0Y2hzIik7CiAJcmMxID0gcWV0aF9oYWx0X2NoYW5uZWwoJmNhcmQtPnJlYWQpOwogCXJjMiA9IHFldGhfaGFsdF9jaGFubmVsKCZjYXJkLT53cml0ZSk7CiAJcmMzID0gcWV0aF9oYWx0X2NoYW5uZWwoJmNhcmQtPmRhdGEpOwpAQCAtMTI4OSw3ICsxMjQ1LDcgQEAKIHsKIAlpbnQgcmMxID0gMCwgcmMyID0gMCwgcmMzID0gMDsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJjbGVhcmNocyIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDMsICJjbGVhcmNocyIpOwogCXJjMSA9IHFldGhfY2xlYXJfY2hhbm5lbCgmY2FyZC0+cmVhZCk7CiAJcmMyID0gcWV0aF9jbGVhcl9jaGFubmVsKCZjYXJkLT53cml0ZSk7CiAJcmMzID0gcWV0aF9jbGVhcl9jaGFubmVsKCZjYXJkLT5kYXRhKTsKQEAgLTEzMDQsOCArMTI2MCw3IEBACiB7CiAJaW50IHJjID0gMDsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJjbGhhY3JkIik7Ci0JUUVUSF9EQkZfSEVYKFRSQUNFLCAzLCAmY2FyZCwgc2l6ZW9mKHZvaWQgKikpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDMsICJjbGhhY3JkIik7CiAKIAlpZiAoaGFsdCkKIAkJcmMgPSBxZXRoX2hhbHRfY2hhbm5lbHMoY2FyZCk7CkBAIC0xMzE4LDcgKzEyNzMsNyBAQAogewogCWludCByYyA9IDA7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAicWRpb2NsciIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDMsICJxZGlvY2xyIik7CiAJc3dpdGNoIChhdG9taWNfY21weGNoZygmY2FyZC0+cWRpby5zdGF0ZSwgUUVUSF9RRElPX0VTVEFCTElTSEVELAogCQlRRVRIX1FESU9fQ0xFQU5JTkcpKSB7CiAJY2FzZSBRRVRIX1FESU9fRVNUQUJMSVNIRUQ6CkBAIC0xMzI5LDcgKzEyODQsNyBAQAogCQkJcmMgPSBxZGlvX3NodXRkb3duKENBUkRfRERFVihjYXJkKSwKIAkJCQlRRElPX0ZMQUdfQ0xFQU5VUF9VU0lOR19DTEVBUik7CiAJCWlmIChyYykKLQkJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAzLCAiMWVyciVkIiwgcmMpOworCQkJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDMsICIxZXJyJWQiLCByYyk7CiAJCXFkaW9fZnJlZShDQVJEX0RERVYoY2FyZCkpOwogCQlhdG9taWNfc2V0KCZjYXJkLT5xZGlvLnN0YXRlLCBRRVRIX1FESU9fQUxMT0NBVEVEKTsKIAkJYnJlYWs7CkBAIC0xMzQwLDcgKzEyOTUsNyBAQAogCX0KIAlyYyA9IHFldGhfY2xlYXJfaGFsdF9jYXJkKGNhcmQsIHVzZV9oYWx0KTsKIAlpZiAocmMpCi0JCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAzLCAiMmVyciVkIiwgcmMpOworCQlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgMywgIjJlcnIlZCIsIHJjKTsKIAljYXJkLT5zdGF0ZSA9IENBUkRfU1RBVEVfRE9XTjsKIAlyZXR1cm4gcmM7CiB9CkBAIC0xNDMyLDE0ICsxMzg3LDEwIEBACiB7CiAJc3dpdGNoIChjYXJkLT5pbmZvLnR5cGUpIHsKIAljYXNlIFFFVEhfQ0FSRF9UWVBFX0lRRDoKLQkJaWYgKGNhcmQtPmlwYXRvLmVuYWJsZWQpCi0JCQljYXJkLT5pbmZvLmZ1bmNfbGV2ZWwgPQotCQkJCVFFVEhfSURYX0ZVTkNfTEVWRUxfSVFEX0VOQV9JUEFUOwotCQllbHNlCi0JCQljYXJkLT5pbmZvLmZ1bmNfbGV2ZWwgPQotCQkJCVFFVEhfSURYX0ZVTkNfTEVWRUxfSVFEX0RJU19JUEFUOworCQljYXJkLT5pbmZvLmZ1bmNfbGV2ZWwgPQlRRVRIX0lEWF9GVU5DX0xFVkVMX0lRRDsKIAkJYnJlYWs7CiAJY2FzZSBRRVRIX0NBUkRfVFlQRV9PU0Q6CisJY2FzZSBRRVRIX0NBUkRfVFlQRV9PU046CiAJCWNhcmQtPmluZm8uZnVuY19sZXZlbCA9IFFFVEhfSURYX0ZVTkNfTEVWRUxfT1NEOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTYzNywxNSArMTU4OCwxOCBAQAogCQkJCSJob3N0XG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIFFFVEhfSURYX0FDVF9FUlJfQVVUSDoKKwkJY2FzZSBRRVRIX0lEWF9BQ1RfRVJSX0FVVEhfVVNFUjoKIAkJCWRldl9lcnIoJmNhcmQtPnJlYWQuY2N3ZGV2LT5kZXYsCiAJCQkJIlNldHRpbmcgdGhlIGRldmljZSBvbmxpbmUgZmFpbGVkIGJlY2F1c2Ugb2YgIgotCQkJCSJpbnN1ZmZpY2llbnQgTFBBUiBhdXRob3JpemF0aW9uXG4iKTsKKwkJCQkiaW5zdWZmaWNpZW50IGF1dGhvcml6YXRpb25cbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlRRVRIX0RCRl9NRVNTQUdFKDIsICIlcyBJRFhfQUNUSVZBVEUgb24gcmVhZCBjaGFubmVsOiIKIAkJCQkiIG5lZ2F0aXZlIHJlcGx5XG4iLAogCQkJCWRldl9uYW1lKCZjYXJkLT5yZWFkLmNjd2Rldi0+ZGV2KSk7CiAJCX0KKwkJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDIsICJpZHhyZWFkJWMiLAorCQkJUUVUSF9JRFhfQUNUX0NBVVNFX0NPREUoaW9iLT5kYXRhKSk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTcwNSw4ICsxNjU5LDEyIEBACiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0LCBldmVudF90aW1lb3V0OwogCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJzZW5kY3RsIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgInNlbmRjdGwiKTsKIAorCWlmIChjYXJkLT5yZWFkX29yX3dyaXRlX3Byb2JsZW0pIHsKKwkJcWV0aF9yZWxlYXNlX2J1ZmZlcihpb2ItPmNoYW5uZWwsIGlvYik7CisJCXJldHVybiAtRUlPOworCX0KIAlyZXBseSA9IHFldGhfYWxsb2NfcmVwbHkoY2FyZCk7CiAJaWYgKCFyZXBseSkgewogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE3MzIsNyArMTY5MCw3IEBACiAJCWV2ZW50X3RpbWVvdXQgPSBRRVRIX1RJTUVPVVQ7CiAJdGltZW91dCA9IGppZmZpZXMgKyBldmVudF90aW1lb3V0OwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgIm5vaXJxcG5kIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNiwgIm5vaXJxcG5kIik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGNhcmQtPndyaXRlLmNjd2RldiksIGZsYWdzKTsKIAlyYyA9IGNjd19kZXZpY2Vfc3RhcnQoY2FyZC0+d3JpdGUuY2N3ZGV2LCAmY2FyZC0+d3JpdGUuY2N3LAogCQkJICAgICAgKGFkZHJfdCkgaW9iLCAwLCAwKTsKQEAgLTE3NDEsNyArMTY5OSw3IEBACiAJCVFFVEhfREJGX01FU1NBR0UoMiwgIiVzIHFldGhfc2VuZF9jb250cm9sX2RhdGE6ICIKIAkJCSJjY3dfZGV2aWNlX3N0YXJ0IHJjID0gJWlcbiIsCiAJCQlkZXZfbmFtZSgmY2FyZC0+d3JpdGUuY2N3ZGV2LT5kZXYpLCByYyk7Ci0JCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAyLCAiIGVyciVkIiwgcmMpOworCQlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgMiwgIiBlcnIlZCIsIHJjKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAkJbGlzdF9kZWxfaW5pdCgmcmVwbHktPmxpc3QpOwogCQlxZXRoX3B1dF9yZXBseShyZXBseSk7CkBAIC0xNzc4LDYgKzE3MzYsOSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJlcGx5LT5jYXJkLT5sb2NrLCBmbGFncyk7CiAJcmVwbHktPnJjID0gLUVUSU1FOwogCWF0b21pY19pbmMoJnJlcGx5LT5yZWNlaXZlZCk7CisJYXRvbWljX3NldCgmY2FyZC0+d3JpdGUuaXJxX3BlbmRpbmcsIDApOworCXFldGhfcmVsZWFzZV9idWZmZXIoaW9iLT5jaGFubmVsLCBpb2IpOworCWNhcmQtPndyaXRlLmJ1Zl9ubyA9IChjYXJkLT53cml0ZS5idWZfbm8gKyAxKSAlIFFFVEhfQ01EX0JVRkZFUl9OTzsKIAl3YWtlX3VwKCZyZXBseS0+d2FpdF9xKTsKIAlyYyA9IHJlcGx5LT5yYzsKIAlxZXRoX3B1dF9yZXBseShyZXBseSk7CkBAIC0xOTc4LDcgKzE5MzksNyBAQAogCQljYXJkLT5pbmZvLmxpbmtfdHlwZSA9IGxpbmtfdHlwZTsKIAl9IGVsc2UKIAkJY2FyZC0+aW5mby5saW5rX3R5cGUgPSAwOwotCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAibGluayVkIiwgbGlua190eXBlKTsKKwlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgImxpbmslZCIsIGNhcmQtPmluZm8ubGlua190eXBlKTsKIAlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIiAgcmMlZCIsIGlvYi0+cmMpOwogCXJldHVybiAwOwogfQpAQCAtMjAzNSw3ICsxOTk2LDcgQEAKIAkJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgIm9sbWxpbWl0Iik7CiAJCWRldl9lcnIoJmNhcmQtPmdkZXYtPmRldiwgIkEgY29ubmVjdGlvbiBjb3VsZCBub3QgYmUgIgogCQkJImVzdGFibGlzaGVkIGJlY2F1c2Ugb2YgYW4gT0xNIGxpbWl0XG4iKTsKLQkJcmMgPSAtRU1MSU5LOworCQlpb2ItPnJjID0gLUVNTElOSzsKIAl9CiAJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIgIHJjJWQiLCBpb2ItPnJjKTsKIAlyZXR1cm4gcmM7CkBAIC0yMzM1LDcgKzIyOTYsNyBAQAogewogCXN0cnVjdCBxZXRoX2J1ZmZlcl9wb29sX2VudHJ5ICplbnRyeTsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJpbndya2xzdCIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDUsICJpbndya2xzdCIpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwKIAkJCSAgICAmY2FyZC0+cWRpby5pbml0X3Bvb2wuZW50cnlfbGlzdCwgaW5pdF9saXN0KSB7CkBAIC0yNTIyLDcgKzI0ODMsNyBAQAogCWludCByYzsKIAljaGFyIHByb3RfdHlwZTsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJzZW5kaXBhIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgInNlbmRpcGEiKTsKIAogCWlmIChjYXJkLT5vcHRpb25zLmxheWVyMikKIAkJaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU04pCkBAIC0yNTM0LDYgKzI0OTUsMTAgQEAKIAlxZXRoX3ByZXBhcmVfaXBhX2NtZChjYXJkLCBpb2IsIHByb3RfdHlwZSk7CiAJcmMgPSBxZXRoX3NlbmRfY29udHJvbF9kYXRhKGNhcmQsIElQQV9DTURfTEVOR1RILAogCQkJCQkJaW9iLCByZXBseV9jYiwgcmVwbHlfcGFyYW0pOworCWlmIChyYyA9PSAtRVRJTUUpIHsKKwkJcWV0aF9jbGVhcl9pcGFjbWRfbGlzdChjYXJkKTsKKwkJcWV0aF9zY2hlZHVsZV9yZWNvdmVyeShjYXJkKTsKKwl9CiAJcmV0dXJuIHJjOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9zZW5kX2lwYV9jbWQpOwpAQCAtMjU4Miw3ICsyNTQ3LDcgQEAKIHsKIAlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCAiZGVmYWRwY2IiKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCA0LCAiZGVmYWRwY2IiKTsKIAogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7CiAJaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlID09IDApCkBAIC0yNTk3LDcgKzI1NjIsNyBAQAogewogCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJxdXlhZHBjYiIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDMsICJxdXlhZHBjYiIpOwogCiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKIAlpZiAoY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5kYXRhLnF1ZXJ5X2NtZHNfc3VwcC5sYW5fdHlwZSAmIDB4N2YpIHsKQEAgLTI2MzMsNyArMjU5OCw3IEBACiAJaW50IHJjOwogCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJxdWVyeWFkcCIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDMsICJxdWVyeWFkcCIpOwogCWlvYiA9IHFldGhfZ2V0X2FkYXB0ZXJfY21kKGNhcmQsIElQQV9TRVRBRFBfUVVFUllfQ09NTUFORFNfU1VQUE9SVEVELAogCQkJCSAgIHNpemVvZihzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YWRwcGFybXMpKTsKIAlyYyA9IHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgcWV0aF9xdWVyeV9zZXRhZGFwdGVycGFybXNfY2IsIE5VTEwpOwpAQCAtMjY0NSwxMyArMjYxMCwxMiBAQAogCQl1bnNpZ25lZCBpbnQgcWRpb19lcnJvciwgY29uc3QgY2hhciAqZGJmdGV4dCkKIHsKIAlpZiAocWRpb19lcnJvcikgewotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCBkYmZ0ZXh0KTsKLQkJUUVUSF9EQkZfVEVYVChRRVJSLCAyLCBkYmZ0ZXh0KTsKLQkJUUVUSF9EQkZfVEVYVF8oUUVSUiwgMiwgIiBGMTU9JTAyWCIsCisJCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsIGRiZnRleHQpOworCQlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgMiwgIiBGMTU9JTAyWCIsCiAJCQkgICAgICAgYnVmLT5lbGVtZW50WzE1XS5mbGFncyAmIDB4ZmYpOwotCQlRRVRIX0RCRl9URVhUXyhRRVJSLCAyLCAiIEYxND0lMDJYIiwKKwkJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDIsICIgRjE0PSUwMlgiLAogCQkJICAgICAgIGJ1Zi0+ZWxlbWVudFsxNF0uZmxhZ3MgJiAweGZmKTsKLQkJUUVUSF9EQkZfVEVYVF8oUUVSUiwgMiwgIiBxZXJyPSVYIiwgcWRpb19lcnJvcik7CisJCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCAyLCAiIHFlcnI9JVgiLCBxZGlvX2Vycm9yKTsKIAkJaWYgKChidWYtPmVsZW1lbnRbMTVdLmZsYWdzICYgMHhmZikgPT0gMHgxMikgewogCQkJY2FyZC0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkJcmV0dXJuIDA7CkBAIC0yNzE3LDggKzI2ODEsNyBAQAogCQlpZiAocmMpIHsKIAkJCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsCiAJCQkJIlFESU8gcmVwb3J0ZWQgYW4gZXJyb3IsIHJjPSVpXG4iLCByYyk7Ci0JCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAicWluYmVyciIpOwotCQkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDIsICIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKKwkJCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJxaW5iZXJyIik7CiAJCX0KIAkJcXVldWUtPm5leHRfYnVmX3RvX2luaXQgPSAocXVldWUtPm5leHRfYnVmX3RvX2luaXQgKyBjb3VudCkgJQogCQkJCQkgIFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7CkBAIC0yNzMxLDcgKzI2OTQsNyBAQAogewogCWludCBzYmFsZjE1ID0gYnVmZmVyLT5idWZmZXItPmVsZW1lbnRbMTVdLmZsYWdzICYgMHhmZjsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJoZHNuZGVyciIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDYsICJoZHNuZGVyciIpOwogCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKSB7CiAJCWlmIChzYmFsZjE1ID09IDApIHsKIAkJCXFkaW9fZXJyID0gMDsKQEAgLTI3NDcsOSArMjcxMCw4IEBACiAJaWYgKChzYmFsZjE1ID49IDE1KSAmJiAoc2JhbGYxNSA8PSAzMSkpCiAJCXJldHVybiBRRVRIX1NFTkRfRVJST1JfUkVUUlk7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCAxLCAibG5rZmFpbCIpOwotCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJXMiLCBDQVJEX0JVU19JRChjYXJkKSk7Ci0JUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDEsICIlMDR4ICUwMngiLAorCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDEsICJsbmtmYWlsIik7CisJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDEsICIlMDR4ICUwMngiLAogCQkgICAgICAgKHUxNilxZGlvX2VyciwgKHU4KXNiYWxmMTUpOwogCXJldHVybiBRRVRIX1NFTkRfRVJST1JfTElOS19GQUlMVVJFOwogfQpAQCAtMjc2NCw3ICsyNzI2LDcgQEAKIAkJaWYgKGF0b21pY19yZWFkKCZxdWV1ZS0+dXNlZF9idWZmZXJzKQogCQkgICAgPj0gUUVUSF9ISUdIX1dBVEVSTUFSS19QQUNLKXsKIAkJCS8qIHN3aXRjaCBub24tUEFDS0lORyAtPiBQQUNLSU5HICovCi0JCQlRRVRIX0RCRl9URVhUKFRSQUNFLCA2LCAibnAtPnBhY2siKTsKKwkJCVFFVEhfQ0FSRF9URVhUKHF1ZXVlLT5jYXJkLCA2LCAibnAtPnBhY2siKTsKIAkJCWlmIChxdWV1ZS0+Y2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykKIAkJCQlxdWV1ZS0+Y2FyZC0+cGVyZl9zdGF0cy5zY19kcF9wKys7CiAJCQlxdWV1ZS0+ZG9fcGFjayA9IDE7CkBAIC0yNzg3LDcgKzI3NDksNyBAQAogCQlpZiAoYXRvbWljX3JlYWQoJnF1ZXVlLT51c2VkX2J1ZmZlcnMpCiAJCSAgICA8PSBRRVRIX0xPV19XQVRFUk1BUktfUEFDSykgewogCQkJLyogc3dpdGNoIFBBQ0tJTkcgLT4gbm9uLVBBQ0tJTkcgKi8KLQkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJwYWNrLT5ucCIpOworCQkJUUVUSF9DQVJEX1RFWFQocXVldWUtPmNhcmQsIDYsICJwYWNrLT5ucCIpOwogCQkJaWYgKHF1ZXVlLT5jYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQogCQkJCXF1ZXVlLT5jYXJkLT5wZXJmX3N0YXRzLnNjX3BfZHArKzsKIAkJCXF1ZXVlLT5kb19wYWNrID0gMDsKQEAgLTI4OTYsOSArMjg1OCw4IEBACiAJCS8qIGlnbm9yZSB0ZW1wb3JhcnkgU0lHQSBlcnJvcnMgd2l0aG91dCBidXN5IGNvbmRpdGlvbiAqLwogCQlpZiAocmMgPT0gUURJT19FUlJPUl9TSUdBX1RBUkdFVCkKIAkJCXJldHVybjsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImZsdXNoYnVmIik7Ci0JCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAyLCAiIGVyciVkIiwgcmMpOwotCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMiwgIiVzIiwgQ0FSRF9EREVWX0lEKHF1ZXVlLT5jYXJkKSk7CisJCVFFVEhfQ0FSRF9URVhUKHF1ZXVlLT5jYXJkLCAyLCAiZmx1c2hidWYiKTsKKwkJUUVUSF9DQVJEX1RFWFRfKHF1ZXVlLT5jYXJkLCAyLCAiIGVyciVkIiwgcmMpOwogCiAJCS8qIHRoaXMgbXVzdCBub3QgaGFwcGVuIHVuZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzLiBpZiBpdAogCQkgKiBoYXBwZW5zIHNvbWV0aGluZyBpcyByZWFsbHkgd3JvbmcgLT4gcmVjb3ZlciAqLwpAQCAtMjk2MCwxMCArMjkyMSw5IEBACiAJaW50IGk7CiAJdW5zaWduZWQgcWV0aF9zZW5kX2VycjsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJxZG91aGRsIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNiwgInFkb3VoZGwiKTsKIAlpZiAocWRpb19lcnJvciAmIFFESU9fRVJST1JfQUNUSVZBVEVfQ0hFQ0tfQ09ORElUSU9OKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJhY2hrY29uZCIpOwotCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMiwgIiVzIiwgQ0FSRF9CVVNfSUQoY2FyZCkpOworCQlRRVRIX0NBUkRfVEVYVChjYXJkLCAyLCAiYWNoa2NvbmQiKTsKIAkJbmV0aWZfc3RvcF9xdWV1ZShjYXJkLT5kZXYpOwogCQlxZXRoX3NjaGVkdWxlX3JlY292ZXJ5KGNhcmQpOwogCQlyZXR1cm47CkBAIC0zMDMzLDEzICsyOTkzLDExIEBACiBpbnQgcWV0aF9nZXRfZWxlbWVudHNfbm8oc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgdm9pZCAqaGRyLAogCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBlbGVtcykKIHsKLQlpbnQgZWxlbWVudHNfbmVlZGVkID0gMDsKKwlpbnQgZGxlbiA9IHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbjsKKwlpbnQgZWxlbWVudHNfbmVlZGVkID0gUEZOX1VQKCh1bnNpZ25lZCBsb25nKXNrYi0+ZGF0YSArIGRsZW4gLSAxKSAtCisJCVBGTl9ET1dOKCh1bnNpZ25lZCBsb25nKXNrYi0+ZGF0YSk7CiAKLQlpZiAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA+IDApCi0JCWVsZW1lbnRzX25lZWRlZCA9IChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMSk7Ci0JaWYgKGVsZW1lbnRzX25lZWRlZCA9PSAwKQotCQllbGVtZW50c19uZWVkZWQgPSAxICsgKCgoKCh1bnNpZ25lZCBsb25nKSBza2ItPmRhdGEpICUKLQkJCQlQQUdFX1NJWkUpICsgc2tiLT5sZW4pID4+IFBBR0VfU0hJRlQpOworCWVsZW1lbnRzX25lZWRlZCArPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOwogCWlmICgoZWxlbWVudHNfbmVlZGVkICsgZWxlbXMpID4gUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpKSB7CiAJCVFFVEhfREJGX01FU1NBR0UoMiwgIkludmFsaWQgc2l6ZSBvZiBJUCBwYWNrZXQgIgogCQkJIihOdW1iZXI9JWQgLyBMZW5ndGg9JWQpLiBEaXNjYXJkZWQuXG4iLApAQCAtMzA1MCwxNSArMzAwOCwzNSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9nZXRfZWxlbWVudHNfbm8pOwogCitpbnQgcWV0aF9oZHJfY2hrX2FuZF9ib3VuY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbikKK3sKKwlpbnQgaHJvb20sIGlucGFnZSwgcmVzdDsKKworCWlmICgoKHVuc2lnbmVkIGxvbmcpc2tiLT5kYXRhICYgUEFHRV9NQVNLKSAhPQorCSAgICAoKCh1bnNpZ25lZCBsb25nKXNrYi0+ZGF0YSArIGxlbiAtIDEpICYgUEFHRV9NQVNLKSkgeworCQlocm9vbSA9IHNrYl9oZWFkcm9vbShza2IpOworCQlpbnBhZ2UgPSBQQUdFX1NJWkUgLSAoKHVuc2lnbmVkIGxvbmcpIHNrYi0+ZGF0YSAlIFBBR0VfU0laRSk7CisJCXJlc3QgPSBsZW4gLSBpbnBhZ2U7CisJCWlmIChyZXN0ID4gaHJvb20pCisJCQlyZXR1cm4gMTsKKwkJbWVtbW92ZShza2ItPmRhdGEgLSByZXN0LCBza2ItPmRhdGEsIHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbik7CisJCXNrYi0+ZGF0YSAtPSByZXN0OworCQlRRVRIX0RCRl9NRVNTQUdFKDIsICJza2IgYm91bmNlIGxlbjogJWQgcmVzdDogJWRcbiIsIGxlbiwgcmVzdCk7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9oZHJfY2hrX2FuZF9ib3VuY2UpOworCiBzdGF0aWMgaW5saW5lIHZvaWQgX19xZXRoX2ZpbGxfYnVmZmVyKHN0cnVjdCBza19idWZmICpza2IsCiAJc3RydWN0IHFkaW9fYnVmZmVyICpidWZmZXIsIGludCBpc190c28sIGludCAqbmV4dF9lbGVtZW50X3RvX2ZpbGwsCiAJaW50IG9mZnNldCkKIHsKLQlpbnQgbGVuZ3RoID0gc2tiLT5sZW47CisJaW50IGxlbmd0aCA9IHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbjsKIAlpbnQgbGVuZ3RoX2hlcmU7CiAJaW50IGVsZW1lbnQ7CiAJY2hhciAqZGF0YTsKLQlpbnQgZmlyc3RfbGFwIDsKKwlpbnQgZmlyc3RfbGFwLCBjbnQ7CisJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZzsKIAogCWVsZW1lbnQgPSAqbmV4dF9lbGVtZW50X3RvX2ZpbGw7CiAJZGF0YSA9IHNrYi0+ZGF0YTsKQEAgLTMwODEsMTAgKzMwNTksMTQgQEAKIAkJbGVuZ3RoIC09IGxlbmd0aF9oZXJlOwogCQlpZiAoIWxlbmd0aCkgewogCQkJaWYgKGZpcnN0X2xhcCkKLQkJCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPSAwOworCQkJCWlmIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKQorCQkJCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPQorCQkJCQkJU0JBTF9GTEFHU19GSVJTVF9GUkFHOworCQkJCWVsc2UKKwkJCQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmZsYWdzID0gMDsKIAkJCWVsc2UKIAkJCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPQotCQkJCSAgICBTQkFMX0ZMQUdTX0xBU1RfRlJBRzsKKwkJCQkgICAgU0JBTF9GTEFHU19NSURETEVfRlJBRzsKIAkJfSBlbHNlIHsKIAkJCWlmIChmaXJzdF9sYXApCiAJCQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmZsYWdzID0KQEAgLTMwOTcsNiArMzA3OSwxOCBAQAogCQllbGVtZW50Kys7CiAJCWZpcnN0X2xhcCA9IDA7CiAJfQorCisJZm9yIChjbnQgPSAwOyBjbnQgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBjbnQrKykgeworCQlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbY250XTsKKwkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmFkZHIgPSAoY2hhciAqKXBhZ2VfdG9fcGh5cyhmcmFnLT5wYWdlKQorCQkJKyBmcmFnLT5wYWdlX29mZnNldDsKKwkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmxlbmd0aCA9IGZyYWctPnNpemU7CisJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5mbGFncyA9IFNCQUxfRkxBR1NfTUlERExFX0ZSQUc7CisJCWVsZW1lbnQrKzsKKwl9CisKKwlpZiAoYnVmZmVyLT5lbGVtZW50W2VsZW1lbnQgLSAxXS5mbGFncykKKwkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnQgLSAxXS5mbGFncyA9IFNCQUxfRkxBR1NfTEFTVF9GUkFHOwogCSpuZXh0X2VsZW1lbnRfdG9fZmlsbCA9IGVsZW1lbnQ7CiB9CiAKQEAgLTMxMzcsMjAgKzMxMzEsMTYgQEAKIAkJYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCsrOwogCX0KIAotCWlmIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID09IDApCi0JCV9fcWV0aF9maWxsX2J1ZmZlcihza2IsIGJ1ZmZlciwgbGFyZ2Vfc2VuZCwKLQkJCQkoaW50ICopJmJ1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwsIG9mZnNldCk7Ci0JZWxzZQotCQlfX3FldGhfZmlsbF9idWZmZXJfZnJhZyhza2IsIGJ1ZmZlciwgbGFyZ2Vfc2VuZCwKLQkJCQkJKGludCAqKSZidWYtPm5leHRfZWxlbWVudF90b19maWxsKTsKKwlfX3FldGhfZmlsbF9idWZmZXIoc2tiLCBidWZmZXIsIGxhcmdlX3NlbmQsCisJCShpbnQgKikmYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCwgb2Zmc2V0KTsKIAogCWlmICghcXVldWUtPmRvX3BhY2spIHsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgImZpbGxiZm5wIik7CisJCVFFVEhfQ0FSRF9URVhUKHF1ZXVlLT5jYXJkLCA2LCAiZmlsbGJmbnAiKTsKIAkJLyogc2V0IHN0YXRlIHRvIFBSSU1FRCAtPiB3aWxsIGJlIGZsdXNoZWQgKi8KIAkJYXRvbWljX3NldCgmYnVmLT5zdGF0ZSwgUUVUSF9RRElPX0JVRl9QUklNRUQpOwogCQlmbHVzaF9jbnQgPSAxOwogCX0gZWxzZSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJmaWxsYmZwYSIpOworCQlRRVRIX0NBUkRfVEVYVChxdWV1ZS0+Y2FyZCwgNiwgImZpbGxiZnBhIik7CiAJCWlmIChxdWV1ZS0+Y2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykKIAkJCXF1ZXVlLT5jYXJkLT5wZXJmX3N0YXRzLnNrYnNfc2VudF9wYWNrKys7CiAJCWlmIChidWYtPm5leHRfZWxlbWVudF90b19maWxsID49CkBAIC0zMjEwLDcgKzMyMDAsNyBAQAogCQkJcmMgPSBkZXZfcXVldWVfeG1pdChza2IpOwogCQl9IGVsc2UgewogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJCVFFVEhfREJGX1RFWFQoUUVSUiwgMiwgInFyZHJvcCIpOworCQkJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgInFyZHJvcCIpOwogCQl9CiAJfQogCXJldHVybiAwOwpAQCAtMzMxMiwxNCArMzMwMiwxNCBAQAogCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKIAlzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YWRwcGFybXMgKnNldHBhcm1zOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgInBybWFkcGNiIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgInBybWFkcGNiIik7CiAKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBkYXRhOwogCXNldHBhcm1zID0gJihjbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zKTsKIAogCXFldGhfZGVmYXVsdF9zZXRhZGFwdGVycGFybXNfY2IoY2FyZCwgcmVwbHksICh1bnNpZ25lZCBsb25nKWNtZCk7CiAJaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlKSB7Ci0JCVFFVEhfREJGX1RFWFRfKFRSQUNFLCA0LCAicHJtcmMlMi4yeCIsIGNtZC0+aGRyLnJldHVybl9jb2RlKTsKKwkJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDQsICJwcm1yYyUyLjJ4IiwgY21kLT5oZHIucmV0dXJuX2NvZGUpOwogCQlzZXRwYXJtcy0+ZGF0YS5tb2RlID0gU0VUX1BST01JU0NfTU9ERV9PRkY7CiAJfQogCWNhcmQtPmluZm8ucHJvbWlzY19tb2RlID0gc2V0cGFybXMtPmRhdGEubW9kZTsKQEAgLTMzMzMsNyArMzMyMyw3IEBACiAJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwogCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJzZXRwcm9tIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgInNldHByb20iKTsKIAogCWlmICgoKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgJiYKIAkgICAgIChjYXJkLT5pbmZvLnByb21pc2NfbW9kZSA9PSBTRVRfUFJPTUlTQ19NT0RFX09OKSkgfHwKQEAgLTMzNDMsNyArMzMzMyw3IEBACiAJbW9kZSA9IFNFVF9QUk9NSVNDX01PREVfT0ZGOwogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCiAJCW1vZGUgPSBTRVRfUFJPTUlTQ19NT0RFX09OOwotCVFFVEhfREJGX1RFWFRfKFRSQUNFLCA0LCAibW9kZToleCIsIG1vZGUpOworCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCA0LCAibW9kZToleCIsIG1vZGUpOwogCiAJaW9iID0gcWV0aF9nZXRfYWRhcHRlcl9jbWQoY2FyZCwgSVBBX1NFVEFEUF9TRVRfUFJPTUlTQ19NT0RFLAogCQkJc2l6ZW9mKHN0cnVjdCBxZXRoX2lwYWNtZF9zZXRhZHBwYXJtcykpOwpAQCAtMzM2MCw5ICszMzUwLDkgQEAKIAogCWNhcmQgPSBkZXYtPm1sX3ByaXY7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCAiY2hnbXR1Iik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgImNoZ210dSIpOwogCXNwcmludGYoZGJmX3RleHQsICIlOHgiLCBuZXdfbXR1KTsKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCBkYmZfdGV4dCk7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgZGJmX3RleHQpOwogCiAJaWYgKG5ld19tdHUgPCA2NCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMzgyLDcgKzMzNzIsNyBAQAogCiAJY2FyZCA9IGRldi0+bWxfcHJpdjsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJnZXRzdGF0Iik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNSwgImdldHN0YXQiKTsKIAogCXJldHVybiAmY2FyZC0+c3RhdHM7CiB9CkBAIC0zMzkzLDcgKzMzODMsNyBAQAogewogCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJjaGdtYWNjYiIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDQsICJjaGdtYWNjYiIpOwogCiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKIAlpZiAoIWNhcmQtPm9wdGlvbnMubGF5ZXIyIHx8CkBAIC0zNDEzLDcgKzM0MDMsNyBAQAogCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKIAlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCAiY2hnbWFjIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgImNoZ21hYyIpOwogCiAJaW9iID0gcWV0aF9nZXRfYWRhcHRlcl9jbWQoY2FyZCwgSVBBX1NFVEFEUF9BTFRFUl9NQUNfQUREUkVTUywKIAkJCQkgICBzaXplb2Yoc3RydWN0IHFldGhfaXBhY21kX3NldGFkcHBhcm1zKSk7CkBAIC0zNDMzLDkgKzM0MjMsOCBAQAogewogCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKIAlzdHJ1Y3QgcWV0aF9zZXRfYWNjZXNzX2N0cmwgKmFjY2Vzc19jdHJsX3JlcTsKLQlpbnQgcmM7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCAic2V0YWNjYiIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDQsICJzZXRhY2NiIik7CiAKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBkYXRhOwogCWFjY2Vzc19jdHJsX3JlcSA9ICZjbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmRhdGEuc2V0X2FjY2Vzc19jdHJsOwpAQCAtMzQ2MCw3ICszNDQ5LDYgQEAKIAkJCWNhcmQtPmdkZXYtPmRldi5rb2JqLm5hbWUsCiAJCQlhY2Nlc3NfY3RybF9yZXEtPnN1YmNtZF9jb2RlLAogCQkJY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5oZHIucmV0dXJuX2NvZGUpOwotCQlyYyA9IDA7CiAJCWJyZWFrOwogCX0KIAljYXNlIFNFVF9BQ0NFU1NfQ1RSTF9SQ19OT1RfU1VQUE9SVEVEOgpAQCAtMzQ3NCw3ICszNDYyLDYgQEAKIAogCQkvKiBlbnN1cmUgaXNvbGF0aW9uIG1vZGUgaXMgIm5vbmUiICovCiAJCWNhcmQtPm9wdGlvbnMuaXNvbGF0aW9uID0gSVNPTEFUSU9OX01PREVfTk9ORTsKLQkJcmMgPSAtRU9QTk9UU1VQUDsKIAkJYnJlYWs7CiAJfQogCWNhc2UgU0VUX0FDQ0VTU19DVFJMX1JDX05PTkVfU0hBUkVEX0FEQVBURVI6CkBAIC0zNDg5LDcgKzM0NzYsNiBAQAogCiAJCS8qIGVuc3VyZSBpc29sYXRpb24gbW9kZSBpcyAibm9uZSIgKi8KIAkJY2FyZC0+b3B0aW9ucy5pc29sYXRpb24gPSBJU09MQVRJT05fTU9ERV9OT05FOwotCQlyYyA9IC1FT1BOT1RTVVBQOwogCQlicmVhazsKIAl9CiAJY2FzZSBTRVRfQUNDRVNTX0NUUkxfUkNfQUNUSVZFX0NIRUNLU1VNX09GRjoKQEAgLTM1MDMsNyArMzQ4OSw2IEBACiAKIAkJLyogZW5zdXJlIGlzb2xhdGlvbiBtb2RlIGlzICJub25lIiAqLwogCQljYXJkLT5vcHRpb25zLmlzb2xhdGlvbiA9IElTT0xBVElPTl9NT0RFX05PTkU7Ci0JCXJjID0gLUVQRVJNOwogCQlicmVhazsKIAl9CiAJZGVmYXVsdDoKQEAgLTM1MTcsMTIgKzM1MDIsMTEgQEAKIAogCQkvKiBlbnN1cmUgaXNvbGF0aW9uIG1vZGUgaXMgIm5vbmUiICovCiAJCWNhcmQtPm9wdGlvbnMuaXNvbGF0aW9uID0gSVNPTEFUSU9OX01PREVfTk9ORTsKLQkJcmMgPSAwOwogCQlicmVhazsKIAl9CiAJfQogCXFldGhfZGVmYXVsdF9zZXRhZGFwdGVycGFybXNfY2IoY2FyZCwgcmVwbHksICh1bnNpZ25lZCBsb25nKSBjbWQpOwotCXJldHVybiByYzsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBxZXRoX3NldGFkcHBhcm1zX3NldF9hY2Nlc3NfY3RybChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLApAQCAtMzUzMyw3ICszNTE3LDcgQEAKIAlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7CiAJc3RydWN0IHFldGhfc2V0X2FjY2Vzc19jdHJsICphY2Nlc3NfY3RybF9yZXE7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCAic2V0YWNjdGwiKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCA0LCAic2V0YWNjdGwiKTsKIAogCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAic2V0YWNjdGwiKTsKIAlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIiVzIiwgY2FyZC0+Z2Rldi0+ZGV2LmtvYmoubmFtZSk7CkBAIC0zNTU1LDcgKzM1MzksNyBAQAogewogCWludCByYyA9IDA7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCAic2V0YWN0bG8iKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCA0LCAic2V0YWN0bG8iKTsKIAogCWlmICgoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TRCB8fAogCSAgICAgY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TWCkgJiYKQEAgLTM1ODMsOCArMzU2Nyw4IEBACiB7CiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJ0eHRpbWVvIik7CiAJY2FyZCA9IGRldi0+bWxfcHJpdjsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCA0LCAidHh0aW1lbyIpOwogCWNhcmQtPnN0YXRzLnR4X2Vycm9ycysrOwogCXFldGhfc2NoZWR1bGVfcmVjb3ZlcnkoY2FyZCk7CiB9CkBAIC0zNjYzLDcgKzM2NDcsNyBAQAogewogCXUxNiBzMSwgczI7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCAic2VuZHNubXAiKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCA0LCAic2VuZHNubXAiKTsKIAogCW1lbWNweShpb2ItPmRhdGEsIElQQV9QRFVfSEVBREVSLCBJUEFfUERVX0hFQURFUl9TSVpFKTsKIAltZW1jcHkoUUVUSF9JUEFfQ01EX0RFU1RfQUREUihpb2ItPmRhdGEpLApAQCAtMzY4OCw3ICszNjcyLDcgQEAKIAl1bnNpZ25lZCBjaGFyICpkYXRhOwogCV9fdTE2IGRhdGFfbGVuOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgInNucGNtZGNiIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMywgInNucGNtZGNiIik7CiAKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBzZGF0YTsKIAlkYXRhID0gKHVuc2lnbmVkIGNoYXIgKikoKGNoYXIgKiljbWQgLSByZXBseS0+b2Zmc2V0KTsKQEAgLTM2OTYsMTMgKzM2ODAsMTMgQEAKIAlzbm1wID0gJmNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuZGF0YS5zbm1wOwogCiAJaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlKSB7Ci0JCVFFVEhfREJGX1RFWFRfKFRSQUNFLCA0LCAic2NlcjElaSIsIGNtZC0+aGRyLnJldHVybl9jb2RlKTsKKwkJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDQsICJzY2VyMSVpIiwgY21kLT5oZHIucmV0dXJuX2NvZGUpOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKGNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLnJldHVybl9jb2RlKSB7CiAJCWNtZC0+aGRyLnJldHVybl9jb2RlID0KIAkJCWNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLnJldHVybl9jb2RlOwotCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgNCwgInNjZXIyJWkiLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7CisJCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCA0LCAic2NlcjIlaSIsIGNtZC0+aGRyLnJldHVybl9jb2RlKTsKIAkJcmV0dXJuIDA7CiAJfQogCWRhdGFfbGVuID0gKigoX191MTYgKilRRVRIX0lQQV9QRFVfTEVOX1BEVTEoZGF0YSkpOwpAQCAtMzcxMywxMyArMzY5NywxMyBAQAogCiAJLyogY2hlY2sgaWYgdGhlcmUgaXMgZW5vdWdoIHJvb20gaW4gdXNlcnNwYWNlICovCiAJaWYgKChxaW5mby0+dWRhdGFfbGVuIC0gcWluZm8tPnVkYXRhX29mZnNldCkgPCBkYXRhX2xlbikgewotCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgNCwgInNjZXIzJWkiLCAtRU5PTUVNKTsKKwkJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDQsICJzY2VyMyVpIiwgLUVOT01FTSk7CiAJCWNtZC0+aGRyLnJldHVybl9jb2RlID0gLUVOT01FTTsKIAkJcmV0dXJuIDA7CiAJfQotCVFFVEhfREJGX1RFWFRfKFRSQUNFLCA0LCAic25vcmUlaSIsCisJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDQsICJzbm9yZSVpIiwKIAkJICAgICAgIGNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLnVzZWRfdG90YWwpOwotCVFFVEhfREJGX1RFWFRfKFRSQUNFLCA0LCAic3NlcW4laSIsCisJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDQsICJzc2VxbiVpIiwKIAkJY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5oZHIuc2VxX25vKTsKIAkvKmNvcHkgZW50cmllcyB0byB1c2VyIGJ1ZmZlciovCiAJaWYgKGNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLnNlcV9ubyA9PSAxKSB7CkBAIC0zNzMzLDkgKzM3MTcsOSBAQAogCX0KIAlxaW5mby0+dWRhdGFfb2Zmc2V0ICs9IGRhdGFfbGVuOwogCS8qIGNoZWNrIGlmIGFsbCByZXBsaWVzIHJlY2VpdmVkIC4uLiAqLwotCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgNCwgInNydG90JWkiLAorCQlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgNCwgInNydG90JWkiLAogCQkJICAgICAgIGNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLnVzZWRfdG90YWwpOwotCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgNCwgInNyc2VxJWkiLAorCQlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgNCwgInNyc2VxJWkiLAogCQkJICAgICAgIGNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLnNlcV9ubyk7CiAJaWYgKGNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLnNlcV9ubyA8CiAJICAgIGNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLnVzZWRfdG90YWwpCkBAIC0zNzUyLDcgKzM3MzYsNyBAQAogCXN0cnVjdCBxZXRoX2FycF9xdWVyeV9pbmZvIHFpbmZvID0gezAsIH07CiAJaW50IHJjID0gMDsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJzbm1wY21kIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMywgInNubXBjbWQiKTsKIAogCWlmIChjYXJkLT5pbmZvLmd1ZXN0bGFuKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC0zNzY0LDE1ICszNzQ4LDEwIEBACiAJLyogc2tpcCA0IGJ5dGVzIChkYXRhX2xlbiBzdHJ1Y3QgbWVtYmVyKSB0byBnZXQgcmVxX2xlbiAqLwogCWlmIChjb3B5X2Zyb21fdXNlcigmcmVxX2xlbiwgdWRhdGEgKyBzaXplb2YoaW50KSwgc2l6ZW9mKGludCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQl1cmVxID0ga21hbGxvYyhyZXFfbGVuK3NpemVvZihzdHJ1Y3QgcWV0aF9zbm1wX3VyZXFfaGRyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF1cmVxKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJzbm1wbm9tZSIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JaWYgKGNvcHlfZnJvbV91c2VyKHVyZXEsIHVkYXRhLAotCQkJcmVxX2xlbiArIHNpemVvZihzdHJ1Y3QgcWV0aF9zbm1wX3VyZXFfaGRyKSkpIHsKLQkJa2ZyZWUodXJlcSk7Ci0JCXJldHVybiAtRUZBVUxUOworCXVyZXEgPSBtZW1kdXBfdXNlcih1ZGF0YSwgcmVxX2xlbiArIHNpemVvZihzdHJ1Y3QgcWV0aF9zbm1wX3VyZXFfaGRyKSk7CisJaWYgKElTX0VSUih1cmVxKSkgeworCQlRRVRIX0NBUkRfVEVYVChjYXJkLCAyLCAic25tcG5vbWUiKTsKKwkJcmV0dXJuIFBUUl9FUlIodXJlcSk7CiAJfQogCXFpbmZvLnVkYXRhX2xlbiA9IHVyZXEtPmhkci5kYXRhX2xlbjsKIAlxaW5mby51ZGF0YSA9IGt6YWxsb2MocWluZm8udWRhdGFfbGVuLCBHRlBfS0VSTkVMKTsKQEAgLTM5OTEsNiArMzk3MCw3IEBACiAJCWVsc2UKIAkJCWdvdG8gcmV0cnk7CiAJfQorCWNhcmQtPnJlYWRfb3Jfd3JpdGVfcHJvYmxlbSA9IDA7CiAJcmMgPSBxZXRoX21wY19pbml0aWFsaXplKGNhcmQpOwogCWlmIChyYykgewogCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjVlcnIlZCIsIHJjKTsKQEAgLTQxMjAsMTMgKzQxMDAsOCBAQAogCQlza2JfbGVuIC09IGRhdGFfbGVuOwogCQlpZiAoc2tiX2xlbikgewogCQkJaWYgKHFldGhfaXNfbGFzdF9zYmFsZShlbGVtZW50KSkgewotCQkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJ1bmV4ZW9iIik7Ci0JCQkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDQsICIlcyIsCi0JCQkJCUNBUkRfQlVTX0lEKGNhcmQpKTsKLQkJCQlRRVRIX0RCRl9URVhUKFFFUlIsIDIsICJ1bmV4ZW9iIik7Ci0JCQkJUUVUSF9EQkZfVEVYVF8oUUVSUiwgMiwgIiVzIiwKLQkJCQkJQ0FSRF9CVVNfSUQoY2FyZCkpOwotCQkJCVFFVEhfREJGX0hFWChNSVNDLCA0LCBidWZmZXIsIHNpemVvZigqYnVmZmVyKSk7CisJCQkJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgInVuZXhlb2IiKTsKKwkJCQlRRVRIX0NBUkRfSEVYKGNhcmQsIDIsIGJ1ZmZlciwgc2l6ZW9mKHZvaWQgKikpOwogCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQkJY2FyZC0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJcmV0dXJuIE5VTEw7CkBAIC00MTQ3LDggKzQxMjIsNyBAQAogCXJldHVybiBza2I7CiBub19tZW06CiAJaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAibm9za2JtZW0iKTsKLQkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDIsICIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKKwkJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgIm5vc2tibWVtIik7CiAJfQogCWNhcmQtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAlyZXR1cm4gTlVMTDsKQEAgLTQxNjQsMTcgKzQxMzgsMTcgQEAKIAl9CiB9CiAKLXZvaWQgcWV0aF9kYmZfbG9uZ3RleHQoZW51bSBxZXRoX2RiZl9uYW1lcyBkYmZfbml4LCBpbnQgbGV2ZWwsIGNoYXIgKmZtdCwgLi4uKQordm9pZCBxZXRoX2RiZl9sb25ndGV4dChkZWJ1Z19pbmZvX3QgKmlkLCBpbnQgbGV2ZWwsIGNoYXIgKmZtdCwgLi4uKQogewogCWNoYXIgZGJmX3R4dF9idWZbMzJdOwogCXZhX2xpc3QgYXJnczsKIAotCWlmIChsZXZlbCA+IChxZXRoX2RiZltkYmZfbml4XS5pZCktPmxldmVsKQorCWlmIChsZXZlbCA+IGlkLT5sZXZlbCkKIAkJcmV0dXJuOwogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CiAJdnNucHJpbnRmKGRiZl90eHRfYnVmLCBzaXplb2YoZGJmX3R4dF9idWYpLCBmbXQsIGFyZ3MpOwogCXZhX2VuZChhcmdzKTsKLQlkZWJ1Z190ZXh0X2V2ZW50KHFldGhfZGJmW2RiZl9uaXhdLmlkLCBsZXZlbCwgZGJmX3R4dF9idWYpOworCWRlYnVnX3RleHRfZXZlbnQoaWQsIGxldmVsLCBkYmZfdHh0X2J1Zik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChxZXRoX2RiZl9sb25ndGV4dCk7CiAKQEAgLTQyODIsNiArNDI1Niw3IEBACiAJc3RydWN0IGRldmljZSAqZGV2OwogCWludCByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNoYXIgZGJmX25hbWVbMjBdOwogCiAJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgInByb2JlZGV2Iik7CiAKQEAgLTQyOTcsNiArNDI3MiwxNyBAQAogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2RldjsKIAl9CisKKwlzbnByaW50ZihkYmZfbmFtZSwgc2l6ZW9mKGRiZl9uYW1lKSwgInFldGhfY2FyZF8lcyIsCisJCWRldl9uYW1lKCZnZGV2LT5kZXYpKTsKKwljYXJkLT5kZWJ1ZyA9IGRlYnVnX3JlZ2lzdGVyKGRiZl9uYW1lLCAyLCAxLCA4KTsKKwlpZiAoIWNhcmQtPmRlYnVnKSB7CisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiJXMiLCAicWNkYmYiKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGVycl9jYXJkOworCX0KKwlkZWJ1Z19yZWdpc3Rlcl92aWV3KGNhcmQtPmRlYnVnLCAmZGVidWdfaGV4X2FzY2lpX3ZpZXcpOworCiAJY2FyZC0+cmVhZC5jY3dkZXYgID0gZ2Rldi0+Y2RldlswXTsKIAljYXJkLT53cml0ZS5jY3dkZXYgPSBnZGV2LT5jZGV2WzFdOwogCWNhcmQtPmRhdGEuY2N3ZGV2ICA9IGdkZXYtPmNkZXZbMl07CkBAIC00MzA5LDEyICs0Mjk1LDEyIEBACiAJcmMgPSBxZXRoX2RldGVybWluZV9jYXJkX3R5cGUoY2FyZCk7CiAJaWYgKHJjKSB7CiAJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiM2VyciVkIiwgcmMpOwotCQlnb3RvIGVycl9jYXJkOworCQlnb3RvIGVycl9kYmY7CiAJfQogCXJjID0gcWV0aF9zZXR1cF9jYXJkKGNhcmQpOwogCWlmIChyYykgewogCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjJlcnIlZCIsIHJjKTsKLQkJZ290byBlcnJfY2FyZDsKKwkJZ290byBlcnJfZGJmOwogCX0KIAogCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NOKQpAQCAtNDMyMiw3ICs0MzA4LDcgQEAKIAllbHNlCiAJCXJjID0gcWV0aF9jb3JlX2NyZWF0ZV9kZXZpY2VfYXR0cmlidXRlcyhkZXYpOwogCWlmIChyYykKLQkJZ290byBlcnJfY2FyZDsKKwkJZ290byBlcnJfZGJmOwogCXN3aXRjaCAoY2FyZC0+aW5mby50eXBlKSB7CiAJY2FzZSBRRVRIX0NBUkRfVFlQRV9PU046CiAJY2FzZSBRRVRIX0NBUkRfVFlQRV9PU006CkBAIC00MzUyLDYgKzQzMzgsOCBAQAogCQlxZXRoX2NvcmVfcmVtb3ZlX29zbl9hdHRyaWJ1dGVzKGRldik7CiAJZWxzZQogCQlxZXRoX2NvcmVfcmVtb3ZlX2RldmljZV9hdHRyaWJ1dGVzKGRldik7CitlcnJfZGJmOgorCWRlYnVnX3VucmVnaXN0ZXIoY2FyZC0+ZGVidWcpOwogZXJyX2NhcmQ6CiAJcWV0aF9jb3JlX2ZyZWVfY2FyZChjYXJkKTsKIGVycl9kZXY6CkBAIC00MzY1LDE2ICs0MzUzLDE5IEBACiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YSgmZ2Rldi0+ZGV2KTsKIAogCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJyZW1vdmVkdiIpOwotCWlmIChjYXJkLT5kaXNjaXBsaW5lLmNjd2dkcml2ZXIpIHsKLQkJY2FyZC0+ZGlzY2lwbGluZS5jY3dnZHJpdmVyLT5yZW1vdmUoZ2Rldik7Ci0JCXFldGhfY29yZV9mcmVlX2Rpc2NpcGxpbmUoY2FyZCk7Ci0JfQogCiAJaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU04pIHsKIAkJcWV0aF9jb3JlX3JlbW92ZV9vc25fYXR0cmlidXRlcygmZ2Rldi0+ZGV2KTsKIAl9IGVsc2UgewogCQlxZXRoX2NvcmVfcmVtb3ZlX2RldmljZV9hdHRyaWJ1dGVzKCZnZGV2LT5kZXYpOwogCX0KKworCWlmIChjYXJkLT5kaXNjaXBsaW5lLmNjd2dkcml2ZXIpIHsKKwkJY2FyZC0+ZGlzY2lwbGluZS5jY3dnZHJpdmVyLT5yZW1vdmUoZ2Rldik7CisJCXFldGhfY29yZV9mcmVlX2Rpc2NpcGxpbmUoY2FyZCk7CisJfQorCisJZGVidWdfdW5yZWdpc3RlcihjYXJkLT5kZWJ1Zyk7CiAJd3JpdGVfbG9ja19pcnFzYXZlKCZxZXRoX2NvcmVfY2FyZF9saXN0LnJ3bG9jaywgZmxhZ3MpOwogCWxpc3RfZGVsKCZjYXJkLT5saXN0KTsKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcWV0aF9jb3JlX2NhcmRfbGlzdC5yd2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21wYy5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbXBjLmgKaW5kZXggZjllZDI0ZC4uZTM3ZGQ4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbXBjLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbXBjLmgKQEAgLTYxNiw4ICs2MTYsOSBAQAogI2RlZmluZSBRRVRIX0lTX0lEWF9BQ1RfUE9TX1JFUExZKGJ1ZmZlcikgKCgoYnVmZmVyKVsweDA4XSAmIDMpID09IDIpCiAjZGVmaW5lIFFFVEhfSURYX1JFUExZX0xFVkVMKGJ1ZmZlcikgKGJ1ZmZlciArIDB4MTIpCiAjZGVmaW5lIFFFVEhfSURYX0FDVF9DQVVTRV9DT0RFKGJ1ZmZlcikgKGJ1ZmZlcilbMHgwOV0KLSNkZWZpbmUgUUVUSF9JRFhfQUNUX0VSUl9FWENMCTB4MTkKLSNkZWZpbmUgUUVUSF9JRFhfQUNUX0VSUl9BVVRICTB4MUUKKyNkZWZpbmUgUUVUSF9JRFhfQUNUX0VSUl9FWENMCQkweDE5CisjZGVmaW5lIFFFVEhfSURYX0FDVF9FUlJfQVVUSAkJMHgxRQorI2RlZmluZSBRRVRIX0lEWF9BQ1RfRVJSX0FVVEhfVVNFUgkweDIwCiAKICNkZWZpbmUgUERVX0VOQ0FQU1VMQVRJT04oYnVmZmVyKSBcCiAJKGJ1ZmZlciArICooYnVmZmVyICsgKCooYnVmZmVyICsgMHgwYikpICsgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfc3lzLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9zeXMuYwppbmRleCAyZWIwMjJmLi40MmZhNzgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9zeXMuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9zeXMuYwpAQCAtNDExLDcgKzQxMSw3IEBACiAJaWYgKCFjYXJkKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJmNhcmQtPmNvbmZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNhcmQtPmRpc2NpcGxpbmVfbXV0ZXgpOwogCWlmIChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX0RPV04pIHsKIAkJcmMgPSAtRVBFUk07CiAJCWdvdG8gb3V0OwpAQCAtNDMzLDYgKzQzMyw3IEBACiAJaWYgKGNhcmQtPm9wdGlvbnMubGF5ZXIyID09IG5ld2RpcykKIAkJZ290byBvdXQ7CiAJZWxzZSB7CisJCWNhcmQtPmluZm8ubWFjX2JpdHMgID0gMDsKIAkJaWYgKGNhcmQtPmRpc2NpcGxpbmUuY2N3Z2RyaXZlcikgewogCQkJY2FyZC0+ZGlzY2lwbGluZS5jY3dnZHJpdmVyLT5yZW1vdmUoY2FyZC0+Z2Rldik7CiAJCQlxZXRoX2NvcmVfZnJlZV9kaXNjaXBsaW5lKGNhcmQpOwpAQCAtNDQ1LDcgKzQ0Niw3IEBACiAKIAlyYyA9IGNhcmQtPmRpc2NpcGxpbmUuY2N3Z2RyaXZlci0+cHJvYmUoY2FyZC0+Z2Rldik7CiBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZjYXJkLT5jb25mX211dGV4KTsKKwltdXRleF91bmxvY2soJmNhcmQtPmRpc2NpcGxpbmVfbXV0ZXgpOwogCXJldHVybiByYyA/IHJjIDogY291bnQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCmluZGV4IGQ0M2Y1N2EuLjgzMGQ2MzUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKQEAgLTc5LDcgKzc5LDcgQEAKIAkJcmMgPSAtRU9QTk9UU1VQUDsKIAl9CiAJaWYgKHJjKQotCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMiwgImlvY2UlZCIsIHJjKTsKKwkJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDIsICJpb2NlJWQiLCByYyk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xMzAsNyArMTMwLDcgQEAKIAlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7CiAJX191OCAqbWFjOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgIkwyU2dtYWNiIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgIkwyU2dtYWNiIik7CiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKIAltYWMgPSAmY21kLT5kYXRhLnNldGRlbG1hYy5tYWNbMF07CiAJLyogTUFDIGFscmVhZHkgcmVnaXN0ZXJlZCwgbmVlZGVkIGluIGNvdXBsZS91bmNvdXBsZSBjYXNlICovCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAogc3RhdGljIGludCBxZXRoX2wyX3NlbmRfc2V0Z3JvdXBtYWMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgX191OCAqbWFjKQogewotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJMMlNnbWFjIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgIkwyU2dtYWMiKTsKIAlyZXR1cm4gcWV0aF9sMl9zZW5kX3NldGRlbG1hYyhjYXJkLCBtYWMsIElQQV9DTURfU0VUR01BQywKIAkJCQkJICBxZXRoX2wyX3NlbmRfc2V0Z3JvdXBtYWNfY2IpOwogfQpAQCAtMTU5LDcgKzE1OSw3IEBACiAJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOwogCV9fdTggKm1hYzsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJMMkRnbWFjYiIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJMMkRnbWFjYiIpOwogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7CiAJbWFjID0gJmNtZC0+ZGF0YS5zZXRkZWxtYWMubWFjWzBdOwogCWlmIChjbWQtPmhkci5yZXR1cm5fY29kZSkKQEAgLTE3MCw3ICsxNzAsNyBAQAogCiBzdGF0aWMgaW50IHFldGhfbDJfc2VuZF9kZWxncm91cG1hYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBfX3U4ICptYWMpCiB7Ci0JUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgIkwyRGdtYWMiKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCAyLCAiTDJEZ21hYyIpOwogCXJldHVybiBxZXRoX2wyX3NlbmRfc2V0ZGVsbWFjKGNhcmQsIG1hYywgSVBBX0NNRF9ERUxHTUFDLAogCQkJCQkgIHFldGhfbDJfc2VuZF9kZWxncm91cG1hY19jYik7CiB9CkBAIC0yNjIsMTUgKzI2MiwxNCBAQAogewogCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJMMnNkdmNiIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgIkwyc2R2Y2IiKTsKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBkYXRhOwogCWlmIChjbWQtPmhkci5yZXR1cm5fY29kZSkgewogCQlRRVRIX0RCRl9NRVNTQUdFKDIsICJFcnJvciBpbiBwcm9jZXNzaW5nIFZMQU4gJWkgb24gJXM6IDB4JXguICIKIAkJCSAgIkNvbnRpbnVpbmdcbiIsIGNtZC0+ZGF0YS5zZXRkZWx2bGFuLnZsYW5faWQsCiAJCQkgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksIGNtZC0+aGRyLnJldHVybl9jb2RlKTsKLQkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDIsICJMMlZMJTR4IiwgY21kLT5oZHIuY29tbWFuZCk7Ci0JCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAyLCAiTDIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKLQkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDIsICJlcnIlZCIsIGNtZC0+aGRyLnJldHVybl9jb2RlKTsKKwkJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDIsICJMMlZMJTR4IiwgY21kLT5oZHIuY29tbWFuZCk7CisJCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCAyLCAiZXJyJWQiLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjgxLDcgKzI4MCw3IEBACiAJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOwogCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKIAotCVFFVEhfREJGX1RFWFRfKFRSQUNFLCA0LCAiTDJzZHYleCIsIGlwYWNtZCk7CisJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDQsICJMMnNkdiV4IiwgaXBhY21kKTsKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIGlwYWNtZCwgUUVUSF9QUk9UX0lQVjQpOwogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKIAljbWQtPmRhdGEuc2V0ZGVsdmxhbi52bGFuX2lkID0gaTsKQEAgLTI5Miw3ICsyOTEsNyBAQAogc3RhdGljIHZvaWQgcWV0aF9sMl9wcm9jZXNzX3ZsYW5zKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGludCBjbGVhcikKIHsKIAlzdHJ1Y3QgcWV0aF92bGFuX3ZpZCAqaWQ7Ci0JUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgIkwycHJjdmxuIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMywgIkwycHJjdmxuIik7CiAJc3Bpbl9sb2NrX2JoKCZjYXJkLT52bGFubG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpZCwgJmNhcmQtPnZpZF9saXN0LCBsaXN0KSB7CiAJCWlmIChjbGVhcikKQEAgLTMxMCwxMyArMzA5LDEzIEBACiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+bWxfcHJpdjsKIAlzdHJ1Y3QgcWV0aF92bGFuX3ZpZCAqaWQ7CiAKLQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgNCwgImFpZDolZCIsIHZpZCk7CisJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDQsICJhaWQ6JWQiLCB2aWQpOwogCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NNKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJhaWRPU00iKTsKKwkJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMywgImFpZE9TTSIpOwogCQlyZXR1cm47CiAJfQogCWlmIChxZXRoX3dhaXRfZm9yX3RocmVhZHMoY2FyZCwgUUVUSF9SRUNPVkVSX1RIUkVBRCkpIHsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgImFpZFJFQyIpOworCQlRRVRIX0NBUkRfVEVYVChjYXJkLCAzLCAiYWlkUkVDIik7CiAJCXJldHVybjsKIAl9CiAJaWQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF92bGFuX3ZpZCksIEdGUF9BVE9NSUMpOwpAQCAtMzM0LDEzICszMzMsMTMgQEAKIAlzdHJ1Y3QgcWV0aF92bGFuX3ZpZCAqaWQsICp0bXBpZCA9IE5VTEw7CiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+bWxfcHJpdjsKIAotCVFFVEhfREJGX1RFWFRfKFRSQUNFLCA0LCAia2lkOiVkIiwgdmlkKTsKKwlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgNCwgImtpZDolZCIsIHZpZCk7CiAJaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU00pIHsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgImtpZE9TTSIpOworCQlRRVRIX0NBUkRfVEVYVChjYXJkLCAzLCAia2lkT1NNIik7CiAJCXJldHVybjsKIAl9CiAJaWYgKHFldGhfd2FpdF9mb3JfdGhyZWFkcyhjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSkgewotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAia2lkUkVDIik7CisJCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDMsICJraWRSRUMiKTsKIAkJcmV0dXJuOwogCX0KIAlzcGluX2xvY2tfYmgoJmNhcmQtPnZsYW5sb2NrKTsKQEAgLTQ1Niw3ICs0NTUsNyBAQAogCQkJLyogZWxzZSB1bmtub3duICovCiAJCWRlZmF1bHQ6CiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgImluYnVua25vIik7CisJCQlRRVRIX0NBUkRfVEVYVChjYXJkLCAzLCAiaW5idW5rbm8iKTsKIAkJCVFFVEhfREJGX0hFWChDVFJMLCAzLCBoZHIsIFFFVEhfREJGX0NUUkxfTEVOKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC00NzQsNyArNDczLDcgQEAKIAlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7CiAJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgIkwyc2RtYWMiKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCAyLCAiTDJzZG1hYyIpOwogCWlvYiA9IHFldGhfZ2V0X2lwYWNtZF9idWZmZXIoY2FyZCwgaXBhY21kLCBRRVRIX1BST1RfSVBWNCk7CiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwogCWNtZC0+ZGF0YS5zZXRkZWxtYWMubWFjX2xlbmd0aCA9IE9TQV9BRERSX0xFTjsKQEAgLTQ4OCwxMCArNDg3LDEwIEBACiB7CiAJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgIkwyU21hY2NiIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgIkwyU21hY2NiIik7CiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKIAlpZiAoY21kLT5oZHIucmV0dXJuX2NvZGUpIHsKLQkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDIsICJMMmVyJXgiLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7CisJCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCAyLCAiTDJlciV4IiwgY21kLT5oZHIucmV0dXJuX2NvZGUpOwogCQljYXJkLT5pbmZvLm1hY19iaXRzICY9IH5RRVRIX0xBWUVSMl9NQUNfUkVHSVNURVJFRDsKIAkJc3dpdGNoIChjbWQtPmhkci5yZXR1cm5fY29kZSkgewogCQljYXNlIElQQV9SQ19MMl9EVVBfTUFDOgpAQCAtNTIzLDcgKzUyMiw3IEBACiAKIHN0YXRpYyBpbnQgcWV0aF9sMl9zZW5kX3NldG1hYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBfX3U4ICptYWMpCiB7Ci0JUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgIkwyU2V0bWFjIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgIkwyU2V0bWFjIik7CiAJcmV0dXJuIHFldGhfbDJfc2VuZF9zZXRkZWxtYWMoY2FyZCwgbWFjLCBJUEFfQ01EX1NFVFZNQUMsCiAJCQkJCSAgcWV0aF9sMl9zZW5kX3NldG1hY19jYik7CiB9CkBAIC01MzQsMTAgKzUzMywxMCBAQAogewogCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJMMkRtYWNjYiIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJMMkRtYWNjYiIpOwogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7CiAJaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlKSB7Ci0JCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAyLCAiZXJyJWQiLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7CisJCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCAyLCAiZXJyJWQiLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7CiAJCWNtZC0+aGRyLnJldHVybl9jb2RlID0gLUVJTzsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNTQ4LDcgKzU0Nyw3IEBACiAKIHN0YXRpYyBpbnQgcWV0aF9sMl9zZW5kX2RlbG1hYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBfX3U4ICptYWMpCiB7Ci0JUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgIkwyRGVsbWFjIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgIkwyRGVsbWFjIik7CiAJaWYgKCEoY2FyZC0+aW5mby5tYWNfYml0cyAmIFFFVEhfTEFZRVIyX01BQ19SRUdJU1RFUkVEKSkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIHFldGhfbDJfc2VuZF9zZXRkZWxtYWMoY2FyZCwgbWFjLCBJUEFfQ01EX0RFTFZNQUMsCkBAIC01OTQsMjMgKzU5MywyMiBAQAogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPm1sX3ByaXY7CiAJaW50IHJjID0gMDsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJzZXRtYWMiKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCAzLCAic2V0bWFjIik7CiAKIAlpZiAocWV0aF9sMl92ZXJpZnlfZGV2KGRldikgIT0gUUVUSF9SRUFMX0NBUkQpIHsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgInNldG1jSU5WIik7CisJCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDMsICJzZXRtY0lOViIpOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCiAJaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU04gfHwKIAkgICAgY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TTSB8fAogCSAgICBjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NYKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJzZXRtY1RZUCIpOworCQlRRVRIX0NBUkRfVEVYVChjYXJkLCAzLCAic2V0bWNUWVAiKTsKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KLQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMywgIiVzIiwgQ0FSRF9CVVNfSUQoY2FyZCkpOwotCVFFVEhfREJGX0hFWChUUkFDRSwgMywgYWRkci0+c2FfZGF0YSwgT1NBX0FERFJfTEVOKTsKKwlRRVRIX0NBUkRfSEVYKGNhcmQsIDMsIGFkZHItPnNhX2RhdGEsIE9TQV9BRERSX0xFTik7CiAJaWYgKHFldGhfd2FpdF9mb3JfdGhyZWFkcyhjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSkgewotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAic2V0bWNSRUMiKTsKKwkJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMywgInNldG1jUkVDIik7CiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJfQogCXJjID0gcWV0aF9sMl9zZW5kX2RlbG1hYyhjYXJkLCAmY2FyZC0+ZGV2LT5kZXZfYWRkclswXSk7CkBAIC02MjcsNyArNjI1LDcgQEAKIAlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TTikKIAkJcmV0dXJuIDsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJzZXRtdWx0aSIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDMsICJzZXRtdWx0aSIpOwogCWlmIChxZXRoX3RocmVhZHNfcnVubmluZyhjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSAmJgogCSAgICAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9VUCkpCiAJCXJldHVybjsKQEAgLTcxNCwxMCArNzEyLDEzIEBACiAJCWdvdG8gdHhfZHJvcDsKIAl9CiAKLQlpZiAoY2FyZC0+aW5mby50eXBlICE9IFFFVEhfQ0FSRF9UWVBFX0lRRCkKKwlpZiAoY2FyZC0+aW5mby50eXBlICE9IFFFVEhfQ0FSRF9UWVBFX0lRRCkgeworCQlpZiAocWV0aF9oZHJfY2hrX2FuZF9ib3VuY2UobmV3X3NrYiwKKwkJICAgIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHJfbGF5ZXIyKSkpCisJCQlnb3RvIHR4X2Ryb3A7CiAJCXJjID0gcWV0aF9kb19zZW5kX3BhY2tldChjYXJkLCBxdWV1ZSwgbmV3X3NrYiwgaGRyLAogCQkJCQkgZWxlbWVudHMpOwotCWVsc2UKKwl9IGVsc2UKIAkJcmMgPSBxZXRoX2RvX3NlbmRfcGFja2V0X2Zhc3QoY2FyZCwgcXVldWUsIG5ld19za2IsIGhkciwKIAkJCQkJZWxlbWVudHMsIGRhdGFfb2Zmc2V0LCBoZF9sZW4pOwogCWlmICghcmMpIHsKQEAgLTc3MSwxMSArNzcyLDEwIEBACiAJCWNhcmQtPnBlcmZfc3RhdHMuaW5ib3VuZF9zdGFydF90aW1lID0gcWV0aF9nZXRfbWljcm9zKCk7CiAJfQogCWlmIChxZGlvX2VyciAmIFFESU9fRVJST1JfQUNUSVZBVEVfQ0hFQ0tfQ09ORElUSU9OKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDEsICJxZGluY2hrIik7Ci0JCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJXMiLCBDQVJEX0JVU19JRChjYXJkKSk7Ci0JCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJTA0WCUwNFgiLCBmaXJzdF9lbGVtZW50LAorCQlRRVRIX0NBUkRfVEVYVChjYXJkLCAxLCAicWRpbmNoayIpOworCQlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgMSwgIiUwNFglMDRYIiwgZmlyc3RfZWxlbWVudCwKIAkJCQljb3VudCk7Ci0JCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJTA0WCIsIHF1ZXVlKTsKKwkJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDEsICIlMDRYIiwgcXVldWUpOwogCQlxZXRoX3NjaGVkdWxlX3JlY292ZXJ5KGNhcmQpOwogCQlyZXR1cm47CiAJfQpAQCAtNzk5LDEzICs3OTksMTMgQEAKIHsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5tbF9wcml2OwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgInFldGhvcGVuIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgInFldGhvcGVuIik7CiAJaWYgKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfU09GVFNFVFVQKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICgoY2FyZC0+aW5mby50eXBlICE9IFFFVEhfQ0FSRF9UWVBFX09TTikgJiYKIAkgICAgICghKGNhcmQtPmluZm8ubWFjX2JpdHMgJiBRRVRIX0xBWUVSMl9NQUNfUkVHSVNURVJFRCkpKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJub21hY2FkciIpOworCQlRRVRIX0NBUkRfVEVYVChjYXJkLCA0LCAibm9tYWNhZHIiKTsKIAkJcmV0dXJuIC1FUEVSTTsKIAl9CiAJY2FyZC0+ZGF0YS5zdGF0ZSA9IENIX1NUQVRFX1VQOwpAQCAtODIyLDcgKzgyMiw3IEBACiB7CiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+bWxfcHJpdjsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJxZXRoc3RvcCIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDQsICJxZXRoc3RvcCIpOwogCW5ldGlmX3R4X2Rpc2FibGUoZGV2KTsKIAlpZiAoY2FyZC0+c3RhdGUgPT0gQ0FSRF9TVEFURV9VUCkKIAkJY2FyZC0+c3RhdGUgPSBDQVJEX1NUQVRFX1NPRlRTRVRVUDsKQEAgLTg2MCw4ICs4NjAsNiBAQAogCQl1bnJlZ2lzdGVyX25ldGRldihjYXJkLT5kZXYpOwogCQljYXJkLT5kZXYgPSBOVUxMOwogCX0KLQotCXFldGhfbDJfZGVsX2FsbF9tYyhjYXJkKTsKIAlyZXR1cm47CiB9CiAKQEAgLTkzNSw2ICs5MzMsNyBAQAogCWVudW0gcWV0aF9jYXJkX3N0YXRlcyByZWNvdmVyX2ZsYWc7CiAKIAlCVUdfT04oIWNhcmQpOworCW11dGV4X2xvY2soJmNhcmQtPmRpc2NpcGxpbmVfbXV0ZXgpOwogCW11dGV4X2xvY2soJmNhcmQtPmNvbmZfbXV0ZXgpOwogCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJzZXRvbmxpbiIpOwogCVFFVEhfREJGX0hFWChTRVRVUCwgMiwgJmNhcmQsIHNpemVvZih2b2lkICopKTsKQEAgLTEwMTIsNiArMTAxMSw3IEBACiAJa29iamVjdF91ZXZlbnQoJmdkZXYtPmRldi5rb2JqLCBLT0JKX0NIQU5HRSk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZjYXJkLT5jb25mX211dGV4KTsKKwltdXRleF91bmxvY2soJmNhcmQtPmRpc2NpcGxpbmVfbXV0ZXgpOwogCXJldHVybiAwOwogCiBvdXRfcmVtb3ZlOgpAQCAtMTAyNSw2ICsxMDI1LDcgQEAKIAllbHNlCiAJCWNhcmQtPnN0YXRlID0gQ0FSRF9TVEFURV9ET1dOOwogCW11dGV4X3VubG9jaygmY2FyZC0+Y29uZl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjYXJkLT5kaXNjaXBsaW5lX211dGV4KTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTEwNDAsNiArMTA0MSw3IEBACiAJaW50IHJjID0gMCwgcmMyID0gMCwgcmMzID0gMDsKIAllbnVtIHFldGhfY2FyZF9zdGF0ZXMgcmVjb3Zlcl9mbGFnOwogCisJbXV0ZXhfbG9jaygmY2FyZC0+ZGlzY2lwbGluZV9tdXRleCk7CiAJbXV0ZXhfbG9jaygmY2FyZC0+Y29uZl9tdXRleCk7CiAJUUVUSF9EQkZfVEVYVChTRVRVUCwgMywgInNldG9mZmwiKTsKIAlRRVRIX0RCRl9IRVgoU0VUVVAsIDMsICZjYXJkLCBzaXplb2Yodm9pZCAqKSk7CkBAIC0xMDYwLDYgKzEwNjIsNyBAQAogCS8qIGxldCB1c2VyX3NwYWNlIGtub3cgdGhhdCBkZXZpY2UgaXMgb2ZmbGluZSAqLwogCWtvYmplY3RfdWV2ZW50KCZjZ2Rldi0+ZGV2LmtvYmosIEtPQkpfQ0hBTkdFKTsKIAltdXRleF91bmxvY2soJmNhcmQtPmNvbmZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2FyZC0+ZGlzY2lwbGluZV9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNzQsMTEgKzEwNzcsMTAgQEAKIAlpbnQgcmMgPSAwOwogCiAJY2FyZCA9IChzdHJ1Y3QgcWV0aF9jYXJkICopIHB0cjsKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAicmVjb3ZlcjEiKTsKLQlRRVRIX0RCRl9IRVgoVFJBQ0UsIDIsICZjYXJkLCBzaXplb2Yodm9pZCAqKSk7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgInJlY292ZXIxIik7CiAJaWYgKCFxZXRoX2RvX3J1bl90aHJlYWQoY2FyZCwgUUVUSF9SRUNPVkVSX1RIUkVBRCkpCiAJCXJldHVybiAwOwotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJyZWNvdmVyMiIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJyZWNvdmVyMiIpOwogCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsCiAJCSJBIHJlY292ZXJ5IHByb2Nlc3MgaGFzIGJlZW4gc3RhcnRlZCBmb3IgdGhlIGRldmljZVxuIik7CiAJY2FyZC0+dXNlX2hhcmRfc3RvcCA9IDE7CkBAIC0xMTgxLDEyICsxMTgzLDEyIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmMgPSAwOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgIm9zbmRjdHJkIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNSwgIm9zbmRjdHJkIik7CiAKIAl3YWl0X2V2ZW50KGNhcmQtPndhaXRfcSwKIAkJICAgYXRvbWljX2NtcHhjaGcoJmNhcmQtPndyaXRlLmlycV9wZW5kaW5nLCAwLCAxKSA9PSAwKTsKIAlxZXRoX3ByZXBhcmVfY29udHJvbF9kYXRhKGNhcmQsIGxlbiwgaW9iKTsKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA2LCAib3Nub2lycXAiKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCA2LCAib3Nub2lycXAiKTsKIAlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soY2FyZC0+d3JpdGUuY2N3ZGV2KSwgZmxhZ3MpOwogCXJjID0gY2N3X2RldmljZV9zdGFydChjYXJkLT53cml0ZS5jY3dkZXYsICZjYXJkLT53cml0ZS5jY3csCiAJCQkgICAgICAoYWRkcl90KSBpb2IsIDAsIDApOwpAQCAtMTE5NCw3ICsxMTk2LDcgQEAKIAlpZiAocmMpIHsKIAkJUUVUSF9EQkZfTUVTU0FHRSgyLCAicWV0aF9vc25fc2VuZF9jb250cm9sX2RhdGE6ICIKIAkJCSAgICJjY3dfZGV2aWNlX3N0YXJ0IHJjID0gJWlcbiIsIHJjKTsKLQkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDIsICIgZXJyJWQiLCByYyk7CisJCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCAyLCAiIGVyciVkIiwgcmMpOwogCQlxZXRoX3JlbGVhc2VfYnVmZmVyKGlvYi0+Y2hhbm5lbCwgaW9iKTsKIAkJYXRvbWljX3NldCgmY2FyZC0+d3JpdGUuaXJxX3BlbmRpbmcsIDApOwogCQl3YWtlX3VwKCZjYXJkLT53YWl0X3EpOwpAQCAtMTIwNyw3ICsxMjA5LDcgQEAKIHsKIAl1MTYgczEsIHMyOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgIm9zbmRpcGEiKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCA0LCAib3NuZGlwYSIpOwogCiAJcWV0aF9wcmVwYXJlX2lwYV9jbWQoY2FyZCwgaW9iLCBRRVRIX1BST1RfT1NOMik7CiAJczEgPSAodTE2KShJUEFfUERVX0hFQURFUl9TSVpFICsgZGF0YV9sZW4pOwpAQCAtMTIyNSwxMiArMTIyNywxMiBAQAogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7CiAJaW50IHJjOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgIm9zbnNkbWMiKTsKIAlpZiAoIWRldikKIAkJcmV0dXJuIC1FTk9ERVY7CiAJY2FyZCA9IGRldi0+bWxfcHJpdjsKIAlpZiAoIWNhcmQpCiAJCXJldHVybiAtRU5PREVWOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJvc25zZG1jIik7CiAJaWYgKChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX1VQKSAmJgogCSAgICAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9TT0ZUU0VUVVApKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTEyNDcsMTMgKzEyNDksMTMgQEAKIHsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgIm9zbnJlZyIpOwogCSpkZXYgPSBxZXRoX2wyX25ldGRldl9ieV9kZXZubyhyZWFkX2Rldl9ubyk7CiAJaWYgKCpkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJY2FyZCA9ICgqZGV2KS0+bWxfcHJpdjsKIAlpZiAoIWNhcmQpCiAJCXJldHVybiAtRU5PREVWOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJvc25yZWciKTsKIAlpZiAoKGFzc2lzdF9jYiA9PSBOVUxMKSB8fCAoZGF0YV9jYiA9PSBOVUxMKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJY2FyZC0+b3NuX2luZm8uYXNzaXN0X2NiID0gYXNzaXN0X2NiOwpAQCAtMTI2NiwxMiArMTI2OCwxMiBAQAogewogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAib3NuZGVyZWciKTsKIAlpZiAoIWRldikKIAkJcmV0dXJuOwogCWNhcmQgPSBkZXYtPm1sX3ByaXY7CiAJaWYgKCFjYXJkKQogCQlyZXR1cm47CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgIm9zbmRlcmVnIik7CiAJY2FyZC0+b3NuX2luZm8uYXNzaXN0X2NiID0gTlVMTDsKIAljYXJkLT5vc25faW5mby5kYXRhX2NiID0gTlVMTDsKIAlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDMuaCBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMy5oCmluZGV4IDg0NDdkMjMuLmU3MDViMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMy5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMy5oCkBAIC02NCw1ICs2NCw2IEBACiAJCQljb25zdCB1OCAqKTsKIGludCBxZXRoX2wzX3NldF9sYXJnZV9zZW5kKHN0cnVjdCBxZXRoX2NhcmQgKiwgZW51bSBxZXRoX2xhcmdlX3NlbmRfdHlwZXMpOwogaW50IHFldGhfbDNfc2V0X3J4X2NzdW0oc3RydWN0IHFldGhfY2FyZCAqLCBlbnVtIHFldGhfY2hlY2tzdW1fdHlwZXMpOworaW50IHFldGhfbDNfaXNfYWRkcl9jb3ZlcmVkX2J5X2lwYXRvKHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHFldGhfaXBhZGRyICopOwogCiAjZW5kaWYgLyogX19RRVRIX0wzX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMKaW5kZXggNjFhZGFlMi4uZTIyYWUyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jCkBAIC0xOTUsNyArMTk1LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcWV0aF9sM19pc19hZGRyX2NvdmVyZWRfYnlfaXBhdG8oc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKK2ludCBxZXRoX2wzX2lzX2FkZHJfY292ZXJlZF9ieV9pcGF0byhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAogCQkJCQkJc3RydWN0IHFldGhfaXBhZGRyICphZGRyKQogewogCXN0cnVjdCBxZXRoX2lwYXRvX2VudHJ5ICppcGF0b2U7CkBAIC0yODcsNyArMjg3LDcgQEAKIAkJCQlhZGRyLT51c2VycyArPSBhZGQgPyAxIDogLTE7CiAJCQlpZiAoYWRkICYmIChhZGRyLT50eXBlID09IFFFVEhfSVBfVFlQRV9OT1JNQUwpICYmCiAJCQkgICAgcWV0aF9sM19pc19hZGRyX2NvdmVyZWRfYnlfaXBhdG8oY2FyZCwgYWRkcikpIHsKLQkJCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAidGtvdmFkZHIiKTsKKwkJCQlRRVRIX0NBUkRfVEVYVChjYXJkLCAyLCAidGtvdmFkZHIiKTsKIAkJCQlhZGRyLT5zZXRfZmxhZ3MgfD0gUUVUSF9JUEFfU0VUSVBfVEFLRU9WRVJfRkxBRzsKIAkJCX0KIAkJCWxpc3RfYWRkX3RhaWwoJmFkZHItPmVudHJ5LCBjYXJkLT5pcF90YmRfbGlzdCk7CkBAIC0zMDEsMTMgKzMwMSwxMyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJjID0gMDsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJkZWxpcCIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDQsICJkZWxpcCIpOwogCiAJaWYgKGFkZHItPnByb3RvID09IFFFVEhfUFJPVF9JUFY0KQotCQlRRVRIX0RCRl9IRVgoVFJBQ0UsIDQsICZhZGRyLT51LmE0LmFkZHIsIDQpOworCQlRRVRIX0NBUkRfSEVYKGNhcmQsIDQsICZhZGRyLT51LmE0LmFkZHIsIDQpOwogCWVsc2UgewotCQlRRVRIX0RCRl9IRVgoVFJBQ0UsIDQsICZhZGRyLT51LmE2LmFkZHIsIDgpOwotCQlRRVRIX0RCRl9IRVgoVFJBQ0UsIDQsICgoY2hhciAqKSZhZGRyLT51LmE2LmFkZHIpICsgOCwgOCk7CisJCVFFVEhfQ0FSRF9IRVgoY2FyZCwgNCwgJmFkZHItPnUuYTYuYWRkciwgOCk7CisJCVFFVEhfQ0FSRF9IRVgoY2FyZCwgNCwgKChjaGFyICopJmFkZHItPnUuYTYuYWRkcikgKyA4LCA4KTsKIAl9CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKIAlyYyA9IF9fcWV0aF9sM19pbnNlcnRfaXBfdG9kbyhjYXJkLCBhZGRyLCAwKTsKQEAgLTMyMCwxMiArMzIwLDEyIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmMgPSAwOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgImFkZGlwIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgImFkZGlwIik7CiAJaWYgKGFkZHItPnByb3RvID09IFFFVEhfUFJPVF9JUFY0KQotCQlRRVRIX0RCRl9IRVgoVFJBQ0UsIDQsICZhZGRyLT51LmE0LmFkZHIsIDQpOworCQlRRVRIX0NBUkRfSEVYKGNhcmQsIDQsICZhZGRyLT51LmE0LmFkZHIsIDQpOwogCWVsc2UgewotCQlRRVRIX0RCRl9IRVgoVFJBQ0UsIDQsICZhZGRyLT51LmE2LmFkZHIsIDgpOwotCQlRRVRIX0RCRl9IRVgoVFJBQ0UsIDQsICgoY2hhciAqKSZhZGRyLT51LmE2LmFkZHIpICsgOCwgOCk7CisJCVFFVEhfQ0FSRF9IRVgoY2FyZCwgNCwgJmFkZHItPnUuYTYuYWRkciwgOCk7CisJCVFFVEhfQ0FSRF9IRVgoY2FyZCwgNCwgKChjaGFyICopJmFkZHItPnUuYTYuYWRkcikgKyA4LCA4KTsKIAl9CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKIAlyYyA9IF9fcWV0aF9sM19pbnNlcnRfaXBfdG9kbyhjYXJkLCBhZGRyLCAxKTsKQEAgLTM1MywxMCArMzUzLDEwIEBACiAJc3RydWN0IHFldGhfaXBhZGRyICppcHRvZG87CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJkZWxtYyIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDQsICJkZWxtYyIpOwogCWlwdG9kbyA9IHFldGhfbDNfZ2V0X2FkZHJfYnVmZmVyKFFFVEhfUFJPVF9JUFY0KTsKIAlpZiAoIWlwdG9kbykgewotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiZG1jbm9tZW0iKTsKKwkJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgImRtY25vbWVtIik7CiAJCXJldHVybjsKIAl9CiAJaXB0b2RvLT50eXBlID0gUUVUSF9JUF9UWVBFX0RFTF9BTExfTUM7CkBAIC00NTcsOCArNDU3LDggQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByYzsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJzZGlwbGlzdCIpOwotCVFFVEhfREJGX0hFWChUUkFDRSwgMiwgJmNhcmQsIHNpemVvZih2b2lkICopKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCAyLCAic2RpcGxpc3QiKTsKKwlRRVRIX0NBUkRfSEVYKGNhcmQsIDIsICZjYXJkLCBzaXplb2Yodm9pZCAqKSk7CiAKIAlpZiAoY2FyZC0+b3B0aW9ucy5zbmlmZmVyKQogCQlyZXR1cm47CkBAIC00NjYsNyArNDY2LDcgQEAKIAl0YmRfbGlzdCA9IGNhcmQtPmlwX3RiZF9saXN0OwogCWNhcmQtPmlwX3RiZF9saXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCksIEdGUF9BVE9NSUMpOwogCWlmICghY2FyZC0+aXBfdGJkX2xpc3QpIHsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMCwgInNpbG5vbWVtIik7CisJCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDAsICJzaWxub21lbSIpOwogCQljYXJkLT5pcF90YmRfbGlzdCA9IHRiZF9saXN0OwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5pcF9sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKQEAgLTUxNyw3ICs1MTcsNyBAQAogCXN0cnVjdCBxZXRoX2lwYWRkciAqYWRkciwgKnRtcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgImNsZWFyaXAiKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCA0LCAiY2xlYXJpcCIpOwogCWlmIChyZWNvdmVyICYmIGNhcmQtPm9wdGlvbnMuc25pZmZlcikKIAkJcmV0dXJuOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5pcF9sb2NrLCBmbGFncyk7CkBAIC01NzcsNyArNTc3LDcgQEAKIAlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7CiAJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgInNldGRlbG1jIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgInNldGRlbG1jIik7CiAKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIGlwYWNtZCwgYWRkci0+cHJvdG8pOwogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKQEAgLTYxNSw4ICs2MTUsOCBAQAogCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKIAlfX3U4IG5ldG1hc2tbMTZdOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgInNldGRlbGlwIik7Ci0JUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDQsICJmbGFncyUwMlgiLCBmbGFncyk7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgInNldGRlbGlwIik7CisJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDQsICJmbGFncyUwMlgiLCBmbGFncyk7CiAKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIGlwYWNtZCwgYWRkci0+cHJvdG8pOwogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKQEAgLTY0NSw3ICs2NDUsNyBAQAogCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKIAlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCAic2V0cm91dGciKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCA0LCAic2V0cm91dGciKTsKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIElQQV9DTURfU0VUUlRHLCBwcm90KTsKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CiAJY21kLT5kYXRhLnNldHJ0Zy50eXBlID0gKHR5cGUpOwpAQCAtNjg5LDcgKzY4OSw3IEBACiB7CiAJaW50IHJjOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgInNldHJ0ZzQiKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCAzLCAic2V0cnRnNCIpOwogCiAJcWV0aF9sM19jb3JyZWN0X3JvdXRpbmdfdHlwZShjYXJkLCAmY2FyZC0+b3B0aW9ucy5yb3V0ZTQudHlwZSwKIAkJCQkgIFFFVEhfUFJPVF9JUFY0KTsKQEAgLTcwOSw3ICs3MDksNyBAQAogewogCWludCByYyA9IDA7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAic2V0cnRnNiIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDMsICJzZXRydGc2Iik7CiAjaWZkZWYgQ09ORklHX1FFVEhfSVBWNgogCiAJaWYgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfSVBWNikpCkBAIC03NTMsNyArNzUzLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByYyA9IDA7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiYWRkaXBhdG8iKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCAyLCAiYWRkaXBhdG8iKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaXBhdG9lLCAmY2FyZC0+aXBhdG8uZW50cmllcywgZW50cnkpIHsKIAkJaWYgKGlwYXRvZS0+cHJvdG8gIT0gbmV3LT5wcm90bykKQEAgLTc3OCw3ICs3NzgsNyBAQAogCXN0cnVjdCBxZXRoX2lwYXRvX2VudHJ5ICppcGF0b2UsICp0bXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJkZWxpcGF0byIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJkZWxpcGF0byIpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5pcF9sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlwYXRvZSwgdG1wLCAmY2FyZC0+aXBhdG8uZW50cmllcywgZW50cnkpIHsKIAkJaWYgKGlwYXRvZS0+cHJvdG8gIT0gcHJvdG8pCkBAIC04MDYsMTEgKzgwNiwxMSBAQAogCWlwYWRkciA9IHFldGhfbDNfZ2V0X2FkZHJfYnVmZmVyKHByb3RvKTsKIAlpZiAoaXBhZGRyKSB7CiAJCWlmIChwcm90byA9PSBRRVRIX1BST1RfSVBWNCkgewotCQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImFkZHZpcGE0Iik7CisJCQlRRVRIX0NBUkRfVEVYVChjYXJkLCAyLCAiYWRkdmlwYTQiKTsKIAkJCW1lbWNweSgmaXBhZGRyLT51LmE0LmFkZHIsIGFkZHIsIDQpOwogCQkJaXBhZGRyLT51LmE0Lm1hc2sgPSAwOwogCQl9IGVsc2UgaWYgKHByb3RvID09IFFFVEhfUFJPVF9JUFY2KSB7Ci0JCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiYWRkdmlwYTYiKTsKKwkJCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJhZGR2aXBhNiIpOwogCQkJbWVtY3B5KCZpcGFkZHItPnUuYTYuYWRkciwgYWRkciwgMTYpOwogCQkJaXBhZGRyLT51LmE2LnBmeGxlbiA9IDA7CiAJCX0KQEAgLTg0MSwxMSArODQxLDExIEBACiAJaXBhZGRyID0gcWV0aF9sM19nZXRfYWRkcl9idWZmZXIocHJvdG8pOwogCWlmIChpcGFkZHIpIHsKIAkJaWYgKHByb3RvID09IFFFVEhfUFJPVF9JUFY0KSB7Ci0JCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiZGVsdmlwYTQiKTsKKwkJCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJkZWx2aXBhNCIpOwogCQkJbWVtY3B5KCZpcGFkZHItPnUuYTQuYWRkciwgYWRkciwgNCk7CiAJCQlpcGFkZHItPnUuYTQubWFzayA9IDA7CiAJCX0gZWxzZSBpZiAocHJvdG8gPT0gUUVUSF9QUk9UX0lQVjYpIHsKLQkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJkZWx2aXBhNiIpOworCQkJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgImRlbHZpcGE2Iik7CiAJCQltZW1jcHkoJmlwYWRkci0+dS5hNi5hZGRyLCBhZGRyLCAxNik7CiAJCQlpcGFkZHItPnUuYTYucGZ4bGVuID0gMDsKIAkJfQpAQCAtODcwLDExICs4NzAsMTEgQEAKIAlpcGFkZHIgPSBxZXRoX2wzX2dldF9hZGRyX2J1ZmZlcihwcm90byk7CiAJaWYgKGlwYWRkcikgewogCQlpZiAocHJvdG8gPT0gUUVUSF9QUk9UX0lQVjQpIHsKLQkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJhZGRyeGlwNCIpOworCQkJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgImFkZHJ4aXA0Iik7CiAJCQltZW1jcHkoJmlwYWRkci0+dS5hNC5hZGRyLCBhZGRyLCA0KTsKIAkJCWlwYWRkci0+dS5hNC5tYXNrID0gMDsKIAkJfSBlbHNlIGlmIChwcm90byA9PSBRRVRIX1BST1RfSVBWNikgewotCQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImFkZHJ4aXA2Iik7CisJCQlRRVRIX0NBUkRfVEVYVChjYXJkLCAyLCAiYWRkcnhpcDYiKTsKIAkJCW1lbWNweSgmaXBhZGRyLT51LmE2LmFkZHIsIGFkZHIsIDE2KTsKIAkJCWlwYWRkci0+dS5hNi5wZnhsZW4gPSAwOwogCQl9CkBAIC05MDUsMTEgKzkwNSwxMSBAQAogCWlwYWRkciA9IHFldGhfbDNfZ2V0X2FkZHJfYnVmZmVyKHByb3RvKTsKIAlpZiAoaXBhZGRyKSB7CiAJCWlmIChwcm90byA9PSBRRVRIX1BST1RfSVBWNCkgewotCQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImFkZHJ4aXA0Iik7CisJCQlRRVRIX0NBUkRfVEVYVChjYXJkLCAyLCAiYWRkcnhpcDQiKTsKIAkJCW1lbWNweSgmaXBhZGRyLT51LmE0LmFkZHIsIGFkZHIsIDQpOwogCQkJaXBhZGRyLT51LmE0Lm1hc2sgPSAwOwogCQl9IGVsc2UgaWYgKHByb3RvID09IFFFVEhfUFJPVF9JUFY2KSB7Ci0JCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiYWRkcnhpcDYiKTsKKwkJCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJhZGRyeGlwNiIpOwogCQkJbWVtY3B5KCZpcGFkZHItPnUuYTYuYWRkciwgYWRkciwgMTYpOwogCQkJaXBhZGRyLT51LmE2LnBmeGxlbiA9IDA7CiAJCX0KQEAgLTkyOSwxNSArOTI5LDE1IEBACiAJaW50IGNudCA9IDM7CiAKIAlpZiAoYWRkci0+cHJvdG8gPT0gUUVUSF9QUk9UX0lQVjQpIHsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgInNldGFkZHI0Iik7Ci0JCVFFVEhfREJGX0hFWChUUkFDRSwgMywgJmFkZHItPnUuYTQuYWRkciwgc2l6ZW9mKGludCkpOworCQlRRVRIX0NBUkRfVEVYVChjYXJkLCAyLCAic2V0YWRkcjQiKTsKKwkJUUVUSF9DQVJEX0hFWChjYXJkLCAzLCAmYWRkci0+dS5hNC5hZGRyLCBzaXplb2YoaW50KSk7CiAJfSBlbHNlIGlmIChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNikgewotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAic2V0YWRkcjYiKTsKLQkJUUVUSF9EQkZfSEVYKFRSQUNFLCAzLCAmYWRkci0+dS5hNi5hZGRyLCA4KTsKLQkJUUVUSF9EQkZfSEVYKFRSQUNFLCAzLCAoKGNoYXIgKikmYWRkci0+dS5hNi5hZGRyKSArIDgsIDgpOworCQlRRVRIX0NBUkRfVEVYVChjYXJkLCAyLCAic2V0YWRkcjYiKTsKKwkJUUVUSF9DQVJEX0hFWChjYXJkLCAzLCAmYWRkci0+dS5hNi5hZGRyLCA4KTsKKwkJUUVUSF9DQVJEX0hFWChjYXJkLCAzLCAoKGNoYXIgKikmYWRkci0+dS5hNi5hZGRyKSArIDgsIDgpOwogCX0gZWxzZSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJzZXRhZGRyPyIpOwotCQlRRVRIX0RCRl9IRVgoVFJBQ0UsIDMsIGFkZHIsIHNpemVvZihzdHJ1Y3QgcWV0aF9pcGFkZHIpKTsKKwkJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgInNldGFkZHI/Iik7CisJCVFFVEhfQ0FSRF9IRVgoY2FyZCwgMywgYWRkciwgc2l6ZW9mKHN0cnVjdCBxZXRoX2lwYWRkcikpOwogCX0KIAlkbyB7CiAJCWlmIChhZGRyLT5pc19tdWx0aWNhc3QpCkBAIC05NDYsMTAgKzk0NiwxMCBAQAogCQkJcmMgPSBxZXRoX2wzX3NlbmRfc2V0ZGVsaXAoY2FyZCwgYWRkciwgSVBBX0NNRF9TRVRJUCwKIAkJCQkJYWRkci0+c2V0X2ZsYWdzKTsKIAkJaWYgKHJjKQotCQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImZhaWxlZCIpOworCQkJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgImZhaWxlZCIpOwogCX0gd2hpbGUgKCgtLWNudCA+IDApICYmIHJjKTsKIAlpZiAocmMpIHsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgIkZBSUxFRCIpOworCQlRRVRIX0NBUkRfVEVYVChjYXJkLCAyLCAiRkFJTEVEIik7CiAJCXFldGhfbDNfaXBhZGRyX3RvX3N0cmluZyhhZGRyLT5wcm90bywgKHU4ICopJmFkZHItPnUsIGJ1Zik7CiAJCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsCiAJCQkiUmVnaXN0ZXJpbmcgSVAgYWRkcmVzcyAlcyBmYWlsZWRcbiIsIGJ1Zik7CkBAIC05NjMsMTUgKzk2MywxNSBAQAogCWludCByYyA9IDA7CiAKIAlpZiAoYWRkci0+cHJvdG8gPT0gUUVUSF9QUk9UX0lQVjQpIHsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImRlbGFkZHI0Iik7Ci0JCVFFVEhfREJGX0hFWChUUkFDRSwgMywgJmFkZHItPnUuYTQuYWRkciwgc2l6ZW9mKGludCkpOworCQlRRVRIX0NBUkRfVEVYVChjYXJkLCAyLCAiZGVsYWRkcjQiKTsKKwkJUUVUSF9DQVJEX0hFWChjYXJkLCAzLCAmYWRkci0+dS5hNC5hZGRyLCBzaXplb2YoaW50KSk7CiAJfSBlbHNlIGlmIChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNikgewotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiZGVsYWRkcjYiKTsKLQkJUUVUSF9EQkZfSEVYKFRSQUNFLCAzLCAmYWRkci0+dS5hNi5hZGRyLCA4KTsKLQkJUUVUSF9EQkZfSEVYKFRSQUNFLCAzLCAoKGNoYXIgKikmYWRkci0+dS5hNi5hZGRyKSArIDgsIDgpOworCQlRRVRIX0NBUkRfVEVYVChjYXJkLCAyLCAiZGVsYWRkcjYiKTsKKwkJUUVUSF9DQVJEX0hFWChjYXJkLCAzLCAmYWRkci0+dS5hNi5hZGRyLCA4KTsKKwkJUUVUSF9DQVJEX0hFWChjYXJkLCAzLCAoKGNoYXIgKikmYWRkci0+dS5hNi5hZGRyKSArIDgsIDgpOwogCX0gZWxzZSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJkZWxhZGRyPyIpOwotCQlRRVRIX0RCRl9IRVgoVFJBQ0UsIDMsIGFkZHIsIHNpemVvZihzdHJ1Y3QgcWV0aF9pcGFkZHIpKTsKKwkJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgImRlbGFkZHI/Iik7CisJCVFFVEhfQ0FSRF9IRVgoY2FyZCwgMywgYWRkciwgc2l6ZW9mKHN0cnVjdCBxZXRoX2lwYWRkcikpOwogCX0KIAlpZiAoYWRkci0+aXNfbXVsdGljYXN0KQogCQlyYyA9IHFldGhfbDNfc2VuZF9zZXRkZWxtYyhjYXJkLCBhZGRyLCBJUEFfQ01EX0RFTElQTSk7CkBAIC05NzksNyArOTc5LDcgQEAKIAkJcmMgPSBxZXRoX2wzX3NlbmRfc2V0ZGVsaXAoY2FyZCwgYWRkciwgSVBBX0NNRF9ERUxJUCwKIAkJCQkJYWRkci0+ZGVsX2ZsYWdzKTsKIAlpZiAocmMpCi0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJmYWlsZWQiKTsKKwkJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgImZhaWxlZCIpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMTAxMiw3ICsxMDEyLDcgQEAKIAlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7CiAJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgImFkcG1vZGUiKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCA0LCAiYWRwbW9kZSIpOwogCiAJaW9iID0gcWV0aF9nZXRfYWRhcHRlcl9jbWQoY2FyZCwgY29tbWFuZCwKIAkJCQkgICBzaXplb2Yoc3RydWN0IHFldGhfaXBhY21kX3NldGFkcHBhcm1zKSk7CkBAIC0xMDI3LDcgKzEwMjcsNyBAQAogewogCWludCByYzsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJhZHBoc3RyIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgImFkcGhzdHIiKTsKIAogCWlmIChxZXRoX2FkcF9zdXBwb3J0ZWQoY2FyZCwgSVBBX1NFVEFEUF9TRVRfQlJPQURDQVNUX01PREUpKSB7CiAJCXJjID0gcWV0aF9sM19zZW5kX3NldGFkcF9tb2RlKGNhcmQsCkBAIC0xMDkzLDcgKzEwOTMsNyBAQAogewogCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJkZWZhZHBjYiIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDQsICJkZWZhZHBjYiIpOwogCiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKIAlpZiAoY21kLT5oZHIucmV0dXJuX2NvZGUgPT0gMCkgewpAQCAtMTEwNiwxMyArMTEwNiwxMyBAQAogCWlmIChjbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLmFzc2lzdF9ubyA9PSBJUEFfSU5CT1VORF9DSEVDS1NVTSAmJgogCSAgICBjbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLmNvbW1hbmRfY29kZSA9PSBJUEFfQ01EX0FTU19TVEFSVCkgewogCQljYXJkLT5pbmZvLmNzdW1fbWFzayA9IGNtZC0+ZGF0YS5zZXRhc3NwYXJtcy5kYXRhLmZsYWdzXzMyYml0OwotCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMywgImNzdW06JWQiLCBjYXJkLT5pbmZvLmNzdW1fbWFzayk7CisJCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCAzLCAiY3N1bTolZCIsIGNhcmQtPmluZm8uY3N1bV9tYXNrKTsKIAl9CiAJaWYgKGNtZC0+ZGF0YS5zZXRhc3NwYXJtcy5oZHIuYXNzaXN0X25vID09IElQQV9PVVRCT1VORF9DSEVDS1NVTSAmJgogCSAgICBjbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLmNvbW1hbmRfY29kZSA9PSBJUEFfQ01EX0FTU19TVEFSVCkgewogCQljYXJkLT5pbmZvLnR4X2NzdW1fbWFzayA9CiAJCQljbWQtPmRhdGEuc2V0YXNzcGFybXMuZGF0YS5mbGFnc18zMmJpdDsKLQkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDMsICJ0Y3N1OiVkIiwgY2FyZC0+aW5mby50eF9jc3VtX21hc2spOworCQlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgMywgInRjc3U6JWQiLCBjYXJkLT5pbmZvLnR4X2NzdW1fbWFzayk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMTI1LDcgKzExMjUsNyBAQAogCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKIAlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCAiZ2V0YXNzY20iKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCA0LCAiZ2V0YXNzY20iKTsKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIElQQV9DTURfU0VUQVNTUEFSTVMsIHByb3QpOwogCiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwpAQCAtMTE0Nyw3ICsxMTQ3LDcgQEAKIAlpbnQgcmM7CiAJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgInNlbmRhc3NwIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgInNlbmRhc3NwIik7CiAKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CiAJaWYgKGxlbiA8PSBzaXplb2YoX191MzIpKQpAQCAtMTE2Niw3ICsxMTY2LDcgQEAKIAlpbnQgcmM7CiAJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgInNpbWFzc3A2Iik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgInNpbWFzc3A2Iik7CiAJaW9iID0gcWV0aF9sM19nZXRfc2V0YXNzcGFybXNfY21kKGNhcmQsIGlwYV9mdW5jLCBjbWRfY29kZSwKIAkJCQkgICAgICAgMCwgUUVUSF9QUk9UX0lQVjYpOwogCXJjID0gcWV0aF9sM19zZW5kX3NldGFzc3Bhcm1zKGNhcmQsIGlvYiwgMCwgMCwKQEAgLTExODIsNyArMTE4Miw3IEBACiAJaW50IGxlbmd0aCA9IDA7CiAJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgInNpbWFzc3A0Iik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgInNpbWFzc3A0Iik7CiAJaWYgKGRhdGEpCiAJCWxlbmd0aCA9IHNpemVvZihfX3UzMik7CiAJaW9iID0gcWV0aF9sM19nZXRfc2V0YXNzcGFybXNfY21kKGNhcmQsIGlwYV9mdW5jLCBjbWRfY29kZSwKQEAgLTExOTYsNyArMTE5Niw3IEBACiB7CiAJaW50IHJjOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgImlwYWFycCIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDMsICJpcGFhcnAiKTsKIAogCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX0FSUF9QUk9DRVNTSU5HKSkgewogCQlkZXZfaW5mbygmY2FyZC0+Z2Rldi0+ZGV2LApAQCAtMTIxOCw3ICsxMjE4LDcgQEAKIHsKIAlpbnQgcmM7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAiaXBhaXBmcmciKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCAzLCAiaXBhaXBmcmciKTsKIAogCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX0lQX0ZSQUdNRU5UQVRJT04pKSB7CiAJCWRldl9pbmZvKCZjYXJkLT5nZGV2LT5kZXYsCkBAIC0xMjQzLDcgKzEyNDMsNyBAQAogewogCWludCByYzsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJzdHNyY21hYyIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDMsICJzdHNyY21hYyIpOwogCiAJaWYgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfU09VUkNFX01BQykpIHsKIAkJZGV2X2luZm8oJmNhcmQtPmdkZXYtPmRldiwKQEAgLTEyNjUsNyArMTI2NSw3IEBACiB7CiAJaW50IHJjID0gMDsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJzdHJ0dmxhbiIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDMsICJzdHJ0dmxhbiIpOwogCiAJaWYgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfRlVMTF9WTEFOKSkgewogCQlkZXZfaW5mbygmY2FyZC0+Z2Rldi0+ZGV2LApAQCAtMTI4OSw3ICsxMjg5LDcgQEAKIHsKIAlpbnQgcmM7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAic3RtY2FzdCIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDMsICJzdG1jYXN0Iik7CiAKIAlpZiAoIXFldGhfaXNfc3VwcG9ydGVkKGNhcmQsIElQQV9NVUxUSUNBU1RJTkcpKSB7CiAJCWRldl9pbmZvKCZjYXJkLT5nZGV2LT5kZXYsCkBAIC0xMzQ5LDcgKzEzNDksNyBAQAogewogCWludCByYzsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJzb2Z0aXB2NiIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDMsICJzb2Z0aXB2NiIpOwogCiAJaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9JUUQpCiAJCWdvdG8gb3V0OwpAQCAtMTM5NSw3ICsxMzk1LDcgQEAKIHsKIAlpbnQgcmMgPSAwOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgInN0cnRpcHY2Iik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMywgInN0cnRpcHY2Iik7CiAKIAlpZiAoIXFldGhfaXNfc3VwcG9ydGVkKGNhcmQsIElQQV9JUFY2KSkgewogCQlkZXZfaW5mbygmY2FyZC0+Z2Rldi0+ZGV2LApAQCAtMTQxMiw3ICsxNDEyLDcgQEAKIHsKIAlpbnQgcmM7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAic3RicmRjc3QiKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCAzLCAic3RicmRjc3QiKTsKIAljYXJkLT5pbmZvLmJyb2FkY2FzdF9jYXBhYmxlID0gMDsKIAlpZiAoIXFldGhfaXNfc3VwcG9ydGVkKGNhcmQsIElQQV9GSUxURVJJTkcpKSB7CiAJCWRldl9pbmZvKCZjYXJkLT5nZGV2LT5kZXYsCkBAIC0xNTEyLDcgKzE1MTIsNyBAQAogewogCWludCByYyA9IDA7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAic3RydGNzdW0iKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCAzLCAic3RydGNzdW0iKTsKIAogCWlmIChjYXJkLT5vcHRpb25zLmNoZWNrc3VtX3R5cGUgPT0gTk9fQ0hFQ0tTVU1NSU5HKSB7CiAJCWRldl9pbmZvKCZjYXJkLT5nZGV2LT5kZXYsCkBAIC0xNTY5LDcgKzE1NjksNyBAQAogewogCWludCByYzsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJzdHRzbyIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDMsICJzdHRzbyIpOwogCiAJaWYgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfT1VUQk9VTkRfVFNPKSkgewogCQlkZXZfaW5mbygmY2FyZC0+Z2Rldi0+ZGV2LApAQCAtMTU5Niw3ICsxNTk2LDcgQEAKIAogc3RhdGljIGludCBxZXRoX2wzX3N0YXJ0X2lwYXNzaXN0cyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQogewotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJzdHJ0aXBhcyIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDMsICJzdHJ0aXBhcyIpOwogCiAJcWV0aF9zZXRfYWNjZXNzX2N0cmxfb25saW5lKGNhcmQpOwkvKiBnbyBvbiovCiAJcWV0aF9sM19zdGFydF9pcGFfYXJwX3Byb2Nlc3NpbmcoY2FyZCk7CS8qIGdvIG9uKi8KQEAgLTE2MTksNyArMTYxOSw3IEBACiAJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwogCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJwdW5pcWVpZCIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJwdW5pcWVpZCIpOwogCiAJaWYgKChjYXJkLT5pbmZvLnVuaXF1ZV9pZCAmIFVOSVFVRV9JRF9OT1RfQllfQ0FSRCkgPT0KIAkJVU5JUVVFX0lEX05PVF9CWV9DQVJEKQpAQCAtMTcyMyw3ICsxNzIzLDcgQEAKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKWRhdGE7CiAJcmMgPSBjbWQtPmhkci5yZXR1cm5fY29kZTsKIAlpZiAocmMpCi0JCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAyLCAiZHh0ZXIleCIsIHJjKTsKKwkJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDIsICJkeHRlciV4IiwgcmMpOwogCXN3aXRjaCAoY21kLT5kYXRhLmRpYWdhc3MuYWN0aW9uKSB7CiAJY2FzZSBRRVRIX0RJQUdTX0NNRF9UUkFDRV9RVUVSWToKIAkJYnJlYWs7CkBAIC0xODAwLDcgKzE4MDAsNyBAQAogCXN0cnVjdCBpcF9tY19saXN0ICppbTQ7CiAJY2hhciBidWZbTUFYX0FERFJfTEVOXTsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJhZGRtYyIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDQsICJhZGRtYyIpOwogCWZvciAoaW00ID0gaW40X2Rldi0+bWNfbGlzdDsgaW00OyBpbTQgPSBpbTQtPm5leHQpIHsKIAkJcWV0aF9sM19nZXRfbWFjX2Zvcl9pcG0oaW00LT5tdWx0aWFkZHIsIGJ1ZiwgaW40X2Rldi0+ZGV2KTsKIAkJaXBtID0gcWV0aF9sM19nZXRfYWRkcl9idWZmZXIoUUVUSF9QUk9UX0lQVjQpOwpAQCAtMTgyMCw3ICsxODIwLDcgQEAKIAlzdHJ1Y3Qgdmxhbl9ncm91cCAqdmc7CiAJaW50IGk7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCAiYWRkbWN2bCIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDQsICJhZGRtY3ZsIik7CiAJaWYgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfRlVMTF9WTEFOKSB8fCAoY2FyZC0+dmxhbmdycCA9PSBOVUxMKSkKIAkJcmV0dXJuOwogCkBAIC0xODQ0LDcgKzE4NDQsNyBAQAogewogCXN0cnVjdCBpbl9kZXZpY2UgKmluNF9kZXY7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCAiY2hrbWN2NCIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDQsICJjaGttY3Y0Iik7CiAJaW40X2RldiA9IGluX2Rldl9nZXQoY2FyZC0+ZGV2KTsKIAlpZiAoaW40X2RldiA9PSBOVUxMKQogCQlyZXR1cm47CkBAIC0xODYyLDcgKzE4NjIsNyBAQAogCXN0cnVjdCBpZm1jYWRkcjYgKmltNjsKIAljaGFyIGJ1ZltNQVhfQUREUl9MRU5dOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgImFkZG1jNiIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDQsICJhZGRtYzYiKTsKIAlmb3IgKGltNiA9IGluNl9kZXYtPm1jX2xpc3Q7IGltNiAhPSBOVUxMOyBpbTYgPSBpbTYtPm5leHQpIHsKIAkJbmRpc2NfbWNfbWFwKCZpbTYtPm1jYV9hZGRyLCBidWYsIGluNl9kZXYtPmRldiwgMCk7CiAJCWlwbSA9IHFldGhfbDNfZ2V0X2FkZHJfYnVmZmVyKFFFVEhfUFJPVF9JUFY2KTsKQEAgLTE4ODMsNyArMTg4Myw3IEBACiAJc3RydWN0IHZsYW5fZ3JvdXAgKnZnOwogCWludCBpOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgImFkbWM2dmwiKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCA0LCAiYWRtYzZ2bCIpOwogCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX0ZVTExfVkxBTikgfHwgKGNhcmQtPnZsYW5ncnAgPT0gTlVMTCkpCiAJCXJldHVybjsKIApAQCAtMTkwNyw3ICsxOTA3LDcgQEAKIHsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppbjZfZGV2OwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgImNoa21jdjYiKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCA0LCAiY2hrbWN2NiIpOwogCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX0lQVjYpKQogCQlyZXR1cm4gOwogCWluNl9kZXYgPSBpbjZfZGV2X2dldChjYXJkLT5kZXYpOwpAQCAtMTkyOCw3ICsxOTI4LDcgQEAKIAlzdHJ1Y3QgaW5faWZhZGRyICppZmE7CiAJc3RydWN0IHFldGhfaXBhZGRyICphZGRyOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgImZydmFkZHI0Iik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgImZydmFkZHI0Iik7CiAKIAlpbl9kZXYgPSBpbl9kZXZfZ2V0KHZsYW5fZ3JvdXBfZ2V0X2RldmljZShjYXJkLT52bGFuZ3JwLCB2aWQpKTsKIAlpZiAoIWluX2RldikKQEAgLTE5NTQsNyArMTk1NCw3IEBACiAJc3RydWN0IGluZXQ2X2lmYWRkciAqaWZhOwogCXN0cnVjdCBxZXRoX2lwYWRkciAqYWRkcjsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJmcnZhZGRyNiIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDQsICJmcnZhZGRyNiIpOwogCiAJaW42X2RldiA9IGluNl9kZXZfZ2V0KHZsYW5fZ3JvdXBfZ2V0X2RldmljZShjYXJkLT52bGFuZ3JwLCB2aWQpKTsKIAlpZiAoIWluNl9kZXYpCkBAIC0xOTg5LDcgKzE5ODksNyBAQAogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPm1sX3ByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJ2bGFucmVnIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgInZsYW5yZWciKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+dmxhbmxvY2ssIGZsYWdzKTsKIAljYXJkLT52bGFuZ3JwID0gZ3JwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPnZsYW5sb2NrLCBmbGFncyk7CkBAIC0yMDA1LDkgKzIwMDUsOSBAQAogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPm1sX3ByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCVFFVEhfREJGX1RFWFRfKFRSQUNFLCA0LCAia2lkOiVkIiwgdmlkKTsKKwlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgNCwgImtpZDolZCIsIHZpZCk7CiAJaWYgKHFldGhfd2FpdF9mb3JfdGhyZWFkcyhjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSkgewotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAia2lkUkVDIik7CisJCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDMsICJraWRSRUMiKTsKIAkJcmV0dXJuOwogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+dmxhbmxvY2ssIGZsYWdzKTsKQEAgLTIxNjIsNyArMjE2Miw3IEBACiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAiaW5idW5rbm8iKTsKKwkJCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDMsICJpbmJ1bmtubyIpOwogCQkJUUVUSF9EQkZfSEVYKENUUkwsIDMsIGhkciwgUUVUSF9EQkZfQ1RSTF9MRU4pOwogCQkJY29udGludWU7CiAJCX0KQEAgLTIyMjksNyArMjIyOSw4IEBACiAJCWNhcmQgPSB2bGFuX2Rldl9yZWFsX2RldihkZXYpLT5tbF9wcml2OwogCWlmIChjYXJkICYmIGNhcmQtPm9wdGlvbnMubGF5ZXIyKQogCQljYXJkID0gTlVMTDsKLQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgNCwgIiVkIiwgcmMpOworCWlmIChjYXJkKQorCQlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgNCwgIiVkIiwgcmMpOwogCXJldHVybiBjYXJkIDsKIH0KIApAQCAtMjMwNywxMCArMjMwOCwxMCBAQAogCX0gZWxzZSBpZiAoY2FyZC0+b3B0aW9ucy5zbmlmZmVyICYmCS8qIEhpcGVyU29ja2V0cyB0cmFjZSAqLwogCQkgICBxZXRoX2FkcF9zdXBwb3J0ZWQoY2FyZCwgSVBBX1NFVEFEUF9TRVRfRElBR19BU1NJU1QpKSB7CiAJCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICIrcHJvbWlzYyIpOworCQkJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMywgIitwcm9taXNjIik7CiAJCQlxZXRoX2RpYWdzX3RyYWNlKGNhcmQsIFFFVEhfRElBR1NfQ01EX1RSQUNFX0VOQUJMRSk7CiAJCX0gZWxzZSB7Ci0JCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAiLXByb21pc2MiKTsKKwkJCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDMsICItcHJvbWlzYyIpOwogCQkJcWV0aF9kaWFnc190cmFjZShjYXJkLCBRRVRIX0RJQUdTX0NNRF9UUkFDRV9ESVNBQkxFKTsKIAkJfQogCX0KQEAgLTIzMjAsNyArMjMyMSw3IEBACiB7CiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+bWxfcHJpdjsKIAotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJzZXRtdWx0aSIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDMsICJzZXRtdWx0aSIpOwogCWlmIChxZXRoX3RocmVhZHNfcnVubmluZyhjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSAmJgogCSAgICAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9VUCkpCiAJCXJldHVybjsKQEAgLTIzNjUsNyArMjM2Niw3IEBACiAJaW50IHRtcDsKIAlpbnQgcmM7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAiYXJwc3Rub2UiKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCAzLCAiYXJwc3Rub2UiKTsKIAogCS8qCiAJICogY3VycmVudGx5IEd1ZXN0TEFOIG9ubHkgc3VwcG9ydHMgdGhlIEFSUCBhc3Npc3QgZnVuY3Rpb24KQEAgLTI0MTcsMTcgKzI0MTgsMTcgQEAKIAlpbnQgdWVudHJ5X3NpemU7CiAJaW50IGk7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCAiYXJwcXVlY2IiKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCA0LCAiYXJwcXVlY2IiKTsKIAogCXFpbmZvID0gKHN0cnVjdCBxZXRoX2FycF9xdWVyeV9pbmZvICopIHJlcGx5LT5wYXJhbTsKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBkYXRhOwogCWlmIChjbWQtPmhkci5yZXR1cm5fY29kZSkgewotCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgNCwgInFhZXIxJWkiLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7CisJCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCA0LCAicWFlcjElaSIsIGNtZC0+aGRyLnJldHVybl9jb2RlKTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmIChjbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLnJldHVybl9jb2RlKSB7CiAJCWNtZC0+aGRyLnJldHVybl9jb2RlID0gY21kLT5kYXRhLnNldGFzc3Bhcm1zLmhkci5yZXR1cm5fY29kZTsKLQkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDQsICJxYWVyMiVpIiwgY21kLT5oZHIucmV0dXJuX2NvZGUpOworCQlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgNCwgInFhZXIyJWkiLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7CiAJCXJldHVybiAwOwogCX0KIAlxZGF0YSA9ICZjbWQtPmRhdGEuc2V0YXNzcGFybXMuZGF0YS5xdWVyeV9hcnA7CkBAIC0yNDQ5LDE0ICsyNDUwLDE0IEBACiAJLyogY2hlY2sgaWYgdGhlcmUgaXMgZW5vdWdoIHJvb20gaW4gdXNlcnNwYWNlICovCiAJaWYgKChxaW5mby0+dWRhdGFfbGVuIC0gcWluZm8tPnVkYXRhX29mZnNldCkgPAogCQkJcWRhdGEtPm5vX2VudHJpZXMgKiB1ZW50cnlfc2l6ZSl7Ci0JCVFFVEhfREJGX1RFWFRfKFRSQUNFLCA0LCAicWFlcjMlaSIsIC1FTk9NRU0pOworCQlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgNCwgInFhZXIzJWkiLCAtRU5PTUVNKTsKIAkJY21kLT5oZHIucmV0dXJuX2NvZGUgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9lcnJvcjsKIAl9Ci0JUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDQsICJhbm9yZSVpIiwKKwlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgNCwgImFub3JlJWkiLAogCQkgICAgICAgY21kLT5kYXRhLnNldGFzc3Bhcm1zLmhkci5udW1iZXJfb2ZfcmVwbGllcyk7Ci0JUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDQsICJhc2VxbiVpIiwgY21kLT5kYXRhLnNldGFzc3Bhcm1zLmhkci5zZXFfbm8pOwotCVFFVEhfREJGX1RFWFRfKFRSQUNFLCA0LCAiYW5vZW4laSIsIHFkYXRhLT5ub19lbnRyaWVzKTsKKwlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgNCwgImFzZXFuJWkiLCBjbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLnNlcV9ubyk7CisJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDQsICJhbm9lbiVpIiwgcWRhdGEtPm5vX2VudHJpZXMpOwogCiAJaWYgKHFpbmZvLT5tYXNrX2JpdHMgJiBRRVRIX1FBUlBfU1RSSVBfRU5UUklFUykgewogCQkvKiBzdHJpcCBvZmYgIm1lZGlhIHNwZWNpZmljIGluZm9ybWF0aW9uIiAqLwpAQCAtMjQ5Miw3ICsyNDkzLDcgQEAKIAkJCXVuc2lnbmVkIGxvbmcpLAogCQl2b2lkICpyZXBseV9wYXJhbSkKIHsKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCAic2VuZGFycCIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDQsICJzZW5kYXJwIik7CiAKIAltZW1jcHkoaW9iLT5kYXRhLCBJUEFfUERVX0hFQURFUiwgSVBBX1BEVV9IRUFERVJfU0laRSk7CiAJbWVtY3B5KFFFVEhfSVBBX0NNRF9ERVNUX0FERFIoaW9iLT5kYXRhKSwKQEAgLTI1MDgsNyArMjUwOSw3IEBACiAJaW50IHRtcDsKIAlpbnQgcmM7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAiYXJwcXVlcnkiKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCAzLCAiYXJwcXVlcnkiKTsKIAogCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwvKklQQV9RVUVSWV9BUlBfQUREUl9JTkZPKi8KIAkJCSAgICAgICBJUEFfQVJQX1BST0NFU1NJTkcpKSB7CkBAIC0yNTUxLDcgKzI1NTIsNyBAQAogCWludCB0bXA7CiAJaW50IHJjOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgImFycGFkZW50Iik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMywgImFycGFkZW50Iik7CiAKIAkvKgogCSAqIGN1cnJlbnRseSBHdWVzdExBTiBvbmx5IHN1cHBvcnRzIHRoZSBBUlAgYXNzaXN0IGZ1bmN0aW9uCkBAIC0yNTkwLDcgKzI1OTEsNyBAQAogCWludCB0bXA7CiAJaW50IHJjOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgImFycHJtZW50Iik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMywgImFycHJtZW50Iik7CiAKIAkvKgogCSAqIGN1cnJlbnRseSBHdWVzdExBTiBvbmx5IHN1cHBvcnRzIHRoZSBBUlAgYXNzaXN0IGZ1bmN0aW9uCkBAIC0yNjI2LDcgKzI2MjcsNyBAQAogCWludCByYzsKIAlpbnQgdG1wOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgImFycGZsdXNoIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMywgImFycGZsdXNoIik7CiAKIAkvKgogCSAqIGN1cnJlbnRseSBHdWVzdExBTiBvbmx5IHN1cHBvcnRzIHRoZSBBUlAgYXNzaXN0IGZ1bmN0aW9uCkBAIC0yNzM0LDcgKzI3MzUsNyBAQAogCQlyYyA9IC1FT1BOT1RTVVBQOwogCX0KIAlpZiAocmMpCi0JCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAyLCAiaW9jZSVkIiwgcmMpOworCQlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgMiwgImlvY2UlZCIsIHJjKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTI5MDMsMTkgKzI5MDQsMTEgQEAKIAl1bnNpZ25lZCBsb25nIHRjcGQgPSAodW5zaWduZWQgbG9uZyl0Y3BfaGRyKHNrYikgKwogCQl0Y3BfaGRyKHNrYiktPmRvZmYgKiA0OwogCWludCB0Y3BkX2xlbiA9IHNrYi0+bGVuIC0gKHRjcGQgLSAodW5zaWduZWQgbG9uZylza2ItPmRhdGEpOwotCWludCBlbGVtZW50cyA9IFBGTl9VUCh0Y3BkICsgdGNwZF9sZW4pIC0gUEZOX0RPV04odGNwZCk7CisJaW50IGVsZW1lbnRzID0gUEZOX1VQKHRjcGQgKyB0Y3BkX2xlbiAtIDEpIC0gUEZOX0RPV04odGNwZCk7CiAJZWxlbWVudHMgKz0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKIAlyZXR1cm4gZWxlbWVudHM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHFldGhfbDNfdHNvX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JaW50IGxlbiA9ICgodW5zaWduZWQgbG9uZyl0Y3BfaGRyKHNrYikgKyB0Y3BfaGRyKHNrYiktPmRvZmYgKiA0KSAtCi0JCSh1bnNpZ25lZCBsb25nKXNrYi0+ZGF0YTsKLQlyZXR1cm4gKCgodW5zaWduZWQgbG9uZylza2ItPmRhdGEgJiBQQUdFX01BU0spICE9Ci0JCSgoKHVuc2lnbmVkIGxvbmcpc2tiLT5kYXRhICsgbGVuKSAmIFBBR0VfTUFTSykpOwotfQotCiBzdGF0aWMgaW50IHFldGhfbDNfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IHJjOwpAQCAtMzAxNSw4ICszMDA4LDYgQEAKIAkgICAgKGNhc3RfdHlwZSA9PSBSVE5fVU5TUEVDKSkgewogCQloZHIgPSAoc3RydWN0IHFldGhfaGRyICopc2tiX3B1c2gobmV3X3NrYiwKIAkJCQkJCXNpemVvZihzdHJ1Y3QgcWV0aF9oZHJfdHNvKSk7Ci0JCWlmIChxZXRoX2wzX3Rzb19jaGVjayhuZXdfc2tiKSkKLQkJCVFFVEhfREJGX01FU1NBR0UoMiwgInRzbyBza2IgbWlzYWxpZ25lZFxuIik7CiAJCW1lbXNldChoZHIsIDAsIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHJfdHNvKSk7CiAJCXFldGhfbDNfZmlsbF9oZWFkZXIoY2FyZCwgaGRyLCBuZXdfc2tiLCBpcHYsIGNhc3RfdHlwZSk7CiAJCXFldGhfdHNvX2ZpbGxfaGVhZGVyKGNhcmQsIGhkciwgbmV3X3NrYik7CkBAIC0zMDQ3LDEwICszMDM4LDIwIEBACiAJZWxlbWVudHNfbmVlZGVkICs9IGVsZW1zOwogCW5yX2ZyYWdzID0gc2tiX3NoaW5mbyhuZXdfc2tiKS0+bnJfZnJhZ3M7CiAKLQlpZiAoY2FyZC0+aW5mby50eXBlICE9IFFFVEhfQ0FSRF9UWVBFX0lRRCkKKwlpZiAoY2FyZC0+aW5mby50eXBlICE9IFFFVEhfQ0FSRF9UWVBFX0lRRCkgeworCQlpbnQgbGVuOworCQlpZiAobGFyZ2Vfc2VuZCA9PSBRRVRIX0xBUkdFX1NFTkRfVFNPKQorCQkJbGVuID0gKCh1bnNpZ25lZCBsb25nKXRjcF9oZHIobmV3X3NrYikgKworCQkJCXRjcF9oZHIobmV3X3NrYiktPmRvZmYgKiA0KSAtCisJCQkJKHVuc2lnbmVkIGxvbmcpbmV3X3NrYi0+ZGF0YTsKKwkJZWxzZQorCQkJbGVuID0gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcl9sYXllcjMpOworCisJCWlmIChxZXRoX2hkcl9jaGtfYW5kX2JvdW5jZShuZXdfc2tiLCBsZW4pKQorCQkJZ290byB0eF9kcm9wOwogCQlyYyA9IHFldGhfZG9fc2VuZF9wYWNrZXQoY2FyZCwgcXVldWUsIG5ld19za2IsIGhkciwKIAkJCQkJIGVsZW1lbnRzX25lZWRlZCk7Ci0JZWxzZQorCX0gZWxzZQogCQlyYyA9IHFldGhfZG9fc2VuZF9wYWNrZXRfZmFzdChjYXJkLCBxdWV1ZSwgbmV3X3NrYiwgaGRyLAogCQkJCQllbGVtZW50c19uZWVkZWQsIGRhdGFfb2Zmc2V0LCAwKTsKIApAQCAtMzEwMyw3ICszMTA0LDcgQEAKIHsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5tbF9wcml2OwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgInFldGhvcGVuIik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgInFldGhvcGVuIik7CiAJaWYgKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfU09GVFNFVFVQKQogCQlyZXR1cm4gLUVOT0RFVjsKIAljYXJkLT5kYXRhLnN0YXRlID0gQ0hfU1RBVEVfVVA7CkBAIC0zMTE5LDcgKzMxMjAsNyBAQAogewogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPm1sX3ByaXY7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCAicWV0aHN0b3AiKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCA0LCAicWV0aHN0b3AiKTsKIAluZXRpZl90eF9kaXNhYmxlKGRldik7CiAJaWYgKGNhcmQtPnN0YXRlID09IENBUkRfU1RBVEVfVVApCiAJCWNhcmQtPnN0YXRlID0gQ0FSRF9TVEFURV9TT0ZUU0VUVVA7CkBAIC0zMzEyLDExICszMzEzLDEwIEBACiAJCWNhcmQtPnBlcmZfc3RhdHMuaW5ib3VuZF9zdGFydF90aW1lID0gcWV0aF9nZXRfbWljcm9zKCk7CiAJfQogCWlmIChxZGlvX2VyciAmIFFESU9fRVJST1JfQUNUSVZBVEVfQ0hFQ0tfQ09ORElUSU9OKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDEsICJxZGluY2hrIik7Ci0JCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJXMiLCBDQVJEX0JVU19JRChjYXJkKSk7Ci0JCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJTA0WCUwNFgiLAorCQlRRVRIX0NBUkRfVEVYVChjYXJkLCAxLCAicWRpbmNoayIpOworCQlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgMSwgIiUwNFglMDRYIiwKIAkJCQlmaXJzdF9lbGVtZW50LCBjb3VudCk7Ci0JCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJTA0WCIsIHF1ZXVlKTsKKwkJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDEsICIlMDRYIiwgcXVldWUpOwogCQlxZXRoX3NjaGVkdWxlX3JlY292ZXJ5KGNhcmQpOwogCQlyZXR1cm47CiAJfQpAQCAtMzM1NCw2ICszMzU0LDggQEAKIHsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKCZjZ2Rldi0+ZGV2KTsKIAorCXFldGhfbDNfcmVtb3ZlX2RldmljZV9hdHRyaWJ1dGVzKCZjZ2Rldi0+ZGV2KTsKKwogCXFldGhfc2V0X2FsbG93ZWRfdGhyZWFkcyhjYXJkLCAwLCAxKTsKIAl3YWl0X2V2ZW50KGNhcmQtPndhaXRfcSwgcWV0aF90aHJlYWRzX3J1bm5pbmcoY2FyZCwgMHhmZmZmZmZmZikgPT0gMCk7CiAKQEAgLTMzNjcsNyArMzM2OSw2IEBACiAJCWNhcmQtPmRldiA9IE5VTEw7CiAJfQogCi0JcWV0aF9sM19yZW1vdmVfZGV2aWNlX2F0dHJpYnV0ZXMoJmNnZGV2LT5kZXYpOwogCXFldGhfbDNfY2xlYXJfaXBfbGlzdChjYXJkLCAwLCAwKTsKIAlxZXRoX2wzX2NsZWFyX2lwYXRvX2xpc3QoY2FyZCk7CiAJcmV0dXJuOwpAQCAtMzM4MCw2ICszMzgxLDcgQEAKIAllbnVtIHFldGhfY2FyZF9zdGF0ZXMgcmVjb3Zlcl9mbGFnOwogCiAJQlVHX09OKCFjYXJkKTsKKwltdXRleF9sb2NrKCZjYXJkLT5kaXNjaXBsaW5lX211dGV4KTsKIAltdXRleF9sb2NrKCZjYXJkLT5jb25mX211dGV4KTsKIAlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAic2V0b25saW4iKTsKIAlRRVRIX0RCRl9IRVgoU0VUVVAsIDIsICZjYXJkLCBzaXplb2Yodm9pZCAqKSk7CkBAIC0zNDYxLDYgKzM0NjMsNyBAQAogCWtvYmplY3RfdWV2ZW50KCZnZGV2LT5kZXYua29iaiwgS09CSl9DSEFOR0UpOwogb3V0OgogCW11dGV4X3VubG9jaygmY2FyZC0+Y29uZl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjYXJkLT5kaXNjaXBsaW5lX211dGV4KTsKIAlyZXR1cm4gMDsKIG91dF9yZW1vdmU6CiAJY2FyZC0+dXNlX2hhcmRfc3RvcCA9IDE7CkBAIC0zNDczLDYgKzM0NzYsNyBAQAogCWVsc2UKIAkJY2FyZC0+c3RhdGUgPSBDQVJEX1NUQVRFX0RPV047CiAJbXV0ZXhfdW5sb2NrKCZjYXJkLT5jb25mX211dGV4KTsKKwltdXRleF91bmxvY2soJmNhcmQtPmRpc2NpcGxpbmVfbXV0ZXgpOwogCXJldHVybiByYzsKIH0KIApAQCAtMzQ4OCw2ICszNDkyLDcgQEAKIAlpbnQgcmMgPSAwLCByYzIgPSAwLCByYzMgPSAwOwogCWVudW0gcWV0aF9jYXJkX3N0YXRlcyByZWNvdmVyX2ZsYWc7CiAKKwltdXRleF9sb2NrKCZjYXJkLT5kaXNjaXBsaW5lX211dGV4KTsKIAltdXRleF9sb2NrKCZjYXJkLT5jb25mX211dGV4KTsKIAlRRVRIX0RCRl9URVhUKFNFVFVQLCAzLCAic2V0b2ZmbCIpOwogCVFFVEhfREJGX0hFWChTRVRVUCwgMywgJmNhcmQsIHNpemVvZih2b2lkICopKTsKQEAgLTM1MDgsNiArMzUxMyw3IEBACiAJLyogbGV0IHVzZXJfc3BhY2Uga25vdyB0aGF0IGRldmljZSBpcyBvZmZsaW5lICovCiAJa29iamVjdF91ZXZlbnQoJmNnZGV2LT5kZXYua29iaiwgS09CSl9DSEFOR0UpOwogCW11dGV4X3VubG9jaygmY2FyZC0+Y29uZl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjYXJkLT5kaXNjaXBsaW5lX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzUyMiwxMSArMzUyOCwxMSBAQAogCWludCByYyA9IDA7CiAKIAljYXJkID0gKHN0cnVjdCBxZXRoX2NhcmQgKikgcHRyOwotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJyZWNvdmVyMSIpOwotCVFFVEhfREJGX0hFWChUUkFDRSwgMiwgJmNhcmQsIHNpemVvZih2b2lkICopKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCAyLCAicmVjb3ZlcjEiKTsKKwlRRVRIX0NBUkRfSEVYKGNhcmQsIDIsICZjYXJkLCBzaXplb2Yodm9pZCAqKSk7CiAJaWYgKCFxZXRoX2RvX3J1bl90aHJlYWQoY2FyZCwgUUVUSF9SRUNPVkVSX1RIUkVBRCkpCiAJCXJldHVybiAwOwotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJyZWNvdmVyMiIpOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJyZWNvdmVyMiIpOwogCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsCiAJCSJBIHJlY292ZXJ5IHByb2Nlc3MgaGFzIGJlZW4gc3RhcnRlZCBmb3IgdGhlIGRldmljZVxuIik7CiAJY2FyZC0+dXNlX2hhcmRfc3RvcCA9IDE7CkBAIC0zNjI0LDggKzM2MzAsOCBAQAogCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAiaXBldmVudCIpOwogCWNhcmQgPSBxZXRoX2wzX2dldF9jYXJkX2Zyb21fZGV2KGRldik7CisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMywgImlwZXZlbnQiKTsKIAlpZiAoIWNhcmQpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIApAQCAtMzY3MSwxMSArMzY3NywxMSBAQAogCXN0cnVjdCBxZXRoX2lwYWRkciAqYWRkcjsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgImlwNmV2ZW50Iik7CiAKIAljYXJkID0gcWV0aF9sM19nZXRfY2FyZF9mcm9tX2RldihkZXYpOwogCWlmICghY2FyZCkKIAkJcmV0dXJuIE5PVElGWV9ET05FOworCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDMsICJpcDZldmVudCIpOwogCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX0lQVjYpKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKQEAgLTM3MTQsNyArMzcyMCw3IEBACiB7CiAJaW50IHJjOwogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgInJlZ25vdGlmIik7CisJUUVUSF9EQkZfVEVYVChTRVRVUCwgNSwgInJlZ25vdGlmIik7CiAJcmMgPSByZWdpc3Rlcl9pbmV0YWRkcl9ub3RpZmllcigmcWV0aF9sM19pcF9ub3RpZmllcik7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CkBAIC0zNzMzLDcgKzM3MzksNyBAQAogc3RhdGljIHZvaWQgcWV0aF9sM191bnJlZ2lzdGVyX25vdGlmaWVycyh2b2lkKQogewogCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgInVucmVnbm90Iik7CisJUUVUSF9EQkZfVEVYVChTRVRVUCwgNSwgInVucmVnbm90Iik7CiAJQlVHX09OKHVucmVnaXN0ZXJfaW5ldGFkZHJfbm90aWZpZXIoJnFldGhfbDNfaXBfbm90aWZpZXIpKTsKICNpZmRlZiBDT05GSUdfUUVUSF9JUFY2CiAJQlVHX09OKHVucmVnaXN0ZXJfaW5ldDZhZGRyX25vdGlmaWVyKCZxZXRoX2wzX2lwNl9ub3RpZmllcikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX3N5cy5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX3N5cy5jCmluZGV4IGZiNTMxOGIuLjY3Y2ZhNjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfc3lzLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX3N5cy5jCkBAIC00NzksNiArNDc5LDcgQEAKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcWV0aF9pcGFkZHIgKnRtcGlwYSwgKnQ7CiAJY2hhciAqdG1wOwogCWludCByYyA9IDA7CiAKQEAgLTQ5Nyw4ICs0OTgsMjEgQEAKIAkJY2FyZC0+aXBhdG8uZW5hYmxlZCA9IChjYXJkLT5pcGF0by5lbmFibGVkKT8gMCA6IDE7CiAJfSBlbHNlIGlmICghc3RyY21wKHRtcCwgIjEiKSkgewogCQljYXJkLT5pcGF0by5lbmFibGVkID0gMTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRtcGlwYSwgdCwgY2FyZC0+aXBfdGJkX2xpc3QsIGVudHJ5KSB7CisJCQlpZiAoKHRtcGlwYS0+dHlwZSA9PSBRRVRIX0lQX1RZUEVfTk9STUFMKSAmJgorCQkJCXFldGhfbDNfaXNfYWRkcl9jb3ZlcmVkX2J5X2lwYXRvKGNhcmQsIHRtcGlwYSkpCisJCQkJdG1waXBhLT5zZXRfZmxhZ3MgfD0KKwkJCQkJUUVUSF9JUEFfU0VUSVBfVEFLRU9WRVJfRkxBRzsKKwkJfQorCiAJfSBlbHNlIGlmICghc3RyY21wKHRtcCwgIjAiKSkgewogCQljYXJkLT5pcGF0by5lbmFibGVkID0gMDsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRtcGlwYSwgdCwgY2FyZC0+aXBfdGJkX2xpc3QsIGVudHJ5KSB7CisJCQlpZiAodG1waXBhLT5zZXRfZmxhZ3MgJgorCQkJCVFFVEhfSVBBX1NFVElQX1RBS0VPVkVSX0ZMQUcpCisJCQkJdG1waXBhLT5zZXRfZmxhZ3MgJj0KKwkJCQkJflFFVEhfSVBBX1NFVElQX1RBS0VPVkVSX0ZMQUc7CisJCX0KIAl9IGVsc2UKIAkJcmMgPSAtRUlOVkFMOwogb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jIGIvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jCmluZGV4IDcwNDkxMjcuLjY1ZTFjZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMKQEAgLTQ3LDYgKzQ3LDcgQEAKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhzbXNnX2xpc3RfbG9jayk7CiBzdGF0aWMgTElTVF9IRUFEKHNtc2dfbGlzdCk7CitzdGF0aWMgaW50IGl1Y3ZfcGF0aF9jb25uZWN0ZWQ7CiAKIHN0YXRpYyBpbnQgc21zZ19wYXRoX3BlbmRpbmcoc3RydWN0IGl1Y3ZfcGF0aCAqLCB1OCBpcHZtaWRbOF0sIHU4IGlwdXNlclsxNl0pOwogc3RhdGljIHZvaWQgc21zZ19tZXNzYWdlX3BlbmRpbmcoc3RydWN0IGl1Y3ZfcGF0aCAqLCBzdHJ1Y3QgaXVjdl9tZXNzYWdlICopOwpAQCAtMTQyLDggKzE0MywxMCBAQAogI2lmZGVmIENPTkZJR19QTV9ERUJVRwogCXByaW50ayhLRVJOX1dBUk5JTkcgInNtc2dfcG1fZnJlZXplXG4iKTsKICNlbmRpZgotCWlmIChzbXNnX3BhdGgpCisJaWYgKHNtc2dfcGF0aCAmJiBpdWN2X3BhdGhfY29ubmVjdGVkKSB7CiAJCWl1Y3ZfcGF0aF9zZXZlcihzbXNnX3BhdGgsIE5VTEwpOworCQlpdWN2X3BhdGhfY29ubmVjdGVkID0gMDsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1NCw3ICsxNTcsNyBAQAogI2lmZGVmIENPTkZJR19QTV9ERUJVRwogCXByaW50ayhLRVJOX1dBUk5JTkcgInNtc2dfcG1fcmVzdG9yZV90aGF3XG4iKTsKICNlbmRpZgotCWlmIChzbXNnX3BhdGgpIHsKKwlpZiAoc21zZ19wYXRoICYmIGl1Y3ZfcGF0aF9jb25uZWN0ZWQpIHsKIAkJbWVtc2V0KHNtc2dfcGF0aCwgMCwgc2l6ZW9mKCpzbXNnX3BhdGgpKTsKIAkJc21zZ19wYXRoLT5tc2dsaW0gPSAyNTU7CiAJCXNtc2dfcGF0aC0+ZmxhZ3MgPSAwOwpAQCAtMTY1LDYgKzE2OCw4IEBACiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAgICAgICAiaXVjdl9wYXRoX2Nvbm5lY3QgcmV0dXJuZWQgd2l0aCByYyAlaVxuIiwgcmMpOwogI2VuZGlmCisJCWlmICghcmMpCisJCQlpdWN2X3BhdGhfY29ubmVjdGVkID0gMTsKIAkJY3BjbWQoIlNFVCBTTVNHIElVQ1YiLCBOVUxMLCAwLCBOVUxMKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0yMTQsNiArMjE5LDggQEAKIAkJCSAgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0X2ZyZWVfcGF0aDsKKwllbHNlCisJCWl1Y3ZfcGF0aF9jb25uZWN0ZWQgPSAxOwogCXNtc2dfZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRldmljZSksIEdGUF9LRVJORUwpOwogCWlmICghc21zZ19kZXYpIHsKIAkJcmMgPSAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKaW5kZXggZTMzMWRmMi4uOTZmYTFmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCkBAIC05OCwxMyArOTgsMTEgQEAKIAl1NjQgd3dwbiwgbHVuOwogCiAJLyogZHVwbGljYXRlIGRldnN0ciBhbmQga2VlcCB0aGUgb3JpZ2luYWwgZm9yIHN5c2ZzIHByZXNlbnRhdGlvbiovCi0Jc3RyX3NhdmVkID0ga21hbGxvYyhzdHJsZW4oZGV2c3RyKSArIDEsIEdGUF9LRVJORUwpOworCXN0cl9zYXZlZCA9IGtzdHJkdXAoZGV2c3RyLCBHRlBfS0VSTkVMKTsKIAlzdHIgPSBzdHJfc2F2ZWQ7CiAJaWYgKCFzdHIpCiAJCXJldHVybjsKIAotCXN0cmNweShzdHIsIGRldnN0cik7Ci0KIAl0b2tlbiA9IHN0cnNlcCgmc3RyLCAiLCIpOwogCWlmICghdG9rZW4gfHwgc3RybGVuKHRva2VuKSA+PSBaRkNQX0JVU19JRF9TSVpFKQogCQlnb3RvIGVycl9vdXQ7CkBAIC0zMTQsNyArMzEyLDcgQEAKIAl9CiAJcmV0dmFsID0gLUVJTlZBTDsKIAotCUlOSVRfV09SSygmdW5pdC0+c2NzaV93b3JrLCB6ZmNwX3Njc2lfc2Nhbik7CisJSU5JVF9XT1JLKCZ1bml0LT5zY3NpX3dvcmssIHpmY3Bfc2NzaV9zY2FuX3dvcmspOwogCiAJc3Bpbl9sb2NrX2luaXQoJnVuaXQtPmxhdGVuY2llcy5sb2NrKTsKIAl1bml0LT5sYXRlbmNpZXMud3JpdGUuY2hhbm5lbC5taW4gPSAweEZGRkZGRkZGOwpAQCAtNTI2LDYgKzUyNCwxMCBAQAogCXJ3bG9ja19pbml0KCZhZGFwdGVyLT5wb3J0X2xpc3RfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmFkYXB0ZXItPnBvcnRfbGlzdCk7CiAKKwlJTklUX0xJU1RfSEVBRCgmYWRhcHRlci0+ZXZlbnRzLmxpc3QpOworCUlOSVRfV09SSygmYWRhcHRlci0+ZXZlbnRzLndvcmssIHpmY3BfZmNfcG9zdF9ldmVudCk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPmV2ZW50cy5saXN0X2xvY2spOworCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmYWRhcHRlci0+ZXJwX3JlYWR5X3dxKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhZGFwdGVyLT5lcnBfZG9uZV93cWgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2NmZGMuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2ZkYy5jCmluZGV4IDFhMmRiMGEuLmZjYmQyYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2ZkYy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2ZkYy5jCkBAIC0xODksMTggKzE4OSwxMiBAQAogCWlmICghZnNmX2NmZGMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB6ZmNwX2NmZGNfZGF0YSksIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkgewotCQlyZXR2YWwgPSAtRU5PTUVNOworCWRhdGEgPSBtZW1kdXBfdXNlcihkYXRhX3VzZXIsIHNpemVvZigqZGF0YV91c2VyKSk7CisJaWYgKElTX0VSUihkYXRhKSkgeworCQlyZXR2YWwgPSBQVFJfRVJSKGRhdGEpOwogCQlnb3RvIG5vX21lbV9zZW5zZTsKIAl9CiAKLQlyZXR2YWwgPSBjb3B5X2Zyb21fdXNlcihkYXRhLCBkYXRhX3VzZXIsIHNpemVvZigqZGF0YSkpOwotCWlmIChyZXR2YWwpIHsKLQkJcmV0dmFsID0gLUVGQVVMVDsKLQkJZ290byBmcmVlX2J1ZmZlcjsKLQl9Ci0KIAlpZiAoZGF0YS0+c2lnbmF0dXJlICE9IDB4Q0ZEQ0FDREYpIHsKIAkJcmV0dmFsID0gLUVJTlZBTDsKIAkJZ290byBmcmVlX2J1ZmZlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5jCmluZGV4IDA3NTg1MmYuLmE4NjExN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuYwpAQCAtMTU1LDYgKzE1NSw4IEBACiAJCWlmIChzY3NpX2NtbmQpIHsKIAkJCXJlc3BvbnNlLT51LmZjcC5jbW5kID0gKHVuc2lnbmVkIGxvbmcpc2NzaV9jbW5kOwogCQkJcmVzcG9uc2UtPnUuZmNwLnNlcmlhbCA9IHNjc2lfY21uZC0+c2VyaWFsX251bWJlcjsKKwkJCXJlc3BvbnNlLT51LmZjcC5kYXRhX2RpciA9CisJCQkJcXRjYi0+Ym90dG9tLmlvLmRhdGFfZGlyZWN0aW9uOwogCQl9CiAJCWJyZWFrOwogCkBAIC0zMjYsNiArMzI4LDcgQEAKIAljYXNlIEZTRl9RVENCX0ZDUF9DTU5EOgogCQlpZiAoci0+ZnNmX3JlcV9zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfVEFTS19NQU5BR0VNRU5UKQogCQkJYnJlYWs7CisJCXpmY3BfZGJmX291dChwLCAiZGF0YV9kaXJlY3Rpb24iLCAiMHglMDR4Iiwgci0+dS5mY3AuZGF0YV9kaXIpOwogCQl6ZmNwX2RiZl9vdXQocCwgInNjc2lfY21uZCIsICIweCUwTHgiLCByLT51LmZjcC5jbW5kKTsKIAkJemZjcF9kYmZfb3V0KHAsICJzY3NpX3NlcmlhbCIsICIweCUwMTZMeCIsIHItPnUuZmNwLnNlcmlhbCk7CiAJCSpwICs9IHNwcmludGYoKnAsICJcbiIpOwpAQCAtMTAwNSw3ICsxMDA4LDcgQEAKIAljaGFyIGRiZl9uYW1lW0RFQlVHX01BWF9OQU1FX0xFTl07CiAJc3RydWN0IHpmY3BfZGJmICpkYmY7CiAKLQlkYmYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgemZjcF9kYmYpLCBHRlBfS0VSTkVMKTsKKwlkYmYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgemZjcF9kYmYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRiZikKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5oCmluZGV4IDQ1N2UwNDYuLjJiY2MzNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuaApAQCAtMTExLDYgKzExMSw3IEBACiAJCXN0cnVjdCB7CiAJCQl1NjQgY21uZDsKIAkJCXU2NCBzZXJpYWw7CisJCQl1MzIgZGF0YV9kaXI7CiAJCX0gZmNwOwogCQlzdHJ1Y3QgewogCQkJdTY0IHd3cG47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaAppbmRleCA5ZmExYjA2Li5lMWM2YjZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmgKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxhc20vZWJjZGljLmg+CiAjaW5jbHVkZSA8YXNtL3N5c2luZm8uaD4KICNpbmNsdWRlICJ6ZmNwX2ZzZi5oIgorI2luY2x1ZGUgInpmY3BfZmMuaCIKICNpbmNsdWRlICJ6ZmNwX3FkaW8uaCIKIAogc3RydWN0IHpmY3BfcmVxbGlzdDsKQEAgLTcyLDEwICs3MywxMiBAQAogCiAvKiBhZGFwdGVyIHN0YXR1cyAqLwogI2RlZmluZSBaRkNQX1NUQVRVU19BREFQVEVSX1FESU9VUAkJMHgwMDAwMDAwMgorI2RlZmluZSBaRkNQX1NUQVRVU19BREFQVEVSX1NJT1NMX0lTU1VFRAkweDAwMDAwMDA0CiAjZGVmaW5lIFpGQ1BfU1RBVFVTX0FEQVBURVJfWENPTkZJR19PSwkJMHgwMDAwMDAwOAogI2RlZmluZSBaRkNQX1NUQVRVU19BREFQVEVSX0hPU1RfQ09OX0lOSVQJMHgwMDAwMDAxMAogI2RlZmluZSBaRkNQX1NUQVRVU19BREFQVEVSX0VSUF9QRU5ESU5HCQkweDAwMDAwMTAwCiAjZGVmaW5lIFpGQ1BfU1RBVFVTX0FEQVBURVJfTElOS19VTlBMVUdHRUQJMHgwMDAwMDIwMAorI2RlZmluZSBaRkNQX1NUQVRVU19BREFQVEVSX0RBVEFfRElWX0VOQUJMRUQJMHgwMDAwMDQwMAogCiAvKiByZW1vdGUgcG9ydCBzdGF0dXMgKi8KICNkZWZpbmUgWkZDUF9TVEFUVVNfUE9SVF9QSFlTX09QRU4JCTB4MDAwMDAwMDEKQEAgLTE5MCw2ICsxOTMsNyBAQAogCXN0cnVjdCBzZXJ2aWNlX2xldmVsCXNlcnZpY2VfbGV2ZWw7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QJKndvcmtfcXVldWU7CiAJc3RydWN0IGRldmljZV9kbWFfcGFyYW1ldGVycyBkbWFfcGFybXM7CisJc3RydWN0IHpmY3BfZmNfZXZlbnRzIGV2ZW50czsKIH07CiAKIHN0cnVjdCB6ZmNwX3BvcnQgewpAQCAtMjEyLDYgKzIxNiw3IEBACiAJc3RydWN0IHdvcmtfc3RydWN0ICAgICB0ZXN0X2xpbmtfd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgIHJwb3J0X3dvcms7CiAJZW51bSB7IFJQT1JUX05PTkUsIFJQT1JUX0FERCwgUlBPUlRfREVMIH0gIHJwb3J0X3Rhc2s7CisJdW5zaWduZWQgaW50CQlzdGFyZ2V0X2lkOwogfTsKIAogc3RydWN0IHpmY3BfdW5pdCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYwppbmRleCBlM2RiZWRhLi4xNjBiNDMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKQEAgLTE0MSw5ICsxNDEsMTMgQEAKIAkJaWYgKCEocF9zdGF0dXMgJiBaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VEKSkKIAkJCW5lZWQgPSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX1BPUlQ7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9QT1JUOgogCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9QT1JUX0ZPUkNFRDoKIAkJcF9zdGF0dXMgPSBhdG9taWNfcmVhZCgmcG9ydC0+c3RhdHVzKTsKKwkJaWYgKCEocF9zdGF0dXMgJiBaRkNQX1NUQVRVU19DT01NT05fT1BFTikpCisJCQluZWVkID0gWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9QT1JUOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fUE9SVDoKKwkJcF9zdGF0dXMgPSBhdG9taWNfcmVhZCgmcG9ydC0+c3RhdHVzKTsKIAkJaWYgKHBfc3RhdHVzICYgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9JTlVTRSkKIAkJCXJldHVybiAwOwogCQlhX3N0YXR1cyA9IGF0b21pY19yZWFkKCZhZGFwdGVyLT5zdGF0dXMpOwpAQCAtNzE0LDYgKzcxOCwxNCBAQAogCWlmICh6ZmNwX2VycF9hZGFwdGVyX3N0cmF0ZWd5X29wZW5fZnNmX3hwb3J0KGFjdCkgPT0gWkZDUF9FUlBfRkFJTEVEKQogCQlyZXR1cm4gWkZDUF9FUlBfRkFJTEVEOwogCisJaWYgKG1lbXBvb2xfcmVzaXplKGFjdC0+YWRhcHRlci0+cG9vbC5zdGF0dXNfcmVhZF9kYXRhLAorCQkJICAgYWN0LT5hZGFwdGVyLT5zdGF0X3JlYWRfYnVmX251bSwgR0ZQX0tFUk5FTCkpCisJCXJldHVybiBaRkNQX0VSUF9GQUlMRUQ7CisKKwlpZiAobWVtcG9vbF9yZXNpemUoYWN0LT5hZGFwdGVyLT5wb29sLnN0YXR1c19yZWFkX3JlcSwKKwkJCSAgIGFjdC0+YWRhcHRlci0+c3RhdF9yZWFkX2J1Zl9udW0sIEdGUF9LRVJORUwpKQorCQlyZXR1cm4gWkZDUF9FUlBfRkFJTEVEOworCiAJYXRvbWljX3NldCgmYWN0LT5hZGFwdGVyLT5zdGF0X21pc3MsIGFjdC0+YWRhcHRlci0+c3RhdF9yZWFkX2J1Zl9udW0pOwogCWlmICh6ZmNwX3N0YXR1c19yZWFkX3JlZmlsbChhY3QtPmFkYXB0ZXIpKQogCQlyZXR1cm4gWkZDUF9FUlBfRkFJTEVEOwpAQCAtODg1LDggKzg5Nyw3IEBACiAJCX0KIAkJaWYgKHBvcnQtPmRfaWQgJiYgIShwX3N0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9OT0VTQykpIHsKIAkJCXBvcnQtPmRfaWQgPSAwOwotCQkJX3pmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsIDAsICJlcnBzb2MxIiwgTlVMTCk7Ci0JCQlyZXR1cm4gWkZDUF9FUlBfRVhJVDsKKwkJCXJldHVybiBaRkNQX0VSUF9GQUlMRUQ7CiAJCX0KIAkJLyogZmFsbCB0aHJvdWdoIG90aGVyd2lzZSAqLwogCX0KQEAgLTExODAsMTkgKzExOTEsMTQgQEAKIAogCXN3aXRjaCAoYWN0LT5hY3Rpb24pIHsKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fVU5JVDoKLQkJaWYgKChyZXN1bHQgPT0gWkZDUF9FUlBfU1VDQ0VFREVEKSAmJiAhdW5pdC0+ZGV2aWNlKSB7Ci0JCQlnZXRfZGV2aWNlKCZ1bml0LT5kZXYpOwotCQkJaWYgKHNjc2lfcXVldWVfd29yayh1bml0LT5wb3J0LT5hZGFwdGVyLT5zY3NpX2hvc3QsCi0JCQkJCSAgICAmdW5pdC0+c2NzaV93b3JrKSA8PSAwKQotCQkJCXB1dF9kZXZpY2UoJnVuaXQtPmRldik7Ci0JCX0KIAkJcHV0X2RldmljZSgmdW5pdC0+ZGV2KTsKIAkJYnJlYWs7CiAKLQljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fUE9SVF9GT1JDRUQ6CiAJY2FzZSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX1BPUlQ6CiAJCWlmIChyZXN1bHQgPT0gWkZDUF9FUlBfU1VDQ0VFREVEKQogCQkJemZjcF9zY3NpX3NjaGVkdWxlX3Jwb3J0X3JlZ2lzdGVyKHBvcnQpOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fUE9SVF9GT1JDRUQ6CiAJCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAJCWJyZWFrOwogCkBAIC0xMjM5LDYgKzEyNDUsMTEgQEAKIAkJZ290byB1bmxvY2s7CiAJfQogCisJaWYgKGVycF9hY3Rpb24tPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0VSUF9USU1FRE9VVCkgeworCQlyZXR2YWwgPSBaRkNQX0VSUF9GQUlMRUQ7CisJCWdvdG8gY2hlY2tfdGFyZ2V0OworCX0KKwogCXpmY3BfZXJwX2FjdGlvbl90b19ydW5uaW5nKGVycF9hY3Rpb24pOwogCiAJLyogbm8gbG9jayB0byBhbGxvdyBmb3IgYmxvY2tpbmcgb3BlcmF0aW9ucyAqLwpAQCAtMTI3MSw2ICsxMjgyLDcgQEAKIAkJZ290byB1bmxvY2s7CiAJfQogCitjaGVja190YXJnZXQ6CiAJcmV0dmFsID0gemZjcF9lcnBfc3RyYXRlZ3lfY2hlY2tfdGFyZ2V0KGVycF9hY3Rpb24sIHJldHZhbCk7CiAJemZjcF9lcnBfYWN0aW9uX2RlcXVldWUoZXJwX2FjdGlvbik7CiAJcmV0dmFsID0gemZjcF9lcnBfc3RyYXRlZ3lfc3RhdGVjaGFuZ2UoZXJwX2FjdGlvbiwgcmV0dmFsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCmluZGV4IDQ4YThmOTMuLjNiOTMyMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaApAQCAtOTYsNiArOTYsOSBAQAogZXh0ZXJuIHZvaWQgemZjcF9lcnBfdGltZW91dF9oYW5kbGVyKHVuc2lnbmVkIGxvbmcpOwogCiAvKiB6ZmNwX2ZjLmMgKi8KK2V4dGVybiB2b2lkIHpmY3BfZmNfZW5xdWV1ZV9ldmVudChzdHJ1Y3QgemZjcF9hZGFwdGVyICosCisJCQkJZW51bSBmY19ob3N0X2V2ZW50X2NvZGUgZXZlbnRfY29kZSwgdTMyKTsKK2V4dGVybiB2b2lkIHpmY3BfZmNfcG9zdF9ldmVudChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2ZjX3NjYW5fcG9ydHMoc3RydWN0IHdvcmtfc3RydWN0ICopOwogZXh0ZXJuIHZvaWQgemZjcF9mY19pbmNvbWluZ19lbHMoc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKIGV4dGVybiB2b2lkIHpmY3BfZmNfcG9ydF9kaWRfbG9va3VwKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKQEAgLTE0Niw5ICsxNDksMTAgQEAKIGV4dGVybiBpbnQgemZjcF9xZGlvX3NiYWxfZ2V0KHN0cnVjdCB6ZmNwX3FkaW8gKik7CiBleHRlcm4gaW50IHpmY3BfcWRpb19zZW5kKHN0cnVjdCB6ZmNwX3FkaW8gKiwgc3RydWN0IHpmY3BfcWRpb19yZXEgKik7CiBleHRlcm4gaW50IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKHN0cnVjdCB6ZmNwX3FkaW8gKiwgc3RydWN0IHpmY3BfcWRpb19yZXEgKiwKLQkJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50KTsKKwkJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKik7CiBleHRlcm4gaW50IHpmY3BfcWRpb19vcGVuKHN0cnVjdCB6ZmNwX3FkaW8gKik7CiBleHRlcm4gdm9pZCB6ZmNwX3FkaW9fY2xvc2Uoc3RydWN0IHpmY3BfcWRpbyAqKTsKK2V4dGVybiB2b2lkIHpmY3BfcWRpb19zaW9zbChzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwogCiAvKiB6ZmNwX3Njc2kuYyAqLwogZXh0ZXJuIHN0cnVjdCB6ZmNwX2RhdGEgemZjcF9kYXRhOwpAQCAtMTU5LDcgKzE2MywxMCBAQAogZXh0ZXJuIHZvaWQgemZjcF9zY3NpX3NjaGVkdWxlX3Jwb3J0X3JlZ2lzdGVyKHN0cnVjdCB6ZmNwX3BvcnQgKik7CiBleHRlcm4gdm9pZCB6ZmNwX3Njc2lfc2NoZWR1bGVfcnBvcnRfYmxvY2soc3RydWN0IHpmY3BfcG9ydCAqKTsKIGV4dGVybiB2b2lkIHpmY3Bfc2NzaV9zY2hlZHVsZV9ycG9ydHNfYmxvY2soc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKLWV4dGVybiB2b2lkIHpmY3Bfc2NzaV9zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIHpmY3Bfc2NzaV9zY2FuKHN0cnVjdCB6ZmNwX3VuaXQgKik7CitleHRlcm4gdm9pZCB6ZmNwX3Njc2lfc2Nhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIHpmY3Bfc2NzaV9zZXRfcHJvdChzdHJ1Y3QgemZjcF9hZGFwdGVyICopOworZXh0ZXJuIHZvaWQgemZjcF9zY3NpX2RpZl9zZW5zZV9lcnJvcihzdHJ1Y3Qgc2NzaV9jbW5kICosIGludCk7CiAKIC8qIHpmY3Bfc3lzZnMuYyAqLwogZXh0ZXJuIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgemZjcF9zeXNmc191bml0X2F0dHJzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jCmluZGV4IDZmOGFiNDMuLjZmM2VkMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMKQEAgLTIzLDYgKzIzLDU4IEBACiAJW0VMU19BRERSX0ZNVF9GQUJdCQk9IDB4MDAwMDAwLAogfTsKIAorLyoqCisgKiB6ZmNwX2ZjX3Bvc3RfZXZlbnQgLSBwb3N0IGV2ZW50IHRvIHVzZXJzcGFjZSB2aWEgZmNfdHJhbnNwb3J0CisgKiBAd29yazogd29yayBzdHJ1Y3Qgd2l0aCBlbnF1ZXVlZCBldmVudHMKKyAqLwordm9pZCB6ZmNwX2ZjX3Bvc3RfZXZlbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB6ZmNwX2ZjX2V2ZW50ICpldmVudCA9IE5VTEwsICp0bXAgPSBOVUxMOworCUxJU1RfSEVBRCh0bXBfbGgpOworCXN0cnVjdCB6ZmNwX2ZjX2V2ZW50cyAqZXZlbnRzID0gY29udGFpbmVyX29mKHdvcmssCisJCQkJCXN0cnVjdCB6ZmNwX2ZjX2V2ZW50cywgd29yayk7CisJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZihldmVudHMsIHN0cnVjdCB6ZmNwX2FkYXB0ZXIsCisJCQkJCQlldmVudHMpOworCisJc3Bpbl9sb2NrX2JoKCZldmVudHMtPmxpc3RfbG9jayk7CisJbGlzdF9zcGxpY2VfaW5pdCgmZXZlbnRzLT5saXN0LCAmdG1wX2xoKTsKKwlzcGluX3VubG9ja19iaCgmZXZlbnRzLT5saXN0X2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2ZW50LCB0bXAsICZ0bXBfbGgsIGxpc3QpIHsKKwkJZmNfaG9zdF9wb3N0X2V2ZW50KGFkYXB0ZXItPnNjc2lfaG9zdCwgZmNfZ2V0X2V2ZW50X251bWJlcigpLAorCQkJCWV2ZW50LT5jb2RlLCBldmVudC0+ZGF0YSk7CisJCWxpc3RfZGVsKCZldmVudC0+bGlzdCk7CisJCWtmcmVlKGV2ZW50KTsKKwl9CisKK30KKworLyoqCisgKiB6ZmNwX2ZjX2VucXVldWVfZXZlbnQgLSBzYWZlbHkgZW5xdWV1ZSBGQyBIQkEgQVBJIGV2ZW50IGZyb20gaXJxIGNvbnRleHQKKyAqIEBhZGFwdGVyOiBUaGUgYWRhcHRlciB3aGVyZSB0byBlbnF1ZXVlIHRoZSBldmVudAorICogQGV2ZW50X2NvZGU6IFRoZSBldmVudCBjb2RlIChhcyBkZWZpbmVkIGluIGZjX2hvc3RfZXZlbnRfY29kZSBpbgorICoJCXNjc2lfdHJhbnNwb3J0X2ZjLmgpCisgKiBAZXZlbnRfZGF0YTogVGhlIGV2ZW50IGRhdGEgKGUuZy4gbl9wb3J0IHBhZ2UgaW4gY2FzZSBvZiBlbHMpCisgKi8KK3ZvaWQgemZjcF9mY19lbnF1ZXVlX2V2ZW50KHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQllbnVtIGZjX2hvc3RfZXZlbnRfY29kZSBldmVudF9jb2RlLCB1MzIgZXZlbnRfZGF0YSkKK3sKKwlzdHJ1Y3QgemZjcF9mY19ldmVudCAqZXZlbnQ7CisKKwlldmVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB6ZmNwX2ZjX2V2ZW50KSwgR0ZQX0FUT01JQyk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuOworCisJZXZlbnQtPmNvZGUgPSBldmVudF9jb2RlOworCWV2ZW50LT5kYXRhID0gZXZlbnRfZGF0YTsKKworCXNwaW5fbG9jaygmYWRhcHRlci0+ZXZlbnRzLmxpc3RfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmZXZlbnQtPmxpc3QsICZhZGFwdGVyLT5ldmVudHMubGlzdCk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPmV2ZW50cy5saXN0X2xvY2spOworCisJcXVldWVfd29yayhhZGFwdGVyLT53b3JrX3F1ZXVlLCAmYWRhcHRlci0+ZXZlbnRzLndvcmspOworfQorCiBzdGF0aWMgaW50IHpmY3BfZmNfd2thX3BvcnRfZ2V0KHN0cnVjdCB6ZmNwX2ZjX3drYV9wb3J0ICp3a2FfcG9ydCkKIHsKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ3a2FfcG9ydC0+bXV0ZXgpKQpAQCAtMTQ4LDYgKzIwMCw4IEBACiAJCWFmbXQgPSBwYWdlLT5yc2NuX3BhZ2VfZmxhZ3MgJiBFTFNfUlNDTl9BRERSX0ZNVF9NQVNLOwogCQlfemZjcF9mY19pbmNvbWluZ19yc2NuKGZzZl9yZXEsIHpmY3BfZmNfcnNjbl9yYW5nZV9tYXNrW2FmbXRdLAogCQkJCSAgICAgICBwYWdlKTsKKwkJemZjcF9mY19lbnF1ZXVlX2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXIsIEZDSF9FVlRfUlNDTiwKKwkJCQkgICAgICAqKHUzMiAqKXBhZ2UpOwogCX0KIAlxdWV1ZV93b3JrKGZzZl9yZXEtPmFkYXB0ZXItPndvcmtfcXVldWUsICZmc2ZfcmVxLT5hZGFwdGVyLT5zY2FuX3dvcmspOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5oCmluZGV4IDA3NDdiMDguLjkzOGQ1MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmgKQEAgLTMwLDYgKzMwLDMwIEBACiAjZGVmaW5lIFpGQ1BfRkNfQ1RFTFNfVE1PCSgyICogRkNfREVGX1JfQV9UT1YgLyAxMDAwKQogCiAvKioKKyAqIHN0cnVjdCB6ZmNwX2ZjX2V2ZW50IC0gRkMgSEJBQVBJIGV2ZW50IGZvciBpbnRlcm5hbCBxdWV1ZWluZyBmcm9tIGlycSBjb250ZXh0CisgKiBAY29kZTogRXZlbnQgY29kZQorICogQGRhdGE6IEV2ZW50IGRhdGEKKyAqIEBsaXN0OiBsaXN0X2hlYWQgZm9yIHpmY3BfZmNfZXZlbnRzIGxpc3QKKyAqLworc3RydWN0IHpmY3BfZmNfZXZlbnQgeworCWVudW0gZmNfaG9zdF9ldmVudF9jb2RlIGNvZGU7CisJdTMyIGRhdGE7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworLyoqCisgKiBzdHJ1Y3QgemZjcF9mY19ldmVudHMgLSBJbmZyYXN0cnVjdHVyZSBmb3IgcG9zdGluZyBGQyBldmVudHMgZnJvbSBpcnEgY29udGV4dAorICogQGxpc3Q6IExpc3QgZm9yIHF1ZXVlaW5nIG9mIGV2ZW50cyBmcm9tIGlycSBjb250ZXh0IHRvIHdvcmtxdWV1ZQorICogQGxpc3RfbG9jazogTG9jayBmb3IgZXZlbnQgbGlzdAorICogQHdvcms6IHdvcmtfc3RydWN0IGZvciBmb3J3YXJkaW5nIGV2ZW50cyBpbiB3b3JrcXVldWUKKyovCitzdHJ1Y3QgemZjcF9mY19ldmVudHMgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzcGlubG9ja190IGxpc3RfbG9jazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKK307CisKKy8qKgogICogc3RydWN0IHpmY3BfZmNfZ2lkX3BuX3JlcSAtIGNvbnRhaW5lciBmb3IgY3QgaGVhZGVyIHBsdXMgZ2lkX3BuIHJlcXVlc3QKICAqIEBjdF9oZHI6IEZDIEdTIGNvbW1vbiB0cmFuc3BvcnQgaGVhZGVyCiAgKiBAZ2lkX3BuOiBHSURfUE4gcmVxdWVzdApAQCAtMTk2LDYgKzIyMCw5IEBACiAJbWVtY3B5KGZjcC0+ZmNfY2RiLCBzY3NpLT5jbW5kLCBzY3NpLT5jbWRfbGVuKTsKIAogCWZjcC0+ZmNfZGwgPSBzY3NpX2J1ZmZsZW4oc2NzaSk7CisKKwlpZiAoc2NzaV9nZXRfcHJvdF90eXBlKHNjc2kpID09IFNDU0lfUFJPVF9ESUZfVFlQRTEpCisJCWZjcC0+ZmNfZGwgKz0gZmNwLT5mY19kbCAvIHNjc2ktPmRldmljZS0+c2VjdG9yX3NpemUgKiA4OwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCmluZGV4IDlhYzZhNmUuLjlkMWQ3ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwpAQCAtMjEsNiArMjEsNyBAQAogc3RhdGljIHZvaWQgemZjcF9mc2ZfcmVxdWVzdF90aW1lb3V0X2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IHpmY3BfYWRhcHRlciAqKSBkYXRhOworCXpmY3BfcWRpb19zaW9zbChhZGFwdGVyKTsKIAl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwKIAkJCQkiZnNydGhfMSIsIE5VTEwpOwogfQpAQCAtMjc0LDYgKzI3NSw3IEBACiAJCWJyZWFrOwogCWNhc2UgRlNGX1NUQVRVU19SRUFEX0xJTktfRE9XTjoKIAkJemZjcF9mc2Zfc3RhdHVzX3JlYWRfbGlua19kb3duKHJlcSk7CisJCXpmY3BfZmNfZW5xdWV1ZV9ldmVudChhZGFwdGVyLCBGQ0hfRVZUX0xJTktET1dOLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfU1RBVFVTX1JFQURfTElOS19VUDoKIAkJZGV2X2luZm8oJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldiwKQEAgLTI4Niw2ICsyODgsOCBAQAogCQkJCQlaRkNQX1NUQVRVU19BREFQVEVSX0xJTktfVU5QTFVHR0VEIHwKIAkJCQkJWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsCiAJCQkJCSJmc3NyaF8yIiwgcmVxKTsKKwkJemZjcF9mY19lbnF1ZXVlX2V2ZW50KGFkYXB0ZXIsIEZDSF9FVlRfTElOS1VQLCAwKTsKKwogCQlicmVhazsKIAljYXNlIEZTRl9TVEFUVVNfUkVBRF9OT1RJRklDQVRJT05fTE9TVDoKIAkJaWYgKHNyX2J1Zi0+c3RhdHVzX3N1YnR5cGUgJiBGU0ZfU1RBVFVTX1JFQURfU1VCX0FDVF9VUERBVEVEKQpAQCAtMzIzLDYgKzMyNyw3IEBACiAJCWRldl9lcnIoJnJlcS0+YWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LAogCQkJIlRoZSBGQ1AgYWRhcHRlciByZXBvcnRlZCBhIHByb2JsZW0gIgogCQkJInRoYXQgY2Fubm90IGJlIHJlY292ZXJlZFxuIik7CisJCXpmY3BfcWRpb19zaW9zbChyZXEtPmFkYXB0ZXIpOwogCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKHJlcS0+YWRhcHRlciwgMCwgImZzZnNxZTEiLCByZXEpOwogCQlicmVhazsKIAl9CkBAIC00MTMsNiArNDE4LDcgQEAKIAkJZGV2X2VycigmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LAogCQkJIjB4JXggaXMgbm90IGEgdmFsaWQgdHJhbnNmZXIgcHJvdG9jb2wgc3RhdHVzXG4iLAogCQkJcXRjYi0+cHJlZml4LnByb3Rfc3RhdHVzKTsKKwkJemZjcF9xZGlvX3Npb3NsKGFkYXB0ZXIpOwogCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJmc3BzZV85IiwgcmVxKTsKIAl9CiAJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwpAQCAtNDk1LDggKzUwMSw5IEBACiAJZmNfaG9zdF9zdXBwb3J0ZWRfY2xhc3NlcyhzaG9zdCkgPSBGQ19DT1NfQ0xBU1MyIHwgRkNfQ09TX0NMQVNTMzsKIAogCWFkYXB0ZXItPmh5ZHJhX3ZlcnNpb24gPSBib3R0b20tPmFkYXB0ZXJfdHlwZTsKLQlhZGFwdGVyLT50aW1lcl90aWNrcyA9IGJvdHRvbS0+dGltZXJfaW50ZXJ2YWw7Ci0JYWRhcHRlci0+c3RhdF9yZWFkX2J1Zl9udW0gPSBtYXgoYm90dG9tLT5zdGF0dXNfcmVhZF9idWZfbnVtLCAodTE2KTE2KTsKKwlhZGFwdGVyLT50aW1lcl90aWNrcyA9IGJvdHRvbS0+dGltZXJfaW50ZXJ2YWwgJiBaRkNQX0ZTRl9USU1FUl9JTlRfTUFTSzsKKwlhZGFwdGVyLT5zdGF0X3JlYWRfYnVmX251bSA9IG1heChib3R0b20tPnN0YXR1c19yZWFkX2J1Zl9udW0sCisJCQkJCSAodTE2KUZTRl9TVEFUVVNfUkVBRFNfUkVDT00pOwogCiAJaWYgKGZjX2hvc3RfcGVybWFuZW50X3BvcnRfbmFtZShzaG9zdCkgPT0gLTEpCiAJCWZjX2hvc3RfcGVybWFuZW50X3BvcnRfbmFtZShzaG9zdCkgPSBmY19ob3N0X3BvcnRfbmFtZShzaG9zdCk7CkBAIC01MjIsNiArNTI5LDggQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCisJemZjcF9zY3NpX3NldF9wcm90KGFkYXB0ZXIpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcxOSwxMSArNzI4LDYgQEAKIAl6ZmNwX3FkaW9fcmVxX2luaXQoYWRhcHRlci0+cWRpbywgJnJlcS0+cWRpb19yZXEsIHJlcS0+cmVxX2lkLCBzYnR5cGUsCiAJCQkgICByZXEtPnF0Y2IsIHNpemVvZihzdHJ1Y3QgZnNmX3F0Y2IpKTsKIAotCWlmICghKGF0b21pY19yZWFkKCZhZGFwdGVyLT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQURBUFRFUl9RRElPVVApKSB7Ci0JCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7Ci0JCXJldHVybiBFUlJfUFRSKC1FSU8pOwotCX0KLQogCXJldHVybiByZXE7CiB9CiAKQEAgLTczNiw3ICs3NDAsNyBAQAogCiAJemZjcF9yZXFsaXN0X2FkZChhZGFwdGVyLT5yZXFfbGlzdCwgcmVxKTsKIAotCXJlcS0+cWRpb19yZXEucWRpb19vdXRiX3VzYWdlID0gYXRvbWljX3JlYWQoJnFkaW8tPnJlcV9xLmNvdW50KTsKKwlyZXEtPnFkaW9fcmVxLnFkaW9fb3V0Yl91c2FnZSA9IGF0b21pY19yZWFkKCZxZGlvLT5yZXFfcV9mcmVlKTsKIAlyZXEtPmlzc3VlZCA9IGdldF9jbG9jaygpOwogCWlmICh6ZmNwX3FkaW9fc2VuZChxZGlvLCAmcmVxLT5xZGlvX3JlcSkpIHsKIAkJZGVsX3RpbWVyKCZyZXEtPnRpbWVyKTsKQEAgLTk2Myw4ICs5NjcsNyBAQAogCiBzdGF0aWMgaW50IHpmY3BfZnNmX3NldHVwX2N0X2Vsc19zYmFscyhzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEsCiAJCQkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dfcmVxLAotCQkJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX3Jlc3AsCi0JCQkJICAgICAgIGludCBtYXhfc2JhbHMpCisJCQkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dfcmVzcCkKIHsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gcmVxLT5hZGFwdGVyOwogCXUzMiBmZWF0ID0gYWRhcHRlci0+YWRhcHRlcl9mZWF0dXJlczsKQEAgLTk4MSwyNCArOTg0LDI1IEBACiAJfQogCiAJLyogdXNlIHNpbmdsZSwgdW5jaGFpbmVkIFNCQUwgaWYgaXQgY2FuIGhvbGQgdGhlIHJlcXVlc3QgKi8KLQlpZiAoemZjcF9xZGlvX3NnX29uZV9zYmFsZShzZ19yZXEpIHx8IHpmY3BfcWRpb19zZ19vbmVfc2JhbGUoc2dfcmVzcCkpIHsKKwlpZiAoemZjcF9xZGlvX3NnX29uZV9zYmFsZShzZ19yZXEpICYmIHpmY3BfcWRpb19zZ19vbmVfc2JhbGUoc2dfcmVzcCkpIHsKIAkJemZjcF9mc2Zfc2V0dXBfY3RfZWxzX3VuY2hhaW5lZChhZGFwdGVyLT5xZGlvLCAmcmVxLT5xZGlvX3JlcSwKIAkJCQkJCXNnX3JlcSwgc2dfcmVzcCk7CiAJCXJldHVybiAwOwogCX0KIAotCWJ5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2coYWRhcHRlci0+cWRpbywgJnJlcS0+cWRpb19yZXEsCi0JCQkJCXNnX3JlcSwgbWF4X3NiYWxzKTsKKwlieXRlcyA9IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKGFkYXB0ZXItPnFkaW8sICZyZXEtPnFkaW9fcmVxLCBzZ19yZXEpOwogCWlmIChieXRlcyA8PSAwKQogCQlyZXR1cm4gLUVJTzsKKwl6ZmNwX3FkaW9fc2V0X3NiYWxlX2xhc3QoYWRhcHRlci0+cWRpbywgJnJlcS0+cWRpb19yZXEpOwogCXJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQucmVxX2J1Zl9sZW5ndGggPSBieXRlczsKIAl6ZmNwX3FkaW9fc2tpcF90b19sYXN0X3NiYWxlKCZyZXEtPnFkaW9fcmVxKTsKIAogCWJ5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2coYWRhcHRlci0+cWRpbywgJnJlcS0+cWRpb19yZXEsCi0JCQkJCXNnX3Jlc3AsIG1heF9zYmFscyk7CisJCQkJCXNnX3Jlc3ApOwogCXJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQucmVzcF9idWZfbGVuZ3RoID0gYnl0ZXM7CiAJaWYgKGJ5dGVzIDw9IDApCiAJCXJldHVybiAtRUlPOworCXpmY3BfcWRpb19zZXRfc2JhbGVfbGFzdChhZGFwdGVyLT5xZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMDYsMTEgKzEwMTAsMTEgQEAKIHN0YXRpYyBpbnQgemZjcF9mc2Zfc2V0dXBfY3RfZWxzKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSwKIAkJCQkgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19yZXEsCiAJCQkJIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dfcmVzcCwKLQkJCQkgaW50IG1heF9zYmFscywgdW5zaWduZWQgaW50IHRpbWVvdXQpCisJCQkJIHVuc2lnbmVkIGludCB0aW1lb3V0KQogewogCWludCByZXQ7CiAKLQlyZXQgPSB6ZmNwX2ZzZl9zZXR1cF9jdF9lbHNfc2JhbHMocmVxLCBzZ19yZXEsIHNnX3Jlc3AsIG1heF9zYmFscyk7CisJcmV0ID0gemZjcF9mc2Zfc2V0dXBfY3RfZWxzX3NiYWxzKHJlcSwgc2dfcmVxLCBzZ19yZXNwKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0xMDUwLDggKzEwNTQsNyBAQAogCX0KIAogCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOwotCXJldCA9IHpmY3BfZnNmX3NldHVwX2N0X2VscyhyZXEsIGN0LT5yZXEsIGN0LT5yZXNwLAotCQkJCSAgICBaRkNQX0ZTRl9NQVhfU0JBTFNfUEVSX1JFUSwgdGltZW91dCk7CisJcmV0ID0gemZjcF9mc2Zfc2V0dXBfY3RfZWxzKHJlcSwgY3QtPnJlcSwgY3QtPnJlc3AsIHRpbWVvdXQpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbGVkX3NlbmQ7CiAKQEAgLTExNDcsNyArMTE1MCwxMCBAQAogCX0KIAogCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOwotCXJldCA9IHpmY3BfZnNmX3NldHVwX2N0X2VscyhyZXEsIGVscy0+cmVxLCBlbHMtPnJlc3AsIDIsIHRpbWVvdXQpOworCisJemZjcF9xZGlvX3NiYWxfbGltaXQocWRpbywgJnJlcS0+cWRpb19yZXEsIDIpOworCisJcmV0ID0gemZjcF9mc2Zfc2V0dXBfY3RfZWxzKHJlcSwgZWxzLT5yZXEsIGVscy0+cmVzcCwgdGltZW91dCk7CiAKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZF9zZW5kOwpAQCAtMjAyOSw3ICsyMDM1LDcgQEAKIAlibGt0cmMubWFnaWMgPSBaRkNQX0JMS19EUlZfREFUQV9NQUdJQzsKIAlpZiAocmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1IpCiAJCWJsa3RyYy5mbGFncyB8PSBaRkNQX0JMS19SRVFfRVJST1I7Ci0JYmxrdHJjLmluYl91c2FnZSA9IHJlcS0+cWRpb19yZXEucWRpb19pbmJfdXNhZ2U7CisJYmxrdHJjLmluYl91c2FnZSA9IDA7CiAJYmxrdHJjLm91dGJfdXNhZ2UgPSByZXEtPnFkaW9fcmVxLnFkaW9fb3V0Yl91c2FnZTsKIAogCWlmIChyZXEtPmFkYXB0ZXItPmFkYXB0ZXJfZmVhdHVyZXMgJiBGU0ZfRkVBVFVSRV9NRUFTVVJFTUVOVF9EQVRBICYmCkBAIC0yMDM5LDkgKzIwNDUsMTMgQEAKIAkJYmxrdHJjLmZhYnJpY19sYXQgPSBsYXRfaW4tPmZhYnJpY19sYXQgKiB0aWNrczsKIAogCQlzd2l0Y2ggKHJlcS0+cXRjYi0+Ym90dG9tLmlvLmRhdGFfZGlyZWN0aW9uKSB7CisJCWNhc2UgRlNGX0RBVEFESVJfRElGX1JFQURfU1RSSVA6CisJCWNhc2UgRlNGX0RBVEFESVJfRElGX1JFQURfQ09OVkVSVDoKIAkJY2FzZSBGU0ZfREFUQURJUl9SRUFEOgogCQkJbGF0ID0gJnVuaXQtPmxhdGVuY2llcy5yZWFkOwogCQkJYnJlYWs7CisJCWNhc2UgRlNGX0RBVEFESVJfRElGX1dSSVRFX0lOU0VSVDoKKwkJY2FzZSBGU0ZfREFUQURJUl9ESUZfV1JJVEVfQ09OVkVSVDoKIAkJY2FzZSBGU0ZfREFUQURJUl9XUklURToKIAkJCWxhdCA9ICZ1bml0LT5sYXRlbmNpZXMud3JpdGU7CiAJCQlicmVhazsKQEAgLTIwODIsNiArMjA5MiwyMSBAQAogCQlnb3RvIHNraXBfZnNmc3RhdHVzOwogCX0KIAorCXN3aXRjaCAocmVxLT5xdGNiLT5oZWFkZXIuZnNmX3N0YXR1cykgeworCWNhc2UgRlNGX0lOQ09OU0lTVEVOVF9QUk9UX0RBVEE6CisJY2FzZSBGU0ZfSU5WQUxJRF9QUk9UX1BBUk06CisJCXNldF9ob3N0X2J5dGUoc2NwbnQsIERJRF9FUlJPUik7CisJCWdvdG8gc2tpcF9mc2ZzdGF0dXM7CisJY2FzZSBGU0ZfQkxPQ0tfR1VBUkRfQ0hFQ0tfRkFJTFVSRToKKwkJemZjcF9zY3NpX2RpZl9zZW5zZV9lcnJvcihzY3BudCwgMHgxKTsKKwkJZ290byBza2lwX2ZzZnN0YXR1czsKKwljYXNlIEZTRl9BUFBfVEFHX0NIRUNLX0ZBSUxVUkU6CisJCXpmY3Bfc2NzaV9kaWZfc2Vuc2VfZXJyb3Ioc2NwbnQsIDB4Mik7CisJCWdvdG8gc2tpcF9mc2ZzdGF0dXM7CisJY2FzZSBGU0ZfUkVGX1RBR19DSEVDS19GQUlMVVJFOgorCQl6ZmNwX3Njc2lfZGlmX3NlbnNlX2Vycm9yKHNjcG50LCAweDMpOworCQlnb3RvIHNraXBfZnNmc3RhdHVzOworCX0KIAlmY3BfcnNwID0gKHN0cnVjdCBmY3BfcmVzcF93aXRoX2V4dCAqKSAmcmVxLT5xdGNiLT5ib3R0b20uaW8uZmNwX3JzcDsKIAl6ZmNwX2ZjX2V2YWxfZmNwX3JzcChmY3BfcnNwLCBzY3BudCk7CiAKQEAgLTIxOTEsNiArMjIxNiw0NCBAQAogCX0KIH0KIAorc3RhdGljIGludCB6ZmNwX2ZzZl9zZXRfZGF0YV9kaXIoc3RydWN0IHNjc2lfY21uZCAqc2NzaV9jbW5kLCB1MzIgKmRhdGFfZGlyKQoreworCXN3aXRjaCAoc2NzaV9nZXRfcHJvdF9vcChzY3NpX2NtbmQpKSB7CisJY2FzZSBTQ1NJX1BST1RfTk9STUFMOgorCQlzd2l0Y2ggKHNjc2lfY21uZC0+c2NfZGF0YV9kaXJlY3Rpb24pIHsKKwkJY2FzZSBETUFfTk9ORToKKwkJCSpkYXRhX2RpciA9IEZTRl9EQVRBRElSX0NNTkQ7CisJCQlicmVhazsKKwkJY2FzZSBETUFfRlJPTV9ERVZJQ0U6CisJCQkqZGF0YV9kaXIgPSBGU0ZfREFUQURJUl9SRUFEOworCQkJYnJlYWs7CisJCWNhc2UgRE1BX1RPX0RFVklDRToKKwkJCSpkYXRhX2RpciA9IEZTRl9EQVRBRElSX1dSSVRFOworCQkJYnJlYWs7CisJCWNhc2UgRE1BX0JJRElSRUNUSU9OQUw6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgU0NTSV9QUk9UX1JFQURfU1RSSVA6CisJCSpkYXRhX2RpciA9IEZTRl9EQVRBRElSX0RJRl9SRUFEX1NUUklQOworCQlicmVhazsKKwljYXNlIFNDU0lfUFJPVF9XUklURV9JTlNFUlQ6CisJCSpkYXRhX2RpciA9IEZTRl9EQVRBRElSX0RJRl9XUklURV9JTlNFUlQ7CisJCWJyZWFrOworCWNhc2UgU0NTSV9QUk9UX1JFQURfUEFTUzoKKwkJKmRhdGFfZGlyID0gRlNGX0RBVEFESVJfRElGX1JFQURfQ09OVkVSVDsKKwkJYnJlYWs7CisJY2FzZSBTQ1NJX1BST1RfV1JJVEVfUEFTUzoKKwkJKmRhdGFfZGlyID0gRlNGX0RBVEFESVJfRElGX1dSSVRFX0NPTlZFUlQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCiAvKioKICAqIHpmY3BfZnNmX3NlbmRfZmNwX2NvbW1hbmRfdGFzayAtIGluaXRpYXRlIGFuIEZDUCBjb21tYW5kIChmb3IgYSBTQ1NJIGNvbW1hbmQpCiAgKiBAdW5pdDogdW5pdCB3aGVyZSBjb21tYW5kIGlzIHNlbnQgdG8KQEAgLTIyMDIsMTYgKzIyNjUsMTcgQEAKIAlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXE7CiAJc3RydWN0IGZjcF9jbW5kICpmY3BfY21uZDsKIAl1bnNpZ25lZCBpbnQgc2J0eXBlID0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwotCWludCByZWFsX2J5dGVzLCByZXR2YWwgPSAtRUlPOworCWludCByZWFsX2J5dGVzLCByZXR2YWwgPSAtRUlPLCBkaXhfYnl0ZXMgPSAwOwogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSB1bml0LT5wb3J0LT5hZGFwdGVyOwogCXN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8gPSBhZGFwdGVyLT5xZGlvOworCXN0cnVjdCBmc2ZfcXRjYl9ib3R0b21faW8gKmlvOwogCiAJaWYgKHVubGlrZWx5KCEoYXRvbWljX3JlYWQoJnVuaXQtPnN0YXR1cykgJgogCQkgICAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX1VOQkxPQ0tFRCkpKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJc3Bpbl9sb2NrKCZxZGlvLT5yZXFfcV9sb2NrKTsKLQlpZiAoYXRvbWljX3JlYWQoJnFkaW8tPnJlcV9xLmNvdW50KSA8PSAwKSB7CisJaWYgKGF0b21pY19yZWFkKCZxZGlvLT5yZXFfcV9mcmVlKSA8PSAwKSB7CiAJCWF0b21pY19pbmMoJnFkaW8tPnJlcV9xX2Z1bGwpOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yMjI3LDU3ICsyMjkxLDQ2IEBACiAJCWdvdG8gb3V0OwogCX0KIAorCXNjc2lfY21uZC0+aG9zdF9zY3JpYmJsZSA9ICh1bnNpZ25lZCBjaGFyICopIHJlcS0+cmVxX2lkOworCisJaW8gPSAmcmVxLT5xdGNiLT5ib3R0b20uaW87CiAJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7CiAJcmVxLT51bml0ID0gdW5pdDsKIAlyZXEtPmRhdGEgPSBzY3NpX2NtbmQ7CiAJcmVxLT5oYW5kbGVyID0gemZjcF9mc2Zfc2VuZF9mY3BfY29tbWFuZF9oYW5kbGVyOwogCXJlcS0+cXRjYi0+aGVhZGVyLmx1bl9oYW5kbGUgPSB1bml0LT5oYW5kbGU7CiAJcmVxLT5xdGNiLT5oZWFkZXIucG9ydF9oYW5kbGUgPSB1bml0LT5wb3J0LT5oYW5kbGU7Ci0JcmVxLT5xdGNiLT5ib3R0b20uaW8uc2VydmljZV9jbGFzcyA9IEZTRl9DTEFTU18zOwotCXJlcS0+cXRjYi0+Ym90dG9tLmlvLmZjcF9jbW5kX2xlbmd0aCA9IEZDUF9DTU5EX0xFTjsKKwlpby0+c2VydmljZV9jbGFzcyA9IEZTRl9DTEFTU18zOworCWlvLT5mY3BfY21uZF9sZW5ndGggPSBGQ1BfQ01ORF9MRU47CiAKLQlzY3NpX2NtbmQtPmhvc3Rfc2NyaWJibGUgPSAodW5zaWduZWQgY2hhciAqKSByZXEtPnJlcV9pZDsKLQotCS8qCi0JICogc2V0IGRlcGVuZGluZyBvbiBkYXRhIGRpcmVjdGlvbjoKLQkgKiAgICAgIGRhdGEgZGlyZWN0aW9uIGJpdHMgaW4gU0JBTEUgKFNCIFR5cGUpCi0JICogICAgICBkYXRhIGRpcmVjdGlvbiBiaXRzIGluIFFUQ0IKLQkgKi8KLQlzd2l0Y2ggKHNjc2lfY21uZC0+c2NfZGF0YV9kaXJlY3Rpb24pIHsKLQljYXNlIERNQV9OT05FOgotCQlyZXEtPnF0Y2ItPmJvdHRvbS5pby5kYXRhX2RpcmVjdGlvbiA9IEZTRl9EQVRBRElSX0NNTkQ7Ci0JCWJyZWFrOwotCWNhc2UgRE1BX0ZST01fREVWSUNFOgotCQlyZXEtPnF0Y2ItPmJvdHRvbS5pby5kYXRhX2RpcmVjdGlvbiA9IEZTRl9EQVRBRElSX1JFQUQ7Ci0JCWJyZWFrOwotCWNhc2UgRE1BX1RPX0RFVklDRToKLQkJcmVxLT5xdGNiLT5ib3R0b20uaW8uZGF0YV9kaXJlY3Rpb24gPSBGU0ZfREFUQURJUl9XUklURTsKLQkJYnJlYWs7Ci0JY2FzZSBETUFfQklESVJFQ1RJT05BTDoKLQkJZ290byBmYWlsZWRfc2NzaV9jbW5kOworCWlmIChzY3NpX2dldF9wcm90X29wKHNjc2lfY21uZCkgIT0gU0NTSV9QUk9UX05PUk1BTCkgeworCQlpby0+ZGF0YV9ibG9ja19sZW5ndGggPSBzY3NpX2NtbmQtPmRldmljZS0+c2VjdG9yX3NpemU7CisJCWlvLT5yZWZfdGFnX3ZhbHVlID0gc2NzaV9nZXRfbGJhKHNjc2lfY21uZCkgJiAweEZGRkZGRkZGOwogCX0KIAorCXpmY3BfZnNmX3NldF9kYXRhX2RpcihzY3NpX2NtbmQsICZpby0+ZGF0YV9kaXJlY3Rpb24pOworCiAJZ2V0X2RldmljZSgmdW5pdC0+ZGV2KTsKIAogCWZjcF9jbW5kID0gKHN0cnVjdCBmY3BfY21uZCAqKSAmcmVxLT5xdGNiLT5ib3R0b20uaW8uZmNwX2NtbmQ7CiAJemZjcF9mY19zY3NpX3RvX2ZjcChmY3BfY21uZCwgc2NzaV9jbW5kKTsKIAotCXJlYWxfYnl0ZXMgPSB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhxZGlvLCAmcmVxLT5xZGlvX3JlcSwKLQkJCQkJICAgICBzY3NpX3NnbGlzdChzY3NpX2NtbmQpLAotCQkJCQkgICAgIFpGQ1BfRlNGX01BWF9TQkFMU19QRVJfUkVRKTsKLQlpZiAodW5saWtlbHkocmVhbF9ieXRlcyA8IDApKSB7Ci0JCWlmIChyZXEtPnFkaW9fcmVxLnNiYWxfbnVtYmVyID49IFpGQ1BfRlNGX01BWF9TQkFMU19QRVJfUkVRKSB7Ci0JCQlkZXZfZXJyKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsCi0JCQkJIk92ZXJzaXplIGRhdGEgcGFja2FnZSwgdW5pdCAweCUwMTZMeCAiCi0JCQkJIm9uIHBvcnQgMHglMDE2THggY2xvc2VkXG4iLAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdW5pdC0+ZmNwX2x1biwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXVuaXQtPnBvcnQtPnd3cG4pOwotCQkJemZjcF9lcnBfdW5pdF9zaHV0ZG93bih1bml0LCAwLCAiZnNzZmN0MSIsIHJlcSk7Ci0JCQlyZXR2YWwgPSAtRUlOVkFMOwotCQl9Ci0JCWdvdG8gZmFpbGVkX3Njc2lfY21uZDsKKwlpZiAoc2NzaV9wcm90X3NnX2NvdW50KHNjc2lfY21uZCkpIHsKKwkJemZjcF9xZGlvX3NldF9kYXRhX2RpdihxZGlvLCAmcmVxLT5xZGlvX3JlcSwKKwkJCQkgICAgICAgc2NzaV9wcm90X3NnX2NvdW50KHNjc2lfY21uZCkpOworCQlkaXhfYnl0ZXMgPSB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhxZGlvLCAmcmVxLT5xZGlvX3JlcSwKKwkJCQkJCXNjc2lfcHJvdF9zZ2xpc3Qoc2NzaV9jbW5kKSk7CisJCWlvLT5wcm90X2RhdGFfbGVuZ3RoID0gZGl4X2J5dGVzOwogCX0KIAorCXJlYWxfYnl0ZXMgPSB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhxZGlvLCAmcmVxLT5xZGlvX3JlcSwKKwkJCQkJICAgICBzY3NpX3NnbGlzdChzY3NpX2NtbmQpKTsKKworCWlmICh1bmxpa2VseShyZWFsX2J5dGVzIDwgMCkgfHwgdW5saWtlbHkoZGl4X2J5dGVzIDwgMCkpCisJCWdvdG8gZmFpbGVkX3Njc2lfY21uZDsKKworCXpmY3BfcWRpb19zZXRfc2JhbGVfbGFzdChhZGFwdGVyLT5xZGlvLCAmcmVxLT5xZGlvX3JlcSk7CisKIAlyZXR2YWwgPSB6ZmNwX2ZzZl9yZXFfc2VuZChyZXEpOwogCWlmICh1bmxpa2VseShyZXR2YWwpKQogCQlnb3RvIGZhaWxlZF9zY3NpX2NtbmQ7CkBAIC0yMzk1LDEzICsyNDQ4LDEzIEBACiAJYm90dG9tLT5vcGVyYXRpb25fc3VidHlwZSA9IEZTRl9DRkRDX09QRVJBVElPTl9TVUJUWVBFOwogCWJvdHRvbS0+b3B0aW9uID0gZnNmX2NmZGMtPm9wdGlvbjsKIAotCWJ5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2cocWRpbywgJnJlcS0+cWRpb19yZXEsCi0JCQkJCWZzZl9jZmRjLT5zZywKLQkJCQkJWkZDUF9GU0ZfTUFYX1NCQUxTX1BFUl9SRVEpOworCWJ5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2cocWRpbywgJnJlcS0+cWRpb19yZXEsIGZzZl9jZmRjLT5zZyk7CisKIAlpZiAoYnl0ZXMgIT0gWkZDUF9DRkRDX01BWF9TSVpFKSB7CiAJCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7CiAJCWdvdG8gb3V0OwogCX0KKwl6ZmNwX3FkaW9fc2V0X3NiYWxlX2xhc3QoYWRhcHRlci0+cWRpbywgJnJlcS0+cWRpb19yZXEpOwogCiAJemZjcF9mc2Zfc3RhcnRfdGltZXIocmVxLCBaRkNQX0ZTRl9SRVFVRVNUX1RJTUVPVVQpOwogCXJldHZhbCA9IHpmY3BfZnNmX3JlcV9zZW5kKHJlcSk7CkBAIC0yNDIzLDcgKzI0NzYsNyBAQAogdm9pZCB6ZmNwX2ZzZl9yZXFpZF9jaGVjayhzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBpbnQgc2JhbF9pZHgpCiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHFkaW8tPmFkYXB0ZXI7Ci0Jc3RydWN0IHFkaW9fYnVmZmVyICpzYmFsID0gcWRpby0+cmVzcF9xLnNiYWxbc2JhbF9pZHhdOworCXN0cnVjdCBxZGlvX2J1ZmZlciAqc2JhbCA9IHFkaW8tPnJlc19xW3NiYWxfaWR4XTsKIAlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGU7CiAJc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcTsKIAl1bnNpZ25lZCBsb25nIHJlcV9pZDsKQEAgLTI0MzUsMTcgKzI0ODgsMTcgQEAKIAkJcmVxX2lkID0gKHVuc2lnbmVkIGxvbmcpIHNiYWxlLT5hZGRyOwogCQlmc2ZfcmVxID0gemZjcF9yZXFsaXN0X2ZpbmRfcm0oYWRhcHRlci0+cmVxX2xpc3QsIHJlcV9pZCk7CiAKLQkJaWYgKCFmc2ZfcmVxKQorCQlpZiAoIWZzZl9yZXEpIHsKIAkJCS8qCiAJCQkgKiBVbmtub3duIHJlcXVlc3QgbWVhbnMgdGhhdCB3ZSBoYXZlIHBvdGVudGlhbGx5IG1lbW9yeQogCQkJICogY29ycnVwdGlvbiBhbmQgbXVzdCBzdG9wIHRoZSBtYWNoaW5lIGltbWVkaWF0ZWx5LgogCQkJICovCisJCQl6ZmNwX3FkaW9fc2lvc2woYWRhcHRlcik7CiAJCQlwYW5pYygiZXJyb3I6IHVua25vd24gcmVxX2lkICglbHgpIG9uIGFkYXB0ZXIgJXMuXG4iLAogCQkJICAgICAgcmVxX2lkLCBkZXZfbmFtZSgmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2KSk7CisJCX0KIAogCQlmc2ZfcmVxLT5xZGlvX3JlcS5zYmFsX3Jlc3BvbnNlID0gc2JhbF9pZHg7Ci0JCWZzZl9yZXEtPnFkaW9fcmVxLnFkaW9faW5iX3VzYWdlID0KLQkJCWF0b21pY19yZWFkKCZxZGlvLT5yZXNwX3EuY291bnQpOwogCQl6ZmNwX2ZzZl9yZXFfY29tcGxldGUoZnNmX3JlcSk7CiAKIAkJaWYgKGxpa2VseShzYmFsZS0+ZmxhZ3MgJiBTQkFMX0ZMQUdTX0xBU1RfRU5UUlkpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmgKaW5kZXggNTE5MDgzZi4uZGI4Yzg1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5oCkBAIC04MCwxMSArODAsMTUgQEAKICNkZWZpbmUgRlNGX1JFUVVFU1RfU0laRV9UT09fTEFSR0UJCTB4MDAwMDAwNjEKICNkZWZpbmUgRlNGX1JFU1BPTlNFX1NJWkVfVE9PX0xBUkdFCQkweDAwMDAwMDYyCiAjZGVmaW5lIEZTRl9TQkFMX01JU01BVENICQkJMHgwMDAwMDA2MworI2RlZmluZSBGU0ZfSU5DT05TSVNURU5UX1BST1RfREFUQQkJMHgwMDAwMDA3MAorI2RlZmluZSBGU0ZfSU5WQUxJRF9QUk9UX1BBUk0JCQkweDAwMDAwMDcxCisjZGVmaW5lIEZTRl9CTE9DS19HVUFSRF9DSEVDS19GQUlMVVJFCQkweDAwMDAwMDgxCisjZGVmaW5lIEZTRl9BUFBfVEFHX0NIRUNLX0ZBSUxVUkUJCTB4MDAwMDAwODIKKyNkZWZpbmUgRlNGX1JFRl9UQUdfQ0hFQ0tfRkFJTFVSRQkJMHgwMDAwMDA4MwogI2RlZmluZSBGU0ZfQURBUFRFUl9TVEFUVVNfQVZBSUxBQkxFCQkweDAwMDAwMEFECiAjZGVmaW5lIEZTRl9VTktOT1dOX0NPTU1BTkQJCQkweDAwMDAwMEUyCiAjZGVmaW5lIEZTRl9VTktOT1dOX09QX1NVQlRZUEUgICAgICAgICAgICAgICAgICAweDAwMDAwMEUzCiAjZGVmaW5lIEZTRl9JTlZBTElEX0NPTU1BTkRfT1BUSU9OICAgICAgICAgICAgICAweDAwMDAwMEU1Ci0vKiAjZGVmaW5lIEZTRl9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRiAgKi8KIAogI2RlZmluZSBGU0ZfUFJPVF9TVEFUVVNfUVVBTF9TSVpFCQkxNgogI2RlZmluZSBGU0ZfU1RBVFVTX1FVQUxJRklFUl9TSVpFCQkxNgpAQCAtMTQ3LDE4ICsxNTEsMTcgQEAKICNkZWZpbmUgRlNGX0RBVEFESVJfV1JJVEUJCQkweDAwMDAwMDAxCiAjZGVmaW5lIEZTRl9EQVRBRElSX1JFQUQJCQkweDAwMDAwMDAyCiAjZGVmaW5lIEZTRl9EQVRBRElSX0NNTkQJCQkweDAwMDAwMDA0CisjZGVmaW5lIEZTRl9EQVRBRElSX0RJRl9XUklURV9JTlNFUlQJCTB4MDAwMDAwMDkKKyNkZWZpbmUgRlNGX0RBVEFESVJfRElGX1JFQURfU1RSSVAJCTB4MDAwMDAwMGEKKyNkZWZpbmUgRlNGX0RBVEFESVJfRElGX1dSSVRFX0NPTlZFUlQJCTB4MDAwMDAwMGIKKyNkZWZpbmUgRlNGX0RBVEFESVJfRElGX1JFQURfQ09OVkVSVAkJMFgwMDAwMDAwYworCisvKiBkYXRhIHByb3RlY3Rpb24gY29udHJvbCBmbGFncyAqLworI2RlZmluZSBGU0ZfQVBQX1RBR19DSEVDS19FTkFCTEUJCTB4MTAKIAogLyogZmMgc2VydmljZSBjbGFzcyAqLwogI2RlZmluZSBGU0ZfQ0xBU1NfMwkJCQkweDAwMDAwMDAzCiAKLS8qIFNCQUwgY2hhaW5pbmcgKi8KLSNkZWZpbmUgWkZDUF9GU0ZfTUFYX1NCQUxTX1BFUl9SRVEJCTM2Ci0KLS8qIG1heC4gbnVtYmVyIG9mIChkYXRhIGJ1ZmZlcikgU0JBTEVzIGluIGxhcmdlc3QgU0JBTCBjaGFpbgotICogcmVxdWVzdCBJRCArIFFUQ0IgaW4gU0JBTEUgMCArIDEgb2YgZmlyc3QgU0JBTCBpbiBjaGFpbiAgICovCi0jZGVmaW5lIFpGQ1BfRlNGX01BWF9TQkFMRVNfUEVSX1JFUQlcCi0JKFpGQ1BfRlNGX01BWF9TQkFMU19QRVJfUkVRICogWkZDUF9RRElPX01BWF9TQkFMRVNfUEVSX1NCQUwgLSAyKQotCiAvKiBsb2dnaW5nIHNwYWNlIGJlaGluZCBRVENCICovCiAjZGVmaW5lIEZTRl9RVENCX0xPR19TSVpFCQkJMTAyNAogCkBAIC0xNzAsNiArMTczLDggQEAKICNkZWZpbmUgRlNGX0ZFQVRVUkVfRUxTX0NUX0NIQUlORURfU0JBTFMJMHgwMDAwMDAyMAogI2RlZmluZSBGU0ZfRkVBVFVSRV9VUERBVEVfQUxFUlQJCTB4MDAwMDAxMDAKICNkZWZpbmUgRlNGX0ZFQVRVUkVfTUVBU1VSRU1FTlRfREFUQQkJMHgwMDAwMDIwMAorI2RlZmluZSBGU0ZfRkVBVFVSRV9ESUZfUFJPVF9UWVBFMQkJMHgwMDAxMDAwMAorI2RlZmluZSBGU0ZfRkVBVFVSRV9ESVhfUFJPVF9UQ1BJUAkJMHgwMDAyMDAwMAogCiAvKiBob3N0IGNvbm5lY3Rpb24gZmVhdHVyZXMgKi8KICNkZWZpbmUgRlNGX0ZFQVRVUkVfTlBJVl9NT0RFCQkJMHgwMDAwMDAwMQpAQCAtMzI0LDkgKzMyOSwxNCBAQAogc3RydWN0IGZzZl9xdGNiX2JvdHRvbV9pbyB7CiAJdTMyIGRhdGFfZGlyZWN0aW9uOwogCXUzMiBzZXJ2aWNlX2NsYXNzOwotCXU4ICByZXMxWzhdOworCXU4ICByZXMxOworCXU4ICBkYXRhX3Byb3RfZmxhZ3M7CisJdTE2IGFwcF90YWdfdmFsdWU7CisJdTMyIHJlZl90YWdfdmFsdWU7CiAJdTMyIGZjcF9jbW5kX2xlbmd0aDsKLQl1OCAgcmVzMlsxMl07CisJdTMyIGRhdGFfYmxvY2tfbGVuZ3RoOworCXUzMiBwcm90X2RhdGFfbGVuZ3RoOworCXU4ICByZXMyWzRdOwogCXU4ICBmY3BfY21uZFtGU0ZfRkNQX0NNTkRfU0laRV07CiAJdTggIGZjcF9yc3BbRlNGX0ZDUF9SU1BfU0laRV07CiAJdTggIHJlczNbNjRdOwpAQCAtMzUyLDYgKzM2Miw4IEBACiAJdTggIGVsc1syNTZdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKyNkZWZpbmUgWkZDUF9GU0ZfVElNRVJfSU5UX01BU0sJMHgzRkZGCisKIHN0cnVjdCBmc2ZfcXRjYl9ib3R0b21fY29uZmlnIHsKIAl1MzIgbGljX3ZlcnNpb247CiAJdTMyIGZlYXR1cmVfc2VsZWN0aW9uOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYwppbmRleCAyODExN2UxLi5iMjYzNTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYwpAQCAtMzAsMTIgKzMwLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHpmY3BfcWRpb19oYW5kbGVyX2Vycm9yKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sIGNoYXIgKmlkKQorc3RhdGljIHZvaWQgemZjcF9xZGlvX2hhbmRsZXJfZXJyb3Ioc3RydWN0IHpmY3BfcWRpbyAqcWRpbywgY2hhciAqaWQsCisJCQkJICAgIHVuc2lnbmVkIGludCBxZGlvX2VycikKIHsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gcWRpby0+YWRhcHRlcjsKIAogCWRldl93YXJuKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsICJBIFFESU8gcHJvYmxlbSBvY2N1cnJlZFxuIik7CiAKKwlpZiAocWRpb19lcnIgJiBRRElPX0VSUk9SX1NMU0JfU1RBVEUpCisJCXpmY3BfcWRpb19zaW9zbChhZGFwdGVyKTsKIAl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLAogCQkJCVpGQ1BfU1RBVFVTX0FEQVBURVJfTElOS19VTlBMVUdHRUQgfAogCQkJCVpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELCBpZCwgTlVMTCk7CkBAIC01NSw3MiArNTgsNDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCB6ZmNwX3FkaW9fYWNjb3VudChzdHJ1Y3QgemZjcF9xZGlvICpxZGlvKQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyBub3csIHNwYW47Ci0JaW50IGZyZWUsIHVzZWQ7CisJaW50IHVzZWQ7CiAKIAlzcGluX2xvY2soJnFkaW8tPnN0YXRfbG9jayk7CiAJbm93ID0gZ2V0X2Nsb2NrX21vbm90b25pYygpOwogCXNwYW4gPSAobm93IC0gcWRpby0+cmVxX3FfdGltZSkgPj4gMTI7Ci0JZnJlZSA9IGF0b21pY19yZWFkKCZxZGlvLT5yZXFfcS5jb3VudCk7Ci0JdXNlZCA9IFFESU9fTUFYX0JVRkZFUlNfUEVSX1EgLSBmcmVlOworCXVzZWQgPSBRRElPX01BWF9CVUZGRVJTX1BFUl9RIC0gYXRvbWljX3JlYWQoJnFkaW8tPnJlcV9xX2ZyZWUpOwogCXFkaW8tPnJlcV9xX3V0aWwgKz0gdXNlZCAqIHNwYW47CiAJcWRpby0+cmVxX3FfdGltZSA9IG5vdzsKIAlzcGluX3VubG9jaygmcWRpby0+c3RhdF9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgemZjcF9xZGlvX2ludF9yZXEoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIHVuc2lnbmVkIGludCBxZGlvX2VyciwKLQkJCSAgICAgIGludCBxdWV1ZV9ubywgaW50IGZpcnN0LCBpbnQgY291bnQsCisJCQkgICAgICBpbnQgcXVldWVfbm8sIGludCBpZHgsIGludCBjb3VudCwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcGFybSkKIHsKIAlzdHJ1Y3QgemZjcF9xZGlvICpxZGlvID0gKHN0cnVjdCB6ZmNwX3FkaW8gKikgcGFybTsKLQlzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlICpxdWV1ZSA9ICZxZGlvLT5yZXFfcTsKIAogCWlmICh1bmxpa2VseShxZGlvX2VycikpIHsKLQkJemZjcF9kYmZfaGJhX3FkaW8ocWRpby0+YWRhcHRlci0+ZGJmLCBxZGlvX2VyciwgZmlyc3QsCi0JCQkJCWNvdW50KTsKLQkJemZjcF9xZGlvX2hhbmRsZXJfZXJyb3IocWRpbywgInFkaXJlcTEiKTsKKwkJemZjcF9kYmZfaGJhX3FkaW8ocWRpby0+YWRhcHRlci0+ZGJmLCBxZGlvX2VyciwgaWR4LCBjb3VudCk7CisJCXpmY3BfcWRpb19oYW5kbGVyX2Vycm9yKHFkaW8sICJxZGlyZXExIiwgcWRpb19lcnIpOwogCQlyZXR1cm47CiAJfQogCiAJLyogY2xlYW51cCBhbGwgU0JBTHMgYmVpbmcgcHJvZ3JhbS1vd25lZCBub3cgKi8KLQl6ZmNwX3FkaW9femVyb19zYmFscyhxdWV1ZS0+c2JhbCwgZmlyc3QsIGNvdW50KTsKKwl6ZmNwX3FkaW9femVyb19zYmFscyhxZGlvLT5yZXFfcSwgaWR4LCBjb3VudCk7CiAKIAl6ZmNwX3FkaW9fYWNjb3VudChxZGlvKTsKLQlhdG9taWNfYWRkKGNvdW50LCAmcXVldWUtPmNvdW50KTsKKwlhdG9taWNfYWRkKGNvdW50LCAmcWRpby0+cmVxX3FfZnJlZSk7CiAJd2FrZV91cCgmcWRpby0+cmVxX3Ffd3EpOwogfQogCi1zdGF0aWMgdm9pZCB6ZmNwX3FkaW9fcmVzcF9wdXRfYmFjayhzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBpbnQgcHJvY2Vzc2VkKQotewotCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUgKnF1ZXVlID0gJnFkaW8tPnJlc3BfcTsKLQlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiA9IHFkaW8tPmFkYXB0ZXItPmNjd19kZXZpY2U7Ci0JdTggY291bnQsIHN0YXJ0ID0gcXVldWUtPmZpcnN0OwotCXVuc2lnbmVkIGludCByZXR2YWw7Ci0KLQljb3VudCA9IGF0b21pY19yZWFkKCZxdWV1ZS0+Y291bnQpICsgcHJvY2Vzc2VkOwotCi0JcmV0dmFsID0gZG9fUURJTyhjZGV2LCBRRElPX0ZMQUdfU1lOQ19JTlBVVCwgMCwgc3RhcnQsIGNvdW50KTsKLQotCWlmICh1bmxpa2VseShyZXR2YWwpKSB7Ci0JCWF0b21pY19zZXQoJnF1ZXVlLT5jb3VudCwgY291bnQpOwotCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihxZGlvLT5hZGFwdGVyLCAwLCAicWRycGJfMSIsIE5VTEwpOwotCX0gZWxzZSB7Ci0JCXF1ZXVlLT5maXJzdCArPSBjb3VudDsKLQkJcXVldWUtPmZpcnN0ICU9IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7Ci0JCWF0b21pY19zZXQoJnF1ZXVlLT5jb3VudCwgMCk7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCB6ZmNwX3FkaW9faW50X3Jlc3Aoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIHVuc2lnbmVkIGludCBxZGlvX2VyciwKLQkJCSAgICAgICBpbnQgcXVldWVfbm8sIGludCBmaXJzdCwgaW50IGNvdW50LAorCQkJICAgICAgIGludCBxdWV1ZV9ubywgaW50IGlkeCwgaW50IGNvdW50LAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcGFybSkKIHsKIAlzdHJ1Y3QgemZjcF9xZGlvICpxZGlvID0gKHN0cnVjdCB6ZmNwX3FkaW8gKikgcGFybTsKIAlpbnQgc2JhbF9pZHgsIHNiYWxfbm87CiAKIAlpZiAodW5saWtlbHkocWRpb19lcnIpKSB7Ci0JCXpmY3BfZGJmX2hiYV9xZGlvKHFkaW8tPmFkYXB0ZXItPmRiZiwgcWRpb19lcnIsIGZpcnN0LAotCQkJCQljb3VudCk7Ci0JCXpmY3BfcWRpb19oYW5kbGVyX2Vycm9yKHFkaW8sICJxZGlyZXMxIik7CisJCXpmY3BfZGJmX2hiYV9xZGlvKHFkaW8tPmFkYXB0ZXItPmRiZiwgcWRpb19lcnIsIGlkeCwgY291bnQpOworCQl6ZmNwX3FkaW9faGFuZGxlcl9lcnJvcihxZGlvLCAicWRpcmVzMSIsIHFkaW9fZXJyKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTI5LDI1ICsxMDcsMTYgQEAKIAkgKiByZXR1cm5lZCBieSBRRElPIGxheWVyCiAJICovCiAJZm9yIChzYmFsX25vID0gMDsgc2JhbF9ubyA8IGNvdW50OyBzYmFsX25vKyspIHsKLQkJc2JhbF9pZHggPSAoZmlyc3QgKyBzYmFsX25vKSAlIFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7CisJCXNiYWxfaWR4ID0gKGlkeCArIHNiYWxfbm8pICUgUURJT19NQVhfQlVGRkVSU19QRVJfUTsKIAkJLyogZ28gdGhyb3VnaCBhbGwgU0JBTEVzIG9mIFNCQUwgKi8KIAkJemZjcF9mc2ZfcmVxaWRfY2hlY2socWRpbywgc2JhbF9pZHgpOwogCX0KIAogCS8qCi0JICogcHV0IHJhbmdlIG9mIFNCQUxzIGJhY2sgdG8gcmVzcG9uc2UgcXVldWUKLQkgKiAoaW5jbHVkaW5nIFNCQUxzIHdoaWNoIGhhdmUgYWxyZWFkeSBiZWVuIGZyZWUgYmVmb3JlKQorCSAqIHB1dCBTQkFMcyBiYWNrIHRvIHJlc3BvbnNlIHF1ZXVlCiAJICovCi0JemZjcF9xZGlvX3Jlc3BfcHV0X2JhY2socWRpbywgY291bnQpOwotfQotCi1zdGF0aWMgdm9pZCB6ZmNwX3FkaW9fc2JhbF9saW1pdChzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLAotCQkJCSBzdHJ1Y3QgemZjcF9xZGlvX3JlcSAqcV9yZXEsIGludCBtYXhfc2JhbHMpCi17Ci0JaW50IGNvdW50ID0gYXRvbWljX3JlYWQoJnFkaW8tPnJlcV9xLmNvdW50KTsKLQljb3VudCA9IG1pbihjb3VudCwgbWF4X3NiYWxzKTsKLQlxX3JlcS0+c2JhbF9saW1pdCA9IChxX3JlcS0+c2JhbF9maXJzdCArIGNvdW50IC0gMSkKLQkJCQkJJSBRRElPX01BWF9CVUZGRVJTX1BFUl9ROworCWlmIChkb19RRElPKGNkZXYsIFFESU9fRkxBR19TWU5DX0lOUFVULCAwLCBpZHgsIGNvdW50KSkKKwkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4ocWRpby0+YWRhcHRlciwgMCwgInFkaXJlczIiLCBOVUxMKTsKIH0KIAogc3RhdGljIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICoKQEAgLTE3Myw2ICsxNDIsNyBAQAogCiAJLyoga2VlcCB0aGlzIHJlcXVlc3RzIG51bWJlciBvZiBTQkFMcyB1cC10by1kYXRlICovCiAJcV9yZXEtPnNiYWxfbnVtYmVyKys7CisJQlVHX09OKHFfcmVxLT5zYmFsX251bWJlciA+IFpGQ1BfUURJT19NQVhfU0JBTFNfUEVSX1JFUSk7CiAKIAkvKiBzdGFydCBhdCBmaXJzdCBTQkFMRSBvZiBuZXcgU0JBTCAqLwogCXFfcmVxLT5zYmFsZV9jdXJyID0gMDsKQEAgLTE5MywxNyArMTYzLDYgQEAKIAlyZXR1cm4gemZjcF9xZGlvX3NiYWxlX2N1cnIocWRpbywgcV9yZXEpOwogfQogCi1zdGF0aWMgdm9pZCB6ZmNwX3FkaW9fdW5kb19zYmFscyhzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLAotCQkJCSBzdHJ1Y3QgemZjcF9xZGlvX3JlcSAqcV9yZXEpCi17Ci0Jc3RydWN0IHFkaW9fYnVmZmVyICoqc2JhbCA9IHFkaW8tPnJlcV9xLnNiYWw7Ci0JaW50IGZpcnN0ID0gcV9yZXEtPnNiYWxfZmlyc3Q7Ci0JaW50IGxhc3QgPSBxX3JlcS0+c2JhbF9sYXN0OwotCWludCBjb3VudCA9IChsYXN0IC0gZmlyc3QgKyBRRElPX01BWF9CVUZGRVJTX1BFUl9RKSAlCi0JCVFESU9fTUFYX0JVRkZFUlNfUEVSX1EgKyAxOwotCXpmY3BfcWRpb196ZXJvX3NiYWxzKHNiYWwsIGZpcnN0LCBjb3VudCk7Ci19Ci0KIC8qKgogICogemZjcF9xZGlvX3NiYWxzX2Zyb21fc2cgLSBmaWxsIFNCQUxzIGZyb20gc2NhdHRlci1nYXRoZXIgbGlzdAogICogQHFkaW86IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfcWRpbwpAQCAtMjEzLDE0ICsxNzIsMTEgQEAKICAqIFJldHVybnM6IG51bWJlciBvZiBieXRlcywgb3IgZXJyb3IgKG5lZ2F0aXYpCiAgKi8KIGludCB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBzdHJ1Y3QgemZjcF9xZGlvX3JlcSAqcV9yZXEsCi0JCQkgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG1heF9zYmFscykKKwkJCSAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnKQogewogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKIAlpbnQgYnl0ZXMgPSAwOwogCi0JLyogZmlndXJlIG91dCBsYXN0IGFsbG93ZWQgU0JBTCAqLwotCXpmY3BfcWRpb19zYmFsX2xpbWl0KHFkaW8sIHFfcmVxLCBtYXhfc2JhbHMpOwotCiAJLyogc2V0IHN0b3JhZ2UtYmxvY2sgdHlwZSBmb3IgdGhpcyByZXF1ZXN0ICovCiAJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sIHFfcmVxKTsKIAlzYmFsZS0+ZmxhZ3MgfD0gcV9yZXEtPnNidHlwZTsKQEAgLTIyOSw3ICsxODUsOCBAQAogCQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9uZXh0KHFkaW8sIHFfcmVxKTsKIAkJaWYgKCFzYmFsZSkgewogCQkJYXRvbWljX2luYygmcWRpby0+cmVxX3FfZnVsbCk7Ci0JCQl6ZmNwX3FkaW9fdW5kb19zYmFscyhxZGlvLCBxX3JlcSk7CisJCQl6ZmNwX3FkaW9femVyb19zYmFscyhxZGlvLT5yZXFfcSwgcV9yZXEtPnNiYWxfZmlyc3QsCisJCQkJCSAgICAgcV9yZXEtPnNiYWxfbnVtYmVyKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKQEAgLTIzOSwxOSArMTk2LDE0IEBACiAJCWJ5dGVzICs9IHNnLT5sZW5ndGg7CiAJfQogCi0JLyogYXNzdW1lIHRoYXQgbm8gb3RoZXIgU0JBTEVzIGFyZSB0byBmb2xsb3cgaW4gdGhlIHNhbWUgU0JBTCAqLwotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX2N1cnIocWRpbywgcV9yZXEpOwotCXNiYWxlLT5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7Ci0KIAlyZXR1cm4gYnl0ZXM7CiB9CiAKIHN0YXRpYyBpbnQgemZjcF9xZGlvX3NiYWxfY2hlY2soc3RydWN0IHpmY3BfcWRpbyAqcWRpbykKIHsKLQlzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlICpyZXFfcSA9ICZxZGlvLT5yZXFfcTsKLQogCXNwaW5fbG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7Ci0JaWYgKGF0b21pY19yZWFkKCZyZXFfcS0+Y291bnQpKQorCWlmIChhdG9taWNfcmVhZCgmcWRpby0+cmVxX3FfZnJlZSkgfHwKKwkgICAgIShhdG9taWNfcmVhZCgmcWRpby0+YWRhcHRlci0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX0FEQVBURVJfUURJT1VQKSkKIAkJcmV0dXJuIDE7CiAJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwogCXJldHVybiAwOwpAQCAtMjc0LDggKzIyNiwxMyBAQAogCXNwaW5fdW5sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKIAlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChxZGlvLT5yZXFfcV93cSwKIAkJCSAgICAgICB6ZmNwX3FkaW9fc2JhbF9jaGVjayhxZGlvKSwgNSAqIEhaKTsKKworCWlmICghKGF0b21pY19yZWFkKCZxZGlvLT5hZGFwdGVyLT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQURBUFRFUl9RRElPVVApKQorCQlyZXR1cm4gLUVJTzsKKwogCWlmIChyZXQgPiAwKQogCQlyZXR1cm4gMDsKKwogCWlmICghcmV0KSB7CiAJCWF0b21pY19pbmMoJnFkaW8tPnJlcV9xX2Z1bGwpOwogCQkvKiBhc3N1bWUgaGFuZ2luZyBvdXRib3VuZCBxdWV1ZSwgdHJ5IHF1ZXVlIHJlY292ZXJ5ICovCkBAIC0yOTQsMjUgKzI1MSwyNSBAQAogICovCiBpbnQgemZjcF9xZGlvX3NlbmQoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywgc3RydWN0IHpmY3BfcWRpb19yZXEgKnFfcmVxKQogewotCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUgKnJlcV9xID0gJnFkaW8tPnJlcV9xOwotCWludCBmaXJzdCA9IHFfcmVxLT5zYmFsX2ZpcnN0OwotCWludCBjb3VudCA9IHFfcmVxLT5zYmFsX251bWJlcjsKIAlpbnQgcmV0dmFsOwotCXVuc2lnbmVkIGludCBxZGlvX2ZsYWdzID0gUURJT19GTEFHX1NZTkNfT1VUUFVUOworCXU4IHNiYWxfbnVtYmVyID0gcV9yZXEtPnNiYWxfbnVtYmVyOwogCiAJemZjcF9xZGlvX2FjY291bnQocWRpbyk7CiAKLQlyZXR2YWwgPSBkb19RRElPKHFkaW8tPmFkYXB0ZXItPmNjd19kZXZpY2UsIHFkaW9fZmxhZ3MsIDAsIGZpcnN0LAotCQkJIGNvdW50KTsKKwlyZXR2YWwgPSBkb19RRElPKHFkaW8tPmFkYXB0ZXItPmNjd19kZXZpY2UsIFFESU9fRkxBR19TWU5DX09VVFBVVCwgMCwKKwkJCSBxX3JlcS0+c2JhbF9maXJzdCwgc2JhbF9udW1iZXIpOworCiAJaWYgKHVubGlrZWx5KHJldHZhbCkpIHsKLQkJemZjcF9xZGlvX3plcm9fc2JhbHMocmVxX3EtPnNiYWwsIGZpcnN0LCBjb3VudCk7CisJCXpmY3BfcWRpb196ZXJvX3NiYWxzKHFkaW8tPnJlcV9xLCBxX3JlcS0+c2JhbF9maXJzdCwKKwkJCQkgICAgIHNiYWxfbnVtYmVyKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKIAkvKiBhY2NvdW50IGZvciB0cmFuc2ZlcnJlZCBidWZmZXJzICovCi0JYXRvbWljX3N1Yihjb3VudCwgJnJlcV9xLT5jb3VudCk7Ci0JcmVxX3EtPmZpcnN0ICs9IGNvdW50OwotCXJlcV9xLT5maXJzdCAlPSBRRElPX01BWF9CVUZGRVJTX1BFUl9ROworCWF0b21pY19zdWIoc2JhbF9udW1iZXIsICZxZGlvLT5yZXFfcV9mcmVlKTsKKwlxZGlvLT5yZXFfcV9pZHggKz0gc2JhbF9udW1iZXI7CisJcWRpby0+cmVxX3FfaWR4ICU9IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzI1LDYgKzI4Miw3IEBACiAJaWQtPnFfZm9ybWF0ID0gUURJT19aRkNQX1FGTVQ7CiAJbWVtY3B5KGlkLT5hZGFwdGVyX25hbWUsIGRldl9uYW1lKCZpZC0+Y2Rldi0+ZGV2KSwgOCk7CiAJQVNDRUJDKGlkLT5hZGFwdGVyX25hbWUsIDgpOworCWlkLT5xaWJfcmZsYWdzID0gUUlCX1JGTEFHU19FTkFCTEVfREFUQV9ESVY7CiAJaWQtPnFpYl9wYXJhbV9maWVsZF9mb3JtYXQgPSAwOwogCWlkLT5xaWJfcGFyYW1fZmllbGQgPSBOVUxMOwogCWlkLT5pbnB1dF9zbGliX2VsZW1lbnRzID0gTlVMTDsKQEAgLTMzNCwxMCArMjkyLDEwIEBACiAJaWQtPmlucHV0X2hhbmRsZXIgPSB6ZmNwX3FkaW9faW50X3Jlc3A7CiAJaWQtPm91dHB1dF9oYW5kbGVyID0gemZjcF9xZGlvX2ludF9yZXE7CiAJaWQtPmludF9wYXJtID0gKHVuc2lnbmVkIGxvbmcpIHFkaW87Ci0JaWQtPmlucHV0X3NiYWxfYWRkcl9hcnJheSA9ICh2b2lkICoqKSAocWRpby0+cmVzcF9xLnNiYWwpOwotCWlkLT5vdXRwdXRfc2JhbF9hZGRyX2FycmF5ID0gKHZvaWQgKiopIChxZGlvLT5yZXFfcS5zYmFsKTsKLQorCWlkLT5pbnB1dF9zYmFsX2FkZHJfYXJyYXkgPSAodm9pZCAqKikgKHFkaW8tPnJlc19xKTsKKwlpZC0+b3V0cHV0X3NiYWxfYWRkcl9hcnJheSA9ICh2b2lkICoqKSAocWRpby0+cmVxX3EpOwogfQorCiAvKioKICAqIHpmY3BfcWRpb19hbGxvY2F0ZSAtIGFsbG9jYXRlIHF1ZXVlIG1lbW9yeSBhbmQgaW5pdGlhbGl6ZSBRRElPIGRhdGEKICAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX2FkYXB0ZXIKQEAgLTM0OCw4ICszMDYsOCBAQAogewogCXN0cnVjdCBxZGlvX2luaXRpYWxpemUgaW5pdF9kYXRhOwogCi0JaWYgKHpmY3BfcWRpb19idWZmZXJzX2VucXVldWUocWRpby0+cmVxX3Euc2JhbCkgfHwKLQkgICAgemZjcF9xZGlvX2J1ZmZlcnNfZW5xdWV1ZShxZGlvLT5yZXNwX3Euc2JhbCkpCisJaWYgKHpmY3BfcWRpb19idWZmZXJzX2VucXVldWUocWRpby0+cmVxX3EpIHx8CisJICAgIHpmY3BfcWRpb19idWZmZXJzX2VucXVldWUocWRpby0+cmVzX3EpKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCXpmY3BfcWRpb19zZXR1cF9pbml0X2RhdGEoJmluaXRfZGF0YSwgcWRpbyk7CkBAIC0zNjMsMzIgKzMyMSwzMCBAQAogICovCiB2b2lkIHpmY3BfcWRpb19jbG9zZShzdHJ1Y3QgemZjcF9xZGlvICpxZGlvKQogewotCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUgKnJlcV9xOwotCWludCBmaXJzdCwgY291bnQ7CisJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHFkaW8tPmFkYXB0ZXI7CisJaW50IGlkeCwgY291bnQ7CiAKLQlpZiAoIShhdG9taWNfcmVhZCgmcWRpby0+YWRhcHRlci0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX0FEQVBURVJfUURJT1VQKSkKKwlpZiAoIShhdG9taWNfcmVhZCgmYWRhcHRlci0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX0FEQVBURVJfUURJT1VQKSkKIAkJcmV0dXJuOwogCiAJLyogY2xlYXIgUURJT1VQIGZsYWcsIHRodXMgZG9fUURJTyBpcyBub3QgY2FsbGVkIGR1cmluZyBxZGlvX3NodXRkb3duICovCi0JcmVxX3EgPSAmcWRpby0+cmVxX3E7CiAJc3Bpbl9sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKLQlhdG9taWNfY2xlYXJfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX1FESU9VUCwgJnFkaW8tPmFkYXB0ZXItPnN0YXR1cyk7CisJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9RRElPVVAsICZhZGFwdGVyLT5zdGF0dXMpOwogCXNwaW5fdW5sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKIAotCXFkaW9fc2h1dGRvd24ocWRpby0+YWRhcHRlci0+Y2N3X2RldmljZSwKLQkJICAgICAgUURJT19GTEFHX0NMRUFOVVBfVVNJTkdfQ0xFQVIpOworCXdha2VfdXAoJnFkaW8tPnJlcV9xX3dxKTsKKworCXFkaW9fc2h1dGRvd24oYWRhcHRlci0+Y2N3X2RldmljZSwgUURJT19GTEFHX0NMRUFOVVBfVVNJTkdfQ0xFQVIpOwogCiAJLyogY2xlYW51cCB1c2VkIG91dGJvdW5kIHNiYWxzICovCi0JY291bnQgPSBhdG9taWNfcmVhZCgmcmVxX3EtPmNvdW50KTsKKwljb3VudCA9IGF0b21pY19yZWFkKCZxZGlvLT5yZXFfcV9mcmVlKTsKIAlpZiAoY291bnQgPCBRRElPX01BWF9CVUZGRVJTX1BFUl9RKSB7Ci0JCWZpcnN0ID0gKHJlcV9xLT5maXJzdCArIGNvdW50KSAlIFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7CisJCWlkeCA9IChxZGlvLT5yZXFfcV9pZHggKyBjb3VudCkgJSBRRElPX01BWF9CVUZGRVJTX1BFUl9ROwogCQljb3VudCA9IFFESU9fTUFYX0JVRkZFUlNfUEVSX1EgLSBjb3VudDsKLQkJemZjcF9xZGlvX3plcm9fc2JhbHMocmVxX3EtPnNiYWwsIGZpcnN0LCBjb3VudCk7CisJCXpmY3BfcWRpb196ZXJvX3NiYWxzKHFkaW8tPnJlcV9xLCBpZHgsIGNvdW50KTsKIAl9Ci0JcmVxX3EtPmZpcnN0ID0gMDsKLQlhdG9taWNfc2V0KCZyZXFfcS0+Y291bnQsIDApOwotCXFkaW8tPnJlc3BfcS5maXJzdCA9IDA7Ci0JYXRvbWljX3NldCgmcWRpby0+cmVzcF9xLmNvdW50LCAwKTsKKwlxZGlvLT5yZXFfcV9pZHggPSAwOworCWF0b21pY19zZXQoJnFkaW8tPnJlcV9xX2ZyZWUsIDApOwogfQogCiAvKioKQEAgLTQwMCwzNCArMzU2LDQ1IEBACiB7CiAJc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlOwogCXN0cnVjdCBxZGlvX2luaXRpYWxpemUgaW5pdF9kYXRhOwotCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2ID0gcWRpby0+YWRhcHRlci0+Y2N3X2RldmljZTsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gcWRpby0+YWRhcHRlcjsKKwlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiA9IGFkYXB0ZXItPmNjd19kZXZpY2U7CisJc3RydWN0IHFkaW9fc3NxZF9kZXNjIHNzcWQ7CiAJaW50IGNjOwogCi0JaWYgKGF0b21pY19yZWFkKCZxZGlvLT5hZGFwdGVyLT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQURBUFRFUl9RRElPVVApCisJaWYgKGF0b21pY19yZWFkKCZhZGFwdGVyLT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQURBUFRFUl9RRElPVVApCiAJCXJldHVybiAtRUlPOwogCisJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9TSU9TTF9JU1NVRUQsCisJCQkgICZxZGlvLT5hZGFwdGVyLT5zdGF0dXMpOworCiAJemZjcF9xZGlvX3NldHVwX2luaXRfZGF0YSgmaW5pdF9kYXRhLCBxZGlvKTsKIAogCWlmIChxZGlvX2VzdGFibGlzaCgmaW5pdF9kYXRhKSkKIAkJZ290byBmYWlsZWRfZXN0YWJsaXNoOwogCisJaWYgKHFkaW9fZ2V0X3NzcWRfZGVzYyhpbml0X2RhdGEuY2RldiwgJnNzcWQpKQorCQlnb3RvIGZhaWxlZF9xZGlvOworCisJaWYgKHNzcWQucWRpb2FjMiAmIENIU0NfQUMyX0RBVEFfRElWX0VOQUJMRUQpCisJCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX0RBVEFfRElWX0VOQUJMRUQsCisJCQkJJnFkaW8tPmFkYXB0ZXItPnN0YXR1cyk7CisKIAlpZiAocWRpb19hY3RpdmF0ZShjZGV2KSkKIAkJZ290byBmYWlsZWRfcWRpbzsKIAogCWZvciAoY2MgPSAwOyBjYyA8IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7IGNjKyspIHsKLQkJc2JhbGUgPSAmKHFkaW8tPnJlc3BfcS5zYmFsW2NjXS0+ZWxlbWVudFswXSk7CisJCXNiYWxlID0gJihxZGlvLT5yZXNfcVtjY10tPmVsZW1lbnRbMF0pOwogCQlzYmFsZS0+bGVuZ3RoID0gMDsKIAkJc2JhbGUtPmZsYWdzID0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCQlzYmFsZS0+YWRkciA9IE5VTEw7CiAJfQogCi0JaWYgKGRvX1FESU8oY2RldiwgUURJT19GTEFHX1NZTkNfSU5QVVQsIDAsIDAsCi0JCSAgICAgUURJT19NQVhfQlVGRkVSU19QRVJfUSkpCisJaWYgKGRvX1FESU8oY2RldiwgUURJT19GTEFHX1NZTkNfSU5QVVQsIDAsIDAsIFFESU9fTUFYX0JVRkZFUlNfUEVSX1EpKQogCQlnb3RvIGZhaWxlZF9xZGlvOwogCiAJLyogc2V0IGluZGV4IG9mIGZpcnN0IGF2YWxhYmxlIFNCQUxTIC8gbnVtYmVyIG9mIGF2YWlsYWJsZSBTQkFMUyAqLwotCXFkaW8tPnJlcV9xLmZpcnN0ID0gMDsKLQlhdG9taWNfc2V0KCZxZGlvLT5yZXFfcS5jb3VudCwgUURJT19NQVhfQlVGRkVSU19QRVJfUSk7CisJcWRpby0+cmVxX3FfaWR4ID0gMDsKKwlhdG9taWNfc2V0KCZxZGlvLT5yZXFfcV9mcmVlLCBRRElPX01BWF9CVUZGRVJTX1BFUl9RKTsKIAogCXJldHVybiAwOwogCkBAIC00NDEsNyArNDA4LDYgQEAKIAogdm9pZCB6ZmNwX3FkaW9fZGVzdHJveShzdHJ1Y3QgemZjcF9xZGlvICpxZGlvKQogewotCXN0cnVjdCBxZGlvX2J1ZmZlciAqKnNiYWxfcmVxLCAqKnNiYWxfcmVzcDsKIAlpbnQgcDsKIAogCWlmICghcWRpbykKQEAgLTQ1MCwxMiArNDE2LDkgQEAKIAlpZiAocWRpby0+YWRhcHRlci0+Y2N3X2RldmljZSkKIAkJcWRpb19mcmVlKHFkaW8tPmFkYXB0ZXItPmNjd19kZXZpY2UpOwogCi0Jc2JhbF9yZXEgPSBxZGlvLT5yZXFfcS5zYmFsOwotCXNiYWxfcmVzcCA9IHFkaW8tPnJlc3BfcS5zYmFsOwotCiAJZm9yIChwID0gMDsgcCA8IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7IHAgKz0gUUJVRkZfUEVSX1BBR0UpIHsKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBzYmFsX3JlcVtwXSk7Ci0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgc2JhbF9yZXNwW3BdKTsKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBxZGlvLT5yZXFfcVtwXSk7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcWRpby0+cmVzX3FbcF0pOwogCX0KIAogCWtmcmVlKHFkaW8pOwpAQCAtNDgzLDMgKzQ0NiwyNiBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIHpmY3BfcWRpb19zaW9zbCAtIFRyaWdnZXIgbG9nZ2luZyBpbiBGQ1AgY2hhbm5lbAorICogQGFkYXB0ZXI6IFRoZSB6ZmNwX2FkYXB0ZXIgd2hlcmUgdG8gdHJpZ2dlciBsb2dnaW5nCisgKgorICogQ2FsbCB0aGUgY2lvIHNpb3NsIGZ1bmN0aW9uIHRvIHRyaWdnZXIgaGFyZHdhcmUgbG9nZ2luZy4gIFRoaXMKKyAqIHdyYXBwZXIgZnVuY3Rpb24gc2V0cyBhIGZsYWcgdG8gZW5zdXJlIGhhcmR3YXJlIGxvZ2dpbmcgaXMgb25seQorICogdHJpZ2dlcmVkIG9uY2UgYmVmb3JlIGdvaW5nIHRocm91Z2ggcWRpbyBzaHV0ZG93bi4KKyAqCisgKiBUaGUgdHJpZ2dlcnMgYXJlIGFsd2F5cyBydW4gZnJvbSBxZGlvIHRhc2tsZXQgY29udGV4dCwgc28gbm8KKyAqIGFkZGl0aW9uYWwgc3luY2hyb25pemF0aW9uIGlzIG5lY2Vzc2FyeS4KKyAqLwordm9pZCB6ZmNwX3FkaW9fc2lvc2woc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgcmM7CisKKwlpZiAoYXRvbWljX3JlYWQoJmFkYXB0ZXItPnN0YXR1cykgJiBaRkNQX1NUQVRVU19BREFQVEVSX1NJT1NMX0lTU1VFRCkKKwkJcmV0dXJuOworCisJcmMgPSBjY3dfZGV2aWNlX3Npb3NsKGFkYXB0ZXItPmNjd19kZXZpY2UpOworCWlmICghcmMpCisJCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX1NJT1NMX0lTU1VFRCwKKwkJCQkmYWRhcHRlci0+c3RhdHVzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmgKaW5kZXggMTM4ZmJhNS4uMjI5N2Q4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmgKQEAgLTE5LDIyICsxOSwyMCBAQAogLyogaW5kZXggb2YgbGFzdCBTQkFMRSAod2l0aCByZXNwZWN0IHRvIERNUSBidWcgd29ya2Fyb3VuZCkgKi8KICNkZWZpbmUgWkZDUF9RRElPX0xBU1RfU0JBTEVfUEVSX1NCQUwJKFpGQ1BfUURJT19NQVhfU0JBTEVTX1BFUl9TQkFMIC0gMSkKIAotLyoqCi0gKiBzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlIC0gcWRpbyBxdWV1ZSBidWZmZXIsIHpmY3AgaW5kZXggYW5kIGZyZWUgY291bnQKLSAqIEBzYmFsOiBxZGlvIGJ1ZmZlcnMKLSAqIEBmaXJzdDogaW5kZXggb2YgbmV4dCBmcmVlIGJ1ZmZlciBpbiBxdWV1ZQotICogQGNvdW50OiBudW1iZXIgb2YgZnJlZSBidWZmZXJzIGluIHF1ZXVlCi0gKi8KLXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUgewotCXN0cnVjdCBxZGlvX2J1ZmZlciAqc2JhbFtRRElPX01BWF9CVUZGRVJTX1BFUl9RXTsKLQl1OAkJICAgZmlyc3Q7Ci0JYXRvbWljX3QgICAgICAgICAgIGNvdW50OwotfTsKKy8qIE1heCBTQkFMUyBmb3IgY2hhaW5pbmcgKi8KKyNkZWZpbmUgWkZDUF9RRElPX01BWF9TQkFMU19QRVJfUkVRCTM2CisKKy8qIG1heC4gbnVtYmVyIG9mIChkYXRhIGJ1ZmZlcikgU0JBTEVzIGluIGxhcmdlc3QgU0JBTCBjaGFpbgorICogcmVxdWVzdCBJRCArIFFUQ0IgaW4gU0JBTEUgMCArIDEgb2YgZmlyc3QgU0JBTCBpbiBjaGFpbiAgICovCisjZGVmaW5lIFpGQ1BfUURJT19NQVhfU0JBTEVTX1BFUl9SRVEgICAgIFwKKwkoWkZDUF9RRElPX01BWF9TQkFMU19QRVJfUkVRICogWkZDUF9RRElPX01BWF9TQkFMRVNfUEVSX1NCQUwgLSAyKQogCiAvKioKICAqIHN0cnVjdCB6ZmNwX3FkaW8gLSBiYXNpYyBxZGlvIGRhdGEgc3RydWN0dXJlCi0gKiBAcmVzcF9xOiByZXNwb25zZSBxdWV1ZQorICogQHJlc19xOiByZXNwb25zZSBxdWV1ZQogICogQHJlcV9xOiByZXF1ZXN0IHF1ZXVlCisgKiBAcmVxX3FfaWR4OiBpbmRleCBvZiBuZXh0IGZyZWUgYnVmZmVyCisgKiBAcmVxX3FfZnJlZTogbnVtYmVyIG9mIGZyZWUgYnVmZmVycyBpbiBxdWV1ZQogICogQHN0YXRfbG9jazogbG9jayB0byBwcm90ZWN0IHJlcV9xX3V0aWwgYW5kIHJlcV9xX3RpbWUKICAqIEByZXFfcV9sb2NrOiBsb2NrIHRvIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gcmVxdWVzdCBxdWV1ZQogICogQHJlcV9xX3RpbWU6IHRpbWUgb2YgbGFzdCBmaWxsIGxldmVsIGNoYW5nZQpAQCAtNDQsOCArNDIsMTAgQEAKICAqIEBhZGFwdGVyOiBhZGFwdGVyIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGlzIHFkaW8gc3RydWN0dXJlCiAgKi8KIHN0cnVjdCB6ZmNwX3FkaW8gewotCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUJcmVzcF9xOwotCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUJcmVxX3E7CisJc3RydWN0IHFkaW9fYnVmZmVyCSpyZXNfcVtRRElPX01BWF9CVUZGRVJTX1BFUl9RXTsKKwlzdHJ1Y3QgcWRpb19idWZmZXIJKnJlcV9xW1FESU9fTUFYX0JVRkZFUlNfUEVSX1FdOworCXU4CQkJcmVxX3FfaWR4OworCWF0b21pY190CQlyZXFfcV9mcmVlOwogCXNwaW5sb2NrX3QJCXN0YXRfbG9jazsKIAlzcGlubG9ja190CQlyZXFfcV9sb2NrOwogCXVuc2lnbmVkIGxvbmcgbG9uZwlyZXFfcV90aW1lOwpAQCAtNjUsNyArNjUsNiBAQAogICogQHNiYWxlX2N1cnI6IGN1cnJlbnQgc2JhbGUgYXQgY3JlYXRpb24gb2YgdGhpcyByZXF1ZXN0CiAgKiBAc2JhbF9yZXNwb25zZTogc2JhbCB1c2VkIGluIGludGVycnVwdAogICogQHFkaW9fb3V0Yl91c2FnZTogdXNhZ2Ugb2Ygb3V0Ym91bmQgcXVldWUKLSAqIEBxZGlvX2luYl91c2FnZTogdXNhZ2Ugb2YgaW5ib3VuZCBxdWV1ZQogICovCiBzdHJ1Y3QgemZjcF9xZGlvX3JlcSB7CiAJdTMyCXNidHlwZTsKQEAgLTc2LDIyICs3NSw5IEBACiAJdTgJc2JhbGVfY3VycjsKIAl1OAlzYmFsX3Jlc3BvbnNlOwogCXUxNglxZGlvX291dGJfdXNhZ2U7Ci0JdTE2CXFkaW9faW5iX3VzYWdlOwogfTsKIAogLyoqCi0gKiB6ZmNwX3FkaW9fc2JhbGUgLSByZXR1cm4gcG9pbnRlciB0byBzYmFsZSBpbiBxZGlvIHF1ZXVlCi0gKiBAcTogcXVldWUgd2hlcmUgdG8gZmluZCBzYmFsCi0gKiBAc2JhbF9pZHg6IHNiYWwgaW5kZXggaW4gcXVldWUKLSAqIEBzYmFsZV9pZHg6IHNiYWxlIGluZGV4IGluIHNiYWwKLSAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqCi16ZmNwX3FkaW9fc2JhbGUoc3RydWN0IHpmY3BfcWRpb19xdWV1ZSAqcSwgaW50IHNiYWxfaWR4LCBpbnQgc2JhbGVfaWR4KQotewotCXJldHVybiAmcS0+c2JhbFtzYmFsX2lkeF0tPmVsZW1lbnRbc2JhbGVfaWR4XTsKLX0KLQotLyoqCiAgKiB6ZmNwX3FkaW9fc2JhbGVfcmVxIC0gcmV0dXJuIHBvaW50ZXIgdG8gc2JhbGUgb24gcmVxX3EgZm9yIGEgcmVxdWVzdAogICogQHFkaW86IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfcWRpbwogICogQHFfcmVjOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX3FkaW9fcmVxCkBAIC0xMDAsNyArODYsNyBAQAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqCiB6ZmNwX3FkaW9fc2JhbGVfcmVxKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sIHN0cnVjdCB6ZmNwX3FkaW9fcmVxICpxX3JlcSkKIHsKLQlyZXR1cm4gemZjcF9xZGlvX3NiYWxlKCZxZGlvLT5yZXFfcSwgcV9yZXEtPnNiYWxfbGFzdCwgMCk7CisJcmV0dXJuICZxZGlvLT5yZXFfcVtxX3JlcS0+c2JhbF9sYXN0XS0+ZWxlbWVudFswXTsKIH0KIAogLyoqCkBAIC0xMTIsOCArOTgsNyBAQAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqCiB6ZmNwX3FkaW9fc2JhbGVfY3VycihzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBzdHJ1Y3QgemZjcF9xZGlvX3JlcSAqcV9yZXEpCiB7Ci0JcmV0dXJuIHpmY3BfcWRpb19zYmFsZSgmcWRpby0+cmVxX3EsIHFfcmVxLT5zYmFsX2xhc3QsCi0JCQkgICAgICAgcV9yZXEtPnNiYWxlX2N1cnIpOworCXJldHVybiAmcWRpby0+cmVxX3FbcV9yZXEtPnNiYWxfbGFzdF0tPmVsZW1lbnRbcV9yZXEtPnNiYWxlX2N1cnJdOwogfQogCiAvKioKQEAgLTEzNCwyMSArMTE5LDI1IEBACiAJCQl1bnNpZ25lZCBsb25nIHJlcV9pZCwgdTMyIHNidHlwZSwgdm9pZCAqZGF0YSwgdTMyIGxlbikKIHsKIAlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGU7CisJaW50IGNvdW50ID0gbWluKGF0b21pY19yZWFkKCZxZGlvLT5yZXFfcV9mcmVlKSwKKwkJCVpGQ1BfUURJT19NQVhfU0JBTFNfUEVSX1JFUSk7CiAKLQlxX3JlcS0+c2JhbF9maXJzdCA9IHFfcmVxLT5zYmFsX2xhc3QgPSBxZGlvLT5yZXFfcS5maXJzdDsKKwlxX3JlcS0+c2JhbF9maXJzdCA9IHFfcmVxLT5zYmFsX2xhc3QgPSBxZGlvLT5yZXFfcV9pZHg7CiAJcV9yZXEtPnNiYWxfbnVtYmVyID0gMTsKIAlxX3JlcS0+c2J0eXBlID0gc2J0eXBlOworCXFfcmVxLT5zYmFsZV9jdXJyID0gMTsKKwlxX3JlcS0+c2JhbF9saW1pdCA9IChxX3JlcS0+c2JhbF9maXJzdCArIGNvdW50IC0gMSkKKwkJCQkJJSBRRElPX01BWF9CVUZGRVJTX1BFUl9ROwogCiAJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sIHFfcmVxKTsKIAlzYmFsZS0+YWRkciA9ICh2b2lkICopIHJlcV9pZDsKLQlzYmFsZS0+ZmxhZ3MgfD0gU0JBTF9GTEFHUzBfQ09NTUFORDsKLQlzYmFsZS0+ZmxhZ3MgfD0gc2J0eXBlOworCXNiYWxlLT5mbGFncyA9IFNCQUxfRkxBR1MwX0NPTU1BTkQgfCBzYnR5cGU7CiAKLQlxX3JlcS0+c2JhbGVfY3VyciA9IDE7CisJaWYgKHVubGlrZWx5KCFkYXRhKSkKKwkJcmV0dXJuOwogCXNiYWxlKys7CiAJc2JhbGUtPmFkZHIgPSBkYXRhOwotCWlmIChsaWtlbHkoZGF0YSkpCi0JCXNiYWxlLT5sZW5ndGggPSBsZW47CisJc2JhbGUtPmxlbmd0aCA9IGxlbjsKIH0KIAogLyoqCkBAIC0yMTAsNCArMTk5LDM2IEBACiAJcV9yZXEtPnNiYWxlX2N1cnIgPSBaRkNQX1FESU9fTEFTVF9TQkFMRV9QRVJfU0JBTDsKIH0KIAorLyoqCisgKiB6ZmNwX3FkaW9fc2JhbF9saW1pdCAtIHNldCB0aGUgc2JhbCBsaW1pdCBmb3IgYSByZXF1ZXN0IGluIHFfcmVxCisgKiBAcWRpbzogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9xZGlvCisgKiBAcV9yZXE6IFRoZSBjdXJyZW50IHpmY3BfcWRpb19yZXEKKyAqIEBtYXhfc2JhbHM6IG1heGltdW0gbnVtYmVyIG9mIFNCQUxzIGFsbG93ZWQKKyAqLworc3RhdGljIGlubGluZQordm9pZCB6ZmNwX3FkaW9fc2JhbF9saW1pdChzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLAorCQkJICBzdHJ1Y3QgemZjcF9xZGlvX3JlcSAqcV9yZXEsIGludCBtYXhfc2JhbHMpCit7CisJaW50IGNvdW50ID0gbWluKGF0b21pY19yZWFkKCZxZGlvLT5yZXFfcV9mcmVlKSwgbWF4X3NiYWxzKTsKKworCXFfcmVxLT5zYmFsX2xpbWl0ID0gKHFfcmVxLT5zYmFsX2ZpcnN0ICsgY291bnQgLSAxKSAlCisJCQkJUURJT19NQVhfQlVGRkVSU19QRVJfUTsKK30KKworLyoqCisgKiB6ZmNwX3FkaW9fc2V0X2RhdGFfZGl2IC0gc2V0IGRhdGEgZGl2aXNpb24gY291bnQKKyAqIEBxZGlvOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX3FkaW8KKyAqIEBxX3JlcTogVGhlIGN1cnJlbnQgemZjcF9xZGlvX3JlcQorICogQGNvdW50OiBUaGUgZGF0YSBkaXZpc2lvbiBjb3VudAorICovCitzdGF0aWMgaW5saW5lCit2b2lkIHpmY3BfcWRpb19zZXRfZGF0YV9kaXYoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywKKwkJCSAgICBzdHJ1Y3QgemZjcF9xZGlvX3JlcSAqcV9yZXEsIHUzMiBjb3VudCkKK3sKKwlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGU7CisKKwlzYmFsZSA9ICZxZGlvLT5yZXFfcVtxX3JlcS0+c2JhbF9maXJzdF0tPmVsZW1lbnRbMF07CisJc2JhbGUtPmxlbmd0aCA9IGNvdW50OworfQorCiAjZW5kaWYgLyogWkZDUF9RRElPX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc2NzaS5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKaW5kZXggYmU1ZDJjNi4uY2IwMDBjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxzY3NpL2ZjL2ZjX2ZjcC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9laC5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlICJ6ZmNwX2V4dC5oIgogI2luY2x1ZGUgInpmY3BfZGJmLmgiCkBAIC0yMiw2ICsyMywxMyBAQAogbW9kdWxlX3BhcmFtX25hbWVkKHF1ZXVlX2RlcHRoLCBkZWZhdWx0X2RlcHRoLCB1aW50LCAwNjAwKTsKIE1PRFVMRV9QQVJNX0RFU0MocXVldWVfZGVwdGgsICJEZWZhdWx0IHF1ZXVlIGRlcHRoIGZvciBuZXcgU0NTSSBkZXZpY2VzIik7CiAKK3N0YXRpYyBib29sIGVuYWJsZV9kaWY7CisKKyNpZmRlZiBDT05GSUdfWkZDUF9ESUYKK21vZHVsZV9wYXJhbV9uYW1lZChkaWYsIGVuYWJsZV9kaWYsIGJvb2wsIDA2MDApOworTU9EVUxFX1BBUk1fREVTQyhkaWYsICJFbmFibGUgRElGL0RJWCBkYXRhIGludGVncml0eSBzdXBwb3J0Iik7CisjZW5kaWYKKwogc3RhdGljIGludCB6ZmNwX3Njc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGRlcHRoLAogCQkJCQlpbnQgcmVhc29uKQogewpAQCAtNTA2LDggKzUxNCwxMCBAQAogICogQHJwb3J0OiBUaGUgRkMgcnBvcnQgd2hlcmUgdG8gdGVtaW5hdGUgSS9PCiAgKgogICogQWJvcnQgYWxsIHBlbmRpbmcgU0NTSSBjb21tYW5kcyBmb3IgYSBwb3J0IGJ5IGNsb3NpbmcgdGhlCi0gKiBwb3J0LiBVc2luZyBhIHJlb3BlbiBhdm9pZGluZyBhIGNvbmZsaWN0IHdpdGggYSBzaHV0ZG93bgotICogb3ZlcndyaXRpbmcgYSByZW9wZW4uCisgKiBwb3J0LiBVc2luZyBhIHJlb3BlbiBhdm9pZHMgYSBjb25mbGljdCB3aXRoIGEgc2h1dGRvd24KKyAqIG92ZXJ3cml0aW5nIGEgcmVvcGVuLiBUaGUgImZvcmNlZCIgZW5zdXJlcyB0aGF0IGEgZGlzYXBwZWFyZWQgcG9ydAorICogaXMgbm90IG9wZW5lZCBhZ2FpbiBhcyB2YWxpZCBkdWUgdG8gdGhlIGNhY2hlZCBwbG9naSBkYXRhIGluCisgKiBub24tTlBJViBtb2RlLgogICovCiBzdGF0aWMgdm9pZCB6ZmNwX3Njc2lfdGVybWluYXRlX3Jwb3J0X2lvKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQpCiB7CkBAIC01MTksMTEgKzUyOSwyNSBAQAogCXBvcnQgPSB6ZmNwX2dldF9wb3J0X2J5X3d3cG4oYWRhcHRlciwgcnBvcnQtPnBvcnRfbmFtZSk7CiAKIAlpZiAocG9ydCkgewotCQl6ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LCAwLCAic2N0cnBpMSIsIE5VTEwpOworCQl6ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4ocG9ydCwgMCwgInNjdHJwaTEiLCBOVUxMKTsKIAkJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHpmY3Bfc2NzaV9xdWV1ZV91bml0X3JlZ2lzdGVyKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKKworCXJlYWRfbG9ja19pcnEoJnBvcnQtPnVuaXRfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHVuaXQsICZwb3J0LT51bml0X2xpc3QsIGxpc3QpIHsKKwkJZ2V0X2RldmljZSgmdW5pdC0+ZGV2KTsKKwkJaWYgKHNjc2lfcXVldWVfd29yayhwb3J0LT5hZGFwdGVyLT5zY3NpX2hvc3QsCisJCQkJICAgICZ1bml0LT5zY3NpX3dvcmspIDw9IDApCisJCQlwdXRfZGV2aWNlKCZ1bml0LT5kZXYpOworCX0KKwlyZWFkX3VubG9ja19pcnEoJnBvcnQtPnVuaXRfbGlzdF9sb2NrKTsKK30KKwogc3RhdGljIHZvaWQgemZjcF9zY3NpX3Jwb3J0X3JlZ2lzdGVyKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGZjX3Jwb3J0X2lkZW50aWZpZXJzIGlkczsKQEAgLTU0OCw2ICs1NzIsOSBAQAogCXJwb3J0LT5tYXhmcmFtZV9zaXplID0gcG9ydC0+bWF4ZnJhbWVfc2l6ZTsKIAlycG9ydC0+c3VwcG9ydGVkX2NsYXNzZXMgPSBwb3J0LT5zdXBwb3J0ZWRfY2xhc3NlczsKIAlwb3J0LT5ycG9ydCA9IHJwb3J0OworCXBvcnQtPnN0YXJnZXRfaWQgPSBycG9ydC0+c2NzaV90YXJnZXRfaWQ7CisKKwl6ZmNwX3Njc2lfcXVldWVfdW5pdF9yZWdpc3Rlcihwb3J0KTsKIH0KIAogc3RhdGljIHZvaWQgemZjcF9zY3NpX3Jwb3J0X2Jsb2NrKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCkBAIC02MTAsMjQgKzYzNyw3NCBAQAogCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiB9CiAKLQotdm9pZCB6ZmNwX3Njc2lfc2NhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCisvKioKKyAqIHpmY3Bfc2NzaV9zY2FuIC0gUmVnaXN0ZXIgTFVOIHdpdGggU0NTSSBtaWRsYXllcgorICogQHVuaXQ6IFRoZSBMVU4vdW5pdCB0byByZWdpc3RlcgorICovCit2b2lkIHpmY3Bfc2NzaV9zY2FuKHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQpCiB7Ci0Jc3RydWN0IHpmY3BfdW5pdCAqdW5pdCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgemZjcF91bml0LAotCQkJCQkgICAgICBzY3NpX3dvcmspOwotCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQ7Ci0KLQlmbHVzaF93b3JrKCZ1bml0LT5wb3J0LT5ycG9ydF93b3JrKTsKLQlycG9ydCA9IHVuaXQtPnBvcnQtPnJwb3J0OworCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPSB1bml0LT5wb3J0LT5ycG9ydDsKIAogCWlmIChycG9ydCAmJiBycG9ydC0+cG9ydF9zdGF0ZSA9PSBGQ19QT1JUU1RBVEVfT05MSU5FKQogCQlzY3NpX3NjYW5fdGFyZ2V0KCZycG9ydC0+ZGV2LCAwLCBycG9ydC0+c2NzaV90YXJnZXRfaWQsCiAJCQkJIHNjc2lsdW5fdG9faW50KChzdHJ1Y3Qgc2NzaV9sdW4gKikKIAkJCQkJCSZ1bml0LT5mY3BfbHVuKSwgMCk7Cit9CiAKK3ZvaWQgemZjcF9zY3NpX3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHpmY3BfdW5pdCAqdW5pdCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgemZjcF91bml0LAorCQkJCQkgICAgICBzY3NpX3dvcmspOworCisJemZjcF9zY3NpX3NjYW4odW5pdCk7CiAJcHV0X2RldmljZSgmdW5pdC0+ZGV2KTsKIH0KIAorLyoqCisgKiB6ZmNwX3Njc2lfc2V0X3Byb3QgLSBDb25maWd1cmUgRElGL0RJWCBzdXBwb3J0IGluIHNjc2lfaG9zdAorICogQGFkYXB0ZXI6IFRoZSBhZGFwdGVyIHdoZXJlIHRvIGNvbmZpZ3VyZSBESUYvRElYIGZvciB0aGUgU0NTSSBob3N0CisgKi8KK3ZvaWQgemZjcF9zY3NpX3NldF9wcm90KHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdW5zaWduZWQgaW50IG1hc2sgPSAwOworCXVuc2lnbmVkIGludCBkYXRhX2RpdjsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGFkYXB0ZXItPnNjc2lfaG9zdDsKKworCWRhdGFfZGl2ID0gYXRvbWljX3JlYWQoJmFkYXB0ZXItPnN0YXR1cykgJgorCQkgICBaRkNQX1NUQVRVU19BREFQVEVSX0RBVEFfRElWX0VOQUJMRUQ7CisKKwlpZiAoZW5hYmxlX2RpZiAmJgorCSAgICBhZGFwdGVyLT5hZGFwdGVyX2ZlYXR1cmVzICYgRlNGX0ZFQVRVUkVfRElGX1BST1RfVFlQRTEpCisJCW1hc2sgfD0gU0hPU1RfRElGX1RZUEUxX1BST1RFQ1RJT047CisKKwlpZiAoZW5hYmxlX2RpZiAmJiBkYXRhX2RpdiAmJgorCSAgICBhZGFwdGVyLT5hZGFwdGVyX2ZlYXR1cmVzICYgRlNGX0ZFQVRVUkVfRElYX1BST1RfVENQSVApIHsKKwkJbWFzayB8PSBTSE9TVF9ESVhfVFlQRTFfUFJPVEVDVElPTjsKKwkJc2NzaV9ob3N0X3NldF9ndWFyZChzaG9zdCwgU0hPU1RfRElYX0dVQVJEX0lQKTsKKwkJc2hvc3QtPnNnX3RhYmxlc2l6ZSA9IFpGQ1BfUURJT19NQVhfU0JBTEVTX1BFUl9SRVEgLyAyOworCQlzaG9zdC0+bWF4X3NlY3RvcnMgPSBaRkNQX1FESU9fTUFYX1NCQUxFU19QRVJfUkVRICogOCAvIDI7CisJfQorCisJc2NzaV9ob3N0X3NldF9wcm90KHNob3N0LCBtYXNrKTsKK30KKworLyoqCisgKiB6ZmNwX3Njc2lfZGlmX3NlbnNlX2Vycm9yIC0gUmVwb3J0IERJRi9ESVggZXJyb3IgYXMgZHJpdmVyIHNlbnNlIGVycm9yCisgKiBAc2NtZDogVGhlIFNDU0kgY29tbWFuZCB0byByZXBvcnQgdGhlIGVycm9yIGZvcgorICogQGFzY3E6IFRoZSBBU0NRIHRvIHB1dCBpbiB0aGUgc2Vuc2UgYnVmZmVyCisgKgorICogU2VlIHRoZSBlcnJvciBoYW5kbGluZyBpbiBzZF9kb25lIGZvciB0aGUgc2Vuc2UgY29kZXMgdXNlZCBoZXJlLgorICogU2V0IERJRF9TT0ZUX0VSUk9SIHRvIHJldHJ5IHRoZSByZXF1ZXN0LCBpZiBwb3NzaWJsZS4KKyAqLwordm9pZCB6ZmNwX3Njc2lfZGlmX3NlbnNlX2Vycm9yKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsIGludCBhc2NxKQoreworCXNjc2lfYnVpbGRfc2Vuc2VfYnVmZmVyKDEsIHNjbWQtPnNlbnNlX2J1ZmZlciwKKwkJCQlJTExFR0FMX1JFUVVFU1QsIDB4MTAsIGFzY3EpOworCXNldF9kcml2ZXJfYnl0ZShzY21kLCBEUklWRVJfU0VOU0UpOworCXNjbWQtPnJlc3VsdCB8PSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT047CisJc2V0X2hvc3RfYnl0ZShzY21kLCBESURfU09GVF9FUlJPUik7Cit9CisKIHN0cnVjdCBmY19mdW5jdGlvbl90ZW1wbGF0ZSB6ZmNwX3RyYW5zcG9ydF9mdW5jdGlvbnMgPSB7CiAJLnNob3dfc3RhcmdldF9wb3J0X2lkID0gMSwKIAkuc2hvd19zdGFyZ2V0X3BvcnRfbmFtZSA9IDEsCkBAIC02NzcsMTEgKzc1NCwxMSBAQAogCQkuZWhfaG9zdF9yZXNldF9oYW5kbGVyCSA9IHpmY3Bfc2NzaV9laF9ob3N0X3Jlc2V0X2hhbmRsZXIsCiAJCS5jYW5fcXVldWUJCSA9IDQwOTYsCiAJCS50aGlzX2lkCQkgPSAtMSwKLQkJLnNnX3RhYmxlc2l6ZQkJID0gWkZDUF9GU0ZfTUFYX1NCQUxFU19QRVJfUkVRLAorCQkuc2dfdGFibGVzaXplCQkgPSBaRkNQX1FESU9fTUFYX1NCQUxFU19QRVJfUkVRLAogCQkuY21kX3Blcl9sdW4JCSA9IDEsCiAJCS51c2VfY2x1c3RlcmluZwkJID0gMSwKIAkJLnNkZXZfYXR0cnMJCSA9IHpmY3Bfc3lzZnNfc2Rldl9hdHRycywKLQkJLm1heF9zZWN0b3JzCQkgPSAoWkZDUF9GU0ZfTUFYX1NCQUxFU19QRVJfUkVRICogOCksCisJCS5tYXhfc2VjdG9ycwkJID0gKFpGQ1BfUURJT19NQVhfU0JBTEVTX1BFUl9SRVEgKiA4KSwKIAkJLmRtYV9ib3VuZGFyeQkJID0gWkZDUF9RRElPX1NCQUxFX0xFTiAtIDEsCiAJCS5zaG9zdF9hdHRycwkJID0gemZjcF9zeXNmc19zaG9zdF9hdHRycywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jCmluZGV4IGY1ZjYwNjkuLmI0NTYxYzg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jCkBAIC0yNzUsNyArMjc1LDcgQEAKIAogCXpmY3BfZXJwX3VuaXRfcmVvcGVuKHVuaXQsIDAsICJzeXVhc18xIiwgTlVMTCk7CiAJemZjcF9lcnBfd2FpdCh1bml0LT5wb3J0LT5hZGFwdGVyKTsKLQlmbHVzaF93b3JrKCZ1bml0LT5zY3NpX3dvcmspOworCXpmY3Bfc2NzaV9zY2FuKHVuaXQpOwogb3V0OgogCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAJcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IChzc2l6ZV90KSBjb3VudDsKQEAgLTI5MCw2ICsyOTAsNyBAQAogCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQ7CiAJdTY0IGZjcF9sdW47CiAJaW50IHJldHZhbCA9IC1FSU5WQUw7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OwogCiAJaWYgKCEocG9ydCAmJiBnZXRfZGV2aWNlKCZwb3J0LT5kZXYpKSkKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTMwMyw4ICszMDQsMTMgQEAKIAllbHNlCiAJCXJldHZhbCA9IDA7CiAKLQkvKiB3YWl0IGZvciBwb3NzaWJsZSB0aW1lb3V0IGR1cmluZyBTQ1NJIHByb2JlICovCi0JZmx1c2hfd29yaygmdW5pdC0+c2NzaV93b3JrKTsKKwlzZGV2ID0gc2NzaV9kZXZpY2VfbG9va3VwKHBvcnQtPmFkYXB0ZXItPnNjc2lfaG9zdCwgMCwKKwkJCQkgIHBvcnQtPnN0YXJnZXRfaWQsCisJCQkJICBzY3NpbHVuX3RvX2ludCgoc3RydWN0IHNjc2lfbHVuICopJmZjcF9sdW4pKTsKKwlpZiAoc2RldikgeworCQlzY3NpX3JlbW92ZV9kZXZpY2Uoc2Rldik7CisJCXNjc2lfZGV2aWNlX3B1dChzZGV2KTsKKwl9CiAKIAl3cml0ZV9sb2NrX2lycSgmcG9ydC0+dW5pdF9saXN0X2xvY2spOwogCWxpc3RfZGVsKCZ1bml0LT5saXN0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2J1cy9jaGFyL2JiY19pMmMuYyBiL2RyaXZlcnMvc2J1cy9jaGFyL2JiY19pMmMuYwppbmRleCA4YmZkZDYzLi4zZTg5YzMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NidXMvY2hhci9iYmNfaTJjLmMKKysrIGIvZHJpdmVycy9zYnVzL2NoYXIvYmJjX2kyYy5jCkBAIC0zMTcsNyArMzE3LDcgQEAKIAogCWJwLT53YWl0aW5nID0gMDsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZicC0+d3EpOwotCWlmIChyZXF1ZXN0X2lycShvcC0+aXJxc1swXSwgYmJjX2kyY19pbnRlcnJ1cHQsCisJaWYgKHJlcXVlc3RfaXJxKG9wLT5hcmNoZGF0YS5pcnFzWzBdLCBiYmNfaTJjX2ludGVycnVwdCwKIAkJCUlSUUZfU0hBUkVELCAiYmJjX2kyYyIsIGJwKSkKIAkJZ290byBmYWlsOwogCkBAIC0zNzMsNyArMzczLDcgQEAKIAogCWVyciA9IGJiY19lbnZjdHJsX2luaXQoYnApOwogCWlmIChlcnIpIHsKLQkJZnJlZV9pcnEob3AtPmlycXNbMF0sIGJwKTsKKwkJZnJlZV9pcnEob3AtPmFyY2hkYXRhLmlycXNbMF0sIGJwKTsKIAkJaWYgKGJwLT5pMmNfYnVzc2VsX3JlZykKIAkJCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVswXSwgYnAtPmkyY19idXNzZWxfcmVnLCAxKTsKIAkJaWYgKGJwLT5pMmNfY29udHJvbF9yZWdzKQpAQCAtMzkyLDcgKzM5Miw3IEBACiAKIAliYmNfZW52Y3RybF9jbGVhbnVwKGJwKTsKIAotCWZyZWVfaXJxKG9wLT5pcnFzWzBdLCBicCk7CisJZnJlZV9pcnEob3AtPmFyY2hkYXRhLmlycXNbMF0sIGJwKTsKIAogCWlmIChicC0+aTJjX2J1c3NlbF9yZWcpCiAJCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVswXSwgYnAtPmkyY19idXNzZWxfcmVnLCAxKTsKQEAgLTQyNSwxMiArNDI1LDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGJiY19pMmNfaW5pdCh2b2lkKQogewotCXJldHVybiBvZl9yZWdpc3Rlcl9kcml2ZXIoJmJiY19pMmNfZHJpdmVyLCAmb2ZfYnVzX3R5cGUpOworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmJiY19pMmNfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGJiY19pMmNfZXhpdCh2b2lkKQogewotCW9mX3VucmVnaXN0ZXJfZHJpdmVyKCZiYmNfaTJjX2RyaXZlcik7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmJiY19pMmNfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoYmJjX2kyY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2J1cy9jaGFyL2Rpc3BsYXk3c2VnLmMgYi9kcml2ZXJzL3NidXMvY2hhci9kaXNwbGF5N3NlZy5jCmluZGV4IDdiYWYxYjYuLjQ3ZGI5NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2J1cy9jaGFyL2Rpc3BsYXk3c2VnLmMKKysrIGIvZHJpdmVycy9zYnVzL2NoYXIvZGlzcGxheTdzZWcuYwpAQCAtMTMsNyArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JCS8qIHJlcXVlc3RfcmVnaW9uICovCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KQEAgLTI2LDYgKzI2LDcgQEAKICNkZWZpbmUgRFJJVkVSX05BTUUJImQ3cyIKICNkZWZpbmUgUEZYCQlEUklWRVJfTkFNRSAiOiAiCiAKK3N0YXRpYyBERUZJTkVfTVVURVgoZDdzX211dGV4KTsKIHN0YXRpYyBpbnQgc29sX2NvbXBhdCA9IDA7CQkvKiBTb2xhcmlzIGNvbXBhdGliaWxpdHkgbW9kZQkqLwogCiAvKiBTb2xhcmlzIGNvbXBhdGliaWxpdHkgZmxhZyAtCkBAIC03NCw3ICs3NSw2IEBACiB7CiAJaWYgKEQ3U19NSU5PUiAhPSBpbWlub3IoaW5vZGUpKQogCQlyZXR1cm4gLUVOT0RFVjsKLQljeWNsZV9rZXJuZWxfbG9jaygpOwogCWF0b21pY19pbmMoJmQ3c191c2Vycyk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMTAsNyArMTEwLDcgQEAKIAlpZiAoRDdTX01JTk9SICE9IGltaW5vcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlsb2NrX2tlcm5lbCgpOworCW11dGV4X2xvY2soJmQ3c19tdXRleCk7CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIEQ3U0lPQ1dSOgogCQkvKiBhc3NpZ24gZGV2aWNlIHJlZ2lzdGVyIHZhbHVlcyB3ZSBtYXNrLW91dCBEN1NfRkxJUApAQCAtMTUxLDcgKzE1MSw3IEBACiAJCXdyaXRlYihyZWdzLCBwLT5yZWdzKTsKIAkJYnJlYWs7CiAJfTsKLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZkN3NfbXV0ZXgpOwogCiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMjc3LDEyICsyNzcsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgZDdzX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gb2ZfcmVnaXN0ZXJfZHJpdmVyKCZkN3NfZHJpdmVyLCAmb2ZfYnVzX3R5cGUpOworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmQ3c19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZDdzX2V4aXQodm9pZCkKIHsKLQlvZl91bnJlZ2lzdGVyX2RyaXZlcigmZDdzX2RyaXZlcik7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmQ3c19kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChkN3NfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NidXMvY2hhci9lbnZjdHJsLmMgYi9kcml2ZXJzL3NidXMvY2hhci9lbnZjdHJsLmMKaW5kZXggYzgxNjZlYy4uM2MyN2Y0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvZW52Y3RybC5jCisrKyBiL2RyaXZlcnMvc2J1cy9jaGFyL2VudmN0cmwuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgogCkBAIC02OTksNyArNjk4LDYgQEAKIHN0YXRpYyBpbnQKIGVudmN0cmxfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQljeWNsZV9rZXJuZWxfbG9jaygpOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMTQyLDEyICsxMTQwLDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGVudmN0cmxfaW5pdCh2b2lkKQogewotCXJldHVybiBvZl9yZWdpc3Rlcl9kcml2ZXIoJmVudmN0cmxfZHJpdmVyLCAmb2ZfYnVzX3R5cGUpOworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmVudmN0cmxfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGVudmN0cmxfZXhpdCh2b2lkKQogewotCW9mX3VucmVnaXN0ZXJfZHJpdmVyKCZlbnZjdHJsX2RyaXZlcik7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmVudmN0cmxfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoZW52Y3RybF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2J1cy9jaGFyL2ZsYXNoLmMgYi9kcml2ZXJzL3NidXMvY2hhci9mbGFzaC5jCmluZGV4IDM2OGQ2NjIuLjhiYjMxYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2J1cy9jaGFyL2ZsYXNoLmMKKysrIGIvZHJpdmVycy9zYnVzL2NoYXIvZmxhc2guYwpAQCAtMTAsNyArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VwYS5oPgogCitzdGF0aWMgREVGSU5FX01VVEVYKGZsYXNoX211dGV4KTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZmxhc2hfbG9jayk7CiBzdGF0aWMgc3RydWN0IHsKIAl1bnNpZ25lZCBsb25nIHJlYWRfYmFzZTsJLyogUGh5c2ljYWwgcmVhZCBhZGRyZXNzICovCkBAIC04MCw3ICs4MSw3IEBACiBzdGF0aWMgbG9uZyBsb25nCiBmbGFzaF9sbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvbmcgbG9uZyBvZmZzZXQsIGludCBvcmlnaW4pCiB7Ci0JbG9ja19rZXJuZWwoKTsKKwltdXRleF9sb2NrKCZmbGFzaF9tdXRleCk7CiAJc3dpdGNoIChvcmlnaW4pIHsKIAkJY2FzZSAwOgogCQkJZmlsZS0+Zl9wb3MgPSBvZmZzZXQ7CkBAIC05NCwxMCArOTUsMTAgQEAKIAkJCWZpbGUtPmZfcG9zID0gZmxhc2gucmVhZF9zaXplOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQl1bmxvY2tfa2VybmVsKCk7CisJCQltdXRleF91bmxvY2soJmZsYXNoX211dGV4KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZmbGFzaF9tdXRleCk7CiAJcmV0dXJuIGZpbGUtPmZfcG9zOwogfQogCkBAIC0xMjUsMTMgKzEyNiwxMyBAQAogc3RhdGljIGludAogZmxhc2hfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlsb2NrX2tlcm5lbCgpOworCW11dGV4X2xvY2soJmZsYXNoX211dGV4KTsKIAlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAodm9pZCAqKSZmbGFzaC5idXN5KSAhPSAwKSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKKwkJbXV0ZXhfdW5sb2NrKCZmbGFzaF9tdXRleCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JdW5sb2NrX2tlcm5lbCgpOworCW11dGV4X3VubG9jaygmZmxhc2hfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0yMTgsMTIgKzIxOSwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBmbGFzaF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIG9mX3JlZ2lzdGVyX2RyaXZlcigmZmxhc2hfZHJpdmVyLCAmb2ZfYnVzX3R5cGUpOworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmZsYXNoX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBmbGFzaF9jbGVhbnVwKHZvaWQpCiB7Ci0Jb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoJmZsYXNoX2RyaXZlcik7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmZsYXNoX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGZsYXNoX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zYnVzL2NoYXIvb3BlbnByb20uYyBiL2RyaXZlcnMvc2J1cy9jaGFyL29wZW5wcm9tLmMKaW5kZXggZDUzZTYyYS4uOGQ2ZTUwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvb3BlbnByb20uYworKysgYi9kcml2ZXJzL3NidXMvY2hhci9vcGVucHJvbS5jCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC02MSw2ICs2MSw3IEBACiB9IERBVEE7CiAKIC8qIElEIG9mIHRoZSBQUk9NIG5vZGUgY29udGFpbmluZyBhbGwgb2YgdGhlIEVFUFJPTSBvcHRpb25zLiAqLworc3RhdGljIERFRklORV9NVVRFWChvcGVucHJvbV9tdXRleCk7CiBzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpvcHRpb25zX25vZGU7CiAKIC8qCkBAIC0zMTYsNyArMzE3LDcgQEAKIAlpZiAoYnVmc2l6ZSA8IDApCiAJCXJldHVybiBidWZzaXplOwogCi0JbG9ja19rZXJuZWwoKTsKKwltdXRleF9sb2NrKCZvcGVucHJvbV9tdXRleCk7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgT1BST01HRVRPUFQ6CkBAIC0zNjcsNyArMzY4LDcgQEAKIAl9CiAKIAlrZnJlZShvcHApOwotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJm9wZW5wcm9tX211dGV4KTsKIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTU1NCwxMSArNTU1LDExIEBACiBzdGF0aWMgaW50IG9wZW5wcm9tX2JzZF9pb2N0bChzdHJ1Y3QgZmlsZSAqIGZpbGUsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlEQVRBICpkYXRhID0gKERBVEEgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOworCURBVEEgKmRhdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IGVycjsKIAotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmb3BlbnByb21fbXV0ZXgpOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBPUElPQ0dFVDoKIAkJZXJyID0gb3Bpb2NnZXQoYXJncCwgZGF0YSk7CkBAIC01ODksNyArNTkwLDcgQEAKIAkJZXJyID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAJfTsKLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZvcGVucHJvbV9tdXRleCk7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtNjAxLDcgKzYwMiw3IEBACiBzdGF0aWMgbG9uZyBvcGVucHJvbV9pb2N0bChzdHJ1Y3QgZmlsZSAqIGZpbGUsCiAJCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlEQVRBICpkYXRhID0gKERBVEEgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOworCURBVEEgKmRhdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgT1BST01HRVRPUFQ6CkBAIC02OTcsMTEgKzY5OCwxMSBAQAogCWlmICghZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlsb2NrX2tlcm5lbCgpOworCW11dGV4X2xvY2soJm9wZW5wcm9tX211dGV4KTsKIAlkYXRhLT5jdXJyZW50X25vZGUgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiLyIpOwogCWRhdGEtPmxhc3Rub2RlID0gZGF0YS0+Y3VycmVudF9ub2RlOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9ICh2b2lkICopIGRhdGE7Ci0JdW5sb2NrX2tlcm5lbCgpOworCW11dGV4X3VubG9jaygmb3BlbnByb21fbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NidXMvY2hhci91Y3RybC5jIGIvZHJpdmVycy9zYnVzL2NoYXIvdWN0cmwuYwppbmRleCA1ZjI1MzY2Li40MWViNjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NidXMvY2hhci91Y3RybC5jCisrKyBiL2RyaXZlcnMvc2J1cy9jaGFyL3VjdHJsLmMKQEAgLTksNyArOSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CkBAIC03Miw2ICs3Miw3IEBACiAjZGVmaW5lIFVDVFJMX1NUQVRfUlhORV9TVEEgICAgICAgIDB4MDQgICAgLyogcmVjZWl2ZSBGSUZPIG5vdCBlbXB0eSBzdGF0dXMgKi8KICNkZWZpbmUgVUNUUkxfU1RBVF9SWE9fU1RBICAgICAgICAgMHgwOCAgICAvKiByZWNlaXZlIEZJRk8gb3ZlcmZsb3cgc3RhdHVzICovCiAKK3N0YXRpYyBERUZJTkVfTVVURVgodWN0cmxfbXV0ZXgpOwogc3RhdGljIGNvbnN0IGNoYXIgKnVjdHJsX2V4dHN0YXR1c1sxNl0gPSB7CiAgICAgICAgICJtYWluIHBvd2VyIGF2YWlsYWJsZSIsCiAgICAgICAgICJpbnRlcm5hbCBiYXR0ZXJ5IGF0dGFjaGVkIiwKQEAgLTIxMCwxMCArMjExLDEwIEBACiBzdGF0aWMgaW50CiB1Y3RybF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmdWN0cmxfbXV0ZXgpOwogCXVjdHJsX2dldF9ldmVudF9zdGF0dXMoZ2xvYmFsX2RyaXZlcik7CiAJdWN0cmxfZ2V0X2V4dGVybmFsX3N0YXR1cyhnbG9iYWxfZHJpdmVyKTsKLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZ1Y3RybF9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM2Nyw3ICszNjgsNyBAQAogCQlnb3RvIG91dF9mcmVlOwogCX0KIAotCXAtPmlycSA9IG9wLT5pcnFzWzBdOworCXAtPmlycSA9IG9wLT5hcmNoZGF0YS5pcnFzWzBdOwogCWVyciA9IHJlcXVlc3RfaXJxKHAtPmlycSwgdWN0cmxfaW50ZXJydXB0LCAwLCAidWN0cmwiLCBwKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidWN0cmw6IFVuYWJsZSB0byByZWdpc3RlciBpcnEuXG4iKTsKQEAgLTQzNywxMiArNDM4LDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHVjdHJsX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gb2ZfcmVnaXN0ZXJfZHJpdmVyKCZ1Y3RybF9kcml2ZXIsICZvZl9idXNfdHlwZSk7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmdWN0cmxfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHVjdHJsX2V4aXQodm9pZCkKIHsKLQlvZl91bnJlZ2lzdGVyX2RyaXZlcigmdWN0cmxfZHJpdmVyKTsKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmdWN0cmxfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQodWN0cmxfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvS2NvbmZpZyBiL2RyaXZlcnMvc2NzaS9LY29uZmlnCmluZGV4IDc1ZjIzMzYuLjE1ODI4NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2NzaS9LY29uZmlnCkBAIC0xODQ3LDYgKzE4NDcsMTAgQEAKICAgICAgICAgICBjYWxsZWQgemZjcC4gSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZQogICAgICAgICAgIGFuZCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMudHh0Pi4KIAorY29uZmlnIFpGQ1BfRElGCisJdHJpc3RhdGUgIlQxMCBESUYvRElYIHN1cHBvcnQgZm9yIHRoZSB6ZmNwIGRyaXZlciAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFpGQ1AgJiYgRVhQRVJJTUVOVEFMCisKIGNvbmZpZyBTQ1NJX1BNQ1JBSUQKIAl0cmlzdGF0ZSAiUE1DIFNJRVJSQSBMaW51eCBNYXhSQUlEIGFkYXB0ZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBDSSAmJiBTQ1NJCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvTWFrZWZpbGUgYi9kcml2ZXJzL3Njc2kvTWFrZWZpbGUKaW5kZXggMWM3YWM0OS4uMmEzZmNhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2NzaS9NYWtlZmlsZQpAQCAtMTYzLDYgKzE2Myw3IEBACiBzY3NpX21vZC0kKENPTkZJR19TWVNDVEwpCSs9IHNjc2lfc3lzY3RsLm8KIHNjc2lfbW9kLSQoQ09ORklHX1NDU0lfUFJPQ19GUykJKz0gc2NzaV9wcm9jLm8KIHNjc2lfbW9kLXkJCQkrPSBzY3NpX3RyYWNlLm8KK3Njc2lfbW9kLSQoQ09ORklHX1BNX09QUykJKz0gc2NzaV9wbS5vCiAKIHNjc2lfdGd0LXkJCQkrPSBzY3NpX3RndF9saWIubyBzY3NpX3RndF9pZi5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2xpbml0LmMgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9saW5pdC5jCmluZGV4IDMzODk4YjYxLi5jYWQ2ZjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9saW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2xpbml0LmMKQEAgLTEwOTEsNiArMTA5MSw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqaW5zZXJ0ID0gJmFhY19kZXZpY2VzOwogCWludCBlcnJvciA9IC1FTk9ERVY7CiAJaW50IHVuaXF1ZV9pZCA9IDA7CisJdTY0IGRtYW1hc2s7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFhYywgJmFhY19kZXZpY2VzLCBlbnRyeSkgewogCQlpZiAoYWFjLT5pZCA+IHVuaXF1ZV9pZCkKQEAgLTExMDQsMTcgKzExMDUsMTggQEAKIAkJZ290byBvdXQ7CiAJZXJyb3IgPSAtRU5PREVWOwogCi0JaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkgfHwKLQkJCXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSkKLQkJZ290byBvdXRfZGlzYWJsZV9wZGV2OwogCS8qCiAJICogSWYgdGhlIHF1aXJrMzEgYml0IGlzIHNldCwgdGhlIGFkYXB0ZXIgbmVlZHMgYWRhcHRlcgogCSAqIHRvIGRyaXZlciBjb21tdW5pY2F0aW9uIG1lbW9yeSB0byBiZSBhbGxvY2F0ZWQgYmVsb3cgMmdpZwogCSAqLwogCWlmIChhYWNfZHJpdmVyc1tpbmRleF0ucXVpcmtzICYgQUFDX1FVSVJLXzMxQklUKQotCQlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzEpKSB8fAotCQkJCXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzEpKSkKLQkJCWdvdG8gb3V0X2Rpc2FibGVfcGRldjsKKwkJZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMSk7CisJZWxzZQorCQlkbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIGRtYW1hc2spIHx8CisJCQlwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgZG1hbWFzaykpCisJCWdvdG8gb3V0X2Rpc2FibGVfcGRldjsKIAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWR2YW5zeXMuYyBiL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5jCmluZGV4IDdmODc5NzkuLjBlYzNkYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5jCisrKyBiL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5jCkBAIC05NzE3LDcgKzk3MTcsNyBAQAogCWFzY19kdmMtPmJ1Z19maXhfY250bCA9IDA7CiAJYXNjX2R2Yy0+cGNpX2ZpeF9hc3luX3hmZXIgPSAwOwogCWFzY19kdmMtPnBjaV9maXhfYXN5bl94ZmVyX2Fsd2F5cyA9IDA7Ci0JLyogYXNjX2R2Yy0+aW5pdF9zdGF0ZSBpbml0YWxpemVkIGluIEFzY0luaXRHZXRDb25maWcoKS4gKi8KKwkvKiBhc2NfZHZjLT5pbml0X3N0YXRlIGluaXRpYWxpemVkIGluIEFzY0luaXRHZXRDb25maWcoKS4gKi8KIAlhc2NfZHZjLT5zZHRyX2RvbmUgPSAwOwogCWFzY19kdmMtPmN1cl90b3RhbF9xbmcgPSAwOwogCWFzY19kdmMtPmlzX2luX2ludCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3NzcwLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3NzcwLmMKaW5kZXggNmQ4NmE5Yi4uNTAwMGJkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzc3MC5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc3NzAuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiAJY2FzZSAxNToKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRmKCJhaWM3NzcwX2NvbmZpZzogaW52YWxpZCBpcnEgc2V0dGluZyAlZFxuIiwgaW50ZGVmKTsKKwkJcHJpbnRrKCJhaWM3NzcwX2NvbmZpZzogaW52YWxpZCBpcnEgc2V0dGluZyAlZFxuIiwgaW50ZGVmKTsKIAkJcmV0dXJuIChFTlhJTyk7CiAJfQogCkBAIC0yMjEsNyArMjIxLDcgQEAKIAkJYnJlYWs7CiAJfQogCWlmIChoYXZlX3NlZXByb20gPT0gMCkgewotCQlmcmVlKGFoYy0+c2VlcF9jb25maWcsIE1fREVWQlVGKTsKKwkJa2ZyZWUoYWhjLT5zZWVwX2NvbmZpZyk7CiAJCWFoYy0+c2VlcF9jb25maWcgPSBOVUxMOwogCX0KIApAQCAtMjkzLDcgKzI5Myw3IEBACiAJc2MgPSBhaGMtPnNlZXBfY29uZmlnOwogCiAJaWYgKGJvb3R2ZXJib3NlKQotCQlwcmludGYoIiVzOiBSZWFkaW5nIFNFRVBST00uLi4iLCBhaGNfbmFtZShhaGMpKTsKKwkJcHJpbnRrKCIlczogUmVhZGluZyBTRUVQUk9NLi4uIiwgYWhjX25hbWUoYWhjKSk7CiAJaGF2ZV9zZWVwcm9tID0gYWhjX3JlYWRfc2VlcHJvbSgmc2QsICh1aW50MTZfdCAqKXNjLAogCQkJCQkvKnN0YXJ0X2FkZHIqLzAsIHNpemVvZigqc2MpLzIpOwogCkBAIC0zMDEsMTYgKzMwMSwxNiBAQAogCiAJCWlmIChhaGNfdmVyaWZ5X2Nrc3VtKHNjKSA9PSAwKSB7CiAJCQlpZihib290dmVyYm9zZSkKLQkJCQlwcmludGYgKCJjaGVja3N1bSBlcnJvclxuIik7CisJCQkJcHJpbnRrICgiY2hlY2tzdW0gZXJyb3JcbiIpOwogCQkJaGF2ZV9zZWVwcm9tID0gMDsKIAkJfSBlbHNlIGlmIChib290dmVyYm9zZSkgewotCQkJcHJpbnRmKCJkb25lLlxuIik7CisJCQlwcmludGsoImRvbmUuXG4iKTsKIAkJfQogCX0KIAogCWlmICghaGF2ZV9zZWVwcm9tKSB7CiAJCWlmIChib290dmVyYm9zZSkKLQkJCXByaW50ZigiJXM6IE5vIFNFRVBST00gYXZhaWxhYmxlXG4iLCBhaGNfbmFtZShhaGMpKTsKKwkJCXByaW50aygiJXM6IE5vIFNFRVBST00gYXZhaWxhYmxlXG4iLCBhaGNfbmFtZShhaGMpKTsKIAkJYWhjLT5mbGFncyB8PSBBSENfVVNFREVGQVVMVFM7CiAJfSBlbHNlIHsKIAkJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc3NzBfb3NtLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3NzcwX29zbS5jCmluZGV4IGYyMjBlNWUuLjBjYjhlZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc3NzBfb3NtLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzc3MF9vc20uYwpAQCAtODUsNyArODUsNyBAQAogCWludAllcnJvcjsKIAogCXNwcmludGYoYnVmLCAiYWhjX2Vpc2E6JWQiLCBlaXNhQmFzZSA+PiAxMik7Ci0JbmFtZSA9IG1hbGxvYyhzdHJsZW4oYnVmKSArIDEsIE1fREVWQlVGLCBNX05PV0FJVCk7CisJbmFtZSA9IGttYWxsb2Moc3RybGVuKGJ1ZikgKyAxLCBHRlBfQVRPTUlDKTsKIAlpZiAobmFtZSA9PSBOVUxMKQogCQlyZXR1cm4gKEVOT01FTSk7CiAJc3RyY3B5KG5hbWUsIGJ1Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X2NvcmUuYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfY29yZS5jCmluZGV4IDc4OTcxZGIuLjMyMzNiZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfY29yZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfY29yZS5jCkBAIC0yODksNyArMjg5LDcgQEAKIAkgfHwgYWhkLT5kc3RfbW9kZSA9PSBBSERfTU9ERV9VTktOT1dOKQogCQlwYW5pYygiU2V0dGluZyBtb2RlIHByaW9yIHRvIHNhdmluZyBpdC5cbiIpOwogCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfTU9ERVBUUikgIT0gMCkKLQkJcHJpbnRmKCIlczogU2V0dGluZyBtb2RlIDB4JXhcbiIsIGFoZF9uYW1lKGFoZCksCisJCXByaW50aygiJXM6IFNldHRpbmcgbW9kZSAweCV4XG4iLCBhaGRfbmFtZShhaGQpLAogCQkgICAgICAgYWhkX2J1aWxkX21vZGVfc3RhdGUoYWhkLCBzcmMsIGRzdCkpOwogI2VuZGlmCiAJYWhkX291dGIoYWhkLCBNT0RFX1BUUiwgYWhkX2J1aWxkX21vZGVfc3RhdGUoYWhkLCBzcmMsIGRzdCkpOwpAQCAtMzA3LDcgKzMwNyw3IEBACiAJbW9kZV9wdHIgPSBhaGRfaW5iKGFoZCwgTU9ERV9QVFIpOwogI2lmZGVmIEFIRF9ERUJVRwogCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfTU9ERVBUUikgIT0gMCkKLQkJcHJpbnRmKCJSZWFkaW5nIG1vZGUgMHgleFxuIiwgbW9kZV9wdHIpOworCQlwcmludGsoIlJlYWRpbmcgbW9kZSAweCV4XG4iLCBtb2RlX3B0cik7CiAjZW5kaWYKIAlhaGRfZXh0cmFjdF9tb2RlX3N0YXRlKGFoZCwgbW9kZV9wdHIsICZzcmMsICZkc3QpOwogCWFoZF9rbm93bl9tb2RlcyhhaGQsIHNyYywgZHN0KTsKQEAgLTg3Nyw3ICs4NzcsNyBAQAogCQl1aW50NjRfdCBob3N0X2RhdGFwdHI7CiAKIAkJaG9zdF9kYXRhcHRyID0gYWhkX2xlNjR0b2goc2NiLT5oc2NiLT5kYXRhcHRyKTsKLQkJcHJpbnRmKCIlczogUXVldWVpbmcgU0NCICVkOjB4JXggYnVzIGFkZHIgMHgleCAtIDB4JXgleC8weCV4XG4iLAorCQlwcmludGsoIiVzOiBRdWV1ZWluZyBTQ0IgJWQ6MHgleCBidXMgYWRkciAweCV4IC0gMHgleCV4LzB4JXhcbiIsCiAJCSAgICAgICBhaGRfbmFtZShhaGQpLAogCQkgICAgICAgU0NCX0dFVF9UQUcoc2NiKSwgc2NiLT5oc2NiLT5zY3NpaWQsCiAJCSAgICAgICBhaGRfbGUzMnRvaChzY2ItPmhzY2ItPmhzY2JfYnVzYWRkciksCkBAIC0xMTc0LDcgKzExNzQsNyBAQAogCiAjaWZkZWYgQUhEX0RFQlVHCiAJaWYgKChhaGRfZGVidWcgJiBBSERfU0hPV19GSUZPUykgIT0gMCkKLQkJcHJpbnRmKCIlczogQ2xlYXJpbmcgRklGTyAlZFxuIiwgYWhkX25hbWUoYWhkKSwgZmlmbyk7CisJCXByaW50aygiJXM6IENsZWFyaW5nIEZJRk8gJWRcbiIsIGFoZF9uYW1lKGFoZCksIGZpZm8pOwogI2VuZGlmCiAJc2F2ZWRfbW9kZXMgPSBhaGRfc2F2ZV9tb2RlcyhhaGQpOwogCWFoZF9zZXRfbW9kZXMoYWhkLCBmaWZvLCBmaWZvKTsKQEAgLTEyMTUsNyArMTIxNSw3IEBACiAJCXNjYmlkID0gYWhkX2ludyhhaGQsIEdTRklGTyk7CiAJCXNjYiA9IGFoZF9sb29rdXBfc2NiKGFoZCwgc2NiaWQpOwogCQlpZiAoc2NiID09IE5VTEwpIHsKLQkJCXByaW50ZigiJXM6IFdhcm5pbmcgLSBHU0ZJRk8gU0NCICVkIGludmFsaWRcbiIsCisJCQlwcmludGsoIiVzOiBXYXJuaW5nIC0gR1NGSUZPIFNDQiAlZCBpbnZhbGlkXG4iLAogCQkJICAgICAgIGFoZF9uYW1lKGFoZCksIHNjYmlkKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0xMzM5LDcgKzEzMzksNyBAQAogCQluZXh0X3NjYmlkID0gYWhkX2lud19zY2JyYW0oYWhkLCBTQ0JfTkVYVF9DT01QTEVURSk7CiAJCXNjYiA9IGFoZF9sb29rdXBfc2NiKGFoZCwgc2NiaWQpOwogCQlpZiAoc2NiID09IE5VTEwpIHsKLQkJCXByaW50ZigiJXM6IFdhcm5pbmcgLSBETUEtdXAgYW5kIGNvbXBsZXRlICIKKwkJCXByaW50aygiJXM6IFdhcm5pbmcgLSBETUEtdXAgYW5kIGNvbXBsZXRlICIKIAkJCSAgICAgICAiU0NCICVkIGludmFsaWRcbiIsIGFoZF9uYW1lKGFoZCksIHNjYmlkKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0xMzYwLDcgKzEzNjAsNyBAQAogCQluZXh0X3NjYmlkID0gYWhkX2lud19zY2JyYW0oYWhkLCBTQ0JfTkVYVF9DT01QTEVURSk7CiAJCXNjYiA9IGFoZF9sb29rdXBfc2NiKGFoZCwgc2NiaWQpOwogCQlpZiAoc2NiID09IE5VTEwpIHsKLQkJCXByaW50ZigiJXM6IFdhcm5pbmcgLSBDb21wbGV0ZSBRZnJ6IFNDQiAlZCBpbnZhbGlkXG4iLAorCQkJcHJpbnRrKCIlczogV2FybmluZyAtIENvbXBsZXRlIFFmcnogU0NCICVkIGludmFsaWRcbiIsCiAJCQkgICAgICAgYWhkX25hbWUoYWhkKSwgc2NiaWQpOwogCQkJY29udGludWU7CiAJCX0KQEAgLTEzNzcsNyArMTM3Nyw3IEBACiAJCW5leHRfc2NiaWQgPSBhaGRfaW53X3NjYnJhbShhaGQsIFNDQl9ORVhUX0NPTVBMRVRFKTsKIAkJc2NiID0gYWhkX2xvb2t1cF9zY2IoYWhkLCBzY2JpZCk7CiAJCWlmIChzY2IgPT0gTlVMTCkgewotCQkJcHJpbnRmKCIlczogV2FybmluZyAtIENvbXBsZXRlIFNDQiAlZCBpbnZhbGlkXG4iLAorCQkJcHJpbnRrKCIlczogV2FybmluZyAtIENvbXBsZXRlIFNDQiAlZCBpbnZhbGlkXG4iLAogCQkJICAgICAgIGFoZF9uYW1lKGFoZCksIHNjYmlkKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0xNjgyLDcgKzE2ODIsNyBAQAogCQlzY2JfaW5kZXggPSBhaGRfbGUxNnRvaChjb21wbGV0aW9uLT50YWcpOwogCQlzY2IgPSBhaGRfbG9va3VwX3NjYihhaGQsIHNjYl9pbmRleCk7CiAJCWlmIChzY2IgPT0gTlVMTCkgewotCQkJcHJpbnRmKCIlczogV0FSTklORyBubyBjb21tYW5kIGZvciBzY2IgJWQgIgorCQkJcHJpbnRrKCIlczogV0FSTklORyBubyBjb21tYW5kIGZvciBzY2IgJWQgIgogCQkJICAgICAgICIoY21kY21wbHQpXG5RT1VUUE9TID0gJWRcbiIsCiAJCQkgICAgICAgYWhkX25hbWUoYWhkKSwgc2NiX2luZGV4LAogCQkJICAgICAgIGFoZC0+cW91dGZpZm9uZXh0KTsKQEAgLTE3MTQsNyArMTcxNCw3IEBACiAJZXJyb3IgPSBhaGRfaW5iKGFoZCwgRVJST1IpOwogCWZvciAoaSA9IDA7IGkgPCBudW1fZXJyb3JzOyBpKyspIHsKIAkJaWYgKChlcnJvciAmIGFoZF9oYXJkX2Vycm9yc1tpXS5lcnJubykgIT0gMCkKLQkJCXByaW50ZigiJXM6IGh3ZXJyaW50LCAlc1xuIiwKKwkJCXByaW50aygiJXM6IGh3ZXJyaW50LCAlc1xuIiwKIAkJCSAgICAgICBhaGRfbmFtZShhaGQpLCBhaGRfaGFyZF9lcnJvcnNbaV0uZXJybWVzZyk7CiAJfQogCkBAIC0xNzQ3LDcgKzE3NDcsNyBAQAogCiAJCQkJYWRkciA9IGFoZF9sZTY0dG9oKHNnX2xpc3RbaV0uYWRkcik7CiAJCQkJbGVuID0gYWhkX2xlMzJ0b2goc2dfbGlzdFtpXS5sZW4pOwotCQkJCXByaW50Zigic2dbJWRdIC0gQWRkciAweCV4JXggOiBMZW5ndGggJWQlc1xuIiwKKwkJCQlwcmludGsoInNnWyVkXSAtIEFkZHIgMHgleCV4IDogTGVuZ3RoICVkJXNcbiIsCiAJCQkJICAgICAgIGksCiAJCQkJICAgICAgICh1aW50MzJfdCkoKGFkZHIgPj4gMzIpICYgMHhGRkZGRkZGRiksCiAJCQkJICAgICAgICh1aW50MzJfdCkoYWRkciAmIDB4RkZGRkZGRkYpLApAQCAtMTc2Myw3ICsxNzYzLDcgQEAKIAkJCQl1aW50MzJfdCBsZW47CiAKIAkJCQlsZW4gPSBhaGRfbGUzMnRvaChzZ19saXN0W2ldLmxlbik7Ci0JCQkJcHJpbnRmKCJzZ1slZF0gLSBBZGRyIDB4JXgleCA6IExlbmd0aCAlZCVzXG4iLAorCQkJCXByaW50aygic2dbJWRdIC0gQWRkciAweCV4JXggOiBMZW5ndGggJWQlc1xuIiwKIAkJCQkgICAgICAgaSwKIAkJCQkgICAgICAgKGxlbiAmIEFIRF9TR19ISUdIX0FERFJfTUFTSykgPj4gMjQsCiAJCQkJICAgICAgIGFoZF9sZTMydG9oKHNnX2xpc3RbaV0uYWRkciksCkBAIC0xODAyLDcgKzE4MDIsNyBAQAogCWFoZF91cGRhdGVfbW9kZXMoYWhkKTsKICNpZmRlZiBBSERfREVCVUcKIAlpZiAoKGFoZF9kZWJ1ZyAmIEFIRF9TSE9XX01JU0MpICE9IDApCi0JCXByaW50ZigiJXM6IEhhbmRsZSBTZXFpbnQgQ2FsbGVkIGZvciBjb2RlICVkXG4iLAorCQlwcmludGsoIiVzOiBIYW5kbGUgU2VxaW50IENhbGxlZCBmb3IgY29kZSAlZFxuIiwKIAkJICAgICAgIGFoZF9uYW1lKGFoZCksIHNlcWludGNvZGUpOwogI2VuZGlmCiAJc3dpdGNoIChzZXFpbnRjb2RlKSB7CkBAIC0xODM2LDE4ICsxODM2LDE4IEBACiAJCQkgKi8KICNpZmRlZiBBSERfREVCVUcKIAkJCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfUkVDT1ZFUlkpICE9IDApCi0JCQkJcHJpbnRmKCIlczogQXNzdW1pbmcgTFFJUEhBU0VfTkxRIHdpdGggIgorCQkJCXByaW50aygiJXM6IEFzc3VtaW5nIExRSVBIQVNFX05MUSB3aXRoICIKIAkJCQkgICAgICAgIlAwIGFzc2VydGlvblxuIiwgYWhkX25hbWUoYWhkKSk7CiAjZW5kaWYKIAkJfQogI2lmZGVmIEFIRF9ERUJVRwogCQlpZiAoKGFoZF9kZWJ1ZyAmIEFIRF9TSE9XX1JFQ09WRVJZKSAhPSAwKQotCQkJcHJpbnRmKCIlczogRW50ZXJpbmcgTk9OUEFDS1xuIiwgYWhkX25hbWUoYWhkKSk7CisJCQlwcmludGsoIiVzOiBFbnRlcmluZyBOT05QQUNLXG4iLCBhaGRfbmFtZShhaGQpKTsKICNlbmRpZgogCQlicmVhazsKIAl9CiAJY2FzZSBJTlZBTElEX1NFUUlOVDoKLQkJcHJpbnRmKCIlczogSW52YWxpZCBTZXF1ZW5jZXIgaW50ZXJydXB0IG9jY3VycmVkLCAiCisJCXByaW50aygiJXM6IEludmFsaWQgU2VxdWVuY2VyIGludGVycnVwdCBvY2N1cnJlZCwgIgogCQkgICAgICAgInJlc2V0dGluZyBjaGFubmVsLlxuIiwKIAkJICAgICAgIGFoZF9uYW1lKGFoZCkpOwogI2lmZGVmIEFIRF9ERUJVRwpAQCAtMTg2Niw4ICsxODY2LDggQEAKIAkJaWYgKHNjYiAhPSBOVUxMKQogCQkJYWhkX3ByaW50X3BhdGgoYWhkLCBzY2IpOwogCQllbHNlCi0JCQlwcmludGYoIiVzOiAiLCBhaGRfbmFtZShhaGQpKTsKLQkJcHJpbnRmKCJTQ0IgJWQgUGFja2V0aXplZCBTdGF0dXMgT3ZlcnJ1biIsIHNjYmlkKTsKKwkJCXByaW50aygiJXM6ICIsIGFoZF9uYW1lKGFoZCkpOworCQlwcmludGsoIlNDQiAlZCBQYWNrZXRpemVkIFN0YXR1cyBPdmVycnVuIiwgc2NiaWQpOwogCQlhaGRfZHVtcF9jYXJkX3N0YXRlKGFoZCk7CiAJCWFoZF9yZXNldF9jaGFubmVsKGFoZCwgJ0EnLCAvKkluaXRpYXRlIFJlc2V0Ki9UUlVFKTsKIAkJYnJlYWs7CkBAIC0xODgxLDcgKzE4ODEsNyBAQAogCQlzY2IgPSBhaGRfbG9va3VwX3NjYihhaGQsIHNjYmlkKTsKIAkJaWYgKHNjYiA9PSBOVUxMKSB7CiAJCQlhaGRfZHVtcF9jYXJkX3N0YXRlKGFoZCk7Ci0JCQlwcmludGYoIkNGRzRJU1RBVDogRnJlZSBTQ0IgJWQgcmVmZXJlbmNlZCIsIHNjYmlkKTsKKwkJCXByaW50aygiQ0ZHNElTVEFUOiBGcmVlIFNDQiAlZCByZWZlcmVuY2VkIiwgc2NiaWQpOwogCQkJcGFuaWMoIkZvciBzYWZldHkiKTsKIAkJfQogCQlhaGRfb3V0cShhaGQsIEhBRERSLCBzY2ItPnNlbnNlX2J1c2FkZHIpOwpAQCAtMTg5Niw3ICsxODk2LDcgQEAKIAkJdV9pbnQgYnVzX3BoYXNlOwogCiAJCWJ1c19waGFzZSA9IGFoZF9pbmIoYWhkLCBTQ1NJU0lHSSkgJiBQSEFTRV9NQVNLOwotCQlwcmludGYoIiVzOiBJTExFR0FMX1BIQVNFIDB4JXhcbiIsCisJCXByaW50aygiJXM6IElMTEVHQUxfUEhBU0UgMHgleFxuIiwKIAkJICAgICAgIGFoZF9uYW1lKGFoZCksIGJ1c19waGFzZSk7CiAKIAkJc3dpdGNoIChidXNfcGhhc2UpIHsKQEAgLTE5MDgsNyArMTkwOCw3IEBACiAJCWNhc2UgUF9TVEFUVVM6CiAJCWNhc2UgUF9NRVNHSU46CiAJCQlhaGRfcmVzZXRfY2hhbm5lbChhaGQsICdBJywgLypJbml0aWF0ZSBSZXNldCovVFJVRSk7Ci0JCQlwcmludGYoIiVzOiBJc3N1ZWQgQnVzIFJlc2V0LlxuIiwgYWhkX25hbWUoYWhkKSk7CisJCQlwcmludGsoIiVzOiBJc3N1ZWQgQnVzIFJlc2V0LlxuIiwgYWhkX25hbWUoYWhkKSk7CiAJCQlicmVhazsKIAkJY2FzZSBQX0NPTU1BTkQ6CiAJCXsKQEAgLTE5MzMsNyArMTkzMyw3IEBACiAJCQlzY2JpZCA9IGFoZF9nZXRfc2NicHRyKGFoZCk7CiAJCQlzY2IgPSBhaGRfbG9va3VwX3NjYihhaGQsIHNjYmlkKTsKIAkJCWlmIChzY2IgPT0gTlVMTCkgewotCQkJCXByaW50ZigiSW52YWxpZCBwaGFzZSB3aXRoIG5vIHZhbGlkIFNDQi4gICIKKwkJCQlwcmludGsoIkludmFsaWQgcGhhc2Ugd2l0aCBubyB2YWxpZCBTQ0IuICAiCiAJCQkJICAgICAgICJSZXNldHRpbmcgYnVzLlxuIik7CiAJCQkJYWhkX3Jlc2V0X2NoYW5uZWwoYWhkLCAnQScsCiAJCQkJCQkgIC8qSW5pdGlhdGUgUmVzZXQqL1RSVUUpOwpAQCAtMTk5Nyw3ICsxOTk3LDcgQEAKICNpZmRlZiBBSERfREVCVUcKIAkJCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfUkVDT1ZFUlkpICE9IDApIHsKIAkJCQlhaGRfcHJpbnRfcGF0aChhaGQsIHNjYik7Ci0JCQkJcHJpbnRmKCJVbmV4cGVjdGVkIGNvbW1hbmQgcGhhc2UgZnJvbSAiCisJCQkJcHJpbnRrKCJVbmV4cGVjdGVkIGNvbW1hbmQgcGhhc2UgZnJvbSAiCiAJCQkJICAgICAgICJwYWNrZXRpemVkIHRhcmdldFxuIik7CiAJCQl9CiAjZW5kaWYKQEAgLTIwMTMsNyArMjAxMyw3IEBACiAJCQogI2lmZGVmIEFIRF9ERUJVRwogCQlpZiAoKGFoZF9kZWJ1ZyAmIEFIRF9TSE9XX1JFQ09WRVJZKSAhPSAwKSB7Ci0JCQlwcmludGYoIiVzOiBDRkc0T1ZFUlJVTiBtb2RlID0gJXhcbiIsIGFoZF9uYW1lKGFoZCksCisJCQlwcmludGsoIiVzOiBDRkc0T1ZFUlJVTiBtb2RlID0gJXhcbiIsIGFoZF9uYW1lKGFoZCksCiAJCQkgICAgICAgYWhkX2luYihhaGQsIE1PREVfUFRSKSk7CiAJCX0KICNlbmRpZgpAQCAtMjA0OSw3ICsyMDQ5LDcgQEAKIAl7CiAjaWZkZWYgQUhEX0RFQlVHCiAJCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfUkVDT1ZFUlkpICE9IDApIHsKLQkJCXByaW50ZigiJXM6IFBEQVRBX1JFSU5JVCAtIERGQ05UUkwgPSAweCV4ICIKKwkJCXByaW50aygiJXM6IFBEQVRBX1JFSU5JVCAtIERGQ05UUkwgPSAweCV4ICIKIAkJCSAgICAgICAiU0dfQ0FDSEVfU0hBRE9XID0gMHgleFxuIiwKIAkJCSAgICAgICBhaGRfbmFtZShhaGQpLCBhaGRfaW5iKGFoZCwgREZDTlRSTCksCiAJCQkgICAgICAgYWhkX2luYihhaGQsIFNHX0NBQ0hFX1NIQURPVykpOwpAQCAtMjA4Miw3ICsyMDgyLDcgQEAKIAkJCWJ1c19waGFzZSA9IGFoZF9pbmIoYWhkLCBTQ1NJU0lHSSkgJiBQSEFTRV9NQVNLOwogCQkJaWYgKGJ1c19waGFzZSAhPSBQX01FU0dJTgogCQkJICYmIGJ1c19waGFzZSAhPSBQX01FU0dPVVQpIHsKLQkJCQlwcmludGYoImFoZF9pbnRyOiBIT1NUX01TR19MT09QIGJhZCAiCisJCQkJcHJpbnRrKCJhaGRfaW50cjogSE9TVF9NU0dfTE9PUCBiYWQgIgogCQkJCSAgICAgICAicGhhc2UgMHgleFxuIiwgYnVzX3BoYXNlKTsKIAkJCQkvKgogCQkJCSAqIFByb2JhYmx5IHRyYW5zaXRpb25lZCB0byBidXMgZnJlZSBiZWZvcmUKQEAgLTIxMzEsMjkgKzIxMzEsMjkgQEAKIAkJQUhEX0FTU0VSVF9NT0RFUyhhaGQsIEFIRF9NT0RFX1NDU0lfTVNLLCBBSERfTU9ERV9TQ1NJX01TSyk7CiAJCWFoZF9vdXRiKGFoZCwgU0NTSVNFUTAsIGFoZF9pbmIoYWhkLCBTQ1NJU0VRMCkgJiB+RU5TRUxPKTsKIAotCQlwcmludGYoIiVzOiVjOiVkOiBubyBhY3RpdmUgU0NCIGZvciByZWNvbm5lY3RpbmcgIgorCQlwcmludGsoIiVzOiVjOiVkOiBubyBhY3RpdmUgU0NCIGZvciByZWNvbm5lY3RpbmcgIgogCQkgICAgICAgInRhcmdldCAtIGlzc3VpbmcgQlVTIERFVklDRSBSRVNFVFxuIiwKIAkJICAgICAgIGFoZF9uYW1lKGFoZCksICdBJywgYWhkX2luYihhaGQsIFNFTElEKSA+PiA0KTsKLQkJcHJpbnRmKCJTQVZFRF9TQ1NJSUQgPT0gMHgleCwgU0FWRURfTFVOID09IDB4JXgsICIKKwkJcHJpbnRrKCJTQVZFRF9TQ1NJSUQgPT0gMHgleCwgU0FWRURfTFVOID09IDB4JXgsICIKIAkJICAgICAgICJSRUcwID09IDB4JXggQUNDVU0gPSAweCV4XG4iLAogCQkgICAgICAgYWhkX2luYihhaGQsIFNBVkVEX1NDU0lJRCksIGFoZF9pbmIoYWhkLCBTQVZFRF9MVU4pLAogCQkgICAgICAgYWhkX2ludyhhaGQsIFJFRzApLCBhaGRfaW5iKGFoZCwgQUNDVU0pKTsKLQkJcHJpbnRmKCJTRVFfRkxBR1MgPT0gMHgleCwgU0NCUFRSID09IDB4JXgsIEJUVCA9PSAweCV4LCAiCisJCXByaW50aygiU0VRX0ZMQUdTID09IDB4JXgsIFNDQlBUUiA9PSAweCV4LCBCVFQgPT0gMHgleCwgIgogCQkgICAgICAgIlNJTkRFWCA9PSAweCV4XG4iLAogCQkgICAgICAgYWhkX2luYihhaGQsIFNFUV9GTEFHUyksIGFoZF9nZXRfc2NicHRyKGFoZCksCiAJCSAgICAgICBhaGRfZmluZF9idXN5X3RjbChhaGQsCiAJCQkJCSBCVUlMRF9UQ0woYWhkX2luYihhaGQsIFNBVkVEX1NDU0lJRCksCiAJCQkJCQkgICBhaGRfaW5iKGFoZCwgU0FWRURfTFVOKSkpLAogCQkgICAgICAgYWhkX2ludyhhaGQsIFNJTkRFWCkpOwotCQlwcmludGYoIlNFTElEID09IDB4JXgsIFNDQl9TQ1NJSUQgPT0gMHgleCwgU0NCX0xVTiA9PSAweCV4LCAiCisJCXByaW50aygiU0VMSUQgPT0gMHgleCwgU0NCX1NDU0lJRCA9PSAweCV4LCBTQ0JfTFVOID09IDB4JXgsICIKIAkJICAgICAgICJTQ0JfQ09OVFJPTCA9PSAweCV4XG4iLAogCQkgICAgICAgYWhkX2luYihhaGQsIFNFTElEKSwgYWhkX2luYl9zY2JyYW0oYWhkLCBTQ0JfU0NTSUlEKSwKIAkJICAgICAgIGFoZF9pbmJfc2NicmFtKGFoZCwgU0NCX0xVTiksCiAJCSAgICAgICBhaGRfaW5iX3NjYnJhbShhaGQsIFNDQl9DT05UUk9MKSk7Ci0JCXByaW50ZigiU0NTSUJVU1swXSA9PSAweCV4LCBTQ1NJU0lHSSA9PSAweCV4XG4iLAorCQlwcmludGsoIlNDU0lCVVNbMF0gPT0gMHgleCwgU0NTSVNJR0kgPT0gMHgleFxuIiwKIAkJICAgICAgIGFoZF9pbmIoYWhkLCBTQ1NJQlVTKSwgYWhkX2luYihhaGQsIFNDU0lTSUdJKSk7Ci0JCXByaW50ZigiU1hGUkNUTDAgPT0gMHgleFxuIiwgYWhkX2luYihhaGQsIFNYRlJDVEwwKSk7Ci0JCXByaW50ZigiU0VRQ1RMMCA9PSAweCV4XG4iLCBhaGRfaW5iKGFoZCwgU0VRQ1RMMCkpOworCQlwcmludGsoIlNYRlJDVEwwID09IDB4JXhcbiIsIGFoZF9pbmIoYWhkLCBTWEZSQ1RMMCkpOworCQlwcmludGsoIlNFUUNUTDAgPT0gMHgleFxuIiwgYWhkX2luYihhaGQsIFNFUUNUTDApKTsKIAkJYWhkX2R1bXBfY2FyZF9zdGF0ZShhaGQpOwogCQlhaGQtPm1zZ291dF9idWZbMF0gPSBNU0dfQlVTX0RFVl9SRVNFVDsKIAkJYWhkLT5tc2dvdXRfbGVuID0gMTsKQEAgLTIxODEsNyArMjE4MSw3IEBACiAJCXVfaW50IGxhc3RwaGFzZTsKIAogCQlsYXN0cGhhc2UgPSBhaGRfaW5iKGFoZCwgTEFTVFBIQVNFKTsKLQkJcHJpbnRmKCIlczolYzolZDogdW5rbm93biBzY3NpIGJ1cyBwaGFzZSAleCwgIgorCQlwcmludGsoIiVzOiVjOiVkOiB1bmtub3duIHNjc2kgYnVzIHBoYXNlICV4LCAiCiAJCSAgICAgICAibGFzdHBoYXNlID0gMHgleC4gIEF0dGVtcHRpbmcgdG8gY29udGludWVcbiIsCiAJCSAgICAgICBhaGRfbmFtZShhaGQpLCAnQScsCiAJCSAgICAgICBTQ1NJSURfVEFSR0VUKGFoZCwgYWhkX2luYihhaGQsIFNBVkVEX1NDU0lJRCkpLApAQCAtMjE5Myw3ICsyMTkzLDcgQEAKIAkJdV9pbnQgbGFzdHBoYXNlOwogCiAJCWxhc3RwaGFzZSA9IGFoZF9pbmIoYWhkLCBMQVNUUEhBU0UpOwotCQlwcmludGYoIiVzOiVjOiVkOiBNaXNzZWQgYnVzZnJlZS4gIgorCQlwcmludGsoIiVzOiVjOiVkOiBNaXNzZWQgYnVzZnJlZS4gIgogCQkgICAgICAgIkxhc3RwaGFzZSA9IDB4JXgsIEN1cnBoYXNlID0gMHgleFxuIiwKIAkJICAgICAgIGFoZF9uYW1lKGFoZCksICdBJywKIAkJICAgICAgIFNDU0lJRF9UQVJHRVQoYWhkLCBhaGRfaW5iKGFoZCwgU0FWRURfU0NTSUlEKSksCkBAIC0yMjIzLDExICsyMjIzLDExIEBACiAJCWxhc3RwaGFzZSA9IGFoZF9pbmIoYWhkLCBMQVNUUEhBU0UpOwogCQlpZiAoKGFoZF9kZWJ1ZyAmIEFIRF9TSE9XX1JFQ09WRVJZKSAhPSAwKSB7CiAJCQlhaGRfcHJpbnRfcGF0aChhaGQsIHNjYik7Ci0JCQlwcmludGYoImRhdGEgb3ZlcnJ1biBkZXRlY3RlZCAlcy4gIFRhZyA9PSAweCV4LlxuIiwKKwkJCXByaW50aygiZGF0YSBvdmVycnVuIGRldGVjdGVkICVzLiAgVGFnID09IDB4JXguXG4iLAogCQkJICAgICAgIGFoZF9sb29rdXBfcGhhc2VfZW50cnkobGFzdHBoYXNlKS0+cGhhc2Vtc2csCiAJCQkgICAgICAgU0NCX0dFVF9UQUcoc2NiKSk7CiAJCQlhaGRfcHJpbnRfcGF0aChhaGQsIHNjYik7Ci0JCQlwcmludGYoIiVzIHNlZW4gRGF0YSBQaGFzZS4gIExlbmd0aCA9ICVsZC4gICIKKwkJCXByaW50aygiJXMgc2VlbiBEYXRhIFBoYXNlLiAgTGVuZ3RoID0gJWxkLiAgIgogCQkJICAgICAgICJOdW1TR3MgPSAlZC5cbiIsCiAJCQkgICAgICAgYWhkX2luYihhaGQsIFNFUV9GTEFHUykgJiBEUEhBU0UKIAkJCSAgICAgICA/ICJIYXZlIiA6ICJIYXZlbid0IiwKQEAgLTIyNTIsNyArMjI1Miw3IEBACiAJCXVfaW50IHNjYmlkOwogCiAJCWFoZF9mZXRjaF9kZXZpbmZvKGFoZCwgJmRldmluZm8pOwotCQlwcmludGYoIiVzOiVjOiVkOiVkOiBBdHRlbXB0IHRvIGlzc3VlIG1lc3NhZ2UgZmFpbGVkXG4iLAorCQlwcmludGsoIiVzOiVjOiVkOiVkOiBBdHRlbXB0IHRvIGlzc3VlIG1lc3NhZ2UgZmFpbGVkXG4iLAogCQkgICAgICAgYWhkX25hbWUoYWhkKSwgZGV2aW5mby5jaGFubmVsLCBkZXZpbmZvLnRhcmdldCwKIAkJICAgICAgIGRldmluZm8ubHVuKTsKIAkJc2NiaWQgPSBhaGRfZ2V0X3NjYnB0cihhaGQpOwpAQCAtMjI4NSw3ICsyMjg1LDcgQEAKIAkJCWNhbV9zdGF0dXMgZXJyb3I7CiAKIAkJCWFoZF9wcmludF9wYXRoKGFoZCwgc2NiKTsKLQkJCXByaW50ZigiVGFzayBNYW5hZ2VtZW50IEZ1bmMgMHgleCBDb21wbGV0ZVxuIiwKKwkJCXByaW50aygiVGFzayBNYW5hZ2VtZW50IEZ1bmMgMHgleCBDb21wbGV0ZVxuIiwKIAkJCSAgICAgICBzY2ItPmhzY2ItPnRhc2tfbWFuYWdlbWVudCk7CiAJCQlsdW4gPSBDQU1fTFVOX1dJTERDQVJEOwogCQkJdGFnID0gU0NCX0xJU1RfTlVMTDsKQEAgLTIzNDEsNyArMjM0MSw3IEBACiAJCQkgKiB0aGUgUUlORklGTyBpZiBpdCBpcyBzdGlsbCB0aGVyZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCQkJYWhkX3ByaW50X3BhdGgoYWhkLCBzY2IpOwotCQkJcHJpbnRmKCJTQ0IgY29tcGxldGVzIGJlZm9yZSBUTUZcbiIpOworCQkJcHJpbnRrKCJTQ0IgY29tcGxldGVzIGJlZm9yZSBUTUZcbiIpOwogCQkJLyoKIAkJCSAqIEhhbmRsZSBsb3NpbmcgdGhlIHJhY2UuICBXYWl0IHVudGlsIGFueQogCQkJICogY3VycmVudCBzZWxlY3Rpb24gY29tcGxldGVzLiAgV2Ugd2lsbCB0aGVuCkBAIC0yMzY2LDcgKzIzNjYsNyBAQAogCWNhc2UgVFJBQ0VQT0lOVDE6CiAJY2FzZSBUUkFDRVBPSU5UMjoKIAljYXNlIFRSQUNFUE9JTlQzOgotCQlwcmludGYoIiVzOiBUcmFjZXBvaW50ICVkXG4iLCBhaGRfbmFtZShhaGQpLAorCQlwcmludGsoIiVzOiBUcmFjZXBvaW50ICVkXG4iLCBhaGRfbmFtZShhaGQpLAogCQkgICAgICAgc2VxaW50Y29kZSAtIFRSQUNFUE9JTlQwKTsKIAkJYnJlYWs7CiAJY2FzZSBOT19TRVFJTlQ6CkBAIC0yMzc1LDcgKzIzNzUsNyBAQAogCQlhaGRfaGFuZGxlX2h3ZXJyaW50KGFoZCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ZigiJXM6IFVuZXhwZWN0ZWQgU0VRSU5UQ09ERSAlZFxuIiwgYWhkX25hbWUoYWhkKSwKKwkJcHJpbnRrKCIlczogVW5leHBlY3RlZCBTRVFJTlRDT0RFICVkXG4iLCBhaGRfbmFtZShhaGQpLAogCQkgICAgICAgc2VxaW50Y29kZSk7CiAJCWJyZWFrOwogCX0KQEAgLTI0NDAsNyArMjQ0MCw3IEBACiAJCXVfaW50IG5vd19sdmQ7CiAKIAkJbm93X2x2ZCA9IGFoZF9pbmIoYWhkLCBTQkxLQ1RMKSAmIEVOQUI0MDsKLQkJcHJpbnRmKCIlczogVHJhbnNjZWl2ZXIgU3RhdGUgSGFzIENoYW5nZWQgdG8gJXMgbW9kZVxuIiwKKwkJcHJpbnRrKCIlczogVHJhbnNjZWl2ZXIgU3RhdGUgSGFzIENoYW5nZWQgdG8gJXMgbW9kZVxuIiwKIAkJICAgICAgIGFoZF9uYW1lKGFoZCksIG5vd19sdmQgPyAiTFZEIiA6ICJTRSIpOwogCQlhaGRfb3V0YihhaGQsIENMUlNJTlQwLCBDTFJJT0VSUik7CiAJCS8qCkBAIC0yNDUyLDEyICsyNDUyLDEyIEBACiAJCWFoZF91bnBhdXNlKGFoZCk7CiAJfSBlbHNlIGlmICgoc3RhdHVzMCAmIE9WRVJSVU4pICE9IDApIHsKIAotCQlwcmludGYoIiVzOiBTQ1NJIG9mZnNldCBvdmVycnVuIGRldGVjdGVkLiAgUmVzZXR0aW5nIGJ1cy5cbiIsCisJCXByaW50aygiJXM6IFNDU0kgb2Zmc2V0IG92ZXJydW4gZGV0ZWN0ZWQuICBSZXNldHRpbmcgYnVzLlxuIiwKIAkJICAgICAgIGFoZF9uYW1lKGFoZCkpOwogCQlhaGRfcmVzZXRfY2hhbm5lbChhaGQsICdBJywgLypJbml0aWF0ZSBSZXNldCovVFJVRSk7CiAJfSBlbHNlIGlmICgoc3RhdHVzICYgU0NTSVJTVEkpICE9IDApIHsKIAotCQlwcmludGYoIiVzOiBTb21lb25lIHJlc2V0IGNoYW5uZWwgQVxuIiwgYWhkX25hbWUoYWhkKSk7CisJCXByaW50aygiJXM6IFNvbWVvbmUgcmVzZXQgY2hhbm5lbCBBXG4iLCBhaGRfbmFtZShhaGQpKTsKIAkJYWhkX3Jlc2V0X2NoYW5uZWwoYWhkLCAnQScsIC8qSW5pdGlhdGUgUmVzZXQqL0ZBTFNFKTsKIAl9IGVsc2UgaWYgKChzdGF0dXMgJiBTQ1NJUEVSUikgIT0gMCkgewogCkBAIC0yNDY3LDcgKzI0NjcsNyBAQAogCQlhaGRfaGFuZGxlX3RyYW5zbWlzc2lvbl9lcnJvcihhaGQpOwogCX0gZWxzZSBpZiAobHFvc3RhdDAgIT0gMCkgewogCi0JCXByaW50ZigiJXM6IGxxb3N0YXQwID09IDB4JXghXG4iLCBhaGRfbmFtZShhaGQpLCBscW9zdGF0MCk7CisJCXByaW50aygiJXM6IGxxb3N0YXQwID09IDB4JXghXG4iLCBhaGRfbmFtZShhaGQpLCBscW9zdGF0MCk7CiAJCWFoZF9vdXRiKGFoZCwgQ0xSTFFPSU5UMCwgbHFvc3RhdDApOwogCQlpZiAoKGFoZC0+YnVncyAmIEFIRF9DTFJMUU9fQVVUT0NMUl9CVUcpICE9IDApCiAJCQlhaGRfb3V0YihhaGQsIENMUkxRT0lOVDEsIDApOwpAQCAtMjQ5Nyw3ICsyNDk3LDcgQEAKIAkJc2NiaWQgPSBhaGRfaW53KGFoZCwgV0FJVElOR19USURfSEVBRCk7CiAJCXNjYiA9IGFoZF9sb29rdXBfc2NiKGFoZCwgc2NiaWQpOwogCQlpZiAoc2NiID09IE5VTEwpIHsKLQkJCXByaW50ZigiJXM6IGFoZF9pbnRyIC0gcmVmZXJlbmNlZCBzY2Igbm90ICIKKwkJCXByaW50aygiJXM6IGFoZF9pbnRyIC0gcmVmZXJlbmNlZCBzY2Igbm90ICIKIAkJCSAgICAgICAidmFsaWQgZHVyaW5nIFNFTFRPIHNjYigweCV4KVxuIiwKIAkJCSAgICAgICBhaGRfbmFtZShhaGQpLCBzY2JpZCk7CiAJCQlhaGRfZHVtcF9jYXJkX3N0YXRlKGFoZCk7CkBAIC0yNTA2LDcgKzI1MDYsNyBAQAogI2lmZGVmIEFIRF9ERUJVRwogCQkJaWYgKChhaGRfZGVidWcgJiBBSERfU0hPV19TRUxUTykgIT0gMCkgewogCQkJCWFoZF9wcmludF9wYXRoKGFoZCwgc2NiKTsKLQkJCQlwcmludGYoIlNhdyBTZWxlY3Rpb24gVGltZW91dCBmb3IgU0NCIDB4JXhcbiIsCisJCQkJcHJpbnRrKCJTYXcgU2VsZWN0aW9uIFRpbWVvdXQgZm9yIFNDQiAweCV4XG4iLAogCQkJCSAgICAgICBzY2JpZCk7CiAJCQl9CiAjZW5kaWYKQEAgLTI1MzQsNyArMjUzNCw3IEBACiAJCWFoZF9pb2NlbGxfZmlyc3Rfc2VsZWN0aW9uKGFoZCk7CiAJCWFoZF91bnBhdXNlKGFoZCk7CiAJfSBlbHNlIGlmIChzdGF0dXMzICE9IDApIHsKLQkJcHJpbnRmKCIlczogU0NTSSBDZWxsIHBhcml0eSBlcnJvciBTU1RBVDMgPT0gMHgleFxuIiwKKwkJcHJpbnRrKCIlczogU0NTSSBDZWxsIHBhcml0eSBlcnJvciBTU1RBVDMgPT0gMHgleFxuIiwKIAkJICAgICAgIGFoZF9uYW1lKGFoZCksIHN0YXR1czMpOwogCQlhaGRfb3V0YihhaGQsIENMUlNJTlQzLCBzdGF0dXMzKTsKIAl9IGVsc2UgaWYgKChscWlzdGF0MSAmIChMUUlQSEFTRV9MUXxMUUlQSEFTRV9OTFEpKSAhPSAwKSB7CkBAIC0yNTg3LDcgKzI1ODcsNyBAQAogCQkJc2NiaWQgPSBhaGRfZ2V0X3NjYnB0cihhaGQpOwogCQkJc2NiID0gYWhkX2xvb2t1cF9zY2IoYWhkLCBzY2JpZCk7CiAJCQlpZiAoc2NiID09IE5VTEwpIHsKLQkJCQlwcmludGYoIiVzOiBJbnZhbGlkIFNDQiAlZCBpbiBERkYlZCAiCisJCQkJcHJpbnRrKCIlczogSW52YWxpZCBTQ0IgJWQgaW4gREZGJWQgIgogCQkJCSAgICAgICAiZHVyaW5nIHVuZXhwZWN0ZWQgYnVzZnJlZVxuIiwKIAkJCQkgICAgICAgYWhkX25hbWUoYWhkKSwgc2NiaWQsIG1vZGUpOwogCQkJCXBhY2tldGl6ZWQgPSAwOwpAQCAtMjYyMCw3ICsyNjIwLDcgQEAKIAogI2lmZGVmIEFIRF9ERUJVRwogCQlpZiAoKGFoZF9kZWJ1ZyAmIEFIRF9TSE9XX01JU0MpICE9IDApCi0JCQlwcmludGYoIlNhdyBCdXNmcmVlLiAgQnVzZnJlZXRpbWUgPSAweCV4LlxuIiwKKwkJCXByaW50aygiU2F3IEJ1c2ZyZWUuICBCdXNmcmVldGltZSA9IDB4JXguXG4iLAogCQkJICAgICAgIGJ1c2ZyZWV0aW1lKTsKICNlbmRpZgogCQkvKgpAQCAtMjY2MSw3ICsyNjYxLDcgQEAKIAkJCWFoZF91bnBhdXNlKGFoZCk7CiAJCX0KIAl9IGVsc2UgewotCQlwcmludGYoIiVzOiBNaXNzaW5nIGNhc2UgaW4gYWhkX2hhbmRsZV9zY3NpaW50LiBzdGF0dXMgPSAleFxuIiwKKwkJcHJpbnRrKCIlczogTWlzc2luZyBjYXNlIGluIGFoZF9oYW5kbGVfc2NzaWludC4gc3RhdHVzID0gJXhcbiIsCiAJCSAgICAgICBhaGRfbmFtZShhaGQpLCBzdGF0dXMpOwogCQlhaGRfZHVtcF9jYXJkX3N0YXRlKGFoZCk7CiAJCWFoZF9jbGVhcl9pbnRzdGF0KGFoZCk7CkBAIC0yNjk3LDcgKzI2OTcsNyBAQAogCQkgfHwgKGxxaXN0YXRlID09IDB4MjkpKSB7CiAjaWZkZWYgQUhEX0RFQlVHCiAJCQlpZiAoKGFoZF9kZWJ1ZyAmIEFIRF9TSE9XX1JFQ09WRVJZKSAhPSAwKSB7Ci0JCQkJcHJpbnRmKCIlczogTkxRQ1JDIGZvdW5kIHZpYSBMUUlTVEFURVxuIiwKKwkJCQlwcmludGsoIiVzOiBOTFFDUkMgZm91bmQgdmlhIExRSVNUQVRFXG4iLAogCQkJCSAgICAgICBhaGRfbmFtZShhaGQpKTsKIAkJCX0KICNlbmRpZgpAQCAtMjcyOSwxOCArMjcyOSwxOCBAQAogCiAJY3VyX2NvbCA9IDA7CiAJaWYgKHNpbGVudCA9PSBGQUxTRSkgewotCQlwcmludGYoIiVzOiBUcmFuc21pc3Npb24gZXJyb3IgZGV0ZWN0ZWRcbiIsIGFoZF9uYW1lKGFoZCkpOworCQlwcmludGsoIiVzOiBUcmFuc21pc3Npb24gZXJyb3IgZGV0ZWN0ZWRcbiIsIGFoZF9uYW1lKGFoZCkpOwogCQlhaGRfbHFpc3RhdDFfcHJpbnQobHFpc3RhdDEsICZjdXJfY29sLCA1MCk7CiAJCWFoZF9sYXN0cGhhc2VfcHJpbnQobGFzdHBoYXNlLCAmY3VyX2NvbCwgNTApOwogCQlhaGRfc2NzaXNpZ2lfcHJpbnQoY3VycGhhc2UsICZjdXJfY29sLCA1MCk7CiAJCWFoZF9wZXJyZGlhZ19wcmludChwZXJyZGlhZywgJmN1cl9jb2wsIDUwKTsKLQkJcHJpbnRmKCJcbiIpOworCQlwcmludGsoIlxuIik7CiAJCWFoZF9kdW1wX2NhcmRfc3RhdGUoYWhkKTsKIAl9CiAKIAlpZiAoKGxxaXN0YXQxICYgKExRSU9WRVJJX0xRfExRSU9WRVJJX05MUSkpICE9IDApIHsKIAkJaWYgKHNpbGVudCA9PSBGQUxTRSkgewotCQkJcHJpbnRmKCIlczogR3Jvc3MgcHJvdG9jb2wgZXJyb3IgZHVyaW5nIGluY29taW5nICIKKwkJCXByaW50aygiJXM6IEdyb3NzIHByb3RvY29sIGVycm9yIGR1cmluZyBpbmNvbWluZyAiCiAJCQkgICAgICAgInBhY2tldC4gIGxxaXN0YXQxID09IDB4JXguICBSZXNldHRpbmcgYnVzLlxuIiwKIAkJCSAgICAgICBhaGRfbmFtZShhaGQpLCBscWlzdGF0MSk7CiAJCX0KQEAgLTI3NjksNyArMjc2OSw3IEBACiAJCSAqIChTUEk0UjA5IDEwLjcuMy4zLjMpCiAJCSAqLwogCQlhaGRfb3V0YihhaGQsIExRQ1RMMiwgTFFJUkVUUlkpOwotCQlwcmludGYoIkxRSVJldHJ5IGZvciBMUUlDUkNJX0xRIHRvIHJlbGVhc2UgQUNLXG4iKTsKKwkJcHJpbnRrKCJMUUlSZXRyeSBmb3IgTFFJQ1JDSV9MUSB0byByZWxlYXNlIEFDS1xuIik7CiAJfSBlbHNlIGlmICgobHFpc3RhdDEgJiBMUUlDUkNJX05MUSkgIT0gMCkgewogCQkvKgogCQkgKiBXZSBkZXRlY3RlZCBhIENSQyBlcnJvciBpbiBhIE5PTi1MUSBwYWNrZXQuCkBAIC0yODE3LDIyICsyODE3LDIyIEBACiAJCSAqIEJ1c2ZyZWUgZGV0ZWN0aW9uIGlzIGVuYWJsZWQuCiAJCSAqLwogCQlpZiAoc2lsZW50ID09IEZBTFNFKQotCQkJcHJpbnRmKCJMUUlDUkNfTkxRXG4iKTsKKwkJCXByaW50aygiTFFJQ1JDX05MUVxuIik7CiAJCWlmIChzY2IgPT0gTlVMTCkgewotCQkJcHJpbnRmKCIlczogTm8gU0NCIHZhbGlkIGZvciBMUUlDUkNfTkxRLiAgIgorCQkJcHJpbnRrKCIlczogTm8gU0NCIHZhbGlkIGZvciBMUUlDUkNfTkxRLiAgIgogCQkJICAgICAgICJSZXNldHRpbmcgYnVzXG4iLCBhaGRfbmFtZShhaGQpKTsKIAkJCWFoZF9yZXNldF9jaGFubmVsKGFoZCwgJ0EnLCAvKkluaXRpYXRlIFJlc2V0Ki9UUlVFKTsKIAkJCXJldHVybjsKIAkJfQogCX0gZWxzZSBpZiAoKGxxaXN0YXQxICYgTFFJQkFETFFJKSAhPSAwKSB7Ci0JCXByaW50ZigiTmVlZCB0byBoYW5kbGUgQkFETFFJIVxuIik7CisJCXByaW50aygiTmVlZCB0byBoYW5kbGUgQkFETFFJIVxuIik7CiAJCWFoZF9yZXNldF9jaGFubmVsKGFoZCwgJ0EnLCAvKkluaXRpYXRlIFJlc2V0Ki9UUlVFKTsKIAkJcmV0dXJuOwogCX0gZWxzZSBpZiAoKHBlcnJkaWFnICYgKFBBUklUWUVSUnxQUkVWUEhBU0UpKSA9PSBQQVJJVFlFUlIpIHsKIAkJaWYgKChjdXJwaGFzZSAmIH5QX0RBVEFJTl9EVCkgIT0gMCkgewogCQkJLyogQWNrIHRoZSBieXRlLiAgU28gd2UgY2FuIGNvbnRpbnVlLiAqLwogCQkJaWYgKHNpbGVudCA9PSBGQUxTRSkKLQkJCQlwcmludGYoIkFja2luZyAlcyB0byBjbGVhciBwZXJyb3JcbiIsCisJCQkJcHJpbnRrKCJBY2tpbmcgJXMgdG8gY2xlYXIgcGVycm9yXG4iLAogCQkJCSAgICBhaGRfbG9va3VwX3BoYXNlX2VudHJ5KGN1cnBoYXNlKS0+cGhhc2Vtc2cpOwogCQkJYWhkX2luYihhaGQsIFNDU0lEQVQpOwogCQl9CkBAIC0yODc3LDEwICsyODc3LDEwIEBACiAJaWYgKChhaGRfaW5iKGFoZCwgU0NTSVNJR08pICYgQVROTykgIT0gMAogCSAmJiAoYWhkX2luYihhaGQsIE1ERkZTVEFUKSAmIERMWkVSTykgIT0gMCkgewogCQlpZiAoKGxxaXN0YXQxICYgTFFJUEhBU0VfTFEpICE9IDApIHsKLQkJCXByaW50ZigiTFFJUkVUUlkgZm9yIExRSVBIQVNFX0xRXG4iKTsKKwkJCXByaW50aygiTFFJUkVUUlkgZm9yIExRSVBIQVNFX0xRXG4iKTsKIAkJCWFoZF9vdXRiKGFoZCwgTFFDVEwyLCBMUUlSRVRSWSk7CiAJCX0gZWxzZSBpZiAoKGxxaXN0YXQxICYgTFFJUEhBU0VfTkxRKSAhPSAwKSB7Ci0JCQlwcmludGYoIkxRSVJFVFJZIGZvciBMUUlQSEFTRV9OTFFcbiIpOworCQkJcHJpbnRrKCJMUUlSRVRSWSBmb3IgTFFJUEhBU0VfTkxRXG4iKTsKIAkJCWFoZF9vdXRiKGFoZCwgTFFDVEwyLCBMUUlSRVRSWSk7CiAJCX0gZWxzZQogCQkJcGFuaWMoImFoZF9oYW5kbGVfbHFpcGhhc2VfZXJyb3I6IE5vIHBoYXNlIGVycm9yc1xuIik7CkBAIC0yODg4LDcgKzI4ODgsNyBAQAogCQlhaGRfb3V0YihhaGQsIENMUklOVCwgQ0xSU0NTSUlOVCk7CiAJCWFoZF91bnBhdXNlKGFoZCk7CiAJfSBlbHNlIHsKLQkJcHJpbnRmKCJSZXNldGluZyBDaGFubmVsIGZvciBMUUkgUGhhc2UgZXJyb3JcbiIpOworCQlwcmludGsoIlJlc2V0aW5nIENoYW5uZWwgZm9yIExRSSBQaGFzZSBlcnJvclxuIik7CiAJCWFoZF9kdW1wX2NhcmRfc3RhdGUoYWhkKTsKIAkJYWhkX3Jlc2V0X2NoYW5uZWwoYWhkLCAnQScsIC8qSW5pdGlhdGUgUmVzZXQqL1RSVUUpOwogCX0KQEAgLTI5NzYsNyArMjk3Niw3IEBACiAJCWlmIChzY2ItPmNyY19yZXRyeV9jb3VudCA8IEFIRF9NQVhfTFFfQ1JDX0VSUk9SUykgewogCQkJaWYgKFNDQl9JU19TSUxFTlQoc2NiKSA9PSBGQUxTRSkgewogCQkJCWFoZF9wcmludF9wYXRoKGFoZCwgc2NiKTsKLQkJCQlwcmludGYoIlByb2JhYmxlIG91dGdvaW5nIExRIENSQyBlcnJvci4gICIKKwkJCQlwcmludGsoIlByb2JhYmxlIG91dGdvaW5nIExRIENSQyBlcnJvci4gICIKIAkJCQkgICAgICAgIlJldHJ5aW5nIGNvbW1hbmRcbiIpOwogCQkJfQogCQkJc2NiLT5jcmNfcmV0cnlfY291bnQrKzsKQEAgLTI5OTgsNyArMjk5OCw3IEBACiAJCWFoZF9vdXRiKGFoZCwgQ0xSU0lOVDEsIENMUlNDU0lQRVJSfENMUkJVU0ZSRUUpOwogI2lmZGVmIEFIRF9ERUJVRwogCQlpZiAoKGFoZF9kZWJ1ZyAmIEFIRF9TSE9XX01BU0tFRF9FUlJPUlMpICE9IDApCi0JCQlwcmludGYoIiVzOiBQYXJpdHkgb24gbGFzdCBSRVEgZGV0ZWN0ZWQgIgorCQkJcHJpbnRrKCIlczogUGFyaXR5IG9uIGxhc3QgUkVRIGRldGVjdGVkICIKIAkJCSAgICAgICAiZHVyaW5nIGJ1c2ZyZWUgcGhhc2UuXG4iLAogCQkJICAgICAgIGFoZF9uYW1lKGFoZCkpOwogI2VuZGlmCkBAIC0zMDEyLDcgKzMwMTIsNyBAQAogCQlzY2JpZCA9IGFoZF9nZXRfc2NicHRyKGFoZCk7CiAJCXNjYiA9IGFoZF9sb29rdXBfc2NiKGFoZCwgc2NiaWQpOwogCQlhaGRfcHJpbnRfcGF0aChhaGQsIHNjYik7Ci0JCXByaW50ZigiVW5leHBlY3RlZCBQS1QgYnVzZnJlZSBjb25kaXRpb25cbiIpOworCQlwcmludGsoIlVuZXhwZWN0ZWQgUEtUIGJ1c2ZyZWUgY29uZGl0aW9uXG4iKTsKIAkJYWhkX2R1bXBfY2FyZF9zdGF0ZShhaGQpOwogCQlhaGRfYWJvcnRfc2NicyhhaGQsIFNDQl9HRVRfVEFSR0VUKGFoZCwgc2NiKSwgJ0EnLAogCQkJICAgICAgIFNDQl9HRVRfTFVOKHNjYiksIFNDQl9HRVRfVEFHKHNjYiksCkBAIC0zMDIxLDcgKzMwMjEsNyBAQAogCQkvKiBSZXR1cm4gcmVzdGFydGluZyB0aGUgc2VxdWVuY2VyLiAqLwogCQlyZXR1cm4gKDEpOwogCX0KLQlwcmludGYoIiVzOiBVbmV4cGVjdGVkIFBLVCBidXNmcmVlIGNvbmRpdGlvblxuIiwgYWhkX25hbWUoYWhkKSk7CisJcHJpbnRrKCIlczogVW5leHBlY3RlZCBQS1QgYnVzZnJlZSBjb25kaXRpb25cbiIsIGFoZF9uYW1lKGFoZCkpOwogCWFoZF9kdW1wX2NhcmRfc3RhdGUoYWhkKTsKIAkvKiBSZXN0YXJ0IHRoZSBzZXF1ZW5jZXIuICovCiAJcmV0dXJuICgxKTsKQEAgLTMwNzYsMTQgKzMwNzYsMTQgQEAKIAogCQkJaWYgKHNjYiA9PSBOVUxMKSB7CiAJCQkJYWhkX3ByaW50X2RldmluZm8oYWhkLCAmZGV2aW5mbyk7Ci0JCQkJcHJpbnRmKCJBYm9ydCBmb3IgdW5pZGVudGlmaWVkICIKKwkJCQlwcmludGsoIkFib3J0IGZvciB1bmlkZW50aWZpZWQgIgogCQkJCSAgICAgICAiY29ubmVjdGlvbiBjb21wbGV0ZWQuXG4iKTsKIAkJCQkvKiByZXN0YXJ0IHRoZSBzZXF1ZW5jZXIuICovCiAJCQkJcmV0dXJuICgxKTsKIAkJCX0KIAkJCXNlbnRfbXNnID0gYWhkLT5tc2dvdXRfYnVmW2FoZC0+bXNnb3V0X2luZGV4IC0gMV07CiAJCQlhaGRfcHJpbnRfcGF0aChhaGQsIHNjYik7Ci0JCQlwcmludGYoIlNDQiAlZCAtIEFib3J0JXMgQ29tcGxldGVkLlxuIiwKKwkJCXByaW50aygiU0NCICVkIC0gQWJvcnQlcyBDb21wbGV0ZWQuXG4iLAogCQkJICAgICAgIFNDQl9HRVRfVEFHKHNjYiksCiAJCQkgICAgICAgc2VudF9tc2cgPT0gTVNHX0FCT1JUX1RBRyA/ICIiIDogIiBUYWciKTsKIApAQCAtMzEwOSw3ICszMTA5LDcgQEAKIAkJCWZvdW5kID0gYWhkX2Fib3J0X3NjYnMoYWhkLCB0YXJnZXQsICdBJywgc2F2ZWRfbHVuLAogCQkJCQkgICAgICAgdGFnLCBST0xFX0lOSVRJQVRPUiwKIAkJCQkJICAgICAgIENBTV9SRVFfQUJPUlRFRCk7Ci0JCQlwcmludGYoImZvdW5kID09IDB4JXhcbiIsIGZvdW5kKTsKKwkJCXByaW50aygiZm91bmQgPT0gMHgleFxuIiwgZm91bmQpOwogCQkJcHJpbnRlcnJvciA9IDA7CiAJCX0gZWxzZSBpZiAoYWhkX3NlbnRfbXNnKGFoZCwgQUhETVNHXzFCLAogCQkJCQlNU0dfQlVTX0RFVl9SRVNFVCwgVFJVRSkpIHsKQEAgLTMxNDcsNyArMzE0Nyw3IEBACiAJCQkgKi8KICNpZmRlZiBBSERfREVCVUcKIAkJCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfTUVTU0FHRVMpICE9IDApCi0JCQkJcHJpbnRmKCJQUFIgbmVnb3RpYXRpb24gcmVqZWN0ZWQgYnVzZnJlZS5cbiIpOworCQkJCXByaW50aygiUFBSIG5lZ290aWF0aW9uIHJlamVjdGVkIGJ1c2ZyZWUuXG4iKTsKICNlbmRpZgogCQkJdGluZm8gPSBhaGRfZmV0Y2hfdHJhbnNpbmZvKGFoZCwgZGV2aW5mby5jaGFubmVsLAogCQkJCQkJICAgIGRldmluZm8ub3VyX3Njc2lpZCwKQEAgLTMxOTEsNyArMzE5MSw3IEBACiAJCQkgKi8KICNpZmRlZiBBSERfREVCVUcKIAkJCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfTUVTU0FHRVMpICE9IDApCi0JCQkJcHJpbnRmKCJXRFRSIG5lZ290aWF0aW9uIHJlamVjdGVkIGJ1c2ZyZWUuXG4iKTsKKwkJCQlwcmludGsoIldEVFIgbmVnb3RpYXRpb24gcmVqZWN0ZWQgYnVzZnJlZS5cbiIpOwogI2VuZGlmCiAJCQlhaGRfc2V0X3dpZHRoKGFoZCwgJmRldmluZm8sCiAJCQkJICAgICAgTVNHX0VYVF9XRFRSX0JVU184X0JJVCwKQEAgLTMyMTYsNyArMzIxNiw3IEBACiAJCQkgKi8KICNpZmRlZiBBSERfREVCVUcKIAkJCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfTUVTU0FHRVMpICE9IDApCi0JCQkJcHJpbnRmKCJTRFRSIG5lZ290aWF0aW9uIHJlamVjdGVkIGJ1c2ZyZWUuXG4iKTsKKwkJCQlwcmludGsoIlNEVFIgbmVnb3RpYXRpb24gcmVqZWN0ZWQgYnVzZnJlZS5cbiIpOwogI2VuZGlmCiAJCQlhaGRfc2V0X3N5bmNyYXRlKGFoZCwgJmRldmluZm8sCiAJCQkJCS8qcGVyaW9kKi8wLCAvKm9mZnNldCovMCwKQEAgLTMyNDAsNyArMzI0MCw3IEBACiAKICNpZmRlZiBBSERfREVCVUcKIAkJCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfTUVTU0FHRVMpICE9IDApCi0JCQkJcHJpbnRmKCJFeHBlY3RlZCBJREUgQnVzZnJlZVxuIik7CisJCQkJcHJpbnRrKCJFeHBlY3RlZCBJREUgQnVzZnJlZVxuIik7CiAjZW5kaWYKIAkJCXByaW50ZXJyb3IgPSAwOwogCQl9IGVsc2UgaWYgKChhaGQtPm1zZ19mbGFncyAmIE1TR19GTEFHX0VYUEVDVF9RQVNSRUpfQlVTRlJFRSkKQEAgLTMyNDksNyArMzI0OSw3IEBACiAKICNpZmRlZiBBSERfREVCVUcKIAkJCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfTUVTU0FHRVMpICE9IDApCi0JCQkJcHJpbnRmKCJFeHBlY3RlZCBRQVMgUmVqZWN0IEJ1c2ZyZWVcbiIpOworCQkJCXByaW50aygiRXhwZWN0ZWQgUUFTIFJlamVjdCBCdXNmcmVlXG4iKTsKICNlbmRpZgogCQkJcHJpbnRlcnJvciA9IDA7CiAJCX0KQEAgLTMyNzUsNyArMzI3NSw3IEBACiAJCX0gZWxzZSB7CiAjaWZkZWYgQUhEX0RFQlVHCiAJCQlpZiAoKGFoZF9kZWJ1ZyAmIEFIRF9TSE9XX01FU1NBR0VTKSAhPSAwKQotCQkJCXByaW50ZigiUFBSIE5lZ290aWF0aW9uIEJ1c2ZyZWUuXG4iKTsKKwkJCQlwcmludGsoIlBQUiBOZWdvdGlhdGlvbiBCdXNmcmVlLlxuIik7CiAjZW5kaWYKIAkJCWFoZF9kb25lKGFoZCwgc2NiKTsKIAkJfQpAQCAtMzMwMiw5ICszMzAyLDkgQEAKIAkJCSAqIFdlIGhhZCBub3QgZnVsbHkgaWRlbnRpZmllZCB0aGlzIGNvbm5lY3Rpb24sCiAJCQkgKiBzbyB3ZSBjYW5ub3QgYWJvcnQgYW55dGhpbmcuCiAJCQkgKi8KLQkJCXByaW50ZigiJXM6ICIsIGFoZF9uYW1lKGFoZCkpOworCQkJcHJpbnRrKCIlczogIiwgYWhkX25hbWUoYWhkKSk7CiAJCX0KLQkJcHJpbnRmKCJVbmV4cGVjdGVkIGJ1c2ZyZWUgJXMsICVkIFNDQnMgYWJvcnRlZCwgIgorCQlwcmludGsoIlVuZXhwZWN0ZWQgYnVzZnJlZSAlcywgJWQgU0NCcyBhYm9ydGVkLCAiCiAJCSAgICAgICAiUFJHTUNOVCA9PSAweCV4XG4iLAogCQkgICAgICAgYWhkX2xvb2t1cF9waGFzZV9lbnRyeShsYXN0cGhhc2UpLT5waGFzZW1zZywKIAkJICAgICAgIGFib3J0ZWQsCkBAIC0zMzQyLDcgKzMzNDIsNyBAQAogCQkgKiB0byBtYXRjaC4KIAkJICovCiAJCWFoZF9wcmludF9kZXZpbmZvKGFoZCwgJmRldmluZm8pOwotCQlwcmludGYoIlRhcmdldCBkaWQgbm90IHNlbmQgYW4gSURFTlRJRlkgbWVzc2FnZS4gIgorCQlwcmludGsoIlRhcmdldCBkaWQgbm90IHNlbmQgYW4gSURFTlRJRlkgbWVzc2FnZS4gIgogCQkgICAgICAgIkxBU1RQSEFTRSA9IDB4JXguXG4iLCBsYXN0cGhhc2UpOwogCQlzY2IgPSBOVUxMOwogCX0gZWxzZSBpZiAoc2NiID09IE5VTEwpIHsKQEAgLTMzNTEsMTMgKzMzNTEsMTMgQEAKIAkJICogdHJhbnNhY3Rpb24uICBQcmludCBhbiBlcnJvciBhbmQgcmVzZXQgdGhlIGJ1cy4KIAkJICovCiAJCWFoZF9wcmludF9kZXZpbmZvKGFoZCwgJmRldmluZm8pOwotCQlwcmludGYoIk5vIFNDQiBmb3VuZCBkdXJpbmcgcHJvdG9jb2wgdmlvbGF0aW9uXG4iKTsKKwkJcHJpbnRrKCJObyBTQ0IgZm91bmQgZHVyaW5nIHByb3RvY29sIHZpb2xhdGlvblxuIik7CiAJCWdvdG8gcHJvdG9fdmlvbGF0aW9uX3Jlc2V0OwogCX0gZWxzZSB7CiAJCWFoZF9zZXRfdHJhbnNhY3Rpb25fc3RhdHVzKHNjYiwgQ0FNX1NFUVVFTkNFX0ZBSUwpOwogCQlpZiAoKHNlcV9mbGFncyAmIE5PX0NEQl9TRU5UKSAhPSAwKSB7CiAJCQlhaGRfcHJpbnRfcGF0aChhaGQsIHNjYik7Ci0JCQlwcmludGYoIk5vIG9yIGluY29tcGxldGUgQ0RCIHNlbnQgdG8gZGV2aWNlLlxuIik7CisJCQlwcmludGsoIk5vIG9yIGluY29tcGxldGUgQ0RCIHNlbnQgdG8gZGV2aWNlLlxuIik7CiAJCX0gZWxzZSBpZiAoKGFoZF9pbmJfc2NicmFtKGFoZCwgU0NCX0NPTlRST0wpCiAJCQkgICYgU1RBVFVTX1JDVkQpID09IDApIHsKIAkJCS8qCkBAIC0zMzY4LDEwICszMzY4LDEwIEBACiAJCQkgKiBtZXNzYWdlLgogCQkJICovCiAJCQlhaGRfcHJpbnRfcGF0aChhaGQsIHNjYik7Ci0JCQlwcmludGYoIkNvbXBsZXRlZCBjb21tYW5kIHdpdGhvdXQgc3RhdHVzLlxuIik7CisJCQlwcmludGsoIkNvbXBsZXRlZCBjb21tYW5kIHdpdGhvdXQgc3RhdHVzLlxuIik7CiAJCX0gZWxzZSB7CiAJCQlhaGRfcHJpbnRfcGF0aChhaGQsIHNjYik7Ci0JCQlwcmludGYoIlVua25vd24gcHJvdG9jb2wgdmlvbGF0aW9uLlxuIik7CisJCQlwcmludGsoIlVua25vd24gcHJvdG9jb2wgdmlvbGF0aW9uLlxuIik7CiAJCQlhaGRfZHVtcF9jYXJkX3N0YXRlKGFoZCk7CiAJCX0KIAl9CkBAIC0zMzg1LDcgKzMzODUsNyBAQAogCQkgKiBpdCBhd2F5IHdpdGggYSBidXMgcmVzZXQuCiAJCSAqLwogCQlmb3VuZCA9IGFoZF9yZXNldF9jaGFubmVsKGFoZCwgJ0EnLCBUUlVFKTsKLQkJcHJpbnRmKCIlczogSXNzdWVkIENoYW5uZWwgJWMgQnVzIFJlc2V0LiAiCisJCXByaW50aygiJXM6IElzc3VlZCBDaGFubmVsICVjIEJ1cyBSZXNldC4gIgogCQkgICAgICAgIiVkIFNDQnMgYWJvcnRlZFxuIiwgYWhkX25hbWUoYWhkKSwgJ0EnLCBmb3VuZCk7CiAJfSBlbHNlIHsKIAkJLyoKQEAgLTM0MDcsNyArMzQwNyw3IEBACiAJCQlhaGRfcHJpbnRfcGF0aChhaGQsIHNjYik7CiAJCQlzY2ItPmZsYWdzIHw9IFNDQl9BQk9SVDsKIAkJfQotCQlwcmludGYoIlByb3RvY29sIHZpb2xhdGlvbiAlcy4gIEF0dGVtcHRpbmcgdG8gYWJvcnQuXG4iLAorCQlwcmludGsoIlByb3RvY29sIHZpb2xhdGlvbiAlcy4gIEF0dGVtcHRpbmcgdG8gYWJvcnQuXG4iLAogCQkgICAgICAgYWhkX2xvb2t1cF9waGFzZV9lbnRyeShjdXJwaGFzZSktPnBoYXNlbXNnKTsKIAl9CiB9CkBAIC0zNDI1LDcgKzM0MjUsNyBAQAogI2lmZGVmIEFIRF9ERUJVRwogCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfTUVTU0FHRVMpICE9IDApIHsKIAkJYWhkX3ByaW50X2RldmluZm8oYWhkLCBkZXZpbmZvKTsKLQkJcHJpbnRmKCJGb3JjaW5nIHJlbmVnb3RpYXRpb25cbiIpOworCQlwcmludGsoIkZvcmNpbmcgcmVuZWdvdGlhdGlvblxuIik7CiAJfQogI2VuZGlmCiAJdGFyZ19pbmZvID0gYWhkX2ZldGNoX3RyYW5zaW5mbyhhaGQsCkBAIC0zNDg2LDcgKzM0ODYsNyBAQAogCQkJYnJlYWs7CiAKIAkJaWYgKHN0ZXBzID4gQUhEX01BWF9TVEVQUykgewotCQkJcHJpbnRmKCIlczogSW5maW5pdGUgbG9vcCBpbiBjcml0aWNhbCBzZWN0aW9uXG4iCisJCQlwcmludGsoIiVzOiBJbmZpbml0ZSBsb29wIGluIGNyaXRpY2FsIHNlY3Rpb25cbiIKIAkJCSAgICAgICAiJXM6IEZpcnN0IEluc3RydWN0aW9uIDB4JXggbm93IDB4JXhcbiIsCiAJCQkgICAgICAgYWhkX25hbWUoYWhkKSwgYWhkX25hbWUoYWhkKSwgZmlyc3RfaW5zdHIsCiAJCQkgICAgICAgc2VxYWRkcik7CkBAIC0zNDk3LDcgKzM0OTcsNyBAQAogCQlzdGVwcysrOwogI2lmZGVmIEFIRF9ERUJVRwogCQlpZiAoKGFoZF9kZWJ1ZyAmIEFIRF9TSE9XX01JU0MpICE9IDApCi0JCQlwcmludGYoIiVzOiBTaW5nbGUgc3RlcHBpbmcgYXQgMHgleFxuIiwgYWhkX25hbWUoYWhkKSwKKwkJCXByaW50aygiJXM6IFNpbmdsZSBzdGVwcGluZyBhdCAweCV4XG4iLCBhaGRfbmFtZShhaGQpLAogCQkJICAgICAgIHNlcWFkZHIpOwogI2VuZGlmCiAJCWlmIChzdGVwcGluZyA9PSBGQUxTRSkgewpAQCAtMzYwMSwxNiArMzYwMSwxNiBAQAogCWludCBpOwogCiAJaHNjYiA9IHNjYi0+aHNjYjsKLQlwcmludGYoInNjYjolcCBjb250cm9sOjB4JXggc2NzaWlkOjB4JXggbHVuOiVkIGNkYl9sZW46JWRcbiIsCisJcHJpbnRrKCJzY2I6JXAgY29udHJvbDoweCV4IHNjc2lpZDoweCV4IGx1bjolZCBjZGJfbGVuOiVkXG4iLAogCSAgICAgICAodm9pZCAqKXNjYiwKIAkgICAgICAgaHNjYi0+Y29udHJvbCwKIAkgICAgICAgaHNjYi0+c2NzaWlkLAogCSAgICAgICBoc2NiLT5sdW4sCiAJICAgICAgIGhzY2ItPmNkYl9sZW4pOwotCXByaW50ZigiU2hhcmVkIERhdGE6ICIpOworCXByaW50aygiU2hhcmVkIERhdGE6ICIpOwogCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoaHNjYi0+c2hhcmVkX2RhdGEuaWRhdGEuY2RiKTsgaSsrKQotCQlwcmludGYoIiUjMDJ4IiwgaHNjYi0+c2hhcmVkX2RhdGEuaWRhdGEuY2RiW2ldKTsKLQlwcmludGYoIiAgICAgICAgZGF0YXB0cjolI3gleCBkYXRhY250OiUjeCBzZ3B0cjolI3ggdGFnOiUjeFxuIiwKKwkJcHJpbnRrKCIlIzAyeCIsIGhzY2ItPnNoYXJlZF9kYXRhLmlkYXRhLmNkYltpXSk7CisJcHJpbnRrKCIgICAgICAgIGRhdGFwdHI6JSN4JXggZGF0YWNudDolI3ggc2dwdHI6JSN4IHRhZzolI3hcbiIsCiAJICAgICAgICh1aW50MzJfdCkoKGFoZF9sZTY0dG9oKGhzY2ItPmRhdGFwdHIpID4+IDMyKSAmIDB4RkZGRkZGRkYpLAogCSAgICAgICAodWludDMyX3QpKGFoZF9sZTY0dG9oKGhzY2ItPmRhdGFwdHIpICYgMHhGRkZGRkZGRiksCiAJICAgICAgIGFoZF9sZTMydG9oKGhzY2ItPmRhdGFjbnQpLApAQCAtMzYzNyw3ICszNjM3LDcgQEAKIAkgJiYgYWhkLT5lbmFibGVkX3RhcmdldHNbc2NzaV9pZF0gIT0gbWFzdGVyX3RzdGF0ZSkKIAkJcGFuaWMoIiVzOiBhaGRfYWxsb2NfdHN0YXRlIC0gVGFyZ2V0IGFscmVhZHkgYWxsb2NhdGVkIiwKIAkJICAgICAgYWhkX25hbWUoYWhkKSk7Ci0JdHN0YXRlID0gbWFsbG9jKHNpemVvZigqdHN0YXRlKSwgTV9ERVZCVUYsIE1fTk9XQUlUKTsKKwl0c3RhdGUgPSBrbWFsbG9jKHNpemVvZigqdHN0YXRlKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHRzdGF0ZSA9PSBOVUxMKQogCQlyZXR1cm4gKE5VTEwpOwogCkBAIC0zNjgyLDcgKzM2ODIsNyBAQAogCiAJdHN0YXRlID0gYWhkLT5lbmFibGVkX3RhcmdldHNbc2NzaV9pZF07CiAJaWYgKHRzdGF0ZSAhPSBOVUxMKQotCQlmcmVlKHRzdGF0ZSwgTV9ERVZCVUYpOworCQlrZnJlZSh0c3RhdGUpOwogCWFoZC0+ZW5hYmxlZF90YXJnZXRzW3Njc2lfaWRdID0gTlVMTDsKIH0KICNlbmRpZgpAQCAtMzk0MiwzNyArMzk0MiwzNyBAQAogCQkJaWYgKG9mZnNldCAhPSAwKSB7CiAJCQkJaW50IG9wdGlvbnM7CiAKLQkJCQlwcmludGYoIiVzOiB0YXJnZXQgJWQgc3luY2hyb25vdXMgd2l0aCAiCisJCQkJcHJpbnRrKCIlczogdGFyZ2V0ICVkIHN5bmNocm9ub3VzIHdpdGggIgogCQkJCSAgICAgICAicGVyaW9kID0gMHgleCwgb2Zmc2V0ID0gMHgleCIsCiAJCQkJICAgICAgIGFoZF9uYW1lKGFoZCksIGRldmluZm8tPnRhcmdldCwKIAkJCQkgICAgICAgcGVyaW9kLCBvZmZzZXQpOwogCQkJCW9wdGlvbnMgPSAwOwogCQkJCWlmICgocHByX29wdGlvbnMgJiBNU0dfRVhUX1BQUl9SRF9TVFJNKSAhPSAwKSB7Ci0JCQkJCXByaW50ZigiKFJEU1RSTSIpOworCQkJCQlwcmludGsoIihSRFNUUk0iKTsKIAkJCQkJb3B0aW9ucysrOwogCQkJCX0KIAkJCQlpZiAoKHBwcl9vcHRpb25zICYgTVNHX0VYVF9QUFJfRFRfUkVRKSAhPSAwKSB7Ci0JCQkJCXByaW50ZigiJXMiLCBvcHRpb25zID8gInxEVCIgOiAiKERUIik7CisJCQkJCXByaW50aygiJXMiLCBvcHRpb25zID8gInxEVCIgOiAiKERUIik7CiAJCQkJCW9wdGlvbnMrKzsKIAkJCQl9CiAJCQkJaWYgKChwcHJfb3B0aW9ucyAmIE1TR19FWFRfUFBSX0lVX1JFUSkgIT0gMCkgewotCQkJCQlwcmludGYoIiVzIiwgb3B0aW9ucyA/ICJ8SVUiIDogIihJVSIpOworCQkJCQlwcmludGsoIiVzIiwgb3B0aW9ucyA/ICJ8SVUiIDogIihJVSIpOwogCQkJCQlvcHRpb25zKys7CiAJCQkJfQogCQkJCWlmICgocHByX29wdGlvbnMgJiBNU0dfRVhUX1BQUl9SVEkpICE9IDApIHsKLQkJCQkJcHJpbnRmKCIlcyIsIG9wdGlvbnMgPyAifFJUSSIgOiAiKFJUSSIpOworCQkJCQlwcmludGsoIiVzIiwgb3B0aW9ucyA/ICJ8UlRJIiA6ICIoUlRJIik7CiAJCQkJCW9wdGlvbnMrKzsKIAkJCQl9CiAJCQkJaWYgKChwcHJfb3B0aW9ucyAmIE1TR19FWFRfUFBSX1FBU19SRVEpICE9IDApIHsKLQkJCQkJcHJpbnRmKCIlcyIsIG9wdGlvbnMgPyAifFFBUyIgOiAiKFFBUyIpOworCQkJCQlwcmludGsoIiVzIiwgb3B0aW9ucyA/ICJ8UUFTIiA6ICIoUUFTIik7CiAJCQkJCW9wdGlvbnMrKzsKIAkJCQl9CiAJCQkJaWYgKG9wdGlvbnMgIT0gMCkKLQkJCQkJcHJpbnRmKCIpXG4iKTsKKwkJCQkJcHJpbnRrKCIpXG4iKTsKIAkJCQllbHNlCi0JCQkJCXByaW50ZigiXG4iKTsKKwkJCQkJcHJpbnRrKCJcbiIpOwogCQkJfSBlbHNlIHsKLQkJCQlwcmludGYoIiVzOiB0YXJnZXQgJWQgdXNpbmcgIgorCQkJCXByaW50aygiJXM6IHRhcmdldCAlZCB1c2luZyAiCiAJCQkJICAgICAgICJhc3luY2hyb25vdXMgdHJhbnNmZXJzJXNcbiIsCiAJCQkJICAgICAgIGFoZF9uYW1lKGFoZCksIGRldmluZm8tPnRhcmdldCwKIAkJCQkgICAgICAgKHBwcl9vcHRpb25zICYgTVNHX0VYVF9QUFJfUUFTX1JFUSkgIT0gMApAQCAtNDAwMCw3ICs0MDAwLDcgQEAKICNpZmRlZiBBSERfREVCVUcKIAkJCQlpZiAoKGFoZF9kZWJ1ZyAmIEFIRF9TSE9XX01FU1NBR0VTKSAhPSAwKSB7CiAJCQkJCWFoZF9wcmludF9kZXZpbmZvKGFoZCwgZGV2aW5mbyk7Ci0JCQkJCXByaW50ZigiRXhwZWN0aW5nIElVIENoYW5nZSBidXNmcmVlXG4iKTsKKwkJCQkJcHJpbnRrKCJFeHBlY3RpbmcgSVUgQ2hhbmdlIGJ1c2ZyZWVcbiIpOwogCQkJCX0KICNlbmRpZgogCQkJCWFoZC0+bXNnX2ZsYWdzIHw9IE1TR19GTEFHX0VYUEVDVF9QUFJfQlVTRlJFRQpAQCAtNDAwOSw3ICs0MDA5LDcgQEAKIAkJCWlmICgob2xkX3BwciAmIE1TR19FWFRfUFBSX0lVX1JFUSkgIT0gMCkgewogI2lmZGVmIEFIRF9ERUJVRwogCQkJCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfTUVTU0FHRVMpICE9IDApCi0JCQkJCXByaW50ZigiUFBSIHdpdGggSVVfUkVRIG91dHN0YW5kaW5nXG4iKTsKKwkJCQkJcHJpbnRrKCJQUFIgd2l0aCBJVV9SRVEgb3V0c3RhbmRpbmdcbiIpOwogI2VuZGlmCiAJCQkJYWhkLT5tc2dfZmxhZ3MgfD0gTVNHX0ZMQUdfRVhQRUNUX1BQUl9CVVNGUkVFOwogCQkJfQpAQCAtNDA2MSw3ICs0MDYxLDcgQEAKIAkJYWhkX3NlbmRfYXN5bmMoYWhkLCBkZXZpbmZvLT5jaGFubmVsLCBkZXZpbmZvLT50YXJnZXQsCiAJCQkgICAgICAgQ0FNX0xVTl9XSUxEQ0FSRCwgQUNfVFJBTlNGRVJfTkVHKTsKIAkJaWYgKGJvb3R2ZXJib3NlKSB7Ci0JCQlwcmludGYoIiVzOiB0YXJnZXQgJWQgdXNpbmcgJWRiaXQgdHJhbnNmZXJzXG4iLAorCQkJcHJpbnRrKCIlczogdGFyZ2V0ICVkIHVzaW5nICVkYml0IHRyYW5zZmVyc1xuIiwKIAkJCSAgICAgICBhaGRfbmFtZShhaGQpLCBkZXZpbmZvLT50YXJnZXQsCiAJCQkgICAgICAgOCAqICgweDAxIDw8IHdpZHRoKSk7CiAJCX0KQEAgLTQzMzcsNyArNDMzNyw3IEBACiB2b2lkCiBhaGRfcHJpbnRfZGV2aW5mbyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHN0cnVjdCBhaGRfZGV2aW5mbyAqZGV2aW5mbykKIHsKLQlwcmludGYoIiVzOiVjOiVkOiVkOiAiLCBhaGRfbmFtZShhaGQpLCAnQScsCisJcHJpbnRrKCIlczolYzolZDolZDogIiwgYWhkX25hbWUoYWhkKSwgJ0EnLAogCSAgICAgICBkZXZpbmZvLT50YXJnZXQsIGRldmluZm8tPmx1bik7CiB9CiAKQEAgLTQ0MTksMTEgKzQ0MTksMTEgQEAKIAkJYWhkLT5tc2dfdHlwZSA9IE1TR19UWVBFX0lOSVRJQVRPUl9NU0dPVVQ7CiAjaWZkZWYgQUhEX0RFQlVHCiAJCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfTUVTU0FHRVMpICE9IDApCi0JCQlwcmludGYoIlNldHRpbmcgdXAgZm9yIFBhcml0eSBFcnJvciBkZWxpdmVyeVxuIik7CisJCQlwcmludGsoIlNldHRpbmcgdXAgZm9yIFBhcml0eSBFcnJvciBkZWxpdmVyeVxuIik7CiAjZW5kaWYKIAkJcmV0dXJuOwogCX0gZWxzZSBpZiAoc2NiID09IE5VTEwpIHsKLQkJcHJpbnRmKCIlczogV0FSTklORy4gTm8gcGVuZGluZyBtZXNzYWdlIGZvciAiCisJCXByaW50aygiJXM6IFdBUk5JTkcuIE5vIHBlbmRpbmcgbWVzc2FnZSBmb3IgIgogCQkgICAgICAgIklfVCBtc2dpbi4gIElzc3VpbmcgTk8tT1BcbiIsIGFoZF9uYW1lKGFoZCkpOwogCQlhaGQtPm1zZ291dF9idWZbYWhkLT5tc2dvdXRfaW5kZXgrK10gPSBNU0dfTk9PUDsKIAkJYWhkLT5tc2dvdXRfbGVuKys7CkBAIC00NDU0LDcgKzQ0NTQsNyBAQAogCQlhaGQtPm1zZ291dF9idWZbYWhkLT5tc2dvdXRfaW5kZXgrK10gPSBNU0dfQlVTX0RFVl9SRVNFVDsKIAkJYWhkLT5tc2dvdXRfbGVuKys7CiAJCWFoZF9wcmludF9wYXRoKGFoZCwgc2NiKTsKLQkJcHJpbnRmKCJCdXMgRGV2aWNlIFJlc2V0IE1lc3NhZ2UgU2VudFxuIik7CisJCXByaW50aygiQnVzIERldmljZSBSZXNldCBNZXNzYWdlIFNlbnRcbiIpOwogCQkvKgogCQkgKiBDbGVhciBvdXIgc2VsZWN0aW9uIGhhcmR3YXJlIGluIGFkdmFuY2Ugb2YKIAkJICogdGhlIGJ1c2ZyZWUuICBXZSBtYXkgaGF2ZSBhbiBlbnRyeSBpbiB0aGUgd2FpdGluZwpAQCAtNDQ3Miw3ICs0NDcyLDcgQEAKIAkJfQogCQlhaGQtPm1zZ291dF9sZW4rKzsKIAkJYWhkX3ByaW50X3BhdGgoYWhkLCBzY2IpOwotCQlwcmludGYoIkFib3J0JXMgTWVzc2FnZSBTZW50XG4iLAorCQlwcmludGsoIkFib3J0JXMgTWVzc2FnZSBTZW50XG4iLAogCQkgICAgICAgKHNjYi0+aHNjYi0+Y29udHJvbCAmIFRBR19FTkIpICE9IDAgPyAiIFRhZyIgOiAiIik7CiAJCS8qCiAJCSAqIENsZWFyIG91ciBzZWxlY3Rpb24gaGFyZHdhcmUgaW4gYWR2YW5jZSBvZgpAQCAtNDQ5Myw5ICs0NDkzLDkgQEAKIAkJICovCiAJCWFoZF9vdXRiKGFoZCwgU0NTSVNFUTAsIDApOwogCX0gZWxzZSB7Ci0JCXByaW50ZigiYWhkX2ludHI6IEFXQUlUSU5HX01TRyBmb3IgYW4gU0NCIHRoYXQgIgorCQlwcmludGsoImFoZF9pbnRyOiBBV0FJVElOR19NU0cgZm9yIGFuIFNDQiB0aGF0ICIKIAkJICAgICAgICJkb2VzIG5vdCBoYXZlIGEgd2FpdGluZyBtZXNzYWdlXG4iKTsKLQkJcHJpbnRmKCJTQ1NJSUQgPSAleCwgdGFyZ2V0X21hc2sgPSAleFxuIiwgc2NiLT5oc2NiLT5zY3NpaWQsCisJCXByaW50aygiU0NTSUlEID0gJXgsIHRhcmdldF9tYXNrID0gJXhcbiIsIHNjYi0+aHNjYi0+c2NzaWlkLAogCQkgICAgICAgZGV2aW5mby0+dGFyZ2V0X21hc2spOwogCQlwYW5pYygiU0NCID0gJWQsIFNDQiBDb250cm9sID0gJXg6JXgsIE1TR19PVVQgPSAleCAiCiAJCSAgICAgICJTQ0IgZmxhZ3MgPSAleCIsIFNDQl9HRVRfVEFHKHNjYiksIHNjYi0+aHNjYi0+Y29udHJvbCwKQEAgLTQ1NzcsNyArNDU3Nyw3IEBACiAKIAkJaWYgKGJvb3R2ZXJib3NlKSB7CiAJCQlhaGRfcHJpbnRfZGV2aW5mbyhhaGQsIGRldmluZm8pOwotCQkJcHJpbnRmKCJFbnN1cmluZyBhc3luY1xuIik7CisJCQlwcmludGsoIkVuc3VyaW5nIGFzeW5jXG4iKTsKIAkJfQogCX0KIAkvKiBUYXJnZXQgaW5pdGlhdGVkIFBQUiBpcyBub3QgYWxsb3dlZCBpbiB0aGUgU0NTSSBzcGVjICovCkBAIC00NjI0LDcgKzQ2MjQsNyBAQAogCQkJYWhkLT5tc2dvdXRfYnVmICsgYWhkLT5tc2dvdXRfaW5kZXgsIHBlcmlvZCwgb2Zmc2V0KTsKIAlhaGQtPm1zZ291dF9sZW4gKz0gNTsKIAlpZiAoYm9vdHZlcmJvc2UpIHsKLQkJcHJpbnRmKCIoJXM6JWM6JWQ6JWQpOiBTZW5kaW5nIFNEVFIgcGVyaW9kICV4LCBvZmZzZXQgJXhcbiIsCisJCXByaW50aygiKCVzOiVjOiVkOiVkKTogU2VuZGluZyBTRFRSIHBlcmlvZCAleCwgb2Zmc2V0ICV4XG4iLAogCQkgICAgICAgYWhkX25hbWUoYWhkKSwgZGV2aW5mby0+Y2hhbm5lbCwgZGV2aW5mby0+dGFyZ2V0LAogCQkgICAgICAgZGV2aW5mby0+bHVuLCBwZXJpb2QsIG9mZnNldCk7CiAJfQpAQCAtNDY0Miw3ICs0NjQyLDcgQEAKIAkJCWFoZC0+bXNnb3V0X2J1ZiArIGFoZC0+bXNnb3V0X2luZGV4LCBidXNfd2lkdGgpOwogCWFoZC0+bXNnb3V0X2xlbiArPSA0OwogCWlmIChib290dmVyYm9zZSkgewotCQlwcmludGYoIiglczolYzolZDolZCk6IFNlbmRpbmcgV0RUUiAleFxuIiwKKwkJcHJpbnRrKCIoJXM6JWM6JWQ6JWQpOiBTZW5kaW5nIFdEVFIgJXhcbiIsCiAJCSAgICAgICBhaGRfbmFtZShhaGQpLCBkZXZpbmZvLT5jaGFubmVsLCBkZXZpbmZvLT50YXJnZXQsCiAJCSAgICAgICBkZXZpbmZvLT5sdW4sIGJ1c193aWR0aCk7CiAJfQpAQCAtNDY3MSw3ICs0NjcxLDcgQEAKIAkJCWJ1c193aWR0aCwgcHByX29wdGlvbnMpOwogCWFoZC0+bXNnb3V0X2xlbiArPSA4OwogCWlmIChib290dmVyYm9zZSkgewotCQlwcmludGYoIiglczolYzolZDolZCk6IFNlbmRpbmcgUFBSIGJ1c193aWR0aCAleCwgcGVyaW9kICV4LCAiCisJCXByaW50aygiKCVzOiVjOiVkOiVkKTogU2VuZGluZyBQUFIgYnVzX3dpZHRoICV4LCBwZXJpb2QgJXgsICIKIAkJICAgICAgICJvZmZzZXQgJXgsIHBwcl9vcHRpb25zICV4XG4iLCBhaGRfbmFtZShhaGQpLAogCQkgICAgICAgZGV2aW5mby0+Y2hhbm5lbCwgZGV2aW5mby0+dGFyZ2V0LCBkZXZpbmZvLT5sdW4sCiAJCSAgICAgICBidXNfd2lkdGgsIHBlcmlvZCwgb2Zmc2V0LCBwcHJfb3B0aW9ucyk7CkBAIC00NzIxLDcgKzQ3MjEsNyBAQAogCWJ1c19waGFzZSA9IGFoZF9pbmIoYWhkLCBMQVNUUEhBU0UpOwogCiAJaWYgKChhaGRfaW5iKGFoZCwgTFFJU1RBVDIpICYgTFFJUEhBU0VfT1VUUEtUKSAhPSAwKSB7Ci0JCXByaW50ZigiTFFJUkVUUlkgZm9yIExRSVBIQVNFX09VVFBLVFxuIik7CisJCXByaW50aygiTFFJUkVUUlkgZm9yIExRSVBIQVNFX09VVFBLVFxuIik7CiAJCWFoZF9vdXRiKGFoZCwgTFFDVEwyLCBMUUlSRVRSWSk7CiAJfQogcmVzd2l0Y2g6CkBAIC00NzM4LDE0ICs0NzM4LDE0IEBACiAjaWZkZWYgQUhEX0RFQlVHCiAJCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfTUVTU0FHRVMpICE9IDApIHsKIAkJCWFoZF9wcmludF9kZXZpbmZvKGFoZCwgJmRldmluZm8pOwotCQkJcHJpbnRmKCJJTklUSUFUT1JfTVNHX09VVCIpOworCQkJcHJpbnRrKCJJTklUSUFUT1JfTVNHX09VVCIpOwogCQl9CiAjZW5kaWYKIAkJcGhhc2VtaXMgPSBidXNfcGhhc2UgIT0gUF9NRVNHT1VUOwogCQlpZiAocGhhc2VtaXMpIHsKICNpZmRlZiBBSERfREVCVUcKIAkJCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfTUVTU0FHRVMpICE9IDApIHsKLQkJCQlwcmludGYoIiBQSEFTRU1JUyAlc1xuIiwKKwkJCQlwcmludGsoIiBQSEFTRU1JUyAlc1xuIiwKIAkJCQkgICAgICAgYWhkX2xvb2t1cF9waGFzZV9lbnRyeShidXNfcGhhc2UpCiAJCQkJCQkJICAgICAtPnBoYXNlbXNnKTsKIAkJCX0KQEAgLTQ3NzIsNyArNDc3Miw3IEBACiAJCQlhaGRfb3V0YihhaGQsIENMUlNJTlQxLCBDTFJSRVFJTklUKTsKICNpZmRlZiBBSERfREVCVUcKIAkJCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfTUVTU0FHRVMpICE9IDApCi0JCQkJcHJpbnRmKCIgYnl0ZSAweCV4XG4iLCBhaGQtPnNlbmRfbXNnX3BlcnJvcik7CisJCQkJcHJpbnRrKCIgYnl0ZSAweCV4XG4iLCBhaGQtPnNlbmRfbXNnX3BlcnJvcik7CiAjZW5kaWYKIAkJCS8qCiAJCQkgKiBJZiB3ZSBhcmUgbm90aWZ5aW5nIHRoZSB0YXJnZXQgb2YgYSBDUkMgZXJyb3IKQEAgLTQ4MTMsNyArNDgxMyw3IEBACiAJCWFoZF9vdXRiKGFoZCwgQ0xSU0lOVDEsIENMUlJFUUlOSVQpOwogI2lmZGVmIEFIRF9ERUJVRwogCQlpZiAoKGFoZF9kZWJ1ZyAmIEFIRF9TSE9XX01FU1NBR0VTKSAhPSAwKQotCQkJcHJpbnRmKCIgYnl0ZSAweCV4XG4iLAorCQkJcHJpbnRrKCIgYnl0ZSAweCV4XG4iLAogCQkJICAgICAgIGFoZC0+bXNnb3V0X2J1ZlthaGQtPm1zZ291dF9pbmRleF0pOwogI2VuZGlmCiAJCWFoZF9vdXRiKGFoZCwgUkVUVVJOXzIsIGFoZC0+bXNnb3V0X2J1ZlthaGQtPm1zZ291dF9pbmRleCsrXSk7CkBAIC00ODI4LDE0ICs0ODI4LDE0IEBACiAjaWZkZWYgQUhEX0RFQlVHCiAJCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfTUVTU0FHRVMpICE9IDApIHsKIAkJCWFoZF9wcmludF9kZXZpbmZvKGFoZCwgJmRldmluZm8pOwotCQkJcHJpbnRmKCJJTklUSUFUT1JfTVNHX0lOIik7CisJCQlwcmludGsoIklOSVRJQVRPUl9NU0dfSU4iKTsKIAkJfQogI2VuZGlmCiAJCXBoYXNlbWlzID0gYnVzX3BoYXNlICE9IFBfTUVTR0lOOwogCQlpZiAocGhhc2VtaXMpIHsKICNpZmRlZiBBSERfREVCVUcKIAkJCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfTUVTU0FHRVMpICE9IDApIHsKLQkJCQlwcmludGYoIiBQSEFTRU1JUyAlc1xuIiwKKwkJCQlwcmludGsoIiBQSEFTRU1JUyAlc1xuIiwKIAkJCQkgICAgICAgYWhkX2xvb2t1cF9waGFzZV9lbnRyeShidXNfcGhhc2UpCiAJCQkJCQkJICAgICAtPnBoYXNlbXNnKTsKIAkJCX0KQEAgLTQ4NTYsNyArNDg1Niw3IEBACiAJCWFoZC0+bXNnaW5fYnVmW2FoZC0+bXNnaW5faW5kZXhdID0gYWhkX2luYihhaGQsIFNDU0lCVVMpOwogI2lmZGVmIEFIRF9ERUJVRwogCQlpZiAoKGFoZF9kZWJ1ZyAmIEFIRF9TSE9XX01FU1NBR0VTKSAhPSAwKQotCQkJcHJpbnRmKCIgYnl0ZSAweCV4XG4iLAorCQkJcHJpbnRrKCIgYnl0ZSAweCV4XG4iLAogCQkJICAgICAgIGFoZC0+bXNnaW5fYnVmW2FoZC0+bXNnaW5faW5kZXhdKTsKICNlbmRpZgogCkBAIC00ODc4LDcgKzQ4NzgsNyBAQAogI2lmZGVmIEFIRF9ERUJVRwogCQkJCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfTUVTU0FHRVMpICE9IDApIHsKIAkJCQkJYWhkX3ByaW50X2RldmluZm8oYWhkLCAmZGV2aW5mbyk7Ci0JCQkJCXByaW50ZigiQXNzZXJ0aW5nIEFUTiBmb3IgcmVzcG9uc2VcbiIpOworCQkJCQlwcmludGsoIkFzc2VydGluZyBBVE4gZm9yIHJlc3BvbnNlXG4iKTsKIAkJCQl9CiAjZW5kaWYKIAkJCQlhaGRfYXNzZXJ0X2F0bihhaGQpOwpAQCAtNTAyNiw3ICs1MDI2LDcgQEAKIAogCWlmIChlbmRfc2Vzc2lvbikgewogCQlpZiAoKGFoZC0+bXNnX2ZsYWdzICYgTVNHX0ZMQUdfUEFDS0VUSVpFRCkgIT0gMCkgewotCQkJcHJpbnRmKCIlczogUmV0dXJuaW5nIHRvIElkbGUgTG9vcFxuIiwKKwkJCXByaW50aygiJXM6IFJldHVybmluZyB0byBJZGxlIExvb3BcbiIsCiAJCQkgICAgICAgYWhkX25hbWUoYWhkKSk7CiAJCQlhaGRfY2xlYXJfbXNnX3N0YXRlKGFoZCk7CiAKQEAgLTUxNzgsNyArNTE3OCw3IEBACiAJCQlhaGRfdmFsaWRhdGVfb2Zmc2V0KGFoZCwgdGluZm8sIHBlcmlvZCwgJm9mZnNldCwKIAkJCQkJICAgIHRpbmZvLT5jdXJyLndpZHRoLCBkZXZpbmZvLT5yb2xlKTsKIAkJCWlmIChib290dmVyYm9zZSkgewotCQkJCXByaW50ZigiKCVzOiVjOiVkOiVkKTogUmVjZWl2ZWQgIgorCQkJCXByaW50aygiKCVzOiVjOiVkOiVkKTogUmVjZWl2ZWQgIgogCQkJCSAgICAgICAiU0RUUiBwZXJpb2QgJXgsIG9mZnNldCAleFxuXHQiCiAJCQkJICAgICAgICJGaWx0ZXJlZCB0byBwZXJpb2QgJXgsIG9mZnNldCAleFxuIiwKIAkJCQkgICAgICAgYWhkX25hbWUoYWhkKSwgZGV2aW5mby0+Y2hhbm5lbCwKQEAgLTUyMDgsNyArNTIwOCw3IEBACiAJCQkJICovCiAJCQkJaWYgKGJvb3R2ZXJib3NlCiAJCQkJICYmIGRldmluZm8tPnJvbGUgPT0gUk9MRV9JTklUSUFUT1IpIHsKLQkJCQkJcHJpbnRmKCIoJXM6JWM6JWQ6JWQpOiBUYXJnZXQgIgorCQkJCQlwcmludGsoIiglczolYzolZDolZCk6IFRhcmdldCAiCiAJCQkJCSAgICAgICAiSW5pdGlhdGVkIFNEVFJcbiIsCiAJCQkJCSAgICAgICBhaGRfbmFtZShhaGQpLCBkZXZpbmZvLT5jaGFubmVsLAogCQkJCQkgICAgICAgZGV2aW5mby0+dGFyZ2V0LCBkZXZpbmZvLT5sdW4pOwpAQCAtNTI1MCw3ICs1MjUwLDcgQEAKIAkJCWFoZF92YWxpZGF0ZV93aWR0aChhaGQsIHRpbmZvLCAmYnVzX3dpZHRoLAogCQkJCQkgICBkZXZpbmZvLT5yb2xlKTsKIAkJCWlmIChib290dmVyYm9zZSkgewotCQkJCXByaW50ZigiKCVzOiVjOiVkOiVkKTogUmVjZWl2ZWQgV0RUUiAiCisJCQkJcHJpbnRrKCIoJXM6JWM6JWQ6JWQpOiBSZWNlaXZlZCBXRFRSICIKIAkJCQkgICAgICAgIiV4IGZpbHRlcmVkIHRvICV4XG4iLAogCQkJCSAgICAgICBhaGRfbmFtZShhaGQpLCBkZXZpbmZvLT5jaGFubmVsLAogCQkJCSAgICAgICBkZXZpbmZvLT50YXJnZXQsIGRldmluZm8tPmx1biwKQEAgLTUyNjYsNyArNTI2Niw3IEBACiAJCQkJICovCiAJCQkJaWYgKHNhdmVkX3dpZHRoID4gYnVzX3dpZHRoKSB7CiAJCQkJCXJlamVjdCA9IFRSVUU7Ci0JCQkJCXByaW50ZigiKCVzOiVjOiVkOiVkKTogcmVxdWVzdGVkICVkQml0ICIKKwkJCQkJcHJpbnRrKCIoJXM6JWM6JWQ6JWQpOiByZXF1ZXN0ZWQgJWRCaXQgIgogCQkJCQkgICAgICAgInRyYW5zZmVycy4gIFJlamVjdGluZy4uLlxuIiwKIAkJCQkJICAgICAgIGFoZF9uYW1lKGFoZCksIGRldmluZm8tPmNoYW5uZWwsCiAJCQkJCSAgICAgICBkZXZpbmZvLT50YXJnZXQsIGRldmluZm8tPmx1biwKQEAgLTUyNzksNyArNTI3OSw3IEBACiAJCQkJICovCiAJCQkJaWYgKGJvb3R2ZXJib3NlCiAJCQkJICYmIGRldmluZm8tPnJvbGUgPT0gUk9MRV9JTklUSUFUT1IpIHsKLQkJCQkJcHJpbnRmKCIoJXM6JWM6JWQ6JWQpOiBUYXJnZXQgIgorCQkJCQlwcmludGsoIiglczolYzolZDolZCk6IFRhcmdldCAiCiAJCQkJCSAgICAgICAiSW5pdGlhdGVkIFdEVFJcbiIsCiAJCQkJCSAgICAgICBhaGRfbmFtZShhaGQpLCBkZXZpbmZvLT5jaGFubmVsLAogCQkJCQkgICAgICAgZGV2aW5mby0+dGFyZ2V0LCBkZXZpbmZvLT5sdW4pOwpAQCAtNTM5MSwxMiArNTM5MSwxMiBAQAogCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJaWYgKGRldmluZm8tPnJvbGUgIT0gUk9MRV9UQVJHRVQpCi0JCQkJCXByaW50ZigiKCVzOiVjOiVkOiVkKTogVGFyZ2V0ICIKKwkJCQkJcHJpbnRrKCIoJXM6JWM6JWQ6JWQpOiBUYXJnZXQgIgogCQkJCQkgICAgICAgIkluaXRpYXRlZCBQUFJcbiIsCiAJCQkJCSAgICAgICBhaGRfbmFtZShhaGQpLCBkZXZpbmZvLT5jaGFubmVsLAogCQkJCQkgICAgICAgZGV2aW5mby0+dGFyZ2V0LCBkZXZpbmZvLT5sdW4pOwogCQkJCWVsc2UKLQkJCQkJcHJpbnRmKCIoJXM6JWM6JWQ6JWQpOiBJbml0aWF0b3IgIgorCQkJCQlwcmludGsoIiglczolYzolZDolZCk6IEluaXRpYXRvciAiCiAJCQkJCSAgICAgICAiSW5pdGlhdGVkIFBQUlxuIiwKIAkJCQkJICAgICAgIGFoZF9uYW1lKGFoZCksIGRldmluZm8tPmNoYW5uZWwsCiAJCQkJCSAgICAgICBkZXZpbmZvLT50YXJnZXQsIGRldmluZm8tPmx1bik7CkBAIC01NDA4LDcgKzU0MDgsNyBAQAogCQkJCXJlc3BvbnNlID0gVFJVRTsKIAkJCX0KIAkJCWlmIChib290dmVyYm9zZSkgewotCQkJCXByaW50ZigiKCVzOiVjOiVkOiVkKTogUmVjZWl2ZWQgUFBSIHdpZHRoICV4LCAiCisJCQkJcHJpbnRrKCIoJXM6JWM6JWQ6JWQpOiBSZWNlaXZlZCBQUFIgd2lkdGggJXgsICIKIAkJCQkgICAgICAgInBlcmlvZCAleCwgb2Zmc2V0ICV4LG9wdGlvbnMgJXhcbiIKIAkJCQkgICAgICAgIlx0RmlsdGVyZWQgdG8gd2lkdGggJXgsIHBlcmlvZCAleCwgIgogCQkJCSAgICAgICAib2Zmc2V0ICV4LCBvcHRpb25zICV4XG4iLApAQCAtNTQ4NCw3ICs1NDg0LDcgQEAKIAljYXNlIE1TR19RQVNfUkVRVUVTVDoKICNpZmRlZiBBSERfREVCVUcKIAkJaWYgKChhaGRfZGVidWcgJiBBSERfU0hPV19NRVNTQUdFUykgIT0gMCkKLQkJCXByaW50ZigiJXM6IFFBUyByZXF1ZXN0LiAgU0NTSVNJR0kgPT0gMHgleFxuIiwKKwkJCXByaW50aygiJXM6IFFBUyByZXF1ZXN0LiAgU0NTSVNJR0kgPT0gMHgleFxuIiwKIAkJCSAgICAgICBhaGRfbmFtZShhaGQpLCBhaGRfaW5iKGFoZCwgU0NTSVNJR0kpKTsKICNlbmRpZgogCQlhaGQtPm1zZ19mbGFncyB8PSBNU0dfRkxBR19FWFBFQ1RfUUFTUkVKX0JVU0ZSRUU7CkBAIC01NTQ5LDcgKzU1NDksNyBAQAogCQkJICogb2ZmIHRoZXNlIG9wdGlvbnMuCiAJCQkgKi8KIAkJCWlmIChib290dmVyYm9zZSkgewotCQkJCXByaW50ZigiKCVzOiVjOiVkOiVkKTogUFBSIFJlamVjdGVkLiAiCisJCQkJcHJpbnRrKCIoJXM6JWM6JWQ6JWQpOiBQUFIgUmVqZWN0ZWQuICIKIAkJCQkgICAgICAgIlRyeWluZyBzaW1wbGUgVTE2MCBQUFJcbiIsCiAJCQkJICAgICAgIGFoZF9uYW1lKGFoZCksIGRldmluZm8tPmNoYW5uZWwsCiAJCQkJICAgICAgIGRldmluZm8tPnRhcmdldCwgZGV2aW5mby0+bHVuKTsKQEAgLTU1NjQsNyArNTU2NCw3IEBACiAJCQkgKiBBdHRlbXB0IHRvIG5lZ290aWF0ZSBTUEktMiBzdHlsZS4KIAkJCSAqLwogCQkJaWYgKGJvb3R2ZXJib3NlKSB7Ci0JCQkJcHJpbnRmKCIoJXM6JWM6JWQ6JWQpOiBQUFIgUmVqZWN0ZWQuICIKKwkJCQlwcmludGsoIiglczolYzolZDolZCk6IFBQUiBSZWplY3RlZC4gIgogCQkJCSAgICAgICAiVHJ5aW5nIFdEVFIvU0RUUlxuIiwKIAkJCQkgICAgICAgYWhkX25hbWUoYWhkKSwgZGV2aW5mby0+Y2hhbm5lbCwKIAkJCQkgICAgICAgZGV2aW5mby0+dGFyZ2V0LCBkZXZpbmZvLT5sdW4pOwpAQCAtNTU4MSw3ICs1NTgxLDcgQEAKIAl9IGVsc2UgaWYgKGFoZF9zZW50X21zZyhhaGQsIEFIRE1TR19FWFQsIE1TR19FWFRfV0RUUiwgLypmdWxsKi9GQUxTRSkpIHsKIAogCQkvKiBub3RlIDhiaXQgeGZlcnMgKi8KLQkJcHJpbnRmKCIoJXM6JWM6JWQ6JWQpOiByZWZ1c2VzIFdJREUgbmVnb3RpYXRpb24uICBVc2luZyAiCisJCXByaW50aygiKCVzOiVjOiVkOiVkKTogcmVmdXNlcyBXSURFIG5lZ290aWF0aW9uLiAgVXNpbmcgIgogCQkgICAgICAgIjhiaXQgdHJhbnNmZXJzXG4iLCBhaGRfbmFtZShhaGQpLAogCQkgICAgICAgZGV2aW5mby0+Y2hhbm5lbCwgZGV2aW5mby0+dGFyZ2V0LCBkZXZpbmZvLT5sdW4pOwogCQlhaGRfc2V0X3dpZHRoKGFoZCwgZGV2aW5mbywgTVNHX0VYVF9XRFRSX0JVU184X0JJVCwKQEAgLTU2MDksNyArNTYwOSw3IEBACiAJCQkJIC8qb2Zmc2V0Ki8wLCAvKnBwcl9vcHRpb25zKi8wLAogCQkJCSBBSERfVFJBTlNfQUNUSVZFfEFIRF9UUkFOU19HT0FMLAogCQkJCSAvKnBhdXNlZCovVFJVRSk7Ci0JCXByaW50ZigiKCVzOiVjOiVkOiVkKTogcmVmdXNlcyBzeW5jaHJvbm91cyBuZWdvdGlhdGlvbi4gIgorCQlwcmludGsoIiglczolYzolZDolZCk6IHJlZnVzZXMgc3luY2hyb25vdXMgbmVnb3RpYXRpb24uICIKIAkJICAgICAgICJVc2luZyBhc3luY2hyb25vdXMgdHJhbnNmZXJzXG4iLAogCQkgICAgICAgYWhkX25hbWUoYWhkKSwgZGV2aW5mby0+Y2hhbm5lbCwKIAkJICAgICAgIGRldmluZm8tPnRhcmdldCwgZGV2aW5mby0+bHVuKTsKQEAgLTU2MjAsMTMgKzU2MjAsMTMgQEAKIAkJdGFnX3R5cGUgPSAoc2NiLT5oc2NiLT5jb250cm9sICYgTVNHX1NJTVBMRV9UQVNLKTsKIAogCQlpZiAodGFnX3R5cGUgPT0gTVNHX1NJTVBMRV9UQVNLKSB7Ci0JCQlwcmludGYoIiglczolYzolZDolZCk6IHJlZnVzZXMgdGFnZ2VkIGNvbW1hbmRzLiAgIgorCQkJcHJpbnRrKCIoJXM6JWM6JWQ6JWQpOiByZWZ1c2VzIHRhZ2dlZCBjb21tYW5kcy4gICIKIAkJCSAgICAgICAiUGVyZm9ybWluZyBub24tdGFnZ2VkIEkvT1xuIiwgYWhkX25hbWUoYWhkKSwKIAkJCSAgICAgICBkZXZpbmZvLT5jaGFubmVsLCBkZXZpbmZvLT50YXJnZXQsIGRldmluZm8tPmx1bik7CiAJCQlhaGRfc2V0X3RhZ3MoYWhkLCBzY2ItPmlvX2N0eCwgZGV2aW5mbywgQUhEX1FVRVVFX05PTkUpOwogCQkJbWFzayA9IH4weDIzOwogCQl9IGVsc2UgewotCQkJcHJpbnRmKCIoJXM6JWM6JWQ6JWQpOiByZWZ1c2VzICVzIHRhZ2dlZCBjb21tYW5kcy4gICIKKwkJCXByaW50aygiKCVzOiVjOiVkOiVkKTogcmVmdXNlcyAlcyB0YWdnZWQgY29tbWFuZHMuICAiCiAJCQkgICAgICAgIlBlcmZvcm1pbmcgc2ltcGxlIHF1ZXVlIHRhZ2dlZCBJL08gb25seVxuIiwKIAkJCSAgICAgICBhaGRfbmFtZShhaGQpLCBkZXZpbmZvLT5jaGFubmVsLCBkZXZpbmZvLT50YXJnZXQsCiAJCQkgICAgICAgZGV2aW5mby0+bHVuLCB0YWdfdHlwZSA9PSBNU0dfT1JERVJFRF9UQVNLCkBAIC01Njc3LDcgKzU2NzcsNyBAQAogCQkvKgogCQkgKiBPdGhlcndpc2UsIHdlIGlnbm9yZSBpdC4KIAkJICovCi0JCXByaW50ZigiJXM6JWM6JWQ6IE1lc3NhZ2UgcmVqZWN0IGZvciAleCAtLSBpZ25vcmVkXG4iLAorCQlwcmludGsoIiVzOiVjOiVkOiBNZXNzYWdlIHJlamVjdCBmb3IgJXggLS0gaWdub3JlZFxuIiwKIAkJICAgICAgIGFoZF9uYW1lKGFoZCksIGRldmluZm8tPmNoYW5uZWwsIGRldmluZm8tPnRhcmdldCwKIAkJICAgICAgIGxhc3RfbXNnKTsKIAl9CkBAIC01ODY0LDcgKzU4NjQsNyBAQAogCQlhaGRfZGVsYXkoMTAwKTsKIAlpZiAod2FpdCA9PSAwKSB7CiAJCWFoZF9wcmludF9wYXRoKGFoZCwgc2NiKTsKLQkJcHJpbnRmKCJhaGRfcmVpbml0aWFsaXplX2RhdGFwdHJzOiBGb3JjaW5nIEZJRk8gZnJlZS5cbiIpOworCQlwcmludGsoImFoZF9yZWluaXRpYWxpemVfZGF0YXB0cnM6IEZvcmNpbmcgRklGTyBmcmVlLlxuIik7CiAJCWFoZF9vdXRiKGFoZCwgREZGU1hGUkNUTCwgUlNUQ0hOfENMUlNIQ05UKTsKIAl9CiAJc2F2ZWRfbW9kZXMgPSBhaGRfc2F2ZV9tb2RlcyhhaGQpOwpAQCAtNTk3OCw3ICs1OTc4LDcgQEAKIAkJCSAgICAgICBDQU1fTFVOX1dJTERDQVJELCBBQ19TRU5UX0JEUik7CiAKIAlpZiAobWVzc2FnZSAhPSBOVUxMICYmIGJvb3R2ZXJib3NlKQotCQlwcmludGYoIiVzOiAlcyBvbiAlYzolZC4gJWQgU0NCcyBhYm9ydGVkXG4iLCBhaGRfbmFtZShhaGQpLAorCQlwcmludGsoIiVzOiAlcyBvbiAlYzolZC4gJWQgU0NCcyBhYm9ydGVkXG4iLCBhaGRfbmFtZShhaGQpLAogCQkgICAgICAgbWVzc2FnZSwgZGV2aW5mby0+Y2hhbm5lbCwgZGV2aW5mby0+dGFyZ2V0LCBmb3VuZCk7CiB9CiAKQEAgLTYwNzQsMjMgKzYwNzQsMjIgQEAKIAlzdHJ1Y3QgIGFoZF9zb2Z0YyAqYWhkOwogCiAjaWZuZGVmCV9fRnJlZUJTRF9fCi0JYWhkID0gbWFsbG9jKHNpemVvZigqYWhkKSwgTV9ERVZCVUYsIE1fTk9XQUlUKTsKKwlhaGQgPSBrbWFsbG9jKHNpemVvZigqYWhkKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFhaGQpIHsKLQkJcHJpbnRmKCJhaWM3eHh4OiBjYW5ub3QgbWFsbG9jIHNvZnRjIVxuIik7Ci0JCWZyZWUobmFtZSwgTV9ERVZCVUYpOworCQlwcmludGsoImFpYzd4eHg6IGNhbm5vdCBtYWxsb2Mgc29mdGMhXG4iKTsKKwkJa2ZyZWUobmFtZSk7CiAJCXJldHVybiBOVUxMOwogCX0KICNlbHNlCiAJYWhkID0gZGV2aWNlX2dldF9zb2Z0YygoZGV2aWNlX3QpcGxhdGZvcm1fYXJnKTsKICNlbmRpZgogCW1lbXNldChhaGQsIDAsIHNpemVvZigqYWhkKSk7Ci0JYWhkLT5zZWVwX2NvbmZpZyA9IG1hbGxvYyhzaXplb2YoKmFoZC0+c2VlcF9jb25maWcpLAotCQkJCSAgTV9ERVZCVUYsIE1fTk9XQUlUKTsKKwlhaGQtPnNlZXBfY29uZmlnID0ga21hbGxvYyhzaXplb2YoKmFoZC0+c2VlcF9jb25maWcpLCBHRlBfQVRPTUlDKTsKIAlpZiAoYWhkLT5zZWVwX2NvbmZpZyA9PSBOVUxMKSB7CiAjaWZuZGVmCV9fRnJlZUJTRF9fCi0JCWZyZWUoYWhkLCBNX0RFVkJVRik7CisJCWtmcmVlKGFoZCk7CiAjZW5kaWYKLQkJZnJlZShuYW1lLCBNX0RFVkJVRik7CisJCWtmcmVlKG5hbWUpOwogCQlyZXR1cm4gKE5VTEwpOwogCX0KIAlMSVNUX0lOSVQoJmFoZC0+cGVuZGluZ19zY2JzKTsKQEAgLTYxMjAsNyArNjExOSw3IEBACiAJfQogI2lmZGVmIEFIRF9ERUJVRwogCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfTUVNT1JZKSAhPSAwKSB7Ci0JCXByaW50ZigiJXM6IHNjYiBzaXplID0gMHgleCwgaHNjYiBzaXplID0gMHgleFxuIiwKKwkJcHJpbnRrKCIlczogc2NiIHNpemUgPSAweCV4LCBoc2NiIHNpemUgPSAweCV4XG4iLAogCQkgICAgICAgYWhkX25hbWUoYWhkKSwgKHVfaW50KXNpemVvZihzdHJ1Y3Qgc2NiKSwKIAkJICAgICAgICh1X2ludClzaXplb2Yoc3RydWN0IGhhcmR3YXJlX3NjYikpOwogCX0KQEAgLTYxNDcsNyArNjE0Niw3IEBACiBhaGRfc2V0X25hbWUoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCBjaGFyICpuYW1lKQogewogCWlmIChhaGQtPm5hbWUgIT0gTlVMTCkKLQkJZnJlZShhaGQtPm5hbWUsIE1fREVWQlVGKTsKKwkJa2ZyZWUoYWhkLT5uYW1lKTsKIAlhaGQtPm5hbWUgPSBuYW1lOwogfQogCkBAIC02MjAxLDI3ICs2MjAwLDI3IEBACiAJCQkJbHN0YXRlID0gdHN0YXRlLT5lbmFibGVkX2x1bnNbal07CiAJCQkJaWYgKGxzdGF0ZSAhPSBOVUxMKSB7CiAJCQkJCXhwdF9mcmVlX3BhdGgobHN0YXRlLT5wYXRoKTsKLQkJCQkJZnJlZShsc3RhdGUsIE1fREVWQlVGKTsKKwkJCQkJa2ZyZWUobHN0YXRlKTsKIAkJCQl9CiAJCQl9CiAjZW5kaWYKLQkJCWZyZWUodHN0YXRlLCBNX0RFVkJVRik7CisJCQlrZnJlZSh0c3RhdGUpOwogCQl9CiAJfQogI2lmZGVmIEFIRF9UQVJHRVRfTU9ERQogCWlmIChhaGQtPmJsYWNrX2hvbGUgIT0gTlVMTCkgewogCQl4cHRfZnJlZV9wYXRoKGFoZC0+YmxhY2tfaG9sZS0+cGF0aCk7Ci0JCWZyZWUoYWhkLT5ibGFja19ob2xlLCBNX0RFVkJVRik7CisJCWtmcmVlKGFoZC0+YmxhY2tfaG9sZSk7CiAJfQogI2VuZGlmCiAJaWYgKGFoZC0+bmFtZSAhPSBOVUxMKQotCQlmcmVlKGFoZC0+bmFtZSwgTV9ERVZCVUYpOworCQlrZnJlZShhaGQtPm5hbWUpOwogCWlmIChhaGQtPnNlZXBfY29uZmlnICE9IE5VTEwpCi0JCWZyZWUoYWhkLT5zZWVwX2NvbmZpZywgTV9ERVZCVUYpOworCQlrZnJlZShhaGQtPnNlZXBfY29uZmlnKTsKIAlpZiAoYWhkLT5zYXZlZF9zdGFjayAhPSBOVUxMKQotCQlmcmVlKGFoZC0+c2F2ZWRfc3RhY2ssIE1fREVWQlVGKTsKKwkJa2ZyZWUoYWhkLT5zYXZlZF9zdGFjayk7CiAjaWZuZGVmIF9fRnJlZUJTRF9fCi0JZnJlZShhaGQsIE1fREVWQlVGKTsKKwlrZnJlZShhaGQpOwogI2VuZGlmCiAJcmV0dXJuOwogfQpAQCAtNjMwMCw3ICs2Mjk5LDcgQEAKIAl9IHdoaWxlICgtLXdhaXQgJiYgIShhaGRfaW5iKGFoZCwgSENOVFJMKSAmIENISVBSU1RBQ0spKTsKIAogCWlmICh3YWl0ID09IDApIHsKLQkJcHJpbnRmKCIlczogV0FSTklORyAtIEZhaWxlZCBjaGlwIHJlc2V0ISAgIgorCQlwcmludGsoIiVzOiBXQVJOSU5HIC0gRmFpbGVkIGNoaXAgcmVzZXQhICAiCiAJCSAgICAgICAiVHJ5aW5nIHRvIGluaXRpYWxpemUgYW55d2F5LlxuIiwgYWhkX25hbWUoYWhkKSk7CiAJfQogCWFoZF9vdXRiKGFoZCwgSENOVFJMLCBhaGQtPnBhdXNlKTsKQEAgLTY0MjIsNyArNjQyMSw3IEBACiAJLyogRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgaGFyZHdhcmUgU0NCcyBhbmQgaW5pdGlhbGl6ZSB0aGVtICovCiAJc2NiX2RhdGEtPm1heGhzY2JzID0gYWhkX3Byb2JlX3NjYnMoYWhkKTsKIAlpZiAoc2NiX2RhdGEtPm1heGhzY2JzID09IDApIHsKLQkJcHJpbnRmKCIlczogTm8gU0NCIHNwYWNlIGZvdW5kXG4iLCBhaGRfbmFtZShhaGQpKTsKKwkJcHJpbnRrKCIlczogTm8gU0NCIHNwYWNlIGZvdW5kXG4iLCBhaGRfbmFtZShhaGQpKTsKIAkJcmV0dXJuIChFTlhJTyk7CiAJfQogCkBAIC02NDY1LDcgKzY0NjQsNyBAQAogCX0KICNpZmRlZiBBSERfREVCVUcKIAlpZiAoKGFoZF9kZWJ1ZyAmIEFIRF9TSE9XX01FTU9SWSkgIT0gMCkKLQkJcHJpbnRmKCIlczogYWhkX3NnbGlzdF9hbGxvY3NpemUgPSAweCV4XG4iLCBhaGRfbmFtZShhaGQpLAorCQlwcmludGsoIiVzOiBhaGRfc2dsaXN0X2FsbG9jc2l6ZSA9IDB4JXhcbiIsIGFoZF9uYW1lKGFoZCksCiAJCSAgICAgICBhaGRfc2dsaXN0X2FsbG9jc2l6ZShhaGQpKTsKICNlbmRpZgogCkBAIC02NDg5LDcgKzY0ODgsNyBAQAogCWFoZF9hbGxvY19zY2JzKGFoZCk7CiAKIAlpZiAoc2NiX2RhdGEtPm51bXNjYnMgPT0gMCkgewotCQlwcmludGYoIiVzOiBhaGRfaW5pdF9zY2JkYXRhIC0gIgorCQlwcmludGsoIiVzOiBhaGRfaW5pdF9zY2JkYXRhIC0gIgogCQkgICAgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBpbml0aWFsIHNjYnNcbiIsCiAJCSAgICAgICBhaGRfbmFtZShhaGQpKTsKIAkJZ290byBlcnJvcl9leGl0OwpAQCAtNjU2NCw3ICs2NTYzLDcgQEAKIAkJCQkJICBzbnNfbWFwLT5kbWFtYXApOwogCQkJYWhkX2RtYW1lbV9mcmVlKGFoZCwgc2NiX2RhdGEtPnNlbnNlX2RtYXQsCiAJCQkJCXNuc19tYXAtPnZhZGRyLCBzbnNfbWFwLT5kbWFtYXApOwotCQkJZnJlZShzbnNfbWFwLCBNX0RFVkJVRik7CisJCQlrZnJlZShzbnNfbWFwKTsKIAkJfQogCQlhaGRfZG1hX3RhZ19kZXN0cm95KGFoZCwgc2NiX2RhdGEtPnNlbnNlX2RtYXQpOwogCQkvKiBGQUxMVEhST1VHSCAqLwpAQCAtNjU3OSw3ICs2NTc4LDcgQEAKIAkJCQkJICBzZ19tYXAtPmRtYW1hcCk7CiAJCQlhaGRfZG1hbWVtX2ZyZWUoYWhkLCBzY2JfZGF0YS0+c2dfZG1hdCwKIAkJCQkJc2dfbWFwLT52YWRkciwgc2dfbWFwLT5kbWFtYXApOwotCQkJZnJlZShzZ19tYXAsIE1fREVWQlVGKTsKKwkJCWtmcmVlKHNnX21hcCk7CiAJCX0KIAkJYWhkX2RtYV90YWdfZGVzdHJveShhaGQsIHNjYl9kYXRhLT5zZ19kbWF0KTsKIAkJLyogRkFMTFRIUk9VR0ggKi8KQEAgLTY1OTQsNyArNjU5Myw3IEBACiAJCQkJCSAgaHNjYl9tYXAtPmRtYW1hcCk7CiAJCQlhaGRfZG1hbWVtX2ZyZWUoYWhkLCBzY2JfZGF0YS0+aHNjYl9kbWF0LAogCQkJCQloc2NiX21hcC0+dmFkZHIsIGhzY2JfbWFwLT5kbWFtYXApOwotCQkJZnJlZShoc2NiX21hcCwgTV9ERVZCVUYpOworCQkJa2ZyZWUoaHNjYl9tYXApOwogCQl9CiAJCWFoZF9kbWFfdGFnX2Rlc3Ryb3koYWhkLCBzY2JfZGF0YS0+aHNjYl9kbWF0KTsKIAkJLyogRkFMTFRIUk9VR0ggKi8KQEAgLTY2MjQsNyArNjYyMyw3IEBACiAJYWhkX291dGIoYWhkLCBTSU1PREUwLCBhaGRfaW5iKGFoZCwgU0lNT0RFMCkgfCAoRU5TRUxET3xFTlNFTERJKSk7CiAjaWZkZWYgQUhEX0RFQlVHCiAJaWYgKChhaGRfZGVidWcgJiBBSERfU0hPV19NSVNDKSAhPSAwKQotCQlwcmludGYoIiVzOiBTZXR0aW5nIHVwIGlvY2VsbCB3b3JrYXJvdW5kXG4iLCBhaGRfbmFtZShhaGQpKTsKKwkJcHJpbnRrKCIlczogU2V0dGluZyB1cCBpb2NlbGwgd29ya2Fyb3VuZFxuIiwgYWhkX25hbWUoYWhkKSk7CiAjZW5kaWYKIAlhaGRfcmVzdG9yZV9tb2RlcyhhaGQsIHNhdmVkX21vZGVzKTsKIAlhaGQtPmZsYWdzICY9IH5BSERfSEFEX0ZJUlNUX1NFTDsKQEAgLTY2NDQsMTQgKzY2NDMsMTQgQEAKIAlhaGRfc2V0X21vZGVzKGFoZCwgQUhEX01PREVfQ0ZHLCBBSERfTU9ERV9DRkcpOwogI2lmZGVmIEFIRF9ERUJVRwogCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfTUlTQykgIT0gMCkKLQkJcHJpbnRmKCIlczogaW9jZWxsIGZpcnN0IHNlbGVjdGlvblxuIiwgYWhkX25hbWUoYWhkKSk7CisJCXByaW50aygiJXM6IGlvY2VsbCBmaXJzdCBzZWxlY3Rpb25cbiIsIGFoZF9uYW1lKGFoZCkpOwogI2VuZGlmCiAJaWYgKChzYmxrY3RsICYgRU5BQjQwKSAhPSAwKSB7CiAJCWFoZF9vdXRiKGFoZCwgRFNQREFUQUNUTCwKIAkJCSBhaGRfaW5iKGFoZCwgRFNQREFUQUNUTCkgJiB+QllQQVNTRU5BQik7CiAjaWZkZWYgQUhEX0RFQlVHCiAJCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfTUlTQykgIT0gMCkKLQkJCXByaW50ZigiJXM6IEJZUEFTUyBub3cgZGlzYWJsZWRcbiIsIGFoZF9uYW1lKGFoZCkpOworCQkJcHJpbnRrKCIlczogQllQQVNTIG5vdyBkaXNhYmxlZFxuIiwgYWhkX25hbWUoYWhkKSk7CiAjZW5kaWYKIAl9CiAJYWhkX291dGIoYWhkLCBTSU1PREUwLCBhaGRfaW5iKGFoZCwgU0lNT0RFMCkgJiB+KEVOU0VMRE98RU5TRUxESSkpOwpAQCAtNjgzMyw3ICs2ODMyLDcgQEAKIAkJaHNjYiA9ICYoKHN0cnVjdCBoYXJkd2FyZV9zY2IgKiloc2NiX21hcC0+dmFkZHIpW29mZnNldF07CiAJCWhzY2JfYnVzYWRkciA9IGhzY2JfbWFwLT5waHlzYWRkciArIChvZmZzZXQgKiBzaXplb2YoKmhzY2IpKTsKIAl9IGVsc2UgewotCQloc2NiX21hcCA9IG1hbGxvYyhzaXplb2YoKmhzY2JfbWFwKSwgTV9ERVZCVUYsIE1fTk9XQUlUKTsKKwkJaHNjYl9tYXAgPSBrbWFsbG9jKHNpemVvZigqaHNjYl9tYXApLCBHRlBfQVRPTUlDKTsKIAogCQlpZiAoaHNjYl9tYXAgPT0gTlVMTCkKIAkJCXJldHVybjsKQEAgLTY4NDIsNyArNjg0MSw3IEBACiAJCWlmIChhaGRfZG1hbWVtX2FsbG9jKGFoZCwgc2NiX2RhdGEtPmhzY2JfZG1hdCwKIAkJCQkgICAgICh2b2lkICoqKSZoc2NiX21hcC0+dmFkZHIsCiAJCQkJICAgICBCVVNfRE1BX05PV0FJVCwgJmhzY2JfbWFwLT5kbWFtYXApICE9IDApIHsKLQkJCWZyZWUoaHNjYl9tYXAsIE1fREVWQlVGKTsKKwkJCWtmcmVlKGhzY2JfbWFwKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC02ODY2LDcgKzY4NjUsNyBAQAogCQlzZWdzID0gc2dfbWFwLT52YWRkciArIG9mZnNldDsKIAkJc2dfYnVzYWRkciA9IHNnX21hcC0+cGh5c2FkZHIgKyBvZmZzZXQ7CiAJfSBlbHNlIHsKLQkJc2dfbWFwID0gbWFsbG9jKHNpemVvZigqc2dfbWFwKSwgTV9ERVZCVUYsIE1fTk9XQUlUKTsKKwkJc2dfbWFwID0ga21hbGxvYyhzaXplb2YoKnNnX21hcCksIEdGUF9BVE9NSUMpOwogCiAJCWlmIChzZ19tYXAgPT0gTlVMTCkKIAkJCXJldHVybjsKQEAgLTY4NzUsNyArNjg3NCw3IEBACiAJCWlmIChhaGRfZG1hbWVtX2FsbG9jKGFoZCwgc2NiX2RhdGEtPnNnX2RtYXQsCiAJCQkJICAgICAodm9pZCAqKikmc2dfbWFwLT52YWRkciwKIAkJCQkgICAgIEJVU19ETUFfTk9XQUlULCAmc2dfbWFwLT5kbWFtYXApICE9IDApIHsKLQkJCWZyZWUoc2dfbWFwLCBNX0RFVkJVRik7CisJCQlrZnJlZShzZ19tYXApOwogCQkJcmV0dXJuOwogCQl9CiAKQEAgLTY4OTEsNyArNjg5MCw3IEBACiAJCSAgICBhaGRfc2dsaXN0X2FsbG9jc2l6ZShhaGQpIC8gYWhkX3NnbGlzdF9zaXplKGFoZCk7CiAjaWZkZWYgQUhEX0RFQlVHCiAJCWlmIChhaGRfZGVidWcgJiBBSERfU0hPV19NRU1PUlkpCi0JCQlwcmludGYoIk1hcHBlZCBTRyBkYXRhXG4iKTsKKwkJCXByaW50aygiTWFwcGVkIFNHIGRhdGFcbiIpOwogI2VuZGlmCiAJfQogCkBAIC02OTAzLDcgKzY5MDIsNyBAQAogCQlzZW5zZV9kYXRhID0gc2Vuc2VfbWFwLT52YWRkciArIG9mZnNldDsKIAkJc2Vuc2VfYnVzYWRkciA9IHNlbnNlX21hcC0+cGh5c2FkZHIgKyBvZmZzZXQ7CiAJfSBlbHNlIHsKLQkJc2Vuc2VfbWFwID0gbWFsbG9jKHNpemVvZigqc2Vuc2VfbWFwKSwgTV9ERVZCVUYsIE1fTk9XQUlUKTsKKwkJc2Vuc2VfbWFwID0ga21hbGxvYyhzaXplb2YoKnNlbnNlX21hcCksIEdGUF9BVE9NSUMpOwogCiAJCWlmIChzZW5zZV9tYXAgPT0gTlVMTCkKIAkJCXJldHVybjsKQEAgLTY5MTIsNyArNjkxMSw3IEBACiAJCWlmIChhaGRfZG1hbWVtX2FsbG9jKGFoZCwgc2NiX2RhdGEtPnNlbnNlX2RtYXQsCiAJCQkJICAgICAodm9pZCAqKikmc2Vuc2VfbWFwLT52YWRkciwKIAkJCQkgICAgIEJVU19ETUFfTk9XQUlULCAmc2Vuc2VfbWFwLT5kbWFtYXApICE9IDApIHsKLQkJCWZyZWUoc2Vuc2VfbWFwLCBNX0RFVkJVRik7CisJCQlrZnJlZShzZW5zZV9tYXApOwogCQkJcmV0dXJuOwogCQl9CiAKQEAgLTY5MjcsNyArNjkyNiw3IEBACiAJCXNjYl9kYXRhLT5zZW5zZV9sZWZ0ID0gUEFHRV9TSVpFIC8gQUhEX1NFTlNFX0JVRlNJWkU7CiAjaWZkZWYgQUhEX0RFQlVHCiAJCWlmIChhaGRfZGVidWcgJiBBSERfU0hPV19NRU1PUlkpCi0JCQlwcmludGYoIk1hcHBlZCBzZW5zZSBkYXRhXG4iKTsKKwkJCXByaW50aygiTWFwcGVkIHNlbnNlIGRhdGFcbiIpOwogI2VuZGlmCiAJfQogCkBAIC02OTQxLDE1ICs2OTQwLDEzIEBACiAJCWludCBlcnJvcjsKICNlbmRpZgogCi0JCW5leHRfc2NiID0gKHN0cnVjdCBzY2IgKiltYWxsb2Moc2l6ZW9mKCpuZXh0X3NjYiksCi0JCQkJCQlNX0RFVkJVRiwgTV9OT1dBSVQpOworCQluZXh0X3NjYiA9IGttYWxsb2Moc2l6ZW9mKCpuZXh0X3NjYiksIEdGUF9BVE9NSUMpOwogCQlpZiAobmV4dF9zY2IgPT0gTlVMTCkKIAkJCWJyZWFrOwogCi0JCXBkYXRhID0gKHN0cnVjdCBzY2JfcGxhdGZvcm1fZGF0YSAqKW1hbGxvYyhzaXplb2YoKnBkYXRhKSwKLQkJCQkJCQkgICBNX0RFVkJVRiwgTV9OT1dBSVQpOworCQlwZGF0YSA9IGttYWxsb2Moc2l6ZW9mKCpwZGF0YSksIEdGUF9BVE9NSUMpOwogCQlpZiAocGRhdGEgPT0gTlVMTCkgewotCQkJZnJlZShuZXh0X3NjYiwgTV9ERVZCVUYpOworCQkJa2ZyZWUobmV4dF9zY2IpOwogCQkJYnJlYWs7CiAJCX0KIAkJbmV4dF9zY2ItPnBsYXRmb3JtX2RhdGEgPSBwZGF0YTsKQEAgLTY5NzksOCArNjk3Niw4IEBACiAJCWVycm9yID0gYWhkX2RtYW1hcF9jcmVhdGUoYWhkLCBhaGQtPmJ1ZmZlcl9kbWF0LCAvKmZsYWdzKi8wLAogCQkJCQkgICZuZXh0X3NjYi0+ZG1hbWFwKTsKIAkJaWYgKGVycm9yICE9IDApIHsKLQkJCWZyZWUobmV4dF9zY2IsIE1fREVWQlVGKTsKLQkJCWZyZWUocGRhdGEsIE1fREVWQlVGKTsKKwkJCWtmcmVlKG5leHRfc2NiKTsKKwkJCWtmcmVlKHBkYXRhKTsKIAkJCWJyZWFrOwogCQl9CiAjZW5kaWYKQEAgLTcwNzcsOCArNzA3NCw3IEBACiAJQUhEX0FTU0VSVF9NT0RFUyhhaGQsIEFIRF9NT0RFX1NDU0lfTVNLLCBBSERfTU9ERV9TQ1NJX01TSyk7CiAKIAlhaGQtPnN0YWNrX3NpemUgPSBhaGRfcHJvYmVfc3RhY2tfc2l6ZShhaGQpOwotCWFoZC0+c2F2ZWRfc3RhY2sgPSBtYWxsb2MoYWhkLT5zdGFja19zaXplICogc2l6ZW9mKHVpbnQxNl90KSwKLQkJCQkgIE1fREVWQlVGLCBNX05PV0FJVCk7CisJYWhkLT5zYXZlZF9zdGFjayA9IGttYWxsb2MoYWhkLT5zdGFja19zaXplICogc2l6ZW9mKHVpbnQxNl90KSwgR0ZQX0FUT01JQyk7CiAJaWYgKGFoZC0+c2F2ZWRfc3RhY2sgPT0gTlVMTCkKIAkJcmV0dXJuIChFTk9NRU0pOwogCkBAIC03MjI0LDIwICs3MjIwLDIwIEBACiAJZXJyb3IgPSBhaGRfd3JpdGVfZmxleHBvcnQoYWhkLCBGTFhBRERSX1JPTVNUQVRfQ1VSU0VOU0VDVEwsCiAJCQkJICAgQ1VSU0VOU0VfRU5CKTsKIAlpZiAoZXJyb3IgIT0gMCkgewotCQlwcmludGYoIiVzOiBjdXJyZW50IHNlbnNpbmcgdGltZW91dCAxXG4iLCBhaGRfbmFtZShhaGQpKTsKKwkJcHJpbnRrKCIlczogY3VycmVudCBzZW5zaW5nIHRpbWVvdXQgMVxuIiwgYWhkX25hbWUoYWhkKSk7CiAJCWdvdG8gaW5pdF9kb25lOwogCX0KIAlmb3IgKGkgPSAyMCwgZnN0YXQgPSBGTFhfRlNUQVRfQlVTWTsKIAkgICAgIChmc3RhdCAmIEZMWF9GU1RBVF9CVVNZKSAhPSAwICYmIGk7IGktLSkgewogCQllcnJvciA9IGFoZF9yZWFkX2ZsZXhwb3J0KGFoZCwgRkxYQUREUl9GTEVYU1RBVCwgJmZzdGF0KTsKIAkJaWYgKGVycm9yICE9IDApIHsKLQkJCXByaW50ZigiJXM6IGN1cnJlbnQgc2Vuc2luZyB0aW1lb3V0IDJcbiIsCisJCQlwcmludGsoIiVzOiBjdXJyZW50IHNlbnNpbmcgdGltZW91dCAyXG4iLAogCQkJICAgICAgIGFoZF9uYW1lKGFoZCkpOwogCQkJZ290byBpbml0X2RvbmU7CiAJCX0KIAl9CiAJaWYgKGkgPT0gMCkgewotCQlwcmludGYoIiVzOiBUaW1lZG91dCBkdXJpbmcgY3VycmVudC1zZW5zaW5nIHRlc3RcbiIsCisJCXByaW50aygiJXM6IFRpbWVkb3V0IGR1cmluZyBjdXJyZW50LXNlbnNpbmcgdGVzdFxuIiwKIAkJICAgICAgIGFoZF9uYW1lKGFoZCkpOwogCQlnb3RvIGluaXRfZG9uZTsKIAl9CkBAIC03MjQ1LDcgKzcyNDEsNyBAQAogCS8qIExhdGNoIEN1cnJlbnQgU2Vuc2luZyBzdGF0dXMuICovCiAJZXJyb3IgPSBhaGRfcmVhZF9mbGV4cG9ydChhaGQsIEZMWEFERFJfQ1VSUkVOVF9TVEFULCAmY3VycmVudF9zZW5zaW5nKTsKIAlpZiAoZXJyb3IgIT0gMCkgewotCQlwcmludGYoIiVzOiBjdXJyZW50IHNlbnNpbmcgdGltZW91dCAzXG4iLCBhaGRfbmFtZShhaGQpKTsKKwkJcHJpbnRrKCIlczogY3VycmVudCBzZW5zaW5nIHRpbWVvdXQgM1xuIiwgYWhkX25hbWUoYWhkKSk7CiAJCWdvdG8gaW5pdF9kb25lOwogCX0KIApAQCAtNzI1NCw3ICs3MjUwLDcgQEAKIAogI2lmZGVmIEFIRF9ERUJVRwogCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfVEVSTUNUTCkgIT0gMCkgewotCQlwcmludGYoIiVzOiBjdXJyZW50X3NlbnNpbmcgPT0gMHgleFxuIiwKKwkJcHJpbnRrKCIlczogY3VycmVudF9zZW5zaW5nID09IDB4JXhcbiIsCiAJCSAgICAgICBhaGRfbmFtZShhaGQpLCBjdXJyZW50X3NlbnNpbmcpOwogCX0KICNlbmRpZgpAQCAtNzI3MSwxMyArNzI2NywxMyBAQAogCQljYXNlIEZMWF9DU1RBVF9PS0FZOgogCQkJaWYgKHdhcm5fdXNlciA9PSAwICYmIGJvb3R2ZXJib3NlID09IDApCiAJCQkJYnJlYWs7Ci0JCQlwcmludGYoIiVzOiAlcyBDaGFubmVsICVzXG4iLCBhaGRfbmFtZShhaGQpLAorCQkJcHJpbnRrKCIlczogJXMgQ2hhbm5lbCAlc1xuIiwgYWhkX25hbWUoYWhkKSwKIAkJCSAgICAgICBjaGFubmVsX3N0cmluZ3NbaV0sIHRlcm1zdGF0X3N0cmluZ3NbdGVybV9zdGF0XSk7CiAJCQlicmVhazsKIAkJfQogCX0KIAlpZiAod2Fybl91c2VyKSB7Ci0JCXByaW50ZigiJXM6IFdBUk5JTkcuIFRlcm1pbmF0aW9uIGlzIG5vdCBjb25maWd1cmVkIGNvcnJlY3RseS5cbiIKKwkJcHJpbnRrKCIlczogV0FSTklORy4gVGVybWluYXRpb24gaXMgbm90IGNvbmZpZ3VyZWQgY29ycmVjdGx5LlxuIgogCQkgICAgICAgIiVzOiBXQVJOSU5HLiBTQ1NJIGJ1cyBvcGVyYXRpb25zIG1heSBGQUlMLlxuIiwKIAkJICAgICAgIGFoZF9uYW1lKGFoZCksIGFoZF9uYW1lKGFoZCkpOwogCX0KQEAgLTczOTMsNyArNzM4OSw3IEBACiAJCX0KICNpZmRlZiBBSERfREVCVUcKIAkJaWYgKChhaGRfZGVidWcgJiBBSERfU0hPV19NSVNDKSAhPSAwKQotCQkJcHJpbnRmKCIlczogV1JUQklBU0NUTCBub3cgMHgleFxuIiwgYWhkX25hbWUoYWhkKSwKKwkJCXByaW50aygiJXM6IFdSVEJJQVNDVEwgbm93IDB4JXhcbiIsIGFoZF9uYW1lKGFoZCksCiAJCQkgICAgICAgV1JUQklBU0NUTF9IUF9ERUZBVUxUKTsKICNlbmRpZgogCX0KQEAgLTc2MjIsOSArNzYxOCw5IEBACiAJCWFoZF9vdXRiKGFoZCwgTkVHQ09OT1BUUywgbmVnb2RhdDMpOwogCQluZWdvZGF0MyA9IGFoZF9pbmIoYWhkLCBORUdDT05PUFRTKTsKIAkJaWYgKCEobmVnb2RhdDMgJiBFTlNMT1dDUkMpKQotCQkJcHJpbnRmKCJhaWM3OXh4OiBmYWlsZWQgdG8gc2V0IHRoZSBTTE9XQ1JDIGJpdFxuIik7CisJCQlwcmludGsoImFpYzc5eHg6IGZhaWxlZCB0byBzZXQgdGhlIFNMT1dDUkMgYml0XG4iKTsKIAkJZWxzZQotCQkJcHJpbnRmKCJhaWM3OXh4OiBTTE9XQ1JDIGJpdCBzZXRcbiIpOworCQkJcHJpbnRrKCJhaWM3OXh4OiBTTE9XQ1JDIGJpdCBzZXRcbiIpOwogCX0KIH0KIApAQCAtNzY0Niw3ICs3NjQyLDcgQEAKIAkgKiBkYXRhIGZvciBhbnkgdGFyZ2V0IG1vZGUgaW5pdGlhdG9yLgogCSAqLwogCWlmIChhaGRfYWxsb2NfdHN0YXRlKGFoZCwgYWhkLT5vdXJfaWQsICdBJykgPT0gTlVMTCkgewotCQlwcmludGYoIiVzOiB1bmFibGUgdG8gYWxsb2NhdGUgYWhkX3Rtb2RlX3RzdGF0ZS4gICIKKwkJcHJpbnRrKCIlczogdW5hYmxlIHRvIGFsbG9jYXRlIGFoZF90bW9kZV90c3RhdGUuICAiCiAJCSAgICAgICAiRmFpbGluZyBhdHRhY2hcbiIsIGFoZF9uYW1lKGFoZCkpOwogCQlyZXR1cm4gKEVOT01FTSk7CiAJfQpAQCAtNzcyNSw3ICs3NzIxLDcgQEAKIAkgKiBkYXRhIGZvciBhbnkgdGFyZ2V0IG1vZGUgaW5pdGlhdG9yLgogCSAqLwogCWlmIChhaGRfYWxsb2NfdHN0YXRlKGFoZCwgYWhkLT5vdXJfaWQsICdBJykgPT0gTlVMTCkgewotCQlwcmludGYoIiVzOiB1bmFibGUgdG8gYWxsb2NhdGUgYWhkX3Rtb2RlX3RzdGF0ZS4gICIKKwkJcHJpbnRrKCIlczogdW5hYmxlIHRvIGFsbG9jYXRlIGFoZF90bW9kZV90c3RhdGUuICAiCiAJCSAgICAgICAiRmFpbGluZyBhdHRhY2hcbiIsIGFoZF9uYW1lKGFoZCkpOwogCQlyZXR1cm4gKEVOT01FTSk7CiAJfQpAQCAtNzc5NSw3ICs3NzkxLDcgQEAKIAkJCXVzZXJfdGluZm8tPndpZHRoID0gTVNHX0VYVF9XRFRSX0JVU184X0JJVDsKICNpZmRlZiBBSERfREVCVUcKIAkJaWYgKChhaGRfZGVidWcgJiBBSERfU0hPV19NSVNDKSAhPSAwKQotCQkJcHJpbnRmKCIoJWQpOiAleDoleDoleDoleFxuIiwgdGFyZywgdXNlcl90aW5mby0+d2lkdGgsCisJCQlwcmludGsoIiglZCk6ICV4OiV4OiV4OiV4XG4iLCB0YXJnLCB1c2VyX3RpbmZvLT53aWR0aCwKIAkJCSAgICAgICB1c2VyX3RpbmZvLT5wZXJpb2QsIHVzZXJfdGluZm8tPm9mZnNldCwKIAkJCSAgICAgICB1c2VyX3RpbmZvLT5wcHJfb3B0aW9ucyk7CiAjZW5kaWYKQEAgLTc5NTEsNyArNzk0Nyw3IEBACiAJICAgICAgIHx8IChhaGRfaW5iKGFoZCwgU1NUQVQwKSAmIChTRUxET3xTRUxJTkdPKSkgIT0gMCkpOwogCiAJaWYgKG1heGxvb3BzID09IDApIHsKLQkJcHJpbnRmKCJJbmZpbml0ZSBpbnRlcnJ1cHQgbG9vcCwgSU5UU1RBVCA9ICV4IiwKKwkJcHJpbnRrKCJJbmZpbml0ZSBpbnRlcnJ1cHQgbG9vcCwgSU5UU1RBVCA9ICV4IiwKIAkJICAgICAgYWhkX2luYihhaGQsIElOVFNUQVQpKTsKIAl9CiAJYWhkLT5xZnJlZXplX2NudCsrOwpAQCAtODI0MSw3ICs4MjM3LDcgQEAKIAlwcmV2X3NjYiA9IE5VTEw7CiAKIAlpZiAoYWN0aW9uID09IFNFQVJDSF9QUklOVCkgewotCQlwcmludGYoInFpbnN0YXJ0ID0gJWQgcWluZmlmb25leHQgPSAlZFxuUUlORklGTzoiLAorCQlwcmludGsoInFpbnN0YXJ0ID0gJWQgcWluZmlmb25leHQgPSAlZFxuUUlORklGTzoiLAogCQkgICAgICAgcWluc3RhcnQsIGFoZC0+cWluZmlmb25leHQpOwogCX0KIApAQCAtODI1Niw3ICs4MjUyLDcgQEAKIAl3aGlsZSAocWlucG9zICE9IHFpbnRhaWwpIHsKIAkJc2NiID0gYWhkX2xvb2t1cF9zY2IoYWhkLCBhaGQtPnFpbmZpZm9bcWlucG9zXSk7CiAJCWlmIChzY2IgPT0gTlVMTCkgewotCQkJcHJpbnRmKCJxaW5wb3MgPSAlZCwgU0NCIGluZGV4ID0gJWRcbiIsCisJCQlwcmludGsoInFpbnBvcyA9ICVkLCBTQ0IgaW5kZXggPSAlZFxuIiwKIAkJCQlxaW5wb3MsIGFoZC0+cWluZmlmb1txaW5wb3NdKTsKIAkJCXBhbmljKCJMb29wIDFcbiIpOwogCQl9CkBAIC04MjY5LDEzICs4MjY1LDEzIEBACiAJCQlzd2l0Y2ggKGFjdGlvbikgewogCQkJY2FzZSBTRUFSQ0hfQ09NUExFVEU6CiAJCQkJaWYgKChzY2ItPmZsYWdzICYgU0NCX0FDVElWRSkgPT0gMCkKLQkJCQkJcHJpbnRmKCJJbmFjdGl2ZSBTQ0IgaW4gcWluZmlmb1xuIik7CisJCQkJCXByaW50aygiSW5hY3RpdmUgU0NCIGluIHFpbmZpZm9cbiIpOwogCQkJCWFoZF9kb25lX3dpdGhfc3RhdHVzKGFoZCwgc2NiLCBzdGF0dXMpOwogCQkJCS8qIEZBTExUSFJPVUdIICovCiAJCQljYXNlIFNFQVJDSF9SRU1PVkU6CiAJCQkJYnJlYWs7CiAJCQljYXNlIFNFQVJDSF9QUklOVDoKLQkJCQlwcmludGYoIiAweCV4IiwgYWhkLT5xaW5maWZvW3FpbnBvc10pOworCQkJCXByaW50aygiIDB4JXgiLCBhaGQtPnFpbmZpZm9bcWlucG9zXSk7CiAJCQkJLyogRkFMTFRIUk9VR0ggKi8KIAkJCWNhc2UgU0VBUkNIX0NPVU5UOgogCQkJCWFoZF9xaW5maWZvX3JlcXVldWUoYWhkLCBwcmV2X3NjYiwgc2NiKTsKQEAgLTgyOTIsNyArODI4OCw3IEBACiAJYWhkX3NldF9obnNjYl9xb2ZmKGFoZCwgYWhkLT5xaW5maWZvbmV4dCk7CiAKIAlpZiAoYWN0aW9uID09IFNFQVJDSF9QUklOVCkKLQkJcHJpbnRmKCJcbldBSVRJTkdfVElEX1FVRVVFUzpcbiIpOworCQlwcmludGsoIlxuV0FJVElOR19USURfUVVFVUVTOlxuIik7CiAKIAkvKgogCSAqIFNlYXJjaCB3YWl0aW5nIGZvciBzZWxlY3Rpb24gbGlzdHMuICBXZSB0cmF2ZXJzZSB0aGUKQEAgLTgzMjAsNyArODMxNiw3IEBACiAJCQlwYW5pYygiVElEIExJU1QgTE9PUCIpOwogCiAJCWlmIChzY2JpZCA+PSBhaGQtPnNjYl9kYXRhLm51bXNjYnMpIHsKLQkJCXByaW50ZigiJXM6IFdhaXRpbmcgVElEIExpc3QgaW5jb25zaXN0ZW5jeS4gIgorCQkJcHJpbnRrKCIlczogV2FpdGluZyBUSUQgTGlzdCBpbmNvbnNpc3RlbmN5LiAiCiAJCQkgICAgICAgIlNDQiBpbmRleCA9PSAweCV4LCB5ZXQgbnVtc2NicyA9PSAweCV4LiIsCiAJCQkgICAgICAgYWhkX25hbWUoYWhkKSwgc2NiaWQsIGFoZC0+c2NiX2RhdGEubnVtc2Nicyk7CiAJCQlhaGRfZHVtcF9jYXJkX3N0YXRlKGFoZCk7CkBAIC04MzI4LDcgKzgzMjQsNyBAQAogCQl9CiAJCXNjYiA9IGFoZF9sb29rdXBfc2NiKGFoZCwgc2NiaWQpOwogCQlpZiAoc2NiID09IE5VTEwpIHsKLQkJCXByaW50ZigiJXM6IFNDQiA9IDB4JXggTm90IEFjdGl2ZSFcbiIsCisJCQlwcmludGsoIiVzOiBTQ0IgPSAweCV4IE5vdCBBY3RpdmUhXG4iLAogCQkJICAgICAgIGFoZF9uYW1lKGFoZCksIHNjYmlkKTsKIAkJCXBhbmljKCJXYWl0aW5nIFRJRCBMaXN0IHRyYXZlcnNhbFxuIik7CiAJCX0KQEAgLTgzNDQsNyArODM0MCw3IEBACiAJCSAqIFdlIGZvdW5kIGEgbGlzdCBvZiBzY2JzIHRoYXQgbmVlZHMgdG8gYmUgc2VhcmNoZWQuCiAJCSAqLwogCQlpZiAoYWN0aW9uID09IFNFQVJDSF9QUklOVCkKLQkJCXByaW50ZigiICAgICAgICVkICggIiwgU0NCX0dFVF9UQVJHRVQoYWhkLCBzY2IpKTsKKwkJCXByaW50aygiICAgICAgICVkICggIiwgU0NCX0dFVF9UQVJHRVQoYWhkLCBzY2IpKTsKIAkJdGlkX2hlYWQgPSBzY2JpZDsKIAkJZm91bmQgKz0gYWhkX3NlYXJjaF9zY2JfbGlzdChhaGQsIHRhcmdldCwgY2hhbm5lbCwKIAkJCQkJICAgICBsdW4sIHRhZywgcm9sZSwgc3RhdHVzLApAQCAtODM2NSwxNCArODM2MSwxNCBAQAogCQkJc3dpdGNoIChhY3Rpb24pIHsKIAkJCWNhc2UgU0VBUkNIX0NPTVBMRVRFOgogCQkJCWlmICgobWtfbXNnX3NjYi0+ZmxhZ3MgJiBTQ0JfQUNUSVZFKSA9PSAwKQotCQkJCQlwcmludGYoIkluYWN0aXZlIFNDQiBwZW5kaW5nIE1LX01TR1xuIik7CisJCQkJCXByaW50aygiSW5hY3RpdmUgU0NCIHBlbmRpbmcgTUtfTVNHXG4iKTsKIAkJCQlhaGRfZG9uZV93aXRoX3N0YXR1cyhhaGQsIG1rX21zZ19zY2IsIHN0YXR1cyk7CiAJCQkJLyogRkFMTFRIUk9VR0ggKi8KIAkJCWNhc2UgU0VBUkNIX1JFTU9WRToKIAkJCXsKIAkJCQl1X2ludCB0YWlsX29mZnNldDsKIAotCQkJCXByaW50ZigiUmVtb3ZpbmcgTUtfTVNHIHNjYlxuIik7CisJCQkJcHJpbnRrKCJSZW1vdmluZyBNS19NU0cgc2NiXG4iKTsKIAogCQkJCS8qCiAJCQkJICogUmVzZXQgb3VyIHRhaWwgdG8gdGhlIHRhaWwgb2YgdGhlCkBAIC04MzkwLDcgKzgzODYsNyBAQAogCQkJCWJyZWFrOwogCQkJfQogCQkJY2FzZSBTRUFSQ0hfUFJJTlQ6Ci0JCQkJcHJpbnRmKCIgMHgleCIsIFNDQl9HRVRfVEFHKHNjYikpOworCQkJCXByaW50aygiIDB4JXgiLCBTQ0JfR0VUX1RBRyhzY2IpKTsKIAkJCQkvKiBGQUxMVEhST1VHSCAqLwogCQkJY2FzZSBTRUFSQ0hfQ09VTlQ6CiAJCQkJYnJlYWs7CkBAIC04NDA3LDcgKzg0MDMsNyBAQAogCQkJICogcXVldWUgd2l0aCBhIHBlbmRpbmcgTUtfTUVTU0FHRSBzY2IsIHdlCiAJCQkgKiBtdXN0IHF1ZXVlIHRoZSBNS19NRVNTQUdFIHNjYi4KIAkJCSAqLwotCQkJcHJpbnRmKCJRdWV1ZWluZyBta19tc2dfc2NiXG4iKTsKKwkJCXByaW50aygiUXVldWVpbmcgbWtfbXNnX3NjYlxuIik7CiAJCQl0aWRfaGVhZCA9IGFoZF9pbncoYWhkLCBNS19NRVNTQUdFX1NDQik7CiAJCQlzZXFfZmxhZ3MyICY9IH5QRU5ESU5HX01LX01FU1NBR0U7CiAJCQlhaGRfb3V0YihhaGQsIFNFUV9GTEFHUzIsIHNlcV9mbGFnczIpOwpAQCAtODQxOCw3ICs4NDE0LDcgQEAKIAkJaWYgKCFTQ0JJRF9JU19OVUxMKHRpZF9oZWFkKSkKIAkJCXRpZF9wcmV2ID0gdGlkX2hlYWQ7CiAJCWlmIChhY3Rpb24gPT0gU0VBUkNIX1BSSU5UKQotCQkJcHJpbnRmKCIpXG4iKTsKKwkJCXByaW50aygiKVxuIik7CiAJfQogCiAJLyogUmVzdG9yZSBzYXZlZCBzdGF0ZS4gKi8KQEAgLTg0NDYsNyArODQ0Miw3IEBACiAJKmxpc3RfdGFpbCA9IFNDQl9MSVNUX05VTEw7CiAJZm9yIChzY2JpZCA9IG5leHQ7ICFTQ0JJRF9JU19OVUxMKHNjYmlkKTsgc2NiaWQgPSBuZXh0KSB7CiAJCWlmIChzY2JpZCA+PSBhaGQtPnNjYl9kYXRhLm51bXNjYnMpIHsKLQkJCXByaW50ZigiJXM6U0NCIExpc3QgaW5jb25zaXN0ZW5jeS4gIgorCQkJcHJpbnRrKCIlczpTQ0IgTGlzdCBpbmNvbnNpc3RlbmN5LiAiCiAJCQkgICAgICAgIlNDQiA9PSAweCV4LCB5ZXQgbnVtc2NicyA9PSAweCV4LiIsCiAJCQkgICAgICAgYWhkX25hbWUoYWhkKSwgc2NiaWQsIGFoZC0+c2NiX2RhdGEubnVtc2Nicyk7CiAJCQlhaGRfZHVtcF9jYXJkX3N0YXRlKGFoZCk7CkBAIC04NDU0LDcgKzg0NTAsNyBAQAogCQl9CiAJCXNjYiA9IGFoZF9sb29rdXBfc2NiKGFoZCwgc2NiaWQpOwogCQlpZiAoc2NiID09IE5VTEwpIHsKLQkJCXByaW50ZigiJXM6IFNDQiA9ICVkIE5vdCBBY3RpdmUhXG4iLAorCQkJcHJpbnRrKCIlczogU0NCID0gJWQgTm90IEFjdGl2ZSFcbiIsCiAJCQkgICAgICAgYWhkX25hbWUoYWhkKSwgc2NiaWQpOwogCQkJcGFuaWMoIldhaXRpbmcgTGlzdCB0cmF2ZXJzYWxcbiIpOwogCQl9CkBAIC04NDcwLDcgKzg0NjYsNyBAQAogCQlzd2l0Y2ggKGFjdGlvbikgewogCQljYXNlIFNFQVJDSF9DT01QTEVURToKIAkJCWlmICgoc2NiLT5mbGFncyAmIFNDQl9BQ1RJVkUpID09IDApCi0JCQkJcHJpbnRmKCJJbmFjdGl2ZSBTQ0IgaW4gV2FpdGluZyBMaXN0XG4iKTsKKwkJCQlwcmludGsoIkluYWN0aXZlIFNDQiBpbiBXYWl0aW5nIExpc3RcbiIpOwogCQkJYWhkX2RvbmVfd2l0aF9zdGF0dXMoYWhkLCBzY2IsIHN0YXR1cyk7CiAJCQkvKiBGQUxMVEhST1VHSCAqLwogCQljYXNlIFNFQVJDSF9SRU1PVkU6CkBAIC04NDgwLDcgKzg0NzYsNyBAQAogCQkJCSpsaXN0X2hlYWQgPSBuZXh0OwogCQkJYnJlYWs7CiAJCWNhc2UgU0VBUkNIX1BSSU5UOgotCQkJcHJpbnRmKCIweCV4ICIsIHNjYmlkKTsKKwkJCXByaW50aygiMHgleCAiLCBzY2JpZCk7CiAJCWNhc2UgU0VBUkNIX0NPVU5UOgogCQkJcHJldiA9IHNjYmlkOwogCQkJYnJlYWs7CkBAIC04NjY4LDcgKzg2NjQsNyBAQAogCQkJaWYgKGFoZF9nZXRfdHJhbnNhY3Rpb25fc3RhdHVzKHNjYnApICE9IENBTV9SRVFfQ01QKQogCQkJCWFoZF9mcmVlemVfc2NiKHNjYnApOwogCQkJaWYgKChzY2JwLT5mbGFncyAmIFNDQl9BQ1RJVkUpID09IDApCi0JCQkJcHJpbnRmKCJJbmFjdGl2ZSBTQ0Igb24gcGVuZGluZyBsaXN0XG4iKTsKKwkJCQlwcmludGsoIkluYWN0aXZlIFNDQiBvbiBwZW5kaW5nIGxpc3RcbiIpOwogCQkJYWhkX2RvbmUoYWhkLCBzY2JwKTsKIAkJCWZvdW5kKys7CiAJCX0KQEAgLTg3MjUsNyArODcyMSw3IEBACiAJICogQ2hlY2sgaWYgdGhlIGxhc3QgYnVzIHJlc2V0IGlzIGNsZWFyZWQKIAkgKi8KIAlpZiAoYWhkLT5mbGFncyAmIEFIRF9CVVNfUkVTRVRfQUNUSVZFKSB7Ci0JCXByaW50ZigiJXM6IGJ1cyByZXNldCBzdGlsbCBhY3RpdmVcbiIsCisJCXByaW50aygiJXM6IGJ1cyByZXNldCBzdGlsbCBhY3RpdmVcbiIsCiAJCSAgICAgICBhaGRfbmFtZShhaGQpKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtODkwMCw3ICs4ODk2LDcgQEAKIAkJYWhkX2VuYWJsZV9jb2FsZXNjaW5nKGFoZCwgZW5pbnRfY29hbCk7CiAjaWZkZWYgQUhEX0RFQlVHCiAJCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfSU5UX0NPQUxFU0NJTkcpICE9IDApCi0JCQlwcmludGYoIiVzOiBJbnRlcnJ1cHQgY29hbGVzY2luZyAiCisJCQlwcmludGsoIiVzOiBJbnRlcnJ1cHQgY29hbGVzY2luZyAiCiAJCQkgICAgICAgIm5vdyAlc2FibGVkLiBDbWRzICVkXG4iLAogCQkJICAgICAgIGFoZF9uYW1lKGFoZCksCiAJCQkgICAgICAgKGVuaW50X2NvYWwgJiBFTklOVF9DT0FMRVNDRSkgPyAiZW4iIDogImRpcyIsCkBAIC04OTc1LDkgKzg5NzEsOSBAQAogI2lmZGVmIEFIRF9ERUJVRwogCQlpZiAoKGFoZF9kZWJ1ZyAmIEFIRF9TSE9XX1NFTlNFKSAhPSAwKSB7CiAJCQlhaGRfcHJpbnRfcGF0aChhaGQsIHNjYik7Ci0JCQlwcmludGYoIlNDQiAweCV4IFJlY2VpdmVkIFBLVCBTdGF0dXMgb2YgMHgleFxuIiwKKwkJCXByaW50aygiU0NCIDB4JXggUmVjZWl2ZWQgUEtUIFN0YXR1cyBvZiAweCV4XG4iLAogCQkJICAgICAgIFNDQl9HRVRfVEFHKHNjYiksIHNpdS0+c3RhdHVzKTsKLQkJCXByaW50ZigiXHRmbGFncyA9IDB4JXgsIHNlbnNlIGxlbiA9IDB4JXgsICIKKwkJCXByaW50aygiXHRmbGFncyA9IDB4JXgsIHNlbnNlIGxlbiA9IDB4JXgsICIKIAkJCSAgICAgICAicGt0ZmFpbCA9IDB4JXhcbiIsCiAJCQkgICAgICAgc2l1LT5mbGFncywgc2NzaV80YnRvdWwoc2l1LT5zZW5zZV9sZW5ndGgpLAogCQkJICAgICAgIHNjc2lfNGJ0b3VsKHNpdS0+cGt0X2ZhaWx1cmVzX2xlbmd0aCkpOwpAQCAtODk4NiwyNyArODk4MiwyNyBAQAogCQlpZiAoKHNpdS0+ZmxhZ3MgJiBTSVVfUlNQVkFMSUQpICE9IDApIHsKIAkJCWFoZF9wcmludF9wYXRoKGFoZCwgc2NiKTsKIAkJCWlmIChzY3NpXzRidG91bChzaXUtPnBrdF9mYWlsdXJlc19sZW5ndGgpIDwgNCkgewotCQkJCXByaW50ZigiVW5hYmxlIHRvIHBhcnNlIHBrdF9mYWlsdXJlc1xuIik7CisJCQkJcHJpbnRrKCJVbmFibGUgdG8gcGFyc2UgcGt0X2ZhaWx1cmVzXG4iKTsKIAkJCX0gZWxzZSB7CiAKIAkJCQlzd2l0Y2ggKFNJVV9QS1RGQUlMX0NPREUoc2l1KSkgewogCQkJCWNhc2UgU0lVX1BGQ19OT05FOgotCQkJCQlwcmludGYoIk5vIHBhY2tldCBmYWlsdXJlIGZvdW5kXG4iKTsKKwkJCQkJcHJpbnRrKCJObyBwYWNrZXQgZmFpbHVyZSBmb3VuZFxuIik7CiAJCQkJCWJyZWFrOwogCQkJCWNhc2UgU0lVX1BGQ19DSVVfRklFTERTX0lOVkFMSUQ6Ci0JCQkJCXByaW50ZigiSW52YWxpZCBDb21tYW5kIElVIEZpZWxkXG4iKTsKKwkJCQkJcHJpbnRrKCJJbnZhbGlkIENvbW1hbmQgSVUgRmllbGRcbiIpOwogCQkJCQlicmVhazsKIAkJCQljYXNlIFNJVV9QRkNfVE1GX05PVF9TVVBQT1JURUQ6Ci0JCQkJCXByaW50ZigiVE1GIG5vdCBzdXBwb3J0ZFxuIik7CisJCQkJCXByaW50aygiVE1GIG5vdCBzdXBwb3J0ZFxuIik7CiAJCQkJCWJyZWFrOwogCQkJCWNhc2UgU0lVX1BGQ19UTUZfRkFJTEVEOgotCQkJCQlwcmludGYoIlRNRiBmYWlsZWRcbiIpOworCQkJCQlwcmludGsoIlRNRiBmYWlsZWRcbiIpOwogCQkJCQlicmVhazsKIAkJCQljYXNlIFNJVV9QRkNfSU5WQUxJRF9UWVBFX0NPREU6Ci0JCQkJCXByaW50ZigiSW52YWxpZCBMX1EgVHlwZSBjb2RlXG4iKTsKKwkJCQkJcHJpbnRrKCJJbnZhbGlkIExfUSBUeXBlIGNvZGVcbiIpOwogCQkJCQlicmVhazsKIAkJCQljYXNlIFNJVV9QRkNfSUxMRUdBTF9SRVFVRVNUOgotCQkJCQlwcmludGYoIklsbGVnYWwgcmVxdWVzdFxuIik7CisJCQkJCXByaW50aygiSWxsZWdhbCByZXF1ZXN0XG4iKTsKIAkJCQlkZWZhdWx0OgogCQkJCQlicmVhazsKIAkJCQl9CkBAIC05MDE5LDcgKzkwMTUsNyBAQAogCQkJc2NiLT5mbGFncyB8PSBTQ0JfUEtUX1NFTlNFOwogI2lmZGVmIEFIRF9ERUJVRwogCQkJaWYgKChhaGRfZGVidWcgJiBBSERfU0hPV19TRU5TRSkgIT0gMCkKLQkJCQlwcmludGYoIlNlbnNlIGRhdGEgYXZhaWxhYmxlXG4iKTsKKwkJCQlwcmludGsoIlNlbnNlIGRhdGEgYXZhaWxhYmxlXG4iKTsKICNlbmRpZgogCQl9CiAJCWFoZF9kb25lKGFoZCwgc2NiKTsKQEAgLTkwMzcsNyArOTAzMyw3IEBACiAjaWZkZWYgQUhEX0RFQlVHCiAJCWlmIChhaGRfZGVidWcgJiBBSERfU0hPV19TRU5TRSkgewogCQkJYWhkX3ByaW50X3BhdGgoYWhkLCBzY2IpOwotCQkJcHJpbnRmKCJTQ0IgJWQ6IHJlcXVlc3RzIENoZWNrIFN0YXR1c1xuIiwKKwkJCXByaW50aygiU0NCICVkOiByZXF1ZXN0cyBDaGVjayBTdGF0dXNcbiIsCiAJCQkgICAgICAgU0NCX0dFVF9UQUcoc2NiKSk7CiAJCX0KICNlbmRpZgpAQCAtOTA2NSw3ICs5MDYxLDcgQEAKICNpZmRlZiBBSERfREVCVUcKIAkJaWYgKGFoZF9kZWJ1ZyAmIEFIRF9TSE9XX1NFTlNFKSB7CiAJCQlhaGRfcHJpbnRfcGF0aChhaGQsIHNjYik7Ci0JCQlwcmludGYoIlNlbmRpbmcgU2Vuc2VcbiIpOworCQkJcHJpbnRrKCJTZW5kaW5nIFNlbnNlXG4iKTsKIAkJfQogI2VuZGlmCiAJCXNjYi0+c2dfY291bnQgPSAwOwpAQCAtOTExNyw3ICs5MTEzLDcgQEAKIAkJYnJlYWs7CiAJfQogCWNhc2UgU0NTSV9TVEFUVVNfT0s6Ci0JCXByaW50ZigiJXM6IEludGVycnVwdGVkIGZvciBzdGF1cyBvZiAwPz8/XG4iLAorCQlwcmludGsoIiVzOiBJbnRlcnJ1cHRlZCBmb3Igc3RhdXMgb2YgMD8/P1xuIiwKIAkJICAgICAgIGFoZF9uYW1lKGFoZCkpOwogCQkvKiBGQUxMVEhST1VHSCAqLwogCWRlZmF1bHQ6CkBAIC05MTkyLDcgKzkxODgsNyBAQAogCQlyZXR1cm47CiAJfSBlbHNlIGlmICgocmVzaWRfc2dwdHIgJiBTR19PVkVSUlVOX1JFU0lEKSAhPSAwKSB7CiAJCWFoZF9wcmludF9wYXRoKGFoZCwgc2NiKTsKLQkJcHJpbnRmKCJkYXRhIG92ZXJydW4gZGV0ZWN0ZWQgVGFnID09IDB4JXguXG4iLAorCQlwcmludGsoImRhdGEgb3ZlcnJ1biBkZXRlY3RlZCBUYWcgPT0gMHgleC5cbiIsCiAJCSAgICAgICBTQ0JfR0VUX1RBRyhzY2IpKTsKIAkJYWhkX2ZyZWV6ZV9kZXZxKGFoZCwgc2NiKTsKIAkJYWhkX3NldF90cmFuc2FjdGlvbl9zdGF0dXMoc2NiLCBDQU1fREFUQV9SVU5fRVJSKTsKQEAgLTkyMzIsNyArOTIyOCw3IEBACiAjaWZkZWYgQUhEX0RFQlVHCiAJaWYgKChhaGRfZGVidWcgJiBBSERfU0hPV19NSVNDKSAhPSAwKSB7CiAJCWFoZF9wcmludF9wYXRoKGFoZCwgc2NiKTsKLQkJcHJpbnRmKCJIYW5kbGVkICVzUmVzaWR1YWwgb2YgJWQgYnl0ZXNcbiIsCisJCXByaW50aygiSGFuZGxlZCAlc1Jlc2lkdWFsIG9mICVkIGJ5dGVzXG4iLAogCQkgICAgICAgKHNjYi0+ZmxhZ3MgJiBTQ0JfU0VOU0UpID8gIlNlbnNlICIgOiAiIiwgcmVzaWQpOwogCX0KICNlbmRpZgpAQCAtOTI3Miw3ICs5MjY4LDcgQEAKIAogCWlmIChwZW5kaW5nID09IEFIRF9UTU9ERV9FVkVOVF9CVUZGRVJfU0laRSkgewogCQl4cHRfcHJpbnRfcGF0aChsc3RhdGUtPnBhdGgpOwotCQlwcmludGYoImltbWVkaWF0ZSBldmVudCAleDoleCBsb3N0XG4iLAorCQlwcmludGsoImltbWVkaWF0ZSBldmVudCAleDoleCBsb3N0XG4iLAogCQkgICAgICAgbHN0YXRlLT5ldmVudF9idWZmZXJbbHN0YXRlLT5ldmVudF9yX2lkeF0uZXZlbnRfdHlwZSwKIAkJICAgICAgIGxzdGF0ZS0+ZXZlbnRfYnVmZmVyW2xzdGF0ZS0+ZXZlbnRfcl9pZHhdLmV2ZW50X2FyZyk7CiAJCWxzdGF0ZS0+ZXZlbnRfcl9pZHgrKzsKQEAgLTkzNDQsNyArOTM0MCw3IEBACiAJCXVpbnQ4X3QgaW5zX2J5dGVzWzRdOwogCiAJCWFoZF9pbnNiKGFoZCwgU0VRUkFNLCBpbnNfYnl0ZXMsIDQpOwotCQlwcmludGYoIjB4JTA4eFxuIiwgaW5zX2J5dGVzWzBdIDw8IDI0CisJCXByaW50aygiMHglMDh4XG4iLCBpbnNfYnl0ZXNbMF0gPDwgMjQKIAkJCQkgfCBpbnNfYnl0ZXNbMV0gPDwgMTYKIAkJCQkgfCBpbnNfYnl0ZXNbMl0gPDwgOAogCQkJCSB8IGluc19ieXRlc1szXSk7CkBAIC05MzcyLDcgKzkzNjgsNyBAQAogCXVpbnQ4X3QJZG93bmxvYWRfY29uc3RzW0RPV05MT0FEX0NPTlNUX0NPVU5UXTsKIAogCWlmIChib290dmVyYm9zZSkKLQkJcHJpbnRmKCIlczogRG93bmxvYWRpbmcgU2VxdWVuY2VyIFByb2dyYW0uLi4iLAorCQlwcmludGsoIiVzOiBEb3dubG9hZGluZyBTZXF1ZW5jZXIgUHJvZ3JhbS4uLiIsCiAJCSAgICAgICBhaGRfbmFtZShhaGQpKTsKIAogI2lmIERPV05MT0FEX0NPTlNUX0NPVU5UICE9IDgKQEAgLTk0OTgsNyArOTQ5NCw3IEBACiAJaWYgKGNzX2NvdW50ICE9IDApIHsKIAogCQljc19jb3VudCAqPSBzaXplb2Yoc3RydWN0IGNzKTsKLQkJYWhkLT5jcml0aWNhbF9zZWN0aW9ucyA9IG1hbGxvYyhjc19jb3VudCwgTV9ERVZCVUYsIE1fTk9XQUlUKTsKKwkJYWhkLT5jcml0aWNhbF9zZWN0aW9ucyA9IGttYWxsb2MoY3NfY291bnQsIEdGUF9BVE9NSUMpOwogCQlpZiAoYWhkLT5jcml0aWNhbF9zZWN0aW9ucyA9PSBOVUxMKQogCQkJcGFuaWMoImFoZF9sb2Fkc2VxOiBDb3VsZCBub3QgbWFsbG9jIik7CiAJCW1lbWNweShhaGQtPmNyaXRpY2FsX3NlY3Rpb25zLCBjc190YWJsZSwgY3NfY291bnQpOwpAQCAtOTUwNiw4ICs5NTAyLDggQEAKIAlhaGRfb3V0YihhaGQsIFNFUUNUTDAsIFBFUlJPUkRJU3xGQUlMRElTfEZBU1RNT0RFKTsKIAogCWlmIChib290dmVyYm9zZSkgewotCQlwcmludGYoIiAlZCBpbnN0cnVjdGlvbnMgZG93bmxvYWRlZFxuIiwgZG93bmxvYWRlZCk7Ci0JCXByaW50ZigiJXM6IEZlYXR1cmVzIDB4JXgsIEJ1Z3MgMHgleCwgRmxhZ3MgMHgleFxuIiwKKwkJcHJpbnRrKCIgJWQgaW5zdHJ1Y3Rpb25zIGRvd25sb2FkZWRcbiIsIGRvd25sb2FkZWQpOworCQlwcmludGsoIiVzOiBGZWF0dXJlcyAweCV4LCBCdWdzIDB4JXgsIEZsYWdzIDB4JXhcbiIsCiAJCSAgICAgICBhaGRfbmFtZShhaGQpLCBhaGQtPmZlYXR1cmVzLCBhaGQtPmJ1Z3MsIGFoZC0+ZmxhZ3MpOwogCX0KIH0KQEAgLTk2OTAsMTIgKzk2ODYsMTIgQEAKIAl1X2ludAlwcmludGVkX21hc2s7CiAKIAlpZiAoY3VyX2NvbHVtbiAhPSBOVUxMICYmICpjdXJfY29sdW1uID49IHdyYXBfcG9pbnQpIHsKLQkJcHJpbnRmKCJcbiIpOworCQlwcmludGsoIlxuIik7CiAJCSpjdXJfY29sdW1uID0gMDsKIAl9Ci0JcHJpbnRlZCA9IHByaW50ZigiJXNbMHgleF0iLCBuYW1lLCB2YWx1ZSk7CisJcHJpbnRlZCA9IHByaW50aygiJXNbMHgleF0iLCBuYW1lLCB2YWx1ZSk7CiAJaWYgKHRhYmxlID09IE5VTEwpIHsKLQkJcHJpbnRlZCArPSBwcmludGYoIiAiKTsKKwkJcHJpbnRlZCArPSBwcmludGsoIiAiKTsKIAkJKmN1cl9jb2x1bW4gKz0gcHJpbnRlZDsKIAkJcmV0dXJuIChwcmludGVkKTsKIAl9CkBAIC05NzEwLDcgKzk3MDYsNyBAQAogCQkJICA9PSB0YWJsZVtlbnRyeV0ubWFzaykpCiAJCQkJY29udGludWU7CiAKLQkJCXByaW50ZWQgKz0gcHJpbnRmKCIlcyVzIiwKKwkJCXByaW50ZWQgKz0gcHJpbnRrKCIlcyVzIiwKIAkJCQkJICBwcmludGVkX21hc2sgPT0gMCA/ICI6KCIgOiAifCIsCiAJCQkJCSAgdGFibGVbZW50cnldLm5hbWUpOwogCQkJcHJpbnRlZF9tYXNrIHw9IHRhYmxlW2VudHJ5XS5tYXNrOwpAQCAtOTcyMSw5ICs5NzE3LDkgQEAKIAkJCWJyZWFrOwogCX0KIAlpZiAocHJpbnRlZF9tYXNrICE9IDApCi0JCXByaW50ZWQgKz0gcHJpbnRmKCIpICIpOworCQlwcmludGVkICs9IHByaW50aygiKSAiKTsKIAllbHNlCi0JCXByaW50ZWQgKz0gcHJpbnRmKCIgIik7CisJCXByaW50ZWQgKz0gcHJpbnRrKCIgIik7CiAJaWYgKGN1cl9jb2x1bW4gIT0gTlVMTCkKIAkJKmN1cl9jb2x1bW4gKz0gcHJpbnRlZDsKIAlyZXR1cm4gKHByaW50ZWQpOwpAQCAtOTc0OSwxNyArOTc0NSwxNyBAQAogCX0KIAlzYXZlZF9tb2RlcyA9IGFoZF9zYXZlX21vZGVzKGFoZCk7CiAJYWhkX3NldF9tb2RlcyhhaGQsIEFIRF9NT0RFX1NDU0ksIEFIRF9NT0RFX1NDU0kpOwotCXByaW50ZigiPj4+Pj4+Pj4+Pj4+Pj4+Pj4+IER1bXAgQ2FyZCBTdGF0ZSBCZWdpbnMgPDw8PDw8PDw8PDw8PDw8PDxcbiIKKwlwcmludGsoIj4+Pj4+Pj4+Pj4+Pj4+Pj4+PiBEdW1wIENhcmQgU3RhdGUgQmVnaW5zIDw8PDw8PDw8PDw8PDw8PDw8XG4iCiAJICAgICAgICIlczogRHVtcGluZyBDYXJkIFN0YXRlIGF0IHByb2dyYW0gYWRkcmVzcyAweCV4IE1vZGUgMHgleFxuIiwKIAkgICAgICAgYWhkX25hbWUoYWhkKSwgCiAJICAgICAgIGFoZF9pbncoYWhkLCBDVVJBRERSKSwKIAkgICAgICAgYWhkX2J1aWxkX21vZGVfc3RhdGUoYWhkLCBhaGQtPnNhdmVkX3NyY19tb2RlLAogCQkJCSAgICBhaGQtPnNhdmVkX2RzdF9tb2RlKSk7CiAJaWYgKHBhdXNlZCkKLQkJcHJpbnRmKCJDYXJkIHdhcyBwYXVzZWRcbiIpOworCQlwcmludGsoIkNhcmQgd2FzIHBhdXNlZFxuIik7CiAKIAlpZiAoYWhkX2NoZWNrX2NtZGNtcGx0cXVldWVzKGFoZCkpCi0JCXByaW50ZigiQ29tcGxldGlvbnMgYXJlIHBlbmRpbmdcbiIpOworCQlwcmludGsoIkNvbXBsZXRpb25zIGFyZSBwZW5kaW5nXG4iKTsKIAogCS8qCiAJICogTW9kZSBpbmRlcGVuZGVudCByZWdpc3RlcnMuCkBAIC05ODAxLDggKzk3OTcsOCBAQAogCWFoZF9scW9zdGF0MF9wcmludChhaGRfaW5iKGFoZCwgTFFPU1RBVDApLCAmY3VyX2NvbCwgNTApOwogCWFoZF9scW9zdGF0MV9wcmludChhaGRfaW5iKGFoZCwgTFFPU1RBVDEpLCAmY3VyX2NvbCwgNTApOwogCWFoZF9scW9zdGF0Ml9wcmludChhaGRfaW5iKGFoZCwgTFFPU1RBVDIpLCAmY3VyX2NvbCwgNTApOwotCXByaW50ZigiXG4iKTsKLQlwcmludGYoIlxuU0NCIENvdW50ID0gJWQgQ01EU19QRU5ESU5HID0gJWQgTEFTVFNDQiAweCV4ICIKKwlwcmludGsoIlxuIik7CisJcHJpbnRrKCJcblNDQiBDb3VudCA9ICVkIENNRFNfUEVORElORyA9ICVkIExBU1RTQ0IgMHgleCAiCiAJICAgICAgICJDVVJSU0NCIDB4JXggTkVYVFNDQiAweCV4XG4iLAogCSAgICAgICBhaGQtPnNjYl9kYXRhLm51bXNjYnMsIGFoZF9pbncoYWhkLCBDTURTX1BFTkRJTkcpLAogCSAgICAgICBhaGRfaW53KGFoZCwgTEFTVFNDQiksIGFoZF9pbncoYWhkLCBDVVJSU0NCKSwKQEAgLTk4MTMsMTIgKzk4MDksMTIgQEAKIAkJCSAgIENBTV9MVU5fV0lMRENBUkQsIFNDQl9MSVNUX05VTEwsCiAJCQkgICBST0xFX1VOS05PV04sIC8qc3RhdHVzKi8wLCBTRUFSQ0hfUFJJTlQpOwogCXNhdmVkX3NjYl9pbmRleCA9IGFoZF9nZXRfc2NicHRyKGFoZCk7Ci0JcHJpbnRmKCJQZW5kaW5nIGxpc3Q6Iik7CisJcHJpbnRrKCJQZW5kaW5nIGxpc3Q6Iik7CiAJaSA9IDA7CiAJTElTVF9GT1JFQUNIKHNjYiwgJmFoZC0+cGVuZGluZ19zY2JzLCBwZW5kaW5nX2xpbmtzKSB7CiAJCWlmIChpKysgPiBBSERfU0NCX01BWCkKIAkJCWJyZWFrOwotCQljdXJfY29sID0gcHJpbnRmKCJcbiUzZCBGSUZPX1VTRVsweCV4XSAiLCBTQ0JfR0VUX1RBRyhzY2IpLAorCQljdXJfY29sID0gcHJpbnRrKCJcbiUzZCBGSUZPX1VTRVsweCV4XSAiLCBTQ0JfR0VUX1RBRyhzY2IpLAogCQkJCSBhaGRfaW5iX3NjYnJhbShhaGQsIFNDQl9GSUZPX1VTRV9DT1VOVCkpOwogCQlhaGRfc2V0X3NjYnB0cihhaGQsIFNDQl9HRVRfVEFHKHNjYikpOwogCQlhaGRfc2NiX2NvbnRyb2xfcHJpbnQoYWhkX2luYl9zY2JyYW0oYWhkLCBTQ0JfQ09OVFJPTCksCkBAIC05ODI2LDE2ICs5ODIyLDE2IEBACiAJCWFoZF9zY2Jfc2NzaWlkX3ByaW50KGFoZF9pbmJfc2NicmFtKGFoZCwgU0NCX1NDU0lJRCksCiAJCQkJICAgICAmY3VyX2NvbCwgNjApOwogCX0KLQlwcmludGYoIlxuVG90YWwgJWRcbiIsIGkpOworCXByaW50aygiXG5Ub3RhbCAlZFxuIiwgaSk7CiAKLQlwcmludGYoIktlcm5lbCBGcmVlIFNDQiBsaXN0OiAiKTsKKwlwcmludGsoIktlcm5lbCBGcmVlIFNDQiBsaXN0OiAiKTsKIAlpID0gMDsKIAlUQUlMUV9GT1JFQUNIKHNjYiwgJmFoZC0+c2NiX2RhdGEuZnJlZV9zY2JzLCBsaW5rcy50cWUpIHsKIAkJc3RydWN0IHNjYiAqbGlzdF9zY2I7CiAKIAkJbGlzdF9zY2IgPSBzY2I7CiAJCWRvIHsKLQkJCXByaW50ZigiJWQgIiwgU0NCX0dFVF9UQUcobGlzdF9zY2IpKTsKKwkJCXByaW50aygiJWQgIiwgU0NCX0dFVF9UQUcobGlzdF9zY2IpKTsKIAkJCWxpc3Rfc2NiID0gTElTVF9ORVhUKGxpc3Rfc2NiLCBjb2xsaXNpb25fbGlua3MpOwogCQl9IHdoaWxlIChsaXN0X3NjYiAmJiBpKysgPCBBSERfU0NCX01BWCk7CiAJfQpAQCAtOTg0Myw0OSArOTgzOSw0OSBAQAogCUxJU1RfRk9SRUFDSChzY2IsICZhaGQtPnNjYl9kYXRhLmFueV9kZXZfZnJlZV9zY2JfbGlzdCwgbGlua3MubGUpIHsKIAkJaWYgKGkrKyA+IEFIRF9TQ0JfTUFYKQogCQkJYnJlYWs7Ci0JCXByaW50ZigiJWQgIiwgU0NCX0dFVF9UQUcoc2NiKSk7CisJCXByaW50aygiJWQgIiwgU0NCX0dFVF9UQUcoc2NiKSk7CiAJfQotCXByaW50ZigiXG4iKTsKKwlwcmludGsoIlxuIik7CiAKLQlwcmludGYoIlNlcXVlbmNlciBDb21wbGV0ZSBETUEtaW5wcm9nIGxpc3Q6ICIpOworCXByaW50aygiU2VxdWVuY2VyIENvbXBsZXRlIERNQS1pbnByb2cgbGlzdDogIik7CiAJc2NiX2luZGV4ID0gYWhkX2ludyhhaGQsIENPTVBMRVRFX1NDQl9ETUFJTlBST0dfSEVBRCk7CiAJaSA9IDA7CiAJd2hpbGUgKCFTQ0JJRF9JU19OVUxMKHNjYl9pbmRleCkgJiYgaSsrIDwgQUhEX1NDQl9NQVgpIHsKIAkJYWhkX3NldF9zY2JwdHIoYWhkLCBzY2JfaW5kZXgpOwotCQlwcmludGYoIiVkICIsIHNjYl9pbmRleCk7CisJCXByaW50aygiJWQgIiwgc2NiX2luZGV4KTsKIAkJc2NiX2luZGV4ID0gYWhkX2lud19zY2JyYW0oYWhkLCBTQ0JfTkVYVF9DT01QTEVURSk7CiAJfQotCXByaW50ZigiXG4iKTsKKwlwcmludGsoIlxuIik7CiAKLQlwcmludGYoIlNlcXVlbmNlciBDb21wbGV0ZSBsaXN0OiAiKTsKKwlwcmludGsoIlNlcXVlbmNlciBDb21wbGV0ZSBsaXN0OiAiKTsKIAlzY2JfaW5kZXggPSBhaGRfaW53KGFoZCwgQ09NUExFVEVfU0NCX0hFQUQpOwogCWkgPSAwOwogCXdoaWxlICghU0NCSURfSVNfTlVMTChzY2JfaW5kZXgpICYmIGkrKyA8IEFIRF9TQ0JfTUFYKSB7CiAJCWFoZF9zZXRfc2NicHRyKGFoZCwgc2NiX2luZGV4KTsKLQkJcHJpbnRmKCIlZCAiLCBzY2JfaW5kZXgpOworCQlwcmludGsoIiVkICIsIHNjYl9pbmRleCk7CiAJCXNjYl9pbmRleCA9IGFoZF9pbndfc2NicmFtKGFoZCwgU0NCX05FWFRfQ09NUExFVEUpOwogCX0KLQlwcmludGYoIlxuIik7CisJcHJpbnRrKCJcbiIpOwogCiAJCi0JcHJpbnRmKCJTZXF1ZW5jZXIgRE1BLVVwIGFuZCBDb21wbGV0ZSBsaXN0OiAiKTsKKwlwcmludGsoIlNlcXVlbmNlciBETUEtVXAgYW5kIENvbXBsZXRlIGxpc3Q6ICIpOwogCXNjYl9pbmRleCA9IGFoZF9pbncoYWhkLCBDT01QTEVURV9ETUFfU0NCX0hFQUQpOwogCWkgPSAwOwogCXdoaWxlICghU0NCSURfSVNfTlVMTChzY2JfaW5kZXgpICYmIGkrKyA8IEFIRF9TQ0JfTUFYKSB7CiAJCWFoZF9zZXRfc2NicHRyKGFoZCwgc2NiX2luZGV4KTsKLQkJcHJpbnRmKCIlZCAiLCBzY2JfaW5kZXgpOworCQlwcmludGsoIiVkICIsIHNjYl9pbmRleCk7CiAJCXNjYl9pbmRleCA9IGFoZF9pbndfc2NicmFtKGFoZCwgU0NCX05FWFRfQ09NUExFVEUpOwogCX0KLQlwcmludGYoIlxuIik7Ci0JcHJpbnRmKCJTZXF1ZW5jZXIgT24gUUZyZWV6ZSBhbmQgQ29tcGxldGUgbGlzdDogIik7CisJcHJpbnRrKCJcbiIpOworCXByaW50aygiU2VxdWVuY2VyIE9uIFFGcmVlemUgYW5kIENvbXBsZXRlIGxpc3Q6ICIpOwogCXNjYl9pbmRleCA9IGFoZF9pbncoYWhkLCBDT01QTEVURV9PTl9RRlJFRVpFX0hFQUQpOwogCWkgPSAwOwogCXdoaWxlICghU0NCSURfSVNfTlVMTChzY2JfaW5kZXgpICYmIGkrKyA8IEFIRF9TQ0JfTUFYKSB7CiAJCWFoZF9zZXRfc2NicHRyKGFoZCwgc2NiX2luZGV4KTsKLQkJcHJpbnRmKCIlZCAiLCBzY2JfaW5kZXgpOworCQlwcmludGsoIiVkICIsIHNjYl9pbmRleCk7CiAJCXNjYl9pbmRleCA9IGFoZF9pbndfc2NicmFtKGFoZCwgU0NCX05FWFRfQ09NUExFVEUpOwogCX0KLQlwcmludGYoIlxuIik7CisJcHJpbnRrKCJcbiIpOwogCWFoZF9zZXRfc2NicHRyKGFoZCwgc2F2ZWRfc2NiX2luZGV4KTsKIAlkZmZzdGF0ID0gYWhkX2luYihhaGQsIERGRlNUQVQpOwogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKQEAgLTk4OTYsNyArOTg5Miw3IEBACiAKIAkJYWhkX3NldF9tb2RlcyhhaGQsIEFIRF9NT0RFX0RGRjAgKyBpLCBBSERfTU9ERV9ERkYwICsgaSk7CiAJCWZpZm9fc2NicHRyID0gYWhkX2dldF9zY2JwdHIoYWhkKTsKLQkJcHJpbnRmKCJcblxuJXM6IEZJRk8lZCAlcywgTE9OR0pNUCA9PSAweCV4LCBTQ0IgMHgleFxuIiwKKwkJcHJpbnRrKCJcblxuJXM6IEZJRk8lZCAlcywgTE9OR0pNUCA9PSAweCV4LCBTQ0IgMHgleFxuIiwKIAkJICAgICAgIGFoZF9uYW1lKGFoZCksIGksCiAJCSAgICAgICAoZGZmc3RhdCAmIChGSUZPMEZSRUUgPDwgaSkpID8gIkZyZWUiIDogIkFjdGl2ZSIsCiAJCSAgICAgICBhaGRfaW53KGFoZCwgTE9OR0pNUF9BRERSKSwgZmlmb19zY2JwdHIpOwpAQCAtOTkxMiwyMCArOTkwOCwyMCBAQAogCQlhaGRfc29mZmNudF9wcmludChhaGRfaW5iKGFoZCwgU09GRkNOVCksICZjdXJfY29sLCA1MCk7CiAJCWFoZF9tZGZmc3RhdF9wcmludChhaGRfaW5iKGFoZCwgTURGRlNUQVQpLCAmY3VyX2NvbCwgNTApOwogCQlpZiAoY3VyX2NvbCA+IDUwKSB7Ci0JCQlwcmludGYoIlxuIik7CisJCQlwcmludGsoIlxuIik7CiAJCQljdXJfY29sID0gMDsKIAkJfQotCQljdXJfY29sICs9IHByaW50ZigiU0hBRERSID0gMHgleCV4LCBTSENOVCA9IDB4JXggIiwKKwkJY3VyX2NvbCArPSBwcmludGsoIlNIQUREUiA9IDB4JXgleCwgU0hDTlQgPSAweCV4ICIsCiAJCQkJICBhaGRfaW5sKGFoZCwgU0hBRERSKzQpLAogCQkJCSAgYWhkX2lubChhaGQsIFNIQUREUiksCiAJCQkJICAoYWhkX2luYihhaGQsIFNIQ05UKQogCQkJCXwgKGFoZF9pbmIoYWhkLCBTSENOVCArIDEpIDw8IDgpCiAJCQkJfCAoYWhkX2luYihhaGQsIFNIQ05UICsgMikgPDwgMTYpKSk7CiAJCWlmIChjdXJfY29sID4gNTApIHsKLQkJCXByaW50ZigiXG4iKTsKKwkJCXByaW50aygiXG4iKTsKIAkJCWN1cl9jb2wgPSAwOwogCQl9Ci0JCWN1cl9jb2wgKz0gcHJpbnRmKCJIQUREUiA9IDB4JXgleCwgSENOVCA9IDB4JXggIiwKKwkJY3VyX2NvbCArPSBwcmludGsoIkhBRERSID0gMHgleCV4LCBIQ05UID0gMHgleCAiLAogCQkJCSAgYWhkX2lubChhaGQsIEhBRERSKzQpLAogCQkJCSAgYWhkX2lubChhaGQsIEhBRERSKSwKIAkJCQkgIChhaGRfaW5iKGFoZCwgSENOVCkKQEAgLTk5NDAsNTIgKzk5MzYsNTIgQEAKIAkJfQogI2VuZGlmCiAJfQotCXByaW50ZigiXG5MUUlOOiAiKTsKKwlwcmludGsoIlxuTFFJTjogIik7CiAJZm9yIChpID0gMDsgaSA8IDIwOyBpKyspCi0JCXByaW50ZigiMHgleCAiLCBhaGRfaW5iKGFoZCwgTFFJTiArIGkpKTsKLQlwcmludGYoIlxuIik7CisJCXByaW50aygiMHgleCAiLCBhaGRfaW5iKGFoZCwgTFFJTiArIGkpKTsKKwlwcmludGsoIlxuIik7CiAJYWhkX3NldF9tb2RlcyhhaGQsIEFIRF9NT0RFX0NGRywgQUhEX01PREVfQ0ZHKTsKLQlwcmludGYoIiVzOiBMUUlTVEFURSA9IDB4JXgsIExRT1NUQVRFID0gMHgleCwgT1BUSU9OTU9ERSA9IDB4JXhcbiIsCisJcHJpbnRrKCIlczogTFFJU1RBVEUgPSAweCV4LCBMUU9TVEFURSA9IDB4JXgsIE9QVElPTk1PREUgPSAweCV4XG4iLAogCSAgICAgICBhaGRfbmFtZShhaGQpLCBhaGRfaW5iKGFoZCwgTFFJU1RBVEUpLCBhaGRfaW5iKGFoZCwgTFFPU1RBVEUpLAogCSAgICAgICBhaGRfaW5iKGFoZCwgT1BUSU9OTU9ERSkpOwotCXByaW50ZigiJXM6IE9TX1NQQUNFX0NOVCA9IDB4JXggTUFYQ01EQ05UID0gMHgleFxuIiwKKwlwcmludGsoIiVzOiBPU19TUEFDRV9DTlQgPSAweCV4IE1BWENNRENOVCA9IDB4JXhcbiIsCiAJICAgICAgIGFoZF9uYW1lKGFoZCksIGFoZF9pbmIoYWhkLCBPU19TUEFDRV9DTlQpLAogCSAgICAgICBhaGRfaW5iKGFoZCwgTUFYQ01EQ05UKSk7Ci0JcHJpbnRmKCIlczogU0FWRURfU0NTSUlEID0gMHgleCBTQVZFRF9MVU4gPSAweCV4XG4iLAorCXByaW50aygiJXM6IFNBVkVEX1NDU0lJRCA9IDB4JXggU0FWRURfTFVOID0gMHgleFxuIiwKIAkgICAgICAgYWhkX25hbWUoYWhkKSwgYWhkX2luYihhaGQsIFNBVkVEX1NDU0lJRCksCiAJICAgICAgIGFoZF9pbmIoYWhkLCBTQVZFRF9MVU4pKTsKIAlhaGRfc2ltb2RlMF9wcmludChhaGRfaW5iKGFoZCwgU0lNT0RFMCksICZjdXJfY29sLCA1MCk7Ci0JcHJpbnRmKCJcbiIpOworCXByaW50aygiXG4iKTsKIAlhaGRfc2V0X21vZGVzKGFoZCwgQUhEX01PREVfQ0NIQU4sIEFIRF9NT0RFX0NDSEFOKTsKIAljdXJfY29sID0gMDsKIAlhaGRfY2NzY2JjdGxfcHJpbnQoYWhkX2luYihhaGQsIENDU0NCQ1RMKSwgJmN1cl9jb2wsIDUwKTsKLQlwcmludGYoIlxuIik7CisJcHJpbnRrKCJcbiIpOwogCWFoZF9zZXRfbW9kZXMoYWhkLCBhaGQtPnNhdmVkX3NyY19tb2RlLCBhaGQtPnNhdmVkX2RzdF9tb2RlKTsKLQlwcmludGYoIiVzOiBSRUcwID09IDB4JXgsIFNJTkRFWCA9IDB4JXgsIERJTkRFWCA9IDB4JXhcbiIsCisJcHJpbnRrKCIlczogUkVHMCA9PSAweCV4LCBTSU5ERVggPSAweCV4LCBESU5ERVggPSAweCV4XG4iLAogCSAgICAgICBhaGRfbmFtZShhaGQpLCBhaGRfaW53KGFoZCwgUkVHMCksIGFoZF9pbncoYWhkLCBTSU5ERVgpLAogCSAgICAgICBhaGRfaW53KGFoZCwgRElOREVYKSk7Ci0JcHJpbnRmKCIlczogU0NCUFRSID09IDB4JXgsIFNDQl9ORVhUID09IDB4JXgsIFNDQl9ORVhUMiA9PSAweCV4XG4iLAorCXByaW50aygiJXM6IFNDQlBUUiA9PSAweCV4LCBTQ0JfTkVYVCA9PSAweCV4LCBTQ0JfTkVYVDIgPT0gMHgleFxuIiwKIAkgICAgICAgYWhkX25hbWUoYWhkKSwgYWhkX2dldF9zY2JwdHIoYWhkKSwKIAkgICAgICAgYWhkX2lud19zY2JyYW0oYWhkLCBTQ0JfTkVYVCksCiAJICAgICAgIGFoZF9pbndfc2NicmFtKGFoZCwgU0NCX05FWFQyKSk7Ci0JcHJpbnRmKCJDREIgJXggJXggJXggJXggJXggJXhcbiIsCisJcHJpbnRrKCJDREIgJXggJXggJXggJXggJXggJXhcbiIsCiAJICAgICAgIGFoZF9pbmJfc2NicmFtKGFoZCwgU0NCX0NEQl9TVE9SRSksCiAJICAgICAgIGFoZF9pbmJfc2NicmFtKGFoZCwgU0NCX0NEQl9TVE9SRSsxKSwKIAkgICAgICAgYWhkX2luYl9zY2JyYW0oYWhkLCBTQ0JfQ0RCX1NUT1JFKzIpLAogCSAgICAgICBhaGRfaW5iX3NjYnJhbShhaGQsIFNDQl9DREJfU1RPUkUrMyksCiAJICAgICAgIGFoZF9pbmJfc2NicmFtKGFoZCwgU0NCX0NEQl9TVE9SRSs0KSwKIAkgICAgICAgYWhkX2luYl9zY2JyYW0oYWhkLCBTQ0JfQ0RCX1NUT1JFKzUpKTsKLQlwcmludGYoIlNUQUNLOiIpOworCXByaW50aygiU1RBQ0s6Iik7CiAJZm9yIChpID0gMDsgaSA8IGFoZC0+c3RhY2tfc2l6ZTsgaSsrKSB7CiAJCWFoZC0+c2F2ZWRfc3RhY2tbaV0gPQogCQkgICAgYWhkX2luYihhaGQsIFNUQUNLKXwoYWhkX2luYihhaGQsIFNUQUNLKSA8PCA4KTsKLQkJcHJpbnRmKCIgMHgleCIsIGFoZC0+c2F2ZWRfc3RhY2tbaV0pOworCQlwcmludGsoIiAweCV4IiwgYWhkLT5zYXZlZF9zdGFja1tpXSk7CiAJfQogCWZvciAoaSA9IGFoZC0+c3RhY2tfc2l6ZS0xOyBpID49IDA7IGktLSkgewogCQlhaGRfb3V0YihhaGQsIFNUQUNLLCBhaGQtPnNhdmVkX3N0YWNrW2ldICYgMHhGRik7CiAJCWFoZF9vdXRiKGFoZCwgU1RBQ0ssIChhaGQtPnNhdmVkX3N0YWNrW2ldID4+IDgpICYgMHhGRik7CiAJfQotCXByaW50ZigiXG48PDw8PDw8PDw8PDw8PDw8PCBEdW1wIENhcmQgU3RhdGUgRW5kcyA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj5cbiIpOworCXByaW50aygiXG48PDw8PDw8PDw8PDw8PDw8PCBEdW1wIENhcmQgU3RhdGUgRW5kcyA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj5cbiIpOwogCWFoZF9yZXN0b3JlX21vZGVzKGFoZCwgc2F2ZWRfbW9kZXMpOwogCWlmIChwYXVzZWQgPT0gMCkKIAkJYWhkX3VucGF1c2UoYWhkKTsKQEAgLTEwMDA0LDggKzEwMDAwLDggQEAKIAlzYXZlZF9zY2JfaW5kZXggPSBhaGRfZ2V0X3NjYnB0cihhaGQpOwogCWZvciAoaSA9IDA7IGkgPCBBSERfU0NCX01BWDsgaSsrKSB7CiAJCWFoZF9zZXRfc2NicHRyKGFoZCwgaSk7Ci0JCXByaW50ZigiJTNkIiwgaSk7Ci0JCXByaW50ZigiKENUUkwgMHgleCBJRCAweCV4IE4gMHgleCBOMiAweCV4IFNHIDB4JXgsIFJTRyAweCV4KVxuIiwKKwkJcHJpbnRrKCIlM2QiLCBpKTsKKwkJcHJpbnRrKCIoQ1RSTCAweCV4IElEIDB4JXggTiAweCV4IE4yIDB4JXggU0cgMHgleCwgUlNHIDB4JXgpXG4iLAogCQkgICAgICAgYWhkX2luYl9zY2JyYW0oYWhkLCBTQ0JfQ09OVFJPTCksCiAJCSAgICAgICBhaGRfaW5iX3NjYnJhbShhaGQsIFNDQl9TQ1NJSUQpLAogCQkgICAgICAgYWhkX2lud19zY2JyYW0oYWhkLCBTQ0JfTkVYVCksCkBAIC0xMDAxMyw3ICsxMDAwOSw3IEBACiAJCSAgICAgICBhaGRfaW5sX3NjYnJhbShhaGQsIFNDQl9TR1BUUiksCiAJCSAgICAgICBhaGRfaW5sX3NjYnJhbShhaGQsIFNDQl9SRVNJRFVBTF9TR1BUUikpOwogCX0KLQlwcmludGYoIlxuIik7CisJcHJpbnRrKCJcbiIpOwogCWFoZF9zZXRfc2NicHRyKGFoZCwgc2F2ZWRfc2NiX2luZGV4KTsKIAlhaGRfcmVzdG9yZV9tb2RlcyhhaGQsIHNhdmVkX21vZGVzKTsKIH0KQEAgLTEwMzgzLDcgKzEwMzc5LDcgQEAKIAkgJiYgY2NiLT5jY2JfaC50YXJnZXRfaWQgIT0gQ0FNX1RBUkdFVF9XSUxEQ0FSRCkgewogCQl1X2xvbmcJczsKIAotCQlwcmludGYoIkNvbmZpZ3VyaW5nIFRhcmdldCBNb2RlXG4iKTsKKwkJcHJpbnRrKCJDb25maWd1cmluZyBUYXJnZXQgTW9kZVxuIik7CiAJCWFoZF9sb2NrKGFoZCwgJnMpOwogCQlpZiAoTElTVF9GSVJTVCgmYWhkLT5wZW5kaW5nX3NjYnMpICE9IE5VTEwpIHsKIAkJCWNjYi0+Y2NiX2guc3RhdHVzID0gQ0FNX0JVU1k7CkBAIC0xMDQxMiw3ICsxMDQwOCw3IEBACiAJCS8qIEFyZSB3ZSBhbHJlYWR5IGVuYWJsZWQ/PyAqLwogCQlpZiAobHN0YXRlICE9IE5VTEwpIHsKIAkJCXhwdF9wcmludF9wYXRoKGNjYi0+Y2NiX2gucGF0aCk7Ci0JCQlwcmludGYoIkx1biBhbHJlYWR5IGVuYWJsZWRcbiIpOworCQkJcHJpbnRrKCJMdW4gYWxyZWFkeSBlbmFibGVkXG4iKTsKIAkJCWNjYi0+Y2NiX2guc3RhdHVzID0gQ0FNX0xVTl9BTFJEWV9FTkE7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTEwNDI0LDcgKzEwNDIwLDcgQEAKIAkJCSAqIHNwZWNpZmljIGNvbW1hbmRzLgogCQkJICovCiAJCQljY2ItPmNjYl9oLnN0YXR1cyA9IENBTV9SRVFfSU5WQUxJRDsKLQkJCXByaW50ZigiTm9uLXplcm8gR3JvdXAgQ29kZXNcbiIpOworCQkJcHJpbnRrKCJOb24temVybyBHcm91cCBDb2Rlc1xuIik7CiAJCQlyZXR1cm47CiAJCX0KIApAQCAtMTA0MzYsMTUgKzEwNDMyLDE1IEBACiAJCQl0c3RhdGUgPSBhaGRfYWxsb2NfdHN0YXRlKGFoZCwgdGFyZ2V0LCBjaGFubmVsKTsKIAkJCWlmICh0c3RhdGUgPT0gTlVMTCkgewogCQkJCXhwdF9wcmludF9wYXRoKGNjYi0+Y2NiX2gucGF0aCk7Ci0JCQkJcHJpbnRmKCJDb3VsZG4ndCBhbGxvY2F0ZSB0c3RhdGVcbiIpOworCQkJCXByaW50aygiQ291bGRuJ3QgYWxsb2NhdGUgdHN0YXRlXG4iKTsKIAkJCQljY2ItPmNjYl9oLnN0YXR1cyA9IENBTV9SRVNSQ19VTkFWQUlMOwogCQkJCXJldHVybjsKIAkJCX0KIAkJfQotCQlsc3RhdGUgPSBtYWxsb2Moc2l6ZW9mKCpsc3RhdGUpLCBNX0RFVkJVRiwgTV9OT1dBSVQpOworCQlsc3RhdGUgPSBrbWFsbG9jKHNpemVvZigqbHN0YXRlKSwgR0ZQX0FUT01JQyk7CiAJCWlmIChsc3RhdGUgPT0gTlVMTCkgewogCQkJeHB0X3ByaW50X3BhdGgoY2NiLT5jY2JfaC5wYXRoKTsKLQkJCXByaW50ZigiQ291bGRuJ3QgYWxsb2NhdGUgbHN0YXRlXG4iKTsKKwkJCXByaW50aygiQ291bGRuJ3QgYWxsb2NhdGUgbHN0YXRlXG4iKTsKIAkJCWNjYi0+Y2NiX2guc3RhdHVzID0gQ0FNX1JFU1JDX1VOQVZBSUw7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTEwNDU0LDkgKzEwNDUwLDkgQEAKIAkJCQkJIHhwdF9wYXRoX3RhcmdldF9pZChjY2ItPmNjYl9oLnBhdGgpLAogCQkJCQkgeHB0X3BhdGhfbHVuX2lkKGNjYi0+Y2NiX2gucGF0aCkpOwogCQlpZiAoc3RhdHVzICE9IENBTV9SRVFfQ01QKSB7Ci0JCQlmcmVlKGxzdGF0ZSwgTV9ERVZCVUYpOworCQkJa2ZyZWUobHN0YXRlKTsKIAkJCXhwdF9wcmludF9wYXRoKGNjYi0+Y2NiX2gucGF0aCk7Ci0JCQlwcmludGYoIkNvdWxkbid0IGFsbG9jYXRlIHBhdGhcbiIpOworCQkJcHJpbnRrKCJDb3VsZG4ndCBhbGxvY2F0ZSBwYXRoXG4iKTsKIAkJCWNjYi0+Y2NiX2guc3RhdHVzID0gQ0FNX1JFU1JDX1VOQVZBSUw7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTEwNTI0LDcgKzEwNTIwLDcgQEAKIAkJYWhkX3VubG9jayhhaGQsICZzKTsKIAkJY2NiLT5jY2JfaC5zdGF0dXMgPSBDQU1fUkVRX0NNUDsKIAkJeHB0X3ByaW50X3BhdGgoY2NiLT5jY2JfaC5wYXRoKTsKLQkJcHJpbnRmKCJMdW4gbm93IGVuYWJsZWQgZm9yIHRhcmdldCBtb2RlXG4iKTsKKwkJcHJpbnRrKCJMdW4gbm93IGVuYWJsZWQgZm9yIHRhcmdldCBtb2RlXG4iKTsKIAl9IGVsc2UgewogCQlzdHJ1Y3Qgc2NiICpzY2I7CiAJCWludCBpLCBlbXB0eTsKQEAgLTEwNTQzLDcgKzEwNTM5LDcgQEAKIAkJCWNjYmggPSAmc2NiLT5pb19jdHgtPmNjYl9oOwogCQkJaWYgKGNjYmgtPmZ1bmNfY29kZSA9PSBYUFRfQ09OVF9UQVJHRVRfSU8KIAkJCSAmJiAheHB0X3BhdGhfY29tcChjY2JoLT5wYXRoLCBjY2ItPmNjYl9oLnBhdGgpKXsKLQkJCQlwcmludGYoIkNUSU8gcGVuZGluZ1xuIik7CisJCQkJcHJpbnRrKCJDVElPIHBlbmRpbmdcbiIpOwogCQkJCWNjYi0+Y2NiX2guc3RhdHVzID0gQ0FNX1JFUV9JTlZBTElEOwogCQkJCWFoZF91bmxvY2soYWhkLCAmcyk7CiAJCQkJcmV0dXJuOwpAQCAtMTA1NTEsMTIgKzEwNTQ3LDEyIEBACiAJCX0KIAogCQlpZiAoU0xJU1RfRklSU1QoJmxzdGF0ZS0+YWNjZXB0X3Rpb3MpICE9IE5VTEwpIHsKLQkJCXByaW50ZigiQVRJT3MgcGVuZGluZ1xuIik7CisJCQlwcmludGsoIkFUSU9zIHBlbmRpbmdcbiIpOwogCQkJY2NiLT5jY2JfaC5zdGF0dXMgPSBDQU1fUkVRX0lOVkFMSUQ7CiAJCX0KIAogCQlpZiAoU0xJU1RfRklSU1QoJmxzdGF0ZS0+aW1tZWRfbm90aWZpZXMpICE9IE5VTEwpIHsKLQkJCXByaW50ZigiSU5PVHMgcGVuZGluZ1xuIik7CisJCQlwcmludGsoIklOT1RzIHBlbmRpbmdcbiIpOwogCQkJY2NiLT5jY2JfaC5zdGF0dXMgPSBDQU1fUkVRX0lOVkFMSUQ7CiAJCX0KIApAQCAtMTA1NjYsOSArMTA1NjIsOSBAQAogCQl9CiAKIAkJeHB0X3ByaW50X3BhdGgoY2NiLT5jY2JfaC5wYXRoKTsKLQkJcHJpbnRmKCJUYXJnZXQgbW9kZSBkaXNhYmxlZFxuIik7CisJCXByaW50aygiVGFyZ2V0IG1vZGUgZGlzYWJsZWRcbiIpOwogCQl4cHRfZnJlZV9wYXRoKGxzdGF0ZS0+cGF0aCk7Ci0JCWZyZWUobHN0YXRlLCBNX0RFVkJVRik7CisJCWtmcmVlKGxzdGF0ZSk7CiAKIAkJYWhkX3BhdXNlKGFoZCk7CiAJCS8qIENhbiB3ZSBjbGVhbiB1cCB0aGUgdGFyZ2V0IHRvbz8gKi8KQEAgLTEwNjE1LDcgKzEwNjExLDcgQEAKIAkJCWFoZF9vdXRiKGFoZCwgU0NTSVNFUTEsIHNjc2lzZXExKTsKIAogCQkJaWYgKChhaGQtPmZlYXR1cmVzICYgQUhEX01VTFRJUk9MRSkgPT0gMCkgewotCQkJCXByaW50ZigiQ29uZmlndXJpbmcgSW5pdGlhdG9yIE1vZGVcbiIpOworCQkJCXByaW50aygiQ29uZmlndXJpbmcgSW5pdGlhdG9yIE1vZGVcbiIpOwogCQkJCWFoZC0+ZmxhZ3MgJj0gfkFIRF9UQVJHRVRST0xFOwogCQkJCWFoZC0+ZmxhZ3MgfD0gQUhEX0lOSVRJQVRPUlJPTEU7CiAJCQkJYWhkX3BhdXNlKGFoZCk7CkBAIC0xMDc0OSw3ICsxMDc0NSw3IEBACiAJCWFoZC0+ZmxhZ3MgJj0gfkFIRF9UUUlORklGT19CTE9DS0VEOwogI2lmZGVmIEFIRF9ERUJVRwogCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfVFFJTikgIT0gMCkKLQkJcHJpbnRmKCJJbmNvbWluZyBjb21tYW5kIGZyb20gJWQgZm9yICVkOiVkJXNcbiIsCisJCXByaW50aygiSW5jb21pbmcgY29tbWFuZCBmcm9tICVkIGZvciAlZDolZCVzXG4iLAogCQkgICAgICAgaW5pdGlhdG9yLCB0YXJnZXQsIGx1biwKIAkJICAgICAgIGxzdGF0ZSA9PSBhaGQtPmJsYWNrX2hvbGUgPyAiKEJsYWNrIEhvbGVkKSIgOiAiIik7CiAjZW5kaWYKQEAgLTEwNzk2LDcgKzEwNzkyLDcgQEAKIAlkZWZhdWx0OgogCQkvKiBPbmx5IGNvcHkgdGhlIG9wY29kZS4gKi8KIAkJYXRpby0+Y2RiX2xlbiA9IDE7Ci0JCXByaW50ZigiUmVzZXJ2ZWQgb3IgVlUgY29tbWFuZCBjb2RlIHR5cGUgZW5jb3VudGVyZWRcbiIpOworCQlwcmludGsoIlJlc2VydmVkIG9yIFZVIGNvbW1hbmQgY29kZSB0eXBlIGVuY291bnRlcmVkXG4iKTsKIAkJYnJlYWs7CiAJfQogCQpAQCAtMTA4MTMsNyArMTA4MDksNyBAQAogCQkgKi8KICNpZmRlZiBBSERfREVCVUcKIAkJaWYgKChhaGRfZGVidWcgJiBBSERfU0hPV19UUUlOKSAhPSAwKQotCQkJcHJpbnRmKCJSZWNlaXZlZCBJbW1lZGlhdGUgQ29tbWFuZCAlZDolZDolZCAtICVwXG4iLAorCQkJcHJpbnRrKCJSZWNlaXZlZCBJbW1lZGlhdGUgQ29tbWFuZCAlZDolZDolZCAtICVwXG4iLAogCQkJICAgICAgIGluaXRpYXRvciwgdGFyZ2V0LCBsdW4sIGFoZC0+cGVuZGluZ19kZXZpY2UpOwogI2VuZGlmCiAJCWFoZC0+cGVuZGluZ19kZXZpY2UgPSBsc3RhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uYwppbmRleCA0YzQxMzMyLi44OGFkODQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmMKQEAgLTY3NCw3ICs2NzQsNyBAQAogCXN0cnVjdCBhaGRfbGludXhfZGV2aWNlICpkZXY7CiAKIAlpZiAoYm9vdHZlcmJvc2UpCi0JCXByaW50ZigiJXM6IFNsYXZlIEFsbG9jICVkXG4iLCBhaGRfbmFtZShhaGQpLCBzZGV2LT5pZCk7CisJCXByaW50aygiJXM6IFNsYXZlIEFsbG9jICVkXG4iLCBhaGRfbmFtZShhaGQpLCBzZGV2LT5pZCk7CiAKIAlkZXYgPSBzY3NpX3RyYW5zcG9ydF9kZXZpY2VfZGF0YShzZGV2KTsKIAltZW1zZXQoZGV2LCAwLCBzaXplb2YoKmRldikpOwpAQCAtNzk4LDEwICs3OTgsMTAgQEAKIAlzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwKIAkJICAgICJBdHRlbXB0aW5nIHRvIHF1ZXVlIGEgVEFSR0VUIFJFU0VUIG1lc3NhZ2U6Iik7CiAKLQlwcmludGYoIkNEQjoiKTsKKwlwcmludGsoIkNEQjoiKTsKIAlmb3IgKGNkYl9ieXRlID0gMDsgY2RiX2J5dGUgPCBjbWQtPmNtZF9sZW47IGNkYl9ieXRlKyspCi0JCXByaW50ZigiIDB4JXgiLCBjbWQtPmNtbmRbY2RiX2J5dGVdKTsKLQlwcmludGYoIlxuIik7CisJCXByaW50aygiIDB4JXgiLCBjbWQtPmNtbmRbY2RiX2J5dGVdKTsKKwlwcmludGsoIlxuIik7CiAKIAkvKgogCSAqIERldGVybWluZSBpZiB3ZSBjdXJyZW50bHkgb3duIHRoaXMgY29tbWFuZC4KQEAgLTg1NywxNiArODU3LDE2IEBACiAJYWhkLT5wbGF0Zm9ybV9kYXRhLT5laF9kb25lID0gJmRvbmU7CiAJYWhkX3VubG9jayhhaGQsICZmbGFncyk7CiAKLQlwcmludGYoIiVzOiBEZXZpY2UgcmVzZXQgY29kZSBzbGVlcGluZ1xuIiwgYWhkX25hbWUoYWhkKSk7CisJcHJpbnRrKCIlczogRGV2aWNlIHJlc2V0IGNvZGUgc2xlZXBpbmdcbiIsIGFoZF9uYW1lKGFoZCkpOwogCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZkb25lLCA1ICogSFopKSB7CiAJCWFoZF9sb2NrKGFoZCwgJmZsYWdzKTsKIAkJYWhkLT5wbGF0Zm9ybV9kYXRhLT5laF9kb25lID0gTlVMTDsKIAkJYWhkX3VubG9jayhhaGQsICZmbGFncyk7Ci0JCXByaW50ZigiJXM6IERldmljZSByZXNldCB0aW1lciBleHBpcmVkIChhY3RpdmUgJWQpXG4iLAorCQlwcmludGsoIiVzOiBEZXZpY2UgcmVzZXQgdGltZXIgZXhwaXJlZCAoYWN0aXZlICVkKVxuIiwKIAkJICAgICAgIGFoZF9uYW1lKGFoZCksIGRldi0+YWN0aXZlKTsKIAkJcmV0dmFsID0gRkFJTEVEOwogCX0KLQlwcmludGYoIiVzOiBEZXZpY2UgcmVzZXQgcmV0dXJuaW5nIDB4JXhcbiIsIGFoZF9uYW1lKGFoZCksIHJldHZhbCk7CisJcHJpbnRrKCIlczogRGV2aWNlIHJlc2V0IHJldHVybmluZyAweCV4XG4iLCBhaGRfbmFtZShhaGQpLCByZXR2YWwpOwogCiAJcmV0dXJuIChyZXR2YWwpOwogfQpAQCAtODg0LDcgKzg4NCw3IEBACiAJYWhkID0gKihzdHJ1Y3QgYWhkX3NvZnRjICoqKWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKICNpZmRlZiBBSERfREVCVUcKIAlpZiAoKGFoZF9kZWJ1ZyAmIEFIRF9TSE9XX1JFQ09WRVJZKSAhPSAwKQotCQlwcmludGYoIiVzOiBCdXMgcmVzZXQgY2FsbGVkIGZvciBjbWQgJXBcbiIsCisJCXByaW50aygiJXM6IEJ1cyByZXNldCBjYWxsZWQgZm9yIGNtZCAlcFxuIiwKIAkJICAgICAgIGFoZF9uYW1lKGFoZCksIGNtZCk7CiAjZW5kaWYKIAlhaGRfbG9jayhhaGQsICZmbGFncyk7CkBAIC04OTQsNyArODk0LDcgQEAKIAlhaGRfdW5sb2NrKGFoZCwgJmZsYWdzKTsKIAogCWlmIChib290dmVyYm9zZSkKLQkJcHJpbnRmKCIlczogU0NTSSBidXMgcmVzZXQgZGVsaXZlcmVkLiAiCisJCXByaW50aygiJXM6IFNDU0kgYnVzIHJlc2V0IGRlbGl2ZXJlZC4gIgogCQkgICAgICAgIiVkIFNDQnMgYWJvcnRlZC5cbiIsIGFoZF9uYW1lKGFoZCksIGZvdW5kKTsKIAogCXJldHVybiAoU1VDQ0VTUyk7CkBAIC05MzUsNyArOTM1LDcgQEAKIHsKIAlidXNfZG1hX3RhZ190IGRtYXQ7CiAKLQlkbWF0ID0gbWFsbG9jKHNpemVvZigqZG1hdCksIE1fREVWQlVGLCBNX05PV0FJVCk7CisJZG1hdCA9IGttYWxsb2Moc2l6ZW9mKCpkbWF0KSwgR0ZQX0FUT01JQyk7CiAJaWYgKGRtYXQgPT0gTlVMTCkKIAkJcmV0dXJuIChFTk9NRU0pOwogCkBAIC05NTYsNyArOTU2LDcgQEAKIHZvaWQKIGFoZF9kbWFfdGFnX2Rlc3Ryb3koc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCBidXNfZG1hX3RhZ190IGRtYXQpCiB7Ci0JZnJlZShkbWF0LCBNX0RFVkJVRik7CisJa2ZyZWUoZG1hdCk7CiB9CiAKIGludApAQCAtMTAxOSw3ICsxMDE5LDcgQEAKIAkJaW9jZWxsX2luZm8gPSAodWludDhfdCopJmFpYzc5eHhfaW9jZWxsX2luZm9baW5zdGFuY2VdOwogCQlpb2NlbGxfaW5mb1tpbmRleF0gPSB2YWx1ZSAmIDB4RkZGRjsKIAkJaWYgKGJvb3R2ZXJib3NlKQotCQkJcHJpbnRmKCJpb2NlbGxbJWQ6JWxkXSA9ICVkXG4iLCBpbnN0YW5jZSwgaW5kZXgsIHZhbHVlKTsKKwkJCXByaW50aygiaW9jZWxsWyVkOiVsZF0gPSAlZFxuIiwgaW5zdGFuY2UsIGluZGV4LCB2YWx1ZSk7CiAJfQogfQogCkBAIC0xMDI5LDcgKzEwMjksNyBAQAogCWludCB0YWdzLCBpLCBqOwogCiAJdGFncyA9IHNpbXBsZV9zdHJ0b3VsKHAgKyAxLCBOVUxMLCAwKSAmIDB4ZmY7Ci0JcHJpbnRmKCJTZXR0aW5nIEdsb2JhbCBUYWdzPSAlZFxuIiwgdGFncyk7CisJcHJpbnRrKCJTZXR0aW5nIEdsb2JhbCBUYWdzPSAlZFxuIiwgdGFncyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhaWM3OXh4X3RhZ19pbmZvKTsgaSsrKSB7CiAJCWZvciAoaiA9IDA7IGogPCBBSERfTlVNX1RBUkdFVFM7IGorKykgewpAQCAtMTA0Nyw3ICsxMDQ3LDcgQEAKIAkgJiYgKHRhcmcgPCBBSERfTlVNX1RBUkdFVFMpKSB7CiAJCWFpYzc5eHhfdGFnX2luZm9baW5zdGFuY2VdLnRhZ19jb21tYW5kc1t0YXJnXSA9IHZhbHVlICYgMHgxRkY7CiAJCWlmIChib290dmVyYm9zZSkKLQkJCXByaW50ZigidGFnX2luZm9bJWQ6JWRdID0gJWRcbiIsIGluc3RhbmNlLCB0YXJnLCB2YWx1ZSk7CisJCQlwcmludGsoInRhZ19pbmZvWyVkOiVkXSA9ICVkXG4iLCBpbnN0YW5jZSwgdGFyZywgdmFsdWUpOwogCX0KIH0KIApAQCAtMTA4OCw3ICsxMDg4LDcgQEAKIAkJCQkJaWYgKHRhcmcgPT0gLTEpCiAJCQkJCQl0YXJnID0gMDsKIAkJCQl9IGVsc2UgewotCQkJCQlwcmludGYoIk1hbGZvcm1lZCBPcHRpb24gJXNcbiIsCisJCQkJCXByaW50aygiTWFsZm9ybWVkIE9wdGlvbiAlc1xuIiwKIAkJCQkJICAgICAgIG9wdF9uYW1lKTsKIAkJCQkJZG9uZSA9IFRSVUU7CiAJCQkJfQpAQCAtMTI0Niw3ICsxMjQ2LDcgQEAKIAlhaGRfc2V0X3VuaXQoYWhkLCBhaGRfbGludXhfdW5pdCsrKTsKIAlhaGRfdW5sb2NrKGFoZCwgJnMpOwogCXNwcmludGYoYnVmLCAic2NzaSVkIiwgaG9zdC0+aG9zdF9ubyk7Ci0JbmV3X25hbWUgPSBtYWxsb2Moc3RybGVuKGJ1ZikgKyAxLCBNX0RFVkJVRiwgTV9OT1dBSVQpOworCW5ld19uYW1lID0ga21hbGxvYyhzdHJsZW4oYnVmKSArIDEsIEdGUF9BVE9NSUMpOwogCWlmIChuZXdfbmFtZSAhPSBOVUxMKSB7CiAJCXN0cmNweShuZXdfbmFtZSwgYnVmKTsKIAkJYWhkX3NldF9uYW1lKGFoZCwgbmV3X25hbWUpOwpAQCAtMTMyMiw3ICsxMzIyLDcgQEAKIGFoZF9wbGF0Zm9ybV9hbGxvYyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHZvaWQgKnBsYXRmb3JtX2FyZykKIHsKIAlhaGQtPnBsYXRmb3JtX2RhdGEgPQotCSAgICBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBhaGRfcGxhdGZvcm1fZGF0YSksIE1fREVWQlVGLCBNX05PV0FJVCk7CisJICAgIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhaGRfcGxhdGZvcm1fZGF0YSksIEdGUF9BVE9NSUMpOwogCWlmIChhaGQtPnBsYXRmb3JtX2RhdGEgPT0gTlVMTCkKIAkJcmV0dXJuIChFTk9NRU0pOwogCW1lbXNldChhaGQtPnBsYXRmb3JtX2RhdGEsIDAsIHNpemVvZihzdHJ1Y3QgYWhkX3BsYXRmb3JtX2RhdGEpKTsKQEAgLTEzNjQsNyArMTM2NCw3IEBACiAJCWlmIChhaGQtPnBsYXRmb3JtX2RhdGEtPmhvc3QpCiAJCQlzY3NpX2hvc3RfcHV0KGFoZC0+cGxhdGZvcm1fZGF0YS0+aG9zdCk7CiAKLQkJZnJlZShhaGQtPnBsYXRmb3JtX2RhdGEsIE1fREVWQlVGKTsKKwkJa2ZyZWUoYWhkLT5wbGF0Zm9ybV9kYXRhKTsKIAl9CiB9CiAKQEAgLTE1MDIsNyArMTUwMiw3IEBACiAJCWlmIChhaGQtPnVuaXQgPj0gQVJSQVlfU0laRShhaWM3OXh4X3RhZ19pbmZvKSkgewogCiAJCQlpZiAod2FybmVkX3VzZXIgPT0gMCkgewotCQkJCXByaW50ZihLRVJOX1dBUk5JTkcKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAiYWljNzl4eDogV0FSTklORzogSW5zdWZmaWNpZW50IHRhZ19pbmZvIGluc3RhbmNlc1xuIgogImFpYzc5eHg6IGZvciBpbnN0YWxsZWQgY29udHJvbGxlcnMuICBVc2luZyBkZWZhdWx0c1xuIgogImFpYzc5eHg6IFBsZWFzZSB1cGRhdGUgdGhlIGFpYzc5eHhfdGFnX2luZm8gYXJyYXkgaW5cbiIKQEAgLTE1NDQsNyArMTU0NCw3IEBACiAJCWFoZF9zZW5kX2FzeW5jKGFoZCwgZGV2aW5mby5jaGFubmVsLCBkZXZpbmZvLnRhcmdldCwKIAkJCSAgICAgICBkZXZpbmZvLmx1biwgQUNfVFJBTlNGRVJfTkVHKTsKIAkJYWhkX3ByaW50X2RldmluZm8oYWhkLCAmZGV2aW5mbyk7Ci0JCXByaW50ZigiVGFnZ2VkIFF1ZXVpbmcgZW5hYmxlZC4gIERlcHRoICVkXG4iLCB0YWdzKTsKKwkJcHJpbnRrKCJUYWdnZWQgUXVldWluZyBlbmFibGVkLiAgRGVwdGggJWRcbiIsIHRhZ3MpOwogCX0gZWxzZSB7CiAJCWFoZF9wbGF0Zm9ybV9zZXRfdGFncyhhaGQsIHNkZXYsICZkZXZpbmZvLCBBSERfUVVFVUVfTk9ORSk7CiAJCWFoZF9zZW5kX2FzeW5jKGFoZCwgZGV2aW5mby5jaGFubmVsLCBkZXZpbmZvLnRhcmdldCwKQEAgLTE3OTQsNyArMTc5NCw3IEBACiAJc3RydWN0CSAgYWhkX2xpbnV4X2RldmljZSAqZGV2OwogCiAJaWYgKChzY2ItPmZsYWdzICYgU0NCX0FDVElWRSkgPT0gMCkgewotCQlwcmludGYoIlNDQiAlZCBkb25lJ2QgdHdpY2VcbiIsIFNDQl9HRVRfVEFHKHNjYikpOworCQlwcmludGsoIlNDQiAlZCBkb25lJ2QgdHdpY2VcbiIsIFNDQl9HRVRfVEFHKHNjYikpOwogCQlhaGRfZHVtcF9jYXJkX3N0YXRlKGFoZCk7CiAJCXBhbmljKCJTdG9wcGluZyBmb3Igc2FmZXR5Iik7CiAJfQpAQCAtMTgyNSw3ICsxODI1LDcgQEAKICNpZmRlZiBBSERfREVCVUcKIAkJCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfTUlTQykgIT0gMCkgewogCQkJCWFoZF9wcmludF9wYXRoKGFoZCwgc2NiKTsKLQkJCQlwcmludGYoIlNldCBDQU1fVU5DT1JfUEFSSVRZXG4iKTsKKwkJCQlwcmludGsoIlNldCBDQU1fVU5DT1JfUEFSSVRZXG4iKTsKIAkJCX0KICNlbmRpZgogCQkJYWhkX3NldF90cmFuc2FjdGlvbl9zdGF0dXMoc2NiLCBDQU1fVU5DT1JfUEFSSVRZKTsKQEAgLTE4NDMsMTIgKzE4NDMsMTIgQEAKIAkJCXVfaW50IGk7CiAKIAkJCWFoZF9wcmludF9wYXRoKGFoZCwgc2NiKTsKLQkJCXByaW50ZigiQ0RCOiIpOworCQkJcHJpbnRrKCJDREI6Iik7CiAJCQlmb3IgKGkgPSAwOyBpIDwgc2NiLT5pb19jdHgtPmNtZF9sZW47IGkrKykKLQkJCQlwcmludGYoIiAweCV4Iiwgc2NiLT5pb19jdHgtPmNtbmRbaV0pOwotCQkJcHJpbnRmKCJcbiIpOworCQkJCXByaW50aygiIDB4JXgiLCBzY2ItPmlvX2N0eC0+Y21uZFtpXSk7CisJCQlwcmludGsoIlxuIik7CiAJCQlhaGRfcHJpbnRfcGF0aChhaGQsIHNjYik7Ci0JCQlwcmludGYoIlNhdyB1bmRlcmZsb3cgKCVsZCBvZiAlbGQgYnl0ZXMpLiAiCisJCQlwcmludGsoIlNhdyB1bmRlcmZsb3cgKCVsZCBvZiAlbGQgYnl0ZXMpLiAiCiAJCQkgICAgICAgIlRyZWF0ZWQgYXMgZXJyb3JcbiIsCiAJCQkJYWhkX2dldF9yZXNpZHVhbChzY2IpLAogCQkJCWFoZF9nZXRfdHJhbnNmZXJfbGVuZ3RoKHNjYikpOwpAQCAtMTg4MSw3ICsxODgxLDcgQEAKIAkJZGV2LT5jb21tYW5kc19zaW5jZV9pZGxlX29yX290YWcgPSAwOwogCiAJaWYgKChzY2ItPmZsYWdzICYgU0NCX1JFQ09WRVJZX1NDQikgIT0gMCkgewotCQlwcmludGYoIlJlY292ZXJ5IFNDQiBjb21wbGV0ZXNcbiIpOworCQlwcmludGsoIlJlY292ZXJ5IFNDQiBjb21wbGV0ZXNcbiIpOwogCQlpZiAoYWhkX2dldF90cmFuc2FjdGlvbl9zdGF0dXMoc2NiKSA9PSBDQU1fQkRSX1NFTlQKIAkJIHx8IGFoZF9nZXRfdHJhbnNhY3Rpb25fc3RhdHVzKHNjYikgPT0gQ0FNX1JFUV9BQk9SVEVEKQogCQkJYWhkX3NldF90cmFuc2FjdGlvbl9zdGF0dXMoc2NiLCBDQU1fQ01EX1RJTUVPVVQpOwpAQCAtMTk2MywxNCArMTk2MywxNCBAQAogCQkJaWYgKGFoZF9kZWJ1ZyAmIEFIRF9TSE9XX1NFTlNFKSB7CiAJCQkJaW50IGk7CiAKLQkJCQlwcmludGYoIkNvcGllZCAlZCBieXRlcyBvZiBzZW5zZSBkYXRhIGF0ICVkOiIsCisJCQkJcHJpbnRrKCJDb3BpZWQgJWQgYnl0ZXMgb2Ygc2Vuc2UgZGF0YSBhdCAlZDoiLAogCQkJCSAgICAgICBzZW5zZV9zaXplLCBzZW5zZV9vZmZzZXQpOwogCQkJCWZvciAoaSA9IDA7IGkgPCBzZW5zZV9zaXplOyBpKyspIHsKIAkJCQkJaWYgKChpICYgMHhGKSA9PSAwKQotCQkJCQkJcHJpbnRmKCJcbiIpOwotCQkJCQlwcmludGYoIjB4JXggIiwgY21kLT5zZW5zZV9idWZmZXJbaV0pOworCQkJCQkJcHJpbnRrKCJcbiIpOworCQkJCQlwcmludGsoIjB4JXggIiwgY21kLT5zZW5zZV9idWZmZXJbaV0pOwogCQkJCX0KLQkJCQlwcmludGYoIlxuIik7CisJCQkJcHJpbnRrKCJcbiIpOwogCQkJfQogI2VuZGlmCiAJCX0KQEAgLTE5OTUsNyArMTk5NSw3IEBACiAjaWZkZWYgQUhEX0RFQlVHCiAJCQlpZiAoKGFoZF9kZWJ1ZyAmIEFIRF9TSE9XX1FGVUxMKSAhPSAwKSB7CiAJCQkJYWhkX3ByaW50X3BhdGgoYWhkLCBzY2IpOwotCQkJCXByaW50ZigiRHJvcHBpbmcgdGFnIGNvdW50IHRvICVkXG4iLAorCQkJCXByaW50aygiRHJvcHBpbmcgdGFnIGNvdW50IHRvICVkXG4iLAogCQkJCSAgICAgICBkZXYtPmFjdGl2ZSk7CiAJCQl9CiAjZW5kaWYKQEAgLTIwMTQsNyArMjAxNCw3IEBACiAJCQkJID09IEFIRF9MT0NLX1RBR1NfQ09VTlQpIHsKIAkJCQkJZGV2LT5tYXh0YWdzID0gZGV2LT5hY3RpdmU7CiAJCQkJCWFoZF9wcmludF9wYXRoKGFoZCwgc2NiKTsKLQkJCQkJcHJpbnRmKCJMb2NraW5nIG1heCB0YWcgY291bnQgYXQgJWRcbiIsCisJCQkJCXByaW50aygiTG9ja2luZyBtYXggdGFnIGNvdW50IGF0ICVkXG4iLAogCQkJCQkgICAgICAgZGV2LT5hY3RpdmUpOwogCQkJCX0KIAkJCX0gZWxzZSB7CkBAIC0yMTM4LDcgKzIxMzgsNyBAQAogCX0KIAogCWlmIChkb19mYWxsYmFjaykgewotCQlwcmludGYoIiVzOiBkZXZpY2Ugb3ZlcnJ1biAoc3RhdHVzICV4KSBvbiAlZDolZDolZFxuIiwKKwkJcHJpbnRrKCIlczogZGV2aWNlIG92ZXJydW4gKHN0YXR1cyAleCkgb24gJWQ6JWQ6JWRcbiIsCiAJCSAgICAgICBhaGRfbmFtZShhaGQpLCBzdGF0dXMsIGNtZC0+ZGV2aWNlLT5jaGFubmVsLAogCQkgICAgICAgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuKTsKIAl9CkBAIC0yMTg3LDEwICsyMTg3LDEwIEBACiAJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBjbWQsCiAJCSAgICAiQXR0ZW1wdGluZyB0byBxdWV1ZSBhbiBBQk9SVCBtZXNzYWdlOiIpOwogCi0JcHJpbnRmKCJDREI6Iik7CisJcHJpbnRrKCJDREI6Iik7CiAJZm9yIChjZGJfYnl0ZSA9IDA7IGNkYl9ieXRlIDwgY21kLT5jbWRfbGVuOyBjZGJfYnl0ZSsrKQotCQlwcmludGYoIiAweCV4IiwgY21kLT5jbW5kW2NkYl9ieXRlXSk7Ci0JcHJpbnRmKCJcbiIpOworCQlwcmludGsoIiAweCV4IiwgY21kLT5jbW5kW2NkYl9ieXRlXSk7CisJcHJpbnRrKCJcbiIpOwogCiAJYWhkX2xvY2soYWhkLCAmZmxhZ3MpOwogCkBAIC0yMjQ5LDcgKzIyNDksNyBAQAogCQlnb3RvIG5vX2NtZDsKIAl9CiAKLQlwcmludGYoIiVzOiBBdCB0aW1lIG9mIHJlY292ZXJ5LCBjYXJkIHdhcyAlc3BhdXNlZFxuIiwKKwlwcmludGsoIiVzOiBBdCB0aW1lIG9mIHJlY292ZXJ5LCBjYXJkIHdhcyAlc3BhdXNlZFxuIiwKIAkgICAgICAgYWhkX25hbWUoYWhkKSwgd2FzX3BhdXNlZCA/ICIiIDogIm5vdCAiKTsKIAlhaGRfZHVtcF9jYXJkX3N0YXRlKGFoZCk7CiAKQEAgLTIyNjAsNyArMjI2MCw3IEBACiAJCQkgICAgICAgcGVuZGluZ19zY2ItPmhzY2ItPnRhZywKIAkJCSAgICAgICBST0xFX0lOSVRJQVRPUiwgQ0FNX1JFUV9BQk9SVEVELAogCQkJICAgICAgIFNFQVJDSF9DT01QTEVURSkgPiAwKSB7Ci0JCXByaW50ZigiJXM6JWQ6JWQ6JWQ6IENtZCBhYm9ydGVkIGZyb20gUUlORklGT1xuIiwKKwkJcHJpbnRrKCIlczolZDolZDolZDogQ21kIGFib3J0ZWQgZnJvbSBRSU5GSUZPXG4iLAogCQkgICAgICAgYWhkX25hbWUoYWhkKSwgY21kLT5kZXZpY2UtPmNoYW5uZWwsIAogCQkgICAgICAgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuKTsKIAkJcmV0dmFsID0gU1VDQ0VTUzsKQEAgLTIzNTUsNyArMjM1NSw3IEBACiAJCWFoZF9xaW5maWZvX3JlcXVldWVfdGFpbChhaGQsIHBlbmRpbmdfc2NiKTsKIAkJYWhkX3NldF9zY2JwdHIoYWhkLCBzYXZlZF9zY2JwdHIpOwogCQlhaGRfcHJpbnRfcGF0aChhaGQsIHBlbmRpbmdfc2NiKTsKLQkJcHJpbnRmKCJEZXZpY2UgaXMgZGlzY29ubmVjdGVkLCByZS1xdWV1aW5nIFNDQlxuIik7CisJCXByaW50aygiRGV2aWNlIGlzIGRpc2Nvbm5lY3RlZCwgcmUtcXVldWluZyBTQ0JcbiIpOwogCQl3YWl0ID0gVFJVRTsKIAl9IGVsc2UgewogCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwgIlVuYWJsZSB0byBkZWxpdmVyIG1lc3NhZ2VcbiIpOwpAQCAtMjM4MCwyMSArMjM4MCwyMSBAQAogCQlhaGQtPnBsYXRmb3JtX2RhdGEtPmVoX2RvbmUgPSAmZG9uZTsKIAkJYWhkX3VubG9jayhhaGQsICZmbGFncyk7CiAKLQkJcHJpbnRmKCIlczogUmVjb3ZlcnkgY29kZSBzbGVlcGluZ1xuIiwgYWhkX25hbWUoYWhkKSk7CisJCXByaW50aygiJXM6IFJlY292ZXJ5IGNvZGUgc2xlZXBpbmdcbiIsIGFoZF9uYW1lKGFoZCkpOwogCQlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmZG9uZSwgNSAqIEhaKSkgewogCQkJYWhkX2xvY2soYWhkLCAmZmxhZ3MpOwogCQkJYWhkLT5wbGF0Zm9ybV9kYXRhLT5laF9kb25lID0gTlVMTDsKIAkJCWFoZF91bmxvY2soYWhkLCAmZmxhZ3MpOwotCQkJcHJpbnRmKCIlczogVGltZXIgRXhwaXJlZCAoYWN0aXZlICVkKVxuIiwKKwkJCXByaW50aygiJXM6IFRpbWVyIEV4cGlyZWQgKGFjdGl2ZSAlZClcbiIsCiAJCQkgICAgICAgYWhkX25hbWUoYWhkKSwgZGV2LT5hY3RpdmUpOwogCQkJcmV0dmFsID0gRkFJTEVEOwogCQl9Ci0JCXByaW50ZigiUmVjb3ZlcnkgY29kZSBhd2FrZVxuIik7CisJCXByaW50aygiUmVjb3ZlcnkgY29kZSBhd2FrZVxuIik7CiAJfSBlbHNlCiAJCWFoZF91bmxvY2soYWhkLCAmZmxhZ3MpOwogCiAJaWYgKHJldHZhbCAhPSBTVUNDRVNTKQotCQlwcmludGYoIiVzOiBDb21tYW5kIGFib3J0IHJldHVybmluZyAweCV4XG4iLAorCQlwcmludGsoIiVzOiBDb21tYW5kIGFib3J0IHJldHVybmluZyAweCV4XG4iLAogCQkgICAgICAgYWhkX25hbWUoYWhkKSwgcmV0dmFsKTsKIAogCXJldHVybiByZXR2YWw7CkBAIC0yNDMxLDcgKzI0MzEsNyBAQAogCiAjaWZkZWYgQUhEX0RFQlVHCiAJaWYgKChhaGRfZGVidWcgJiBBSERfU0hPV19EVikgIT0gMCkKLQkJcHJpbnRmKCIlczogc2V0IHBlcmlvZCB0byAlZFxuIiwgYWhkX25hbWUoYWhkKSwgcGVyaW9kKTsKKwkJcHJpbnRrKCIlczogc2V0IHBlcmlvZCB0byAlZFxuIiwgYWhkX25hbWUoYWhkKSwgcGVyaW9kKTsKICNlbmRpZgogCWlmIChvZmZzZXQgPT0gMCkKIAkJb2Zmc2V0ID0gTUFYX09GRlNFVDsKQEAgLTI0ODQsNyArMjQ4NCw3IEBACiAKICNpZmRlZiBBSERfREVCVUcKIAlpZiAoKGFoZF9kZWJ1ZyAmIEFIRF9TSE9XX0RWKSAhPSAwKQotCQlwcmludGYoIiVzOiBzZXQgb2Zmc2V0IHRvICVkXG4iLCBhaGRfbmFtZShhaGQpLCBvZmZzZXQpOworCQlwcmludGsoIiVzOiBzZXQgb2Zmc2V0IHRvICVkXG4iLCBhaGRfbmFtZShhaGQpLCBvZmZzZXQpOwogI2VuZGlmCiAKIAlhaGRfY29tcGlsZV9kZXZpbmZvKCZkZXZpbmZvLCBzaG9zdC0+dGhpc19pZCwgc3RhcmdldC0+aWQsIDAsCkBAIC0yNTIwLDcgKzI1MjAsNyBAQAogCiAjaWZkZWYgQUhEX0RFQlVHCiAJaWYgKChhaGRfZGVidWcgJiBBSERfU0hPV19EVikgIT0gMCkKLQkJcHJpbnRmKCIlczogJXMgRFRcbiIsIGFoZF9uYW1lKGFoZCksIAorCQlwcmludGsoIiVzOiAlcyBEVFxuIiwgYWhkX25hbWUoYWhkKSwKIAkJICAgICAgIGR0ID8gImVuYWJsaW5nIiA6ICJkaXNhYmxpbmciKTsKICNlbmRpZgogCWlmIChkdCAmJiBzcGlfbWF4X3dpZHRoKHN0YXJnZXQpKSB7CkBAIC0yNTYyLDcgKzI1NjIsNyBAQAogCiAjaWZkZWYgQUhEX0RFQlVHCiAJaWYgKChhaGRfZGVidWcgJiBBSERfU0hPV19EVikgIT0gMCkKLQkJcHJpbnRmKCIlczogJXMgUUFTXG4iLCBhaGRfbmFtZShhaGQpLCAKKwkJcHJpbnRrKCIlczogJXMgUUFTXG4iLCBhaGRfbmFtZShhaGQpLAogCQkgICAgICAgcWFzID8gImVuYWJsaW5nIiA6ICJkaXNhYmxpbmciKTsKICNlbmRpZgogCkBAIC0yNjAxLDcgKzI2MDEsNyBAQAogCiAjaWZkZWYgQUhEX0RFQlVHCiAJaWYgKChhaGRfZGVidWcgJiBBSERfU0hPV19EVikgIT0gMCkKLQkJcHJpbnRmKCIlczogJXMgSVVcbiIsIGFoZF9uYW1lKGFoZCksCisJCXByaW50aygiJXM6ICVzIElVXG4iLCBhaGRfbmFtZShhaGQpLAogCQkgICAgICAgaXUgPyAiZW5hYmxpbmciIDogImRpc2FibGluZyIpOwogI2VuZGlmCiAKQEAgLTI2NDEsNyArMjY0MSw3IEBACiAKICNpZmRlZiBBSERfREVCVUcKIAlpZiAoKGFoZF9kZWJ1ZyAmIEFIRF9TSE9XX0RWKSAhPSAwKQotCQlwcmludGYoIiVzOiAlcyBSZWFkIFN0cmVhbWluZ1xuIiwgYWhkX25hbWUoYWhkKSwgCisJCXByaW50aygiJXM6ICVzIFJlYWQgU3RyZWFtaW5nXG4iLCBhaGRfbmFtZShhaGQpLAogCQkgICAgICAgcmRzdHJtICA/ICJlbmFibGluZyIgOiAiZGlzYWJsaW5nIik7CiAjZW5kaWYKIApAQCAtMjY3Nyw3ICsyNjc3LDcgQEAKIAogI2lmZGVmIEFIRF9ERUJVRwogCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfRFYpICE9IDApCi0JCXByaW50ZigiJXM6ICVzIFdyaXRlIEZsb3cgQ29udHJvbFxuIiwgYWhkX25hbWUoYWhkKSwKKwkJcHJpbnRrKCIlczogJXMgV3JpdGUgRmxvdyBDb250cm9sXG4iLCBhaGRfbmFtZShhaGQpLAogCQkgICAgICAgd3JmbG93ID8gImVuYWJsaW5nIiA6ICJkaXNhYmxpbmciKTsKICNlbmRpZgogCkBAIC0yNzE0LDE0ICsyNzE0LDE0IEBACiAJaWYgKChhaGQtPmZlYXR1cmVzICYgQUhEX1JUSSkgPT0gMCkgewogI2lmZGVmIEFIRF9ERUJVRwogCQlpZiAoKGFoZF9kZWJ1ZyAmIEFIRF9TSE9XX0RWKSAhPSAwKQotCQkJcHJpbnRmKCIlczogUlRJIG5vdCBhdmFpbGFibGVcbiIsIGFoZF9uYW1lKGFoZCkpOworCQkJcHJpbnRrKCIlczogUlRJIG5vdCBhdmFpbGFibGVcbiIsIGFoZF9uYW1lKGFoZCkpOwogI2VuZGlmCiAJCXJldHVybjsKIAl9CiAKICNpZmRlZiBBSERfREVCVUcKIAlpZiAoKGFoZF9kZWJ1ZyAmIEFIRF9TSE9XX0RWKSAhPSAwKQotCQlwcmludGYoIiVzOiAlcyBSVElcbiIsIGFoZF9uYW1lKGFoZCksCisJCXByaW50aygiJXM6ICVzIFJUSVxuIiwgYWhkX25hbWUoYWhkKSwKIAkJICAgICAgIHJ0aSA/ICJlbmFibGluZyIgOiAiZGlzYWJsaW5nIik7CiAjZW5kaWYKIApAQCAtMjc1Nyw3ICsyNzU3LDcgQEAKIAogI2lmZGVmIEFIRF9ERUJVRwogCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfRFYpICE9IDApCi0JCXByaW50ZigiJXM6ICVzIFByZWNvbXBlbnNhdGlvblxuIiwgYWhkX25hbWUoYWhkKSwgCisJCXByaW50aygiJXM6ICVzIFByZWNvbXBlbnNhdGlvblxuIiwgYWhkX25hbWUoYWhkKSwKIAkJICAgICAgIHBjb21wID8gIkVuYWJsZSIgOiAiRGlzYWJsZSIpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmggYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5oCmluZGV4IDU1YzFmZTAuLjI4ZTQzNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmgKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uaApAQCAtMzYzLDEzICszNjMsNiBAQAogCXJlc291cmNlX3NpemVfdAkJIG1lbV9idXNhZGRyOwkvKiBNZW0gQmFzZSBBZGRyICovCiB9OwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKiogT1MgVXRpbGl0eSBXcmFwcGVycyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBwcmludGYgcHJpbnRrCi0jZGVmaW5lIE1fTk9XQUlUIEdGUF9BVE9NSUMKLSNkZWZpbmUgTV9XQUlUT0sgMAotI2RlZmluZSBtYWxsb2Moc2l6ZSwgdHlwZSwgZmxhZ3MpIGttYWxsb2Moc2l6ZSwgZmxhZ3MpCi0jZGVmaW5lIGZyZWUocHRyLCB0eXBlKSBrZnJlZShwdHIpCi0KIHZvaWQgYWhkX2RlbGF5KGxvbmcpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogTG93IExldmVsIEkvTyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc21fcGNpLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbV9wY2kuYwppbmRleCA4ZjY4NjEyLi4zYzg1ODczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbV9wY2kuYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbV9wY2kuYwpAQCAtMTc4LDcgKzE3OCw3IEBACiAJCWFoZF9nZXRfcGNpX2J1cyhwY2kpLAogCQlhaGRfZ2V0X3BjaV9zbG90KHBjaSksCiAJCWFoZF9nZXRfcGNpX2Z1bmN0aW9uKHBjaSkpOwotCW5hbWUgPSBtYWxsb2Moc3RybGVuKGJ1ZikgKyAxLCBNX0RFVkJVRiwgTV9OT1dBSVQpOworCW5hbWUgPSBrbWFsbG9jKHN0cmxlbihidWYpICsgMSwgR0ZQX0FUT01JQyk7CiAJaWYgKG5hbWUgPT0gTlVMTCkKIAkJcmV0dXJuICgtRU5PTUVNKTsKIAlzdHJjcHkobmFtZSwgYnVmKTsKQEAgLTMzMyw3ICszMzMsNyBAQAogCiAJCWlmIChhaGRfcGNpX3Rlc3RfcmVnaXN0ZXJfYWNjZXNzKGFoZCkgIT0gMCkgewogCi0JCQlwcmludGYoImFpYzc5eHg6IFBDSSBEZXZpY2UgJWQ6JWQ6JWQgIgorCQkJcHJpbnRrKCJhaWM3OXh4OiBQQ0kgRGV2aWNlICVkOiVkOiVkICIKIAkJCSAgICAgICAiZmFpbGVkIG1lbW9yeSBtYXBwZWQgdGVzdC4gIFVzaW5nIFBJTy5cbiIsCiAJCQkgICAgICAgYWhkX2dldF9wY2lfYnVzKGFoZC0+ZGV2X3NvZnRjKSwKIAkJCSAgICAgICBhaGRfZ2V0X3BjaV9zbG90KGFoZC0+ZGV2X3NvZnRjKSwKQEAgLTM0Niw3ICszNDYsNyBAQAogCQl9IGVsc2UKIAkJCWNvbW1hbmQgfD0gUENJTV9DTURfTUVNRU47CiAJfSBlbHNlIGlmIChib290dmVyYm9zZSkgewotCQlwcmludGYoImFpYzc5eHg6IFBDSSVkOiVkOiVkIE1FTSByZWdpb24gMHglbGx4ICIKKwkJcHJpbnRrKCJhaWM3OXh4OiBQQ0klZDolZDolZCBNRU0gcmVnaW9uIDB4JWxseCAiCiAJCSAgICAgICAidW5hdmFpbGFibGUuIENhbm5vdCBtZW1vcnkgbWFwIGRldmljZS5cbiIsCiAJCSAgICAgICBhaGRfZ2V0X3BjaV9idXMoYWhkLT5kZXZfc29mdGMpLAogCQkgICAgICAgYWhkX2dldF9wY2lfc2xvdChhaGQtPmRldl9zb2Z0YyksCkBAIC0zNjUsNyArMzY1LDcgQEAKIAkJCWFoZC0+YnNoc1sxXS5pb3BvcnQgPSAodV9sb25nKWJhc2UyOwogCQkJY29tbWFuZCB8PSBQQ0lNX0NNRF9QT1JURU47CiAJCX0gZWxzZSB7Ci0JCQlwcmludGYoImFpYzc5eHg6IFBDSSVkOiVkOiVkIElPIHJlZ2lvbnMgMHglbGx4IGFuZCAiCisJCQlwcmludGsoImFpYzc5eHg6IFBDSSVkOiVkOiVkIElPIHJlZ2lvbnMgMHglbGx4IGFuZCAiCiAJCQkgICAgICAgIjB4JWxseCB1bmF2YWlsYWJsZS4gQ2Fubm90IG1hcCBkZXZpY2UuXG4iLAogCQkJICAgICAgIGFoZF9nZXRfcGNpX2J1cyhhaGQtPmRldl9zb2Z0YyksCiAJCQkgICAgICAgYWhkX2dldF9wY2lfc2xvdChhaGQtPmRldl9zb2Z0YyksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X3BjaS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9wY2kuYwppbmRleCA5MGEwNGEzLi4xNGI1ZjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X3BjaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfcGNpLmMKQEAgLTMzOCw3ICszMzgsNyBAQAogCSAqLwogCWlmICgoYWhkLT5mbGFncyAmIChBSERfMzlCSVRfQUREUkVTU0lOR3xBSERfNjRCSVRfQUREUkVTU0lORykpICE9IDApIHsKIAkJaWYgKGJvb3R2ZXJib3NlKQotCQkJcHJpbnRmKCIlczogRW5hYmxpbmcgMzlCaXQgQWRkcmVzc2luZ1xuIiwKKwkJCXByaW50aygiJXM6IEVuYWJsaW5nIDM5Qml0IEFkZHJlc3NpbmdcbiIsCiAJCQkgICAgICAgYWhkX25hbWUoYWhkKSk7CiAJCWRldmNvbmZpZyA9IGFoZF9wY2lfcmVhZF9jb25maWcoYWhkLT5kZXZfc29mdGMsCiAJCQkJCQlERVZDT05GSUcsIC8qYnl0ZXMqLzQpOwpAQCAtNTI4LDcgKzUyOCw3IEBACiAJCSAqIEZldGNoIFZQRCBmb3IgdGhpcyBmdW5jdGlvbiBhbmQgcGFyc2UgaXQuCiAJCSAqLwogCQlpZiAoYm9vdHZlcmJvc2UpIAotCQkJcHJpbnRmKCIlczogUmVhZGluZyBWUEQgZnJvbSBTRUVQUk9NLi4uIiwKKwkJCXByaW50aygiJXM6IFJlYWRpbmcgVlBEIGZyb20gU0VFUFJPTS4uLiIsCiAJCQkgICAgICAgYWhkX25hbWUoYWhkKSk7CiAKIAkJLyogQWRkcmVzcyBpcyBhbHdheXMgaW4gdW5pdHMgb2YgMTZiaXQgd29yZHMgKi8KQEAgLTU0MSwxMiArNTQxLDEyIEBACiAJCWlmIChlcnJvciA9PSAwKQogCQkJZXJyb3IgPSBhaGRfcGFyc2VfdnBkZGF0YShhaGQsICZ2cGQpOwogCQlpZiAoYm9vdHZlcmJvc2UpIAotCQkJcHJpbnRmKCIlczogVlBEIHBhcnNpbmcgJXNcbiIsCisJCQlwcmludGsoIiVzOiBWUEQgcGFyc2luZyAlc1xuIiwKIAkJCSAgICAgICBhaGRfbmFtZShhaGQpLAogCQkJICAgICAgIGVycm9yID09IDAgPyAic3VjY2Vzc2Z1bCIgOiAiZmFpbGVkIik7CiAKIAkJaWYgKGJvb3R2ZXJib3NlKSAKLQkJCXByaW50ZigiJXM6IFJlYWRpbmcgU0VFUFJPTS4uLiIsIGFoZF9uYW1lKGFoZCkpOworCQkJcHJpbnRrKCIlczogUmVhZGluZyBTRUVQUk9NLi4uIiwgYWhkX25hbWUoYWhkKSk7CiAKIAkJLyogQWRkcmVzcyBpcyBhbHdheXMgaW4gdW5pdHMgb2YgMTZiaXQgd29yZHMgKi8KIAkJc3RhcnRfYWRkciA9IChzaXplb2YoKnNjKSAvIDIpICogKGFoZC0+Y2hhbm5lbCAtICdBJyk7CkBAIC01NTYsMTYgKzU1NiwxNiBAQAogCQkJCQkgLypieXRlc3RyZWFtKi9GQUxTRSk7CiAKIAkJaWYgKGVycm9yICE9IDApIHsKLQkJCXByaW50ZigiVW5hYmxlIHRvIHJlYWQgU0VFUFJPTVxuIik7CisJCQlwcmludGsoIlVuYWJsZSB0byByZWFkIFNFRVBST01cbiIpOwogCQkJaGF2ZV9zZWVwcm9tID0gMDsKIAkJfSBlbHNlIHsKIAkJCWhhdmVfc2VlcHJvbSA9IGFoZF92ZXJpZnlfY2tzdW0oc2MpOwogCiAJCQlpZiAoYm9vdHZlcmJvc2UpIHsKIAkJCQlpZiAoaGF2ZV9zZWVwcm9tID09IDApCi0JCQkJCXByaW50ZiAoImNoZWNrc3VtIGVycm9yXG4iKTsKKwkJCQkJcHJpbnRrICgiY2hlY2tzdW0gZXJyb3JcbiIpOwogCQkJCWVsc2UKLQkJCQkJcHJpbnRmICgiZG9uZS5cbiIpOworCQkJCQlwcmludGsgKCJkb25lLlxuIik7CiAJCQl9CiAJCX0KIAkJYWhkX3JlbGVhc2Vfc2VlcHJvbShhaGQpOwpAQCAtNjE1LDIxICs2MTUsMjEgQEAKIAkJdWludDE2X3QgKnNjX2RhdGE7CiAJCWludAkgIGk7CiAKLQkJcHJpbnRmKCIlczogU2VlcHJvbSBDb250ZW50czoiLCBhaGRfbmFtZShhaGQpKTsKKwkJcHJpbnRrKCIlczogU2VlcHJvbSBDb250ZW50czoiLCBhaGRfbmFtZShhaGQpKTsKIAkJc2NfZGF0YSA9ICh1aW50MTZfdCAqKXNjOwogCQlmb3IgKGkgPSAwOyBpIDwgKHNpemVvZigqc2MpKTsgaSArPSAyKQotCQkJcHJpbnRmKCJcblx0MHglLjR4Iiwgc2NfZGF0YVtpXSk7Ci0JCXByaW50ZigiXG4iKTsKKwkJCXByaW50aygiXG5cdDB4JS40eCIsIHNjX2RhdGFbaV0pOworCQlwcmludGsoIlxuIik7CiAJfQogI2VuZGlmCiAKIAlpZiAoIWhhdmVfc2VlcHJvbSkgewogCQlpZiAoYm9vdHZlcmJvc2UpCi0JCQlwcmludGYoIiVzOiBObyBTRUVQUk9NIGF2YWlsYWJsZS5cbiIsIGFoZF9uYW1lKGFoZCkpOworCQkJcHJpbnRrKCIlczogTm8gU0VFUFJPTSBhdmFpbGFibGUuXG4iLCBhaGRfbmFtZShhaGQpKTsKIAkJYWhkLT5mbGFncyB8PSBBSERfVVNFREVGQVVMVFM7CiAJCWVycm9yID0gYWhkX2RlZmF1bHRfY29uZmlnKGFoZCk7CiAJCWFkYXB0ZXJfY29udHJvbCA9IENGQVVUT1RFUk18Q0ZTRUFVVE9URVJNOwotCQlmcmVlKGFoZC0+c2VlcF9jb25maWcsIE1fREVWQlVGKTsKKwkJa2ZyZWUoYWhkLT5zZWVwX2NvbmZpZyk7CiAJCWFoZC0+c2VlcF9jb25maWcgPSBOVUxMOwogCX0gZWxzZSB7CiAJCWVycm9yID0gYWhkX3BhcnNlX2NmZ2RhdGEoYWhkLCBzYyk7CkBAIC02NTYsNyArNjU2LDcgQEAKIAlpZiAoKGFoZC0+ZmxhZ3MgJiBBSERfU1RQV0xFVkVMX0EpICE9IDApCiAJCWRldmNvbmZpZyB8PSBTVFBXTEVWRUw7CiAJaWYgKGJvb3R2ZXJib3NlKQotCQlwcmludGYoIiVzOiBTVFBXTEVWRUwgaXMgJXNcbiIsCisJCXByaW50aygiJXM6IFNUUFdMRVZFTCBpcyAlc1xuIiwKIAkJICAgICAgIGFoZF9uYW1lKGFoZCksIChkZXZjb25maWcgJiBTVFBXTEVWRUwpID8gIm9uIiA6ICJvZmYiKTsKIAlhaGRfcGNpX3dyaXRlX2NvbmZpZyhhaGQtPmRldl9zb2Z0YywgREVWQ09ORklHLCBkZXZjb25maWcsIC8qYnl0ZXMqLzQpOwogIApAQCAtNjcxLDcgKzY3MSw3IEBACiAJZXJyb3IgPSBhaGRfcmVhZF9mbGV4cG9ydChhaGQsIEZMWEFERFJfVEVSTUNUTCwgJnRlcm1jdGwpOwogCWlmICgoYWRhcHRlcl9jb250cm9sICYgQ0ZBVVRPVEVSTSkgPT0gMCkgewogCQlpZiAoYm9vdHZlcmJvc2UpCi0JCQlwcmludGYoIiVzOiBNYW51YWwgUHJpbWFyeSBUZXJtaW5hdGlvblxuIiwKKwkJCXByaW50aygiJXM6IE1hbnVhbCBQcmltYXJ5IFRlcm1pbmF0aW9uXG4iLAogCQkJICAgICAgIGFoZF9uYW1lKGFoZCkpOwogCQl0ZXJtY3RsICY9IH4oRkxYX1RFUk1DVExfRU5QUklMT1d8RkxYX1RFUk1DVExfRU5QUklISUdIKTsKIAkJaWYgKChhZGFwdGVyX2NvbnRyb2wgJiBDRlNURVJNKSAhPSAwKQpAQCAtNjc5LDE0ICs2NzksMTQgQEAKIAkJaWYgKChhZGFwdGVyX2NvbnRyb2wgJiBDRldTVEVSTSkgIT0gMCkKIAkJCXRlcm1jdGwgfD0gRkxYX1RFUk1DVExfRU5QUklISUdIOwogCX0gZWxzZSBpZiAoZXJyb3IgIT0gMCkgewotCQlwcmludGYoIiVzOiBQcmltYXJ5IEF1dG8tVGVybSBTZW5zaW5nIGZhaWxlZCEgIgorCQlwcmludGsoIiVzOiBQcmltYXJ5IEF1dG8tVGVybSBTZW5zaW5nIGZhaWxlZCEgIgogCQkgICAgICAgIlVzaW5nIERlZmF1bHRzLlxuIiwgYWhkX25hbWUoYWhkKSk7CiAJCXRlcm1jdGwgPSBGTFhfVEVSTUNUTF9FTlBSSUxPV3xGTFhfVEVSTUNUTF9FTlBSSUhJR0g7CiAJfQogCiAJaWYgKChhZGFwdGVyX2NvbnRyb2wgJiBDRlNFQVVUT1RFUk0pID09IDApIHsKIAkJaWYgKGJvb3R2ZXJib3NlKQotCQkJcHJpbnRmKCIlczogTWFudWFsIFNlY29uZGFyeSBUZXJtaW5hdGlvblxuIiwKKwkJCXByaW50aygiJXM6IE1hbnVhbCBTZWNvbmRhcnkgVGVybWluYXRpb25cbiIsCiAJCQkgICAgICAgYWhkX25hbWUoYWhkKSk7CiAJCXRlcm1jdGwgJj0gfihGTFhfVEVSTUNUTF9FTlNFQ0xPV3xGTFhfVEVSTUNUTF9FTlNFQ0hJR0gpOwogCQlpZiAoKGFkYXB0ZXJfY29udHJvbCAmIENGU0VMT1dURVJNKSAhPSAwKQpAQCAtNjk0LDcgKzY5NCw3IEBACiAJCWlmICgoYWRhcHRlcl9jb250cm9sICYgQ0ZTRUhJR0hURVJNKSAhPSAwKQogCQkJdGVybWN0bCB8PSBGTFhfVEVSTUNUTF9FTlNFQ0hJR0g7CiAJfSBlbHNlIGlmIChlcnJvciAhPSAwKSB7Ci0JCXByaW50ZigiJXM6IFNlY29uZGFyeSBBdXRvLVRlcm0gU2Vuc2luZyBmYWlsZWQhICIKKwkJcHJpbnRrKCIlczogU2Vjb25kYXJ5IEF1dG8tVGVybSBTZW5zaW5nIGZhaWxlZCEgIgogCQkgICAgICAgIlVzaW5nIERlZmF1bHRzLlxuIiwgYWhkX25hbWUoYWhkKSk7CiAJCXRlcm1jdGwgfD0gRkxYX1RFUk1DVExfRU5TRUNMT1d8RkxYX1RFUk1DVExfRU5TRUNISUdIOwogCX0KQEAgLTcxNCwyMiArNzE0LDIyIEBACiAKIAllcnJvciA9IGFoZF93cml0ZV9mbGV4cG9ydChhaGQsIEZMWEFERFJfVEVSTUNUTCwgdGVybWN0bCk7CiAJaWYgKGVycm9yICE9IDApIHsKLQkJcHJpbnRmKCIlczogVW5hYmxlIHRvIHNldCB0ZXJtaW5hdGlvbiBzZXR0aW5ncyFcbiIsCisJCXByaW50aygiJXM6IFVuYWJsZSB0byBzZXQgdGVybWluYXRpb24gc2V0dGluZ3MhXG4iLAogCQkgICAgICAgYWhkX25hbWUoYWhkKSk7CiAJfSBlbHNlIGlmIChib290dmVyYm9zZSkgewotCQlwcmludGYoIiVzOiBQcmltYXJ5IEhpZ2ggYnl0ZSB0ZXJtaW5hdGlvbiAlc2FibGVkXG4iLAorCQlwcmludGsoIiVzOiBQcmltYXJ5IEhpZ2ggYnl0ZSB0ZXJtaW5hdGlvbiAlc2FibGVkXG4iLAogCQkgICAgICAgYWhkX25hbWUoYWhkKSwKIAkJICAgICAgICh0ZXJtY3RsICYgRkxYX1RFUk1DVExfRU5QUklISUdIKSA/ICJFbiIgOiAiRGlzIik7CiAKLQkJcHJpbnRmKCIlczogUHJpbWFyeSBMb3cgYnl0ZSB0ZXJtaW5hdGlvbiAlc2FibGVkXG4iLAorCQlwcmludGsoIiVzOiBQcmltYXJ5IExvdyBieXRlIHRlcm1pbmF0aW9uICVzYWJsZWRcbiIsCiAJCSAgICAgICBhaGRfbmFtZShhaGQpLAogCQkgICAgICAgKHRlcm1jdGwgJiBGTFhfVEVSTUNUTF9FTlBSSUxPVykgPyAiRW4iIDogIkRpcyIpOwogCi0JCXByaW50ZigiJXM6IFNlY29uZGFyeSBIaWdoIGJ5dGUgdGVybWluYXRpb24gJXNhYmxlZFxuIiwKKwkJcHJpbnRrKCIlczogU2Vjb25kYXJ5IEhpZ2ggYnl0ZSB0ZXJtaW5hdGlvbiAlc2FibGVkXG4iLAogCQkgICAgICAgYWhkX25hbWUoYWhkKSwKIAkJICAgICAgICh0ZXJtY3RsICYgRkxYX1RFUk1DVExfRU5TRUNISUdIKSA/ICJFbiIgOiAiRGlzIik7CiAKLQkJcHJpbnRmKCIlczogU2Vjb25kYXJ5IExvdyBieXRlIHRlcm1pbmF0aW9uICVzYWJsZWRcbiIsCisJCXByaW50aygiJXM6IFNlY29uZGFyeSBMb3cgYnl0ZSB0ZXJtaW5hdGlvbiAlc2FibGVkXG4iLAogCQkgICAgICAgYWhkX25hbWUoYWhkKSwKIAkJICAgICAgICh0ZXJtY3RsICYgRkxYX1RFUk1DVExfRU5TRUNMT1cpID8gIkVuIiA6ICJEaXMiKTsKIAl9CkBAIC04MDUsNyArODA1LDcgQEAKIAlpZiAoKGludHN0YXQgJiBQQ0lJTlQpID09IDApCiAJCXJldHVybjsKIAotCXByaW50ZigiJXM6IFBDSSBlcnJvciBJbnRlcnJ1cHRcbiIsIGFoZF9uYW1lKGFoZCkpOworCXByaW50aygiJXM6IFBDSSBlcnJvciBJbnRlcnJ1cHRcbiIsIGFoZF9uYW1lKGFoZCkpOwogCXNhdmVkX21vZGVzID0gYWhkX3NhdmVfbW9kZXMoYWhkKTsKIAlhaGRfZHVtcF9jYXJkX3N0YXRlKGFoZCk7CiAJYWhkX3NldF9tb2RlcyhhaGQsIEFIRF9NT0RFX0NGRywgQUhEX01PREVfQ0ZHKTsKQEAgLTgzMiw3ICs4MzIsNyBAQAogCQkJCXMgPSBwY2lfc3RhdHVzX3N0cmluZ3NbYml0XTsKIAkJCQlpZiAoaSA9PSA3LypUQVJHKi8gJiYgYml0ID09IDMpCiAJCQkJCXMgPSAiJXM6IFNpZ25hbGVkIFRhcmdldCBBYm9ydFxuIjsKLQkJCQlwcmludGYocywgYWhkX25hbWUoYWhkKSwgcGNpX3N0YXR1c19zb3VyY2VbaV0pOworCQkJCXByaW50ayhzLCBhaGRfbmFtZShhaGQpLCBwY2lfc3RhdHVzX3NvdXJjZVtpXSk7CiAJCQl9CiAJCX0JCiAJfQpAQCAtODYyLDcgKzg2Miw3IEBACiAJICovCiAJcGNpeF9zdGF0dXMgPSBhaGRfcGNpX3JlYWRfY29uZmlnKGFoZC0+ZGV2X3NvZnRjLCBQQ0lYUl9TVEFUVVMsCiAJCQkJCSAgLypieXRlcyovMik7Ci0JcHJpbnRmKCIlczogUENJIFNwbGl0IEludGVycnVwdCAtIFBDSS1YIHN0YXR1cyA9IDB4JXhcbiIsCisJcHJpbnRrKCIlczogUENJIFNwbGl0IEludGVycnVwdCAtIFBDSS1YIHN0YXR1cyA9IDB4JXhcbiIsCiAJICAgICAgIGFoZF9uYW1lKGFoZCksIHBjaXhfc3RhdHVzKTsKIAlzYXZlZF9tb2RlcyA9IGFoZF9zYXZlX21vZGVzKGFoZCk7CiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewpAQCAtODkxLDcgKzg5MSw3IEBACiAJCQkJc3RhdGljIGNvbnN0IGNoYXIgKnM7CiAKIAkJCQlzID0gc3BsaXRfc3RhdHVzX3N0cmluZ3NbYml0XTsKLQkJCQlwcmludGYocywgYWhkX25hbWUoYWhkKSwKKwkJCQlwcmludGsocywgYWhkX25hbWUoYWhkKSwKIAkJCQkgICAgICAgc3BsaXRfc3RhdHVzX3NvdXJjZVtpXSk7CiAJCQl9CiAKQEAgLTkwMiw3ICs5MDIsNyBAQAogCQkJCXN0YXRpYyBjb25zdCBjaGFyICpzOwogCiAJCQkJcyA9IHNwbGl0X3N0YXR1c19zdHJpbmdzW2JpdF07Ci0JCQkJcHJpbnRmKHMsIGFoZF9uYW1lKGFoZCksICJTRyIpOworCQkJCXByaW50ayhzLCBhaGRfbmFtZShhaGQpLCAiU0ciKTsKIAkJCX0KIAkJfQogCX0KQEAgLTk1MCw3ICs5NTAsNyBAQAogCXBjaSA9IGFoZC0+ZGV2X3NvZnRjOwogCXJldiA9IGFoZF9wY2lfcmVhZF9jb25maWcocGNpLCBQQ0lSX1JFVklELCAvKmJ5dGVzKi8xKTsKIAlpZiAocmV2IDwgSURfQUlDNzkwMl9QQ0lfUkVWX0E0KSB7Ci0JCXByaW50ZigiJXM6IFVuYWJsZSB0byBhdHRhY2ggdG8gdW5zdXBwb3J0ZWQgY2hpcCByZXZpc2lvbiAlZFxuIiwKKwkJcHJpbnRrKCIlczogVW5hYmxlIHRvIGF0dGFjaCB0byB1bnN1cHBvcnRlZCBjaGlwIHJldmlzaW9uICVkXG4iLAogCQkgICAgICAgYWhkX25hbWUoYWhkKSwgcmV2KTsKIAkJYWhkX3BjaV93cml0ZV9jb25maWcocGNpLCBQQ0lSX0NPTU1BTkQsIDAsIC8qYnl0ZXMqLzIpOwogCQlyZXR1cm4gKEVOWElPKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfcHJvYy5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9wcm9jLmMKaW5kZXggMDE0YmVkNy4uNTljODVkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9wcm9jLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9wcm9jLmMKQEAgLTI3MiwzMyArMjcyLDMyIEBACiAJc2F2ZWRfbW9kZXMgPSBhaGRfc2F2ZV9tb2RlcyhhaGQpOwogCWFoZF9zZXRfbW9kZXMoYWhkLCBBSERfTU9ERV9TQ1NJLCBBSERfTU9ERV9TQ1NJKTsKIAlpZiAobGVuZ3RoICE9IHNpemVvZihzdHJ1Y3Qgc2VlcHJvbV9jb25maWcpKSB7Ci0JCXByaW50ZigiYWhkX3Byb2Nfd3JpdGVfc2VlcHJvbTogaW5jb3JyZWN0IGJ1ZmZlciBzaXplXG4iKTsKKwkJcHJpbnRrKCJhaGRfcHJvY193cml0ZV9zZWVwcm9tOiBpbmNvcnJlY3QgYnVmZmVyIHNpemVcbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJaGF2ZV9zZWVwcm9tID0gYWhkX3ZlcmlmeV9ja3N1bSgoc3RydWN0IHNlZXByb21fY29uZmlnKilidWZmZXIpOwogCWlmIChoYXZlX3NlZXByb20gPT0gMCkgewotCQlwcmludGYoImFoZF9wcm9jX3dyaXRlX3NlZXByb206IGNrc3VtIHZlcmlmaWNhdGlvbiBmYWlsZWRcbiIpOworCQlwcmludGsoImFoZF9wcm9jX3dyaXRlX3NlZXByb206IGNrc3VtIHZlcmlmaWNhdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJaGF2ZV9zZWVwcm9tID0gYWhkX2FjcXVpcmVfc2VlcHJvbShhaGQpOwogCWlmICghaGF2ZV9zZWVwcm9tKSB7Ci0JCXByaW50ZigiYWhkX3Byb2Nfd3JpdGVfc2VlcHJvbTogTm8gU2VyaWFsIEVFUFJPTVxuIik7CisJCXByaW50aygiYWhkX3Byb2Nfd3JpdGVfc2VlcHJvbTogTm8gU2VyaWFsIEVFUFJPTVxuIik7CiAJCWdvdG8gZG9uZTsKIAl9IGVsc2UgewogCQl1X2ludCBzdGFydF9hZGRyOwogCiAJCWlmIChhaGQtPnNlZXBfY29uZmlnID09IE5VTEwpIHsKLQkJCWFoZC0+c2VlcF9jb25maWcgPSBtYWxsb2Moc2l6ZW9mKCphaGQtPnNlZXBfY29uZmlnKSwKLQkJCQkJCSAgTV9ERVZCVUYsIE1fTk9XQUlUKTsKKwkJCWFoZC0+c2VlcF9jb25maWcgPSBrbWFsbG9jKHNpemVvZigqYWhkLT5zZWVwX2NvbmZpZyksIEdGUF9BVE9NSUMpOwogCQkJaWYgKGFoZC0+c2VlcF9jb25maWcgPT0gTlVMTCkgewotCQkJCXByaW50ZigiYWljNzl4eDogVW5hYmxlIHRvIGFsbG9jYXRlIHNlcmlhbCAiCisJCQkJcHJpbnRrKCJhaWM3OXh4OiBVbmFibGUgdG8gYWxsb2NhdGUgc2VyaWFsICIKIAkJCQkgICAgICAgImVlcHJvbSBidWZmZXIuICBXcml0ZSBmYWlsaW5nXG4iKTsKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CiAJCX0KLQkJcHJpbnRmKCJhaWM3OXh4OiBXcml0aW5nIFNlcmlhbCBFRVBST01cbiIpOworCQlwcmludGsoImFpYzc5eHg6IFdyaXRpbmcgU2VyaWFsIEVFUFJPTVxuIik7CiAJCXN0YXJ0X2FkZHIgPSAzMiAqIChhaGQtPmNoYW5uZWwgLSAnQScpOwogCQlhaGRfd3JpdGVfc2VlcHJvbShhaGQsICh1X2ludDE2X3QgKilidWZmZXIsIHN0YXJ0X2FkZHIsCiAJCQkJICBzaXplb2Yoc3RydWN0IHNlZXByb21fY29uZmlnKS8yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfOTNjeDYuYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfOTNjeDYuYwppbmRleCBkZDExOTk5Li45ZTg1YTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4XzkzY3g2LmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF85M2N4Ni5jCkBAIC0yMDcsMTQgKzIwNywxNCBAQAogCQlyZXNldF9zZWVwcm9tKHNkKTsKIAl9CiAjaWZkZWYgQUhDX0RVTVBfRUVQUk9NCi0JcHJpbnRmKCJcblNlcmlhbCBFRVBST006XG5cdCIpOworCXByaW50aygiXG5TZXJpYWwgRUVQUk9NOlxuXHQiKTsKIAlmb3IgKGsgPSAwOyBrIDwgY291bnQ7IGsgPSBrICsgMSkgewogCQlpZiAoKChrICUgOCkgPT0gMCkgJiYgKGsgIT0gMCkpIHsKLQkJCXByaW50ZiAoIlxuXHQiKTsKKwkJCXByaW50ayhLRVJOX0NPTlQgIlxuXHQiKTsKIAkJfQotCQlwcmludGYgKCIgMHgleCIsIGJ1ZltrXSk7CisJCXByaW50ayhLRVJOX0NPTlQgIiAweCV4IiwgYnVmW2tdKTsKIAl9Ci0JcHJpbnRmICgiXG4iKTsKKwlwcmludGsoS0VSTl9DT05UICJcbiIpOwogI2VuZGlmCiAJcmV0dXJuICgxKTsKIH0KQEAgLTI0MCw3ICsyNDAsNyBAQAogCQlld2VuID0gJnNlZXByb21fbG9uZ19ld2VuOwogCQlld2RzID0gJnNlZXByb21fbG9uZ19ld2RzOwogCX0gZWxzZSB7Ci0JCXByaW50ZigiYWhjX3dyaXRlX3NlZXByb206IHVuc3VwcG9ydGVkIHNlZXByb20gdHlwZSAlZFxuIiwKKwkJcHJpbnRrKCJhaGNfd3JpdGVfc2VlcHJvbTogdW5zdXBwb3J0ZWQgc2VlcHJvbSB0eXBlICVkXG4iLAogCQkgICAgICAgc2QtPnNkX2NoaXApOwogCQlyZXR1cm4gKDApOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfY29yZS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9jb3JlLmMKaW5kZXggNDVhYTcyOC4uM2Y1YTU0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9jb3JlLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9jb3JlLmMKQEAgLTkxMCw3ICs5MTAsNyBAQAogCiAJCXNjYiA9IGFoY19sb29rdXBfc2NiKGFoYywgc2NiX2luZGV4KTsKIAkJaWYgKHNjYiA9PSBOVUxMKSB7Ci0JCQlwcmludGYoIiVzOiBXQVJOSU5HIG5vIGNvbW1hbmQgZm9yIHNjYiAlZCAiCisJCQlwcmludGsoIiVzOiBXQVJOSU5HIG5vIGNvbW1hbmQgZm9yIHNjYiAlZCAiCiAJCQkgICAgICAgIihjbWRjbXBsdClcblFPVVRQT1MgPSAlZFxuIiwKIAkJCSAgICAgICBhaGNfbmFtZShhaGMpLCBzY2JfaW5kZXgsCiAJCQkgICAgICAgKGFoYy0+cW91dGZpZm9uZXh0IC0gMSkgJiAweEZGKTsKQEAgLTk2NCw3ICs5NjQsNyBAQAogCWVycm9yID0gYWhjX2luYihhaGMsIEVSUk9SKTsKIAlmb3IgKGkgPSAwOyBlcnJvciAhPSAxICYmIGkgPCBudW1fZXJyb3JzOyBpKyspCiAJCWVycm9yID4+PSAxOwotCXByaW50ZigiJXM6IGJya2FkcmludCwgJXMgYXQgc2VxYWRkciA9IDB4JXhcbiIsCisJcHJpbnRrKCIlczogYnJrYWRyaW50LCAlcyBhdCBzZXFhZGRyID0gMHgleFxuIiwKIAkgICAgICAgYWhjX25hbWUoYWhjKSwgYWhjX2hhcmRfZXJyb3JzW2ldLmVycm1lc2csCiAJICAgICAgIGFoY19pbmIoYWhjLCBTRVFBRERSMCkgfAogCSAgICAgICAoYWhjX2luYihhaGMsIFNFUUFERFIxKSA8PCA4KSk7CkBAIC0xMDIxLDcgKzEwMjEsNyBAQAogCQlzY2IgPSBhaGNfbG9va3VwX3NjYihhaGMsIHNjYl9pbmRleCk7CiAJCWlmIChzY2IgPT0gTlVMTCkgewogCQkJYWhjX3ByaW50X2RldmluZm8oYWhjLCAmZGV2aW5mbyk7Ci0JCQlwcmludGYoImFoY19pbnRyIC0gcmVmZXJlbmNlZCBzY2IgIgorCQkJcHJpbnRrKCJhaGNfaW50ciAtIHJlZmVyZW5jZWQgc2NiICIKIAkJCSAgICAgICAibm90IHZhbGlkIGR1cmluZyBzZXFpbnQgMHgleCBzY2IoJWQpXG4iLAogCQkJICAgICAgIGludHN0YXQsIHNjYl9pbmRleCk7CiAJCQlhaGNfZHVtcF9jYXJkX3N0YXRlKGFoYyk7CkBAIC0xMDQ5LDcgKzEwNDksNyBAQAogCQlhaGNfc2V0X3Njc2lfc3RhdHVzKHNjYiwgaHNjYi0+c2hhcmVkX2RhdGEuc3RhdHVzLnNjc2lfc3RhdHVzKTsKIAkJc3dpdGNoIChoc2NiLT5zaGFyZWRfZGF0YS5zdGF0dXMuc2NzaV9zdGF0dXMpIHsKIAkJY2FzZSBTQ1NJX1NUQVRVU19PSzoKLQkJCXByaW50ZigiJXM6IEludGVycnVwdGVkIGZvciBzdGF1cyBvZiAwPz8/XG4iLAorCQkJcHJpbnRrKCIlczogSW50ZXJydXB0ZWQgZm9yIHN0YXVzIG9mIDA/Pz9cbiIsCiAJCQkgICAgICAgYWhjX25hbWUoYWhjKSk7CiAJCQlicmVhazsKIAkJY2FzZSBTQ1NJX1NUQVRVU19DTURfVEVSTUlOQVRFRDoKQEAgLTEwNjMsNyArMTA2Myw3IEBACiAjaWZkZWYgQUhDX0RFQlVHCiAJCQlpZiAoYWhjX2RlYnVnICYgQUhDX1NIT1dfU0VOU0UpIHsKIAkJCQlhaGNfcHJpbnRfcGF0aChhaGMsIHNjYik7Ci0JCQkJcHJpbnRmKCJTQ0IgJWQ6IHJlcXVlc3RzIENoZWNrIFN0YXR1c1xuIiwKKwkJCQlwcmludGsoIlNDQiAlZDogcmVxdWVzdHMgQ2hlY2sgU3RhdHVzXG4iLAogCQkJCSAgICAgICBzY2ItPmhzY2ItPnRhZyk7CiAJCQl9CiAjZW5kaWYKQEAgLTEwODYsNyArMTA4Niw3IEBACiAjaWZkZWYgQUhDX0RFQlVHCiAJCQlpZiAoYWhjX2RlYnVnICYgQUhDX1NIT1dfU0VOU0UpIHsKIAkJCQlhaGNfcHJpbnRfcGF0aChhaGMsIHNjYik7Ci0JCQkJcHJpbnRmKCJTZW5kaW5nIFNlbnNlXG4iKTsKKwkJCQlwcmludGsoIlNlbmRpbmcgU2Vuc2VcbiIpOwogCQkJfQogI2VuZGlmCiAJCQlzZy0+YWRkciA9IGFoY19nZXRfc2Vuc2VfYnVmYWRkcihhaGMsIHNjYik7CkBAIC0xMTYyLDI5ICsxMTYyLDI5IEBACiAJCWFoY19vdXRiKGFoYywgU0NTSVNFUSwKIAkJCSBhaGNfaW5iKGFoYywgU0NTSVNFUSkgJiAoRU5TRUxJfEVOUlNFTEl8RU5BVVRPQVROUCkpOwogCi0JCXByaW50ZigiJXM6JWM6JWQ6IG5vIGFjdGl2ZSBTQ0IgZm9yIHJlY29ubmVjdGluZyAiCisJCXByaW50aygiJXM6JWM6JWQ6IG5vIGFjdGl2ZSBTQ0IgZm9yIHJlY29ubmVjdGluZyAiCiAJCSAgICAgICAidGFyZ2V0IC0gaXNzdWluZyBCVVMgREVWSUNFIFJFU0VUXG4iLAogCQkgICAgICAgYWhjX25hbWUoYWhjKSwgZGV2aW5mby5jaGFubmVsLCBkZXZpbmZvLnRhcmdldCk7Ci0JCXByaW50ZigiU0FWRURfU0NTSUlEID09IDB4JXgsIFNBVkVEX0xVTiA9PSAweCV4LCAiCisJCXByaW50aygiU0FWRURfU0NTSUlEID09IDB4JXgsIFNBVkVEX0xVTiA9PSAweCV4LCAiCiAJCSAgICAgICAiQVJHXzEgPT0gMHgleCBBQ0NVTSA9IDB4JXhcbiIsCiAJCSAgICAgICBhaGNfaW5iKGFoYywgU0FWRURfU0NTSUlEKSwgYWhjX2luYihhaGMsIFNBVkVEX0xVTiksCiAJCSAgICAgICBhaGNfaW5iKGFoYywgQVJHXzEpLCBhaGNfaW5iKGFoYywgQUNDVU0pKTsKLQkJcHJpbnRmKCJTRVFfRkxBR1MgPT0gMHgleCwgU0NCUFRSID09IDB4JXgsIEJUVCA9PSAweCV4LCAiCisJCXByaW50aygiU0VRX0ZMQUdTID09IDB4JXgsIFNDQlBUUiA9PSAweCV4LCBCVFQgPT0gMHgleCwgIgogCQkgICAgICAgIlNJTkRFWCA9PSAweCV4XG4iLAogCQkgICAgICAgYWhjX2luYihhaGMsIFNFUV9GTEFHUyksIGFoY19pbmIoYWhjLCBTQ0JQVFIpLAogCQkgICAgICAgYWhjX2luZGV4X2J1c3lfdGNsKGFoYywKIAkJCSAgICBCVUlMRF9UQ0woYWhjX2luYihhaGMsIFNBVkVEX1NDU0lJRCksCiAJCQkJICAgICAgYWhjX2luYihhaGMsIFNBVkVEX0xVTikpKSwKIAkJICAgICAgIGFoY19pbmIoYWhjLCBTSU5ERVgpKTsKLQkJcHJpbnRmKCJTQ1NJSUQgPT0gMHgleCwgU0NCX1NDU0lJRCA9PSAweCV4LCBTQ0JfTFVOID09IDB4JXgsICIKKwkJcHJpbnRrKCJTQ1NJSUQgPT0gMHgleCwgU0NCX1NDU0lJRCA9PSAweCV4LCBTQ0JfTFVOID09IDB4JXgsICIKIAkJICAgICAgICJTQ0JfVEFHID09IDB4JXgsIFNDQl9DT05UUk9MID09IDB4JXhcbiIsCiAJCSAgICAgICBhaGNfaW5iKGFoYywgU0NTSUlEKSwgYWhjX2luYihhaGMsIFNDQl9TQ1NJSUQpLAogCQkgICAgICAgYWhjX2luYihhaGMsIFNDQl9MVU4pLCBhaGNfaW5iKGFoYywgU0NCX1RBRyksCiAJCSAgICAgICBhaGNfaW5iKGFoYywgU0NCX0NPTlRST0wpKTsKLQkJcHJpbnRmKCJTQ1NJQlVTTCA9PSAweCV4LCBTQ1NJU0lHSSA9PSAweCV4XG4iLAorCQlwcmludGsoIlNDU0lCVVNMID09IDB4JXgsIFNDU0lTSUdJID09IDB4JXhcbiIsCiAJCSAgICAgICBhaGNfaW5iKGFoYywgU0NTSUJVU0wpLCBhaGNfaW5iKGFoYywgU0NTSVNJR0kpKTsKLQkJcHJpbnRmKCJTWEZSQ1RMMCA9PSAweCV4XG4iLCBhaGNfaW5iKGFoYywgU1hGUkNUTDApKTsKLQkJcHJpbnRmKCJTRVFDVEwgPT0gMHgleFxuIiwgYWhjX2luYihhaGMsIFNFUUNUTCkpOworCQlwcmludGsoIlNYRlJDVEwwID09IDB4JXhcbiIsIGFoY19pbmIoYWhjLCBTWEZSQ1RMMCkpOworCQlwcmludGsoIlNFUUNUTCA9PSAweCV4XG4iLCBhaGNfaW5iKGFoYywgU0VRQ1RMKSk7CiAJCWFoY19kdW1wX2NhcmRfc3RhdGUoYWhjKTsKIAkJYWhjLT5tc2dvdXRfYnVmWzBdID0gTVNHX0JVU19ERVZfUkVTRVQ7CiAJCWFoYy0+bXNnb3V0X2xlbiA9IDE7CkBAIC0xMTk3LDcgKzExOTcsNyBAQAogCWNhc2UgU0VORF9SRUpFQ1Q6IAogCXsKIAkJdV9pbnQgcmVqYnl0ZSA9IGFoY19pbmIoYWhjLCBBQ0NVTSk7Ci0JCXByaW50ZigiJXM6JWM6JWQ6IFdhcm5pbmcgLSB1bmtub3duIG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSAiCisJCXByaW50aygiJXM6JWM6JWQ6IFdhcm5pbmcgLSB1bmtub3duIG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSAiCiAJCSAgICAgICAidGFyZ2V0ICgweCV4KS4gIFJlamVjdGluZ1xuIiwgCiAJCSAgICAgICBhaGNfbmFtZShhaGMpLCBkZXZpbmZvLmNoYW5uZWwsIGRldmluZm8udGFyZ2V0LCByZWpieXRlKTsKIAkJYnJlYWs7IApAQCAtMTIxOCw3ICsxMjE4LDcgQEAKIAkJdV9pbnQgbGFzdHBoYXNlOwogCiAJCWxhc3RwaGFzZSA9IGFoY19pbmIoYWhjLCBMQVNUUEhBU0UpOwotCQlwcmludGYoIiVzOiVjOiVkOiB1bmtub3duIHNjc2kgYnVzIHBoYXNlICV4LCAiCisJCXByaW50aygiJXM6JWM6JWQ6IHVua25vd24gc2NzaSBidXMgcGhhc2UgJXgsICIKIAkJICAgICAgICJsYXN0cGhhc2UgPSAweCV4LiAgQXR0ZW1wdGluZyB0byBjb250aW51ZVxuIiwKIAkJICAgICAgIGFoY19uYW1lKGFoYyksIGRldmluZm8uY2hhbm5lbCwgZGV2aW5mby50YXJnZXQsCiAJCSAgICAgICBsYXN0cGhhc2UsIGFoY19pbmIoYWhjLCBTQ1NJU0lHSSkpOwpAQCAtMTIyOSw3ICsxMjI5LDcgQEAKIAkJdV9pbnQgbGFzdHBoYXNlOwogCiAJCWxhc3RwaGFzZSA9IGFoY19pbmIoYWhjLCBMQVNUUEhBU0UpOwotCQlwcmludGYoIiVzOiVjOiVkOiBNaXNzZWQgYnVzZnJlZS4gIgorCQlwcmludGsoIiVzOiVjOiVkOiBNaXNzZWQgYnVzZnJlZS4gIgogCQkgICAgICAgIkxhc3RwaGFzZSA9IDB4JXgsIEN1cnBoYXNlID0gMHgleFxuIiwKIAkJICAgICAgIGFoY19uYW1lKGFoYyksIGRldmluZm8uY2hhbm5lbCwgZGV2aW5mby50YXJnZXQsCiAJCSAgICAgICBsYXN0cGhhc2UsIGFoY19pbmIoYWhjLCBTQ1NJU0lHSSkpOwpAQCAtMTI1Nyw3ICsxMjU3LDcgQEAKIAkJCWJ1c19waGFzZSA9IGFoY19pbmIoYWhjLCBTQ1NJU0lHSSkgJiBQSEFTRV9NQVNLOwogCQkJaWYgKGJ1c19waGFzZSAhPSBQX01FU0dJTgogCQkJICYmIGJ1c19waGFzZSAhPSBQX01FU0dPVVQpIHsKLQkJCQlwcmludGYoImFoY19pbnRyOiBIT1NUX01TR19MT09QIGJhZCAiCisJCQkJcHJpbnRrKCJhaGNfaW50cjogSE9TVF9NU0dfTE9PUCBiYWQgIgogCQkJCSAgICAgICAicGhhc2UgMHgleFxuIiwKIAkJCQkgICAgICBidXNfcGhhc2UpOwogCQkJCS8qCkBAIC0xMzU5LDcgKzEzNTksNyBAQAogCQkJCQl1X2ludAlzY2JfaW5kZXg7CiAKIAkJCQkJYWhjX3ByaW50X2RldmluZm8oYWhjLCAmZGV2aW5mbyk7Ci0JCQkJCXByaW50ZigiVW5hYmxlIHRvIGNsZWFyIHBhcml0eSBlcnJvci4gICIKKwkJCQkJcHJpbnRrKCJVbmFibGUgdG8gY2xlYXIgcGFyaXR5IGVycm9yLiAgIgogCQkJCQkgICAgICAgIlJlc2V0dGluZyBidXMuXG4iKTsKIAkJCQkJc2NiX2luZGV4ID0gYWhjX2luYihhaGMsIFNDQl9UQUcpOwogCQkJCQlzY2IgPSBhaGNfbG9va3VwX3NjYihhaGMsIHNjYl9pbmRleCk7CkBAIC0xMzk1LDE4ICsxMzk1LDE4IEBACiAJCQkJYnJlYWs7CiAJCX0KIAkJYWhjX3ByaW50X3BhdGgoYWhjLCBzY2IpOwotCQlwcmludGYoImRhdGEgb3ZlcnJ1biBkZXRlY3RlZCAlcy4iCisJCXByaW50aygiZGF0YSBvdmVycnVuIGRldGVjdGVkICVzLiIKIAkJICAgICAgICIgIFRhZyA9PSAweCV4LlxuIiwKIAkJICAgICAgIGFoY19waGFzZV90YWJsZVtpXS5waGFzZW1zZywKICAgCQkgICAgICAgc2NiLT5oc2NiLT50YWcpOwogCQlhaGNfcHJpbnRfcGF0aChhaGMsIHNjYik7Ci0JCXByaW50ZigiJXMgc2VlbiBEYXRhIFBoYXNlLiAgTGVuZ3RoID0gJWxkLiAgTnVtU0dzID0gJWQuXG4iLAorCQlwcmludGsoIiVzIHNlZW4gRGF0YSBQaGFzZS4gIExlbmd0aCA9ICVsZC4gIE51bVNHcyA9ICVkLlxuIiwKIAkJICAgICAgIGFoY19pbmIoYWhjLCBTRVFfRkxBR1MpICYgRFBIQVNFID8gIkhhdmUiIDogIkhhdmVuJ3QiLAogCQkgICAgICAgYWhjX2dldF90cmFuc2Zlcl9sZW5ndGgoc2NiKSwgc2NiLT5zZ19jb3VudCk7CiAJCWlmIChzY2ItPnNnX2NvdW50ID4gMCkgewogCQkJZm9yIChpID0gMDsgaSA8IHNjYi0+c2dfY291bnQ7IGkrKykgewogCi0JCQkJcHJpbnRmKCJzZ1slZF0gLSBBZGRyIDB4JXgleCA6IExlbmd0aCAlZFxuIiwKKwkJCQlwcmludGsoInNnWyVkXSAtIEFkZHIgMHgleCV4IDogTGVuZ3RoICVkXG4iLAogCQkJCSAgICAgICBpLAogCQkJCSAgICAgICAoYWhjX2xlMzJ0b2goc2NiLT5zZ19saXN0W2ldLmxlbikgPj4gMjQKIAkJCQkgICAgICAgICYgU0dfSElHSF9BRERSX0JJVFMpLApAQCAtMTQ1Myw3ICsxNDUzLDcgQEAKIAl7CiAJCXVfaW50IHNjYmluZGV4OwogCi0JCXByaW50ZigiJXM6JWM6JWQ6JWQ6IEF0dGVtcHQgdG8gaXNzdWUgbWVzc2FnZSBmYWlsZWRcbiIsCisJCXByaW50aygiJXM6JWM6JWQ6JWQ6IEF0dGVtcHQgdG8gaXNzdWUgbWVzc2FnZSBmYWlsZWRcbiIsCiAJCSAgICAgICBhaGNfbmFtZShhaGMpLCBkZXZpbmZvLmNoYW5uZWwsIGRldmluZm8udGFyZ2V0LAogCQkgICAgICAgZGV2aW5mby5sdW4pOwogCQlzY2JpbmRleCA9IGFoY19pbmIoYWhjLCBTQ0JfVEFHKTsKQEAgLTE0NzMsNyArMTQ3Myw3IEBACiAJfQogCWNhc2UgTk9fRlJFRV9TQ0I6CiAJewotCQlwcmludGYoIiVzOiBObyBmcmVlIG9yIGRpc2Nvbm5lY3RlZCBTQ0JzXG4iLCBhaGNfbmFtZShhaGMpKTsKKwkJcHJpbnRrKCIlczogTm8gZnJlZSBvciBkaXNjb25uZWN0ZWQgU0NCc1xuIiwgYWhjX25hbWUoYWhjKSk7CiAJCWFoY19kdW1wX2NhcmRfc3RhdGUoYWhjKTsKIAkJcGFuaWMoImZvciBzYWZldHkiKTsKIAkJYnJlYWs7CkBAIC0xNDgzLDcgKzE0ODMsNyBAQAogCQl1X2ludCBzY2JwdHI7CiAKIAkJc2NicHRyID0gYWhjX2luYihhaGMsIFNDQlBUUik7Ci0JCXByaW50ZigiQm9ndXMgVEFHIGFmdGVyIERNQS4gIFNDQlBUUiAlZCwgdGFnICVkLCBvdXIgdGFnICVkXG4iLAorCQlwcmludGsoIkJvZ3VzIFRBRyBhZnRlciBETUEuICBTQ0JQVFIgJWQsIHRhZyAlZCwgb3VyIHRhZyAlZFxuIiwKIAkJICAgICAgIHNjYnB0ciwgYWhjX2luYihhaGMsIEFSR18xKSwKIAkJICAgICAgIGFoYy0+c2NiX2RhdGEtPmhzY2JzW3NjYnB0cl0udGFnKTsKIAkJYWhjX2R1bXBfY2FyZF9zdGF0ZShhaGMpOwpAQCAtMTQ5MiwxMiArMTQ5MiwxMiBAQAogCX0KIAljYXNlIE9VVF9PRl9SQU5HRToKIAl7Ci0JCXByaW50ZigiJXM6IEJUVCBjYWxjdWxhdGlvbiBvdXQgb2YgcmFuZ2VcbiIsIGFoY19uYW1lKGFoYykpOwotCQlwcmludGYoIlNBVkVEX1NDU0lJRCA9PSAweCV4LCBTQVZFRF9MVU4gPT0gMHgleCwgIgorCQlwcmludGsoIiVzOiBCVFQgY2FsY3VsYXRpb24gb3V0IG9mIHJhbmdlXG4iLCBhaGNfbmFtZShhaGMpKTsKKwkJcHJpbnRrKCJTQVZFRF9TQ1NJSUQgPT0gMHgleCwgU0FWRURfTFVOID09IDB4JXgsICIKIAkJICAgICAgICJBUkdfMSA9PSAweCV4IEFDQ1VNID0gMHgleFxuIiwKIAkJICAgICAgIGFoY19pbmIoYWhjLCBTQVZFRF9TQ1NJSUQpLCBhaGNfaW5iKGFoYywgU0FWRURfTFVOKSwKIAkJICAgICAgIGFoY19pbmIoYWhjLCBBUkdfMSksIGFoY19pbmIoYWhjLCBBQ0NVTSkpOwotCQlwcmludGYoIlNFUV9GTEFHUyA9PSAweCV4LCBTQ0JQVFIgPT0gMHgleCwgQlRUID09IDB4JXgsICIKKwkJcHJpbnRrKCJTRVFfRkxBR1MgPT0gMHgleCwgU0NCUFRSID09IDB4JXgsIEJUVCA9PSAweCV4LCAiCiAJCSAgICAgICAiU0lOREVYID09IDB4JXhcbiwgQSA9PSAweCV4XG4iLAogCQkgICAgICAgYWhjX2luYihhaGMsIFNFUV9GTEFHUyksIGFoY19pbmIoYWhjLCBTQ0JQVFIpLAogCQkgICAgICAgYWhjX2luZGV4X2J1c3lfdGNsKGFoYywKQEAgLTE1MDUsMTkgKzE1MDUsMTkgQEAKIAkJCQkgICAgICBhaGNfaW5iKGFoYywgU0FWRURfTFVOKSkpLAogCQkgICAgICAgYWhjX2luYihhaGMsIFNJTkRFWCksCiAJCSAgICAgICBhaGNfaW5iKGFoYywgQUNDVU0pKTsKLQkJcHJpbnRmKCJTQ1NJSUQgPT0gMHgleCwgU0NCX1NDU0lJRCA9PSAweCV4LCBTQ0JfTFVOID09IDB4JXgsICIKKwkJcHJpbnRrKCJTQ1NJSUQgPT0gMHgleCwgU0NCX1NDU0lJRCA9PSAweCV4LCBTQ0JfTFVOID09IDB4JXgsICIKIAkJICAgICAgICJTQ0JfVEFHID09IDB4JXgsIFNDQl9DT05UUk9MID09IDB4JXhcbiIsCiAJCSAgICAgICBhaGNfaW5iKGFoYywgU0NTSUlEKSwgYWhjX2luYihhaGMsIFNDQl9TQ1NJSUQpLAogCQkgICAgICAgYWhjX2luYihhaGMsIFNDQl9MVU4pLCBhaGNfaW5iKGFoYywgU0NCX1RBRyksCiAJCSAgICAgICBhaGNfaW5iKGFoYywgU0NCX0NPTlRST0wpKTsKLQkJcHJpbnRmKCJTQ1NJQlVTTCA9PSAweCV4LCBTQ1NJU0lHSSA9PSAweCV4XG4iLAorCQlwcmludGsoIlNDU0lCVVNMID09IDB4JXgsIFNDU0lTSUdJID09IDB4JXhcbiIsCiAJCSAgICAgICBhaGNfaW5iKGFoYywgU0NTSUJVU0wpLCBhaGNfaW5iKGFoYywgU0NTSVNJR0kpKTsKIAkJYWhjX2R1bXBfY2FyZF9zdGF0ZShhaGMpOwogCQlwYW5pYygiZm9yIHNhZmV0eSIpOwogCQlicmVhazsKIAl9CiAJZGVmYXVsdDoKLQkJcHJpbnRmKCJhaGNfaW50cjogc2VxaW50LCAiCisJCXByaW50aygiYWhjX2ludHI6IHNlcWludCwgIgogCQkgICAgICAgImludHN0YXQgPT0gMHgleCwgc2NzaXNpZ2kgPSAweCV4XG4iLAogCQkgICAgICAgaW50c3RhdCwgYWhjX2luYihhaGMsIFNDU0lTSUdJKSk7CiAJCWJyZWFrOwpAQCAtMTU2Miw3ICsxNTYyLDcgQEAKIAkJCWludHJfY2hhbm5lbCA9IChjdXJfY2hhbm5lbCA9PSAnQScpID8gJ0InIDogJ0EnOwogCQl9CiAJCWlmIChzdGF0dXMgPT0gMCkgewotCQkJcHJpbnRmKCIlczogU3B1cmlvdXMgU0NTSSBpbnRlcnJ1cHRcbiIsIGFoY19uYW1lKGFoYykpOworCQkJcHJpbnRrKCIlczogU3B1cmlvdXMgU0NTSSBpbnRlcnJ1cHRcbiIsIGFoY19uYW1lKGFoYykpOwogCQkJYWhjX291dGIoYWhjLCBDTFJJTlQsIENMUlNDU0lJTlQpOwogCQkJYWhjX3VucGF1c2UoYWhjKTsKIAkJCXJldHVybjsKQEAgLTE1ODMsNyArMTU4Myw3IEBACiAJCWludCBub3dfbHZkOwogCiAJCW5vd19sdmQgPSBhaGNfaW5iKGFoYywgU0JMS0NUTCkgJiBFTkFCNDA7Ci0JCXByaW50ZigiJXM6IFRyYW5zY2VpdmVyIFN0YXRlIEhhcyBDaGFuZ2VkIHRvICVzIG1vZGVcbiIsCisJCXByaW50aygiJXM6IFRyYW5zY2VpdmVyIFN0YXRlIEhhcyBDaGFuZ2VkIHRvICVzIG1vZGVcbiIsCiAJCSAgICAgICBhaGNfbmFtZShhaGMpLCBub3dfbHZkID8gIkxWRCIgOiAiU0UiKTsKIAkJYWhjX291dGIoYWhjLCBDTFJTSU5UMCwgQ0xSSU9FUlIpOwogCQkvKgpAQCAtMTU5OSw3ICsxNTk5LDcgQEAKIAkJYWhjX3Jlc2V0X2NoYW5uZWwoYWhjLCBpbnRyX2NoYW5uZWwsCiAJCQkJIC8qSW5pdGlhdGUgUmVzZXQqL25vd19sdmQgPT0gMCk7CiAJfSBlbHNlIGlmICgoc3RhdHVzICYgU0NTSVJTVEkpICE9IDApIHsKLQkJcHJpbnRmKCIlczogU29tZW9uZSByZXNldCBjaGFubmVsICVjXG4iLAorCQlwcmludGsoIiVzOiBTb21lb25lIHJlc2V0IGNoYW5uZWwgJWNcbiIsCiAJCQlhaGNfbmFtZShhaGMpLCBpbnRyX2NoYW5uZWwpOwogCQlpZiAoaW50cl9jaGFubmVsICE9IGN1cl9jaGFubmVsKQogCQkgCWFoY19vdXRiKGFoYywgU0JMS0NUTCwgYWhjX2luYihhaGMsIFNCTEtDVEwpIF4gU0VMQlVTQik7CkBAIC0xNjU5LDI2ICsxNjU5LDI2IEBACiAJCQkJYWhjX3ByaW50X3BhdGgoYWhjLCBzY2IpOwogCQkJc2NiLT5mbGFncyB8PSBTQ0JfVFJBTlNNSVNTSU9OX0VSUk9SOwogCQl9IGVsc2UKLQkJCXByaW50ZigiJXM6JWM6JWQ6ICIsIGFoY19uYW1lKGFoYyksIGludHJfY2hhbm5lbCwKKwkJCXByaW50aygiJXM6JWM6JWQ6ICIsIGFoY19uYW1lKGFoYyksIGludHJfY2hhbm5lbCwKIAkJCSAgICAgICBTQ1NJSURfVEFSR0VUKGFoYywgYWhjX2luYihhaGMsIFNBVkVEX1NDU0lJRCkpKTsKIAkJc2NzaXJhdGUgPSBhaGNfaW5iKGFoYywgU0NTSVJBVEUpOwogCQlpZiAoc2lsZW50ID09IEZBTFNFKSB7Ci0JCQlwcmludGYoInBhcml0eSBlcnJvciBkZXRlY3RlZCAlcy4gIgorCQkJcHJpbnRrKCJwYXJpdHkgZXJyb3IgZGV0ZWN0ZWQgJXMuICIKIAkJCSAgICAgICAiU0VRQUREUigweCV4KSBTQ1NJUkFURSgweCV4KVxuIiwKIAkJCSAgICAgICBhaGNfcGhhc2VfdGFibGVbaV0ucGhhc2Vtc2csCiAJCQkgICAgICAgYWhjX2ludyhhaGMsIFNFUUFERFIwKSwKIAkJCSAgICAgICBzY3NpcmF0ZSk7CiAJCQlpZiAoKGFoYy0+ZmVhdHVyZXMgJiBBSENfRFQpICE9IDApIHsKIAkJCQlpZiAoKHNzdGF0MiAmIENSQ1ZBTEVSUikgIT0gMCkKLQkJCQkJcHJpbnRmKCJcdENSQyBWYWx1ZSBNaXNtYXRjaFxuIik7CisJCQkJCXByaW50aygiXHRDUkMgVmFsdWUgTWlzbWF0Y2hcbiIpOwogCQkJCWlmICgoc3N0YXQyICYgQ1JDRU5ERVJSKSAhPSAwKQotCQkJCQlwcmludGYoIlx0Tm8gdGVybWluYWwgQ1JDIHBhY2tldCAiCisJCQkJCXByaW50aygiXHRObyB0ZXJtaW5hbCBDUkMgcGFja2V0ICIKIAkJCQkJICAgICAgICJyZWNldmllZFxuIik7CiAJCQkJaWYgKChzc3RhdDIgJiBDUkNSRVFFUlIpICE9IDApCi0JCQkJCXByaW50ZigiXHRJbGxlZ2FsIENSQyBwYWNrZXQgIgorCQkJCQlwcmludGsoIlx0SWxsZWdhbCBDUkMgcGFja2V0ICIKIAkJCQkJICAgICAgICJyZXF1ZXN0XG4iKTsKIAkJCQlpZiAoKHNzdGF0MiAmIERVQUxfRURHRV9FUlIpICE9IDApCi0JCQkJCXByaW50ZigiXHRVbmV4cGVjdGVkICVzRFQgRGF0YSBQaGFzZVxuIiwKKwkJCQkJcHJpbnRrKCJcdFVuZXhwZWN0ZWQgJXNEVCBEYXRhIFBoYXNlXG4iLAogCQkJCQkgICAgICAgKHNjc2lyYXRlICYgU0lOR0xFX0VER0UpCiAJCQkJCSAgICAgPyAiIiA6ICJub24tIik7CiAJCQl9CkBAIC0xNzQ2LDcgKzE3NDYsNyBAQAogCiAJCXNjYiA9IGFoY19sb29rdXBfc2NiKGFoYywgc2NiX2luZGV4KTsKIAkJaWYgKHNjYiA9PSBOVUxMKSB7Ci0JCQlwcmludGYoIiVzOiBhaGNfaW50ciAtIHJlZmVyZW5jZWQgc2NiIG5vdCAiCisJCQlwcmludGsoIiVzOiBhaGNfaW50ciAtIHJlZmVyZW5jZWQgc2NiIG5vdCAiCiAJCQkgICAgICAgInZhbGlkIGR1cmluZyBTRUxUTyBzY2IoJWQsICVkKVxuIiwKIAkJCSAgICAgICBhaGNfbmFtZShhaGMpLCBzY2JwdHIsIHNjYl9pbmRleCk7CiAJCQlhaGNfZHVtcF9jYXJkX3N0YXRlKGFoYyk7CkBAIC0xNzU1LDcgKzE3NTUsNyBAQAogI2lmZGVmIEFIQ19ERUJVRwogCQkJaWYgKChhaGNfZGVidWcgJiBBSENfU0hPV19TRUxUTykgIT0gMCkgewogCQkJCWFoY19wcmludF9wYXRoKGFoYywgc2NiKTsKLQkJCQlwcmludGYoIlNhdyBTZWxlY3Rpb24gVGltZW91dCBmb3IgU0NCIDB4JXhcbiIsCisJCQkJcHJpbnRrKCJTYXcgU2VsZWN0aW9uIFRpbWVvdXQgZm9yIFNDQiAweCV4XG4iLAogCQkJCSAgICAgICBzY2JfaW5kZXgpOwogCQkJfQogI2VuZGlmCkBAIC0xODMxLDcgKzE4MzEsNyBAQAogCQkJCSA9PSBNU0dfQUJPUlRfVEFHKQogCQkJCQl0YWcgPSBzY2ItPmhzY2ItPnRhZzsKIAkJCQlhaGNfcHJpbnRfcGF0aChhaGMsIHNjYik7Ci0JCQkJcHJpbnRmKCJTQ0IgJWQgLSBBYm9ydCVzIENvbXBsZXRlZC5cbiIsCisJCQkJcHJpbnRrKCJTQ0IgJWQgLSBBYm9ydCVzIENvbXBsZXRlZC5cbiIsCiAJCQkJICAgICAgIHNjYi0+aHNjYi0+dGFnLCB0YWcgPT0gU0NCX0xJU1RfTlVMTCA/CiAJCQkJICAgICAgICIiIDogIiBUYWciKTsKIAkJCQlhaGNfYWJvcnRfc2NicyhhaGMsIHRhcmdldCwgY2hhbm5lbCwKQEAgLTE5MzQsNyArMTkzNCw3IEBACiAJCQkJICogV2UgaGFkIG5vdCBmdWxseSBpZGVudGlmaWVkIHRoaXMgY29ubmVjdGlvbiwKIAkJCQkgKiBzbyB3ZSBjYW5ub3QgYWJvcnQgYW55dGhpbmcuCiAJCQkJICovCi0JCQkJcHJpbnRmKCIlczogIiwgYWhjX25hbWUoYWhjKSk7CisJCQkJcHJpbnRrKCIlczogIiwgYWhjX25hbWUoYWhjKSk7CiAJCQl9CiAJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BoYXNlczsgaSsrKSB7CiAJCQkJaWYgKGxhc3RwaGFzZSA9PSBhaGNfcGhhc2VfdGFibGVbaV0ucGhhc2UpCkBAIC0xOTQ5LDcgKzE5NDksNyBAQAogCQkJCSAqLwogCQkJCWFoY19mb3JjZV9yZW5lZ290aWF0aW9uKGFoYywgJmRldmluZm8pOwogCQkJfQotCQkJcHJpbnRmKCJVbmV4cGVjdGVkIGJ1c2ZyZWUgJXNcbiIKKwkJCXByaW50aygiVW5leHBlY3RlZCBidXNmcmVlICVzXG4iCiAJCQkgICAgICAgIlNFUUFERFIgPT0gMHgleFxuIiwKIAkJCSAgICAgICBhaGNfcGhhc2VfdGFibGVbaV0ucGhhc2Vtc2csCiAJCQkgICAgICAgYWhjX2luYihhaGMsIFNFUUFERFIwKQpAQCAtMTk1OCw3ICsxOTU4LDcgQEAKIAkJYWhjX291dGIoYWhjLCBDTFJJTlQsIENMUlNDU0lJTlQpOwogCQlhaGNfcmVzdGFydChhaGMpOwogCX0gZWxzZSB7Ci0JCXByaW50ZigiJXM6IE1pc3NpbmcgY2FzZSBpbiBhaGNfaGFuZGxlX3Njc2lpbnQuIHN0YXR1cyA9ICV4XG4iLAorCQlwcmludGsoIiVzOiBNaXNzaW5nIGNhc2UgaW4gYWhjX2hhbmRsZV9zY3NpaW50LiBzdGF0dXMgPSAleFxuIiwKIAkJICAgICAgIGFoY19uYW1lKGFoYyksIHN0YXR1cyk7CiAJCWFoY19vdXRiKGFoYywgQ0xSSU5ULCBDTFJTQ1NJSU5UKTsKIAl9CkBAIC0yMDI1LDcgKzIwMjUsNyBAQAogCQkJYnJlYWs7CiAKIAkJaWYgKHN0ZXBzID4gQUhDX01BWF9TVEVQUykgewotCQkJcHJpbnRmKCIlczogSW5maW5pdGUgbG9vcCBpbiBjcml0aWNhbCBzZWN0aW9uXG4iLAorCQkJcHJpbnRrKCIlczogSW5maW5pdGUgbG9vcCBpbiBjcml0aWNhbCBzZWN0aW9uXG4iLAogCQkJICAgICAgIGFoY19uYW1lKGFoYykpOwogCQkJYWhjX2R1bXBfY2FyZF9zdGF0ZShhaGMpOwogCQkJcGFuaWMoImNyaXRpY2FsIHNlY3Rpb24gbG9vcCIpOwpAQCAtMjEwNCwyMyArMjEwNCwyMyBAQAogCiAJc3RydWN0IGhhcmR3YXJlX3NjYiAqaHNjYiA9IHNjYi0+aHNjYjsKIAotCXByaW50Zigic2NiOiVwIGNvbnRyb2w6MHgleCBzY3NpaWQ6MHgleCBsdW46JWQgY2RiX2xlbjolZFxuIiwKKwlwcmludGsoInNjYjolcCBjb250cm9sOjB4JXggc2NzaWlkOjB4JXggbHVuOiVkIGNkYl9sZW46JWRcbiIsCiAJICAgICAgICh2b2lkICopc2NiLAogCSAgICAgICBoc2NiLT5jb250cm9sLAogCSAgICAgICBoc2NiLT5zY3NpaWQsCiAJICAgICAgIGhzY2ItPmx1biwKIAkgICAgICAgaHNjYi0+Y2RiX2xlbik7Ci0JcHJpbnRmKCJTaGFyZWQgRGF0YTogIik7CisJcHJpbnRrKCJTaGFyZWQgRGF0YTogIik7CiAJZm9yIChpID0gMDsgaSA8IHNpemVvZihoc2NiLT5zaGFyZWRfZGF0YS5jZGIpOyBpKyspCi0JCXByaW50ZigiJSMwMngiLCBoc2NiLT5zaGFyZWRfZGF0YS5jZGJbaV0pOwotCXByaW50ZigiICAgICAgICBkYXRhcHRyOiUjeCBkYXRhY250OiUjeCBzZ3B0cjolI3ggdGFnOiUjeFxuIiwKKwkJcHJpbnRrKCIlIzAyeCIsIGhzY2ItPnNoYXJlZF9kYXRhLmNkYltpXSk7CisJcHJpbnRrKCIgICAgICAgIGRhdGFwdHI6JSN4IGRhdGFjbnQ6JSN4IHNncHRyOiUjeCB0YWc6JSN4XG4iLAogCQlhaGNfbGUzMnRvaChoc2NiLT5kYXRhcHRyKSwKIAkJYWhjX2xlMzJ0b2goaHNjYi0+ZGF0YWNudCksCiAJCWFoY19sZTMydG9oKGhzY2ItPnNncHRyKSwKIAkJaHNjYi0+dGFnKTsKIAlpZiAoc2NiLT5zZ19jb3VudCA+IDApIHsKIAkJZm9yIChpID0gMDsgaSA8IHNjYi0+c2dfY291bnQ7IGkrKykgewotCQkJcHJpbnRmKCJzZ1slZF0gLSBBZGRyIDB4JXgleCA6IExlbmd0aCAlZFxuIiwKKwkJCXByaW50aygic2dbJWRdIC0gQWRkciAweCV4JXggOiBMZW5ndGggJWRcbiIsCiAJCQkgICAgICAgaSwKIAkJCSAgICAgICAoYWhjX2xlMzJ0b2goc2NiLT5zZ19saXN0W2ldLmxlbikgPj4gMjQKIAkJCSAgICAgICAgJiBTR19ISUdIX0FERFJfQklUUyksCkBAIC0yMTUyLDggKzIxNTIsNyBAQAogCSAmJiBhaGMtPmVuYWJsZWRfdGFyZ2V0c1tzY3NpX2lkXSAhPSBtYXN0ZXJfdHN0YXRlKQogCQlwYW5pYygiJXM6IGFoY19hbGxvY190c3RhdGUgLSBUYXJnZXQgYWxyZWFkeSBhbGxvY2F0ZWQiLAogCQkgICAgICBhaGNfbmFtZShhaGMpKTsKLQl0c3RhdGUgPSAoc3RydWN0IGFoY190bW9kZV90c3RhdGUqKW1hbGxvYyhzaXplb2YoKnRzdGF0ZSksCi0JCQkJCQkgICBNX0RFVkJVRiwgTV9OT1dBSVQpOworCXRzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKCp0c3RhdGUpLCBHRlBfQVRPTUlDKTsKIAlpZiAodHN0YXRlID09IE5VTEwpCiAJCXJldHVybiAoTlVMTCk7CiAKQEAgLTIyMDIsNyArMjIwMSw3IEBACiAJCXNjc2lfaWQgKz0gODsKIAl0c3RhdGUgPSBhaGMtPmVuYWJsZWRfdGFyZ2V0c1tzY3NpX2lkXTsKIAlpZiAodHN0YXRlICE9IE5VTEwpCi0JCWZyZWUodHN0YXRlLCBNX0RFVkJVRik7CisJCWtmcmVlKHRzdGF0ZSk7CiAJYWhjLT5lbmFibGVkX3RhcmdldHNbc2NzaV9pZF0gPSBOVUxMOwogfQogI2VuZGlmCkBAIC0yNTg5LDEzICsyNTg4LDEzIEBACiAJCQkgICAgICAgQ0FNX0xVTl9XSUxEQ0FSRCwgQUNfVFJBTlNGRVJfTkVHKTsKIAkJaWYgKGJvb3R2ZXJib3NlKSB7CiAJCQlpZiAob2Zmc2V0ICE9IDApIHsKLQkJCQlwcmludGYoIiVzOiB0YXJnZXQgJWQgc3luY2hyb25vdXMgYXQgJXNNSHolcywgIgorCQkJCXByaW50aygiJXM6IHRhcmdldCAlZCBzeW5jaHJvbm91cyBhdCAlc01IeiVzLCAiCiAJCQkJICAgICAgICJvZmZzZXQgPSAweCV4XG4iLCBhaGNfbmFtZShhaGMpLAogCQkJCSAgICAgICBkZXZpbmZvLT50YXJnZXQsIHN5bmNyYXRlLT5yYXRlLAogCQkJCSAgICAgICAocHByX29wdGlvbnMgJiBNU0dfRVhUX1BQUl9EVF9SRVEpCiAJCQkJICAgICAgID8gIiBEVCIgOiAiIiwgb2Zmc2V0KTsKIAkJCX0gZWxzZSB7Ci0JCQkJcHJpbnRmKCIlczogdGFyZ2V0ICVkIHVzaW5nICIKKwkJCQlwcmludGsoIiVzOiB0YXJnZXQgJWQgdXNpbmcgIgogCQkJCSAgICAgICAiYXN5bmNocm9ub3VzIHRyYW5zZmVyc1xuIiwKIAkJCQkgICAgICAgYWhjX25hbWUoYWhjKSwgZGV2aW5mby0+dGFyZ2V0KTsKIAkJCX0KQEAgLTI2NTgsNyArMjY1Nyw3IEBACiAJCWFoY19zZW5kX2FzeW5jKGFoYywgZGV2aW5mby0+Y2hhbm5lbCwgZGV2aW5mby0+dGFyZ2V0LAogCQkJICAgICAgIENBTV9MVU5fV0lMRENBUkQsIEFDX1RSQU5TRkVSX05FRyk7CiAJCWlmIChib290dmVyYm9zZSkgewotCQkJcHJpbnRmKCIlczogdGFyZ2V0ICVkIHVzaW5nICVkYml0IHRyYW5zZmVyc1xuIiwKKwkJCXByaW50aygiJXM6IHRhcmdldCAlZCB1c2luZyAlZGJpdCB0cmFuc2ZlcnNcbiIsCiAJCQkgICAgICAgYWhjX25hbWUoYWhjKSwgZGV2aW5mby0+dGFyZ2V0LAogCQkJICAgICAgIDggKiAoMHgwMSA8PCB3aWR0aCkpOwogCQl9CkBAIC0yODM1LDcgKzI4MzQsNyBAQAogdm9pZAogYWhjX3ByaW50X2RldmluZm8oc3RydWN0IGFoY19zb2Z0YyAqYWhjLCBzdHJ1Y3QgYWhjX2RldmluZm8gKmRldmluZm8pCiB7Ci0JcHJpbnRmKCIlczolYzolZDolZDogIiwgYWhjX25hbWUoYWhjKSwgZGV2aW5mby0+Y2hhbm5lbCwKKwlwcmludGsoIiVzOiVjOiVkOiVkOiAiLCBhaGNfbmFtZShhaGMpLCBkZXZpbmZvLT5jaGFubmVsLAogCSAgICAgICBkZXZpbmZvLT50YXJnZXQsIGRldmluZm8tPmx1bik7CiB9CiAKQEAgLTI5MDcsNyArMjkwNiw3IEBACiAJCWFoYy0+bXNnb3V0X2J1ZlthaGMtPm1zZ291dF9pbmRleCsrXSA9IE1TR19CVVNfREVWX1JFU0VUOwogCQlhaGMtPm1zZ291dF9sZW4rKzsKIAkJYWhjX3ByaW50X3BhdGgoYWhjLCBzY2IpOwotCQlwcmludGYoIkJ1cyBEZXZpY2UgUmVzZXQgTWVzc2FnZSBTZW50XG4iKTsKKwkJcHJpbnRrKCJCdXMgRGV2aWNlIFJlc2V0IE1lc3NhZ2UgU2VudFxuIik7CiAJCS8qCiAJCSAqIENsZWFyIG91ciBzZWxlY3Rpb24gaGFyZHdhcmUgaW4gYWR2YW5jZSBvZgogCQkgKiB0aGUgYnVzZnJlZS4gIFdlIG1heSBoYXZlIGFuIGVudHJ5IGluIHRoZSB3YWl0aW5nCkBAIC0yOTIzLDcgKzI5MjIsNyBAQAogCQkJYWhjLT5tc2dvdXRfYnVmW2FoYy0+bXNnb3V0X2luZGV4KytdID0gTVNHX0FCT1JUOwogCQlhaGMtPm1zZ291dF9sZW4rKzsKIAkJYWhjX3ByaW50X3BhdGgoYWhjLCBzY2IpOwotCQlwcmludGYoIkFib3J0JXMgTWVzc2FnZSBTZW50XG4iLAorCQlwcmludGsoIkFib3J0JXMgTWVzc2FnZSBTZW50XG4iLAogCQkgICAgICAgKHNjYi0+aHNjYi0+Y29udHJvbCAmIFRBR19FTkIpICE9IDAgPyAiIFRhZyIgOiAiIik7CiAJCS8qCiAJCSAqIENsZWFyIG91ciBzZWxlY3Rpb24gaGFyZHdhcmUgaW4gYWR2YW5jZSBvZgpAQCAtMjkzNiw5ICsyOTM1LDkgQEAKIAl9IGVsc2UgaWYgKChzY2ItPmZsYWdzICYgKFNDQl9BVVRPX05FR09USUFURXxTQ0JfTkVHT1RJQVRFKSkgIT0gMCkgewogCQlhaGNfYnVpbGRfdHJhbnNmZXJfbXNnKGFoYywgZGV2aW5mbyk7CiAJfSBlbHNlIHsKLQkJcHJpbnRmKCJhaGNfaW50cjogQVdBSVRJTkdfTVNHIGZvciBhbiBTQ0IgdGhhdCAiCisJCXByaW50aygiYWhjX2ludHI6IEFXQUlUSU5HX01TRyBmb3IgYW4gU0NCIHRoYXQgIgogCQkgICAgICAgImRvZXMgbm90IGhhdmUgYSB3YWl0aW5nIG1lc3NhZ2VcbiIpOwotCQlwcmludGYoIlNDU0lJRCA9ICV4LCB0YXJnZXRfbWFzayA9ICV4XG4iLCBzY2ItPmhzY2ItPnNjc2lpZCwKKwkJcHJpbnRrKCJTQ1NJSUQgPSAleCwgdGFyZ2V0X21hc2sgPSAleFxuIiwgc2NiLT5oc2NiLT5zY3NpaWQsCiAJCSAgICAgICBkZXZpbmZvLT50YXJnZXRfbWFzayk7CiAJCXBhbmljKCJTQ0IgPSAlZCwgU0NCIENvbnRyb2wgPSAleCwgTVNHX09VVCA9ICV4ICIKIAkJICAgICAgIlNDQiBmbGFncyA9ICV4Iiwgc2NiLT5oc2NiLT50YWcsIHNjYi0+aHNjYi0+Y29udHJvbCwKQEAgLTMwMTksNyArMzAxOCw3IEBACiAKIAkJaWYgKGJvb3R2ZXJib3NlKSB7CiAJCQlhaGNfcHJpbnRfZGV2aW5mbyhhaGMsIGRldmluZm8pOwotCQkJcHJpbnRmKCJFbnN1cmluZyBhc3luY1xuIik7CisJCQlwcmludGsoIkVuc3VyaW5nIGFzeW5jXG4iKTsKIAkJfQogCX0KIApAQCAtMzA2Nyw3ICszMDY2LDcgQEAKIAkJCWFoYy0+bXNnb3V0X2J1ZiArIGFoYy0+bXNnb3V0X2luZGV4LCBwZXJpb2QsIG9mZnNldCk7CiAJYWhjLT5tc2dvdXRfbGVuICs9IDU7CiAJaWYgKGJvb3R2ZXJib3NlKSB7Ci0JCXByaW50ZigiKCVzOiVjOiVkOiVkKTogU2VuZGluZyBTRFRSIHBlcmlvZCAleCwgb2Zmc2V0ICV4XG4iLAorCQlwcmludGsoIiglczolYzolZDolZCk6IFNlbmRpbmcgU0RUUiBwZXJpb2QgJXgsIG9mZnNldCAleFxuIiwKIAkJICAgICAgIGFoY19uYW1lKGFoYyksIGRldmluZm8tPmNoYW5uZWwsIGRldmluZm8tPnRhcmdldCwKIAkJICAgICAgIGRldmluZm8tPmx1biwgcGVyaW9kLCBvZmZzZXQpOwogCX0KQEAgLTMwODUsNyArMzA4NCw3IEBACiAJCQlhaGMtPm1zZ291dF9idWYgKyBhaGMtPm1zZ291dF9pbmRleCwgYnVzX3dpZHRoKTsKIAlhaGMtPm1zZ291dF9sZW4gKz0gNDsKIAlpZiAoYm9vdHZlcmJvc2UpIHsKLQkJcHJpbnRmKCIoJXM6JWM6JWQ6JWQpOiBTZW5kaW5nIFdEVFIgJXhcbiIsCisJCXByaW50aygiKCVzOiVjOiVkOiVkKTogU2VuZGluZyBXRFRSICV4XG4iLAogCQkgICAgICAgYWhjX25hbWUoYWhjKSwgZGV2aW5mby0+Y2hhbm5lbCwgZGV2aW5mby0+dGFyZ2V0LAogCQkgICAgICAgZGV2aW5mby0+bHVuLCBidXNfd2lkdGgpOwogCX0KQEAgLTMxMDcsNyArMzEwNiw3IEBACiAJCQlidXNfd2lkdGgsIHBwcl9vcHRpb25zKTsKIAlhaGMtPm1zZ291dF9sZW4gKz0gODsKIAlpZiAoYm9vdHZlcmJvc2UpIHsKLQkJcHJpbnRmKCIoJXM6JWM6JWQ6JWQpOiBTZW5kaW5nIFBQUiBidXNfd2lkdGggJXgsIHBlcmlvZCAleCwgIgorCQlwcmludGsoIiglczolYzolZDolZCk6IFNlbmRpbmcgUFBSIGJ1c193aWR0aCAleCwgcGVyaW9kICV4LCAiCiAJCSAgICAgICAib2Zmc2V0ICV4LCBwcHJfb3B0aW9ucyAleFxuIiwgYWhjX25hbWUoYWhjKSwKIAkJICAgICAgIGRldmluZm8tPmNoYW5uZWwsIGRldmluZm8tPnRhcmdldCwgZGV2aW5mby0+bHVuLAogCQkgICAgICAgYnVzX3dpZHRoLCBwZXJpb2QsIG9mZnNldCwgcHByX29wdGlvbnMpOwpAQCAtMzE2MCw3ICszMTU5LDcgQEAKIAkJICogdG8gbWF0Y2guCiAJCSAqLwogCQlhaGNfcHJpbnRfZGV2aW5mbyhhaGMsICZkZXZpbmZvKTsKLQkJcHJpbnRmKCJUYXJnZXQgZGlkIG5vdCBzZW5kIGFuIElERU5USUZZIG1lc3NhZ2UuICIKKwkJcHJpbnRrKCJUYXJnZXQgZGlkIG5vdCBzZW5kIGFuIElERU5USUZZIG1lc3NhZ2UuICIKIAkJICAgICAgICJMQVNUUEhBU0UgPSAweCV4LlxuIiwgbGFzdHBoYXNlKTsKIAkJc2NiID0gTlVMTDsKIAl9IGVsc2UgaWYgKHNjYiA9PSBOVUxMKSB7CkBAIC0zMTY5LDEzICszMTY4LDEzIEBACiAJCSAqIHRyYW5zYWN0aW9uLiAgUHJpbnQgYW4gZXJyb3IgYW5kIHJlc2V0IHRoZSBidXMuCiAJCSAqLwogCQlhaGNfcHJpbnRfZGV2aW5mbyhhaGMsICZkZXZpbmZvKTsKLQkJcHJpbnRmKCJObyBTQ0IgZm91bmQgZHVyaW5nIHByb3RvY29sIHZpb2xhdGlvblxuIik7CisJCXByaW50aygiTm8gU0NCIGZvdW5kIGR1cmluZyBwcm90b2NvbCB2aW9sYXRpb25cbiIpOwogCQlnb3RvIHByb3RvX3Zpb2xhdGlvbl9yZXNldDsKIAl9IGVsc2UgewogCQlhaGNfc2V0X3RyYW5zYWN0aW9uX3N0YXR1cyhzY2IsIENBTV9TRVFVRU5DRV9GQUlMKTsKIAkJaWYgKChzZXFfZmxhZ3MgJiBOT19DREJfU0VOVCkgIT0gMCkgewogCQkJYWhjX3ByaW50X3BhdGgoYWhjLCBzY2IpOwotCQkJcHJpbnRmKCJObyBvciBpbmNvbXBsZXRlIENEQiBzZW50IHRvIGRldmljZS5cbiIpOworCQkJcHJpbnRrKCJObyBvciBpbmNvbXBsZXRlIENEQiBzZW50IHRvIGRldmljZS5cbiIpOwogCQl9IGVsc2UgaWYgKChhaGNfaW5iKGFoYywgU0NCX0NPTlRST0wpICYgU1RBVFVTX1JDVkQpID09IDApIHsKIAkJCS8qCiAJCQkgKiBUaGUgdGFyZ2V0IG5ldmVyIGJvdGhlcmVkIHRvIHByb3ZpZGUgc3RhdHVzIHRvCkBAIC0zMTg1LDEwICszMTg0LDEwIEBACiAJCQkgKiBtZXNzYWdlLgogCQkJICovCiAJCQlhaGNfcHJpbnRfcGF0aChhaGMsIHNjYik7Ci0JCQlwcmludGYoIkNvbXBsZXRlZCBjb21tYW5kIHdpdGhvdXQgc3RhdHVzLlxuIik7CisJCQlwcmludGsoIkNvbXBsZXRlZCBjb21tYW5kIHdpdGhvdXQgc3RhdHVzLlxuIik7CiAJCX0gZWxzZSB7CiAJCQlhaGNfcHJpbnRfcGF0aChhaGMsIHNjYik7Ci0JCQlwcmludGYoIlVua25vd24gcHJvdG9jb2wgdmlvbGF0aW9uLlxuIik7CisJCQlwcmludGsoIlVua25vd24gcHJvdG9jb2wgdmlvbGF0aW9uLlxuIik7CiAJCQlhaGNfZHVtcF9jYXJkX3N0YXRlKGFoYyk7CiAJCX0KIAl9CkBAIC0zMjAyLDcgKzMyMDEsNyBAQAogCQkgKiBpdCBhd2F5IHdpdGggYSBidXMgcmVzZXQuCiAJCSAqLwogCQlmb3VuZCA9IGFoY19yZXNldF9jaGFubmVsKGFoYywgJ0EnLCBUUlVFKTsKLQkJcHJpbnRmKCIlczogSXNzdWVkIENoYW5uZWwgJWMgQnVzIFJlc2V0LiAiCisJCXByaW50aygiJXM6IElzc3VlZCBDaGFubmVsICVjIEJ1cyBSZXNldC4gIgogCQkgICAgICAgIiVkIFNDQnMgYWJvcnRlZFxuIiwgYWhjX25hbWUoYWhjKSwgJ0EnLCBmb3VuZCk7CiAJfSBlbHNlIHsKIAkJLyoKQEAgLTMyMjQsNyArMzIyMyw3IEBACiAJCQlhaGNfcHJpbnRfcGF0aChhaGMsIHNjYik7CiAJCQlzY2ItPmZsYWdzIHw9IFNDQl9BQk9SVDsKIAkJfQotCQlwcmludGYoIlByb3RvY29sIHZpb2xhdGlvbiAlcy4gIEF0dGVtcHRpbmcgdG8gYWJvcnQuXG4iLAorCQlwcmludGsoIlByb3RvY29sIHZpb2xhdGlvbiAlcy4gIEF0dGVtcHRpbmcgdG8gYWJvcnQuXG4iLAogCQkgICAgICAgYWhjX2xvb2t1cF9waGFzZV9lbnRyeShjdXJwaGFzZSktPnBoYXNlbXNnKTsKIAl9CiB9CkBAIC0zMjU3LDE0ICszMjU2LDE0IEBACiAjaWZkZWYgQUhDX0RFQlVHCiAJCWlmICgoYWhjX2RlYnVnICYgQUhDX1NIT1dfTUVTU0FHRVMpICE9IDApIHsKIAkJCWFoY19wcmludF9kZXZpbmZvKGFoYywgJmRldmluZm8pOwotCQkJcHJpbnRmKCJJTklUSUFUT1JfTVNHX09VVCIpOworCQkJcHJpbnRrKCJJTklUSUFUT1JfTVNHX09VVCIpOwogCQl9CiAjZW5kaWYKIAkJcGhhc2VtaXMgPSBidXNfcGhhc2UgIT0gUF9NRVNHT1VUOwogCQlpZiAocGhhc2VtaXMpIHsKICNpZmRlZiBBSENfREVCVUcKIAkJCWlmICgoYWhjX2RlYnVnICYgQUhDX1NIT1dfTUVTU0FHRVMpICE9IDApIHsKLQkJCQlwcmludGYoIiBQSEFTRU1JUyAlc1xuIiwKKwkJCQlwcmludGsoIiBQSEFTRU1JUyAlc1xuIiwKIAkJCQkgICAgICAgYWhjX2xvb2t1cF9waGFzZV9lbnRyeShidXNfcGhhc2UpCiAJCQkJCQkJICAgICAtPnBoYXNlbXNnKTsKIAkJCX0KQEAgLTMyOTEsNyArMzI5MCw3IEBACiAJCQlhaGNfb3V0YihhaGMsIENMUlNJTlQxLCBDTFJSRVFJTklUKTsKICNpZmRlZiBBSENfREVCVUcKIAkJCWlmICgoYWhjX2RlYnVnICYgQUhDX1NIT1dfTUVTU0FHRVMpICE9IDApCi0JCQkJcHJpbnRmKCIgYnl0ZSAweCV4XG4iLCBhaGMtPnNlbmRfbXNnX3BlcnJvcik7CisJCQkJcHJpbnRrKCIgYnl0ZSAweCV4XG4iLCBhaGMtPnNlbmRfbXNnX3BlcnJvcik7CiAjZW5kaWYKIAkJCWFoY19vdXRiKGFoYywgU0NTSURBVEwsIE1TR19QQVJJVFlfRVJST1IpOwogCQkJYnJlYWs7CkBAIC0zMzIxLDcgKzMzMjAsNyBAQAogCQlhaGNfb3V0YihhaGMsIENMUlNJTlQxLCBDTFJSRVFJTklUKTsKICNpZmRlZiBBSENfREVCVUcKIAkJaWYgKChhaGNfZGVidWcgJiBBSENfU0hPV19NRVNTQUdFUykgIT0gMCkKLQkJCXByaW50ZigiIGJ5dGUgMHgleFxuIiwKKwkJCXByaW50aygiIGJ5dGUgMHgleFxuIiwKIAkJCSAgICAgICBhaGMtPm1zZ291dF9idWZbYWhjLT5tc2dvdXRfaW5kZXhdKTsKICNlbmRpZgogCQlhaGNfb3V0YihhaGMsIFNDU0lEQVRMLCBhaGMtPm1zZ291dF9idWZbYWhjLT5tc2dvdXRfaW5kZXgrK10pOwpAQCAtMzMzNSwxNCArMzMzNCwxNCBAQAogI2lmZGVmIEFIQ19ERUJVRwogCQlpZiAoKGFoY19kZWJ1ZyAmIEFIQ19TSE9XX01FU1NBR0VTKSAhPSAwKSB7CiAJCQlhaGNfcHJpbnRfZGV2aW5mbyhhaGMsICZkZXZpbmZvKTsKLQkJCXByaW50ZigiSU5JVElBVE9SX01TR19JTiIpOworCQkJcHJpbnRrKCJJTklUSUFUT1JfTVNHX0lOIik7CiAJCX0KICNlbmRpZgogCQlwaGFzZW1pcyA9IGJ1c19waGFzZSAhPSBQX01FU0dJTjsKIAkJaWYgKHBoYXNlbWlzKSB7CiAjaWZkZWYgQUhDX0RFQlVHCiAJCQlpZiAoKGFoY19kZWJ1ZyAmIEFIQ19TSE9XX01FU1NBR0VTKSAhPSAwKSB7Ci0JCQkJcHJpbnRmKCIgUEhBU0VNSVMgJXNcbiIsCisJCQkJcHJpbnRrKCIgUEhBU0VNSVMgJXNcbiIsCiAJCQkJICAgICAgIGFoY19sb29rdXBfcGhhc2VfZW50cnkoYnVzX3BoYXNlKQogCQkJCQkJCSAgICAgLT5waGFzZW1zZyk7CiAJCQl9CkBAIC0zMzYzLDcgKzMzNjIsNyBAQAogCQlhaGMtPm1zZ2luX2J1ZlthaGMtPm1zZ2luX2luZGV4XSA9IGFoY19pbmIoYWhjLCBTQ1NJQlVTTCk7CiAjaWZkZWYgQUhDX0RFQlVHCiAJCWlmICgoYWhjX2RlYnVnICYgQUhDX1NIT1dfTUVTU0FHRVMpICE9IDApCi0JCQlwcmludGYoIiBieXRlIDB4JXhcbiIsCisJCQlwcmludGsoIiBieXRlIDB4JXhcbiIsCiAJCQkgICAgICAgYWhjLT5tc2dpbl9idWZbYWhjLT5tc2dpbl9pbmRleF0pOwogI2VuZGlmCiAKQEAgLTMzODUsNyArMzM4NCw3IEBACiAjaWZkZWYgQUhDX0RFQlVHCiAJCQkJaWYgKChhaGNfZGVidWcgJiBBSENfU0hPV19NRVNTQUdFUykgIT0gMCkgewogCQkJCQlhaGNfcHJpbnRfZGV2aW5mbyhhaGMsICZkZXZpbmZvKTsKLQkJCQkJcHJpbnRmKCJBc3NlcnRpbmcgQVROIGZvciByZXNwb25zZVxuIik7CisJCQkJCXByaW50aygiQXNzZXJ0aW5nIEFUTiBmb3IgcmVzcG9uc2VcbiIpOwogCQkJCX0KICNlbmRpZgogCQkJCWFoY19hc3NlcnRfYXRuKGFoYyk7CkBAIC0zNjY2LDcgKzM2NjUsNyBAQAogCQkJCQkgICAgdGFyZ19zY3NpcmF0ZSAmIFdJREVYRkVSLAogCQkJCQkgICAgZGV2aW5mby0+cm9sZSk7CiAJCQlpZiAoYm9vdHZlcmJvc2UpIHsKLQkJCQlwcmludGYoIiglczolYzolZDolZCk6IFJlY2VpdmVkICIKKwkJCQlwcmludGsoIiglczolYzolZDolZCk6IFJlY2VpdmVkICIKIAkJCQkgICAgICAgIlNEVFIgcGVyaW9kICV4LCBvZmZzZXQgJXhcblx0IgogCQkJCSAgICAgICAiRmlsdGVyZWQgdG8gcGVyaW9kICV4LCBvZmZzZXQgJXhcbiIsCiAJCQkJICAgICAgIGFoY19uYW1lKGFoYyksIGRldmluZm8tPmNoYW5uZWwsCkBAIC0zNjk3LDcgKzM2OTYsNyBAQAogCQkJCSAqLwogCQkJCWlmIChib290dmVyYm9zZQogCQkJCSAmJiBkZXZpbmZvLT5yb2xlID09IFJPTEVfSU5JVElBVE9SKSB7Ci0JCQkJCXByaW50ZigiKCVzOiVjOiVkOiVkKTogVGFyZ2V0ICIKKwkJCQkJcHJpbnRrKCIoJXM6JWM6JWQ6JWQpOiBUYXJnZXQgIgogCQkJCQkgICAgICAgIkluaXRpYXRlZCBTRFRSXG4iLAogCQkJCQkgICAgICAgYWhjX25hbWUoYWhjKSwgZGV2aW5mby0+Y2hhbm5lbCwKIAkJCQkJICAgICAgIGRldmluZm8tPnRhcmdldCwgZGV2aW5mby0+bHVuKTsKQEAgLTM3MzksNyArMzczOCw3IEBACiAJCQlhaGNfdmFsaWRhdGVfd2lkdGgoYWhjLCB0aW5mbywgJmJ1c193aWR0aCwKIAkJCQkJICAgZGV2aW5mby0+cm9sZSk7CiAJCQlpZiAoYm9vdHZlcmJvc2UpIHsKLQkJCQlwcmludGYoIiglczolYzolZDolZCk6IFJlY2VpdmVkIFdEVFIgIgorCQkJCXByaW50aygiKCVzOiVjOiVkOiVkKTogUmVjZWl2ZWQgV0RUUiAiCiAJCQkJICAgICAgICIleCBmaWx0ZXJlZCB0byAleFxuIiwKIAkJCQkgICAgICAgYWhjX25hbWUoYWhjKSwgZGV2aW5mby0+Y2hhbm5lbCwKIAkJCQkgICAgICAgZGV2aW5mby0+dGFyZ2V0LCBkZXZpbmZvLT5sdW4sCkBAIC0zNzU1LDcgKzM3NTQsNyBAQAogCQkJCSAqLwogCQkJCWlmIChzYXZlZF93aWR0aCA+IGJ1c193aWR0aCkgewogCQkJCQlyZWplY3QgPSBUUlVFOwotCQkJCQlwcmludGYoIiglczolYzolZDolZCk6IHJlcXVlc3RlZCAlZEJpdCAiCisJCQkJCXByaW50aygiKCVzOiVjOiVkOiVkKTogcmVxdWVzdGVkICVkQml0ICIKIAkJCQkJICAgICAgICJ0cmFuc2ZlcnMuICBSZWplY3RpbmcuLi5cbiIsCiAJCQkJCSAgICAgICBhaGNfbmFtZShhaGMpLCBkZXZpbmZvLT5jaGFubmVsLAogCQkJCQkgICAgICAgZGV2aW5mby0+dGFyZ2V0LCBkZXZpbmZvLT5sdW4sCkBAIC0zNzY4LDcgKzM3NjcsNyBAQAogCQkJCSAqLwogCQkJCWlmIChib290dmVyYm9zZQogCQkJCSAmJiBkZXZpbmZvLT5yb2xlID09IFJPTEVfSU5JVElBVE9SKSB7Ci0JCQkJCXByaW50ZigiKCVzOiVjOiVkOiVkKTogVGFyZ2V0ICIKKwkJCQkJcHJpbnRrKCIoJXM6JWM6JWQ6JWQpOiBUYXJnZXQgIgogCQkJCQkgICAgICAgIkluaXRpYXRlZCBXRFRSXG4iLAogCQkJCQkgICAgICAgYWhjX25hbWUoYWhjKSwgZGV2aW5mby0+Y2hhbm5lbCwKIAkJCQkJICAgICAgIGRldmluZm8tPnRhcmdldCwgZGV2aW5mby0+bHVuKTsKQEAgLTM4ODYsMTIgKzM4ODUsMTIgQEAKIAkJCQl9CiAJCQl9IGVsc2UgewogCQkJCWlmIChkZXZpbmZvLT5yb2xlICE9IFJPTEVfVEFSR0VUKQotCQkJCQlwcmludGYoIiglczolYzolZDolZCk6IFRhcmdldCAiCisJCQkJCXByaW50aygiKCVzOiVjOiVkOiVkKTogVGFyZ2V0ICIKIAkJCQkJICAgICAgICJJbml0aWF0ZWQgUFBSXG4iLAogCQkJCQkgICAgICAgYWhjX25hbWUoYWhjKSwgZGV2aW5mby0+Y2hhbm5lbCwKIAkJCQkJICAgICAgIGRldmluZm8tPnRhcmdldCwgZGV2aW5mby0+bHVuKTsKIAkJCQllbHNlCi0JCQkJCXByaW50ZigiKCVzOiVjOiVkOiVkKTogSW5pdGlhdG9yICIKKwkJCQkJcHJpbnRrKCIoJXM6JWM6JWQ6JWQpOiBJbml0aWF0b3IgIgogCQkJCQkgICAgICAgIkluaXRpYXRlZCBQUFJcbiIsCiAJCQkJCSAgICAgICBhaGNfbmFtZShhaGMpLCBkZXZpbmZvLT5jaGFubmVsLAogCQkJCQkgICAgICAgZGV2aW5mby0+dGFyZ2V0LCBkZXZpbmZvLT5sdW4pOwpAQCAtMzkwMyw3ICszOTAyLDcgQEAKIAkJCQlyZXNwb25zZSA9IFRSVUU7CiAJCQl9CiAJCQlpZiAoYm9vdHZlcmJvc2UpIHsKLQkJCQlwcmludGYoIiglczolYzolZDolZCk6IFJlY2VpdmVkIFBQUiB3aWR0aCAleCwgIgorCQkJCXByaW50aygiKCVzOiVjOiVkOiVkKTogUmVjZWl2ZWQgUFBSIHdpZHRoICV4LCAiCiAJCQkJICAgICAgICJwZXJpb2QgJXgsIG9mZnNldCAleCxvcHRpb25zICV4XG4iCiAJCQkJICAgICAgICJcdEZpbHRlcmVkIHRvIHdpZHRoICV4LCBwZXJpb2QgJXgsICIKIAkJCQkgICAgICAgIm9mZnNldCAleCwgb3B0aW9ucyAleFxuIiwKQEAgLTQwMzMsNyArNDAzMiw3IEBACiAJCSAqIEF0dGVtcHQgdG8gbmVnb3RpYXRlIFNQSS0yIHN0eWxlLgogCQkgKi8KIAkJaWYgKGJvb3R2ZXJib3NlKSB7Ci0JCQlwcmludGYoIiglczolYzolZDolZCk6IFBQUiBSZWplY3RlZC4gIgorCQkJcHJpbnRrKCIoJXM6JWM6JWQ6JWQpOiBQUFIgUmVqZWN0ZWQuICIKIAkJCSAgICAgICAiVHJ5aW5nIFdEVFIvU0RUUlxuIiwKIAkJCSAgICAgICBhaGNfbmFtZShhaGMpLCBkZXZpbmZvLT5jaGFubmVsLAogCQkJICAgICAgIGRldmluZm8tPnRhcmdldCwgZGV2aW5mby0+bHVuKTsKQEAgLTQwNDksNyArNDA0OCw3IEBACiAJfSBlbHNlIGlmIChhaGNfc2VudF9tc2coYWhjLCBBSENNU0dfRVhULCBNU0dfRVhUX1dEVFIsIC8qZnVsbCovRkFMU0UpKSB7CiAKIAkJLyogbm90ZSA4Yml0IHhmZXJzICovCi0JCXByaW50ZigiKCVzOiVjOiVkOiVkKTogcmVmdXNlcyBXSURFIG5lZ290aWF0aW9uLiAgVXNpbmcgIgorCQlwcmludGsoIiglczolYzolZDolZCk6IHJlZnVzZXMgV0lERSBuZWdvdGlhdGlvbi4gIFVzaW5nICIKIAkJICAgICAgICI4Yml0IHRyYW5zZmVyc1xuIiwgYWhjX25hbWUoYWhjKSwKIAkJICAgICAgIGRldmluZm8tPmNoYW5uZWwsIGRldmluZm8tPnRhcmdldCwgZGV2aW5mby0+bHVuKTsKIAkJYWhjX3NldF93aWR0aChhaGMsIGRldmluZm8sIE1TR19FWFRfV0RUUl9CVVNfOF9CSVQsCkBAIC00MDc3LDcgKzQwNzYsNyBAQAogCQkJCSAvKm9mZnNldCovMCwgLypwcHJfb3B0aW9ucyovMCwKIAkJCQkgQUhDX1RSQU5TX0FDVElWRXxBSENfVFJBTlNfR09BTCwKIAkJCQkgLypwYXVzZWQqL1RSVUUpOwotCQlwcmludGYoIiglczolYzolZDolZCk6IHJlZnVzZXMgc3luY2hyb25vdXMgbmVnb3RpYXRpb24uICIKKwkJcHJpbnRrKCIoJXM6JWM6JWQ6JWQpOiByZWZ1c2VzIHN5bmNocm9ub3VzIG5lZ290aWF0aW9uLiAiCiAJCSAgICAgICAiVXNpbmcgYXN5bmNocm9ub3VzIHRyYW5zZmVyc1xuIiwKIAkJICAgICAgIGFoY19uYW1lKGFoYyksIGRldmluZm8tPmNoYW5uZWwsCiAJCSAgICAgICBkZXZpbmZvLT50YXJnZXQsIGRldmluZm8tPmx1bik7CkBAIC00MDg4LDEzICs0MDg3LDEzIEBACiAJCXRhZ190eXBlID0gKHNjYi0+aHNjYi0+Y29udHJvbCAmIE1TR19TSU1QTEVfVEFTSyk7CiAKIAkJaWYgKHRhZ190eXBlID09IE1TR19TSU1QTEVfVEFTSykgewotCQkJcHJpbnRmKCIoJXM6JWM6JWQ6JWQpOiByZWZ1c2VzIHRhZ2dlZCBjb21tYW5kcy4gICIKKwkJCXByaW50aygiKCVzOiVjOiVkOiVkKTogcmVmdXNlcyB0YWdnZWQgY29tbWFuZHMuICAiCiAJCQkgICAgICAgIlBlcmZvcm1pbmcgbm9uLXRhZ2dlZCBJL09cbiIsIGFoY19uYW1lKGFoYyksCiAJCQkgICAgICAgZGV2aW5mby0+Y2hhbm5lbCwgZGV2aW5mby0+dGFyZ2V0LCBkZXZpbmZvLT5sdW4pOwogCQkJYWhjX3NldF90YWdzKGFoYywgc2NiLT5pb19jdHgsIGRldmluZm8sIEFIQ19RVUVVRV9OT05FKTsKIAkJCW1hc2sgPSB+MHgyMzsKIAkJfSBlbHNlIHsKLQkJCXByaW50ZigiKCVzOiVjOiVkOiVkKTogcmVmdXNlcyAlcyB0YWdnZWQgY29tbWFuZHMuICAiCisJCQlwcmludGsoIiglczolYzolZDolZCk6IHJlZnVzZXMgJXMgdGFnZ2VkIGNvbW1hbmRzLiAgIgogCQkJICAgICAgICJQZXJmb3JtaW5nIHNpbXBsZSBxdWV1ZSB0YWdnZWQgSS9PIG9ubHlcbiIsCiAJCQkgICAgICAgYWhjX25hbWUoYWhjKSwgZGV2aW5mby0+Y2hhbm5lbCwgZGV2aW5mby0+dGFyZ2V0LAogCQkJICAgICAgIGRldmluZm8tPmx1biwgdGFnX3R5cGUgPT0gTVNHX09SREVSRURfVEFTSwpAQCAtNDE0NCw3ICs0MTQzLDcgQEAKIAkJLyoKIAkJICogT3RoZXJ3aXNlLCB3ZSBpZ25vcmUgaXQuCiAJCSAqLwotCQlwcmludGYoIiVzOiVjOiVkOiBNZXNzYWdlIHJlamVjdCBmb3IgJXggLS0gaWdub3JlZFxuIiwKKwkJcHJpbnRrKCIlczolYzolZDogTWVzc2FnZSByZWplY3QgZm9yICV4IC0tIGlnbm9yZWRcbiIsCiAJCSAgICAgICBhaGNfbmFtZShhaGMpLCBkZXZpbmZvLT5jaGFubmVsLCBkZXZpbmZvLT50YXJnZXQsCiAJCSAgICAgICBsYXN0X21zZyk7CiAJfQpAQCAtNDM2OSw3ICs0MzY4LDcgQEAKIAogCWlmIChtZXNzYWdlICE9IE5VTEwKIAkgJiYgKHZlcmJvc2VfbGV2ZWwgPD0gYm9vdHZlcmJvc2UpKQotCQlwcmludGYoIiVzOiAlcyBvbiAlYzolZC4gJWQgU0NCcyBhYm9ydGVkXG4iLCBhaGNfbmFtZShhaGMpLAorCQlwcmludGsoIiVzOiAlcyBvbiAlYzolZC4gJWQgU0NCcyBhYm9ydGVkXG4iLCBhaGNfbmFtZShhaGMpLAogCQkgICAgICAgbWVzc2FnZSwgZGV2aW5mby0+Y2hhbm5lbCwgZGV2aW5mby0+dGFyZ2V0LCBmb3VuZCk7CiB9CiAKQEAgLTQ0MDgsMjMgKzQ0MDcsMjIgQEAKIAlpbnQJaTsKIAogI2lmbmRlZglfX0ZyZWVCU0RfXwotCWFoYyA9IG1hbGxvYyhzaXplb2YoKmFoYyksIE1fREVWQlVGLCBNX05PV0FJVCk7CisJYWhjID0ga21hbGxvYyhzaXplb2YoKmFoYyksIEdGUF9BVE9NSUMpOwogCWlmICghYWhjKSB7Ci0JCXByaW50ZigiYWljN3h4eDogY2Fubm90IG1hbGxvYyBzb2Z0YyFcbiIpOwotCQlmcmVlKG5hbWUsIE1fREVWQlVGKTsKKwkJcHJpbnRrKCJhaWM3eHh4OiBjYW5ub3QgbWFsbG9jIHNvZnRjIVxuIik7CisJCWtmcmVlKG5hbWUpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAjZWxzZQogCWFoYyA9IGRldmljZV9nZXRfc29mdGMoKGRldmljZV90KXBsYXRmb3JtX2FyZyk7CiAjZW5kaWYKIAltZW1zZXQoYWhjLCAwLCBzaXplb2YoKmFoYykpOwotCWFoYy0+c2VlcF9jb25maWcgPSBtYWxsb2Moc2l6ZW9mKCphaGMtPnNlZXBfY29uZmlnKSwKLQkJCQkgIE1fREVWQlVGLCBNX05PV0FJVCk7CisJYWhjLT5zZWVwX2NvbmZpZyA9IGttYWxsb2Moc2l6ZW9mKCphaGMtPnNlZXBfY29uZmlnKSwgR0ZQX0FUT01JQyk7CiAJaWYgKGFoYy0+c2VlcF9jb25maWcgPT0gTlVMTCkgewogI2lmbmRlZglfX0ZyZWVCU0RfXwotCQlmcmVlKGFoYywgTV9ERVZCVUYpOworCQlrZnJlZShhaGMpOwogI2VuZGlmCi0JCWZyZWUobmFtZSwgTV9ERVZCVUYpOworCQlrZnJlZShuYW1lKTsKIAkJcmV0dXJuIChOVUxMKTsKIAl9CiAJTElTVF9JTklUKCZhaGMtPnBlbmRpbmdfc2Nicyk7CkBAIC00NDY2LDggKzQ0NjQsNyBAQAogCWFoYy0+cGF1c2UgPSBhaGMtPnVucGF1c2UgfCBQQVVTRTsgCiAJLyogWFhYIFRoZSBzaGFyZWQgc2NiIGRhdGEgc3R1ZmYgc2hvdWxkIGJlIGRlcHJlY2F0ZWQgKi8KIAlpZiAoYWhjLT5zY2JfZGF0YSA9PSBOVUxMKSB7Ci0JCWFoYy0+c2NiX2RhdGEgPSBtYWxsb2Moc2l6ZW9mKCphaGMtPnNjYl9kYXRhKSwKLQkJCQkgICAgICAgTV9ERVZCVUYsIE1fTk9XQUlUKTsKKwkJYWhjLT5zY2JfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKCphaGMtPnNjYl9kYXRhKSwgR0ZQX0FUT01JQyk7CiAJCWlmIChhaGMtPnNjYl9kYXRhID09IE5VTEwpCiAJCQlyZXR1cm4gKEVOT01FTSk7CiAJCW1lbXNldChhaGMtPnNjYl9kYXRhLCAwLCBzaXplb2YoKmFoYy0+c2NiX2RhdGEpKTsKQEAgLTQ0ODYsNyArNDQ4Myw3IEBACiBhaGNfc2V0X25hbWUoc3RydWN0IGFoY19zb2Z0YyAqYWhjLCBjaGFyICpuYW1lKQogewogCWlmIChhaGMtPm5hbWUgIT0gTlVMTCkKLQkJZnJlZShhaGMtPm5hbWUsIE1fREVWQlVGKTsKKwkJa2ZyZWUoYWhjLT5uYW1lKTsKIAlhaGMtPm5hbWUgPSBuYW1lOwogfQogCkBAIC00NTQwLDI1ICs0NTM3LDI1IEBACiAJCQkJbHN0YXRlID0gdHN0YXRlLT5lbmFibGVkX2x1bnNbal07CiAJCQkJaWYgKGxzdGF0ZSAhPSBOVUxMKSB7CiAJCQkJCXhwdF9mcmVlX3BhdGgobHN0YXRlLT5wYXRoKTsKLQkJCQkJZnJlZShsc3RhdGUsIE1fREVWQlVGKTsKKwkJCQkJa2ZyZWUobHN0YXRlKTsKIAkJCQl9CiAJCQl9CiAjZW5kaWYKLQkJCWZyZWUodHN0YXRlLCBNX0RFVkJVRik7CisJCQlrZnJlZSh0c3RhdGUpOwogCQl9CiAJfQogI2lmZGVmIEFIQ19UQVJHRVRfTU9ERQogCWlmIChhaGMtPmJsYWNrX2hvbGUgIT0gTlVMTCkgewogCQl4cHRfZnJlZV9wYXRoKGFoYy0+YmxhY2tfaG9sZS0+cGF0aCk7Ci0JCWZyZWUoYWhjLT5ibGFja19ob2xlLCBNX0RFVkJVRik7CisJCWtmcmVlKGFoYy0+YmxhY2tfaG9sZSk7CiAJfQogI2VuZGlmCiAJaWYgKGFoYy0+bmFtZSAhPSBOVUxMKQotCQlmcmVlKGFoYy0+bmFtZSwgTV9ERVZCVUYpOworCQlrZnJlZShhaGMtPm5hbWUpOwogCWlmIChhaGMtPnNlZXBfY29uZmlnICE9IE5VTEwpCi0JCWZyZWUoYWhjLT5zZWVwX2NvbmZpZywgTV9ERVZCVUYpOworCQlrZnJlZShhaGMtPnNlZXBfY29uZmlnKTsKICNpZm5kZWYgX19GcmVlQlNEX18KLQlmcmVlKGFoYywgTV9ERVZCVUYpOworCWtmcmVlKGFoYyk7CiAjZW5kaWYKIAlyZXR1cm47CiB9CkBAIC00NjMzLDcgKzQ2MzAsNyBAQAogCX0gd2hpbGUgKC0td2FpdCAmJiAhKGFoY19pbmIoYWhjLCBIQ05UUkwpICYgQ0hJUFJTVEFDSykpOwogCiAJaWYgKHdhaXQgPT0gMCkgewotCQlwcmludGYoIiVzOiBXQVJOSU5HIC0gRmFpbGVkIGNoaXAgcmVzZXQhICAiCisJCXByaW50aygiJXM6IFdBUk5JTkcgLSBGYWlsZWQgY2hpcCByZXNldCEgICIKIAkJICAgICAgICJUcnlpbmcgdG8gaW5pdGlhbGl6ZSBhbnl3YXkuXG4iLCBhaGNfbmFtZShhaGMpKTsKIAl9CiAJYWhjX291dGIoYWhjLCBIQ05UUkwsIGFoYy0+cGF1c2UpOwpAQCAtNDY1Niw3ICs0NjUzLDcgQEAKIAkJYWhjLT5mZWF0dXJlcyB8PSBBSENfVFdJTjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRmKCIgVW5zdXBwb3J0ZWQgYWRhcHRlciB0eXBlLiAgSWdub3JpbmdcbiIpOworCQlwcmludGsoIiBVbnN1cHBvcnRlZCBhZGFwdGVyIHR5cGUuICBJZ25vcmluZ1xuIik7CiAJCXJldHVybigtMSk7CiAJfQogCkBAIC00NzgzLDkgKzQ3ODAsNyBAQAogCVNMSVNUX0lOSVQoJnNjYl9kYXRhLT5zZ19tYXBzKTsKIAogCS8qIEFsbG9jYXRlIFNDQiByZXNvdXJjZXMgKi8KLQlzY2JfZGF0YS0+c2NiYXJyYXkgPQotCSAgICAoc3RydWN0IHNjYiAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IHNjYikgKiBBSENfU0NCX01BWF9BTExPQywKLQkJCQkgTV9ERVZCVUYsIE1fTk9XQUlUKTsKKwlzY2JfZGF0YS0+c2NiYXJyYXkgPSAoc3RydWN0IHNjYiAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzY2IpICogQUhDX1NDQl9NQVhfQUxMT0MsIEdGUF9BVE9NSUMpOwogCWlmIChzY2JfZGF0YS0+c2NiYXJyYXkgPT0gTlVMTCkKIAkJcmV0dXJuIChFTk9NRU0pOwogCW1lbXNldChzY2JfZGF0YS0+c2NiYXJyYXksIDAsIHNpemVvZihzdHJ1Y3Qgc2NiKSAqIEFIQ19TQ0JfTUFYX0FMTE9DKTsKQEAgLTQ3OTQsNyArNDc4OSw3IEBACiAKIAlzY2JfZGF0YS0+bWF4aHNjYnMgPSBhaGNfcHJvYmVfc2NicyhhaGMpOwogCWlmIChhaGMtPnNjYl9kYXRhLT5tYXhoc2NicyA9PSAwKSB7Ci0JCXByaW50ZigiJXM6IE5vIFNDQiBzcGFjZSBmb3VuZFxuIiwgYWhjX25hbWUoYWhjKSk7CisJCXByaW50aygiJXM6IE5vIFNDQiBzcGFjZSBmb3VuZFxuIiwgYWhjX25hbWUoYWhjKSk7CiAJCXJldHVybiAoRU5YSU8pOwogCX0KIApAQCAtNDg5Miw3ICs0ODg3LDcgQEAKIAlhaGNfYWxsb2Nfc2NicyhhaGMpOwogCiAJaWYgKHNjYl9kYXRhLT5udW1zY2JzID09IDApIHsKLQkJcHJpbnRmKCIlczogYWhjX2luaXRfc2NiZGF0YSAtICIKKwkJcHJpbnRrKCIlczogYWhjX2luaXRfc2NiZGF0YSAtICIKIAkJICAgICAgICJVbmFibGUgdG8gYWxsb2NhdGUgaW5pdGlhbCBzY2JzXG4iLAogCQkgICAgICAgYWhjX25hbWUoYWhjKSk7CiAJCWdvdG8gZXJyb3JfZXhpdDsKQEAgLTQ5MzUsNyArNDkzMCw3IEBACiAJCQlhaGNfZG1hbWVtX2ZyZWUoYWhjLCBzY2JfZGF0YS0+c2dfZG1hdCwKIAkJCQkJc2dfbWFwLT5zZ192YWRkciwKIAkJCQkJc2dfbWFwLT5zZ19kbWFtYXApOwotCQkJZnJlZShzZ19tYXAsIE1fREVWQlVGKTsKKwkJCWtmcmVlKHNnX21hcCk7CiAJCX0KIAkJYWhjX2RtYV90YWdfZGVzdHJveShhaGMsIHNjYl9kYXRhLT5zZ19kbWF0KTsKIAl9CkBAIC00OTY0LDcgKzQ5NTksNyBAQAogCQlicmVhazsKIAl9CiAJaWYgKHNjYl9kYXRhLT5zY2JhcnJheSAhPSBOVUxMKQotCQlmcmVlKHNjYl9kYXRhLT5zY2JhcnJheSwgTV9ERVZCVUYpOworCQlrZnJlZShzY2JfZGF0YS0+c2NiYXJyYXkpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNDk4NSw3ICs0OTgwLDcgQEAKIAogCW5leHRfc2NiID0gJnNjYl9kYXRhLT5zY2JhcnJheVtzY2JfZGF0YS0+bnVtc2Nic107CiAKLQlzZ19tYXAgPSBtYWxsb2Moc2l6ZW9mKCpzZ19tYXApLCBNX0RFVkJVRiwgTV9OT1dBSVQpOworCXNnX21hcCA9IGttYWxsb2Moc2l6ZW9mKCpzZ19tYXApLCBHRlBfQVRPTUlDKTsKIAogCWlmIChzZ19tYXAgPT0gTlVMTCkKIAkJcmV0dXJuOwpAQCAtNDk5NCw3ICs0OTg5LDcgQEAKIAlpZiAoYWhjX2RtYW1lbV9hbGxvYyhhaGMsIHNjYl9kYXRhLT5zZ19kbWF0LAogCQkJICAgICAodm9pZCAqKikmc2dfbWFwLT5zZ192YWRkciwKIAkJCSAgICAgQlVTX0RNQV9OT1dBSVQsICZzZ19tYXAtPnNnX2RtYW1hcCkgIT0gMCkgewotCQlmcmVlKHNnX21hcCwgTV9ERVZCVUYpOworCQlrZnJlZShzZ19tYXApOwogCQlyZXR1cm47CiAJfQogCkBAIC01MDE0LDggKzUwMDksNyBAQAogI2lmbmRlZiBfX2xpbnV4X18KIAkJaW50IGVycm9yOwogI2VuZGlmCi0JCXBkYXRhID0gKHN0cnVjdCBzY2JfcGxhdGZvcm1fZGF0YSAqKW1hbGxvYyhzaXplb2YoKnBkYXRhKSwKLQkJCQkJCQkgICBNX0RFVkJVRiwgTV9OT1dBSVQpOworCQlwZGF0YSA9IGttYWxsb2Moc2l6ZW9mKCpwZGF0YSksIEdGUF9BVE9NSUMpOwogCQlpZiAocGRhdGEgPT0gTlVMTCkKIAkJCWJyZWFrOwogCQluZXh0X3NjYi0+cGxhdGZvcm1fZGF0YSA9IHBkYXRhOwpAQCAtNTI0NCw3ICs1MjM4LDcgQEAKIAkgKiBpbiAiZmFzdCIgbW9kZS4KIAkgKi8KIAlpZiAoYm9vdHZlcmJvc2UpCi0JCXByaW50ZigiJXM6IERvd25sb2FkaW5nIFNlcXVlbmNlciBQcm9ncmFtLi4uIiwKKwkJcHJpbnRrKCIlczogRG93bmxvYWRpbmcgU2VxdWVuY2VyIFByb2dyYW0uLi4iLAogCQkgICAgICAgYWhjX25hbWUoYWhjKSk7CiAKIAllcnJvciA9IGFoY19sb2Fkc2VxKGFoYyk7CkBAIC01MjkwLDIyICs1Mjg0LDIyIEBACiAjZW5kaWYKIAogI2lmZGVmIEFIQ19QUklOVF9TUkFNCi0JcHJpbnRmKCJTY3JhdGNoIFJhbToiKTsKKwlwcmludGsoIlNjcmF0Y2ggUmFtOiIpOwogCWZvciAoaSA9IDB4MjA7IGkgPCAweDVmOyBpKyspIHsKIAkJaWYgKCgoaSAlIDgpID09IDApICYmIChpICE9IDApKSB7Ci0JCQlwcmludGYgKCJcbiAgICAgICAgICAgICAgIik7CisJCQlwcmludGsgKCJcbiAgICAgICAgICAgICAgIik7CiAJCX0KLQkJcHJpbnRmICgiIDB4JXgiLCBhaGNfaW5iKGFoYywgaSkpOworCQlwcmludGsgKCIgMHgleCIsIGFoY19pbmIoYWhjLCBpKSk7CiAJfQogCWlmICgoYWhjLT5mZWF0dXJlcyAmIEFIQ19NT1JFX1NSQU0pICE9IDApIHsKIAkJZm9yIChpID0gMHg3MDsgaSA8IDB4N2Y7IGkrKykgewogCQkJaWYgKCgoaSAlIDgpID09IDApICYmIChpICE9IDApKSB7Ci0JCQkJcHJpbnRmICgiXG4gICAgICAgICAgICAgICIpOworCQkJCXByaW50ayAoIlxuICAgICAgICAgICAgICAiKTsKIAkJCX0KLQkJCXByaW50ZiAoIiAweCV4IiwgYWhjX2luYihhaGMsIGkpKTsKKwkJCXByaW50ayAoIiAweCV4IiwgYWhjX2luYihhaGMsIGkpKTsKIAkJfQogCX0KLQlwcmludGYgKCJcbiIpOworCXByaW50ayAoIlxuIik7CiAJLyoKIAkgKiBSZWFkaW5nIHVuaW5pdGlhbGl6ZWQgc2NyYXRjaCByYW0gbWF5CiAJICogZ2VuZXJhdGUgcGFyaXR5IGVycm9ycy4KQEAgLTU0MTksMTQgKzU0MTMsMTQgQEAKIAkgKiBkYXRhIGZvciBhbnkgdGFyZ2V0IG1vZGUgaW5pdGlhdG9yLgogCSAqLwogCWlmIChhaGNfYWxsb2NfdHN0YXRlKGFoYywgYWhjLT5vdXJfaWQsICdBJykgPT0gTlVMTCkgewotCQlwcmludGYoIiVzOiB1bmFibGUgdG8gYWxsb2NhdGUgYWhjX3Rtb2RlX3RzdGF0ZS4gICIKKwkJcHJpbnRrKCIlczogdW5hYmxlIHRvIGFsbG9jYXRlIGFoY190bW9kZV90c3RhdGUuICAiCiAJCSAgICAgICAiRmFpbGluZyBhdHRhY2hcbiIsIGFoY19uYW1lKGFoYykpOwogCQlyZXR1cm4gKEVOT01FTSk7CiAJfQogCiAJaWYgKChhaGMtPmZlYXR1cmVzICYgQUhDX1RXSU4pICE9IDApIHsKIAkJaWYgKGFoY19hbGxvY190c3RhdGUoYWhjLCBhaGMtPm91cl9pZF9iLCAnQicpID09IE5VTEwpIHsKLQkJCXByaW50ZigiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSBhaGNfdG1vZGVfdHN0YXRlLiAgIgorCQkJcHJpbnRrKCIlczogdW5hYmxlIHRvIGFsbG9jYXRlIGFoY190bW9kZV90c3RhdGUuICAiCiAJCQkgICAgICAgIkZhaWxpbmcgYXR0YWNoXG4iLCBhaGNfbmFtZShhaGMpKTsKIAkJCXJldHVybiAoRU5PTUVNKTsKIAkJfQpAQCAtNTQ0MCw3ICs1NDM0LDcgQEAKIAogI2lmZGVmIEFIQ19ERUJVRwogCWlmIChhaGNfZGVidWcgJiBBSENfU0hPV19NSVNDKSB7Ci0JCXByaW50ZigiJXM6IGhhcmR3YXJlIHNjYiAldSBieXRlczsga2VybmVsIHNjYiAldSBieXRlczsgIgorCQlwcmludGsoIiVzOiBoYXJkd2FyZSBzY2IgJXUgYnl0ZXM7IGtlcm5lbCBzY2IgJXUgYnl0ZXM7ICIKIAkJICAgICAgICJhaGNfZG1hICV1IGJ5dGVzXG4iLAogCQkJYWhjX25hbWUoYWhjKSwKIAkJCSh1X2ludClzaXplb2Yoc3RydWN0IGhhcmR3YXJlX3NjYiksCkBAIC01NDcwLDcgKzU0NjQsNyBAQAogCiAJLyogR3JhYiB0aGUgZGlzY29ubmVjdGlvbiBkaXNhYmxlIHRhYmxlIGFuZCBpbnZlcnQgaXQgZm9yIG91ciBuZWVkcyAqLwogCWlmICgoYWhjLT5mbGFncyAmIEFIQ19VU0VERUZBVUxUUykgIT0gMCkgewotCQlwcmludGYoIiVzOiBIb3N0IEFkYXB0ZXIgQmlvcyBkaXNhYmxlZC4gIFVzaW5nIGRlZmF1bHQgU0NTSSAiCisJCXByaW50aygiJXM6IEhvc3QgQWRhcHRlciBCaW9zIGRpc2FibGVkLiAgVXNpbmcgZGVmYXVsdCBTQ1NJICIKIAkJCSJkZXZpY2UgcGFyYW1ldGVyc1xuIiwgYWhjX25hbWUoYWhjKSk7CiAJCWFoYy0+ZmxhZ3MgfD0gQUhDX0VYVEVOREVEX1RSQU5TX0F8QUhDX0VYVEVOREVEX1RSQU5TX0J8CiAJCQkgICAgICBBSENfVEVSTV9FTkJfQXxBSENfVEVSTV9FTkJfQjsKQEAgLTU2NTEsNyArNTY0NSw3IEBACiAJICAgICAgJiYgKChpbnRzdGF0ICYgSU5UX1BFTkQpICE9IDAKIAkgICAgICAgfHwgKGFoY19pbmIoYWhjLCBTU1RBVDApICYgKFNFTERPfFNFTElOR08pKSAhPSAwKSk7CiAJaWYgKG1heGxvb3BzID09IDApIHsKLQkJcHJpbnRmKCJJbmZpbml0ZSBpbnRlcnJ1cHQgbG9vcCwgSU5UU1RBVCA9ICV4IiwKKwkJcHJpbnRrKCJJbmZpbml0ZSBpbnRlcnJ1cHQgbG9vcCwgSU5UU1RBVCA9ICV4IiwKIAkJICAgICAgIGFoY19pbmIoYWhjLCBJTlRTVEFUKSk7CiAJfQogCWFoY19wbGF0Zm9ybV9mbHVzaHdvcmsoYWhjKTsKQEAgLTU5MTAsNyArNTkwNCw3IEBACiAJd2hpbGUgKHFpbnBvcyAhPSBxaW50YWlsKSB7CiAJCXNjYiA9IGFoY19sb29rdXBfc2NiKGFoYywgYWhjLT5xaW5maWZvW3FpbnBvc10pOwogCQlpZiAoc2NiID09IE5VTEwpIHsKLQkJCXByaW50ZigicWlucG9zID0gJWQsIFNDQiBpbmRleCA9ICVkXG4iLAorCQkJcHJpbnRrKCJxaW5wb3MgPSAlZCwgU0NCIGluZGV4ID0gJWRcbiIsCiAJCQkJcWlucG9zLCBhaGMtPnFpbmZpZm9bcWlucG9zXSk7CiAJCQlwYW5pYygiTG9vcCAxXG4iKTsKIAkJfQpAQCAtNTkzMyw3ICs1OTI3LDcgQEAKIAkJCQlpZiAoY3N0YXQgIT0gQ0FNX1JFUV9DTVApCiAJCQkJCWFoY19mcmVlemVfc2NiKHNjYik7CiAJCQkJaWYgKChzY2ItPmZsYWdzICYgU0NCX0FDVElWRSkgPT0gMCkKLQkJCQkJcHJpbnRmKCJJbmFjdGl2ZSBTQ0IgaW4gcWluZmlmb1xuIik7CisJCQkJCXByaW50aygiSW5hY3RpdmUgU0NCIGluIHFpbmZpZm9cbiIpOwogCQkJCWFoY19kb25lKGFoYywgc2NiKTsKIAogCQkJCS8qIEZBTExUSFJPVUdIICovCkBAIC01OTc2LDcgKzU5NzAsNyBAQAogCQlzY2IgPSBhaGNfbG9va3VwX3NjYihhaGMsIGFoYy0+cWluZmlmb1txaW5zdGFydF0pOwogCiAJCWlmIChzY2IgPT0gTlVMTCkgewotCQkJcHJpbnRmKCJmb3VuZCA9ICVkLCBxaW5zdGFydCA9ICVkLCBxaW5maWZpb25leHQgPSAlZFxuIiwKKwkJCXByaW50aygiZm91bmQgPSAlZCwgcWluc3RhcnQgPSAlZCwgcWluZmlmaW9uZXh0ID0gJWRcbiIsCiAJCQkJZm91bmQsIHFpbnN0YXJ0LCBhaGMtPnFpbmZpZm9uZXh0KTsKIAkJCXBhbmljKCJGaXJzdC9TZWNvbmQgUWluZmlmbyBmaXh1cFxuIik7CiAJCX0KQEAgLTYwMTQsNyArNjAwOCw3IEBACiAJCWFoY19vdXRiKGFoYywgU0NCUFRSLCBuZXh0KTsKIAkJc2NiX2luZGV4ID0gYWhjX2luYihhaGMsIFNDQl9UQUcpOwogCQlpZiAoc2NiX2luZGV4ID49IGFoYy0+c2NiX2RhdGEtPm51bXNjYnMpIHsKLQkJCXByaW50ZigiV2FpdGluZyBMaXN0IGluY29uc2lzdGVuY3kuICIKKwkJCXByaW50aygiV2FpdGluZyBMaXN0IGluY29uc2lzdGVuY3kuICIKIAkJCSAgICAgICAiU0NCIGluZGV4ID09ICVkLCB5ZXQgbnVtc2NicyA9PSAlZC4iLAogCQkJICAgICAgIHNjYl9pbmRleCwgYWhjLT5zY2JfZGF0YS0+bnVtc2Nicyk7CiAJCQlhaGNfZHVtcF9jYXJkX3N0YXRlKGFoYyk7CkBAIC02MDIyLDcgKzYwMTYsNyBAQAogCQl9CiAJCXNjYiA9IGFoY19sb29rdXBfc2NiKGFoYywgc2NiX2luZGV4KTsKIAkJaWYgKHNjYiA9PSBOVUxMKSB7Ci0JCQlwcmludGYoInNjYl9pbmRleCA9ICVkLCBuZXh0ID0gJWRcbiIsCisJCQlwcmludGsoInNjYl9pbmRleCA9ICVkLCBuZXh0ID0gJWRcbiIsCiAJCQkJc2NiX2luZGV4LCBuZXh0KTsKIAkJCXBhbmljKCJXYWl0aW5nIExpc3QgdHJhdmVyc2FsXG4iKTsKIAkJfQpAQCAtNjA0Niw3ICs2MDQwLDcgQEAKIAkJCQlpZiAoY3N0YXQgIT0gQ0FNX1JFUV9DTVApCiAJCQkJCWFoY19mcmVlemVfc2NiKHNjYik7CiAJCQkJaWYgKChzY2ItPmZsYWdzICYgU0NCX0FDVElWRSkgPT0gMCkKLQkJCQkJcHJpbnRmKCJJbmFjdGl2ZSBTQ0IgaW4gV2FpdGluZyBMaXN0XG4iKTsKKwkJCQkJcHJpbnRrKCJJbmFjdGl2ZSBTQ0IgaW4gV2FpdGluZyBMaXN0XG4iKTsKIAkJCQlhaGNfZG9uZShhaGMsIHNjYik7CiAJCQkJLyogRkFMTFRIUk9VR0ggKi8KIAkJCX0KQEAgLTYxNTMsNyArNjE0Nyw3IEBACiAJCQkJaWYgKGNzdGF0ICE9IENBTV9SRVFfQ01QKQogCQkJCQlhaGNfZnJlZXplX3NjYihzY2IpOwogCQkJCWlmICgoc2NiLT5mbGFncyAmIFNDQl9BQ1RJVkUpID09IDApCi0JCQkJCXByaW50ZigiSW5hY3RpdmUgU0NCIGluIHVudGFnZ2VkUVxuIik7CisJCQkJCXByaW50aygiSW5hY3RpdmUgU0NCIGluIHVudGFnZ2VkUVxuIik7CiAJCQkJYWhjX2RvbmUoYWhjLCBzY2IpOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtNjIwMCw3ICs2MTk0LDcgQEAKIAkJYWhjX291dGIoYWhjLCBTQ0JQVFIsIG5leHQpOwogCQlzY2JfaW5kZXggPSBhaGNfaW5iKGFoYywgU0NCX1RBRyk7CiAJCWlmIChzY2JfaW5kZXggPj0gYWhjLT5zY2JfZGF0YS0+bnVtc2NicykgewotCQkJcHJpbnRmKCJEaXNjb25uZWN0ZWQgTGlzdCBpbmNvbnNpc3RlbmN5LiAiCisJCQlwcmludGsoIkRpc2Nvbm5lY3RlZCBMaXN0IGluY29uc2lzdGVuY3kuICIKIAkJCSAgICAgICAiU0NCIGluZGV4ID09ICVkLCB5ZXQgbnVtc2NicyA9PSAlZC4iLAogCQkJICAgICAgIHNjYl9pbmRleCwgYWhjLT5zY2JfZGF0YS0+bnVtc2Nicyk7CiAJCQlhaGNfZHVtcF9jYXJkX3N0YXRlKGFoYyk7CkBAIC02NDU2LDcgKzY0NTAsNyBAQAogCQkJaWYgKGFoY19nZXRfdHJhbnNhY3Rpb25fc3RhdHVzKHNjYnApICE9IENBTV9SRVFfQ01QKQogCQkJCWFoY19mcmVlemVfc2NiKHNjYnApOwogCQkJaWYgKChzY2JwLT5mbGFncyAmIFNDQl9BQ1RJVkUpID09IDApCi0JCQkJcHJpbnRmKCJJbmFjdGl2ZSBTQ0Igb24gcGVuZGluZyBsaXN0XG4iKTsKKwkJCQlwcmludGsoIkluYWN0aXZlIFNDQiBvbiBwZW5kaW5nIGxpc3RcbiIpOwogCQkJYWhjX2RvbmUoYWhjLCBzY2JwKTsKIAkJCWZvdW5kKys7CiAJCX0KQEAgLTY3MzQsNyArNjcyOCw3IEBACiAjaWZkZWYgQUhDX0RFQlVHCiAJaWYgKChhaGNfZGVidWcgJiBBSENfU0hPV19NSVNDKSAhPSAwKSB7CiAJCWFoY19wcmludF9wYXRoKGFoYywgc2NiKTsKLQkJcHJpbnRmKCJIYW5kbGVkICVzUmVzaWR1YWwgb2YgJWQgYnl0ZXNcbiIsCisJCXByaW50aygiSGFuZGxlZCAlc1Jlc2lkdWFsIG9mICVkIGJ5dGVzXG4iLAogCQkgICAgICAgKHNjYi0+ZmxhZ3MgJiBTQ0JfU0VOU0UpID8gIlNlbnNlICIgOiAiIiwgcmVzaWQpOwogCX0KICNlbmRpZgpAQCAtNjc3NCw3ICs2NzY4LDcgQEAKIAogCWlmIChwZW5kaW5nID09IEFIQ19UTU9ERV9FVkVOVF9CVUZGRVJfU0laRSkgewogCQl4cHRfcHJpbnRfcGF0aChsc3RhdGUtPnBhdGgpOwotCQlwcmludGYoImltbWVkaWF0ZSBldmVudCAleDoleCBsb3N0XG4iLAorCQlwcmludGsoImltbWVkaWF0ZSBldmVudCAleDoleCBsb3N0XG4iLAogCQkgICAgICAgbHN0YXRlLT5ldmVudF9idWZmZXJbbHN0YXRlLT5ldmVudF9yX2lkeF0uZXZlbnRfdHlwZSwKIAkJICAgICAgIGxzdGF0ZS0+ZXZlbnRfYnVmZmVyW2xzdGF0ZS0+ZXZlbnRfcl9pZHhdLmV2ZW50X2FyZyk7CiAJCWxzdGF0ZS0+ZXZlbnRfcl9pZHgrKzsKQEAgLTY4NDQsNyArNjgzOCw3IEBACiAJCXVpbnQ4X3QgaW5zX2J5dGVzWzRdOwogCiAJCWFoY19pbnNiKGFoYywgU0VRUkFNLCBpbnNfYnl0ZXMsIDQpOwotCQlwcmludGYoIjB4JTA4eFxuIiwgaW5zX2J5dGVzWzBdIDw8IDI0CisJCXByaW50aygiMHglMDh4XG4iLCBpbnNfYnl0ZXNbMF0gPDwgMjQKIAkJCQkgfCBpbnNfYnl0ZXNbMV0gPDwgMTYKIAkJCQkgfCBpbnNfYnl0ZXNbMl0gPDwgOAogCQkJCSB8IGluc19ieXRlc1szXSk7CkBAIC02OTEyLDcgKzY5MDYsNyBAQAogCQkJICogc3RvcmFnZSBjYXBhY2l0eSBmb3IgdGhpcyBjaGlwLiAgRmFpbAogCQkJICogdGhlIGxvYWQuCiAJCQkgKi8KLQkJCXByaW50ZigiXG4lczogUHJvZ3JhbSB0b28gbGFyZ2UgZm9yIGluc3RydWN0aW9uIG1lbW9yeSAiCisJCQlwcmludGsoIlxuJXM6IFByb2dyYW0gdG9vIGxhcmdlIGZvciBpbnN0cnVjdGlvbiBtZW1vcnkgIgogCQkJICAgICAgICJzaXplIG9mICVkIVxuIiwgYWhjX25hbWUoYWhjKSwKIAkJCSAgICAgICBhaGMtPmluc3RydWN0aW9uX3JhbV9zaXplKTsKIAkJCXJldHVybiAoRU5PTUVNKTsKQEAgLTY5NDcsNyArNjk0MSw3IEBACiAJaWYgKGNzX2NvdW50ICE9IDApIHsKIAogCQljc19jb3VudCAqPSBzaXplb2Yoc3RydWN0IGNzKTsKLQkJYWhjLT5jcml0aWNhbF9zZWN0aW9ucyA9IG1hbGxvYyhjc19jb3VudCwgTV9ERVZCVUYsIE1fTk9XQUlUKTsKKwkJYWhjLT5jcml0aWNhbF9zZWN0aW9ucyA9IGttYWxsb2MoY3NfY291bnQsIEdGUF9BVE9NSUMpOwogCQlpZiAoYWhjLT5jcml0aWNhbF9zZWN0aW9ucyA9PSBOVUxMKQogCQkJcGFuaWMoImFoY19sb2Fkc2VxOiBDb3VsZCBub3QgbWFsbG9jIik7CiAJCW1lbWNweShhaGMtPmNyaXRpY2FsX3NlY3Rpb25zLCBjc190YWJsZSwgY3NfY291bnQpOwpAQCAtNjk1NSw4ICs2OTQ5LDggQEAKIAlhaGNfb3V0YihhaGMsIFNFUUNUTCwgUEVSUk9SRElTfEZBSUxESVN8RkFTVE1PREUpOwogCiAJaWYgKGJvb3R2ZXJib3NlKSB7Ci0JCXByaW50ZigiICVkIGluc3RydWN0aW9ucyBkb3dubG9hZGVkXG4iLCBkb3dubG9hZGVkKTsKLQkJcHJpbnRmKCIlczogRmVhdHVyZXMgMHgleCwgQnVncyAweCV4LCBGbGFncyAweCV4XG4iLAorCQlwcmludGsoIiAlZCBpbnN0cnVjdGlvbnMgZG93bmxvYWRlZFxuIiwgZG93bmxvYWRlZCk7CisJCXByaW50aygiJXM6IEZlYXR1cmVzIDB4JXgsIEJ1Z3MgMHgleCwgRmxhZ3MgMHgleFxuIiwKIAkJICAgICAgIGFoY19uYW1lKGFoYyksIGFoYy0+ZmVhdHVyZXMsIGFoYy0+YnVncywgYWhjLT5mbGFncyk7CiAJfQogCXJldHVybiAoMCk7CkBAIC03MTMyLDEyICs3MTI2LDEyIEBACiAJdV9pbnQJcHJpbnRlZF9tYXNrOwogCiAJaWYgKGN1cl9jb2x1bW4gIT0gTlVMTCAmJiAqY3VyX2NvbHVtbiA+PSB3cmFwX3BvaW50KSB7Ci0JCXByaW50ZigiXG4iKTsKKwkJcHJpbnRrKCJcbiIpOwogCQkqY3VyX2NvbHVtbiA9IDA7CiAJfQotCXByaW50ZWQgPSBwcmludGYoIiVzWzB4JXhdIiwgbmFtZSwgdmFsdWUpOworCXByaW50ZWQgID0gcHJpbnRrKCIlc1sweCV4XSIsIG5hbWUsIHZhbHVlKTsKIAlpZiAodGFibGUgPT0gTlVMTCkgewotCQlwcmludGVkICs9IHByaW50ZigiICIpOworCQlwcmludGVkICs9IHByaW50aygiICIpOwogCQkqY3VyX2NvbHVtbiArPSBwcmludGVkOwogCQlyZXR1cm4gKHByaW50ZWQpOwogCX0KQEAgLTcxNTIsNyArNzE0Niw3IEBACiAJCQkgID09IHRhYmxlW2VudHJ5XS5tYXNrKSkKIAkJCQljb250aW51ZTsKIAotCQkJcHJpbnRlZCArPSBwcmludGYoIiVzJXMiLAorCQkJcHJpbnRlZCArPSBwcmludGsoIiVzJXMiLAogCQkJCQkgIHByaW50ZWRfbWFzayA9PSAwID8gIjooIiA6ICJ8IiwKIAkJCQkJICB0YWJsZVtlbnRyeV0ubmFtZSk7CiAJCQlwcmludGVkX21hc2sgfD0gdGFibGVbZW50cnldLm1hc2s7CkBAIC03MTYzLDkgKzcxNTcsOSBAQAogCQkJYnJlYWs7CiAJfQogCWlmIChwcmludGVkX21hc2sgIT0gMCkKLQkJcHJpbnRlZCArPSBwcmludGYoIikgIik7CisJCXByaW50ZWQgKz0gcHJpbnRrKCIpICIpOwogCWVsc2UKLQkJcHJpbnRlZCArPSBwcmludGYoIiAiKTsKKwkJcHJpbnRlZCArPSBwcmludGsoIiAiKTsKIAlpZiAoY3VyX2NvbHVtbiAhPSBOVUxMKQogCQkqY3VyX2NvbHVtbiArPSBwcmludGVkOwogCXJldHVybiAocHJpbnRlZCk7CkBAIC03MTk3LDE2ICs3MTkxLDE2IEBACiAKIAlzYXZlZF9zY2JwdHIgPSBhaGNfaW5iKGFoYywgU0NCUFRSKTsKIAlsYXN0X3BoYXNlID0gYWhjX2luYihhaGMsIExBU1RQSEFTRSk7Ci0JcHJpbnRmKCI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4gRHVtcCBDYXJkIFN0YXRlIEJlZ2lucyA8PDw8PDw8PDw8PDw8PDw8PFxuIgorCXByaW50aygiPj4+Pj4+Pj4+Pj4+Pj4+Pj4+IER1bXAgQ2FyZCBTdGF0ZSBCZWdpbnMgPDw8PDw8PDw8PDw8PDw8PDxcbiIKIAkgICAgICAgIiVzOiBEdW1waW5nIENhcmQgU3RhdGUgJXMsIGF0IFNFUUFERFIgMHgleFxuIiwKIAkgICAgICAgYWhjX25hbWUoYWhjKSwgYWhjX2xvb2t1cF9waGFzZV9lbnRyeShsYXN0X3BoYXNlKS0+cGhhc2Vtc2csCiAJICAgICAgIGFoY19pbmIoYWhjLCBTRVFBRERSMCkgfCAoYWhjX2luYihhaGMsIFNFUUFERFIxKSA8PCA4KSk7CiAJaWYgKHBhdXNlZCkKLQkJcHJpbnRmKCJDYXJkIHdhcyBwYXVzZWRcbiIpOwotCXByaW50ZigiQUNDVU0gPSAweCV4LCBTSU5ERVggPSAweCV4LCBESU5ERVggPSAweCV4LCBBUkdfMiA9IDB4JXhcbiIsCisJCXByaW50aygiQ2FyZCB3YXMgcGF1c2VkXG4iKTsKKwlwcmludGsoIkFDQ1VNID0gMHgleCwgU0lOREVYID0gMHgleCwgRElOREVYID0gMHgleCwgQVJHXzIgPSAweCV4XG4iLAogCSAgICAgICBhaGNfaW5iKGFoYywgQUNDVU0pLCBhaGNfaW5iKGFoYywgU0lOREVYKSwgYWhjX2luYihhaGMsIERJTkRFWCksCiAJICAgICAgIGFoY19pbmIoYWhjLCBBUkdfMikpOwotCXByaW50ZigiSENOVCA9IDB4JXggU0NCUFRSID0gMHgleFxuIiwgYWhjX2luYihhaGMsIEhDTlQpLAorCXByaW50aygiSENOVCA9IDB4JXggU0NCUFRSID0gMHgleFxuIiwgYWhjX2luYihhaGMsIEhDTlQpLAogCSAgICAgICBhaGNfaW5iKGFoYywgU0NCUFRSKSk7CiAJY3VyX2NvbCA9IDA7CiAJaWYgKChhaGMtPmZlYXR1cmVzICYgQUhDX0RUKSAhPSAwKQpAQCAtNzIzMCwxNSArNzIyNCwxNSBAQAogCWFoY19kZmNudHJsX3ByaW50KGFoY19pbmIoYWhjLCBERkNOVFJMKSwgJmN1cl9jb2wsIDUwKTsKIAlhaGNfZGZzdGF0dXNfcHJpbnQoYWhjX2luYihhaGMsIERGU1RBVFVTKSwgJmN1cl9jb2wsIDUwKTsKIAlpZiAoY3VyX2NvbCAhPSAwKQotCQlwcmludGYoIlxuIik7Ci0JcHJpbnRmKCJTVEFDSzoiKTsKKwkJcHJpbnRrKCJcbiIpOworCXByaW50aygiU1RBQ0s6Iik7CiAJZm9yIChpID0gMDsgaSA8IFNUQUNLX1NJWkU7IGkrKykKLQkgICAgICAgcHJpbnRmKCIgMHgleCIsIGFoY19pbmIoYWhjLCBTVEFDSyl8KGFoY19pbmIoYWhjLCBTVEFDSykgPDwgOCkpOwotCXByaW50ZigiXG5TQ0IgY291bnQgPSAlZFxuIiwgYWhjLT5zY2JfZGF0YS0+bnVtc2Nicyk7Ci0JcHJpbnRmKCJLZXJuZWwgTkVYVFFTQ0IgPSAlZFxuIiwgYWhjLT5uZXh0X3F1ZXVlZF9zY2ItPmhzY2ItPnRhZyk7Ci0JcHJpbnRmKCJDYXJkIE5FWFRRU0NCID0gJWRcbiIsIGFoY19pbmIoYWhjLCBORVhUX1FVRVVFRF9TQ0IpKTsKKwkJcHJpbnRrKCIgMHgleCIsIGFoY19pbmIoYWhjLCBTVEFDSyl8KGFoY19pbmIoYWhjLCBTVEFDSykgPDwgOCkpOworCXByaW50aygiXG5TQ0IgY291bnQgPSAlZFxuIiwgYWhjLT5zY2JfZGF0YS0+bnVtc2Nicyk7CisJcHJpbnRrKCJLZXJuZWwgTkVYVFFTQ0IgPSAlZFxuIiwgYWhjLT5uZXh0X3F1ZXVlZF9zY2ItPmhzY2ItPnRhZyk7CisJcHJpbnRrKCJDYXJkIE5FWFRRU0NCID0gJWRcbiIsIGFoY19pbmIoYWhjLCBORVhUX1FVRVVFRF9TQ0IpKTsKIAkvKiBRSU5GSUZPICovCi0JcHJpbnRmKCJRSU5GSUZPIGVudHJpZXM6ICIpOworCXByaW50aygiUUlORklGTyBlbnRyaWVzOiAiKTsKIAlpZiAoKGFoYy0+ZmVhdHVyZXMgJiBBSENfUVVFVUVfUkVHUykgIT0gMCkgewogCQlxaW5wb3MgPSBhaGNfaW5iKGFoYywgU05TQ0JfUU9GRik7CiAJCWFoY19vdXRiKGFoYywgU05TQ0JfUU9GRiwgcWlucG9zKTsKQEAgLTcyNDYsMTA5ICs3MjQwLDEwOSBAQAogCQlxaW5wb3MgPSBhaGNfaW5iKGFoYywgUUlOUE9TKTsKIAlxaW50YWlsID0gYWhjLT5xaW5maWZvbmV4dDsKIAl3aGlsZSAocWlucG9zICE9IHFpbnRhaWwpIHsKLQkJcHJpbnRmKCIlZCAiLCBhaGMtPnFpbmZpZm9bcWlucG9zXSk7CisJCXByaW50aygiJWQgIiwgYWhjLT5xaW5maWZvW3FpbnBvc10pOwogCQlxaW5wb3MrKzsKIAl9Ci0JcHJpbnRmKCJcbiIpOworCXByaW50aygiXG4iKTsKIAotCXByaW50ZigiV2FpdGluZyBRdWV1ZSBlbnRyaWVzOiAiKTsKKwlwcmludGsoIldhaXRpbmcgUXVldWUgZW50cmllczogIik7CiAJc2NiX2luZGV4ID0gYWhjX2luYihhaGMsIFdBSVRJTkdfU0NCSCk7CiAJaSA9IDA7CiAJd2hpbGUgKHNjYl9pbmRleCAhPSBTQ0JfTElTVF9OVUxMICYmIGkrKyA8IDI1NikgewogCQlhaGNfb3V0YihhaGMsIFNDQlBUUiwgc2NiX2luZGV4KTsKLQkJcHJpbnRmKCIlZDolZCAiLCBzY2JfaW5kZXgsIGFoY19pbmIoYWhjLCBTQ0JfVEFHKSk7CisJCXByaW50aygiJWQ6JWQgIiwgc2NiX2luZGV4LCBhaGNfaW5iKGFoYywgU0NCX1RBRykpOwogCQlzY2JfaW5kZXggPSBhaGNfaW5iKGFoYywgU0NCX05FWFQpOwogCX0KLQlwcmludGYoIlxuIik7CisJcHJpbnRrKCJcbiIpOwogCi0JcHJpbnRmKCJEaXNjb25uZWN0ZWQgUXVldWUgZW50cmllczogIik7CisJcHJpbnRrKCJEaXNjb25uZWN0ZWQgUXVldWUgZW50cmllczogIik7CiAJc2NiX2luZGV4ID0gYWhjX2luYihhaGMsIERJU0NPTk5FQ1RFRF9TQ0JIKTsKIAlpID0gMDsKIAl3aGlsZSAoc2NiX2luZGV4ICE9IFNDQl9MSVNUX05VTEwgJiYgaSsrIDwgMjU2KSB7CiAJCWFoY19vdXRiKGFoYywgU0NCUFRSLCBzY2JfaW5kZXgpOwotCQlwcmludGYoIiVkOiVkICIsIHNjYl9pbmRleCwgYWhjX2luYihhaGMsIFNDQl9UQUcpKTsKKwkJcHJpbnRrKCIlZDolZCAiLCBzY2JfaW5kZXgsIGFoY19pbmIoYWhjLCBTQ0JfVEFHKSk7CiAJCXNjYl9pbmRleCA9IGFoY19pbmIoYWhjLCBTQ0JfTkVYVCk7CiAJfQotCXByaW50ZigiXG4iKTsKKwlwcmludGsoIlxuIik7CiAJCQogCWFoY19zeW5jX3FvdXRmaWZvKGFoYywgQlVTX0RNQVNZTkNfUE9TVFJFQUQpOwotCXByaW50ZigiUU9VVEZJRk8gZW50cmllczogIik7CisJcHJpbnRrKCJRT1VURklGTyBlbnRyaWVzOiAiKTsKIAlxb3V0cG9zID0gYWhjLT5xb3V0Zmlmb25leHQ7CiAJaSA9IDA7CiAJd2hpbGUgKGFoYy0+cW91dGZpZm9bcW91dHBvc10gIT0gU0NCX0xJU1RfTlVMTCAmJiBpKysgPCAyNTYpIHsKLQkJcHJpbnRmKCIlZCAiLCBhaGMtPnFvdXRmaWZvW3FvdXRwb3NdKTsKKwkJcHJpbnRrKCIlZCAiLCBhaGMtPnFvdXRmaWZvW3FvdXRwb3NdKTsKIAkJcW91dHBvcysrOwogCX0KLQlwcmludGYoIlxuIik7CisJcHJpbnRrKCJcbiIpOwogCi0JcHJpbnRmKCJTZXF1ZW5jZXIgRnJlZSBTQ0IgTGlzdDogIik7CisJcHJpbnRrKCJTZXF1ZW5jZXIgRnJlZSBTQ0IgTGlzdDogIik7CiAJc2NiX2luZGV4ID0gYWhjX2luYihhaGMsIEZSRUVfU0NCSCk7CiAJaSA9IDA7CiAJd2hpbGUgKHNjYl9pbmRleCAhPSBTQ0JfTElTVF9OVUxMICYmIGkrKyA8IDI1NikgewogCQlhaGNfb3V0YihhaGMsIFNDQlBUUiwgc2NiX2luZGV4KTsKLQkJcHJpbnRmKCIlZCAiLCBzY2JfaW5kZXgpOworCQlwcmludGsoIiVkICIsIHNjYl9pbmRleCk7CiAJCXNjYl9pbmRleCA9IGFoY19pbmIoYWhjLCBTQ0JfTkVYVCk7CiAJfQotCXByaW50ZigiXG4iKTsKKwlwcmludGsoIlxuIik7CiAKLQlwcmludGYoIlNlcXVlbmNlciBTQ0IgSW5mbzogIik7CisJcHJpbnRrKCJTZXF1ZW5jZXIgU0NCIEluZm86ICIpOwogCWZvciAoaSA9IDA7IGkgPCBhaGMtPnNjYl9kYXRhLT5tYXhoc2NiczsgaSsrKSB7CiAJCWFoY19vdXRiKGFoYywgU0NCUFRSLCBpKTsKLQkJY3VyX2NvbCA9IHByaW50ZigiXG4lM2QgIiwgaSk7CisJCWN1cl9jb2wgID0gcHJpbnRrKCJcbiUzZCAiLCBpKTsKIAogCQlhaGNfc2NiX2NvbnRyb2xfcHJpbnQoYWhjX2luYihhaGMsIFNDQl9DT05UUk9MKSwgJmN1cl9jb2wsIDYwKTsKIAkJYWhjX3NjYl9zY3NpaWRfcHJpbnQoYWhjX2luYihhaGMsIFNDQl9TQ1NJSUQpLCAmY3VyX2NvbCwgNjApOwogCQlhaGNfc2NiX2x1bl9wcmludChhaGNfaW5iKGFoYywgU0NCX0xVTiksICZjdXJfY29sLCA2MCk7CiAJCWFoY19zY2JfdGFnX3ByaW50KGFoY19pbmIoYWhjLCBTQ0JfVEFHKSwgJmN1cl9jb2wsIDYwKTsKIAl9Ci0JcHJpbnRmKCJcbiIpOworCXByaW50aygiXG4iKTsKIAotCXByaW50ZigiUGVuZGluZyBsaXN0OiAiKTsKKwlwcmludGsoIlBlbmRpbmcgbGlzdDogIik7CiAJaSA9IDA7CiAJTElTVF9GT1JFQUNIKHNjYiwgJmFoYy0+cGVuZGluZ19zY2JzLCBwZW5kaW5nX2xpbmtzKSB7CiAJCWlmIChpKysgPiAyNTYpCiAJCQlicmVhazsKLQkJY3VyX2NvbCA9IHByaW50ZigiXG4lM2QgIiwgc2NiLT5oc2NiLT50YWcpOworCQljdXJfY29sICA9IHByaW50aygiXG4lM2QgIiwgc2NiLT5oc2NiLT50YWcpOwogCQlhaGNfc2NiX2NvbnRyb2xfcHJpbnQoc2NiLT5oc2NiLT5jb250cm9sLCAmY3VyX2NvbCwgNjApOwogCQlhaGNfc2NiX3Njc2lpZF9wcmludChzY2ItPmhzY2ItPnNjc2lpZCwgJmN1cl9jb2wsIDYwKTsKIAkJYWhjX3NjYl9sdW5fcHJpbnQoc2NiLT5oc2NiLT5sdW4sICZjdXJfY29sLCA2MCk7CiAJCWlmICgoYWhjLT5mbGFncyAmIEFIQ19QQUdFU0NCUykgPT0gMCkgewogCQkJYWhjX291dGIoYWhjLCBTQ0JQVFIsIHNjYi0+aHNjYi0+dGFnKTsKLQkJCXByaW50ZigiKCIpOworCQkJcHJpbnRrKCIoIik7CiAJCQlhaGNfc2NiX2NvbnRyb2xfcHJpbnQoYWhjX2luYihhaGMsIFNDQl9DT05UUk9MKSwKIAkJCQkJICAgICAgJmN1cl9jb2wsIDYwKTsKIAkJCWFoY19zY2JfdGFnX3ByaW50KGFoY19pbmIoYWhjLCBTQ0JfVEFHKSwgJmN1cl9jb2wsIDYwKTsKLQkJCXByaW50ZigiKSIpOworCQkJcHJpbnRrKCIpIik7CiAJCX0KIAl9Ci0JcHJpbnRmKCJcbiIpOworCXByaW50aygiXG4iKTsKIAotCXByaW50ZigiS2VybmVsIEZyZWUgU0NCIGxpc3Q6ICIpOworCXByaW50aygiS2VybmVsIEZyZWUgU0NCIGxpc3Q6ICIpOwogCWkgPSAwOwogCVNMSVNUX0ZPUkVBQ0goc2NiLCAmYWhjLT5zY2JfZGF0YS0+ZnJlZV9zY2JzLCBsaW5rcy5zbGUpIHsKIAkJaWYgKGkrKyA+IDI1NikKIAkJCWJyZWFrOwotCQlwcmludGYoIiVkICIsIHNjYi0+aHNjYi0+dGFnKTsKKwkJcHJpbnRrKCIlZCAiLCBzY2ItPmhzY2ItPnRhZyk7CiAJfQotCXByaW50ZigiXG4iKTsKKwlwcmludGsoIlxuIik7CiAKIAltYXh0YXJnZXQgPSAoYWhjLT5mZWF0dXJlcyAmIChBSENfV0lERXxBSENfVFdJTikpID8gMTUgOiA3OwogCWZvciAodGFyZ2V0ID0gMDsgdGFyZ2V0IDw9IG1heHRhcmdldDsgdGFyZ2V0KyspIHsKIAkJdW50YWdnZWRfcSA9ICZhaGMtPnVudGFnZ2VkX3F1ZXVlc1t0YXJnZXRdOwogCQlpZiAoVEFJTFFfRklSU1QodW50YWdnZWRfcSkgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwotCQlwcmludGYoIlVudGFnZ2VkIFEoJWQpOiAiLCB0YXJnZXQpOworCQlwcmludGsoIlVudGFnZ2VkIFEoJWQpOiAiLCB0YXJnZXQpOwogCQlpID0gMDsKIAkJVEFJTFFfRk9SRUFDSChzY2IsIHVudGFnZ2VkX3EsIGxpbmtzLnRxZSkgewogCQkJaWYgKGkrKyA+IDI1NikKIAkJCQlicmVhazsKLQkJCXByaW50ZigiJWQgIiwgc2NiLT5oc2NiLT50YWcpOworCQkJcHJpbnRrKCIlZCAiLCBzY2ItPmhzY2ItPnRhZyk7CiAJCX0KLQkJcHJpbnRmKCJcbiIpOworCQlwcmludGsoIlxuIik7CiAJfQogCiAJYWhjX3BsYXRmb3JtX2R1bXBfY2FyZF9zdGF0ZShhaGMpOwotCXByaW50ZigiXG48PDw8PDw8PDw8PDw8PDw8PCBEdW1wIENhcmQgU3RhdGUgRW5kcyA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj5cbiIpOworCXByaW50aygiXG48PDw8PDw8PDw8PDw8PDw8PCBEdW1wIENhcmQgU3RhdGUgRW5kcyA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj5cbiIpOwogCWFoY19vdXRiKGFoYywgU0NCUFRSLCBzYXZlZF9zY2JwdHIpOwogCWlmIChwYXVzZWQgPT0gMCkKIAkJYWhjX3VucGF1c2UoYWhjKTsKQEAgLTc0ODksNyArNzQ4Myw3IEBACiAJCXVfbG9uZwkgczsKIAkJYWhjX2ZsYWcgc2F2ZWRfZmxhZ3M7CiAKLQkJcHJpbnRmKCJDb25maWd1cmluZyBUYXJnZXQgTW9kZVxuIik7CisJCXByaW50aygiQ29uZmlndXJpbmcgVGFyZ2V0IE1vZGVcbiIpOwogCQlhaGNfbG9jayhhaGMsICZzKTsKIAkJaWYgKExJU1RfRklSU1QoJmFoYy0+cGVuZGluZ19zY2JzKSAhPSBOVUxMKSB7CiAJCQljY2ItPmNjYl9oLnN0YXR1cyA9IENBTV9CVVNZOwpAQCAtNzUzNSw3ICs3NTI5LDcgQEAKIAkJLyogQXJlIHdlIGFscmVhZHkgZW5hYmxlZD8/ICovCiAJCWlmIChsc3RhdGUgIT0gTlVMTCkgewogCQkJeHB0X3ByaW50X3BhdGgoY2NiLT5jY2JfaC5wYXRoKTsKLQkJCXByaW50ZigiTHVuIGFscmVhZHkgZW5hYmxlZFxuIik7CisJCQlwcmludGsoIkx1biBhbHJlYWR5IGVuYWJsZWRcbiIpOwogCQkJY2NiLT5jY2JfaC5zdGF0dXMgPSBDQU1fTFVOX0FMUkRZX0VOQTsKIAkJCXJldHVybjsKIAkJfQpAQCAtNzU0Nyw3ICs3NTQxLDcgQEAKIAkJCSAqIHNwZWNpZmljIGNvbW1hbmRzLgogCQkJICovCiAJCQljY2ItPmNjYl9oLnN0YXR1cyA9IENBTV9SRVFfSU5WQUxJRDsKLQkJCXByaW50ZigiTm9uLXplcm8gR3JvdXAgQ29kZXNcbiIpOworCQkJcHJpbnRrKCJOb24temVybyBHcm91cCBDb2Rlc1xuIik7CiAJCQlyZXR1cm47CiAJCX0KIApAQCAtNzU1OSwxNSArNzU1MywxNSBAQAogCQkJdHN0YXRlID0gYWhjX2FsbG9jX3RzdGF0ZShhaGMsIHRhcmdldCwgY2hhbm5lbCk7CiAJCQlpZiAodHN0YXRlID09IE5VTEwpIHsKIAkJCQl4cHRfcHJpbnRfcGF0aChjY2ItPmNjYl9oLnBhdGgpOwotCQkJCXByaW50ZigiQ291bGRuJ3QgYWxsb2NhdGUgdHN0YXRlXG4iKTsKKwkJCQlwcmludGsoIkNvdWxkbid0IGFsbG9jYXRlIHRzdGF0ZVxuIik7CiAJCQkJY2NiLT5jY2JfaC5zdGF0dXMgPSBDQU1fUkVTUkNfVU5BVkFJTDsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCX0KLQkJbHN0YXRlID0gbWFsbG9jKHNpemVvZigqbHN0YXRlKSwgTV9ERVZCVUYsIE1fTk9XQUlUKTsKKwkJbHN0YXRlID0ga21hbGxvYyhzaXplb2YoKmxzdGF0ZSksIEdGUF9BVE9NSUMpOwogCQlpZiAobHN0YXRlID09IE5VTEwpIHsKIAkJCXhwdF9wcmludF9wYXRoKGNjYi0+Y2NiX2gucGF0aCk7Ci0JCQlwcmludGYoIkNvdWxkbid0IGFsbG9jYXRlIGxzdGF0ZVxuIik7CisJCQlwcmludGsoIkNvdWxkbid0IGFsbG9jYXRlIGxzdGF0ZVxuIik7CiAJCQljY2ItPmNjYl9oLnN0YXR1cyA9IENBTV9SRVNSQ19VTkFWQUlMOwogCQkJcmV0dXJuOwogCQl9CkBAIC03NTc3LDkgKzc1NzEsOSBAQAogCQkJCQkgeHB0X3BhdGhfdGFyZ2V0X2lkKGNjYi0+Y2NiX2gucGF0aCksCiAJCQkJCSB4cHRfcGF0aF9sdW5faWQoY2NiLT5jY2JfaC5wYXRoKSk7CiAJCWlmIChzdGF0dXMgIT0gQ0FNX1JFUV9DTVApIHsKLQkJCWZyZWUobHN0YXRlLCBNX0RFVkJVRik7CisJCQlrZnJlZShsc3RhdGUpOwogCQkJeHB0X3ByaW50X3BhdGgoY2NiLT5jY2JfaC5wYXRoKTsKLQkJCXByaW50ZigiQ291bGRuJ3QgYWxsb2NhdGUgcGF0aFxuIik7CisJCQlwcmludGsoIkNvdWxkbid0IGFsbG9jYXRlIHBhdGhcbiIpOwogCQkJY2NiLT5jY2JfaC5zdGF0dXMgPSBDQU1fUkVTUkNfVU5BVkFJTDsKIAkJCXJldHVybjsKIAkJfQpAQCAtNzY1NCw3ICs3NjQ4LDcgQEAKIAkJYWhjX3VubG9jayhhaGMsICZzKTsKIAkJY2NiLT5jY2JfaC5zdGF0dXMgPSBDQU1fUkVRX0NNUDsKIAkJeHB0X3ByaW50X3BhdGgoY2NiLT5jY2JfaC5wYXRoKTsKLQkJcHJpbnRmKCJMdW4gbm93IGVuYWJsZWQgZm9yIHRhcmdldCBtb2RlXG4iKTsKKwkJcHJpbnRrKCJMdW4gbm93IGVuYWJsZWQgZm9yIHRhcmdldCBtb2RlXG4iKTsKIAl9IGVsc2UgewogCQlzdHJ1Y3Qgc2NiICpzY2I7CiAJCWludCBpLCBlbXB0eTsKQEAgLTc2NzMsNyArNzY2Nyw3IEBACiAJCQljY2JoID0gJnNjYi0+aW9fY3R4LT5jY2JfaDsKIAkJCWlmIChjY2JoLT5mdW5jX2NvZGUgPT0gWFBUX0NPTlRfVEFSR0VUX0lPCiAJCQkgJiYgIXhwdF9wYXRoX2NvbXAoY2NiaC0+cGF0aCwgY2NiLT5jY2JfaC5wYXRoKSl7Ci0JCQkJcHJpbnRmKCJDVElPIHBlbmRpbmdcbiIpOworCQkJCXByaW50aygiQ1RJTyBwZW5kaW5nXG4iKTsKIAkJCQljY2ItPmNjYl9oLnN0YXR1cyA9IENBTV9SRVFfSU5WQUxJRDsKIAkJCQlhaGNfdW5sb2NrKGFoYywgJnMpOwogCQkJCXJldHVybjsKQEAgLTc2ODEsMTIgKzc2NzUsMTIgQEAKIAkJfQogCiAJCWlmIChTTElTVF9GSVJTVCgmbHN0YXRlLT5hY2NlcHRfdGlvcykgIT0gTlVMTCkgewotCQkJcHJpbnRmKCJBVElPcyBwZW5kaW5nXG4iKTsKKwkJCXByaW50aygiQVRJT3MgcGVuZGluZ1xuIik7CiAJCQljY2ItPmNjYl9oLnN0YXR1cyA9IENBTV9SRVFfSU5WQUxJRDsKIAkJfQogCiAJCWlmIChTTElTVF9GSVJTVCgmbHN0YXRlLT5pbW1lZF9ub3RpZmllcykgIT0gTlVMTCkgewotCQkJcHJpbnRmKCJJTk9UcyBwZW5kaW5nXG4iKTsKKwkJCXByaW50aygiSU5PVHMgcGVuZGluZ1xuIik7CiAJCQljY2ItPmNjYl9oLnN0YXR1cyA9IENBTV9SRVFfSU5WQUxJRDsKIAkJfQogCkBAIC03Njk2LDkgKzc2OTAsOSBAQAogCQl9CiAKIAkJeHB0X3ByaW50X3BhdGgoY2NiLT5jY2JfaC5wYXRoKTsKLQkJcHJpbnRmKCJUYXJnZXQgbW9kZSBkaXNhYmxlZFxuIik7CisJCXByaW50aygiVGFyZ2V0IG1vZGUgZGlzYWJsZWRcbiIpOwogCQl4cHRfZnJlZV9wYXRoKGxzdGF0ZS0+cGF0aCk7Ci0JCWZyZWUobHN0YXRlLCBNX0RFVkJVRik7CisJCWtmcmVlKGxzdGF0ZSk7CiAKIAkJYWhjX3BhdXNlKGFoYyk7CiAJCS8qIENhbiB3ZSBjbGVhbiB1cCB0aGUgdGFyZ2V0IHRvbz8gKi8KQEAgLTc3NTAsNyArNzc0NCw3IEBACiAJCQlhaGNfb3V0YihhaGMsIFNDU0lTRVEsIHNjc2lzZXEpOwogCiAJCQlpZiAoKGFoYy0+ZmVhdHVyZXMgJiBBSENfTVVMVElST0xFKSA9PSAwKSB7Ci0JCQkJcHJpbnRmKCJDb25maWd1cmluZyBJbml0aWF0b3IgTW9kZVxuIik7CisJCQkJcHJpbnRrKCJDb25maWd1cmluZyBJbml0aWF0b3IgTW9kZVxuIik7CiAJCQkJYWhjLT5mbGFncyAmPSB+QUhDX1RBUkdFVFJPTEU7CiAJCQkJYWhjLT5mbGFncyB8PSBBSENfSU5JVElBVE9SUk9MRTsKIAkJCQkvKgpAQCAtNzg5NywxMiArNzg5MSwxMiBAQAogCQkgKiBXYWl0IGZvciBtb3JlIEFUSU9zIGZyb20gdGhlIHBlcmlwaGVyYWwgZHJpdmVyIGZvciB0aGlzIGx1bi4KIAkJICovCiAJCWlmIChib290dmVyYm9zZSkKLQkJCXByaW50ZigiJXM6IEFUSU9zIGV4aGF1c3RlZFxuIiwgYWhjX25hbWUoYWhjKSk7CisJCQlwcmludGsoIiVzOiBBVElPcyBleGhhdXN0ZWRcbiIsIGFoY19uYW1lKGFoYykpOwogCQlyZXR1cm4gKDEpOwogCX0gZWxzZQogCQlhaGMtPmZsYWdzICY9IH5BSENfVFFJTkZJRk9fQkxPQ0tFRDsKICNpZiAwCi0JcHJpbnRmKCJJbmNvbWluZyBjb21tYW5kIGZyb20gJWQgZm9yICVkOiVkJXNcbiIsCisJcHJpbnRrKCJJbmNvbWluZyBjb21tYW5kIGZyb20gJWQgZm9yICVkOiVkJXNcbiIsCiAJICAgICAgIGluaXRpYXRvciwgdGFyZ2V0LCBsdW4sCiAJICAgICAgIGxzdGF0ZSA9PSBhaGMtPmJsYWNrX2hvbGUgPyAiKEJsYWNrIEhvbGVkKSIgOiAiIik7CiAjZW5kaWYKQEAgLTc5NDksNyArNzk0Myw3IEBACiAJZGVmYXVsdDoKIAkJLyogT25seSBjb3B5IHRoZSBvcGNvZGUuICovCiAJCWF0aW8tPmNkYl9sZW4gPSAxOwotCQlwcmludGYoIlJlc2VydmVkIG9yIFZVIGNvbW1hbmQgY29kZSB0eXBlIGVuY291bnRlcmVkXG4iKTsKKwkJcHJpbnRrKCJSZXNlcnZlZCBvciBWVSBjb21tYW5kIGNvZGUgdHlwZSBlbmNvdW50ZXJlZFxuIik7CiAJCWJyZWFrOwogCX0KIAkKQEAgLTc5NjUsNyArNzk1OSw3IEBACiAJCSAqIHRvIHRoaXMgYWNjZXB0IHRpby4KIAkJICovCiAjaWYgMAotCQlwcmludGYoIlJlY2VpdmVkIEltbWVkaWF0ZSBDb21tYW5kICVkOiVkOiVkIC0gJXBcbiIsCisJCXByaW50aygiUmVjZWl2ZWQgSW1tZWRpYXRlIENvbW1hbmQgJWQ6JWQ6JWQgLSAlcFxuIiwKIAkJICAgICAgIGluaXRpYXRvciwgdGFyZ2V0LCBsdW4sIGFoYy0+cGVuZGluZ19kZXZpY2UpOwogI2VuZGlmCiAJCWFoYy0+cGVuZGluZ19kZXZpY2UgPSBsc3RhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uYwppbmRleCA1ZTQyZGFjLi5hZWVhN2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmMKQEAgLTY1Myw3ICs2NTMsNyBAQAogCXN0cnVjdCBhaGNfbGludXhfZGV2aWNlICpkZXY7CiAKIAlpZiAoYm9vdHZlcmJvc2UpCi0JCXByaW50ZigiJXM6IFNsYXZlIEFsbG9jICVkXG4iLCBhaGNfbmFtZShhaGMpLCBzZGV2LT5pZCk7CisJCXByaW50aygiJXM6IFNsYXZlIEFsbG9jICVkXG4iLCBhaGNfbmFtZShhaGMpLCBzZGV2LT5pZCk7CiAKIAlkZXYgPSBzY3NpX3RyYW5zcG9ydF9kZXZpY2VfZGF0YShzZGV2KTsKIAltZW1zZXQoZGV2LCAwLCBzaXplb2YoKmRldikpOwpAQCAtNzU1LDcgKzc1NSw3IEBACiAKIAllcnJvciA9IGFoY19saW51eF9xdWV1ZV9yZWNvdmVyeV9jbWQoY21kLCBTQ0JfQUJPUlQpOwogCWlmIChlcnJvciAhPSAwKQotCQlwcmludGYoImFpYzd4eHhfYWJvcnQgcmV0dXJucyAweCV4XG4iLCBlcnJvcik7CisJCXByaW50aygiYWljN3h4eF9hYm9ydCByZXR1cm5zIDB4JXhcbiIsIGVycm9yKTsKIAlyZXR1cm4gKGVycm9yKTsKIH0KIApAQCAtNzY5LDcgKzc2OSw3IEBACiAKIAllcnJvciA9IGFoY19saW51eF9xdWV1ZV9yZWNvdmVyeV9jbWQoY21kLCBTQ0JfREVWSUNFX1JFU0VUKTsKIAlpZiAoZXJyb3IgIT0gMCkKLQkJcHJpbnRmKCJhaWM3eHh4X2Rldl9yZXNldCByZXR1cm5zIDB4JXhcbiIsIGVycm9yKTsKKwkJcHJpbnRrKCJhaWM3eHh4X2Rldl9yZXNldCByZXR1cm5zIDB4JXhcbiIsIGVycm9yKTsKIAlyZXR1cm4gKGVycm9yKTsKIH0KIApAQCAtNzkxLDcgKzc5MSw3IEBACiAJYWhjX3VubG9jayhhaGMsICZmbGFncyk7CiAKIAlpZiAoYm9vdHZlcmJvc2UpCi0JCXByaW50ZigiJXM6IFNDU0kgYnVzIHJlc2V0IGRlbGl2ZXJlZC4gIgorCQlwcmludGsoIiVzOiBTQ1NJIGJ1cyByZXNldCBkZWxpdmVyZWQuICIKIAkJICAgICAgICIlZCBTQ0JzIGFib3J0ZWQuXG4iLCBhaGNfbmFtZShhaGMpLCBmb3VuZCk7CiAKIAlyZXR1cm4gU1VDQ0VTUzsKQEAgLTg0MCw3ICs4NDAsNyBAQAogewogCWJ1c19kbWFfdGFnX3QgZG1hdDsKIAotCWRtYXQgPSBtYWxsb2Moc2l6ZW9mKCpkbWF0KSwgTV9ERVZCVUYsIE1fTk9XQUlUKTsKKwlkbWF0ID0ga21hbGxvYyhzaXplb2YoKmRtYXQpLCBHRlBfQVRPTUlDKTsKIAlpZiAoZG1hdCA9PSBOVUxMKQogCQlyZXR1cm4gKEVOT01FTSk7CiAKQEAgLTg2MSw3ICs4NjEsNyBAQAogdm9pZAogYWhjX2RtYV90YWdfZGVzdHJveShzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIGJ1c19kbWFfdGFnX3QgZG1hdCkKIHsKLQlmcmVlKGRtYXQsIE1fREVWQlVGKTsKKwlrZnJlZShkbWF0KTsKIH0KIAogaW50CkBAIC05MTgsNyArOTE4LDcgQEAKIAlpbnQgdGFncywgaSwgajsKIAogCXRhZ3MgPSBzaW1wbGVfc3RydG91bChwICsgMSwgTlVMTCwgMCkgJiAweGZmOwotCXByaW50ZigiU2V0dGluZyBHbG9iYWwgVGFncz0gJWRcbiIsIHRhZ3MpOworCXByaW50aygiU2V0dGluZyBHbG9iYWwgVGFncz0gJWRcbiIsIHRhZ3MpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWljN3h4eF90YWdfaW5mbyk7IGkrKykgewogCQlmb3IgKGogPSAwOyBqIDwgQUhDX05VTV9UQVJHRVRTOyBqKyspIHsKQEAgLTkzNiw3ICs5MzYsNyBAQAogCSAmJiAodGFyZyA8IEFIQ19OVU1fVEFSR0VUUykpIHsKIAkJYWljN3h4eF90YWdfaW5mb1tpbnN0YW5jZV0udGFnX2NvbW1hbmRzW3RhcmddID0gdmFsdWUgJiAweGZmOwogCQlpZiAoYm9vdHZlcmJvc2UpCi0JCQlwcmludGYoInRhZ19pbmZvWyVkOiVkXSA9ICVkXG4iLCBpbnN0YW5jZSwgdGFyZywgdmFsdWUpOworCQkJcHJpbnRrKCJ0YWdfaW5mb1slZDolZF0gPSAlZFxuIiwgaW5zdGFuY2UsIHRhcmcsIHZhbHVlKTsKIAl9CiB9CiAKQEAgLTk3Nyw3ICs5NzcsNyBAQAogCQkJCQlpZiAodGFyZyA9PSAtMSkKIAkJCQkJCXRhcmcgPSAwOwogCQkJCX0gZWxzZSB7Ci0JCQkJCXByaW50ZigiTWFsZm9ybWVkIE9wdGlvbiAlc1xuIiwKKwkJCQkJcHJpbnRrKCJNYWxmb3JtZWQgT3B0aW9uICVzXG4iLAogCQkJCQkgICAgICAgb3B0X25hbWUpOwogCQkJCQlkb25lID0gVFJVRTsKIAkJCQl9CkBAIC0xMTIwLDcgKzExMjAsNyBAQAogCWFoY19zZXRfdW5pdChhaGMsIGFoY19saW51eF91bml0KyspOwogCWFoY191bmxvY2soYWhjLCAmcyk7CiAJc3ByaW50ZihidWYsICJzY3NpJWQiLCBob3N0LT5ob3N0X25vKTsKLQluZXdfbmFtZSA9IG1hbGxvYyhzdHJsZW4oYnVmKSArIDEsIE1fREVWQlVGLCBNX05PV0FJVCk7CisJbmV3X25hbWUgPSBrbWFsbG9jKHN0cmxlbihidWYpICsgMSwgR0ZQX0FUT01JQyk7CiAJaWYgKG5ld19uYW1lICE9IE5VTEwpIHsKIAkJc3RyY3B5KG5ld19uYW1lLCBidWYpOwogCQlhaGNfc2V0X25hbWUoYWhjLCBuZXdfbmFtZSk7CkBAIC0xMjIwLDcgKzEyMjAsNyBAQAogewogCiAJYWhjLT5wbGF0Zm9ybV9kYXRhID0KLQkgICAgbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWhjX3BsYXRmb3JtX2RhdGEpLCBNX0RFVkJVRiwgTV9OT1dBSVQpOworCSAgICBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWhjX3BsYXRmb3JtX2RhdGEpLCBHRlBfQVRPTUlDKTsKIAlpZiAoYWhjLT5wbGF0Zm9ybV9kYXRhID09IE5VTEwpCiAJCXJldHVybiAoRU5PTUVNKTsKIAltZW1zZXQoYWhjLT5wbGF0Zm9ybV9kYXRhLCAwLCBzaXplb2Yoc3RydWN0IGFoY19wbGF0Zm9ybV9kYXRhKSk7CkBAIC0xMjY0LDcgKzEyNjQsNyBAQAogCQlpZiAoYWhjLT5wbGF0Zm9ybV9kYXRhLT5ob3N0KQogCQkJc2NzaV9ob3N0X3B1dChhaGMtPnBsYXRmb3JtX2RhdGEtPmhvc3QpOwogCi0JCWZyZWUoYWhjLT5wbGF0Zm9ybV9kYXRhLCBNX0RFVkJVRik7CisJCWtmcmVlKGFoYy0+cGxhdGZvcm1fZGF0YSk7CiAJfQogfQogCkBAIC0xMzc4LDcgKzEzNzgsNyBAQAogCQlpZiAoYWhjLT51bml0ID49IEFSUkFZX1NJWkUoYWljN3h4eF90YWdfaW5mbykpIHsKIAkJCWlmICh3YXJuZWRfdXNlciA9PSAwKSB7CiAKLQkJCQlwcmludGYoS0VSTl9XQVJOSU5HCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORwogImFpYzd4eHg6IFdBUk5JTkc6IEluc3VmZmljaWVudCB0YWdfaW5mbyBpbnN0YW5jZXNcbiIKICJhaWM3eHh4OiBmb3IgaW5zdGFsbGVkIGNvbnRyb2xsZXJzLiBVc2luZyBkZWZhdWx0c1xuIgogImFpYzd4eHg6IFBsZWFzZSB1cGRhdGUgdGhlIGFpYzd4eHhfdGFnX2luZm8gYXJyYXkgaW5cbiIKQEAgLTE0MjEsNyArMTQyMSw3IEBACiAJCWFoY19zZW5kX2FzeW5jKGFoYywgZGV2aW5mby5jaGFubmVsLCBkZXZpbmZvLnRhcmdldCwKIAkJCSAgICAgICBkZXZpbmZvLmx1biwgQUNfVFJBTlNGRVJfTkVHKTsKIAkJYWhjX3ByaW50X2RldmluZm8oYWhjLCAmZGV2aW5mbyk7Ci0JCXByaW50ZigiVGFnZ2VkIFF1ZXVpbmcgZW5hYmxlZC4gIERlcHRoICVkXG4iLCB0YWdzKTsKKwkJcHJpbnRrKCJUYWdnZWQgUXVldWluZyBlbmFibGVkLiAgRGVwdGggJWRcbiIsIHRhZ3MpOwogCX0gZWxzZSB7CiAJCWFoY19wbGF0Zm9ybV9zZXRfdGFncyhhaGMsIHNkZXYsICZkZXZpbmZvLCBBSENfUVVFVUVfTk9ORSk7CiAJCWFoY19zZW5kX2FzeW5jKGFoYywgZGV2aW5mby5jaGFubmVsLCBkZXZpbmZvLnRhcmdldCwKQEAgLTE3MzUsNyArMTczNSw3IEBACiAJCSAqIG5vdCBoYXZlIGJlZW4gZGlzcGF0Y2hlZCB0byB0aGUgY29udHJvbGxlciwgc28KIAkJICogb25seSBjaGVjayB0aGUgU0NCX0FDVElWRSBmbGFnIGZvciB0YWdnZWQgdHJhbnNhY3Rpb25zLgogCQkgKi8KLQkJcHJpbnRmKCJTQ0IgJWQgZG9uZSdkIHR3aWNlXG4iLCBzY2ItPmhzY2ItPnRhZyk7CisJCXByaW50aygiU0NCICVkIGRvbmUnZCB0d2ljZVxuIiwgc2NiLT5oc2NiLT50YWcpOwogCQlhaGNfZHVtcF9jYXJkX3N0YXRlKGFoYyk7CiAJCXBhbmljKCJTdG9wcGluZyBmb3Igc2FmZXR5Iik7CiAJfQpAQCAtMTc2NSw3ICsxNzY1LDcgQEAKICNpZmRlZiBBSENfREVCVUcKIAkJCWlmICgoYWhjX2RlYnVnICYgQUhDX1NIT1dfTUlTQykgIT0gMCkgewogCQkJCWFoY19wcmludF9wYXRoKGFoYywgc2NiKTsKLQkJCQlwcmludGYoIlNldCBDQU1fVU5DT1JfUEFSSVRZXG4iKTsKKwkJCQlwcmludGsoIlNldCBDQU1fVU5DT1JfUEFSSVRZXG4iKTsKIAkJCX0KICNlbmRpZgogCQkJYWhjX3NldF90cmFuc2FjdGlvbl9zdGF0dXMoc2NiLCBDQU1fVU5DT1JfUEFSSVRZKTsKQEAgLTE3ODMsMTIgKzE3ODMsMTIgQEAKIAkJCXVfaW50IGk7CiAKIAkJCWFoY19wcmludF9wYXRoKGFoYywgc2NiKTsKLQkJCXByaW50ZigiQ0RCOiIpOworCQkJcHJpbnRrKCJDREI6Iik7CiAJCQlmb3IgKGkgPSAwOyBpIDwgc2NiLT5pb19jdHgtPmNtZF9sZW47IGkrKykKLQkJCQlwcmludGYoIiAweCV4Iiwgc2NiLT5pb19jdHgtPmNtbmRbaV0pOwotCQkJcHJpbnRmKCJcbiIpOworCQkJCXByaW50aygiIDB4JXgiLCBzY2ItPmlvX2N0eC0+Y21uZFtpXSk7CisJCQlwcmludGsoIlxuIik7CiAJCQlhaGNfcHJpbnRfcGF0aChhaGMsIHNjYik7Ci0JCQlwcmludGYoIlNhdyB1bmRlcmZsb3cgKCVsZCBvZiAlbGQgYnl0ZXMpLiAiCisJCQlwcmludGsoIlNhdyB1bmRlcmZsb3cgKCVsZCBvZiAlbGQgYnl0ZXMpLiAiCiAJCQkgICAgICAgIlRyZWF0ZWQgYXMgZXJyb3JcbiIsCiAJCQkJYWhjX2dldF9yZXNpZHVhbChzY2IpLAogCQkJCWFoY19nZXRfdHJhbnNmZXJfbGVuZ3RoKHNjYikpOwpAQCAtMTgyMSw3ICsxODIxLDcgQEAKIAkJZGV2LT5jb21tYW5kc19zaW5jZV9pZGxlX29yX290YWcgPSAwOwogCiAJaWYgKChzY2ItPmZsYWdzICYgU0NCX1JFQ09WRVJZX1NDQikgIT0gMCkgewotCQlwcmludGYoIlJlY292ZXJ5IFNDQiBjb21wbGV0ZXNcbiIpOworCQlwcmludGsoIlJlY292ZXJ5IFNDQiBjb21wbGV0ZXNcbiIpOwogCQlpZiAoYWhjX2dldF90cmFuc2FjdGlvbl9zdGF0dXMoc2NiKSA9PSBDQU1fQkRSX1NFTlQKIAkJIHx8IGFoY19nZXRfdHJhbnNhY3Rpb25fc3RhdHVzKHNjYikgPT0gQ0FNX1JFUV9BQk9SVEVEKQogCQkJYWhjX3NldF90cmFuc2FjdGlvbl9zdGF0dXMoc2NiLCBDQU1fQ01EX1RJTUVPVVQpOwpAQCAtMTg4NiwxNCArMTg4NiwxNCBAQAogCQkJaWYgKGFoY19kZWJ1ZyAmIEFIQ19TSE9XX1NFTlNFKSB7CiAJCQkJaW50IGk7CiAKLQkJCQlwcmludGYoIkNvcGllZCAlZCBieXRlcyBvZiBzZW5zZSBkYXRhOiIsCisJCQkJcHJpbnRrKCJDb3BpZWQgJWQgYnl0ZXMgb2Ygc2Vuc2UgZGF0YToiLAogCQkJCSAgICAgICBzZW5zZV9zaXplKTsKIAkJCQlmb3IgKGkgPSAwOyBpIDwgc2Vuc2Vfc2l6ZTsgaSsrKSB7CiAJCQkJCWlmICgoaSAmIDB4RikgPT0gMCkKLQkJCQkJCXByaW50ZigiXG4iKTsKLQkJCQkJcHJpbnRmKCIweCV4ICIsIGNtZC0+c2Vuc2VfYnVmZmVyW2ldKTsKKwkJCQkJCXByaW50aygiXG4iKTsKKwkJCQkJcHJpbnRrKCIweCV4ICIsIGNtZC0+c2Vuc2VfYnVmZmVyW2ldKTsKIAkJCQl9Ci0JCQkJcHJpbnRmKCJcbiIpOworCQkJCXByaW50aygiXG4iKTsKIAkJCX0KICNlbmRpZgogCQl9CkBAIC0xOTE4LDcgKzE5MTgsNyBAQAogCQkJZGV2LT5vcGVuaW5ncyA9IDA7CiAvKgogCQkJYWhjX3ByaW50X3BhdGgoYWhjLCBzY2IpOwotCQkJcHJpbnRmKCJEcm9wcGluZyB0YWcgY291bnQgdG8gJWRcbiIsIGRldi0+YWN0aXZlKTsKKwkJCXByaW50aygiRHJvcHBpbmcgdGFnIGNvdW50IHRvICVkXG4iLCBkZXYtPmFjdGl2ZSk7CiAgKi8KIAkJCWlmIChkZXYtPmFjdGl2ZSA9PSBkZXYtPnRhZ3Nfb25fbGFzdF9xdWV1ZWZ1bGwpIHsKIApAQCAtMTkzNSw3ICsxOTM1LDcgQEAKIAkJCQkgPT0gQUhDX0xPQ0tfVEFHU19DT1VOVCkgewogCQkJCQlkZXYtPm1heHRhZ3MgPSBkZXYtPmFjdGl2ZTsKIAkJCQkJYWhjX3ByaW50X3BhdGgoYWhjLCBzY2IpOwotCQkJCQlwcmludGYoIkxvY2tpbmcgbWF4IHRhZyBjb3VudCBhdCAlZFxuIiwKKwkJCQkJcHJpbnRrKCJMb2NraW5nIG1heCB0YWcgY291bnQgYXQgJWRcbiIsCiAJCQkJCSAgICAgICBkZXYtPmFjdGl2ZSk7CiAJCQkJfQogCQkJfSBlbHNlIHsKQEAgLTIxMDAsMTAgKzIxMDAsMTAgQEAKIAlzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwgIkF0dGVtcHRpbmcgdG8gcXVldWUgYSVzIG1lc3NhZ2VcbiIsCiAJICAgICAgIGZsYWcgPT0gU0NCX0FCT1JUID8gIm4gQUJPUlQiIDogIiBUQVJHRVQgUkVTRVQiKTsKIAotCXByaW50ZigiQ0RCOiIpOworCXByaW50aygiQ0RCOiIpOwogCWZvciAoY2RiX2J5dGUgPSAwOyBjZGJfYnl0ZSA8IGNtZC0+Y21kX2xlbjsgY2RiX2J5dGUrKykKLQkJcHJpbnRmKCIgMHgleCIsIGNtZC0+Y21uZFtjZGJfYnl0ZV0pOwotCXByaW50ZigiXG4iKTsKKwkJcHJpbnRrKCIgMHgleCIsIGNtZC0+Y21uZFtjZGJfYnl0ZV0pOworCXByaW50aygiXG4iKTsKIAogCWFoY19sb2NrKGFoYywgJmZsYWdzKTsKIApAQCAtMjEyMSw3ICsyMTIxLDcgQEAKIAkJICogTm8gdGFyZ2V0IGRldmljZSBmb3IgdGhpcyBjb21tYW5kIGV4aXN0cywKIAkJICogc28gd2UgbXVzdCBub3Qgc3RpbGwgb3duIHRoZSBjb21tYW5kLgogCQkgKi8KLQkJcHJpbnRmKCIlczolZDolZDolZDogSXMgbm90IGFuIGFjdGl2ZSBkZXZpY2VcbiIsCisJCXByaW50aygiJXM6JWQ6JWQ6JWQ6IElzIG5vdCBhbiBhY3RpdmUgZGV2aWNlXG4iLAogCQkgICAgICAgYWhjX25hbWUoYWhjKSwgY21kLT5kZXZpY2UtPmNoYW5uZWwsIGNtZC0+ZGV2aWNlLT5pZCwKIAkJICAgICAgIGNtZC0+ZGV2aWNlLT5sdW4pOwogCQlyZXR2YWwgPSBTVUNDRVNTOwpAQCAtMjEzMyw3ICsyMTMzLDcgQEAKIAkJCQkgICAgICAgY21kLT5kZXZpY2UtPmNoYW5uZWwgKyAnQScsCiAJCQkJICAgICAgIGNtZC0+ZGV2aWNlLT5sdW4sCiAJCQkJICAgICAgIENBTV9SRVFfQUJPUlRFRCwgU0VBUkNIX0NPTVBMRVRFKSAhPSAwKSB7Ci0JCXByaW50ZigiJXM6JWQ6JWQ6JWQ6IENvbW1hbmQgZm91bmQgb24gdW50YWdnZWQgcXVldWVcbiIsCisJCXByaW50aygiJXM6JWQ6JWQ6JWQ6IENvbW1hbmQgZm91bmQgb24gdW50YWdnZWQgcXVldWVcbiIsCiAJCSAgICAgICBhaGNfbmFtZShhaGMpLCBjbWQtPmRldmljZS0+Y2hhbm5lbCwgY21kLT5kZXZpY2UtPmlkLAogCQkgICAgICAgY21kLT5kZXZpY2UtPmx1bik7CiAJCXJldHZhbCA9IFNVQ0NFU1M7CkBAIC0yMTg3LDcgKzIxODcsNyBAQAogCQlnb3RvIG5vX2NtZDsKIAl9CiAKLQlwcmludGYoIiVzOiBBdCB0aW1lIG9mIHJlY292ZXJ5LCBjYXJkIHdhcyAlc3BhdXNlZFxuIiwKKwlwcmludGsoIiVzOiBBdCB0aW1lIG9mIHJlY292ZXJ5LCBjYXJkIHdhcyAlc3BhdXNlZFxuIiwKIAkgICAgICAgYWhjX25hbWUoYWhjKSwgd2FzX3BhdXNlZCA/ICIiIDogIm5vdCAiKTsKIAlhaGNfZHVtcF9jYXJkX3N0YXRlKGFoYyk7CiAKQEAgLTIxOTksNyArMjE5OSw3IEBACiAJCQkJICAgICAgIHBlbmRpbmdfc2NiLT5oc2NiLT50YWcsCiAJCQkJICAgICAgIFJPTEVfSU5JVElBVE9SLCBDQU1fUkVRX0FCT1JURUQsCiAJCQkJICAgICAgIFNFQVJDSF9DT01QTEVURSkgPiAwKSB7Ci0JCQlwcmludGYoIiVzOiVkOiVkOiVkOiBDbWQgYWJvcnRlZCBmcm9tIFFJTkZJRk9cbiIsCisJCQlwcmludGsoIiVzOiVkOiVkOiVkOiBDbWQgYWJvcnRlZCBmcm9tIFFJTkZJRk9cbiIsCiAJCQkgICAgICAgYWhjX25hbWUoYWhjKSwgY21kLT5kZXZpY2UtPmNoYW5uZWwsCiAJCQkJCWNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1bik7CiAJCQlyZXR2YWwgPSBTVUNDRVNTOwpAQCAtMjMxMyw3ICsyMzEzLDcgQEAKIAkJYWhjX3FpbmZpZm9fcmVxdWV1ZV90YWlsKGFoYywgcGVuZGluZ19zY2IpOwogCQlhaGNfb3V0YihhaGMsIFNDQlBUUiwgc2F2ZWRfc2NicHRyKTsKIAkJYWhjX3ByaW50X3BhdGgoYWhjLCBwZW5kaW5nX3NjYik7Ci0JCXByaW50ZigiRGV2aWNlIGlzIGRpc2Nvbm5lY3RlZCwgcmUtcXVldWluZyBTQ0JcbiIpOworCQlwcmludGsoIkRldmljZSBpcyBkaXNjb25uZWN0ZWQsIHJlLXF1ZXVpbmcgU0NCXG4iKTsKIAkJd2FpdCA9IFRSVUU7CiAJfSBlbHNlIHsKIAkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBjbWQsICJVbmFibGUgdG8gZGVsaXZlciBtZXNzYWdlXG4iKTsKQEAgLTIzMzgsMTYgKzIzMzgsMTYgQEAKIAkJYWhjLT5wbGF0Zm9ybV9kYXRhLT5laF9kb25lID0gJmRvbmU7CiAJCWFoY191bmxvY2soYWhjLCAmZmxhZ3MpOwogCi0JCXByaW50ZigiUmVjb3ZlcnkgY29kZSBzbGVlcGluZ1xuIik7CisJCXByaW50aygiUmVjb3ZlcnkgY29kZSBzbGVlcGluZ1xuIik7CiAJCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZkb25lLCA1ICogSFopKSB7CiAJCQlhaGNfbG9jayhhaGMsICZmbGFncyk7CiAJCQlhaGMtPnBsYXRmb3JtX2RhdGEtPmVoX2RvbmUgPSBOVUxMOwogCQkJYWhjX3VubG9jayhhaGMsICZmbGFncyk7CiAKLQkJCXByaW50ZigiVGltZXIgRXhwaXJlZFxuIik7CisJCQlwcmludGsoIlRpbWVyIEV4cGlyZWRcbiIpOwogCQkJcmV0dmFsID0gRkFJTEVEOwogCQl9Ci0JCXByaW50ZigiUmVjb3ZlcnkgY29kZSBhd2FrZVxuIik7CisJCXByaW50aygiUmVjb3ZlcnkgY29kZSBhd2FrZVxuIik7CiAJfSBlbHNlCiAJCWFoY191bmxvY2soYWhjLCAmZmxhZ3MpOwogCXJldHVybiAocmV0dmFsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmggYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5oCmluZGV4IDU2ZjA3ZTUuLmJjYTBmYjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5oCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmgKQEAgLTM2OCwxMyArMzY4LDYgQEAKIAlyZXNvdXJjZV9zaXplX3QgCSBtZW1fYnVzYWRkcjsJLyogTWVtIEJhc2UgQWRkciAqLwogfTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqIE9TIFV0aWxpdHkgV3JhcHBlcnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgcHJpbnRmIHByaW50awotI2RlZmluZSBNX05PV0FJVCBHRlBfQVRPTUlDCi0jZGVmaW5lIE1fV0FJVE9LIDAKLSNkZWZpbmUgbWFsbG9jKHNpemUsIHR5cGUsIGZsYWdzKSBrbWFsbG9jKHNpemUsIGZsYWdzKQotI2RlZmluZSBmcmVlKHB0ciwgdHlwZSkga2ZyZWUocHRyKQotCiB2b2lkIGFoY19kZWxheShsb25nKTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbV9wY2kuYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtX3BjaS5jCmluZGV4IDc4ZmM3MGMuLmVlMDVlODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtX3BjaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtX3BjaS5jCkBAIC0yMjUsNyArMjI1LDcgQEAKIAkJYWhjX2dldF9wY2lfYnVzKHBjaSksCiAJCWFoY19nZXRfcGNpX3Nsb3QocGNpKSwKIAkJYWhjX2dldF9wY2lfZnVuY3Rpb24ocGNpKSk7Ci0JbmFtZSA9IG1hbGxvYyhzdHJsZW4oYnVmKSArIDEsIE1fREVWQlVGLCBNX05PV0FJVCk7CisJbmFtZSA9IGttYWxsb2Moc3RybGVuKGJ1ZikgKyAxLCBHRlBfQVRPTUlDKTsKIAlpZiAobmFtZSA9PSBOVUxMKQogCQlyZXR1cm4gKC1FTk9NRU0pOwogCXN0cmNweShuYW1lLCBidWYpOwpAQCAtNDEyLDcgKzQxMiw3IEBACiAJCSAqLwogCQlpZiAoYWhjX3BjaV90ZXN0X3JlZ2lzdGVyX2FjY2VzcyhhaGMpICE9IDApIHsKIAotCQkJcHJpbnRmKCJhaWM3eHh4OiBQQ0kgRGV2aWNlICVkOiVkOiVkICIKKwkJCXByaW50aygiYWljN3h4eDogUENJIERldmljZSAlZDolZDolZCAiCiAJCQkgICAgICAgImZhaWxlZCBtZW1vcnkgbWFwcGVkIHRlc3QuICBVc2luZyBQSU8uXG4iLAogCQkJICAgICAgIGFoY19nZXRfcGNpX2J1cyhhaGMtPmRldl9zb2Z0YyksCiAJCQkgICAgICAgYWhjX2dldF9wY2lfc2xvdChhaGMtPmRldl9zb2Z0YyksCkBAIC00MjUsNyArNDI1LDcgQEAKIAkJfSBlbHNlCiAJCQljb21tYW5kIHw9IFBDSU1fQ01EX01FTUVOOwogCX0gZWxzZSB7Ci0JCXByaW50ZigiYWljN3h4eDogUENJJWQ6JWQ6JWQgTUVNIHJlZ2lvbiAweCVsbHggIgorCQlwcmludGsoImFpYzd4eHg6IFBDSSVkOiVkOiVkIE1FTSByZWdpb24gMHglbGx4ICIKIAkJICAgICAgICJ1bmF2YWlsYWJsZS4gQ2Fubm90IG1lbW9yeSBtYXAgZGV2aWNlLlxuIiwKIAkJICAgICAgIGFoY19nZXRfcGNpX2J1cyhhaGMtPmRldl9zb2Z0YyksCiAJCSAgICAgICBhaGNfZ2V0X3BjaV9zbG90KGFoYy0+ZGV2X3NvZnRjKSwKQEAgLTQ0NCw3ICs0NDQsNyBAQAogCQkJYWhjLT5ic2guaW9wb3J0ID0gKHVfbG9uZyliYXNlOwogCQkJY29tbWFuZCB8PSBQQ0lNX0NNRF9QT1JURU47CiAJCX0gZWxzZSB7Ci0JCQlwcmludGYoImFpYzd4eHg6IFBDSSVkOiVkOiVkIElPIHJlZ2lvbiAweCVsbHhbMC4uMjU1XSAiCisJCQlwcmludGsoImFpYzd4eHg6IFBDSSVkOiVkOiVkIElPIHJlZ2lvbiAweCVsbHhbMC4uMjU1XSAiCiAJCQkgICAgICAgInVuYXZhaWxhYmxlLiBDYW5ub3QgbWFwIGRldmljZS5cbiIsCiAJCQkgICAgICAgYWhjX2dldF9wY2lfYnVzKGFoYy0+ZGV2X3NvZnRjKSwKIAkJCSAgICAgICBhaGNfZ2V0X3BjaV9zbG90KGFoYy0+ZGV2X3NvZnRjKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfcGNpLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X3BjaS5jCmluZGV4IDI3MDE0YjkuLjJiMTFhNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfcGNpLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9wY2kuYwpAQCAtNzUyLDcgKzc1Miw3IEBACiAJaWYgKChhaGMtPmZsYWdzICYgQUhDXzM5QklUX0FERFJFU1NJTkcpICE9IDApIHsKIAogCQlpZiAoYm9vdHZlcmJvc2UpCi0JCQlwcmludGYoIiVzOiBFbmFibGluZyAzOUJpdCBBZGRyZXNzaW5nXG4iLAorCQkJcHJpbnRrKCIlczogRW5hYmxpbmcgMzlCaXQgQWRkcmVzc2luZ1xuIiwKIAkJCSAgICAgICBhaGNfbmFtZShhaGMpKTsKIAkJZGV2Y29uZmlnIHw9IERBQ0VOOwogCX0KQEAgLTg5Niw3ICs4OTYsNyBAQAogCQkvKiBTZWUgaWYgc29tZW9uZSBlbHNlIHNldCB1cyB1cCBhbHJlYWR5ICovCiAJCWlmICgoYWhjLT5mbGFncyAmIEFIQ19OT19CSU9TX0lOSVQpID09IDAKIAkJICYmIHNjc2lzZXEgIT0gMCkgewotCQkJcHJpbnRmKCIlczogVXNpbmcgbGVmdCBvdmVyIEJJT1Mgc2V0dGluZ3NcbiIsCisJCQlwcmludGsoIiVzOiBVc2luZyBsZWZ0IG92ZXIgQklPUyBzZXR0aW5nc1xuIiwKIAkJCQlhaGNfbmFtZShhaGMpKTsKIAkJCWFoYy0+ZmxhZ3MgJj0gfkFIQ19VU0VERUZBVUxUUzsKIAkJCWFoYy0+ZmxhZ3MgfD0gQUhDX0JJT1NfRU5BQkxFRDsKQEAgLTExNTUsNyArMTE1NSw3IEBACiAJYWhjX291dGIoYWhjLCBDTFJJTlQsIENMUlBBUkVSUik7CiAJYWhjX291dGIoYWhjLCBDTFJJTlQsIENMUkJSS0FEUklOVCk7CiAJaWYgKGJvb3R2ZXJib3NlICYmIGVuYWJsZSkgewotCQlwcmludGYoIiVzOiBFeHRlcm5hbCBTUkFNLCAlcyBhY2Nlc3MlcywgJWRieXRlcy9TQ0JcbiIsCisJCXByaW50aygiJXM6IEV4dGVybmFsIFNSQU0sICVzIGFjY2VzcyVzLCAlZGJ5dGVzL1NDQlxuIiwKIAkJICAgICAgIGFoY19uYW1lKGFoYyksIGZhc3QgPyAiZmFzdCIgOiAic2xvdyIsIAogCQkgICAgICAgcGNoZWNrID8gIiwgcGFyaXR5IGNoZWNraW5nIGVuYWJsZWQiIDogIiIsCiAJCSAgICAgICBsYXJnZSA/IDY0IDogMzIpOwpAQCAtMTI5Miw3ICsxMjkyLDcgQEAKIAlpZiAoaGF2ZV9zZWVwcm9tKSB7CiAKIAkJaWYgKGJvb3R2ZXJib3NlKSAKLQkJCXByaW50ZigiJXM6IFJlYWRpbmcgU0VFUFJPTS4uLiIsIGFoY19uYW1lKGFoYykpOworCQkJcHJpbnRrKCIlczogUmVhZGluZyBTRUVQUk9NLi4uIiwgYWhjX25hbWUoYWhjKSk7CiAKIAkJZm9yICg7OykgewogCQkJdV9pbnQgc3RhcnRfYWRkcjsKQEAgLTEzMDksOSArMTMwOSw5IEBACiAJCQlpZiAoaGF2ZV9zZWVwcm9tICE9IDAgfHwgc2Quc2RfY2hpcCA9PSBDNTZfNjYpIHsKIAkJCQlpZiAoYm9vdHZlcmJvc2UpIHsKIAkJCQkJaWYgKGhhdmVfc2VlcHJvbSA9PSAwKQotCQkJCQkJcHJpbnRmICgiY2hlY2tzdW0gZXJyb3JcbiIpOworCQkJCQkJcHJpbnRrICgiY2hlY2tzdW0gZXJyb3JcbiIpOwogCQkJCQllbHNlCi0JCQkJCQlwcmludGYgKCJkb25lLlxuIik7CisJCQkJCQlwcmludGsgKCJkb25lLlxuIik7CiAJCQkJfQogCQkJCWJyZWFrOwogCQkJfQpAQCAtMTM2Miw5ICsxMzYyLDkgQEAKIAogCWlmICghaGF2ZV9zZWVwcm9tKSB7CiAJCWlmIChib290dmVyYm9zZSkKLQkJCXByaW50ZigiJXM6IE5vIFNFRVBST00gYXZhaWxhYmxlLlxuIiwgYWhjX25hbWUoYWhjKSk7CisJCQlwcmludGsoIiVzOiBObyBTRUVQUk9NIGF2YWlsYWJsZS5cbiIsIGFoY19uYW1lKGFoYykpOwogCQlhaGMtPmZsYWdzIHw9IEFIQ19VU0VERUZBVUxUUzsKLQkJZnJlZShhaGMtPnNlZXBfY29uZmlnLCBNX0RFVkJVRik7CisJCWtmcmVlKGFoYy0+c2VlcF9jb25maWcpOwogCQlhaGMtPnNlZXBfY29uZmlnID0gTlVMTDsKIAkJc2MgPSBOVUxMOwogCX0gZWxzZSB7CkBAIC0xMzk5LDcgKzEzOTksNyBAQAogCQlpZiAoKHNjLT5hZGFwdGVyX2NvbnRyb2wgJiBDRlNURVJNKSAhPSAwKQogCQkJKnN4ZnJjdGwxIHw9IFNUUFdFTjsKIAkJaWYgKGJvb3R2ZXJib3NlKQotCQkJcHJpbnRmKCIlczogTG93IGJ5dGUgdGVybWluYXRpb24gJXNhYmxlZFxuIiwKKwkJCXByaW50aygiJXM6IExvdyBieXRlIHRlcm1pbmF0aW9uICVzYWJsZWRcbiIsCiAJCQkgICAgICAgYWhjX25hbWUoYWhjKSwKIAkJCSAgICAgICAoKnN4ZnJjdGwxICYgU1RQV0VOKSA/ICJlbiIgOiAiZGlzIik7CiAJfQpAQCAtMTU2OSw3ICsxNTY5LDcgQEAKIAkJCQkJICAgICZlZXByb21fcHJlc2VudCk7CiAJCQlpZiAoKGFkYXB0ZXJfY29udHJvbCAmIENGU0VBVVRPVEVSTSkgPT0gMCkgewogCQkJCWlmIChib290dmVyYm9zZSkKLQkJCQkJcHJpbnRmKCIlczogTWFudWFsIFNFIFRlcm1pbmF0aW9uXG4iLAorCQkJCQlwcmludGsoIiVzOiBNYW51YWwgU0UgVGVybWluYXRpb25cbiIsCiAJCQkJCSAgICAgICBhaGNfbmFtZShhaGMpKTsKIAkJCQllbmFibGVTRUNfbG93ID0gKGFkYXB0ZXJfY29udHJvbCAmIENGU0VMT1dURVJNKTsKIAkJCQllbmFibGVTRUNfaGlnaCA9CkBAIC0xNTc3LDcgKzE1NzcsNyBAQAogCQkJfQogCQkJaWYgKChhZGFwdGVyX2NvbnRyb2wgJiBDRkFVVE9URVJNKSA9PSAwKSB7CiAJCQkJaWYgKGJvb3R2ZXJib3NlKQotCQkJCQlwcmludGYoIiVzOiBNYW51YWwgTFZEIFRlcm1pbmF0aW9uXG4iLAorCQkJCQlwcmludGsoIiVzOiBNYW51YWwgTFZEIFRlcm1pbmF0aW9uXG4iLAogCQkJCQkgICAgICAgYWhjX25hbWUoYWhjKSk7CiAJCQkJZW5hYmxlUFJJX2xvdyA9IChhZGFwdGVyX2NvbnRyb2wgJiBDRlNURVJNKTsKIAkJCQllbmFibGVQUklfaGlnaCA9IChhZGFwdGVyX2NvbnRyb2wgJiBDRldTVEVSTSk7CkBAIC0xNjA0LDE5ICsxNjA0LDE5IEBACiAKIAkJaWYgKGJvb3R2ZXJib3NlCiAJCSAmJiAoYWhjLT5mZWF0dXJlcyAmIEFIQ19VTFRSQTIpID09IDApIHsKLQkJCXByaW50ZigiJXM6IGludGVybmFsIDUwIGNhYmxlICVzIHByZXNlbnQiLAorCQkJcHJpbnRrKCIlczogaW50ZXJuYWwgNTAgY2FibGUgJXMgcHJlc2VudCIsCiAJCQkgICAgICAgYWhjX25hbWUoYWhjKSwKIAkJCSAgICAgICBpbnRlcm5hbDUwX3ByZXNlbnQgPyAiaXMiOiJub3QiKTsKIAogCQkJaWYgKChhaGMtPmZlYXR1cmVzICYgQUhDX1dJREUpICE9IDApCi0JCQkJcHJpbnRmKCIsIGludGVybmFsIDY4IGNhYmxlICVzIHByZXNlbnQiLAorCQkJCXByaW50aygiLCBpbnRlcm5hbCA2OCBjYWJsZSAlcyBwcmVzZW50IiwKIAkJCQkgICAgICAgaW50ZXJuYWw2OF9wcmVzZW50ID8gImlzIjoibm90Iik7Ci0JCQlwcmludGYoIlxuJXM6IGV4dGVybmFsIGNhYmxlICVzIHByZXNlbnRcbiIsCisJCQlwcmludGsoIlxuJXM6IGV4dGVybmFsIGNhYmxlICVzIHByZXNlbnRcbiIsCiAJCQkgICAgICAgYWhjX25hbWUoYWhjKSwKIAkJCSAgICAgICBleHRlcm5hbGNhYmxlX3ByZXNlbnQgPyAiaXMiOiJub3QiKTsKIAkJfQogCQlpZiAoYm9vdHZlcmJvc2UpCi0JCQlwcmludGYoIiVzOiBCSU9TIGVlcHJvbSAlcyBwcmVzZW50XG4iLAorCQkJcHJpbnRrKCIlczogQklPUyBlZXByb20gJXMgcHJlc2VudFxuIiwKIAkJCSAgICAgICBhaGNfbmFtZShhaGMpLCBlZXByb21fcHJlc2VudCA/ICJpcyIgOiAibm90Iik7CiAKIAkJaWYgKChhaGMtPmZsYWdzICYgQUhDX0lOVDUwX1NQRUVERkxFWCkgIT0gMCkgewpAQCAtMTY0Miw3ICsxNjQyLDcgQEAKIAkJICYmIChpbnRlcm5hbDUwX3ByZXNlbnQgIT0gMCkKIAkJICYmIChpbnRlcm5hbDY4X3ByZXNlbnQgIT0gMCkKIAkJICYmIChleHRlcm5hbGNhYmxlX3ByZXNlbnQgIT0gMCkpIHsKLQkJCXByaW50ZigiJXM6IElsbGVnYWwgY2FibGUgY29uZmlndXJhdGlvbiEhLiAiCisJCQlwcmludGsoIiVzOiBJbGxlZ2FsIGNhYmxlIGNvbmZpZ3VyYXRpb24hIS4gIgogCQkJICAgICAgICJPbmx5IHR3byBjb25uZWN0b3JzIG9uIHRoZSAiCiAJCQkgICAgICAgImFkYXB0ZXIgbWF5IGJlIHVzZWQgYXQgYSAiCiAJCQkgICAgICAgInRpbWUhXG4iLCBhaGNfbmFtZShhaGMpKTsKQEAgLTE2NjQsMTAgKzE2NjQsMTAgQEAKIAkJCWJyZGRhdCB8PSBCUkREQVQ2OwogCQkJaWYgKGJvb3R2ZXJib3NlKSB7CiAJCQkJaWYgKChhaGMtPmZsYWdzICYgQUhDX0lOVDUwX1NQRUVERkxFWCkgIT0gMCkKLQkJCQkJcHJpbnRmKCIlczogNjggcGluIHRlcm1pbmF0aW9uICIKKwkJCQkJcHJpbnRrKCIlczogNjggcGluIHRlcm1pbmF0aW9uICIKIAkJCQkJICAgICAgICJFbmFibGVkXG4iLCBhaGNfbmFtZShhaGMpKTsKIAkJCQllbHNlCi0JCQkJCXByaW50ZigiJXM6ICVzSGlnaCBieXRlIHRlcm1pbmF0aW9uICIKKwkJCQkJcHJpbnRrKCIlczogJXNIaWdoIGJ5dGUgdGVybWluYXRpb24gIgogCQkJCQkgICAgICAgIkVuYWJsZWRcbiIsIGFoY19uYW1lKGFoYyksCiAJCQkJCSAgICAgICBlbmFibGVTRUNfaGlnaCA/ICJTZWNvbmRhcnkgIgogCQkJCQkJCSAgICAgIDogIiIpOwpAQCAtMTY4MywxMCArMTY4MywxMCBAQAogCQkJCSpzeGZyY3RsMSB8PSBTVFBXRU47CiAJCQlpZiAoYm9vdHZlcmJvc2UpIHsKIAkJCQlpZiAoKGFoYy0+ZmxhZ3MgJiBBSENfSU5UNTBfU1BFRURGTEVYKSAhPSAwKQotCQkJCQlwcmludGYoIiVzOiA1MCBwaW4gdGVybWluYXRpb24gIgorCQkJCQlwcmludGsoIiVzOiA1MCBwaW4gdGVybWluYXRpb24gIgogCQkJCQkgICAgICAgIkVuYWJsZWRcbiIsIGFoY19uYW1lKGFoYykpOwogCQkJCWVsc2UKLQkJCQkJcHJpbnRmKCIlczogJXNMb3cgYnl0ZSB0ZXJtaW5hdGlvbiAiCisJCQkJCXByaW50aygiJXM6ICVzTG93IGJ5dGUgdGVybWluYXRpb24gIgogCQkJCQkgICAgICAgIkVuYWJsZWRcbiIsIGFoY19uYW1lKGFoYyksCiAJCQkJCSAgICAgICBlbmFibGVTRUNfbG93ID8gIlNlY29uZGFyeSAiCiAJCQkJCQkJICAgICA6ICIiKTsKQEAgLTE2OTYsNyArMTY5Niw3IEBACiAJCWlmIChlbmFibGVQUklfbG93ICE9IDApIHsKIAkJCSpzeGZyY3RsMSB8PSBTVFBXRU47CiAJCQlpZiAoYm9vdHZlcmJvc2UpCi0JCQkJcHJpbnRmKCIlczogUHJpbWFyeSBMb3cgQnl0ZSB0ZXJtaW5hdGlvbiAiCisJCQkJcHJpbnRrKCIlczogUHJpbWFyeSBMb3cgQnl0ZSB0ZXJtaW5hdGlvbiAiCiAJCQkJICAgICAgICJFbmFibGVkXG4iLCBhaGNfbmFtZShhaGMpKTsKIAkJfQogCkBAIC0xNzA5LDcgKzE3MDksNyBAQAogCQlpZiAoZW5hYmxlUFJJX2hpZ2ggIT0gMCkgewogCQkJYnJkZGF0IHw9IEJSRERBVDQ7CiAJCQlpZiAoYm9vdHZlcmJvc2UpCi0JCQkJcHJpbnRmKCIlczogUHJpbWFyeSBIaWdoIEJ5dGUgIgorCQkJCXByaW50aygiJXM6IFByaW1hcnkgSGlnaCBCeXRlICIKIAkJCQkgICAgICAgInRlcm1pbmF0aW9uIEVuYWJsZWRcbiIsCiAJCQkJICAgICAgIGFoY19uYW1lKGFoYykpOwogCQl9CkBAIC0xNzIxLDcgKzE3MjEsNyBAQAogCQkJKnN4ZnJjdGwxIHw9IFNUUFdFTjsKIAogCQkJaWYgKGJvb3R2ZXJib3NlKQotCQkJCXByaW50ZigiJXM6ICVzTG93IGJ5dGUgdGVybWluYXRpb24gRW5hYmxlZFxuIiwKKwkJCQlwcmludGsoIiVzOiAlc0xvdyBieXRlIHRlcm1pbmF0aW9uIEVuYWJsZWRcbiIsCiAJCQkJICAgICAgIGFoY19uYW1lKGFoYyksCiAJCQkJICAgICAgIChhaGMtPmZlYXR1cmVzICYgQUhDX1VMVFJBMikgPyAiUHJpbWFyeSAiCiAJCQkJCQkJCSAgICA6ICIiKTsKQEAgLTE3MzEsNyArMTczMSw3IEBACiAJCSAmJiAoYWhjLT5mZWF0dXJlcyAmIEFIQ19XSURFKSAhPSAwKSB7CiAJCQlicmRkYXQgfD0gQlJEREFUNjsKIAkJCWlmIChib290dmVyYm9zZSkKLQkJCQlwcmludGYoIiVzOiAlc0hpZ2ggYnl0ZSB0ZXJtaW5hdGlvbiBFbmFibGVkXG4iLAorCQkJCXByaW50aygiJXM6ICVzSGlnaCBieXRlIHRlcm1pbmF0aW9uIEVuYWJsZWRcbiIsCiAJCQkJICAgICAgIGFoY19uYW1lKGFoYyksCiAJCQkJICAgICAgIChhaGMtPmZlYXR1cmVzICYgQUhDX1VMVFJBMikKIAkJCQkgICAgID8gIlNlY29uZGFyeSAiIDogIiIpOwpAQCAtMTkzNywyOSArMTkzNywyOSBAQAogCXN0YXR1czEgPSBhaGNfcGNpX3JlYWRfY29uZmlnKGFoYy0+ZGV2X3NvZnRjLAogCQkJCSAgICAgIFBDSVJfU1RBVFVTICsgMSwgLypieXRlcyovMSk7CiAKLQlwcmludGYoIiVzOiBQQ0kgZXJyb3IgSW50ZXJydXB0IGF0IHNlcWFkZHIgPSAweCV4XG4iLAorCXByaW50aygiJXM6IFBDSSBlcnJvciBJbnRlcnJ1cHQgYXQgc2VxYWRkciA9IDB4JXhcbiIsCiAJICAgICAgYWhjX25hbWUoYWhjKSwKIAkgICAgICBhaGNfaW5iKGFoYywgU0VRQUREUjApIHwgKGFoY19pbmIoYWhjLCBTRVFBRERSMSkgPDwgOCkpOwogCiAJaWYgKHN0YXR1czEgJiBEUEUpIHsKIAkJYWhjLT5wY2lfdGFyZ2V0X3BlcnJfY291bnQrKzsKLQkJcHJpbnRmKCIlczogRGF0YSBQYXJpdHkgRXJyb3IgRGV0ZWN0ZWQgZHVyaW5nIGFkZHJlc3MgIgorCQlwcmludGsoIiVzOiBEYXRhIFBhcml0eSBFcnJvciBEZXRlY3RlZCBkdXJpbmcgYWRkcmVzcyAiCiAJCSAgICAgICAib3Igd3JpdGUgZGF0YSBwaGFzZVxuIiwgYWhjX25hbWUoYWhjKSk7CiAJfQogCWlmIChzdGF0dXMxICYgU1NFKSB7Ci0JCXByaW50ZigiJXM6IFNpZ25hbCBTeXN0ZW0gRXJyb3IgRGV0ZWN0ZWRcbiIsIGFoY19uYW1lKGFoYykpOworCQlwcmludGsoIiVzOiBTaWduYWwgU3lzdGVtIEVycm9yIERldGVjdGVkXG4iLCBhaGNfbmFtZShhaGMpKTsKIAl9CiAJaWYgKHN0YXR1czEgJiBSTUEpIHsKLQkJcHJpbnRmKCIlczogUmVjZWl2ZWQgYSBNYXN0ZXIgQWJvcnRcbiIsIGFoY19uYW1lKGFoYykpOworCQlwcmludGsoIiVzOiBSZWNlaXZlZCBhIE1hc3RlciBBYm9ydFxuIiwgYWhjX25hbWUoYWhjKSk7CiAJfQogCWlmIChzdGF0dXMxICYgUlRBKSB7Ci0JCXByaW50ZigiJXM6IFJlY2VpdmVkIGEgVGFyZ2V0IEFib3J0XG4iLCBhaGNfbmFtZShhaGMpKTsKKwkJcHJpbnRrKCIlczogUmVjZWl2ZWQgYSBUYXJnZXQgQWJvcnRcbiIsIGFoY19uYW1lKGFoYykpOwogCX0KIAlpZiAoc3RhdHVzMSAmIFNUQSkgewotCQlwcmludGYoIiVzOiBTaWduYWxlZCBhIFRhcmdldCBBYm9ydFxuIiwgYWhjX25hbWUoYWhjKSk7CisJCXByaW50aygiJXM6IFNpZ25hbGVkIGEgVGFyZ2V0IEFib3J0XG4iLCBhaGNfbmFtZShhaGMpKTsKIAl9CiAJaWYgKHN0YXR1czEgJiBEUFIpIHsKLQkJcHJpbnRmKCIlczogRGF0YSBQYXJpdHkgRXJyb3IgaGFzIGJlZW4gcmVwb3J0ZWQgdmlhIFBFUlIjXG4iLAorCQlwcmludGsoIiVzOiBEYXRhIFBhcml0eSBFcnJvciBoYXMgYmVlbiByZXBvcnRlZCB2aWEgUEVSUiNcbiIsCiAJCSAgICAgICBhaGNfbmFtZShhaGMpKTsKIAl9CiAKQEAgLTE5NjgsMTQgKzE5NjgsMTQgQEAKIAkJCSAgICAgc3RhdHVzMSwgLypieXRlcyovMSk7CiAKIAlpZiAoKHN0YXR1czEgJiAoRFBFfFNTRXxSTUF8UlRBfFNUQXxEUFIpKSA9PSAwKSB7Ci0JCXByaW50ZigiJXM6IExhdGNoZWQgUENJRVJSIGludGVycnVwdCB3aXRoICIKKwkJcHJpbnRrKCIlczogTGF0Y2hlZCBQQ0lFUlIgaW50ZXJydXB0IHdpdGggIgogCQkgICAgICAgIm5vIHN0YXR1cyBiaXRzIHNldFxuIiwgYWhjX25hbWUoYWhjKSk7IAogCX0gZWxzZSB7CiAJCWFoY19vdXRiKGFoYywgQ0xSSU5ULCBDTFJQQVJFUlIpOwogCX0KIAogCWlmIChhaGMtPnBjaV90YXJnZXRfcGVycl9jb3VudCA+IEFIQ19QQ0lfVEFSR0VUX1BFUlJfVEhSRVNIKSB7Ci0JCXByaW50ZigKKwkJcHJpbnRrKAogIiVzOiBXQVJOSU5HIFdBUk5JTkcgV0FSTklORyBXQVJOSU5HXG4iCiAiJXM6IFRvbyBtYW55IFBDSSBwYXJpdHkgZXJyb3JzIG9ic2VydmVkIGFzIGEgdGFyZ2V0LlxuIgogIiVzOiBTb21lIGRldmljZSBvbiB0aGlzIGJ1cyBpcyBnZW5lcmF0aW5nIGJhZCBwYXJpdHkuXG4iCkBAIC0yMzg2LDcgKzIzODYsNyBAQAogc3RhdGljIGludAogYWhjX3JhaWRfc2V0dXAoc3RydWN0IGFoY19zb2Z0YyAqYWhjKQogewotCXByaW50ZigiUkFJRCBmdW5jdGlvbmFsaXR5IHVuc3VwcG9ydGVkXG4iKTsKKwlwcmludGsoIlJBSUQgZnVuY3Rpb25hbGl0eSB1bnN1cHBvcnRlZFxuIik7CiAJcmV0dXJuIChFTlhJTyk7CiB9CiAKQEAgLTI0MDQsNyArMjQwNCw3IEBACiAJCWFoYy0+Y2hhbm5lbCA9ICdCJzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRmKCJhZGFwdGVyIGF0IHVuZXhwZWN0ZWQgc2xvdCAlZFxuIgorCQlwcmludGsoImFkYXB0ZXIgYXQgdW5leHBlY3RlZCBzbG90ICVkXG4iCiAJCSAgICAgICAidW5hYmxlIHRvIG1hcCB0byBhIGNoYW5uZWxcbiIsCiAJCSAgICAgICBhaGNfZ2V0X3BjaV9zbG90KHBjaSkpOwogCQlhaGMtPmNoYW5uZWwgPSAnQSc7CkBAIC0yNDI5LDcgKzI0MjksNyBAQAogCQlhaGMtPmNoYW5uZWwgPSAnQyc7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ZigiYWRhcHRlciBhdCB1bmV4cGVjdGVkIHNsb3QgJWRcbiIKKwkJcHJpbnRrKCJhZGFwdGVyIGF0IHVuZXhwZWN0ZWQgc2xvdCAlZFxuIgogCQkgICAgICAgInVuYWJsZSB0byBtYXAgdG8gYSBjaGFubmVsXG4iLAogCQkgICAgICAgYWhjX2dldF9wY2lfc2xvdChwY2kpKTsKIAkJYWhjLT5jaGFubmVsID0gJ0EnOwpAQCAtMjQ1OSw3ICsyNDU5LDcgQEAKIAkJYWhjLT5jaGFubmVsID0gJ0QnOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGYoImFkYXB0ZXIgYXQgdW5leHBlY3RlZCBzbG90ICVkXG4iCisJCXByaW50aygiYWRhcHRlciBhdCB1bmV4cGVjdGVkIHNsb3QgJWRcbiIKIAkJICAgICAgICJ1bmFibGUgdG8gbWFwIHRvIGEgY2hhbm5lbFxuIiwKIAkJICAgICAgIGFoY19nZXRfcGNpX3Nsb3QocGNpKSk7CiAJCWFoYy0+Y2hhbm5lbCA9ICdBJzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfcHJvYy5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9wcm9jLmMKaW5kZXggZTkyOTkxYS4uZjI1MjVmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9wcm9jLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9wcm9jLmMKQEAgLTI0OCwxMyArMjQ4LDEzIEBACiAJCWFoY19wYXVzZShhaGMpOwogCiAJaWYgKGxlbmd0aCAhPSBzaXplb2Yoc3RydWN0IHNlZXByb21fY29uZmlnKSkgewotCQlwcmludGYoImFoY19wcm9jX3dyaXRlX3NlZXByb206IGluY29ycmVjdCBidWZmZXIgc2l6ZVxuIik7CisJCXByaW50aygiYWhjX3Byb2Nfd3JpdGVfc2VlcHJvbTogaW5jb3JyZWN0IGJ1ZmZlciBzaXplXG4iKTsKIAkJZ290byBkb25lOwogCX0KIAogCWhhdmVfc2VlcHJvbSA9IGFoY192ZXJpZnlfY2tzdW0oKHN0cnVjdCBzZWVwcm9tX2NvbmZpZyopYnVmZmVyKTsKIAlpZiAoaGF2ZV9zZWVwcm9tID09IDApIHsKLQkJcHJpbnRmKCJhaGNfcHJvY193cml0ZV9zZWVwcm9tOiBja3N1bSB2ZXJpZmljYXRpb24gZmFpbGVkXG4iKTsKKwkJcHJpbnRrKCJhaGNfcHJvY193cml0ZV9zZWVwcm9tOiBja3N1bSB2ZXJpZmljYXRpb24gZmFpbGVkXG4iKTsKIAkJZ290byBkb25lOwogCX0KIApAQCAtMjkwLDI2ICsyOTAsMjUgQEAKIAkJc2Quc2RfREkgPSBESV8yODQwOwogCQloYXZlX3NlZXByb20gPSBUUlVFOwogCX0gZWxzZSB7Ci0JCXByaW50ZigiYWhjX3Byb2Nfd3JpdGVfc2VlcHJvbTogdW5zdXBwb3J0ZWQgYWRhcHRlciB0eXBlXG4iKTsKKwkJcHJpbnRrKCJhaGNfcHJvY193cml0ZV9zZWVwcm9tOiB1bnN1cHBvcnRlZCBhZGFwdGVyIHR5cGVcbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKCFoYXZlX3NlZXByb20pIHsKLQkJcHJpbnRmKCJhaGNfcHJvY193cml0ZV9zZWVwcm9tOiBObyBTZXJpYWwgRUVQUk9NXG4iKTsKKwkJcHJpbnRrKCJhaGNfcHJvY193cml0ZV9zZWVwcm9tOiBObyBTZXJpYWwgRUVQUk9NXG4iKTsKIAkJZ290byBkb25lOwogCX0gZWxzZSB7CiAJCXVfaW50IHN0YXJ0X2FkZHI7CiAKIAkJaWYgKGFoYy0+c2VlcF9jb25maWcgPT0gTlVMTCkgewotCQkJYWhjLT5zZWVwX2NvbmZpZyA9IG1hbGxvYyhzaXplb2YoKmFoYy0+c2VlcF9jb25maWcpLAotCQkJCQkJICBNX0RFVkJVRiwgTV9OT1dBSVQpOworCQkJYWhjLT5zZWVwX2NvbmZpZyA9IGttYWxsb2Moc2l6ZW9mKCphaGMtPnNlZXBfY29uZmlnKSwgR0ZQX0FUT01JQyk7CiAJCQlpZiAoYWhjLT5zZWVwX2NvbmZpZyA9PSBOVUxMKSB7Ci0JCQkJcHJpbnRmKCJhaWM3eHh4OiBVbmFibGUgdG8gYWxsb2NhdGUgc2VyaWFsICIKKwkJCQlwcmludGsoImFpYzd4eHg6IFVuYWJsZSB0byBhbGxvY2F0ZSBzZXJpYWwgIgogCQkJCSAgICAgICAiZWVwcm9tIGJ1ZmZlci4gIFdyaXRlIGZhaWxpbmdcbiIpOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KIAkJfQotCQlwcmludGYoImFpYzd4eHg6IFdyaXRpbmcgU2VyaWFsIEVFUFJPTVxuIik7CisJCXByaW50aygiYWljN3h4eDogV3JpdGluZyBTZXJpYWwgRUVQUk9NXG4iKTsKIAkJc3RhcnRfYWRkciA9IDMyICogKGFoYy0+Y2hhbm5lbCAtICdBJyk7CiAJCWFoY193cml0ZV9zZWVwcm9tKCZzZCwgKHVfaW50MTZfdCAqKWJ1ZmZlciwgc3RhcnRfYWRkciwKIAkJCQkgIHNpemVvZihzdHJ1Y3Qgc2VlcHJvbV9jb25maWcpLzIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHhfb2xkL2FpYzd4eHguc2VxIGIvZHJpdmVycy9zY3NpL2FpYzd4eHhfb2xkL2FpYzd4eHguc2VxCmluZGV4IGY2ZmM0YjcuLjU5OTdlN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4X29sZC9haWM3eHh4LnNlcQorKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eF9vbGQvYWljN3h4eC5zZXEKQEAgLTYxNSw3ICs2MTUsNyBAQAogCQkJICogd2VudCBlbXB0eSBhbmQgdGhlIG5leHQgYml0IG9mIGRhdGEgaXMgY29waWVkIGZyb20KIAkJCSAqIHRoZSBTQ1NJIGZpZm8gaW50byB0aGUgUENJIGZpZm8uICBJdCBzaG91bGQgb25seQogCQkJICogY29tZSBvbiB3aGVuIGJvdGggRklGT3MgKG1lYW5pbmcgdGhlIGVudGlyZSBGSUZPCi0JCQkgKiBjaGFpbikgYXJlIGVtdHB5LiAgU2luY2UgaXQgY2FuIHRha2UgdXAgdG8gNCBjeWNsZXMKKwkJCSAqIGNoYWluKSBhcmUgZW1wdHkuICBTaW5jZSBpdCBjYW4gdGFrZSB1cCB0byA0IGN5Y2xlcwogCQkJICogZm9yIG5ldyBkYXRhIHRvIGJlIGNvcGllZCBmcm9tIHRoZSBTQ1NJIGZpZm8gaW50bwogCQkJICogdGhlIFBDSSBmaWZvLCB0ZXN0aW5nIGZvciBGSUZPRU1QIHN0YXR1cyBmb3IgNAogCQkJICogZXh0cmEgdGltZXMgZ2l2ZXMgdGhlIG5lZWRlZCB0aW1lIGZvciBhbnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfc2VxLmMgYi9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3NlcS5jCmluZGV4IGQwMWRjYzYuLjc0Mzc0NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfc2VxLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9zZXEuYwpAQCAtNTg4LDcgKzU4OCw3IEBACiAgKiBhc2RfaW5pdF9jc2VxX3NjcmF0Y2ggLS0gc2V0dXAgYW5kIGluaXQgQ1NFUQogICogQGFzZF9oYTogcG9pbnRlciB0byBob3N0IGFkYXB0ZXIgc3RydWN0dXJlCiAgKgotICogU2V0dXAgYW5kIGluaXRpYWxpemUgQ2VudHJhbCBzZXF1ZW5jZXJzLiBJbml0aWFsaWF6ZSB0aGUgbW9kZQorICogU2V0dXAgYW5kIGluaXRpYWxpemUgQ2VudHJhbCBzZXF1ZW5jZXJzLiBJbml0aWFsaXplIHRoZSBtb2RlCiAgKiBpbmRlcGVuZGVudCBhbmQgZGVwZW5kZW50IHNjcmF0Y2ggcGFnZSB0byB0aGUgZGVmYXVsdCBzZXR0aW5ncy4KICAqLwogc3RhdGljIHZvaWQgYXNkX2luaXRfY3NlcV9zY3JhdGNoKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEpCkBAIC03ODIsNyArNzgyLDcgQEAKIAlhc2Rfd3JpdGVfcmVnX3dvcmQoYXNkX2hhLCBMbVNFUV9PT0JfSU5UX0VOQUJMRVMobHNlcSksIDApOwogCS8qCiAJICogU2V0IHRoZSBkZXNpcmVkIGludGVydmFsIGJldHdlZW4gdHJhbnNtaXNzaW9ucyBvZiB0aGUgTk9USUZZCi0JICogKEVOQUJMRSBTUElOVVApIHByaW1pdGl2ZS4gIE11c3QgYmUgaW5pdGlsaXplZCB0byB2YWwgLSAxLgorCSAqIChFTkFCTEUgU1BJTlVQKSBwcmltaXRpdmUuICBNdXN0IGJlIGluaXRpYWxpemVkIHRvIHZhbCAtIDEuCiAJICovCiAJYXNkX3dyaXRlX3JlZ193b3JkKGFzZF9oYSwgTG1TRVFfTk9USUZZX1RJTUVSX1RJTUVPVVQobHNlcSksCiAJCQkgICBBU0RfTk9USUZZX1RJTUVPVVQgLSAxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfdGFzay5jIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF90YXNrLmMKaW5kZXggNzVkMjBmNy4uNTMyZDIxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF90YXNrLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF90YXNrLmMKQEAgLTIyMyw3ICsyMjMsNyBAQAogCXN3aXRjaCAob3Bjb2RlKSB7CiAJY2FzZSBUQ19OT19FUlJPUjoKIAkJdHMtPnJlc3AgPSBTQVNfVEFTS19DT01QTEVURTsKLQkJdHMtPnN0YXQgPSBTQU1fR09PRDsKKwkJdHMtPnN0YXQgPSBTQU1fU1RBVF9HT09EOwogCQlicmVhazsKIAljYXNlIFRDX1VOREVSUlVOOgogCQl0cy0+cmVzcCA9IFNBU19UQVNLX0NPTVBMRVRFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3IuaCBiL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyLmgKaW5kZXggY2U1MzcxYi4uNDc1YzMxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3IuaAorKysgYi9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zci5oCkBAIC00MywyMSArNDMsMjcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0KIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlOwogLypUaGUgbGltaXQgb2Ygb3V0c3RhbmRpbmcgc2NzaSBjb21tYW5kIHRoYXQgZmlybXdhcmUgY2FuIGhhbmRsZSovCiAjZGVmaW5lIEFSQ01TUl9NQVhfT1VUU1RBTkRJTkdfQ01ECQkJCQkJMjU2CiAjZGVmaW5lIEFSQ01TUl9NQVhfRlJFRUNDQl9OVU0JCQkJCQkJMzIwCi0jZGVmaW5lIEFSQ01TUl9EUklWRVJfVkVSU0lPTgkJICAgICAiRHJpdmVyIFZlcnNpb24gMS4yMC4wMC4xNSAyMDA4LzExLzAzIgorI2RlZmluZSBBUkNNU1JfRFJJVkVSX1ZFUlNJT04JCSAgICAgIkRyaXZlciBWZXJzaW9uIDEuMjAuMDAuMTUgMjAxMC8wMi8wMiIKICNkZWZpbmUgQVJDTVNSX1NDU0lfSU5JVElBVE9SX0lECQkJCQkJMjU1CiAjZGVmaW5lIEFSQ01TUl9NQVhfWEZFUl9TRUNUT1JTCQkJCQkJCTUxMgogI2RlZmluZSBBUkNNU1JfTUFYX1hGRVJfU0VDVE9SU19CCQkJCQkJNDA5NgorI2RlZmluZSBBUkNNU1JfTUFYX1hGRVJfU0VDVE9SU19DCQkJCQkJMzA0CiAjZGVmaW5lIEFSQ01TUl9NQVhfVEFSR0VUSUQJCQkJCQkJMTcKICNkZWZpbmUgQVJDTVNSX01BWF9UQVJHRVRMVU4JCQkJCQkJOAogI2RlZmluZSBBUkNNU1JfTUFYX0NNRF9QRVJMVU4JCSAgICAgICAgICAgICAgICAgQVJDTVNSX01BWF9PVVRTVEFORElOR19DTUQKICNkZWZpbmUgQVJDTVNSX01BWF9RQlVGRkVSCQkJCQkJCTQwOTYKLSNkZWZpbmUgQVJDTVNSX01BWF9TR19FTlRSSUVTCQkJCQkJCTM4CisjZGVmaW5lIEFSQ01TUl9ERUZBVUxUX1NHX0VOVFJJRVMJCQkJCQkzOAogI2RlZmluZSBBUkNNU1JfTUFYX0hCQl9QT1NUUVVFVUUJCQkJCQkyNjQKKyNkZWZpbmUgQVJDTVNSX01BWF9YRkVSX0xFTgkJCQkJCQkweDI2MDAwIC8qIDE1MksgKi8KKyNkZWZpbmUgQVJDTVNSX0NEQl9TR19QQUdFX0xFTkdUSAkJCQkJCTI1NiAKKyNkZWZpbmUgU0NTSV9DTURfQVJFQ0FfU1BFQ0lGSUMJCQkJCQkweEUxCisjaWZuZGVmIFBDSV9ERVZJQ0VfSURfQVJFQ0FfMTg4MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSRUNBXzE4ODAgMHgxODgwCisgI2VuZGlmCiAvKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKioKQEAgLTEzMiwzNSArMTM4LDI4IEBACiAjZGVmaW5lIEFSQ01TUl9NRVNTQUdFX0ZMVVNIX0FEQVBURVJfQ0FDSEUgXAogCUFSRUNBX1NBVEFfUkFJRCB8IEZVTkNUSU9OX0ZMVVNIX0FEQVBURVJfQ0FDSEUKIC8qIEFSRUNBIElPQ1RMIFJldHVybkNvZGUgKi8KLSNkZWZpbmUgQVJDTVNSX01FU1NBR0VfUkVUVVJOQ09ERV9PSyAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBBUkNNU1JfTUVTU0FHRV9SRVRVUk5DT0RFX0VSUk9SICAgICAgICAgICAweDAwMDAwMDA2Ci0jZGVmaW5lIEFSQ01TUl9NRVNTQUdFX1JFVFVSTkNPREVfM0YgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgQVJDTVNSX01FU1NBR0VfUkVUVVJOQ09ERV9PSwkJMHgwMDAwMDAwMQorI2RlZmluZSBBUkNNU1JfTUVTU0FHRV9SRVRVUk5DT0RFX0VSUk9SCQkweDAwMDAwMDA2CisjZGVmaW5lIEFSQ01TUl9NRVNTQUdFX1JFVFVSTkNPREVfM0YJCTB4MDAwMDAwM0YKICNkZWZpbmUgQVJDTVNSX01FU1NBR0VfUkVUVVJOQ09ERV9CVVNfSEFOR19PTgkweDAwMDAwMDg4CiAvKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiogICBzdHJ1Y3R1cmUgZm9yIGhvbGRpbmcgRE1BIGFkZHJlc3MgZGF0YQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KKyNkZWZpbmUgSVNfRE1BNjQJCQkoc2l6ZW9mKGRtYV9hZGRyX3QpID09IDgpCiAjZGVmaW5lIElTX1NHNjRfQUREUiAgICAgICAgICAgICAgICAweDAxMDAwMDAwIC8qIGJpdDI0ICovCiBzdHJ1Y3QgIFNHMzJFTlRSWQogewogCV9fbGUzMgkJCQkJbGVuZ3RoOwogCV9fbGUzMgkJCQkJYWRkcmVzczsKLX07Cit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogc3RydWN0ICBTRzY0RU5UUlkKIHsKIAlfX2xlMzIJCQkJCWxlbmd0aDsKIAlfX2xlMzIJCQkJCWFkZHJlc3M7CiAJX19sZTMyCQkJCQlhZGRyZXNzaGlnaDsKLX07Ci1zdHJ1Y3QgU0dFTlRSWV9VTklPTgotewotCXVuaW9uCi0JewotCQlzdHJ1Y3QgU0czMkVOVFJZICAgICAgICAgICAgc2czMmVudHJ5OwotCQlzdHJ1Y3QgU0c2NEVOVFJZICAgICAgICAgICAgc2c2NGVudHJ5OwotCX11OwotfTsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAvKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoqICAgICAgUSBCdWZmZXIgb2YgSU9QIE1lc3NhZ2UgVHJhbnNmZXIKQEAgLTE4Nyw2ICsxODYsOSBAQAogCWNoYXIgICAgICAgICAgbW9kZWxbOF07CQkJLyoxNSwgNjAtNjcqLwogCWNoYXIgICAgICAgICAgZmlybXdhcmVfdmVyWzE2XTsgICAgIAkvKjE3LCA2OC04MyovCiAJY2hhciAgICAgICAgICBkZXZpY2VfbWFwWzE2XTsJCS8qMjEsIDg0LTk5Ki8KKwl1aW50MzJfdAkJY2ZnVmVyc2lvbjsgICAgICAgICAgICAgICAJLyoyNSwxMDAtMTAzIEFkZGVkIGZvciBjaGVja2luZyBvZiBuZXcgZmlybXdhcmUgY2FwYWJpbGl0eSovCisJdWludDhfdAkJY2ZnU2VyaWFsWzE2XTsgICAgICAgICAgIAkvKjI2LDEwNC0xMTkqLworCXVpbnQzMl90CQljZmdQaWNTdGF0dXM7ICAgICAgICAgICAgCS8qMzAsMTIwLTEyMyovCQogfTsKIC8qIHNpZ25hdHVyZSBvZiBzZXQgYW5kIGdldCBmaXJtd2FyZSBjb25maWcgKi8KICNkZWZpbmUgQVJDTVNSX1NJR05BVFVSRV9HRVRfQ09ORklHCQkgICAgICAweDg3OTc0MDYwCkBAIC0yMTAsOSArMjEyLDE1IEBACiAjZGVmaW5lIEFSQ01TUl9DQ0JQT1NUX0ZMQUdfU0dMX0JTSVpFICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCiAjZGVmaW5lIEFSQ01TUl9DQ0JQT1NUX0ZMQUdfSUFNX0JJT1MgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCiAjZGVmaW5lIEFSQ01TUl9DQ0JSRVBMWV9GTEFHX0lBTV9CSU9TICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIEFSQ01TUl9DQ0JSRVBMWV9GTEFHX0VSUk9SICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIEFSQ01TUl9DQ0JSRVBMWV9GTEFHX0VSUk9SX01PREUwICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIEFSQ01TUl9DQ0JSRVBMWV9GTEFHX0VSUk9SX01PREUxICAgICAgICAgICAgICAweDAwMDAwMDAxCiAvKiBvdXRib3VuZCBmaXJtd2FyZSBvayAqLwogI2RlZmluZSBBUkNNU1JfT1VUQk9VTkRfTUVTRzFfRklSTVdBUkVfT0sgICAgICAgICAgICAgMHg4MDAwMDAwMAorLyogQVJDLTE2ODAgQnVzIFJlc2V0Ki8KKyNkZWZpbmUgQVJDTVNSX0FSQzE2ODBfQlVTX1JFU0VUCQkJCTB4MDAwMDAwMDMKKy8qIEFSQy0xODgwIEJ1cyBSZXNldCovCisjZGVmaW5lIEFSQ01TUl9BUkMxODgwX1JFU0VUX0FEQVBURVIJCQkJMHgwMDAwMDAyNAorI2RlZmluZSBBUkNNU1JfQVJDMTg4MF9EaWFnV3JpdGVfRU5BQkxFCQkJMHgwMDAwMDA4MAogCiAvKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNjQsMTEgKzI3Miw2NiBAQAogCiAvKiBkYXRhIHR1bm5lbCBidWZmZXIgYmV0d2VlbiB1c2VyIHNwYWNlIHByb2dyYW0gYW5kIGl0cyBmaXJtd2FyZSAqLwogLyogdXNlciBzcGFjZSBkYXRhIHRvIGlvcCAxMjhieXRlcyAqLwotI2RlZmluZSBBUkNNU1JfSU9DVExfV0JVRkZFUgkJCSAgICAgIDB4MDAwMGZlMDAKKyNkZWZpbmUgQVJDTVNSX01FU1NBR0VfV0JVRkZFUgkJCSAgICAgIDB4MDAwMGZlMDAKIC8qIGlvcCBkYXRhIHRvIHVzZXIgc3BhY2UgMTI4Ynl0ZXMgKi8KLSNkZWZpbmUgQVJDTVNSX0lPQ1RMX1JCVUZGRVIJCQkgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEFSQ01TUl9NRVNTQUdFX1JCVUZGRVIJCQkgICAgICAweDAwMDBmZjAwCiAvKiBpb3AgbWVzc2FnZV9yd2J1ZmZlciBmb3IgbWVzc2FnZSBjb21tYW5kICovCi0jZGVmaW5lIEFSQ01TUl9NU0dDT0RFX1JXQlVGRkVSCQkJICAgICAgMHgwMDAwZmEwMAorI2RlZmluZSBBUkNNU1JfTUVTU0FHRV9SV0JVRkZFUgkJCSAgICAgIDB4MDAwMGZhMDAKKy8qIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiAgICAgICAgICAgICAgICBTUEVDLiBmb3IgQXJlY2EgSEJDIGFkYXB0ZXIKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKyNkZWZpbmUgQVJDTVNSX0hCQ19JU1JfVEhST1RUTElOR19MRVZFTAkJMTIKKyNkZWZpbmUgQVJDTVNSX0hCQ19JU1JfTUFYX0RPTkVfUVVFVUUJCTIwCisvKiBIb3N0IEludGVycnVwdCBNYXNrICovCisjZGVmaW5lIEFSQ01TUl9IQkNNVV9VVElMSVRZX0FfSVNSX01BU0sJCTB4MDAwMDAwMDEgLyogV2hlbiBjbGVhciwgdGhlIFV0aWxpdHlfQSBpbnRlcnJ1cHQgcm91dGVzIHRvIHRoZSBob3N0LiovCisjZGVmaW5lIEFSQ01TUl9IQkNNVV9PVVRCT1VORF9ET09SQkVMTF9JU1JfTUFTSwkweDAwMDAwMDA0IC8qIFdoZW4gY2xlYXIsIHRoZSBHZW5lcmFsIE91dGJvdW5kIERvb3JiZWxsIGludGVycnVwdCByb3V0ZXMgdG8gdGhlIGhvc3QuKi8KKyNkZWZpbmUgQVJDTVNSX0hCQ01VX09VVEJPVU5EX1BPU1RRVUVVRV9JU1JfTUFTSwkweDAwMDAwMDA4IC8qIFdoZW4gY2xlYXIsIHRoZSBPdXRib3VuZCBQb3N0IExpc3QgRklGTyBOb3QgRW1wdHkgaW50ZXJydXB0IHJvdXRlcyB0byB0aGUgaG9zdC4qLworI2RlZmluZSBBUkNNU1JfSEJDTVVfQUxMX0lOVE1BU0tFTkFCTEUJCTB4MDAwMDAwMEQgLyogZGlzYWJsZSBhbGwgSVNSICovCisvKiBIb3N0IEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgQVJDTVNSX0hCQ01VX1VUSUxJVFlfQV9JU1IJCQkweDAwMDAwMDAxCisJLyoKKwkqKiBTZXQgd2hlbiB0aGUgVXRpbGl0eV9BIEludGVycnVwdCBiaXQgaXMgc2V0IGluIHRoZSBPdXRib3VuZCBEb29yYmVsbCBSZWdpc3Rlci4KKwkqKiBJdCBjbGVhcnMgYnkgd3JpdGluZyBhIDEgdG8gdGhlIFV0aWxpdHlfQSBiaXQgaW4gdGhlIE91dGJvdW5kIERvb3JiZWxsIENsZWFyIFJlZ2lzdGVyIG9yIHRocm91Z2ggYXV0b21hdGljIGNsZWFyaW5nIChpZiBlbmFibGVkKS4KKwkqLworI2RlZmluZSBBUkNNU1JfSEJDTVVfT1VUQk9VTkRfRE9PUkJFTExfSVNSCQkweDAwMDAwMDA0CisJLyoKKwkqKiBTZXQgaWYgT3V0Ym91bmQgRG9vcmJlbGwgcmVnaXN0ZXIgYml0cyAzMDoxIGhhdmUgYSBub24temVybworCSoqIHZhbHVlLiBUaGlzIGJpdCBjbGVhcnMgb25seSB3aGVuIE91dGJvdW5kIERvb3JiZWxsIGJpdHMKKwkqKiAzMDoxIGFyZSBBTEwgY2xlYXIuIE9ubHkgYSB3cml0ZSB0byB0aGUgT3V0Ym91bmQgRG9vcmJlbGwKKwkqKiBDbGVhciByZWdpc3RlciBjbGVhcnMgYml0cyBpbiB0aGUgT3V0Ym91bmQgRG9vcmJlbGwgcmVnaXN0ZXIuCisJKi8KKyNkZWZpbmUgQVJDTVNSX0hCQ01VX09VVEJPVU5EX1BPU1RRVUVVRV9JU1IJMHgwMDAwMDAwOAorCS8qCisJKiogU2V0IHdoZW5ldmVyIHRoZSBPdXRib3VuZCBQb3N0IExpc3QgUHJvZHVjZXIvQ29uc3VtZXIKKwkqKiBSZWdpc3RlciAoRklGTykgaXMgbm90IGVtcHR5LiBJdCBjbGVhcnMgd2hlbiB0aGUgT3V0Ym91bmQKKwkqKiBQb3N0IExpc3QgRklGTyBpcyBlbXB0eS4KKwkqLworI2RlZmluZSBBUkNNU1JfSEJDTVVfU0FTX0FMTF9JTlQJCQkweDAwMDAwMDEwCisJLyoKKwkqKiBUaGlzIGJpdCBpbmRpY2F0ZXMgYSBTQVMgaW50ZXJydXB0IGZyb20gYSBzb3VyY2UgZXh0ZXJuYWwgdG8KKwkqKiB0aGUgUENJZSBjb3JlLiBUaGlzIGJpdCBpcyBub3QgbWFza2FibGUuCisJKi8KKwkvKiBEb29yQmVsbCovCisjZGVmaW5lIEFSQ01TUl9IQkNNVV9EUlYySU9QX0RBVEFfV1JJVEVfT0sJCQkweDAwMDAwMDAyCisjZGVmaW5lIEFSQ01TUl9IQkNNVV9EUlYySU9QX0RBVEFfUkVBRF9PSwkJCTB4MDAwMDAwMDQKKwkvKmluYm91bmQgbWVzc2FnZSAwIHJlYWR5Ki8KKyNkZWZpbmUgQVJDTVNSX0hCQ01VX0RSVjJJT1BfTUVTU0FHRV9DTURfRE9ORQkJMHgwMDAwMDAwOAorCS8qbW9yZSB0aGFuIDEyIHJlcXVlc3QgY29tcGxldGVkIGluIGEgdGltZSovCisjZGVmaW5lIEFSQ01TUl9IQkNNVV9EUlYySU9QX1BPU1RRVUVVRV9USFJPVFRMSU5HCQkweDAwMDAwMDEwCisjZGVmaW5lIEFSQ01TUl9IQkNNVV9JT1AyRFJWX0RBVEFfV1JJVEVfT0sJCQkweDAwMDAwMDAyCisJLypvdXRib3VuZCBEQVRBIFdSSVRFIGlzciBkb29yIGJlbGwgY2xlYXIqLworI2RlZmluZSBBUkNNU1JfSEJDTVVfSU9QMkRSVl9EQVRBX1dSSVRFX0RPT1JCRUxMX0NMRUFSCTB4MDAwMDAwMDIKKyNkZWZpbmUgQVJDTVNSX0hCQ01VX0lPUDJEUlZfREFUQV9SRUFEX09LCQkJMHgwMDAwMDAwNAorCS8qb3V0Ym91bmQgREFUQSBSRUFEIGlzciBkb29yIGJlbGwgY2xlYXIqLworI2RlZmluZSBBUkNNU1JfSEJDTVVfSU9QMkRSVl9EQVRBX1JFQURfRE9PUkJFTExfQ0xFQVIJMHgwMDAwMDAwNAorCS8qb3V0Ym91bmQgbWVzc2FnZSAwIHJlYWR5Ki8KKyNkZWZpbmUgQVJDTVNSX0hCQ01VX0lPUDJEUlZfTUVTU0FHRV9DTURfRE9ORQkJMHgwMDAwMDAwOAorCS8qb3V0Ym91bmQgbWVzc2FnZSBjbWQgaXNyIGRvb3IgYmVsbCBjbGVhciovCisjZGVmaW5lIEFSQ01TUl9IQkNNVV9JT1AyRFJWX01FU1NBR0VfQ01EX0RPTkVfRE9PUkJFTExfQ0xFQVIJMHgwMDAwMDAwOAorCS8qQVJDTVNSX0hCQU1VX01FU1NBR0VfRklSTVdBUkVfT0sqLworI2RlZmluZSBBUkNNU1JfSEJDTVVfTUVTU0FHRV9GSVJNV0FSRV9PSwkJCTB4ODAwMDAwMDAKIC8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqKiAgICBBUkVDQSBTQ1NJIENPTU1BTkQgREVTQ1JJUFRPUiBCTE9DSyBzaXplIDB4MUY4ICg1MDQpCkBAIC0yOTAsNyArMzUzLDcgQEAKICNkZWZpbmUgQVJDTVNSX0NEQl9GTEFHX0hFQURRICAgICAgICAgICAgICAweDA4CiAjZGVmaW5lIEFSQ01TUl9DREJfRkxBR19PUkRFUkVEUSAgICAgICAgICAgMHgxMAogCi0JdWludDhfdAkJCQkJCQlSZXNlcnZlZDE7CisJdWludDhfdAkJCQkJCQltc2dQYWdlczsKIAl1aW50MzJfdAkJCQkJCUNvbnRleHQ7CiAJdWludDMyX3QJCQkJCQlEYXRhTGVuZ3RoOwogCXVpbnQ4X3QJCQkJCQkJQ2RiWzE2XTsKQEAgLTMwMyw4ICszNjYsOCBAQAogCXVpbnQ4X3QJCQkJCQkJU2Vuc2VEYXRhWzE1XTsKIAl1bmlvbgogCXsKLQkJc3RydWN0IFNHMzJFTlRSWSAgICAgICAgICAgICAgICBzZzMyZW50cnlbQVJDTVNSX01BWF9TR19FTlRSSUVTXTsKLQkJc3RydWN0IFNHNjRFTlRSWSAgICAgICAgICAgICAgICBzZzY0ZW50cnlbQVJDTVNSX01BWF9TR19FTlRSSUVTXTsKKwkJc3RydWN0IFNHMzJFTlRSWSAgICAgICAgICAgICAgICBzZzMyZW50cnlbMV07CisJCXN0cnVjdCBTRzY0RU5UUlkgICAgICAgICAgICAgICAgc2c2NGVudHJ5WzFdOwogCX0gdTsKIH07CiAvKgpAQCAtMzQ0LDE1ICs0MDcsODkgQEAKIAl1aW50MzJfdAlkb25lX3FidWZmZXJbQVJDTVNSX01BWF9IQkJfUE9TVFFVRVVFXTsKIAl1aW50MzJfdAlwb3N0cV9pbmRleDsKIAl1aW50MzJfdAlkb25lcV9pbmRleDsKLQl1aW50MzJfdAkJX19pb21lbSAqZHJ2MmlvcF9kb29yYmVsbF9yZWc7Ci0JdWludDMyX3QJCV9faW9tZW0gKmRydjJpb3BfZG9vcmJlbGxfbWFza19yZWc7Ci0JdWludDMyX3QJCV9faW9tZW0gKmlvcDJkcnZfZG9vcmJlbGxfcmVnOwotCXVpbnQzMl90CQlfX2lvbWVtICppb3AyZHJ2X2Rvb3JiZWxsX21hc2tfcmVnOwotCXVpbnQzMl90CQlfX2lvbWVtICptc2djb2RlX3J3YnVmZmVyX3JlZzsKLQl1aW50MzJfdAkJX19pb21lbSAqaW9jdGxfd2J1ZmZlcl9yZWc7Ci0JdWludDMyX3QJCV9faW9tZW0gKmlvY3RsX3JidWZmZXJfcmVnOworCXVpbnQzMl90CQlfX2lvbWVtICpkcnYyaW9wX2Rvb3JiZWxsOworCXVpbnQzMl90CQlfX2lvbWVtICpkcnYyaW9wX2Rvb3JiZWxsX21hc2s7CisJdWludDMyX3QJCV9faW9tZW0gKmlvcDJkcnZfZG9vcmJlbGw7CisJdWludDMyX3QJCV9faW9tZW0gKmlvcDJkcnZfZG9vcmJlbGxfbWFzazsKKwl1aW50MzJfdAkJX19pb21lbSAqbWVzc2FnZV9yd2J1ZmZlcjsKKwl1aW50MzJfdAkJX19pb21lbSAqbWVzc2FnZV93YnVmZmVyOworCXVpbnQzMl90CQlfX2lvbWVtICptZXNzYWdlX3JidWZmZXI7CiB9OwotCisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiBMU0kKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3N0cnVjdCBNZXNzYWdlVW5pdF9DeworCXVpbnQzMl90CW1lc3NhZ2VfdW5pdF9zdGF0dXM7CQkJLyowMDAwIDAwMDMqLworCXVpbnQzMl90CXNsYXZlX2Vycm9yX2F0dHJpYnV0ZTsJCQkvKjAwMDQgMDAwNyovCisJdWludDMyX3QJc2xhdmVfZXJyb3JfYWRkcmVzczsJCQkvKjAwMDggMDAwQiovCisJdWludDMyX3QJcG9zdGVkX291dGJvdW5kX2Rvb3JiZWxsOwkJLyowMDBDIDAwMEYqLworCXVpbnQzMl90CW1hc3Rlcl9lcnJvcl9hdHRyaWJ1dGU7CQkJLyowMDEwIDAwMTMqLworCXVpbnQzMl90CW1hc3Rlcl9lcnJvcl9hZGRyZXNzX2xvdzsJCS8qMDAxNCAwMDE3Ki8KKwl1aW50MzJfdAltYXN0ZXJfZXJyb3JfYWRkcmVzc19oaWdoOwkJLyowMDE4IDAwMUIqLworCXVpbnQzMl90CWhjYl9zaXplOwkJCQkvKjAwMUMgMDAxRiovCisJdWludDMyX3QJaW5ib3VuZF9kb29yYmVsbDsJCQkvKjAwMjAgMDAyMyovCisJdWludDMyX3QJZGlhZ25vc3RpY19yd19kYXRhOwkJCS8qMDAyNCAwMDI3Ki8KKwl1aW50MzJfdAlkaWFnbm9zdGljX3J3X2FkZHJlc3NfbG93OwkJLyowMDI4IDAwMkIqLworCXVpbnQzMl90CWRpYWdub3N0aWNfcndfYWRkcmVzc19oaWdoOwkJLyowMDJDIDAwMkYqLworCXVpbnQzMl90CWhvc3RfaW50X3N0YXR1czsJCQkJLyowMDMwIDAwMzMqLworCXVpbnQzMl90CWhvc3RfaW50X21hc2s7CQkJCS8qMDAzNCAwMDM3Ki8KKwl1aW50MzJfdAlkY3JfZGF0YTsJCQkJLyowMDM4IDAwM0IqLworCXVpbnQzMl90CWRjcl9hZGRyZXNzOwkJCQkvKjAwM0MgMDAzRiovCisJdWludDMyX3QJaW5ib3VuZF9xdWV1ZXBvcnQ7CQkJLyowMDQwIDAwNDMqLworCXVpbnQzMl90CW91dGJvdW5kX3F1ZXVlcG9ydDsJCQkvKjAwNDQgMDA0NyovCisJdWludDMyX3QJaGNiX3BjaV9hZGRyZXNzX2xvdzsJCQkvKjAwNDggMDA0QiovCisJdWludDMyX3QJaGNiX3BjaV9hZGRyZXNzX2hpZ2g7CQkJLyowMDRDIDAwNEYqLworCXVpbnQzMl90CWlvcF9pbnRfc3RhdHVzOwkJCQkvKjAwNTAgMDA1MyovCisJdWludDMyX3QJaW9wX2ludF9tYXNrOwkJCQkvKjAwNTQgMDA1NyovCisJdWludDMyX3QJaW9wX2luYm91bmRfcXVldWVfcG9ydDsJCQkvKjAwNTggMDA1QiovCisJdWludDMyX3QJaW9wX291dGJvdW5kX3F1ZXVlX3BvcnQ7CQkvKjAwNUMgMDA1RiovCisJdWludDMyX3QJaW5ib3VuZF9mcmVlX2xpc3RfaW5kZXg7CQkJLyowMDYwIDAwNjMqLworCXVpbnQzMl90CWluYm91bmRfcG9zdF9saXN0X2luZGV4OwkJCS8qMDA2NCAwMDY3Ki8KKwl1aW50MzJfdAlvdXRib3VuZF9mcmVlX2xpc3RfaW5kZXg7CQkJLyowMDY4IDAwNkIqLworCXVpbnQzMl90CW91dGJvdW5kX3Bvc3RfbGlzdF9pbmRleDsJCQkvKjAwNkMgMDA2RiovCisJdWludDMyX3QJaW5ib3VuZF9kb29yYmVsbF9jbGVhcjsJCQkvKjAwNzAgMDA3MyovCisJdWludDMyX3QJaTJvX21lc3NhZ2VfdW5pdF9jb250cm9sOwkJCS8qMDA3NCAwMDc3Ki8KKwl1aW50MzJfdAlsYXN0X3VzZWRfbWVzc2FnZV9zb3VyY2VfYWRkcmVzc19sb3c7CS8qMDA3OCAwMDdCKi8KKwl1aW50MzJfdAlsYXN0X3VzZWRfbWVzc2FnZV9zb3VyY2VfYWRkcmVzc19oaWdoOwkvKjAwN0MgMDA3RiovCisJdWludDMyX3QJcHVsbF9tb2RlX2RhdGFfYnl0ZV9jb3VudFs0XTsJCS8qMDA4MCAwMDhGKi8KKwl1aW50MzJfdAltZXNzYWdlX2Rlc3RfYWRkcmVzc19pbmRleDsJCS8qMDA5MCAwMDkzKi8KKwl1aW50MzJfdAlkb25lX3F1ZXVlX25vdF9lbXB0eV9pbnRfY291bnRlcl90aW1lcjsJLyowMDk0IDAwOTcqLworCXVpbnQzMl90CXV0aWxpdHlfQV9pbnRfY291bnRlcl90aW1lcjsJCS8qMDA5OCAwMDlCKi8KKwl1aW50MzJfdAlvdXRib3VuZF9kb29yYmVsbDsJCQkvKjAwOUMgMDA5RiovCisJdWludDMyX3QJb3V0Ym91bmRfZG9vcmJlbGxfY2xlYXI7CQkJLyowMEEwIDAwQTMqLworCXVpbnQzMl90CW1lc3NhZ2Vfc291cmNlX2FkZHJlc3NfaW5kZXg7CQkvKjAwQTQgMDBBNyovCisJdWludDMyX3QJbWVzc2FnZV9kb25lX3F1ZXVlX2luZGV4OwkJLyowMEE4IDAwQUIqLworCXVpbnQzMl90CXJlc2VydmVkMDsJCQkJLyowMEFDIDAwQUYqLworCXVpbnQzMl90CWluYm91bmRfbXNnYWRkcjA7CQkJLyowMEIwIDAwQjMqLworCXVpbnQzMl90CWluYm91bmRfbXNnYWRkcjE7CQkJLyowMEI0IDAwQjcqLworCXVpbnQzMl90CW91dGJvdW5kX21zZ2FkZHIwOwkJCS8qMDBCOCAwMEJCKi8KKwl1aW50MzJfdAlvdXRib3VuZF9tc2dhZGRyMTsJCQkvKjAwQkMgMDBCRiovCisJdWludDMyX3QJaW5ib3VuZF9xdWV1ZXBvcnRfbG93OwkJCS8qMDBDMCAwMEMzKi8KKwl1aW50MzJfdAlpbmJvdW5kX3F1ZXVlcG9ydF9oaWdoOwkJCS8qMDBDNCAwMEM3Ki8KKwl1aW50MzJfdAlvdXRib3VuZF9xdWV1ZXBvcnRfbG93OwkJCS8qMDBDOCAwMENCKi8KKwl1aW50MzJfdAlvdXRib3VuZF9xdWV1ZXBvcnRfaGlnaDsJCS8qMDBDQyAwMENGKi8KKwl1aW50MzJfdAlpb3BfaW5ib3VuZF9xdWV1ZV9wb3J0X2xvdzsJCS8qMDBEMCAwMEQzKi8KKwl1aW50MzJfdAlpb3BfaW5ib3VuZF9xdWV1ZV9wb3J0X2hpZ2g7CQkvKjAwRDQgMDBENyovCisJdWludDMyX3QJaW9wX291dGJvdW5kX3F1ZXVlX3BvcnRfbG93OwkJLyowMEQ4IDAwREIqLworCXVpbnQzMl90CWlvcF9vdXRib3VuZF9xdWV1ZV9wb3J0X2hpZ2g7CQkvKjAwREMgMDBERiovCisJdWludDMyX3QJbWVzc2FnZV9kZXN0X3F1ZXVlX3BvcnRfbG93OwkJLyowMEUwIDAwRTMqLworCXVpbnQzMl90CW1lc3NhZ2VfZGVzdF9xdWV1ZV9wb3J0X2hpZ2g7CQkvKjAwRTQgMDBFNyovCisJdWludDMyX3QJbGFzdF91c2VkX21lc3NhZ2VfZGVzdF9hZGRyZXNzX2xvdzsJLyowMEU4IDAwRUIqLworCXVpbnQzMl90CWxhc3RfdXNlZF9tZXNzYWdlX2Rlc3RfYWRkcmVzc19oaWdoOwkvKjAwRUMgMDBFRiovCisJdWludDMyX3QJbWVzc2FnZV9kb25lX3F1ZXVlX2Jhc2VfYWRkcmVzc19sb3c7CS8qMDBGMCAwMEYzKi8KKwl1aW50MzJfdAltZXNzYWdlX2RvbmVfcXVldWVfYmFzZV9hZGRyZXNzX2hpZ2g7CS8qMDBGNCAwMEY3Ki8KKwl1aW50MzJfdAlob3N0X2RpYWdub3N0aWM7CQkJCS8qMDBGOCAwMEZCKi8KKwl1aW50MzJfdAl3cml0ZV9zZXF1ZW5jZTsJCQkJLyowMEZDIDAwRkYqLworCXVpbnQzMl90CXJlc2VydmVkMVszNF07CQkJCS8qMDEwMCAwMTg3Ki8KKwl1aW50MzJfdAlyZXNlcnZlZDJbMTk1MF07CQkJCS8qMDE4OCAxRkZGKi8KKwl1aW50MzJfdAltZXNzYWdlX3didWZmZXJbMzJdOwkJCS8qMjAwMCAyMDdGKi8KKwl1aW50MzJfdAlyZXNlcnZlZDNbMzJdOwkJCQkvKjIwODAgMjBGRiovCisJdWludDMyX3QJbWVzc2FnZV9yYnVmZmVyWzMyXTsJCQkvKjIxMDAgMjE3RiovCisJdWludDMyX3QJcmVzZXJ2ZWQ0WzMyXTsJCQkJLyoyMTgwIDIxRkYqLworCXVpbnQzMl90CW1zZ2NvZGVfcndidWZmZXJbMjU2XTsJCQkvKjIyMDAgMjNGRiovCit9OwogLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoqICAgICAgICAgICAgICAgICBBZGFwdGVyIENvbnRyb2wgQmxvY2sKQEAgLTM3MCwxNCArNTA3LDIwIEBACiAJdW5zaWduZWQgbG9uZwkJCXZpcjJwaHlfb2Zmc2V0OwogCS8qIE9mZnNldCBpcyB1c2VkIGluIG1ha2luZyBhcmMgY2RiIHBoeXNpY2FsIHRvIHZpcnR1YWwgY2FsY3VsYXRpb25zICovCiAJdWludDMyX3QJCQlvdXRib3VuZF9pbnRfZW5hYmxlOwotCisJdWludDMyX3QJCQljZGJfcGh5YWRkcl9oaTMyOworCXVpbnQzMl90CQkJcmVnX211X2FjY19oYW5kbGUwOworCXNwaW5sb2NrX3QgICAgICAgICAgICAgICAgICAgICAgCQkJZWhfbG9jazsKKwlzcGlubG9ja190ICAgICAgICAgICAgICAgICAgICAgIAkJCWNjYmxpc3RfbG9jazsKIAl1bmlvbiB7Ci0JCXN0cnVjdCBNZXNzYWdlVW5pdF9BIF9faW9tZW0gKglwbXVBOwotCQlzdHJ1Y3QgTWVzc2FnZVVuaXRfQiAqCQlwbXVCOworCQlzdHJ1Y3QgTWVzc2FnZVVuaXRfQSBfX2lvbWVtICpwbXVBOworCQlzdHJ1Y3QgTWVzc2FnZVVuaXRfQiAJKnBtdUI7CisJCXN0cnVjdCBNZXNzYWdlVW5pdF9DIF9faW9tZW0gKnBtdUM7CiAJfTsKIAkvKiBtZXNzYWdlIHVuaXQgQVRVIGluYm91bmQgYmFzZSBhZGRyZXNzMCAqLwotCisJdm9pZCBfX2lvbWVtICptZW1fYmFzZTA7CisJdm9pZCBfX2lvbWVtICptZW1fYmFzZTE7CiAJdWludDMyX3QJCQlhY2JfZmxhZ3M7CisJdTE2CQkJZGV2X2lkOwogCXVpbnQ4X3QgICAgICAgICAgICAgICAgICAgCQlhZGFwdGVyX2luZGV4OwogCSNkZWZpbmUgQUNCX0ZfU0NTSVNUT1BBREFQVEVSICAgICAgICAgCTB4MDAwMQogCSNkZWZpbmUgQUNCX0ZfTVNHX1NUT1BfQkdSQiAgICAgCTB4MDAwMgpAQCAtMzkyLDggKzUzNSwxMSBAQAogCS8qIG1lc3NhZ2UgY2xlYXIgcnFidWZmZXIgKi8KIAkjZGVmaW5lIEFDQl9GX01FU1NBR0VfV1FCVUZGRVJfUkVBREVEICAgMHgwMDQwCiAJI2RlZmluZSBBQ0JfRl9CVVNfUkVTRVQgICAgICAgICAgICAgICAJMHgwMDgwCisJI2RlZmluZSBBQ0JfRl9CVVNfSEFOR19PTgkJMHgwODAwLyogbmVlZCBoYXJkd2FyZSByZXNldCBidXMgKi8KKwogCSNkZWZpbmUgQUNCX0ZfSU9QX0lOSVRFRCAgICAgICAgICAgICAgCTB4MDEwMAogCS8qIGlvcCBpbml0ICovCisJI2RlZmluZSBBQ0JfRl9BQk9SVAkJCQkweDAyMDAKIAkjZGVmaW5lIEFDQl9GX0ZJUk1XQVJFX1RSQVAgICAgICAgICAgIAkJMHgwNDAwCiAJc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2sgKgkJCXBjY2JfcG9vbFtBUkNNU1JfTUFYX0ZSRUVDQ0JfTlVNXTsKIAkvKiB1c2VkIGZvciBtZW1vcnkgZnJlZSAqLwpAQCAtNDA4LDcgKzU1NCw4IEBACiAJLyogZG1hX2NvaGVyZW50IHVzZWQgZm9yIG1lbW9yeSBmcmVlICovCiAJZG1hX2FkZHJfdAkJCWRtYV9jb2hlcmVudF9oYW5kbGU7CiAJLyogZG1hX2NvaGVyZW50X2hhbmRsZSB1c2VkIGZvciBtZW1vcnkgZnJlZSAqLwotCisJZG1hX2FkZHJfdAkJCQlkbWFfY29oZXJlbnRfaGFuZGxlX2hiYl9tdTsKKwl1bnNpZ25lZCBpbnQJCQkJdW5jYWNoZV9zaXplOwogCXVpbnQ4X3QJCQkJcnFidWZmZXJbQVJDTVNSX01BWF9RQlVGRkVSXTsKIAkvKiBkYXRhIGNvbGxlY3Rpb24gYnVmZmVyIGZvciByZWFkIGZyb20gODAzMzEgKi8KIAlpbnQzMl90CQkJCXJxYnVmX2ZpcnN0aW5kZXg7CkBAIC00MzIsMTQgKzU3OSwxOCBAQAogCXVpbnQzMl90CQkJZmlybV9udW1iZXJzX3F1ZXVlOwogCXVpbnQzMl90CQkJZmlybV9zZHJhbV9zaXplOwogCXVpbnQzMl90CQkJZmlybV9oZF9jaGFubmVsczsKLQljaGFyCQkJCWZpcm1fbW9kZWxbMTJdOwotCWNoYXIJCQkJZmlybV92ZXJzaW9uWzIwXTsKKwl1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgICAgIAlmaXJtX2NmZ192ZXJzaW9uOwkKKwljaGFyCQkJZmlybV9tb2RlbFsxMl07CisJY2hhcgkJCWZpcm1fdmVyc2lvblsyMF07CiAJY2hhcgkJCWRldmljZV9tYXBbMjBdOwkJCS8qMjEsODQtOTkqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCAJCWFyY21zcl9kb19tZXNzYWdlX2lzcl9iaDsKIAlzdHJ1Y3QgdGltZXJfbGlzdAkJZXRlcm5hbF90aW1lcjsKLQl1bnNpZ25lZCBzaG9ydAkJZndfc3RhdGU7CisJdW5zaWduZWQgc2hvcnQJCWZ3X2ZsYWc7CisJCQkJI2RlZmluZQlGV19OT1JNQUwJMHgwMDAwCisJCQkJI2RlZmluZQlGV19CT0cJCTB4MDAwMQorCQkJCSNkZWZpbmUJRldfREVBRExPQ0sJMHgwMDEwCiAJYXRvbWljX3QgCQkJcnFfbWFwX3Rva2VuOwotCWludAkJCWFudGVfdG9rZW5fdmFsdWU7CisJYXRvbWljX3QJCQlhbnRlX3Rva2VuX3ZhbHVlOwogfTsvKiBIV19ERVZJQ0VfRVhURU5TSU9OICovCiAvKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDQ3LDY3ICs1OTgsMzMgQEAKICoqICAgICAgICAgICAgIHRoaXMgQ0NCIGxlbmd0aCBtdXN0IGJlIDMyIGJ5dGVzIGJvdW5kYXJ5CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwotc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2sKLXsKLQlzdHJ1Y3QgQVJDTVNSX0NEQgkJYXJjbXNyX2NkYjsKLQkvKgotCSoqIDAtNTAzIChzaXplIG9mIENEQiA9IDUwNCk6Ci0JKiogYXJjbXNyIG1lc3NlbmdlciBzY3NpIGNvbW1hbmQgZGVzY3JpcHRvciBzaXplIDUwNCBieXRlcwotCSovCi0JdWludDMyX3QJCQljZGJfc2hpZnRlZF9waHlhZGRyOwotCS8qIDUwNC01MDcgKi8KLQl1aW50MzJfdAkJCXJlc2VydmVkMTsKLQkvKiA1MDgtNTExICovCi0jaWYgQklUU19QRVJfTE9ORyA9PSA2NAorc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2t7CisJLyp4MzI6c2l6ZW9mIHN0cnVjdF9DQ0I9KDMyKzYwKWJ5dGUsIHg2NDpzaXplb2Ygc3RydWN0X0NDQj0oNjQrNjApYnl0ZSovCisJc3RydWN0IGxpc3RfaGVhZAkJbGlzdDsJCQkJLyp4MzI6IDhieXRlLCB4NjQ6IDE2Ynl0ZSovCisJc3RydWN0IHNjc2lfY21uZAkJKnBjbWQ7CQkJCS8qOCBieXRlcyBwb2ludGVyIG9mIGxpbnV4IHNjc2kgY29tbWFuZCAqLworCXN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrCSphY2I7CQkJCS8qeDMyOiA0Ynl0ZSwgeDY0OiA4Ynl0ZSovCisJdWludDMyX3QJCQljZGJfcGh5YWRkcl9wYXR0ZXJuOwkJLyp4MzI6IDRieXRlLCB4NjQ6IDRieXRlKi8KKwl1aW50MzJfdAkJCWFyY19jZGJfc2l6ZTsJCQkvKngzMjo0Ynl0ZSx4NjQ6NGJ5dGUqLworCXVpbnQxNl90CQkJY2NiX2ZsYWdzOwkJCS8qeDMyOiAyYnl0ZSwgeDY0OiAyYnl0ZSovCisJI2RlZmluZQkJCUNDQl9GTEFHX1JFQUQJCQkweDAwMDAKKwkjZGVmaW5lCQkJQ0NCX0ZMQUdfV1JJVEUJCTB4MDAwMQorCSNkZWZpbmUJCQlDQ0JfRkxBR19FUlJPUgkJMHgwMDAyCisJI2RlZmluZQkJCUNDQl9GTEFHX0ZMVVNIQ0FDSEUJCTB4MDAwNAorCSNkZWZpbmUJCQlDQ0JfRkxBR19NQVNURVJfQUJPUlRFRAkweDAwMDgJCisJdWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAJc3RhcnRkb25lOwkJCS8qeDMyOjJieXRlLHgzMjoyYnl0ZSovCisJI2RlZmluZQkJCUFSQ01TUl9DQ0JfRE9ORSAgIAkgICAgICAgIAkweDAwMDAKKwkjZGVmaW5lCQkJQVJDTVNSX0NDQl9TVEFSVAkJMHg1NUFBCisJI2RlZmluZQkJCUFSQ01TUl9DQ0JfQUJPUlRFRAkJMHhBQTU1CisJI2RlZmluZQkJCUFSQ01TUl9DQ0JfSUxMRUdBTAkJMHhGRkZGCisJI2lmIEJJVFNfUEVSX0xPTkcgPT0gNjQKIAkvKiAgPT09PT09PT09PT09PT09PT09PT09PTUxMis2NCBieXRlcz09PT09PT09PT09PT09PT09PT09PT09PSAgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkCQlsaXN0OwotCS8qIDUxMi01MjcgMTYgYnl0ZXMgbmV4dC9wcmV2IHB0cnMgZm9yIGNjYiBsaXN0cyAqLwotCXN0cnVjdCBzY3NpX2NtbmQgKgkJcGNtZDsKLQkvKiA1MjgtNTM1IDggYnl0ZXMgcG9pbnRlciBvZiBsaW51eCBzY3NpIGNvbW1hbmQgKi8KLQlzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqCWFjYjsKLQkvKiA1MzYtNTQzIDggYnl0ZXMgcG9pbnRlciBvZiBhY2IgKi8KLQotCXVpbnQxNl90CQkJY2NiX2ZsYWdzOwotCS8qIDU0NC01NDUgKi8KLQkjZGVmaW5lCQlDQ0JfRkxBR19SRUFECQkJMHgwMDAwCi0JI2RlZmluZQkJQ0NCX0ZMQUdfV1JJVEUJCQkweDAwMDEKLQkjZGVmaW5lCQlDQ0JfRkxBR19FUlJPUgkJCTB4MDAwMgotCSNkZWZpbmUJCUNDQl9GTEFHX0ZMVVNIQ0FDSEUJCTB4MDAwNAotCSNkZWZpbmUJCUNDQl9GTEFHX01BU1RFUl9BQk9SVEVECQkweDAwMDgKLQl1aW50MTZfdAkJCXN0YXJ0ZG9uZTsKLQkvKiA1NDYtNTQ3ICovCi0JI2RlZmluZQkJQVJDTVNSX0NDQl9ET05FCQkJMHgwMDAwCi0JI2RlZmluZQkJQVJDTVNSX0NDQl9TVEFSVAkJMHg1NUFBCi0JI2RlZmluZQkJQVJDTVNSX0NDQl9BQk9SVEVECQkweEFBNTUKLQkjZGVmaW5lCQlBUkNNU1JfQ0NCX0lMTEVHQUwJCTB4RkZGRgotCXVpbnQzMl90CQkJcmVzZXJ2ZWQyWzddOwotCS8qIDU0OC01NTEgNTUyLTU1NSA1NTYtNTU5IDU2MC01NjMgNTY0LTU2NyA1NjgtNTcxIDU3Mi01NzUgKi8KLSNlbHNlCisJCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgCXJlc2VydmVkWzVdOwkJLyoyNCBieXRlKi8KKwkjZWxzZQogCS8qICA9PT09PT09PT09PT09PT09PT09PT09NTEyKzMyIGJ5dGVzPT09PT09PT09PT09PT09PT09PT09PT09ICAqLwotCXN0cnVjdCBsaXN0X2hlYWQJCWxpc3Q7Ci0JLyogNTEyLTUxOSA4IGJ5dGVzIG5leHQvcHJldiBwdHJzIGZvciBjY2IgbGlzdHMgKi8KLQlzdHJ1Y3Qgc2NzaV9jbW5kICoJCXBjbWQ7Ci0JLyogNTIwLTUyMyA0IGJ5dGVzIHBvaW50ZXIgb2YgbGludXggc2NzaSBjb21tYW5kICovCi0Jc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKglhY2I7Ci0JLyogNTI0LTUyNyA0IGJ5dGVzIHBvaW50ZXIgb2YgYWNiICovCi0KLQl1aW50MTZfdAkJCWNjYl9mbGFnczsKLQkvKiA1MjgtNTI5ICovCi0JI2RlZmluZQkJQ0NCX0ZMQUdfUkVBRAkJCTB4MDAwMAotCSNkZWZpbmUJCUNDQl9GTEFHX1dSSVRFCQkJMHgwMDAxCi0JI2RlZmluZQkJQ0NCX0ZMQUdfRVJST1IJCQkweDAwMDIKLQkjZGVmaW5lCQlDQ0JfRkxBR19GTFVTSENBQ0hFCQkweDAwMDQKLQkjZGVmaW5lCQlDQ0JfRkxBR19NQVNURVJfQUJPUlRFRAkJMHgwMDA4Ci0JdWludDE2X3QJCQlzdGFydGRvbmU7Ci0JLyogNTMwLTUzMSAqLwotCSNkZWZpbmUJCUFSQ01TUl9DQ0JfRE9ORQkJCTB4MDAwMAotCSNkZWZpbmUJCUFSQ01TUl9DQ0JfU1RBUlQJCTB4NTVBQQotCSNkZWZpbmUJCUFSQ01TUl9DQ0JfQUJPUlRFRAkJMHhBQTU1Ci0JI2RlZmluZQkJQVJDTVNSX0NDQl9JTExFR0FMCQkweEZGRkYKLQl1aW50MzJfdAkJCXJlc2VydmVkMlszXTsKLQkvKiA1MzItNTM1IDUzNi01MzkgNTQwLTU0MyAqLwotI2VuZGlmCi0JLyogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gICovCisJCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgCXJlc2VydmVkOwkJLyo4ICBieXRlKi8KKwkjZW5kaWYKKwkvKiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgICovCisJc3RydWN0IEFSQ01TUl9DREIJCWFyY21zcl9jZGI7CiB9OwogLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2F0dHIuYwppbmRleCAwN2ZkZmU1Li5hNGUwNGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9hdHRyLmMKKysrIGIvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfYXR0ci5jCkBAIC0xOTIsNyArMTkyLDYgQEAKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAibXVfcmVhZCIsCiAJCS5tb2RlID0gU19JUlVTUiAsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnNpemUgPSAxMDMyLAogCS5yZWFkID0gYXJjbXNyX3N5c2ZzX2lvcF9tZXNzYWdlX3JlYWQsCkBAIC0yMDIsNyArMjAxLDYgQEAKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAibXVfd3JpdGUiLAogCQkubW9kZSA9IFNfSVdVU1IsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnNpemUgPSAxMDMyLAogCS53cml0ZSA9IGFyY21zcl9zeXNmc19pb3BfbWVzc2FnZV93cml0ZSwKQEAgLTIxMiw3ICsyMTAsNiBAQAogCS5hdHRyID0gewogCQkubmFtZSA9ICJtdV9jbGVhciIsCiAJCS5tb2RlID0gU19JV1VTUiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkuc2l6ZSA9IDEsCiAJLndyaXRlID0gYXJjbXNyX3N5c2ZzX2lvcF9tZXNzYWdlX2NsZWFyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfaGJhLmMgYi9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9oYmEuYwppbmRleCBmZmE1NDc5Li45NWE4OTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9oYmEuYworKysgYi9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9oYmEuYwpAQCAtNTgsNyArNTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvYWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC03MSwyMCArNzAsMTMgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0Lmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpY2FtLmg+CiAjaW5jbHVkZSAiYXJjbXNyLmgiCi0KLSNpZmRlZiBDT05GSUdfU0NTSV9BUkNNU1JfUkVTRVQKLQlzdGF0aWMgaW50IHNsZWVwdGltZSA9IDIwOwotCXN0YXRpYyBpbnQgcmV0cnljb3VudCA9IDEyOwotCW1vZHVsZV9wYXJhbShzbGVlcHRpbWUsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKLQlNT0RVTEVfUEFSTV9ERVNDKHNsZWVwdGltZSwgIlRoZSB3YWl0aW5nIHBlcmlvZCBmb3IgRlcgcmVhZHkgd2hpbGUgYnVzIHJlc2V0Iik7Ci0JbW9kdWxlX3BhcmFtKHJldHJ5Y291bnQsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKLQlNT0RVTEVfUEFSTV9ERVNDKHJldHJ5Y291bnQsICJUaGUgcmV0cnkgY291bnQgZm9yIEZXIHJlYWR5IHdoaWxlIGJ1cyByZXNldCIpOwotI2VuZGlmCi1NT0RVTEVfQVVUSE9SKCJFcmljaCBDaGVuIDxzdXBwb3J0QGFyZWNhLmNvbS50dz4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQVJFQ0EgKEFSQzExeHgvMTJ4eC8xM3h4LzE2eHgpIFNBVEEvU0FTIFJBSUQgSG9zdCBCdXMgQWRhcHRlciIpOworTU9EVUxFX0FVVEhPUigiTmljayBDaGVuZyA8c3VwcG9ydEBhcmVjYS5jb20udHc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFSRUNBIChBUkMxMXh4LzEyeHgvMTZ4eC8xODgwKSBTQVRBL1NBUyBSQUlEIEhvc3QgQnVzIEFkYXB0ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKIE1PRFVMRV9WRVJTSU9OKEFSQ01TUl9EUklWRVJfVkVSU0lPTik7Ci0KK3N0YXRpYyBpbnQgc2xlZXB0aW1lID0gMTA7CitzdGF0aWMgaW50IHJldHJ5Y291bnQgPSAzMDsKK3dhaXRfcXVldWVfaGVhZF90IHdhaXRfcTsKIHN0YXRpYyBpbnQgYXJjbXNyX2lvcF9tZXNzYWdlX3hmZXIoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYiwKIAkJCQkJc3RydWN0IHNjc2lfY21uZCAqY21kKTsKIHN0YXRpYyBpbnQgYXJjbXNyX2lvcF9jb25maXJtKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IpOwpAQCAtMTA3LDEwICs5OSwxMiBAQAogc3RhdGljIHZvaWQgYXJjbXNyX3JlcXVlc3RfZGV2aWNlX21hcCh1bnNpZ25lZCBsb25nIHBhY2IpOwogc3RhdGljIHZvaWQgYXJjbXNyX3JlcXVlc3RfaGJhX2RldmljZV9tYXAoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYik7CiBzdGF0aWMgdm9pZCBhcmNtc3JfcmVxdWVzdF9oYmJfZGV2aWNlX21hcChzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKTsKK3N0YXRpYyB2b2lkIGFyY21zcl9yZXF1ZXN0X2hiY19kZXZpY2VfbWFwKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IpOwogc3RhdGljIHZvaWQgYXJjbXNyX21lc3NhZ2VfaXNyX2JoX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci1zdGF0aWMgdm9pZCAqYXJjbXNyX2dldF9maXJtd2FyZV9zcGVjKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IsIGludCBtb2RlKTsKK3N0YXRpYyBib29sIGFyY21zcl9nZXRfZmlybXdhcmVfc3BlYyhzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKTsKIHN0YXRpYyB2b2lkIGFyY21zcl9zdGFydF9hZGFwdGVyX2JncmIoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYik7Ci0KK3N0YXRpYyB2b2lkIGFyY21zcl9oYmNfbWVzc2FnZV9pc3Ioc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKnBBQ0IpOworc3RhdGljIHZvaWQgYXJjbXNyX2hhcmR3YXJlX3Jlc2V0KHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IpOwogc3RhdGljIGNvbnN0IGNoYXIgKmFyY21zcl9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgYXJjbXNyX2ludGVycnVwdChzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKTsKIHN0YXRpYyBpbnQgYXJjbXNyX2FkanVzdF9kaXNrX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKQEAgLTEyNywxOCArMTIxLDE4IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGFyY21zcl9zY3NpX2hvc3RfdGVtcGxhdGUgPSB7CiAJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9ICJBUkNNU1IgQVJFQ0EgU0FUQS9TQVMgUkFJRCBIb3N0IEJ1cyBBZGFwdGVyIgotCQkJCQkJCUFSQ01TUl9EUklWRVJfVkVSU0lPTiwKKwkubmFtZQkJCT0gIkFSQ01TUiBBUkVDQSBTQVRBL1NBUyBSQUlEIENvbnRyb2xsZXIiCisJCQkJQVJDTVNSX0RSSVZFUl9WRVJTSU9OLAogCS5pbmZvCQkJPSBhcmNtc3JfaW5mbywKIAkucXVldWVjb21tYW5kCQk9IGFyY21zcl9xdWV1ZV9jb21tYW5kLAotCS5laF9hYm9ydF9oYW5kbGVyCT0gYXJjbXNyX2Fib3J0LAorCS5laF9hYm9ydF9oYW5kbGVyCQk9IGFyY21zcl9hYm9ydCwKIAkuZWhfYnVzX3Jlc2V0X2hhbmRsZXIJPSBhcmNtc3JfYnVzX3Jlc2V0LAogCS5iaW9zX3BhcmFtCQk9IGFyY21zcl9iaW9zX3BhcmFtLAogCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBhcmNtc3JfYWRqdXN0X2Rpc2tfcXVldWVfZGVwdGgsCi0JLmNhbl9xdWV1ZQkJPSBBUkNNU1JfTUFYX09VVFNUQU5ESU5HX0NNRCwKLQkudGhpc19pZAkJPSBBUkNNU1JfU0NTSV9JTklUSUFUT1JfSUQsCi0JLnNnX3RhYmxlc2l6ZQkJPSBBUkNNU1JfTUFYX1NHX0VOVFJJRVMsCi0JLm1heF9zZWN0b3JzICAgIAk9IEFSQ01TUl9NQVhfWEZFUl9TRUNUT1JTLAorCS5jYW5fcXVldWUJCT0gQVJDTVNSX01BWF9GUkVFQ0NCX05VTSwKKwkudGhpc19pZAkJCT0gQVJDTVNSX1NDU0lfSU5JVElBVE9SX0lELAorCS5zZ190YWJsZXNpemUJICAgICAgICAJPSBBUkNNU1JfREVGQVVMVF9TR19FTlRSSUVTLCAKKwkubWF4X3NlY3RvcnMgICAgCSAgICAJPSBBUkNNU1JfTUFYX1hGRVJfU0VDVE9SU19DLCAKIAkuY21kX3Blcl9sdW4JCT0gQVJDTVNSX01BWF9DTURfUEVSTFVOLAogCS51c2VfY2x1c3RlcmluZwkJPSBFTkFCTEVfQ0xVU1RFUklORywKIAkuc2hvc3RfYXR0cnMJCT0gYXJjbXNyX2hvc3RfYXR0cnMsCkBAIC0xNjIsMjYgKzE1NiwxMjUgQEAKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FSRUNBLCBQQ0lfREVWSUNFX0lEX0FSRUNBXzEzODEpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FSRUNBLCBQQ0lfREVWSUNFX0lEX0FSRUNBXzE2ODApfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FSRUNBLCBQQ0lfREVWSUNFX0lEX0FSRUNBXzE2ODEpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FSRUNBLCBQQ0lfREVWSUNFX0lEX0FSRUNBXzE4ODApfSwKIAl7MCwgMH0sIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFyY21zcl9kZXZpY2VfaWRfdGFibGUpOwogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFyY21zcl9wY2lfZHJpdmVyID0gewogCS5uYW1lCQkJPSAiYXJjbXNyIiwKLQkuaWRfdGFibGUJCT0gYXJjbXNyX2RldmljZV9pZF90YWJsZSwKKwkuaWRfdGFibGUJCQk9IGFyY21zcl9kZXZpY2VfaWRfdGFibGUsCiAJLnByb2JlCQkJPSBhcmNtc3JfcHJvYmUsCiAJLnJlbW92ZQkJCT0gYXJjbXNyX3JlbW92ZSwKIAkuc2h1dGRvd24JCT0gYXJjbXNyX3NodXRkb3duLAogfTsKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworaW50IGFyY21zcl9zbGVlcF9mb3JfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKK3sKKwkJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBOVUxMOworCQlpbnQgaSwgaXNsZWVwOworCQlzaG9zdCA9IGNtZC0+ZGV2aWNlLT5ob3N0OworCQlpc2xlZXAgPSBzbGVlcHRpbWUgLyAxMDsKKwkJaWYgKGlzbGVlcCA+IDApIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBpc2xlZXA7IGkrKykgeworCQkJCW1zbGVlcCgxMDAwMCk7CisJCQl9CisJCX0KKworCQlpc2xlZXAgPSBzbGVlcHRpbWUgJSAxMDsKKwkJaWYgKGlzbGVlcCA+IDApIHsKKwkJCW1zbGVlcChpc2xlZXAqMTAwMCk7CisJCX0KKwkJcHJpbnRrKEtFUk5fTk9USUNFICJ3YWtlLXVwXG4iKTsKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFyY21zcl9mcmVlX2hiYl9tdShzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKQoreworCXN3aXRjaCAoYWNiLT5hZGFwdGVyX3R5cGUpIHsKKwljYXNlIEFDQl9BREFQVEVSX1RZUEVfQToKKwljYXNlIEFDQl9BREFQVEVSX1RZUEVfQzoKKwkJYnJlYWs7CisJY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0I6eworCQlkbWFfZnJlZV9jb2hlcmVudCgmYWNiLT5wZGV2LT5kZXYsCisJCQlzaXplb2Yoc3RydWN0IE1lc3NhZ2VVbml0X0IpLAorCQkJYWNiLT5wbXVCLCBhY2ItPmRtYV9jb2hlcmVudF9oYW5kbGVfaGJiX211KTsKKwl9CisJfQorfQorCitzdGF0aWMgYm9vbCBhcmNtc3JfcmVtYXBfcGNpcmVnaW9uKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhY2ItPnBkZXY7CisJc3dpdGNoIChhY2ItPmFkYXB0ZXJfdHlwZSl7CisJY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0E6eworCQlhY2ItPnBtdUEgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LDApLCBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsMCkpOworCQlpZiAoIWFjYi0+cG11QSkgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJhcmNtc3IlZDogbWVtb3J5IG1hcHBpbmcgcmVnaW9uIGZhaWwgXG4iLCBhY2ItPmhvc3QtPmhvc3Rfbm8pOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIEFDQl9BREFQVEVSX1RZUEVfQjp7CisJCXZvaWQgX19pb21lbSAqbWVtX2Jhc2UwLCAqbWVtX2Jhc2UxOworCQltZW1fYmFzZTAgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSwgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7CisJCWlmICghbWVtX2Jhc2UwKSB7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgImFyY21zciVkOiBtZW1vcnkgbWFwcGluZyByZWdpb24gZmFpbCBcbiIsIGFjYi0+aG9zdC0+aG9zdF9ubyk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJbWVtX2Jhc2UxID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMiksIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMikpOworCQlpZiAoIW1lbV9iYXNlMSkgeworCQkJaW91bm1hcChtZW1fYmFzZTApOworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJhcmNtc3IlZDogbWVtb3J5IG1hcHBpbmcgcmVnaW9uIGZhaWwgXG4iLCBhY2ItPmhvc3QtPmhvc3Rfbm8pOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCWFjYi0+bWVtX2Jhc2UwID0gbWVtX2Jhc2UwOworCQlhY2ItPm1lbV9iYXNlMSA9IG1lbV9iYXNlMTsKKwkJYnJlYWs7CisJfQorCWNhc2UgQUNCX0FEQVBURVJfVFlQRV9DOnsKKwkJYWNiLT5wbXVDID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKSwgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSk7CisJCWlmICghYWNiLT5wbXVDKSB7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgImFyY21zciVkOiBtZW1vcnkgbWFwcGluZyByZWdpb24gZmFpbCBcbiIsIGFjYi0+aG9zdC0+aG9zdF9ubyk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJaWYgKHJlYWRsKCZhY2ItPnBtdUMtPm91dGJvdW5kX2Rvb3JiZWxsKSAmIEFSQ01TUl9IQkNNVV9JT1AyRFJWX01FU1NBR0VfQ01EX0RPTkUpIHsKKwkJCXdyaXRlbChBUkNNU1JfSEJDTVVfSU9QMkRSVl9NRVNTQUdFX0NNRF9ET05FX0RPT1JCRUxMX0NMRUFSLCAmYWNiLT5wbXVDLT5vdXRib3VuZF9kb29yYmVsbF9jbGVhcik7LypjbGVhciBpbnRlcnJ1cHQqLworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJYnJlYWs7CisJfQorCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgYXJjbXNyX3VubWFwX3BjaXJlZ2lvbihzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKQoreworCXN3aXRjaCAoYWNiLT5hZGFwdGVyX3R5cGUpIHsKKwljYXNlIEFDQl9BREFQVEVSX1RZUEVfQTp7CisJCWlvdW5tYXAoYWNiLT5wbXVBKTsKKwl9CisJYnJlYWs7CisJY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0I6eworCQlpb3VubWFwKGFjYi0+bWVtX2Jhc2UwKTsKKwkJaW91bm1hcChhY2ItPm1lbV9iYXNlMSk7CisJfQorCisJYnJlYWs7CisJY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0M6eworCQlpb3VubWFwKGFjYi0+cG11Qyk7CisJfQorCX0KK30KIAogc3RhdGljIGlycXJldHVybl90IGFyY21zcl9kb19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCWlycXJldHVybl90IGhhbmRsZV9zdGF0ZTsKIAlzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiID0gZGV2X2lkOwogCi0Jc3Bpbl9sb2NrKGFjYi0+aG9zdC0+aG9zdF9sb2NrKTsKIAloYW5kbGVfc3RhdGUgPSBhcmNtc3JfaW50ZXJydXB0KGFjYik7Ci0Jc3Bpbl91bmxvY2soYWNiLT5ob3N0LT5ob3N0X2xvY2spOwotCiAJcmV0dXJuIGhhbmRsZV9zdGF0ZTsKIH0KIApAQCAtMjE4LDE4MSArMzExLDIyOCBAQAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWNiLT5wZGV2OwogCXUxNiBkZXZfaWQ7CiAJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX0RFVklDRV9JRCwgJmRldl9pZCk7CisJYWNiLT5kZXZfaWQgPSBkZXZfaWQ7CiAJc3dpdGNoIChkZXZfaWQpIHsKLQljYXNlIDB4MTIwMSA6IHsKKwljYXNlIDB4MTg4MDogeworCQlhY2ItPmFkYXB0ZXJfdHlwZSA9IEFDQl9BREFQVEVSX1RZUEVfQzsKKwkJfQorCQlicmVhazsKKwljYXNlIDB4MTIwMTogewogCQlhY2ItPmFkYXB0ZXJfdHlwZSA9IEFDQl9BREFQVEVSX1RZUEVfQjsKIAkJfQogCQlicmVhazsKIAotCWRlZmF1bHQgOiBhY2ItPmFkYXB0ZXJfdHlwZSA9IEFDQl9BREFQVEVSX1RZUEVfQTsKKwlkZWZhdWx0OiBhY2ItPmFkYXB0ZXJfdHlwZSA9IEFDQl9BREFQVEVSX1RZUEVfQTsKKwl9Cit9CQorCitzdGF0aWMgdWludDhfdCBhcmNtc3JfaGJhX3dhaXRfbXNnaW50X3JlYWR5KHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IpCit7CisJc3RydWN0IE1lc3NhZ2VVbml0X0EgX19pb21lbSAqcmVnID0gYWNiLT5wbXVBOworCXVpbnQzMl90IEluZGV4OworCXVpbnQ4X3QgUmV0cmllcyA9IDB4MDA7CisJZG8geworCQlmb3IgKEluZGV4ID0gMDsgSW5kZXggPCAxMDA7IEluZGV4KyspIHsKKwkJCWlmIChyZWFkbCgmcmVnLT5vdXRib3VuZF9pbnRzdGF0dXMpICYKKwkJCQkJQVJDTVNSX01VX09VVEJPVU5EX01FU1NBR0UwX0lOVCkgeworCQkJCXdyaXRlbChBUkNNU1JfTVVfT1VUQk9VTkRfTUVTU0FHRTBfSU5ULAorCQkJCQkmcmVnLT5vdXRib3VuZF9pbnRzdGF0dXMpOworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJbXNsZWVwKDEwKTsKKwkJfS8qbWF4IDEgc2Vjb25kcyovCisKKwl9IHdoaWxlIChSZXRyaWVzKysgPCAyMCk7LyptYXggMjAgc2VjKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB1aW50OF90IGFyY21zcl9oYmJfd2FpdF9tc2dpbnRfcmVhZHkoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYikKK3sKKwlzdHJ1Y3QgTWVzc2FnZVVuaXRfQiAqcmVnID0gYWNiLT5wbXVCOworCXVpbnQzMl90IEluZGV4OworCXVpbnQ4X3QgUmV0cmllcyA9IDB4MDA7CisJZG8geworCQlmb3IgKEluZGV4ID0gMDsgSW5kZXggPCAxMDA7IEluZGV4KyspIHsKKwkJCWlmIChyZWFkbChyZWctPmlvcDJkcnZfZG9vcmJlbGwpCisJCQkJJiBBUkNNU1JfSU9QMkRSVl9NRVNTQUdFX0NNRF9ET05FKSB7CisJCQkJd3JpdGVsKEFSQ01TUl9NRVNTQUdFX0lOVF9DTEVBUl9QQVRURVJOCisJCQkJCSwgcmVnLT5pb3AyZHJ2X2Rvb3JiZWxsKTsKKwkJCQl3cml0ZWwoQVJDTVNSX0RSVjJJT1BfRU5EX09GX0lOVEVSUlVQVCwgcmVnLT5kcnYyaW9wX2Rvb3JiZWxsKTsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCW1zbGVlcCgxMCk7CisJCX0vKm1heCAxIHNlY29uZHMqLworCisJfSB3aGlsZSAoUmV0cmllcysrIDwgMjApOy8qbWF4IDIwIHNlYyovCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdWludDhfdCBhcmNtc3JfaGJjX3dhaXRfbXNnaW50X3JlYWR5KHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICpwQUNCKQoreworCXN0cnVjdCBNZXNzYWdlVW5pdF9DICpwaGJjbXUgPSAoc3RydWN0IE1lc3NhZ2VVbml0X0MgKilwQUNCLT5wbXVDOworCXVuc2lnbmVkIGNoYXIgUmV0cmllcyA9IDB4MDA7CisJdWludDMyX3QgSW5kZXg7CisJZG8geworCQlmb3IgKEluZGV4ID0gMDsgSW5kZXggPCAxMDA7IEluZGV4KyspIHsKKwkJCWlmIChyZWFkbCgmcGhiY211LT5vdXRib3VuZF9kb29yYmVsbCkgJiBBUkNNU1JfSEJDTVVfSU9QMkRSVl9NRVNTQUdFX0NNRF9ET05FKSB7CisJCQkJd3JpdGVsKEFSQ01TUl9IQkNNVV9JT1AyRFJWX01FU1NBR0VfQ01EX0RPTkVfRE9PUkJFTExfQ0xFQVIsICZwaGJjbXUtPm91dGJvdW5kX2Rvb3JiZWxsX2NsZWFyKTsvKmNsZWFyIGludGVycnVwdCovCisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQkvKiBvbmUgdXMgZGVsYXkJKi8KKwkJCW1zbGVlcCgxMCk7CisJCX0gLyptYXggMSBzZWNvbmRzKi8KKwl9IHdoaWxlIChSZXRyaWVzKysgPCAyMCk7IC8qbWF4IDIwIHNlYyovCisJcmV0dXJuIGZhbHNlOworfQorc3RhdGljIHZvaWQgYXJjbXNyX2ZsdXNoX2hiYV9jYWNoZShzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKQoreworCXN0cnVjdCBNZXNzYWdlVW5pdF9BIF9faW9tZW0gKnJlZyA9IGFjYi0+cG11QTsKKwlpbnQgcmV0cnlfY291bnQgPSAzMDsKKwl3cml0ZWwoQVJDTVNSX0lOQk9VTkRfTUVTRzBfRkxVU0hfQ0FDSEUsICZyZWctPmluYm91bmRfbXNnYWRkcjApOworCWRvIHsKKwkJaWYgKGFyY21zcl9oYmFfd2FpdF9tc2dpbnRfcmVhZHkoYWNiKSkKKwkJCWJyZWFrOworCQllbHNlIHsKKwkJCXJldHJ5X2NvdW50LS07CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgImFyY21zciVkOiB3YWl0ICdmbHVzaCBhZGFwdGVyIGNhY2hlJyBcCisJCQl0aW1lb3V0LCByZXRyeSBjb3VudCBkb3duID0gJWQgXG4iLCBhY2ItPmhvc3QtPmhvc3Rfbm8sIHJldHJ5X2NvdW50KTsKKwkJfQorCX0gd2hpbGUgKHJldHJ5X2NvdW50ICE9IDApOworfQorCitzdGF0aWMgdm9pZCBhcmNtc3JfZmx1c2hfaGJiX2NhY2hlKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IpCit7CisJc3RydWN0IE1lc3NhZ2VVbml0X0IgKnJlZyA9IGFjYi0+cG11QjsKKwlpbnQgcmV0cnlfY291bnQgPSAzMDsKKwl3cml0ZWwoQVJDTVNSX01FU1NBR0VfRkxVU0hfQ0FDSEUsIHJlZy0+ZHJ2MmlvcF9kb29yYmVsbCk7CisJZG8geworCQlpZiAoYXJjbXNyX2hiYl93YWl0X21zZ2ludF9yZWFkeShhY2IpKQorCQkJYnJlYWs7CisJCWVsc2UgeworCQkJcmV0cnlfY291bnQtLTsKKwkJCXByaW50ayhLRVJOX05PVElDRSAiYXJjbXNyJWQ6IHdhaXQgJ2ZsdXNoIGFkYXB0ZXIgY2FjaGUnIFwKKwkJCXRpbWVvdXQscmV0cnkgY291bnQgZG93biA9ICVkIFxuIiwgYWNiLT5ob3N0LT5ob3N0X25vLCByZXRyeV9jb3VudCk7CisJCX0KKwl9IHdoaWxlIChyZXRyeV9jb3VudCAhPSAwKTsKK30KKworc3RhdGljIHZvaWQgYXJjbXNyX2ZsdXNoX2hiY19jYWNoZShzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqcEFDQikKK3sKKwlzdHJ1Y3QgTWVzc2FnZVVuaXRfQyAqcmVnID0gKHN0cnVjdCBNZXNzYWdlVW5pdF9DICopcEFDQi0+cG11QzsKKwlpbnQgcmV0cnlfY291bnQgPSAzMDsvKiBlbmxhcmdlIHdhaXQgZmx1c2ggYWRhcHRlciBjYWNoZSB0aW1lOiAxMCBtaW51dGUgKi8KKwl3cml0ZWwoQVJDTVNSX0lOQk9VTkRfTUVTRzBfRkxVU0hfQ0FDSEUsICZyZWctPmluYm91bmRfbXNnYWRkcjApOworCXdyaXRlbChBUkNNU1JfSEJDTVVfRFJWMklPUF9NRVNTQUdFX0NNRF9ET05FLCAmcmVnLT5pbmJvdW5kX2Rvb3JiZWxsKTsKKwlkbyB7CisJCWlmIChhcmNtc3JfaGJjX3dhaXRfbXNnaW50X3JlYWR5KHBBQ0IpKSB7CisJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCXJldHJ5X2NvdW50LS07CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgImFyY21zciVkOiB3YWl0ICdmbHVzaCBhZGFwdGVyIGNhY2hlJyBcCisJCQl0aW1lb3V0LHJldHJ5IGNvdW50IGRvd24gPSAlZCBcbiIsIHBBQ0ItPmhvc3QtPmhvc3Rfbm8sIHJldHJ5X2NvdW50KTsKKwkJfQorCX0gd2hpbGUgKHJldHJ5X2NvdW50ICE9IDApOworCXJldHVybjsKK30KK3N0YXRpYyB2b2lkIGFyY21zcl9mbHVzaF9hZGFwdGVyX2NhY2hlKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IpCit7CisJc3dpdGNoIChhY2ItPmFkYXB0ZXJfdHlwZSkgeworCisJY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0E6IHsKKwkJYXJjbXNyX2ZsdXNoX2hiYV9jYWNoZShhY2IpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0I6IHsKKwkJYXJjbXNyX2ZsdXNoX2hiYl9jYWNoZShhY2IpOworCQl9CisJCWJyZWFrOworCWNhc2UgQUNCX0FEQVBURVJfVFlQRV9DOiB7CisJCWFyY21zcl9mbHVzaF9oYmNfY2FjaGUoYWNiKTsKKwkJfQogCX0KIH0KIAogc3RhdGljIGludCBhcmNtc3JfYWxsb2NfY2NiX3Bvb2woc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYikKIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFjYi0+cGRldjsKKwl2b2lkICpkbWFfY29oZXJlbnQ7CisJZG1hX2FkZHJfdCBkbWFfY29oZXJlbnRfaGFuZGxlOworCXN0cnVjdCBDb21tYW5kQ29udHJvbEJsb2NrICpjY2JfdG1wOworCWludCBpID0gMCwgaiA9IDA7CisJZG1hX2FkZHJfdCBjZGJfcGh5YWRkcjsKKwl1bnNpZ25lZCBsb25nIHJvdW5kdXBfY2Nic2l6ZSA9IDAsIG9mZnNldDsKKwl1bnNpZ25lZCBsb25nIG1heF94ZmVyX2xlbjsKKwl1bnNpZ25lZCBsb25nIG1heF9zZ19lbnRyeXM7CisJdWludDMyX3QgIGZpcm1fY29uZmlnX3ZlcnNpb247CisJZm9yIChpID0gMDsgaSA8IEFSQ01TUl9NQVhfVEFSR0VUSUQ7IGkrKykKKwkJZm9yIChqID0gMDsgaiA8IEFSQ01TUl9NQVhfVEFSR0VUTFVOOyBqKyspCisJCQlhY2ItPmRldnN0YXRlW2ldW2pdID0gQVJFQ0FfUkFJRF9HT05FOwogCi0Jc3dpdGNoIChhY2ItPmFkYXB0ZXJfdHlwZSkgewotCi0JY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0E6IHsKLQkJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhY2ItPnBkZXY7Ci0JCXZvaWQgKmRtYV9jb2hlcmVudDsKLQkJZG1hX2FkZHJfdCBkbWFfY29oZXJlbnRfaGFuZGxlLCBkbWFfYWRkcjsKLQkJc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2sgKmNjYl90bXA7Ci0JCWludCBpLCBqOwotCi0JCWFjYi0+cG11QSA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLCBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKLQkJaWYgKCFhY2ItPnBtdUEpIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAiYXJjbXNyJWQ6IG1lbW9yeSBtYXBwaW5nIHJlZ2lvbiBmYWlsIFxuIiwKLQkJCQkJCQlhY2ItPmhvc3QtPmhvc3Rfbm8pOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQotCQlkbWFfY29oZXJlbnQgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwKLQkJCUFSQ01TUl9NQVhfRlJFRUNDQl9OVU0gKgotCQkJc2l6ZW9mIChzdHJ1Y3QgQ29tbWFuZENvbnRyb2xCbG9jaykgKyAweDIwLAotCQkJJmRtYV9jb2hlcmVudF9oYW5kbGUsIEdGUF9LRVJORUwpOwotCi0JCWlmICghZG1hX2NvaGVyZW50KSB7Ci0JCQlpb3VubWFwKGFjYi0+cG11QSk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCi0JCWFjYi0+ZG1hX2NvaGVyZW50ID0gZG1hX2NvaGVyZW50OwotCQlhY2ItPmRtYV9jb2hlcmVudF9oYW5kbGUgPSBkbWFfY29oZXJlbnRfaGFuZGxlOwotCi0JCWlmICgoKHVuc2lnbmVkIGxvbmcpZG1hX2NvaGVyZW50ICYgMHgxRikpIHsKLQkJCWRtYV9jb2hlcmVudCA9IGRtYV9jb2hlcmVudCArCi0JCQkJKDB4MjAgLSAoKHVuc2lnbmVkIGxvbmcpZG1hX2NvaGVyZW50ICYgMHgxRikpOwotCQkJZG1hX2NvaGVyZW50X2hhbmRsZSA9IGRtYV9jb2hlcmVudF9oYW5kbGUgKwotCQkJCSgweDIwIC0gKCh1bnNpZ25lZCBsb25nKWRtYV9jb2hlcmVudF9oYW5kbGUgJiAweDFGKSk7Ci0JCX0KLQotCQlkbWFfYWRkciA9IGRtYV9jb2hlcmVudF9oYW5kbGU7Ci0JCWNjYl90bXAgPSAoc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2sgKilkbWFfY29oZXJlbnQ7Ci0JCWZvciAoaSA9IDA7IGkgPCBBUkNNU1JfTUFYX0ZSRUVDQ0JfTlVNOyBpKyspIHsKLQkJCWNjYl90bXAtPmNkYl9zaGlmdGVkX3BoeWFkZHIgPSBkbWFfYWRkciA+PiA1OwotCQkJY2NiX3RtcC0+YWNiID0gYWNiOwotCQkJYWNiLT5wY2NiX3Bvb2xbaV0gPSBjY2JfdG1wOwotCQkJbGlzdF9hZGRfdGFpbCgmY2NiX3RtcC0+bGlzdCwgJmFjYi0+Y2NiX2ZyZWVfbGlzdCk7Ci0JCQlkbWFfYWRkciA9IGRtYV9hZGRyICsgc2l6ZW9mKHN0cnVjdCBDb21tYW5kQ29udHJvbEJsb2NrKTsKLQkJCWNjYl90bXArKzsKLQkJfQotCi0JCWFjYi0+dmlyMnBoeV9vZmZzZXQgPSAodW5zaWduZWQgbG9uZyljY2JfdG1wIC0odW5zaWduZWQgbG9uZylkbWFfYWRkcjsKLQkJZm9yIChpID0gMDsgaSA8IEFSQ01TUl9NQVhfVEFSR0VUSUQ7IGkrKykKLQkJCWZvciAoaiA9IDA7IGogPCBBUkNNU1JfTUFYX1RBUkdFVExVTjsgaisrKQotCQkJCWFjYi0+ZGV2c3RhdGVbaV1bal0gPSBBUkVDQV9SQUlEX0dPTkU7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIEFDQl9BREFQVEVSX1RZUEVfQjogewotCi0JCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWNiLT5wZGV2OwotCQlzdHJ1Y3QgTWVzc2FnZVVuaXRfQiAqcmVnOwotCQl2b2lkIF9faW9tZW0gKm1lbV9iYXNlMCwgKm1lbV9iYXNlMTsKLQkJdm9pZCAqZG1hX2NvaGVyZW50OwotCQlkbWFfYWRkcl90IGRtYV9jb2hlcmVudF9oYW5kbGUsIGRtYV9hZGRyOwotCQlzdHJ1Y3QgQ29tbWFuZENvbnRyb2xCbG9jayAqY2NiX3RtcDsKLQkJaW50IGksIGo7Ci0KLQkJZG1hX2NvaGVyZW50ID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwZGV2LT5kZXYsCi0JCQkoKEFSQ01TUl9NQVhfRlJFRUNDQl9OVU0gKgotCQkJc2l6ZW9mKHN0cnVjdCBDb21tYW5kQ29udHJvbEJsb2NrKSArIDB4MjApICsKLQkJCXNpemVvZihzdHJ1Y3QgTWVzc2FnZVVuaXRfQikpLAotCQkJJmRtYV9jb2hlcmVudF9oYW5kbGUsIEdGUF9LRVJORUwpOwotCQlpZiAoIWRtYV9jb2hlcmVudCkKLQkJCXJldHVybiAtRU5PTUVNOwotCi0JCWFjYi0+ZG1hX2NvaGVyZW50ID0gZG1hX2NvaGVyZW50OwotCQlhY2ItPmRtYV9jb2hlcmVudF9oYW5kbGUgPSBkbWFfY29oZXJlbnRfaGFuZGxlOwotCi0JCWlmICgoKHVuc2lnbmVkIGxvbmcpZG1hX2NvaGVyZW50ICYgMHgxRikpIHsKLQkJCWRtYV9jb2hlcmVudCA9IGRtYV9jb2hlcmVudCArCi0JCQkJKDB4MjAgLSAoKHVuc2lnbmVkIGxvbmcpZG1hX2NvaGVyZW50ICYgMHgxRikpOwotCQkJZG1hX2NvaGVyZW50X2hhbmRsZSA9IGRtYV9jb2hlcmVudF9oYW5kbGUgKwotCQkJCSgweDIwIC0gKCh1bnNpZ25lZCBsb25nKWRtYV9jb2hlcmVudF9oYW5kbGUgJiAweDFGKSk7Ci0JCX0KLQotCQlkbWFfYWRkciA9IGRtYV9jb2hlcmVudF9oYW5kbGU7Ci0JCWNjYl90bXAgPSAoc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2sgKilkbWFfY29oZXJlbnQ7Ci0JCWZvciAoaSA9IDA7IGkgPCBBUkNNU1JfTUFYX0ZSRUVDQ0JfTlVNOyBpKyspIHsKLQkJCWNjYl90bXAtPmNkYl9zaGlmdGVkX3BoeWFkZHIgPSBkbWFfYWRkciA+PiA1OwotCQkJY2NiX3RtcC0+YWNiID0gYWNiOwotCQkJYWNiLT5wY2NiX3Bvb2xbaV0gPSBjY2JfdG1wOwotCQkJbGlzdF9hZGRfdGFpbCgmY2NiX3RtcC0+bGlzdCwgJmFjYi0+Y2NiX2ZyZWVfbGlzdCk7Ci0JCQlkbWFfYWRkciA9IGRtYV9hZGRyICsgc2l6ZW9mKHN0cnVjdCBDb21tYW5kQ29udHJvbEJsb2NrKTsKLQkJCWNjYl90bXArKzsKLQkJfQotCi0JCXJlZyA9IChzdHJ1Y3QgTWVzc2FnZVVuaXRfQiAqKShkbWFfY29oZXJlbnQgKwotCQlBUkNNU1JfTUFYX0ZSRUVDQ0JfTlVNICogc2l6ZW9mKHN0cnVjdCBDb21tYW5kQ29udHJvbEJsb2NrKSk7Ci0JCWFjYi0+cG11QiA9IHJlZzsKLQkJbWVtX2Jhc2UwID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksCi0JCQkJCXBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpOwotCQlpZiAoIW1lbV9iYXNlMCkKLQkJCWdvdG8gb3V0OwotCi0JCW1lbV9iYXNlMSA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpLAotCQkJCQlwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDIpKTsKLQkJaWYgKCFtZW1fYmFzZTEpIHsKLQkJCWlvdW5tYXAobWVtX2Jhc2UwKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJcmVnLT5kcnYyaW9wX2Rvb3JiZWxsX3JlZyA9IG1lbV9iYXNlMCArIEFSQ01TUl9EUlYySU9QX0RPT1JCRUxMOwotCQlyZWctPmRydjJpb3BfZG9vcmJlbGxfbWFza19yZWcgPSBtZW1fYmFzZTAgKwotCQkJCQkJQVJDTVNSX0RSVjJJT1BfRE9PUkJFTExfTUFTSzsKLQkJcmVnLT5pb3AyZHJ2X2Rvb3JiZWxsX3JlZyA9IG1lbV9iYXNlMCArIEFSQ01TUl9JT1AyRFJWX0RPT1JCRUxMOwotCQlyZWctPmlvcDJkcnZfZG9vcmJlbGxfbWFza19yZWcgPSBtZW1fYmFzZTAgKwotCQkJCQkJQVJDTVNSX0lPUDJEUlZfRE9PUkJFTExfTUFTSzsKLQkJcmVnLT5pb2N0bF93YnVmZmVyX3JlZyA9IG1lbV9iYXNlMSArIEFSQ01TUl9JT0NUTF9XQlVGRkVSOwotCQlyZWctPmlvY3RsX3JidWZmZXJfcmVnID0gbWVtX2Jhc2UxICsgQVJDTVNSX0lPQ1RMX1JCVUZGRVI7Ci0JCXJlZy0+bXNnY29kZV9yd2J1ZmZlcl9yZWcgPSBtZW1fYmFzZTEgKyBBUkNNU1JfTVNHQ09ERV9SV0JVRkZFUjsKLQotCQlhY2ItPnZpcjJwaHlfb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpY2NiX3RtcCAtKHVuc2lnbmVkIGxvbmcpZG1hX2FkZHI7Ci0JCWZvciAoaSA9IDA7IGkgPCBBUkNNU1JfTUFYX1RBUkdFVElEOyBpKyspCi0JCQlmb3IgKGogPSAwOyBqIDwgQVJDTVNSX01BWF9UQVJHRVRMVU47IGorKykKLQkJCQlhY2ItPmRldnN0YXRlW2ldW2pdID0gQVJFQ0FfUkFJRF9HT09EOwotCQl9Ci0JCWJyZWFrOworCW1heF94ZmVyX2xlbiA9IEFSQ01TUl9NQVhfWEZFUl9MRU47CisJbWF4X3NnX2VudHJ5cyA9IEFSQ01TUl9ERUZBVUxUX1NHX0VOVFJJRVM7CisJZmlybV9jb25maWdfdmVyc2lvbiA9IGFjYi0+ZmlybV9jZmdfdmVyc2lvbjsKKwlpZigoZmlybV9jb25maWdfdmVyc2lvbiAmIDB4RkYpID49IDMpeworCQltYXhfeGZlcl9sZW4gPSAoQVJDTVNSX0NEQl9TR19QQUdFX0xFTkdUSCA8PCAoKGZpcm1fY29uZmlnX3ZlcnNpb24gPj4gOCkgJiAweEZGKSkgKiAxMDI0Oy8qIG1heCA0TSBieXRlICovCisJCW1heF9zZ19lbnRyeXMgPSAobWF4X3hmZXJfbGVuLzQwOTYpOwkKKwl9CisJYWNiLT5ob3N0LT5tYXhfc2VjdG9ycyA9IG1heF94ZmVyX2xlbi81MTI7CisJYWNiLT5ob3N0LT5zZ190YWJsZXNpemUgPSBtYXhfc2dfZW50cnlzOworCXJvdW5kdXBfY2Nic2l6ZSA9IHJvdW5kdXAoc2l6ZW9mKHN0cnVjdCBDb21tYW5kQ29udHJvbEJsb2NrKSArIChtYXhfc2dfZW50cnlzIC0gMSkgKiBzaXplb2Yoc3RydWN0IFNHNjRFTlRSWSksIDMyKTsKKwlhY2ItPnVuY2FjaGVfc2l6ZSA9IHJvdW5kdXBfY2Nic2l6ZSAqIEFSQ01TUl9NQVhfRlJFRUNDQl9OVU0gKyAzMjsKKwlkbWFfY29oZXJlbnQgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwgYWNiLT51bmNhY2hlX3NpemUsICZkbWFfY29oZXJlbnRfaGFuZGxlLCBHRlBfS0VSTkVMKTsKKwlpZighZG1hX2NvaGVyZW50KXsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJhcmNtc3IlZDogZG1hX2FsbG9jX2NvaGVyZW50IGdvdCBlcnJvciBcbiIsIGFjYi0+aG9zdC0+aG9zdF9ubyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlhY2ItPmRtYV9jb2hlcmVudCA9IGRtYV9jb2hlcmVudDsKKwlhY2ItPmRtYV9jb2hlcmVudF9oYW5kbGUgPSBkbWFfY29oZXJlbnRfaGFuZGxlOworCW1lbXNldChkbWFfY29oZXJlbnQsIDAsIGFjYi0+dW5jYWNoZV9zaXplKTsKKwlvZmZzZXQgPSByb3VuZHVwKCh1bnNpZ25lZCBsb25nKWRtYV9jb2hlcmVudCwgMzIpIC0gKHVuc2lnbmVkIGxvbmcpZG1hX2NvaGVyZW50OworCWRtYV9jb2hlcmVudF9oYW5kbGUgPSBkbWFfY29oZXJlbnRfaGFuZGxlICsgb2Zmc2V0OworCWRtYV9jb2hlcmVudCA9IChzdHJ1Y3QgQ29tbWFuZENvbnRyb2xCbG9jayAqKWRtYV9jb2hlcmVudCArIG9mZnNldDsKKwljY2JfdG1wID0gZG1hX2NvaGVyZW50OworCWFjYi0+dmlyMnBoeV9vZmZzZXQgPSAodW5zaWduZWQgbG9uZylkbWFfY29oZXJlbnQgLSAodW5zaWduZWQgbG9uZylkbWFfY29oZXJlbnRfaGFuZGxlOworCWZvcihpID0gMDsgaSA8IEFSQ01TUl9NQVhfRlJFRUNDQl9OVU07IGkrKyl7CisJCWNkYl9waHlhZGRyID0gZG1hX2NvaGVyZW50X2hhbmRsZSArIG9mZnNldG9mKHN0cnVjdCBDb21tYW5kQ29udHJvbEJsb2NrLCBhcmNtc3JfY2RiKTsKKwkJY2NiX3RtcC0+Y2RiX3BoeWFkZHJfcGF0dGVybiA9ICgoYWNiLT5hZGFwdGVyX3R5cGUgPT0gQUNCX0FEQVBURVJfVFlQRV9DKSA/IGNkYl9waHlhZGRyIDogKGNkYl9waHlhZGRyID4+IDUpKTsKKwkJYWNiLT5wY2NiX3Bvb2xbaV0gPSBjY2JfdG1wOworCQljY2JfdG1wLT5hY2IgPSBhY2I7CisJCUlOSVRfTElTVF9IRUFEKCZjY2JfdG1wLT5saXN0KTsKKwkJbGlzdF9hZGRfdGFpbCgmY2NiX3RtcC0+bGlzdCwgJmFjYi0+Y2NiX2ZyZWVfbGlzdCk7CisJCWNjYl90bXAgPSAoc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2sgKikoKHVuc2lnbmVkIGxvbmcpY2NiX3RtcCArIHJvdW5kdXBfY2Nic2l6ZSk7CisJCWRtYV9jb2hlcmVudF9oYW5kbGUgPSBkbWFfY29oZXJlbnRfaGFuZGxlICsgcm91bmR1cF9jY2JzaXplOwogCX0KIAlyZXR1cm4gMDsKLQotb3V0OgotCWRtYV9mcmVlX2NvaGVyZW50KCZhY2ItPnBkZXYtPmRldiwKLQkJKEFSQ01TUl9NQVhfRlJFRUNDQl9OVU0gKiBzaXplb2Yoc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2spICsgMHgyMCArCi0JCXNpemVvZihzdHJ1Y3QgTWVzc2FnZVVuaXRfQikpLCBhY2ItPmRtYV9jb2hlcmVudCwgYWNiLT5kbWFfY29oZXJlbnRfaGFuZGxlKTsKLQlyZXR1cm4gLUVOT01FTTsKIH0KLXN0YXRpYyB2b2lkIGFyY21zcl9tZXNzYWdlX2lzcl9iaF9mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jaywgYXJjbXNyX2RvX21lc3NhZ2VfaXNyX2JoKTsKIAorc3RhdGljIHZvaWQgYXJjbXNyX21lc3NhZ2VfaXNyX2JoX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykgCit7CisJc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYiA9IGNvbnRhaW5lcl9vZih3b3JrLHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrLCBhcmNtc3JfZG9fbWVzc2FnZV9pc3JfYmgpOwogCXN3aXRjaCAoYWNiLT5hZGFwdGVyX3R5cGUpIHsKIAkJY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0E6IHsKIAogCQkJc3RydWN0IE1lc3NhZ2VVbml0X0EgX19pb21lbSAqcmVnICA9IGFjYi0+cG11QTsKIAkJCWNoYXIgKmFjYl9kZXZfbWFwID0gKGNoYXIgKilhY2ItPmRldmljZV9tYXA7Ci0JCQl1aW50MzJfdCBfX2lvbWVtICpzaWduYXR1cmUgPSAodWludDMyX3QgX19pb21lbSAqKSAoJnJlZy0+bWVzc2FnZV9yd2J1ZmZlclswXSk7Ci0JCQljaGFyIF9faW9tZW0gKmRldmljZW1hcCA9IChjaGFyIF9faW9tZW0gKikgKCZyZWctPm1lc3NhZ2VfcndidWZmZXJbMjFdKTsKKwkJCXVpbnQzMl90IF9faW9tZW0gKnNpZ25hdHVyZSA9ICh1aW50MzJfdCBfX2lvbWVtKikgKCZyZWctPm1lc3NhZ2VfcndidWZmZXJbMF0pOworCQkJY2hhciBfX2lvbWVtICpkZXZpY2VtYXAgPSAoY2hhciBfX2lvbWVtKikgKCZyZWctPm1lc3NhZ2VfcndidWZmZXJbMjFdKTsKIAkJCWludCB0YXJnZXQsIGx1bjsKIAkJCXN0cnVjdCBzY3NpX2RldmljZSAqcHNkZXY7CiAJCQljaGFyIGRpZmY7CiAKIAkJCWF0b21pY19pbmMoJmFjYi0+cnFfbWFwX3Rva2VuKTsKIAkJCWlmIChyZWFkbChzaWduYXR1cmUpID09IEFSQ01TUl9TSUdOQVRVUkVfR0VUX0NPTkZJRykgewotCQkJCWZvciAodGFyZ2V0ID0gMDsgdGFyZ2V0IDwgQVJDTVNSX01BWF9UQVJHRVRJRCAtIDE7IHRhcmdldCsrKSB7CisJCQkJZm9yKHRhcmdldCA9IDA7IHRhcmdldCA8IEFSQ01TUl9NQVhfVEFSR0VUSUQgLTE7IHRhcmdldCsrKSB7CiAJCQkJCWRpZmYgPSAoKmFjYl9kZXZfbWFwKV5yZWFkYihkZXZpY2VtYXApOwogCQkJCQlpZiAoZGlmZiAhPSAwKSB7CiAJCQkJCQljaGFyIHRlbXA7CiAJCQkJCQkqYWNiX2Rldl9tYXAgPSByZWFkYihkZXZpY2VtYXApOwotCQkJCQkJdGVtcCA9ICphY2JfZGV2X21hcDsKLQkJCQkJCWZvciAobHVuID0gMDsgbHVuIDwgQVJDTVNSX01BWF9UQVJHRVRMVU47IGx1bisrKSB7Ci0JCQkJCQkJaWYgKCh0ZW1wICYgMHgwMSkgPT0gMSAmJiAoZGlmZiAmIDB4MDEpID09IDEpIHsKKwkJCQkJCXRlbXAgPSphY2JfZGV2X21hcDsKKwkJCQkJCWZvcihsdW4gPSAwOyBsdW4gPCBBUkNNU1JfTUFYX1RBUkdFVExVTjsgbHVuKyspIHsKKwkJCQkJCQlpZigodGVtcCAmIDB4MDEpPT0xICYmIChkaWZmICYgMHgwMSkgPT0gMSkgewkKIAkJCQkJCQkJc2NzaV9hZGRfZGV2aWNlKGFjYi0+aG9zdCwgMCwgdGFyZ2V0LCBsdW4pOwotCQkJCQkJCX0gZWxzZSBpZiAoKHRlbXAgJiAweDAxKSA9PSAwICYmIChkaWZmICYgMHgwMSkgPT0gMSkgeworCQkJCQkJCX1lbHNlIGlmKCh0ZW1wICYgMHgwMSkgPT0gMCAmJiAoZGlmZiAmIDB4MDEpID09IDEpIHsKIAkJCQkJCQkJcHNkZXYgPSBzY3NpX2RldmljZV9sb29rdXAoYWNiLT5ob3N0LCAwLCB0YXJnZXQsIGx1bik7Ci0JCQkJCQkJCWlmIChwc2RldiAhPSBOVUxMKSB7CisJCQkJCQkJCWlmIChwc2RldiAhPSBOVUxMICkgewogCQkJCQkJCQkJc2NzaV9yZW1vdmVfZGV2aWNlKHBzZGV2KTsKIAkJCQkJCQkJCXNjc2lfZGV2aWNlX3B1dChwc2Rldik7CiAJCQkJCQkJCX0KQEAgLTQxMSw4ICs1NTEsNDUgQEAKIAkJY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0I6IHsKIAkJCXN0cnVjdCBNZXNzYWdlVW5pdF9CICpyZWcgID0gYWNiLT5wbXVCOwogCQkJY2hhciAqYWNiX2Rldl9tYXAgPSAoY2hhciAqKWFjYi0+ZGV2aWNlX21hcDsKLQkJCXVpbnQzMl90IF9faW9tZW0gKnNpZ25hdHVyZSA9ICh1aW50MzJfdCBfX2lvbWVtICopKCZyZWctPm1zZ2NvZGVfcndidWZmZXJfcmVnWzBdKTsKLQkJCWNoYXIgX19pb21lbSAqZGV2aWNlbWFwID0gKGNoYXIgX19pb21lbSAqKSgmcmVnLT5tc2djb2RlX3J3YnVmZmVyX3JlZ1syMV0pOworCQkJdWludDMyX3QgX19pb21lbSAqc2lnbmF0dXJlID0gKHVpbnQzMl90IF9faW9tZW0qKSgmcmVnLT5tZXNzYWdlX3J3YnVmZmVyWzBdKTsKKwkJCWNoYXIgX19pb21lbSAqZGV2aWNlbWFwID0gKGNoYXIgX19pb21lbSopKCZyZWctPm1lc3NhZ2VfcndidWZmZXJbMjFdKTsKKwkJCWludCB0YXJnZXQsIGx1bjsKKwkJCXN0cnVjdCBzY3NpX2RldmljZSAqcHNkZXY7CisJCQljaGFyIGRpZmY7CisKKwkJCWF0b21pY19pbmMoJmFjYi0+cnFfbWFwX3Rva2VuKTsKKwkJCWlmIChyZWFkbChzaWduYXR1cmUpID09IEFSQ01TUl9TSUdOQVRVUkVfR0VUX0NPTkZJRykgeworCQkJCWZvcih0YXJnZXQgPSAwOyB0YXJnZXQgPCBBUkNNU1JfTUFYX1RBUkdFVElEIC0xOyB0YXJnZXQrKykgeworCQkJCQlkaWZmID0gKCphY2JfZGV2X21hcClecmVhZGIoZGV2aWNlbWFwKTsKKwkJCQkJaWYgKGRpZmYgIT0gMCkgeworCQkJCQkJY2hhciB0ZW1wOworCQkJCQkJKmFjYl9kZXZfbWFwID0gcmVhZGIoZGV2aWNlbWFwKTsKKwkJCQkJCXRlbXAgPSphY2JfZGV2X21hcDsKKwkJCQkJCWZvcihsdW4gPSAwOyBsdW4gPCBBUkNNU1JfTUFYX1RBUkdFVExVTjsgbHVuKyspIHsKKwkJCQkJCQlpZigodGVtcCAmIDB4MDEpPT0xICYmIChkaWZmICYgMHgwMSkgPT0gMSkgewkKKwkJCQkJCQkJc2NzaV9hZGRfZGV2aWNlKGFjYi0+aG9zdCwgMCwgdGFyZ2V0LCBsdW4pOworCQkJCQkJCX1lbHNlIGlmKCh0ZW1wICYgMHgwMSkgPT0gMCAmJiAoZGlmZiAmIDB4MDEpID09IDEpIHsKKwkJCQkJCQkJcHNkZXYgPSBzY3NpX2RldmljZV9sb29rdXAoYWNiLT5ob3N0LCAwLCB0YXJnZXQsIGx1bik7CisJCQkJCQkJCWlmIChwc2RldiAhPSBOVUxMICkgeworCQkJCQkJCQkJc2NzaV9yZW1vdmVfZGV2aWNlKHBzZGV2KTsKKwkJCQkJCQkJCXNjc2lfZGV2aWNlX3B1dChwc2Rldik7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJdGVtcCA+Pj0gMTsKKwkJCQkJCQlkaWZmID4+PSAxOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWRldmljZW1hcCsrOworCQkJCQlhY2JfZGV2X21hcCsrOworCQkJCX0KKwkJCX0KKwkJfQorCQlicmVhazsKKwkJY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0M6IHsKKwkJCXN0cnVjdCBNZXNzYWdlVW5pdF9DICpyZWcgID0gYWNiLT5wbXVDOworCQkJY2hhciAqYWNiX2Rldl9tYXAgPSAoY2hhciAqKWFjYi0+ZGV2aWNlX21hcDsKKwkJCXVpbnQzMl90IF9faW9tZW0gKnNpZ25hdHVyZSA9ICh1aW50MzJfdCBfX2lvbWVtICopKCZyZWctPm1zZ2NvZGVfcndidWZmZXJbMF0pOworCQkJY2hhciBfX2lvbWVtICpkZXZpY2VtYXAgPSAoY2hhciBfX2lvbWVtICopKCZyZWctPm1zZ2NvZGVfcndidWZmZXJbMjFdKTsKIAkJCWludCB0YXJnZXQsIGx1bjsKIAkJCXN0cnVjdCBzY3NpX2RldmljZSAqcHNkZXY7CiAJCQljaGFyIGRpZmY7CkBAIC00NDcsMTg1ICs2MjQsMTUyIEBACiAJfQogfQogCi1zdGF0aWMgaW50IGFyY21zcl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCitzdGF0aWMgaW50IGFyY21zcl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CiAJc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYjsKLQl1aW50OF90IGJ1cywgZGV2X2Z1bjsKKwl1aW50OF90IGJ1cyxkZXZfZnVuOwogCWludCBlcnJvcjsKLQogCWVycm9yID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dDsKLQlwY2lfc2V0X21hc3RlcihwZGV2KTsKLQotCWhvc3QgPSBzY3NpX2hvc3RfYWxsb2MoJmFyY21zcl9zY3NpX2hvc3RfdGVtcGxhdGUsCi0JCQlzaXplb2Yoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2spKTsKLQlpZiAoIWhvc3QpIHsKLQkJZXJyb3IgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9kaXNhYmxlX2RldmljZTsKKwlpZihlcnJvcil7CisJCXJldHVybiAtRU5PREVWOwogCX0KLQlhY2IgPSAoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKilob3N0LT5ob3N0ZGF0YTsKLQltZW1zZXQoYWNiLCAwLCBzaXplb2YgKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrKSk7Ci0KKwlob3N0ID0gc2NzaV9ob3N0X2FsbG9jKCZhcmNtc3Jfc2NzaV9ob3N0X3RlbXBsYXRlLCBzaXplb2Yoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2spKTsKKwlpZighaG9zdCl7CisgICAgCQlnb3RvIHBjaV9kaXNhYmxlX2RldjsKKwl9CiAJZXJyb3IgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSyg2NCkpOwotCWlmIChlcnJvcikgeworCWlmKGVycm9yKXsKIAkJZXJyb3IgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpOwotCQlpZiAoZXJyb3IpIHsKKwkJaWYoZXJyb3IpewogCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJICAgICAgICJzY3NpJWQ6IE5vIHN1aXRhYmxlIERNQSBtYXNrIGF2YWlsYWJsZVxuIiwKIAkJCSAgICAgICBob3N0LT5ob3N0X25vKTsKLQkJCWdvdG8gb3V0X2hvc3RfcHV0OworCQkJZ290byBzY3NpX2hvc3RfcmVsZWFzZTsKIAkJfQogCX0KKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ3YWl0X3EpOwogCWJ1cyA9IHBkZXYtPmJ1cy0+bnVtYmVyOwogCWRldl9mdW4gPSBwZGV2LT5kZXZmbjsKLQlhY2ItPmhvc3QgPSBob3N0OworCWFjYiA9IChzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqKSBob3N0LT5ob3N0ZGF0YTsKKwltZW1zZXQoYWNiLDAsc2l6ZW9mKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrKSk7CiAJYWNiLT5wZGV2ID0gcGRldjsKLQlob3N0LT5tYXhfc2VjdG9ycyA9IEFSQ01TUl9NQVhfWEZFUl9TRUNUT1JTOworCWFjYi0+aG9zdCA9IGhvc3Q7CiAJaG9zdC0+bWF4X2x1biA9IEFSQ01TUl9NQVhfVEFSR0VUTFVOOwotCWhvc3QtPm1heF9pZCA9IEFSQ01TUl9NQVhfVEFSR0VUSUQ7LyoxNjo4Ki8KLQlob3N0LT5tYXhfY21kX2xlbiA9IDE2OyAgICAvKnRoaXMgaXMgaXNzdWUgb2YgNjRiaXQgTEJBLCBvdmVyIDJUIGJ5dGUqLwotCWhvc3QtPnNnX3RhYmxlc2l6ZSA9IEFSQ01TUl9NQVhfU0dfRU5UUklFUzsKLQlob3N0LT5jYW5fcXVldWUgPSBBUkNNU1JfTUFYX0ZSRUVDQ0JfTlVNOyAvKiBtYXggc2ltdWx0YW5lb3VzIGNtZHMgKi8KLQlob3N0LT5jbWRfcGVyX2x1biA9IEFSQ01TUl9NQVhfQ01EX1BFUkxVTjsKKwlob3N0LT5tYXhfaWQgPSBBUkNNU1JfTUFYX1RBUkdFVElEOwkJLyoxNjo4Ki8KKwlob3N0LT5tYXhfY21kX2xlbiA9IDE2OwkgCQkJLyp0aGlzIGlzIGlzc3VlIG9mIDY0Yml0IExCQSAsb3ZlciAyVCBieXRlKi8KKwlob3N0LT5jYW5fcXVldWUgPSBBUkNNU1JfTUFYX0ZSRUVDQ0JfTlVNOwkvKiBtYXggc2ltdWx0YW5lb3VzIGNtZHMgKi8JCQorCWhvc3QtPmNtZF9wZXJfbHVuID0gQVJDTVNSX01BWF9DTURfUEVSTFVOOwkgICAgCiAJaG9zdC0+dGhpc19pZCA9IEFSQ01TUl9TQ1NJX0lOSVRJQVRPUl9JRDsKIAlob3N0LT51bmlxdWVfaWQgPSAoYnVzIDw8IDgpIHwgZGV2X2Z1bjsKLQlob3N0LT5pcnEgPSBwZGV2LT5pcnE7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGhvc3QpOworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCWVycm9yID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCAiYXJjbXNyIik7Ci0JaWYgKGVycm9yKSB7Ci0JCWdvdG8gb3V0X2hvc3RfcHV0OworCWlmKGVycm9yKXsKKwkJZ290byBzY3NpX2hvc3RfcmVsZWFzZTsKIAl9Ci0JYXJjbXNyX2RlZmluZV9hZGFwdGVyX3R5cGUoYWNiKTsKLQorCXNwaW5fbG9ja19pbml0KCZhY2ItPmVoX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZhY2ItPmNjYmxpc3RfbG9jayk7CiAJYWNiLT5hY2JfZmxhZ3MgfD0gKEFDQl9GX01FU1NBR0VfV1FCVUZGRVJfQ0xFQVJFRCB8Ci0JCQkgICBBQ0JfRl9NRVNTQUdFX1JRQlVGRkVSX0NMRUFSRUQgfAotCQkJICAgQUNCX0ZfTUVTU0FHRV9XUUJVRkZFUl9SRUFERUQpOworCQkJQUNCX0ZfTUVTU0FHRV9SUUJVRkZFUl9DTEVBUkVEIHwKKwkJCUFDQl9GX01FU1NBR0VfV1FCVUZGRVJfUkVBREVEKTsKIAlhY2ItPmFjYl9mbGFncyAmPSB+QUNCX0ZfU0NTSVNUT1BBREFQVEVSOwogCUlOSVRfTElTVF9IRUFEKCZhY2ItPmNjYl9mcmVlX2xpc3QpOwotCUlOSVRfV09SSygmYWNiLT5hcmNtc3JfZG9fbWVzc2FnZV9pc3JfYmgsIGFyY21zcl9tZXNzYWdlX2lzcl9iaF9mbik7CisJYXJjbXNyX2RlZmluZV9hZGFwdGVyX3R5cGUoYWNiKTsKKwllcnJvciA9IGFyY21zcl9yZW1hcF9wY2lyZWdpb24oYWNiKTsKKwlpZighZXJyb3IpeworCQlnb3RvIHBjaV9yZWxlYXNlX3JlZ3M7CisJfQorCWVycm9yID0gYXJjbXNyX2dldF9maXJtd2FyZV9zcGVjKGFjYik7CisJaWYoIWVycm9yKXsKKwkJZ290byB1bm1hcF9wY2lfcmVnaW9uOworCX0KIAllcnJvciA9IGFyY21zcl9hbGxvY19jY2JfcG9vbChhY2IpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfcmVsZWFzZV9yZWdpb25zOwotCisJaWYoZXJyb3IpeworCQlnb3RvIGZyZWVfaGJiX211OworCX0KIAlhcmNtc3JfaW9wX2luaXQoYWNiKTsKLQllcnJvciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgYXJjbXNyX2RvX2ludGVycnVwdCwKLQkJCSAgICBJUlFGX1NIQVJFRCwgImFyY21zciIsIGFjYik7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9mcmVlX2NjYl9wb29sOwotCi0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIGhvc3QpOwotCWlmIChzdHJuY21wKGFjYi0+ZmlybV92ZXJzaW9uLCAiVjEuNDIiLCA1KSA+PSAwKQotCQlob3N0LT5tYXhfc2VjdG9ycz0gQVJDTVNSX01BWF9YRkVSX1NFQ1RPUlNfQjsKLQogCWVycm9yID0gc2NzaV9hZGRfaG9zdChob3N0LCAmcGRldi0+ZGV2KTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2ZyZWVfaXJxOwotCi0JZXJyb3IgPSBhcmNtc3JfYWxsb2Nfc3lzZnNfYXR0cihhY2IpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfZnJlZV9zeXNmczsKLQotCXNjc2lfc2Nhbl9ob3N0KGhvc3QpOwotCSNpZmRlZiBDT05GSUdfU0NTSV9BUkNNU1JfQUVSCi0JcGNpX2VuYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhwZGV2KTsKLQkjZW5kaWYKKwlpZihlcnJvcil7CisJCWdvdG8gUkFJRF9jb250cm9sbGVyX3N0b3A7CisJfQorCWVycm9yID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBhcmNtc3JfZG9faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgImFyY21zciIsIGFjYik7CisJaWYoZXJyb3IpeworCQlnb3RvIHNjc2lfaG9zdF9yZW1vdmU7CisJfQorCWhvc3QtPmlycSA9IHBkZXYtPmlycTsKKyAgICAJc2NzaV9zY2FuX2hvc3QoaG9zdCk7CisJSU5JVF9XT1JLKCZhY2ItPmFyY21zcl9kb19tZXNzYWdlX2lzcl9iaCwgYXJjbXNyX21lc3NhZ2VfaXNyX2JoX2ZuKTsKIAlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOwotCWFjYi0+Zndfc3RhdGUgPSB0cnVlOworCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgMTYpOworCWFjYi0+ZndfZmxhZyA9IEZXX05PUk1BTDsKIAlpbml0X3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIpOwotCWFjYi0+ZXRlcm5hbF90aW1lci5leHBpcmVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTAqSFopOworCWFjYi0+ZXRlcm5hbF90aW1lci5leHBpcmVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKTsKIAlhY2ItPmV0ZXJuYWxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBhY2I7CiAJYWNiLT5ldGVybmFsX3RpbWVyLmZ1bmN0aW9uID0gJmFyY21zcl9yZXF1ZXN0X2RldmljZV9tYXA7CiAJYWRkX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIpOwotCisJaWYoYXJjbXNyX2FsbG9jX3N5c2ZzX2F0dHIoYWNiKSkKKwkJZ290byBvdXRfZnJlZV9zeXNmczsKIAlyZXR1cm4gMDsKLSBvdXRfZnJlZV9zeXNmczoKLSBvdXRfZnJlZV9pcnE6Ci0JZnJlZV9pcnEocGRldi0+aXJxLCBhY2IpOwotIG91dF9mcmVlX2NjYl9wb29sOgorb3V0X2ZyZWVfc3lzZnM6CitzY3NpX2hvc3RfcmVtb3ZlOgorCXNjc2lfcmVtb3ZlX2hvc3QoaG9zdCk7CitSQUlEX2NvbnRyb2xsZXJfc3RvcDoKKwlhcmNtc3Jfc3RvcF9hZGFwdGVyX2JncmIoYWNiKTsKKwlhcmNtc3JfZmx1c2hfYWRhcHRlcl9jYWNoZShhY2IpOwogCWFyY21zcl9mcmVlX2NjYl9wb29sKGFjYik7Ci0gb3V0X3JlbGVhc2VfcmVnaW9uczoKK2ZyZWVfaGJiX211OgorCWFyY21zcl9mcmVlX2hiYl9tdShhY2IpOwordW5tYXBfcGNpX3JlZ2lvbjoKKwlhcmNtc3JfdW5tYXBfcGNpcmVnaW9uKGFjYik7CitwY2lfcmVsZWFzZV9yZWdzOgogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7Ci0gb3V0X2hvc3RfcHV0Ogorc2NzaV9ob3N0X3JlbGVhc2U6CiAJc2NzaV9ob3N0X3B1dChob3N0KTsKLSBvdXRfZGlzYWJsZV9kZXZpY2U6CitwY2lfZGlzYWJsZV9kZXY6CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotIG91dDoKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0YXRpYyB1aW50OF90IGFyY21zcl9oYmFfd2FpdF9tc2dpbnRfcmVhZHkoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYikKLXsKLQlzdHJ1Y3QgTWVzc2FnZVVuaXRfQSBfX2lvbWVtICpyZWcgPSBhY2ItPnBtdUE7Ci0JdWludDMyX3QgSW5kZXg7Ci0JdWludDhfdCBSZXRyaWVzID0gMHgwMDsKLQotCWRvIHsKLQkJZm9yIChJbmRleCA9IDA7IEluZGV4IDwgMTAwOyBJbmRleCsrKSB7Ci0JCQlpZiAocmVhZGwoJnJlZy0+b3V0Ym91bmRfaW50c3RhdHVzKSAmCi0JCQkJCUFSQ01TUl9NVV9PVVRCT1VORF9NRVNTQUdFMF9JTlQpIHsKLQkJCQl3cml0ZWwoQVJDTVNSX01VX09VVEJPVU5EX01FU1NBR0UwX0lOVCwKLQkJCQkJJnJlZy0+b3V0Ym91bmRfaW50c3RhdHVzKTsKLQkJCQlyZXR1cm4gMHgwMDsKLQkJCX0KLQkJCW1zbGVlcCgxMCk7Ci0JCX0vKm1heCAxIHNlY29uZHMqLwotCi0JfSB3aGlsZSAoUmV0cmllcysrIDwgMjApOy8qbWF4IDIwIHNlYyovCi0JcmV0dXJuIDB4ZmY7Ci19Ci0KLXN0YXRpYyB1aW50OF90IGFyY21zcl9oYmJfd2FpdF9tc2dpbnRfcmVhZHkoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYikKLXsKLQlzdHJ1Y3QgTWVzc2FnZVVuaXRfQiAqcmVnID0gYWNiLT5wbXVCOwotCXVpbnQzMl90IEluZGV4OwotCXVpbnQ4X3QgUmV0cmllcyA9IDB4MDA7Ci0KLQlkbyB7Ci0JCWZvciAoSW5kZXggPSAwOyBJbmRleCA8IDEwMDsgSW5kZXgrKykgewotCQkJaWYgKHJlYWRsKHJlZy0+aW9wMmRydl9kb29yYmVsbF9yZWcpCi0JCQkJJiBBUkNNU1JfSU9QMkRSVl9NRVNTQUdFX0NNRF9ET05FKSB7Ci0JCQkJd3JpdGVsKEFSQ01TUl9NRVNTQUdFX0lOVF9DTEVBUl9QQVRURVJOCi0JCQkJCSwgcmVnLT5pb3AyZHJ2X2Rvb3JiZWxsX3JlZyk7Ci0JCQkJd3JpdGVsKEFSQ01TUl9EUlYySU9QX0VORF9PRl9JTlRFUlJVUFQsIHJlZy0+ZHJ2MmlvcF9kb29yYmVsbF9yZWcpOwotCQkJCXJldHVybiAweDAwOwotCQkJfQotCQkJbXNsZWVwKDEwKTsKLQkJfS8qbWF4IDEgc2Vjb25kcyovCi0KLQl9IHdoaWxlIChSZXRyaWVzKysgPCAyMCk7LyptYXggMjAgc2VjKi8KLQlyZXR1cm4gMHhmZjsKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogc3RhdGljIHVpbnQ4X3QgYXJjbXNyX2Fib3J0X2hiYV9hbGxjbWQoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYikKIHsKIAlzdHJ1Y3QgTWVzc2FnZVVuaXRfQSBfX2lvbWVtICpyZWcgPSBhY2ItPnBtdUE7Ci0KIAl3cml0ZWwoQVJDTVNSX0lOQk9VTkRfTUVTRzBfQUJPUlRfQ01ELCAmcmVnLT5pbmJvdW5kX21zZ2FkZHIwKTsKLQlpZiAoYXJjbXNyX2hiYV93YWl0X21zZ2ludF9yZWFkeShhY2IpKSB7CisJaWYgKCFhcmNtc3JfaGJhX3dhaXRfbXNnaW50X3JlYWR5KGFjYikpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFCiAJCQkiYXJjbXNyJWQ6IHdhaXQgJ2Fib3J0IGFsbCBvdXRzdGFuZGluZyBjb21tYW5kJyB0aW1lb3V0IFxuIgogCQkJLCBhY2ItPmhvc3QtPmhvc3Rfbm8pOwotCQlyZXR1cm4gMHhmZjsKKwkJcmV0dXJuIGZhbHNlOwogCX0KLQlyZXR1cm4gMHgwMDsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIHVpbnQ4X3QgYXJjbXNyX2Fib3J0X2hiYl9hbGxjbWQoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYikKIHsKIAlzdHJ1Y3QgTWVzc2FnZVVuaXRfQiAqcmVnID0gYWNiLT5wbXVCOwogCi0Jd3JpdGVsKEFSQ01TUl9NRVNTQUdFX0FCT1JUX0NNRCwgcmVnLT5kcnYyaW9wX2Rvb3JiZWxsX3JlZyk7Ci0JaWYgKGFyY21zcl9oYmJfd2FpdF9tc2dpbnRfcmVhZHkoYWNiKSkgeworCXdyaXRlbChBUkNNU1JfTUVTU0FHRV9BQk9SVF9DTUQsIHJlZy0+ZHJ2MmlvcF9kb29yYmVsbCk7CisJaWYgKCFhcmNtc3JfaGJiX3dhaXRfbXNnaW50X3JlYWR5KGFjYikpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFCiAJCQkiYXJjbXNyJWQ6IHdhaXQgJ2Fib3J0IGFsbCBvdXRzdGFuZGluZyBjb21tYW5kJyB0aW1lb3V0IFxuIgogCQkJLCBhY2ItPmhvc3QtPmhvc3Rfbm8pOwotCQlyZXR1cm4gMHhmZjsKKwkJcmV0dXJuIGZhbHNlOwogCX0KLQlyZXR1cm4gMHgwMDsKKwlyZXR1cm4gdHJ1ZTsKIH0KLQorc3RhdGljIHVpbnQ4X3QgYXJjbXNyX2Fib3J0X2hiY19hbGxjbWQoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKnBBQ0IpCit7CisJc3RydWN0IE1lc3NhZ2VVbml0X0MgKnJlZyA9IChzdHJ1Y3QgTWVzc2FnZVVuaXRfQyAqKXBBQ0ItPnBtdUM7CisJd3JpdGVsKEFSQ01TUl9JTkJPVU5EX01FU0cwX0FCT1JUX0NNRCwgJnJlZy0+aW5ib3VuZF9tc2dhZGRyMCk7CisJd3JpdGVsKEFSQ01TUl9IQkNNVV9EUlYySU9QX01FU1NBR0VfQ01EX0RPTkUsICZyZWctPmluYm91bmRfZG9vcmJlbGwpOworCWlmICghYXJjbXNyX2hiY193YWl0X21zZ2ludF9yZWFkeShwQUNCKSkgeworCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJCSJhcmNtc3IlZDogd2FpdCAnYWJvcnQgYWxsIG91dHN0YW5kaW5nIGNvbW1hbmQnIHRpbWVvdXQgXG4iCisJCQksIHBBQ0ItPmhvc3QtPmhvc3Rfbm8pOworCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiB0cnVlOworfQogc3RhdGljIHVpbnQ4X3QgYXJjbXNyX2Fib3J0X2FsbGNtZChzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKQogewogCXVpbnQ4X3QgcnRudmFsID0gMDsKQEAgLTYzOCwxMCArNzgyLDI2IEBACiAJY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0I6IHsKIAkJcnRudmFsID0gYXJjbXNyX2Fib3J0X2hiYl9hbGxjbWQoYWNiKTsKIAkJfQorCQlicmVhazsKKworCWNhc2UgQUNCX0FEQVBURVJfVFlQRV9DOiB7CisJCXJ0bnZhbCA9IGFyY21zcl9hYm9ydF9oYmNfYWxsY21kKGFjYik7CisJCX0KIAl9CiAJcmV0dXJuIHJ0bnZhbDsKIH0KIAorc3RhdGljIGJvb2wgYXJjbXNyX2hiYl9lbmFibGVfZHJpdmVyX21vZGUoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKnBhY2IpCit7CisJc3RydWN0IE1lc3NhZ2VVbml0X0IgKnJlZyA9IHBhY2ItPnBtdUI7CisJd3JpdGVsKEFSQ01TUl9NRVNTQUdFX1NUQVJUX0RSSVZFUl9NT0RFLCByZWctPmRydjJpb3BfZG9vcmJlbGwpOworCWlmICghYXJjbXNyX2hiYl93YWl0X21zZ2ludF9yZWFkeShwYWNiKSkgeworCQlwcmludGsoS0VSTl9FUlIgImFyY21zciVkOiBjYW4ndCBzZXQgZHJpdmVyIG1vZGUuIFxuIiwgcGFjYi0+aG9zdC0+aG9zdF9ubyk7CisJCXJldHVybiBmYWxzZTsKKwl9CisgICAgCXJldHVybiB0cnVlOworfQorCiBzdGF0aWMgdm9pZCBhcmNtc3JfcGNpX3VubWFwX2RtYShzdHJ1Y3QgQ29tbWFuZENvbnRyb2xCbG9jayAqY2NiKQogewogCXN0cnVjdCBzY3NpX2NtbmQgKnBjbWQgPSBjY2ItPnBjbWQ7CkBAIC02NDksNzUgKzgwOSwyNSBAQAogCXNjc2lfZG1hX3VubWFwKHBjbWQpOwogfQogCi1zdGF0aWMgdm9pZCBhcmNtc3JfY2NiX2NvbXBsZXRlKHN0cnVjdCBDb21tYW5kQ29udHJvbEJsb2NrICpjY2IsIGludCBzdGFuZF9mbGFnKQorc3RhdGljIHZvaWQgYXJjbXNyX2NjYl9jb21wbGV0ZShzdHJ1Y3QgQ29tbWFuZENvbnRyb2xCbG9jayAqY2NiKQogewogCXN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IgPSBjY2ItPmFjYjsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpwY21kID0gY2NiLT5wY21kOwotCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlhdG9taWNfZGVjKCZhY2ItPmNjYm91dHN0YW5kaW5nY291bnQpOwogCWFyY21zcl9wY2lfdW5tYXBfZG1hKGNjYik7Ci0JaWYgKHN0YW5kX2ZsYWcgPT0gMSkKLQkJYXRvbWljX2RlYygmYWNiLT5jY2JvdXRzdGFuZGluZ2NvdW50KTsKIAljY2ItPnN0YXJ0ZG9uZSA9IEFSQ01TUl9DQ0JfRE9ORTsKLQljY2ItPmNjYl9mbGFncyA9IDA7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFjYi0+Y2NibGlzdF9sb2NrLCBmbGFncyk7CiAJbGlzdF9hZGRfdGFpbCgmY2NiLT5saXN0LCAmYWNiLT5jY2JfZnJlZV9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhY2ItPmNjYmxpc3RfbG9jaywgZmxhZ3MpOwogCXBjbWQtPnNjc2lfZG9uZShwY21kKTsKIH0KIAotc3RhdGljIHZvaWQgYXJjbXNyX2ZsdXNoX2hiYV9jYWNoZShzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKQotewotCXN0cnVjdCBNZXNzYWdlVW5pdF9BIF9faW9tZW0gKnJlZyA9IGFjYi0+cG11QTsKLQlpbnQgcmV0cnlfY291bnQgPSAzMDsKLQotCXdyaXRlbChBUkNNU1JfSU5CT1VORF9NRVNHMF9GTFVTSF9DQUNIRSwgJnJlZy0+aW5ib3VuZF9tc2dhZGRyMCk7Ci0JZG8gewotCQlpZiAoIWFyY21zcl9oYmFfd2FpdF9tc2dpbnRfcmVhZHkoYWNiKSkKLQkJCWJyZWFrOwotCQllbHNlIHsKLQkJCXJldHJ5X2NvdW50LS07Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgImFyY21zciVkOiB3YWl0ICdmbHVzaCBhZGFwdGVyIGNhY2hlJyBcCi0JCQl0aW1lb3V0LCByZXRyeSBjb3VudCBkb3duID0gJWQgXG4iLCBhY2ItPmhvc3QtPmhvc3Rfbm8sIHJldHJ5X2NvdW50KTsKLQkJfQotCX0gd2hpbGUgKHJldHJ5X2NvdW50ICE9IDApOwotfQotCi1zdGF0aWMgdm9pZCBhcmNtc3JfZmx1c2hfaGJiX2NhY2hlKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IpCi17Ci0Jc3RydWN0IE1lc3NhZ2VVbml0X0IgKnJlZyA9IGFjYi0+cG11QjsKLQlpbnQgcmV0cnlfY291bnQgPSAzMDsKLQotCXdyaXRlbChBUkNNU1JfTUVTU0FHRV9GTFVTSF9DQUNIRSwgcmVnLT5kcnYyaW9wX2Rvb3JiZWxsX3JlZyk7Ci0JZG8gewotCQlpZiAoIWFyY21zcl9oYmJfd2FpdF9tc2dpbnRfcmVhZHkoYWNiKSkKLQkJCWJyZWFrOwotCQllbHNlIHsKLQkJCXJldHJ5X2NvdW50LS07Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgImFyY21zciVkOiB3YWl0ICdmbHVzaCBhZGFwdGVyIGNhY2hlJyBcCi0JCQl0aW1lb3V0LHJldHJ5IGNvdW50IGRvd24gPSAlZCBcbiIsIGFjYi0+aG9zdC0+aG9zdF9ubywgcmV0cnlfY291bnQpOwotCQl9Ci0JfSB3aGlsZSAocmV0cnlfY291bnQgIT0gMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyY21zcl9mbHVzaF9hZGFwdGVyX2NhY2hlKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IpCi17Ci0Jc3dpdGNoIChhY2ItPmFkYXB0ZXJfdHlwZSkgewotCi0JY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0E6IHsKLQkJYXJjbXNyX2ZsdXNoX2hiYV9jYWNoZShhY2IpOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0I6IHsKLQkJYXJjbXNyX2ZsdXNoX2hiYl9jYWNoZShhY2IpOwotCQl9Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBhcmNtc3JfcmVwb3J0X3NlbnNlX2luZm8oc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2sgKmNjYikKIHsKIAogCXN0cnVjdCBzY3NpX2NtbmQgKnBjbWQgPSBjY2ItPnBjbWQ7CiAJc3RydWN0IFNFTlNFX0RBVEEgKnNlbnNlYnVmZmVyID0gKHN0cnVjdCBTRU5TRV9EQVRBICopcGNtZC0+c2Vuc2VfYnVmZmVyOwotCiAJcGNtZC0+cmVzdWx0ID0gRElEX09LIDw8IDE2OwogCWlmIChzZW5zZWJ1ZmZlcikgewogCQlpbnQgc2Vuc2VfZGF0YV9sZW5ndGggPQpAQCAtNzMzLDggKzg0Myw3IEBACiBzdGF0aWMgdTMyIGFyY21zcl9kaXNhYmxlX291dGJvdW5kX2ludHMoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYikKIHsKIAl1MzIgb3JpZ19tYXNrID0gMDsKLQlzd2l0Y2ggKGFjYi0+YWRhcHRlcl90eXBlKSB7Ci0KKwlzd2l0Y2ggKGFjYi0+YWRhcHRlcl90eXBlKSB7CQogCWNhc2UgQUNCX0FEQVBURVJfVFlQRV9BIDogewogCQlzdHJ1Y3QgTWVzc2FnZVVuaXRfQSBfX2lvbWVtICpyZWcgPSBhY2ItPnBtdUE7CiAJCW9yaWdfbWFzayA9IHJlYWRsKCZyZWctPm91dGJvdW5kX2ludG1hc2spOwpAQCAtNzQyLDM1ICs4NTEsNDAgQEAKIAkJCQkJCSZyZWctPm91dGJvdW5kX2ludG1hc2spOwogCQl9CiAJCWJyZWFrOwotCiAJY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0IgOiB7CiAJCXN0cnVjdCBNZXNzYWdlVW5pdF9CICpyZWcgPSBhY2ItPnBtdUI7Ci0JCW9yaWdfbWFzayA9IHJlYWRsKHJlZy0+aW9wMmRydl9kb29yYmVsbF9tYXNrX3JlZyk7Ci0JCXdyaXRlbCgwLCByZWctPmlvcDJkcnZfZG9vcmJlbGxfbWFza19yZWcpOworCQlvcmlnX21hc2sgPSByZWFkbChyZWctPmlvcDJkcnZfZG9vcmJlbGxfbWFzayk7CisJCXdyaXRlbCgwLCByZWctPmlvcDJkcnZfZG9vcmJlbGxfbWFzayk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0M6eworCQlzdHJ1Y3QgTWVzc2FnZVVuaXRfQyAqcmVnID0gKHN0cnVjdCBNZXNzYWdlVW5pdF9DICopYWNiLT5wbXVDOworCQkvKiBkaXNhYmxlIGFsbCBvdXRib3VuZCBpbnRlcnJ1cHQgKi8KKwkJb3JpZ19tYXNrID0gcmVhZGwoJnJlZy0+aG9zdF9pbnRfbWFzayk7IC8qIGRpc2FibGUgb3V0Ym91bmQgbWVzc2FnZTAgaW50ICovCisJCXdyaXRlbChvcmlnX21hc2t8QVJDTVNSX0hCQ01VX0FMTF9JTlRNQVNLRU5BQkxFLCAmcmVnLT5ob3N0X2ludF9tYXNrKTsKIAkJfQogCQlicmVhazsKIAl9CiAJcmV0dXJuIG9yaWdfbWFzazsKIH0KIAotc3RhdGljIHZvaWQgYXJjbXNyX3JlcG9ydF9jY2Jfc3RhdGUoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYiwgXAotCQkJc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2sgKmNjYiwgdWludDMyX3QgZmxhZ19jY2IpCitzdGF0aWMgdm9pZCBhcmNtc3JfcmVwb3J0X2NjYl9zdGF0ZShzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiLCAKKwkJCXN0cnVjdCBDb21tYW5kQ29udHJvbEJsb2NrICpjY2IsIGJvb2wgZXJyb3IpCiB7Ci0KIAl1aW50OF90IGlkLCBsdW47CiAJaWQgPSBjY2ItPnBjbWQtPmRldmljZS0+aWQ7CiAJbHVuID0gY2NiLT5wY21kLT5kZXZpY2UtPmx1bjsKLQlpZiAoIShmbGFnX2NjYiAmIEFSQ01TUl9DQ0JSRVBMWV9GTEFHX0VSUk9SKSkgeworCWlmICghZXJyb3IpIHsKIAkJaWYgKGFjYi0+ZGV2c3RhdGVbaWRdW2x1bl0gPT0gQVJFQ0FfUkFJRF9HT05FKQogCQkJYWNiLT5kZXZzdGF0ZVtpZF1bbHVuXSA9IEFSRUNBX1JBSURfR09PRDsKIAkJCWNjYi0+cGNtZC0+cmVzdWx0ID0gRElEX09LIDw8IDE2OwotCQkJYXJjbXNyX2NjYl9jb21wbGV0ZShjY2IsIDEpOwotCX0gZWxzZSB7CisJCQlhcmNtc3JfY2NiX2NvbXBsZXRlKGNjYik7CisJfWVsc2V7CiAJCXN3aXRjaCAoY2NiLT5hcmNtc3JfY2RiLkRldmljZVN0YXR1cykgewogCQljYXNlIEFSQ01TUl9ERVZfU0VMRUNUX1RJTUVPVVQ6IHsKIAkJCWFjYi0+ZGV2c3RhdGVbaWRdW2x1bl0gPSBBUkVDQV9SQUlEX0dPTkU7CiAJCQljY2ItPnBjbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwotCQkJYXJjbXNyX2NjYl9jb21wbGV0ZShjY2IsIDEpOworCQkJYXJjbXNyX2NjYl9jb21wbGV0ZShjY2IpOwogCQkJfQogCQkJYnJlYWs7CiAKQEAgLTc3OSw0OSArODkzLDQ5IEBACiAJCWNhc2UgQVJDTVNSX0RFVl9JTklUX0ZBSUw6IHsKIAkJCWFjYi0+ZGV2c3RhdGVbaWRdW2x1bl0gPSBBUkVDQV9SQUlEX0dPTkU7CiAJCQljY2ItPnBjbWQtPnJlc3VsdCA9IERJRF9CQURfVEFSR0VUIDw8IDE2OwotCQkJYXJjbXNyX2NjYl9jb21wbGV0ZShjY2IsIDEpOworCQkJYXJjbXNyX2NjYl9jb21wbGV0ZShjY2IpOwogCQkJfQogCQkJYnJlYWs7CiAKIAkJY2FzZSBBUkNNU1JfREVWX0NIRUNLX0NPTkRJVElPTjogewogCQkJYWNiLT5kZXZzdGF0ZVtpZF1bbHVuXSA9IEFSRUNBX1JBSURfR09PRDsKIAkJCWFyY21zcl9yZXBvcnRfc2Vuc2VfaW5mbyhjY2IpOwotCQkJYXJjbXNyX2NjYl9jb21wbGV0ZShjY2IsIDEpOworCQkJYXJjbXNyX2NjYl9jb21wbGV0ZShjY2IpOwogCQkJfQogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCQlwcmludGsoS0VSTl9OT1RJQ0UKLQkJCQkJImFyY21zciVkOiBzY3NpIGlkID0gJWQgbHVuID0gJWQiCi0JCQkJCSIgaXNyIGdldCBjb21tYW5kIGVycm9yIGRvbmUsICIKLQkJCQkJImJ1dCBnb3QgdW5rbm93biBEZXZpY2VTdGF0dXMgPSAweCV4IFxuIgotCQkJCQksIGFjYi0+aG9zdC0+aG9zdF9ubwotCQkJCQksIGlkCi0JCQkJCSwgbHVuCi0JCQkJCSwgY2NiLT5hcmNtc3JfY2RiLkRldmljZVN0YXR1cyk7Ci0JCQkJCWFjYi0+ZGV2c3RhdGVbaWRdW2x1bl0gPSBBUkVDQV9SQUlEX0dPTkU7Ci0JCQkJCWNjYi0+cGNtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7Ci0JCQkJCWFyY21zcl9jY2JfY29tcGxldGUoY2NiLCAxKTsKKwkJCXByaW50ayhLRVJOX05PVElDRQorCQkJCSJhcmNtc3IlZDogc2NzaSBpZCA9ICVkIGx1biA9ICVkIGlzciBnZXQgY29tbWFuZCBlcnJvciBkb25lLCBcCisJCQkJYnV0IGdvdCB1bmtub3duIERldmljZVN0YXR1cyA9IDB4JXggXG4iCisJCQkJLCBhY2ItPmhvc3QtPmhvc3Rfbm8KKwkJCQksIGlkCisJCQkJLCBsdW4KKwkJCQksIGNjYi0+YXJjbXNyX2NkYi5EZXZpY2VTdGF0dXMpOworCQkJCWFjYi0+ZGV2c3RhdGVbaWRdW2x1bl0gPSBBUkVDQV9SQUlEX0dPTkU7CisJCQkJY2NiLT5wY21kLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKKwkJCQlhcmNtc3JfY2NiX2NvbXBsZXRlKGNjYik7CiAJCQlicmVhazsKIAkJfQogCX0KIH0KIAotc3RhdGljIHZvaWQgYXJjbXNyX2RyYWluX2RvbmVxdWV1ZShzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiLCB1aW50MzJfdCBmbGFnX2NjYikKK3N0YXRpYyB2b2lkIGFyY21zcl9kcmFpbl9kb25lcXVldWUoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYiwgc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2sgKnBDQ0IsIGJvb2wgZXJyb3IpCiAKIHsKLQlzdHJ1Y3QgQ29tbWFuZENvbnRyb2xCbG9jayAqY2NiOwotCi0JY2NiID0gKHN0cnVjdCBDb21tYW5kQ29udHJvbEJsb2NrICopKGFjYi0+dmlyMnBoeV9vZmZzZXQgKyAoZmxhZ19jY2IgPDwgNSkpOwotCWlmICgoY2NiLT5hY2IgIT0gYWNiKSB8fCAoY2NiLT5zdGFydGRvbmUgIT0gQVJDTVNSX0NDQl9TVEFSVCkpIHsKLQkJaWYgKGNjYi0+c3RhcnRkb25lID09IEFSQ01TUl9DQ0JfQUJPUlRFRCkgewotCQkJc3RydWN0IHNjc2lfY21uZCAqYWJvcnRjbWQgPSBjY2ItPnBjbWQ7CisJaW50IGlkLCBsdW47CisJaWYgKChwQ0NCLT5hY2IgIT0gYWNiKSB8fCAocENDQi0+c3RhcnRkb25lICE9IEFSQ01TUl9DQ0JfU1RBUlQpKSB7CisJCWlmIChwQ0NCLT5zdGFydGRvbmUgPT0gQVJDTVNSX0NDQl9BQk9SVEVEKSB7CisJCQlzdHJ1Y3Qgc2NzaV9jbW5kICphYm9ydGNtZCA9IHBDQ0ItPnBjbWQ7CiAJCQlpZiAoYWJvcnRjbWQpIHsKKwkJCQlpZCA9IGFib3J0Y21kLT5kZXZpY2UtPmlkOworCQkJCWx1biA9IGFib3J0Y21kLT5kZXZpY2UtPmx1bjsJCQkJCiAJCQkJYWJvcnRjbWQtPnJlc3VsdCB8PSBESURfQUJPUlQgPDwgMTY7Ci0JCQkJYXJjbXNyX2NjYl9jb21wbGV0ZShjY2IsIDEpOwotCQkJCXByaW50ayhLRVJOX05PVElDRSAiYXJjbXNyJWQ6IGNjYiA9JzB4JXAnIFwKLQkJCQlpc3IgZ290IGFib3J0ZWQgY29tbWFuZCBcbiIsIGFjYi0+aG9zdC0+aG9zdF9ubywgY2NiKTsKKwkJCQlhcmNtc3JfY2NiX2NvbXBsZXRlKHBDQ0IpOworCQkJCXByaW50ayhLRVJOX05PVElDRSAiYXJjbXNyJWQ6IHBDQ0IgPScweCVwJyBpc3IgZ290IGFib3J0ZWQgY29tbWFuZCBcbiIsCisJCQkJYWNiLT5ob3N0LT5ob3N0X25vLCBwQ0NCKTsKIAkJCX0KKwkJCXJldHVybjsKIAkJfQogCQlwcmludGsoS0VSTl9OT1RJQ0UgImFyY21zciVkOiBpc3IgZ2V0IGFuIGlsbGVnYWwgY2NiIGNvbW1hbmQgXAogCQkJCWRvbmUgYWNiID0gJzB4JXAnIgpAQCAtODI5LDIwICs5NDMsMjIgQEAKIAkJCQkiIGNjYm91dHN0YW5kaW5nY291bnQgPSAlZCBcbiIKIAkJCQksIGFjYi0+aG9zdC0+aG9zdF9ubwogCQkJCSwgYWNiCi0JCQkJLCBjY2IKLQkJCQksIGNjYi0+YWNiCi0JCQkJLCBjY2ItPnN0YXJ0ZG9uZQorCQkJCSwgcENDQgorCQkJCSwgcENDQi0+YWNiCisJCQkJLCBwQ0NCLT5zdGFydGRvbmUKIAkJCQksIGF0b21pY19yZWFkKCZhY2ItPmNjYm91dHN0YW5kaW5nY291bnQpKTsKKwkJICByZXR1cm47CiAJCX0KLQllbHNlCi0JYXJjbXNyX3JlcG9ydF9jY2Jfc3RhdGUoYWNiLCBjY2IsIGZsYWdfY2NiKTsKKwlhcmNtc3JfcmVwb3J0X2NjYl9zdGF0ZShhY2IsIHBDQ0IsIGVycm9yKTsKIH0KIAogc3RhdGljIHZvaWQgYXJjbXNyX2RvbmU0YWJvcnRfcG9zdHF1ZXVlKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IpCiB7CiAJaW50IGkgPSAwOwogCXVpbnQzMl90IGZsYWdfY2NiOwotCisJc3RydWN0IEFSQ01TUl9DREIgKnBBUkNNU1JfQ0RCOworCWJvb2wgZXJyb3I7CisJc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2sgKnBDQ0I7CiAJc3dpdGNoIChhY2ItPmFkYXB0ZXJfdHlwZSkgewogCiAJY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0E6IHsKQEAgLTg1Miw5ICs5NjgsMTIgQEAKIAkJCQkJYWNiLT5vdXRib3VuZF9pbnRfZW5hYmxlOwogCQkvKmNsZWFyIGFuZCBhYm9ydCBhbGwgb3V0Ym91bmQgcG9zdGVkIFEqLwogCQl3cml0ZWwob3V0Ym91bmRfaW50c3RhdHVzLCAmcmVnLT5vdXRib3VuZF9pbnRzdGF0dXMpOy8qY2xlYXIgaW50ZXJydXB0Ki8KLQkJd2hpbGUgKCgoZmxhZ19jY2IgPSByZWFkbCgmcmVnLT5vdXRib3VuZF9xdWV1ZXBvcnQpKSAhPSAweEZGRkZGRkZGKQorCQl3aGlsZSgoKGZsYWdfY2NiID0gcmVhZGwoJnJlZy0+b3V0Ym91bmRfcXVldWVwb3J0KSkgIT0gMHhGRkZGRkZGRikKIAkJCQkmJiAoaSsrIDwgQVJDTVNSX01BWF9PVVRTVEFORElOR19DTUQpKSB7Ci0JCQlhcmNtc3JfZHJhaW5fZG9uZXF1ZXVlKGFjYiwgZmxhZ19jY2IpOworCQkJcEFSQ01TUl9DREIgPSAoc3RydWN0IEFSQ01TUl9DREIgKikoYWNiLT52aXIycGh5X29mZnNldCArIChmbGFnX2NjYiA8PCA1KSk7LypmcmFtZSBtdXN0IGJlIDMyIGJ5dGVzIGFsaWduZWQqLworCQkJcENDQiA9IGNvbnRhaW5lcl9vZihwQVJDTVNSX0NEQiwgc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2ssIGFyY21zcl9jZGIpOworCQkJZXJyb3IgPSAoZmxhZ19jY2IgJiBBUkNNU1JfQ0NCUkVQTFlfRkxBR19FUlJPUl9NT0RFMCkgPyB0cnVlIDogZmFsc2U7CisJCQlhcmNtc3JfZHJhaW5fZG9uZXF1ZXVlKGFjYiwgcENDQiwgZXJyb3IpOwogCQl9CiAJCX0KIAkJYnJlYWs7CkBAIC04NjIsMTcgKzk4MSwzNyBAQAogCWNhc2UgQUNCX0FEQVBURVJfVFlQRV9COiB7CiAJCXN0cnVjdCBNZXNzYWdlVW5pdF9CICpyZWcgPSBhY2ItPnBtdUI7CiAJCS8qY2xlYXIgYWxsIG91dGJvdW5kIHBvc3RlZCBRKi8KKwkJd3JpdGVsKEFSQ01TUl9ET09SQkVMTF9JTlRfQ0xFQVJfUEFUVEVSTiwgJnJlZy0+aW9wMmRydl9kb29yYmVsbCk7IC8qIGNsZWFyIGRvb3JiZWxsIGludGVycnVwdCAqLwogCQlmb3IgKGkgPSAwOyBpIDwgQVJDTVNSX01BWF9IQkJfUE9TVFFVRVVFOyBpKyspIHsKIAkJCWlmICgoZmxhZ19jY2IgPSByZWFkbCgmcmVnLT5kb25lX3FidWZmZXJbaV0pKSAhPSAwKSB7CiAJCQkJd3JpdGVsKDAsICZyZWctPmRvbmVfcWJ1ZmZlcltpXSk7Ci0JCQkJYXJjbXNyX2RyYWluX2RvbmVxdWV1ZShhY2IsIGZsYWdfY2NiKTsKKwkJCQlwQVJDTVNSX0NEQiA9IChzdHJ1Y3QgQVJDTVNSX0NEQiAqKShhY2ItPnZpcjJwaHlfb2Zmc2V0KyhmbGFnX2NjYiA8PCA1KSk7LypmcmFtZSBtdXN0IGJlIDMyIGJ5dGVzIGFsaWduZWQqLworCQkJCXBDQ0IgPSBjb250YWluZXJfb2YocEFSQ01TUl9DREIsIHN0cnVjdCBDb21tYW5kQ29udHJvbEJsb2NrLCBhcmNtc3JfY2RiKTsKKwkJCQllcnJvciA9IChmbGFnX2NjYiAmIEFSQ01TUl9DQ0JSRVBMWV9GTEFHX0VSUk9SX01PREUwKSA/IHRydWUgOiBmYWxzZTsKKwkJCQlhcmNtc3JfZHJhaW5fZG9uZXF1ZXVlKGFjYiwgcENDQiwgZXJyb3IpOwogCQkJfQotCQkJd3JpdGVsKDAsICZyZWctPnBvc3RfcWJ1ZmZlcltpXSk7CisJCQlyZWctPnBvc3RfcWJ1ZmZlcltpXSA9IDA7CiAJCX0KIAkJcmVnLT5kb25lcV9pbmRleCA9IDA7CiAJCXJlZy0+cG9zdHFfaW5kZXggPSAwOwogCQl9CiAJCWJyZWFrOworCWNhc2UgQUNCX0FEQVBURVJfVFlQRV9DOiB7CisJCXN0cnVjdCBNZXNzYWdlVW5pdF9DICpyZWcgPSBhY2ItPnBtdUM7CisJCXN0cnVjdCAgQVJDTVNSX0NEQiAqcEFSQ01TUl9DREI7CisJCXVpbnQzMl90IGZsYWdfY2NiLCBjY2JfY2RiX3BoeTsKKwkJYm9vbCBlcnJvcjsKKwkJc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2sgKnBDQ0I7CisJCXdoaWxlICgocmVhZGwoJnJlZy0+aG9zdF9pbnRfc3RhdHVzKSAmIEFSQ01TUl9IQkNNVV9PVVRCT1VORF9QT1NUUVVFVUVfSVNSKSAmJiAoaSsrIDwgQVJDTVNSX01BWF9PVVRTVEFORElOR19DTUQpKSB7CisJCQkvKm5lZWQgdG8gZG8qLworCQkJZmxhZ19jY2IgPSByZWFkbCgmcmVnLT5vdXRib3VuZF9xdWV1ZXBvcnRfbG93KTsKKwkJCWNjYl9jZGJfcGh5ID0gKGZsYWdfY2NiICYgMHhGRkZGRkZGMCk7CisJCQlwQVJDTVNSX0NEQiA9IChzdHJ1Y3QgIEFSQ01TUl9DREIgKikoYWNiLT52aXIycGh5X29mZnNldCtjY2JfY2RiX3BoeSk7LypmcmFtZSBtdXN0IGJlIDMyIGJ5dGVzIGFsaWduZWQqLworCQkJcENDQiA9IGNvbnRhaW5lcl9vZihwQVJDTVNSX0NEQiwgc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2ssIGFyY21zcl9jZGIpOworCQkJZXJyb3IgPSAoZmxhZ19jY2IgJiBBUkNNU1JfQ0NCUkVQTFlfRkxBR19FUlJPUl9NT0RFMSkgPyB0cnVlIDogZmFsc2U7CisJCQlhcmNtc3JfZHJhaW5fZG9uZXF1ZXVlKGFjYiwgcENDQiwgZXJyb3IpOworCQl9CisJfQogCX0KIH0KIHN0YXRpYyB2b2lkIGFyY21zcl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCkBAIC04ODcsMTEgKzEwMjYsMTEgQEAKIAlkZWxfdGltZXJfc3luYygmYWNiLT5ldGVybmFsX3RpbWVyKTsKIAlhcmNtc3JfZGlzYWJsZV9vdXRib3VuZF9pbnRzKGFjYik7CiAJYXJjbXNyX3N0b3BfYWRhcHRlcl9iZ3JiKGFjYik7Ci0JYXJjbXNyX2ZsdXNoX2FkYXB0ZXJfY2FjaGUoYWNiKTsKKwlhcmNtc3JfZmx1c2hfYWRhcHRlcl9jYWNoZShhY2IpOwkKIAlhY2ItPmFjYl9mbGFncyB8PSBBQ0JfRl9TQ1NJU1RPUEFEQVBURVI7CiAJYWNiLT5hY2JfZmxhZ3MgJj0gfkFDQl9GX0lPUF9JTklURUQ7CiAKLQlmb3IgKHBvbGxfY291bnQgPSAwOyBwb2xsX2NvdW50IDwgQVJDTVNSX01BWF9PVVRTVEFORElOR19DTUQ7IHBvbGxfY291bnQrKykgeworCWZvciAocG9sbF9jb3VudCA9IDA7IHBvbGxfY291bnQgPCBBUkNNU1JfTUFYX09VVFNUQU5ESU5HX0NNRDsgcG9sbF9jb3VudCsrKXsKIAkJaWYgKCFhdG9taWNfcmVhZCgmYWNiLT5jY2JvdXRzdGFuZGluZ2NvdW50KSkKIAkJCWJyZWFrOwogCQlhcmNtc3JfaW50ZXJydXB0KGFjYik7LyogRklYTUU6IG5lZWQgc3BpbmxvY2sgKi8KQEAgLTkwOCwxNyArMTA0NywxNiBAQAogCQkJaWYgKGNjYi0+c3RhcnRkb25lID09IEFSQ01TUl9DQ0JfU1RBUlQpIHsKIAkJCQljY2ItPnN0YXJ0ZG9uZSA9IEFSQ01TUl9DQ0JfQUJPUlRFRDsKIAkJCQljY2ItPnBjbWQtPnJlc3VsdCA9IERJRF9BQk9SVCA8PCAxNjsKLQkJCQlhcmNtc3JfY2NiX2NvbXBsZXRlKGNjYiwgMSk7CisJCQkJYXJjbXNyX2NjYl9jb21wbGV0ZShjY2IpOwogCQkJfQogCQl9CiAJfQotCiAJZnJlZV9pcnEocGRldi0+aXJxLCBhY2IpOwogCWFyY21zcl9mcmVlX2NjYl9wb29sKGFjYik7CisJYXJjbXNyX2ZyZWVfaGJiX211KGFjYik7CisJYXJjbXNyX3VubWFwX3BjaXJlZ2lvbihhY2IpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7Ci0KIAlzY3NpX2hvc3RfcHV0KGhvc3QpOwotCiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIH0KQEAgLTkzOCw3ICsxMDc2LDYgQEAKIHN0YXRpYyBpbnQgYXJjbXNyX21vZHVsZV9pbml0KHZvaWQpCiB7CiAJaW50IGVycm9yID0gMDsKLQogCWVycm9yID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYXJjbXNyX3BjaV9kcml2ZXIpOwogCXJldHVybiBlcnJvcjsKIH0KQEAgLTk1NCwxMCArMTA5MSw5IEBACiAJCQkJCQl1MzIgaW50bWFza19vcmcpCiB7CiAJdTMyIG1hc2s7Ci0KIAlzd2l0Y2ggKGFjYi0+YWRhcHRlcl90eXBlKSB7CiAKLQljYXNlIEFDQl9BREFQVEVSX1RZUEVfQSA6IHsKKwljYXNlIEFDQl9BREFQVEVSX1RZUEVfQTogewogCQlzdHJ1Y3QgTWVzc2FnZVVuaXRfQSBfX2lvbWVtICpyZWcgPSBhY2ItPnBtdUE7CiAJCW1hc2sgPSBpbnRtYXNrX29yZyAmIH4oQVJDTVNSX01VX09VVEJPVU5EX1BPU1RRVUVVRV9JTlRNQVNLRU5BQkxFIHwKIAkJCSAgICAgQVJDTVNSX01VX09VVEJPVU5EX0RPT1JCRUxMX0lOVE1BU0tFTkFCTEV8CkBAIC05NjcsMTUgKzExMDMsMjIgQEAKIAkJfQogCQlicmVhazsKIAotCWNhc2UgQUNCX0FEQVBURVJfVFlQRV9CIDogeworCWNhc2UgQUNCX0FEQVBURVJfVFlQRV9COiB7CiAJCXN0cnVjdCBNZXNzYWdlVW5pdF9CICpyZWcgPSBhY2ItPnBtdUI7CiAJCW1hc2sgPSBpbnRtYXNrX29yZyB8IChBUkNNU1JfSU9QMkRSVl9EQVRBX1dSSVRFX09LIHwKIAkJCUFSQ01TUl9JT1AyRFJWX0RBVEFfUkVBRF9PSyB8CiAJCQlBUkNNU1JfSU9QMkRSVl9DREJfRE9ORSB8CiAJCQlBUkNNU1JfSU9QMkRSVl9NRVNTQUdFX0NNRF9ET05FKTsKLQkJd3JpdGVsKG1hc2ssIHJlZy0+aW9wMmRydl9kb29yYmVsbF9tYXNrX3JlZyk7CisJCXdyaXRlbChtYXNrLCByZWctPmlvcDJkcnZfZG9vcmJlbGxfbWFzayk7CiAJCWFjYi0+b3V0Ym91bmRfaW50X2VuYWJsZSA9IChpbnRtYXNrX29yZyB8IG1hc2spICYgMHgwMDAwMDAwZjsKIAkJfQorCQlicmVhazsKKwljYXNlIEFDQl9BREFQVEVSX1RZUEVfQzogeworCQlzdHJ1Y3QgTWVzc2FnZVVuaXRfQyAqcmVnID0gYWNiLT5wbXVDOworCQltYXNrID0gfihBUkNNU1JfSEJDTVVfVVRJTElUWV9BX0lTUl9NQVNLIHwgQVJDTVNSX0hCQ01VX09VVEJPVU5EX0RPT1JCRUxMX0lTUl9NQVNLfEFSQ01TUl9IQkNNVV9PVVRCT1VORF9QT1NUUVVFVUVfSVNSX01BU0spOworCQl3cml0ZWwoaW50bWFza19vcmcgJiBtYXNrLCAmcmVnLT5ob3N0X2ludF9tYXNrKTsKKwkJYWNiLT5vdXRib3VuZF9pbnRfZW5hYmxlID0gfihpbnRtYXNrX29yZyAmIG1hc2spICYgMHgwMDAwMDAwZjsKKwkJfQogCX0KIH0KIApAQCAtOTg2LDgwICsxMTI5LDcwIEBACiAJaW50OF90ICpwc2dlID0gKGludDhfdCAqKSZhcmNtc3JfY2RiLT51OwogCV9fbGUzMiBhZGRyZXNzX2xvLCBhZGRyZXNzX2hpOwogCWludCBhcmNjZGJzaXplID0gMHgzMDsKKwlfX2xlMzIgbGVuZ3RoID0gMDsKKwlpbnQgaTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCWludCBuc2VnOwotCiAJY2NiLT5wY21kID0gcGNtZDsKIAltZW1zZXQoYXJjbXNyX2NkYiwgMCwgc2l6ZW9mKHN0cnVjdCBBUkNNU1JfQ0RCKSk7Ci0JYXJjbXNyX2NkYi0+QnVzID0gMDsKIAlhcmNtc3JfY2RiLT5UYXJnZXRJRCA9IHBjbWQtPmRldmljZS0+aWQ7CiAJYXJjbXNyX2NkYi0+TFVOID0gcGNtZC0+ZGV2aWNlLT5sdW47CiAJYXJjbXNyX2NkYi0+RnVuY3Rpb24gPSAxOwotCWFyY21zcl9jZGItPkNkYkxlbmd0aCA9ICh1aW50OF90KXBjbWQtPmNtZF9sZW47Ci0JYXJjbXNyX2NkYi0+Q29udGV4dCA9ICh1bnNpZ25lZCBsb25nKWFyY21zcl9jZGI7CisJYXJjbXNyX2NkYi0+Q29udGV4dCA9IDA7CiAJbWVtY3B5KGFyY21zcl9jZGItPkNkYiwgcGNtZC0+Y21uZCwgcGNtZC0+Y21kX2xlbik7CiAKIAluc2VnID0gc2NzaV9kbWFfbWFwKHBjbWQpOwotCWlmIChuc2VnID4gQVJDTVNSX01BWF9TR19FTlRSSUVTKQorCWlmICh1bmxpa2VseShuc2VnID4gYWNiLT5ob3N0LT5zZ190YWJsZXNpemUgfHwgbnNlZyA8IDApKQogCQlyZXR1cm4gRkFJTEVEOwotCUJVR19PTihuc2VnIDwgMCk7CisJc2NzaV9mb3JfZWFjaF9zZyhwY21kLCBzZywgbnNlZywgaSkgeworCQkvKiBHZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGN1cnJlbnQgZGF0YSBwb2ludGVyICovCisJCWxlbmd0aCA9IGNwdV90b19sZTMyKHNnX2RtYV9sZW4oc2cpKTsKKwkJYWRkcmVzc19sbyA9IGNwdV90b19sZTMyKGRtYV9hZGRyX2xvMzIoc2dfZG1hX2FkZHJlc3Moc2cpKSk7CisJCWFkZHJlc3NfaGkgPSBjcHVfdG9fbGUzMihkbWFfYWRkcl9oaTMyKHNnX2RtYV9hZGRyZXNzKHNnKSkpOworCQlpZiAoYWRkcmVzc19oaSA9PSAwKSB7CisJCQlzdHJ1Y3QgU0czMkVOVFJZICpwZG1hX3NnID0gKHN0cnVjdCBTRzMyRU5UUlkgKilwc2dlOwogCi0JaWYgKG5zZWcpIHsKLQkJX19sZTMyIGxlbmd0aDsKLQkJaW50IGksIGNkYl9zZ2NvdW50ID0gMDsKLQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwkJCXBkbWFfc2ctPmFkZHJlc3MgPSBhZGRyZXNzX2xvOworCQkJcGRtYV9zZy0+bGVuZ3RoID0gbGVuZ3RoOworCQkJcHNnZSArPSBzaXplb2YgKHN0cnVjdCBTRzMyRU5UUlkpOworCQkJYXJjY2Ric2l6ZSArPSBzaXplb2YgKHN0cnVjdCBTRzMyRU5UUlkpOworCQl9IGVsc2UgeworCQkJc3RydWN0IFNHNjRFTlRSWSAqcGRtYV9zZyA9IChzdHJ1Y3QgU0c2NEVOVFJZICopcHNnZTsKIAotCQkvKiBtYXAgc3RvciBwb3J0IFNHIGxpc3QgdG8gb3VyIGlvcCBTRyBMaXN0LiAqLwotCQlzY3NpX2Zvcl9lYWNoX3NnKHBjbWQsIHNnLCBuc2VnLCBpKSB7Ci0JCQkvKiBHZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGN1cnJlbnQgZGF0YSBwb2ludGVyICovCi0JCQlsZW5ndGggPSBjcHVfdG9fbGUzMihzZ19kbWFfbGVuKHNnKSk7Ci0JCQlhZGRyZXNzX2xvID0gY3B1X3RvX2xlMzIoZG1hX2FkZHJfbG8zMihzZ19kbWFfYWRkcmVzcyhzZykpKTsKLQkJCWFkZHJlc3NfaGkgPSBjcHVfdG9fbGUzMihkbWFfYWRkcl9oaTMyKHNnX2RtYV9hZGRyZXNzKHNnKSkpOwotCQkJaWYgKGFkZHJlc3NfaGkgPT0gMCkgewotCQkJCXN0cnVjdCBTRzMyRU5UUlkgKnBkbWFfc2cgPSAoc3RydWN0IFNHMzJFTlRSWSAqKXBzZ2U7Ci0KLQkJCQlwZG1hX3NnLT5hZGRyZXNzID0gYWRkcmVzc19sbzsKLQkJCQlwZG1hX3NnLT5sZW5ndGggPSBsZW5ndGg7Ci0JCQkJcHNnZSArPSBzaXplb2YgKHN0cnVjdCBTRzMyRU5UUlkpOwotCQkJCWFyY2NkYnNpemUgKz0gc2l6ZW9mIChzdHJ1Y3QgU0czMkVOVFJZKTsKLQkJCX0gZWxzZSB7Ci0JCQkJc3RydWN0IFNHNjRFTlRSWSAqcGRtYV9zZyA9IChzdHJ1Y3QgU0c2NEVOVFJZICopcHNnZTsKLQotCQkJCXBkbWFfc2ctPmFkZHJlc3NoaWdoID0gYWRkcmVzc19oaTsKLQkJCQlwZG1hX3NnLT5hZGRyZXNzID0gYWRkcmVzc19sbzsKLQkJCQlwZG1hX3NnLT5sZW5ndGggPSBsZW5ndGh8Y3B1X3RvX2xlMzIoSVNfU0c2NF9BRERSKTsKLQkJCQlwc2dlICs9IHNpemVvZiAoc3RydWN0IFNHNjRFTlRSWSk7Ci0JCQkJYXJjY2Ric2l6ZSArPSBzaXplb2YgKHN0cnVjdCBTRzY0RU5UUlkpOwotCQkJfQotCQkJY2RiX3NnY291bnQrKzsKKwkJCXBkbWFfc2ctPmFkZHJlc3NoaWdoID0gYWRkcmVzc19oaTsKKwkJCXBkbWFfc2ctPmFkZHJlc3MgPSBhZGRyZXNzX2xvOworCQkJcGRtYV9zZy0+bGVuZ3RoID0gbGVuZ3RofGNwdV90b19sZTMyKElTX1NHNjRfQUREUik7CisJCQlwc2dlICs9IHNpemVvZiAoc3RydWN0IFNHNjRFTlRSWSk7CisJCQlhcmNjZGJzaXplICs9IHNpemVvZiAoc3RydWN0IFNHNjRFTlRSWSk7CiAJCX0KLQkJYXJjbXNyX2NkYi0+c2djb3VudCA9ICh1aW50OF90KWNkYl9zZ2NvdW50OwotCQlhcmNtc3JfY2RiLT5EYXRhTGVuZ3RoID0gc2NzaV9idWZmbGVuKHBjbWQpOwotCQlpZiAoIGFyY2NkYnNpemUgPiAyNTYpCi0JCQlhcmNtc3JfY2RiLT5GbGFncyB8PSBBUkNNU1JfQ0RCX0ZMQUdfU0dMX0JTSVpFOwogCX0KLQlpZiAocGNtZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSApIHsKKwlhcmNtc3JfY2RiLT5zZ2NvdW50ID0gKHVpbnQ4X3QpbnNlZzsKKwlhcmNtc3JfY2RiLT5EYXRhTGVuZ3RoID0gc2NzaV9idWZmbGVuKHBjbWQpOworCWFyY21zcl9jZGItPm1zZ1BhZ2VzID0gYXJjY2Ric2l6ZS8weDEwMCArIChhcmNjZGJzaXplICUgMHgxMDAgPyAxIDogMCk7CisJaWYgKCBhcmNjZGJzaXplID4gMjU2KQorCQlhcmNtc3JfY2RiLT5GbGFncyB8PSBBUkNNU1JfQ0RCX0ZMQUdfU0dMX0JTSVpFOworCWlmIChwY21kLT5jbW5kWzBdfFdSSVRFXzYgfHwgcGNtZC0+Y21uZFswXXxXUklURV8xMCB8fCBwY21kLT5jbW5kWzBdfFdSSVRFXzEyICl7CiAJCWFyY21zcl9jZGItPkZsYWdzIHw9IEFSQ01TUl9DREJfRkxBR19XUklURTsKLQkJY2NiLT5jY2JfZmxhZ3MgfD0gQ0NCX0ZMQUdfV1JJVEU7CiAJfQorCWNjYi0+YXJjX2NkYl9zaXplID0gYXJjY2Ric2l6ZTsKIAlyZXR1cm4gU1VDQ0VTUzsKIH0KIAogc3RhdGljIHZvaWQgYXJjbXNyX3Bvc3RfY2NiKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IsIHN0cnVjdCBDb21tYW5kQ29udHJvbEJsb2NrICpjY2IpCiB7Ci0JdWludDMyX3QgY2RiX3NoaWZ0ZWRfcGh5YWRkciA9IGNjYi0+Y2RiX3NoaWZ0ZWRfcGh5YWRkcjsKKwl1aW50MzJfdCBjZGJfcGh5YWRkcl9wYXR0ZXJuID0gY2NiLT5jZGJfcGh5YWRkcl9wYXR0ZXJuOwogCXN0cnVjdCBBUkNNU1JfQ0RCICphcmNtc3JfY2RiID0gKHN0cnVjdCBBUkNNU1JfQ0RCICopJmNjYi0+YXJjbXNyX2NkYjsKIAlhdG9taWNfaW5jKCZhY2ItPmNjYm91dHN0YW5kaW5nY291bnQpOwogCWNjYi0+c3RhcnRkb25lID0gQVJDTVNSX0NDQl9TVEFSVDsKLQogCXN3aXRjaCAoYWNiLT5hZGFwdGVyX3R5cGUpIHsKIAljYXNlIEFDQl9BREFQVEVSX1RZUEVfQTogewogCQlzdHJ1Y3QgTWVzc2FnZVVuaXRfQSBfX2lvbWVtICpyZWcgPSBhY2ItPnBtdUE7CiAKIAkJaWYgKGFyY21zcl9jZGItPkZsYWdzICYgQVJDTVNSX0NEQl9GTEFHX1NHTF9CU0laRSkKLQkJCXdyaXRlbChjZGJfc2hpZnRlZF9waHlhZGRyIHwgQVJDTVNSX0NDQlBPU1RfRkxBR19TR0xfQlNJWkUsCisJCQl3cml0ZWwoY2RiX3BoeWFkZHJfcGF0dGVybiB8IEFSQ01TUl9DQ0JQT1NUX0ZMQUdfU0dMX0JTSVpFLAogCQkJJnJlZy0+aW5ib3VuZF9xdWV1ZXBvcnQpOwogCQllbHNlIHsKLQkJCQl3cml0ZWwoY2RiX3NoaWZ0ZWRfcGh5YWRkciwgJnJlZy0+aW5ib3VuZF9xdWV1ZXBvcnQpOworCQkJCXdyaXRlbChjZGJfcGh5YWRkcl9wYXR0ZXJuLCAmcmVnLT5pbmJvdW5kX3F1ZXVlcG9ydCk7CiAJCX0KIAkJfQogCQlicmVhazsKQEAgLTEwNzEsMTggKzEyMDQsMzAgQEAKIAkJZW5kaW5nX2luZGV4ID0gKChpbmRleCArIDEpICUgQVJDTVNSX01BWF9IQkJfUE9TVFFVRVVFKTsKIAkJd3JpdGVsKDAsICZyZWctPnBvc3RfcWJ1ZmZlcltlbmRpbmdfaW5kZXhdKTsKIAkJaWYgKGFyY21zcl9jZGItPkZsYWdzICYgQVJDTVNSX0NEQl9GTEFHX1NHTF9CU0laRSkgewotCQkJd3JpdGVsKGNkYl9zaGlmdGVkX3BoeWFkZHIgfCBBUkNNU1JfQ0NCUE9TVF9GTEFHX1NHTF9CU0laRSxcCisJCQl3cml0ZWwoY2RiX3BoeWFkZHJfcGF0dGVybiB8IEFSQ01TUl9DQ0JQT1NUX0ZMQUdfU0dMX0JTSVpFLFwKIAkJCQkJCSAmcmVnLT5wb3N0X3FidWZmZXJbaW5kZXhdKTsKLQkJfQotCQllbHNlIHsKLQkJCXdyaXRlbChjZGJfc2hpZnRlZF9waHlhZGRyLCAmcmVnLT5wb3N0X3FidWZmZXJbaW5kZXhdKTsKKwkJfSBlbHNlIHsKKwkJCXdyaXRlbChjZGJfcGh5YWRkcl9wYXR0ZXJuLCAmcmVnLT5wb3N0X3FidWZmZXJbaW5kZXhdKTsKIAkJfQogCQlpbmRleCsrOwogCQlpbmRleCAlPSBBUkNNU1JfTUFYX0hCQl9QT1NUUVVFVUU7LyppZiBsYXN0IGluZGV4IG51bWJlciBzZXQgaXQgdG8gMCAqLwogCQlyZWctPnBvc3RxX2luZGV4ID0gaW5kZXg7Ci0JCXdyaXRlbChBUkNNU1JfRFJWMklPUF9DREJfUE9TVEVELCByZWctPmRydjJpb3BfZG9vcmJlbGxfcmVnKTsKKwkJd3JpdGVsKEFSQ01TUl9EUlYySU9QX0NEQl9QT1NURUQsIHJlZy0+ZHJ2MmlvcF9kb29yYmVsbCk7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0M6IHsKKwkJc3RydWN0IE1lc3NhZ2VVbml0X0MgKnBoYmNtdSA9IChzdHJ1Y3QgTWVzc2FnZVVuaXRfQyAqKWFjYi0+cG11QzsKKwkJdWludDMyX3QgY2NiX3Bvc3Rfc3RhbXAsIGFyY19jZGJfc2l6ZTsKKworCQlhcmNfY2RiX3NpemUgPSAoY2NiLT5hcmNfY2RiX3NpemUgPiAweDMwMCkgPyAweDMwMCA6IGNjYi0+YXJjX2NkYl9zaXplOworCQljY2JfcG9zdF9zdGFtcCA9IChjZGJfcGh5YWRkcl9wYXR0ZXJuIHwgKChhcmNfY2RiX3NpemUgLSAxKSA+PiA2KSB8IDEpOworCQlpZiAoYWNiLT5jZGJfcGh5YWRkcl9oaTMyKSB7CisJCQl3cml0ZWwoYWNiLT5jZGJfcGh5YWRkcl9oaTMyLCAmcGhiY211LT5pbmJvdW5kX3F1ZXVlcG9ydF9oaWdoKTsKKwkJCXdyaXRlbChjY2JfcG9zdF9zdGFtcCwgJnBoYmNtdS0+aW5ib3VuZF9xdWV1ZXBvcnRfbG93KTsKKwkJfSBlbHNlIHsKKwkJCXdyaXRlbChjY2JfcG9zdF9zdGFtcCwgJnBoYmNtdS0+aW5ib3VuZF9xdWV1ZXBvcnRfbG93KTsKKwkJfQorCQl9CiAJfQogfQogCkBAIC0xMDkxLDggKzEyMzYsNyBAQAogCXN0cnVjdCBNZXNzYWdlVW5pdF9BIF9faW9tZW0gKnJlZyA9IGFjYi0+cG11QTsKIAlhY2ItPmFjYl9mbGFncyAmPSB+QUNCX0ZfTVNHX1NUQVJUX0JHUkI7CiAJd3JpdGVsKEFSQ01TUl9JTkJPVU5EX01FU0cwX1NUT1BfQkdSQiwgJnJlZy0+aW5ib3VuZF9tc2dhZGRyMCk7Ci0KLQlpZiAoYXJjbXNyX2hiYV93YWl0X21zZ2ludF9yZWFkeShhY2IpKSB7CisJaWYgKCFhcmNtc3JfaGJhX3dhaXRfbXNnaW50X3JlYWR5KGFjYikpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFCiAJCQkiYXJjbXNyJWQ6IHdhaXQgJ3N0b3AgYWRhcHRlciBiYWNrZ3JvdW5kIHJlYnVsaWQnIHRpbWVvdXQgXG4iCiAJCQksIGFjYi0+aG9zdC0+aG9zdF9ubyk7CkBAIC0xMTAzLDE1ICsxMjQ3LDI4IEBACiB7CiAJc3RydWN0IE1lc3NhZ2VVbml0X0IgKnJlZyA9IGFjYi0+cG11QjsKIAlhY2ItPmFjYl9mbGFncyAmPSB+QUNCX0ZfTVNHX1NUQVJUX0JHUkI7Ci0Jd3JpdGVsKEFSQ01TUl9NRVNTQUdFX1NUT1BfQkdSQiwgcmVnLT5kcnYyaW9wX2Rvb3JiZWxsX3JlZyk7CisJd3JpdGVsKEFSQ01TUl9NRVNTQUdFX1NUT1BfQkdSQiwgcmVnLT5kcnYyaW9wX2Rvb3JiZWxsKTsKIAotCWlmIChhcmNtc3JfaGJiX3dhaXRfbXNnaW50X3JlYWR5KGFjYikpIHsKKwlpZiAoIWFyY21zcl9oYmJfd2FpdF9tc2dpbnRfcmVhZHkoYWNiKSkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UKIAkJCSJhcmNtc3IlZDogd2FpdCAnc3RvcCBhZGFwdGVyIGJhY2tncm91bmQgcmVidWxpZCcgdGltZW91dCBcbiIKIAkJCSwgYWNiLT5ob3N0LT5ob3N0X25vKTsKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGFyY21zcl9zdG9wX2hiY19iZ3JiKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICpwQUNCKQoreworCXN0cnVjdCBNZXNzYWdlVW5pdF9DICpyZWcgPSAoc3RydWN0IE1lc3NhZ2VVbml0X0MgKilwQUNCLT5wbXVDOworCXBBQ0ItPmFjYl9mbGFncyAmPSB+QUNCX0ZfTVNHX1NUQVJUX0JHUkI7CisJd3JpdGVsKEFSQ01TUl9JTkJPVU5EX01FU0cwX1NUT1BfQkdSQiwgJnJlZy0+aW5ib3VuZF9tc2dhZGRyMCk7CisJd3JpdGVsKEFSQ01TUl9IQkNNVV9EUlYySU9QX01FU1NBR0VfQ01EX0RPTkUsICZyZWctPmluYm91bmRfZG9vcmJlbGwpOworCWlmICghYXJjbXNyX2hiY193YWl0X21zZ2ludF9yZWFkeShwQUNCKSkgeworCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJCSJhcmNtc3IlZDogd2FpdCAnc3RvcCBhZGFwdGVyIGJhY2tncm91bmQgcmVidWxpZCcgdGltZW91dCBcbiIKKwkJCSwgcEFDQi0+aG9zdC0+aG9zdF9ubyk7CisJfQorCXJldHVybjsKK30KIHN0YXRpYyB2b2lkIGFyY21zcl9zdG9wX2FkYXB0ZXJfYmdyYihzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKQogewogCXN3aXRjaCAoYWNiLT5hZGFwdGVyX3R5cGUpIHsKQEAgLTExMjQsMzAgKzEyODEsMTUgQEAKIAkJYXJjbXNyX3N0b3BfaGJiX2JncmIoYWNiKTsKIAkJfQogCQlicmVhazsKKwljYXNlIEFDQl9BREFQVEVSX1RZUEVfQzogeworCQlhcmNtc3Jfc3RvcF9oYmNfYmdyYihhY2IpOworCQl9CiAJfQogfQogCiBzdGF0aWMgdm9pZCBhcmNtc3JfZnJlZV9jY2JfcG9vbChzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKQogewotCXN3aXRjaCAoYWNiLT5hZGFwdGVyX3R5cGUpIHsKLQljYXNlIEFDQl9BREFQVEVSX1RZUEVfQTogewotCQlpb3VubWFwKGFjYi0+cG11QSk7Ci0JCWRtYV9mcmVlX2NvaGVyZW50KCZhY2ItPnBkZXYtPmRldiwKLQkJQVJDTVNSX01BWF9GUkVFQ0NCX05VTSAqIHNpemVvZiAoc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2spICsgMHgyMCwKLQkJYWNiLT5kbWFfY29oZXJlbnQsCi0JCWFjYi0+ZG1hX2NvaGVyZW50X2hhbmRsZSk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIEFDQl9BREFQVEVSX1RZUEVfQjogewotCQlzdHJ1Y3QgTWVzc2FnZVVuaXRfQiAqcmVnID0gYWNiLT5wbXVCOwotCQlpb3VubWFwKCh1OCAqKXJlZy0+ZHJ2MmlvcF9kb29yYmVsbF9yZWcgLSBBUkNNU1JfRFJWMklPUF9ET09SQkVMTCk7Ci0JCWlvdW5tYXAoKHU4ICopcmVnLT5pb2N0bF93YnVmZmVyX3JlZyAtIEFSQ01TUl9JT0NUTF9XQlVGRkVSKTsKLQkJZG1hX2ZyZWVfY29oZXJlbnQoJmFjYi0+cGRldi0+ZGV2LAotCQkoQVJDTVNSX01BWF9GUkVFQ0NCX05VTSAqIHNpemVvZihzdHJ1Y3QgQ29tbWFuZENvbnRyb2xCbG9jaykgKyAweDIwICsKLQkJc2l6ZW9mKHN0cnVjdCBNZXNzYWdlVW5pdF9CKSksIGFjYi0+ZG1hX2NvaGVyZW50LCBhY2ItPmRtYV9jb2hlcmVudF9oYW5kbGUpOwotCX0KLQl9Ci0KKwlkbWFfZnJlZV9jb2hlcmVudCgmYWNiLT5wZGV2LT5kZXYsIGFjYi0+dW5jYWNoZV9zaXplLCBhY2ItPmRtYV9jb2hlcmVudCwgYWNiLT5kbWFfY29oZXJlbnRfaGFuZGxlKTsKIH0KIAogdm9pZCBhcmNtc3JfaW9wX21lc3NhZ2VfcmVhZChzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKQpAQCAtMTE2MSw5ICsxMzAzLDEzIEBACiAKIAljYXNlIEFDQl9BREFQVEVSX1RZUEVfQjogewogCQlzdHJ1Y3QgTWVzc2FnZVVuaXRfQiAqcmVnID0gYWNiLT5wbXVCOwotCQl3cml0ZWwoQVJDTVNSX0RSVjJJT1BfREFUQV9SRUFEX09LLCByZWctPmRydjJpb3BfZG9vcmJlbGxfcmVnKTsKKwkJd3JpdGVsKEFSQ01TUl9EUlYySU9QX0RBVEFfUkVBRF9PSywgcmVnLT5kcnYyaW9wX2Rvb3JiZWxsKTsKIAkJfQogCQlicmVhazsKKwljYXNlIEFDQl9BREFQVEVSX1RZUEVfQzogeworCQlzdHJ1Y3QgTWVzc2FnZVVuaXRfQyBfX2lvbWVtICpyZWcgPSBhY2ItPnBtdUM7CisJCXdyaXRlbChBUkNNU1JfSEJDTVVfRFJWMklPUF9EQVRBX1JFQURfT0ssICZyZWctPmluYm91bmRfZG9vcmJlbGwpOworCQl9CiAJfQogfQogCkBAIC0xMTg2LDcgKzEzMzIsMTYgQEAKIAkJKiogcHVzaCBpbmJvdW5kIGRvb3JiZWxsIHRlbGwgaW9wLCBkcml2ZXIgZGF0YSB3cml0ZSBvawogCQkqKiBhbmQgd2FpdCByZXBseSBvbiBuZXh0IGh3aW50ZXJydXB0IGZvciBuZXh0IFFidWZmZXIgcG9zdAogCQkqLwotCQl3cml0ZWwoQVJDTVNSX0RSVjJJT1BfREFUQV9XUklURV9PSywgcmVnLT5kcnYyaW9wX2Rvb3JiZWxsX3JlZyk7CisJCXdyaXRlbChBUkNNU1JfRFJWMklPUF9EQVRBX1dSSVRFX09LLCByZWctPmRydjJpb3BfZG9vcmJlbGwpOworCQl9CisJCWJyZWFrOworCWNhc2UgQUNCX0FEQVBURVJfVFlQRV9DOiB7CisJCXN0cnVjdCBNZXNzYWdlVW5pdF9DIF9faW9tZW0gKnJlZyA9IGFjYi0+cG11QzsKKwkJLyoKKwkJKiogcHVzaCBpbmJvdW5kIGRvb3JiZWxsIHRlbGwgaW9wLCBkcml2ZXIgZGF0YSB3cml0ZSBvaworCQkqKiBhbmQgd2FpdCByZXBseSBvbiBuZXh0IGh3aW50ZXJydXB0IGZvciBuZXh0IFFidWZmZXIgcG9zdAorCQkqLworCQl3cml0ZWwoQVJDTVNSX0hCQ01VX0RSVjJJT1BfREFUQV9XUklURV9PSywgJnJlZy0+aW5ib3VuZF9kb29yYmVsbCk7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMTE5NSw3ICsxMzUwLDYgQEAKIHN0cnVjdCBRQlVGRkVSIF9faW9tZW0gKmFyY21zcl9nZXRfaW9wX3JxYnVmZmVyKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IpCiB7CiAJc3RydWN0IFFCVUZGRVIgX19pb21lbSAqcWJ1ZmZlciA9IE5VTEw7Ci0KIAlzd2l0Y2ggKGFjYi0+YWRhcHRlcl90eXBlKSB7CiAKIAljYXNlIEFDQl9BREFQVEVSX1RZUEVfQTogewpAQCAtMTIwNiw5ICsxMzYwLDEzIEBACiAKIAljYXNlIEFDQl9BREFQVEVSX1RZUEVfQjogewogCQlzdHJ1Y3QgTWVzc2FnZVVuaXRfQiAqcmVnID0gYWNiLT5wbXVCOwotCQlxYnVmZmVyID0gKHN0cnVjdCBRQlVGRkVSIF9faW9tZW0gKilyZWctPmlvY3RsX3JidWZmZXJfcmVnOworCQlxYnVmZmVyID0gKHN0cnVjdCBRQlVGRkVSIF9faW9tZW0gKilyZWctPm1lc3NhZ2VfcmJ1ZmZlcjsKIAkJfQogCQlicmVhazsKKwljYXNlIEFDQl9BREFQVEVSX1RZUEVfQzogeworCQlzdHJ1Y3QgTWVzc2FnZVVuaXRfQyAqcGhiY211ID0gKHN0cnVjdCBNZXNzYWdlVW5pdF9DICopYWNiLT5wbXVDOworCQlxYnVmZmVyID0gKHN0cnVjdCBRQlVGRkVSIF9faW9tZW0gKikmcGhiY211LT5tZXNzYWdlX3JidWZmZXI7CisJCX0KIAl9CiAJcmV0dXJuIHFidWZmZXI7CiB9CkBAIC0xMjE2LDcgKzEzNzQsNiBAQAogc3RhdGljIHN0cnVjdCBRQlVGRkVSIF9faW9tZW0gKmFyY21zcl9nZXRfaW9wX3dxYnVmZmVyKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IpCiB7CiAJc3RydWN0IFFCVUZGRVIgX19pb21lbSAqcHFidWZmZXIgPSBOVUxMOwotCiAJc3dpdGNoIChhY2ItPmFkYXB0ZXJfdHlwZSkgewogCiAJY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0E6IHsKQEAgLTEyMjcsOSArMTM4NCwxNCBAQAogCiAJY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0I6IHsKIAkJc3RydWN0IE1lc3NhZ2VVbml0X0IgICpyZWcgPSBhY2ItPnBtdUI7Ci0JCXBxYnVmZmVyID0gKHN0cnVjdCBRQlVGRkVSIF9faW9tZW0gKilyZWctPmlvY3RsX3didWZmZXJfcmVnOworCQlwcWJ1ZmZlciA9IChzdHJ1Y3QgUUJVRkZFUiBfX2lvbWVtICopcmVnLT5tZXNzYWdlX3didWZmZXI7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0M6IHsKKwkJc3RydWN0IE1lc3NhZ2VVbml0X0MgKnJlZyA9IChzdHJ1Y3QgTWVzc2FnZVVuaXRfQyAqKWFjYi0+cG11QzsKKwkJcHFidWZmZXIgPSAoc3RydWN0IFFCVUZGRVIgX19pb21lbSAqKSZyZWctPm1lc3NhZ2Vfd2J1ZmZlcjsKKwl9CisKIAl9CiAJcmV0dXJuIHBxYnVmZmVyOwogfQpAQCAtMTI0MCwxOSArMTQwMiwxOCBAQAogCXN0cnVjdCBRQlVGRkVSICpwUWJ1ZmZlcjsKIAl1aW50OF90IF9faW9tZW0gKmlvcF9kYXRhOwogCWludDMyX3QgbXlfZW1wdHlfbGVuLCBpb3BfbGVuLCBycWJ1Zl9maXJzdGluZGV4LCBycWJ1Zl9sYXN0aW5kZXg7Ci0KIAlycWJ1Zl9sYXN0aW5kZXggPSBhY2ItPnJxYnVmX2xhc3RpbmRleDsKIAlycWJ1Zl9maXJzdGluZGV4ID0gYWNiLT5ycWJ1Zl9maXJzdGluZGV4OwogCXByYnVmZmVyID0gYXJjbXNyX2dldF9pb3BfcnFidWZmZXIoYWNiKTsKIAlpb3BfZGF0YSA9ICh1aW50OF90IF9faW9tZW0gKilwcmJ1ZmZlci0+ZGF0YTsKIAlpb3BfbGVuID0gcHJidWZmZXItPmRhdGFfbGVuOwotCW15X2VtcHR5X2xlbiA9IChycWJ1Zl9maXJzdGluZGV4IC0gcnFidWZfbGFzdGluZGV4IC0xKSYoQVJDTVNSX01BWF9RQlVGRkVSIC0xKTsKKwlteV9lbXB0eV9sZW4gPSAocnFidWZfZmlyc3RpbmRleCAtIHJxYnVmX2xhc3RpbmRleCAtIDEpICYgKEFSQ01TUl9NQVhfUUJVRkZFUiAtIDEpOwogCiAJaWYgKG15X2VtcHR5X2xlbiA+PSBpb3BfbGVuKQogCXsKIAkJd2hpbGUgKGlvcF9sZW4gPiAwKSB7CiAJCQlwUWJ1ZmZlciA9IChzdHJ1Y3QgUUJVRkZFUiAqKSZhY2ItPnJxYnVmZmVyW3JxYnVmX2xhc3RpbmRleF07Ci0JCQltZW1jcHkocFFidWZmZXIsIGlvcF9kYXRhLDEpOworCQkJbWVtY3B5KHBRYnVmZmVyLCBpb3BfZGF0YSwgMSk7CiAJCQlycWJ1Zl9sYXN0aW5kZXgrKzsKIAkJCXJxYnVmX2xhc3RpbmRleCAlPSBBUkNNU1JfTUFYX1FCVUZGRVI7CiAJCQlpb3BfZGF0YSsrOwpAQCAtMTMwMywyNSArMTQ2NCw1MiBAQAogewogCXVpbnQzMl90IG91dGJvdW5kX2Rvb3JiZWxsOwogCXN0cnVjdCBNZXNzYWdlVW5pdF9BIF9faW9tZW0gKnJlZyA9IGFjYi0+cG11QTsKLQogCW91dGJvdW5kX2Rvb3JiZWxsID0gcmVhZGwoJnJlZy0+b3V0Ym91bmRfZG9vcmJlbGwpOwogCXdyaXRlbChvdXRib3VuZF9kb29yYmVsbCwgJnJlZy0+b3V0Ym91bmRfZG9vcmJlbGwpOwogCWlmIChvdXRib3VuZF9kb29yYmVsbCAmIEFSQ01TUl9PVVRCT1VORF9JT1AzMzFfREFUQV9XUklURV9PSykgewogCQlhcmNtc3JfaW9wMmRydl9kYXRhX3dyb3RlX2hhbmRsZShhY2IpOwogCX0KIAotCWlmIChvdXRib3VuZF9kb29yYmVsbCAmIEFSQ01TUl9PVVRCT1VORF9JT1AzMzFfREFUQV9SRUFEX09LKSAJeworCWlmIChvdXRib3VuZF9kb29yYmVsbCAmIEFSQ01TUl9PVVRCT1VORF9JT1AzMzFfREFUQV9SRUFEX09LKSB7CiAJCWFyY21zcl9pb3AyZHJ2X2RhdGFfcmVhZF9oYW5kbGUoYWNiKTsKIAl9CiB9Ci0KK3N0YXRpYyB2b2lkIGFyY21zcl9oYmNfZG9vcmJlbGxfaXNyKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICpwQUNCKQoreworCXVpbnQzMl90IG91dGJvdW5kX2Rvb3JiZWxsOworCXN0cnVjdCBNZXNzYWdlVW5pdF9DICpyZWcgPSAoc3RydWN0IE1lc3NhZ2VVbml0X0MgKilwQUNCLT5wbXVDOworCS8qCisJKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSoqICBNYXliZSBoZXJlIHdlIG5lZWQgdG8gY2hlY2sgd3JxYnVmZmVyX2xvY2sgaXMgbG9jayBvciBub3QKKwkqKiAgRE9PUkJFTEw6IGRpbiEgZG9uIQorCSoqICBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG1haWwgbmVlZCB0byBwYWNrIGZyb20gZmlybXdhcmUKKwkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJKi8KKwlvdXRib3VuZF9kb29yYmVsbCA9IHJlYWRsKCZyZWctPm91dGJvdW5kX2Rvb3JiZWxsKTsKKwl3cml0ZWwob3V0Ym91bmRfZG9vcmJlbGwsICZyZWctPm91dGJvdW5kX2Rvb3JiZWxsX2NsZWFyKTsvKmNsZWFyIGludGVycnVwdCovCisJaWYgKG91dGJvdW5kX2Rvb3JiZWxsICYgQVJDTVNSX0hCQ01VX0lPUDJEUlZfREFUQV9XUklURV9PSykgeworCQlhcmNtc3JfaW9wMmRydl9kYXRhX3dyb3RlX2hhbmRsZShwQUNCKTsKKwl9CisJaWYgKG91dGJvdW5kX2Rvb3JiZWxsICYgQVJDTVNSX0hCQ01VX0lPUDJEUlZfREFUQV9SRUFEX09LKSB7CisJCWFyY21zcl9pb3AyZHJ2X2RhdGFfcmVhZF9oYW5kbGUocEFDQik7CisJfQorCWlmIChvdXRib3VuZF9kb29yYmVsbCAmIEFSQ01TUl9IQkNNVV9JT1AyRFJWX01FU1NBR0VfQ01EX0RPTkUpIHsKKwkJYXJjbXNyX2hiY19tZXNzYWdlX2lzcihwQUNCKTsgICAgLyogbWVzc2VuZ2VyIG9mICJkcml2ZXIgdG8gaW9wIGNvbW1hbmRzIiAqLworCX0KKwlyZXR1cm47Cit9CiBzdGF0aWMgdm9pZCBhcmNtc3JfaGJhX3Bvc3RxdWV1ZV9pc3Ioc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYikKIHsKIAl1aW50MzJfdCBmbGFnX2NjYjsKIAlzdHJ1Y3QgTWVzc2FnZVVuaXRfQSBfX2lvbWVtICpyZWcgPSBhY2ItPnBtdUE7Ci0KKwlzdHJ1Y3QgQVJDTVNSX0NEQiAqcEFSQ01TUl9DREI7CisJc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2sgKnBDQ0I7CisJYm9vbCBlcnJvcjsKIAl3aGlsZSAoKGZsYWdfY2NiID0gcmVhZGwoJnJlZy0+b3V0Ym91bmRfcXVldWVwb3J0KSkgIT0gMHhGRkZGRkZGRikgewotCQlhcmNtc3JfZHJhaW5fZG9uZXF1ZXVlKGFjYiwgZmxhZ19jY2IpOworCQlwQVJDTVNSX0NEQiA9IChzdHJ1Y3QgQVJDTVNSX0NEQiAqKShhY2ItPnZpcjJwaHlfb2Zmc2V0ICsgKGZsYWdfY2NiIDw8IDUpKTsvKmZyYW1lIG11c3QgYmUgMzIgYnl0ZXMgYWxpZ25lZCovCisJCXBDQ0IgPSBjb250YWluZXJfb2YocEFSQ01TUl9DREIsIHN0cnVjdCBDb21tYW5kQ29udHJvbEJsb2NrLCBhcmNtc3JfY2RiKTsKKwkJZXJyb3IgPSAoZmxhZ19jY2IgJiBBUkNNU1JfQ0NCUkVQTFlfRkxBR19FUlJPUl9NT0RFMCkgPyB0cnVlIDogZmFsc2U7CisJCWFyY21zcl9kcmFpbl9kb25lcXVldWUoYWNiLCBwQ0NCLCBlcnJvcik7CiAJfQogfQogCkBAIC0xMzMwLDI5ICsxNTE4LDYyIEBACiAJdWludDMyX3QgaW5kZXg7CiAJdWludDMyX3QgZmxhZ19jY2I7CiAJc3RydWN0IE1lc3NhZ2VVbml0X0IgKnJlZyA9IGFjYi0+cG11QjsKLQorCXN0cnVjdCBBUkNNU1JfQ0RCICpwQVJDTVNSX0NEQjsKKwlzdHJ1Y3QgQ29tbWFuZENvbnRyb2xCbG9jayAqcENDQjsKKwlib29sIGVycm9yOwogCWluZGV4ID0gcmVnLT5kb25lcV9pbmRleDsKLQogCXdoaWxlICgoZmxhZ19jY2IgPSByZWFkbCgmcmVnLT5kb25lX3FidWZmZXJbaW5kZXhdKSkgIT0gMCkgewogCQl3cml0ZWwoMCwgJnJlZy0+ZG9uZV9xYnVmZmVyW2luZGV4XSk7Ci0JCWFyY21zcl9kcmFpbl9kb25lcXVldWUoYWNiLCBmbGFnX2NjYik7CisJCXBBUkNNU1JfQ0RCID0gKHN0cnVjdCBBUkNNU1JfQ0RCICopKGFjYi0+dmlyMnBoeV9vZmZzZXQrKGZsYWdfY2NiIDw8IDUpKTsvKmZyYW1lIG11c3QgYmUgMzIgYnl0ZXMgYWxpZ25lZCovCisJCXBDQ0IgPSBjb250YWluZXJfb2YocEFSQ01TUl9DREIsIHN0cnVjdCBDb21tYW5kQ29udHJvbEJsb2NrLCBhcmNtc3JfY2RiKTsKKwkJZXJyb3IgPSAoZmxhZ19jY2IgJiBBUkNNU1JfQ0NCUkVQTFlfRkxBR19FUlJPUl9NT0RFMCkgPyB0cnVlIDogZmFsc2U7CisJCWFyY21zcl9kcmFpbl9kb25lcXVldWUoYWNiLCBwQ0NCLCBlcnJvcik7CiAJCWluZGV4Kys7CiAJCWluZGV4ICU9IEFSQ01TUl9NQVhfSEJCX1BPU1RRVUVVRTsKIAkJcmVnLT5kb25lcV9pbmRleCA9IGluZGV4OwogCX0KIH0KKworc3RhdGljIHZvaWQgYXJjbXNyX2hiY19wb3N0cXVldWVfaXNyKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IpCit7CisJc3RydWN0IE1lc3NhZ2VVbml0X0MgKnBoYmNtdTsKKwlzdHJ1Y3QgQVJDTVNSX0NEQiAqYXJjbXNyX2NkYjsKKwlzdHJ1Y3QgQ29tbWFuZENvbnRyb2xCbG9jayAqY2NiOworCXVpbnQzMl90IGZsYWdfY2NiLCBjY2JfY2RiX3BoeSwgdGhyb3R0bGluZyA9IDA7CisJaW50IGVycm9yOworCisJcGhiY211ID0gKHN0cnVjdCBNZXNzYWdlVW5pdF9DICopYWNiLT5wbXVDOworCS8qIGFyZWNhIGNkYiBjb21tYW5kIGRvbmUgKi8KKwkvKiBVc2UgY29ycmVjdCBvZmZzZXQgYW5kIHNpemUgZm9yIHN5bmNpbmcgKi8KKworCXdoaWxlIChyZWFkbCgmcGhiY211LT5ob3N0X2ludF9zdGF0dXMpICYKKwlBUkNNU1JfSEJDTVVfT1VUQk9VTkRfUE9TVFFVRVVFX0lTUil7CisJLyogY2hlY2sgaWYgY29tbWFuZCBkb25lIHdpdGggbm8gZXJyb3IqLworCWZsYWdfY2NiID0gcmVhZGwoJnBoYmNtdS0+b3V0Ym91bmRfcXVldWVwb3J0X2xvdyk7CisJY2NiX2NkYl9waHkgPSAoZmxhZ19jY2IgJiAweEZGRkZGRkYwKTsvKmZyYW1lIG11c3QgYmUgMzIgYnl0ZXMgYWxpZ25lZCovCisJYXJjbXNyX2NkYiA9IChzdHJ1Y3QgQVJDTVNSX0NEQiAqKShhY2ItPnZpcjJwaHlfb2Zmc2V0ICsgY2NiX2NkYl9waHkpOworCWNjYiA9IGNvbnRhaW5lcl9vZihhcmNtc3JfY2RiLCBzdHJ1Y3QgQ29tbWFuZENvbnRyb2xCbG9jaywgYXJjbXNyX2NkYik7CisJZXJyb3IgPSAoZmxhZ19jY2IgJiBBUkNNU1JfQ0NCUkVQTFlfRkxBR19FUlJPUl9NT0RFMSkgPyB0cnVlIDogZmFsc2U7CisJLyogY2hlY2sgaWYgY29tbWFuZCBkb25lIHdpdGggbm8gZXJyb3IgKi8KKwlhcmNtc3JfZHJhaW5fZG9uZXF1ZXVlKGFjYiwgY2NiLCBlcnJvcik7CisJaWYgKHRocm90dGxpbmcgPT0gQVJDTVNSX0hCQ19JU1JfVEhST1RUTElOR19MRVZFTCkgeworCQl3cml0ZWwoQVJDTVNSX0hCQ01VX0RSVjJJT1BfUE9TVFFVRVVFX1RIUk9UVExJTkcsICZwaGJjbXUtPmluYm91bmRfZG9vcmJlbGwpOworCQlicmVhazsKKwl9CisJdGhyb3R0bGluZysrOworCX0KK30KIC8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqKiBIYW5kbGUgYSBtZXNzYWdlIGludGVycnVwdAogKioKLSoqIFRoZSBvbmx5IG1lc3NhZ2UgaW50ZXJydXB0IHdlIGV4cGVjdCBpcyBpbiByZXNwb25zZSB0byBhIHF1ZXJ5IGZvciB0aGUgY3VycmVudCBhZGFwdGVyIGNvbmZpZy4KKyoqIFRoZSBvbmx5IG1lc3NhZ2UgaW50ZXJydXB0IHdlIGV4cGVjdCBpcyBpbiByZXNwb25zZSB0byBhIHF1ZXJ5IGZvciB0aGUgY3VycmVudCBhZGFwdGVyIGNvbmZpZy4gIAogKiogV2Ugd2FudCB0aGlzIGluIG9yZGVyIHRvIGNvbXBhcmUgdGhlIGRyaXZlbWFwIHNvIHRoYXQgd2UgY2FuIGRldGVjdCBuZXdseS1hdHRhY2hlZCBkcml2ZXMuCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwogc3RhdGljIHZvaWQgYXJjbXNyX2hiYV9tZXNzYWdlX2lzcihzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKQogewogCXN0cnVjdCBNZXNzYWdlVW5pdF9BICpyZWcgID0gYWNiLT5wbXVBOwotCiAJLypjbGVhciBpbnRlcnJ1cHQgYW5kIG1lc3NhZ2Ugc3RhdGUqLwogCXdyaXRlbChBUkNNU1JfTVVfT1VUQk9VTkRfTUVTU0FHRTBfSU5ULCAmcmVnLT5vdXRib3VuZF9pbnRzdGF0dXMpOwogCXNjaGVkdWxlX3dvcmsoJmFjYi0+YXJjbXNyX2RvX21lc3NhZ2VfaXNyX2JoKTsKQEAgLTEzNjIsMTYgKzE1ODMsMzIgQEAKIAlzdHJ1Y3QgTWVzc2FnZVVuaXRfQiAqcmVnICA9IGFjYi0+cG11QjsKIAogCS8qY2xlYXIgaW50ZXJydXB0IGFuZCBtZXNzYWdlIHN0YXRlKi8KLQl3cml0ZWwoQVJDTVNSX01FU1NBR0VfSU5UX0NMRUFSX1BBVFRFUk4sIHJlZy0+aW9wMmRydl9kb29yYmVsbF9yZWcpOworCXdyaXRlbChBUkNNU1JfTUVTU0FHRV9JTlRfQ0xFQVJfUEFUVEVSTiwgcmVnLT5pb3AyZHJ2X2Rvb3JiZWxsKTsKIAlzY2hlZHVsZV93b3JrKCZhY2ItPmFyY21zcl9kb19tZXNzYWdlX2lzcl9iaCk7CiB9CisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiogSGFuZGxlIGEgbWVzc2FnZSBpbnRlcnJ1cHQKKyoqCisqKiBUaGUgb25seSBtZXNzYWdlIGludGVycnVwdCB3ZSBleHBlY3QgaXMgaW4gcmVzcG9uc2UgdG8gYSBxdWVyeSBmb3IgdGhlCisqKiBjdXJyZW50IGFkYXB0ZXIgY29uZmlnLgorKiogV2Ugd2FudCB0aGlzIGluIG9yZGVyIHRvIGNvbXBhcmUgdGhlIGRyaXZlbWFwIHNvIHRoYXQgd2UgY2FuIGRldGVjdCBuZXdseS1hdHRhY2hlZCBkcml2ZXMuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworc3RhdGljIHZvaWQgYXJjbXNyX2hiY19tZXNzYWdlX2lzcihzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKQoreworCXN0cnVjdCBNZXNzYWdlVW5pdF9DICpyZWcgID0gYWNiLT5wbXVDOworCS8qY2xlYXIgaW50ZXJydXB0IGFuZCBtZXNzYWdlIHN0YXRlKi8KKwl3cml0ZWwoQVJDTVNSX0hCQ01VX0lPUDJEUlZfTUVTU0FHRV9DTURfRE9ORV9ET09SQkVMTF9DTEVBUiwgJnJlZy0+b3V0Ym91bmRfZG9vcmJlbGxfY2xlYXIpOworCXNjaGVkdWxlX3dvcmsoJmFjYi0+YXJjbXNyX2RvX21lc3NhZ2VfaXNyX2JoKTsKK30KKwogc3RhdGljIGludCBhcmNtc3JfaGFuZGxlX2hiYV9pc3Ioc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYikKIHsKIAl1aW50MzJfdCBvdXRib3VuZF9pbnRzdGF0dXM7CiAJc3RydWN0IE1lc3NhZ2VVbml0X0EgX19pb21lbSAqcmVnID0gYWNiLT5wbXVBOwotCiAJb3V0Ym91bmRfaW50c3RhdHVzID0gcmVhZGwoJnJlZy0+b3V0Ym91bmRfaW50c3RhdHVzKSAmCi0JCQkJCQkJYWNiLT5vdXRib3VuZF9pbnRfZW5hYmxlOworCQlhY2ItPm91dGJvdW5kX2ludF9lbmFibGU7CiAJaWYgKCEob3V0Ym91bmRfaW50c3RhdHVzICYgQVJDTVNSX01VX09VVEJPVU5EX0hBTkRMRV9JTlQpKQl7CiAJCXJldHVybiAxOwogCX0KQEAgLTEzODIsNyArMTYxOSw3IEBACiAJaWYgKG91dGJvdW5kX2ludHN0YXR1cyAmIEFSQ01TUl9NVV9PVVRCT1VORF9QT1NUUVVFVUVfSU5UKSB7CiAJCWFyY21zcl9oYmFfcG9zdHF1ZXVlX2lzcihhY2IpOwogCX0KLQlpZiAob3V0Ym91bmRfaW50c3RhdHVzICYgQVJDTVNSX01VX09VVEJPVU5EX01FU1NBR0UwX0lOVCkgCXsKKwlpZihvdXRib3VuZF9pbnRzdGF0dXMgJiBBUkNNU1JfTVVfT1VUQk9VTkRfTUVTU0FHRTBfSU5UKSAJewogCQkvKiBtZXNzZW5nZXIgb2YgImRyaXZlciB0byBpb3AgY29tbWFuZHMiICovCiAJCWFyY21zcl9oYmFfbWVzc2FnZV9pc3IoYWNiKTsKIAl9CkBAIC0xMzkzLDE4ICsxNjMwLDE3IEBACiB7CiAJdWludDMyX3Qgb3V0Ym91bmRfZG9vcmJlbGw7CiAJc3RydWN0IE1lc3NhZ2VVbml0X0IgKnJlZyA9IGFjYi0+cG11QjsKLQotCW91dGJvdW5kX2Rvb3JiZWxsID0gcmVhZGwocmVnLT5pb3AyZHJ2X2Rvb3JiZWxsX3JlZykgJgotCQkJCQkJCWFjYi0+b3V0Ym91bmRfaW50X2VuYWJsZTsKKwlvdXRib3VuZF9kb29yYmVsbCA9IHJlYWRsKHJlZy0+aW9wMmRydl9kb29yYmVsbCkgJgorCQkJCWFjYi0+b3V0Ym91bmRfaW50X2VuYWJsZTsKIAlpZiAoIW91dGJvdW5kX2Rvb3JiZWxsKQogCQlyZXR1cm4gMTsKIAotCXdyaXRlbCh+b3V0Ym91bmRfZG9vcmJlbGwsIHJlZy0+aW9wMmRydl9kb29yYmVsbF9yZWcpOworCXdyaXRlbCh+b3V0Ym91bmRfZG9vcmJlbGwsIHJlZy0+aW9wMmRydl9kb29yYmVsbCk7CiAJLyppbiBjYXNlIHRoZSBsYXN0IGFjdGlvbiBvZiBkb29yYmVsbCBpbnRlcnJ1cHQgY2xlYXJhbmNlIGlzIGNhY2hlZCwKIAl0aGlzIGFjdGlvbiBjYW4gcHVzaCBIVyB0byB3cml0ZSBkb3duIHRoZSBjbGVhciBiaXQqLwotCXJlYWRsKHJlZy0+aW9wMmRydl9kb29yYmVsbF9yZWcpOwotCXdyaXRlbChBUkNNU1JfRFJWMklPUF9FTkRfT0ZfSU5URVJSVVBULCByZWctPmRydjJpb3BfZG9vcmJlbGxfcmVnKTsKLQlpZiAob3V0Ym91bmRfZG9vcmJlbGwgJiBBUkNNU1JfSU9QMkRSVl9EQVRBX1dSSVRFX09LKSAJeworCXJlYWRsKHJlZy0+aW9wMmRydl9kb29yYmVsbCk7CisJd3JpdGVsKEFSQ01TUl9EUlYySU9QX0VORF9PRl9JTlRFUlJVUFQsIHJlZy0+ZHJ2MmlvcF9kb29yYmVsbCk7CisJaWYgKG91dGJvdW5kX2Rvb3JiZWxsICYgQVJDTVNSX0lPUDJEUlZfREFUQV9XUklURV9PSykgewogCQlhcmNtc3JfaW9wMmRydl9kYXRhX3dyb3RlX2hhbmRsZShhY2IpOwogCX0KIAlpZiAob3V0Ym91bmRfZG9vcmJlbGwgJiBBUkNNU1JfSU9QMkRSVl9EQVRBX1JFQURfT0spIHsKQEAgLTE0MTMsMTQgKzE2NDksMzcgQEAKIAlpZiAob3V0Ym91bmRfZG9vcmJlbGwgJiBBUkNNU1JfSU9QMkRSVl9DREJfRE9ORSkgewogCQlhcmNtc3JfaGJiX3Bvc3RxdWV1ZV9pc3IoYWNiKTsKIAl9Ci0JaWYgKG91dGJvdW5kX2Rvb3JiZWxsICYgQVJDTVNSX0lPUDJEUlZfTUVTU0FHRV9DTURfRE9ORSkgeworCWlmKG91dGJvdW5kX2Rvb3JiZWxsICYgQVJDTVNSX0lPUDJEUlZfTUVTU0FHRV9DTURfRE9ORSkgewogCQkvKiBtZXNzZW5nZXIgb2YgImRyaXZlciB0byBpb3AgY29tbWFuZHMiICovCiAJCWFyY21zcl9oYmJfbWVzc2FnZV9pc3IoYWNiKTsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBhcmNtc3JfaGFuZGxlX2hiY19pc3Ioc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKnBBQ0IpCit7CisJdWludDMyX3QgaG9zdF9pbnRlcnJ1cHRfc3RhdHVzOworCXN0cnVjdCBNZXNzYWdlVW5pdF9DICpwaGJjbXUgPSAoc3RydWN0IE1lc3NhZ2VVbml0X0MgKilwQUNCLT5wbXVDOworCS8qCisJKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJKiogICBjaGVjayBvdXRib3VuZCBpbnRzdGF0dXMKKwkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkqLworCWhvc3RfaW50ZXJydXB0X3N0YXR1cyA9IHJlYWRsKCZwaGJjbXUtPmhvc3RfaW50X3N0YXR1cyk7CisJaWYgKCFob3N0X2ludGVycnVwdF9zdGF0dXMpIHsKKwkJLyppdCBtdXN0IGJlIHNoYXJlIGlycSovCisJCXJldHVybiAxOworCX0KKwkvKiBNVSBpb2N0bCB0cmFuc2ZlciBkb29yYmVsbCBpbnRlcnJ1cHRzKi8KKwlpZiAoaG9zdF9pbnRlcnJ1cHRfc3RhdHVzICYgQVJDTVNSX0hCQ01VX09VVEJPVU5EX0RPT1JCRUxMX0lTUikgeworCQlhcmNtc3JfaGJjX2Rvb3JiZWxsX2lzcihwQUNCKTsgICAvKiBtZXNzZW5nZXIgb2YgImlvY3RsIG1lc3NhZ2UgcmVhZCB3cml0ZSIgKi8KKwl9CisJLyogTVUgcG9zdCBxdWV1ZSBpbnRlcnJ1cHRzKi8KKwlpZiAoaG9zdF9pbnRlcnJ1cHRfc3RhdHVzICYgQVJDTVNSX0hCQ01VX09VVEJPVU5EX1BPU1RRVUVVRV9JU1IpIHsKKwkJYXJjbXNyX2hiY19wb3N0cXVldWVfaXNyKHBBQ0IpOyAgLyogbWVzc2VuZ2VyIG9mICJzY3NpIGNvbW1hbmRzIiAqLworCX0KKwlyZXR1cm4gMDsKK30KIHN0YXRpYyBpcnFyZXR1cm5fdCBhcmNtc3JfaW50ZXJydXB0KHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IpCiB7CiAJc3dpdGNoIChhY2ItPmFkYXB0ZXJfdHlwZSkgewpAQCAtMTQzNyw2ICsxNjk2LDExIEBACiAJCX0KIAkJfQogCQlicmVhazsKKwkgY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0M6IHsKKwkJaWYgKGFyY21zcl9oYW5kbGVfaGJjX2lzcihhY2IpKSB7CisJCQlyZXR1cm4gSVJRX05PTkU7CisJCX0KKwkJfQogCX0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0xNDYzLDcgKzE3MjcsNiBAQAogCXN0cnVjdCBRQlVGRkVSIF9faW9tZW0gKnB3YnVmZmVyOwogCXVpbnQ4X3QgX19pb21lbSAqaW9wX2RhdGE7CiAJaW50MzJfdCBhbGx4ZmVyX2xlbiA9IDA7Ci0KIAlwd2J1ZmZlciA9IGFyY21zcl9nZXRfaW9wX3dxYnVmZmVyKGFjYik7CiAJaW9wX2RhdGEgPSAodWludDhfdCBfX2lvbWVtICopcHdidWZmZXItPmRhdGE7CiAJaWYgKGFjYi0+YWNiX2ZsYWdzICYgQUNCX0ZfTUVTU0FHRV9XUUJVRkZFUl9SRUFERUQpIHsKQEAgLTE0OTYsNyArMTc1OSw2IEBACiAJCQkJCQkodWludDMyX3QgKSBjbWQtPmNtbmRbN10gPDwgOCAgfAogCQkJCQkJKHVpbnQzMl90ICkgY21kLT5jbW5kWzhdOwogCQkJCQkJLyogNCBieXRlczogQXJlY2EgaW8gY29udHJvbCBjb2RlICovCi0KIAlzZyA9IHNjc2lfc2dsaXN0KGNtZCk7CiAJYnVmZmVyID0ga21hcF9hdG9taWMoc2dfcGFnZShzZyksIEtNX0lSUTApICsgc2ctPm9mZnNldDsKIAlpZiAoc2NzaV9zZ19jb3VudChjbWQpID4gMSkgewpAQCAtMTUyMiwxMyArMTc4NCw3IEBACiAJCQlyZXR2YWx1ZSA9IEFSQ01TUl9NRVNTQUdFX0ZBSUw7CiAJCQlnb3RvIG1lc3NhZ2Vfb3V0OwogCQl9Ci0KLQkJaWYgKCFhY2ItPmZ3X3N0YXRlKSB7Ci0JCQlwY21kbWVzc2FnZWZsZC0+Y21kbWVzc2FnZS5SZXR1cm5Db2RlID0KLQkJCUFSQ01TUl9NRVNTQUdFX1JFVFVSTkNPREVfQlVTX0hBTkdfT047Ci0JCQlnb3RvIG1lc3NhZ2Vfb3V0OwotCQl9Ci0KKwkJCQkKIAkJcHRtcFFidWZmZXIgPSB2ZXJfYWRkcjsKIAkJd2hpbGUgKChhY2ItPnJxYnVmX2ZpcnN0aW5kZXggIT0gYWNiLT5ycWJ1Zl9sYXN0aW5kZXgpCiAJCQkmJiAoYWxseGZlcl9sZW4gPCAxMDMxKSkgewpAQCAtMTU2MCw3ICsxODE2LDExIEBACiAJCX0KIAkJbWVtY3B5KHBjbWRtZXNzYWdlZmxkLT5tZXNzYWdlZGF0YWJ1ZmZlciwgdmVyX2FkZHIsIGFsbHhmZXJfbGVuKTsKIAkJcGNtZG1lc3NhZ2VmbGQtPmNtZG1lc3NhZ2UuTGVuZ3RoID0gYWxseGZlcl9sZW47Ci0JCXBjbWRtZXNzYWdlZmxkLT5jbWRtZXNzYWdlLlJldHVybkNvZGUgPSBBUkNNU1JfTUVTU0FHRV9SRVRVUk5DT0RFX09LOworCQlpZihhY2ItPmZ3X2ZsYWcgPT0gRldfREVBRExPQ0spIHsKKwkJCXBjbWRtZXNzYWdlZmxkLT5jbWRtZXNzYWdlLlJldHVybkNvZGUgPSBBUkNNU1JfTUVTU0FHRV9SRVRVUk5DT0RFX0JVU19IQU5HX09OOworCQl9ZWxzZXsKKwkJCXBjbWRtZXNzYWdlZmxkLT5jbWRtZXNzYWdlLlJldHVybkNvZGUgPSBBUkNNU1JfTUVTU0FHRV9SRVRVUk5DT0RFX09LOworCQl9CiAJCWtmcmVlKHZlcl9hZGRyKTsKIAkJfQogCQlicmVhazsKQEAgLTE1NzUsMTIgKzE4MzUsMTMgQEAKIAkJCXJldHZhbHVlID0gQVJDTVNSX01FU1NBR0VfRkFJTDsKIAkJCWdvdG8gbWVzc2FnZV9vdXQ7CiAJCX0KLQkJaWYgKCFhY2ItPmZ3X3N0YXRlKSB7Ci0JCQlwY21kbWVzc2FnZWZsZC0+Y21kbWVzc2FnZS5SZXR1cm5Db2RlID0KKwkJaWYoYWNiLT5md19mbGFnID09IEZXX0RFQURMT0NLKSB7CisJCQlwY21kbWVzc2FnZWZsZC0+Y21kbWVzc2FnZS5SZXR1cm5Db2RlID0gCiAJCQlBUkNNU1JfTUVTU0FHRV9SRVRVUk5DT0RFX0JVU19IQU5HX09OOwotCQkJZ290byBtZXNzYWdlX291dDsKKwkJfWVsc2V7CisJCQlwY21kbWVzc2FnZWZsZC0+Y21kbWVzc2FnZS5SZXR1cm5Db2RlID0gCisJCQlBUkNNU1JfTUVTU0FHRV9SRVRVUk5DT0RFX09LOwogCQl9Ci0KIAkJcHRtcHVzZXJidWZmZXIgPSB2ZXJfYWRkcjsKIAkJdXNlcl9sZW4gPSBwY21kbWVzc2FnZWZsZC0+Y21kbWVzc2FnZS5MZW5ndGg7CiAJCW1lbWNweShwdG1wdXNlcmJ1ZmZlciwgcGNtZG1lc3NhZ2VmbGQtPm1lc3NhZ2VkYXRhYnVmZmVyLCB1c2VyX2xlbik7CkBAIC0xNjMzLDEyICsxODk0LDYgQEAKIAogCWNhc2UgQVJDTVNSX01FU1NBR0VfQ0xFQVJfUlFCVUZGRVI6IHsKIAkJdWludDhfdCAqcFFidWZmZXIgPSBhY2ItPnJxYnVmZmVyOwotCQlpZiAoIWFjYi0+Zndfc3RhdGUpIHsKLQkJCXBjbWRtZXNzYWdlZmxkLT5jbWRtZXNzYWdlLlJldHVybkNvZGUgPQotCQkJQVJDTVNSX01FU1NBR0VfUkVUVVJOQ09ERV9CVVNfSEFOR19PTjsKLQkJCWdvdG8gbWVzc2FnZV9vdXQ7Ci0JCX0KLQogCQlpZiAoYWNiLT5hY2JfZmxhZ3MgJiBBQ0JfRl9JT1BEQVRBX09WRVJGTE9XKSB7CiAJCQlhY2ItPmFjYl9mbGFncyAmPSB+QUNCX0ZfSU9QREFUQV9PVkVSRkxPVzsKIAkJCWFyY21zcl9pb3BfbWVzc2FnZV9yZWFkKGFjYik7CkBAIC0xNjQ3LDE2ICsxOTAyLDI0IEBACiAJCWFjYi0+cnFidWZfZmlyc3RpbmRleCA9IDA7CiAJCWFjYi0+cnFidWZfbGFzdGluZGV4ID0gMDsKIAkJbWVtc2V0KHBRYnVmZmVyLCAwLCBBUkNNU1JfTUFYX1FCVUZGRVIpOwotCQlwY21kbWVzc2FnZWZsZC0+Y21kbWVzc2FnZS5SZXR1cm5Db2RlID0gQVJDTVNSX01FU1NBR0VfUkVUVVJOQ09ERV9PSzsKKwkJaWYoYWNiLT5md19mbGFnID09IEZXX0RFQURMT0NLKSB7CisJCQlwY21kbWVzc2FnZWZsZC0+Y21kbWVzc2FnZS5SZXR1cm5Db2RlID0KKwkJCUFSQ01TUl9NRVNTQUdFX1JFVFVSTkNPREVfQlVTX0hBTkdfT047CisJCX1lbHNleworCQkJcGNtZG1lc3NhZ2VmbGQtPmNtZG1lc3NhZ2UuUmV0dXJuQ29kZSA9CisJCQlBUkNNU1JfTUVTU0FHRV9SRVRVUk5DT0RFX09LOworCQl9CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIEFSQ01TUl9NRVNTQUdFX0NMRUFSX1dRQlVGRkVSOiB7CiAJCXVpbnQ4X3QgKnBRYnVmZmVyID0gYWNiLT53cWJ1ZmZlcjsKLQkJaWYgKCFhY2ItPmZ3X3N0YXRlKSB7CisJCWlmKGFjYi0+ZndfZmxhZyA9PSBGV19ERUFETE9DSykgewogCQkJcGNtZG1lc3NhZ2VmbGQtPmNtZG1lc3NhZ2UuUmV0dXJuQ29kZSA9CiAJCQlBUkNNU1JfTUVTU0FHRV9SRVRVUk5DT0RFX0JVU19IQU5HX09OOwotCQkJZ290byBtZXNzYWdlX291dDsKKwkJfWVsc2V7CisJCQlwY21kbWVzc2FnZWZsZC0+Y21kbWVzc2FnZS5SZXR1cm5Db2RlID0KKwkJCUFSQ01TUl9NRVNTQUdFX1JFVFVSTkNPREVfT0s7CiAJCX0KIAogCQlpZiAoYWNiLT5hY2JfZmxhZ3MgJiBBQ0JfRl9JT1BEQVRBX09WRVJGTE9XKSB7CkBAIC0xNjY5LDE4ICsxOTMyLDExIEBACiAJCWFjYi0+d3FidWZfZmlyc3RpbmRleCA9IDA7CiAJCWFjYi0+d3FidWZfbGFzdGluZGV4ID0gMDsKIAkJbWVtc2V0KHBRYnVmZmVyLCAwLCBBUkNNU1JfTUFYX1FCVUZGRVIpOwotCQlwY21kbWVzc2FnZWZsZC0+Y21kbWVzc2FnZS5SZXR1cm5Db2RlID0KLQkJCUFSQ01TUl9NRVNTQUdFX1JFVFVSTkNPREVfT0s7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIEFSQ01TUl9NRVNTQUdFX0NMRUFSX0FMTFFCVUZGRVI6IHsKIAkJdWludDhfdCAqcFFidWZmZXI7Ci0JCWlmICghYWNiLT5md19zdGF0ZSkgewotCQkJcGNtZG1lc3NhZ2VmbGQtPmNtZG1lc3NhZ2UuUmV0dXJuQ29kZSA9Ci0JCQlBUkNNU1JfTUVTU0FHRV9SRVRVUk5DT0RFX0JVU19IQU5HX09OOwotCQkJZ290byBtZXNzYWdlX291dDsKLQkJfQogCiAJCWlmIChhY2ItPmFjYl9mbGFncyAmIEFDQl9GX0lPUERBVEFfT1ZFUkZMT1cpIHsKIAkJCWFjYi0+YWNiX2ZsYWdzICY9IH5BQ0JfRl9JT1BEQVRBX09WRVJGTE9XOwpAQCAtMTY5OCw0NyArMTk1NCw1MiBAQAogCQltZW1zZXQocFFidWZmZXIsIDAsIHNpemVvZihzdHJ1Y3QgUUJVRkZFUikpOwogCQlwUWJ1ZmZlciA9IGFjYi0+d3FidWZmZXI7CiAJCW1lbXNldChwUWJ1ZmZlciwgMCwgc2l6ZW9mKHN0cnVjdCBRQlVGRkVSKSk7Ci0JCXBjbWRtZXNzYWdlZmxkLT5jbWRtZXNzYWdlLlJldHVybkNvZGUgPSBBUkNNU1JfTUVTU0FHRV9SRVRVUk5DT0RFX09LOworCQlpZihhY2ItPmZ3X2ZsYWcgPT0gRldfREVBRExPQ0spIHsKKwkJCXBjbWRtZXNzYWdlZmxkLT5jbWRtZXNzYWdlLlJldHVybkNvZGUgPQorCQkJQVJDTVNSX01FU1NBR0VfUkVUVVJOQ09ERV9CVVNfSEFOR19PTjsKKwkJfWVsc2V7CisJCQlwY21kbWVzc2FnZWZsZC0+Y21kbWVzc2FnZS5SZXR1cm5Db2RlID0KKwkJCUFSQ01TUl9NRVNTQUdFX1JFVFVSTkNPREVfT0s7CisJCX0KIAkJfQogCQlicmVhazsKIAogCWNhc2UgQVJDTVNSX01FU1NBR0VfUkVUVVJOX0NPREVfM0Y6IHsKLQkJaWYgKCFhY2ItPmZ3X3N0YXRlKSB7CisJCWlmKGFjYi0+ZndfZmxhZyA9PSBGV19ERUFETE9DSykgewogCQkJcGNtZG1lc3NhZ2VmbGQtPmNtZG1lc3NhZ2UuUmV0dXJuQ29kZSA9CiAJCQlBUkNNU1JfTUVTU0FHRV9SRVRVUk5DT0RFX0JVU19IQU5HX09OOwotCQkJZ290byBtZXNzYWdlX291dDsKLQkJfQotCQlwY21kbWVzc2FnZWZsZC0+Y21kbWVzc2FnZS5SZXR1cm5Db2RlID0gQVJDTVNSX01FU1NBR0VfUkVUVVJOQ09ERV8zRjsKKwkJfWVsc2V7CisJCQlwY21kbWVzc2FnZWZsZC0+Y21kbWVzc2FnZS5SZXR1cm5Db2RlID0KKwkJCUFSQ01TUl9NRVNTQUdFX1JFVFVSTkNPREVfM0Y7CiAJCX0KIAkJYnJlYWs7Ci0KKwkJfQogCWNhc2UgQVJDTVNSX01FU1NBR0VfU0FZX0hFTExPOiB7CiAJCWludDhfdCAqaGVsbG9fc3RyaW5nID0gIkhlbGxvISBJIGFtIEFSQ01TUiI7Ci0JCWlmICghYWNiLT5md19zdGF0ZSkgeworCQlpZihhY2ItPmZ3X2ZsYWcgPT0gRldfREVBRExPQ0spIHsKIAkJCXBjbWRtZXNzYWdlZmxkLT5jbWRtZXNzYWdlLlJldHVybkNvZGUgPQogCQkJQVJDTVNSX01FU1NBR0VfUkVUVVJOQ09ERV9CVVNfSEFOR19PTjsKLQkJCWdvdG8gbWVzc2FnZV9vdXQ7CisJCX1lbHNleworCQkJcGNtZG1lc3NhZ2VmbGQtPmNtZG1lc3NhZ2UuUmV0dXJuQ29kZSA9CisJCQlBUkNNU1JfTUVTU0FHRV9SRVRVUk5DT0RFX09LOwogCQl9CiAJCW1lbWNweShwY21kbWVzc2FnZWZsZC0+bWVzc2FnZWRhdGFidWZmZXIsIGhlbGxvX3N0cmluZwogCQkJLCAoaW50MTZfdClzdHJsZW4oaGVsbG9fc3RyaW5nKSk7Ci0JCXBjbWRtZXNzYWdlZmxkLT5jbWRtZXNzYWdlLlJldHVybkNvZGUgPSBBUkNNU1JfTUVTU0FHRV9SRVRVUk5DT0RFX09LOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBBUkNNU1JfTUVTU0FHRV9TQVlfR09PREJZRToKLQkJaWYgKCFhY2ItPmZ3X3N0YXRlKSB7CisJCWlmKGFjYi0+ZndfZmxhZyA9PSBGV19ERUFETE9DSykgewogCQkJcGNtZG1lc3NhZ2VmbGQtPmNtZG1lc3NhZ2UuUmV0dXJuQ29kZSA9CiAJCQlBUkNNU1JfTUVTU0FHRV9SRVRVUk5DT0RFX0JVU19IQU5HX09OOwotCQkJZ290byBtZXNzYWdlX291dDsKIAkJfQogCQlhcmNtc3JfaW9wX3BhcmtpbmcoYWNiKTsKIAkJYnJlYWs7CiAKIAljYXNlIEFSQ01TUl9NRVNTQUdFX0ZMVVNIX0FEQVBURVJfQ0FDSEU6Ci0JCWlmICghYWNiLT5md19zdGF0ZSkgeworCQlpZihhY2ItPmZ3X2ZsYWcgPT0gRldfREVBRExPQ0spIHsKIAkJCXBjbWRtZXNzYWdlZmxkLT5jbWRtZXNzYWdlLlJldHVybkNvZGUgPQogCQkJQVJDTVNSX01FU1NBR0VfUkVUVVJOQ09ERV9CVVNfSEFOR19PTjsKLQkJCWdvdG8gbWVzc2FnZV9vdXQ7CiAJCX0KIAkJYXJjbXNyX2ZsdXNoX2FkYXB0ZXJfY2FjaGUoYWNiKTsKIAkJYnJlYWs7CkBAIC0xNzU2LDExICsyMDE3LDE2IEBACiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZhY2ItPmNjYl9mcmVlX2xpc3Q7CiAJc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2sgKmNjYiA9IE5VTEw7Ci0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZhY2ItPmNjYmxpc3RfbG9jaywgZmxhZ3MpOwogCWlmICghbGlzdF9lbXB0eShoZWFkKSkgewogCQljY2IgPSBsaXN0X2VudHJ5KGhlYWQtPm5leHQsIHN0cnVjdCBDb21tYW5kQ29udHJvbEJsb2NrLCBsaXN0KTsKLQkJbGlzdF9kZWwoaGVhZC0+bmV4dCk7CisJCWxpc3RfZGVsX2luaXQoJmNjYi0+bGlzdCk7CisJfWVsc2V7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFjYi0+Y2NibGlzdF9sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOwogCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhY2ItPmNjYmxpc3RfbG9jaywgZmxhZ3MpOwogCXJldHVybiBjY2I7CiB9CiAKQEAgLTE4MjYsODMgKzIwOTIsMjkgQEAKIAljbWQtPnNjc2lfZG9uZSA9IGRvbmU7CiAJY21kLT5ob3N0X3NjcmliYmxlID0gTlVMTDsKIAljbWQtPnJlc3VsdCA9IDA7Ci0KLQlpZiAoKHNjc2ljbWQgPT0gU1lOQ0hST05JWkVfQ0FDSEUpIHx8IChzY3NpY21kID09IFNFTkRfRElBR05PU1RJQykpIHsKLQkJaWYgKGFjYi0+ZGV2c3RhdGVbdGFyZ2V0XVtsdW5dID09IEFSRUNBX1JBSURfR09ORSkgewotCQkJY21kLT5yZXN1bHQgPSAoRElEX05PX0NPTk5FQ1QgPDwgMTYpOworCWlmICgoc2NzaWNtZCA9PSBTWU5DSFJPTklaRV9DQUNIRSkgfHwoc2NzaWNtZCA9PSBTRU5EX0RJQUdOT1NUSUMpKXsKKwkJaWYoYWNiLT5kZXZzdGF0ZVt0YXJnZXRdW2x1bl0gPT0gQVJFQ0FfUkFJRF9HT05FKSB7CisgICAgCQkJY21kLT5yZXN1bHQgPSAoRElEX05PX0NPTk5FQ1QgPDwgMTYpOwogCQl9CiAJCWNtZC0+c2NzaV9kb25lKGNtZCk7CiAJCXJldHVybiAwOwogCX0KLQotCWlmIChhY2ItPmFjYl9mbGFncyAmIEFDQl9GX0JVU19SRVNFVCkgewotCQlzd2l0Y2ggKGFjYi0+YWRhcHRlcl90eXBlKSB7Ci0JCQljYXNlIEFDQl9BREFQVEVSX1RZUEVfQTogewotCQkJCXN0cnVjdCBNZXNzYWdlVW5pdF9BIF9faW9tZW0gKnJlZyA9IGFjYi0+cG11QTsKLQkJCQl1aW50MzJfdCBpbnRtYXNrX29yZywgb3V0Ym91bmRfZG9vcmJlbGw7Ci0KLQkJCQlpZiAoKHJlYWRsKCZyZWctPm91dGJvdW5kX21zZ2FkZHIxKSAmCi0JCQkJCUFSQ01TUl9PVVRCT1VORF9NRVNHMV9GSVJNV0FSRV9PSykgPT0gMCkgewotCQkJCQlwcmludGsoS0VSTl9OT1RJQ0UgImFyY21zciVkOiBidXMgcmVzZXQgYW5kIHJldHVybiBidXN5XG4iLAotCQkJCQkJYWNiLT5ob3N0LT5ob3N0X25vKTsKLQkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7Ci0JfQotCi0JCQkJYWNiLT5hY2JfZmxhZ3MgJj0gfkFDQl9GX0ZJUk1XQVJFX1RSQVA7Ci0JCQkJcHJpbnRrKEtFUk5fTk9USUNFICJhcmNtc3IlZDogaGFyZHdhcmUgYnVzIHJlc2V0IGFuZCByZXNldCBva1xuIiwKLQkJCQkJYWNiLT5ob3N0LT5ob3N0X25vKTsKLQkJCQkvKiBkaXNhYmxlIGFsbCBvdXRib3VuZCBpbnRlcnJ1cHQgKi8KLQkJCQlpbnRtYXNrX29yZyA9IGFyY21zcl9kaXNhYmxlX291dGJvdW5kX2ludHMoYWNiKTsKLQkJCQlhcmNtc3JfZ2V0X2Zpcm13YXJlX3NwZWMoYWNiLCAxKTsKLQkJCQkvKnN0YXJ0IGJhY2tncm91bmQgcmVidWlsZCovCi0JCQkJYXJjbXNyX3N0YXJ0X2FkYXB0ZXJfYmdyYihhY2IpOwotCQkJCS8qIGNsZWFyIFFidWZmZXIgaWYgZG9vciBiZWxsIHJpbmdlZCAqLwotCQkJCW91dGJvdW5kX2Rvb3JiZWxsID0gcmVhZGwoJnJlZy0+b3V0Ym91bmRfZG9vcmJlbGwpOwotCQkJCS8qY2xlYXIgaW50ZXJydXB0ICovCi0JCQkJd3JpdGVsKG91dGJvdW5kX2Rvb3JiZWxsLCAmcmVnLT5vdXRib3VuZF9kb29yYmVsbCk7Ci0JCQkJd3JpdGVsKEFSQ01TUl9JTkJPVU5EX0RSSVZFUl9EQVRBX1JFQURfT0ssCi0JCQkJCSZyZWctPmluYm91bmRfZG9vcmJlbGwpOwotCQkJCS8qIGVuYWJsZSBvdXRib3VuZCBQb3N0IFF1ZXVlLG91dGJvdW5kIGRvb3JiZWxsIEludGVycnVwdCAqLwotCQkJCWFyY21zcl9lbmFibGVfb3V0Ym91bmRfaW50cyhhY2IsIGludG1hc2tfb3JnKTsKLQkJCQlhY2ItPmFjYl9mbGFncyB8PSBBQ0JfRl9JT1BfSU5JVEVEOwotCQkJCWFjYi0+YWNiX2ZsYWdzICY9IH5BQ0JfRl9CVVNfUkVTRVQ7Ci0JCQl9Ci0JCQlicmVhazsKLQkJCWNhc2UgQUNCX0FEQVBURVJfVFlQRV9COiB7Ci0JCQl9Ci0JCX0KLQl9Ci0KIAlpZiAodGFyZ2V0ID09IDE2KSB7CiAJCS8qIHZpcnR1YWwgZGV2aWNlIGZvciBpb3AgbWVzc2FnZSB0cmFuc2ZlciAqLwogCQlhcmNtc3JfaGFuZGxlX3ZpcnR1YWxfY29tbWFuZChhY2IsIGNtZCk7CiAJCXJldHVybiAwOwogCX0KLQlpZiAoYWNiLT5kZXZzdGF0ZVt0YXJnZXRdW2x1bl0gPT0gQVJFQ0FfUkFJRF9HT05FKSB7Ci0JCXVpbnQ4X3QgYmxvY2tfY21kOwotCi0JCWJsb2NrX2NtZCA9IGNtZC0+Y21uZFswXSAmIDB4MGY7Ci0JCWlmIChibG9ja19jbWQgPT0gMHgwOCB8fCBibG9ja19jbWQgPT0gMHgwYSkgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFCi0JCQkJImFyY21zciVkOiBibG9jayAncmVhZC93cml0ZSciCi0JCQkJImNvbW1hbmQgd2l0aCBnb25lIHJhaWQgdm9sdW1lIgotCQkJCSIgQ21kID0gJTJ4LCBUYXJnZXRJZCA9ICVkLCBMdW4gPSAlZCBcbiIKLQkJCQksIGFjYi0+aG9zdC0+aG9zdF9ubwotCQkJCSwgY21kLT5jbW5kWzBdCi0JCQkJLCB0YXJnZXQsIGx1bik7Ci0JCQljbWQtPnJlc3VsdCA9IChESURfTk9fQ09OTkVDVCA8PCAxNik7Ci0JCQljbWQtPnNjc2lfZG9uZShjbWQpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9CiAJaWYgKGF0b21pY19yZWFkKCZhY2ItPmNjYm91dHN0YW5kaW5nY291bnQpID49CiAJCQlBUkNNU1JfTUFYX09VVFNUQU5ESU5HX0NNRCkKIAkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7Ci0KKwlpZiAoKHNjc2ljbWQgPT0gU0NTSV9DTURfQVJFQ0FfU1BFQ0lGSUMpKSB7CisJCXByaW50ayhLRVJOX05PVElDRSAiUmVjZWl2ZWluZyBTQ1NJX0NNRF9BUkVDQV9TUEVDSUZJQyBjb21tYW5kLi5cbiIpOworCQlyZXR1cm4gMDsKKwl9CiAJY2NiID0gYXJjbXNyX2dldF9mcmVlY2NiKGFjYik7CiAJaWYgKCFjY2IpCiAJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwotCWlmICggYXJjbXNyX2J1aWxkX2NjYiggYWNiLCBjY2IsIGNtZCApID09IEZBSUxFRCApIHsKKwlpZiAoYXJjbXNyX2J1aWxkX2NjYiggYWNiLCBjY2IsIGNtZCApID09IEZBSUxFRCkgewogCQljbWQtPnJlc3VsdCA9IChESURfRVJST1IgPDwgMTYpIHwgKFJFU0VSVkFUSU9OX0NPTkZMSUNUIDw8IDEpOwogCQljbWQtPnNjc2lfZG9uZShjbWQpOwogCQlyZXR1cm4gMDsKQEAgLTE5MTEsNyArMjEyMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkICphcmNtc3JfZ2V0X2hiYV9jb25maWcoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYiwgaW50IG1vZGUpCitzdGF0aWMgYm9vbCBhcmNtc3JfZ2V0X2hiYV9jb25maWcoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYikKIHsKIAlzdHJ1Y3QgTWVzc2FnZVVuaXRfQSBfX2lvbWVtICpyZWcgPSBhY2ItPnBtdUE7CiAJY2hhciAqYWNiX2Zpcm1fbW9kZWwgPSBhY2ItPmZpcm1fbW9kZWw7CkBAIC0xOTE5LDE5ICsyMTMxLDE2IEBACiAJY2hhciAqYWNiX2RldmljZV9tYXAgPSBhY2ItPmRldmljZV9tYXA7CiAJY2hhciBfX2lvbWVtICppb3BfZmlybV9tb2RlbCA9IChjaGFyIF9faW9tZW0gKikoJnJlZy0+bWVzc2FnZV9yd2J1ZmZlclsxNV0pOwogCWNoYXIgX19pb21lbSAqaW9wX2Zpcm1fdmVyc2lvbiA9IChjaGFyIF9faW9tZW0gKikoJnJlZy0+bWVzc2FnZV9yd2J1ZmZlclsxN10pOwotCWNoYXIgX19pb21lbSAqaW9wX2RldmljZV9tYXAgPSAoY2hhciBfX2lvbWVtICopICgmcmVnLT5tZXNzYWdlX3J3YnVmZmVyWzIxXSk7CisJY2hhciBfX2lvbWVtICppb3BfZGV2aWNlX21hcCA9IChjaGFyIF9faW9tZW0gKikoJnJlZy0+bWVzc2FnZV9yd2J1ZmZlclsyMV0pOwogCWludCBjb3VudDsKLQogCXdyaXRlbChBUkNNU1JfSU5CT1VORF9NRVNHMF9HRVRfQ09ORklHLCAmcmVnLT5pbmJvdW5kX21zZ2FkZHIwKTsKLQlpZiAoYXJjbXNyX2hiYV93YWl0X21zZ2ludF9yZWFkeShhY2IpKSB7CisJaWYgKCFhcmNtc3JfaGJhX3dhaXRfbXNnaW50X3JlYWR5KGFjYikpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJhcmNtc3IlZDogd2FpdCAnZ2V0IGFkYXB0ZXIgZmlybXdhcmUgXAogCQkJbWlzY2VsbGFuZW91cyBkYXRhJyB0aW1lb3V0IFxuIiwgYWNiLT5ob3N0LT5ob3N0X25vKTsKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiBmYWxzZTsKIAl9Ci0KLQlpZiAobW9kZSA9PSAxKSB7CiAJY291bnQgPSA4OwotCXdoaWxlIChjb3VudCkgeworCXdoaWxlIChjb3VudCl7CiAJCSphY2JfZmlybV9tb2RlbCA9IHJlYWRiKGlvcF9maXJtX21vZGVsKTsKIAkJYWNiX2Zpcm1fbW9kZWwrKzsKIAkJaW9wX2Zpcm1fbW9kZWwrKzsKQEAgLTE5MzksMTM4ICsyMTQ4LDIxMyBAQAogCX0KIAogCWNvdW50ID0gMTY7Ci0Jd2hpbGUgKGNvdW50KSB7CisJd2hpbGUgKGNvdW50KXsKIAkJKmFjYl9maXJtX3ZlcnNpb24gPSByZWFkYihpb3BfZmlybV92ZXJzaW9uKTsKIAkJYWNiX2Zpcm1fdmVyc2lvbisrOwogCQlpb3BfZmlybV92ZXJzaW9uKys7CiAJCWNvdW50LS07CiAJfQogCi0JCWNvdW50ID0gMTY7Ci0JCXdoaWxlIChjb3VudCkgewotCQkJKmFjYl9kZXZpY2VfbWFwID0gcmVhZGIoaW9wX2RldmljZV9tYXApOwotCQkJYWNiX2RldmljZV9tYXArKzsKLQkJCWlvcF9kZXZpY2VfbWFwKys7Ci0JCQljb3VudC0tOwotCQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPIAkiQVJFQ0EgUkFJRCBBREFQVEVSJWQ6IEZJUk1XQVJFIFZFUlNJT04gJXMgXG4iCi0JCSwgYWNiLT5ob3N0LT5ob3N0X25vCi0JCSwgYWNiLT5maXJtX3ZlcnNpb24pOwotCQlhY2ItPnNpZ25hdHVyZSA9IHJlYWRsKCZyZWctPm1lc3NhZ2VfcndidWZmZXJbMF0pOworCWNvdW50PTE2OworCXdoaWxlKGNvdW50KXsKKwkJKmFjYl9kZXZpY2VfbWFwID0gcmVhZGIoaW9wX2RldmljZV9tYXApOworCQlhY2JfZGV2aWNlX21hcCsrOworCQlpb3BfZGV2aWNlX21hcCsrOworCQljb3VudC0tOworCX0KKwlwcmludGsoS0VSTl9OT1RJQ0UgIkFyZWNhIFJBSUQgQ29udHJvbGxlciVkOiBGL1cgJXMgJiBNb2RlbCAlc1xuIiwgCisJCWFjYi0+aG9zdC0+aG9zdF9ubywKKwkJYWNiLT5maXJtX3ZlcnNpb24sCisJCWFjYi0+ZmlybV9tb2RlbCk7CisJYWNiLT5zaWduYXR1cmUgPSByZWFkbCgmcmVnLT5tZXNzYWdlX3J3YnVmZmVyWzBdKTsKIAlhY2ItPmZpcm1fcmVxdWVzdF9sZW4gPSByZWFkbCgmcmVnLT5tZXNzYWdlX3J3YnVmZmVyWzFdKTsKIAlhY2ItPmZpcm1fbnVtYmVyc19xdWV1ZSA9IHJlYWRsKCZyZWctPm1lc3NhZ2VfcndidWZmZXJbMl0pOwogCWFjYi0+ZmlybV9zZHJhbV9zaXplID0gcmVhZGwoJnJlZy0+bWVzc2FnZV9yd2J1ZmZlclszXSk7CiAJYWNiLT5maXJtX2hkX2NoYW5uZWxzID0gcmVhZGwoJnJlZy0+bWVzc2FnZV9yd2J1ZmZlcls0XSk7CisJYWNiLT5maXJtX2NmZ192ZXJzaW9uID0gcmVhZGwoJnJlZy0+bWVzc2FnZV9yd2J1ZmZlclsyNV0pOyAgLypmaXJtX2NmZ192ZXJzaW9uLDI1LDEwMC0xMDMqLworCXJldHVybiB0cnVlOwogfQotCXJldHVybiByZWctPm1lc3NhZ2VfcndidWZmZXI7Ci19Ci1zdGF0aWMgdm9pZCBfX2lvbWVtICphcmNtc3JfZ2V0X2hiYl9jb25maWcoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYiwgaW50IG1vZGUpCitzdGF0aWMgYm9vbCBhcmNtc3JfZ2V0X2hiYl9jb25maWcoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYikKIHsKIAlzdHJ1Y3QgTWVzc2FnZVVuaXRfQiAqcmVnID0gYWNiLT5wbXVCOwotCXVpbnQzMl90IF9faW9tZW0gKmxyd2J1ZmZlciA9IHJlZy0+bXNnY29kZV9yd2J1ZmZlcl9yZWc7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhY2ItPnBkZXY7CisJdm9pZCAqZG1hX2NvaGVyZW50OworCWRtYV9hZGRyX3QgZG1hX2NvaGVyZW50X2hhbmRsZTsKIAljaGFyICphY2JfZmlybV9tb2RlbCA9IGFjYi0+ZmlybV9tb2RlbDsKIAljaGFyICphY2JfZmlybV92ZXJzaW9uID0gYWNiLT5maXJtX3ZlcnNpb247CiAJY2hhciAqYWNiX2RldmljZV9tYXAgPSBhY2ItPmRldmljZV9tYXA7Ci0JY2hhciBfX2lvbWVtICppb3BfZmlybV9tb2RlbCA9IChjaGFyIF9faW9tZW0gKikoJmxyd2J1ZmZlclsxNV0pOworCWNoYXIgX19pb21lbSAqaW9wX2Zpcm1fbW9kZWw7CiAJLypmaXJtX21vZGVsLDE1LDYwLTY3Ki8KLQljaGFyIF9faW9tZW0gKmlvcF9maXJtX3ZlcnNpb24gPSAoY2hhciBfX2lvbWVtICopKCZscndidWZmZXJbMTddKTsKKwljaGFyIF9faW9tZW0gKmlvcF9maXJtX3ZlcnNpb247CiAJLypmaXJtX3ZlcnNpb24sMTcsNjgtODMqLwotCWNoYXIgX19pb21lbSAqaW9wX2RldmljZV9tYXAgPSAoY2hhciBfX2lvbWVtICopICgmbHJ3YnVmZmVyWzIxXSk7CisJY2hhciBfX2lvbWVtICppb3BfZGV2aWNlX21hcDsKIAkvKmZpcm1fdmVyc2lvbiwyMSw4NC05OSovCiAJaW50IGNvdW50OworCWRtYV9jb2hlcmVudCA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IE1lc3NhZ2VVbml0X0IpLCAmZG1hX2NvaGVyZW50X2hhbmRsZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkbWFfY29oZXJlbnQpeworCQlwcmludGsoS0VSTl9OT1RJQ0UgImFyY21zciVkOiBkbWFfYWxsb2NfY29oZXJlbnQgZ290IGVycm9yIGZvciBoYmIgbXVcbiIsIGFjYi0+aG9zdC0+aG9zdF9ubyk7CisJCXJldHVybiBmYWxzZTsKKwl9CisJYWNiLT5kbWFfY29oZXJlbnRfaGFuZGxlX2hiYl9tdSA9IGRtYV9jb2hlcmVudF9oYW5kbGU7CisJcmVnID0gKHN0cnVjdCBNZXNzYWdlVW5pdF9CICopZG1hX2NvaGVyZW50OworCWFjYi0+cG11QiA9IHJlZzsKKwlyZWctPmRydjJpb3BfZG9vcmJlbGw9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1bnNpZ25lZCBsb25nKWFjYi0+bWVtX2Jhc2UwICsgQVJDTVNSX0RSVjJJT1BfRE9PUkJFTEwpOworCXJlZy0+ZHJ2MmlvcF9kb29yYmVsbF9tYXNrID0gKHVpbnQzMl90IF9faW9tZW0gKikoKHVuc2lnbmVkIGxvbmcpYWNiLT5tZW1fYmFzZTAgKyBBUkNNU1JfRFJWMklPUF9ET09SQkVMTF9NQVNLKTsKKwlyZWctPmlvcDJkcnZfZG9vcmJlbGwgPSAodWludDMyX3QgX19pb21lbSAqKSgodW5zaWduZWQgbG9uZylhY2ItPm1lbV9iYXNlMCArIEFSQ01TUl9JT1AyRFJWX0RPT1JCRUxMKTsKKwlyZWctPmlvcDJkcnZfZG9vcmJlbGxfbWFzayA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1bnNpZ25lZCBsb25nKWFjYi0+bWVtX2Jhc2UwICsgQVJDTVNSX0lPUDJEUlZfRE9PUkJFTExfTUFTSyk7CisJcmVnLT5tZXNzYWdlX3didWZmZXIgPSAodWludDMyX3QgX19pb21lbSAqKSgodW5zaWduZWQgbG9uZylhY2ItPm1lbV9iYXNlMSArIEFSQ01TUl9NRVNTQUdFX1dCVUZGRVIpOworCXJlZy0+bWVzc2FnZV9yYnVmZmVyID0gICh1aW50MzJfdCBfX2lvbWVtICopKCh1bnNpZ25lZCBsb25nKWFjYi0+bWVtX2Jhc2UxICsgQVJDTVNSX01FU1NBR0VfUkJVRkZFUik7CisJcmVnLT5tZXNzYWdlX3J3YnVmZmVyID0gKHVpbnQzMl90IF9faW9tZW0gKikoKHVuc2lnbmVkIGxvbmcpYWNiLT5tZW1fYmFzZTEgKyBBUkNNU1JfTUVTU0FHRV9SV0JVRkZFUik7CisJaW9wX2Zpcm1fbW9kZWwgPSAoY2hhciBfX2lvbWVtICopKCZyZWctPm1lc3NhZ2VfcndidWZmZXJbMTVdKTsJLypmaXJtX21vZGVsLDE1LDYwLTY3Ki8KKwlpb3BfZmlybV92ZXJzaW9uID0gKGNoYXIgX19pb21lbSAqKSgmcmVnLT5tZXNzYWdlX3J3YnVmZmVyWzE3XSk7CS8qZmlybV92ZXJzaW9uLDE3LDY4LTgzKi8KKwlpb3BfZGV2aWNlX21hcCA9IChjaGFyIF9faW9tZW0gKikoJnJlZy0+bWVzc2FnZV9yd2J1ZmZlclsyMV0pOwkvKmZpcm1fdmVyc2lvbiwyMSw4NC05OSovCiAKLQl3cml0ZWwoQVJDTVNSX01FU1NBR0VfR0VUX0NPTkZJRywgcmVnLT5kcnYyaW9wX2Rvb3JiZWxsX3JlZyk7Ci0JaWYgKGFyY21zcl9oYmJfd2FpdF9tc2dpbnRfcmVhZHkoYWNiKSkgeworCXdyaXRlbChBUkNNU1JfTUVTU0FHRV9HRVRfQ09ORklHLCByZWctPmRydjJpb3BfZG9vcmJlbGwpOworCWlmICghYXJjbXNyX2hiYl93YWl0X21zZ2ludF9yZWFkeShhY2IpKSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAiYXJjbXNyJWQ6IHdhaXQgJ2dldCBhZGFwdGVyIGZpcm13YXJlIFwKIAkJCW1pc2NlbGxhbmVvdXMgZGF0YScgdGltZW91dCBcbiIsIGFjYi0+aG9zdC0+aG9zdF9ubyk7Ci0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gZmFsc2U7CiAJfQotCi0JaWYgKG1vZGUgPT0gMSkgewogCWNvdW50ID0gODsKLQl3aGlsZSAoY291bnQpCi0JeworCXdoaWxlIChjb3VudCl7CiAJCSphY2JfZmlybV9tb2RlbCA9IHJlYWRiKGlvcF9maXJtX21vZGVsKTsKIAkJYWNiX2Zpcm1fbW9kZWwrKzsKIAkJaW9wX2Zpcm1fbW9kZWwrKzsKIAkJY291bnQtLTsKIAl9Ci0KIAljb3VudCA9IDE2OwotCXdoaWxlIChjb3VudCkKLQl7CisJd2hpbGUgKGNvdW50KXsKIAkJKmFjYl9maXJtX3ZlcnNpb24gPSByZWFkYihpb3BfZmlybV92ZXJzaW9uKTsKIAkJYWNiX2Zpcm1fdmVyc2lvbisrOwogCQlpb3BfZmlybV92ZXJzaW9uKys7CiAJCWNvdW50LS07CiAJfQogCi0JCWNvdW50ID0gMTY7Ci0JCXdoaWxlIChjb3VudCkgewotCQkJKmFjYl9kZXZpY2VfbWFwID0gcmVhZGIoaW9wX2RldmljZV9tYXApOwotCQkJYWNiX2RldmljZV9tYXArKzsKLQkJCWlvcF9kZXZpY2VfbWFwKys7Ci0JCQljb3VudC0tOwotCQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICJBUkVDQSBSQUlEIEFEQVBURVIlZDogRklSTVdBUkUgVkVSU0lPTiAlcyBcbiIsCi0JCQlhY2ItPmhvc3QtPmhvc3Rfbm8sCi0JCQlhY2ItPmZpcm1fdmVyc2lvbik7Ci0KLQkJYWNiLT5zaWduYXR1cmUgPSByZWFkbChscndidWZmZXIrKyk7Ci0JCS8qZmlybV9zaWduYXR1cmUsMSwwMC0wMyovCi0JYWNiLT5maXJtX3JlcXVlc3RfbGVuID0gcmVhZGwobHJ3YnVmZmVyKyspOwotCS8qZmlybV9yZXF1ZXN0X2xlbiwxLDA0LTA3Ki8KLQlhY2ItPmZpcm1fbnVtYmVyc19xdWV1ZSA9IHJlYWRsKGxyd2J1ZmZlcisrKTsKLQkvKmZpcm1fbnVtYmVyc19xdWV1ZSwyLDA4LTExKi8KLQlhY2ItPmZpcm1fc2RyYW1fc2l6ZSA9IHJlYWRsKGxyd2J1ZmZlcisrKTsKLQkvKmZpcm1fc2RyYW1fc2l6ZSwzLDEyLTE1Ki8KLQlhY2ItPmZpcm1faGRfY2hhbm5lbHMgPSByZWFkbChscndidWZmZXIpOwotCS8qZmlybV9pZGVfY2hhbm5lbHMsNCwxNi0xOSovCi19Ci0JcmV0dXJuIHJlZy0+bXNnY29kZV9yd2J1ZmZlcl9yZWc7Ci19Ci1zdGF0aWMgdm9pZCAqYXJjbXNyX2dldF9maXJtd2FyZV9zcGVjKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IsIGludCBtb2RlKQotewotCXZvaWQgKnJ0bnZhbCA9IDA7Ci0Jc3dpdGNoIChhY2ItPmFkYXB0ZXJfdHlwZSkgewotCWNhc2UgQUNCX0FEQVBURVJfVFlQRV9BOiB7Ci0JCXJ0bnZhbCA9IGFyY21zcl9nZXRfaGJhX2NvbmZpZyhhY2IsIG1vZGUpOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0I6IHsKLQkJcnRudmFsID0gYXJjbXNyX2dldF9oYmJfY29uZmlnKGFjYiwgbW9kZSk7Ci0JCX0KLQkJYnJlYWs7CisJY291bnQgPSAxNjsKKwl3aGlsZShjb3VudCl7CisJCSphY2JfZGV2aWNlX21hcCA9IHJlYWRiKGlvcF9kZXZpY2VfbWFwKTsKKwkJYWNiX2RldmljZV9tYXArKzsKKwkJaW9wX2RldmljZV9tYXArKzsKKwkJY291bnQtLTsKIAl9Ci0JcmV0dXJuIHJ0bnZhbDsKKwkKKwlwcmludGsoS0VSTl9OT1RJQ0UgIkFyZWNhIFJBSUQgQ29udHJvbGxlciVkOiBGL1cgJXMgJiBNb2RlbCAlc1xuIiwKKwkJYWNiLT5ob3N0LT5ob3N0X25vLAorCQlhY2ItPmZpcm1fdmVyc2lvbiwKKwkJYWNiLT5maXJtX21vZGVsKTsKKworCWFjYi0+c2lnbmF0dXJlID0gcmVhZGwoJnJlZy0+bWVzc2FnZV9yd2J1ZmZlclsxXSk7CisJLypmaXJtX3NpZ25hdHVyZSwxLDAwLTAzKi8KKwlhY2ItPmZpcm1fcmVxdWVzdF9sZW4gPSByZWFkbCgmcmVnLT5tZXNzYWdlX3J3YnVmZmVyWzJdKTsKKwkvKmZpcm1fcmVxdWVzdF9sZW4sMSwwNC0wNyovCisJYWNiLT5maXJtX251bWJlcnNfcXVldWUgPSByZWFkbCgmcmVnLT5tZXNzYWdlX3J3YnVmZmVyWzNdKTsKKwkvKmZpcm1fbnVtYmVyc19xdWV1ZSwyLDA4LTExKi8KKwlhY2ItPmZpcm1fc2RyYW1fc2l6ZSA9IHJlYWRsKCZyZWctPm1lc3NhZ2VfcndidWZmZXJbNF0pOworCS8qZmlybV9zZHJhbV9zaXplLDMsMTItMTUqLworCWFjYi0+ZmlybV9oZF9jaGFubmVscyA9IHJlYWRsKCZyZWctPm1lc3NhZ2VfcndidWZmZXJbNV0pOworCS8qZmlybV9pZGVfY2hhbm5lbHMsNCwxNi0xOSovCisJYWNiLT5maXJtX2NmZ192ZXJzaW9uID0gcmVhZGwoJnJlZy0+bWVzc2FnZV9yd2J1ZmZlclsyNV0pOyAgLypmaXJtX2NmZ192ZXJzaW9uLDI1LDEwMC0xMDMqLworCS8qZmlybV9pZGVfY2hhbm5lbHMsNCwxNi0xOSovCisJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIGFyY21zcl9wb2xsaW5nX2hiYV9jY2Jkb25lKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IsCitzdGF0aWMgYm9vbCBhcmNtc3JfZ2V0X2hiY19jb25maWcoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKnBBQ0IpCit7CisJdWludDMyX3QgaW50bWFza19vcmcsIEluZGV4LCBmaXJtd2FyZV9zdGF0ZSA9IDA7CisJc3RydWN0IE1lc3NhZ2VVbml0X0MgKnJlZyA9IHBBQ0ItPnBtdUM7CisJY2hhciAqYWNiX2Zpcm1fbW9kZWwgPSBwQUNCLT5maXJtX21vZGVsOworCWNoYXIgKmFjYl9maXJtX3ZlcnNpb24gPSBwQUNCLT5maXJtX3ZlcnNpb247CisJY2hhciAqaW9wX2Zpcm1fbW9kZWwgPSAoY2hhciAqKSgmcmVnLT5tc2djb2RlX3J3YnVmZmVyWzE1XSk7ICAgIC8qZmlybV9tb2RlbCwxNSw2MC02NyovCisJY2hhciAqaW9wX2Zpcm1fdmVyc2lvbiA9IChjaGFyICopKCZyZWctPm1zZ2NvZGVfcndidWZmZXJbMTddKTsgIC8qZmlybV92ZXJzaW9uLDE3LDY4LTgzKi8KKwlpbnQgY291bnQ7CisJLyogZGlzYWJsZSBhbGwgb3V0Ym91bmQgaW50ZXJydXB0ICovCisJaW50bWFza19vcmcgPSByZWFkbCgmcmVnLT5ob3N0X2ludF9tYXNrKTsgLyogZGlzYWJsZSBvdXRib3VuZCBtZXNzYWdlMCBpbnQgKi8KKwl3cml0ZWwoaW50bWFza19vcmd8QVJDTVNSX0hCQ01VX0FMTF9JTlRNQVNLRU5BQkxFLCAmcmVnLT5ob3N0X2ludF9tYXNrKTsKKwkvKiB3YWl0IGZpcm13YXJlIHJlYWR5ICovCisJZG8geworCQlmaXJtd2FyZV9zdGF0ZSA9IHJlYWRsKCZyZWctPm91dGJvdW5kX21zZ2FkZHIxKTsKKwl9IHdoaWxlICgoZmlybXdhcmVfc3RhdGUgJiBBUkNNU1JfSEJDTVVfTUVTU0FHRV9GSVJNV0FSRV9PSykgPT0gMCk7CisJLyogcG9zdCAiZ2V0IGNvbmZpZyIgaW5zdHJ1Y3Rpb24gKi8KKwl3cml0ZWwoQVJDTVNSX0lOQk9VTkRfTUVTRzBfR0VUX0NPTkZJRywgJnJlZy0+aW5ib3VuZF9tc2dhZGRyMCk7CisJd3JpdGVsKEFSQ01TUl9IQkNNVV9EUlYySU9QX01FU1NBR0VfQ01EX0RPTkUsICZyZWctPmluYm91bmRfZG9vcmJlbGwpOworCS8qIHdhaXQgbWVzc2FnZSByZWFkeSAqLworCWZvciAoSW5kZXggPSAwOyBJbmRleCA8IDIwMDA7IEluZGV4KyspIHsKKwkJaWYgKHJlYWRsKCZyZWctPm91dGJvdW5kX2Rvb3JiZWxsKSAmIEFSQ01TUl9IQkNNVV9JT1AyRFJWX01FU1NBR0VfQ01EX0RPTkUpIHsKKwkJCXdyaXRlbChBUkNNU1JfSEJDTVVfSU9QMkRSVl9NRVNTQUdFX0NNRF9ET05FX0RPT1JCRUxMX0NMRUFSLCAmcmVnLT5vdXRib3VuZF9kb29yYmVsbF9jbGVhcik7LypjbGVhciBpbnRlcnJ1cHQqLworCQkJYnJlYWs7CisJCX0KKwkJdWRlbGF5KDEwKTsKKwl9IC8qbWF4IDEgc2Vjb25kcyovCisJaWYgKEluZGV4ID49IDIwMDApIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJhcmNtc3IlZDogd2FpdCAnZ2V0IGFkYXB0ZXIgZmlybXdhcmUgXAorCQkJbWlzY2VsbGFuZW91cyBkYXRhJyB0aW1lb3V0IFxuIiwgcEFDQi0+aG9zdC0+aG9zdF9ubyk7CisJCXJldHVybiBmYWxzZTsKKwl9CisJY291bnQgPSA4OworCXdoaWxlIChjb3VudCkgeworCQkqYWNiX2Zpcm1fbW9kZWwgPSByZWFkYihpb3BfZmlybV9tb2RlbCk7CisJCWFjYl9maXJtX21vZGVsKys7CisJCWlvcF9maXJtX21vZGVsKys7CisJCWNvdW50LS07CisJfQorCWNvdW50ID0gMTY7CisJd2hpbGUgKGNvdW50KSB7CisJCSphY2JfZmlybV92ZXJzaW9uID0gcmVhZGIoaW9wX2Zpcm1fdmVyc2lvbik7CisJCWFjYl9maXJtX3ZlcnNpb24rKzsKKwkJaW9wX2Zpcm1fdmVyc2lvbisrOworCQljb3VudC0tOworCX0KKwlwcmludGsoS0VSTl9OT1RJQ0UgIkFyZWNhIFJBSUQgQ29udHJvbGxlciVkOiBGL1cgJXMgJiBNb2RlbCAlc1xuIiwKKwkJcEFDQi0+aG9zdC0+aG9zdF9ubywKKwkJcEFDQi0+ZmlybV92ZXJzaW9uLAorCQlwQUNCLT5maXJtX21vZGVsKTsKKwlwQUNCLT5maXJtX3JlcXVlc3RfbGVuID0gcmVhZGwoJnJlZy0+bXNnY29kZV9yd2J1ZmZlclsxXSk7ICAgLypmaXJtX3JlcXVlc3RfbGVuLDEsMDQtMDcqLworCXBBQ0ItPmZpcm1fbnVtYmVyc19xdWV1ZSA9IHJlYWRsKCZyZWctPm1zZ2NvZGVfcndidWZmZXJbMl0pOyAvKmZpcm1fbnVtYmVyc19xdWV1ZSwyLDA4LTExKi8KKwlwQUNCLT5maXJtX3NkcmFtX3NpemUgPSByZWFkbCgmcmVnLT5tc2djb2RlX3J3YnVmZmVyWzNdKTsgICAgLypmaXJtX3NkcmFtX3NpemUsMywxMi0xNSovCisJcEFDQi0+ZmlybV9oZF9jaGFubmVscyA9IHJlYWRsKCZyZWctPm1zZ2NvZGVfcndidWZmZXJbNF0pOyAgLypmaXJtX2lkZV9jaGFubmVscyw0LDE2LTE5Ki8KKwlwQUNCLT5maXJtX2NmZ192ZXJzaW9uID0gcmVhZGwoJnJlZy0+bXNnY29kZV9yd2J1ZmZlclsyNV0pOyAgLypmaXJtX2NmZ192ZXJzaW9uLDI1LDEwMC0xMDMqLworCS8qYWxsIGludGVycnVwdCBzZXJ2aWNlIHdpbGwgYmUgZW5hYmxlIGF0IGFyY21zcl9pb3BfaW5pdCovCisJcmV0dXJuIHRydWU7Cit9CitzdGF0aWMgYm9vbCBhcmNtc3JfZ2V0X2Zpcm13YXJlX3NwZWMoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYikKK3sKKwlpZiAoYWNiLT5hZGFwdGVyX3R5cGUgPT0gQUNCX0FEQVBURVJfVFlQRV9BKQorCQlyZXR1cm4gYXJjbXNyX2dldF9oYmFfY29uZmlnKGFjYik7CisJZWxzZSBpZiAoYWNiLT5hZGFwdGVyX3R5cGUgPT0gQUNCX0FEQVBURVJfVFlQRV9CKQorCQlyZXR1cm4gYXJjbXNyX2dldF9oYmJfY29uZmlnKGFjYik7CisJZWxzZQorCQlyZXR1cm4gYXJjbXNyX2dldF9oYmNfY29uZmlnKGFjYik7Cit9CisKK3N0YXRpYyBpbnQgYXJjbXNyX3BvbGxpbmdfaGJhX2NjYmRvbmUoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYiwKIAlzdHJ1Y3QgQ29tbWFuZENvbnRyb2xCbG9jayAqcG9sbF9jY2IpCiB7CiAJc3RydWN0IE1lc3NhZ2VVbml0X0EgX19pb21lbSAqcmVnID0gYWNiLT5wbXVBOwogCXN0cnVjdCBDb21tYW5kQ29udHJvbEJsb2NrICpjY2I7CisJc3RydWN0IEFSQ01TUl9DREIgKmFyY21zcl9jZGI7CiAJdWludDMyX3QgZmxhZ19jY2IsIG91dGJvdW5kX2ludHN0YXR1cywgcG9sbF9jY2JfZG9uZSA9IDAsIHBvbGxfY291bnQgPSAwOwotCisJaW50IHJ0bjsKKwlib29sIGVycm9yOwogCXBvbGxpbmdfaGJhX2NjYl9yZXRyeToKIAlwb2xsX2NvdW50Kys7CiAJb3V0Ym91bmRfaW50c3RhdHVzID0gcmVhZGwoJnJlZy0+b3V0Ym91bmRfaW50c3RhdHVzKSAmIGFjYi0+b3V0Ym91bmRfaW50X2VuYWJsZTsKIAl3cml0ZWwob3V0Ym91bmRfaW50c3RhdHVzLCAmcmVnLT5vdXRib3VuZF9pbnRzdGF0dXMpOy8qY2xlYXIgaW50ZXJydXB0Ki8KIAl3aGlsZSAoMSkgewogCQlpZiAoKGZsYWdfY2NiID0gcmVhZGwoJnJlZy0+b3V0Ym91bmRfcXVldWVwb3J0KSkgPT0gMHhGRkZGRkZGRikgewotCQkJaWYgKHBvbGxfY2NiX2RvbmUpCisJCQlpZiAocG9sbF9jY2JfZG9uZSl7CisJCQkJcnRuID0gU1VDQ0VTUzsKIAkJCQlicmVhazsKLQkJCWVsc2UgeworCQkJfWVsc2UgewogCQkJCW1zbGVlcCgyNSk7Ci0JCQkJaWYgKHBvbGxfY291bnQgPiAxMDApCisJCQkJaWYgKHBvbGxfY291bnQgPiAxMDApeworCQkJCQlydG4gPSBGQUlMRUQ7CiAJCQkJCWJyZWFrOworCQkJCX0KIAkJCQlnb3RvIHBvbGxpbmdfaGJhX2NjYl9yZXRyeTsKIAkJCX0KIAkJfQotCQljY2IgPSAoc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2sgKikoYWNiLT52aXIycGh5X29mZnNldCArIChmbGFnX2NjYiA8PCA1KSk7CisJCWFyY21zcl9jZGIgPSAoc3RydWN0IEFSQ01TUl9DREIgKikoYWNiLT52aXIycGh5X29mZnNldCArIChmbGFnX2NjYiA8PCA1KSk7CisJCWNjYiA9IGNvbnRhaW5lcl9vZihhcmNtc3JfY2RiLCBzdHJ1Y3QgQ29tbWFuZENvbnRyb2xCbG9jaywgYXJjbXNyX2NkYik7CiAJCXBvbGxfY2NiX2RvbmUgPSAoY2NiID09IHBvbGxfY2NiKSA/IDE6MDsKIAkJaWYgKChjY2ItPmFjYiAhPSBhY2IpIHx8IChjY2ItPnN0YXJ0ZG9uZSAhPSBBUkNNU1JfQ0NCX1NUQVJUKSkgewogCQkJaWYgKChjY2ItPnN0YXJ0ZG9uZSA9PSBBUkNNU1JfQ0NCX0FCT1JURUQpIHx8IChjY2IgPT0gcG9sbF9jY2IpKSB7CkBAIC0yMDgxLDggKzIzNjUsNyBAQAogCQkJCQksIGNjYi0+cGNtZC0+ZGV2aWNlLT5sdW4KIAkJCQkJLCBjY2IpOwogCQkJCWNjYi0+cGNtZC0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OwotCQkJCWFyY21zcl9jY2JfY29tcGxldGUoY2NiLCAxKTsKLQkJCQlwb2xsX2NjYl9kb25lID0gMTsKKwkJCQlhcmNtc3JfY2NiX2NvbXBsZXRlKGNjYik7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgImFyY21zciVkOiBwb2xsaW5nIGdldCBhbiBpbGxlZ2FsIGNjYiIKQEAgLTIwOTMsODYgKzIzNzYsMTU2IEBACiAJCQkJLCBhdG9taWNfcmVhZCgmYWNiLT5jY2JvdXRzdGFuZGluZ2NvdW50KSk7CiAJCQljb250aW51ZTsKIAkJfQotCQlhcmNtc3JfcmVwb3J0X2NjYl9zdGF0ZShhY2IsIGNjYiwgZmxhZ19jY2IpOworCQllcnJvciA9IChmbGFnX2NjYiAmIEFSQ01TUl9DQ0JSRVBMWV9GTEFHX0VSUk9SX01PREUwKSA/IHRydWUgOiBmYWxzZTsKKwkJYXJjbXNyX3JlcG9ydF9jY2Jfc3RhdGUoYWNiLCBjY2IsIGVycm9yKTsKIAl9CisJcmV0dXJuIHJ0bjsKIH0KIAotc3RhdGljIHZvaWQgYXJjbXNyX3BvbGxpbmdfaGJiX2NjYmRvbmUoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYiwKK3N0YXRpYyBpbnQgYXJjbXNyX3BvbGxpbmdfaGJiX2NjYmRvbmUoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYiwKIAkJCQkJc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2sgKnBvbGxfY2NiKQogewotCQlzdHJ1Y3QgTWVzc2FnZVVuaXRfQiAqcmVnID0gYWNiLT5wbXVCOwotCQlzdHJ1Y3QgQ29tbWFuZENvbnRyb2xCbG9jayAqY2NiOwotCQl1aW50MzJfdCBmbGFnX2NjYiwgcG9sbF9jY2JfZG9uZSA9IDAsIHBvbGxfY291bnQgPSAwOwotCQlpbnQgaW5kZXg7Ci0KKwlzdHJ1Y3QgTWVzc2FnZVVuaXRfQiAqcmVnID0gYWNiLT5wbXVCOworCXN0cnVjdCBBUkNNU1JfQ0RCICphcmNtc3JfY2RiOworCXN0cnVjdCBDb21tYW5kQ29udHJvbEJsb2NrICpjY2I7CisJdWludDMyX3QgZmxhZ19jY2IsIHBvbGxfY2NiX2RvbmUgPSAwLCBwb2xsX2NvdW50ID0gMDsKKwlpbnQgaW5kZXgsIHJ0bjsKKwlib29sIGVycm9yOwogCXBvbGxpbmdfaGJiX2NjYl9yZXRyeToKLQkJcG9sbF9jb3VudCsrOwotCQkvKiBjbGVhciBkb29yYmVsbCBpbnRlcnJ1cHQgKi8KLQkJd3JpdGVsKEFSQ01TUl9ET09SQkVMTF9JTlRfQ0xFQVJfUEFUVEVSTiwgcmVnLT5pb3AyZHJ2X2Rvb3JiZWxsX3JlZyk7Ci0JCXdoaWxlICgxKSB7Ci0JCQlpbmRleCA9IHJlZy0+ZG9uZXFfaW5kZXg7Ci0JCQlpZiAoKGZsYWdfY2NiID0gcmVhZGwoJnJlZy0+ZG9uZV9xYnVmZmVyW2luZGV4XSkpID09IDApIHsKLQkJCQlpZiAocG9sbF9jY2JfZG9uZSkKKwlwb2xsX2NvdW50Kys7CisJLyogY2xlYXIgZG9vcmJlbGwgaW50ZXJydXB0ICovCisJd3JpdGVsKEFSQ01TUl9ET09SQkVMTF9JTlRfQ0xFQVJfUEFUVEVSTiwgcmVnLT5pb3AyZHJ2X2Rvb3JiZWxsKTsKKwl3aGlsZSgxKXsKKwkJaW5kZXggPSByZWctPmRvbmVxX2luZGV4OworCQlpZiAoKGZsYWdfY2NiID0gcmVhZGwoJnJlZy0+ZG9uZV9xYnVmZmVyW2luZGV4XSkpID09IDApIHsKKwkJCWlmIChwb2xsX2NjYl9kb25lKXsKKwkJCQlydG4gPSBTVUNDRVNTOworCQkJCWJyZWFrOworCQkJfWVsc2UgeworCQkJCW1zbGVlcCgyNSk7CisJCQkJaWYgKHBvbGxfY291bnQgPiAxMDApeworCQkJCQlydG4gPSBGQUlMRUQ7CiAJCQkJCWJyZWFrOwotCQkJCWVsc2UgewotCQkJCQltc2xlZXAoMjUpOwotCQkJCQlpZiAocG9sbF9jb3VudCA+IDEwMCkKLQkJCQkJCWJyZWFrOwotCQkJCQlnb3RvIHBvbGxpbmdfaGJiX2NjYl9yZXRyeTsKIAkJCQl9CisJCQkJZ290byBwb2xsaW5nX2hiYl9jY2JfcmV0cnk7CiAJCQl9Ci0JCQl3cml0ZWwoMCwgJnJlZy0+ZG9uZV9xYnVmZmVyW2luZGV4XSk7Ci0JCQlpbmRleCsrOwotCQkJLyppZiBsYXN0IGluZGV4IG51bWJlciBzZXQgaXQgdG8gMCAqLwotCQkJaW5kZXggJT0gQVJDTVNSX01BWF9IQkJfUE9TVFFVRVVFOwotCQkJcmVnLT5kb25lcV9pbmRleCA9IGluZGV4OwotCQkJLyogY2hlY2sgaWZjb21tYW5kIGRvbmUgd2l0aCBubyBlcnJvciovCi0JCQljY2IgPSAoc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2sgKilcCi0gICAgICAoYWNiLT52aXIycGh5X29mZnNldCArIChmbGFnX2NjYiA8PCA1KSk7LypmcmFtZSBtdXN0IGJlIDMyIGJ5dGVzIGFsaWduZWQqLwotCQkJcG9sbF9jY2JfZG9uZSA9IChjY2IgPT0gcG9sbF9jY2IpID8gMTowOwotCQkJaWYgKChjY2ItPmFjYiAhPSBhY2IpIHx8IChjY2ItPnN0YXJ0ZG9uZSAhPSBBUkNNU1JfQ0NCX1NUQVJUKSkgewotCQkJCWlmICgoY2NiLT5zdGFydGRvbmUgPT0gQVJDTVNSX0NDQl9BQk9SVEVEKSB8fCAoY2NiID09IHBvbGxfY2NiKSkgewotCQkJCQlwcmludGsoS0VSTl9OT1RJQ0UgImFyY21zciVkOiBcCi0JCXNjc2kgaWQgPSAlZCBsdW4gPSAlZCBjY2IgPSAnMHglcCcgcG9sbCBjb21tYW5kIGFib3J0IHN1Y2Nlc3NmdWxseSBcbiIKLQkJCQkJCSxhY2ItPmhvc3QtPmhvc3Rfbm8KLQkJCQkJCSxjY2ItPnBjbWQtPmRldmljZS0+aWQKLQkJCQkJCSxjY2ItPnBjbWQtPmRldmljZS0+bHVuCi0JCQkJCQksY2NiKTsKLQkJCQkJY2NiLT5wY21kLT5yZXN1bHQgPSBESURfQUJPUlQgPDwgMTY7Ci0JCQkJCWFyY21zcl9jY2JfY29tcGxldGUoY2NiLCAxKTsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCXByaW50ayhLRVJOX05PVElDRSAiYXJjbXNyJWQ6IHBvbGxpbmcgZ2V0IGFuIGlsbGVnYWwgY2NiIgotCQkJCQkiIGNvbW1hbmQgZG9uZSBjY2IgPSAnMHglcCciCi0JCQkJCSJjY2JvdXRzdGFuZGluZ2NvdW50ID0gJWQgXG4iCi0JCQkJCSwgYWNiLT5ob3N0LT5ob3N0X25vCi0JCQkJCSwgY2NiCi0JCQkJCSwgYXRvbWljX3JlYWQoJmFjYi0+Y2Nib3V0c3RhbmRpbmdjb3VudCkpOworCQl9CisJCXdyaXRlbCgwLCAmcmVnLT5kb25lX3FidWZmZXJbaW5kZXhdKTsKKwkJaW5kZXgrKzsKKwkJLyppZiBsYXN0IGluZGV4IG51bWJlciBzZXQgaXQgdG8gMCAqLworCQlpbmRleCAlPSBBUkNNU1JfTUFYX0hCQl9QT1NUUVVFVUU7CisJCXJlZy0+ZG9uZXFfaW5kZXggPSBpbmRleDsKKwkJLyogY2hlY2sgaWYgY29tbWFuZCBkb25lIHdpdGggbm8gZXJyb3IqLworCQlhcmNtc3JfY2RiID0gKHN0cnVjdCBBUkNNU1JfQ0RCICopKGFjYi0+dmlyMnBoeV9vZmZzZXQgKyAoZmxhZ19jY2IgPDwgNSkpOworCQljY2IgPSBjb250YWluZXJfb2YoYXJjbXNyX2NkYiwgc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2ssIGFyY21zcl9jZGIpOworCQlwb2xsX2NjYl9kb25lID0gKGNjYiA9PSBwb2xsX2NjYikgPyAxOjA7CisJCWlmICgoY2NiLT5hY2IgIT0gYWNiKSB8fCAoY2NiLT5zdGFydGRvbmUgIT0gQVJDTVNSX0NDQl9TVEFSVCkpIHsKKwkJCWlmICgoY2NiLT5zdGFydGRvbmUgPT0gQVJDTVNSX0NDQl9BQk9SVEVEKSB8fCAoY2NiID09IHBvbGxfY2NiKSkgeworCQkJCXByaW50ayhLRVJOX05PVElDRSAiYXJjbXNyJWQ6IHNjc2kgaWQgPSAlZCBsdW4gPSAlZCBjY2IgPSAnMHglcCciCisJCQkJCSIgcG9sbCBjb21tYW5kIGFib3J0IHN1Y2Nlc3NmdWxseSBcbiIKKwkJCQkJLGFjYi0+aG9zdC0+aG9zdF9ubworCQkJCQksY2NiLT5wY21kLT5kZXZpY2UtPmlkCisJCQkJCSxjY2ItPnBjbWQtPmRldmljZS0+bHVuCisJCQkJCSxjY2IpOworCQkJCWNjYi0+cGNtZC0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OworCQkJCWFyY21zcl9jY2JfY29tcGxldGUoY2NiKTsKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCWFyY21zcl9yZXBvcnRfY2NiX3N0YXRlKGFjYiwgY2NiLCBmbGFnX2NjYik7Ci0JCX0JLypkcmFpbiByZXBseSBGSUZPKi8KKwkJCXByaW50ayhLRVJOX05PVElDRSAiYXJjbXNyJWQ6IHBvbGxpbmcgZ2V0IGFuIGlsbGVnYWwgY2NiIgorCQkJCSIgY29tbWFuZCBkb25lIGNjYiA9ICcweCVwJyIKKwkJCQkiY2Nib3V0c3RhbmRpbmdjb3VudCA9ICVkIFxuIgorCQkJCSwgYWNiLT5ob3N0LT5ob3N0X25vCisJCQkJLCBjY2IKKwkJCQksIGF0b21pY19yZWFkKCZhY2ItPmNjYm91dHN0YW5kaW5nY291bnQpKTsKKwkJCWNvbnRpbnVlOworCQl9IAorCQllcnJvciA9IChmbGFnX2NjYiAmIEFSQ01TUl9DQ0JSRVBMWV9GTEFHX0VSUk9SX01PREUwKSA/IHRydWUgOiBmYWxzZTsKKwkJYXJjbXNyX3JlcG9ydF9jY2Jfc3RhdGUoYWNiLCBjY2IsIGVycm9yKTsKKwl9CisJcmV0dXJuIHJ0bjsKIH0KIAotc3RhdGljIHZvaWQgYXJjbXNyX3BvbGxpbmdfY2NiZG9uZShzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiLAorc3RhdGljIGludCBhcmNtc3JfcG9sbGluZ19oYmNfY2NiZG9uZShzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiLCBzdHJ1Y3QgQ29tbWFuZENvbnRyb2xCbG9jayAqcG9sbF9jY2IpCit7CisJc3RydWN0IE1lc3NhZ2VVbml0X0MgKnJlZyA9IChzdHJ1Y3QgTWVzc2FnZVVuaXRfQyAqKWFjYi0+cG11QzsKKwl1aW50MzJfdCBmbGFnX2NjYiwgY2NiX2NkYl9waHk7CisJc3RydWN0IEFSQ01TUl9DREIgKmFyY21zcl9jZGI7CisJYm9vbCBlcnJvcjsKKwlzdHJ1Y3QgQ29tbWFuZENvbnRyb2xCbG9jayAqcENDQjsKKwl1aW50MzJfdCBwb2xsX2NjYl9kb25lID0gMCwgcG9sbF9jb3VudCA9IDA7CisJaW50IHJ0bjsKK3BvbGxpbmdfaGJjX2NjYl9yZXRyeToKKwlwb2xsX2NvdW50Kys7CisJd2hpbGUgKDEpIHsKKwkJaWYgKChyZWFkbCgmcmVnLT5ob3N0X2ludF9zdGF0dXMpICYgQVJDTVNSX0hCQ01VX09VVEJPVU5EX1BPU1RRVUVVRV9JU1IpID09IDApIHsKKwkJCWlmIChwb2xsX2NjYl9kb25lKSB7CisJCQkJcnRuID0gU1VDQ0VTUzsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJbXNsZWVwKDI1KTsKKwkJCQlpZiAocG9sbF9jb3VudCA+IDEwMCkgeworCQkJCQlydG4gPSBGQUlMRUQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlnb3RvIHBvbGxpbmdfaGJjX2NjYl9yZXRyeTsKKwkJCX0KKwkJfQorCQlmbGFnX2NjYiA9IHJlYWRsKCZyZWctPm91dGJvdW5kX3F1ZXVlcG9ydF9sb3cpOworCQljY2JfY2RiX3BoeSA9IChmbGFnX2NjYiAmIDB4RkZGRkZGRjApOworCQlhcmNtc3JfY2RiID0gKHN0cnVjdCBBUkNNU1JfQ0RCICopKGFjYi0+dmlyMnBoeV9vZmZzZXQgKyBjY2JfY2RiX3BoeSk7LypmcmFtZSBtdXN0IGJlIDMyIGJ5dGVzIGFsaWduZWQqLworCQlwQ0NCID0gY29udGFpbmVyX29mKGFyY21zcl9jZGIsIHN0cnVjdCBDb21tYW5kQ29udHJvbEJsb2NrLCBhcmNtc3JfY2RiKTsKKwkJcG9sbF9jY2JfZG9uZSA9IChwQ0NCID09IHBvbGxfY2NiKSA/IDEgOiAwOworCQkvKiBjaGVjayBpZmNvbW1hbmQgZG9uZSB3aXRoIG5vIGVycm9yKi8KKwkJaWYgKChwQ0NCLT5hY2IgIT0gYWNiKSB8fCAocENDQi0+c3RhcnRkb25lICE9IEFSQ01TUl9DQ0JfU1RBUlQpKSB7CisJCQlpZiAocENDQi0+c3RhcnRkb25lID09IEFSQ01TUl9DQ0JfQUJPUlRFRCkgeworCQkJCXByaW50ayhLRVJOX05PVElDRSAiYXJjbXNyJWQ6IHNjc2kgaWQgPSAlZCBsdW4gPSAlZCBjY2IgPSAnMHglcCciCisJCQkJCSIgcG9sbCBjb21tYW5kIGFib3J0IHN1Y2Nlc3NmdWxseSBcbiIKKwkJCQkJLCBhY2ItPmhvc3QtPmhvc3Rfbm8KKwkJCQkJLCBwQ0NCLT5wY21kLT5kZXZpY2UtPmlkCisJCQkJCSwgcENDQi0+cGNtZC0+ZGV2aWNlLT5sdW4KKwkJCQkJLCBwQ0NCKTsKKwkJCQkJcENDQi0+cGNtZC0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OworCQkJCQlhcmNtc3JfY2NiX2NvbXBsZXRlKHBDQ0IpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJcHJpbnRrKEtFUk5fTk9USUNFICJhcmNtc3IlZDogcG9sbGluZyBnZXQgYW4gaWxsZWdhbCBjY2IiCisJCQkJIiBjb21tYW5kIGRvbmUgY2NiID0gJzB4JXAnIgorCQkJCSJjY2JvdXRzdGFuZGluZ2NvdW50ID0gJWQgXG4iCisJCQkJLCBhY2ItPmhvc3QtPmhvc3Rfbm8KKwkJCQksIHBDQ0IKKwkJCQksIGF0b21pY19yZWFkKCZhY2ItPmNjYm91dHN0YW5kaW5nY291bnQpKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWVycm9yID0gKGZsYWdfY2NiICYgQVJDTVNSX0NDQlJFUExZX0ZMQUdfRVJST1JfTU9ERTEpID8gdHJ1ZSA6IGZhbHNlOworCQlhcmNtc3JfcmVwb3J0X2NjYl9zdGF0ZShhY2IsIHBDQ0IsIGVycm9yKTsKKwl9CisJcmV0dXJuIHJ0bjsKK30KK3N0YXRpYyBpbnQgYXJjbXNyX3BvbGxpbmdfY2NiZG9uZShzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiLAogCQkJCQlzdHJ1Y3QgQ29tbWFuZENvbnRyb2xCbG9jayAqcG9sbF9jY2IpCiB7CisJaW50IHJ0biA9IDA7CiAJc3dpdGNoIChhY2ItPmFkYXB0ZXJfdHlwZSkgewogCiAJY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0E6IHsKLQkJYXJjbXNyX3BvbGxpbmdfaGJhX2NjYmRvbmUoYWNiLHBvbGxfY2NiKTsKKwkJcnRuID0gYXJjbXNyX3BvbGxpbmdfaGJhX2NjYmRvbmUoYWNiLCBwb2xsX2NjYik7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIEFDQl9BREFQVEVSX1RZUEVfQjogewotCQlhcmNtc3JfcG9sbGluZ19oYmJfY2NiZG9uZShhY2IscG9sbF9jY2IpOworCQlydG4gPSBhcmNtc3JfcG9sbGluZ19oYmJfY2NiZG9uZShhY2IsIHBvbGxfY2NiKTsKKwkJfQorCQlicmVhazsKKwljYXNlIEFDQl9BREFQVEVSX1RZUEVfQzogeworCQlydG4gPSBhcmNtc3JfcG9sbGluZ19oYmNfY2NiZG9uZShhY2IsIHBvbGxfY2NiKTsKIAkJfQogCX0KKwlyZXR1cm4gcnRuOwogfQogCiBzdGF0aWMgaW50IGFyY21zcl9pb3BfY29uZmlybShzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKQogewotCXVpbnQzMl90IGNkYl9waHlhZGRyLCBjY2JfcGh5YWRkcl9oaTMyOworCXVpbnQzMl90IGNkYl9waHlhZGRyLCBjZGJfcGh5YWRkcl9oaTMyOwogCWRtYV9hZGRyX3QgZG1hX2NvaGVyZW50X2hhbmRsZTsKIAkvKgogCSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yMTgyLDcgKzI1MzUsOCBAQAogCSovCiAJZG1hX2NvaGVyZW50X2hhbmRsZSA9IGFjYi0+ZG1hX2NvaGVyZW50X2hhbmRsZTsKIAljZGJfcGh5YWRkciA9ICh1aW50MzJfdCkoZG1hX2NvaGVyZW50X2hhbmRsZSk7Ci0JY2NiX3BoeWFkZHJfaGkzMiA9ICh1aW50MzJfdCkoKGNkYl9waHlhZGRyID4+IDE2KSA+PiAxNik7CisJY2RiX3BoeWFkZHJfaGkzMiA9ICh1aW50MzJfdCkoKGNkYl9waHlhZGRyID4+IDE2KSA+PiAxNik7CisJYWNiLT5jZGJfcGh5YWRkcl9oaTMyID0gY2RiX3BoeWFkZHJfaGkzMjsKIAkvKgogCSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAJKiogICAgaWYgYWRhcHRlciB0eXBlIEIsIHNldCB3aW5kb3cgb2YgInBvc3QgY29tbWFuZCBRIgpAQCAtMjE5MSwxNiArMjU0NSwxNiBAQAogCXN3aXRjaCAoYWNiLT5hZGFwdGVyX3R5cGUpIHsKIAogCWNhc2UgQUNCX0FEQVBURVJfVFlQRV9BOiB7Ci0JCWlmIChjY2JfcGh5YWRkcl9oaTMyICE9IDApIHsKKwkJaWYgKGNkYl9waHlhZGRyX2hpMzIgIT0gMCkgewogCQkJc3RydWN0IE1lc3NhZ2VVbml0X0EgX19pb21lbSAqcmVnID0gYWNiLT5wbXVBOwogCQkJdWludDMyX3QgaW50bWFza19vcmc7CiAJCQlpbnRtYXNrX29yZyA9IGFyY21zcl9kaXNhYmxlX291dGJvdW5kX2ludHMoYWNiKTsKIAkJCXdyaXRlbChBUkNNU1JfU0lHTkFUVVJFX1NFVF9DT05GSUcsIFwKIAkJCQkJCSZyZWctPm1lc3NhZ2VfcndidWZmZXJbMF0pOwotCQkJd3JpdGVsKGNjYl9waHlhZGRyX2hpMzIsICZyZWctPm1lc3NhZ2VfcndidWZmZXJbMV0pOworCQkJd3JpdGVsKGNkYl9waHlhZGRyX2hpMzIsICZyZWctPm1lc3NhZ2VfcndidWZmZXJbMV0pOwogCQkJd3JpdGVsKEFSQ01TUl9JTkJPVU5EX01FU0cwX1NFVF9DT05GSUcsIFwKIAkJCQkJCQkmcmVnLT5pbmJvdW5kX21zZ2FkZHIwKTsKLQkJCWlmIChhcmNtc3JfaGJhX3dhaXRfbXNnaW50X3JlYWR5KGFjYikpIHsKKwkJCWlmICghYXJjbXNyX2hiYV93YWl0X21zZ2ludF9yZWFkeShhY2IpKSB7CiAJCQkJcHJpbnRrKEtFUk5fTk9USUNFICJhcmNtc3IlZDogIiJzZXQgY2NiIGhpZ2ggXAogCQkJCXBhcnQgcGh5c2ljYWwgYWRkcmVzcyB0aW1lb3V0XG4iLAogCQkJCWFjYi0+aG9zdC0+aG9zdF9ubyk7CkBAIC0yMjIwLDE5ICsyNTc0LDE4IEBACiAJCWludG1hc2tfb3JnID0gYXJjbXNyX2Rpc2FibGVfb3V0Ym91bmRfaW50cyhhY2IpOwogCQlyZWctPnBvc3RxX2luZGV4ID0gMDsKIAkJcmVnLT5kb25lcV9pbmRleCA9IDA7Ci0JCXdyaXRlbChBUkNNU1JfTUVTU0FHRV9TRVRfUE9TVF9XSU5ET1csIHJlZy0+ZHJ2MmlvcF9kb29yYmVsbF9yZWcpOwotCQlpZiAoYXJjbXNyX2hiYl93YWl0X21zZ2ludF9yZWFkeShhY2IpKSB7CisJCXdyaXRlbChBUkNNU1JfTUVTU0FHRV9TRVRfUE9TVF9XSU5ET1csIHJlZy0+ZHJ2MmlvcF9kb29yYmVsbCk7CisJCWlmICghYXJjbXNyX2hiYl93YWl0X21zZ2ludF9yZWFkeShhY2IpKSB7CiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgImFyY21zciVkOmNhbiBub3Qgc2V0IGRpdmVyIG1vZGVcbiIsIFwKIAkJCQlhY2ItPmhvc3QtPmhvc3Rfbm8pOwogCQkJcmV0dXJuIDE7CiAJCX0KLQkJcG9zdF9xdWV1ZV9waHlhZGRyID0gY2RiX3BoeWFkZHIgKyBBUkNNU1JfTUFYX0ZSRUVDQ0JfTlVNICogXAotCQlzaXplb2Yoc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2spICsgb2Zmc2V0b2Yoc3RydWN0IE1lc3NhZ2VVbml0X0IsIHBvc3RfcWJ1ZmZlcikgOwotCQlyd2J1ZmZlciA9IHJlZy0+bXNnY29kZV9yd2J1ZmZlcl9yZWc7CisJCXBvc3RfcXVldWVfcGh5YWRkciA9IGFjYi0+ZG1hX2NvaGVyZW50X2hhbmRsZV9oYmJfbXU7CisJCXJ3YnVmZmVyID0gcmVnLT5tZXNzYWdlX3J3YnVmZmVyOwogCQkvKiBkcml2ZXIgInNldCBjb25maWciIHNpZ25hdHVyZSAqLwogCQl3cml0ZWwoQVJDTVNSX1NJR05BVFVSRV9TRVRfQ09ORklHLCByd2J1ZmZlcisrKTsKIAkJLyogbm9ybWFsIHNob3VsZCBiZSB6ZXJvICovCi0JCXdyaXRlbChjY2JfcGh5YWRkcl9oaTMyLCByd2J1ZmZlcisrKTsKKwkJd3JpdGVsKGNkYl9waHlhZGRyX2hpMzIsIHJ3YnVmZmVyKyspOwogCQkvKiBwb3N0USBzaXplICgyNTYgKyA4KSo0CSAqLwogCQl3cml0ZWwocG9zdF9xdWV1ZV9waHlhZGRyLCByd2J1ZmZlcisrKTsKIAkJLyogZG9uZVEgc2l6ZSAoMjU2ICsgOCkqNAkgKi8KQEAgLTIyNDAsMjIgKzI1OTMsMzcgQEAKIAkJLyogY2NiIG1heFEgc2l6ZSBtdXN0IGJlIC0tPiBbKDI1NiArIDgpKjRdKi8KIAkJd3JpdGVsKDEwNTYsIHJ3YnVmZmVyKTsKIAotCQl3cml0ZWwoQVJDTVNSX01FU1NBR0VfU0VUX0NPTkZJRywgcmVnLT5kcnYyaW9wX2Rvb3JiZWxsX3JlZyk7Ci0JCWlmIChhcmNtc3JfaGJiX3dhaXRfbXNnaW50X3JlYWR5KGFjYikpIHsKKwkJd3JpdGVsKEFSQ01TUl9NRVNTQUdFX1NFVF9DT05GSUcsIHJlZy0+ZHJ2MmlvcF9kb29yYmVsbCk7CisJCWlmICghYXJjbXNyX2hiYl93YWl0X21zZ2ludF9yZWFkeShhY2IpKSB7CiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgImFyY21zciVkOiAnc2V0IGNvbW1hbmQgUSB3aW5kb3cnIFwKIAkJCXRpbWVvdXQgXG4iLGFjYi0+aG9zdC0+aG9zdF9ubyk7CiAJCQlyZXR1cm4gMTsKIAkJfQotCi0JCXdyaXRlbChBUkNNU1JfTUVTU0FHRV9TVEFSVF9EUklWRVJfTU9ERSwgcmVnLT5kcnYyaW9wX2Rvb3JiZWxsX3JlZyk7Ci0JCWlmIChhcmNtc3JfaGJiX3dhaXRfbXNnaW50X3JlYWR5KGFjYikpIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAiYXJjbXNyJWQ6ICdjYW4gbm90IHNldCBkaXZlciBtb2RlIFxuIlwKLQkJCSxhY2ItPmhvc3QtPmhvc3Rfbm8pOwotCQkJcmV0dXJuIDE7Ci0JCX0KKwkJYXJjbXNyX2hiYl9lbmFibGVfZHJpdmVyX21vZGUoYWNiKTsKIAkJYXJjbXNyX2VuYWJsZV9vdXRib3VuZF9pbnRzKGFjYiwgaW50bWFza19vcmcpOwogCQl9CiAJCWJyZWFrOworCWNhc2UgQUNCX0FEQVBURVJfVFlQRV9DOiB7CisJCWlmIChjZGJfcGh5YWRkcl9oaTMyICE9IDApIHsKKwkJCXN0cnVjdCBNZXNzYWdlVW5pdF9DICpyZWcgPSAoc3RydWN0IE1lc3NhZ2VVbml0X0MgKilhY2ItPnBtdUM7CisKKwkJCWlmIChjZGJfcGh5YWRkcl9oaTMyICE9IDApIHsKKwkJCQl1bnNpZ25lZCBjaGFyIFJldHJpZXMgPSAweDAwOworCQkJCWRvIHsKKwkJCQkJcHJpbnRrKEtFUk5fTk9USUNFICJhcmNtc3IlZDogY2RiX3BoeWFkZHJfaGkzMj0weCV4IFxuIiwgYWNiLT5hZGFwdGVyX2luZGV4LCBjZGJfcGh5YWRkcl9oaTMyKTsKKwkJCQl9IHdoaWxlIChSZXRyaWVzKysgPCAxMDApOworCQkJfQorCQkJd3JpdGVsKEFSQ01TUl9TSUdOQVRVUkVfU0VUX0NPTkZJRywgJnJlZy0+bXNnY29kZV9yd2J1ZmZlclswXSk7CisJCQl3cml0ZWwoY2RiX3BoeWFkZHJfaGkzMiwgJnJlZy0+bXNnY29kZV9yd2J1ZmZlclsxXSk7CisJCQl3cml0ZWwoQVJDTVNSX0lOQk9VTkRfTUVTRzBfU0VUX0NPTkZJRywgJnJlZy0+aW5ib3VuZF9tc2dhZGRyMCk7CisJCQl3cml0ZWwoQVJDTVNSX0hCQ01VX0RSVjJJT1BfTUVTU0FHRV9DTURfRE9ORSwgJnJlZy0+aW5ib3VuZF9kb29yYmVsbCk7CisJCQlpZiAoIWFyY21zcl9oYmNfd2FpdF9tc2dpbnRfcmVhZHkoYWNiKSkgeworCQkJCXByaW50ayhLRVJOX05PVElDRSAiYXJjbXNyJWQ6ICdzZXQgY29tbWFuZCBRIHdpbmRvdycgXAorCQkJCXRpbWVvdXQgXG4iLCBhY2ItPmhvc3QtPmhvc3Rfbm8pOworCQkJCXJldHVybiAxOworCQkJfQorCQl9CisJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yMjYzLDcgKzI2MzEsNiBAQAogc3RhdGljIHZvaWQgYXJjbXNyX3dhaXRfZmlybXdhcmVfcmVhZHkoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYikKIHsKIAl1aW50MzJfdCBmaXJtd2FyZV9zdGF0ZSA9IDA7Ci0KIAlzd2l0Y2ggKGFjYi0+YWRhcHRlcl90eXBlKSB7CiAKIAljYXNlIEFDQl9BREFQVEVSX1RZUEVfQTogewpAQCAtMjI3Nyw2MiArMjY0NCw4MSBAQAogCWNhc2UgQUNCX0FEQVBURVJfVFlQRV9COiB7CiAJCXN0cnVjdCBNZXNzYWdlVW5pdF9CICpyZWcgPSBhY2ItPnBtdUI7CiAJCWRvIHsKLQkJCWZpcm13YXJlX3N0YXRlID0gcmVhZGwocmVnLT5pb3AyZHJ2X2Rvb3JiZWxsX3JlZyk7CisJCQlmaXJtd2FyZV9zdGF0ZSA9IHJlYWRsKHJlZy0+aW9wMmRydl9kb29yYmVsbCk7CiAJCX0gd2hpbGUgKChmaXJtd2FyZV9zdGF0ZSAmIEFSQ01TUl9NRVNTQUdFX0ZJUk1XQVJFX09LKSA9PSAwKTsKLQkJd3JpdGVsKEFSQ01TUl9EUlYySU9QX0VORF9PRl9JTlRFUlJVUFQsIHJlZy0+ZHJ2MmlvcF9kb29yYmVsbF9yZWcpOworCQl3cml0ZWwoQVJDTVNSX0RSVjJJT1BfRU5EX09GX0lOVEVSUlVQVCwgcmVnLT5kcnYyaW9wX2Rvb3JiZWxsKTsKIAkJfQogCQlicmVhazsKKwljYXNlIEFDQl9BREFQVEVSX1RZUEVfQzogeworCQlzdHJ1Y3QgTWVzc2FnZVVuaXRfQyAqcmVnID0gKHN0cnVjdCBNZXNzYWdlVW5pdF9DICopYWNiLT5wbXVDOworCQlkbyB7CisJCQlmaXJtd2FyZV9zdGF0ZSA9IHJlYWRsKCZyZWctPm91dGJvdW5kX21zZ2FkZHIxKTsKKwkJfSB3aGlsZSAoKGZpcm13YXJlX3N0YXRlICYgQVJDTVNSX0hCQ01VX01FU1NBR0VfRklSTVdBUkVfT0spID09IDApOworCQl9CiAJfQogfQogCiBzdGF0aWMgdm9pZCBhcmNtc3JfcmVxdWVzdF9oYmFfZGV2aWNlX21hcChzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKQogewogCXN0cnVjdCBNZXNzYWdlVW5pdF9BIF9faW9tZW0gKnJlZyA9IGFjYi0+cG11QTsKLQotCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmYWNiLT5ycV9tYXBfdG9rZW4pID09IDApKSB7Ci0JCWFjYi0+Zndfc3RhdGUgPSBmYWxzZTsKKwlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmFjYi0+cnFfbWFwX3Rva2VuKSA9PSAwKSB8fCAoKGFjYi0+YWNiX2ZsYWdzICYgQUNCX0ZfQlVTX1JFU0VUKSAhPSAwICkgfHwgKChhY2ItPmFjYl9mbGFncyAmIEFDQl9GX0FCT1JUKSAhPSAwICkpeworCQlyZXR1cm47CiAJfSBlbHNlIHsKLQkvKnRvIHByZXZlbnQgcnFfbWFwX3Rva2VuIGZyb20gY2hhbmdpbmcgYnkgb3RoZXIgaW50ZXJydXB0LCB0aGVuCi0JYXZvaWQgdGhlIGRlYWQtbG9jayovCi0JCWFjYi0+Zndfc3RhdGUgPSB0cnVlOwotCQlhdG9taWNfZGVjKCZhY2ItPnJxX21hcF90b2tlbik7Ci0JCWlmICghKGFjYi0+Zndfc3RhdGUpIHx8Ci0JCQkoYWNiLT5hbnRlX3Rva2VuX3ZhbHVlID09IGF0b21pY19yZWFkKCZhY2ItPnJxX21hcF90b2tlbikpKSB7CisJCWFjYi0+ZndfZmxhZyA9IEZXX05PUk1BTDsKKwkJaWYgKGF0b21pY19yZWFkKCZhY2ItPmFudGVfdG9rZW5fdmFsdWUpID09IGF0b21pY19yZWFkKCZhY2ItPnJxX21hcF90b2tlbikpewogCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sIDE2KTsKIAkJfQotCQlhY2ItPmFudGVfdG9rZW5fdmFsdWUgPSBhdG9taWNfcmVhZCgmYWNiLT5ycV9tYXBfdG9rZW4pOworCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIGF0b21pY19yZWFkKCZhY2ItPnJxX21hcF90b2tlbikpOworCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYWNiLT5ycV9tYXBfdG9rZW4pKQorCQkJcmV0dXJuOwogCQl3cml0ZWwoQVJDTVNSX0lOQk9VTkRfTUVTRzBfR0VUX0NPTkZJRywgJnJlZy0+aW5ib3VuZF9tc2dhZGRyMCk7CisJCW1vZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2ICogSFopKTsKIAl9Ci0JbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYwMDApKTsKIAlyZXR1cm47CiB9CiAKIHN0YXRpYyB2b2lkIGFyY21zcl9yZXF1ZXN0X2hiYl9kZXZpY2VfbWFwKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IpCiB7CiAJc3RydWN0IE1lc3NhZ2VVbml0X0IgX19pb21lbSAqcmVnID0gYWNiLT5wbXVCOwotCi0JaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZhY2ItPnJxX21hcF90b2tlbikgPT0gMCkpIHsKLQkJYWNiLT5md19zdGF0ZSA9IGZhbHNlOworCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmYWNiLT5ycV9tYXBfdG9rZW4pID09IDApIHx8ICgoYWNiLT5hY2JfZmxhZ3MgJiBBQ0JfRl9CVVNfUkVTRVQpICE9IDAgKSB8fCAoKGFjYi0+YWNiX2ZsYWdzICYgQUNCX0ZfQUJPUlQpICE9IDAgKSl7CisJCXJldHVybjsKIAl9IGVsc2UgewotCS8qdG8gcHJldmVudCBycV9tYXBfdG9rZW4gZnJvbSBjaGFuZ2luZyBieSBvdGhlciBpbnRlcnJ1cHQsIHRoZW4KLQlhdm9pZCB0aGUgZGVhZC1sb2NrKi8KLQkJYWNiLT5md19zdGF0ZSA9IHRydWU7Ci0JCWF0b21pY19kZWMoJmFjYi0+cnFfbWFwX3Rva2VuKTsKLQkJaWYgKCEoYWNiLT5md19zdGF0ZSkgfHwKLQkJCShhY2ItPmFudGVfdG9rZW5fdmFsdWUgPT0gYXRvbWljX3JlYWQoJmFjYi0+cnFfbWFwX3Rva2VuKSkpIHsKKwkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOworCQlpZiAoYXRvbWljX3JlYWQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSkgPT0gYXRvbWljX3JlYWQoJmFjYi0+cnFfbWFwX3Rva2VuKSkgeworCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sMTYpOworCQl9CisJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgYXRvbWljX3JlYWQoJmFjYi0+cnFfbWFwX3Rva2VuKSk7CisJCWlmKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFjYi0+cnFfbWFwX3Rva2VuKSkKKwkJCXJldHVybjsKKwkJd3JpdGVsKEFSQ01TUl9NRVNTQUdFX0dFVF9DT05GSUcsIHJlZy0+ZHJ2MmlvcF9kb29yYmVsbCk7CisJCW1vZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2ICogSFopKTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBhcmNtc3JfcmVxdWVzdF9oYmNfZGV2aWNlX21hcChzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKQoreworCXN0cnVjdCBNZXNzYWdlVW5pdF9DIF9faW9tZW0gKnJlZyA9IGFjYi0+cG11QzsKKwlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmFjYi0+cnFfbWFwX3Rva2VuKSA9PSAwKSB8fCAoKGFjYi0+YWNiX2ZsYWdzICYgQUNCX0ZfQlVTX1JFU0VUKSAhPSAwKSB8fCAoKGFjYi0+YWNiX2ZsYWdzICYgQUNCX0ZfQUJPUlQpICE9IDApKSB7CisJCXJldHVybjsKKwl9IGVsc2UgeworCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7CisJCWlmIChhdG9taWNfcmVhZCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlKSA9PSBhdG9taWNfcmVhZCgmYWNiLT5ycV9tYXBfdG9rZW4pKSB7CiAJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOwogCQl9Ci0JCWFjYi0+YW50ZV90b2tlbl92YWx1ZSA9IGF0b21pY19yZWFkKCZhY2ItPnJxX21hcF90b2tlbik7Ci0JCXdyaXRlbChBUkNNU1JfTUVTU0FHRV9HRVRfQ09ORklHLCByZWctPmRydjJpb3BfZG9vcmJlbGxfcmVnKTsKKwkJYXRvbWljX3NldCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlLCBhdG9taWNfcmVhZCgmYWNiLT5ycV9tYXBfdG9rZW4pKTsKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFjYi0+cnFfbWFwX3Rva2VuKSkKKwkJCXJldHVybjsKKwkJd3JpdGVsKEFSQ01TUl9JTkJPVU5EX01FU0cwX0dFVF9DT05GSUcsICZyZWctPmluYm91bmRfbXNnYWRkcjApOworCQl3cml0ZWwoQVJDTVNSX0hCQ01VX0RSVjJJT1BfTUVTU0FHRV9DTURfRE9ORSwgJnJlZy0+aW5ib3VuZF9kb29yYmVsbCk7CisJCW1vZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2ICogSFopKTsKIAl9Ci0JbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYwMDApKTsKIAlyZXR1cm47CiB9CiAKIHN0YXRpYyB2b2lkIGFyY21zcl9yZXF1ZXN0X2RldmljZV9tYXAodW5zaWduZWQgbG9uZyBwYWNiKQogewogCXN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IgPSAoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKilwYWNiOwotCiAJc3dpdGNoIChhY2ItPmFkYXB0ZXJfdHlwZSkgewogCQljYXNlIEFDQl9BREFQVEVSX1RZUEVfQTogewogCQkJYXJjbXNyX3JlcXVlc3RfaGJhX2RldmljZV9tYXAoYWNiKTsKQEAgLTIzNDIsNiArMjcyOCw5IEBACiAJCQlhcmNtc3JfcmVxdWVzdF9oYmJfZGV2aWNlX21hcChhY2IpOwogCQl9CiAJCWJyZWFrOworCQljYXNlIEFDQl9BREFQVEVSX1RZUEVfQzogeworCQkJYXJjbXNyX3JlcXVlc3RfaGJjX2RldmljZV9tYXAoYWNiKTsKKwkJfQogCX0KIH0KIApAQCAtMjM1MCw3ICsyNzM5LDcgQEAKIAlzdHJ1Y3QgTWVzc2FnZVVuaXRfQSBfX2lvbWVtICpyZWcgPSBhY2ItPnBtdUE7CiAJYWNiLT5hY2JfZmxhZ3MgfD0gQUNCX0ZfTVNHX1NUQVJUX0JHUkI7CiAJd3JpdGVsKEFSQ01TUl9JTkJPVU5EX01FU0cwX1NUQVJUX0JHUkIsICZyZWctPmluYm91bmRfbXNnYWRkcjApOwotCWlmIChhcmNtc3JfaGJhX3dhaXRfbXNnaW50X3JlYWR5KGFjYikpIHsKKwlpZiAoIWFyY21zcl9oYmFfd2FpdF9tc2dpbnRfcmVhZHkoYWNiKSkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgImFyY21zciVkOiB3YWl0ICdzdGFydCBhZGFwdGVyIGJhY2tncm91bmQgXAogCQkJCXJlYnVsaWQnIHRpbWVvdXQgXG4iLCBhY2ItPmhvc3QtPmhvc3Rfbm8pOwogCX0KQEAgLTIzNjAsMTMgKzI3NDksMjUgQEAKIHsKIAlzdHJ1Y3QgTWVzc2FnZVVuaXRfQiAqcmVnID0gYWNiLT5wbXVCOwogCWFjYi0+YWNiX2ZsYWdzIHw9IEFDQl9GX01TR19TVEFSVF9CR1JCOwotCXdyaXRlbChBUkNNU1JfTUVTU0FHRV9TVEFSVF9CR1JCLCByZWctPmRydjJpb3BfZG9vcmJlbGxfcmVnKTsKLQlpZiAoYXJjbXNyX2hiYl93YWl0X21zZ2ludF9yZWFkeShhY2IpKSB7CisJd3JpdGVsKEFSQ01TUl9NRVNTQUdFX1NUQVJUX0JHUkIsIHJlZy0+ZHJ2MmlvcF9kb29yYmVsbCk7CisJaWYgKCFhcmNtc3JfaGJiX3dhaXRfbXNnaW50X3JlYWR5KGFjYikpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJhcmNtc3IlZDogd2FpdCAnc3RhcnQgYWRhcHRlciBiYWNrZ3JvdW5kIFwKIAkJCQlyZWJ1bGlkJyB0aW1lb3V0IFxuIixhY2ItPmhvc3QtPmhvc3Rfbm8pOwogCX0KIH0KIAorc3RhdGljIHZvaWQgYXJjbXNyX3N0YXJ0X2hiY19iZ3JiKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICpwQUNCKQoreworCXN0cnVjdCBNZXNzYWdlVW5pdF9DICpwaGJjbXUgPSAoc3RydWN0IE1lc3NhZ2VVbml0X0MgKilwQUNCLT5wbXVDOworCXBBQ0ItPmFjYl9mbGFncyB8PSBBQ0JfRl9NU0dfU1RBUlRfQkdSQjsKKwl3cml0ZWwoQVJDTVNSX0lOQk9VTkRfTUVTRzBfU1RBUlRfQkdSQiwgJnBoYmNtdS0+aW5ib3VuZF9tc2dhZGRyMCk7CisJd3JpdGVsKEFSQ01TUl9IQkNNVV9EUlYySU9QX01FU1NBR0VfQ01EX0RPTkUsICZwaGJjbXUtPmluYm91bmRfZG9vcmJlbGwpOworCWlmICghYXJjbXNyX2hiY193YWl0X21zZ2ludF9yZWFkeShwQUNCKSkgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgImFyY21zciVkOiB3YWl0ICdzdGFydCBhZGFwdGVyIGJhY2tncm91bmQgXAorCQkJCXJlYnVsaWQnIHRpbWVvdXQgXG4iLCBwQUNCLT5ob3N0LT5ob3N0X25vKTsKKwl9CisJcmV0dXJuOworfQogc3RhdGljIHZvaWQgYXJjbXNyX3N0YXJ0X2FkYXB0ZXJfYmdyYihzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKQogewogCXN3aXRjaCAoYWNiLT5hZGFwdGVyX3R5cGUpIHsKQEAgLTIzNzYsNiArMjc3Nyw4IEBACiAJY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0I6CiAJCWFyY21zcl9zdGFydF9oYmJfYmdyYihhY2IpOwogCQlicmVhazsKKwljYXNlIEFDQl9BREFQVEVSX1RZUEVfQzoKKwkJYXJjbXNyX3N0YXJ0X2hiY19iZ3JiKGFjYik7CiAJfQogfQogCkBAIC0yMzk2LDExICsyNzk5LDE5IEBACiAJY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0I6IHsKIAkJc3RydWN0IE1lc3NhZ2VVbml0X0IgKnJlZyA9IGFjYi0+cG11QjsKIAkJLypjbGVhciBpbnRlcnJ1cHQgYW5kIG1lc3NhZ2Ugc3RhdGUqLwotCQl3cml0ZWwoQVJDTVNSX01FU1NBR0VfSU5UX0NMRUFSX1BBVFRFUk4sIHJlZy0+aW9wMmRydl9kb29yYmVsbF9yZWcpOwotCQl3cml0ZWwoQVJDTVNSX0RSVjJJT1BfREFUQV9SRUFEX09LLCByZWctPmRydjJpb3BfZG9vcmJlbGxfcmVnKTsKKwkJd3JpdGVsKEFSQ01TUl9NRVNTQUdFX0lOVF9DTEVBUl9QQVRURVJOLCByZWctPmlvcDJkcnZfZG9vcmJlbGwpOworCQl3cml0ZWwoQVJDTVNSX0RSVjJJT1BfREFUQV9SRUFEX09LLCByZWctPmRydjJpb3BfZG9vcmJlbGwpOwogCQkvKiBsZXQgSU9QIGtub3cgZGF0YSBoYXMgYmVlbiByZWFkICovCiAJCX0KIAkJYnJlYWs7CisJY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0M6IHsKKwkJc3RydWN0IE1lc3NhZ2VVbml0X0MgKnJlZyA9IChzdHJ1Y3QgTWVzc2FnZVVuaXRfQyAqKWFjYi0+cG11QzsKKwkJdWludDMyX3Qgb3V0Ym91bmRfZG9vcmJlbGw7CisJCS8qIGVtcHR5IGRvb3JiZWxsIFFidWZmZXIgaWYgZG9vciBiZWxsIHJpbmdlZCAqLworCQlvdXRib3VuZF9kb29yYmVsbCA9IHJlYWRsKCZyZWctPm91dGJvdW5kX2Rvb3JiZWxsKTsKKwkJd3JpdGVsKG91dGJvdW5kX2Rvb3JiZWxsLCAmcmVnLT5vdXRib3VuZF9kb29yYmVsbF9jbGVhcik7CisJCXdyaXRlbChBUkNNU1JfSEJDTVVfRFJWMklPUF9EQVRBX1JFQURfT0ssICZyZWctPmluYm91bmRfZG9vcmJlbGwpOworCQl9CiAJfQogfQogCkBAIC0yNDEyLDEzICsyODIzLDE1IEBACiAJY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0I6CiAJCXsKIAkJCXN0cnVjdCBNZXNzYWdlVW5pdF9CICpyZWcgPSBhY2ItPnBtdUI7Ci0JCQl3cml0ZWwoQVJDTVNSX01FU1NBR0VfQUNUSVZFX0VPSV9NT0RFLCByZWctPmRydjJpb3BfZG9vcmJlbGxfcmVnKTsKLQkJCWlmKGFyY21zcl9oYmJfd2FpdF9tc2dpbnRfcmVhZHkoYWNiKSkgeworCQkJd3JpdGVsKEFSQ01TUl9NRVNTQUdFX0FDVElWRV9FT0lfTU9ERSwgcmVnLT5kcnYyaW9wX2Rvb3JiZWxsKTsKKwkJCWlmICghYXJjbXNyX2hiYl93YWl0X21zZ2ludF9yZWFkeShhY2IpKSB7CiAJCQkJcHJpbnRrKEtFUk5fTk9USUNFICJBUkNNU1IgSU9QIGVuYWJsZXMgRU9JX01PREUgVElNRU9VVCIpOwogCQkJCXJldHVybjsKIAkJCX0KIAkJfQogCQlicmVhazsKKwljYXNlIEFDQl9BREFQVEVSX1RZUEVfQzoKKwkJcmV0dXJuOwogCX0KIAlyZXR1cm47CiB9CkBAIC0yNDI2LDE1ICsyODM5LDMzIEBACiBzdGF0aWMgdm9pZCBhcmNtc3JfaGFyZHdhcmVfcmVzZXQoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYikKIHsKIAl1aW50OF90IHZhbHVlWzY0XTsKLQlpbnQgaTsKLQorCWludCBpLCBjb3VudCA9IDA7CisJc3RydWN0IE1lc3NhZ2VVbml0X0EgX19pb21lbSAqcG11QSA9IGFjYi0+cG11QTsKKwlzdHJ1Y3QgTWVzc2FnZVVuaXRfQyBfX2lvbWVtICpwbXVDID0gYWNiLT5wbXVDOworCXUzMiB0ZW1wID0gMDsKIAkvKiBiYWNrdXAgcGNpIGNvbmZpZyBkYXRhICovCisJcHJpbnRrKEtFUk5fTk9USUNFICJhcmNtc3IlZDogZXhlY3V0aW5nIGh3IGJ1cyByZXNldCAuLi4uLlxuIiwgYWNiLT5ob3N0LT5ob3N0X25vKTsKIAlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewogCQlwY2lfcmVhZF9jb25maWdfYnl0ZShhY2ItPnBkZXYsIGksICZ2YWx1ZVtpXSk7CiAJfQogCS8qIGhhcmR3YXJlIHJlc2V0IHNpZ25hbCAqLwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShhY2ItPnBkZXYsIDB4ODQsIDB4MjApOwotCW1zbGVlcCgxMDAwKTsKKwlpZiAoKGFjYi0+ZGV2X2lkID09IDB4MTY4MCkpIHsKKwkJd3JpdGVsKEFSQ01TUl9BUkMxNjgwX0JVU19SRVNFVCwgJnBtdUEtPnJlc2VydmVkMVswXSk7CisJfSBlbHNlIGlmICgoYWNiLT5kZXZfaWQgPT0gMHgxODgwKSkgeworCQlkbyB7CisJCQljb3VudCsrOworCQkJd3JpdGVsKDB4RiwgJnBtdUMtPndyaXRlX3NlcXVlbmNlKTsKKwkJCXdyaXRlbCgweDQsICZwbXVDLT53cml0ZV9zZXF1ZW5jZSk7CisJCQl3cml0ZWwoMHhCLCAmcG11Qy0+d3JpdGVfc2VxdWVuY2UpOworCQkJd3JpdGVsKDB4MiwgJnBtdUMtPndyaXRlX3NlcXVlbmNlKTsKKwkJCXdyaXRlbCgweDcsICZwbXVDLT53cml0ZV9zZXF1ZW5jZSk7CisJCQl3cml0ZWwoMHhELCAmcG11Qy0+d3JpdGVfc2VxdWVuY2UpOworCQl9IHdoaWxlICgoKCh0ZW1wID0gcmVhZGwoJnBtdUMtPmhvc3RfZGlhZ25vc3RpYykpIHwgQVJDTVNSX0FSQzE4ODBfRGlhZ1dyaXRlX0VOQUJMRSkgPT0gMCkgJiYgKGNvdW50IDwgNSkpOworCQl3cml0ZWwoQVJDTVNSX0FSQzE4ODBfUkVTRVRfQURBUFRFUiwgJnBtdUMtPmhvc3RfZGlhZ25vc3RpYyk7CisJfSBlbHNlIHsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGFjYi0+cGRldiwgMHg4NCwgMHgyMCk7CisJfQorCW1zbGVlcCgyMDAwKTsKIAkvKiB3cml0ZSBiYWNrIHBjaSBjb25maWcgZGF0YSAqLwogCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7CiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShhY2ItPnBkZXYsIGksIHZhbHVlW2ldKTsKQEAgLTI0NDIsNTAgKzI4NzMsMTMgQEAKIAltc2xlZXAoMTAwMCk7CiAJcmV0dXJuOwogfQotLyoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSovCi0jaWZkZWYgQ09ORklHX1NDU0lfQVJDTVNSX1JFU0VUCi0JaW50IGFyY21zcl9zbGVlcF9mb3JfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKLQl7Ci0JCQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IE5VTEw7Ci0JCQlzcGlubG9ja190ICpob3N0X2xvY2sgPSBOVUxMOwotCQkJaW50IGksIGlzbGVlcDsKLQotCQkJc2hvc3QgPSBjbWQtPmRldmljZS0+aG9zdDsKLQkJCWhvc3RfbG9jayA9IHNob3N0LT5ob3N0X2xvY2s7Ci0KLQkJCXByaW50ayhLRVJOX05PVElDRSAiSG9zdCAlZCBidXMgcmVzZXQgb3Zlciwgc2xlZXAgJWQgc2Vjb25kcyAoYnVzeSAlZCwgY2FuIHF1ZXVlICVkKSAuLi4uLi4uLi4uLlxuIiwKLQkJCQkJc2hvc3QtPmhvc3Rfbm8sIHNsZWVwdGltZSwgc2hvc3QtPmhvc3RfYnVzeSwgc2hvc3QtPmNhbl9xdWV1ZSk7Ci0JCQlpc2xlZXAgPSBzbGVlcHRpbWUgLyAxMDsKLQkJCXNwaW5fdW5sb2NrX2lycShob3N0X2xvY2spOwotCQkJaWYgKGlzbGVlcCA+IDApIHsKLQkJCQlmb3IgKGkgPSAwOyBpIDwgaXNsZWVwOyBpKyspIHsKLQkJCQkJbXNsZWVwKDEwMDAwKTsKLQkJCQkJcHJpbnRrKEtFUk5fTk9USUNFICJeJWReXG4iLCBpKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWlzbGVlcCA9IHNsZWVwdGltZSAlIDEwOwotCQkJaWYgKGlzbGVlcCA+IDApIHsKLQkJCQltc2xlZXAoaXNsZWVwICogMTAwMCk7Ci0JCQkJcHJpbnRrKEtFUk5fTk9USUNFICJedl5cbiIpOwotCQkJfQotCQkJc3Bpbl9sb2NrX2lycShob3N0X2xvY2spOwotCQkJcHJpbnRrKEtFUk5fTk9USUNFICIqKioqKiB3YWtlIHVwICoqKioqXG4iKTsKLQkJCXJldHVybiAwOwotCX0KLSNlbmRpZgogc3RhdGljIHZvaWQgYXJjbXNyX2lvcF9pbml0KHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IpCiB7CiAJdWludDMyX3QgaW50bWFza19vcmc7Ci0KLSAgICAgICAvKiBkaXNhYmxlIGFsbCBvdXRib3VuZCBpbnRlcnJ1cHQgKi8KLSAgICAgICBpbnRtYXNrX29yZyA9IGFyY21zcl9kaXNhYmxlX291dGJvdW5kX2ludHMoYWNiKTsKKwkvKiBkaXNhYmxlIGFsbCBvdXRib3VuZCBpbnRlcnJ1cHQgKi8KKwlpbnRtYXNrX29yZyA9IGFyY21zcl9kaXNhYmxlX291dGJvdW5kX2ludHMoYWNiKTsKIAlhcmNtc3Jfd2FpdF9maXJtd2FyZV9yZWFkeShhY2IpOwogCWFyY21zcl9pb3BfY29uZmlybShhY2IpOwotCWFyY21zcl9nZXRfZmlybXdhcmVfc3BlYyhhY2IsIDEpOwogCS8qc3RhcnQgYmFja2dyb3VuZCByZWJ1aWxkKi8KIAlhcmNtc3Jfc3RhcnRfYWRhcHRlcl9iZ3JiKGFjYik7CiAJLyogZW1wdHkgZG9vcmJlbGwgUWJ1ZmZlciBpZiBkb29yIGJlbGwgcmluZ2VkICovCkBAIC0yNTAyLDIwICsyODk2LDE3IEBACiAJdWludDMyX3QgaW50bWFza19vcmc7CiAJdWludDhfdCBydG52YWwgPSAweDAwOwogCWludCBpID0gMDsKLQogCWlmIChhdG9taWNfcmVhZCgmYWNiLT5jY2JvdXRzdGFuZGluZ2NvdW50KSAhPSAwKSB7CiAJCS8qIGRpc2FibGUgYWxsIG91dGJvdW5kIGludGVycnVwdCAqLwogCQlpbnRtYXNrX29yZyA9IGFyY21zcl9kaXNhYmxlX291dGJvdW5kX2ludHMoYWNiKTsKIAkJLyogdGFsayB0byBpb3AgMzMxIG91dHN0YW5kaW5nIGNvbW1hbmQgYWJvcnRlZCAqLwogCQlydG52YWwgPSBhcmNtc3JfYWJvcnRfYWxsY21kKGFjYik7Ci0JCS8qIHdhaXQgZm9yIDMgc2VjIGZvciBhbGwgY29tbWFuZCBhYm9ydGVkKi8KLQkJc3NsZWVwKDMpOwogCQkvKiBjbGVhciBhbGwgb3V0Ym91bmQgcG9zdGVkIFEgKi8KIAkJYXJjbXNyX2RvbmU0YWJvcnRfcG9zdHF1ZXVlKGFjYik7CiAJCWZvciAoaSA9IDA7IGkgPCBBUkNNU1JfTUFYX0ZSRUVDQ0JfTlVNOyBpKyspIHsKIAkJCWNjYiA9IGFjYi0+cGNjYl9wb29sW2ldOwogCQkJaWYgKGNjYi0+c3RhcnRkb25lID09IEFSQ01TUl9DQ0JfU1RBUlQpIHsKLQkJCQlhcmNtc3JfY2NiX2NvbXBsZXRlKGNjYiwgMSk7CisJCQkJYXJjbXNyX2NjYl9jb21wbGV0ZShjY2IpOwogCQkJfQogCQl9CiAJCWF0b21pY19zZXQoJmFjYi0+Y2Nib3V0c3RhbmRpbmdjb3VudCwgMCk7CkBAIC0yNTMwLDk0ICsyOTIxLDE5MCBAQAogewogCXN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IgPQogCQkoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKiljbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7Ci0JaW50IHJldHJ5ID0gMDsKLQotCWlmIChhY2ItPmFjYl9mbGFncyAmIEFDQl9GX0JVU19SRVNFVCkKLQkJcmV0dXJuIFNVQ0NFU1M7Ci0KLQlwcmludGsoS0VSTl9OT1RJQ0UgImFyY21zciVkOiBidXMgcmVzZXQgLi4uLi4gXG4iLCBhY2ItPmFkYXB0ZXJfaW5kZXgpOwotCWFjYi0+YWNiX2ZsYWdzIHw9IEFDQl9GX0JVU19SRVNFVDsKKwl1aW50MzJfdCBpbnRtYXNrX29yZywgb3V0Ym91bmRfZG9vcmJlbGw7CisJaW50IHJldHJ5X2NvdW50ID0gMDsKKwlpbnQgcnRuID0gRkFJTEVEOworCWFjYiA9IChzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqKSBjbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7CisJcHJpbnRrKEtFUk5fRVJSICJhcmNtc3I6IGV4ZWN1dGluZyBidXMgcmVzZXQgZWguLi4uLm51bV9yZXNldHMgPSAlZCwgbnVtX2Fib3J0cyA9ICVkIFxuIiwgYWNiLT5udW1fcmVzZXRzLCBhY2ItPm51bV9hYm9ydHMpOwogCWFjYi0+bnVtX3Jlc2V0cysrOwotCXdoaWxlIChhdG9taWNfcmVhZCgmYWNiLT5jY2JvdXRzdGFuZGluZ2NvdW50KSAhPSAwICYmIHJldHJ5IDwgNCkgewotCQlhcmNtc3JfaW50ZXJydXB0KGFjYik7Ci0JCXJldHJ5Kys7Ci0JfQogCi0JaWYgKGFyY21zcl9pb3BfcmVzZXQoYWNiKSkgewotCQlzd2l0Y2ggKGFjYi0+YWRhcHRlcl90eXBlKSB7Ci0JCWNhc2UgQUNCX0FEQVBURVJfVFlQRV9BOiB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgImFyY21zciVkOiBkbyBoYXJkd2FyZSBidXMgcmVzZXQsIG51bV9yZXNldHMgPSAlZCBudW1fYWJvcnRzID0gJWQgXG4iLAotCQkJCWFjYi0+YWRhcHRlcl9pbmRleCwgYWNiLT5udW1fcmVzZXRzLCBhY2ItPm51bV9hYm9ydHMpOwotCQkJYXJjbXNyX2hhcmR3YXJlX3Jlc2V0KGFjYik7Ci0JCQlhY2ItPmFjYl9mbGFncyB8PSBBQ0JfRl9GSVJNV0FSRV9UUkFQOwotCQkJYWNiLT5hY2JfZmxhZ3MgJj0gfkFDQl9GX0lPUF9JTklURUQ7Ci0JCQkjaWZkZWYgQ09ORklHX1NDU0lfQVJDTVNSX1JFU0VUCi0JCQlzdHJ1Y3QgTWVzc2FnZVVuaXRfQSBfX2lvbWVtICpyZWcgPSBhY2ItPnBtdUE7Ci0JCQl1aW50MzJfdCBpbnRtYXNrX29yZywgb3V0Ym91bmRfZG9vcmJlbGw7Ci0JCQlpbnQgcmV0cnlfY291bnQgPSAwOworCXN3aXRjaChhY2ItPmFkYXB0ZXJfdHlwZSl7CisJCWNhc2UgQUNCX0FEQVBURVJfVFlQRV9BOnsKKwkJCWlmIChhY2ItPmFjYl9mbGFncyAmIEFDQl9GX0JVU19SRVNFVCl7CisJCQkJbG9uZyB0aW1lb3V0OworCQkJCXByaW50ayhLRVJOX0VSUiAiYXJjbXNyOiB0aGVyZSBpcyBhbiAgYnVzIHJlc2V0IGVoIHByb2NlZWRpbmcuLi4uLi4uXG4iKTsKKwkJCQl0aW1lb3V0ID0gd2FpdF9ldmVudF90aW1lb3V0KHdhaXRfcSwgKGFjYi0+YWNiX2ZsYWdzICYgQUNCX0ZfQlVTX1JFU0VUKSA9PSAwLCAyMjAqSFopOworCQkJCWlmICh0aW1lb3V0KSB7CisJCQkJCXJldHVybiBTVUNDRVNTOworCQkJCX0KKwkJCX0KKwkJCWFjYi0+YWNiX2ZsYWdzIHw9IEFDQl9GX0JVU19SRVNFVDsKKwkJCWlmICghYXJjbXNyX2lvcF9yZXNldChhY2IpKSB7CisJCQkJc3RydWN0IE1lc3NhZ2VVbml0X0EgX19pb21lbSAqcmVnOworCQkJCXJlZyA9IGFjYi0+cG11QTsKKwkJCQlhcmNtc3JfaGFyZHdhcmVfcmVzZXQoYWNiKTsKKwkJCQlhY2ItPmFjYl9mbGFncyAmPSB+QUNCX0ZfSU9QX0lOSVRFRDsKIHNsZWVwX2FnYWluOgotCQkJYXJjbXNyX3NsZWVwX2Zvcl9idXNfcmVzZXQoY21kKTsKLQkJCWlmICgocmVhZGwoJnJlZy0+b3V0Ym91bmRfbXNnYWRkcjEpICYKLQkJCUFSQ01TUl9PVVRCT1VORF9NRVNHMV9GSVJNV0FSRV9PSykgPT0gMCkgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJhcmNtc3IlZDogaGFyZHdhcmUgYnVzIHJlc2V0IGFuZCByZXR1cm4gYnVzeSwgcmV0cnk9JWQgXG4iLAotCQkJYWNiLT5ob3N0LT5ob3N0X25vLCByZXRyeV9jb3VudCk7Ci0JCQlpZiAocmV0cnlfY291bnQgPiByZXRyeWNvdW50KSB7Ci0JCQkJcHJpbnRrKEtFUk5fTk9USUNFICJhcmNtc3IlZDogaGFyZHdhcmUgYnVzIHJlc2V0IGFuZCByZXR1cm4gYnVzeSwgcmV0cnkgYWJvcnRlZCBcbiIsCi0JCQkJYWNiLT5ob3N0LT5ob3N0X25vKTsKLQkJCXJldHVybiBTVUNDRVNTOworCQkJCWFyY21zcl9zbGVlcF9mb3JfYnVzX3Jlc2V0KGNtZCk7CisJCQkJaWYgKChyZWFkbCgmcmVnLT5vdXRib3VuZF9tc2dhZGRyMSkgJiBBUkNNU1JfT1VUQk9VTkRfTUVTRzFfRklSTVdBUkVfT0spID09IDApIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSICJhcmNtc3IlZDogd2FpdGluZyBmb3IgaHcgYnVzIHJlc2V0IHJldHVybiwgcmV0cnk9JWQgXG4iLCBhY2ItPmhvc3QtPmhvc3Rfbm8sIHJldHJ5X2NvdW50KTsKKwkJCQkJaWYgKHJldHJ5X2NvdW50ID4gcmV0cnljb3VudCkgeworCQkJCQkJYWNiLT5md19mbGFnID0gRldfREVBRExPQ0s7CisJCQkJCQlwcmludGsoS0VSTl9FUlIgImFyY21zciVkOiB3YWl0aW5nIGZvciBodyBidXMgcmVzZXQgcmV0dXJuLCBSRVRSWSBURVJNSU5BVEVEISEgXG4iLCBhY2ItPmhvc3QtPmhvc3Rfbm8pOworCQkJCQkJcmV0dXJuIEZBSUxFRDsKKwkJCQkJfQorCQkJCQlyZXRyeV9jb3VudCsrOworCQkJCQlnb3RvIHNsZWVwX2FnYWluOworCQkJCX0KKwkJCQlhY2ItPmFjYl9mbGFncyB8PSBBQ0JfRl9JT1BfSU5JVEVEOworCQkJCS8qIGRpc2FibGUgYWxsIG91dGJvdW5kIGludGVycnVwdCAqLworCQkJCWludG1hc2tfb3JnID0gYXJjbXNyX2Rpc2FibGVfb3V0Ym91bmRfaW50cyhhY2IpOworCQkJCWFyY21zcl9nZXRfZmlybXdhcmVfc3BlYyhhY2IpOworCQkJCWFyY21zcl9zdGFydF9hZGFwdGVyX2JncmIoYWNiKTsKKwkJCQkvKiBjbGVhciBRYnVmZmVyIGlmIGRvb3IgYmVsbCByaW5nZWQgKi8KKwkJCQlvdXRib3VuZF9kb29yYmVsbCA9IHJlYWRsKCZyZWctPm91dGJvdW5kX2Rvb3JiZWxsKTsKKwkJCQl3cml0ZWwob3V0Ym91bmRfZG9vcmJlbGwsICZyZWctPm91dGJvdW5kX2Rvb3JiZWxsKTsgLypjbGVhciBpbnRlcnJ1cHQgKi8KKyAgIAkJCQl3cml0ZWwoQVJDTVNSX0lOQk9VTkRfRFJJVkVSX0RBVEFfUkVBRF9PSywgJnJlZy0+aW5ib3VuZF9kb29yYmVsbCk7CisJCQkJLyogZW5hYmxlIG91dGJvdW5kIFBvc3QgUXVldWUsb3V0Ym91bmQgZG9vcmJlbGwgSW50ZXJydXB0ICovCisJCQkJYXJjbXNyX2VuYWJsZV9vdXRib3VuZF9pbnRzKGFjYiwgaW50bWFza19vcmcpOworCQkJCWF0b21pY19zZXQoJmFjYi0+cnFfbWFwX3Rva2VuLCAxNik7CisJCQkJYXRvbWljX3NldCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlLCAxNik7CisJCQkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOworCQkJCWluaXRfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lcik7CisJCQkJYWNiLT5ldGVybmFsX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2KkhaKTsKKwkJCQlhY2ItPmV0ZXJuYWxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBhY2I7CisJCQkJYWNiLT5ldGVybmFsX3RpbWVyLmZ1bmN0aW9uID0gJmFyY21zcl9yZXF1ZXN0X2RldmljZV9tYXA7CisJCQkJYWRkX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIpOworCQkJCWFjYi0+YWNiX2ZsYWdzICY9IH5BQ0JfRl9CVVNfUkVTRVQ7CisJCQkJcnRuID0gU1VDQ0VTUzsKKwkJCQlwcmludGsoS0VSTl9FUlIgImFyY21zcjogc2NzaSAgYnVzIHJlc2V0IGVoIHJldHVybnMgd2l0aCBzdWNjZXNzXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJYWNiLT5hY2JfZmxhZ3MgJj0gfkFDQl9GX0JVU19SRVNFVDsKKwkJCQlpZiAoYXRvbWljX3JlYWQoJmFjYi0+cnFfbWFwX3Rva2VuKSA9PSAwKSB7CisJCQkJCWF0b21pY19zZXQoJmFjYi0+cnFfbWFwX3Rva2VuLCAxNik7CisJCQkJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgMTYpOworCQkJCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7CisJCQkJCWluaXRfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lcik7CisJCQkJCQlhY2ItPmV0ZXJuYWxfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYqSFopOworCQkJCQlhY2ItPmV0ZXJuYWxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBhY2I7CisJCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5mdW5jdGlvbiA9ICZhcmNtc3JfcmVxdWVzdF9kZXZpY2VfbWFwOworCQkJCQlhZGRfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lcik7CisJCQkJfSBlbHNlIHsKKwkJCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sIDE2KTsKKwkJCQkJYXRvbWljX3NldCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlLCAxNik7CisJCQkJCWFjYi0+ZndfZmxhZyA9IEZXX05PUk1BTDsKKwkJCQkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYqSFopKTsKKwkJCQl9CisJCQkJcnRuID0gU1VDQ0VTUzsKIAkJCX0KLQkJCXJldHJ5X2NvdW50Kys7Ci0JCQlnb3RvIHNsZWVwX2FnYWluOwotCQkJfQotCQkJYWNiLT5hY2JfZmxhZ3MgJj0gfkFDQl9GX0ZJUk1XQVJFX1RSQVA7Ci0JCQlhY2ItPmFjYl9mbGFncyB8PSBBQ0JfRl9JT1BfSU5JVEVEOwotCQkJYWNiLT5hY2JfZmxhZ3MgJj0gfkFDQl9GX0JVU19SRVNFVDsKLQkJCXByaW50ayhLRVJOX05PVElDRSAiYXJjbXNyJWQ6IGhhcmR3YXJlIGJ1cyByZXNldCBhbmQgcmVzZXQgb2sgXG4iLAotCQkJCWFjYi0+aG9zdC0+aG9zdF9ubyk7Ci0JCQkvKiBkaXNhYmxlIGFsbCBvdXRib3VuZCBpbnRlcnJ1cHQgKi8KLQkJCWludG1hc2tfb3JnID0gYXJjbXNyX2Rpc2FibGVfb3V0Ym91bmRfaW50cyhhY2IpOwotCQkJYXJjbXNyX2dldF9maXJtd2FyZV9zcGVjKGFjYiwgMSk7Ci0JCQkvKnN0YXJ0CWJhY2tncm91bmQgcmVidWlsZCovCi0JCQlhcmNtc3Jfc3RhcnRfYWRhcHRlcl9iZ3JiKGFjYik7Ci0JCQkvKiBjbGVhciBRYnVmZmVyIGlmIGRvb3IgYmVsbCByaW5nZWQgKi8KLQkJCW91dGJvdW5kX2Rvb3JiZWxsID0gcmVhZGwoJnJlZy0+b3V0Ym91bmRfZG9vcmJlbGwpOwotCQkJd3JpdGVsKG91dGJvdW5kX2Rvb3JiZWxsLCAmcmVnLT5vdXRib3VuZF9kb29yYmVsbCk7IC8qY2xlYXIgaW50ZXJydXB0ICovCi0JCQl3cml0ZWwoQVJDTVNSX0lOQk9VTkRfRFJJVkVSX0RBVEFfUkVBRF9PSywgJnJlZy0+aW5ib3VuZF9kb29yYmVsbCk7Ci0JCQkvKiBlbmFibGUgb3V0Ym91bmQgUG9zdCBRdWV1ZSxvdXRib3VuZCBkb29yYmVsbCBJbnRlcnJ1cHQgKi8KLQkJCWFyY21zcl9lbmFibGVfb3V0Ym91bmRfaW50cyhhY2IsIGludG1hc2tfb3JnKTsKLQkJCWF0b21pY19zZXQoJmFjYi0+cnFfbWFwX3Rva2VuLCAxNik7Ci0JCQlpbml0X3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIpOwotCQkJYWNiLT5ldGVybmFsX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyMCpIWik7Ci0JCQlhY2ItPmV0ZXJuYWxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBhY2I7Ci0JCQlhY2ItPmV0ZXJuYWxfdGltZXIuZnVuY3Rpb24gPSAmYXJjbXNyX3JlcXVlc3RfZGV2aWNlX21hcDsKLQkJCWFkZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKLQkJCSNlbmRpZgotCQl9CiAJCQlicmVhazsKLQkJY2FzZSBBQ0JfQURBUFRFUl9UWVBFX0I6IHsKLQl9CiAJCX0KLQl9IGVsc2UgewotCWFjYi0+YWNiX2ZsYWdzICY9IH5BQ0JfRl9CVVNfUkVTRVQ7CisJCWNhc2UgQUNCX0FEQVBURVJfVFlQRV9COnsKKwkJCWFjYi0+YWNiX2ZsYWdzIHw9IEFDQl9GX0JVU19SRVNFVDsKKwkJCWlmICghYXJjbXNyX2lvcF9yZXNldChhY2IpKSB7CisJCQkJYWNiLT5hY2JfZmxhZ3MgJj0gfkFDQl9GX0JVU19SRVNFVDsKKwkJCQlydG4gPSBGQUlMRUQ7CisJCQl9IGVsc2UgeworCQkJCWFjYi0+YWNiX2ZsYWdzICY9IH5BQ0JfRl9CVVNfUkVTRVQ7CisJCQkJaWYgKGF0b21pY19yZWFkKCZhY2ItPnJxX21hcF90b2tlbikgPT0gMCkgeworCQkJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOworCQkJCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIDE2KTsKKwkJCQkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOworCQkJCQlpbml0X3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIpOworCQkJCQkJYWNiLT5ldGVybmFsX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2KkhaKTsKKwkJCQkJYWNiLT5ldGVybmFsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWNiOworCQkJCQlhY2ItPmV0ZXJuYWxfdGltZXIuZnVuY3Rpb24gPSAmYXJjbXNyX3JlcXVlc3RfZGV2aWNlX21hcDsKKwkJCQkJYWRkX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIpOworCQkJCX0gZWxzZSB7CisJCQkJCWF0b21pY19zZXQoJmFjYi0+cnFfbWFwX3Rva2VuLCAxNik7CisJCQkJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgMTYpOworCQkJCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7CisJCQkJCW1vZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2KkhaKSk7CisJCQkJfQorCQkJCXJ0biA9IFNVQ0NFU1M7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQljYXNlIEFDQl9BREFQVEVSX1RZUEVfQzp7CisJCQlpZiAoYWNiLT5hY2JfZmxhZ3MgJiBBQ0JfRl9CVVNfUkVTRVQpIHsKKwkJCQlsb25nIHRpbWVvdXQ7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJhcmNtc3I6IHRoZXJlIGlzIGFuIGJ1cyByZXNldCBlaCBwcm9jZWVkaW5nLi4uLi4uLlxuIik7CisJCQkJdGltZW91dCA9IHdhaXRfZXZlbnRfdGltZW91dCh3YWl0X3EsIChhY2ItPmFjYl9mbGFncyAmIEFDQl9GX0JVU19SRVNFVCkgPT0gMCwgMjIwKkhaKTsKKwkJCQlpZiAodGltZW91dCkgeworCQkJCQlyZXR1cm4gU1VDQ0VTUzsKKwkJCQl9CisJCQl9CisJCQlhY2ItPmFjYl9mbGFncyB8PSBBQ0JfRl9CVVNfUkVTRVQ7CisJCQlpZiAoIWFyY21zcl9pb3BfcmVzZXQoYWNiKSkgeworCQkJCXN0cnVjdCBNZXNzYWdlVW5pdF9DIF9faW9tZW0gKnJlZzsKKwkJCQlyZWcgPSBhY2ItPnBtdUM7CisJCQkJYXJjbXNyX2hhcmR3YXJlX3Jlc2V0KGFjYik7CisJCQkJYWNiLT5hY2JfZmxhZ3MgJj0gfkFDQl9GX0lPUF9JTklURUQ7CitzbGVlcDoKKwkJCQlhcmNtc3Jfc2xlZXBfZm9yX2J1c19yZXNldChjbWQpOworCQkJCWlmICgocmVhZGwoJnJlZy0+aG9zdF9kaWFnbm9zdGljKSAmIDB4MDQpICE9IDApIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSICJhcmNtc3IlZDogd2FpdGluZyBmb3IgaHcgYnVzIHJlc2V0IHJldHVybiwgcmV0cnk9JWQgXG4iLCBhY2ItPmhvc3QtPmhvc3Rfbm8sIHJldHJ5X2NvdW50KTsKKwkJCQkJaWYgKHJldHJ5X2NvdW50ID4gcmV0cnljb3VudCkgeworCQkJCQkJYWNiLT5md19mbGFnID0gRldfREVBRExPQ0s7CisJCQkJCQlwcmludGsoS0VSTl9FUlIgImFyY21zciVkOiB3YWl0aW5nIGZvciBodyBidXMgcmVzZXQgcmV0dXJuLCBSRVRSWSBURVJNSU5BVEVEISEgXG4iLCBhY2ItPmhvc3QtPmhvc3Rfbm8pOworCQkJCQkJcmV0dXJuIEZBSUxFRDsKKwkJCQkJfQorCQkJCQlyZXRyeV9jb3VudCsrOworCQkJCQlnb3RvIHNsZWVwOworCQkJCX0KKwkJCQlhY2ItPmFjYl9mbGFncyB8PSBBQ0JfRl9JT1BfSU5JVEVEOworCQkJCS8qIGRpc2FibGUgYWxsIG91dGJvdW5kIGludGVycnVwdCAqLworCQkJCWludG1hc2tfb3JnID0gYXJjbXNyX2Rpc2FibGVfb3V0Ym91bmRfaW50cyhhY2IpOworCQkJCWFyY21zcl9nZXRfZmlybXdhcmVfc3BlYyhhY2IpOworCQkJCWFyY21zcl9zdGFydF9hZGFwdGVyX2JncmIoYWNiKTsKKwkJCQkvKiBjbGVhciBRYnVmZmVyIGlmIGRvb3IgYmVsbCByaW5nZWQgKi8KKwkJCQlvdXRib3VuZF9kb29yYmVsbCA9IHJlYWRsKCZyZWctPm91dGJvdW5kX2Rvb3JiZWxsKTsKKwkJCQl3cml0ZWwob3V0Ym91bmRfZG9vcmJlbGwsICZyZWctPm91dGJvdW5kX2Rvb3JiZWxsX2NsZWFyKTsgLypjbGVhciBpbnRlcnJ1cHQgKi8KKwkJCQl3cml0ZWwoQVJDTVNSX0hCQ01VX0RSVjJJT1BfREFUQV9SRUFEX09LLCAmcmVnLT5pbmJvdW5kX2Rvb3JiZWxsKTsKKwkJCQkvKiBlbmFibGUgb3V0Ym91bmQgUG9zdCBRdWV1ZSxvdXRib3VuZCBkb29yYmVsbCBJbnRlcnJ1cHQgKi8KKwkJCQlhcmNtc3JfZW5hYmxlX291dGJvdW5kX2ludHMoYWNiLCBpbnRtYXNrX29yZyk7CisJCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sIDE2KTsKKwkJCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIDE2KTsKKwkJCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7CisJCQkJaW5pdF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKKwkJCQlhY2ItPmV0ZXJuYWxfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYgKiBIWik7CisJCQkJYWNiLT5ldGVybmFsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWNiOworCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5mdW5jdGlvbiA9ICZhcmNtc3JfcmVxdWVzdF9kZXZpY2VfbWFwOworCQkJCWFkZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKKwkJCQlhY2ItPmFjYl9mbGFncyAmPSB+QUNCX0ZfQlVTX1JFU0VUOworCQkJCXJ0biA9IFNVQ0NFU1M7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJhcmNtc3I6IHNjc2kgYnVzIHJlc2V0IGVoIHJldHVybnMgd2l0aCBzdWNjZXNzXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJYWNiLT5hY2JfZmxhZ3MgJj0gfkFDQl9GX0JVU19SRVNFVDsKKwkJCQlpZiAoYXRvbWljX3JlYWQoJmFjYi0+cnFfbWFwX3Rva2VuKSA9PSAwKSB7CisJCQkJCWF0b21pY19zZXQoJmFjYi0+cnFfbWFwX3Rva2VuLCAxNik7CisJCQkJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgMTYpOworCQkJCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7CisJCQkJCWluaXRfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lcik7CisJCQkJCQlhY2ItPmV0ZXJuYWxfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYqSFopOworCQkJCQlhY2ItPmV0ZXJuYWxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBhY2I7CisJCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5mdW5jdGlvbiA9ICZhcmNtc3JfcmVxdWVzdF9kZXZpY2VfbWFwOworCQkJCQlhZGRfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lcik7CisJCQkJfSBlbHNlIHsKKwkJCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sIDE2KTsKKwkJCQkJYXRvbWljX3NldCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlLCAxNik7CisJCQkJCWFjYi0+ZndfZmxhZyA9IEZXX05PUk1BTDsKKwkJCQkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYqSFopKTsKKwkJCQl9CisJCQkJcnRuID0gU1VDQ0VTUzsKKwkJCX0KKwkJCWJyZWFrOworCQl9CiAJfQotCXJldHVybiBTVUNDRVNTOworCXJldHVybiBydG47CiB9CiAKLXN0YXRpYyB2b2lkIGFyY21zcl9hYm9ydF9vbmVfY21kKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IsCitzdGF0aWMgaW50IGFyY21zcl9hYm9ydF9vbmVfY21kKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IsCiAJCXN0cnVjdCBDb21tYW5kQ29udHJvbEJsb2NrICpjY2IpCiB7Ci0JdTMyIGludG1hc2s7Ci0KLQljY2ItPnN0YXJ0ZG9uZSA9IEFSQ01TUl9DQ0JfQUJPUlRFRDsKLQotCS8qCi0JKiogV2FpdCBmb3IgMyBzZWMgZm9yIGFsbCBjb21tYW5kIGRvbmUuCi0JKi8KLQlzc2xlZXAoMyk7Ci0KLQlpbnRtYXNrID0gYXJjbXNyX2Rpc2FibGVfb3V0Ym91bmRfaW50cyhhY2IpOwotCWFyY21zcl9wb2xsaW5nX2NjYmRvbmUoYWNiLCBjY2IpOwotCWFyY21zcl9lbmFibGVfb3V0Ym91bmRfaW50cyhhY2IsIGludG1hc2spOworCWludCBydG47CisJcnRuID0gYXJjbXNyX3BvbGxpbmdfY2NiZG9uZShhY2IsIGNjYik7CisJcmV0dXJuIHJ0bjsKIH0KIAogc3RhdGljIGludCBhcmNtc3JfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqY21kKQpAQCAtMjYyNSwxMCArMzExMiwxMSBAQAogCXN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IgPQogCQkoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKiljbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7CiAJaW50IGkgPSAwOwotCisJaW50IHJ0biA9IEZBSUxFRDsKIAlwcmludGsoS0VSTl9OT1RJQ0UKIAkJImFyY21zciVkOiBhYm9ydCBkZXZpY2UgY29tbWFuZCBvZiBzY3NpIGlkID0gJWQgbHVuID0gJWQgXG4iLAogCQlhY2ItPmhvc3QtPmhvc3Rfbm8sIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1bik7CisJYWNiLT5hY2JfZmxhZ3MgfD0gQUNCX0ZfQUJPUlQ7CiAJYWNiLT5udW1fYWJvcnRzKys7CiAJLyoKIAkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI2MzcsMTcgKzMxMjUsMTggQEAKIAkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAkqLwogCWlmICghYXRvbWljX3JlYWQoJmFjYi0+Y2Nib3V0c3RhbmRpbmdjb3VudCkpCi0JCXJldHVybiBTVUNDRVNTOworCQlyZXR1cm4gcnRuOwogCiAJZm9yIChpID0gMDsgaSA8IEFSQ01TUl9NQVhfRlJFRUNDQl9OVU07IGkrKykgewogCQlzdHJ1Y3QgQ29tbWFuZENvbnRyb2xCbG9jayAqY2NiID0gYWNiLT5wY2NiX3Bvb2xbaV07CiAJCWlmIChjY2ItPnN0YXJ0ZG9uZSA9PSBBUkNNU1JfQ0NCX1NUQVJUICYmIGNjYi0+cGNtZCA9PSBjbWQpIHsKLQkJCWFyY21zcl9hYm9ydF9vbmVfY21kKGFjYiwgY2NiKTsKKwkJCWNjYi0+c3RhcnRkb25lID0gQVJDTVNSX0NDQl9BQk9SVEVEOworCQkJcnRuID0gYXJjbXNyX2Fib3J0X29uZV9jbWQoYWNiLCBjY2IpOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0KLQlyZXR1cm4gU1VDQ0VTUzsKKwlhY2ItPmFjYl9mbGFncyAmPSB+QUNCX0ZfQUJPUlQ7CisJcmV0dXJuIHJ0bjsKIH0KIAogc3RhdGljIGNvbnN0IGNoYXIgKmFyY21zcl9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCkBAIC0yNjU3LDcgKzMxNDYsNiBAQAogCXN0YXRpYyBjaGFyIGJ1ZlsyNTZdOwogCWNoYXIgKnR5cGU7CiAJaW50IHJhaWQ2ID0gMTsKLQogCXN3aXRjaCAoYWNiLT5wZGV2LT5kZXZpY2UpIHsKIAljYXNlIFBDSV9ERVZJQ0VfSURfQVJFQ0FfMTExMDoKIAljYXNlIFBDSV9ERVZJQ0VfSURfQVJFQ0FfMTIwMDoKQEAgLTI2ODEsNiArMzE2OSw3IEBACiAJY2FzZSBQQ0lfREVWSUNFX0lEX0FSRUNBXzEzODE6CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0FSRUNBXzE2ODA6CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0FSRUNBXzE2ODE6CisJY2FzZSBQQ0lfREVWSUNFX0lEX0FSRUNBXzE4ODA6CiAJCXR5cGUgPSAiU0FTIjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9LY29uZmlnIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL0tjb25maWcKaW5kZXggMjk1MmZjZC4uODRjMjc1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL0tjb25maWcKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgQkUySVNDU0kKIAl0cmlzdGF0ZSAiU2VydmVyRW5naW5lcycgMTBHYnBzIGlTQ1NJIC0gQmxhZGVFbmdpbmUgMiIKLQlkZXBlbmRzIG9uIFBDSSAmJiBTQ1NJCisJZGVwZW5kcyBvbiBQQ0kgJiYgU0NTSSAmJiBORVQKIAlzZWxlY3QgU0NTSV9JU0NTSV9BVFRSUwogCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlLmggYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmUuaAppbmRleCAxMzZiNDljLi4xY2I4YTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmUuaAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmUuaApAQCAtMTI4LDggKzEyOCw4IEBACiAjZGVmaW5lIG1jY190aW1lb3V0CQkxMjAwMDAgLyogNXMgdGltZW91dCAqLwogCiAvKiBSZXR1cm5zIG51bWJlciBvZiBwYWdlcyBzcGFubmVkIGJ5IHRoZSBkYXRhIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBhZGRyICovCi0jZGVmaW5lIFBBR0VTXzRLX1NQQU5ORUQoX2FkZHJlc3MsIHNpemUpIAkJCQlcCi0JCSgodTMyKSgoKChzaXplX3QpKF9hZGRyZXNzKSAmIChQQUdFX1NJWkVfNEsgLSAxKSkgKyAJXAorI2RlZmluZSBQQUdFU180S19TUEFOTkVEKF9hZGRyZXNzLCBzaXplKQkJCQlcCisJCSgodTMyKSgoKChzaXplX3QpKF9hZGRyZXNzKSAmIChQQUdFX1NJWkVfNEsgLSAxKSkgKwlcCiAJCQkoc2l6ZSkgKyAoUEFHRV9TSVpFXzRLIC0gMSkpID4+IFBBR0VfU0hJRlRfNEspKQogCiAvKiBCeXRlIG9mZnNldCBpbnRvIHRoZSBwYWdlIGNvcnJlc3BvbmRpbmcgdG8gZ2l2ZW4gYWRkcmVzcyAqLwpAQCAtMTM3LDcgKzEzNyw3IEBACiAJCSgoc2l6ZV90KShhZGRyKSAmIChQQUdFX1NJWkVfNEstMSkpCiAKIC8qIFJldHVybnMgYml0IG9mZnNldCB3aXRoaW4gYSBEV09SRCBvZiBhIGJpdGZpZWxkICovCi0jZGVmaW5lIEFNQVBfQklUX09GRlNFVChfc3RydWN0LCBmaWVsZCkgIAkJCQlcCisjZGVmaW5lIEFNQVBfQklUX09GRlNFVChfc3RydWN0LCBmaWVsZCkJCQkJCVwKIAkJKCgoc2l6ZV90KSYoKChfc3RydWN0ICopMCktPmZpZWxkKSklMzIpCiAKIC8qIFJldHVybnMgdGhlIGJpdCBtYXNrIG9mIHRoZSBmaWVsZCB0aGF0IGlzIE5PVCBzaGlmdGVkIGludG8gbG9jYXRpb24uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5jIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuYwppbmRleCBjZGE2NjQyLi43Yzc1MzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmMKQEAgLTE5LDYgKzE5LDg2IEBACiAjaW5jbHVkZSAiYmVfbWdtdC5oIgogI2luY2x1ZGUgImJlX21haW4uaCIKIAoraW50IGJlaXNjc2lfcGNpX3NvZnRfcmVzZXQoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXUzMiBzcmVzZXQ7CisJdTggKnBjaV9yZXNldF9vZmZzZXQgPSAwOworCXU4ICpwY2lfb25saW5lMF9vZmZzZXQgPSAwOworCXU4ICpwY2lfb25saW5lMV9vZmZzZXQgPSAwOworCXUzMiBwY29ubGluZTAgPSAwOworCXUzMiBwY29ubGluZTEgPSAwOworCXUzMiBpOworCisJcGNpX3Jlc2V0X29mZnNldCA9ICh1OCAqKXBoYmEtPnBjaV92YSArIEJFMl9TT0ZUX1JFU0VUOworCXBjaV9vbmxpbmUwX29mZnNldCA9ICh1OCAqKXBoYmEtPnBjaV92YSArIEJFMl9QQ0lfT05MSU5FMDsKKwlwY2lfb25saW5lMV9vZmZzZXQgPSAodTggKilwaGJhLT5wY2lfdmEgKyBCRTJfUENJX09OTElORTE7CisJc3Jlc2V0ID0gcmVhZGwoKHZvaWQgKilwY2lfcmVzZXRfb2Zmc2V0KTsKKwlzcmVzZXQgfD0gQkUyX1NFVF9SRVNFVDsKKwl3cml0ZWwoc3Jlc2V0LCAodm9pZCAqKXBjaV9yZXNldF9vZmZzZXQpOworCisJaSA9IDA7CisJd2hpbGUgKHNyZXNldCAmIEJFMl9TRVRfUkVTRVQpIHsKKwkJaWYgKGkgPiA2NCkKKwkJCWJyZWFrOworCQltc2xlZXAoMTAwKTsKKwkJc3Jlc2V0ID0gcmVhZGwoKHZvaWQgKilwY2lfcmVzZXRfb2Zmc2V0KTsKKwkJaSsrOworCX0KKworCWlmIChzcmVzZXQgJiBCRTJfU0VUX1JFU0VUKSB7CisJCXByaW50ayhLRVJOX0VSUiAiU29mdCBSZXNldCAgZGlkIG5vdCBkZWFzc2VydFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlwY29ubGluZTEgPSBCRTJfTVBVX0lSQU1fT05MSU5FOworCXdyaXRlbChwY29ubGluZTAsICh2b2lkICopcGNpX29ubGluZTBfb2Zmc2V0KTsKKwl3cml0ZWwocGNvbmxpbmUxLCAodm9pZCAqKXBjaV9vbmxpbmUxX29mZnNldCk7CisKKwlzcmVzZXQgPSBCRTJfU0VUX1JFU0VUOworCXdyaXRlbChzcmVzZXQsICh2b2lkICopcGNpX3Jlc2V0X29mZnNldCk7CisKKwlpID0gMDsKKwl3aGlsZSAoc3Jlc2V0ICYgQkUyX1NFVF9SRVNFVCkgeworCQlpZiAoaSA+IDY0KQorCQkJYnJlYWs7CisJCW1zbGVlcCgxKTsKKwkJc3Jlc2V0ID0gcmVhZGwoKHZvaWQgKilwY2lfcmVzZXRfb2Zmc2V0KTsKKwkJaSsrOworCX0KKwlpZiAoc3Jlc2V0ICYgQkUyX1NFVF9SRVNFVCkgeworCQlwcmludGsoS0VSTl9FUlIgIk1QVSBPbmxpbmUgU29mdCBSZXNldCBkaWQgbm90IGRlYXNzZXJ0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCitpbnQgYmVfY2hrX3Jlc2V0X2NvbXBsZXRlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwl1bnNpZ25lZCBpbnQgbnVtX2xvb3A7CisJdTggKm1wdV9zZW0gPSAwOworCXUzMiBzdGF0dXM7CisKKwludW1fbG9vcCA9IDEwMDA7CisJbXB1X3NlbSA9ICh1OCAqKXBoYmEtPmNzcl92YSArIE1QVV9FUF9TRU1BUEhPUkU7CisJbXNsZWVwKDUwMDApOworCisJd2hpbGUgKG51bV9sb29wKSB7CisJCXN0YXR1cyA9IHJlYWRsKCh2b2lkICopbXB1X3NlbSk7CisKKwkJaWYgKChzdGF0dXMgJiAweDgwMDAwMDAwKSB8fCAoc3RhdHVzICYgMHgwMDAwRkZGRikgPT0gMHhDMDAwKQorCQkJYnJlYWs7CisJCW1zbGVlcCg2MCk7CisJCW51bV9sb29wLS07CisJfQorCisJaWYgKChzdGF0dXMgJiAweDgwMDAwMDAwKSB8fCAoIW51bV9sb29wKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCBpbiBiZV9jaGtfcmVzZXRfY29tcGxldGUiCisJCSJzdGF0dXMgPSAweCV4XG4iLCBzdGF0dXMpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogdm9pZCBiZV9tY2Nfbm90aWZ5KHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKIHsKIAlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqbWNjcSA9ICZwaGJhLT5jdHJsLm1jY19vYmoucTsKQEAgLTk4LDcgKzE3OCw3IEBACiAJCWRldl9lcnIoJmN0cmwtPnBkZXYtPmRldiwKIAkJCSJlcnJvciBpbiBjbWQgY29tcGxldGlvbjogc3RhdHVzKGNvbXBsL2V4dGQpPSVkLyVkXG4iLAogCQkJY29tcGxfc3RhdHVzLCBleHRkX3N0YXR1cyk7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xNTEsMjAgKzIzMSwyMCBAQAogewogCXN3aXRjaCAoZXZ0LT5wb3J0X2xpbmtfc3RhdHVzKSB7CiAJY2FzZSBBU1lOQ19FVkVOVF9MSU5LX0RPV046Ci0JCVNFX0RFQlVHKERCR19MVkxfMSwgIkxpbmsgRG93biBvbiBQaHlzaWNhbCBQb3J0ICVkIFxuIiwKLQkJCQkJCWV2dC0+cGh5c2ljYWxfcG9ydCk7CisJCVNFX0RFQlVHKERCR19MVkxfMSwgIkxpbmsgRG93biBvbiBQaHlzaWNhbCBQb3J0ICVkXG4iLAorCQkJCSAgICAgZXZ0LT5waHlzaWNhbF9wb3J0KTsKIAkJcGhiYS0+c3RhdGUgfD0gQkVfQURBUFRFUl9MSU5LX0RPV047CiAJCWlzY3NpX2hvc3RfZm9yX2VhY2hfc2Vzc2lvbihwaGJhLT5zaG9zdCwKIAkJCQkJICAgIGJlMmlzY3NpX2ZhaWxfc2Vzc2lvbik7CiAJCWJyZWFrOwogCWNhc2UgQVNZTkNfRVZFTlRfTElOS19VUDoKIAkJcGhiYS0+c3RhdGUgPSBCRV9BREFQVEVSX1VQOwotCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJMaW5rIFVQIG9uIFBoeXNpY2FsIFBvcnQgJWQgXG4iLAorCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJMaW5rIFVQIG9uIFBoeXNpY2FsIFBvcnQgJWRcbiIsCiAJCQkJCQlldnQtPnBoeXNpY2FsX3BvcnQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJVbmV4cGVjdGVkIEFzeW5jIE5vdGlmaWNhdGlvbiAlZCBvbiIKLQkJCQkgICAgIlBoeXNpY2FsIFBvcnQgJWQgXG4iLAorCQkJCSAgICAiUGh5c2ljYWwgUG9ydCAlZFxuIiwKIAkJCQkgICAgIGV2dC0+cG9ydF9saW5rX3N0YXR1cywKIAkJCQkgICAgIGV2dC0+cGh5c2ljYWxfcG9ydCk7CiAJfQpAQCAtMTk5LDcgKzI3OSw3IEBACiAJCQllbHNlCiAJCQkJU0VfREVCVUcoREJHX0xWTF8xLAogCQkJCQkgIiBVbnN1cHBvcnRlZCBBc3luYyBFdmVudCwgZmxhZ3MiCi0JCQkJCSAiID0gMHglMDh4IFxuIiwgY29tcGwtPmZsYWdzKTsKKwkJCQkJICIgPSAweCUwOHhcbiIsIGNvbXBsLT5mbGFncyk7CiAKIAkJfSBlbHNlIGlmIChjb21wbC0+ZmxhZ3MgJiBDUUVfRkxBR1NfQ09NUExFVEVEX01BU0spIHsKIAkJCQlzdGF0dXMgPSBiZV9tY2NfY29tcGxfcHJvY2VzcyhjdHJsLCBjb21wbCk7CkBAIC0yMzEsNyArMzExLDcgQEAKIAl9CiAJaWYgKGkgPT0gbWNjX3RpbWVvdXQpIHsKIAkJZGV2X2VycigmcGhiYS0+cGNpZGV2LT5kZXYsICJtY2NxIHBvbGwgdGltZWQgb3V0XG4iKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVCVVNZOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTI1Nyw3ICszMzcsNyBAQAogCiAJCWlmIChjbnQgPiA2MDAwMDAwKSB7CiAJCQlkZXZfZXJyKCZjdHJsLT5wZGV2LT5kZXYsICJtYm94X2RiIHBvbGwgdGltZWQgb3V0XG4iKTsKLQkJCXJldHVybiAtMTsKKwkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAogCQlpZiAoY250ID4gNTApIHsKQEAgLTI4Niw3ICszNjYsNyBAQAogCiAJc3RhdHVzID0gYmVfbWJveF9kYl9yZWFkeV93YWl0KGN0cmwpOwogCWlmIChzdGF0dXMgIT0gMCkgewotCQlTRV9ERUJVRyhEQkdfTFZMXzEsICIgYmVfbWJveF9kYl9yZWFkeV93YWl0IGZhaWxlZCAxXG4iKTsKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiIGJlX21ib3hfZGJfcmVhZHlfd2FpdCBmYWlsZWRcbiIpOwogCQlyZXR1cm4gc3RhdHVzOwogCX0KIAl2YWwgPSAwOwpAQCAtMjk3LDE5ICszNzcsMTkgQEAKIAogCXN0YXR1cyA9IGJlX21ib3hfZGJfcmVhZHlfd2FpdChjdHJsKTsKIAlpZiAoc3RhdHVzICE9IDApIHsKLQkJU0VfREVCVUcoREJHX0xWTF8xLCAiIGJlX21ib3hfZGJfcmVhZHlfd2FpdCBmYWlsZWQgMlxuIik7CisJCVNFX0RFQlVHKERCR19MVkxfMSwgIiBiZV9tYm94X2RiX3JlYWR5X3dhaXQgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAJaWYgKGJlX21jY19jb21wbF9pc19uZXcoY29tcGwpKSB7CiAJCXN0YXR1cyA9IGJlX21jY19jb21wbF9wcm9jZXNzKGN0cmwsICZtYm94LT5jb21wbCk7CiAJCWJlX21jY19jb21wbF91c2UoY29tcGwpOwogCQlpZiAoc3RhdHVzKSB7Ci0JCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJBZnRlciBiZV9tY2NfY29tcGxfcHJvY2VzcyBcbiIpOworCQkJU0VfREVCVUcoREJHX0xWTF8xLCAiQWZ0ZXIgYmVfbWNjX2NvbXBsX3Byb2Nlc3NcbiIpOwogCQkJcmV0dXJuIHN0YXR1czsKIAkJfQogCX0gZWxzZSB7CiAJCWRldl9lcnIoJmN0cmwtPnBkZXYtPmRldiwgImludmFsaWQgbWFpbGJveCBjb21wbGV0aW9uXG4iKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVCVVNZOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTM1NSw3ICs0MzUsNyBAQAogCQkJcmV0dXJuIHN0YXR1czsKIAl9IGVsc2UgewogCQlkZXZfZXJyKCZwaGJhLT5wY2lkZXYtPmRldiwgImludmFsaWQgbWFpbGJveCBjb21wbGV0aW9uXG4iKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVCVVNZOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTUwMCw3ICs1ODAsNyBAQAogCiAJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoY3RybCk7CiAJaWYgKHN0YXR1cykKLQkJU0VfREVCVUcoREJHX0xWTF8xLCAiYmVfY21kX2Z3X2luaXRpYWxpemUgRmFpbGVkIFxuIik7CisJCVNFX0RFQlVHKERCR19MVkxfMSwgImJlX2NtZF9md19pbml0aWFsaXplIEZhaWxlZFxuIik7CiAKIAlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKIAlyZXR1cm4gc3RhdHVzOwpAQCAtNTE3LDcgKzU5Nyw3IEBACiAJdm9pZCAqY3R4dCA9ICZyZXEtPmNvbnRleHQ7CiAJaW50IHN0YXR1czsKIAotCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfY21kX2NxX2NyZWF0ZSBcbiIpOworCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfY21kX2NxX2NyZWF0ZVxuIik7CiAJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOwogCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CiAKQEAgLTU1MCw3ICs2MzAsNyBAQAogCQljcS0+aWQgPSBsZTE2X3RvX2NwdShyZXNwLT5jcV9pZCk7CiAJCWNxLT5jcmVhdGVkID0gdHJ1ZTsKIAl9IGVsc2UKLQkJU0VfREVCVUcoREJHX0xWTF8xLCAiSW4gYmVfY21kX2NxX2NyZWF0ZSwgc3RhdHVzPW94JTA4eCBcbiIsCisJCVNFX0RFQlVHKERCR19MVkxfMSwgIkluIGJlX2NtZF9jcV9jcmVhdGUsIHN0YXR1cz1veCUwOHhcbiIsCiAJCQlzdGF0dXMpOwogCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOwogCkBAIC02MTksNyArNjk5LDcgQEAKIAl1OCBzdWJzeXMgPSAwLCBvcGNvZGUgPSAwOwogCWludCBzdGF0dXM7CiAKLQlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2NtZF9xX2Rlc3Ryb3kgXG4iKTsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2NtZF9xX2Rlc3Ryb3lcbiIpOwogCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKIAltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOwogCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CkBAIC02NTIsNyArNzMyLDcgQEAKIAlkZWZhdWx0OgogCQlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKIAkJQlVHKCk7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FTlhJTzsKIAl9CiAJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgc3Vic3lzLCBvcGNvZGUsIHNpemVvZigqcmVxKSk7CiAJaWYgKHF1ZXVlX3R5cGUgIT0gUVRZUEVfU0dMKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuaCBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgKaW5kZXggNDlmY2M3OC4uNDA2NDFkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuaAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oCkBAIC00Nyw4ICs0Nyw4IEBACiAKICNkZWZpbmUgQ1FFX0ZMQUdTX1ZBTElEX01BU0sgKDEgPDwgMzEpCiAjZGVmaW5lIENRRV9GTEFHU19BU1lOQ19NQVNLICgxIDw8IDMwKQotI2RlZmluZSBDUUVfRkxBR1NfQ09NUExFVEVEX01BU0sgCSgxIDw8IDI4KQotI2RlZmluZSBDUUVfRkxBR1NfQ09OU1VNRURfTUFTSyAJKDEgPDwgMjcpCisjZGVmaW5lIENRRV9GTEFHU19DT01QTEVURURfTUFTSwkoMSA8PCAyOCkKKyNkZWZpbmUgQ1FFX0ZMQUdTX0NPTlNVTUVEX01BU0sJCSgxIDw8IDI3KQogCiAvKiBDb21wbGV0aW9uIFN0YXR1cyAqLwogI2RlZmluZSBNQ0NfU1RBVFVTX1NVQ0NFU1MgMHgwCkBAIC01Niw3ICs1Niw3IEBACiAjZGVmaW5lIENRRV9TVEFUVVNfQ09NUExfTUFTSyAweEZGRkYKICNkZWZpbmUgQ1FFX1NUQVRVU19DT01QTF9TSElGVCAwCS8qIGJpdHMgMCAtIDE1ICovCiAjZGVmaW5lIENRRV9TVEFUVVNfRVhURF9NQVNLIDB4RkZGRgotI2RlZmluZSBDUUVfU1RBVFVTX0VYVERfU0hJRlQgMAkJLyogYml0cyAwIC0gMTUgKi8KKyNkZWZpbmUgQ1FFX1NUQVRVU19FWFREX1NISUZUIDE2CQkvKiBiaXRzIDAgLSAxNSAqLwogCiBzdHJ1Y3QgYmVfbWNjX2NvbXBsIHsKIAl1MzIgc3RhdHVzOwkJLyogZHdvcmQgMCAqLwpAQCAtMTQzLDE0ICsxNDMsMTQgQEAKICAqLwogI2RlZmluZSBPUENPREVfQ09NTU9OX0NRX0NSRUFURQkJCQkxMgogI2RlZmluZSBPUENPREVfQ09NTU9OX0VRX0NSRUFURQkJCQkxMwotI2RlZmluZSBPUENPREVfQ09NTU9OX01DQ19DUkVBVEUgICAgICAgIAkJMjEKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9HRVRfQ05UTF9BVFRSSUJVVEVTICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9NQ0NfQ1JFQVRFCQkJMjEKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9HRVRfQ05UTF9BVFRSSUJVVEVTCQkzMgogI2RlZmluZSBPUENPREVfQ09NTU9OX0dFVF9GV19WRVJTSU9OCQkJMzUKICNkZWZpbmUgT1BDT0RFX0NPTU1PTl9NT0RJRllfRVFfREVMQVkJCQk0MQogI2RlZmluZSBPUENPREVfQ09NTU9OX0ZJUk1XQVJFX0NPTkZJRwkJCTQyCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fTUNDX0RFU1RST1kgICAgICAgIAkJNTMKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9DUV9ERVNUUk9ZICAgICAgICAJCTU0Ci0jZGVmaW5lIE9QQ09ERV9DT01NT05fRVFfREVTVFJPWSAgICAgICAgCQk1NQorI2RlZmluZSBPUENPREVfQ09NTU9OX01DQ19ERVNUUk9ZCQkJNTMKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9DUV9ERVNUUk9ZCQkJNTQKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9FUV9ERVNUUk9ZCQkJNTUKICNkZWZpbmUgT1BDT0RFX0NPTU1PTl9RVUVSWV9GSVJNV0FSRV9DT05GSUcJCTU4CiAjZGVmaW5lIE9QQ09ERV9DT01NT05fRlVOQ1RJT05fUkVTRVQJCQk2MQogCkBAIC0xNjQsOSArMTY0LDkgQEAKICNkZWZpbmUgT1BDT0RFX0NPTU1PTl9JU0NTSV9OVFdLX0dFVF9OSUNfQ09ORklHCQk3CiAjZGVmaW5lIE9QQ09ERV9DT01NT05fSVNDU0lfU0VUX0ZSQUdOVU1fQklUU19GT1JfU0dMX0NSQSA2MQogI2RlZmluZSBPUENPREVfQ09NTU9OX0lTQ1NJX0RFRlFfQ1JFQVRFICAgICAgICAgICAgICAgICA2NAotI2RlZmluZSBPUENPREVfQ09NTU9OX0lTQ1NJX0RFRlFfREVTVFJPWSAJCTY1CisjZGVmaW5lIE9QQ09ERV9DT01NT05fSVNDU0lfREVGUV9ERVNUUk9ZCQk2NQogI2RlZmluZSBPUENPREVfQ09NTU9OX0lTQ1NJX1dSQlFfQ1JFQVRFCQkJNjYKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9JU0NTSV9XUkJRX0RFU1RST1kgCQk2NworI2RlZmluZSBPUENPREVfQ09NTU9OX0lTQ1NJX1dSQlFfREVTVFJPWQkJNjcKIAogc3RydWN0IGJlX2NtZF9yZXFfaGRyIHsKIAl1OCBvcGNvZGU7CQkvKiBkd29yZCAwICovCkBAIC00MjMsNyArNDIzLDcgQEAKIAkJCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpjcSk7CiAKIGludCBiZV9wb2xsX21jYyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKTsKLXVuc2lnbmVkIGNoYXIgbWdtdF9jaGVja19zdXBwb3J0ZWRfZncoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKK2ludCBtZ210X2NoZWNrX3N1cHBvcnRlZF9mdyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAogCQkJCSAgICAgIHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSk7CiB1bnNpZ25lZCBpbnQgYmVfY21kX2dldF9tYWNfYWRkcihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpOwogdm9pZCBmcmVlX21jY190YWcoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdW5zaWduZWQgaW50IHRhZyk7CkBAIC04NzUsNyArODc1LDcgQEAKIAkJCQkJCSAqLwogI2RlZmluZSBVTlNPTF9IRFJfTk9USUZZCQkyOAkvKiBVbnNvbGljaXRlZCBoZWFkZXIgbm90aWZ5LiovCiAjZGVmaW5lIFVOU09MX0RBVEFfTk9USUZZCQkyOQkvKiBVbnNvbGljaXRlZCBkYXRhIG5vdGlmeS4qLwotI2RlZmluZSBVTlNPTF9EQVRBX0RJR0VTVF9FUlJPUl9OT1RJRlkgCTMwCS8qIFVuc29saWNpdGVkIGRhdGEgZGlnZXN0CisjZGVmaW5lIFVOU09MX0RBVEFfRElHRVNUX0VSUk9SX05PVElGWQkzMAkvKiBVbnNvbGljaXRlZCBkYXRhIGRpZ2VzdAogCQkJCQkJICogZXJyb3Igbm90aWZ5LgogCQkJCQkJICovCiAjZGVmaW5lIERSSVZFUk1TR19OT1RJRlkJCTMxCS8qIFRDUCBhY2tub3dsZWRnZSBiYXNlZApAQCAtOTAxLDYgKzkwMSw5IEBACiAJCQkJCQkgKiB0aGUgY3huCiAJCQkJCQkgKi8KIAoraW50IGJlaXNjc2lfcGNpX3NvZnRfcmVzZXQoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKTsKK2ludCBiZV9jaGtfcmVzZXRfY29tcGxldGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKTsKKwogdm9pZCBiZV93cmJfaGRyX3ByZXBhcmUoc3RydWN0IGJlX21jY193cmIgKndyYiwgaW50IHBheWxvYWRfbGVuLAogCQkJYm9vbCBlbWJlZGRlZCwgdTggc2dlX2NudCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMKaW5kZXggYzM5MjhjYi4uNmQ2M2U3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMKQEAgLTUyLDcgKzUyLDcgQEAKIAlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX3Nlc3Npb25fY3JlYXRlXG4iKTsKIAogCWlmICghZXApIHsKLQkJU0VfREVCVUcoREJHX0xWTF8xLCAiYmVpc2NzaV9zZXNzaW9uX2NyZWF0ZTogaW52YWxpZCBlcCBcbiIpOworCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJiZWlzY3NpX3Nlc3Npb25fY3JlYXRlOiBpbnZhbGlkIGVwXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCWJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCQkJICJDb25uZWN0aW9uIHRhYmxlIGFscmVhZHkgb2NjdXBpZWQuIERldGVjdGVkIGNsYXNoXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfSBlbHNlIHsKLQkJU0VfREVCVUcoREJHX0xWTF84LCAicGhiYS0+Y29ubl90YWJsZVslZF09JXAoYmVpc2NzaV9jb25uKSBcbiIsCisJCVNFX0RFQlVHKERCR19MVkxfOCwgInBoYmEtPmNvbm5fdGFibGVbJWRdPSVwKGJlaXNjc2lfY29ubilcbiIsCiAJCQkgY2lkLCBiZWlzY3NpX2Nvbm4pOwogCQlwaGJhLT5jb25uX3RhYmxlW2NpZF0gPSBiZWlzY3NpX2Nvbm47CiAJfQpAQCAtMTk2LDcgKzE5Niw3IEBACiAKIAlpZiAoYmVpc2NzaV9lcC0+cGhiYSAhPSBwaGJhKSB7CiAJCVNFX0RFQlVHKERCR19MVkxfOCwKLQkJCSAiYmVpc2NzaV9lcC0+aGJhPSVwIG5vdCBlcXVhbCB0byBwaGJhPSVwIFxuIiwKKwkJCSAiYmVpc2NzaV9lcC0+aGJhPSVwIG5vdCBlcXVhbCB0byBwaGJhPSVwXG4iLAogCQkJIGJlaXNjc2lfZXAtPnBoYmEsIHBoYmEpOwogCQlyZXR1cm4gLUVFWElTVDsKIAl9CkBAIC0yMDQsNyArMjA0LDcgQEAKIAliZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQgPSBiZWlzY3NpX2VwLT5lcF9jaWQ7CiAJYmVpc2NzaV9jb25uLT5lcCA9IGJlaXNjc2lfZXA7CiAJYmVpc2NzaV9lcC0+Y29ubiA9IGJlaXNjc2lfY29ubjsKLQlTRV9ERUJVRyhEQkdfTFZMXzgsICJiZWlzY3NpX2Nvbm49JXAgY29ubj0lcCBlcF9jaWQ9JWQgXG4iLAorCVNFX0RFQlVHKERCR19MVkxfOCwgImJlaXNjc2lfY29ubj0lcCBjb25uPSVwIGVwX2NpZD0lZFxuIiwKIAkJIGJlaXNjc2lfY29ubiwgY29ubiwgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKIAlyZXR1cm4gYmVpc2NzaV9iaW5kY29ubl9jaWQocGhiYSwgYmVpc2NzaV9jb25uLCBiZWlzY3NpX2VwLT5lcF9jaWQpOwogfQpAQCAtMjMwLDcgKzIzMCw3IEBACiAJaWYgKCFiZWlzY3NpX2VwKSB7CiAJCVNFX0RFQlVHKERCR19MVkxfMSwKIAkJCSAiSW4gYmVpc2NzaV9jb25uX2dldF9wYXJhbSAsIG5vIGJlaXNjc2lfZXBcbiIpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXN3aXRjaCAocGFyYW0pIHsKQEAgLTI3Nyw2ICsyNzcsMTAgQEAKIAkJaWYgKHNlc3Npb24tPm1heF9idXJzdCA+IDI2MjE0NCkKIAkJCXNlc3Npb24tPm1heF9idXJzdCA9IDI2MjE0NDsKIAkJYnJlYWs7CisJY2FzZSBJU0NTSV9QQVJBTV9NQVhfWE1JVF9ETEVOR1RIOgorCQlpZiAoKGNvbm4tPm1heF94bWl0X2RsZW5ndGggPiA2NTUzNikgfHwKKwkJICAgIChjb25uLT5tYXhfeG1pdF9kbGVuZ3RoID09IDApKQorCQkJY29ubi0+bWF4X3htaXRfZGxlbmd0aCA9IDY1NTM2OwogCWRlZmF1bHQ6CiAJCXJldHVybiAwOwogCX0KQEAgLTMwOCw4ICszMTIsOCBAQAogCWNhc2UgSVNDU0lfSE9TVF9QQVJBTV9IV0FERFJFU1M6CiAJCXRhZyA9IGJlX2NtZF9nZXRfbWFjX2FkZHIocGhiYSk7CiAJCWlmICghdGFnKSB7Ci0JCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJiZV9jbWRfZ2V0X21hY19hZGRyIEZhaWxlZCBcbiIpOwotCQkJcmV0dXJuIC0xOworCQkJU0VfREVCVUcoREJHX0xWTF8xLCAiYmVfY21kX2dldF9tYWNfYWRkciBGYWlsZWRcbiIpOworCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0gZWxzZQogCQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHBoYmEtPmN0cmwubWNjX3dhaXRbdGFnXSwKIAkJCQkJCSBwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSk7CkBAIC0zMTksMTAgKzMyMywxMCBAQAogCQlzdGF0dXMgPSBwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSAmIDB4MDAwMDAwRkY7CiAJCWlmIChzdGF0dXMgfHwgZXh0ZF9zdGF0dXMpIHsKIAkJCVNFX0RFQlVHKERCR19MVkxfMSwgImJlX2NtZF9nZXRfbWFjX2FkZHIgRmFpbGVkIgotCQkJCQkgICAgIiBzdGF0dXMgPSAlZCBleHRkX3N0YXR1cyA9ICVkIFxuIiwKKwkJCQkJICAgICIgc3RhdHVzID0gJWQgZXh0ZF9zdGF0dXMgPSAlZFxuIiwKIAkJCQkJICAgIHN0YXR1cywgZXh0ZF9zdGF0dXMpOwogCQkJZnJlZV9tY2NfdGFnKCZwaGJhLT5jdHJsLCB0YWcpOwotCQkJcmV0dXJuIC0xOworCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0gZWxzZSB7CiAJCQl3cmIgPSBxdWV1ZV9nZXRfd3JiKG1jY3EsIHdyYl9udW0pOwogCQkJZnJlZV9tY2NfdGFnKCZwaGJhLT5jdHJsLCB0YWcpOwpAQCAtNDQyLDc1ICs0NDYsNiBAQAogfQogCiAvKioKLSAqIGJlaXNjc2lfb3Blbl9jb25uIC0gQXNrIEZXIHRvIG9wZW4gYSBUQ1AgY29ubmVjdGlvbgotICogQGVwOgllbmRwb2ludCB0byBiZSB1c2VkCi0gKiBAc3JjX2FkZHI6IFRoZSBzb3VyY2UgSVAgYWRkcmVzcwotICogQGRzdF9hZGRyOiBUaGUgRGVzdGluYXRpb24gIElQIGFkZHJlc3MKLSAqCi0gKiBBc2tzIHRoZSBGVyB0byBvcGVuIGEgVENQIGNvbm5lY3Rpb24KLSAqLwotc3RhdGljIGludCBiZWlzY3NpX29wZW5fY29ubihzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwLAotCQkJICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNyY19hZGRyLAotCQkJICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9hZGRyLCBpbnQgbm9uX2Jsb2NraW5nKQotewotCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7Ci0Jc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gYmVpc2NzaV9lcC0+cGhiYTsKLQlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqbWNjcSA9ICZwaGJhLT5jdHJsLm1jY19vYmoucTsKLQlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOwotCXN0cnVjdCB0Y3BfY29ubmVjdF9hbmRfb2ZmbG9hZF9vdXQgKnB0Y3BjbmN0X291dDsKLQl1bnNpZ25lZCBzaG9ydCBzdGF0dXMsIGV4dGRfc3RhdHVzOwotCXVuc2lnbmVkIGludCB0YWcsIHdyYl9udW07Ci0JaW50IHJldCA9IC0xOwotCi0JU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9vcGVuX2Nvbm5cbiIpOwotCWJlaXNjc2lfZXAtPmVwX2NpZCA9IGJlaXNjc2lfZ2V0X2NpZChwaGJhKTsKLQlpZiAoYmVpc2NzaV9lcC0+ZXBfY2lkID09IDB4RkZGRikgewotCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJObyBmcmVlIGNpZCBhdmFpbGFibGVcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX29wZW5fY29ubiwgZXBfY2lkPSVkICIsCi0JCSBiZWlzY3NpX2VwLT5lcF9jaWQpOwotCXBoYmEtPmVwX2FycmF5W2JlaXNjc2lfZXAtPmVwX2NpZCAtCi0JCSAgICAgICBwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0XSA9IGVwOwotCWlmIChiZWlzY3NpX2VwLT5lcF9jaWQgPiAocGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydCArCi0JCQkJICBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCAqIDIpKSB7Ci0JCVNFX0RFQlVHKERCR19MVkxfMSwgIkZhaWxlZCBpbiBhbGxvY2F0ZSBpc2NzaSBjaWRcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWJlaXNjc2lfZXAtPmNpZF92bGQgPSAwOwotCXRhZyA9IG1nbXRfb3Blbl9jb25uZWN0aW9uKHBoYmEsIGRzdF9hZGRyLCBiZWlzY3NpX2VwKTsKLQlpZiAoIXRhZykgewotCQlTRV9ERUJVRyhEQkdfTFZMXzEsCi0JCQkgIm1nbXRfb3Blbl9jb25uZWN0aW9uIEZhaWxlZCBmb3IgY2lkPSVkIFxuIiwKLQkJCSBiZWlzY3NpX2VwLT5lcF9jaWQpOwotCX0gZWxzZSB7Ci0JCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShwaGJhLT5jdHJsLm1jY193YWl0W3RhZ10sCi0JCQkJCSBwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSk7Ci0JfQotCXdyYl9udW0gPSAocGhiYS0+Y3RybC5tY2NfbnVtdGFnW3RhZ10gJiAweDAwRkYwMDAwKSA+PiAxNjsKLQlleHRkX3N0YXR1cyA9IChwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSAmIDB4MDAwMEZGMDApID4+IDg7Ci0Jc3RhdHVzID0gcGhiYS0+Y3RybC5tY2NfbnVtdGFnW3RhZ10gJiAweDAwMDAwMEZGOwotCWlmIChzdGF0dXMgfHwgZXh0ZF9zdGF0dXMpIHsKLQkJU0VfREVCVUcoREJHX0xWTF8xLCAibWdtdF9vcGVuX2Nvbm5lY3Rpb24gRmFpbGVkIgotCQkJCSAgICAiIHN0YXR1cyA9ICVkIGV4dGRfc3RhdHVzID0gJWQgXG4iLAotCQkJCSAgICBzdGF0dXMsIGV4dGRfc3RhdHVzKTsKLQkJZnJlZV9tY2NfdGFnKCZwaGJhLT5jdHJsLCB0YWcpOwotCQlyZXR1cm4gLTE7Ci0JfSBlbHNlIHsKLQkJd3JiID0gcXVldWVfZ2V0X3dyYihtY2NxLCB3cmJfbnVtKTsKLQkJZnJlZV9tY2NfdGFnKCZwaGJhLT5jdHJsLCB0YWcpOwotCi0JCXB0Y3BjbmN0X291dCA9IAllbWJlZGRlZF9wYXlsb2FkKHdyYik7Ci0JCWJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKLQkJYmVpc2NzaV9lcC0+ZndfaGFuZGxlID0gcHRjcGNuY3Rfb3V0LT5jb25uZWN0aW9uX2hhbmRsZTsKLQkJYmVpc2NzaV9lcC0+Y2lkX3ZsZCA9IDE7Ci0JCVNFX0RFQlVHKERCR19MVkxfOCwgIm1nbXRfb3Blbl9jb25uZWN0aW9uIFN1Y2Nlc3NcbiIpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCiAgKiBiZWlzY3NpX3B1dF9jaWQgLSBGcmVlIHRoZSBjaWQKICAqIEBwaGJhOiBUaGUgcGhiYSBmb3Igd2hpY2ggdGhlIGNpZCBpcyBiZWluZyBmcmVlZAogICogQGNpZDogVGhlIGNpZCB0byBmcmVlCkBAIC01MzYsNiArNDcxLDEwMyBAQAogfQogCiAvKioKKyAqIGJlaXNjc2lfb3Blbl9jb25uIC0gQXNrIEZXIHRvIG9wZW4gYSBUQ1AgY29ubmVjdGlvbgorICogQGVwOgllbmRwb2ludCB0byBiZSB1c2VkCisgKiBAc3JjX2FkZHI6IFRoZSBzb3VyY2UgSVAgYWRkcmVzcworICogQGRzdF9hZGRyOiBUaGUgRGVzdGluYXRpb24gIElQIGFkZHJlc3MKKyAqCisgKiBBc2tzIHRoZSBGVyB0byBvcGVuIGEgVENQIGNvbm5lY3Rpb24KKyAqLworc3RhdGljIGludCBiZWlzY3NpX29wZW5fY29ubihzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwLAorCQkJICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNyY19hZGRyLAorCQkJICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9hZGRyLCBpbnQgbm9uX2Jsb2NraW5nKQoreworCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gYmVpc2NzaV9lcC0+cGhiYTsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqbWNjcSA9ICZwaGJhLT5jdHJsLm1jY19vYmoucTsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOworCXN0cnVjdCB0Y3BfY29ubmVjdF9hbmRfb2ZmbG9hZF9vdXQgKnB0Y3BjbmN0X291dDsKKwl1bnNpZ25lZCBzaG9ydCBzdGF0dXMsIGV4dGRfc3RhdHVzOworCXN0cnVjdCBiZV9kbWFfbWVtIG5vbmVtYl9jbWQ7CisJdW5zaWduZWQgaW50IHRhZywgd3JiX251bTsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfb3Blbl9jb25uXG4iKTsKKwliZWlzY3NpX2VwLT5lcF9jaWQgPSBiZWlzY3NpX2dldF9jaWQocGhiYSk7CisJaWYgKGJlaXNjc2lfZXAtPmVwX2NpZCA9PSAweEZGRkYpIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiTm8gZnJlZSBjaWQgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9vcGVuX2Nvbm4sIGVwX2NpZD0lZFxuIiwKKwkJIGJlaXNjc2lfZXAtPmVwX2NpZCk7CisJcGhiYS0+ZXBfYXJyYXlbYmVpc2NzaV9lcC0+ZXBfY2lkIC0KKwkJICAgICAgIHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnRdID0gZXA7CisJaWYgKGJlaXNjc2lfZXAtPmVwX2NpZCA+IChwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0ICsKKwkJCQkgIHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsICogMikpIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiRmFpbGVkIGluIGFsbG9jYXRlIGlzY3NpIGNpZFxuIik7CisJCWJlaXNjc2lfcHV0X2NpZChwaGJhLCBiZWlzY3NpX2VwLT5lcF9jaWQpOworCQlnb3RvIGZyZWVfZXA7CisJfQorCisJYmVpc2NzaV9lcC0+Y2lkX3ZsZCA9IDA7CisJbm9uZW1iX2NtZC52YSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBoYmEtPmN0cmwucGRldiwKKwkJCQlzaXplb2Yoc3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX2luKSwKKwkJCQkmbm9uZW1iX2NtZC5kbWEpOworCWlmIChub25lbWJfY21kLnZhID09IE5VTEwpIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLAorCQkJICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBtZ210X29wZW5fY29ubmVjdGlvbiIKKwkJCSAiXG4iKTsKKwkJYmVpc2NzaV9wdXRfY2lkKHBoYmEsIGJlaXNjc2lfZXAtPmVwX2NpZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlub25lbWJfY21kLnNpemUgPSBzaXplb2Yoc3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX2luKTsKKwltZW1zZXQobm9uZW1iX2NtZC52YSwgMCwgbm9uZW1iX2NtZC5zaXplKTsKKwl0YWcgPSBtZ210X29wZW5fY29ubmVjdGlvbihwaGJhLCBkc3RfYWRkciwgYmVpc2NzaV9lcCwgJm5vbmVtYl9jbWQpOworCWlmICghdGFnKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCSAibWdtdF9vcGVuX2Nvbm5lY3Rpb24gRmFpbGVkIGZvciBjaWQ9JWRcbiIsCisJCQkgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKKwkJYmVpc2NzaV9wdXRfY2lkKHBoYmEsIGJlaXNjc2lfZXAtPmVwX2NpZCk7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocGhiYS0+Y3RybC5wZGV2LCBub25lbWJfY21kLnNpemUsCisJCQkJICAgIG5vbmVtYl9jbWQudmEsIG5vbmVtYl9jbWQuZG1hKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfSBlbHNlIHsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHBoYmEtPmN0cmwubWNjX3dhaXRbdGFnXSwKKwkJCQkJIHBoYmEtPmN0cmwubWNjX251bXRhZ1t0YWddKTsKKwl9CisJd3JiX251bSA9IChwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSAmIDB4MDBGRjAwMDApID4+IDE2OworCWV4dGRfc3RhdHVzID0gKHBoYmEtPmN0cmwubWNjX251bXRhZ1t0YWddICYgMHgwMDAwRkYwMCkgPj4gODsKKwlzdGF0dXMgPSBwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSAmIDB4MDAwMDAwRkY7CisJaWYgKHN0YXR1cyB8fCBleHRkX3N0YXR1cykgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJtZ210X29wZW5fY29ubmVjdGlvbiBGYWlsZWQiCisJCQkJICAgICIgc3RhdHVzID0gJWQgZXh0ZF9zdGF0dXMgPSAlZFxuIiwKKwkJCQkgICAgc3RhdHVzLCBleHRkX3N0YXR1cyk7CisJCWJlaXNjc2lfcHV0X2NpZChwaGJhLCBiZWlzY3NpX2VwLT5lcF9jaWQpOworCQlmcmVlX21jY190YWcoJnBoYmEtPmN0cmwsIHRhZyk7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocGhiYS0+Y3RybC5wZGV2LCBub25lbWJfY21kLnNpemUsCisJCQkgICAgbm9uZW1iX2NtZC52YSwgbm9uZW1iX2NtZC5kbWEpOworCQlnb3RvIGZyZWVfZXA7CisJfSBlbHNlIHsKKwkJd3JiID0gcXVldWVfZ2V0X3dyYihtY2NxLCB3cmJfbnVtKTsKKwkJZnJlZV9tY2NfdGFnKCZwaGJhLT5jdHJsLCB0YWcpOworCisJCXB0Y3BjbmN0X291dCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwkJYmVpc2NzaV9lcCA9IGVwLT5kZF9kYXRhOworCQliZWlzY3NpX2VwLT5md19oYW5kbGUgPSBwdGNwY25jdF9vdXQtPmNvbm5lY3Rpb25faGFuZGxlOworCQliZWlzY3NpX2VwLT5jaWRfdmxkID0gMTsKKwkJU0VfREVCVUcoREJHX0xWTF84LCAibWdtdF9vcGVuX2Nvbm5lY3Rpb24gU3VjY2Vzc1xuIik7CisJfQorCWJlaXNjc2lfcHV0X2NpZChwaGJhLCBiZWlzY3NpX2VwLT5lcF9jaWQpOworCXBjaV9mcmVlX2NvbnNpc3RlbnQocGhiYS0+Y3RybC5wZGV2LCBub25lbWJfY21kLnNpemUsCisJCQkgICAgbm9uZW1iX2NtZC52YSwgbm9uZW1iX2NtZC5kbWEpOworCXJldHVybiAwOworCitmcmVlX2VwOgorCWJlaXNjc2lfZnJlZV9lcChiZWlzY3NpX2VwKTsKKwlyZXR1cm4gLUVCVVNZOworfQorCisvKioKICAqIGJlaXNjc2lfZXBfY29ubmVjdCAtIEFzayBjaGlwIHRvIGNyZWF0ZSBUQ1AgQ29ubgogICogQHNjc2lfaG9zdDogUG9pbnRlciB0byBzY3NpX2hvc3Qgc3RydWN0dXJlCiAgKiBAZHN0X2FkZHI6IFRoZSBJUCBhZGRyZXNzIG9mIFRhcmdldApAQCAtNTUyLDE4ICs1ODQsMTggQEAKIAlzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwOwogCWludCByZXQ7CiAKLQlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2VwX2Nvbm5lY3QgXG4iKTsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2VwX2Nvbm5lY3RcbiIpOwogCWlmIChzaG9zdCkKIAkJcGhiYSA9IGlzY3NpX2hvc3RfcHJpdihzaG9zdCk7CiAJZWxzZSB7CiAJCXJldCA9IC1FTlhJTzsKLQkJU0VfREVCVUcoREJHX0xWTF8xLCAic2hvc3QgaXMgTlVMTCBcbiIpOworCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJzaG9zdCBpcyBOVUxMXG4iKTsKIAkJcmV0dXJuIEVSUl9QVFIocmV0KTsKIAl9CiAKIAlpZiAocGhiYS0+c3RhdGUgIT0gQkVfQURBUFRFUl9VUCkgewogCQlyZXQgPSAtRUJVU1k7Ci0JCVNFX0RFQlVHKERCR19MVkxfMSwgIlRoZSBBZGFwdGVyIHN0YXRlIGlzIE5vdCBVUCBcbiIpOworCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJUaGUgQWRhcHRlciBzdGF0ZSBpcyBOb3QgVVBcbiIpOwogCQlyZXR1cm4gRVJSX1BUUihyZXQpOwogCX0KIApAQCAtNTc2LDE2ICs2MDgsMTYgQEAKIAliZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CiAJYmVpc2NzaV9lcC0+cGhiYSA9IHBoYmE7CiAJYmVpc2NzaV9lcC0+b3BlbmlzY3NpX2VwID0gZXA7Ci0JaWYgKGJlaXNjc2lfb3Blbl9jb25uKGVwLCBOVUxMLCBkc3RfYWRkciwgbm9uX2Jsb2NraW5nKSkgewotCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJGYWlsZWQgaW4gYmVpc2NzaV9vcGVuX2Nvbm4gXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKKwlyZXQgPSBiZWlzY3NpX29wZW5fY29ubihlcCwgTlVMTCwgZHN0X2FkZHIsIG5vbl9ibG9ja2luZyk7CisJaWYgKHJldCkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJGYWlsZWQgaW4gYmVpc2NzaV9vcGVuX2Nvbm5cbiIpOwogCQlnb3RvIGZyZWVfZXA7CiAJfQogCiAJcmV0dXJuIGVwOwogCiBmcmVlX2VwOgotCWJlaXNjc2lfZnJlZV9lcChiZWlzY3NpX2VwKTsKKwlpc2NzaV9kZXN0cm95X2VuZHBvaW50KGVwKTsKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCkBAIC02MjAsOSArNjUyLDkgQEAKIAogCXRhZyA9IG1nbXRfdXBsb2FkX2Nvbm5lY3Rpb24ocGhiYSwgYmVpc2NzaV9lcC0+ZXBfY2lkLCBmbGFnKTsKIAlpZiAoIXRhZykgewotCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJ1cGxvYWQgZmFpbGVkIGZvciBjaWQgMHgleCIsCisJCVNFX0RFQlVHKERCR19MVkxfOCwgInVwbG9hZCBmYWlsZWQgZm9yIGNpZCAweCV4XG4iLAogCQkJIGJlaXNjc2lfZXAtPmVwX2NpZCk7Ci0JCXJldCA9IC0xOworCQlyZXQgPSAtRUFHQUlOOwogCX0gZWxzZSB7CiAJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShwaGJhLT5jdHJsLm1jY193YWl0W3RhZ10sCiAJCQkJCSBwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSk7CkBAIC02MzIsMzAgKzY2NCw2IEBACiB9CiAKIC8qKgotICogYmVpc2NzaV9lcF9kaXNjb25uZWN0IC0gVGVhcnMgZG93biB0aGUgVENQIGNvbm5lY3Rpb24KLSAqIEBlcDoJZW5kcG9pbnQgdG8gYmUgdXNlZAotICoKLSAqIFRlYXJzIGRvd24gdGhlIFRDUCBjb25uZWN0aW9uCi0gKi8KLXZvaWQgYmVpc2NzaV9lcF9kaXNjb25uZWN0KHN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXApCi17Ci0Jc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uOwotCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwOwotCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYTsKLQotCWJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKLQlwaGJhID0gYmVpc2NzaV9lcC0+cGhiYTsKLQlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2VwX2Rpc2Nvbm5lY3QgZm9yIGVwX2NpZCA9ICVkXG4iLAotCQkJICAgICBiZWlzY3NpX2VwLT5lcF9jaWQpOwotCi0JaWYgKGJlaXNjc2lfZXAtPmNvbm4pIHsKLQkJYmVpc2NzaV9jb25uID0gYmVpc2NzaV9lcC0+Y29ubjsKLQkJaXNjc2lfc3VzcGVuZF9xdWV1ZShiZWlzY3NpX2Nvbm4tPmNvbm4pOwotCX0KLQotfQotCi0vKioKICAqIGJlaXNjc2lfdW5iaW5kX2Nvbm5fdG9fY2lkIC0gVW5iaW5kIHRoZSBiZWlzY3NpX2Nvbm4gZnJvbSBwaGJhIGNvbm4gdGFibGUKICAqIEBwaGJhOiBUaGUgcGhiYSBpbnN0YW5jZQogICogQGNpZDogVGhlIGNpZCB0byBmcmVlCkBAIC02NjYsNTAgKzY3NCw1NyBAQAogCWlmIChwaGJhLT5jb25uX3RhYmxlW2NpZF0pCiAJCXBoYmEtPmNvbm5fdGFibGVbY2lkXSA9IE5VTEw7CiAJZWxzZSB7Ci0JCVNFX0RFQlVHKERCR19MVkxfOCwgIkNvbm5lY3Rpb24gdGFibGUgTm90IG9jY3VwaWVkLiBcbiIpOworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJDb25uZWN0aW9uIHRhYmxlIE5vdCBvY2N1cGllZC5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogYmVpc2NzaV9jb25uX3N0b3AgLSBJbnZhbGlkYXRlIGFuZCBzdG9wIHRoZSBjb25uZWN0aW9uCi0gKiBAY2xzX2Nvbm46IHBvaW50ZXIgdG8gZ2V0IGlzY3NpX2Nvbm4KLSAqIEBmbGFnOiBUaGUgdHlwZSBvZiBjb25uZWN0aW9uIGNsb3N1cmUKKyAqIGJlaXNjc2lfZXBfZGlzY29ubmVjdCAtIFRlYXJzIGRvd24gdGhlIFRDUCBjb25uZWN0aW9uCisgKiBAZXA6CWVuZHBvaW50IHRvIGJlIHVzZWQKKyAqCisgKiBUZWFycyBkb3duIHRoZSBUQ1AgY29ubmVjdGlvbgogICovCi12b2lkIGJlaXNjc2lfY29ubl9zdG9wKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sIGludCBmbGFnKQordm9pZCBiZWlzY3NpX2VwX2Rpc2Nvbm5lY3Qoc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCkKIHsKLQlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IGNsc19jb25uLT5kZF9kYXRhOwotCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiA9IGNvbm4tPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uOwogCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwOwotCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGlzY3NpX3Nlc3Npb25fdG9fc2hvc3Qoc2Vzc2lvbi0+Y2xzX3Nlc3Npb24pOwotCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGlzY3NpX2hvc3RfcHJpdihzaG9zdCk7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhOwogCXVuc2lnbmVkIGludCB0YWc7CiAJdW5zaWduZWQgc2hvcnQgc2F2ZWNmZ19mbGFnID0gQ01EX0lTQ1NJX1NFU1NJT05fU0FWRV9DRkdfT05fRkxBU0g7CiAKLQliZWlzY3NpX2VwID0gYmVpc2NzaV9jb25uLT5lcDsKLQlpZiAoIWJlaXNjc2lfZXApIHsKLQkJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9jb25uX3N0b3AgLCBubyBiZWlzY3NpX2VwXG4iKTsKKwliZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CisJcGhiYSA9IGJlaXNjc2lfZXAtPnBoYmE7CisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9lcF9kaXNjb25uZWN0IGZvciBlcF9jaWQgPSAlZFxuIiwKKwkJCSAgICAgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKKworCWlmICghYmVpc2NzaV9lcC0+Y29ubikgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2VwX2Rpc2Nvbm5lY3QsIG5vICIKKwkJCSAiYmVpc2NzaV9lcFxuIik7CiAJCXJldHVybjsKIAl9Ci0JU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9jb25uX3N0b3AgIGVwX2NpZCA9ICVkXG4iLAotCQkJICAgICBiZWlzY3NpX2VwLT5lcF9jaWQpOworCWJlaXNjc2lfY29ubiA9IGJlaXNjc2lfZXAtPmNvbm47CisJaXNjc2lfc3VzcGVuZF9xdWV1ZShiZWlzY3NpX2Nvbm4tPmNvbm4pOworCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9lcF9kaXNjb25uZWN0IGVwX2NpZCA9ICVkXG4iLAorCQkgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKKwogCXRhZyA9IG1nbXRfaW52YWxpZGF0ZV9jb25uZWN0aW9uKHBoYmEsIGJlaXNjc2lfZXAsCiAJCQkJCSAgICBiZWlzY3NpX2VwLT5lcF9jaWQsIDEsCiAJCQkJCSAgICBzYXZlY2ZnX2ZsYWcpOwogCWlmICghdGFnKSB7CiAJCVNFX0RFQlVHKERCR19MVkxfMSwKLQkJCSAibWdtdF9pbnZhbGlkYXRlX2Nvbm5lY3Rpb24gRmFpbGVkIGZvciBjaWQ9JWQgXG4iLAorCQkJICJtZ210X2ludmFsaWRhdGVfY29ubmVjdGlvbiBGYWlsZWQgZm9yIGNpZD0lZFxuIiwKIAkJCSAgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKIAl9IGVsc2UgewogCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocGhiYS0+Y3RybC5tY2Nfd2FpdFt0YWddLAogCQkJCQkgcGhiYS0+Y3RybC5tY2NfbnVtdGFnW3RhZ10pOwogCQlmcmVlX21jY190YWcoJnBoYmEtPmN0cmwsIHRhZyk7CiAJfQorCiAJYmVpc2NzaV9jbG9zZV9jb25uKGJlaXNjc2lfZXAsIENPTk5FQ1RJT05fVVBMT0FEX0dSQUNFRlVMKTsKIAliZWlzY3NpX2ZyZWVfZXAoYmVpc2NzaV9lcCk7Ci0JaXNjc2lfZGVzdHJveV9lbmRwb2ludChiZWlzY3NpX2VwLT5vcGVuaXNjc2lfZXApOwogCWJlaXNjc2lfdW5iaW5kX2Nvbm5fdG9fY2lkKHBoYmEsIGJlaXNjc2lfZXAtPmVwX2NpZCk7Ci0JaXNjc2lfY29ubl9zdG9wKGNsc19jb25uLCBmbGFnKTsKKwlpc2NzaV9kZXN0cm95X2VuZHBvaW50KGJlaXNjc2lfZXAtPm9wZW5pc2NzaV9lcCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuaCBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5oCmluZGV4IDFmNTEyYzIuLjg3MGNkYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5oCkBAIC01OSw4ICs1OSw2IEBACiAKIGludCBiZWlzY3NpX2Nvbm5fc3RhcnQoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubik7CiAKLXZvaWQgYmVpc2NzaV9jb25uX3N0b3Aoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubiwgaW50IGZsYWcpOwotCiBzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXBfY29ubmVjdChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwKIAkJCQkJICBzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9hZGRyLAogCQkJCQkgIGludCBub25fYmxvY2tpbmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uYyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmMKaW5kZXggZGQ1YjEwNS4uNzQzNmM1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uYworKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jCkBAIC00MSw2ICs0MSw4IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGJlX2lvcG9sbF9idWRnZXQgPSAxMDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYmVfbWF4X3BoeXNfc2l6ZSA9IDY0Owogc3RhdGljIHVuc2lnbmVkIGludCBlbmFibGVfbXNpeCA9IDE7CitzdGF0aWMgdW5zaWduZWQgaW50IGdjcmFzaG1vZGUgPSAwOworc3RhdGljIHVuc2lnbmVkIGludCBudW1faGJhID0gMDsKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGJlaXNjc2lfcGNpX2lkX3RhYmxlKTsKIE1PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQyAiICIgQlVJTERfU1RSKTsKQEAgLTY5LDYgKzcxLDcgQEAKIAlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmE7CiAJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb247CiAJc3RydWN0IGludmFsaWRhdGVfY29tbWFuZF90YWJsZSAqaW52X3RibDsKKwlzdHJ1Y3QgYmVfZG1hX21lbSBub25lbWJfY21kOwogCXVuc2lnbmVkIGludCBjaWQsIHRhZywgbnVtX2ludmFsaWRhdGU7CiAKIAljbHNfc2Vzc2lvbiA9IHN0YXJnZXRfdG9fc2Vzc2lvbihzY3NpX3RhcmdldChzYy0+ZGV2aWNlKSk7CkBAIC05OSwxOCArMTAyLDM0IEBACiAJaW52X3RibC0+Y2lkID0gY2lkOwogCWludl90YmwtPmljZCA9IGFib3J0ZWRfaW9fdGFzay0+cHNnbF9oYW5kbGUtPnNnbF9pbmRleDsKIAludW1faW52YWxpZGF0ZSA9IDE7Ci0JdGFnID0gbWdtdF9pbnZhbGlkYXRlX2ljZHMocGhiYSwgaW52X3RibCwgbnVtX2ludmFsaWRhdGUsIGNpZCk7CisJbm9uZW1iX2NtZC52YSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBoYmEtPmN0cmwucGRldiwKKwkJCQlzaXplb2Yoc3RydWN0IGludmFsaWRhdGVfY29tbWFuZHNfcGFyYW1zX2luKSwKKwkJCQkmbm9uZW1iX2NtZC5kbWEpOworCWlmIChub25lbWJfY21kLnZhID09IE5VTEwpIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLAorCQkJICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciIKKwkJCSAibWdtdF9pbnZhbGlkYXRlX2ljZHNcbiIpOworCQlyZXR1cm4gRkFJTEVEOworCX0KKwlub25lbWJfY21kLnNpemUgPSBzaXplb2Yoc3RydWN0IGludmFsaWRhdGVfY29tbWFuZHNfcGFyYW1zX2luKTsKKworCXRhZyA9IG1nbXRfaW52YWxpZGF0ZV9pY2RzKHBoYmEsIGludl90YmwsIG51bV9pbnZhbGlkYXRlLAorCQkJCSAgIGNpZCwgJm5vbmVtYl9jbWQpOwogCWlmICghdGFnKSB7CiAJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAogCQkJICAgICAibWdtdF9pbnZhbGlkYXRlX2ljZHMgY291bGQgbm90IGJlIgogCQkJICAgICAiIHN1Ym1pdHRlZFxuIik7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocGhiYS0+Y3RybC5wZGV2LCBub25lbWJfY21kLnNpemUsCisJCQkJICAgIG5vbmVtYl9jbWQudmEsIG5vbmVtYl9jbWQuZG1hKTsKKwogCQlyZXR1cm4gRkFJTEVEOwogCX0gZWxzZSB7CiAJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShwaGJhLT5jdHJsLm1jY193YWl0W3RhZ10sCiAJCQkJCSBwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSk7CiAJCWZyZWVfbWNjX3RhZygmcGhiYS0+Y3RybCwgdGFnKTsKIAl9Ci0KKwlwY2lfZnJlZV9jb25zaXN0ZW50KHBoYmEtPmN0cmwucGRldiwgbm9uZW1iX2NtZC5zaXplLAorCQkJICAgIG5vbmVtYl9jbWQudmEsIG5vbmVtYl9jbWQuZG1hKTsKIAlyZXR1cm4gaXNjc2lfZWhfYWJvcnQoc2MpOwogfQogCkBAIC0xMjQsNiArMTQzLDcgQEAKIAlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbjsKIAlzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKmNsc19zZXNzaW9uOwogCXN0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRfdGFibGUgKmludl90Ymw7CisJc3RydWN0IGJlX2RtYV9tZW0gbm9uZW1iX2NtZDsKIAl1bnNpZ25lZCBpbnQgY2lkLCB0YWcsIGksIG51bV9pbnZhbGlkYXRlOwogCWludCByYyA9IEZBSUxFRDsKIApAQCAtMTU4LDE4ICsxNzgsMzMgQEAKIAlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CiAJaW52X3RibCA9IHBoYmEtPmludl90Ymw7CiAKLQl0YWcgPSBtZ210X2ludmFsaWRhdGVfaWNkcyhwaGJhLCBpbnZfdGJsLCBudW1faW52YWxpZGF0ZSwgY2lkKTsKKwlub25lbWJfY21kLnZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGhiYS0+Y3RybC5wZGV2LAorCQkJCXNpemVvZihzdHJ1Y3QgaW52YWxpZGF0ZV9jb21tYW5kc19wYXJhbXNfaW4pLAorCQkJCSZub25lbWJfY21kLmRtYSk7CisJaWYgKG5vbmVtYl9jbWQudmEgPT0gTlVMTCkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIgorCQkJICJtZ210X2ludmFsaWRhdGVfaWNkc1xuIik7CisJCXJldHVybiBGQUlMRUQ7CisJfQorCW5vbmVtYl9jbWQuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW52YWxpZGF0ZV9jb21tYW5kc19wYXJhbXNfaW4pOworCW1lbXNldChub25lbWJfY21kLnZhLCAwLCBub25lbWJfY21kLnNpemUpOworCXRhZyA9IG1nbXRfaW52YWxpZGF0ZV9pY2RzKHBoYmEsIGludl90YmwsIG51bV9pbnZhbGlkYXRlLAorCQkJCSAgIGNpZCwgJm5vbmVtYl9jbWQpOwogCWlmICghdGFnKSB7CiAJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAogCQkJICAgICAibWdtdF9pbnZhbGlkYXRlX2ljZHMgY291bGQgbm90IGJlIgogCQkJICAgICAiIHN1Ym1pdHRlZFxuIik7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocGhiYS0+Y3RybC5wZGV2LCBub25lbWJfY21kLnNpemUsCisJCQkJICAgIG5vbmVtYl9jbWQudmEsIG5vbmVtYl9jbWQuZG1hKTsKIAkJcmV0dXJuIEZBSUxFRDsKIAl9IGVsc2UgewogCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocGhiYS0+Y3RybC5tY2Nfd2FpdFt0YWddLAogCQkJCQkgcGhiYS0+Y3RybC5tY2NfbnVtdGFnW3RhZ10pOwogCQlmcmVlX21jY190YWcoJnBoYmEtPmN0cmwsIHRhZyk7CiAJfQotCisJcGNpX2ZyZWVfY29uc2lzdGVudChwaGJhLT5jdHJsLnBkZXYsIG5vbmVtYl9jbWQuc2l6ZSwKKwkJCSAgICBub25lbWJfY21kLnZhLCBub25lbWJfY21kLmRtYSk7CiAJcmV0dXJuIGlzY3NpX2VoX2RldmljZV9yZXNldChzYyk7CiB1bmxvY2s6CiAJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOwpAQCAtMjE2LDcgKzI1MSw3IEBACiAJc2hvc3QgPSBpc2NzaV9ob3N0X2FsbG9jKCZiZWlzY3NpX3NodCwgc2l6ZW9mKCpwaGJhKSwgMCk7CiAJaWYgKCFzaG9zdCkgewogCQlkZXZfZXJyKCZwY2lkZXYtPmRldiwgImJlaXNjc2lfaGJhX2FsbG9jIC0iCi0JCQkiaXNjc2lfaG9zdF9hbGxvYyBmYWlsZWQgXG4iKTsKKwkJCSJpc2NzaV9ob3N0X2FsbG9jIGZhaWxlZFxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAlzaG9zdC0+ZG1hX2JvdW5kYXJ5ID0gcGNpZGV2LT5kbWFfbWFzazsKQEAgLTM3MSw3ICs0MDYsNyBAQAogCQkJCSAgICArIEJFMl9UTUZTKSAvIDUxMikgKyAxKSAqIDUxMjsKIAlwaGJhLT5wYXJhbXMubnVtX2VxX2VudHJpZXMgPSAocGhiYS0+cGFyYW1zLm51bV9lcV9lbnRyaWVzIDwgMTAyNCkKIAkJCQk/IDEwMjQgOiBwaGJhLT5wYXJhbXMubnVtX2VxX2VudHJpZXM7Ci0JU0VfREVCVUcoREJHX0xWTF84LCAicGhiYS0+cGFyYW1zLm51bV9lcV9lbnRyaWVzPSVkIFxuIiwKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJwaGJhLT5wYXJhbXMubnVtX2VxX2VudHJpZXM9JWRcbiIsCiAJCQkgICAgIHBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllcyk7CiAJcGhiYS0+cGFyYW1zLm51bV9jcV9lbnRyaWVzID0KIAkgICAgKCgoQkUyX0NNRFNfUEVSX0NYTiAqIDIgKyAgcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9jb3VudCAqIDIKQEAgLTYxNiw3ICs2NTEsNyBAQAogCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXYgPSBwaGJhLT5wY2lkZXY7CiAJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOwogCXN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKnBod2lfY29udGV4dDsKLQlpbnQgcmV0LCBtc2l4X3ZlYywgaSA9IDA7CisJaW50IHJldCwgbXNpeF92ZWMsIGksIGo7CiAJY2hhciBkZXNjWzMyXTsKIAogCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOwpAQCAtNjI4LDEwICs2NjMsMjUgQEAKIAkJCW1zaXhfdmVjID0gcGhiYS0+bXNpeF9lbnRyaWVzW2ldLnZlY3RvcjsKIAkJCXJldCA9IHJlcXVlc3RfaXJxKG1zaXhfdmVjLCBiZV9pc3JfbXNpeCwgMCwgZGVzYywKIAkJCQkJICAmcGh3aV9jb250ZXh0LT5iZV9lcVtpXSk7CisJCQlpZiAocmV0KSB7CisJCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCQkJICAgICAiYmVpc2NzaV9pbml0X2lycXMtRmFpbGVkIHRvIgorCQkJCQkgICAgICJyZWdpc3RlciBtc2l4IGZvciBpID0gJWRcbiIsIGkpOworCQkJCWlmICghaSkKKwkJCQkJcmV0dXJuIHJldDsKKwkJCQlnb3RvIGZyZWVfbXNpeF9pcnFzOworCQkJfQogCQl9CiAJCW1zaXhfdmVjID0gcGhiYS0+bXNpeF9lbnRyaWVzW2ldLnZlY3RvcjsKIAkJcmV0ID0gcmVxdWVzdF9pcnEobXNpeF92ZWMsIGJlX2lzcl9tY2MsIDAsICJiZWlzY3NpX21zaXhfbWNjIiwKIAkJCQkgICZwaHdpX2NvbnRleHQtPmJlX2VxW2ldKTsKKwkJaWYgKHJldCkgeworCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgImJlaXNjc2lfaW5pdF9pcnFzLSIKKwkJCQkgICAgICJGYWlsZWQgdG8gcmVnaXN0ZXIgYmVpc2NzaV9tc2l4X21jY1xuIik7CisJCQlpKys7CisJCQlnb3RvIGZyZWVfbXNpeF9pcnFzOworCQl9CisKIAl9IGVsc2UgewogCQlyZXQgPSByZXF1ZXN0X2lycShwY2lkZXYtPmlycSwgYmVfaXNyLCBJUlFGX1NIQVJFRCwKIAkJCQkgICJiZWlzY3NpIiwgcGhiYSk7CkBAIC02NDIsNiArNjkyLDEwIEBACiAJCX0KIAl9CiAJcmV0dXJuIDA7CitmcmVlX21zaXhfaXJxczoKKwlmb3IgKGogPSBpIC0gMTsgaiA9PSAwOyBqKyspCisJCWZyZWVfaXJxKG1zaXhfdmVjLCAmcGh3aV9jb250ZXh0LT5iZV9lcVtqXSk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgaHdpX3JpbmdfY3FfZGIoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLApAQCAtNjkyLDcgKzc0Niw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAotCQkJICAgICAiVW5yZWNvZ25pemVkIG9wY29kZSAweCV4IGluIGFzeW5jIG1zZyBcbiIsCisJCQkgICAgICJVbnJlY29nbml6ZWQgb3Bjb2RlIDB4JXggaW4gYXN5bmMgbXNnXG4iLAogCQkJICAgICAocHBkdS0+CiAJCQkgICAgIGR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3BkdV9iYXNlLCBvcGNvZGUpIC8gMzJdCiAJCQkJCQkmIFBEVUJBU0VfT1BDT0RFX01BU0spKTsKQEAgLTcxMSw3ICs3NjUsNyBAQAogCiAJaWYgKHBoYmEtPmlvX3NnbF9obmRsX2F2YmwpIHsKIAkJU0VfREVCVUcoREJHX0xWTF84LAotCQkJICJJbiBhbGxvY19pb19zZ2xfaGFuZGxlLGlvX3NnbF9hbGxvY19pbmRleD0lZCBcbiIsCisJCQkgIkluIGFsbG9jX2lvX3NnbF9oYW5kbGUsaW9fc2dsX2FsbG9jX2luZGV4PSVkXG4iLAogCQkJIHBoYmEtPmlvX3NnbF9hbGxvY19pbmRleCk7CiAJCXBzZ2xfaGFuZGxlID0gcGhiYS0+aW9fc2dsX2huZGxfYmFzZVtwaGJhLT4KIAkJCQkJCWlvX3NnbF9hbGxvY19pbmRleF07CkBAIC03MzAsNyArNzg0LDcgQEAKIHN0YXRpYyB2b2lkCiBmcmVlX2lvX3NnbF9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCBzdHJ1Y3Qgc2dsX2hhbmRsZSAqcHNnbF9oYW5kbGUpCiB7Ci0JU0VfREVCVUcoREJHX0xWTF84LCAiSW4gZnJlZV8saW9fc2dsX2ZyZWVfaW5kZXg9JWQgXG4iLAorCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGZyZWVfLGlvX3NnbF9mcmVlX2luZGV4PSVkXG4iLAogCQkgcGhiYS0+aW9fc2dsX2ZyZWVfaW5kZXgpOwogCWlmIChwaGJhLT5pb19zZ2xfaG5kbF9iYXNlW3BoYmEtPmlvX3NnbF9mcmVlX2luZGV4XSkgewogCQkvKgpAQCAtNzM5LDcgKzc5Myw3IEBACiAJCSAqLwogCQkgU0VfREVCVUcoREJHX0xWTF84LAogCQkJICJEb3VibGUgRnJlZSBpbiBJTyBTR0wgaW9fc2dsX2ZyZWVfaW5kZXg9JWQsIgotCQkJICJ2YWx1ZSB0aGVyZT0lcCBcbiIsIHBoYmEtPmlvX3NnbF9mcmVlX2luZGV4LAorCQkJICJ2YWx1ZSB0aGVyZT0lcFxuIiwgcGhiYS0+aW9fc2dsX2ZyZWVfaW5kZXgsCiAJCQkgcGhiYS0+aW9fc2dsX2huZGxfYmFzZVtwaGJhLT5pb19zZ2xfZnJlZV9pbmRleF0pOwogCQlyZXR1cm47CiAJfQpAQCAtODA0LDcgKzg1OCw3IEBACiAKIAlTRV9ERUJVRyhEQkdfTFZMXzgsCiAJCSAiRlJFRSBXUkI6IHB3cmJfaGFuZGxlPSVwIGZyZWVfaW5kZXg9MHgleCIKLQkJICJ3cmJfaGFuZGxlc19hdmFpbGFibGU9JWQgXG4iLAorCQkgIndyYl9oYW5kbGVzX2F2YWlsYWJsZT0lZFxuIiwKIAkJIHB3cmJfaGFuZGxlLCBwd3JiX2NvbnRleHQtPmZyZWVfaW5kZXgsCiAJCSBwd3JiX2NvbnRleHQtPndyYl9oYW5kbGVzX2F2YWlsYWJsZSk7CiB9CkBAIC04MTYsNyArODcwLDcgQEAKIAlpZiAocGhiYS0+ZWhfc2dsX2huZGxfYXZibCkgewogCQlwc2dsX2hhbmRsZSA9IHBoYmEtPmVoX3NnbF9obmRsX2Jhc2VbcGhiYS0+ZWhfc2dsX2FsbG9jX2luZGV4XTsKIAkJcGhiYS0+ZWhfc2dsX2huZGxfYmFzZVtwaGJhLT5laF9zZ2xfYWxsb2NfaW5kZXhdID0gTlVMTDsKLQkJU0VfREVCVUcoREJHX0xWTF84LCAibWdtdF9zZ2xfYWxsb2NfaW5kZXg9JWQ9MHgleCBcbiIsCisJCVNFX0RFQlVHKERCR19MVkxfOCwgIm1nbXRfc2dsX2FsbG9jX2luZGV4PSVkPTB4JXhcbiIsCiAJCQkgcGhiYS0+ZWhfc2dsX2FsbG9jX2luZGV4LCBwaGJhLT5laF9zZ2xfYWxsb2NfaW5kZXgpOwogCQlwaGJhLT5laF9zZ2xfaG5kbF9hdmJsLS07CiAJCWlmIChwaGJhLT5laF9zZ2xfYWxsb2NfaW5kZXggPT0KQEAgLTgzNCw3ICs4ODgsNyBAQAogZnJlZV9tZ210X3NnbF9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCBzdHJ1Y3Qgc2dsX2hhbmRsZSAqcHNnbF9oYW5kbGUpCiB7CiAKLQlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiAgZnJlZV9tZ210X3NnbF9oYW5kbGUsZWhfc2dsX2ZyZWVfaW5kZXg9JWQgXG4iLAorCVNFX0RFQlVHKERCR19MVkxfOCwgIkluICBmcmVlX21nbXRfc2dsX2hhbmRsZSxlaF9zZ2xfZnJlZV9pbmRleD0lZFxuIiwKIAkJCSAgICAgcGhiYS0+ZWhfc2dsX2ZyZWVfaW5kZXgpOwogCWlmIChwaGJhLT5laF9zZ2xfaG5kbF9iYXNlW3BoYmEtPmVoX3NnbF9mcmVlX2luZGV4XSkgewogCQkvKgpAQCAtODQyLDcgKzg5Niw3IEBACiAJCSAqIGZhaWxlZCBpbiB4bWl0X3Rhc2sgb3IgYWxsb2NfcGR1LgogCQkgKi8KIAkJU0VfREVCVUcoREJHX0xWTF84LAotCQkJICJEb3VibGUgRnJlZSBpbiBlaCBTR0wgLGVoX3NnbF9mcmVlX2luZGV4PSVkIFxuIiwKKwkJCSAiRG91YmxlIEZyZWUgaW4gZWggU0dMICxlaF9zZ2xfZnJlZV9pbmRleD0lZFxuIiwKIAkJCSBwaGJhLT5laF9zZ2xfZnJlZV9pbmRleCk7CiAJCXJldHVybjsKIAl9CkBAIC0xMDgxLDcgKzExMzUsNyBAQAogCWNhc2UgSFdIX1RZUEVfTE9HSU46CiAJCVNFX0RFQlVHKERCR19MVkxfMSwKIAkJCSAiXHRcdCBObyBIV0hfVFlQRV9MT0dJTiBFeHBlY3RlZCBpbiBod2lfY29tcGxldGVfY21kIgotCQkJICItIFNvbGljaXRlZCBwYXRoIFxuIik7CisJCQkgIi0gU29saWNpdGVkIHBhdGhcbiIpOwogCQlicmVhazsKIAogCWNhc2UgSFdIX1RZUEVfTk9QOgpAQCAtMTE2NCw3ICsxMjE4LDcgQEAKIAlkZWZhdWx0OgogCQlwYnVzeV9saXN0ID0gTlVMTDsKIAkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCi0JCQkiVW5leHBlY3RlZCBjb2RlPSVkIFxuIiwKKwkJCSJVbmV4cGVjdGVkIGNvZGU9JWRcbiIsCiAJCQkgcGRwZHVfY3FlLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9pX3RfZHBkdV9jcWUsCiAJCQkJCWNvZGUpIC8gMzJdICYgUERVQ1FFX0NPREVfTUFTSyk7CiAJCXJldHVybiBOVUxMOwpAQCAtMTU1Miw3ICsxNjA2LDcgQEAKIAkJCWVsc2UKIAkJCQlTRV9ERUJVRyhEQkdfTFZMXzEsCiAJCQkJCSIgVW5zdXBwb3J0ZWQgQXN5bmMgRXZlbnQsIGZsYWdzIgotCQkJCQkiID0gMHglMDh4IFxuIiwgbWNjX2NvbXBsLT5mbGFncyk7CisJCQkJCSIgPSAweCUwOHhcbiIsIG1jY19jb21wbC0+ZmxhZ3MpOwogCQl9IGVsc2UgaWYgKG1jY19jb21wbC0+ZmxhZ3MgJiBDUUVfRkxBR1NfQ09NUExFVEVEX01BU0spIHsKIAkJCWJlX21jY19jb21wbF9wcm9jZXNzX2lzcigmcGhiYS0+Y3RybCwgbWNjX2NvbXBsKTsKIAkJCWF0b21pY19kZWMoJnBoYmEtPmN0cmwubWNjX29iai5xLnVzZWQpOwpAQCAtMTYxMSw3ICsxNjY1LDcgQEAKIAkJCWh3aV9jb21wbGV0ZV9jbWQoYmVpc2NzaV9jb25uLCBwaGJhLCBzb2wpOwogCQkJYnJlYWs7CiAJCWNhc2UgRFJJVkVSTVNHX05PVElGWToKLQkJCVNFX0RFQlVHKERCR19MVkxfOCwgIlJlY2VpdmVkIERSSVZFUk1TR19OT1RJRlkgXG4iKTsKKwkJCVNFX0RFQlVHKERCR19MVkxfOCwgIlJlY2VpdmVkIERSSVZFUk1TR19OT1RJRllcbiIpOwogCQkJZG1zZyA9IChzdHJ1Y3QgZG1zZ19jcWUgKilzb2w7CiAJCQlod2lfY29tcGxldGVfZHJ2cl9tc2dzKGJlaXNjc2lfY29ubiwgcGhiYSwgc29sKTsKIAkJCWJyZWFrOwpAQCAtMTc4Miw5ICsxODM2LDkgQEAKIAkJCXNnX2xlbiA9IHNnX2RtYV9sZW4oc2cpOwogCQkJYWRkciA9ICh1NjQpIHNnX2RtYV9hZGRyZXNzKHNnKTsKIAkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2FkZHJfbG8sIHB3cmIsCi0JCQkJCQkJKGFkZHIgJiAweEZGRkZGRkZGKSk7CisJCQkJCQkoKHUzMikoYWRkciAmIDB4RkZGRkZGRkYpKSk7CiAJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9hZGRyX2hpLCBwd3JiLAotCQkJCQkJCShhZGRyID4+IDMyKSk7CisJCQkJCQkJKCh1MzIpKGFkZHIgPj4gMzIpKSk7CiAJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9sZW4sIHB3cmIsCiAJCQkJCQkJc2dfbGVuKTsKIAkJCXNnZV9sZW4gPSBzZ19sZW47CkBAIC0xNzk0LDkgKzE4NDgsOSBAQAogCQkJc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7CiAJCQlhZGRyID0gKHU2NCkgc2dfZG1hX2FkZHJlc3Moc2cpOwogCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTFfYWRkcl9sbywgcHdyYiwKLQkJCQkJCQkoYWRkciAmIDB4RkZGRkZGRkYpKTsKKwkJCQkJCSgodTMyKShhZGRyICYgMHhGRkZGRkZGRikpKTsKIAkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UxX2FkZHJfaGksIHB3cmIsCi0JCQkJCQkJKGFkZHIgPj4gMzIpKTsKKwkJCQkJCQkoKHUzMikoYWRkciA+PiAzMikpKTsKIAkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UxX2xlbiwgcHdyYiwKIAkJCQkJCQlzZ19sZW4pOwogCQl9CkBAIC0xODcyLDkgKzE5MjYsOSBAQAogCQkJYWRkciA9IDA7CiAJCX0KIAkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfYWRkcl9sbywgcHdyYiwKLQkJCQkJCShhZGRyICYgMHhGRkZGRkZGRikpOworCQkJCQkJKCh1MzIpKGFkZHIgJiAweEZGRkZGRkZGKSkpOwogCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9hZGRyX2hpLCBwd3JiLAotCQkJCQkJKGFkZHIgPj4gMzIpKTsKKwkJCQkJCSgodTMyKShhZGRyID4+IDMyKSkpOwogCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9sZW4sIHB3cmIsCiAJCQkJCQl0YXNrLT5kYXRhX2NvdW50KTsKIApAQCAtMTkwNCw5ICsxOTU4LDkgQEAKIAkJcHNnbCsrOwogCQlpZiAodGFzay0+ZGF0YSkgewogCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfbG8sIHBzZ2wsCi0JCQkJCQkoYWRkciAmIDB4RkZGRkZGRkYpKTsKKwkJCQkJCSgodTMyKShhZGRyICYgMHhGRkZGRkZGRikpKTsKIAkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBhZGRyX2hpLCBwc2dsLAotCQkJCQkJKGFkZHIgPj4gMzIpKTsKKwkJCQkJCSgodTMyKShhZGRyID4+IDMyKSkpOwogCQl9CiAJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBsZW4sIHBzZ2wsIDB4MTA2KTsKIAl9CkBAIC0yMDU0LDcgKzIxMDgsOCBAQAogCQkJCQkgICAgbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaiAtIDFdLnNpemUsCiAJCQkJCSAgICBtZW1fZGVzY3ItPm1lbV9hcnJheVtqIC0gMV0uCiAJCQkJCSAgICB2aXJ0dWFsX2FkZHJlc3MsCi0JCQkJCSAgICBtZW1fZGVzY3ItPm1lbV9hcnJheVtqIC0gMV0uCisJCQkJCSAgICAodW5zaWduZWQgbG9uZyltZW1fZGVzY3ItPgorCQkJCQkgICAgbWVtX2FycmF5W2ogLSAxXS4KIAkJCQkJICAgIGJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3MpOwogCQl9CiAJCWlmIChpKSB7CkBAIC0yMjIzLDEwICsyMjc4LDEwIEBACiAJaWYgKG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzcykgewogCQlTRV9ERUJVRyhEQkdfTFZMXzgsCiAJCQkgImh3aV9pbml0X2FzeW5jX3BkdV9jdHggSFdJX01FTV9BU1lOQ19IRUFERVJfQlVGIgotCQkJICJ2YT0lcCBcbiIsIG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzcyk7CisJCQkgInZhPSVwXG4iLCBtZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3MpOwogCX0gZWxzZQogCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKLQkJCSAgICAgIk5vIFZpcnR1YWwgYWRkcmVzcyBcbiIpOworCQkJICAgICAiTm8gVmlydHVhbCBhZGRyZXNzXG4iKTsKIAogCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci52YV9iYXNlID0KIAkJCW1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzczsKQEAgLTIyMzksMTAgKzIyOTQsMTAgQEAKIAlpZiAobWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzKSB7CiAJCVNFX0RFQlVHKERCR19MVkxfOCwKIAkJCSAiaHdpX2luaXRfYXN5bmNfcGR1X2N0eCBIV0lfTUVNX0FTWU5DX0hFQURFUl9SSU5HIgotCQkJICJ2YT0lcCBcbiIsIG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzcyk7CisJCQkgInZhPSVwXG4iLCBtZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3MpOwogCX0gZWxzZQogCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKLQkJCSAgICAiTm8gVmlydHVhbCBhZGRyZXNzIFxuIik7CisJCQkgICAgIk5vIFZpcnR1YWwgYWRkcmVzc1xuIik7CiAJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLnJpbmdfYmFzZSA9CiAJCQltZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3M7CiAKQEAgLTIyNTEsMTAgKzIzMDYsMTAgQEAKIAlpZiAobWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzKSB7CiAJCVNFX0RFQlVHKERCR19MVkxfOCwKIAkJCSAiaHdpX2luaXRfYXN5bmNfcGR1X2N0eCBIV0lfTUVNX0FTWU5DX0hFQURFUl9IQU5ETEUiCi0JCQkgInZhPSVwIFxuIiwgbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzKTsKKwkJCSAidmE9JXBcbiIsIG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzcyk7CiAJfSBlbHNlCiAJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAotCQkJICAgICJObyBWaXJ0dWFsIGFkZHJlc3MgXG4iKTsKKwkJCSAgICAiTm8gVmlydHVhbCBhZGRyZXNzXG4iKTsKIAogCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5oYW5kbGVfYmFzZSA9CiAJCQltZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3M7CkBAIC0yMjY2LDEwICsyMzIxLDEwIEBACiAJaWYgKG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzcykgewogCQlTRV9ERUJVRyhEQkdfTFZMXzgsCiAJCQkgImh3aV9pbml0X2FzeW5jX3BkdV9jdHggSFdJX01FTV9BU1lOQ19EQVRBX0JVRiIKLQkJCSAidmE9JXAgXG4iLCBtZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3MpOworCQkJICJ2YT0lcFxuIiwgbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzKTsKIAl9IGVsc2UKIAkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCi0JCQkgICAgIk5vIFZpcnR1YWwgYWRkcmVzcyBcbiIpOworCQkJICAgICJObyBWaXJ0dWFsIGFkZHJlc3NcbiIpOwogCXBhc3luY19jdHgtPmFzeW5jX2RhdGEudmFfYmFzZSA9CiAJCQltZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3M7CiAJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5wYV9iYXNlLnUuYTY0LmFkZHJlc3MgPQpAQCAtMjI4MCwxMCArMjMzNSwxMCBAQAogCWlmIChtZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3MpIHsKIAkJU0VfREVCVUcoREJHX0xWTF84LAogCQkJICJod2lfaW5pdF9hc3luY19wZHVfY3R4IEhXSV9NRU1fQVNZTkNfREFUQV9SSU5HIgotCQkJICJ2YT0lcCBcbiIsIG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzcyk7CisJCQkgInZhPSVwXG4iLCBtZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3MpOwogCX0gZWxzZQogCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKLQkJCSAgICAgIk5vIFZpcnR1YWwgYWRkcmVzcyBcbiIpOworCQkJICAgICAiTm8gVmlydHVhbCBhZGRyZXNzXG4iKTsKIAogCXBhc3luY19jdHgtPmFzeW5jX2RhdGEucmluZ19iYXNlID0KIAkJCW1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzczsKQEAgLTIyOTIsNyArMjM0Nyw3IEBACiAJbWVtX2Rlc2NyICs9IEhXSV9NRU1fQVNZTkNfREFUQV9IQU5ETEU7CiAJaWYgKCFtZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3MpCiAJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAotCQkJICAgICJObyBWaXJ0dWFsIGFkZHJlc3MgXG4iKTsKKwkJCSAgICAiTm8gVmlydHVhbCBhZGRyZXNzXG4iKTsKIAogCXBhc3luY19jdHgtPmFzeW5jX2RhdGEuaGFuZGxlX2Jhc2UgPQogCQkJbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzOwpAQCAtMjM2NCw3ICsyNDE5LDcgQEAKIAlXQVJOX09OKCFzZ2wpOwogCiAJc2dsLT52YSA9IHZpcnR1YWxfYWRkcmVzczsKLQlzZ2wtPmRtYSA9IHBoeXNpY2FsX2FkZHJlc3M7CisJc2dsLT5kbWEgPSAodW5zaWduZWQgbG9uZylwaHlzaWNhbF9hZGRyZXNzOwogCXNnbC0+c2l6ZSA9IGxlbmd0aDsKIAogCXJldHVybiAwOwpAQCAtMjQ0Nyw3ICsyNTAyLDcgQEAKIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBiZV9lcV9lbnRyeSksIGVxX3ZhZGRyZXNzKTsKIAkJaWYgKHJldCkgewogCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKLQkJCQkgICAgICJiZV9maWxsX3F1ZXVlIEZhaWxlZCBmb3IgRVEgXG4iKTsKKwkJCQkgICAgICJiZV9maWxsX3F1ZXVlIEZhaWxlZCBmb3IgRVFcbiIpOwogCQkJZ290byBjcmVhdGVfZXFfZXJyb3I7CiAJCX0KIApAQCAtMjQ1Nyw3ICsyNTEyLDcgQEAKIAkJaWYgKHJldCkgewogCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKIAkJCQkgICAgICJiZWlzY3NpX2NtZF9lcV9jcmVhdGUiCi0JCQkJICAgICAiRmFpbGVkZm9yIEVRIFxuIik7CisJCQkJICAgICAiRmFpbGVkZm9yIEVRXG4iKTsKIAkJCWdvdG8gY3JlYXRlX2VxX2Vycm9yOwogCQl9CiAJCVNFX0RFQlVHKERCR19MVkxfOCwgImVxaWQgPSAlZFxuIiwgcGh3aV9jb250ZXh0LT5iZV9lcVtpXS5xLmlkKTsKQEAgLTI1MDUsNyArMjU2MCw3IEBACiAJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc29sX2NxZSksIGNxX3ZhZGRyZXNzKTsKIAkJaWYgKHJldCkgewogCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKLQkJCQkgICAgICJiZV9maWxsX3F1ZXVlIEZhaWxlZCBmb3IgSVNDU0kgQ1EgXG4iKTsKKwkJCQkgICAgICJiZV9maWxsX3F1ZXVlIEZhaWxlZCBmb3IgSVNDU0kgQ1FcbiIpOwogCQkJZ290byBjcmVhdGVfY3FfZXJyb3I7CiAJCX0KIApAQCAtMjUxNSw3ICsyNTcwLDcgQEAKIAkJaWYgKHJldCkgewogCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKIAkJCQkgICAgICJiZWlzY3NpX2NtZF9lcV9jcmVhdGUiCi0JCQkJICAgICAiRmFpbGVkIGZvciBJU0NTSSBDUSBcbiIpOworCQkJCSAgICAgIkZhaWxlZCBmb3IgSVNDU0kgQ1FcbiIpOwogCQkJZ290byBjcmVhdGVfY3FfZXJyb3I7CiAJCX0KIAkJU0VfREVCVUcoREJHX0xWTF84LCAiaXNjc2kgY3FfaWQgaXMgJWQgZm9yIGVxX2lkICVkXG4iLApAQCAtMjU2NSw3ICsyNjIwLDggQEAKIAkJCSAgICAgImJlX2ZpbGxfcXVldWUgRmFpbGVkIGZvciBERUYgUERVIEhEUlxuIik7CiAJCXJldHVybiByZXQ7CiAJfQotCW1lbS0+ZG1hID0gbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaWR4XS5idXNfYWRkcmVzcy51LmE2NC5hZGRyZXNzOworCW1lbS0+ZG1hID0gKHVuc2lnbmVkIGxvbmcpbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaWR4XS4KKwkJCQkgIGJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3M7CiAJcmV0ID0gYmVfY21kX2NyZWF0ZV9kZWZhdWx0X3BkdV9xdWV1ZSgmcGhiYS0+Y3RybCwgY3EsIGRxLAogCQkJCQkgICAgICBkZWZfcGR1X3Jpbmdfc3osCiAJCQkJCSAgICAgIHBoYmEtPnBhcmFtcy5kZWZwZHVfaGRyX3N6KTsKQEAgLTI2MDksNyArMjY2NSw4IEBACiAJCQkgICAgICJiZV9maWxsX3F1ZXVlIEZhaWxlZCBmb3IgREVGIFBEVSBEQVRBXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JbWVtLT5kbWEgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLmJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3M7CisJbWVtLT5kbWEgPSAodW5zaWduZWQgbG9uZyltZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLgorCQkJCSAgYnVzX2FkZHJlc3MudS5hNjQuYWRkcmVzczsKIAlyZXQgPSBiZV9jbWRfY3JlYXRlX2RlZmF1bHRfcGR1X3F1ZXVlKCZwaGJhLT5jdHJsLCBjcSwgZGF0YXEsCiAJCQkJCSAgICAgIGRlZl9wZHVfcmluZ19zeiwKIAkJCQkJICAgICAgcGhiYS0+cGFyYW1zLmRlZnBkdV9kYXRhX3N6KTsKQEAgLTI2MjMsNyArMjY4MCw3IEBACiAJU0VfREVCVUcoREJHX0xWTF84LCAiaXNjc2kgZGVmIGRhdGEgaWQgaXMgJWRcbiIsCiAJCSBwaHdpX2NvbnRleHQtPmJlX2RlZl9kYXRhcS5pZCk7CiAJaHdpX3Bvc3RfYXN5bmNfYnVmZmVycyhwaGJhLCAwKTsKLQlTRV9ERUJVRyhEQkdfTFZMXzgsICJERUZBVUxUIFBEVSBEQVRBIFJJTkcgQ1JFQVRFRCBcbiIpOworCVNFX0RFQlVHKERCR19MVkxfOCwgIkRFRkFVTFQgUERVIERBVEEgUklORyBDUkVBVEVEXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjY1NSw3ICsyNzEyLDcgQEAKIAkJfQogCQlwbV9hcnIrKzsKIAl9Ci0JU0VfREVCVUcoREJHX0xWTF84LCAiUE9TVEVEIFBBR0VTIFxuIik7CisJU0VfREVCVUcoREJHX0xWTF84LCAiUE9TVEVEIFBBR0VTXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjY3OCw3ICsyNzM1LDcgQEAKIAltZW0tPnNpemUgPSBsZW4gKiBlbnRyeV9zaXplOwogCW1lbS0+dmEgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwaGJhLT5wY2lkZXYsIG1lbS0+c2l6ZSwgJm1lbS0+ZG1hKTsKIAlpZiAoIW1lbS0+dmEpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJbWVtc2V0KG1lbS0+dmEsIDAsIG1lbS0+c2l6ZSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNzUwLDYgKzI4MDcsNyBAQAogCQlpZiAoc3RhdHVzICE9IDApIHsKIAkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCiAJCQkJICAgICAid3JicSBjcmVhdGUgZmFpbGVkLiIpOworCQkJa2ZyZWUocHdyYl9hcnIpOwogCQkJcmV0dXJuIHN0YXR1czsKIAkJfQogCQlwaHdpX2N0cmxyLT53cmJfY29udGV4dFtpICogMl0uY2lkID0gcGh3aV9jb250ZXh0LT5iZV93cmJxW2ldLgpAQCAtMjg3Myw3ICsyOTMxLDcgQEAKIG1jY19jcV9mcmVlOgogCWJlX3F1ZXVlX2ZyZWUocGhiYSwgY3EpOwogZXJyOgotCXJldHVybiAtMTsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIGludCBmaW5kX251bV9jcHVzKHZvaWQpCkBAIC0yODg0LDcgKzI5NDIsNyBAQAogCWlmIChudW1fY3B1cyA+PSBNQVhfQ1BVUykKIAkJbnVtX2NwdXMgPSBNQVhfQ1BVUyAtIDE7CiAKLQlTRV9ERUJVRyhEQkdfTFZMXzgsICJudW1fY3B1cyA9ICVkIFxuIiwgbnVtX2NwdXMpOworCVNFX0RFQlVHKERCR19MVkxfOCwgIm51bV9jcHVzID0gJWRcbiIsIG51bV9jcHVzKTsKIAlyZXR1cm4gbnVtX2NwdXM7CiB9CiAKQEAgLTI5MDcsNyArMjk2NSw3IEBACiAKIAlzdGF0dXMgPSBiZWlzY3NpX2NyZWF0ZV9lcXMocGhiYSwgcGh3aV9jb250ZXh0KTsKIAlpZiAoc3RhdHVzICE9IDApIHsKLQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgIkVRIG5vdCBjcmVhdGVkIFxuIik7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJFUSBub3QgY3JlYXRlZFxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0yOTE4LDcgKzI5NzYsNyBAQAogCXN0YXR1cyA9IG1nbXRfY2hlY2tfc3VwcG9ydGVkX2Z3KGN0cmwsIHBoYmEpOwogCWlmIChzdGF0dXMgIT0gMCkgewogCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAotCQkJICAgICAiVW5zdXBwb3J0ZWQgZncgdmVyc2lvbiBcbiIpOworCQkJICAgICAiVW5zdXBwb3J0ZWQgZncgdmVyc2lvblxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0yOTc0LDcgKzMwMzIsNyBAQAogCWlmICgxID09IHBoYmEtPmluaXRfbWVtW0hXSV9NRU1fQURETl9DT05URVhUXS5udW1fZWxlbWVudHMpIHsKIAkJcGh3aV9jdHJsci0+cGh3aV9jdHh0ID0gKHN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKilwaGJhLT4KIAkJICAgIGluaXRfbWVtW0hXSV9NRU1fQURETl9DT05URVhUXS5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzOwotCQlTRV9ERUJVRyhEQkdfTFZMXzgsICIgcGh3aV9jdHJsci0+cGh3aV9jdHh0PSVwIFxuIiwKKwkJU0VfREVCVUcoREJHX0xWTF84LCAiIHBod2lfY3RybHItPnBod2lfY3R4dD0lcFxuIiwKIAkJCSBwaHdpX2N0cmxyLT5waHdpX2N0eHQpOwogCX0gZWxzZSB7CiAJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCkBAIC0zMDA3LDggKzMwNjUsOCBAQAogCQkJcGNpX2ZyZWVfY29uc2lzdGVudChwaGJhLT5wY2lkZXYsCiAJCQkgIG1lbV9kZXNjci0+bWVtX2FycmF5W2ogLSAxXS5zaXplLAogCQkJICBtZW1fZGVzY3ItPm1lbV9hcnJheVtqIC0gMV0udmlydHVhbF9hZGRyZXNzLAotCQkJICBtZW1fZGVzY3ItPm1lbV9hcnJheVtqIC0gMV0uYnVzX2FkZHJlc3MuCi0JCQkJdS5hNjQuYWRkcmVzcyk7CisJCQkgICh1bnNpZ25lZCBsb25nKW1lbV9kZXNjci0+bWVtX2FycmF5W2ogLSAxXS4KKwkJCSAgYnVzX2FkZHJlc3MudS5hNjQuYWRkcmVzcyk7CiAJCX0KIAkJa2ZyZWUobWVtX2Rlc2NyLT5tZW1fYXJyYXkpOwogCQltZW1fZGVzY3IrKzsKQEAgLTMwMjQsNyArMzA4Miw3IEBACiAJcmV0ID0gYmVpc2NzaV9nZXRfbWVtb3J5KHBoYmEpOwogCWlmIChyZXQgPCAwKSB7CiAJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJiZWlzY3NpX2Rldl9wcm9iZSAtIgotCQkJICAgICAiRmFpbGVkIGluIGJlaXNjc2lfYWxsb2NfbWVtb3J5IFxuIik7CisJCQkgICAgICJGYWlsZWQgaW4gYmVpc2NzaV9hbGxvY19tZW1vcnlcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMzEwMSwxMiArMzE1OSwxMiBAQAogCX0KIAlTRV9ERUJVRyhEQkdfTFZMXzgsCiAJCSAicGhiYS0+aW9fc2dsX2huZGxfYXZibD0lZCIKLQkJICJwaGJhLT5laF9zZ2xfaG5kbF9hdmJsPSVkIFxuIiwKKwkJICJwaGJhLT5laF9zZ2xfaG5kbF9hdmJsPSVkXG4iLAogCQkgcGhiYS0+aW9fc2dsX2huZGxfYXZibCwKIAkJIHBoYmEtPmVoX3NnbF9obmRsX2F2YmwpOwogCW1lbV9kZXNjcl9zZyA9IHBoYmEtPmluaXRfbWVtOwogCW1lbV9kZXNjcl9zZyArPSBIV0lfTUVNX1NHRTsKLQlTRV9ERUJVRyhEQkdfTFZMXzgsICJcbiBtZW1fZGVzY3Jfc2ctPm51bV9lbGVtZW50cz0lZCBcbiIsCisJU0VfREVCVUcoREJHX0xWTF84LCAiXG4gbWVtX2Rlc2NyX3NnLT5udW1fZWxlbWVudHM9JWRcbiIsCiAJCSBtZW1fZGVzY3Jfc2ctPm51bV9lbGVtZW50cyk7CiAJYXJyX2luZGV4ID0gMDsKIAlpZHggPSAwOwpAQCAtMzE1NSw3ICszMjEzLDcgQEAKIAlpZiAoIXBoYmEtPmVwX2FycmF5KSB7CiAJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCiAJCQkgICAgICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGluICIKLQkJCSAgICAgImhiYV9zZXR1cF9jaWRfdGJscyBcbiIpOworCQkJICAgICAiaGJhX3NldHVwX2NpZF90YmxzXG4iKTsKIAkJa2ZyZWUocGhiYS0+Y2lkX2FycmF5KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtMzE2OCw3ICszMjI2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgaHdpX2VuYWJsZV9pbnRyKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3N0YXRpYyB2b2lkIGh3aV9lbmFibGVfaW50cihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCiB7CiAJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOwogCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKQEAgLTMxODQsMjYgKzMyNDIsMjUgQEAKIAlhZGRyID0gKHU4IF9faW9tZW0gKikgKCh1OCBfX2lvbWVtICopIGN0cmwtPnBjaWNmZyArCiAJCQlQQ0lDRkdfTUVNQkFSX0NUUkxfSU5UX0NUUkxfT0ZGU0VUKTsKIAlyZWcgPSBpb3JlYWQzMihhZGRyKTsKLQlTRV9ERUJVRyhEQkdfTFZMXzgsICJyZWcgPXglMDh4IFxuIiwgcmVnKTsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJyZWcgPXglMDh4XG4iLCByZWcpOwogCiAJZW5hYmxlZCA9IHJlZyAmIE1FTUJBUl9DVFJMX0lOVF9DVFJMX0hPU1RJTlRSX01BU0s7CiAJaWYgKCFlbmFibGVkKSB7CiAJCXJlZyB8PSBNRU1CQVJfQ1RSTF9JTlRfQ1RSTF9IT1NUSU5UUl9NQVNLOwotCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJyZWcgPXglMDh4IGFkZHI9JXAgXG4iLCByZWcsIGFkZHIpOworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJyZWcgPXglMDh4IGFkZHI9JXBcbiIsIHJlZywgYWRkcik7CiAJCWlvd3JpdGUzMihyZWcsIGFkZHIpOwogCQlpZiAoIXBoYmEtPm1zaXhfZW5hYmxlZCkgewogCQkJZXEgPSAmcGh3aV9jb250ZXh0LT5iZV9lcVswXS5xOwotCQkJU0VfREVCVUcoREJHX0xWTF84LCAiZXEtPmlkPSVkIFxuIiwgZXEtPmlkKTsKKwkJCVNFX0RFQlVHKERCR19MVkxfOCwgImVxLT5pZD0lZFxuIiwgZXEtPmlkKTsKIAkJCWh3aV9yaW5nX2VxX2RiKHBoYmEsIGVxLT5pZCwgMCwgMCwgMSwgMSk7CiAJCX0gZWxzZSB7CiAJCQlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm51bV9jcHVzOyBpKyspIHsKIAkJCQllcSA9ICZwaHdpX2NvbnRleHQtPmJlX2VxW2ldLnE7Ci0JCQkJU0VfREVCVUcoREJHX0xWTF84LCAiZXEtPmlkPSVkIFxuIiwgZXEtPmlkKTsKKwkJCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJlcS0+aWQ9JWRcbiIsIGVxLT5pZCk7CiAJCQkJaHdpX3JpbmdfZXFfZGIocGhiYSwgZXEtPmlkLCAwLCAwLCAxLCAxKTsKIAkJCX0KIAkJfQogCX0KLQlyZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIHZvaWQgaHdpX2Rpc2FibGVfaW50cihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCkBAIC0zMjE5LDcgKzMyNzYsNyBAQAogCQlpb3dyaXRlMzIocmVnLCBhZGRyKTsKIAl9IGVsc2UKIAkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCi0JCQkgICAgICJJbiBod2lfZGlzYWJsZV9pbnRyLCBBbHJlYWR5IERpc2FibGVkIFxuIik7CisJCQkgICAgICJJbiBod2lfZGlzYWJsZV9pbnRyLCBBbHJlYWR5IERpc2FibGVkXG4iKTsKIH0KIAogc3RhdGljIGludCBiZWlzY3NpX2luaXRfcG9ydChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCkBAIC0zMjMwLDE0ICszMjg3LDE0IEBACiAJaWYgKHJldCA8IDApIHsKIAkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKIAkJCSAgICAgImJlaXNjc2lfZGV2X3Byb2JlIC0gRmFpbGVkIGluIgotCQkJICAgICAiYmVpc2NzaV9pbml0X2NvbnRyb2xsZXIgXG4iKTsKKwkJCSAgICAgImJlaXNjc2lfaW5pdF9jb250cm9sbGVyXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJcmV0ID0gYmVpc2NzaV9pbml0X3NnbF9oYW5kbGUocGhiYSk7CiAJaWYgKHJldCA8IDApIHsKIAkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKIAkJCSAgICAgImJlaXNjc2lfZGV2X3Byb2JlIC0gRmFpbGVkIGluIgotCQkJICAgICAiYmVpc2NzaV9pbml0X3NnbF9oYW5kbGUgXG4iKTsKKwkJCSAgICAgImJlaXNjc2lfaW5pdF9zZ2xfaGFuZGxlXG4iKTsKIAkJZ290byBkb19jbGVhbnVwX2N0cmxyOwogCX0KIApAQCAtMzI5MSwxMiArMzM0OCwxMiBAQAogCiBzdGF0aWMgdm9pZCBiZWlzY3NpX2NsZWFuX3BvcnQoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQogewotCXVuc2lnbmVkIGNoYXIgbWdtdF9zdGF0dXM7CisJaW50IG1nbXRfc3RhdHVzOwogCiAJbWdtdF9zdGF0dXMgPSBtZ210X2VwZndfY2xlYW51cChwaGJhLCBDTURfQ09OTkVDVElPTl9DSFVURV8wKTsKIAlpZiAobWdtdF9zdGF0dXMpCiAJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAotCQkJICAgICAibWdtdF9lcGZ3X2NsZWFudXAgRkFJTEVEIFxuIik7CisJCQkgICAgICJtZ210X2VwZndfY2xlYW51cCBGQUlMRURcbiIpOwogCiAJaHdpX3B1cmdlX2VxKHBoYmEpOwogCWh3aV9jbGVhbnVwKHBoYmEpOwpAQCAtMzQyOCwxNCArMzQ4NSwxMiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlpb190YXNrLT5iaHNfcGEudS5hNjQuYWRkcmVzcyA9IHBhZGRyOwogCWlvX3Rhc2stPmxpYmlzY3NpX2l0dCA9IChpdHRfdCl0YXNrLT5pdHQ7Ci0JaW9fdGFzay0+cHdyYl9oYW5kbGUgPSBhbGxvY193cmJfaGFuZGxlKHBoYmEsCi0JCQkJCQliZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQgLQotCQkJCQkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydAotCQkJCQkJKTsKIAlpb190YXNrLT5jb25uID0gYmVpc2NzaV9jb25uOwogCiAJdGFzay0+aGRyID0gKHN0cnVjdCBpc2NzaV9oZHIgKikmaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfaGRyOwogCXRhc2stPmhkcl9tYXggPSBzaXplb2Yoc3RydWN0IGJlX2NtZF9iaHMpOworCWlvX3Rhc2stPnBzZ2xfaGFuZGxlID0gTlVMTDsKKwlpb190YXNrLT5wc2dsX2hhbmRsZSA9IE5VTEw7CiAKIAlpZiAodGFzay0+c2MpIHsKIAkJc3Bpbl9sb2NrKCZwaGJhLT5pb19zZ2xfbG9jayk7CkBAIC0zNDQzLDYgKzM0OTgsMTEgQEAKIAkJc3Bpbl91bmxvY2soJnBoYmEtPmlvX3NnbF9sb2NrKTsKIAkJaWYgKCFpb190YXNrLT5wc2dsX2hhbmRsZSkKIAkJCWdvdG8gZnJlZV9obmRsczsKKwkJaW9fdGFzay0+cHdyYl9oYW5kbGUgPSBhbGxvY193cmJfaGFuZGxlKHBoYmEsCisJCQkJCWJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCAtCisJCQkJCXBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnQpOworCQlpZiAoIWlvX3Rhc2stPnB3cmJfaGFuZGxlKQorCQkJZ290byBmcmVlX2lvX2huZGxzOwogCX0gZWxzZSB7CiAJCWlvX3Rhc2stPnNjc2lfY21uZCA9IE5VTEw7CiAJCWlmICgob3Bjb2RlICYgSVNDU0lfT1BDT0RFX01BU0spID09IElTQ1NJX09QX0xPR0lOKSB7CkBAIC0zNDU3LDkgKzM1MTcsMjAgQEAKIAkJCQliZWlzY3NpX2Nvbm4tPmxvZ2luX2luX3Byb2dyZXNzID0gMTsKIAkJCQliZWlzY3NpX2Nvbm4tPnBsb2dpbl9zZ2xfaGFuZGxlID0KIAkJCQkJCQlpb190YXNrLT5wc2dsX2hhbmRsZTsKKwkJCQlpb190YXNrLT5wd3JiX2hhbmRsZSA9CisJCQkJCWFsbG9jX3dyYl9oYW5kbGUocGhiYSwKKwkJCQkJYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkIC0KKwkJCQkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydCk7CisJCQkJaWYgKCFpb190YXNrLT5wd3JiX2hhbmRsZSkKKwkJCQkJZ290byBmcmVlX2lvX2huZGxzOworCQkJCWJlaXNjc2lfY29ubi0+cGxvZ2luX3dyYl9oYW5kbGUgPQorCQkJCQkJCWlvX3Rhc2stPnB3cmJfaGFuZGxlOworCiAJCQl9IGVsc2UgewogCQkJCWlvX3Rhc2stPnBzZ2xfaGFuZGxlID0KIAkJCQkJCWJlaXNjc2lfY29ubi0+cGxvZ2luX3NnbF9oYW5kbGU7CisJCQkJaW9fdGFzay0+cHdyYl9oYW5kbGUgPQorCQkJCQkJYmVpc2NzaV9jb25uLT5wbG9naW5fd3JiX2hhbmRsZTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCXNwaW5fbG9jaygmcGhiYS0+bWdtdF9zZ2xfbG9jayk7CkBAIC0zNDY3LDYgKzM1MzgsMTMgQEAKIAkJCXNwaW5fdW5sb2NrKCZwaGJhLT5tZ210X3NnbF9sb2NrKTsKIAkJCWlmICghaW9fdGFzay0+cHNnbF9oYW5kbGUpCiAJCQkJZ290byBmcmVlX2huZGxzOworCQkJaW9fdGFzay0+cHdyYl9oYW5kbGUgPQorCQkJCQlhbGxvY193cmJfaGFuZGxlKHBoYmEsCisJCQkJCWJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCAtCisJCQkJCXBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnQpOworCQkJaWYgKCFpb190YXNrLT5wd3JiX2hhbmRsZSkKKwkJCQlnb3RvIGZyZWVfbWdtdF9obmRsczsKKwogCQl9CiAJfQogCWl0dCA9IChpdHRfdCkgY3B1X3RvX2JlMzIoKCh1bnNpZ25lZCBpbnQpaW9fdGFzay0+cHdyYl9oYW5kbGUtPgpAQCAtMzQ3NywxNiArMzU1NSwyNiBAQAogCWlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2hkci5pdHQgPSBpdHQ7CiAJcmV0dXJuIDA7CiAKK2ZyZWVfaW9faG5kbHM6CisJc3Bpbl9sb2NrKCZwaGJhLT5pb19zZ2xfbG9jayk7CisJZnJlZV9pb19zZ2xfaGFuZGxlKHBoYmEsIGlvX3Rhc2stPnBzZ2xfaGFuZGxlKTsKKwlzcGluX3VubG9jaygmcGhiYS0+aW9fc2dsX2xvY2spOworCWdvdG8gZnJlZV9obmRsczsKK2ZyZWVfbWdtdF9obmRsczoKKwlzcGluX2xvY2soJnBoYmEtPm1nbXRfc2dsX2xvY2spOworCWZyZWVfbWdtdF9zZ2xfaGFuZGxlKHBoYmEsIGlvX3Rhc2stPnBzZ2xfaGFuZGxlKTsKKwlzcGluX3VubG9jaygmcGhiYS0+bWdtdF9zZ2xfbG9jayk7CiBmcmVlX2huZGxzOgogCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOwogCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFsKIAkJCWJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCAtCiAJCQlwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0XTsKLQlmcmVlX3dyYl9oYW5kbGUocGhiYSwgcHdyYl9jb250ZXh0LCBpb190YXNrLT5wd3JiX2hhbmRsZSk7CisJaWYgKGlvX3Rhc2stPnB3cmJfaGFuZGxlKQorCQlmcmVlX3dyYl9oYW5kbGUocGhiYSwgcHdyYl9jb250ZXh0LCBpb190YXNrLT5wd3JiX2hhbmRsZSk7CiAJaW9fdGFzay0+cHdyYl9oYW5kbGUgPSBOVUxMOwogCXBjaV9wb29sX2ZyZWUoYmVpc2NzaV9zZXNzLT5iaHNfcG9vbCwgaW9fdGFzay0+Y21kX2JocywKIAkJICAgICAgaW9fdGFzay0+YmhzX3BhLnUuYTY0LmFkZHJlc3MpOwotCVNFX0RFQlVHKERCR19MVkxfMSwgIkFsbG9jIG9mIFNHTF9JQ0QgRmFpbGVkIFxuIik7CisJU0VfREVCVUcoREJHX0xWTF8xLCAiQWxsb2Mgb2YgU0dMX0lDRCBGYWlsZWRcbiIpOwogCXJldHVybiAtRU5PTUVNOwogfQogCkBAIC0zNjUzLDcgKzM3NDEsNyBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCVNFX0RFQlVHKERCR19MVkxfMSwgIm9wY29kZSA9JWQgTm90IHN1cHBvcnRlZCBcbiIsCisJCVNFX0RFQlVHKERCR19MVkxfMSwgIm9wY29kZSA9JWQgTm90IHN1cHBvcnRlZFxuIiwKIAkJCSB0YXNrLT5oZHItPm9wY29kZSAmIElTQ1NJX09QQ09ERV9NQVNLKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMzY4OSwxMyArMzc3NywxMSBAQAogCQlTRV9ERUJVRyhEQkdfTFZMXzEsICIgc2NzaV9kbWFfbWFwIEZhaWxlZFxuIikKIAkJcmV0dXJuIG51bV9zZzsKIAl9Ci0JU0VfREVCVUcoREJHX0xWTF80LCAieGZlcmxlbj0weCUwOHggc2NtZD0lcCBudW1fc2c9JWQgc2VybnVtPSVsdVxuIiwKLQkJICAoc2NzaV9idWZmbGVuKHNjKSksIHNjLCBudW1fc2csIHNjLT5zZXJpYWxfbnVtYmVyKTsKIAl4ZmVybGVuID0gc2NzaV9idWZmbGVuKHNjKTsKIAlzZyA9IHNjc2lfc2dsaXN0KHNjKTsKIAlpZiAoc2MtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpIHsKIAkJd3JpdGVkaXIgPSAxOwotCQlTRV9ERUJVRyhEQkdfTFZMXzQsICJ0YXNrLT5pbW1fY291bnQ9MHglMDh4IFxuIiwKKwkJU0VfREVCVUcoREJHX0xWTF80LCAidGFzay0+aW1tX2NvdW50PTB4JTA4eFxuIiwKIAkJCSB0YXNrLT5pbW1fY291bnQpOwogCX0gZWxzZQogCQl3cml0ZWRpciA9IDA7CkBAIC0zNzA5LDEwICszNzk1LDEyIEBACiAJc3RydWN0IGh3aV9jb250ZXh0X21lbW9yeSAqcGh3aV9jb250ZXh0OwogCXN0cnVjdCBiZV9lcV9vYmogKnBiZV9lcTsKIAl1bnNpZ25lZCBpbnQgaSwgbXNpeF92ZWM7CisJdTggKnJlYWxfb2Zmc2V0ID0gMDsKKwl1MzIgdmFsdWUgPSAwOwogCiAJcGhiYSA9IChzdHJ1Y3QgYmVpc2NzaV9oYmEgKilwY2lfZ2V0X2RydmRhdGEocGNpZGV2KTsKIAlpZiAoIXBoYmEpIHsKLQkJZGV2X2VycigmcGNpZGV2LT5kZXYsICJiZWlzY3NpX3JlbW92ZSBjYWxsZWQgd2l0aCBubyBwaGJhIFxuIik7CisJCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAiYmVpc2NzaV9yZW1vdmUgY2FsbGVkIHdpdGggbm8gcGhiYVxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTM3MzcsNiArMzgyNSwxNCBAQAogCiAJYmVpc2NzaV9jbGVhbl9wb3J0KHBoYmEpOwogCWJlaXNjc2lfZnJlZV9tZW0ocGhiYSk7CisJcmVhbF9vZmZzZXQgPSAodTggKilwaGJhLT5jc3JfdmEgKyBNUFVfRVBfU0VNQVBIT1JFOworCisJdmFsdWUgPSByZWFkbCgodm9pZCAqKXJlYWxfb2Zmc2V0KTsKKworCWlmICh2YWx1ZSAmIDB4MDAwMTAwMDApIHsKKwkJdmFsdWUgJj0gMHhmZmZlZmZmZjsKKwkJd3JpdGVsKHZhbHVlLCAodm9pZCAqKXJlYWxfb2Zmc2V0KTsKKwl9CiAJYmVpc2NzaV91bm1hcF9wY2lfZnVuY3Rpb24ocGhiYSk7CiAJcGNpX2ZyZWVfY29uc2lzdGVudChwaGJhLT5wY2lkZXYsCiAJCQkgICAgcGhiYS0+Y3RybC5tYm94X21lbV9hbGxvY2VkLnNpemUsCkBAIC0zNzY5LDE5ICszODY1LDIxIEBACiAJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOwogCXN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKnBod2lfY29udGV4dDsKIAlzdHJ1Y3QgYmVfZXFfb2JqICpwYmVfZXE7Ci0JaW50IHJldCwgbXNpeF92ZWMsIG51bV9jcHVzLCBpOworCWludCByZXQsIG51bV9jcHVzLCBpOworCXU4ICpyZWFsX29mZnNldCA9IDA7CisJdTMyIHZhbHVlID0gMDsKIAogCXJldCA9IGJlaXNjc2lfZW5hYmxlX3BjaShwY2lkZXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJiZWlzY3NpX2Rldl9wcm9iZS0iCi0JCQkgICAgICJGYWlsZWQgdG8gZW5hYmxlIHBjaSBkZXZpY2UgXG4iKTsKKwkJZGV2X2VycigmcGNpZGV2LT5kZXYsICJiZWlzY3NpX2Rldl9wcm9iZS0iCisJCQkiIEZhaWxlZCB0byBlbmFibGUgcGNpIGRldmljZVxuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcGhiYSA9IGJlaXNjc2lfaGJhX2FsbG9jKHBjaWRldik7CiAJaWYgKCFwaGJhKSB7CiAJCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAiYmVpc2NzaV9kZXZfcHJvYmUtIgotCQkJIiBGYWlsZWQgaW4gYmVpc2NzaV9oYmFfYWxsb2MgXG4iKTsKKwkJCSIgRmFpbGVkIGluIGJlaXNjc2lfaGJhX2FsbG9jXG4iKTsKIAkJZ290byBkaXNhYmxlX3BjaTsKIAl9CiAKQEAgLTM4MDQsNyArMzkwMiw3IEBACiAJZWxzZQogCQludW1fY3B1cyA9IDE7CiAJcGhiYS0+bnVtX2NwdXMgPSBudW1fY3B1czsKLQlTRV9ERUJVRyhEQkdfTFZMXzgsICJudW1fY3B1cyA9ICVkIFxuIiwgcGhiYS0+bnVtX2NwdXMpOworCVNFX0RFQlVHKERCR19MVkxfOCwgIm51bV9jcHVzID0gJWRcbiIsIHBoYmEtPm51bV9jcHVzKTsKIAogCWlmIChlbmFibGVfbXNpeCkKIAkJYmVpc2NzaV9tc2l4X2VuYWJsZShwaGJhKTsKQEAgLTM4MTUsNiArMzkxMywzMyBAQAogCQlnb3RvIGhiYV9mcmVlOwogCX0KIAorCWlmICghbnVtX2hiYSkgeworCQlyZWFsX29mZnNldCA9ICh1OCAqKXBoYmEtPmNzcl92YSArIE1QVV9FUF9TRU1BUEhPUkU7CisJCXZhbHVlID0gcmVhZGwoKHZvaWQgKilyZWFsX29mZnNldCk7CisJCWlmICh2YWx1ZSAmIDB4MDAwMTAwMDApIHsKKwkJCWdjcmFzaG1vZGUrKzsKKwkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkJIkxvYWRpbmcgRHJpdmVyIGluIGNyYXNoZHVtcCBtb2RlXG4iKTsKKwkJCXJldCA9IGJlaXNjc2lfcGNpX3NvZnRfcmVzZXQocGhiYSk7CisJCQlpZiAocmV0KSB7CisJCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCQkJIlJlc2V0IEZhaWxlZC4gQWJvcnRpbmcgQ3Jhc2hkdW1wXG4iKTsKKwkJCQlnb3RvIGhiYV9mcmVlOworCQkJfQorCQkJcmV0ID0gYmVfY2hrX3Jlc2V0X2NvbXBsZXRlKHBoYmEpOworCQkJaWYgKHJldCkgeworCQkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkJCSJGYWlsZWQgdG8gZ2V0IG91dCBvZiByZXNldC4iCisJCQkJCSJBYm9ydGluZyBDcmFzaGR1bXBcbiIpOworCQkJCWdvdG8gaGJhX2ZyZWU7CisJCQl9CisJCX0gZWxzZSB7CisJCQl2YWx1ZSB8PSAweDAwMDEwMDAwOworCQkJd3JpdGVsKHZhbHVlLCAodm9pZCAqKXJlYWxfb2Zmc2V0KTsKKwkJCW51bV9oYmErKzsKKwkJfQorCX0KKwogCXNwaW5fbG9ja19pbml0KCZwaGJhLT5pb19zZ2xfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnBoYmEtPm1nbXRfc2dsX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZwaGJhLT5pc3JfbG9jayk7CkBAIC0zODcwLDI1ICszOTk1LDEwIEBACiAJCQkgICAgICJGYWlsZWQgdG8gYmVpc2NzaV9pbml0X2lycXNcbiIpOwogCQlnb3RvIGZyZWVfYmxrZW5ibGQ7CiAJfQotCXJldCA9IGh3aV9lbmFibGVfaW50cihwaGJhKTsKLQlpZiAocmV0IDwgMCkgewotCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAiYmVpc2NzaV9kZXZfcHJvYmUtIgotCQkJICAgICAiRmFpbGVkIHRvIGh3aV9lbmFibGVfaW50clxuIik7Ci0JCWdvdG8gZnJlZV9jdHJscjsKLQl9Ci0JU0VfREVCVUcoREJHX0xWTF84LCAiXG5cblxuIFNVQ0NFU1MgLSBEUklWRVIgTE9BREVEIFxuXG5cbiIpOworCWh3aV9lbmFibGVfaW50cihwaGJhKTsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJcblxuXG4gU1VDQ0VTUyAtIERSSVZFUiBMT0FERURcblxuXG4iKTsKIAlyZXR1cm4gMDsKIAotZnJlZV9jdHJscjoKLQlpZiAocGhiYS0+bXNpeF9lbmFibGVkKSB7Ci0JCWZvciAoaSA9IDA7IGkgPD0gcGhiYS0+bnVtX2NwdXM7IGkrKykgewotCQkJbXNpeF92ZWMgPSBwaGJhLT5tc2l4X2VudHJpZXNbaV0udmVjdG9yOwotCQkJZnJlZV9pcnEobXNpeF92ZWMsICZwaHdpX2NvbnRleHQtPmJlX2VxW2ldKTsKLQkJfQotCX0gZWxzZQotCQlpZiAocGhiYS0+cGNpZGV2LT5pcnEpCi0JCQlmcmVlX2lycShwaGJhLT5wY2lkZXYtPmlycSwgcGhiYSk7Ci0JcGNpX2Rpc2FibGVfbXNpeChwaGJhLT5wY2lkZXYpOwogZnJlZV9ibGtlbmJsZDoKIAlkZXN0cm95X3dvcmtxdWV1ZShwaGJhLT53cSk7CiAJaWYgKGJsa19pb3BvbGxfZW5hYmxlZCkKQEAgLTM5MDAsMTIgKzQwMTAsMjMgQEAKIAliZWlzY3NpX2NsZWFuX3BvcnQocGhiYSk7CiAJYmVpc2NzaV9mcmVlX21lbShwaGJhKTsKIGZyZWVfcG9ydDoKKwlyZWFsX29mZnNldCA9ICh1OCAqKXBoYmEtPmNzcl92YSArIE1QVV9FUF9TRU1BUEhPUkU7CisKKwl2YWx1ZSA9IHJlYWRsKCh2b2lkICopcmVhbF9vZmZzZXQpOworCisJaWYgKHZhbHVlICYgMHgwMDAxMDAwMCkgeworCQl2YWx1ZSAmPSAweGZmZmVmZmZmOworCQl3cml0ZWwodmFsdWUsICh2b2lkICopcmVhbF9vZmZzZXQpOworCX0KKwogCXBjaV9mcmVlX2NvbnNpc3RlbnQocGhiYS0+cGNpZGV2LAogCQkJICAgIHBoYmEtPmN0cmwubWJveF9tZW1fYWxsb2NlZC5zaXplLAogCQkJICAgIHBoYmEtPmN0cmwubWJveF9tZW1fYWxsb2NlZC52YSwKIAkJCSAgIHBoYmEtPmN0cmwubWJveF9tZW1fYWxsb2NlZC5kbWEpOwogCWJlaXNjc2lfdW5tYXBfcGNpX2Z1bmN0aW9uKHBoYmEpOwogaGJhX2ZyZWU6CisJaWYgKHBoYmEtPm1zaXhfZW5hYmxlZCkKKwkJcGNpX2Rpc2FibGVfbXNpeChwaGJhLT5wY2lkZXYpOwogCWlzY3NpX2hvc3RfcmVtb3ZlKHBoYmEtPnNob3N0KTsKIAlwY2lfZGV2X3B1dChwaGJhLT5wY2lkZXYpOwogCWlzY3NpX2hvc3RfZnJlZShwaGJhLT5zaG9zdCk7CkBAIC0zOTU1LDcgKzQwNzYsNyBAQAogCS5nZXRfc2Vzc2lvbl9wYXJhbSA9IGlzY3NpX3Nlc3Npb25fZ2V0X3BhcmFtLAogCS5nZXRfaG9zdF9wYXJhbSA9IGJlaXNjc2lfZ2V0X2hvc3RfcGFyYW0sCiAJLnN0YXJ0X2Nvbm4gPSBiZWlzY3NpX2Nvbm5fc3RhcnQsCi0JLnN0b3BfY29ubiA9IGJlaXNjc2lfY29ubl9zdG9wLAorCS5zdG9wX2Nvbm4gPSBpc2NzaV9jb25uX3N0b3AsCiAJLnNlbmRfcGR1ID0gaXNjc2lfY29ubl9zZW5kX3BkdSwKIAkueG1pdF90YXNrID0gYmVpc2NzaV90YXNrX3htaXQsCiAJLmNsZWFudXBfdGFzayA9IGJlaXNjc2lfY2xlYW51cF90YXNrLApAQCAtMzk4OCw3ICs0MTA5LDcgQEAKIAkJCSAidHJhbnNwb3J0LlxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX21vZHVsZV9pbml0LCB0dD0lcCBcbiIsCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9tb2R1bGVfaW5pdCwgdHQ9JXBcbiIsCiAJCSAmYmVpc2NzaV9pc2NzaV90cmFuc3BvcnQpOwogCiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYmVpc2NzaV9wY2lfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmggYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5oCmluZGV4IDg3ZWMyMTIuLmM2NDNiYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmgKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uaApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CkBAIC0zOSw3ICs0MCw3IEBACiAJCQkJIkxpbnV4IGlTQ1NJIERyaXZlciB2ZXJzaW9uIiBCVUlMRF9TVFIKICNkZWZpbmUgRFJWX0RFU0MJCUJFX05BTUUgIiAiICJEcml2ZXIiCiAKLSNkZWZpbmUgQkVfVkVORE9SX0lEIAkJMHgxOUEyCisjZGVmaW5lIEJFX1ZFTkRPUl9JRAkJMHgxOUEyCiAvKiBERVZJQ0UgSUQncyBmb3IgQkUyICovCiAjZGVmaW5lIEJFX0RFVklDRV9JRDEJCTB4MjEyCiAjZGVmaW5lIE9DX0RFVklDRV9JRDEJCTB4NzAyCkBAIC02OCw4ICs2OSwxNSBAQAogI2RlZmluZSBCRUlTQ1NJX05VTV9NQVhfTFVOCTI1NgkvKiBzY3NpX2hvc3QtPm1heF9sdW4gKi8KICNkZWZpbmUgQkVJU0NTSV9OVU1fREVWSUNFU19TVVBQT1JURUQJMHgwMQogI2RlZmluZSBCRUlTQ1NJX01BWF9GUkFHU19JTklUCTE5MgotI2RlZmluZSBCRV9OVU1fTVNJWF9FTlRSSUVTIAkxCi0jZGVmaW5lIE1QVV9FUF9TRU1BUEhPUkUgCTB4YWMKKyNkZWZpbmUgQkVfTlVNX01TSVhfRU5UUklFUwkxCisKKyNkZWZpbmUgTVBVX0VQX0NPTlRST0wgICAgICAgICAgMAorI2RlZmluZSBNUFVfRVBfU0VNQVBIT1JFICAgICAgICAweGFjCisjZGVmaW5lIEJFMl9TT0ZUX1JFU0VUICAgICAgICAgIDB4NWMKKyNkZWZpbmUgQkUyX1BDSV9PTkxJTkUwICAgICAgICAgMHhiMAorI2RlZmluZSBCRTJfUENJX09OTElORTEgICAgICAgICAweGI0CisjZGVmaW5lIEJFMl9TRVRfUkVTRVQgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgQkUyX01QVV9JUkFNX09OTElORSAgICAgMHgwMDAwMDA4MAogCiAjZGVmaW5lIEJFX1NFTlNFX0lORk9fU0laRQkJMjU4CiAjZGVmaW5lIEJFX0lTQ1NJX1BEVV9IRUFERVJfU0laRQk2NApAQCAtMTA1LDcgKzExMyw3IEBACiAjZGVmaW5lIEhXSV9HRVRfQVNZTkNfUERVX0NUWChwaHdpKQkocGh3aS0+cGh3aV9jdHh0LT5wYXN5bmNfY3R4KQogCiAvKioqKioqKioqIE1lbW9yeSBCQVIgcmVnaXN0ZXIgKioqKioqKioqKioqLwotI2RlZmluZSBQQ0lDRkdfTUVNQkFSX0NUUkxfSU5UX0NUUkxfT0ZGU0VUIAkweGZjCisjZGVmaW5lIFBDSUNGR19NRU1CQVJfQ1RSTF9JTlRfQ1RSTF9PRkZTRVQJMHhmYwogLyoqCiAgKiBIb3N0IEludGVycnVwdCBFbmFibGUsIGlmIHNldCBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkIGFsdGhvdWdoICJQQ0kgSW50ZXJydXB0CiAgKiBEaXNhYmxlIiBtYXkgc3RpbGwgZ2xvYmFsbHkgYmxvY2sgaW50ZXJydXB0cyBpbiBhZGRpdGlvbiB0byBpbmRpdmlkdWFsCkBAIC0xMTYsNyArMTI0LDcgQEAKICNkZWZpbmUgTUVNQkFSX0NUUkxfSU5UX0NUUkxfSE9TVElOVFJfTUFTSwkoMSA8PCAyOSkJLyogYml0IDI5ICovCiAKIC8qKioqKioqKiogSVNSMCBSZWdpc3RlciBvZmZzZXQgKioqKioqKioqKi8KLSNkZWZpbmUgQ0VWX0lTUjBfT0ZGU0VUIAkJCTB4QzE4CisjZGVmaW5lIENFVl9JU1IwX09GRlNFVAkJCQkweEMxOAogI2RlZmluZSBDRVZfSVNSX1NJWkUJCQkJNAogCiAvKioKQEAgLTEzOSwxMiArMTQ3LDEyIEBACiAjZGVmaW5lIERCX0VRX1JFQVJNX1NISUZUCQkoMjkpCS8qIGJpdCAyOSAqLwogCiAvKioqKioqKioqIENvbXBsIFEgZG9vciBiZWxsICoqKioqKioqKioqKiovCi0jZGVmaW5lIERCX0NRX09GRlNFVCAJCQkweDEyMAorI2RlZmluZSBEQl9DUV9PRkZTRVQJCQkweDEyMAogI2RlZmluZSBEQl9DUV9SSU5HX0lEX01BU0sJCTB4M0ZGCS8qIGJpdHMgMCAtIDkgKi8KIC8qIE51bWJlciBvZiBldmVudCBlbnRyaWVzIHByb2Nlc3NlZCAqLwotI2RlZmluZSBEQl9DUV9OVU1fUE9QUEVEX1NISUZUCQkoMTYpIAkvKiBiaXRzIDE2IC0gMjggKi8KKyNkZWZpbmUgREJfQ1FfTlVNX1BPUFBFRF9TSElGVAkJKDE2KQkvKiBiaXRzIDE2IC0gMjggKi8KIC8qIFJlYXJtIGJpdCAqLwotI2RlZmluZSBEQl9DUV9SRUFSTV9TSElGVAkJKDI5KSAJLyogYml0IDI5ICovCisjZGVmaW5lIERCX0NRX1JFQVJNX1NISUZUCQkoMjkpCS8qIGJpdCAyOSAqLwogCiAjZGVmaW5lIEdFVF9IV0lfQ09OVFJPTExFUl9XUyhwYykJKHBjLT5waHdpX2N0cmxyKQogI2RlZmluZSBIV0lfR0VUX0RFRl9CVUZRX0lEKHBjKSAoKChzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKilcCkBAIC0xNjEsMTIgKzE2OSwxMiBAQAogCUhXSV9NRU1fV1JCSCwKIAlIV0lfTUVNX1NHTEgsCiAJSFdJX01FTV9TR0UsCi0JSFdJX01FTV9BU1lOQ19IRUFERVJfQlVGLCAJLyogNSAqLworCUhXSV9NRU1fQVNZTkNfSEVBREVSX0JVRiwJLyogNSAqLwogCUhXSV9NRU1fQVNZTkNfREFUQV9CVUYsCiAJSFdJX01FTV9BU1lOQ19IRUFERVJfUklORywKIAlIV0lfTUVNX0FTWU5DX0RBVEFfUklORywKIAlIV0lfTUVNX0FTWU5DX0hFQURFUl9IQU5ETEUsCi0JSFdJX01FTV9BU1lOQ19EQVRBX0hBTkRMRSwgCS8qIDEwICovCisJSFdJX01FTV9BU1lOQ19EQVRBX0hBTkRMRSwJLyogMTAgKi8KIAlIV0lfTUVNX0FTWU5DX1BEVV9DT05URVhULAogCUlTQ1NJX01FTV9HTE9CQUxfSEVBREVSLAogCVNFX01FTV9NQVgKQEAgLTM1Miw2ICszNjAsNyBAQAogCXUzMiBiZWlzY3NpX2Nvbm5fY2lkOwogCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICplcDsKIAl1bnNpZ25lZCBzaG9ydCBsb2dpbl9pbl9wcm9ncmVzczsKKwlzdHJ1Y3Qgd3JiX2hhbmRsZSAqcGxvZ2luX3dyYl9oYW5kbGU7CiAJc3RydWN0IHNnbF9oYW5kbGUgKnBsb2dpbl9zZ2xfaGFuZGxlOwogCXN0cnVjdCBiZWlzY3NpX3Nlc3Npb24gKmJlaXNjc2lfc2VzczsKIAlzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmMgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5jCmluZGV4IDM1MGNiZWEuLjNmM2ZhYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmMKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuYwpAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgImJlX21nbXQuaCIKICNpbmNsdWRlICJiZV9pc2NzaS5oIgogCi11bnNpZ25lZCBjaGFyIG1nbXRfZ2V0X2Z3X2NvbmZpZyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAoraW50IG1nbXRfZ2V0X2Z3X2NvbmZpZyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAogCQkJCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKIHsKIAlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOwpAQCAtNTAsNyArNTAsNyBAQAogCQkJCQlwZndfY2ZnLT51bHBbMF0uc3FfY291bnQ7CiAJCWlmIChwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX2NvdW50ID4gKEJFMl9NQVhfU0VTU0lPTlMgLyAyKSkgewogCQkJU0VfREVCVUcoREJHX0xWTF84LAotCQkJCSJGVyByZXBvcnRlZCBNQVggQ1hOUyBhcyAlZCBcdCIKKwkJCQkiRlcgcmVwb3J0ZWQgTUFYIENYTlMgYXMgJWRcdCIKIAkJCQkiTWF4IFN1cHBvcnRlZCA9ICVkLlxuIiwKIAkJCQlwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX2NvdW50LAogCQkJCUJFMl9NQVhfU0VTU0lPTlMpOwpAQCAtNTgsMTQgKzU4LDE0IEBACiAJCX0KIAl9IGVsc2UgewogCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKLQkJCSAgICAgIkZhaWxlZCBpbiBtZ210X2dldF9md19jb25maWcgXG4iKTsKKwkJCSAgICAgIkZhaWxlZCBpbiBtZ210X2dldF9md19jb25maWdcbiIpOwogCX0KIAogCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOwogCXJldHVybiBzdGF0dXM7CiB9CiAKLXVuc2lnbmVkIGNoYXIgbWdtdF9jaGVja19zdXBwb3J0ZWRfZncoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKK2ludCBtZ210X2NoZWNrX3N1cHBvcnRlZF9mdyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAogCQkJCSAgICAgIHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKIHsKIAlzdHJ1Y3QgYmVfZG1hX21lbSBub25lbWJfY21kOwpAQCAtODEsNyArODEsNyBAQAogCQlTRV9ERUJVRyhEQkdfTFZMXzEsCiAJCQkgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIG1nbXRfY2hlY2tfc3VwcG9ydGVkX2Z3IgogCQkJICJcbiIpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAlub25lbWJfY21kLnNpemUgPSBzaXplb2Yoc3RydWN0IGJlX21nbXRfY29udHJvbGxlcl9hdHRyaWJ1dGVzKTsKIAlyZXEgPSBub25lbWJfY21kLnZhOwpAQCAtMTE3LDggKzExNyw3IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotCi11bnNpZ25lZCBjaGFyIG1nbXRfZXBmd19jbGVhbnVwKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgdW5zaWduZWQgc2hvcnQgY2h1dGUpCitpbnQgbWdtdF9lcGZ3X2NsZWFudXAoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCB1bnNpZ25lZCBzaG9ydCBjaHV0ZSkKIHsKIAlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7CiAJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21jY3EocGhiYSk7CkBAIC0xNDQsMTEgKzE0MywxMiBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXVuc2lnbmVkIGNoYXIgbWdtdF9pbnZhbGlkYXRlX2ljZHMoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAordW5zaWduZWQgaW50ICBtZ210X2ludmFsaWRhdGVfaWNkcyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCiAJCQkJc3RydWN0IGludmFsaWRhdGVfY29tbWFuZF90YWJsZSAqaW52X3RibCwKLQkJCQl1bnNpZ25lZCBpbnQgbnVtX2ludmFsaWRhdGUsIHVuc2lnbmVkIGludCBjaWQpCisJCQkJdW5zaWduZWQgaW50IG51bV9pbnZhbGlkYXRlLCB1bnNpZ25lZCBpbnQgY2lkLAorCQkJCXN0cnVjdCBiZV9kbWFfbWVtICpub25lbWJfY21kKQorCiB7Ci0Jc3RydWN0IGJlX2RtYV9tZW0gbm9uZW1iX2NtZDsKIAlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7CiAJc3RydWN0IGJlX21jY193cmIgKndyYjsKIAlzdHJ1Y3QgYmVfc2dlICpzZ2U7CkBAIC0xNjIsMTcgKzE2Miw3IEBACiAJCXJldHVybiB0YWc7CiAJfQogCi0Jbm9uZW1iX2NtZC52YSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGN0cmwtPnBkZXYsCi0JCQkJc2l6ZW9mKHN0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtc19pbiksCi0JCQkJJm5vbmVtYl9jbWQuZG1hKTsKLQlpZiAobm9uZW1iX2NtZC52YSA9PSBOVUxMKSB7Ci0JCVNFX0RFQlVHKERCR19MVkxfMSwKLQkJCSAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgbWdtdF9pbnZhbGlkYXRlX2ljZHNcbiIpOwotCQlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKLQkJcmV0dXJuIDA7Ci0JfQotCW5vbmVtYl9jbWQuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW52YWxpZGF0ZV9jb21tYW5kc19wYXJhbXNfaW4pOwotCXJlcSA9IG5vbmVtYl9jbWQudmE7CisJcmVxID0gbm9uZW1iX2NtZC0+dmE7CiAJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKCpyZXEpKTsKIAl3cmIgPSB3cmJfZnJvbV9tY2NxKHBoYmEpOwogCXNnZSA9IG5vbmVtYmVkZGVkX3NnbCh3cmIpOwpAQCAtMTkwLDE5ICsxODAsMTYgQEAKIAkJcmVxLT5pY2RfY291bnQrKzsKIAkJaW52X3RibCsrOwogCX0KLQlzZ2UtPnBhX2hpID0gY3B1X3RvX2xlMzIodXBwZXJfMzJfYml0cyhub25lbWJfY21kLmRtYSkpOwotCXNnZS0+cGFfbG8gPSBjcHVfdG9fbGUzMihub25lbWJfY21kLmRtYSAmIDB4RkZGRkZGRkYpOwotCXNnZS0+bGVuID0gY3B1X3RvX2xlMzIobm9uZW1iX2NtZC5zaXplKTsKKwlzZ2UtPnBhX2hpID0gY3B1X3RvX2xlMzIodXBwZXJfMzJfYml0cyhub25lbWJfY21kLT5kbWEpKTsKKwlzZ2UtPnBhX2xvID0gY3B1X3RvX2xlMzIobm9uZW1iX2NtZC0+ZG1hICYgMHhGRkZGRkZGRik7CisJc2dlLT5sZW4gPSBjcHVfdG9fbGUzMihub25lbWJfY21kLT5zaXplKTsKIAogCWJlX21jY19ub3RpZnkocGhiYSk7CiAJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7Ci0JaWYgKG5vbmVtYl9jbWQudmEpCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoY3RybC0+cGRldiwgbm9uZW1iX2NtZC5zaXplLAotCQkJCSAgICBub25lbWJfY21kLnZhLCBub25lbWJfY21kLmRtYSk7CiAJcmV0dXJuIHRhZzsKIH0KIAotdW5zaWduZWQgY2hhciBtZ210X2ludmFsaWRhdGVfY29ubmVjdGlvbihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCit1bnNpZ25lZCBpbnQgbWdtdF9pbnZhbGlkYXRlX2Nvbm5lY3Rpb24oc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAogCQkJCQkgc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXAsCiAJCQkJCSB1bnNpZ25lZCBzaG9ydCBjaWQsCiAJCQkJCSB1bnNpZ25lZCBzaG9ydCBpc3N1ZV9yZXNldCwKQEAgLTIzOSw3ICsyMjYsNyBAQAogCXJldHVybiB0YWc7CiB9CiAKLXVuc2lnbmVkIGNoYXIgbWdtdF91cGxvYWRfY29ubmVjdGlvbihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCit1bnNpZ25lZCBpbnQgbWdtdF91cGxvYWRfY29ubmVjdGlvbihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCiAJCQkJdW5zaWduZWQgc2hvcnQgY2lkLCB1bnNpZ25lZCBpbnQgdXBsb2FkX2ZsYWcpCiB7CiAJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOwpAQCAtMjY5LDcgKzI1Niw5IEBACiAKIGludCBtZ210X29wZW5fY29ubmVjdGlvbihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCiAJCQkgc3RydWN0IHNvY2thZGRyICpkc3RfYWRkciwKLQkJCSBzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcCkKKwkJCSBzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcCwKKwkJCSBzdHJ1Y3QgYmVfZG1hX21lbSAqbm9uZW1iX2NtZCkKKwogewogCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKIAlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQ7CkBAIC0yODUsNiArMjc0LDcgQEAKIAl1bnNpZ25lZCBpbnQgdGFnID0gMDsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1bnNpZ25lZCBzaG9ydCBjaWQgPSBiZWlzY3NpX2VwLT5lcF9jaWQ7CisJc3RydWN0IGJlX3NnZSAqc2dlOwogCiAJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CiAJcGh3aV9jb250ZXh0ID0gcGh3aV9jdHJsci0+cGh3aV9jdHh0OwpAQCAtMzAwLDEwICsyOTAsMTQgQEAKIAkJcmV0dXJuIHRhZzsKIAl9CiAJd3JiID0gd3JiX2Zyb21fbWNjcShwaGJhKTsKLQlyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKwlzZ2UgPSBub25lbWJlZGRlZF9zZ2wod3JiKTsKKworCXJlcSA9IG5vbmVtYl9jbWQtPnZhOworCW1lbXNldChyZXEsIDAsIHNpemVvZigqcmVxKSk7CiAJd3JiLT50YWcwIHw9IHRhZzsKIAotCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAxKTsKIAliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0lTQ1NJLAogCQkJICAgT1BDT0RFX0NPTU1PTl9JU0NTSV9UQ1BfQ09OTkVDVF9BTkRfT0ZGTE9BRCwKIAkJCSAgIHNpemVvZigqcmVxKSk7CkBAIC0zMzEsNiArMzI1LDcgQEAKIAkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgInVua25vd24gYWRkciBmYW1pbHkgJWRcbiIsCiAJCQkgICAgIGRzdF9hZGRyLT5zYV9mYW1pbHkpOwogCQlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwkJZnJlZV9tY2NfdGFnKCZwaGJhLT5jdHJsLCB0YWcpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAogCX0KQEAgLTMzOSwxMyArMzM0LDE2IEBACiAJaWYgKHBoYmEtPm54dF9jcWlkID09IHBoYmEtPm51bV9jcHVzKQogCQlwaGJhLT5ueHRfY3FpZCA9IDA7CiAJcmVxLT5jcV9pZCA9IHBod2lfY29udGV4dC0+YmVfY3FbaV0uaWQ7Ci0JU0VfREVCVUcoREJHX0xWTF84LCAiaT0lZCBjcV9pZD0lZCBcbiIsIGksIHJlcS0+Y3FfaWQpOworCVNFX0RFQlVHKERCR19MVkxfOCwgImk9JWQgY3FfaWQ9JWRcbiIsIGksIHJlcS0+Y3FfaWQpOwogCXJlcS0+ZGVmcV9pZCA9IGRlZl9oZHJfaWQ7CiAJcmVxLT5oZHJfcmluZ19pZCA9IGRlZl9oZHJfaWQ7CiAJcmVxLT5kYXRhX3JpbmdfaWQgPSBkZWZfZGF0YV9pZDsKIAlyZXEtPmRvX29mZmxvYWQgPSAxOwogCXJlcS0+ZGF0YW91dF90ZW1wbGF0ZV9wYS5sbyA9IHB0ZW1wbGF0ZV9hZGRyZXNzLT5sbzsKIAlyZXEtPmRhdGFvdXRfdGVtcGxhdGVfcGEuaGkgPSBwdGVtcGxhdGVfYWRkcmVzcy0+aGk7CisJc2dlLT5wYV9oaSA9IGNwdV90b19sZTMyKHVwcGVyXzMyX2JpdHMobm9uZW1iX2NtZC0+ZG1hKSk7CisJc2dlLT5wYV9sbyA9IGNwdV90b19sZTMyKG5vbmVtYl9jbWQtPmRtYSAmIDB4RkZGRkZGRkYpOworCXNnZS0+bGVuID0gY3B1X3RvX2xlMzIobm9uZW1iX2NtZC0+c2l6ZSk7CiAJYmVfbWNjX25vdGlmeShwaGJhKTsKIAlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKIAlyZXR1cm4gdGFnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuaCBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmgKaW5kZXggM2QzMTZiOC4uYjlhY2VkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuaAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5oCkBAIC04NiwxNiArODYsMTkgQEAKIAlzdHJ1Y3QgbWNjX3dyYl9wYXlsb2FkIHBheWxvYWQ7CiB9OwogCi11bnNpZ25lZCBjaGFyIG1nbXRfZXBmd19jbGVhbnVwKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgdW5zaWduZWQgc2hvcnQgY2h1dGUpOwotaW50IG1nbXRfb3Blbl9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgc3RydWN0IHNvY2thZGRyICpkc3RfYWRkciwKLQkJCSBzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcCk7CitpbnQgbWdtdF9lcGZ3X2NsZWFudXAoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCB1bnNpZ25lZCBzaG9ydCBjaHV0ZSk7CitpbnQgbWdtdF9vcGVuX2Nvbm5lY3Rpb24oc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJIHN0cnVjdCBzb2NrYWRkciAqZHN0X2FkZHIsCisJCQkgc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXAsCisJCQkgc3RydWN0IGJlX2RtYV9tZW0gKm5vbmVtYl9jbWQpOwogCi11bnNpZ25lZCBjaGFyIG1nbXRfdXBsb2FkX2Nvbm5lY3Rpb24oc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAordW5zaWduZWQgaW50IG1nbXRfdXBsb2FkX2Nvbm5lY3Rpb24oc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAogCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgY2lkLAogCQkJCSAgICAgdW5zaWduZWQgaW50IHVwbG9hZF9mbGFnKTsKLXVuc2lnbmVkIGNoYXIgbWdtdF9pbnZhbGlkYXRlX2ljZHMoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAordW5zaWduZWQgaW50IG1nbXRfaW52YWxpZGF0ZV9pY2RzKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKIAkJCQlzdHJ1Y3QgaW52YWxpZGF0ZV9jb21tYW5kX3RhYmxlICppbnZfdGJsLAotCQkJCXVuc2lnbmVkIGludCBudW1faW52YWxpZGF0ZSwgdW5zaWduZWQgaW50IGNpZCk7CisJCQkJdW5zaWduZWQgaW50IG51bV9pbnZhbGlkYXRlLCB1bnNpZ25lZCBpbnQgY2lkLAorCQkJCXN0cnVjdCBiZV9kbWFfbWVtICpub25lbWJfY21kKTsKIAogc3RydWN0IGlzY3NpX2ludmFsaWRhdGVfY29ubmVjdGlvbl9wYXJhbXNfaW4gewogCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CkBAIC0yMzcsMTAgKzI0MCwxMCBAQAogCXUxNiBjaWRfdmxkOwogfTsKIAotdW5zaWduZWQgY2hhciBtZ210X2dldF9md19jb25maWcoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKK2ludCBtZ210X2dldF9md19jb25maWcoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKIAkJCQkgc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKTsKIAotdW5zaWduZWQgY2hhciBtZ210X2ludmFsaWRhdGVfY29ubmVjdGlvbihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCit1bnNpZ25lZCBpbnQgbWdtdF9pbnZhbGlkYXRlX2Nvbm5lY3Rpb24oc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAogCQkJCQkgc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXAsCiAJCQkJCSB1bnNpZ25lZCBzaG9ydCBjaWQsCiAJCQkJCSB1bnNpZ25lZCBzaG9ydCBpc3N1ZV9yZXNldCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvTWFrZWZpbGUgYi9kcml2ZXJzL3Njc2kvYmZhL01ha2VmaWxlCmluZGV4IDE3ZTA2Y2EuLmFjM2ZkZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKIG9iai0kKENPTkZJR19TQ1NJX0JGQV9GQykgOj0gYmZhLm8KIAogYmZhLXkgOj0gYmZhZC5vIGJmYWRfaW50ci5vIGJmYWRfb3MubyBiZmFkX2ltLm8gYmZhZF9hdHRyLm8gYmZhZF9md2ltZy5vCi0KK2JmYS15ICs9IGJmYWRfZGVidWdmcy5vCiBiZmEteSArPSBiZmFfY29yZS5vIGJmYV9pb2MubyBiZmFfaW9jX2N0Lm8gYmZhX2lvY19jYi5vIGJmYV9pb2NmYy5vIGJmYV9mY3hwLm8KIGJmYS15ICs9IGJmYV9scHMubyBiZmFfaHdfY2IubyBiZmFfaHdfY3QubyBiZmFfaW50ci5vIGJmYV90aW1lci5vIGJmYV9ycG9ydC5vCiBiZmEteSArPSBiZmFfZmNwb3J0Lm8gYmZhX3BvcnQubyBiZmFfdWYubyBiZmFfc2dwZy5vIGJmYV9tb2R1bGUubyBiZmFfaW9pbS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jYl9pb2ltX21hY3Jvcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY2JfaW9pbV9tYWNyb3MuaAppbmRleCA1M2E2MTZmLi4zOTA2ZWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jYl9pb2ltX21hY3Jvcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NiX2lvaW1fbWFjcm9zLmgKQEAgLTE3MSw2ICsxNzEsMTEgQEAKIAlyZXR1cm4gY21uZC0+Y21kX2xlbjsKIH0KIAotCisvKioKKyAqIEFzc2lnbiBxdWV1ZSB0byBiZSB1c2VkIGZvciB0aGUgSS9PIHJlcXVlc3QuIFRoaXMgdmFsdWUgZGVwZW5kcyBvbiB3aGV0aGVyCisgKiB0aGUgZHJpdmVyIHdhbnRzIHRvIHVzZSB0aGUgcXVldWVzIHZpYSBhbnkgc3BlY2lmaWMgYWxnb3JpdGhtLiBDdXJyZW50bHksCisgKiB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQuCisgKi8KKyNkZWZpbmUgYmZhX2NiX2lvaW1fZ2V0X3JlcXEoX19kaW8pIEJGQV9GQUxTRQogCiAjZW5kaWYgLyogX19CRkFfSENCX0lPSU1fTUFDUk9TX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfY29yZS5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY29yZS5jCmluZGV4IDNhN2IzZjguLjc2ZmE1YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jb3JlLmMKQEAgLTMzMyw5ICszMzMsMTAgQEAKIAkJe0JGQV9QQ0lfVkVORE9SX0lEX0JST0NBREUsIEJGQV9QQ0lfREVWSUNFX0lEX0ZDXzhHMlB9LAogCQl7QkZBX1BDSV9WRU5ET1JfSURfQlJPQ0FERSwgQkZBX1BDSV9ERVZJQ0VfSURfRkNfOEcxUH0sCiAJCXtCRkFfUENJX1ZFTkRPUl9JRF9CUk9DQURFLCBCRkFfUENJX0RFVklDRV9JRF9DVH0sCisJCXtCRkFfUENJX1ZFTkRPUl9JRF9CUk9DQURFLCBCRkFfUENJX0RFVklDRV9JRF9DVF9GQ30sCiAJfTsKIAotCSpucGNpaWRzID0gc2l6ZW9mKF9fcGNpaWRzKSAvIHNpemVvZihfX3BjaWlkc1swXSk7CisJKm5wY2lpZHMgPSBBUlJBWV9TSVpFKF9fcGNpaWRzKTsKIAkqcGNpaWRzID0gX19wY2lpZHM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcGltLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BpbS5jCmluZGV4IDc5MGM5NDUuLjhjNzAzZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcGltLmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNwaW0uYwpAQCAtODAsMTEgKzgwLDYgQEAKIH0KIAogc3RhdGljIHZvaWQKLWJmYV9mY3BpbV9pbml0ZG9uZShzdHJ1Y3QgYmZhX3MgKmJmYSkKLXsKLX0KLQotc3RhdGljIHZvaWQKIGJmYV9mY3BpbV9kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpCiB7CiAJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CkBAIC0xNzIsNCArMTY3LDI4IEBACiAJcmV0dXJuIGZjcGltLT5xX2RlcHRoOwogfQogCit2b2lkCitiZmFfZmNwaW1fdXBkYXRlX2lvcmVkaXJlY3Qoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhX2Jvb2xlYW5fdCBpb3JlZGlyZWN0OwogCisJLyoKKwkgKiBJTyByZWRpcmVjdGlvbiBpcyB0dXJuZWQgb2ZmIHdoZW4gUW9TIGlzIGVuYWJsZWQgYW5kIHZpY2UgdmVyc2EKKwkgKi8KKwlpb3JlZGlyZWN0ID0gYmZhX2ZjcG9ydF9pc19xb3NfZW5hYmxlZChiZmEpID8gQkZBX0ZBTFNFIDogQkZBX1RSVUU7CisKKwkvKgorCSAqIE5vdGlmeSB0aGUgYmZhZCBtb2R1bGUgb2YgYSBwb3NzaWJsZSBzdGF0ZSBjaGFuZ2UgaW4KKwkgKiBJTyByZWRpcmVjdGlvbiBjYXBhYmlsaXR5LCBkdWUgdG8gYSBRb1Mgc3RhdGUgY2hhbmdlLiBiZmFkIHdpbGwKKwkgKiBjaGVjayBvbiB0aGUgc3VwcG9ydCBmb3IgaW8gcmVkaXJlY3Rpb24gYW5kIHVwZGF0ZSB0aGUKKwkgKiBmY3BpbSdzIGlvcmVkaXJlY3Qgc3RhdGUgYWNjb3JkaW5nbHkuCisJICovCisJYmZhX2NiX2lvcmVkaXJlY3Rfc3RhdGVfY2hhbmdlKCh2b2lkICopKGJmYS0+YmZhZCksIGlvcmVkaXJlY3QpOworfQorCit2b2lkCitiZmFfZmNwaW1fc2V0X2lvcmVkaXJlY3Qoc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3Qgc3RhdGUpCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisJZmNwaW0tPmlvcmVkaXJlY3QgPSBzdGF0ZTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcGltX3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcGltX3ByaXYuaAppbmRleCA1Y2Y0MTg0Li43NjI1MTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BpbV9wcml2LmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNwaW1fcHJpdi5oCkBAIC00OSw3ICs0OSw4IEBACiAJaW50CQkJbnVtX3Rza2ltX3JlcXM7CiAJdTMyCQlwYXRoX3RvdjsKIAl1MTYJCXFfZGVwdGg7Ci0JdTE2CQlyc3ZkOworCXU4ICAgICAgICAgICAgICByZXFxOyAgICAgICAgICAgLyogUmVxdWVzdCBxdWV1ZSB0byBiZSB1c2VkICovCisJdTgJCXJzdmQ7CiAJc3RydWN0IGxpc3RfaGVhZCAJaXRuaW1fcTsgICAgICAgIC8qICBxdWV1ZSBvZiBhY3RpdmUgaXRuaW0gICAgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIAlpb2ltX2ZyZWVfcTsgICAgLyogIGZyZWUgSU8gcmVzb3VyY2VzICAgICAgICAqLwogCXN0cnVjdCBsaXN0X2hlYWQgCWlvaW1fcmVzZnJlZV9xOyAvKiAgSU9zIHdhaXRpbmcgZm9yIGYvdyAgICAgICovCkBAIC01OCw2ICs1OSw3IEBACiAJdTMyCWlvc19hY3RpdmU7CS8qICBjdXJyZW50IGFjdGl2ZSBJT3MJICAgICAgKi8KIAl1MzIJZGVsYXlfY29tcDsKIAlzdHJ1Y3QgYmZhX2ZjcGltX3N0YXRzX3Mgc3RhdHM7CisJYmZhX2Jvb2xlYW5fdCAgICAgICAgICAgaW9yZWRpcmVjdDsKIH07CiAKIHN0cnVjdCBiZmFfaW9pbV9zOwpAQCAtODIsNiArODQsNyBAQAogCXN0cnVjdCBiZmFfY2JfcWVfcyBoY2JfcWU7CS8qICBiZmEgY2FsbGJhY2sgcWVsZW0gICAgICAgKi8KIAliZmFfY2JfY2Jmbl90IGlvX2NiZm47CQkvKiAgSU8gY29tcGxldGlvbiBoYW5kbGVyICAgICovCiAJc3RydWN0IGJmYV9pb2ltX3NwX3MgKmlvc3A7CS8qICBzbG93LXBhdGggSU8gaGFuZGxpbmcgICAgKi8KKwl1OCByZXFxOyAgICAgICAgICAgCQkvKiBSZXF1ZXN0IHF1ZXVlIGZvciBJL08gICAgKi8KIH07CiAKIHN0cnVjdCBiZmFfaW9pbV9zcF9zIHsKQEAgLTE0MSw2ICsxNDQsNyBAQAogCXN0cnVjdCBiZmFfcmVxcV93YWl0X3MgcmVxcV93YWl0OyAvKiAgdG8gd2FpdCBmb3Igcm9vbSBpbiByZXFxICovCiAJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW07CS8qICBmY3BpbSBtb2R1bGUgICAgICAgICAgICAgICAgKi8KIAlzdHJ1Y3QgYmZhX2l0bmltX2hhbF9zdGF0c19zCXN0YXRzOworCXN0cnVjdCBiZmFfaXRuaW1fbGF0ZW5jeV9zICBpb19sYXRlbmN5OwogfTsKIAogI2RlZmluZSBiZmFfaXRuaW1faXNfb25saW5lKF9pdG5pbSkgKChfaXRuaW0pLT5pc19vbmxpbmUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BvcnQuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcG9ydC5jCmluZGV4IGM1ODk0ODguLmYwOTMzZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcG9ydC5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcG9ydC5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8YmZhLmg+CiAjaW5jbHVkZSA8YmZhX3N2Yy5oPgogI2luY2x1ZGUgPGJmaS9iZmlfcHBvcnQuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX3BiYy5oPgogI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgogI2luY2x1ZGUgPGFlbi9iZmFfYWVuLmg+CiAjaW5jbHVkZSA8Y3MvYmZhX3Bsb2cuaD4KQEAgLTMxMCwxMCArMzExLDEyIEBACiAKIAkJaWYgKCFiZmFfaW9jX2dldF9mY21vZGUoJmZjcG9ydC0+YmZhLT5pb2MpKSB7CiAKLQkJCWJmYV90cmMoZmNwb3J0LT5iZmEsIHBldmVudC0+bGlua19zdGF0ZS5mY2YuZmlwZW5hYmxlZCk7Ci0JCQliZmFfdHJjKGZjcG9ydC0+YmZhLCBwZXZlbnQtPmxpbmtfc3RhdGUuZmNmLmZpcGZhaWxlZCk7CisJCQliZmFfdHJjKGZjcG9ydC0+YmZhLAorCQkJCXBldmVudC0+bGlua19zdGF0ZS52Y19mY2YuZmNmLmZpcGVuYWJsZWQpOworCQkJYmZhX3RyYyhmY3BvcnQtPmJmYSwKKwkJCQlwZXZlbnQtPmxpbmtfc3RhdGUudmNfZmNmLmZjZi5maXBmYWlsZWQpOwogCi0JCQlpZiAocGV2ZW50LT5saW5rX3N0YXRlLmZjZi5maXBmYWlsZWQpCisJCQlpZiAocGV2ZW50LT5saW5rX3N0YXRlLnZjX2ZjZi5mY2YuZmlwZmFpbGVkKQogCQkJCWJmYV9wbG9nX3N0cihmY3BvcnQtPmJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUwsCiAJCQkJCUJGQV9QTF9FSURfRklQX0ZDRl9ESVNDLCAwLAogCQkJCQkiRklQIEZDRiBEaXNjb3ZlcnkgRmFpbGVkIik7CkBAIC04ODgsNiArODkxLDcgQEAKIAlzdHJ1Y3QgYmZhX2ZjcG9ydF9zICpmY3BvcnQgPSBCRkFfRkNQT1JUX01PRChiZmEpOwogCXN0cnVjdCBiZmFfcHBvcnRfY2ZnX3MgKnBvcnRfY2ZnID0gJmZjcG9ydC0+Y2ZnOwogCXN0cnVjdCBiZmFfZmNwb3J0X2xuX3MgKmxuID0gJmZjcG9ydC0+bG47CisJc3RydWN0IGJmYV90aW1ldmFsX3MgdHY7CiAKIAliZmFfb3NfbWVtc2V0KGZjcG9ydCwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfZmNwb3J0X3MpKTsKIAlmY3BvcnQtPmJmYSA9IGJmYTsKQEAgLTg5OSw2ICs5MDMsMTIgQEAKIAliZmFfc21fc2V0X3N0YXRlKGxuLCBiZmFfZmNwb3J0X2xuX3NtX2RuKTsKIAogCS8qKgorCSAqIGluaXRpYWxpemUgdGltZSBzdGFtcCBmb3Igc3RhdHMgcmVzZXQKKwkgKi8KKwliZmFfb3NfZ2V0dGltZW9mZGF5KCZ0dik7CisJZmNwb3J0LT5zdGF0c19yZXNldF90aW1lID0gdHYudHZfc2VjOworCisJLyoqCiAJICogaW5pdGlhbGl6ZSBhbmQgc2V0IGRlZmF1bHQgY29uZmlndXJhdGlvbgogCSAqLwogCXBvcnRfY2ZnLT50b3BvbG9neSA9IEJGQV9QUE9SVF9UT1BPTE9HWV9QMlA7CkBAIC05MTIsMjUgKzkyMiw2IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1iZmFfZmNwb3J0X2luaXRkb25lKHN0cnVjdCBiZmFfcyAqYmZhKQotewotCXN0cnVjdCBiZmFfZmNwb3J0X3MgKmZjcG9ydCA9IEJGQV9GQ1BPUlRfTU9EKGJmYSk7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplIHBvcnQgYXR0cmlidXRlcyBmcm9tIElPQyBoYXJkd2FyZSBkYXRhLgotCSAqLwotCWJmYV9mY3BvcnRfc2V0X3d3bnMoZmNwb3J0KTsKLQlpZiAoZmNwb3J0LT5jZmcubWF4ZnJzaXplID09IDApCi0JCWZjcG9ydC0+Y2ZnLm1heGZyc2l6ZSA9IGJmYV9pb2NfbWF4ZnJzaXplKCZiZmEtPmlvYyk7Ci0JZmNwb3J0LT5jZmcucnhfYmJjcmVkaXQgPSBiZmFfaW9jX3J4X2JiY3JlZGl0KCZiZmEtPmlvYyk7Ci0JZmNwb3J0LT5zcGVlZF9zdXAgPSBiZmFfaW9jX3NwZWVkX3N1cCgmYmZhLT5pb2MpOwotCi0JYmZhX2Fzc2VydChmY3BvcnQtPmNmZy5tYXhmcnNpemUpOwotCWJmYV9hc3NlcnQoZmNwb3J0LT5jZmcucnhfYmJjcmVkaXQpOwotCWJmYV9hc3NlcnQoZmNwb3J0LT5zcGVlZF9zdXApOwotfQotCi1zdGF0aWMgdm9pZAogYmZhX2ZjcG9ydF9kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpCiB7CiB9CkBAIC05NzEsMTQgKzk2MiwxNSBAQAogCWZjcG9ydC0+dG9wb2xvZ3kgPSBwZXZlbnQtPmxpbmtfc3RhdGUudG9wb2xvZ3k7CiAKIAlpZiAoZmNwb3J0LT50b3BvbG9neSA9PSBCRkFfUFBPUlRfVE9QT0xPR1lfTE9PUCkKLQkJZmNwb3J0LT5teWFscGEgPQotCQkJcGV2ZW50LT5saW5rX3N0YXRlLnRsLmxvb3BfaW5mby5teWFscGE7CisJCWZjcG9ydC0+bXlhbHBhID0gMDsKIAogCS8qCiAJICogUW9TIERldGFpbHMKIAkgKi8KIAliZmFfb3NfYXNzaWduKGZjcG9ydC0+cW9zX2F0dHIsIHBldmVudC0+bGlua19zdGF0ZS5xb3NfYXR0cik7Ci0JYmZhX29zX2Fzc2lnbihmY3BvcnQtPnFvc192Y19hdHRyLCBwZXZlbnQtPmxpbmtfc3RhdGUucW9zX3ZjX2F0dHIpOworCWJmYV9vc19hc3NpZ24oZmNwb3J0LT5xb3NfdmNfYXR0ciwKKwkJcGV2ZW50LT5saW5rX3N0YXRlLnZjX2ZjZi5xb3NfdmNfYXR0cik7CisKIAogCWJmYV90cmMoZmNwb3J0LT5iZmEsIGZjcG9ydC0+c3BlZWQpOwogCWJmYV90cmMoZmNwb3J0LT5iZmEsIGZjcG9ydC0+dG9wb2xvZ3kpOwpAQCAtMTE0NSwxNiArMTEzNywyMiBAQAogCiAJaWYgKGNvbXBsZXRlKSB7CiAJCWlmIChmY3BvcnQtPnN0YXRzX3N0YXR1cyA9PSBCRkFfU1RBVFVTX09LKSB7CisJCQlzdHJ1Y3QgYmZhX3RpbWV2YWxfcyB0djsKIAogCQkJLyogU3dhcCBGQyBRb1Mgb3IgRkNvRSBzdGF0cyAqLwotCQkJaWYgKGJmYV9pb2NfZ2V0X2ZjbW9kZSgmZmNwb3J0LT5iZmEtPmlvYykpCisJCQlpZiAoYmZhX2lvY19nZXRfZmNtb2RlKCZmY3BvcnQtPmJmYS0+aW9jKSkgewogCQkJCWJmYV9mY3BvcnRfcW9zX3N0YXRzX3N3YXAoCiAJCQkJCSZmY3BvcnQtPnN0YXRzX3JldC0+ZmNxb3MsCiAJCQkJCSZmY3BvcnQtPnN0YXRzLT5mY3Fvcyk7Ci0JCQllbHNlCisJCQl9IGVsc2UgewogCQkJCWJmYV9mY3BvcnRfZmNvZV9zdGF0c19zd2FwKAogCQkJCQkmZmNwb3J0LT5zdGF0c19yZXQtPmZjb2UsCiAJCQkJCSZmY3BvcnQtPnN0YXRzLT5mY29lKTsKKworCQkJCWJmYV9vc19nZXR0aW1lb2ZkYXkoJnR2KTsKKwkJCQlmY3BvcnQtPnN0YXRzX3JldC0+ZmNvZS5zZWNzX3Jlc2V0ID0KKwkJCQkJdHYudHZfc2VjIC0gZmNwb3J0LT5zdGF0c19yZXNldF90aW1lOworCQkJfQogCQl9CiAJCWZjcG9ydC0+c3RhdHNfY2JmbihmY3BvcnQtPnN0YXRzX2NiYXJnLCBmY3BvcnQtPnN0YXRzX3N0YXR1cyk7CiAJfSBlbHNlIHsKQEAgLTEyMTAsNiArMTIwOCwxNCBAQAogCXN0cnVjdCBiZmFfZmNwb3J0X3MgKmZjcG9ydCA9IGNiYXJnOwogCiAJaWYgKGNvbXBsZXRlKSB7CisJCXN0cnVjdCBiZmFfdGltZXZhbF9zIHR2OworCisJCS8qKgorCQkgKiByZS1pbml0aWFsaXplIHRpbWUgc3RhbXAgZm9yIHN0YXRzIHJlc2V0CisJCSAqLworCQliZmFfb3NfZ2V0dGltZW9mZGF5KCZ0dik7CisJCWZjcG9ydC0+c3RhdHNfcmVzZXRfdGltZSA9IHR2LnR2X3NlYzsKKwogCQlmY3BvcnQtPnN0YXRzX2NiZm4oZmNwb3J0LT5zdGF0c19jYmFyZywgZmNwb3J0LT5zdGF0c19zdGF0dXMpOwogCX0gZWxzZSB7CiAJCWZjcG9ydC0+c3RhdHNfYnVzeSA9IEJGQV9GQUxTRTsKQEAgLTEyNjMsNiArMTI2OSwyOSBAQAogICovCiAKIC8qKgorICogQ2FsbGVkIHRvIGluaXRpYWxpemUgcG9ydCBhdHRyaWJ1dGVzCisgKi8KK3ZvaWQKK2JmYV9mY3BvcnRfaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX2ZjcG9ydF9zICpmY3BvcnQgPSBCRkFfRkNQT1JUX01PRChiZmEpOworCisJLyoqCisJICogSW5pdGlhbGl6ZSBwb3J0IGF0dHJpYnV0ZXMgZnJvbSBJT0MgaGFyZHdhcmUgZGF0YS4KKwkgKi8KKwliZmFfZmNwb3J0X3NldF93d25zKGZjcG9ydCk7CisJaWYgKGZjcG9ydC0+Y2ZnLm1heGZyc2l6ZSA9PSAwKQorCQlmY3BvcnQtPmNmZy5tYXhmcnNpemUgPSBiZmFfaW9jX21heGZyc2l6ZSgmYmZhLT5pb2MpOworCWZjcG9ydC0+Y2ZnLnJ4X2JiY3JlZGl0ID0gYmZhX2lvY19yeF9iYmNyZWRpdCgmYmZhLT5pb2MpOworCWZjcG9ydC0+c3BlZWRfc3VwID0gYmZhX2lvY19zcGVlZF9zdXAoJmJmYS0+aW9jKTsKKworCWJmYV9hc3NlcnQoZmNwb3J0LT5jZmcubWF4ZnJzaXplKTsKKwliZmFfYXNzZXJ0KGZjcG9ydC0+Y2ZnLnJ4X2JiY3JlZGl0KTsKKwliZmFfYXNzZXJ0KGZjcG9ydC0+c3BlZWRfc3VwKTsKK30KKworCisvKioKICAqIEZpcm13YXJlIG1lc3NhZ2UgaGFuZGxlci4KICAqLwogdm9pZApAQCAtMTM1NSw2ICsxMzg0LDE3IEBACiBiZmFfZmNwb3J0X2VuYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKIHsKIAlzdHJ1Y3QgYmZhX2ZjcG9ydF9zICpmY3BvcnQgPSBCRkFfRkNQT1JUX01PRChiZmEpOworCXN0cnVjdCBiZmFfaW9jZmNfcyAqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ3JzcF9zICpjZmdyc3AgPSBpb2NmYy0+Y2ZncnNwOworCisJLyogaWYgcG9ydCBpcyBQQkMgZGlzYWJsZWQsIHJldHVybiBlcnJvciAqLworCWlmIChjZmdyc3AtPnBiY19jZmcucG9ydF9lbmFibGVkID09IEJGSV9QQkNfUE9SVF9ESVNBQkxFRCkgeworCQliZmFfdHJjKGJmYSwgZmNwb3J0LT5wd3duKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfUEJDOworCX0KKworCWlmIChiZmFfaW9jX2lzX2Rpc2FibGVkKCZiZmEtPmlvYykpCisJCXJldHVybiBCRkFfU1RBVFVTX0lPQ19ESVNBQkxFRDsKIAogCWlmIChmY3BvcnQtPmRpYWdfYnVzeSkKIAkJcmV0dXJuIEJGQV9TVEFUVVNfRElBR19CVVNZOwpAQCAtMTM2OSw2ICsxNDA5LDE2IEBACiBiZmFfc3RhdHVzX3QKIGJmYV9mY3BvcnRfZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKIHsKKwlzdHJ1Y3QgYmZhX2ZjcG9ydF9zICpmY3BvcnQgPSBCRkFfRkNQT1JUX01PRChiZmEpOworCXN0cnVjdCBiZmFfaW9jZmNfcyAqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ3JzcF9zICpjZmdyc3AgPSBpb2NmYy0+Y2ZncnNwOworCisJLyogaWYgcG9ydCBpcyBQQkMgZGlzYWJsZWQsIHJldHVybiBlcnJvciAqLworCWlmIChjZmdyc3AtPnBiY19jZmcucG9ydF9lbmFibGVkID09IEJGSV9QQkNfUE9SVF9ESVNBQkxFRCkgeworCQliZmFfdHJjKGJmYSwgZmNwb3J0LT5wd3duKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfUEJDOworCX0KKwogCWJmYV9zbV9zZW5kX2V2ZW50KEJGQV9GQ1BPUlRfTU9EKGJmYSksIEJGQV9GQ1BPUlRfU01fRElTQUJMRSk7CiAJcmV0dXJuIEJGQV9TVEFUVVNfT0s7CiB9CkBAIC0xNTU5LDEyICsxNjA5LDE3IEBACiBiZmFfZmNwb3J0X2dldF9hdHRyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX3Bwb3J0X2F0dHJfcyAqYXR0cikKIHsKIAlzdHJ1Y3QgYmZhX2ZjcG9ydF9zICpmY3BvcnQgPSBCRkFfRkNQT1JUX01PRChiZmEpOworCXN0cnVjdCBiZmFfaW9jZmNfcyAqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ3JzcF9zICpjZmdyc3AgPSBpb2NmYy0+Y2ZncnNwOwogCiAJYmZhX29zX21lbXNldChhdHRyLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9wcG9ydF9hdHRyX3MpKTsKIAogCWF0dHItPm53d24gPSBmY3BvcnQtPm53d247CiAJYXR0ci0+cHd3biA9IGZjcG9ydC0+cHd3bjsKIAorCWF0dHItPmZhY3Rvcnlwd3duID0gIGJmYV9pb2NfZ2V0X21mZ19wd3duKCZiZmEtPmlvYyk7CisJYXR0ci0+ZmFjdG9yeW53d24gPSAgYmZhX2lvY19nZXRfbWZnX253d24oJmJmYS0+aW9jKTsKKwogCWJmYV9vc19tZW1jcHkoJmF0dHItPnBwb3J0X2NmZywgJmZjcG9ydC0+Y2ZnLAogCQkgICAgICBzaXplb2Yoc3RydWN0IGJmYV9wcG9ydF9jZmdfcykpOwogCS8qCkBAIC0xNTkwLDExICsxNjQ1LDE4IEBACiAKIAlhdHRyLT5wcG9ydF9jZmcucGF0aF90b3YgPSBiZmFfZmNwaW1fcGF0aF90b3ZfZ2V0KGJmYSk7CiAJYXR0ci0+cHBvcnRfY2ZnLnFfZGVwdGggPSBiZmFfZmNwaW1fcWRlcHRoX2dldChiZmEpOwotCWF0dHItPnBvcnRfc3RhdGUgPSBiZmFfc21fdG9fc3RhdGUoaGFsX3Bwb3J0X3NtX3RhYmxlLCBmY3BvcnQtPnNtKTsKLQlpZiAoYmZhX2lvY19pc19kaXNhYmxlZCgmZmNwb3J0LT5iZmEtPmlvYykpCi0JCWF0dHItPnBvcnRfc3RhdGUgPSBCRkFfUFBPUlRfU1RfSU9DRElTOwotCWVsc2UgaWYgKGJmYV9pb2NfZndfbWlzbWF0Y2goJmZjcG9ydC0+YmZhLT5pb2MpKQotCQlhdHRyLT5wb3J0X3N0YXRlID0gQkZBX1BQT1JUX1NUX0ZXTUlTTUFUQ0g7CisKKwkvKiBQQkMgRGlzYWJsZWQgU3RhdGUgKi8KKwlpZiAoY2ZncnNwLT5wYmNfY2ZnLnBvcnRfZW5hYmxlZCA9PSBCRklfUEJDX1BPUlRfRElTQUJMRUQpCisJCWF0dHItPnBvcnRfc3RhdGUgPSBCRkFfUFBPUlRfU1RfUFJFQk9PVF9ESVNBQkxFRDsKKwllbHNlIHsKKwkJYXR0ci0+cG9ydF9zdGF0ZSA9IGJmYV9zbV90b19zdGF0ZSgKKwkJCQloYWxfcHBvcnRfc21fdGFibGUsIGZjcG9ydC0+c20pOworCQlpZiAoYmZhX2lvY19pc19kaXNhYmxlZCgmZmNwb3J0LT5iZmEtPmlvYykpCisJCQlhdHRyLT5wb3J0X3N0YXRlID0gQkZBX1BQT1JUX1NUX0lPQ0RJUzsKKwkJZWxzZSBpZiAoYmZhX2lvY19md19taXNtYXRjaCgmZmNwb3J0LT5iZmEtPmlvYykpCisJCQlhdHRyLT5wb3J0X3N0YXRlID0gQkZBX1BQT1JUX1NUX0ZXTUlTTUFUQ0g7CisJfQogfQogCiAjZGVmaW5lIEJGQV9GQ1BPUlRfU1RBVFNfVE9WCTEwMDAKQEAgLTE4MDEsOCArMTg2MywxMyBAQAogCiAJYmZhX3RyYyhiZmEsIGlvY190eXBlKTsKIAotCWlmIChpb2NfdHlwZSA9PSBCRkFfSU9DX1RZUEVfRkMpCisJaWYgKGlvY190eXBlID09IEJGQV9JT0NfVFlQRV9GQykgewogCQlmY3BvcnQtPmNmZy5xb3NfZW5hYmxlZCA9IG9uX29mZjsKKwkJLyoqCisJCSAqIE5vdGlmeSBmY3BpbSBvZiB0aGUgY2hhbmdlIGluIFFvUyBzdGF0ZQorCQkgKi8KKwkJYmZhX2ZjcGltX3VwZGF0ZV9pb3JlZGlyZWN0KGJmYSk7CisJfQogfQogCiB2b2lkCkBAIC0xODg2LDQgKzE5NTMsMTAgQEAKIAlyZXR1cm4gYmZhX3NtX2NtcF9zdGF0ZShCRkFfRkNQT1JUX01PRChiZmEpLCBiZmFfZmNwb3J0X3NtX2xpbmt1cCk7CiB9CiAKK2JmYV9ib29sZWFuX3QKK2JmYV9mY3BvcnRfaXNfcW9zX2VuYWJsZWQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9mY3BvcnRfcyAqZmNwb3J0ID0gQkZBX0ZDUE9SVF9NT0QoYmZhKTsKIAorCXJldHVybiBmY3BvcnQtPmNmZy5xb3NfZW5hYmxlZDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjcy5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzLmMKaW5kZXggMzUxNjE3Mi4uZDFhOTkyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzLmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzLmMKQEAgLTg2LDcgKzg2LDcgQEAKIAliZmFfYXR0YWNoX2ZjcyhiZmEpOwogCWZjYnVpbGRfaW5pdCgpOwogCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihmY3NfbW9kdWxlcykgLyBzaXplb2YoZmNzX21vZHVsZXNbMF0pOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmY3NfbW9kdWxlcyk7IGkrKykgewogCQltb2QgPSAmZmNzX21vZHVsZXNbaV07CiAJCWlmIChtb2QtPmF0dGFjaCkKIAkJCW1vZC0+YXR0YWNoKGZjcyk7CkBAIC05OSwxNCArOTksMjIgQEAKIHZvaWQKIGJmYV9mY3NfaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCiB7Ci0JaW50ICAgICAgICAgICAgIGk7CisJaW50IGksIG5wYmNfdnBvcnRzOwogCXN0cnVjdCBiZmFfZmNzX21vZF9zICAqbW9kOworCXN0cnVjdCBiZmlfcGJjX3Zwb3J0X3MgcGJjX3Zwb3J0c1tCRklfUEJDX01BWF9WUE9SVFNdOwogCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihmY3NfbW9kdWxlcykgLyBzaXplb2YoZmNzX21vZHVsZXNbMF0pOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmY3NfbW9kdWxlcyk7IGkrKykgewogCQltb2QgPSAmZmNzX21vZHVsZXNbaV07CiAJCWlmIChtb2QtPm1vZGluaXQpCiAJCQltb2QtPm1vZGluaXQoZmNzKTsKIAl9CisJLyogSW5pdGlhbGl6ZSBwYmMgdnBvcnRzICovCisJaWYgKCFmY3MtPm1pbl9jZmcpIHsKKwkJbnBiY192cG9ydHMgPQorCQkJYmZhX2lvY2ZjX2dldF9wYmNfdnBvcnRzKGZjcy0+YmZhLCBwYmNfdnBvcnRzKTsKKwkJZm9yIChpID0gMDsgaSA8IG5wYmNfdnBvcnRzOyBpKyspCisJCQliZmFfZmNiX3BiY192cG9ydF9jcmVhdGUoZmNzLT5iZmEtPmJmYWQsIHBiY192cG9ydHNbaV0pOworCX0KIH0KIAogLyoqCkBAIC0xNjMsMTMgKzE3MSwxMSBAQAogYmZhX2Zjc19leGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKIHsKIAlzdHJ1Y3QgYmZhX2Zjc19tb2RfcyAgKm1vZDsKLQlpbnQgICAgICAgICAgICAgbm1vZHMsIGk7CisJaW50IGk7CiAKIAliZmFfd2NfaW5pdCgmZmNzLT53YywgYmZhX2Zjc19leGl0X2NvbXAsIGZjcyk7CiAKLQlubW9kcyA9IHNpemVvZihmY3NfbW9kdWxlcykgLyBzaXplb2YoZmNzX21vZHVsZXNbMF0pOwotCi0JZm9yIChpID0gMDsgaSA8IG5tb2RzOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmY3NfbW9kdWxlcyk7IGkrKykgewogCiAJCW1vZCA9ICZmY3NfbW9kdWxlc1tpXTsKIAkJaWYgKG1vZC0+bW9kZXhpdCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX2xwb3J0LmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfbHBvcnQuYwppbmRleCA3YzEyNTFjLi4zNWRmMjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfbHBvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfbHBvcnQuYwpAQCAtMTM1LDYgKzEzNSw5IEBACiAJCWJmYV9mY3NfcG9ydF9kZWxldGVkKHBvcnQpOwogCQlicmVhazsKIAorCWNhc2UgQkZBX0ZDU19QT1JUX1NNX09GRkxJTkU6CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJYmZhX3NtX2ZhdWx0KHBvcnQtPmZjcywgZXZlbnQpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjeHAuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjeHAuYwppbmRleCBjZjBhZDY3Li44MjU4Zjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3hwLmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmN4cC5jCkBAIC0xNDksMTEgKzE0OSw2IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1iZmFfZmN4cF9pbml0ZG9uZShzdHJ1Y3QgYmZhX3MgKmJmYSkKLXsKLX0KLQotc3RhdGljIHZvaWQKIGJmYV9mY3hwX2RldGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSkKIHsKIH0KQEAgLTIyNSw3ICsyMjAsNyBAQAogCQkgICAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsIHUzMiByc3BfbGVuLAogCQkgICAgICAgdTMyIHJlc2lkX2xlbiwgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCiB7Ci0JLyoqZGlzY2FyZGVkIGZjeHAgY29tcGxldGlvbiAqLworCS8qIGRpc2NhcmRlZCBmY3hwIGNvbXBsZXRpb24gKi8KIH0KIAogc3RhdGljIHZvaWQKQEAgLTUyNywxMSArNTIyLDggQEAKIAkJaWYgKG5yZXFfc2dsZXMgPiBCRklfU0dFX0lOTElORSkgewogCQkJbnJlcV9zZ3BnID0gQkZBX1NHUEdfTlBBR0UobnJlcV9zZ2xlcyk7CiAKLQkJCWlmIChiZmFfc2dwZ19tYWxsb2MKLQkJCSAgICAoYmZhLCAmZmN4cC0+cmVxX3NncGdfcSwgbnJlcV9zZ3BnKQorCQkJaWYgKGJmYV9zZ3BnX21hbGxvYyhiZmEsICZmY3hwLT5yZXFfc2dwZ19xLCBucmVxX3NncGcpCiAJCQkgICAgIT0gQkZBX1NUQVRVU19PSykgewotCQkJCS8qIGJmYV9zZ3BnX3dhaXQoYmZhLCAmZmN4cC0+cmVxX3NncGdfd3FlLAotCQkJCW5yZXFfc2dwZyk7ICovCiAJCQkJLyoKIAkJCQkgKiBUT0RPCiAJCQkJICovCkBAIC02ODUsNyArNjc3LDcgQEAKIAlmY3hwLT5zZW5kX2NiYXJnID0gY2Jhcmc7CiAKIAkvKioKLQkgKiBJZiBubyByb29tIGluIENQRSBxdWV1ZSwgd2FpdCBmb3IKKwkgKiBJZiBubyByb29tIGluIENQRSBxdWV1ZSwgd2FpdCBmb3Igc3BhY2UgaW4gcmVxdWVzdCBxdWV1ZQogCSAqLwogCXNlbmRfcmVxID0gYmZhX3JlcXFfbmV4dChiZmEsIEJGQV9SRVFRX0ZDWFApOwogCWlmICghc2VuZF9yZXEpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Z3aW1nX3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Z3aW1nX3ByaXYuaAppbmRleCAxZWMxMzU1Li5kMzNlMTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9md2ltZ19wcml2LmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZndpbWdfcHJpdi5oCkBAIC0yMSwxMSArMjEsMjQgQEAKICNkZWZpbmUJQkZJX0ZMQVNIX0NIVU5LX1NaCQkyNTYJLyogIEZsYXNoIGNodW5rIHNpemUgKi8KICNkZWZpbmUJQkZJX0ZMQVNIX0NIVU5LX1NaX1dPUkRTCShCRklfRkxBU0hfQ0hVTktfU1ovc2l6ZW9mKHUzMikpCiAKLWV4dGVybiB1MzIgKmJmaV9pbWFnZV9jdF9nZXRfY2h1bmsodTMyIG9mZik7Ci1leHRlcm4gdTMyIGJmaV9pbWFnZV9jdF9zaXplOwotZXh0ZXJuIHUzMiAqYmZpX2ltYWdlX2NiX2dldF9jaHVuayh1MzIgb2ZmKTsKLWV4dGVybiB1MzIgYmZpX2ltYWdlX2NiX3NpemU7Ci1leHRlcm4gdTMyICpiZmlfaW1hZ2VfY2I7Ci1leHRlcm4gdTMyICpiZmlfaW1hZ2VfY3Q7CisvKioKKyAqIEJGSSBGVyBpbWFnZSB0eXBlCisgKi8KK2VudW0geworCUJGSV9JTUFHRV9DQl9GQywKKwlCRklfSU1BR0VfQ1RfRkMsCisJQkZJX0lNQUdFX0NUX0NOQSwKKwlCRklfSU1BR0VfTUFYLAorfTsKKworZXh0ZXJuIHUzMiAqYmZpX2ltYWdlX2dldF9jaHVuayhpbnQgdHlwZSwgdWludDMyX3Qgb2ZmKTsKK2V4dGVybiB1MzIgYmZpX2ltYWdlX2dldF9zaXplKGludCB0eXBlKTsKK2V4dGVybiB1MzIgYmZpX2ltYWdlX2N0X2ZjX3NpemU7CitleHRlcm4gdTMyIGJmaV9pbWFnZV9jdF9jbmFfc2l6ZTsKK2V4dGVybiB1MzIgYmZpX2ltYWdlX2NiX2ZjX3NpemU7CitleHRlcm4gdTMyICpiZmlfaW1hZ2VfY3RfZmM7CitleHRlcm4gdTMyICpiZmlfaW1hZ2VfY3RfY25hOworZXh0ZXJuIHUzMiAqYmZpX2ltYWdlX2NiX2ZjOworCiAKICNlbmRpZiAvKiBfX0JGQV9GV0lNR19QUklWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaHdfY2IuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2h3X2NiLmMKaW5kZXggODcxYTRlMi4uZWRmZDcyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaHdfY2IuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9od19jYi5jCkBAIC0xNTIsNCArMTUyLDkgQEAKIAliZmEtPmlvY2ZjLmh3aWYuaHdfcnNwcV9hY2sgPSBiZmFfaHdjYl9yc3BxX2Fja19tc2l4OwogfQogCi0KK3ZvaWQKK2JmYV9od2NiX21zaXhfZ2V0X3JtZV9yYW5nZShzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyICpzdGFydCwgdTMyICplbmQpCit7CisJKnN0YXJ0ID0gQkZBX01TSVhfUk1FX1EwOworCSplbmQgPSBCRkFfTVNJWF9STUVfUTc7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9od19jdC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaHdfY3QuYwppbmRleCA3NmNlYjlhLi5hMzU3ZmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9od19jdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2h3X2N0LmMKQEAgLTE2OCw0ICsxNjgsOSBAQAogCWJmYV9pb2NfaXNyX21vZGVfc2V0KCZiZmEtPmlvYywgbXNpeCk7CiB9CiAKLQordm9pZAorYmZhX2h3Y3RfbXNpeF9nZXRfcm1lX3JhbmdlKHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgKnN0YXJ0LCB1MzIgKmVuZCkKK3sKKwkqc3RhcnQgPSBCRkFfTVNJWF9STUVfUTA7CisJKmVuZCA9IEJGQV9NU0lYX1JNRV9RMzsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ludHIuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ludHIuYwppbmRleCAwZWJhM2Y5Li40OTM2Nzg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pbnRyLmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW50ci5jCkBAIC0xMzQsNiArMTM0LDcgQEAKIAogCWJmYV9yZWdfd3JpdGUoYmZhLT5pb2NmYy5iZmFfcmVncy5pbnRyX3N0YXR1cywgaW50cl91bm1hc2spOwogCWJmYV9yZWdfd3JpdGUoYmZhLT5pb2NmYy5iZmFfcmVncy5pbnRyX21hc2ssIH5pbnRyX3VubWFzayk7CisJYmZhLT5pb2NmYy5pbnRyX21hc2sgPSB+aW50cl91bm1hc2s7CiAJYmZhX2lzcl9tb2RlX3NldChiZmEsIGJmYS0+bXNpeC5udmVjcyAhPSAwKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2MuYwppbmRleCBlMDM4YmM5Li44ZTc4ZjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2MuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2MuYwpAQCAtNTksMjIgKzU5LDE4IEBACiAJCQkoKF9faW9jKS0+aW9jX2h3aWYtPmlvY19maXJtd2FyZV9sb2NrKF9faW9jKSkKICNkZWZpbmUgYmZhX2lvY19maXJtd2FyZV91bmxvY2soX19pb2MpICAgICAgICAgICAgICAgICAgXAogCQkJKChfX2lvYyktPmlvY19od2lmLT5pb2NfZmlybXdhcmVfdW5sb2NrKF9faW9jKSkKLSNkZWZpbmUgYmZhX2lvY19md2ltZ19nZXRfY2h1bmsoX19pb2MsIF9fb2ZmKSAgICAgICAgICAgXAotCQkJKChfX2lvYyktPmlvY19od2lmLT5pb2NfZndpbWdfZ2V0X2NodW5rKF9faW9jLCBfX29mZikpCi0jZGVmaW5lIGJmYV9pb2NfZndpbWdfZ2V0X3NpemUoX19pb2MpICAgICAgICAgICAgICAgICAgIFwKLQkJCSgoX19pb2MpLT5pb2NfaHdpZi0+aW9jX2Z3aW1nX2dldF9zaXplKF9faW9jKSkKICNkZWZpbmUgYmZhX2lvY19yZWdfaW5pdChfX2lvYykgKChfX2lvYyktPmlvY19od2lmLT5pb2NfcmVnX2luaXQoX19pb2MpKQogI2RlZmluZSBiZmFfaW9jX21hcF9wb3J0KF9faW9jKSAoKF9faW9jKS0+aW9jX2h3aWYtPmlvY19tYXBfcG9ydChfX2lvYykpCiAjZGVmaW5lIGJmYV9pb2Nfbm90aWZ5X2hiZmFpbChfX2lvYykgICAgICAgICAgICAgICAgICAgIFwKIAkJCSgoX19pb2MpLT5pb2NfaHdpZi0+aW9jX25vdGlmeV9oYmZhaWwoX19pb2MpKQorI2RlZmluZSBiZmFfaW9jX2lzX29wdHJvbShfX2lvYykgICAgICAgIFwKKwkoYmZpX2ltYWdlX2dldF9zaXplKEJGQV9JT0NfRldJTUdfVFlQRShfX2lvYykpIDwgQkZBX0lPQ19GV0lNR19NSU5TWikKIAogYmZhX2Jvb2xlYW5fdCAgIGJmYV9hdXRvX3JlY292ZXIgPSBCRkFfVFJVRTsKIAogLyoKICAqIGZvcndhcmQgZGVjbGFyYXRpb25zCiAgKi8KLXN0YXRpYyB2b2lkICAgICBiZmFfaW9jX2Flbl9wb3N0KHN0cnVjdCBiZmFfaW9jX3MgKmJmYSwKLQkJCQkgZW51bSBiZmFfaW9jX2Flbl9ldmVudCBldmVudCk7CiBzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19od19zZW1fZ2V0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiBzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19od19zZW1fZ2V0X2NhbmNlbChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwogc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfaHdpbml0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgYmZhX2Jvb2xlYW5fdCBmb3JjZSk7CkBAIC04OCw2ICs4NCw3IEBACiBzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19tYm94X3BvbGwoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKIHN0YXRpYyB2b2lkICAgICBiZmFfaW9jX21ib3hfaGJmYWlsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiBzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19yZWNvdmVyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZAliZmFfaW9jX2NoZWNrX2F0dHJfd3ducyhzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwogc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfZGlzYWJsZV9jb21wKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiBzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19scHVfc3RvcChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwogCkBAIC00MzMsNiArNDMwLDcgQEAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBJT0NfRV9GV1JTUF9HRVRBVFRSOgogCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKKwkJYmZhX2lvY19jaGVja19hdHRyX3d3bnMoaW9jKTsKIAkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX29wKTsKIAkJYnJlYWs7CiAKQEAgLTg3OSw4ICs4NzcsOCBAQAogCXN0cnVjdCBiZmlfaW9jX2ltYWdlX2hkcl9zICpkcnZfZndoZHI7CiAJaW50ICAgICAgICAgICAgIGk7CiAKLQlkcnZfZndoZHIgPQotCQkoc3RydWN0IGJmaV9pb2NfaW1hZ2VfaGRyX3MgKiliZmFfaW9jX2Z3aW1nX2dldF9jaHVuayhpb2MsIDApOworCWRydl9md2hkciA9IChzdHJ1Y3QgYmZpX2lvY19pbWFnZV9oZHJfcyAqKQorCQkJYmZpX2ltYWdlX2dldF9jaHVuayhCRkFfSU9DX0ZXSU1HX1RZUEUoaW9jKSwgMCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQkZJX0lPQ19NRDVTVU1fU1o7IGkrKykgewogCQlpZiAoZndoZHItPm1kNXN1bVtpXSAhPSBkcnZfZndoZHItPm1kNXN1bVtpXSkgewpAQCAtOTA3LDEyICs5MDUsMTMgQEAKIAkvKioKIAkgKiBJZiBiaW9zL2VmaSBib290IChmbGFzaCBiYXNlZCkgLS0gcmV0dXJuIHRydWUKIAkgKi8KLQlpZiAoYmZhX2lvY19md2ltZ19nZXRfc2l6ZShpb2MpIDwgQkZBX0lPQ19GV0lNR19NSU5TWikKKwlpZiAoYmZhX2lvY19pc19vcHRyb20oaW9jKSkKIAkJcmV0dXJuIEJGQV9UUlVFOwogCiAJYmZhX2lvY19md3Zlcl9nZXQoaW9jLCAmZndoZHIpOwotCWRydl9md2hkciA9Ci0JCShzdHJ1Y3QgYmZpX2lvY19pbWFnZV9oZHJfcyAqKWJmYV9pb2NfZndpbWdfZ2V0X2NodW5rKGlvYywgMCk7CisJZHJ2X2Z3aGRyID0gKHN0cnVjdCBiZmlfaW9jX2ltYWdlX2hkcl9zICopCisJCQliZmlfaW1hZ2VfZ2V0X2NodW5rKEJGQV9JT0NfRldJTUdfVFlQRShpb2MpLCAwKTsKKwogCiAJaWYgKGZ3aGRyLnNpZ25hdHVyZSAhPSBkcnZfZndoZHItPnNpZ25hdHVyZSkgewogCQliZmFfdHJjKGlvYywgZndoZHIuc2lnbmF0dXJlKTsKQEAgLTk4MCw4ICs5NzksMTMgQEAKIAkvKioKIAkgKiBJZiBJT0MgZnVuY3Rpb24gaXMgZGlzYWJsZWQgYW5kIGZpcm13YXJlIHZlcnNpb24gaXMgc2FtZSwKIAkgKiBqdXN0IHJlLWVuYWJsZSBJT0MuCisJICoKKwkgKiBJZiBvcHRpb24gcm9tLCBJT0MgbXVzdCBub3QgYmUgaW4gb3BlcmF0aW9uYWwgc3RhdGUuIFdpdGgKKwkgKiBjb252ZXJnZW5jZSwgSU9DIHdpbGwgYmUgaW4gb3BlcmF0aW9uYWwgc3RhdGUgd2hlbiAybmQgZHJpdmVyCisJICogaXMgbG9hZGVkLgogCSAqLwotCWlmIChpb2NfZndzdGF0ZSA9PSBCRklfSU9DX0RJU0FCTEVEIHx8IGlvY19md3N0YXRlID09IEJGSV9JT0NfT1ApIHsKKwlpZiAoaW9jX2Z3c3RhdGUgPT0gQkZJX0lPQ19ESVNBQkxFRCB8fAorCQkoIWJmYV9pb2NfaXNfb3B0cm9tKGlvYykgJiYgaW9jX2Z3c3RhdGUgPT0gQkZJX0lPQ19PUCkpIHsKIAkJYmZhX3RyYyhpb2MsIGlvY19md3N0YXRlKTsKIAogCQkvKioKQEAgLTExMjUsMjEgKzExMjksMjIgQEAKIAkvKioKIAkgKiBGbGFzaCBiYXNlZCBmaXJtd2FyZSBib290CiAJICovCi0JYmZhX3RyYyhpb2MsIGJmYV9pb2NfZndpbWdfZ2V0X3NpemUoaW9jKSk7Ci0JaWYgKGJmYV9pb2NfZndpbWdfZ2V0X3NpemUoaW9jKSA8IEJGQV9JT0NfRldJTUdfTUlOU1opCisJYmZhX3RyYyhpb2MsIGJmaV9pbWFnZV9nZXRfc2l6ZShCRkFfSU9DX0ZXSU1HX1RZUEUoaW9jKSkpOworCWlmIChiZmFfaW9jX2lzX29wdHJvbShpb2MpKQogCQlib290X3R5cGUgPSBCRklfQk9PVF9UWVBFX0ZMQVNIOwotCWZ3aW1nID0gYmZhX2lvY19md2ltZ19nZXRfY2h1bmsoaW9jLCBjaHVua25vKTsKKwlmd2ltZyA9IGJmaV9pbWFnZV9nZXRfY2h1bmsoQkZBX0lPQ19GV0lNR19UWVBFKGlvYyksIGNodW5rbm8pOworCiAKIAlwZ251bSA9IGJmYV9pb2Nfc21lbV9wZ251bShpb2MsIGxvZmYpOwogCXBnb2ZmID0gYmZhX2lvY19zbWVtX3Bnb2ZmKGlvYywgbG9mZik7CiAKIAliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaG9zdF9wYWdlX251bV9mbiwgcGdudW0pOwogCi0JZm9yIChpID0gMDsgaSA8IGJmYV9pb2NfZndpbWdfZ2V0X3NpemUoaW9jKTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGJmaV9pbWFnZV9nZXRfc2l6ZShCRkFfSU9DX0ZXSU1HX1RZUEUoaW9jKSk7IGkrKykgewogCiAJCWlmIChCRkFfSU9DX0ZMQVNIX0NIVU5LX05PKGkpICE9IGNodW5rbm8pIHsKIAkJCWNodW5rbm8gPSBCRkFfSU9DX0ZMQVNIX0NIVU5LX05PKGkpOwotCQkJZndpbWcgPSBiZmFfaW9jX2Z3aW1nX2dldF9jaHVuayhpb2MsCisJCQlmd2ltZyA9IGJmaV9pbWFnZV9nZXRfY2h1bmsoQkZBX0lPQ19GV0lNR19UWVBFKGlvYyksCiAJCQkJCUJGQV9JT0NfRkxBU0hfQ0hVTktfQUREUihjaHVua25vKSk7CiAJCX0KIApAQCAtMTE4OCw2ICsxMTkzLDcgQEAKIAlzdHJ1Y3QgYmZpX2lvY19hdHRyX3MgKmF0dHIgPSBpb2MtPmF0dHI7CiAKIAlhdHRyLT5hZGFwdGVyX3Byb3AgPSBiZmFfb3NfbnRvaGwoYXR0ci0+YWRhcHRlcl9wcm9wKTsKKwlhdHRyLT5jYXJkX3R5cGUgICAgID0gYmZhX29zX250b2hsKGF0dHItPmNhcmRfdHlwZSk7CiAJYXR0ci0+bWF4ZnJzaXplID0gYmZhX29zX250b2hzKGF0dHItPm1heGZyc2l6ZSk7CiAKIAliZmFfZnNtX3NlbmRfZXZlbnQoaW9jLCBJT0NfRV9GV1JTUF9HRVRBVFRSKTsKQEAgLTEyODIsNiArMTI4OCw3IEBACiAJCWJmYV9yZWdfd3JpdGUoKHJiICsgQkZBX0lPQzFfU1RBVEVfUkVHKSwgQkZJX0lPQ19JTklUSU5HKTsKIAl9CiAKKwliZmFfaW9jX21zZ2ZsdXNoKGlvYyk7CiAJYmZhX2lvY19kb3dubG9hZF9mdyhpb2MsIGJvb3RfdHlwZSwgYm9vdF9wYXJhbSk7CiAKIAkvKioKQEAgLTE0MTYsNyArMTQyMyw3IEBACiB7CiAJaW9jLT5pb2NfbWMgPSBtYzsKIAlpb2MtPnBjaWRldiA9ICpwY2lkZXY7Ci0JaW9jLT5jdGRldiA9IChpb2MtPnBjaWRldi5kZXZpY2VfaWQgPT0gQkZBX1BDSV9ERVZJQ0VfSURfQ1QpOworCWlvYy0+Y3RkZXYgID0gYmZhX2FzaWNfaWRfY3QoaW9jLT5wY2lkZXYuZGV2aWNlX2lkKTsKIAlpb2MtPmNuYSA9IGlvYy0+Y3RkZXYgJiYgIWlvYy0+ZmNtb2RlOwogCiAJLyoqCkBAIC0xNjA3LDYgKzE2MTQsMTMgQEAKIAliZmFfZnNtX3NlbmRfZXZlbnQoaW9jLCBJT0NfRV9IV0VSUk9SKTsKIH0KIAordm9pZAorYmZhX2lvY19zZXRfZmNtb2RlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlpb2MtPmZjbW9kZSAgPSBCRkFfVFJVRTsKKwlpb2MtPnBvcnRfaWQgPSBiZmFfaW9jX3BjaWZuKGlvYyk7Cit9CisKICNpZm5kZWYgQkZBX0JJT1NfQlVJTEQKIAogLyoqCkBAIC0xNjk2LDYgKzE3MTAsOSBAQAogCS8qIEZvciBub3csIG1vZGVsIGRlc2NyIHVzZXMgc2FtZSBtb2RlbCBzdHJpbmcgKi8KIAliZmFfaW9jX2dldF9hZGFwdGVyX21vZGVsKGlvYywgYWRfYXR0ci0+bW9kZWxfZGVzY3IpOwogCisJYWRfYXR0ci0+Y2FyZF90eXBlID0gaW9jX2F0dHItPmNhcmRfdHlwZTsKKwlhZF9hdHRyLT5pc19tZXp6ID0gYmZhX21mZ19pc19tZXp6KGlvY19hdHRyLT5jYXJkX3R5cGUpOworCiAJaWYgKEJGSV9BREFQVEVSX0lTX1NQRUNJQUwoaW9jX2F0dHItPmFkYXB0ZXJfcHJvcCkpCiAJCWFkX2F0dHItPnByb3RvdHlwZSA9IDE7CiAJZWxzZQpAQCAtMTc3OSwyOCArMTc5NiwxNyBAQAogYmZhX2lvY19nZXRfYWRhcHRlcl9tb2RlbChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGNoYXIgKm1vZGVsKQogewogCXN0cnVjdCBiZmlfaW9jX2F0dHJfcyAgICppb2NfYXR0cjsKLQl1OCAgICAgICAgICAgICAgbnBvcnRzOwotCXU4ICAgICAgICAgICAgICBtYXhfc3BlZWQ7CiAKIAliZmFfYXNzZXJ0KG1vZGVsKTsKIAliZmFfb3NfbWVtc2V0KCh2b2lkICopbW9kZWwsIDAsIEJGQV9BREFQVEVSX01PREVMX05BTUVfTEVOKTsKIAogCWlvY19hdHRyID0gaW9jLT5hdHRyOwogCi0JbnBvcnRzID0gYmZhX2lvY19nZXRfbnBvcnRzKGlvYyk7Ci0JbWF4X3NwZWVkID0gYmZhX2lvY19zcGVlZF9zdXAoaW9jKTsKLQogCS8qKgogCSAqIG1vZGVsIG5hbWUKIAkgKi8KLQlpZiAobWF4X3NwZWVkID09IDEwKSB7Ci0JCXN0cmNweShtb2RlbCwgIkJSLTEwPzAiKTsKLQkJbW9kZWxbNV0gPSAnMCcgKyBucG9ydHM7Ci0JfSBlbHNlIHsKLQkJc3RyY3B5KG1vZGVsLCAiQnJvY2FkZS0/PzUiKTsKLQkJbW9kZWxbOF0gPSAnMCcgKyBtYXhfc3BlZWQ7Ci0JCW1vZGVsWzldID0gJzAnICsgbnBvcnRzOwotCX0KKwlzbnByaW50Zihtb2RlbCwgQkZBX0FEQVBURVJfTU9ERUxfTkFNRV9MRU4sICIlcy0ldSIsCisJCQlCRkFfTUZHX05BTUUsIGlvY19hdHRyLT5jYXJkX3R5cGUpOwogfQogCiBlbnVtIGJmYV9pb2Nfc3RhdGUKQEAgLTE4MjcsNzggKzE4MzMsNTQgQEAKIH0KIAogLyoqCi0gKiAgaGFsX3d3bl9wdWJsaWMKKyAqICBiZmFfd3duX3B1YmxpYwogICovCiB3d25fdAogYmZhX2lvY19nZXRfcHd3bihzdHJ1Y3QgYmZhX2lvY19zICppb2MpCiB7Ci0JdW5pb24gewotCQl3d25fdCAgICAgICAgICAgd3duOwotCQl1OCAgICAgICAgIGJ5dGVbc2l6ZW9mKHd3bl90KV07Ci0JfQotCXc7Ci0KLQl3Lnd3biA9IGlvYy0+YXR0ci0+bWZnX3d3bjsKLQotCWlmIChiZmFfaW9jX3BvcnRpZChpb2MpID09IDEpCi0JCXcuYnl0ZVs3XSsrOwotCi0JcmV0dXJuIHcud3duOworCXJldHVybiBpb2MtPmF0dHItPnB3d247CiB9CiAKIHd3bl90CiBiZmFfaW9jX2dldF9ud3duKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKIHsKLQl1bmlvbiB7Ci0JCXd3bl90ICAgICAgICAgICB3d247Ci0JCXU4ICAgICAgICAgYnl0ZVtzaXplb2Yod3duX3QpXTsKLQl9Ci0JdzsKLQotCXcud3duID0gaW9jLT5hdHRyLT5tZmdfd3duOwotCi0JaWYgKGJmYV9pb2NfcG9ydGlkKGlvYykgPT0gMSkKLQkJdy5ieXRlWzddKys7Ci0KLQl3LmJ5dGVbMF0gPSAweDIwOwotCi0JcmV0dXJuIHcud3duOwotfQotCi13d25fdAotYmZhX2lvY19nZXRfd3duX25hYTUoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB1MTYgaW5zdCkKLXsKLQl1bmlvbiB7Ci0JCXd3bl90ICAgICAgICAgICB3d247Ci0JCXU4ICAgICAgICAgYnl0ZVtzaXplb2Yod3duX3QpXTsKLQl9Ci0JdyAgICAgICAgICAgICAgLCB3NTsKLQotCWJmYV90cmMoaW9jLCBpbnN0KTsKLQotCXcud3duID0gaW9jLT5hdHRyLT5tZmdfd3duOwotCXc1LmJ5dGVbMF0gPSAweDUwIHwgdy5ieXRlWzJdID4+IDQ7Ci0JdzUuYnl0ZVsxXSA9IHcuYnl0ZVsyXSA8PCA0IHwgdy5ieXRlWzNdID4+IDQ7Ci0JdzUuYnl0ZVsyXSA9IHcuYnl0ZVszXSA8PCA0IHwgdy5ieXRlWzRdID4+IDQ7Ci0JdzUuYnl0ZVszXSA9IHcuYnl0ZVs0XSA8PCA0IHwgdy5ieXRlWzVdID4+IDQ7Ci0JdzUuYnl0ZVs0XSA9IHcuYnl0ZVs1XSA8PCA0IHwgdy5ieXRlWzZdID4+IDQ7Ci0JdzUuYnl0ZVs1XSA9IHcuYnl0ZVs2XSA8PCA0IHwgdy5ieXRlWzddID4+IDQ7Ci0JdzUuYnl0ZVs2XSA9IHcuYnl0ZVs3XSA8PCA0IHwgKGluc3QgJiAweDBmMDApID4+IDg7Ci0JdzUuYnl0ZVs3XSA9IChpbnN0ICYgMHhmZik7Ci0KLQlyZXR1cm4gdzUud3duOworCXJldHVybiBpb2MtPmF0dHItPm53d247CiB9CiAKIHU2NAogYmZhX2lvY19nZXRfYWRpZChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCiB7Ci0JcmV0dXJuIGlvYy0+YXR0ci0+bWZnX3d3bjsKKwlyZXR1cm4gaW9jLT5hdHRyLT5tZmdfcHd3bjsKIH0KIAogbWFjX3QKIGJmYV9pb2NfZ2V0X21hYyhzdHJ1Y3QgYmZhX2lvY19zICppb2MpCiB7Ci0JbWFjX3QgICAgICAgICAgIG1hYzsKKwkvKgorCSAqIEN1cnJlbnRseSBtZmcgbWFjIGlzIHVzZWQgYXMgRkNvRSBlbm9kZSBtYWMgKG5vdCBjb25maWd1cmVkIGJ5IFBCQykKKwkgKi8KKwlpZiAoYmZhX2lvY19nZXRfdHlwZShpb2MpID09IEJGQV9JT0NfVFlQRV9GQ29FKQorCQlyZXR1cm4gYmZhX2lvY19nZXRfbWZnX21hYyhpb2MpOworCWVsc2UKKwkJcmV0dXJuIGlvYy0+YXR0ci0+bWFjOworfQorCit3d25fdAorYmZhX2lvY19nZXRfbWZnX3B3d24oc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXJldHVybiBpb2MtPmF0dHItPm1mZ19wd3duOworfQorCit3d25fdAorYmZhX2lvY19nZXRfbWZnX253d24oc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXJldHVybiBpb2MtPmF0dHItPm1mZ19ud3duOworfQorCittYWNfdAorYmZhX2lvY19nZXRfbWZnX21hYyhzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJbWFjX3QgICBtYWM7CiAKIAltYWMgPSBpb2MtPmF0dHItPm1mZ19tYWM7CiAJbWFjLm1hY1tNQUNfQUREUkxFTiAtIDFdICs9IGJmYV9pb2NfcGNpZm4oaW9jKTsKQEAgLTE5MDYsMjMgKzE4ODgsMTYgQEAKIAlyZXR1cm4gbWFjOwogfQogCi12b2lkCi1iZmFfaW9jX3NldF9mY21vZGUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQotewotCWlvYy0+ZmNtb2RlID0gQkZBX1RSVUU7Ci0JaW9jLT5wb3J0X2lkID0gYmZhX2lvY19wY2lmbihpb2MpOwotfQotCiBiZmFfYm9vbGVhbl90CiBiZmFfaW9jX2dldF9mY21vZGUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQogewotCXJldHVybiBpb2MtPmZjbW9kZSB8fCAoaW9jLT5wY2lkZXYuZGV2aWNlX2lkICE9IEJGQV9QQ0lfREVWSUNFX0lEX0NUKTsKKwlyZXR1cm4gaW9jLT5mY21vZGUgfHwgIWJmYV9hc2ljX2lkX2N0KGlvYy0+cGNpZGV2LmRldmljZV9pZCk7CiB9CiAKIC8qKgogICogU2VuZCBBRU4gbm90aWZpY2F0aW9uCiAgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBiZmFfaW9jX2Flbl9wb3N0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBiZmFfaW9jX2Flbl9ldmVudCBldmVudCkKIHsKIAl1bmlvbiBiZmFfYWVuX2RhdGFfdSBhZW5fZGF0YTsKQEAgLTIwNzAsMTkgKzIwNDUsMTYgQEAKIAliZmFfZnNtX3NlbmRfZXZlbnQoaW9jLCBJT0NfRV9IQkZBSUwpOwogfQogCi0jZWxzZQotCiBzdGF0aWMgdm9pZAotYmZhX2lvY19hZW5fcG9zdChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGVudW0gYmZhX2lvY19hZW5fZXZlbnQgZXZlbnQpCitiZmFfaW9jX2NoZWNrX2F0dHJfd3ducyhzdHJ1Y3QgYmZhX2lvY19zICppb2MpCiB7Ci19CisJaWYgKGJmYV9pb2NfZ2V0X3R5cGUoaW9jKSA9PSBCRkFfSU9DX1RZUEVfTEwpCisJCXJldHVybjsKIAotc3RhdGljIHZvaWQKLWJmYV9pb2NfcmVjb3ZlcihzdHJ1Y3QgYmZhX2lvY19zICppb2MpCi17Ci0JYmZhX2Fzc2VydCgwKTsKKwlpZiAoaW9jLT5hdHRyLT5ud3duID09IDApCisJCWJmYV9pb2NfYWVuX3Bvc3QoaW9jLCBCRkFfSU9DX0FFTl9JTlZBTElEX05XV04pOworCWlmIChpb2MtPmF0dHItPnB3d24gPT0gMCkKKwkJYmZhX2lvY19hZW5fcG9zdChpb2MsIEJGQV9JT0NfQUVOX0lOVkFMSURfUFdXTik7CiB9CiAKICNlbmRpZgotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmgKaW5kZXggZDA4MDQ0MC4uY2FlMDViMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmgKQEAgLTE4Niw5ICsxODYsNiBAQAogCWJmYV9zdGF0dXNfdCAgICAoKmlvY19wbGxfaW5pdCkgKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiAJYmZhX2Jvb2xlYW5fdCAgICgqaW9jX2Zpcm13YXJlX2xvY2spICAgIChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwogCXZvaWQgICAgICAgICAgICAoKmlvY19maXJtd2FyZV91bmxvY2spICAoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKLQl1MzIgKiAgIAkoKmlvY19md2ltZ19nZXRfY2h1bmspICAoc3RydWN0IGJmYV9pb2NfcyAqaW9jLAotCQkJCQkJdTMyIG9mZik7Ci0JdTMyCQkoKmlvY19md2ltZ19nZXRfc2l6ZSkgICAoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKIAl2b2lkCQkoKmlvY19yZWdfaW5pdCkgKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiAJdm9pZAkJKCppb2NfbWFwX3BvcnQpIChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwogCXZvaWQJCSgqaW9jX2lzcl9tb2RlX3NldCkgICAgIChzdHJ1Y3QgYmZhX2lvY19zICppb2MsCkBAIC0yMTQsNiArMjExLDEwIEBACiAKICNkZWZpbmUgYmZhX2lvY19zdGF0cyhfaW9jLCBfc3RhdHMpICAgICAoKF9pb2MpLT5zdGF0cy5fc3RhdHMrKykKICNkZWZpbmUgQkZBX0lPQ19GV0lNR19NSU5TWiAgICAgKDE2ICogMTAyNCkKKyNkZWZpbmUgQkZBX0lPQ19GV0lNR19UWVBFKF9faW9jKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkoKChfX2lvYyktPmN0ZGV2KSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAoKChfX2lvYyktPmZjbW9kZSkgPyBCRklfSU1BR0VfQ1RfRkMgOiBCRklfSU1BR0VfQ1RfQ05BKSA6ICAgICBcCisJIEJGSV9JTUFHRV9DQl9GQykKIAogI2RlZmluZSBCRkFfSU9DX0ZMQVNIX0NIVU5LX05PKG9mZikgICAgICAgICAgICAgKG9mZiAvIEJGSV9GTEFTSF9DSFVOS19TWl9XT1JEUykKICNkZWZpbmUgQkZBX0lPQ19GTEFTSF9PRkZTRVRfSU5fQ0hVTksob2ZmKSAgICAgIChvZmYgJSBCRklfRkxBU0hfQ0hVTktfU1pfV09SRFMpCkBAIC0yOTYsMTQgKzI5NywxNyBAQAogCQkJc3RydWN0IGJmaV9pb2NfaW1hZ2VfaGRyX3MgKmZ3aGRyKTsKIGJmYV9ib29sZWFuX3QgYmZhX2lvY19md3Zlcl9jbXAoc3RydWN0IGJmYV9pb2NfcyAqaW9jLAogCQkJc3RydWN0IGJmaV9pb2NfaW1hZ2VfaGRyX3MgKmZ3aGRyKTsKK3ZvaWQgYmZhX2lvY19hZW5fcG9zdChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGVudW0gYmZhX2lvY19hZW5fZXZlbnQgZXZlbnQpOwogCiAvKgogICogYmZhIG1mZyB3d24gQVBJIGZ1bmN0aW9ucwogICovCiB3d25fdCBiZmFfaW9jX2dldF9wd3duKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiB3d25fdCBiZmFfaW9jX2dldF9ud3duKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7Ci13d25fdCBiZmFfaW9jX2dldF93d25fbmFhNShzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHUxNiBpbnN0KTsKIG1hY190IGJmYV9pb2NfZ2V0X21hYyhzdHJ1Y3QgYmZhX2lvY19zICppb2MpOword3duX3QgYmZhX2lvY19nZXRfbWZnX3B3d24oc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3d3bl90IGJmYV9pb2NfZ2V0X21mZ19ud3duKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CittYWNfdCBiZmFfaW9jX2dldF9tZmdfbWFjKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiB1NjQgYmZhX2lvY19nZXRfYWRpZChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwogCiAjZW5kaWYgLyogX19CRkFfSU9DX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jX2NiLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2NfY2IuYwppbmRleCAzY2U4NTMxLi4zMjRiZGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2NfY2IuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2NfY2IuYwpAQCAtMzMsMjYgKzMzLDEzIEBACiBzdGF0aWMgYmZhX3N0YXR1c190IGJmYV9pb2NfY2JfcGxsX2luaXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKIHN0YXRpYyBiZmFfYm9vbGVhbl90IGJmYV9pb2NfY2JfZmlybXdhcmVfbG9jayhzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwogc3RhdGljIHZvaWQgYmZhX2lvY19jYl9maXJtd2FyZV91bmxvY2soc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKLXN0YXRpYyB1MzIgICpiZmFfaW9jX2NiX2Z3aW1nX2dldF9jaHVuayhzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHUzMiBvZmYpOwotc3RhdGljIHUzMiBiZmFfaW9jX2NiX2Z3aW1nX2dldF9zaXplKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiBzdGF0aWMgdm9pZCBiZmFfaW9jX2NiX3JlZ19pbml0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiBzdGF0aWMgdm9pZCBiZmFfaW9jX2NiX21hcF9wb3J0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiBzdGF0aWMgdm9pZCBiZmFfaW9jX2NiX2lzcl9tb2RlX3NldChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGJmYV9ib29sZWFuX3QgbXNpeCk7CiBzdGF0aWMgdm9pZCBiZmFfaW9jX2NiX25vdGlmeV9oYmZhaWwoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKIHN0YXRpYyB2b2lkIGJmYV9pb2NfY2Jfb3duZXJzaGlwX3Jlc2V0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiAKLXN0cnVjdCBiZmFfaW9jX2h3aWZfcyBod2lmX2NiID0gewotCWJmYV9pb2NfY2JfcGxsX2luaXQsCi0JYmZhX2lvY19jYl9maXJtd2FyZV9sb2NrLAotCWJmYV9pb2NfY2JfZmlybXdhcmVfdW5sb2NrLAotCWJmYV9pb2NfY2JfZndpbWdfZ2V0X2NodW5rLAotCWJmYV9pb2NfY2JfZndpbWdfZ2V0X3NpemUsCi0JYmZhX2lvY19jYl9yZWdfaW5pdCwKLQliZmFfaW9jX2NiX21hcF9wb3J0LAotCWJmYV9pb2NfY2JfaXNyX21vZGVfc2V0LAotCWJmYV9pb2NfY2Jfbm90aWZ5X2hiZmFpbCwKLQliZmFfaW9jX2NiX293bmVyc2hpcF9yZXNldCwKLX07CitzdHJ1Y3QgYmZhX2lvY19od2lmX3MgaHdpZl9jYjsKIAogLyoqCiAgKiBDYWxsZWQgZnJvbSBiZmFfaW9jX2F0dGFjaCgpIHRvIG1hcCBhc2ljIHNwZWNpZmljIGNhbGxzLgpAQCAtNjAsMjEgKzQ3LDE4IEBACiB2b2lkCiBiZmFfaW9jX3NldF9jYl9od2lmKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKIHsKKwlod2lmX2NiLmlvY19wbGxfaW5pdCA9IGJmYV9pb2NfY2JfcGxsX2luaXQ7CisJaHdpZl9jYi5pb2NfZmlybXdhcmVfbG9jayA9IGJmYV9pb2NfY2JfZmlybXdhcmVfbG9jazsKKwlod2lmX2NiLmlvY19maXJtd2FyZV91bmxvY2sgPSBiZmFfaW9jX2NiX2Zpcm13YXJlX3VubG9jazsKKwlod2lmX2NiLmlvY19yZWdfaW5pdCA9IGJmYV9pb2NfY2JfcmVnX2luaXQ7CisJaHdpZl9jYi5pb2NfbWFwX3BvcnQgPSBiZmFfaW9jX2NiX21hcF9wb3J0OworCWh3aWZfY2IuaW9jX2lzcl9tb2RlX3NldCA9IGJmYV9pb2NfY2JfaXNyX21vZGVfc2V0OworCWh3aWZfY2IuaW9jX25vdGlmeV9oYmZhaWwgPSBiZmFfaW9jX2NiX25vdGlmeV9oYmZhaWw7CisJaHdpZl9jYi5pb2Nfb3duZXJzaGlwX3Jlc2V0ID0gYmZhX2lvY19jYl9vd25lcnNoaXBfcmVzZXQ7CisKIAlpb2MtPmlvY19od2lmID0gJmh3aWZfY2I7CiB9CiAKLXN0YXRpYyB1MzIgKgotYmZhX2lvY19jYl9md2ltZ19nZXRfY2h1bmsoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB1MzIgb2ZmKQotewotCXJldHVybiBiZmlfaW1hZ2VfY2JfZ2V0X2NodW5rKG9mZik7Ci19Ci0KLXN0YXRpYyB1MzIKLWJmYV9pb2NfY2JfZndpbWdfZ2V0X3NpemUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQotewotCXJldHVybiBiZmlfaW1hZ2VfY2Jfc2l6ZTsKLX0KLQogLyoqCiAgKiBSZXR1cm4gdHJ1ZSBpZiBmaXJtd2FyZSBvZiBjdXJyZW50IGRyaXZlciBtYXRjaGVzIHRoZSBydW5uaW5nIGZpcm13YXJlLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2NfY3QuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvY19jdC5jCmluZGV4IDIwYjU4YWQuLjY4ZjAyN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvY19jdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvY19jdC5jCkBAIC0zMywyNyArMzMsMTMgQEAKIHN0YXRpYyBiZmFfc3RhdHVzX3QgYmZhX2lvY19jdF9wbGxfaW5pdChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwogc3RhdGljIGJmYV9ib29sZWFuX3QgYmZhX2lvY19jdF9maXJtd2FyZV9sb2NrKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiBzdGF0aWMgdm9pZCBiZmFfaW9jX2N0X2Zpcm13YXJlX3VubG9jayhzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwotc3RhdGljIHUzMiogYmZhX2lvY19jdF9md2ltZ19nZXRfY2h1bmsoc3RydWN0IGJmYV9pb2NfcyAqaW9jLAotCQkJCQl1MzIgb2ZmKTsKLXN0YXRpYyB1MzIgYmZhX2lvY19jdF9md2ltZ19nZXRfc2l6ZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwogc3RhdGljIHZvaWQgYmZhX2lvY19jdF9yZWdfaW5pdChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwogc3RhdGljIHZvaWQgYmZhX2lvY19jdF9tYXBfcG9ydChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwogc3RhdGljIHZvaWQgYmZhX2lvY19jdF9pc3JfbW9kZV9zZXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBiZmFfYm9vbGVhbl90IG1zaXgpOwogc3RhdGljIHZvaWQgYmZhX2lvY19jdF9ub3RpZnlfaGJmYWlsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiBzdGF0aWMgdm9pZCBiZmFfaW9jX2N0X293bmVyc2hpcF9yZXNldChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwogCi1zdHJ1Y3QgYmZhX2lvY19od2lmX3MgaHdpZl9jdCA9IHsKLQliZmFfaW9jX2N0X3BsbF9pbml0LAotCWJmYV9pb2NfY3RfZmlybXdhcmVfbG9jaywKLQliZmFfaW9jX2N0X2Zpcm13YXJlX3VubG9jaywKLQliZmFfaW9jX2N0X2Z3aW1nX2dldF9jaHVuaywKLQliZmFfaW9jX2N0X2Z3aW1nX2dldF9zaXplLAotCWJmYV9pb2NfY3RfcmVnX2luaXQsCi0JYmZhX2lvY19jdF9tYXBfcG9ydCwKLQliZmFfaW9jX2N0X2lzcl9tb2RlX3NldCwKLQliZmFfaW9jX2N0X25vdGlmeV9oYmZhaWwsCi0JYmZhX2lvY19jdF9vd25lcnNoaXBfcmVzZXQsCi19Oworc3RydWN0IGJmYV9pb2NfaHdpZl9zIGh3aWZfY3Q7CiAKIC8qKgogICogQ2FsbGVkIGZyb20gYmZhX2lvY19hdHRhY2goKSB0byBtYXAgYXNpYyBzcGVjaWZpYyBjYWxscy4KQEAgLTYxLDIxICs0NywxOCBAQAogdm9pZAogYmZhX2lvY19zZXRfY3RfaHdpZihzdHJ1Y3QgYmZhX2lvY19zICppb2MpCiB7CisJaHdpZl9jdC5pb2NfcGxsX2luaXQgPSBiZmFfaW9jX2N0X3BsbF9pbml0OworCWh3aWZfY3QuaW9jX2Zpcm13YXJlX2xvY2sgPSBiZmFfaW9jX2N0X2Zpcm13YXJlX2xvY2s7CisJaHdpZl9jdC5pb2NfZmlybXdhcmVfdW5sb2NrID0gYmZhX2lvY19jdF9maXJtd2FyZV91bmxvY2s7CisJaHdpZl9jdC5pb2NfcmVnX2luaXQgPSBiZmFfaW9jX2N0X3JlZ19pbml0OworCWh3aWZfY3QuaW9jX21hcF9wb3J0ID0gYmZhX2lvY19jdF9tYXBfcG9ydDsKKwlod2lmX2N0LmlvY19pc3JfbW9kZV9zZXQgPSBiZmFfaW9jX2N0X2lzcl9tb2RlX3NldDsKKwlod2lmX2N0LmlvY19ub3RpZnlfaGJmYWlsID0gYmZhX2lvY19jdF9ub3RpZnlfaGJmYWlsOworCWh3aWZfY3QuaW9jX293bmVyc2hpcF9yZXNldCA9IGJmYV9pb2NfY3Rfb3duZXJzaGlwX3Jlc2V0OworCiAJaW9jLT5pb2NfaHdpZiA9ICZod2lmX2N0OwogfQogCi1zdGF0aWMgdTMyKgotYmZhX2lvY19jdF9md2ltZ19nZXRfY2h1bmsoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB1MzIgb2ZmKQotewotCXJldHVybiBiZmlfaW1hZ2VfY3RfZ2V0X2NodW5rKG9mZik7Ci19Ci0KLXN0YXRpYyB1MzIKLWJmYV9pb2NfY3RfZndpbWdfZ2V0X3NpemUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQotewotCXJldHVybiBiZmlfaW1hZ2VfY3Rfc2l6ZTsKLX0KLQogLyoqCiAgKiBSZXR1cm4gdHJ1ZSBpZiBmaXJtd2FyZSBvZiBjdXJyZW50IGRyaXZlciBtYXRjaGVzIHRoZSBydW5uaW5nIGZpcm13YXJlLgogICovCkBAIC05NSw3ICs3OCw3IEBACiAJLyoqCiAJICogSWYgYmlvcyBib290IChmbGFzaCBiYXNlZCkgLS0gZG8gbm90IGluY3JlbWVudCB1c2FnZSBjb3VudAogCSAqLwotCWlmIChiZmFfaW9jX2N0X2Z3aW1nX2dldF9zaXplKGlvYykgPCBCRkFfSU9DX0ZXSU1HX01JTlNaKQorCWlmIChiZmlfaW1hZ2VfZ2V0X3NpemUoQkZBX0lPQ19GV0lNR19UWVBFKGlvYykpIDwgQkZBX0lPQ19GV0lNR19NSU5TWikKIAkJcmV0dXJuIEJGQV9UUlVFOwogCiAJYmZhX2lvY19zZW1fZ2V0KGlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3NlbV9yZWcpOwpAQCAtMTQ2LDkgKzEyOSwxNCBAQAogCiAJLyoqCiAJICogRmlybXdhcmUgbG9jayBpcyByZWxldmFudCBvbmx5IGZvciBDTkEuCisJICovCisJaWYgKCFpb2MtPmNuYSkKKwkJcmV0dXJuOworCisJLyoqCiAJICogSWYgYmlvcyBib290IChmbGFzaCBiYXNlZCkgLS0gZG8gbm90IGRlY3JlbWVudCB1c2FnZSBjb3VudAogCSAqLwotCWlmICghaW9jLT5jbmEgfHwgYmZhX2lvY19jdF9md2ltZ19nZXRfc2l6ZShpb2MpIDwgQkZBX0lPQ19GV0lNR19NSU5TWikKKwlpZiAoYmZpX2ltYWdlX2dldF9zaXplKEJGQV9JT0NfRldJTUdfVFlQRShpb2MpKSA8IEJGQV9JT0NfRldJTUdfTUlOU1opCiAJCXJldHVybjsKIAogCS8qKgpAQCAtMzg4LDEwICszNzYsMzUgQEAKIAliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuYXBwX3BsbF9mYXN0X2N0bF9yZWcsIHBsbF9mY2xrIHwKIAkJX19BUFBfUExMXzQyNV9FTkFCTEUpOwogCisJLyoqCisJICogUFNTIG1lbW9yeSByZXNldCBpcyBhc3NlcnRlZCBhdCBwb3dlci1vbi1yZXNldC4gTmVlZCB0byBjbGVhcgorCSAqIHRoaXMgYmVmb3JlIHJ1bm5pbmcgRURSQU0gQklTVFIKKwkgKi8KKwlpZiAoaW9jLT5jbmEpIHsKKwkJYmZhX3JlZ193cml0ZSgocmIgKyBQTU1fMVRfUkVTRVRfUkVHX1AwKSwgX19QTU1fMVRfUkVTRVRfUCk7CisJCWJmYV9yZWdfd3JpdGUoKHJiICsgUE1NXzFUX1JFU0VUX1JFR19QMSksIF9fUE1NXzFUX1JFU0VUX1ApOworCX0KKworCXIzMiA9IGJmYV9yZWdfcmVhZCgocmIgKyBQU1NfQ1RMX1JFRykpOworCXIzMiAmPSB+X19QU1NfTE1FTV9SRVNFVDsKKwliZmFfcmVnX3dyaXRlKChyYiArIFBTU19DVExfUkVHKSwgcjMyKTsKKwliZmFfb3NfdWRlbGF5KDEwMDApOworCisJaWYgKGlvYy0+Y25hKSB7CisJCWJmYV9yZWdfd3JpdGUoKHJiICsgUE1NXzFUX1JFU0VUX1JFR19QMCksIDApOworCQliZmFfcmVnX3dyaXRlKChyYiArIFBNTV8xVF9SRVNFVF9SRUdfUDEpLCAwKTsKKwl9CisKIAliZmFfcmVnX3dyaXRlKChyYiArIE1CSVNUX0NUTF9SRUcpLCBfX0VEUkFNX0JJU1RSX1NUQVJUKTsKIAliZmFfb3NfdWRlbGF5KDEwMDApOwogCXIzMiA9IGJmYV9yZWdfcmVhZCgocmIgKyBNQklTVF9TVEFUX1JFRykpOwogCWJmYV90cmMoaW9jLCByMzIpOworCisJLyoqCisJICogQ2xlYXIgQklTVFIKKwkgKi8KKwliZmFfcmVnX3dyaXRlKChyYiArIE1CSVNUX0NUTF9SRUcpLCAwKTsKKwogCS8qCiAJICogIHJlbGVhc2Ugc2VtYXBob3JlLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jZmMuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvY2ZjLmMKaW5kZXggYTc2ZGUyNi4uOTA4MjBiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jZmMuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2NmYy5jCkBAIC0xMTMsNyArMTEzLDYgQEAKIAliZmFfYXNzZXJ0KGNmZy0+ZndjZmcubnVtX2NxcyA8PSBCRklfSU9DX01BWF9DUVMpOwogCWJmYV90cmMoYmZhLCBjZmctPmZ3Y2ZnLm51bV9jcXMpOwogCi0JaW9jZmMtPmNmZ2RvbmUgPSBCRkFfRkFMU0U7CiAJYmZhX2lvY2ZjX3Jlc2V0X3F1ZXVlcyhiZmEpOwogCiAJLyoqCkBAIC0xNDUsNiArMTQ0LDE1IEBACiAJfQogCiAJLyoqCisJICogRW5hYmxlIGludGVycnVwdCBjb2FsZXNjaW5nIGlmIGl0IGlzIGRyaXZlciBpbml0IHBhdGgKKwkgKiBhbmQgbm90IGlvYyBkaXNhYmxlL2VuYWJsZSBwYXRoLgorCSAqLworCWlmICghaW9jZmMtPmNmZ2RvbmUpCisJCWNmZ19pbmZvLT5pbnRyX2F0dHIuY29hbGVzY2UgPSBCRkFfVFJVRTsKKworCWlvY2ZjLT5jZmdkb25lID0gQkZBX0ZBTFNFOworCisJLyoqCiAJICogZG1hIG1hcCBJT0MgY29uZmlndXJhdGlvbiBpdHNlbGYKIAkgKi8KIAliZmlfaDJpX3NldChjZmdfcmVxLm1oLCBCRklfTUNfSU9DRkMsIEJGSV9JT0NGQ19IMklfQ0ZHX1JFUSwKQEAgLTE3MCw3ICsxNzgsNyBAQAogCS8qKgogCSAqIEluaXRpYWxpemUgY2hpcCBzcGVjaWZpYyBoYW5kbGVycy4KIAkgKi8KLQlpZiAoYmZhX2lvY19kZXZpZCgmYmZhLT5pb2MpID09IEJGQV9QQ0lfREVWSUNFX0lEX0NUKSB7CisJaWYgKGJmYV9hc2ljX2lkX2N0KGJmYV9pb2NfZGV2aWQoJmJmYS0+aW9jKSkpIHsKIAkJaW9jZmMtPmh3aWYuaHdfcmVnaW5pdCA9IGJmYV9od2N0X3JlZ2luaXQ7CiAJCWlvY2ZjLT5od2lmLmh3X3JlcXFfYWNrID0gYmZhX2h3Y3RfcmVxcV9hY2s7CiAJCWlvY2ZjLT5od2lmLmh3X3JzcHFfYWNrID0gYmZhX2h3Y3RfcnNwcV9hY2s7CkBAIC0xNzksNiArMTg3LDcgQEAKIAkJaW9jZmMtPmh3aWYuaHdfbXNpeF91bmluc3RhbGwgPSBiZmFfaHdjdF9tc2l4X3VuaW5zdGFsbDsKIAkJaW9jZmMtPmh3aWYuaHdfaXNyX21vZGVfc2V0ID0gYmZhX2h3Y3RfaXNyX21vZGVfc2V0OwogCQlpb2NmYy0+aHdpZi5od19tc2l4X2dldHZlY3MgPSBiZmFfaHdjdF9tc2l4X2dldHZlY3M7CisJCWlvY2ZjLT5od2lmLmh3X21zaXhfZ2V0X3JtZV9yYW5nZSA9IGJmYV9od2N0X21zaXhfZ2V0X3JtZV9yYW5nZTsKIAl9IGVsc2UgewogCQlpb2NmYy0+aHdpZi5od19yZWdpbml0ID0gYmZhX2h3Y2JfcmVnaW5pdDsKIAkJaW9jZmMtPmh3aWYuaHdfcmVxcV9hY2sgPSBiZmFfaHdjYl9yZXFxX2FjazsKQEAgLTE4OCw2ICsxOTcsNyBAQAogCQlpb2NmYy0+aHdpZi5od19tc2l4X3VuaW5zdGFsbCA9IGJmYV9od2NiX21zaXhfdW5pbnN0YWxsOwogCQlpb2NmYy0+aHdpZi5od19pc3JfbW9kZV9zZXQgPSBiZmFfaHdjYl9pc3JfbW9kZV9zZXQ7CiAJCWlvY2ZjLT5od2lmLmh3X21zaXhfZ2V0dmVjcyA9IGJmYV9od2NiX21zaXhfZ2V0dmVjczsKKwkJaW9jZmMtPmh3aWYuaHdfbXNpeF9nZXRfcm1lX3JhbmdlID0gYmZhX2h3Y2JfbXNpeF9nZXRfcm1lX3JhbmdlOwogCX0KIAogCWlvY2ZjLT5od2lmLmh3X3JlZ2luaXQoYmZhKTsKQEAgLTI5MSwxOCArMzAxLDYgQEAKIH0KIAogLyoqCi0gKiBCRkEgc3VibW9kdWxlcyBpbml0aWFsaXphdGlvbiBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbi4KLSAqLwotc3RhdGljIHZvaWQKLWJmYV9pb2NmY19pbml0ZG9uZV9zdWJtb2Qoc3RydWN0IGJmYV9zICpiZmEpCi17Ci0JaW50ICAgICAgICAgICAgIGk7Ci0KLQlmb3IgKGkgPSAwOyBoYWxfbW9kc1tpXTsgaSsrKQotCQloYWxfbW9kc1tpXS0+aW5pdGRvbmUoYmZhKTsKLX0KLQotLyoqCiAgKiBTdGFydCBCRkEgc3VibW9kdWxlcy4KICAqLwogc3RhdGljIHZvaWQKQEAgLTM3Niw3ICszNzQsNiBAQAogCXN0cnVjdCBiZmFfaW9jZmNfcwkJKmlvY2ZjCSA9ICZiZmEtPmlvY2ZjOwogCXN0cnVjdCBiZmlfaW9jZmNfY2ZncnNwX3MJKmNmZ3JzcCAgPSBpb2NmYy0+Y2ZncnNwOwogCXN0cnVjdCBiZmFfaW9jZmNfZndjZmdfcwkqZndjZmcgICA9ICZjZmdyc3AtPmZ3Y2ZnOwotCXN0cnVjdCBiZmlfaW9jZmNfY2ZnX3MgCQkqY2ZnaW5mbyA9IGlvY2ZjLT5jZmdpbmZvOwogCiAJZndjZmctPm51bV9jcXMgICAgICAgID0gZndjZmctPm51bV9jcXM7CiAJZndjZmctPm51bV9pb2ltX3JlcXMgID0gYmZhX29zX250b2hzKGZ3Y2ZnLT5udW1faW9pbV9yZXFzKTsKQEAgLTM4NSwxNSArMzgyLDEzIEBACiAJZndjZmctPm51bV91Zl9idWZzICAgID0gYmZhX29zX250b2hzKGZ3Y2ZnLT5udW1fdWZfYnVmcyk7CiAJZndjZmctPm51bV9ycG9ydHMgICAgID0gYmZhX29zX250b2hzKGZ3Y2ZnLT5udW1fcnBvcnRzKTsKIAotCWNmZ2luZm8tPmludHJfYXR0ci5jb2FsZXNjZSA9IGNmZ3JzcC0+aW50cl9hdHRyLmNvYWxlc2NlOwotCWNmZ2luZm8tPmludHJfYXR0ci5kZWxheSAgICA9IGJmYV9vc19udG9ocyhjZmdyc3AtPmludHJfYXR0ci5kZWxheSk7Ci0JY2ZnaW5mby0+aW50cl9hdHRyLmxhdGVuY3kgID0gYmZhX29zX250b2hzKGNmZ3JzcC0+aW50cl9hdHRyLmxhdGVuY3kpOwotCiAJaW9jZmMtPmNmZ2RvbmUgPSBCRkFfVFJVRTsKIAogCS8qKgogCSAqIENvbmZpZ3VyYXRpb24gaXMgY29tcGxldGUgLSBpbml0aWFsaXplL3N0YXJ0IHN1Ym1vZHVsZXMKIAkgKi8KKwliZmFfZmNwb3J0X2luaXQoYmZhKTsKKwogCWlmIChpb2NmYy0+YWN0aW9uID09IEJGQV9JT0NGQ19BQ1RfSU5JVCkKIAkJYmZhX2NiX3F1ZXVlKGJmYSwgJmlvY2ZjLT5pbml0X2hjYl9xZSwgYmZhX2lvY2ZjX2luaXRfY2IsIGJmYSk7CiAJZWxzZQpAQCAtNTMxLDcgKzUyNiw2IEBACiAJCXJldHVybjsKIAl9CiAKLQliZmFfaW9jZmNfaW5pdGRvbmVfc3VibW9kKGJmYSk7CiAJYmZhX2lvY2ZjX3NlbmRfY2ZnKGJmYSk7CiB9CiAKQEAgLTYyNSw5ICs2MTksOSBAQAogCQliZmEtPnRyY21vZCwgYmZhLT5hZW4sIGJmYS0+bG9nbSk7CiAKIAkvKioKLQkgKiBDaG9vc2UgRkMgKHNzaWQ6IDB4MUMpIHYvcyBGQ29FIChzc2lkOiAweDE0KSBtb2RlLgorCSAqIFNldCBGQyBtb2RlIGZvciBCRkFfUENJX0RFVklDRV9JRF9DVF9GQy4KIAkgKi8KLQlpZiAoMCkKKwlpZiAocGNpZGV2LT5kZXZpY2VfaWQgPT0gQkZBX1BDSV9ERVZJQ0VfSURfQ1RfRkMpCiAJCWJmYV9pb2Nfc2V0X2ZjbW9kZSgmYmZhLT5pb2MpOwogCiAJYmZhX2lvY19wY2lfaW5pdCgmYmZhLT5pb2MsIHBjaWRldiwgQkZJX01DX0lPQ0ZDKTsKQEAgLTc0OCwxMCArNzQyLDIwIEBACiB2b2lkCiBiZmFfaW9jZmNfZ2V0X2F0dHIoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfaW9jZmNfYXR0cl9zICphdHRyKQogewotCXN0cnVjdCBiZmFfaW9jZmNfcwkqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MgICAgICAqaW9jZmMgPSAmYmZhLT5pb2NmYzsKIAotCWF0dHItPmludHJfYXR0ciA9IGlvY2ZjLT5jZmdpbmZvLT5pbnRyX2F0dHI7Ci0JYXR0ci0+Y29uZmlnCT0gaW9jZmMtPmNmZzsKKwlhdHRyLT5pbnRyX2F0dHIuY29hbGVzY2UgPSBpb2NmYy0+Y2ZnaW5mby0+aW50cl9hdHRyLmNvYWxlc2NlOworCisJYXR0ci0+aW50cl9hdHRyLmRlbGF5ID0gaW9jZmMtPmNmZ2luZm8tPmludHJfYXR0ci5kZWxheSA/CisJCQliZmFfb3NfbnRvaHMoaW9jZmMtPmNmZ2luZm8tPmludHJfYXR0ci5kZWxheSkgOgorCQkJYmZhX29zX250b2hzKGlvY2ZjLT5jZmdyc3AtPmludHJfYXR0ci5kZWxheSk7CisKKwlhdHRyLT5pbnRyX2F0dHIubGF0ZW5jeSA9IGlvY2ZjLT5jZmdpbmZvLT5pbnRyX2F0dHIubGF0ZW5jeSA/CisJCQliZmFfb3NfbnRvaHMoaW9jZmMtPmNmZ2luZm8tPmludHJfYXR0ci5sYXRlbmN5KSA6CisJCQliZmFfb3NfbnRvaHMoaW9jZmMtPmNmZ3JzcC0+aW50cl9hdHRyLmxhdGVuY3kpOworCisJYXR0ci0+Y29uZmlnICAgID0gaW9jZmMtPmNmZzsKKwogfQogCiBiZmFfc3RhdHVzX3QKQEAgLTc2MCw3ICs3NjQsMTAgQEAKIAlzdHJ1Y3QgYmZhX2lvY2ZjX3MJCSppb2NmYyA9ICZiZmEtPmlvY2ZjOwogCXN0cnVjdCBiZmlfaW9jZmNfc2V0X2ludHJfcmVxX3MgKm07CiAKLQlpb2NmYy0+Y2ZnaW5mby0+aW50cl9hdHRyID0gKmF0dHI7CisJaW9jZmMtPmNmZ2luZm8tPmludHJfYXR0ci5jb2FsZXNjZSA9IGF0dHItPmNvYWxlc2NlOworCWlvY2ZjLT5jZmdpbmZvLT5pbnRyX2F0dHIuZGVsYXkgPSBiZmFfb3NfaHRvbnMoYXR0ci0+ZGVsYXkpOworCWlvY2ZjLT5jZmdpbmZvLT5pbnRyX2F0dHIubGF0ZW5jeSA9IGJmYV9vc19odG9ucyhhdHRyLT5sYXRlbmN5KTsKKwogCWlmICghYmZhX2lvY2ZjX2lzX29wZXJhdGlvbmFsKGJmYSkpCiAJCXJldHVybiBCRkFfU1RBVFVTX09LOwogCkBAIC03NzAsOSArNzc3LDEwIEBACiAKIAliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX0lPQ0ZDLCBCRklfSU9DRkNfSDJJX1NFVF9JTlRSX1JFUSwKIAkJCWJmYV9scHVpZChiZmEpKTsKLQltLT5jb2FsZXNjZSA9IGF0dHItPmNvYWxlc2NlOwotCW0tPmRlbGF5ICAgID0gYmZhX29zX2h0b25zKGF0dHItPmRlbGF5KTsKLQltLT5sYXRlbmN5ICA9IGJmYV9vc19odG9ucyhhdHRyLT5sYXRlbmN5KTsKKwltLT5jb2FsZXNjZSA9IGlvY2ZjLT5jZmdpbmZvLT5pbnRyX2F0dHIuY29hbGVzY2U7CisJbS0+ZGVsYXkgICAgPSBpb2NmYy0+Y2ZnaW5mby0+aW50cl9hdHRyLmRlbGF5OworCW0tPmxhdGVuY3kgID0gaW9jZmMtPmNmZ2luZm8tPmludHJfYXR0ci5sYXRlbmN5OworCiAKIAliZmFfdHJjKGJmYSwgYXR0ci0+ZGVsYXkpOwogCWJmYV90cmMoYmZhLCBhdHRyLT5sYXRlbmN5KTsKQEAgLTg3MiwxNSArODgwLDQ4IEBACiAgKiBSZXR1cm4gYm9vdCB0YXJnZXQgcG9ydCB3d25zIC0tIHJlYWQgZnJvbSBib290IGluZm9ybWF0aW9uIGluIGZsYXNoLgogICovCiB2b2lkCi1iZmFfaW9jZmNfZ2V0X2Jvb3R3d25zKHN0cnVjdCBiZmFfcyAqYmZhLCB1OCAqbnd3bnMsIHd3bl90ICoqd3ducykKK2JmYV9pb2NmY19nZXRfYm9vdHd3bnMoc3RydWN0IGJmYV9zICpiZmEsIHU4ICpud3ducywgd3duX3QgKnd3bnMpCiB7Ci0Jc3RydWN0IGJmYV9pb2NmY19zCQkqaW9jZmMJID0gJmJmYS0+aW9jZmM7Ci0Jc3RydWN0IGJmaV9pb2NmY19jZmdyc3BfcwkqY2ZncnNwICA9IGlvY2ZjLT5jZmdyc3A7CisJc3RydWN0IGJmYV9pb2NmY19zICppb2NmYyA9ICZiZmEtPmlvY2ZjOworCXN0cnVjdCBiZmlfaW9jZmNfY2ZncnNwX3MgKmNmZ3JzcCA9IGlvY2ZjLT5jZmdyc3A7CisJaW50IGk7CisKKwlpZiAoY2ZncnNwLT5wYmNfY2ZnLmJvb3RfZW5hYmxlZCAmJiBjZmdyc3AtPnBiY19jZmcubmJsdW5zKSB7CisJCWJmYV90cmMoYmZhLCBjZmdyc3AtPnBiY19jZmcubmJsdW5zKTsKKwkJKm53d25zID0gY2ZncnNwLT5wYmNfY2ZnLm5ibHVuczsKKwkJZm9yIChpID0gMDsgaSA8IGNmZ3JzcC0+cGJjX2NmZy5uYmx1bnM7IGkrKykKKwkJCXd3bnNbaV0gPSBjZmdyc3AtPnBiY19jZmcuYmx1bltpXS50Z3RfcHd3bjsKKworCQlyZXR1cm47CisJfQogCiAJKm53d25zID0gY2ZncnNwLT5ib290d3ducy5ud3duczsKLQkqd3ducyA9IGNmZ3JzcC0+Ym9vdHd3bnMud3duOworCW1lbWNweSh3d25zLCBjZmdyc3AtPmJvb3R3d25zLnd3biwgc2l6ZW9mKGNmZ3JzcC0+Ym9vdHd3bnMud3duKSk7CiB9CiAKK3ZvaWQKK2JmYV9pb2NmY19nZXRfcGJjX2Jvb3RfY2ZnKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX2Jvb3RfcGJjX3MgKnBiY2ZnKQoreworCXN0cnVjdCBiZmFfaW9jZmNfcyAqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ3JzcF9zICpjZmdyc3AgPSBpb2NmYy0+Y2ZncnNwOworCisJcGJjZmctPmVuYWJsZSA9IGNmZ3JzcC0+cGJjX2NmZy5ib290X2VuYWJsZWQ7CisJcGJjZmctPm5ibHVucyA9IGNmZ3JzcC0+cGJjX2NmZy5uYmx1bnM7CisJcGJjZmctPnNwZWVkID0gY2ZncnNwLT5wYmNfY2ZnLnBvcnRfc3BlZWQ7CisJbWVtY3B5KHBiY2ZnLT5wYmx1biwgY2ZncnNwLT5wYmNfY2ZnLmJsdW4sIHNpemVvZihwYmNmZy0+cGJsdW4pKTsKK30KKworaW50CitiZmFfaW9jZmNfZ2V0X3BiY192cG9ydHMoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfcGJjX3Zwb3J0X3MgKnBiY192cG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MgKmlvY2ZjID0gJmJmYS0+aW9jZmM7CisJc3RydWN0IGJmaV9pb2NmY19jZmdyc3BfcyAqY2ZncnNwID0gaW9jZmMtPmNmZ3JzcDsKKworCW1lbWNweShwYmNfdnBvcnQsIGNmZ3JzcC0+cGJjX2NmZy52cG9ydCwgc2l6ZW9mKGNmZ3JzcC0+cGJjX2NmZy52cG9ydCkpOworCXJldHVybiBjZmdyc3AtPnBiY19jZmcubnZwb3J0czsKK30KKworCiAjZW5kaWYKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2NmYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jZmMuaAppbmRleCBmYmI0YmRjLi43NGE2YTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2NmYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvY2ZjLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxiZmFfaW9jLmg+CiAjaW5jbHVkZSA8YmZhLmg+CiAjaW5jbHVkZSA8YmZpL2JmaV9pb2NmYy5oPgorI2luY2x1ZGUgPGJmaS9iZmlfcGJjLmg+CiAjaW5jbHVkZSA8YmZhX2NhbGxiYWNrX3ByaXYuaD4KIAogI2RlZmluZSBCRkFfUkVRUV9ORUxFTVNfTUlOCSg0KQpAQCAtNjIsNiArNjMsOCBAQAogCXZvaWQgKCpod19pc3JfbW9kZV9zZXQpKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IG1zaXgpOwogCXZvaWQgKCpod19tc2l4X2dldHZlY3MpKHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgKnZlY21hcCwKIAkJCXUzMiAqbnZlY3MsIHUzMiAqbWF4dmVjKTsKKwl2b2lkICgqaHdfbXNpeF9nZXRfcm1lX3JhbmdlKSAoc3RydWN0IGJmYV9zICpiZmEsIHUzMiAqc3RhcnQsCisJCQl1MzIgKmVuZCk7CiB9OwogdHlwZWRlZiB2b2lkICgqYmZhX2NiX2lvY2ZjX3QpICh2b2lkICpjYmFyZywgZW51bSBiZmFfc3RhdHVzIHN0YXR1cyk7CiAKQEAgLTEwMyw3ICsxMDYsOCBAQAogCXN0cnVjdCBiZmFfaHdpZl9zCWh3aWY7CiAKIAliZmFfY2JfaW9jZmNfdAkJdXBkYXRlcV9jYmZuOyAvKiAgYmlvcyBjYWxsYmFjayBmdW5jdGlvbiAqLwotCXZvaWQJCQkJKnVwZGF0ZXFfY2Jhcmc7CS8qICBiaW9zIGNhbGxiYWNrIGFyZyAqLworCXZvaWQJCQkqdXBkYXRlcV9jYmFyZzsJLyogIGJpb3MgY2FsbGJhY2sgYXJnICovCisJdTMyCQkJaW50cl9tYXNrOwogfTsKIAogI2RlZmluZSBiZmFfbHB1aWQoX19iZmEpCQliZmFfaW9jX3BvcnRpZCgmKF9fYmZhKS0+aW9jKQpAQCAtMTE2LDcgKzEyMCwxMCBAQAogI2RlZmluZSBiZmFfaXNyX21vZGVfc2V0KF9fYmZhLCBfX21zaXgpCVwKIAkoKF9fYmZhKS0+aW9jZmMuaHdpZi5od19pc3JfbW9kZV9zZXQoX19iZmEsIF9fbXNpeCkpCiAjZGVmaW5lIGJmYV9tc2l4X2dldHZlY3MoX19iZmEsIF9fdmVjbWFwLCBfX252ZWNzLCBfX21heHZlYykJXAotCShfX2JmYSktPmlvY2ZjLmh3aWYuaHdfbXNpeF9nZXR2ZWNzKF9fYmZhLCBfX3ZlY21hcCwgX19udmVjcywgX19tYXh2ZWMpCisJKChfX2JmYSktPmlvY2ZjLmh3aWYuaHdfbXNpeF9nZXR2ZWNzKF9fYmZhLCBfX3ZlY21hcCwJXAorCQkgX19udmVjcywgX19tYXh2ZWMpKQorI2RlZmluZSBiZmFfbXNpeF9nZXRfcm1lX3JhbmdlKF9fYmZhLCBfX3N0YXJ0LCBfX2VuZCkgICBcCisJKChfX2JmYSktPmlvY2ZjLmh3aWYuaHdfbXNpeF9nZXRfcm1lX3JhbmdlKF9fYmZhLCBfX3N0YXJ0LCBfX2VuZCkpCiAKIC8qCiAgKiBGQyBzcGVjaWZpYyBJT0MgZnVuY3Rpb25zLgpAQCAtMTUyLDYgKzE1OSw3IEBACiB2b2lkIGJmYV9od2NiX2lzcl9tb2RlX3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBtc2l4KTsKIHZvaWQgYmZhX2h3Y2JfbXNpeF9nZXR2ZWNzKHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgKnZlY21hcCwKIAkJCXUzMiAqbnZlY3MsIHUzMiAqbWF4dmVjKTsKK3ZvaWQgYmZhX2h3Y2JfbXNpeF9nZXRfcm1lX3JhbmdlKHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgKnN0YXJ0LCB1MzIgKmVuZCk7CiB2b2lkIGJmYV9od2N0X3JlZ2luaXQoc3RydWN0IGJmYV9zICpiZmEpOwogdm9pZCBiZmFfaHdjdF9yZXFxX2FjayhzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHJzcHEpOwogdm9pZCBiZmFfaHdjdF9yc3BxX2FjayhzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHJzcHEpOwpAQCAtMTYxLDExICsxNjksMTYgQEAKIHZvaWQgYmZhX2h3Y3RfaXNyX21vZGVfc2V0KHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IG1zaXgpOwogdm9pZCBiZmFfaHdjdF9tc2l4X2dldHZlY3Moc3RydWN0IGJmYV9zICpiZmEsIHUzMiAqdmVjbWFwLAogCQkJdTMyICpudmVjcywgdTMyICptYXh2ZWMpOwordm9pZCBiZmFfaHdjdF9tc2l4X2dldF9ybWVfcmFuZ2Uoc3RydWN0IGJmYV9zICpiZmEsIHUzMiAqc3RhcnQsIHUzMiAqZW5kKTsKIAogdm9pZCBiZmFfY29tX21lbWluZm8oYmZhX2Jvb2xlYW5fdCBtaW5jZmcsIHUzMiAqZG1fbGVuKTsKIHZvaWQgYmZhX2NvbV9hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfbWVtaW5mb19zICptaSwKIAkJYmZhX2Jvb2xlYW5fdCBtaW5jZmcpOwotdm9pZCBiZmFfaW9jZmNfZ2V0X2Jvb3R3d25zKHN0cnVjdCBiZmFfcyAqYmZhLCB1OCAqbnd3bnMsIHd3bl90ICoqd3ducyk7Cit2b2lkIGJmYV9pb2NmY19nZXRfYm9vdHd3bnMoc3RydWN0IGJmYV9zICpiZmEsIHU4ICpud3ducywgd3duX3QgKnd3bnMpOwordm9pZCBiZmFfaW9jZmNfZ2V0X3BiY19ib290X2NmZyhzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJc3RydWN0IGJmYV9ib290X3BiY19zICpwYmNmZyk7CitpbnQgYmZhX2lvY2ZjX2dldF9wYmNfdnBvcnRzKHN0cnVjdCBiZmFfcyAqYmZhLAorCQlzdHJ1Y3QgYmZpX3BiY192cG9ydF9zICpwYmNfdnBvcnQpOwogCiAjZW5kaWYgLyogX19CRkFfSU9DRkNfSF9fICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvaW0uYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvaW0uYwppbmRleCA2ODdmM2Q2Li5iZGZkYzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2ltLmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9pbS5jCkBAIC0xMzMsNiArMTMzLDggQEAKIAogCWNhc2UgQkZBX0lPSU1fU01fSU9UT1Y6CiAJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJbGlzdF9kZWwoJmlvaW0tPnFlKTsKKwkJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZpb2ltLT5mY3BpbS0+aW9pbV9jb21wX3EpOwogCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLAogCQkJCV9fYmZhX2NiX2lvaW1fcGF0aHRvdiwgaW9pbSk7CiAJCWJyZWFrOwpAQCAtMTgyLDYgKzE4NCw4IEBACiAJY2FzZSBCRkFfSU9JTV9TTV9BQk9SVDoKIAkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOwogCQliZmFfc2dwZ193Y2FuY2VsKGlvaW0tPmJmYSwgJmlvaW0tPmlvc3AtPnNncGdfd3FlKTsKKwkJbGlzdF9kZWwoJmlvaW0tPnFlKTsKKwkJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZpb2ltLT5mY3BpbS0+aW9pbV9jb21wX3EpOwogCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2Fib3J0LAogCQkJICAgICAgaW9pbSk7CiAJCWJyZWFrOwpAQCAtMTg5LDYgKzE5Myw4IEBACiAJY2FzZSBCRkFfSU9JTV9TTV9IV0ZBSUw6CiAJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKIAkJYmZhX3NncGdfd2NhbmNlbChpb2ltLT5iZmEsICZpb2ltLT5pb3NwLT5zZ3BnX3dxZSk7CisJCWxpc3RfZGVsKCZpb2ltLT5xZSk7CisJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmaW9pbS0+ZmNwaW0tPmlvaW1fY29tcF9xKTsKIAkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9mYWlsZWQsCiAJCQkgICAgICBpb2ltKTsKIAkJYnJlYWs7CkBAIC0yMTAsMTggKzIxNiwyNCBAQAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIEJGQV9JT0lNX1NNX0NPTVBfR09PRDoKIAkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQlsaXN0X2RlbCgmaW9pbS0+cWUpOworCQlsaXN0X2FkZF90YWlsKCZpb2ltLT5xZSwgJmlvaW0tPmZjcGltLT5pb2ltX2NvbXBfcSk7CiAJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsCiAJCQkgICAgICBfX2JmYV9jYl9pb2ltX2dvb2RfY29tcCwgaW9pbSk7CiAJCWJyZWFrOwogCiAJY2FzZSBCRkFfSU9JTV9TTV9DT01QOgogCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWxpc3RfZGVsKCZpb2ltLT5xZSk7CisJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmaW9pbS0+ZmNwaW0tPmlvaW1fY29tcF9xKTsKIAkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9jb21wLAogCQkJICAgICAgaW9pbSk7CiAJCWJyZWFrOwogCiAJY2FzZSBCRkFfSU9JTV9TTV9ET05FOgogCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYl9mcmVlKTsKKwkJbGlzdF9kZWwoJmlvaW0tPnFlKTsKKwkJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZpb2ltLT5mY3BpbS0+aW9pbV9jb21wX3EpOwogCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2NvbXAsCiAJCQkgICAgICBpb2ltKTsKIAkJYnJlYWs7CkBAIC0yMzQsOCArMjQ2LDggQEAKIAkJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fYWJvcnQpOwogCQllbHNlIHsKIAkJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fYWJvcnRfcWZ1bGwpOwotCQkJYmZhX3JlcXFfd2FpdChpb2ltLT5iZmEsIGlvaW0tPml0bmltLT5yZXFxLAotCQkJCQkgICZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOworCQkJYmZhX3JlcXFfd2FpdChpb2ltLT5iZmEsIGlvaW0tPnJlcXEsCisJCQkJCSZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOwogCQl9CiAJCWJyZWFrOwogCkBAIC0yNDcsMTMgKzI1OSwxNSBAQAogCQkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9jbGVhbnVwKTsKIAkJZWxzZSB7CiAJCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2NsZWFudXBfcWZ1bGwpOwotCQkJYmZhX3JlcXFfd2FpdChpb2ltLT5iZmEsIGlvaW0tPml0bmltLT5yZXFxLAotCQkJCQkgICZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOworCQkJYmZhX3JlcXFfd2FpdChpb2ltLT5iZmEsIGlvaW0tPnJlcXEsCisJCQkJCSZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBCRkFfSU9JTV9TTV9IV0ZBSUw6CiAJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJbGlzdF9kZWwoJmlvaW0tPnFlKTsKKwkJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZpb2ltLT5mY3BpbS0+aW9pbV9jb21wX3EpOwogCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2ZhaWxlZCwKIAkJCSAgICAgIGlvaW0pOwogCQlicmVhazsKQEAgLTI4NywxMiArMzAxLDE2IEBACiAKIAljYXNlIEJGQV9JT0lNX1NNX0FCT1JUX0NPTVA6CiAJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJbGlzdF9kZWwoJmlvaW0tPnFlKTsKKwkJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZpb2ltLT5mY3BpbS0+aW9pbV9jb21wX3EpOwogCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2Fib3J0LAogCQkJICAgICAgaW9pbSk7CiAJCWJyZWFrOwogCiAJY2FzZSBCRkFfSU9JTV9TTV9DT01QX1VUQUc6CiAJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJbGlzdF9kZWwoJmlvaW0tPnFlKTsKKwkJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZpb2ltLT5mY3BpbS0+aW9pbV9jb21wX3EpOwogCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2Fib3J0LAogCQkJICAgICAgaW9pbSk7CiAJCWJyZWFrOwpAQCAtMzA1LDEzICszMjMsMTUgQEAKIAkJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fY2xlYW51cCk7CiAJCWVsc2UgewogCQkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9jbGVhbnVwX3FmdWxsKTsKLQkJCWJmYV9yZXFxX3dhaXQoaW9pbS0+YmZhLCBpb2ltLT5pdG5pbS0+cmVxcSwKKwkJCWJmYV9yZXFxX3dhaXQoaW9pbS0+YmZhLCBpb2ltLT5yZXFxLAogCQkJCQkgICZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBCRkFfSU9JTV9TTV9IV0ZBSUw6CiAJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJbGlzdF9kZWwoJmlvaW0tPnFlKTsKKwkJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZpb2ltLT5mY3BpbS0+aW9pbV9jb21wX3EpOwogCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2ZhaWxlZCwKIAkJCSAgICAgIGlvaW0pOwogCQlicmVhazsKQEAgLTM2NSw2ICszODUsOCBAQAogCiAJY2FzZSBCRkFfSU9JTV9TTV9IV0ZBSUw6CiAJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJbGlzdF9kZWwoJmlvaW0tPnFlKTsKKwkJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZpb2ltLT5mY3BpbS0+aW9pbV9jb21wX3EpOwogCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2ZhaWxlZCwKIAkJCSAgICAgIGlvaW0pOwogCQlicmVhazsKQEAgLTM5OSw2ICs0MjEsOCBAQAogCWNhc2UgQkZBX0lPSU1fU01fQUJPUlQ6CiAJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKIAkJYmZhX3JlcXFfd2NhbmNlbCgmaW9pbS0+aW9zcC0+cmVxcV93YWl0KTsKKwkJbGlzdF9kZWwoJmlvaW0tPnFlKTsKKwkJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZpb2ltLT5mY3BpbS0+aW9pbV9jb21wX3EpOwogCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2Fib3J0LAogCQkJICAgICAgaW9pbSk7CiAJCWJyZWFrOwpAQCAtNDE0LDYgKzQzOCw4IEBACiAJY2FzZSBCRkFfSU9JTV9TTV9IV0ZBSUw6CiAJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKIAkJYmZhX3JlcXFfd2NhbmNlbCgmaW9pbS0+aW9zcC0+cmVxcV93YWl0KTsKKwkJbGlzdF9kZWwoJmlvaW0tPnFlKTsKKwkJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZpb2ltLT5mY3BpbS0+aW9pbV9jb21wX3EpOwogCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2ZhaWxlZCwKIAkJCSAgICAgIGlvaW0pOwogCQlicmVhazsKQEAgLTQ0OCw2ICs0NzQsOCBAQAogCWNhc2UgQkZBX0lPSU1fU01fQ09NUDoKIAkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOwogCQliZmFfcmVxcV93Y2FuY2VsKCZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOworCQlsaXN0X2RlbCgmaW9pbS0+cWUpOworCQlsaXN0X2FkZF90YWlsKCZpb2ltLT5xZSwgJmlvaW0tPmZjcGltLT5pb2ltX2NvbXBfcSk7CiAJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fYWJvcnQsCiAJCQkgICAgICBpb2ltKTsKIAkJYnJlYWs7CkBAIC00NTUsNiArNDgzLDggQEAKIAljYXNlIEJGQV9JT0lNX1NNX0RPTkU6CiAJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiX2ZyZWUpOwogCQliZmFfcmVxcV93Y2FuY2VsKCZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOworCQlsaXN0X2RlbCgmaW9pbS0+cWUpOworCQlsaXN0X2FkZF90YWlsKCZpb2ltLT5xZSwgJmlvaW0tPmZjcGltLT5pb2ltX2NvbXBfcSk7CiAJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fYWJvcnQsCiAJCQkgICAgICBpb2ltKTsKIAkJYnJlYWs7CkBAIC00NjIsNiArNDkyLDggQEAKIAljYXNlIEJGQV9JT0lNX1NNX0hXRkFJTDoKIAkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOwogCQliZmFfcmVxcV93Y2FuY2VsKCZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOworCQlsaXN0X2RlbCgmaW9pbS0+cWUpOworCQlsaXN0X2FkZF90YWlsKCZpb2ltLT5xZSwgJmlvaW0tPmZjcGltLT5pb2ltX2NvbXBfcSk7CiAJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fZmFpbGVkLAogCQkJICAgICAgaW9pbSk7CiAJCWJyZWFrOwpAQCAtNDg4LDcgKzUyMCw3IEBACiAKIAljYXNlIEJGQV9JT0lNX1NNX0FCT1JUOgogCQkvKioKLQkJICogSU8gaXMgYWxyYWVkeSBiZWluZyBjbGVhbmVkIHVwIGltcGxpY2l0bHkKKwkJICogSU8gaXMgYWxyZWFkeSBiZWluZyBjbGVhbmVkIHVwIGltcGxpY2l0bHkKIAkJICovCiAJCWlvaW0tPmlvX2NiZm4gPSBfX2JmYV9jYl9pb2ltX2Fib3J0OwogCQlicmVhazsKQEAgLTUxMSw2ICs1NDMsOCBAQAogCWNhc2UgQkZBX0lPSU1fU01fSFdGQUlMOgogCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CiAJCWJmYV9yZXFxX3djYW5jZWwoJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCk7CisJCWxpc3RfZGVsKCZpb2ltLT5xZSk7CisJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmaW9pbS0+ZmNwaW0tPmlvaW1fY29tcF9xKTsKIAkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9mYWlsZWQsCiAJCQkgICAgICBpb2ltKTsKIAkJYnJlYWs7CkBAIC03MzgsOSArNzcyLDkgQEAKIAkvKioKIAkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CiAJICovCi0JbSA9IGJmYV9yZXFxX25leHQoaW9pbS0+YmZhLCBpdG5pbS0+cmVxcSk7CisJbSA9IGJmYV9yZXFxX25leHQoaW9pbS0+YmZhLCBpb2ltLT5yZXFxKTsKIAlpZiAoIW0pIHsKLQkJYmZhX3JlcXFfd2FpdChpb2ltLT5iZmEsIGlvaW0tPml0bmltLT5yZXFxLAorCQliZmFfcmVxcV93YWl0KGlvaW0tPmJmYSwgaW9pbS0+cmVxcSwKIAkJCQkgICZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOwogCQlyZXR1cm4gQkZBX0ZBTFNFOwogCX0KQEAgLTgzMiw3ICs4NjYsNyBAQAogCS8qKgogCSAqIHF1ZXVlIEkvTyBtZXNzYWdlIHRvIGZpcm13YXJlCiAJICovCi0JYmZhX3JlcXFfcHJvZHVjZShpb2ltLT5iZmEsIGl0bmltLT5yZXFxKTsKKwliZmFfcmVxcV9wcm9kdWNlKGlvaW0tPmJmYSwgaW9pbS0+cmVxcSk7CiAJcmV0dXJuIEJGQV9UUlVFOwogfQogCkBAIC05MzAsMTQgKzk2NCwxMyBAQAogc3RhdGljICAgICAgICAgIGJmYV9ib29sZWFuX3QKIGJmYV9pb2ltX3NlbmRfYWJvcnQoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pCiB7Ci0Jc3RydWN0IGJmYV9pdG5pbV9zICAgICAgICAgICppdG5pbSA9IGlvaW0tPml0bmltOwogCXN0cnVjdCBiZmlfaW9pbV9hYm9ydF9yZXFfcyAqbTsKIAllbnVtIGJmaV9pb2ltX2gyaSAgICAgICBtc2dvcDsKIAogCS8qKgogCSAqIGNoZWNrIGZvciByb29tIGluIHF1ZXVlIHRvIHNlbmQgcmVxdWVzdCBub3cKIAkgKi8KLQltID0gYmZhX3JlcXFfbmV4dChpb2ltLT5iZmEsIGl0bmltLT5yZXFxKTsKKwltID0gYmZhX3JlcXFfbmV4dChpb2ltLT5iZmEsIGlvaW0tPnJlcXEpOwogCWlmICghbSkKIAkJcmV0dXJuIEJGQV9GQUxTRTsKIApAQCAtOTU2LDcgKzk4OSw3IEBACiAJLyoqCiAJICogcXVldWUgSS9PIG1lc3NhZ2UgdG8gZmlybXdhcmUKIAkgKi8KLQliZmFfcmVxcV9wcm9kdWNlKGlvaW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCWJmYV9yZXFxX3Byb2R1Y2UoaW9pbS0+YmZhLCBpb2ltLT5yZXFxKTsKIAlyZXR1cm4gQkZBX1RSVUU7CiB9CiAKQEAgLTEzMDYsNiArMTMzOSwxNCBAQAogYmZhX2lvaW1fc3RhcnQoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pCiB7CiAJYmZhX3RyY19mcChpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKworCS8qKgorCSAqIE9idGFpbiB0aGUgcXVldWUgb3ZlciB3aGljaCB0aGlzIHJlcXVlc3QgaGFzIHRvIGJlIGlzc3VlZAorCSAqLworCWlvaW0tPnJlcXEgPSBiZmFfZmNwaW1faW9yZWRpcmVjdF9lbmFibGVkKGlvaW0tPmJmYSkgPworCQkJYmZhX2NiX2lvaW1fZ2V0X3JlcXEoaW9pbS0+ZGlvKSA6CisJCQliZmFfaXRuaW1fZ2V0X3JlcXEoaW9pbSk7CisKIAliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9TVEFSVCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2xvZ19tb2R1bGUuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2xvZ19tb2R1bGUuYwppbmRleCA1YzE1NGQzLi5jZjU3N2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9sb2dfbW9kdWxlLmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfbG9nX21vZHVsZS5jCkBAIC0xMTAsNiArMTEwLDI3IEBACiAgIlJ1bm5pbmcgZmlybXdhcmUgdmVyc2lvbiBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgZHJpdmVyIHZlcnNpb24uIiwKICAoMCksIDB9LAogCit7QkZBX0FFTl9JT0NfRldDRkdfRVJST1IsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0NSSVRJQ0FMLCAiQkZBX0FFTl9JT0NfRldDRkdfRVJST1IiLAorICJMaW5rIGluaXRpYWxpemF0aW9uIGZhaWxlZCBkdWUgdG8gZmlybXdhcmUgY29uZmlndXJhdGlvbiByZWFkIGVycm9yOiIKKyAiIFdXTiA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fSU9DX0lOVkFMSURfVkVORE9SLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19FUlJPUiwgIkJGQV9BRU5fSU9DX0lOVkFMSURfVkVORE9SIiwKKyAiVW5zdXBwb3J0ZWQgc3dpdGNoIHZlbmRvci4gTGluayBpbml0aWFsaXphdGlvbiBmYWlsZWQ6IFdXTiA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fSU9DX0lOVkFMSURfTldXTiwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfRVJST1IsICJCRkFfQUVOX0lPQ19JTlZBTElEX05XV04iLAorICJJbnZhbGlkIE5XV04uIExpbmsgaW5pdGlhbGl6YXRpb24gZmFpbGVkOiBOV1dOID0gMDA6MDA6MDA6MDA6MDA6MDA6MDA6MDAuIiwKKyAoMCksIDB9LAorCit7QkZBX0FFTl9JT0NfSU5WQUxJRF9QV1dOLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19FUlJPUiwgIkJGQV9BRU5fSU9DX0lOVkFMSURfUFdXTiIsCisgIkludmFsaWQgUFdXTi4gTGluayBpbml0aWFsaXphdGlvbiBmYWlsZWQ6IFBXV04gPSAwMDowMDowMDowMDowMDowMDowMDowMC4iLAorICgwKSwgMH0sCisKIAogCiAKQEAgLTM0Nyw2ICszNjgsMjIgQEAKICAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzEpIHwKICAgKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzIpIHwgMCksIDN9LAogCit7QkZBX0xPR19IQUxfRFJJVkVSX0VSUk9SLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiSEFMX0RSSVZFUl9FUlJPUiIsCisgIiVzIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0xPR19IQUxfRFJJVkVSX0NPTkZJR19FUlJPUiwKKyBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiSEFMX0RSSVZFUl9DT05GSUdfRVJST1IiLAorICIlcyIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9MT0dfSEFMX01CT1hfRVJST1IsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJIQUxfTUJPWF9FUlJPUiIsCisgIiVzIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCiAKIAogCkBAIC00MTIsNiArNDQ5LDU1IEBACiAgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1AgPDwgQkZBX0xPR19BUkcxKSB8CiAgIChCRkFfTE9HX1ggPDwgQkZBX0xPR19BUkcyKSB8IDApLCAzfSwKIAore0JGQV9MT0dfTElOVVhfRFJJVkVSX0NPTkZJR19FUlJPUiwKKyBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiTElOVVhfRFJJVkVSX0NPTkZJR19FUlJPUiIsCisgIiVzIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0xPR19MSU5VWF9CTkFfU1RBVEVfTUFDSElORSwKKyBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiTElOVVhfQk5BX1NUQVRFX01BQ0hJTkUiLAorICIlcyIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9MT0dfTElOVVhfSU9DX0VSUk9SLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiTElOVVhfSU9DX0VSUk9SIiwKKyAiJXMiLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfTE9HX0xJTlVYX1JFU09VUkNFX0FMTE9DX0VSUk9SLAorIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJMSU5VWF9SRVNPVVJDRV9BTExPQ19FUlJPUiIsCisgIiVzIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0xPR19MSU5VWF9SSU5HX0JVRkZFUl9FUlJPUiwKKyBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiTElOVVhfUklOR19CVUZGRVJfRVJST1IiLAorICIlcyIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9MT0dfTElOVVhfRFJJVkVSX0VSUk9SLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19FUlJPUiwgIkxJTlVYX0RSSVZFUl9FUlJPUiIsCisgIiVzIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0xPR19MSU5VWF9EUklWRVJfSU5GTywgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkxJTlVYX0RSSVZFUl9JTkZPIiwKKyAiJXMiLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfTE9HX0xJTlVYX0RSSVZFUl9ESUFHLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiTElOVVhfRFJJVkVSX0RJQUciLAorICIlcyIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9MT0dfTElOVVhfRFJJVkVSX0FFTiwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkxJTlVYX0RSSVZFUl9BRU4iLAorICIlcyIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwogCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfbHBzLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9scHMuYwppbmRleCBhZDA2ZjYxLi5hY2FiYjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9scHMuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9scHMuYwpAQCAtNDEsNyArNDEsNiBAQAogCQkJICAgc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLAogCQkJICAgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8sCiAJCQkgICBzdHJ1Y3QgYmZhX3BjaWRldl9zICpwY2lkZXYpOwotc3RhdGljIHZvaWQgYmZhX2xwc19pbml0ZG9uZShzdHJ1Y3QgYmZhX3MgKmJmYSk7CiBzdGF0aWMgdm9pZCBiZmFfbHBzX2RldGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSk7CiBzdGF0aWMgdm9pZCBiZmFfbHBzX3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKTsKIHN0YXRpYyB2b2lkIGJmYV9scHNfc3RvcChzdHJ1Y3QgYmZhX3MgKmJmYSk7CkBAIC0zNDcsMTEgKzM0Niw2IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1iZmFfbHBzX2luaXRkb25lKHN0cnVjdCBiZmFfcyAqYmZhKQotewotfQotCi1zdGF0aWMgdm9pZAogYmZhX2xwc19kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpCiB7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9wb3J0LmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9wb3J0LmMKaW5kZXggY2FiMTkwMi4uYzdlNjlmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfcG9ydC5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3BvcnQuYwpAQCAtMTAyLDkgKzEwMiwxNCBAQAogCXBvcnQtPnN0YXRzX2J1c3kgPSBCRkFfRkFMU0U7CiAKIAlpZiAoc3RhdHVzID09IEJGQV9TVEFUVVNfT0spIHsKKwkJc3RydWN0IGJmYV90aW1ldmFsX3MgdHY7CisKIAkJbWVtY3B5KHBvcnQtPnN0YXRzLCBwb3J0LT5zdGF0c19kbWEua3ZhLAogCQkgICAgICAgc2l6ZW9mKHVuaW9uIGJmYV9wcG9ydF9zdGF0c191KSk7CiAJCWJmYV9wb3J0X3N0YXRzX3N3YXAocG9ydCwgcG9ydC0+c3RhdHMpOworCisJCWJmYV9vc19nZXR0aW1lb2ZkYXkoJnR2KTsKKwkJcG9ydC0+c3RhdHMtPmZjLnNlY3NfcmVzZXQgPSB0di50dl9zZWMgLSBwb3J0LT5zdGF0c19yZXNldF90aW1lOwogCX0KIAogCWlmIChwb3J0LT5zdGF0c19jYmZuKSB7CkBAIC0xMjUsOSArMTMwLDE3IEBACiBzdGF0aWMgdm9pZAogYmZhX3BvcnRfY2xlYXJfc3RhdHNfaXNyKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LCBiZmFfc3RhdHVzX3Qgc3RhdHVzKQogeworCXN0cnVjdCBiZmFfdGltZXZhbF9zIHR2OworCiAJcG9ydC0+c3RhdHNfc3RhdHVzID0gc3RhdHVzOwogCXBvcnQtPnN0YXRzX2J1c3kgPSBCRkFfRkFMU0U7CiAKKwkvKioKKwkgKiByZS1pbml0aWFsaXplIHRpbWUgc3RhbXAgZm9yIHN0YXRzIHJlc2V0CisJICovCisJYmZhX29zX2dldHRpbWVvZmRheSgmdHYpOworCXBvcnQtPnN0YXRzX3Jlc2V0X3RpbWUgPSB0di50dl9zZWM7CisKIAlpZiAocG9ydC0+c3RhdHNfY2JmbikgewogCQlwb3J0LT5zdGF0c19jYmZuKHBvcnQtPnN0YXRzX2NiYXJnLCBzdGF0dXMpOwogCQlwb3J0LT5zdGF0c19jYmZuID0gTlVMTDsKQEAgLTM5NCw3ICs0MDcsNyBAQAogCSAqLwogCWlmIChwb3J0LT5zdGF0c19idXN5KSB7CiAJCWlmIChwb3J0LT5zdGF0c19jYmZuKQotCQkJcG9ydC0+c3RhdHNfY2Jmbihwb3J0LT5kZXYsIEJGQV9TVEFUVVNfRkFJTEVEKTsKKwkJCXBvcnQtPnN0YXRzX2NiZm4ocG9ydC0+c3RhdHNfY2JhcmcsIEJGQV9TVEFUVVNfRkFJTEVEKTsKIAkJcG9ydC0+c3RhdHNfY2JmbiA9IE5VTEw7CiAJCXBvcnQtPnN0YXRzX2J1c3kgPSBCRkFfRkFMU0U7CiAJfQpAQCAtNDA0LDcgKzQxNyw3IEBACiAJICovCiAJaWYgKHBvcnQtPmVuZGlzX3BlbmRpbmcpIHsKIAkJaWYgKHBvcnQtPmVuZGlzX2NiZm4pCi0JCQlwb3J0LT5lbmRpc19jYmZuKHBvcnQtPmRldiwgQkZBX1NUQVRVU19GQUlMRUQpOworCQkJcG9ydC0+ZW5kaXNfY2Jmbihwb3J0LT5lbmRpc19jYmFyZywgQkZBX1NUQVRVU19GQUlMRUQpOwogCQlwb3J0LT5lbmRpc19jYmZuID0gTlVMTDsKIAkJcG9ydC0+ZW5kaXNfcGVuZGluZyA9IEJGQV9GQUxTRTsKIAl9CkBAIC00MjgsNiArNDQxLDggQEAKIGJmYV9wb3J0X2F0dGFjaChzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwgc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB2b2lkICpkZXYsCiAJCXN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QsIHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtb2QpCiB7CisJc3RydWN0IGJmYV90aW1ldmFsX3MgdHY7CisKIAliZmFfYXNzZXJ0KHBvcnQpOwogCiAJcG9ydC0+ZGV2ID0gZGV2OwpAQCAtNDM1LDEzICs0NTAsMjEgQEAKIAlwb3J0LT50cmNtb2QgPSB0cmNtb2Q7CiAJcG9ydC0+bG9nbW9kID0gbG9nbW9kOwogCi0JcG9ydC0+c3RhdHNfYnVzeSA9IHBvcnQtPmVuZGlzX3BlbmRpbmcgPSBCRkFfRkFMU0U7Ci0JcG9ydC0+c3RhdHNfY2JmbiA9IHBvcnQtPmVuZGlzX2NiZm4gPSBOVUxMOworCXBvcnQtPnN0YXRzX2J1c3kgPSBCRkFfRkFMU0U7CisJcG9ydC0+ZW5kaXNfcGVuZGluZyA9IEJGQV9GQUxTRTsKKwlwb3J0LT5zdGF0c19jYmZuID0gTlVMTDsKKwlwb3J0LT5lbmRpc19jYmZuID0gTlVMTDsKIAogCWJmYV9pb2NfbWJveF9yZWdpc3IocG9ydC0+aW9jLCBCRklfTUNfUE9SVCwgYmZhX3BvcnRfaXNyLCBwb3J0KTsKIAliZmFfaW9jX2hiZmFpbF9pbml0KCZwb3J0LT5oYmZhaWwsIGJmYV9wb3J0X2hiZmFpbCwgcG9ydCk7CiAJYmZhX2lvY19oYmZhaWxfcmVnaXN0ZXIocG9ydC0+aW9jLCAmcG9ydC0+aGJmYWlsKTsKIAorCS8qKgorCSAqIGluaXRpYWxpemUgdGltZSBzdGFtcCBmb3Igc3RhdHMgcmVzZXQKKwkgKi8KKwliZmFfb3NfZ2V0dGltZW9mZGF5KCZ0dik7CisJcG9ydC0+c3RhdHNfcmVzZXRfdGltZSA9IHR2LnR2X3NlYzsKKwogCWJmYV90cmMocG9ydCwgMCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3BvcnRfcHJpdi5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfcG9ydF9wcml2LmgKaW5kZXggNDBlMjU2ZS4uYzllYmUwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfcG9ydF9wcml2LmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfcG9ydF9wcml2LmgKQEAgLTc1LDggKzc1LDkgQEAKIAliZmFfc3RhdHVzX3QgICAgICAgICAgICBzdGF0c19zdGF0dXM7IC8qICBzdGF0cy9zdGF0c2NsciBzdGF0dXMgKi8KIAliZmFfYm9vbGVhbl90ICAgICAgICAgICBzdGF0c19idXN5OyAvKiAgb3V0c3RhbmRpbmcgc3RhdHMvc3RhdHNjbHIgKi8KIAliZmFfYm9vbGVhbl90ICAgICAgICAgICBzdGF0c19xZnVsbDsKKwl1MzIgICAgICAgICAgICAgICAgCXN0YXRzX3Jlc2V0X3RpbWU7IC8qIHN0YXRzIHJlc2V0IHRpbWUgc3RhbXAgKi8KIAliZmFfY2JfcHBvcnRfdCAgICAgICAgICBzdGF0c19jYmZuOyAvKiAgZHJpdmVyIGNhbGxiYWNrIGZ1bmN0aW9uICovCi0Jdm9pZCAgICAgICAgICAgICAgICAgICAgKnN0YXRzX2NiYXJnOyAvKiAqITwgdXNlciBjYWxsYmFjayBhcmcgKi8KKwl2b2lkICAgICAgICAgICAgICAgICAgICAqc3RhdHNfY2Jhcmc7IC8qIHVzZXIgY2FsbGJhY2sgYXJnICovCiAJYmZhX2Jvb2xlYW5fdCAgICAgICAgICAgZGlhZ19idXN5OyAvKiAgZGlhZyBidXN5IHN0YXR1cyAqLwogCWJmYV9ib29sZWFuX3QgICAgICAgICAgIGJlYWNvbjsgLyogIHBvcnQgYmVhY29uIHN0YXR1cyAqLwogCWJmYV9ib29sZWFuX3QgICAgICAgICAgIGxpbmtfZTJlX2JlYWNvbjsgLyogIGxpbmsgYmVhY29uIHN0YXR1cyAqLwpAQCAtODcsNSArODgsNyBAQAogLyoKICAqIHB1YmxpYyBmdW5jdGlvbnMKICAqLwotdm9pZAliZmFfZmNwb3J0X2lzcihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbXNnKTsKK3ZvaWQgYmZhX2ZjcG9ydF9pbml0KHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2ZjcG9ydF9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm1zZyk7CisKICNlbmRpZiAvKiBfX0JGQV9QT1JUX1BSSVZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9wcml2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9wcml2LmgKaW5kZXggYmU4MGZjNy4uYmY0OTM5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfcHJpdi5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3ByaXYuaApAQCAtMzcsNyArMzcsNiBAQAogCQkJdm9pZCAqYmZhZCwgc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCAJXAogCQkJc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8sCQkJXAogCQkJc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KTsgICAgICBcCi0Jc3RhdGljIHZvaWQgYmZhXyAjIyBfX21vZCAjIyBfaW5pdGRvbmUoc3RydWN0IGJmYV9zICpiZmEpOyAgICAgIFwKIAlzdGF0aWMgdm9pZCBiZmFfICMjIF9fbW9kICMjIF9kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpOyAgICAgIFwKIAlzdGF0aWMgdm9pZCBiZmFfICMjIF9fbW9kICMjIF9zdGFydChzdHJ1Y3QgYmZhX3MgKmJmYSk7ICAgICAgXAogCXN0YXRpYyB2b2lkIGJmYV8gIyMgX19tb2QgIyMgX3N0b3Aoc3RydWN0IGJmYV9zICpiZmEpOyAgICAgIFwKQEAgLTQ3LDcgKzQ2LDYgQEAKIAlzdHJ1Y3QgYmZhX21vZHVsZV9zIGhhbF9tb2RfICMjIF9fbW9kID0gewkJCVwKIAkJYmZhXyAjIyBfX21vZCAjIyBfbWVtaW5mbywJCQkJXAogCQliZmFfICMjIF9fbW9kICMjIF9hdHRhY2gsCQkJCVwKLQkJYmZhXyAjIyBfX21vZCAjIyBfaW5pdGRvbmUsCQkJCVwKIAkJYmZhXyAjIyBfX21vZCAjIyBfZGV0YWNoLAkJCQlcCiAJCWJmYV8gIyMgX19tb2QgIyMgX3N0YXJ0LAkJCQlcCiAJCWJmYV8gIyMgX19tb2QgIyMgX3N0b3AsCQkJCQlcCkBAIC02OSw3ICs2Nyw2IEBACiAJCQlzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCiAJCQlzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywKIAkJCXN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldik7Ci0Jdm9pZCAoKmluaXRkb25lKSAoc3RydWN0IGJmYV9zICpiZmEpOwogCXZvaWQgKCpkZXRhY2gpIChzdHJ1Y3QgYmZhX3MgKmJmYSk7CiAJdm9pZCAoKnN0YXJ0KSAoc3RydWN0IGJmYV9zICpiZmEpOwogCXZvaWQgKCpzdG9wKSAoc3RydWN0IGJmYV9zICpiZmEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfcnBvcnQuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3Jwb3J0LmMKaW5kZXggN2M1MDlmYS4uY2NkMDY4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfcnBvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9ycG9ydC5jCkBAIC02MzYsMTEgKzYzNiw2IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1iZmFfcnBvcnRfaW5pdGRvbmUoc3RydWN0IGJmYV9zICpiZmEpCi17Ci19Ci0KLXN0YXRpYyB2b2lkCiBiZmFfcnBvcnRfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKQogewogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfc2dwZy5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfc2dwZy5jCmluZGV4IDI3OWQ4ZjkuLmFlNDUyYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3NncGcuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zZ3BnLmMKQEAgLTk0LDExICs5NCw2IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1iZmFfc2dwZ19pbml0ZG9uZShzdHJ1Y3QgYmZhX3MgKmJmYSkKLXsKLX0KLQotc3RhdGljIHZvaWQKIGJmYV9zZ3BnX2RldGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSkKIHsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3VmLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV91Zi5jCmluZGV4IDRiM2MyNDEuLmI5YTlhNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3VmLmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfdWYuYwpAQCAtMTcwLDExICsxNzAsNiBAQAogfQogCiBzdGF0aWMgdm9pZAotYmZhX3VmX2luaXRkb25lKHN0cnVjdCBiZmFfcyAqYmZhKQotewotfQotCi1zdGF0aWMgdm9pZAogYmZhX3VmX2RldGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSkKIHsKIH0KQEAgLTI1Niw3ICsyNTEsMTAgQEAKIAkJCQkgICAgICAoc3RydWN0IGZjaHNfcyAqKSBidWYsIHBsZF93MCk7CiAJfQogCi0JYmZhX2NiX3F1ZXVlKGJmYSwgJnVmLT5oY2JfcWUsIF9fYmZhX2NiX3VmX3JlY3YsIHVmKTsKKwlpZiAoYmZhLT5mY3MpCisJCV9fYmZhX2NiX3VmX3JlY3YodWYsIEJGQV9UUlVFKTsKKwllbHNlCisJCWJmYV9jYl9xdWV1ZShiZmEsICZ1Zi0+aGNiX3FlLCBfX2JmYV9jYl91Zl9yZWN2LCB1Zik7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWQuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZC5jCmluZGV4IGQ0ZmM0MjguLjkxNWEyOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZC5jCkBAIC01NCwzMSArNTQsNjIgQEAKIHN0YXRpYyBpbnQgICAgICBsb2dfbGV2ZWwgPSBCRkFfTE9HX1dBUk5JTkc7CiBzdGF0aWMgaW50ICAgICAgaW9jX2F1dG9fcmVjb3ZlciA9IEJGQV9UUlVFOwogc3RhdGljIGludCAgICAgIGlwZmNfZW5hYmxlID0gQkZBX0ZBTFNFOwotc3RhdGljIGludCAgICAgIGlwZmNfbXR1ID0gLTE7CiBzdGF0aWMgaW50CWZkbWlfZW5hYmxlID0gQkZBX1RSVUU7CiBpbnQgCQliZmFfbHVuX3F1ZXVlX2RlcHRoID0gQkZBRF9MVU5fUVVFVUVfREVQVEg7CiBpbnQgICAgICAJYmZhX2xpbmt1cF9kZWxheSA9IC0xOworaW50CQliZmFfZGVidWdmc19lbmFibGUgPSAxOwogCiBtb2R1bGVfcGFyYW0ob3NfbmFtZSwgY2hhcnAsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0Mob3NfbmFtZSwgIk9TIG5hbWUgb2YgdGhlIGhiYSBob3N0IG1hY2hpbmUiKTsKIG1vZHVsZV9wYXJhbShvc19wYXRjaCwgY2hhcnAsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0Mob3NfcGF0Y2gsICJPUyBwYXRjaCBsZXZlbCBvZiB0aGUgaGJhIGhvc3QgbWFjaGluZSIpOwogbW9kdWxlX3BhcmFtKGhvc3RfbmFtZSwgY2hhcnAsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoaG9zdF9uYW1lLCAiSG9zdG5hbWUgb2YgdGhlIGhiYSBob3N0IG1hY2hpbmUiKTsKIG1vZHVsZV9wYXJhbShudW1fcnBvcnRzLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MobnVtX3Jwb3J0cywgIk1heCBudW1iZXIgb2YgcnBvcnRzIHN1cHBvcnRlZCBwZXIgcG9ydCIKKwkJIiAocGh5c2ljYWwvbG9naWNhbCksIGRlZmF1bHQ9MTAyNCIpOwogbW9kdWxlX3BhcmFtKG51bV9pb3MsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhudW1faW9zLCAiTWF4IG51bWJlciBvZiBpb2ltIHJlcXVlc3RzLCBkZWZhdWx0PTIwMDAiKTsKIG1vZHVsZV9wYXJhbShudW1fdG1zLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MobnVtX3RtcywgIk1heCBudW1iZXIgb2YgdGFzayBpbSByZXF1ZXN0cywgZGVmYXVsdD0xMjgiKTsKIG1vZHVsZV9wYXJhbShudW1fZmN4cHMsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhudW1fZmN4cHMsICJNYXggbnVtYmVyIG9mIGZjeHAgcmVxdWVzdHMsIGRlZmF1bHQ9NjQiKTsKIG1vZHVsZV9wYXJhbShudW1fdWZidWZzLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MobnVtX3VmYnVmcywgIk1heCBudW1iZXIgb2YgdW5zb2xpY2l0ZWQgZnJhbWUgYnVmZmVycywiCisJCSIgZGVmYXVsdD02NCIpOwogbW9kdWxlX3BhcmFtKHJlcXFfc2l6ZSwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKHJlcXFfc2l6ZSwgIk1heCBudW1iZXIgb2YgcmVxdWVzdCBxdWV1ZSBlbGVtZW50cywiCisJCSIgZGVmYXVsdD0yNTYiKTsKIG1vZHVsZV9wYXJhbShyc3BxX3NpemUsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhyc3BxX3NpemUsICJNYXggbnVtYmVyIG9mIHJlc3BvbnNlIHF1ZXVlIGVsZW1lbnRzLCIKKwkJIiBkZWZhdWx0PTY0Iik7CiBtb2R1bGVfcGFyYW0obnVtX3NncGdzLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MobnVtX3NncGdzLCAiTnVtYmVyIG9mIHNjYXR0ZXIvZ2F0aGVyIHBhZ2VzLCBkZWZhdWx0PTIwNDgiKTsKIG1vZHVsZV9wYXJhbShycG9ydF9kZWxfdGltZW91dCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKHJwb3J0X2RlbF90aW1lb3V0LCAiUnBvcnQgZGVsZXRlIHRpbWVvdXQsIGRlZmF1bHQ9OTAgc2VjcywiCisJCSIgUmFuZ2VbPjBdIik7CiBtb2R1bGVfcGFyYW0oYmZhX2x1bl9xdWV1ZV9kZXB0aCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGJmYV9sdW5fcXVldWVfZGVwdGgsICJMdW4gcXVldWUgZGVwdGgsIGRlZmF1bHQ9MzIsIgorCQkiIFJhbmdlWz4wXSIpOwogbW9kdWxlX3BhcmFtKGJmYV9pb19tYXhfc2dlLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoYmZhX2lvX21heF9zZ2UsICJNYXggaW8gc2NhdHRlci9nYXRoZXIgZWxlbWVudHMsIGRlZmF1bHQ9MjU1Iik7CiBtb2R1bGVfcGFyYW0obG9nX2xldmVsLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MobG9nX2xldmVsLCAiRHJpdmVyIGxvZyBsZXZlbCwgZGVmYXVsdD0zLCIKKwkJIiBSYW5nZVtDcml0aWNhbDoxfEVycm9yOjJ8V2FybmluZzozfEluZm86NF0iKTsKIG1vZHVsZV9wYXJhbShpb2NfYXV0b19yZWNvdmVyLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoaW9jX2F1dG9fcmVjb3ZlciwgIklPQyBhdXRvIHJlY292ZXJ5LCBkZWZhdWx0PTEsIgorCQkiIFJhbmdlW29mZjowfG9uOjFdIik7CiBtb2R1bGVfcGFyYW0oaXBmY19lbmFibGUsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwotbW9kdWxlX3BhcmFtKGlwZmNfbXR1LCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKLW1vZHVsZV9wYXJhbShmZG1pX2VuYWJsZSwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGlwZmNfZW5hYmxlLCAiRW5hYmxlIElQb0ZDLCBkZWZhdWx0PTAsIFJhbmdlW29mZjowfG9uOjFdIik7CiBtb2R1bGVfcGFyYW0oYmZhX2xpbmt1cF9kZWxheSwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGJmYV9saW5rdXBfZGVsYXksICJMaW5rIHVwIGRlbGF5LCBkZWZhdWx0PTMwIHNlY3MgZm9yIGJvb3QiCisJCSIgcG9ydC4gT3RoZXJ3aXNlIFJhbmdlWz4wXSIpOworbW9kdWxlX3BhcmFtKGZkbWlfZW5hYmxlLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZmRtaV9lbmFibGUsICJFbmFibGVzIGZkbWkgcmVnaXN0cmF0aW9uLCBkZWZhdWx0PTEsIgorCQkiIFJhbmdlW2ZhbHNlOjB8dHJ1ZToxXSIpOworbW9kdWxlX3BhcmFtKGJmYV9kZWJ1Z2ZzX2VuYWJsZSwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGJmYV9kZWJ1Z2ZzX2VuYWJsZSwgIkVuYWJsZXMgZGVidWdmcyBmZWF0dXJlLCBkZWZhdWx0PTEsIgorCQkiIFJhbmdlW2ZhbHNlOjB8dHJ1ZToxXSIpOwogCiAvKgogICogU3RvcmVzIHRoZSBtb2R1bGUgcGFybSBudW1fc2dwZ3MgdmFsdWU7CkBAIC0zMjIsNyArMzUzLDMxIEBACiAJcmV0dXJuIHJjOwogfQogCisvKioKKyAqIEBicmllZgorICogRkNTIFBCQyBWUE9SVCBDcmVhdGUKKyAqLwordm9pZAorYmZhX2ZjYl9wYmNfdnBvcnRfY3JlYXRlKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHN0cnVjdCBiZmlfcGJjX3Zwb3J0X3MgcGJjX3Zwb3J0KQorewogCisJc3RydWN0IGJmYWRfcGNmZ19zICpwY2ZnOworCisJcGNmZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBiZmFkX3BjZmdfcyksIEdGUF9BVE9NSUMpOworCWlmICghcGNmZykgeworCQliZmFfdHJjKGJmYWQsIDApOworCQlyZXR1cm47CisJfQorCisJcGNmZy0+cG9ydF9jZmcucm9sZXMgPSBCRkFfUE9SVF9ST0xFX0ZDUF9JTTsKKwlwY2ZnLT5wb3J0X2NmZy5wd3duID0gcGJjX3Zwb3J0LnZwX3B3d247CisJcGNmZy0+cG9ydF9jZmcubnd3biA9IHBiY192cG9ydC52cF9ud3duOworCXBjZmctPnBvcnRfY2ZnLnByZWJvb3RfdnAgID0gQkZBX1RSVUU7CisKKwlsaXN0X2FkZF90YWlsKCZwY2ZnLT5saXN0X2VudHJ5LCAmYmZhZC0+cGJjX3BjZmdfbGlzdCk7CisKKwlyZXR1cm47Cit9CiAKIHZvaWQKIGJmYWRfaGFsX21lbV9yZWxlYXNlKHN0cnVjdCBiZmFkX3MgKmJmYWQpCkBAIC00ODEsMTAgKzUzNiwxMCBAQAogICovCiBiZmFfc3RhdHVzX3QKIGJmYWRfdnBvcnRfY3JlYXRlKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHUxNiB2Zl9pZCwKLQkJICBzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBvcnRfY2ZnLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCisJCQlzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBvcnRfY2ZnLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGJmYWRfdnBvcnRfcyAqdnBvcnQ7Ci0JaW50ICAgICAgICAgICAgIHJjID0gQkZBX1NUQVRVU19PSzsKKwlpbnQgcmMgPSBCRkFfU1RBVFVTX09LOwogCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKIAlzdHJ1Y3QgY29tcGxldGlvbiBmY29tcDsKIApAQCAtNDk2LDggKzU1MSwxMiBAQAogCiAJdnBvcnQtPmRydl9wb3J0LmJmYWQgPSBiZmFkOwogCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKLQlyYyA9IGJmYV9mY3NfdnBvcnRfY3JlYXRlKCZ2cG9ydC0+ZmNzX3Zwb3J0LCAmYmZhZC0+YmZhX2ZjcywgdmZfaWQsCi0JCQkJICBwb3J0X2NmZywgdnBvcnQpOworCWlmIChwb3J0X2NmZy0+cHJlYm9vdF92cCA9PSBCRkFfVFJVRSkKKwkJcmMgPSBiZmFfZmNzX3BiY192cG9ydF9jcmVhdGUoJnZwb3J0LT5mY3NfdnBvcnQsCisJCQkJJmJmYWQtPmJmYV9mY3MsIHZmX2lkLCBwb3J0X2NmZywgdnBvcnQpOworCWVsc2UKKwkJcmMgPSBiZmFfZmNzX3Zwb3J0X2NyZWF0ZSgmdnBvcnQtPmZjc192cG9ydCwKKwkJCQkmYmZhZC0+YmZhX2ZjcywgdmZfaWQsIHBvcnRfY2ZnLCB2cG9ydCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CiAKIAlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykKQEAgLTg0OCw2ICs5MDcsMTAgQEAKIAkJYmZhZC0+cHBvcnQucm9sZXMgfD0gQkZBX1BPUlRfUk9MRV9GQ1BfSU07CiAJfQogCisJLyogU2V0dXAgdGhlIGRlYnVnZnMgbm9kZSBmb3IgdGhpcyBzY3NpX2hvc3QgKi8KKwlpZiAoYmZhX2RlYnVnZnNfZW5hYmxlKQorCQliZmFkX2RlYnVnZnNfaW5pdCgmYmZhZC0+cHBvcnQpOworCiAJYmZhZC0+YmZhZF9mbGFncyB8PSBCRkFEX0NGR19QUE9SVF9ET05FOwogCiBvdXQ6CkBAIC04NTcsNiArOTIwLDEwIEBACiB2b2lkCiBiZmFkX3VuY2ZnX3Bwb3J0KHN0cnVjdCBiZmFkX3MgKmJmYWQpCiB7CisJIC8qIFJlbW92ZSB0aGUgZGVidWdmcyBub2RlIGZvciB0aGlzIHNjc2lfaG9zdCAqLworCWtmcmVlKGJmYWQtPnJlZ2RhdGEpOworCWJmYWRfZGVidWdmc19leGl0KCZiZmFkLT5wcG9ydCk7CisKIAlpZiAoKGJmYWQtPnBwb3J0LnJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSVBGQykgJiYgaXBmY19lbmFibGUpIHsKIAkJYmZhZF9pcGZjX3BvcnRfZGVsZXRlKGJmYWQsICZiZmFkLT5wcG9ydCk7CiAJCWJmYWQtPnBwb3J0LnJvbGVzICY9IH5CRkFfUE9SVF9ST0xFX0ZDUF9JUEZDOwpAQCAtODg0LDYgKzk1MSw3IEBACiBiZmFkX3N0YXJ0X29wcyhzdHJ1Y3QgYmZhZF9zICpiZmFkKQogewogCWludCByZXR2YWw7CisJc3RydWN0IGJmYWRfcGNmZ19zICpwY2ZnLCAqcGNmZ19uZXc7CiAKIAkvKiBQUE9SVCBGQ1MgY29uZmlnICovCiAJYmZhZF9mY3NfcG9ydF9jZmcoYmZhZCk7CkBAIC05MDEsNiArOTY5LDI3IEBACiAKIAliZmFkX2Rydl9zdGFydChiZmFkKTsKIAorCS8qIHBiYyB2cG9ydCBjcmVhdGlvbiAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwY2ZnLCBwY2ZnX25ldywgICZiZmFkLT5wYmNfcGNmZ19saXN0LAorCQkJCQlsaXN0X2VudHJ5KSB7CisJCXN0cnVjdCBmY192cG9ydF9pZGVudGlmaWVycyB2aWQ7CisJCXN0cnVjdCBmY192cG9ydCAqZmNfdnBvcnQ7CisKKwkJbWVtc2V0KCZ2aWQsIDAsIHNpemVvZih2aWQpKTsKKwkJdmlkLnJvbGVzID0gRkNfUE9SVF9ST0xFX0ZDUF9JTklUSUFUT1I7CisJCXZpZC52cG9ydF90eXBlID0gRkNfUE9SVFRZUEVfTlBJVjsKKwkJdmlkLmRpc2FibGUgPSBmYWxzZTsKKwkJdmlkLm5vZGVfbmFtZSA9IHd3bl90b191NjQoKHU4ICopJnBjZmctPnBvcnRfY2ZnLm53d24pOworCQl2aWQucG9ydF9uYW1lID0gd3duX3RvX3U2NCgodTggKikmcGNmZy0+cG9ydF9jZmcucHd3bik7CisJCWZjX3Zwb3J0ID0gZmNfdnBvcnRfY3JlYXRlKGJmYWQtPnBwb3J0LmltX3BvcnQtPnNob3N0LCAwLCAmdmlkKTsKKwkJaWYgKCFmY192cG9ydCkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImJmYWQlZDogZmFpbGVkIHRvIGNyZWF0ZSBwYmMgdnBvcnQiCisJCQkJIiAlbGx4XG4iLCBiZmFkLT5pbnN0X25vLCB2aWQucG9ydF9uYW1lKTsKKwkJbGlzdF9kZWwoJnBjZmctPmxpc3RfZW50cnkpOworCQlrZnJlZShwY2ZnKTsKKworCX0KKwogCS8qCiAJICogSWYgYmZhX2xpbmt1cF9kZWxheSBpcyBzZXQgdG8gLTEgZGVmYXVsdDsgdHJ5IHRvIHJldHJpdmUgdGhlCiAJICogdmFsdWUgdXNpbmcgdGhlIGJmYWRfb3NfZ2V0X2xpbmt1cF9kZWxheSgpOyBlbHNlIHVzZSB0aGUKQEAgLTkyOCw3ICsxMDE3LDcgQEAKIH0KIAogaW50Ci1iZmFkX3dvcmtlciAodm9pZCAqcHRyKQorYmZhZF93b3JrZXIodm9pZCAqcHRyKQogewogCXN0cnVjdCBiZmFkX3MgKmJmYWQ7CiAJdW5zaWduZWQgbG9uZyAgIGZsYWdzOwpAQCAtMTAzMSw2ICsxMTIwLDcgQEAKIAogCWJmYWQtPnJlZl9jb3VudCA9IDA7CiAJYmZhZC0+cHBvcnQuYmZhZCA9IGJmYWQ7CisJSU5JVF9MSVNUX0hFQUQoJmJmYWQtPnBiY19wY2ZnX2xpc3QpOwogCiAJYmZhZC0+YmZhZF90c2sgPSBrdGhyZWFkX2NyZWF0ZShiZmFkX3dvcmtlciwgKHZvaWQgKikgYmZhZCwgIiVzIiwKIAkJCQkJImJmYWRfd29ya2VyIik7CkBAIC0xMTcyLDYgKzEyNjIsMTQgQEAKIAkgLmNsYXNzID0gKFBDSV9DTEFTU19TRVJJQUxfRklCRVIgPDwgOCksCiAJIC5jbGFzc19tYXNrID0gfjAsCiAJIH0sCisJeworCSAudmVuZG9yID0gQkZBX1BDSV9WRU5ET1JfSURfQlJPQ0FERSwKKwkgLmRldmljZSA9IEJGQV9QQ0lfREVWSUNFX0lEX0NUX0ZDLAorCSAuc3VidmVuZG9yID0gUENJX0FOWV9JRCwKKwkgLnN1YmRldmljZSA9IFBDSV9BTllfSUQsCisJIC5jbGFzcyA9IChQQ0lfQ0xBU1NfU0VSSUFMX0ZJQkVSIDw8IDgpLAorCSAuY2xhc3NfbWFzayA9IH4wLAorCX0sCiAKIAl7MCwgMH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9hdHRyLmMKaW5kZXggZTQ3N2JmYi4uMDgxOGViMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2F0dHIuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfYXR0ci5jCkBAIC0zNzMsNDcgKzM3Myw1MyBAQAogCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKIAlzdHJ1Y3QgYmZhZF9zICpiZmFkID0gaW1fcG9ydC0+YmZhZDsKIAlzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgcG9ydF9jZmc7CisJc3RydWN0IGJmYWRfcGNmZ19zICpwY2ZnOwogCWludCBzdGF0dXMgPSAwLCByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbWVtc2V0KCZwb3J0X2NmZywgMCwgc2l6ZW9mKHBvcnRfY2ZnKSk7Ci0KLQlwb3J0X2NmZy5wd3duID0gd3duX3RvX3U2NCgodTggKikgJmZjX3Zwb3J0LT5wb3J0X25hbWUpOwotCXBvcnRfY2ZnLm53d24gPSB3d25fdG9fdTY0KCh1OCAqKSAmZmNfdnBvcnQtPm5vZGVfbmFtZSk7Ci0KKwl1NjRfdG9fd3duKGZjX3Zwb3J0LT5ub2RlX25hbWUsICh1OCAqKSZwb3J0X2NmZy5ud3duKTsKKwl1NjRfdG9fd3duKGZjX3Zwb3J0LT5wb3J0X25hbWUsICh1OCAqKSZwb3J0X2NmZy5wd3duKTsKIAlpZiAoc3RybGVuKHZuYW1lKSA+IDApCiAJCXN0cmNweSgoY2hhciAqKSZwb3J0X2NmZy5zeW1fbmFtZSwgdm5hbWUpOwotCiAJcG9ydF9jZmcucm9sZXMgPSBCRkFfUE9SVF9ST0xFX0ZDUF9JTTsKLQlyYyA9IGJmYWRfdnBvcnRfY3JlYXRlKGJmYWQsIDAsICZwb3J0X2NmZywgJmZjX3Zwb3J0LT5kZXYpOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocGNmZywgJmJmYWQtPnBiY19wY2ZnX2xpc3QsIGxpc3RfZW50cnkpIHsKKwkJaWYgKHBvcnRfY2ZnLnB3d24gPT0gcGNmZy0+cG9ydF9jZmcucHd3bikgeworCQkJcG9ydF9jZmcucHJlYm9vdF92cCA9IHBjZmctPnBvcnRfY2ZnLnByZWJvb3RfdnA7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCXJjID0gYmZhZF92cG9ydF9jcmVhdGUoYmZhZCwgMCwgJnBvcnRfY2ZnLCAmZmNfdnBvcnQtPmRldik7CiAJaWYgKHJjID09IEJGQV9TVEFUVVNfT0spIHsKLQkJc3RydWN0IGJmYWRfdnBvcnRfcyAgICp2cG9ydDsKKwkJc3RydWN0IGJmYWRfdnBvcnRfcyAqdnBvcnQ7CiAJCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKmZjc192cG9ydDsKIAkJc3RydWN0IFNjc2lfSG9zdCAqdnNob3N0OwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKIAkJZmNzX3Zwb3J0ID0gYmZhX2Zjc192cG9ydF9sb29rdXAoJmJmYWQtPmJmYV9mY3MsIDAsCiAJCQkJCXBvcnRfY2ZnLnB3d24pOwotCQlpZiAoZmNzX3Zwb3J0ID09IE5VTEwpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwkJaWYgKGZjc192cG9ydCA9PSBOVUxMKQogCQkJcmV0dXJuIFZQQ0VSUl9CQURfV1dOOwotCQl9CiAKIAkJZmNfdnBvcnRfc2V0X3N0YXRlKGZjX3Zwb3J0LCBGQ19WUE9SVF9BQ1RJVkUpOwogCQlpZiAoZGlzYWJsZSkgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOwogCQkJYmZhX2Zjc192cG9ydF9zdG9wKGZjc192cG9ydCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKIAkJCWZjX3Zwb3J0X3NldF9zdGF0ZShmY192cG9ydCwgRkNfVlBPUlRfRElTQUJMRUQpOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOwogCiAJCXZwb3J0ID0gZmNzX3Zwb3J0LT52cG9ydF9kcnY7CiAJCXZzaG9zdCA9IHZwb3J0LT5kcnZfcG9ydC5pbV9wb3J0LT5zaG9zdDsKLQkJZmNfaG9zdF9ub2RlX25hbWUodnNob3N0KSA9IHd3bl90b191NjQoKHU4ICopICZwb3J0X2NmZy5ud3duKTsKLQkJZmNfaG9zdF9wb3J0X25hbWUodnNob3N0KSA9IHd3bl90b191NjQoKHU4ICopICZwb3J0X2NmZy5wd3duKTsKKwkJZmNfaG9zdF9ub2RlX25hbWUodnNob3N0KSA9IHd3bl90b191NjQoKHU4ICopJnBvcnRfY2ZnLm53d24pOworCQlmY19ob3N0X3BvcnRfbmFtZSh2c2hvc3QpID0gd3duX3RvX3U2NCgodTggKikmcG9ydF9jZmcucHd3bik7CiAJCWZjX3Zwb3J0LT5kZF9kYXRhID0gdnBvcnQ7CiAJCXZwb3J0LT5kcnZfcG9ydC5pbV9wb3J0LT5mY192cG9ydCA9IGZjX3Zwb3J0OwotCiAJfSBlbHNlIGlmIChyYyA9PSBCRkFfU1RBVFVTX0lOVkFMSURfV1dOKQogCQlyZXR1cm4gVlBDRVJSX0JBRF9XV047CiAJZWxzZSBpZiAocmMgPT0gQkZBX1NUQVRVU19WUE9SVF9FWElTVFMpCkBAIC00MjIsNyArNDI4LDcgQEAKIAkJcmV0dXJuIFZQQ0VSUl9OT19GQUJSSUNfU1VQUDsKIAllbHNlIGlmIChyYyA9PSBCRkFfU1RBVFVTX1ZQT1JUX1dXTl9CUCkKIAkJcmV0dXJuIFZQQ0VSUl9CQURfV1dOOwotCSBlbHNlCisJZWxzZQogCQlyZXR1cm4gRkNfVlBPUlRfRkFJTEVEOwogCiAJcmV0dXJuIHN0YXR1czsKQEAgLTQ0OSw3ICs0NTUsNyBAQAogCXBvcnQgPSBpbV9wb3J0LT5wb3J0OwogCiAJdnNob3N0ID0gdnBvcnQtPmRydl9wb3J0LmltX3BvcnQtPnNob3N0OwotCXB3d24gPSB3d25fdG9fdTY0KCh1OCAqKSAmZmNfaG9zdF9wb3J0X25hbWUodnNob3N0KSk7CisJdTY0X3RvX3d3bihmY19ob3N0X3BvcnRfbmFtZSh2c2hvc3QpLCAodTggKikmcHd3bik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CiAJZmNzX3Zwb3J0ID0gYmZhX2Zjc192cG9ydF9sb29rdXAoJmJmYWQtPmJmYV9mY3MsIDAsIHB3d24pOwpAQCAtNDY3LDYgKzQ3MywxMiBAQAogCXJjID0gYmZhX2Zjc192cG9ydF9kZWxldGUoJnZwb3J0LT5mY3NfdnBvcnQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOwogCisJaWYgKHJjID09IEJGQV9TVEFUVVNfUEJDKSB7CisJCXZwb3J0LT5kcnZfcG9ydC5mbGFncyAmPSB+QkZBRF9QT1JUX0RFTEVURTsKKwkJdnBvcnQtPmNvbXBfZGVsID0gTlVMTDsKKwkJcmV0dXJuIC0xOworCX0KKwogCXdhaXRfZm9yX2NvbXBsZXRpb24odnBvcnQtPmNvbXBfZGVsKTsKIAogZnJlZV9zY3NpX2hvc3Q6CkBAIC00OTAsNyArNTAyLDcgQEAKIAl2cG9ydCA9IChzdHJ1Y3QgYmZhZF92cG9ydF9zICopZmNfdnBvcnQtPmRkX2RhdGE7CiAJYmZhZCA9IHZwb3J0LT5kcnZfcG9ydC5iZmFkOwogCXZzaG9zdCA9IHZwb3J0LT5kcnZfcG9ydC5pbV9wb3J0LT5zaG9zdDsKLQlwd3duID0gd3duX3RvX3U2NCgodTggKikgJmZjX3Zwb3J0LT5wb3J0X25hbWUpOworCXU2NF90b193d24oZmNfaG9zdF9wb3J0X25hbWUodnNob3N0KSwgKHU4ICopJnB3d24pOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOwogCWZjc192cG9ydCA9IGJmYV9mY3NfdnBvcnRfbG9va3VwKCZiZmFkLT5iZmFfZmNzLCAwLCBwd3duKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZGVidWdmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiODJmMTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZGVidWdmcy5jCkBAIC0wLDAgKzEsNTQ3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMTAgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisKKyNpbmNsdWRlIDxiZmFkX2Rydi5oPgorI2luY2x1ZGUgPGJmYWRfaW0uaD4KKworLyoKKyAqIEJGQSBkZWJ1ZnMgaW50ZXJmYWNlCisgKgorICogVG8gYWNjZXNzIHRoZSBpbnRlcmZhY2UsIGRlYnVnZnMgZmlsZSBzeXN0ZW0gc2hvdWxkIGJlIG1vdW50ZWQKKyAqIGlmIG5vdCBhbHJlYWR5IG1vdW50ZWQgdXNpbmc6CisgKiBtb3VudCAtdCBkZWJ1Z2ZzIG5vbmUgL3N5cy9rZXJuZWwvZGVidWcKKyAqCisgKiBCRkEgSGllcmFyY2h5OgorICogCS0gYmZhL2hvc3QjCisgKiB3aGVyZSB0aGUgaG9zdCBudW1iZXIgY29ycmVzcG9uZHMgdG8gdGhlIG9uZSB1bmRlciAvc3lzL2NsYXNzL3Njc2lfaG9zdC9ob3N0IworICoKKyAqIERlYnVnZ2luZyBzZXJ2aWNlIGF2YWlsYWJsZSBwZXIgaG9zdDoKKyAqIGZ3dHJjOiAgVG8gY29sbGVjdCBjdXJyZW50IGZpcm13YXJlIHRyYWNlLgorICogZHJ2dHJjOiBUbyBjb2xsZWN0IGN1cnJlbnQgZHJpdmVyIHRyYWNlCisgKiBmd3NhdmU6IFRvIGNvbGxlY3QgbGFzdCBzYXZlZCBmdyB0cmFjZSBhcyBhIHJlc3VsdCBvZiBmaXJtd2FyZSBjcmFzaC4KKyAqIHJlZ3dyOiAgVG8gd3JpdGUgb25lIHdvcmQgdG8gY2hpcCByZWdpc3RlcgorICogcmVncmQ6ICBUbyByZWFkIG9uZSBvciBtb3JlIHdvcmRzIGZyb20gY2hpcCByZWdpc3Rlci4KKyAqLworCitzdHJ1Y3QgYmZhZF9kZWJ1Z19pbmZvIHsKKwljaGFyICpkZWJ1Z19idWZmZXI7CisJdm9pZCAqaV9wcml2YXRlOworCWludCBidWZmZXJfbGVuOworfTsKKworc3RhdGljIGludAorYmZhZF9kZWJ1Z2ZzX29wZW5fZHJ2dHJjKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBiZmFkX3BvcnRfcyAqcG9ydCA9IGlub2RlLT5pX3ByaXZhdGU7CisJc3RydWN0IGJmYWRfcyAqYmZhZCA9IHBvcnQtPmJmYWQ7CisJc3RydWN0IGJmYWRfZGVidWdfaW5mbyAqZGVidWc7CisKKwlkZWJ1ZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBiZmFkX2RlYnVnX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRlYnVnKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRlYnVnLT5kZWJ1Z19idWZmZXIgPSAodm9pZCAqKSBiZmFkLT50cmNtb2Q7CisJZGVidWctPmJ1ZmZlcl9sZW4gPSBzaXplb2Yoc3RydWN0IGJmYV90cmNfbW9kX3MpOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGVidWc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYmZhZF9kZWJ1Z2ZzX29wZW5fZnd0cmMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0ID0gaW5vZGUtPmlfcHJpdmF0ZTsKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkID0gcG9ydC0+YmZhZDsKKwlzdHJ1Y3QgYmZhZF9kZWJ1Z19pbmZvICpmd19kZWJ1ZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByYzsKKworCWZ3X2RlYnVnID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJmYWRfZGVidWdfaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghZndfZGVidWcpCisJCXJldHVybiAtRU5PTUVNOworCisJZndfZGVidWctPmJ1ZmZlcl9sZW4gPSBzaXplb2Yoc3RydWN0IGJmYV90cmNfbW9kX3MpOworCisJZndfZGVidWctPmRlYnVnX2J1ZmZlciA9IHZtYWxsb2MoZndfZGVidWctPmJ1ZmZlcl9sZW4pOworCWlmICghZndfZGVidWctPmRlYnVnX2J1ZmZlcikgeworCQlrZnJlZShmd19kZWJ1Zyk7CisJCXByaW50ayhLRVJOX0lORk8gImJmYWRbJWRdOiBGYWlsZWQgdG8gYWxsb2NhdGUgZnd0cmMgYnVmZmVyXG4iLAorCQkJCWJmYWQtPmluc3Rfbm8pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1zZXQoZndfZGVidWctPmRlYnVnX2J1ZmZlciwgMCwgZndfZGVidWctPmJ1ZmZlcl9sZW4pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCXJjID0gYmZhX2RlYnVnX2Z3dHJjKCZiZmFkLT5iZmEsCisJCQlmd19kZWJ1Zy0+ZGVidWdfYnVmZmVyLAorCQkJJmZ3X2RlYnVnLT5idWZmZXJfbGVuKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykgeworCQl2ZnJlZShmd19kZWJ1Zy0+ZGVidWdfYnVmZmVyKTsKKwkJZndfZGVidWctPmRlYnVnX2J1ZmZlciA9IE5VTEw7CisJCWtmcmVlKGZ3X2RlYnVnKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiYmZhZFslZF06IEZhaWxlZCB0byBjb2xsZWN0IGZ3dHJjXG4iLAorCQkJCWJmYWQtPmluc3Rfbm8pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBmd19kZWJ1ZzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitiZmFkX2RlYnVnZnNfb3Blbl9md3NhdmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0ID0gaW5vZGUtPmlfcHJpdmF0ZTsKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkID0gcG9ydC0+YmZhZDsKKwlzdHJ1Y3QgYmZhZF9kZWJ1Z19pbmZvICpmd19kZWJ1ZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByYzsKKworCWZ3X2RlYnVnID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJmYWRfZGVidWdfaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghZndfZGVidWcpCisJCXJldHVybiAtRU5PTUVNOworCisJZndfZGVidWctPmJ1ZmZlcl9sZW4gPSBzaXplb2Yoc3RydWN0IGJmYV90cmNfbW9kX3MpOworCisJZndfZGVidWctPmRlYnVnX2J1ZmZlciA9IHZtYWxsb2MoZndfZGVidWctPmJ1ZmZlcl9sZW4pOworCWlmICghZndfZGVidWctPmRlYnVnX2J1ZmZlcikgeworCQlrZnJlZShmd19kZWJ1Zyk7CisJCXByaW50ayhLRVJOX0lORk8gImJmYWRbJWRdOiBGYWlsZWQgdG8gYWxsb2NhdGUgZndzYXZlIGJ1ZmZlclxuIiwKKwkJCQliZmFkLT5pbnN0X25vKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtc2V0KGZ3X2RlYnVnLT5kZWJ1Z19idWZmZXIsIDAsIGZ3X2RlYnVnLT5idWZmZXJfbGVuKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlyYyA9IGJmYV9kZWJ1Z19md3NhdmUoJmJmYWQtPmJmYSwKKwkJCWZ3X2RlYnVnLT5kZWJ1Z19idWZmZXIsCisJCQkmZndfZGVidWctPmJ1ZmZlcl9sZW4pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWlmIChyYyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCXZmcmVlKGZ3X2RlYnVnLT5kZWJ1Z19idWZmZXIpOworCQlmd19kZWJ1Zy0+ZGVidWdfYnVmZmVyID0gTlVMTDsKKwkJa2ZyZWUoZndfZGVidWcpOworCQlwcmludGsoS0VSTl9JTkZPICJiZmFkWyVkXTogRmFpbGVkIHRvIGNvbGxlY3QgZndzYXZlXG4iLAorCQkJCWJmYWQtPmluc3Rfbm8pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBmd19kZWJ1ZzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitiZmFkX2RlYnVnZnNfb3Blbl9yZWcoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGJmYWRfZGVidWdfaW5mbyAqcmVnX2RlYnVnOworCisJcmVnX2RlYnVnID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJmYWRfZGVidWdfaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghcmVnX2RlYnVnKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlZ19kZWJ1Zy0+aV9wcml2YXRlID0gaW5vZGUtPmlfcHJpdmF0ZTsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IHJlZ19kZWJ1ZzsKKworCXJldHVybiAwOworfQorCisvKiBDaGFuZ2VzIHRoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24gKi8KK3N0YXRpYyBsb2ZmX3QKK2JmYWRfZGVidWdmc19sc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWcpCit7CisJc3RydWN0IGJmYWRfZGVidWdfaW5mbyAqZGVidWc7CisJbG9mZl90IHBvcyA9IGZpbGUtPmZfcG9zOworCisJZGVidWcgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKG9yaWcpIHsKKwljYXNlIDA6CisJCWZpbGUtPmZfcG9zID0gb2Zmc2V0OworCQlicmVhazsKKwljYXNlIDE6CisJCWZpbGUtPmZfcG9zICs9IG9mZnNldDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlmaWxlLT5mX3BvcyA9IGRlYnVnLT5idWZmZXJfbGVuIC0gb2Zmc2V0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZmlsZS0+Zl9wb3MgPCAwIHx8IGZpbGUtPmZfcG9zID4gZGVidWctPmJ1ZmZlcl9sZW4pIHsKKwkJZmlsZS0+Zl9wb3MgPSBwb3M7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBmaWxlLT5mX3BvczsKK30KKworc3RhdGljIHNzaXplX3QKK2JmYWRfZGVidWdmc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGJmYWRfZGVidWdfaW5mbyAqZGVidWcgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoIWRlYnVnIHx8ICFkZWJ1Zy0+ZGVidWdfYnVmZmVyKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBtZW1vcnlfcmVhZF9mcm9tX2J1ZmZlcihidWYsIG5ieXRlcywgcG9zLAorCQkJCWRlYnVnLT5kZWJ1Z19idWZmZXIsIGRlYnVnLT5idWZmZXJfbGVuKTsKK30KKworI2RlZmluZSBCRkFfUkVHX0NUX0FERFJTWgkoMHg0MDAwMCkKKyNkZWZpbmUgQkZBX1JFR19DQl9BRERSU1oJKDB4MjAwMDApCisjZGVmaW5lIEJGQV9SRUdfQUREUlNaKF9fYmZhKQlcCisJKChiZmFfaW9jX2RldmlkKCYoX19iZmEpLT5pb2MpID09IEJGQV9QQ0lfREVWSUNFX0lEX0NUKSA/CVwKKwkJQkZBX1JFR19DVF9BRERSU1ogOiBCRkFfUkVHX0NCX0FERFJTWikKKyNkZWZpbmUgQkZBX1JFR19BRERSTVNLKF9fYmZhKSAgKCh1aW50MzJfdCkoQkZBX1JFR19BRERSU1ooX19iZmEpIC0gMSkpCisKK3N0YXRpYyBiZmFfc3RhdHVzX3QKK2JmYWRfcmVnX29mZnNldF9jaGVjayhzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyIG9mZnNldCwgdTMyIGxlbikKK3sKKwl1OAlhcmVhOworCisJLyogY2hlY2sgWzE2OjE1XSAqLworCWFyZWEgPSAob2Zmc2V0ID4+IDE1KSAmIDB4NzsKKwlpZiAoYXJlYSA9PSAwKSB7CisJCS8qIFBDSWUgY29yZSByZWdpc3RlciAqLworCQlpZiAoKG9mZnNldCArIChsZW48PDIpKSA+IDB4ODAwMCkgICAgLyogOGsgZHdvcmRzIG9yIDMyS0IgKi8KKwkJCXJldHVybiBCRkFfU1RBVFVTX0VJTlZBTDsKKwl9IGVsc2UgaWYgKGFyZWEgPT0gMHgxKSB7CisJCS8qIENCIDMyIEtCIG1lbW9yeSBwYWdlICovCisJCWlmICgob2Zmc2V0ICsgKGxlbjw8MikpID4gMHgxMDAwMCkgICAgLyogOGsgZHdvcmRzIG9yIDMyS0IgKi8KKwkJCXJldHVybiBCRkFfU1RBVFVTX0VJTlZBTDsKKwl9IGVsc2UgeworCQkvKiBDQiByZWdpc3RlciBzcGFjZSA2NEtCICovCisJCWlmICgob2Zmc2V0ICsgKGxlbjw8MikpID4gQkZBX1JFR19BRERSTVNLKGJmYSkpCisJCQlyZXR1cm4gQkZBX1NUQVRVU19FSU5WQUw7CisJfQorCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCitzdGF0aWMgc3NpemVfdAorYmZhZF9kZWJ1Z2ZzX3JlYWRfcmVncmQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCXNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBiZmFkX2RlYnVnX2luZm8gKnJlZ3JkX2RlYnVnID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBiZmFkX3BvcnRfcyAqcG9ydCA9IChzdHJ1Y3QgYmZhZF9wb3J0X3MgKilyZWdyZF9kZWJ1Zy0+aV9wcml2YXRlOworCXN0cnVjdCBiZmFkX3MgKmJmYWQgPSBwb3J0LT5iZmFkOworCXNzaXplX3QgcmM7CisKKwlpZiAoIWJmYWQtPnJlZ2RhdGEpCisJCXJldHVybiAwOworCisJcmMgPSBtZW1vcnlfcmVhZF9mcm9tX2J1ZmZlcihidWYsIG5ieXRlcywgcG9zLAorCQkJYmZhZC0+cmVnZGF0YSwgYmZhZC0+cmVnbGVuKTsKKworCWlmICgoKnBvcyArIG5ieXRlcykgPj0gYmZhZC0+cmVnbGVuKSB7CisJCWtmcmVlKGJmYWQtPnJlZ2RhdGEpOworCQliZmFkLT5yZWdkYXRhID0gTlVMTDsKKwkJYmZhZC0+cmVnbGVuID0gMDsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitiZmFkX2RlYnVnZnNfd3JpdGVfcmVncmQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCXNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYmZhZF9kZWJ1Z19pbmZvICpyZWdyZF9kZWJ1ZyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgKnBvcnQgPSAoc3RydWN0IGJmYWRfcG9ydF9zICopcmVncmRfZGVidWctPmlfcHJpdmF0ZTsKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkID0gcG9ydC0+YmZhZDsKKwlzdHJ1Y3QgYmZhX3MgKmJmYSA9ICZiZmFkLT5iZmE7CisJc3RydWN0IGJmYV9pb2NfcyAqaW9jID0gJmJmYS0+aW9jOworCWludCBhZGRyLCBsZW4sIHJjLCBpOworCXUzMiAqcmVnYnVmOworCXZvaWQgX19pb21lbSAqcmIsICpyZWdfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmMgPSBzc2NhbmYoYnVmLCAiJXg6JXgiLCAmYWRkciwgJmxlbik7CisJaWYgKHJjIDwgMikgeworCQlwcmludGsoS0VSTl9JTkZPCisJCQkiYmZhZFslZF06ICVzIGZhaWxlZCB0byByZWFkIHVzZXIgYnVmXG4iLAorCQkJYmZhZC0+aW5zdF9ubywgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlrZnJlZShiZmFkLT5yZWdkYXRhKTsKKwliZmFkLT5yZWdkYXRhID0gTlVMTDsKKwliZmFkLT5yZWdsZW4gPSAwOworCisJYmZhZC0+cmVnZGF0YSA9IGt6YWxsb2MobGVuIDw8IDIsIEdGUF9LRVJORUwpOworCWlmICghYmZhZC0+cmVnZGF0YSkgeworCQlwcmludGsoS0VSTl9JTkZPICJiZmFkWyVkXTogRmFpbGVkIHRvIGFsbG9jYXRlIHJlZ3JkIGJ1ZmZlclxuIiwKKwkJCQliZmFkLT5pbnN0X25vKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYmZhZC0+cmVnbGVuID0gbGVuIDw8IDI7CisJcmIgPSBiZmFfaW9jX2JhcjAoaW9jKTsKKwlhZGRyICY9IEJGQV9SRUdfQUREUk1TSyhiZmEpOworCisJLyogb2Zmc2V0IGFuZCBsZW4gc2FuaXR5IGNoZWNrICovCisJcmMgPSBiZmFkX3JlZ19vZmZzZXRfY2hlY2soYmZhLCBhZGRyLCBsZW4pOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9JTkZPICJiZmFkWyVkXTogRmFpbGVkIHJlZyBvZmZzZXQgY2hlY2tcbiIsCisJCQkJYmZhZC0+aW5zdF9ubyk7CisJCWtmcmVlKGJmYWQtPnJlZ2RhdGEpOworCQliZmFkLT5yZWdkYXRhID0gTlVMTDsKKwkJYmZhZC0+cmVnbGVuID0gMDsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVnX2FkZHIgPSByYiArIGFkZHI7CisJcmVnYnVmID0gICh1MzIgKiliZmFkLT5yZWdkYXRhOworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJKnJlZ2J1ZiA9IGJmYV9yZWdfcmVhZChyZWdfYWRkcik7CisJCXJlZ2J1ZisrOworCQlyZWdfYWRkciArPSBzaXplb2YodTMyKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gbmJ5dGVzOworfQorCitzdGF0aWMgc3NpemVfdAorYmZhZF9kZWJ1Z2ZzX3dyaXRlX3JlZ3dyKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQlzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGJmYWRfZGVidWdfaW5mbyAqZGVidWcgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0ID0gKHN0cnVjdCBiZmFkX3BvcnRfcyAqKWRlYnVnLT5pX3ByaXZhdGU7CisJc3RydWN0IGJmYWRfcyAqYmZhZCA9IHBvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9zICpiZmEgPSAmYmZhZC0+YmZhOworCXN0cnVjdCBiZmFfaW9jX3MgKmlvYyA9ICZiZmEtPmlvYzsKKwlpbnQgYWRkciwgdmFsLCByYzsKKwl2b2lkIF9faW9tZW0gKnJlZ19hZGRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyYyA9IHNzY2FuZihidWYsICIleDoleCIsICZhZGRyLCAmdmFsKTsKKwlpZiAocmMgPCAyKSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJCSJiZmFkWyVkXTogJXMgZmFpbGVkIHRvIHJlYWQgdXNlciBidWZcbiIsCisJCQliZmFkLT5pbnN0X25vLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWFkZHIgJj0gQkZBX1JFR19BRERSTVNLKGJmYSk7IC8qIG9mZnNldCBvbmx5IDE3IGJpdCBhbmQgd29yZCBhbGlnbiAqLworCisJLyogb2Zmc2V0IGFuZCBsZW4gc2FuaXR5IGNoZWNrICovCisJcmMgPSBiZmFkX3JlZ19vZmZzZXRfY2hlY2soYmZhLCBhZGRyLCAxKTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkJImJmYWRbJWRdOiBGYWlsZWQgcmVnIG9mZnNldCBjaGVja1xuIiwKKwkJCWJmYWQtPmluc3Rfbm8pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZWdfYWRkciA9ICh1aW50MzJfdCAqKSAoKHVpbnQ4X3QgKikgYmZhX2lvY19iYXIwKGlvYykgKyBhZGRyKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJYmZhX3JlZ193cml0ZShyZWdfYWRkciwgdmFsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBuYnl0ZXM7Cit9CisKK3N0YXRpYyBpbnQKK2JmYWRfZGVidWdmc19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBiZmFkX2RlYnVnX2luZm8gKmRlYnVnID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKCFkZWJ1ZykKKwkJcmV0dXJuIDA7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCWtmcmVlKGRlYnVnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYmZhZF9kZWJ1Z2ZzX3JlbGVhc2VfZnd0cmMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGJmYWRfZGVidWdfaW5mbyAqZndfZGVidWcgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoIWZ3X2RlYnVnKQorCQlyZXR1cm4gMDsKKworCWlmIChmd19kZWJ1Zy0+ZGVidWdfYnVmZmVyKQorCQl2ZnJlZShmd19kZWJ1Zy0+ZGVidWdfYnVmZmVyKTsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJa2ZyZWUoZndfZGVidWcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZmFkX2RlYnVnZnNfb3BfZHJ2dHJjID0geworCS5vd25lcgkJPQlUSElTX01PRFVMRSwKKwkub3BlbgkJPQliZmFkX2RlYnVnZnNfb3Blbl9kcnZ0cmMsCisJLmxsc2VlawkJPQliZmFkX2RlYnVnZnNfbHNlZWssCisJLnJlYWQJCT0JYmZhZF9kZWJ1Z2ZzX3JlYWQsCisJLnJlbGVhc2UJPQliZmFkX2RlYnVnZnNfcmVsZWFzZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJmYWRfZGVidWdmc19vcF9md3RyYyA9IHsKKwkub3duZXIJCT0JVEhJU19NT0RVTEUsCisJLm9wZW4JCT0JYmZhZF9kZWJ1Z2ZzX29wZW5fZnd0cmMsCisJLmxsc2VlawkJPQliZmFkX2RlYnVnZnNfbHNlZWssCisJLnJlYWQJCT0JYmZhZF9kZWJ1Z2ZzX3JlYWQsCisJLnJlbGVhc2UJPQliZmFkX2RlYnVnZnNfcmVsZWFzZV9md3RyYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJmYWRfZGVidWdmc19vcF9md3NhdmUgPSB7CisJLm93bmVyCQk9CVRISVNfTU9EVUxFLAorCS5vcGVuCQk9CWJmYWRfZGVidWdmc19vcGVuX2Z3c2F2ZSwKKwkubGxzZWVrCQk9CWJmYWRfZGVidWdmc19sc2VlaywKKwkucmVhZAkJPQliZmFkX2RlYnVnZnNfcmVhZCwKKwkucmVsZWFzZQk9CWJmYWRfZGVidWdmc19yZWxlYXNlX2Z3dHJjLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZhZF9kZWJ1Z2ZzX29wX3JlZ3JkID0geworCS5vd25lcgkJPQlUSElTX01PRFVMRSwKKwkub3BlbgkJPQliZmFkX2RlYnVnZnNfb3Blbl9yZWcsCisJLmxsc2VlawkJPQliZmFkX2RlYnVnZnNfbHNlZWssCisJLnJlYWQJCT0JYmZhZF9kZWJ1Z2ZzX3JlYWRfcmVncmQsCisJLndyaXRlCQk9CWJmYWRfZGVidWdmc193cml0ZV9yZWdyZCwKKwkucmVsZWFzZQk9CWJmYWRfZGVidWdmc19yZWxlYXNlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZhZF9kZWJ1Z2ZzX29wX3JlZ3dyID0geworCS5vd25lcgkJPQlUSElTX01PRFVMRSwKKwkub3BlbgkJPQliZmFkX2RlYnVnZnNfb3Blbl9yZWcsCisJLmxsc2VlawkJPQliZmFkX2RlYnVnZnNfbHNlZWssCisJLndyaXRlCQk9CWJmYWRfZGVidWdmc193cml0ZV9yZWd3ciwKKwkucmVsZWFzZQk9CWJmYWRfZGVidWdmc19yZWxlYXNlLAorfTsKKworc3RydWN0IGJmYWRfZGVidWdmc19lbnRyeSB7CisJY29uc3QgY2hhciAqbmFtZTsKKwltb2RlX3QJbW9kZTsKKwljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBiZmFkX2RlYnVnZnNfZW50cnkgYmZhZF9kZWJ1Z2ZzX2ZpbGVzW10gPSB7CisJeyAiZHJ2dHJjIiwgU19JRlJFR3xTX0lSVUdPLCAmYmZhZF9kZWJ1Z2ZzX29wX2RydnRyYywgfSwKKwl7ICJmd3RyYyIsICBTX0lGUkVHfFNfSVJVR08sICZiZmFkX2RlYnVnZnNfb3BfZnd0cmMsICB9LAorCXsgImZ3c2F2ZSIsIFNfSUZSRUd8U19JUlVHTywgJmJmYWRfZGVidWdmc19vcF9md3NhdmUsIH0sCisJeyAicmVncmQiLCAgU19JRlJFR3xTX0lSVUdPfFNfSVdVU1IsICZiZmFkX2RlYnVnZnNfb3BfcmVncmQsICB9LAorCXsgInJlZ3dyIiwgIFNfSUZSRUd8U19JV1VTUiwgJmJmYWRfZGVidWdmc19vcF9yZWd3ciwgIH0sCit9OworCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqYmZhX2RlYnVnZnNfcm9vdDsKK3N0YXRpYyBhdG9taWNfdCBiZmFfZGVidWdmc19wb3J0X2NvdW50OworCitpbmxpbmUgdm9pZAorYmZhZF9kZWJ1Z2ZzX2luaXQoc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9IHBvcnQtPmltX3BvcnQ7CisJc3RydWN0IGJmYWRfcyAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBpbV9wb3J0LT5zaG9zdDsKKwljb25zdCBzdHJ1Y3QgYmZhZF9kZWJ1Z2ZzX2VudHJ5ICpmaWxlOworCWNoYXIgbmFtZVsxNl07CisJaW50IGk7CisKKwlpZiAoIWJmYV9kZWJ1Z2ZzX2VuYWJsZSkKKwkJcmV0dXJuOworCisJLyogU2V0dXAgdGhlIEJGQSBkZWJ1Z2ZzIHJvb3QgZGlyZWN0b3J5Ki8KKwlpZiAoIWJmYV9kZWJ1Z2ZzX3Jvb3QpIHsKKwkJYmZhX2RlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcigiYmZhIiwgTlVMTCk7CisJCWF0b21pY19zZXQoJmJmYV9kZWJ1Z2ZzX3BvcnRfY291bnQsIDApOworCQlpZiAoIWJmYV9kZWJ1Z2ZzX3Jvb3QpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkiQkZBIGRlYnVnZnMgcm9vdCBkaXIgY3JlYXRpb24gZmFpbGVkXG4iKTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJLyoKKwkgKiBTZXR1cCB0aGUgaG9zdCMgZGlyZWN0b3J5IGZvciB0aGUgcG9ydCwKKwkgKiBjb3JyZXNwb25kcyB0byB0aGUgc2NzaV9ob3N0IG51bSBvZiB0aGlzIHBvcnQuCisJICovCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiaG9zdCVkIiwgc2hvc3QtPmhvc3Rfbm8pOworCWlmICghcG9ydC0+cG9ydF9kZWJ1Z2ZzX3Jvb3QpIHsKKwkJcG9ydC0+cG9ydF9kZWJ1Z2ZzX3Jvb3QgPQorCQkJZGVidWdmc19jcmVhdGVfZGlyKG5hbWUsIGJmYV9kZWJ1Z2ZzX3Jvb3QpOworCQlpZiAoIXBvcnQtPnBvcnRfZGVidWdmc19yb290KSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJIkJGQSBob3N0IHJvb3QgZGlyIGNyZWF0aW9uIGZhaWxlZFxuIik7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCWF0b21pY19pbmMoJmJmYV9kZWJ1Z2ZzX3BvcnRfY291bnQpOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJmYWRfZGVidWdmc19maWxlcyk7IGkrKykgeworCQkJZmlsZSA9ICZiZmFkX2RlYnVnZnNfZmlsZXNbaV07CisJCQliZmFkLT5iZmFkX2RlbnRyeV9maWxlc1tpXSA9CisJCQkJCWRlYnVnZnNfY3JlYXRlX2ZpbGUoZmlsZS0+bmFtZSwKKwkJCQkJCQlmaWxlLT5tb2RlLAorCQkJCQkJCXBvcnQtPnBvcnRfZGVidWdmc19yb290LAorCQkJCQkJCXBvcnQsCisJCQkJCQkJZmlsZS0+Zm9wcyk7CisJCQlpZiAoIWJmYWQtPmJmYWRfZGVudHJ5X2ZpbGVzW2ldKSB7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkiQkZBIGhvc3QlZDogY3JlYXRlICVzIGVudHJ5IGZhaWxlZFxuIiwKKwkJCQkJc2hvc3QtPmhvc3Rfbm8sIGZpbGUtPm5hbWUpOworCQkJCWdvdG8gZXJyOworCQkJfQorCQl9CisJfQorCitlcnI6CisJcmV0dXJuOworfQorCitpbmxpbmUgdm9pZAorYmZhZF9kZWJ1Z2ZzX2V4aXQoc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9IHBvcnQtPmltX3BvcnQ7CisJc3RydWN0IGJmYWRfcyAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShiZmFkX2RlYnVnZnNfZmlsZXMpOyBpKyspIHsKKwkJaWYgKGJmYWQtPmJmYWRfZGVudHJ5X2ZpbGVzW2ldKSB7CisJCQlkZWJ1Z2ZzX3JlbW92ZShiZmFkLT5iZmFkX2RlbnRyeV9maWxlc1tpXSk7CisJCQliZmFkLT5iZmFkX2RlbnRyeV9maWxlc1tpXSA9IE5VTEw7CisJCX0KKwl9CisKKwkvKgorCSAqIFJlbW92ZSB0aGUgaG9zdCMgZGlyZWN0b3J5IGZvciB0aGUgcG9ydCwKKwkgKiBjb3JyZXNwb25kcyB0byB0aGUgc2NzaV9ob3N0IG51bSBvZiB0aGlzIHBvcnQuCisJKi8KKwlpZiAocG9ydC0+cG9ydF9kZWJ1Z2ZzX3Jvb3QpIHsKKwkJZGVidWdmc19yZW1vdmUocG9ydC0+cG9ydF9kZWJ1Z2ZzX3Jvb3QpOworCQlwb3J0LT5wb3J0X2RlYnVnZnNfcm9vdCA9IE5VTEw7CisJCWF0b21pY19kZWMoJmJmYV9kZWJ1Z2ZzX3BvcnRfY291bnQpOworCX0KKworCS8qIFJlbW92ZSB0aGUgQkZBIGRlYnVnZnMgcm9vdCBkaXJlY3RvcnkgKi8KKwlpZiAoYXRvbWljX3JlYWQoJmJmYV9kZWJ1Z2ZzX3BvcnRfY291bnQpID09IDApIHsKKwkJZGVidWdmc19yZW1vdmUoYmZhX2RlYnVnZnNfcm9vdCk7CisJCWJmYV9kZWJ1Z2ZzX3Jvb3QgPSBOVUxMOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9kcnYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9kcnYuaAppbmRleCA2YzkyMGMxLi40NjViOGI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZHJ2LmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2Rydi5oCkBAIC00Niw3ICs0Niw3IEBACiAjaWZkZWYgQkZBX0RSSVZFUl9WRVJTSU9OCiAjZGVmaW5lIEJGQURfRFJJVkVSX1ZFUlNJT04gICAgQkZBX0RSSVZFUl9WRVJTSU9OCiAjZWxzZQotI2RlZmluZSBCRkFEX0RSSVZFUl9WRVJTSU9OICAgICIyLjEuMi4xIgorI2RlZmluZSBCRkFEX0RSSVZFUl9WRVJTSU9OICAgICIyLjIuMi4xIgogI2VuZGlmCiAKIApAQCAtMTExLDYgKzExMSw5IEBACiAJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0OwkvKiBJTSBzcGVjaWZpYyBkYXRhICovCiAJc3RydWN0IGJmYWRfdG1fcG9ydF9zICp0bV9wb3J0OwkvKiBUTSBzcGVjaWZpYyBkYXRhICovCiAJc3RydWN0IGJmYWRfaXBmY19wb3J0X3MgKmlwZmNfcG9ydDsJLyogSVBGQyBzcGVjaWZpYyBkYXRhICovCisKKwkvKiBwb3J0IGRlYnVnZnMgc3BlY2lmaWMgZGF0YSAqLworCXN0cnVjdCBkZW50cnkgKnBvcnRfZGVidWdmc19yb290OwogfTsKIAogLyoKQEAgLTEyMCw2ICsxMjMsOCBAQAogCXN0cnVjdCBiZmFkX3BvcnRfcyAgICAgZHJ2X3BvcnQ7CiAJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyBmY3NfdnBvcnQ7CiAJc3RydWN0IGNvbXBsZXRpb24gKmNvbXBfZGVsOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdF9lbnRyeTsKKwlzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgcG9ydF9jZmc7CiB9OwogCiAvKgpAQCAtMTM5LDE4ICsxNDQsNiBAQAogCXUzMiAgICAgICAgYmluZGluZ19tZXRob2Q7CiB9OwogCi11bmlvbiBiZmFkX3RtcF9idWYgewotCS8qIEZyb20gc3RydWN0IGJmYV9hZGFwdGVyX2F0dHJfcyAqLwotCWNoYXIgICAgICAgICAgICBtYW51ZmFjdHVyZXJbQkZBX0FEQVBURVJfTUZHX05BTUVfTEVOXTsKLQljaGFyICAgICAgICAgICAgc2VyaWFsX251bVtCRkFfQURBUFRFUl9TRVJJQUxfTlVNX0xFTl07Ci0JY2hhciAgICAgICAgICAgIG1vZGVsW0JGQV9BREFQVEVSX01PREVMX05BTUVfTEVOXTsKLQljaGFyICAgICAgICAgICAgZndfdmVyW0JGQV9WRVJTSU9OX0xFTl07Ci0JY2hhciAgICAgICAgICAgIG9wdHJvbV92ZXJbQkZBX1ZFUlNJT05fTEVOXTsKLQotCS8qIEZyb20gc3RydWN0IGJmYV9pb2NfcGNpX2F0dHJfcyAqLwotCXU4ICAgICAgICAgY2hpcF9yZXZbQkZBX0lPQ19DSElQX1JFVl9MRU5dOyAgLyogIGNoaXAgcmV2aXNpb24gKi8KLX07Ci0KIC8qCiAgKiBCRkFEIChQQ0kgZnVuY3Rpb24pIGRhdGEgc3RydWN0dXJlCiAgKi8KQEAgLTE5Myw4ICsxODYsMTggQEAKIAlzdHJ1Y3QgYmZhX3Bsb2dfcyAgICAgIHBsb2dfYnVmOwogCWludCAgICAgICAgICAgICByZWZfY291bnQ7CiAJYmZhX2Jvb2xlYW5fdAlpcGZjX2VuYWJsZWQ7Ci0JdW5pb24gYmZhZF90bXBfYnVmIHRtcF9idWY7CiAJc3RydWN0IGZjX2hvc3Rfc3RhdGlzdGljcyBsaW5rX3N0YXRzOworCXN0cnVjdCBsaXN0X2hlYWQgcGJjX3BjZmdfbGlzdDsKKwlhdG9taWNfdCB3cV9yZXFjbnQ7CisJLyogZGVidWdmcyBzcGVjaWZpYyBkYXRhICovCisJY2hhciAqcmVnZGF0YTsKKwl1MzIgcmVnbGVuOworCXN0cnVjdCBkZW50cnkgKmJmYWRfZGVudHJ5X2ZpbGVzWzVdOworfTsKKworc3RydWN0IGJmYWRfcGNmZ19zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfZW50cnk7CisJc3RydWN0IGJmYV9wb3J0X2NmZ19zIHBvcnRfY2ZnOwogfTsKIAogLyoKQEAgLTI4MCw3ICsyODMsOSBAQAogdm9pZAkJYmZhZF9kcnZfbG9nX2xldmVsX3NldChzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKIGJmYV9zdGF0dXNfdAliZmFkX2ZjNF9tb2R1bGVfaW5pdCh2b2lkKTsKIHZvaWQJCWJmYWRfZmM0X21vZHVsZV9leGl0KHZvaWQpOwotaW50CQliZmFkX3dvcmtlciAodm9pZCAqcHRyKTsKK2ludAkJYmZhZF93b3JrZXIodm9pZCAqcHRyKTsKK3ZvaWQJCWJmYWRfZGVidWdmc19pbml0KHN0cnVjdCBiZmFkX3BvcnRfcyAqcG9ydCk7Cit2b2lkCQliZmFkX2RlYnVnZnNfZXhpdChzdHJ1Y3QgYmZhZF9wb3J0X3MgKnBvcnQpOwogCiB2b2lkIGJmYWRfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiBpbnQgYmZhZF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwaWQpOwpAQCAtMjkzLDYgKzI5OCw3IEBACiBleHRlcm4gaW50IGJmYV9sdW5fcXVldWVfZGVwdGg7CiBleHRlcm4gaW50IGJmYWRfc3VwcG9ydGVkX2ZjNHM7CiBleHRlcm4gaW50IGJmYV9saW5rdXBfZGVsYXk7CitleHRlcm4gaW50IGJmYV9kZWJ1Z2ZzX2VuYWJsZTsKIGV4dGVybiBzdHJ1Y3QgbXV0ZXggYmZhZF9tdXRleDsKIAogI2VuZGlmIC8qIF9fQkZBRF9EUlZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZndpbWcuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9md2ltZy5jCmluZGV4IDJhZDY1ZjIuLjFiYWNhMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9md2ltZy5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9md2ltZy5jCkBAIC0zMywxNiArMzMsMjAgQEAKICNpbmNsdWRlIDxiZmFfZndpbWdfcHJpdi5oPgogI2luY2x1ZGUgPGJmYS5oPgogCi11MzIgYmZpX2ltYWdlX2N0X3NpemU7Ci11MzIgYmZpX2ltYWdlX2NiX3NpemU7Ci11MzIgKmJmaV9pbWFnZV9jdDsKLXUzMiAqYmZpX2ltYWdlX2NiOwordTMyIGJmaV9pbWFnZV9jdF9mY19zaXplOwordTMyIGJmaV9pbWFnZV9jdF9jbmFfc2l6ZTsKK3UzMiBiZmlfaW1hZ2VfY2JfZmNfc2l6ZTsKK3UzMiAqYmZpX2ltYWdlX2N0X2ZjOwordTMyICpiZmlfaW1hZ2VfY3RfY25hOwordTMyICpiZmlfaW1hZ2VfY2JfZmM7CiAKIAotI2RlZmluZQlCRkFEX0ZXX0ZJTEVfQ1QJImN0ZncuYmluIgotI2RlZmluZQlCRkFEX0ZXX0ZJTEVfQ0IJImNiZncuYmluIgotTU9EVUxFX0ZJUk1XQVJFKEJGQURfRldfRklMRV9DVCk7Ci1NT0RVTEVfRklSTVdBUkUoQkZBRF9GV19GSUxFX0NCKTsKKyNkZWZpbmUJQkZBRF9GV19GSUxFX0NUX0ZDCSJjdGZ3X2ZjLmJpbiIKKyNkZWZpbmUJQkZBRF9GV19GSUxFX0NUX0NOQQkiY3Rmd19jbmEuYmluIgorI2RlZmluZQlCRkFEX0ZXX0ZJTEVfQ0JfRkMJImNiZndfZmMuYmluIgorTU9EVUxFX0ZJUk1XQVJFKEJGQURfRldfRklMRV9DVF9GQyk7CitNT0RVTEVfRklSTVdBUkUoQkZBRF9GV19GSUxFX0NUX0NOQSk7CitNT0RVTEVfRklSTVdBUkUoQkZBRF9GV19GSUxFX0NCX0ZDKTsKIAogdTMyICoKIGJmYWRfcmVhZF9maXJtd2FyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTMyICoqYmZpX2ltYWdlLApAQCAtNzQsMjQgKzc4LDU0IEBACiB1MzIgKgogYmZhZF9nZXRfZmlybXdhcmVfYnVmKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCWlmIChwZGV2LT5kZXZpY2UgPT0gQkZBX1BDSV9ERVZJQ0VfSURfQ1QpIHsKLQkJaWYgKGJmaV9pbWFnZV9jdF9zaXplID09IDApCi0JCQliZmFkX3JlYWRfZmlybXdhcmUocGRldiwgJmJmaV9pbWFnZV9jdCwKLQkJCQkmYmZpX2ltYWdlX2N0X3NpemUsIEJGQURfRldfRklMRV9DVCk7Ci0JCXJldHVybiBiZmlfaW1hZ2VfY3Q7CisJaWYgKHBkZXYtPmRldmljZSA9PSBCRkFfUENJX0RFVklDRV9JRF9DVF9GQykgeworCQlpZiAoYmZpX2ltYWdlX2N0X2ZjX3NpemUgPT0gMCkKKwkJCWJmYWRfcmVhZF9maXJtd2FyZShwZGV2LCAmYmZpX2ltYWdlX2N0X2ZjLAorCQkJCSZiZmlfaW1hZ2VfY3RfZmNfc2l6ZSwgQkZBRF9GV19GSUxFX0NUX0ZDKTsKKwkJcmV0dXJuIGJmaV9pbWFnZV9jdF9mYzsKKwl9IGVsc2UgaWYgKHBkZXYtPmRldmljZSA9PSBCRkFfUENJX0RFVklDRV9JRF9DVCkgeworCQlpZiAoYmZpX2ltYWdlX2N0X2NuYV9zaXplID09IDApCisJCQliZmFkX3JlYWRfZmlybXdhcmUocGRldiwgJmJmaV9pbWFnZV9jdF9jbmEsCisJCQkJJmJmaV9pbWFnZV9jdF9jbmFfc2l6ZSwgQkZBRF9GV19GSUxFX0NUX0NOQSk7CisJCXJldHVybiBiZmlfaW1hZ2VfY3RfY25hOwogCX0gZWxzZSB7Ci0JCWlmIChiZmlfaW1hZ2VfY2Jfc2l6ZSA9PSAwKQotCQkJYmZhZF9yZWFkX2Zpcm13YXJlKHBkZXYsICZiZmlfaW1hZ2VfY2IsCi0JCQkJJmJmaV9pbWFnZV9jYl9zaXplLCBCRkFEX0ZXX0ZJTEVfQ0IpOwotCQlyZXR1cm4gYmZpX2ltYWdlX2NiOworCQlpZiAoYmZpX2ltYWdlX2NiX2ZjX3NpemUgPT0gMCkKKwkJCWJmYWRfcmVhZF9maXJtd2FyZShwZGV2LCAmYmZpX2ltYWdlX2NiX2ZjLAorCQkJCSZiZmlfaW1hZ2VfY2JfZmNfc2l6ZSwgQkZBRF9GV19GSUxFX0NCX0ZDKTsKKwkJcmV0dXJuIGJmaV9pbWFnZV9jYl9mYzsKIAl9CiB9CiAKIHUzMiAqCi1iZmlfaW1hZ2VfY3RfZ2V0X2NodW5rKHUzMiBvZmYpCi17IHJldHVybiAodTMyICopKGJmaV9pbWFnZV9jdCArIG9mZik7IH0KK2JmaV9pbWFnZV9jdF9mY19nZXRfY2h1bmsodTMyIG9mZikKK3sgcmV0dXJuICh1MzIgKikoYmZpX2ltYWdlX2N0X2ZjICsgb2ZmKTsgfQogCiB1MzIgKgotYmZpX2ltYWdlX2NiX2dldF9jaHVuayh1MzIgb2ZmKQoteyByZXR1cm4gKHUzMiAqKShiZmlfaW1hZ2VfY2IgKyBvZmYpOyB9CitiZmlfaW1hZ2VfY3RfY25hX2dldF9jaHVuayh1MzIgb2ZmKQoreyByZXR1cm4gKHUzMiAqKShiZmlfaW1hZ2VfY3RfY25hICsgb2ZmKTsgfQogCit1MzIgKgorYmZpX2ltYWdlX2NiX2ZjX2dldF9jaHVuayh1MzIgb2ZmKQoreyByZXR1cm4gKHUzMiAqKShiZmlfaW1hZ2VfY2JfZmMgKyBvZmYpOyB9CisKK3VpbnQzMl90ICoKK2JmaV9pbWFnZV9nZXRfY2h1bmsoaW50IHR5cGUsIHVpbnQzMl90IG9mZikKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEJGSV9JTUFHRV9DVF9GQzogcmV0dXJuIGJmaV9pbWFnZV9jdF9mY19nZXRfY2h1bmsob2ZmKTsgYnJlYWs7CisJY2FzZSBCRklfSU1BR0VfQ1RfQ05BOiByZXR1cm4gYmZpX2ltYWdlX2N0X2NuYV9nZXRfY2h1bmsob2ZmKTsgYnJlYWs7CisJY2FzZSBCRklfSU1BR0VfQ0JfRkM6IHJldHVybiBiZmlfaW1hZ2VfY2JfZmNfZ2V0X2NodW5rKG9mZik7IGJyZWFrOworCWRlZmF1bHQ6IHJldHVybiAwOyBicmVhazsKKwl9Cit9CisKK3VpbnQzMl90CitiZmlfaW1hZ2VfZ2V0X3NpemUoaW50IHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBCRklfSU1BR0VfQ1RfRkM6IHJldHVybiBiZmlfaW1hZ2VfY3RfZmNfc2l6ZTsgYnJlYWs7CisJY2FzZSBCRklfSU1BR0VfQ1RfQ05BOiByZXR1cm4gYmZpX2ltYWdlX2N0X2NuYV9zaXplOyBicmVhazsKKwljYXNlIEJGSV9JTUFHRV9DQl9GQzogcmV0dXJuIGJmaV9pbWFnZV9jYl9mY19zaXplOyBicmVhazsKKwlkZWZhdWx0OiByZXR1cm4gMDsgYnJlYWs7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uYwppbmRleCA1YjdjZjUzLi42NzgxMjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uYwpAQCAtNTU0LDcgKzU1NCw3IEBACiAJCWltX3BvcnQtPnNob3N0LT50cmFuc3BvcnR0ID0KIAkJCQliZmFkX2ltX3Njc2lfdnBvcnRfdHJhbnNwb3J0X3RlbXBsYXRlOwogCi0JZXJyb3IgPSBzY3NpX2FkZF9ob3N0KGltX3BvcnQtPnNob3N0LCBkZXYpOworCWVycm9yID0gc2NzaV9hZGRfaG9zdF93aXRoX2RtYShpbV9wb3J0LT5zaG9zdCwgZGV2LCAmYmZhZC0+cGNpZGV2LT5kZXYpOwogCWlmIChlcnJvcikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJzY3NpX2FkZF9ob3N0IGZhaWx1cmUgJWRcbiIsIGVycm9yKTsKIAkJZ290byBvdXRfZmNfcmVsOwpAQCAtNTY3LDYgKzU2Nyw3IEBACiAKIG91dF9mY19yZWw6CiAJc2NzaV9ob3N0X3B1dChpbV9wb3J0LT5zaG9zdCk7CisJaW1fcG9ydC0+c2hvc3QgPSBOVUxMOwogb3V0X2ZyZWVfaWRyOgogCW11dGV4X2xvY2soJmJmYWRfbXV0ZXgpOwogCWlkcl9yZW1vdmUoJmJmYWRfaW1fcG9ydF9pbmRleCwgaW1fcG9ydC0+aWRyX2lkKTsKQEAgLTU5NywxMCArNTk4LDEyIEBACiB7CiAJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBiZmFkX2ltX3BvcnRfcywgcG9ydF9kZWxldGVfd29yayk7CisJc3RydWN0IGJmYWRfcyAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CiAKIAlpZiAoaW1fcG9ydC0+cG9ydC0+cHZiX3R5cGUgIT0gQkZBRF9QT1JUX1BIWVNfQkFTRSkgewogCQlpbV9wb3J0LT5mbGFncyB8PSBCRkFEX1BPUlRfREVMRVRFOwogCQlmY192cG9ydF90ZXJtaW5hdGUoaW1fcG9ydC0+ZmNfdnBvcnQpOworCQlhdG9taWNfZGVjKCZiZmFkLT53cV9yZXFjbnQpOwogCX0KIAogfQpAQCAtNjMzLDggKzYzNiwxMSBAQAogewogCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9IHBvcnQtPmltX3BvcnQ7CiAKLQlxdWV1ZV93b3JrKGJmYWQtPmltLT5kcnZfd29ya3EsCisJaWYgKGltX3BvcnQtPnBvcnQtPnB2Yl90eXBlICE9IEJGQURfUE9SVF9QSFlTX0JBU0UpIHsKKwkJYXRvbWljX2luYygmYmZhZC0+d3FfcmVxY250KTsKKwkJcXVldWVfd29yayhiZmFkLT5pbS0+ZHJ2X3dvcmtxLAogCQkJCSZpbV9wb3J0LT5wb3J0X2RlbGV0ZV93b3JrKTsKKwl9CiB9CiAKIHZvaWQKQEAgLTY5NSwxMiArNzAxLDI3IEBACiBiZmFkX2ltX3Byb2JlX3VuZG8oc3RydWN0IGJmYWRfcyAqYmZhZCkKIHsKIAlpZiAoYmZhZC0+aW0pIHsKKwkJd2hpbGUgKGF0b21pY19yZWFkKCZiZmFkLT53cV9yZXFjbnQpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJiZmEgJXM6IHdhaXRpbmcgd29ya3EgcHJvY2Vzc2luZywiCisJCQkJIiB3cV9yZXFjbnQ6JXhcbiIsIGJmYWQtPnBjaV9uYW1lLAorCQkJCWF0b21pY19yZWFkKCZiZmFkLT53cV9yZXFjbnQpKTsKKwkJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKEhaKTsKKwkJfQogCQliZmFkX29zX2Rlc3Ryb3lfd29ya3EoYmZhZC0+aW0pOwogCQlrZnJlZShiZmFkLT5pbSk7CiAJCWJmYWQtPmltID0gTlVMTDsKIAl9CiB9CiAKKy8qKgorICogQ2FsbCBiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSBJTyByZWRpcmVjdGlvbiBzdGF0ZSBjaGFuZ2UKKyAqLwordm9pZAorYmZhX2NiX2lvcmVkaXJlY3Rfc3RhdGVfY2hhbmdlKHZvaWQgKmhjYl9iZmFkLCBiZmFfYm9vbGVhbl90IGlvcmVkaXJlY3QpCit7CisJLyogRG8gbm90aGluZyAqLworfQorCiBzdHJ1Y3QgU2NzaV9Ib3N0ICoKIGJmYWRfb3Nfc2NzaV9ob3N0X2FsbG9jKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCwgc3RydWN0IGJmYWRfcyAqYmZhZCkKIHsKQEAgLTEyMDQsOSArMTIyNSw5IEBACiBiZmFkX29zX2dldF9saW5rdXBfZGVsYXkoc3RydWN0IGJmYWRfcyAqYmZhZCkKIHsKIAotCXU4ICAgICAgICAgbnd3bnMgPSAwOwotCXd3bl90ICAgICAgICAgICAqd3duczsKLQlpbnQgICAgICAgICAgICAgbGRlbGF5OworCXU4ICAgICAgbnd3bnMgPSAwOworCXd3bl90CXd3bnNbQkZBX1BSRUJPT1RfQk9PVExVTl9NQVhdOworCWludCAgICAgbGRlbGF5OwogCiAJLyoKIAkgKiBRdWVyeWluZyBmb3IgdGhlIGJvb3QgdGFyZ2V0IHBvcnQgd3ducwpAQCAtMTIxNSw3ICsxMjM2LDcgQEAKIAkgKiBlbHNlID0+IGxvY2FsIGJvb3QgbWFjaGluZSBzZXQgYmZhX2xpbmt1cF9kZWxheSA9IDEwCiAJICovCiAKLQliZmFfaW9jZmNfZ2V0X2Jvb3R3d25zKCZiZmFkLT5iZmEsICZud3ducywgJnd3bnMpOworCWJmYV9pb2NmY19nZXRfYm9vdHd3bnMoJmJmYWQtPmJmYSwgJm53d25zLCB3d25zKTsKIAogCWlmIChud3ducyA+IDApIHsKIAkJLyogSWYgYm9vdCBvdmVyIFNBTjsgbGlua3VwX2RlbGF5ID0gMzBzZWMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbV9jb21wYXQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbV9jb21wYXQuaAppbmRleCBiMzZiZTE1Li4wYTEyMmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW1fY29tcGF0LmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltX2NvbXBhdC5oCkBAIC0xOCw5ICsxOCw2IEBACiAjaWZuZGVmIF9fQkZBRF9JTV9DT01QQVRfSF9fCiAjZGVmaW5lIF9fQkZBRF9JTV9DT01QQVRfSF9fCiAKLWV4dGVybiB1MzIgKmJmaV9pbWFnZV9idWY7Ci1leHRlcm4gdTMyIGJmaV9pbWFnZV9zaXplOwotCiBleHRlcm4gc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmJmYWRfaW1faG9zdF9hdHRyc1tdOwogZXh0ZXJuIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpiZmFkX2ltX3Zwb3J0X2F0dHJzW107CiAKQEAgLTM3LDEwICszNCwxMiBAQAogc3RhdGljIGlubGluZSB2b2lkCiBiZmFkX2ZyZWVfZndpbWcodm9pZCkKIHsKLQlpZiAoYmZpX2ltYWdlX2N0X3NpemUgJiYgYmZpX2ltYWdlX2N0KQotCQl2ZnJlZShiZmlfaW1hZ2VfY3QpOwotCWlmIChiZmlfaW1hZ2VfY2Jfc2l6ZSAmJiBiZmlfaW1hZ2VfY2IpCi0JCXZmcmVlKGJmaV9pbWFnZV9jYik7CisJaWYgKGJmaV9pbWFnZV9jdF9mY19zaXplICYmIGJmaV9pbWFnZV9jdF9mYykKKwkJdmZyZWUoYmZpX2ltYWdlX2N0X2ZjKTsKKwlpZiAoYmZpX2ltYWdlX2N0X2NuYV9zaXplICYmIGJmaV9pbWFnZV9jdF9jbmEpCisJCXZmcmVlKGJmaV9pbWFnZV9jdF9jbmEpOworCWlmIChiZmlfaW1hZ2VfY2JfZmNfc2l6ZSAmJiBiZmlfaW1hZ2VfY2JfZmMpCisJCXZmcmVlKGJmaV9pbWFnZV9jYl9mYyk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ludHIuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbnRyLmMKaW5kZXggMmI3ZGJlYy4uNTZhMzUxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ludHIuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW50ci5jCkBAIC0yNiw3ICsyNiwxMSBAQAogc3RhdGljIGludCBtc2l4X2Rpc2FibGVfY2I7CiBzdGF0aWMgaW50IG1zaXhfZGlzYWJsZV9jdDsKIG1vZHVsZV9wYXJhbShtc2l4X2Rpc2FibGVfY2IsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhtc2l4X2Rpc2FibGVfY2IsICJEaXNhYmxlIE1TSVggZm9yIEJyb2NhZGUtNDE1LzQyNS84MTUvODI1IgorCQkiIGNhcmRzLCBkZWZhdWx0PTAsIFJhbmdlW2ZhbHNlOjB8dHJ1ZToxXSIpOwogbW9kdWxlX3BhcmFtKG1zaXhfZGlzYWJsZV9jdCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKG1zaXhfZGlzYWJsZV9jdCwgIkRpc2FibGUgTVNJWCBmb3IgQnJvY2FkZS0xMDEwLzEwMjAvODA0IgorCQkiIGNhcmRzLCBkZWZhdWx0PTAsIFJhbmdlW2ZhbHNlOjB8dHJ1ZToxXSIpOwogLyoqCiAgKiBMaW5lIGJhc2VkIGludGVycnVwdCBoYW5kbGVyLgogICovCkBAIC0xNTEsOCArMTU1LDggQEAKIAkvKiBTZXQgdXAgdGhlIG1zaXggZW50cnkgdGFibGUgKi8KIAliZmFkX2luaXRfbXNpeF9lbnRyeShiZmFkLCBtc2l4X2VudHJpZXMsIG1hc2ssIG1heF9iaXQpOwogCi0JaWYgKChwZGV2LT5kZXZpY2UgPT0gQkZBX1BDSV9ERVZJQ0VfSURfQ1QgJiYgIW1zaXhfZGlzYWJsZV9jdCkgfHwKLQkgICAgKHBkZXYtPmRldmljZSAhPSBCRkFfUENJX0RFVklDRV9JRF9DVCAmJiAhbXNpeF9kaXNhYmxlX2NiKSkgeworCWlmICgoYmZhX2FzaWNfaWRfY3QocGRldi0+ZGV2aWNlKSAmJiAhbXNpeF9kaXNhYmxlX2N0KSB8fAorCQkoIWJmYV9hc2ljX2lkX2N0KHBkZXYtPmRldmljZSkgJiYgIW1zaXhfZGlzYWJsZV9jYikpIHsKIAogCQllcnJvciA9IHBjaV9lbmFibGVfbXNpeChiZmFkLT5wY2lkZXYsIG1zaXhfZW50cmllcywgYmZhZC0+bnZlYyk7CiAJCWlmIChlcnJvcikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mYWJyaWMuYyBiL2RyaXZlcnMvc2NzaS9iZmEvZmFicmljLmMKaW5kZXggODE2NmU5Ny4uZGRkNGJhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9mYWJyaWMuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2ZhYnJpYy5jCkBAIC03ODksNyArNzg5LDcgQEAKIAogCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmZmFicmljLT52cG9ydF9xKSB7CiAJCXZwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKilxZTsKLQkJYmZhX2Zjc192cG9ydF9kZWxldGUodnBvcnQpOworCQliZmFfZmNzX3Zwb3J0X2Zjc19kZWxldGUodnBvcnQpOwogCX0KIAogCWJmYV9mY3NfcG9ydF9kZWxldGUoJmZhYnJpYy0+YnBvcnQpOwpAQCAtMTAyNyw2ICsxMDI3LDMyIEBACiAJcmV0dXJuIGZhYnJpYy0+bnVtX3Zwb3J0czsKIH0KIAorLyoKKyAqICBHZXQgT1VJIG9mIHRoZSBhdHRhY2hlZCBzd2l0Y2guCisgKgorICogIE5vdGUgOiBVc2Ugb2YgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgYXZvaWRlZCBhcyBtdWNoIGFzIHBvc3NpYmxlLgorICogICAgICAgICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIG9ubHkgaWYgdGhlcmUgaXMgYW55IHJlcXVpcmVtZW50CisgKiAgICAgICAgIHRvIGNoZWNrIGZvciBGT1MgdmVyc2lvbiBiZWxvdyA2LjMuCisgKiAgICAgICAgIFRvIGNoZWNrIGlmIHRoZSBhdHRhY2hlZCBmYWJyaWMgaXMgYSBicm9jYWRlIGZhYnJpYywgdXNlCisgKiAgICAgICAgIGJmYV9scHNfaXNfYnJjZF9mYWJyaWMoKSB3aGljaCB3b3JrcyBmb3IgRk9TIHZlcnNpb25zIDYuMworICogICAgICAgICBvciBhYm92ZSBvbmx5LgorICovCisKK3UxNgorYmZhX2Zjc19mYWJyaWNfZ2V0X3N3aXRjaF9vdWkoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYykKK3sKKwl3d25fdCBmYWJfbnd3bjsKKwl1OCAqdG1wOworCXUxNiBvdWk7CisKKwlmYWJfbnd3biA9IGJmYV9scHNfZ2V0X3BlZXJfbnd3bihmYWJyaWMtPmxwcyk7CisKKwl0bXAgPSAodWludDhfdCAqKSZmYWJfbnd3bjsKKwlvdWkgPSAodG1wWzNdIDw8IDgpIHwgdG1wWzRdOworCisJcmV0dXJuIG91aTsKK30KKwogLyoqCiAgKiAJCVVuc29saWNpdGVkIGZyYW1lIHJlY2VpdmUgaGFuZGxpbmcuCiAgKi8KQEAgLTEyNzEsNiArMTI5NywyMiBAQAogfQogCiAvKioKKyAqCisgKiBAcGFyYW1baW5dIGZhYnJpYyAtIGZhYnJpYworICogQHBhcmFtW2luXSBub2RlX3N5bW5hbWUgLQorICogICAgICAgICAgICAgIENhbGxlciBhbGxvY2F0ZWQgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIHN5bWJvbGljIG5hbWUKKyAqCisgKiBAcmV0dXJuIC0gbm9uZQorICovCit2b2lkCitiZmFfZmNzX2dldF9zeW1fbmFtZShjb25zdCBzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIGNoYXIgKm5vZGVfc3ltbmFtZSkKK3sKKwliZmFfb3NfbWVtY3B5KG5vZGVfc3ltbmFtZSwKKwkJCWZjcy0+ZmFicmljLmJwb3J0LnBvcnRfY2ZnLnN5bV9uYW1lLnN5bW5hbWUsCisJCQlCRkFfU1lNTkFNRV9NQVhMRU4pOworfQorCisvKioKICAqIE5vdCB1c2VkIGJ5IEZDUy4KICAqLwogdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mY3BpbS5jIGIvZHJpdmVycy9zY3NpL2JmYS9mY3BpbS5jCmluZGV4IDhhZTRhMmNmLi42Yjg5NzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2ZjcGltLmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mY3BpbS5jCkBAIC0xMTAsNiArMTEwLDcgQEAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBCRkFfRkNTX0lUTklNX1NNX09OTElORToKIAkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9wcmxpX3NlbmQpOworCQlpdG5pbS0+cHJsaV9yZXRyaWVzID0gMDsKIAkJYmZhX2Zjc19pdG5pbV9zZW5kX3BybGkoaXRuaW0sIE5VTEwpOwogCQlicmVhazsKIApAQCAtMTc0LDggKzE3NSwxMiBAQAogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9SU1BfT0s6Ci0JCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21faGNiX29ubGluZSk7Ci0JCWJmYV9pdG5pbV9vbmxpbmUoaXRuaW0tPmJmYV9pdG5pbSwgaXRuaW0tPnNlcV9yZWMpOworCQlpZiAoaXRuaW0tPnJwb3J0LT5zY3NpX2Z1bmN0aW9uID09IEJGQV9SUE9SVF9JTklUSUFUT1IpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21faW5pdGlhdG9yKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21faGNiX29ubGluZSk7CisJCQliZmFfaXRuaW1fb25saW5lKGl0bmltLT5iZmFfaXRuaW0sIGl0bmltLT5zZXFfcmVjKTsKKwkJfQogCQlicmVhazsKIAogCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9SU1BfRVJST1I6CkBAIC0xOTMsOSArMTk4LDcgQEAKIAogCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9JTklUSUFUT1I6CiAJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21faW5pdGlhdG9yKTsKLQkJLyoKLQkJICogZG9udCBkaXNjYXJkIGZjeHAuIGFjY2VwdCB3aWxsIHJlYWNoIHNhbWUgc3RhdGUKLQkJICovCisJCWJmYV9mY3hwX2Rpc2NhcmQoaXRuaW0tPmZjeHApOwogCQlicmVhazsKIAogCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9ERUxFVEU6CkBAIC0yMTgsOCArMjIxLDE2IEBACiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBCRkFfRkNTX0lUTklNX1NNX1RJTUVPVVQ6Ci0JCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fcHJsaV9zZW5kKTsKLQkJYmZhX2Zjc19pdG5pbV9zZW5kX3BybGkoaXRuaW0sIE5VTEwpOworCQlpZiAoaXRuaW0tPnBybGlfcmV0cmllcyA8IEJGQV9GQ1NfUlBPUlRfTUFYX1JFVFJJRVMpIHsKKwkJCWl0bmltLT5wcmxpX3JldHJpZXMrKzsKKwkJCWJmYV90cmMoaXRuaW0tPmZjcywgaXRuaW0tPnBybGlfcmV0cmllcyk7CisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX3BybGlfc2VuZCk7CisJCQliZmFfZmNzX2l0bmltX3NlbmRfcHJsaShpdG5pbSwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQkvKiBpbnZva2UgdGFyZ2V0IG9mZmxpbmUgKi8KKwkJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fb2ZmbGluZSk7CisJCQliZmFfZmNzX3Jwb3J0X2xvZ29faW1wKGl0bmltLT5ycG9ydCk7CisJCX0KIAkJYnJlYWs7CiAKIAljYXNlIEJGQV9GQ1NfSVROSU1fU01fT0ZGTElORToKQEAgLTQyMiw3ICs0MzMsNyBAQAogCWJmYV9mY3hwX3NlbmQoZmN4cCwgcnBvcnQtPmJmYV9ycG9ydCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLAogCQkgICAgICBCRkFfRkFMU0UsIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsCiAJCSAgICAgIGJmYV9mY3NfaXRuaW1fcHJsaV9yZXNwb25zZSwgKHZvaWQgKilpdG5pbSwgRkNfTUFYX1BEVVNaLAotCQkgICAgICBGQ19SQV9UT1YpOworCQkgICAgICBGQ19FTFNfVE9WKTsKIAogCWl0bmltLT5zdGF0cy5wcmxpX3NlbnQrKzsKIAliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0ZDU19JVE5JTV9TTV9GUk1TRU5UKTsKQEAgLTQ2Nyw3ICs0NzgsNyBAQAogCQkJCQlCRkFfUlBPUlRfSU5JVElBVE9SOwogCQkJCWl0bmltLT5zdGF0cy5wcmxpX3JzcF9hY2MrKzsKIAkJCQliZmFfc21fc2VuZF9ldmVudChpdG5pbSwKLQkJCQkJCSAgQkZBX0ZDU19JVE5JTV9TTV9JTklUSUFUT1IpOworCQkJCQkJICBCRkFfRkNTX0lUTklNX1NNX1JTUF9PSyk7CiAJCQkJcmV0dXJuOwogCQkJfQogCkBAIC03MzgsNiArNzQ5LDcgQEAKIAlhdHRyLT5yZWNfc3VwcG9ydCA9IGl0bmltLT5yZWNfc3VwcG9ydDsKIAlhdHRyLT5jb25mX2NvbXAgPSBpdG5pbS0+Y29uZl9jb21wOwogCWF0dHItPnRhc2tfcmV0cnlfaWQgPSBpdG5pbS0+dGFza19yZXRyeV9pZDsKKwliZmFfb3NfbWVtc2V0KCZhdHRyLT5pb19sYXRlbmN5LCAwLCBzaXplb2Yoc3RydWN0IGJmYV9pdG5pbV9sYXRlbmN5X3MpKTsKIAogCXJldHVybiBCRkFfU1RBVFVTX09LOwogfQpAQCAtNzkzLDcgKzgwNSw3IEBACiAKIAlzd2l0Y2ggKGVsc19jbWQtPmVsc19jb2RlKSB7CiAJY2FzZSBGQ19FTFNfUFJMTzoKLQkJLyogYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9GQ1NfSVROSU1fU01fUFJMTyk7ICovCisJCWJmYV9mY3NfcnBvcnRfcHJsbyhpdG5pbS0+cnBvcnQsIGZjaHMtPm94X2lkKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mY3NfZmFicmljLmggYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc19mYWJyaWMuaAppbmRleCAyNDRjM2YwLi40MzJhYjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2Zjc19mYWJyaWMuaAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc19mYWJyaWMuaApAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Zwb3J0Lmg+CiAjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfbHBvcnQuaD4KIAorI2RlZmluZSBCRkFfRkNTX0JSQ0RfU1dJVENIX09VSSAgMHgwNTFlCisKIC8qCiAqIGZjcyBmcmllbmQgZnVuY3Rpb25zOiBvbmx5IGJldHdlZW4gZmNzIG1vZHVsZXMKICAqLwpAQCAtNjAsNCArNjIsNyBAQAogCiB2b2lkIGJmYV9mY3NfZmFicmljX3NldF9mYWJyaWNfbmFtZShzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAogCQkJd3duX3QgZmFicmljX25hbWUpOwordTE2IGJmYV9mY3NfZmFicmljX2dldF9zd2l0Y2hfb3VpKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOwordm9pZCBiZmFfZmNzX2dldF9zeW1fbmFtZShjb25zdCBzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIGNoYXIgKm5vZGVfc3ltbmFtZSk7CisKICNlbmRpZiAvKiBfX0ZDU19GQUJSSUNfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2Zjc19ycG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfcnBvcnQuaAppbmRleCA5YzhkMWQyLi5lNjM0ZmI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2Zjc19ycG9ydC5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX3Jwb3J0LmgKQEAgLTI0LDYgKzI0LDggQEAKIAogI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Jwb3J0Lmg+CiAKKyNkZWZpbmUgQkZBX0ZDU19SUE9SVF9NQVhfUkVUUklFUyAgICAgICAgICAgICAgICg1KQorCiB2b2lkIGJmYV9mY3NfcnBvcnRfdWZfcmVjdihzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwgc3RydWN0IGZjaHNfcyAqZmNocywKIAkJCXUxNiBsZW4pOwogdm9pZCBiZmFfZmNzX3Jwb3J0X3NjbihzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7CkBAIC00MSw2ICs0Myw3IEBACiB2b2lkIGJmYV9mY3NfcnBvcnRfcGxvZ2koc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIHN0cnVjdCBmY2hzX3MgKmZjaHMsCiAJCQlzdHJ1Y3QgZmNfbG9naV9zICpwbG9naSk7CiB2b2lkIGJmYV9mY3NfcnBvcnRfbG9nb19pbXAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOwordm9pZCBiZmFfZmNzX3Jwb3J0X3BybG8oc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIHVpbnQxNl90IG94X2lkKTsKIHZvaWQgYmZhX2Zjc19ycG9ydF9pdG5pbV9hY2soc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOwogdm9pZCBiZmFfZmNzX3Jwb3J0X2l0bnRtX2FjayhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7CiB2b2lkIGJmYV9mY3NfcnBvcnRfdGluX2FjayhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2Zjc192cG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfdnBvcnQuaAppbmRleCAxM2MzMmViLi5iYjY0N2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2Zjc192cG9ydC5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX3Zwb3J0LmgKQEAgLTI2LDYgKzI2LDcgQEAKIHZvaWQgYmZhX2Zjc192cG9ydF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOwogdm9pZCBiZmFfZmNzX3Zwb3J0X29mZmxpbmUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOwogdm9pZCBiZmFfZmNzX3Zwb3J0X2RlbGV0ZV9jb21wKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKK3ZvaWQgYmZhX2Zjc192cG9ydF9mY3NfZGVsZXRlKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKIAogI2VuZGlmIC8qIF9fRkNTX1ZQT1JUX0hfXyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2ZkbWkuYyBiL2RyaXZlcnMvc2NzaS9iZmEvZmRtaS5jCmluZGV4IDhmMTcwNzYuLjJiNTBlYWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2ZkbWkuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2ZkbWkuYwpAQCAtNTMyLDcgKzUzMiw3IEBACiAJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKIAkJICAgICAgRkNfQ0xBU1NfMywgKGxlbiArIGF0dHJfbGVuKSwgJmZjaHMsCiAJCSAgICAgIGJmYV9mY3NfcG9ydF9mZG1pX3JoYmFfcmVzcG9uc2UsICh2b2lkICopZmRtaSwKLQkJICAgICAgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCQkgICAgICBGQ19NQVhfUERVU1osIEZDX0ZDQ1RfVE9WKTsKIAogCWJmYV9zbV9zZW5kX2V2ZW50KGZkbWksIEZETUlTTV9FVkVOVF9SSEJBX1NFTlQpOwogfQpAQCAtODIzLDcgKzgyMyw3IEBACiAJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKIAkJICAgICAgRkNfQ0xBU1NfMywgbGVuICsgYXR0cl9sZW4sICZmY2hzLAogCQkgICAgICBiZmFfZmNzX3BvcnRfZmRtaV9ycHJ0X3Jlc3BvbnNlLCAodm9pZCAqKWZkbWksCi0JCSAgICAgIEZDX01BWF9QRFVTWiwgRkNfUkFfVE9WKTsKKwkJICAgICAgRkNfTUFYX1BEVVNaLCBGQ19GQ0NUX1RPVik7CiAKIAliZmFfc21fc2VuZF9ldmVudChmZG1pLCBGRE1JU01fRVZFTlRfUlBSVF9TRU5UKTsKIH0KQEAgLTEwNDMsNyArMTA0Myw3IEBACiAJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKIAkJICAgICAgRkNfQ0xBU1NfMywgbGVuICsgYXR0cl9sZW4sICZmY2hzLAogCQkgICAgICBiZmFfZmNzX3BvcnRfZmRtaV9ycGFfcmVzcG9uc2UsICh2b2lkICopZmRtaSwKLQkJICAgICAgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCQkgICAgICBGQ19NQVhfUERVU1osIEZDX0ZDQ1RfVE9WKTsKIAogCWJmYV9zbV9zZW5kX2V2ZW50KGZkbWksIEZETUlTTV9FVkVOVF9SUEFfU0VOVCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW5faW9jLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW5faW9jLmgKaW5kZXggNzEzNzhiNC4uNGRhZjk2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX2lvYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9pb2MuaApAQCAtMzIsNiArMzIsMTQgQEAKIAlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9JT0MsIEJGQV9JT0NfQUVOX0RJU0FCTEUpCiAjZGVmaW5lIEJGQV9BRU5fSU9DX0ZXTUlTTUFUQ0ggXAogCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0lPQywgQkZBX0lPQ19BRU5fRldNSVNNQVRDSCkKKyNkZWZpbmUgQkZBX0FFTl9JT0NfRldDRkdfRVJST1IgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0lPQywgQkZBX0lPQ19BRU5fRldDRkdfRVJST1IpCisjZGVmaW5lIEJGQV9BRU5fSU9DX0lOVkFMSURfVkVORE9SICAgICAgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0lPQywgQkZBX0lPQ19BRU5fSU5WQUxJRF9WRU5ET1IpCisjZGVmaW5lIEJGQV9BRU5fSU9DX0lOVkFMSURfTldXTiAgICAgICAgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0lPQywgQkZBX0lPQ19BRU5fSU5WQUxJRF9OV1dOKQorI2RlZmluZSBCRkFfQUVOX0lPQ19JTlZBTElEX1BXV04gICAgICAgIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9JT0MsIEJGQV9JT0NfQUVOX0lOVkFMSURfUFdXTikKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmEuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmEuaAppbmRleCAxZjU5NjZjLi5kNTJiMzJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhLmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmYS5oCkBAIC0xMjYsNiArMTI2LDEwIEBACiAJYmZhX2lvY19nZXRfdHlwZSgmKF9fYmZhKS0+aW9jKQogI2RlZmluZSBiZmFfZ2V0X21hYyhfX2JmYSkgIFwKIAliZmFfaW9jX2dldF9tYWMoJihfX2JmYSktPmlvYykKKyNkZWZpbmUgYmZhX2dldF9tZmdfbWFjKF9fYmZhKSAgXAorCWJmYV9pb2NfZ2V0X21mZ19tYWMoJihfX2JmYSktPmlvYykKKyNkZWZpbmUgYmZhX2dldF9md19jbG9ja19yZXMoX19iZmEpICAgIFwKKwkoKF9fYmZhKS0+aW9jZmMuY2ZncnNwLT5md2NmZy5md190aWNrX3JlcykKIAogLyoKICAqIGJmYSBBUEkgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhX2ZjcGltLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhX2ZjcGltLmgKaW5kZXggMDQ3ODk3OS4uNGJjOTQ1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmYV9mY3BpbS5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmFfZmNwaW0uaApAQCAtNDIsNiArNDIsMjQgQEAKIGJmYV9zdGF0dXNfdCBiZmFfZmNwaW1fZ2V0X21vZHN0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLAogCQkJc3RydWN0IGJmYV9mY3BpbV9zdGF0c19zICptb2RzdGF0cyk7CiBiZmFfc3RhdHVzX3QgYmZhX2ZjcGltX2Nscl9tb2RzdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9mY3BpbV9zZXRfaW9yZWRpcmVjdChzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBzdGF0ZSk7Cit2b2lkIGJmYV9mY3BpbV91cGRhdGVfaW9yZWRpcmVjdChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9jYl9pb3JlZGlyZWN0X3N0YXRlX2NoYW5nZSh2b2lkICpoY2JfYmZhZCwgYmZhX2Jvb2xlYW5fdCBpb3JlZGlyZWN0KTsKKworI2RlZmluZSBiZmFfZmNwaW1faW9yZWRpcmVjdF9lbmFibGVkKF9fYmZhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSgoKHN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKikoQkZBX0ZDUElNX01PRChfX2JmYSkpKS0+aW9yZWRpcmVjdCkKKworI2RlZmluZSBiZmFfZmNwaW1fZ2V0X25leHRfcmVxcShfX2JmYSwgX19xaWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKl9fZmNwaW0gPSBCRkFfRkNQSU1fTU9EKF9fYmZhKTsgICAgICAgICBcCisJX19mY3BpbS0+cmVxcSsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfX2ZjcGltLT5yZXFxICY9IChCRklfSU9DX01BWF9DUVMgLSAxKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkqKF9fcWlkKSA9IF9fZmNwaW0tPnJlcXE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIGJmYV9pb2NmY19tYXBfbXNnX3RvX3FpZChfX21zZywgX19xaWQpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKihfX3FpZCkgPSAodTgpKChfX21zZykgJiAoQkZJX0lPQ19NQVhfQ1FTIC0gMSkpOworCiAKIC8qCiAgKiBiZmEgaXRuaW0gQVBJIGZ1bmN0aW9ucwpAQCAtNTYsNiArNzQsNyBAQAogCQkJc3RydWN0IGJmYV9pdG5pbV9oYWxfc3RhdHNfcyAqc3RhdHMpOwogdm9pZAkJYmZhX2l0bmltX2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pOwogCisjZGVmaW5lIGJmYV9pdG5pbV9nZXRfcmVxcShfX2lvaW0pICgoKHN0cnVjdCBiZmFfaW9pbV9zICopX19pb2ltKS0+aXRuaW0tPnJlcXEpCiAKIC8qKgogICogCQlCRkEgY29tcGxldGlvbiBjYWxsYmFjayBmb3IgYmZhX2l0bmltX29ubGluZSgpLgpAQCAtMTU2LDQgKzE3NSwzIEBACiAJCQkJICBlbnVtIGJmaV90c2tpbV9zdGF0dXMgdHNrX3N0YXR1cyk7CiAKICNlbmRpZiAvKiBfX0JGQV9GQ1BJTV9IX18gKi8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmYV9zdmMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmFfc3ZjLmgKaW5kZXggMTM0OWI5OS4uNzg0MDk0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmYV9zdmMuaAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhX3N2Yy5oCkBAIC0yMTUsNiArMjE1LDcgQEAKIAkJYmZhX2NiX3Bwb3J0X3QgY2Jmbiwgdm9pZCAqY2JhcmcpOwogYmZhX3N0YXR1c190IGJmYV9mY3BvcnRfY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9zICpiZmEsIGJmYV9jYl9wcG9ydF90IGNiZm4sCiAJCXZvaWQgKmNiYXJnKTsKK2JmYV9ib29sZWFuX3QgYmZhX2ZjcG9ydF9pc19xb3NfZW5hYmxlZChzdHJ1Y3QgYmZhX3MgKmJmYSk7CiAKIC8qCiAgKiBiZmEgcnBvcnQgQVBJIGZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfY3RyZWcuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2N0cmVnLmgKaW5kZXggNTdhODQ5Ny4uYzBlZjVhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfY3RyZWcuaAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9jdHJlZy5oCkBAIC00NTUsNiArNDU1LDkgQEAKICNkZWZpbmUgX19QU1NfTFBVMF9SQU1fRVJSICAgICAgICAgICAgICAgMHgwMDAwMDAwMQogI2RlZmluZSBFUlJfU0VUX1JFRwkJCSAweDAwMDE4ODE4CiAjZGVmaW5lIF9fUFNTX0VSUl9TVEFUVVNfU0VUCQkgMHgwMDNmZmZmZgorI2RlZmluZSBQTU1fMVRfUkVTRVRfUkVHX1AwICAgICAgICAgICAgICAweDAwMDIzODFjCisjZGVmaW5lIF9fUE1NXzFUX1JFU0VUX1AgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUE1NXzFUX1JFU0VUX1JFR19QMSAgICAgICAgICAgICAgMHgwMDAyM2MxYwogI2RlZmluZSBIUU1fUVNFVDBfUlhRX0RSQkxfUDAgICAgICAgICAgICAweDAwMDM4MDAwCiAjZGVmaW5lIF9fUlhRMF9BRERfVkVDVE9SU19QICAgICAgICAgICAgIDB4ODAwMDAwMDAKICNkZWZpbmUgX19SWFEwX1NUT1BfUCAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfaW9jLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9pb2MuaAppbmRleCBhMDE1OGFhLi40NTBkZWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9pb2MuaAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9pb2MuaApAQCAtNDgsOSArNDgsMTQgQEAKIH07CiAKIHN0cnVjdCBiZmlfaW9jX2F0dHJfcyB7Ci0Jd3duX3QgICAgICAgICAgIG1mZ193d247Ci0JbWFjX3QJCW1mZ19tYWM7Ci0JdTE2CXJzdmRfYTsKKwl3d25fdCAgICAgICAgICAgbWZnX3B3d247ICAgICAgIC8qIE1mZyBwb3J0IHd3biAqLworCXd3bl90ICAgICAgICAgICBtZmdfbnd3bjsgICAgICAgLyogTWZnIG5vZGUgd3duICovCisJbWFjX3QJCW1mZ19tYWM7CS8qIE1mZyBtYWMgICAgICAqLworCXUxNgkJcnN2ZF9hOworCXd3bl90ICAgICAgICAgICBwd3duOworCXd3bl90ICAgICAgICAgICBud3duOworCW1hY190ICAgICAgICAgICBtYWM7ICAgICAgICAgICAgLyogUEJDIG9yIE1mZyBtYWMgKi8KKwl1MTYgICAgICAgIAlyc3ZkX2I7CiAJY2hhciAgICAgICAgICAgIGJyY2Rfc2VyaWFsbnVtW1NUUlNaKEJGQV9NRkdfU0VSSUFMTlVNX1NJWkUpXTsKIAl1OCAgICAgICAgIHBjaWVfZ2VuOwogCXU4ICAgICAgICAgcGNpZV9sYW5lc19vcmlnOwpAQCAtNTgsMTEgKzYzLDEyIEBACiAJdTggICAgICAgICByeF9iYmNyZWRpdDsJLyogIHJlY2VpdmUgYnVmZmVyIGNyZWRpdHMgKi8KIAl1MzIgICAgICAgIGFkYXB0ZXJfcHJvcDsJLyogIGFkYXB0ZXIgcHJvcGVydGllcyAgICAgKi8KIAl1MTYgICAgICAgIG1heGZyc2l6ZTsJLyogIG1heCByZWNlaXZlIGZyYW1lIHNpemUgKi8KLQljaGFyICAgICAgICAgCWFzaWNfcmV2OwotCXU4ICAgICAgICAgcnN2ZF9iOwotCWNoYXIgICAgICAgICAgICBmd192ZXJzaW9uW0JGQV9WRVJTSU9OX0xFTl07Ci0JY2hhciAgICAgICAgICAgIG9wdHJvbV92ZXJzaW9uW0JGQV9WRVJTSU9OX0xFTl07CisJY2hhciAgICAgICBhc2ljX3JldjsKKwl1OCAgICAgICAgIHJzdmRfYzsKKwljaGFyICAgICAgIGZ3X3ZlcnNpb25bQkZBX1ZFUlNJT05fTEVOXTsKKwljaGFyICAgICAgIG9wdHJvbV92ZXJzaW9uW0JGQV9WRVJTSU9OX0xFTl07CiAJc3RydWN0IGJmYV9tZmdfdnBkX3MJdnBkOworCXUzMiAgICAgICAgY2FyZF90eXBlOwkvKiBjYXJkIHR5cGUgKi8KIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfaW9jZmMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2lvY2ZjLmgKaW5kZXggYzM3NjBkZi4uY2NkZmNjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfaW9jZmMuaAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9pb2NmYy5oCkBAIC0xOSw2ICsxOSw3IEBACiAjZGVmaW5lIF9fQkZJX0lPQ0ZDX0hfXwogCiAjaW5jbHVkZSAiYmZpLmgiCisjaW5jbHVkZSA8YmZpL2JmaV9wYmMuaD4KICNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2lvYy5oPgogI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfaW9jZmMuaD4KICNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2Jvb3QuaD4KQEAgLTc4LDYgKzc5LDcgQEAKIAlzdHJ1Y3QgYmZhX2lvY2ZjX2Z3Y2ZnX3MJZndjZmc7CiAJc3RydWN0IGJmYV9pb2NmY19pbnRyX2F0dHJfcwlpbnRyX2F0dHI7CiAJc3RydWN0IGJmaV9pb2NmY19ib290d3ducwlib290d3duczsKKwlzdHJ1Y3QgYmZpX3BiY19zICAgICAgICAgICAgICAgIHBiY19jZmc7CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX3BiYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfcGJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhhNDE1NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX3BiYy5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAxMCBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGSV9QQkNfSF9fCisjZGVmaW5lIF9fQkZJX1BCQ19IX18KKworI3ByYWdtYSBwYWNrKDEpCisKKyNkZWZpbmUgQkZJX1BCQ19NQVhfQkxVTlMJOAorI2RlZmluZSBCRklfUEJDX01BWF9WUE9SVFMJMTYKKworI2RlZmluZSBCRklfUEJDX1BPUlRfRElTQUJMRUQJIDIKKy8qKgorICogUEJDIGJvb3QgbHVuIGNvbmZpZ3VyYXRpb24KKyAqLworc3RydWN0IGJmaV9wYmNfYmx1bl9zIHsKKwl3d25fdAkJdGd0X3B3d247CisJbHVuX3QJCXRndF9sdW47Cit9OworCisvKioKKyAqIFBCQyB2aXJ0dWFsIHBvcnQgY29uZmlndXJhdGlvbgorICovCitzdHJ1Y3QgYmZpX3BiY192cG9ydF9zIHsKKwl3d25fdAkJdnBfcHd3bjsKKwl3d25fdAkJdnBfbnd3bjsKK307CisKKy8qKgorICogQkZJIHByZS1ib290IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24KKyAqLworc3RydWN0IGJmaV9wYmNfcyB7CisJdTgJCXBvcnRfZW5hYmxlZDsKKwl1OAkJYm9vdF9lbmFibGVkOworCXU4CQluYmx1bnM7CisJdTgJCW52cG9ydHM7CisJdTgJCXBvcnRfc3BlZWQ7CisJdTgJCXJzdmRfYTsKKwl1MTYJCWhzczsKKwl3d25fdAkJcGJjX3B3d247CisJd3duX3QJCXBiY19ud3duOworCXN0cnVjdCBiZmlfcGJjX2JsdW5fcyBibHVuW0JGSV9QQkNfTUFYX0JMVU5TXTsKKwlzdHJ1Y3QgYmZpX3BiY192cG9ydF9zIHZwb3J0W0JGSV9QQkNfTUFYX1ZQT1JUU107Cit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYgLyogX19CRklfUEJDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NuYS9wb3J0L2JmYV9wb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL3BvcnQvYmZhX3BvcnQuaAppbmRleCA3Y2JmMTdkLi5kN2JhYmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL3BvcnQvYmZhX3BvcnQuaAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL3BvcnQvYmZhX3BvcnQuaApAQCAtMzcsNiArMzcsNyBAQAogCWJmYV9wb3J0X3N0YXRzX2NiZm5fdCBzdGF0c19jYmZuOwogCXZvaWQgICAgICAgICAgICpzdGF0c19jYmFyZzsKIAliZmFfc3RhdHVzX3QgICAgc3RhdHNfc3RhdHVzOworCXUzMiAgICAgICAgICAgICBzdGF0c19yZXNldF90aW1lOwogCXVuaW9uIGJmYV9wcG9ydF9zdGF0c191ICpzdGF0czsKIAlzdHJ1Y3QgYmZhX2RtYV9zIHN0YXRzX2RtYTsKIAliZmFfYm9vbGVhbl90ICAgZW5kaXNfcGVuZGluZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfZGVidWcuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfZGVidWcuaAppbmRleCA0NDFiZTg2Li43NWE5MTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX2RlYnVnLmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9kZWJ1Zy5oCkBAIC0yOCw3ICsyOCw4IEBACiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIGJmYV9zbV9mYXVsdChfX21vZCwgX19ldmVudCkJZG8gewkJCQlcCi0JYmZhX3NtX3BhbmljKChfX21vZCktPmxvZ20sIF9fTElORV9fLCBfX0ZJTEVfXywgX19ldmVudCk7ICAgICAgXAorCWJmYV90cmMoX19tb2QsICgoKHVpbnQzMl90KTB4REVBRCA8PCAxNikgfCBfX2V2ZW50KSk7CQlcCisJYmZhX3NtX3BhbmljKChfX21vZCktPmxvZ20sIF9fTElORV9fLCBfX0ZJTEVfXywgX19ldmVudCk7IAlcCiB9IHdoaWxlICgwKQogCiAjaWZuZGVmIEJGQV9QRVJGX0JVSUxECmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19hZGFwdGVyLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19hZGFwdGVyLmgKaW5kZXggOGMyMDhmYy4uYWVhMDM2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYWRhcHRlci5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2FkYXB0ZXIuaApAQCAtMzksNyArMzksNyBAQAogc3RydWN0IGJmYV9hZGFwdGVyX2F0dHJfcyB7CiAJY2hhciAgICAgICAgICAgIG1hbnVmYWN0dXJlcltCRkFfQURBUFRFUl9NRkdfTkFNRV9MRU5dOwogCWNoYXIgICAgICAgICAgICBzZXJpYWxfbnVtW0JGQV9BREFQVEVSX1NFUklBTF9OVU1fTEVOXTsKLQl1MzIJcnN2ZDE7CisJdTMyCQljYXJkX3R5cGU7CiAJY2hhciAgICAgICAgICAgIG1vZGVsW0JGQV9BREFQVEVSX01PREVMX05BTUVfTEVOXTsKIAljaGFyICAgICAgICAgICAgbW9kZWxfZGVzY3JbQkZBX0FEQVBURVJfTU9ERUxfREVTQ1JfTEVOXTsKIAl3d25fdCAgICAgICAgICAgcHd3bjsKQEAgLTYwLDYgKzYwLDcgQEAKIAl1OCAgICAgICAgIHBjaWVfbGFuZXNfb3JpZzsKIAl1OCAgICAgICAgIHBjaWVfbGFuZXM7CiAJdTgJICAgICAgICBjbmFfY2FwYWJsZTsKKwl1OCAgICAgICAgIGlzX21leno7CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2F1dGguaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2F1dGguaAppbmRleCA0NWRmMzI4Li5mNTZlZDg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19hdXRoLmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYXV0aC5oCkBAIC0xMjUsMTAgKzEyNSwxMCBAQAogCWVudW0gYmZhX2F1dGhfc3RhdHVzIAlzdGF0dXM7CiAJZW51bSBiZmFfYXV0aF9hbGdvIAlhbGdvOwogCWVudW0gYmZhX2F1dGhfZ3JvdXAgCWRoX2dycDsKLQl1MTYJCXJqdF9jb2RlOwotCXUxNgkJcmp0X2NvZGVfZXhwOworCWVudW0gYmZhX2F1dGhfcmVqX2NvZGUgIHJqdF9jb2RlOworCWVudW0gYmZhX2F1dGhfcmVqX2NvZGVfZXhwIHJqdF9jb2RlX2V4cDsKIAl1OAkJCXNlY3JldF9zZXQ7Ci0JdTgJCQlyZXN2WzddOworCXU4CQkJcmVzdlszXTsKIH07CiAKICNlbmRpZiAvKiBfX0JGQV9ERUZTX0FVVEhfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19ib290LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19ib290LmgKaW5kZXggNmY0YWE1Mi4uMGZjYTEwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYm9vdC5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2Jvb3QuaApAQCAtMjQsNiArMjQsOCBAQAogCiBlbnVtIHsKIAlCRkFfQk9PVF9CT09UTFVOX01BWCA9IDQsCS8qICBtYXhpbXVtIGJvb3QgbHVuIHBlciBJT0MgKi8KKwlCRkFfUFJFQk9PVF9CT09UTFVOX01BWCA9IDgsICAgIC8qICBtYXhpbXVtIHByZWJvb3QgbHVuIHBlciBJT0MgKi8KKwogfTsKIAogI2RlZmluZSBCT09UX0NGR19SRVYxCTEKQEAgLTY3LDUgKzY5LDEzIEBACiAJc3RydWN0IGJmYV9ib290X2Jvb3RsdW5fcyBibHVuX2Rpc2NbQkZBX0JPT1RfQk9PVExVTl9NQVhdOwogfTsKIAorc3RydWN0IGJmYV9ib290X3BiY19zIHsKKwl1OCAgICAgICAgIGVuYWJsZTsgICAgICAgICAvKiBlbmFibGUvZGlzYWJsZSBTQU4gYm9vdCAqLworCXU4ICAgICAgICAgc3BlZWQ7ICAgICAgICAgIC8qIGJvb3Qgc3BlZWQgc2V0dGluZ3MgKi8KKwl1OCAgICAgICAgIHRvcG9sb2d5OyAgICAgICAvKiBib290IHRvcG9sb2d5IHNldHRpbmcgKi8KKwl1OCAgICAgICAgIHJzdmQxOworCXUzMiAgICAgICAgbmJsdW5zOyAgICAgICAgIC8qIG51bWJlciBvZiBib290IGx1bnMgKi8KKwlzdHJ1Y3QgYmZhX2Jvb3RfYm9vdGx1bl9zIHBibHVuW0JGQV9QUkVCT09UX0JPT1RMVU5fTUFYXTsKK307CiAKICNlbmRpZiAvKiBfX0JGQV9ERUZTX0JPT1RfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19kcml2ZXIuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2RyaXZlci5oCmluZGV4IDUwMzgyZGQuLjdkMDBkMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2RyaXZlci5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2RyaXZlci5oCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgdTE2ICAgIHRtX3RhcmdldF9yZXNldDsKICAgICB1MTYgICAgdG1fYnVzX3Jlc2V0OwogICAgIHUxNiAgICBpb2NfcmVzdGFydDsgICAgICAgIC8qICBJT0MgcmVzdGFydCBjb3VudCAqLwotICAgIHUxNiAgICBpb19wZW5kaW5nOyAgICAgICAgIC8qICBvdXRzdGFuZGluZyBpbyBjb3VudCBwZXItSU9DICovCisgICAgdTE2ICAgIHJzdmQ7CiAgICAgdTY0ICAgIGNvbnRyb2xfcmVxOwogICAgIHU2NCAgICBpbnB1dF9yZXE7CiAgICAgdTY0ICAgIG91dHB1dF9yZXE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19mY3BvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2ZjcG9ydC5oCmluZGV4IGEwN2VmNGEuLmFmODZhNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2ZjcG9ydC5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2ZjcG9ydC5oCkBAIC00OCw3ICs0OCw3IEBACiAJdTY0CWRpc2NfZmNmX3VuYXZhaWw7IC8qICBEaXNjb3ZlcnkgRkNGIG5vdCBhdmFpbAkgICAgICovCiAJdTY0CWxpbmtzdmNfdW5zdXBwOwkvKiAgRklQIGxpbmsgc2VydmljZSByZXEgdW5zdXBwLiAgICAqLwogCXU2NAlsaW5rc3ZjX2VycjsJLyogIEZJUCBsaW5rIHNlcnZpY2UgcmVxIGVycm9ycyAgICAgKi8KLQl1NjQJbG9nb19yZXE7CS8qICBGSVAgbG9nbwkJCSAgICAgKi8KKwl1NjQJbG9nb19yZXE7CS8qICBGSVAgbG9nb3MgcmVjZWl2ZWQJCQkgICAgICovCiAJdTY0CWNscnZsaW5rX3JlcTsJLyogIENsZWFyIHZpcnR1YWwgbGluayByZXF1ZXN0cyAgICAgKi8KIAl1NjQJb3BfdW5zdXBwOwkvKiAgRklQIG9wZXJhdGlvbiB1bnN1cHAuCSAgICAgKi8KIAl1NjQJdW50YWdnZWQ7CS8qICBGSVAgdW50YWdnZWQgZnJhbWVzCSAgICAgKi8KQEAgLTY0LDIxICs2NCwxNSBAQAogCXU2NAl0eGZfdGltZW91dDsJLyogIFR4IHRpbWVvdXRzCQkgICAgICovCiAJdTY0CXR4Zl9wYXJpdHlfZXJyb3JzOyAvKiAgVHJhbnNtaXQgcGFyaXR5IGVycgkgICAgICovCiAJdTY0CXR4Zl9maWRfcGFyaXR5X2Vycm9yczsgLyogIFRyYW5zbWl0IEZJRCBwYXJpdHkgZXJyICAqLwotCXU2NAl0eF9wYXVzZTsJLyogIFR4IHBhdXNlIGZyYW1lcwkJICAgICAqLwotCXU2NAl0eF96ZXJvX3BhdXNlOwkvKiAgVHggemVybyBwYXVzZSBmcmFtZXMJICAgICAqLwotCXU2NAl0eF9maXJzdF9wYXVzZTsJLyogIFR4IGZpcnN0IHBhdXNlIGZyYW1lcwkgICAgICovCi0JdTY0CXJ4X3BhdXNlOwkvKiAgUnggcGF1c2UgZnJhbWVzCQkgICAgICovCi0JdTY0CXJ4X3plcm9fcGF1c2U7CS8qICBSeCB6ZXJvIHBhdXNlIGZyYW1lcwkgICAgICovCi0JdTY0CXJ4X2ZpcnN0X3BhdXNlOwkvKiAgUnggZmlyc3QgcGF1c2UgZnJhbWVzCSAgICAgKi8KLQl1NjQJcnhmX3VjYXN0X29jdGV0czsgLyogIFJ4IHVuaWNhc3Qgb2N0ZXRzCSAgICAgKi8KLQl1NjQJcnhmX3VjYXN0OwkvKiAgUnggdW5pY2FzdCBmcmFtZXMJCSAgICAgKi8KLQl1NjQJcnhmX3VjYXN0X3ZsYW47CS8qICBSeCB1bmljYXN0IHZsYW4gZnJhbWVzCSAgICAgKi8KLQl1NjQJcnhmX21jYXN0X29jdGV0czsgLyogIFJ4IG11bHRpY2FzdCBvY3RldHMJICAgICAqLwotCXU2NAlyeGZfbWNhc3Q7CS8qICBSeCBtdWx0aWNhc3QgZnJhbWVzCSAgICAgKi8KLQl1NjQJcnhmX21jYXN0X3ZsYW47CS8qICBSeCBtdWx0aWNhc3QgdmxhbiBmcmFtZXMJICAgICAqLwotCXU2NAlyeGZfYmNhc3Rfb2N0ZXRzOyAvKiAgUnggYnJvYWRjYXN0IG9jdGVzdHMJICAgICAqLwotCXU2NAlyeGZfYmNhc3Q7CS8qICBSeCBicm9hZGNhc3QgZnJhbWVzCSAgICAgKi8KLQl1NjQJcnhmX2JjYXN0X3ZsYW47CS8qICBSeCBicm9hZGNhc3QgdmxhbiBmcmFtZXMJICAgICAqLworCXU2NCAgICAgcnhmX3VjYXN0X29jdGV0czsgLyogUnggRkNvRSB1bmljYXN0IG9jdGV0cyAgICAgICAgKi8KKwl1NjQgICAgIHJ4Zl91Y2FzdDsgICAgICAvKiBSeCBGQ29FIHVuaWNhc3QgZnJhbWVzICAgICAgICAgICovCisJdTY0ICAgICByeGZfdWNhc3RfdmxhbjsgLyogUnggRkNvRSB1bmljYXN0IHZsYW4gZnJhbWVzICAgICAqLworCXU2NCAgICAgcnhmX21jYXN0X29jdGV0czsgLyogUnggRkNvRSBtdWx0aWNhc3Qgb2N0ZXRzICAgICAgKi8KKwl1NjQgICAgIHJ4Zl9tY2FzdDsgICAgICAvKiBSeCBGQ29FIG11bHRpY2FzdCBmcmFtZXMgICAgICAgICovCisJdTY0ICAgICByeGZfbWNhc3RfdmxhbjsgLyogUnggRkNvRSBtdWx0aWNhc3QgdmxhbiBmcmFtZXMgICAqLworCXU2NCAgICAgcnhmX2JjYXN0X29jdGV0czsgLyogUnggRkNvRSBicm9hZGNhc3Qgb2N0ZXRzICAgICAgKi8KKwl1NjQgICAgIHJ4Zl9iY2FzdDsgICAgICAvKiBSeCBGQ29FIGJyb2FkY2FzdCBmcmFtZXMgICAgICAgICovCisJdTY0ICAgICByeGZfYmNhc3RfdmxhbjsgLyogUnggRkNvRSBicm9hZGNhc3QgdmxhbiBmcmFtZXMgICAqLwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pb2MuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2lvYy5oCmluZGV4IDhkOGU2YTkuLmFkZDBhMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2lvYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2lvYy5oCkBAIC0xMjYsNyArMTI2LDcgQEAKIAlzdHJ1Y3QgYmZhX2lvY19kcml2ZXJfYXR0cl9zIAlkcml2ZXJfYXR0cjsJLyogIGRyaXZlciBhdHRyICAgICovCiAJc3RydWN0IGJmYV9pb2NfcGNpX2F0dHJfcwlwY2lfYXR0cjsKIAl1OAkJCQlwb3J0X2lkOwkvKiAgcG9ydCBudW1iZXIgICAgKi8KLQl1OAkJCQlyc3ZkWzddOwkvKiE8IDY0Yml0IGFsaWduICAgICovCisJdTgJCQkJcnN2ZFs3XTsJLyogIDY0Yml0IGFsaWduICAgICovCiB9OwogCiAvKioKQEAgLTEzOCw2ICsxMzgsMTEgQEAKIAlCRkFfSU9DX0FFTl9FTkFCTEUJPSAzLAkvKiAgSU9DIGVuYWJsZWQgZXZlbnQJCSovCiAJQkZBX0lPQ19BRU5fRElTQUJMRQk9IDQsCS8qICBJT0MgZGlzYWJsZWQgZXZlbnQJCSovCiAJQkZBX0lPQ19BRU5fRldNSVNNQVRDSAk9IDUsCS8qICBJT0MgZmlybXdhcmUgbWlzbWF0Y2gJKi8KKwlCRkFfSU9DX0FFTl9GV0NGR19FUlJPUiA9IDYsICAgIC8qICBJT0MgZmlybXdhcmUgY29uZmlnIGVycm9yICAgKi8KKwlCRkFfSU9DX0FFTl9JTlZBTElEX1ZFTkRPUiA9IDcsCisJQkZBX0lPQ19BRU5fSU5WQUxJRF9OV1dOID0gOCwgICAvKiAgWmVybyBOV1dOICAgICAgICAgICAgICAgICAgICovCisJQkZBX0lPQ19BRU5fSU5WQUxJRF9QV1dOID0gOSAgICAvKiAgWmVybyBQV1dOICAgICAgICAgICAgICAgICAgICovCisKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaW9jZmMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2lvY2ZjLmgKaW5kZXggYzI5MGZiMS4uMzFlNzI4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaW9jZmMuaAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pb2NmYy5oCkBAIC01MSw4ICs1MSwxMCBAQAogCXUxNiAgICAgICAgbnVtX3Rza3RtX3JlcXM7CS8qICBUTSB0YXNrIG1hbmFnZW1lbnQgcmVxdWVzdHMqLwogCXUxNiAgICAgICAgbnVtX2ZjeHBfcmVxczsJLyogIHVuYXNzaXN0ZWQgRkMgZXhjaGFuZ2VzCSovCiAJdTE2ICAgICAgICBudW1fdWZfYnVmczsJLyogIHVuc29saWNpdGVkIHJlY3YgYnVmZmVycwkqLwotCXU4CQludW1fY3FzOwotCXU4CQlyc3ZkWzVdOworCXU4CSAgIG51bV9jcXM7CisJdTggICAgICAgICBmd190aWNrX3JlczsgICAgLyohPCBGVyBjbG9jayByZXNvbHV0aW9uIGluIG1zICovCisJdTggICAgICAgICByc3ZkWzRdOworCiB9OwogCiBzdHJ1Y3QgYmZhX2lvY2ZjX2RydmNmZ19zIHsKQEAgLTE3NiwxMCArMTc4LDEwIEBACiAgICAgdTMyICAgIG5vc19yeDsKICAgICB1MzIgICAgbGlwX3J4OwogICAgIHUzMiAgICBhcmJmMF9yeDsKKyAgICB1MzIgICAgYXJiX3J4OwogICAgIHUzMiAgICBtcmtfcng7CiAgICAgdTMyICAgIGNvbnN0X21ya19yeDsKICAgICB1MzIgICAgcHJpbV91bmtub3duOwotICAgIHUzMiAgICByc3ZkOwogfTsKIAogCkBAIC0yMDAsNiArMjAyLDggQEAKICAgICB1MzIgICAgbHJyX3R4OyAgICAgICAgICAgICAvKiAgTm8uIG9mIHRpbWVzIExSUiB0eCBzdGFydGVkICAgICAgICAgKi8KICAgICB1MzIgICAgb2xzX3R4OyAgICAgICAgICAgICAvKiAgTm8uIG9mIHRpbWVzIE9MUyB0eCBzdGFydGVkICAgICAgICAgKi8KICAgICB1MzIgICAgbm9zX3R4OyAgICAgICAgICAgICAvKiAgTm8uIG9mIHRpbWVzIE5PUyB0eCBzdGFydGVkICAgICAgICAgKi8KKyAgICB1MzIgICAgaHdzbV9scnJfcng7ICAgICAgICAvKiAgTm8uIG9mIHRpbWVzIExSUiByeC1lZCBieSBIV1NNICAgICAgKi8KKyAgICB1MzIgICAgaHdzbV9scl9yeDsgICAgICAgICAvKiBOby4gb2YgdGltZXMgTFIgcngtZWQgYnkgSFdTTSAgICAgICAgKi8KIH07CiAKIApAQCAtMjM5LDcgKzI0Myw3IEBACiAgICAgdTMyICAgIGRpc2NfZmNmX3VuYXZhaWw7ICAgLyogIERpc2NvdmVyeSBGQ0YgTm90IEF2YWlsLiAgICAgICAgICAgICovCiAgICAgdTMyICAgIGxpbmtzdmNfdW5zdXBwOyAgICAgLyogIFVuc3VwcG9ydGVkIGxpbmsgc2VydmljZSByZXEgICAgICAgICovCiAgICAgdTMyICAgIGxpbmtzdmNfZXJyOyAgICAgICAgLyogIFBhcnNlIGVycm9yIGluIGxpbmsgc2VydmljZSByZXEgICAgICovCi0gICAgdTMyICAgIGxvZ29fcmVxOyAgICAgICAgICAgLyogIE51bWJlciBvZiBGSVAgbG9nb3MgcmVjZWl2ZWQgICAgICAgICovCisgICAgdTMyICAgIGxvZ29fcmVxOyAgICAgICAgICAgLyogIEZJUCBsb2dvcyByZWNlaXZlZAkgICAgICAgICAgICAgICAqLwogICAgIHUzMiAgICBjbHJ2bGlua19yZXE7ICAgICAgIC8qICBDbGVhciB2aXJ0dWFsIGxpbmsgcmVxICAgICAgICAgICAgICAqLwogICAgIHUzMiAgICBvcF91bnN1cHA7ICAgICAgICAgIC8qICBVbnN1cHBvcnRlZCBGSVAgb3BlcmF0aW9uICAgICAgICAgICAqLwogICAgIHUzMiAgICB1bnRhZ2dlZDsgICAgICAgICAgIC8qICBVbnRhZ2dlZCBmcmFtZXMgKGlnbm9yZWQpICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaXRuaW0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2l0bmltLmgKaW5kZXggMmVjNzY5OS4uZDc3Nzg4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaXRuaW0uaAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pdG5pbS5oCkBAIC0zNCw2ICszNCwxNSBAQAogCUJGQV9JVE5JTV9JTklUSUFUSU9SIAk9IDcsCS8qICBpbml0aWF0b3IgKi8KIH07CiAKK3N0cnVjdCBiZmFfaXRuaW1fbGF0ZW5jeV9zIHsKKwl1MzIJbWluOworCXUzMgltYXg7CisJdTMyCWNvdW50OworCXUzMgljbG9ja19yZXM7CisJdTMyCWF2ZzsKKwl1MzIJcnN2ZDsKK307CisKIHN0cnVjdCBiZmFfaXRuaW1faGFsX3N0YXRzX3MgewogCXUzMglvbmxpbmVzOwkvKiAgSVROIG5leHVzIG9ubGluZXMgKFBSTEkgZG9uZSkgKi8KIAl1MzIJb2ZmbGluZXM7CS8qICBJVE4gTmV4dXMgb2ZmbGluZXMgCSovCkBAIC05MSw2ICsxMDAsNyBAQAogCXU4CXRhc2tfcmV0cnlfaWQ7ICAvKiAgdGFzayByZXRyeSBpZGVudCBzdXBwb3J0ICAgKi8KIAl1OCByZWNfc3VwcG9ydDsgICAgLyogIFJFQyBzdXBwb3J0ZWQgICAgICAgICAgICAgICovCiAJdTggY29uZl9jb21wOyAgICAgIC8qICBjb25maXJtZWQgY29tcGxldGlvbiBzdXBwICAqLworCXN0cnVjdCBiZmFfaXRuaW1fbGF0ZW5jeV9zICBpb19sYXRlbmN5OyAvKiBJTyBsYXRlbmN5ICAqLwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19tZmcuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX21mZy5oCmluZGV4IGM1YmQ5YzMuLmQyMmZiNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX21mZy5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX21mZy5oCkBAIC00NSwyNiArNDUsNiBAQAogI2RlZmluZSBCRkFfTUZHX0NIS1NVTV9TSVpFCQkJMTYKIAogLyoqCi0gKiBNYW51ZmFjdHVyaW5nIGJsb2NrIGVuY3J5cHRlZCB2ZXJzaW9uCi0gKi8KLSNkZWZpbmUgQkZBX01GR19FTkNfVkVSCQkJCTIKLQotLyoqCi0gKiBNYW51ZmFjdHVyaW5nIGJsb2NrIHZlcnNpb24gMSBsZW5ndGgKLSAqLwotI2RlZmluZSBCRkFfTUZHX1ZFUjFfTEVOCQkJMTI4Ci0KLS8qKgotICogTWFudWZhY3R1cmluZyBibG9jayBoZWFkZXIgbGVuZ3RoCi0gKi8KLSNkZWZpbmUgQkZBX01GR19IRFJfTEVOCQkJCTQKLQotLyoqCi0gKiBDaGVja3N1bSBzaXplCi0gKi8KLSNkZWZpbmUgQkZBX01GR19DSEtTVU1fU0laRQkJCTE2Ci0KLS8qKgogICogTWFudWZhY3R1cmluZyBibG9jayBmb3JtYXQKICAqLwogI2RlZmluZSBCRkFfTUZHX1NFUklBTE5VTV9TSVpFCQkJMTEKQEAgLTg2LDYgKzY2LDkgQEAKIAlCRkFfTUZHX1RZUEVfRkM0UDEgICA9IDQxNSwgICAgICAvKiAgNEcgMXBvcnQgRkMgY2FyZAkJKi8KIAlCRkFfTUZHX1RZUEVfQ05BMTBQMiA9IDEwMjAsICAgICAvKiAgMTBHIDJwb3J0IENOQSBjYXJkCSovCiAJQkZBX01GR19UWVBFX0NOQTEwUDEgPSAxMDEwLCAgICAgLyogIDEwRyAxcG9ydCBDTkEgY2FyZAkqLworCUJGQV9NRkdfVFlQRV9KQVlIQVdLID0gODA0LCAgICAgIC8qICBKYXloYXdrIG1lenogY2FyZCAqLworCUJGQV9NRkdfVFlQRV9XQU5DSEVTRSA9IDEwMDcsICAgIC8qICBXYW5jaGVzZSBtZXp6IGNhcmQgKi8KKwlCRkFfTUZHX1RZUEVfSU5WQUxJRCA9IDAsICAgICAgICAvKiAgSW52YWxpZCBjYXJkIHR5cGUgKi8KIH07CiAKICNwcmFnbWEgcGFjaygxKQpAQCAtOTUsNiArNzgsMjQgQEAKICAqLwogI2RlZmluZSBiZmFfbWZnX3R5cGUycG9ydF9udW0oY2FyZF90eXBlKSAoKChjYXJkX3R5cGUpIC8gMTApICUgMTApCiAKKy8qKgorICogQ2hlY2sgaWYgTWV6eiBjYXJkCisgKi8KKyNkZWZpbmUgYmZhX21mZ19pc19tZXp6KHR5cGUpICgoIFwKKwkodHlwZSkgPT0gQkZBX01GR19UWVBFX0pBWUhBV0sgfHwgXAorCSh0eXBlKSA9PSBCRkFfTUZHX1RZUEVfV0FOQ0hFU0UpKQorCisvKioKKyAqIENoZWNrIGlmIGNhcmQgdHlwZSB2YWxpZAorICovCisjZGVmaW5lIGJmYV9tZmdfaXNfY2FyZF90eXBlX3ZhbGlkKHR5cGUpICgoIFwKKwkodHlwZSkgPT0gQkZBX01GR19UWVBFX0ZDOFAyIHx8IFwKKwkodHlwZSkgPT0gQkZBX01GR19UWVBFX0ZDOFAxIHx8IFwKKwkodHlwZSkgPT0gQkZBX01GR19UWVBFX0ZDNFAyIHx8IFwKKwkodHlwZSkgPT0gQkZBX01GR19UWVBFX0ZDNFAxIHx8IFwKKwkodHlwZSkgPT0gQkZBX01GR19UWVBFX0NOQTEwUDIgfHwgXAorCSh0eXBlKSA9PSBCRkFfTUZHX1RZUEVfQ05BMTBQMSB8fCBcCisJYmZhX21mZ19pc19tZXp6KHR5cGUpKSkKIAogLyoqCiAgKiBBbGwgbnVtZXJpY2FsIGZpZWxkcyBhcmUgaW4gYmlnLWVuZGlhbiBmb3JtYXQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wY2kuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3BjaS5oCmluZGV4IGM5YjgzMzIuLmVhN2Q4OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3BjaS5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3BjaS5oCkBAIC0yNiw4ICsyNiwxMyBAQAogCUJGQV9QQ0lfREVWSUNFX0lEX0ZDXzhHMlAJPSAweDEzLAogCUJGQV9QQ0lfREVWSUNFX0lEX0ZDXzhHMVAJPSAweDE3LAogCUJGQV9QQ0lfREVWSUNFX0lEX0NUCQk9IDB4MTQsCisJQkZBX1BDSV9ERVZJQ0VfSURfQ1RfRkMgICAgICAgICA9IDB4MjEsCiB9OwogCisjZGVmaW5lIGJmYV9hc2ljX2lkX2N0KGRldmlkKSAgICAgICAgICAgICAgICAgICBcCisJKChkZXZpZCkgPT0gQkZBX1BDSV9ERVZJQ0VfSURfQ1QgfHwgICAgIFwKKwkgKGRldmlkKSA9PSBCRkFfUENJX0RFVklDRV9JRF9DVF9GQykKKwogLyoqCiAgKiBQQ0kgc3ViLXN5c3RlbSBkZXZpY2UgYW5kIHZlbmRvciBJRCBpbmZvcm1hdGlvbgogICovCkBAIC0zNSw3ICs0MCw5IEBACiAJQkZBX1BDSV9GQ09FX1NTREVWSUNFX0lECT0gMHgxNCwKIH07CiAKLSNkZWZpbmUgQkZBX1BDSV9BQ0NFU1NfUkFOR0VTIDEJLyogTWF4aW11bSBudW1iZXIgb2YgZGV2aWNlIGFkZHJlc3MgcmFuZ2VzCi0JCQkJICogbWFwcGVkIHRocm91Z2ggZGlmZmVyZW50IEJBUihzKS4gKi8KKy8qKgorICogTWF4aW11bSBudW1iZXIgb2YgZGV2aWNlIGFkZHJlc3MgcmFuZ2VzIG1hcHBlZCB0aHJvdWdoIGRpZmZlcmVudCBCQVIocykKKyAqLworI2RlZmluZSBCRkFfUENJX0FDQ0VTU19SQU5HRVMgMQogCiAjZW5kaWYgLyogX19CRkFfREVGU19QQ0lfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wb3J0LmgKaW5kZXggNTAxYmM5Ny4uZWJkZjBkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcG9ydC5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3BvcnQuaApAQCAtNTAsMTIgKzUwLDEyIEBACiAgKiBGQ1MgcG9ydCBjb25maWd1cmF0aW9uLgogICovCiBzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgewotICAgIHd3bl90ICAgICAgICAgICAgICAgcHd3bjsgICAgICAgLyogIHBvcnQgd3duICovCi0gICAgd3duX3QgICAgICAgICAgICAgICBud3duOyAgICAgICAvKiAgbm9kZSB3d24gKi8KLSAgICBzdHJ1Y3QgYmZhX3BvcnRfc3ltbmFtZV9zICBzeW1fbmFtZTsgICAvKiAgdm0gcG9ydCBzeW1ib2xpYyBuYW1lICovCi0gICAgZW51bSBiZmFfcG9ydF9yb2xlICAgICByb2xlczsgICAgICAvKiAgRkNTIHBvcnQgcm9sZXMgKi8KLQl1MzIJCQlyc3ZkOwotICAgIHU4ICAgICAgICAgICAgIHRhZ1sxNl07CS8qICBvcGFxdWUgdGFnIGZyb20gYXBwbGljYXRpb24gKi8KKwl3d25fdCAgICAgICAgICAgICAgIHB3d247ICAgICAgIC8qICBwb3J0IHd3biAqLworCXd3bl90ICAgICAgICAgICAgICAgbnd3bjsgICAgICAgLyogIG5vZGUgd3duICovCisJc3RydWN0IGJmYV9wb3J0X3N5bW5hbWVfcyAgc3ltX25hbWU7ICAgLyogIHZtIHBvcnQgc3ltYm9saWMgbmFtZSAqLworCWJmYV9ib29sZWFuX3QgICAgICAgcHJlYm9vdF92cDsgIC8qIHZwb3J0IGNyZWF0ZWQgZnJvbSBQQkMgKi8KKwllbnVtIGJmYV9wb3J0X3JvbGUgICAgIHJvbGVzOyAgICAgIC8qICBGQ1MgcG9ydCByb2xlcyAqLworCXU4ICAgICAgICAgICAgIHRhZ1sxNl07CS8qICBvcGFxdWUgdGFnIGZyb20gYXBwbGljYXRpb24gKi8KIH07CiAKIC8qKgpAQCAtMTU5LDcgKzE1OSw3IEBACiAJdTMyICAgICAgICBtc19wbG9naV9yc3BfZXJyOwogCXUzMiAgICAgICAgbXNfcGxvZ2lfYWNjX2VycjsKIAl1MzIgICAgICAgIG1zX3Bsb2dpX2FjY2VwdHM7Ci0JdTMyICAgICAgICBtc19yZWplY3RzOwkvKiBOUyBjb21tYW5kIHJlamVjdHMgKi8KKwl1MzIgICAgICAgIG1zX3JlamVjdHM7CS8qIE1TIGNvbW1hbmQgcmVqZWN0cyAqLwogCXUzMiAgICAgICAgbXNfcGxvZ2lfdW5rbm93bl9yc3A7CiAJdTMyICAgICAgICBtc19wbG9naV9hbGxvY193YWl0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wcG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcHBvcnQuaAppbmRleCAyNmU1Y2M3Li4yZGU2NzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wcG9ydC5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Bwb3J0LmgKQEAgLTM4LDYgKzM4LDcgQEAKIAlCRkFfUFBPUlRfU1RfSU9DRE9XTiAJCT0gMTAsCiAJQkZBX1BQT1JUX1NUX0lPQ0RJUyAJCT0gMTEsCiAJQkZBX1BQT1JUX1NUX0ZXTUlTTUFUQ0gJCT0gMTIsCisJQkZBX1BQT1JUX1NUX1BSRUJPT1RfRElTQUJMRUQgICA9IDEzLAogCUJGQV9QUE9SVF9TVF9NQVhfU1RBVEUsCiB9OwogCkBAIC0yMDMsNiArMjA0LDggQEAKIAkgKi8KIAl3d25fdCAgICAgICAgICAgbnd3bjsJCS8qICBub2RlIHd3biAqLwogCXd3bl90ICAgICAgICAgICBwd3duOwkJLyogIHBvcnQgd3duICovCisJd3duX3QgICAgICAgICAgIGZhY3Rvcnlud3duOyAgICAvKiAgZmFjdG9yeSBub2RlIHd3biAqLworCXd3bl90ICAgICAgICAgICBmYWN0b3J5cHd3bjsgICAgLyogIGZhY3RvcnkgcG9ydCB3d24gKi8KIAllbnVtIGZjX2NvcyAgICAgY29zX3N1cHBvcnRlZDsJLyogIHN1cHBvcnRlZCBjbGFzcyBvZiBzZXJ2aWNlcyAqLwogCXUzMiAgICAgICAgcnN2ZDsKIAlzdHJ1Y3QgZmNfc3ltbmFtZV9zICAgIHBvcnRfc3ltbmFtZTsJLyogIHBvcnQgc3ltYm9saWMgbmFtZSAqLwpAQCAtMjQzLDcgKzI0Niw3IEBACiAJdTY0ICAgIHNlY3NfcmVzZXQ7IC8qIFNlY29uZHMgc2luY2Ugc3RhdHMgaXMgcmVzZXQgICAgICovCiAJdTY0ICAgIHR4X2ZyYW1lczsgIC8qIFR4IGZyYW1lcyAgICAgICAgICAgICAgICAqLwogCXU2NCAgICB0eF93b3JkczsgICAvKiBUeCB3b3JkcyAgICAgICAgICAgICAgICAgKi8KLQl1NjQgICAgdHhfbGlwOyAgICAgLyogVFggTElQICAgICAgICAgICAgICAgKi8KKwl1NjQgICAgdHhfbGlwOyAgICAgLyogVHggTElQICAgICAgICAgICAgICAgKi8KIAl1NjQgICAgdHhfbm9zOyAgICAgLyogVHggTk9TICAgICAgICAgICAgICAgKi8KIAl1NjQgICAgdHhfb2xzOyAgICAgLyogVHggT0xTICAgICAgICAgICAgICAgKi8KIAl1NjQgICAgdHhfbHI7ICAgICAgLyogVHggTFIgICAgICAgICAgICAgICAgKi8KQEAgLTMwOSw3ICszMTIsNyBAQAogCXU2NCAgICByeF96ZXJvX3BhdXNlOyAgICAvKiBSeCB6ZXJvIHBhdXNlICAgICAgICAgICAgICAqLwogCXU2NCAgICB0eF9wYXVzZTsgICAgIC8qIFR4IHBhdXNlICAgICAgICAgICAgICAgKi8KIAl1NjQgICAgdHhfemVyb19wYXVzZTsgICAgLyogVHggemVybyBwYXVzZSAgICAgICAgICAgICAgKi8KLQl1NjQgICAgcnhfZmNvZV9wYXVzZTsgICAgLyogUnggZmNvZSBwYXVzZSAgICAgICAgICAgICAgKi8KKwl1NjQgICAgcnhfZmNvZV9wYXVzZTsgICAgLyogUnggRkNvRSBwYXVzZSAgICAgICAgICAgICAgKi8KIAl1NjQgICAgcnhfZmNvZV96ZXJvX3BhdXNlOyAvKiBSeCBGQ29FIHplcm8gcGF1c2UgICAgICAgKi8KIAl1NjQgICAgdHhfZmNvZV9wYXVzZTsgICAgLyogVHggRkNvRSBwYXVzZSAgICAgICAgICAgICAgKi8KIAl1NjQgICAgdHhfZmNvZV96ZXJvX3BhdXNlOyAvKiBUeCBGQ29FIHplcm8gcGF1c2UgICAgICAgKi8KQEAgLTM4MSwyNiArMzg0LDEwIEBACiAJdTggICAgICAgICB0cnVua2VkOwkvKiAgVHJ1bmtlZCBvciBub3QgKDEgb3IgMCkgKi8KIAl1OCAgICAgICAgIHJlc3ZkWzNdOwogCXN0cnVjdCBiZmFfcW9zX2F0dHJfcyAgcW9zX2F0dHI7ICAgLyogUW9TIEF0dHJpYnV0ZXMgKi8KLQlzdHJ1Y3QgYmZhX3Fvc192Y19hdHRyX3MgcW9zX3ZjX2F0dHI7ICAvKiAgVkMgaW5mbyBmcm9tIEVMUCAqLwogCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCXU4ICAgICAgICAgdG1hc3RlcjsvKiAgVHJ1bmsgTWFzdGVyIG9yCi0JCQkJCQkgKiAgICBub3QgKDEgb3IgMCkgKi8KLQkJCXU4ICAgICAgICAgdGxpbmtzOwkvKiAgVHJ1bmsgbGlua3MgYml0bWFwCi0JCQkJCQkgKiAgICAobGlua3VwKSAqLwotCQkJdTggICAgICAgICByZXN2MTsJLyogIFJlc2VydmVkICovCi0JCX0gdHJ1bmtfaW5mbzsKLQotCQlzdHJ1Y3QgewotCQkJdTggICAgICAgICBteWFscGE7CSAgIC8qICBhbHBhIGNsYWltZWQgKi8KLQkJCXU4ICAgICAgICAgbG9naW5fcmVxOyAvKiAgTG9naW4gcmVxdWlyZWQgb3IKLQkJCQkJCSAgICAqICAgIG5vdCAoMSBvciAwKSAqLwotCQkJdTggICAgICAgICBhbHBhYm1fdmFsOy8qICBhbHBhIGJpdG1hcCB2YWxpZAotCQkJCQkJICAgICogICAgb3Igbm90ICgxIG9yIDApICovCi0JCQlzdHJ1Y3QgZmNfYWxwYWJtX3MgICAgIGFscGFibTsJICAgLyogIGFscGEgYml0bWFwICovCi0JCX0gbG9vcF9pbmZvOwotCX0gdGw7Ci0Jc3RydWN0IGJmYV9mY3BvcnRfZmNmX3MgZmNmOyAgICAvKiE8IEZDRiBpbmZvcm1hdGlvbiAoZm9yIEZDb0UpICovCisJCXN0cnVjdCBiZmFfcW9zX3ZjX2F0dHJfcyBxb3NfdmNfYXR0cjsgIC8qIFZDIGluZm8gZnJvbSBFTFAgKi8KKwkJc3RydWN0IGJmYV9mY3BvcnRfZmNmX3MgZmNmOyAgICAvKiBGQ0YgaW5mb3JtYXRpb24gKGZvciBGQ29FKSAqLworCX0gdmNfZmNmOwogfTsKIAogI2VuZGlmIC8qIF9fQkZBX0RFRlNfUFBPUlRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19zdGF0dXMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3N0YXR1cy5oCmluZGV4IGVjNzhiNGMuLjZlYjRlNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3N0YXR1cy5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3N0YXR1cy5oCkBAIC04NCw4ICs4NCw5IEBACiAJQkZBX1NUQVRVU19CQURGUk1IRFIgCT0gNDgsCS8qICBCYWQgZnJhbWUgaGVhZGVyICovCiAJQkZBX1NUQVRVU19CQURGUk1TWiAJPSA0OSwJLyogIEJhZCBmcmFtZSBzaXplIGNoZWNrIGFuZCByZXBsYWNlCiAJCQkJCSAqIFNGUC9jYWJsZSAqLwotCUJGQV9TVEFUVVNfTUlTU0lOR0ZSTSAJPSA1MCwJLyogIE1pc3NpbmcgZnJhbWUgY2hlY2sgYW5kIHJlcGxhY2UKLQkJCQkJICogU0ZQL2NhYmxlICovCisJQkZBX1NUQVRVU19NSVNTSU5HRlJNIAk9IDUwLCAgIC8qIE1pc3NpbmcgZnJhbWUgY2hlY2sgYW5kIHJlcGxhY2UKKwkJCQkJICogU0ZQL2NhYmxlIG9yIGZvciBNZXp6IGNhcmQgY2hlY2sgYW5kCisJCQkJCSAqIHJlcGxhY2UgcGFzcyB0aHJvdWdoIG1vZHVsZSAqLwogCUJGQV9TVEFUVVNfTElOS1RJTUVPVVQgCT0gNTEsCS8qICBMaW5rIHRpbWVvdXQgY2hlY2sgYW5kIHJlcGxhY2UKIAkJCQkJICogU0ZQL2NhYmxlICovCiAJQkZBX1NUQVRVU19OT19GQ1BJTV9ORVhVUyA9IDUyLAkvKiAgTm8gRkNQIE5leHVzIGV4aXN0cyB3aXRoIHRoZQpAQCAtMTczLDcgKzE3NCw3IEBACiAJQkZBX1NUQVRVU19MRURURVNUX09QID0gMTA5LCAvKiAgTEVEIHRlc3QgaXMgb3BlcmF0aW5nICovCiAJQkZBX1NUQVRVU19DRUVfTk9UX0ROID0gMTEwLCAvKiAgZXRoIHBvcnQgaXMgbm90IGF0IGRvd24gc3RhdGUsIHBsZWFzZQogCQkJCSAgICAgICogYnJpbmcgZG93biBmaXJzdCAqLwotCUJGQV9TVEFUVVNfMTBHX1NQRCA9IDExMSwgLyogIFNwZWVkIHNldHRpbmcgbm90IHZhbGlkIGZvciAxMEcgSEJBICovCisJQkZBX1NUQVRVU18xMEdfU1BEID0gMTExLCAvKiAgU3BlZWQgc2V0dGluZyBub3QgdmFsaWQgZm9yIDEwRyBDTkEgKi8KIAlCRkFfU1RBVFVTX0lNX0lOVl9URUFNX05BTUUgPSAxMTIsIC8qICBJbnZhbGlkIHRlYW0gbmFtZSAqLwogCUJGQV9TVEFUVVNfSU1fRFVQX1RFQU1fTkFNRSA9IDExMywgLyogIEdpdmVuIHRlYW0gbmFtZSBhbHJlYWR5CiAJCQkJCSAgICAqIGV4aXN0cyAqLwpAQCAtMjEzLDEyICsyMTQsMTMgQEAKIAkJCQkJICAgICAqIGxvYWRlZCAqLwogCUJGQV9TVEFUVVNfQ0FSRF9UWVBFX01JU01BVENIID0gMTMxLCAvKiAgQ2FyZCB0eXBlIG1pc21hdGNoICovCiAJQkZBX1NUQVRVU19CQURfQVNJQ0JMSyA9IDEzMiwgLyogIEJhZCBBU0lDIGJsb2NrICovCi0JQkZBX1NUQVRVU19OT19EUklWRVIgPSAxMzMsIC8qICBCcm9jYWRlIGFkYXB0ZXIvZHJpdmVyIG5vdCBpbnN0YWxsZWQgb3IgbG9hZGVkICovCi0JQkZBX1NUQVRVU19JTlZBTElEX01BQyA9IDEzNCwgLyogIEludmFsaWQgbWFjIGFkZHJlc3MgKi8KKwlCRkFfU1RBVFVTX05PX0RSSVZFUiA9IDEzMywgLyogIEJyb2NhZGUgYWRhcHRlci9kcml2ZXIgbm90IGluc3RhbGxlZAorCQkJCSAgICAgKiAgb3IgbG9hZGVkICovCisJQkZBX1NUQVRVU19JTlZBTElEX01BQyA9IDEzNCwgLyogIEludmFsaWQgTUFDIGFkZHJlc3MgKi8KIAlCRkFfU1RBVFVTX0lNX05PX1ZMQU4gPSAxMzUsIC8qICBObyBWTEFOcyBjb25maWd1cmVkIG9uIHRoZSBhZGFwdGVyICovCiAJQkZBX1NUQVRVU19JTV9FVEhfTEJfRkFJTEVEID0gMTM2LCAvKiAgRXRoZXJuZXQgbG9vcGJhY2sgdGVzdCBmYWlsZWQgKi8KLQlCRkFfU1RBVFVTX0lNX1BWSURfUkVNT1ZFID0gMTM3LCAvKiAgQ2Fubm90IHJlbW92ZSBwb3J0IHZsYW4gKFBWSUQpICovCi0JQkZBX1NUQVRVU19JTV9QVklEX0VESVQgPSAxMzgsIC8qICBDYW5ub3QgZWRpdCBwb3J0IHZsYW4gKFBWSUQpICovCisJQkZBX1NUQVRVU19JTV9QVklEX1JFTU9WRSA9IDEzNywgLyogQ2Fubm90IHJlbW92ZSBwb3J0IFZMQU4gKFBWSUQpICovCisJQkZBX1NUQVRVU19JTV9QVklEX0VESVQgPSAxMzgsIC8qIENhbm5vdCBlZGl0IHBvcnQgVkxBTiAoUFZJRCkgKi8KIAlCRkFfU1RBVFVTX0NOQV9OT19CT09UID0gMTM5LCAvKiAgQm9vdCB1cGxvYWQgbm90IGFsbG93ZWQgZm9yIENOQSAqLwogCUJGQV9TVEFUVVNfSU1fUFZJRF9OT05fWkVSTyA9IDE0MCwgLyogIFBvcnQgVkxBTiBJRCAoUFZJRCkgaXMgU2V0IHRvCiAJCQkJCSAgICAqIE5vbi1aZXJvIFZhbHVlICovCkBAIC0yMzIsMTQgKzIzNCwxNSBAQAogCUJGQV9TVEFUVVNfSU5TVUZGSUNJRU5UX1BFUk1TID0gMTQ0LCAvKiAgVXNlciBkb2Vzbid0IGhhdmUgc3VmZmljaWVudAogCQkJCQkgICAgICAqIHBlcm1pc3Npb25zIHRvIGV4ZWN1dGUgdGhlIEJDVQogCQkJCQkgICAgICAqIGFwcGxpY2F0aW9uICovCi0JQkZBX1NUQVRVU19JTV9JTlZfVkxBTl9OQU1FID0gMTQ1LCAvKiAgSW52YWxpZC9SZXNlcnZlZCBWbGFuIG5hbWUKKwlCRkFfU1RBVFVTX0lNX0lOVl9WTEFOX05BTUUgPSAxNDUsIC8qIEludmFsaWQvUmVzZXJ2ZWQgVkxBTiBuYW1lCiAJCQkJCSAgICAqIHN0cmluZy4gVGhlIG5hbWUgaXMgbm90IGFsbG93ZWQKLQkJCQkJICAgICogZm9yIHRoZSBub3JtYWwgVmxhbnMgKi8KKwkJCQkJICAgICogZm9yIHRoZSBub3JtYWwgVkxBTiAqLwogCUJGQV9TVEFUVVNfQ01EX05PVFNVUFBfQ05BID0gMTQ2LCAvKiAgQ29tbWFuZCBub3Qgc3VwcG9ydGVkIGZvciBDTkEgKi8KLQlCRkFfU1RBVFVTX0lNX1BBU1NUSFJVX0VESVQgPSAxNDcsIC8qICBDYW4gbm90IGVkaXQgcGFzc3RocnUgdmxhbiBpZCAqLwotCUJGQV9TVEFUVVNfSU1fQklORF9GQUlMRUQgPSAxNDgsIC8qISA8IElNIERyaXZlciBiaW5kIG9wZXJhdGlvbgorCUJGQV9TVEFUVVNfSU1fUEFTU1RIUlVfRURJVCA9IDE0NywgLyogQ2FuIG5vdCBlZGl0IHBhc3N0aHJvdWdoIFZMQU4KKwkJCQkJICAgICogaWQgKi8KKwlCRkFfU1RBVFVTX0lNX0JJTkRfRkFJTEVEID0gMTQ4LCAvKiBJTSBEcml2ZXIgYmluZCBvcGVyYXRpb24KIAkJCQkJICAqIGZhaWxlZCAqLwotCUJGQV9TVEFUVVNfSU1fVU5CSU5EX0ZBSUxFRCA9IDE0OSwgLyogISA8IElNIERyaXZlciB1bmJpbmQgb3BlcmF0aW9uCisJQkZBX1NUQVRVU19JTV9VTkJJTkRfRkFJTEVEID0gMTQ5LCAvKiBJTSBEcml2ZXIgdW5iaW5kIG9wZXJhdGlvbgogCQkJCQkgICAgKiBmYWlsZWQgKi8KIAlCRkFfU1RBVFVTX0lNX1BPUlRfSU5fVEVBTSA9IDE1MCwgLyogIFBvcnQgaXMgYWxyZWFkeSBwYXJ0IG9mIHRoZQogCQkJCQkgICAqIHRlYW0gKi8KQEAgLTI0OSw3ICsyNTIsMjQgQEAKIAlCRkFfU1RBVFVTX0lNX1RFQU1fQ0ZHX05PVF9BTExPV0VEID0gMTUzLCAvKiAgR2l2ZW4gc2V0dGluZ3MgYXJlIG5vdAogCQkJCQkJKiBhbGxvd2VkIGZvciB0aGUgY3VycmVudAogCQkJCQkJKiBUZWFtaW5nIG1vZGUgKi8KLQlCRkFfU1RBVFVTX01BWF9WQUwJCS8qICBVbmtub3duIGVycm9yIGNvZGUgKi8KKwlCRkFfU1RBVFVTX1BCQyA9IDE1NCwgLyogT3BlcmF0aW9uIG5vdCBhbGxvd2VkIGZvciBwcmUtYm9vdAorCQkJICAgICAgICogY29uZmlndXJhdGlvbiAqLworCUJGQV9TVEFUVVNfREVWSURfTUlTU0lORyA9IDE1NSwgLyogQm9vdCBpbWFnZSBpcyBub3QgZm9yIHRoZSBhZGFwdGVyKHMpCisJCQkJCSAqIGluc3RhbGxlZCAqLworCUJGQV9TVEFUVVNfQkFEX0ZXQ0ZHID0gMTU2LCAvKiBCYWQgZmlybXdhcmUgY29uZmlndXJhdGlvbiAqLworCUJGQV9TVEFUVVNfQ1JFQVRFX0ZJTEUgPSAxNTcsIC8qIEZhaWxlZCB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUgKi8KKwlCRkFfU1RBVFVTX0lOVkFMSURfVkVORE9SID0gMTU4LCAvKiBJbnZhbGlkIHN3aXRjaCB2ZW5kb3IgKi8KKwlCRkFfU1RBVFVTX1NGUF9OT1RfUkVBRFkgPSAxNTksIC8qIFNGUCBpbmZvIGlzIG5vdCByZWFkeS4gUmV0cnkgKi8KKwlCRkFfU1RBVFVTX05PX1RPUE9MT0dZX0ZPUl9DTkEgPSAxNjAsIC8qIFRvcG9sb2d5IGNvbW1hbmQgbm90CisJCQkJCSAgICAgICAqIGFwcGxpY2FibGUgdG8gQ05BICovCisJQkZBX1NUQVRVU19CT09UX0NPREVfVVBEQVRFRCA9IDE2MSwgLyogcmVib290IC0tIC1yIGlzIG5lZWRlZCBhZnRlcgorCQkJCQkgICAgICogYm9vdCBjb2RlIHVwZGF0ZWQgKi8KKwlCRkFfU1RBVFVTX0JPT1RfVkVSU0lPTiA9IDE2MiwgLyogQm9vdCBjb2RlIHZlcnNpb24gbm90IGNvbXBhdGlibGUgd2l0aAorCQkJCQkqIHRoZSBkcml2ZXIgaW5zdGFsbGVkICovCisJQkZBX1NUQVRVU19DQVJEVFlQRV9NSVNTSU5HID0gMTYzLCAvKiBCb290IGltYWdlIGlzIG5vdCBmb3IgdGhlCisJCQkJCSAgICAqIGFkYXB0ZXIocykgaW5zdGFsbGVkICovCisJQkZBX1NUQVRVU19JTlZBTElEX0NBUkRUWVBFID0gMTY0LCAvKiBJbnZhbGlkIGNhcmQgdHlwZSBwcm92aWRlZCAqLworCUJGQV9TVEFUVVNfTUFYX1ZBTCAgICAgICAgICAgICAgLyogVW5rbm93biBlcnJvciBjb2RlICovCiB9OwogI2RlZmluZSBiZmFfc3RhdHVzX3QgZW51bSBiZmFfc3RhdHVzCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY2IvYmZhX2ZjYl92cG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3Zwb3J0LmgKaW5kZXggYTM5ZjQ3NC4uY2ZkNmJhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3Zwb3J0LmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3Zwb3J0LmgKQEAgLTQwLDcgKzQwLDggQEAKICAqCiAgKiBAcmV0dXJuIE5vbmUKICAqLwotdm9pZCAgICAgICAgICAgIGJmYV9mY2JfdnBvcnRfZGVsZXRlKHN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwb3J0X2Rydik7Cit2b2lkIGJmYV9mY2JfdnBvcnRfZGVsZXRlKHN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwb3J0X2Rydik7Cit2b2lkIGJmYV9mY2JfcGJjX3Zwb3J0X2NyZWF0ZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZpX3BiY192cG9ydF9zKTsKIAogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzLmgKaW5kZXggZjJmZDM1Zi4uNTRlNWI4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzLmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzLmgKQEAgLTYxLDggKzYxLDggQEAKIC8qCiAgKiBiZmEgZmNzIEFQSSBmdW5jdGlvbnMKICAqLwotdm9pZCBiZmFfZmNzX2F0dGFjaChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhZF9zICpiZmFkLAotCQkJYmZhX2Jvb2xlYW5fdCBtaW5fY2ZnKTsKK3ZvaWQgYmZhX2Zjc19hdHRhY2goc3RydWN0IGJmYV9mY3NfcyAqZmNzLCBzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCXN0cnVjdCBiZmFkX3MgKmJmYWQsIGJmYV9ib29sZWFuX3QgbWluX2NmZyk7CiB2b2lkIGJmYV9mY3NfaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOwogdm9pZCBiZmFfZmNzX2RyaXZlcl9pbmZvX2luaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzLAogCQkJc3RydWN0IGJmYV9mY3NfZHJpdmVyX2luZm9fcyAqZHJpdmVyX2luZm8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX2ZjcGltLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfZmNwaW0uaAppbmRleCBlNzE5ZjJjLi45YTM1ZWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfZmNwaW0uaAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfZmNwaW0uaApAQCAtNDEsNiArNDEsNyBAQAogCXN0cnVjdCBiZmFfZmNzX3MgICAgICAJKmZjczsJCS8qICBmY3MgaW5zdGFuY2UgICAgICAgICAqLwogCXN0cnVjdCBiZmFfdGltZXJfcyAJdGltZXI7CQkvKiAgdGltZXIgZnVuY3Rpb25zICAgICAgKi8KIAlzdHJ1Y3QgYmZhX2l0bmltX3MgCSpiZmFfaXRuaW07CS8qICBCRkEgaXRuaW0gc3RydWN0ICAgICAqLworCXUzMiAgICAgICAgICAgICAgICAJcHJsaV9yZXRyaWVzOyAgIC8qICBtYXggcHJsaSByZXRyeSBhdHRlbXB0cyAqLwogCWJmYV9ib29sZWFuX3QJIAlzZXFfcmVjOwkvKiAgc2VxIHJlY292ZXJ5IHN1cHBvcnQgKi8KIAliZmFfYm9vbGVhbl90CSAJcmVjX3N1cHBvcnQ7CS8qICBSRUMgc3VwcG9ydGVkICAgICAgICAqLwogCWJmYV9ib29sZWFuX3QJIAljb25mX2NvbXA7CS8qICBGQ1BfQ09ORiAgICAgc3VwcG9ydCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX3Jwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfcnBvcnQuaAppbmRleCA3MDJiOTViLi4zMDI3ZmM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfcnBvcnQuaAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfcnBvcnQuaApAQCAtNTgsNiArNTgsNyBAQAogCXUxNiAgICAgICAgcmVwbHlfb3hpZDsJLyogIE9YX0lEIG9mIGluYm91bmQgcmVxdWVzdHMgKi8KIAllbnVtIGZjX2NvcyAgICAgICAgZmNfY29zOwkvKiAgRkMgY2xhc3NlcyBvZiBzZXJ2aWNlIHN1cHAgKi8KIAliZmFfYm9vbGVhbl90ICAgY2lzYzsJLyogIENJU0MgY2FwYWJsZSBkZXZpY2UgKi8KKwliZmFfYm9vbGVhbl90ICAgcHJsbzsgICAvKiAgcHJvY2Vzc2luZyBwcmxvIG9yIExPR08gKi8KIAl3d25fdCAgICAgICAgICAgcHd3bjsJLyogIHBvcnQgd3duIG9mIHJwb3J0ICovCiAJd3duX3QgICAgICAgICAgIG53d247CS8qICBub2RlIHd3biBvZiBycG9ydCAqLwogCXN0cnVjdCBiZmFfcnBvcnRfc3ltbmFtZV9zIHBzeW1fbmFtZTsgLyogIHBvcnQgc3ltYm9saWMgbmFtZSAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc192cG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX3Zwb3J0LmgKaW5kZXggY2QzM2YyYy4uMGFmMjYyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX3Zwb3J0LmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX3Zwb3J0LmgKQEAgLTQ5LDYgKzQ5LDEwIEBACiAJCQlzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHUxNiB2Zl9pZCwKIAkJCXN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcG9ydF9jZmcsCiAJCQlzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cG9ydF9kcnYpOworYmZhX3N0YXR1c190IGJmYV9mY3NfcGJjX3Zwb3J0X2NyZWF0ZShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCXN0cnVjdCBiZmFfZmNzX3MgKmZjcywgdWludDE2X3QgdmZfaWQsCisJCQlzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBvcnRfY2ZnLAorCQkJc3RydWN0IGJmYWRfdnBvcnRfcyAqdnBvcnRfZHJ2KTsKIGJmYV9zdGF0dXNfdCBiZmFfZmNzX3Zwb3J0X2RlbGV0ZShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCk7CiBiZmFfc3RhdHVzX3QgYmZhX2Zjc192cG9ydF9zdGFydChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCk7CiBiZmFfc3RhdHVzX3QgYmZhX2Zjc192cG9ydF9zdG9wKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9sb2cvYmZhX2xvZ19saW51eC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX2xpbnV4LmgKaW5kZXggYmQ0NTFkYi4uNDRiYzg5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX2xpbnV4LmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX2xpbnV4LmgKQEAgLTUzLDggKzUzLDEwIEBACiAJKCgodTMyKSBCRkFfTE9HX0xJTlVYX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDE2KQogI2RlZmluZSBCRkFfTE9HX0xJTlVYX0RSSVZFUl9FUlJPUiBcCiAJKCgodTMyKSBCRkFfTE9HX0xJTlVYX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDE3KQotI2RlZmluZSBCRkFfTE9HX0xJTlVYX0RSSVZFUl9ESUFHIFwKKyNkZWZpbmUgQkZBX0xPR19MSU5VWF9EUklWRVJfSU5GTyBcCiAJKCgodTMyKSBCRkFfTE9HX0xJTlVYX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDE4KQotI2RlZmluZSBCRkFfTE9HX0xJTlVYX0RSSVZFUl9BRU4gXAorI2RlZmluZSBCRkFfTE9HX0xJTlVYX0RSSVZFUl9ESUFHIFwKIAkoKCh1MzIpIEJGQV9MT0dfTElOVVhfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgMTkpCisjZGVmaW5lIEJGQV9MT0dfTElOVVhfRFJJVkVSX0FFTiBcCisJKCgodTMyKSBCRkFfTE9HX0xJTlVYX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDIwKQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvZmMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9mYy5oCmluZGV4IDhkMTAzODAuLjQzNmRkN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9mYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9mYy5oCkBAIC0xMDgwLDYgKzEwODAsNyBAQAogI2RlZmluZSBGQ19SRUNfVE9WCQkoRkNfRURfVE9WICsgMSkKICNkZWZpbmUgRkNfUkFfVE9WCQkxMAogI2RlZmluZSBGQ19FTFNfVE9WCQkoMiAqIEZDX1JBX1RPVikKKyNkZWZpbmUgRkNfRkNDVF9UT1YJCSgzICogRkNfUkFfVE9WKQogCiAvKgogICogdmlydHVhbCBmYWJyaWMgcmVsYXRlZCBkZWZpbmVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2xwb3J0X2FwaS5jIGIvZHJpdmVycy9zY3NpL2JmYS9scG9ydF9hcGkuYwppbmRleCBkMzkwN2QxLi43MmIzZjUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2xwb3J0X2FwaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvbHBvcnRfYXBpLmMKQEAgLTEzNyw2ICsxMzcsOCBAQAogLyoKICAqIEl0ZXJhdGUncyB0aHJvdWdoIGFsbCB0aGUgcnBvcnQncyBpbiB0aGUgZ2l2ZW4gcG9ydCB0bwogICogZGV0ZXJtaW5lIHRoZSBtYXhpbXVtIG9wZXJhdGluZyBzcGVlZC4KKyAqCisgKiBUbyBiZSB1c2VkIGluIFRSTCBGdW5jdGlvbmFsaXR5IG9ubHkKICAqLwogZW51bSBiZmFfcHBvcnRfc3BlZWQKIGJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfbWF4X3NwZWVkKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKQEAgLTE0Niw3ICsxNDgsOCBAQAogCXN0cnVjdCBiZmFfZmNzX3MgKmZjczsKIAllbnVtIGJmYV9wcG9ydF9zcGVlZCBtYXhfc3BlZWQgPSAwOwogCXN0cnVjdCBiZmFfcHBvcnRfYXR0cl9zIHBwb3J0X2F0dHI7Ci0JZW51bSBiZmFfcHBvcnRfc3BlZWQgcHBvcnRfc3BlZWQ7CisJZW51bSBiZmFfcHBvcnRfc3BlZWQgcHBvcnRfc3BlZWQsIHJwb3J0X3NwZWVkOworCWJmYV9ib29sZWFuX3QgICAgIHRybF9lbmFibGVkID0gYmZhX2ZjcG9ydF9pc19yYXRlbGltKHBvcnQtPmZjcy0+YmZhKTsKIAogCWlmIChwb3J0ID09IE5VTEwpCiAJCXJldHVybiAwOwpAQCAtMTY0LDE5ICsxNjcsMjggQEAKIAlxZSA9IGJmYV9xX2ZpcnN0KHFoKTsKIAogCXdoaWxlIChxZSAhPSBxaCkgewotCQlycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopcWU7Ci0JCWlmICgoYmZhX29zX250b2gzYihycG9ydC0+cGlkKSA+IDB4RkZGMDAwKQotCQkgICAgfHwgKGJmYV9mY3NfcnBvcnRfZ2V0X3N0YXRlKHJwb3J0KSA9PSBCRkFfUlBPUlRfT0ZGTElORSkpIHsKKwkJcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKSBxZTsKKwkJaWYgKChiZmFfb3NfbnRvaDNiKHJwb3J0LT5waWQpID4gMHhGRkYwMDApIHx8CisJCQkoYmZhX2Zjc19ycG9ydF9nZXRfc3RhdGUocnBvcnQpID09CisJCQkJCQlCRkFfUlBPUlRfT0ZGTElORSkpIHsKIAkJCXFlID0gYmZhX3FfbmV4dChxZSk7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmICgocnBvcnQtPnJwZi5ycHNjX3NwZWVkID09IEJGQV9QUE9SVF9TUEVFRF84R0JQUykKLQkJICAgIHx8IChycG9ydC0+cnBmLnJwc2Nfc3BlZWQgPiBwcG9ydF9zcGVlZCkpIHsKLQkJCW1heF9zcGVlZCA9IHJwb3J0LT5ycGYucnBzY19zcGVlZDsKKwkJcnBvcnRfc3BlZWQgPSBycG9ydC0+cnBmLnJwc2Nfc3BlZWQ7CisJCWlmICgodHJsX2VuYWJsZWQpICYmICAocnBvcnRfc3BlZWQgPT0KKwkJCQkJCUJGQV9QUE9SVF9TUEVFRF9VTktOT1dOKSkgeworCQkJLyogVXNlIGRlZmF1bHQgcmF0ZWxpbSBzcGVlZCBzZXR0aW5nICovCisJCQlycG9ydF9zcGVlZCA9CisJCQkJYmZhX2ZjcG9ydF9nZXRfcmF0ZWxpbV9zcGVlZChwb3J0LT5mY3MtPmJmYSk7CisJCX0KKworCQlpZiAoKHJwb3J0X3NwZWVkICA9PSBCRkFfUFBPUlRfU1BFRURfOEdCUFMpIHx8CisJCQkocnBvcnRfc3BlZWQgPiBwcG9ydF9zcGVlZCkpIHsKKwkJCW1heF9zcGVlZCA9IHJwb3J0X3NwZWVkOwogCQkJYnJlYWs7Ci0JCX0gZWxzZSBpZiAocnBvcnQtPnJwZi5ycHNjX3NwZWVkID4gbWF4X3NwZWVkKSB7Ci0JCQltYXhfc3BlZWQgPSBycG9ydC0+cnBmLnJwc2Nfc3BlZWQ7CisJCX0gZWxzZSBpZiAocnBvcnRfc3BlZWQgPiBtYXhfc3BlZWQpIHsKKwkJCW1heF9zcGVlZCA9IHJwb3J0X3NwZWVkOwogCQl9CiAKIAkJcWUgPSBiZmFfcV9uZXh0KHFlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvbXMuYyBiL2RyaXZlcnMvc2NzaS9iZmEvbXMuYwppbmRleCA1ZThjOGRlLi4xZDU3OWVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL21zLmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9tcy5jCkBAIC0xNTcsNiArMTU3LDcgQEAKIAkJICogU3RhcnQgdGltZXIgZm9yIGEgZGVsYXllZCByZXRyeQogCQkgKi8KIAkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX3Bsb2dpX3JldHJ5KTsKKwkJbXMtPnBvcnQtPnN0YXRzLm1zX3JldHJpZXMrKzsKIAkJYmZhX3RpbWVyX3N0YXJ0KEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobXMtPnBvcnQpLCAmbXMtPnRpbWVyLAogCQkJCWJmYV9mY3NfcG9ydF9tc190aW1lb3V0LCBtcywKIAkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOwpAQCAtMjc5LDYgKzI4MCw3IEBACiAJCSAqLwogCQlpZiAobXMtPnJldHJ5X2NudCsrIDwgQkZBX0ZDU19NU19DTURfTUFYX1JFVFJJRVMpIHsKIAkJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9nbWFsX3JldHJ5KTsKKwkJCW1zLT5wb3J0LT5zdGF0cy5tc19yZXRyaWVzKys7CiAJCQliZmFfdGltZXJfc3RhcnQoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChtcy0+cG9ydCksCiAJCQkJCSZtcy0+dGltZXIsIGJmYV9mY3NfcG9ydF9tc190aW1lb3V0LCBtcywKIAkJCQkJQkZBX0ZDU19SRVRSWV9USU1FT1VUKTsKQEAgLTM1OSw3ICszNjEsNyBAQAogCiAJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKIAkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19wb3J0X21zX2dtYWxfcmVzcG9uc2UsCi0JCSAgICAgICh2b2lkICopbXMsIEZDX01BWF9QRFVTWiwgRkNfUkFfVE9WKTsKKwkJICAgICAgKHZvaWQgKiltcywgRkNfTUFYX1BEVVNaLCBGQ19GQ0NUX1RPVik7CiAKIAliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9GQ1hQX1NFTlQpOwogfQpAQCAtNDc5LDYgKzQ4MSw3IEBACiAJCSAqLwogCQlpZiAobXMtPnJldHJ5X2NudCsrIDwgQkZBX0ZDU19NU19DTURfTUFYX1JFVFJJRVMpIHsKIAkJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9nZm5fcmV0cnkpOworCQkJbXMtPnBvcnQtPnN0YXRzLm1zX3JldHJpZXMrKzsKIAkJCWJmYV90aW1lcl9zdGFydChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKG1zLT5wb3J0KSwKIAkJCQkJJm1zLT50aW1lciwgYmZhX2Zjc19wb3J0X21zX3RpbWVvdXQsIG1zLAogCQkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOwpAQCAtNTU3LDcgKzU2MCw3IEBACiAKIAliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAogCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBiZmFfZmNzX3BvcnRfbXNfZ2ZuX3Jlc3BvbnNlLAotCQkgICAgICAodm9pZCAqKW1zLCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisJCSAgICAgICh2b2lkICopbXMsIEZDX01BWF9QRFVTWiwgRkNfRkNDVF9UT1YpOwogCiAJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfRkNYUF9TRU5UKTsKIH0KQEAgLTYzNyw3ICs2NDAsNyBAQAogCiAJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKIAkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19wb3J0X21zX3Bsb2dpX3Jlc3BvbnNlLAotCQkgICAgICAodm9pZCAqKW1zLCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisJCSAgICAgICh2b2lkICopbXMsIEZDX01BWF9QRFVTWiwgRkNfRUxTX1RPVik7CiAKIAlwb3J0LT5zdGF0cy5tc19wbG9naV9zZW50Kys7CiAJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfRkNYUF9TRU5UKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvbnMuYyBiL2RyaXZlcnMvc2NzaS9iZmEvbnMuYwppbmRleCBkMjBkZDdlLi5hZTBlZGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL25zLmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9ucy5jCkBAIC02NjQsNyArNjY0LDcgQEAKIAogCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCiAJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIGJmYV9mY3NfcG9ydF9uc19wbG9naV9yZXNwb25zZSwKLQkJICAgICAgKHZvaWQgKilucywgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCQkgICAgICAodm9pZCAqKW5zLCBGQ19NQVhfUERVU1osIEZDX0VMU19UT1YpOwogCXBvcnQtPnN0YXRzLm5zX3Bsb2dpX3NlbnQrKzsKIAogCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1BMT0dJX1NFTlQpOwpAQCAtNzkxLDcgKzc5MSw3IEBACiAKIAliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAogCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBiZmFfZmNzX3BvcnRfbnNfcnNwbl9pZF9yZXNwb25zZSwKLQkJICAgICAgKHZvaWQgKilucywgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCQkgICAgICAodm9pZCAqKW5zLCBGQ19NQVhfUERVU1osIEZDX0ZDQ1RfVE9WKTsKIAogCXBvcnQtPnN0YXRzLm5zX3JzcG5pZF9zZW50Kys7CiAKQEAgLTg2NSw3ICs4NjUsNyBAQAogCiAJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKIAkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19wb3J0X25zX3JmdF9pZF9yZXNwb25zZSwKLQkJICAgICAgKHZvaWQgKilucywgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCQkgICAgICAodm9pZCAqKW5zLCBGQ19NQVhfUERVU1osIEZDX0ZDQ1RfVE9WKTsKIAogCXBvcnQtPnN0YXRzLm5zX3JmdGlkX3NlbnQrKzsKIAliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SRlRJRF9TRU5UKTsKQEAgLTk0Myw3ICs5NDMsNyBAQAogCiAJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKIAkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19wb3J0X25zX3JmZl9pZF9yZXNwb25zZSwKLQkJICAgICAgKHZvaWQgKilucywgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCQkgICAgICAodm9pZCAqKW5zLCBGQ19NQVhfUERVU1osIEZDX0ZDQ1RfVE9WKTsKIAogCXBvcnQtPnN0YXRzLm5zX3JmZmlkX3NlbnQrKzsKIAliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SRkZJRF9TRU5UKTsKQEAgLTEwMjksNyArMTAyOSw3IEBACiAJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKIAkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19wb3J0X25zX2dpZF9mdF9yZXNwb25zZSwKIAkJICAgICAgKHZvaWQgKilucywgYmZhX2ZjeHBfZ2V0X21heHJzcChwb3J0LT5mY3MtPmJmYSksCi0JCSAgICAgIEZDX1JBX1RPVik7CisJCSAgICAgIEZDX0ZDQ1RfVE9WKTsKIAogCXBvcnQtPnN0YXRzLm5zX2dpZGZ0X3NlbnQrKzsKIApAQCAtMTIyOCwxMCArMTIyOCwxMCBAQAogCiAJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CiAJdTggICAgICAgICBud3duczsKLQl3d25fdCAgICAgICAgICAqd3duczsKKwl3d25fdCAgd3duc1tCRkFfUFJFQk9PVF9CT09UTFVOX01BWF07CiAJaW50ICAgICAgICAgICAgIGlpOwogCi0JYmZhX2lvY2ZjX2dldF9ib290d3ducyhwb3J0LT5mY3MtPmJmYSwgJm53d25zLCAmd3ducyk7CisJYmZhX2lvY2ZjX2dldF9ib290d3ducyhwb3J0LT5mY3MtPmJmYSwgJm53d25zLCB3d25zKTsKIAogCWZvciAoaWkgPSAwOyBpaSA8IG53d25zOyArK2lpKSB7CiAJCXJwb3J0ID0gYmZhX2Zjc19ycG9ydF9jcmVhdGVfYnlfd3duKHBvcnQsIHd3bnNbaWldKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvcnBvcnQuYyBiL2RyaXZlcnMvc2NzaS9iZmEvcnBvcnQuYwppbmRleCA3YjA5NmYyLi45YjRjMmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL3Jwb3J0LmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9ycG9ydC5jCkBAIC0zNiw4ICszNiw2IEBACiAKIEJGQV9UUkNfRklMRShGQ1MsIFJQT1JUKTsKIAotI2RlZmluZSBCRkFfRkNTX1JQT1JUX01BWF9SRVRSSUVTCQkoNSkKLQogLyogSW4gbWlsbGlzZWNzICovCiBzdGF0aWMgdTMyIGJmYV9mY3NfcnBvcnRfZGVsX3RpbWVvdXQgPQogCQkJQkZBX0ZDU19SUE9SVF9ERUZfREVMX1RJTUVPVVQgKiAxMDAwOwpAQCAtOTUsNiArOTMsNyBAQAogCQkJdTggcmVhc29uX2NvZGVfZXhwbCk7CiBzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9wcm9jZXNzX2FkaXNjKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAogCQkJc3RydWN0IGZjaHNfcyAqcnhfZmNocywgdTE2IGxlbik7CitzdGF0aWMgdm9pZAliZmFfZmNzX3Jwb3J0X3NlbmRfcHJsb19hY2Moc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOwogLyoqCiAgKiAgZmNzX3Jwb3J0X3NtIEZDUyBycG9ydCBzdGF0ZSBtYWNoaW5lIGV2ZW50cwogICovCkBAIC0xMTUsNyArMTE0LDggQEAKIAlSUFNNX0VWRU5UX0hDQl9PRkZMSU5FID0gMTMsCS8qICBCRkEgcnBvcnQgb2ZmbGluZSBjYWxsYmFjayAqLwogCVJQU01fRVZFTlRfRkM0X09GRkxJTkUgPSAxNCwJLyogIEZDLTQgb2ZmbGluZSBjb21wbGV0ZSAqLwogCVJQU01fRVZFTlRfQUREUkVTU19DSEFOR0UgPSAxNSwJLyogIFJwb3J0J3MgUElEIGhhcyBjaGFuZ2VkICovCi0JUlBTTV9FVkVOVF9BRERSRVNTX0RJU0MgPSAxNgkvKiAgTmVlZCB0byBEaXNjb3ZlciBycG9ydCdzIFBJRCAqLworCVJQU01fRVZFTlRfQUREUkVTU19ESVNDID0gMTYsCS8qICBOZWVkIHRvIERpc2NvdmVyIHJwb3J0J3MgUElEICovCisJUlBTTV9FVkVOVF9QUkxPX1JDVkQgPSAxNywgICAgICAvKiAgUFJMTyBmcm9tIHJlbW90ZSBkZXZpY2UgICAgICAqLwogfTsKIAogc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fdW5pbml0KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LApAQCAtMzU2LDggKzM1Niw4IEBACiAJCSAqLwogCiAJY2FzZSBSUFNNX0VWRU5UX1RJTUVPVVQ6Ci0JCXJwb3J0LT5wbG9naV9yZXRyaWVzKys7CiAJCWlmIChycG9ydC0+cGxvZ2lfcmV0cmllcyA8IEJGQV9GQ1NfUlBPUlRfTUFYX1JFVFJJRVMpIHsKKwkJCXJwb3J0LT5wbG9naV9yZXRyaWVzKys7CiAJCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpX3NlbmRpbmcpOwogCQkJYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpKHJwb3J0LCBOVUxMKTsKIAkJfSBlbHNlIHsKQEAgLTM3NSw2ICszNzUsNyBAQAogCQliZmFfZmNzX3Jwb3J0X2ZyZWUocnBvcnQpOwogCQlicmVhazsKIAorCWNhc2UgUlBTTV9FVkVOVF9QUkxPX1JDVkQ6CiAJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKIAkJYnJlYWs7CiAKQEAgLTQzMCw2ICs0MzEsMTMgQEAKIAogCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CiAJCWJmYV9mY3NfcnBvcnRfc2VuZF9sb2dvX2FjYyhycG9ydCk7CisJCS8qCisJCSAqICEhIGZhbGwgdGhyb3VnaCAhIQorCQkgKi8KKwljYXNlIFJQU01fRVZFTlRfUFJMT19SQ1ZEOgorCQlpZiAocnBvcnQtPnBybG8gPT0gQkZBX1RSVUUpCisJCQliZmFfZmNzX3Jwb3J0X3NlbmRfcHJsb19hY2MocnBvcnQpOworCiAJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOwogCQkvKgogCQkgKiAhISBmYWxsIHRocm91Z2ggISEKQEAgLTUwNCw2ICs1MTIsOSBAQAogCQliZmFfZmNzX3Jwb3J0X29ubGluZV9hY3Rpb24ocnBvcnQpOwogCQlicmVhazsKIAorCWNhc2UgUlBTTV9FVkVOVF9QUkxPX1JDVkQ6CisJCWJyZWFrOworCiAJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKIAkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oY2JfbG9nb3Jjdik7CiAJCWJmYV9ycG9ydF9vZmZsaW5lKHJwb3J0LT5iZmFfcnBvcnQpOwpAQCAtNTgyLDYgKzU5Myw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwljYXNlIFJQU01fRVZFTlRfUFJMT19SQ1ZEOgogCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvcmN2KTsKIAkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CiAJCWJyZWFrOwpAQCAtNjI0LDYgKzYzNiw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwljYXNlIFJQU01fRVZFTlRfUFJMT19SQ1ZEOgogCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvcmN2KTsKIAkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOwogCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKQEAgLTY5MCw2ICs3MDMsNyBAQAogCQlicmVhazsKIAogCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJY2FzZSBSUFNNX0VWRU5UX1BSTE9fUkNWRDoKIAkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3Jjdik7CiAJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOwogCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKQEAgLTc0MCw2ICs3NTQsNyBAQAogCQlicmVhazsKIAogCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJY2FzZSBSUFNNX0VWRU5UX1BSTE9fUkNWRDoKIAkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3Jjdik7CiAJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKIAkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CkBAIC04MTEsNiArODI2LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCWNhc2UgUlBTTV9FVkVOVF9QUkxPX1JDVkQ6CiAJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29yY3YpOwogCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKIAkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CkBAIC04NDMsNiArODU5LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCWNhc2UgUlBTTV9FVkVOVF9QUkxPX1JDVkQ6CiAJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgogCQlicmVhazsKIApAQCAtODk0LDYgKzkxMSw3IEBACiAJY2FzZSBSUFNNX0VWRU5UX1NDTjoKIAljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CiAJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwljYXNlIFJQU01fRVZFTlRfUFJMT19SQ1ZEOgogCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKIAkJLyoqCiAJCSAqIHJwb3J0IGlzIGFscmVhZHkgZ29pbmcgb2ZmbGluZS4KQEAgLTk1Myw2ICs5NzEsNyBAQAogCiAJY2FzZSBSUFNNX0VWRU5UX1NDTjoKIAljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCWNhc2UgUlBTTV9FVkVOVF9QUkxPX1JDVkQ6CiAJCS8qKgogCQkgKiBJZ25vcmUsIGFscmVhZHkgb2ZmbGluZS4KIAkJICovCkBAIC05NzgsOCArOTk3LDExIEBACiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgUlBTTV9FVkVOVF9IQ0JfT0ZGTElORToKIAljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6Ci0JCWlmIChycG9ydC0+cGlkKQorCQlpZiAocnBvcnQtPnBpZCAmJiAocnBvcnQtPnBybG8gPT0gQkZBX1RSVUUpKQorCQkJYmZhX2Zjc19ycG9ydF9zZW5kX3BybG9fYWNjKHJwb3J0KTsKKwkJaWYgKHJwb3J0LT5waWQgJiYgKHJwb3J0LT5wcmxvID09IEJGQV9GQUxTRSkpCiAJCQliZmFfZmNzX3Jwb3J0X3NlbmRfbG9nb19hY2MocnBvcnQpOworCiAJCS8qCiAJCSAqIElmIHRoZSBscG9ydCBpcyBvbmxpbmUgYW5kIGlmIHRoZSBycG9ydCBpcyBub3QgYSB3ZWxsIGtub3duCiAJCSAqIGFkZHJlc3MgcG9ydCwgd2UgdHJ5IHRvIHJlLWRpc2NvdmVyIHRoZSByLXBvcnQuCkBAIC0xMDEzLDYgKzEwMzUsNyBAQAogCQlicmVhazsKIAogCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJY2FzZSBSUFNNX0VWRU5UX1BSTE9fUkNWRDoKIAkJLyoqCiAJCSAqIElnbm9yZSAtIGFscmVhZHkgcHJvY2Vzc2luZyBhIExPR08uCiAJCSAqLwpAQCAtMTA0Miw2ICsxMDY1LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCWNhc2UgUlBTTV9FVkVOVF9QUkxPX1JDVkQ6CiAJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgogCQlicmVhazsKIApAQCAtMTA3NSw2ICsxMDk5LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCWNhc2UgUlBTTV9FVkVOVF9QUkxPX1JDVkQ6CiAJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fdW5pbml0KTsKIAkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOwogCQliZmFfZmNzX3Jwb3J0X2ZyZWUocnBvcnQpOwpAQCAtMTEyMyw2ICsxMTQ4LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCWNhc2UgUlBTTV9FVkVOVF9QUkxPX1JDVkQ6CiAJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgogCQlicmVhazsKIApAQCAtMTE3NCw2ICsxMjAwLDcgQEAKIAogCWNhc2UgUlBTTV9FVkVOVF9TQ046CiAJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwljYXNlIFJQU01fRVZFTlRfUFJMT19SQ1ZEOgogCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9TRU5EOgogCQlicmVhazsKIApAQCAtMTI1MCw2ICsxMjc3LDEwIEBACiAJCWJmYV9mY3NfcnBvcnRfc2VuZF9sb2dvX2FjYyhycG9ydCk7CiAJCWJyZWFrOwogCisJY2FzZSBSUFNNX0VWRU5UX1BSTE9fUkNWRDoKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX3BybG9fYWNjKHJwb3J0KTsKKwkJYnJlYWs7CisKIAljYXNlIFJQU01fRVZFTlRfUExPR0lfQ09NUDoKIAkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oYWxfb25saW5lKTsKIAkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CkBAIC0xMzIyLDYgKzEzNTMsMTAgQEAKIAkJCQliZmFfZmNzX3Jwb3J0X2RlbF90aW1lb3V0KTsKIAkJYnJlYWs7CiAKKwljYXNlIFJQU01fRVZFTlRfUFJMT19SQ1ZEOgorCQliZmFfZmNzX3Jwb3J0X3NlbmRfcHJsb19hY2MocnBvcnQpOworCQlicmVhazsKKwogCWNhc2UgUlBTTV9FVkVOVF9TQ046CiAJCS8qKgogCQkgKiBpZ25vcmUsIHdhaXQgZm9yIE5TIHF1ZXJ5IHJlc3BvbnNlCkBAIC0xMzc4LDcgKzE0MTMsNyBAQAogCiAJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKIAkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19ycG9ydF9wbG9naV9yZXNwb25zZSwKLQkJICAgICAgKHZvaWQgKilycG9ydCwgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCQkgICAgICAodm9pZCAqKXJwb3J0LCBGQ19NQVhfUERVU1osIEZDX0VMU19UT1YpOwogCiAJcnBvcnQtPnN0YXRzLnBsb2dpcysrOwogCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZDWFBfU0VOVCk7CkBAIC0xNTE5LDcgKzE1NTQsNyBAQAogCiAJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKIAkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19ycG9ydF9hZGlzY19yZXNwb25zZSwKLQkJICAgICAgcnBvcnQsIEZDX01BWF9QRFVTWiwgRkNfUkFfVE9WKTsKKwkJICAgICAgcnBvcnQsIEZDX01BWF9QRFVTWiwgRkNfRUxTX1RPVik7CiAKIAlycG9ydC0+c3RhdHMuYWRpc2Nfc2VudCsrOwogCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZDWFBfU0VOVCk7CkBAIC0xNTgwLDcgKzE2MTUsNyBAQAogCiAJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKIAkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19ycG9ydF9naWRwbl9yZXNwb25zZSwKLQkJICAgICAgKHZvaWQgKilycG9ydCwgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCQkgICAgICAodm9pZCAqKXJwb3J0LCBGQ19NQVhfUERVU1osIEZDX0ZDQ1RfVE9WKTsKIAogCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZDWFBfU0VOVCk7CiB9CkBAIC0xNjkyLDcgKzE3MjcsNyBAQAogCiAJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKIAkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgTlVMTCwgcnBvcnQsIEZDX01BWF9QRFVTWiwKLQkJICAgICAgRkNfRURfVE9WKTsKKwkJICAgICAgRkNfRUxTX1RPVik7CiAKIAlycG9ydC0+c3RhdHMubG9nb3MrKzsKIAliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKQEAgLTIxODQsNiArMjIxOSw3IEBACiAJcnBvcnQtPnJlcGx5X294aWQgPSBmY2hzLT5veF9pZDsKIAliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5yZXBseV9veGlkKTsKIAorCXJwb3J0LT5wcmxvID0gQkZBX0ZBTFNFOwogCXJwb3J0LT5zdGF0cy5sb2dvX3JjdmQrKzsKIAliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9MT0dPX1JDVkQpOwogfQpAQCAtMjU1Myw2ICsyNTg5LDMwIEBACiAJfQogfQogCisvKiBTZW5kIGJlc3QgY2FzZSBhY2MgdG8gcHJsbyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc2VuZF9wcmxvX2FjYyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zIGZjaHM7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJaW50IGxlbjsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisKKwlmY3hwID0gYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKQorCQlyZXR1cm47CisKKwlsZW4gPSBmY19wcmxvX2FjY19idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKKwkJCXJwb3J0LT5waWQsIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwKKwkJCXJwb3J0LT5yZXBseV9veGlkLCAwKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgcnBvcnQtPmJmYV9ycG9ydCwgcG9ydC0+ZmFicmljLT52Zl9pZCwKKwkJCXBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLCBGQ19DTEFTU18zLCBsZW4sICZmY2hzLAorCQkJTlVMTCwgTlVMTCwgRkNfTUFYX1BEVVNaLCAwKTsKK30KKwogLyoKICAqIFNlbmQgYSBMUyByZWplY3QKICAqLwpAQCAtMjYwNCwzICsyNjY0LDEzIEBACiAJaWYgKHJwb3J0X3RtbyA+IDApCiAJCWJmYV9mY3NfcnBvcnRfZGVsX3RpbWVvdXQgPSBycG9ydF90bW8gKiAxMDAwOwogfQorCit2b2lkCitiZmFfZmNzX3Jwb3J0X3BybG8oc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIHVpbnQxNl90IG94X2lkKQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisKKwlycG9ydC0+cHJsbyA9IEJGQV9UUlVFOworCXJwb3J0LT5yZXBseV9veGlkID0gb3hfaWQ7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfUFJMT19SQ1ZEKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvcnBvcnRfYXBpLmMgYi9kcml2ZXJzL3Njc2kvYmZhL3Jwb3J0X2FwaS5jCmluZGV4IGE0NDFmNDEuLjE1ZTBjNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvcnBvcnRfYXBpLmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9ycG9ydF9hcGkuYwpAQCAtODMsNiArODMsNyBAQAogewogCXN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyBxb3NfYXR0cjsKIAlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKwllbnVtIGJmYV9wcG9ydF9zcGVlZCBycG9ydF9zcGVlZCA9IHJwb3J0LT5ycGYucnBzY19zcGVlZDsKIAogCWJmYV9vc19tZW1zZXQocnBvcnRfYXR0ciwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfcnBvcnRfYXR0cl9zKSk7CiAKQEAgLTEwMiwxMCArMTAzLDE0IEBACiAJcnBvcnRfYXR0ci0+cW9zX2F0dHIgPSBxb3NfYXR0cjsKIAogCXJwb3J0X2F0dHItPnRybF9lbmZvcmNlZCA9IEJGQV9GQUxTRTsKKwogCWlmIChiZmFfZmNwb3J0X2lzX3JhdGVsaW0ocG9ydC0+ZmNzLT5iZmEpKSB7Ci0JCWlmICgocnBvcnQtPnJwZi5ycHNjX3NwZWVkID09IEJGQV9QUE9SVF9TUEVFRF9VTktOT1dOKSB8fAotCQkJKHJwb3J0LT5ycGYucnBzY19zcGVlZCA8Ci0JCQliZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X21heF9zcGVlZChwb3J0KSkpCisJCWlmIChycG9ydF9zcGVlZCA9PSBCRkFfUFBPUlRfU1BFRURfVU5LTk9XTikgeworCQkJLyogVXNlIGRlZmF1bHQgcmF0ZWxpbSBzcGVlZCBzZXR0aW5nICovCisJCQlycG9ydF9zcGVlZCA9CisJCQkJYmZhX2ZjcG9ydF9nZXRfcmF0ZWxpbV9zcGVlZChycG9ydC0+ZmNzLT5iZmEpOworCQl9CisJCWlmIChycG9ydF9zcGVlZCA8IGJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfbWF4X3NwZWVkKHBvcnQpKQogCQkJcnBvcnRfYXR0ci0+dHJsX2VuZm9yY2VkID0gQkZBX1RSVUU7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL3Jwb3J0X2Z0cnMuYyBiL2RyaXZlcnMvc2NzaS9iZmEvcnBvcnRfZnRycy5jCmluZGV4IGFlN2JiYTYuLmYyYTkzNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvcnBvcnRfZnRycy5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvcnBvcnRfZnRycy5jCkBAIC03Myw2ICs3Myw3IEBACiBiZmFfZmNzX3JwZl9zbV91bmluaXQoc3RydWN0IGJmYV9mY3NfcnBmX3MgKnJwZiwgZW51bSBycGZfZXZlbnQgZXZlbnQpCiB7CiAJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycGYtPnJwb3J0OworCXN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMgPSAmcnBvcnQtPmZjcy0+ZmFicmljOwogCiAJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CiAJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKQEAgLTgwLDEyICs4MSwxNiBAQAogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgUlBGU01fRVZFTlRfUlBPUlRfT05MSU5FOgotCQlpZiAoIUJGQV9GQ1NfUElEX0lTX1dLQShycG9ydC0+cGlkKSkgeworCQkvKiBTZW5kIFJQU0MyIHRvIGEgQnJvY2FkZSBmYWJyaWMgb25seS4gKi8KKwkJaWYgKCghQkZBX0ZDU19QSURfSVNfV0tBKHJwb3J0LT5waWQpKSAmJgorCQkJKChiZmFfbHBzX2lzX2JyY2RfZmFicmljKHJwb3J0LT5wb3J0LT5mYWJyaWMtPmxwcykpIHx8CisJCQkoYmZhX2Zjc19mYWJyaWNfZ2V0X3N3aXRjaF9vdWkoZmFicmljKSA9PQorCQkJCQkJQkZBX0ZDU19CUkNEX1NXSVRDSF9PVUkpKSkgewogCQkJYmZhX3NtX3NldF9zdGF0ZShycGYsIGJmYV9mY3NfcnBmX3NtX3Jwc2Nfc2VuZGluZyk7CiAJCQlycGYtPnJwc2NfcmV0cmllcyA9IDA7CiAJCQliZmFfZmNzX3JwZl9zZW5kX3Jwc2MyKHJwZiwgTlVMTCk7Ci0JCQlicmVhazsKLQkJfTsKKwkJfQorCQlicmVhazsKIAogCWNhc2UgUlBGU01fRVZFTlRfUlBPUlRfT0ZGTElORToKIAkJYnJlYWs7CkBAIC0yNjksNiArMjc0LDcgQEAKIAlpZiAoX19mY3NfbWluX2NmZyhycG9ydC0+cG9ydC0+ZmNzKSkKIAkJcmV0dXJuOwogCisJcnBvcnQtPnJwZi5ycHNjX3NwZWVkID0gMDsKIAliZmFfc21fc2VuZF9ldmVudCgmcnBvcnQtPnJwZiwgUlBGU01fRVZFTlRfUlBPUlRfT0ZGTElORSk7CiB9CiAKQEAgLTMwNyw3ICszMTMsNyBAQAogCiAJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKIAkJCSAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19ycGZfcnBzYzJfcmVzcG9uc2UsCi0JCQkgIHJwZiwgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCQkJICBycGYsIEZDX01BWF9QRFVTWiwgRkNfRUxTX1RPVik7CiAJcnBvcnQtPnN0YXRzLnJwc2Nfc2VudCsrOwogCWJmYV9zbV9zZW5kX2V2ZW50KHJwZiwgUlBGU01fRVZFTlRfRkNYUF9TRU5UKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9zY24uYyBiL2RyaXZlcnMvc2NzaS9iZmEvc2NuLmMKaW5kZXggOGZlMDliYS4uOGE2MDEyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9zY24uYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL3Njbi5jCkBAIC0yMTgsNyArMjE4LDcgQEAKIAogCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCiAJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIGJmYV9mY3NfcG9ydF9zY25fc2NyX3Jlc3BvbnNlLAotCQkgICAgICAodm9pZCAqKXNjbiwgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCQkgICAgICAodm9pZCAqKXNjbiwgRkNfTUFYX1BEVVNaLCBGQ19FTFNfVE9WKTsKIAogCWJmYV9zbV9zZW5kX2V2ZW50KHNjbiwgU0NOU01fRVZFTlRfU0NSX1NFTlQpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS92cG9ydC5jIGIvZHJpdmVycy9zY3NpL2JmYS92cG9ydC5jCmluZGV4IDI3Y2Q2MTkuLmIzNzhlYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvdnBvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL3Zwb3J0LmMKQEAgLTIxOCw5ICsyMTgsOSBAQAogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9ERUxFVEU6Ci0JCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fbG9nbyk7CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fY2xlYW51cCk7CiAJCWJmYV9scHNfZGlzY2FyZCh2cG9ydC0+bHBzKTsKLQkJYmZhX2Zjc192cG9ydF9kb19sb2dvKHZwb3J0KTsKKwkJYmZhX2Zjc19wb3J0X2RlbGV0ZSgmdnBvcnQtPmxwb3J0KTsKIAkJYnJlYWs7CiAKIAljYXNlIEJGQV9GQ1NfVlBPUlRfU01fT0ZGTElORToKQEAgLTM1Nyw4ICszNTcsOSBAQAogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9ERUxFVEU6Ci0JCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fdW5pbml0KTsKLQkJYmZhX2Zjc192cG9ydF9mcmVlKHZwb3J0KTsKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9jbGVhbnVwKTsKKwkJYmZhX2Zjc19wb3J0X2RlbGV0ZSgmdnBvcnQtPmxwb3J0KTsKKwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC01OTQsNiArNTk1LDE1IEBACiB9CiAKIC8qKgorICogZGVsZXRlIG5vdGlmaWNhdGlvbiBmcm9tIGZhYnJpYyBTTS4gVG8gYmUgaW52b2tlZCBmcm9tIHdpdGhpbiBGQ1MuCisgKi8KK3ZvaWQKK2JmYV9mY3NfdnBvcnRfZmNzX2RlbGV0ZShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9ERUxFVEUpOworfQorCisvKioKICAqIERlbGV0ZSBjb21wbGV0aW9uIGNhbGxiYWNrIGZyb20gYXNzb2NpYXRlZCBscG9ydAogICovCiB2b2lkCkBAIC02NDYsNiArNjU2LDcgQEAKIAkJcmV0dXJuIEJGQV9TVEFUVVNfVlBPUlRfTUFYOwogCiAJdnBvcnQtPnZwb3J0X2RydiA9IHZwb3J0X2RydjsKKwl2cG9ydF9jZmctPnByZWJvb3RfdnAgPSBCRkFfRkFMU0U7CiAJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV91bmluaXQpOwogCiAJYmZhX2Zjc19scG9ydF9hdHRhY2goJnZwb3J0LT5scG9ydCwgZmNzLCB2Zl9pZCwgdnBvcnQpOwpAQCAtNjU3LDYgKzY2OCwzNiBAQAogfQogCiAvKioKKyAqICAgICAgVXNlIHRoaXMgZnVuY3Rpb24gdG8gaW5zdGFudGlhdGUgYSBuZXcgRkNTIFBCQyB2cG9ydCBvYmplY3QuIFRoaXMKKyAqICAgICAgZnVuY3Rpb24gd2lsbCBub3QgdHJpZ2dlciBhbnkgSFcgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyAod2hpY2ggd2lsbCBiZQorICogICAgICBkb25lIGluIHZwb3J0X3N0YXJ0KCkgY2FsbCkKKyAqCisgKiAgICAgIHBhcmFtW2luXSB2cG9ydCAgICAgICAgLSAgICAgICBwb2ludGVyIHRvIGJmYV9mY3NfdnBvcnRfdC4gVGhpcyBzcGFjZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRzIHRvIGJlIGFsbG9jYXRlZCBieSB0aGUgZHJpdmVyLgorICogICAgICBwYXJhbVtpbl0gZmNzICAgICAgICAgIC0gICAgICAgRkNTIGluc3RhbmNlCisgKiAgICAgIHBhcmFtW2luXSB2cG9ydF9jZmcgICAgLSAgICAgICB2cG9ydCBjb25maWd1cmF0aW9uCisgKiAgICAgIHBhcmFtW2luXSB2Zl9pZCAgICAgICAgLSAgICAgICBWRl9JRCBpZiB2cG9ydCBpcyBjcmVhdGVkIHdpdGhpbiBhIFZGLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZDX1ZGX0lEX05VTEwgdG8gc3BlY2lmeSBiYXNlIGZhYnJpYy4KKyAqICAgICAgcGFyYW1baW5dIHZwb3J0X2RydiAgICAtICAgICAgIE9wYXF1ZSBoYW5kbGUgYmFjayB0byB0aGUgZHJpdmVyJ3MgdnBvcnQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUKKyAqCisgKiAgICAgIHJldHZhbCBCRkFfU1RBVFVTX09LIC0gb24gc3VjY2Vzcy4KKyAqICAgICAgcmV0dmFsIEJGQV9TVEFUVVNfRkFJTEVEIC0gb24gZmFpbHVyZS4KKyAqLworYmZhX3N0YXR1c190CitiZmFfZmNzX3BiY192cG9ydF9jcmVhdGUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsIHN0cnVjdCBiZmFfZmNzX3MgKmZjcywKKwkJCXVpbnQxNl90IHZmX2lkLCBzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnZwb3J0X2NmZywKKwkJCXN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwb3J0X2RydikKK3sKKwliZmFfc3RhdHVzX3QgcmM7CisKKwlyYyA9IGJmYV9mY3NfdnBvcnRfY3JlYXRlKHZwb3J0LCBmY3MsIHZmX2lkLCB2cG9ydF9jZmcsIHZwb3J0X2Rydik7CisJdnBvcnQtPmxwb3J0LnBvcnRfY2ZnLnByZWJvb3RfdnAgPSBCRkFfVFJVRTsKKworCXJldHVybiByYzsKK30KKworLyoqCiAgKiAgCVVzZSB0aGlzIGZ1bmN0aW9uIGluaXRpYWxpemUgdGhlIHZwb3J0LgogICoKICAqICBAcGFyYW1baW5dIHZwb3J0IC0gcG9pbnRlciB0byBiZmFfZmNzX3Zwb3J0X3QuCkBAIC02OTIsNiArNzMzLDggQEAKICAqICAJVXNlIHRoaXMgZnVuY3Rpb24gdG8gZGVsZXRlIGEgdnBvcnQgb2JqZWN0LiBGYWJyaWMgb2JqZWN0IHNob3VsZAogICogCQliZSBzdG9wcGVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGNhbGwuCiAgKgorICoJRG9ub3QgaW52b2tlIHRoaXMgZnJvbSB3aXRoaW4gRkNTCisgKgogICogCXBhcmFtW2luXSB2cG9ydCAtIHBvaW50ZXIgdG8gYmZhX2Zjc192cG9ydF90LgogICoKICAqIAlyZXR1cm4gICAgIE5vbmUKQEAgLTY5OSw2ICs3NDIsOSBAQAogYmZhX3N0YXR1c190CiBiZmFfZmNzX3Zwb3J0X2RlbGV0ZShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKIHsKKwlpZiAodnBvcnQtPmxwb3J0LnBvcnRfY2ZnLnByZWJvb3RfdnApCisJCXJldHVybiBCRkFfU1RBVFVTX1BCQzsKKwogCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX0RFTEVURSk7CiAKIAlyZXR1cm4gQkZBX1NUQVRVU19PSzsKQEAgLTc4OSw3ICs4MzUsNyBAQAogCXN3aXRjaCAoc3RhdHVzKSB7CiAJY2FzZSBCRkFfU1RBVFVTX09LOgogCQkvKgotCQkgKiBJbml0aWFsaWF6ZSB0aGUgVi1Qb3J0IGZpZWxkcworCQkgKiBJbml0aWFsaXplIHRoZSBWLVBvcnQgZmllbGRzCiAJCSAqLwogCQlfX3Zwb3J0X2ZjaWQodnBvcnQpID0gYmZhX2xwc19nZXRfcGlkKHZwb3J0LT5scHMpOwogCQl2cG9ydC0+dnBvcnRfc3RhdHMuZmRpc2NfYWNjZXB0cysrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpLmggYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmkuaAppbmRleCA2YjYyNGU3Li4wMGMwMzM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmkuaAorKysgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmkuaApAQCAtMjk1LDE2ICsyOTUsMjEgQEAKICAqIEBtYXhfY3FlczogICAgICAgICAgICAgIENRIHNpemUKICAqIEBudW1fY2NlbGw6ICAgICAgICAgICAgIG51bWJlciBvZiBjb21tYW5kIGNlbGxzIHBlciBjb25uZWN0aW9uCiAgKiBAb2ZsZF9jb25uc19hY3RpdmU6ICAgICBhY3RpdmUgY29ubmVjdGlvbiBsaXN0CisgKiBAZWhfd2FpdDogICAgICAgICAgICAgICB3YWl0IHF1ZXVlIGZvciB0aGUgZW5kcG9pbnQgdG8gc2h1dGRvd24KICAqIEBtYXhfYWN0aXZlX2Nvbm5zOiAgICAgIG1heCBvZmZsb2FkIGNvbm5lY3Rpb25zIHN1cHBvcnRlZCBieSB0aGlzIGRldmljZQogICogQGNpZF9xdWU6ICAgICAgICAgICAgICAgaXNjc2kgY2lkIHF1ZXVlCiAgKiBAZXBfcmR3cl9sb2NrOiAgICAgICAgICByZWFkIC8gd3JpdGUgbG9jayB0byBzeW5jaHJvbml6ZSB2YXJpb3VzIGVwIGxpc3RzCiAgKiBAZXBfb2ZsZF9saXN0OiAgICAgICAgICBjb25uZWN0aW9uIGxpc3QgZm9yIHBlbmRpbmcgb2ZmbG9hZCBjb21wbGV0aW9uCisgKiBAZXBfYWN0aXZlX2xpc3Q6ICAgICAgICBjb25uZWN0aW9uIGxpc3QgZm9yIGFjdGl2ZSBvZmZsb2FkIGVuZHBvaW50cwogICogQGVwX2Rlc3Ryb3lfbGlzdDogICAgICAgY29ubmVjdGlvbiBsaXN0IGZvciBwZW5kaW5nIG9mZmxvYWQgY29tcGxldGlvbgogICogQG1wX2JkX3RibDogICAgICAgICAgICAgQkQgdGFibGUgdG8gYmUgdXNlZCB3aXRoIG1pZGRsZSBwYXRoIHJlcXVlc3RzCiAgKiBAbXBfYmRfZG1hOiAgICAgICAgICAgICBETUEgYWRkcmVzcyBvZiAnbXBfYmRfdGJsJyBtZW1vcnkgYnVmZmVyCiAgKiBAZHVtbXlfYnVmZmVyOiAgICAgICAgICBEdW1teSBidWZmZXIgdG8gYmUgdXNlZCB3aXRoIHplcm8gbGVuZ3RoIHNjc2ljbWQgcmVxcwogICogQGR1bW15X2J1Zl9kbWE6ICAgICAgICAgRE1BIGFkZHJlc3Mgb2YgJ2R1bW15X2J1ZmZlcicgbWVtb3J5IGJ1ZmZlcgogICogQGxvY2s6ICAgICAgICAgICAgICAJICAgbG9jayB0byBzeW5jaG9uaXplIGFjY2VzcyB0byBoYmEgc3RydWN0dXJlCisgKiBAaGJhX3NodXRkb3duX3RtbzogICAgICBUaW1lb3V0IHZhbHVlIHRvIHNodXRkb3duIGVhY2ggY29ubmVjdGlvbgorICogQGNvbm5fdGVhcmRvd25fdG1vOiAgICAgVGltZW91dCB2YWx1ZSB0byB0ZWFyIGRvd24gZWFjaCBjb25uZWN0aW9uCisgKiBAY29ubl9jdHhfZGVzdHJveV90bW86ICBUaW1lb3V0IHZhbHVlIHRvIGRlc3Ryb3kgY29udGV4dCBvZiBlYWNoIGNvbm5lY3Rpb24KICAqIEBwY2lfZGlkOiAgICAgICAgICAgICAgIFBDSSBkZXZpY2UgSUQKICAqIEBwY2lfdmlkOiAgICAgICAgICAgICAgIFBDSSB2ZW5kb3IgSUQKICAqIEBwY2lfc2RpZDogICAgICAgICAgICAgIFBDSSBzdWJzeXN0ZW0gZGV2aWNlIElECkBAIC0zNjksNiArMzc0LDcgQEAKIAogCXJ3bG9ja190IGVwX3Jkd3JfbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGVwX29mbGRfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGVwX2FjdGl2ZV9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgZXBfZGVzdHJveV9saXN0OwogCiAJLyoKQEAgLTM4Myw2ICszODksOCBAQAogCXN0cnVjdCBtdXRleCBuZXRfZGV2X2xvY2s7Lyogc3luYyBuZXQgZGV2aWNlIGFjY2VzcyAqLwogCiAJaW50IGhiYV9zaHV0ZG93bl90bW87CisJaW50IGNvbm5fdGVhcmRvd25fdG1vOworCWludCBjb25uX2N0eF9kZXN0cm95X3RtbzsKIAkvKgogCSAqIFBDSSByZWxhdGVkIGluZm8uCiAJICovCkBAIC02MzEsNiArNjM5LDggQEAKIAlFUF9TVEFURV9DTEVBTlVQX0NNUEwgICAgICAgICAgID0gMHg4MDAsCiAJRVBfU1RBVEVfVENQX0ZJTl9SQ1ZEICAgICAgICAgICA9IDB4MTAwMCwKIAlFUF9TVEFURV9UQ1BfUlNUX1JDVkQgICAgICAgICAgID0gMHgyMDAwLAorCUVQX1NUQVRFX0xPR09VVF9TRU5UICAgICAgICAgICAgPSAweDQwMDAsCisJRVBfU1RBVEVfTE9HT1VUX1JFU1BfUkNWRCAgICAgICA9IDB4ODAwMCwKIAlFUF9TVEFURV9QR19PRkxEX0ZBSUxFRCAgICAgICAgID0gMHgxMDAwMDAwLAogCUVQX1NUQVRFX1VMUF9VUERBVEVfRkFJTEVEICAgICAgPSAweDIwMDAwMDAsCiAJRVBfU1RBVEVfQ0xFQU5VUF9GQUlMRUQgICAgICAgICA9IDB4NDAwMDAwMCwKQEAgLTY0NSw2ICs2NTUsNyBAQAogICogQGxpbms6ICAgICAgICAgICAgICAgbGlzdCBoZWFkIHRvIGxpbmsgZWxlbWVudHMKICAqIEBoYmE6ICAgICAgICAgICAgICAgIGFkYXB0ZXIgdG8gd2hpY2ggdGhpcyBjb25uZWN0aW9uIGJlbG9uZ3MKICAqIEBjb25uOiAgICAgICAgICAgICAgIGlzY3NpIGNvbm5lY3Rpb24gdGhpcyBFUCBpcyBsaW5rZWQgdG8KKyAqIEBjbHNfZXA6ICAgICAgICAgICAgIGFzc29jaWF0ZWQgaVNDU0kgZW5kcG9pbnQgcG9pbnRlcgogICogQHNlc3M6ICAgICAgICAgICAgICAgaXNjc2kgc2Vzc2lvbiB0aGlzIEVQIGlzIGxpbmtlZCB0bwogICogQGNtX3NrOiAgICAgICAgICAgICAgY25pYyBzb2NrIHN0cnVjdAogICogQGhiYV9hZ2U6ICAgICAgICAgICAgYWdlIHRvIGRldGVjdCBpZiAnaXNjc2lkJyBpc3N1ZXMgZXBfZGlzY29ubmVjdCgpCkBAIC02NjQsNiArNjc1LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CiAJc3RydWN0IGJueDJpX2hiYSAqaGJhOwogCXN0cnVjdCBibngyaV9jb25uICpjb25uOworCXN0cnVjdCBpc2NzaV9lbmRwb2ludCAqY2xzX2VwOwogCXN0cnVjdCBjbmljX3NvY2sgKmNtX3NrOwogCXUzMiBoYmFfYWdlOwogCXUzMiBzdGF0ZTsKQEAgLTc2Niw2ICs3NzgsOCBAQAogZXh0ZXJuIGludCBibngyaV9tYXBfZXBfZGJlbGxfcmVncyhzdHJ1Y3QgYm54MmlfZW5kcG9pbnQgKmVwKTsKIGV4dGVybiB2b2lkIGJueDJpX2FybV9jcV9ldmVudF9jb2FsZXNjaW5nKHN0cnVjdCBibngyaV9lbmRwb2ludCAqZXAsIHU4IGFjdGlvbik7CiAKK2V4dGVybiBpbnQgYm54MmlfaHdfZXBfZGlzY29ubmVjdChzdHJ1Y3QgYm54MmlfZW5kcG9pbnQgKmJueDJpX2VwKTsKKwogLyogRGVidWcgcmVsYXRlZCBmdW5jdGlvbiBwcm90b3R5cGVzICovCiBleHRlcm4gdm9pZCBibngyaV9wcmludF9wZW5kX2NtZF9xdWV1ZShzdHJ1Y3QgYm54MmlfY29ubiAqY29ubik7CiBleHRlcm4gdm9pZCBibngyaV9wcmludF9hY3RpdmVfY21kX3F1ZXVlKHN0cnVjdCBibngyaV9jb25uICpjb25uKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9od2kuYyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9od2kuYwppbmRleCAzYTY2Y2EyLi5kMjNmYzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaHdpLmMKKysrIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2h3aS5jCkBAIC01NjIsNiArNTYyLDggQEAKIAlsb2dvdXRfd3FlLT5udW1fYmRzID0gMTsKIAlsb2dvdXRfd3FlLT5jcV9pbmRleCA9IDA7IC8qIENRIyB1c2VkIGZvciBjb21wbGV0aW9uLCA1NzcxeCBvbmx5ICovCiAKKwlibngyaV9jb25uLT5lcC0+c3RhdGUgPSBFUF9TVEFURV9MT0dPVVRfU0VOVDsKKwogCWJueDJpX3JpbmdfZGJlbGxfdXBkYXRlX3NxX3BhcmFtcyhibngyaV9jb25uLCAxKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE0ODIsNiArMTQ4NCw4IEBACiAJcmVzcF9oZHItPnQycmV0YWluID0gY3B1X3RvX2JlMzIobG9nb3V0LT50aW1lX3RvX3JldGFpbik7CiAKIAlfX2lzY3NpX2NvbXBsZXRlX3BkdShjb25uLCAoc3RydWN0IGlzY3NpX2hkciAqKXJlc3BfaGRyLCBOVUxMLCAwKTsKKworCWJueDJpX2Nvbm4tPmVwLT5zdGF0ZSA9IEVQX1NUQVRFX0xPR09VVF9SRVNQX1JDVkQ7CiBkb25lOgogCXNwaW5fdW5sb2NrKCZzZXNzaW9uLT5sb2NrKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pbml0LmMgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaW5pdC5jCmluZGV4IGFmNmEwMGEuLmE3OTZmNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2luaXQuYwpAQCAtMTcsOCArMTcsOCBAQAogc3RhdGljIHUzMiBhZGFwdGVyX2NvdW50OwogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJImJueDJpIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjIuMS4xIgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIk1hciAyNCwgMjAxMCIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIyLjEuMiIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJKdW4gMjgsIDIwMTAiCiAKIHN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KIAkJIkJyb2FkY29tIE5ldFh0cmVtZSBJSSBpU0NTSSBEcml2ZXIgIiBEUlZfTU9EVUxFX05BTUUgXApAQCAtMTc2LDYgKzE3Niw5IEBACiB2b2lkIGJueDJpX3N0b3Aodm9pZCAqaGFuZGxlKQogewogCXN0cnVjdCBibngyaV9oYmEgKmhiYSA9IGhhbmRsZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICp0bXA7CisJc3RydWN0IGJueDJpX2VuZHBvaW50ICpibngyaV9lcDsKKwlpbnQgY29ubnNfYWN0aXZlOwogCiAJLyogY2hlY2sgaWYgY2xlYW51cCBoYXBwZW5lZCBpbiBHT0lOR19ET1dOIGNvbnRleHQgKi8KIAlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChBREFQVEVSX1NUQVRFX0dPSU5HX0RPV04sCkBAIC0xODcsOSArMTkwLDMzIEBACiAJICogIGNvbnRyb2wgcmV0dXJucyB0byBuZXR3b3JrIGRyaXZlci4gU28gaXQgaXMgcmVxdWlyZWQgdG8gY2xlYW51cCBhbmQKIAkgKiByZWxlYXNlIGFsbCBjb25uZWN0aW9uIHJlc291cmNlcyBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhpcyByb3V0aW5lLgogCSAqLwotCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGhiYS0+ZWhfd2FpdCwKLQkJCQkJIChoYmEtPm9mbGRfY29ubnNfYWN0aXZlID09IDApLAotCQkJCQkgaGJhLT5oYmFfc2h1dGRvd25fdG1vKTsKKwl3aGlsZSAoaGJhLT5vZmxkX2Nvbm5zX2FjdGl2ZSkgeworCQljb25uc19hY3RpdmUgPSBoYmEtPm9mbGRfY29ubnNfYWN0aXZlOworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChoYmEtPmVoX3dhaXQsCisJCQkJKGhiYS0+b2ZsZF9jb25uc19hY3RpdmUgIT0gY29ubnNfYWN0aXZlKSwKKwkJCQloYmEtPmhiYV9zaHV0ZG93bl90bW8pOworCQlpZiAoaGJhLT5vZmxkX2Nvbm5zX2FjdGl2ZSA9PSBjb25uc19hY3RpdmUpCisJCQlicmVhazsKKwl9CisJaWYgKGhiYS0+b2ZsZF9jb25uc19hY3RpdmUpIHsKKwkJLyogU3RhZ2UgdG8gZm9yY2UgdGhlIGRpc2Nvbm5lY3Rpb24KKwkJICogVGhpcyBpcyB0aGUgY2FzZSB3aGVyZSB0aGUgZGFlbW9uIGlzIGVpdGhlciBzbG93IG9yCisJCSAqIG5vdCBwcmVzZW50CisJCSAqLworCQlwcmludGsoS0VSTl9BTEVSVCAiYm54Mmk6IFdhaXQgdGltZW91dCwgZm9yY2UgYWxsIGVwcyAiCisJCQkidG8gZGlzY29ubmVjdCAoJWQpXG4iLCBoYmEtPm9mbGRfY29ubnNfYWN0aXZlKTsKKwkJbXV0ZXhfbG9jaygmaGJhLT5uZXRfZGV2X2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0bXAsICZoYmEtPmVwX2FjdGl2ZV9saXN0KSB7CisJCQlibngyaV9lcCA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgYm54MmlfZW5kcG9pbnQsIGxpbmspOworCQkJLyogQ2xlYW4gdXAgdGhlIGNoaXAgb25seSAqLworCQkJYm54MmlfaHdfZXBfZGlzY29ubmVjdChibngyaV9lcCk7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZoYmEtPm5ldF9kZXZfbG9jayk7CisJCWlmIChoYmEtPm9mbGRfY29ubnNfYWN0aXZlKQorCQkJcHJpbnRrKEtFUk5fRVJSICJibngyaTogRVAgZGlzY29ubmVjdCB0aW1lb3V0ICglZCkhXG4iLAorCQkJCWhiYS0+b2ZsZF9jb25uc19hY3RpdmUpOworCX0KKwogCS8qIFRoaXMgZmxhZyBzaG91bGQgYmUgY2xlYXJlZCBsYXN0IHNvIHRoYXQgZXBfZGlzY29ubmVjdCgpIGdyYWNlZnVsbHkKIAkgKiBjbGVhbnMgdXAgY29ubmVjdGlvbiBjb250ZXh0CiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jCmluZGV4IGZhNjhhYjMuLmE0NmNjYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jCkBAIC0zODYsNiArMzg2LDcgQEAKIAl9CiAKIAlibngyaV9lcCA9IGVwLT5kZF9kYXRhOworCWJueDJpX2VwLT5jbHNfZXAgPSBlcDsKIAlJTklUX0xJU1RfSEVBRCgmYm54MmlfZXAtPmxpbmspOwogCWJueDJpX2VwLT5zdGF0ZSA9IEVQX1NUQVRFX0lETEU7CiAJYm54MmlfZXAtPmVwX2lzY3NpX2NpZCA9ICh1MTYpIC0xOwpAQCAtNjc4LDcgKzY3OSw2IEBACiAJcmV0dXJuIGVwOwogfQogCi0KIC8qKgogICogYm54MmlfZmluZF9lcF9pbl9kZXN0cm95X2xpc3QgLSBmaW5kIGlzY3NpX2NpZCBpbiBkZXN0cm95IGxpc3QKICAqIEBoYmE6IAkJcG9pbnRlciB0byBhZGFwdGVyIGluc3RhbmNlCkBAIC03MDksNiArNzA5LDM4IEBACiB9CiAKIC8qKgorICogYm54MmlfZXBfYWN0aXZlX2xpc3RfYWRkIC0gYWRkIGFuIGVudHJ5IHRvIGVwIGFjdGl2ZSBsaXN0CisgKiBAaGJhOglwb2ludGVyIHRvIGFkYXB0ZXIgaW5zdGFuY2UKKyAqIEBlcDoJCXBvaW50ZXIgdG8gZW5kcG9pbnQgKHRyYW5zcG9ydCBpbmRlbnRpZmllcikgc3RydWN0dXJlCisgKgorICogY3VycmVudCBhY3RpdmUgY29ubiBxdWV1ZSBtYW5hZ2VyCisgKi8KK3N0YXRpYyB2b2lkIGJueDJpX2VwX2FjdGl2ZV9saXN0X2FkZChzdHJ1Y3QgYm54MmlfaGJhICpoYmEsCisJCQkJICAgICBzdHJ1Y3QgYm54MmlfZW5kcG9pbnQgKmVwKQoreworCXdyaXRlX2xvY2tfYmgoJmhiYS0+ZXBfcmR3cl9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZlcC0+bGluaywgJmhiYS0+ZXBfYWN0aXZlX2xpc3QpOworCXdyaXRlX3VubG9ja19iaCgmaGJhLT5lcF9yZHdyX2xvY2spOworfQorCisKKy8qKgorICogYm54MmlfZXBfYWN0aXZlX2xpc3RfZGVsIC0gZGVsZXRlcyBhbiBlbnRyeSB0byBlcCBhY3RpdmUgbGlzdAorICogQGhiYToJcG9pbnRlciB0byBhZGFwdGVyIGluc3RhbmNlCisgKiBAZXA6CQlwb2ludGVyIHRvIGVuZHBvaW50ICh0cmFuc3BvcnQgaW5kZW50aWZpZXIpIHN0cnVjdHVyZQorICoKKyAqIGN1cnJlbnQgYWN0aXZlIGNvbm4gcXVldWUgbWFuYWdlcgorICovCitzdGF0aWMgdm9pZCBibngyaV9lcF9hY3RpdmVfbGlzdF9kZWwoc3RydWN0IGJueDJpX2hiYSAqaGJhLAorCQkJCSAgICAgc3RydWN0IGJueDJpX2VuZHBvaW50ICplcCkKK3sKKwl3cml0ZV9sb2NrX2JoKCZoYmEtPmVwX3Jkd3JfbG9jayk7CisJbGlzdF9kZWxfaW5pdCgmZXAtPmxpbmspOworCXdyaXRlX3VubG9ja19iaCgmaGJhLT5lcF9yZHdyX2xvY2spOworfQorCisKKy8qKgogICogYm54Mmlfc2V0dXBfaG9zdF9xdWV1ZV9zaXplIC0gYXNzaWducyBzaG9zdC0+Y2FuX3F1ZXVlIHBhcmFtCiAgKiBAaGJhOglwb2ludGVyIHRvIGFkYXB0ZXIgaW5zdGFuY2UKICAqIEBzaG9zdDoJc2NzaSBob3N0IHBvaW50ZXIKQEAgLTc4NCw2ICs4MTYsNyBAQAogCQlnb3RvIG1wX2JkdF9tZW1fZXJyOwogCiAJSU5JVF9MSVNUX0hFQUQoJmhiYS0+ZXBfb2ZsZF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmaGJhLT5lcF9hY3RpdmVfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmhiYS0+ZXBfZGVzdHJveV9saXN0KTsKIAlyd2xvY2tfaW5pdCgmaGJhLT5lcF9yZHdyX2xvY2spOwogCkBAIC04MjEsMTAgKzg1NCwxNSBAQAogCXNwaW5fbG9ja19pbml0KCZoYmEtPmxvY2spOwogCW11dGV4X2luaXQoJmhiYS0+bmV0X2Rldl9sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZoYmEtPmVoX3dhaXQpOwotCWlmICh0ZXN0X2JpdChCTlgySV9OWDJfREVWXzU3NzEwLCAmaGJhLT5jbmljX2Rldl90eXBlKSkKLQkJaGJhLT5oYmFfc2h1dGRvd25fdG1vID0gMjQwICogSFo7Ci0JZWxzZQkvKiA1NzA2LzU3MDgvNTcwOSAqLwotCQloYmEtPmhiYV9zaHV0ZG93bl90bW8gPSAzMCAqIEhaOworCWlmICh0ZXN0X2JpdChCTlgySV9OWDJfREVWXzU3NzEwLCAmaGJhLT5jbmljX2Rldl90eXBlKSkgeworCQloYmEtPmhiYV9zaHV0ZG93bl90bW8gPSAyMCAqIEhaOworCQloYmEtPmNvbm5fdGVhcmRvd25fdG1vID0gMjAgKiBIWjsKKwkJaGJhLT5jb25uX2N0eF9kZXN0cm95X3RtbyA9IDYgKiBIWjsKKwl9IGVsc2UgewkvKiA1NzA2LzU3MDgvNTcwOSAqLworCQloYmEtPmhiYV9zaHV0ZG93bl90bW8gPSAyMCAqIEhaOworCQloYmEtPmNvbm5fdGVhcmRvd25fdG1vID0gMTAgKiBIWjsKKwkJaGJhLT5jb25uX2N0eF9kZXN0cm95X3RtbyA9IDIgKiBIWjsKKwl9CiAKIAlpZiAoaXNjc2lfaG9zdF9hZGQoc2hvc3QsICZoYmEtPnBjaWRldi0+ZGV2KSkKIAkJZ290byBmcmVlX2R1bXBfbWVtOwpAQCAtODU3LDYgKzg5NSw3IEBACiAKIAlpc2NzaV9ob3N0X3JlbW92ZShzaG9zdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmhiYS0+ZXBfb2ZsZF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmaGJhLT5lcF9hY3RpdmVfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmhiYS0+ZXBfZGVzdHJveV9saXN0KTsKIAlwY2lfZGV2X3B1dChoYmEtPnBjaWRldik7CiAKQEAgLTE0NjEsNiArMTUwMCwyNiBAQAogCWNhc2UgSVNDU0lfSE9TVF9QQVJBTV9ORVRERVZfTkFNRToKIAkJbGVuID0gc3ByaW50ZihidWYsICIlc1xuIiwgaGJhLT5uZXRkZXYtPm5hbWUpOwogCQlicmVhazsKKwljYXNlIElTQ1NJX0hPU1RfUEFSQU1fSVBBRERSRVNTOiB7CisJCXN0cnVjdCBsaXN0X2hlYWQgKmFjdGl2ZV9saXN0ID0gJmhiYS0+ZXBfYWN0aXZlX2xpc3Q7CisKKwkJcmVhZF9sb2NrX2JoKCZoYmEtPmVwX3Jkd3JfbG9jayk7CisJCWlmICghbGlzdF9lbXB0eSgmaGJhLT5lcF9hY3RpdmVfbGlzdCkpIHsKKwkJCXN0cnVjdCBibngyaV9lbmRwb2ludCAqYm54MmlfZXA7CisJCQlzdHJ1Y3QgY25pY19zb2NrICpjc2s7CisKKwkJCWJueDJpX2VwID0gbGlzdF9maXJzdF9lbnRyeShhY3RpdmVfbGlzdCwKKwkJCQkJCSAgICBzdHJ1Y3QgYm54MmlfZW5kcG9pbnQsCisJCQkJCQkgICAgbGluayk7CisJCQljc2sgPSBibngyaV9lcC0+Y21fc2s7CisJCQlpZiAodGVzdF9iaXQoU0tfRl9JUFY2LCAmY3NrLT5mbGFncykpCisJCQkJbGVuID0gc3ByaW50ZihidWYsICIlcEk2XG4iLCBjc2stPnNyY19pcCk7CisJCQllbHNlCisJCQkJbGVuID0gc3ByaW50ZihidWYsICIlcEk0XG4iLCBjc2stPnNyY19pcCk7CisJCX0KKwkJcmVhZF91bmxvY2tfYmgoJmhiYS0+ZXBfcmR3cl9sb2NrKTsKKwkJYnJlYWs7CisJfQogCWRlZmF1bHQ6CiAJCXJldHVybiBpc2NzaV9ob3N0X2dldF9wYXJhbShzaG9zdCwgcGFyYW0sIGJ1Zik7CiAJfQpAQCAtMTU5OSw3ICsxNjU4LDcgQEAKIAogCWVwLT5zdGF0ZSA9IEVQX1NUQVRFX0NMRUFOVVBfU1RBUlQ7CiAJaW5pdF90aW1lcigmZXAtPm9mbGRfdGltZXIpOwotCWVwLT5vZmxkX3RpbWVyLmV4cGlyZXMgPSAxMCpIWiArIGppZmZpZXM7CisJZXAtPm9mbGRfdGltZXIuZXhwaXJlcyA9IGhiYS0+Y29ubl9jdHhfZGVzdHJveV90bW8gKyBqaWZmaWVzOwogCWVwLT5vZmxkX3RpbWVyLmZ1bmN0aW9uID0gYm54MmlfZXBfb2ZsZF90aW1lcjsKIAllcC0+b2ZsZF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGVwOwogCWFkZF90aW1lcigmZXAtPm9mbGRfdGltZXIpOwpAQCAtMTY2NSwxMCArMTcyNCwxMSBAQAogCiAJaWYgKCFoYmEgfHwgdGVzdF9iaXQoQURBUFRFUl9TVEFURV9HT0lOR19ET1dOLCAmaGJhLT5hZGFwdGVyX3N0YXRlKSkgewogCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gY2hlY2tfYnVzeTsKKwkJZ290byBub2hiYTsKIAl9CiAKIAljbmljID0gaGJhLT5jbmljOworCW11dGV4X2xvY2soJmhiYS0+bmV0X2Rldl9sb2NrKTsKIAllcCA9IGJueDJpX2FsbG9jX2VwKGhiYSk7CiAJaWYgKCFlcCkgewogCQlyYyA9IC1FTk9NRU07CkBAIC0xNjc2LDcgKzE3MzYsNiBAQAogCX0KIAlibngyaV9lcCA9IGVwLT5kZF9kYXRhOwogCi0JbXV0ZXhfbG9jaygmaGJhLT5uZXRfZGV2X2xvY2spOwogCWlmIChibngyaV9hZGFwdGVyX3JlYWR5KGhiYSkpIHsKIAkJcmMgPSAtRVBFUk07CiAJCWdvdG8gbmV0X2lmX2Rvd247CkBAIC0xNzU0LDE1ICsxODEzLDE5IEBACiAJCWdvdG8gY29ubl9mYWlsZWQ7CiAJfSBlbHNlCiAJCXJjID0gY25pYy0+Y21fY29ubmVjdChibngyaV9lcC0+Y21fc2ssICZzYWRkcik7Ci0KIAlpZiAocmMpCiAJCWdvdG8gcmVsZWFzZV9lcDsKIAorCWJueDJpX2VwX2FjdGl2ZV9saXN0X2FkZChoYmEsIGJueDJpX2VwKTsKKwogCWlmIChibngyaV9tYXBfZXBfZGJlbGxfcmVncyhibngyaV9lcCkpCi0JCWdvdG8gcmVsZWFzZV9lcDsKKwkJZ290byBkZWxfYWN0aXZlX2VwOworCiAJbXV0ZXhfdW5sb2NrKCZoYmEtPm5ldF9kZXZfbG9jayk7CiAJcmV0dXJuIGVwOwogCitkZWxfYWN0aXZlX2VwOgorCWJueDJpX2VwX2FjdGl2ZV9saXN0X2RlbChoYmEsIGJueDJpX2VwKTsKIHJlbGVhc2VfZXA6CiAJaWYgKGJueDJpX3RlYXJfZG93bl9jb25uKGhiYSwgYm54MmlfZXApKSB7CiAJCW11dGV4X3VubG9jaygmaGJhLT5uZXRfZGV2X2xvY2spOwpAQCAtMTc3NCw4ICsxODM3LDkgQEAKIAlibngyaV9mcmVlX3FwX3Jlc2MoaGJhLCBibngyaV9lcCk7CiBxcF9yZXNjX2VycjoKIAlibngyaV9mcmVlX2VwKGVwKTsKLQltdXRleF91bmxvY2soJmhiYS0+bmV0X2Rldl9sb2NrKTsKIGNoZWNrX2J1c3k6CisJbXV0ZXhfdW5sb2NrKCZoYmEtPm5ldF9kZXZfbG9jayk7Citub2hiYToKIAlibngyaV91bnJlZ19kZXZfYWxsKCk7CiAJcmV0dXJuIEVSUl9QVFIocmMpOwogfQpAQCAtMTg0Niw2ICsxOTEwLDggQEAKIAljYXNlIEVQX1NUQVRFX1VMUF9VUERBVEVfU1RBUlQ6CiAJY2FzZSBFUF9TVEFURV9VTFBfVVBEQVRFX0NPTVBMOgogCWNhc2UgRVBfU1RBVEVfVENQX0ZJTl9SQ1ZEOgorCWNhc2UgRVBfU1RBVEVfTE9HT1VUX1NFTlQ6CisJY2FzZSBFUF9TVEFURV9MT0dPVVRfUkVTUF9SQ1ZEOgogCWNhc2UgRVBfU1RBVEVfVUxQX1VQREFURV9GQUlMRUQ6CiAJCXJldCA9IDE7CiAJCWJyZWFrOwpAQCAtMTg2Niw5ICsxOTMyLDk2IEBACiB9CiAKIAorLyoKKyAqIGJueDJpX2h3X2VwX2Rpc2Nvbm5lY3QgLSBleGVjdXRlcyBUQ1AgY29ubmVjdGlvbiB0ZWFyZG93biBwcm9jZXNzIGluIHRoZSBodworICogQGVwOgkJVENQIGNvbm5lY3Rpb24gKGJueDJpIGVuZHBvaW50KSBoYW5kbGUKKyAqCisgKiBleGVjdXRlcyAgVENQIGNvbm5lY3Rpb24gdGVhcmRvd24gcHJvY2VzcworICovCitpbnQgYm54MmlfaHdfZXBfZGlzY29ubmVjdChzdHJ1Y3QgYm54MmlfZW5kcG9pbnQgKmJueDJpX2VwKQoreworCXN0cnVjdCBibngyaV9oYmEgKmhiYSA9IGJueDJpX2VwLT5oYmE7CisJc3RydWN0IGNuaWNfZGV2ICpjbmljOworCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gTlVMTDsKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IE5VTEw7CisJaW50IHJldCA9IDA7CisJaW50IGNsb3NlID0gMDsKKwlpbnQgY2xvc2VfcmV0ID0gMDsKKworCWlmICghaGJhKQorCQlyZXR1cm4gMDsKKworCWNuaWMgPSBoYmEtPmNuaWM7CisJaWYgKCFjbmljKQorCQlyZXR1cm4gMDsKKworCWlmICghYm54MmlfZXBfdGNwX2Nvbm5fYWN0aXZlKGJueDJpX2VwKSkKKwkJZ290byBkZXN0cm95X2Nvbm47CisKKwlpZiAoYm54MmlfZXAtPmNvbm4pIHsKKwkJY29ubiA9IGJueDJpX2VwLT5jb25uLT5jbHNfY29ubi0+ZGRfZGF0YTsKKwkJc2Vzc2lvbiA9IGNvbm4tPnNlc3Npb247CisJfQorCisJaW5pdF90aW1lcigmYm54MmlfZXAtPm9mbGRfdGltZXIpOworCWJueDJpX2VwLT5vZmxkX3RpbWVyLmV4cGlyZXMgPSBoYmEtPmNvbm5fdGVhcmRvd25fdG1vICsgamlmZmllczsKKwlibngyaV9lcC0+b2ZsZF90aW1lci5mdW5jdGlvbiA9IGJueDJpX2VwX29mbGRfdGltZXI7CisJYm54MmlfZXAtPm9mbGRfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBibngyaV9lcDsKKwlhZGRfdGltZXIoJmJueDJpX2VwLT5vZmxkX3RpbWVyKTsKKworCWlmICghdGVzdF9iaXQoQk5YMklfQ05JQ19SRUdJU1RFUkVELCAmaGJhLT5yZWdfd2l0aF9jbmljKSkKKwkJZ290byBvdXQ7CisKKwlpZiAoc2Vzc2lvbikgeworCQlzcGluX2xvY2tfYmgoJnNlc3Npb24tPmxvY2spOworCQlpZiAoYm54MmlfZXAtPnN0YXRlICE9IEVQX1NUQVRFX1RDUF9GSU5fUkNWRCkgeworCQkJaWYgKHNlc3Npb24tPnN0YXRlID09IElTQ1NJX1NUQVRFX0xPR0dJTkdfT1VUKSB7CisJCQkJaWYgKGJueDJpX2VwLT5zdGF0ZSA9PSBFUF9TVEFURV9MT0dPVVRfU0VOVCkgeworCQkJCQkvKiBMb2dvdXQgc2VudCwgYnV0IG5vIHJlc3AgKi8KKwkJCQkJcHJpbnRrKEtFUk5fQUxFUlQgImJueDJpIC0gV0FSTklORyAiCisJCQkJCQkibG9nb3V0IHJlc3BvbnNlIHdhcyBub3QgIgorCQkJCQkJInJlY2VpdmVkIVxuIik7CisJCQkJfSBlbHNlIGlmIChibngyaV9lcC0+c3RhdGUgPT0KKwkJCQkJICAgRVBfU1RBVEVfTE9HT1VUX1JFU1BfUkNWRCkKKwkJCQkJY2xvc2UgPSAxOworCQkJfQorCQl9IGVsc2UKKwkJCWNsb3NlID0gMTsKKworCQlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CisJfQorCisJYm54MmlfZXAtPnN0YXRlID0gRVBfU1RBVEVfRElTQ09OTl9TVEFSVDsKKworCWlmIChjbG9zZSkKKwkJY2xvc2VfcmV0ID0gY25pYy0+Y21fY2xvc2UoYm54MmlfZXAtPmNtX3NrKTsKKwllbHNlCisJCWNsb3NlX3JldCA9IGNuaWMtPmNtX2Fib3J0KGJueDJpX2VwLT5jbV9zayk7CisKKwlpZiAoY2xvc2VfcmV0KQorCQlibngyaV9lcC0+c3RhdGUgPSBFUF9TVEFURV9ESVNDT05OX0NPTVBMOworCisJLyogd2FpdCBmb3Igb3B0aW9uLTIgY29ubiB0ZWFyZG93biAqLworCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShibngyaV9lcC0+b2ZsZF93YWl0LAorCQkJCSBibngyaV9lcC0+c3RhdGUgIT0gRVBfU1RBVEVfRElTQ09OTl9TVEFSVCk7CisKKwlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCWZsdXNoX3NpZ25hbHMoY3VycmVudCk7CisJZGVsX3RpbWVyX3N5bmMoJmJueDJpX2VwLT5vZmxkX3RpbWVyKTsKKworZGVzdHJveV9jb25uOgorCWJueDJpX2VwX2FjdGl2ZV9saXN0X2RlbChoYmEsIGJueDJpX2VwKTsKKwlpZiAoYm54MmlfdGVhcl9kb3duX2Nvbm4oaGJhLCBibngyaV9lcCkpCisJCXJldCA9IC1FSU5WQUw7CitvdXQ6CisJYm54MmlfZXAtPnN0YXRlID0gRVBfU1RBVEVfSURMRTsKKwlyZXR1cm4gcmV0OworfQorCisKIC8qKgogICogYm54MmlfZXBfZGlzY29ubmVjdCAtIGV4ZWN1dGVzIFRDUCBjb25uZWN0aW9uIHRlYXJkb3duIHByb2Nlc3MKLSAqIEBlcDoJCVRDUCBjb25uZWN0aW9uIChlbmRwb2ludCkgaGFuZGxlCisgKiBAZXA6CQlUQ1AgY29ubmVjdGlvbiAoaXNjc2kgZW5kcG9pbnQpIGhhbmRsZQogICoKICAqIGV4ZWN1dGVzICBUQ1AgY29ubmVjdGlvbiB0ZWFyZG93biBwcm9jZXNzCiAgKi8KQEAgLTE4NzYsOSArMjAyOSw3IEBACiB7CiAJc3RydWN0IGJueDJpX2VuZHBvaW50ICpibngyaV9lcDsKIAlzdHJ1Y3QgYm54MmlfY29ubiAqYm54MmlfY29ubiA9IE5VTEw7Ci0Jc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBOVUxMOwotCXN0cnVjdCBpc2NzaV9jb25uICpjb25uOwotCXN0cnVjdCBjbmljX2RldiAqY25pYzsKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IE5VTEw7CiAJc3RydWN0IGJueDJpX2hiYSAqaGJhOwogCiAJYm54MmlfZXAgPSBlcC0+ZGRfZGF0YTsKQEAgLTE4OTQsNzIgKzIwNDUsMzQgQEAKIAlpZiAoYm54MmlfZXAtPmNvbm4pIHsKIAkJYm54MmlfY29ubiA9IGJueDJpX2VwLT5jb25uOwogCQljb25uID0gYm54MmlfY29ubi0+Y2xzX2Nvbm4tPmRkX2RhdGE7Ci0JCXNlc3Npb24gPSBjb25uLT5zZXNzaW9uOwotCiAJCWlzY3NpX3N1c3BlbmRfcXVldWUoY29ubik7CiAJfQotCiAJaGJhID0gYm54MmlfZXAtPmhiYTsKLQlpZiAoYm54MmlfZXAtPnN0YXRlID09IEVQX1NUQVRFX0lETEUpCi0JCWdvdG8gcmV0dXJuX2JueDJpX2VwOwotCWNuaWMgPSBoYmEtPmNuaWM7CiAKIAltdXRleF9sb2NrKCZoYmEtPm5ldF9kZXZfbG9jayk7CiAKKwlpZiAoYm54MmlfZXAtPnN0YXRlID09IEVQX1NUQVRFX0lETEUpCisJCWdvdG8gcmV0dXJuX2JueDJpX2VwOworCiAJaWYgKCF0ZXN0X2JpdChBREFQVEVSX1NUQVRFX1VQLCAmaGJhLT5hZGFwdGVyX3N0YXRlKSkKIAkJZ290byBmcmVlX3Jlc2M7CisKIAlpZiAoYm54MmlfZXAtPmhiYV9hZ2UgIT0gaGJhLT5hZ2UpCiAJCWdvdG8gZnJlZV9yZXNjOwogCi0JaWYgKCFibngyaV9lcF90Y3BfY29ubl9hY3RpdmUoYm54MmlfZXApKQotCQlnb3RvIGRlc3RvcnlfY29ubjsKLQotCWJueDJpX2VwLT5zdGF0ZSA9IEVQX1NUQVRFX0RJU0NPTk5fU1RBUlQ7Ci0KLQlpbml0X3RpbWVyKCZibngyaV9lcC0+b2ZsZF90aW1lcik7Ci0JYm54MmlfZXAtPm9mbGRfdGltZXIuZXhwaXJlcyA9IDEwKkhaICsgamlmZmllczsKLQlibngyaV9lcC0+b2ZsZF90aW1lci5mdW5jdGlvbiA9IGJueDJpX2VwX29mbGRfdGltZXI7Ci0JYm54MmlfZXAtPm9mbGRfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBibngyaV9lcDsKLQlhZGRfdGltZXIoJmJueDJpX2VwLT5vZmxkX3RpbWVyKTsKLQotCWlmICh0ZXN0X2JpdChCTlgySV9DTklDX1JFR0lTVEVSRUQsICZoYmEtPnJlZ193aXRoX2NuaWMpKSB7Ci0JCWludCBjbG9zZSA9IDA7Ci0KLQkJaWYgKHNlc3Npb24pIHsKLQkJCXNwaW5fbG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7Ci0JCQlpZiAoc2Vzc2lvbi0+c3RhdGUgPT0gSVNDU0lfU1RBVEVfTE9HR0lOR19PVVQpCi0JCQkJY2xvc2UgPSAxOwotCQkJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOwotCQl9Ci0JCWlmIChjbG9zZSkKLQkJCWNuaWMtPmNtX2Nsb3NlKGJueDJpX2VwLT5jbV9zayk7Ci0JCWVsc2UKLQkJCWNuaWMtPmNtX2Fib3J0KGJueDJpX2VwLT5jbV9zayk7Ci0JfSBlbHNlCi0JCWdvdG8gZnJlZV9yZXNjOwotCi0JLyogd2FpdCBmb3Igb3B0aW9uLTIgY29ubiB0ZWFyZG93biAqLwotCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShibngyaV9lcC0+b2ZsZF93YWl0LAotCQkJCSBibngyaV9lcC0+c3RhdGUgIT0gRVBfU1RBVEVfRElTQ09OTl9TVEFSVCk7Ci0KLQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCWZsdXNoX3NpZ25hbHMoY3VycmVudCk7Ci0JZGVsX3RpbWVyX3N5bmMoJmJueDJpX2VwLT5vZmxkX3RpbWVyKTsKLQotZGVzdG9yeV9jb25uOgotCWlmIChibngyaV90ZWFyX2Rvd25fY29ubihoYmEsIGJueDJpX2VwKSkgeworCS8qIERvIGFsbCBjaGlwIGNsZWFudXAgaGVyZSAqLworCWlmIChibngyaV9od19lcF9kaXNjb25uZWN0KGJueDJpX2VwKSkgewogCQltdXRleF91bmxvY2soJmhiYS0+bmV0X2Rldl9sb2NrKTsKIAkJcmV0dXJuOwogCX0KIGZyZWVfcmVzYzoKLQltdXRleF91bmxvY2soJmhiYS0+bmV0X2Rldl9sb2NrKTsKIAlibngyaV9mcmVlX3FwX3Jlc2MoaGJhLCBibngyaV9lcCk7CiByZXR1cm5fYm54MmlfZXA6CiAJaWYgKGJueDJpX2Nvbm4pCiAJCWJueDJpX2Nvbm4tPmVwID0gTlVMTDsKIAogCWJueDJpX2ZyZWVfZXAoZXApOwotCisJbXV0ZXhfdW5sb2NrKCZoYmEtPm5ldF9kZXZfbG9jayk7CiAJaWYgKCFoYmEtPm9mbGRfY29ubnNfYWN0aXZlKQogCQlibngyaV91bnJlZ19kZXZfYWxsKCk7CiAKQEAgLTIwMzgsNyArMjE1MSw4IEBACiAJCQkJICBJU0NTSV9MVV9SRVNFVF9UTU8gfCBJU0NTSV9UR1RfUkVTRVRfVE1PIHwKIAkJCQkgIElTQ1NJX1BJTkdfVE1PIHwgSVNDU0lfUkVDVl9UTU8gfAogCQkJCSAgSVNDU0lfSUZBQ0VfTkFNRSB8IElTQ1NJX0lOSVRJQVRPUl9OQU1FLAotCS5ob3N0X3BhcmFtX21hc2sJPSBJU0NTSV9IT1NUX0hXQUREUkVTUyB8IElTQ1NJX0hPU1RfTkVUREVWX05BTUUsCisJLmhvc3RfcGFyYW1fbWFzawk9IElTQ1NJX0hPU1RfSFdBRERSRVNTIHwgSVNDU0lfSE9TVF9JUEFERFJFU1MgfAorCQkJCSAgSVNDU0lfSE9TVF9ORVRERVZfTkFNRSwKIAkuY3JlYXRlX3Nlc3Npb24JCT0gYm54Mmlfc2Vzc2lvbl9jcmVhdGUsCiAJLmRlc3Ryb3lfc2Vzc2lvbgk9IGJueDJpX3Nlc3Npb25fZGVzdHJveSwKIAkuY3JlYXRlX2Nvbm4JCT0gYm54MmlfY29ubl9jcmVhdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9kZHAuYyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2RkcC5jCmluZGV4IGI1OGQ5MTMuLmJlMGUyMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2RkcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2RkcC5jCkBAIC00OTksNiArNDk5LDcgQEAKIAkvKiBzZXQgdXAgdWxwIHN1Ym1vZGUgYW5kIHBhZ2Ugc2l6ZSAqLwogCXJlcSA9IChzdHJ1Y3QgY3BsX3NldF90Y2JfZmllbGQgKilza2JfcHV0KHNrYiwgc2l6ZW9mKCpyZXEpKTsKIAlyZXEtPndyLndyX2hpID0gaHRvbmwoVl9XUl9PUChGV19XUk9QQ09ERV9GT1JXQVJEKSk7CisJcmVxLT53ci53cl9sbyA9IDA7CiAJT1BDT0RFX1RJRChyZXEpID0gaHRvbmwoTUtfT1BDT0RFX1RJRChDUExfU0VUX1RDQl9GSUVMRCwgdGlkKSk7CiAJcmVxLT5yZXBseSA9IFZfTk9fUkVQTFkocmVwbHkgPyAwIDogMSk7CiAJcmVxLT5jcHVfaWR4ID0gMDsKQEAgLTU2NCw2ICs1NjUsNyBAQAogCS8qIHNldCB1cCB1bHAgc3VibW9kZSBhbmQgcGFnZSBzaXplICovCiAJcmVxID0gKHN0cnVjdCBjcGxfc2V0X3RjYl9maWVsZCAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKnJlcSkpOwogCXJlcS0+d3Iud3JfaGkgPSBodG9ubChWX1dSX09QKEZXX1dST1BDT0RFX0ZPUldBUkQpKTsKKwlyZXEtPndyLndyX2xvID0gMDsKIAlPUENPREVfVElEKHJlcSkgPSBodG9ubChNS19PUENPREVfVElEKENQTF9TRVRfVENCX0ZJRUxELCB0aWQpKTsKIAlyZXEtPnJlcGx5ID0gVl9OT19SRVBMWShyZXBseSA/IDAgOiAxKTsKIAlyZXEtPmNwdV9pZHggPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfb2ZmbG9hZC5jIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfb2ZmbG9hZC5jCmluZGV4IGExNzViZTkuLjNlZTEzY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX29mZmxvYWQuYworKysgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9vZmZsb2FkLmMKQEAgLTI2NCw2ICsyNjQsNyBAQAogCXNrYi0+cHJpb3JpdHkgPSBDUExfUFJJT1JJVFlfU0VUVVA7CiAJcmVxID0gKHN0cnVjdCBjcGxfYWN0X29wZW5fcmVxICopX19za2JfcHV0KHNrYiwgc2l6ZW9mKCpyZXEpKTsKIAlyZXEtPndyLndyX2hpID0gaHRvbmwoVl9XUl9PUChGV19XUk9QQ09ERV9GT1JXQVJEKSk7CisJcmVxLT53ci53cl9sbyA9IDA7CiAJT1BDT0RFX1RJRChyZXEpID0gaHRvbmwoTUtfT1BDT0RFX1RJRChDUExfQUNUX09QRU5fUkVRLCBhdGlkKSk7CiAJcmVxLT5sb2NhbF9wb3J0ID0gYzNjbi0+c2FkZHIuc2luX3BvcnQ7CiAJcmVxLT5wZWVyX3BvcnQgPSBjM2NuLT5kYWRkci5zaW5fcG9ydDsKQEAgLTI3Myw2ICsyNzQsNyBAQAogCQkJICAgVl9UWF9DSEFOTkVMKGUtPnNtdF9pZHgpKTsKIAlyZXEtPm9wdDBsID0gaHRvbmwoY2FsY19vcHQwbChjM2NuKSk7CiAJcmVxLT5wYXJhbXMgPSAwOworCXJlcS0+b3B0MiA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIGZhaWxfYWN0X29wZW4oc3RydWN0IHMzX2Nvbm4gKmMzY24sIGludCBlcnJubykKQEAgLTM3OSw2ICszODEsNyBAQAogCiAJYzNjbi0+Y3BsX2Fib3J0X3JlcSA9IE5VTEw7CiAJcmVxID0gKHN0cnVjdCBjcGxfYWJvcnRfcmVxICopc2tiLT5oZWFkOworCW1lbXNldChyZXEsIDAsIHNpemVvZigqcmVxKSk7CiAKIAlza2ItPnByaW9yaXR5ID0gQ1BMX1BSSU9SSVRZX0RBVEE7CiAJc2V0X2FycF9mYWlsdXJlX2hhbmRsZXIoc2tiLCBhYm9ydF9hcnBfZmFpbHVyZSk7CkBAIC00MDYsNiArNDA5LDcgQEAKIAljM2NuLT5jcGxfYWJvcnRfcnBsID0gTlVMTDsKIAogCXNrYi0+cHJpb3JpdHkgPSBDUExfUFJJT1JJVFlfREFUQTsKKwltZW1zZXQocnBsLCAwLCBzaXplb2YoKnJwbCkpOwogCXJwbC0+d3Iud3JfaGkgPSBodG9ubChWX1dSX09QKEZXX1dST1BDT0RFX09GTERfSE9TVF9BQk9SVF9DT05fUlBMKSk7CiAJcnBsLT53ci53cl9sbyA9IGh0b25sKFZfV1JfVElEKGMzY24tPnRpZCkpOwogCU9QQ09ERV9USUQocnBsKSA9IGh0b25sKE1LX09QQ09ERV9USUQoQ1BMX0FCT1JUX1JQTCwgYzNjbi0+dGlkKSk7CkBAIC00MzAsNiArNDM0LDcgQEAKIAogCXJlcSA9IChzdHJ1Y3QgY3BsX3J4X2RhdGFfYWNrICopX19za2JfcHV0KHNrYiwgc2l6ZW9mKCpyZXEpKTsKIAlyZXEtPndyLndyX2hpID0gaHRvbmwoVl9XUl9PUChGV19XUk9QQ09ERV9GT1JXQVJEKSk7CisJcmVxLT53ci53cl9sbyA9IDA7CiAJT1BDT0RFX1RJRChyZXEpID0gaHRvbmwoTUtfT1BDT0RFX1RJRChDUExfUlhfREFUQV9BQ0ssIGMzY24tPnRpZCkpOwogCXJlcS0+Y3JlZGl0X2RhY2sgPSBodG9ubChkYWNrIHwgVl9SWF9DUkVESVRTKGNyZWRpdHMpKTsKIAlza2ItPnByaW9yaXR5ID0gQ1BMX1BSSU9SSVRZX0FDSzsKQEAgLTE1ODcsNyArMTU5Miw3IEBACiAKIAllcnIgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KGRldiA/IGRldl9uZXQoZGV2KSA6ICZpbml0X25ldCwgJnJ0LCAmZmwpOwogCWlmICghZXJyKQotCQlyZXR1cm4gKCZydC0+dS5kc3QpLT5kZXY7CisJCXJldHVybiAoJnJ0LT5kc3QpLT5kZXY7CiAKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTE2NDksNyArMTY1NCw3IEBACiAJCWMzY24tPnNhZGRyLnNpbl9hZGRyLnNfYWRkciA9IHJ0LT5ydF9zcmM7CiAKIAkvKiBub3cgY29tbWl0IGRlc3RpbmF0aW9uIHRvIGNvbm5lY3Rpb24gKi8KLQljM2NuLT5kc3RfY2FjaGUgPSAmcnQtPnUuZHN0OworCWMzY24tPmRzdF9jYWNoZSA9ICZydC0+ZHN0OwogCiAJLyogdHJ5IHRvIGVzdGFibGlzaCBhbiBvZmZsb2FkZWQgY29ubmVjdGlvbiAqLwogCWRldiA9IGN4Z2IzX2VncmVzc19kZXYoYzNjbi0+ZHN0X2NhY2hlLT5kZXYsIGMzY24sIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jCmluZGV4IDViNjgzZTQuLmI5YmNmYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYworKysgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMKQEAgLTc2OCw2ICs3NjgsNyBAQAogCXsiREVMTCIsICJNRDMwMDBpIn0sCiAJeyJERUxMIiwgIk1EMzJ4eCJ9LAogCXsiREVMTCIsICJNRDMyeHhpIn0sCisJeyJERUxMIiwgIk1EMzZ4eGkifSwKIAl7IkxTSSIsICJJTkYtMDEtMDAifSwKIAl7IkVOR0VOSU8iLCAiSU5GLTAxLTAwIn0sCiAJeyJTVEsiLCAiRkxFWExJTkUgMzgwIn0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZHB0X2kyby5jIGIvZHJpdmVycy9zY3NpL2RwdF9pMm8uYwppbmRleCBiMGM1NzZmLi5mZmMxZWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZHB0X2kyby5jCisrKyBiL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMKQEAgLTEyOTAsNyArMTI5MCw3IEBACiAJdWxvbmcgZmxhZ3MgPSAwOwogCXN0cnVjdCBhZHB0X2kyb19wb3N0X3dhaXRfZGF0YSAqcDEsICpwMjsKIAlzdHJ1Y3QgYWRwdF9pMm9fcG9zdF93YWl0X2RhdGEgKndhaXRfZGF0YSA9Ci0JCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhZHB0X2kyb19wb3N0X3dhaXRfZGF0YSksR0ZQX0tFUk5FTCk7CisJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhZHB0X2kyb19wb3N0X3dhaXRfZGF0YSksIEdGUF9BVE9NSUMpOwogCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogCiAJaWYgKCF3YWl0X2RhdGEpCkBAIC0yNjQwLDYgKzI2NDAsMTMgQEAKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWJ1c19ubyA9IGJ1ZlswXT4+MTY7CisJCQlpZiAoYnVzX25vID49IE1BWF9DSEFOTkVMKSB7CS8qIFNvbWV0aGluZyB3cm9uZyBza2lwIGl0ICovCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkiJXM6IENoYW5uZWwgbnVtYmVyICVkIG91dCBvZiByYW5nZVxuIiwKKwkJCQkJcEhiYS0+bmFtZSwgYnVzX25vKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwogCQkJc2NzaV9pZCA9IGJ1ZlsxXTsKIAkJCXNjc2lfbHVuID0gKGJ1ZlsyXT4+OCApJjB4ZmY7CiAJCQlwRGV2ID0gcEhiYS0+Y2hhbm5lbFtidXNfbm9dLmRldmljZVtzY3NpX2lkXTsKQEAgLTI2NTEsNyArMjY1OCw4IEBACiAJCQkJcERldiA9IHBEZXYtPm5leHRfbHVuOwogCQkJfQogCQkJaWYoIXBEZXYgKSB7IC8vIFNvbWV0aGluZyBuZXcgYWRkIGl0Ci0JCQkJZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpMm9fZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJCQkJZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpMm9fZGV2aWNlKSwKKwkJCQkJICAgIEdGUF9BVE9NSUMpOwogCQkJCWlmKGQ9PU5VTEwpCiAJCQkJewogCQkJCQlwcmludGsoS0VSTl9DUklUICJPdXQgb2YgbWVtb3J5IGZvciBJMk8gZGV2aWNlIGRhdGEuXG4iKTsKQEAgLTI2NjcsMTMgKzI2NzUsMTEgQEAKIAkJCQlhZHB0X2kyb19yZXBvcnRfaGJhX3VuaXQocEhiYSwgZCk7CiAJCQkJYWRwdF9pMm9faW5zdGFsbF9kZXZpY2UocEhiYSwgZCk7CiAJCi0JCQkJaWYoYnVzX25vID49IE1BWF9DSEFOTkVMKSB7CS8vIFNvbWV0aGluZyB3cm9uZyBza2lwIGl0Ci0JCQkJCXByaW50ayhLRVJOX1dBUk5JTkciJXM6IENoYW5uZWwgbnVtYmVyICVkIG91dCBvZiByYW5nZSBcbiIsIHBIYmEtPm5hbWUsIGJ1c19ubyk7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KIAkJCQlwRGV2ID0gcEhiYS0+Y2hhbm5lbFtidXNfbm9dLmRldmljZVtzY3NpX2lkXTsJCiAJCQkJaWYoIHBEZXYgPT0gTlVMTCl7Ci0JCQkJCXBEZXYgPSAga3phbGxvYyhzaXplb2Yoc3RydWN0IGFkcHRfZGV2aWNlKSxHRlBfS0VSTkVMKTsKKwkJCQkJcERldiA9CisJCQkJCSAga3phbGxvYyhzaXplb2Yoc3RydWN0IGFkcHRfZGV2aWNlKSwKKwkJCQkJCSAgR0ZQX0FUT01JQyk7CiAJCQkJCWlmKHBEZXYgPT0gTlVMTCkgewogCQkJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQkJCX0KQEAgLTI2ODIsNyArMjY4OCw5IEBACiAJCQkJCXdoaWxlIChwRGV2LT5uZXh0X2x1bikgewogCQkJCQkJcERldiA9IHBEZXYtPm5leHRfbHVuOwogCQkJCQl9Ci0JCQkJCXBEZXYgPSBwRGV2LT5uZXh0X2x1biA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZHB0X2RldmljZSksR0ZQX0tFUk5FTCk7CisJCQkJCXBEZXYgPSBwRGV2LT5uZXh0X2x1biA9CisJCQkJCSAga3phbGxvYyhzaXplb2Yoc3RydWN0IGFkcHRfZGV2aWNlKSwKKwkJCQkJCSAgR0ZQX0FUT01JQyk7CiAJCQkJCWlmKHBEZXYgPT0gTlVMTCkgewogCQkJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQkJCX0KQEAgLTMxMjcsNyArMzEzNSw3IEBACiAJCWlmIChwSGJhLT5sY3QgPT0gTlVMTCkgewogCQkJcEhiYS0+bGN0ID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwSGJhLT5wRGV2LT5kZXYsCiAJCQkJCXBIYmEtPmxjdF9zaXplLCAmcEhiYS0+bGN0X3BhLAotCQkJCQlHRlBfS0VSTkVMKTsKKwkJCQkJR0ZQX0FUT01JQyk7CiAJCQlpZihwSGJhLT5sY3QgPT0gTlVMTCkgewogCQkJCXByaW50ayhLRVJOX0NSSVQgIiVzOiBMY3QgR2V0IGZhaWxlZC4gT3V0IG9mIG1lbW9yeS5cbiIsCiAJCQkJCXBIYmEtPm5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZS5jIGIvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZS5jCmluZGV4IDQ0YTA3NTkuLjg0NGQ2MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2UuYworKysgYi9kcml2ZXJzL3Njc2kvZmNvZS9mY29lLmMKQEAgLTExNyw5ICsxMTcsMTQgQEAKIAogc3RhdGljIHZvaWQgZmNvZV9nZXRfbGVzYihzdHJ1Y3QgZmNfbHBvcnQgKiwgc3RydWN0IGZjX2Vsc19sZXNiICopOwogCi1tb2R1bGVfcGFyYW1fY2FsbChjcmVhdGUsIGZjb2VfY3JlYXRlLCBOVUxMLCBOVUxMLCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbV9jYWxsKGNyZWF0ZSwgZmNvZV9jcmVhdGUsIE5VTEwsICh2b2lkICopRklQX01PREVfQVVUTywgU19JV1VTUik7CiBfX01PRFVMRV9QQVJNX1RZUEUoY3JlYXRlLCAic3RyaW5nIik7CiBNT0RVTEVfUEFSTV9ERVNDKGNyZWF0ZSwgIiBDcmVhdGVzIGZjb2UgaW5zdGFuY2Ugb24gYSBldGhlcm5ldCBpbnRlcmZhY2UiKTsKK21vZHVsZV9wYXJhbV9jYWxsKGNyZWF0ZV92bjJ2biwgZmNvZV9jcmVhdGUsIE5VTEwsCisJCSAgKHZvaWQgKilGSVBfTU9ERV9WTjJWTiwgU19JV1VTUik7CitfX01PRFVMRV9QQVJNX1RZUEUoY3JlYXRlX3ZuMnZuLCAic3RyaW5nIik7CitNT0RVTEVfUEFSTV9ERVNDKGNyZWF0ZV92bjJ2biwgIiBDcmVhdGVzIGEgVk5fbm9kZSB0byBWTl9ub2RlIEZDb0UgaW5zdGFuY2UgIgorCQkgIm9uIGFuIEV0aGVybmV0IGludGVyZmFjZSIpOwogbW9kdWxlX3BhcmFtX2NhbGwoZGVzdHJveSwgZmNvZV9kZXN0cm95LCBOVUxMLCBOVUxMLCBTX0lXVVNSKTsKIF9fTU9EVUxFX1BBUk1fVFlQRShkZXN0cm95LCAic3RyaW5nIik7CiBNT0RVTEVfUEFSTV9ERVNDKGRlc3Ryb3ksICIgRGVzdHJveXMgZmNvZSBpbnN0YW5jZSBvbiBhIGV0aGVybmV0IGludGVyZmFjZSIpOwpAQCAtMzE1LDcgKzMyMCwxMSBAQAogCWRldl91Y19hZGQobmV0ZGV2LCBmbG9naV9tYWRkcik7CiAJaWYgKGZpcC0+c3BtYSkKIAkJZGV2X3VjX2FkZChuZXRkZXYsIGZpcC0+Y3RsX3NyY19hZGRyKTsKLQlkZXZfbWNfYWRkKG5ldGRldiwgRklQX0FMTF9FTk9ERV9NQUNTKTsKKwlpZiAoZmlwLT5tb2RlID09IEZJUF9NT0RFX1ZOMlZOKSB7CisJCWRldl9tY19hZGQobmV0ZGV2LCBGSVBfQUxMX1ZOMlZOX01BQ1MpOworCQlkZXZfbWNfYWRkKG5ldGRldiwgRklQX0FMTF9QMlBfTUFDUyk7CisJfSBlbHNlCisJCWRldl9tY19hZGQobmV0ZGV2LCBGSVBfQUxMX0VOT0RFX01BQ1MpOwogCiAJLyoKIAkgKiBzZXR1cCB0aGUgcmVjZWl2ZSBmdW5jdGlvbiBmcm9tIGV0aGVybmV0IGRyaXZlcgpAQCAtMzM3LDEwICszNDYsMTIgQEAKIC8qKgogICogZmNvZV9pbnRlcmZhY2VfY3JlYXRlKCkgLSBDcmVhdGUgYSBGQ29FIGludGVyZmFjZSBvbiBhIG5ldCBkZXZpY2UKICAqIEBuZXRkZXY6IFRoZSBuZXQgZGV2aWNlIHRvIGNyZWF0ZSB0aGUgRkNvRSBpbnRlcmZhY2Ugb24KKyAqIEBmaXBfbW9kZTogVGhlIG1vZGUgdG8gdXNlIGZvciBGSVAKICAqCiAgKiBSZXR1cm5zOiBwb2ludGVyIHRvIGEgc3RydWN0IGZjb2VfaW50ZXJmYWNlIG9yIE5VTEwgb24gZXJyb3IKICAqLwotc3RhdGljIHN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZV9pbnRlcmZhY2VfY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgc3RydWN0IGZjb2VfaW50ZXJmYWNlICpmY29lX2ludGVyZmFjZV9jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkJCSAgICBlbnVtIGZpcF9zdGF0ZSBmaXBfbW9kZSkKIHsKIAlzdHJ1Y3QgZmNvZV9pbnRlcmZhY2UgKmZjb2U7CiAJaW50IGVycjsKQEAgLTM1Nyw3ICszNjgsNyBAQAogCS8qCiAJICogSW5pdGlhbGl6ZSBGSVAuCiAJICovCi0JZmNvZV9jdGxyX2luaXQoJmZjb2UtPmN0bHIpOworCWZjb2VfY3Rscl9pbml0KCZmY29lLT5jdGxyLCBmaXBfbW9kZSk7CiAJZmNvZS0+Y3Rsci5zZW5kID0gZmNvZV9maXBfc2VuZDsKIAlmY29lLT5jdGxyLnVwZGF0ZV9tYWMgPSBmY29lX3VwZGF0ZV9zcmNfbWFjOwogCWZjb2UtPmN0bHIuZ2V0X3NyY19hZGRyID0gZmNvZV9nZXRfc3JjX21hYzsKQEAgLTQwMSw3ICs0MTIsMTEgQEAKIAlkZXZfdWNfZGVsKG5ldGRldiwgZmxvZ2lfbWFkZHIpOwogCWlmIChmaXAtPnNwbWEpCiAJCWRldl91Y19kZWwobmV0ZGV2LCBmaXAtPmN0bF9zcmNfYWRkcik7Ci0JZGV2X21jX2RlbChuZXRkZXYsIEZJUF9BTExfRU5PREVfTUFDUyk7CisJaWYgKGZpcC0+bW9kZSA9PSBGSVBfTU9ERV9WTjJWTikgeworCQlkZXZfbWNfZGVsKG5ldGRldiwgRklQX0FMTF9WTjJWTl9NQUNTKTsKKwkJZGV2X21jX2RlbChuZXRkZXYsIEZJUF9BTExfUDJQX01BQ1MpOworCX0gZWxzZQorCQlkZXZfbWNfZGVsKG5ldGRldiwgRklQX0FMTF9FTk9ERV9NQUNTKTsKIAogCS8qIFRlbGwgdGhlIExMRCB3ZSBhcmUgZG9uZSB3LyBGQ29FICovCiAJb3BzID0gbmV0ZGV2LT5uZXRkZXZfb3BzOwpAQCAtNTc0LDYgKzU4OSw1MCBAQAogfQogCiAvKioKKyAqIGZjb2VfbmV0ZGV2X2ZlYXR1cmVzX2NoYW5nZSAtIFVwZGF0ZXMgdGhlIGxwb3J0J3Mgb2ZmbG9hZCBmbGFncyBiYXNlZAorICogb24gdGhlIExMRCBuZXRkZXYncyBGQ29FIGZlYXR1cmUgZmxhZ3MKKyAqLworc3RhdGljIHZvaWQgZmNvZV9uZXRkZXZfZmVhdHVyZXNfY2hhbmdlKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsCisJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJbXV0ZXhfbG9jaygmbHBvcnQtPmxwX211dGV4KTsKKworCWlmIChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9TRykKKwkJbHBvcnQtPnNnX3N1cHAgPSAxOworCWVsc2UKKwkJbHBvcnQtPnNnX3N1cHAgPSAwOworCisJaWYgKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0ZDT0VfQ1JDKSB7CisJCWxwb3J0LT5jcmNfb2ZmbG9hZCA9IDE7CisJCUZDT0VfTkVUREVWX0RCRyhuZXRkZXYsICJTdXBwb3J0cyBGQ0NSQyBvZmZsb2FkXG4iKTsKKwl9IGVsc2UgeworCQlscG9ydC0+Y3JjX29mZmxvYWQgPSAwOworCX0KKworCWlmIChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9GU08pIHsKKwkJbHBvcnQtPnNlcV9vZmZsb2FkID0gMTsKKwkJbHBvcnQtPmxzb19tYXggPSBuZXRkZXYtPmdzb19tYXhfc2l6ZTsKKwkJRkNPRV9ORVRERVZfREJHKG5ldGRldiwgIlN1cHBvcnRzIExTTyBmb3IgbWF4IGxlbiAweCV4XG4iLAorCQkJCWxwb3J0LT5sc29fbWF4KTsKKwl9IGVsc2UgeworCQlscG9ydC0+c2VxX29mZmxvYWQgPSAwOworCQlscG9ydC0+bHNvX21heCA9IDA7CisJfQorCisJaWYgKG5ldGRldi0+ZmNvZV9kZHBfeGlkKSB7CisJCWxwb3J0LT5scm9fZW5hYmxlZCA9IDE7CisJCWxwb3J0LT5scm9feGlkID0gbmV0ZGV2LT5mY29lX2RkcF94aWQ7CisJCUZDT0VfTkVUREVWX0RCRyhuZXRkZXYsICJTdXBwb3J0cyBMUk8gZm9yIG1heCB4aWQgMHgleFxuIiwKKwkJCQlscG9ydC0+bHJvX3hpZCk7CisJfSBlbHNlIHsKKwkJbHBvcnQtPmxyb19lbmFibGVkID0gMDsKKwkJbHBvcnQtPmxyb194aWQgPSAwOworCX0KKworCW11dGV4X3VubG9jaygmbHBvcnQtPmxwX211dGV4KTsKK30KKworLyoqCiAgKiBmY29lX25ldGRldl9jb25maWcoKSAtIFNldCB1cCBuZXQgZGV2aXZlIGZvciBTVyBGQ29FCiAgKiBAbHBvcnQ6ICBUaGUgbG9jYWwgcG9ydCB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV0IGRldmljZQogICogQG5ldGRldjogVGhlIGFzc29jaWF0ZWQgbmV0IGRldmljZQpAQCAtNTg4LDcgKzY0Nyw2IEBACiAJdTY0IHd3bm4sIHd3cG47CiAJc3RydWN0IGZjb2VfaW50ZXJmYWNlICpmY29lOwogCXN0cnVjdCBmY29lX3BvcnQgKnBvcnQ7Ci0JaW50IHZpZCA9IDA7CiAKIAkvKiBTZXR1cCBscG9ydCBwcml2YXRlIGRhdGEgdG8gcG9pbnQgdG8gZmNvZSBzb2Z0YyAqLwogCXBvcnQgPSBscG9ydF9wcml2KGxwb3J0KTsKQEAgLTYwOSwyNSArNjY3LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBvZmZsb2FkIGZlYXR1cmVzIHN1cHBvcnQgKi8KLQlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfU0cpCi0JCWxwb3J0LT5zZ19zdXBwID0gMTsKKwlmY29lX25ldGRldl9mZWF0dXJlc19jaGFuZ2UobHBvcnQsIG5ldGRldik7CiAKLQlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfRkNPRV9DUkMpIHsKLQkJbHBvcnQtPmNyY19vZmZsb2FkID0gMTsKLQkJRkNPRV9ORVRERVZfREJHKG5ldGRldiwgIlN1cHBvcnRzIEZDQ1JDIG9mZmxvYWRcbiIpOwotCX0KLQlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfRlNPKSB7Ci0JCWxwb3J0LT5zZXFfb2ZmbG9hZCA9IDE7Ci0JCWxwb3J0LT5sc29fbWF4ID0gbmV0ZGV2LT5nc29fbWF4X3NpemU7Ci0JCUZDT0VfTkVUREVWX0RCRyhuZXRkZXYsICJTdXBwb3J0cyBMU08gZm9yIG1heCBsZW4gMHgleFxuIiwKLQkJCQlscG9ydC0+bHNvX21heCk7Ci0JfQotCWlmIChuZXRkZXYtPmZjb2VfZGRwX3hpZCkgewotCQlscG9ydC0+bHJvX2VuYWJsZWQgPSAxOwotCQlscG9ydC0+bHJvX3hpZCA9IG5ldGRldi0+ZmNvZV9kZHBfeGlkOwotCQlGQ09FX05FVERFVl9EQkcobmV0ZGV2LCAiU3VwcG9ydHMgTFJPIGZvciBtYXggeGlkIDB4JXhcbiIsCi0JCQkJbHBvcnQtPmxyb194aWQpOwotCX0KIAlza2JfcXVldWVfaGVhZF9pbml0KCZwb3J0LT5mY29lX3BlbmRpbmdfcXVldWUpOwogCXBvcnQtPmZjb2VfcGVuZGluZ19xdWV1ZV9hY3RpdmUgPSAwOwogCXNldHVwX3RpbWVyKCZwb3J0LT50aW1lciwgZmNvZV9xdWV1ZV90aW1lciwgKHVuc2lnbmVkIGxvbmcpbHBvcnQpOwpAQCAtNjM1LDIwICs2NzYsMTIgQEAKIAlmY29lX2xpbmtfc3BlZWRfdXBkYXRlKGxwb3J0KTsKIAogCWlmICghbHBvcnQtPnZwb3J0KSB7Ci0JCS8qCi0JCSAqIFVzZSBOQUEgMSYyIChGQy1GUyBSZXYuIDIuMCwgU2VjLiAxNSkgdG8gZ2VuZXJhdGUgV1dOTi9XV1BOOgotCQkgKiBGb3IgV1dOTiwgd2UgdXNlIE5BQSAxIHcvIGJpdCAyNy0xNiBvZiB3b3JkIDAgYXMgMC4KLQkJICogRm9yIFdXUE4sIHdlIHVzZSBOQUEgMiB3LyBiaXQgMjctMTYgb2Ygd29yZCAwIGZyb20gVkxBTiBJRAotCQkgKi8KLQkJaWYgKG5ldGRldi0+cHJpdl9mbGFncyAmIElGRl84MDJfMVFfVkxBTikKLQkJCXZpZCA9IHZsYW5fZGV2X3ZsYW5faWQobmV0ZGV2KTsKLQogCQlpZiAoZmNvZV9nZXRfd3duKG5ldGRldiwgJnd3bm4sIE5FVERFVl9GQ09FX1dXTk4pKQogCQkJd3dubiA9IGZjb2Vfd3duX2Zyb21fbWFjKGZjb2UtPmN0bHIuY3RsX3NyY19hZGRyLCAxLCAwKTsKIAkJZmNfc2V0X3d3bm4obHBvcnQsIHd3bm4pOwogCQlpZiAoZmNvZV9nZXRfd3duKG5ldGRldiwgJnd3cG4sIE5FVERFVl9GQ09FX1dXUE4pKQogCQkJd3dwbiA9IGZjb2Vfd3duX2Zyb21fbWFjKGZjb2UtPmN0bHIuY3RsX3NyY19hZGRyLAotCQkJCQkJIDIsIHZpZCk7CisJCQkJCQkgMiwgMCk7CiAJCWZjX3NldF93d3BuKGxwb3J0LCB3d3BuKTsKIAl9CiAKQEAgLTk2Nyw3ICsxMDAwLDcgQEAKIAl9CiAKIAkvKiBJbml0aWFsaXplIHRoZSBsaWJyYXJ5ICovCi0JcmMgPSBmY29lX2xpYmZjX2NvbmZpZyhscG9ydCwgJmZjb2VfbGliZmNfZmNuX3RlbXBsKTsKKwlyYyA9IGZjb2VfbGliZmNfY29uZmlnKGxwb3J0LCAmZmNvZS0+Y3RsciwgJmZjb2VfbGliZmNfZmNuX3RlbXBsLCAxKTsKIAlpZiAocmMpIHsKIAkJRkNPRV9ORVRERVZfREJHKG5ldGRldiwgIkNvdWxkIG5vdCBjb25maWd1cmUgbGliZmMgZm9yIHRoZSAiCiAJCQkJImludGVyZmFjZVxuIik7CkBAIC0xMjEwLDYgKzEyNDMsOCBAQAogCXN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZTsKIAlzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmaDsKIAlzdHJ1Y3QgZmNvZV9wZXJjcHVfcyAqZnBzOworCXN0cnVjdCBmY29lX3BvcnQgKnBvcnQ7CisJc3RydWN0IGV0aGhkciAqZWg7CiAJdW5zaWduZWQgaW50IGNwdTsKIAogCWZjb2UgPSBjb250YWluZXJfb2YocHR5cGUsIHN0cnVjdCBmY29lX2ludGVyZmFjZSwgZmNvZV9wYWNrZXRfdHlwZSk7CkBAIC0xMjI3LDkgKzEyNjIsMjEgQEAKIAkJCXNrYl90YWlsX3BvaW50ZXIoc2tiKSwgc2tiX2VuZF9wb2ludGVyKHNrYiksCiAJCQlza2ItPmNzdW0sIHNrYi0+ZGV2ID8gc2tiLT5kZXYtPm5hbWUgOiAiPE5VTEw+Iik7CiAKLQkvKiBjaGVjayBmb3IgRkNPRSBwYWNrZXQgdHlwZSAqLwotCWlmICh1bmxpa2VseShldGhfaGRyKHNrYiktPmhfcHJvdG8gIT0gaHRvbnMoRVRIX1BfRkNPRSkpKSB7Ci0JCUZDT0VfTkVUREVWX0RCRyhuZXRkZXYsICJXcm9uZyBGQyB0eXBlIGZyYW1lIik7CisJLyogY2hlY2sgZm9yIG1hYyBhZGRyZXNzZXMgKi8KKwllaCA9IGV0aF9oZHIoc2tiKTsKKwlwb3J0ID0gbHBvcnRfcHJpdihscG9ydCk7CisJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihlaC0+aF9kZXN0LCBwb3J0LT5kYXRhX3NyY19hZGRyKSAmJgorCSAgICBjb21wYXJlX2V0aGVyX2FkZHIoZWgtPmhfZGVzdCwgZmNvZS0+Y3Rsci5jdGxfc3JjX2FkZHIpICYmCisJICAgIGNvbXBhcmVfZXRoZXJfYWRkcihlaC0+aF9kZXN0LCAodThbNl0pRkNfRkNPRV9GTE9HSV9NQUMpKSB7CisJCUZDT0VfTkVUREVWX0RCRyhuZXRkZXYsICJ3cm9uZyBkZXN0aW5hdGlvbiBtYWMgYWRkcmVzczolcE1cbiIsCisJCQkJZWgtPmhfZGVzdCk7CisJCWdvdG8gZXJyOworCX0KKworCWlmIChpc19maXBfbW9kZSgmZmNvZS0+Y3RscikgJiYKKwkgICAgY29tcGFyZV9ldGhlcl9hZGRyKGVoLT5oX3NvdXJjZSwgZmNvZS0+Y3Rsci5kZXN0X2FkZHIpKSB7CisJCUZDT0VfTkVUREVWX0RCRyhuZXRkZXYsICJ3cm9uZyBzb3VyY2UgbWFjIGFkZHJlc3M6JXBNXG4iLAorCQkJCWVoLT5oX3NvdXJjZSk7CiAJCWdvdG8gZXJyOwogCX0KIApAQCAtMTUxMiwxMSArMTU1OSw5IEBACiAJLyogZmlsbCB1cCBtYWMgYW5kIGZjb2UgaGVhZGVycyAqLwogCWVoID0gZXRoX2hkcihza2IpOwogCWVoLT5oX3Byb3RvID0gaHRvbnMoRVRIX1BfRkNPRSk7CisJbWVtY3B5KGVoLT5oX2Rlc3QsIGZjb2UtPmN0bHIuZGVzdF9hZGRyLCBFVEhfQUxFTik7CiAJaWYgKGZjb2UtPmN0bHIubWFwX2Rlc3QpCi0JCWZjX2Zjb2Vfc2V0X21hYyhlaC0+aF9kZXN0LCBmaC0+ZmhfZF9pZCk7Ci0JZWxzZQotCQkvKiBpbnNlcnQgR1cgYWRkcmVzcyAqLwotCQltZW1jcHkoZWgtPmhfZGVzdCwgZmNvZS0+Y3Rsci5kZXN0X2FkZHIsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGVoLT5oX2Rlc3QgKyAzLCBmaC0+ZmhfZF9pZCwgMyk7CiAKIAlpZiAodW5saWtlbHkoZmNvZS0+Y3Rsci5mbG9naV9veGlkICE9IEZDX1hJRF9VTktOT1dOKSkKIAkJbWVtY3B5KGVoLT5oX3NvdXJjZSwgZmNvZS0+Y3Rsci5jdGxfc3JjX2FkZHIsIEVUSF9BTEVOKTsKQEAgLTE4MzQsNiArMTg3OSw5IEBACiAJCXNjaGVkdWxlX3dvcmsoJnBvcnQtPmRlc3Ryb3lfd29yayk7CiAJCWdvdG8gb3V0OwogCQlicmVhazsKKwljYXNlIE5FVERFVl9GRUFUX0NIQU5HRToKKwkJZmNvZV9uZXRkZXZfZmVhdHVyZXNfY2hhbmdlKGxwb3J0LCBuZXRkZXYpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlGQ09FX05FVERFVl9EQkcobmV0ZGV2LCAiVW5rbm93biBldmVudCAlbGQgIgogCQkJCSJmcm9tIG5ldGRldiBuZXRsaW5rXG4iLCBldmVudCk7CkBAIC0xOTE4LDggKzE5NjYsOCBAQAogCXJ0bmxfdW5sb2NrKCk7CiAKIAlpZiAoZmNvZSkgewotCQlmY19mYWJyaWNfbG9nb2ZmKGZjb2UtPmN0bHIubHApOwogCQlmY29lX2N0bHJfbGlua19kb3duKCZmY29lLT5jdGxyKTsKKwkJZmNvZV9jbGVhbl9wZW5kaW5nX3F1ZXVlKGZjb2UtPmN0bHIubHApOwogCX0gZWxzZQogCQlyYyA9IC1FTk9ERVY7CiAKQEAgLTE5NzIsMTIgKzIwMjAsMTAgQEAKIAlmY29lID0gZmNvZV9ob3N0bGlzdF9sb29rdXBfcG9ydChuZXRkZXYpOwogCXJ0bmxfdW5sb2NrKCk7CiAKLQlpZiAoZmNvZSkgewotCQlpZiAoIWZjb2VfbGlua19vayhmY29lLT5jdGxyLmxwKSkKLQkJCWZjb2VfY3Rscl9saW5rX3VwKCZmY29lLT5jdGxyKTsKLQkJcmMgPSBmY19mYWJyaWNfbG9naW4oZmNvZS0+Y3Rsci5scCk7Ci0JfSBlbHNlCisJaWYgKCFmY29lKQogCQlyYyA9IC1FTk9ERVY7CisJZWxzZSBpZiAoIWZjb2VfbGlua19vayhmY29lLT5jdGxyLmxwKSkKKwkJZmNvZV9jdGxyX2xpbmtfdXAoJmZjb2UtPmN0bHIpOwogCiAJZGV2X3B1dChuZXRkZXYpOwogb3V0X25vZGV2OgpAQCAtMjAzMSw4ICsyMDc3LDggQEAKIAkJcmMgPSAtRU5PREVWOwogCQlnb3RvIG91dF9wdXRkZXY7CiAJfQotCWxpc3RfZGVsKCZmY29lLT5saXN0KTsKIAlmY29lX2ludGVyZmFjZV9jbGVhbnVwKGZjb2UpOworCWxpc3RfZGVsKCZmY29lLT5saXN0KTsKIAkvKiBSVE5MIG11dGV4IGlzIGRyb3BwZWQgYnkgZmNvZV9pZl9kZXN0cm95ICovCiAJZmNvZV9pZl9kZXN0cm95KGZjb2UtPmN0bHIubHApOwogCkBAIC0yMDcwLDYgKzIxMTYsNyBAQAogICovCiBzdGF0aWMgaW50IGZjb2VfY3JlYXRlKGNvbnN0IGNoYXIgKmJ1ZmZlciwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCiB7CisJZW51bSBmaXBfc3RhdGUgZmlwX21vZGUgPSAoZW51bSBmaXBfc3RhdGUpKGxvbmcpa3AtPmFyZzsKIAlpbnQgcmM7CiAJc3RydWN0IGZjb2VfaW50ZXJmYWNlICpmY29lOwogCXN0cnVjdCBmY19scG9ydCAqbHBvcnQ7CkBAIC0yMTExLDcgKzIxNTgsNyBAQAogCQlnb3RvIG91dF9wdXRkZXY7CiAJfQogCi0JZmNvZSA9IGZjb2VfaW50ZXJmYWNlX2NyZWF0ZShuZXRkZXYpOworCWZjb2UgPSBmY29lX2ludGVyZmFjZV9jcmVhdGUobmV0ZGV2LCBmaXBfbW9kZSk7CiAJaWYgKCFmY29lKSB7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBvdXRfcHV0ZGV2OwpAQCAtMjQ1Miw3ICsyNDk5LDcgQEAKICAqIEBmcDogcmVzcG9uc2UgZnJhbWUsIG9yIGVycm9yIGVuY29kZWQgaW4gYSBwb2ludGVyICh0aW1lb3V0KQogICogQGFyZzogcG9pbnRlciB0aGUgdGhlIGZjb2VfY3RsciBzdHJ1Y3R1cmUKICAqCi0gKiBUaGlzIGhhbmRsZXMgTUFDIGFkZHJlc3MgbWFuYWdtZW50IGZvciBGQ29FLCB0aGVuIHBhc3NlcyBjb250cm9sIG9uIHRvCisgKiBUaGlzIGhhbmRsZXMgTUFDIGFkZHJlc3MgbWFuYWdlbWVudCBmb3IgRkNvRSwgdGhlbiBwYXNzZXMgY29udHJvbCBvbiB0bwogICogdGhlIGxpYmZjIEZMT0dJIHJlc3BvbnNlIGhhbmRsZXIuCiAgKi8KIHN0YXRpYyB2b2lkIGZjb2VfZmxvZ2lfcmVzcChzdHJ1Y3QgZmNfc2VxICpzZXEsIHN0cnVjdCBmY19mcmFtZSAqZnAsIHZvaWQgKmFyZykKQEAgLTI0ODQsNyArMjUzMSw3IEBACiAgKiBAZnA6IHJlc3BvbnNlIGZyYW1lLCBvciBlcnJvciBlbmNvZGVkIGluIGEgcG9pbnRlciAodGltZW91dCkKICAqIEBhcmc6IHBvaW50ZXIgdGhlIHRoZSBmY29lX2N0bHIgc3RydWN0dXJlCiAgKgotICogVGhpcyBoYW5kbGVzIE1BQyBhZGRyZXNzIG1hbmFnbWVudCBmb3IgRkNvRSwgdGhlbiBwYXNzZXMgY29udHJvbCBvbiB0bworICogVGhpcyBoYW5kbGVzIE1BQyBhZGRyZXNzIG1hbmFnZW1lbnQgZm9yIEZDb0UsIHRoZW4gcGFzc2VzIGNvbnRyb2wgb24gdG8KICAqIHRoZSBsaWJmYyBMT0dPIHJlc3BvbnNlIGhhbmRsZXIuCiAgKi8KIHN0YXRpYyB2b2lkIGZjb2VfbG9nb19yZXNwKHN0cnVjdCBmY19zZXEgKnNlcSwgc3RydWN0IGZjX2ZyYW1lICpmcCwgdm9pZCAqYXJnKQpAQCAtMjUyMSw2ICsyNTY4LDggQEAKIAlzd2l0Y2ggKG9wKSB7CiAJY2FzZSBFTFNfRkxPR0k6CiAJY2FzZSBFTFNfRkRJU0M6CisJCWlmIChscG9ydC0+cG9pbnRfdG9fbXVsdGlwb2ludCkKKwkJCWJyZWFrOwogCQlyZXR1cm4gZmNfZWxzY3Rfc2VuZChscG9ydCwgZGlkLCBmcCwgb3AsIGZjb2VfZmxvZ2lfcmVzcCwKIAkJCQkgICAgIGZpcCwgdGltZW91dCk7CiAJY2FzZSBFTFNfTE9HTzoKQEAgLTI2NTMsNiArMjcwMiw3IEBACiAJdTMyIGxmYywgdmxmYywgbWRhYzsKIAlzdHJ1Y3QgZmNvZV9kZXZfc3RhdHMgKmRldnN0OwogCXN0cnVjdCBmY29lX2ZjX2Vsc19sZXNiICpsZXNiOworCXN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCB0ZW1wOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBmY29lX25ldGRldihscG9ydCk7CiAKIAlsZmMgPSAwOwpAQCAtMjY2OSw3ICsyNzE5LDcgQEAKIAlsZXNiLT5sZXNiX2xpbmtfZmFpbCA9IGh0b25sKGxmYyk7CiAJbGVzYi0+bGVzYl92bGlua19mYWlsID0gaHRvbmwodmxmYyk7CiAJbGVzYi0+bGVzYl9taXNzX2ZrYSA9IGh0b25sKG1kYWMpOwotCWxlc2ItPmxlc2JfZmNzX2Vycm9yID0gaHRvbmwoZGV2X2dldF9zdGF0cyhuZXRkZXYpLT5yeF9jcmNfZXJyb3JzKTsKKwlsZXNiLT5sZXNiX2Zjc19lcnJvciA9IGh0b25sKGRldl9nZXRfc3RhdHMobmV0ZGV2LCAmdGVtcCktPnJ4X2NyY19lcnJvcnMpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9mY29lL2xpYmZjb2UuYyBiL2RyaXZlcnMvc2NzaS9mY29lL2xpYmZjb2UuYwppbmRleCA1MGFhYTRiLi5hYTUwM2Q4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZmNvZS9saWJmY29lLmMKKysrIGIvZHJpdmVycy9zY3NpL2Zjb2UvbGliZmNvZS5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8c2NzaS9mYy9mY19maXAuaD4KICNpbmNsdWRlIDxzY3NpL2ZjL2ZjX2VuY2Fwcy5oPgogI2luY2x1ZGUgPHNjc2kvZmMvZmNfZmNvZS5oPgorI2luY2x1ZGUgPHNjc2kvZmMvZmNfZmNwLmg+CiAKICNpbmNsdWRlIDxzY3NpL2xpYmZjLmg+CiAjaW5jbHVkZSA8c2NzaS9saWJmY29lLmg+CkBAIC01NCw3ICs1NSwxNSBAQAogc3RhdGljIHZvaWQgZmNvZV9jdGxyX3RpbWVyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICopOwogc3RhdGljIHZvaWQgZmNvZV9jdGxyX3JlY3Zfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CiAKK3N0YXRpYyB2b2lkIGZjb2VfY3Rscl92bl9zdGFydChzdHJ1Y3QgZmNvZV9jdGxyICopOworc3RhdGljIGludCBmY29lX2N0bHJfdm5fcmVjdihzdHJ1Y3QgZmNvZV9jdGxyICosIHN0cnVjdCBza19idWZmICopOworc3RhdGljIHZvaWQgZmNvZV9jdGxyX3ZuX3RpbWVvdXQoc3RydWN0IGZjb2VfY3RsciAqKTsKK3N0YXRpYyBpbnQgZmNvZV9jdGxyX3ZuX2xvb2t1cChzdHJ1Y3QgZmNvZV9jdGxyICosIHUzMiwgdTggKik7CisKIHN0YXRpYyB1OCBmY29lX2FsbF9mY2ZzW0VUSF9BTEVOXSA9IEZJUF9BTExfRkNGX01BQ1M7CitzdGF0aWMgdTggZmNvZV9hbGxfZW5vZGVbRVRIX0FMRU5dID0gRklQX0FMTF9FTk9ERV9NQUNTOworc3RhdGljIHU4IGZjb2VfYWxsX3ZuMnZuW0VUSF9BTEVOXSA9IEZJUF9BTExfVk4yVk5fTUFDUzsKK3N0YXRpYyB1OCBmY29lX2FsbF9wMnBbRVRIX0FMRU5dID0gRklQX0FMTF9QMlBfTUFDUzsKIAogdW5zaWduZWQgaW50IGxpYmZjb2VfZGVidWdfbG9nZ2luZzsKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1Z19sb2dnaW5nLCBsaWJmY29lX2RlYnVnX2xvZ2dpbmcsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKQEAgLTgwLDYgKzg5LDQ1IEBACiAJCQkgICAgICBwcmludGsoS0VSTl9JTkZPICJob3N0JWQ6IGZpcDogIiBmbXQsIAlcCiAJCQkJICAgICAoZmlwKS0+bHAtPmhvc3QtPmhvc3Rfbm8sICMjYXJncyk7KQogCitzdGF0aWMgY29uc3QgY2hhciAqZmNvZV9jdGxyX3N0YXRlc1tdID0geworCVtGSVBfU1RfRElTQUJMRURdID0JIkRJU0FCTEVEIiwKKwlbRklQX1NUX0xJTktfV0FJVF0gPQkiTElOS19XQUlUIiwKKwlbRklQX1NUX0FVVE9dID0JCSJBVVRPIiwKKwlbRklQX1NUX05PTl9GSVBdID0JIk5PTl9GSVAiLAorCVtGSVBfU1RfRU5BQkxFRF0gPQkiRU5BQkxFRCIsCisJW0ZJUF9TVF9WTk1QX1NUQVJUXSA9CSJWTk1QX1NUQVJUIiwKKwlbRklQX1NUX1ZOTVBfUFJPQkUxXSA9CSJWTk1QX1BST0JFMSIsCisJW0ZJUF9TVF9WTk1QX1BST0JFMl0gPQkiVk5NUF9QUk9CRTIiLAorCVtGSVBfU1RfVk5NUF9DTEFJTV0gPQkiVk5NUF9DTEFJTSIsCisJW0ZJUF9TVF9WTk1QX1VQXSA9CSJWTk1QX1VQIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpmY29lX2N0bHJfc3RhdGUoZW51bSBmaXBfc3RhdGUgc3RhdGUpCit7CisJY29uc3QgY2hhciAqY3AgPSAidW5rbm93biI7CisKKwlpZiAoc3RhdGUgPCBBUlJBWV9TSVpFKGZjb2VfY3Rscl9zdGF0ZXMpKQorCQljcCA9IGZjb2VfY3Rscl9zdGF0ZXNbc3RhdGVdOworCWlmICghY3ApCisJCWNwID0gInVua25vd24iOworCXJldHVybiBjcDsKK30KKworLyoqCisgKiBmY29lX2N0bHJfc2V0X3N0YXRlKCkgLSBTZXQgYW5kIGRvIGRlYnVnIHByaW50aW5nIGZvciB0aGUgbmV3IEZJUCBzdGF0ZS4KKyAqIEBmaXA6IFRoZSBGQ29FIGNvbnRyb2xsZXIKKyAqIEBzdGF0ZTogVGhlIG5ldyBzdGF0ZQorICovCitzdGF0aWMgdm9pZCBmY29lX2N0bHJfc2V0X3N0YXRlKHN0cnVjdCBmY29lX2N0bHIgKmZpcCwgZW51bSBmaXBfc3RhdGUgc3RhdGUpCit7CisJaWYgKHN0YXRlID09IGZpcC0+c3RhdGUpCisJCXJldHVybjsKKwlpZiAoZmlwLT5scCkKKwkJTElCRkNPRV9GSVBfREJHKGZpcCwgInN0YXRlICVzIC0+ICVzXG4iLAorCQkJZmNvZV9jdGxyX3N0YXRlKGZpcC0+c3RhdGUpLCBmY29lX2N0bHJfc3RhdGUoc3RhdGUpKTsKKwlmaXAtPnN0YXRlID0gc3RhdGU7Cit9CisKIC8qKgogICogZmNvZV9jdGxyX210dV92YWxpZCgpIC0gQ2hlY2sgaWYgYSBGQ0YncyBNVFUgaXMgdmFsaWQKICAqIEBmY2Y6IFRoZSBGQ0YgdG8gY2hlY2sKQEAgLTEwNSwxNSArMTUzLDI5IEBACiB9CiAKIC8qKgorICogZmNvZV9jdGxyX21hcF9kZXN0KCkgLSBTZXQgZmxhZyBhbmQgT1VJIGZvciBtYXBwaW5nIGRlc3RpbmF0aW9uIGFkZHJlc3NlcworICogQGZpcDogVGhlIEZDb0UgY29udHJvbGxlcgorICovCitzdGF0aWMgdm9pZCBmY29lX2N0bHJfbWFwX2Rlc3Qoc3RydWN0IGZjb2VfY3RsciAqZmlwKQoreworCWlmIChmaXAtPm1vZGUgPT0gRklQX01PREVfVk4yVk4pCisJCWh0b24yNChmaXAtPmRlc3RfYWRkciwgRklQX1ZOX0ZDX01BUCk7CisJZWxzZQorCQlodG9uMjQoZmlwLT5kZXN0X2FkZHIsIEZJUF9ERUZfRkNfTUFQKTsKKwlodG9uMjQoZmlwLT5kZXN0X2FkZHIgKyAzLCAwKTsKKwlmaXAtPm1hcF9kZXN0ID0gMTsKK30KKworLyoqCiAgKiBmY29lX2N0bHJfaW5pdCgpIC0gSW5pdGlhbGl6ZSB0aGUgRkNvRSBDb250cm9sbGVyIGluc3RhbmNlCiAgKiBAZmlwOiBUaGUgRkNvRSBjb250cm9sbGVyIHRvIGluaXRpYWxpemUKICAqLwotdm9pZCBmY29lX2N0bHJfaW5pdChzdHJ1Y3QgZmNvZV9jdGxyICpmaXApCit2b2lkIGZjb2VfY3Rscl9pbml0KHN0cnVjdCBmY29lX2N0bHIgKmZpcCwgZW51bSBmaXBfc3RhdGUgbW9kZSkKIHsKLQlmaXAtPnN0YXRlID0gRklQX1NUX0xJTktfV0FJVDsKLQlmaXAtPm1vZGUgPSBGSVBfU1RfQVVUTzsKKwlmY29lX2N0bHJfc2V0X3N0YXRlKGZpcCwgRklQX1NUX0xJTktfV0FJVCk7CisJZmlwLT5tb2RlID0gbW9kZTsKIAlJTklUX0xJU1RfSEVBRCgmZmlwLT5mY2ZzKTsKLQlzcGluX2xvY2tfaW5pdCgmZmlwLT5sb2NrKTsKKwltdXRleF9pbml0KCZmaXAtPmN0bHJfbXV0ZXgpOwogCWZpcC0+ZmxvZ2lfb3hpZCA9IEZDX1hJRF9VTktOT1dOOwogCXNldHVwX3RpbWVyKCZmaXAtPnRpbWVyLCBmY29lX2N0bHJfdGltZW91dCwgKHVuc2lnbmVkIGxvbmcpZmlwKTsKIAlJTklUX1dPUksoJmZpcC0+dGltZXJfd29yaywgZmNvZV9jdGxyX3RpbWVyX3dvcmspOwpAQCAtMTU5LDEwICsyMjEsMTAgQEAKIAljYW5jZWxfd29ya19zeW5jKCZmaXAtPnJlY3Zfd29yayk7CiAJc2tiX3F1ZXVlX3B1cmdlKCZmaXAtPmZpcF9yZWN2X2xpc3QpOwogCi0Jc3Bpbl9sb2NrX2JoKCZmaXAtPmxvY2spOwotCWZpcC0+c3RhdGUgPSBGSVBfU1RfRElTQUJMRUQ7CisJbXV0ZXhfbG9jaygmZmlwLT5jdGxyX211dGV4KTsKKwlmY29lX2N0bHJfc2V0X3N0YXRlKGZpcCwgRklQX1NUX0RJU0FCTEVEKTsKIAlmY29lX2N0bHJfcmVzZXRfZmNmcyhmaXApOwotCXNwaW5fdW5sb2NrX2JoKCZmaXAtPmxvY2spOworCW11dGV4X3VubG9jaygmZmlwLT5jdGxyX211dGV4KTsKIAlkZWxfdGltZXJfc3luYygmZmlwLT50aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmZmlwLT50aW1lcl93b3JrKTsKIH0KQEAgLTI1NSwxOSArMzE3LDMzIEBACiAgKi8KIHZvaWQgZmNvZV9jdGxyX2xpbmtfdXAoc3RydWN0IGZjb2VfY3RsciAqZmlwKQogewotCXNwaW5fbG9ja19iaCgmZmlwLT5sb2NrKTsKKwltdXRleF9sb2NrKCZmaXAtPmN0bHJfbXV0ZXgpOwogCWlmIChmaXAtPnN0YXRlID09IEZJUF9TVF9OT05fRklQIHx8IGZpcC0+c3RhdGUgPT0gRklQX1NUX0FVVE8pIHsKLQkJc3Bpbl91bmxvY2tfYmgoJmZpcC0+bG9jayk7CisJCW11dGV4X3VubG9jaygmZmlwLT5jdGxyX211dGV4KTsKIAkJZmNfbGlua3VwKGZpcC0+bHApOwogCX0gZWxzZSBpZiAoZmlwLT5zdGF0ZSA9PSBGSVBfU1RfTElOS19XQUlUKSB7Ci0JCWZpcC0+c3RhdGUgPSBmaXAtPm1vZGU7Ci0JCXNwaW5fdW5sb2NrX2JoKCZmaXAtPmxvY2spOwotCQlpZiAoZmlwLT5zdGF0ZSA9PSBGSVBfU1RfQVVUTykKKwkJZmNvZV9jdGxyX3NldF9zdGF0ZShmaXAsIGZpcC0+bW9kZSk7CisJCXN3aXRjaCAoZmlwLT5tb2RlKSB7CisJCWRlZmF1bHQ6CisJCQlMSUJGQ09FX0ZJUF9EQkcoZmlwLCAiaW52YWxpZCBtb2RlICVkXG4iLCBmaXAtPm1vZGUpOworCQkJLyogZmFsbC10aHJvdWdoICovCisJCWNhc2UgRklQX01PREVfQVVUTzoKIAkJCUxJQkZDT0VfRklQX0RCRyhmaXAsICIlcyIsICJzZXR0aW5nIEFVVE8gbW9kZS5cbiIpOwotCQlmY19saW5rdXAoZmlwLT5scCk7Ci0JCWZjb2VfY3Rscl9zb2xpY2l0KGZpcCwgTlVMTCk7CisJCQkvKiBmYWxsLXRocm91Z2ggKi8KKwkJY2FzZSBGSVBfTU9ERV9GQUJSSUM6CisJCWNhc2UgRklQX01PREVfTk9OX0ZJUDoKKwkJCW11dGV4X3VubG9jaygmZmlwLT5jdGxyX211dGV4KTsKKwkJCWZjX2xpbmt1cChmaXAtPmxwKTsKKwkJCWZjb2VfY3Rscl9zb2xpY2l0KGZpcCwgTlVMTCk7CisJCQlicmVhazsKKwkJY2FzZSBGSVBfTU9ERV9WTjJWTjoKKwkJCWZjb2VfY3Rscl92bl9zdGFydChmaXApOworCQkJbXV0ZXhfdW5sb2NrKCZmaXAtPmN0bHJfbXV0ZXgpOworCQkJZmNfbGlua3VwKGZpcC0+bHApOworCQkJYnJlYWs7CisJCX0KIAl9IGVsc2UKLQkJc3Bpbl91bmxvY2tfYmgoJmZpcC0+bG9jayk7CisJCW11dGV4X3VubG9jaygmZmlwLT5jdGxyX211dGV4KTsKIH0KIEVYUE9SVF9TWU1CT0woZmNvZV9jdGxyX2xpbmtfdXApOwogCkBAIC0yODMsNyArMzU5LDcgQEAKIAlmaXAtPnBvcnRfa2FfdGltZSA9IDA7CiAJZmlwLT5zb2xfdGltZSA9IDA7CiAJZmlwLT5mbG9naV9veGlkID0gRkNfWElEX1VOS05PV047Ci0JZmlwLT5tYXBfZGVzdCA9IDA7CisJZmNvZV9jdGxyX21hcF9kZXN0KGZpcCk7CiB9CiAKIC8qKgpAQCAtMzAwLDExICszNzYsMTEgQEAKIAlpbnQgbGlua19kcm9wcGVkOwogCiAJTElCRkNPRV9GSVBfREJHKGZpcCwgImxpbmsgZG93bi5cbiIpOwotCXNwaW5fbG9ja19iaCgmZmlwLT5sb2NrKTsKKwltdXRleF9sb2NrKCZmaXAtPmN0bHJfbXV0ZXgpOwogCWZjb2VfY3Rscl9yZXNldChmaXApOwogCWxpbmtfZHJvcHBlZCA9IGZpcC0+c3RhdGUgIT0gRklQX1NUX0xJTktfV0FJVDsKLQlmaXAtPnN0YXRlID0gRklQX1NUX0xJTktfV0FJVDsKLQlzcGluX3VubG9ja19iaCgmZmlwLT5sb2NrKTsKKwlmY29lX2N0bHJfc2V0X3N0YXRlKGZpcCwgRklQX1NUX0xJTktfV0FJVCk7CisJbXV0ZXhfdW5sb2NrKCZmaXAtPmN0bHJfbXV0ZXgpOwogCiAJaWYgKGxpbmtfZHJvcHBlZCkKIAkJZmNfbGlua2Rvd24oZmlwLT5scCk7CkBAIC0zNDMsNyArNDE5LDcgQEAKIAogCWZjZiA9IGZpcC0+c2VsX2ZjZjsKIAlscCA9IGZpcC0+bHA7Ci0JaWYgKCFmY2YgfHwgIWxwLT5wb3J0X2lkKQorCWlmICghZmNmIHx8IChwb3J0cyAmJiAhbHAtPnBvcnRfaWQpKQogCQlyZXR1cm47CiAKIAlsZW4gPSBzaXplb2YoKmthbCkgKyBwb3J0cyAqIHNpemVvZigqdm4pOwpAQCAtMzg5LDYgKzQ2NSw3IEBACiAgKiBAZmlwOiAgIFRoZSBGQ29FIGNvbnRyb2xsZXIgZm9yIHRoZSBFTFMgZnJhbWUKICAqIEBkdHlwZTogVGhlIEZJUCBkZXNjcmlwdG9yIHR5cGUgZm9yIHRoZSBmcmFtZQogICogQHNrYjogICBUaGUgRkNvRSBFTFMgZnJhbWUgaW5jbHVkaW5nIEZDIGhlYWRlciBidXQgbm8gRkNvRSBoZWFkZXJzCisgKiBAZF9pZDogIFRoZSBkZXN0aW5hdGlvbiBwb3J0IElELgogICoKICAqIFJldHVybnMgbm9uLXplcm8gZXJyb3IgY29kZSBvbiBmYWlsdXJlLgogICoKQEAgLTM5OSw1OCArNDc2LDc1IEBACiAgKiBFdGhlcm5ldCBoZWFkZXIuICBUaGUgdGFpbHJvb20gaXMgZm9yIHRoZSBGSVAgTUFDIGRlc2NyaXB0b3IuCiAgKi8KIHN0YXRpYyBpbnQgZmNvZV9jdGxyX2VuY2FwcyhzdHJ1Y3QgZmNvZV9jdGxyICpmaXAsIHN0cnVjdCBmY19scG9ydCAqbHBvcnQsCi0JCQkgICAgdTggZHR5cGUsIHN0cnVjdCBza19idWZmICpza2IpCisJCQkgICAgdTggZHR5cGUsIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBkX2lkKQogewogCXN0cnVjdCBmaXBfZW5jYXBzX2hlYWQgewogCQlzdHJ1Y3QgZXRoaGRyIGV0aDsKIAkJc3RydWN0IGZpcF9oZWFkZXIgZmlwOwogCQlzdHJ1Y3QgZmlwX2VuY2FwcyBlbmNhcHM7CiAJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSAqY2FwOworCXN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKmZoOwogCXN0cnVjdCBmaXBfbWFjX2Rlc2MgKm1hYzsKIAlzdHJ1Y3QgZmNvZV9mY2YgKmZjZjsKIAlzaXplX3QgZGxlbjsKIAl1MTYgZmlwX2ZsYWdzOworCXU4IG9wOwogCi0JZmNmID0gZmlwLT5zZWxfZmNmOwotCWlmICghZmNmKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIHNldCBmbGFncyBhY2NvcmRpbmcgdG8gYm90aCBGQ0YgYW5kIGxwb3J0J3MgY2FwYWJpbGl0eSBvbiBTUE1BICovCi0JZmlwX2ZsYWdzID0gZmNmLT5mbGFnczsKLQlmaXBfZmxhZ3MgJj0gZmlwLT5zcG1hID8gRklQX0ZMX1NQTUEgfCBGSVBfRkxfRlBNQSA6IEZJUF9GTF9GUE1BOwotCWlmICghZmlwX2ZsYWdzKQotCQlyZXR1cm4gLUVOT0RFVjsKLQorCWZoID0gKHN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKilza2ItPmRhdGE7CisJb3AgPSAqKHU4ICopKGZoICsgMSk7CiAJZGxlbiA9IHNpemVvZihzdHJ1Y3QgZmlwX2VuY2FwcykgKyBza2ItPmxlbjsJLyogbGVuIGJlZm9yZSBwdXNoICovCiAJY2FwID0gKHN0cnVjdCBmaXBfZW5jYXBzX2hlYWQgKilza2JfcHVzaChza2IsIHNpemVvZigqY2FwKSk7Ci0KIAltZW1zZXQoY2FwLCAwLCBzaXplb2YoKmNhcCkpOwotCW1lbWNweShjYXAtPmV0aC5oX2Rlc3QsIGZjZi0+ZmNmX21hYywgRVRIX0FMRU4pOworCisJaWYgKGxwb3J0LT5wb2ludF90b19tdWx0aXBvaW50KSB7CisJCWlmIChmY29lX2N0bHJfdm5fbG9va3VwKGZpcCwgZF9pZCwgY2FwLT5ldGguaF9kZXN0KSkKKwkJCXJldHVybiAtRU5PREVWOworCQlmaXBfZmxhZ3MgPSAwOworCX0gZWxzZSB7CisJCWZjZiA9IGZpcC0+c2VsX2ZjZjsKKwkJaWYgKCFmY2YpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJZmlwX2ZsYWdzID0gZmNmLT5mbGFnczsKKwkJZmlwX2ZsYWdzICY9IGZpcC0+c3BtYSA/IEZJUF9GTF9TUE1BIHwgRklQX0ZMX0ZQTUEgOgorCQkJCQkgRklQX0ZMX0ZQTUE7CisJCWlmICghZmlwX2ZsYWdzKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCW1lbWNweShjYXAtPmV0aC5oX2Rlc3QsIGZjZi0+ZmNmX21hYywgRVRIX0FMRU4pOworCX0KIAltZW1jcHkoY2FwLT5ldGguaF9zb3VyY2UsIGZpcC0+Y3RsX3NyY19hZGRyLCBFVEhfQUxFTik7CiAJY2FwLT5ldGguaF9wcm90byA9IGh0b25zKEVUSF9QX0ZJUCk7CiAKIAljYXAtPmZpcC5maXBfdmVyID0gRklQX1ZFUl9FTkNBUFMoRklQX1ZFUik7CiAJY2FwLT5maXAuZmlwX29wID0gaHRvbnMoRklQX09QX0xTKTsKLQljYXAtPmZpcC5maXBfc3ViY29kZSA9IEZJUF9TQ19SRVE7Ci0JY2FwLT5maXAuZmlwX2RsX2xlbiA9IGh0b25zKChkbGVuICsgc2l6ZW9mKCptYWMpKSAvIEZJUF9CUFcpOworCWlmIChvcCA9PSBFTFNfTFNfQUNDIHx8IG9wID09IEVMU19MU19SSlQpCisJCWNhcC0+ZmlwLmZpcF9zdWJjb2RlID0gRklQX1NDX1JFUDsKKwllbHNlCisJCWNhcC0+ZmlwLmZpcF9zdWJjb2RlID0gRklQX1NDX1JFUTsKIAljYXAtPmZpcC5maXBfZmxhZ3MgPSBodG9ucyhmaXBfZmxhZ3MpOwogCiAJY2FwLT5lbmNhcHMuZmRfZGVzYy5maXBfZHR5cGUgPSBkdHlwZTsKIAljYXAtPmVuY2Fwcy5mZF9kZXNjLmZpcF9kbGVuID0gZGxlbiAvIEZJUF9CUFc7CiAKLQltYWMgPSAoc3RydWN0IGZpcF9tYWNfZGVzYyAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKm1hYykpOwotCW1lbXNldChtYWMsIDAsIHNpemVvZigqbWFjKSk7Ci0JbWFjLT5mZF9kZXNjLmZpcF9kdHlwZSA9IEZJUF9EVF9NQUM7Ci0JbWFjLT5mZF9kZXNjLmZpcF9kbGVuID0gc2l6ZW9mKCptYWMpIC8gRklQX0JQVzsKLQlpZiAoZHR5cGUgIT0gRklQX0RUX0ZMT0dJICYmIGR0eXBlICE9IEZJUF9EVF9GRElTQykgewotCQltZW1jcHkobWFjLT5mZF9tYWMsIGZpcC0+Z2V0X3NyY19hZGRyKGxwb3J0KSwgRVRIX0FMRU4pOwotCX0gZWxzZSBpZiAoZmlwX2ZsYWdzICYgRklQX0ZMX1NQTUEpIHsKLQkJTElCRkNPRV9GSVBfREJHKGZpcCwgIkZMT0dJL0ZESVNDIHNlbnQgd2l0aCBTUE1BXG4iKTsKLQkJbWVtY3B5KG1hYy0+ZmRfbWFjLCBmaXAtPmN0bF9zcmNfYWRkciwgRVRIX0FMRU4pOwotCX0gZWxzZSB7Ci0JCUxJQkZDT0VfRklQX0RCRyhmaXAsICJGTE9HSS9GRElTQyBzZW50IHdpdGggRlBNQVxuIik7Ci0JCS8qIEZQTUEgb25seSBGTE9HSSBtdXN0IGxlYXZlIHRoZSBNQUMgZGVzYyBzZXQgdG8gYWxsIDBzICovCisJaWYgKG9wICE9IEVMU19MU19SSlQpIHsKKwkJZGxlbiArPSBzaXplb2YoKm1hYyk7CisJCW1hYyA9IChzdHJ1Y3QgZmlwX21hY19kZXNjICopc2tiX3B1dChza2IsIHNpemVvZigqbWFjKSk7CisJCW1lbXNldChtYWMsIDAsIHNpemVvZigqbWFjKSk7CisJCW1hYy0+ZmRfZGVzYy5maXBfZHR5cGUgPSBGSVBfRFRfTUFDOworCQltYWMtPmZkX2Rlc2MuZmlwX2RsZW4gPSBzaXplb2YoKm1hYykgLyBGSVBfQlBXOworCQlpZiAoZHR5cGUgIT0gRklQX0RUX0ZMT0dJICYmIGR0eXBlICE9IEZJUF9EVF9GRElTQykgeworCQkJbWVtY3B5KG1hYy0+ZmRfbWFjLCBmaXAtPmdldF9zcmNfYWRkcihscG9ydCksIEVUSF9BTEVOKTsKKwkJfSBlbHNlIGlmIChmaXAtPm1vZGUgPT0gRklQX01PREVfVk4yVk4pIHsKKwkJCWh0b24yNChtYWMtPmZkX21hYywgRklQX1ZOX0ZDX01BUCk7CisJCQlodG9uMjQobWFjLT5mZF9tYWMgKyAzLCBmaXAtPnBvcnRfaWQpOworCQl9IGVsc2UgaWYgKGZpcF9mbGFncyAmIEZJUF9GTF9TUE1BKSB7CisJCQlMSUJGQ09FX0ZJUF9EQkcoZmlwLCAiRkxPR0kvRkRJU0Mgc2VudCB3aXRoIFNQTUFcbiIpOworCQkJbWVtY3B5KG1hYy0+ZmRfbWFjLCBmaXAtPmN0bF9zcmNfYWRkciwgRVRIX0FMRU4pOworCQl9IGVsc2UgeworCQkJTElCRkNPRV9GSVBfREJHKGZpcCwgIkZMT0dJL0ZESVNDIHNlbnQgd2l0aCBGUE1BXG4iKTsKKwkJCS8qIEZQTUEgb25seSBGTE9HSS4gIE11c3QgbGVhdmUgdGhlIE1BQyBkZXNjIHplcm9lZC4gKi8KKwkJfQogCX0KKwljYXAtPmZpcC5maXBfZGxfbGVuID0gaHRvbnMoZGxlbiAvIEZJUF9CUFcpOwogCiAJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0ZJUCk7CiAJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKQEAgLTQ2OSwxOSArNTYzLDIyIEBACiAgKgogICogVGhlIGNhbGxlciBtdXN0IGNoZWNrIHRoYXQgdGhlIGxlbmd0aCBpcyBhIG11bHRpcGxlIG9mIDQuCiAgKiBUaGUgU0tCIG11c3QgaGF2ZSBlbm91Z2ggaGVhZHJvb20gKDI4IGJ5dGVzKSBhbmQgdGFpbHJvb20gKDggYnl0ZXMpLgorICogVGhlIHRoZSBza2IgbXVzdCBhbHNvIGJlIGFuIGZjX2ZyYW1lLgogICovCiBpbnQgZmNvZV9jdGxyX2Vsc19zZW5kKHN0cnVjdCBmY29lX2N0bHIgKmZpcCwgc3RydWN0IGZjX2xwb3J0ICpscG9ydCwKIAkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CisJc3RydWN0IGZjX2ZyYW1lICpmcDsKIAlzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmaDsKIAl1MTYgb2xkX3hpZDsKIAl1OCBvcDsKIAl1OCBtYWNbRVRIX0FMRU5dOwogCisJZnAgPSBjb250YWluZXJfb2Yoc2tiLCBzdHJ1Y3QgZmNfZnJhbWUsIHNrYik7CiAJZmggPSAoc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqKXNrYi0+ZGF0YTsKIAlvcCA9ICoodTggKikoZmggKyAxKTsKIAotCWlmIChvcCA9PSBFTFNfRkxPR0kpIHsKKwlpZiAob3AgPT0gRUxTX0ZMT0dJICYmIGZpcC0+bW9kZSAhPSBGSVBfTU9ERV9WTjJWTikgewogCQlvbGRfeGlkID0gZmlwLT5mbG9naV9veGlkOwogCQlmaXAtPmZsb2dpX294aWQgPSBudG9ocyhmaC0+Zmhfb3hfaWQpOwogCQlpZiAoZmlwLT5zdGF0ZSA9PSBGSVBfU1RfQVVUTykgewpAQCAtNDkwLDE4ICs1ODcsMTcgQEAKIAkJCWZpcC0+ZmxvZ2lfY291bnQrKzsKIAkJCWlmIChmaXAtPmZsb2dpX2NvdW50IDwgMykKIAkJCQlnb3RvIGRyb3A7Ci0JCQlmaXAtPm1hcF9kZXN0ID0gMTsKKwkJCWZjb2VfY3Rscl9tYXBfZGVzdChmaXApOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJaWYgKGZpcC0+c3RhdGUgPT0gRklQX1NUX05PTl9GSVApCi0JCQlmaXAtPm1hcF9kZXN0ID0gMTsKKwkJCWZjb2VfY3Rscl9tYXBfZGVzdChmaXApOwogCX0KIAogCWlmIChmaXAtPnN0YXRlID09IEZJUF9TVF9OT05fRklQKQogCQlyZXR1cm4gMDsKLQlpZiAoIWZpcC0+c2VsX2ZjZikKKwlpZiAoIWZpcC0+c2VsX2ZjZiAmJiBmaXAtPm1vZGUgIT0gRklQX01PREVfVk4yVk4pCiAJCWdvdG8gZHJvcDsKLQogCXN3aXRjaCAob3ApIHsKIAljYXNlIEVMU19GTE9HSToKIAkJb3AgPSBGSVBfRFRfRkxPR0k7CkBAIC01MTIsMzYgKzYwOCw0OSBAQAogCQlvcCA9IEZJUF9EVF9GRElTQzsKIAkJYnJlYWs7CiAJY2FzZSBFTFNfTE9HTzoKLQkJaWYgKGZpcC0+c3RhdGUgIT0gRklQX1NUX0VOQUJMRUQpCi0JCQlyZXR1cm4gMDsKLQkJaWYgKG50b2gyNChmaC0+ZmhfZF9pZCkgIT0gRkNfRklEX0ZMT0dJKQotCQkJcmV0dXJuIDA7CisJCWlmIChmaXAtPm1vZGUgPT0gRklQX01PREVfVk4yVk4pIHsKKwkJCWlmIChmaXAtPnN0YXRlICE9IEZJUF9TVF9WTk1QX1VQKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKG50b2gyNChmaC0+ZmhfZF9pZCkgPT0gRkNfRklEX0ZMT0dJKQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UgeworCQkJaWYgKGZpcC0+c3RhdGUgIT0gRklQX1NUX0VOQUJMRUQpCisJCQkJcmV0dXJuIDA7CisJCQlpZiAobnRvaDI0KGZoLT5maF9kX2lkKSAhPSBGQ19GSURfRkxPR0kpCisJCQkJcmV0dXJuIDA7CisJCX0KIAkJb3AgPSBGSVBfRFRfTE9HTzsKIAkJYnJlYWs7CiAJY2FzZSBFTFNfTFNfQUNDOgotCQlpZiAoZmlwLT5mbG9naV9veGlkID09IEZDX1hJRF9VTktOT1dOKQotCQkJcmV0dXJuIDA7Ci0JCWlmICghbnRvaDI0KGZoLT5maF9zX2lkKSkKLQkJCXJldHVybiAwOwotCQlpZiAoZmlwLT5zdGF0ZSA9PSBGSVBfU1RfQVVUTykKLQkJCXJldHVybiAwOwogCQkvKgotCQkgKiBIZXJlIHdlIG11c3QndmUgZ290dGVuIGFuIFNJRCBieSBhY2NlcHRpbmcgYW4gRkxPR0kKKwkJICogSWYgbm9uLUZJUCwgd2UgbWF5IGhhdmUgZ290dGVuIGFuIFNJRCBieSBhY2NlcHRpbmcgYW4gRkxPR0kKIAkJICogZnJvbSBhIHBvaW50LXRvLXBvaW50IGNvbm5lY3Rpb24uICBTd2l0Y2ggdG8gdXNpbmcKIAkJICogdGhlIHNvdXJjZSBtYWMgYmFzZWQgb24gdGhlIFNJRC4gIFRoZSBkZXN0aW5hdGlvbgogCQkgKiBNQUMgaW4gdGhpcyBjYXNlIHdvdWxkIGhhdmUgYmVlbiBzZXQgYnkgcmVjZXZpbmcgdGhlCiAJCSAqIEZMT0dJLgogCQkgKi8KLQkJZmlwLT5mbG9naV9veGlkID0gRkNfWElEX1VOS05PV047Ci0JCWZjX2Zjb2Vfc2V0X21hYyhtYWMsIGZoLT5maF9kX2lkKTsKLQkJZmlwLT51cGRhdGVfbWFjKGxwb3J0LCBtYWMpOworCQlpZiAoZmlwLT5zdGF0ZSA9PSBGSVBfU1RfTk9OX0ZJUCkgeworCQkJaWYgKGZpcC0+ZmxvZ2lfb3hpZCA9PSBGQ19YSURfVU5LTk9XTikKKwkJCQlyZXR1cm4gMDsKKwkJCWZpcC0+ZmxvZ2lfb3hpZCA9IEZDX1hJRF9VTktOT1dOOworCQkJZmNfZmNvZV9zZXRfbWFjKG1hYywgZmgtPmZoX2RfaWQpOworCQkJZmlwLT51cGRhdGVfbWFjKGxwb3J0LCBtYWMpOworCQl9CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgRUxTX0xTX1JKVDoKKwkJb3AgPSBmcl9lbmNhcHMoZnApOworCQlpZiAob3ApCisJCQlicmVhazsKIAkJcmV0dXJuIDA7CiAJZGVmYXVsdDoKLQkJaWYgKGZpcC0+c3RhdGUgIT0gRklQX1NUX0VOQUJMRUQpCisJCWlmIChmaXAtPnN0YXRlICE9IEZJUF9TVF9FTkFCTEVEICYmCisJCSAgICBmaXAtPnN0YXRlICE9IEZJUF9TVF9WTk1QX1VQKQogCQkJZ290byBkcm9wOwogCQlyZXR1cm4gMDsKIAl9Ci0JaWYgKGZjb2VfY3Rscl9lbmNhcHMoZmlwLCBscG9ydCwgb3AsIHNrYikpCisJTElCRkNPRV9GSVBfREJHKGZpcCwgImVsc19zZW5kIG9wICV1IGRfaWQgJXhcbiIsCisJCQlvcCwgbnRvaDI0KGZoLT5maF9kX2lkKSk7CisJaWYgKGZjb2VfY3Rscl9lbmNhcHMoZmlwLCBscG9ydCwgb3AsIHNrYiwgbnRvaDI0KGZoLT5maF9kX2lkKSkpCiAJCWdvdG8gZHJvcDsKIAlmaXAtPnNlbmQoZmlwLCBza2IpOwogCXJldHVybiAtRUlOUFJPR1JFU1M7CkBAIC01NTcsNjAgKzY2Niw2NiBAQAogICoKICAqIENhbGxlZCB3aXRoIGxvY2sgaGVsZCBhbmQgcHJlZW1wdGlvbiBkaXNhYmxlZC4KICAqCi0gKiBBbiBGQ0YgaXMgY29uc2lkZXJlZCBvbGQgaWYgd2UgaGF2ZSBtaXNzZWQgdGhyZWUgYWR2ZXJ0aXNlbWVudHMuCi0gKiBUaGF0IGlzLCB0aGVyZSBoYXZlIGJlZW4gbm8gdmFsaWQgYWR2ZXJ0aXNlbWVudCBmcm9tIGl0IGZvciB0aHJlZQotICogdGltZXMgaXRzIGtlZXAtYWxpdmUgcGVyaW9kIGluY2x1ZGluZyBmdXp6LgorICogQW4gRkNGIGlzIGNvbnNpZGVyZWQgb2xkIGlmIHdlIGhhdmUgbWlzc2VkIHR3byBhZHZlcnRpc2VtZW50cy4KKyAqIFRoYXQgaXMsIHRoZXJlIGhhdmUgYmVlbiBubyB2YWxpZCBhZHZlcnRpc2VtZW50IGZyb20gaXQgZm9yIDIuNQorICogdGltZXMgaXRzIGtlZXAtYWxpdmUgcGVyaW9kLgogICoKICAqIEluIGFkZGl0aW9uLCBkZXRlcm1pbmUgdGhlIHRpbWUgd2hlbiBhbiBGQ0Ygc2VsZWN0aW9uIGNhbiBvY2N1ci4KICAqCiAgKiBBbHNvLCBpbmNyZW1lbnQgdGhlIE1pc3NEaXNjQWR2Q291bnQgd2hlbiBubyBhZHZlcnRpc2VtZW50IGlzIHJlY2VpdmVkCiAgKiBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgRkNGIGZvciAxLjUgKiBGS0FfQURWX1BFUklPRCAoRkMtQkItNSBMRVNCKS4KKyAqCisgKiBSZXR1cm5zIHRoZSB0aW1lIGluIGppZmZpZXMgZm9yIHRoZSBuZXh0IGNhbGwuCiAgKi8KLXN0YXRpYyB2b2lkIGZjb2VfY3Rscl9hZ2VfZmNmcyhzdHJ1Y3QgZmNvZV9jdGxyICpmaXApCitzdGF0aWMgdW5zaWduZWQgbG9uZyBmY29lX2N0bHJfYWdlX2ZjZnMoc3RydWN0IGZjb2VfY3RsciAqZmlwKQogewogCXN0cnVjdCBmY29lX2ZjZiAqZmNmOwogCXN0cnVjdCBmY29lX2ZjZiAqbmV4dDsKKwl1bnNpZ25lZCBsb25nIG5leHRfdGltZXIgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhGSVBfVk5fS0FfUEVSSU9EKTsKKwl1bnNpZ25lZCBsb25nIGRlYWRsaW5lOwogCXVuc2lnbmVkIGxvbmcgc2VsX3RpbWUgPSAwOwotCXVuc2lnbmVkIGxvbmcgbWRhX3RpbWUgPSAwOwogCXN0cnVjdCBmY29lX2Rldl9zdGF0cyAqc3RhdHM7CiAKKwlzdGF0cyA9IHBlcl9jcHVfcHRyKGZpcC0+bHAtPmRldl9zdGF0cywgZ2V0X2NwdSgpKTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmY2YsIG5leHQsICZmaXAtPmZjZnMsIGxpc3QpIHsKLQkJbWRhX3RpbWUgPSBmY2YtPmZrYV9wZXJpb2QgKyAoZmNmLT5ma2FfcGVyaW9kID4+IDEpOwotCQlpZiAoKGZpcC0+c2VsX2ZjZiA9PSBmY2YpICYmCi0JCSAgICAodGltZV9hZnRlcihqaWZmaWVzLCBmY2YtPnRpbWUgKyBtZGFfdGltZSkpKSB7Ci0JCQltb2RfdGltZXIoJmZpcC0+dGltZXIsIGppZmZpZXMgKyBtZGFfdGltZSk7Ci0JCQlzdGF0cyA9IHBlcl9jcHVfcHRyKGZpcC0+bHAtPmRldl9zdGF0cywKLQkJCQkJICAgIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JCQlzdGF0cy0+TWlzc0Rpc2NBZHZDb3VudCsrOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAibGliZmNvZTogaG9zdCVkOiBNaXNzaW5nIERpc2NvdmVyeSAiCi0JCQkgICAgICAgIkFkdmVydGlzZW1lbnQgZm9yIGZhYiAlMTYuMTZsbHggY291bnQgJWxsZFxuIiwKLQkJCSAgICAgICBmaXAtPmxwLT5ob3N0LT5ob3N0X25vLCBmY2YtPmZhYnJpY19uYW1lLAotCQkJICAgICAgIHN0YXRzLT5NaXNzRGlzY0FkdkNvdW50KTsKKwkJZGVhZGxpbmUgPSBmY2YtPnRpbWUgKyBmY2YtPmZrYV9wZXJpb2QgKyBmY2YtPmZrYV9wZXJpb2QgLyAyOworCQlpZiAoZmlwLT5zZWxfZmNmID09IGZjZikgeworCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGVhZGxpbmUpKSB7CisJCQkJc3RhdHMtPk1pc3NEaXNjQWR2Q291bnQrKzsKKwkJCQlwcmludGsoS0VSTl9JTkZPICJsaWJmY29lOiBob3N0JWQ6ICIKKwkJCQkgICAgICAgIk1pc3NpbmcgRGlzY292ZXJ5IEFkdmVydGlzZW1lbnQgIgorCQkJCSAgICAgICAiZm9yIGZhYiAlMTYuMTZsbHggY291bnQgJWxsZFxuIiwKKwkJCQkgICAgICAgZmlwLT5scC0+aG9zdC0+aG9zdF9ubywgZmNmLT5mYWJyaWNfbmFtZSwKKwkJCQkgICAgICAgc3RhdHMtPk1pc3NEaXNjQWR2Q291bnQpOworCQkJfSBlbHNlIGlmICh0aW1lX2FmdGVyKG5leHRfdGltZXIsIGRlYWRsaW5lKSkKKwkJCQluZXh0X3RpbWVyID0gZGVhZGxpbmU7CiAJCX0KLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZmNmLT50aW1lICsgZmNmLT5ma2FfcGVyaW9kICogMyArCi0JCQkgICAgICAgbXNlY3NfdG9famlmZmllcyhGSVBfRkNGX0ZVWlogKiAzKSkpIHsKKworCQlkZWFkbGluZSArPSBmY2YtPmZrYV9wZXJpb2Q7CisJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIGRlYWRsaW5lKSkgewogCQkJaWYgKGZpcC0+c2VsX2ZjZiA9PSBmY2YpCiAJCQkJZmlwLT5zZWxfZmNmID0gTlVMTDsKIAkJCWxpc3RfZGVsKCZmY2YtPmxpc3QpOwogCQkJV0FSTl9PTighZmlwLT5mY2ZfY291bnQpOwogCQkJZmlwLT5mY2ZfY291bnQtLTsKIAkJCWtmcmVlKGZjZik7Ci0JCQlzdGF0cyA9IHBlcl9jcHVfcHRyKGZpcC0+bHAtPmRldl9zdGF0cywKLQkJCQkJICAgIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJCQlzdGF0cy0+VkxpbmtGYWlsdXJlQ291bnQrKzsKLQkJfSBlbHNlIGlmIChmY29lX2N0bHJfbXR1X3ZhbGlkKGZjZikgJiYKLQkJCSAgICghc2VsX3RpbWUgfHwgdGltZV9iZWZvcmUoc2VsX3RpbWUsIGZjZi0+dGltZSkpKSB7Ci0JCQlzZWxfdGltZSA9IGZjZi0+dGltZTsKKwkJfSBlbHNlIHsKKwkJCWlmICh0aW1lX2FmdGVyKG5leHRfdGltZXIsIGRlYWRsaW5lKSkKKwkJCQluZXh0X3RpbWVyID0gZGVhZGxpbmU7CisJCQlpZiAoZmNvZV9jdGxyX210dV92YWxpZChmY2YpICYmCisJCQkgICAgKCFzZWxfdGltZSB8fCB0aW1lX2JlZm9yZShzZWxfdGltZSwgZmNmLT50aW1lKSkpCisJCQkJc2VsX3RpbWUgPSBmY2YtPnRpbWU7CiAJCX0KIAl9Ci0JaWYgKHNlbF90aW1lKSB7CisJcHV0X2NwdSgpOworCWlmIChzZWxfdGltZSAmJiAhZmlwLT5zZWxfZmNmICYmICFmaXAtPnNlbF90aW1lKSB7CiAJCXNlbF90aW1lICs9IG1zZWNzX3RvX2ppZmZpZXMoRkNPRV9DVExSX1NUQVJUX0RFTEFZKTsKIAkJZmlwLT5zZWxfdGltZSA9IHNlbF90aW1lOwotCQlpZiAodGltZV9iZWZvcmUoc2VsX3RpbWUsIGZpcC0+dGltZXIuZXhwaXJlcykpCi0JCQltb2RfdGltZXIoJmZpcC0+dGltZXIsIHNlbF90aW1lKTsKLQl9IGVsc2UgewotCQlmaXAtPnNlbF90aW1lID0gMDsKIAl9CisKKwlyZXR1cm4gbmV4dF90aW1lcjsKIH0KIAogLyoqCkBAIC02MzMsNiArNzQ4LDcgQEAKIAl1bnNpZ25lZCBsb25nIHQ7CiAJc2l6ZV90IHJsZW47CiAJc2l6ZV90IGRsZW47CisJdTMyIGRlc2NfbWFzazsKIAogCW1lbXNldChmY2YsIDAsIHNpemVvZigqZmNmKSk7CiAJZmNmLT5ma2FfcGVyaW9kID0gbXNlY3NfdG9famlmZmllcyhGQ09FX0NUTFJfREVGX0ZLQSk7CkBAIC02NDAsNiArNzU2LDEyIEBACiAJZmlwaCA9IChzdHJ1Y3QgZmlwX2hlYWRlciAqKXNrYi0+ZGF0YTsKIAlmY2YtPmZsYWdzID0gbnRvaHMoZmlwaC0+ZmlwX2ZsYWdzKTsKIAorCS8qCisJICogbWFzayBvZiByZXF1aXJlZCBkZXNjcmlwdG9ycy4gdmFsaWRhdGluZyBlYWNoIG9uZSBjbGVhcnMgaXRzIGJpdC4KKwkgKi8KKwlkZXNjX21hc2sgPSBCSVQoRklQX0RUX1BSSSkgfCBCSVQoRklQX0RUX01BQykgfCBCSVQoRklQX0RUX05BTUUpIHwKKwkJCUJJVChGSVBfRFRfRkFCKSB8IEJJVChGSVBfRFRfRktBKTsKKwogCXJsZW4gPSBudG9ocyhmaXBoLT5maXBfZGxfbGVuKSAqIDQ7CiAJaWYgKHJsZW4gKyBzaXplb2YoKmZpcGgpID4gc2tiLT5sZW4pCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNjQ5LDExICs3NzEsMTkgQEAKIAkJZGxlbiA9IGRlc2MtPmZpcF9kbGVuICogRklQX0JQVzsKIAkJaWYgKGRsZW4gPCBzaXplb2YoKmRlc2MpIHx8IGRsZW4gPiBybGVuKQogCQkJcmV0dXJuIC1FSU5WQUw7CisJCS8qIERyb3AgQWR2IGlmIHRoZXJlIGFyZSBkdXBsaWNhdGUgY3JpdGljYWwgZGVzY3JpcHRvcnMgKi8KKwkJaWYgKChkZXNjLT5maXBfZHR5cGUgPCAzMikgJiYKKwkJICAgICEoZGVzY19tYXNrICYgMVUgPDwgZGVzYy0+ZmlwX2R0eXBlKSkgeworCQkJTElCRkNPRV9GSVBfREJHKGZpcCwgIkR1cGxpY2F0ZSBDcml0aWNhbCAiCisJCQkJCSJEZXNjcmlwdG9ycyBpbiBGSVAgYWR2XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJCXN3aXRjaCAoZGVzYy0+ZmlwX2R0eXBlKSB7CiAJCWNhc2UgRklQX0RUX1BSSToKIAkJCWlmIChkbGVuICE9IHNpemVvZihzdHJ1Y3QgZmlwX3ByaV9kZXNjKSkKIAkJCQlnb3RvIGxlbl9lcnI7CiAJCQlmY2YtPnByaSA9ICgoc3RydWN0IGZpcF9wcmlfZGVzYyAqKWRlc2MpLT5mZF9wcmk7CisJCQlkZXNjX21hc2sgJj0gfkJJVChGSVBfRFRfUFJJKTsKIAkJCWJyZWFrOwogCQljYXNlIEZJUF9EVF9NQUM6CiAJCQlpZiAoZGxlbiAhPSBzaXplb2Yoc3RydWN0IGZpcF9tYWNfZGVzYykpCkBAIC02NjIsMTYgKzc5MiwxOSBAQAogCQkJICAgICAgICgoc3RydWN0IGZpcF9tYWNfZGVzYyAqKWRlc2MpLT5mZF9tYWMsCiAJCQkgICAgICAgRVRIX0FMRU4pOwogCQkJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGZjZi0+ZmNmX21hYykpIHsKLQkJCQlMSUJGQ09FX0ZJUF9EQkcoZmlwLCAiSW52YWxpZCBNQUMgYWRkcmVzcyAiCi0JCQkJCQkiaW4gRklQIGFkdlxuIik7CisJCQkJTElCRkNPRV9GSVBfREJHKGZpcCwKKwkJCQkJIkludmFsaWQgTUFDIGFkZHIgJXBNIGluIEZJUCBhZHZcbiIsCisJCQkJCWZjZi0+ZmNmX21hYyk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CisJCQlkZXNjX21hc2sgJj0gfkJJVChGSVBfRFRfTUFDKTsKIAkJCWJyZWFrOwogCQljYXNlIEZJUF9EVF9OQU1FOgogCQkJaWYgKGRsZW4gIT0gc2l6ZW9mKHN0cnVjdCBmaXBfd3duX2Rlc2MpKQogCQkJCWdvdG8gbGVuX2VycjsKIAkJCXd3biA9IChzdHJ1Y3QgZmlwX3d3bl9kZXNjICopZGVzYzsKIAkJCWZjZi0+c3dpdGNoX25hbWUgPSBnZXRfdW5hbGlnbmVkX2JlNjQoJnd3bi0+ZmRfd3duKTsKKwkJCWRlc2NfbWFzayAmPSB+QklUKEZJUF9EVF9OQU1FKTsKIAkJCWJyZWFrOwogCQljYXNlIEZJUF9EVF9GQUI6CiAJCQlpZiAoZGxlbiAhPSBzaXplb2Yoc3RydWN0IGZpcF9mYWJfZGVzYykpCkBAIC02ODAsNiArODEzLDcgQEAKIAkJCWZjZi0+ZmFicmljX25hbWUgPSBnZXRfdW5hbGlnbmVkX2JlNjQoJmZhYi0+ZmRfd3duKTsKIAkJCWZjZi0+dmZpZCA9IG50b2hzKGZhYi0+ZmRfdmZpZCk7CiAJCQlmY2YtPmZjX21hcCA9IG50b2gyNChmYWItPmZkX21hcCk7CisJCQlkZXNjX21hc2sgJj0gfkJJVChGSVBfRFRfRkFCKTsKIAkJCWJyZWFrOwogCQljYXNlIEZJUF9EVF9GS0E6CiAJCQlpZiAoZGxlbiAhPSBzaXplb2Yoc3RydWN0IGZpcF9ma2FfZGVzYykpCkBAIC02OTAsNiArODI0LDcgQEAKIAkJCXQgPSBudG9obChma2EtPmZkX2ZrYV9wZXJpb2QpOwogCQkJaWYgKHQgPj0gRkNPRV9DVExSX01JTl9GS0EpCiAJCQkJZmNmLT5ma2FfcGVyaW9kID0gbXNlY3NfdG9famlmZmllcyh0KTsKKwkJCWRlc2NfbWFzayAmPSB+QklUKEZJUF9EVF9GS0EpOwogCQkJYnJlYWs7CiAJCWNhc2UgRklQX0RUX01BUF9PVUk6CiAJCWNhc2UgRklQX0RUX0ZDT0VfU0laRToKQEAgLTcwMywxNSArODM4LDIwIEBACiAJCQkvKiBzdGFuZGFyZCBzYXlzIGlnbm9yZSB1bmtub3duIGRlc2NyaXB0b3JzID49IDEyOCAqLwogCQkJaWYgKGRlc2MtPmZpcF9kdHlwZSA8IEZJUF9EVF9WRU5ET1JfQkFTRSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWNvbnRpbnVlOworCQkJYnJlYWs7CiAJCX0KIAkJZGVzYyA9IChzdHJ1Y3QgZmlwX2Rlc2MgKikoKGNoYXIgKilkZXNjICsgZGxlbik7CiAJCXJsZW4gLT0gZGxlbjsKIAl9CiAJaWYgKCFmY2YtPmZjX21hcCB8fCAoZmNmLT5mY19tYXAgJiAweDEwMDAwKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCFmY2YtPnN3aXRjaF9uYW1lIHx8ICFmY2YtPmZhYnJpY19uYW1lKQorCWlmICghZmNmLT5zd2l0Y2hfbmFtZSkKIAkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRlc2NfbWFzaykgeworCQlMSUJGQ09FX0ZJUF9EQkcoZmlwLCAiYWR2IG1pc3NpbmcgZGVzY3JpcHRvcnMgbWFzayAleFxuIiwKKwkJCQlkZXNjX21hc2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJcmV0dXJuIDA7CiAKIGxlbl9lcnI6CkBAIC03MzcsNyArODc3LDcgQEAKIAlpZiAoZmNvZV9jdGxyX3BhcnNlX2FkdihmaXAsIHNrYiwgJm5ldykpCiAJCXJldHVybjsKIAotCXNwaW5fbG9ja19iaCgmZmlwLT5sb2NrKTsKKwltdXRleF9sb2NrKCZmaXAtPmN0bHJfbXV0ZXgpOwogCWZpcnN0ID0gbGlzdF9lbXB0eSgmZmlwLT5mY2ZzKTsKIAlmb3VuZCA9IE5VTEw7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShmY2YsICZmaXAtPmZjZnMsIGxpc3QpIHsKQEAgLTc2MiwxOCArOTAyLDIxIEBACiAJCWxpc3RfYWRkKCZmY2YtPmxpc3QsICZmaXAtPmZjZnMpOwogCX0gZWxzZSB7CiAJCS8qCi0JCSAqIEZsYWdzIGluIGFkdmVydGlzZW1lbnRzIGFyZSBpZ25vcmVkIG9uY2UgdGhlIEZDRiBpcwotCQkgKiBzZWxlY3RlZC4gIEZsYWdzIGluIHVuc29saWNpdGVkIGFkdmVydGlzZW1lbnRzIGFyZQotCQkgKiBpZ25vcmVkIGFmdGVyIGEgdXNhYmxlIHNvbGljaXRlZCBhZHZlcnRpc2VtZW50Ci0JCSAqIGhhcyBiZWVuIHJlY2VpdmVkLgorCQkgKiBVcGRhdGUgdGhlIEZDRidzIGtlZXAtYWxpdmUgZGVzY3JpcHRvciBmbGFncy4KKwkJICogT3RoZXIgZmxhZyBjaGFuZ2VzIGZyb20gbmV3IGFkdmVydGlzZW1lbnRzIGFyZQorCQkgKiBpZ25vcmVkIGFmdGVyIGEgc29saWNpdGVkIGFkdmVydGlzZW1lbnQgaXMKKwkJICogcmVjZWl2ZWQgYW5kIHRoZSBGQ0YgaXMgc2VsZWN0YWJsZSAodXNhYmxlKS4KIAkJICovCi0JCWlmIChmY2YgPT0gZmlwLT5zZWxfZmNmKSB7CisJCWZjZi0+ZmRfZmxhZ3MgPSBuZXcuZmRfZmxhZ3M7CisJCWlmICghZmNvZV9jdGxyX2ZjZl91c2FibGUoZmNmKSkKKwkJCWZjZi0+ZmxhZ3MgPSBuZXcuZmxhZ3M7CisKKwkJaWYgKGZjZiA9PSBmaXAtPnNlbF9mY2YgJiYgIWZjZi0+ZmRfZmxhZ3MpIHsKIAkJCWZpcC0+Y3Rscl9rYV90aW1lIC09IGZjZi0+ZmthX3BlcmlvZDsKIAkJCWZpcC0+Y3Rscl9rYV90aW1lICs9IG5ldy5ma2FfcGVyaW9kOwogCQkJaWYgKHRpbWVfYmVmb3JlKGZpcC0+Y3Rscl9rYV90aW1lLCBmaXAtPnRpbWVyLmV4cGlyZXMpKQogCQkJCW1vZF90aW1lcigmZmlwLT50aW1lciwgZmlwLT5jdGxyX2thX3RpbWUpOwotCQl9IGVsc2UgaWYgKCFmY29lX2N0bHJfZmNmX3VzYWJsZShmY2YpKQotCQkJZmNmLT5mbGFncyA9IG5ldy5mbGFnczsKKwkJfQogCQlmY2YtPmZrYV9wZXJpb2QgPSBuZXcuZmthX3BlcmlvZDsKIAkJbWVtY3B5KGZjZi0+ZmNmX21hYywgbmV3LmZjZl9tYWMsIEVUSF9BTEVOKTsKIAl9CkBAIC04MDUsNyArOTQ4LDcgQEAKIAkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCB2YWxpZGF0ZWQgRkNGLCBub3RlIHRoZSB0aW1lIGFuZAogCSAqIHNldCBhIHRpbWVyIHRvIHRyaWdnZXIgc2VsZWN0aW9uLgogCSAqLwotCWlmIChtdHVfdmFsaWQgJiYgIWZpcC0+c2VsX3RpbWUgJiYgZmNvZV9jdGxyX2ZjZl91c2FibGUoZmNmKSkgeworCWlmIChtdHVfdmFsaWQgJiYgIWZpcC0+c2VsX2ZjZiAmJiBmY29lX2N0bHJfZmNmX3VzYWJsZShmY2YpKSB7CiAJCWZpcC0+c2VsX3RpbWUgPSBqaWZmaWVzICsKIAkJCW1zZWNzX3RvX2ppZmZpZXMoRkNPRV9DVExSX1NUQVJUX0RFTEFZKTsKIAkJaWYgKCF0aW1lcl9wZW5kaW5nKCZmaXAtPnRpbWVyKSB8fApAQCAtODEzLDcgKzk1Niw3IEBACiAJCQltb2RfdGltZXIoJmZpcC0+dGltZXIsIGZpcC0+c2VsX3RpbWUpOwogCX0KIG91dDoKLQlzcGluX3VubG9ja19iaCgmZmlwLT5sb2NrKTsKKwltdXRleF91bmxvY2soJmZpcC0+Y3Rscl9tdXRleCk7CiB9CiAKIC8qKgpAQCAtODM3LDYgKzk4MCw4IEBACiAJc2l6ZV90IGVsc19sZW4gPSAwOwogCXNpemVfdCBybGVuOwogCXNpemVfdCBkbGVuOworCXUzMiBkZXNjX21hc2sgPSAwOworCXUzMiBkZXNjX2NudCA9IDA7CiAKIAlmaXBoID0gKHN0cnVjdCBmaXBfaGVhZGVyICopc2tiLT5kYXRhOwogCXN1YiA9IGZpcGgtPmZpcF9zdWJjb2RlOwpAQCAtODQ5LDI3ICs5OTQsNDIgQEAKIAogCWRlc2MgPSAoc3RydWN0IGZpcF9kZXNjICopKGZpcGggKyAxKTsKIAl3aGlsZSAocmxlbiA+IDApIHsKKwkJZGVzY19jbnQrKzsKIAkJZGxlbiA9IGRlc2MtPmZpcF9kbGVuICogRklQX0JQVzsKIAkJaWYgKGRsZW4gPCBzaXplb2YoKmRlc2MpIHx8IGRsZW4gPiBybGVuKQogCQkJZ290byBkcm9wOworCQkvKiBEcm9wIEVMUyBpZiB0aGVyZSBhcmUgZHVwbGljYXRlIGNyaXRpY2FsIGRlc2NyaXB0b3JzICovCisJCWlmIChkZXNjLT5maXBfZHR5cGUgPCAzMikgeworCQkJaWYgKGRlc2NfbWFzayAmIDFVIDw8IGRlc2MtPmZpcF9kdHlwZSkgeworCQkJCUxJQkZDT0VfRklQX0RCRyhmaXAsICJEdXBsaWNhdGUgQ3JpdGljYWwgIgorCQkJCQkJIkRlc2NyaXB0b3JzIGluIEZJUCBFTFNcbiIpOworCQkJCWdvdG8gZHJvcDsKKwkJCX0KKwkJCWRlc2NfbWFzayB8PSAoMSA8PCBkZXNjLT5maXBfZHR5cGUpOworCQl9CiAJCXN3aXRjaCAoZGVzYy0+ZmlwX2R0eXBlKSB7CiAJCWNhc2UgRklQX0RUX01BQzoKKwkJCWlmIChkZXNjX2NudCA9PSAxKSB7CisJCQkJTElCRkNPRV9GSVBfREJHKGZpcCwgIkZJUCBkZXNjcmlwdG9ycyAiCisJCQkJCQkicmVjZWl2ZWQgb3V0IG9mIG9yZGVyXG4iKTsKKwkJCQlnb3RvIGRyb3A7CisJCQl9CisKIAkJCWlmIChkbGVuICE9IHNpemVvZihzdHJ1Y3QgZmlwX21hY19kZXNjKSkKIAkJCQlnb3RvIGxlbl9lcnI7CiAJCQltZW1jcHkoZ3JhbnRlZF9tYWMsCiAJCQkgICAgICAgKChzdHJ1Y3QgZmlwX21hY19kZXNjICopZGVzYyktPmZkX21hYywKIAkJCSAgICAgICBFVEhfQUxFTik7Ci0JCQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZ3JhbnRlZF9tYWMpKSB7Ci0JCQkJTElCRkNPRV9GSVBfREJHKGZpcCwgIkludmFsaWQgTUFDIGFkZHJlc3MgIgotCQkJCQkJImluIEZJUCBFTFNcbiIpOwotCQkJCWdvdG8gZHJvcDsKLQkJCX0KLQkJCW1lbWNweShmcl9jYihmcCktPmdyYW50ZWRfbWFjLCBncmFudGVkX21hYywgRVRIX0FMRU4pOwogCQkJYnJlYWs7CiAJCWNhc2UgRklQX0RUX0ZMT0dJOgogCQljYXNlIEZJUF9EVF9GRElTQzoKIAkJY2FzZSBGSVBfRFRfTE9HTzoKIAkJY2FzZSBGSVBfRFRfRUxQOgorCQkJaWYgKGRlc2NfY250ICE9IDEpIHsKKwkJCQlMSUJGQ09FX0ZJUF9EQkcoZmlwLCAiRklQIGRlc2NyaXB0b3JzICIKKwkJCQkJCSJyZWNlaXZlZCBvdXQgb2Ygb3JkZXJcbiIpOworCQkJCWdvdG8gZHJvcDsKKwkJCX0KIAkJCWlmIChmaCkKIAkJCQlnb3RvIGRyb3A7CiAJCQlpZiAoZGxlbiA8IHNpemVvZigqZWxzKSArIHNpemVvZigqZmgpICsgMSkKQEAgLTg4NSw3ICsxMDQ1LDEyIEBACiAJCQkvKiBzdGFuZGFyZCBzYXlzIGlnbm9yZSB1bmtub3duIGRlc2NyaXB0b3JzID49IDEyOCAqLwogCQkJaWYgKGRlc2MtPmZpcF9kdHlwZSA8IEZJUF9EVF9WRU5ET1JfQkFTRSkKIAkJCQlnb3RvIGRyb3A7Ci0JCQljb250aW51ZTsKKwkJCWlmIChkZXNjX2NudCA8PSAyKSB7CisJCQkJTElCRkNPRV9GSVBfREJHKGZpcCwgIkZJUCBkZXNjcmlwdG9ycyAiCisJCQkJCQkicmVjZWl2ZWQgb3V0IG9mIG9yZGVyXG4iKTsKKwkJCQlnb3RvIGRyb3A7CisJCQl9CisJCQlicmVhazsKIAkJfQogCQlkZXNjID0gKHN0cnVjdCBmaXBfZGVzYyAqKSgoY2hhciAqKWRlc2MgKyBkbGVuKTsKIAkJcmxlbiAtPSBkbGVuOwpAQCAtODk1LDEwICsxMDYwLDI3IEBACiAJCWdvdG8gZHJvcDsKIAllbHNfb3AgPSAqKHU4ICopKGZoICsgMSk7CiAKLQlpZiAoZWxzX2R0eXBlID09IEZJUF9EVF9GTE9HSSAmJiBzdWIgPT0gRklQX1NDX1JFUCAmJgotCSAgICBmaXAtPmZsb2dpX294aWQgPT0gbnRvaHMoZmgtPmZoX294X2lkKSAmJgotCSAgICBlbHNfb3AgPT0gRUxTX0xTX0FDQyAmJiBpc192YWxpZF9ldGhlcl9hZGRyKGdyYW50ZWRfbWFjKSkKLQkJZmlwLT5mbG9naV9veGlkID0gRkNfWElEX1VOS05PV047CisJaWYgKChlbHNfZHR5cGUgPT0gRklQX0RUX0ZMT0dJIHx8IGVsc19kdHlwZSA9PSBGSVBfRFRfRkRJU0MpICYmCisJICAgIHN1YiA9PSBGSVBfU0NfUkVQICYmIGVsc19vcCA9PSBFTFNfTFNfQUNDICYmCisJICAgIGZpcC0+bW9kZSAhPSBGSVBfTU9ERV9WTjJWTikgeworCQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZ3JhbnRlZF9tYWMpKSB7CisJCQlMSUJGQ09FX0ZJUF9EQkcoZmlwLAorCQkJCSJJbnZhbGlkIE1BQyBhZGRyZXNzICVwTSBpbiBGSVAgRUxTXG4iLAorCQkJCWdyYW50ZWRfbWFjKTsKKwkJCWdvdG8gZHJvcDsKKwkJfQorCQltZW1jcHkoZnJfY2IoZnApLT5ncmFudGVkX21hYywgZ3JhbnRlZF9tYWMsIEVUSF9BTEVOKTsKKworCQlpZiAoZmlwLT5mbG9naV9veGlkID09IG50b2hzKGZoLT5maF9veF9pZCkpCisJCQlmaXAtPmZsb2dpX294aWQgPSBGQ19YSURfVU5LTk9XTjsKKwl9CisKKwlpZiAoKGRlc2NfY250ID09IDApIHx8ICgoZWxzX29wICE9IEVMU19MU19SSlQpICYmCisJICAgICghKDFVIDw8IEZJUF9EVF9NQUMgJiBkZXNjX21hc2spKSkpIHsKKwkJTElCRkNPRV9GSVBfREJHKGZpcCwgIk1pc3NpbmcgY3JpdGljYWwgZGVzY3JpcHRvcnMgIgorCQkJCSJpbiBGSVAgRUxTXG4iKTsKKwkJZ290byBkcm9wOworCX0KIAogCS8qCiAJICogQ29udmVydCBza2IgaW50byBhbiBmY19mcmFtZSBjb250YWluaW5nIG9ubHkgdGhlIEVMUy4KQEAgLTkxMCw2ICsxMDkyLDcgQEAKIAlmcl9zb2YoZnApID0gRkNfU09GX0kzOwogCWZyX2VvZihmcCkgPSBGQ19FT0ZfVDsKIAlmcl9kZXYoZnApID0gbHBvcnQ7CisJZnJfZW5jYXBzKGZwKSA9IGVsc19kdHlwZTsKIAogCXN0YXRzID0gcGVyX2NwdV9wdHIobHBvcnQtPmRldl9zdGF0cywgZ2V0X2NwdSgpKTsKIAlzdGF0cy0+UnhGcmFtZXMrKzsKQEAgLTk0NSw3ICsxMTI4LDkgQEAKIAlzaXplX3QgZGxlbjsKIAlzdHJ1Y3QgZmNvZV9mY2YgKmZjZiA9IGZpcC0+c2VsX2ZjZjsKIAlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gZmlwLT5scDsKLQl1MzIJZGVzY19tYXNrOworCXN0cnVjdCBmY19scG9ydCAqdm5fcG9ydCA9IE5VTEw7CisJdTMyIGRlc2NfbWFzazsKKwlpbnQgaXNfdm5fcG9ydCA9IDA7CiAKIAlMSUJGQ09FX0ZJUF9EQkcoZmlwLCAiQ2xlYXIgVmlydHVhbCBMaW5rIHJlY2VpdmVkXG4iKTsKIApAQCAtOTYzLDYgKzExNDgsMTMgQEAKIAkJZGxlbiA9IGRlc2MtPmZpcF9kbGVuICogRklQX0JQVzsKIAkJaWYgKGRsZW4gPiBybGVuKQogCQkJcmV0dXJuOworCQkvKiBEcm9wIENWTCBpZiB0aGVyZSBhcmUgZHVwbGljYXRlIGNyaXRpY2FsIGRlc2NyaXB0b3JzICovCisJCWlmICgoZGVzYy0+ZmlwX2R0eXBlIDwgMzIpICYmCisJCSAgICAhKGRlc2NfbWFzayAmIDFVIDw8IGRlc2MtPmZpcF9kdHlwZSkpIHsKKwkJCUxJQkZDT0VfRklQX0RCRyhmaXAsICJEdXBsaWNhdGUgQ3JpdGljYWwgIgorCQkJCQkiRGVzY3JpcHRvcnMgaW4gRklQIENWTFxuIik7CisJCQlyZXR1cm47CisJCX0KIAkJc3dpdGNoIChkZXNjLT5maXBfZHR5cGUpIHsKIAkJY2FzZSBGSVBfRFRfTUFDOgogCQkJbXAgPSAoc3RydWN0IGZpcF9tYWNfZGVzYyAqKWRlc2M7CkBAIC05ODcsOCArMTE3OSwyNiBAQAogCQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcih2cC0+ZmRfbWFjLAogCQkJCQkgICAgICAgZmlwLT5nZXRfc3JjX2FkZHIobHBvcnQpKSA9PSAwICYmCiAJCQkgICAgZ2V0X3VuYWxpZ25lZF9iZTY0KCZ2cC0+ZmRfd3dwbikgPT0gbHBvcnQtPnd3cG4gJiYKLQkJCSAgICBudG9oMjQodnAtPmZkX2ZjX2lkKSA9PSBscG9ydC0+cG9ydF9pZCkKKwkJCSAgICBudG9oMjQodnAtPmZkX2ZjX2lkKSA9PSBscG9ydC0+cG9ydF9pZCkgewogCQkJCWRlc2NfbWFzayAmPSB+QklUKEZJUF9EVF9WTl9JRCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBjaGVjayBpZiBjbHJfdmxpbmsgaXMgZm9yIE5QSVYgcG9ydCAqLworCQkJbXV0ZXhfbG9jaygmbHBvcnQtPmxwX211dGV4KTsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkodm5fcG9ydCwgJmxwb3J0LT52cG9ydHMsIGxpc3QpIHsKKwkJCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKHZwLT5mZF9tYWMsCisJCQkJICAgIGZpcC0+Z2V0X3NyY19hZGRyKHZuX3BvcnQpKSA9PSAwICYmCisJCQkJICAgIChnZXRfdW5hbGlnbmVkX2JlNjQoJnZwLT5mZF93d3BuKQorCQkJCQkJCT09IHZuX3BvcnQtPnd3cG4pICYmCisJCQkJICAgIChudG9oMjQodnAtPmZkX2ZjX2lkKSA9PQorCQkJCQkgICAgZmNfaG9zdF9wb3J0X2lkKHZuX3BvcnQtPmhvc3QpKSkgeworCQkJCQlkZXNjX21hc2sgJj0gfkJJVChGSVBfRFRfVk5fSUQpOworCQkJCQlpc192bl9wb3J0ID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJbXV0ZXhfdW5sb2NrKCZscG9ydC0+bHBfbXV0ZXgpOworCiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCS8qIHN0YW5kYXJkIHNheXMgaWdub3JlIHVua25vd24gZGVzY3JpcHRvcnMgPj0gMTI4ICovCkBAIC0xMDA5LDE0ICsxMjE5LDE5IEBACiAJfSBlbHNlIHsKIAkJTElCRkNPRV9GSVBfREJHKGZpcCwgInBlcmZvcm1pbmcgQ2xlYXIgVmlydHVhbCBMaW5rXG4iKTsKIAotCQlzcGluX2xvY2tfYmgoJmZpcC0+bG9jayk7Ci0JCXBlcl9jcHVfcHRyKGxwb3J0LT5kZXZfc3RhdHMsCi0JCQkgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKS0+VkxpbmtGYWlsdXJlQ291bnQrKzsKLQkJZmNvZV9jdGxyX3Jlc2V0KGZpcCk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZmaXAtPmxvY2spOworCQlpZiAoaXNfdm5fcG9ydCkKKwkJCWZjX2xwb3J0X3Jlc2V0KHZuX3BvcnQpOworCQllbHNlIHsKKwkJCW11dGV4X2xvY2soJmZpcC0+Y3Rscl9tdXRleCk7CisJCQlwZXJfY3B1X3B0cihscG9ydC0+ZGV2X3N0YXRzLAorCQkJCSAgICBnZXRfY3B1KCkpLT5WTGlua0ZhaWx1cmVDb3VudCsrOworCQkJcHV0X2NwdSgpOworCQkJZmNvZV9jdGxyX3Jlc2V0KGZpcCk7CisJCQltdXRleF91bmxvY2soJmZpcC0+Y3Rscl9tdXRleCk7CiAKLQkJZmNfbHBvcnRfcmVzZXQoZmlwLT5scCk7Ci0JCWZjb2VfY3Rscl9zb2xpY2l0KGZpcCwgTlVMTCk7CisJCQlmY19scG9ydF9yZXNldChmaXAtPmxwKTsKKwkJCWZjb2VfY3Rscl9zb2xpY2l0KGZpcCwgTlVMTCk7CisJCX0KIAl9CiB9CiAKQEAgLTEwNTQsOCArMTI2OSwxMyBAQAogCWlmIChza2ItPmxlbiA8IHNpemVvZigqZmlwaCkpCiAJCWdvdG8gZHJvcDsKIAllaCA9IGV0aF9oZHIoc2tiKTsKLQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGVoLT5oX2Rlc3QsIGZpcC0+Y3RsX3NyY19hZGRyKSAmJgotCSAgICBjb21wYXJlX2V0aGVyX2FkZHIoZWgtPmhfZGVzdCwgRklQX0FMTF9FTk9ERV9NQUNTKSkKKwlpZiAoZmlwLT5tb2RlID09IEZJUF9NT0RFX1ZOMlZOKSB7CisJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoZWgtPmhfZGVzdCwgZmlwLT5jdGxfc3JjX2FkZHIpICYmCisJCSAgICBjb21wYXJlX2V0aGVyX2FkZHIoZWgtPmhfZGVzdCwgZmNvZV9hbGxfdm4ydm4pICYmCisJCSAgICBjb21wYXJlX2V0aGVyX2FkZHIoZWgtPmhfZGVzdCwgZmNvZV9hbGxfcDJwKSkKKwkJCWdvdG8gZHJvcDsKKwl9IGVsc2UgaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihlaC0+aF9kZXN0LCBmaXAtPmN0bF9zcmNfYWRkcikgJiYKKwkJICAgY29tcGFyZV9ldGhlcl9hZGRyKGVoLT5oX2Rlc3QsIGZjb2VfYWxsX2Vub2RlKSkKIAkJZ290byBkcm9wOwogCWZpcGggPSAoc3RydWN0IGZpcF9oZWFkZXIgKilza2ItPmRhdGE7CiAJb3AgPSBudG9ocyhmaXBoLT5maXBfb3ApOwpAQCAtMTA2NiwyMiArMTI4NiwzMSBAQAogCWlmIChudG9ocyhmaXBoLT5maXBfZGxfbGVuKSAqIEZJUF9CUFcgKyBzaXplb2YoKmZpcGgpID4gc2tiLT5sZW4pCiAJCWdvdG8gZHJvcDsKIAotCXNwaW5fbG9ja19iaCgmZmlwLT5sb2NrKTsKKwltdXRleF9sb2NrKCZmaXAtPmN0bHJfbXV0ZXgpOwogCXN0YXRlID0gZmlwLT5zdGF0ZTsKIAlpZiAoc3RhdGUgPT0gRklQX1NUX0FVVE8pIHsKIAkJZmlwLT5tYXBfZGVzdCA9IDA7Ci0JCWZpcC0+c3RhdGUgPSBGSVBfU1RfRU5BQkxFRDsKKwkJZmNvZV9jdGxyX3NldF9zdGF0ZShmaXAsIEZJUF9TVF9FTkFCTEVEKTsKIAkJc3RhdGUgPSBGSVBfU1RfRU5BQkxFRDsKIAkJTElCRkNPRV9GSVBfREJHKGZpcCwgIlVzaW5nIEZJUCBtb2RlXG4iKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJmZpcC0+bG9jayk7Ci0JaWYgKHN0YXRlICE9IEZJUF9TVF9FTkFCTEVEKQorCW11dGV4X3VubG9jaygmZmlwLT5jdGxyX211dGV4KTsKKworCWlmIChmaXAtPm1vZGUgPT0gRklQX01PREVfVk4yVk4gJiYgb3AgPT0gRklQX09QX1ZOMlZOKQorCQlyZXR1cm4gZmNvZV9jdGxyX3ZuX3JlY3YoZmlwLCBza2IpOworCisJaWYgKHN0YXRlICE9IEZJUF9TVF9FTkFCTEVEICYmIHN0YXRlICE9IEZJUF9TVF9WTk1QX1VQICYmCisJICAgIHN0YXRlICE9IEZJUF9TVF9WTk1QX0NMQUlNKQogCQlnb3RvIGRyb3A7CiAKIAlpZiAob3AgPT0gRklQX09QX0xTKSB7CiAJCWZjb2VfY3Rscl9yZWN2X2VscyhmaXAsIHNrYik7CS8qIGNvbnN1bWVzIHNrYiAqLwogCQlyZXR1cm4gMDsKIAl9CisKKwlpZiAoc3RhdGUgIT0gRklQX1NUX0VOQUJMRUQpCisJCWdvdG8gZHJvcDsKKwogCWlmIChvcCA9PSBGSVBfT1BfRElTQyAmJiBzdWIgPT0gRklQX1NDX0FEVikKIAkJZmNvZV9jdGxyX3JlY3ZfYWR2KGZpcCwgc2tiKTsKIAllbHNlIGlmIChvcCA9PSBGSVBfT1BfQ1RSTCAmJiBzdWIgPT0gRklQX1NDX0NMUl9WTElOSykKQEAgLTExNDAsMzAgKzEzNjksNTMgQEAKIC8qKgogICogZmNvZV9jdGxyX3RpbWVvdXQoKSAtIEZJUCB0aW1lb3V0IGhhbmRsZXIKICAqIEBhcmc6IFRoZSBGQ29FIGNvbnRyb2xsZXIgdGhhdCB0aW1lZCBvdXQKLSAqCi0gKiBBZ2VzIEZDRnMuICBUcmlnZ2VycyBGQ0Ygc2VsZWN0aW9uIGlmIHBvc3NpYmxlLiAgU2VuZHMga2VlcC1hbGl2ZXMuCiAgKi8KIHN0YXRpYyB2b2lkIGZjb2VfY3Rscl90aW1lb3V0KHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBmY29lX2N0bHIgKmZpcCA9IChzdHJ1Y3QgZmNvZV9jdGxyICopYXJnOworCisJc2NoZWR1bGVfd29yaygmZmlwLT50aW1lcl93b3JrKTsKK30KKworLyoqCisgKiBmY29lX2N0bHJfdGltZXJfd29yaygpIC0gV29ya2VyIHRocmVhZCBmdW5jdGlvbiBmb3IgdGltZXIgd29yaworICogQHdvcms6IEhhbmRsZSB0byBhIEZDb0UgY29udHJvbGxlcgorICoKKyAqIEFnZXMgRkNGcy4gIFRyaWdnZXJzIEZDRiBzZWxlY3Rpb24gaWYgcG9zc2libGUuCisgKiBTZW5kcyBrZWVwLWFsaXZlcyBhbmQgcmVzZXRzLgorICovCitzdGF0aWMgdm9pZCBmY29lX2N0bHJfdGltZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGZjb2VfY3RsciAqZmlwOworCXN0cnVjdCBmY19scG9ydCAqdnBvcnQ7CisJdTggKm1hYzsKKwl1OCByZXNldCA9IDA7CisJdTggc2VuZF9jdGxyX2thID0gMDsKKwl1OCBzZW5kX3BvcnRfa2EgPSAwOwogCXN0cnVjdCBmY29lX2ZjZiAqc2VsOwogCXN0cnVjdCBmY29lX2ZjZiAqZmNmOwotCXVuc2lnbmVkIGxvbmcgbmV4dF90aW1lciA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEZJUF9WTl9LQV9QRVJJT0QpOworCXVuc2lnbmVkIGxvbmcgbmV4dF90aW1lcjsKIAotCXNwaW5fbG9ja19iaCgmZmlwLT5sb2NrKTsKKwlmaXAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGZjb2VfY3RsciwgdGltZXJfd29yayk7CisJaWYgKGZpcC0+bW9kZSA9PSBGSVBfTU9ERV9WTjJWTikKKwkJcmV0dXJuIGZjb2VfY3Rscl92bl90aW1lb3V0KGZpcCk7CisJbXV0ZXhfbG9jaygmZmlwLT5jdGxyX211dGV4KTsKIAlpZiAoZmlwLT5zdGF0ZSA9PSBGSVBfU1RfRElTQUJMRUQpIHsKLQkJc3Bpbl91bmxvY2tfYmgoJmZpcC0+bG9jayk7CisJCW11dGV4X3VubG9jaygmZmlwLT5jdGxyX211dGV4KTsKIAkJcmV0dXJuOwogCX0KIAogCWZjZiA9IGZpcC0+c2VsX2ZjZjsKLQlmY29lX2N0bHJfYWdlX2ZjZnMoZmlwKTsKKwluZXh0X3RpbWVyID0gZmNvZV9jdGxyX2FnZV9mY2ZzKGZpcCk7CiAKIAlzZWwgPSBmaXAtPnNlbF9mY2Y7Ci0JaWYgKCFzZWwgJiYgZmlwLT5zZWxfdGltZSAmJiB0aW1lX2FmdGVyX2VxKGppZmZpZXMsIGZpcC0+c2VsX3RpbWUpKSB7Ci0JCWZjb2VfY3Rscl9zZWxlY3QoZmlwKTsKLQkJc2VsID0gZmlwLT5zZWxfZmNmOwotCQlmaXAtPnNlbF90aW1lID0gMDsKKwlpZiAoIXNlbCAmJiBmaXAtPnNlbF90aW1lKSB7CisJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIGZpcC0+c2VsX3RpbWUpKSB7CisJCQlmY29lX2N0bHJfc2VsZWN0KGZpcCk7CisJCQlzZWwgPSBmaXAtPnNlbF9mY2Y7CisJCQlmaXAtPnNlbF90aW1lID0gMDsKKwkJfSBlbHNlIGlmICh0aW1lX2FmdGVyKG5leHRfdGltZXIsIGZpcC0+c2VsX3RpbWUpKQorCQkJbmV4dF90aW1lciA9IGZpcC0+c2VsX3RpbWU7CiAJfQogCiAJaWYgKHNlbCAhPSBmY2YpIHsKQEAgLTExNzMsMjMgKzE0MjUsMjUgQEAKIAkJCSAgICAgICAiRmlicmUtQ2hhbm5lbCBGb3J3YXJkZXIgTUFDICVwTVxuIiwKIAkJCSAgICAgICBmaXAtPmxwLT5ob3N0LT5ob3N0X25vLCBzZWwtPmZjZl9tYWMpOwogCQkJbWVtY3B5KGZpcC0+ZGVzdF9hZGRyLCBzZWwtPmZjZl9tYWMsIEVUSF9BTEVOKTsKKwkJCWZpcC0+bWFwX2Rlc3QgPSAwOwogCQkJZmlwLT5wb3J0X2thX3RpbWUgPSBqaWZmaWVzICsKIAkJCQltc2Vjc190b19qaWZmaWVzKEZJUF9WTl9LQV9QRVJJT0QpOwogCQkJZmlwLT5jdGxyX2thX3RpbWUgPSBqaWZmaWVzICsgc2VsLT5ma2FfcGVyaW9kOworCQkJaWYgKHRpbWVfYWZ0ZXIobmV4dF90aW1lciwgZmlwLT5jdGxyX2thX3RpbWUpKQorCQkJCW5leHRfdGltZXIgPSBmaXAtPmN0bHJfa2FfdGltZTsKIAkJfSBlbHNlIHsKIAkJCXByaW50ayhLRVJOX05PVElDRSAibGliZmNvZTogaG9zdCVkOiAiCiAJCQkgICAgICAgIkZJUCBGaWJyZS1DaGFubmVsIEZvcndhcmRlciB0aW1lZCBvdXQuCSIKIAkJCSAgICAgICAiU3RhcnRpbmcgRkNGIGRpc2NvdmVyeS5cbiIsCiAJCQkgICAgICAgZmlwLT5scC0+aG9zdC0+aG9zdF9ubyk7Ci0JCQlmaXAtPnJlc2V0X3JlcSA9IDE7Ci0JCQlzY2hlZHVsZV93b3JrKCZmaXAtPnRpbWVyX3dvcmspOworCQkJcmVzZXQgPSAxOwogCQl9CiAJfQogCiAJaWYgKHNlbCAmJiAhc2VsLT5mZF9mbGFncykgewogCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBmaXAtPmN0bHJfa2FfdGltZSkpIHsKIAkJCWZpcC0+Y3Rscl9rYV90aW1lID0gamlmZmllcyArIHNlbC0+ZmthX3BlcmlvZDsKLQkJCWZpcC0+c2VuZF9jdGxyX2thID0gMTsKKwkJCXNlbmRfY3Rscl9rYSA9IDE7CiAJCX0KIAkJaWYgKHRpbWVfYWZ0ZXIobmV4dF90aW1lciwgZmlwLT5jdGxyX2thX3RpbWUpKQogCQkJbmV4dF90aW1lciA9IGZpcC0+Y3Rscl9rYV90aW1lOwpAQCAtMTE5Nyw1MCArMTQ1MSwyNSBAQAogCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBmaXAtPnBvcnRfa2FfdGltZSkpIHsKIAkJCWZpcC0+cG9ydF9rYV90aW1lID0gamlmZmllcyArCiAJCQkJbXNlY3NfdG9famlmZmllcyhGSVBfVk5fS0FfUEVSSU9EKTsKLQkJCWZpcC0+c2VuZF9wb3J0X2thID0gMTsKKwkJCXNlbmRfcG9ydF9rYSA9IDE7CiAJCX0KIAkJaWYgKHRpbWVfYWZ0ZXIobmV4dF90aW1lciwgZmlwLT5wb3J0X2thX3RpbWUpKQogCQkJbmV4dF90aW1lciA9IGZpcC0+cG9ydF9rYV90aW1lOwotCQltb2RfdGltZXIoJmZpcC0+dGltZXIsIG5leHRfdGltZXIpOwotCX0gZWxzZSBpZiAoZmlwLT5zZWxfdGltZSkgewotCQluZXh0X3RpbWVyID0gZmlwLT5zZWxfdGltZSArCi0JCQltc2Vjc190b19qaWZmaWVzKEZDT0VfQ1RMUl9TVEFSVF9ERUxBWSk7Ci0JCW1vZF90aW1lcigmZmlwLT50aW1lciwgbmV4dF90aW1lcik7CiAJfQotCWlmIChmaXAtPnNlbmRfY3Rscl9rYSB8fCBmaXAtPnNlbmRfcG9ydF9rYSkKLQkJc2NoZWR1bGVfd29yaygmZmlwLT50aW1lcl93b3JrKTsKLQlzcGluX3VubG9ja19iaCgmZmlwLT5sb2NrKTsKLX0KKwlpZiAoIWxpc3RfZW1wdHkoJmZpcC0+ZmNmcykpCisJCW1vZF90aW1lcigmZmlwLT50aW1lciwgbmV4dF90aW1lcik7CisJbXV0ZXhfdW5sb2NrKCZmaXAtPmN0bHJfbXV0ZXgpOwogCi0vKioKLSAqIGZjb2VfY3Rscl90aW1lcl93b3JrKCkgLSBXb3JrZXIgdGhyZWFkIGZ1bmN0aW9uIGZvciB0aW1lciB3b3JrCi0gKiBAd29yazogSGFuZGxlIHRvIGEgRkNvRSBjb250cm9sbGVyCi0gKgotICogU2VuZHMga2VlcC1hbGl2ZXMgYW5kIHJlc2V0cyB3aGljaCBtdXN0IG5vdAotICogYmUgY2FsbGVkIGZyb20gdGhlIHRpbWVyIGRpcmVjdGx5LCBzaW5jZSB0aGV5IHVzZSBhIG11dGV4LgotICovCi1zdGF0aWMgdm9pZCBmY29lX2N0bHJfdGltZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGZjb2VfY3RsciAqZmlwOwotCXN0cnVjdCBmY19scG9ydCAqdnBvcnQ7Ci0JdTggKm1hYzsKLQlpbnQgcmVzZXQ7Ci0KLQlmaXAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGZjb2VfY3RsciwgdGltZXJfd29yayk7Ci0Jc3Bpbl9sb2NrX2JoKCZmaXAtPmxvY2spOwotCXJlc2V0ID0gZmlwLT5yZXNldF9yZXE7Ci0JZmlwLT5yZXNldF9yZXEgPSAwOwotCXNwaW5fdW5sb2NrX2JoKCZmaXAtPmxvY2spOwotCi0JaWYgKHJlc2V0KQorCWlmIChyZXNldCkgewogCQlmY19scG9ydF9yZXNldChmaXAtPmxwKTsKLQotCWlmIChmaXAtPnNlbmRfY3Rscl9rYSkgewotCQlmaXAtPnNlbmRfY3Rscl9rYSA9IDA7Ci0JCWZjb2VfY3Rscl9zZW5kX2tlZXBfYWxpdmUoZmlwLCBOVUxMLCAwLCBmaXAtPmN0bF9zcmNfYWRkcik7CisJCS8qIHJlc3RhcnQgdGhpbmdzIHdpdGggYSBzb2xpY2l0YXRpb24gKi8KKwkJZmNvZV9jdGxyX3NvbGljaXQoZmlwLCBOVUxMKTsKIAl9Ci0JaWYgKGZpcC0+c2VuZF9wb3J0X2thKSB7Ci0JCWZpcC0+c2VuZF9wb3J0X2thID0gMDsKKworCWlmIChzZW5kX2N0bHJfa2EpCisJCWZjb2VfY3Rscl9zZW5kX2tlZXBfYWxpdmUoZmlwLCBOVUxMLCAwLCBmaXAtPmN0bF9zcmNfYWRkcik7CisKKwlpZiAoc2VuZF9wb3J0X2thKSB7CiAJCW11dGV4X2xvY2soJmZpcC0+bHAtPmxwX211dGV4KTsKIAkJbWFjID0gZmlwLT5nZXRfc3JjX2FkZHIoZmlwLT5scCk7CiAJCWZjb2VfY3Rscl9zZW5kX2tlZXBfYWxpdmUoZmlwLCBmaXAtPmxwLCAxLCBtYWMpOwpAQCAtMTI5NywxMiArMTUyNiwxMiBAQAogCWlmIChvcCA9PSBFTFNfTFNfQUNDICYmIGZoLT5maF9yX2N0bCA9PSBGQ19SQ1RMX0VMU19SRVAgJiYKIAkgICAgZmlwLT5mbG9naV9veGlkID09IG50b2hzKGZoLT5maF9veF9pZCkpIHsKIAotCQlzcGluX2xvY2tfYmgoJmZpcC0+bG9jayk7CisJCW11dGV4X2xvY2soJmZpcC0+Y3Rscl9tdXRleCk7CiAJCWlmIChmaXAtPnN0YXRlICE9IEZJUF9TVF9BVVRPICYmIGZpcC0+c3RhdGUgIT0gRklQX1NUX05PTl9GSVApIHsKLQkJCXNwaW5fdW5sb2NrX2JoKCZmaXAtPmxvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZmaXAtPmN0bHJfbXV0ZXgpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJZmlwLT5zdGF0ZSA9IEZJUF9TVF9OT05fRklQOworCQlmY29lX2N0bHJfc2V0X3N0YXRlKGZpcCwgRklQX1NUX05PTl9GSVApOwogCQlMSUJGQ09FX0ZJUF9EQkcoZmlwLAogCQkJCSJyZWNlaXZlZCBGTE9HSSBMU19BQ0MgdXNpbmcgbm9uLUZJUCBtb2RlXG4iKTsKIApAQCAtMTMxMywyOCArMTU0MiwyOCBAQAogCQkgKiBPdGhlcndpc2Ugd2UgdXNlIHRoZSBGQ29FIGdhdGV3YXkgYWRkcgogCQkgKi8KIAkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIoc2EsICh1OFs2XSlGQ19GQ09FX0ZMT0dJX01BQykpIHsKLQkJCWZpcC0+bWFwX2Rlc3QgPSAxOworCQkJZmNvZV9jdGxyX21hcF9kZXN0KGZpcCk7CiAJCX0gZWxzZSB7CiAJCQltZW1jcHkoZmlwLT5kZXN0X2FkZHIsIHNhLCBFVEhfQUxFTik7CiAJCQlmaXAtPm1hcF9kZXN0ID0gMDsKIAkJfQogCQlmaXAtPmZsb2dpX294aWQgPSBGQ19YSURfVU5LTk9XTjsKLQkJc3Bpbl91bmxvY2tfYmgoJmZpcC0+bG9jayk7CisJCW11dGV4X3VubG9jaygmZmlwLT5jdGxyX211dGV4KTsKIAkJZmNfZmNvZV9zZXRfbWFjKGZyX2NiKGZwKS0+Z3JhbnRlZF9tYWMsIGZoLT5maF9kX2lkKTsKIAl9IGVsc2UgaWYgKG9wID09IEVMU19GTE9HSSAmJiBmaC0+Zmhfcl9jdGwgPT0gRkNfUkNUTF9FTFNfUkVRICYmIHNhKSB7CiAJCS8qCiAJCSAqIFNhdmUgc291cmNlIE1BQyBmb3IgcG9pbnQtdG8tcG9pbnQgcmVzcG9uc2VzLgogCQkgKi8KLQkJc3Bpbl9sb2NrX2JoKCZmaXAtPmxvY2spOworCQltdXRleF9sb2NrKCZmaXAtPmN0bHJfbXV0ZXgpOwogCQlpZiAoZmlwLT5zdGF0ZSA9PSBGSVBfU1RfQVVUTyB8fCBmaXAtPnN0YXRlID09IEZJUF9TVF9OT05fRklQKSB7CiAJCQltZW1jcHkoZmlwLT5kZXN0X2FkZHIsIHNhLCBFVEhfQUxFTik7CiAJCQlmaXAtPm1hcF9kZXN0ID0gMDsKIAkJCWlmIChmaXAtPnN0YXRlID09IEZJUF9TVF9BVVRPKQogCQkJCUxJQkZDT0VfRklQX0RCRyhmaXAsICJyZWNlaXZlZCBub24tRklQIEZMT0dJLiAiCiAJCQkJCQkiU2V0dGluZyBub24tRklQIG1vZGVcbiIpOwotCQkJZmlwLT5zdGF0ZSA9IEZJUF9TVF9OT05fRklQOworCQkJZmNvZV9jdGxyX3NldF9zdGF0ZShmaXAsIEZJUF9TVF9OT05fRklQKTsKIAkJfQotCQlzcGluX3VubG9ja19iaCgmZmlwLT5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZmaXAtPmN0bHJfbXV0ZXgpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTEzODIsMjYgKzE2MTEsOTE2IEBACiBFWFBPUlRfU1lNQk9MX0dQTChmY29lX3d3bl9mcm9tX21hYyk7CiAKIC8qKgorICogZmNvZV9jdGxyX3Jwb3J0KCkgLSByZXR1cm4gdGhlIGZjb2VfcnBvcnQgZm9yIGEgZ2l2ZW4gZmNfcnBvcnRfcHJpdgorICogQHJkYXRhOiBsaWJmYyByZW1vdGUgcG9ydAorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBmY29lX3Jwb3J0ICpmY29lX2N0bHJfcnBvcnQoc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhKQoreworCXJldHVybiAoc3RydWN0IGZjb2VfcnBvcnQgKikocmRhdGEgKyAxKTsKK30KKworLyoqCisgKiBmY29lX2N0bHJfdm5fc2VuZCgpIC0gU2VuZCBhIEZJUCBWTjJWTiBQcm9iZSBSZXF1ZXN0IG9yIFJlcGx5LgorICogQGZpcDogVGhlIEZDb0UgY29udHJvbGxlcgorICogQHN1Yjogc3ViLW9wY29kZSBmb3IgcHJvYmUgcmVxdWVzdCwgcmVwbHksIG9yIGFkdmVydGlzZW1lbnQuCisgKiBAZGVzdDogVGhlIGRlc3RpbmF0aW9uIEV0aGVybmV0IE1BQyBhZGRyZXNzCisgKiBAbWluX2xlbjogbWluaW11bSBzaXplIG9mIHRoZSBFdGhlcm5ldCBwYXlsb2FkIHRvIGJlIHNlbnQKKyAqLworc3RhdGljIHZvaWQgZmNvZV9jdGxyX3ZuX3NlbmQoc3RydWN0IGZjb2VfY3RsciAqZmlwLAorCQkJICAgICAgZW51bSBmaXBfdm4ydm5fc3ViY29kZSBzdWIsCisJCQkgICAgICBjb25zdCB1OCAqZGVzdCwgc2l6ZV90IG1pbl9sZW4pCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgZmlwX2ZyYW1lIHsKKwkJc3RydWN0IGV0aGhkciBldGg7CisJCXN0cnVjdCBmaXBfaGVhZGVyIGZpcDsKKwkJc3RydWN0IGZpcF9tYWNfZGVzYyBtYWM7CisJCXN0cnVjdCBmaXBfd3duX2Rlc2Mgd3dubjsKKwkJc3RydWN0IGZpcF92bl9kZXNjIHZuOworCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgKmZyYW1lOworCXN0cnVjdCBmaXBfZmM0X2ZlYXQgKmZmOworCXN0cnVjdCBmaXBfc2l6ZV9kZXNjICpzaXplOworCXUzMiBmY3BfZmVhdDsKKwlzaXplX3QgbGVuOworCXNpemVfdCBkbGVuOworCisJbGVuID0gc2l6ZW9mKCpmcmFtZSk7CisJZGxlbiA9IDA7CisJaWYgKHN1YiA9PSBGSVBfU0NfVk5fQ0xBSU1fTk9USUZZIHx8IHN1YiA9PSBGSVBfU0NfVk5fQ0xBSU1fUkVQKSB7CisJCWRsZW4gPSBzaXplb2Yoc3RydWN0IGZpcF9mYzRfZmVhdCkgKworCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBmaXBfc2l6ZV9kZXNjKTsKKwkJbGVuICs9IGRsZW47CisJfQorCWRsZW4gKz0gc2l6ZW9mKGZyYW1lLT5tYWMpICsgc2l6ZW9mKGZyYW1lLT53d25uKSArIHNpemVvZihmcmFtZS0+dm4pOworCWxlbiA9IG1heChsZW4sIG1pbl9sZW4gKyBzaXplb2Yoc3RydWN0IGV0aGhkcikpOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihsZW4pOworCWlmICghc2tiKQorCQlyZXR1cm47CisKKwlmcmFtZSA9IChzdHJ1Y3QgZmlwX2ZyYW1lICopc2tiLT5kYXRhOworCW1lbXNldChmcmFtZSwgMCwgbGVuKTsKKwltZW1jcHkoZnJhbWUtPmV0aC5oX2Rlc3QsIGRlc3QsIEVUSF9BTEVOKTsKKwltZW1jcHkoZnJhbWUtPmV0aC5oX3NvdXJjZSwgZmlwLT5jdGxfc3JjX2FkZHIsIEVUSF9BTEVOKTsKKwlmcmFtZS0+ZXRoLmhfcHJvdG8gPSBodG9ucyhFVEhfUF9GSVApOworCisJZnJhbWUtPmZpcC5maXBfdmVyID0gRklQX1ZFUl9FTkNBUFMoRklQX1ZFUik7CisJZnJhbWUtPmZpcC5maXBfb3AgPSBodG9ucyhGSVBfT1BfVk4yVk4pOworCWZyYW1lLT5maXAuZmlwX3N1YmNvZGUgPSBzdWI7CisJZnJhbWUtPmZpcC5maXBfZGxfbGVuID0gaHRvbnMoZGxlbiAvIEZJUF9CUFcpOworCisJZnJhbWUtPm1hYy5mZF9kZXNjLmZpcF9kdHlwZSA9IEZJUF9EVF9NQUM7CisJZnJhbWUtPm1hYy5mZF9kZXNjLmZpcF9kbGVuID0gc2l6ZW9mKGZyYW1lLT5tYWMpIC8gRklQX0JQVzsKKwltZW1jcHkoZnJhbWUtPm1hYy5mZF9tYWMsIGZpcC0+Y3RsX3NyY19hZGRyLCBFVEhfQUxFTik7CisKKwlmcmFtZS0+d3dubi5mZF9kZXNjLmZpcF9kdHlwZSA9IEZJUF9EVF9OQU1FOworCWZyYW1lLT53d25uLmZkX2Rlc2MuZmlwX2RsZW4gPSBzaXplb2YoZnJhbWUtPnd3bm4pIC8gRklQX0JQVzsKKwlwdXRfdW5hbGlnbmVkX2JlNjQoZmlwLT5scC0+d3dubiwgJmZyYW1lLT53d25uLmZkX3d3bik7CisKKwlmcmFtZS0+dm4uZmRfZGVzYy5maXBfZHR5cGUgPSBGSVBfRFRfVk5fSUQ7CisJZnJhbWUtPnZuLmZkX2Rlc2MuZmlwX2RsZW4gPSBzaXplb2YoZnJhbWUtPnZuKSAvIEZJUF9CUFc7CisJaHRvbjI0KGZyYW1lLT52bi5mZF9tYWMsIEZJUF9WTl9GQ19NQVApOworCWh0b24yNChmcmFtZS0+dm4uZmRfbWFjICsgMywgZmlwLT5wb3J0X2lkKTsKKwlodG9uMjQoZnJhbWUtPnZuLmZkX2ZjX2lkLCBmaXAtPnBvcnRfaWQpOworCXB1dF91bmFsaWduZWRfYmU2NChmaXAtPmxwLT53d3BuLCAmZnJhbWUtPnZuLmZkX3d3cG4pOworCisJLyoKKwkgKiBGb3IgY2xhaW1zLCBhZGQgRkMtNCBmZWF0dXJlcy4KKwkgKiBUQkQ6IEFkZCBpbnRlcmZhY2UgdG8gZ2V0IGZjLTQgdHlwZXMgYW5kIGZlYXR1cmVzIGZyb20gbGliZmMuCisJICovCisJaWYgKHN1YiA9PSBGSVBfU0NfVk5fQ0xBSU1fTk9USUZZIHx8IHN1YiA9PSBGSVBfU0NfVk5fQ0xBSU1fUkVQKSB7CisJCWZmID0gKHN0cnVjdCBmaXBfZmM0X2ZlYXQgKikoZnJhbWUgKyAxKTsKKwkJZmYtPmZkX2Rlc2MuZmlwX2R0eXBlID0gRklQX0RUX0ZDNEY7CisJCWZmLT5mZF9kZXNjLmZpcF9kbGVuID0gc2l6ZW9mKCpmZikgLyBGSVBfQlBXOworCQlmZi0+ZmRfZnRzID0gZmlwLT5scC0+ZmN0czsKKworCQlmY3BfZmVhdCA9IDA7CisJCWlmIChmaXAtPmxwLT5zZXJ2aWNlX3BhcmFtcyAmIEZDUF9TUFBGX0lOSVRfRkNOKQorCQkJZmNwX2ZlYXQgfD0gRkNQX0ZFQVRfSU5JVDsKKwkJaWYgKGZpcC0+bHAtPnNlcnZpY2VfcGFyYW1zICYgRkNQX1NQUEZfVEFSR19GQ04pCisJCQlmY3BfZmVhdCB8PSBGQ1BfRkVBVF9UQVJHOworCQlmY3BfZmVhdCA8PD0gKEZDX1RZUEVfRkNQICogNCkgJSAzMjsKKwkJZmYtPmZkX2ZmLmZkX2ZlYXRbRkNfVFlQRV9GQ1AgKiA0IC8gMzJdID0gaHRvbmwoZmNwX2ZlYXQpOworCisJCXNpemUgPSAoc3RydWN0IGZpcF9zaXplX2Rlc2MgKikoZmYgKyAxKTsKKwkJc2l6ZS0+ZmRfZGVzYy5maXBfZHR5cGUgPSBGSVBfRFRfRkNPRV9TSVpFOworCQlzaXplLT5mZF9kZXNjLmZpcF9kbGVuID0gc2l6ZW9mKCpzaXplKSAvIEZJUF9CUFc7CisJCXNpemUtPmZkX3NpemUgPSBodG9ucyhmY29lX2N0bHJfZmNvZV9zaXplKGZpcCkpOworCX0KKworCXNrYl9wdXQoc2tiLCBsZW4pOworCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9GSVApOworCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CisJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CisKKwlmaXAtPnNlbmQoZmlwLCBza2IpOworfQorCisvKioKKyAqIGZjb2VfY3Rscl92bl9ycG9ydF9jYWxsYmFjayAtIEV2ZW50IGhhbmRsZXIgZm9yIHJwb3J0IGV2ZW50cy4KKyAqIEBscG9ydDogVGhlIGxwb3J0IHdoaWNoIGlzIHJlY2VpdmluZyB0aGUgZXZlbnQKKyAqIEByZGF0YTogcmVtb3RlIHBvcnQgcHJpdmF0ZSBkYXRhCisgKiBAZXZlbnQ6IFRoZSBldmVudCB0aGF0IG9jY3VyZWQKKyAqCisgKiBMb2NraW5nIE5vdGU6ICBUaGUgcnBvcnQgbG9jayBtdXN0IG5vdCBiZSBoZWxkIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICovCitzdGF0aWMgdm9pZCBmY29lX2N0bHJfdm5fcnBvcnRfY2FsbGJhY2soc3RydWN0IGZjX2xwb3J0ICpscG9ydCwKKwkJCQkJc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhLAorCQkJCQllbnVtIGZjX3Jwb3J0X2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBmY29lX2N0bHIgKmZpcCA9IGxwb3J0LT5kaXNjLnByaXY7CisJc3RydWN0IGZjb2VfcnBvcnQgKmZycG9ydCA9IGZjb2VfY3Rscl9ycG9ydChyZGF0YSk7CisKKwlMSUJGQ09FX0ZJUF9EQkcoZmlwLCAidm5fcnBvcnRfY2FsbGJhY2sgJXggZXZlbnQgJWRcbiIsCisJCQlyZGF0YS0+aWRzLnBvcnRfaWQsIGV2ZW50KTsKKworCW11dGV4X2xvY2soJmZpcC0+Y3Rscl9tdXRleCk7CisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBPUlRfRVZfUkVBRFk6CisJCWZycG9ydC0+bG9naW5fY291bnQgPSAwOworCQlicmVhazsKKwljYXNlIFJQT1JUX0VWX0xPR086CisJY2FzZSBSUE9SVF9FVl9GQUlMRUQ6CisJY2FzZSBSUE9SVF9FVl9TVE9QOgorCQlmcnBvcnQtPmxvZ2luX2NvdW50Kys7CisJCWlmIChmcnBvcnQtPmxvZ2luX2NvdW50ID4gRkNPRV9DVExSX1ZOMlZOX0xPR0lOX0xJTUlUKSB7CisJCQlMSUJGQ09FX0ZJUF9EQkcoZmlwLAorCQkJCQkicnBvcnQgRkxPR0kgbGltaXRlZCBwb3J0X2lkICU2LjZ4XG4iLAorCQkJCQlyZGF0YS0+aWRzLnBvcnRfaWQpOworCQkJbHBvcnQtPnR0LnJwb3J0X2xvZ29mZihyZGF0YSk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCW11dGV4X3VubG9jaygmZmlwLT5jdGxyX211dGV4KTsKK30KKworc3RhdGljIHN0cnVjdCBmY19ycG9ydF9vcGVyYXRpb25zIGZjb2VfY3Rscl92bl9ycG9ydF9vcHMgPSB7CisJLmV2ZW50X2NhbGxiYWNrID0gZmNvZV9jdGxyX3ZuX3Jwb3J0X2NhbGxiYWNrLAorfTsKKworLyoqCisgKiBmY29lX2N0bHJfZGlzY19zdG9wX2xvY2tlZCgpIC0gc3RvcCBkaXNjb3ZlcnkgaW4gVk4yVk4gbW9kZQorICogQGZpcDogVGhlIEZDb0UgY29udHJvbGxlcgorICoKKyAqIENhbGxlZCB3aXRoIGN0bHJfbXV0ZXggaGVsZC4KKyAqLworc3RhdGljIHZvaWQgZmNvZV9jdGxyX2Rpc2Nfc3RvcF9sb2NrZWQoc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKK3sKKwltdXRleF9sb2NrKCZscG9ydC0+ZGlzYy5kaXNjX211dGV4KTsKKwlscG9ydC0+ZGlzYy5kaXNjX2NhbGxiYWNrID0gTlVMTDsKKwltdXRleF91bmxvY2soJmxwb3J0LT5kaXNjLmRpc2NfbXV0ZXgpOworfQorCisvKioKKyAqIGZjb2VfY3Rscl9kaXNjX3N0b3AoKSAtIHN0b3AgZGlzY292ZXJ5IGluIFZOMlZOIG1vZGUKKyAqIEBmaXA6IFRoZSBGQ29FIGNvbnRyb2xsZXIKKyAqCisgKiBDYWxsZWQgdGhyb3VnaCB0aGUgbG9jYWwgcG9ydCB0ZW1wbGF0ZSBmb3IgZGlzY292ZXJ5LgorICogQ2FsbGVkIHdpdGhvdXQgdGhlIGN0bHJfbXV0ZXggaGVsZC4KKyAqLworc3RhdGljIHZvaWQgZmNvZV9jdGxyX2Rpc2Nfc3RvcChzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KQoreworCXN0cnVjdCBmY29lX2N0bHIgKmZpcCA9IGxwb3J0LT5kaXNjLnByaXY7CisKKwltdXRleF9sb2NrKCZmaXAtPmN0bHJfbXV0ZXgpOworCWZjb2VfY3Rscl9kaXNjX3N0b3BfbG9ja2VkKGxwb3J0KTsKKwltdXRleF91bmxvY2soJmZpcC0+Y3Rscl9tdXRleCk7Cit9CisKKy8qKgorICogZmNvZV9jdGxyX2Rpc2Nfc3RvcF9maW5hbCgpIC0gc3RvcCBkaXNjb3ZlcnkgZm9yIHNodXRkb3duIGluIFZOMlZOIG1vZGUKKyAqIEBmaXA6IFRoZSBGQ29FIGNvbnRyb2xsZXIKKyAqCisgKiBDYWxsZWQgdGhyb3VnaCB0aGUgbG9jYWwgcG9ydCB0ZW1wbGF0ZSBmb3IgZGlzY292ZXJ5LgorICogQ2FsbGVkIHdpdGhvdXQgdGhlIGN0bHJfbXV0ZXggaGVsZC4KKyAqLworc3RhdGljIHZvaWQgZmNvZV9jdGxyX2Rpc2Nfc3RvcF9maW5hbChzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KQoreworCWZjb2VfY3Rscl9kaXNjX3N0b3AobHBvcnQpOworCWxwb3J0LT50dC5ycG9ydF9mbHVzaF9xdWV1ZSgpOworCXN5bmNocm9uaXplX3JjdSgpOworfQorCisvKioKKyAqIGZjb2VfY3Rscl92bl9yZXN0YXJ0KCkgLSBWTjJWTiBwcm9iZSByZXN0YXJ0IHdpdGggbmV3IHBvcnRfaWQKKyAqIEBmaXA6IFRoZSBGQ29FIGNvbnRyb2xsZXIKKyAqCisgKiBDYWxsZWQgd2l0aCBmY29lX2N0bHIgbG9jayBoZWxkLgorICovCitzdGF0aWMgdm9pZCBmY29lX2N0bHJfdm5fcmVzdGFydChzdHJ1Y3QgZmNvZV9jdGxyICpmaXApCit7CisJdW5zaWduZWQgbG9uZyB3YWl0OworCXUzMiBwb3J0X2lkOworCisJZmNvZV9jdGxyX2Rpc2Nfc3RvcF9sb2NrZWQoZmlwLT5scCk7CisKKwkvKgorCSAqIEdldCBwcm9wb3NlZCBwb3J0IElELgorCSAqIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRyeSBhZnRlciBsaW5rIHVwLCB1c2UgYW55IHByZXZpb3VzIHBvcnRfaWQuCisJICogSWYgdGhlcmUgd2FzIG5vbmUsIHVzZSB0aGUgbG93IGJpdHMgb2YgdGhlIHBvcnRfbmFtZS4KKwkgKiBPbiBzdWJzZXF1ZW50IHRyaWVzLCBnZXQgdGhlIG5leHQgcmFuZG9tIG9uZS4KKwkgKiBEb24ndCB1c2UgcmVzZXJ2ZWQgSURzLCB1c2UgYW5vdGhlciBub24temVybyB2YWx1ZSwganVzdCBhcyByYW5kb20uCisJICovCisJcG9ydF9pZCA9IGZpcC0+cG9ydF9pZDsKKwlpZiAoZmlwLT5wcm9iZV90cmllcykKKwkJcG9ydF9pZCA9IHByYW5kb20zMigmZmlwLT5ybmRfc3RhdGUpICYgMHhmZmZmOworCWVsc2UgaWYgKCFwb3J0X2lkKQorCQlwb3J0X2lkID0gZmlwLT5scC0+d3dwbiAmIDB4ZmZmZjsKKwlpZiAoIXBvcnRfaWQgfHwgcG9ydF9pZCA9PSAweGZmZmYpCisJCXBvcnRfaWQgPSAxOworCWZpcC0+cG9ydF9pZCA9IHBvcnRfaWQ7CisKKwlpZiAoZmlwLT5wcm9iZV90cmllcyA8IEZJUF9WTl9STElNX0NPVU5UKSB7CisJCWZpcC0+cHJvYmVfdHJpZXMrKzsKKwkJd2FpdCA9IHJhbmRvbTMyKCkgJSBGSVBfVk5fUFJPQkVfV0FJVDsKKwl9IGVsc2UKKwkJd2FpdCA9IEZJUF9WTl9STElNX0lOVDsKKwltb2RfdGltZXIoJmZpcC0+dGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHdhaXQpKTsKKwlmY29lX2N0bHJfc2V0X3N0YXRlKGZpcCwgRklQX1NUX1ZOTVBfU1RBUlQpOworfQorCisvKioKKyAqIGZjb2VfY3Rscl92bl9zdGFydCgpIC0gU3RhcnQgaW4gVk4yVk4gbW9kZQorICogQGZpcDogVGhlIEZDb0UgY29udHJvbGxlcgorICoKKyAqIENhbGxlZCB3aXRoIGZjb2VfY3RsciBsb2NrIGhlbGQuCisgKi8KK3N0YXRpYyB2b2lkIGZjb2VfY3Rscl92bl9zdGFydChzdHJ1Y3QgZmNvZV9jdGxyICpmaXApCit7CisJZmlwLT5wcm9iZV90cmllcyA9IDA7CisJcHJhbmRvbTMyX3NlZWQoJmZpcC0+cm5kX3N0YXRlLCBmaXAtPmxwLT53d3BuKTsKKwlmY29lX2N0bHJfdm5fcmVzdGFydChmaXApOworfQorCisvKioKKyAqIGZjb2VfY3Rscl92bl9wYXJzZSAtIHBhcnNlIHByb2JlIHJlcXVlc3Qgb3IgcmVzcG9uc2UKKyAqIEBmaXA6IFRoZSBGQ29FIGNvbnRyb2xsZXIKKyAqIEBza2I6IGluY29taW5nIHBhY2tldAorICogQHJkYXRhOiBidWZmZXIgZm9yIHJlc3VsdGluZyBwYXJzZWQgVk4gZW50cnkgcGx1cyBmY29lX3Jwb3J0CisgKgorICogUmV0dXJucyBub24temVybyBlcnJvciBudW1iZXIgb24gZXJyb3IuCisgKiBEb2VzIG5vdCBjb25zdW1lIHRoZSBwYWNrZXQuCisgKi8KK3N0YXRpYyBpbnQgZmNvZV9jdGxyX3ZuX3BhcnNlKHN0cnVjdCBmY29lX2N0bHIgKmZpcCwKKwkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICBzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGEpCit7CisJc3RydWN0IGZpcF9oZWFkZXIgKmZpcGg7CisJc3RydWN0IGZpcF9kZXNjICpkZXNjID0gTlVMTDsKKwlzdHJ1Y3QgZmlwX21hY19kZXNjICptYWNkID0gTlVMTDsKKwlzdHJ1Y3QgZmlwX3d3bl9kZXNjICp3d24gPSBOVUxMOworCXN0cnVjdCBmaXBfdm5fZGVzYyAqdm4gPSBOVUxMOworCXN0cnVjdCBmaXBfc2l6ZV9kZXNjICpzaXplID0gTlVMTDsKKwlzdHJ1Y3QgZmNvZV9ycG9ydCAqZnJwb3J0OworCXNpemVfdCBybGVuOworCXNpemVfdCBkbGVuOworCXUzMiBkZXNjX21hc2sgPSAwOworCXUzMiBkdHlwZTsKKwl1OCBzdWI7CisKKwltZW1zZXQocmRhdGEsIDAsIHNpemVvZigqcmRhdGEpICsgc2l6ZW9mKCpmcnBvcnQpKTsKKwlmcnBvcnQgPSBmY29lX2N0bHJfcnBvcnQocmRhdGEpOworCisJZmlwaCA9IChzdHJ1Y3QgZmlwX2hlYWRlciAqKXNrYi0+ZGF0YTsKKwlmcnBvcnQtPmZsYWdzID0gbnRvaHMoZmlwaC0+ZmlwX2ZsYWdzKTsKKworCXN1YiA9IGZpcGgtPmZpcF9zdWJjb2RlOworCXN3aXRjaCAoc3ViKSB7CisJY2FzZSBGSVBfU0NfVk5fUFJPQkVfUkVROgorCWNhc2UgRklQX1NDX1ZOX1BST0JFX1JFUDoKKwljYXNlIEZJUF9TQ19WTl9CRUFDT046CisJCWRlc2NfbWFzayA9IEJJVChGSVBfRFRfTUFDKSB8IEJJVChGSVBfRFRfTkFNRSkgfAorCQkJICAgIEJJVChGSVBfRFRfVk5fSUQpOworCQlicmVhazsKKwljYXNlIEZJUF9TQ19WTl9DTEFJTV9OT1RJRlk6CisJY2FzZSBGSVBfU0NfVk5fQ0xBSU1fUkVQOgorCQlkZXNjX21hc2sgPSBCSVQoRklQX0RUX01BQykgfCBCSVQoRklQX0RUX05BTUUpIHwKKwkJCSAgICBCSVQoRklQX0RUX1ZOX0lEKSB8IEJJVChGSVBfRFRfRkM0RikgfAorCQkJICAgIEJJVChGSVBfRFRfRkNPRV9TSVpFKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJTElCRkNPRV9GSVBfREJHKGZpcCwgInZuX3BhcnNlIHVua25vd24gc3ViY29kZSAldVxuIiwgc3ViKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmxlbiA9IG50b2hzKGZpcGgtPmZpcF9kbF9sZW4pICogNDsKKwlpZiAocmxlbiArIHNpemVvZigqZmlwaCkgPiBza2ItPmxlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXNjID0gKHN0cnVjdCBmaXBfZGVzYyAqKShmaXBoICsgMSk7CisJd2hpbGUgKHJsZW4gPiAwKSB7CisJCWRsZW4gPSBkZXNjLT5maXBfZGxlbiAqIEZJUF9CUFc7CisJCWlmIChkbGVuIDwgc2l6ZW9mKCpkZXNjKSB8fCBkbGVuID4gcmxlbikKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWR0eXBlID0gZGVzYy0+ZmlwX2R0eXBlOworCQlpZiAoZHR5cGUgPCAzMikgeworCQkJaWYgKCEoZGVzY19tYXNrICYgQklUKGR0eXBlKSkpIHsKKwkJCQlMSUJGQ09FX0ZJUF9EQkcoZmlwLAorCQkJCQkJInVuZXhwZWN0ZWQgb3IgZHVwbGljYXRlZCBkZXNjICIKKwkJCQkJCSJkZXNjIHR5cGUgJXUgaW4gIgorCQkJCQkJIkZJUCBWTjJWTiBzdWJ0eXBlICV1XG4iLAorCQkJCQkJZHR5cGUsIHN1Yik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlkZXNjX21hc2sgJj0gfkJJVChkdHlwZSk7CisJCX0KKworCQlzd2l0Y2ggKGR0eXBlKSB7CisJCWNhc2UgRklQX0RUX01BQzoKKwkJCWlmIChkbGVuICE9IHNpemVvZihzdHJ1Y3QgZmlwX21hY19kZXNjKSkKKwkJCQlnb3RvIGxlbl9lcnI7CisJCQltYWNkID0gKHN0cnVjdCBmaXBfbWFjX2Rlc2MgKilkZXNjOworCQkJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG1hY2QtPmZkX21hYykpIHsKKwkJCQlMSUJGQ09FX0ZJUF9EQkcoZmlwLAorCQkJCQkiSW52YWxpZCBNQUMgYWRkciAlcE0gaW4gRklQIFZOMlZOXG4iLAorCQkJCQkgbWFjZC0+ZmRfbWFjKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCW1lbWNweShmcnBvcnQtPmVub2RlX21hYywgbWFjZC0+ZmRfbWFjLCBFVEhfQUxFTik7CisJCQlicmVhazsKKwkJY2FzZSBGSVBfRFRfTkFNRToKKwkJCWlmIChkbGVuICE9IHNpemVvZihzdHJ1Y3QgZmlwX3d3bl9kZXNjKSkKKwkJCQlnb3RvIGxlbl9lcnI7CisJCQl3d24gPSAoc3RydWN0IGZpcF93d25fZGVzYyAqKWRlc2M7CisJCQlyZGF0YS0+aWRzLm5vZGVfbmFtZSA9IGdldF91bmFsaWduZWRfYmU2NCgmd3duLT5mZF93d24pOworCQkJYnJlYWs7CisJCWNhc2UgRklQX0RUX1ZOX0lEOgorCQkJaWYgKGRsZW4gIT0gc2l6ZW9mKHN0cnVjdCBmaXBfdm5fZGVzYykpCisJCQkJZ290byBsZW5fZXJyOworCQkJdm4gPSAoc3RydWN0IGZpcF92bl9kZXNjICopZGVzYzsKKwkJCW1lbWNweShmcnBvcnQtPnZuX21hYywgdm4tPmZkX21hYywgRVRIX0FMRU4pOworCQkJcmRhdGEtPmlkcy5wb3J0X2lkID0gbnRvaDI0KHZuLT5mZF9mY19pZCk7CisJCQlyZGF0YS0+aWRzLnBvcnRfbmFtZSA9IGdldF91bmFsaWduZWRfYmU2NCgmdm4tPmZkX3d3cG4pOworCQkJYnJlYWs7CisJCWNhc2UgRklQX0RUX0ZDNEY6CisJCQlpZiAoZGxlbiAhPSBzaXplb2Yoc3RydWN0IGZpcF9mYzRfZmVhdCkpCisJCQkJZ290byBsZW5fZXJyOworCQkJYnJlYWs7CisJCWNhc2UgRklQX0RUX0ZDT0VfU0laRToKKwkJCWlmIChkbGVuICE9IHNpemVvZihzdHJ1Y3QgZmlwX3NpemVfZGVzYykpCisJCQkJZ290byBsZW5fZXJyOworCQkJc2l6ZSA9IChzdHJ1Y3QgZmlwX3NpemVfZGVzYyAqKWRlc2M7CisJCQlmcnBvcnQtPmZjb2VfbGVuID0gbnRvaHMoc2l6ZS0+ZmRfc2l6ZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUxJQkZDT0VfRklQX0RCRyhmaXAsICJ1bmV4cGVjdGVkIGRlc2NyaXB0b3IgdHlwZSAleCAiCisJCQkJCSJpbiBGSVAgcHJvYmVcbiIsIGR0eXBlKTsKKwkJCS8qIHN0YW5kYXJkIHNheXMgaWdub3JlIHVua25vd24gZGVzY3JpcHRvcnMgPj0gMTI4ICovCisJCQlpZiAoZHR5cGUgPCBGSVBfRFRfVkVORE9SX0JBU0UpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlkZXNjID0gKHN0cnVjdCBmaXBfZGVzYyAqKSgoY2hhciAqKWRlc2MgKyBkbGVuKTsKKwkJcmxlbiAtPSBkbGVuOworCX0KKwlyZXR1cm4gMDsKKworbGVuX2VycjoKKwlMSUJGQ09FX0ZJUF9EQkcoZmlwLCAiRklQIGxlbmd0aCBlcnJvciBpbiBkZXNjcmlwdG9yIHR5cGUgJXggbGVuICV6dVxuIiwKKwkJCWR0eXBlLCBkbGVuKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoqCisgKiBmY29lX2N0bHJfdm5fc2VuZF9jbGFpbSgpIC0gc2VuZCBtdWx0aWNhc3QgRklQIFZOMlZOIENsYWltIE5vdGlmaWNhdGlvbi4KKyAqIEBmaXA6IFRoZSBGQ29FIGNvbnRyb2xsZXIKKyAqCisgKiBDYWxsZWQgd2l0aCBjdGxyX211dGV4IGhlbGQuCisgKi8KK3N0YXRpYyB2b2lkIGZjb2VfY3Rscl92bl9zZW5kX2NsYWltKHN0cnVjdCBmY29lX2N0bHIgKmZpcCkKK3sKKwlmY29lX2N0bHJfdm5fc2VuZChmaXAsIEZJUF9TQ19WTl9DTEFJTV9OT1RJRlksIGZjb2VfYWxsX3ZuMnZuLCAwKTsKKwlmaXAtPnNvbF90aW1lID0gamlmZmllczsKK30KKworLyoqCisgKiBmY29lX2N0bHJfdm5fcHJvYmVfcmVxKCkgLSBoYW5kbGUgaW5jb21pbmcgVk4yVk4gcHJvYmUgcmVxdWVzdC4KKyAqIEBmaXA6IFRoZSBGQ29FIGNvbnRyb2xsZXIKKyAqIEByZGF0YTogcGFyc2VkIHJlbW90ZSBwb3J0IHdpdGggZnJwb3J0IGZyb20gdGhlIHByb2JlIHJlcXVlc3QKKyAqCisgKiBDYWxsZWQgd2l0aCBjdGxyX211dGV4IGhlbGQuCisgKi8KK3N0YXRpYyB2b2lkIGZjb2VfY3Rscl92bl9wcm9iZV9yZXEoc3RydWN0IGZjb2VfY3RsciAqZmlwLAorCQkJCSAgIHN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YSkKK3sKKwlzdHJ1Y3QgZmNvZV9ycG9ydCAqZnJwb3J0ID0gZmNvZV9jdGxyX3Jwb3J0KHJkYXRhKTsKKworCWlmIChyZGF0YS0+aWRzLnBvcnRfaWQgIT0gZmlwLT5wb3J0X2lkKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGZpcC0+c3RhdGUpIHsKKwljYXNlIEZJUF9TVF9WTk1QX0NMQUlNOgorCWNhc2UgRklQX1NUX1ZOTVBfVVA6CisJCWZjb2VfY3Rscl92bl9zZW5kKGZpcCwgRklQX1NDX1ZOX1BST0JFX1JFUCwKKwkJCQkgIGZycG9ydC0+ZW5vZGVfbWFjLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBGSVBfU1RfVk5NUF9QUk9CRTE6CisJY2FzZSBGSVBfU1RfVk5NUF9QUk9CRTI6CisJCS8qCisJCSAqIERlY2lkZSB3aGV0aGVyIHRvIHJlcGx5IHRvIHRoZSBQcm9iZS4KKwkJICogT3VyIHNlbGVjdGVkIGFkZHJlc3MgaXMgbmV2ZXIgYSAicmVjb3JkZWQiIG9uZSwgc28KKwkJICogb25seSByZXBseSBpZiBvdXIgV1dQTiBpcyBncmVhdGVyIGFuZCB0aGUKKwkJICogUHJvYmUncyBSRUMgYml0IGlzIG5vdCBzZXQuCisJCSAqIElmIHdlIGRvbid0IHJlcGx5LCB3ZSB3aWxsIGNoYW5nZSBvdXIgYWRkcmVzcy4KKwkJICovCisJCWlmIChmaXAtPmxwLT53d3BuID4gcmRhdGEtPmlkcy5wb3J0X25hbWUgJiYKKwkJICAgICEoZnJwb3J0LT5mbGFncyAmIEZJUF9GTF9SRUNfT1JfUDJQKSkgeworCQkJZmNvZV9jdGxyX3ZuX3NlbmQoZmlwLCBGSVBfU0NfVk5fUFJPQkVfUkVQLAorCQkJCQkgIGZycG9ydC0+ZW5vZGVfbWFjLCAwKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgRklQX1NUX1ZOTVBfU1RBUlQ6CisJCWZjb2VfY3Rscl92bl9yZXN0YXJ0KGZpcCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworLyoqCisgKiBmY29lX2N0bHJfdm5fcHJvYmVfcmVwbHkoKSAtIGhhbmRsZSBpbmNvbWluZyBWTjJWTiBwcm9iZSByZXBseS4KKyAqIEBmaXA6IFRoZSBGQ29FIGNvbnRyb2xsZXIKKyAqIEByZGF0YTogcGFyc2VkIHJlbW90ZSBwb3J0IHdpdGggZnJwb3J0IGZyb20gdGhlIHByb2JlIHJlcXVlc3QKKyAqCisgKiBDYWxsZWQgd2l0aCBjdGxyX211dGV4IGhlbGQuCisgKi8KK3N0YXRpYyB2b2lkIGZjb2VfY3Rscl92bl9wcm9iZV9yZXBseShzdHJ1Y3QgZmNvZV9jdGxyICpmaXAsCisJCQkJICAgc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhKQoreworCWlmIChyZGF0YS0+aWRzLnBvcnRfaWQgIT0gZmlwLT5wb3J0X2lkKQorCQlyZXR1cm47CisJc3dpdGNoIChmaXAtPnN0YXRlKSB7CisJY2FzZSBGSVBfU1RfVk5NUF9TVEFSVDoKKwljYXNlIEZJUF9TVF9WTk1QX1BST0JFMToKKwljYXNlIEZJUF9TVF9WTk1QX1BST0JFMjoKKwljYXNlIEZJUF9TVF9WTk1QX0NMQUlNOgorCQlmY29lX2N0bHJfdm5fcmVzdGFydChmaXApOworCQlicmVhazsKKwljYXNlIEZJUF9TVF9WTk1QX1VQOgorCQlmY29lX2N0bHJfdm5fc2VuZF9jbGFpbShmaXApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKy8qKgorICogZmNvZV9jdGxyX3ZuX2FkZCgpIC0gQWRkIGEgVk4yVk4gZW50cnkgdG8gdGhlIGxpc3QsIGJhc2VkIG9uIGEgY2xhaW0gcmVwbHkuCisgKiBAZmlwOiBUaGUgRkNvRSBjb250cm9sbGVyCisgKiBAbmV3OiBuZXdseS1wYXJzZWQgcmVtb3RlIHBvcnQgd2l0aCBmcnBvcnQgYXMgYSB0ZW1wbGF0ZSBmb3IgbmV3IHJkYXRhCisgKgorICogQ2FsbGVkIHdpdGggY3Rscl9tdXRleCBoZWxkLgorICovCitzdGF0aWMgdm9pZCBmY29lX2N0bHJfdm5fYWRkKHN0cnVjdCBmY29lX2N0bHIgKmZpcCwgc3RydWN0IGZjX3Jwb3J0X3ByaXYgKm5ldykKK3sKKwlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gZmlwLT5scDsKKwlzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGE7CisJc3RydWN0IGZjX3Jwb3J0X2lkZW50aWZpZXJzICppZHM7CisJc3RydWN0IGZjb2VfcnBvcnQgKmZycG9ydDsKKwl1MzIgcG9ydF9pZDsKKworCXBvcnRfaWQgPSBuZXctPmlkcy5wb3J0X2lkOworCWlmIChwb3J0X2lkID09IGZpcC0+cG9ydF9pZCkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmbHBvcnQtPmRpc2MuZGlzY19tdXRleCk7CisJcmRhdGEgPSBscG9ydC0+dHQucnBvcnRfY3JlYXRlKGxwb3J0LCBwb3J0X2lkKTsKKwlpZiAoIXJkYXRhKSB7CisJCW11dGV4X3VubG9jaygmbHBvcnQtPmRpc2MuZGlzY19tdXRleCk7CisJCXJldHVybjsKKwl9CisKKwlyZGF0YS0+b3BzID0gJmZjb2VfY3Rscl92bl9ycG9ydF9vcHM7CisJcmRhdGEtPmRpc2NfaWQgPSBscG9ydC0+ZGlzYy5kaXNjX2lkOworCisJaWRzID0gJnJkYXRhLT5pZHM7CisJaWYgKChpZHMtPnBvcnRfbmFtZSAhPSAtMSAmJiBpZHMtPnBvcnRfbmFtZSAhPSBuZXctPmlkcy5wb3J0X25hbWUpIHx8CisJICAgIChpZHMtPm5vZGVfbmFtZSAhPSAtMSAmJiBpZHMtPm5vZGVfbmFtZSAhPSBuZXctPmlkcy5ub2RlX25hbWUpKQorCQlscG9ydC0+dHQucnBvcnRfbG9nb2ZmKHJkYXRhKTsKKwlpZHMtPnBvcnRfbmFtZSA9IG5ldy0+aWRzLnBvcnRfbmFtZTsKKwlpZHMtPm5vZGVfbmFtZSA9IG5ldy0+aWRzLm5vZGVfbmFtZTsKKwltdXRleF91bmxvY2soJmxwb3J0LT5kaXNjLmRpc2NfbXV0ZXgpOworCisJZnJwb3J0ID0gZmNvZV9jdGxyX3Jwb3J0KHJkYXRhKTsKKwlMSUJGQ09FX0ZJUF9EQkcoZmlwLCAidm5fYWRkIHJwb3J0ICU2LjZ4ICVzXG4iLAorCQkJcG9ydF9pZCwgZnJwb3J0LT5mY29lX2xlbiA/ICJvbGQiIDogIm5ldyIpOworCSpmcnBvcnQgPSAqZmNvZV9jdGxyX3Jwb3J0KG5ldyk7CisJZnJwb3J0LT50aW1lID0gMDsKK30KKworLyoqCisgKiBmY29lX2N0bHJfdm5fbG9va3VwKCkgLSBGaW5kIFZOIHJlbW90ZSBwb3J0J3MgTUFDIGFkZHJlc3MKKyAqIEBmaXA6IFRoZSBGQ29FIGNvbnRyb2xsZXIKKyAqIEBwb3J0X2lkOiAgVGhlIHBvcnRfaWQgb2YgdGhlIHJlbW90ZSBWTl9ub2RlCisgKiBAbWFjOiBidWZmZXIgd2hpY2ggd2lsbCBob2xkIHRoZSBWTl9OT0RFIGRlc3RpbmF0aW9uIE1BQyBhZGRyZXNzLCBpZiBmb3VuZC4KKyAqCisgKiBSZXR1cm5zIG5vbi16ZXJvIGVycm9yIGlmIG5vIHJlbW90ZSBwb3J0IGZvdW5kLgorICovCitzdGF0aWMgaW50IGZjb2VfY3Rscl92bl9sb29rdXAoc3RydWN0IGZjb2VfY3RsciAqZmlwLCB1MzIgcG9ydF9pZCwgdTggKm1hYykKK3sKKwlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gZmlwLT5scDsKKwlzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGE7CisJc3RydWN0IGZjb2VfcnBvcnQgKmZycG9ydDsKKwlpbnQgcmV0ID0gLTE7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJcmRhdGEgPSBscG9ydC0+dHQucnBvcnRfbG9va3VwKGxwb3J0LCBwb3J0X2lkKTsKKwlpZiAocmRhdGEpIHsKKwkJZnJwb3J0ID0gZmNvZV9jdGxyX3Jwb3J0KHJkYXRhKTsKKwkJbWVtY3B5KG1hYywgZnJwb3J0LT5lbm9kZV9tYWMsIEVUSF9BTEVOKTsKKwkJcmV0ID0gMDsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBmY29lX2N0bHJfdm5fY2xhaW1fbm90aWZ5KCkgLSBoYW5kbGUgcmVjZWl2ZWQgRklQIFZOMlZOIENsYWltIE5vdGlmaWNhdGlvbgorICogQGZpcDogVGhlIEZDb0UgY29udHJvbGxlcgorICogQG5ldzogbmV3bHktcGFyc2VkIHJlbW90ZSBwb3J0IHdpdGggZnJwb3J0IGFzIGEgdGVtcGxhdGUgZm9yIG5ldyByZGF0YQorICoKKyAqIENhbGxlZCB3aXRoIGN0bHJfbXV0ZXggaGVsZC4KKyAqLworc3RhdGljIHZvaWQgZmNvZV9jdGxyX3ZuX2NsYWltX25vdGlmeShzdHJ1Y3QgZmNvZV9jdGxyICpmaXAsCisJCQkJICAgICAgc3RydWN0IGZjX3Jwb3J0X3ByaXYgKm5ldykKK3sKKwlzdHJ1Y3QgZmNvZV9ycG9ydCAqZnJwb3J0ID0gZmNvZV9jdGxyX3Jwb3J0KG5ldyk7CisKKwlpZiAoZnJwb3J0LT5mbGFncyAmIEZJUF9GTF9SRUNfT1JfUDJQKSB7CisJCWZjb2VfY3Rscl92bl9zZW5kKGZpcCwgRklQX1NDX1ZOX1BST0JFX1JFUSwgZmNvZV9hbGxfdm4ydm4sIDApOworCQlyZXR1cm47CisJfQorCXN3aXRjaCAoZmlwLT5zdGF0ZSkgeworCWNhc2UgRklQX1NUX1ZOTVBfU1RBUlQ6CisJY2FzZSBGSVBfU1RfVk5NUF9QUk9CRTE6CisJY2FzZSBGSVBfU1RfVk5NUF9QUk9CRTI6CisJCWlmIChuZXctPmlkcy5wb3J0X2lkID09IGZpcC0+cG9ydF9pZCkKKwkJCWZjb2VfY3Rscl92bl9yZXN0YXJ0KGZpcCk7CisJCWJyZWFrOworCWNhc2UgRklQX1NUX1ZOTVBfQ0xBSU06CisJY2FzZSBGSVBfU1RfVk5NUF9VUDoKKwkJaWYgKG5ldy0+aWRzLnBvcnRfaWQgPT0gZmlwLT5wb3J0X2lkKSB7CisJCQlpZiAobmV3LT5pZHMucG9ydF9uYW1lID4gZmlwLT5scC0+d3dwbikgeworCQkJCWZjb2VfY3Rscl92bl9yZXN0YXJ0KGZpcCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlmY29lX2N0bHJfdm5fc2VuZF9jbGFpbShmaXApOworCQkJYnJlYWs7CisJCX0KKwkJZmNvZV9jdGxyX3ZuX3NlbmQoZmlwLCBGSVBfU0NfVk5fQ0xBSU1fUkVQLCBmcnBvcnQtPmVub2RlX21hYywKKwkJCQkgIG1pbigodTMyKWZycG9ydC0+ZmNvZV9sZW4sCisJCQkJICAgICAgZmNvZV9jdGxyX2Zjb2Vfc2l6ZShmaXApKSk7CisJCWZjb2VfY3Rscl92bl9hZGQoZmlwLCBuZXcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKy8qKgorICogZmNvZV9jdGxyX3ZuX2NsYWltX3Jlc3AoKSAtIGhhbmRsZSByZWNlaXZlZCBDbGFpbSBSZXNwb25zZQorICogQGZpcDogVGhlIEZDb0UgY29udHJvbGxlciB0aGF0IHJlY2VpdmVkIHRoZSBmcmFtZQorICogQG5ldzogbmV3bHktcGFyc2VkIHJlbW90ZSBwb3J0IHdpdGggZnJwb3J0IGZyb20gdGhlIENsYWltIFJlc3BvbnNlCisgKgorICogQ2FsbGVkIHdpdGggY3Rscl9tdXRleCBoZWxkLgorICovCitzdGF0aWMgdm9pZCBmY29lX2N0bHJfdm5fY2xhaW1fcmVzcChzdHJ1Y3QgZmNvZV9jdGxyICpmaXAsCisJCQkJICAgIHN0cnVjdCBmY19ycG9ydF9wcml2ICpuZXcpCit7CisJTElCRkNPRV9GSVBfREJHKGZpcCwgImNsYWltIHJlc3AgZnJvbSBmcm9tIHJwb3J0ICV4IC0gc3RhdGUgJXNcbiIsCisJCQluZXctPmlkcy5wb3J0X2lkLCBmY29lX2N0bHJfc3RhdGUoZmlwLT5zdGF0ZSkpOworCWlmIChmaXAtPnN0YXRlID09IEZJUF9TVF9WTk1QX1VQIHx8IGZpcC0+c3RhdGUgPT0gRklQX1NUX1ZOTVBfQ0xBSU0pCisJCWZjb2VfY3Rscl92bl9hZGQoZmlwLCBuZXcpOworfQorCisvKioKKyAqIGZjb2VfY3Rscl92bl9iZWFjb24oKSAtIGhhbmRsZSByZWNlaXZlZCBiZWFjb24uCisgKiBAZmlwOiBUaGUgRkNvRSBjb250cm9sbGVyIHRoYXQgcmVjZWl2ZWQgdGhlIGZyYW1lCisgKiBAbmV3OiBuZXdseS1wYXJzZWQgcmVtb3RlIHBvcnQgd2l0aCBmcnBvcnQgZnJvbSB0aGUgQmVhY29uCisgKgorICogQ2FsbGVkIHdpdGggY3Rscl9tdXRleCBoZWxkLgorICovCitzdGF0aWMgdm9pZCBmY29lX2N0bHJfdm5fYmVhY29uKHN0cnVjdCBmY29lX2N0bHIgKmZpcCwKKwkJCQlzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqbmV3KQoreworCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSBmaXAtPmxwOworCXN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YTsKKwlzdHJ1Y3QgZmNvZV9ycG9ydCAqZnJwb3J0OworCisJZnJwb3J0ID0gZmNvZV9jdGxyX3Jwb3J0KG5ldyk7CisJaWYgKGZycG9ydC0+ZmxhZ3MgJiBGSVBfRkxfUkVDX09SX1AyUCkgeworCQlmY29lX2N0bHJfdm5fc2VuZChmaXAsIEZJUF9TQ19WTl9QUk9CRV9SRVEsIGZjb2VfYWxsX3ZuMnZuLCAwKTsKKwkJcmV0dXJuOworCX0KKwltdXRleF9sb2NrKCZscG9ydC0+ZGlzYy5kaXNjX211dGV4KTsKKwlyZGF0YSA9IGxwb3J0LT50dC5ycG9ydF9sb29rdXAobHBvcnQsIG5ldy0+aWRzLnBvcnRfaWQpOworCWlmIChyZGF0YSkKKwkJa3JlZl9nZXQoJnJkYXRhLT5rcmVmKTsKKwltdXRleF91bmxvY2soJmxwb3J0LT5kaXNjLmRpc2NfbXV0ZXgpOworCWlmIChyZGF0YSkgeworCQlpZiAocmRhdGEtPmlkcy5ub2RlX25hbWUgPT0gbmV3LT5pZHMubm9kZV9uYW1lICYmCisJCSAgICByZGF0YS0+aWRzLnBvcnRfbmFtZSA9PSBuZXctPmlkcy5wb3J0X25hbWUpIHsKKwkJCWZycG9ydCA9IGZjb2VfY3Rscl9ycG9ydChyZGF0YSk7CisJCQlpZiAoIWZycG9ydC0+dGltZSAmJiBmaXAtPnN0YXRlID09IEZJUF9TVF9WTk1QX1VQKQorCQkJCWxwb3J0LT50dC5ycG9ydF9sb2dpbihyZGF0YSk7CisJCQlmcnBvcnQtPnRpbWUgPSBqaWZmaWVzOworCQl9CisJCWtyZWZfcHV0KCZyZGF0YS0+a3JlZiwgbHBvcnQtPnR0LnJwb3J0X2Rlc3Ryb3kpOworCQlyZXR1cm47CisJfQorCWlmIChmaXAtPnN0YXRlICE9IEZJUF9TVF9WTk1QX1VQKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEJlYWNvbiBmcm9tIGEgbmV3IG5laWdoYm9yLgorCSAqIFNlbmQgYSBjbGFpbSBub3RpZnkgaWYgb25lIGhhc24ndCBiZWVuIHNlbnQgcmVjZW50bHkuCisJICogRG9uJ3QgYWRkIHRoZSBuZWlnaGJvciB5ZXQuCisJICovCisJTElCRkNPRV9GSVBfREJHKGZpcCwgImJlYWNvbiBmcm9tIG5ldyBycG9ydCAleC4gc2VuZGluZyBjbGFpbSBub3RpZnlcbiIsCisJCQluZXctPmlkcy5wb3J0X2lkKTsKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLAorCQkgICAgICAgZmlwLT5zb2xfdGltZSArIG1zZWNzX3RvX2ppZmZpZXMoRklQX1ZOX0FOTl9XQUlUKSkpCisJCWZjb2VfY3Rscl92bl9zZW5kX2NsYWltKGZpcCk7Cit9CisKKy8qKgorICogZmNvZV9jdGxyX3ZuX2FnZSgpIC0gQ2hlY2sgZm9yIFZOX3BvcnRzIHdpdGhvdXQgcmVjZW50IGJlYWNvbnMKKyAqIEBmaXA6IFRoZSBGQ29FIGNvbnRyb2xsZXIKKyAqCisgKiBDYWxsZWQgd2l0aCBjdGxyX211dGV4IGhlbGQuCisgKiBDYWxsZWQgb25seSBpbiBzdGF0ZSBGSVBfU1RfVk5NUF9VUC4KKyAqIFJldHVybnMgdGhlIHNvb25lc3QgdGltZSBmb3IgbmV4dCBhZ2Utb3V0IG9yIGEgdGltZSBmYXIgaW4gdGhlIGZ1dHVyZS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgZmNvZV9jdGxyX3ZuX2FnZShzdHJ1Y3QgZmNvZV9jdGxyICpmaXApCit7CisJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IGZpcC0+bHA7CisJc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhOworCXN0cnVjdCBmY29lX3Jwb3J0ICpmcnBvcnQ7CisJdW5zaWduZWQgbG9uZyBuZXh0X3RpbWU7CisJdW5zaWduZWQgbG9uZyBkZWFkbGluZTsKKworCW5leHRfdGltZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEZJUF9WTl9CRUFDT05fSU5UICogMTApOworCW11dGV4X2xvY2soJmxwb3J0LT5kaXNjLmRpc2NfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkYXRhLCAmbHBvcnQtPmRpc2MucnBvcnRzLCBwZWVycykgeworCQlmcnBvcnQgPSBmY29lX2N0bHJfcnBvcnQocmRhdGEpOworCQlpZiAoIWZycG9ydC0+dGltZSkKKwkJCWNvbnRpbnVlOworCQlkZWFkbGluZSA9IGZycG9ydC0+dGltZSArCisJCQkgICBtc2Vjc190b19qaWZmaWVzKEZJUF9WTl9CRUFDT05fSU5UICogMjUgLyAxMCk7CisJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIGRlYWRsaW5lKSkgeworCQkJZnJwb3J0LT50aW1lID0gMDsKKwkJCUxJQkZDT0VfRklQX0RCRyhmaXAsCisJCQkJInBvcnQgJTE2LjE2bGx4IGZjX2lkICU2LjZ4IGJlYWNvbiBleHBpcmVkXG4iLAorCQkJCXJkYXRhLT5pZHMucG9ydF9uYW1lLCByZGF0YS0+aWRzLnBvcnRfaWQpOworCQkJbHBvcnQtPnR0LnJwb3J0X2xvZ29mZihyZGF0YSk7CisJCX0gZWxzZSBpZiAodGltZV9iZWZvcmUoZGVhZGxpbmUsIG5leHRfdGltZSkpCisJCQluZXh0X3RpbWUgPSBkZWFkbGluZTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZscG9ydC0+ZGlzYy5kaXNjX211dGV4KTsKKwlyZXR1cm4gbmV4dF90aW1lOworfQorCisvKioKKyAqIGZjb2VfY3Rscl92bl9yZWN2KCkgLSBSZWNlaXZlIGEgRklQIGZyYW1lCisgKiBAZmlwOiBUaGUgRkNvRSBjb250cm9sbGVyIHRoYXQgcmVjZWl2ZWQgdGhlIGZyYW1lCisgKiBAc2tiOiBUaGUgcmVjZWl2ZWQgRklQIGZyYW1lCisgKgorICogUmV0dXJucyBub24temVybyBpZiB0aGUgZnJhbWUgaXMgZHJvcHBlZC4KKyAqIEFsd2F5cyBjb25zdW1lcyB0aGUgZnJhbWUuCisgKi8KK3N0YXRpYyBpbnQgZmNvZV9jdGxyX3ZuX3JlY3Yoc3RydWN0IGZjb2VfY3RsciAqZmlwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBmaXBfaGVhZGVyICpmaXBoOworCWVudW0gZmlwX3ZuMnZuX3N1YmNvZGUgc3ViOworCXVuaW9uIHsKKwkJc3RydWN0IGZjX3Jwb3J0X3ByaXYgcmRhdGE7CisJCXN0cnVjdCBmY29lX3Jwb3J0IGZycG9ydDsKKwl9IGJ1ZjsKKwlpbnQgcmM7CisKKwlmaXBoID0gKHN0cnVjdCBmaXBfaGVhZGVyICopc2tiLT5kYXRhOworCXN1YiA9IGZpcGgtPmZpcF9zdWJjb2RlOworCisJcmMgPSBmY29lX2N0bHJfdm5fcGFyc2UoZmlwLCBza2IsICZidWYucmRhdGEpOworCWlmIChyYykgeworCQlMSUJGQ09FX0ZJUF9EQkcoZmlwLCAidm5fcmVjdiB2bl9wYXJzZSBlcnJvciAlZFxuIiwgcmMpOworCQlnb3RvIGRyb3A7CisJfQorCisJbXV0ZXhfbG9jaygmZmlwLT5jdGxyX211dGV4KTsKKwlzd2l0Y2ggKHN1YikgeworCWNhc2UgRklQX1NDX1ZOX1BST0JFX1JFUToKKwkJZmNvZV9jdGxyX3ZuX3Byb2JlX3JlcShmaXAsICZidWYucmRhdGEpOworCQlicmVhazsKKwljYXNlIEZJUF9TQ19WTl9QUk9CRV9SRVA6CisJCWZjb2VfY3Rscl92bl9wcm9iZV9yZXBseShmaXAsICZidWYucmRhdGEpOworCQlicmVhazsKKwljYXNlIEZJUF9TQ19WTl9DTEFJTV9OT1RJRlk6CisJCWZjb2VfY3Rscl92bl9jbGFpbV9ub3RpZnkoZmlwLCAmYnVmLnJkYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBGSVBfU0NfVk5fQ0xBSU1fUkVQOgorCQlmY29lX2N0bHJfdm5fY2xhaW1fcmVzcChmaXAsICZidWYucmRhdGEpOworCQlicmVhazsKKwljYXNlIEZJUF9TQ19WTl9CRUFDT046CisJCWZjb2VfY3Rscl92bl9iZWFjb24oZmlwLCAmYnVmLnJkYXRhKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJTElCRkNPRV9GSVBfREJHKGZpcCwgInZuX3JlY3YgdW5rbm93biBzdWJjb2RlICVkXG4iLCBzdWIpOworCQlyYyA9IC0xOworCQlicmVhazsKKwl9CisJbXV0ZXhfdW5sb2NrKCZmaXAtPmN0bHJfbXV0ZXgpOworZHJvcDoKKwlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogZmNvZV9jdGxyX2Rpc2NfcmVjdiAtIGRpc2NvdmVyeSByZWNlaXZlIGhhbmRsZXIgZm9yIFZOMlZOIG1vZGUuCisgKiBAbHBvcnQ6IFRoZSBsb2NhbCBwb3J0CisgKiBAZnA6IFRoZSByZWNlaXZlZCBmcmFtZQorICoKKyAqIFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBzaW5jZSB3ZSBkb24ndCBzZWUgUlNDTnMgb3Igb3RoZXIKKyAqIGZhYnJpYy1nZW5lcmF0ZWQgRUxTZXMuCisgKi8KK3N0YXRpYyB2b2lkIGZjb2VfY3Rscl9kaXNjX3JlY3Yoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwgc3RydWN0IGZjX2ZyYW1lICpmcCkKK3sKKwlzdHJ1Y3QgZmNfc2VxX2Vsc19kYXRhIHJqdF9kYXRhOworCisJcmp0X2RhdGEucmVhc29uID0gRUxTX1JKVF9VTlNVUDsKKwlyanRfZGF0YS5leHBsYW4gPSBFTFNfRVhQTF9OT05FOworCWxwb3J0LT50dC5zZXFfZWxzX3JzcF9zZW5kKGZwLCBFTFNfTFNfUkpULCAmcmp0X2RhdGEpOworCWZjX2ZyYW1lX2ZyZWUoZnApOworfQorCisvKioKKyAqIGZjb2VfY3Rscl9kaXNjX3JlY3YgLSBzdGFydCBkaXNjb3ZlcnkgZm9yIFZOMlZOIG1vZGUuCisgKiBAZmlwOiBUaGUgRkNvRSBjb250cm9sbGVyCisgKgorICogVGhpcyBzZXRzIGEgZmxhZyBpbmRpY2F0aW5nIHRoYXQgcmVtb3RlIHBvcnRzIHNob3VsZCBiZSBjcmVhdGVkCisgKiBhbmQgc3RhcnRlZCBmb3IgdGhlIHBlZXJzIHdlIGRpc2NvdmVyLiAgV2UgdXNlIHRoZSBkaXNjX2NhbGxiYWNrCisgKiBwb2ludGVyIGFzIHRoYXQgZmxhZy4gIFBlZXJzIGFscmVhZHkgZGlzY292ZXJlZCBhcmUgY3JlYXRlZCBoZXJlLgorICoKKyAqIFRoZSBscG9ydCBsb2NrIGlzIGhlbGQgZHVyaW5nIHRoaXMgY2FsbC4gVGhlIGNhbGxiYWNrIG11c3QgYmUgZG9uZQorICogbGF0ZXIsIHdpdGhvdXQgaG9sZGluZyBlaXRoZXIgdGhlIGxwb3J0IG9yIGRpc2NvdmVyeSBsb2Nrcy4KKyAqIFRoZSBmY29lX2N0bHIgbG9jayBtYXkgYWxzbyBiZSBoZWxkIGR1cmluZyB0aGlzIGNhbGwuCisgKi8KK3N0YXRpYyB2b2lkIGZjb2VfY3Rscl9kaXNjX3N0YXJ0KHZvaWQgKCpjYWxsYmFjaykoc3RydWN0IGZjX2xwb3J0ICosCisJCQkJCQkgIGVudW0gZmNfZGlzY19ldmVudCksCisJCQkJIHN0cnVjdCBmY19scG9ydCAqbHBvcnQpCit7CisJc3RydWN0IGZjX2Rpc2MgKmRpc2MgPSAmbHBvcnQtPmRpc2M7CisJc3RydWN0IGZjb2VfY3RsciAqZmlwID0gZGlzYy0+cHJpdjsKKworCW11dGV4X2xvY2soJmRpc2MtPmRpc2NfbXV0ZXgpOworCWRpc2MtPmRpc2NfY2FsbGJhY2sgPSBjYWxsYmFjazsKKwlkaXNjLT5kaXNjX2lkID0gKGRpc2MtPmRpc2NfaWQgKyAyKSB8IDE7CisJZGlzYy0+cGVuZGluZyA9IDE7CisJc2NoZWR1bGVfd29yaygmZmlwLT50aW1lcl93b3JrKTsKKwltdXRleF91bmxvY2soJmRpc2MtPmRpc2NfbXV0ZXgpOworfQorCisvKioKKyAqIGZjb2VfY3Rscl92bl9kaXNjKCkgLSByZXBvcnQgRklQIFZOX3BvcnQgZGlzY292ZXJ5IHJlc3VsdHMgYWZ0ZXIgY2xhaW0gc3RhdGUuCisgKiBAZmlwOiBUaGUgRkNvRSBjb250cm9sbGVyCisgKgorICogU3RhcnRzIHRoZSBGTE9HSSBhbmQgUExPR0kgbG9naW4gcHJvY2VzcyB0byBlYWNoIGRpc2NvdmVyZWQgcnBvcnQgZm9yIHdoaWNoCisgKiB3ZSd2ZSByZWNlaXZlZCBhdCBsZWFzdCBvbmUgYmVhY29uLgorICogUGVyZm9ybXMgdGhlIGRpc2NvdmVyeSBjb21wbGV0ZSBjYWxsYmFjay4KKyAqLworc3RhdGljIHZvaWQgZmNvZV9jdGxyX3ZuX2Rpc2Moc3RydWN0IGZjb2VfY3RsciAqZmlwKQoreworCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSBmaXAtPmxwOworCXN0cnVjdCBmY19kaXNjICpkaXNjID0gJmxwb3J0LT5kaXNjOworCXN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YTsKKwlzdHJ1Y3QgZmNvZV9ycG9ydCAqZnJwb3J0OworCXZvaWQgKCpjYWxsYmFjaykoc3RydWN0IGZjX2xwb3J0ICosIGVudW0gZmNfZGlzY19ldmVudCk7CisKKwltdXRleF9sb2NrKCZkaXNjLT5kaXNjX211dGV4KTsKKwljYWxsYmFjayA9IGRpc2MtPnBlbmRpbmcgPyBkaXNjLT5kaXNjX2NhbGxiYWNrIDogTlVMTDsKKwlkaXNjLT5wZW5kaW5nID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShyZGF0YSwgJmRpc2MtPnJwb3J0cywgcGVlcnMpIHsKKwkJZnJwb3J0ID0gZmNvZV9jdGxyX3Jwb3J0KHJkYXRhKTsKKwkJaWYgKGZycG9ydC0+dGltZSkKKwkJCWxwb3J0LT50dC5ycG9ydF9sb2dpbihyZGF0YSk7CisJfQorCW11dGV4X3VubG9jaygmZGlzYy0+ZGlzY19tdXRleCk7CisJaWYgKGNhbGxiYWNrKQorCQljYWxsYmFjayhscG9ydCwgRElTQ19FVl9TVUNDRVNTKTsKK30KKworLyoqCisgKiBmY29lX2N0bHJfdm5fdGltZW91dCAtIHRpbWVyIHdvcmsgZnVuY3Rpb24gZm9yIFZOMlZOIG1vZGUuCisgKiBAZmlwOiBUaGUgRkNvRSBjb250cm9sbGVyCisgKi8KK3N0YXRpYyB2b2lkIGZjb2VfY3Rscl92bl90aW1lb3V0KHN0cnVjdCBmY29lX2N0bHIgKmZpcCkKK3sKKwl1bnNpZ25lZCBsb25nIG5leHRfdGltZTsKKwl1OCBtYWNbRVRIX0FMRU5dOworCXUzMiBuZXdfcG9ydF9pZCA9IDA7CisKKwltdXRleF9sb2NrKCZmaXAtPmN0bHJfbXV0ZXgpOworCXN3aXRjaCAoZmlwLT5zdGF0ZSkgeworCWNhc2UgRklQX1NUX1ZOTVBfU1RBUlQ6CisJCWZjb2VfY3Rscl9zZXRfc3RhdGUoZmlwLCBGSVBfU1RfVk5NUF9QUk9CRTEpOworCQlmY29lX2N0bHJfdm5fc2VuZChmaXAsIEZJUF9TQ19WTl9QUk9CRV9SRVEsIGZjb2VfYWxsX3ZuMnZuLCAwKTsKKwkJbmV4dF90aW1lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoRklQX1ZOX1BST0JFX1dBSVQpOworCQlicmVhazsKKwljYXNlIEZJUF9TVF9WTk1QX1BST0JFMToKKwkJZmNvZV9jdGxyX3NldF9zdGF0ZShmaXAsIEZJUF9TVF9WTk1QX1BST0JFMik7CisJCWZjb2VfY3Rscl92bl9zZW5kKGZpcCwgRklQX1NDX1ZOX1BST0JFX1JFUSwgZmNvZV9hbGxfdm4ydm4sIDApOworCQluZXh0X3RpbWUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhGSVBfVk5fQU5OX1dBSVQpOworCQlicmVhazsKKwljYXNlIEZJUF9TVF9WTk1QX1BST0JFMjoKKwkJZmNvZV9jdGxyX3NldF9zdGF0ZShmaXAsIEZJUF9TVF9WTk1QX0NMQUlNKTsKKwkJbmV3X3BvcnRfaWQgPSBmaXAtPnBvcnRfaWQ7CisJCWh0b24yNChtYWMsIEZJUF9WTl9GQ19NQVApOworCQlodG9uMjQobWFjICsgMywgbmV3X3BvcnRfaWQpOworCQlmY29lX2N0bHJfbWFwX2Rlc3QoZmlwKTsKKwkJZmlwLT51cGRhdGVfbWFjKGZpcC0+bHAsIG1hYyk7CisJCWZjb2VfY3Rscl92bl9zZW5kX2NsYWltKGZpcCk7CisJCW5leHRfdGltZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEZJUF9WTl9BTk5fV0FJVCk7CisJCWJyZWFrOworCWNhc2UgRklQX1NUX1ZOTVBfQ0xBSU06CisJCS8qCisJCSAqIFRoaXMgbWF5IGJlIGludm9rZWQgZWl0aGVyIGJ5IHN0YXJ0aW5nIGRpc2NvdmVyeSBzbyBkb24ndAorCQkgKiBnbyB0byB0aGUgbmV4dCBzdGF0ZSB1bmxlc3MgaXQncyBiZWVuIGxvbmcgZW5vdWdoLgorCQkgKi8KKwkJbmV4dF90aW1lID0gZmlwLT5zb2xfdGltZSArIG1zZWNzX3RvX2ppZmZpZXMoRklQX1ZOX0FOTl9XQUlUKTsKKwkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgbmV4dF90aW1lKSkgeworCQkJZmNvZV9jdGxyX3NldF9zdGF0ZShmaXAsIEZJUF9TVF9WTk1QX1VQKTsKKwkJCWZjb2VfY3Rscl92bl9zZW5kKGZpcCwgRklQX1NDX1ZOX0JFQUNPTiwKKwkJCQkJICBmY29lX2FsbF92bjJ2biwgMCk7CisJCQluZXh0X3RpbWUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhGSVBfVk5fQU5OX1dBSVQpOworCQkJZmlwLT5wb3J0X2thX3RpbWUgPSBuZXh0X3RpbWU7CisJCX0KKwkJZmNvZV9jdGxyX3ZuX2Rpc2MoZmlwKTsKKwkJYnJlYWs7CisJY2FzZSBGSVBfU1RfVk5NUF9VUDoKKwkJbmV4dF90aW1lID0gZmNvZV9jdGxyX3ZuX2FnZShmaXApOworCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBmaXAtPnBvcnRfa2FfdGltZSkpIHsKKwkJCWZjb2VfY3Rscl92bl9zZW5kKGZpcCwgRklQX1NDX1ZOX0JFQUNPTiwKKwkJCQkJICBmY29lX2FsbF92bjJ2biwgMCk7CisJCQlmaXAtPnBvcnRfa2FfdGltZSA9IGppZmZpZXMgKworCQkJCSBtc2Vjc190b19qaWZmaWVzKEZJUF9WTl9CRUFDT05fSU5UICsKKwkJCQkJKHJhbmRvbTMyKCkgJSBGSVBfVk5fQkVBQ09OX0ZVWlopKTsKKwkJfQorCQlpZiAodGltZV9iZWZvcmUoZmlwLT5wb3J0X2thX3RpbWUsIG5leHRfdGltZSkpCisJCQluZXh0X3RpbWUgPSBmaXAtPnBvcnRfa2FfdGltZTsKKwkJYnJlYWs7CisJY2FzZSBGSVBfU1RfTElOS19XQUlUOgorCQlnb3RvIHVubG9jazsKKwlkZWZhdWx0OgorCQlXQVJOKDEsICJ1bmV4cGVjdGVkIHN0YXRlICVkIiwgZmlwLT5zdGF0ZSk7CisJCWdvdG8gdW5sb2NrOworCX0KKwltb2RfdGltZXIoJmZpcC0+dGltZXIsIG5leHRfdGltZSk7Cit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZmaXAtPmN0bHJfbXV0ZXgpOworCisJLyogSWYgcG9ydCBJRCBpcyBuZXcsIG5vdGlmeSBsb2NhbCBwb3J0IGFmdGVyIGRyb3BwaW5nIGN0bHJfbXV0ZXggKi8KKwlpZiAobmV3X3BvcnRfaWQpCisJCWZjX2xwb3J0X3NldF9sb2NhbF9pZChmaXAtPmxwLCBuZXdfcG9ydF9pZCk7Cit9CisKKy8qKgogICogZmNvZV9saWJmY19jb25maWcoKSAtIFNldHMgdXAgbGliZmMgcmVsYXRlZCBwcm9wZXJ0aWVzIGZvciBsb2NhbCBwb3J0CiAgKiBAbHA6IFRoZSBsb2NhbCBwb3J0IHRvIGNvbmZpZ3VyZSBsaWJmYyBmb3IKKyAqIEBmaXA6IFRoZSBGQ29FIGNvbnRyb2xsZXIgaW4gdXNlIGJ5IHRoZSBsb2NhbCBwb3J0CiAgKiBAdHQ6IFRoZSBsaWJmYyBmdW5jdGlvbiB0ZW1wbGF0ZQorICogQGluaXRfZmNwOiBJZiBub24temVybywgdGhlIEZDUCBwb3J0aW9uIG9mIGxpYmZjIHNob3VsZCBiZSBpbml0aWFsaXplZAogICoKICAqIFJldHVybnMgOiAwIGZvciBzdWNjZXNzCiAgKi8KLWludCBmY29lX2xpYmZjX2NvbmZpZyhzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LAotCQkgICAgICBzdHJ1Y3QgbGliZmNfZnVuY3Rpb25fdGVtcGxhdGUgKnR0KQoraW50IGZjb2VfbGliZmNfY29uZmlnKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsIHN0cnVjdCBmY29lX2N0bHIgKmZpcCwKKwkJICAgICAgY29uc3Qgc3RydWN0IGxpYmZjX2Z1bmN0aW9uX3RlbXBsYXRlICp0dCwgaW50IGluaXRfZmNwKQogewogCS8qIFNldCB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgc2V0IGJ5IHRoZSBMTEREICovCiAJbWVtY3B5KCZscG9ydC0+dHQsIHR0LCBzaXplb2YoKnR0KSk7Ci0JaWYgKGZjX2ZjcF9pbml0KGxwb3J0KSkKKwlpZiAoaW5pdF9mY3AgJiYgZmNfZmNwX2luaXQobHBvcnQpKQogCQlyZXR1cm4gLUVOT01FTTsKIAlmY19leGNoX2luaXQobHBvcnQpOwogCWZjX2Vsc2N0X2luaXQobHBvcnQpOwogCWZjX2xwb3J0X2luaXQobHBvcnQpOworCWlmIChmaXAtPm1vZGUgPT0gRklQX01PREVfVk4yVk4pCisJCWxwb3J0LT5ycG9ydF9wcml2X3NpemUgPSBzaXplb2Yoc3RydWN0IGZjb2VfcnBvcnQpOwogCWZjX3Jwb3J0X2luaXQobHBvcnQpOwotCWZjX2Rpc2NfaW5pdChscG9ydCk7Ci0KKwlpZiAoZmlwLT5tb2RlID09IEZJUF9NT0RFX1ZOMlZOKSB7CisJCWxwb3J0LT5wb2ludF90b19tdWx0aXBvaW50ID0gMTsKKwkJbHBvcnQtPnR0LmRpc2NfcmVjdl9yZXEgPSBmY29lX2N0bHJfZGlzY19yZWN2OworCQlscG9ydC0+dHQuZGlzY19zdGFydCA9IGZjb2VfY3Rscl9kaXNjX3N0YXJ0OworCQlscG9ydC0+dHQuZGlzY19zdG9wID0gZmNvZV9jdGxyX2Rpc2Nfc3RvcDsKKwkJbHBvcnQtPnR0LmRpc2Nfc3RvcF9maW5hbCA9IGZjb2VfY3Rscl9kaXNjX3N0b3BfZmluYWw7CisJCW11dGV4X2luaXQoJmxwb3J0LT5kaXNjLmRpc2NfbXV0ZXgpOworCQlJTklUX0xJU1RfSEVBRCgmbHBvcnQtPmRpc2MucnBvcnRzKTsKKwkJbHBvcnQtPmRpc2MucHJpdiA9IGZpcDsKKwl9IGVsc2UgeworCQlmY19kaXNjX2luaXQobHBvcnQpOworCX0KIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGZjb2VfbGliZmNfY29uZmlnKTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY19tYWluLmMgYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX21haW4uYwppbmRleCAyNjVlNzNkLi45ZWI3YTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX21haW4uYworKysgYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX21haW4uYwpAQCAtNjE3LDcgKzYxNyw2IEBACiAJZm5pYy0+Y3Rsci5zZW5kID0gZm5pY19ldGhfc2VuZDsKIAlmbmljLT5jdGxyLnVwZGF0ZV9tYWMgPSBmbmljX3VwZGF0ZV9tYWM7CiAJZm5pYy0+Y3Rsci5nZXRfc3JjX2FkZHIgPSBmbmljX2dldF9tYWM7Ci0JZmNvZV9jdGxyX2luaXQoJmZuaWMtPmN0bHIpOwogCWlmIChmbmljLT5jb25maWcuZmxhZ3MgJiBWRkNGX0ZJUF9DQVBBQkxFKSB7CiAJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIGZuaWMtPmxwb3J0LT5ob3N0LAogCQkJICAgICAiZmlybXdhcmUgc3VwcG9ydHMgRklQXG4iKTsKQEAgLTYyNSwxMCArNjI0LDExIEBACiAJCXZuaWNfZGV2X3BhY2tldF9maWx0ZXIoZm5pYy0+dmRldiwgMSwgMSwgMCwgMCwgMCk7CiAJCXZuaWNfZGV2X2FkZF9hZGRyKGZuaWMtPnZkZXYsIEZJUF9BTExfRU5PREVfTUFDUyk7CiAJCXZuaWNfZGV2X2FkZF9hZGRyKGZuaWMtPnZkZXYsIGZuaWMtPmN0bHIuY3RsX3NyY19hZGRyKTsKKwkJZmNvZV9jdGxyX2luaXQoJmZuaWMtPmN0bHIsIEZJUF9NT0RFX0FVVE8pOwogCX0gZWxzZSB7CiAJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIGZuaWMtPmxwb3J0LT5ob3N0LAogCQkJICAgICAiZmlybXdhcmUgdXNlcyBub24tRklQIG1vZGVcbiIpOwotCQlmbmljLT5jdGxyLm1vZGUgPSBGSVBfU1RfTk9OX0ZJUDsKKwkJZmNvZV9jdGxyX2luaXQoJmZuaWMtPmN0bHIsIEZJUF9NT0RFX05PTl9GSVApOwogCX0KIAlmbmljLT5zdGF0ZSA9IEZOSUNfSU5fRkNfTU9ERTsKIApAQCAtNjczLDcgKzY3Myw2IEBACiAJLyogU3RhcnQgbG9jYWwgcG9ydCBpbml0aWF0aWFsaXphdGlvbiAqLwogCiAJbHAtPmxpbmtfdXAgPSAwOwotCWxwLT50dCA9IGZuaWNfdHJhbnNwb3J0X3RlbXBsYXRlOwogCiAJbHAtPm1heF9yZXRyeV9jb3VudCA9IGZuaWMtPmNvbmZpZy5mbG9naV9yZXRyaWVzOwogCWxwLT5tYXhfcnBvcnRfcmV0cnlfY291bnQgPSBmbmljLT5jb25maWcucGxvZ2lfcmV0cmllczsKQEAgLTY4OSwxMSArNjg4LDcgQEAKIAlmY19zZXRfd3dubihscCwgZm5pYy0+Y29uZmlnLm5vZGVfd3duKTsKIAlmY19zZXRfd3dwbihscCwgZm5pYy0+Y29uZmlnLnBvcnRfd3duKTsKIAotCWZjX2xwb3J0X2luaXQobHApOwotCWZjX2V4Y2hfaW5pdChscCk7Ci0JZmNfZWxzY3RfaW5pdChscCk7Ci0JZmNfcnBvcnRfaW5pdChscCk7Ci0JZmNfZGlzY19pbml0KGxwKTsKKwlmY29lX2xpYmZjX2NvbmZpZyhscCwgJmZuaWMtPmN0bHIsICZmbmljX3RyYW5zcG9ydF90ZW1wbGF0ZSwgMCk7CiAKIAlpZiAoIWZjX2V4Y2hfbWdyX2FsbG9jKGxwLCBGQ19DTEFTU18zLCBGQ1BJT19IT1NUX0VYQ0hfUkFOR0VfU1RBUlQsCiAJCQkgICAgICAgRkNQSU9fSE9TVF9FWENIX1JBTkdFX0VORCwgTlVMTCkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY19zY3NpLmMKaW5kZXggM2NjNDdjNi4uMTk4Y2JhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY19zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY19zY3NpLmMKQEAgLTEyNDYsMTEgKzEyNDYsMTAgQEAKIAlscCA9IHNob3N0X3ByaXYoc2MtPmRldmljZS0+aG9zdCk7CiAKIAlmbmljID0gbHBvcnRfcHJpdihscCk7Ci0JRk5JQ19TQ1NJX0RCRyhLRVJOX0RFQlVHLAotCQkgICAgICBmbmljLT5scG9ydC0+aG9zdCwKLQkJICAgICAgIkFib3J0IENtZCBjYWxsZWQgRkNJRCAweCV4LCBMVU4gMHgleCBUQUcgJWRcbiIsCi0JCSAgICAgIChzdGFyZ2V0X3RvX3Jwb3J0KHNjc2lfdGFyZ2V0KHNjLT5kZXZpY2UpKSktPnBvcnRfaWQsCi0JCSAgICAgIHNjLT5kZXZpY2UtPmx1biwgc2MtPnJlcXVlc3QtPnRhZyk7CisJcnBvcnQgPSBzdGFyZ2V0X3RvX3Jwb3J0KHNjc2lfdGFyZ2V0KHNjLT5kZXZpY2UpKTsKKwlGTklDX1NDU0lfREJHKEtFUk5fREVCVUcsIGZuaWMtPmxwb3J0LT5ob3N0LAorCQkJIkFib3J0IENtZCBjYWxsZWQgRkNJRCAweCV4LCBMVU4gMHgleCBUQUcgJWRcbiIsCisJCQlycG9ydC0+cG9ydF9pZCwgc2MtPmRldmljZS0+bHVuLCBzYy0+cmVxdWVzdC0+dGFnKTsKIAogCWlmIChscC0+c3RhdGUgIT0gTFBPUlRfU1RfUkVBRFkgfHwgIShscC0+bGlua191cCkpIHsKIAkJcmV0ID0gRkFJTEVEOwpAQCAtMTI5OSw3ICsxMjk4LDYgQEAKIAkgKiBwb3J0IGlzIHVwLCB0aGVuIHNlbmQgYWJ0cyB0byB0aGUgcmVtb3RlIHBvcnQgdG8gdGVybWluYXRlCiAJICogdGhlIElPLiBFbHNlLCBqdXN0IGxvY2FsbHkgdGVybWluYXRlIHRoZSBJTyBpbiB0aGUgZmlybXdhcmUKIAkgKi8KLQlycG9ydCA9IHN0YXJnZXRfdG9fcnBvcnQoc2NzaV90YXJnZXQoc2MtPmRldmljZSkpOwogCWlmIChmY19yZW1vdGVfcG9ydF9jaGtyZWFkeShycG9ydCkgPT0gMCkKIAkJdGFza19yZXEgPSBGQ1BJT19JVE1GX0FCVF9UQVNLOwogCWVsc2UKQEAgLTE0MTgsNyArMTQxNiw2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpzYzsKLQlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OwogCXN0cnVjdCBzY3NpX2x1biBmY19sdW47CiAJc3RydWN0IHNjc2lfZGV2aWNlICpsdW5fZGV2ID0gbHJfc2MtPmRldmljZTsKIAlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyh0bV9kb25lKTsKQEAgLTE0NTgsNyArMTQ1NSw2IEBACiAKIAkJLyogTm93IHF1ZXVlIHRoZSBhYm9ydCBjb21tYW5kIHRvIGZpcm13YXJlICovCiAJCWludF90b19zY3NpbHVuKHNjLT5kZXZpY2UtPmx1biwgJmZjX2x1bik7Ci0JCXJwb3J0ID0gc3RhcmdldF90b19ycG9ydChzY3NpX3RhcmdldChzYy0+ZGV2aWNlKSk7CiAKIAkJaWYgKGZuaWNfcXVldWVfYWJvcnRfaW9fcmVxKGZuaWMsIHRhZywKIAkJCQkJICAgIEZDUElPX0lUTUZfQUJUX1RBU0tfVEVSTSwKQEAgLTE1MjgsMTggKzE1MjQsMTYgQEAKIAlscCA9IHNob3N0X3ByaXYoc2MtPmRldmljZS0+aG9zdCk7CiAKIAlmbmljID0gbHBvcnRfcHJpdihscCk7Ci0JRk5JQ19TQ1NJX0RCRyhLRVJOX0RFQlVHLAotCQkgICAgICBmbmljLT5scG9ydC0+aG9zdCwKLQkJICAgICAgIkRldmljZSByZXNldCBjYWxsZWQgRkNJRCAweCV4LCBMVU4gMHgleFxuIiwKLQkJICAgICAgKHN0YXJnZXRfdG9fcnBvcnQoc2NzaV90YXJnZXQoc2MtPmRldmljZSkpKS0+cG9ydF9pZCwKLQkJICAgICAgc2MtPmRldmljZS0+bHVuKTsKIAorCXJwb3J0ID0gc3RhcmdldF90b19ycG9ydChzY3NpX3RhcmdldChzYy0+ZGV2aWNlKSk7CisJRk5JQ19TQ1NJX0RCRyhLRVJOX0RFQlVHLCBmbmljLT5scG9ydC0+aG9zdCwKKwkJCSJEZXZpY2UgcmVzZXQgY2FsbGVkIEZDSUQgMHgleCwgTFVOIDB4JXhcbiIsCisJCQlycG9ydC0+cG9ydF9pZCwgc2MtPmRldmljZS0+bHVuKTsKIAogCWlmIChscC0+c3RhdGUgIT0gTFBPUlRfU1RfUkVBRFkgfHwgIShscC0+bGlua191cCkpCiAJCWdvdG8gZm5pY19kZXZpY2VfcmVzZXRfZW5kOwogCiAJLyogQ2hlY2sgaWYgcmVtb3RlIHBvcnQgdXAgKi8KLQlycG9ydCA9IHN0YXJnZXRfdG9fcnBvcnQoc2NzaV90YXJnZXQoc2MtPmRldmljZSkpOwogCWlmIChmY19yZW1vdGVfcG9ydF9jaGtyZWFkeShycG9ydCkpCiAJCWdvdG8gZm5pY19kZXZpY2VfcmVzZXRfZW5kOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaG9zdHMuYyBiL2RyaXZlcnMvc2NzaS9ob3N0cy5jCmluZGV4IDY2NjBmYTkuLjhhOGY4MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ob3N0cy5jCisrKyBiL2RyaXZlcnMvc2NzaS9ob3N0cy5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3RyYW5zcG9ydF9jbGFzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KIAogI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgpAQCAtMTU2LDYgKzE1Nyw3IEBACiB2b2lkIHNjc2lfcmVtb3ZlX2hvc3Qoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwogCW11dGV4X2xvY2soJnNob3N0LT5zY2FuX211dGV4KTsKIAlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJaWYgKHNjc2lfaG9zdF9zZXRfc3RhdGUoc2hvc3QsIFNIT1NUX0NBTkNFTCkpCkBAIC0xNjUsNiArMTY3LDggQEAKIAkJCXJldHVybjsKIAkJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCisJc2NzaV9hdXRvcG1fZ2V0X2hvc3Qoc2hvc3QpOwogCXNjc2lfZm9yZ2V0X2hvc3Qoc2hvc3QpOwogCW11dGV4X3VubG9jaygmc2hvc3QtPnNjYW5fbXV0ZXgpOwogCXNjc2lfcHJvY19ob3N0X3JtKHNob3N0KTsKQEAgLTIxNiwxMiArMjIwLDE0IEBACiAJCXNob3N0LT5zaG9zdF9nZW5kZXYucGFyZW50ID0gZGV2ID8gZGV2IDogJnBsYXRmb3JtX2J1czsKIAlzaG9zdC0+ZG1hX2RldiA9IGRtYV9kZXY7CiAKLQlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoJnNob3N0LT5zaG9zdF9nZW5kZXYpOwotCiAJZXJyb3IgPSBkZXZpY2VfYWRkKCZzaG9zdC0+c2hvc3RfZ2VuZGV2KTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0OwogCisJcG1fcnVudGltZV9zZXRfYWN0aXZlKCZzaG9zdC0+c2hvc3RfZ2VuZGV2KTsKKwlwbV9ydW50aW1lX2VuYWJsZSgmc2hvc3QtPnNob3N0X2dlbmRldik7CisJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKCZzaG9zdC0+c2hvc3RfZ2VuZGV2KTsKKwogCXNjc2lfaG9zdF9zZXRfc3RhdGUoc2hvc3QsIFNIT1NUX1JVTk5JTkcpOwogCWdldF9kZXZpY2Uoc2hvc3QtPnNob3N0X2dlbmRldi5wYXJlbnQpOwogCkBAIC0zMjUsNyArMzMxLDYgQEAKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKIAlnZnBfdCBnZnBfbWFzayA9IEdGUF9LRVJORUw7Ci0JaW50IHJ2YWw7CiAKIAlpZiAoc2h0LT51bmNoZWNrZWRfaXNhX2RtYSAmJiBwcml2c2l6ZSkKIAkJZ2ZwX21hc2sgfD0gX19HRlBfRE1BOwpAQCAtNDIwLDcgKzQyNSw4IEBACiAJc2hvc3QtPmVoYW5kbGVyID0ga3RocmVhZF9ydW4oc2NzaV9lcnJvcl9oYW5kbGVyLCBzaG9zdCwKIAkJCSJzY3NpX2VoXyVkIiwgc2hvc3QtPmhvc3Rfbm8pOwogCWlmIChJU19FUlIoc2hvc3QtPmVoYW5kbGVyKSkgewotCQlydmFsID0gUFRSX0VSUihzaG9zdC0+ZWhhbmRsZXIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzY3NpJWQ6IGVycm9yIGhhbmRsZXIgdGhyZWFkIGZhaWxlZCB0byBzcGF3biwgZXJyb3IgPSAlbGRcbiIsCisJCQlzaG9zdC0+aG9zdF9ubywgUFRSX0VSUihzaG9zdC0+ZWhhbmRsZXIpKTsKIAkJZ290byBmYWlsX2tmcmVlOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2hwc2EuYyBiL2RyaXZlcnMvc2NzaS9ocHNhLmMKaW5kZXggYzAxNjQyNmIuLjRmNTU1MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ocHNhLmMKKysrIGIvZHJpdmVycy9zY3NpL2hwc2EuYwpAQCAtODYsMTAgKzg2LDE3IEBACiAJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NFLCAgICAgMHgxMDNDLCAweDMyNGF9LAogCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTRSwgICAgIDB4MTAzQywgMHgzMjRifSwKIAl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0UsICAgICAweDEwM0MsIDB4MzIzM30sCisJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NFLCAgICAgMHgxMDNDLCAweDMyNTB9LAorCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTRSwgICAgIDB4MTAzQywgMHgzMjUxfSwKKwl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0UsICAgICAweDEwM0MsIDB4MzI1Mn0sCisJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NFLCAgICAgMHgxMDNDLCAweDMyNTN9LAorCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTRSwgICAgIDB4MTAzQywgMHgzMjU0fSwKICNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9DSVNTRiAweDMzM2YKIAl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0YsICAgICAweDEwM0MsIDB4MzMzRn0sCiAJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfQU5ZX0lELCAgICAgICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAogCQlQQ0lfQ0xBU1NfU1RPUkFHRV9SQUlEIDw8IDgsIDB4ZmZmZiA8PCA4LCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QQVEsICAgICBQQ0lfQU5ZX0lELCAgICAgICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCQlQQ0lfQ0xBU1NfU1RPUkFHRV9SQUlEIDw8IDgsIDB4ZmZmZiA8PCA4LCAwfSwKIAl7MCx9CiB9OwogCkBAIC0xMDksMTIgKzExNiwxOCBAQAogCXsweDMyNGIxMDNDLCAiU21hcnQgQXJyYXkgUDcxMW0iLCAmU0E1X2FjY2Vzc30sCiAJezB4MzIzMzEwM0MsICJTdG9yYWdlV29ya3MgUDEyMTBtIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMzM0YxMDNDLCAiU3RvcmFnZVdvcmtzIFAxMjEwbSIsICZTQTVfYWNjZXNzfSwKKwl7MHgzMjUwMTAzQywgIlNtYXJ0IEFycmF5IiwgJlNBNV9hY2Nlc3N9LAorCXsweDMyNTAxMTNDLCAiU21hcnQgQXJyYXkiLCAmU0E1X2FjY2Vzc30sCisJezB4MzI1MDEyM0MsICJTbWFydCBBcnJheSIsICZTQTVfYWNjZXNzfSwKKwl7MHgzMjUwMTMzQywgIlNtYXJ0IEFycmF5IiwgJlNBNV9hY2Nlc3N9LAorCXsweDMyNTAxNDNDLCAiU21hcnQgQXJyYXkiLCAmU0E1X2FjY2Vzc30sCiAJezB4RkZGRjEwM0MsICJVbmtub3duIFNtYXJ0IEFycmF5IiwgJlNBNV9hY2Nlc3N9LAogfTsKIAogc3RhdGljIGludCBudW1iZXJfb2ZfY29udHJvbGxlcnM7CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBkb19ocHNhX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBkb19ocHNhX2ludHJfaW50eChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOworc3RhdGljIGlycXJldHVybl90IGRvX2hwc2FfaW50cl9tc2koaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyBpbnQgaHBzYV9pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCAqYXJnKTsKIHN0YXRpYyB2b2lkIHN0YXJ0X2lvKHN0cnVjdCBjdGxyX2luZm8gKmgpOwogCkBAIC0xNDgsNiArMTYxLDggQEAKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKIHN0YXRpYyBzc2l6ZV90IHVuaXF1ZV9pZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKK3N0YXRpYyBzc2l6ZV90IGhvc3Rfc2hvd19maXJtd2FyZV9yZXZpc2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKIHN0YXRpYyB2b2lkIGhwc2FfdXBkYXRlX3Njc2lfZGV2aWNlcyhzdHJ1Y3QgY3Rscl9pbmZvICpoLCBpbnQgaG9zdG5vKTsKIHN0YXRpYyBzc2l6ZV90IGhvc3Rfc3RvcmVfcmVzY2FuKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKQEAgLTE1OCwxMyArMTczLDIxIEBACiAvKiBwZXJmb3JtYW50IG1vZGUgaGVscGVyIGZ1bmN0aW9ucyAqLwogc3RhdGljIHZvaWQgY2FsY19idWNrZXRfbWFwKGludCAqYnVja2V0LCBpbnQgbnVtX2J1Y2tldHMsCiAJaW50IG5zZ3MsIGludCAqYnVja2V0X21hcCk7Ci1zdGF0aWMgdm9pZCBocHNhX3B1dF9jdGxyX2ludG9fcGVyZm9ybWFudF9tb2RlKHN0cnVjdCBjdGxyX2luZm8gKmgpOworc3RhdGljIF9fZGV2aW5pdCB2b2lkIGhwc2FfcHV0X2N0bHJfaW50b19wZXJmb3JtYW50X21vZGUoc3RydWN0IGN0bHJfaW5mbyAqaCk7CiBzdGF0aWMgaW5saW5lIHUzMiBuZXh0X2NvbW1hbmQoc3RydWN0IGN0bHJfaW5mbyAqaCk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBocHNhX2ZpbmRfY2ZnX2FkZHJzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCXZvaWQgX19pb21lbSAqdmFkZHIsIHUzMiAqY2ZnX2Jhc2VfYWRkciwgdTY0ICpjZmdfYmFzZV9hZGRyX2luZGV4LAorCXU2NCAqY2ZnX29mZnNldCk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBocHNhX3BjaV9maW5kX21lbW9yeV9CQVIoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJdW5zaWduZWQgbG9uZyAqbWVtb3J5X2Jhcik7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBocHNhX2xvb2t1cF9ib2FyZF9pZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTMyICpib2FyZF9pZCk7CiAKIHN0YXRpYyBERVZJQ0VfQVRUUihyYWlkX2xldmVsLCBTX0lSVUdPLCByYWlkX2xldmVsX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGx1bmlkLCBTX0lSVUdPLCBsdW5pZF9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUih1bmlxdWVfaWQsIFNfSVJVR08sIHVuaXF1ZV9pZF9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihyZXNjYW4sIFNfSVdVU1IsIE5VTEwsIGhvc3Rfc3RvcmVfcmVzY2FuKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihmaXJtd2FyZV9yZXZpc2lvbiwgU19JUlVHTywKKwlob3N0X3Nob3dfZmlybXdhcmVfcmV2aXNpb24sIE5VTEwpOwogCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmhwc2Ffc2Rldl9hdHRyc1tdID0gewogCSZkZXZfYXR0cl9yYWlkX2xldmVsLApAQCAtMTc1LDYgKzE5OCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqaHBzYV9zaG9zdF9hdHRyc1tdID0gewogCSZkZXZfYXR0cl9yZXNjYW4sCisJJmRldl9hdHRyX2Zpcm13YXJlX3JldmlzaW9uLAogCU5VTEwsCiB9OwogCkBAIC0yNjAsNiArMjg0LDIxIEBACiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgc3NpemVfdCBob3N0X3Nob3dfZmlybXdhcmVfcmV2aXNpb24oc3RydWN0IGRldmljZSAqZGV2LAorCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgY3Rscl9pbmZvICpoOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwl1bnNpZ25lZCBjaGFyICpmd3JldjsKKworCWggPSBzaG9zdF90b19oYmEoc2hvc3QpOworCWlmICghaC0+aGJhX2lucXVpcnlfZGF0YSkKKwkJcmV0dXJuIDA7CisJZndyZXYgPSAmaC0+aGJhX2lucXVpcnlfZGF0YVszMl07CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMjAsICIlYyVjJWMlY1xuIiwKKwkJZndyZXZbMF0sIGZ3cmV2WzFdLCBmd3JldlsyXSwgZndyZXZbM10pOworfQorCiAvKiBFbnF1ZXVpbmcgYW5kIGRlcXVldWluZyBmdW5jdGlvbnMgZm9yIGNtZGxpc3RzLiAqLwogc3RhdGljIGlubGluZSB2b2lkIGFkZFEoc3RydWN0IGhsaXN0X2hlYWQgKmxpc3QsIHN0cnVjdCBDb21tYW5kTGlzdCAqYykKIHsKQEAgLTE0NDAsMTIgKzE0NzksNiBAQAogCQlnb3RvIGJhaWxfb3V0OwogCX0KIAotCS8qIEFzIGEgc2lkZSBlZmZlY3QsIHJlY29yZCB0aGUgZmlybXdhcmUgdmVyc2lvbiBudW1iZXIKLQkgKiBpZiB3ZSBoYXBwZW4gdG8gYmUgdGFsa2luZyB0byB0aGUgUkFJRCBjb250cm9sbGVyLgotCSAqLwotCWlmIChpc19oYmFfbHVuaWQoc2NzaTNhZGRyKSkKLQkJbWVtY3B5KGgtPmZpcm1fdmVyLCAmaW5xX2J1ZmZbMzJdLCA0KTsKLQogCXRoaXNfZGV2aWNlLT5kZXZ0eXBlID0gKGlucV9idWZmWzBdICYgMHgxZik7CiAJbWVtY3B5KHRoaXNfZGV2aWNlLT5zY3NpM2FkZHIsIHNjc2kzYWRkciwgOCk7CiAJbWVtY3B5KHRoaXNfZGV2aWNlLT52ZW5kb3IsICZpbnFfYnVmZls4XSwKQEAgLTI4MjYsOSArMjg1OSw4IEBACiAKIHN0YXRpYyBpbmxpbmUgbG9uZyBpbnRlcnJ1cHRfbm90X2Zvcl91cyhzdHJ1Y3QgY3Rscl9pbmZvICpoKQogewotCXJldHVybiAhKGgtPm1zaV92ZWN0b3IgfHwgaC0+bXNpeF92ZWN0b3IpICYmCi0JCSgoaC0+YWNjZXNzLmludHJfcGVuZGluZyhoKSA9PSAwKSB8fAotCQkoaC0+aW50ZXJydXB0c19lbmFibGVkID09IDApKTsKKwlyZXR1cm4gKGgtPmFjY2Vzcy5pbnRyX3BlbmRpbmcoaCkgPT0gMCkgfHwKKwkJKGgtPmludGVycnVwdHNfZW5hYmxlZCA9PSAwKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgYmFkX3RhZyhzdHJ1Y3QgY3Rscl9pbmZvICpoLCB1MzIgdGFnX2luZGV4LApAQCAtMjkwMiw3ICsyOTM0LDcgQEAKIAlyZXR1cm4gbmV4dF9jb21tYW5kKGgpOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgZG9faHBzYV9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpcnFyZXR1cm5fdCBkb19ocHNhX2ludHJfaW50eChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IGN0bHJfaW5mbyAqaCA9IGRldl9pZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjkxMSw2ICsyOTQzLDI2IEBACiAJaWYgKGludGVycnVwdF9ub3RfZm9yX3VzKGgpKQogCQlyZXR1cm4gSVJRX05PTkU7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKKwl3aGlsZSAoaW50ZXJydXB0X3BlbmRpbmcoaCkpIHsKKwkJcmF3X3RhZyA9IGdldF9uZXh0X2NvbXBsZXRpb24oaCk7CisJCXdoaWxlIChyYXdfdGFnICE9IEZJRk9fRU1QVFkpIHsKKwkJCWlmIChocHNhX3RhZ19jb250YWluc19pbmRleChyYXdfdGFnKSkKKwkJCQlyYXdfdGFnID0gcHJvY2Vzc19pbmRleGVkX2NtZChoLCByYXdfdGFnKTsKKwkJCWVsc2UKKwkJCQlyYXdfdGFnID0gcHJvY2Vzc19ub25pbmRleGVkX2NtZChoLCByYXdfdGFnKTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZG9faHBzYV9pbnRyX21zaShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGN0bHJfaW5mbyAqaCA9IGRldl9pZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiByYXdfdGFnOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKIAlyYXdfdGFnID0gZ2V0X25leHRfY29tcGxldGlvbihoKTsKIAl3aGlsZSAocmF3X3RhZyAhPSBGSUZPX0VNUFRZKSB7CiAJCWlmIChocHNhX3RhZ19jb250YWluc19pbmRleChyYXdfdGFnKSkKQEAgLTMwNTIsMTcgKzMxMDQsNzUgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogVGhpcyBkb2VzIGEgaGFyZCByZXNldCBvZiB0aGUgY29udHJvbGxlciB1c2luZyBQQ0kgcG93ZXIgbWFuYWdlbWVudAotICogc3RhdGVzLgotICovCi1zdGF0aWMgX19kZXZpbml0IGludCBocHNhX2hhcmRfcmVzZXRfY29udHJvbGxlcihzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyBpbnQgaHBzYV9jb250cm9sbGVyX2hhcmRfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJdm9pZCAqIF9faW9tZW0gdmFkZHIsIGJvb2wgdXNlX2Rvb3JiZWxsKQogewotCXUxNiBwbWNzciwgc2F2ZWRfY29uZmlnX3NwYWNlWzMyXTsKLQlpbnQgaSwgcG9zOworCXUxNiBwbWNzcjsKKwlpbnQgcG9zOwogCi0JZGV2X2luZm8oJnBkZXYtPmRldiwgInVzaW5nIFBDSSBQTSB0byByZXNldCBjb250cm9sbGVyXG4iKTsKKwlpZiAodXNlX2Rvb3JiZWxsKSB7CisJCS8qIEZvciBldmVyeXRoaW5nIGFmdGVyIHRoZSBQNjAwLCB0aGUgUENJIHBvd2VyIHN0YXRlIG1ldGhvZAorCQkgKiBvZiByZXNldHRpbmcgdGhlIGNvbnRyb2xsZXIgZG9lc24ndCB3b3JrLCBzbyB3ZSBoYXZlIHRoaXMKKwkJICogb3RoZXIgd2F5IHVzaW5nIHRoZSBkb29yYmVsbCByZWdpc3Rlci4KKwkJICovCisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ1c2luZyBkb29yYmVsbCB0byByZXNldCBjb250cm9sbGVyXG4iKTsKKwkJd3JpdGVsKERPT1JCRUxMX0NUTFJfUkVTRVQsIHZhZGRyICsgU0E1X0RPT1JCRUxMKTsKKwkJbXNsZWVwKDEwMDApOworCX0gZWxzZSB7IC8qIFRyeSB0byBkbyBpdCB0aGUgUENJIHBvd2VyIHN0YXRlIHdheSAqLwogCi0JLyogVGhpcyBpcyB2ZXJ5IG5lYXJseSB0aGUgc2FtZSB0aGluZyBhcworCQkvKiBRdW90aW5nIGZyb20gdGhlIE9wZW4gQ0lTUyBTcGVjaWZpY2F0aW9uOiAiVGhlIFBvd2VyCisJCSAqIE1hbmFnZW1lbnQgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKENTUikgY29udHJvbHMgdGhlIHBvd2VyCisJCSAqIHN0YXRlIG9mIHRoZSBkZXZpY2UuICBUaGUgbm9ybWFsIG9wZXJhdGluZyBzdGF0ZSBpcyBEMCwKKwkJICogQ1NSPTAwaC4gIFRoZSBzb2Z0d2FyZSBvZmYgc3RhdGUgaXMgRDMsIENTUj0wM2guICBUbyByZXNldAorCQkgKiB0aGUgY29udHJvbGxlciwgcGxhY2UgdGhlIGludGVyZmFjZSBkZXZpY2UgaW4gRDMgdGhlbiB0byBEMCwKKwkJICogdGhpcyBjYXVzZXMgYSBzZWNvbmRhcnkgUENJIHJlc2V0IHdoaWNoIHdpbGwgcmVzZXQgdGhlCisJCSAqIGNvbnRyb2xsZXIuIiAqLworCisJCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9QTSk7CisJCWlmIChwb3MgPT0gMCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJocHNhX3Jlc2V0X2NvbnRyb2xsZXI6ICIKKwkJCQkiUENJIFBNIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgInVzaW5nIFBDSSBQTSB0byByZXNldCBjb250cm9sbGVyXG4iKTsKKwkJLyogZW50ZXIgdGhlIEQzaG90IHBvd2VyIG1hbmFnZW1lbnQgc3RhdGUgKi8KKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgcG9zICsgUENJX1BNX0NUUkwsICZwbWNzcik7CisJCXBtY3NyICY9IH5QQ0lfUE1fQ1RSTF9TVEFURV9NQVNLOworCQlwbWNzciB8PSBQQ0lfRDNob3Q7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBwb3MgKyBQQ0lfUE1fQ1RSTCwgcG1jc3IpOworCisJCW1zbGVlcCg1MDApOworCisJCS8qIGVudGVyIHRoZSBEMCBwb3dlciBtYW5hZ2VtZW50IHN0YXRlICovCisJCXBtY3NyICY9IH5QQ0lfUE1fQ1RSTF9TVEFURV9NQVNLOworCQlwbWNzciB8PSBQQ0lfRDA7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBwb3MgKyBQQ0lfUE1fQ1RSTCwgcG1jc3IpOworCisJCW1zbGVlcCg1MDApOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBkb2VzIGEgaGFyZCByZXNldCBvZiB0aGUgY29udHJvbGxlciB1c2luZyBQQ0kgcG93ZXIgbWFuYWdlbWVudAorICogc3RhdGVzIG9yIHRoZSB1c2luZyB0aGUgZG9vcmJlbGwgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyBfX2RldmluaXQgaW50IGhwc2Ffa2R1bXBfaGFyZF9yZXNldF9jb250cm9sbGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXUxNiBzYXZlZF9jb25maWdfc3BhY2VbMzJdOworCXU2NCBjZmdfb2Zmc2V0OworCXUzMiBjZmdfYmFzZV9hZGRyOworCXU2NCBjZmdfYmFzZV9hZGRyX2luZGV4OworCXZvaWQgX19pb21lbSAqdmFkZHI7CisJdW5zaWduZWQgbG9uZyBwYWRkcjsKKwl1MzIgbWlzY19md19zdXBwb3J0LCBhY3RpdmVfdHJhbnNwb3J0OworCWludCByYywgaTsKKwlzdHJ1Y3QgQ2ZnVGFibGUgX19pb21lbSAqY2ZndGFibGU7CisJYm9vbCB1c2VfZG9vcmJlbGw7CisJdTMyIGJvYXJkX2lkOworCisJLyogRm9yIGNvbnRyb2xsZXJzIGFzIG9sZCBhcyB0aGUgUDYwMCwgdGhpcyBpcyB2ZXJ5IG5lYXJseQorCSAqIHRoZSBzYW1lIHRoaW5nIGFzCiAJICoKIAkgKiBwY2lfc2F2ZV9zdGF0ZShwY2lfZGV2KTsKIAkgKiBwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaV9kZXYsIFBDSV9EM2hvdCk7CkBAIC0zMDc2LDQxICszMTg2LDU0IEBACiAJICogdmlvbGF0ZSB0aGUgb3JkZXJpbmcgcmVxdWlyZW1lbnRzIGZvciByZXN0b3JpbmcgdGhlCiAJICogY29uZmlndXJhdGlvbiBzcGFjZSBmcm9tIHRoZSBDQ0lTUyBkb2N1bWVudCAoc2VlIHRoZQogCSAqIGNvbW1lbnQgYmVsb3cpLiAgU28gd2Ugcm9sbCBvdXIgb3duIC4uLi4KKwkgKgorCSAqIEZvciBjb250cm9sbGVycyBuZXdlciB0aGFuIHRoZSBQNjAwLCB0aGUgcGNpIHBvd2VyIHN0YXRlCisJICogbWV0aG9kIG9mIHJlc2V0dGluZyBkb2Vzbid0IHdvcmsgc28gd2UgaGF2ZSBhbm90aGVyIHdheQorCSAqIHVzaW5nIHRoZSBkb29yYmVsbCByZWdpc3Rlci4KIAkgKi8KIAorCS8qIEV4Y2x1ZGUgNjQweCBib2FyZHMuICBUaGVzZSBhcmUgdHdvIHBjaSBkZXZpY2VzIGluIG9uZSBzbG90CisJICogd2hpY2ggc2hhcmUgYSBiYXR0ZXJ5IGJhY2tlZCBjYWNoZSBtb2R1bGUuICBPbmUgY29udHJvbHMgdGhlCisJICogY2FjaGUsIHRoZSBvdGhlciBhY2Nlc3NlcyB0aGUgY2FjaGUgdGhyb3VnaCB0aGUgb25lIHRoYXQgY29udHJvbHMKKwkgKiBpdC4gIElmIHdlIHJlc2V0IHRoZSBvbmUgY29udHJvbGxpbmcgdGhlIGNhY2hlLCB0aGUgb3RoZXIgd2lsbAorCSAqIGxpa2VseSBub3QgYmUgaGFwcHkuICBKdXN0IGZvcmJpZCByZXNldHRpbmcgdGhpcyBjb25qb2luZWQgbWVzcy4KKwkgKiBUaGUgNjQweCBpc24ndCByZWFsbHkgc3VwcG9ydGVkIGJ5IGhwc2EgYW55d2F5LgorCSAqLworCWhwc2FfbG9va3VwX2JvYXJkX2lkKHBkZXYsICZib2FyZF9pZCk7CisJaWYgKGJvYXJkX2lkID09IDB4NDA5QzBFMTEgfHwgYm9hcmRfaWQgPT0gMHg0MDlEMEUxMSkKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKwogCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQogCQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCAyKmksICZzYXZlZF9jb25maWdfc3BhY2VbaV0pOwogCi0JcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX1BNKTsKLQlpZiAocG9zID09IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJImhwc2FfcmVzZXRfY29udHJvbGxlcjogUENJIFBNIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIGZpbmQgdGhlIGZpcnN0IG1lbW9yeSBCQVIsIHNvIHdlIGNhbiBmaW5kIHRoZSBjZmcgdGFibGUgKi8KKwlyYyA9IGhwc2FfcGNpX2ZpbmRfbWVtb3J5X0JBUihwZGV2LCAmcGFkZHIpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCXZhZGRyID0gcmVtYXBfcGNpX21lbShwYWRkciwgMHgyNTApOworCWlmICghdmFkZHIpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogZmluZCBjZmd0YWJsZSBpbiBvcmRlciB0byBjaGVjayBpZiByZXNldCB2aWEgZG9vcmJlbGwgaXMgc3VwcG9ydGVkICovCisJcmMgPSBocHNhX2ZpbmRfY2ZnX2FkZHJzKHBkZXYsIHZhZGRyLCAmY2ZnX2Jhc2VfYWRkciwKKwkJCQkJJmNmZ19iYXNlX2FkZHJfaW5kZXgsICZjZmdfb2Zmc2V0KTsKKwlpZiAocmMpCisJCWdvdG8gdW5tYXBfdmFkZHI7CisJY2ZndGFibGUgPSByZW1hcF9wY2lfbWVtKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LAorCQkgICAgICAgY2ZnX2Jhc2VfYWRkcl9pbmRleCkgKyBjZmdfb2Zmc2V0LCBzaXplb2YoKmNmZ3RhYmxlKSk7CisJaWYgKCFjZmd0YWJsZSkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gdW5tYXBfdmFkZHI7CiAJfQogCi0JLyogUXVvdGluZyBmcm9tIHRoZSBPcGVuIENJU1MgU3BlY2lmaWNhdGlvbjogIlRoZSBQb3dlcgotCSAqIE1hbmFnZW1lbnQgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKENTUikgY29udHJvbHMgdGhlIHBvd2VyCi0JICogc3RhdGUgb2YgdGhlIGRldmljZS4gIFRoZSBub3JtYWwgb3BlcmF0aW5nIHN0YXRlIGlzIEQwLAotCSAqIENTUj0wMGguICBUaGUgc29mdHdhcmUgb2ZmIHN0YXRlIGlzIEQzLCBDU1I9MDNoLiAgVG8gcmVzZXQKLQkgKiB0aGUgY29udHJvbGxlciwgcGxhY2UgdGhlIGludGVyZmFjZSBkZXZpY2UgaW4gRDMgdGhlbiB0bwotCSAqIEQwLCB0aGlzIGNhdXNlcyBhIHNlY29uZGFyeSBQQ0kgcmVzZXQgd2hpY2ggd2lsbCByZXNldCB0aGUKLQkgKiBjb250cm9sbGVyLiIKLQkgKi8KKwkvKiBJZiByZXNldCB2aWEgZG9vcmJlbGwgcmVnaXN0ZXIgaXMgc3VwcG9ydGVkLCB1c2UgdGhhdC4gKi8KKwltaXNjX2Z3X3N1cHBvcnQgPSByZWFkbCgmY2ZndGFibGUtPm1pc2NfZndfc3VwcG9ydCk7CisJdXNlX2Rvb3JiZWxsID0gbWlzY19md19zdXBwb3J0ICYgTUlTQ19GV19ET09SQkVMTF9SRVNFVDsKIAotCS8qIGVudGVyIHRoZSBEM2hvdCBwb3dlciBtYW5hZ2VtZW50IHN0YXRlICovCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgcG9zICsgUENJX1BNX0NUUkwsICZwbWNzcik7Ci0JcG1jc3IgJj0gflBDSV9QTV9DVFJMX1NUQVRFX01BU0s7Ci0JcG1jc3IgfD0gUENJX0QzaG90OwotCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBwb3MgKyBQQ0lfUE1fQ1RSTCwgcG1jc3IpOwotCi0JbXNsZWVwKDUwMCk7Ci0KLQkvKiBlbnRlciB0aGUgRDAgcG93ZXIgbWFuYWdlbWVudCBzdGF0ZSAqLwotCXBtY3NyICY9IH5QQ0lfUE1fQ1RSTF9TVEFURV9NQVNLOwotCXBtY3NyIHw9IFBDSV9EMDsKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgcG9zICsgUENJX1BNX0NUUkwsIHBtY3NyKTsKLQotCW1zbGVlcCg1MDApOworCXJjID0gaHBzYV9jb250cm9sbGVyX2hhcmRfcmVzZXQocGRldiwgdmFkZHIsIHVzZV9kb29yYmVsbCk7CisJaWYgKHJjKQorCQlnb3RvIHVubWFwX2NmZ3RhYmxlOwogCiAJLyogUmVzdG9yZSB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UuICBUaGUgT3BlbiBDSVNTCiAJICogU3BlY2lmaWNhdGlvbiBzYXlzLCAiUmVzdG9yZSB0aGUgUENJIENvbmZpZ3VyYXRpb24KQEAgLTMxMjcsNyArMzI1MCwyOSBAQAogCXdtYigpOwogCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCA0LCBzYXZlZF9jb25maWdfc3BhY2VbMl0pOwogCi0JcmV0dXJuIDA7CisJLyogU29tZSBkZXZpY2VzIChub3RhYmx5IHRoZSBIUCBTbWFydCBBcnJheSA1aSBDb250cm9sbGVyKQorCSAgIG5lZWQgYSBsaXR0bGUgcGF1c2UgaGVyZSAqLworCW1zbGVlcChIUFNBX1BPU1RfUkVTRVRfUEFVU0VfTVNFQ1MpOworCisJLyogQ29udHJvbGxlciBzaG91bGQgYmUgaW4gc2ltcGxlIG1vZGUgYXQgdGhpcyBwb2ludC4gIElmIGl0J3Mgbm90LAorCSAqIEl0IG1lYW5zIHdlJ3JlIG9uIG9uZSBvZiB0aG9zZSBjb250cm9sbGVycyB3aGljaCBkb2Vzbid0IHN1cHBvcnQKKwkgKiB0aGUgZG9vcmJlbGwgcmVzZXQgbWV0aG9kIGFuZCBvbiB3aGljaCB0aGUgUENJIHBvd2VyIG1hbmFnZW1lbnQgcmVzZXQKKwkgKiBtZXRob2QgZG9lc24ndCB3b3JrIChQODAwLCBmb3IgZXhhbXBsZS4pCisJICogSW4gdGhvc2UgY2FzZXMsIHByZXRlbmQgdGhlIHJlc2V0IHdvcmtlZCBhbmQgaG9wZSBmb3IgdGhlIGJlc3QuCisJICovCisJYWN0aXZlX3RyYW5zcG9ydCA9IHJlYWRsKCZjZmd0YWJsZS0+VHJhbnNwb3J0QWN0aXZlKTsKKwlpZiAoYWN0aXZlX3RyYW5zcG9ydCAmIFBFUkZPUk1BTlRfTU9ERSkgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIHN1Y2Nlc3NmdWxseSByZXNldCBjb250cm9sbGVyLCIKKwkJCSIgcHJvY2VlZGluZyBhbnl3YXkuXG4iKTsKKwkJcmMgPSAtRU5PVFNVUFA7CisJfQorCit1bm1hcF9jZmd0YWJsZToKKwlpb3VubWFwKGNmZ3RhYmxlKTsKKwordW5tYXBfdmFkZHI6CisJaW91bm1hcCh2YWRkcik7CisJcmV0dXJuIHJjOwogfQogCiAvKgpAQCAtMzEzNSw5ICszMjgwLDkgQEAKICAqICAgdGhlIGlvIGZ1bmN0aW9ucy4KICAqICAgVGhpcyBpcyBmb3IgZGVidWcgb25seS4KICAqLwotI2lmZGVmIEhQU0FfREVCVUcKIHN0YXRpYyB2b2lkIHByaW50X2NmZ190YWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBDZmdUYWJsZSAqdGIpCiB7CisjaWZkZWYgSFBTQV9ERUJVRwogCWludCBpOwogCWNoYXIgdGVtcF9uYW1lWzE3XTsKIApAQCAtMzE2Nyw4ICszMzEyLDggQEAKIAlkZXZfaW5mbyhkZXYsICIgICBTZXJ2ZXIgTmFtZSA9ICVzXG4iLCB0ZW1wX25hbWUpOwogCWRldl9pbmZvKGRldiwgIiAgIEhlYXJ0YmVhdCBDb3VudGVyID0gMHgleFxuXG5cbiIsCiAJCXJlYWRsKCYodGItPkhlYXJ0QmVhdCkpKTsKLX0KICNlbmRpZgkJCQkvKiBIUFNBX0RFQlVHICovCit9CiAKIHN0YXRpYyBpbnQgZmluZF9QQ0lfQkFSX2luZGV4KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBsb25nIHBjaV9iYXJfYWRkcikKIHsKQEAgLTMyMDksOCArMzM1NCw3IEBACiAgKiBjb250cm9sbGVycyB0aGF0IGFyZSBjYXBhYmxlLiBJZiBub3QsIHdlIHVzZSBJTy1BUElDIG1vZGUuCiAgKi8KIAotc3RhdGljIHZvaWQgX19kZXZpbml0IGhwc2FfaW50ZXJydXB0X21vZGUoc3RydWN0IGN0bHJfaW5mbyAqaCwKLQkJCQkJICAgc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUzMiBib2FyZF9pZCkKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBocHNhX2ludGVycnVwdF9tb2RlKHN0cnVjdCBjdGxyX2luZm8gKmgpCiB7CiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKIAlpbnQgZXJyOwpAQCAtMzIxOSwxMyArMzM2MywxMiBAQAogCX07CiAKIAkvKiBTb21lIGJvYXJkcyBhZHZlcnRpc2UgTVNJIGJ1dCBkb24ndCByZWFsbHkgc3VwcG9ydCBpdCAqLwotCWlmICgoYm9hcmRfaWQgPT0gMHg0MDcwMEUxMSkgfHwKLQkgICAgKGJvYXJkX2lkID09IDB4NDA4MDBFMTEpIHx8Ci0JICAgIChib2FyZF9pZCA9PSAweDQwODIwRTExKSB8fCAoYm9hcmRfaWQgPT0gMHg0MDgzMEUxMSkpCisJaWYgKChoLT5ib2FyZF9pZCA9PSAweDQwNzAwRTExKSB8fCAoaC0+Ym9hcmRfaWQgPT0gMHg0MDgwMEUxMSkgfHwKKwkgICAgKGgtPmJvYXJkX2lkID09IDB4NDA4MjBFMTEpIHx8IChoLT5ib2FyZF9pZCA9PSAweDQwODMwRTExKSkKIAkJZ290byBkZWZhdWx0X2ludF9tb2RlOwotCWlmIChwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfTVNJWCkpIHsKLQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIk1TSVhcbiIpOwotCQllcnIgPSBwY2lfZW5hYmxlX21zaXgocGRldiwgaHBzYV9tc2l4X2VudHJpZXMsIDQpOworCWlmIChwY2lfZmluZF9jYXBhYmlsaXR5KGgtPnBkZXYsIFBDSV9DQVBfSURfTVNJWCkpIHsKKwkJZGV2X2luZm8oJmgtPnBkZXYtPmRldiwgIk1TSVhcbiIpOworCQllcnIgPSBwY2lfZW5hYmxlX21zaXgoaC0+cGRldiwgaHBzYV9tc2l4X2VudHJpZXMsIDQpOwogCQlpZiAoIWVycikgewogCQkJaC0+aW50clswXSA9IGhwc2FfbXNpeF9lbnRyaWVzWzBdLnZlY3RvcjsKIAkJCWgtPmludHJbMV0gPSBocHNhX21zaXhfZW50cmllc1sxXS52ZWN0b3I7CkBAIC0zMjM1LDE0NCArMzM3OCwxNTggQEAKIAkJCXJldHVybjsKIAkJfQogCQlpZiAoZXJyID4gMCkgewotCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIm9ubHkgJWQgTVNJLVggdmVjdG9ycyAiCisJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAib25seSAlZCBNU0ktWCB2ZWN0b3JzICIKIAkJCSAgICAgICAiYXZhaWxhYmxlXG4iLCBlcnIpOwogCQkJZ290byBkZWZhdWx0X2ludF9tb2RlOwogCQl9IGVsc2UgewotCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIk1TSS1YIGluaXQgZmFpbGVkICVkXG4iLAorCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgIk1TSS1YIGluaXQgZmFpbGVkICVkXG4iLAogCQkJICAgICAgIGVycik7CiAJCQlnb3RvIGRlZmF1bHRfaW50X21vZGU7CiAJCX0KIAl9Ci0JaWYgKHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9NU0kpKSB7Ci0JCWRldl9pbmZvKCZwZGV2LT5kZXYsICJNU0lcbiIpOwotCQlpZiAoIXBjaV9lbmFibGVfbXNpKHBkZXYpKQorCWlmIChwY2lfZmluZF9jYXBhYmlsaXR5KGgtPnBkZXYsIFBDSV9DQVBfSURfTVNJKSkgeworCQlkZXZfaW5mbygmaC0+cGRldi0+ZGV2LCAiTVNJXG4iKTsKKwkJaWYgKCFwY2lfZW5hYmxlX21zaShoLT5wZGV2KSkKIAkJCWgtPm1zaV92ZWN0b3IgPSAxOwogCQllbHNlCi0JCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiTVNJIGluaXQgZmFpbGVkXG4iKTsKKwkJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJNU0kgaW5pdCBmYWlsZWRcbiIpOwogCX0KIGRlZmF1bHRfaW50X21vZGU6CiAjZW5kaWYJCQkJLyogQ09ORklHX1BDSV9NU0kgKi8KIAkvKiBpZiB3ZSBnZXQgaGVyZSB3ZSdyZSBnb2luZyB0byB1c2UgdGhlIGRlZmF1bHQgaW50ZXJydXB0IG1vZGUgKi8KLQloLT5pbnRyW1BFUkZfTU9ERV9JTlRdID0gcGRldi0+aXJxOworCWgtPmludHJbUEVSRl9NT0RFX0lOVF0gPSBoLT5wZGV2LT5pcnE7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGhwc2FfcGNpX2luaXQoc3RydWN0IGN0bHJfaW5mbyAqaCwgc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBocHNhX2xvb2t1cF9ib2FyZF9pZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTMyICpib2FyZF9pZCkKIHsKLQl1c2hvcnQgc3Vic3lzdGVtX3ZlbmRvcl9pZCwgc3Vic3lzdGVtX2RldmljZV9pZCwgY29tbWFuZDsKLQl1MzIgYm9hcmRfaWQsIHNjcmF0Y2hwYWQgPSAwOworCWludCBpOworCXUzMiBzdWJzeXN0ZW1fdmVuZG9yX2lkLCBzdWJzeXN0ZW1fZGV2aWNlX2lkOworCisJc3Vic3lzdGVtX3ZlbmRvcl9pZCA9IHBkZXYtPnN1YnN5c3RlbV92ZW5kb3I7CisJc3Vic3lzdGVtX2RldmljZV9pZCA9IHBkZXYtPnN1YnN5c3RlbV9kZXZpY2U7CisJKmJvYXJkX2lkID0gKChzdWJzeXN0ZW1fZGV2aWNlX2lkIDw8IDE2KSAmIDB4ZmZmZjAwMDApIHwKKwkJICAgIHN1YnN5c3RlbV92ZW5kb3JfaWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcm9kdWN0cyk7IGkrKykKKwkJaWYgKCpib2FyZF9pZCA9PSBwcm9kdWN0c1tpXS5ib2FyZF9pZCkKKwkJCXJldHVybiBpOworCisJaWYgKChzdWJzeXN0ZW1fdmVuZG9yX2lkICE9IFBDSV9WRU5ET1JfSURfSFAgJiYKKwkJc3Vic3lzdGVtX3ZlbmRvcl9pZCAhPSBQQ0lfVkVORE9SX0lEX0NPTVBBUSkgfHwKKwkJIWhwc2FfYWxsb3dfYW55KSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJ1bnJlY29nbml6ZWQgYm9hcmQgSUQ6ICIKKwkJCSIweCUwOHgsIGlnbm9yaW5nLlxuIiwgKmJvYXJkX2lkKTsKKwkJCXJldHVybiAtRU5PREVWOworCX0KKwlyZXR1cm4gQVJSQVlfU0laRShwcm9kdWN0cykgLSAxOyAvKiBnZW5lcmljIHVua25vd24gc21hcnQgYXJyYXkgKi8KK30KKworc3RhdGljIGlubGluZSBib29sIGhwc2FfYm9hcmRfZGlzYWJsZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJdTE2IGNvbW1hbmQ7CisKKwkodm9pZCkgcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX0NPTU1BTkQsICZjb21tYW5kKTsKKwlyZXR1cm4gKChjb21tYW5kICYgUENJX0NPTU1BTkRfTUVNT1JZKSA9PSAwKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgaHBzYV9wY2lfZmluZF9tZW1vcnlfQkFSKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCXVuc2lnbmVkIGxvbmcgKm1lbW9yeV9iYXIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgREVWSUNFX0NPVU5UX1JFU09VUkNFOyBpKyspCisJCWlmIChwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgaSkgJiBJT1JFU09VUkNFX01FTSkgeworCQkJLyogYWRkcmVzc2luZyBtb2RlIGJpdHMgYWxyZWFkeSByZW1vdmVkICovCisJCQkqbWVtb3J5X2JhciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBpKTsKKwkJCWRldl9kYmcoJnBkZXYtPmRldiwgIm1lbW9yeSBCQVIgPSAlbHhcbiIsCisJCQkJKm1lbW9yeV9iYXIpOworCQkJcmV0dXJuIDA7CisJCX0KKwlkZXZfd2FybigmcGRldi0+ZGV2LCAibm8gbWVtb3J5IEJBUiBmb3VuZFxuIik7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGhwc2Ffd2FpdF9mb3JfYm9hcmRfcmVhZHkoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwlpbnQgaTsKKwl1MzIgc2NyYXRjaHBhZDsKKworCWZvciAoaSA9IDA7IGkgPCBIUFNBX0JPQVJEX1JFQURZX0lURVJBVElPTlM7IGkrKykgeworCQlzY3JhdGNocGFkID0gcmVhZGwoaC0+dmFkZHIgKyBTQTVfU0NSQVRDSFBBRF9PRkZTRVQpOworCQlpZiAoc2NyYXRjaHBhZCA9PSBIUFNBX0ZJUk1XQVJFX1JFQURZKQorCQkJcmV0dXJuIDA7CisJCW1zbGVlcChIUFNBX0JPQVJEX1JFQURZX1BPTExfSU5URVJWQUxfTVNFQ1MpOworCX0KKwlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiYm9hcmQgbm90IHJlYWR5LCB0aW1lZCBvdXQuXG4iKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgaHBzYV9maW5kX2NmZ19hZGRycyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwl2b2lkIF9faW9tZW0gKnZhZGRyLCB1MzIgKmNmZ19iYXNlX2FkZHIsIHU2NCAqY2ZnX2Jhc2VfYWRkcl9pbmRleCwKKwl1NjQgKmNmZ19vZmZzZXQpCit7CisJKmNmZ19iYXNlX2FkZHIgPSByZWFkbCh2YWRkciArIFNBNV9DVENGR19PRkZTRVQpOworCSpjZmdfb2Zmc2V0ID0gcmVhZGwodmFkZHIgKyBTQTVfQ1RNRU1fT0ZGU0VUKTsKKwkqY2ZnX2Jhc2VfYWRkciAmPSAodTMyKSAweDAwMDBmZmZmOworCSpjZmdfYmFzZV9hZGRyX2luZGV4ID0gZmluZF9QQ0lfQkFSX2luZGV4KHBkZXYsICpjZmdfYmFzZV9hZGRyKTsKKwlpZiAoKmNmZ19iYXNlX2FkZHJfaW5kZXggPT0gLTEpIHsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImNhbm5vdCBmaW5kIGNmZ19iYXNlX2FkZHJfaW5kZXhcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGhwc2FfZmluZF9jZmd0YWJsZXMoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKIAl1NjQgY2ZnX29mZnNldDsKIAl1MzIgY2ZnX2Jhc2VfYWRkcjsKIAl1NjQgY2ZnX2Jhc2VfYWRkcl9pbmRleDsKIAl1MzIgdHJhbnNfb2Zmc2V0OwotCWludCBpLCBwcm9kX2luZGV4LCBlcnI7CisJaW50IHJjOwogCi0Jc3Vic3lzdGVtX3ZlbmRvcl9pZCA9IHBkZXYtPnN1YnN5c3RlbV92ZW5kb3I7Ci0Jc3Vic3lzdGVtX2RldmljZV9pZCA9IHBkZXYtPnN1YnN5c3RlbV9kZXZpY2U7Ci0JYm9hcmRfaWQgPSAoKCh1MzIpIChzdWJzeXN0ZW1fZGV2aWNlX2lkIDw8IDE2KSAmIDB4ZmZmZjAwMDApIHwKLQkJICAgIHN1YnN5c3RlbV92ZW5kb3JfaWQpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJvZHVjdHMpOyBpKyspCi0JCWlmIChib2FyZF9pZCA9PSBwcm9kdWN0c1tpXS5ib2FyZF9pZCkKLQkJCWJyZWFrOwotCi0JcHJvZF9pbmRleCA9IGk7Ci0KLQlpZiAocHJvZF9pbmRleCA9PSBBUlJBWV9TSVpFKHByb2R1Y3RzKSkgewotCQlwcm9kX2luZGV4LS07Ci0JCWlmIChzdWJzeXN0ZW1fdmVuZG9yX2lkICE9IFBDSV9WRU5ET1JfSURfSFAgfHwKLQkJCQkhaHBzYV9hbGxvd19hbnkpIHsKLQkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJ1bnJlY29nbml6ZWQgYm9hcmQgSUQ6IgotCQkJCSIgMHglMDhseCwgaWdub3JpbmcuXG4iLAotCQkJCSh1bnNpZ25lZCBsb25nKSBib2FyZF9pZCk7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCX0KLQkvKiBjaGVjayB0byBzZWUgaWYgY29udHJvbGxlciBoYXMgYmVlbiBkaXNhYmxlZAotCSAqIEJFRk9SRSB0cnlpbmcgdG8gZW5hYmxlIGl0Ci0JICovCi0JKHZvaWQpcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX0NPTU1BTkQsICZjb21tYW5kKTsKLQlpZiAoIShjb21tYW5kICYgMHgwMikpIHsKLQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImNvbnRyb2xsZXIgYXBwZWFycyB0byBiZSBkaXNhYmxlZFxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwotCWlmIChlcnIpIHsKLQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgInVuYWJsZSB0byBlbmFibGUgUENJIGRldmljZVxuIik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCAiaHBzYSIpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzLCBhYm9ydGluZ1xuIik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JLyogSWYgdGhlIGtlcm5lbCBzdXBwb3J0cyBNU0kvTVNJLVggd2Ugd2lsbCB0cnkgdG8gZW5hYmxlIHRoYXQsCi0JICogZWxzZSB3ZSB1c2UgdGhlIElPLUFQSUMgaW50ZXJydXB0IGFzc2lnbmVkIHRvIHVzIGJ5IHN5c3RlbSBST00uCi0JICovCi0JaHBzYV9pbnRlcnJ1cHRfbW9kZShoLCBwZGV2LCBib2FyZF9pZCk7Ci0KLQkvKiBmaW5kIHRoZSBtZW1vcnkgQkFSICovCi0JZm9yIChpID0gMDsgaSA8IERFVklDRV9DT1VOVF9SRVNPVVJDRTsgaSsrKSB7Ci0JCWlmIChwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgaSkgJiBJT1JFU09VUkNFX01FTSkKLQkJCWJyZWFrOwotCX0KLQlpZiAoaSA9PSBERVZJQ0VfQ09VTlRfUkVTT1VSQ0UpIHsKLQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIm5vIG1lbW9yeSBCQVIgZm91bmRcbiIpOwotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7Ci0JfQotCi0JaC0+cGFkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaSk7IC8qIGFkZHJlc3NpbmcgbW9kZSBiaXRzCi0JCQkJCQkgKiBhbHJlYWR5IHJlbW92ZWQKLQkJCQkJCSAqLwotCi0JaC0+dmFkZHIgPSByZW1hcF9wY2lfbWVtKGgtPnBhZGRyLCAweDI1MCk7Ci0KLQkvKiBXYWl0IGZvciB0aGUgYm9hcmQgdG8gYmVjb21lIHJlYWR5LiAgKi8KLQlmb3IgKGkgPSAwOyBpIDwgSFBTQV9CT0FSRF9SRUFEWV9JVEVSQVRJT05TOyBpKyspIHsKLQkJc2NyYXRjaHBhZCA9IHJlYWRsKGgtPnZhZGRyICsgU0E1X1NDUkFUQ0hQQURfT0ZGU0VUKTsKLQkJaWYgKHNjcmF0Y2hwYWQgPT0gSFBTQV9GSVJNV0FSRV9SRUFEWSkKLQkJCWJyZWFrOwotCQltc2xlZXAoSFBTQV9CT0FSRF9SRUFEWV9QT0xMX0lOVEVSVkFMX01TRUNTKTsKLQl9Ci0JaWYgKHNjcmF0Y2hwYWQgIT0gSFBTQV9GSVJNV0FSRV9SRUFEWSkgewotCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiYm9hcmQgbm90IHJlYWR5LCB0aW1lZCBvdXQuXG4iKTsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJfb3V0X2ZyZWVfcmVzOwotCX0KLQotCS8qIGdldCB0aGUgYWRkcmVzcyBpbmRleCBudW1iZXIgKi8KLQljZmdfYmFzZV9hZGRyID0gcmVhZGwoaC0+dmFkZHIgKyBTQTVfQ1RDRkdfT0ZGU0VUKTsKLQljZmdfYmFzZV9hZGRyICY9ICh1MzIpIDB4MDAwMGZmZmY7Ci0JY2ZnX2Jhc2VfYWRkcl9pbmRleCA9IGZpbmRfUENJX0JBUl9pbmRleChwZGV2LCBjZmdfYmFzZV9hZGRyKTsKLQlpZiAoY2ZnX2Jhc2VfYWRkcl9pbmRleCA9PSAtMSkgewotCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiY2Fubm90IGZpbmQgY2ZnX2Jhc2VfYWRkcl9pbmRleFxuIik7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyX291dF9mcmVlX3JlczsKLQl9Ci0KLQljZmdfb2Zmc2V0ID0gcmVhZGwoaC0+dmFkZHIgKyBTQTVfQ1RNRU1fT0ZGU0VUKTsKLQloLT5jZmd0YWJsZSA9IHJlbWFwX3BjaV9tZW0ocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsCi0JCQkgICAgICAgY2ZnX2Jhc2VfYWRkcl9pbmRleCkgKyBjZmdfb2Zmc2V0LAotCQkJCXNpemVvZihoLT5jZmd0YWJsZSkpOworCXJjID0gaHBzYV9maW5kX2NmZ19hZGRycyhoLT5wZGV2LCBoLT52YWRkciwgJmNmZ19iYXNlX2FkZHIsCisJCSZjZmdfYmFzZV9hZGRyX2luZGV4LCAmY2ZnX29mZnNldCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJaC0+Y2ZndGFibGUgPSByZW1hcF9wY2lfbWVtKHBjaV9yZXNvdXJjZV9zdGFydChoLT5wZGV2LAorCQkgICAgICAgY2ZnX2Jhc2VfYWRkcl9pbmRleCkgKyBjZmdfb2Zmc2V0LCBzaXplb2YoKmgtPmNmZ3RhYmxlKSk7CisJaWYgKCFoLT5jZmd0YWJsZSkKKwkJcmV0dXJuIC1FTk9NRU07CiAJLyogRmluZCBwZXJmb3JtYW50IG1vZGUgdGFibGUuICovCi0JdHJhbnNfb2Zmc2V0ID0gcmVhZGwoJihoLT5jZmd0YWJsZS0+VHJhbnNNZXRob2RPZmZzZXQpKTsKLQloLT50cmFuc3RhYmxlID0gcmVtYXBfcGNpX21lbShwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwKKwl0cmFuc19vZmZzZXQgPSByZWFkbCgmaC0+Y2ZndGFibGUtPlRyYW5zTWV0aG9kT2Zmc2V0KTsKKwloLT50cmFuc3RhYmxlID0gcmVtYXBfcGNpX21lbShwY2lfcmVzb3VyY2Vfc3RhcnQoaC0+cGRldiwKIAkJCQljZmdfYmFzZV9hZGRyX2luZGV4KStjZmdfb2Zmc2V0K3RyYW5zX29mZnNldCwKIAkJCQlzaXplb2YoKmgtPnRyYW5zdGFibGUpKTsKKwlpZiAoIWgtPnRyYW5zdGFibGUpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQogCi0JaC0+Ym9hcmRfaWQgPSBib2FyZF9pZDsKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBocHNhX2dldF9tYXhfcGVyZl9tb2RlX2NtZHMoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKIAloLT5tYXhfY29tbWFuZHMgPSByZWFkbCgmKGgtPmNmZ3RhYmxlLT5NYXhQZXJmb3JtYW50TW9kZUNvbW1hbmRzKSk7Ci0JaC0+bWF4c2dlbnRyaWVzID0gcmVhZGwoJihoLT5jZmd0YWJsZS0+TWF4U2NhdHRlckdhdGhlckVsZW1lbnRzKSk7CisJaWYgKGgtPm1heF9jb21tYW5kcyA8IDE2KSB7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJDb250cm9sbGVyIHJlcG9ydHMgIgorCQkJIm1heCBzdXBwb3J0ZWQgY29tbWFuZHMgb2YgJWQsIGFuIG9idmlvdXMgbGllLiAiCisJCQkiVXNpbmcgMTYuICBFbnN1cmUgdGhhdCBmaXJtd2FyZSBpcyB1cCB0byBkYXRlLlxuIiwKKwkJCWgtPm1heF9jb21tYW5kcyk7CisJCWgtPm1heF9jb21tYW5kcyA9IDE2OworCX0KK30KIAorLyogSW50ZXJyb2dhdGUgdGhlIGhhcmR3YXJlIGZvciBzb21lIGxpbWl0czoKKyAqIG1heCBjb21tYW5kcywgbWF4IFNHIGVsZW1lbnRzIHdpdGhvdXQgY2hhaW5pbmcsIGFuZCB3aXRoIGNoYWluaW5nLAorICogU0cgY2hhaW4gYmxvY2sgc2l6ZSwgZXRjLgorICovCitzdGF0aWMgdm9pZCBfX2RldmluaXQgaHBzYV9maW5kX2JvYXJkX3BhcmFtcyhzdHJ1Y3QgY3Rscl9pbmZvICpoKQoreworCWhwc2FfZ2V0X21heF9wZXJmX21vZGVfY21kcyhoKTsKKwloLT5ucl9jbWRzID0gaC0+bWF4X2NvbW1hbmRzIC0gNDsgLyogQWxsb3cgcm9vbSBmb3Igc29tZSBpb2N0bHMgKi8KKwloLT5tYXhzZ2VudHJpZXMgPSByZWFkbCgmKGgtPmNmZ3RhYmxlLT5NYXhTY2F0dGVyR2F0aGVyRWxlbWVudHMpKTsKIAkvKgogCSAqIExpbWl0IGluLWNvbW1hbmQgcy9nIGVsZW1lbnRzIHRvIDMyIHNhdmUgZG1hJ2FibGUgbWVtb3J5LgogCSAqIEhvd3ZldmVyIHNwZWMgc2F5cyBpZiAwLCB1c2UgMzEKIAkgKi8KLQogCWgtPm1heF9jbWRfc2dfZW50cmllcyA9IDMxOwogCWlmIChoLT5tYXhzZ2VudHJpZXMgPiA1MTIpIHsKIAkJaC0+bWF4X2NtZF9zZ19lbnRyaWVzID0gMzI7CkBAIC0zMzgyLDQ1ICszNTM5LDQ5IEBACiAJCWgtPm1heHNnZW50cmllcyA9IDMxOyAvKiBkZWZhdWx0IHRvIHRyYWRpdGlvbmFsIHZhbHVlcyAqLwogCQloLT5jaGFpbnNpemUgPSAwOwogCX0KK30KIAotCWgtPnByb2R1Y3RfbmFtZSA9IHByb2R1Y3RzW3Byb2RfaW5kZXhdLnByb2R1Y3RfbmFtZTsKLQloLT5hY2Nlc3MgPSAqKHByb2R1Y3RzW3Byb2RfaW5kZXhdLmFjY2Vzcyk7Ci0JLyogQWxsb3cgcm9vbSBmb3Igc29tZSBpb2N0bHMgKi8KLQloLT5ucl9jbWRzID0gaC0+bWF4X2NvbW1hbmRzIC0gNDsKLQorc3RhdGljIGlubGluZSBib29sIGhwc2FfQ0lTU19zaWduYXR1cmVfcHJlc2VudChzdHJ1Y3QgY3Rscl9pbmZvICpoKQorewogCWlmICgocmVhZGIoJmgtPmNmZ3RhYmxlLT5TaWduYXR1cmVbMF0pICE9ICdDJykgfHwKIAkgICAgKHJlYWRiKCZoLT5jZmd0YWJsZS0+U2lnbmF0dXJlWzFdKSAhPSAnSScpIHx8CiAJICAgIChyZWFkYigmaC0+Y2ZndGFibGUtPlNpZ25hdHVyZVsyXSkgIT0gJ1MnKSB8fAogCSAgICAocmVhZGIoJmgtPmNmZ3RhYmxlLT5TaWduYXR1cmVbM10pICE9ICdTJykpIHsKLQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIm5vdCBhIHZhbGlkIENJU1MgY29uZmlnIHRhYmxlXG4iKTsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJfb3V0X2ZyZWVfcmVzOworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAibm90IGEgdmFsaWQgQ0lTUyBjb25maWcgdGFibGVcbiIpOworCQlyZXR1cm4gZmFsc2U7CiAJfQorCXJldHVybiB0cnVlOworfQorCisvKiBOZWVkIHRvIGVuYWJsZSBwcmVmZXRjaCBpbiB0aGUgU0NTSSBjb3JlIGZvciA2NDAwIGluIHg4NiAqLworc3RhdGljIGlubGluZSB2b2lkIGhwc2FfZW5hYmxlX3Njc2lfcHJlZmV0Y2goc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKICNpZmRlZiBDT05GSUdfWDg2Ci0JewotCQkvKiBOZWVkIHRvIGVuYWJsZSBwcmVmZXRjaCBpbiB0aGUgU0NTSSBjb3JlIGZvciA2NDAwIGluIHg4NiAqLwotCQl1MzIgcHJlZmV0Y2g7Ci0JCXByZWZldGNoID0gcmVhZGwoJihoLT5jZmd0YWJsZS0+U0NTSV9QcmVmZXRjaCkpOwotCQlwcmVmZXRjaCB8PSAweDEwMDsKLQkJd3JpdGVsKHByZWZldGNoLCAmKGgtPmNmZ3RhYmxlLT5TQ1NJX1ByZWZldGNoKSk7Ci0JfQorCXUzMiBwcmVmZXRjaDsKKworCXByZWZldGNoID0gcmVhZGwoJihoLT5jZmd0YWJsZS0+U0NTSV9QcmVmZXRjaCkpOworCXByZWZldGNoIHw9IDB4MTAwOworCXdyaXRlbChwcmVmZXRjaCwgJihoLT5jZmd0YWJsZS0+U0NTSV9QcmVmZXRjaCkpOwogI2VuZGlmCit9CiAKLQkvKiBEaXNhYmxpbmcgRE1BIHByZWZldGNoIGZvciB0aGUgUDYwMAotCSAqIEFuIEFTSUMgYnVnIG1heSByZXN1bHQgaW4gYSBwcmVmZXRjaCBiZXlvbmQKLQkgKiBwaHlzaWNhbCBtZW1vcnkuCi0JICovCi0JaWYgKGJvYXJkX2lkID09IDB4MzIyNTEwM0MpIHsKLQkJdTMyIGRtYV9wcmVmZXRjaDsKLQkJZG1hX3ByZWZldGNoID0gcmVhZGwoaC0+dmFkZHIgKyBJMk9fRE1BMV9DRkcpOwotCQlkbWFfcHJlZmV0Y2ggfD0gMHg4MDAwOwotCQl3cml0ZWwoZG1hX3ByZWZldGNoLCBoLT52YWRkciArIEkyT19ETUExX0NGRyk7Ci0JfQorLyogRGlzYWJsZSBETUEgcHJlZmV0Y2ggZm9yIHRoZSBQNjAwLiAgT3RoZXJ3aXNlIGFuIEFTSUMgYnVnIG1heSByZXN1bHQKKyAqIGluIGEgcHJlZmV0Y2ggYmV5b25kIHBoeXNpY2FsIG1lbW9yeS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGhwc2FfcDYwMF9kbWFfcHJlZmV0Y2hfcXVpcmsoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwl1MzIgZG1hX3ByZWZldGNoOwogCi0JaC0+bWF4X2NvbW1hbmRzID0gcmVhZGwoJihoLT5jZmd0YWJsZS0+Q21kc091dE1heCkpOwotCS8qIFVwZGF0ZSB0aGUgZmllbGQsIGFuZCB0aGVuIHJpbmcgdGhlIGRvb3JiZWxsICovCi0Jd3JpdGVsKENGR1RCTF9UcmFuc19TaW1wbGUsICYoaC0+Y2ZndGFibGUtPkhvc3RXcml0ZS5UcmFuc3BvcnRSZXF1ZXN0KSk7Ci0Jd3JpdGVsKENGR1RCTF9DaGFuZ2VSZXEsIGgtPnZhZGRyICsgU0E1X0RPT1JCRUxMKTsKKwlpZiAoaC0+Ym9hcmRfaWQgIT0gMHgzMjI1MTAzQykKKwkJcmV0dXJuOworCWRtYV9wcmVmZXRjaCA9IHJlYWRsKGgtPnZhZGRyICsgSTJPX0RNQTFfQ0ZHKTsKKwlkbWFfcHJlZmV0Y2ggfD0gMHg4MDAwOworCXdyaXRlbChkbWFfcHJlZmV0Y2gsIGgtPnZhZGRyICsgSTJPX0RNQTFfQ0ZHKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGhwc2Ffd2FpdF9mb3JfbW9kZV9jaGFuZ2VfYWNrKHN0cnVjdCBjdGxyX2luZm8gKmgpCit7CisJaW50IGk7CiAKIAkvKiB1bmRlciBjZXJ0YWluIHZlcnkgcmFyZSBjb25kaXRpb25zLCB0aGlzIGNhbiB0YWtlIGF3aGlsZS4KIAkgKiAoZS5nLjogaG90IHJlcGxhY2UgYSBmYWlsZWQgMTQ0R0IgZHJpdmUgaW4gYSBSQUlEIDUgc2V0IHJpZ2h0CkBAIC0zNDMyLDI0ICszNTkzLDk2IEBACiAJCS8qIGRlbGF5IGFuZCB0cnkgYWdhaW4gKi8KIAkJbXNsZWVwKDEwKTsKIAl9Cit9CiAKLSNpZmRlZiBIUFNBX0RFQlVHCi0JcHJpbnRfY2ZnX3RhYmxlKCZwZGV2LT5kZXYsIGgtPmNmZ3RhYmxlKTsKLSNlbmRpZgkJCQkvKiBIUFNBX0RFQlVHICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBocHNhX2VudGVyX3NpbXBsZV9tb2RlKHN0cnVjdCBjdGxyX2luZm8gKmgpCit7CisJdTMyIHRyYW5zX3N1cHBvcnQ7CiAKKwl0cmFuc19zdXBwb3J0ID0gcmVhZGwoJihoLT5jZmd0YWJsZS0+VHJhbnNwb3J0U3VwcG9ydCkpOworCWlmICghKHRyYW5zX3N1cHBvcnQgJiBTSU1QTEVfTU9ERSkpCisJCXJldHVybiAtRU5PVFNVUFA7CisKKwloLT5tYXhfY29tbWFuZHMgPSByZWFkbCgmKGgtPmNmZ3RhYmxlLT5DbWRzT3V0TWF4KSk7CisJLyogVXBkYXRlIHRoZSBmaWVsZCwgYW5kIHRoZW4gcmluZyB0aGUgZG9vcmJlbGwgKi8KKwl3cml0ZWwoQ0ZHVEJMX1RyYW5zX1NpbXBsZSwgJihoLT5jZmd0YWJsZS0+SG9zdFdyaXRlLlRyYW5zcG9ydFJlcXVlc3QpKTsKKwl3cml0ZWwoQ0ZHVEJMX0NoYW5nZVJlcSwgaC0+dmFkZHIgKyBTQTVfRE9PUkJFTEwpOworCWhwc2Ffd2FpdF9mb3JfbW9kZV9jaGFuZ2VfYWNrKGgpOworCXByaW50X2NmZ190YWJsZSgmaC0+cGRldi0+ZGV2LCBoLT5jZmd0YWJsZSk7CiAJaWYgKCEocmVhZGwoJihoLT5jZmd0YWJsZS0+VHJhbnNwb3J0QWN0aXZlKSkgJiBDRkdUQkxfVHJhbnNfU2ltcGxlKSkgewotCQlkZXZfd2FybigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGdldCBib2FyZCBpbnRvIHNpbXBsZSBtb2RlXG4iKTsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwKKwkJCSJ1bmFibGUgdG8gZ2V0IGJvYXJkIGludG8gc2ltcGxlIG1vZGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGhwc2FfcGNpX2luaXQoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwlpbnQgcHJvZF9pbmRleCwgZXJyOworCisJcHJvZF9pbmRleCA9IGhwc2FfbG9va3VwX2JvYXJkX2lkKGgtPnBkZXYsICZoLT5ib2FyZF9pZCk7CisJaWYgKHByb2RfaW5kZXggPCAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKwloLT5wcm9kdWN0X25hbWUgPSBwcm9kdWN0c1twcm9kX2luZGV4XS5wcm9kdWN0X25hbWU7CisJaC0+YWNjZXNzID0gKihwcm9kdWN0c1twcm9kX2luZGV4XS5hY2Nlc3MpOworCisJaWYgKGhwc2FfYm9hcmRfZGlzYWJsZWQoaC0+cGRldikpIHsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNvbnRyb2xsZXIgYXBwZWFycyB0byBiZSBkaXNhYmxlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShoLT5wZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJ1bmFibGUgdG8gZW5hYmxlIFBDSSBkZXZpY2VcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMoaC0+cGRldiwgImhwc2EiKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwKKwkJCSJjYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXMsIGFib3J0aW5nXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJaHBzYV9pbnRlcnJ1cHRfbW9kZShoKTsKKwllcnIgPSBocHNhX3BjaV9maW5kX21lbW9yeV9CQVIoaC0+cGRldiwgJmgtPnBhZGRyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7CisJaC0+dmFkZHIgPSByZW1hcF9wY2lfbWVtKGgtPnBhZGRyLCAweDI1MCk7CisJaWYgKCFoLT52YWRkcikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7CisJfQorCWVyciA9IGhwc2Ffd2FpdF9mb3JfYm9hcmRfcmVhZHkoaCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2ZyZWVfcmVzOworCWVyciA9IGhwc2FfZmluZF9jZmd0YWJsZXMoaCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2ZyZWVfcmVzOworCWhwc2FfZmluZF9ib2FyZF9wYXJhbXMoaCk7CisKKwlpZiAoIWhwc2FfQ0lTU19zaWduYXR1cmVfcHJlc2VudChoKSkgewogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7CiAJfQorCWhwc2FfZW5hYmxlX3Njc2lfcHJlZmV0Y2goaCk7CisJaHBzYV9wNjAwX2RtYV9wcmVmZXRjaF9xdWlyayhoKTsKKwllcnIgPSBocHNhX2VudGVyX3NpbXBsZV9tb2RlKGgpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9mcmVlX3JlczsKIAlyZXR1cm4gMDsKIAogZXJyX291dF9mcmVlX3JlczoKKwlpZiAoaC0+dHJhbnN0YWJsZSkKKwkJaW91bm1hcChoLT50cmFuc3RhYmxlKTsKKwlpZiAoaC0+Y2ZndGFibGUpCisJCWlvdW5tYXAoaC0+Y2ZndGFibGUpOworCWlmIChoLT52YWRkcikKKwkJaW91bm1hcChoLT52YWRkcik7CiAJLyoKIAkgKiBEZWxpYmVyYXRlbHkgb21pdCBwY2lfZGlzYWJsZV9kZXZpY2UoKTogaXQgZG9lcyBzb21ldGhpbmcgbmFzdHkgdG8KIAkgKiBTbWFydCBBcnJheSBjb250cm9sbGVycyB0aGF0IHBjaV9lbmFibGVfZGV2aWNlIGRvZXMgbm90IHVuZG8KIAkgKi8KLQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMoaC0+cGRldik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMzQ2OSwzMyArMzcwMiw1MSBAQAogCX0KIH0KIAorc3RhdGljIF9fZGV2aW5pdCBpbnQgaHBzYV9pbml0X3Jlc2V0X2RldmljZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaW50IHJjLCBpOworCisJaWYgKCFyZXNldF9kZXZpY2VzKQorCQlyZXR1cm4gMDsKKworCS8qIFJlc2V0IHRoZSBjb250cm9sbGVyIHdpdGggYSBQQ0kgcG93ZXItY3ljbGUgb3IgdmlhIGRvb3JiZWxsICovCisJcmMgPSBocHNhX2tkdW1wX2hhcmRfcmVzZXRfY29udHJvbGxlcihwZGV2KTsKKworCS8qIC1FTk9UU1VQUCBoZXJlIG1lYW5zIHdlIGNhbm5vdCByZXNldCB0aGUgY29udHJvbGxlcgorCSAqIGJ1dCBpdCdzIGFscmVhZHkgKGFuZCBzdGlsbCkgdXAgYW5kIHJ1bm5pbmcgaW4KKwkgKiAicGVyZm9ybWFudCBtb2RlIi4gIE9yLCBpdCBtaWdodCBiZSA2NDB4LCB3aGljaCBjYW4ndCByZXNldAorCSAqIGR1ZSB0byBjb25jZXJucyBhYm91dCBzaGFyZWQgYmJ3YyBiZXR3ZWVuIDY0MDIvNjQwNCBwYWlyLgorCSAqLworCWlmIChyYyA9PSAtRU5PVFNVUFApCisJCXJldHVybiAwOyAvKiBqdXN0IHRyeSB0byBkbyB0aGUga2R1bXAgYW55aG93LiAqLworCWlmIChyYykKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKGhwc2FfcmVzZXRfbXNpKHBkZXYpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIE5vdyB0cnkgdG8gZ2V0IHRoZSBjb250cm9sbGVyIHRvIHJlc3BvbmQgdG8gYSBuby1vcCAqLworCWZvciAoaSA9IDA7IGkgPCBIUFNBX1BPU1RfUkVTRVRfTk9PUF9SRVRSSUVTOyBpKyspIHsKKwkJaWYgKGhwc2Ffbm9vcChwZGV2KSA9PSAwKQorCQkJYnJlYWs7CisJCWVsc2UKKwkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJuby1vcCBmYWlsZWQlc1xuIiwKKwkJCQkJKGkgPCAxMSA/ICI7IHJlLXRyeWluZyIgOiAiIikpOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBfX2RldmluaXQgaHBzYV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKLQlpbnQgaSwgcmM7Ci0JaW50IGRhYzsKKwlpbnQgZGFjLCByYzsKIAlzdHJ1Y3QgY3Rscl9pbmZvICpoOwogCiAJaWYgKG51bWJlcl9vZl9jb250cm9sbGVycyA9PSAwKQogCQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICJcbiIpOwotCWlmIChyZXNldF9kZXZpY2VzKSB7Ci0JCS8qIFJlc2V0IHRoZSBjb250cm9sbGVyIHdpdGggYSBQQ0kgcG93ZXItY3ljbGUgKi8KLQkJaWYgKGhwc2FfaGFyZF9yZXNldF9jb250cm9sbGVyKHBkZXYpIHx8IGhwc2FfcmVzZXRfbXNpKHBkZXYpKQotCQkJcmV0dXJuIC1FTk9ERVY7CiAKLQkJLyogU29tZSBkZXZpY2VzIChub3RhYmx5IHRoZSBIUCBTbWFydCBBcnJheSA1aSBDb250cm9sbGVyKQotCQkgICBuZWVkIGEgbGl0dGxlIHBhdXNlIGhlcmUgKi8KLQkJbXNsZWVwKEhQU0FfUE9TVF9SRVNFVF9QQVVTRV9NU0VDUyk7Ci0KLQkJLyogTm93IHRyeSB0byBnZXQgdGhlIGNvbnRyb2xsZXIgdG8gcmVzcG9uZCB0byBhIG5vLW9wICovCi0JCWZvciAoaSA9IDA7IGkgPCBIUFNBX1BPU1RfUkVTRVRfTk9PUF9SRVRSSUVTOyBpKyspIHsKLQkJCWlmIChocHNhX25vb3AocGRldikgPT0gMCkKLQkJCQlicmVhazsKLQkJCWVsc2UKLQkJCQlkZXZfd2FybigmcGRldi0+ZGV2LCAibm8tb3AgZmFpbGVkJXNcbiIsCi0JCQkJCQkoaSA8IDExID8gIjsgcmUtdHJ5aW5nIiA6ICIiKSk7Ci0JCX0KLQl9CisJcmMgPSBocHNhX2luaXRfcmVzZXRfZGV2aWNlcyhwZGV2KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAogCS8qIENvbW1hbmQgc3RydWN0dXJlcyBtdXN0IGJlIGFsaWduZWQgb24gYSAzMi1ieXRlIGJvdW5kYXJ5IGJlY2F1c2UKIAkgKiB0aGUgNSBsb3dlciBiaXRzIG9mIHRoZSBhZGRyZXNzIGFyZSB1c2VkIGJ5IHRoZSBoYXJkd2FyZS4gYW5kIGJ5CkBAIC0zNTA3LDE3ICszNzU4LDE3IEBACiAJaWYgKCFoKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWgtPnBkZXYgPSBwZGV2OwogCWgtPmJ1c3lfaW5pdGlhbGl6aW5nID0gMTsKIAlJTklUX0hMSVNUX0hFQUQoJmgtPmNtcFEpOwogCUlOSVRfSExJU1RfSEVBRCgmaC0+cmVxUSk7Ci0JcmMgPSBocHNhX3BjaV9pbml0KGgsIHBkZXYpOworCXJjID0gaHBzYV9wY2lfaW5pdChoKTsKIAlpZiAocmMgIT0gMCkKIAkJZ290byBjbGVhbjE7CiAKIAlzcHJpbnRmKGgtPmRldm5hbWUsICJocHNhJWQiLCBudW1iZXJfb2ZfY29udHJvbGxlcnMpOwogCWgtPmN0bHIgPSBudW1iZXJfb2ZfY29udHJvbGxlcnM7CiAJbnVtYmVyX29mX2NvbnRyb2xsZXJzKys7Ci0JaC0+cGRldiA9IHBkZXY7CiAKIAkvKiBjb25maWd1cmUgUENJIERNQSBzdHVmZiAqLwogCXJjID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soNjQpKTsKQEAgLTM1MzUsOCArMzc4NiwxMyBAQAogCiAJLyogbWFrZSBzdXJlIHRoZSBib2FyZCBpbnRlcnJ1cHRzIGFyZSBvZmYgKi8KIAloLT5hY2Nlc3Muc2V0X2ludHJfbWFzayhoLCBIUFNBX0lOVFJfT0ZGKTsKLQlyYyA9IHJlcXVlc3RfaXJxKGgtPmludHJbUEVSRl9NT0RFX0lOVF0sIGRvX2hwc2FfaW50ciwKLQkJCUlSUUZfRElTQUJMRUQsIGgtPmRldm5hbWUsIGgpOworCisJaWYgKGgtPm1zaXhfdmVjdG9yIHx8IGgtPm1zaV92ZWN0b3IpCisJCXJjID0gcmVxdWVzdF9pcnEoaC0+aW50cltQRVJGX01PREVfSU5UXSwgZG9faHBzYV9pbnRyX21zaSwKKwkJCQlJUlFGX0RJU0FCTEVELCBoLT5kZXZuYW1lLCBoKTsKKwllbHNlCisJCXJjID0gcmVxdWVzdF9pcnEoaC0+aW50cltQRVJGX01PREVfSU5UXSwgZG9faHBzYV9pbnRyX2ludHgsCisJCQkJSVJRRl9ESVNBQkxFRCwgaC0+ZGV2bmFtZSwgaCk7CiAJaWYgKHJjKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBnZXQgaXJxICVkIGZvciAlc1xuIiwKIAkJICAgICAgIGgtPmludHJbUEVSRl9NT0RFX0lOVF0sIGgtPmRldm5hbWUpOwpAQCAtMzY2Myw2ICszOTE5LDggQEAKIAlocHNhX3VucmVnaXN0ZXJfc2NzaShoKTsJLyogdW5ob29rIGZyb20gU0NTSSBzdWJzeXN0ZW0gKi8KIAlocHNhX3NodXRkb3duKHBkZXYpOwogCWlvdW5tYXAoaC0+dmFkZHIpOworCWlvdW5tYXAoaC0+dHJhbnN0YWJsZSk7CisJaW91bm1hcChoLT5jZmd0YWJsZSk7CiAJaHBzYV9mcmVlX3NnX2NoYWluX2Jsb2NrcyhoKTsKIAlwY2lfZnJlZV9jb25zaXN0ZW50KGgtPnBkZXYsCiAJCWgtPm5yX2NtZHMgKiBzaXplb2Yoc3RydWN0IENvbW1hbmRMaXN0KSwKQEAgLTM3NDIsMzggKzQwMDAsMzUgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGhwc2FfcHV0X2N0bHJfaW50b19wZXJmb3JtYW50X21vZGUoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3N0YXRpYyBfX2RldmluaXQgdm9pZCBocHNhX2VudGVyX3BlcmZvcm1hbnRfbW9kZShzdHJ1Y3QgY3Rscl9pbmZvICpoKQogewotCXUzMiB0cmFuc19zdXBwb3J0OwotCXU2NCB0cmFuc19vZmZzZXQ7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyByZWdpc3Rlcl92YWx1ZTsKKworCS8qIFRoaXMgaXMgYSBiaXQgY29tcGxpY2F0ZWQuICBUaGVyZSBhcmUgOCByZWdpc3RlcnMgb24KKwkgKiB0aGUgY29udHJvbGxlciB3aGljaCB3ZSB3cml0ZSB0byB0byB0ZWxsIGl0IDggZGlmZmVyZW50CisJICogc2l6ZXMgb2YgY29tbWFuZHMgd2hpY2ggdGhlcmUgbWF5IGJlLiAgSXQncyBhIHdheSBvZgorCSAqIHJlZHVjaW5nIHRoZSBETUEgZG9uZSB0byBmZXRjaCBlYWNoIGNvbW1hbmQuICBFbmNvZGVkIGludG8KKwkgKiBlYWNoIGNvbW1hbmQncyB0YWcgYXJlIDMgYml0cyB3aGljaCBjb21tdW5pY2F0ZSB0byB0aGUgY29udHJvbGxlcgorCSAqIHdoaWNoIG9mIHRoZSBlaWdodCBzaXplcyB0aGF0IGNvbW1hbmQgZml0cyB3aXRoaW4uICBUaGUgc2l6ZSBvZgorCSAqIGVhY2ggY29tbWFuZCBkZXBlbmRzIG9uIGhvdyBtYW55IHNjYXR0ZXIgZ2F0aGVyIGVudHJpZXMgdGhlcmUgYXJlLgorCSAqIEVhY2ggU0cgZW50cnkgcmVxdWlyZXMgMTYgYnl0ZXMuICBUaGUgZWlnaHQgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkCisJICogd2l0aCB0aGUgbnVtYmVyIG9mIDE2LWJ5dGUgYmxvY2tzIGEgY29tbWFuZCBvZiB0aGF0IHNpemUgcmVxdWlyZXMuCisJICogVGhlIHNtYWxsZXN0IGNvbW1hbmQgcG9zc2libGUgcmVxdWlyZXMgNSBzdWNoIDE2IGJ5dGUgYmxvY2tzLgorCSAqIHRoZSBsYXJnZXN0IGNvbW1hbmQgcG9zc2libGUgcmVxdWlyZXMgTUFYU0dFTlRSSUVTICsgNCAxNi1ieXRlCisJICogYmxvY2tzLiAgTm90ZSwgdGhpcyBvbmx5IGV4dGVuZHMgdG8gdGhlIFNHIGVudHJpZXMgY29udGFpbmVkCisJICogd2l0aGluIHRoZSBjb21tYW5kIGJsb2NrLCBhbmQgZG9lcyBub3QgZXh0ZW5kIHRvIGNoYWluZWQgYmxvY2tzCisJICogb2YgU0cgZWxlbWVudHMuICAgYmZ0W10gY29udGFpbnMgdGhlIGVpZ2h0IHZhbHVlcyB3ZSB3cml0ZSB0bworCSAqIHRoZSByZWdpc3RlcnMuICBUaGV5IGFyZSBub3QgZXZlbmx5IGRpc3RyaWJ1dGVkLCBidXQgaGF2ZSBtb3JlCisJICogc2l6ZXMgZm9yIHNtYWxsIGNvbW1hbmRzLCBhbmQgZmV3ZXIgc2l6ZXMgZm9yIGxhcmdlciBjb21tYW5kcy4KKwkgKi8KKwlpbnQgYmZ0WzhdID0gezUsIDYsIDgsIDEwLCAxMiwgMjAsIDI4LCBNQVhTR0VOVFJJRVMgKyA0fTsKKwlCVUlMRF9CVUdfT04oMjggPiBNQVhTR0VOVFJJRVMgKyA0KTsKIAkvKiAgNSA9IDEgcy9nIGVudHJ5IG9yIDRrCiAJICogIDYgPSAyIHMvZyBlbnRyeSBvciA4awogCSAqICA4ID0gNCBzL2cgZW50cnkgb3IgMTZrCiAJICogMTAgPSA2IHMvZyBlbnRyeSBvciAyNGsKIAkgKi8KLQlpbnQgYmZ0WzhdID0gezUsIDYsIDgsIDEwLCAxMiwgMjAsIDI4LCAzNX07IC8qIGZvciBzY2F0dGVyL2dhdGhlcnMgKi8KLQlpbnQgaSA9IDA7Ci0JaW50IGwgPSAwOwotCXVuc2lnbmVkIGxvbmcgcmVnaXN0ZXJfdmFsdWU7Ci0KLQl0cmFuc19zdXBwb3J0ID0gcmVhZGwoJihoLT5jZmd0YWJsZS0+VHJhbnNwb3J0U3VwcG9ydCkpOwotCWlmICghKHRyYW5zX3N1cHBvcnQgJiBQRVJGT1JNQU5UX01PREUpKQotCQlyZXR1cm47Ci0KLQloLT5tYXhfY29tbWFuZHMgPSByZWFkbCgmKGgtPmNmZ3RhYmxlLT5NYXhQZXJmb3JtYW50TW9kZUNvbW1hbmRzKSk7Ci0JaC0+bWF4X3NnX2VudHJpZXMgPSAzMjsKLQkvKiBQZXJmb3JtYW50IG1vZGUgcmluZyBidWZmZXIgYW5kIHN1cHBvcnRpbmcgZGF0YSBzdHJ1Y3R1cmVzICovCi0JaC0+cmVwbHlfcG9vbF9zaXplID0gaC0+bWF4X2NvbW1hbmRzICogc2l6ZW9mKHU2NCk7Ci0JaC0+cmVwbHlfcG9vbCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGgtPnBkZXYsIGgtPnJlcGx5X3Bvb2xfc2l6ZSwKLQkJCQkmKGgtPnJlcGx5X3Bvb2xfZGhhbmRsZSkpOwotCi0JLyogTmVlZCBhIGJsb2NrIGZldGNoIHRhYmxlIGZvciBwZXJmb3JtYW50IG1vZGUgKi8KLQloLT5ibG9ja0ZldGNoVGFibGUgPSBrbWFsbG9jKCgoaC0+bWF4X3NnX2VudHJpZXMrMSkgKgotCQkJCXNpemVvZih1MzIpKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoKGgtPnJlcGx5X3Bvb2wgPT0gTlVMTCkKLQkJfHwgKGgtPmJsb2NrRmV0Y2hUYWJsZSA9PSBOVUxMKSkKLQkJZ290byBjbGVhbl91cDsKIAogCWgtPnJlcGx5X3Bvb2xfd3JhcGFyb3VuZCA9IDE7IC8qIHNwZWM6IGluaXQgdG8gMSAqLwogCkBAIC0zNzgxLDcgKzQwMzYsNiBAQAogCW1lbXNldChoLT5yZXBseV9wb29sLCAwLCBoLT5yZXBseV9wb29sX3NpemUpOwogCWgtPnJlcGx5X3Bvb2xfaGVhZCA9IGgtPnJlcGx5X3Bvb2w7CiAKLQl0cmFuc19vZmZzZXQgPSByZWFkbCgmKGgtPmNmZ3RhYmxlLT5UcmFuc01ldGhvZE9mZnNldCkpOwogCWJmdFs3XSA9IGgtPm1heF9zZ19lbnRyaWVzICsgNDsKIAljYWxjX2J1Y2tldF9tYXAoYmZ0LCBBUlJBWV9TSVpFKGJmdCksIDMyLCBoLT5ibG9ja0ZldGNoVGFibGUpOwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCkBAIC0zNzk3LDIzICs0MDUxLDM5IEBACiAJd3JpdGVsKENGR1RCTF9UcmFuc19QZXJmb3JtYW50LAogCQkmKGgtPmNmZ3RhYmxlLT5Ib3N0V3JpdGUuVHJhbnNwb3J0UmVxdWVzdCkpOwogCXdyaXRlbChDRkdUQkxfQ2hhbmdlUmVxLCBoLT52YWRkciArIFNBNV9ET09SQkVMTCk7Ci0JLyogdW5kZXIgY2VydGFpbiB2ZXJ5IHJhcmUgY29uZGl0aW9ucywgdGhpcyBjYW4gdGFrZSBhd2hpbGUuCi0JICogKGUuZy46IGhvdCByZXBsYWNlIGEgZmFpbGVkIDE0NEdCIGRyaXZlIGluIGEgUkFJRCA1IHNldCByaWdodAotCSAqIGFzIHdlIGVudGVyIHRoaXMgY29kZS4pICovCi0JZm9yIChsID0gMDsgbCA8IE1BWF9DT05GSUdfV0FJVDsgbCsrKSB7Ci0JCXJlZ2lzdGVyX3ZhbHVlID0gcmVhZGwoaC0+dmFkZHIgKyBTQTVfRE9PUkJFTEwpOwotCQlpZiAoIShyZWdpc3Rlcl92YWx1ZSAmIENGR1RCTF9DaGFuZ2VSZXEpKQotCQkJYnJlYWs7Ci0JCS8qIGRlbGF5IGFuZCB0cnkgYWdhaW4gKi8KLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJc2NoZWR1bGVfdGltZW91dCgxMCk7Ci0JfQorCWhwc2Ffd2FpdF9mb3JfbW9kZV9jaGFuZ2VfYWNrKGgpOwogCXJlZ2lzdGVyX3ZhbHVlID0gcmVhZGwoJihoLT5jZmd0YWJsZS0+VHJhbnNwb3J0QWN0aXZlKSk7CiAJaWYgKCEocmVnaXN0ZXJfdmFsdWUgJiBDRkdUQkxfVHJhbnNfUGVyZm9ybWFudCkpIHsKIAkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgInVuYWJsZSB0byBnZXQgYm9hcmQgaW50byIKIAkJCQkJIiBwZXJmb3JtYW50IG1vZGVcbiIpOwogCQlyZXR1cm47CiAJfQorfQorCitzdGF0aWMgX19kZXZpbml0IHZvaWQgaHBzYV9wdXRfY3Rscl9pbnRvX3BlcmZvcm1hbnRfbW9kZShzdHJ1Y3QgY3Rscl9pbmZvICpoKQoreworCXUzMiB0cmFuc19zdXBwb3J0OworCisJdHJhbnNfc3VwcG9ydCA9IHJlYWRsKCYoaC0+Y2ZndGFibGUtPlRyYW5zcG9ydFN1cHBvcnQpKTsKKwlpZiAoISh0cmFuc19zdXBwb3J0ICYgUEVSRk9STUFOVF9NT0RFKSkKKwkJcmV0dXJuOworCisJaHBzYV9nZXRfbWF4X3BlcmZfbW9kZV9jbWRzKGgpOworCWgtPm1heF9zZ19lbnRyaWVzID0gMzI7CisJLyogUGVyZm9ybWFudCBtb2RlIHJpbmcgYnVmZmVyIGFuZCBzdXBwb3J0aW5nIGRhdGEgc3RydWN0dXJlcyAqLworCWgtPnJlcGx5X3Bvb2xfc2l6ZSA9IGgtPm1heF9jb21tYW5kcyAqIHNpemVvZih1NjQpOworCWgtPnJlcGx5X3Bvb2wgPSBwY2lfYWxsb2NfY29uc2lzdGVudChoLT5wZGV2LCBoLT5yZXBseV9wb29sX3NpemUsCisJCQkJJihoLT5yZXBseV9wb29sX2RoYW5kbGUpKTsKKworCS8qIE5lZWQgYSBibG9jayBmZXRjaCB0YWJsZSBmb3IgcGVyZm9ybWFudCBtb2RlICovCisJaC0+YmxvY2tGZXRjaFRhYmxlID0ga21hbGxvYygoKGgtPm1heF9zZ19lbnRyaWVzKzEpICoKKwkJCQlzaXplb2YodTMyKSksIEdGUF9LRVJORUwpOworCisJaWYgKChoLT5yZXBseV9wb29sID09IE5VTEwpCisJCXx8IChoLT5ibG9ja0ZldGNoVGFibGUgPT0gTlVMTCkpCisJCWdvdG8gY2xlYW5fdXA7CisKKwlocHNhX2VudGVyX3BlcmZvcm1hbnRfbW9kZShoKTsKIAogCS8qIENoYW5nZSB0aGUgYWNjZXNzIG1ldGhvZHMgdG8gdGhlIHBlcmZvcm1hbnQgYWNjZXNzIG1ldGhvZHMgKi8KIAloLT5hY2Nlc3MgPSBTQTVfcGVyZm9ybWFudF9hY2Nlc3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaHBzYS5oIGIvZHJpdmVycy9zY3NpL2hwc2EuaAppbmRleCAxYmI1MjMzLi5hMjAzZWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaHBzYS5oCisrKyBiL2RyaXZlcnMvc2NzaS9ocHNhLmgKQEAgLTUzLDcgKzUzLDYgQEAKIAlpbnQJY3RscjsKIAljaGFyCWRldm5hbWVbOF07CiAJY2hhciAgICAqcHJvZHVjdF9uYW1lOwotCWNoYXIJZmlybV92ZXJbNF07IC8qIEZpcm13YXJlIHZlcnNpb24gKi8KIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAl1MzIJYm9hcmRfaWQ7CiAJdm9pZCBfX2lvbWVtICp2YWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ocHNhX2NtZC5oIGIvZHJpdmVycy9zY3NpL2hwc2FfY21kLmgKaW5kZXggNzhkZTliNi4uZjVjNGMzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hwc2FfY21kLmgKKysrIGIvZHJpdmVycy9zY3NpL2hwc2FfY21kLmgKQEAgLTEwMCw2ICsxMDAsNyBAQAogLyogQ29uZmlndXJhdGlvbiBUYWJsZSAqLwogI2RlZmluZSBDRkdUQkxfQ2hhbmdlUmVxICAgICAgICAweDAwMDAwMDAxbAogI2RlZmluZSBDRkdUQkxfQWNjQ21kcyAgICAgICAgICAweDAwMDAwMDAxbAorI2RlZmluZSBET09SQkVMTF9DVExSX1JFU0VUCTB4MDAwMDAwMDRsCiAKICNkZWZpbmUgQ0ZHVEJMX1RyYW5zX1NpbXBsZSAgICAgMHgwMDAwMDAwMmwKICNkZWZpbmUgQ0ZHVEJMX1RyYW5zX1BlcmZvcm1hbnQgMHgwMDAwMDAwNGwKQEAgLTMzOSw2ICszNDAsOSBAQAogCXUzMgkJTWF4UGh5c2ljYWxEZXZpY2VzOwogCXUzMgkJTWF4UGh5c2ljYWxEcml2ZXNQZXJMb2dpY2FsVW5pdDsKIAl1MzIJCU1heFBlcmZvcm1hbnRNb2RlQ29tbWFuZHM7CisJdTgJCXJlc2VydmVkWzB4NzggLSAweDU4XTsKKwl1MzIJCW1pc2NfZndfc3VwcG9ydDsgLyogb2Zmc2V0IDB4NzggKi8KKyNkZWZpbmUJCQlNSVNDX0ZXX0RPT1JCRUxMX1JFU0VUICgweDAyKQogfTsKIAogI2RlZmluZSBOVU1fQkxPQ0tGRVRDSF9FTlRSSUVTIDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ocHRpb3AuYyBiL2RyaXZlcnMvc2NzaS9ocHRpb3AuYwppbmRleCA2NDVmN2NkLi4wNzI5ZjE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaHB0aW9wLmMKKysrIGIvZHJpdmVycy9zY3NpL2hwdGlvcC5jCkBAIC0xMTU3LDcgKzExNTcsNyBAQAogZGlzYWJsZV9wY2lfZGV2aWNlOgogCXBjaV9kaXNhYmxlX2RldmljZShwY2lkZXYpOwogCi0JZHByaW50aygic2NzaSVkOiBocHRpb3BfcHJvYmUgZmFpbFxuIiwgaG9zdC0+aG9zdF9ubyk7CisJZHByaW50aygic2NzaSVkOiBocHRpb3BfcHJvYmUgZmFpbFxuIiwgaG9zdCA/IGhvc3QtPmhvc3Rfbm8gOiAwKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jCmluZGV4IGZlZjQ5NTIuLmJkOTZjZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmMKQEAgLTUwNCwxMiArNTA0LDIzIEBACiAJCWlmICh2aG9zdC0+YWN0aW9uID09IElCTVZGQ19IT1NUX0FDVElPTl9BTExPQ19UR1RTKQogCQkJdmhvc3QtPmFjdGlvbiA9IGFjdGlvbjsKIAkJYnJlYWs7Ci0JY2FzZSBJQk1WRkNfSE9TVF9BQ1RJT05fTE9HTzoKIAljYXNlIElCTVZGQ19IT1NUX0FDVElPTl9JTklUOgogCWNhc2UgSUJNVkZDX0hPU1RfQUNUSU9OX1RHVF9ERUw6CisJCXN3aXRjaCAodmhvc3QtPmFjdGlvbikgeworCQljYXNlIElCTVZGQ19IT1NUX0FDVElPTl9SRVNFVDoKKwkJY2FzZSBJQk1WRkNfSE9TVF9BQ1RJT05fUkVFTkFCTEU6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXZob3N0LT5hY3Rpb24gPSBhY3Rpb247CisJCQlicmVhazsKKwkJfTsKKwkJYnJlYWs7CisJY2FzZSBJQk1WRkNfSE9TVF9BQ1RJT05fTE9HTzoKIAljYXNlIElCTVZGQ19IT1NUX0FDVElPTl9RVUVSWV9UR1RTOgogCWNhc2UgSUJNVkZDX0hPU1RfQUNUSU9OX1RHVF9ERUxfRkFJTEVEOgogCWNhc2UgSUJNVkZDX0hPU1RfQUNUSU9OX05PTkU6CisJY2FzZSBJQk1WRkNfSE9TVF9BQ1RJT05fUkVTRVQ6CisJY2FzZSBJQk1WRkNfSE9TVF9BQ1RJT05fUkVFTkFCTEU6CiAJZGVmYXVsdDoKIAkJdmhvc3QtPmFjdGlvbiA9IGFjdGlvbjsKIAkJYnJlYWs7CkBAIC02NDEsNyArNjUyLDcgQEAKICAqKi8KIHN0YXRpYyB2b2lkIGlibXZmY19yZWxlYXNlX2NycV9xdWV1ZShzdHJ1Y3QgaWJtdmZjX2hvc3QgKnZob3N0KQogewotCWxvbmcgcmM7CisJbG9uZyByYyA9IDA7CiAJc3RydWN0IHZpb19kZXYgKnZkZXYgPSB0b192aW9fZGV2KHZob3N0LT5kZXYpOwogCXN0cnVjdCBpYm12ZmNfY3JxX3F1ZXVlICpjcnEgPSAmdmhvc3QtPmNycTsKIApAQCAtNjQ5LDYgKzY2MCw4IEBACiAJZnJlZV9pcnEodmRldi0+aXJxLCB2aG9zdCk7CiAJdGFza2xldF9raWxsKCZ2aG9zdC0+dGFza2xldCk7CiAJZG8geworCQlpZiAocmMpCisJCQltc2xlZXAoMTAwKTsKIAkJcmMgPSBwbHBhcl9oY2FsbF9ub3JldHMoSF9GUkVFX0NSUSwgdmRldi0+dW5pdF9hZGRyZXNzKTsKIAl9IHdoaWxlIChyYyA9PSBIX0JVU1kgfHwgSF9JU19MT05HX0JVU1kocmMpKTsKIApAQCAtNjY3LDExICs2ODAsMTMgQEAKICAqKi8KIHN0YXRpYyBpbnQgaWJtdmZjX3JlZW5hYmxlX2NycV9xdWV1ZShzdHJ1Y3QgaWJtdmZjX2hvc3QgKnZob3N0KQogewotCWludCByYzsKKwlpbnQgcmMgPSAwOwogCXN0cnVjdCB2aW9fZGV2ICp2ZGV2ID0gdG9fdmlvX2Rldih2aG9zdC0+ZGV2KTsKIAogCS8qIFJlLWVuYWJsZSB0aGUgQ1JRICovCiAJZG8geworCQlpZiAocmMpCisJCQltc2xlZXAoMTAwKTsKIAkJcmMgPSBwbHBhcl9oY2FsbF9ub3JldHMoSF9FTkFCTEVfQ1JRLCB2ZGV2LT51bml0X2FkZHJlc3MpOwogCX0gd2hpbGUgKHJjID09IEhfSU5fUFJPR1JFU1MgfHwgcmMgPT0gSF9CVVNZIHx8IEhfSVNfTE9OR19CVVNZKHJjKSk7CiAKQEAgLTY5MCwxNSArNzA1LDE5IEBACiAgKiovCiBzdGF0aWMgaW50IGlibXZmY19yZXNldF9jcnEoc3RydWN0IGlibXZmY19ob3N0ICp2aG9zdCkKIHsKLQlpbnQgcmM7CisJaW50IHJjID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCB2aW9fZGV2ICp2ZGV2ID0gdG9fdmlvX2Rldih2aG9zdC0+ZGV2KTsKIAlzdHJ1Y3QgaWJtdmZjX2NycV9xdWV1ZSAqY3JxID0gJnZob3N0LT5jcnE7CiAKIAkvKiBDbG9zZSB0aGUgQ1JRICovCiAJZG8geworCQlpZiAocmMpCisJCQltc2xlZXAoMTAwKTsKIAkJcmMgPSBwbHBhcl9oY2FsbF9ub3JldHMoSF9GUkVFX0NSUSwgdmRldi0+dW5pdF9hZGRyZXNzKTsKIAl9IHdoaWxlIChyYyA9PSBIX0JVU1kgfHwgSF9JU19MT05HX0JVU1kocmMpKTsKIAorCXNwaW5fbG9ja19pcnFzYXZlKHZob3N0LT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAl2aG9zdC0+c3RhdGUgPSBJQk1WRkNfTk9fQ1JROwogCXZob3N0LT5sb2dnZWRfaW4gPSAwOwogCWlibXZmY19zZXRfaG9zdF9hY3Rpb24odmhvc3QsIElCTVZGQ19IT1NUX0FDVElPTl9OT05FKTsKQEAgLTcxNiw2ICs3MzUsNyBAQAogCQlkZXZfd2Fybih2aG9zdC0+ZGV2LCAiUGFydG5lciBhZGFwdGVyIG5vdCByZWFkeVxuIik7CiAJZWxzZSBpZiAocmMgIT0gMCkKIAkJZGV2X3dhcm4odmhvc3QtPmRldiwgIkNvdWxkbid0IHJlZ2lzdGVyIGNycSAocmM9JWQpXG4iLCByYyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh2aG9zdC0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC04MjEsMTcgKzg0MSw5IEBACiAgKiovCiBzdGF0aWMgdm9pZCBpYm12ZmNfaGFyZF9yZXNldF9ob3N0KHN0cnVjdCBpYm12ZmNfaG9zdCAqdmhvc3QpCiB7Ci0JaW50IHJjOwotCi0Jc2NzaV9ibG9ja19yZXF1ZXN0cyh2aG9zdC0+aG9zdCk7CiAJaWJtdmZjX3B1cmdlX3JlcXVlc3RzKHZob3N0LCBESURfRVJST1IpOwotCWlmICgocmMgPSBpYm12ZmNfcmVzZXRfY3JxKHZob3N0KSkgfHwKLQkgICAgKHJjID0gaWJtdmZjX3NlbmRfY3JxX2luaXQodmhvc3QpKSB8fAotCSAgICAocmMgPSB2aW9fZW5hYmxlX2ludGVycnVwdHModG9fdmlvX2Rldih2aG9zdC0+ZGV2KSkpKSB7Ci0JCWRldl9lcnIodmhvc3QtPmRldiwgIkVycm9yIGFmdGVyIHJlc2V0IHJjPSVkXG4iLCByYyk7Ci0JCWlibXZmY19saW5rX2Rvd24odmhvc3QsIElCTVZGQ19MSU5LX0RFQUQpOwotCX0gZWxzZQotCQlpYm12ZmNfbGlua19kb3duKHZob3N0LCBJQk1WRkNfTElOS19ET1dOKTsKKwlpYm12ZmNfbGlua19kb3duKHZob3N0LCBJQk1WRkNfTElOS19ET1dOKTsKKwlpYm12ZmNfc2V0X2hvc3RfYWN0aW9uKHZob3N0LCBJQk1WRkNfSE9TVF9BQ1RJT05fUkVTRVQpOwogfQogCiAvKioKQEAgLTIyOTksNiArMjMxMSw3IEBACiAJaW50IHJjID0gRkFJTEVEOwogCiAJRU5URVI7CisJZmNfYmxvY2tfc2NzaV9laChjbWQpOwogCWlibXZmY193YWl0X3doaWxlX3Jlc2V0dGluZyh2aG9zdCk7CiAJY2FuY2VsX3JjID0gaWJtdmZjX2NhbmNlbF9hbGwoc2RldiwgSUJNVkZDX1RNRl9BQk9SVF9UQVNLX1NFVCk7CiAJYWJvcnRfcmMgPSBpYm12ZmNfYWJvcnRfdGFza19zZXQoc2Rldik7CkBAIC0yMzI1LDYgKzIzMzgsNyBAQAogCWludCByYyA9IEZBSUxFRDsKIAogCUVOVEVSOworCWZjX2Jsb2NrX3Njc2lfZWgoY21kKTsKIAlpYm12ZmNfd2FpdF93aGlsZV9yZXNldHRpbmcodmhvc3QpOwogCWNhbmNlbF9yYyA9IGlibXZmY19jYW5jZWxfYWxsKHNkZXYsIElCTVZGQ19UTUZfTFVOX1JFU0VUKTsKIAlyZXNldF9yYyA9IGlibXZmY19yZXNldF9kZXZpY2Uoc2RldiwgSUJNVkZDX0xVTl9SRVNFVCwgIkxVTiIpOwpAQCAtMjM4OSw2ICsyNDAzLDcgQEAKIAl1bnNpZ25lZCBsb25nIGNhbmNlbF9yYyA9IDA7CiAKIAlFTlRFUjsKKwlmY19ibG9ja19zY3NpX2VoKGNtZCk7CiAJaWJtdmZjX3dhaXRfd2hpbGVfcmVzZXR0aW5nKHZob3N0KTsKIAlzdGFyZ2V0X2Zvcl9lYWNoX2RldmljZShzdGFyZ2V0LCAmY2FuY2VsX3JjLCBpYm12ZmNfZGV2X2NhbmNlbF9hbGxfcmVzZXQpOwogCXJlc2V0X3JjID0gaWJtdmZjX3Jlc2V0X2RldmljZShzZGV2LCBJQk1WRkNfVEFSR0VUX1JFU0VULCAidGFyZ2V0Iik7CkBAIC0yNDEwLDYgKzI0MjUsNyBAQAogCWludCByYzsKIAlzdHJ1Y3QgaWJtdmZjX2hvc3QgKnZob3N0ID0gc2hvc3RfcHJpdihjbWQtPmRldmljZS0+aG9zdCk7CiAKKwlmY19ibG9ja19zY3NpX2VoKGNtZCk7CiAJZGV2X2Vycih2aG9zdC0+ZGV2LCAiUmVzZXR0aW5nIGNvbm5lY3Rpb24gZHVlIHRvIGVycm9yIHJlY292ZXJ5XG4iKTsKIAlyYyA9IGlibXZmY19pc3N1ZV9mY19ob3N0X2xpcCh2aG9zdC0+aG9zdCk7CiAJcmV0dXJuIHJjID8gRkFJTEVEIDogU1VDQ0VTUzsKQEAgLTI2MDYsMjIgKzI2MjIsMTMgQEAKIAkJCWRldl9pbmZvKHZob3N0LT5kZXYsICJSZS1lbmFibGluZyBhZGFwdGVyXG4iKTsKIAkJCXZob3N0LT5jbGllbnRfbWlncmF0ZWQgPSAxOwogCQkJaWJtdmZjX3B1cmdlX3JlcXVlc3RzKHZob3N0LCBESURfUkVRVUVVRSk7Ci0JCQlpZiAoKHJjID0gaWJtdmZjX3JlZW5hYmxlX2NycV9xdWV1ZSh2aG9zdCkpIHx8Ci0JCQkgICAgKHJjID0gaWJtdmZjX3NlbmRfY3JxX2luaXQodmhvc3QpKSkgewotCQkJCWlibXZmY19saW5rX2Rvd24odmhvc3QsIElCTVZGQ19MSU5LX0RFQUQpOwotCQkJCWRldl9lcnIodmhvc3QtPmRldiwgIkVycm9yIGFmdGVyIGVuYWJsZSAocmM9JWxkKVxuIiwgcmMpOwotCQkJfSBlbHNlCi0JCQkJaWJtdmZjX2xpbmtfZG93bih2aG9zdCwgSUJNVkZDX0xJTktfRE9XTik7CisJCQlpYm12ZmNfbGlua19kb3duKHZob3N0LCBJQk1WRkNfTElOS19ET1dOKTsKKwkJCWlibXZmY19zZXRfaG9zdF9hY3Rpb24odmhvc3QsIElCTVZGQ19IT1NUX0FDVElPTl9SRUVOQUJMRSk7CiAJCX0gZWxzZSB7CiAJCQlkZXZfZXJyKHZob3N0LT5kZXYsICJWaXJ0dWFsIGFkYXB0ZXIgZmFpbGVkIChyYz0lZClcbiIsIGNycS0+Zm9ybWF0KTsKLQogCQkJaWJtdmZjX3B1cmdlX3JlcXVlc3RzKHZob3N0LCBESURfRVJST1IpOwotCQkJaWYgKChyYyA9IGlibXZmY19yZXNldF9jcnEodmhvc3QpKSB8fAotCQkJICAgIChyYyA9IGlibXZmY19zZW5kX2NycV9pbml0KHZob3N0KSkpIHsKLQkJCQlpYm12ZmNfbGlua19kb3duKHZob3N0LCBJQk1WRkNfTElOS19ERUFEKTsKLQkJCQlkZXZfZXJyKHZob3N0LT5kZXYsICJFcnJvciBhZnRlciByZXNldCAocmM9JWxkKVxuIiwgcmMpOwotCQkJfSBlbHNlCi0JCQkJaWJtdmZjX2xpbmtfZG93bih2aG9zdCwgSUJNVkZDX0xJTktfRE9XTik7CisJCQlpYm12ZmNfbGlua19kb3duKHZob3N0LCBJQk1WRkNfTElOS19ET1dOKTsKKwkJCWlibXZmY19zZXRfaG9zdF9hY3Rpb24odmhvc3QsIElCTVZGQ19IT1NUX0FDVElPTl9SRVNFVCk7CiAJCX0KIAkJcmV0dXJuOwogCWNhc2UgSUJNVkZDX0NSUV9DTURfUlNQOgpAQCAtNDEyMyw2ICs0MTMwLDggQEAKIAljYXNlIElCTVZGQ19IT1NUX0FDVElPTl9UR1RfREVMOgogCWNhc2UgSUJNVkZDX0hPU1RfQUNUSU9OX1RHVF9ERUxfRkFJTEVEOgogCWNhc2UgSUJNVkZDX0hPU1RfQUNUSU9OX1FVRVJZOgorCWNhc2UgSUJNVkZDX0hPU1RfQUNUSU9OX1JFU0VUOgorCWNhc2UgSUJNVkZDX0hPU1RfQUNUSU9OX1JFRU5BQkxFOgogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX07CkBAIC00MjIwLDYgKzQyMjksNyBAQAogCXN0cnVjdCBpYm12ZmNfdGFyZ2V0ICp0Z3Q7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OworCWludCByYzsKIAogCWlibXZmY19sb2dfYWUodmhvc3QsIHZob3N0LT5ldmVudHNfdG9fbG9nKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSh2aG9zdC0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CkBAIC00MjI5LDYgKzQyMzksMjcgQEAKIAljYXNlIElCTVZGQ19IT1NUX0FDVElPTl9MT0dPX1dBSVQ6CiAJY2FzZSBJQk1WRkNfSE9TVF9BQ1RJT05fSU5JVF9XQUlUOgogCQlicmVhazsKKwljYXNlIElCTVZGQ19IT1NUX0FDVElPTl9SRVNFVDoKKwkJdmhvc3QtPmFjdGlvbiA9IElCTVZGQ19IT1NUX0FDVElPTl9UR1RfREVMOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHZob3N0LT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJcmMgPSBpYm12ZmNfcmVzZXRfY3JxKHZob3N0KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUodmhvc3QtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlpZiAocmMgfHwgKHJjID0gaWJtdmZjX3NlbmRfY3JxX2luaXQodmhvc3QpKSB8fAorCQkgICAgKHJjID0gdmlvX2VuYWJsZV9pbnRlcnJ1cHRzKHRvX3Zpb19kZXYodmhvc3QtPmRldikpKSkgeworCQkJaWJtdmZjX2xpbmtfZG93bih2aG9zdCwgSUJNVkZDX0xJTktfREVBRCk7CisJCQlkZXZfZXJyKHZob3N0LT5kZXYsICJFcnJvciBhZnRlciByZXNldCAocmM9JWQpXG4iLCByYyk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBJQk1WRkNfSE9TVF9BQ1RJT05fUkVFTkFCTEU6CisJCXZob3N0LT5hY3Rpb24gPSBJQk1WRkNfSE9TVF9BQ1RJT05fVEdUX0RFTDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh2aG9zdC0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCXJjID0gaWJtdmZjX3JlZW5hYmxlX2NycV9xdWV1ZSh2aG9zdCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKHZob3N0LT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJaWYgKHJjIHx8IChyYyA9IGlibXZmY19zZW5kX2NycV9pbml0KHZob3N0KSkpIHsKKwkJCWlibXZmY19saW5rX2Rvd24odmhvc3QsIElCTVZGQ19MSU5LX0RFQUQpOworCQkJZGV2X2Vycih2aG9zdC0+ZGV2LCAiRXJyb3IgYWZ0ZXIgZW5hYmxlIChyYz0lZClcbiIsIHJjKTsKKwkJfQorCQlicmVhazsKIAljYXNlIElCTVZGQ19IT1NUX0FDVElPTl9MT0dPOgogCQl2aG9zdC0+am9iX3N0ZXAodmhvc3QpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuaCBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuaAppbmRleCA3ZTk3NDI3Li5kN2U4ZGNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmgKKysrIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5oCkBAIC0yOSw4ICsyOSw4IEBACiAjaW5jbHVkZSAidmlvc3JwLmgiCiAKICNkZWZpbmUgSUJNVkZDX05BTUUJImlibXZmYyIKLSNkZWZpbmUgSUJNVkZDX0RSSVZFUl9WRVJTSU9OCQkiMS4wLjciCi0jZGVmaW5lIElCTVZGQ19EUklWRVJfREFURQkJIihPY3RvYmVyIDE2LCAyMDA5KSIKKyNkZWZpbmUgSUJNVkZDX0RSSVZFUl9WRVJTSU9OCQkiMS4wLjgiCisjZGVmaW5lIElCTVZGQ19EUklWRVJfREFURQkJIihKdW5lIDE3LCAyMDEwKSIKIAogI2RlZmluZSBJQk1WRkNfREVGQVVMVF9USU1FT1VUCTYwCiAjZGVmaW5lIElCTVZGQ19BRElTQ19DQU5DRUxfVElNRU9VVAk0NQpAQCAtNjQ5LDYgKzY0OSw4IEBACiAKIGVudW0gaWJtdmZjX2hvc3RfYWN0aW9uIHsKIAlJQk1WRkNfSE9TVF9BQ1RJT05fTk9ORSA9IDAsCisJSUJNVkZDX0hPU1RfQUNUSU9OX1JFU0VULAorCUlCTVZGQ19IT1NUX0FDVElPTl9SRUVOQUJMRSwKIAlJQk1WRkNfSE9TVF9BQ1RJT05fTE9HTywKIAlJQk1WRkNfSE9TVF9BQ1RJT05fTE9HT19XQUlULAogCUlCTVZGQ19IT1NUX0FDVElPTl9JTklULApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYwppbmRleCBhYWQzNWNjLi42N2Y3OGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYwpAQCAtNzMsNiArNzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS92aW8uaD4KICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KQEAgLTEwMSw3ICsxMDIsNyBAQAogCiBzdGF0aWMgc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlICppYm12c2NzaV90cmFuc3BvcnRfdGVtcGxhdGU7CiAKLSNkZWZpbmUgSUJNVlNDU0lfVkVSU0lPTiAiMS41LjgiCisjZGVmaW5lIElCTVZTQ1NJX1ZFUlNJT04gIjEuNS45IgogCiBzdGF0aWMgc3RydWN0IGlibXZzY3NpX29wcyAqaWJtdnNjc2lfb3BzOwogCkBAIC00NzMsMjMgKzQ3NCwyNiBAQAogICovCiBzdGF0aWMgdm9pZCBwdXJnZV9yZXF1ZXN0cyhzdHJ1Y3QgaWJtdnNjc2lfaG9zdF9kYXRhICpob3N0ZGF0YSwgaW50IGVycm9yX2NvZGUpCiB7Ci0Jc3RydWN0IHNycF9ldmVudF9zdHJ1Y3QgKnRtcF9ldnQsICpwb3M7CisJc3RydWN0IHNycF9ldmVudF9zdHJ1Y3QgKmV2dDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoaG9zdGRhdGEtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0bXBfZXZ0LCBwb3MsICZob3N0ZGF0YS0+c2VudCwgbGlzdCkgewotCQlsaXN0X2RlbCgmdG1wX2V2dC0+bGlzdCk7Ci0JCWRlbF90aW1lcigmdG1wX2V2dC0+dGltZXIpOwotCQlpZiAodG1wX2V2dC0+Y21uZCkgewotCQkJdG1wX2V2dC0+Y21uZC0+cmVzdWx0ID0gKGVycm9yX2NvZGUgPDwgMTYpOwotCQkJdW5tYXBfY21kX2RhdGEoJnRtcF9ldnQtPml1LnNycC5jbWQsCi0JCQkJICAgICAgIHRtcF9ldnQsCi0JCQkJICAgICAgIHRtcF9ldnQtPmhvc3RkYXRhLT5kZXYpOwotCQkJaWYgKHRtcF9ldnQtPmNtbmRfZG9uZSkKLQkJCQl0bXBfZXZ0LT5jbW5kX2RvbmUodG1wX2V2dC0+Y21uZCk7Ci0JCX0gZWxzZSBpZiAodG1wX2V2dC0+ZG9uZSkKLQkJCXRtcF9ldnQtPmRvbmUodG1wX2V2dCk7Ci0JCWZyZWVfZXZlbnRfc3RydWN0KCZ0bXBfZXZ0LT5ob3N0ZGF0YS0+cG9vbCwgdG1wX2V2dCk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZob3N0ZGF0YS0+c2VudCkpIHsKKwkJZXZ0ID0gbGlzdF9maXJzdF9lbnRyeSgmaG9zdGRhdGEtPnNlbnQsIHN0cnVjdCBzcnBfZXZlbnRfc3RydWN0LCBsaXN0KTsKKwkJbGlzdF9kZWwoJmV2dC0+bGlzdCk7CisJCWRlbF90aW1lcigmZXZ0LT50aW1lcik7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShob3N0ZGF0YS0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCWlmIChldnQtPmNtbmQpIHsKKwkJCWV2dC0+Y21uZC0+cmVzdWx0ID0gKGVycm9yX2NvZGUgPDwgMTYpOworCQkJdW5tYXBfY21kX2RhdGEoJmV2dC0+aXUuc3JwLmNtZCwgZXZ0LAorCQkJCSAgICAgICBldnQtPmhvc3RkYXRhLT5kZXYpOworCQkJaWYgKGV2dC0+Y21uZF9kb25lKQorCQkJCWV2dC0+Y21uZF9kb25lKGV2dC0+Y21uZCk7CisJCX0gZWxzZSBpZiAoZXZ0LT5kb25lKQorCQkJZXZ0LT5kb25lKGV2dCk7CisJCWZyZWVfZXZlbnRfc3RydWN0KCZldnQtPmhvc3RkYXRhLT5wb29sLCBldnQpOworCQlzcGluX2xvY2tfaXJxc2F2ZShob3N0ZGF0YS0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaG9zdGRhdGEtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogfQpAQCAtNTA0LDE0ICs1MDgsOCBAQAogCWF0b21pY19zZXQoJmhvc3RkYXRhLT5yZXF1ZXN0X2xpbWl0LCAwKTsKIAogCXB1cmdlX3JlcXVlc3RzKGhvc3RkYXRhLCBESURfRVJST1IpOwotCWlmICgoaWJtdnNjc2lfb3BzLT5yZXNldF9jcnFfcXVldWUoJmhvc3RkYXRhLT5xdWV1ZSwgaG9zdGRhdGEpKSB8fAotCSAgICAoaWJtdnNjc2lfb3BzLT5zZW5kX2NycShob3N0ZGF0YSwgMHhDMDAxMDAwMDAwMDAwMDAwTEwsIDApKSB8fAotCSAgICAodmlvX2VuYWJsZV9pbnRlcnJ1cHRzKHRvX3Zpb19kZXYoaG9zdGRhdGEtPmRldikpKSkgewotCQlhdG9taWNfc2V0KCZob3N0ZGF0YS0+cmVxdWVzdF9saW1pdCwgLTEpOwotCQlkZXZfZXJyKGhvc3RkYXRhLT5kZXYsICJlcnJvciBhZnRlciByZXNldFxuIik7Ci0JfQotCi0Jc2NzaV91bmJsb2NrX3JlcXVlc3RzKGhvc3RkYXRhLT5ob3N0KTsKKwlob3N0ZGF0YS0+cmVzZXRfY3JxID0gMTsKKwl3YWtlX3VwKCZob3N0ZGF0YS0+d29ya193YWl0X3EpOwogfQogCiAvKioKQEAgLTU1MCw2ICs1NDgsNyBAQAogCXU2NCAqY3JxX2FzX3U2NCA9ICh1NjQgKikgJmV2dF9zdHJ1Y3QtPmNycTsKIAlpbnQgcmVxdWVzdF9zdGF0dXMgPSAwOwogCWludCByYzsKKwlpbnQgc3JwX3JlcSA9IDA7CiAKIAkvKiBJZiB3ZSBoYXZlIGV4aGF1c3RlZCBvdXIgcmVxdWVzdCBsaW1pdCwganVzdCBmYWlsIHRoaXMgcmVxdWVzdCwKIAkgKiB1bmxlc3MgaXQgaXMgZm9yIGEgcmVzZXQgb3IgYWJvcnQuCkBAIC01NTgsNiArNTU3LDcgQEAKIAkgKiBjYW4gaGFuZGxlIG1vcmUgcmVxdWVzdHMgKGNhbl9xdWV1ZSkgd2hlbiB3ZSBhY3R1YWxseSBjYW4ndAogCSAqLwogCWlmIChldnRfc3RydWN0LT5jcnEuZm9ybWF0ID09IFZJT1NSUF9TUlBfRk9STUFUKSB7CisJCXNycF9yZXEgPSAxOwogCQlyZXF1ZXN0X3N0YXR1cyA9CiAJCQlhdG9taWNfZGVjX2lmX3Bvc2l0aXZlKCZob3N0ZGF0YS0+cmVxdWVzdF9saW1pdCk7CiAJCS8qIElmIHJlcXVlc3QgbGltaXQgd2FzIC0xIHdoZW4gd2Ugc3RhcnRlZCwgaXQgaXMgbm93IGV2ZW4KQEAgLTYzMiw3ICs2MzIsOCBAQAogCQkJZ290byBzZW5kX2J1c3k7CiAJCX0KIAkJZGV2X2Vycihob3N0ZGF0YS0+ZGV2LCAic2VuZCBlcnJvciAlZFxuIiwgcmMpOwotCQlhdG9taWNfaW5jKCZob3N0ZGF0YS0+cmVxdWVzdF9saW1pdCk7CisJCWlmIChzcnBfcmVxKQorCQkJYXRvbWljX2luYygmaG9zdGRhdGEtPnJlcXVlc3RfbGltaXQpOwogCQlnb3RvIHNlbmRfZXJyb3I7CiAJfQogCkBAIC02NDIsNyArNjQzLDcgQEAKIAl1bm1hcF9jbWRfZGF0YSgmZXZ0X3N0cnVjdC0+aXUuc3JwLmNtZCwgZXZ0X3N0cnVjdCwgaG9zdGRhdGEtPmRldik7CiAKIAlmcmVlX2V2ZW50X3N0cnVjdCgmaG9zdGRhdGEtPnBvb2wsIGV2dF9zdHJ1Y3QpOwotCWlmIChyZXF1ZXN0X3N0YXR1cyAhPSAtMSkKKwlpZiAoc3JwX3JlcSAmJiByZXF1ZXN0X3N0YXR1cyAhPSAtMSkKIAkJYXRvbWljX2luYygmaG9zdGRhdGEtPnJlcXVlc3RfbGltaXQpOwogCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwogCkBAIC0xNDYyLDMwICsxNDYzLDE0IEBACiAJCQkvKiBXZSBuZWVkIHRvIHJlLXNldHVwIHRoZSBpbnRlcnBhcnRpdGlvbiBjb25uZWN0aW9uICovCiAJCQlkZXZfaW5mbyhob3N0ZGF0YS0+ZGV2LCAiUmUtZW5hYmxpbmcgYWRhcHRlciFcbiIpOwogCQkJaG9zdGRhdGEtPmNsaWVudF9taWdyYXRlZCA9IDE7CisJCQlob3N0ZGF0YS0+cmVlbmFibGVfY3JxID0gMTsKIAkJCXB1cmdlX3JlcXVlc3RzKGhvc3RkYXRhLCBESURfUkVRVUVVRSk7Ci0JCQlpZiAoKGlibXZzY3NpX29wcy0+cmVlbmFibGVfY3JxX3F1ZXVlKCZob3N0ZGF0YS0+cXVldWUsCi0JCQkJCQkJICAgICAgaG9zdGRhdGEpKSB8fAotCQkJICAgIChpYm12c2NzaV9vcHMtPnNlbmRfY3JxKGhvc3RkYXRhLAotCQkJCQkJICAgIDB4QzAwMTAwMDAwMDAwMDAwMExMLCAwKSkpIHsKLQkJCQkJYXRvbWljX3NldCgmaG9zdGRhdGEtPnJlcXVlc3RfbGltaXQsCi0JCQkJCQkgICAtMSk7Ci0JCQkJCWRldl9lcnIoaG9zdGRhdGEtPmRldiwgImVycm9yIGFmdGVyIGVuYWJsZVxuIik7Ci0JCQl9CisJCQl3YWtlX3VwKCZob3N0ZGF0YS0+d29ya193YWl0X3EpOwogCQl9IGVsc2UgewogCQkJZGV2X2Vycihob3N0ZGF0YS0+ZGV2LCAiVmlydHVhbCBhZGFwdGVyIGZhaWxlZCByYyAlZCFcbiIsCiAJCQkJY3JxLT5mb3JtYXQpOwotCi0JCQlwdXJnZV9yZXF1ZXN0cyhob3N0ZGF0YSwgRElEX0VSUk9SKTsKLQkJCWlmICgoaWJtdnNjc2lfb3BzLT5yZXNldF9jcnFfcXVldWUoJmhvc3RkYXRhLT5xdWV1ZSwKLQkJCQkJCQkgICBob3N0ZGF0YSkpIHx8Ci0JCQkgICAgKGlibXZzY3NpX29wcy0+c2VuZF9jcnEoaG9zdGRhdGEsCi0JCQkJCQkgICAgMHhDMDAxMDAwMDAwMDAwMDAwTEwsIDApKSkgewotCQkJCQlhdG9taWNfc2V0KCZob3N0ZGF0YS0+cmVxdWVzdF9saW1pdCwKLQkJCQkJCSAgIC0xKTsKLQkJCQkJZGV2X2Vycihob3N0ZGF0YS0+ZGV2LCAiZXJyb3IgYWZ0ZXIgcmVzZXRcbiIpOwotCQkJfQorCQkJaWJtdnNjc2lfcmVzZXRfaG9zdChob3N0ZGF0YSk7CiAJCX0KLQkJc2NzaV91bmJsb2NrX3JlcXVlc3RzKGhvc3RkYXRhLT5ob3N0KTsKIAkJcmV0dXJuOwogCWNhc2UgMHg4MDoJCS8qIHJlYWwgcGF5bG9hZCAqLwogCQlicmVhazsKQEAgLTE4NTAsNiArMTgzNSw3NSBAQAogCXJldHVybiBkZXNpcmVkX2lvOwogfQogCitzdGF0aWMgdm9pZCBpYm12c2NzaV9kb193b3JrKHN0cnVjdCBpYm12c2NzaV9ob3N0X2RhdGEgKmhvc3RkYXRhKQoreworCWludCByYzsKKwljaGFyICphY3Rpb24gPSAicmVzZXQiOworCisJaWYgKGhvc3RkYXRhLT5yZXNldF9jcnEpIHsKKwkJc21wX3JtYigpOworCQlob3N0ZGF0YS0+cmVzZXRfY3JxID0gMDsKKworCQlyYyA9IGlibXZzY3NpX29wcy0+cmVzZXRfY3JxX3F1ZXVlKCZob3N0ZGF0YS0+cXVldWUsIGhvc3RkYXRhKTsKKwkJaWYgKCFyYykKKwkJCXJjID0gaWJtdnNjc2lfb3BzLT5zZW5kX2NycShob3N0ZGF0YSwgMHhDMDAxMDAwMDAwMDAwMDAwTEwsIDApOworCQlpZiAoIXJjKQorCQkJcmMgPSB2aW9fZW5hYmxlX2ludGVycnVwdHModG9fdmlvX2Rldihob3N0ZGF0YS0+ZGV2KSk7CisJfSBlbHNlIGlmIChob3N0ZGF0YS0+cmVlbmFibGVfY3JxKSB7CisJCXNtcF9ybWIoKTsKKwkJYWN0aW9uID0gImVuYWJsZSI7CisJCXJjID0gaWJtdnNjc2lfb3BzLT5yZWVuYWJsZV9jcnFfcXVldWUoJmhvc3RkYXRhLT5xdWV1ZSwgaG9zdGRhdGEpOworCQlob3N0ZGF0YS0+cmVlbmFibGVfY3JxID0gMDsKKwkJaWYgKCFyYykKKwkJCXJjID0gaWJtdnNjc2lfb3BzLT5zZW5kX2NycShob3N0ZGF0YSwgMHhDMDAxMDAwMDAwMDAwMDAwTEwsIDApOworCX0gZWxzZQorCQlyZXR1cm47CisKKwlpZiAocmMpIHsKKwkJYXRvbWljX3NldCgmaG9zdGRhdGEtPnJlcXVlc3RfbGltaXQsIC0xKTsKKwkJZGV2X2Vycihob3N0ZGF0YS0+ZGV2LCAiZXJyb3IgYWZ0ZXIgJXNcbiIsIGFjdGlvbik7CisJfQorCisJc2NzaV91bmJsb2NrX3JlcXVlc3RzKGhvc3RkYXRhLT5ob3N0KTsKK30KKworc3RhdGljIGludCBpYm12c2NzaV93b3JrX3RvX2RvKHN0cnVjdCBpYm12c2NzaV9ob3N0X2RhdGEgKmhvc3RkYXRhKQoreworCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJCXJldHVybiAxOworCWVsc2UgaWYgKGhvc3RkYXRhLT5yZXNldF9jcnEpIHsKKwkJc21wX3JtYigpOworCQlyZXR1cm4gMTsKKwl9IGVsc2UgaWYgKGhvc3RkYXRhLT5yZWVuYWJsZV9jcnEpIHsKKwkJc21wX3JtYigpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpYm12c2NzaV93b3JrKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGlibXZzY3NpX2hvc3RfZGF0YSAqaG9zdGRhdGEgPSBkYXRhOworCWludCByYzsKKworCXNldF91c2VyX25pY2UoY3VycmVudCwgLTIwKTsKKworCXdoaWxlICgxKSB7CisJCXJjID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGhvc3RkYXRhLT53b3JrX3dhaXRfcSwKKwkJCQkJICAgICAgaWJtdnNjc2lfd29ya190b19kbyhob3N0ZGF0YSkpOworCisJCUJVR19PTihyYyk7CisKKwkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKKwkJCWJyZWFrOworCisJCWlibXZzY3NpX2RvX3dvcmsoaG9zdGRhdGEpOworCX0KKworCXJldHVybiAwOworfQorCiAvKioKICAqIENhbGxlZCBieSBidXMgY29kZSBmb3IgZWFjaCBhZGFwdGVyCiAgKi8KQEAgLTE4NzUsNiArMTkyOSw3IEBACiAJaG9zdGRhdGEgPSBzaG9zdF9wcml2KGhvc3QpOwogCW1lbXNldChob3N0ZGF0YSwgMHgwMCwgc2l6ZW9mKCpob3N0ZGF0YSkpOwogCUlOSVRfTElTVF9IRUFEKCZob3N0ZGF0YS0+c2VudCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmaG9zdGRhdGEtPndvcmtfd2FpdF9xKTsKIAlob3N0ZGF0YS0+aG9zdCA9IGhvc3Q7CiAJaG9zdGRhdGEtPmRldiA9IGRldjsKIAlhdG9taWNfc2V0KCZob3N0ZGF0YS0+cmVxdWVzdF9saW1pdCwgLTEpOwpAQCAtMTg4NSwxMCArMTk0MCwxOSBAQAogCQlnb3RvIHBlcnNpc3RfYnVmc19mYWlsZWQ7CiAJfQogCisJaG9zdGRhdGEtPndvcmtfdGhyZWFkID0ga3RocmVhZF9ydW4oaWJtdnNjc2lfd29yaywgaG9zdGRhdGEsICIlc18lZCIsCisJCQkJCSAgICAiaWJtdnNjc2kiLCBob3N0LT5ob3N0X25vKTsKKworCWlmIChJU19FUlIoaG9zdGRhdGEtPndvcmtfdGhyZWFkKSkgeworCQlkZXZfZXJyKCZ2ZGV2LT5kZXYsICJjb3VsZG4ndCBpbml0aWFsaXplIGt0aHJlYWQuIHJjPSVsZFxuIiwKKwkJCVBUUl9FUlIoaG9zdGRhdGEtPndvcmtfdGhyZWFkKSk7CisJCWdvdG8gaW5pdF9jcnFfZmFpbGVkOworCX0KKwogCXJjID0gaWJtdnNjc2lfb3BzLT5pbml0X2NycV9xdWV1ZSgmaG9zdGRhdGEtPnF1ZXVlLCBob3N0ZGF0YSwgbWF4X2V2ZW50cyk7CiAJaWYgKHJjICE9IDAgJiYgcmMgIT0gSF9SRVNPVVJDRSkgewogCQlkZXZfZXJyKCZ2ZGV2LT5kZXYsICJjb3VsZG4ndCBpbml0aWFsaXplIGNycS4gcmM9JWRcbiIsIHJjKTsKLQkJZ290byBpbml0X2NycV9mYWlsZWQ7CisJCWdvdG8ga2lsbF9rdGhyZWFkOwogCX0KIAlpZiAoaW5pdGlhbGl6ZV9ldmVudF9wb29sKCZob3N0ZGF0YS0+cG9vbCwgbWF4X2V2ZW50cywgaG9zdGRhdGEpICE9IDApIHsKIAkJZGV2X2VycigmdmRldi0+ZGV2LCAiY291bGRuJ3QgaW5pdGlhbGl6ZSBldmVudCBwb29sXG4iKTsKQEAgLTE5NDQsNiArMjAwOCw4IEBACiAJcmVsZWFzZV9ldmVudF9wb29sKCZob3N0ZGF0YS0+cG9vbCwgaG9zdGRhdGEpOwogICAgICAgaW5pdF9wb29sX2ZhaWxlZDoKIAlpYm12c2NzaV9vcHMtPnJlbGVhc2VfY3JxX3F1ZXVlKCZob3N0ZGF0YS0+cXVldWUsIGhvc3RkYXRhLCBtYXhfZXZlbnRzKTsKKyAgICAgIGtpbGxfa3RocmVhZDoKKyAgICAgIGt0aHJlYWRfc3RvcChob3N0ZGF0YS0+d29ya190aHJlYWQpOwogICAgICAgaW5pdF9jcnFfZmFpbGVkOgogCXVubWFwX3BlcnNpc3RfYnVmcyhob3N0ZGF0YSk7CiAgICAgICBwZXJzaXN0X2J1ZnNfZmFpbGVkOgpAQCAtMTk2MCw2ICsyMDI2LDcgQEAKIAlpYm12c2NzaV9vcHMtPnJlbGVhc2VfY3JxX3F1ZXVlKCZob3N0ZGF0YS0+cXVldWUsIGhvc3RkYXRhLAogCQkJCQltYXhfZXZlbnRzKTsKIAorCWt0aHJlYWRfc3RvcChob3N0ZGF0YS0+d29ya190aHJlYWQpOwogCXNycF9yZW1vdmVfaG9zdChob3N0ZGF0YS0+aG9zdCk7CiAJc2NzaV9yZW1vdmVfaG9zdChob3N0ZGF0YS0+aG9zdCk7CiAJc2NzaV9ob3N0X3B1dChob3N0ZGF0YS0+aG9zdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuaCBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12c2NzaS5oCmluZGV4IDljYjdjNmEuLjAyMTk3YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12c2NzaS5oCisrKyBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12c2NzaS5oCkBAIC05MSwxMiArOTEsMTYgQEAKIHN0cnVjdCBpYm12c2NzaV9ob3N0X2RhdGEgewogCWF0b21pY190IHJlcXVlc3RfbGltaXQ7CiAJaW50IGNsaWVudF9taWdyYXRlZDsKKwlpbnQgcmVzZXRfY3JxOworCWludCByZWVuYWJsZV9jcnE7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCBldmVudF9wb29sIHBvb2w7CiAJc3RydWN0IGNycV9xdWV1ZSBxdWV1ZTsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3Qgc3JwX3Rhc2s7CiAJc3RydWN0IGxpc3RfaGVhZCBzZW50OwogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CisJc3RydWN0IHRhc2tfc3RydWN0ICp3b3JrX3RocmVhZDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3b3JrX3dhaXRfcTsKIAlzdHJ1Y3QgbWFkX2FkYXB0ZXJfaW5mb19kYXRhIG1hZGFwdGVyX2luZm87CiAJc3RydWN0IGNhcGFiaWxpdGllcyBjYXBzOwogCWRtYV9hZGRyX3QgY2Fwc19hZGRyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzdGd0LmMgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnN0Z3QuYwppbmRleCBlMjA1NmQ1Li4yMjU2YmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnN0Z3QuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnN0Z3QuYwpAQCAtOTU2LDcgKzk1Niw3IEBACiAJLml0X25leHVzX3Jlc3BvbnNlID0gaWJtdnN0Z3RfaXRfbmV4dXNfcmVzcG9uc2UsCiB9OwogCi1zdGF0aWMgaW50IGlibXZzdGd0X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGlibXZzdGd0X2luaXQodm9pZCkKIHsKIAlpbnQgZXJyID0gLUVOT01FTTsKIApAQCAtOTg3LDcgKzk4Nyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgaWJtdnN0Z3RfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGlibXZzdGd0X2V4aXQodm9pZCkKIHsKIAlwcmludGsoIlVucmVnaXN0ZXIgSUJNIHZpcnR1YWwgU0NTSSBkcml2ZXJcbiIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvcnBhX3ZzY3NpLmMgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvcnBhX3ZzY3NpLmMKaW5kZXggYTg2NGNjYy4uZjQ4YWUwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2libXZzY3NpL3JwYV92c2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9ycGFfdnNjc2kuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAjaW5jbHVkZSA8YXNtL2h2Y2FsbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KQEAgLTcxLDExICs3MiwxMyBAQAogCQkJCSAgICAgICBzdHJ1Y3QgaWJtdnNjc2lfaG9zdF9kYXRhICpob3N0ZGF0YSwKIAkJCQkgICAgICAgaW50IG1heF9yZXF1ZXN0cykKIHsKLQlsb25nIHJjOworCWxvbmcgcmMgPSAwOwogCXN0cnVjdCB2aW9fZGV2ICp2ZGV2ID0gdG9fdmlvX2Rldihob3N0ZGF0YS0+ZGV2KTsKIAlmcmVlX2lycSh2ZGV2LT5pcnEsICh2b2lkICopaG9zdGRhdGEpOwogCXRhc2tsZXRfa2lsbCgmaG9zdGRhdGEtPnNycF90YXNrKTsKIAlkbyB7CisJCWlmIChyYykKKwkJCW1zbGVlcCgxMDApOwogCQlyYyA9IHBscGFyX2hjYWxsX25vcmV0cyhIX0ZSRUVfQ1JRLCB2ZGV2LT51bml0X2FkZHJlc3MpOwogCX0gd2hpbGUgKChyYyA9PSBIX0JVU1kpIHx8IChIX0lTX0xPTkdfQlVTWShyYykpKTsKIAlkbWFfdW5tYXBfc2luZ2xlKGhvc3RkYXRhLT5kZXYsCkBAIC0yMDAsMTEgKzIwMywxMyBAQAogc3RhdGljIGludCBycGF2c2NzaV9yZXNldF9jcnFfcXVldWUoc3RydWN0IGNycV9xdWV1ZSAqcXVldWUsCiAJCQkJICAgIHN0cnVjdCBpYm12c2NzaV9ob3N0X2RhdGEgKmhvc3RkYXRhKQogewotCWludCByYzsKKwlpbnQgcmMgPSAwOwogCXN0cnVjdCB2aW9fZGV2ICp2ZGV2ID0gdG9fdmlvX2Rldihob3N0ZGF0YS0+ZGV2KTsKIAogCS8qIENsb3NlIHRoZSBDUlEgKi8KIAlkbyB7CisJCWlmIChyYykKKwkJCW1zbGVlcCgxMDApOwogCQlyYyA9IHBscGFyX2hjYWxsX25vcmV0cyhIX0ZSRUVfQ1JRLCB2ZGV2LT51bml0X2FkZHJlc3MpOwogCX0gd2hpbGUgKChyYyA9PSBIX0JVU1kpIHx8IChIX0lTX0xPTkdfQlVTWShyYykpKTsKIApAQCAtMjc3LDYgKzI4MiwxMiBAQAogCQlnb3RvIHJlZ19jcnFfZmFpbGVkOwogCX0KIAorCXF1ZXVlLT5jdXIgPSAwOworCXNwaW5fbG9ja19pbml0KCZxdWV1ZS0+bG9jayk7CisKKwl0YXNrbGV0X2luaXQoJmhvc3RkYXRhLT5zcnBfdGFzaywgKHZvaWQgKilycGF2c2NzaV90YXNrLAorCQkgICAgICh1bnNpZ25lZCBsb25nKWhvc3RkYXRhKTsKKwogCWlmIChyZXF1ZXN0X2lycSh2ZGV2LT5pcnEsCiAJCQlycGF2c2NzaV9oYW5kbGVfZXZlbnQsCiAJCQkwLCAiaWJtdnNjc2kiLCAodm9pZCAqKWhvc3RkYXRhKSAhPSAwKSB7CkBAIC0yOTEsMTYgKzMwMiwxNCBAQAogCQlnb3RvIHJlcV9pcnFfZmFpbGVkOwogCX0KIAotCXF1ZXVlLT5jdXIgPSAwOwotCXNwaW5fbG9ja19pbml0KCZxdWV1ZS0+bG9jayk7Ci0KLQl0YXNrbGV0X2luaXQoJmhvc3RkYXRhLT5zcnBfdGFzaywgKHZvaWQgKilycGF2c2NzaV90YXNrLAotCQkgICAgICh1bnNpZ25lZCBsb25nKWhvc3RkYXRhKTsKLQogCXJldHVybiByZXRyYzsKIAogICAgICAgcmVxX2lycV9mYWlsZWQ6CisJdGFza2xldF9raWxsKCZob3N0ZGF0YS0+c3JwX3Rhc2spOworCXJjID0gMDsKIAlkbyB7CisJCWlmIChyYykKKwkJCW1zbGVlcCgxMDApOwogCQlyYyA9IHBscGFyX2hjYWxsX25vcmV0cyhIX0ZSRUVfQ1JRLCB2ZGV2LT51bml0X2FkZHJlc3MpOwogCX0gd2hpbGUgKChyYyA9PSBIX0JVU1kpIHx8IChIX0lTX0xPTkdfQlVTWShyYykpKTsKICAgICAgIHJlZ19jcnFfZmFpbGVkOgpAQCAtMzIyLDExICszMzEsMTMgQEAKIHN0YXRpYyBpbnQgcnBhdnNjc2lfcmVlbmFibGVfY3JxX3F1ZXVlKHN0cnVjdCBjcnFfcXVldWUgKnF1ZXVlLAogCQkJCSAgICAgICBzdHJ1Y3QgaWJtdnNjc2lfaG9zdF9kYXRhICpob3N0ZGF0YSkKIHsKLQlpbnQgcmM7CisJaW50IHJjID0gMDsKIAlzdHJ1Y3QgdmlvX2RldiAqdmRldiA9IHRvX3Zpb19kZXYoaG9zdGRhdGEtPmRldik7CiAKIAkvKiBSZS1lbmFibGUgdGhlIENSUSAqLwogCWRvIHsKKwkJaWYgKHJjKQorCQkJbXNsZWVwKDEwMCk7CiAJCXJjID0gcGxwYXJfaGNhbGxfbm9yZXRzKEhfRU5BQkxFX0NSUSwgdmRldi0+dW5pdF9hZGRyZXNzKTsKIAl9IHdoaWxlICgocmMgPT0gSF9JTl9QUk9HUkVTUykgfHwgKHJjID09IEhfQlVTWSkgfHwgKEhfSVNfTE9OR19CVVNZKHJjKSkpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXByLmMgYi9kcml2ZXJzL3Njc2kvaXByLmMKaW5kZXggODJlYTRhOC4uNTI1Njg1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwci5jCisrKyBiL2RyaXZlcnMvc2NzaS9pcHIuYwpAQCAtMTY3LDIxICsxNjcsMjIgQEAKIAkJCS5jbHJfdXByb2NfaW50ZXJydXB0X3JlZzMyID0gMHgwMDAyQywKIAkJCS5pbml0X2ZlZWRiYWNrX3JlZyA9IDB4MDAwNUMsCiAJCQkuZHVtcF9hZGRyX3JlZyA9IDB4MDAwNjQsCi0JCQkuZHVtcF9kYXRhX3JlZyA9IDB4MDAwNjgKKwkJCS5kdW1wX2RhdGFfcmVnID0gMHgwMDA2OCwKKwkJCS5lbmRpYW5fc3dhcF9yZWcgPSAweDAwMDg0CiAJCX0KIAl9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpcHJfY2hpcF90IGlwcl9jaGlwW10gPSB7Ci0JeyBQQ0lfVkVORE9SX0lEX01ZTEVYLCBQQ0lfREVWSUNFX0lEX0lCTV9HRU1TVE9ORSwgSVBSX1VTRV9MU0ksIElQUl9TSVMzMiwgJmlwcl9jaGlwX2NmZ1swXSB9LAotCXsgUENJX1ZFTkRPUl9JRF9JQk0sIFBDSV9ERVZJQ0VfSURfSUJNX0NJVFJJTkUsIElQUl9VU0VfTFNJLCBJUFJfU0lTMzIsICZpcHJfY2hpcF9jZmdbMF0gfSwKLQl7IFBDSV9WRU5ET1JfSURfQURBUFRFQzIsIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfT0JTSURJQU4sIElQUl9VU0VfTFNJLCBJUFJfU0lTMzIsICZpcHJfY2hpcF9jZmdbMF0gfSwKLQl7IFBDSV9WRU5ET1JfSURfSUJNLCBQQ0lfREVWSUNFX0lEX0lCTV9PQlNJRElBTiwgSVBSX1VTRV9MU0ksIElQUl9TSVMzMiwgJmlwcl9jaGlwX2NmZ1swXSB9LAotCXsgUENJX1ZFTkRPUl9JRF9JQk0sIFBDSV9ERVZJQ0VfSURfSUJNX09CU0lESUFOX0UsIElQUl9VU0VfTVNJLCBJUFJfU0lTMzIsICZpcHJfY2hpcF9jZmdbMF0gfSwKLQl7IFBDSV9WRU5ET1JfSURfSUJNLCBQQ0lfREVWSUNFX0lEX0lCTV9TTklQRSwgSVBSX1VTRV9MU0ksIElQUl9TSVMzMiwgJmlwcl9jaGlwX2NmZ1sxXSB9LAotCXsgUENJX1ZFTkRPUl9JRF9BREFQVEVDMiwgUENJX0RFVklDRV9JRF9BREFQVEVDMl9TQ0FNUCwgSVBSX1VTRV9MU0ksIElQUl9TSVMzMiwgJmlwcl9jaGlwX2NmZ1sxXSB9LAotCXsgUENJX1ZFTkRPUl9JRF9JQk0sIFBDSV9ERVZJQ0VfSURfSUJNX0NST0NfRlBHQV9FMiwgSVBSX1VTRV9NU0ksIElQUl9TSVM2NCwgJmlwcl9jaGlwX2NmZ1syXSB9LAotCXsgUENJX1ZFTkRPUl9JRF9JQk0sIFBDSV9ERVZJQ0VfSURfSUJNX0NST0NfQVNJQ19FMiwgSVBSX1VTRV9NU0ksIElQUl9TSVM2NCwgJmlwcl9jaGlwX2NmZ1syXSB9CisJeyBQQ0lfVkVORE9SX0lEX01ZTEVYLCBQQ0lfREVWSUNFX0lEX0lCTV9HRU1TVE9ORSwgSVBSX1VTRV9MU0ksIElQUl9TSVMzMiwgSVBSX1BDSV9DRkcsICZpcHJfY2hpcF9jZmdbMF0gfSwKKwl7IFBDSV9WRU5ET1JfSURfSUJNLCBQQ0lfREVWSUNFX0lEX0lCTV9DSVRSSU5FLCBJUFJfVVNFX0xTSSwgSVBSX1NJUzMyLCBJUFJfUENJX0NGRywgJmlwcl9jaGlwX2NmZ1swXSB9LAorCXsgUENJX1ZFTkRPUl9JRF9BREFQVEVDMiwgUENJX0RFVklDRV9JRF9BREFQVEVDMl9PQlNJRElBTiwgSVBSX1VTRV9MU0ksIElQUl9TSVMzMiwgSVBSX1BDSV9DRkcsICZpcHJfY2hpcF9jZmdbMF0gfSwKKwl7IFBDSV9WRU5ET1JfSURfSUJNLCBQQ0lfREVWSUNFX0lEX0lCTV9PQlNJRElBTiwgSVBSX1VTRV9MU0ksIElQUl9TSVMzMiwgSVBSX1BDSV9DRkcsICZpcHJfY2hpcF9jZmdbMF0gfSwKKwl7IFBDSV9WRU5ET1JfSURfSUJNLCBQQ0lfREVWSUNFX0lEX0lCTV9PQlNJRElBTl9FLCBJUFJfVVNFX01TSSwgSVBSX1NJUzMyLCBJUFJfUENJX0NGRywgJmlwcl9jaGlwX2NmZ1swXSB9LAorCXsgUENJX1ZFTkRPUl9JRF9JQk0sIFBDSV9ERVZJQ0VfSURfSUJNX1NOSVBFLCBJUFJfVVNFX0xTSSwgSVBSX1NJUzMyLCBJUFJfUENJX0NGRywgJmlwcl9jaGlwX2NmZ1sxXSB9LAorCXsgUENJX1ZFTkRPUl9JRF9BREFQVEVDMiwgUENJX0RFVklDRV9JRF9BREFQVEVDMl9TQ0FNUCwgSVBSX1VTRV9MU0ksIElQUl9TSVMzMiwgSVBSX1BDSV9DRkcsICZpcHJfY2hpcF9jZmdbMV0gfSwKKwl7IFBDSV9WRU5ET1JfSURfSUJNLCBQQ0lfREVWSUNFX0lEX0lCTV9DUk9DX0ZQR0FfRTIsIElQUl9VU0VfTVNJLCBJUFJfU0lTNjQsIElQUl9NTUlPLCAmaXByX2NoaXBfY2ZnWzJdIH0sCisJeyBQQ0lfVkVORE9SX0lEX0lCTSwgUENJX0RFVklDRV9JRF9JQk1fQ1JPQ19BU0lDX0UyLCBJUFJfVVNFX01TSSwgSVBSX1NJUzY0LCBJUFJfTU1JTywgJmlwcl9jaGlwX2NmZ1syXSB9CiB9OwogCiBzdGF0aWMgaW50IGlwcl9tYXhfYnVzX3NwZWVkcyBbXSA9IHsKQEAgLTExMjksMjAgKzExMzAsMjIgQEAKIH0KIAogLyoqCi0gKiBpcHJfZm9ybWF0X3Jlc291cmNlX3BhdGggLSBGb3JtYXQgdGhlIHJlc291cmNlIHBhdGggZm9yIHByaW50aW5nLgorICogaXByX2Zvcm1hdF9yZXNfcGF0aCAtIEZvcm1hdCB0aGUgcmVzb3VyY2UgcGF0aCBmb3IgcHJpbnRpbmcuCiAgKiBAcmVzX3BhdGg6CXJlc291cmNlIHBhdGgKICAqIEBidWY6CWJ1ZmZlcgogICoKICAqIFJldHVybiB2YWx1ZToKICAqIAlwb2ludGVyIHRvIGJ1ZmZlcgogICoqLwotc3RhdGljIGNoYXIgKmlwcl9mb3JtYXRfcmVzb3VyY2VfcGF0aCh1OCAqcmVzX3BhdGgsIGNoYXIgKmJ1ZmZlcikKK3N0YXRpYyBjaGFyICppcHJfZm9ybWF0X3Jlc19wYXRoKHU4ICpyZXNfcGF0aCwgY2hhciAqYnVmZmVyLCBpbnQgbGVuKQogewogCWludCBpOworCWNoYXIgKnAgPSBidWZmZXI7CiAKLQlzcHJpbnRmKGJ1ZmZlciwgIiUwMlgiLCByZXNfcGF0aFswXSk7Ci0JZm9yIChpPTE7IHJlc19wYXRoW2ldICE9IDB4ZmY7IGkrKykKLQkJc3ByaW50ZihidWZmZXIsICIlcy0lMDJYIiwgYnVmZmVyLCByZXNfcGF0aFtpXSk7CisJcmVzX3BhdGhbMF0gPSAnXDAnOworCXAgKz0gc25wcmludGYocCwgYnVmZmVyICsgbGVuIC0gcCwgIiUwMlgiLCByZXNfcGF0aFswXSk7CisJZm9yIChpID0gMTsgcmVzX3BhdGhbaV0gIT0gMHhmZiAmJiAoKGkgKiAzKSA8IGxlbik7IGkrKykKKwkJcCArPSBzbnByaW50ZihwLCBidWZmZXIgKyBsZW4gLSBwLCAiLSUwMlgiLCByZXNfcGF0aFtpXSk7CiAKIAlyZXR1cm4gYnVmZmVyOwogfQpAQCAtMTE2NSw3ICsxMTY4LDcgQEAKIAlpZiAocmVzLT5pb2FfY2ZnLT5zaXM2NCkgewogCQlyZXMtPmZsYWdzID0gY2ZndGV3LT51LmNmZ3RlNjQtPmZsYWdzOwogCQlyZXMtPnJlc19mbGFncyA9IGNmZ3Rldy0+dS5jZmd0ZTY0LT5yZXNfZmxhZ3M7Ci0JCXJlcy0+dHlwZSA9IGNmZ3Rldy0+dS5jZmd0ZTY0LT5yZXNfdHlwZSAmIDB4MGY7CisJCXJlcy0+dHlwZSA9IGNmZ3Rldy0+dS5jZmd0ZTY0LT5yZXNfdHlwZTsKIAogCQltZW1jcHkoJnJlcy0+c3RkX2lucV9kYXRhLCAmY2ZndGV3LT51LmNmZ3RlNjQtPnN0ZF9pbnFfZGF0YSwKIAkJCXNpemVvZihzdHJ1Y3QgaXByX3N0ZF9pbnFfZGF0YSkpOwpAQCAtMTE4Nyw3ICsxMTkwLDggQEAKIAogCQlpZiAocmVzLT5zZGV2ICYmIG5ld19wYXRoKQogCQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCByZXMtPnNkZXYsICJSZXNvdXJjZSBwYXRoOiAlc1xuIiwKLQkJCQkgICAgaXByX2Zvcm1hdF9yZXNvdXJjZV9wYXRoKCZyZXMtPnJlc19wYXRoWzBdLCAmYnVmZmVyWzBdKSk7CisJCQkJICAgIGlwcl9mb3JtYXRfcmVzX3BhdGgocmVzLT5yZXNfcGF0aCwgYnVmZmVyLAorCQkJCQkJCXNpemVvZihidWZmZXIpKSk7CiAJfSBlbHNlIHsKIAkJcmVzLT5mbGFncyA9IGNmZ3Rldy0+dS5jZmd0ZS0+ZmxhZ3M7CiAJCWlmIChyZXMtPmZsYWdzICYgSVBSX0lTX0lPQV9SRVNPVVJDRSkKQEAgLTE1NzMsNyArMTU3Nyw4IEBACiAJCWlwcl9lcnJfc2VwYXJhdG9yOwogCiAJCWlwcl9lcnIoIkRldmljZSAlZCA6ICVzIiwgaSArIDEsCi0JCQkgaXByX2Zvcm1hdF9yZXNvdXJjZV9wYXRoKCZkZXZfZW50cnktPnJlc19wYXRoWzBdLCAmYnVmZmVyWzBdKSk7CisJCQkgaXByX2Zvcm1hdF9yZXNfcGF0aChkZXZfZW50cnktPnJlc19wYXRoLCBidWZmZXIsCisJCQkJCSAgICAgc2l6ZW9mKGJ1ZmZlcikpKTsKIAkJaXByX2xvZ19leHRfdnBkKCZkZXZfZW50cnktPnZwZCk7CiAKIAkJaXByX2VycigiLS0tLS1OZXcgRGV2aWNlIEluZm9ybWF0aW9uLS0tLS1cbiIpOwpAQCAtMTkxOSwxMyArMTkyNCwxNCBAQAogCiAJCQlpcHJfaGNhbV9lcnIoaG9zdHJjYiwgIiVzICVzOiBSZXNvdXJjZSBQYXRoPSVzXG4iLAogCQkJCSAgICAgcGF0aF9hY3RpdmVfZGVzY1tpXS5kZXNjLCBwYXRoX3N0YXRlX2Rlc2Nbal0uZGVzYywKLQkJCQkgICAgIGlwcl9mb3JtYXRfcmVzb3VyY2VfcGF0aCgmZmFicmljLT5yZXNfcGF0aFswXSwgJmJ1ZmZlclswXSkpOworCQkJCSAgICAgaXByX2Zvcm1hdF9yZXNfcGF0aChmYWJyaWMtPnJlc19wYXRoLCBidWZmZXIsCisJCQkJCQkJIHNpemVvZihidWZmZXIpKSk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CiAKIAlpcHJfZXJyKCJQYXRoIHN0YXRlPSUwMlggUmVzb3VyY2UgUGF0aD0lc1xuIiwgcGF0aF9zdGF0ZSwKLQkJaXByX2Zvcm1hdF9yZXNvdXJjZV9wYXRoKCZmYWJyaWMtPnJlc19wYXRoWzBdLCAmYnVmZmVyWzBdKSk7CisJCWlwcl9mb3JtYXRfcmVzX3BhdGgoZmFicmljLT5yZXNfcGF0aCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHsKQEAgLTIwNjYsNyArMjA3Miw4IEBACiAKIAkJCWlwcl9oY2FtX2Vycihob3N0cmNiLCAiJXMgJXM6IFJlc291cmNlIFBhdGg9JXMsIExpbmsgcmF0ZT0lcywgV1dOPSUwOFglMDhYXG4iLAogCQkJCSAgICAgcGF0aF9zdGF0dXNfZGVzY1tqXS5kZXNjLCBwYXRoX3R5cGVfZGVzY1tpXS5kZXNjLAotCQkJCSAgICAgaXByX2Zvcm1hdF9yZXNvdXJjZV9wYXRoKCZjZmctPnJlc19wYXRoWzBdLCAmYnVmZmVyWzBdKSwKKwkJCQkgICAgIGlwcl9mb3JtYXRfcmVzX3BhdGgoY2ZnLT5yZXNfcGF0aCwgYnVmZmVyLAorCQkJCQkJCSBzaXplb2YoYnVmZmVyKSksCiAJCQkJICAgICBsaW5rX3JhdGVbY2ZnLT5saW5rX3JhdGUgJiBJUFJfUEhZX0xJTktfUkFURV9NQVNLXSwKIAkJCQkgICAgIGJlMzJfdG9fY3B1KGNmZy0+d3dpZFswXSksIGJlMzJfdG9fY3B1KGNmZy0+d3dpZFsxXSkpOwogCQkJcmV0dXJuOwpAQCAtMjA3NCw3ICsyMDgxLDcgQEAKIAl9CiAJaXByX2hjYW1fZXJyKGhvc3RyY2IsICJQYXRoIGVsZW1lbnQ9JTAyWDogUmVzb3VyY2UgUGF0aD0lcywgTGluayByYXRlPSVzICIKIAkJICAgICAiV1dOPSUwOFglMDhYXG4iLCBjZmctPnR5cGVfc3RhdHVzLAotCQkgICAgIGlwcl9mb3JtYXRfcmVzb3VyY2VfcGF0aCgmY2ZnLT5yZXNfcGF0aFswXSwgJmJ1ZmZlclswXSksCisJCSAgICAgaXByX2Zvcm1hdF9yZXNfcGF0aChjZmctPnJlc19wYXRoLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSwKIAkJICAgICBsaW5rX3JhdGVbY2ZnLT5saW5rX3JhdGUgJiBJUFJfUEhZX0xJTktfUkFURV9NQVNLXSwKIAkJICAgICBiZTMyX3RvX2NwdShjZmctPnd3aWRbMF0pLCBiZTMyX3RvX2NwdShjZmctPnd3aWRbMV0pKTsKIH0KQEAgLTIxMzksNyArMjE0Niw3IEBACiAKIAlpcHJfZXJyKCJSQUlEICVzIEFycmF5IENvbmZpZ3VyYXRpb246ICVzXG4iLAogCQllcnJvci0+cHJvdGVjdGlvbl9sZXZlbCwKLQkJaXByX2Zvcm1hdF9yZXNvdXJjZV9wYXRoKCZlcnJvci0+bGFzdF9yZXNfcGF0aFswXSwgJmJ1ZmZlclswXSkpOworCQlpcHJfZm9ybWF0X3Jlc19wYXRoKGVycm9yLT5sYXN0X3Jlc19wYXRoLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CiAKIAlpcHJfZXJyX3NlcGFyYXRvcjsKIApAQCAtMjE2MCw5ICsyMTY3LDExIEBACiAJCWlwcl9lcnIoIkFycmF5IE1lbWJlciAlZDpcbiIsIGkpOwogCQlpcHJfbG9nX2V4dF92cGQoJmFycmF5X2VudHJ5LT52cGQpOwogCQlpcHJfZXJyKCJDdXJyZW50IExvY2F0aW9uOiAlcyIsCi0JCQkgaXByX2Zvcm1hdF9yZXNvdXJjZV9wYXRoKCZhcnJheV9lbnRyeS0+cmVzX3BhdGhbMF0sICZidWZmZXJbMF0pKTsKKwkJCSBpcHJfZm9ybWF0X3Jlc19wYXRoKGFycmF5X2VudHJ5LT5yZXNfcGF0aCwgYnVmZmVyLAorCQkJCQkgICAgIHNpemVvZihidWZmZXIpKSk7CiAJCWlwcl9lcnIoIkV4cGVjdGVkIExvY2F0aW9uOiAlcyIsCi0JCQkgaXByX2Zvcm1hdF9yZXNvdXJjZV9wYXRoKCZhcnJheV9lbnRyeS0+ZXhwZWN0ZWRfcmVzX3BhdGhbMF0sICZidWZmZXJbMF0pKTsKKwkJCSBpcHJfZm9ybWF0X3Jlc19wYXRoKGFycmF5X2VudHJ5LT5leHBlY3RlZF9yZXNfcGF0aCwKKwkJCQkJICAgICBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CiAKIAkJaXByX2Vycl9zZXBhcmF0b3I7CiAJfQpAQCAtMzc1Myw2ICszNzYyLDM2IEBACiAJLnN0b3JlID0gaXByX3N0b3JlX3VwZGF0ZV9mdwogfTsKIAorLyoqCisgKiBpcHJfc2hvd19md190eXBlIC0gU2hvdyB0aGUgYWRhcHRlcidzIGZpcm13YXJlIHR5cGUuCisgKiBAZGV2OgljbGFzcyBkZXZpY2Ugc3RydWN0CisgKiBAYnVmOglidWZmZXIKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKgludW1iZXIgb2YgYnl0ZXMgcHJpbnRlZCB0byBidWZmZXIKKyAqKi8KK3N0YXRpYyBzc2l6ZV90IGlwcl9zaG93X2Z3X3R5cGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBpcHJfaW9hX2NmZyAqaW9hX2NmZyA9IChzdHJ1Y3QgaXByX2lvYV9jZmcgKilzaG9zdC0+aG9zdGRhdGE7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzID0gMDsKKwlpbnQgbGVuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwlsZW4gPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBpb2FfY2ZnLT5zaXM2NCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBpcHJfaW9hX2Z3X3R5cGVfYXR0ciA9IHsKKwkuYXR0ciA9IHsKKwkJLm5hbWUgPQkJImZ3X3R5cGUiLAorCQkubW9kZSA9CQlTX0lSVUdPLAorCX0sCisJLnNob3cgPSBpcHJfc2hvd19md190eXBlCit9OworCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmlwcl9pb2FfYXR0cnNbXSA9IHsKIAkmaXByX2Z3X3ZlcnNpb25fYXR0ciwKIAkmaXByX2xvZ19sZXZlbF9hdHRyLApAQCAtMzc2MCw2ICszNzk5LDcgQEAKIAkmaXByX2lvYV9zdGF0ZV9hdHRyLAogCSZpcHJfaW9hX3Jlc2V0X2F0dHIsCiAJJmlwcl91cGRhdGVfZndfYXR0ciwKKwkmaXByX2lvYV9md190eXBlX2F0dHIsCiAJTlVMTCwKIH07CiAKQEAgLTQwNzksNyArNDExOSw4IEBACiB9OwogCiAvKioKLSAqIGlwcl9zaG93X3Jlc291cmNlX3BhdGggLSBTaG93IHRoZSByZXNvdXJjZSBwYXRoIGZvciB0aGlzIGRldmljZS4KKyAqIGlwcl9zaG93X3Jlc291cmNlX3BhdGggLSBTaG93IHRoZSByZXNvdXJjZSBwYXRoIG9yIHRoZSByZXNvdXJjZSBhZGRyZXNzIGZvcgorICoJCQkgICAgdGhpcyBkZXZpY2UuCiAgKiBAZGV2OglkZXZpY2Ugc3RydWN0CiAgKiBAYnVmOglidWZmZXIKICAqCkBAIC00MDk3LDkgKzQxMzgsMTQgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CiAJcmVzID0gKHN0cnVjdCBpcHJfcmVzb3VyY2VfZW50cnkgKilzZGV2LT5ob3N0ZGF0YTsKLQlpZiAocmVzKQorCWlmIChyZXMgJiYgaW9hX2NmZy0+c2lzNjQpCiAJCWxlbiA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsCi0JCQkgICAgICAgaXByX2Zvcm1hdF9yZXNvdXJjZV9wYXRoKCZyZXMtPnJlc19wYXRoWzBdLCAmYnVmZmVyWzBdKSk7CisJCQkgICAgICAgaXByX2Zvcm1hdF9yZXNfcGF0aChyZXMtPnJlc19wYXRoLCBidWZmZXIsCisJCQkJCQkgICBzaXplb2YoYnVmZmVyKSkpOworCWVsc2UgaWYgKHJlcykKKwkJbGVuID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZDolZDolZDolZFxuIiwgaW9hX2NmZy0+aG9zdC0+aG9zdF9ubywKKwkJCSAgICAgICByZXMtPmJ1cywgcmVzLT50YXJnZXQsIHJlcy0+bHVuKTsKKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKIAlyZXR1cm4gbGVuOwogfQpAQCAtNDEwNywxNCArNDE1Myw0OSBAQAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGlwcl9yZXNvdXJjZV9wYXRoX2F0dHIgPSB7CiAJLmF0dHIgPSB7CiAJCS5uYW1lID0gCSJyZXNvdXJjZV9wYXRoIiwKLQkJLm1vZGUgPQkJU19JUlVTUiwKKwkJLm1vZGUgPQkJU19JUlVHTywKIAl9LAogCS5zaG93ID0gaXByX3Nob3dfcmVzb3VyY2VfcGF0aAogfTsKIAorLyoqCisgKiBpcHJfc2hvd19yZXNvdXJjZV90eXBlIC0gU2hvdyB0aGUgcmVzb3VyY2UgdHlwZSBmb3IgdGhpcyBkZXZpY2UuCisgKiBAZGV2OglkZXZpY2Ugc3RydWN0CisgKiBAYnVmOglidWZmZXIKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKgludW1iZXIgb2YgYnl0ZXMgcHJpbnRlZCB0byBidWZmZXIKKyAqKi8KK3N0YXRpYyBzc2l6ZV90IGlwcl9zaG93X3Jlc291cmNlX3R5cGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CisJc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnID0gKHN0cnVjdCBpcHJfaW9hX2NmZyAqKXNkZXYtPmhvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBpcHJfcmVzb3VyY2VfZW50cnkgKnJlczsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3MgPSAwOworCXNzaXplX3QgbGVuID0gLUVOWElPOworCisJc3Bpbl9sb2NrX2lycXNhdmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwlyZXMgPSAoc3RydWN0IGlwcl9yZXNvdXJjZV9lbnRyeSAqKXNkZXYtPmhvc3RkYXRhOworCisJaWYgKHJlcykKKwkJbGVuID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIleFxuIiwgcmVzLT50eXBlKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgaXByX3Jlc291cmNlX3R5cGVfYXR0ciA9IHsKKwkuYXR0ciA9IHsKKwkJLm5hbWUgPQkJInJlc291cmNlX3R5cGUiLAorCQkubW9kZSA9CQlTX0lSVUdPLAorCX0sCisJLnNob3cgPSBpcHJfc2hvd19yZXNvdXJjZV90eXBlCit9OworCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmlwcl9kZXZfYXR0cnNbXSA9IHsKIAkmaXByX2FkYXB0ZXJfaGFuZGxlX2F0dHIsCiAJJmlwcl9yZXNvdXJjZV9wYXRoX2F0dHIsCisJJmlwcl9yZXNvdXJjZV90eXBlX2F0dHIsCiAJTlVMTCwKIH07CiAKQEAgLTQzMzgsOCArNDQxOSw2IEBACiAJCQkJCSAgICAgSVBSX1ZTRVRfUldfVElNRU9VVCk7CiAJCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgSVBSX1ZTRVRfTUFYX1NFQ1RPUlMpOwogCQl9Ci0JCWlmIChpcHJfaXNfdnNldF9kZXZpY2UocmVzKSB8fCBpcHJfaXNfc2NzaV9kaXNrKHJlcykpCi0JCQlzZGV2LT5hbGxvd19yZXN0YXJ0ID0gMTsKIAkJaWYgKGlwcl9pc19nYXRhKHJlcykgJiYgcmVzLT5zYXRhX3BvcnQpCiAJCQlhcCA9IHJlcy0+c2F0YV9wb3J0LT5hcDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwpAQCAtNDM1MSw3ICs0NDMwLDggQEAKIAkJCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIDAsIHNkZXYtPmhvc3QtPmNtZF9wZXJfbHVuKTsKIAkJaWYgKGlvYV9jZmctPnNpczY0KQogCQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LCAiUmVzb3VyY2UgcGF0aDogJXNcbiIsCi0JCQkgICAgICAgICAgICBpcHJfZm9ybWF0X3Jlc291cmNlX3BhdGgoJnJlcy0+cmVzX3BhdGhbMF0sICZidWZmZXJbMF0pKTsKKwkJCQkgICAgaXByX2Zvcm1hdF9yZXNfcGF0aChyZXMtPnJlc19wYXRoLCBidWZmZXIsCisJCQkJCQkJc2l6ZW9mKGJ1ZmZlcikpKTsKIAkJcmV0dXJuIDA7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKQEAgLTY3NTUsNyArNjgzNSw4IEBACiAJCQlsaXN0X21vdmVfdGFpbCgmcmVzLT5xdWV1ZSwgJmlvYV9jZmctPnVzZWRfcmVzX3EpOwogCQkJaXByX2luaXRfcmVzX2VudHJ5KHJlcywgJmNmZ3Rldyk7CiAJCQlyZXMtPmFkZF90b19tbCA9IDE7Ci0JCX0KKwkJfSBlbHNlIGlmIChyZXMtPnNkZXYgJiYgKGlwcl9pc192c2V0X2RldmljZShyZXMpIHx8IGlwcl9pc19zY3NpX2Rpc2socmVzKSkpCisJCQlyZXMtPnNkZXYtPmFsbG93X3Jlc3RhcnQgPSAxOwogCiAJCWlmIChmb3VuZCkKIAkJCWlwcl91cGRhdGVfcmVzX2VudHJ5KHJlcywgJmNmZ3Rldyk7CkBAIC03MTU0LDEyICs3MjM1LDE1IEBACiAJCXN0YWdlX3RpbWUgPSBpb2FfY2ZnLT50cmFuc29wX3RpbWVvdXQ7CiAJCWlwcl9jbWQtPmpvYl9zdGVwID0gaXByX2lvYWZwX2lkZW50aWZ5X2hycnE7CiAJfSBlbHNlIGlmIChzdGFnZSA9PSBJUFJfSVBMX0lOSVRfU1RBR0VfVFJBTlNPUCkgewotCQlpcHJfY21kLT5qb2Jfc3RlcCA9IGlwcl9pb2FmcF9pZGVudGlmeV9ocnJxOwotCQltYXNrdmFsID0gSVBSX1BDSUlfSVBMX1NUQUdFX0NIQU5HRTsKLQkJbWFza3ZhbCA9IChtYXNrdmFsIDw8IDMyKSB8IElQUl9QQ0lJX0lPQV9UUkFOU19UT19PUEVSOwotCQl3cml0ZXEobWFza3ZhbCwgaW9hX2NmZy0+cmVncy5zZXRfaW50ZXJydXB0X21hc2tfcmVnKTsKLQkJaW50X3JlZyA9IHJlYWRsKGlvYV9jZmctPnJlZ3Muc2Vuc2VfaW50ZXJydXB0X21hc2tfcmVnKTsKLQkJcmV0dXJuIElQUl9SQ19KT0JfQ09OVElOVUU7CisJCWludF9yZWcgPSByZWFkbChpb2FfY2ZnLT5yZWdzLnNlbnNlX2ludGVycnVwdF9yZWczMik7CisJCWlmIChpbnRfcmVnICYgSVBSX1BDSUlfSU9BX1RSQU5TX1RPX09QRVIpIHsKKwkJCWlwcl9jbWQtPmpvYl9zdGVwID0gaXByX2lvYWZwX2lkZW50aWZ5X2hycnE7CisJCQltYXNrdmFsID0gSVBSX1BDSUlfSVBMX1NUQUdFX0NIQU5HRTsKKwkJCW1hc2t2YWwgPSAobWFza3ZhbCA8PCAzMikgfCBJUFJfUENJSV9JT0FfVFJBTlNfVE9fT1BFUjsKKwkJCXdyaXRlcShtYXNrdmFsLCBpb2FfY2ZnLT5yZWdzLnNldF9pbnRlcnJ1cHRfbWFza19yZWcpOworCQkJaW50X3JlZyA9IHJlYWRsKGlvYV9jZmctPnJlZ3Muc2Vuc2VfaW50ZXJydXB0X21hc2tfcmVnKTsKKwkJCXJldHVybiBJUFJfUkNfSk9CX0NPTlRJTlVFOworCQl9CiAJfQogCiAJaXByX2NtZC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBpcHJfY21kOwpAQCAtNzE5Myw2ICs3Mjc3LDEyIEBACiAJaXByX2luaXRfaW9hX21lbShpb2FfY2ZnKTsKIAogCWlvYV9jZmctPmFsbG93X2ludGVycnVwdHMgPSAxOworCWlmIChpb2FfY2ZnLT5zaXM2NCkgeworCQkvKiBTZXQgdGhlIGFkYXB0ZXIgdG8gdGhlIGNvcnJlY3QgZW5kaWFuIG1vZGUuICovCisJCXdyaXRlbChJUFJfRU5ESUFOX1NXQVBfS0VZLCBpb2FfY2ZnLT5yZWdzLmVuZGlhbl9zd2FwX3JlZyk7CisJCWludF9yZWcgPSByZWFkbChpb2FfY2ZnLT5yZWdzLmVuZGlhbl9zd2FwX3JlZyk7CisJfQorCiAJaW50X3JlZyA9IHJlYWRsKGlvYV9jZmctPnJlZ3Muc2Vuc2VfaW50ZXJydXB0X3JlZzMyKTsKIAogCWlmIChpbnRfcmVnICYgSVBSX1BDSUlfSU9BX1RSQU5TX1RPX09QRVIpIHsKQEAgLTczNTAsNiArNzQ0MCw3IEBACiBzdGF0aWMgaW50IGlwcl9yZXNldF9yZXN0b3JlX2NmZ19zcGFjZShzdHJ1Y3QgaXByX2NtbmQgKmlwcl9jbWQpCiB7CiAJc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnID0gaXByX2NtZC0+aW9hX2NmZzsKKwl2b2xhdGlsZSB1MzIgaW50X3JlZzsKIAlpbnQgcmM7CiAKIAlFTlRFUjsKQEAgLTczNjgsNiArNzQ1OSwxMiBAQAogCiAJaXByX2ZhaWxfYWxsX29wcyhpb2FfY2ZnKTsKIAorCWlmIChpb2FfY2ZnLT5zaXM2NCkgeworCQkvKiBTZXQgdGhlIGFkYXB0ZXIgdG8gdGhlIGNvcnJlY3QgZW5kaWFuIG1vZGUuICovCisJCXdyaXRlbChJUFJfRU5ESUFOX1NXQVBfS0VZLCBpb2FfY2ZnLT5yZWdzLmVuZGlhbl9zd2FwX3JlZyk7CisJCWludF9yZWcgPSByZWFkbChpb2FfY2ZnLT5yZWdzLmVuZGlhbl9zd2FwX3JlZyk7CisJfQorCiAJaWYgKGlvYV9jZmctPmlvYV91bml0X2NoZWNrZWQpIHsKIAkJaW9hX2NmZy0+aW9hX3VuaXRfY2hlY2tlZCA9IDA7CiAJCWlwcl9nZXRfdW5pdF9jaGVja19idWZmZXIoaW9hX2NmZyk7CkBAIC03NDIzLDIwICs3NTIwLDI1IEBACiBzdGF0aWMgaW50IGlwcl9yZXNldF9zdGFydF9iaXN0KHN0cnVjdCBpcHJfY21uZCAqaXByX2NtZCkKIHsKIAlzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmcgPSBpcHJfY21kLT5pb2FfY2ZnOwotCWludCByYzsKKwlpbnQgcmMgPSBQQ0lCSU9TX1NVQ0NFU1NGVUw7CiAKIAlFTlRFUjsKIAlwY2lfYmxvY2tfdXNlcl9jZmdfYWNjZXNzKGlvYV9jZmctPnBkZXYpOwotCXJjID0gcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGlvYV9jZmctPnBkZXYsIFBDSV9CSVNULCBQQ0lfQklTVF9TVEFSVCk7CiAKLQlpZiAocmMgIT0gUENJQklPU19TVUNDRVNTRlVMKSB7Ci0JCXBjaV91bmJsb2NrX3VzZXJfY2ZnX2FjY2VzcyhpcHJfY21kLT5pb2FfY2ZnLT5wZGV2KTsKLQkJaXByX2NtZC0+cy5pb2FzYS5oZHIuaW9hc2MgPSBjcHVfdG9fYmUzMihJUFJfSU9BU0NfUENJX0FDQ0VTU19FUlJPUik7Ci0JCXJjID0gSVBSX1JDX0pPQl9DT05USU5VRTsKLQl9IGVsc2UgeworCWlmIChpb2FfY2ZnLT5pcHJfY2hpcC0+YmlzdF9tZXRob2QgPT0gSVBSX01NSU8pCisJCXdyaXRlbChJUFJfVVBST0NJX1NJUzY0X1NUQVJUX0JJU1QsCisJCSAgICAgICBpb2FfY2ZnLT5yZWdzLnNldF91cHJvY19pbnRlcnJ1cHRfcmVnMzIpOworCWVsc2UKKwkJcmMgPSBwY2lfd3JpdGVfY29uZmlnX2J5dGUoaW9hX2NmZy0+cGRldiwgUENJX0JJU1QsIFBDSV9CSVNUX1NUQVJUKTsKKworCWlmIChyYyA9PSBQQ0lCSU9TX1NVQ0NFU1NGVUwpIHsKIAkJaXByX2NtZC0+am9iX3N0ZXAgPSBpcHJfcmVzZXRfYmlzdF9kb25lOwogCQlpcHJfcmVzZXRfc3RhcnRfdGltZXIoaXByX2NtZCwgSVBSX1dBSVRfRk9SX0JJU1RfVElNRU9VVCk7CiAJCXJjID0gSVBSX1JDX0pPQl9SRVRVUk47CisJfSBlbHNlIHsKKwkJcGNpX3VuYmxvY2tfdXNlcl9jZmdfYWNjZXNzKGlwcl9jbWQtPmlvYV9jZmctPnBkZXYpOworCQlpcHJfY21kLT5zLmlvYXNhLmhkci5pb2FzYyA9IGNwdV90b19iZTMyKElQUl9JT0FTQ19QQ0lfQUNDRVNTX0VSUk9SKTsKKwkJcmMgPSBJUFJfUkNfSk9CX0NPTlRJTlVFOwogCX0KIAogCUxFQVZFOwpAQCAtNzUzMiw3ICs3NjM0LDcgQEAKIH0KIAogLyoqCi0gKiBpcHJfcmVzZXRfYWxlcnRfcGFydDIgLSBBbGVydCB0aGUgYWRhcHRlciBvZiBhIHBlbmRpbmcgcmVzZXQKKyAqIGlwcl9yZXNldF9hbGVydCAtIEFsZXJ0IHRoZSBhZGFwdGVyIG9mIGEgcGVuZGluZyByZXNldAogICogQGlwcl9jbWQ6CWlwciBjb21tYW5kIHN0cnVjdAogICoKICAqIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIGFsZXJ0cyB0aGUgYWRhcHRlciB0aGF0IGl0IHdpbGwgYmUgcmVzZXQuCkBAIC04MzAzLDYgKzg0MDUsNyBAQAogCQl0LT5pbml0X2ZlZWRiYWNrX3JlZyA9IGJhc2UgKyBwLT5pbml0X2ZlZWRiYWNrX3JlZzsKIAkJdC0+ZHVtcF9hZGRyX3JlZyA9IGJhc2UgKyBwLT5kdW1wX2FkZHJfcmVnOwogCQl0LT5kdW1wX2RhdGFfcmVnID0gYmFzZSArIHAtPmR1bXBfZGF0YV9yZWc7CisJCXQtPmVuZGlhbl9zd2FwX3JlZyA9IGJhc2UgKyBwLT5lbmRpYW5fc3dhcF9yZWc7CiAJfQogfQogCkBAIC04ODU4LDYgKzg5NjEsOCBAQAogCXsgUENJX1ZFTkRPUl9JRF9JQk0sIFBDSV9ERVZJQ0VfSURfSUJNX09CU0lESUFOX0UsCiAJICAgICAgUENJX1ZFTkRPUl9JRF9JQk0sIElQUl9TVUJTX0RFVl9JRF81N0IzLCAwLCAwLCAwIH0sCiAJeyBQQ0lfVkVORE9SX0lEX0lCTSwgUENJX0RFVklDRV9JRF9JQk1fT0JTSURJQU5fRSwKKwkgICAgICBQQ0lfVkVORE9SX0lEX0lCTSwgSVBSX1NVQlNfREVWX0lEXzU3Q0MsIDAsIDAsIDAgfSwKKwl7IFBDSV9WRU5ET1JfSURfSUJNLCBQQ0lfREVWSUNFX0lEX0lCTV9PQlNJRElBTl9FLAogCSAgICAgIFBDSV9WRU5ET1JfSURfSUJNLCBJUFJfU1VCU19ERVZfSURfNTdCNywgMCwgMCwKIAkgICAgICBJUFJfVVNFX0xPTkdfVFJBTlNPUF9USU1FT1VUIHwgSVBSX1VTRV9QQ0lfV0FSTV9SRVNFVCB9LAogCXsgUENJX1ZFTkRPUl9JRF9JQk0sIFBDSV9ERVZJQ0VfSURfSUJNX1NOSVBFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lwci5oIGIvZHJpdmVycy9zY3NpL2lwci5oCmluZGV4IDllY2QyMjUuLjRkMzE2MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pcHIuaAorKysgYi9kcml2ZXJzL3Njc2kvaXByLmgKQEAgLTYyLDEyICs2MiwxMiBAQAogI2RlZmluZSBJUFJfU1VCU19ERVZfSURfMjc4MAkweDAyNjQKICNkZWZpbmUgSVBSX1NVQlNfREVWX0lEXzU3MDIJMHgwMjY2CiAjZGVmaW5lIElQUl9TVUJTX0RFVl9JRF81NzAzCTB4MDI3OAotI2RlZmluZSBJUFJfU1VCU19ERVZfSURfNTcyRSAgMHgwMjhECi0jZGVmaW5lIElQUl9TVUJTX0RFVl9JRF81NzNFICAweDAyRDMKLSNkZWZpbmUgSVBSX1NVQlNfREVWX0lEXzU3M0QgIDB4MDJENAorI2RlZmluZSBJUFJfU1VCU19ERVZfSURfNTcyRQkweDAyOEQKKyNkZWZpbmUgSVBSX1NVQlNfREVWX0lEXzU3M0UJMHgwMkQzCisjZGVmaW5lIElQUl9TVUJTX0RFVl9JRF81NzNECTB4MDJENAogI2RlZmluZSBJUFJfU1VCU19ERVZfSURfNTcxQQkweDAyQzAKICNkZWZpbmUgSVBSX1NVQlNfREVWX0lEXzU3MUIJMHgwMkJFCi0jZGVmaW5lIElQUl9TVUJTX0RFVl9JRF81NzFFICAweDAyQkYKKyNkZWZpbmUgSVBSX1NVQlNfREVWX0lEXzU3MUUJMHgwMkJGCiAjZGVmaW5lIElQUl9TVUJTX0RFVl9JRF81NzFGCTB4MDJENQogI2RlZmluZSBJUFJfU1VCU19ERVZfSURfNTcyQQkweDAyQzEKICNkZWZpbmUgSVBSX1NVQlNfREVWX0lEXzU3MkIJMHgwMkMyCkBAIC04Miw2ICs4Miw3IEBACiAjZGVmaW5lIElQUl9TVUJTX0RFVl9JRF81N0I0ICAgIDB4MDMzQgogI2RlZmluZSBJUFJfU1VCU19ERVZfSURfNTdCMiAgICAweDAzNUYKICNkZWZpbmUgSVBSX1NVQlNfREVWX0lEXzU3QzYgICAgMHgwMzU3CisjZGVmaW5lIElQUl9TVUJTX0RFVl9JRF81N0NDICAgIDB4MDM1QwogCiAjZGVmaW5lIElQUl9TVUJTX0RFVl9JRF81N0I1ICAgIDB4MDMzQwogI2RlZmluZSBJUFJfU1VCU19ERVZfSURfNTdDRSAgICAweDAzNUUKQEAgLTI3Miw2ICsyNzMsNyBAQAogCiAjZGVmaW5lIElQUl9VUFJPQ0lfUkVTRVRfQUxFUlQJCQkoMHg4MDAwMDAwMCA+PiA3KQogI2RlZmluZSBJUFJfVVBST0NJX0lPX0RFQlVHX0FMRVJUCQkJKDB4ODAwMDAwMDAgPj4gOSkKKyNkZWZpbmUgSVBSX1VQUk9DSV9TSVM2NF9TVEFSVF9CSVNUCQkJKDB4ODAwMDAwMDAgPj4gMjMpCiAKICNkZWZpbmUgSVBSX0xEVU1QX01BWF9MT05HX0FDS19ERUxBWV9JTl9VU0VDCQkyMDAwMDAJLyogMjAwIG1zICovCiAjZGVmaW5lIElQUl9MRFVNUF9NQVhfU0hPUlRfQUNLX0RFTEFZX0lOX1VTRUMJCTIwMDAwMAkvKiAyMDAgbXMgKi8KQEAgLTk5Niw3ICs5OTgsNyBAQAogCV9fYmUxNiBsZW5ndGg7CiAJdTggZGVzY3JpcHRvcl9pZDsKIAotCXU4IHJlc2VydmVkOworCXU4IHJlc2VydmVkWzJdOwogCXU4IHBhdGhfc3RhdGU7CiAKIAl1OCByZXNlcnZlZDJbMl07CkBAIC0xMDU0LDcgKzEwNTYsNyBAQAogCV9fYmU2NCBmZF9sdW47CiAJdTggZmRfcmVzX3BhdGhbOF07CiAJX19iZTY0IHRpbWVfc3RhbXA7Ci0JdTggcmVzZXJ2ZWRbMl07CisJdTggcmVzZXJ2ZWRbMTZdOwogCXVuaW9uIHsKIAkJc3RydWN0IGlwcl9ob3N0cmNiX3R5cGVfZmZfZXJyb3IgdHlwZV9mZl9lcnJvcjsKIAkJc3RydWN0IGlwcl9ob3N0cmNiX3R5cGVfMTJfZXJyb3IgdHlwZV8xMl9lcnJvcjsKQEAgLTEyNTQsNiArMTI1Niw5IEBACiAKIAl1bnNpZ25lZCBsb25nIGR1bXBfYWRkcl9yZWc7CiAJdW5zaWduZWQgbG9uZyBkdW1wX2RhdGFfcmVnOworCisjZGVmaW5lIElQUl9FTkRJQU5fU1dBUF9LRVkJCTB4MDAwODA4MDAKKwl1bnNpZ25lZCBsb25nIGVuZGlhbl9zd2FwX3JlZzsKIH07CiAKIHN0cnVjdCBpcHJfaW50ZXJydXB0cyB7CkBAIC0xMjc5LDYgKzEyODQsOCBAQAogCiAJdm9pZCBfX2lvbWVtICpkdW1wX2FkZHJfcmVnOwogCXZvaWQgX19pb21lbSAqZHVtcF9kYXRhX3JlZzsKKworCXZvaWQgX19pb21lbSAqZW5kaWFuX3N3YXBfcmVnOwogfTsKIAogc3RydWN0IGlwcl9jaGlwX2NmZ190IHsKQEAgLTEyOTYsNiArMTMwMyw5IEBACiAJdTE2IHNpc190eXBlOwogI2RlZmluZSBJUFJfU0lTMzIJCQkweDAwCiAjZGVmaW5lIElQUl9TSVM2NAkJCTB4MDEKKwl1MTYgYmlzdF9tZXRob2Q7CisjZGVmaW5lIElQUl9QQ0lfQ0ZHCQkJMHgwMAorI2RlZmluZSBJUFJfTU1JTwkJCTB4MDEKIAljb25zdCBzdHJ1Y3QgaXByX2NoaXBfY2ZnX3QgKmNmZzsKIH07CiAKQEAgLTE2ODQsOCArMTY5NCw5IEBACiAJaWYgKGlwcl9pc19kZXZpY2UoaG9zdHJjYikpIHsJCQkJCVwKIAkJaWYgKChob3N0cmNiKS0+aW9hX2NmZy0+c2lzNjQpIHsJCQlcCiAJCQlwcmludGsoS0VSTl9FUlIgSVBSX05BTUUgIjogJXM6ICIgZm10LCAJCVwKLQkJCQlpcHJfZm9ybWF0X3Jlc291cmNlX3BhdGgoJmhvc3RyY2ItPmhjYW0udS5lcnJvcjY0LmZkX3Jlc19wYXRoWzBdLCBcCi0JCQkJCSZob3N0cmNiLT5ycF9idWZmZXJbMF0pLAlcCisJCQkJaXByX2Zvcm1hdF9yZXNfcGF0aChob3N0cmNiLT5oY2FtLnUuZXJyb3I2NC5mZF9yZXNfcGF0aCwgXAorCQkJCQlob3N0cmNiLT5ycF9idWZmZXIsCQlcCisJCQkJCXNpemVvZihob3N0cmNiLT5ycF9idWZmZXIpKSwJXAogCQkJCV9fVkFfQVJHU19fKTsJCQkJXAogCQl9IGVsc2UgewkJCQkJCVwKIAkJCWlwcl9yYV9lcnIoKGhvc3RyY2IpLT5pb2FfY2ZnLAkJCVwKQEAgLTE4NTQsNCArMTg2NSwxMiBAQAogCXJldHVybiAwOwogfQogCisjaWZuZGVmIHdyaXRlcQorc3RhdGljIGlubGluZSB2b2lkIHdyaXRlcSh1NjQgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisgICAgICAgIHdyaXRlbCgoKHUzMikgKHZhbCA+PiAzMikpLCBhZGRyKTsKKyAgICAgICAgd3JpdGVsKCgodTMyKSAodmFsKSksIChhZGRyICsgNCkpOworfQogI2VuZGlmCisKKyNlbmRpZiAvKiBfSVBSX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19kaXNjLmMgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZGlzYy5jCmluZGV4IGM3OTg1ZGEuLjMyZjY3YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19kaXNjLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2Rpc2MuYwpAQCAtNjMsMjcgKzYzLDI1IEBACiB2b2lkIGZjX2Rpc2Nfc3RvcF9ycG9ydHMoc3RydWN0IGZjX2Rpc2MgKmRpc2MpCiB7CiAJc3RydWN0IGZjX2xwb3J0ICpscG9ydDsKLQlzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGEsICpuZXh0OworCXN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YTsKIAotCWxwb3J0ID0gZGlzYy0+bHBvcnQ7CisJbHBvcnQgPSBmY19kaXNjX2xwb3J0KGRpc2MpOwogCiAJbXV0ZXhfbG9jaygmZGlzYy0+ZGlzY19tdXRleCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJkYXRhLCBuZXh0LCAmZGlzYy0+cnBvcnRzLCBwZWVycykKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShyZGF0YSwgJmRpc2MtPnJwb3J0cywgcGVlcnMpCiAJCWxwb3J0LT50dC5ycG9ydF9sb2dvZmYocmRhdGEpOwogCW11dGV4X3VubG9jaygmZGlzYy0+ZGlzY19tdXRleCk7CiB9CiAKIC8qKgogICogZmNfZGlzY19yZWN2X3JzY25fcmVxKCkgLSBIYW5kbGUgUmVnaXN0ZXJlZCBTdGF0ZSBDaGFuZ2UgTm90aWZpY2F0aW9uIChSU0NOKQotICogQHNwOgkgICBUaGUgc2VxdWVuY2Ugb2YgdGhlIFJTQ04gZXhjaGFuZ2UKKyAqIEBkaXNjOiAgVGhlIGRpc2NvdmVyeSBvYmplY3QgdG8gd2hpY2ggdGhlIFJTQ04gYXBwbGllcwogICogQGZwOgkgICBUaGUgUlNDTiBmcmFtZQotICogQGxwb3J0OiBUaGUgbG9jYWwgcG9ydCB0aGF0IHRoZSByZXF1ZXN0IHdpbGwgYmUgc2VudCBvbgogICoKICAqIExvY2tpbmcgTm90ZTogVGhpcyBmdW5jdGlvbiBleHBlY3RzIHRoYXQgdGhlIGRpc2NfbXV0ZXggaXMgbG9ja2VkCiAgKgkJIGJlZm9yZSBpdCBpcyBjYWxsZWQuCiAgKi8KLXN0YXRpYyB2b2lkIGZjX2Rpc2NfcmVjdl9yc2NuX3JlcShzdHJ1Y3QgZmNfc2VxICpzcCwgc3RydWN0IGZjX2ZyYW1lICpmcCwKLQkJCQkgIHN0cnVjdCBmY19kaXNjICpkaXNjKQorc3RhdGljIHZvaWQgZmNfZGlzY19yZWN2X3JzY25fcmVxKHN0cnVjdCBmY19kaXNjICpkaXNjLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwKQogewogCXN0cnVjdCBmY19scG9ydCAqbHBvcnQ7CiAJc3RydWN0IGZjX2Vsc19yc2NuICpycDsKQEAgLTk2LDcgKzk0LDcgQEAKIAlMSVNUX0hFQUQoZGlzY19wb3J0cyk7CiAJc3RydWN0IGZjX2Rpc2NfcG9ydCAqZHAsICpuZXh0OwogCi0JbHBvcnQgPSBkaXNjLT5scG9ydDsKKwlscG9ydCA9IGZjX2Rpc2NfbHBvcnQoZGlzYyk7CiAKIAlGQ19ESVNDX0RCRyhkaXNjLCAiUmVjZWl2ZWQgYW4gUlNDTiBldmVudFxuIik7CiAKQEAgLTE1MSw3ICsxNDksNyBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JbHBvcnQtPnR0LnNlcV9lbHNfcnNwX3NlbmQoc3AsIEVMU19MU19BQ0MsIE5VTEwpOworCWxwb3J0LT50dC5zZXFfZWxzX3JzcF9zZW5kKGZwLCBFTFNfTFNfQUNDLCBOVUxMKTsKIAogCS8qCiAJICogSWYgbm90IGRvaW5nIGEgY29tcGxldGUgcmVkaXNjb3ZlcnksIGRvIEdQTl9JRCBvbgpAQCAtMTc3LDI1ICsxNzUsMjIgQEAKIAlyZXR1cm47CiByZWplY3Q6CiAJRkNfRElTQ19EQkcoZGlzYywgIlJlY2VpdmVkIGEgYmFkIFJTQ04gZnJhbWVcbiIpOwotCXJqdF9kYXRhLmZwID0gTlVMTDsKIAlyanRfZGF0YS5yZWFzb24gPSBFTFNfUkpUX0xPR0lDOwogCXJqdF9kYXRhLmV4cGxhbiA9IEVMU19FWFBMX05PTkU7Ci0JbHBvcnQtPnR0LnNlcV9lbHNfcnNwX3NlbmQoc3AsIEVMU19MU19SSlQsICZyanRfZGF0YSk7CisJbHBvcnQtPnR0LnNlcV9lbHNfcnNwX3NlbmQoZnAsIEVMU19MU19SSlQsICZyanRfZGF0YSk7CiAJZmNfZnJhbWVfZnJlZShmcCk7CiB9CiAKIC8qKgogICogZmNfZGlzY19yZWN2X3JlcSgpIC0gSGFuZGxlIGluY29taW5nIHJlcXVlc3RzCi0gKiBAc3A6CSAgIFRoZSBzZXF1ZW5jZSBvZiB0aGUgcmVxdWVzdCBleGNoYW5nZQotICogQGZwOgkgICBUaGUgcmVxdWVzdCBmcmFtZQogICogQGxwb3J0OiBUaGUgbG9jYWwgcG9ydCByZWNlaXZpbmcgdGhlIHJlcXVlc3QKKyAqIEBmcDoJICAgVGhlIHJlcXVlc3QgZnJhbWUKICAqCiAgKiBMb2NraW5nIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIEVNIGFuZCB3aWxsIGxvY2sKICAqCQkgdGhlIGRpc2NfbXV0ZXggYmVmb3JlIGNhbGxpbmcgdGhlIGhhbmRsZXIgZm9yIHRoZQogICoJCSByZXF1ZXN0LgogICovCi1zdGF0aWMgdm9pZCBmY19kaXNjX3JlY3ZfcmVxKHN0cnVjdCBmY19zZXEgKnNwLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwLAotCQkJICAgICBzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KQorc3RhdGljIHZvaWQgZmNfZGlzY19yZWN2X3JlcShzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LCBzdHJ1Y3QgZmNfZnJhbWUgKmZwKQogewogCXU4IG9wOwogCXN0cnVjdCBmY19kaXNjICpkaXNjID0gJmxwb3J0LT5kaXNjOwpAQCAtMjA0LDcgKzE5OSw3IEBACiAJc3dpdGNoIChvcCkgewogCWNhc2UgRUxTX1JTQ046CiAJCW11dGV4X2xvY2soJmRpc2MtPmRpc2NfbXV0ZXgpOwotCQlmY19kaXNjX3JlY3ZfcnNjbl9yZXEoc3AsIGZwLCBkaXNjKTsKKwkJZmNfZGlzY19yZWN2X3JzY25fcmVxKGRpc2MsIGZwKTsKIAkJbXV0ZXhfdW5sb2NrKCZkaXNjLT5kaXNjX211dGV4KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTI3NSw3ICsyNzAsNyBAQAogICovCiBzdGF0aWMgdm9pZCBmY19kaXNjX2RvbmUoc3RydWN0IGZjX2Rpc2MgKmRpc2MsIGVudW0gZmNfZGlzY19ldmVudCBldmVudCkKIHsKLQlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gZGlzYy0+bHBvcnQ7CisJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IGZjX2Rpc2NfbHBvcnQoZGlzYyk7CiAJc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhOwogCiAJRkNfRElTQ19EQkcoZGlzYywgIkRpc2NvdmVyeSBjb21wbGV0ZVxuIik7CkBAIC0yOTIsNyArMjg3LDcgQEAKIAkgKiBTa2lwIHBvcnRzIHdoaWNoIHdlcmUgbmV2ZXIgZGlzY292ZXJlZC4gIFRoZXNlIGFyZSB0aGUgZE5TIHBvcnQKIAkgKiBhbmQgcG9ydHMgd2hpY2ggd2VyZSBjcmVhdGVkIGJ5IFBMT0dJLgogCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkocmRhdGEsICZkaXNjLT5ycG9ydHMsIHBlZXJzKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocmRhdGEsICZkaXNjLT5ycG9ydHMsIHBlZXJzKSB7CiAJCWlmICghcmRhdGEtPmRpc2NfaWQpCiAJCQljb250aW51ZTsKIAkJaWYgKHJkYXRhLT5kaXNjX2lkID09IGRpc2MtPmRpc2NfaWQpCkBAIC0zMTMsNyArMzA4LDcgQEAKICAqLwogc3RhdGljIHZvaWQgZmNfZGlzY19lcnJvcihzdHJ1Y3QgZmNfZGlzYyAqZGlzYywgc3RydWN0IGZjX2ZyYW1lICpmcCkKIHsKLQlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gZGlzYy0+bHBvcnQ7CisJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IGZjX2Rpc2NfbHBvcnQoZGlzYyk7CiAJdW5zaWduZWQgbG9uZyBkZWxheSA9IDA7CiAKIAlGQ19ESVNDX0RCRyhkaXNjLCAiRXJyb3IgJWxkLCByZXRyaWVzICVkLyVkXG4iLApAQCAtMzUzLDcgKzM0OCw3IEBACiBzdGF0aWMgdm9pZCBmY19kaXNjX2dwbl9mdF9yZXEoc3RydWN0IGZjX2Rpc2MgKmRpc2MpCiB7CiAJc3RydWN0IGZjX2ZyYW1lICpmcDsKLQlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gZGlzYy0+bHBvcnQ7CisJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IGZjX2Rpc2NfbHBvcnQoZGlzYyk7CiAKIAlXQVJOX09OKCFmY19scG9ydF90ZXN0X3JlYWR5KGxwb3J0KSk7CiAKQEAgLTM5Niw3ICszOTEsNyBAQAogCXN0cnVjdCBmY19ycG9ydF9pZGVudGlmaWVycyBpZHM7CiAJc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhOwogCi0JbHBvcnQgPSBkaXNjLT5scG9ydDsKKwlscG9ydCA9IGZjX2Rpc2NfbHBvcnQoZGlzYyk7CiAJZGlzYy0+c2VxX2NvdW50Kys7CiAKIAkvKgpAQCAtNzMzLDcgKzcyOCw3IEBACiAJbXV0ZXhfaW5pdCgmZGlzYy0+ZGlzY19tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJmRpc2MtPnJwb3J0cyk7CiAKLQlkaXNjLT5scG9ydCA9IGxwb3J0OworCWRpc2MtPnByaXYgPSBscG9ydDsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2Vsc2N0LmMgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZWxzY3QuYwppbmRleCBlOTQxMmI3Li45YjI1OTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZWxzY3QuYworKysgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZWxzY3QuYwpAQCAtNjQsNyArNjQsNyBAQAogCX0KIAogCWZjX2ZpbGxfZmNfaGRyKGZwLCByX2N0bCwgZGlkLCBscG9ydC0+cG9ydF9pZCwgZmhfdHlwZSwKLQkJICAgICAgIEZDX0ZDX0ZJUlNUX1NFUSB8IEZDX0ZDX0VORF9TRVEgfCBGQ19GQ19TRVFfSU5JVCwgMCk7CisJCSAgICAgICBGQ19GQ1RMX1JFUSwgMCk7CiAKIAlyZXR1cm4gbHBvcnQtPnR0LmV4Y2hfc2VxX3NlbmQobHBvcnQsIGZwLCByZXNwLCBOVUxMLCBhcmcsIHRpbWVyX21zZWMpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2V4Y2guYyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19leGNoLmMKaW5kZXggMTA0ZTBmYi4uZWMyYTFhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2V4Y2guYworKysgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZXhjaC5jCkBAIC0xMjksMTEgKzEyOSwxMSBAQAogfTsKIAogc3RhdGljIHZvaWQgZmNfZXhjaF9ycnEoc3RydWN0IGZjX2V4Y2ggKik7Ci1zdGF0aWMgdm9pZCBmY19zZXFfbHNfYWNjKHN0cnVjdCBmY19zZXEgKik7Ci1zdGF0aWMgdm9pZCBmY19zZXFfbHNfcmp0KHN0cnVjdCBmY19zZXEgKiwgZW51bSBmY19lbHNfcmp0X3JlYXNvbiwKK3N0YXRpYyB2b2lkIGZjX3NlcV9sc19hY2Moc3RydWN0IGZjX2ZyYW1lICopOworc3RhdGljIHZvaWQgZmNfc2VxX2xzX3JqdChzdHJ1Y3QgZmNfZnJhbWUgKiwgZW51bSBmY19lbHNfcmp0X3JlYXNvbiwKIAkJCSAgZW51bSBmY19lbHNfcmp0X2V4cGxhbik7Ci1zdGF0aWMgdm9pZCBmY19leGNoX2Vsc19yZWMoc3RydWN0IGZjX3NlcSAqLCBzdHJ1Y3QgZmNfZnJhbWUgKik7Ci1zdGF0aWMgdm9pZCBmY19leGNoX2Vsc19ycnEoc3RydWN0IGZjX3NlcSAqLCBzdHJ1Y3QgZmNfZnJhbWUgKik7CitzdGF0aWMgdm9pZCBmY19leGNoX2Vsc19yZWMoc3RydWN0IGZjX2ZyYW1lICopOworc3RhdGljIHZvaWQgZmNfZXhjaF9lbHNfcnJxKHN0cnVjdCBmY19mcmFtZSAqKTsKIAogLyoKICAqIEludGVybmFsIGltcGxlbWVudGF0aW9uIG5vdGVzLgpAQCAtMjE5LDggKzIxOSw2IEBACiAgKi8KIHN0YXRpYyBjaGFyICpmY19leGNoX3JjdGxfbmFtZXNbXSA9IEZDX1JDVExfTkFNRVNfSU5JVDsKIAotI2RlZmluZSBGQ19UQUJMRV9TSVpFKHgpICAgKHNpemVvZih4KSAvIHNpemVvZih4WzBdKSkKLQogLyoqCiAgKiBmY19leGNoX25hbWVfbG9va3VwKCkgLSBMb29rdXAgbmFtZSBieSBvcGNvZGUKICAqIEBvcDoJICAgICAgIE9wY29kZSB0byBiZSBsb29rZWQgdXAKQEAgLTI0OSw3ICsyNDcsNyBAQAogc3RhdGljIGNvbnN0IGNoYXIgKmZjX2V4Y2hfcmN0bF9uYW1lKHVuc2lnbmVkIGludCBvcCkKIHsKIAlyZXR1cm4gZmNfZXhjaF9uYW1lX2xvb2t1cChvcCwgZmNfZXhjaF9yY3RsX25hbWVzLAotCQkJCSAgIEZDX1RBQkxFX1NJWkUoZmNfZXhjaF9yY3RsX25hbWVzKSk7CisJCQkJICAgQVJSQVlfU0laRShmY19leGNoX3JjdGxfbmFtZXMpKTsKIH0KIAogLyoqCkBAIC00NjQsNiArNDYyLDcgQEAKIAogCWZfY3RsID0gbnRvaDI0KGZoLT5maF9mX2N0bCk7CiAJZmNfZXhjaF9zZXR1cF9oZHIoZXAsIGZwLCBmX2N0bCk7CisJZnJfZW5jYXBzKGZwKSA9IGVwLT5lbmNhcHM7CiAKIAkvKgogCSAqIHVwZGF0ZSBzZXF1ZW5jZSBjb3VudCBpZiB0aGlzIGZyYW1lIGlzIGNhcnJ5aW5nCkBAIC0xMDAyLDI4ICsxMDAxLDMwIEBACiAvKioKICAqIGZjX3NlcV9lbHNfcnNwX3NlbmQoKSAtIFNlbmQgYW4gRUxTIHJlc3BvbnNlIHVzaW5nIGluZm9tYXRpb24gZnJvbQogICoJCQkgICB0aGUgZXhpc3Rpbmcgc2VxdWVuY2UvZXhjaGFuZ2UuCi0gKiBAc3A6CSAgICAgIFRoZSBzZXF1ZW5jZS9leGNoYW5nZSB0byBnZXQgaW5mb3JtYXRpb24gZnJvbQorICogQGZwOgkgICAgICBUaGUgcmVjZWl2ZWQgZnJhbWUKICAqIEBlbHNfY21kOiAgVGhlIEVMUyBjb21tYW5kIHRvIGJlIHNlbnQKICAqIEBlbHNfZGF0YTogVGhlIEVMUyBkYXRhIHRvIGJlIHNlbnQKKyAqCisgKiBUaGUgcmVjZWl2ZWQgZnJhbWUgaXMgbm90IGZyZWVkLgogICovCi1zdGF0aWMgdm9pZCBmY19zZXFfZWxzX3JzcF9zZW5kKHN0cnVjdCBmY19zZXEgKnNwLCBlbnVtIGZjX2Vsc19jbWQgZWxzX2NtZCwKK3N0YXRpYyB2b2lkIGZjX3NlcV9lbHNfcnNwX3NlbmQoc3RydWN0IGZjX2ZyYW1lICpmcCwgZW51bSBmY19lbHNfY21kIGVsc19jbWQsCiAJCQkJc3RydWN0IGZjX3NlcV9lbHNfZGF0YSAqZWxzX2RhdGEpCiB7CiAJc3dpdGNoIChlbHNfY21kKSB7CiAJY2FzZSBFTFNfTFNfUkpUOgotCQlmY19zZXFfbHNfcmp0KHNwLCBlbHNfZGF0YS0+cmVhc29uLCBlbHNfZGF0YS0+ZXhwbGFuKTsKKwkJZmNfc2VxX2xzX3JqdChmcCwgZWxzX2RhdGEtPnJlYXNvbiwgZWxzX2RhdGEtPmV4cGxhbik7CiAJCWJyZWFrOwogCWNhc2UgRUxTX0xTX0FDQzoKLQkJZmNfc2VxX2xzX2FjYyhzcCk7CisJCWZjX3NlcV9sc19hY2MoZnApOwogCQlicmVhazsKIAljYXNlIEVMU19SUlE6Ci0JCWZjX2V4Y2hfZWxzX3JycShzcCwgZWxzX2RhdGEtPmZwKTsKKwkJZmNfZXhjaF9lbHNfcnJxKGZwKTsKIAkJYnJlYWs7CiAJY2FzZSBFTFNfUkVDOgotCQlmY19leGNoX2Vsc19yZWMoc3AsIGVsc19kYXRhLT5mcCk7CisJCWZjX2V4Y2hfZWxzX3JlYyhmcCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUZDX0VYQ0hfREJHKGZjX3NlcV9leGNoKHNwKSwgIkludmFsaWQgRUxTIENNRDoleFxuIiwgZWxzX2NtZCk7CisJCUZDX0xQT1JUX0RCRyhmcl9kZXYoZnApLCAiSW52YWxpZCBFTFMgQ01EOiV4XG4iLCBlbHNfY21kKTsKIAl9CiB9CiAKQEAgLTEyMzAsMTEgKzEyMzEsMzUgQEAKIH0KIAogLyoqCi0gKiBmY19leGNoX3JlY3ZfcmVxKCkgLSBIYW5kbGVyIGZvciBhbiBpbmNvbWluZyByZXF1ZXN0IHdoZXJlIGlzIG90aGVyCi0gKgkJCWVuZCBpcyBvcmlnaW5hdGluZyB0aGUgc2VxdWVuY2UKKyAqIGZjX3NlcV9hc3NpZ24oKSAtIEFzc2lnbiBleGNoYW5nZSBhbmQgc2VxdWVuY2UgZm9yIGluY29taW5nIHJlcXVlc3QKKyAqIEBscG9ydDogVGhlIGxvY2FsIHBvcnQgdGhhdCByZWNlaXZlZCB0aGUgcmVxdWVzdAorICogQGZwOiAgICBUaGUgcmVxdWVzdCBmcmFtZQorICoKKyAqIE9uIHN1Y2Nlc3MsIHRoZSBzZXF1ZW5jZSBwb2ludGVyIHdpbGwgYmUgcmV0dXJuZWQgYW5kIGFsc28gaW4gZnJfc2VxKEBmcCkuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZmNfc2VxICpmY19zZXFfYXNzaWduKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsIHN0cnVjdCBmY19mcmFtZSAqZnApCit7CisJc3RydWN0IGZjX2V4Y2hfbWdyX2FuY2hvciAqZW1hOworCisJV0FSTl9PTihscG9ydCAhPSBmcl9kZXYoZnApKTsKKwlXQVJOX09OKGZyX3NlcShmcCkpOworCWZyX3NlcShmcCkgPSBOVUxMOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbWEsICZscG9ydC0+ZW1hX2xpc3QsIGVtYV9saXN0KQorCQlpZiAoKCFlbWEtPm1hdGNoIHx8IGVtYS0+bWF0Y2goZnApKSAmJgorCQkgICAgZmNfc2VxX2xvb2t1cF9yZWNpcChscG9ydCwgZW1hLT5tcCwgZnApICE9IEZDX1JKVF9OT05FKQorCQkJYnJlYWs7CisJcmV0dXJuIGZyX3NlcShmcCk7Cit9CisKKy8qKgorICogZmNfZXhjaF9yZWN2X3JlcSgpIC0gSGFuZGxlciBmb3IgYW4gaW5jb21pbmcgcmVxdWVzdAogICogQGxwb3J0OiBUaGUgbG9jYWwgcG9ydCB0aGF0IHJlY2VpdmVkIHRoZSByZXF1ZXN0CiAgKiBAbXA6CSAgIFRoZSBFTSB0aGF0IHRoZSBleGNoYW5nZSBpcyBvbgogICogQGZwOgkgICBUaGUgcmVxdWVzdCBmcmFtZQorICoKKyAqIFRoaXMgaXMgdXNlZCB3aGVuIHRoZSBvdGhlciBlbmQgaXMgb3JpZ2luYXRpbmcgdGhlIGV4Y2hhbmdlCisgKiBhbmQgdGhlIHNlcXVlbmNlLgogICovCiBzdGF0aWMgdm9pZCBmY19leGNoX3JlY3ZfcmVxKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsIHN0cnVjdCBmY19leGNoX21nciAqbXAsCiAJCQkgICAgIHN0cnVjdCBmY19mcmFtZSAqZnApCkBAIC0xMjUyLDEzICsxMjc3LDIzIEBACiAJCWZjX2ZyYW1lX2ZyZWUoZnApOwogCQlyZXR1cm47CiAJfQorCWZyX2RldihmcCkgPSBscG9ydDsKIAotCWZyX3NlcShmcCkgPSBOVUxMOworCUJVR19PTihmcl9zZXEoZnApKTsJCS8qIFhYWCByZW1vdmUgbGF0ZXIgKi8KKworCS8qCisJICogSWYgdGhlIFJYX0lEIGlzIDB4ZmZmZiwgZG9uJ3QgYWxsb2NhdGUgYW4gZXhjaGFuZ2UuCisJICogVGhlIHVwcGVyLWxldmVsIHByb3RvY29sIG1heSByZXF1ZXN0IG9uZSBsYXRlciwgaWYgbmVlZGVkLgorCSAqLworCWlmIChmaC0+ZmhfcnhfaWQgPT0gaHRvbnMoRkNfWElEX1VOS05PV04pKQorCQlyZXR1cm4gbHBvcnQtPnR0Lmxwb3J0X3JlY3YobHBvcnQsIGZwKTsKKwogCXJlamVjdCA9IGZjX3NlcV9sb29rdXBfcmVjaXAobHBvcnQsIG1wLCBmcCk7CiAJaWYgKHJlamVjdCA9PSBGQ19SSlRfTk9ORSkgewogCQlzcCA9IGZyX3NlcShmcCk7CS8qIHNlcXVlbmNlIHdpbGwgYmUgaGVsZCAqLwogCQllcCA9IGZjX3NlcV9leGNoKHNwKTsKIAkJZmNfc2VxX3NlbmRfYWNrKHNwLCBmcCk7CisJCWVwLT5lbmNhcHMgPSBmcl9lbmNhcHMoZnApOwogCiAJCS8qCiAJCSAqIENhbGwgdGhlIHJlY2VpdmUgZnVuY3Rpb24uCkBAIC0xMjc0LDcgKzEzMDksNyBAQAogCQlpZiAoZXAtPnJlc3ApCiAJCQllcC0+cmVzcChzcCwgZnAsIGVwLT5hcmcpOwogCQllbHNlCi0JCQlscG9ydC0+dHQubHBvcnRfcmVjdihscG9ydCwgc3AsIGZwKTsKKwkJCWxwb3J0LT50dC5scG9ydF9yZWN2KGxwb3J0LCBmcCk7CiAJCWZjX2V4Y2hfcmVsZWFzZShlcCk7CS8qIHJlbGVhc2UgZnJvbSBsb29rdXAgKi8KIAl9IGVsc2UgewogCQlGQ19MUE9SVF9EQkcobHBvcnQsICJleGNoL3NlcSBsb29rdXAgZmFpbGVkOiByZWplY3QgJXhcbiIsCkBAIC0xNTQyLDUzICsxNTc3LDU1IEBACiAKIC8qKgogICogZmNfc2VxX2xzX2FjYygpIC0gQWNjZXB0IHNlcXVlbmNlIHdpdGggTFNfQUNDCi0gKiBAcmVxX3NwOiBUaGUgcmVxdWVzdCBzZXF1ZW5jZQorICogQHJ4X2ZwOiBUaGUgcmVjZWl2ZWQgZnJhbWUsIG5vdCBmcmVlZCBoZXJlLgogICoKICAqIElmIHRoaXMgZmFpbHMgZHVlIHRvIGFsbG9jYXRpb24gb3IgdHJhbnNtaXQgY29uZ2VzdGlvbiwgYXNzdW1lIHRoZQogICogb3JpZ2luYXRvciB3aWxsIHJlcGVhdCB0aGUgc2VxdWVuY2UuCiAgKi8KLXN0YXRpYyB2b2lkIGZjX3NlcV9sc19hY2Moc3RydWN0IGZjX3NlcSAqcmVxX3NwKQorc3RhdGljIHZvaWQgZmNfc2VxX2xzX2FjYyhzdHJ1Y3QgZmNfZnJhbWUgKnJ4X2ZwKQogewotCXN0cnVjdCBmY19zZXEgKnNwOworCXN0cnVjdCBmY19scG9ydCAqbHBvcnQ7CiAJc3RydWN0IGZjX2Vsc19sc19hY2MgKmFjYzsKIAlzdHJ1Y3QgZmNfZnJhbWUgKmZwOwogCi0Jc3AgPSBmY19zZXFfc3RhcnRfbmV4dChyZXFfc3ApOwotCWZwID0gZmNfZnJhbWVfYWxsb2MoZmNfc2VxX2V4Y2goc3ApLT5scCwgc2l6ZW9mKCphY2MpKTsKLQlpZiAoZnApIHsKLQkJYWNjID0gZmNfZnJhbWVfcGF5bG9hZF9nZXQoZnAsIHNpemVvZigqYWNjKSk7Ci0JCW1lbXNldChhY2MsIDAsIHNpemVvZigqYWNjKSk7Ci0JCWFjYy0+bGFfY21kID0gRUxTX0xTX0FDQzsKLQkJZmNfc2VxX3NlbmRfbGFzdChzcCwgZnAsIEZDX1JDVExfRUxTX1JFUCwgRkNfVFlQRV9FTFMpOwotCX0KKwlscG9ydCA9IGZyX2RldihyeF9mcCk7CisJZnAgPSBmY19mcmFtZV9hbGxvYyhscG9ydCwgc2l6ZW9mKCphY2MpKTsKKwlpZiAoIWZwKQorCQlyZXR1cm47CisJYWNjID0gZmNfZnJhbWVfcGF5bG9hZF9nZXQoZnAsIHNpemVvZigqYWNjKSk7CisJbWVtc2V0KGFjYywgMCwgc2l6ZW9mKCphY2MpKTsKKwlhY2MtPmxhX2NtZCA9IEVMU19MU19BQ0M7CisJZmNfZmlsbF9yZXBseV9oZHIoZnAsIHJ4X2ZwLCBGQ19SQ1RMX0VMU19SRVAsIDApOworCWxwb3J0LT50dC5mcmFtZV9zZW5kKGxwb3J0LCBmcCk7CiB9CiAKIC8qKgogICogZmNfc2VxX2xzX3JqdCgpIC0gUmVqZWN0IGEgc2VxdWVuY2Ugd2l0aCBFTFMgTFNfUkpUCi0gKiBAcmVxX3NwOiBUaGUgcmVxdWVzdCBzZXF1ZW5jZQorICogQHJ4X2ZwOiBUaGUgcmVjZWl2ZWQgZnJhbWUsIG5vdCBmcmVlZCBoZXJlLgogICogQHJlYXNvbjogVGhlIHJlYXNvbiB0aGUgc2VxdWVuY2UgaXMgYmVpbmcgcmVqZWN0ZWQKLSAqIEBleHBsYW46IFRoZSBleHBsYWluYXRpb24gZm9yIHRoZSByZWplY3Rpb24KKyAqIEBleHBsYW46IFRoZSBleHBsYW5hdGlvbiBmb3IgdGhlIHJlamVjdGlvbgogICoKICAqIElmIHRoaXMgZmFpbHMgZHVlIHRvIGFsbG9jYXRpb24gb3IgdHJhbnNtaXQgY29uZ2VzdGlvbiwgYXNzdW1lIHRoZQogICogb3JpZ2luYXRvciB3aWxsIHJlcGVhdCB0aGUgc2VxdWVuY2UuCiAgKi8KLXN0YXRpYyB2b2lkIGZjX3NlcV9sc19yanQoc3RydWN0IGZjX3NlcSAqcmVxX3NwLCBlbnVtIGZjX2Vsc19yanRfcmVhc29uIHJlYXNvbiwKK3N0YXRpYyB2b2lkIGZjX3NlcV9sc19yanQoc3RydWN0IGZjX2ZyYW1lICpyeF9mcCwgZW51bSBmY19lbHNfcmp0X3JlYXNvbiByZWFzb24sCiAJCQkgIGVudW0gZmNfZWxzX3JqdF9leHBsYW4gZXhwbGFuKQogewotCXN0cnVjdCBmY19zZXEgKnNwOworCXN0cnVjdCBmY19scG9ydCAqbHBvcnQ7CiAJc3RydWN0IGZjX2Vsc19sc19yanQgKnJqdDsKIAlzdHJ1Y3QgZmNfZnJhbWUgKmZwOwogCi0Jc3AgPSBmY19zZXFfc3RhcnRfbmV4dChyZXFfc3ApOwotCWZwID0gZmNfZnJhbWVfYWxsb2MoZmNfc2VxX2V4Y2goc3ApLT5scCwgc2l6ZW9mKCpyanQpKTsKLQlpZiAoZnApIHsKLQkJcmp0ID0gZmNfZnJhbWVfcGF5bG9hZF9nZXQoZnAsIHNpemVvZigqcmp0KSk7Ci0JCW1lbXNldChyanQsIDAsIHNpemVvZigqcmp0KSk7Ci0JCXJqdC0+ZXJfY21kID0gRUxTX0xTX1JKVDsKLQkJcmp0LT5lcl9yZWFzb24gPSByZWFzb247Ci0JCXJqdC0+ZXJfZXhwbGFuID0gZXhwbGFuOwotCQlmY19zZXFfc2VuZF9sYXN0KHNwLCBmcCwgRkNfUkNUTF9FTFNfUkVQLCBGQ19UWVBFX0VMUyk7Ci0JfQorCWxwb3J0ID0gZnJfZGV2KHJ4X2ZwKTsKKwlmcCA9IGZjX2ZyYW1lX2FsbG9jKGxwb3J0LCBzaXplb2YoKnJqdCkpOworCWlmICghZnApCisJCXJldHVybjsKKwlyanQgPSBmY19mcmFtZV9wYXlsb2FkX2dldChmcCwgc2l6ZW9mKCpyanQpKTsKKwltZW1zZXQocmp0LCAwLCBzaXplb2YoKnJqdCkpOworCXJqdC0+ZXJfY21kID0gRUxTX0xTX1JKVDsKKwlyanQtPmVyX3JlYXNvbiA9IHJlYXNvbjsKKwlyanQtPmVyX2V4cGxhbiA9IGV4cGxhbjsKKwlmY19maWxsX3JlcGx5X2hkcihmcCwgcnhfZnAsIEZDX1JDVExfRUxTX1JFUCwgMCk7CisJbHBvcnQtPnR0LmZyYW1lX3NlbmQobHBvcnQsIGZwKTsKIH0KIAogLyoqCkBAIC0xNjkxLDE3ICsxNzI4LDMzIEBACiBFWFBPUlRfU1lNQk9MKGZjX2V4Y2hfbWdyX3Jlc2V0KTsKIAogLyoqCisgKiBmY19leGNoX2xvb2t1cCgpIC0gZmluZCBhbiBleGNoYW5nZQorICogQGxwb3J0OiBUaGUgbG9jYWwgcG9ydAorICogQHhpZDogVGhlIGV4Y2hhbmdlIElECisgKgorICogUmV0dXJucyBleGNoYW5nZSBwb2ludGVyIHdpdGggaG9sZCBmb3IgY2FsbGVyLCBvciBOVUxMIGlmIG5vdCBmb3VuZC4KKyAqLworc3RhdGljIHN0cnVjdCBmY19leGNoICpmY19leGNoX2xvb2t1cChzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LCB1MzIgeGlkKQoreworCXN0cnVjdCBmY19leGNoX21ncl9hbmNob3IgKmVtYTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW1hLCAmbHBvcnQtPmVtYV9saXN0LCBlbWFfbGlzdCkKKwkJaWYgKGVtYS0+bXAtPm1pbl94aWQgPD0geGlkICYmIHhpZCA8PSBlbWEtPm1wLT5tYXhfeGlkKQorCQkJcmV0dXJuIGZjX2V4Y2hfZmluZChlbWEtPm1wLCB4aWQpOworCXJldHVybiBOVUxMOworfQorCisvKioKICAqIGZjX2V4Y2hfZWxzX3JlYygpIC0gSGFuZGxlciBmb3IgRUxTIFJFQyAoUmVhZCBFeGNoYW5nZSBDb25jaXNlKSByZXF1ZXN0cwotICogQHNwOgkgVGhlIHNlcXVlbmNlIHRoZSBSRUMgaXMgb24KLSAqIEByZnA6IFRoZSBSRUMgZnJhbWUKKyAqIEByZnA6IFRoZSBSRUMgZnJhbWUsIG5vdCBmcmVlZCBoZXJlLgogICoKICAqIE5vdGUgdGhhdCB0aGUgcmVxdWVzdGluZyBwb3J0IG1heSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgU19JRCBpbiB0aGUgcmVxdWVzdC4KICAqLwotc3RhdGljIHZvaWQgZmNfZXhjaF9lbHNfcmVjKHN0cnVjdCBmY19zZXEgKnNwLCBzdHJ1Y3QgZmNfZnJhbWUgKnJmcCkKK3N0YXRpYyB2b2lkIGZjX2V4Y2hfZWxzX3JlYyhzdHJ1Y3QgZmNfZnJhbWUgKnJmcCkKIHsKKwlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0OwogCXN0cnVjdCBmY19mcmFtZSAqZnA7CiAJc3RydWN0IGZjX2V4Y2ggKmVwOwotCXN0cnVjdCBmY19leGNoX21nciAqZW07CiAJc3RydWN0IGZjX2Vsc19yZWMgKnJwOwogCXN0cnVjdCBmY19lbHNfcmVjX2FjYyAqYWNjOwogCWVudW0gZmNfZWxzX3JqdF9yZWFzb24gcmVhc29uID0gRUxTX1JKVF9MT0dJQzsKQEAgLTE3MTAsNiArMTc2Myw3IEBACiAJdTE2IHJ4aWQ7CiAJdTE2IG94aWQ7CiAKKwlscG9ydCA9IGZyX2RldihyZnApOwogCXJwID0gZmNfZnJhbWVfcGF5bG9hZF9nZXQocmZwLCBzaXplb2YoKnJwKSk7CiAJZXhwbGFuID0gRUxTX0VYUExfSU5WX0xFTjsKIAlpZiAoIXJwKQpAQCAtMTcxOCwzNSArMTc3MiwxOSBAQAogCXJ4aWQgPSBudG9ocyhycC0+cmVjX3J4X2lkKTsKIAlveGlkID0gbnRvaHMocnAtPnJlY19veF9pZCk7CiAKLQkvKgotCSAqIEN1cnJlbnRseSBpdCdzIGhhcmQgdG8gZmluZCB0aGUgbG9jYWwgU19JRCBmcm9tIHRoZSBleGNoYW5nZQotCSAqIG1hbmFnZXIuICBUaGlzIHdpbGwgZXZlbnR1YWxseSBiZSBmaXhlZCwgYnV0IGZvciBub3cgaXQncyBlYXNpZXIKLQkgKiB0byBsb29rdXAgdGhlIHN1YmplY3QgZXhjaGFuZ2UgdHdpY2UsIG9uY2UgYXMgaWYgd2Ugd2VyZQotCSAqIHRoZSBpbml0aWF0b3IsIGFuZCB0aGVuIGFnYWluIGlmIHdlIHdlcmVuJ3QuCi0JICovCi0JZW0gPSBmY19zZXFfZXhjaChzcCktPmVtOwotCWVwID0gZmNfZXhjaF9maW5kKGVtLCBveGlkKTsKKwllcCA9IGZjX2V4Y2hfbG9va3VwKGxwb3J0LAorCQkJICAgIHNpZCA9PSBmY19ob3N0X3BvcnRfaWQobHBvcnQtPmhvc3QpID8gb3hpZCA6IHJ4aWQpOwogCWV4cGxhbiA9IEVMU19FWFBMX09YSURfUlhJRDsKLQlpZiAoZXAgJiYgZXAtPm9pZCA9PSBzaWQpIHsKLQkJaWYgKGVwLT5yeGlkICE9IEZDX1hJRF9VTktOT1dOICYmCi0JCSAgICByeGlkICE9IEZDX1hJRF9VTktOT1dOICYmCi0JCSAgICBlcC0+cnhpZCAhPSByeGlkKQotCQkJZ290byByZWw7Ci0JfSBlbHNlIHsKLQkJaWYgKGVwKQotCQkJZmNfZXhjaF9yZWxlYXNlKGVwKTsKLQkJZXAgPSBOVUxMOwotCQlpZiAocnhpZCAhPSBGQ19YSURfVU5LTk9XTikKLQkJCWVwID0gZmNfZXhjaF9maW5kKGVtLCByeGlkKTsKLQkJaWYgKCFlcCkKLQkJCWdvdG8gcmVqZWN0OwotCX0KLQotCWZwID0gZmNfZnJhbWVfYWxsb2MoZmNfc2VxX2V4Y2goc3ApLT5scCwgc2l6ZW9mKCphY2MpKTsKLQlpZiAoIWZwKSB7Ci0JCWZjX2V4Y2hfZG9uZShzcCk7CisJaWYgKCFlcCkKKwkJZ290byByZWplY3Q7CisJaWYgKGVwLT5vaWQgIT0gc2lkIHx8IG94aWQgIT0gZXAtPm94aWQpCisJCWdvdG8gcmVsOworCWlmIChyeGlkICE9IEZDX1hJRF9VTktOT1dOICYmIHJ4aWQgIT0gZXAtPnJ4aWQpCisJCWdvdG8gcmVsOworCWZwID0gZmNfZnJhbWVfYWxsb2MobHBvcnQsIHNpemVvZigqYWNjKSk7CisJaWYgKCFmcCkKIAkJZ290byBvdXQ7Ci0JfQorCiAJYWNjID0gZmNfZnJhbWVfcGF5bG9hZF9nZXQoZnAsIHNpemVvZigqYWNjKSk7CiAJbWVtc2V0KGFjYywgMCwgc2l6ZW9mKCphY2MpKTsKIAlhY2MtPnJlY2FfY21kID0gRUxTX0xTX0FDQzsKQEAgLTE3NjEsMTggKzE3OTksMTYgQEAKIAlhY2MtPnJlY2FfZV9zdGF0ID0gaHRvbmwoZXAtPmVzYl9zdGF0ICYgKEVTQl9TVF9SRVNQIHwKIAkJCQkJCSBFU0JfU1RfU0VRX0lOSVQgfAogCQkJCQkJIEVTQl9TVF9DT01QTEVURSkpOwotCXNwID0gZmNfc2VxX3N0YXJ0X25leHQoc3ApOwotCWZjX3NlcV9zZW5kX2xhc3Qoc3AsIGZwLCBGQ19SQ1RMX0VMU19SRVAsIEZDX1RZUEVfRUxTKTsKKwlmY19maWxsX3JlcGx5X2hkcihmcCwgcmZwLCBGQ19SQ1RMX0VMU19SRVAsIDApOworCWxwb3J0LT50dC5mcmFtZV9zZW5kKGxwb3J0LCBmcCk7CiBvdXQ6CiAJZmNfZXhjaF9yZWxlYXNlKGVwKTsKLQlmY19mcmFtZV9mcmVlKHJmcCk7CiAJcmV0dXJuOwogCiByZWw6CiAJZmNfZXhjaF9yZWxlYXNlKGVwKTsKIHJlamVjdDoKLQlmY19zZXFfbHNfcmp0KHNwLCByZWFzb24sIGV4cGxhbik7Ci0JZmNfZnJhbWVfZnJlZShyZnApOworCWZjX3NlcV9sc19yanQocmZwLCByZWFzb24sIGV4cGxhbik7CiB9CiAKIC8qKgpAQCAtMTk0NywyMCArMTk4MywyMCBAQAogCXNwaW5fdW5sb2NrX2JoKCZlcC0+ZXhfbG9jayk7CiB9CiAKLQogLyoqCiAgKiBmY19leGNoX2Vsc19ycnEoKSAtIEhhbmRsZXIgZm9yIEVMUyBSUlEgKFJlc2V0IFJlY292ZXJ5IFF1YWxpZmllcikgcmVxdWVzdHMKLSAqIEBzcDogVGhlIHNlcXVlbmNlIHRoYXQgdGhlIFJSUSBpcyBvbgotICogQGZwOiBUaGUgUlJRIGZyYW1lCisgKiBAZnA6IFRoZSBSUlEgZnJhbWUsIG5vdCBmcmVlZCBoZXJlLgogICovCi1zdGF0aWMgdm9pZCBmY19leGNoX2Vsc19ycnEoc3RydWN0IGZjX3NlcSAqc3AsIHN0cnVjdCBmY19mcmFtZSAqZnApCitzdGF0aWMgdm9pZCBmY19leGNoX2Vsc19ycnEoc3RydWN0IGZjX2ZyYW1lICpmcCkKIHsKKwlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0OwogCXN0cnVjdCBmY19leGNoICplcCA9IE5VTEw7CS8qIHJlcXVlc3Qgb3Igc3ViamVjdCBleGNoYW5nZSAqLwogCXN0cnVjdCBmY19lbHNfcnJxICpycDsKIAl1MzIgc2lkOwogCXUxNiB4aWQ7CiAJZW51bSBmY19lbHNfcmp0X2V4cGxhbiBleHBsYW47CiAKKwlscG9ydCA9IGZyX2RldihmcCk7CiAJcnAgPSBmY19mcmFtZV9wYXlsb2FkX2dldChmcCwgc2l6ZW9mKCpycCkpOwogCWV4cGxhbiA9IEVMU19FWFBMX0lOVl9MRU47CiAJaWYgKCFycCkKQEAgLTE5NjksMTEgKzIwMDUsMTAgQEAKIAkvKgogCSAqIGxvb2t1cCBzdWJqZWN0IGV4Y2hhbmdlLgogCSAqLwotCWVwID0gZmNfc2VxX2V4Y2goc3ApOwogCXNpZCA9IG50b2gyNChycC0+cnJxX3NfaWQpOwkJLyogc3ViamVjdCBzb3VyY2UgKi8KLQl4aWQgPSBlcC0+ZGlkID09IHNpZCA/IG50b2hzKHJwLT5ycnFfb3hfaWQpIDogbnRvaHMocnAtPnJycV9yeF9pZCk7Ci0JZXAgPSBmY19leGNoX2ZpbmQoZXAtPmVtLCB4aWQpOwotCisJeGlkID0gZmNfaG9zdF9wb3J0X2lkKGxwb3J0LT5ob3N0KSA9PSBzaWQgPworCQkJbnRvaHMocnAtPnJycV9veF9pZCkgOiBudG9ocyhycC0+cnJxX3J4X2lkKTsKKwllcCA9IGZjX2V4Y2hfbG9va3VwKGxwb3J0LCB4aWQpOwogCWV4cGxhbiA9IEVMU19FWFBMX09YSURfUlhJRDsKIAlpZiAoIWVwKQogCQlnb3RvIHJlamVjdDsKQEAgLTIwMDQsMTUgKzIwMzksMTQgQEAKIAkvKgogCSAqIFNlbmQgTFNfQUNDLgogCSAqLwotCWZjX3NlcV9sc19hY2Moc3ApOworCWZjX3NlcV9sc19hY2MoZnApOwogCWdvdG8gb3V0OwogCiB1bmxvY2tfcmVqZWN0OgogCXNwaW5fdW5sb2NrX2JoKCZlcC0+ZXhfbG9jayk7CiByZWplY3Q6Ci0JZmNfc2VxX2xzX3JqdChzcCwgRUxTX1JKVF9MT0dJQywgZXhwbGFuKTsKKwlmY19zZXFfbHNfcmp0KGZwLCBFTFNfUkpUX0xPR0lDLCBleHBsYW4pOwogb3V0OgotCWZjX2ZyYW1lX2ZyZWUoZnApOwogCWlmIChlcCkKIAkJZmNfZXhjaF9yZWxlYXNlKGVwKTsJLyogZHJvcCBob2xkIGZyb20gZmNfZXhjaF9maW5kICovCiB9CkBAIC0yMjQzLDcgKzIyNzcsNyBAQAogCQkJZmNfZXhjaF9yZWN2X3NlcV9yZXNwKGVtYS0+bXAsIGZwKTsKIAkJZWxzZSBpZiAoZl9jdGwgJiBGQ19GQ19TRVFfQ1RYKQogCQkJZmNfZXhjaF9yZWN2X3Jlc3AoZW1hLT5tcCwgZnApOwotCQllbHNlCisJCWVsc2UJLyogbm8gRVhfQ1RYIGFuZCBubyBTRVFfQ1RYICovCiAJCQlmY19leGNoX3JlY3ZfcmVxKGxwb3J0LCBlbWEtPm1wLCBmcCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0yMjgxLDYgKzIzMTUsOSBAQAogCWlmICghbHBvcnQtPnR0LnNlcV9leGNoX2Fib3J0KQogCQlscG9ydC0+dHQuc2VxX2V4Y2hfYWJvcnQgPSBmY19zZXFfZXhjaF9hYm9ydDsKIAorCWlmICghbHBvcnQtPnR0LnNlcV9hc3NpZ24pCisJCWxwb3J0LT50dC5zZXFfYXNzaWduID0gZmNfc2VxX2Fzc2lnbjsKKwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChmY19leGNoX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jCmluZGV4IGVjMWY2NmMuLmVhYzRkMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19mY3AuYworKysgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMKQEAgLTU4MCwxMCArNTgwLDggQEAKIAkJCSAgIGZzcCwgc2VxX2JsZW4sIGxwb3J0LT5sc29fbWF4LCB0X2JsZW4pOwogCX0KIAotCVdBUk5fT04odF9ibGVuIDwgRkNfTUlOX01BWF9QQVlMT0FEKTsKIAlpZiAodF9ibGVuID4gNTEyKQogCQl0X2JsZW4gJj0gfig1MTIgLSAxKTsJLyogcm91bmQgZG93biB0byBibG9jayBzaXplICovCi0JV0FSTl9PTih0X2JsZW4gPCBGQ19NSU5fTUFYX1BBWUxPQUQpOwkvKiB3b24ndCBnbyBiZWxvdyAyNTYgKi8KIAlzYyA9IGZzcC0+Y21kOwogCiAJcmVtYWluaW5nID0gc2VxX2JsZW47CkBAIC03NDUsNyArNzQzLDcgQEAKIAlmaCA9IGZjX2ZyYW1lX2hlYWRlcl9nZXQoZnApOwogCXJfY3RsID0gZmgtPmZoX3JfY3RsOwogCi0JaWYgKCEobHBvcnQtPnN0YXRlICYgTFBPUlRfU1RfUkVBRFkpKQorCWlmIChscG9ydC0+c3RhdGUgIT0gTFBPUlRfU1RfUkVBRFkpCiAJCWdvdG8gb3V0OwogCWlmIChmY19mY3BfbG9ja19wa3QoZnNwKSkKIAkJZ290byBvdXQ7CkBAIC0xMTEwLDcgKzExMDgsNyBAQAogCiAJZmNfZmlsbF9mY19oZHIoZnAsIEZDX1JDVExfRERfVU5TT0xfQ01ELCBycG9ydC0+cG9ydF9pZCwKIAkJICAgICAgIHJwcml2LT5sb2NhbF9wb3J0LT5wb3J0X2lkLCBGQ19UWVBFX0ZDUCwKLQkJICAgICAgIEZDX0ZDX0ZJUlNUX1NFUSB8IEZDX0ZDX0VORF9TRVEgfCBGQ19GQ19TRVFfSU5JVCwgMCk7CisJCSAgICAgICBGQ19GQ1RMX1JFUSwgMCk7CiAKIAlzZXEgPSBscG9ydC0+dHQuZXhjaF9zZXFfc2VuZChscG9ydCwgZnAsIHJlc3AsIGZjX2ZjcF9wa3RfZGVzdHJveSwKIAkJCQkgICAgICBmc3AsIDApOwpAQCAtMTM4Myw3ICsxMzgxLDcgQEAKIAlmcl9zZXEoZnApID0gZnNwLT5zZXFfcHRyOwogCWZjX2ZpbGxfZmNfaGRyKGZwLCBGQ19SQ1RMX0VMU19SRVEsIHJwb3J0LT5wb3J0X2lkLAogCQkgICAgICAgcnByaXYtPmxvY2FsX3BvcnQtPnBvcnRfaWQsIEZDX1RZUEVfRUxTLAotCQkgICAgICAgRkNfRkNfRklSU1RfU0VRIHwgRkNfRkNfRU5EX1NFUSB8IEZDX0ZDX1NFUV9JTklULCAwKTsKKwkJICAgICAgIEZDX0ZDVExfUkVRLCAwKTsKIAlpZiAobHBvcnQtPnR0LmVsc2N0X3NlbmQobHBvcnQsIHJwb3J0LT5wb3J0X2lkLCBmcCwgRUxTX1JFQywKIAkJCQkgZmNfZmNwX3JlY19yZXNwLCBmc3AsCiAJCQkJIGppZmZpZXNfdG9fbXNlY3MoRkNfU0NTSV9SRUNfVE9WKSkpIHsKQEAgLTE2NDEsNyArMTYzOSw3IEBACiAKIAlmY19maWxsX2ZjX2hkcihmcCwgRkNfUkNUTF9FTFM0X1JFUSwgcnBvcnQtPnBvcnRfaWQsCiAJCSAgICAgICBycHJpdi0+bG9jYWxfcG9ydC0+cG9ydF9pZCwgRkNfVFlQRV9GQ1AsCi0JCSAgICAgICBGQ19GQ19GSVJTVF9TRVEgfCBGQ19GQ19FTkRfU0VRIHwgRkNfRkNfU0VRX0lOSVQsIDApOworCQkgICAgICAgRkNfRkNUTF9SRVEsIDApOwogCiAJc2VxID0gbHBvcnQtPnR0LmV4Y2hfc2VxX3NlbmQobHBvcnQsIGZwLCBmY19mY3Bfc3JyX3Jlc3AsIE5VTEwsCiAJCQkJICAgICAgZnNwLCBqaWZmaWVzX3RvX21zZWNzKEZDX1NDU0lfUkVDX1RPVikpOwpAQCAtMTk3Myw2ICsxOTcxLDExIEBACiAJCWJyZWFrOwogCX0KIAorCWlmIChscG9ydC0+c3RhdGUgIT0gTFBPUlRfU1RfUkVBRFkgJiYgZnNwLT5zdGF0dXNfY29kZSAhPSBGQ19DT01QTEVURSkgeworCQlzY19jbWQtPnJlc3VsdCA9IChESURfUkVRVUVVRSA8PCAxNik7CisJCUZDX0ZDUF9EQkcoZnNwLCAiUmV0dXJuaW5nIERJRF9SRVFVRVVFIHRvIHNjc2ktbWxcbiIpOworCX0KKwogCXNwaW5fbG9ja19pcnFzYXZlKCZzaS0+c2NzaV9xdWV1ZV9sb2NrLCBmbGFncyk7CiAJbGlzdF9kZWwoJmZzcC0+bGlzdCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2ktPnNjc2lfcXVldWVfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2xpYmZjLmMgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbGliZmMuYwppbmRleCAzOWY0YjZhLi42YTQ4YzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbGliZmMuYworKysgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbGliZmMuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAKICNpbmNsdWRlIDxzY3NpL2xpYmZjLmg+CisjaW5jbHVkZSA8c2NzaS9mY19lbmNvZGUuaD4KIAogI2luY2x1ZGUgImZjX2xpYmZjLmgiCiAKQEAgLTEzMiwzICsxMzMsODAgQEAKIAl9CiAJcmV0dXJuIGNvcHlfbGVuOwogfQorCisvKioKKyAqIGZjX2ZpbGxfaGRyKCkgLSAgZmlsbCBGQyBoZWFkZXIgZmllbGRzIGJhc2VkIG9uIHJlcXVlc3QKKyAqIEBmcDogcmVwbHkgZnJhbWUgY29udGFpbmluZyBoZWFkZXIgdG8gYmUgZmlsbGVkIGluCisgKiBAaW5fZnA6IHJlcXVlc3QgZnJhbWUgY29udGFpbmluZyBoZWFkZXIgdG8gdXNlIGluIGZpbGxpbmcgaW4gcmVwbHkKKyAqIEByX2N0bDogUl9DVEwgdmFsdWUgZm9yIGhlYWRlcgorICogQGZfY3RsOiBGX0NUTCB2YWx1ZSBmb3IgaGVhZGVyLCB3aXRoIDAgcGFkCisgKiBAc2VxX2NudDogc2VxdWVuY2UgY291bnQgZm9yIHRoZSBoZWFkZXIsIGlnbm9yZWQgaWYgZnJhbWUgaGFzIGEgc2VxdWVuY2UKKyAqIEBwYXJtX29mZnNldDogcGFyYW1ldGVyIC8gb2Zmc2V0IHZhbHVlCisgKi8KK3ZvaWQgZmNfZmlsbF9oZHIoc3RydWN0IGZjX2ZyYW1lICpmcCwgY29uc3Qgc3RydWN0IGZjX2ZyYW1lICppbl9mcCwKKwkJIGVudW0gZmNfcmN0bCByX2N0bCwgdTMyIGZfY3RsLCB1MTYgc2VxX2NudCwgdTMyIHBhcm1fb2Zmc2V0KQoreworCXN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKmZoOworCXN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKmluX2ZoOworCXN0cnVjdCBmY19zZXEgKnNwOworCXUzMiBmaWxsOworCisJZmggPSBfX2ZjX2ZyYW1lX2hlYWRlcl9nZXQoZnApOworCWluX2ZoID0gX19mY19mcmFtZV9oZWFkZXJfZ2V0KGluX2ZwKTsKKworCWlmIChmX2N0bCAmIEZDX0ZDX0VORF9TRVEpIHsKKwkJZmlsbCA9IC1mcl9sZW4oZnApICYgMzsKKwkJaWYgKGZpbGwpIHsKKwkJCS8qIFRPRE8sIHRoaXMgbWF5IGJlIGEgcHJvYmxlbSB3aXRoIGZyYWdtZW50ZWQgc2tiICovCisJCQltZW1zZXQoc2tiX3B1dChmcF9za2IoZnApLCBmaWxsKSwgMCwgZmlsbCk7CisJCQlmX2N0bCB8PSBmaWxsOworCQl9CisJCWZyX2VvZihmcCkgPSBGQ19FT0ZfVDsKKwl9IGVsc2UgeworCQlXQVJOX09OKGZyX2xlbihmcCkgJSA0ICE9IDApOwkvKiBubyBwYWQgdG8gbm9uIGxhc3QgZnJhbWUgKi8KKwkJZnJfZW9mKGZwKSA9IEZDX0VPRl9OOworCX0KKworCWZoLT5maF9yX2N0bCA9IHJfY3RsOworCW1lbWNweShmaC0+ZmhfZF9pZCwgaW5fZmgtPmZoX3NfaWQsIHNpemVvZihmaC0+ZmhfZF9pZCkpOworCW1lbWNweShmaC0+Zmhfc19pZCwgaW5fZmgtPmZoX2RfaWQsIHNpemVvZihmaC0+Zmhfc19pZCkpOworCWZoLT5maF90eXBlID0gaW5fZmgtPmZoX3R5cGU7CisJaHRvbjI0KGZoLT5maF9mX2N0bCwgZl9jdGwpOworCWZoLT5maF9veF9pZCA9IGluX2ZoLT5maF9veF9pZDsKKwlmaC0+ZmhfcnhfaWQgPSBpbl9maC0+ZmhfcnhfaWQ7CisJZmgtPmZoX2NzX2N0bCA9IDA7CisJZmgtPmZoX2RmX2N0bCA9IDA7CisJZmgtPmZoX3Bhcm1fb2Zmc2V0ID0gaHRvbmwocGFybV9vZmZzZXQpOworCisJc3AgPSBmcl9zZXEoaW5fZnApOworCWlmIChzcCkgeworCQlmcl9zZXEoZnApID0gc3A7CisJCWZoLT5maF9zZXFfaWQgPSBzcC0+aWQ7CisJCXNlcV9jbnQgPSBzcC0+Y250OworCX0gZWxzZSB7CisJCWZoLT5maF9zZXFfaWQgPSAwOworCX0KKwlmaC0+Zmhfc2VxX2NudCA9IG50b2hzKHNlcV9jbnQpOworCWZyX3NvZihmcCkgPSBzZXFfY250ID8gRkNfU09GX04zIDogRkNfU09GX0kzOworCWZyX2VuY2FwcyhmcCkgPSBmcl9lbmNhcHMoaW5fZnApOworfQorRVhQT1JUX1NZTUJPTChmY19maWxsX2hkcik7CisKKy8qKgorICogZmNfZmlsbF9yZXBseV9oZHIoKSAtICBmaWxsIEZDIHJlcGx5IGhlYWRlciBmaWVsZHMgYmFzZWQgb24gcmVxdWVzdAorICogQGZwOiByZXBseSBmcmFtZSBjb250YWluaW5nIGhlYWRlciB0byBiZSBmaWxsZWQgaW4KKyAqIEBpbl9mcDogcmVxdWVzdCBmcmFtZSBjb250YWluaW5nIGhlYWRlciB0byB1c2UgaW4gZmlsbGluZyBpbiByZXBseQorICogQHJfY3RsOiBSX0NUTCB2YWx1ZSBmb3IgcmVwbHkKKyAqIEBwYXJtX29mZnNldDogcGFyYW1ldGVyIC8gb2Zmc2V0IHZhbHVlCisgKi8KK3ZvaWQgZmNfZmlsbF9yZXBseV9oZHIoc3RydWN0IGZjX2ZyYW1lICpmcCwgY29uc3Qgc3RydWN0IGZjX2ZyYW1lICppbl9mcCwKKwkJICAgICAgIGVudW0gZmNfcmN0bCByX2N0bCwgdTMyIHBhcm1fb2Zmc2V0KQoreworCXN0cnVjdCBmY19zZXEgKnNwOworCisJc3AgPSBmcl9zZXEoaW5fZnApOworCWlmIChzcCkKKwkJZnJfc2VxKGZwKSA9IGZyX2Rldihpbl9mcCktPnR0LnNlcV9zdGFydF9uZXh0KHNwKTsKKwlmY19maWxsX2hkcihmcCwgaW5fZnAsIHJfY3RsLCBGQ19GQ1RMX1JFU1AsIDAsIHBhcm1fb2Zmc2V0KTsKK30KK0VYUE9SVF9TWU1CT0woZmNfZmlsbF9yZXBseV9oZHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2xpYmZjLmggYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbGliZmMuaAppbmRleCBmNWMwY2E0Li4xNmQyMTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbGliZmMuaAorKysgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbGliZmMuaApAQCAtNTIsNyArNTIsNyBAQAogI2RlZmluZSBGQ19ESVNDX0RCRyhkaXNjLCBmbXQsIGFyZ3MuLi4pCQkJCVwKIAlGQ19DSEVDS19MT0dHSU5HKEZDX0RJU0NfTE9HR0lORywJCQlcCiAJCQkgcHJpbnRrKEtFUk5fSU5GTyAiaG9zdCV1OiBkaXNjOiAiIGZtdCwJXAotCQkJCShkaXNjKS0+bHBvcnQtPmhvc3QtPmhvc3Rfbm8sCVwKKwkJCQlmY19kaXNjX2xwb3J0KGRpc2MpLT5ob3N0LT5ob3N0X25vLAlcCiAJCQkJIyNhcmdzKSkKIAogI2RlZmluZSBGQ19SUE9SVF9JRF9EQkcobHBvcnQsIHBvcnRfaWQsIGZtdCwgYXJncy4uLikJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbHBvcnQuYyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19scG9ydC5jCmluZGV4IDc5YzllM2MuLmQ5YjZlMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19scG9ydC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19scG9ydC5jCkBAIC0zMiwxMSArMzIsMTEgQEAKICAqIGludmFsaWQgU0lELiBXZSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgc3RhdGVzIGRvbid0IGNoYW5nZSB1bmV4cGVjdGVkbHkKICAqIHdoaWxlIHByb2Nlc3NpbmcgYW5vdGhlciBzdGF0ZS4KICAqCi0gKiBIRUlSQVJDSFkKKyAqIEhJRVJBUkNIWQogICoKLSAqIFRoZSBmb2xsb3dpbmcgaGVpcmFyY2h5IGRlZmluZXMgdGhlIGxvY2tpbmcgcnVsZXMuIEEgZ3JlYXRlciBsb2NrCisgKiBUaGUgZm9sbG93aW5nIGhpZXJhcmNoeSBkZWZpbmVzIHRoZSBsb2NraW5nIHJ1bGVzLiBBIGdyZWF0ZXIgbG9jawogICogbWF5IGJlIGhlbGQgYmVmb3JlIGFjcXVpcmluZyBhIGxlc3NlciBsb2NrLCBidXQgYSBsZXNzZXIgbG9jayBzaG91bGQgbmV2ZXIKLSAqIGJlIGhlbGQgd2hpbGUgYXR0ZW1wdGluZyB0byBhY3F1aXJlIGEgZ3JlYXRlciBsb2NrLiBIZXJlIGlzIHRoZSBoZWlyYXJjaHktCisgKiBiZSBoZWxkIHdoaWxlIGF0dGVtcHRpbmcgdG8gYWNxdWlyZSBhIGdyZWF0ZXIgbG9jay4gSGVyZSBpcyB0aGUgaGllcmFyY2h5LQogICoKICAqIGxwb3J0ID4gZGlzYywgbHBvcnQgPiBycG9ydCwgZGlzYyA+IHJwb3J0CiAgKgpAQCAtMzc1LDQxICszNzUsMzYgQEAKIAogLyoqCiAgKiBmY19scG9ydF9yZWN2X3JsaXJfcmVxKCkgLSBIYW5kbGUgcmVjZWl2ZWQgUmVnaXN0ZXJlZCBMaW5rIEluY2lkZW50IFJlcG9ydC4KLSAqIEBzcDoJICAgVGhlIHNlcXVlbmNlIGluIHRoZSBSTElSIGV4Y2hhbmdlCi0gKiBAZnA6CSAgIFRoZSBSTElSIHJlcXVlc3QgZnJhbWUKICAqIEBscG9ydDogRmlicmUgQ2hhbm5lbCBsb2NhbCBwb3J0IHJlY2lldmluZyB0aGUgUkxJUgorICogQGZwOgkgICBUaGUgUkxJUiByZXF1ZXN0IGZyYW1lCiAgKgogICogTG9ja2luZyBOb3RlOiBUaGUgbHBvcnQgbG9jayBpcyBleHBlY3RlZCB0byBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nCiAgKiB0aGlzIGZ1bmN0aW9uLgogICovCi1zdGF0aWMgdm9pZCBmY19scG9ydF9yZWN2X3JsaXJfcmVxKHN0cnVjdCBmY19zZXEgKnNwLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwLAotCQkJCSAgIHN0cnVjdCBmY19scG9ydCAqbHBvcnQpCitzdGF0aWMgdm9pZCBmY19scG9ydF9yZWN2X3JsaXJfcmVxKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsIHN0cnVjdCBmY19mcmFtZSAqZnApCiB7CiAJRkNfTFBPUlRfREJHKGxwb3J0LCAiUmVjZWl2ZWQgUkxJUiByZXF1ZXN0IHdoaWxlIGluIHN0YXRlICVzXG4iLAogCQkgICAgIGZjX2xwb3J0X3N0YXRlKGxwb3J0KSk7CiAKLQlscG9ydC0+dHQuc2VxX2Vsc19yc3Bfc2VuZChzcCwgRUxTX0xTX0FDQywgTlVMTCk7CisJbHBvcnQtPnR0LnNlcV9lbHNfcnNwX3NlbmQoZnAsIEVMU19MU19BQ0MsIE5VTEwpOwogCWZjX2ZyYW1lX2ZyZWUoZnApOwogfQogCiAvKioKICAqIGZjX2xwb3J0X3JlY3ZfZWNob19yZXEoKSAtIEhhbmRsZSByZWNlaXZlZCBFQ0hPIHJlcXVlc3QKLSAqIEBzcDoJICAgVGhlIHNlcXVlbmNlIGluIHRoZSBFQ0hPIGV4Y2hhbmdlCi0gKiBAZnA6CSAgIEVDSE8gcmVxdWVzdCBmcmFtZQogICogQGxwb3J0OiBUaGUgbG9jYWwgcG9ydCByZWNpZXZpbmcgdGhlIEVDSE8KKyAqIEBmcDoJICAgRUNITyByZXF1ZXN0IGZyYW1lCiAgKgogICogTG9ja2luZyBOb3RlOiBUaGUgbHBvcnQgbG9jayBpcyBleHBlY3RlZCB0byBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nCiAgKiB0aGlzIGZ1bmN0aW9uLgogICovCi1zdGF0aWMgdm9pZCBmY19scG9ydF9yZWN2X2VjaG9fcmVxKHN0cnVjdCBmY19zZXEgKnNwLCBzdHJ1Y3QgZmNfZnJhbWUgKmluX2ZwLAotCQkJCSAgIHN0cnVjdCBmY19scG9ydCAqbHBvcnQpCitzdGF0aWMgdm9pZCBmY19scG9ydF9yZWN2X2VjaG9fcmVxKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsCisJCQkJICAgc3RydWN0IGZjX2ZyYW1lICppbl9mcCkKIHsKIAlzdHJ1Y3QgZmNfZnJhbWUgKmZwOwotCXN0cnVjdCBmY19leGNoICplcCA9IGZjX3NlcV9leGNoKHNwKTsKIAl1bnNpZ25lZCBpbnQgbGVuOwogCXZvaWQgKnBwOwogCXZvaWQgKmRwOwotCXUzMiBmX2N0bDsKIAogCUZDX0xQT1JUX0RCRyhscG9ydCwgIlJlY2VpdmVkIEVDSE8gcmVxdWVzdCB3aGlsZSBpbiBzdGF0ZSAlc1xuIiwKIAkJICAgICBmY19scG9ydF9zdGF0ZShscG9ydCkpOwpAQCAtNDI1LDI5ICs0MjAsMjQgQEAKIAkJZHAgPSBmY19mcmFtZV9wYXlsb2FkX2dldChmcCwgbGVuKTsKIAkJbWVtY3B5KGRwLCBwcCwgbGVuKTsKIAkJKigoX19iZTMyICopZHApID0gaHRvbmwoRUxTX0xTX0FDQyA8PCAyNCk7Ci0JCXNwID0gbHBvcnQtPnR0LnNlcV9zdGFydF9uZXh0KHNwKTsKLQkJZl9jdGwgPSBGQ19GQ19FWF9DVFggfCBGQ19GQ19MQVNUX1NFUSB8IEZDX0ZDX0VORF9TRVE7Ci0JCWZjX2ZpbGxfZmNfaGRyKGZwLCBGQ19SQ1RMX0VMU19SRVAsIGVwLT5kaWQsIGVwLT5zaWQsCi0JCQkgICAgICAgRkNfVFlQRV9FTFMsIGZfY3RsLCAwKTsKLQkJbHBvcnQtPnR0LnNlcV9zZW5kKGxwb3J0LCBzcCwgZnApOworCQlmY19maWxsX3JlcGx5X2hkcihmcCwgaW5fZnAsIEZDX1JDVExfRUxTX1JFUCwgMCk7CisJCWxwb3J0LT50dC5mcmFtZV9zZW5kKGxwb3J0LCBmcCk7CiAJfQogCWZjX2ZyYW1lX2ZyZWUoaW5fZnApOwogfQogCiAvKioKICAqIGZjX2xwb3J0X3JlY3Zfcm5pZF9yZXEoKSAtIEhhbmRsZSByZWNlaXZlZCBSZXF1ZXN0IE5vZGUgSUQgZGF0YSByZXF1ZXN0Ci0gKiBAc3A6CSAgIFRoZSBzZXF1ZW5jZSBpbiB0aGUgUk5JRCBleGNoYW5nZQotICogQGZwOgkgICBUaGUgUk5JRCByZXF1ZXN0IGZyYW1lCiAgKiBAbHBvcnQ6IFRoZSBsb2NhbCBwb3J0IHJlY2lldmluZyB0aGUgUk5JRAorICogQGZwOgkgICBUaGUgUk5JRCByZXF1ZXN0IGZyYW1lCiAgKgogICogTG9ja2luZyBOb3RlOiBUaGUgbHBvcnQgbG9jayBpcyBleHBlY3RlZCB0byBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nCiAgKiB0aGlzIGZ1bmN0aW9uLgogICovCi1zdGF0aWMgdm9pZCBmY19scG9ydF9yZWN2X3JuaWRfcmVxKHN0cnVjdCBmY19zZXEgKnNwLCBzdHJ1Y3QgZmNfZnJhbWUgKmluX2ZwLAotCQkJCSAgIHN0cnVjdCBmY19scG9ydCAqbHBvcnQpCitzdGF0aWMgdm9pZCBmY19scG9ydF9yZWN2X3JuaWRfcmVxKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsCisJCQkJICAgc3RydWN0IGZjX2ZyYW1lICppbl9mcCkKIHsKIAlzdHJ1Y3QgZmNfZnJhbWUgKmZwOwotCXN0cnVjdCBmY19leGNoICplcCA9IGZjX3NlcV9leGNoKHNwKTsKIAlzdHJ1Y3QgZmNfZWxzX3JuaWQgKnJlcTsKIAlzdHJ1Y3QgewogCQlzdHJ1Y3QgZmNfZWxzX3JuaWRfcmVzcCBybmlkOwpAQCAtNDU3LDE3ICs0NDcsMTUgQEAKIAlzdHJ1Y3QgZmNfc2VxX2Vsc19kYXRhIHJqdF9kYXRhOwogCXU4IGZtdDsKIAlzaXplX3QgbGVuOwotCXUzMiBmX2N0bDsKIAogCUZDX0xQT1JUX0RCRyhscG9ydCwgIlJlY2VpdmVkIFJOSUQgcmVxdWVzdCB3aGlsZSBpbiBzdGF0ZSAlc1xuIiwKIAkJICAgICBmY19scG9ydF9zdGF0ZShscG9ydCkpOwogCiAJcmVxID0gZmNfZnJhbWVfcGF5bG9hZF9nZXQoaW5fZnAsIHNpemVvZigqcmVxKSk7CiAJaWYgKCFyZXEpIHsKLQkJcmp0X2RhdGEuZnAgPSBOVUxMOwogCQlyanRfZGF0YS5yZWFzb24gPSBFTFNfUkpUX0xPR0lDOwogCQlyanRfZGF0YS5leHBsYW4gPSBFTFNfRVhQTF9OT05FOwotCQlscG9ydC0+dHQuc2VxX2Vsc19yc3Bfc2VuZChzcCwgRUxTX0xTX1JKVCwgJnJqdF9kYXRhKTsKKwkJbHBvcnQtPnR0LnNlcV9lbHNfcnNwX3NlbmQoaW5fZnAsIEVMU19MU19SSlQsICZyanRfZGF0YSk7CiAJfSBlbHNlIHsKIAkJZm10ID0gcmVxLT5ybmlkX2ZtdDsKIAkJbGVuID0gc2l6ZW9mKCpycCk7CkBAIC00OTAsMTIgKzQ3OCw4IEBACiAJCQkJbWVtY3B5KCZycC0+Z2VuLCAmbHBvcnQtPnJuaWRfZ2VuLAogCQkJCSAgICAgICBzaXplb2YocnAtPmdlbikpOwogCQkJfQotCQkJc3AgPSBscG9ydC0+dHQuc2VxX3N0YXJ0X25leHQoc3ApOwotCQkJZl9jdGwgPSBGQ19GQ19FWF9DVFggfCBGQ19GQ19MQVNUX1NFUTsKLQkJCWZfY3RsIHw9IEZDX0ZDX0VORF9TRVEgfCBGQ19GQ19TRVFfSU5JVDsKLQkJCWZjX2ZpbGxfZmNfaGRyKGZwLCBGQ19SQ1RMX0VMU19SRVAsIGVwLT5kaWQsIGVwLT5zaWQsCi0JCQkJICAgICAgIEZDX1RZUEVfRUxTLCBmX2N0bCwgMCk7Ci0JCQlscG9ydC0+dHQuc2VxX3NlbmQobHBvcnQsIHNwLCBmcCk7CisJCQlmY19maWxsX3JlcGx5X2hkcihmcCwgaW5fZnAsIEZDX1JDVExfRUxTX1JFUCwgMCk7CisJCQlscG9ydC0+dHQuZnJhbWVfc2VuZChscG9ydCwgZnApOwogCQl9CiAJfQogCWZjX2ZyYW1lX2ZyZWUoaW5fZnApOwpAQCAtNTAzLDE3ICs0ODcsMTUgQEAKIAogLyoqCiAgKiBmY19scG9ydF9yZWN2X2xvZ29fcmVxKCkgLSBIYW5kbGUgcmVjZWl2ZWQgZmFicmljIExPR08gcmVxdWVzdAotICogQHNwOgkgICBUaGUgc2VxdWVuY2UgaW4gdGhlIExPR08gZXhjaGFuZ2UKLSAqIEBmcDoJICAgVGhlIExPR08gcmVxdWVzdCBmcmFtZQogICogQGxwb3J0OiBUaGUgbG9jYWwgcG9ydCByZWNpZXZpbmcgdGhlIExPR08KKyAqIEBmcDoJICAgVGhlIExPR08gcmVxdWVzdCBmcmFtZQogICoKICAqIExvY2tpbmcgTm90ZTogVGhlIGxwb3J0IGxvY2sgaXMgZXhlY3RlZCB0byBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nCiAgKiB0aGlzIGZ1bmN0aW9uLgogICovCi1zdGF0aWMgdm9pZCBmY19scG9ydF9yZWN2X2xvZ29fcmVxKHN0cnVjdCBmY19zZXEgKnNwLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwLAotCQkJCSAgIHN0cnVjdCBmY19scG9ydCAqbHBvcnQpCitzdGF0aWMgdm9pZCBmY19scG9ydF9yZWN2X2xvZ29fcmVxKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsIHN0cnVjdCBmY19mcmFtZSAqZnApCiB7Ci0JbHBvcnQtPnR0LnNlcV9lbHNfcnNwX3NlbmQoc3AsIEVMU19MU19BQ0MsIE5VTEwpOworCWxwb3J0LT50dC5zZXFfZWxzX3JzcF9zZW5kKGZwLCBFTFNfTFNfQUNDLCBOVUxMKTsKIAlmY19scG9ydF9lbnRlcl9yZXNldChscG9ydCk7CiAJZmNfZnJhbWVfZnJlZShmcCk7CiB9CkBAIC03NTUsMTAgKzczNywzNyBAQAogfQogCiAvKioKKyAqIGZjX2xwb3J0X3NldF9wb3J0X2lkKCkgLSBzZXQgdGhlIGxvY2FsIHBvcnQgUG9ydCBJRCBmb3IgcG9pbnQtdG8tbXVsdGlwb2ludAorICogQGxwb3J0OiBUaGUgbG9jYWwgcG9ydCB3aGljaCB3aWxsIGhhdmUgaXRzIFBvcnQgSUQgc2V0LgorICogQHBvcnRfaWQ6IFRoZSBuZXcgcG9ydCBJRC4KKyAqCisgKiBDYWxsZWQgYnkgdGhlIGxvd2VyLWxldmVsIGRyaXZlciB3aGVuIHRyYW5zcG9ydCBzZXRzIHRoZSBsb2NhbCBwb3J0X2lkLgorICogVGhpcyBpcyB1c2VkIGluIFZOX3BvcnQgdG8gVk5fcG9ydCBtb2RlIGZvciBGQ29FLCBhbmQgY2F1c2VzIEZMT0dJIGFuZAorICogZGlzY292ZXJ5IHRvIGJlIHNraXBwZWQuCisgKi8KK3ZvaWQgZmNfbHBvcnRfc2V0X2xvY2FsX2lkKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsIHUzMiBwb3J0X2lkKQoreworCW11dGV4X2xvY2soJmxwb3J0LT5scF9tdXRleCk7CisKKwlmY19scG9ydF9zZXRfcG9ydF9pZChscG9ydCwgcG9ydF9pZCwgTlVMTCk7CisKKwlzd2l0Y2ggKGxwb3J0LT5zdGF0ZSkgeworCWNhc2UgTFBPUlRfU1RfUkVTRVQ6CisJY2FzZSBMUE9SVF9TVF9GTE9HSToKKwkJaWYgKHBvcnRfaWQpCisJCQlmY19scG9ydF9lbnRlcl9yZWFkeShscG9ydCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwltdXRleF91bmxvY2soJmxwb3J0LT5scF9tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MKGZjX2xwb3J0X3NldF9sb2NhbF9pZCk7CisKKy8qKgogICogZmNfbHBvcnRfcmVjdl9mbG9naV9yZXEoKSAtIFJlY2VpdmUgYSBGTE9HSSByZXF1ZXN0Ci0gKiBAc3BfaW46IFRoZSBzZXF1ZW5jZSB0aGUgRkxPR0kgaXMgb24KLSAqIEByeF9mcDogVGhlIEZMT0dJIGZyYW1lCiAgKiBAbHBvcnQ6IFRoZSBsb2NhbCBwb3J0IHRoYXQgcmVjaWV2ZWQgdGhlIHJlcXVlc3QKKyAqIEByeF9mcDogVGhlIEZMT0dJIGZyYW1lCiAgKgogICogQSByZWNlaXZlZCBGTE9HSSByZXF1ZXN0IGluZGljYXRlcyBhIHBvaW50LXRvLXBvaW50IGNvbm5lY3Rpb24uCiAgKiBBY2NlcHQgaXQgd2l0aCB0aGUgY29tbW9uIHNlcnZpY2UgcGFyYW1ldGVycyBpbmRpY2F0aW5nIG91ciBOIHBvcnQuCkBAIC03NjcsMjYgKzc3NiwyMSBAQAogICogTG9ja2luZyBOb3RlOiBUaGUgbHBvcnQgbG9jayBpcyBleHBlY3RlZCB0byBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nCiAgKiB0aGlzIGZ1bmN0aW9uLgogICovCi1zdGF0aWMgdm9pZCBmY19scG9ydF9yZWN2X2Zsb2dpX3JlcShzdHJ1Y3QgZmNfc2VxICpzcF9pbiwKLQkJCQkgICAgc3RydWN0IGZjX2ZyYW1lICpyeF9mcCwKLQkJCQkgICAgc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKK3N0YXRpYyB2b2lkIGZjX2xwb3J0X3JlY3ZfZmxvZ2lfcmVxKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsCisJCQkJICAgIHN0cnVjdCBmY19mcmFtZSAqcnhfZnApCiB7CiAJc3RydWN0IGZjX2ZyYW1lICpmcDsKIAlzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmaDsKLQlzdHJ1Y3QgZmNfc2VxICpzcDsKLQlzdHJ1Y3QgZmNfZXhjaCAqZXA7CiAJc3RydWN0IGZjX2Vsc19mbG9naSAqZmxwOwogCXN0cnVjdCBmY19lbHNfZmxvZ2kgKm5ld19mbHA7CiAJdTY0IHJlbW90ZV93d3BuOwogCXUzMiByZW1vdGVfZmlkOwogCXUzMiBsb2NhbF9maWQ7Ci0JdTMyIGZfY3RsOwogCiAJRkNfTFBPUlRfREJHKGxwb3J0LCAiUmVjZWl2ZWQgRkxPR0kgcmVxdWVzdCB3aGlsZSBpbiBzdGF0ZSAlc1xuIiwKIAkJICAgICBmY19scG9ydF9zdGF0ZShscG9ydCkpOwogCi0JZmggPSBmY19mcmFtZV9oZWFkZXJfZ2V0KHJ4X2ZwKTsKLQlyZW1vdGVfZmlkID0gbnRvaDI0KGZoLT5maF9zX2lkKTsKKwlyZW1vdGVfZmlkID0gZmNfZnJhbWVfc2lkKHJ4X2ZwKTsKIAlmbHAgPSBmY19mcmFtZV9wYXlsb2FkX2dldChyeF9mcCwgc2l6ZW9mKCpmbHApKTsKIAlpZiAoIWZscCkKIAkJZ290byBvdXQ7CkBAIC04MTcsNyArODIxLDYgQEAKIAogCWZwID0gZmNfZnJhbWVfYWxsb2MobHBvcnQsIHNpemVvZigqZmxwKSk7CiAJaWYgKGZwKSB7Ci0JCXNwID0gbHBvcnQtPnR0LnNlcV9zdGFydF9uZXh0KGZyX3NlcShyeF9mcCkpOwogCQluZXdfZmxwID0gZmNfZnJhbWVfcGF5bG9hZF9nZXQoZnAsIHNpemVvZigqZmxwKSk7CiAJCWZjX2xwb3J0X2Zsb2dpX2ZpbGwobHBvcnQsIG5ld19mbHAsIEVMU19GTE9HSSk7CiAJCW5ld19mbHAtPmZsX2NtZCA9ICh1OCkgRUxTX0xTX0FDQzsKQEAgLTgyNiwyNyArODI5LDI0IEBACiAJCSAqIFNlbmQgdGhlIHJlc3BvbnNlLiAgSWYgdGhpcyBmYWlscywgdGhlIG9yaWdpbmF0b3Igc2hvdWxkCiAJCSAqIHJlcGVhdCB0aGUgc2VxdWVuY2UuCiAJCSAqLwotCQlmX2N0bCA9IEZDX0ZDX0VYX0NUWCB8IEZDX0ZDX0xBU1RfU0VRIHwgRkNfRkNfRU5EX1NFUTsKLQkJZXAgPSBmY19zZXFfZXhjaChzcCk7Ci0JCWZjX2ZpbGxfZmNfaGRyKGZwLCBGQ19SQ1RMX0VMU19SRVAsIHJlbW90ZV9maWQsIGxvY2FsX2ZpZCwKLQkJCSAgICAgICBGQ19UWVBFX0VMUywgZl9jdGwsIDApOwotCQlscG9ydC0+dHQuc2VxX3NlbmQobHBvcnQsIHNwLCBmcCk7CisJCWZjX2ZpbGxfcmVwbHlfaGRyKGZwLCByeF9mcCwgRkNfUkNUTF9FTFNfUkVQLCAwKTsKKwkJZmggPSBmY19mcmFtZV9oZWFkZXJfZ2V0KGZwKTsKKwkJaHRvbjI0KGZoLT5maF9zX2lkLCBsb2NhbF9maWQpOworCQlodG9uMjQoZmgtPmZoX2RfaWQsIHJlbW90ZV9maWQpOworCQlscG9ydC0+dHQuZnJhbWVfc2VuZChscG9ydCwgZnApOwogCiAJfSBlbHNlIHsKIAkJZmNfbHBvcnRfZXJyb3IobHBvcnQsIGZwKTsKIAl9CiAJZmNfbHBvcnRfcHRwX3NldHVwKGxwb3J0LCByZW1vdGVfZmlkLCByZW1vdGVfd3dwbiwKIAkJCSAgIGdldF91bmFsaWduZWRfYmU2NCgmZmxwLT5mbF93d25uKSk7Ci0KIG91dDoKLQlzcCA9IGZyX3NlcShyeF9mcCk7CiAJZmNfZnJhbWVfZnJlZShyeF9mcCk7CiB9CiAKIC8qKgogICogZmNfbHBvcnRfcmVjdl9yZXEoKSAtIFRoZSBnZW5lcmljIGxwb3J0IHJlcXVlc3QgaGFuZGxlcgogICogQGxwb3J0OiBUaGUgbG9jYWwgcG9ydCB0aGF0IHJlY2VpdmVkIHRoZSByZXF1ZXN0Ci0gKiBAc3A6CSAgIFRoZSBzZXF1ZW5jZSB0aGUgcmVxdWVzdCBpcyBvbgogICogQGZwOgkgICBUaGUgcmVxdWVzdCBmcmFtZQogICoKICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzZWUgaWYgdGhlIGxwb3J0IGhhbmRsZXMgdGhlIHJlcXVlc3Qgb3IKQEAgLTg1NSwxMSArODU1LDEwIEBACiAgKiBMb2NraW5nIE5vdGU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2l0aCB0aGUgbHBvcnQKICAqCQkgbG9jayBoZWxkIGJlY3Vhc2UgaXQgd2lsbCBncmFiIHRoZSBsb2NrLgogICovCi1zdGF0aWMgdm9pZCBmY19scG9ydF9yZWN2X3JlcShzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LCBzdHJ1Y3QgZmNfc2VxICpzcCwKLQkJCSAgICAgIHN0cnVjdCBmY19mcmFtZSAqZnApCitzdGF0aWMgdm9pZCBmY19scG9ydF9yZWN2X3JlcShzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LCBzdHJ1Y3QgZmNfZnJhbWUgKmZwKQogewogCXN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKmZoID0gZmNfZnJhbWVfaGVhZGVyX2dldChmcCk7Ci0Jdm9pZCAoKnJlY3YpIChzdHJ1Y3QgZmNfc2VxICosIHN0cnVjdCBmY19mcmFtZSAqLCBzdHJ1Y3QgZmNfbHBvcnQgKik7CisJdm9pZCAoKnJlY3YpKHN0cnVjdCBmY19scG9ydCAqLCBzdHJ1Y3QgZmNfZnJhbWUgKik7CiAKIAltdXRleF9sb2NrKCZscG9ydC0+bHBfbXV0ZXgpOwogCkBAIC04NzgsMTEgKzg3NywxMSBAQAogCQlyZWN2ID0gbHBvcnQtPnR0LnJwb3J0X3JlY3ZfcmVxOwogCQlzd2l0Y2ggKGZjX2ZyYW1lX3BheWxvYWRfb3AoZnApKSB7CiAJCWNhc2UgRUxTX0ZMT0dJOgotCQkJcmVjdiA9IGZjX2xwb3J0X3JlY3ZfZmxvZ2lfcmVxOworCQkJaWYgKCFscG9ydC0+cG9pbnRfdG9fbXVsdGlwb2ludCkKKwkJCQlyZWN2ID0gZmNfbHBvcnRfcmVjdl9mbG9naV9yZXE7CiAJCQlicmVhazsKIAkJY2FzZSBFTFNfTE9HTzoKLQkJCWZoID0gZmNfZnJhbWVfaGVhZGVyX2dldChmcCk7Ci0JCQlpZiAobnRvaDI0KGZoLT5maF9zX2lkKSA9PSBGQ19GSURfRkxPR0kpCisJCQlpZiAoZmNfZnJhbWVfc2lkKGZwKSA9PSBGQ19GSURfRkxPR0kpCiAJCQkJcmVjdiA9IGZjX2xwb3J0X3JlY3ZfbG9nb19yZXE7CiAJCQlicmVhazsKIAkJY2FzZSBFTFNfUlNDTjoKQEAgLTg5OSwxOSArODk4LDEzIEBACiAJCQlicmVhazsKIAkJfQogCi0JCXJlY3Yoc3AsIGZwLCBscG9ydCk7CisJCXJlY3YobHBvcnQsIGZwKTsKIAl9IGVsc2UgewogCQlGQ19MUE9SVF9EQkcobHBvcnQsICJkcm9wcGluZyBpbnZhbGlkIGZyYW1lIChlb2YgJXgpXG4iLAogCQkJICAgICBmcl9lb2YoZnApKTsKIAkJZmNfZnJhbWVfZnJlZShmcCk7CiAJfQogCW11dGV4X3VubG9jaygmbHBvcnQtPmxwX211dGV4KTsKLQotCS8qCi0JICogIFRoZSBjb21tb24gZXhjaF9kb25lIGZvciBhbGwgcmVxdWVzdCBtYXkgbm90IGJlIGdvb2QKLQkgKiAgaWYgYW55IHJlcXVlc3QgcmVxdWlyZXMgbG9uZ2VyIGhvbGQgb24gZXhoYW5nZS4gWFhYCi0JICovCi0JbHBvcnQtPnR0LmV4Y2hfZG9uZShzcCk7CiB9CiAKIC8qKgpAQCAtOTU0LDcgKzk0Nyw3IEBACiAJbHBvcnQtPnR0LmV4Y2hfbWdyX3Jlc2V0KGxwb3J0LCAwLCAwKTsKIAlmY19ob3N0X2ZhYnJpY19uYW1lKGxwb3J0LT5ob3N0KSA9IDA7CiAKLQlpZiAobHBvcnQtPnBvcnRfaWQpCisJaWYgKGxwb3J0LT5wb3J0X2lkICYmICghbHBvcnQtPnBvaW50X3RvX211bHRpcG9pbnQgfHwgIWxwb3J0LT5saW5rX3VwKSkKIAkJZmNfbHBvcnRfc2V0X3BvcnRfaWQobHBvcnQsIDAsIE5VTEwpOwogfQogCkBAIC0xMDE5LDM4ICsxMDEyLDI0IEBACiAJCSAgICAgUFRSX0VSUihmcCksIGZjX2xwb3J0X3N0YXRlKGxwb3J0KSwKIAkJICAgICBscG9ydC0+cmV0cnlfY291bnQpOwogCi0JaWYgKCFmcCB8fCBQVFJfRVJSKGZwKSA9PSAtRkNfRVhfVElNRU9VVCkgewotCQkvKgotCQkgKiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLCBvciB0aGUgZXhjaGFuZ2UgdGltZWQgb3V0LgotCQkgKiAgUmV0cnkgYWZ0ZXIgZGVsYXkKLQkJICovCi0JCWlmIChscG9ydC0+cmV0cnlfY291bnQgPCBscG9ydC0+bWF4X3JldHJ5X2NvdW50KSB7Ci0JCQlscG9ydC0+cmV0cnlfY291bnQrKzsKLQkJCWlmICghZnApCi0JCQkJZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDUwMCk7Ci0JCQllbHNlCi0JCQkJZGVsYXkgPQltc2Vjc190b19qaWZmaWVzKGxwb3J0LT5lX2RfdG92KTsKKwlpZiAoUFRSX0VSUihmcCkgPT0gLUZDX0VYX0NMT1NFRCkKKwkJcmV0dXJuOwogCi0JCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmxwb3J0LT5yZXRyeV93b3JrLCBkZWxheSk7Ci0JCX0gZWxzZSB7Ci0JCQlzd2l0Y2ggKGxwb3J0LT5zdGF0ZSkgewotCQkJY2FzZSBMUE9SVF9TVF9ESVNBQkxFRDoKLQkJCWNhc2UgTFBPUlRfU1RfUkVBRFk6Ci0JCQljYXNlIExQT1JUX1NUX1JFU0VUOgotCQkJY2FzZSBMUE9SVF9TVF9STk5fSUQ6Ci0JCQljYXNlIExQT1JUX1NUX1JTTk5fTk46Ci0JCQljYXNlIExQT1JUX1NUX1JTUE5fSUQ6Ci0JCQljYXNlIExQT1JUX1NUX1JGVF9JRDoKLQkJCWNhc2UgTFBPUlRfU1RfUkZGX0lEOgotCQkJY2FzZSBMUE9SVF9TVF9TQ1I6Ci0JCQljYXNlIExQT1JUX1NUX0ROUzoKLQkJCWNhc2UgTFBPUlRfU1RfRkxPR0k6Ci0JCQljYXNlIExQT1JUX1NUX0xPR086Ci0JCQkJZmNfbHBvcnRfZW50ZXJfcmVzZXQobHBvcnQpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQorCS8qCisJICogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSwgb3IgdGhlIGV4Y2hhbmdlIHRpbWVkIG91dAorCSAqIG9yIHdlIHJlY2VpdmVkIExTX1JKVC4KKwkgKiBSZXRyeSBhZnRlciBkZWxheQorCSAqLworCWlmIChscG9ydC0+cmV0cnlfY291bnQgPCBscG9ydC0+bWF4X3JldHJ5X2NvdW50KSB7CisJCWxwb3J0LT5yZXRyeV9jb3VudCsrOworCQlpZiAoIWZwKQorCQkJZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDUwMCk7CisJCWVsc2UKKwkJCWRlbGF5ID0JbXNlY3NfdG9famlmZmllcyhscG9ydC0+ZV9kX3Rvdik7CisKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZscG9ydC0+cmV0cnlfd29yaywgZGVsYXkpOworCX0gZWxzZQorCQlmY19scG9ydF9lbnRlcl9yZXNldChscG9ydCk7CiB9CiAKIC8qKgpAQCAtMTQ0MCw3ICsxNDE5LDYgQEAKIAkJCSB2b2lkICpscF9hcmcpCiB7CiAJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IGxwX2FyZzsKLQlzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmaDsKIAlzdHJ1Y3QgZmNfZWxzX2Zsb2dpICpmbHA7CiAJdTMyIGRpZDsKIAl1MTYgY3NwX2ZsYWdzOwpAQCAtMTQ2OCw5ICsxNDQ2LDE0IEBACiAJCWdvdG8gZXJyOwogCX0KIAotCWZoID0gZmNfZnJhbWVfaGVhZGVyX2dldChmcCk7Ci0JZGlkID0gbnRvaDI0KGZoLT5maF9kX2lkKTsKLQlpZiAoZmNfZnJhbWVfcGF5bG9hZF9vcChmcCkgPT0gRUxTX0xTX0FDQyAmJiBkaWQgIT0gMCkgeworCWRpZCA9IGZjX2ZyYW1lX2RpZChmcCk7CisKKwlpZiAoIWRpZCkgeworCQlGQ19MUE9SVF9EQkcobHBvcnQsICJCYWQgRkxPR0kgcmVzcG9uc2VcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZmNfZnJhbWVfcGF5bG9hZF9vcChmcCkgPT0gRUxTX0xTX0FDQykgewogCQlmbHAgPSBmY19mcmFtZV9wYXlsb2FkX2dldChmcCwgc2l6ZW9mKCpmbHApKTsKIAkJaWYgKGZscCkgewogCQkJbWZzID0gbnRvaHMoZmxwLT5mbF9jc3Auc3BfYmJfZGF0YSkgJgpAQCAtMTQ5NSw3ICsxNDc4LDcgQEAKIAkJCQkgICAgICAgIlBvcnQgKCU2LjZ4KSBlbnRlcmVkICIKIAkJCQkgICAgICAgInBvaW50LXRvLXBvaW50IG1vZGVcbiIsCiAJCQkJICAgICAgIGxwb3J0LT5ob3N0LT5ob3N0X25vLCBkaWQpOwotCQkJCWZjX2xwb3J0X3B0cF9zZXR1cChscG9ydCwgbnRvaDI0KGZoLT5maF9zX2lkKSwKKwkJCQlmY19scG9ydF9wdHBfc2V0dXAobHBvcnQsIGZjX2ZyYW1lX3NpZChmcCksCiAJCQkJCQkgICBnZXRfdW5hbGlnbmVkX2JlNjQoCiAJCQkJCQkJICAgJmZscC0+Zmxfd3dwbiksCiAJCQkJCQkgICBnZXRfdW5hbGlnbmVkX2JlNjQoCkBAIC0xNTA5LDkgKzE0OTIsOCBAQAogCQkJCWZjX2xwb3J0X2VudGVyX2RucyhscG9ydCk7CiAJCQl9CiAJCX0KLQl9IGVsc2UgewotCQlGQ19MUE9SVF9EQkcobHBvcnQsICJCYWQgRkxPR0kgcmVzcG9uc2VcbiIpOwotCX0KKwl9IGVsc2UKKwkJZmNfbHBvcnRfZXJyb3IobHBvcnQsIGZwKTsKIAogb3V0OgogCWZjX2ZyYW1lX2ZyZWUoZnApOwpAQCAtMTUzNiw2ICsxNTE4LDEyIEBACiAKIAlmY19scG9ydF9zdGF0ZV9lbnRlcihscG9ydCwgTFBPUlRfU1RfRkxPR0kpOwogCisJaWYgKGxwb3J0LT5wb2ludF90b19tdWx0aXBvaW50KSB7CisJCWlmIChscG9ydC0+cG9ydF9pZCkKKwkJCWZjX2xwb3J0X2VudGVyX3JlYWR5KGxwb3J0KTsKKwkJcmV0dXJuOworCX0KKwogCWZwID0gZmNfZnJhbWVfYWxsb2MobHBvcnQsIHNpemVvZihzdHJ1Y3QgZmNfZWxzX2Zsb2dpKSk7CiAJaWYgKCFmcCkKIAkJcmV0dXJuIGZjX2xwb3J0X2Vycm9yKGxwb3J0LCBmcCk7CkBAIC0xNzAxLDggKzE2ODksNyBAQAogCWh0b24yNChmaC0+ZmhfZF9pZCwgZGlkKTsKIAlodG9uMjQoZmgtPmZoX3NfaWQsIGxwb3J0LT5wb3J0X2lkKTsKIAlmaC0+ZmhfdHlwZSA9IEZDX1RZUEVfRUxTOwotCWh0b24yNChmaC0+ZmhfZl9jdGwsIEZDX0ZDX0ZJUlNUX1NFUSB8Ci0JICAgICAgIEZDX0ZDX0VORF9TRVEgfCBGQ19GQ19TRVFfSU5JVCk7CisJaHRvbjI0KGZoLT5maF9mX2N0bCwgRkNfRkNUTF9SRVEpOwogCWZoLT5maF9jc19jdGwgPSAwOwogCWZoLT5maF9kZl9jdGwgPSAwOwogCWZoLT5maF9wYXJtX29mZnNldCA9IDA7CkBAIC0xNzYxLDggKzE3NDgsNyBAQAogCWh0b24yNChmaC0+ZmhfZF9pZCwgZGlkKTsKIAlodG9uMjQoZmgtPmZoX3NfaWQsIGxwb3J0LT5wb3J0X2lkKTsKIAlmaC0+ZmhfdHlwZSA9IEZDX1RZUEVfQ1Q7Ci0JaHRvbjI0KGZoLT5maF9mX2N0bCwgRkNfRkNfRklSU1RfU0VRIHwKLQkgICAgICAgRkNfRkNfRU5EX1NFUSB8IEZDX0ZDX1NFUV9JTklUKTsKKwlodG9uMjQoZmgtPmZoX2ZfY3RsLCBGQ19GQ1RMX1JFUSk7CiAJZmgtPmZoX2NzX2N0bCA9IDA7CiAJZmgtPmZoX2RmX2N0bCA9IDA7CiAJZmgtPmZoX3Bhcm1fb2Zmc2V0ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19ycG9ydC5jIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX3Jwb3J0LmMKaW5kZXggMzllNDQwZi4uYjlmMjI4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX3Jwb3J0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX3Jwb3J0LmMKQEAgLTM0LDcgKzM0LDcgQEAKICAqIFRoZSBycG9ydCBzaG91bGQgbmV2ZXIgaG9sZCB0aGUgcnBvcnQgbXV0ZXggYW5kIHRoZW4gYXR0ZW1wdCB0byBhY3F1aXJlCiAgKiBlaXRoZXIgdGhlIGxwb3J0IG9yIGRpc2MgbXV0ZXhlcy4gVGhlIHJwb3J0J3MgbXV0ZXggaXMgY29uc2lkZXJlZCBsZXNzZXIKICAqIHRoYW4gYm90aCB0aGUgbHBvcnQncyBtdXRleCBhbmQgdGhlIGRpc2MgbXV0ZXguIFJlZmVyIHRvIGZjX2xwb3J0LmMgZm9yCi0gKiBtb3JlIGNvbW1lbnRzIG9uIHRoZSBoZWlyYXJjaHkuCisgKiBtb3JlIGNvbW1lbnRzIG9uIHRoZSBoaWVyYXJjaHkuCiAgKgogICogVGhlIGxvY2tpbmcgc3RyYXRlZ3kgaXMgc2ltaWxhciB0byB0aGUgbHBvcnQncyBzdHJhdGVneS4gVGhlIGxvY2sgcHJvdGVjdHMKICAqIHRoZSBycG9ydCdzIHN0YXRlcyBhbmQgaXMgaGVsZCBhbmQgcmVsZWFzZWQgYnkgdGhlIGVudHJ5IHBvaW50cyB0byB0aGUgcnBvcnQKQEAgLTYwLDYgKzYwLDcgQEAKIAogc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJwb3J0X2V2ZW50X3F1ZXVlOwogCitzdGF0aWMgdm9pZCBmY19ycG9ydF9lbnRlcl9mbG9naShzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqKTsKIHN0YXRpYyB2b2lkIGZjX3Jwb3J0X2VudGVyX3Bsb2dpKHN0cnVjdCBmY19ycG9ydF9wcml2ICopOwogc3RhdGljIHZvaWQgZmNfcnBvcnRfZW50ZXJfcHJsaShzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqKTsKIHN0YXRpYyB2b2lkIGZjX3Jwb3J0X2VudGVyX3J0dihzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqKTsKQEAgLTY3LDE0ICs2OCwxMCBAQAogc3RhdGljIHZvaWQgZmNfcnBvcnRfZW50ZXJfbG9nbyhzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqKTsKIHN0YXRpYyB2b2lkIGZjX3Jwb3J0X2VudGVyX2FkaXNjKHN0cnVjdCBmY19ycG9ydF9wcml2ICopOwogCi1zdGF0aWMgdm9pZCBmY19ycG9ydF9yZWN2X3Bsb2dpX3JlcShzdHJ1Y3QgZmNfbHBvcnQgKiwKLQkJCQkgICAgc3RydWN0IGZjX3NlcSAqLCBzdHJ1Y3QgZmNfZnJhbWUgKik7Ci1zdGF0aWMgdm9pZCBmY19ycG9ydF9yZWN2X3BybGlfcmVxKHN0cnVjdCBmY19ycG9ydF9wcml2ICosCi0JCQkJICAgc3RydWN0IGZjX3NlcSAqLCBzdHJ1Y3QgZmNfZnJhbWUgKik7Ci1zdGF0aWMgdm9pZCBmY19ycG9ydF9yZWN2X3BybG9fcmVxKHN0cnVjdCBmY19ycG9ydF9wcml2ICosCi0JCQkJICAgc3RydWN0IGZjX3NlcSAqLCBzdHJ1Y3QgZmNfZnJhbWUgKik7Ci1zdGF0aWMgdm9pZCBmY19ycG9ydF9yZWN2X2xvZ29fcmVxKHN0cnVjdCBmY19scG9ydCAqLAotCQkJCSAgIHN0cnVjdCBmY19zZXEgKiwgc3RydWN0IGZjX2ZyYW1lICopOworc3RhdGljIHZvaWQgZmNfcnBvcnRfcmVjdl9wbG9naV9yZXEoc3RydWN0IGZjX2xwb3J0ICosIHN0cnVjdCBmY19mcmFtZSAqKTsKK3N0YXRpYyB2b2lkIGZjX3Jwb3J0X3JlY3ZfcHJsaV9yZXEoc3RydWN0IGZjX3Jwb3J0X3ByaXYgKiwgc3RydWN0IGZjX2ZyYW1lICopOworc3RhdGljIHZvaWQgZmNfcnBvcnRfcmVjdl9wcmxvX3JlcShzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqLCBzdHJ1Y3QgZmNfZnJhbWUgKik7CitzdGF0aWMgdm9pZCBmY19ycG9ydF9yZWN2X2xvZ29fcmVxKHN0cnVjdCBmY19scG9ydCAqLCBzdHJ1Y3QgZmNfZnJhbWUgKik7CiBzdGF0aWMgdm9pZCBmY19ycG9ydF90aW1lb3V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKIHN0YXRpYyB2b2lkIGZjX3Jwb3J0X2Vycm9yKHN0cnVjdCBmY19ycG9ydF9wcml2ICosIHN0cnVjdCBmY19mcmFtZSAqKTsKIHN0YXRpYyB2b2lkIGZjX3Jwb3J0X2Vycm9yX3JldHJ5KHN0cnVjdCBmY19ycG9ydF9wcml2ICosIHN0cnVjdCBmY19mcmFtZSAqKTsKQEAgLTgyLDI3ICs3OSwyOSBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqZmNfcnBvcnRfc3RhdGVfbmFtZXNbXSA9IHsKIAlbUlBPUlRfU1RfSU5JVF0gPSAiSW5pdCIsCisJW1JQT1JUX1NUX0ZMT0dJXSA9ICJGTE9HSSIsCisJW1JQT1JUX1NUX1BMT0dJX1dBSVRdID0gIlBMT0dJX1dBSVQiLAogCVtSUE9SVF9TVF9QTE9HSV0gPSAiUExPR0kiLAogCVtSUE9SVF9TVF9QUkxJXSA9ICJQUkxJIiwKIAlbUlBPUlRfU1RfUlRWXSA9ICJSVFYiLAogCVtSUE9SVF9TVF9SRUFEWV0gPSAiUmVhZHkiLAotCVtSUE9SVF9TVF9MT0dPXSA9ICJMT0dPIiwKIAlbUlBPUlRfU1RfQURJU0NdID0gIkFESVNDIiwKIAlbUlBPUlRfU1RfREVMRVRFXSA9ICJEZWxldGUiLAotCVtSUE9SVF9TVF9SRVNUQVJUXSA9ICJSZXN0YXJ0IiwKIH07CiAKIC8qKgogICogZmNfcnBvcnRfbG9va3VwKCkgLSBMb29rdXAgYSByZW1vdGUgcG9ydCBieSBwb3J0X2lkCiAgKiBAbHBvcnQ6ICAgVGhlIGxvY2FsIHBvcnQgdG8gbG9va3VwIHRoZSByZW1vdGUgcG9ydCBvbgogICogQHBvcnRfaWQ6IFRoZSByZW1vdGUgcG9ydCBJRCB0byBsb29rIHVwCisgKgorICogVGhlIGNhbGxlciBtdXN0IGhvbGQgZWl0aGVyIGRpc2NfbXV0ZXggb3IgcmN1X3JlYWRfbG9jaygpLgogICovCiBzdGF0aWMgc3RydWN0IGZjX3Jwb3J0X3ByaXYgKmZjX3Jwb3J0X2xvb2t1cChjb25zdCBzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LAogCQkJCQkgICAgIHUzMiBwb3J0X2lkKQogewogCXN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkocmRhdGEsICZscG9ydC0+ZGlzYy5ycG9ydHMsIHBlZXJzKQorCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkYXRhLCAmbHBvcnQtPmRpc2MucnBvcnRzLCBwZWVycykKIAkJaWYgKHJkYXRhLT5pZHMucG9ydF9pZCA9PSBwb3J0X2lkKQogCQkJcmV0dXJuIHJkYXRhOwogCXJldHVybiBOVUxMOwpAQCAtMTI2LDcgKzEyNSw3IEBACiAJaWYgKHJkYXRhKQogCQlyZXR1cm4gcmRhdGE7CiAKLQlyZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpyZGF0YSksIEdGUF9LRVJORUwpOworCXJkYXRhID0ga3phbGxvYyhzaXplb2YoKnJkYXRhKSArIGxwb3J0LT5ycG9ydF9wcml2X3NpemUsIEdGUF9LRVJORUwpOwogCWlmICghcmRhdGEpCiAJCXJldHVybiBOVUxMOwogCkBAIC0xNDcsMTEgKzE0NiwyMyBAQAogCUlOSVRfREVMQVlFRF9XT1JLKCZyZGF0YS0+cmV0cnlfd29yaywgZmNfcnBvcnRfdGltZW91dCk7CiAJSU5JVF9XT1JLKCZyZGF0YS0+ZXZlbnRfd29yaywgZmNfcnBvcnRfd29yayk7CiAJaWYgKHBvcnRfaWQgIT0gRkNfRklEX0RJUl9TRVJWKQotCQlsaXN0X2FkZCgmcmRhdGEtPnBlZXJzLCAmbHBvcnQtPmRpc2MucnBvcnRzKTsKKwkJbGlzdF9hZGRfcmN1KCZyZGF0YS0+cGVlcnMsICZscG9ydC0+ZGlzYy5ycG9ydHMpOwogCXJldHVybiByZGF0YTsKIH0KIAogLyoqCisgKiBmY19ycG9ydF9mcmVlX3JjdSgpIC0gRnJlZSBhIHJlbW90ZSBwb3J0CisgKiBAcmN1OiBUaGUgcmN1X2hlYWQgc3RydWN0dXJlIGluc2lkZSB0aGUgcmVtb3RlIHBvcnQKKyAqLworc3RhdGljIHZvaWQgZmNfcnBvcnRfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpCit7CisJc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhOworCisJcmRhdGEgPSBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgZmNfcnBvcnRfcHJpdiwgcmN1KTsKKwlrZnJlZShyZGF0YSk7Cit9CisKKy8qKgogICogZmNfcnBvcnRfZGVzdHJveSgpIC0gRnJlZSBhIHJlbW90ZSBwb3J0IGFmdGVyIGxhc3QgcmVmZXJlbmNlIGlzIHJlbGVhc2VkCiAgKiBAa3JlZjogVGhlIHJlbW90ZSBwb3J0J3Mga3JlZgogICovCkBAIC0xNjAsNyArMTcxLDcgQEAKIAlzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGE7CiAKIAlyZGF0YSA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZmNfcnBvcnRfcHJpdiwga3JlZik7Ci0Ja2ZyZWUocmRhdGEpOworCWNhbGxfcmN1KCZyZGF0YS0+cmN1LCBmY19ycG9ydF9mcmVlX3JjdSk7CiB9CiAKIC8qKgpAQCAtMTk0LDcgKzIwNSw3IEBACiAvKioKICAqIGZjX3Bsb2dpX2dldF9tYXhmcmFtZSgpIC0gR2V0IHRoZSBtYXhpbXVtIHBheWxvYWQgZnJvbSB0aGUgY29tbW9uIHNlcnZpY2UKICAqCQkJICAgICBwYXJhbWV0ZXJzIGluIGEgRkxPR0kgZnJhbWUKLSAqIEBmbHA6ICAgIFRoZSBGTE9HSSBwYXlsb2FkCisgKiBAZmxwOiAgICBUaGUgRkxPR0kgb3IgUExPR0kgcGF5bG9hZAogICogQG1heHZhbDogVGhlIG1heGltdW0gZnJhbWUgc2l6ZSB1cHBlciBsaW1pdDsgdGhpcyBtYXkgYmUgbGVzcyB0aGFuIHdoYXQKICAqCSAgICBpcyBpbiB0aGUgc2VydmljZSBwYXJhbWV0ZXJzCiAgKi8KQEAgLTI0Niw3ICsyNTcsNiBAQAogCXN0cnVjdCBmY19ycG9ydF9vcGVyYXRpb25zICpycG9ydF9vcHM7CiAJc3RydWN0IGZjX3Jwb3J0X2lkZW50aWZpZXJzIGlkczsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OwotCWludCByZXN0YXJ0ID0gMDsKIAogCW11dGV4X2xvY2soJnJkYXRhLT5ycF9tdXRleCk7CiAJZXZlbnQgPSByZGF0YS0+ZXZlbnQ7CkBAIC0yNTksNiArMjY5LDcgQEAKIAljYXNlIFJQT1JUX0VWX1JFQURZOgogCQlpZHMgPSByZGF0YS0+aWRzOwogCQlyZGF0YS0+ZXZlbnQgPSBSUE9SVF9FVl9OT05FOworCQlyZGF0YS0+bWFqb3JfcmV0cmllcyA9IDA7CiAJCWtyZWZfZ2V0KCZyZGF0YS0+a3JlZik7CiAJCW11dGV4X3VubG9jaygmcmRhdGEtPnJwX211dGV4KTsKIApAQCAtMjk4LDI0ICszMDksNiBAQAogCQlwb3J0X2lkID0gcmRhdGEtPmlkcy5wb3J0X2lkOwogCQltdXRleF91bmxvY2soJnJkYXRhLT5ycF9tdXRleCk7CiAKLQkJaWYgKHBvcnRfaWQgIT0gRkNfRklEX0RJUl9TRVJWKSB7Ci0JCQkvKgotCQkJICogV2UgbXVzdCBkcm9wIHJwX211dGV4IGJlZm9yZSB0YWtpbmcgZGlzY19tdXRleC4KLQkJCSAqIFJlLWV2YWx1YXRlIHN0YXRlIHRvIGFsbG93IGZvciByZXN0YXJ0LgotCQkJICogQSB0cmFuc2l0aW9uIHRvIFJFU1RBUlQgc3RhdGUgbXVzdCBvbmx5IGhhcHBlbgotCQkJICogd2hpbGUgZGlzY19tdXRleCBpcyBoZWxkIGFuZCByZGF0YSBpcyBvbiB0aGUgbGlzdC4KLQkJCSAqLwotCQkJbXV0ZXhfbG9jaygmbHBvcnQtPmRpc2MuZGlzY19tdXRleCk7Ci0JCQltdXRleF9sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOwotCQkJaWYgKHJkYXRhLT5ycF9zdGF0ZSA9PSBSUE9SVF9TVF9SRVNUQVJUKQotCQkJCXJlc3RhcnQgPSAxOwotCQkJZWxzZQotCQkJCWxpc3RfZGVsKCZyZGF0YS0+cGVlcnMpOwotCQkJcmRhdGEtPmV2ZW50ID0gUlBPUlRfRVZfTk9ORTsKLQkJCW11dGV4X3VubG9jaygmcmRhdGEtPnJwX211dGV4KTsKLQkJCW11dGV4X3VubG9jaygmbHBvcnQtPmRpc2MuZGlzY19tdXRleCk7Ci0JCX0KLQogCQlpZiAocnBvcnRfb3BzICYmIHJwb3J0X29wcy0+ZXZlbnRfY2FsbGJhY2spIHsKIAkJCUZDX1JQT1JUX0RCRyhyZGF0YSwgImNhbGxiYWNrIGV2ICVkXG4iLCBldmVudCk7CiAJCQlycG9ydF9vcHMtPmV2ZW50X2NhbGxiYWNrKGxwb3J0LCByZGF0YSwgZXZlbnQpOwpAQCAtMzM2LDEzICszMjksMzcgQEAKIAkJCW11dGV4X3VubG9jaygmcmRhdGEtPnJwX211dGV4KTsKIAkJCWZjX3JlbW90ZV9wb3J0X2RlbGV0ZShycG9ydCk7CiAJCX0KLQkJaWYgKHJlc3RhcnQpIHsKLQkJCW11dGV4X2xvY2soJnJkYXRhLT5ycF9tdXRleCk7Ci0JCQlGQ19SUE9SVF9EQkcocmRhdGEsICJ3b3JrIHJlc3RhcnRcbiIpOwotCQkJZmNfcnBvcnRfZW50ZXJfcGxvZ2kocmRhdGEpOworCisJCW11dGV4X2xvY2soJmxwb3J0LT5kaXNjLmRpc2NfbXV0ZXgpOworCQltdXRleF9sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOworCQlpZiAocmRhdGEtPnJwX3N0YXRlID09IFJQT1JUX1NUX0RFTEVURSkgeworCQkJaWYgKHBvcnRfaWQgPT0gRkNfRklEX0RJUl9TRVJWKSB7CisJCQkJcmRhdGEtPmV2ZW50ID0gUlBPUlRfRVZfTk9ORTsKKwkJCQltdXRleF91bmxvY2soJnJkYXRhLT5ycF9tdXRleCk7CisJCQl9IGVsc2UgaWYgKChyZGF0YS0+ZmxhZ3MgJiBGQ19SUF9TVEFSVEVEKSAmJgorCQkJCSAgIHJkYXRhLT5tYWpvcl9yZXRyaWVzIDwKKwkJCQkgICBscG9ydC0+bWF4X3Jwb3J0X3JldHJ5X2NvdW50KSB7CisJCQkJcmRhdGEtPm1ham9yX3JldHJpZXMrKzsKKwkJCQlyZGF0YS0+ZXZlbnQgPSBSUE9SVF9FVl9OT05FOworCQkJCUZDX1JQT1JUX0RCRyhyZGF0YSwgIndvcmsgcmVzdGFydFxuIik7CisJCQkJZmNfcnBvcnRfZW50ZXJfZmxvZ2kocmRhdGEpOworCQkJCW11dGV4X3VubG9jaygmcmRhdGEtPnJwX211dGV4KTsKKwkJCX0gZWxzZSB7CisJCQkJRkNfUlBPUlRfREJHKHJkYXRhLCAid29yayBkZWxldGVcbiIpOworCQkJCWxpc3RfZGVsX3JjdSgmcmRhdGEtPnBlZXJzKTsKKwkJCQltdXRleF91bmxvY2soJnJkYXRhLT5ycF9tdXRleCk7CisJCQkJa3JlZl9wdXQoJnJkYXRhLT5rcmVmLCBscG9ydC0+dHQucnBvcnRfZGVzdHJveSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogUmUtb3BlbiBmb3IgZXZlbnRzLiAgUmVpc3N1ZSBSRUFEWSBldmVudCBpZiByZWFkeS4KKwkJCSAqLworCQkJcmRhdGEtPmV2ZW50ID0gUlBPUlRfRVZfTk9ORTsKKwkJCWlmIChyZGF0YS0+cnBfc3RhdGUgPT0gUlBPUlRfU1RfUkVBRFkpCisJCQkJZmNfcnBvcnRfZW50ZXJfcmVhZHkocmRhdGEpOwogCQkJbXV0ZXhfdW5sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOwotCQl9IGVsc2UKLQkJCWtyZWZfcHV0KCZyZGF0YS0+a3JlZiwgbHBvcnQtPnR0LnJwb3J0X2Rlc3Ryb3kpOworCQl9CisJCW11dGV4X3VubG9jaygmbHBvcnQtPmRpc2MuZGlzY19tdXRleCk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTM2NywyMCArMzg0LDE4IEBACiB7CiAJbXV0ZXhfbG9jaygmcmRhdGEtPnJwX211dGV4KTsKIAorCXJkYXRhLT5mbGFncyB8PSBGQ19SUF9TVEFSVEVEOwogCXN3aXRjaCAocmRhdGEtPnJwX3N0YXRlKSB7CiAJY2FzZSBSUE9SVF9TVF9SRUFEWToKIAkJRkNfUlBPUlRfREJHKHJkYXRhLCAiQURJU0MgcG9ydFxuIik7CiAJCWZjX3Jwb3J0X2VudGVyX2FkaXNjKHJkYXRhKTsKIAkJYnJlYWs7Ci0JY2FzZSBSUE9SVF9TVF9SRVNUQVJUOgotCQlicmVhazsKIAljYXNlIFJQT1JUX1NUX0RFTEVURToKIAkJRkNfUlBPUlRfREJHKHJkYXRhLCAiUmVzdGFydCBkZWxldGVkIHBvcnRcbiIpOwotCQlmY19ycG9ydF9zdGF0ZV9lbnRlcihyZGF0YSwgUlBPUlRfU1RfUkVTVEFSVCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUZDX1JQT1JUX0RCRyhyZGF0YSwgIkxvZ2luIHRvIHBvcnRcbiIpOwotCQlmY19ycG9ydF9lbnRlcl9wbG9naShyZGF0YSk7CisJCWZjX3Jwb3J0X2VudGVyX2Zsb2dpKHJkYXRhKTsKIAkJYnJlYWs7CiAJfQogCW11dGV4X3VubG9jaygmcmRhdGEtPnJwX211dGV4KTsKQEAgLTQzMSwxNSArNDQ2LDEyIEBACiAKIAlGQ19SUE9SVF9EQkcocmRhdGEsICJSZW1vdmUgcG9ydFxuIik7CiAKKwlyZGF0YS0+ZmxhZ3MgJj0gfkZDX1JQX1NUQVJURUQ7CiAJaWYgKHJkYXRhLT5ycF9zdGF0ZSA9PSBSUE9SVF9TVF9ERUxFVEUpIHsKIAkJRkNfUlBPUlRfREJHKHJkYXRhLCAiUG9ydCBpbiBEZWxldGUgc3RhdGUsIG5vdCByZW1vdmluZ1xuIik7CiAJCWdvdG8gb3V0OwogCX0KLQotCWlmIChyZGF0YS0+cnBfc3RhdGUgPT0gUlBPUlRfU1RfUkVTVEFSVCkKLQkJRkNfUlBPUlRfREJHKHJkYXRhLCAiUG9ydCBpbiBSZXN0YXJ0IHN0YXRlLCBkZWxldGluZ1xuIik7Ci0JZWxzZQotCQlmY19ycG9ydF9lbnRlcl9sb2dvKHJkYXRhKTsKKwlmY19ycG9ydF9lbnRlcl9sb2dvKHJkYXRhKTsKIAogCS8qCiAJICogQ2hhbmdlIHRoZSBzdGF0ZSB0byBEZWxldGUgc28gdGhhdCB3ZSBkaXNjYXJkCkBAIC00ODUsNiArNDk3LDkgQEAKIAltdXRleF9sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOwogCiAJc3dpdGNoIChyZGF0YS0+cnBfc3RhdGUpIHsKKwljYXNlIFJQT1JUX1NUX0ZMT0dJOgorCQlmY19ycG9ydF9lbnRlcl9mbG9naShyZGF0YSk7CisJCWJyZWFrOwogCWNhc2UgUlBPUlRfU1RfUExPR0k6CiAJCWZjX3Jwb3J0X2VudGVyX3Bsb2dpKHJkYXRhKTsKIAkJYnJlYWs7CkBAIC00OTQsMTYgKzUwOSwxMyBAQAogCWNhc2UgUlBPUlRfU1RfUlRWOgogCQlmY19ycG9ydF9lbnRlcl9ydHYocmRhdGEpOwogCQlicmVhazsKLQljYXNlIFJQT1JUX1NUX0xPR086Ci0JCWZjX3Jwb3J0X2VudGVyX2xvZ28ocmRhdGEpOwotCQlicmVhazsKIAljYXNlIFJQT1JUX1NUX0FESVNDOgogCQlmY19ycG9ydF9lbnRlcl9hZGlzYyhyZGF0YSk7CiAJCWJyZWFrOworCWNhc2UgUlBPUlRfU1RfUExPR0lfV0FJVDoKIAljYXNlIFJQT1JUX1NUX1JFQURZOgogCWNhc2UgUlBPUlRfU1RfSU5JVDoKIAljYXNlIFJQT1JUX1NUX0RFTEVURToKLQljYXNlIFJQT1JUX1NUX1JFU1RBUlQ6CiAJCWJyZWFrOwogCX0KIApAQCAtNTI1LDggKzUzNyw5IEBACiAJCSAgICAgZmNfcnBvcnRfc3RhdGUocmRhdGEpLCByZGF0YS0+cmV0cmllcyk7CiAKIAlzd2l0Y2ggKHJkYXRhLT5ycF9zdGF0ZSkgeworCWNhc2UgUlBPUlRfU1RfRkxPR0k6CiAJY2FzZSBSUE9SVF9TVF9QTE9HSToKLQljYXNlIFJQT1JUX1NUX0xPR086CisJCXJkYXRhLT5mbGFncyAmPSB+RkNfUlBfU1RBUlRFRDsKIAkJZmNfcnBvcnRfZW50ZXJfZGVsZXRlKHJkYXRhLCBSUE9SVF9FVl9GQUlMRUQpOwogCQlicmVhazsKIAljYXNlIFJQT1JUX1NUX1JUVjoKQEAgLTUzNiw4ICs1NDksOCBAQAogCWNhc2UgUlBPUlRfU1RfQURJU0M6CiAJCWZjX3Jwb3J0X2VudGVyX2xvZ28ocmRhdGEpOwogCQlicmVhazsKKwljYXNlIFJQT1JUX1NUX1BMT0dJX1dBSVQ6CiAJY2FzZSBSUE9SVF9TVF9ERUxFVEU6Ci0JY2FzZSBSUE9SVF9TVF9SRVNUQVJUOgogCWNhc2UgUlBPUlRfU1RfUkVBRFk6CiAJY2FzZSBSUE9SVF9TVF9JTklUOgogCQlicmVhazsKQEAgLTU3OSw3ICs1OTIsMjUwIEBACiB9CiAKIC8qKgotICogZmNfcnBvcnRfcGxvZ2lfcmVjdl9yZXNwKCkgLSBIYW5kbGVyIGZvciBFTFMgUExPR0kgcmVzcG9uc2VzCisgKiBmY19ycG9ydF9sb2dpbl9jb21wbGV0ZSgpIC0gSGFuZGxlIHBhcmFtZXRlcnMgYW5kIGNvbXBsZXRpb24gb2YgcC1tcCBsb2dpbi4KKyAqIEByZGF0YTogIFRoZSByZW1vdGUgcG9ydCB3aGljaCB3ZSBsb2dnZWQgaW50byBvciB3aGljaCBsb2dnZWQgaW50byB1cy4KKyAqIEBmcDogICAgIFRoZSBGTE9HSSBvciBQTE9HSSByZXF1ZXN0IG9yIHJlc3BvbnNlIGZyYW1lCisgKgorICogUmV0dXJucyBub24temVybyBlcnJvciBpZiBhIHByb2JsZW0gaXMgZGV0ZWN0ZWQgd2l0aCB0aGUgZnJhbWUuCisgKiBEb2VzIG5vdCBmcmVlIHRoZSBmcmFtZS4KKyAqCisgKiBUaGlzIGlzIG9ubHkgdXNlZCBpbiBwb2ludC10by1tdWx0aXBvaW50IG1vZGUgZm9yIEZJUCBjdXJyZW50bHkuCisgKi8KK3N0YXRpYyBpbnQgZmNfcnBvcnRfbG9naW5fY29tcGxldGUoc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhLAorCQkJCSAgIHN0cnVjdCBmY19mcmFtZSAqZnApCit7CisJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IHJkYXRhLT5sb2NhbF9wb3J0OworCXN0cnVjdCBmY19lbHNfZmxvZ2kgKmZsb2dpOworCXVuc2lnbmVkIGludCBlX2RfdG92OworCXUxNiBjc3BfZmxhZ3M7CisKKwlmbG9naSA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KGZwLCBzaXplb2YoKmZsb2dpKSk7CisJaWYgKCFmbG9naSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljc3BfZmxhZ3MgPSBudG9ocyhmbG9naS0+ZmxfY3NwLnNwX2ZlYXR1cmVzKTsKKworCWlmIChmY19mcmFtZV9wYXlsb2FkX29wKGZwKSA9PSBFTFNfRkxPR0kpIHsKKwkJaWYgKGNzcF9mbGFncyAmIEZDX1NQX0ZUX0ZQT1JUKSB7CisJCQlGQ19SUE9SVF9EQkcocmRhdGEsICJGYWJyaWMgYml0IHNldCBpbiBGTE9HSVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSB7CisKKwkJLyoKKwkJICogRV9EX1RPViBpcyBub3QgdmFsaWQgb24gYW4gaW5jb21pbmcgRkxPR0kgcmVxdWVzdC4KKwkJICovCisJCWVfZF90b3YgPSBudG9obChmbG9naS0+ZmxfY3NwLnNwX2VfZF90b3YpOworCQlpZiAoY3NwX2ZsYWdzICYgRkNfU1BfRlRfRURUUikKKwkJCWVfZF90b3YgLz0gMTAwMDAwMDsKKwkJaWYgKGVfZF90b3YgPiByZGF0YS0+ZV9kX3RvdikKKwkJCXJkYXRhLT5lX2RfdG92ID0gZV9kX3RvdjsKKwl9CisJcmRhdGEtPm1heGZyYW1lX3NpemUgPSBmY19wbG9naV9nZXRfbWF4ZnJhbWUoZmxvZ2ksIGxwb3J0LT5tZnMpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGZjX3Jwb3J0X2Zsb2dpX3Jlc3AoKSAtIEhhbmRsZSByZXNwb25zZSB0byBGTE9HSSByZXF1ZXN0IGZvciBwLW1wIG1vZGUKKyAqIEBzcDoJICAgIFRoZSBzZXF1ZW5jZSB0aGF0IHRoZSBGTE9HSSB3YXMgb24KKyAqIEBmcDoJICAgIFRoZSBGTE9HSSByZXNwb25zZSBmcmFtZQorICogQHJwX2FyZzogVGhlIHJlbW90ZSBwb3J0IHRoYXQgcmVjZWl2ZWQgdGhlIEZMT0dJIHJlc3BvbnNlCisgKi8KK3ZvaWQgZmNfcnBvcnRfZmxvZ2lfcmVzcChzdHJ1Y3QgZmNfc2VxICpzcCwgc3RydWN0IGZjX2ZyYW1lICpmcCwKKwkJCSB2b2lkICpycF9hcmcpCit7CisJc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhID0gcnBfYXJnOworCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSByZGF0YS0+bG9jYWxfcG9ydDsKKwlzdHJ1Y3QgZmNfZWxzX2Zsb2dpICpmbG9naTsKKwl1bnNpZ25lZCBpbnQgcl9hX3RvdjsKKworCUZDX1JQT1JUX0RCRyhyZGF0YSwgIlJlY2VpdmVkIGEgRkxPR0kgJXNcbiIsIGZjX2Vsc19yZXNwX3R5cGUoZnApKTsKKworCWlmIChmcCA9PSBFUlJfUFRSKC1GQ19FWF9DTE9TRUQpKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOworCisJaWYgKHJkYXRhLT5ycF9zdGF0ZSAhPSBSUE9SVF9TVF9GTE9HSSkgeworCQlGQ19SUE9SVF9EQkcocmRhdGEsICJSZWNlaXZlZCBhIEZMT0dJIHJlc3BvbnNlLCBidXQgaW4gc3RhdGUgIgorCQkJICAgICAiJXNcbiIsIGZjX3Jwb3J0X3N0YXRlKHJkYXRhKSk7CisJCWlmIChJU19FUlIoZnApKQorCQkJZ290byBlcnI7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChJU19FUlIoZnApKSB7CisJCWZjX3Jwb3J0X2Vycm9yKHJkYXRhLCBmcCk7CisJCWdvdG8gZXJyOworCX0KKworCWlmIChmY19mcmFtZV9wYXlsb2FkX29wKGZwKSAhPSBFTFNfTFNfQUNDKQorCQlnb3RvIGJhZDsKKwlpZiAoZmNfcnBvcnRfbG9naW5fY29tcGxldGUocmRhdGEsIGZwKSkKKwkJZ290byBiYWQ7CisKKwlmbG9naSA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KGZwLCBzaXplb2YoKmZsb2dpKSk7CisJaWYgKCFmbG9naSkKKwkJZ290byBiYWQ7CisJcl9hX3RvdiA9IG50b2hsKGZsb2dpLT5mbF9jc3Auc3Bfcl9hX3Rvdik7CisJaWYgKHJfYV90b3YgPiByZGF0YS0+cl9hX3RvdikKKwkJcmRhdGEtPnJfYV90b3YgPSByX2FfdG92OworCisJaWYgKHJkYXRhLT5pZHMucG9ydF9uYW1lIDwgbHBvcnQtPnd3cG4pCisJCWZjX3Jwb3J0X2VudGVyX3Bsb2dpKHJkYXRhKTsKKwllbHNlCisJCWZjX3Jwb3J0X3N0YXRlX2VudGVyKHJkYXRhLCBSUE9SVF9TVF9QTE9HSV9XQUlUKTsKK291dDoKKwlmY19mcmFtZV9mcmVlKGZwKTsKK2VycjoKKwltdXRleF91bmxvY2soJnJkYXRhLT5ycF9tdXRleCk7CisJa3JlZl9wdXQoJnJkYXRhLT5rcmVmLCByZGF0YS0+bG9jYWxfcG9ydC0+dHQucnBvcnRfZGVzdHJveSk7CisJcmV0dXJuOworYmFkOgorCUZDX1JQT1JUX0RCRyhyZGF0YSwgIkJhZCBGTE9HSSByZXNwb25zZVxuIik7CisJZmNfcnBvcnRfZXJyb3JfcmV0cnkocmRhdGEsIGZwKTsKKwlnb3RvIG91dDsKK30KKworLyoqCisgKiBmY19ycG9ydF9lbnRlcl9mbG9naSgpIC0gU2VuZCBhIEZMT0dJIHJlcXVlc3QgdG8gdGhlIHJlbW90ZSBwb3J0IGZvciBwLW1wCisgKiBAcmRhdGE6IFRoZSByZW1vdGUgcG9ydCB0byBzZW5kIGEgRkxPR0kgdG8KKyAqCisgKiBMb2NraW5nIE5vdGU6IFRoZSBycG9ydCBsb2NrIGlzIGV4cGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKKyAqIHRoaXMgcm91dGluZS4KKyAqLworc3RhdGljIHZvaWQgZmNfcnBvcnRfZW50ZXJfZmxvZ2koc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhKQoreworCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSByZGF0YS0+bG9jYWxfcG9ydDsKKwlzdHJ1Y3QgZmNfZnJhbWUgKmZwOworCisJaWYgKCFscG9ydC0+cG9pbnRfdG9fbXVsdGlwb2ludCkKKwkJcmV0dXJuIGZjX3Jwb3J0X2VudGVyX3Bsb2dpKHJkYXRhKTsKKworCUZDX1JQT1JUX0RCRyhyZGF0YSwgIkVudGVyZWQgRkxPR0kgc3RhdGUgZnJvbSAlcyBzdGF0ZVxuIiwKKwkJICAgICBmY19ycG9ydF9zdGF0ZShyZGF0YSkpOworCisJZmNfcnBvcnRfc3RhdGVfZW50ZXIocmRhdGEsIFJQT1JUX1NUX0ZMT0dJKTsKKworCWZwID0gZmNfZnJhbWVfYWxsb2MobHBvcnQsIHNpemVvZihzdHJ1Y3QgZmNfZWxzX2Zsb2dpKSk7CisJaWYgKCFmcCkKKwkJcmV0dXJuIGZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJkYXRhLCBmcCk7CisKKwlpZiAoIWxwb3J0LT50dC5lbHNjdF9zZW5kKGxwb3J0LCByZGF0YS0+aWRzLnBvcnRfaWQsIGZwLCBFTFNfRkxPR0ksCisJCQkJICBmY19ycG9ydF9mbG9naV9yZXNwLCByZGF0YSwKKwkJCQkgIDIgKiBscG9ydC0+cl9hX3RvdikpCisJCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJkYXRhLCBOVUxMKTsKKwllbHNlCisJCWtyZWZfZ2V0KCZyZGF0YS0+a3JlZik7Cit9CisKKy8qKgorICogZmNfcnBvcnRfcmVjdl9mbG9naV9yZXEoKSAtIEhhbmRsZSBGYWJyaWMgTG9naW4gKEZMT0dJKSByZXF1ZXN0IGluIHAtbXAgbW9kZQorICogQGxwb3J0OiBUaGUgbG9jYWwgcG9ydCB0aGF0IHJlY2VpdmVkIHRoZSBQTE9HSSByZXF1ZXN0CisgKiBAcnhfZnA6IFRoZSBQTE9HSSByZXF1ZXN0IGZyYW1lCisgKi8KK3N0YXRpYyB2b2lkIGZjX3Jwb3J0X3JlY3ZfZmxvZ2lfcmVxKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsCisJCQkJICAgIHN0cnVjdCBmY19mcmFtZSAqcnhfZnApCit7CisJc3RydWN0IGZjX2Rpc2MgKmRpc2M7CisJc3RydWN0IGZjX2Vsc19mbG9naSAqZmxwOworCXN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YTsKKwlzdHJ1Y3QgZmNfZnJhbWUgKmZwID0gcnhfZnA7CisJc3RydWN0IGZjX3NlcV9lbHNfZGF0YSByanRfZGF0YTsKKwl1MzIgc2lkOworCisJc2lkID0gZmNfZnJhbWVfc2lkKGZwKTsKKworCUZDX1JQT1JUX0lEX0RCRyhscG9ydCwgc2lkLCAiUmVjZWl2ZWQgRkxPR0kgcmVxdWVzdFxuIik7CisKKwlkaXNjID0gJmxwb3J0LT5kaXNjOworCW11dGV4X2xvY2soJmRpc2MtPmRpc2NfbXV0ZXgpOworCisJaWYgKCFscG9ydC0+cG9pbnRfdG9fbXVsdGlwb2ludCkgeworCQlyanRfZGF0YS5yZWFzb24gPSBFTFNfUkpUX1VOU1VQOworCQlyanRfZGF0YS5leHBsYW4gPSBFTFNfRVhQTF9OT05FOworCQlnb3RvIHJlamVjdDsKKwl9CisKKwlmbHAgPSBmY19mcmFtZV9wYXlsb2FkX2dldChmcCwgc2l6ZW9mKCpmbHApKTsKKwlpZiAoIWZscCkgeworCQlyanRfZGF0YS5yZWFzb24gPSBFTFNfUkpUX0xPR0lDOworCQlyanRfZGF0YS5leHBsYW4gPSBFTFNfRVhQTF9JTlZfTEVOOworCQlnb3RvIHJlamVjdDsKKwl9CisKKwlyZGF0YSA9IGxwb3J0LT50dC5ycG9ydF9sb29rdXAobHBvcnQsIHNpZCk7CisJaWYgKCFyZGF0YSkgeworCQlyanRfZGF0YS5yZWFzb24gPSBFTFNfUkpUX0ZJUDsKKwkJcmp0X2RhdGEuZXhwbGFuID0gRUxTX0VYUExfTk9UX05FSUdIQk9SOworCQlnb3RvIHJlamVjdDsKKwl9CisJbXV0ZXhfbG9jaygmcmRhdGEtPnJwX211dGV4KTsKKworCUZDX1JQT1JUX0RCRyhyZGF0YSwgIlJlY2VpdmVkIEZMT0dJIGluICVzIHN0YXRlXG4iLAorCQkgICAgIGZjX3Jwb3J0X3N0YXRlKHJkYXRhKSk7CisKKwlzd2l0Y2ggKHJkYXRhLT5ycF9zdGF0ZSkgeworCWNhc2UgUlBPUlRfU1RfSU5JVDoKKwljYXNlIFJQT1JUX1NUX0RFTEVURToKKwkJbXV0ZXhfdW5sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOworCQlyanRfZGF0YS5yZWFzb24gPSBFTFNfUkpUX0ZJUDsKKwkJcmp0X2RhdGEuZXhwbGFuID0gRUxTX0VYUExfTk9UX05FSUdIQk9SOworCQlnb3RvIHJlamVjdDsKKwljYXNlIFJQT1JUX1NUX0ZMT0dJOgorCWNhc2UgUlBPUlRfU1RfUExPR0lfV0FJVDoKKwljYXNlIFJQT1JUX1NUX1BMT0dJOgorCQlicmVhazsKKwljYXNlIFJQT1JUX1NUX1BSTEk6CisJY2FzZSBSUE9SVF9TVF9SVFY6CisJY2FzZSBSUE9SVF9TVF9SRUFEWToKKwljYXNlIFJQT1JUX1NUX0FESVNDOgorCQkvKgorCQkgKiBTZXQgdGhlIHJlbW90ZSBwb3J0IHRvIGJlIGRlbGV0ZWQgYW5kIHRvIHRoZW4gcmVzdGFydC4KKwkJICogVGhpcyBxdWV1ZXMgd29yayB0byBiZSBzdXJlIGV4Y2hhbmdlcyBhcmUgcmVzZXQuCisJCSAqLworCQlmY19ycG9ydF9lbnRlcl9kZWxldGUocmRhdGEsIFJQT1JUX0VWX0xPR08pOworCQltdXRleF91bmxvY2soJnJkYXRhLT5ycF9tdXRleCk7CisJCXJqdF9kYXRhLnJlYXNvbiA9IEVMU19SSlRfQlVTWTsKKwkJcmp0X2RhdGEuZXhwbGFuID0gRUxTX0VYUExfTk9ORTsKKwkJZ290byByZWplY3Q7CisJfQorCWlmIChmY19ycG9ydF9sb2dpbl9jb21wbGV0ZShyZGF0YSwgZnApKSB7CisJCW11dGV4X3VubG9jaygmcmRhdGEtPnJwX211dGV4KTsKKwkJcmp0X2RhdGEucmVhc29uID0gRUxTX1JKVF9MT0dJQzsKKwkJcmp0X2RhdGEuZXhwbGFuID0gRUxTX0VYUExfTk9ORTsKKwkJZ290byByZWplY3Q7CisJfQorCisJZnAgPSBmY19mcmFtZV9hbGxvYyhscG9ydCwgc2l6ZW9mKCpmbHApKTsKKwlpZiAoIWZwKQorCQlnb3RvIG91dDsKKworCWZjX2Zsb2dpX2ZpbGwobHBvcnQsIGZwKTsKKwlmbHAgPSBmY19mcmFtZV9wYXlsb2FkX2dldChmcCwgc2l6ZW9mKCpmbHApKTsKKwlmbHAtPmZsX2NtZCA9IEVMU19MU19BQ0M7CisKKwlmY19maWxsX3JlcGx5X2hkcihmcCwgcnhfZnAsIEZDX1JDVExfRUxTX1JFUCwgMCk7CisJbHBvcnQtPnR0LmZyYW1lX3NlbmQobHBvcnQsIGZwKTsKKworCWlmIChyZGF0YS0+aWRzLnBvcnRfbmFtZSA8IGxwb3J0LT53d3BuKQorCQlmY19ycG9ydF9lbnRlcl9wbG9naShyZGF0YSk7CisJZWxzZQorCQlmY19ycG9ydF9zdGF0ZV9lbnRlcihyZGF0YSwgUlBPUlRfU1RfUExPR0lfV0FJVCk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOworCW11dGV4X3VubG9jaygmZGlzYy0+ZGlzY19tdXRleCk7CisJZmNfZnJhbWVfZnJlZShyeF9mcCk7CisJcmV0dXJuOworCityZWplY3Q6CisJbXV0ZXhfdW5sb2NrKCZkaXNjLT5kaXNjX211dGV4KTsKKwlscG9ydC0+dHQuc2VxX2Vsc19yc3Bfc2VuZChyeF9mcCwgRUxTX0xTX1JKVCwgJnJqdF9kYXRhKTsKKwlmY19mcmFtZV9mcmVlKHJ4X2ZwKTsKK30KKworLyoqCisgKiBmY19ycG9ydF9wbG9naV9yZXNwKCkgLSBIYW5kbGVyIGZvciBFTFMgUExPR0kgcmVzcG9uc2VzCiAgKiBAc3A6CSAgICAgICBUaGUgc2VxdWVuY2UgdGhlIFBMT0dJIGlzIG9uCiAgKiBAZnA6CSAgICAgICBUaGUgUExPR0kgcmVzcG9uc2UgZnJhbWUKICAqIEByZGF0YV9hcmc6IFRoZSByZW1vdGUgcG9ydCB0aGF0IHNlbnQgdGhlIFBMT0dJIHJlc3BvbnNlCkBAIC01OTQsNyArODUwLDYgQEAKIAlzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGEgPSByZGF0YV9hcmc7CiAJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IHJkYXRhLT5sb2NhbF9wb3J0OwogCXN0cnVjdCBmY19lbHNfZmxvZ2kgKnBscCA9IE5VTEw7Ci0JdW5zaWduZWQgaW50IHRvdjsKIAl1MTYgY3NwX3NlcTsKIAl1MTYgY3NzcF9zZXE7CiAJdTggb3A7CkBAIC02MjIsMTEgKzg3Nyw4IEBACiAJCXJkYXRhLT5pZHMucG9ydF9uYW1lID0gZ2V0X3VuYWxpZ25lZF9iZTY0KCZwbHAtPmZsX3d3cG4pOwogCQlyZGF0YS0+aWRzLm5vZGVfbmFtZSA9IGdldF91bmFsaWduZWRfYmU2NCgmcGxwLT5mbF93d25uKTsKIAotCQl0b3YgPSBudG9obChwbHAtPmZsX2NzcC5zcF9lX2RfdG92KTsKLQkJaWYgKG50b2hzKHBscC0+ZmxfY3NwLnNwX2ZlYXR1cmVzKSAmIEZDX1NQX0ZUX0VEVFIpCi0JCQl0b3YgLz0gMTAwMDAwMDsKLQkJaWYgKHRvdiA+IHJkYXRhLT5lX2RfdG92KQotCQkJcmRhdGEtPmVfZF90b3YgPSB0b3Y7CisJCWlmIChscG9ydC0+cG9pbnRfdG9fbXVsdGlwb2ludCkKKwkJCWZjX3Jwb3J0X2xvZ2luX2NvbXBsZXRlKHJkYXRhLCBmcCk7CiAJCWNzcF9zZXEgPSBudG9ocyhwbHAtPmZsX2NzcC5zcF90b3Rfc2VxKTsKIAkJY3NzcF9zZXEgPSBudG9ocyhwbHAtPmZsX2Nzc3BbMyAtIDFdLmNwX2Nvbl9zZXEpOwogCQlpZiAoY3NzcF9zZXEgPCBjc3Bfc2VxKQpAQCAtNjY0LDYgKzkxNiw3IEBACiAJcmRhdGEtPm1heGZyYW1lX3NpemUgPSBGQ19NSU5fTUFYX1BBWUxPQUQ7CiAJZnAgPSBmY19mcmFtZV9hbGxvYyhscG9ydCwgc2l6ZW9mKHN0cnVjdCBmY19lbHNfZmxvZ2kpKTsKIAlpZiAoIWZwKSB7CisJCUZDX1JQT1JUX0RCRyhyZGF0YSwgIiVzIGZyYW1lIGFsbG9jIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlmY19ycG9ydF9lcnJvcl9yZXRyeShyZGF0YSwgZnApOwogCQlyZXR1cm47CiAJfQpAQCAtNjk4LDYgKzk1MSw3IEBACiAJdTMyIHJvbGVzID0gRkNfUlBPUlRfUk9MRV9VTktOT1dOOwogCXUzMiBmY3BfcGFybSA9IDA7CiAJdTggb3A7CisJdTggcmVzcF9jb2RlID0gMDsKIAogCW11dGV4X2xvY2soJnJkYXRhLT5ycF9tdXRleCk7CiAKQEAgLTcyMiwxMSArOTc2LDI1IEBACiAJb3AgPSBmY19mcmFtZV9wYXlsb2FkX29wKGZwKTsKIAlpZiAob3AgPT0gRUxTX0xTX0FDQykgewogCQlwcCA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KGZwLCBzaXplb2YoKnBwKSk7Ci0JCWlmIChwcCAmJiBwcC0+cHJsaS5wcmxpX3NwcF9sZW4gPj0gc2l6ZW9mKHBwLT5zcHApKSB7Ci0JCQlmY3BfcGFybSA9IG50b2hsKHBwLT5zcHAuc3BwX3BhcmFtcyk7Ci0JCQlpZiAoZmNwX3Bhcm0gJiBGQ1BfU1BQRl9SRVRSWSkKLQkJCQlyZGF0YS0+ZmxhZ3MgfD0gRkNfUlBfRkxBR1NfUkVUUlk7CisJCWlmICghcHApCisJCQlnb3RvIG91dDsKKworCQlyZXNwX2NvZGUgPSAocHAtPnNwcC5zcHBfZmxhZ3MgJiBGQ19TUFBfUkVTUF9NQVNLKTsKKwkJRkNfUlBPUlRfREJHKHJkYXRhLCAiUFJMSSBzcHBfZmxhZ3MgPSAweCV4XG4iLAorCQkJICAgICBwcC0+c3BwLnNwcF9mbGFncyk7CisJCWlmIChyZXNwX2NvZGUgIT0gRkNfU1BQX1JFU1BfQUNLKSB7CisJCQlpZiAocmVzcF9jb2RlID09IEZDX1NQUF9SRVNQX0NPTkYpCisJCQkJZmNfcnBvcnRfZXJyb3IocmRhdGEsIGZwKTsKKwkJCWVsc2UKKwkJCQlmY19ycG9ydF9lcnJvcl9yZXRyeShyZGF0YSwgZnApOworCQkJZ290byBvdXQ7CiAJCX0KKwkJaWYgKHBwLT5wcmxpLnBybGlfc3BwX2xlbiA8IHNpemVvZihwcC0+c3BwKSkKKwkJCWdvdG8gb3V0OworCisJCWZjcF9wYXJtID0gbnRvaGwocHAtPnNwcC5zcHBfcGFyYW1zKTsKKwkJaWYgKGZjcF9wYXJtICYgRkNQX1NQUEZfUkVUUlkpCisJCQlyZGF0YS0+ZmxhZ3MgfD0gRkNfUlBfRkxBR1NfUkVUUlk7CiAKIAkJcmRhdGEtPnN1cHBvcnRlZF9jbGFzc2VzID0gRkNfQ09TX0NMQVNTMzsKIAkJaWYgKGZjcF9wYXJtICYgRkNQX1NQUEZfSU5JVF9GQ04pCkBAIC03MzksNTUgKzEwMDcsOSBAQAogCiAJfSBlbHNlIHsKIAkJRkNfUlBPUlRfREJHKHJkYXRhLCAiQmFkIEVMUyByZXNwb25zZSBmb3IgUFJMSSBjb21tYW5kXG4iKTsKLQkJZmNfcnBvcnRfZW50ZXJfZGVsZXRlKHJkYXRhLCBSUE9SVF9FVl9GQUlMRUQpOwotCX0KLQotb3V0OgotCWZjX2ZyYW1lX2ZyZWUoZnApOwotZXJyOgotCW11dGV4X3VubG9jaygmcmRhdGEtPnJwX211dGV4KTsKLQlrcmVmX3B1dCgmcmRhdGEtPmtyZWYsIHJkYXRhLT5sb2NhbF9wb3J0LT50dC5ycG9ydF9kZXN0cm95KTsKLX0KLQotLyoqCi0gKiBmY19ycG9ydF9sb2dvX3Jlc3AoKSAtIEhhbmRsZXIgZm9yIGxvZ291dCAoTE9HTykgcmVzcG9uc2VzCi0gKiBAc3A6CSAgICAgICBUaGUgc2VxdWVuY2UgdGhlIExPR08gd2FzIG9uCi0gKiBAZnA6CSAgICAgICBUaGUgTE9HTyByZXNwb25zZSBmcmFtZQotICogQHJkYXRhX2FyZzogVGhlIHJlbW90ZSBwb3J0IHRoYXQgc2VudCB0aGUgTE9HTyByZXNwb25zZQotICoKLSAqIExvY2tpbmcgTm90ZTogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRob3V0IHRoZSBycG9ydCBsb2NrCi0gKiBoZWxkLCBidXQgaXQgd2lsbCBsb2NrLCBjYWxsIGFuIF9lbnRlcl8qIGZ1bmN0aW9uIG9yIGZjX3Jwb3J0X2Vycm9yCi0gKiBhbmQgdGhlbiB1bmxvY2sgdGhlIHJwb3J0LgotICovCi1zdGF0aWMgdm9pZCBmY19ycG9ydF9sb2dvX3Jlc3Aoc3RydWN0IGZjX3NlcSAqc3AsIHN0cnVjdCBmY19mcmFtZSAqZnAsCi0JCQkgICAgICAgdm9pZCAqcmRhdGFfYXJnKQotewotCXN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YSA9IHJkYXRhX2FyZzsKLQl1OCBvcDsKLQotCW11dGV4X2xvY2soJnJkYXRhLT5ycF9tdXRleCk7Ci0KLQlGQ19SUE9SVF9EQkcocmRhdGEsICJSZWNlaXZlZCBhIExPR08gJXNcbiIsIGZjX2Vsc19yZXNwX3R5cGUoZnApKTsKLQotCWlmIChyZGF0YS0+cnBfc3RhdGUgIT0gUlBPUlRfU1RfTE9HTykgewotCQlGQ19SUE9SVF9EQkcocmRhdGEsICJSZWNlaXZlZCBhIExPR08gcmVzcG9uc2UsIGJ1dCBpbiBzdGF0ZSAiCi0JCQkgICAgICIlc1xuIiwgZmNfcnBvcnRfc3RhdGUocmRhdGEpKTsKLQkJaWYgKElTX0VSUihmcCkpCi0JCQlnb3RvIGVycjsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKElTX0VSUihmcCkpIHsKIAkJZmNfcnBvcnRfZXJyb3JfcmV0cnkocmRhdGEsIGZwKTsKLQkJZ290byBlcnI7CiAJfQogCi0Jb3AgPSBmY19mcmFtZV9wYXlsb2FkX29wKGZwKTsKLQlpZiAob3AgIT0gRUxTX0xTX0FDQykKLQkJRkNfUlBPUlRfREJHKHJkYXRhLCAiQmFkIEVMUyByZXNwb25zZSBvcCAleCBmb3IgTE9HTyBjb21tYW5kXG4iLAotCQkJICAgICBvcCk7Ci0JZmNfcnBvcnRfZW50ZXJfZGVsZXRlKHJkYXRhLCBSUE9SVF9FVl9MT0dPKTsKLQogb3V0OgogCWZjX2ZyYW1lX2ZyZWUoZnApOwogZXJyOgpAQCAtOTM3LDYgKzExNTksMjQgQEAKIH0KIAogLyoqCisgKiBmY19ycG9ydF9sb2dvX3Jlc3AoKSAtIEhhbmRsZXIgZm9yIGxvZ291dCAoTE9HTykgcmVzcG9uc2VzCisgKiBAc3A6CSAgICAgICBUaGUgc2VxdWVuY2UgdGhlIExPR08gd2FzIG9uCisgKiBAZnA6CSAgICAgICBUaGUgTE9HTyByZXNwb25zZSBmcmFtZQorICogQGxwb3J0X2FyZzogVGhlIGxvY2FsIHBvcnQKKyAqLworc3RhdGljIHZvaWQgZmNfcnBvcnRfbG9nb19yZXNwKHN0cnVjdCBmY19zZXEgKnNwLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwLAorCQkJICAgICAgIHZvaWQgKmxwb3J0X2FyZykKK3sKKwlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gbHBvcnRfYXJnOworCisJRkNfUlBPUlRfSURfREJHKGxwb3J0LCBmY19zZXFfZXhjaChzcCktPmRpZCwKKwkJCSJSZWNlaXZlZCBhIExPR08gJXNcbiIsIGZjX2Vsc19yZXNwX3R5cGUoZnApKTsKKwlpZiAoSVNfRVJSKGZwKSkKKwkJcmV0dXJuOworCWZjX2ZyYW1lX2ZyZWUoZnApOworfQorCisvKioKICAqIGZjX3Jwb3J0X2VudGVyX2xvZ28oKSAtIFNlbmQgYSBsb2dvdXQgKExPR08pIHJlcXVlc3QKICAqIEByZGF0YTogVGhlIHJlbW90ZSBwb3J0IHRvIHNlbmQgdGhlIExPR08gcmVxdWVzdCB0bwogICoKQEAgLTk0OCwyMyArMTE4OCwxNCBAQAogCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSByZGF0YS0+bG9jYWxfcG9ydDsKIAlzdHJ1Y3QgZmNfZnJhbWUgKmZwOwogCi0JRkNfUlBPUlRfREJHKHJkYXRhLCAiUG9ydCBlbnRlcmVkIExPR08gc3RhdGUgZnJvbSAlcyBzdGF0ZVxuIiwKKwlGQ19SUE9SVF9EQkcocmRhdGEsICJQb3J0IHNlbmRpbmcgTE9HTyBmcm9tICVzIHN0YXRlXG4iLAogCQkgICAgIGZjX3Jwb3J0X3N0YXRlKHJkYXRhKSk7CiAKLQlmY19ycG9ydF9zdGF0ZV9lbnRlcihyZGF0YSwgUlBPUlRfU1RfTE9HTyk7Ci0KIAlmcCA9IGZjX2ZyYW1lX2FsbG9jKGxwb3J0LCBzaXplb2Yoc3RydWN0IGZjX2Vsc19sb2dvKSk7Ci0JaWYgKCFmcCkgewotCQlmY19ycG9ydF9lcnJvcl9yZXRyeShyZGF0YSwgZnApOworCWlmICghZnApCiAJCXJldHVybjsKLQl9Ci0KLQlpZiAoIWxwb3J0LT50dC5lbHNjdF9zZW5kKGxwb3J0LCByZGF0YS0+aWRzLnBvcnRfaWQsIGZwLCBFTFNfTE9HTywKLQkJCQkgIGZjX3Jwb3J0X2xvZ29fcmVzcCwgcmRhdGEsCi0JCQkJICAyICogbHBvcnQtPnJfYV90b3YpKQotCQlmY19ycG9ydF9lcnJvcl9yZXRyeShyZGF0YSwgTlVMTCk7Ci0JZWxzZQotCQlrcmVmX2dldCgmcmRhdGEtPmtyZWYpOworCSh2b2lkKWxwb3J0LT50dC5lbHNjdF9zZW5kKGxwb3J0LCByZGF0YS0+aWRzLnBvcnRfaWQsIGZwLCBFTFNfTE9HTywKKwkJCQkgICBmY19ycG9ydF9sb2dvX3Jlc3AsIGxwb3J0LCAwKTsKIH0KIAogLyoqCkBAIC0xMDEzLDcgKzEyNDQsNyBAQAogCSAgICBnZXRfdW5hbGlnbmVkX2JlNjQoJmFkaXNjLT5hZGlzY193d3BuKSAhPSByZGF0YS0+aWRzLnBvcnRfbmFtZSB8fAogCSAgICBnZXRfdW5hbGlnbmVkX2JlNjQoJmFkaXNjLT5hZGlzY193d25uKSAhPSByZGF0YS0+aWRzLm5vZGVfbmFtZSkgewogCQlGQ19SUE9SVF9EQkcocmRhdGEsICJBRElTQyBlcnJvciBvciBtaXNtYXRjaFxuIik7Ci0JCWZjX3Jwb3J0X2VudGVyX3Bsb2dpKHJkYXRhKTsKKwkJZmNfcnBvcnRfZW50ZXJfZmxvZ2kocmRhdGEpOwogCX0gZWxzZSB7CiAJCUZDX1JQT1JUX0RCRyhyZGF0YSwgIkFESVNDIE9LXG4iKTsKIAkJZmNfcnBvcnRfZW50ZXJfcmVhZHkocmRhdGEpOwpAQCAtMTA1OCwyOSArMTI4OSwyNSBAQAogLyoqCiAgKiBmY19ycG9ydF9yZWN2X2FkaXNjX3JlcSgpIC0gSGFuZGxlciBmb3IgQWRkcmVzcyBEaXNjb3ZlcnkgKEFESVNDKSByZXF1ZXN0cwogICogQHJkYXRhOiBUaGUgcmVtb3RlIHBvcnQgdGhhdCBzZW50IHRoZSBBRElTQyByZXF1ZXN0Ci0gKiBAc3A6CSAgIFRoZSBzZXF1ZW5jZSB0aGUgQURJU0MgcmVxdWVzdCB3YXMgb24KICAqIEBpbl9mcDogVGhlIEFESVNDIHJlcXVlc3QgZnJhbWUKICAqCiAgKiBMb2NraW5nIE5vdGU6ICBDYWxsZWQgd2l0aCB0aGUgbHBvcnQgYW5kIHJwb3J0IGxvY2tzIGhlbGQuCiAgKi8KIHN0YXRpYyB2b2lkIGZjX3Jwb3J0X3JlY3ZfYWRpc2NfcmVxKHN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YSwKLQkJCQkgICAgc3RydWN0IGZjX3NlcSAqc3AsIHN0cnVjdCBmY19mcmFtZSAqaW5fZnApCisJCQkJICAgIHN0cnVjdCBmY19mcmFtZSAqaW5fZnApCiB7CiAJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IHJkYXRhLT5sb2NhbF9wb3J0OwogCXN0cnVjdCBmY19mcmFtZSAqZnA7Ci0Jc3RydWN0IGZjX2V4Y2ggKmVwID0gZmNfc2VxX2V4Y2goc3ApOwogCXN0cnVjdCBmY19lbHNfYWRpc2MgKmFkaXNjOwogCXN0cnVjdCBmY19zZXFfZWxzX2RhdGEgcmp0X2RhdGE7Ci0JdTMyIGZfY3RsOwogCiAJRkNfUlBPUlRfREJHKHJkYXRhLCAiUmVjZWl2ZWQgQURJU0MgcmVxdWVzdFxuIik7CiAKIAlhZGlzYyA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KGluX2ZwLCBzaXplb2YoKmFkaXNjKSk7CiAJaWYgKCFhZGlzYykgewotCQlyanRfZGF0YS5mcCA9IE5VTEw7CiAJCXJqdF9kYXRhLnJlYXNvbiA9IEVMU19SSlRfUFJPVDsKIAkJcmp0X2RhdGEuZXhwbGFuID0gRUxTX0VYUExfSU5WX0xFTjsKLQkJbHBvcnQtPnR0LnNlcV9lbHNfcnNwX3NlbmQoc3AsIEVMU19MU19SSlQsICZyanRfZGF0YSk7CisJCWxwb3J0LT50dC5zZXFfZWxzX3JzcF9zZW5kKGluX2ZwLCBFTFNfTFNfUkpULCAmcmp0X2RhdGEpOwogCQlnb3RvIGRyb3A7CiAJfQogCkBAIC0xMDkwLDExICsxMzE3LDggQEAKIAlmY19hZGlzY19maWxsKGxwb3J0LCBmcCk7CiAJYWRpc2MgPSBmY19mcmFtZV9wYXlsb2FkX2dldChmcCwgc2l6ZW9mKCphZGlzYykpOwogCWFkaXNjLT5hZGlzY19jbWQgPSBFTFNfTFNfQUNDOwotCXNwID0gbHBvcnQtPnR0LnNlcV9zdGFydF9uZXh0KHNwKTsKLQlmX2N0bCA9IEZDX0ZDX0VYX0NUWCB8IEZDX0ZDX0xBU1RfU0VRIHwgRkNfRkNfRU5EX1NFUSB8IEZDX0ZDX1NFUV9JTklUOwotCWZjX2ZpbGxfZmNfaGRyKGZwLCBGQ19SQ1RMX0VMU19SRVAsIGVwLT5kaWQsIGVwLT5zaWQsCi0JCSAgICAgICBGQ19UWVBFX0VMUywgZl9jdGwsIDApOwotCWxwb3J0LT50dC5zZXFfc2VuZChscG9ydCwgc3AsIGZwKTsKKwlmY19maWxsX3JlcGx5X2hkcihmcCwgaW5fZnAsIEZDX1JDVExfRUxTX1JFUCwgMCk7CisJbHBvcnQtPnR0LmZyYW1lX3NlbmQobHBvcnQsIGZwKTsKIGRyb3A6CiAJZmNfZnJhbWVfZnJlZShpbl9mcCk7CiB9CkBAIC0xMTAyLDI1ICsxMzI2LDIyIEBACiAvKioKICAqIGZjX3Jwb3J0X3JlY3ZfcmxzX3JlcSgpIC0gSGFuZGxlIHJlY2VpdmVkIFJlYWQgTGluayBTdGF0dXMgcmVxdWVzdAogICogQHJkYXRhOiBUaGUgcmVtb3RlIHBvcnQgdGhhdCBzZW50IHRoZSBSTFMgcmVxdWVzdAotICogQHNwOglUaGUgc2VxdWVuY2UgdGhhdCB0aGUgUkxTIHdhcyBvbgogICogQHJ4X2ZwOiBUaGUgUFJMSSByZXF1ZXN0IGZyYW1lCiAgKgogICogTG9ja2luZyBOb3RlOiBUaGUgcnBvcnQgbG9jayBpcyBleHBlY3RlZCB0byBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nCiAgKiB0aGlzIGZ1bmN0aW9uLgogICovCiBzdGF0aWMgdm9pZCBmY19ycG9ydF9yZWN2X3Jsc19yZXEoc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhLAotCQkJCSAgc3RydWN0IGZjX3NlcSAqc3AsIHN0cnVjdCBmY19mcmFtZSAqcnhfZnApCisJCQkJICBzdHJ1Y3QgZmNfZnJhbWUgKnJ4X2ZwKQogCiB7CiAJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IHJkYXRhLT5sb2NhbF9wb3J0OwogCXN0cnVjdCBmY19mcmFtZSAqZnA7Ci0Jc3RydWN0IGZjX2V4Y2ggKmVwID0gZmNfc2VxX2V4Y2goc3ApOwogCXN0cnVjdCBmY19lbHNfcmxzICpybHM7CiAJc3RydWN0IGZjX2Vsc19ybHNfcmVzcCAqcnNwOwogCXN0cnVjdCBmY19lbHNfbGVzYiAqbGVzYjsKIAlzdHJ1Y3QgZmNfc2VxX2Vsc19kYXRhIHJqdF9kYXRhOwogCXN0cnVjdCBmY19ob3N0X3N0YXRpc3RpY3MgKmhzdDsKLQl1MzIgZl9jdGw7CiAKIAlGQ19SUE9SVF9EQkcocmRhdGEsICJSZWNlaXZlZCBSTFMgcmVxdWVzdCB3aGlsZSBpbiBzdGF0ZSAlc1xuIiwKIAkJICAgICBmY19ycG9ydF9zdGF0ZShyZGF0YSkpOwpAQCAtMTE1NywxNiArMTM3OCwxMiBAQAogCQlsZXNiLT5sZXNiX2ludl9jcmMgPSBodG9ubChoc3QtPmludmFsaWRfY3JjX2NvdW50KTsKIAl9CiAKLQlzcCA9IGxwb3J0LT50dC5zZXFfc3RhcnRfbmV4dChzcCk7Ci0JZl9jdGwgPSBGQ19GQ19FWF9DVFggfCBGQ19GQ19MQVNUX1NFUSB8IEZDX0ZDX0VORF9TRVE7Ci0JZmNfZmlsbF9mY19oZHIoZnAsIEZDX1JDVExfRUxTX1JFUCwgZXAtPmRpZCwgZXAtPnNpZCwKLQkJICAgICAgIEZDX1RZUEVfRUxTLCBmX2N0bCwgMCk7Ci0JbHBvcnQtPnR0LnNlcV9zZW5kKGxwb3J0LCBzcCwgZnApOworCWZjX2ZpbGxfcmVwbHlfaGRyKGZwLCByeF9mcCwgRkNfUkNUTF9FTFNfUkVQLCAwKTsKKwlscG9ydC0+dHQuZnJhbWVfc2VuZChscG9ydCwgZnApOwogCWdvdG8gb3V0OwogCiBvdXRfcmp0OgotCXJqdF9kYXRhLmZwID0gTlVMTDsKLQlscG9ydC0+dHQuc2VxX2Vsc19yc3Bfc2VuZChzcCwgRUxTX0xTX1JKVCwgJnJqdF9kYXRhKTsKKwlscG9ydC0+dHQuc2VxX2Vsc19yc3Bfc2VuZChyeF9mcCwgRUxTX0xTX1JKVCwgJnJqdF9kYXRhKTsKIG91dDoKIAlmY19mcmFtZV9mcmVlKHJ4X2ZwKTsKIH0KQEAgLTExNzQsNyArMTM5MSw2IEBACiAvKioKICAqIGZjX3Jwb3J0X3JlY3ZfZWxzX3JlcSgpIC0gSGFuZGxlciBmb3IgdmFsaWRhdGVkIEVMUyByZXF1ZXN0cwogICogQGxwb3J0OiBUaGUgbG9jYWwgcG9ydCB0aGF0IHJlY2VpdmVkIHRoZSBFTFMgcmVxdWVzdAotICogQHNwOgkgICBUaGUgc2VxdWVuY2UgdGhhdCB0aGUgRUxTIHJlcXVlc3Qgd2FzIG9uCiAgKiBAZnA6CSAgIFRoZSBFTFMgcmVxdWVzdCBmcmFtZQogICoKICAqIEhhbmRsZSBpbmNvbWluZyBFTFMgcmVxdWVzdHMgdGhhdCByZXF1aXJlIHBvcnQgbG9naW4uCkBAIC0xMTgyLDIxICsxMzk4LDEzIEBACiAgKgogICogTG9ja2luZyBOb3RlOiBDYWxsZWQgd2l0aCB0aGUgbHBvcnQgbG9jayBoZWxkLgogICovCi1zdGF0aWMgdm9pZCBmY19ycG9ydF9yZWN2X2Vsc19yZXEoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwKLQkJCQkgIHN0cnVjdCBmY19zZXEgKnNwLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwKQorc3RhdGljIHZvaWQgZmNfcnBvcnRfcmVjdl9lbHNfcmVxKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsIHN0cnVjdCBmY19mcmFtZSAqZnApCiB7CiAJc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhOwotCXN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKmZoOwogCXN0cnVjdCBmY19zZXFfZWxzX2RhdGEgZWxzX2RhdGE7CiAKLQllbHNfZGF0YS5mcCA9IE5VTEw7Ci0JZWxzX2RhdGEucmVhc29uID0gRUxTX1JKVF9VTkFCOwotCWVsc19kYXRhLmV4cGxhbiA9IEVMU19FWFBMX1BMT0dJX1JFUUQ7Ci0KLQlmaCA9IGZjX2ZyYW1lX2hlYWRlcl9nZXQoZnApOwotCiAJbXV0ZXhfbG9jaygmbHBvcnQtPmRpc2MuZGlzY19tdXRleCk7Ci0JcmRhdGEgPSBscG9ydC0+dHQucnBvcnRfbG9va3VwKGxwb3J0LCBudG9oMjQoZmgtPmZoX3NfaWQpKTsKKwlyZGF0YSA9IGxwb3J0LT50dC5ycG9ydF9sb29rdXAobHBvcnQsIGZjX2ZyYW1lX3NpZChmcCkpOwogCWlmICghcmRhdGEpIHsKIAkJbXV0ZXhfdW5sb2NrKCZscG9ydC0+ZGlzYy5kaXNjX211dGV4KTsKIAkJZ290byByZWplY3Q7CkBAIC0xMjE3LDI0ICsxNDI1LDI0IEBACiAKIAlzd2l0Y2ggKGZjX2ZyYW1lX3BheWxvYWRfb3AoZnApKSB7CiAJY2FzZSBFTFNfUFJMSToKLQkJZmNfcnBvcnRfcmVjdl9wcmxpX3JlcShyZGF0YSwgc3AsIGZwKTsKKwkJZmNfcnBvcnRfcmVjdl9wcmxpX3JlcShyZGF0YSwgZnApOwogCQlicmVhazsKIAljYXNlIEVMU19QUkxPOgotCQlmY19ycG9ydF9yZWN2X3BybG9fcmVxKHJkYXRhLCBzcCwgZnApOworCQlmY19ycG9ydF9yZWN2X3BybG9fcmVxKHJkYXRhLCBmcCk7CiAJCWJyZWFrOwogCWNhc2UgRUxTX0FESVNDOgotCQlmY19ycG9ydF9yZWN2X2FkaXNjX3JlcShyZGF0YSwgc3AsIGZwKTsKKwkJZmNfcnBvcnRfcmVjdl9hZGlzY19yZXEocmRhdGEsIGZwKTsKIAkJYnJlYWs7CiAJY2FzZSBFTFNfUlJROgotCQllbHNfZGF0YS5mcCA9IGZwOwotCQlscG9ydC0+dHQuc2VxX2Vsc19yc3Bfc2VuZChzcCwgRUxTX1JSUSwgJmVsc19kYXRhKTsKKwkJbHBvcnQtPnR0LnNlcV9lbHNfcnNwX3NlbmQoZnAsIEVMU19SUlEsIE5VTEwpOworCQlmY19mcmFtZV9mcmVlKGZwKTsKIAkJYnJlYWs7CiAJY2FzZSBFTFNfUkVDOgotCQllbHNfZGF0YS5mcCA9IGZwOwotCQlscG9ydC0+dHQuc2VxX2Vsc19yc3Bfc2VuZChzcCwgRUxTX1JFQywgJmVsc19kYXRhKTsKKwkJbHBvcnQtPnR0LnNlcV9lbHNfcnNwX3NlbmQoZnAsIEVMU19SRUMsIE5VTEwpOworCQlmY19mcmFtZV9mcmVlKGZwKTsKIAkJYnJlYWs7CiAJY2FzZSBFTFNfUkxTOgotCQlmY19ycG9ydF9yZWN2X3Jsc19yZXEocmRhdGEsIHNwLCBmcCk7CisJCWZjX3Jwb3J0X3JlY3ZfcmxzX3JlcShyZGF0YSwgZnApOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlmY19mcmFtZV9mcmVlKGZwKTsJLyogY2FuJ3QgaGFwcGVuICovCkBAIC0xMjQ1LDM1ICsxNDUzLDM4IEBACiAJcmV0dXJuOwogCiByZWplY3Q6Ci0JbHBvcnQtPnR0LnNlcV9lbHNfcnNwX3NlbmQoc3AsIEVMU19MU19SSlQsICZlbHNfZGF0YSk7CisJZWxzX2RhdGEucmVhc29uID0gRUxTX1JKVF9VTkFCOworCWVsc19kYXRhLmV4cGxhbiA9IEVMU19FWFBMX1BMT0dJX1JFUUQ7CisJbHBvcnQtPnR0LnNlcV9lbHNfcnNwX3NlbmQoZnAsIEVMU19MU19SSlQsICZlbHNfZGF0YSk7CiAJZmNfZnJhbWVfZnJlZShmcCk7CiB9CiAKIC8qKgogICogZmNfcnBvcnRfcmVjdl9yZXEoKSAtIEhhbmRsZXIgZm9yIHJlcXVlc3RzCi0gKiBAc3A6CSAgIFRoZSBzZXF1ZW5jZSB0aGUgcmVxdWVzdCB3YXMgb24KLSAqIEBmcDoJICAgVGhlIHJlcXVlc3QgZnJhbWUKICAqIEBscG9ydDogVGhlIGxvY2FsIHBvcnQgdGhhdCByZWNlaXZlZCB0aGUgcmVxdWVzdAorICogQGZwOgkgICBUaGUgcmVxdWVzdCBmcmFtZQogICoKICAqIExvY2tpbmcgTm90ZTogQ2FsbGVkIHdpdGggdGhlIGxwb3J0IGxvY2sgaGVsZC4KICAqLwotdm9pZCBmY19ycG9ydF9yZWN2X3JlcShzdHJ1Y3QgZmNfc2VxICpzcCwgc3RydWN0IGZjX2ZyYW1lICpmcCwKLQkJICAgICAgIHN0cnVjdCBmY19scG9ydCAqbHBvcnQpCit2b2lkIGZjX3Jwb3J0X3JlY3ZfcmVxKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsIHN0cnVjdCBmY19mcmFtZSAqZnApCiB7CiAJc3RydWN0IGZjX3NlcV9lbHNfZGF0YSBlbHNfZGF0YTsKIAogCS8qCi0JICogSGFuZGxlIFBMT0dJIGFuZCBMT0dPIHJlcXVlc3RzIHNlcGFyYXRlbHksIHNpbmNlIHRoZXkKKwkgKiBIYW5kbGUgRkxPR0ksIFBMT0dJIGFuZCBMT0dPIHJlcXVlc3RzIHNlcGFyYXRlbHksIHNpbmNlIHRoZXkKIAkgKiBkb24ndCByZXF1aXJlIHByaW9yIGxvZ2luLgogCSAqIENoZWNrIGZvciB1bnN1cHBvcnRlZCBvcGNvZGVzIGZpcnN0IGFuZCByZWplY3QgdGhlbS4KIAkgKiBGb3Igc29tZSBvcHMsIGl0IHdvdWxkIGJlIGluY29ycmVjdCB0byByZWplY3Qgd2l0aCAiUExPR0kgcmVxdWlyZWQiLgogCSAqLwogCXN3aXRjaCAoZmNfZnJhbWVfcGF5bG9hZF9vcChmcCkpIHsKKwljYXNlIEVMU19GTE9HSToKKwkJZmNfcnBvcnRfcmVjdl9mbG9naV9yZXEobHBvcnQsIGZwKTsKKwkJYnJlYWs7CiAJY2FzZSBFTFNfUExPR0k6Ci0JCWZjX3Jwb3J0X3JlY3ZfcGxvZ2lfcmVxKGxwb3J0LCBzcCwgZnApOworCQlmY19ycG9ydF9yZWN2X3Bsb2dpX3JlcShscG9ydCwgZnApOwogCQlicmVhazsKIAljYXNlIEVMU19MT0dPOgotCQlmY19ycG9ydF9yZWN2X2xvZ29fcmVxKGxwb3J0LCBzcCwgZnApOworCQlmY19ycG9ydF9yZWN2X2xvZ29fcmVxKGxwb3J0LCBmcCk7CiAJCWJyZWFrOwogCWNhc2UgRUxTX1BSTEk6CiAJY2FzZSBFTFNfUFJMTzoKQEAgLTEyODEsMTQgKzE0OTIsMTMgQEAKIAljYXNlIEVMU19SUlE6CiAJY2FzZSBFTFNfUkVDOgogCWNhc2UgRUxTX1JMUzoKLQkJZmNfcnBvcnRfcmVjdl9lbHNfcmVxKGxwb3J0LCBzcCwgZnApOworCQlmY19ycG9ydF9yZWN2X2Vsc19yZXEobHBvcnQsIGZwKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZmNfZnJhbWVfZnJlZShmcCk7Ci0JCWVsc19kYXRhLmZwID0gTlVMTDsKIAkJZWxzX2RhdGEucmVhc29uID0gRUxTX1JKVF9VTlNVUDsKIAkJZWxzX2RhdGEuZXhwbGFuID0gRUxTX0VYUExfTk9ORTsKLQkJbHBvcnQtPnR0LnNlcV9lbHNfcnNwX3NlbmQoc3AsIEVMU19MU19SSlQsICZlbHNfZGF0YSk7CisJCWxwb3J0LT50dC5zZXFfZWxzX3JzcF9zZW5kKGZwLCBFTFNfTFNfUkpULCAmZWxzX2RhdGEpOworCQlmY19mcmFtZV9mcmVlKGZwKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtMTI5NiwyNiArMTUwNiwyMSBAQAogLyoqCiAgKiBmY19ycG9ydF9yZWN2X3Bsb2dpX3JlcSgpIC0gSGFuZGxlciBmb3IgUG9ydCBMb2dpbiAoUExPR0kpIHJlcXVlc3RzCiAgKiBAbHBvcnQ6IFRoZSBsb2NhbCBwb3J0IHRoYXQgcmVjZWl2ZWQgdGhlIFBMT0dJIHJlcXVlc3QKLSAqIEBzcDoJICAgVGhlIHNlcXVlbmNlIHRoYXQgdGhlIFBMT0dJIHJlcXVlc3Qgd2FzIG9uCiAgKiBAcnhfZnA6IFRoZSBQTE9HSSByZXF1ZXN0IGZyYW1lCiAgKgogICogTG9ja2luZyBOb3RlOiBUaGUgcnBvcnQgbG9jayBpcyBoZWxkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCiAgKi8KIHN0YXRpYyB2b2lkIGZjX3Jwb3J0X3JlY3ZfcGxvZ2lfcmVxKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsCi0JCQkJICAgIHN0cnVjdCBmY19zZXEgKnNwLCBzdHJ1Y3QgZmNfZnJhbWUgKnJ4X2ZwKQorCQkJCSAgICBzdHJ1Y3QgZmNfZnJhbWUgKnJ4X2ZwKQogewogCXN0cnVjdCBmY19kaXNjICpkaXNjOwogCXN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YTsKIAlzdHJ1Y3QgZmNfZnJhbWUgKmZwID0gcnhfZnA7Ci0Jc3RydWN0IGZjX2V4Y2ggKmVwOwotCXN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKmZoOwogCXN0cnVjdCBmY19lbHNfZmxvZ2kgKnBsOwogCXN0cnVjdCBmY19zZXFfZWxzX2RhdGEgcmp0X2RhdGE7Ci0JdTMyIHNpZCwgZl9jdGw7CisJdTMyIHNpZDsKIAotCXJqdF9kYXRhLmZwID0gTlVMTDsKLQlmaCA9IGZjX2ZyYW1lX2hlYWRlcl9nZXQoZnApOwotCXNpZCA9IG50b2gyNChmaC0+Zmhfc19pZCk7CisJc2lkID0gZmNfZnJhbWVfc2lkKGZwKTsKIAogCUZDX1JQT1JUX0lEX0RCRyhscG9ydCwgc2lkLCAiUmVjZWl2ZWQgUExPR0kgcmVxdWVzdFxuIik7CiAKQEAgLTEzNTgsNiArMTU2Myw5IEBACiAJY2FzZSBSUE9SVF9TVF9JTklUOgogCQlGQ19SUE9SVF9EQkcocmRhdGEsICJSZWNlaXZlZCBQTE9HSSBpbiBJTklUIHN0YXRlXG4iKTsKIAkJYnJlYWs7CisJY2FzZSBSUE9SVF9TVF9QTE9HSV9XQUlUOgorCQlGQ19SUE9SVF9EQkcocmRhdGEsICJSZWNlaXZlZCBQTE9HSSBpbiBQTE9HSV9XQUlUIHN0YXRlXG4iKTsKKwkJYnJlYWs7CiAJY2FzZSBSUE9SVF9TVF9QTE9HSToKIAkJRkNfUlBPUlRfREJHKHJkYXRhLCAiUmVjZWl2ZWQgUExPR0kgaW4gUExPR0kgc3RhdGVcbiIpOwogCQlpZiAocmRhdGEtPmlkcy5wb3J0X25hbWUgPCBscG9ydC0+d3dwbikgewpAQCAtMTM3NSw5ICsxNTgzLDggQEAKIAkJCSAgICAgIi0gaWdub3JlZCBmb3Igbm93XG4iLCByZGF0YS0+cnBfc3RhdGUpOwogCQkvKiBYWFggVEJEIC0gc2hvdWxkIHJlc2V0ICovCiAJCWJyZWFrOworCWNhc2UgUlBPUlRfU1RfRkxPR0k6CiAJY2FzZSBSUE9SVF9TVF9ERUxFVEU6Ci0JY2FzZSBSUE9SVF9TVF9MT0dPOgotCWNhc2UgUlBPUlRfU1RfUkVTVEFSVDoKIAkJRkNfUlBPUlRfREJHKHJkYXRhLCAiUmVjZWl2ZWQgUExPR0kgaW4gc3RhdGUgJXMgLSBzZW5kIGJ1c3lcbiIsCiAJCQkgICAgIGZjX3Jwb3J0X3N0YXRlKHJkYXRhKSk7CiAJCW11dGV4X3VubG9jaygmcmRhdGEtPnJwX211dGV4KTsKQEAgLTEzOTAsNTAgKzE1OTcsNDEgQEAKIAkgKiBHZXQgc2Vzc2lvbiBwYXlsb2FkIHNpemUgZnJvbSBpbmNvbWluZyBQTE9HSS4KIAkgKi8KIAlyZGF0YS0+bWF4ZnJhbWVfc2l6ZSA9IGZjX3Bsb2dpX2dldF9tYXhmcmFtZShwbCwgbHBvcnQtPm1mcyk7Ci0JZmNfZnJhbWVfZnJlZShyeF9mcCk7CiAKIAkvKgogCSAqIFNlbmQgTFNfQUNDLgkgSWYgdGhpcyBmYWlscywgdGhlIG9yaWdpbmF0b3Igc2hvdWxkIHJldHJ5LgogCSAqLwotCXNwID0gbHBvcnQtPnR0LnNlcV9zdGFydF9uZXh0KHNwKTsKLQlpZiAoIXNwKQotCQlnb3RvIG91dDsKIAlmcCA9IGZjX2ZyYW1lX2FsbG9jKGxwb3J0LCBzaXplb2YoKnBsKSk7CiAJaWYgKCFmcCkKIAkJZ290byBvdXQ7CiAKIAlmY19wbG9naV9maWxsKGxwb3J0LCBmcCwgRUxTX0xTX0FDQyk7Ci0JZl9jdGwgPSBGQ19GQ19FWF9DVFggfCBGQ19GQ19MQVNUX1NFUSB8IEZDX0ZDX0VORF9TRVEgfCBGQ19GQ19TRVFfSU5JVDsKLQllcCA9IGZjX3NlcV9leGNoKHNwKTsKLQlmY19maWxsX2ZjX2hkcihmcCwgRkNfUkNUTF9FTFNfUkVQLCBlcC0+ZGlkLCBlcC0+c2lkLAotCQkgICAgICAgRkNfVFlQRV9FTFMsIGZfY3RsLCAwKTsKLQlscG9ydC0+dHQuc2VxX3NlbmQobHBvcnQsIHNwLCBmcCk7CisJZmNfZmlsbF9yZXBseV9oZHIoZnAsIHJ4X2ZwLCBGQ19SQ1RMX0VMU19SRVAsIDApOworCWxwb3J0LT50dC5mcmFtZV9zZW5kKGxwb3J0LCBmcCk7CiAJZmNfcnBvcnRfZW50ZXJfcHJsaShyZGF0YSk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOworCWZjX2ZyYW1lX2ZyZWUocnhfZnApOwogCXJldHVybjsKIAogcmVqZWN0OgotCWxwb3J0LT50dC5zZXFfZWxzX3JzcF9zZW5kKHNwLCBFTFNfTFNfUkpULCAmcmp0X2RhdGEpOworCWxwb3J0LT50dC5zZXFfZWxzX3JzcF9zZW5kKGZwLCBFTFNfTFNfUkpULCAmcmp0X2RhdGEpOwogCWZjX2ZyYW1lX2ZyZWUoZnApOwogfQogCiAvKioKICAqIGZjX3Jwb3J0X3JlY3ZfcHJsaV9yZXEoKSAtIEhhbmRsZXIgZm9yIHByb2Nlc3MgbG9naW4gKFBSTEkpIHJlcXVlc3RzCiAgKiBAcmRhdGE6IFRoZSByZW1vdGUgcG9ydCB0aGF0IHNlbnQgdGhlIFBSTEkgcmVxdWVzdAotICogQHNwOgkgICBUaGUgc2VxdWVuY2UgdGhhdCB0aGUgUFJMSSB3YXMgb24KICAqIEByeF9mcDogVGhlIFBSTEkgcmVxdWVzdCBmcmFtZQogICoKICAqIExvY2tpbmcgTm90ZTogVGhlIHJwb3J0IGxvY2sgaXMgZXhlY3RlZCB0byBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nCiAgKiB0aGlzIGZ1bmN0aW9uLgogICovCiBzdGF0aWMgdm9pZCBmY19ycG9ydF9yZWN2X3BybGlfcmVxKHN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YSwKLQkJCQkgICBzdHJ1Y3QgZmNfc2VxICpzcCwgc3RydWN0IGZjX2ZyYW1lICpyeF9mcCkKKwkJCQkgICBzdHJ1Y3QgZmNfZnJhbWUgKnJ4X2ZwKQogewogCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSByZGF0YS0+bG9jYWxfcG9ydDsKLQlzdHJ1Y3QgZmNfZXhjaCAqZXA7CiAJc3RydWN0IGZjX2ZyYW1lICpmcDsKLQlzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmaDsKIAlzdHJ1Y3QgewogCQlzdHJ1Y3QgZmNfZWxzX3BybGkgcHJsaTsKIAkJc3RydWN0IGZjX2Vsc19zcHAgc3BwOwpAQCAtMTQ0NCwxNyArMTY0MiwxMyBAQAogCXVuc2lnbmVkIGludCBwbGVuOwogCWVudW0gZmNfZWxzX3NwcF9yZXNwIHJlc3A7CiAJc3RydWN0IGZjX3NlcV9lbHNfZGF0YSByanRfZGF0YTsKLQl1MzIgZl9jdGw7CiAJdTMyIGZjcF9wYXJtOwogCXUzMiByb2xlcyA9IEZDX1JQT1JUX1JPTEVfVU5LTk9XTjsKIAotCXJqdF9kYXRhLmZwID0gTlVMTDsKLQlmaCA9IGZjX2ZyYW1lX2hlYWRlcl9nZXQocnhfZnApOwotCiAJRkNfUlBPUlRfREJHKHJkYXRhLCAiUmVjZWl2ZWQgUFJMSSByZXF1ZXN0IHdoaWxlIGluIHN0YXRlICVzXG4iLAogCQkgICAgIGZjX3Jwb3J0X3N0YXRlKHJkYXRhKSk7CiAKLQlsZW4gPSBmcl9sZW4ocnhfZnApIC0gc2l6ZW9mKCpmaCk7CisJbGVuID0gZnJfbGVuKHJ4X2ZwKSAtIHNpemVvZihzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyKTsKIAlwcCA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KHJ4X2ZwLCBzaXplb2YoKnBwKSk7CiAJaWYgKCFwcCkKIAkJZ290byByZWplY3RfbGVuOwpAQCAtMTQ3NSw4ICsxNjY5LDYgQEAKIAkJcmp0X2RhdGEuZXhwbGFuID0gRUxTX0VYUExfSU5TVUZfUkVTOwogCQlnb3RvIHJlamVjdDsKIAl9Ci0Jc3AgPSBscG9ydC0+dHQuc2VxX3N0YXJ0X25leHQoc3ApOwotCVdBUk5fT04oIXNwKTsKIAlwcCA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KGZwLCBsZW4pOwogCVdBUk5fT04oIXBwKTsKIAltZW1zZXQocHAsIDAsIGxlbik7CkBAIC0xNTI5LDEyICsxNzIxLDggQEAKIAkvKgogCSAqIFNlbmQgTFNfQUNDLgkgSWYgdGhpcyBmYWlscywgdGhlIG9yaWdpbmF0b3Igc2hvdWxkIHJldHJ5LgogCSAqLwotCWZfY3RsID0gRkNfRkNfRVhfQ1RYIHwgRkNfRkNfTEFTVF9TRVE7Ci0JZl9jdGwgfD0gRkNfRkNfRU5EX1NFUSB8IEZDX0ZDX1NFUV9JTklUOwotCWVwID0gZmNfc2VxX2V4Y2goc3ApOwotCWZjX2ZpbGxfZmNfaGRyKGZwLCBGQ19SQ1RMX0VMU19SRVAsIGVwLT5kaWQsIGVwLT5zaWQsCi0JCSAgICAgICBGQ19UWVBFX0VMUywgZl9jdGwsIDApOwotCWxwb3J0LT50dC5zZXFfc2VuZChscG9ydCwgc3AsIGZwKTsKKwlmY19maWxsX3JlcGx5X2hkcihmcCwgcnhfZnAsIEZDX1JDVExfRUxTX1JFUCwgMCk7CisJbHBvcnQtPnR0LmZyYW1lX3NlbmQobHBvcnQsIGZwKTsKIAogCXN3aXRjaCAocmRhdGEtPnJwX3N0YXRlKSB7CiAJY2FzZSBSUE9SVF9TVF9QUkxJOgpAQCAtMTU0OSw3ICsxNzM3LDcgQEAKIAlyanRfZGF0YS5yZWFzb24gPSBFTFNfUkpUX1BST1Q7CiAJcmp0X2RhdGEuZXhwbGFuID0gRUxTX0VYUExfSU5WX0xFTjsKIHJlamVjdDoKLQlscG9ydC0+dHQuc2VxX2Vsc19yc3Bfc2VuZChzcCwgRUxTX0xTX1JKVCwgJnJqdF9kYXRhKTsKKwlscG9ydC0+dHQuc2VxX2Vsc19yc3Bfc2VuZChyeF9mcCwgRUxTX0xTX1JKVCwgJnJqdF9kYXRhKTsKIGRyb3A6CiAJZmNfZnJhbWVfZnJlZShyeF9mcCk7CiB9CkBAIC0xNTU3LDU0ICsxNzQ1LDkwIEBACiAvKioKICAqIGZjX3Jwb3J0X3JlY3ZfcHJsb19yZXEoKSAtIEhhbmRsZXIgZm9yIHByb2Nlc3MgbG9nb3V0IChQUkxPKSByZXF1ZXN0cwogICogQHJkYXRhOiBUaGUgcmVtb3RlIHBvcnQgdGhhdCBzZW50IHRoZSBQUkxPIHJlcXVlc3QKLSAqIEBzcDoJICAgVGhlIHNlcXVlbmNlIHRoYXQgdGhlIFBSTE8gd2FzIG9uCi0gKiBAZnA6CSAgIFRoZSBQUkxPIHJlcXVlc3QgZnJhbWUKKyAqIEByeF9mcDogVGhlIFBSTE8gcmVxdWVzdCBmcmFtZQogICoKICAqIExvY2tpbmcgTm90ZTogVGhlIHJwb3J0IGxvY2sgaXMgZXhlY3RlZCB0byBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nCiAgKiB0aGlzIGZ1bmN0aW9uLgogICovCiBzdGF0aWMgdm9pZCBmY19ycG9ydF9yZWN2X3BybG9fcmVxKHN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YSwKLQkJCQkgICBzdHJ1Y3QgZmNfc2VxICpzcCwKLQkJCQkgICBzdHJ1Y3QgZmNfZnJhbWUgKmZwKQorCQkJCSAgIHN0cnVjdCBmY19mcmFtZSAqcnhfZnApCiB7CiAJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IHJkYXRhLT5sb2NhbF9wb3J0OwotCi0Jc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqZmg7CisJc3RydWN0IGZjX2ZyYW1lICpmcDsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgZmNfZWxzX3BybG8gcHJsbzsKKwkJc3RydWN0IGZjX2Vsc19zcHAgc3BwOworCX0gKnBwOworCXN0cnVjdCBmY19lbHNfc3BwICpyc3BwOwkvKiByZXF1ZXN0IHNlcnZpY2UgcGFyYW0gcGFnZSAqLworCXN0cnVjdCBmY19lbHNfc3BwICpzcHA7CQkvKiByZXNwb25zZSBzcHAgKi8KKwl1bnNpZ25lZCBpbnQgbGVuOworCXVuc2lnbmVkIGludCBwbGVuOwogCXN0cnVjdCBmY19zZXFfZWxzX2RhdGEgcmp0X2RhdGE7CiAKLQlmaCA9IGZjX2ZyYW1lX2hlYWRlcl9nZXQoZnApOwotCiAJRkNfUlBPUlRfREJHKHJkYXRhLCAiUmVjZWl2ZWQgUFJMTyByZXF1ZXN0IHdoaWxlIGluIHN0YXRlICVzXG4iLAogCQkgICAgIGZjX3Jwb3J0X3N0YXRlKHJkYXRhKSk7CiAKLQlyanRfZGF0YS5mcCA9IE5VTEw7Ci0Jcmp0X2RhdGEucmVhc29uID0gRUxTX1JKVF9VTkFCOwotCXJqdF9kYXRhLmV4cGxhbiA9IEVMU19FWFBMX05PTkU7Ci0JbHBvcnQtPnR0LnNlcV9lbHNfcnNwX3NlbmQoc3AsIEVMU19MU19SSlQsICZyanRfZGF0YSk7Ci0JZmNfZnJhbWVfZnJlZShmcCk7CisJbGVuID0gZnJfbGVuKHJ4X2ZwKSAtIHNpemVvZihzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyKTsKKwlwcCA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KHJ4X2ZwLCBzaXplb2YoKnBwKSk7CisJaWYgKCFwcCkKKwkJZ290byByZWplY3RfbGVuOworCXBsZW4gPSBudG9ocyhwcC0+cHJsby5wcmxvX2xlbik7CisJaWYgKHBsZW4gIT0gMjApCisJCWdvdG8gcmVqZWN0X2xlbjsKKwlpZiAocGxlbiA8IGxlbikKKwkJbGVuID0gcGxlbjsKKworCXJzcHAgPSAmcHAtPnNwcDsKKworCWZwID0gZmNfZnJhbWVfYWxsb2MobHBvcnQsIGxlbik7CisJaWYgKCFmcCkgeworCQlyanRfZGF0YS5yZWFzb24gPSBFTFNfUkpUX1VOQUI7CisJCXJqdF9kYXRhLmV4cGxhbiA9IEVMU19FWFBMX0lOU1VGX1JFUzsKKwkJZ290byByZWplY3Q7CisJfQorCisJcHAgPSBmY19mcmFtZV9wYXlsb2FkX2dldChmcCwgbGVuKTsKKwlXQVJOX09OKCFwcCk7CisJbWVtc2V0KHBwLCAwLCBsZW4pOworCXBwLT5wcmxvLnBybG9fY21kID0gRUxTX0xTX0FDQzsKKwlwcC0+cHJsby5wcmxvX29icyA9IDB4MTA7CisJcHAtPnBybG8ucHJsb19sZW4gPSBodG9ucyhsZW4pOworCXNwcCA9ICZwcC0+c3BwOworCXNwcC0+c3BwX3R5cGUgPSByc3BwLT5zcHBfdHlwZTsKKwlzcHAtPnNwcF90eXBlX2V4dCA9IHJzcHAtPnNwcF90eXBlX2V4dDsKKwlzcHAtPnNwcF9mbGFncyA9IEZDX1NQUF9SRVNQX0FDSzsKKworCWZjX3Jwb3J0X2VudGVyX2RlbGV0ZShyZGF0YSwgUlBPUlRfRVZfTE9HTyk7CisKKwlmY19maWxsX3JlcGx5X2hkcihmcCwgcnhfZnAsIEZDX1JDVExfRUxTX1JFUCwgMCk7CisJbHBvcnQtPnR0LmZyYW1lX3NlbmQobHBvcnQsIGZwKTsKKwlnb3RvIGRyb3A7CisKK3JlamVjdF9sZW46CisJcmp0X2RhdGEucmVhc29uID0gRUxTX1JKVF9QUk9UOworCXJqdF9kYXRhLmV4cGxhbiA9IEVMU19FWFBMX0lOVl9MRU47CityZWplY3Q6CisJbHBvcnQtPnR0LnNlcV9lbHNfcnNwX3NlbmQocnhfZnAsIEVMU19MU19SSlQsICZyanRfZGF0YSk7Citkcm9wOgorCWZjX2ZyYW1lX2ZyZWUocnhfZnApOwogfQogCiAvKioKICAqIGZjX3Jwb3J0X3JlY3ZfbG9nb19yZXEoKSAtIEhhbmRsZXIgZm9yIGxvZ291dCAoTE9HTykgcmVxdWVzdHMKICAqIEBscG9ydDogVGhlIGxvY2FsIHBvcnQgdGhhdCByZWNlaXZlZCB0aGUgTE9HTyByZXF1ZXN0Ci0gKiBAc3A6CSAgIFRoZSBzZXF1ZW5jZSB0aGF0IHRoZSBMT0dPIHJlcXVlc3Qgd2FzIG9uCiAgKiBAZnA6CSAgIFRoZSBMT0dPIHJlcXVlc3QgZnJhbWUKICAqCiAgKiBMb2NraW5nIE5vdGU6IFRoZSBycG9ydCBsb2NrIGlzIGV4ZWN0ZWQgdG8gYmUgaGVsZCBiZWZvcmUgY2FsbGluZwogICogdGhpcyBmdW5jdGlvbi4KICAqLwotc3RhdGljIHZvaWQgZmNfcnBvcnRfcmVjdl9sb2dvX3JlcShzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LAotCQkJCSAgIHN0cnVjdCBmY19zZXEgKnNwLAotCQkJCSAgIHN0cnVjdCBmY19mcmFtZSAqZnApCitzdGF0aWMgdm9pZCBmY19ycG9ydF9yZWN2X2xvZ29fcmVxKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsIHN0cnVjdCBmY19mcmFtZSAqZnApCiB7Ci0Jc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqZmg7CiAJc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhOwogCXUzMiBzaWQ7CiAKLQlscG9ydC0+dHQuc2VxX2Vsc19yc3Bfc2VuZChzcCwgRUxTX0xTX0FDQywgTlVMTCk7CisJbHBvcnQtPnR0LnNlcV9lbHNfcnNwX3NlbmQoZnAsIEVMU19MU19BQ0MsIE5VTEwpOwogCi0JZmggPSBmY19mcmFtZV9oZWFkZXJfZ2V0KGZwKTsKLQlzaWQgPSBudG9oMjQoZmgtPmZoX3NfaWQpOworCXNpZCA9IGZjX2ZyYW1lX3NpZChmcCk7CiAKIAltdXRleF9sb2NrKCZscG9ydC0+ZGlzYy5kaXNjX211dGV4KTsKIAlyZGF0YSA9IGxwb3J0LT50dC5ycG9ydF9sb29rdXAobHBvcnQsIHNpZCk7CkBAIC0xNjE0LDEzICsxODM4LDYgQEAKIAkJCSAgICAgZmNfcnBvcnRfc3RhdGUocmRhdGEpKTsKIAogCQlmY19ycG9ydF9lbnRlcl9kZWxldGUocmRhdGEsIFJQT1JUX0VWX0xPR08pOwotCi0JCS8qCi0JCSAqIElmIHRoZSByZW1vdGUgcG9ydCB3YXMgY3JlYXRlZCBkdWUgdG8gZGlzY292ZXJ5LCBzZXQgc3RhdGUKLQkJICogdG8gbG9nIGJhY2sgaW4uICBJdCBtYXkgaGF2ZSBzZWVuIGEgc3RhbGUgUlNDTiBhYm91dCB1cy4KLQkJICovCi0JCWlmIChyZGF0YS0+ZGlzY19pZCkKLQkJCWZjX3Jwb3J0X3N0YXRlX2VudGVyKHJkYXRhLCBSUE9SVF9TVF9SRVNUQVJUKTsKIAkJbXV0ZXhfdW5sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOwogCX0gZWxzZQogCQlGQ19SUE9SVF9JRF9EQkcobHBvcnQsIHNpZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2F0YS5jIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMKaW5kZXggOGM0OTZiNS4uMDQyMTUzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMKQEAgLTcxLDcgKzcxLDcgQEAKIAkJY2FzZSBTQVNfU0dfRVJSOgogCQkJcmV0dXJuIEFDX0VSUl9JTlZBTElEOwogCi0JCWNhc2UgU0FNX0NIRUNLX0NPTkQ6CisJCWNhc2UgU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OOgogCQljYXNlIFNBU19PUEVOX1RPOgogCQljYXNlIFNBU19PUEVOX1JFSkVDVDoKIAkJCVNBU19EUFJJTlRLKCIlczogU2F3IGVycm9yICVkLiAgV2hhdCB0byBkbz9cbiIsCkBAIC0xMDcsNyArMTA3LDcgQEAKIAlzYXNfaGEgPSBkZXYtPnBvcnQtPmhhOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoZGV2LT5zYXRhX2Rldi5hcC0+bG9jaywgZmxhZ3MpOwotCWlmIChzdGF0LT5zdGF0ID09IFNBU19QUk9UT19SRVNQT05TRSB8fCBzdGF0LT5zdGF0ID09IFNBTV9HT09EKSB7CisJaWYgKHN0YXQtPnN0YXQgPT0gU0FTX1BST1RPX1JFU1BPTlNFIHx8IHN0YXQtPnN0YXQgPT0gU0FNX1NUQVRfR09PRCkgewogCQlhdGFfdGZfZnJvbV9maXMocmVzcC0+ZW5kaW5nX2ZpcywgJmRldi0+c2F0YV9kZXYudGYpOwogCQlxYy0+ZXJyX21hc2sgfD0gYWNfZXJyX21hc2soZGV2LT5zYXRhX2Rldi50Zi5jb21tYW5kKTsKIAkJZGV2LT5zYXRhX2Rldi5zc3RhdHVzID0gcmVzcC0+c3N0YXR1czsKQEAgLTUxMSwxMiArNTExLDEyIEBACiAJCQkJCWdvdG8gZXhfZXJyOwogCQkJfQogCQl9Ci0JCWlmICh0YXNrLT50YXNrX3N0YXR1cy5zdGF0ID09IFNBTV9CVVNZIHx8Ci0JCQkgICB0YXNrLT50YXNrX3N0YXR1cy5zdGF0ID09IFNBTV9UQVNLX1NFVF9GVUxMIHx8CisJCWlmICh0YXNrLT50YXNrX3N0YXR1cy5zdGF0ID09IFNBTV9TVEFUX0JVU1kgfHwKKwkJCSAgIHRhc2stPnRhc2tfc3RhdHVzLnN0YXQgPT0gU0FNX1NUQVRfVEFTS19TRVRfRlVMTCB8fAogCQkJICAgdGFzay0+dGFza19zdGF0dXMuc3RhdCA9PSBTQVNfUVVFVUVfRlVMTCkgewogCQkJU0FTX0RQUklOVEsoInRhc2s6IHEgYnVzeSwgc2xlZXBpbmcuLi5cbiIpOwogCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKEhaKTsKLQkJfSBlbHNlIGlmICh0YXNrLT50YXNrX3N0YXR1cy5zdGF0ID09IFNBTV9DSEVDS19DT05EKSB7CisJCX0gZWxzZSBpZiAodGFzay0+dGFza19zdGF0dXMuc3RhdCA9PSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT04pIHsKIAkJCXN0cnVjdCBzY3NpX3NlbnNlX2hkciBzaGRyOwogCiAJCQlpZiAoIXNjc2lfbm9ybWFsaXplX3NlbnNlKHRzLT5idWYsIHRzLT5idWZfdmFsaWRfc2l6ZSwKQEAgLTU0OSw3ICs1NDksNyBAQAogCQkJCQkgICAgc2hkci5hc2MsIHNoZHIuYXNjcSk7CiAJCQl9CiAJCX0gZWxzZSBpZiAodGFzay0+dGFza19zdGF0dXMucmVzcCAhPSBTQVNfVEFTS19DT01QTEVURSB8fAotCQkJICAgdGFzay0+dGFza19zdGF0dXMuc3RhdCAhPSBTQU1fR09PRCkgeworCQkJICAgdGFzay0+dGFza19zdGF0dXMuc3RhdCAhPSBTQU1fU1RBVF9HT09EKSB7CiAJCQlTQVNfRFBSSU5USygidGFzayBmaW5pc2hlZCB3aXRoIHJlc3A6MHgleCwgIgogCQkJCSAgICAic3RhdDoweCV4XG4iLAogCQkJCSAgICB0YXNrLT50YXNrX3N0YXR1cy5yZXNwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfZXhwYW5kZXIuYyBiL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmMKaW5kZXggYzY1YWYwMi4uODNkZDUwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfZXhwYW5kZXIuYworKysgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIAkJCX0KIAkJfQogCQlpZiAodGFzay0+dGFza19zdGF0dXMucmVzcCA9PSBTQVNfVEFTS19DT01QTEVURSAmJgotCQkgICAgdGFzay0+dGFza19zdGF0dXMuc3RhdCA9PSBTQU1fR09PRCkgeworCQkgICAgdGFzay0+dGFza19zdGF0dXMuc3RhdCA9PSBTQU1fU1RBVF9HT09EKSB7CiAJCQlyZXMgPSAwOwogCQkJYnJlYWs7CiAJCX0gaWYgKHRhc2stPnRhc2tfc3RhdHVzLnJlc3AgPT0gU0FTX1RBU0tfQ09NUExFVEUgJiYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMKaW5kZXggYTc4OTBjNi4uZjBjZmJhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMKQEAgLTExMywxMCArMTEzLDEwIEBACiAJCWNhc2UgU0FTX0FCT1JURURfVEFTSzoKIAkJCWhzID0gRElEX0FCT1JUOwogCQkJYnJlYWs7Ci0JCWNhc2UgU0FNX0NIRUNLX0NPTkQ6CisJCWNhc2UgU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OOgogCQkJbWVtY3B5KHNjLT5zZW5zZV9idWZmZXIsIHRzLT5idWYsCiAJCQkgICAgICAgbWluKFNDU0lfU0VOU0VfQlVGRkVSU0laRSwgdHMtPmJ1Zl92YWxpZF9zaXplKSk7Ci0JCQlzdGF0ID0gU0FNX0NIRUNLX0NPTkQ7CisJCQlzdGF0ID0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlzdGF0ID0gdHMtPnN0YXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc190YXNrLmMgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc190YXNrLmMKaW5kZXggNTk0NTI0ZC4uYjEzYTMzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfdGFzay5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Rhc2suYwpAQCAtMTUsMTMgKzE1LDEzIEBACiAJZWxzZSBpZiAoaXUtPmRhdGFwcmVzID09IDEpCiAJCXRzdGF0LT5zdGF0ID0gaXUtPnJlc3BfZGF0YVszXTsKIAllbHNlIGlmIChpdS0+ZGF0YXByZXMgPT0gMikgewotCQl0c3RhdC0+c3RhdCA9IFNBTV9DSEVDS19DT05EOworCQl0c3RhdC0+c3RhdCA9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKIAkJdHN0YXQtPmJ1Zl92YWxpZF9zaXplID0KIAkJCW1pbl90KGludCwgU0FTX1NUQVRVU19CVUZfU0laRSwKIAkJCSAgICAgIGJlMzJfdG9fY3B1KGl1LT5zZW5zZV9kYXRhX2xlbikpOwogCQltZW1jcHkodHN0YXQtPmJ1ZiwgaXUtPnNlbnNlX2RhdGEsIHRzdGF0LT5idWZfdmFsaWRfc2l6ZSk7CiAKLQkJaWYgKGl1LT5zdGF0dXMgIT0gU0FNX0NIRUNLX0NPTkQpCisJCWlmIChpdS0+c3RhdHVzICE9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTikKIAkJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCBkZXYsCiAJCQkJICAgImRldiAlbGx4IHNlbnQgc2Vuc2UgZGF0YSwgYnV0ICIKIAkJCQkgICAic3RhdCgleCkgaXMgbm90IENIRUNLIENPTkRJVElPTlxuIiwKQEAgLTMwLDcgKzMwLDcgQEAKIAl9CiAJZWxzZQogCQkvKiB3aGVuIGRhdGFwcmVzIGNvbnRhaW5zIGNvcnJ1cHQvdW5rbm93biB2YWx1ZS4uLiAqLwotCQl0c3RhdC0+c3RhdCA9IFNBTV9DSEVDS19DT05EOworCQl0c3RhdC0+c3RhdCA9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNhc19zc3BfdGFza19yZXNwb25zZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaAppbmRleCBlMzVhNGM3Li4zNDgyZDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmYy5oCkBAIC0yMCw3ICsyMCw2IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+Ci0KIHN0cnVjdCBscGZjX3NsaTJfc2xpbTsKIAogI2RlZmluZSBMUEZDX1BDSV9ERVZfTFAJCTB4MQpAQCAtNDksNyArNDgsNyBAQAogI2RlZmluZSBMUEZDX1RHVFFfSU5URVJWQUwJNDAwMDAJLyogTWluIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gdGd0CiAJCQkJCSAgIHF1ZXVlIGRlcHRoIGNoYW5nZSBpbiBtaWxsaXNlY3MgKi8KICNkZWZpbmUgTFBGQ19UR1RRX1JBTVBVUF9QQ0VOVAk1CS8qIFRhcmdldCBxdWV1ZSByYW1wdXAgaW4gcGVyY2VudGFnZSAqLwotI2RlZmluZSBMUEZDX01JTl9UR1RfUURFUFRICTEwMAorI2RlZmluZSBMUEZDX01JTl9UR1RfUURFUFRICTEwCiAjZGVmaW5lIExQRkNfTUFYX1RHVF9RREVQVEgJMHhGRkZGCiAKICNkZWZpbmUgIExQRkNfTUFYX0JVQ0tFVF9DT1VOVCAyMAkvKiBNYXhpbXVtIG5vLiBvZiBidWNrZXRzIGZvciBzdGF0IGRhdGEKQEAgLTM3Niw2ICszNzUsNyBAQAogI2RlZmluZSBXT1JLRVJfRkFCUklDX0JMT0NLX1RNTyAgICAgICAgMHg0MDAJLyogaGJhOiBmYWJyaWMgYmxvY2sgdGltZW91dCAqLwogI2RlZmluZSBXT1JLRVJfUkFNUF9ET1dOX1FVRVVFICAgICAgICAgMHg4MDAJLyogaGJhOiBEZWNyZWFzZSBRIGRlcHRoICovCiAjZGVmaW5lIFdPUktFUl9SQU1QX1VQX1FVRVVFICAgICAgICAgICAweDEwMDAJLyogaGJhOiBJbmNyZWFzZSBRIGRlcHRoICovCisjZGVmaW5lIFdPUktFUl9TRVJWSUNFX1RYUSAgICAgICAgICAgICAweDIwMDAJLyogaGJhOiBJT0NCcyBvbiB0aGUgdHhxICovCiAKIAlzdHJ1Y3QgdGltZXJfbGlzdCBmY19mZG1pdG1vOwogCXN0cnVjdCB0aW1lcl9saXN0IGVsc190bW9mdW5jOwpAQCAtNDAwLDYgKzQwMCw3IEBACiAJdWludDMyX3QgY2ZnX21heF9sdW5zOwogCXVpbnQzMl90IGNmZ19lbmFibGVfZGFfaWQ7CiAJdWludDMyX3QgY2ZnX21heF9zY3NpY21wbF90aW1lOworCXVpbnQzMl90IGNmZ190Z3RfcXVldWVfZGVwdGg7CiAKIAl1aW50MzJfdCBkZXZfbG9zc190bW9fY2hhbmdlZDsKIApAQCAtNTEwLDkgKzUxMSw5IEBACiAJdm9pZCAoKmxwZmNfc3RvcF9wb3J0KQogCQkoc3RydWN0IGxwZmNfaGJhICopOwogCWludCAoKmxwZmNfaGJhX2luaXRfbGluaykKLQkJKHN0cnVjdCBscGZjX2hiYSAqKTsKKwkJKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MzJfdCk7CiAJaW50ICgqbHBmY19oYmFfZG93bl9saW5rKQotCQkoc3RydWN0IGxwZmNfaGJhICopOworCQkoc3RydWN0IGxwZmNfaGJhICosIHVpbnQzMl90KTsKIAogCS8qIFNMSTQgc3BlY2lmaWMgSEJBIGRhdGEgc3RydWN0dXJlICovCiAJc3RydWN0IGxwZmNfc2xpNF9oYmEgc2xpNF9oYmE7CkBAIC01MjUsNyArNTI2LDYgQEAKICNkZWZpbmUgTFBGQ19TTEkzX05QSVZfRU5BQkxFRAkJMHgwMgogI2RlZmluZSBMUEZDX1NMSTNfVlBPUlRfVEVBUkRPV04JMHgwNAogI2RlZmluZSBMUEZDX1NMSTNfQ1JQX0VOQUJMRUQJCTB4MDgKLSNkZWZpbmUgTFBGQ19TTEkzX0lOQl9FTkFCTEVECQkweDEwCiAjZGVmaW5lIExQRkNfU0xJM19CR19FTkFCTEVECQkweDIwCiAjZGVmaW5lIExQRkNfU0xJM19EU1NfRU5BQkxFRAkJMHg0MAogCXVpbnQzMl90IGlvY2JfY21kX3NpemU7CkBAIC01NTcsOSArNTU3LDYgQEAKIAogCU1BSUxCT1hfdCAqbWJveDsKIAl1aW50MzJfdCAqbWJveF9leHQ7Ci0JdWludDMyX3QgKmluYl9oYV9jb3B5OwotCXVpbnQzMl90ICppbmJfY291bnRlcjsKLQl1aW50MzJfdCBpbmJfbGFzdF9jb3VudGVyOwogCXVpbnQzMl90IGhhX2NvcHk7CiAJc3RydWN0IF9QQ0IgKnBjYjsKIAlzdHJ1Y3QgX0lPQ0IgKklPQ0JzOwpAQCAtNjI4LDYgKzYyNSw3IEBACiAJdWludDMyX3QgY2ZnX2hvc3RtZW1faGdwOwogCXVpbnQzMl90IGNmZ19sb2dfdmVyYm9zZTsKIAl1aW50MzJfdCBjZmdfYWVyX3N1cHBvcnQ7CisJdWludDMyX3QgY2ZnX2lvY2JfY250OwogCXVpbnQzMl90IGNmZ19zdXBwcmVzc19saW5rX3VwOwogI2RlZmluZSBMUEZDX0lOSVRJQUxJWkVfTElOSyAgICAgICAgICAgICAgMAkvKiBkbyBub3JtYWwgaW5pdF9saW5rIG1ib3ggKi8KICNkZWZpbmUgTFBGQ19ERUxBWV9JTklUX0xJTksgICAgICAgICAgICAgIDEJLyogbGF5ZXJlZCBkcml2ZXIgaG9sZCBvZmYgKi8KQEAgLTgxNiw2ICs4MTQsOSBAQAogCiAJdWludDhfdCBtZW5sb19mbGFnOwkvKiBtZW5sbyBnZW5lcmljIGZsYWdzICovCiAjZGVmaW5lIEhCQV9NRU5MT19TVVBQT1JUCTB4MSAvKiBIQkEgc3VwcG9ydHMgbWVubG8gY29tbWFuZHMgKi8KKwl1aW50MzJfdCBpb2NiX2NudDsKKwl1aW50MzJfdCBpb2NiX21heDsKKwlhdG9taWNfdCBzZGV2X2NudDsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IFNjc2lfSG9zdCAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCmluZGV4IGJmMzNiMzEuLjE2MjcwNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCkBAIC01MDYsMTAgKzUwNiwxMCBAQAogCiAJaWYgKChzdHJuY21wKGJ1ZiwgInVwIiwgc2l6ZW9mKCJ1cCIpIC0gMSkgPT0gMCkgJiYKIAkJCShwaGJhLT5saW5rX3N0YXRlID09IExQRkNfTElOS19ET1dOKSkKLQkJc3RhdHVzID0gcGhiYS0+bHBmY19oYmFfaW5pdF9saW5rKHBoYmEpOworCQlzdGF0dXMgPSBwaGJhLT5scGZjX2hiYV9pbml0X2xpbmsocGhiYSwgTUJYX05PV0FJVCk7CiAJZWxzZSBpZiAoKHN0cm5jbXAoYnVmLCAiZG93biIsIHNpemVvZigiZG93biIpIC0gMSkgPT0gMCkgJiYKIAkJCShwaGJhLT5saW5rX3N0YXRlID49IExQRkNfTElOS19VUCkpCi0JCXN0YXR1cyA9IHBoYmEtPmxwZmNfaGJhX2Rvd25fbGluayhwaGJhKTsKKwkJc3RhdHVzID0gcGhiYS0+bHBmY19oYmFfZG93bl9saW5rKHBoYmEsIE1CWF9OT1dBSVQpOwogCiAJaWYgKHN0YXR1cyA9PSAwKQogCQlyZXR1cm4gc3RybGVuKGJ1Zik7CkBAIC04NjQsNyArODY0LDYgQEAKIAkJICB1aW50MzJfdCAqbXJwaSwgdWludDMyX3QgKmFycGksCiAJCSAgdWludDMyX3QgKm12cGksIHVpbnQzMl90ICphdnBpKQogewotCXN0cnVjdCBscGZjX3NsaSAqcHNsaSA9ICZwaGJhLT5zbGk7CiAJc3RydWN0IGxwZmNfbWJ4X3JlYWRfY29uZmlnICpyZF9jb25maWc7CiAJTFBGQ19NQk9YUV90ICpwbWJveHE7CiAJTUFJTEJPWF90ICpwbWI7CkBAIC04OTMsOCArODkyLDcgQEAKIAlwbWItPm1ieE93bmVyID0gT1dOX0hPU1Q7CiAJcG1ib3hxLT5jb250ZXh0MSA9IE5VTEw7CiAKLQlpZiAoKHBoYmEtPnBwb3J0LT5mY19mbGFnICYgRkNfT0ZGTElORV9NT0RFKSB8fAotCQkoIShwc2xpLT5zbGlfZmxhZyAmIExQRkNfU0xJX0FDVElWRSkpKQorCWlmIChwaGJhLT5wcG9ydC0+ZmNfZmxhZyAmIEZDX09GRkxJTkVfTU9ERSkKIAkJcmMgPSBNQlhfTk9UX0ZJTklTSEVEOwogCWVsc2UKIAkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94X3dhaXQocGhiYSwgcG1ib3hxLCBwaGJhLT5mY19yYXRvdiAqIDIpOwpAQCAtMTk0OSw2ICsxOTQ3LDU5IEBACiBMUEZDX0FUVFJfUihzdXBwcmVzc19saW5rX3VwLCBMUEZDX0lOSVRJQUxJWkVfTElOSywgTFBGQ19JTklUSUFMSVpFX0xJTkssCiAJCUxQRkNfREVMQVlfSU5JVF9MSU5LX0lOREVGSU5JVEVMWSwKIAkJIlN1cHByZXNzIExpbmsgVXAgYXQgaW5pdGlhbGl6YXRpb24iKTsKKy8qCisjIGxwZmNfY250OiBOdW1iZXIgb2YgSU9DQnMgYWxsb2NhdGVkIGZvciBFTFMsIENULCBhbmQgQUJUUworIyAgICAgICAxIC0gKDEwMjQpCisjICAgICAgIDIgLSAoMjA0OCkKKyMgICAgICAgMyAtICgzMDcyKQorIyAgICAgICA0IC0gKDQwOTYpCisjICAgICAgIDUgLSAoNTEyMCkKKyovCitzdGF0aWMgc3NpemVfdAorbHBmY19pb2NiX2h3X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGxwZmNfaGJhICAgKnBoYmEgPSAoKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YSktPnBoYmE7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgcGhiYS0+aW9jYl9tYXgpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoaW9jYl9odywgU19JUlVHTywKKwkJCSBscGZjX2lvY2JfaHdfc2hvdywgTlVMTCk7CitzdGF0aWMgc3NpemVfdAorbHBmY190eHFfaHdfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgbHBmY19oYmEgICAqcGhiYSA9ICgoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhKS0+cGhiYTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLAorCQlwaGJhLT5zbGkucmluZ1tMUEZDX0VMU19SSU5HXS50eHFfbWF4KTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHR4cV9odywgU19JUlVHTywKKwkJCSBscGZjX3R4cV9od19zaG93LCBOVUxMKTsKK3N0YXRpYyBzc2l6ZV90CitscGZjX3R4Y21wbHFfaHdfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gKChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzaG9zdC0+aG9zdGRhdGEpLT5waGJhOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsCisJCXBoYmEtPnNsaS5yaW5nW0xQRkNfRUxTX1JJTkddLnR4Y21wbHFfbWF4KTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHR4Y21wbHFfaHcsIFNfSVJVR08sCisJCQkgbHBmY190eGNtcGxxX2h3X3Nob3csIE5VTEwpOworCitpbnQgbHBmY19pb2NiX2NudCA9IDI7Cittb2R1bGVfcGFyYW0obHBmY19pb2NiX2NudCwgaW50LCAxKTsKK01PRFVMRV9QQVJNX0RFU0MobHBmY19pb2NiX2NudCwKKwkiTnVtYmVyIG9mIElPQ0JzIGFsbG9jIGZvciBFTFMsIENULCBhbmQgQUJUUzogMWsgdG8gNWsgSU9DQnMiKTsKK2xwZmNfcGFyYW1fc2hvdyhpb2NiX2NudCk7CitscGZjX3BhcmFtX2luaXQoaW9jYl9jbnQsIDIsIDEsIDUpOworc3RhdGljIERFVklDRV9BVFRSKGxwZmNfaW9jYl9jbnQsIFNfSVJVR08sCisJCQkgbHBmY19pb2NiX2NudF9zaG93LCBOVUxMKTsKIAogLyoKICMgbHBmY19ub2Rldl90bW86IElmIHNldCwgaXQgd2lsbCBob2xkIGFsbCBJL08gZXJyb3JzIG9uIGRldmljZXMgdGhhdCBkaXNhcHBlYXIKQEAgLTIxNTcsNiArMjIwOCwxMyBAQAogCQkgICJNYXggbnVtYmVyIG9mIEZDUCBjb21tYW5kcyB3ZSBjYW4gcXVldWUgdG8gYSBzcGVjaWZpYyBMVU4iKTsKIAogLyoKKyMgdGd0X3F1ZXVlX2RlcHRoOiAgVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIG91dHN0YW5kaW5nCisjIGNvbW1hbmRzIHBlciB0YXJnZXQgcG9ydC4gVmFsdWUgcmFuZ2UgaXMgWzEwLDY1NTM1XS4gRGVmYXVsdCB2YWx1ZSBpcyA2NTUzNS4KKyovCitMUEZDX1ZQT1JUX0FUVFJfUih0Z3RfcXVldWVfZGVwdGgsIDY1NTM1LCAxMCwgNjU1MzUsCisJIk1heCBudW1iZXIgb2YgRkNQIGNvbW1hbmRzIHdlIGNhbiBxdWV1ZSB0byBhIHNwZWNpZmljIHRhcmdldCBwb3J0Iik7CisKKy8qCiAjIGhiYV9xdWV1ZV9kZXB0aDogIFRoaXMgcGFyYW1ldGVyIGlzIHVzZWQgdG8gbGltaXQgdGhlIG51bWJlciBvZiBvdXRzdGFuZGluZwogIyBjb21tYW5kcyBwZXIgbHBmYyBIQkEuIFZhbHVlIHJhbmdlIGlzIFszMiw4MTkyXS4gSWYgdGhpcyBwYXJhbWV0ZXIKICMgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIG51bWJlciBvZiBleGNoYW5nZXMgc3VwcG9ydGVkIGJ5IHRoZSBIQkEsCkBAIC0yNzIwLDcgKzI3NzgsNiBAQAogCS5hdHRyID0gewogCQkubmFtZSA9ICJscGZjX2RydnJfc3RhdF9kYXRhIiwKIAkJLm1vZGUgPSBTX0lSVVNSLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5zaXplID0gTFBGQ19NQVhfVEFSR0VUICogTUFYX1NUQVRfREFUQV9TSVpFX1BFUl9UQVJHRVQsCiAJLnJlYWQgPSBzeXNmc19kcnZyX3N0YXRfZGF0YV9yZWFkLApAQCAtMjg5MCw5ICsyOTQ3LDYgQEAKIAlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSB2cG9ydC0+cGhiYTsKIAlpbnQgdmFsID0gMCwgcmMgPSAtRUlOVkFMOwogCi0JLyogQUVSIG5vdCBzdXBwb3J0ZWQgb24gT0MgZGV2aWNlcyB5ZXQgKi8KLQlpZiAocGhiYS0+cGNpX2Rldl9ncnAgPT0gTFBGQ19QQ0lfREVWX09DKQotCQlyZXR1cm4gLUVQRVJNOwogCWlmICghaXNkaWdpdChidWZbMF0pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoc3NjYW5mKGJ1ZiwgIiVpIiwgJnZhbCkgIT0gMSkKQEAgLTI5NjUsMTIgKzMwMTksNiBAQAogc3RhdGljIGludAogbHBmY19hZXJfc3VwcG9ydF9pbml0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgaW50IHZhbCkKIHsKLQkvKiBBRVIgbm90IHN1cHBvcnRlZCBvbiBPQyBkZXZpY2VzIHlldCAqLwotCWlmIChwaGJhLT5wY2lfZGV2X2dycCA9PSBMUEZDX1BDSV9ERVZfT0MpIHsKLQkJcGhiYS0+Y2ZnX2Flcl9zdXBwb3J0ID0gMDsKLQkJcmV0dXJuIC1FUEVSTTsKLQl9Ci0KIAlpZiAodmFsID09IDAgfHwgdmFsID09IDEpIHsKIAkJcGhiYS0+Y2ZnX2Flcl9zdXBwb3J0ID0gdmFsOwogCQlyZXR1cm4gMDsKQEAgLTMwMTUsOSArMzA2Myw2IEBACiAJc3RydWN0IGxwZmNfaGJhICAgKnBoYmEgPSB2cG9ydC0+cGhiYTsKIAlpbnQgdmFsLCByYyA9IC0xOwogCi0JLyogQUVSIG5vdCBzdXBwb3J0ZWQgb24gT0MgZGV2aWNlcyB5ZXQgKi8KLQlpZiAocGhiYS0+cGNpX2Rldl9ncnAgPT0gTFBGQ19QQ0lfREVWX09DKQotCQlyZXR1cm4gLUVQRVJNOwogCWlmICghaXNkaWdpdChidWZbMF0pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoc3NjYW5mKGJ1ZiwgIiVpIiwgJnZhbCkgIT0gMSkKQEAgLTMwODMsNyArMzEyOCw3IEBACiAJCQljb250aW51ZTsKIAkJaWYgKG5kbHAtPm5scF9zdGF0ZSA9PSBOTFBfU1RFX1VOVVNFRF9OT0RFKQogCQkJY29udGludWU7Ci0JCW5kbHAtPmNtZF9xZGVwdGggPSBMUEZDX01BWF9UR1RfUURFUFRIOworCQluZGxwLT5jbWRfcWRlcHRoID0gdnBvcnQtPmNmZ190Z3RfcXVldWVfZGVwdGg7CiAJfQogCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAlyZXR1cm4gMDsKQEAgLTMyODcsNiArMzMzMiw3IEBACiAJJmRldl9hdHRyX2xwZmNfdGVtcF9zZW5zb3IsCiAJJmRldl9hdHRyX2xwZmNfbG9nX3ZlcmJvc2UsCiAJJmRldl9hdHRyX2xwZmNfbHVuX3F1ZXVlX2RlcHRoLAorCSZkZXZfYXR0cl9scGZjX3RndF9xdWV1ZV9kZXB0aCwKIAkmZGV2X2F0dHJfbHBmY19oYmFfcXVldWVfZGVwdGgsCiAJJmRldl9hdHRyX2xwZmNfcGVlcl9wb3J0X2xvZ2luLAogCSZkZXZfYXR0cl9scGZjX25vZGV2X3RtbywKQEAgLTMzMzQsNiArMzM4MCwxMCBAQAogCSZkZXZfYXR0cl9scGZjX2Flcl9zdXBwb3J0LAogCSZkZXZfYXR0cl9scGZjX2Flcl9zdGF0ZV9jbGVhbnVwLAogCSZkZXZfYXR0cl9scGZjX3N1cHByZXNzX2xpbmtfdXAsCisJJmRldl9hdHRyX2xwZmNfaW9jYl9jbnQsCisJJmRldl9hdHRyX2lvY2JfaHcsCisJJmRldl9hdHRyX3R4cV9odywKKwkmZGV2X2F0dHJfdHhjbXBscV9odywKIAlOVUxMLAogfTsKIApAQCAtMzM0NCw2ICszMzk0LDcgQEAKIAkmZGV2X2F0dHJfbHBmY19kcnZyX3ZlcnNpb24sCiAJJmRldl9hdHRyX2xwZmNfbG9nX3ZlcmJvc2UsCiAJJmRldl9hdHRyX2xwZmNfbHVuX3F1ZXVlX2RlcHRoLAorCSZkZXZfYXR0cl9scGZjX3RndF9xdWV1ZV9kZXB0aCwKIAkmZGV2X2F0dHJfbHBmY19ub2Rldl90bW8sCiAJJmRldl9hdHRyX2xwZmNfZGV2bG9zc190bW8sCiAJJmRldl9hdHRyX2xwZmNfaGJhX3F1ZXVlX2RlcHRoLApAQCAtNDA0Miw4ICs0MDkzLDcgQEAKIAlwbWJveHEtPmNvbnRleHQxID0gTlVMTDsKIAlwbWJveHEtPnZwb3J0ID0gdnBvcnQ7CiAKLQlpZiAoKHZwb3J0LT5mY19mbGFnICYgRkNfT0ZGTElORV9NT0RFKSB8fAotCQkoIShwc2xpLT5zbGlfZmxhZyAmIExQRkNfU0xJX0FDVElWRSkpKQorCWlmICh2cG9ydC0+ZmNfZmxhZyAmIEZDX09GRkxJTkVfTU9ERSkKIAkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIHBtYm94cSwgTUJYX1BPTEwpOwogCWVsc2UKIAkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94X3dhaXQocGhiYSwgcG1ib3hxLCBwaGJhLT5mY19yYXRvdiAqIDIpOwpAQCAtNDA2Nyw4ICs0MTE3LDcgQEAKIAlwbWJveHEtPmNvbnRleHQxID0gTlVMTDsKIAlwbWJveHEtPnZwb3J0ID0gdnBvcnQ7CiAKLQlpZiAoKHZwb3J0LT5mY19mbGFnICYgRkNfT0ZGTElORV9NT0RFKSB8fAotCSAgICAoIShwc2xpLT5zbGlfZmxhZyAmIExQRkNfU0xJX0FDVElWRSkpKQorCWlmICh2cG9ydC0+ZmNfZmxhZyAmIEZDX09GRkxJTkVfTU9ERSkKIAkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIHBtYm94cSwgTUJYX1BPTEwpOwogCWVsc2UKIAkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94X3dhaXQocGhiYSwgcG1ib3hxLCBwaGJhLT5mY19yYXRvdiAqIDIpOwpAQCAtNDUyMSw2ICs0NTcwLDcgQEAKIAlscGZjX2hiYV9sb2dfdmVyYm9zZV9pbml0KHBoYmEsIGxwZmNfbG9nX3ZlcmJvc2UpOwogCWxwZmNfYWVyX3N1cHBvcnRfaW5pdChwaGJhLCBscGZjX2Flcl9zdXBwb3J0KTsKIAlscGZjX3N1cHByZXNzX2xpbmtfdXBfaW5pdChwaGJhLCBscGZjX3N1cHByZXNzX2xpbmtfdXApOworCWxwZmNfaW9jYl9jbnRfaW5pdChwaGJhLCBscGZjX2lvY2JfY250KTsKIAlyZXR1cm47CiB9CiAKQEAgLTQ1MzMsNiArNDU4Myw3IEBACiB7CiAJbHBmY19sb2dfdmVyYm9zZV9pbml0KHZwb3J0LCBscGZjX2xvZ192ZXJib3NlKTsKIAlscGZjX2x1bl9xdWV1ZV9kZXB0aF9pbml0KHZwb3J0LCBscGZjX2x1bl9xdWV1ZV9kZXB0aCk7CisJbHBmY190Z3RfcXVldWVfZGVwdGhfaW5pdCh2cG9ydCwgbHBmY190Z3RfcXVldWVfZGVwdGgpOwogCWxwZmNfZGV2bG9zc190bW9faW5pdCh2cG9ydCwgbHBmY19kZXZsb3NzX3Rtbyk7CiAJbHBmY19ub2Rldl90bW9faW5pdCh2cG9ydCwgbHBmY19ub2Rldl90bW8pOwogCWxwZmNfcGVlcl9wb3J0X2xvZ2luX2luaXQodnBvcnQsIGxwZmNfcGVlcl9wb3J0X2xvZ2luKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5jCmluZGV4IGRjZjA4ODIuLmQ1MjE1NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ic2cuYwpAQCAtMzc3LDYgKzM3NywxMSBAQAogCiAJaWYgKHJjID09IElPQ0JfU1VDQ0VTUykKIAkJcmV0dXJuIDA7IC8qIGRvbmUgZm9yIG5vdyAqLworCWVsc2UgaWYgKHJjID09IElPQ0JfQlVTWSkKKwkJcmMgPSBFQUdBSU47CisJZWxzZQorCQlyYyA9IEVJTzsKKwogCiAJLyogaW9jYiBmYWlsZWQgc28gY2xlYW51cCAqLwogCXBjaV91bm1hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCkBAIC02MjUsNiArNjMwLDEwIEBACiAJbHBmY19ubHBfcHV0KG5kbHApOwogCWlmIChyYyA9PSBJT0NCX1NVQ0NFU1MpCiAJCXJldHVybiAwOyAvKiBkb25lIGZvciBub3cgKi8KKwllbHNlIGlmIChyYyA9PSBJT0NCX0JVU1kpCisJCXJjID0gRUFHQUlOOworCWVsc2UKKwkJcmMgPSBFSU87CiAKIAlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAogCQkgICAgIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CkBAIC05NTMsMTAgKzk2MiwyMiBAQAogCQlpZiAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSB7CiAJCQlldnRfZGF0LT5pbW1lZF9kYXQgPSBwaGJhLT5jdHhfaWR4OwogCQkJcGhiYS0+Y3R4X2lkeCA9IChwaGJhLT5jdHhfaWR4ICsgMSkgJSA2NDsKKwkJCS8qIFByb3ZpZGUgd2FybmluZyBmb3Igb3Zlci1ydW4gb2YgdGhlIGN0X2N0eCBhcnJheSAqLworCQkJaWYgKHBoYmEtPmN0X2N0eFtldnRfZGF0LT5pbW1lZF9kYXRdLmZsYWdzICYKKwkJCSAgICBVTlNPTF9WQUxJRCkKKwkJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfRUxTLAorCQkJCQkJIjI3MTcgQ1QgY29udGV4dCBhcnJheSBlbnRyeSAiCisJCQkJCQkiWyVkXSBvdmVyLXJ1bjogb3hpZDp4JXgsICIKKwkJCQkJCSJzaWQ6eCV4XG4iLCBwaGJhLT5jdHhfaWR4LAorCQkJCQkJcGhiYS0+Y3RfY3R4WworCQkJCQkJICAgIGV2dF9kYXQtPmltbWVkX2RhdF0ub3hpZCwKKwkJCQkJCXBoYmEtPmN0X2N0eFsKKwkJCQkJCSAgICBldnRfZGF0LT5pbW1lZF9kYXRdLlNJRCk7CiAJCQlwaGJhLT5jdF9jdHhbZXZ0X2RhdC0+aW1tZWRfZGF0XS5veGlkID0KIAkJCQkJCXBpb2NicS0+aW9jYi51bHBDb250ZXh0OwogCQkJcGhiYS0+Y3RfY3R4W2V2dF9kYXQtPmltbWVkX2RhdF0uU0lEID0KIAkJCQlwaW9jYnEtPmlvY2IudW4ucmN2ZWxzLnJlbW90ZUlEOworCQkJcGhiYS0+Y3RfY3R4W2V2dF9kYXQtPmltbWVkX2RhdF0uZmxhZ3MgPSBVTlNPTF9WQUxJRDsKIAkJfSBlbHNlCiAJCQlldnRfZGF0LT5pbW1lZF9kYXQgPSBwaW9jYnEtPmlvY2IudWxwQ29udGV4dDsKIApAQCAtMTMxNCw2ICsxMzM1LDIxIEBACiAJCQlyYyA9IElPQ0JfRVJST1I7CiAJCQlnb3RvIGlzc3VlX2N0X3JzcF9leGl0OwogCQl9CisKKwkJLyogQ2hlY2sgaWYgdGhlIG5kbHAgaXMgYWN0aXZlICovCisJCWlmICghbmRscCB8fCAhTkxQX0NIS19OT0RFX0FDVChuZGxwKSkgeworCQkJcmMgPSAtSU9DQl9FUlJPUjsKKwkJCWdvdG8gaXNzdWVfY3RfcnNwX2V4aXQ7CisJCX0KKworCQkvKiBnZXQgYSByZWZlcm5lY2UgY291bnQgc28gdGhlIG5kbHAgZG9lc24ndCBnbyBhd2F5IHdoaWxlCisJCSAqIHdlIHJlc3BvbmQKKwkJICovCisJCWlmICghbHBmY19ubHBfZ2V0KG5kbHApKSB7CisJCQlyYyA9IC1JT0NCX0VSUk9SOworCQkJZ290byBpc3N1ZV9jdF9yc3BfZXhpdDsKKwkJfQorCiAJCWljbWQtPnVuLnVscFdvcmRbM10gPSBuZGxwLT5ubHBfcnBpOwogCQkvKiBUaGUgZXhjaGFuZ2UgaXMgZG9uZSwgbWFyayB0aGUgZW50cnkgYXMgaW52YWxpZCAqLwogCQlwaGJhLT5jdF9jdHhbdGFnXS5mbGFncyAmPSB+VU5TT0xfVkFMSUQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2NydG4uaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCmluZGV4IGZiYzliYWUuLjAzZjRkZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCkBAIC00MSw2ICs0MSw3IEBACiB2b2lkIGxwZmNfcmVhZF9sbmtfc3RhdChzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwogaW50IGxwZmNfcmVnX3JwaShzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDE2X3QsIHVpbnQzMl90LCB1aW50OF90ICosCiAJCSBMUEZDX01CT1hRX3QgKiwgdWludDMyX3QpOwordm9pZCBscGZjX3NldF92YXIoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqLCB1aW50MzJfdCwgdWludDMyX3QpOwogdm9pZCBscGZjX3VucmVnX2xvZ2luKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MTZfdCwgdWludDMyX3QsIExQRkNfTUJPWFFfdCAqKTsKIHZvaWQgbHBmY191bnJlZ19kaWQoc3RydWN0IGxwZmNfaGJhICosIHVpbnQxNl90LCB1aW50MzJfdCwgTFBGQ19NQk9YUV90ICopOwogdm9pZCBscGZjX3JlZ192cGkoc3RydWN0IGxwZmNfdnBvcnQgKiwgTFBGQ19NQk9YUV90ICopOwpAQCAtMTkwLDYgKzE5MSw3IEBACiBpcnFyZXR1cm5fdCBscGZjX3NsaTRfZnBfaW50cl9oYW5kbGVyKGludCwgdm9pZCAqKTsKIAogdm9pZCBscGZjX3JlYWRfcmV2KHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7Cit2b2lkIGxwZmNfc2xpNF9zd2FwX3N0cihzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwogdm9pZCBscGZjX2NvbmZpZ19yaW5nKHN0cnVjdCBscGZjX2hiYSAqLCBpbnQsIExQRkNfTUJPWFFfdCAqKTsKIHZvaWQgbHBmY19jb25maWdfcG9ydChzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwogdm9pZCBscGZjX2tpbGxfYm9hcmQoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKQEAgLTQwMiwzICs0MDQsMTIgQEAKIGludCBscGZjX2JzZ190aW1lb3V0KHN0cnVjdCBmY19ic2dfam9iICopOwogaW50IGxwZmNfYnNnX2N0X3Vuc29sX2V2ZW50KHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqLAogCQkJICAgICBzdHJ1Y3QgbHBmY19pb2NicSAqKTsKK3ZvaWQgX19scGZjX3NsaV9yaW5ndHhfcHV0KHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqLAorCXN0cnVjdCBscGZjX2lvY2JxICopOworc3RydWN0IGxwZmNfaW9jYnEgKmxwZmNfc2xpX3Jpbmd0eF9nZXQoc3RydWN0IGxwZmNfaGJhICosCisJc3RydWN0IGxwZmNfc2xpX3JpbmcgKik7CitpbnQgX19scGZjX3NsaV9pc3N1ZV9pb2NiKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MzJfdCwKKwlzdHJ1Y3QgbHBmY19pb2NicSAqLCB1aW50MzJfdCk7Cit1aW50MzJfdCBscGZjX2RyYWluX3R4cShzdHJ1Y3QgbHBmY19oYmEgKik7CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kaXNjLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Rpc2MuaAppbmRleCAzNjI1N2E2Li43Y2FlNjlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Rpc2MuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Rpc2MuaApAQCAtMTE0LDYgKzExNCw4IEBACiB9OwogCiAvKiBEZWZpbmVzIGZvciBubHBfZmxhZyAodWludDMyKSAqLworI2RlZmluZSBOTFBfSUdOUl9SRUdfQ01QTCAgMHgwMDAwMDAwMSAvKiBSY3ZkIHJzY24gYmVmb3JlIHdlIGNtcGwgcmVnIGxvZ2luICovCisjZGVmaW5lIE5MUF9SRUdfTE9HSU5fU0VORCAweDAwMDAwMDAyICAgLyogc2VudCByZWdsb2dpbiB0byBhZGFwdGVyICovCiAjZGVmaW5lIE5MUF9QTE9HSV9TTkQgICAgICAweDAwMDAwMDIwCS8qIHNlbnQgUExPR0kgcmVxdWVzdCBmb3IgdGhpcyBlbnRyeSAqLwogI2RlZmluZSBOTFBfUFJMSV9TTkQgICAgICAgMHgwMDAwMDA0MAkvKiBzZW50IFBSTEkgcmVxdWVzdCBmb3IgdGhpcyBlbnRyeSAqLwogI2RlZmluZSBOTFBfQURJU0NfU05EICAgICAgMHgwMDAwMDA4MAkvKiBzZW50IEFESVNDIHJlcXVlc3QgZm9yIHRoaXMgZW50cnkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCmluZGV4IGM0YzdmMGEuLmFmYmVkNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYwpAQCAtNzk2LDcgKzc5Niw5IEBACiAJCSAqIGR1ZSB0byBuZXcgRkNGIGRpc2NvdmVyeQogCQkgKi8KIAkJaWYgKChwaGJhLT5oYmFfZmxhZyAmIEhCQV9GSVBfU1VQUE9SVCkgJiYKLQkJICAgIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfRElTQ09WRVJZKSkgeworCQkgICAgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9ESVNDT1ZFUlkpICYmCisJCSAgICAoaXJzcC0+dWxwU3RhdHVzICE9IElPU1RBVF9MT0NBTF9SRUpFQ1QpICYmCisJCSAgICAoaXJzcC0+dW4udWxwV29yZFs0XSAhPSBJT0VSUl9TTElfQUJPUlRFRCkpIHsKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19GSVAgfCBMT0dfRUxTLAogCQkJCQkiMjYxMSBGTE9HSSBmYWlsZWQgb24gcmVnaXN0ZXJlZCAiCiAJCQkJCSJGQ0YgcmVjb3JkIGZjZl9pbmRleDolZCwgdHJ5aW5nICIKQEAgLTgxMSwxOCArODEzLDIxIEBACiAJCQkJICovCiAJCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywKIAkJCQkJCUxPR19GSVAgfCBMT0dfRUxTLAotCQkJCQkJIjI3NjAgRkxPR0kgZXhoYXVzdGVkIEZDRiAiCi0JCQkJCQkicm91bmQgcm9iaW4gZmFpbG92ZXIgbGlzdCwgIgotCQkJCQkJInJldHJ5IEZMT0dJIG9uIHRoZSBjdXJyZW50ICIKLQkJCQkJCSJyZWdpc3RlcmVkIEZDRiBpbmRleDolZFxuIiwKKwkJCQkJCSIyNzYwIENvbXBsZXRlZCBvbmUgcm91bmQgIgorCQkJCQkJIm9mIEZMT0dJIEZDRiByb3VuZCByb2JpbiAiCisJCQkJCQkiZmFpbG92ZXIgbGlzdCwgcmV0cnkgRkxPR0kgIgorCQkJCQkJIm9uIGN1cnJlbnRseSByZWdpc3RlcmVkICIKKwkJCQkJCSJGQ0YgaW5kZXg6JWRcbiIsCiAJCQkJCQlwaGJhLT5mY2YuY3VycmVudF9yZWMuZmNmX2luZHgpOwotCQkJCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwotCQkJCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+RkNGX0RJU0NPVkVSWTsKLQkJCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCQkJfSBlbHNlIHsKKwkJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLAorCQkJCQkJTE9HX0ZJUCB8IExPR19FTFMsCisJCQkJCQkiMjc5NCBGTE9HSSBGQ0Ygcm91bmQgcm9iaW4gIgorCQkJCQkJImZhaWxvdmVyIHRvIEZDRiBpbmRleCB4JXhcbiIsCisJCQkJCQlmY2ZfaW5kZXgpOwogCQkJCXJjID0gbHBmY19zbGk0X2ZjZl9ycl9yZWFkX2ZjZl9yZWMocGhiYSwKIAkJCQkJCQkJICAgZmNmX2luZGV4KTsKLQkJCQlpZiAocmMpIHsKKwkJCQlpZiAocmMpCiAJCQkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsCiAJCQkJCQkJTE9HX0ZJUCB8IExPR19FTFMsCiAJCQkJCQkJIjI3NjEgRkxPR0kgcm91bmQgIgpAQCAtODMxLDEwICs4MzYsNyBAQAogCQkJCQkJCSJyYzp4JXgsIGZjZl9pbmRleDoiCiAJCQkJCQkJIiVkXG4iLCByYywKIAkJCQkJCXBoYmEtPmZjZi5jdXJyZW50X3JlYy5mY2ZfaW5keCk7Ci0JCQkJCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwotCQkJCQlwaGJhLT5mY2YuZmNmX2ZsYWcgJj0gfkZDRl9ESVNDT1ZFUlk7Ci0JCQkJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Ci0JCQkJfSBlbHNlCisJCQkJZWxzZQogCQkJCQlnb3RvIG91dDsKIAkJCX0KIAkJfQpAQCAtODkwLDkgKzg5MiwzOSBAQAogCQkgKi8KIAkJaWYgKHNwLT5jbW4uZlBvcnQpCiAJCQlyYyA9IGxwZmNfY21wbF9lbHNfZmxvZ2lfZmFicmljKHZwb3J0LCBuZGxwLCBzcCwgaXJzcCk7Ci0JCWVsc2UKKwkJZWxzZSBpZiAoIShwaGJhLT5oYmFfZmxhZyAmIEhCQV9GQ09FX1NVUFBPUlQpKQogCQkJcmMgPSBscGZjX2NtcGxfZWxzX2Zsb2dpX25wb3J0KHZwb3J0LCBuZGxwLCBzcCk7Ci0KKwkJZWxzZSB7CisJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwKKwkJCQlMT0dfRklQIHwgTE9HX0VMUywKKwkJCQkiMjgzMSBGTE9HSSByZXNwb25zZSB3aXRoIGNsZWFyZWQgRmFicmljICIKKwkJCQkiYml0IGZjZl9pbmRleCAweCV4ICIKKwkJCQkiU3dpdGNoIE5hbWUgJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggIgorCQkJCSJGYWJyaWMgTmFtZSAiCisJCQkJIiUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLAorCQkJCXBoYmEtPmZjZi5jdXJyZW50X3JlYy5mY2ZfaW5keCwKKwkJCQlwaGJhLT5mY2YuY3VycmVudF9yZWMuc3dpdGNoX25hbWVbMF0sCisJCQkJcGhiYS0+ZmNmLmN1cnJlbnRfcmVjLnN3aXRjaF9uYW1lWzFdLAorCQkJCXBoYmEtPmZjZi5jdXJyZW50X3JlYy5zd2l0Y2hfbmFtZVsyXSwKKwkJCQlwaGJhLT5mY2YuY3VycmVudF9yZWMuc3dpdGNoX25hbWVbM10sCisJCQkJcGhiYS0+ZmNmLmN1cnJlbnRfcmVjLnN3aXRjaF9uYW1lWzRdLAorCQkJCXBoYmEtPmZjZi5jdXJyZW50X3JlYy5zd2l0Y2hfbmFtZVs1XSwKKwkJCQlwaGJhLT5mY2YuY3VycmVudF9yZWMuc3dpdGNoX25hbWVbNl0sCisJCQkJcGhiYS0+ZmNmLmN1cnJlbnRfcmVjLnN3aXRjaF9uYW1lWzddLAorCQkJCXBoYmEtPmZjZi5jdXJyZW50X3JlYy5mYWJyaWNfbmFtZVswXSwKKwkJCQlwaGJhLT5mY2YuY3VycmVudF9yZWMuZmFicmljX25hbWVbMV0sCisJCQkJcGhiYS0+ZmNmLmN1cnJlbnRfcmVjLmZhYnJpY19uYW1lWzJdLAorCQkJCXBoYmEtPmZjZi5jdXJyZW50X3JlYy5mYWJyaWNfbmFtZVszXSwKKwkJCQlwaGJhLT5mY2YuY3VycmVudF9yZWMuZmFicmljX25hbWVbNF0sCisJCQkJcGhiYS0+ZmNmLmN1cnJlbnRfcmVjLmZhYnJpY19uYW1lWzVdLAorCQkJCXBoYmEtPmZjZi5jdXJyZW50X3JlYy5mYWJyaWNfbmFtZVs2XSwKKwkJCQlwaGJhLT5mY2YuY3VycmVudF9yZWMuZmFicmljX25hbWVbN10pOworCQkJbHBmY19ubHBfcHV0KG5kbHApOworCQkJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJCQlwaGJhLT5mY2YuZmNmX2ZsYWcgJj0gfkZDRl9ESVNDT1ZFUlk7CisJCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCQkJZ290byBvdXQ7CisJCX0KIAkJaWYgKCFyYykgewogCQkJLyogTWFyayB0aGUgRkNGIGRpc2NvdmVyeSBwcm9jZXNzIGRvbmUgKi8KIAkJCWlmIChwaGJhLT5oYmFfZmxhZyAmIEhCQV9GSVBfU1VQUE9SVCkKQEAgLTE0NzIsOCArMTUwNCwxMiBAQAogCQkJfQogCQkJZ290byBvdXQ7CiAJCX0KLQkJLyogUExPR0kgZmFpbGVkICovCi0JCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfRUxTLAorCQkvKiBQTE9HSSBmYWlsZWQgRG9uJ3QgcHJpbnQgdGhlIHZwb3J0IHRvIHZwb3J0IHJqdHMgKi8KKwkJaWYgKGlyc3AtPnVscFN0YXR1cyAhPSBJT1NUQVRfTFNfUkpUIHx8CisJCQkoKChpcnNwLT51bi51bHBXb3JkWzRdKSA+PiAxNiAhPSBMU1JKVF9JTlZBTElEX0NNRCkgJiYKKwkJCSgoaXJzcC0+dW4udWxwV29yZFs0XSkgPj4gMTYgIT0gTFNSSlRfVU5BQkxFX1RQQykpIHx8CisJCQkocGhiYSktPnBwb3J0LT5jZmdfbG9nX3ZlcmJvc2UgJiBMT0dfRUxTKQorCQkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19FTFMsCiAJCQkJICIyNzUzIFBMT0dJIGZhaWx1cmUgRElEOiUwNlggU3RhdHVzOngleC94JXhcbiIsCiAJCQkJIG5kbHAtPm5scF9ESUQsIGlyc3AtPnVscFN0YXR1cywKIAkJCQkgaXJzcC0+dW4udWxwV29yZFs0XSk7CkBAIC0yNzQwLDYgKzI3NzYsMTUgQEAKIAkJCQlyZXRyeSA9IDE7CiAJCQkJYnJlYWs7CiAJCQl9CisJCQlpZiAoc3RhdC51bi5iLmxzUmp0UnNuQ29kZUV4cCA9PQorCQkJICAgIExTRVhQX0NBTlRfR0lWRV9EQVRBKSB7CisJCQkJaWYgKGNtZCA9PSBFTFNfQ01EX1BMT0dJKSB7CisJCQkJCWRlbGF5ID0gMTAwMDsKKwkJCQkJbWF4cmV0cnkgPSA0ODsKKwkJCQl9CisJCQkJcmV0cnkgPSAxOworCQkJCWJyZWFrOworCQkJfQogCQkJaWYgKGNtZCA9PSBFTFNfQ01EX1BMT0dJKSB7CiAJCQkJZGVsYXkgPSAxMDAwOwogCQkJCW1heHJldHJ5ID0gbHBmY19tYXhfZWxzX3RyaWVzICsgMTsKQEAgLTUxMzUsNiArNTE4MCw3IEBACiAJcmV0dXJuOwogfQogCisKIC8qKgogICogbHBmY19lbHNfdGltZW91dF9oYW5kbGVyIC0gUHJvY2VzcyBhbiBlbHMgdGltZW91dCBldmVudAogICogQHZwb3J0OiBwb2ludGVyIHRvIGEgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCkBAIC01MTU1LDEzICs1MjAxLDE5IEBACiAJdWludDMyX3QgZWxzX2NvbW1hbmQgPSAwOwogCXVpbnQzMl90IHRpbWVvdXQ7CiAJdWludDMyX3QgcmVtb3RlX0lEID0gMHhmZmZmZmZmZjsKKwlMSVNUX0hFQUQodHhjbXBscV9jb21wbGV0aW9ucyk7CisJTElTVF9IRUFEKGFib3J0X2xpc3QpOwogCi0Jc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisKIAl0aW1lb3V0ID0gKHVpbnQzMl90KShwaGJhLT5mY19yYXRvdiA8PCAxKTsKIAogCXByaW5nID0gJnBoYmEtPnNsaS5yaW5nW0xQRkNfRUxTX1JJTkddOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBpb2NiLCB0bXBfaW9jYiwgJnByaW5nLT50eGNtcGxxLCBsaXN0KSB7CisJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJbGlzdF9zcGxpY2VfaW5pdCgmcHJpbmctPnR4Y21wbHEsICZ0eGNtcGxxX2NvbXBsZXRpb25zKTsKKwlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBpb2NiLCB0bXBfaW9jYiwgJnR4Y21wbHFfY29tcGxldGlvbnMsIGxpc3QpIHsKIAkJY21kID0gJnBpb2NiLT5pb2NiOwogCiAJCWlmICgocGlvY2ItPmlvY2JfZmxhZyAmIExQRkNfSU9fTElCREZDKSAhPSAwIHx8CkBAIC01MTk4LDE0ICs1MjUwLDIzIEBACiAJCQlpZiAobmRscCAmJiBOTFBfQ0hLX05PREVfQUNUKG5kbHApKQogCQkJCXJlbW90ZV9JRCA9IG5kbHAtPm5scF9ESUQ7CiAJCX0KLQkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19FTFMsCi0JCQkJICIwMTI3IEVMUyB0aW1lb3V0IERhdGE6IHgleCB4JXggeCV4ICIKLQkJCQkgIngleFxuIiwgZWxzX2NvbW1hbmQsCi0JCQkJIHJlbW90ZV9JRCwgY21kLT51bHBDb21tYW5kLCBjbWQtPnVscElvVGFnKTsKLQkJbHBmY19zbGlfaXNzdWVfYWJvcnRfaW90YWcocGhiYSwgcHJpbmcsIHBpb2NiKTsKKwkJbGlzdF9hZGRfdGFpbCgmcGlvY2ItPmRsaXN0LCAmYWJvcnRfbGlzdCk7CiAJfQorCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCWxpc3Rfc3BsaWNlKCZ0eGNtcGxxX2NvbXBsZXRpb25zLCAmcHJpbmctPnR4Y21wbHEpOwogCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGlvY2IsIHRtcF9pb2NiLCAmYWJvcnRfbGlzdCwgZGxpc3QpIHsKKwkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19FTFMsCisJCQkgIjAxMjcgRUxTIHRpbWVvdXQgRGF0YTogeCV4IHgleCB4JXggIgorCQkJICJ4JXhcbiIsIGVsc19jb21tYW5kLAorCQkJIHJlbW90ZV9JRCwgY21kLT51bHBDb21tYW5kLCBjbWQtPnVscElvVGFnKTsKKwkJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJCWxpc3RfZGVsX2luaXQoJnBpb2NiLT5kbGlzdCk7CisJCWxwZmNfc2xpX2lzc3VlX2Fib3J0X2lvdGFnKHBoYmEsIHByaW5nLCBwaW9jYik7CisJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJfQorCiAJaWYgKHBoYmEtPnNsaS5yaW5nW0xQRkNfRUxTX1JJTkddLnR4Y21wbHFfY250KQogCQltb2RfdGltZXIoJnZwb3J0LT5lbHNfdG1vZnVuYywgamlmZmllcyArIEhaICogdGltZW91dCk7CiB9CkBAIC02OTAxLDYgKzY5NjIsNyBAQAogCXVpbnQxNl90IHhyaSA9IGJmX2dldChscGZjX3djcWVfeGFfeHJpLCBheHJpKTsKIAlzdHJ1Y3QgbHBmY19zZ2xxICpzZ2xxX2VudHJ5ID0gTlVMTCwgKnNnbHFfbmV4dCA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBpZmxhZyA9IDA7CisJc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nID0gJnBoYmEtPnNsaS5yaW5nW0xQRkNfRUxTX1JJTkddOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFnKTsKIAlzcGluX2xvY2soJnBoYmEtPnNsaTRfaGJhLmFidHNfc2dsX2xpc3RfbG9jayk7CkBAIC02OTEzLDYgKzY5NzUsMTAgQEAKIAkJCXNnbHFfZW50cnktPnN0YXRlID0gU0dMX0ZSRUVEOwogCQkJc3Bpbl91bmxvY2soJnBoYmEtPnNsaTRfaGJhLmFidHNfc2dsX2xpc3RfbG9jayk7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZyk7CisKKwkJCS8qIENoZWNrIGlmIFRYUSBxdWV1ZSBuZWVkcyB0byBiZSBzZXJ2aWNlZCAqLworCQkJaWYgKHByaW5nLT50eHFfY250KQorCQkJCWxwZmNfd29ya2VyX3dha2VfdXAocGhiYSk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCmluZGV4IDFmODdiNGYuLjA2MzljOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCkBAIC0yNzUsNyArMjc1LDkgQEAKIAlpZiAoISh2cG9ydC0+bG9hZF9mbGFnICYgRkNfVU5MT0FESU5HKSAmJgogCSAgICAhKG5kbHAtPm5scF9mbGFnICYgTkxQX0RFTEFZX1RNTykgJiYKIAkgICAgIShuZGxwLT5ubHBfZmxhZyAmIE5MUF9OUFJfMkJfRElTQykgJiYKLQkgICAgKG5kbHAtPm5scF9zdGF0ZSAhPSBOTFBfU1RFX1VOTUFQUEVEX05PREUpKQorCSAgICAobmRscC0+bmxwX3N0YXRlICE9IE5MUF9TVEVfVU5NQVBQRURfTk9ERSkgJiYKKwkgICAgKG5kbHAtPm5scF9zdGF0ZSAhPSBOTFBfU1RFX1JFR19MT0dJTl9JU1NVRSkgJiYKKwkgICAgKG5kbHAtPm5scF9zdGF0ZSAhPSBOTFBfU1RFX1BSTElfSVNTVUUpKQogCQlscGZjX2Rpc2Nfc3RhdGVfbWFjaGluZSh2cG9ydCwgbmRscCwgTlVMTCwgTkxQX0VWVF9ERVZJQ0VfUk0pOwogCiAJbHBmY191bnJlZ2lzdGVyX3VudXNlZF9mY2YocGhiYSk7CkBAIC01ODYsNiArNTg4LDggQEAKIAkJCQkJCQkoc3RhdHVzICYKIAkJCQkJCQkgSEFfUlhNQVNLKSk7CiAJCX0KKwkJaWYgKHByaW5nLT50eHFfY250KQorCQkJbHBmY19kcmFpbl90eHEocGhiYSk7CiAJCS8qCiAJCSAqIFR1cm4gb24gUmluZyBpbnRlcnJ1cHRzCiAJCSAqLwpAQCAtMTI5Nyw3ICsxMzAxLDcgQEAKICAqIHVzZWQgZm9yIHRoaXMgRkNGIHdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMuCiAgKiBJZiB0aGUgRkNGIHJlY29yZCBuZWVkIHRvIGJlIHVzZWQgd2l0aCBhIHBhcnRpY3VsYXIgdmxhbiBpZCwgdGhlIHZsYW4gaXMKICAqIHNldCBpbiB0aGUgdmxhbl9pZCBvbiByZXR1cm4gb2YgdGhlIGZ1bmN0aW9uLiBJZiBub3QgVkxBTiB0YWdnaW5nIG5lZWQgdG8KLSAqIGJlIHVzZWQgd2l0aCB0aGUgRkNGIHZsYW5faWQgd2lsbCBiZSBzZXQgdG8gMHhGRkZGOworICogYmUgdXNlZCB3aXRoIHRoZSBGQ0Ygdmxhbl9pZCB3aWxsIGJlIHNldCB0byBMUEZDX0ZDT0VfTlVMTF9WSUQ7CiAgKiovCiBzdGF0aWMgaW50CiBscGZjX21hdGNoX2ZjZl9jb25uX2xpc3Qoc3RydWN0IGxwZmNfaGJhICpwaGJhLApAQCAtMTMzMyw3ICsxMzM3LDcgQEAKIAkJaWYgKHBoYmEtPnZhbGlkX3ZsYW4pCiAJCQkqdmxhbl9pZCA9IHBoYmEtPnZsYW5faWQ7CiAJCWVsc2UKLQkJCSp2bGFuX2lkID0gMHhGRkZGOworCQkJKnZsYW5faWQgPSBMUEZDX0ZDT0VfTlVMTF9WSUQ7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMTM1Nyw3ICsxMzYxLDcgQEAKIAkJaWYgKGZjZl92bGFuX2lkKQogCQkJKnZsYW5faWQgPSBmY2Zfdmxhbl9pZDsKIAkJZWxzZQotCQkJKnZsYW5faWQgPSAweEZGRkY7CisJCQkqdmxhbl9pZCA9IExQRkNfRkNPRV9OVUxMX1ZJRDsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0xNDY2LDcgKzE0NzAsNyBAQAogCQllbHNlIGlmIChmY2Zfdmxhbl9pZCkKIAkJCSp2bGFuX2lkID0gZmNmX3ZsYW5faWQ7CiAJCWVsc2UKLQkJCSp2bGFuX2lkID0gMHhGRkZGOworCQkJKnZsYW5faWQgPSBMUEZDX0ZDT0VfTlVMTF9WSUQ7CiAKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMTUxOCw2ICsxNTIyLDkgQEAKIAkJICogRG8gbm90IGNvbnRpbnVlIEZDRiBkaXNjb3ZlcnkgYW5kIGNsZWFyIEZDRl9ESVNDX0lOUFJPR1JFU1MKIAkJICogZmxhZwogCQkgKi8KKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0ZJUCB8IExPR19ESVNDT1ZFUlksCisJCQkJIjI4MzMgU3RvcCBGQ0YgZGlzY292ZXJ5IHByb2Nlc3MgZHVlIHRvIGxpbmsgIgorCQkJCSJzdGF0ZSBjaGFuZ2UgKHgleClcbiIsIHBoYmEtPmxpbmtfc3RhdGUpOwogCQlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAkJcGhiYS0+aGJhX2ZsYWcgJj0gfkZDRl9ESVNDX0lOUFJPR1JFU1M7CiAJCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+KEZDRl9SRURJU0NfRk9WIHwgRkNGX0RJU0NPVkVSWSk7CkBAIC0xNTY1LDcgKzE1NzIsNyBAQAogfQogCiAvKioKLSAqIGxwZmNfbWJ4X2NtcGxfcmVhZF9mY2ZfcmVjb3JkIC0gQ29tcGxldGlvbiBoYW5kbGVyIGZvciByZWFkX2ZjZiBtYm94LgorICogbHBmY19zbGk0X2ZjZl9yZWNfbWJveF9wYXJzZSAtIFBhcnNlIHJlYWRfZmNmIG1ib3ggY29tbWFuZC4KICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgogICogQG1ib3hxOiBwb2ludGVyIHRvIG1haWxib3ggb2JqZWN0LgogICogQG5leHRfZmNmX2luZGV4OiBwb2ludGVyIHRvIGhvbGRlciBvZiBuZXh0IGZjZiBpbmRleC4KQEAgLTE2OTMsNiArMTcwMCwzNyBAQAogfQogCiAvKioKKyBscGZjX3NsaTRfZmNmX3JlY29yZF9tYXRjaCAtIHRlc3RpbmcgbmV3IEZDRiByZWNvcmQgZm9yIG1hdGNoaW5nIGV4aXN0aW5nIEZDRgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAZmNmX3JlYzogcG9pbnRlciB0byBhbiBleGlzdGluZyBGQ0YgcmVjb3JkLgorICogQG5ld19mY2ZfcmVjb3JkOiBwb2ludGVyIHRvIGEgbmV3IEZDRiByZWNvcmQuCisgKiBAbmV3X3ZsYW5faWQ6IHZsYW4gaWQgZnJvbSB0aGUgbmV3IEZDRiByZWNvcmQuCisgKgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBtYXRjaGluZyB0ZXN0IG9mIGEgbmV3IEZDRiByZWNvcmQgYWdhaW5zdCBhbiBleGlzdGluZworICogRkNGIHJlY29yZC4gSWYgdGhlIG5ld192bGFuX2lkIHBhc3NlZCBpbiBpcyBMUEZDX0ZDT0VfSUdOT1JFX1ZJRCwgdmxhbiBpZAorICogd2lsbCBub3QgYmUgdXNlZCBhcyBwYXJ0IG9mIHRoZSBGQ0YgcmVjb3JkIG1hdGNoaW5nIGNyaXRlcmlhLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBhbGwgdGhlIGZpZWxkcyBtYXRjaGluZywgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBib29sCitscGZjX3NsaTRfZmNmX3JlY29yZF9tYXRjaChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsCisJCQkgICBzdHJ1Y3QgbHBmY19mY2ZfcmVjICpmY2ZfcmVjLAorCQkJICAgc3RydWN0IGZjZl9yZWNvcmQgKm5ld19mY2ZfcmVjb3JkLAorCQkJICAgdWludDE2X3QgbmV3X3ZsYW5faWQpCit7CisJaWYgKG5ld192bGFuX2lkICE9IExQRkNfRkNPRV9JR05PUkVfVklEKQorCQlpZiAoIWxwZmNfdmxhbl9pZF9tYXRjaChmY2ZfcmVjLT52bGFuX2lkLCBuZXdfdmxhbl9pZCkpCisJCQlyZXR1cm4gZmFsc2U7CisJaWYgKCFscGZjX21hY19hZGRyX21hdGNoKGZjZl9yZWMtPm1hY19hZGRyLCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoIWxwZmNfc3dfbmFtZV9tYXRjaChmY2ZfcmVjLT5zd2l0Y2hfbmFtZSwgbmV3X2ZjZl9yZWNvcmQpKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKCFscGZjX2ZhYl9uYW1lX21hdGNoKGZjZl9yZWMtPmZhYnJpY19uYW1lLCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCiAgKiBscGZjX21ieF9jbXBsX2ZjZl9zY2FuX3JlYWRfZmNmX3JlYyAtIGZjZiBzY2FuIHJlYWRfZmNmIG1ib3ggY21wbCBoYW5kbGVyLgogICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCiAgKiBAbWJveHE6IHBvaW50ZXIgdG8gbWFpbGJveCBvYmplY3QuCkBAIC0xNzU1LDcgKzE3OTMsNyBAQAogCSAqLwogCWlmICghcmMpIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0ZJUCwKLQkJCQkiMjc4MSBGQ0YgcmVjb3JkIGZjZl9pbmRleDp4JXggZmFpbGVkIEZDRiAiCisJCQkJIjI3ODEgRkNGIHJlY29yZCAoeCV4KSBmYWlsZWQgRkNGICIKIAkJCQkiY29ubmVjdGlvbiBsaXN0IGNoZWNrLCBmY2ZfYXZhaWw6eCV4LCAiCiAJCQkJImZjZl92YWxpZDp4JXhcbiIsCiAJCQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mY2ZfaW5kZXgsCkBAIC0xNzY0LDYgKzE4MDIsMzIgQEAKIAkJCQkgICAgICAgbmV3X2ZjZl9yZWNvcmQpLAogCQkJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmNmX3ZhbGlkLAogCQkJCSAgICAgICBuZXdfZmNmX3JlY29yZCkpOworCQlpZiAoKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9JTl9VU0UpICYmCisJCSAgICBscGZjX3NsaTRfZmNmX3JlY29yZF9tYXRjaChwaGJhLCAmcGhiYS0+ZmNmLmN1cnJlbnRfcmVjLAorCQkgICAgbmV3X2ZjZl9yZWNvcmQsIExQRkNfRkNPRV9JR05PUkVfVklEKSkgeworCQkJLyoKKwkJCSAqIEluIGNhc2UgdGhlIGN1cnJlbnQgaW4tdXNlIEZDRiByZWNvcmQgYmVjb21lcworCQkJICogaW52YWxpZC91bmF2YWlsYWJsZSBkdXJpbmcgRkNGIGRpc2NvdmVyeSB0aGF0CisJCQkgKiB3YXMgbm90IHRyaWdnZXJlZCBieSBmYXN0IEZDRiBmYWlsb3ZlciBwcm9jZXNzLAorCQkJICogdHJlYXQgaXQgYXMgZmFzdCBGQ0YgZmFpbG92ZXIuCisJCQkgKi8KKwkJCWlmICghKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9SRURJU0NfUEVORCkgJiYKKwkJCSAgICAhKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9SRURJU0NfRk9WKSkgeworCQkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19GSVAsCisJCQkJCQkiMjgzNSBJbnZhbGlkIGluLXVzZSBGQ0YgIgorCQkJCQkJInJlY29yZCAoeCV4KSByZXBvcnRlZCwgIgorCQkJCQkJImVudGVyaW5nIGZhc3QgRkNGIGZhaWxvdmVyICIKKwkJCQkJCSJtb2RlIHNjYW5uaW5nLlxuIiwKKwkJCQkJCXBoYmEtPmZjZi5jdXJyZW50X3JlYy5mY2ZfaW5keCk7CisJCQkJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJCQkJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IEZDRl9SRURJU0NfRk9WOworCQkJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJCQkJbHBmY19zbGk0X21ib3hfY21kX2ZyZWUocGhiYSwgbWJveHEpOworCQkJCWxwZmNfc2xpNF9mY2Zfc2Nhbl9yZWFkX2ZjZl9yZWMocGhiYSwKKwkJCQkJCUxQRkNfRkNPRV9GQ0ZfR0VUX0ZJUlNUKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KIAkJZ290byByZWFkX25leHRfZmNmOwogCX0gZWxzZSB7CiAJCWZjZl9pbmRleCA9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmNmX2luZGV4LCBuZXdfZmNmX3JlY29yZCk7CkBAIC0xNzgwLDE0ICsxODQ0LDggQEAKIAkgKi8KIAlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAlpZiAocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX0lOX1VTRSkgewotCQlpZiAobHBmY19mYWJfbmFtZV9tYXRjaChwaGJhLT5mY2YuY3VycmVudF9yZWMuZmFicmljX25hbWUsCi0JCQkJCW5ld19mY2ZfcmVjb3JkKSAmJgotCQkgICAgbHBmY19zd19uYW1lX21hdGNoKHBoYmEtPmZjZi5jdXJyZW50X3JlYy5zd2l0Y2hfbmFtZSwKLQkJCQkJbmV3X2ZjZl9yZWNvcmQpICYmCi0JCSAgICBscGZjX21hY19hZGRyX21hdGNoKHBoYmEtPmZjZi5jdXJyZW50X3JlYy5tYWNfYWRkciwKLQkJCQkJbmV3X2ZjZl9yZWNvcmQpICYmCi0JCSAgICBscGZjX3ZsYW5faWRfbWF0Y2gocGhiYS0+ZmNmLmN1cnJlbnRfcmVjLnZsYW5faWQsCi0JCQkJCXZsYW5faWQpKSB7CisJCWlmIChscGZjX3NsaTRfZmNmX3JlY29yZF9tYXRjaChwaGJhLCAmcGhiYS0+ZmNmLmN1cnJlbnRfcmVjLAorCQkgICAgbmV3X2ZjZl9yZWNvcmQsIHZsYW5faWQpKSB7CiAJCQlwaGJhLT5mY2YuZmNmX2ZsYWcgfD0gRkNGX0FWQUlMQUJMRTsKIAkJCWlmIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVESVNDX1BFTkQpCiAJCQkJLyogU3RvcCBGQ0YgcmVkaXNjIHdhaXQgdGltZXIgaWYgcGVuZGluZyAqLwpAQCAtMTc5Nyw2ICsxODU1LDEzIEBACiAJCQkJcGhiYS0+ZmNmLmZjZl9mbGFnICY9IH4oRkNGX1JFRElTQ19GT1YgfAogCQkJCQkJCUZDRl9ESVNDT1ZFUlkpOwogCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19GSVAsCisJCQkJCSIyODM2IFRoZSBuZXcgRkNGIHJlY29yZCAoeCV4KSAiCisJCQkJCSJtYXRjaGVzIHRoZSBpbi11c2UgRkNGIHJlY29yZCAiCisJCQkJCSIoeCV4KVxuIiwKKwkJCQkJcGhiYS0+ZmNmLmN1cnJlbnRfcmVjLmZjZl9pbmR4LAorCQkJCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZjZl9pbmRleCwKKwkJCQkJICAgICAgIG5ld19mY2ZfcmVjb3JkKSk7CiAJCQlnb3RvIG91dDsKIAkJfQogCQkvKgpAQCAtMTgyOCw2ICsxODkzLDEyIEBACiAJCSAqLwogCQlpZiAoYm9vdF9mbGFnICYmICEoZmNmX3JlYy0+ZmxhZyAmIEJPT1RfRU5BQkxFKSkgewogCQkJLyogQ2hvb3NlIHRoaXMgRkNGIHJlY29yZCAqLworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0ZJUCwKKwkJCQkJIjI4MzcgVXBkYXRlIGN1cnJlbnQgRkNGIHJlY29yZCAiCisJCQkJCSIoeCV4KSB3aXRoIG5ldyBGQ0YgcmVjb3JkICh4JXgpXG4iLAorCQkJCQlmY2ZfcmVjLT5mY2ZfaW5keCwKKwkJCQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mY2ZfaW5kZXgsCisJCQkJCW5ld19mY2ZfcmVjb3JkKSk7CiAJCQlfX2xwZmNfdXBkYXRlX2ZjZl9yZWNvcmQocGhiYSwgZmNmX3JlYywgbmV3X2ZjZl9yZWNvcmQsCiAJCQkJCWFkZHJfbW9kZSwgdmxhbl9pZCwgQk9PVF9FTkFCTEUpOwogCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKQEAgLTE4NDgsNiArMTkxOSwxMiBAQAogCQkgKi8KIAkJaWYgKG5ld19mY2ZfcmVjb3JkLT5maXBfcHJpb3JpdHkgPCBmY2ZfcmVjLT5wcmlvcml0eSkgewogCQkJLyogQ2hvb3NlIHRoZSBuZXcgRkNGIHJlY29yZCB3aXRoIGxvd2VyIHByaW9yaXR5ICovCisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfRklQLAorCQkJCQkiMjgzOCBVcGRhdGUgY3VycmVudCBGQ0YgcmVjb3JkICIKKwkJCQkJIih4JXgpIHdpdGggbmV3IEZDRiByZWNvcmQgKHgleClcbiIsCisJCQkJCWZjZl9yZWMtPmZjZl9pbmR4LAorCQkJCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZjZl9pbmRleCwKKwkJCQkJICAgICAgIG5ld19mY2ZfcmVjb3JkKSk7CiAJCQlfX2xwZmNfdXBkYXRlX2ZjZl9yZWNvcmQocGhiYSwgZmNmX3JlYywgbmV3X2ZjZl9yZWNvcmQsCiAJCQkJCWFkZHJfbW9kZSwgdmxhbl9pZCwgMCk7CiAJCQkvKiBSZXNldCBydW5uaW5nIHJhbmRvbSBGQ0Ygc2VsZWN0aW9uIGNvdW50ICovCkBAIC0xODU3LDExICsxOTM0LDE4IEBACiAJCQlwaGJhLT5mY2YuZWxpZ2libGVfZmNmX2NudCsrOwogCQkJc2VsZWN0X25ld19mY2YgPSBscGZjX3NsaTRfbmV3X2ZjZl9yYW5kb21fc2VsZWN0KHBoYmEsCiAJCQkJCQlwaGJhLT5mY2YuZWxpZ2libGVfZmNmX2NudCk7Ci0JCQlpZiAoc2VsZWN0X25ld19mY2YpCisJCQlpZiAoc2VsZWN0X25ld19mY2YpIHsKKwkJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfRklQLAorCQkJCQkiMjgzOSBVcGRhdGUgY3VycmVudCBGQ0YgcmVjb3JkICIKKwkJCQkJIih4JXgpIHdpdGggbmV3IEZDRiByZWNvcmQgKHgleClcbiIsCisJCQkJCWZjZl9yZWMtPmZjZl9pbmR4LAorCQkJCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZjZl9pbmRleCwKKwkJCQkJICAgICAgIG5ld19mY2ZfcmVjb3JkKSk7CiAJCQkJLyogQ2hvb3NlIHRoZSBuZXcgRkNGIGJ5IHJhbmRvbSBzZWxlY3Rpb24gKi8KIAkJCQlfX2xwZmNfdXBkYXRlX2ZjZl9yZWNvcmQocGhiYSwgZmNmX3JlYywKIAkJCQkJCQkgbmV3X2ZjZl9yZWNvcmQsCiAJCQkJCQkJIGFkZHJfbW9kZSwgdmxhbl9pZCwgMCk7CisJCQl9CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAkJZ290byByZWFkX25leHRfZmNmOwpAQCAtMTg3MSw2ICsxOTU1LDExIEBACiAJICogaW5pdGlhbCBiZXN0LWZpdCBGQ0YuCiAJICovCiAJaWYgKGZjZl9yZWMpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0ZJUCwKKwkJCQkiMjg0MCBVcGRhdGUgY3VycmVudCBGQ0YgcmVjb3JkICIKKwkJCQkid2l0aCBpbml0aWFsIEZDRiByZWNvcmQgKHgleClcbiIsCisJCQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mY2ZfaW5kZXgsCisJCQkJICAgICAgIG5ld19mY2ZfcmVjb3JkKSk7CiAJCV9fbHBmY191cGRhdGVfZmNmX3JlY29yZChwaGJhLCBmY2ZfcmVjLCBuZXdfZmNmX3JlY29yZCwKIAkJCQkJIGFkZHJfbW9kZSwgdmxhbl9pZCwgKGJvb3RfZmxhZyA/CiAJCQkJCSBCT09UX0VOQUJMRSA6IDApKTsKQEAgLTE5MjgsMTIgKzIwMTcsMjMgQEAKIAkJCWxwZmNfdW5yZWdpc3Rlcl9mY2YocGhiYSk7CiAKIAkJCS8qIFJlcGxhY2UgaW4tdXNlIHJlY29yZCB3aXRoIHRoZSBuZXcgcmVjb3JkICovCisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfRklQLAorCQkJCQkiMjg0MiBSZXBsYWNlIHRoZSBjdXJyZW50IGluLXVzZSAiCisJCQkJCSJGQ0YgcmVjb3JkICh4JXgpIHdpdGggZmFpbG92ZXIgRkNGICIKKwkJCQkJInJlY29yZCAoeCV4KVxuIiwKKwkJCQkJcGhiYS0+ZmNmLmN1cnJlbnRfcmVjLmZjZl9pbmR4LAorCQkJCQlwaGJhLT5mY2YuZmFpbG92ZXJfcmVjLmZjZl9pbmR4KTsKIAkJCW1lbWNweSgmcGhiYS0+ZmNmLmN1cnJlbnRfcmVjLAogCQkJICAgICAgICZwaGJhLT5mY2YuZmFpbG92ZXJfcmVjLAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgbHBmY19mY2ZfcmVjKSk7Ci0JCQkvKiBtYXJrIHRoZSBGQ0YgZmFzdCBmYWlsb3ZlciBjb21wbGV0ZWQgKi8KKwkJCS8qCisJCQkgKiBNYXJrIHRoZSBmYXN0IEZDRiBmYWlsb3ZlciByZWRpc2NvdmVyeSBjb21wbGV0ZWQKKwkJCSAqIGFuZCB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IHJvdW5kIG9mIHRoZSByb3VuZHJvYmluCisJCQkgKiBGQ0YgZmFpbG92ZXIuCisJCQkgKi8KIAkJCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwotCQkJcGhiYS0+ZmNmLmZjZl9mbGFnICY9IH5GQ0ZfUkVESVNDX0ZPVjsKKwkJCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPQorCQkJCQl+KEZDRl9SRURJU0NfRk9WIHwgRkNGX1JFRElTQ19SUlUpOwogCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAkJCS8qCiAJCQkgKiBTZXQgdXAgdGhlIGluaXRpYWwgcmVnaXN0ZXJlZCBGQ0YgaW5kZXggZm9yIEZMT0dJCkBAIC0xOTUxLDE1ICsyMDUxLDQyIEBACiAJCQlpZiAoKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9SRURJU0NfRVZUKSB8fAogCQkJICAgIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVESVNDX1BFTkQpKQogCQkJCXJldHVybjsKKworCQkJaWYgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9JTl9VU0UpIHsKKwkJCQkvKgorCQkJCSAqIEluIGNhc2UgdGhlIGN1cnJlbnQgaW4tdXNlIEZDRiByZWNvcmQgbm8KKwkJCQkgKiBsb25nZXIgZXhpc3RlZCBkdXJpbmcgRkNGIGRpc2NvdmVyeSB0aGF0CisJCQkJICogd2FzIG5vdCB0cmlnZ2VyZWQgYnkgZmFzdCBGQ0YgZmFpbG92ZXIKKwkJCQkgKiBwcm9jZXNzLCB0cmVhdCBpdCBhcyBmYXN0IEZDRiBmYWlsb3Zlci4KKwkJCQkgKi8KKwkJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfRklQLAorCQkJCQkJIjI4NDEgSW4tdXNlIEZDRiByZWNvcmQgKHgleCkgIgorCQkJCQkJIm5vdCByZXBvcnRlZCwgZW50ZXJpbmcgZmFzdCAiCisJCQkJCQkiRkNGIGZhaWxvdmVyIG1vZGUgc2Nhbm5pbmcuXG4iLAorCQkJCQkJcGhiYS0+ZmNmLmN1cnJlbnRfcmVjLmZjZl9pbmR4KTsKKwkJCQlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwkJCQlwaGJhLT5mY2YuZmNmX2ZsYWcgfD0gRkNGX1JFRElTQ19GT1Y7CisJCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwkJCQlscGZjX3NsaTRfbWJveF9jbWRfZnJlZShwaGJhLCBtYm94cSk7CisJCQkJbHBmY19zbGk0X2ZjZl9zY2FuX3JlYWRfZmNmX3JlYyhwaGJhLAorCQkJCQkJTFBGQ19GQ09FX0ZDRl9HRVRfRklSU1QpOworCQkJCXJldHVybjsKKwkJCX0KKwogCQkJLyoKIAkJCSAqIE90aGVyd2lzZSwgaW5pdGlhbCBzY2FuIG9yIHBvc3QgbGlua2Rvd24gcmVzY2FuLAogCQkJICogcmVnaXN0ZXIgd2l0aCB0aGUgYmVzdCBGQ0YgcmVjb3JkIGZvdW5kIHNvIGZhcgogCQkJICogdGhyb3VnaCB0aGUgRkNGIHNjYW5uaW5nIHByb2Nlc3MuCiAJCQkgKi8KIAotCQkJLyogbWFyayB0aGUgaW5pdGlhbCBGQ0YgZGlzY292ZXJ5IGNvbXBsZXRlZCAqLworCQkJLyoKKwkJCSAqIE1hcmsgdGhlIGluaXRpYWwgRkNGIGRpc2NvdmVyeSBjb21wbGV0ZWQgYW5kCisJCQkgKiB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IHJvdW5kIG9mIHRoZSByb3VuZHJvYmluCisJCQkgKiBGQ0YgZmFpbG92ZXIuCisJCQkgKi8KIAkJCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwotCQkJcGhiYS0+ZmNmLmZjZl9mbGFnICY9IH5GQ0ZfSU5JVF9ESVNDOworCQkJcGhiYS0+ZmNmLmZjZl9mbGFnICY9CisJCQkJCX4oRkNGX0lOSVRfRElTQyB8IEZDRl9SRURJU0NfUlJVKTsKIAkJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJCQkvKgogCQkJICogU2V0IHVwIHRoZSBpbml0aWFsIHJlZ2lzdGVyZWQgRkNGIGluZGV4IGZvciBGTE9HSQpAQCAtMjAzMyw2ICsyMTYwLDExIEBACiAJCQkJICAgICAgbmV4dF9mY2ZfaW5kZXgpOwogCiAJLyogVXBsb2FkIG5ldyBGQ0YgcmVjb3JkIHRvIHRoZSBmYWlsb3ZlciBGQ0YgcmVjb3JkICovCisJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0ZJUCwKKwkJCSIyODM0IFVwZGF0ZSB0aGUgY3VycmVudCBGQ0YgcmVjb3JkICh4JXgpICIKKwkJCSJ3aXRoIHRoZSBuZXh0IEZDRiByZWNvcmQgKHgleClcbiIsCisJCQlwaGJhLT5mY2YuZmFpbG92ZXJfcmVjLmZjZl9pbmR4LAorCQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mY2ZfaW5kZXgsIG5ld19mY2ZfcmVjb3JkKSk7CiAJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJX19scGZjX3VwZGF0ZV9mY2ZfcmVjb3JkKHBoYmEsICZwaGJhLT5mY2YuZmFpbG92ZXJfcmVjLAogCQkJCSBuZXdfZmNmX3JlY29yZCwgYWRkcl9tb2RlLCB2bGFuX2lkLApAQCAtMjA1MCw3ICsyMTgyLDcgQEAKIAogCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19GSVAsCiAJCQkiMjc4MyBGTE9HSSByb3VuZCByb2JpbiBGQ0YgZmFpbG92ZXIgZnJvbSBGQ0YgIgotCQkJIihpbmRleDp4JXgpIHRvIEZDRiAoaW5kZXg6eCV4KS5cbiIsCisJCQkiKHgleCkgdG8gRkNGICh4JXgpLlxuIiwKIAkJCWN1cnJlbnRfZmNmX2luZGV4LAogCQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mY2ZfaW5kZXgsIG5ld19mY2ZfcmVjb3JkKSk7CiAKQEAgLTIwODQsNyArMjIxNiw3IEBACiAJCWdvdG8gb3V0OwogCiAJLyogSWYgRkNGIGRpc2NvdmVyeSBwZXJpb2QgaXMgb3Zlciwgbm8gbmVlZCB0byBwcm9jZWVkICovCi0JaWYgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9ESVNDT1ZFUlkpCisJaWYgKCEocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX0RJU0NPVkVSWSkpCiAJCWdvdG8gb3V0OwogCiAJLyogUGFyc2UgdGhlIEZDRiByZWNvcmQgZnJvbSB0aGUgbm9uLWVtYmVkZGVkIG1haWxib3ggY29tbWFuZCAqLwpAQCAtMjcxNSwxMSArMjg0NywzNSBAQAogCXN0cnVjdCBscGZjX3Zwb3J0ICAqdnBvcnQgPSBwbWItPnZwb3J0OwogCXN0cnVjdCBscGZjX2RtYWJ1ZiAqbXAgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopIChwbWItPmNvbnRleHQxKTsKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCA9IChzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKSBwbWItPmNvbnRleHQyOworCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7CiAKIAlwbWItPmNvbnRleHQxID0gTlVMTDsKIAotCS8qIEdvb2Qgc3RhdHVzLCBjYWxsIHN0YXRlIG1hY2hpbmUgKi8KLQlscGZjX2Rpc2Nfc3RhdGVfbWFjaGluZSh2cG9ydCwgbmRscCwgcG1iLCBOTFBfRVZUX0NNUExfUkVHX0xPR0lOKTsKKwlpZiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfUkVHX0xPR0lOX1NFTkQpCisJCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfUkVHX0xPR0lOX1NFTkQ7CisKKwlpZiAobmRscC0+bmxwX2ZsYWcgJiAgTkxQX0lHTlJfUkVHX0NNUEwgfHwKKwkJbmRscC0+bmxwX3N0YXRlICE9IE5MUF9TVEVfUkVHX0xPR0lOX0lTU1VFKSB7CisJCS8qIFdlIHJjdmQgYSByc2NuIGFmdGVyIGlzc3VpbmcgdGhpcworCQkgKiBtYm94IHJlZyBsb2dpbiwgd2UgbWF5IGhhdmUgY3ljbGVkCisJCSAqIGJhY2sgdGhyb3VnaCB0aGUgc3RhdGUgYW5kIGJlCisJCSAqIGJhY2sgYXQgcmVnIGxvZ2luIHN0YXRlIHNvIHRoaXMKKwkJICogbWJveCBuZWVkcyB0byBiZSBpZ25vcmVkIGJlY2FzZQorCQkgKiB0aGVyZSBpcyBhbm90aGVyIHJlZyBsb2dpbiBpbgorCQkgKiBwcm9jY2Vzcy4KKwkJICovCisJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfSUdOUl9SRUdfQ01QTDsKKwkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQlpZiAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KQorCQkJbHBmY19zbGk0X2ZyZWVfcnBpKHBoYmEsCisJCQkJcG1iLT51Lm1iLnVuLnZhclJlZ0xvZ2luLnJwaSk7CisKKwl9IGVsc2UKKwkJLyogR29vZCBzdGF0dXMsIGNhbGwgc3RhdGUgbWFjaGluZSAqLworCQlscGZjX2Rpc2Nfc3RhdGVfbWFjaGluZSh2cG9ydCwgbmRscCwgcG1iLAorCQkJCU5MUF9FVlRfQ01QTF9SRUdfTE9HSU4pOworCiAJbHBmY19tYnVmX2ZyZWUocGhiYSwgbXAtPnZpcnQsIG1wLT5waHlzKTsKIAlrZnJlZShtcCk7CiAJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CkBAIC0zNDI3LDcgKzM1ODMsNyBAQAogCWtyZWZfaW5pdCgmbmRscC0+a3JlZik7CiAJTkxQX0lOVF9OT0RFX0FDVChuZGxwKTsKIAlhdG9taWNfc2V0KCZuZGxwLT5jbWRfcGVuZGluZywgMCk7Ci0JbmRscC0+Y21kX3FkZXB0aCA9IExQRkNfTUFYX1RHVF9RREVQVEg7CisJbmRscC0+Y21kX3FkZXB0aCA9IHZwb3J0LT5jZmdfdGd0X3F1ZXVlX2RlcHRoOwogfQogCiBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqCkBAIC0zNzAwLDYgKzM4NTYsNyBAQAogCQkJCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAkJfQogCQlscGZjX25vX3JwaShwaGJhLCBuZGxwKTsKKwogCQluZGxwLT5ubHBfcnBpID0gMDsKIAkJbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9SUElfVkFMSUQ7CiAJCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfTlBSX0FESVNDOwpAQCAtMzg0Miw2ICszOTk5LDkgQEAKIAkJCQlrZnJlZShtcCk7CiAJCQl9CiAJCQlsaXN0X2RlbCgmbWItPmxpc3QpOworCQkJaWYgKHBoYmEtPnNsaV9yZXYgPT0gTFBGQ19TTElfUkVWNCkKKwkJCQlscGZjX3NsaTRfZnJlZV9ycGkocGhiYSwKKwkJCQkJIG1iLT51Lm1iLnVuLnZhclJlZ0xvZ2luLnJwaSk7CiAJCQltZW1wb29sX2ZyZWUobWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCQkJLyogV2Ugc2hhbGwgbm90IGludm9rZSB0aGUgbHBmY19ubHBfcHV0IHRvIGRlY3JlbWVudAogCQkJICogdGhlIG5kbHAgcmVmZXJlbmNlIGNvdW50IGFzIHdlIGFyZSBpbiB0aGUgcHJvY2VzcwpAQCAtMzg4Myw2ICs0MDQzLDcgQEAKIAogCWxwZmNfY2FuY2VsX3JldHJ5X2RlbGF5X3Rtbyh2cG9ydCwgbmRscCk7CiAJaWYgKChuZGxwLT5ubHBfZmxhZyAmIE5MUF9ERUZFUl9STSkgJiYKKwkJIShuZGxwLT5ubHBfZmxhZyAmIE5MUF9SRUdfTE9HSU5fU0VORCkgJiYKIAkgICAgIShuZGxwLT5ubHBfZmxhZyAmIE5MUF9SUElfVkFMSUQpKSB7CiAJCS8qIEZvciB0aGlzIGNhc2Ugd2UgbmVlZCB0byBjbGVhbnVwIHRoZSBkZWZhdWx0IHJwaQogCQkgKiBhbGxvY2F0ZWQgYnkgdGhlIGZpcm13YXJlLgpAQCAtNTE4MCwxMyArNTM0MSwxNiBAQAogbHBmY191bnJlZ2lzdGVyX3VudXNlZF9mY2Yoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewogCS8qCi0JICogSWYgSEJBIGlzIG5vdCBydW5uaW5nIGluIEZJUCBtb2RlIG9yIGlmIEhCQSBkb2VzIG5vdCBzdXBwb3J0Ci0JICogRkNvRSBvciBpZiBGQ0YgaXMgbm90IHJlZ2lzdGVyZWQsIGRvIG5vdGhpbmcuCisJICogSWYgSEJBIGlzIG5vdCBydW5uaW5nIGluIEZJUCBtb2RlLCBpZiBIQkEgZG9lcyBub3Qgc3VwcG9ydAorCSAqIEZDb0UsIGlmIEZDRiBkaXNjb3ZlcnkgaXMgb25nb2luZywgb3IgaWYgRkNGIGhhcyBub3QgYmVlbgorCSAqIHJlZ2lzdGVyZWQsIGRvIG5vdGhpbmcuCiAJICovCiAJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJaWYgKCEocGhiYS0+aGJhX2ZsYWcgJiBIQkFfRkNPRV9TVVBQT1JUKSB8fAogCSAgICAhKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9SRUdJU1RFUkVEKSB8fAotCSAgICAhKHBoYmEtPmhiYV9mbGFnICYgSEJBX0ZJUF9TVVBQT1JUKSkgeworCSAgICAhKHBoYmEtPmhiYV9mbGFnICYgSEJBX0ZJUF9TVVBQT1JUKSB8fAorCSAgICAocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX0RJU0NPVkVSWSkgfHwKKwkgICAgKHBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlID09IExQRkNfRkxPR0kpKSB7CiAJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3LmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3LmgKaW5kZXggZTY1NGQwMS4uZjVkYmYyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ody5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaApAQCAtMTE3MCw2ICsxMTcwLDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdFUlNIQVJLICAgIDB4MDcwNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RPTUNBVCAgICAgICAgMHgwNzE0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRkFMQ09OICAgICAgICAweGYxODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9CQUxJVVMgICAgICAgIDB4ZTEzMQogCiAjZGVmaW5lIEpFREVDX0lEX0FERFJFU1MgICAgICAgICAgICAweDAwODAwMDFjCiAjZGVmaW5lIEZJUkVGTFlfSkVERUNfSUQgICAgICAgICAgICAweDFBQ0MKQEAgLTMwMTQsMTggKzMwMTUsMTAgQEAKIAl1aW50MzJfdCBoYnFfZ2V0WzE2XTsKIH07CiAKLXN0cnVjdCBzbGkzX2luYl9wZ3AgewotCXVpbnQzMl90IGhhX2NvcHk7Ci0JdWludDMyX3QgY291bnRlcjsKLQlzdHJ1Y3QgbHBmY19wZ3AgcG9ydFtNQVhfUklOR1NdOwotCXVpbnQzMl90IGhicV9nZXRbMTZdOwotfTsKLQogdW5pb24gc2xpX3ZhciB7CiAJc3RydWN0IHNsaTJfZGVzYwlzMjsKIAlzdHJ1Y3Qgc2xpM19kZXNjCXMzOwogCXN0cnVjdCBzbGkzX3BncAkJczNfcGdwOwotCXN0cnVjdCBzbGkzX2luYl9wZ3AJczNfaW5iX3BncDsKIH07CiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTMxMzIsNiArMzEyNSwxNCBAQAogI2RlZmluZSBJT0VSUl9CVUZGRVJfU0hPUlRBR0UgICAgICAgICAweDI4CiAjZGVmaW5lIElPRVJSX0RFRkFVTFQgICAgICAgICAgICAgICAgIDB4MjkKICNkZWZpbmUgSU9FUlJfQ05UICAgICAgICAgICAgICAgICAgICAgMHgyQQorI2RlZmluZSBJT0VSUl9TTEVSX0ZBSUxVUkUgICAgICAgICAgICAweDQ2CisjZGVmaW5lIElPRVJSX1NMRVJfQ01EX1JDVl9GQUlMVVJFICAgIDB4NDcKKyNkZWZpbmUgSU9FUlJfU0xFUl9SRUNfUkpUX0VSUiAgICAgICAgMHg0OAorI2RlZmluZSBJT0VSUl9TTEVSX1JFQ19TUlJfUkVUUllfRVJSICAweDQ5CisjZGVmaW5lIElPRVJSX1NMRVJfU1JSX1JKVF9FUlIgICAgICAgIDB4NEEKKyNkZWZpbmUgSU9FUlJfU0xFUl9SUlFfUkpUX0VSUiAgICAgICAgMHg0QworI2RlZmluZSBJT0VSUl9TTEVSX1JSUV9SRVRSWV9FUlIgICAgICAweDRECisjZGVmaW5lIElPRVJSX1NMRVJfQUJUU19FUlIgICAgICAgICAgIDB4NEUKIAogI2RlZmluZSBJT0VSUl9EUlZSX01BU0sgICAgICAgICAgICAgICAweDEwMAogI2RlZmluZSBJT0VSUl9TTElfRE9XTiAgICAgICAgICAgICAgICAweDEwMSAgLyogdWxwU3RhdHVzICAtIERyaXZlciBkZWZpbmVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCmluZGV4IGNkOTY5N2UuLjI3ODZlZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCkBAIC02MjEsNiArNjIxLDcgQEAKIC8qKgogICogbHBmY19oYmFfaW5pdF9saW5rIC0gSW5pdGlhbGl6ZSB0aGUgRkMgbGluawogICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAZmxhZzogbWFpbGJveCBjb21tYW5kIGlzc3VlIG1vZGUgLSBlaXRoZXIgTUJYX1BPTEwgb3IgTUJYX05PV0FJVAogICoKICAqIFRoaXMgcm91dGluZSB3aWxsIGlzc3VlIHRoZSBJTklUX0xJTksgbWFpbGJveCBjb21tYW5kIGNhbGwuCiAgKiBJdCBpcyBhdmFpbGFibGUgdG8gb3RoZXIgZHJpdmVycyB0aHJvdWdoIHRoZSBscGZjX2hiYSBkYXRhCkBAIC02MzIsNyArNjMzLDcgQEAKICAqCQlBbnkgb3RoZXIgdmFsdWUgLSBlcnJvcgogICoqLwogaW50Ci1scGZjX2hiYV9pbml0X2xpbmsoc3RydWN0IGxwZmNfaGJhICpwaGJhKQorbHBmY19oYmFfaW5pdF9saW5rKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDMyX3QgZmxhZykKIHsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSBwaGJhLT5wcG9ydDsKIAlMUEZDX01CT1hRX3QgKnBtYjsKQEAgLTY1MSw3ICs2NTIsNyBAQAogCQlwaGJhLT5jZmdfbGlua19zcGVlZCk7CiAJcG1iLT5tYm94X2NtcGwgPSBscGZjX3NsaV9kZWZfbWJveF9jbXBsOwogCWxwZmNfc2V0X2xvb3BiYWNrX2ZsYWcocGhiYSk7Ci0JcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIHBtYiwgTUJYX05PV0FJVCk7CisJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIHBtYiwgZmxhZyk7CiAJaWYgKHJjICE9IE1CWF9TVUNDRVNTKSB7CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCiAJCQkiMDQ5OCBBZGFwdGVyIGZhaWxlZCB0byBpbml0LCBtYnhDbWQgeCV4ICIKQEAgLTY2NCwxNyArNjY1LDIxIEBACiAJCXdyaXRlbCgweGZmZmZmZmZmLCBwaGJhLT5IQXJlZ2FkZHIpOwogCQlyZWFkbChwaGJhLT5IQXJlZ2FkZHIpOyAvKiBmbHVzaCAqLwogCQlwaGJhLT5saW5rX3N0YXRlID0gTFBGQ19IQkFfRVJST1I7Ci0JCWlmIChyYyAhPSBNQlhfQlVTWSkKKwkJaWYgKHJjICE9IE1CWF9CVVNZIHx8IGZsYWcgPT0gTUJYX1BPTEwpCiAJCQltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCXBoYmEtPmNmZ19zdXBwcmVzc19saW5rX3VwID0gTFBGQ19JTklUSUFMSVpFX0xJTks7CisJaWYgKGZsYWcgPT0gTUJYX1BPTEwpCisJCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qKgogICogbHBmY19oYmFfZG93bl9saW5rIC0gdGhpcyByb3V0aW5lIGRvd25zIHRoZSBGQyBsaW5rCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBmbGFnOiBtYWlsYm94IGNvbW1hbmQgaXNzdWUgbW9kZSAtIGVpdGhlciBNQlhfUE9MTCBvciBNQlhfTk9XQUlUCiAgKgogICogVGhpcyByb3V0aW5lIHdpbGwgaXNzdWUgdGhlIERPV05fTElOSyBtYWlsYm94IGNvbW1hbmQgY2FsbC4KICAqIEl0IGlzIGF2YWlsYWJsZSB0byBvdGhlciBkcml2ZXJzIHRocm91Z2ggdGhlIGxwZmNfaGJhIGRhdGEKQEAgLTY4NSw3ICs2OTAsNyBAQAogICoJCUFueSBvdGhlciB2YWx1ZSAtIGVycm9yCiAgKiovCiBpbnQKLWxwZmNfaGJhX2Rvd25fbGluayhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCitscGZjX2hiYV9kb3duX2xpbmsoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MzJfdCBmbGFnKQogewogCUxQRkNfTUJPWFFfdCAqcG1iOwogCWludCByYzsKQEAgLTcwMSw3ICs3MDYsNyBAQAogCQkiMDQ5MSBBZGFwdGVyIExpbmsgaXMgZGlzYWJsZWQuXG4iKTsKIAlscGZjX2Rvd25fbGluayhwaGJhLCBwbWIpOwogCXBtYi0+bWJveF9jbXBsID0gbHBmY19zbGlfZGVmX21ib3hfY21wbDsKLQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1iLCBNQlhfTk9XQUlUKTsKKwlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1iLCBmbGFnKTsKIAlpZiAoKHJjICE9IE1CWF9TVUNDRVNTKSAmJiAocmMgIT0gTUJYX0JVU1kpKSB7CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLAogCQlLRVJOX0VSUiwgTE9HX0lOSVQsCkBAIC03MTEsNiArNzE2LDkgQEAKIAkJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJCXJldHVybiAtRUlPOwogCX0KKwlpZiAoZmxhZyA9PSBNQlhfUE9MTCkKKwkJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTgxOCw2ICsxODI2LDEwIEBACiAJCW0gPSAodHlwZW9mKG0pKXsiTFBTZTEyMDAyLU1MMS1FIiwgIlBDSWUiLAogCQkJCSJFbXVsZXhTZWN1cmUgRmlicmUifTsKIAkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX0JBTElVUzoKKwkJbSA9ICh0eXBlb2YobSkpeyJMUFZlMTIwMDIiLCAiUENJZSBTaGFyZWQgSS9PIiwKKwkJCQkiRmlicmUgQ2hhbm5lbCBBZGFwdGVyIn07CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCW0gPSAodHlwZW9mKG0pKXsiVW5rbm93biIsICIiLCAiIn07CiAJCWJyZWFrOwpAQCAtMjI3OSwxMCArMjI5MSwzMiBAQAogbHBmY19ibG9ja19tZ210X2lvKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEpCiB7CiAJdW5zaWduZWQgbG9uZyBpZmxhZzsKKwl1aW50OF90IGFjdGNtZCA9IE1CWF9IRUFSVEJFQVQ7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgaWZsYWcpOwogCXBoYmEtPnNsaS5zbGlfZmxhZyB8PSBMUEZDX0JMT0NLX01HTVRfSU87CisJaWYgKHBoYmEtPnNsaS5tYm94X2FjdGl2ZSkKKwkJYWN0Y21kID0gcGhiYS0+c2xpLm1ib3hfYWN0aXZlLT51Lm1iLm1ieENvbW1hbmQ7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgaWZsYWcpOworCS8qIERldGVybWluZSBob3cgbG9uZyB3ZSBtaWdodCB3YWl0IGZvciB0aGUgYWN0aXZlIG1haWxib3gKKwkgKiBjb21tYW5kIHRvIGJlIGdyYWNlZnVsbHkgY29tcGxldGVkIGJ5IGZpcm13YXJlLgorCSAqLworCXRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKGxwZmNfbWJveF90bW9fdmFsKHBoYmEsIGFjdGNtZCkgKiAxMDAwKSArCisJCQlqaWZmaWVzOworCS8qIFdhaXQgZm9yIHRoZSBvdXRzdG5hZGluZyBtYWlsYm94IGNvbW1hbmQgdG8gY29tcGxldGUgKi8KKwl3aGlsZSAocGhiYS0+c2xpLm1ib3hfYWN0aXZlKSB7CisJCS8qIENoZWNrIGFjdGl2ZSBtYWlsYm94IGNvbXBsZXRlIHN0YXR1cyBldmVyeSAybXMgKi8KKwkJbXNsZWVwKDIpOworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLAorCQkJCSIyODEzIE1nbXQgSU8gaXMgQmxvY2tlZCAleCAiCisJCQkJIi0gbWJveCBjbWQgJXggc3RpbGwgYWN0aXZlXG4iLAorCQkJCXBoYmEtPnNsaS5zbGlfZmxhZywgYWN0Y21kKTsKKwkJCWJyZWFrOworCQl9CisJfQogfQogCiAvKioKQEAgLTMzMjMsMjIgKzMzNTcsMTQgQEAKIAkJCQkJImV2dF90YWc6eCV4LCBmY2ZfaW5kZXg6eCV4XG4iLAogCQkJCQlhY3FlX2Zjb2UtPmV2ZW50X3RhZywKIAkJCQkJYWNxZV9mY29lLT5pbmRleCk7CisJCS8qIElmIHRoZSBGQ0YgZGlzY292ZXJ5IGlzIGluIHByb2dyZXNzLCBkbyBub3RoaW5nLiAqLwogCQlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKLQkJaWYgKChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfU0NBTl9ET05FKSB8fAotCQkgICAgKHBoYmEtPmhiYV9mbGFnICYgRkNGX0RJU0NfSU5QUk9HUkVTUykpIHsKLQkJCS8qCi0JCQkgKiBJZiB0aGUgY3VycmVudCBGQ0YgaXMgaW4gZGlzY292ZXJlZCBzdGF0ZSBvcgotCQkJICogRkNGIGRpc2NvdmVyeSBpcyBpbiBwcm9ncmVzcywgZG8gbm90aGluZy4KLQkJCSAqLworCQlpZiAocGhiYS0+aGJhX2ZsYWcgJiBGQ0ZfRElTQ19JTlBST0dSRVNTKSB7CiAJCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCQkJYnJlYWs7CiAJCX0KLQorCQkvKiBJZiBmYXN0IEZDRiBmYWlsb3ZlciByZXNjYW4gZXZlbnQgaXMgcGVuZGluZywgZG8gbm90aGluZyAqLwogCQlpZiAocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFRElTQ19FVlQpIHsKLQkJCS8qCi0JCQkgKiBJZiBmYXN0IEZDRiBmYWlsb3ZlciByZXNjYW4gZXZlbnQgaXMgcGVuZGluZywKLQkJCSAqIGRvIG5vdGhpbmcuCi0JCQkgKi8KIAkJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJCQlicmVhazsKIAkJfQpAQCAtMzM1OSw3ICszMzg1LDEzIEBACiAJCQkJCWFjcWVfZmNvZS0+aW5kZXgpOwogCQkJcmMgPSBscGZjX3NsaTRfcmVhZF9mY2ZfcmVjKHBoYmEsIGFjcWVfZmNvZS0+aW5kZXgpOwogCQl9Ci0KKwkJLyogSWYgdGhlIEZDRiBoYXMgYmVlbiBpbiBkaXNjb3ZlcmVkIHN0YXRlLCBkbyBub3RoaW5nLiAqLworCQlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwkJaWYgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9TQ0FOX0RPTkUpIHsKKwkJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJCQlicmVhazsKKwkJfQorCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCQkvKiBPdGhlcndpc2UsIHNjYW4gdGhlIGVudGlyZSBGQ0YgdGFibGUgYW5kIHJlLWRpc2NvdmVyIFNBTiAqLwogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfRklQIHwgTE9HX0RJU0NPVkVSWSwKIAkJCQkiMjc3MCBTdGFydCBGQ0YgdGFibGUgc2NhbiBkdWUgdG8gbmV3IEZDRiAiCkBAIC00ODg1LDYgKzQ5MTcsNyBAQAogCXBoYmEtPmZjX2FsdG92ID0gRkZfREVGX0FMVE9WOwogCXBoYmEtPmZjX2FyYnRvdiA9IEZGX0RFRl9BUkJUT1Y7CiAKKwlhdG9taWNfc2V0KCZwaGJhLT5zZGV2X2NudCwgMCk7CiAJdnBvcnQgPSBscGZjX2NyZWF0ZV9wb3J0KHBoYmEsIHBoYmEtPmJyZF9ubywgJnBoYmEtPnBjaWRldi0+ZGV2KTsKIAlpZiAoIXZwb3J0KQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTU1MzMsOSArNTU2NiwxMiBAQAogCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCiAJLyogUmVzZXQgdGhlIERGVF9IQkFfUV9ERVBUSCB0byB0aGUgbWF4IHhyaSAgKi8KLQlpZiAocGhiYS0+Y2ZnX2hiYV9xdWV1ZV9kZXB0aCA+IChwaGJhLT5zbGk0X2hiYS5tYXhfY2ZnX3BhcmFtLm1heF94cmkpKQorCWlmIChwaGJhLT5jZmdfaGJhX3F1ZXVlX2RlcHRoID4KKwkJKHBoYmEtPnNsaTRfaGJhLm1heF9jZmdfcGFyYW0ubWF4X3hyaSAtCisJCQlscGZjX3NsaTRfZ2V0X2Vsc19pb2NiX2NudChwaGJhKSkpCiAJCXBoYmEtPmNmZ19oYmFfcXVldWVfZGVwdGggPQotCQkJCXBoYmEtPnNsaTRfaGJhLm1heF9jZmdfcGFyYW0ubWF4X3hyaTsKKwkJCXBoYmEtPnNsaTRfaGJhLm1heF9jZmdfcGFyYW0ubWF4X3hyaSAtCisJCQkJbHBmY19zbGk0X2dldF9lbHNfaW9jYl9jbnQocGhiYSk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC02OTkzLDIyICs3MDI5LDI4IEBACiBzdGF0aWMgaW50CiBscGZjX3NsaTRfZW5hYmxlX21zaXgoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewotCWludCByYywgaW5kZXg7CisJaW50IHZlY3RvcnMsIHJjLCBpbmRleDsKIAogCS8qIFNldCB1cCBNU0ktWCBtdWx0aS1tZXNzYWdlIHZlY3RvcnMgKi8KIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBwaGJhLT5zbGk0X2hiYS5jZmdfZXFuOyBpbmRleCsrKQogCQlwaGJhLT5zbGk0X2hiYS5tc2l4X2VudHJpZXNbaW5kZXhdLmVudHJ5ID0gaW5kZXg7CiAKIAkvKiBDb25maWd1cmUgTVNJLVggY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgKi8KKwl2ZWN0b3JzID0gcGhiYS0+c2xpNF9oYmEuY2ZnX2VxbjsKK2VuYWJsZV9tc2l4X3ZlY3RvcnM6CiAJcmMgPSBwY2lfZW5hYmxlX21zaXgocGhiYS0+cGNpZGV2LCBwaGJhLT5zbGk0X2hiYS5tc2l4X2VudHJpZXMsCi0JCQkgICAgIHBoYmEtPnNsaTRfaGJhLmNmZ19lcW4pOwotCWlmIChyYykgeworCQkJICAgICB2ZWN0b3JzKTsKKwlpZiAocmMgPiAxKSB7CisJCXZlY3RvcnMgPSByYzsKKwkJZ290byBlbmFibGVfbXNpeF92ZWN0b3JzOworCX0gZWxzZSBpZiAocmMpIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0lOSVQsCiAJCQkJIjA0ODQgUENJIGVuYWJsZSBNU0ktWCBmYWlsZWQgKCVkKVxuIiwgcmMpOwogCQlnb3RvIG1zaV9mYWlsX291dDsKIAl9CisKIAkvKiBMb2cgTVNJLVggdmVjdG9yIGFzc2lnbm1lbnQgKi8KLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBwaGJhLT5zbGk0X2hiYS5jZmdfZXFuOyBpbmRleCsrKQorCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHZlY3RvcnM7IGluZGV4KyspCiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19JTklULAogCQkJCSIwNDg5IE1TSS1YIGVudHJ5WyVkXTogdmVjdG9yPXgleCAiCiAJCQkJIm1lc3NhZ2U9JWRcbiIsIGluZGV4LApAQCAtNzAzMCw3ICs3MDcyLDcgQEAKIAl9CiAKIAkvKiBUaGUgcmVzdCBvZiB0aGUgdmVjdG9yKHMpIGFyZSBhc3NvY2lhdGVkIHRvIGZhc3QtcGF0aCBoYW5kbGVyKHMpICovCi0JZm9yIChpbmRleCA9IDE7IGluZGV4IDwgcGhiYS0+c2xpNF9oYmEuY2ZnX2VxbjsgaW5kZXgrKykgeworCWZvciAoaW5kZXggPSAxOyBpbmRleCA8IHZlY3RvcnM7IGluZGV4KyspIHsKIAkJcGhiYS0+c2xpNF9oYmEuZmNwX2VxX2hkbFtpbmRleCAtIDFdLmlkeCA9IGluZGV4IC0gMTsKIAkJcGhiYS0+c2xpNF9oYmEuZmNwX2VxX2hkbFtpbmRleCAtIDFdLnBoYmEgPSBwaGJhOwogCQlyYyA9IHJlcXVlc3RfaXJxKHBoYmEtPnNsaTRfaGJhLm1zaXhfZW50cmllc1tpbmRleF0udmVjdG9yLApAQCAtNzA0NCw2ICs3MDg2LDcgQEAKIAkJCWdvdG8gY2ZnX2ZhaWxfb3V0OwogCQl9CiAJfQorCXBoYmEtPnNsaTRfaGJhLm1zaXhfdmVjX25yID0gdmVjdG9yczsKIAogCXJldHVybiByYzsKIApAQCAtNzA3Nyw5ICs3MTIwLDEwIEBACiAJLyogRnJlZSB1cCBNU0ktWCBtdWx0aS1tZXNzYWdlIHZlY3RvcnMgKi8KIAlmcmVlX2lycShwaGJhLT5zbGk0X2hiYS5tc2l4X2VudHJpZXNbMF0udmVjdG9yLCBwaGJhKTsKIAotCWZvciAoaW5kZXggPSAxOyBpbmRleCA8IHBoYmEtPnNsaTRfaGJhLmNmZ19lcW47IGluZGV4KyspCisJZm9yIChpbmRleCA9IDE7IGluZGV4IDwgcGhiYS0+c2xpNF9oYmEubXNpeF92ZWNfbnI7IGluZGV4KyspCiAJCWZyZWVfaXJxKHBoYmEtPnNsaTRfaGJhLm1zaXhfZW50cmllc1tpbmRleF0udmVjdG9yLAogCQkJICZwaGJhLT5zbGk0X2hiYS5mY3BfZXFfaGRsW2luZGV4IC0gMV0pOworCiAJLyogRGlzYWJsZSBNU0ktWCAqLwogCXBjaV9kaXNhYmxlX21zaXgocGhiYS0+cGNpZGV2KTsKIApAQCAtNzEyMSw2ICs3MTY1LDcgQEAKIAkJcGNpX2Rpc2FibGVfbXNpKHBoYmEtPnBjaWRldik7CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19JTklULAogCQkJCSIwNDkwIE1TSSByZXF1ZXN0X2lycSBmYWlsZWQgKCVkKVxuIiwgcmMpOworCQlyZXR1cm4gcmM7CiAJfQogCiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcGhiYS0+Y2ZnX2ZjcF9lcV9jb3VudDsgaW5kZXgrKykgewpAQCAtNzEyOCw3ICs3MTczLDcgQEAKIAkJcGhiYS0+c2xpNF9oYmEuZmNwX2VxX2hkbFtpbmRleF0ucGhiYSA9IHBoYmE7CiAJfQogCi0JcmV0dXJuIHJjOworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTc4MzksNiArNzg4NCw5IEBACiAJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKIAkJCSIyNzEwIFBDSSBjaGFubmVsIGRpc2FibGUgcHJlcGFyaW5nIGZvciByZXNldFxuIik7CiAKKwkvKiBCbG9jayBhbnkgbWFuYWdlbWVudCBJL09zIHRvIHRoZSBkZXZpY2UgKi8KKwlscGZjX2Jsb2NrX21nbXRfaW8ocGhiYSk7CisKIAkvKiBCbG9jayBhbGwgU0NTSSBkZXZpY2VzJyBJL09zIG9uIHRoZSBob3N0ICovCiAJbHBmY19zY3NpX2Rldl9ibG9jayhwaGJhKTsKIApAQCAtNzg0OCw2ICs3ODk2LDcgQEAKIAkvKiBEaXNhYmxlIGludGVycnVwdCBhbmQgcGNpIGRldmljZSAqLwogCWxwZmNfc2xpX2Rpc2FibGVfaW50cihwaGJhKTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGhiYS0+cGNpZGV2KTsKKwogCS8qIEZsdXNoIGFsbCBkcml2ZXIncyBvdXRzdGFuZGluZyBTQ1NJIEkvT3MgYXMgd2UgYXJlIHRvIHJlc2V0ICovCiAJbHBmY19zbGlfZmx1c2hfZmNwX3JpbmdzKHBoYmEpOwogfQpAQCAtNzg2MSw3ICs3OTEwLDcgQEAKICAqIHBlbmRpbmcgSS9Pcy4KICAqKi8KIHN0YXRpYyB2b2lkCi1scGZjX3ByZXBfZGV2X2Zvcl9wZXJtX2ZhaWx1cmUoc3RydWN0IGxwZmNfaGJhICpwaGJhKQorbHBmY19zbGlfcHJlcF9kZXZfZm9yX3Blcm1fZmFpbHVyZShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CiAJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKIAkJCSIyNzExIFBDSSBjaGFubmVsIHBlcm1hbmVudCBkaXNhYmxlIGZvciBmYWlsdXJlXG4iKTsKQEAgLTc5MTAsNyArNzk1OSw3IEBACiAJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUOwogCWNhc2UgcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlOgogCQkvKiBQZXJtYW5lbnQgZmFpbHVyZSwgcHJlcGFyZSBmb3IgZGV2aWNlIGRvd24gKi8KLQkJbHBmY19wcmVwX2Rldl9mb3JfcGVybV9mYWlsdXJlKHBoYmEpOworCQlscGZjX3NsaV9wcmVwX2Rldl9mb3JfcGVybV9mYWlsdXJlKHBoYmEpOwogCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKIAlkZWZhdWx0OgogCQkvKiBVbmtub3duIHN0YXRlLCBwcmVwYXJlIGFuZCByZXF1ZXN0IHNsb3QgcmVzZXQgKi8KQEAgLTc5NzksNyArODAyOCw4IEBACiAJfSBlbHNlCiAJCXBoYmEtPmludHJfbW9kZSA9IGludHJfbW9kZTsKIAotCS8qIFRha2UgZGV2aWNlIG9mZmxpbmU7IHRoaXMgd2lsbCBwZXJmb3JtIGNsZWFudXAgKi8KKwkvKiBUYWtlIGRldmljZSBvZmZsaW5lLCBpdCB3aWxsIHBlcmZvcm0gY2xlYW51cCAqLworCWxwZmNfb2ZmbGluZV9wcmVwKHBoYmEpOwogCWxwZmNfb2ZmbGluZShwaGJhKTsKIAlscGZjX3NsaV9icmRyZXN0YXJ0KHBoYmEpOwogCkBAIC04MTEwLDggKzgxNjAsMTIgQEAKIAl9CiAKIAkvKiBJbml0aWFsaXplIGFuZCBwb3B1bGF0ZSB0aGUgaW9jYiBsaXN0IHBlciBob3N0ICovCi0JZXJyb3IgPSBscGZjX2luaXRfaW9jYl9saXN0KHBoYmEsCi0JCQlwaGJhLT5zbGk0X2hiYS5tYXhfY2ZnX3BhcmFtLm1heF94cmkpOworCisJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0lOSVQsCisJCQkiMjgyMSBpbml0aWFsaXplIGlvY2IgbGlzdCAlZC5cbiIsCisJCQlwaGJhLT5jZmdfaW9jYl9jbnQqMTAyNCk7CisJZXJyb3IgPSBscGZjX2luaXRfaW9jYl9saXN0KHBoYmEsIHBoYmEtPmNmZ19pb2NiX2NudCoxMDI0KTsKKwogCWlmIChlcnJvcikgewogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAogCQkJCSIxNDEzIEZhaWxlZCB0byBpbml0aWFsaXplIGlvY2IgbGlzdC5cbiIpOwpAQCAtODE2MCw2ICs4MjE0LDggQEAKIAkJLyogRGVmYXVsdCB0byBzaW5nbGUgRkNQIEVRIGZvciBub24tTVNJLVggKi8KIAkJaWYgKHBoYmEtPmludHJfdHlwZSAhPSBNU0lYKQogCQkJcGhiYS0+Y2ZnX2ZjcF9lcV9jb3VudCA9IDE7CisJCWVsc2UgaWYgKHBoYmEtPnNsaTRfaGJhLm1zaXhfdmVjX25yIDwgcGhiYS0+Y2ZnX2ZjcF9lcV9jb3VudCkKKwkJCXBoYmEtPmNmZ19mY3BfZXFfY291bnQgPSBwaGJhLT5zbGk0X2hiYS5tc2l4X3ZlY19uciAtIDE7CiAJCS8qIFNldCB1cCBTTEktNCBIQkEgKi8KIAkJaWYgKGxwZmNfc2xpNF9oYmFfc2V0dXAocGhiYSkpIHsKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCkBAIC04MzIxLDcgKzgzNzcsNyBAQAogCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9ICgoc3RydWN0IGxwZmNfdnBvcnQgKilzaG9zdC0+aG9zdGRhdGEpLT5waGJhOwogCiAJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0lOSVQsCi0JCQkiMDI5OCBQQ0kgZGV2aWNlIFBvd2VyIE1hbmFnZW1lbnQgc3VzcGVuZC5cbiIpOworCQkJIjI4NDMgUENJIGRldmljZSBQb3dlciBNYW5hZ2VtZW50IHN1c3BlbmQuXG4iKTsKIAogCS8qIEJyaW5nIGRvd24gdGhlIGRldmljZSAqLwogCWxwZmNfb2ZmbGluZV9wcmVwKHBoYmEpOwpAQCAtODQxMiw2ICs4NDY4LDg0IEBACiB9CiAKIC8qKgorICogbHBmY19zbGk0X3ByZXBfZGV2X2Zvcl9yZWNvdmVyIC0gUHJlcGFyZSBTTEk0IGRldmljZSBmb3IgcGNpIHNsb3QgcmVjb3ZlcgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBwcmVwYXJlIHRoZSBTTEk0IGRldmljZSBmb3IgUENJIHNsb3QgcmVjb3Zlci4gSXQKKyAqIGFib3J0cyBhbGwgdGhlIG91dHN0YW5kaW5nIFNDU0kgSS9PcyB0byB0aGUgcGNpIGRldmljZS4KKyAqKi8KK3N0YXRpYyB2b2lkCitscGZjX3NsaTRfcHJlcF9kZXZfZm9yX3JlY292ZXIoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCXN0cnVjdCBscGZjX3NsaSAqcHNsaSA9ICZwaGJhLT5zbGk7CisJc3RydWN0IGxwZmNfc2xpX3JpbmcgICpwcmluZzsKKworCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCisJCQkiMjgyOCBQQ0kgY2hhbm5lbCBJL08gYWJvcnQgcHJlcGFyaW5nIGZvciByZWNvdmVyeVxuIik7CisJLyoKKwkgKiBUaGVyZSBtYXkgYmUgZXJyb3JlZCBJL09zIHRocm91Z2ggSEJBLCBhYm9ydCBhbGwgSS9PcyBvbiB0eGNtcGxxCisJICogYW5kIGxldCB0aGUgU0NTSSBtaWQtbGF5ZXIgdG8gcmV0cnkgdGhlbSB0byByZWNvdmVyLgorCSAqLworCXByaW5nID0gJnBzbGktPnJpbmdbcHNsaS0+ZmNwX3JpbmddOworCWxwZmNfc2xpX2Fib3J0X2lvY2JfcmluZyhwaGJhLCBwcmluZyk7Cit9CisKKy8qKgorICogbHBmY19zbGk0X3ByZXBfZGV2X2Zvcl9yZXNldCAtIFByZXBhcmUgU0xJNCBkZXZpY2UgZm9yIHBjaSBzbG90IHJlc2V0CisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIHByZXBhcmUgdGhlIFNMSTQgZGV2aWNlIGZvciBQQ0kgc2xvdCByZXNldC4gSXQKKyAqIGRpc2FibGVzIHRoZSBkZXZpY2UgaW50ZXJydXB0IGFuZCBwY2kgZGV2aWNlLCBhbmQgYWJvcnRzIHRoZSBpbnRlcm5hbCBGQ1AKKyAqIHBlbmRpbmcgSS9Pcy4KKyAqKi8KK3N0YXRpYyB2b2lkCitscGZjX3NsaTRfcHJlcF9kZXZfZm9yX3Jlc2V0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK3sKKwlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAorCQkJIjI4MjYgUENJIGNoYW5uZWwgZGlzYWJsZSBwcmVwYXJpbmcgZm9yIHJlc2V0XG4iKTsKKworCS8qIEJsb2NrIGFueSBtYW5hZ2VtZW50IEkvT3MgdG8gdGhlIGRldmljZSAqLworCWxwZmNfYmxvY2tfbWdtdF9pbyhwaGJhKTsKKworCS8qIEJsb2NrIGFsbCBTQ1NJIGRldmljZXMnIEkvT3Mgb24gdGhlIGhvc3QgKi8KKwlscGZjX3Njc2lfZGV2X2Jsb2NrKHBoYmEpOworCisJLyogc3RvcCBhbGwgdGltZXJzICovCisJbHBmY19zdG9wX2hiYV90aW1lcnMocGhiYSk7CisKKwkvKiBEaXNhYmxlIGludGVycnVwdCBhbmQgcGNpIGRldmljZSAqLworCWxwZmNfc2xpNF9kaXNhYmxlX2ludHIocGhiYSk7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBoYmEtPnBjaWRldik7CisKKwkvKiBGbHVzaCBhbGwgZHJpdmVyJ3Mgb3V0c3RhbmRpbmcgU0NTSSBJL09zIGFzIHdlIGFyZSB0byByZXNldCAqLworCWxwZmNfc2xpX2ZsdXNoX2ZjcF9yaW5ncyhwaGJhKTsKK30KKworLyoqCisgKiBscGZjX3NsaTRfcHJlcF9kZXZfZm9yX3Blcm1fZmFpbHVyZSAtIFByZXBhcmUgU0xJNCBkZXYgZm9yIHBjaSBzbG90IGRpc2FibGUKKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gcHJlcGFyZSB0aGUgU0xJNCBkZXZpY2UgZm9yIFBDSSBzbG90IHBlcm1hbmVudGx5CisgKiBkaXNhYmxpbmcuIEl0IGJsb2NrcyB0aGUgU0NTSSB0cmFuc3BvcnQgbGF5ZXIgdHJhZmZpYyBhbmQgZmx1c2hlcyB0aGUgRkNQCisgKiBwZW5kaW5nIEkvT3MuCisgKiovCitzdGF0aWMgdm9pZAorbHBmY19zbGk0X3ByZXBfZGV2X2Zvcl9wZXJtX2ZhaWx1cmUoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCisJCQkiMjgyNyBQQ0kgY2hhbm5lbCBwZXJtYW5lbnQgZGlzYWJsZSBmb3IgZmFpbHVyZVxuIik7CisKKwkvKiBCbG9jayBhbGwgU0NTSSBkZXZpY2VzJyBJL09zIG9uIHRoZSBob3N0ICovCisJbHBmY19zY3NpX2Rldl9ibG9jayhwaGJhKTsKKworCS8qIHN0b3AgYWxsIHRpbWVycyAqLworCWxwZmNfc3RvcF9oYmFfdGltZXJzKHBoYmEpOworCisJLyogQ2xlYW4gdXAgYWxsIGRyaXZlcidzIG91dHN0YW5kaW5nIFNDU0kgSS9PcyAqLworCWxwZmNfc2xpX2ZsdXNoX2ZjcF9yaW5ncyhwaGJhKTsKK30KKworLyoqCiAgKiBscGZjX2lvX2Vycm9yX2RldGVjdGVkX3M0IC0gTWV0aG9kIGZvciBoYW5kbGluZyBQQ0kgSS9PIGVycm9yIHRvIFNMSS00IGRldmljZQogICogQHBkZXY6IHBvaW50ZXIgdG8gUENJIGRldmljZS4KICAqIEBzdGF0ZTogdGhlIGN1cnJlbnQgUENJIGNvbm5lY3Rpb24gc3RhdGUuCkBAIC04NDMwLDcgKzg1NjQsMjkgQEAKIHN0YXRpYyBwY2lfZXJzX3Jlc3VsdF90CiBscGZjX2lvX2Vycm9yX2RldGVjdGVkX3M0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKQogewotCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9ICgoc3RydWN0IGxwZmNfdnBvcnQgKilzaG9zdC0+aG9zdGRhdGEpLT5waGJhOworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgcGNpX2NoYW5uZWxfaW9fbm9ybWFsOgorCQkvKiBOb24tZmF0YWwgZXJyb3IsIHByZXBhcmUgZm9yIHJlY292ZXJ5ICovCisJCWxwZmNfc2xpNF9wcmVwX2Rldl9mb3JfcmVjb3ZlcihwaGJhKTsKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0NBTl9SRUNPVkVSOworCWNhc2UgcGNpX2NoYW5uZWxfaW9fZnJvemVuOgorCQkvKiBGYXRhbCBlcnJvciwgcHJlcGFyZSBmb3Igc2xvdCByZXNldCAqLworCQlscGZjX3NsaTRfcHJlcF9kZXZfZm9yX3Jlc2V0KHBoYmEpOworCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKKwljYXNlIHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZToKKwkJLyogUGVybWFuZW50IGZhaWx1cmUsIHByZXBhcmUgZm9yIGRldmljZSBkb3duICovCisJCWxwZmNfc2xpNF9wcmVwX2Rldl9mb3JfcGVybV9mYWlsdXJlKHBoYmEpOworCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwlkZWZhdWx0OgorCQkvKiBVbmtub3duIHN0YXRlLCBwcmVwYXJlIGFuZCByZXF1ZXN0IHNsb3QgcmVzZXQgKi8KKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCQkiMjgyNSBVbmtub3duIFBDSSBlcnJvciBzdGF0ZTogeCV4XG4iLCBzdGF0ZSk7CisJCWxwZmNfc2xpNF9wcmVwX2Rldl9mb3JfcmVzZXQocGhiYSk7CisJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUOworCX0KIH0KIAogLyoqCkBAIC04NDU0LDYgKzg2MTAsMzkgQEAKIHN0YXRpYyBwY2lfZXJzX3Jlc3VsdF90CiBscGZjX2lvX3Nsb3RfcmVzZXRfczQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKChzdHJ1Y3QgbHBmY192cG9ydCAqKXNob3N0LT5ob3N0ZGF0YSktPnBoYmE7CisJc3RydWN0IGxwZmNfc2xpICpwc2xpID0gJnBoYmEtPnNsaTsKKwl1aW50MzJfdCBpbnRyX21vZGU7CisKKwlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnBkZXYtPmRldiwgInJlY292ZXJpbmcgZnJvbSBhIHNsb3QgcmVzZXQuXG4iKTsKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKSB7CisJCXByaW50ayhLRVJOX0VSUiAibHBmYzogQ2Fubm90IHJlLWVuYWJsZSAiCisJCQkiUENJIGRldmljZSBhZnRlciByZXNldC5cbiIpOworCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwl9CisKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKwlpZiAocGRldi0+aXNfYnVzbWFzdGVyKQorCQlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCXBzbGktPnNsaV9mbGFnICY9IH5MUEZDX1NMSV9BQ1RJVkU7CisJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKworCS8qIENvbmZpZ3VyZSBhbmQgZW5hYmxlIGludGVycnVwdCAqLworCWludHJfbW9kZSA9IGxwZmNfc2xpNF9lbmFibGVfaW50cihwaGJhLCBwaGJhLT5pbnRyX21vZGUpOworCWlmIChpbnRyX21vZGUgPT0gTFBGQ19JTlRSX0VSUk9SKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCisJCQkJIjI4MjQgQ2Fubm90IHJlLWVuYWJsZSBpbnRlcnJ1cHQgYWZ0ZXIgIgorCQkJCSJzbG90IHJlc2V0LlxuIik7CisJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOworCX0gZWxzZQorCQlwaGJhLT5pbnRyX21vZGUgPSBpbnRyX21vZGU7CisKKwkvKiBMb2cgdGhlIGN1cnJlbnQgYWN0aXZlIGludGVycnVwdCBtb2RlICovCisJbHBmY19sb2dfaW50cl9tb2RlKHBoYmEsIHBoYmEtPmludHJfbW9kZSk7CisKIAlyZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEOwogfQogCkBAIC04NDcwLDcgKzg2NTksMjcgQEAKIHN0YXRpYyB2b2lkCiBscGZjX2lvX3Jlc3VtZV9zNChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlyZXR1cm47CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKChzdHJ1Y3QgbHBmY192cG9ydCAqKXNob3N0LT5ob3N0ZGF0YSktPnBoYmE7CisKKwkvKgorCSAqIEluIGNhc2Ugb2Ygc2xvdCByZXNldCwgYXMgZnVuY3Rpb24gcmVzZXQgaXMgcGVyZm9ybWVkIHRocm91Z2gKKwkgKiBtYWlsYm94IGNvbW1hbmQgd2hpY2ggbmVlZHMgRE1BIHRvIGJlIGVuYWJsZWQsIHRoaXMgb3BlcmF0aW9uCisJICogaGFzIHRvIGJlIG1vdmVkIHRvIHRoZSBpbyByZXN1bWUgcGhhc2UuIFRha2luZyBkZXZpY2Ugb2ZmbGluZQorCSAqIHdpbGwgcGVyZm9ybSB0aGUgbmVjZXNzYXJ5IGNsZWFudXAuCisJICovCisJaWYgKCEocGhiYS0+c2xpLnNsaV9mbGFnICYgTFBGQ19TTElfQUNUSVZFKSkgeworCQkvKiBQZXJmb3JtIGRldmljZSByZXNldCAqLworCQlscGZjX29mZmxpbmVfcHJlcChwaGJhKTsKKwkJbHBmY19vZmZsaW5lKHBoYmEpOworCQlscGZjX3NsaV9icmRyZXN0YXJ0KHBoYmEpOworCQkvKiBCcmluZyB0aGUgZGV2aWNlIGJhY2sgb25saW5lICovCisJCWxwZmNfb25saW5lKHBoYmEpOworCX0KKworCS8qIENsZWFuIHVwIEFkdmFuY2VkIEVycm9yIFJlcG9ydGluZyAoQUVSKSBpZiBuZWVkZWQgKi8KKwlpZiAocGhiYS0+aGJhX2ZsYWcgJiBIQkFfQUVSX0VOQUJMRUQpCisJCXBjaV9jbGVhbnVwX2Flcl91bmNvcnJlY3RfZXJyb3Jfc3RhdHVzKHBkZXYpOwogfQogCiAvKioKQEAgLTg4MDIsNiArOTAxMSw4IEBACiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJe1BDSV9WRU5ET1JfSURfRU1VTEVYLCBQQ0lfREVWSUNFX0lEX0ZBTENPTiwKIAkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKKwl7UENJX1ZFTkRPUl9JRF9FTVVMRVgsIFBDSV9ERVZJQ0VfSURfQkFMSVVTLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXsgMCB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWJveC5jCmluZGV4IGU4NGRjMzMuLjljMmM3YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWJveC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWJveC5jCkBAIC05NTUsNiArOTU1LDI2IEBACiAJcmV0dXJuOwogfQogCit2b2lkCitscGZjX3NsaTRfc3dhcF9zdHIoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBMUEZDX01CT1hRX3QgKnBtYikKK3sKKwlNQUlMQk9YX3QgKm1iID0gJnBtYi0+dS5tYjsKKwlzdHJ1Y3QgbHBmY19tcWUgKm1xZTsKKworCXN3aXRjaCAobWItPm1ieENvbW1hbmQpIHsKKwljYXNlICBNQlhfUkVBRF9SRVY6CisJCSBtcWUgPSAmcG1iLT51Lm1xZTsKKwkJbHBmY19zbGlfcGNpbWVtX2Jjb3B5KG1xZS0+dW4ucmVhZF9yZXYuZndfbmFtZSwKKwkJCQkgbXFlLT51bi5yZWFkX3Jldi5md19uYW1lLCAxNik7CisJCWxwZmNfc2xpX3BjaW1lbV9iY29weShtcWUtPnVuLnJlYWRfcmV2LnVscF9md19uYW1lLAorCQkJCSBtcWUtPnVuLnJlYWRfcmV2LnVscF9md19uYW1lLCAxNik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm47Cit9CisKIC8qKgogICogbHBmY19idWlsZF9oYnFfcHJvZmlsZTIgLSBTZXQgdXAgdGhlIEhCUSBTZWxlY3Rpb24gUHJvZmlsZSAyCiAgKiBAaGJxbWI6IHBvaW50ZXIgdG8gdGhlIEhCUSBjb25maWd1cmF0aW9uIGRhdGEgc3RydWN0dXJlIGluIG1haWxib3ggY29tbWFuZC4KQEAgLTExOTksNyArMTIxOSw2IEBACiAJCW1iLT51bi52YXJDZmdQb3J0LmNkc3MgPSAxOyAvKiBDb25maWd1cmUgU2VjdXJpdHkgKi8KIAkJbWItPnVuLnZhckNmZ1BvcnQuY2VyYm0gPSAxOyAvKiBSZXF1ZXN0IEhCUXMgKi8KIAkJbWItPnVuLnZhckNmZ1BvcnQuY2NycCA9IDE7IC8qIENvbW1hbmQgUmluZyBQb2xsaW5nICovCi0JCW1iLT51bi52YXJDZmdQb3J0LmNpbmIgPSAxOyAvKiBJbnRlcnJ1cHQgTm90aWZpY2F0aW9uIEJsb2NrICovCiAJCW1iLT51bi52YXJDZmdQb3J0Lm1heF9oYnEgPSBscGZjX3NsaV9oYnFfY291bnQoKTsKIAkJaWYgKHBoYmEtPm1heF92cGkgJiYgcGhiYS0+Y2ZnX2VuYWJsZV9ucGl2ICYmCiAJCSAgICBwaGJhLT52cGQuc2xpM0ZlYXQuY212KSB7CkBAIC0yMDI2LDcgKzIwNDUsNyBAQAogCSAgICAgICBwaGJhLT5mY2YuY3VycmVudF9yZWMuZmNmX2luZHgpOwogCS8qIHJlZ19mY2YgYWRkciBtb2RlIGlzIGJpdCB3aXNlIGludmVydGVkIHZhbHVlIG9mIGZjZiBhZGRyX21vZGUgKi8KIAliZl9zZXQobHBmY19yZWdfZmNmaV9tYW0sIHJlZ19mY2ZpLCAofnBoYmEtPmZjZi5hZGRyX21vZGUpICYgMHgzKTsKLQlpZiAocGhiYS0+ZmNmLmN1cnJlbnRfcmVjLnZsYW5faWQgIT0gMHhGRkZGKSB7CisJaWYgKHBoYmEtPmZjZi5jdXJyZW50X3JlYy52bGFuX2lkICE9IExQRkNfRkNPRV9OVUxMX1ZJRCkgewogCQliZl9zZXQobHBmY19yZWdfZmNmaV92diwgcmVnX2ZjZmksIDEpOwogCQliZl9zZXQobHBmY19yZWdfZmNmaV92bGFuX3RhZywgcmVnX2ZjZmksCiAJCSAgICAgICBwaGJhLT5mY2YuY3VycmVudF9yZWMudmxhbl9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ucG9ydGRpc2MuYwppbmRleCBiOTA4MjBhLi5iY2NjOWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbnBvcnRkaXNjLmMKQEAgLTE5MCw2ICsxOTAsNyBAQAogfQogCiAKKwogLyoKICAqIEZyZWUgcmVzb3VyY2VzIC8gY2xlYW4gdXAgb3V0c3RhbmRpbmcgSS9PcwogICogYXNzb2NpYXRlZCB3aXRoIGEgTFBGQ19OT0RFTElTVCBlbnRyeS4gVGhpcwpAQCAtMTk5LDEzICsyMDAsMTUgQEAKIGxwZmNfZWxzX2Fib3J0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHApCiB7CiAJTElTVF9IRUFEKGNvbXBsZXRpb25zKTsKKwlMSVNUX0hFQUQodHhjbXBscV9jb21wbGV0aW9ucyk7CisJTElTVF9IRUFEKGFib3J0X2xpc3QpOwogCXN0cnVjdCBscGZjX3NsaSAgKnBzbGkgPSAmcGhiYS0+c2xpOwogCXN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZyA9ICZwc2xpLT5yaW5nW0xQRkNfRUxTX1JJTkddOwogCXN0cnVjdCBscGZjX2lvY2JxICppb2NiLCAqbmV4dF9pb2NiOwogCiAJLyogQWJvcnQgb3V0c3RhbmRpbmcgSS9PIG9uIE5Qb3J0IDxubHBfRElEPiAqLwogCWxwZmNfcHJpbnRmX3Zsb2cobmRscC0+dnBvcnQsIEtFUk5fSU5GTywgTE9HX0RJU0NPVkVSWSwKLQkJCSAiMDIwNSBBYm9ydCBvdXRzdGFuZGluZyBJL08gb24gTlBvcnQgeCV4ICIKKwkJCSAiMjgxOSBBYm9ydCBvdXRzdGFuZGluZyBJL08gb24gTlBvcnQgeCV4ICIKIAkJCSAiRGF0YTogeCV4IHgleCB4JXhcbiIsCiAJCQkgbmRscC0+bmxwX0RJRCwgbmRscC0+bmxwX2ZsYWcsIG5kbHAtPm5scF9zdGF0ZSwKIAkJCSBuZGxwLT5ubHBfcnBpKTsKQEAgLTIyNCwxNCArMjI3LDI1IEBACiAJfQogCiAJLyogTmV4dCBjaGVjayB0aGUgdHhjbXBscSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpb2NiLCBuZXh0X2lvY2IsICZwcmluZy0+dHhjbXBscSwgbGlzdCkgewotCQkvKiBDaGVjayB0byBzZWUgaWYgaW9jYiBtYXRjaGVzIHRoZSBucG9ydCB3ZSBhcmUgbG9va2luZyBmb3IgKi8KLQkJaWYgKGxwZmNfY2hlY2tfc2xpX25kbHAocGhiYSwgcHJpbmcsIGlvY2IsIG5kbHApKSB7Ci0JCQlscGZjX3NsaV9pc3N1ZV9hYm9ydF9pb3RhZyhwaGJhLCBwcmluZywgaW9jYik7Ci0JCX0KLQl9CisJbGlzdF9zcGxpY2VfaW5pdCgmcHJpbmctPnR4Y21wbHEsICZ0eGNtcGxxX2NvbXBsZXRpb25zKTsKIAlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlvY2IsIG5leHRfaW9jYiwgJnR4Y21wbHFfY29tcGxldGlvbnMsIGxpc3QpIHsKKwkJLyogQ2hlY2sgdG8gc2VlIGlmIGlvY2IgbWF0Y2hlcyB0aGUgbnBvcnQgd2UgYXJlIGxvb2tpbmcgZm9yICovCisJCWlmIChscGZjX2NoZWNrX3NsaV9uZGxwKHBoYmEsIHByaW5nLCBpb2NiLCBuZGxwKSkKKwkJCWxpc3RfYWRkX3RhaWwoJmlvY2ItPmRsaXN0LCAmYWJvcnRfbGlzdCk7CisJfQorCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCWxpc3Rfc3BsaWNlKCZ0eGNtcGxxX2NvbXBsZXRpb25zLCAmcHJpbmctPnR4Y21wbHEpOworCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaW9jYiwgbmV4dF9pb2NiLCAmYWJvcnRfbGlzdCwgZGxpc3QpIHsKKwkJCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCQkJbGlzdF9kZWxfaW5pdCgmaW9jYi0+ZGxpc3QpOworCQkJbHBmY19zbGlfaXNzdWVfYWJvcnRfaW90YWcocGhiYSwgcHJpbmcsIGlvY2IpOworCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwl9CisKIAkvKiBDYW5jZWwgYWxsIHRoZSBJT0NCcyBmcm9tIHRoZSBjb21wbGV0aW9ucyBsaXN0ICovCiAJbHBmY19zbGlfY2FuY2VsX2lvY2JzKHBoYmEsICZjb21wbGV0aW9ucywgSU9TVEFUX0xPQ0FMX1JFSkVDVCwKIAkJCSAgICAgIElPRVJSX1NMSV9BQk9SVEVEKTsKQEAgLTYyNiw3ICs2NDAsOCBAQAogCWlmICghKHZwb3J0LT5mY19mbGFnICYgRkNfUFQyUFQpKSB7CiAJCS8qIENoZWNrIGNvbmZpZyBwYXJhbWV0ZXIgdXNlLWFkaXNjIG9yIEZDUC0yICovCiAJCWlmICgodnBvcnQtPmNmZ191c2VfYWRpc2MgJiYgKHZwb3J0LT5mY19mbGFnICYgRkNfUlNDTl9NT0RFKSkgfHwKLQkJICAgIG5kbHAtPm5scF9mY3BfaW5mbyAmIE5MUF9GQ1BfMl9ERVZJQ0UpIHsKKwkJICAgICgobmRscC0+bmxwX2ZjcF9pbmZvICYgTkxQX0ZDUF8yX0RFVklDRSkgJiYKKwkJICAgICAobmRscC0+bmxwX3R5cGUgJiBOTFBfRkNQX1RBUkdFVCkpKSB7CiAJCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCQkJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX05QUl9BRElTQzsKIAkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKQEAgLTk2Miw2ICs5NzcsNyBAQAogCQkJbWJveC0+bWJveF9jbXBsID0gbHBmY19tYnhfY21wbF9mZG1pX3JlZ19sb2dpbjsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgorCQkJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX1JFR19MT0dJTl9TRU5EOwogCQkJbWJveC0+bWJveF9jbXBsID0gbHBmY19tYnhfY21wbF9yZWdfbG9naW47CiAJCX0KIAkJbWJveC0+Y29udGV4dDIgPSBscGZjX25scF9nZXQobmRscCk7CkBAIC05NzIsNiArOTg4LDggQEAKIAkJCQkJICAgTkxQX1NURV9SRUdfTE9HSU5fSVNTVUUpOwogCQkJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIAkJfQorCQlpZiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfUkVHX0xPR0lOX1NFTkQpCisJCQluZGxwLT5ubHBfZmxhZyAmPSB+TkxQX1JFR19MT0dJTl9TRU5EOwogCQkvKiBkZWNyZW1lbnQgbm9kZSByZWZlcmVuY2UgY291bnQgdG8gdGhlIGZhaWxlZCBtYm94CiAJCSAqIGNvbW1hbmQKIAkJICovCkBAIC0xNDU4LDYgKzE0NzYsNyBAQAogCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gTkxQX1NURV9SRUdfTE9HSU5fSVNTVUU7CiAJbHBmY19ubHBfc2V0X3N0YXRlKHZwb3J0LCBuZGxwLCBOTFBfU1RFX05QUl9OT0RFKTsKIAlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCW5kbHAtPm5scF9mbGFnIHw9IE5MUF9JR05SX1JFR19DTVBMOwogCW5kbHAtPm5scF9mbGFnICY9IH4oTkxQX05PREVWX1JFTU9WRSB8IE5MUF9OUFJfMkJfRElTQyk7CiAJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCWxwZmNfZGlzY19zZXRfYWRpc2ModnBvcnQsIG5kbHApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYwppbmRleCBmNGEzYjJlLi5jODE4YTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYwpAQCAtNjIzLDYgKzYyMyw3IEBACiAJdW5zaWduZWQgbG9uZyBpZmxhZyA9IDA7CiAJc3RydWN0IGxwZmNfaW9jYnEgKmlvY2JxOwogCWludCBpOworCXN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZyA9ICZwaGJhLT5zbGkucmluZ1tMUEZDX0VMU19SSU5HXTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZyk7CiAJc3Bpbl9sb2NrKCZwaGJhLT5zbGk0X2hiYS5hYnRzX3Njc2lfYnVmX2xpc3RfbG9jayk7CkBAIC02NTEsNiArNjUyLDggQEAKIAkJcHNiID0gY29udGFpbmVyX29mKGlvY2JxLCBzdHJ1Y3QgbHBmY19zY3NpX2J1ZiwgY3VyX2lvY2JxKTsKIAkJcHNiLT5leGNoX2J1c3kgPSAwOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZyk7CisJCWlmIChwcmluZy0+dHhxX2NudCkKKwkJCWxwZmNfd29ya2VyX3dha2VfdXAocGhiYSk7CiAJCXJldHVybjsKIAogCX0KQEAgLTc0Nyw3ICs3NTAsNiBAQAogCWludCBzdGF0dXMgPSAwLCBpbmRleDsKIAlpbnQgYmNudDsKIAlpbnQgbm9uX3NlcXVlbnRpYWxfeHJpID0gMDsKLQlpbnQgcmMgPSAwOwogCUxJU1RfSEVBRChzYmxpc3QpOwogCiAJZm9yIChiY250ID0gMDsgYmNudCA8IG51bV90b19hbGxvYzsgYmNudCsrKSB7CkBAIC03NzQsNiArNzc2LDggQEAKIAkJLyogQWxsb2NhdGUgaW90YWcgZm9yIHBzYi0+Y3VyX2lvY2JxLiAqLwogCQlpb3RhZyA9IGxwZmNfc2xpX25leHRfaW90YWcocGhiYSwgJnBzYi0+Y3VyX2lvY2JxKTsKIAkJaWYgKGlvdGFnID09IDApIHsKKwkJCXBjaV9wb29sX2ZyZWUocGhiYS0+bHBmY19zY3NpX2RtYV9idWZfcG9vbCwKKwkJCQlwc2ItPmRhdGEsIHBzYi0+ZG1hX2hhbmRsZSk7CiAJCQlrZnJlZShwc2IpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTg1OCw3ICs4NjIsNiBAQAogCQkJaWYgKHN0YXR1cykgewogCQkJCS8qIFB1dCB0aGlzIGJhY2sgb24gdGhlIGFib3J0IHNjc2kgbGlzdCAqLwogCQkJCXBzYi0+ZXhjaF9idXN5ID0gMTsKLQkJCQlyYysrOwogCQkJfSBlbHNlIHsKIAkJCQlwc2ItPmV4Y2hfYnVzeSA9IDA7CiAJCQkJcHNiLT5zdGF0dXMgPSBJT1NUQVRfU1VDQ0VTUzsKQEAgLTg3Nyw3ICs4ODAsNiBAQAogCQkJaWYgKHN0YXR1cykgewogCQkJCS8qIFB1dCB0aGlzIGJhY2sgb24gdGhlIGFib3J0IHNjc2kgbGlzdCAqLwogCQkJCXBzYi0+ZXhjaF9idXN5ID0gMTsKLQkJCQlyYysrOwogCQkJfSBlbHNlIHsKIAkJCQlwc2ItPmV4Y2hfYnVzeSA9IDA7CiAJCQkJcHNiLT5zdGF0dXMgPSBJT1NUQVRfU1VDQ0VTUzsKQEAgLTg4Nyw3ICs4ODksNyBAQAogCQl9CiAJfQogCi0JcmV0dXJuIGJjbnQgKyBub25fc2VxdWVudGlhbF94cmkgLSByYzsKKwlyZXR1cm4gYmNudCArIG5vbl9zZXF1ZW50aWFsX3hyaTsKIH0KIAogLyoqCkBAIC0xMzIzLDYgKzEzMjUsMTAgQEAKIAliZl9zZXQocGRlNV90eXBlLCBwZGU1LCBMUEZDX1BERTVfREVTQ1JJUFRPUik7CiAJcGRlNS0+cmVmdGFnID0gcmVmdGFnOwogCisJLyogRW5kaWFuIGNvbnZlcnRpb24gaWYgbmVjZXNzYXJ5IGZvciBQREU1ICovCisJcGRlNS0+d29yZDAgPSBjcHVfdG9fbGUzMihwZGU1LT53b3JkMCk7CisJcGRlNS0+cmVmdGFnID0gY3B1X3RvX2xlMzIocGRlNS0+cmVmdGFnKTsKKwogCS8qIGFkdmFuY2UgYnBsIGFuZCBpbmNyZW1lbnQgYmRlIGNvdW50ICovCiAJbnVtX2JkZSsrOwogCWJwbCsrOwpAQCAtMTM0MSw2ICsxMzQ3LDExIEBACiAJYmZfc2V0KHBkZTZfYWksIHBkZTYsIDEpOwogCWJmX3NldChwZGU2X2FwcHRhZ3ZhbCwgcGRlNiwgYXBwdGFndmFsKTsKIAorCS8qIEVuZGlhbiBjb252ZXJ0aW9uIGlmIG5lY2Vzc2FyeSBmb3IgUERFNiAqLworCXBkZTYtPndvcmQwID0gY3B1X3RvX2xlMzIocGRlNi0+d29yZDApOworCXBkZTYtPndvcmQxID0gY3B1X3RvX2xlMzIocGRlNi0+d29yZDEpOworCXBkZTYtPndvcmQyID0gY3B1X3RvX2xlMzIocGRlNi0+d29yZDIpOworCiAJLyogYWR2YW5jZSBicGwgYW5kIGluY3JlbWVudCBiZGUgY291bnQgKi8KIAludW1fYmRlKys7CiAJYnBsKys7CkBAIC0xNDQ4LDYgKzE0NTksMTAgQEAKIAkJYmZfc2V0KHBkZTVfdHlwZSwgcGRlNSwgTFBGQ19QREU1X0RFU0NSSVBUT1IpOwogCQlwZGU1LT5yZWZ0YWcgPSByZWZ0YWc7CiAKKwkJLyogRW5kaWFuIGNvbnZlcnRpb24gaWYgbmVjZXNzYXJ5IGZvciBQREU1ICovCisJCXBkZTUtPndvcmQwID0gY3B1X3RvX2xlMzIocGRlNS0+d29yZDApOworCQlwZGU1LT5yZWZ0YWcgPSBjcHVfdG9fbGUzMihwZGU1LT5yZWZ0YWcpOworCiAJCS8qIGFkdmFuY2UgYnBsIGFuZCBpbmNyZW1lbnQgYmRlIGNvdW50ICovCiAJCW51bV9iZGUrKzsKIAkJYnBsKys7CkBAIC0xNDY0LDYgKzE0NzksMTEgQEAKIAkJYmZfc2V0KHBkZTZfYWksIHBkZTYsIDEpOwogCQliZl9zZXQocGRlNl9hcHB0YWd2YWwsIHBkZTYsIGFwcHRhZ3ZhbCk7CiAKKwkJLyogRW5kaWFuIGNvbnZlcnRpb24gaWYgbmVjZXNzYXJ5IGZvciBQREU2ICovCisJCXBkZTYtPndvcmQwID0gY3B1X3RvX2xlMzIocGRlNi0+d29yZDApOworCQlwZGU2LT53b3JkMSA9IGNwdV90b19sZTMyKHBkZTYtPndvcmQxKTsKKwkJcGRlNi0+d29yZDIgPSBjcHVfdG9fbGUzMihwZGU2LT53b3JkMik7CisKIAkJLyogYWR2YW5jZSBicGwgYW5kIGluY3JlbWVudCBiZGUgY291bnQgKi8KIAkJbnVtX2JkZSsrOwogCQlicGwrKzsKQEAgLTE0NzUsNyArMTQ5NSw2IEBACiAJCXByb3RfYmRlLT5hZGRyTG93ID0gbGUzMl90b19jcHUocHV0UGFkZHJIaWdoKHByb3RwaHlzYWRkcikpOwogCQlwcm90Z3JvdXBfbGVuID0gc2dfZG1hX2xlbihzZ3BlKTsKIAotCiAJCS8qIG11c3QgYmUgaW50ZWdlciBtdWx0aXBsZSBvZiB0aGUgRElGIGJsb2NrIGxlbmd0aCAqLwogCQlCVUdfT04ocHJvdGdyb3VwX2xlbiAlIDgpOwogCkBAIC0yMjkzLDE1ICsyMzEyLDIxIEBACiAJc3RydWN0IGxwZmNfdnBvcnQgICAgICAqdnBvcnQgPSBwSW9jYkluLT52cG9ydDsKIAlzdHJ1Y3QgbHBmY19ycG9ydF9kYXRhICpyZGF0YSA9IGxwZmNfY21kLT5yZGF0YTsKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqcG5vZGUgPSByZGF0YS0+cG5vZGU7Ci0Jc3RydWN0IHNjc2lfY21uZCAqY21kID0gbHBmY19jbWQtPnBDbWQ7CisJc3RydWN0IHNjc2lfY21uZCAqY21kOwogCWludCByZXN1bHQ7CiAJc3RydWN0IHNjc2lfZGV2aWNlICp0bXBfc2RldjsKIAlpbnQgZGVwdGg7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbHBmY19mYXN0X3BhdGhfZXZlbnQgKmZhc3RfcGF0aF9ldnQ7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbWQtPmRldmljZS0+aG9zdDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKIAl1aW50MzJfdCBxdWV1ZV9kZXB0aCwgc2NzaV9pZDsKIAorCS8qIFNhbml0eSBjaGVjayBvbiByZXR1cm4gb2Ygb3V0c3RhbmRpbmcgY29tbWFuZCAqLworCWlmICghKGxwZmNfY21kLT5wQ21kKSkKKwkJcmV0dXJuOworCWNtZCA9IGxwZmNfY21kLT5wQ21kOworCXNob3N0ID0gY21kLT5kZXZpY2UtPmhvc3Q7CisKIAlscGZjX2NtZC0+cmVzdWx0ID0gcElvY2JPdXQtPmlvY2IudW4udWxwV29yZFs0XTsKIAlscGZjX2NtZC0+c3RhdHVzID0gcElvY2JPdXQtPmlvY2IudWxwU3RhdHVzOwogCS8qIHBpY2sgdXAgU0xJNCBleGhhbmdlIGJ1c3kgc3RhdHVzIGZyb20gSEJBICovCkBAIC0yMzYzLDcgKzIzODgsOCBAQAogCQljYXNlIElPU1RBVF9MT0NBTF9SRUpFQ1Q6CiAJCQlpZiAobHBmY19jbWQtPnJlc3VsdCA9PSBJT0VSUl9JTlZBTElEX1JQSSB8fAogCQkJICAgIGxwZmNfY21kLT5yZXN1bHQgPT0gSU9FUlJfTk9fUkVTT1VSQ0VTIHx8Ci0JCQkgICAgbHBmY19jbWQtPnJlc3VsdCA9PSBJT0VSUl9BQk9SVF9SRVFVRVNURUQpIHsKKwkJCSAgICBscGZjX2NtZC0+cmVzdWx0ID09IElPRVJSX0FCT1JUX1JFUVVFU1RFRCB8fAorCQkJICAgIGxwZmNfY21kLT5yZXN1bHQgPT0gSU9FUlJfU0xFUl9DTURfUkNWX0ZBSUxVUkUpIHsKIAkJCQljbWQtPnJlc3VsdCA9IFNjc2lSZXN1bHQoRElEX1JFUVVFVUUsIDApOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMjQzMiwxNCArMjQ1OCwxNiBAQAogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCX0gZWxzZSBpZiAocG5vZGUgJiYgTkxQX0NIS19OT0RFX0FDVChwbm9kZSkpIHsKLQkJaWYgKChwbm9kZS0+Y21kX3FkZXB0aCA8IExQRkNfTUFYX1RHVF9RREVQVEgpICYmCisJCWlmICgocG5vZGUtPmNtZF9xZGVwdGggPCB2cG9ydC0+Y2ZnX3RndF9xdWV1ZV9kZXB0aCkgJiYKIAkJICAgdGltZV9hZnRlcihqaWZmaWVzLCBwbm9kZS0+bGFzdF9jaGFuZ2VfdGltZSArCiAJCQkgICAgICBtc2Vjc190b19qaWZmaWVzKExQRkNfVEdUUV9JTlRFUlZBTCkpKSB7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Ci0JCQlwbm9kZS0+Y21kX3FkZXB0aCArPSBwbm9kZS0+Y21kX3FkZXB0aCAqCi0JCQkJTFBGQ19UR1RRX1JBTVBVUF9QQ0VOVCAvIDEwMDsKLQkJCWlmIChwbm9kZS0+Y21kX3FkZXB0aCA+IExQRkNfTUFYX1RHVF9RREVQVEgpCi0JCQkJcG5vZGUtPmNtZF9xZGVwdGggPSBMUEZDX01BWF9UR1RfUURFUFRIOworCQkJZGVwdGggPSBwbm9kZS0+Y21kX3FkZXB0aCAqIExQRkNfVEdUUV9SQU1QVVBfUENFTlQKKwkJCQkvIDEwMDsKKwkJCWRlcHRoID0gZGVwdGggPyBkZXB0aCA6IDE7CisJCQlwbm9kZS0+Y21kX3FkZXB0aCArPSBkZXB0aDsKKwkJCWlmIChwbm9kZS0+Y21kX3FkZXB0aCA+IHZwb3J0LT5jZmdfdGd0X3F1ZXVlX2RlcHRoKQorCQkJCXBub2RlLT5jbWRfcWRlcHRoID0gdnBvcnQtPmNmZ190Z3RfcXVldWVfZGVwdGg7CiAJCQlwbm9kZS0+bGFzdF9jaGFuZ2VfdGltZSA9IGppZmZpZXM7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkJfQpAQCAtMjg5NCw4ICsyOTIyLDcgQEAKIAkJY21uZC0+cmVzdWx0ID0gU2NzaVJlc3VsdChESURfVFJBTlNQT1JUX0RJU1JVUFRFRCwgMCk7CiAJCWdvdG8gb3V0X2ZhaWxfY29tbWFuZDsKIAl9Ci0JaWYgKHZwb3J0LT5jZmdfbWF4X3Njc2ljbXBsX3RpbWUgJiYKLQkJKGF0b21pY19yZWFkKCZuZGxwLT5jbWRfcGVuZGluZykgPj0gbmRscC0+Y21kX3FkZXB0aCkpCisJaWYgKGF0b21pY19yZWFkKCZuZGxwLT5jbWRfcGVuZGluZykgPj0gbmRscC0+Y21kX3FkZXB0aCkKIAkJZ290byBvdXRfaG9zdF9idXN5OwogCiAJbHBmY19jbWQgPSBscGZjX2dldF9zY3NpX2J1ZihwaGJhKTsKQEAgLTMwNDEsNyArMzA2OCw5IEBACiAJaW50IHJldCA9IFNVQ0NFU1M7CiAJREVDTEFSRV9XQUlUX1FVRVVFX0hFQURfT05TVEFDSyh3YWl0cSk7CiAKLQlmY19ibG9ja19zY3NpX2VoKGNtbmQpOworCXJldCA9IGZjX2Jsb2NrX3Njc2lfZWgoY21uZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAlscGZjX2NtZCA9IChzdHJ1Y3QgbHBmY19zY3NpX2J1ZiAqKWNtbmQtPmhvc3Rfc2NyaWJibGU7CiAJQlVHX09OKCFscGZjX2NtZCk7CiAKQEAgLTMyMjUsNyArMzI1NCw5IEBACiAJCQkgbHBmY190YXNrbWdtdF9uYW1lKHRhc2tfbWdtdF9jbWQpLAogCQkJIHRndF9pZCwgbHVuX2lkLCBpb2NicXJzcC0+aW9jYi51bHBTdGF0dXMsCiAJCQkgaW9jYnFyc3AtPmlvY2IudW4udWxwV29yZFs0XSk7Ci0JfSBlbHNlCisJfSBlbHNlIGlmIChzdGF0dXMgPT0gSU9DQl9CVVNZKQorCQlyZXQgPSBGQUlMRUQ7CisJZWxzZQogCQlyZXQgPSBTVUNDRVNTOwogCiAJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBpb2NicXJzcCk7CkBAIC0zMzU3LDcgKzMzODgsOSBAQAogCQlyZXR1cm4gRkFJTEVEOwogCX0KIAlwbm9kZSA9IHJkYXRhLT5wbm9kZTsKLQlmY19ibG9ja19zY3NpX2VoKGNtbmQpOworCXN0YXR1cyA9IGZjX2Jsb2NrX3Njc2lfZWgoY21uZCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKIAogCXN0YXR1cyA9IGxwZmNfY2hrX3RndF9tYXBwZWQodnBvcnQsIGNtbmQpOwogCWlmIChzdGF0dXMgPT0gRkFJTEVEKSB7CkBAIC0zNDIyLDcgKzM0NTUsOSBAQAogCQlyZXR1cm4gRkFJTEVEOwogCX0KIAlwbm9kZSA9IHJkYXRhLT5wbm9kZTsKLQlmY19ibG9ja19zY3NpX2VoKGNtbmQpOworCXN0YXR1cyA9IGZjX2Jsb2NrX3Njc2lfZWgoY21uZCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKIAogCXN0YXR1cyA9IGxwZmNfY2hrX3RndF9tYXBwZWQodnBvcnQsIGNtbmQpOwogCWlmIChzdGF0dXMgPT0gRkFJTEVEKSB7CkBAIC0zNDg4LDcgKzM1MjMsOSBAQAogCWZjX2hvc3RfcG9zdF92ZW5kb3JfZXZlbnQoc2hvc3QsIGZjX2dldF9ldmVudF9udW1iZXIoKSwKIAkJc2l6ZW9mKHNjc2lfZXZlbnQpLCAoY2hhciAqKSZzY3NpX2V2ZW50LCBMUEZDX05MX1ZFTkRPUl9JRCk7CiAKLQlmY19ibG9ja19zY3NpX2VoKGNtbmQpOworCXJldCA9IGZjX2Jsb2NrX3Njc2lfZWgoY21uZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAogCS8qCiAJICogU2luY2UgdGhlIGRyaXZlciBtYW5hZ2VzIGEgc2luZ2xlIGJ1cyBkZXZpY2UsIHJlc2V0IGFsbApAQCAtMzU2MSwxMSArMzU5OCwxMyBAQAogCXVpbnQzMl90IHRvdGFsID0gMDsKIAl1aW50MzJfdCBudW1fdG9fYWxsb2MgPSAwOwogCWludCBudW1fYWxsb2NhdGVkID0gMDsKKwl1aW50MzJfdCBzZGV2X2NudDsKIAogCWlmICghcnBvcnQgfHwgZmNfcmVtb3RlX3BvcnRfY2hrcmVhZHkocnBvcnQpKQogCQlyZXR1cm4gLUVOWElPOwogCiAJc2Rldi0+aG9zdGRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKKwlzZGV2X2NudCA9IGF0b21pY19pbmNfcmV0dXJuKCZwaGJhLT5zZGV2X2NudCk7CiAKIAkvKgogCSAqIFBvcHVsYXRlIHRoZSBjbWRzX3Blcl9sdW4gY291bnQgc2NzaV9idWZzIGludG8gdGhpcyBob3N0J3MgZ2xvYmFsbHkKQEAgLTM1NzcsNiArMzYxNiwxMCBAQAogCXRvdGFsID0gcGhiYS0+dG90YWxfc2NzaV9idWZzOwogCW51bV90b19hbGxvYyA9IHZwb3J0LT5jZmdfbHVuX3F1ZXVlX2RlcHRoICsgMjsKIAorCS8qIElmIGFsbG9jYXRlZCBidWZmZXJzIGFyZSBlbm91Z2ggZG8gbm90aGluZyAqLworCWlmICgoc2Rldl9jbnQgKiAodnBvcnQtPmNmZ19sdW5fcXVldWVfZGVwdGggKyAyKSkgPCB0b3RhbCkKKwkJcmV0dXJuIDA7CisKIAkvKiBBbGxvdyBzb21lIGV4Y2hhbmdlcyB0byBiZSBhdmFpbGFibGUgYWx3YXlzIHRvIGNvbXBsZXRlIGRpc2NvdmVyeSAqLwogCWlmICh0b3RhbCA+PSBwaGJhLT5jZmdfaGJhX3F1ZXVlX2RlcHRoIC0gTFBGQ19ESVNDX0lPQ0JfQlVGRl9DT1VOVCApIHsKIAkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9XQVJOSU5HLCBMT0dfRkNQLApAQCAtMzY1OCw2ICszNzAxLDkgQEAKIHN0YXRpYyB2b2lkCiBscGZjX3NsYXZlX2Rlc3Ryb3koc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogeworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzZGV2LT5ob3N0LT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgbHBmY19oYmEgICAqcGhiYSA9IHZwb3J0LT5waGJhOworCWF0b21pY19kZWMoJnBoYmEtPnNkZXZfY250KTsKIAlzZGV2LT5ob3N0ZGF0YSA9IE5VTEw7CiAJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKaW5kZXggN2E2MTQ1NS4uZTc1OGVhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCkBAIC00NTUsNiArNDU1LDExIEBACiAJc3RydWN0IGxwZmNfaW9jYnEgKiBpb2NicSA9IE5VTEw7CiAKIAlsaXN0X3JlbW92ZV9oZWFkKGxwZmNfaW9jYl9saXN0LCBpb2NicSwgc3RydWN0IGxwZmNfaW9jYnEsIGxpc3QpOworCisJaWYgKGlvY2JxKQorCQlwaGJhLT5pb2NiX2NudCsrOworCWlmIChwaGJhLT5pb2NiX2NudCA+IHBoYmEtPmlvY2JfbWF4KQorCQlwaGJhLT5pb2NiX21heCA9IHBoYmEtPmlvY2JfY250OwogCXJldHVybiBpb2NicTsKIH0KIApAQCAtNTc1LDcgKzU4MCw4IEBACiB7CiAJc3RydWN0IGxwZmNfc2dscSAqc2dscTsKIAlzaXplX3Qgc3RhcnRfY2xlYW4gPSBvZmZzZXRvZihzdHJ1Y3QgbHBmY19pb2NicSwgaW9jYik7Ci0JdW5zaWduZWQgbG9uZyBpZmxhZzsKKwl1bnNpZ25lZCBsb25nIGlmbGFnID0gMDsKKwlzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcgPSAmcGhiYS0+c2xpLnJpbmdbTFBGQ19FTFNfUklOR107CiAKIAlpZiAoaW9jYnEtPnNsaTRfeHJpdGFnID09IE5PX1hSSSkKIAkJc2dscSA9IE5VTEw7CkBAIC01OTMsNiArNTk5LDEwIEBACiAJCX0gZWxzZSB7CiAJCQlzZ2xxLT5zdGF0ZSA9IFNHTF9GUkVFRDsKIAkJCWxpc3RfYWRkKCZzZ2xxLT5saXN0LCAmcGhiYS0+c2xpNF9oYmEubHBmY19zZ2xfbGlzdCk7CisKKwkJCS8qIENoZWNrIGlmIFRYUSBxdWV1ZSBuZWVkcyB0byBiZSBzZXJ2aWNlZCAqLworCQkJaWYgKHByaW5nLT50eHFfY250KQorCQkJCWxwZmNfd29ya2VyX3dha2VfdXAocGhiYSk7CiAJCX0KIAl9CiAKQEAgLTYwNSw2ICs2MTUsNyBAQAogCWxpc3RfYWRkX3RhaWwoJmlvY2JxLT5saXN0LCAmcGhiYS0+bHBmY19pb2NiX2xpc3QpOwogfQogCisKIC8qKgogICogX19scGZjX3NsaV9yZWxlYXNlX2lvY2JxX3MzIC0gUmVsZWFzZSBpb2NiIHRvIHRoZSBpb2NiIHBvb2wKICAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KQEAgLTY0Miw2ICs2NTMsNyBAQAogX19scGZjX3NsaV9yZWxlYXNlX2lvY2JxKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKmlvY2JxKQogewogCXBoYmEtPl9fbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBpb2NicSk7CisJcGhiYS0+aW9jYl9jbnQtLTsKIH0KIAogLyoqCkBAIC04NzIsNyArODg0LDExIEBACiAJCQlzdHJ1Y3QgbHBmY19pb2NicSAqcGlvY2IpCiB7CiAJbGlzdF9hZGRfdGFpbCgmcGlvY2ItPmxpc3QsICZwcmluZy0+dHhjbXBscSk7CisJcGlvY2ItPmlvY2JfZmxhZyB8PSBMUEZDX0lPX09OX1E7CiAJcHJpbmctPnR4Y21wbHFfY250Kys7CisJaWYgKHByaW5nLT50eGNtcGxxX2NudCA+IHByaW5nLT50eGNtcGxxX21heCkKKwkJcHJpbmctPnR4Y21wbHFfbWF4ID0gcHJpbmctPnR4Y21wbHFfY250OworCiAJaWYgKCh1bmxpa2VseShwcmluZy0+cmluZ25vID09IExQRkNfRUxTX1JJTkcpKSAmJgogCSAgIChwaW9jYi0+aW9jYi51bHBDb21tYW5kICE9IENNRF9BQk9SVF9YUklfQ04pICYmCiAJICAgKHBpb2NiLT5pb2NiLnVscENvbW1hbmQgIT0gQ01EX0NMT1NFX1hSSV9DTikpIHsKQEAgLTg5Nyw3ICs5MTMsNyBAQAogICogdGhlIHR4cSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmlyc3QgaW9jYiBpbiB0aGUgbGlzdCBhZnRlcgogICogcmVtb3ZpbmcgdGhlIGlvY2IgZnJvbSB0aGUgbGlzdCwgZWxzZSBpdCByZXR1cm5zIE5VTEwuCiAgKiovCi1zdGF0aWMgc3RydWN0IGxwZmNfaW9jYnEgKgorc3RydWN0IGxwZmNfaW9jYnEgKgogbHBmY19zbGlfcmluZ3R4X2dldChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZykKIHsKIAlzdHJ1Y3QgbHBmY19pb2NicSAqY21kX2lvY2I7CkBAIC0yMTUwLDcgKzIxNjYsMTAgQEAKIAlpZiAoaW90YWcgIT0gMCAmJiBpb3RhZyA8PSBwaGJhLT5zbGkubGFzdF9pb3RhZykgewogCQljbWRfaW9jYiA9IHBoYmEtPnNsaS5pb2NicV9sb29rdXBbaW90YWddOwogCQlsaXN0X2RlbF9pbml0KCZjbWRfaW9jYi0+bGlzdCk7Ci0JCXByaW5nLT50eGNtcGxxX2NudC0tOworCQlpZiAoY21kX2lvY2ItPmlvY2JfZmxhZyAmIExQRkNfSU9fT05fUSkgeworCQkJcHJpbmctPnR4Y21wbHFfY250LS07CisJCQljbWRfaW9jYi0+aW9jYl9mbGFnICY9IH5MUEZDX0lPX09OX1E7CisJCX0KIAkJcmV0dXJuIGNtZF9pb2NiOwogCX0KIApAQCAtMjE4Myw3ICsyMjAyLDEwIEBACiAJaWYgKGlvdGFnICE9IDAgJiYgaW90YWcgPD0gcGhiYS0+c2xpLmxhc3RfaW90YWcpIHsKIAkJY21kX2lvY2IgPSBwaGJhLT5zbGkuaW9jYnFfbG9va3VwW2lvdGFnXTsKIAkJbGlzdF9kZWxfaW5pdCgmY21kX2lvY2ItPmxpc3QpOwotCQlwcmluZy0+dHhjbXBscV9jbnQtLTsKKwkJaWYgKGNtZF9pb2NiLT5pb2NiX2ZsYWcgJiBMUEZDX0lPX09OX1EpIHsKKwkJCWNtZF9pb2NiLT5pb2NiX2ZsYWcgJj0gfkxQRkNfSU9fT05fUTsKKwkJCXByaW5nLT50eGNtcGxxX2NudC0tOworCQl9CiAJCXJldHVybiBjbWRfaW9jYjsKIAl9CiAKQEAgLTM1NjQsMTMgKzM1ODYsMTYgQEAKIGxwZmNfc2xpX2JyZHJlc3RhcnRfczQoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewogCXN0cnVjdCBscGZjX3NsaSAqcHNsaSA9ICZwaGJhLT5zbGk7Ci0KKwl1aW50MzJfdCBoYmFfYWVyX2VuYWJsZWQ7CiAKIAkvKiBSZXN0YXJ0IEhCQSAqLwogCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19TTEksCiAJCQkiMDI5NiBSZXN0YXJ0IEhCQSBEYXRhOiB4JXggeCV4XG4iLAogCQkJcGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUsIHBzbGktPnNsaV9mbGFnKTsKIAorCS8qIFRha2UgUENJZSBkZXZpY2UgQWR2YW5jZWQgRXJyb3IgUmVwb3J0aW5nIChBRVIpIHN0YXRlICovCisJaGJhX2Flcl9lbmFibGVkID0gcGhiYS0+aGJhX2ZsYWcgJiBIQkFfQUVSX0VOQUJMRUQ7CisKIAlscGZjX3NsaTRfYnJkcmVzZXQocGhiYSk7CiAKIAlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKQEAgLTM1ODIsNiArMzYwNywxMCBAQAogCW1lbXNldCgmcHNsaS0+bG5rX3N0YXRfb2Zmc2V0cywgMCwgc2l6ZW9mKHBzbGktPmxua19zdGF0X29mZnNldHMpKTsKIAlwc2xpLT5zdGF0c19zdGFydCA9IGdldF9zZWNvbmRzKCk7CiAKKwkvKiBSZXNldCBIQkEgQUVSIGlmIGl0IHdhcyBlbmFibGVkLCBub3RlIGhiYV9mbGFnIHdhcyByZXNldCBhYm92ZSAqLworCWlmIChoYmFfYWVyX2VuYWJsZWQpCisJCXBjaV9kaXNhYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHBoYmEtPnBjaWRldik7CisKIAlscGZjX2hiYV9kb3duX3Bvc3QocGhiYSk7CiAKIAlyZXR1cm4gMDsKQEAgLTM3OTQsNyArMzgyMyw3IEBACiAKIAkJCXBoYmEtPmxpbmtfc3RhdGUgPSBMUEZDX0hCQV9FUlJPUjsKIAkJCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwotCQkJcmV0dXJuIEVOWElPOworCQkJcmV0dXJuIC1FTlhJTzsKIAkJfQogCX0KIAlwaGJhLT5oYnFfY291bnQgPSBoYnFfY291bnQ7CkBAIC0zODg1LDcgKzM5MTQsNiBAQAogCQlwaGJhLT5zbGkzX29wdGlvbnMgJj0gfihMUEZDX1NMSTNfTlBJVl9FTkFCTEVEIHwKIAkJCQkJTFBGQ19TTEkzX0hCUV9FTkFCTEVEIHwKIAkJCQkJTFBGQ19TTEkzX0NSUF9FTkFCTEVEIHwKLQkJCQkJTFBGQ19TTEkzX0lOQl9FTkFCTEVEIHwKIAkJCQkJTFBGQ19TTEkzX0JHX0VOQUJMRUQpOwogCQlpZiAocmMgIT0gTUJYX1NVQ0NFU1MpIHsKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCkBAIC0zOTI3LDIwICszOTU1LDkgQEAKIAkJCXBoYmEtPnNsaTNfb3B0aW9ucyB8PSBMUEZDX1NMSTNfSEJRX0VOQUJMRUQ7CiAJCWlmIChwbWItPnUubWIudW4udmFyQ2ZnUG9ydC5nY3JwKQogCQkJcGhiYS0+c2xpM19vcHRpb25zIHw9IExQRkNfU0xJM19DUlBfRU5BQkxFRDsKLQkJaWYgKHBtYi0+dS5tYi51bi52YXJDZmdQb3J0LmdpbmIpIHsKLQkJCXBoYmEtPnNsaTNfb3B0aW9ucyB8PSBMUEZDX1NMSTNfSU5CX0VOQUJMRUQ7Ci0JCQlwaGJhLT5oYnFfZ2V0ID0gcGhiYS0+bWJveC0+dXMuczNfaW5iX3BncC5oYnFfZ2V0OwotCQkJcGhiYS0+cG9ydF9ncCA9IHBoYmEtPm1ib3gtPnVzLnMzX2luYl9wZ3AucG9ydDsKLQkJCXBoYmEtPmluYl9oYV9jb3B5ID0gJnBoYmEtPm1ib3gtPnVzLnMzX2luYl9wZ3AuaGFfY29weTsKLQkJCXBoYmEtPmluYl9jb3VudGVyID0gJnBoYmEtPm1ib3gtPnVzLnMzX2luYl9wZ3AuY291bnRlcjsKLQkJCXBoYmEtPmluYl9sYXN0X2NvdW50ZXIgPQotCQkJCQlwaGJhLT5tYm94LT51cy5zM19pbmJfcGdwLmNvdW50ZXI7Ci0JCX0gZWxzZSB7Ci0JCQlwaGJhLT5oYnFfZ2V0ID0gcGhiYS0+bWJveC0+dXMuczNfcGdwLmhicV9nZXQ7Ci0JCQlwaGJhLT5wb3J0X2dwID0gcGhiYS0+bWJveC0+dXMuczNfcGdwLnBvcnQ7Ci0JCQlwaGJhLT5pbmJfaGFfY29weSA9IE5VTEw7Ci0JCQlwaGJhLT5pbmJfY291bnRlciA9IE5VTEw7Ci0JCX0KKworCQlwaGJhLT5oYnFfZ2V0ID0gcGhiYS0+bWJveC0+dXMuczNfcGdwLmhicV9nZXQ7CisJCXBoYmEtPnBvcnRfZ3AgPSBwaGJhLT5tYm94LT51cy5zM19wZ3AucG9ydDsKIAogCQlpZiAocGhiYS0+Y2ZnX2VuYWJsZV9iZykgewogCQkJaWYgKHBtYi0+dS5tYi51bi52YXJDZmdQb3J0LmdiZykKQEAgLTM5NTMsOCArMzk3MCw2IEBACiAJfSBlbHNlIHsKIAkJcGhiYS0+aGJxX2dldCA9IE5VTEw7CiAJCXBoYmEtPnBvcnRfZ3AgPSBwaGJhLT5tYm94LT51cy5zMi5wb3J0OwotCQlwaGJhLT5pbmJfaGFfY29weSA9IE5VTEw7Ci0JCXBoYmEtPmluYl9jb3VudGVyID0gTlVMTDsKIAkJcGhiYS0+bWF4X3ZwaSA9IDA7CiAJfQogZG9fcHJlcF9mYWlsZWQ6CkBAIC00MjE0LDcgKzQyMjksOCBAQAogCWlmIChtcWUtPnVuLnJlYWRfcmV2LmF2YWlsX3ZwZF9sZW4gPCAqdnBkX3NpemUpCiAJCSp2cGRfc2l6ZSA9IG1xZS0+dW4ucmVhZF9yZXYuYXZhaWxfdnBkX2xlbjsKIAotCWxwZmNfc2xpX3BjaW1lbV9iY29weShkbWFidWYtPnZpcnQsIHZwZCwgKnZwZF9zaXplKTsKKwltZW1jcHkodnBkLCBkbWFidWYtPnZpcnQsICp2cGRfc2l6ZSk7CisKIAlkbWFfZnJlZV9jb2hlcmVudCgmcGhiYS0+cGNpZGV2LT5kZXYsIGRtYV9zaXplLAogCQkJICBkbWFidWYtPnZpcnQsIGRtYWJ1Zi0+cGh5cyk7CiAJa2ZyZWUoZG1hYnVmKTsKQEAgLTQ1MzksNiArNDU1NSwyNCBAQAogCS8qIFN0YXJ0IGVycm9yIGF0dGVudGlvbiAoRVJBVFQpIHBvbGxpbmcgdGltZXIgKi8KIAltb2RfdGltZXIoJnBoYmEtPmVyYXR0X3BvbGwsIGppZmZpZXMgKyBIWiAqIExQRkNfRVJBVFRfUE9MTF9JTlRFUlZBTCk7CiAKKwkvKiBFbmFibGUgUENJZSBkZXZpY2UgQWR2YW5jZWQgRXJyb3IgUmVwb3J0aW5nIChBRVIpIGlmIGNvbmZpZ3VyZWQgKi8KKwlpZiAocGhiYS0+Y2ZnX2Flcl9zdXBwb3J0ID09IDEgJiYgIShwaGJhLT5oYmFfZmxhZyAmIEhCQV9BRVJfRU5BQkxFRCkpIHsKKwkJcmMgPSBwY2lfZW5hYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHBoYmEtPnBjaWRldik7CisJCWlmICghcmMpIHsKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19JTklULAorCQkJCQkiMjgyOSBUaGlzIGRldmljZSBzdXBwb3J0cyAiCisJCQkJCSJBZHZhbmNlZCBFcnJvciBSZXBvcnRpbmcgKEFFUilcbiIpOworCQkJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJCQlwaGJhLT5oYmFfZmxhZyB8PSBIQkFfQUVSX0VOQUJMRUQ7CisJCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCQl9IGVsc2UgeworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0lOSVQsCisJCQkJCSIyODMwIFRoaXMgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgIgorCQkJCQkiQWR2YW5jZWQgRXJyb3IgUmVwb3J0aW5nIChBRVIpXG4iKTsKKwkJCXBoYmEtPmNmZ19hZXJfc3VwcG9ydCA9IDA7CisJCX0KKwl9CisKIAkvKgogCSAqIFRoZSBwb3J0IGlzIHJlYWR5LCBzZXQgdGhlIGhvc3QncyBsaW5rIHN0YXRlIHRvIExJTktfRE9XTgogCSAqIGluIHByZXBhcmF0aW9uIGZvciBsaW5rIGludGVycnVwdHMuCkBAIC01MjY1LDcgKzUyOTksOCBAQAogCWlmIChtY3FlX3N0YXR1cyAhPSBNQl9DUUVfU1RBVFVTX1NVQ0NFU1MpIHsKIAkJYmZfc2V0KGxwZmNfbXFlX3N0YXR1cywgbWIsIExQRkNfTUJYX0VSUk9SX1JBTkdFIHwgbWNxZV9zdGF0dXMpOwogCQlyYyA9IE1CWEVSUl9FUlJPUjsKLQl9CisJfSBlbHNlCisJCWxwZmNfc2xpNF9zd2FwX3N0cihwaGJhLCBtYm94cSk7CiAKIAlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfTUJPWCB8IExPR19TTEksCiAJCQkiKCVkKTowMzU2IE1haWxib3ggY21kIHgleCAoeCV4KSBTdGF0dXMgeCV4ICIKQEAgLTU1OTIsNyArNTYyNyw3IEBACiAgKiBpb2NiIHRvIHRoZSB0eHEgd2hlbiBTTEkgbGF5ZXIgY2Fubm90IHN1Ym1pdCB0aGUgY29tbWFuZCBpb2NiCiAgKiB0byB0aGUgcmluZy4KICAqKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBfX2xwZmNfc2xpX3Jpbmd0eF9wdXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcsCiAJCSAgICBzdHJ1Y3QgbHBmY19pb2NicSAqcGlvY2IpCiB7CkBAIC02MjA5LDcgKzYyNDQsNiBAQAogCQkJIHN0cnVjdCBscGZjX2lvY2JxICpwaW9jYiwgdWludDMyX3QgZmxhZykKIHsKIAlzdHJ1Y3QgbHBmY19zZ2xxICpzZ2xxOwotCXVpbnQxNl90IHhyaXRhZzsKIAl1bmlvbiBscGZjX3dxZSB3cWU7CiAJc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nID0gJnBoYmEtPnNsaS5yaW5nW3JpbmdfbnVtYmVyXTsKIApAQCAtNjIxOCwxMCArNjI1MiwyNiBAQAogCQkgICAgcGlvY2ItPmlvY2IudWxwQ29tbWFuZCA9PSBDTURfQ0xPU0VfWFJJX0NOKQogCQkJc2dscSA9IE5VTEw7CiAJCWVsc2UgeworCQkJaWYgKHByaW5nLT50eHFfY250KSB7CisJCQkJaWYgKCEoZmxhZyAmIFNMSV9JT0NCX1JFVF9JT0NCKSkgeworCQkJCQlfX2xwZmNfc2xpX3Jpbmd0eF9wdXQocGhiYSwKKwkJCQkJCXByaW5nLCBwaW9jYik7CisJCQkJCXJldHVybiBJT0NCX1NVQ0NFU1M7CisJCQkJfSBlbHNlIHsKKwkJCQkJcmV0dXJuIElPQ0JfQlVTWTsKKwkJCQl9CisJCQl9IGVsc2UgewogCQkJc2dscSA9IF9fbHBmY19zbGlfZ2V0X3NnbHEocGhiYSk7Ci0JCQlpZiAoIXNnbHEpCi0JCQkJcmV0dXJuIElPQ0JfRVJST1I7Ci0JCQlwaW9jYi0+c2xpNF94cml0YWcgPSBzZ2xxLT5zbGk0X3hyaXRhZzsKKwkJCQlpZiAoIXNnbHEpIHsKKwkJCQkJaWYgKCEoZmxhZyAmIFNMSV9JT0NCX1JFVF9JT0NCKSkgeworCQkJCQkJX19scGZjX3NsaV9yaW5ndHhfcHV0KHBoYmEsCisJCQkJCQkJCXByaW5nLAorCQkJCQkJCQlwaW9jYik7CisJCQkJCQlyZXR1cm4gSU9DQl9TVUNDRVNTOworCQkJCQl9IGVsc2UKKwkJCQkJCXJldHVybiBJT0NCX0JVU1k7CisJCQkJfQorCQkJfQogCQl9CiAJfSBlbHNlIGlmIChwaW9jYi0+aW9jYl9mbGFnICYgIExQRkNfSU9fRkNQKSB7CiAJCXNnbHEgPSBOVUxMOyAvKiBUaGVzZSBJTydzIGFscmVhZHkgaGF2ZSBhbiBYUkkgYW5kCkBAIC02MjM3LDggKzYyODcsOSBAQAogCX0KIAogCWlmIChzZ2xxKSB7Ci0JCXhyaXRhZyA9IGxwZmNfc2xpNF9icGwyc2dsKHBoYmEsIHBpb2NiLCBzZ2xxKTsKLQkJaWYgKHhyaXRhZyAhPSBzZ2xxLT5zbGk0X3hyaXRhZykKKwkJcGlvY2ItPnNsaTRfeHJpdGFnID0gc2dscS0+c2xpNF94cml0YWc7CisKKwkJaWYgKE5PX1hSSSA9PSBscGZjX3NsaTRfYnBsMnNnbChwaGJhLCBwaW9jYiwgc2dscSkpCiAJCQlyZXR1cm4gSU9DQl9FUlJPUjsKIAl9CiAKQEAgLTYyNzgsNyArNjMyOSw3IEBACiAgKiAJSU9DQl9TVUNDRVNTIC0gU3VjY2VzcwogICogCUlPQ0JfQlVTWSAtIEJ1c3kKICAqKi8KLXN0YXRpYyBpbmxpbmUgaW50CitpbnQKIF9fbHBmY19zbGlfaXNzdWVfaW9jYihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQzMl90IHJpbmdfbnVtYmVyLAogCQlzdHJ1Y3QgbHBmY19pb2NicSAqcGlvY2IsIHVpbnQzMl90IGZsYWcpCiB7CkBAIC03MDk1LDEzICs3MTQ2LDYgQEAKIAkJCSAqLwogCQkJYWJvcnRfaW9jYiA9IHBoYmEtPnNsaS5pb2NicV9sb29rdXBbYWJvcnRfY29udGV4dF07CiAKLQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0VMUyB8IExPR19TTEksCi0JCQkJIjAzMjcgQ2Fubm90IGFib3J0IGVscyBpb2NiICVwICIKLQkJCQkid2l0aCB0YWcgJXggY29udGV4dCAleCwgYWJvcnQgc3RhdHVzICV4LCAiCi0JCQkJImFib3J0IGNvZGUgJXhcbiIsCi0JCQkJYWJvcnRfaW9jYiwgYWJvcnRfaW90YWcsIGFib3J0X2NvbnRleHQsCi0JCQkJaXJzcC0+dWxwU3RhdHVzLCBpcnNwLT51bi51bHBXb3JkWzRdKTsKLQogCQkvKgogCQkgKiAgSWYgdGhlIGlvY2IgaXMgbm90IGZvdW5kIGluIEZpcm13YXJlIHF1ZXVlIHRoZSBpb2NiCiAJCSAqICBtaWdodCBoYXZlIGNvbXBsZXRlZCBhbHJlYWR5LiBEbyBub3QgZnJlZSBpdCBhZ2Fpbi4KQEAgLTcxMjAsNiArNzE2NCwxMyBAQAogCQkJaWYgKGFib3J0X2lvY2IgJiYgcGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KQogCQkJCWFib3J0X2NvbnRleHQgPSBhYm9ydF9pb2NiLT5pb2NiLnVscENvbnRleHQ7CiAJCX0KKworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfRUxTIHwgTE9HX1NMSSwKKwkJCQkiMDMyNyBDYW5ub3QgYWJvcnQgZWxzIGlvY2IgJXAgIgorCQkJCSJ3aXRoIHRhZyAleCBjb250ZXh0ICV4LCBhYm9ydCBzdGF0dXMgJXgsICIKKwkJCQkiYWJvcnQgY29kZSAleFxuIiwKKwkJCQlhYm9ydF9pb2NiLCBhYm9ydF9pb3RhZywgYWJvcnRfY29udGV4dCwKKwkJCQlpcnNwLT51bHBTdGF0dXMsIGlyc3AtPnVuLnVscFdvcmRbNF0pOwogCQkvKgogCQkgKiBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgaW9jYnEgYmVmb3JlIHRha2luZyBpdAogCQkgKiBvZmYgdGhlIHR4Y21wbHEgYW5kIHRyeSB0byBjYWxsIGNvbXBsZXRpb24gcm91dGluZS4KQEAgLTcxMzcsNyArNzE4OCwxMCBAQAogCQkJICogZm9sbG93aW5nIGFib3J0IFhSSSBmcm9tIHRoZSBIQkEuCiAJCQkgKi8KIAkJCWxpc3RfZGVsX2luaXQoJmFib3J0X2lvY2ItPmxpc3QpOwotCQkJcHJpbmctPnR4Y21wbHFfY250LS07CisJCQlpZiAoYWJvcnRfaW9jYi0+aW9jYl9mbGFnICYgTFBGQ19JT19PTl9RKSB7CisJCQkJYWJvcnRfaW9jYi0+aW9jYl9mbGFnICY9IH5MUEZDX0lPX09OX1E7CisJCQkJcHJpbmctPnR4Y21wbHFfY250LS07CisJCQl9CiAKIAkJCS8qIEZpcm13YXJlIGNvdWxkIHN0aWxsIGJlIGluIHByb2dyZXNzIG9mIERNQWluZwogCQkJICogcGF5bG9hZCwgc28gZG9uJ3QgZnJlZSBkYXRhIGJ1ZmZlciB0aWxsIGFmdGVyCkBAIC03MjY5LDggKzczMjMsOSBAQAogCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fSU5GTywgTE9HX1NMSSwKIAkJCSAiMDMzOSBBYm9ydCB4cmkgeCV4LCBvcmlnaW5hbCBpb3RhZyB4JXgsICIKIAkJCSAiYWJvcnQgY21kIGlvdGFnIHgleFxuIiwKKwkJCSBpYWJ0LT51bi5hY3hyaS5hYm9ydElvVGFnLAogCQkJIGlhYnQtPnVuLmFjeHJpLmFib3J0Q29udGV4dFRhZywKLQkJCSBpYWJ0LT51bi5hY3hyaS5hYm9ydElvVGFnLCBhYnRzaW9jYnAtPmlvdGFnKTsKKwkJCSBhYnRzaW9jYnAtPmlvdGFnKTsKIAlyZXR2YWwgPSBfX2xwZmNfc2xpX2lzc3VlX2lvY2IocGhiYSwgcHJpbmctPnJpbmdubywgYWJ0c2lvY2JwLCAwKTsKIAogCWlmIChyZXR2YWwpCkBAIC03NjAwLDcgKzc2NTUsNyBAQAogCWxvbmcgdGltZWxlZnQsIHRpbWVvdXRfcmVxID0gMDsKIAlpbnQgcmV0dmFsID0gSU9DQl9TVUNDRVNTOwogCXVpbnQzMl90IGNyZWdfdmFsOwotCisJc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nID0gJnBoYmEtPnNsaS5yaW5nW0xQRkNfRUxTX1JJTkddOwogCS8qCiAJICogSWYgdGhlIGNhbGxlciBoYXMgcHJvdmlkZWQgYSByZXNwb25zZSBpb2NicSBidWZmZXIsIHRoZW4gY29udGV4dDIKIAkgKiBpcyBOVUxMIG9yIGl0cyBhbiBlcnJvci4KQEAgLTc2MjIsNyArNzY3Nyw4IEBACiAJCXJlYWRsKHBoYmEtPkhDcmVnYWRkcik7IC8qIGZsdXNoICovCiAJfQogCi0JcmV0dmFsID0gbHBmY19zbGlfaXNzdWVfaW9jYihwaGJhLCByaW5nX251bWJlciwgcGlvY2IsIDApOworCXJldHZhbCA9IGxwZmNfc2xpX2lzc3VlX2lvY2IocGhiYSwgcmluZ19udW1iZXIsIHBpb2NiLAorCQkJCSAgICAgU0xJX0lPQ0JfUkVUX0lPQ0IpOwogCWlmIChyZXR2YWwgPT0gSU9DQl9TVUNDRVNTKSB7CiAJCXRpbWVvdXRfcmVxID0gdGltZW91dCAqIEhaOwogCQl0aW1lbGVmdCA9IHdhaXRfZXZlbnRfdGltZW91dChkb25lX3EsCkBAIC03NjQ0LDYgKzc3MDAsMTEgQEAKIAkJCQkJdGltZW91dCwgKHRpbWVsZWZ0IC8gamlmZmllcykpOwogCQkJcmV0dmFsID0gSU9DQl9USU1FRE9VVDsKIAkJfQorCX0gZWxzZSBpZiAocmV0dmFsID09IElPQ0JfQlVTWSkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfU0xJLAorCQkJIjI4MTggTWF4IElPQ0JzICVkIHR4cSBjbnQgJWQgdHhjbXBscSBjbnQgJWRcbiIsCisJCQlwaGJhLT5pb2NiX2NudCwgcHJpbmctPnR4cV9jbnQsIHByaW5nLT50eGNtcGxxX2NudCk7CisJCXJldHVybiByZXR2YWw7CiAJfSBlbHNlIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX1NMSSwKIAkJCQkiMDMzMiBJT0NCIHdhaXQgaXNzdWUgZmFpbGVkLCBEYXRhIHgleFxuIiwKQEAgLTc3MjQsOSArNzc4NSwxMCBAQAogCQkgKiBpZiBMUEZDX01CWF9XQUtFIGZsYWcgaXMgc2V0IHRoZSBtYWlsYm94IGlzIGNvbXBsZXRlZAogCQkgKiBlbHNlIGRvIG5vdCBmcmVlIHRoZSByZXNvdXJjZXMuCiAJCSAqLwotCQlpZiAocG1ib3hxLT5tYm94X2ZsYWcgJiBMUEZDX01CWF9XQUtFKQorCQlpZiAocG1ib3hxLT5tYm94X2ZsYWcgJiBMUEZDX01CWF9XQUtFKSB7CiAJCQlyZXR2YWwgPSBNQlhfU1VDQ0VTUzsKLQkJZWxzZSB7CisJCQlscGZjX3NsaTRfc3dhcF9zdHIocGhiYSwgcG1ib3hxKTsKKwkJfSBlbHNlIHsKIAkJCXJldHZhbCA9IE1CWF9USU1FT1VUOwogCQkJcG1ib3hxLT5tYm94X2NtcGwgPSBscGZjX3NsaV9kZWZfbWJveF9jbXBsOwogCQl9CkBAIC04Nzg5LDEyICs4ODUxLDE3IEBACiB7CiAJc3RydWN0IGxwZmNfaW9jYnEgKmlyc3Bpb2NicTsKIAl1bnNpZ25lZCBsb25nIGlmbGFnczsKKwlzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcgPSAmcGhiYS0+c2xpLnJpbmdbTFBGQ19GQ1BfUklOR107CiAKIAkvKiBHZXQgYW4gaXJzcGlvY2JxIGZvciBsYXRlciBFTFMgcmVzcG9uc2UgcHJvY2Vzc2luZyB1c2UgKi8KIAlpcnNwaW9jYnEgPSBscGZjX3NsaV9nZXRfaW9jYnEocGhiYSk7CiAJaWYgKCFpcnNwaW9jYnEpIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLAotCQkJCSIwMzg3IEZhaWxlZCB0byBhbGxvY2F0ZSBhbiBpb2NicVxuIik7CisJCQkiMDM4NyBOTyBJT0NCUSBkYXRhOiB0eHFfY250PSVkIGlvY2JfY250PSVkICIKKwkJCSJmY3BfdHhjbXBscV9jbnQ9JWQsIGVsc190eGNtcGxxX2NudD0lZFxuIiwKKwkJCXByaW5nLT50eHFfY250LCBwaGJhLT5pb2NiX2NudCwKKwkJCXBoYmEtPnNsaS5yaW5nW0xQRkNfRkNQX1JJTkddLnR4Y21wbHFfY250LAorCQkJcGhiYS0+c2xpLnJpbmdbTFBGQ19FTFNfUklOR10udHhjbXBscV9jbnQpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCkBAIC05MDQzLDkgKzkxMTAsMTAgQEAKIAkJfQogCX0KIAlpZiAodW5saWtlbHkoIWNxKSkgewotCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19TTEksCi0JCQkJIjAzNjUgU2xvdy1wYXRoIENRIGlkZW50aWZpZXIgKCVkKSBkb2VzICIKLQkJCQkibm90IGV4aXN0XG4iLCBjcWlkKTsKKwkJaWYgKHBoYmEtPnNsaS5zbGlfZmxhZyAmIExQRkNfU0xJX0FDVElWRSkKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX1NMSSwKKwkJCQkJIjAzNjUgU2xvdy1wYXRoIENRIGlkZW50aWZpZXIgIgorCQkJCQkiKCVkKSBkb2VzIG5vdCBleGlzdFxuIiwgY3FpZCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTkyMDgsNiArOTI3Niw3IEBACiB7CiAJc3RydWN0IGxwZmNfd2NxZV9yZWxlYXNlIHdjcWU7CiAJYm9vbCB3b3JrcG9zdGVkID0gZmFsc2U7CisJdW5zaWduZWQgbG9uZyBpZmxhZzsKIAogCS8qIENvcHkgdGhlIHdvcmsgcXVldWUgQ1FFIGFuZCBjb252ZXJ0IGVuZGlhbiBvcmRlciBpZiBuZWVkZWQgKi8KIAlscGZjX3NsaV9wY2ltZW1fYmNvcHkoY3FlLCAmd2NxZSwgc2l6ZW9mKHN0cnVjdCBscGZjX2NxZSkpOwpAQCAtOTIxNiw2ICs5Mjg1LDkgQEAKIAlzd2l0Y2ggKGJmX2dldChscGZjX3djcWVfY19jb2RlLCAmd2NxZSkpIHsKIAljYXNlIENRRV9DT0RFX0NPTVBMX1dRRToKIAkJLyogUHJvY2VzcyB0aGUgV1EgY29tcGxldGUgZXZlbnQgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFnKTsKKwkJcGhiYS0+bGFzdF9jb21wbGV0aW9uX3RpbWUgPSBqaWZmaWVzOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZyk7CiAJCWxwZmNfc2xpNF9mcF9oYW5kbGVfZmNwX3djcWUocGhiYSwKIAkJCQkoc3RydWN0IGxwZmNfd2NxZV9jb21wbGV0ZSAqKSZ3Y3FlKTsKIAkJYnJlYWs7CkBAIC05MjcxLDkgKzkzNDMsMTAgQEAKIAogCWNxID0gcGhiYS0+c2xpNF9oYmEuZmNwX2NxW2ZjcF9jcWlkeF07CiAJaWYgKHVubGlrZWx5KCFjcSkpIHsKLQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLAotCQkJCSIwMzY3IEZhc3QtcGF0aCBjb21wbGV0aW9uIHF1ZXVlIGRvZXMgbm90ICIKLQkJCQkiZXhpc3RcbiIpOworCQlpZiAocGhiYS0+c2xpLnNsaV9mbGFnICYgTFBGQ19TTElfQUNUSVZFKQorCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLAorCQkJCQkiMDM2NyBGYXN0LXBhdGggY29tcGxldGlvbiBxdWV1ZSAiCisJCQkJCSJkb2VzIG5vdCBleGlzdFxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTExODk4LDEyICsxMTk3MSwyNiBAQAogICogYXZhaWxhYmxlIHJwaXMgbWFpbnRhaW5lZCBieSB0aGUgZHJpdmVyLgogICoqLwogdm9pZAorX19scGZjX3NsaTRfZnJlZV9ycGkoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBpbnQgcnBpKQoreworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQocnBpLCBwaGJhLT5zbGk0X2hiYS5ycGlfYm1hc2spKSB7CisJCXBoYmEtPnNsaTRfaGJhLnJwaV9jb3VudC0tOworCQlwaGJhLT5zbGk0X2hiYS5tYXhfY2ZnX3BhcmFtLnJwaV91c2VkLS07CisJfQorfQorCisvKioKKyAqIGxwZmNfc2xpNF9mcmVlX3JwaSAtIFJlbGVhc2UgYW4gcnBpIGZvciByZXVzZS4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIHRvIHJlbGVhc2UgYW4gcnBpIHRvIHRoZSBwb29sIG9mCisgKiBhdmFpbGFibGUgcnBpcyBtYWludGFpbmVkIGJ5IHRoZSBkcml2ZXIuCisgKiovCit2b2lkCiBscGZjX3NsaTRfZnJlZV9ycGkoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBpbnQgcnBpKQogewogCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwotCWNsZWFyX2JpdChycGksIHBoYmEtPnNsaTRfaGJhLnJwaV9ibWFzayk7Ci0JcGhiYS0+c2xpNF9oYmEucnBpX2NvdW50LS07Ci0JcGhiYS0+c2xpNF9oYmEubWF4X2NmZ19wYXJhbS5ycGlfdXNlZC0tOworCV9fbHBmY19zbGk0X2ZyZWVfcnBpKHBoYmEsIHJwaSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIH0KIApAQCAtMTIzMTgsMTggKzEyNDA1LDQ3IEBACiB7CiAJdWludDE2X3QgbmV4dF9mY2ZfaW5kZXg7CiAKLQkvKiBTZWFyY2ggZnJvbSB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZWQgRkNGIGluZGV4ICovCisJLyogU2VhcmNoIHN0YXJ0IGZyb20gbmV4dCBiaXQgb2YgY3VycmVudGx5IHJlZ2lzdGVyZWQgRkNGIGluZGV4ICovCisJbmV4dF9mY2ZfaW5kZXggPSAocGhiYS0+ZmNmLmN1cnJlbnRfcmVjLmZjZl9pbmR4ICsgMSkgJQorCQkJCQlMUEZDX1NMSTRfRkNGX1RCTF9JTkRYX01BWDsKIAluZXh0X2ZjZl9pbmRleCA9IGZpbmRfbmV4dF9iaXQocGhiYS0+ZmNmLmZjZl9ycl9ibWFzaywKIAkJCQkgICAgICAgTFBGQ19TTEk0X0ZDRl9UQkxfSU5EWF9NQVgsCi0JCQkJICAgICAgIHBoYmEtPmZjZi5jdXJyZW50X3JlYy5mY2ZfaW5keCk7CisJCQkJICAgICAgIG5leHRfZmNmX2luZGV4KTsKKwogCS8qIFdyYXAgYXJvdW5kIGNvbmRpdGlvbiBvbiBwaGJhLT5mY2YuZmNmX3JyX2JtYXNrICovCiAJaWYgKG5leHRfZmNmX2luZGV4ID49IExQRkNfU0xJNF9GQ0ZfVEJMX0lORFhfTUFYKQogCQluZXh0X2ZjZl9pbmRleCA9IGZpbmRfbmV4dF9iaXQocGhiYS0+ZmNmLmZjZl9ycl9ibWFzaywKIAkJCQkJICAgICAgIExQRkNfU0xJNF9GQ0ZfVEJMX0lORFhfTUFYLCAwKTsKLQkvKiBSb3VuZCByb2JpbiBmYWlsb3ZlciBzdG9wIGNvbmRpdGlvbiAqLwotCWlmIChuZXh0X2ZjZl9pbmRleCA9PSBwaGJhLT5mY2YuZmNmX3JyX2luaXRfaW5keCkKLQkJcmV0dXJuIExQRkNfRkNPRV9GQ0ZfTkVYVF9OT05FOwogCisJLyogQ2hlY2sgcm91bmRyb2JpbiBmYWlsb3ZlciBsaXN0IGVtcHR5IGNvbmRpdGlvbiAqLworCWlmIChuZXh0X2ZjZl9pbmRleCA+PSBMUEZDX1NMSTRfRkNGX1RCTF9JTkRYX01BWCkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfRklQLAorCQkJCSIyODQ0IE5vIHJvdW5kcm9iaW4gZmFpbG92ZXIgRkNGIGF2YWlsYWJsZVxuIik7CisJCXJldHVybiBMUEZDX0ZDT0VfRkNGX05FWFRfTk9ORTsKKwl9CisKKwkvKiBDaGVjayByb3VuZHJvYmluIGZhaWxvdmVyIGluZGV4IGJtYXNrIHN0b3AgY29uZGl0aW9uICovCisJaWYgKG5leHRfZmNmX2luZGV4ID09IHBoYmEtPmZjZi5mY2ZfcnJfaW5pdF9pbmR4KSB7CisJCWlmICghKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9SRURJU0NfUlJVKSkgeworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0ZJUCwKKwkJCQkJIjI4NDcgUm91bmQgcm9iaW4gZmFpbG92ZXIgRkNGIGluZGV4ICIKKwkJCQkJInNlYXJjaCBoaXQgc3RvcCBjb25kaXRpb246eCV4XG4iLAorCQkJCQluZXh0X2ZjZl9pbmRleCk7CisJCQlyZXR1cm4gTFBGQ19GQ09FX0ZDRl9ORVhUX05PTkU7CisJCX0KKwkJLyogVGhlIHJvdW5kcm9iaW4gZmFpbG92ZXIgaW5kZXggYm1hc2sgdXBkYXRlZCwgc3RhcnQgb3ZlciAqLworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfRklQLAorCQkJCSIyODQ4IFJvdW5kIHJvYmluIGZhaWxvdmVyIEZDRiBpbmRleCBibWFzayAiCisJCQkJInVwZGF0ZWQsIHN0YXJ0IG92ZXJcbiIpOworCQlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwkJcGhiYS0+ZmNmLmZjZl9mbGFnICY9IH5GQ0ZfUkVESVNDX1JSVTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwkJcmV0dXJuIHBoYmEtPmZjZi5mY2ZfcnJfaW5pdF9pbmR4OworCX0KKworCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19GSVAsCisJCQkiMjg0NSBHZXQgbmV4dCByb3VuZCByb2JpbiBmYWlsb3ZlciAiCisJCQkiRkNGIGluZGV4IHgleFxuIiwgbmV4dF9mY2ZfaW5kZXgpOwogCXJldHVybiBuZXh0X2ZjZl9pbmRleDsKIH0KIApAQCAtMTIzNTksMTEgKzEyNDc1LDIwIEBACiAJLyogU2V0IHRoZSBlbGlnaWJsZSBGQ0YgcmVjb3JkIGluZGV4IGJtYXNrICovCiAJc2V0X2JpdChmY2ZfaW5kZXgsIHBoYmEtPmZjZi5mY2ZfcnJfYm1hc2spOwogCisJLyogU2V0IHRoZSByb3VuZHJvYmluIGluZGV4IGJtYXNrIHVwZGF0ZWQgKi8KKwlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwlwaGJhLT5mY2YuZmNmX2ZsYWcgfD0gRkNGX1JFRElTQ19SUlU7CisJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKworCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19GSVAsCisJCQkiMjc5MCBTZXQgRkNGIGluZGV4IHgleCB0byByb3VuZCByb2JpbiBmYWlsb3ZlciAiCisJCQkiYm1hc2tcbiIsIGZjZl9pbmRleCk7CisKIAlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiBscGZjX3NsaTRfZmNmX3JyX2luZGV4X3NldCAtIENsZWFyIGJtYXNrIGZyb20gZWxpZ2libGUgZmNmIHJlY29yZCBpbmRleAorICogbHBmY19zbGk0X2ZjZl9ycl9pbmRleF9jbGVhciAtIENsZWFyIGJtYXNrIGZyb20gZWxpZ2libGUgZmNmIHJlY29yZCBpbmRleAogICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCiAgKgogICogVGhpcyByb3V0aW5lIGNsZWFycyB0aGUgRkNGIHJlY29yZCBpbmRleCBmcm9tIHRoZSBlbGlnaWJsZSBibWFzayBmb3IKQEAgLTEyMzg0LDYgKzEyNTA5LDEwIEBACiAJfQogCS8qIENsZWFyIHRoZSBlbGlnaWJsZSBGQ0YgcmVjb3JkIGluZGV4IGJtYXNrICovCiAJY2xlYXJfYml0KGZjZl9pbmRleCwgcGhiYS0+ZmNmLmZjZl9ycl9ibWFzayk7CisKKwlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfRklQLAorCQkJIjI3OTEgQ2xlYXIgRkNGIGluZGV4IHgleCBmcm9tIHJvdW5kIHJvYmluIGZhaWxvdmVyICIKKwkJCSJibWFza1xuIiwgZmNmX2luZGV4KTsKIH0KIAogLyoqCkBAIC0xMjQ0Niw3ICsxMjU3NSw3IEBACiB9CiAKIC8qKgotICogbHBmY19zbGk0X3JlZGlzY19hbGxfZmNmIC0gUmVxdWVzdCB0byByZWRpc2NvdmVyIGVudGlyZSBGQ0YgdGFibGUgYnkgcG9ydC4KKyAqIGxwZmNfc2xpNF9yZWRpc2NfZmNmX3RhYmxlIC0gUmVxdWVzdCB0byByZWRpc2NvdmVyIGVudGlyZSBGQ0YgdGFibGUgYnkgcG9ydC4KICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgogICoKICAqIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIHRvIHJlcXVlc3QgZm9yIHJlZGlzY292ZXJ5IG9mIHRoZSBlbnRpcmUgRkNGIHRhYmxlCkBAIC0xMjY2Miw2ICsxMjc5MSw3IEBACiAJTFBGQ19NQk9YUV90ICptYiwgKm5leHRtYjsKIAlzdHJ1Y3QgbHBmY19kbWFidWYgKm1wOwogCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOworCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7CiAKIAlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobWIsIG5leHRtYiwgJnBoYmEtPnNsaS5tYm94cSwgbGlzdCkgewpAQCAtMTI2NzMsNiArMTI4MDMsOSBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKG1iLT51Lm1iLm1ieENvbW1hbmQgPT0gTUJYX1JFR19MT0dJTjY0KSB7CisJCQlpZiAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KQorCQkJCV9fbHBmY19zbGk0X2ZyZWVfcnBpKHBoYmEsCisJCQkJCQltYi0+dS5tYi51bi52YXJSZWdMb2dpbi5ycGkpOwogCQkJbXAgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopIChtYi0+Y29udGV4dDEpOwogCQkJaWYgKG1wKSB7CiAJCQkJX19scGZjX21idWZfZnJlZShwaGJhLCBtcC0+dmlydCwgbXAtPnBoeXMpOwpAQCAtMTI2ODAsNiArMTI4MTMsOSBAQAogCQkJfQogCQkJbmRscCA9IChzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKSBtYi0+Y29udGV4dDI7CiAJCQlpZiAobmRscCkgeworCQkJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCQkJbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9JR05SX1JFR19DTVBMOworCQkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAkJCQlscGZjX25scF9wdXQobmRscCk7CiAJCQkJbWItPmNvbnRleHQyID0gTlVMTDsKIAkJCX0KQEAgLTEyNjk1LDYgKzEyODMxLDkgQEAKIAkJaWYgKG1iLT51Lm1iLm1ieENvbW1hbmQgPT0gTUJYX1JFR19MT0dJTjY0KSB7CiAJCQluZGxwID0gKHN0cnVjdCBscGZjX25vZGVsaXN0ICopIG1iLT5jb250ZXh0MjsKIAkJCWlmIChuZGxwKSB7CisJCQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJCQluZGxwLT5ubHBfZmxhZyAmPSB+TkxQX0lHTlJfUkVHX0NNUEw7CisJCQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCQkJCWxwZmNfbmxwX3B1dChuZGxwKTsKIAkJCQltYi0+Y29udGV4dDIgPSBOVUxMOwogCQkJfQpAQCAtMTI3MDUsMyArMTI4NDQsODUgQEAKIAlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogfQogCisvKioKKyAqIGxwZmNfZHJhaW5fdHhxIC0gRHJhaW4gdGhlIHR4cQorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYXR0ZW1wdCB0byBzdWJtaXQgSU9DQnMgb24gdGhlIHR4cQorICogdG8gdGhlIGFkYXB0ZXIuICBGb3IgU0xJNCBhZGFwdGVycywgdGhlIHR4cSBjb250YWlucworICogRUxTIElPQ0JzIHRoYXQgaGF2ZSBiZWVuIGRlZmVycmVkIGJlY2F1c2UgdGhlIHRoZXJlCisgKiBhcmUgbm8gU0dMcy4gIFRoaXMgY29uZ2VzdGlvbiBjYW4gb2NjdXIgd2l0aCBsYXJnZQorICogdnBvcnQgY291bnRzIGR1cmluZyBub2RlIGRpc2NvdmVyeS4KKyAqKi8KKwordWludDMyX3QKK2xwZmNfZHJhaW5fdHhxKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK3sKKwlMSVNUX0hFQUQoY29tcGxldGlvbnMpOworCXN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZyA9ICZwaGJhLT5zbGkucmluZ1tMUEZDX0VMU19SSU5HXTsKKwlzdHJ1Y3QgbHBmY19pb2NicSAqcGlvY2JxID0gMDsKKwl1bnNpZ25lZCBsb25nIGlmbGFncyA9IDA7CisJY2hhciAqZmFpbF9tc2cgPSBOVUxMOworCXN0cnVjdCBscGZjX3NnbHEgKnNnbHE7CisJdW5pb24gbHBmY193cWUgd3FlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CisJaWYgKHByaW5nLT50eHFfY250ID4gcHJpbmctPnR4cV9tYXgpCisJCXByaW5nLT50eHFfbWF4ID0gcHJpbmctPnR4cV9jbnQ7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCisJd2hpbGUgKHByaW5nLT50eHFfY250KSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCisJCXNnbHEgPSBfX2xwZmNfc2xpX2dldF9zZ2xxKHBoYmEpOworCQlpZiAoIXNnbHEpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CisJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCXBpb2NicSA9IGxwZmNfc2xpX3Jpbmd0eF9nZXQocGhiYSwgcHJpbmcpOworCQkJaWYgKCFwaW9jYnEpIHsKKwkJCQkvKiBUaGUgdHhxX2NudCBvdXQgb2Ygc3luYy4gVGhpcyBzaG91bGQKKwkJCQkgKiBuZXZlciBoYXBwZW4KKwkJCQkgKi8KKwkJCQlzZ2xxID0gX19scGZjX2NsZWFyX2FjdGl2ZV9zZ2xxKHBoYmEsCisJCQkJCQkgc2dscS0+c2xpNF94cml0YWcpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CisJCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLAorCQkJCQkiMjgyMyB0eHEgZW1wdHkgYW5kIHR4cV9jbnQgaXMgJWRcbiAiLAorCQkJCQlwcmluZy0+dHhxX2NudCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvKiBUaGUgeHJpIGFuZCBpb2NiIHJlc291cmNlcyBzZWN1cmVkLAorCQkgKiBhdHRlbXB0IHRvIGlzc3VlIHJlcXVlc3QKKwkJICovCisJCXBpb2NicS0+c2xpNF94cml0YWcgPSBzZ2xxLT5zbGk0X3hyaXRhZzsKKwkJaWYgKE5PX1hSSSA9PSBscGZjX3NsaTRfYnBsMnNnbChwaGJhLCBwaW9jYnEsIHNnbHEpKQorCQkJZmFpbF9tc2cgPSAidG8gY29udmVydCBicGwgdG8gc2dsIjsKKwkJZWxzZSBpZiAobHBmY19zbGk0X2lvY2Iyd3FlKHBoYmEsIHBpb2NicSwgJndxZSkpCisJCQlmYWlsX21zZyA9ICJ0byBjb252ZXJ0IGlvY2IgdG8gd3FlIjsKKwkJZWxzZSBpZiAobHBmY19zbGk0X3dxX3B1dChwaGJhLT5zbGk0X2hiYS5lbHNfd3EsICZ3cWUpKQorCQkJZmFpbF9tc2cgPSAiIC0gV3EgaXMgZnVsbCI7CisJCWVsc2UKKwkJCWxwZmNfc2xpX3Jpbmd0eGNtcGxfcHV0KHBoYmEsIHByaW5nLCBwaW9jYnEpOworCisJCWlmIChmYWlsX21zZykgeworCQkJLyogRmFpbGVkIG1lYW5zIHdlIGNhbid0IGlzc3VlIGFuZCBuZWVkIHRvIGNhbmNlbCAqLworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLAorCQkJCQkiMjgyMiBJT0NCIGZhaWxlZCAlcyBpb3RhZyAweCV4ICIKKwkJCQkJInhyaSAweCV4XG4iLAorCQkJCQlmYWlsX21zZywKKwkJCQkJcGlvY2JxLT5pb3RhZywgcGlvY2JxLT5zbGk0X3hyaXRhZyk7CisJCQlsaXN0X2FkZF90YWlsKCZwaW9jYnEtPmxpc3QsICZjb21wbGV0aW9ucyk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKKwl9CisKKwkvKiBDYW5jZWwgYWxsIHRoZSBJT0NCcyB0aGF0IGNhbm5vdCBiZSBpc3N1ZWQgKi8KKwlscGZjX3NsaV9jYW5jZWxfaW9jYnMocGhiYSwgJmNvbXBsZXRpb25zLCBJT1NUQVRfTE9DQUxfUkVKRUNULAorCQkJCUlPRVJSX1NMSV9BQk9SVEVEKTsKKworCXJldHVybiBwcmluZy0+dHhxX2NudDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5oCmluZGV4IGUzNzkyMTUuLmNkNTZkNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuaApAQCAtNDgsNiArNDgsNyBAQAogCS8qIGxwZmNfaW9jYnFzIGFyZSB1c2VkIGluIGRvdWJsZSBsaW5rZWQgbGlzdHMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCBjbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRsaXN0OwogCXVpbnQxNl90IGlvdGFnOyAgICAgICAgIC8qIHByZS1hc3NpZ25lZCBJTyB0YWcgKi8KIAl1aW50MTZfdCBzbGk0X3hyaXRhZzsgICAvKiBwcmUtYXNzaWduZWQgWFJJLCAoT1hJRCkgdGFnLiAqLwogCXN0cnVjdCBscGZjX2NxX2V2ZW50IGNxX2V2ZW50OwpAQCAtNjQsNiArNjUsNyBAQAogI2RlZmluZSBMUEZDX0VYQ0hBTkdFX0JVU1kJMHg0MCAgICAvKiBTTEk0IGhiYSByZXBvcnRlZCBYQiBpbiByZXNwb25zZSAqLwogI2RlZmluZSBMUEZDX1VTRV9GQ1BXUUlEWAkweDgwICAgIC8qIFN1Ym1pdCB0byBzcGVjaWZpZWQgRkNQV1EgaW5kZXggKi8KICNkZWZpbmUgRFNTX1NFQ1VSSVRZX09QCQkweDEwMAkvKiBzZWN1cml0eSBJTyAqLworI2RlZmluZSBMUEZDX0lPX09OX1EJCTB4MjAwCS8qIFRoZSBJTyBpcyBzdGlsbCBvbiB0aGUgVFhDTVBMUSAqLwogCiAjZGVmaW5lIExQRkNfRklQX0VMU19JRF9NQVNLCTB4YzAwMAkvKiBFTFNfSUQgcmFuZ2UgMC0zLCBub24tc2hpZnRlZCBtYXNrICovCiAjZGVmaW5lIExQRkNfRklQX0VMU19JRF9TSElGVAkxNApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGk0LmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaTQuaAppbmRleCA1OGJiNGM4Li5hM2IyNGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaTQuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaTQuaApAQCAtNTEsNiArNTEsOSBAQAogI2RlZmluZSBMUEZDX0ZDT0VfRkNGX0dFVF9GSVJTVAkweEZGRkYKICNkZWZpbmUgTFBGQ19GQ09FX0ZDRl9ORVhUX05PTkUJMHhGRkZGCiAKKyNkZWZpbmUgTFBGQ19GQ09FX05VTExfVklECTB4RkZGCisjZGVmaW5lIExQRkNfRkNPRV9JR05PUkVfVklECTB4RkZGRgorCiAvKiBGaXJzdCAzIGJ5dGVzIG9mIGRlZmF1bHQgRkNGIE1BQyBpcyBzcGVjaWZpZWQgYnkgRkNfTUFQICovCiAjZGVmaW5lIExQRkNfRkNPRV9GQ0ZfTUFDMwkweEZGCiAjZGVmaW5lIExQRkNfRkNPRV9GQ0ZfTUFDNAkweEZGCkBAIC01OCw3ICs2MSw3IEBACiAjZGVmaW5lIExQRkNfRkNPRV9GQ0ZfTUFQMAkweDBFCiAjZGVmaW5lIExQRkNfRkNPRV9GQ0ZfTUFQMQkweEZDCiAjZGVmaW5lIExQRkNfRkNPRV9GQ0ZfTUFQMgkweDAwCi0jZGVmaW5lIExQRkNfRkNPRV9NQVhfUkNWX1NJWkUJMHg1QUMKKyNkZWZpbmUgTFBGQ19GQ09FX01BWF9SQ1ZfU0laRQkweDgwMAogI2RlZmluZSBMUEZDX0ZDT0VfRktBX0FEVl9QRVIJMAogI2RlZmluZSBMUEZDX0ZDT0VfRklQX1BSSU9SSVRZCTB4ODAKIApAQCAtMTYwLDYgKzE2Myw3IEBACiAjZGVmaW5lIEZDRl9SRURJU0NfUEVORAkweDgwIC8qIEZDRiByZWRpc2NvdmVyeSBwZW5kaW5nICovCiAjZGVmaW5lIEZDRl9SRURJU0NfRVZUCTB4MTAwIC8qIEZDRiByZWRpc2NvdmVyeSBldmVudCB0byB3b3JrZXIgdGhyZWFkICovCiAjZGVmaW5lIEZDRl9SRURJU0NfRk9WCTB4MjAwIC8qIFBvc3QgRkNGIHJlZGlzY292ZXJ5IGZhc3QgZmFpbG92ZXIgKi8KKyNkZWZpbmUgRkNGX1JFRElTQ19SUlUJMHg0MDAgLyogUm91bmRyb2JpbiBiaXRtYXAgdXBkYXRlZCAqLwogCXVpbnQzMl90IGFkZHJfbW9kZTsKIAl1aW50MTZfdCBmY2ZfcnJfaW5pdF9pbmR4OwogCXVpbnQzMl90IGVsaWdpYmxlX2ZjZl9jbnQ7CkBAIC0zODIsNiArMzg2LDcgQEAKIAlzdHJ1Y3QgbHBmY19wY19zbGk0X3BhcmFtcyBwY19zbGk0X3BhcmFtczsKIAlzdHJ1Y3QgbXNpeF9lbnRyeSAqbXNpeF9lbnRyaWVzOwogCXVpbnQzMl90IGNmZ19lcW47CisJdWludDMyX3QgbXNpeF92ZWNfbnI7CiAJc3RydWN0IGxwZmNfZmNwX2VxX2hkbCAqZmNwX2VxX2hkbDsgLyogRkNQIHBlci1XUSBoYW5kbGUgKi8KIAkvKiBQb2ludGVycyB0byB0aGUgY29uc3RydWN0ZWQgU0xJNCBxdWV1ZXMgKi8KIAlzdHJ1Y3QgbHBmY19xdWV1ZSAqKmZwX2VxOyAvKiBGYXN0LXBhdGggZXZlbnQgcXVldWUgKi8KQEAgLTUyNCw2ICs1MjksNyBAQAogc3RydWN0IGxwZmNfcnBpX2hkciAqbHBmY19zbGk0X2NyZWF0ZV9ycGlfaGRyKHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY19zbGk0X3JlbW92ZV9ycGlfaGRycyhzdHJ1Y3QgbHBmY19oYmEgKik7CiBpbnQgbHBmY19zbGk0X2FsbG9jX3JwaShzdHJ1Y3QgbHBmY19oYmEgKik7Cit2b2lkIF9fbHBmY19zbGk0X2ZyZWVfcnBpKHN0cnVjdCBscGZjX2hiYSAqLCBpbnQpOwogdm9pZCBscGZjX3NsaTRfZnJlZV9ycGkoc3RydWN0IGxwZmNfaGJhICosIGludCk7CiB2b2lkIGxwZmNfc2xpNF9yZW1vdmVfcnBpcyhzdHJ1Y3QgbHBmY19oYmEgKik7CiB2b2lkIGxwZmNfc2xpNF9hc3luY19ldmVudF9wcm9jKHN0cnVjdCBscGZjX2hiYSAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmgKaW5kZXggNTI5NGMzYS4uZDI4ODMwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmgKQEAgLTE4LDcgKzE4LDcgQEAKICAqIGluY2x1ZGVkIHdpdGggdGhpcyBwYWNrYWdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2RlZmluZSBMUEZDX0RSSVZFUl9WRVJTSU9OICI4LjMuMTIiCisjZGVmaW5lIExQRkNfRFJJVkVSX1ZFUlNJT04gIjguMy4xNSIKICNkZWZpbmUgTFBGQ19EUklWRVJfTkFNRQkJImxwZmMiCiAjZGVmaW5lIExQRkNfU1BfRFJJVkVSX0hBTkRMRVJfTkFNRQkibHBmYzpzcCIKICNkZWZpbmUgTFBGQ19GUF9EUklWRVJfSEFORExFUl9OQU1FCSJscGZjOmZwIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5jCmluZGV4IGFiOTEzNTkuLjE2NTU1MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Zwb3J0LmMKQEAgLTc4Miw3ICs3ODIsNyBAQAogCWludCBpOwogCWlmICh2cG9ydHMgPT0gTlVMTCkKIAkJcmV0dXJuOwotCWZvciAoaSA9IDA7IHZwb3J0c1tpXSAhPSBOVUxMICYmIGkgPD0gcGhiYS0+bWF4X3Zwb3J0czsgaSsrKQorCWZvciAoaSA9IDA7IGkgPD0gcGhiYS0+bWF4X3Zwb3J0cyAmJiB2cG9ydHNbaV0gIT0gTlVMTDsgaSsrKQogCQlzY3NpX2hvc3RfcHV0KGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydHNbaV0pKTsKIAlrZnJlZSh2cG9ydHMpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTIuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyLmgKaW5kZXggZGFkYTBhMS4uNGIxYzJmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTIuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMi5oCkBAIC04LDcgKzgsNyBAQAogICogICAgICAgICAgICAgICAgICBzY2F0dGVyL2dhdGhlciBmb3JtYXRzLgogICogIENyZWF0aW9uIERhdGU6ICBKdW5lIDIxLCAyMDA2CiAgKgotICogIG1waTIuaCBWZXJzaW9uOiAgMDIuMDAuMTQKKyAqICBtcGkyLmggVmVyc2lvbjogIDAyLjAwLjE1CiAgKgogICogIFZlcnNpb24gSGlzdG9yeQogICogIC0tLS0tLS0tLS0tLS0tLQpAQCAtNTcsNiArNTcsMTAgQEAKICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1TSS14IGluZGV4IG1hc2sgYW5kIHNoaWZ0IGZvciBSZXBseSBQb3N0IEhvc3QKICAqICAgICAgICAgICAgICAgICAgICAgIEluZGV4IHJlZ2lzdGVyLgogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZnVuY3Rpb24gY29kZSBmb3IgSG9zdCBCYXNlZCBEaXNjb3ZlcnkgQWN0aW9uLgorICogIDAyLTEwLTEwICAwMi4wMC4xNSAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGRlZmluZSBmb3IgTVBJMl9GVU5DVElPTl9QV1JfTUdNVF9DT05UUk9MLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZGVmaW5lcyBmb3IgcHJvZHVjdC1zcGVjaWZpYyByYW5nZSBvZiBtZXNzYWdlCisgKiAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb2RlcywgMHhGMCB0byAweEZGLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApAQCAtODIsNyArODYsNyBAQAogI2RlZmluZSBNUEkyX1ZFUlNJT05fMDJfMDAgICAgICAgICAgICAgICAgICAoMHgwMjAwKQogCiAvKiB2ZXJzaW9uaW5nIGZvciB0aGlzIE1QSSBoZWFkZXIgc2V0ICovCi0jZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVCAgICAgICAgICAgICgweDBFKQorI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQgICAgICAgICAgICAoMHgwRikKICNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9ERVYgICAgICAgICAgICAgKDB4MDApCiAjZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVF9NQVNLICAgICAgICgweEZGMDApCiAjZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVF9TSElGVCAgICAgICg4KQpAQCAtNDczLDggKzQ3Nyw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb25zCi0qICAgICAgICAgICAgICAweDgwIC0+IDB4OEYgcmVzZXJ2ZWQgZm9yIHByaXZhdGUgbWVzc2FnZSB1c2UgcGVyIHByb2R1Y3QKLSoKICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC01MDYsNiArNTA4LDEzIEBACiAjZGVmaW5lIE1QSTJfRlVOQ1RJT05fUkFJRF9BQ0NFTEVSQVRPUiAgICAgICAgICAgICAgKDB4MkMpIC8qIFJBSUQgQWNjZWxlcmF0b3IqLwogLyogSG9zdCBCYXNlZCBEaXNjb3ZlcnkgQWN0aW9uICovCiAjZGVmaW5lIE1QSTJfRlVOQ1RJT05fSE9TVF9CQVNFRF9ESVNDT1ZFUllfQUNUSU9OICAgKDB4MkYpCisvKiBQb3dlciBNYW5hZ2VtZW50IENvbnRyb2wgKi8KKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9QV1JfTUdNVF9DT05UUk9MICAgICAgICAgICAgICAoMHgzMCkKKy8qIGJlZ2lubmluZyBvZiBwcm9kdWN0LXNwZWNpZmljIHJhbmdlICovCisjZGVmaW5lIE1QSTJfRlVOQ1RJT05fTUlOX1BST0RVQ1RfU1BFQ0lGSUMgICAgICAgICAgKDB4RjApCisvKiBlbmQgb2YgcHJvZHVjdC1zcGVjaWZpYyByYW5nZSAqLworI2RlZmluZSBNUEkyX0ZVTkNUSU9OX01BWF9QUk9EVUNUX1NQRUNJRklDICAgICAgICAgICgweEZGKQorCiAKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9jbmZnLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9jbmZnLmgKaW5kZXggZDRlOWQ2Zi4uZTM3MjhkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfY25mZy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2NuZmcuaApAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgICAgIFRpdGxlOiAgTVBJIENvbmZpZ3VyYXRpb24gbWVzc2FnZXMgYW5kIHBhZ2VzCiAgKiAgQ3JlYXRpb24gRGF0ZTogIE5vdmVtYmVyIDEwLCAyMDA2CiAgKgotICogICAgbXBpMl9jbmZnLmggVmVyc2lvbjogIDAyLjAwLjEzCisgKiAgICBtcGkyX2NuZmcuaCBWZXJzaW9uOiAgMDIuMDAuMTQKICAqCiAgKiAgVmVyc2lvbiBIaXN0b3J5CiAgKiAgLS0tLS0tLS0tLS0tLS0tCkBAIC0xMDksNiArMTA5LDE4IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBFdGhlcm5ldCBjb25maWd1cmF0aW9uIHBhZ2VzLgogICogIDEwLTI4LTA5ICAwMi4wMC4xMyAgQWRkZWQgTVBJMl9JT1VOSVRQQUdFMV9FTkFCTEVfSE9TVF9CQVNFRF9ESVNDT1ZFUlkuCiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBTQVMgUEhZIFBhZ2UgNCBzdHJ1Y3R1cmUgYW5kIGRlZmluZXMuCisgKiAgMDItMTAtMTAgIDAyLjAwLjE0ICBNb2RpZmllZCB0aGUgY29tbWVudHMgZm9yIHRoZSBjb25maWd1cmF0aW9uIHBhZ2UKKyAqICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZXMgdGhhdCBjb250YWluIGFuIGFycmF5IG9mIGRhdGEuIFRoZSBob3N0CisgKiAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgdXNlIHRoZSAiY291bnQiIGZpZWxkIGluIHRoZSBwYWdlIGRhdGEgKGUuZy4gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBOdW1QaHlzIGZpZWxkKSB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiB2YWxpZCBlbGVtZW50cworICogICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGFycmF5LgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQvbW9kaWZpZWQgc29tZSBNUEkyX01GR1BBR0VfREVWSURfU0FTIGRlZmluZXMuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBQb3dlck1hbmFnZW1lbnRDYXBhYmlsaXRpZXMgdG8gSU8gVW5pdCBQYWdlIDcuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBQb3J0V2lkdGhNb2RHcm91cCBmaWVsZCB0bworICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9TQVNfSU9fVU5JVDVfUEhZX1BNX1NFVFRJTkdTLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9DT05GSUdfUEFHRV9TQVNJT1VOSVRfNiBhbmQgcmVsYXRlZCBkZWZpbmVzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9DT05GSUdfUEFHRV9TQVNJT1VOSVRfNyBhbmQgcmVsYXRlZCBkZWZpbmVzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9DT05GSUdfUEFHRV9TQVNJT1VOSVRfOCBhbmQgcmVsYXRlZCBkZWZpbmVzLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApAQCAtMzczLDggKzM4NSw5IEBACiAjZGVmaW5lIE1QSTJfTUZHUEFHRV9ERVZJRF9TQVMyMjA4XzQgICAgICAgICAgICAgICAgKDB4MDA4MykKICNkZWZpbmUgTVBJMl9NRkdQQUdFX0RFVklEX1NBUzIyMDhfNSAgICAgICAgICAgICAgICAoMHgwMDg0KQogI2RlZmluZSBNUEkyX01GR1BBR0VfREVWSURfU0FTMjIwOF82ICAgICAgICAgICAgICAgICgweDAwODUpCi0jZGVmaW5lIE1QSTJfTUZHUEFHRV9ERVZJRF9TQVMyMjA4XzcgICAgICAgICAgICAgICAgKDB4MDA4NikKLSNkZWZpbmUgTVBJMl9NRkdQQUdFX0RFVklEX1NBUzIyMDhfOCAgICAgICAgICAgICAgICAoMHgwMDg3KQorI2RlZmluZSBNUEkyX01GR1BBR0VfREVWSURfU0FTMjMwOF8xICAgICAgICAgICAgICAgICgweDAwODYpCisjZGVmaW5lIE1QSTJfTUZHUEFHRV9ERVZJRF9TQVMyMzA4XzIgICAgICAgICAgICAgICAgKDB4MDA4NykKKyNkZWZpbmUgTVBJMl9NRkdQQUdFX0RFVklEX1NBUzIzMDhfMyAgICAgICAgICAgICAgICAoMHgwMDZFKQogCiAKIC8qIE1hbnVmYWN0dXJpbmcgUGFnZSAwICovCkBAIC01NDAsNyArNTUzLDcgQEAKIAogLyoKICAqIEhvc3QgY29kZSAoZHJpdmVycywgQklPUywgdXRpbGl0aWVzLCBldGMuKSBzaG91bGQgbGVhdmUgdGhpcyBkZWZpbmUgc2V0IHRvCi0gKiBvbmUgYW5kIGNoZWNrIEhlYWRlci5QYWdlTGVuZ3RoIG9yIE51bVBoeXMgYXQgcnVudGltZS4KKyAqIG9uZSBhbmQgY2hlY2sgdGhlIHZhbHVlIHJldHVybmVkIGZvciBOdW1QaHlzIGF0IHJ1bnRpbWUuCiAgKi8KICNpZm5kZWYgTVBJMl9NQU5fUEFHRV81X1BIWV9FTlRSSUVTCiAjZGVmaW5lIE1QSTJfTUFOX1BBR0VfNV9QSFlfRU5UUklFUyAgICAgICAgICgxKQpAQCAtNjE4LDcgKzYzMSw3IEBACiAKIC8qCiAgKiBIb3N0IGNvZGUgKGRyaXZlcnMsIEJJT1MsIHV0aWxpdGllcywgZXRjLikgc2hvdWxkIGxlYXZlIHRoaXMgZGVmaW5lIHNldCB0bwotICogb25lIGFuZCBjaGVjayBOdW1QaHlzIGF0IHJ1bnRpbWUuCisgKiBvbmUgYW5kIGNoZWNrIHRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgTnVtUGh5cyBhdCBydW50aW1lLgogICovCiAjaWZuZGVmIE1QSTJfTUFOUEFHRTdfQ09OTkVDVE9SX0lORk9fTUFYCiAjZGVmaW5lIE1QSTJfTUFOUEFHRTdfQ09OTkVDVE9SX0lORk9fTUFYICAoMSkKQEAgLTczMSw3ICs3NDQsNyBAQAogCiAvKgogICogSG9zdCBjb2RlIChkcml2ZXJzLCBCSU9TLCB1dGlsaXRpZXMsIGV0Yy4pIHNob3VsZCBsZWF2ZSB0aGlzIGRlZmluZSBzZXQgdG8KLSAqIG9uZSBhbmQgY2hlY2sgSGVhZGVyLlBhZ2VMZW5ndGggYXQgcnVudGltZS4KKyAqIG9uZSBhbmQgY2hlY2sgdGhlIHZhbHVlIHJldHVybmVkIGZvciBHUElPQ291bnQgYXQgcnVudGltZS4KICAqLwogI2lmbmRlZiBNUEkyX0lPX1VOSVRfUEFHRV8zX0dQSU9fVkFMX01BWAogI2RlZmluZSBNUEkyX0lPX1VOSVRfUEFHRV8zX0dQSU9fVkFMX01BWCAgICAoMSkKQEAgLTc2MCw3ICs3NzMsNyBAQAogCiAvKgogICogVXBwZXIgbGF5ZXIgY29kZSAoZHJpdmVycywgdXRpbGl0aWVzLCBldGMuKSBzaG91bGQgbGVhdmUgdGhpcyBkZWZpbmUgc2V0IHRvCi0gKiBvbmUgYW5kIGNoZWNrIEhlYWRlci5QYWdlTGVuZ3RoIG9yIE51bURtYUVuZ2luZXMgYXQgcnVudGltZS4KKyAqIG9uZSBhbmQgY2hlY2sgdGhlIHZhbHVlIHJldHVybmVkIGZvciBOdW1EbWFFbmdpbmVzIGF0IHJ1bnRpbWUuCiAgKi8KICNpZm5kZWYgTVBJMl9JT1VOSVRQQUdFNV9ETUFFTkdJTkVfRU5UUklFUwogI2RlZmluZSBNUEkyX0lPVU5JVFBBR0U1X0RNQUVOR0lORV9FTlRSSUVTICAgICAgKDEpCkBAIC04MjMsNyArODM2LDcgQEAKICAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQQ0llV2lkdGg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLwogICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFBDSWVTcGVlZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCiAgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUHJvY2Vzc29yU3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KLSAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFBvd2VyTWFuYWdlbWVudENhcGFiaWxpdGllczsgICAgICAgICAgICAvKiAweDBDICovCiAgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSU9DVGVtcGVyYXR1cmU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KICAgICBVOCAgICAgICAgICAgICAgICAgICAgICBJT0NUZW1wZXJhdHVyZVVuaXRzOyAgICAgICAgICAgICAgICAgICAgLyogMHgxMiAqLwogICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIElPQ1NwZWVkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDEzICovCkBAIC04MzEsNyArODQ0LDcgQEAKIH0gTVBJMl9DT05GSUdfUEFHRV9JT19VTklUXzcsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9JT19VTklUXzcsCiAgIE1waTJJT1VuaXRQYWdlN190LCBNUEkyX1BPSU5URVIgcE1waTJJT1VuaXRQYWdlN190OwogCi0jZGVmaW5lIE1QSTJfSU9VTklUUEFHRTdfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX0lPVU5JVFBBR0U3X1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICAgICAoMHgwMSkKIAogLyogZGVmaW5lcyBmb3IgSU8gVW5pdCBQYWdlIDcgUENJZVdpZHRoIGZpZWxkICovCiAjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTdfUENJRV9XSURUSF9YMSAgICAgICAgICAgICAgKDB4MDEpCkBAIC04NTIsNiArODY1LDE0IEBACiAjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTdfUFNUQVRFX0RJU0FCTEVEICAgICAgICAgICAgKDB4MDEpCiAjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTdfUFNUQVRFX0VOQUJMRUQgICAgICAgICAgICAgKDB4MDIpCiAKKy8qIGRlZmluZXMgZm9yIElPIFVuaXQgUGFnZSA3IFBvd2VyTWFuYWdlbWVudENhcGFiaWxpdGllcyBmaWVsZCAqLworI2RlZmluZSBNUEkyX0lPVU5JVFBBR0U3X1BNQ0FQXzEyXzVfUENUX0lPQ1NQRUVEICAgICgweDAwMDAwNDAwKQorI2RlZmluZSBNUEkyX0lPVU5JVFBBR0U3X1BNQ0FQXzI1XzBfUENUX0lPQ1NQRUVEICAgICgweDAwMDAwMjAwKQorI2RlZmluZSBNUEkyX0lPVU5JVFBBR0U3X1BNQ0FQXzUwXzBfUENUX0lPQ1NQRUVEICAgICgweDAwMDAwMTAwKQorI2RlZmluZSBNUEkyX0lPVU5JVFBBR0U3X1BNQ0FQX1BDSUVfV0lEVEhfQ0hBTkdFICAgICgweDAwMDAwMDA4KQorI2RlZmluZSBNUEkyX0lPVU5JVFBBR0U3X1BNQ0FQX1BDSUVfU1BFRURfQ0hBTkdFICAgICgweDAwMDAwMDA0KQorCisKIC8qIGRlZmluZXMgZm9yIElPIFVuaXQgUGFnZSA3IElPQ1RlbXBlcmF0dXJlVW5pdHMgZmllbGQgKi8KICNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFN19JT0NfVEVNUF9OT1RfUFJFU0VOVCAgICAgICAoMHgwMCkKICNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFN19JT0NfVEVNUF9GQUhSRU5IRUlUICAgICAgICAoMHgwMSkKQEAgLTExOTUsNyArMTIxNiw3IEBACiAKIC8qCiAgKiBIb3N0IGNvZGUgKGRyaXZlcnMsIEJJT1MsIHV0aWxpdGllcywgZXRjLikgc2hvdWxkIGxlYXZlIHRoaXMgZGVmaW5lIHNldCB0bwotICogb25lIGFuZCBjaGVjayBIZWFkZXIuUGFnZUxlbmd0aCBvciBOdW1QaHlzIGF0IHJ1bnRpbWUuCisgKiBvbmUgYW5kIGNoZWNrIHRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgTnVtUGh5cyBhdCBydW50aW1lLgogICovCiAjaWZuZGVmIE1QSTJfQklPU19QQUdFXzRfUEhZX0VOVFJJRVMKICNkZWZpbmUgTVBJMl9CSU9TX1BBR0VfNF9QSFlfRU5UUklFUyAgICAgICAgKDEpCkBAIC0xMjY5LDcgKzEyOTAsNyBAQAogCiAvKgogICogSG9zdCBjb2RlIChkcml2ZXJzLCBCSU9TLCB1dGlsaXRpZXMsIGV0Yy4pIHNob3VsZCBsZWF2ZSB0aGlzIGRlZmluZSBzZXQgdG8KLSAqIG9uZSBhbmQgY2hlY2sgSGVhZGVyLlBhZ2VMZW5ndGggYXQgcnVudGltZS4KKyAqIG9uZSBhbmQgY2hlY2sgdGhlIHZhbHVlIHJldHVybmVkIGZvciBOdW1QaHlzRGlza3MgYXQgcnVudGltZS4KICAqLwogI2lmbmRlZiBNUEkyX1JBSURfVk9MX1BBR0VfMF9QSFlTRElTS19NQVgKICNkZWZpbmUgTVBJMl9SQUlEX1ZPTF9QQUdFXzBfUEhZU0RJU0tfTUFYICAgICAgICgxKQpAQCAtMTQ3MSw3ICsxNDkyLDcgQEAKIAogLyoKICAqIEhvc3QgY29kZSAoZHJpdmVycywgQklPUywgdXRpbGl0aWVzLCBldGMuKSBzaG91bGQgbGVhdmUgdGhpcyBkZWZpbmUgc2V0IHRvCi0gKiBvbmUgYW5kIGNoZWNrIEhlYWRlci5QYWdlTGVuZ3RoIG9yIE51bVBoeXNEaXNrUGF0aHMgYXQgcnVudGltZS4KKyAqIG9uZSBhbmQgY2hlY2sgdGhlIHZhbHVlIHJldHVybmVkIGZvciBOdW1QaHlzRGlza1BhdGhzIGF0IHJ1bnRpbWUuCiAgKi8KICNpZm5kZWYgTVBJMl9SQUlEX1BIWVNfRElTSzFfUEFUSF9NQVgKICNkZWZpbmUgTVBJMl9SQUlEX1BIWVNfRElTSzFfUEFUSF9NQVggICAoMSkKQEAgLTE2MzMsNyArMTY1NCw3IEBACiAKIC8qCiAgKiBIb3N0IGNvZGUgKGRyaXZlcnMsIEJJT1MsIHV0aWxpdGllcywgZXRjLikgc2hvdWxkIGxlYXZlIHRoaXMgZGVmaW5lIHNldCB0bwotICogb25lIGFuZCBjaGVjayBIZWFkZXIuRXh0UGFnZUxlbmd0aCBvciBOdW1QaHlzIGF0IHJ1bnRpbWUuCisgKiBvbmUgYW5kIGNoZWNrIHRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgTnVtUGh5cyBhdCBydW50aW1lLgogICovCiAjaWZuZGVmIE1QSTJfU0FTX0lPVU5JVDBfUEhZX01BWAogI2RlZmluZSBNUEkyX1NBU19JT1VOSVQwX1BIWV9NQVggICAgICAgICgxKQpAQCAtMTcwNCw3ICsxNzI1LDcgQEAKIAogLyoKICAqIEhvc3QgY29kZSAoZHJpdmVycywgQklPUywgdXRpbGl0aWVzLCBldGMuKSBzaG91bGQgbGVhdmUgdGhpcyBkZWZpbmUgc2V0IHRvCi0gKiBvbmUgYW5kIGNoZWNrIEhlYWRlci5FeHRQYWdlTGVuZ3RoIG9yIE51bVBoeXMgYXQgcnVudGltZS4KKyAqIG9uZSBhbmQgY2hlY2sgdGhlIHZhbHVlIHJldHVybmVkIGZvciBOdW1QaHlzIGF0IHJ1bnRpbWUuCiAgKi8KICNpZm5kZWYgTVBJMl9TQVNfSU9VTklUMV9QSFlfTUFYCiAjZGVmaW5lIE1QSTJfU0FTX0lPVU5JVDFfUEhZX01BWCAgICAgICAgKDEpCkBAIC0xNzk1LDcgKzE4MTYsNyBAQAogCiAvKgogICogSG9zdCBjb2RlIChkcml2ZXJzLCBCSU9TLCB1dGlsaXRpZXMsIGV0Yy4pIHNob3VsZCBsZWF2ZSB0aGlzIGRlZmluZSBzZXQgdG8KLSAqIGZvdXIgYW5kIGNoZWNrIEhlYWRlci5FeHRQYWdlTGVuZ3RoIG9yIE51bVBoeXMgYXQgcnVudGltZS4KKyAqIG9uZSBhbmQgY2hlY2sgdGhlIHZhbHVlIHJldHVybmVkIGZvciBOdW1QaHlzIGF0IHJ1bnRpbWUuCiAgKi8KICNpZm5kZWYgTVBJMl9TQVNfSU9VTklUNF9QSFlfTUFYCiAjZGVmaW5lIE1QSTJfU0FTX0lPVU5JVDRfUEhZX01BWCAgICAgICAgKDQpCkBAIC0xODMzLDcgKzE4NTQsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCBfTVBJMl9TQVNfSU9fVU5JVDVfUEhZX1BNX1NFVFRJTkdTIHsKICAgICBVOCAgICAgICAgICBDb250cm9sRmxhZ3M7ICAgICAgICAgICAgICAgLyogMHgwMCAqLwotICAgIFU4ICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgUG9ydFdpZHRoTW9kR3JvdXA7ICAgICAgICAgIC8qIDB4MDEgKi8KICAgICBVMTYgICAgICAgICBJbmFjdGl2aXR5VGltZXJFeHBvbmVudDsgICAgLyogMHgwMiAqLwogICAgIFU4ICAgICAgICAgIFNBVEFQYXJ0aWFsVGltZW91dDsgICAgICAgICAvKiAweDA0ICovCiAgICAgVTggICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MDUgKi8KQEAgLTE4NTMsNiArMTg3NCw5IEBACiAjZGVmaW5lIE1QSTJfU0FTSU9VTklUNV9DT05UUk9MX1NBVEFfU0xVTUJFUl9FTkFCTEUgICAgICgweDAyKQogI2RlZmluZSBNUEkyX1NBU0lPVU5JVDVfQ09OVFJPTF9TQVRBX1BBUlRJQUxfRU5BQkxFICAgICAoMHgwMSkKIAorLyogZGVmaW5lcyBmb3IgUG9ydFdpZHRoTW9kZUdyb3VwIGZpZWxkICovCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUNV9QV01HX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICgweEZGKQorCiAvKiBkZWZpbmVzIGZvciBJbmFjdGl2aXR5VGltZXJFeHBvbmVudCBmaWVsZCAqLwogI2RlZmluZSBNUEkyX1NBU0lPVU5JVDVfSVRFX01BU0tfU0FTX1NMVU1CRVIgICAgICAgICAgICAoMHg3MDAwKQogI2RlZmluZSBNUEkyX1NBU0lPVU5JVDVfSVRFX1NISUZUX1NBU19TTFVNQkVSICAgICAgICAgICAoMTIpCkBAIC0xODc0LDcgKzE4OTgsNyBAQAogCiAvKgogICogSG9zdCBjb2RlIChkcml2ZXJzLCBCSU9TLCB1dGlsaXRpZXMsIGV0Yy4pIHNob3VsZCBsZWF2ZSB0aGlzIGRlZmluZSBzZXQgdG8KLSAqIG9uZSBhbmQgY2hlY2sgSGVhZGVyLkV4dFBhZ2VMZW5ndGggb3IgTnVtUGh5cyBhdCBydW50aW1lLgorICogb25lIGFuZCBjaGVjayB0aGUgdmFsdWUgcmV0dXJuZWQgZm9yIE51bVBoeXMgYXQgcnVudGltZS4KICAqLwogI2lmbmRlZiBNUEkyX1NBU19JT1VOSVQ1X1BIWV9NQVgKICNkZWZpbmUgTVBJMl9TQVNfSU9VTklUNV9QSFlfTUFYICAgICAgICAoMSkKQEAgLTE4OTIsNyArMTkxNiwxMzIgQEAKICAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX1NBU0lPVU5JVF81LAogICBNcGkyU2FzSU9Vbml0UGFnZTVfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2FzSU9Vbml0UGFnZTVfdDsKIAotI2RlZmluZSBNUEkyX1NBU0lPVU5JVFBBR0U1X1BBR0VWRVJTSU9OICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVRQQUdFNV9QQUdFVkVSU0lPTiAgICAgKDB4MDEpCisKKworLyogU0FTIElPIFVuaXQgUGFnZSA2ICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NBU19JT19VTklUNl9QT1JUX1dJRFRIX01PRF9HUk9VUF9TVEFUVVMgeworICAgIFU4ICAgICAgICAgIEN1cnJlbnRTdGF0dXM7ICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgQ3VycmVudE1vZHVsYXRpb247ICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICBDdXJyZW50VXRpbGl6YXRpb247ICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTMyICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KK30gTVBJMl9TQVNfSU9fVU5JVDZfUE9SVF9XSURUSF9NT0RfR1JPVVBfU1RBVFVTLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0FTX0lPX1VOSVQ2X1BPUlRfV0lEVEhfTU9EX0dST1VQX1NUQVRVUywKKyAgTXBpMlNhc0lPVW5pdDZQb3J0V2lkdGhNb2RHcm91cFN0YXR1c190LAorICBNUEkyX1BPSU5URVIgcE1waTJTYXNJT1VuaXQ2UG9ydFdpZHRoTW9kR3JvdXBTdGF0dXNfdDsKKworLyogZGVmaW5lcyBmb3IgQ3VycmVudFN0YXR1cyBmaWVsZCAqLworI2RlZmluZSBNUEkyX1NBU0lPVU5JVDZfU1RBVFVTX1VOQVZBSUxBQkxFICAgICAgICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDZfU1RBVFVTX1VOQ09ORklHVVJFRCAgICAgICAgICAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDZfU1RBVFVTX0lOVkFMSURfQ09ORklHICAgICAgICAgICAgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDZfU1RBVFVTX0xJTktfRE9XTiAgICAgICAgICAgICAgICAgICAgICAgICgweDAzKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDZfU1RBVFVTX09CU0VSVkFUSU9OX09OTFkgICAgICAgICAgICAgICAgICgweDA0KQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDZfU1RBVFVTX0lOQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICgweDA1KQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDZfU1RBVFVTX0FDVElWRV9JT1VOSVQgICAgICAgICAgICAgICAgICAgICgweDA2KQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDZfU1RBVFVTX0FDVElWRV9IT1NUICAgICAgICAgICAgICAgICAgICAgICgweDA3KQorCisvKiBkZWZpbmVzIGZvciBDdXJyZW50TW9kdWxhdGlvbiBmaWVsZCAqLworI2RlZmluZSBNUEkyX1NBU0lPVU5JVDZfTU9EVUxBVElPTl8yNV9QRVJDRU5UICAgICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDZfTU9EVUxBVElPTl81MF9QRVJDRU5UICAgICAgICAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDZfTU9EVUxBVElPTl83NV9QRVJDRU5UICAgICAgICAgICAgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDZfTU9EVUxBVElPTl8xMDBfUEVSQ0VOVCAgICAgICAgICAgICAgICAgICgweDAzKQorCisvKgorICogSG9zdCBjb2RlIChkcml2ZXJzLCBCSU9TLCB1dGlsaXRpZXMsIGV0Yy4pIHNob3VsZCBsZWF2ZSB0aGlzIGRlZmluZSBzZXQgdG8KKyAqIG9uZSBhbmQgY2hlY2sgdGhlIHZhbHVlIHJldHVybmVkIGZvciBOdW1Hcm91cHMgYXQgcnVudGltZS4KKyAqLworI2lmbmRlZiBNUEkyX1NBU19JT1VOSVQ2X0dST1VQX01BWAorI2RlZmluZSBNUEkyX1NBU19JT1VOSVQ2X0dST1VQX01BWCAgICAgICgxKQorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX1NBU0lPVU5JVF82IHsKKyAgICBNUEkyX0NPTkZJR19FWFRFTkRFRF9QQUdFX0hFQURFUiAgICBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1Hcm91cHM7ICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDExICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgIC8qIDB4MTIgKi8KKyAgICBNUEkyX1NBU19JT19VTklUNl9QT1JUX1dJRFRIX01PRF9HUk9VUF9TVEFUVVMKKwlQb3J0V2lkdGhNb2R1bGF0aW9uR3JvdXBTdGF0dXNbTVBJMl9TQVNfSU9VTklUNl9HUk9VUF9NQVhdOyAvKiAweDE0ICovCit9IE1QSTJfQ09ORklHX1BBR0VfU0FTSU9VTklUXzYsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9TQVNJT1VOSVRfNiwKKyAgTXBpMlNhc0lPVW5pdFBhZ2U2X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNhc0lPVW5pdFBhZ2U2X3Q7CisKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVRQQUdFNl9QQUdFVkVSU0lPTiAgICAgKDB4MDApCisKKworLyogU0FTIElPIFVuaXQgUGFnZSA3ICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NBU19JT19VTklUN19QT1JUX1dJRFRIX01PRF9HUk9VUF9TRVRUSU5HUyB7CisgICAgVTggICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFUxNiAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgVGhyZXNob2xkNzVQY3Q7ICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICBUaHJlc2hvbGQ1MFBjdDsgICAgICAgICAgICAgLyogMHgwNSAqLworICAgIFU4ICAgICAgICAgIFRocmVzaG9sZDI1UGN0OyAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KK30gTVBJMl9TQVNfSU9fVU5JVDdfUE9SVF9XSURUSF9NT0RfR1JPVVBfU0VUVElOR1MsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TQVNfSU9fVU5JVDdfUE9SVF9XSURUSF9NT0RfR1JPVVBfU0VUVElOR1MsCisgIE1waTJTYXNJT1VuaXQ3UG9ydFdpZHRoTW9kR3JvdXBTZXR0aW5nc190LAorICBNUEkyX1BPSU5URVIgcE1waTJTYXNJT1VuaXQ3UG9ydFdpZHRoTW9kR3JvdXBTZXR0aW5nc190OworCisvKiBkZWZpbmVzIGZvciBGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX1NBU0lPVU5JVDdfRkxBR1NfRU5BQkxFX1BPUlRfV0lEVEhfTU9EVUxBVElPTiAgKDB4MDEpCisKKworLyoKKyAqIEhvc3QgY29kZSAoZHJpdmVycywgQklPUywgdXRpbGl0aWVzLCBldGMuKSBzaG91bGQgbGVhdmUgdGhpcyBkZWZpbmUgc2V0IHRvCisgKiBvbmUgYW5kIGNoZWNrIHRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgTnVtR3JvdXBzIGF0IHJ1bnRpbWUuCisgKi8KKyNpZm5kZWYgTVBJMl9TQVNfSU9VTklUN19HUk9VUF9NQVgKKyNkZWZpbmUgTVBJMl9TQVNfSU9VTklUN19HUk9VUF9NQVggICAgICAoMSkKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9TQVNJT1VOSVRfNyB7CisgICAgTVBJMl9DT05GSUdfRVhURU5ERURfUEFHRV9IRUFERVIgICAgICAgICAgICBIZWFkZXI7ICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsaW5nSW50ZXJ2YWw7ICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luZG93TGVuZ3RoOyAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgLyogMHgwQyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAvKiAweDEwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1Hcm91cHM7ICAgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgLyogMHgxNSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAvKiAweDE2ICovCisgICAgTVBJMl9TQVNfSU9fVU5JVDdfUE9SVF9XSURUSF9NT0RfR1JPVVBfU0VUVElOR1MKKwlQb3J0V2lkdGhNb2R1bGF0aW9uR3JvdXBTZXR0aW5nc1tNUEkyX1NBU19JT1VOSVQ3X0dST1VQX01BWF07IC8qIDB4MTggKi8KK30gTVBJMl9DT05GSUdfUEFHRV9TQVNJT1VOSVRfNywKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX1NBU0lPVU5JVF83LAorICBNcGkyU2FzSU9Vbml0UGFnZTdfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2FzSU9Vbml0UGFnZTdfdDsKKworI2RlZmluZSBNUEkyX1NBU0lPVU5JVFBBR0U3X1BBR0VWRVJTSU9OICAgICAoMHgwMCkKKworCisvKiBTQVMgSU8gVW5pdCBQYWdlIDggKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfU0FTSU9VTklUXzggeworICAgIE1QSTJfQ09ORklHX0VYVEVOREVEX1BBR0VfSEVBREVSICAgIEhlYWRlcjsJCQkvKiAweDAwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOwkJLyogMHgwOCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyTWFuYWdlbWVudENhcGFiaWxpdGllczsvKiAweDBDICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOwkJLyogMHgxMCAqLworfSBNUEkyX0NPTkZJR19QQUdFX1NBU0lPVU5JVF84LAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfU0FTSU9VTklUXzgsCisgIE1waTJTYXNJT1VuaXRQYWdlOF90LCBNUEkyX1BPSU5URVIgcE1waTJTYXNJT1VuaXRQYWdlOF90OworCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUUEFHRThfUEFHRVZFUlNJT04gICAgICgweDAwKQorCisvKiBkZWZpbmVzIGZvciBQb3dlck1hbmFnZW1lbnRDYXBhYmlsaXRpZXMgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQ4X1BNX0hPU1RfUE9SVF9XSURUSF9NT0QgICAgICAgICAgKDB4MDAwMDAxMDAwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDhfUE1fSE9TVF9TQVNfU0xVTUJFUl9NT0RFICAgICAgICAoMHgwMDAwMDA4MDApCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUOF9QTV9IT1NUX1NBU19QQVJUSUFMX01PREUgICAgICAgICgweDAwMDAwMDQwMCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQ4X1BNX0hPU1RfU0FUQV9TTFVNQkVSX01PREUgICAgICAgKDB4MDAwMDAwMjAwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDhfUE1fSE9TVF9TQVRBX1BBUlRJQUxfTU9ERSAgICAgICAoMHgwMDAwMDAxMDApCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUOF9QTV9JT1VOSVRfUE9SVF9XSURUSF9NT0QgICAgICAgICgweDAwMDAwMDAxMCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQ4X1BNX0lPVU5JVF9TQVNfU0xVTUJFUl9NT0RFICAgICAgKDB4MDAwMDAwMDA4KQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDhfUE1fSU9VTklUX1NBU19QQVJUSUFMX01PREUgICAgICAoMHgwMDAwMDAwMDQpCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUOF9QTV9JT1VOSVRfU0FUQV9TTFVNQkVSX01PREUgICAgICgweDAwMDAwMDAwMikKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQ4X1BNX0lPVU5JVF9TQVRBX1BBUlRJQUxfTU9ERSAgICAgKDB4MDAwMDAwMDAxKQogCiAKIApAQCAtMjE4Miw3ICsyMzMxLDcgQEAKIAogLyoKICAqIEhvc3QgY29kZSAoZHJpdmVycywgQklPUywgdXRpbGl0aWVzLCBldGMuKSBzaG91bGQgbGVhdmUgdGhpcyBkZWZpbmUgc2V0IHRvCi0gKiBvbmUgYW5kIGNoZWNrIEhlYWRlci5FeHRQYWdlTGVuZ3RoIG9yIE51bVBoeUV2ZW50cyBhdCBydW50aW1lLgorICogb25lIGFuZCBjaGVjayB0aGUgdmFsdWUgcmV0dXJuZWQgZm9yIE51bVBoeUV2ZW50cyBhdCBydW50aW1lLgogICovCiAjaWZuZGVmIE1QSTJfU0FTUEhZMl9QSFlfRVZFTlRfTUFYCiAjZGVmaW5lIE1QSTJfU0FTUEhZMl9QSFlfRVZFTlRfTUFYICAgICAgKDEpCkBAIC0yMjc0LDcgKzI0MjMsNyBAQAogCiAvKgogICogSG9zdCBjb2RlIChkcml2ZXJzLCBCSU9TLCB1dGlsaXRpZXMsIGV0Yy4pIHNob3VsZCBsZWF2ZSB0aGlzIGRlZmluZSBzZXQgdG8KLSAqIG9uZSBhbmQgY2hlY2sgSGVhZGVyLkV4dFBhZ2VMZW5ndGggb3IgTnVtUGh5RXZlbnRzIGF0IHJ1bnRpbWUuCisgKiBvbmUgYW5kIGNoZWNrIHRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgTnVtUGh5RXZlbnRzIGF0IHJ1bnRpbWUuCiAgKi8KICNpZm5kZWYgTVBJMl9TQVNQSFkzX1BIWV9FVkVOVF9NQVgKICNkZWZpbmUgTVBJMl9TQVNQSFkzX1BIWV9FVkVOVF9NQVggICAgICAoMSkKQEAgLTIzODUsNyArMjUzNCw3IEBACiAKIC8qCiAgKiBIb3N0IGNvZGUgKGRyaXZlcnMsIEJJT1MsIHV0aWxpdGllcywgZXRjLikgc2hvdWxkIGxlYXZlIHRoaXMgZGVmaW5lIHNldCB0bwotICogb25lIGFuZCBjaGVjayBIZWFkZXIuRXh0UGFnZUxlbmd0aCBvciBOdW1QaHlzIGF0IHJ1bnRpbWUuCisgKiBvbmUgYW5kIGNoZWNrIHRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgTnVtTG9nRW50cmllcyBhdCBydW50aW1lLgogICovCiAjaWZuZGVmIE1QSTJfTE9HXzBfTlVNX0xPR19FTlRSSUVTCiAjZGVmaW5lIE1QSTJfTE9HXzBfTlVNX0xPR19FTlRSSUVTICAgICAgICAgICgxKQpAQCAtMjQzNSw3ICsyNTg0LDcgQEAKIAogLyoKICAqIEhvc3QgY29kZSAoZHJpdmVycywgQklPUywgdXRpbGl0aWVzLCBldGMuKSBzaG91bGQgbGVhdmUgdGhpcyBkZWZpbmUgc2V0IHRvCi0gKiBvbmUgYW5kIGNoZWNrIEhlYWRlci5FeHRQYWdlTGVuZ3RoIG9yIE51bVBoeXMgYXQgcnVudGltZS4KKyAqIG9uZSBhbmQgY2hlY2sgdGhlIHZhbHVlIHJldHVybmVkIGZvciBOdW1FbGVtZW50cyBhdCBydW50aW1lLgogICovCiAjaWZuZGVmIE1QSTJfUkFJRENPTkZJRzBfTUFYX0VMRU1FTlRTCiAjZGVmaW5lIE1QSTJfUkFJRENPTkZJRzBfTUFYX0VMRU1FTlRTICAgICAgICgxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW5pdC5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW5pdC5oCmluZGV4IDIyMGJmNjUuLmM0Yzk5ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2luaXQuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pbml0LmgKQEAgLTYsNyArNiw3IEBACiAgKiAgICAgICAgICBUaXRsZTogIE1QSSBTQ1NJIGluaXRpYXRvciBtb2RlIG1lc3NhZ2VzIGFuZCBzdHJ1Y3R1cmVzCiAgKiAgQ3JlYXRpb24gRGF0ZTogIEp1bmUgMjMsIDIwMDYKICAqCi0gKiAgICBtcGkyX2luaXQuaCBWZXJzaW9uOiAgMDIuMDAuMDgKKyAqICAgIG1waTJfaW5pdC5oIFZlcnNpb246ICAwMi4wMC4wOQogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTMxLDYgKzMxLDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgIGJvdGggU0NTSSBJTyBFcnJvciBSZXBseSBhbmQgU0NTSSBUYXNrIE1hbmFnZW1lbnQgUmVwbHkuCiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBSZXNwb25zZUluZm8gZmllbGQgdG8gTVBJMl9TQ1NJX1RBU0tfTUFOQUdFX1JFUExZLgogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX1RNX09WRVJMQVBQRURfVEFHIGRlZmluZS4KKyAqICAwMi0xMC0xMCAgMDIuMDAuMDkgIFJlbW92ZWQgdW51c2VkIHN0cnVjdHVyZSB0aGF0IGhhZCAiI2lmIDAiIGFyb3VuZCBpdC4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTU3LDIwICs1OCw2IEBACiB9IE1QSTJfU0NTSV9JT19DREJfRUVEUDMyLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0NTSV9JT19DREJfRUVEUDMyLAogICBNcGkyU2NzaUlvQ2RiRWVkcDMyX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNjc2lJb0NkYkVlZHAzMl90OwogCi0vKiBUQkQ6IEkgZG9uJ3QgdGhpbmsgdGhpcyBpcyBuZWVkZWQgZm9yIE1QSTIvR2VuMiAqLwotI2lmIDAKLXR5cGVkZWYgc3RydWN0Ci17Ci0gICAgVTggICAgICAgICAgICAgICAgICAgICAgQ0RCWzE2XTsgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KLSAgICBVMzIgICAgICAgICAgICAgICAgICAgICBEYXRhTGVuZ3RoOyAgICAgICAgICAgICAgICAgLyogMHgxMCAqLwotICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFByaW1hcnlSZWZlcmVuY2VUYWc7ICAgICAgICAvKiAweDE0ICovCi0gICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUHJpbWFyeUFwcGxpY2F0aW9uVGFnOyAgICAgIC8qIDB4MTggKi8KLSAgICBVMTYgICAgICAgICAgICAgICAgICAgICBQcmltYXJ5QXBwbGljYXRpb25UYWdNYXNrOyAgLyogMHgxQSAqLwotICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFRyYW5zZmVyTGVuZ3RoOyAgICAgICAgICAgICAvKiAweDFDICovCi19IE1QSTJfU0NTSV9JTzMyX0NEQl9FRURQMTYsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TQ1NJX0lPMzJfQ0RCX0VFRFAxNiwKLSAgTXBpMlNjc2lJbzMyQ2RiRWVkcDE2X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNjc2lJbzMyQ2RiRWVkcDE2X3Q7Ci0jZW5kaWYKLQogdHlwZWRlZiB1bmlvbgogewogICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENEQjMyWzMyXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2lvYy5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW9jLmgKaW5kZXggZjE4ZjExNC4uNDk1YmVkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW9jLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW9jLmgKQEAgLTYsNyArNiw3IEBACiAgKiAgICAgICAgICBUaXRsZTogIE1QSSBJT0MsIFBvcnQsIEV2ZW50LCBGVyBEb3dubG9hZCwgYW5kIEZXIFVwbG9hZCBtZXNzYWdlcwogICogIENyZWF0aW9uIERhdGU6ICBPY3RvYmVyIDExLCAyMDA2CiAgKgotICogIG1waTJfaW9jLmggVmVyc2lvbjogIDAyLjAwLjEzCisgKiAgbXBpMl9pb2MuaCBWZXJzaW9uOiAgMDIuMDAuMTQKICAqCiAgKiAgVmVyc2lvbiBIaXN0b3J5CiAgKiAgLS0tLS0tLS0tLS0tLS0tCkBAIC05OCw2ICs5OCw5IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAoTVBJMl9GV19IRUFERVJfUElEXykuCiAgKiAgICAgICAgICAgICAgICAgICAgICBNb2RpZmllZCB2YWx1ZXMgZm9yIFNBUyBQcm9kdWN0SUQgRmFtaWx5CiAgKiAgICAgICAgICAgICAgICAgICAgICAoTVBJMl9GV19IRUFERVJfUElEX0ZBTUlMWV8pLgorICogIDAyLTEwLTEwICAwMi4wMC4xNCAgQWRkZWQgU0FTIFF1aWVzY2UgRXZlbnQgc3RydWN0dXJlIGFuZCBkZWZpbmVzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgUG93ZXJNYW5hZ2VtZW50Q29udHJvbCBSZXF1ZXN0IHN0cnVjdHVyZXMgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApAQCAtNDY5LDYgKzQ3Miw3IEBACiAjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1BIWV9DT1VOVEVSICAgICAgICAgICAgICAgICAgKDB4MDAyMikKICNkZWZpbmUgTVBJMl9FVkVOVF9HUElPX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAoMHgwMDIzKQogI2RlZmluZSBNUEkyX0VWRU5UX0hPU1RfQkFTRURfRElTQ09WRVJZX1BIWSAgICAgICAgICgweDAwMjQpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1FVSUVTQ0UgICAgICAgICAgICAgICAgICAgICAgKDB4MDAyNSkKIAogCiAvKiBMb2cgRW50cnkgQWRkZWQgRXZlbnQgZGF0YSAqLwpAQCAtODk1LDYgKzg5OSwyMiBAQAogICogKi8KIAogCisvKiBTQVMgUXVpZXNjZSBFdmVudCBkYXRhICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0VWRU5UX0RBVEFfU0FTX1FVSUVTQ0UgeworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlYXNvbkNvZGU7ICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCit9IE1QSTJfRVZFTlRfREFUQV9TQVNfUVVJRVNDRSwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0VWRU5UX0RBVEFfU0FTX1FVSUVTQ0UsCisgIE1waTJFdmVudERhdGFTYXNRdWllc2NlX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50RGF0YVNhc1F1aWVzY2VfdDsKKworLyogU0FTIFF1aWVzY2UgRXZlbnQgZGF0YSBSZWFzb25Db2RlIHZhbHVlcyAqLworI2RlZmluZSBNUEkyX0VWRU5UX1NBU19RVUlFU0NFX1JDX1NUQVJURUQgICAgICAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1FVSUVTQ0VfUkNfQ09NUExFVEVEICAgICAgICAgICAgICAgICAoMHgwMikKKworCiAvKiBIb3N0IEJhc2VkIERpc2NvdmVyeSBQaHkgRXZlbnQgZGF0YSAqLwogCiB0eXBlZGVmIHN0cnVjdCBfTVBJMl9FVkVOVF9IQkRfUEhZX1NBUyB7CkBAIC0xMDA2LDYgKzEwMjYsNyBAQAogI2RlZmluZSBNUEkyX0ZXX0RPV05MT0FEX0lUWVBFX0NPTkZJR18xICAgICAgICAgICAgICgweDA3KQogI2RlZmluZSBNUEkyX0ZXX0RPV05MT0FEX0lUWVBFX0NPTkZJR18yICAgICAgICAgICAgICgweDA4KQogI2RlZmluZSBNUEkyX0ZXX0RPV05MT0FEX0lUWVBFX01FR0FSQUlEICAgICAgICAgICAgICgweDA5KQorI2RlZmluZSBNUEkyX0ZXX0RPV05MT0FEX0lUWVBFX0NPTVBMRVRFICAgICAgICAgICAgICgweDBBKQogI2RlZmluZSBNUEkyX0ZXX0RPV05MT0FEX0lUWVBFX0NPTU1PTl9CT09UX0JMT0NLICAgICgweDBCKQogCiAvKiBGV0Rvd25sb2FkIFRyYW5zYWN0aW9uQ29udGV4dCBFbGVtZW50ICovCkBAIC0xMTgzLDcgKzEyMDQsNiBAQAogCiAjZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9QUk9EX01BU0sgICAgICAgICAgICAgICAgICAgICgweDBGMDApCiAjZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9QUk9EX0EgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDApCi0jZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9QUk9EX01BU0sgICAgICAgICAgICAgICAgICAgICgweDBGMDApCiAjZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9QUk9EX1RBUkdFVF9JTklUSUFUT1JfU0NTSSAgICgweDAyMDApCiAjZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9QUk9EX0lSX1NDU0kgICAgICAgICAgICAgICAgICgweDA3MDApCiAKQEAgLTE0MDcsNSArMTQyNywxMDAgQEAKICNkZWZpbmUgTVBJMl9JTklUX0lNQUdFX1JFU0VUVkVDVE9SX09GRlNFVCAgICAgICgweDE0KQogCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBQb3dlck1hbmFnZW1lbnRDb250cm9sIG1lc3NhZ2UKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBvd2VyTWFuYWdlbWVudENvbnRyb2wgUmVxdWVzdCBtZXNzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9QV1JfTUdNVF9DT05UUk9MX1JFUVVFU1QgeworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZlYXR1cmU7ICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDaGFpbk9mZnNldDsgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUGFyYW1ldGVyMTsgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQYXJhbWV0ZXIyOyAgICAgICAgICAgICAgICAgLyogMHgwRCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFBhcmFtZXRlcjM7ICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUGFyYW1ldGVyNDsgICAgICAgICAgICAgICAgIC8qIDB4MEYgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNjsgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCit9IE1QSTJfUFdSX01HTVRfQ09OVFJPTF9SRVFVRVNULCBNUEkyX1BPSU5URVIgUFRSX01QSTJfUFdSX01HTVRfQ09OVFJPTF9SRVFVRVNULAorICBNcGkyUHdyTWdtdENvbnRyb2xSZXF1ZXN0X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlB3ck1nbXRDb250cm9sUmVxdWVzdF90OworCisvKiBkZWZpbmVzIGZvciB0aGUgRmVhdHVyZSBmaWVsZCAqLworI2RlZmluZSBNUEkyX1BNX0NPTlRST0xfRkVBVFVSRV9EQV9QSFlfUE9XRVJfQ09ORCAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9QTV9DT05UUk9MX0ZFQVRVUkVfUE9SVF9XSURUSF9NT0RVTEFUSU9OICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfUE1fQ09OVFJPTF9GRUFUVVJFX1BDSUVfTElOSyAgICAgICAgICAgICAgICgweDAzKQorI2RlZmluZSBNUEkyX1BNX0NPTlRST0xfRkVBVFVSRV9JT0NfU1BFRUQgICAgICAgICAgICAgICAoMHgwNCkKKyNkZWZpbmUgTVBJMl9QTV9DT05UUk9MX0ZFQVRVUkVfTUlOX1BST0RVQ1RfU1BFQ0lGSUMgICAgKDB4ODApCisjZGVmaW5lIE1QSTJfUE1fQ09OVFJPTF9GRUFUVVJFX01BWF9QUk9EVUNUX1NQRUNJRklDICAgICgweEZGKQorCisvKiBwYXJhbWV0ZXIgdXNhZ2UgZm9yIHRoZSBNUEkyX1BNX0NPTlRST0xfRkVBVFVSRV9EQV9QSFlfUE9XRVJfQ09ORCBGZWF0dXJlICovCisvKiBQYXJhbWV0ZXIxIGNvbnRhaW5zIGEgUEhZIG51bWJlciAqLworLyogUGFyYW1ldGVyMiBpbmRpY2F0ZXMgcG93ZXIgY29uZGl0aW9uIGFjdGlvbiB1c2luZyB0aGVzZSBkZWZpbmVzICovCisjZGVmaW5lIE1QSTJfUE1fQ09OVFJPTF9QQVJBTTJfUEFSVElBTCAgICAgICAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX1BNX0NPTlRST0xfUEFSQU0yX1NMVU1CRVIgICAgICAgICAgICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9QTV9DT05UUk9MX1BBUkFNMl9FWElUX1BXUl9NR01UICAgICAgICAgICAgKDB4MDMpCisvKiBQYXJhbWV0ZXIzIGFuZCBQYXJhbWV0ZXI0IGFyZSByZXNlcnZlZCAqLworCisvKiBwYXJhbWV0ZXIgdXNhZ2UgZm9yIHRoZSBNUEkyX1BNX0NPTlRST0xfRkVBVFVSRV9QT1JUX1dJRFRIX01PRFVMQVRJT04KKyAqICBGZWF0dXJlICovCisvKiBQYXJhbWV0ZXIxIGNvbnRhaW5zIFNBUyBwb3J0IHdpZHRoIG1vZHVsYXRpb24gZ3JvdXAgbnVtYmVyICovCisvKiBQYXJhbWV0ZXIyIGluZGljYXRlcyBJT0MgYWN0aW9uIHVzaW5nIHRoZXNlIGRlZmluZXMgKi8KKyNkZWZpbmUgTVBJMl9QTV9DT05UUk9MX1BBUkFNMl9SRVFVRVNUX09XTkVSU0hJUCAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfUE1fQ09OVFJPTF9QQVJBTTJfQ0hBTkdFX01PRFVMQVRJT04gICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1BNX0NPTlRST0xfUEFSQU0yX1JFTElOUVVJU0hfT1dORVJTSElQICAgICAoMHgwMykKKy8qIFBhcmFtZXRlcjMgaW5kaWNhdGVzIGRlc2lyZWQgbW9kdWxhdGlvbiBsZXZlbCB1c2luZyB0aGVzZSBkZWZpbmVzICovCisjZGVmaW5lIE1QSTJfUE1fQ09OVFJPTF9QQVJBTTNfMjVfUEVSQ0VOVCAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1BNX0NPTlRST0xfUEFSQU0zXzUwX1BFUkNFTlQgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9QTV9DT05UUk9MX1BBUkFNM183NV9QRVJDRU5UICAgICAgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfUE1fQ09OVFJPTF9QQVJBTTNfMTAwX1BFUkNFTlQgICAgICAgICAgICAgICgweDAzKQorLyogUGFyYW1ldGVyNCBpcyByZXNlcnZlZCAqLworCisvKiBwYXJhbWV0ZXIgdXNhZ2UgZm9yIHRoZSBNUEkyX1BNX0NPTlRST0xfRkVBVFVSRV9QQ0lFX0xJTksgRmVhdHVyZSAqLworLyogUGFyYW1ldGVyMSBpbmRpY2F0ZXMgZGVzaXJlZCBQQ0llIGxpbmsgc3BlZWQgdXNpbmcgdGhlc2UgZGVmaW5lcyAqLworI2RlZmluZSBNUEkyX1BNX0NPTlRST0xfUEFSQU0xX1BDSUVfMl81X0dCUFMgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9QTV9DT05UUk9MX1BBUkFNMV9QQ0lFXzVfMF9HQlBTICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfUE1fQ09OVFJPTF9QQVJBTTFfUENJRV84XzBfR0JQUyAgICAgICAgICAgICgweDAyKQorLyogUGFyYW1ldGVyMiBpbmRpY2F0ZXMgZGVzaXJlZCBQQ0llIGxpbmsgd2lkdGggdXNpbmcgdGhlc2UgZGVmaW5lcyAqLworI2RlZmluZSBNUEkyX1BNX0NPTlRST0xfUEFSQU0yX1dJRFRIX1gxICAgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9QTV9DT05UUk9MX1BBUkFNMl9XSURUSF9YMiAgICAgICAgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfUE1fQ09OVFJPTF9QQVJBTTJfV0lEVEhfWDQgICAgICAgICAgICAgICAgICgweDA0KQorI2RlZmluZSBNUEkyX1BNX0NPTlRST0xfUEFSQU0yX1dJRFRIX1g4ICAgICAgICAgICAgICAgICAoMHgwOCkKKy8qIFBhcmFtZXRlcjMgYW5kIFBhcmFtZXRlcjQgYXJlIHJlc2VydmVkICovCisKKy8qIHBhcmFtZXRlciB1c2FnZSBmb3IgdGhlIE1QSTJfUE1fQ09OVFJPTF9GRUFUVVJFX0lPQ19TUEVFRCBGZWF0dXJlICovCisvKiBQYXJhbWV0ZXIxIGluZGljYXRlcyBkZXNpcmVkIElPQyBoYXJkd2FyZSBjbG9jayBzcGVlZCB1c2luZyB0aGVzZSBkZWZpbmVzICovCisjZGVmaW5lIE1QSTJfUE1fQ09OVFJPTF9QQVJBTTFfRlVMTF9JT0NfU1BFRUQgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX1BNX0NPTlRST0xfUEFSQU0xX0hBTEZfSU9DX1NQRUVEICAgICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9QTV9DT05UUk9MX1BBUkFNMV9RVUFSVEVSX0lPQ19TUEVFRCAgICAgICAgKDB4MDQpCisjZGVmaW5lIE1QSTJfUE1fQ09OVFJPTF9QQVJBTTFfRUlHSFRIX0lPQ19TUEVFRCAgICAgICAgICgweDA4KQorLyogUGFyYW1ldGVyMiwgUGFyYW1ldGVyMywgYW5kIFBhcmFtZXRlcjQgYXJlIHJlc2VydmVkICovCisKKworLyogUG93ZXJNYW5hZ2VtZW50Q29udHJvbCBSZXBseSBtZXNzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9QV1JfTUdNVF9DT05UUk9MX1JFUExZIHsKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGZWF0dXJlOyAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnTGVuZ3RoOyAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSU9DU3RhdHVzOyAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJT0NMb2dJbmZvOyAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworfSBNUEkyX1BXUl9NR01UX0NPTlRST0xfUkVQTFksIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9QV1JfTUdNVF9DT05UUk9MX1JFUExZLAorICBNcGkyUHdyTWdtdENvbnRyb2xSZXBseV90LCBNUEkyX1BPSU5URVIgcE1waTJQd3JNZ210Q29udHJvbFJlcGx5X3Q7CisKKwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMKaW5kZXggMGVjMWVkMy4uNTdiY2Q1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMKQEAgLTk1LDYgKzk1LDEwIEBACiBNT0RVTEVfUEFSTV9ERVNDKG1wdDJzYXNfZndmYXVsdF9kZWJ1ZywgIiBlbmFibGUgZGV0ZWN0aW9uIG9mIGZpcm13YXJlIGZhdWx0ICIKICAgICAiYW5kIGhhbHQgZmlybXdhcmUgLSAoZGVmYXVsdD0wKSIpOwogCitzdGF0aWMgaW50IGRpc2FibGVfZGlzY292ZXJ5ID0gLTE7Cittb2R1bGVfcGFyYW0oZGlzYWJsZV9kaXNjb3ZlcnksIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfZGlzY292ZXJ5LCAiIGRpc2FibGUgZGlzY292ZXJ5ICIpOworCiAvKioKICAqIF9zY3NpaF9zZXRfZndmYXVsdF9kZWJ1ZyAtIGdsb2JhbCBzZXR0aW5nIG9mIGlvYy0+ZndmYXVsdF9kZWJ1Zy4KICAqCkBAIC0xMjM4LDcgKzEyNDIsNyBAQAogCXU2NCBwaW9fY2hpcCA9IDA7CiAJdTY0IGNoaXBfcGh5cyA9IDA7CiAKLQlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXNcbiIsCisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXNcbiIsCiAJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKIAogCWlvYy0+YmFycyA9IHBjaV9zZWxlY3RfYmFycyhwZGV2LCBJT1JFU09VUkNFX01FTSk7CkBAIC0xMzA3LDYgKzEzMTEsOSBAQAogCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJpb3BvcnQoMHglMDE2bGx4KSwgc2l6ZSglZClcbiIsCiAJICAgIGlvYy0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylwaW9fY2hpcCwgcGlvX3N6KTsKIAorCS8qIFNhdmUgUENJIGNvbmZpZ3VyYXRpb24gc3RhdGUgZm9yIHJlY292ZXJ5IGZyb20gUENJIEFFUi9FRUggZXJyb3JzICovCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisKIAlyZXR1cm4gMDsKIAogIG91dF9mYWlsOgpAQCAtMTg2MSw3ICsxODY4LDcgQEAKIHN0YXRpYyB2b2lkCiBfYmFzZV9yZWxlYXNlX21lbW9yeV9wb29scyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCiB7Ci0JZGV4aXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCisJZGV4aXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKIAkgICAgX19mdW5jX18pKTsKIAogCWlmIChpb2MtPnJlcXVlc3QpIHsKQEAgLTE5NDcsNyArMTk1NCw3IEBACiAJdTMyIHJldHJ5X3N6OwogCXUxNiBtYXhfcmVxdWVzdF9jcmVkaXQ7CiAKLQlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlc1xuIiwgaW9jLT5uYW1lLAogCSAgICBfX2Z1bmNfXykpOwogCiAJcmV0cnlfc3ogPSAwOwpAQCAtMjM3NCw3ICsyMzgxLDcgQEAKIAlkbyB7CiAJCWludF9zdGF0dXMgPSByZWFkbCgmaW9jLT5jaGlwLT5Ib3N0SW50ZXJydXB0U3RhdHVzKTsKIAkJaWYgKGludF9zdGF0dXMgJiBNUEkyX0hJU19JT0MyU1lTX0RCX1NUQVRVUykgewotCQkJZGhzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogIgorCQkJZGhzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiAiCiAJCQkgICAgInN1Y2Nlc3NmdWxsIGNvdW50KCVkKSwgdGltZW91dCglZClcbiIsIGlvYy0+bmFtZSwKIAkJCSAgICBfX2Z1bmNfXywgY291bnQsIHRpbWVvdXQpKTsKIAkJCXJldHVybiAwOwpAQCAtMjQxNSw3ICsyNDIyLDcgQEAKIAlkbyB7CiAJCWludF9zdGF0dXMgPSByZWFkbCgmaW9jLT5jaGlwLT5Ib3N0SW50ZXJydXB0U3RhdHVzKTsKIAkJaWYgKCEoaW50X3N0YXR1cyAmIE1QSTJfSElTX1NZUzJJT0NfREJfU1RBVFVTKSkgewotCQkJZGhzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogIgorCQkJZGhzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiAiCiAJCQkgICAgInN1Y2Nlc3NmdWxsIGNvdW50KCVkKSwgdGltZW91dCglZClcbiIsIGlvYy0+bmFtZSwKIAkJCSAgICBfX2Z1bmNfXywgY291bnQsIHRpbWVvdXQpKTsKIAkJCXJldHVybiAwOwpAQCAtMjQ2Myw3ICsyNDcwLDcgQEAKIAlkbyB7CiAJCWRvb3JiZWxsX3JlZyA9IHJlYWRsKCZpb2MtPmNoaXAtPkRvb3JiZWxsKTsKIAkJaWYgKCEoZG9vcmJlbGxfcmVnICYgTVBJMl9ET09SQkVMTF9VU0VEKSkgewotCQkJZGhzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogIgorCQkJZGhzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiAiCiAJCQkgICAgInN1Y2Nlc3NmdWxsIGNvdW50KCVkKSwgdGltZW91dCglZClcbiIsIGlvYy0+bmFtZSwKIAkJCSAgICBfX2Z1bmNfXywgY291bnQsIHRpbWVvdXQpKTsKIAkJCXJldHVybiAwOwpAQCAtMjYzNyw5ICsyNjQ0LDkgQEAKIAogCWlmIChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfSU5JVCkgewogCQltZnAgPSAodTMyICopcmVwbHk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJcdG9mZnNldDpkYXRhXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiXHRvZmZzZXQ6ZGF0YVxuIik7CiAJCWZvciAoaSA9IDA7IGkgPCByZXBseV9ieXRlcy80OyBpKyspCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiXHRbMHglMDJ4XTolMDh4XG4iLCBpKjQsCisJCQlwcmludGsoS0VSTl9JTkZPICJcdFsweCUwMnhdOiUwOHhcbiIsIGkqNCwKIAkJCSAgICBsZTMyX3RvX2NwdShtZnBbaV0pKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0yNjcyLDcgKzI2NzksNyBAQAogCXZvaWQgKnJlcXVlc3Q7CiAJdTE2IHdhaXRfc3RhdGVfY291bnQ7CiAKLQlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlc1xuIiwgaW9jLT5uYW1lLAogCSAgICBfX2Z1bmNfXykpOwogCiAJbXV0ZXhfbG9jaygmaW9jLT5iYXNlX2NtZHMubXV0ZXgpOwpAQCAtMjc3Nyw3ICsyNzg0LDcgQEAKIAl2b2lkICpyZXF1ZXN0OwogCXUxNiB3YWl0X3N0YXRlX2NvdW50OwogCi0JZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKIAkgICAgX19mdW5jX18pKTsKIAogCW11dGV4X2xvY2soJmlvYy0+YmFzZV9jbWRzLm11dGV4KTsKQEAgLTI4NjUsNyArMjg3Miw3IEBACiAJTXBpMlBvcnRGYWN0c1JlcGx5X3QgbXBpX3JlcGx5LCAqcGZhY3RzOwogCWludCBtcGlfcmVwbHlfc3osIG1waV9yZXF1ZXN0X3N6LCByOwogCi0JZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKIAkgICAgX19mdW5jX18pKTsKIAogCW1waV9yZXBseV9zeiA9IHNpemVvZihNcGkyUG9ydEZhY3RzUmVwbHlfdCk7CkBAIC0yOTA3LDcgKzI5MTQsNyBAQAogCU1waTJJT0NGYWN0c1JlcGx5X3QgbXBpX3JlcGx5LCAqZmFjdHM7CiAJaW50IG1waV9yZXBseV9zeiwgbXBpX3JlcXVlc3Rfc3osIHI7CiAKLQlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlc1xuIiwgaW9jLT5uYW1lLAogCSAgICBfX2Z1bmNfXykpOwogCiAJbXBpX3JlcGx5X3N6ID0gc2l6ZW9mKE1waTJJT0NGYWN0c1JlcGx5X3QpOwpAQCAtMjk3OSw3ICsyOTg2LDcgQEAKIAlzdHJ1Y3QgdGltZXZhbCBjdXJyZW50X3RpbWU7CiAJdTE2IGlvY19zdGF0dXM7CiAKLQlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlc1xuIiwgaW9jLT5uYW1lLAogCSAgICBfX2Z1bmNfXykpOwogCiAJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJJT0NJbml0UmVxdWVzdF90KSk7CkBAIC0zMDQwLDkgKzMwNDcsOSBAQAogCQlpbnQgaTsKIAogCQltZnAgPSAodTMyICopJm1waV9yZXF1ZXN0OwotCQlwcmludGsoS0VSTl9ERUJVRyAiXHRvZmZzZXQ6ZGF0YVxuIik7CisJCXByaW50ayhLRVJOX0lORk8gIlx0b2Zmc2V0OmRhdGFcbiIpOwogCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKE1waTJJT0NJbml0UmVxdWVzdF90KS80OyBpKyspCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiXHRbMHglMDJ4XTolMDh4XG4iLCBpKjQsCisJCQlwcmludGsoS0VSTl9JTkZPICJcdFsweCUwMnhdOiUwOHhcbiIsIGkqNCwKIAkJCSAgICBsZTMyX3RvX2NwdShtZnBbaV0pKTsKIAl9CiAKQEAgLTMxMjEsNyArMzEyOCw3IEBACiAJCQlyID0gLUVUSU1FOwogCQlnb3RvIG91dDsKIAl9IGVsc2UKLQkJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBjb21wbGV0ZVxuIiwKKwkJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGNvbXBsZXRlXG4iLAogCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOwogCiAJaW9jX3N0YXRlID0gX2Jhc2Vfd2FpdF9vbl9pb2NzdGF0ZShpb2MsIE1QSTJfSU9DX1NUQVRFX09QRVJBVElPTkFMLApAQCAtMzE4MSw3ICszMTg4LDcgQEAKIAlpbnQgciA9IDA7CiAJaW50IGk7CiAKLQlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlc1xuIiwgaW9jLT5uYW1lLAogCSAgICBfX2Z1bmNfXykpOwogCiAJaWYgKGlvYy0+YmFzZV9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1BFTkRJTkcpIHsKQEAgLTMyMTksNyArMzIyNiw3IEBACiAJCWVsc2UKIAkJCXIgPSAtRVRJTUU7CiAJfSBlbHNlCi0JCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogY29tcGxldGVcbiIsCisJCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBjb21wbGV0ZVxuIiwKIAkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKIAlpb2MtPmJhc2VfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKIAlyZXR1cm4gcjsKQEAgLTMyODEsNyArMzI4OCw3IEBACiAKIAlfYmFzZV9zYXZlX21zaXhfdGFibGUoaW9jKTsKIAotCWRyc3ByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiY2xlYXIgaW50ZXJydXB0c1xuIiwKKwlkcnNwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiY2xlYXIgaW50ZXJydXB0c1xuIiwKIAkgICAgaW9jLT5uYW1lKSk7CiAKIAljb3VudCA9IDA7CkBAIC0zMjg5LDcgKzMyOTYsNyBAQAogCQkvKiBXcml0ZSBtYWdpYyBzZXF1ZW5jZSB0byBXcml0ZVNlcXVlbmNlIHJlZ2lzdGVyCiAJCSAqIExvb3AgdW50aWwgaW4gZGlhZ25vc3RpYyBtb2RlCiAJCSAqLwotCQlkcnNwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIndyaXRlIG1hZ2ljICIKKwkJZHJzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIndyaXRlIG1hZ2ljICIKIAkJICAgICJzZXF1ZW5jZVxuIiwgaW9jLT5uYW1lKSk7CiAJCXdyaXRlbChNUEkyX1dSU0VRX0ZMVVNIX0tFWV9WQUxVRSwgJmlvYy0+Y2hpcC0+V3JpdGVTZXF1ZW5jZSk7CiAJCXdyaXRlbChNUEkyX1dSU0VRXzFTVF9LRVlfVkFMVUUsICZpb2MtPmNoaXAtPldyaXRlU2VxdWVuY2UpOwpAQCAtMzMwOSw3ICszMzE2LDcgQEAKIAkJCWdvdG8gb3V0OwogCiAJCWhvc3RfZGlhZ25vc3RpYyA9IHJlYWRsKCZpb2MtPmNoaXAtPkhvc3REaWFnbm9zdGljKTsKLQkJZHJzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJ3cm90ZSBtYWdpYyAiCisJCWRyc3ByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJ3cm90ZSBtYWdpYyAiCiAJCSAgICAic2VxdWVuY2U6IGNvdW50KCVkKSwgaG9zdF9kaWFnbm9zdGljKDB4JTA4eClcbiIsCiAJCSAgICBpb2MtPm5hbWUsIGNvdW50LCBob3N0X2RpYWdub3N0aWMpKTsKIApAQCAtMzMxNyw3ICszMzI0LDcgQEAKIAogCWhjYl9zaXplID0gcmVhZGwoJmlvYy0+Y2hpcC0+SENCU2l6ZSk7CiAKLQlkcnNwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgImRpYWcgcmVzZXQ6IGlzc3VlZFxuIiwKKwlkcnNwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiZGlhZyByZXNldDogaXNzdWVkXG4iLAogCSAgICBpb2MtPm5hbWUpKTsKIAl3cml0ZWwoaG9zdF9kaWFnbm9zdGljIHwgTVBJMl9ESUFHX1JFU0VUX0FEQVBURVIsCiAJICAgICAmaW9jLT5jaGlwLT5Ib3N0RGlhZ25vc3RpYyk7CkBAIC0zMzQ0LDI5ICszMzUxLDI5IEBACiAKIAlpZiAoaG9zdF9kaWFnbm9zdGljICYgTVBJMl9ESUFHX0hDQl9NT0RFKSB7CiAKLQkJZHJzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJyZXN0YXJ0IHRoZSBhZGFwdGVyICIKKwkJZHJzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInJlc3RhcnQgdGhlIGFkYXB0ZXIgIgogCQkgICAgImFzc3VtaW5nIHRoZSBIQ0IgQWRkcmVzcyBwb2ludHMgdG8gZ29vZCBGL1dcbiIsCiAJCSAgICBpb2MtPm5hbWUpKTsKIAkJaG9zdF9kaWFnbm9zdGljICY9IH5NUEkyX0RJQUdfQk9PVF9ERVZJQ0VfU0VMRUNUX01BU0s7CiAJCWhvc3RfZGlhZ25vc3RpYyB8PSBNUEkyX0RJQUdfQk9PVF9ERVZJQ0VfU0VMRUNUX0hDRFc7CiAJCXdyaXRlbChob3N0X2RpYWdub3N0aWMsICZpb2MtPmNoaXAtPkhvc3REaWFnbm9zdGljKTsKIAotCQlkcnNwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQKKwkJZHJzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQKIAkJICAgICJyZS1lbmFibGUgdGhlIEhDRFdcbiIsIGlvYy0+bmFtZSkpOwogCQl3cml0ZWwoaGNiX3NpemUgfCBNUEkyX0hDQl9TSVpFX0hDQl9FTkFCTEUsCiAJCSAgICAmaW9jLT5jaGlwLT5IQ0JTaXplKTsKIAl9CiAKLQlkcnNwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgInJlc3RhcnQgdGhlIGFkYXB0ZXJcbiIsCisJZHJzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInJlc3RhcnQgdGhlIGFkYXB0ZXJcbiIsCiAJICAgIGlvYy0+bmFtZSkpOwogCXdyaXRlbChob3N0X2RpYWdub3N0aWMgJiB+TVBJMl9ESUFHX0hPTERfSU9DX1JFU0VULAogCSAgICAmaW9jLT5jaGlwLT5Ib3N0RGlhZ25vc3RpYyk7CiAKLQlkcnNwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgImRpc2FibGUgd3JpdGVzIHRvIHRoZSAiCisJZHJzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImRpc2FibGUgd3JpdGVzIHRvIHRoZSAiCiAJICAgICJkaWFnbm9zdGljIHJlZ2lzdGVyXG4iLCBpb2MtPm5hbWUpKTsKIAl3cml0ZWwoTVBJMl9XUlNFUV9GTFVTSF9LRVlfVkFMVUUsICZpb2MtPmNoaXAtPldyaXRlU2VxdWVuY2UpOwogCi0JZHJzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJXYWl0IGZvciBGVyB0byBnbyB0byB0aGUgIgorCWRyc3ByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJXYWl0IGZvciBGVyB0byBnbyB0byB0aGUgIgogCSAgICAiUkVBRFkgc3RhdGVcbiIsIGlvYy0+bmFtZSkpOwogCWlvY19zdGF0ZSA9IF9iYXNlX3dhaXRfb25faW9jc3RhdGUoaW9jLCBNUEkyX0lPQ19TVEFURV9SRUFEWSwgMjAsCiAJICAgIHNsZWVwX2ZsYWcpOwpAQCAtMzM5OCwxOSArMzQwNSwyMyBAQAogICAgIGVudW0gcmVzZXRfdHlwZSB0eXBlKQogewogCXUzMiBpb2Nfc3RhdGU7CisJaW50IHJjOwogCi0JZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKIAkgICAgX19mdW5jX18pKTsKIAorCWlmIChpb2MtPnBjaV9lcnJvcl9yZWNvdmVyeSkKKwkJcmV0dXJuIDA7CisKIAlpb2Nfc3RhdGUgPSBtcHQyc2FzX2Jhc2VfZ2V0X2lvY3N0YXRlKGlvYywgMCk7Ci0JZGhzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogaW9jX3N0YXRlKDB4JTA4eClcbiIsCisJZGhzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBpb2Nfc3RhdGUoMHglMDh4KVxuIiwKIAkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXywgaW9jX3N0YXRlKSk7CiAKIAlpZiAoKGlvY19zdGF0ZSAmIE1QSTJfSU9DX1NUQVRFX01BU0spID09IE1QSTJfSU9DX1NUQVRFX1JFQURZKQogCQlyZXR1cm4gMDsKIAogCWlmIChpb2Nfc3RhdGUgJiBNUEkyX0RPT1JCRUxMX1VTRUQpIHsKLQkJZGhzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJ1bmV4cGVjdGVkIGRvb3JiZWxsICIKKwkJZGhzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInVuZXhwZWN0ZWQgZG9vcmJlbGwgIgogCQkgICAgImFjdGl2ZSFcbiIsIGlvYy0+bmFtZSkpOwogCQlnb3RvIGlzc3VlX2RpYWdfcmVzZXQ7CiAJfQpAQCAtMzQyNiwxMSArMzQzNywxNSBAQAogCiAJaWYgKChpb2Nfc3RhdGUgJiBNUEkyX0lPQ19TVEFURV9NQVNLKSA9PSBNUEkyX0lPQ19TVEFURV9PUEVSQVRJT05BTCkKIAkJaWYgKCEoX2Jhc2Vfc2VuZF9pb2NfcmVzZXQoaW9jLAotCQkgICAgTVBJMl9GVU5DVElPTl9JT0NfTUVTU0FHRV9VTklUX1JFU0VULCAxNSwgQ0FOX1NMRUVQKSkpCisJCSAgICBNUEkyX0ZVTkNUSU9OX0lPQ19NRVNTQUdFX1VOSVRfUkVTRVQsIDE1LCBDQU5fU0xFRVApKSkgeworCQkJaW9jLT5pb2NfcmVzZXRfY291bnQrKzsKIAkJCXJldHVybiAwOworCX0KIAogIGlzc3VlX2RpYWdfcmVzZXQ6Ci0JcmV0dXJuIF9iYXNlX2RpYWdfcmVzZXQoaW9jLCBDQU5fU0xFRVApOworCXJjID0gX2Jhc2VfZGlhZ19yZXNldChpb2MsIENBTl9TTEVFUCk7CisJaW9jLT5pb2NfcmVzZXRfY291bnQrKzsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qKgpAQCAtMzQ0OSw3ICszNDY0LDcgQEAKIAl1MTYgc21pZDsKIAlzdHJ1Y3QgX3RyX2xpc3QgKmRlbGF5ZWRfdHIsICpkZWxheWVkX3RyX25leHQ7CiAKLQlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlc1xuIiwgaW9jLT5uYW1lLAogCSAgICBfX2Z1bmNfXykpOwogCiAJLyogY2xlYW4gdGhlIGRlbGF5ZWQgdGFyZ2V0IHJlc2V0IGxpc3QgKi8KQEAgLTM0NTksNiArMzQ3NCwxMiBAQAogCQlrZnJlZShkZWxheWVkX3RyKTsKIAl9CiAKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGVsYXllZF90ciwgZGVsYXllZF90cl9uZXh0LAorCSAgICAmaW9jLT5kZWxheWVkX3RyX3ZvbHVtZV9saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsKCZkZWxheWVkX3RyLT5saXN0KTsKKwkJa2ZyZWUoZGVsYXllZF90cik7CisJfQorCiAJLyogaW5pdGlhbGl6ZSB0aGUgc2NzaSBsb29rdXAgZnJlZSBsaXN0ICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwogCUlOSVRfTElTVF9IRUFEKCZpb2MtPmZyZWVfbGlzdCk7CkBAIC0zNTIwLDYgKzM1NDEsMTMgQEAKIAlpZiAoc2xlZXBfZmxhZyA9PSBDQU5fU0xFRVApCiAJCV9iYXNlX3N0YXRpY19jb25maWdfcGFnZXMoaW9jKTsKIAorCWlmIChpb2MtPndhaXRfZm9yX3BvcnRfZW5hYmxlX3RvX2NvbXBsZXRlKSB7CisJCWlmIChkaWFnX2J1ZmZlcl9lbmFibGUgIT0gMCkKKwkJCW1wdDJzYXNfZW5hYmxlX2RpYWdfYnVmZmVyKGlvYywgZGlhZ19idWZmZXJfZW5hYmxlKTsKKwkJaWYgKGRpc2FibGVfZGlzY292ZXJ5ID4gMCkKKwkJCXJldHVybiByOworCX0KKwogCXIgPSBfYmFzZV9zZW5kX3BvcnRfZW5hYmxlKGlvYywgc2xlZXBfZmxhZyk7CiAJaWYgKHIpCiAJCXJldHVybiByOwpAQCAtMzUzOCw3ICszNTY2LDcgQEAKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGlvYy0+cGRldjsKIAotCWRleGl0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlc1xuIiwgaW9jLT5uYW1lLAorCWRleGl0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCiAJICAgIF9fZnVuY19fKSk7CiAKIAlfYmFzZV9tYXNrX2ludGVycnVwdHMoaW9jKTsKQEAgLTM1NzEsNyArMzU5OSw3IEBACiB7CiAJaW50IHIsIGk7CiAKLQlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlc1xuIiwgaW9jLT5uYW1lLAogCSAgICBfX2Z1bmNfXykpOwogCiAJciA9IG1wdDJzYXNfYmFzZV9tYXBfcmVzb3VyY2VzKGlvYyk7CkBAIC0zNjA2LDYgKzM2MzQsMTcgQEAKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmlvYy0+cmVzZXRfd3EpOwogCisJLyogYWxsb2NhdGUgbWVtb3J5IHBkIGhhbmRsZSBiaXRtYXNrIGxpc3QgKi8KKwlpb2MtPnBkX2hhbmRsZXNfc3ogPSAoaW9jLT5mYWN0cy5NYXhEZXZIYW5kbGUgLyA4KTsKKwlpZiAoaW9jLT5mYWN0cy5NYXhEZXZIYW5kbGUgJSA4KQorCQlpb2MtPnBkX2hhbmRsZXNfc3orKzsKKwlpb2MtPnBkX2hhbmRsZXMgPSBremFsbG9jKGlvYy0+cGRfaGFuZGxlc19zeiwKKwkgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFpb2MtPnBkX2hhbmRsZXMpIHsKKwkJciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2ZyZWVfcmVzb3VyY2VzOworCX0KKwogCWlvYy0+ZndmYXVsdF9kZWJ1ZyA9IG1wdDJzYXNfZndmYXVsdF9kZWJ1ZzsKIAogCS8qIGJhc2UgaW50ZXJuYWwgY29tbWFuZCBiaXRzICovCkBAIC0zNjM1LDExICszNjc0LDIwIEBACiAKIAkvKiBjdGwgbW9kdWxlIGludGVybmFsIGNvbW1hbmQgYml0cyAqLwogCWlvYy0+Y3RsX2NtZHMucmVwbHkgPSBremFsbG9jKGlvYy0+cmVwbHlfc3osIEdGUF9LRVJORUwpOworCWlvYy0+Y3RsX2NtZHMuc2Vuc2UgPSBremFsbG9jKFNDU0lfU0VOU0VfQlVGRkVSU0laRSwgR0ZQX0tFUk5FTCk7CiAJaW9jLT5jdGxfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKIAltdXRleF9pbml0KCZpb2MtPmN0bF9jbWRzLm11dGV4KTsKIAogCWlmICghaW9jLT5iYXNlX2NtZHMucmVwbHkgfHwgIWlvYy0+dHJhbnNwb3J0X2NtZHMucmVwbHkgfHwKIAkgICAgIWlvYy0+c2NzaWhfY21kcy5yZXBseSB8fCAhaW9jLT50bV9jbWRzLnJlcGx5IHx8CisJICAgICFpb2MtPmNvbmZpZ19jbWRzLnJlcGx5IHx8ICFpb2MtPmN0bF9jbWRzLnJlcGx5IHx8CisJICAgICFpb2MtPmN0bF9jbWRzLnNlbnNlKSB7CisJCXIgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlX3Jlc291cmNlczsKKwl9CisKKwlpZiAoIWlvYy0+YmFzZV9jbWRzLnJlcGx5IHx8ICFpb2MtPnRyYW5zcG9ydF9jbWRzLnJlcGx5IHx8CisJICAgICFpb2MtPnNjc2loX2NtZHMucmVwbHkgfHwgIWlvYy0+dG1fY21kcy5yZXBseSB8fAogCSAgICAhaW9jLT5jb25maWdfY21kcy5yZXBseSB8fCAhaW9jLT5jdGxfY21kcy5yZXBseSkgewogCQlyID0gLUVOT01FTTsKIAkJZ290byBvdXRfZnJlZV9yZXNvdXJjZXM7CkBAIC0zNjY3LDggKzM3MTUsNiBAQAogCQlnb3RvIG91dF9mcmVlX3Jlc291cmNlczsKIAogCW1wdDJzYXNfYmFzZV9zdGFydF93YXRjaGRvZyhpb2MpOwotCWlmIChkaWFnX2J1ZmZlcl9lbmFibGUgIT0gMCkKLQkJbXB0MnNhc19lbmFibGVfZGlhZ19idWZmZXIoaW9jLCBkaWFnX2J1ZmZlcl9lbmFibGUpOwogCXJldHVybiAwOwogCiAgb3V0X2ZyZWVfcmVzb3VyY2VzOgpAQCAtMzY3NywxMiArMzcyMywxNCBAQAogCW1wdDJzYXNfYmFzZV9mcmVlX3Jlc291cmNlcyhpb2MpOwogCV9iYXNlX3JlbGVhc2VfbWVtb3J5X3Bvb2xzKGlvYyk7CiAJcGNpX3NldF9kcnZkYXRhKGlvYy0+cGRldiwgTlVMTCk7CisJa2ZyZWUoaW9jLT5wZF9oYW5kbGVzKTsKIAlrZnJlZShpb2MtPnRtX2NtZHMucmVwbHkpOwogCWtmcmVlKGlvYy0+dHJhbnNwb3J0X2NtZHMucmVwbHkpOwogCWtmcmVlKGlvYy0+c2NzaWhfY21kcy5yZXBseSk7CiAJa2ZyZWUoaW9jLT5jb25maWdfY21kcy5yZXBseSk7CiAJa2ZyZWUoaW9jLT5iYXNlX2NtZHMucmVwbHkpOwogCWtmcmVlKGlvYy0+Y3RsX2NtZHMucmVwbHkpOworCWtmcmVlKGlvYy0+Y3RsX2NtZHMuc2Vuc2UpOwogCWtmcmVlKGlvYy0+cGZhY3RzKTsKIAlpb2MtPmN0bF9jbWRzLnJlcGx5ID0gTlVMTDsKIAlpb2MtPmJhc2VfY21kcy5yZXBseSA9IE5VTEw7CkBAIC0zNzA1LDE1ICszNzUzLDE3IEBACiBtcHQyc2FzX2Jhc2VfZGV0YWNoKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKIHsKIAotCWRleGl0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlc1xuIiwgaW9jLT5uYW1lLAorCWRleGl0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCiAJICAgIF9fZnVuY19fKSk7CiAKIAltcHQyc2FzX2Jhc2Vfc3RvcF93YXRjaGRvZyhpb2MpOwogCW1wdDJzYXNfYmFzZV9mcmVlX3Jlc291cmNlcyhpb2MpOwogCV9iYXNlX3JlbGVhc2VfbWVtb3J5X3Bvb2xzKGlvYyk7CiAJcGNpX3NldF9kcnZkYXRhKGlvYy0+cGRldiwgTlVMTCk7CisJa2ZyZWUoaW9jLT5wZF9oYW5kbGVzKTsKIAlrZnJlZShpb2MtPnBmYWN0cyk7CiAJa2ZyZWUoaW9jLT5jdGxfY21kcy5yZXBseSk7CisJa2ZyZWUoaW9jLT5jdGxfY21kcy5zZW5zZSk7CiAJa2ZyZWUoaW9jLT5iYXNlX2NtZHMucmVwbHkpOwogCWtmcmVlKGlvYy0+dG1fY21kcy5yZXBseSk7CiAJa2ZyZWUoaW9jLT50cmFuc3BvcnRfY21kcy5yZXBseSk7CkBAIC0zNzM4LDExICszNzg4LDExIEBACiB7CiAJc3dpdGNoIChyZXNldF9waGFzZSkgewogCWNhc2UgTVBUMl9JT0NfUFJFX1JFU0VUOgotCQlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiAiCisJCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogIgogCQkgICAgIk1QVDJfSU9DX1BSRV9SRVNFVFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOwogCQlicmVhazsKIAljYXNlIE1QVDJfSU9DX0FGVEVSX1JFU0VUOgotCQlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiAiCisJCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogIgogCQkgICAgIk1QVDJfSU9DX0FGVEVSX1JFU0VUXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CiAJCWlmIChpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1BFTkRJTkcpIHsKIAkJCWlvYy0+dHJhbnNwb3J0X2NtZHMuc3RhdHVzIHw9IE1QVDJfQ01EX1JFU0VUOwpAQCAtMzc2Miw3ICszODEyLDcgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIE1QVDJfSU9DX0RPTkVfUkVTRVQ6Ci0JCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6ICIKKwkJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiAiCiAJCSAgICAiTVBUMl9JT0NfRE9ORV9SRVNFVFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOwogCQlicmVhazsKIAl9CkBAIC0zODA0LDcgKzM4NTQsNyBAQAogCQlyZXR1cm47CiAKIAkvKiB3YWl0IGZvciBwZW5kaW5nIGNvbW1hbmRzIHRvIGNvbXBsZXRlICovCi0Jd2FpdF9ldmVudF90aW1lb3V0KGlvYy0+cmVzZXRfd3EsIGlvYy0+cGVuZGluZ19pb19jb3VudCA9PSAwLCAzICogSFopOworCXdhaXRfZXZlbnRfdGltZW91dChpb2MtPnJlc2V0X3dxLCBpb2MtPnBlbmRpbmdfaW9fY291bnQgPT0gMCwgMTAgKiBIWik7CiB9CiAKIC8qKgpAQCAtMzgyMiwxOSArMzg3MiwzNyBAQAogCWludCByOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBlbnRlclxuIiwgaW9jLT5uYW1lLAorCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogZW50ZXJcbiIsIGlvYy0+bmFtZSwKIAkgICAgX19mdW5jX18pKTsKIAorCWlmIChpb2MtPnBjaV9lcnJvcl9yZWNvdmVyeSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogcGNpIGVycm9yIHJlY292ZXJ5IHJlc2V0XG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXIgPSAwOworCQlnb3RvIG91dDsKKwl9CisKIAlpZiAobXB0MnNhc19md2ZhdWx0X2RlYnVnKQogCQltcHQyc2FzX2hhbHRfZmlybXdhcmUoaW9jKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7Ci0JaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOwotCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogYnVzeVxuIiwKLQkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVCVVNZOworCS8qIFRPRE8gLSBXaGF0IHdlIHJlYWxseSBzaG91bGQgYmUgZG9pbmcgaXMgcHVsbGluZworCSAqIG91dCBhbGwgdGhlIGNvZGUgYXNzb2NpYXRlZCB3aXRoIE5PX1NMRUVQOyBpdHMgbmV2ZXIgdXNlZC4KKwkgKiBUaGF0IGlzIGxlZ2FjeSBjb2RlIGZyb20gbXB0IGZ1c2lvbiBkcml2ZXIsIHBvcnRlZCBvdmVyLgorCSAqIEkgd2lsbCBsZWF2ZSB0aGlzIEJVR19PTiBoZXJlIGZvciBub3cgdGlsbCBpdHMgYmVlbiByZXNvbHZlZC4KKwkgKi8KKwlCVUdfT04oc2xlZXBfZmxhZyA9PSBOT19TTEVFUCk7CisKKwkvKiB3YWl0IGZvciBhbiBhY3RpdmUgcmVzZXQgaW4gcHJvZ3Jlc3MgdG8gY29tcGxldGUgKi8KKwlpZiAoIW11dGV4X3RyeWxvY2soJmlvYy0+cmVzZXRfaW5fcHJvZ3Jlc3NfbXV0ZXgpKSB7CisJCWRvIHsKKwkJCXNzbGVlcCgxKTsKKwkJfSB3aGlsZSAoaW9jLT5zaG9zdF9yZWNvdmVyeSA9PSAxKTsKKwkJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBleGl0XG4iLCBpb2MtPm5hbWUsCisJCSAgICBfX2Z1bmNfXykpOworCQlyZXR1cm4gaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3Nfc3RhdHVzOwogCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CiAJaW9jLT5zaG9zdF9yZWNvdmVyeSA9IDE7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOwogCkBAIC0zODQ5LDEzICszOTE3LDE3IEBACiAJaWYgKCFyKQogCQlfYmFzZV9yZXNldF9oYW5kbGVyKGlvYywgTVBUMl9JT0NfRE9ORV9SRVNFVCk7CiAgb3V0OgotCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6ICVzXG4iLAorCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogJXNcbiIsCiAJICAgIGlvYy0+bmFtZSwgX19mdW5jX18sICgociA9PSAwKSA/ICJTVUNDRVNTIiA6ICJGQUlMRUQiKSkpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKwlpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19zdGF0dXMgPSByOwogCWlvYy0+c2hvc3RfcmVjb3ZlcnkgPSAwOwogCWNvbXBsZXRlKCZpb2MtPnNob3N0X3JlY292ZXJ5X2RvbmUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJmlvYy0+cmVzZXRfaW5fcHJvZ3Jlc3NfbXV0ZXgpOwogCisJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBleGl0XG4iLCBpb2MtPm5hbWUsCisJICAgIF9fZnVuY19fKSk7CiAJcmV0dXJuIHI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oCmluZGV4IGI0YWZlNDMuLjBiMTVhOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oCkBAIC02OSwxMSArNjksMTEgQEAKICNkZWZpbmUgTVBUMlNBU19EUklWRVJfTkFNRQkJIm1wdDJzYXMiCiAjZGVmaW5lIE1QVDJTQVNfQVVUSE9SCSJMU0kgQ29ycG9yYXRpb24gPERMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20+IgogI2RlZmluZSBNUFQyU0FTX0RFU0NSSVBUSU9OCSJMU0kgTVBUIEZ1c2lvbiBTQVMgMi4wIERldmljZSBEcml2ZXIiCi0jZGVmaW5lIE1QVDJTQVNfRFJJVkVSX1ZFUlNJT04JCSIwNS4xMDAuMDAuMDIiCi0jZGVmaW5lIE1QVDJTQVNfTUFKT1JfVkVSU0lPTgkJMDUKKyNkZWZpbmUgTVBUMlNBU19EUklWRVJfVkVSU0lPTgkJIjA2LjEwMC4wMC4wMCIKKyNkZWZpbmUgTVBUMlNBU19NQUpPUl9WRVJTSU9OCQkwNgogI2RlZmluZSBNUFQyU0FTX01JTk9SX1ZFUlNJT04JCTEwMAogI2RlZmluZSBNUFQyU0FTX0JVSUxEX1ZFUlNJT04JCTAwCi0jZGVmaW5lIE1QVDJTQVNfUkVMRUFTRV9WRVJTSU9OCQkwMgorI2RlZmluZSBNUFQyU0FTX1JFTEVBU0VfVkVSU0lPTgkJMDAKIAogLyoKICAqIFNldCBNUFQyU0FTX1NHX0RFUFRIIHZhbHVlIGJhc2VkIG9uIHVzZXIgaW5wdXQuCkBAIC0xMjQsNyArMTI0LDYgQEAKICAqIGxvZ2dpbmcgZm9ybWF0CiAgKi8KICNkZWZpbmUgTVBUMlNBU19GTVQJCQkiJXM6ICIKLSNkZWZpbmUgTVBUMlNBU19ERUJVR19GTVQJCUtFUk5fREVCVUcgTVBUMlNBU19GTVQKICNkZWZpbmUgTVBUMlNBU19JTkZPX0ZNVAkJS0VSTl9JTkZPIE1QVDJTQVNfRk1UCiAjZGVmaW5lIE1QVDJTQVNfTk9URV9GTVQJCUtFUk5fTk9USUNFIE1QVDJTQVNfRk1UCiAjZGVmaW5lIE1QVDJTQVNfV0FSTl9GTVQJCUtFUk5fV0FSTklORyBNUFQyU0FTX0ZNVApAQCAtMjQ4LDYgKzI0Nyw3IEBACiAgKiBAbXV0ZXg6IG11dGV4CiAgKiBAZG9uZTogY29tcGxldGlvbgogICogQHJlcGx5OiByZXBseSBtZXNzYWdlIHBvaW50ZXIKKyAqIEBzZW5zZTogc2Vuc2UgZGF0YQogICogQHN0YXR1czogTVBUMl9DTURfWFhYIHN0YXR1cwogICogQHNtaWQ6IHN5c3RlbSBtZXNzYWdlIGlkCiAgKi8KQEAgLTI1NSw2ICsyNTUsNyBAQAogCXN0cnVjdCBtdXRleCBtdXRleDsKIAlzdHJ1Y3QgY29tcGxldGlvbiBkb25lOwogCXZvaWQgCSpyZXBseTsKKwl2b2lkCSpzZW5zZTsKIAl1MTYJc3RhdHVzOwogCXUxNglzbWlkOwogfTsKQEAgLTI3Niw3ICsyNzcsNyBAQAogICogQGlkOiB0YXJnZXQgaWQKICAqIEBjaGFubmVsOiB0YXJnZXQgY2hhbm5lbAogICogQHNsb3Q6IG51bWJlciBudW1iZXIKLSAqIEBoaWRkZW5fcmFpZF9jb21wb25lbnQ6IHNldCB0byAxIHdoZW4gdGhpcyBpcyBhIHJhaWQgbWVtYmVyCisgKiBAcGh5OiBwaHkgaWRlbnRpZmllciBwcm92aWRlZCBpbiBzYXMgZGV2aWNlIHBhZ2UgMAogICogQHJlc3BvbmRpbmc6IHVzZWQgaW4gX3Njc2loX3Nhc19kZXZpY2VfbWFya19yZXNwb25kaW5nCiAgKi8KIHN0cnVjdCBfc2FzX2RldmljZSB7CkBAIC0yOTQsNyArMjk1LDcgQEAKIAlpbnQJaWQ7CiAJaW50CWNoYW5uZWw7CiAJdTE2CXNsb3Q7Ci0JdTgJaGlkZGVuX3JhaWRfY29tcG9uZW50OworCXU4CXBoeTsKIAl1OAlyZXNwb25kaW5nOwogfTsKIApAQCAtNDc0LDggKzQ3NSw5IEBACiAgKiBAc2hvc3RfcmVjb3Zlcnk6IGhvc3QgcmVzZXQgaW4gcHJvZ3Jlc3MKICAqIEBpb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jazoKICAqIEBpb2NfbGlua19yZXNldF9pbl9wcm9ncmVzczogcGh5L2hhcmQgcmVzZXQgaW4gcHJvZ3Jlc3MKLSAqIEBpZ25vcmVfbG9naW5mb3M6IGlnbm9yZSBsb2dpbmZvcyBkdXJpbmcgdGFzayBtYW5hZ21lbnQKKyAqIEBpZ25vcmVfbG9naW5mb3M6IGlnbm9yZSBsb2dpbmZvcyBkdXJpbmcgdGFzayBtYW5hZ2VtZW50CiAgKiBAcmVtb3ZlX2hvc3Q6IGZsYWcgZm9yIHdoZW4gZHJpdmVyIHVubG9hZHMsIHRvIGF2b2lkIHNlbmRpbmcgZGV2IHJlc2V0cworICogQHBjaV9lcnJvcl9yZWNvdmVyeTogZmxhZyB0byBwcmV2ZW50IGlvYyBhY2Nlc3MgdW50aWwgc2xvdCByZXNldCBjb21wbGV0ZXMKICAqIEB3YWl0X2Zvcl9wb3J0X2VuYWJsZV90b19jb21wbGV0ZToKICAqIEBtc2l4X2VuYWJsZTogZmxhZyBpbmRpY2F0aW5nIG1zaXggaXMgZW5hYmxlZAogICogQG1zaXhfdmVjdG9yX2NvdW50OiBudW1iZXIgbXNpeCB2ZWN0b3JzCkBAIC00ODgsNiArNDkwLDggQEAKICAqIEBjdGxfY2JfaWR4OiBjbHQgaW50ZXJuYWwgY29tbWFuZHMKICAqIEBiYXNlX2NiX2lkeDogYmFzZSBpbnRlcm5hbCBjb21tYW5kcwogICogQGNvbmZpZ19jYl9pZHg6IGJhc2UgaW50ZXJuYWwgY29tbWFuZHMKKyAqIEB0bV90cl9jYl9pZHggOiBkZXZpY2UgcmVtb3ZhbCB0YXJnZXQgcmVzZXQgaGFuZHNoYWtlCisgKiBAdG1fdHJfdm9sdW1lX2NiX2lkeCA6IHZvbHVtZSByZW1vdmFsIHRhcmdldCByZXNldAogICogQGJhc2VfY21kczoKICAqIEB0cmFuc3BvcnRfY21kczoKICAqIEBzY3NpaF9jbWRzOgpAQCAtNTE2LDYgKzUyMCw5IEBACiAgKiBAc2FzX2RldmljZV9sb2NrOgogICogQGlvX21pc3NpbmdfZGVsYXk6IHRpbWUgZm9yIElPIGNvbXBsZXRlZCBieSBmdyB3aGVuIFBEUiBlbmFibGVkCiAgKiBAZGV2aWNlX21pc3NpbmdfZGVsYXk6IHRpbWUgZm9yIGRldmljZSBtaXNzaW5nIGJ5IGZ3IHdoZW4gUERSIGVuYWJsZWQKKyAqIEBzYXNfaWQgOiB1c2VkIGZvciBzZXR0aW5nIHZvbHVtZSB0YXJnZXQgSURzCisgKiBAcGRfaGFuZGxlcyA6IGJpdG1hc2sgZm9yIFBEIGhhbmRsZXMKKyAqIEBwZF9oYW5kbGVzX3N6IDogc2l6ZSBvZiBwZF9oYW5kbGUgYml0bWFzawogICogQGNvbmZpZ19wYWdlX3N6OiBjb25maWcgcGFnZSBzaXplCiAgKiBAY29uZmlnX3BhZ2U6IHJlc2VydmUgbWVtb3J5IGZvciBjb25maWcgcGFnZSBwYXlsb2FkCiAgKiBAY29uZmlnX3BhZ2VfZG1hOgpAQCAtNTY4LDYgKzU3NSw4IEBACiAgKiBAcmVwbHlfcG9zdF9mcmVlX2RtYToKICAqIEByZXBseV9wb3N0X2ZyZWVfZG1hX3Bvb2w6CiAgKiBAcmVwbHlfcG9zdF9ob3N0X2luZGV4OiBoZWFkIGluZGV4IGluIHRoZSBwb29sIHdoZXJlIEZXIGNvbXBsZXRlcyBJTworICogQGRlbGF5ZWRfdHJfbGlzdDogdGFyZ2V0IHJlc2V0IGxpbmsgbGlzdAorICogQGRlbGF5ZWRfdHJfdm9sdW1lX2xpc3Q6IHZvbHVtZSB0YXJnZXQgcmVzZXQgbGluayBsaXN0CiAgKi8KIHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKQEAgLTYwMCwxNyArNjA5LDIzIEBACiAJaW50CQlhZW5fZXZlbnRfcmVhZF9mbGFnOwogCXU4CQlicm9hZGNhc3RfYWVuX2J1c3k7CiAJdTgJCXNob3N0X3JlY292ZXJ5OworCisJc3RydWN0IG11dGV4CXJlc2V0X2luX3Byb2dyZXNzX211dGV4OwogCXN0cnVjdCBjb21wbGV0aW9uCXNob3N0X3JlY292ZXJ5X2RvbmU7CiAJc3BpbmxvY2tfdCAJaW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2s7CiAJdTgJCWlvY19saW5rX3Jlc2V0X2luX3Byb2dyZXNzOworCWludAkJaW9jX3Jlc2V0X2luX3Byb2dyZXNzX3N0YXR1czsKKwogCXU4CQlpZ25vcmVfbG9naW5mb3M7CiAJdTgJCXJlbW92ZV9ob3N0OworCXU4CQlwY2lfZXJyb3JfcmVjb3Zlcnk7CiAJdTgJCXdhaXRfZm9yX3BvcnRfZW5hYmxlX3RvX2NvbXBsZXRlOwogCiAJdTgJCW1zaXhfZW5hYmxlOwogCXUxNgkJbXNpeF92ZWN0b3JfY291bnQ7CiAJdTMyCQkqbXNpeF90YWJsZTsKIAl1MzIJCSptc2l4X3RhYmxlX2JhY2t1cDsKKwl1MzIJCWlvY19yZXNldF9jb3VudDsKIAogCS8qIGludGVybmFsIGNvbW1hbmRzLCBjYWxsYmFjayBpbmRleCAqLwogCXU4CQlzY3NpX2lvX2NiX2lkeDsKQEAgLTYyMSw2ICs2MzYsNyBAQAogCXU4CQliYXNlX2NiX2lkeDsKIAl1OAkJY29uZmlnX2NiX2lkeDsKIAl1OAkJdG1fdHJfY2JfaWR4OworCXU4CQl0bV90cl92b2x1bWVfY2JfaWR4OwogCXU4CQl0bV9zYXNfY29udHJvbF9jYl9pZHg7CiAJc3RydWN0IF9pbnRlcm5hbF9jbWQgYmFzZV9jbWRzOwogCXN0cnVjdCBfaW50ZXJuYWxfY21kIHRyYW5zcG9ydF9jbWRzOwpAQCAtNjY0LDYgKzY4MCw5IEBACiAJdTE2CQlkZXZpY2VfbWlzc2luZ19kZWxheTsKIAlpbnQJCXNhc19pZDsKIAorCXZvaWQJCSpwZF9oYW5kbGVzOworCXUxNgkJcGRfaGFuZGxlc19zejsKKwogCS8qIGNvbmZpZyBwYWdlICovCiAJdTE2CQljb25maWdfcGFnZV9zejsKIAl2b2lkIAkJKmNvbmZpZ19wYWdlOwpAQCAtNzM1LDYgKzc1NCw3IEBACiAJdTMyCQlyZXBseV9wb3N0X2hvc3RfaW5kZXg7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRlbGF5ZWRfdHJfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRlbGF5ZWRfdHJfdm9sdW1lX2xpc3Q7CiAKIAkvKiBkaWFnIGJ1ZmZlciBzdXBwb3J0ICovCiAJdTgJCSpkaWFnX2J1ZmZlcltNUEkyX0RJQUdfQlVGX1RZUEVfQ09VTlRdOwpAQCAtNzQ1LDYgKzc2NSw4IEBACiAJTXBpMk1hbnVmYWN0dXJpbmdQYWdlMTBfdCBtYW51X3BnMTA7CiAJdTMyCQlwcm9kdWN0X3NwZWNpZmljW01QSTJfRElBR19CVUZfVFlQRV9DT1VOVF1bMjNdOwogCXUzMgkJZGlhZ25vc3RpY19mbGFnc1tNUEkyX0RJQUdfQlVGX1RZUEVfQ09VTlRdOworCXUzMgkJcmluZ19idWZmZXJfb2Zmc2V0OworCXUzMgkJcmluZ19idWZmZXJfc3o7CiB9OwogCiB0eXBlZGVmIHU4ICgqTVBUX0NBTExCQUNLKShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBtc2l4X2luZGV4LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY29uZmlnLmMKaW5kZXggYzY1NDQyOS4uNmFmZDY3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2NvbmZpZy5jCkBAIC0xNTksNyArMTU5LDcgQEAKIAlpZiAoIWRlc2MpCiAJCXJldHVybjsKIAotCXByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6ICVzKCVkKSwgYWN0aW9uKCVkKSwgZm9ybSgweCUwOHgpLCAiCisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiAlcyglZCksIGFjdGlvbiglZCksIGZvcm0oMHglMDh4KSwgIgogCSAgICAic21pZCglZClcbiIsIGlvYy0+bmFtZSwgY2FsbGluZ19mdW5jdGlvbl9uYW1lLCBkZXNjLAogCSAgICBtcGlfcmVxdWVzdC0+SGVhZGVyLlBhZ2VOdW1iZXIsIG1waV9yZXF1ZXN0LT5BY3Rpb24sCiAJICAgIGxlMzJfdG9fY3B1KG1waV9yZXF1ZXN0LT5QYWdlQWRkcmVzcyksIHNtaWQpOwpAQCAtMTY4LDcgKzE2OCw3IEBACiAJCXJldHVybjsKIAogCWlmIChtcGlfcmVwbHktPklPQ1N0YXR1cyB8fCBtcGlfcmVwbHktPklPQ0xvZ0luZm8pCi0JCXByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVAorCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVAogCQkgICAgIlx0aW9jc3RhdHVzKDB4JTA0eCksIGxvZ2luZm8oMHglMDh4KVxuIiwKIAkJICAgIGlvYy0+bmFtZSwgbGUxNl90b19jcHUobXBpX3JlcGx5LT5JT0NTdGF0dXMpLAogCQkgICAgbGUzMl90b19jcHUobXBpX3JlcGx5LT5JT0NMb2dJbmZvKSk7CkBAIC00MDEsNyArNDAxLDcgQEAKIAkJaWYgKGlvYy0+Y29uZmlnX2NtZHMuc21pZCA9PSBzbWlkKQogCQkJbXB0MnNhc19iYXNlX2ZyZWVfc21pZChpb2MsIHNtaWQpOwogCQlpZiAoKGlvYy0+c2hvc3RfcmVjb3ZlcnkpIHx8IChpb2MtPmNvbmZpZ19jbWRzLnN0YXR1cyAmCi0JCSAgICBNUFQyX0NNRF9SRVNFVCkpCisJCSAgICBNUFQyX0NNRF9SRVNFVCkgfHwgaW9jLT5wY2lfZXJyb3JfcmVjb3ZlcnkpCiAJCQlnb3RvIHJldHJ5X2NvbmZpZzsKIAkJaXNzdWVfaG9zdF9yZXNldCA9IDE7CiAJCXIgPSAtRUZBVUxUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMKaW5kZXggZDg4ZTk3NS4uYjc3NDk3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jCkBAIC04MCw2ICs4MCwzMiBAQAogCUJMT0NLSU5HLAogfTsKIAorLyoqCisgKiBfY3RsX3Nhc19kZXZpY2VfZmluZF9ieV9oYW5kbGUgLSBzYXMgZGV2aWNlIHNlYXJjaAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAaGFuZGxlOiBzYXMgZGV2aWNlIGhhbmRsZSAoYXNzaWduZWQgYnkgZmlybXdhcmUpCisgKiBDb250ZXh0OiBDYWxsaW5nIGZ1bmN0aW9uIHNob3VsZCBhY3F1aXJlIGlvYy0+c2FzX2RldmljZV9sb2NrCisgKgorICogVGhpcyBzZWFyY2hlcyBmb3Igc2FzX2RldmljZSBiYXNlZCBvbiBzYXNfYWRkcmVzcywgdGhlbiByZXR1cm4gc2FzX2RldmljZQorICogb2JqZWN0LgorICovCitzdGF0aWMgc3RydWN0IF9zYXNfZGV2aWNlICoKK19jdGxfc2FzX2RldmljZV9maW5kX2J5X2hhbmRsZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBoYW5kbGUpCit7CisJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlLCAqcjsKKworCXIgPSBOVUxMOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2FzX2RldmljZSwgJmlvYy0+c2FzX2RldmljZV9saXN0LCBsaXN0KSB7CisJCWlmIChzYXNfZGV2aWNlLT5oYW5kbGUgIT0gaGFuZGxlKQorCQkJY29udGludWU7CisJCXIgPSBzYXNfZGV2aWNlOworCQlnb3RvIG91dDsKKwl9CisKKyBvdXQ6CisJcmV0dXJuIHI7Cit9CisKICNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKIC8qKgogICogX2N0bF9kaXNwbGF5X3NvbWVfZGVidWcgLSBkZWJ1ZyByb3V0aW5lCkBAIC0xODgsMTQgKzIxNCwxNCBAQAogCWlmICghZGVzYykKIAkJcmV0dXJuOwogCi0JcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogJXMsIHNtaWQoJWQpXG4iLAorCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogJXMsIHNtaWQoJWQpXG4iLAogCSAgICBpb2MtPm5hbWUsIGNhbGxpbmdfZnVuY3Rpb25fbmFtZSwgZGVzYywgc21pZCk7CiAKIAlpZiAoIW1waV9yZXBseSkKIAkJcmV0dXJuOwogCiAJaWYgKG1waV9yZXBseS0+SU9DU3RhdHVzIHx8IG1waV9yZXBseS0+SU9DTG9nSW5mbykKLQkJcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UCisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UCiAJCSAgICAiXHRpb2NzdGF0dXMoMHglMDR4KSwgbG9naW5mbygweCUwOHgpXG4iLAogCQkgICAgaW9jLT5uYW1lLCBsZTE2X3RvX2NwdShtcGlfcmVwbHktPklPQ1N0YXR1cyksCiAJCSAgICBsZTMyX3RvX2NwdShtcGlfcmVwbHktPklPQ0xvZ0luZm8pKTsKQEAgLTIwNSw4ICsyMzEsMjQgQEAKIAkgICAgTVBJMl9GVU5DVElPTl9SQUlEX1NDU0lfSU9fUEFTU1RIUk9VR0gpIHsKIAkJTXBpMlNDU0lJT1JlcGx5X3QgKnNjc2lfcmVwbHkgPQogCQkgICAgKE1waTJTQ1NJSU9SZXBseV90ICopbXBpX3JlcGx5OworCQlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2UgPSBOVUxMOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlzYXNfZGV2aWNlID0gX2N0bF9zYXNfZGV2aWNlX2ZpbmRfYnlfaGFuZGxlKGlvYywKKwkJICAgIGxlMTZfdG9fY3B1KHNjc2lfcmVwbHktPkRldkhhbmRsZSkpOworCQlpZiAoc2FzX2RldmljZSkgeworCQkJcHJpbnRrKE1QVDJTQVNfV0FSTl9GTVQgIlx0c2FzX2FkZHJlc3MoMHglMDE2bGx4KSwgIgorCQkJICAgICJwaHkoJWQpXG4iLCBpb2MtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkgICAgc2FzX2RldmljZS0+c2FzX2FkZHJlc3MsIHNhc19kZXZpY2UtPnBoeSk7CisJCQlwcmludGsoTVBUMlNBU19XQVJOX0ZNVAorCQkJICAgICJcdGVuY2xvc3VyZV9sb2dpY2FsX2lkKDB4JTAxNmxseCksIHNsb3QoJWQpXG4iLAorCQkJICAgIGlvYy0+bmFtZSwgc2FzX2RldmljZS0+ZW5jbG9zdXJlX2xvZ2ljYWxfaWQsCisJCQkgICAgc2FzX2RldmljZS0+c2xvdCk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAkJaWYgKHNjc2lfcmVwbHktPlNDU0lTdGF0ZSB8fCBzY3NpX3JlcGx5LT5TQ1NJU3RhdHVzKQotCQkJcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UCisJCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVAogCQkJICAgICJcdHNjc2lfc3RhdGUoMHglMDJ4KSwgc2NzaV9zdGF0dXMiCiAJCQkgICAgIigweCUwMngpXG4iLCBpb2MtPm5hbWUsCiAJCQkgICAgc2NzaV9yZXBseS0+U0NTSVN0YXRlLApAQCAtMjMzLDYgKzI3NSw5IEBACiAJdTMyIHJlcGx5KQogewogCU1QSTJEZWZhdWx0UmVwbHlfdCAqbXBpX3JlcGx5OworCU1waTJTQ1NJSU9SZXBseV90ICpzY3NpaW9fcmVwbHk7CisJY29uc3Qgdm9pZCAqc2Vuc2VfZGF0YTsKKwl1MzIgc3o7CiAKIAlpZiAoaW9jLT5jdGxfY21kcy5zdGF0dXMgPT0gTVBUMl9DTURfTk9UX1VTRUQpCiAJCXJldHVybiAxOwpAQCAtMjQzLDYgKzI4OCwyMCBAQAogCWlmIChtcGlfcmVwbHkpIHsKIAkJbWVtY3B5KGlvYy0+Y3RsX2NtZHMucmVwbHksIG1waV9yZXBseSwgbXBpX3JlcGx5LT5Nc2dMZW5ndGgqNCk7CiAJCWlvYy0+Y3RsX2NtZHMuc3RhdHVzIHw9IE1QVDJfQ01EX1JFUExZX1ZBTElEOworCQkvKiBnZXQgc2Vuc2UgZGF0YSAqLworCQlpZiAobXBpX3JlcGx5LT5GdW5jdGlvbiA9PSBNUEkyX0ZVTkNUSU9OX1NDU0lfSU9fUkVRVUVTVCB8fAorCQkgICAgbXBpX3JlcGx5LT5GdW5jdGlvbiA9PQorCQkgICAgTVBJMl9GVU5DVElPTl9SQUlEX1NDU0lfSU9fUEFTU1RIUk9VR0gpIHsKKwkJCXNjc2lpb19yZXBseSA9IChNcGkyU0NTSUlPUmVwbHlfdCAqKW1waV9yZXBseTsKKwkJCWlmIChzY3NpaW9fcmVwbHktPlNDU0lTdGF0ZSAmCisJCQkgICAgTVBJMl9TQ1NJX1NUQVRFX0FVVE9TRU5TRV9WQUxJRCkgeworCQkJCXN6ID0gbWluX3QodTMyLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUsCisJCQkJICAgIGxlMzJfdG9fY3B1KHNjc2lpb19yZXBseS0+U2Vuc2VDb3VudCkpOworCQkJCXNlbnNlX2RhdGEgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NlbnNlX2J1ZmZlcihpb2MsCisJCQkJICAgIHNtaWQpOworCQkJCW1lbWNweShpb2MtPmN0bF9jbWRzLnNlbnNlLCBzZW5zZV9kYXRhLCBzeik7CisJCQl9CisJCX0KIAl9CiAjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCiAJX2N0bF9kaXNwbGF5X3NvbWVfZGVidWcoaW9jLCBzbWlkLCAiY3RsX2RvbmUiLCBtcGlfcmVwbHkpOwpAQCAtMzkyLDcgKzQ1MSw3IEBACiAKIAlzd2l0Y2ggKHJlc2V0X3BoYXNlKSB7CiAJY2FzZSBNUFQyX0lPQ19QUkVfUkVTRVQ6Ci0JCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6ICIKKwkJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiAiCiAJCSAgICAiTVBUMl9JT0NfUFJFX1JFU0VUXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CiAJCWZvciAoaSA9IDA7IGkgPCBNUEkyX0RJQUdfQlVGX1RZUEVfQ09VTlQ7IGkrKykgewogCQkJaWYgKCEoaW9jLT5kaWFnX2J1ZmZlcl9zdGF0dXNbaV0gJgpAQCAtNDA1LDcgKzQ2NCw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBNUFQyX0lPQ19BRlRFUl9SRVNFVDoKLQkJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogIgorCQlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6ICIKIAkJICAgICJNUFQyX0lPQ19BRlRFUl9SRVNFVFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOwogCQlpZiAoaW9jLT5jdGxfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9QRU5ESU5HKSB7CiAJCQlpb2MtPmN0bF9jbWRzLnN0YXR1cyB8PSBNUFQyX0NNRF9SRVNFVDsKQEAgLTQxNCw3ICs0NzMsNyBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgTVBUMl9JT0NfRE9ORV9SRVNFVDoKLQkJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogIgorCQlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6ICIKIAkJICAgICJNUFQyX0lPQ19ET05FX1JFU0VUXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CiAKIAkJZm9yIChpID0gMDsgaSA8IE1QSTJfRElBR19CVUZfVFlQRV9DT1VOVDsgaSsrKSB7CkBAIC01MzEsNyArNTkwLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKIAogCWlmICghZm91bmQpIHsKLQkJZGN0bHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6ICIKKwkJZGN0bHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogIgogCQkgICAgImhhbmRsZSgweCUwNHgpLCBsdW4oJWQpLCBubyBhY3RpdmUgbWlkISFcbiIsIGlvYy0+bmFtZSwKIAkJICAgIGRlc2MsIGxlMTZfdG9fY3B1KHRtX3JlcXVlc3QtPkRldkhhbmRsZSksIGx1bikpOwogCQl0bV9yZXBseSA9IGlvYy0+Y3RsX2NtZHMucmVwbHk7CkBAIC01NDksNyArNjA4LDcgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JZGN0bHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6ICIKKwlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiAiCiAJICAgICJoYW5kbGUoMHglMDR4KSwgbHVuKCVkKSwgdGFza19taWQoJWQpXG4iLCBpb2MtPm5hbWUsCiAJICAgIGRlc2MsIGxlMTZfdG9fY3B1KHRtX3JlcXVlc3QtPkRldkhhbmRsZSksIGx1biwKIAkgICAgIGxlMTZfdG9fY3B1KHRtX3JlcXVlc3QtPlRhc2tNSUQpKSk7CkBAIC01NjcsNyArNjI2LDcgQEAKIF9jdGxfZG9fbXB0X2NvbW1hbmQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAogICAgIHN0cnVjdCBtcHQyX2lvY3RsX2NvbW1hbmQga2FyZywgdm9pZCBfX3VzZXIgKm1mLCBlbnVtIGJsb2NrX3N0YXRlIHN0YXRlKQogewotCU1QSTJSZXF1ZXN0SGVhZGVyX3QgKm1waV9yZXF1ZXN0OworCU1QSTJSZXF1ZXN0SGVhZGVyX3QgKm1waV9yZXF1ZXN0ID0gTlVMTCwgKnJlcXVlc3Q7CiAJTVBJMkRlZmF1bHRSZXBseV90ICptcGlfcmVwbHk7CiAJdTMyIGlvY19zdGF0ZTsKIAl1MTYgaW9jX3N0YXR1czsKQEAgLTU3Niw3ICs2MzUsNiBAQAogCXU4IGlzc3VlX3Jlc2V0OwogCXUzMiBzejsKIAl2b2lkICpwc2dlOwotCXZvaWQgKnByaXZfc2Vuc2UgPSBOVUxMOwogCXZvaWQgKmRhdGFfb3V0ID0gTlVMTDsKIAlkbWFfYWRkcl90IGRhdGFfb3V0X2RtYTsKIAlzaXplX3QgZGF0YV9vdXRfc3ogPSAwOwpAQCAtNjIxLDMxICs2NzksNTAgQEAKIAkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBpb2MgaXMgb3BlcmF0aW9uYWxcbiIsCiAJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKIAotCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWRfc2NzaWlvKGlvYywgaW9jLT5jdGxfY2JfaWR4LCBOVUxMKTsKLQlpZiAoIXNtaWQpIHsKLQkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBvYnRhaW5pbmcgYSBzbWlkXG4iLAotCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7Ci0JCXJldCA9IC1FQUdBSU47CisJbXBpX3JlcXVlc3QgPSBremFsbG9jKGlvYy0+cmVxdWVzdF9zeiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtcGlfcmVxdWVzdCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIG9idGFpbmluZyBhIG1lbW9yeSBmb3IgIgorCQkgICAgIm1waV9yZXF1ZXN0XG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gMDsKLQlpb2MtPmN0bF9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX1BFTkRJTkc7Ci0JbWVtc2V0KGlvYy0+Y3RsX2NtZHMucmVwbHksIDAsIGlvYy0+cmVwbHlfc3opOwotCW1waV9yZXF1ZXN0ID0gbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUoaW9jLCBzbWlkKTsKLQlpb2MtPmN0bF9jbWRzLnNtaWQgPSBzbWlkOwotCWRhdGFfb3V0X3N6ID0ga2FyZy5kYXRhX291dF9zaXplOwotCWRhdGFfaW5fc3ogPSBrYXJnLmRhdGFfaW5fc2l6ZTsKLQogCS8qIGNvcHkgaW4gcmVxdWVzdCBtZXNzYWdlIGZyYW1lIGZyb20gdXNlciAqLwogCWlmIChjb3B5X2Zyb21fdXNlcihtcGlfcmVxdWVzdCwgbWYsIGthcmcuZGF0YV9zZ2Vfb2Zmc2V0KjQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwgX19GSUxFX18sIF9fTElORV9fLAogCQkgICAgX19mdW5jX18pOwogCQlyZXQgPSAtRUZBVUxUOwotCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgc21pZCk7CiAJCWdvdG8gb3V0OwogCX0KIAorCWlmIChtcGlfcmVxdWVzdC0+RnVuY3Rpb24gPT0gTVBJMl9GVU5DVElPTl9TQ1NJX1RBU0tfTUdNVCkgeworCQlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkX2hwcihpb2MsIGlvYy0+Y3RsX2NiX2lkeCk7CisJCWlmICghc21pZCkgeworCQkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBvYnRhaW5pbmcgYSBzbWlkXG4iLAorCQkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQkJcmV0ID0gLUVBR0FJTjsKKwkJCWdvdG8gb3V0OworCQl9CisJfSBlbHNlIHsKKworCQlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkX3Njc2lpbyhpb2MsIGlvYy0+Y3RsX2NiX2lkeCwgTlVMTCk7CisJCWlmICghc21pZCkgeworCQkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBvYnRhaW5pbmcgYSBzbWlkXG4iLAorCQkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQkJcmV0ID0gLUVBR0FJTjsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJcmV0ID0gMDsKKwlpb2MtPmN0bF9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX1BFTkRJTkc7CisJbWVtc2V0KGlvYy0+Y3RsX2NtZHMucmVwbHksIDAsIGlvYy0+cmVwbHlfc3opOworCXJlcXVlc3QgPSBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZShpb2MsIHNtaWQpOworCW1lbWNweShyZXF1ZXN0LCBtcGlfcmVxdWVzdCwga2FyZy5kYXRhX3NnZV9vZmZzZXQqNCk7CisJaW9jLT5jdGxfY21kcy5zbWlkID0gc21pZDsKKwlkYXRhX291dF9zeiA9IGthcmcuZGF0YV9vdXRfc2l6ZTsKKwlkYXRhX2luX3N6ID0ga2FyZy5kYXRhX2luX3NpemU7CisKIAlpZiAobXBpX3JlcXVlc3QtPkZ1bmN0aW9uID09IE1QSTJfRlVOQ1RJT05fU0NTSV9JT19SRVFVRVNUIHx8CiAJICAgIG1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9PSBNUEkyX0ZVTkNUSU9OX1JBSURfU0NTSV9JT19QQVNTVEhST1VHSCkgewogCQlpZiAoIWxlMTZfdG9fY3B1KG1waV9yZXF1ZXN0LT5GdW5jdGlvbkRlcGVuZGVudDEpIHx8CkBAIC02OTEsNyArNzY4LDcgQEAKIAl9CiAKIAkvKiBhZGQgc2NhdHRlciBnYXRoZXIgZWxlbWVudHMgKi8KLQlwc2dlID0gKHZvaWQgKiltcGlfcmVxdWVzdCArIChrYXJnLmRhdGFfc2dlX29mZnNldCo0KTsKKwlwc2dlID0gKHZvaWQgKilyZXF1ZXN0ICsgKGthcmcuZGF0YV9zZ2Vfb2Zmc2V0KjQpOwogCiAJaWYgKCFkYXRhX291dF9zeiAmJiAhZGF0YV9pbl9zeikgewogCQltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgcHNnZSk7CkBAIC03MzksMTEgKzgxNiwxMSBAQAogCWNhc2UgTVBJMl9GVU5DVElPTl9SQUlEX1NDU0lfSU9fUEFTU1RIUk9VR0g6CiAJewogCQlNcGkyU0NTSUlPUmVxdWVzdF90ICpzY3NpaW9fcmVxdWVzdCA9Ci0JCSAgICAoTXBpMlNDU0lJT1JlcXVlc3RfdCAqKW1waV9yZXF1ZXN0OworCQkgICAgKE1waTJTQ1NJSU9SZXF1ZXN0X3QgKilyZXF1ZXN0OworCQlzY3NpaW9fcmVxdWVzdC0+U2Vuc2VCdWZmZXJMZW5ndGggPSBTQ1NJX1NFTlNFX0JVRkZFUlNJWkU7CiAJCXNjc2lpb19yZXF1ZXN0LT5TZW5zZUJ1ZmZlckxvd0FkZHJlc3MgPQogCQkgICAgbXB0MnNhc19iYXNlX2dldF9zZW5zZV9idWZmZXJfZG1hKGlvYywgc21pZCk7Ci0JCXByaXZfc2Vuc2UgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NlbnNlX2J1ZmZlcihpb2MsIHNtaWQpOwotCQltZW1zZXQocHJpdl9zZW5zZSwgMCwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKKwkJbWVtc2V0KGlvYy0+Y3RsX2NtZHMuc2Vuc2UsIDAsIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7CiAJCWlmIChtcGlfcmVxdWVzdC0+RnVuY3Rpb24gPT0gTVBJMl9GVU5DVElPTl9TQ1NJX0lPX1JFUVVFU1QpCiAJCQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfc2NzaV9pbyhpb2MsIHNtaWQsCiAJCQkgICAgbGUxNl90b19jcHUobXBpX3JlcXVlc3QtPkZ1bmN0aW9uRGVwZW5kZW50MSkpOwpAQCAtNzU0LDkgKzgzMSw5IEBACiAJY2FzZSBNUEkyX0ZVTkNUSU9OX1NDU0lfVEFTS19NR01UOgogCXsKIAkJTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcXVlc3RfdCAqdG1fcmVxdWVzdCA9Ci0JCSAgICAoTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcXVlc3RfdCAqKW1waV9yZXF1ZXN0OworCQkgICAgKE1waTJTQ1NJVGFza01hbmFnZW1lbnRSZXF1ZXN0X3QgKilyZXF1ZXN0OwogCi0JCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiVEFTS19NR01UOiAiCisJCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJUQVNLX01HTVQ6ICIKIAkJICAgICJoYW5kbGUoMHglMDR4KSwgdGFza190eXBlKDB4JTAyeClcbiIsIGlvYy0+bmFtZSwKIAkJICAgIGxlMTZfdG9fY3B1KHRtX3JlcXVlc3QtPkRldkhhbmRsZSksIHRtX3JlcXVlc3QtPlRhc2tUeXBlKSk7CiAKQEAgLTg1MSw3ICs5MjgsNyBAQAogCQlNcGkyU0NTSVRhc2tNYW5hZ2VtZW50UmVwbHlfdCAqdG1fcmVwbHkgPQogCQkgICAgKE1waTJTQ1NJVGFza01hbmFnZW1lbnRSZXBseV90ICopbXBpX3JlcGx5OwogCi0JCXByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiVEFTS19NR01UOiAiCisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJUQVNLX01HTVQ6ICIKIAkJICAgICJJT0NTdGF0dXMoMHglMDR4KSwgSU9DTG9nSW5mbygweCUwOHgpLCAiCiAJCSAgICAiVGVybWluYXRpb25Db3VudCgweCUwOHgpXG4iLCBpb2MtPm5hbWUsCiAJCSAgICBsZTE2X3RvX2NwdSh0bV9yZXBseS0+SU9DU3RhdHVzKSwKQEAgLTg4Nyw3ICs5NjQsOCBAQAogCSAgICBNUEkyX0ZVTkNUSU9OX1NDU0lfSU9fUkVRVUVTVCB8fCBtcGlfcmVxdWVzdC0+RnVuY3Rpb24gPT0KIAkgICAgTVBJMl9GVU5DVElPTl9SQUlEX1NDU0lfSU9fUEFTU1RIUk9VR0gpKSB7CiAJCXN6ID0gbWluX3QodTMyLCBrYXJnLm1heF9zZW5zZV9ieXRlcywgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKLQkJaWYgKGNvcHlfdG9fdXNlcihrYXJnLnNlbnNlX2RhdGFfcHRyLCBwcml2X3NlbnNlLCBzeikpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihrYXJnLnNlbnNlX2RhdGFfcHRyLAorCQkJaW9jLT5jdGxfY21kcy5zZW5zZSwgc3opKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsIF9fRklMRV9fLAogCQkJICAgIF9fTElORV9fLCBfX2Z1bmNfXyk7CiAJCQlyZXQgPSAtRU5PREFUQTsKQEAgLTkyNiw2ICsxMDA0LDcgQEAKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChpb2MtPnBkZXYsIGRhdGFfb3V0X3N6LCBkYXRhX291dCwKIAkJICAgIGRhdGFfb3V0X2RtYSk7CiAKKwlrZnJlZShtcGlfcmVxdWVzdCk7CiAJaW9jLT5jdGxfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKIAltdXRleF91bmxvY2soJmlvYy0+Y3RsX2NtZHMubXV0ZXgpOwogCXJldHVybiByZXQ7CkBAIC05NTAsNyArMTAyOSw3IEBACiAJaWYgKF9jdGxfdmVyaWZ5X2FkYXB0ZXIoa2FyZy5oZHIuaW9jX251bWJlciwgJmlvYykgPT0gLTEgfHwgIWlvYykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogZW50ZXJcbiIsIGlvYy0+bmFtZSwKKwlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBlbnRlclxuIiwgaW9jLT5uYW1lLAogCSAgICBfX2Z1bmNfXykpOwogCiAJbWVtc2V0KCZrYXJnLCAwICwgc2l6ZW9mKGthcmcpKTsKQEAgLTk5OCw3ICsxMDc3LDcgQEAKIAlpZiAoX2N0bF92ZXJpZnlfYWRhcHRlcihrYXJnLmhkci5pb2NfbnVtYmVyLCAmaW9jKSA9PSAtMSB8fCAhaW9jKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBlbnRlclxuIiwgaW9jLT5uYW1lLAorCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGVudGVyXG4iLCBpb2MtPm5hbWUsCiAJICAgIF9fZnVuY19fKSk7CiAKIAlrYXJnLmV2ZW50X2VudHJpZXMgPSBNUFQyU0FTX0NUTF9FVkVOVF9MT0dfU0laRTsKQEAgLTEwMzEsNyArMTExMCw3IEBACiAJaWYgKF9jdGxfdmVyaWZ5X2FkYXB0ZXIoa2FyZy5oZHIuaW9jX251bWJlciwgJmlvYykgPT0gLTEgfHwgIWlvYykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogZW50ZXJcbiIsIGlvYy0+bmFtZSwKKwlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBlbnRlclxuIiwgaW9jLT5uYW1lLAogCSAgICBfX2Z1bmNfXykpOwogCiAJaWYgKGlvYy0+ZXZlbnRfbG9nKQpAQCAtMTA3Myw3ICsxMTUyLDcgQEAKIAlpZiAoX2N0bF92ZXJpZnlfYWRhcHRlcihrYXJnLmhkci5pb2NfbnVtYmVyLCAmaW9jKSA9PSAtMSB8fCAhaW9jKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBlbnRlclxuIiwgaW9jLT5uYW1lLAorCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGVudGVyXG4iLCBpb2MtPm5hbWUsCiAJICAgIF9fZnVuY19fKSk7CiAKIAludW1iZXJfYnl0ZXMgPSBrYXJnLmhkci5tYXhfZGF0YV9zaXplIC0KQEAgLTExMTgsNyArMTE5Nyw3IEBACiAJaWYgKF9jdGxfdmVyaWZ5X2FkYXB0ZXIoa2FyZy5oZHIuaW9jX251bWJlciwgJmlvYykgPT0gLTEgfHwgIWlvYykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogZW50ZXJcbiIsIGlvYy0+bmFtZSwKKwlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBlbnRlclxuIiwgaW9jLT5uYW1lLAogCSAgICBfX2Z1bmNfXykpOwogCiAJcmV0dmFsID0gbXB0MnNhc19iYXNlX2hhcmRfcmVzZXRfaGFuZGxlcihpb2MsIENBTl9TTEVFUCwKQEAgLTEyMTksNyArMTI5OCw3IEBACiAJaWYgKF9jdGxfdmVyaWZ5X2FkYXB0ZXIoa2FyZy5oZHIuaW9jX251bWJlciwgJmlvYykgPT0gLTEgfHwgIWlvYykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlc1xuIiwgaW9jLT5uYW1lLAorCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKIAkgICAgX19mdW5jX18pKTsKIAogCXJjID0gX2N0bF9idGRoX3NlYXJjaF9zYXNfZGV2aWNlKGlvYywgJmthcmcpOwpAQCAtMTI4OCw3ICsxMzY3LDcgQEAKIAl1MTYgaW9jX3N0YXR1czsKIAl1OCBpc3N1ZV9yZXNldCA9IDA7CiAKLQlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlc1xuIiwgaW9jLT5uYW1lLAorCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKIAkgICAgX19mdW5jX18pKTsKIAogCWlmIChpb2MtPmN0bF9jbWRzLnN0YXR1cyAhPSBNUFQyX0NNRF9OT1RfVVNFRCkgewpAQCAtMTM3Niw3ICsxNDU1LDcgQEAKIAltcGlfcmVxdWVzdC0+VkZfSUQgPSAwOyAvKiBUT0RPICovCiAJbXBpX3JlcXVlc3QtPlZQX0lEID0gMDsKIAotCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBkaWFnX2J1ZmZlcigweCVwKSwgIgorCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGRpYWdfYnVmZmVyKDB4JXApLCAiCiAJICAgICJkbWEoMHglbGx4KSwgc3ooJWQpXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLCByZXF1ZXN0X2RhdGEsCiAJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmVxdWVzdF9kYXRhX2RtYSwKIAkgICAgbGUzMl90b19jcHUobXBpX3JlcXVlc3QtPkJ1ZmZlckxlbmd0aCkpKTsKQEAgLTE0MTQsMTAgKzE0OTMsMTAgQEAKIAlpZiAoaW9jX3N0YXR1cyA9PSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTKSB7CiAJCWlvYy0+ZGlhZ19idWZmZXJfc3RhdHVzW2J1ZmZlcl90eXBlXSB8PQogCQkJTVBUMl9ESUFHX0JVRkZFUl9JU19SRUdJU1RFUkVEOwotCQlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogc3VjY2Vzc1xuIiwKKwkJZGN0bHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogc3VjY2Vzc1xuIiwKIAkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKIAl9IGVsc2UgewotCQlwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBpb2Nfc3RhdHVzKDB4JTA0eCkgIgorCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGlvY19zdGF0dXMoMHglMDR4KSAiCiAJCSAgICAibG9nX2luZm8oMHglMDh4KVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywKIAkJICAgIGlvY19zdGF0dXMsIGxlMzJfdG9fY3B1KG1waV9yZXBseS0+SU9DTG9nSW5mbykpOwogCQlyYyA9IC1FRkFVTFQ7CkBAIC0xNTQxLDcgKzE2MjAsNyBAQAogCWlmIChfY3RsX3ZlcmlmeV9hZGFwdGVyKGthcmcuaGRyLmlvY19udW1iZXIsICZpb2MpID09IC0xIHx8ICFpb2MpCiAJCXJldHVybiAtRU5PREVWOwogCi0JZGN0bHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKKwlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCiAJICAgIF9fZnVuY19fKSk7CiAKIAlidWZmZXJfdHlwZSA9IGthcmcudW5pcXVlX2lkICYgMHgwMDAwMDBmZjsKQEAgLTE2MTEsNyArMTY5MCw3IEBACiAJaWYgKF9jdGxfdmVyaWZ5X2FkYXB0ZXIoa2FyZy5oZHIuaW9jX251bWJlciwgJmlvYykgPT0gLTEgfHwgIWlvYykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlc1xuIiwgaW9jLT5uYW1lLAorCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKIAkgICAgX19mdW5jX18pKTsKIAogCWthcmcuYXBwbGljYXRpb25fZmxhZ3MgPSAwOwpAQCAtMTY4OSw3ICsxNzY4LDcgQEAKIAlpbnQgcmM7CiAJdW5zaWduZWQgbG9uZyB0aW1lbGVmdDsKIAotCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCisJZGN0bHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlc1xuIiwgaW9jLT5uYW1lLAogCSAgICBfX2Z1bmNfXykpOwogCiAJcmMgPSAwOwpAQCAtMTY5Nyw3ICsxNzc2LDcgQEAKIAogCWlvY19zdGF0ZSA9IG1wdDJzYXNfYmFzZV9nZXRfaW9jc3RhdGUoaW9jLCAxKTsKIAlpZiAoaW9jX3N0YXRlICE9IE1QSTJfSU9DX1NUQVRFX09QRVJBVElPTkFMKSB7Ci0JCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiAiCisJCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6ICIKIAkJICAgICJza2lwcGluZyBkdWUgdG8gRkFVTFQgc3RhdGVcbiIsIGlvYy0+bmFtZSwKIAkJICAgIF9fZnVuY19fKSk7CiAJCXJjID0gLUVBR0FJTjsKQEAgLTE3NTksMTAgKzE4MzgsMTAgQEAKIAlpZiAoaW9jX3N0YXR1cyA9PSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTKSB7CiAJCWlvYy0+ZGlhZ19idWZmZXJfc3RhdHVzW2J1ZmZlcl90eXBlXSB8PQogCQkgICAgTVBUMl9ESUFHX0JVRkZFUl9JU19SRUxFQVNFRDsKLQkJZGN0bHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6IHN1Y2Nlc3NcbiIsCisJCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IHN1Y2Nlc3NcbiIsCiAJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogaW9jX3N0YXR1cygweCUwNHgpICIKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBpb2Nfc3RhdHVzKDB4JTA0eCkgIgogCQkgICAgImxvZ19pbmZvKDB4JTA4eClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sCiAJCSAgICBpb2Nfc3RhdHVzLCBsZTMyX3RvX2NwdShtcGlfcmVwbHktPklPQ0xvZ0luZm8pKTsKIAkJcmMgPSAtRUZBVUxUOwpAQCAtMTgwMCw3ICsxODc5LDcgQEAKIAlpZiAoX2N0bF92ZXJpZnlfYWRhcHRlcihrYXJnLmhkci5pb2NfbnVtYmVyLCAmaW9jKSA9PSAtMSB8fCAhaW9jKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCisJZGN0bHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlc1xuIiwgaW9jLT5uYW1lLAogCSAgICBfX2Z1bmNfXykpOwogCiAJYnVmZmVyX3R5cGUgPSBrYXJnLnVuaXF1ZV9pZCAmIDB4MDAwMDAwZmY7CkBAIC0xODk2LDcgKzE5NzUsNyBAQAogCWlmIChfY3RsX3ZlcmlmeV9hZGFwdGVyKGthcmcuaGRyLmlvY19udW1iZXIsICZpb2MpID09IC0xIHx8ICFpb2MpCiAJCXJldHVybiAtRU5PREVWOwogCi0JZGN0bHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKKwlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCiAJICAgIF9fZnVuY19fKSk7CiAKIAlidWZmZXJfdHlwZSA9IGthcmcudW5pcXVlX2lkICYgMHgwMDAwMDBmZjsKQEAgLTE5MjcsNyArMjAwNiw3IEBACiAJfQogCiAJZGlhZ19kYXRhID0gKHZvaWQgKikocmVxdWVzdF9kYXRhICsga2FyZy5zdGFydGluZ19vZmZzZXQpOwotCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBkaWFnX2J1ZmZlciglcCksICIKKwlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBkaWFnX2J1ZmZlciglcCksICIKIAkgICAgIm9mZnNldCglZCksIHN6KCVkKVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywKIAkgICAgZGlhZ19kYXRhLCBrYXJnLnN0YXJ0aW5nX29mZnNldCwga2FyZy5ieXRlc190b19yZWFkKSk7CiAKQEAgLTE5NDIsMTEgKzIwMjEsMTEgQEAKIAlpZiAoKGthcmcuZmxhZ3MgJiBNUFQyX0ZMQUdTX1JFUkVHSVNURVIpID09IDApCiAJCXJldHVybiAwOwogCi0JZGN0bHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6IFJlcmVnaXN0ZXIgIgorCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IFJlcmVnaXN0ZXIgIgogCQkiYnVmZmVyX3R5cGUoMHglMDJ4KVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywgYnVmZmVyX3R5cGUpKTsKIAlpZiAoKGlvYy0+ZGlhZ19idWZmZXJfc3RhdHVzW2J1ZmZlcl90eXBlXSAmCiAJICAgIE1QVDJfRElBR19CVUZGRVJfSVNfUkVMRUFTRUQpID09IDApIHsKLQkJZGN0bHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6ICIKKwkJZGN0bHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogIgogCQkgICAgImJ1ZmZlcl90eXBlKDB4JTAyeCkgaXMgc3RpbGwgcmVnaXN0ZXJlZFxuIiwgaW9jLT5uYW1lLAogCQkgICAgIF9fZnVuY19fLCBidWZmZXJfdHlwZSkpOwogCQlyZXR1cm4gMDsKQEAgLTIwMjAsMTAgKzIwOTksMTAgQEAKIAlpZiAoaW9jX3N0YXR1cyA9PSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTKSB7CiAJCWlvYy0+ZGlhZ19idWZmZXJfc3RhdHVzW2J1ZmZlcl90eXBlXSB8PQogCQkgICAgTVBUMl9ESUFHX0JVRkZFUl9JU19SRUdJU1RFUkVEOwotCQlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogc3VjY2Vzc1xuIiwKKwkJZGN0bHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogc3VjY2Vzc1xuIiwKIAkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKIAl9IGVsc2UgewotCQlwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBpb2Nfc3RhdHVzKDB4JTA0eCkgIgorCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGlvY19zdGF0dXMoMHglMDR4KSAiCiAJCSAgICAibG9nX2luZm8oMHglMDh4KVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywKIAkJICAgIGlvY19zdGF0dXMsIGxlMzJfdG9fY3B1KG1waV9yZXBseS0+SU9DTG9nSW5mbykpOwogCQlyYyA9IC1FRkFVTFQ7CkBAIC0yMDc3LDcgKzIxNTYsNyBAQAogCQkgICAgIWlvYykKIAkJCXJldHVybiAtRU5PREVWOwogCi0JCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5KQorCQlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSB8fCBpb2MtPnBjaV9lcnJvcl9yZWNvdmVyeSkKIAkJCXJldHVybiAtRUFHQUlOOwogCiAJCWlmIChfSU9DX1NJWkUoY21kKSA9PSBzaXplb2Yoc3RydWN0IG1wdDJfaW9jdGxfY29tbWFuZCkpIHsKQEAgLTIxNDAsNyArMjIxOSw3IEBACiAJCSAgICAhaW9jKQogCQkJcmV0dXJuIC1FTk9ERVY7CiAKLQkJZGN0bHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVAorCQlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQKIAkJICAgICJ1bnN1cHBvcnRlZCBpb2N0bCBvcGNvZGUoMHglMDh4KVxuIiwgaW9jLT5uYW1lLCBjbWQpKTsKIAkJYnJlYWs7CiAJfQpAQCAtMjE5Niw3ICsyMjc1LDcgQEAKIAlpZiAoX2N0bF92ZXJpZnlfYWRhcHRlcihrYXJnMzIuaGRyLmlvY19udW1iZXIsICZpb2MpID09IC0xIHx8ICFpb2MpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpCisJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkgfHwgaW9jLT5wY2lfZXJyb3JfcmVjb3ZlcnkpCiAJCXJldHVybiAtRUFHQUlOOwogCiAJbWVtc2V0KCZrYXJnLCAwLCBzaXplb2Yoc3RydWN0IG1wdDJfaW9jdGxfY29tbWFuZCkpOwpAQCAtMjU4MSw2ICsyNjYwLDIxOCBAQAogc3RhdGljIERFVklDRV9BVFRSKGZ3ZmF1bHRfZGVidWcsIFNfSVJVR08gfCBTX0lXVVNSLAogICAgIF9jdGxfZndmYXVsdF9kZWJ1Z19zaG93LCBfY3RsX2Z3ZmF1bHRfZGVidWdfc3RvcmUpOwogCisKKy8qKgorICogX2N0bF9pb2NfcmVzZXRfY291bnRfc2hvdyAtIGlvYyByZXNldCBjb3VudAorICogQGNkZXYgLSBwb2ludGVyIHRvIGVtYmVkZGVkIGNsYXNzIGRldmljZQorICogQGJ1ZiAtIHRoZSBidWZmZXIgcmV0dXJuZWQKKyAqCisgKiBUaGlzIGlzIGZpcm13YXJlIHF1ZXVlIGRlcHRoIGxpbWl0CisgKgorICogQSBzeXNmcyAncmVhZC1vbmx5JyBzaG9zdCBhdHRyaWJ1dGUuCisgKi8KK3N0YXRpYyBzc2l6ZV90CitfY3RsX2lvY19yZXNldF9jb3VudF9zaG93KHN0cnVjdCBkZXZpY2UgKmNkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHNob3N0X3ByaXYoc2hvc3QpOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJTA4ZFxuIiwgaW9jLT5pb2NfcmVzZXRfY291bnQpOworfQorc3RhdGljIERFVklDRV9BVFRSKGlvY19yZXNldF9jb3VudCwgU19JUlVHTywKKyAgICBfY3RsX2lvY19yZXNldF9jb3VudF9zaG93LCBOVUxMKTsKKworc3RydWN0IERJQUdfQlVGRkVSX1NUQVJUIHsKKwl1MzIgU2l6ZTsKKwl1MzIgRGlhZ1ZlcnNpb247CisJdTggQnVmZmVyVHlwZTsKKwl1OCBSZXNlcnZlZFszXTsKKwl1MzIgUmVzZXJ2ZWQxOworCXUzMiBSZXNlcnZlZDI7CisJdTMyIFJlc2VydmVkMzsKK307CisvKioKKyAqIF9jdGxfaG9zdF90cmFjZV9idWZmZXJfc2l6ZV9zaG93IC0gaG9zdCBidWZmZXIgc2l6ZSAodHJhY2Ugb25seSkKKyAqIEBjZGV2IC0gcG9pbnRlciB0byBlbWJlZGRlZCBjbGFzcyBkZXZpY2UKKyAqIEBidWYgLSB0aGUgYnVmZmVyIHJldHVybmVkCisgKgorICogQSBzeXNmcyAncmVhZC1vbmx5JyBzaG9zdCBhdHRyaWJ1dGUuCisgKi8KK3N0YXRpYyBzc2l6ZV90CitfY3RsX2hvc3RfdHJhY2VfYnVmZmVyX3NpemVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpjZGV2LAorICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBzaG9zdF9wcml2KHNob3N0KTsKKwl1MzIgc2l6ZSA9IDA7CisJc3RydWN0IERJQUdfQlVGRkVSX1NUQVJUICpyZXF1ZXN0X2RhdGE7CisKKwlpZiAoIWlvYy0+ZGlhZ19idWZmZXJbTVBJMl9ESUFHX0JVRl9UWVBFX1RSQUNFXSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogaG9zdF90cmFjZV9idWZmZXIgaXMgbm90ICIKKwkJICAgICJyZWdpc3RlcmVkXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKChpb2MtPmRpYWdfYnVmZmVyX3N0YXR1c1tNUEkyX0RJQUdfQlVGX1RZUEVfVFJBQ0VdICYKKwkgICAgTVBUMl9ESUFHX0JVRkZFUl9JU19SRUdJU1RFUkVEKSA9PSAwKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBob3N0X3RyYWNlX2J1ZmZlciBpcyBub3QgIgorCQkgICAgInJlZ2lzdGVyZWRcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXF1ZXN0X2RhdGEgPSAoc3RydWN0IERJQUdfQlVGRkVSX1NUQVJUICopCisJICAgIGlvYy0+ZGlhZ19idWZmZXJbTVBJMl9ESUFHX0JVRl9UWVBFX1RSQUNFXTsKKwlpZiAoKGxlMzJfdG9fY3B1KHJlcXVlc3RfZGF0YS0+RGlhZ1ZlcnNpb24pID09IDB4MDAwMDAwMDAgfHwKKwkgICAgbGUzMl90b19jcHUocmVxdWVzdF9kYXRhLT5EaWFnVmVyc2lvbikgPT0gMHgwMTAwMDAwMCkgJiYKKwkgICAgbGUzMl90b19jcHUocmVxdWVzdF9kYXRhLT5SZXNlcnZlZDMpID09IDB4NDc0MjQ0NGMpCisJCXNpemUgPSBsZTMyX3RvX2NwdShyZXF1ZXN0X2RhdGEtPlNpemUpOworCisJaW9jLT5yaW5nX2J1ZmZlcl9zeiA9IHNpemU7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHNpemUpOworfQorc3RhdGljIERFVklDRV9BVFRSKGhvc3RfdHJhY2VfYnVmZmVyX3NpemUsIFNfSVJVR08sCisJIF9jdGxfaG9zdF90cmFjZV9idWZmZXJfc2l6ZV9zaG93LCBOVUxMKTsKKworLyoqCisgKiBfY3RsX2hvc3RfdHJhY2VfYnVmZmVyX3Nob3cgLSBmaXJtd2FyZSByaW5nIGJ1ZmZlciAodHJhY2Ugb25seSkKKyAqIEBjZGV2IC0gcG9pbnRlciB0byBlbWJlZGRlZCBjbGFzcyBkZXZpY2UKKyAqIEBidWYgLSB0aGUgYnVmZmVyIHJldHVybmVkCisgKgorICogQSBzeXNmcyAncmVhZC93cml0ZScgc2hvc3QgYXR0cmlidXRlLgorICoKKyAqIFlvdSB3aWxsIG9ubHkgYmUgYWJsZSB0byByZWFkIDRrIGJ5dGVzIG9mIHJpbmcgYnVmZmVyIGF0IGEgdGltZS4KKyAqIEluIG9yZGVyIHRvIHJlYWQgYmV5b25kIDRrIGJ5dGVzLCB5b3Ugd2lsbCBoYXZlIHRvIHdyaXRlIG91dCB0aGUKKyAqIG9mZnNldCB0byB0aGUgc2FtZSBhdHRyaWJ1dGUsIGl0IHdpbGwgbW92ZSB0aGUgcG9pbnRlci4KKyAqLworc3RhdGljIHNzaXplX3QKK19jdGxfaG9zdF90cmFjZV9idWZmZXJfc2hvdyhzdHJ1Y3QgZGV2aWNlICpjZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKyAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihzaG9zdCk7CisJdm9pZCAqcmVxdWVzdF9kYXRhOworCXUzMiBzaXplOworCisJaWYgKCFpb2MtPmRpYWdfYnVmZmVyW01QSTJfRElBR19CVUZfVFlQRV9UUkFDRV0pIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGhvc3RfdHJhY2VfYnVmZmVyIGlzIG5vdCAiCisJCSAgICAicmVnaXN0ZXJlZFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKworCWlmICgoaW9jLT5kaWFnX2J1ZmZlcl9zdGF0dXNbTVBJMl9ESUFHX0JVRl9UWVBFX1RSQUNFXSAmCisJICAgIE1QVDJfRElBR19CVUZGRVJfSVNfUkVHSVNURVJFRCkgPT0gMCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogaG9zdF90cmFjZV9idWZmZXIgaXMgbm90ICIKKwkJICAgICJyZWdpc3RlcmVkXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGlvYy0+cmluZ19idWZmZXJfb2Zmc2V0ID4gaW9jLT5yaW5nX2J1ZmZlcl9zeikKKwkJcmV0dXJuIDA7CisKKwlzaXplID0gaW9jLT5yaW5nX2J1ZmZlcl9zeiAtIGlvYy0+cmluZ19idWZmZXJfb2Zmc2V0OworCXNpemUgPSAoc2l6ZSA+IFBBR0VfU0laRSkgPyBQQUdFX1NJWkUgOiBzaXplOworCXJlcXVlc3RfZGF0YSA9IGlvYy0+ZGlhZ19idWZmZXJbMF0gKyBpb2MtPnJpbmdfYnVmZmVyX29mZnNldDsKKwltZW1jcHkoYnVmLCByZXF1ZXN0X2RhdGEsIHNpemUpOworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgc3NpemVfdAorX2N0bF9ob3N0X3RyYWNlX2J1ZmZlcl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpjZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKyAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHNob3N0X3ByaXYoc2hvc3QpOworCWludCB2YWwgPSAwOworCisJaWYgKHNzY2FuZihidWYsICIlZCIsICZ2YWwpICE9IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJaW9jLT5yaW5nX2J1ZmZlcl9vZmZzZXQgPSB2YWw7CisJcmV0dXJuIHN0cmxlbihidWYpOworfQorc3RhdGljIERFVklDRV9BVFRSKGhvc3RfdHJhY2VfYnVmZmVyLCBTX0lSVUdPIHwgU19JV1VTUiwKKyAgICBfY3RsX2hvc3RfdHJhY2VfYnVmZmVyX3Nob3csIF9jdGxfaG9zdF90cmFjZV9idWZmZXJfc3RvcmUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogX2N0bF9ob3N0X3RyYWNlX2J1ZmZlcl9lbmFibGVfc2hvdyAtIGZpcm13YXJlIHJpbmcgYnVmZmVyICh0cmFjZSBvbmx5KQorICogQGNkZXYgLSBwb2ludGVyIHRvIGVtYmVkZGVkIGNsYXNzIGRldmljZQorICogQGJ1ZiAtIHRoZSBidWZmZXIgcmV0dXJuZWQKKyAqCisgKiBBIHN5c2ZzICdyZWFkL3dyaXRlJyBzaG9zdCBhdHRyaWJ1dGUuCisgKgorICogVGhpcyBpcyBhIG1lY2huaXNtIHRvIHBvc3QvcmVsZWFzZSBob3N0X3RyYWNlX2J1ZmZlcnMKKyAqLworc3RhdGljIHNzaXplX3QKK19jdGxfaG9zdF90cmFjZV9idWZmZXJfZW5hYmxlX3Nob3coc3RydWN0IGRldmljZSAqY2RldiwKKyAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihzaG9zdCk7CisKKwlpZiAoKCFpb2MtPmRpYWdfYnVmZmVyW01QSTJfRElBR19CVUZfVFlQRV9UUkFDRV0pIHx8CisJICAgKChpb2MtPmRpYWdfYnVmZmVyX3N0YXR1c1tNUEkyX0RJQUdfQlVGX1RZUEVfVFJBQ0VdICYKKwkgICAgTVBUMl9ESUFHX0JVRkZFUl9JU19SRUdJU1RFUkVEKSA9PSAwKSkKKwkJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAib2ZmXG4iKTsKKwllbHNlIGlmICgoaW9jLT5kaWFnX2J1ZmZlcl9zdGF0dXNbTVBJMl9ESUFHX0JVRl9UWVBFX1RSQUNFXSAmCisJICAgIE1QVDJfRElBR19CVUZGRVJfSVNfUkVMRUFTRUQpKQorCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJyZWxlYXNlXG4iKTsKKwllbHNlCisJCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgInBvc3RcbiIpOworfQorCitzdGF0aWMgc3NpemVfdAorX2N0bF9ob3N0X3RyYWNlX2J1ZmZlcl9lbmFibGVfc3RvcmUoc3RydWN0IGRldmljZSAqY2RldiwKKyAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBzaG9zdF9wcml2KHNob3N0KTsKKwljaGFyIHN0clsxMF0gPSAiIjsKKwlzdHJ1Y3QgbXB0Ml9kaWFnX3JlZ2lzdGVyIGRpYWdfcmVnaXN0ZXI7CisJdTggaXNzdWVfcmVzZXQgPSAwOworCisJaWYgKHNzY2FuZihidWYsICIlcyIsIHN0cikgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXN0cmNtcChzdHIsICJwb3N0IikpIHsKKwkJLyogZXhpdCBvdXQgaWYgaG9zdCBidWZmZXJzIGFyZSBhbHJlYWR5IHBvc3RlZCAqLworCQlpZiAoKGlvYy0+ZGlhZ19idWZmZXJbTVBJMl9ESUFHX0JVRl9UWVBFX1RSQUNFXSkgJiYKKwkJICAgIChpb2MtPmRpYWdfYnVmZmVyX3N0YXR1c1tNUEkyX0RJQUdfQlVGX1RZUEVfVFJBQ0VdICYKKwkJICAgIE1QVDJfRElBR19CVUZGRVJfSVNfUkVHSVNURVJFRCkgJiYKKwkJICAgICgoaW9jLT5kaWFnX2J1ZmZlcl9zdGF0dXNbTVBJMl9ESUFHX0JVRl9UWVBFX1RSQUNFXSAmCisJCSAgICBNUFQyX0RJQUdfQlVGRkVSX0lTX1JFTEVBU0VEKSA9PSAwKSkKKwkJCWdvdG8gb3V0OworCQltZW1zZXQoJmRpYWdfcmVnaXN0ZXIsIDAsIHNpemVvZihzdHJ1Y3QgbXB0Ml9kaWFnX3JlZ2lzdGVyKSk7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJwb3N0aW5nIGhvc3QgdHJhY2UgYnVmZmVyc1xuIiwKKwkJICAgIGlvYy0+bmFtZSk7CisJCWRpYWdfcmVnaXN0ZXIuYnVmZmVyX3R5cGUgPSBNUEkyX0RJQUdfQlVGX1RZUEVfVFJBQ0U7CisJCWRpYWdfcmVnaXN0ZXIucmVxdWVzdGVkX2J1ZmZlcl9zaXplID0gKDEwMjQgKiAxMDI0KTsKKwkJZGlhZ19yZWdpc3Rlci51bmlxdWVfaWQgPSAweDcwNzU5MDA7CisJCWlvYy0+ZGlhZ19idWZmZXJfc3RhdHVzW01QSTJfRElBR19CVUZfVFlQRV9UUkFDRV0gPSAwOworCQlfY3RsX2RpYWdfcmVnaXN0ZXJfMihpb2MsICAmZGlhZ19yZWdpc3Rlcik7CisJfSBlbHNlIGlmICghc3RyY21wKHN0ciwgInJlbGVhc2UiKSkgeworCQkvKiBleGl0IG91dCBpZiBob3N0IGJ1ZmZlcnMgYXJlIGFscmVhZHkgcmVsZWFzZWQgKi8KKwkJaWYgKCFpb2MtPmRpYWdfYnVmZmVyW01QSTJfRElBR19CVUZfVFlQRV9UUkFDRV0pCisJCQlnb3RvIG91dDsKKwkJaWYgKChpb2MtPmRpYWdfYnVmZmVyX3N0YXR1c1tNUEkyX0RJQUdfQlVGX1RZUEVfVFJBQ0VdICYKKwkJICAgIE1QVDJfRElBR19CVUZGRVJfSVNfUkVHSVNURVJFRCkgPT0gMCkKKwkJCWdvdG8gb3V0OworCQlpZiAoKGlvYy0+ZGlhZ19idWZmZXJfc3RhdHVzW01QSTJfRElBR19CVUZfVFlQRV9UUkFDRV0gJgorCQkgICAgTVBUMl9ESUFHX0JVRkZFUl9JU19SRUxFQVNFRCkpCisJCQlnb3RvIG91dDsKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInJlbGVhc2luZyBob3N0IHRyYWNlIGJ1ZmZlclxuIiwKKwkJICAgIGlvYy0+bmFtZSk7CisJCV9jdGxfc2VuZF9yZWxlYXNlKGlvYywgTVBJMl9ESUFHX0JVRl9UWVBFX1RSQUNFLCAmaXNzdWVfcmVzZXQpOworCX0KKworIG91dDoKKwlyZXR1cm4gc3RybGVuKGJ1Zik7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoaG9zdF90cmFjZV9idWZmZXJfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwKKyAgICBfY3RsX2hvc3RfdHJhY2VfYnVmZmVyX2VuYWJsZV9zaG93LCBfY3RsX2hvc3RfdHJhY2VfYnVmZmVyX2VuYWJsZV9zdG9yZSk7CisKIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICptcHQyc2FzX2hvc3RfYXR0cnNbXSA9IHsKIAkmZGV2X2F0dHJfdmVyc2lvbl9mdywKIAkmZGV2X2F0dHJfdmVyc2lvbl9iaW9zLApAQCAtMjU5Nyw2ICsyODg4LDEwIEBACiAJJmRldl9hdHRyX2Z3ZmF1bHRfZGVidWcsCiAJJmRldl9hdHRyX2Z3X3F1ZXVlX2RlcHRoLAogCSZkZXZfYXR0cl9ob3N0X3Nhc19hZGRyZXNzLAorCSZkZXZfYXR0cl9pb2NfcmVzZXRfY291bnQsCisJJmRldl9hdHRyX2hvc3RfdHJhY2VfYnVmZmVyX3NpemUsCisJJmRldl9hdHRyX2hvc3RfdHJhY2VfYnVmZmVyLAorCSZkZXZfYXR0cl9ob3N0X3RyYWNlX2J1ZmZlcl9lbmFibGUsCiAJTlVMTCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYwppbmRleCBjNWZmMjZhLi4xNmU5OWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCkBAIC03MCw2ICs3MCw4IEBACiAgICAgc3RydWN0IF9zYXNfbm9kZSAqc2FzX2V4cGFuZGVyKTsKIHN0YXRpYyB2b2lkIF9maXJtd2FyZV9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAKK3N0YXRpYyB1OCBfc2NzaWhfY2hlY2tfZm9yX3BlbmRpbmdfdG0oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCk7CisKIC8qIGdsb2JhbCBwYXJhbWV0ZXJzICovCiBMSVNUX0hFQUQobXB0MnNhc19pb2NfbGlzdCk7CiAKQEAgLTg0LDYgKzg2LDcgQEAKIHN0YXRpYyBpbnQgbXB0X2lkczsKIAogc3RhdGljIHU4IHRtX3RyX2NiX2lkeCA9IC0xIDsKK3N0YXRpYyB1OCB0bV90cl92b2x1bWVfY2JfaWR4ID0gLTEgOwogc3RhdGljIHU4IHRtX3Nhc19jb250cm9sX2NiX2lkeCA9IC0xOwogCiAvKiBjb21tYW5kIGxpbmUgb3B0aW9ucyAqLwpAQCAtMjIzLDkgKzIyNiwxMiBAQAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCiAJeyBNUEkyX01GR1BBR0VfVkVORE9SSURfTFNJLCBNUEkyX01GR1BBR0VfREVWSURfU0FTMjIwOF82LAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCi0JeyBNUEkyX01GR1BBR0VfVkVORE9SSURfTFNJLCBNUEkyX01GR1BBR0VfREVWSURfU0FTMjIwOF83LAorCS8qIE11c3RhbmcgfiAyMzA4ICovCisJeyBNUEkyX01GR1BBR0VfVkVORE9SSURfTFNJLCBNUEkyX01GR1BBR0VfREVWSURfU0FTMjMwOF8xLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCi0JeyBNUEkyX01GR1BBR0VfVkVORE9SSURfTFNJLCBNUEkyX01GR1BBR0VfREVWSURfU0FTMjIwOF84LAorCXsgTVBJMl9NRkdQQUdFX1ZFTkRPUklEX0xTSSwgTVBJMl9NRkdQQUdFX0RFVklEX1NBUzIzMDhfMiwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAorCXsgTVBJMl9NRkdQQUdFX1ZFTkRPUklEX0xTSSwgTVBJMl9NRkdQQUdFX0RFVklEX1NBUzIzMDhfMywKIAkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAogCXswfQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKQEAgLTQzMiw3ICs0MzgsNyBAQAogCQkgICAgKGlvYy0+Ymlvc19wZzIuUmVxQm9vdERldmljZUZvcm0gJgogCQkgICAgTVBJMl9CSU9TUEFHRTJfRk9STV9NQVNLKSwKIAkJICAgICZpb2MtPmJpb3NfcGcyLlJlcXVlc3RlZEJvb3REZXZpY2UpKSB7Ci0JCQlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVAorCQkJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVAogCQkJICAgIiVzOiByZXFfYm9vdF9kZXZpY2UoMHglMDE2bGx4KVxuIiwKIAkJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fLAogCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2FzX2FkZHJlc3MpKTsKQEAgLTQ0Nyw3ICs0NTMsNyBAQAogCQkgICAgKGlvYy0+Ymlvc19wZzIuUmVxQWx0Qm9vdERldmljZUZvcm0gJgogCQkgICAgTVBJMl9CSU9TUEFHRTJfRk9STV9NQVNLKSwKIAkJICAgICZpb2MtPmJpb3NfcGcyLlJlcXVlc3RlZEFsdEJvb3REZXZpY2UpKSB7Ci0JCQlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVAorCQkJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVAogCQkJICAgIiVzOiByZXFfYWx0X2Jvb3RfZGV2aWNlKDB4JTAxNmxseClcbiIsCiAJCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXywKIAkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXNhc19hZGRyZXNzKSk7CkBAIC00NjIsNyArNDY4LDcgQEAKIAkJICAgIChpb2MtPmJpb3NfcGcyLkN1cnJlbnRCb290RGV2aWNlRm9ybSAmCiAJCSAgICBNUEkyX0JJT1NQQUdFMl9GT1JNX01BU0spLAogCQkgICAgJmlvYy0+Ymlvc19wZzIuQ3VycmVudEJvb3REZXZpY2UpKSB7Ci0JCQlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVAorCQkJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVAogCQkJICAgIiVzOiBjdXJyZW50X2Jvb3RfZGV2aWNlKDB4JTAxNmxseClcbiIsCiAJCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXywKIAkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXNhc19hZGRyZXNzKSk7CkBAIC01NjMsNyArNTY5LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6IGhhbmRsZSIKKwlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBoYW5kbGUiCiAJICAgICIoMHglMDR4KSwgc2FzX2FkZHIoMHglMDE2bGx4KVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywKIAkgICAgc2FzX2RldmljZS0+aGFuZGxlLCAodW5zaWduZWQgbG9uZyBsb25nKXNhc19kZXZpY2UtPnNhc19hZGRyZXNzKSk7CiAKQEAgLTU5MCw3ICs1OTYsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogaGFuZGxlIgorCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGhhbmRsZSIKIAkgICAgIigweCUwNHgpLCBzYXNfYWRkcigweCUwMTZsbHgpXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLAogCSAgICBzYXNfZGV2aWNlLT5oYW5kbGUsICh1bnNpZ25lZCBsb25nIGxvbmcpc2FzX2RldmljZS0+c2FzX2FkZHJlc3MpKTsKIApAQCAtNjkyLDcgKzY5OCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBoYW5kbGUiCisJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogaGFuZGxlIgogCSAgICAiKDB4JTA0eCksIHd3aWQoMHglMDE2bGx4KVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywKIAkgICAgcmFpZF9kZXZpY2UtPmhhbmRsZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylyYWlkX2RldmljZS0+d3dpZCkpOwogCkBAIC0xMjIzLDcgKzEyMjksNyBAQAogCQlzYXNfZGV2aWNlLT5zdGFyZ2V0ID0gc3RhcmdldDsKIAkJc2FzX2RldmljZS0+aWQgPSBzdGFyZ2V0LT5pZDsKIAkJc2FzX2RldmljZS0+Y2hhbm5lbCA9IHN0YXJnZXQtPmNoYW5uZWw7Ci0JCWlmIChzYXNfZGV2aWNlLT5oaWRkZW5fcmFpZF9jb21wb25lbnQpCisJCWlmICh0ZXN0X2JpdChzYXNfZGV2aWNlLT5oYW5kbGUsIGlvYy0+cGRfaGFuZGxlcykpCiAJCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+ZmxhZ3MgfD0KIAkJCSAgICBNUFRfVEFSR0VUX0ZMQUdTX1JBSURfQ09NUE9ORU5UOwogCX0KQEAgLTE3NDYsOSArMTc1MiwxMCBAQAogCQl9CiAKIAkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LCAiJXM6IGhhbmRsZSgweCUwNHgpLCAiCi0JCSAgICAic2FzX2FkZHIoMHglMDE2bGx4KSwgZGV2aWNlX25hbWUoMHglMDE2bGx4KVxuIiwKKwkJICAgICJzYXNfYWRkcigweCUwMTZsbHgpLCBwaHkoJWQpLCBkZXZpY2VfbmFtZSgweCUwMTZsbHgpXG4iLAogCQkgICAgZHMsIHNhc19kZXZpY2UtPmhhbmRsZSwKIAkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2FzX2RldmljZS0+c2FzX2FkZHJlc3MsCisJCSAgICBzYXNfZGV2aWNlLT5waHksCiAJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXNhc19kZXZpY2UtPmRldmljZV9uYW1lKTsKIAkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LCAiJXM6ICIKIAkJICAgICJlbmNsb3N1cmVfbG9naWNhbF9pZCgweCUwMTZsbHgpLCBzbG90KCVkKVxuIiwgZHMsCkBAIC0xOTkwLDcgKzE5OTcsOCBAQAogCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkgfHwgaW9jLT5yZW1vdmVfaG9zdCkgeworCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5IHx8IGlvYy0+cmVtb3ZlX2hvc3QgfHwKKwkgICAgaW9jLT5wY2lfZXJyb3JfcmVjb3ZlcnkpIHsKIAkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBob3N0IHJlc2V0IGluIHByb2dyZXNzIVxuIiwKIAkJICAgIF9fZnVuY19fLCBpb2MtPm5hbWUpOwogCQlyYyA9IEZBSUxFRDsKQEAgLTE5OTksNyArMjAwNyw3IEBACiAKIAlpb2Nfc3RhdGUgPSBtcHQyc2FzX2Jhc2VfZ2V0X2lvY3N0YXRlKGlvYywgMCk7CiAJaWYgKGlvY19zdGF0ZSAmIE1QSTJfRE9PUkJFTExfVVNFRCkgewotCQlkaHNwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgInVuZXhwZWN0ZWQgZG9vcmJlbGwgIgorCQlkaHNwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAidW5leHBlY3RlZCBkb29yYmVsbCAiCiAJCSAgICAiYWN0aXZlIVxuIiwgaW9jLT5uYW1lKSk7CiAJCW1wdDJzYXNfYmFzZV9oYXJkX3Jlc2V0X2hhbmRsZXIoaW9jLCBDQU5fU0xFRVAsCiAJCSAgICBGT1JDRV9CSUdfSEFNTUVSKTsKQEAgLTIxMTYsOCArMjEyNCw1OSBAQAogfQogCiAvKioKKyAqIF9zY3NpaF90bV9kaXNwbGF5X2luZm8gLSBkaXNwbGF5cyBpbmZvIGFib3V0IHRoZSBkZXZpY2UKKyAqIEBpb2M6IHBlciBhZGFwdGVyIHN0cnVjdAorICogQHNjbWQ6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAorICoKKyAqIENhbGxlZCBieSB0YXNrIG1hbmFnZW1lbnQgY2FsbGJhY2sgaGFuZGxlcnMuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfdG1fZGlzcGxheV9pbmZvKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKK3sKKwlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQgPSBzY21kLT5kZXZpY2UtPnNkZXZfdGFyZ2V0OworCXN0cnVjdCBNUFQyU0FTX1RBUkdFVCAqcHJpdl90YXJnZXQgPSBzdGFyZ2V0LT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2UgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXByaXZfdGFyZ2V0KQorCQlyZXR1cm47CisKKwlzY3NpX3ByaW50X2NvbW1hbmQoc2NtZCk7CisJaWYgKHByaXZfdGFyZ2V0LT5mbGFncyAmIE1QVF9UQVJHRVRfRkxBR1NfVk9MVU1FKSB7CisJCXN0YXJnZXRfcHJpbnRrKEtFUk5fSU5GTywgc3RhcmdldCwgInZvbHVtZSBoYW5kbGUoMHglMDR4KSwgIgorCQkgICAgInZvbHVtZSB3d2lkKDB4JTAxNmxseClcbiIsCisJCSAgICBwcml2X3RhcmdldC0+aGFuZGxlLAorCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwcml2X3RhcmdldC0+c2FzX2FkZHJlc3MpOworCX0gZWxzZSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlzYXNfZGV2aWNlID0gbXB0MnNhc19zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfc2FzX2FkZHJlc3MoaW9jLAorCQkgICAgcHJpdl90YXJnZXQtPnNhc19hZGRyZXNzKTsKKwkJaWYgKHNhc19kZXZpY2UpIHsKKwkJCWlmIChwcml2X3RhcmdldC0+ZmxhZ3MgJgorCQkJICAgIE1QVF9UQVJHRVRfRkxBR1NfUkFJRF9DT01QT05FTlQpIHsKKwkJCQlzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sIHN0YXJnZXQsCisJCQkJICAgICJ2b2x1bWUgaGFuZGxlKDB4JTA0eCksICIKKwkJCQkgICAgInZvbHVtZSB3d2lkKDB4JTAxNmxseClcbiIsCisJCQkJICAgIHNhc19kZXZpY2UtPnZvbHVtZV9oYW5kbGUsCisJCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzYXNfZGV2aWNlLT52b2x1bWVfd3dpZCk7CisJCQl9CisJCQlzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sIHN0YXJnZXQsCisJCQkgICAgImhhbmRsZSgweCUwNHgpLCBzYXNfYWRkcmVzcygweCUwMTZsbHgpLCBwaHkoJWQpXG4iLAorCQkJICAgIHNhc19kZXZpY2UtPmhhbmRsZSwKKwkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXNhc19kZXZpY2UtPnNhc19hZGRyZXNzLAorCQkJICAgIHNhc19kZXZpY2UtPnBoeSk7CisJCQlzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sIHN0YXJnZXQsCisJCQkgICAgImVuY2xvc3VyZV9sb2dpY2FsX2lkKDB4JTAxNmxseCksIHNsb3QoJWQpXG4iLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzYXNfZGV2aWNlLT5lbmNsb3N1cmVfbG9naWNhbF9pZCwKKwkJCSAgICBzYXNfZGV2aWNlLT5zbG90KTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCX0KK30KKworLyoqCiAgKiBfc2NzaWhfYWJvcnQgLSBlaCB0aHJlYWRzIG1haW4gYWJvcnQgcm91dGluZQotICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAorICogQHNjbWQ6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAogICoKICAqIFJldHVybnMgU1VDQ0VTUyBpZiBjb21tYW5kIGFib3J0ZWQgZWxzZSBGQUlMRUQKICAqLwpAQCAtMjEzMCwxNCArMjE4OSwxNCBAQAogCXUxNiBoYW5kbGU7CiAJaW50IHI7CiAKLQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiYXR0ZW1wdGluZyB0YXNrIGFib3J0ISBzY21kKCVwKVxuIiwKLQkgICAgaW9jLT5uYW1lLCBzY21kKTsKLQlzY3NpX3ByaW50X2NvbW1hbmQoc2NtZCk7CisJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzY21kLT5kZXZpY2UsICJhdHRlbXB0aW5nIHRhc2sgYWJvcnQhICIKKwkgICAgInNjbWQoJXApXG4iLCBzY21kKTsKKwlfc2NzaWhfdG1fZGlzcGxheV9pbmZvKGlvYywgc2NtZCk7CiAKIAlzYXNfZGV2aWNlX3ByaXZfZGF0YSA9IHNjbWQtPmRldmljZS0+aG9zdGRhdGE7CiAJaWYgKCFzYXNfZGV2aWNlX3ByaXZfZGF0YSB8fCAhc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQpIHsKLQkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImRldmljZSBiZWVuIGRlbGV0ZWQhIHNjbWQoJXApXG4iLAotCQkgICAgaW9jLT5uYW1lLCBzY21kKTsKKwkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzY21kLT5kZXZpY2UsICJkZXZpY2UgYmVlbiBkZWxldGVkISAiCisJCSAgICAic2NtZCglcClcbiIsIHNjbWQpOwogCQlzY21kLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKIAkJc2NtZC0+c2NzaV9kb25lKHNjbWQpOwogCQlyID0gU1VDQ0VTUzsKQEAgLTIxNjksMTQgKzIyMjgsMTQgQEAKIAkgICAgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfQUJPUlRfVEFTSywgc21pZCwgMzAsIHNjbWQpOwogCiAgb3V0OgotCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJ0YXNrIGFib3J0OiAlcyBzY21kKCVwKVxuIiwKLQkgICAgaW9jLT5uYW1lLCAoKHIgPT0gU1VDQ0VTUykgPyAiU1VDQ0VTUyIgOiAiRkFJTEVEIiksIHNjbWQpOworCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2NtZC0+ZGV2aWNlLCAidGFzayBhYm9ydDogJXMgc2NtZCglcClcbiIsCisJICAgICgociA9PSBTVUNDRVNTKSA/ICJTVUNDRVNTIiA6ICJGQUlMRUQiKSwgc2NtZCk7CiAJcmV0dXJuIHI7CiB9CiAKIC8qKgogICogX3Njc2loX2Rldl9yZXNldCAtIGVoIHRocmVhZHMgbWFpbiBkZXZpY2UgcmVzZXQgcm91dGluZQotICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAorICogQHNjbWQ6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAogICoKICAqIFJldHVybnMgU1VDQ0VTUyBpZiBjb21tYW5kIGFib3J0ZWQgZWxzZSBGQUlMRUQKICAqLwpAQCAtMjE5MCwxNCArMjI0OSwxNiBAQAogCXUxNgloYW5kbGU7CiAJaW50IHI7CiAKLQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiYXR0ZW1wdGluZyBkZXZpY2UgcmVzZXQhIHNjbWQoJXApXG4iLAotCSAgICBpb2MtPm5hbWUsIHNjbWQpOwotCXNjc2lfcHJpbnRfY29tbWFuZChzY21kKTsKKwlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQgPSBzY21kLT5kZXZpY2UtPnNkZXZfdGFyZ2V0OworCisJc3RhcmdldF9wcmludGsoS0VSTl9JTkZPLCBzdGFyZ2V0LCAiYXR0ZW1wdGluZyB0YXJnZXQgcmVzZXQhICIKKwkgICAgInNjbWQoJXApXG4iLCBzY21kKTsKKwlfc2NzaWhfdG1fZGlzcGxheV9pbmZvKGlvYywgc2NtZCk7CiAKIAlzYXNfZGV2aWNlX3ByaXZfZGF0YSA9IHNjbWQtPmRldmljZS0+aG9zdGRhdGE7CiAJaWYgKCFzYXNfZGV2aWNlX3ByaXZfZGF0YSB8fCAhc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQpIHsKLQkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImRldmljZSBiZWVuIGRlbGV0ZWQhIHNjbWQoJXApXG4iLAotCQkgICAgaW9jLT5uYW1lLCBzY21kKTsKKwkJc3RhcmdldF9wcmludGsoS0VSTl9JTkZPLCBzdGFyZ2V0LCAidGFyZ2V0IGJlZW4gZGVsZXRlZCEgIgorCQkgICAgInNjbWQoJXApXG4iLCBzY21kKTsKIAkJc2NtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CiAJCXNjbWQtPnNjc2lfZG9uZShzY21kKTsKIAkJciA9IFNVQ0NFU1M7CkBAIC0yMjI4LDE0ICsyMjg5LDE0IEBACiAJICAgIE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX0xPR0lDQUxfVU5JVF9SRVNFVCwgMCwgMzAsIHNjbWQpOwogCiAgb3V0OgotCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJkZXZpY2UgcmVzZXQ6ICVzIHNjbWQoJXApXG4iLAotCSAgICBpb2MtPm5hbWUsICgociA9PSBTVUNDRVNTKSA/ICJTVUNDRVNTIiA6ICJGQUlMRUQiKSwgc2NtZCk7CisJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzY21kLT5kZXZpY2UsICJkZXZpY2UgcmVzZXQ6ICVzIHNjbWQoJXApXG4iLAorCSAgICAoKHIgPT0gU1VDQ0VTUykgPyAiU1VDQ0VTUyIgOiAiRkFJTEVEIiksIHNjbWQpOwogCXJldHVybiByOwogfQogCiAvKioKICAqIF9zY3NpaF90YXJnZXRfcmVzZXQgLSBlaCB0aHJlYWRzIG1haW4gdGFyZ2V0IHJlc2V0IHJvdXRpbmUKLSAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKKyAqIEBzY21kOiBwb2ludGVyIHRvIHNjc2kgY29tbWFuZCBvYmplY3QKICAqCiAgKiBSZXR1cm5zIFNVQ0NFU1MgaWYgY29tbWFuZCBhYm9ydGVkIGVsc2UgRkFJTEVECiAgKi8KQEAgLTIyNDgsMTUgKzIzMDksMTYgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUxNgloYW5kbGU7CiAJaW50IHI7CisJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0ID0gc2NtZC0+ZGV2aWNlLT5zZGV2X3RhcmdldDsKIAotCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJhdHRlbXB0aW5nIHRhcmdldCByZXNldCEgc2NtZCglcClcbiIsCi0JICAgIGlvYy0+bmFtZSwgc2NtZCk7Ci0Jc2NzaV9wcmludF9jb21tYW5kKHNjbWQpOworCXN0YXJnZXRfcHJpbnRrKEtFUk5fSU5GTywgc3RhcmdldCwgImF0dGVtcHRpbmcgdGFyZ2V0IHJlc2V0ISAiCisJICAgICJzY21kKCVwKVxuIiwgc2NtZCk7CisJX3Njc2loX3RtX2Rpc3BsYXlfaW5mbyhpb2MsIHNjbWQpOwogCiAJc2FzX2RldmljZV9wcml2X2RhdGEgPSBzY21kLT5kZXZpY2UtPmhvc3RkYXRhOwogCWlmICghc2FzX2RldmljZV9wcml2X2RhdGEgfHwgIXNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0KSB7Ci0JCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJ0YXJnZXQgYmVlbiBkZWxldGVkISBzY21kKCVwKVxuIiwKLQkJICAgIGlvYy0+bmFtZSwgc2NtZCk7CisJCXN0YXJnZXRfcHJpbnRrKEtFUk5fSU5GTywgc3RhcmdldCwgInRhcmdldCBiZWVuIGRlbGV0ZWQhICIKKwkJICAgICJzY21kKCVwKVxuIiwgc2NtZCk7CiAJCXNjbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwogCQlzY21kLT5zY3NpX2RvbmUoc2NtZCk7CiAJCXIgPSBTVUNDRVNTOwpAQCAtMjI4NywxNCArMjM0OSwxNCBAQAogCSAgICAzMCwgc2NtZCk7CiAKICBvdXQ6Ci0JcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInRhcmdldCByZXNldDogJXMgc2NtZCglcClcbiIsCi0JICAgIGlvYy0+bmFtZSwgKChyID09IFNVQ0NFU1MpID8gIlNVQ0NFU1MiIDogIkZBSUxFRCIpLCBzY21kKTsKKwlzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sIHN0YXJnZXQsICJ0YXJnZXQgcmVzZXQ6ICVzIHNjbWQoJXApXG4iLAorCSAgICAoKHIgPT0gU1VDQ0VTUykgPyAiU1VDQ0VTUyIgOiAiRkFJTEVEIiksIHNjbWQpOwogCXJldHVybiByOwogfQogCiAvKioKICAqIF9zY3NpaF9ob3N0X3Jlc2V0IC0gZWggdGhyZWFkcyBtYWluIGhvc3QgcmVzZXQgcm91dGluZQotICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAorICogQHNjbWQ6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAogICoKICAqIFJldHVybnMgU1VDQ0VTUyBpZiBjb21tYW5kIGFib3J0ZWQgZWxzZSBGQUlMRUQKICAqLwpAQCAtMjU3OSwyMCArMjY0MSwzMSBAQAogCU1waTJTQ1NJVGFza01hbmFnZW1lbnRSZXF1ZXN0X3QgKm1waV9yZXF1ZXN0OwogCXUxNiBzbWlkOwogCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKKwlzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgKnNhc190YXJnZXRfcHJpdl9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IF90cl9saXN0ICpkZWxheWVkX3RyOwogCi0JaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkgfHwgaW9jLT5yZW1vdmVfaG9zdCkgeworCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5IHx8IGlvYy0+cmVtb3ZlX2hvc3QgfHwKKwkgICAgaW9jLT5wY2lfZXJyb3JfcmVjb3ZlcnkpIHsKIAkJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogaG9zdCByZXNldCBpbiAiCiAJCSAgICJwcm9ncmVzcyFcbiIsIF9fZnVuY19fLCBpb2MtPm5hbWUpKTsKIAkJcmV0dXJuOwogCX0KIAorCS8qIGlmIFBELCB0aGVuIHJldHVybiAqLworCWlmICh0ZXN0X2JpdChoYW5kbGUsIGlvYy0+cGRfaGFuZGxlcykpCisJCXJldHVybjsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOwogCXNhc19kZXZpY2UgPSBfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X2hhbmRsZShpb2MsIGhhbmRsZSk7Ci0JaWYgKHNhc19kZXZpY2UgJiYgc2FzX2RldmljZS0+aGlkZGVuX3JhaWRfY29tcG9uZW50KSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKKwlpZiAoc2FzX2RldmljZSAmJiBzYXNfZGV2aWNlLT5zdGFyZ2V0ICYmCisJICAgICBzYXNfZGV2aWNlLT5zdGFyZ2V0LT5ob3N0ZGF0YSkgeworCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YSA9IHNhc19kZXZpY2UtPnN0YXJnZXQtPmhvc3RkYXRhOworCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+ZGVsZXRlZCA9IDE7CisJCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVAorCQkgICAgInNldHRpbmcgZGVsZXRlIGZsYWc6IGhhbmRsZSgweCUwNHgpLCAiCisJCSAgICAic2FzX2FkZHIoMHglMDE2bGx4KVxuIiwgaW9jLT5uYW1lLCBoYW5kbGUsCisJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzYXNfZGV2aWNlLT5zYXNfYWRkcmVzcykpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOwogCkBAIC0yNjU1LDYgKzI3MjgsMTAxIEBACiB9CiAKIC8qKgorICogX3Njc2loX3RtX3RyX3ZvbHVtZV9zZW5kIC0gc2VuZCB0YXJnZXQgcmVzZXQgcmVxdWVzdCBmb3Igdm9sdW1lcworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAaGFuZGxlOiBkZXZpY2UgaGFuZGxlCisgKiBDb250ZXh0OiBpbnRlcnJ1cHQgdGltZS4KKyAqCisgKiBUaGlzIGlzIGRlc2lnbmVkIHRvIHNlbmQgbXVsaXBsZSB0YXNrIG1hbmFnZW1lbnQgcmVxdWVzdCBhdCB0aGUgc2FtZQorICogdGltZSB0byB0aGUgZmlmby4gSWYgdGhlIGZpZm8gaXMgZnVsbCwgd2Ugd2lsbCBhcHBlbmQgdGhlIHJlcXVlc3QsCisgKiBhbmQgcHJvY2VzcyBpdCBpbiBhIGZ1dHVyZSBjb21wbGV0aW9uLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3RtX3RyX3ZvbHVtZV9zZW5kKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSkKK3sKKwlNcGkyU0NTSVRhc2tNYW5hZ2VtZW50UmVxdWVzdF90ICptcGlfcmVxdWVzdDsKKwl1MTYgc21pZDsKKwlzdHJ1Y3QgX3RyX2xpc3QgKmRlbGF5ZWRfdHI7CisKKwlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSB8fCBpb2MtPnJlbW92ZV9ob3N0IHx8CisJICAgIGlvYy0+cGNpX2Vycm9yX3JlY292ZXJ5KSB7CisJCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGhvc3QgcmVzZXQgaW4gIgorCQkgICAicHJvZ3Jlc3MhXG4iLCBfX2Z1bmNfXywgaW9jLT5uYW1lKSk7CisJCXJldHVybjsKKwl9CisKKwlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkX2hwcihpb2MsIGlvYy0+dG1fdHJfdm9sdW1lX2NiX2lkeCk7CisJaWYgKCFzbWlkKSB7CisJCWRlbGF5ZWRfdHIgPSBremFsbG9jKHNpemVvZigqZGVsYXllZF90ciksIEdGUF9BVE9NSUMpOworCQlpZiAoIWRlbGF5ZWRfdHIpCisJCQlyZXR1cm47CisJCUlOSVRfTElTVF9IRUFEKCZkZWxheWVkX3RyLT5saXN0KTsKKwkJZGVsYXllZF90ci0+aGFuZGxlID0gaGFuZGxlOworCQlsaXN0X2FkZF90YWlsKCZkZWxheWVkX3RyLT5saXN0LCAmaW9jLT5kZWxheWVkX3RyX3ZvbHVtZV9saXN0KTsKKwkJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UCisJCSAgICAiREVMQVlFRDp0cjpoYW5kbGUoMHglMDR4KSwgKG9wZW4pXG4iLAorCQkgICAgaW9jLT5uYW1lLCBoYW5kbGUpKTsKKwkJcmV0dXJuOworCX0KKworCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAidHJfc2VuZDpoYW5kbGUoMHglMDR4KSwgIgorCSAgICAiKG9wZW4pLCBzbWlkKCVkKSwgY2IoJWQpXG4iLCBpb2MtPm5hbWUsIGhhbmRsZSwgc21pZCwKKwkgICAgaW9jLT50bV90cl92b2x1bWVfY2JfaWR4KSk7CisJbXBpX3JlcXVlc3QgPSBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZShpb2MsIHNtaWQpOworCW1lbXNldChtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJTQ1NJVGFza01hbmFnZW1lbnRSZXF1ZXN0X3QpKTsKKwltcGlfcmVxdWVzdC0+RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX1NDU0lfVEFTS19NR01UOworCW1waV9yZXF1ZXN0LT5EZXZIYW5kbGUgPSBjcHVfdG9fbGUxNihoYW5kbGUpOworCW1waV9yZXF1ZXN0LT5UYXNrVHlwZSA9IE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX1RBUkdFVF9SRVNFVDsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfaGlfcHJpb3JpdHkoaW9jLCBzbWlkKTsKK30KKworLyoqCisgKiBfc2NzaWhfdG1fdm9sdW1lX3RyX2NvbXBsZXRlIC0gdGFyZ2V0IHJlc2V0IGNvbXBsZXRpb24KKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqIEBtc2l4X2luZGV4OiBNU0lYIHRhYmxlIGluZGV4IHN1cHBsaWVkIGJ5IHRoZSBPUworICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCisgKiBDb250ZXh0OiBpbnRlcnJ1cHQgdGltZS4KKyAqCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KKyAqLworc3RhdGljIHU4Citfc2NzaWhfdG1fdm9sdW1lX3RyX2NvbXBsZXRlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsCisgICAgdTggbXNpeF9pbmRleCwgdTMyIHJlcGx5KQoreworCXUxNiBoYW5kbGU7CisJTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcXVlc3RfdCAqbXBpX3JlcXVlc3RfdG07CisJTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcGx5X3QgKm1waV9yZXBseSA9CisJICAgIG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOworCisJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkgfHwgaW9jLT5yZW1vdmVfaG9zdCB8fAorCSAgICBpb2MtPnBjaV9lcnJvcl9yZWNvdmVyeSkgeworCQlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBob3N0IHJlc2V0IGluICIKKwkJICAgInByb2dyZXNzIVxuIiwgX19mdW5jX18sIGlvYy0+bmFtZSkpOworCQlyZXR1cm4gMTsKKwl9CisKKwltcGlfcmVxdWVzdF90bSA9IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKGlvYywgc21pZCk7CisJaGFuZGxlID0gbGUxNl90b19jcHUobXBpX3JlcXVlc3RfdG0tPkRldkhhbmRsZSk7CisJaWYgKGhhbmRsZSAhPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkRldkhhbmRsZSkpIHsKKwkJZGV3dHByaW50ayhpb2MsIHByaW50aygic3B1cmlvdXMgaW50ZXJydXB0OiAiCisJCSAgICAiaGFuZGxlKDB4JTA0eDoweCUwNHgpLCBzbWlkKCVkKSEhIVxuIiwgaGFuZGxlLAorCQkgICAgbGUxNl90b19jcHUobXBpX3JlcGx5LT5EZXZIYW5kbGUpLCBzbWlkKSk7CisJCXJldHVybiAwOworCX0KKworCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVAorCSAgICAidHJfY29tcGxldGU6aGFuZGxlKDB4JTA0eCksIChvcGVuKSBzbWlkKCVkKSwgaW9jX3N0YXR1cygweCUwNHgpLCAiCisJICAgICJsb2dpbmZvKDB4JTA4eCksIGNvbXBsZXRlZCglZClcbiIsIGlvYy0+bmFtZSwKKwkgICAgaGFuZGxlLCBzbWlkLCBsZTE2X3RvX2NwdShtcGlfcmVwbHktPklPQ1N0YXR1cyksCisJICAgIGxlMzJfdG9fY3B1KG1waV9yZXBseS0+SU9DTG9nSW5mbyksCisJICAgIGxlMzJfdG9fY3B1KG1waV9yZXBseS0+VGVybWluYXRpb25Db3VudCkpKTsKKworCXJldHVybiBfc2NzaWhfY2hlY2tfZm9yX3BlbmRpbmdfdG0oaW9jLCBzbWlkKTsKK30KKworLyoqCiAgKiBfc2NzaWhfdG1fdHJfY29tcGxldGUgLQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleApAQCAtMjY4MCw5ICsyODQ4LDkgQEAKIAkgICAgbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CiAJTXBpMlNhc0lvVW5pdENvbnRyb2xSZXF1ZXN0X3QgKm1waV9yZXF1ZXN0OwogCXUxNiBzbWlkX3Nhc19jdHJsOwotCXN0cnVjdCBfdHJfbGlzdCAqZGVsYXllZF90cjsKIAotCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5IHx8IGlvYy0+cmVtb3ZlX2hvc3QpIHsKKwlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSB8fCBpb2MtPnJlbW92ZV9ob3N0IHx8CisJICAgIGlvYy0+cGNpX2Vycm9yX3JlY292ZXJ5KSB7CiAJCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGhvc3QgcmVzZXQgaW4gIgogCQkgICAicHJvZ3Jlc3MhXG4iLCBfX2Z1bmNfXywgaW9jLT5uYW1lKSk7CiAJCXJldHVybiAxOwpAQCAtMjcyMSw2ICsyODg5LDM1IEBACiAJbXBpX3JlcXVlc3QtPkRldkhhbmRsZSA9IG1waV9yZXF1ZXN0X3RtLT5EZXZIYW5kbGU7CiAJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkX3Nhc19jdHJsKTsKIAorCXJldHVybiBfc2NzaWhfY2hlY2tfZm9yX3BlbmRpbmdfdG0oaW9jLCBzbWlkKTsKK30KKworLyoqCisgKiBfc2NzaWhfY2hlY2tfZm9yX3BlbmRpbmdfdG0gLSBjaGVjayBmb3IgcGVuZGluZyB0YXNrIG1hbmFnZW1lbnQKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqCisgKiBUaGlzIHdpbGwgY2hlY2sgZGVsYXllZCB0YXJnZXQgcmVzZXQgbGlzdCwgYW5kIGZlZWQgdGhlCisgKiBuZXh0IHJlcWV1c3QuCisgKgorICogUmV0dXJuIDEgbWVhbmluZyBtZiBzaG91bGQgYmUgZnJlZWQgZnJvbSBfYmFzZV9pbnRlcnJ1cHQKKyAqICAgICAgICAwIG1lYW5zIHRoZSBtZiBpcyBmcmVlZCBmcm9tIHRoaXMgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyB1OAorX3Njc2loX2NoZWNrX2Zvcl9wZW5kaW5nX3RtKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpCit7CisJc3RydWN0IF90cl9saXN0ICpkZWxheWVkX3RyOworCisJaWYgKCFsaXN0X2VtcHR5KCZpb2MtPmRlbGF5ZWRfdHJfdm9sdW1lX2xpc3QpKSB7CisJCWRlbGF5ZWRfdHIgPSBsaXN0X2VudHJ5KGlvYy0+ZGVsYXllZF90cl92b2x1bWVfbGlzdC5uZXh0LAorCQkgICAgc3RydWN0IF90cl9saXN0LCBsaXN0KTsKKwkJbXB0MnNhc19iYXNlX2ZyZWVfc21pZChpb2MsIHNtaWQpOworCQlfc2NzaWhfdG1fdHJfdm9sdW1lX3NlbmQoaW9jLCBkZWxheWVkX3RyLT5oYW5kbGUpOworCQlsaXN0X2RlbCgmZGVsYXllZF90ci0+bGlzdCk7CisJCWtmcmVlKGRlbGF5ZWRfdHIpOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAoIWxpc3RfZW1wdHkoJmlvYy0+ZGVsYXllZF90cl9saXN0KSkgewogCQlkZWxheWVkX3RyID0gbGlzdF9lbnRyeShpb2MtPmRlbGF5ZWRfdHJfbGlzdC5uZXh0LAogCQkgICAgc3RydWN0IF90cl9saXN0LCBsaXN0KTsKQEAgLTI3MjgsOCArMjkyNSw5IEBACiAJCV9zY3NpaF90bV90cl9zZW5kKGlvYywgZGVsYXllZF90ci0+aGFuZGxlKTsKIAkJbGlzdF9kZWwoJmRlbGF5ZWRfdHItPmxpc3QpOwogCQlrZnJlZShkZWxheWVkX3RyKTsKLQkJcmV0dXJuIDA7IC8qIHRlbGxzIGJhc2VfaW50ZXJydXB0IG5vdCB0byBmcmVlIG1mICovCisJCXJldHVybiAwOwogCX0KKwogCXJldHVybiAxOwogfQogCkBAIC0yODAzLDcgKzMwMDEsNyBAQAogCQkgICAgTVBJMl9FVkVOVF9TQVNfVE9QT19FU19SRVNQT05ESU5HKSB7CiAJCQlpZiAobGUxNl90b19jcHUobG9jYWxfZXZlbnRfZGF0YS0+RXhwYW5kZXJEZXZIYW5kbGUpID09CiAJCQkgICAgZXhwYW5kZXJfaGFuZGxlKSB7Ci0JCQkJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVAorCQkJCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVAogCQkJCSAgICAic2V0dGluZyBpZ25vcmluZyBmbGFnXG4iLCBpb2MtPm5hbWUpKTsKIAkJCQlmd19ldmVudC0+aWdub3JlID0gMTsKIAkJCX0KQEAgLTI4MTMsNiArMzAxMSwxNjUgQEAKIH0KIAogLyoqCisgKiBfc2NzaWhfc2V0X3ZvbHVtZV9kZWxldGVfZmxhZyAtIHNldHRpbmcgdm9sdW1lIGRlbGV0ZSBmbGFnCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBoYW5kbGU6IGRldmljZSBoYW5kbGUKKyAqCisgKiBUaGlzCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9zZXRfdm9sdW1lX2RlbGV0ZV9mbGFnKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSkKK3sKKwlzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZTsKKwlzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgKnNhc190YXJnZXRfcHJpdl9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CisJcmFpZF9kZXZpY2UgPSBfc2NzaWhfcmFpZF9kZXZpY2VfZmluZF9ieV9oYW5kbGUoaW9jLCBoYW5kbGUpOworCWlmIChyYWlkX2RldmljZSAmJiByYWlkX2RldmljZS0+c3RhcmdldCAmJgorCSAgICByYWlkX2RldmljZS0+c3RhcmdldC0+aG9zdGRhdGEpIHsKKwkJc2FzX3RhcmdldF9wcml2X2RhdGEgPQorCQkgICAgcmFpZF9kZXZpY2UtPnN0YXJnZXQtPmhvc3RkYXRhOworCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+ZGVsZXRlZCA9IDE7CisJCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVAorCQkgICAgInNldHRpbmcgZGVsZXRlIGZsYWc6IGhhbmRsZSgweCUwNHgpLCAiCisJCSAgICAid3dpZCgweCUwMTZsbHgpXG4iLCBpb2MtPm5hbWUsIGhhbmRsZSwKKwkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHJhaWRfZGV2aWNlLT53d2lkKSk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIF9zY3NpaF9zZXRfdm9sdW1lX2hhbmRsZV9mb3JfdHIgLSBzZXQgaGFuZGxlIGZvciB0YXJnZXQgcmVzZXQgdG8gdm9sdW1lCisgKiBAaGFuZGxlOiBpbnB1dCBoYW5kbGUKKyAqIEBhOiBoYW5kbGUgZm9yIHZvbHVtZSBhCisgKiBAYjogaGFuZGxlIGZvciB2b2x1bWUgYgorICoKKyAqIElSIGZpcm13YXJlIG9ubHkgc3VwcG9ydHMgdHdvIHJhaWQgdm9sdW1lcy4gIFRoZSBwdXJwb3NlIG9mIHRoaXMKKyAqIHJvdXRpbmUgaXMgdG8gc2V0IHRoZSB2b2x1bWUgaGFuZGxlIGluIGVpdGhlciBhIG9yIGIuIFdoZW4gdGhlIGdpdmVuCisgKiBpbnB1dCBoYW5kbGUgaXMgbm9uLXplcm8sIG9yIHdoZW4gYSBhbmQgYiBoYXZlIG5vdCBiZWVuIHNldCBiZWZvcmUuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfc2V0X3ZvbHVtZV9oYW5kbGVfZm9yX3RyKHUxNiBoYW5kbGUsIHUxNiAqYSwgdTE2ICpiKQoreworCWlmICghaGFuZGxlIHx8IGhhbmRsZSA9PSAqYSB8fCBoYW5kbGUgPT0gKmIpCisJCXJldHVybjsKKwlpZiAoISphKQorCQkqYSA9IGhhbmRsZTsKKwllbHNlIGlmICghKmIpCisJCSpiID0gaGFuZGxlOworfQorCisvKioKKyAqIF9zY3NpaF9jaGVja19pcl9jb25maWdfdW5oaWRlX2V2ZW50cyAtIGNoZWNrIGZvciBVTkhJREUgZXZlbnRzCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBldmVudF9kYXRhOiB0aGUgZXZlbnQgZGF0YSBwYXlsb2FkCisgKiBDb250ZXh0OiBpbnRlcnJ1cHQgdGltZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgd2lsbCBzZW5kIHRhcmdldCByZXNldCB0byB2b2x1bWUsIGZvbGxvd2VkIGJ5IHRhcmdldAorICogcmVzZXRzIHRvIHRoZSBQRHMuIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSBQRCBoYXMgYmVlbiByZW1vdmVkLCBvcgorICogdm9sdW1lIGhhcyBiZWVuIGRlbGV0ZWQgb3IgcmVtb3ZlZC4gV2hlbiB0aGUgdGFyZ2V0IHJlc2V0IGlzIHNlbnQKKyAqIHRvIHZvbHVtZSwgdGhlIFBEIHRhcmdldCByZXNldHMgbmVlZCB0byBiZSBxdWV1ZWQgdG8gc3RhcnQgdXBvbgorICogY29tcGxldGlvbiBvZiB0aGUgdm9sdW1lIHRhcmdldCByZXNldC4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9jaGVja19pcl9jb25maWdfdW5oaWRlX2V2ZW50cyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgTXBpMkV2ZW50RGF0YUlyQ29uZmlnQ2hhbmdlTGlzdF90ICpldmVudF9kYXRhKQoreworCU1waTJFdmVudElyQ29uZmlnRWxlbWVudF90ICplbGVtZW50OworCWludCBpOworCXUxNiBoYW5kbGUsIHZvbHVtZV9oYW5kbGUsIGEsIGI7CisJc3RydWN0IF90cl9saXN0ICpkZWxheWVkX3RyOworCisJYSA9IDA7CisJYiA9IDA7CisKKwkvKiBWb2x1bWUgUmVzZXRzIGZvciBEZWxldGVkIG9yIFJlbW92ZWQgKi8KKwllbGVtZW50ID0gKE1waTJFdmVudElyQ29uZmlnRWxlbWVudF90ICopJmV2ZW50X2RhdGEtPkNvbmZpZ0VsZW1lbnRbMF07CisJZm9yIChpID0gMDsgaSA8IGV2ZW50X2RhdGEtPk51bUVsZW1lbnRzOyBpKyssIGVsZW1lbnQrKykgeworCQlpZiAoZWxlbWVudC0+UmVhc29uQ29kZSA9PQorCQkgICAgTVBJMl9FVkVOVF9JUl9DSEFOR0VfUkNfVk9MVU1FX0RFTEVURUQgfHwKKwkJICAgIGVsZW1lbnQtPlJlYXNvbkNvZGUgPT0KKwkJICAgIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX1JDX1JFTU9WRUQpIHsKKwkJCXZvbHVtZV9oYW5kbGUgPSBsZTE2X3RvX2NwdShlbGVtZW50LT5Wb2xEZXZIYW5kbGUpOworCQkJX3Njc2loX3NldF92b2x1bWVfZGVsZXRlX2ZsYWcoaW9jLCB2b2x1bWVfaGFuZGxlKTsKKwkJCV9zY3NpaF9zZXRfdm9sdW1lX2hhbmRsZV9mb3JfdHIodm9sdW1lX2hhbmRsZSwgJmEsICZiKTsKKwkJfQorCX0KKworCS8qIFZvbHVtZSBSZXNldHMgZm9yIFVOSElERSBldmVudHMgKi8KKwllbGVtZW50ID0gKE1waTJFdmVudElyQ29uZmlnRWxlbWVudF90ICopJmV2ZW50X2RhdGEtPkNvbmZpZ0VsZW1lbnRbMF07CisJZm9yIChpID0gMDsgaSA8IGV2ZW50X2RhdGEtPk51bUVsZW1lbnRzOyBpKyssIGVsZW1lbnQrKykgeworCQlpZiAobGUzMl90b19jcHUoZXZlbnRfZGF0YS0+RmxhZ3MpICYKKwkJICAgIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX0ZMQUdTX0ZPUkVJR05fQ09ORklHKQorCQkJY29udGludWU7CisJCWlmIChlbGVtZW50LT5SZWFzb25Db2RlID09IE1QSTJfRVZFTlRfSVJfQ0hBTkdFX1JDX1VOSElERSkgeworCQkJdm9sdW1lX2hhbmRsZSA9IGxlMTZfdG9fY3B1KGVsZW1lbnQtPlZvbERldkhhbmRsZSk7CisJCQlfc2NzaWhfc2V0X3ZvbHVtZV9oYW5kbGVfZm9yX3RyKHZvbHVtZV9oYW5kbGUsICZhLCAmYik7CisJCX0KKwl9CisKKwlpZiAoYSkKKwkJX3Njc2loX3RtX3RyX3ZvbHVtZV9zZW5kKGlvYywgYSk7CisJaWYgKGIpCisJCV9zY3NpaF90bV90cl92b2x1bWVfc2VuZChpb2MsIGIpOworCisJLyogUEQgdGFyZ2V0IHJlc2V0cyAqLworCWVsZW1lbnQgPSAoTXBpMkV2ZW50SXJDb25maWdFbGVtZW50X3QgKikmZXZlbnRfZGF0YS0+Q29uZmlnRWxlbWVudFswXTsKKwlmb3IgKGkgPSAwOyBpIDwgZXZlbnRfZGF0YS0+TnVtRWxlbWVudHM7IGkrKywgZWxlbWVudCsrKSB7CisJCWlmIChlbGVtZW50LT5SZWFzb25Db2RlICE9IE1QSTJfRVZFTlRfSVJfQ0hBTkdFX1JDX1VOSElERSkKKwkJCWNvbnRpbnVlOworCQloYW5kbGUgPSBsZTE2X3RvX2NwdShlbGVtZW50LT5QaHlzRGlza0RldkhhbmRsZSk7CisJCXZvbHVtZV9oYW5kbGUgPSBsZTE2X3RvX2NwdShlbGVtZW50LT5Wb2xEZXZIYW5kbGUpOworCQljbGVhcl9iaXQoaGFuZGxlLCBpb2MtPnBkX2hhbmRsZXMpOworCQlpZiAoIXZvbHVtZV9oYW5kbGUpCisJCQlfc2NzaWhfdG1fdHJfc2VuZChpb2MsIGhhbmRsZSk7CisJCWVsc2UgaWYgKHZvbHVtZV9oYW5kbGUgPT0gYSB8fCB2b2x1bWVfaGFuZGxlID09IGIpIHsKKwkJCWRlbGF5ZWRfdHIgPSBremFsbG9jKHNpemVvZigqZGVsYXllZF90ciksIEdGUF9BVE9NSUMpOworCQkJQlVHX09OKCFkZWxheWVkX3RyKTsKKwkJCUlOSVRfTElTVF9IRUFEKCZkZWxheWVkX3RyLT5saXN0KTsKKwkJCWRlbGF5ZWRfdHItPmhhbmRsZSA9IGhhbmRsZTsKKwkJCWxpc3RfYWRkX3RhaWwoJmRlbGF5ZWRfdHItPmxpc3QsICZpb2MtPmRlbGF5ZWRfdHJfbGlzdCk7CisJCQlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQKKwkJCSAgICAiREVMQVlFRDp0cjpoYW5kbGUoMHglMDR4KSwgKG9wZW4pXG4iLCBpb2MtPm5hbWUsCisJCQkgICAgaGFuZGxlKSk7CisJCX0gZWxzZQorCQkJX3Njc2loX3RtX3RyX3NlbmQoaW9jLCBoYW5kbGUpOworCX0KK30KKworCisvKioKKyAqIF9zY3NpaF9jaGVja192b2x1bWVfZGVsZXRlX2V2ZW50cyAtIHNldCBkZWxldGUgZmxhZyBmb3Igdm9sdW1lcworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAZXZlbnRfZGF0YTogdGhlIGV2ZW50IGRhdGEgcGF5bG9hZAorICogQ29udGV4dDogaW50ZXJydXB0IHRpbWUuCisgKgorICogVGhpcyB3aWxsIGhhbmRsZSB0aGUgY2FzZSB3aGVuIHRoZSBjYWJsZSBjb25uZWN0ZWQgdG8gZW50aXJlIHZvbHVtZSBpcworICogcHVsbGVkLiBXZSB3aWxsIHRha2UgY2FyZSBvZiBzZXR0aW5nIHRoZSBkZWxldGVkIGZsYWcgc28gbm9ybWFsIElPIHdpbGwKKyAqIG5vdCBiZSBzZW50LgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX2NoZWNrX3ZvbHVtZV9kZWxldGVfZXZlbnRzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBNcGkyRXZlbnREYXRhSXJWb2x1bWVfdCAqZXZlbnRfZGF0YSkKK3sKKwl1MzIgc3RhdGU7CisKKwlpZiAoZXZlbnRfZGF0YS0+UmVhc29uQ29kZSAhPSBNUEkyX0VWRU5UX0lSX1ZPTFVNRV9SQ19TVEFURV9DSEFOR0VEKQorCQlyZXR1cm47CisJc3RhdGUgPSBsZTMyX3RvX2NwdShldmVudF9kYXRhLT5OZXdWYWx1ZSk7CisJaWYgKHN0YXRlID09IE1QSTJfUkFJRF9WT0xfU1RBVEVfTUlTU0lORyB8fCBzdGF0ZSA9PQorCSAgICBNUEkyX1JBSURfVk9MX1NUQVRFX0ZBSUxFRCkKKwkJX3Njc2loX3NldF92b2x1bWVfZGVsZXRlX2ZsYWcoaW9jLAorCQkgICAgbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+Vm9sRGV2SGFuZGxlKSk7Cit9CisKKy8qKgogICogX3Njc2loX2ZsdXNoX3J1bm5pbmdfY21kcyAtIGNvbXBsZXRpbmcgb3V0c3RhbmRpbmcgY29tbWFuZHMuCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqCkBAIC0yODM1LDcgKzMxOTIsMTAgQEAKIAkJY291bnQrKzsKIAkJbXB0MnNhc19iYXNlX2ZyZWVfc21pZChpb2MsIHNtaWQpOwogCQlzY3NpX2RtYV91bm1hcChzY21kKTsKLQkJc2NtZC0+cmVzdWx0ID0gRElEX1JFU0VUIDw8IDE2OworCQlpZiAoaW9jLT5wY2lfZXJyb3JfcmVjb3ZlcnkpCisJCQlzY21kLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKKwkJZWxzZQorCQkJc2NtZC0+cmVzdWx0ID0gRElEX1JFU0VUIDw8IDE2OwogCQlzY21kLT5zY3NpX2RvbmUoc2NtZCk7CiAJfQogCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJjb21wbGV0aW5nICVkIGNtZHNcbiIsCkBAIC0yODU4LDkgKzMyMTgsNyBAQAogCXVuc2lnbmVkIGNoYXIgcHJvdF9vcCA9IHNjc2lfZ2V0X3Byb3Rfb3Aoc2NtZCk7CiAJdW5zaWduZWQgY2hhciBwcm90X3R5cGUgPSBzY3NpX2dldF9wcm90X3R5cGUoc2NtZCk7CiAKLQlpZiAocHJvdF90eXBlID09IFNDU0lfUFJPVF9ESUZfVFlQRTAgfHwKLQkgICBwcm90X3R5cGUgPT0gU0NTSV9QUk9UX0RJRl9UWVBFMiB8fAotCSAgIHByb3Rfb3AgPT0gU0NTSV9QUk9UX05PUk1BTCkKKwlpZiAocHJvdF90eXBlID09IFNDU0lfUFJPVF9ESUZfVFlQRTAgfHwgcHJvdF9vcCA9PSBTQ1NJX1BST1RfTk9STUFMKQogCQlyZXR1cm47CiAKIAlpZiAocHJvdF9vcCA9PSAgU0NTSV9QUk9UX1JFQURfU1RSSVApCkBAIC0yODgyLDcgKzMyNDAsMTMgQEAKIAkJICAgIE1QSTJfU0NTSUlPX0VFRFBGTEFHU19DSEVDS19HVUFSRDsKIAkJbXBpX3JlcXVlc3QtPkNEQi5FRURQMzIuUHJpbWFyeVJlZmVyZW5jZVRhZyA9CiAJCSAgICBjcHVfdG9fYmUzMihzY3NpX2dldF9sYmEoc2NtZCkpOworCQlicmVhazsKIAorCWNhc2UgU0NTSV9QUk9UX0RJRl9UWVBFMjoKKworCQllZWRwX2ZsYWdzIHw9IE1QSTJfU0NTSUlPX0VFRFBGTEFHU19JTkNfUFJJX1JFRlRBRyB8CisJCSAgICBNUEkyX1NDU0lJT19FRURQRkxBR1NfQ0hFQ0tfUkVGVEFHIHwKKwkJICAgIE1QSTJfU0NTSUlPX0VFRFBGTEFHU19DSEVDS19HVUFSRDsKIAkJYnJlYWs7CiAKIAljYXNlIFNDU0lfUFJPVF9ESUZfVFlQRTM6CkBAIC0yOTY4LDYgKzMzMzIsMTIgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJaWYgKGlvYy0+cGNpX2Vycm9yX3JlY292ZXJ5KSB7CisJCXNjbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OworCQlzY21kLT5zY3NpX2RvbmUoc2NtZCk7CisJCXJldHVybiAwOworCX0KKwogCXNhc190YXJnZXRfcHJpdl9kYXRhID0gc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQ7CiAJLyogaW52YWxpZCBkZXZpY2UgaGFuZGxlICovCiAJaWYgKHNhc190YXJnZXRfcHJpdl9kYXRhLT5oYW5kbGUgPT0gTVBUMlNBU19JTlZBTElEX0RFVklDRV9IQU5ETEUpIHsKQEAgLTI5NzksNyArMzM0OSw3IEBACiAJLyogaG9zdCByZWNvdmVyeSBvciBsaW5rIHJlc2V0cyBzZW50IHZpYSBJT0NUTHMgKi8KIAlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSB8fCBpb2MtPmlvY19saW5rX3Jlc2V0X2luX3Byb2dyZXNzKQogCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKLQkvKiBkZXZpY2UgYnVzeSB3aXRoIHRhc2sgbWFuYWdtZW50ICovCisJLyogZGV2aWNlIGJ1c3kgd2l0aCB0YXNrIG1hbmFnZW1lbnQgKi8KIAllbHNlIGlmIChzYXNfZGV2aWNlX3ByaXZfZGF0YS0+YmxvY2sgfHwgc2FzX3RhcmdldF9wcml2X2RhdGEtPnRtX2J1c3kpCiAJCXJldHVybiBTQ1NJX01MUVVFVUVfREVWSUNFX0JVU1k7CiAJLyogZGV2aWNlIGhhcyBiZWVuIGRlbGV0ZWQgKi8KQEAgLTMwMTMsNyArMzM4Myw3IEBACiAJCW1waV9jb250cm9sIHw9IE1QSTJfU0NTSUlPX0NPTlRST0xfU0lNUExFUTsKIAkvKiBNYWtlIHN1cmUgRGV2aWNlIGlzIG5vdCByYWlkIHZvbHVtZSAqLwogCWlmICghX3Njc2loX2lzX3JhaWQoJnNjbWQtPmRldmljZS0+c2Rldl9nZW5kZXYpICYmCi0JICAgIHNhc19pc190bHJfZW5hYmxlZChzY21kLT5kZXZpY2UpKQorCSAgICBzYXNfaXNfdGxyX2VuYWJsZWQoc2NtZC0+ZGV2aWNlKSAmJiBzY21kLT5jbWRfbGVuICE9IDMyKQogCQltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX1RMUl9PTjsKIAogCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWRfc2NzaWlvKGlvYywgaW9jLT5zY3NpX2lvX2NiX2lkeCwgc2NtZCk7CkBAIC0zMDI1LDYgKzMzOTUsOCBAQAogCW1waV9yZXF1ZXN0ID0gbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUoaW9jLCBzbWlkKTsKIAltZW1zZXQobXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyU0NTSUlPUmVxdWVzdF90KSk7CiAJX3Njc2loX3NldHVwX2VlZHAoc2NtZCwgbXBpX3JlcXVlc3QpOworCWlmIChzY21kLT5jbWRfbGVuID09IDMyKQorCQltcGlfY29udHJvbCB8PSA0IDw8IE1QSTJfU0NTSUlPX0NPTlRST0xfQUREQ0RCTEVOX1NISUZUOwogCW1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fU0NTSV9JT19SRVFVRVNUOwogCWlmIChzYXNfZGV2aWNlX3ByaXZfZGF0YS0+c2FzX3RhcmdldC0+ZmxhZ3MgJgogCSAgICBNUFRfVEFSR0VUX0ZMQUdTX1JBSURfQ09NUE9ORU5UKQpAQCAtMzExOSw2ICszNDkxLDEzIEBACiAJY2hhciAqZGVzY19zY3NpX3N0YXR1cyA9IE5VTEw7CiAJY2hhciAqZGVzY19zY3NpX3N0YXRlID0gaW9jLT50bXBfc3RyaW5nOwogCXUzMiBsb2dfaW5mbyA9IGxlMzJfdG9fY3B1KG1waV9yZXBseS0+SU9DTG9nSW5mbyk7CisJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCA9IHNjbWQtPmRldmljZS0+c2Rldl90YXJnZXQ7CisJc3RydWN0IE1QVDJTQVNfVEFSR0VUICpwcml2X3RhcmdldCA9IHN0YXJnZXQtPmhvc3RkYXRhOworCisJaWYgKCFwcml2X3RhcmdldCkKKwkJcmV0dXJuOwogCiAJaWYgKGxvZ19pbmZvID09IDB4MzExNzAwMDApCiAJCXJldHVybjsKQEAgLTMyMzQsMTAgKzM2MTMsMjkgQEAKIAkJc3RyY2F0KGRlc2Nfc2NzaV9zdGF0ZSwgImF1dG9zZW5zZSB2YWxpZCAiKTsKIAogCXNjc2lfcHJpbnRfY29tbWFuZChzY21kKTsKLQlwcmludGsoTVBUMlNBU19XQVJOX0ZNVCAiXHRkZXYgaGFuZGxlKDB4JTA0eCksICIKLQkgICAgImlvY19zdGF0dXMoJXMpKDB4JTA0eCksIHNtaWQoJWQpXG4iLCBpb2MtPm5hbWUsCi0JICAgIGxlMTZfdG9fY3B1KG1waV9yZXBseS0+RGV2SGFuZGxlKSwgZGVzY19pb2Nfc3RhdGUsCi0JCWlvY19zdGF0dXMsIHNtaWQpOworCisJaWYgKHByaXZfdGFyZ2V0LT5mbGFncyAmIE1QVF9UQVJHRVRfRkxBR1NfVk9MVU1FKSB7CisJCXByaW50ayhNUFQyU0FTX1dBUk5fRk1UICJcdHZvbHVtZSB3d2lkKDB4JTAxNmxseClcbiIsIGlvYy0+bmFtZSwKKwkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcHJpdl90YXJnZXQtPnNhc19hZGRyZXNzKTsKKwl9IGVsc2UgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJc2FzX2RldmljZSA9IG1wdDJzYXNfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X3Nhc19hZGRyZXNzKGlvYywKKwkJICAgIHByaXZfdGFyZ2V0LT5zYXNfYWRkcmVzcyk7CisJCWlmIChzYXNfZGV2aWNlKSB7CisJCQlwcmludGsoTVBUMlNBU19XQVJOX0ZNVCAiXHRzYXNfYWRkcmVzcygweCUwMTZsbHgpLCAiCisJCQkgICAgInBoeSglZClcbiIsIGlvYy0+bmFtZSwgc2FzX2RldmljZS0+c2FzX2FkZHJlc3MsCisJCQkgICAgc2FzX2RldmljZS0+cGh5KTsKKwkJCXByaW50ayhNUFQyU0FTX1dBUk5fRk1UCisJCQkgICAgIlx0ZW5jbG9zdXJlX2xvZ2ljYWxfaWQoMHglMDE2bGx4KSwgc2xvdCglZClcbiIsCisJCQkgICAgaW9jLT5uYW1lLCBzYXNfZGV2aWNlLT5lbmNsb3N1cmVfbG9naWNhbF9pZCwKKwkJCSAgICBzYXNfZGV2aWNlLT5zbG90KTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCX0KKworCXByaW50ayhNUFQyU0FTX1dBUk5fRk1UICJcdGhhbmRsZSgweCUwNHgpLCBpb2Nfc3RhdHVzKCVzKSgweCUwNHgpLCAiCisJICAgICJzbWlkKCVkKVxuIiwgaW9jLT5uYW1lLCBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkRldkhhbmRsZSksCisJICAgIGRlc2NfaW9jX3N0YXRlLCBpb2Nfc3RhdHVzLCBzbWlkKTsKIAlwcmludGsoTVBUMlNBU19XQVJOX0ZNVCAiXHRyZXF1ZXN0X2xlbiglZCksIHVuZGVyZmxvdyglZCksICIKIAkgICAgInJlc2lkKCVkKVxuIiwgaW9jLT5uYW1lLCBzY3NpX2J1ZmZsZW4oc2NtZCksIHNjbWQtPnVuZGVyZmxvdywKIAkgICAgc2NzaV9nZXRfcmVzaWQoc2NtZCkpOwpAQCAtMzc3Miw3ICs0MTcwLDcgQEAKIAlpZiAoIWhhbmRsZSkKIAkJcmV0dXJuIC0xOwogCi0JaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpCisJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkgfHwgaW9jLT5wY2lfZXJyb3JfcmVjb3ZlcnkpCiAJCXJldHVybiAtMTsKIAogCWlmICgobXB0MnNhc19jb25maWdfZ2V0X2V4cGFuZGVyX3BnMChpb2MsICZtcGlfcmVwbHksICZleHBhbmRlcl9wZzAsCkBAIC00MTc4LDcgKzQ1NzYsNyBAQAogCSAgICBsZTE2X3RvX2NwdShzYXNfZGV2aWNlX3BnMC5TbG90KTsKIAlzYXNfZGV2aWNlLT5kZXZpY2VfaW5mbyA9IGRldmljZV9pbmZvOwogCXNhc19kZXZpY2UtPnNhc19hZGRyZXNzID0gc2FzX2FkZHJlc3M7Ci0Jc2FzX2RldmljZS0+aGlkZGVuX3JhaWRfY29tcG9uZW50ID0gaXNfcGQ7CisJc2FzX2RldmljZS0+cGh5ID0gc2FzX2RldmljZV9wZzAuUGh5TnVtOwogCiAJLyogZ2V0IGVuY2xvc3VyZV9sb2dpY2FsX2lkICovCiAJaWYgKHNhc19kZXZpY2UtPmVuY2xvc3VyZV9oYW5kbGUgJiYgIShtcHQyc2FzX2NvbmZpZ19nZXRfZW5jbG9zdXJlX3BnMCgKQEAgLTQxOTksNjIgKzQ1OTcsNiBAQAogfQogCiAvKioKLSAqIF9zY3NpaF9yZW1vdmVfcGRfZGV2aWNlIC0gIHJlbW92aW5nIHNhcyBkZXZpY2UgcGQgb2JqZWN0Ci0gKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBzYXNfZGV2aWNlX2RlbGV0ZTogdGhlIHNhc19kZXZpY2Ugb2JqZWN0Ci0gKgotICogRm9yIGhpZGRlbiByYWlkIGNvbXBvbmVudHMsIHdlIGRvIGRyaXZlci1mdyBoYW5kc2hha2UgZnJvbQotICogaG90cGx1ZyB3b3JrIHRocmVhZHMuCi0gKiBSZXR1cm4gbm90aGluZy4KLSAqLwotc3RhdGljIHZvaWQKLV9zY3NpaF9yZW1vdmVfcGRfZGV2aWNlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgc3RydWN0IF9zYXNfZGV2aWNlCi0gICAgc2FzX2RldmljZSkKLXsKLQlNcGkyU2FzSW9Vbml0Q29udHJvbFJlcGx5X3QgbXBpX3JlcGx5OwotCU1waTJTYXNJb1VuaXRDb250cm9sUmVxdWVzdF90IG1waV9yZXF1ZXN0OwotCXUxNiB2b2xfaGFuZGxlLCBoYW5kbGU7Ci0KLQloYW5kbGUgPSBzYXNfZGV2aWNlLmhhbmRsZTsKLQlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBlbnRlcjogaGFuZGxlKDB4JTA0eCksIgotCSAgICAiIHNhc19hZGRyKDB4JTAxNmxseClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sIGhhbmRsZSwKLQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc2FzX2RldmljZS5zYXNfYWRkcmVzcykpOwotCi0Jdm9sX2hhbmRsZSA9IHNhc19kZXZpY2Uudm9sdW1lX2hhbmRsZTsKLQlpZiAoIXZvbF9oYW5kbGUpCi0JCXJldHVybjsKLQlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImlzc3VlIHRhcmdldCByZXNldDogIgotCSAgICAiaGFuZGxlKDB4JTA0eClcbiIsIGlvYy0+bmFtZSwgdm9sX2hhbmRsZSkpOwotCW1wdDJzYXNfc2NzaWhfaXNzdWVfdG0oaW9jLCB2b2xfaGFuZGxlLCAwLCAwLCAwLAotCSAgICBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9UQVJHRVRfUkVTRVQsIDAsIDMwLCBOVUxMKTsKLQlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImlzc3VlIHRhcmdldCByZXNldCAiCi0JICAgICJkb25lOiBoYW5kbGUoMHglMDR4KVxuIiwgaW9jLT5uYW1lLCB2b2xfaGFuZGxlKSk7Ci0JaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpCi0JCXJldHVybjsKLQotCS8qIFNBU19JT19VTklUX0NOVFIgLSBzZW5kIFJFTU9WRV9ERVZJQ0UgKi8KLQlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInNhc19pb3VuaXQ6IGhhbmRsZSIKLQkgICAgIigweCUwNHgpXG4iLCBpb2MtPm5hbWUsIGhhbmRsZSkpOwotCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyU2FzSW9Vbml0Q29udHJvbFJlcXVlc3RfdCkpOwotCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9TQVNfSU9fVU5JVF9DT05UUk9MOwotCW1waV9yZXF1ZXN0Lk9wZXJhdGlvbiA9IE1QSTJfU0FTX09QX1JFTU9WRV9ERVZJQ0U7Ci0JbXBpX3JlcXVlc3QuRGV2SGFuZGxlID0gY3B1X3RvX2xlMTYoaGFuZGxlKTsKLQlpZiAoKG1wdDJzYXNfYmFzZV9zYXNfaW91bml0X2NvbnRyb2woaW9jLCAmbXBpX3JlcGx5LAotCSAgICAmbXBpX3JlcXVlc3QpKSAhPSAwKQotCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAotCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKLQotCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAic2FzX2lvdW5pdDogaW9jX3N0YXR1cyIKLQkgICAgIigweCUwNHgpLCBsb2dpbmZvKDB4JTA4eClcbiIsIGlvYy0+bmFtZSwKLQkgICAgbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cyksCi0JICAgIGxlMzJfdG9fY3B1KG1waV9yZXBseS5JT0NMb2dJbmZvKSkpOwotCi0JZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogZXhpdDogaGFuZGxlKDB4JTA0eCksIgotCSAgICAiIHNhc19hZGRyKDB4JTAxNmxseClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sIGhhbmRsZSwKLQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc2FzX2RldmljZS5zYXNfYWRkcmVzcykpOwotfQotCi0vKioKICAqIF9zY3NpaF9yZW1vdmVfZGV2aWNlIC0gIHJlbW92aW5nIHNhcyBkZXZpY2Ugb2JqZWN0CiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzYXNfZGV2aWNlX2RlbGV0ZTogdGhlIHNhc19kZXZpY2Ugb2JqZWN0CkBAIC00Mjg0LDkgKzQ2MjYsNiBAQAogCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+ZGVsZXRlZCA9IDE7CiAJfQogCi0JaWYgKHNhc19kZXZpY2VfYmFja3VwLmhpZGRlbl9yYWlkX2NvbXBvbmVudCkKLQkJX3Njc2loX3JlbW92ZV9wZF9kZXZpY2UoaW9jLCBzYXNfZGV2aWNlX2JhY2t1cCk7Ci0KIAlfc2NzaWhfdWJsb2NrX2lvX2RldmljZShpb2MsIHNhc19kZXZpY2VfYmFja3VwLmhhbmRsZSk7CiAKIAltcHQyc2FzX3RyYW5zcG9ydF9wb3J0X3JlbW92ZShpb2MsIHNhc19kZXZpY2VfYmFja3VwLnNhc19hZGRyZXNzLApAQCAtNDMzOCw5ICs0Njc3LDkgQEAKIAkJc3RhdHVzX3N0ciA9ICJ1bmtub3duIHN0YXR1cyI7CiAJCWJyZWFrOwogCX0KLQlwcmludGsoTVBUMlNBU19ERUJVR19GTVQgInNhcyB0b3BvbG9neSBjaGFuZ2U6ICglcylcbiIsCisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInNhcyB0b3BvbG9neSBjaGFuZ2U6ICglcylcbiIsCiAJICAgIGlvYy0+bmFtZSwgc3RhdHVzX3N0cik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIlx0aGFuZGxlKDB4JTA0eCksIGVuY2xvc3VyZV9oYW5kbGUoMHglMDR4KSAiCisJcHJpbnRrKEtFUk5fSU5GTyAiXHRoYW5kbGUoMHglMDR4KSwgZW5jbG9zdXJlX2hhbmRsZSgweCUwNHgpICIKIAkgICAgInN0YXJ0X3BoeSglMDJkKSwgY291bnQoJWQpXG4iLAogCSAgICBsZTE2X3RvX2NwdShldmVudF9kYXRhLT5FeHBhbmRlckRldkhhbmRsZSksCiAJICAgIGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPkVuY2xvc3VyZUhhbmRsZSksCkBAIC00Mzc0LDcgKzQ3MTMsNyBAQAogCQl9CiAJCWxpbmtfcmF0ZSA9IGV2ZW50X2RhdGEtPlBIWVtpXS5MaW5rUmF0ZSA+PiA0OwogCQlwcmV2X2xpbmtfcmF0ZSA9IGV2ZW50X2RhdGEtPlBIWVtpXS5MaW5rUmF0ZSAmIDB4RjsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlx0cGh5KCUwMmQpLCBhdHRhY2hlZF9oYW5kbGUoMHglMDR4KTogJXM6IgorCQlwcmludGsoS0VSTl9JTkZPICJcdHBoeSglMDJkKSwgYXR0YWNoZWRfaGFuZGxlKDB4JTA0eCk6ICVzOiIKIAkJICAgICIgbGluayByYXRlOiBuZXcoMHglMDJ4KSwgb2xkKDB4JTAyeClcbiIsIHBoeV9udW1iZXIsCiAJCSAgICBoYW5kbGUsIHN0YXR1c19zdHIsIGxpbmtfcmF0ZSwgcHJldl9saW5rX3JhdGUpOwogCkBAIC00NDA5LDcgKzQ3NDgsNyBAQAogCQlfc2NzaWhfc2FzX3RvcG9sb2d5X2NoYW5nZV9ldmVudF9kZWJ1Zyhpb2MsIGV2ZW50X2RhdGEpOwogI2VuZGlmCiAKLQlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSB8fCBpb2MtPnJlbW92ZV9ob3N0KQorCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5IHx8IGlvYy0+cmVtb3ZlX2hvc3QgfHwgaW9jLT5wY2lfZXJyb3JfcmVjb3ZlcnkpCiAJCXJldHVybjsKIAogCWlmICghaW9jLT5zYXNfaGJhLm51bV9waHlzKQpAQCAtNDQxOCw3ICs0NzU3LDcgQEAKIAkJX3Njc2loX3Nhc19ob3N0X3JlZnJlc2goaW9jKTsKIAogCWlmIChmd19ldmVudC0+aWdub3JlKSB7Ci0JCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgImlnbm9yaW5nIGV4cGFuZGVyICIKKwkJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJpZ25vcmluZyBleHBhbmRlciAiCiAJCSAgICAiZXZlbnRcbiIsIGlvYy0+bmFtZSkpOwogCQlyZXR1cm47CiAJfQpAQCAtNDQ0NCwxMSArNDc4MywxMiBAQAogCS8qIGhhbmRsZSBzaWJsaW5ncyBldmVudHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZXZlbnRfZGF0YS0+TnVtRW50cmllczsgaSsrKSB7CiAJCWlmIChmd19ldmVudC0+aWdub3JlKSB7Ci0JCQlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJpZ25vcmluZyAiCisJCQlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImlnbm9yaW5nICIKIAkJCSAgICAiZXhwYW5kZXIgZXZlbnRcbiIsIGlvYy0+bmFtZSkpOwogCQkJcmV0dXJuOwogCQl9Ci0JCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5IHx8IGlvYy0+cmVtb3ZlX2hvc3QpCisJCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5IHx8IGlvYy0+cmVtb3ZlX2hvc3QgfHwKKwkJICAgIGlvYy0+cGNpX2Vycm9yX3JlY292ZXJ5KQogCQkJcmV0dXJuOwogCQlwaHlfbnVtYmVyID0gZXZlbnRfZGF0YS0+U3RhcnRQaHlOdW0gKyBpOwogCQlyZWFzb25fY29kZSA9IGV2ZW50X2RhdGEtPlBIWVtpXS5QaHlTdGF0dXMgJgpAQCAtNDU2NCwxMiArNDkwNCwxMiBAQAogCQlyZWFzb25fc3RyID0gInVua25vd24gcmVhc29uIjsKIAkJYnJlYWs7CiAJfQotCXByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiZGV2aWNlIHN0YXR1cyBjaGFuZ2U6ICglcylcbiIKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiZGV2aWNlIHN0YXR1cyBjaGFuZ2U6ICglcylcbiIKIAkgICAgIlx0aGFuZGxlKDB4JTA0eCksIHNhcyBhZGRyZXNzKDB4JTAxNmxseCkiLCBpb2MtPm5hbWUsCiAJICAgIHJlYXNvbl9zdHIsIGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPkRldkhhbmRsZSksCiAJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUoZXZlbnRfZGF0YS0+U0FTQWRkcmVzcykpOwogCWlmIChldmVudF9kYXRhLT5SZWFzb25Db2RlID09IE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1NNQVJUX0RBVEEpCi0JCXByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiLCBBU0MoMHgleCksIEFTQ1EoMHgleClcbiIsIGlvYy0+bmFtZSwKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiwgQVNDKDB4JXgpLCBBU0NRKDB4JXgpXG4iLCBpb2MtPm5hbWUsCiAJCSAgICBldmVudF9kYXRhLT5BU0MsIGV2ZW50X2RhdGEtPkFTQ1EpOwogCXByaW50ayhLRVJOX0lORk8gIlxuIik7CiB9CkBAIC00NjUzLDcgKzQ5OTMsNyBAQAogCQlicmVhazsKIAl9CiAKLQlwcmludGsoTVBUMlNBU19ERUJVR19GTVQgImVuY2xvc3VyZSBzdGF0dXMgY2hhbmdlOiAoJXMpXG4iCisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImVuY2xvc3VyZSBzdGF0dXMgY2hhbmdlOiAoJXMpXG4iCiAJICAgICJcdGhhbmRsZSgweCUwNHgpLCBlbmNsb3N1cmUgbG9naWNhbCBpZCgweCUwMTZsbHgpIgogCSAgICAiIG51bWJlciBzbG90cyglZClcbiIsIGlvYy0+bmFtZSwgcmVhc29uX3N0ciwKIAkgICAgbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+RW5jbG9zdXJlSGFuZGxlKSwKQEAgLTQ3MDQsMTAgKzUwNDQsMTAgQEAKIAlNcGkyRXZlbnREYXRhU2FzQnJvYWRjYXN0UHJpbWl0aXZlX3QgKmV2ZW50X2RhdGEgPSBmd19ldmVudC0+ZXZlbnRfZGF0YTsKICNlbmRpZgogCXUxNiBpb2Nfc3RhdHVzOwotCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgImJyb2FkY2FzdCBwcmltYXRpdmU6ICIKKwlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImJyb2FkY2FzdCBwcmltYXRpdmU6ICIKIAkgICAgInBoeSBudW1iZXIoJWQpLCB3aWR0aCglZClcbiIsIGlvYy0+bmFtZSwgZXZlbnRfZGF0YS0+UGh5TnVtLAogCSAgICBldmVudF9kYXRhLT5Qb3J0V2lkdGgpKTsKLQlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBlbnRlclxuIiwgaW9jLT5uYW1lLAorCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogZW50ZXJcbiIsIGlvYy0+bmFtZSwKIAkgICAgX19mdW5jX18pKTsKIAogCXRlcm1pbmF0aW9uX2NvdW50ID0gMDsKQEAgLTQ3NTEsNyArNTA5MSw3IEBACiAJfQogCWlvYy0+YnJvYWRjYXN0X2Flbl9idXN5ID0gMDsKIAotCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVAorCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UCiAJICAgICIlcyAtIGV4aXQsIHF1ZXJ5X2NvdW50ID0gJWQgdGVybWluYXRpb25fY291bnQgPSAlZFxuIiwKIAkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXywgcXVlcnlfY291bnQsIHRlcm1pbmF0aW9uX2NvdW50KSk7CiB9CkBAIC00NzcyLDcgKzUxMTIsNyBAQAogCiAjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCiAJaWYgKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19FVkVOVF9XT1JLX1RBU0spIHsKLQkJcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJkaXNjb3ZlcnkgZXZlbnQ6ICglcykiLCBpb2MtPm5hbWUsCisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJkaXNjb3ZlcnkgZXZlbnQ6ICglcykiLCBpb2MtPm5hbWUsCiAJCSAgICAoZXZlbnRfZGF0YS0+UmVhc29uQ29kZSA9PSBNUEkyX0VWRU5UX1NBU19ESVNDX1JDX1NUQVJURUQpID8KIAkJICAgICJzdGFydCIgOiAic3RvcCIpOwogCWlmIChldmVudF9kYXRhLT5EaXNjb3ZlcnlTdGF0dXMpCkBAIC00ODgzLDE3ICs1MjIzLDE1IEBACiAvKioKICAqIF9zY3NpaF9zYXNfdm9sdW1lX2RlbGV0ZSAtIGRlbGV0ZSB2b2x1bWUKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQGVsZW1lbnQ6IElSIGNvbmZpZyBlbGVtZW50IGRhdGEKKyAqIEBoYW5kbGU6IHZvbHVtZSBkZXZpY2UgaGFuZGxlCiAgKiBDb250ZXh0OiB1c2VyLgogICoKICAqIFJldHVybiBub3RoaW5nLgogICovCiBzdGF0aWMgdm9pZAotX3Njc2loX3Nhc192b2x1bWVfZGVsZXRlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKLSAgICBNcGkyRXZlbnRJckNvbmZpZ0VsZW1lbnRfdCAqZWxlbWVudCkKK19zY3NpaF9zYXNfdm9sdW1lX2RlbGV0ZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBoYW5kbGUpCiB7CiAJc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2U7Ci0JdTE2IGhhbmRsZSA9IGxlMTZfdG9fY3B1KGVsZW1lbnQtPlZvbERldkhhbmRsZSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgKnNhc190YXJnZXRfcHJpdl9kYXRhOwogCkBAIC00OTA3LDYgKzUyNDUsOSBAQAogCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+ZGVsZXRlZCA9IDE7CiAJCXNjc2lfcmVtb3ZlX3RhcmdldCgmcmFpZF9kZXZpY2UtPnN0YXJnZXQtPmRldik7CiAJfQorCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJyZW1vdmluZyBoYW5kbGUoMHglMDR4KSwgd3dpZCIKKwkgICAgIigweCUwMTZsbHgpXG4iLCBpb2MtPm5hbWUsICByYWlkX2RldmljZS0+aGFuZGxlLAorCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSByYWlkX2RldmljZS0+d3dpZCk7CiAJX3Njc2loX3JhaWRfZGV2aWNlX3JlbW92ZShpb2MsIHJhaWRfZGV2aWNlKTsKIH0KIApAQCAtNDkzNSw3ICs1Mjc2LDcgQEAKIAkvKiBleHBvc2luZyByYWlkIGNvbXBvbmVudCAqLwogCXNhc19kZXZpY2UtPnZvbHVtZV9oYW5kbGUgPSAwOwogCXNhc19kZXZpY2UtPnZvbHVtZV93d2lkID0gMDsKLQlzYXNfZGV2aWNlLT5oaWRkZW5fcmFpZF9jb21wb25lbnQgPSAwOworCWNsZWFyX2JpdChoYW5kbGUsIGlvYy0+cGRfaGFuZGxlcyk7CiAJX3Njc2loX3JlcHJvYmVfdGFyZ2V0KHNhc19kZXZpY2UtPnN0YXJnZXQsIDApOwogfQogCkBAIC00OTY2LDcgKzUzMDcsNyBAQAogCSAgICAmc2FzX2RldmljZS0+dm9sdW1lX2hhbmRsZSk7CiAJbXB0MnNhc19jb25maWdfZ2V0X3ZvbHVtZV93d2lkKGlvYywgc2FzX2RldmljZS0+dm9sdW1lX2hhbmRsZSwKIAkgICAgJnNhc19kZXZpY2UtPnZvbHVtZV93d2lkKTsKLQlzYXNfZGV2aWNlLT5oaWRkZW5fcmFpZF9jb21wb25lbnQgPSAxOworCXNldF9iaXQoaGFuZGxlLCBpb2MtPnBkX2hhbmRsZXMpOwogCV9zY3NpaF9yZXByb2JlX3RhcmdldChzYXNfZGV2aWNlLT5zdGFyZ2V0LCAxKTsKIH0KIApAQCAtNTAxNSwxMyArNTM1NiwxMyBAQAogCXU2NCBzYXNfYWRkcmVzczsKIAl1MTYgcGFyZW50X2hhbmRsZTsKIAorCXNldF9iaXQoaGFuZGxlLCBpb2MtPnBkX2hhbmRsZXMpOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CiAJc2FzX2RldmljZSA9IF9zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfaGFuZGxlKGlvYywgaGFuZGxlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOwotCWlmIChzYXNfZGV2aWNlKSB7Ci0JCXNhc19kZXZpY2UtPmhpZGRlbl9yYWlkX2NvbXBvbmVudCA9IDE7CisJaWYgKHNhc19kZXZpY2UpCiAJCXJldHVybjsKLQl9CiAKIAlpZiAoKG1wdDJzYXNfY29uZmlnX2dldF9zYXNfZGV2aWNlX3BnMChpb2MsICZtcGlfcmVwbHksICZzYXNfZGV2aWNlX3BnMCwKIAkgICAgTVBJMl9TQVNfREVWSUNFX1BHQURfRk9STV9IQU5ETEUsIGhhbmRsZSkpKSB7CkBAIC01MDY2LDcgKzU0MDcsNyBAQAogCiAJZWxlbWVudCA9IChNcGkyRXZlbnRJckNvbmZpZ0VsZW1lbnRfdCAqKSZldmVudF9kYXRhLT5Db25maWdFbGVtZW50WzBdOwogCi0JcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJyYWlkIGNvbmZpZyBjaGFuZ2U6ICglcyksIGVsZW1lbnRzKCVkKVxuIiwKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicmFpZCBjb25maWcgY2hhbmdlOiAoJXMpLCBlbGVtZW50cyglZClcbiIsCiAJICAgIGlvYy0+bmFtZSwgKGxlMzJfdG9fY3B1KGV2ZW50X2RhdGEtPkZsYWdzKSAmCiAJICAgIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX0ZMQUdTX0ZPUkVJR05fQ09ORklHKSA/CiAJICAgICJmb3JlaWduIiA6ICJuYXRpdmUiLCBldmVudF9kYXRhLT5OdW1FbGVtZW50cyk7CkBAIC01MTE5LDcgKzU0NjAsNyBAQAogCQkJZWxlbWVudF9zdHIgPSAidW5rbm93biBlbGVtZW50IjsKIAkJCWJyZWFrOwogCQl9Ci0JCXByaW50ayhLRVJOX0RFQlVHICJcdCglczolcyksIHZvbCBoYW5kbGUoMHglMDR4KSwgIgorCQlwcmludGsoS0VSTl9JTkZPICJcdCglczolcyksIHZvbCBoYW5kbGUoMHglMDR4KSwgIgogCQkgICAgInBkIGhhbmRsZSgweCUwNHgpLCBwZCBudW0oMHglMDJ4KVxuIiwgZWxlbWVudF9zdHIsCiAJCSAgICByZWFzb25fc3RyLCBsZTE2X3RvX2NwdShlbGVtZW50LT5Wb2xEZXZIYW5kbGUpLAogCQkgICAgbGUxNl90b19jcHUoZWxlbWVudC0+UGh5c0Rpc2tEZXZIYW5kbGUpLApAQCAtNTE2NSw3ICs1NTA2LDggQEAKIAkJY2FzZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9SQ19WT0xVTUVfREVMRVRFRDoKIAkJY2FzZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9SQ19SRU1PVkVEOgogCQkJaWYgKCFmb3JlaWduX2NvbmZpZykKLQkJCQlfc2NzaWhfc2FzX3ZvbHVtZV9kZWxldGUoaW9jLCBlbGVtZW50KTsKKwkJCQlfc2NzaWhfc2FzX3ZvbHVtZV9kZWxldGUoaW9jLAorCQkJCSAgICBsZTE2X3RvX2NwdShlbGVtZW50LT5Wb2xEZXZIYW5kbGUpKTsKIAkJCWJyZWFrOwogCQljYXNlIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX1JDX1BEX0NSRUFURUQ6CiAJCQlfc2NzaWhfc2FzX3BkX2hpZGUoaW9jLCBlbGVtZW50KTsKQEAgLTUyMDEsNyArNTU0Myw2IEBACiAJdTE2IGhhbmRsZTsKIAl1MzIgc3RhdGU7CiAJaW50IHJjOwotCXN0cnVjdCBNUFQyU0FTX1RBUkdFVCAqc2FzX3RhcmdldF9wcml2X2RhdGE7CiAJTXBpMkV2ZW50RGF0YUlyVm9sdW1lX3QgKmV2ZW50X2RhdGEgPSBmd19ldmVudC0+ZXZlbnRfZGF0YTsKIAogCWlmIChldmVudF9kYXRhLT5SZWFzb25Db2RlICE9IE1QSTJfRVZFTlRfSVJfVk9MVU1FX1JDX1NUQVRFX0NIQU5HRUQpCkBAIC01MjA5LDMwICs1NTUwLDI0IEBACiAKIAloYW5kbGUgPSBsZTE2X3RvX2NwdShldmVudF9kYXRhLT5Wb2xEZXZIYW5kbGUpOwogCXN0YXRlID0gbGUzMl90b19jcHUoZXZlbnRfZGF0YS0+TmV3VmFsdWUpOwotCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBoYW5kbGUoMHglMDR4KSwgIgorCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGhhbmRsZSgweCUwNHgpLCAiCiAJICAgICJvbGQoMHglMDh4KSwgbmV3KDB4JTA4eClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sICBoYW5kbGUsCiAJICAgIGxlMzJfdG9fY3B1KGV2ZW50X2RhdGEtPlByZXZpb3VzVmFsdWUpLCBzdGF0ZSkpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOwotCXJhaWRfZGV2aWNlID0gX3Njc2loX3JhaWRfZGV2aWNlX2ZpbmRfYnlfaGFuZGxlKGlvYywgaGFuZGxlKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKLQogCXN3aXRjaCAoc3RhdGUpIHsKIAljYXNlIE1QSTJfUkFJRF9WT0xfU1RBVEVfTUlTU0lORzoKIAljYXNlIE1QSTJfUkFJRF9WT0xfU1RBVEVfRkFJTEVEOgotCQlpZiAoIXJhaWRfZGV2aWNlKQotCQkJYnJlYWs7Ci0JCWlmIChyYWlkX2RldmljZS0+c3RhcmdldCkgewotCQkJc2FzX3RhcmdldF9wcml2X2RhdGEgPSByYWlkX2RldmljZS0+c3RhcmdldC0+aG9zdGRhdGE7Ci0JCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+ZGVsZXRlZCA9IDE7Ci0JCQlzY3NpX3JlbW92ZV90YXJnZXQoJnJhaWRfZGV2aWNlLT5zdGFyZ2V0LT5kZXYpOwotCQl9Ci0JCV9zY3NpaF9yYWlkX2RldmljZV9yZW1vdmUoaW9jLCByYWlkX2RldmljZSk7CisJCV9zY3NpaF9zYXNfdm9sdW1lX2RlbGV0ZShpb2MsIGhhbmRsZSk7CiAJCWJyZWFrOwogCiAJY2FzZSBNUEkyX1JBSURfVk9MX1NUQVRFX09OTElORToKIAljYXNlIE1QSTJfUkFJRF9WT0xfU1RBVEVfREVHUkFERUQ6CiAJY2FzZSBNUEkyX1JBSURfVk9MX1NUQVRFX09QVElNQUw6CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlyYWlkX2RldmljZSA9IF9zY3NpaF9yYWlkX2RldmljZV9maW5kX2J5X2hhbmRsZShpb2MsIGhhbmRsZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCiAJCWlmIChyYWlkX2RldmljZSkKIAkJCWJyZWFrOwogCkBAIC01Mjk3LDIzICs1NjMyLDI1IEBACiAJaGFuZGxlID0gbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+UGh5c0Rpc2tEZXZIYW5kbGUpOwogCXN0YXRlID0gbGUzMl90b19jcHUoZXZlbnRfZGF0YS0+TmV3VmFsdWUpOwogCi0JZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6IGhhbmRsZSgweCUwNHgpLCAiCisJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogaGFuZGxlKDB4JTA0eCksICIKIAkgICAgIm9sZCgweCUwOHgpLCBuZXcoMHglMDh4KVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywgIGhhbmRsZSwKIAkgICAgbGUzMl90b19jcHUoZXZlbnRfZGF0YS0+UHJldmlvdXNWYWx1ZSksIHN0YXRlKSk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKLQlzYXNfZGV2aWNlID0gX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9oYW5kbGUoaW9jLCBoYW5kbGUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7Ci0KIAlzd2l0Y2ggKHN0YXRlKSB7CiAJY2FzZSBNUEkyX1JBSURfUERfU1RBVEVfT05MSU5FOgogCWNhc2UgTVBJMl9SQUlEX1BEX1NUQVRFX0RFR1JBREVEOgogCWNhc2UgTVBJMl9SQUlEX1BEX1NUQVRFX1JFQlVJTERJTkc6CiAJY2FzZSBNUEkyX1JBSURfUERfU1RBVEVfT1BUSU1BTDoKLQkJaWYgKHNhc19kZXZpY2UpIHsKLQkJCXNhc19kZXZpY2UtPmhpZGRlbl9yYWlkX2NvbXBvbmVudCA9IDE7CisJY2FzZSBNUEkyX1JBSURfUERfU1RBVEVfSE9UX1NQQVJFOgorCisJCXNldF9iaXQoaGFuZGxlLCBpb2MtPnBkX2hhbmRsZXMpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlzYXNfZGV2aWNlID0gX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9oYW5kbGUoaW9jLCBoYW5kbGUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCisJCWlmIChzYXNfZGV2aWNlKQogCQkJcmV0dXJuOwotCQl9CiAKIAkJaWYgKChtcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2RldmljZV9wZzAoaW9jLCAmbXBpX3JlcGx5LAogCQkgICAgJnNhc19kZXZpY2VfcGcwLCBNUEkyX1NBU19ERVZJQ0VfUEdBRF9GT1JNX0hBTkRMRSwKQEAgLTUzNDMsNyArNTY4MCw2IEBACiAJY2FzZSBNUEkyX1JBSURfUERfU1RBVEVfT0ZGTElORToKIAljYXNlIE1QSTJfUkFJRF9QRF9TVEFURV9OT1RfQ09ORklHVVJFRDoKIAljYXNlIE1QSTJfUkFJRF9QRF9TVEFURV9OT1RfQ09NUEFUSUJMRToKLQljYXNlIE1QSTJfUkFJRF9QRF9TVEFURV9IT1RfU1BBUkU6CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtNTQ3MSw3ICs1ODA3LDcgQEAKIAlzYXNfYWRkcmVzcyA9IHNhc19kZXZpY2UtPnNhc19hZGRyZXNzOwogCiAJLyogaWYgaGlkZGVuIHJhaWQgY29tcG9uZW50LCB0aGVuIGNoYW5nZSB0byB2b2x1bWUgY2hhcmFjdGVyaXN0aWNzICovCi0JaWYgKHNhc19kZXZpY2UtPmhpZGRlbl9yYWlkX2NvbXBvbmVudCAmJiBzYXNfZGV2aWNlLT52b2x1bWVfaGFuZGxlKSB7CisJaWYgKHRlc3RfYml0KGhhbmRsZSwgaW9jLT5wZF9oYW5kbGVzKSAmJiBzYXNfZGV2aWNlLT52b2x1bWVfaGFuZGxlKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAkJcmFpZF9kZXZpY2UgPSBfc2NzaWhfcmFpZF9kZXZpY2VfZmluZF9ieV9oYW5kbGUoCiAJCSAgICBpb2MsIHNhc19kZXZpY2UtPnZvbHVtZV9oYW5kbGUpOwpAQCAtNTQ4NSw3ICs1ODIxLDcgQEAKIAl9CiAKIAlpZiAoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX1RBU0tfU0VUX0ZVTEwpCi0JCXN0YXJnZXRfcHJpbnRrKEtFUk5fREVCVUcsIHNhc19kZXZpY2UtPnN0YXJnZXQsICJ0YXNrIHNldCAiCisJCXN0YXJnZXRfcHJpbnRrKEtFUk5fSU5GTywgc2FzX2RldmljZS0+c3RhcmdldCwgInRhc2sgc2V0ICIKIAkJICAgICJmdWxsOiBoYW5kbGUoMHglMDR4KSwgc2FzX2FkZHIoMHglMDE2bGx4KSwgZGVwdGgoJWQpXG4iLAogCQkgICAgaGFuZGxlLCAodW5zaWduZWQgbG9uZyBsb25nKXNhc19hZGRyZXNzLCBjdXJyZW50X2RlcHRoKTsKIApAQCAtNTY5Niw5ICs2MDMyLDEyIEBACiBfc2NzaWhfc2VhcmNoX3Jlc3BvbmRpbmdfcmFpZF9kZXZpY2VzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKIHsKIAlNcGkyUmFpZFZvbFBhZ2UxX3Qgdm9sdW1lX3BnMTsKKwlNcGkyUmFpZFZvbFBhZ2UwX3Qgdm9sdW1lX3BnMDsKKwlNcGkyUmFpZFBoeXNEaXNrUGFnZTBfdCBwZF9wZzA7CiAJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OwogCXUxNiBpb2Nfc3RhdHVzOwogCXUxNiBoYW5kbGU7CisJdTggcGh5c19kaXNrX251bTsKIAogCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlc1xuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CiAKQEAgLTU3MTMsOCArNjA1MiwzMiBAQAogCQlpZiAoaW9jX3N0YXR1cyA9PSBNUEkyX0lPQ1NUQVRVU19DT05GSUdfSU5WQUxJRF9QQUdFKQogCQkJYnJlYWs7CiAJCWhhbmRsZSA9IGxlMTZfdG9fY3B1KHZvbHVtZV9wZzEuRGV2SGFuZGxlKTsKLQkJX3Njc2loX21hcmtfcmVzcG9uZGluZ19yYWlkX2RldmljZShpb2MsCi0JCSAgICBsZTY0X3RvX2NwdSh2b2x1bWVfcGcxLldXSUQpLCBoYW5kbGUpOworCisJCWlmIChtcHQyc2FzX2NvbmZpZ19nZXRfcmFpZF92b2x1bWVfcGcwKGlvYywgJm1waV9yZXBseSwKKwkJICAgICZ2b2x1bWVfcGcwLCBNUEkyX1JBSURfVk9MVU1FX1BHQURfRk9STV9IQU5ETEUsIGhhbmRsZSwKKwkJICAgICBzaXplb2YoTXBpMlJhaWRWb2xQYWdlMF90KSkpCisJCQljb250aW51ZTsKKworCQlpZiAodm9sdW1lX3BnMC5Wb2x1bWVTdGF0ZSA9PSBNUEkyX1JBSURfVk9MX1NUQVRFX09QVElNQUwgfHwKKwkJICAgIHZvbHVtZV9wZzAuVm9sdW1lU3RhdGUgPT0gTVBJMl9SQUlEX1ZPTF9TVEFURV9PTkxJTkUgfHwKKwkJICAgIHZvbHVtZV9wZzAuVm9sdW1lU3RhdGUgPT0gTVBJMl9SQUlEX1ZPTF9TVEFURV9ERUdSQURFRCkKKwkJCV9zY3NpaF9tYXJrX3Jlc3BvbmRpbmdfcmFpZF9kZXZpY2UoaW9jLAorCQkJICAgIGxlNjRfdG9fY3B1KHZvbHVtZV9wZzEuV1dJRCksIGhhbmRsZSk7CisJfQorCisJLyogcmVmcmVzaCB0aGUgcGRfaGFuZGxlcyAqLworCXBoeXNfZGlza19udW0gPSAweEZGOworCW1lbXNldChpb2MtPnBkX2hhbmRsZXMsIDAsIGlvYy0+cGRfaGFuZGxlc19zeik7CisJd2hpbGUgKCEobXB0MnNhc19jb25maWdfZ2V0X3BoeXNfZGlza19wZzAoaW9jLCAmbXBpX3JlcGx5LAorCSAgICAmcGRfcGcwLCBNUEkyX1BIWVNESVNLX1BHQURfRk9STV9HRVRfTkVYVF9QSFlTRElTS05VTSwKKwkgICAgcGh5c19kaXNrX251bSkpKSB7CisJCWlvY19zdGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuSU9DU3RhdHVzKSAmCisJCSAgICBNUEkyX0lPQ1NUQVRVU19NQVNLOworCQlpZiAoaW9jX3N0YXR1cyA9PSBNUEkyX0lPQ1NUQVRVU19DT05GSUdfSU5WQUxJRF9QQUdFKQorCQkJYnJlYWs7CisJCXBoeXNfZGlza19udW0gPSBwZF9wZzAuUGh5c0Rpc2tOdW07CisJCWhhbmRsZSA9IGxlMTZfdG9fY3B1KHBkX3BnMC5EZXZIYW5kbGUpOworCQlzZXRfYml0KGhhbmRsZSwgaW9jLT5wZF9oYW5kbGVzKTsKIAl9CiB9CiAKQEAgLTU4NzYsMTEgKzYyMzksMTEgQEAKIHsKIAlzd2l0Y2ggKHJlc2V0X3BoYXNlKSB7CiAJY2FzZSBNUFQyX0lPQ19QUkVfUkVTRVQ6Ci0JCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6ICIKKwkJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiAiCiAJCSAgICAiTVBUMl9JT0NfUFJFX1JFU0VUXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CiAJCWJyZWFrOwogCWNhc2UgTVBUMl9JT0NfQUZURVJfUkVTRVQ6Ci0JCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6ICIKKwkJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiAiCiAJCSAgICAiTVBUMl9JT0NfQUZURVJfUkVTRVRcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKIAkJaWYgKGlvYy0+c2NzaWhfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9QRU5ESU5HKSB7CiAJCQlpb2MtPnNjc2loX2NtZHMuc3RhdHVzIHw9IE1QVDJfQ01EX1JFU0VUOwpAQCAtNTg5Nyw3ICs2MjYwLDcgQEAKIAkJX3Njc2loX3F1ZXVlX3Jlc2Nhbihpb2MpOwogCQlicmVhazsKIAljYXNlIE1QVDJfSU9DX0RPTkVfUkVTRVQ6Ci0JCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6ICIKKwkJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiAiCiAJCSAgICAiTVBUMl9JT0NfRE9ORV9SRVNFVFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOwogCQlfc2NzaWhfc2FzX2hvc3RfcmVmcmVzaChpb2MpOwogCQlfc2NzaWhfcHJlcF9kZXZpY2Vfc2Nhbihpb2MpOwpAQCAtNTkyNSw3ICs2Mjg4LDggQEAKIAlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBmd19ldmVudC0+aW9jOwogCiAJLyogdGhlIHF1ZXVlIGlzIGJlaW5nIGZsdXNoZWQgc28gaWdub3JlIHRoaXMgZXZlbnQgKi8KLQlpZiAoaW9jLT5yZW1vdmVfaG9zdCB8fCBmd19ldmVudC0+Y2FuY2VsX3BlbmRpbmdfd29yaykgeworCWlmIChpb2MtPnJlbW92ZV9ob3N0IHx8IGZ3X2V2ZW50LT5jYW5jZWxfcGVuZGluZ193b3JrIHx8CisJICAgIGlvYy0+cGNpX2Vycm9yX3JlY292ZXJ5KSB7CiAJCV9zY3NpaF9md19ldmVudF9mcmVlKGlvYywgZndfZXZlbnQpOwogCQlyZXR1cm47CiAJfQpAQCAtNjAwNyw3ICs2MzcxLDcgQEAKIAl1MTYgc3o7CiAKIAkvKiBldmVudHMgdHVybmVkIG9mZiBkdWUgdG8gaG9zdCByZXNldCBvciBkcml2ZXIgdW5sb2FkaW5nICovCi0JaWYgKGlvYy0+cmVtb3ZlX2hvc3QpCisJaWYgKGlvYy0+cmVtb3ZlX2hvc3QgfHwgaW9jLT5wY2lfZXJyb3JfcmVjb3ZlcnkpCiAJCXJldHVybiAxOwogCiAJbXBpX3JlcGx5ID0gbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CkBAIC02MDM0LDE0ICs2Mzk4LDIxIEBACiAJCSAgICAoTXBpMkV2ZW50RGF0YVNhc1RvcG9sb2d5Q2hhbmdlTGlzdF90ICopCiAJCSAgICBtcGlfcmVwbHktPkV2ZW50RGF0YSk7CiAJCWJyZWFrOwotCisJY2FzZSBNUEkyX0VWRU5UX0lSX0NPTkZJR1VSQVRJT05fQ0hBTkdFX0xJU1Q6CisJCV9zY3NpaF9jaGVja19pcl9jb25maWdfdW5oaWRlX2V2ZW50cyhpb2MsCisJCSAgICAoTXBpMkV2ZW50RGF0YUlyQ29uZmlnQ2hhbmdlTGlzdF90ICopCisJCSAgICBtcGlfcmVwbHktPkV2ZW50RGF0YSk7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9JUl9WT0xVTUU6CisJCV9zY3NpaF9jaGVja192b2x1bWVfZGVsZXRlX2V2ZW50cyhpb2MsCisJCSAgICAoTXBpMkV2ZW50RGF0YUlyVm9sdW1lX3QgKikKKwkJICAgIG1waV9yZXBseS0+RXZlbnREYXRhKTsKKwkJYnJlYWs7CiAJY2FzZSBNUEkyX0VWRU5UX1NBU19ERVZJQ0VfU1RBVFVTX0NIQU5HRToKIAljYXNlIE1QSTJfRVZFTlRfSVJfT1BFUkFUSU9OX1NUQVRVUzoKIAljYXNlIE1QSTJfRVZFTlRfU0FTX0RJU0NPVkVSWToKIAljYXNlIE1QSTJfRVZFTlRfU0FTX0VOQ0xfREVWSUNFX1NUQVRVU19DSEFOR0U6Ci0JY2FzZSBNUEkyX0VWRU5UX0lSX1ZPTFVNRToKIAljYXNlIE1QSTJfRVZFTlRfSVJfUEhZU0lDQUxfRElTSzoKLQljYXNlIE1QSTJfRVZFTlRfSVJfQ09ORklHVVJBVElPTl9DSEFOR0VfTElTVDoKIAljYXNlIE1QSTJfRVZFTlRfVEFTS19TRVRfRlVMTDoKIAkJYnJlYWs7CiAKQEAgLTY1NDgsOSArNjkxOSwxMSBAQAogCWlvYy0+c2NzaWhfY2JfaWR4ID0gc2NzaWhfY2JfaWR4OwogCWlvYy0+Y29uZmlnX2NiX2lkeCA9IGNvbmZpZ19jYl9pZHg7CiAJaW9jLT50bV90cl9jYl9pZHggPSB0bV90cl9jYl9pZHg7CisJaW9jLT50bV90cl92b2x1bWVfY2JfaWR4ID0gdG1fdHJfdm9sdW1lX2NiX2lkeDsKIAlpb2MtPnRtX3Nhc19jb250cm9sX2NiX2lkeCA9IHRtX3Nhc19jb250cm9sX2NiX2lkeDsKIAlpb2MtPmxvZ2dpbmdfbGV2ZWwgPSBsb2dnaW5nX2xldmVsOwogCS8qIG1pc2Mgc2VtYXBob3JlcyBhbmQgc3BpbiBsb2NrcyAqLworCW11dGV4X2luaXQoJmlvYy0+cmVzZXRfaW5fcHJvZ3Jlc3NfbXV0ZXgpOwogCXNwaW5fbG9ja19pbml0KCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmaW9jLT5zYXNfZGV2aWNlX2xvY2spOwpAQCAtNjU2NSw5ICs2OTM4LDEwIEBACiAJSU5JVF9MSVNUX0hFQUQoJmlvYy0+cmFpZF9kZXZpY2VfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmlvYy0+c2FzX2hiYS5zYXNfcG9ydF9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmaW9jLT5kZWxheWVkX3RyX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZpb2MtPmRlbGF5ZWRfdHJfdm9sdW1lX2xpc3QpOwogCiAJLyogaW5pdCBzaG9zdCBwYXJhbWV0ZXJzICovCi0Jc2hvc3QtPm1heF9jbWRfbGVuID0gMTY7CisJc2hvc3QtPm1heF9jbWRfbGVuID0gMzI7CiAJc2hvc3QtPm1heF9sdW4gPSBtYXhfbHVuOwogCXNob3N0LT50cmFuc3BvcnR0ID0gbXB0MnNhc190cmFuc3BvcnRfdGVtcGxhdGU7CiAJc2hvc3QtPnVuaXF1ZV9pZCA9IGlvYy0+aWQ7CkBAIC02NTgwLDcgKzY5NTQsNyBAQAogCX0KIAogCXNjc2lfaG9zdF9zZXRfcHJvdChzaG9zdCwgU0hPU1RfRElGX1RZUEUxX1BST1RFQ1RJT04KLQkgICAgfCBTSE9TVF9ESUZfVFlQRTNfUFJPVEVDVElPTik7CisJICAgIHwgU0hPU1RfRElGX1RZUEUyX1BST1RFQ1RJT04gfCBTSE9TVF9ESUZfVFlQRTNfUFJPVEVDVElPTik7CiAJc2NzaV9ob3N0X3NldF9ndWFyZChzaG9zdCwgU0hPU1RfRElYX0dVQVJEX0NSQyk7CiAKIAkvKiBldmVudCB0aHJlYWQgKi8KQEAgLTY3MDAsMTIgKzcwNzQsMTcgQEAKIAljYXNlIHBjaV9jaGFubmVsX2lvX25vcm1hbDoKIAkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0NBTl9SRUNPVkVSOwogCWNhc2UgcGNpX2NoYW5uZWxfaW9fZnJvemVuOgorCQkvKiBGYXRhbCBlcnJvciwgcHJlcGFyZSBmb3Igc2xvdCByZXNldCAqLworCQlpb2MtPnBjaV9lcnJvcl9yZWNvdmVyeSA9IDE7CiAJCXNjc2lfYmxvY2tfcmVxdWVzdHMoaW9jLT5zaG9zdCk7CiAJCW1wdDJzYXNfYmFzZV9zdG9wX3dhdGNoZG9nKGlvYyk7CiAJCW1wdDJzYXNfYmFzZV9mcmVlX3Jlc291cmNlcyhpb2MpOwogCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKIAljYXNlIHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZToKLQkJX3Njc2loX3JlbW92ZShwZGV2KTsKKwkJLyogUGVybWFuZW50IGVycm9yLCBwcmVwYXJlIGZvciBkZXZpY2UgcmVtb3ZhbCAqLworCQlpb2MtPnBjaV9lcnJvcl9yZWNvdmVyeSA9IDE7CisJCW1wdDJzYXNfYmFzZV9zdG9wX3dhdGNoZG9nKGlvYyk7CisJCV9zY3NpaF9mbHVzaF9ydW5uaW5nX2NtZHMoaW9jKTsKIAkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CiAJfQogCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUOwpAQCAtNjcyOSw3ICs3MTA4LDkgQEAKIAlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiUENJIGVycm9yOiBzbG90IHJlc2V0IGNhbGxiYWNrISFcbiIsCiAJCWlvYy0+bmFtZSk7CiAKKwlpb2MtPnBjaV9lcnJvcl9yZWNvdmVyeSA9IDA7CiAJaW9jLT5wZGV2ID0gcGRldjsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKIAlyYyA9IG1wdDJzYXNfYmFzZV9tYXBfcmVzb3VyY2VzKGlvYyk7CiAJaWYgKHJjKQogCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKQEAgLTY4NDUsNyArNzIyNiw3IEBACiAJIC8qIHF1ZXVlY29tbWFuZCBjYWxsYmFjayBoYW5kZXIgKi8KIAlzY3NpX2lvX2NiX2lkeCA9IG1wdDJzYXNfYmFzZV9yZWdpc3Rlcl9jYWxsYmFja19oYW5kbGVyKF9zY3NpaF9pb19kb25lKTsKIAotCS8qIHRhc2sgbWFuYWdtZW50IGNhbGxiYWNrIGhhbmRsZXIgKi8KKwkvKiB0YXNrIG1hbmFnZW1lbnQgY2FsbGJhY2sgaGFuZGxlciAqLwogCXRtX2NiX2lkeCA9IG1wdDJzYXNfYmFzZV9yZWdpc3Rlcl9jYWxsYmFja19oYW5kbGVyKF9zY3NpaF90bV9kb25lKTsKIAogCS8qIGJhc2UgaW50ZXJuYWwgY29tbWFuZHMgY2FsbGJhY2sgaGFuZGxlciAqLwpAQCAtNjg2Nyw2ICs3MjQ4LDEwIEBACiAKIAl0bV90cl9jYl9pZHggPSBtcHQyc2FzX2Jhc2VfcmVnaXN0ZXJfY2FsbGJhY2tfaGFuZGxlcigKIAkgICAgX3Njc2loX3RtX3RyX2NvbXBsZXRlKTsKKworCXRtX3RyX3ZvbHVtZV9jYl9pZHggPSBtcHQyc2FzX2Jhc2VfcmVnaXN0ZXJfY2FsbGJhY2tfaGFuZGxlcigKKwkgICAgX3Njc2loX3RtX3ZvbHVtZV90cl9jb21wbGV0ZSk7CisKIAl0bV9zYXNfY29udHJvbF9jYl9pZHggPSBtcHQyc2FzX2Jhc2VfcmVnaXN0ZXJfY2FsbGJhY2tfaGFuZGxlcigKIAkgICAgX3Njc2loX3Nhc19jb250cm9sX2NvbXBsZXRlKTsKIApAQCAtNjkwNiw2ICs3MjkxLDcgQEAKIAltcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyKGN0bF9jYl9pZHgpOwogCiAJbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcih0bV90cl9jYl9pZHgpOworCW1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIodG1fdHJfdm9sdW1lX2NiX2lkeCk7CiAJbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcih0bV9zYXNfY29udHJvbF9jYl9pZHgpOwogCiAJLyogcmFpZCB0cmFuc3BvcnQgc3VwcG9ydCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfdHJhbnNwb3J0LmMKaW5kZXggMjcyN2MzYi4uYjU1YzZkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3RyYW5zcG9ydC5jCkBAIC0xNDAsNyArMTQwLDcgQEAKIAl1MzIgZGV2aWNlX2luZm87CiAJdTMyIGlvY19zdGF0dXM7CiAKLQlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSkgeworCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5IHx8IGlvYy0+cGNpX2Vycm9yX3JlY292ZXJ5KSB7CiAJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogaG9zdCByZXNldCBpbiBwcm9ncmVzcyFcbiIsCiAJCSAgICBfX2Z1bmNfXywgaW9jLT5uYW1lKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0zMDIsNyArMzAyLDcgQEAKIAl1NjQgKnNhc19hZGRyZXNzX2xlOwogCXUxNiB3YWl0X3N0YXRlX2NvdW50OwogCi0JaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpIHsKKwlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSB8fCBpb2MtPnBjaV9lcnJvcl9yZWNvdmVyeSkgewogCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGhvc3QgcmVzZXQgaW4gcHJvZ3Jlc3MhXG4iLAogCQkgICAgX19mdW5jX18sIGlvYy0+bmFtZSk7CiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMzk3LDcgKzM5Nyw3IEBACiAJICAgIHNpemVvZihzdHJ1Y3QgcmVwX21hbnVfcmVwbHkpLCBkYXRhX291dF9kbWEgKwogCSAgICBzaXplb2Yoc3RydWN0IHJlcF9tYW51X3JlcXVlc3QpKTsKIAotCWR0cmFuc3BvcnRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgInJlcG9ydF9tYW51ZmFjdHVyZSAtICIKKwlkdHJhbnNwb3J0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInJlcG9ydF9tYW51ZmFjdHVyZSAtICIKIAkgICAgInNlbmQgdG8gc2FzX2FkZHIoMHglMDE2bGx4KVxuIiwgaW9jLT5uYW1lLAogCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXNhc19hZGRyZXNzKSk7CiAJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKQEAgLTQxNSw3ICs0MTUsNyBAQAogCQlnb3RvIGlzc3VlX2hvc3RfcmVzZXQ7CiAJfQogCi0JZHRyYW5zcG9ydHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAicmVwb3J0X21hbnVmYWN0dXJlIC0gIgorCWR0cmFuc3BvcnRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicmVwb3J0X21hbnVmYWN0dXJlIC0gIgogCSAgICAiY29tcGxldGVcbiIsIGlvYy0+bmFtZSkpOwogCiAJaWYgKGlvYy0+dHJhbnNwb3J0X2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUkVQTFlfVkFMSUQpIHsKQEAgLTQyMyw3ICs0MjMsNyBAQAogCiAJCW1waV9yZXBseSA9IGlvYy0+dHJhbnNwb3J0X2NtZHMucmVwbHk7CiAKLQkJZHRyYW5zcG9ydHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVAorCQlkdHJhbnNwb3J0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQKIAkJICAgICJyZXBvcnRfbWFudWZhY3R1cmUgLSByZXBseSBkYXRhIHRyYW5zZmVyIHNpemUoJWQpXG4iLAogCQkgICAgaW9jLT5uYW1lLCBsZTE2X3RvX2NwdShtcGlfcmVwbHktPlJlc3BvbnNlRGF0YUxlbmd0aCkpKTsKIApAQCAtNDQ5LDcgKzQ0OSw3IEBACiAJCQkgICAgbWFudWZhY3R1cmVfcmVwbHktPmNvbXBvbmVudF9yZXZpc2lvbl9pZDsKIAkJfQogCX0gZWxzZQotCQlkdHJhbnNwb3J0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UCisJCWR0cmFuc3BvcnRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVAogCQkgICAgInJlcG9ydF9tYW51ZmFjdHVyZSAtIG5vIHJlcGx5XG4iLCBpb2MtPm5hbWUpKTsKIAogIGlzc3VlX2hvc3RfcmVzZXQ6CkBAIC04OTQsNyArODk0LDcgQEAKIAlzdHJ1Y3QgX3Nhc19ub2RlICpzYXNfbm9kZTsKIAlzdHJ1Y3QgX3Nhc19waHkgKm1wdDJzYXNfcGh5OwogCi0JaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpCisJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkgfHwgaW9jLT5wY2lfZXJyb3JfcmVjb3ZlcnkpCiAJCXJldHVybjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKQEAgLTk0MCwyMiArOTQwLDIzMCBAQAogCXJldHVybiBzaG9zdF9wcml2KHNob3N0KTsKIH0KIAotc3RhdGljIHN0cnVjdCBfc2FzX3BoeSAqCi1fdHJhbnNwb3J0X2ZpbmRfbG9jYWxfcGh5KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgc3RydWN0IHNhc19waHkgKnBoeSkKLXsKLQlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBpb2MtPnNhc19oYmEubnVtX3BoeXM7IGkrKykKLQkJaWYgKGlvYy0+c2FzX2hiYS5waHlbaV0ucGh5ID09IHBoeSkKLQkJCXJldHVybigmaW9jLT5zYXNfaGJhLnBoeVtpXSk7Ci0JcmV0dXJuIE5VTEw7CisvKiByZXBvcnQgcGh5IGVycm9yIGxvZyBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBwaHlfZXJyb3JfbG9nX3JlcXVlc3R7CisJdTggc21wX2ZyYW1lX3R5cGU7IC8qIDB4NDAgKi8KKwl1OCBmdW5jdGlvbjsgLyogMHgxMSAqLworCXU4IGFsbG9jYXRlZF9yZXNwb25zZV9sZW5ndGg7CisJdTggcmVxdWVzdF9sZW5ndGg7IC8qIDAyICovCisJdTggcmVzZXJ2ZWRfMVs1XTsKKwl1OCBwaHlfaWRlbnRpZmllcjsKKwl1OCByZXNlcnZlZF8yWzJdOworfTsKKworLyogcmVwb3J0IHBoeSBlcnJvciBsb2cgcmVwbHkgc3RydWN0dXJlICovCitzdHJ1Y3QgcGh5X2Vycm9yX2xvZ19yZXBseXsKKwl1OCBzbXBfZnJhbWVfdHlwZTsgLyogMHg0MSAqLworCXU4IGZ1bmN0aW9uOyAvKiAweDExICovCisJdTggZnVuY3Rpb25fcmVzdWx0OworCXU4IHJlc3BvbnNlX2xlbmd0aDsKKwl1MTYgZXhwYW5kZXJfY2hhbmdlX2NvdW50OworCXU4IHJlc2VydmVkXzFbM107CisJdTggcGh5X2lkZW50aWZpZXI7CisJdTggcmVzZXJ2ZWRfMlsyXTsKKwl1MzIgaW52YWxpZF9kd29yZDsKKwl1MzIgcnVubmluZ19kaXNwYXJpdHlfZXJyb3I7CisJdTMyIGxvc3Nfb2ZfZHdvcmRfc3luYzsKKwl1MzIgcGh5X3Jlc2V0X3Byb2JsZW07Cit9OworCisvKioKKyAqIF90cmFuc3BvcnRfZ2V0X2V4cGFuZGVyX3BoeV9lcnJvcl9sb2cgLSByZXR1cm4gZXhwYW5kZXIgY291bnRlcnMKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHBoeTogVGhlIHNhcyBwaHkgb2JqZWN0CisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqCisgKi8KK3N0YXRpYyBpbnQKK190cmFuc3BvcnRfZ2V0X2V4cGFuZGVyX3BoeV9lcnJvcl9sb2coc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBzYXNfcGh5ICpwaHkpCit7CisJTXBpMlNtcFBhc3N0aHJvdWdoUmVxdWVzdF90ICptcGlfcmVxdWVzdDsKKwlNcGkyU21wUGFzc3Rocm91Z2hSZXBseV90ICptcGlfcmVwbHk7CisJc3RydWN0IHBoeV9lcnJvcl9sb2dfcmVxdWVzdCAqcGh5X2Vycm9yX2xvZ19yZXF1ZXN0OworCXN0cnVjdCBwaHlfZXJyb3JfbG9nX3JlcGx5ICpwaHlfZXJyb3JfbG9nX3JlcGx5OworCWludCByYzsKKwl1MTYgc21pZDsKKwl1MzIgaW9jX3N0YXRlOworCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQ7CisJdm9pZCAqcHNnZTsKKwl1MzIgc2dsX2ZsYWdzOworCXU4IGlzc3VlX3Jlc2V0ID0gMDsKKwl2b2lkICpkYXRhX291dCA9IE5VTEw7CisJZG1hX2FkZHJfdCBkYXRhX291dF9kbWE7CisJdTMyIHN6OworCXU2NCAqc2FzX2FkZHJlc3NfbGU7CisJdTE2IHdhaXRfc3RhdGVfY291bnQ7CisKKwlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSB8fCBpb2MtPnBjaV9lcnJvcl9yZWNvdmVyeSkgeworCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGhvc3QgcmVzZXQgaW4gcHJvZ3Jlc3MhXG4iLAorCQkgICAgX19mdW5jX18sIGlvYy0+bmFtZSk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCW11dGV4X2xvY2soJmlvYy0+dHJhbnNwb3J0X2NtZHMubXV0ZXgpOworCisJaWYgKGlvYy0+dHJhbnNwb3J0X2NtZHMuc3RhdHVzICE9IE1QVDJfQ01EX05PVF9VU0VEKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiB0cmFuc3BvcnRfY21kcyBpbiB1c2VcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmMgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisJaW9jLT50cmFuc3BvcnRfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9QRU5ESU5HOworCisJd2FpdF9zdGF0ZV9jb3VudCA9IDA7CisJaW9jX3N0YXRlID0gbXB0MnNhc19iYXNlX2dldF9pb2NzdGF0ZShpb2MsIDEpOworCXdoaWxlIChpb2Nfc3RhdGUgIT0gTVBJMl9JT0NfU1RBVEVfT1BFUkFUSU9OQUwpIHsKKwkJaWYgKHdhaXRfc3RhdGVfY291bnQrKyA9PSAxMCkgeworCQkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVAorCQkJICAgICIlczogZmFpbGVkIGR1ZSB0byBpb2Mgbm90IG9wZXJhdGlvbmFsXG4iLAorCQkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQkJcmMgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKwkJc3NsZWVwKDEpOworCQlpb2Nfc3RhdGUgPSBtcHQyc2FzX2Jhc2VfZ2V0X2lvY3N0YXRlKGlvYywgMSk7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogd2FpdGluZyBmb3IgIgorCQkgICAgIm9wZXJhdGlvbmFsIHN0YXRlKGNvdW50PSVkKVxuIiwgaW9jLT5uYW1lLAorCQkgICAgX19mdW5jX18sIHdhaXRfc3RhdGVfY291bnQpOworCX0KKwlpZiAod2FpdF9zdGF0ZV9jb3VudCkKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBpb2MgaXMgb3BlcmF0aW9uYWxcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKworCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWQoaW9jLCBpb2MtPnRyYW5zcG9ydF9jYl9pZHgpOworCWlmICghc21pZCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIG9idGFpbmluZyBhIHNtaWRcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmMgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisKKwltcGlfcmVxdWVzdCA9IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKGlvYywgc21pZCk7CisJaW9jLT50cmFuc3BvcnRfY21kcy5zbWlkID0gc21pZDsKKworCXN6ID0gc2l6ZW9mKHN0cnVjdCBwaHlfZXJyb3JfbG9nX3JlcXVlc3QpICsKKwkgICAgc2l6ZW9mKHN0cnVjdCBwaHlfZXJyb3JfbG9nX3JlcGx5KTsKKwlkYXRhX291dCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGlvYy0+cGRldiwgc3osICZkYXRhX291dF9kbWEpOworCWlmICghZGF0YV9vdXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLCBfX0ZJTEVfXywKKwkJICAgIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVOT01FTTsKKwkJbXB0MnNhc19iYXNlX2ZyZWVfc21pZChpb2MsIHNtaWQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyYyA9IC1FSU5WQUw7CisJbWVtc2V0KGRhdGFfb3V0LCAwLCBzeik7CisJcGh5X2Vycm9yX2xvZ19yZXF1ZXN0ID0gZGF0YV9vdXQ7CisJcGh5X2Vycm9yX2xvZ19yZXF1ZXN0LT5zbXBfZnJhbWVfdHlwZSA9IDB4NDA7CisJcGh5X2Vycm9yX2xvZ19yZXF1ZXN0LT5mdW5jdGlvbiA9IDB4MTE7CisJcGh5X2Vycm9yX2xvZ19yZXF1ZXN0LT5yZXF1ZXN0X2xlbmd0aCA9IDI7CisJcGh5X2Vycm9yX2xvZ19yZXF1ZXN0LT5hbGxvY2F0ZWRfcmVzcG9uc2VfbGVuZ3RoID0gMDsKKwlwaHlfZXJyb3JfbG9nX3JlcXVlc3QtPnBoeV9pZGVudGlmaWVyID0gcGh5LT5udW1iZXI7CisKKwltZW1zZXQobXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyU21wUGFzc3Rocm91Z2hSZXF1ZXN0X3QpKTsKKwltcGlfcmVxdWVzdC0+RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX1NNUF9QQVNTVEhST1VHSDsKKwltcGlfcmVxdWVzdC0+UGh5c2ljYWxQb3J0ID0gMHhGRjsKKwltcGlfcmVxdWVzdC0+VkZfSUQgPSAwOyAvKiBUT0RPICovCisJbXBpX3JlcXVlc3QtPlZQX0lEID0gMDsKKwlzYXNfYWRkcmVzc19sZSA9ICh1NjQgKikmbXBpX3JlcXVlc3QtPlNBU0FkZHJlc3M7CisJKnNhc19hZGRyZXNzX2xlID0gY3B1X3RvX2xlNjQocGh5LT5pZGVudGlmeS5zYXNfYWRkcmVzcyk7CisJbXBpX3JlcXVlc3QtPlJlcXVlc3REYXRhTGVuZ3RoID0KKwkgICAgY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBwaHlfZXJyb3JfbG9nX3JlcXVlc3QpKTsKKwlwc2dlID0gJm1waV9yZXF1ZXN0LT5TR0w7CisKKwkvKiBXUklURSBzZ2VsIGZpcnN0ICovCisJc2dsX2ZsYWdzID0gKE1QSTJfU0dFX0ZMQUdTX1NJTVBMRV9FTEVNRU5UIHwKKwkgICAgTVBJMl9TR0VfRkxBR1NfRU5EX09GX0JVRkZFUiB8IE1QSTJfU0dFX0ZMQUdTX0hPU1RfVE9fSU9DKTsKKwlzZ2xfZmxhZ3MgPSBzZ2xfZmxhZ3MgPDwgTVBJMl9TR0VfRkxBR1NfU0hJRlQ7CisJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUocHNnZSwgc2dsX2ZsYWdzIHwKKwkgICAgc2l6ZW9mKHN0cnVjdCBwaHlfZXJyb3JfbG9nX3JlcXVlc3QpLCBkYXRhX291dF9kbWEpOworCisJLyogaW5jciBzZ2VsICovCisJcHNnZSArPSBpb2MtPnNnZV9zaXplOworCisJLyogUkVBRCBzZ2VsIGxhc3QgKi8KKwlzZ2xfZmxhZ3MgPSAoTVBJMl9TR0VfRkxBR1NfU0lNUExFX0VMRU1FTlQgfAorCSAgICBNUEkyX1NHRV9GTEFHU19MQVNUX0VMRU1FTlQgfCBNUEkyX1NHRV9GTEFHU19FTkRfT0ZfQlVGRkVSIHwKKwkgICAgTVBJMl9TR0VfRkxBR1NfRU5EX09GX0xJU1QpOworCXNnbF9mbGFncyA9IHNnbF9mbGFncyA8PCBNUEkyX1NHRV9GTEFHU19TSElGVDsKKwlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZShwc2dlLCBzZ2xfZmxhZ3MgfAorCSAgICBzaXplb2Yoc3RydWN0IHBoeV9lcnJvcl9sb2dfcmVwbHkpLCBkYXRhX291dF9kbWEgKworCSAgICBzaXplb2Yoc3RydWN0IHBoeV9lcnJvcl9sb2dfcmVxdWVzdCkpOworCisJZHRyYW5zcG9ydHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJwaHlfZXJyb3JfbG9nIC0gIgorCSAgICAic2VuZCB0byBzYXNfYWRkcigweCUwMTZsbHgpLCBwaHkoJWQpXG4iLCBpb2MtPm5hbWUsCisJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGh5LT5pZGVudGlmeS5zYXNfYWRkcmVzcywgcGh5LT5udW1iZXIpKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOworCWluaXRfY29tcGxldGlvbigmaW9jLT50cmFuc3BvcnRfY21kcy5kb25lKTsKKwl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT50cmFuc3BvcnRfY21kcy5kb25lLAorCSAgICAxMCpIWik7CisKKwlpZiAoIShpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX0NPTVBMRVRFKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogdGltZW91dFxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlfZGVidWdfZHVtcF9tZihtcGlfcmVxdWVzdCwKKwkJICAgIHNpemVvZihNcGkyU21wUGFzc3Rocm91Z2hSZXF1ZXN0X3QpLzQpOworCQlpZiAoIShpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1JFU0VUKSkKKwkJCWlzc3VlX3Jlc2V0ID0gMTsKKwkJZ290byBpc3N1ZV9ob3N0X3Jlc2V0OworCX0KKworCWR0cmFuc3BvcnRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicGh5X2Vycm9yX2xvZyAtICIKKwkgICAgImNvbXBsZXRlXG4iLCBpb2MtPm5hbWUpKTsKKworCWlmIChpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1JFUExZX1ZBTElEKSB7CisKKwkJbXBpX3JlcGx5ID0gaW9jLT50cmFuc3BvcnRfY21kcy5yZXBseTsKKworCQlkdHJhbnNwb3J0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQKKwkJICAgICJwaHlfZXJyb3JfbG9nIC0gcmVwbHkgZGF0YSB0cmFuc2ZlciBzaXplKCVkKVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgbGUxNl90b19jcHUobXBpX3JlcGx5LT5SZXNwb25zZURhdGFMZW5ndGgpKSk7CisKKwkJaWYgKGxlMTZfdG9fY3B1KG1waV9yZXBseS0+UmVzcG9uc2VEYXRhTGVuZ3RoKSAhPQorCQkgICAgc2l6ZW9mKHN0cnVjdCBwaHlfZXJyb3JfbG9nX3JlcGx5KSkKKwkJCWdvdG8gb3V0OworCisJCXBoeV9lcnJvcl9sb2dfcmVwbHkgPSBkYXRhX291dCArCisJCSAgICBzaXplb2Yoc3RydWN0IHBoeV9lcnJvcl9sb2dfcmVxdWVzdCk7CisKKwkJZHRyYW5zcG9ydHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UCisJCSAgICAicGh5X2Vycm9yX2xvZyAtIGZ1bmN0aW9uX3Jlc3VsdCglZClcbiIsCisJCSAgICBpb2MtPm5hbWUsIHBoeV9lcnJvcl9sb2dfcmVwbHktPmZ1bmN0aW9uX3Jlc3VsdCkpOworCisJCXBoeS0+aW52YWxpZF9kd29yZF9jb3VudCA9CisJCSAgICBiZTMyX3RvX2NwdShwaHlfZXJyb3JfbG9nX3JlcGx5LT5pbnZhbGlkX2R3b3JkKTsKKwkJcGh5LT5ydW5uaW5nX2Rpc3Bhcml0eV9lcnJvcl9jb3VudCA9CisJCSAgICBiZTMyX3RvX2NwdShwaHlfZXJyb3JfbG9nX3JlcGx5LT5ydW5uaW5nX2Rpc3Bhcml0eV9lcnJvcik7CisJCXBoeS0+bG9zc19vZl9kd29yZF9zeW5jX2NvdW50ID0KKwkJICAgIGJlMzJfdG9fY3B1KHBoeV9lcnJvcl9sb2dfcmVwbHktPmxvc3Nfb2ZfZHdvcmRfc3luYyk7CisJCXBoeS0+cGh5X3Jlc2V0X3Byb2JsZW1fY291bnQgPQorCQkgICAgYmUzMl90b19jcHUocGh5X2Vycm9yX2xvZ19yZXBseS0+cGh5X3Jlc2V0X3Byb2JsZW0pOworCQlyYyA9IDA7CisJfSBlbHNlCisJCWR0cmFuc3BvcnRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVAorCQkgICAgInBoeV9lcnJvcl9sb2cgLSBubyByZXBseVxuIiwgaW9jLT5uYW1lKSk7CisKKyBpc3N1ZV9ob3N0X3Jlc2V0OgorCWlmIChpc3N1ZV9yZXNldCkKKwkJbXB0MnNhc19iYXNlX2hhcmRfcmVzZXRfaGFuZGxlcihpb2MsIENBTl9TTEVFUCwKKwkJICAgIEZPUkNFX0JJR19IQU1NRVIpOworIG91dDoKKwlpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOworCWlmIChkYXRhX291dCkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChpb2MtPnBkZXYsIHN6LCBkYXRhX291dCwgZGF0YV9vdXRfZG1hKTsKKworCW11dGV4X3VubG9jaygmaW9jLT50cmFuc3BvcnRfY21kcy5tdXRleCk7CisJcmV0dXJuIHJjOwogfQogCiAvKioKLSAqIF90cmFuc3BvcnRfZ2V0X2xpbmtlcnJvcnMgLQorICogX3RyYW5zcG9ydF9nZXRfbGlua2Vycm9ycyAtIHJldHVybiBwaHkgY291bnRlcnMgZm9yIGJvdGggaGJhIGFuZCBleHBhbmRlcnMKICAqIEBwaHk6IFRoZSBzYXMgcGh5IG9iamVjdAogICoKLSAqIE9ubHkgc3VwcG9ydCBzYXNfaG9zdCBkaXJlY3QgYXR0YWNoZWQgcGh5cy4KICAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCiAgKgogICovCkBAIC05NjMsMTcgKzExNzEsMjQgQEAKIF90cmFuc3BvcnRfZ2V0X2xpbmtlcnJvcnMoc3RydWN0IHNhc19waHkgKnBoeSkKIHsKIAlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBwaHlfdG9faW9jKHBoeSk7Ci0Jc3RydWN0IF9zYXNfcGh5ICptcHQyc2FzX3BoeTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCU1waTJDb25maWdSZXBseV90IG1waV9yZXBseTsKIAlNcGkyU2FzUGh5UGFnZTFfdCBwaHlfcGcxOwogCi0JbXB0MnNhc19waHkgPSBfdHJhbnNwb3J0X2ZpbmRfbG9jYWxfcGh5KGlvYywgcGh5KTsKLQotCWlmICghbXB0MnNhc19waHkpIC8qIHRoaXMgcGh5IG5vdCBvbiBzYXNfaG9zdCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKKwlpZiAoX3RyYW5zcG9ydF9zYXNfbm9kZV9maW5kX2J5X3Nhc19hZGRyZXNzKGlvYywKKwkgICAgcGh5LT5pZGVudGlmeS5zYXNfYWRkcmVzcykgPT0gTlVMTCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOwogCisJaWYgKHBoeS0+aWRlbnRpZnkuc2FzX2FkZHJlc3MgIT0gaW9jLT5zYXNfaGJhLnNhc19hZGRyZXNzKQorCQlyZXR1cm4gX3RyYW5zcG9ydF9nZXRfZXhwYW5kZXJfcGh5X2Vycm9yX2xvZyhpb2MsIHBoeSk7CisKKwkvKiBnZXQgaGJhIHBoeSBlcnJvciBsb2dzICovCiAJaWYgKChtcHQyc2FzX2NvbmZpZ19nZXRfcGh5X3BnMShpb2MsICZtcGlfcmVwbHksICZwaHlfcGcxLAotCQkgICAgbXB0MnNhc19waHktPnBoeV9pZCkpKSB7CisJCSAgICBwaHktPm51bWJlcikpKSB7CiAJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCiAJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOWElPOwpAQCAtOTgyLDggKzExOTcsNyBAQAogCWlmIChtcGlfcmVwbHkuSU9DU3RhdHVzIHx8IG1waV9yZXBseS5JT0NMb2dJbmZvKQogCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicGh5KCVkKSwgaW9jX3N0YXR1cyIKIAkJICAgICIoMHglMDR4KSwgbG9naW5mbygweCUwOHgpXG4iLCBpb2MtPm5hbWUsCi0JCSAgICBtcHQyc2FzX3BoeS0+cGh5X2lkLAotCQkgICAgbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cyksCisJCSAgICBwaHktPm51bWJlciwgbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cyksCiAJCSAgICBsZTMyX3RvX2NwdShtcGlfcmVwbHkuSU9DTG9nSW5mbykpOwogCiAJcGh5LT5pbnZhbGlkX2R3b3JkX2NvdW50ID0gbGUzMl90b19jcHUocGh5X3BnMS5JbnZhbGlkRHdvcmRDb3VudCk7CkBAIC0xMDA3LDE4ICsxMjIxLDE4IEBACiBfdHJhbnNwb3J0X2dldF9lbmNsb3N1cmVfaWRlbnRpZmllcihzdHJ1Y3Qgc2FzX3JwaHkgKnJwaHksIHU2NCAqaWRlbnRpZmllcikKIHsKIAlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBycGh5X3RvX2lvYyhycGh5KTsKLQlzdHJ1Y3QgX3Nhc19ub2RlICpzYXNfZXhwYW5kZXI7CisJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7Ci0Jc2FzX2V4cGFuZGVyID0gbXB0MnNhc19zY3NpaF9leHBhbmRlcl9maW5kX2J5X3Nhc19hZGRyZXNzKGlvYywKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlzYXNfZGV2aWNlID0gbXB0MnNhc19zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfc2FzX2FkZHJlc3MoaW9jLAogCSAgICBycGh5LT5pZGVudGlmeS5zYXNfYWRkcmVzcyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAotCWlmICghc2FzX2V4cGFuZGVyKQorCWlmICghc2FzX2RldmljZSkKIAkJcmV0dXJuIC1FTlhJTzsKIAotCSppZGVudGlmaWVyID0gc2FzX2V4cGFuZGVyLT5lbmNsb3N1cmVfbG9naWNhbF9pZDsKKwkqaWRlbnRpZmllciA9IHNhc19kZXZpY2UtPmVuY2xvc3VyZV9sb2dpY2FsX2lkOwogCXJldHVybiAwOwogfQogCkBAIC0xMDQ2LDMyICsxMjYwLDI2MCBAQAogCXJldHVybiBzYXNfZGV2aWNlLT5zbG90OwogfQogCisvKiBwaHkgY29udHJvbCByZXF1ZXN0IHN0cnVjdHVyZSAqLworc3RydWN0IHBoeV9jb250cm9sX3JlcXVlc3R7CisJdTggc21wX2ZyYW1lX3R5cGU7IC8qIDB4NDAgKi8KKwl1OCBmdW5jdGlvbjsgLyogMHg5MSAqLworCXU4IGFsbG9jYXRlZF9yZXNwb25zZV9sZW5ndGg7CisJdTggcmVxdWVzdF9sZW5ndGg7IC8qIDB4MDkgKi8KKwl1MTYgZXhwYW5kZXJfY2hhbmdlX2NvdW50OworCXU4IHJlc2VydmVkXzFbM107CisJdTggcGh5X2lkZW50aWZpZXI7CisJdTggcGh5X29wZXJhdGlvbjsKKwl1OCByZXNlcnZlZF8yWzEzXTsKKwl1NjQgYXR0YWNoZWRfZGV2aWNlX25hbWU7CisJdTggcHJvZ3JhbW1lZF9taW5fcGh5c2ljYWxfbGlua19yYXRlOworCXU4IHByb2dyYW1tZWRfbWF4X3BoeXNpY2FsX2xpbmtfcmF0ZTsKKwl1OCByZXNlcnZlZF8zWzZdOworfTsKKworLyogcGh5IGNvbnRyb2wgcmVwbHkgc3RydWN0dXJlICovCitzdHJ1Y3QgcGh5X2NvbnRyb2xfcmVwbHl7CisJdTggc21wX2ZyYW1lX3R5cGU7IC8qIDB4NDEgKi8KKwl1OCBmdW5jdGlvbjsgLyogMHgxMSAqLworCXU4IGZ1bmN0aW9uX3Jlc3VsdDsKKwl1OCByZXNwb25zZV9sZW5ndGg7Cit9OworCisjZGVmaW5lIFNNUF9QSFlfQ09OVFJPTF9MSU5LX1JFU0VUCSgweDAxKQorI2RlZmluZSBTTVBfUEhZX0NPTlRST0xfSEFSRF9SRVNFVAkoMHgwMikKKyNkZWZpbmUgU01QX1BIWV9DT05UUk9MX0RJU0FCTEUJCSgweDAzKQorCisvKioKKyAqIF90cmFuc3BvcnRfZXhwYW5kZXJfcGh5X2NvbnRyb2wgLSBleHBhbmRlciBwaHkgY29udHJvbAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAcGh5OiBUaGUgc2FzIHBoeSBvYmplY3QKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICoKKyAqLworc3RhdGljIGludAorX3RyYW5zcG9ydF9leHBhbmRlcl9waHlfY29udHJvbChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgc3RydWN0IHNhc19waHkgKnBoeSwgdTggcGh5X29wZXJhdGlvbikKK3sKKwlNcGkyU21wUGFzc3Rocm91Z2hSZXF1ZXN0X3QgKm1waV9yZXF1ZXN0OworCU1waTJTbXBQYXNzdGhyb3VnaFJlcGx5X3QgKm1waV9yZXBseTsKKwlzdHJ1Y3QgcGh5X2NvbnRyb2xfcmVxdWVzdCAqcGh5X2NvbnRyb2xfcmVxdWVzdDsKKwlzdHJ1Y3QgcGh5X2NvbnRyb2xfcmVwbHkgKnBoeV9jb250cm9sX3JlcGx5OworCWludCByYzsKKwl1MTYgc21pZDsKKwl1MzIgaW9jX3N0YXRlOworCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQ7CisJdm9pZCAqcHNnZTsKKwl1MzIgc2dsX2ZsYWdzOworCXU4IGlzc3VlX3Jlc2V0ID0gMDsKKwl2b2lkICpkYXRhX291dCA9IE5VTEw7CisJZG1hX2FkZHJfdCBkYXRhX291dF9kbWE7CisJdTMyIHN6OworCXU2NCAqc2FzX2FkZHJlc3NfbGU7CisJdTE2IHdhaXRfc3RhdGVfY291bnQ7CisKKwlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSkgeworCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGhvc3QgcmVzZXQgaW4gcHJvZ3Jlc3MhXG4iLAorCQkgICAgX19mdW5jX18sIGlvYy0+bmFtZSk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCW11dGV4X2xvY2soJmlvYy0+dHJhbnNwb3J0X2NtZHMubXV0ZXgpOworCisJaWYgKGlvYy0+dHJhbnNwb3J0X2NtZHMuc3RhdHVzICE9IE1QVDJfQ01EX05PVF9VU0VEKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiB0cmFuc3BvcnRfY21kcyBpbiB1c2VcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmMgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisJaW9jLT50cmFuc3BvcnRfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9QRU5ESU5HOworCisJd2FpdF9zdGF0ZV9jb3VudCA9IDA7CisJaW9jX3N0YXRlID0gbXB0MnNhc19iYXNlX2dldF9pb2NzdGF0ZShpb2MsIDEpOworCXdoaWxlIChpb2Nfc3RhdGUgIT0gTVBJMl9JT0NfU1RBVEVfT1BFUkFUSU9OQUwpIHsKKwkJaWYgKHdhaXRfc3RhdGVfY291bnQrKyA9PSAxMCkgeworCQkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVAorCQkJICAgICIlczogZmFpbGVkIGR1ZSB0byBpb2Mgbm90IG9wZXJhdGlvbmFsXG4iLAorCQkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQkJcmMgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKwkJc3NsZWVwKDEpOworCQlpb2Nfc3RhdGUgPSBtcHQyc2FzX2Jhc2VfZ2V0X2lvY3N0YXRlKGlvYywgMSk7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogd2FpdGluZyBmb3IgIgorCQkgICAgIm9wZXJhdGlvbmFsIHN0YXRlKGNvdW50PSVkKVxuIiwgaW9jLT5uYW1lLAorCQkgICAgX19mdW5jX18sIHdhaXRfc3RhdGVfY291bnQpOworCX0KKwlpZiAod2FpdF9zdGF0ZV9jb3VudCkKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBpb2MgaXMgb3BlcmF0aW9uYWxcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKworCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWQoaW9jLCBpb2MtPnRyYW5zcG9ydF9jYl9pZHgpOworCWlmICghc21pZCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIG9idGFpbmluZyBhIHNtaWRcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmMgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisKKwltcGlfcmVxdWVzdCA9IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKGlvYywgc21pZCk7CisJaW9jLT50cmFuc3BvcnRfY21kcy5zbWlkID0gc21pZDsKKworCXN6ID0gc2l6ZW9mKHN0cnVjdCBwaHlfY29udHJvbF9yZXF1ZXN0KSArCisJICAgIHNpemVvZihzdHJ1Y3QgcGh5X2NvbnRyb2xfcmVwbHkpOworCWRhdGFfb3V0ID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaW9jLT5wZGV2LCBzeiwgJmRhdGFfb3V0X2RtYSk7CisJaWYgKCFkYXRhX291dCkgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsIF9fRklMRV9fLAorCQkgICAgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmMgPSAtRU5PTUVNOworCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgc21pZCk7CisJCWdvdG8gb3V0OworCX0KKworCXJjID0gLUVJTlZBTDsKKwltZW1zZXQoZGF0YV9vdXQsIDAsIHN6KTsKKwlwaHlfY29udHJvbF9yZXF1ZXN0ID0gZGF0YV9vdXQ7CisJcGh5X2NvbnRyb2xfcmVxdWVzdC0+c21wX2ZyYW1lX3R5cGUgPSAweDQwOworCXBoeV9jb250cm9sX3JlcXVlc3QtPmZ1bmN0aW9uID0gMHg5MTsKKwlwaHlfY29udHJvbF9yZXF1ZXN0LT5yZXF1ZXN0X2xlbmd0aCA9IDk7CisJcGh5X2NvbnRyb2xfcmVxdWVzdC0+YWxsb2NhdGVkX3Jlc3BvbnNlX2xlbmd0aCA9IDA7CisJcGh5X2NvbnRyb2xfcmVxdWVzdC0+cGh5X2lkZW50aWZpZXIgPSBwaHktPm51bWJlcjsKKwlwaHlfY29udHJvbF9yZXF1ZXN0LT5waHlfb3BlcmF0aW9uID0gcGh5X29wZXJhdGlvbjsKKwlwaHlfY29udHJvbF9yZXF1ZXN0LT5wcm9ncmFtbWVkX21pbl9waHlzaWNhbF9saW5rX3JhdGUgPQorCSAgICBwaHktPm1pbmltdW1fbGlua3JhdGUgPDwgNDsKKwlwaHlfY29udHJvbF9yZXF1ZXN0LT5wcm9ncmFtbWVkX21heF9waHlzaWNhbF9saW5rX3JhdGUgPQorCSAgICBwaHktPm1heGltdW1fbGlua3JhdGUgPDwgNDsKKworCW1lbXNldChtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJTbXBQYXNzdGhyb3VnaFJlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fU01QX1BBU1NUSFJPVUdIOworCW1waV9yZXF1ZXN0LT5QaHlzaWNhbFBvcnQgPSAweEZGOworCW1waV9yZXF1ZXN0LT5WRl9JRCA9IDA7IC8qIFRPRE8gKi8KKwltcGlfcmVxdWVzdC0+VlBfSUQgPSAwOworCXNhc19hZGRyZXNzX2xlID0gKHU2NCAqKSZtcGlfcmVxdWVzdC0+U0FTQWRkcmVzczsKKwkqc2FzX2FkZHJlc3NfbGUgPSBjcHVfdG9fbGU2NChwaHktPmlkZW50aWZ5LnNhc19hZGRyZXNzKTsKKwltcGlfcmVxdWVzdC0+UmVxdWVzdERhdGFMZW5ndGggPQorCSAgICBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IHBoeV9lcnJvcl9sb2dfcmVxdWVzdCkpOworCXBzZ2UgPSAmbXBpX3JlcXVlc3QtPlNHTDsKKworCS8qIFdSSVRFIHNnZWwgZmlyc3QgKi8KKwlzZ2xfZmxhZ3MgPSAoTVBJMl9TR0VfRkxBR1NfU0lNUExFX0VMRU1FTlQgfAorCSAgICBNUEkyX1NHRV9GTEFHU19FTkRfT0ZfQlVGRkVSIHwgTVBJMl9TR0VfRkxBR1NfSE9TVF9UT19JT0MpOworCXNnbF9mbGFncyA9IHNnbF9mbGFncyA8PCBNUEkyX1NHRV9GTEFHU19TSElGVDsKKwlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZShwc2dlLCBzZ2xfZmxhZ3MgfAorCSAgICBzaXplb2Yoc3RydWN0IHBoeV9jb250cm9sX3JlcXVlc3QpLCBkYXRhX291dF9kbWEpOworCisJLyogaW5jciBzZ2VsICovCisJcHNnZSArPSBpb2MtPnNnZV9zaXplOworCisJLyogUkVBRCBzZ2VsIGxhc3QgKi8KKwlzZ2xfZmxhZ3MgPSAoTVBJMl9TR0VfRkxBR1NfU0lNUExFX0VMRU1FTlQgfAorCSAgICBNUEkyX1NHRV9GTEFHU19MQVNUX0VMRU1FTlQgfCBNUEkyX1NHRV9GTEFHU19FTkRfT0ZfQlVGRkVSIHwKKwkgICAgTVBJMl9TR0VfRkxBR1NfRU5EX09GX0xJU1QpOworCXNnbF9mbGFncyA9IHNnbF9mbGFncyA8PCBNUEkyX1NHRV9GTEFHU19TSElGVDsKKwlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZShwc2dlLCBzZ2xfZmxhZ3MgfAorCSAgICBzaXplb2Yoc3RydWN0IHBoeV9jb250cm9sX3JlcGx5KSwgZGF0YV9vdXRfZG1hICsKKwkgICAgc2l6ZW9mKHN0cnVjdCBwaHlfY29udHJvbF9yZXF1ZXN0KSk7CisKKwlkdHJhbnNwb3J0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInBoeV9jb250cm9sIC0gIgorCSAgICAic2VuZCB0byBzYXNfYWRkcigweCUwMTZsbHgpLCBwaHkoJWQpLCBvcGNvZGUoJWQpXG4iLCBpb2MtPm5hbWUsCisJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGh5LT5pZGVudGlmeS5zYXNfYWRkcmVzcywgcGh5LT5udW1iZXIsCisJICAgIHBoeV9vcGVyYXRpb24pKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOworCWluaXRfY29tcGxldGlvbigmaW9jLT50cmFuc3BvcnRfY21kcy5kb25lKTsKKwl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT50cmFuc3BvcnRfY21kcy5kb25lLAorCSAgICAxMCpIWik7CisKKwlpZiAoIShpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX0NPTVBMRVRFKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogdGltZW91dFxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlfZGVidWdfZHVtcF9tZihtcGlfcmVxdWVzdCwKKwkJICAgIHNpemVvZihNcGkyU21wUGFzc3Rocm91Z2hSZXF1ZXN0X3QpLzQpOworCQlpZiAoIShpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1JFU0VUKSkKKwkJCWlzc3VlX3Jlc2V0ID0gMTsKKwkJZ290byBpc3N1ZV9ob3N0X3Jlc2V0OworCX0KKworCWR0cmFuc3BvcnRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicGh5X2NvbnRyb2wgLSAiCisJICAgICJjb21wbGV0ZVxuIiwgaW9jLT5uYW1lKSk7CisKKwlpZiAoaW9jLT50cmFuc3BvcnRfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9SRVBMWV9WQUxJRCkgeworCisJCW1waV9yZXBseSA9IGlvYy0+dHJhbnNwb3J0X2NtZHMucmVwbHk7CisKKwkJZHRyYW5zcG9ydHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UCisJCSAgICAicGh5X2NvbnRyb2wgLSByZXBseSBkYXRhIHRyYW5zZmVyIHNpemUoJWQpXG4iLAorCQkgICAgaW9jLT5uYW1lLCBsZTE2X3RvX2NwdShtcGlfcmVwbHktPlJlc3BvbnNlRGF0YUxlbmd0aCkpKTsKKworCQlpZiAobGUxNl90b19jcHUobXBpX3JlcGx5LT5SZXNwb25zZURhdGFMZW5ndGgpICE9CisJCSAgICBzaXplb2Yoc3RydWN0IHBoeV9jb250cm9sX3JlcGx5KSkKKwkJCWdvdG8gb3V0OworCisJCXBoeV9jb250cm9sX3JlcGx5ID0gZGF0YV9vdXQgKworCQkgICAgc2l6ZW9mKHN0cnVjdCBwaHlfY29udHJvbF9yZXF1ZXN0KTsKKworCQlkdHJhbnNwb3J0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQKKwkJICAgICJwaHlfY29udHJvbCAtIGZ1bmN0aW9uX3Jlc3VsdCglZClcbiIsCisJCSAgICBpb2MtPm5hbWUsIHBoeV9jb250cm9sX3JlcGx5LT5mdW5jdGlvbl9yZXN1bHQpKTsKKworCQlyYyA9IDA7CisJfSBlbHNlCisJCWR0cmFuc3BvcnRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVAorCQkgICAgInBoeV9jb250cm9sIC0gbm8gcmVwbHlcbiIsIGlvYy0+bmFtZSkpOworCisgaXNzdWVfaG9zdF9yZXNldDoKKwlpZiAoaXNzdWVfcmVzZXQpCisJCW1wdDJzYXNfYmFzZV9oYXJkX3Jlc2V0X2hhbmRsZXIoaW9jLCBDQU5fU0xFRVAsCisJCSAgICBGT1JDRV9CSUdfSEFNTUVSKTsKKyBvdXQ6CisJaW9jLT50cmFuc3BvcnRfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKKwlpZiAoZGF0YV9vdXQpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaW9jLT5wZGV2LCBzeiwgZGF0YV9vdXQsIGRhdGFfb3V0X2RtYSk7CisKKwltdXRleF91bmxvY2soJmlvYy0+dHJhbnNwb3J0X2NtZHMubXV0ZXgpOworCXJldHVybiByYzsKK30KKwogLyoqCiAgKiBfdHJhbnNwb3J0X3BoeV9yZXNldCAtCiAgKiBAcGh5OiBUaGUgc2FzIHBoeSBvYmplY3QKICAqIEBoYXJkX3Jlc2V0OgogICoKLSAqIE9ubHkgc3VwcG9ydCBzYXNfaG9zdCBkaXJlY3QgYXR0YWNoZWQgcGh5cy4KICAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyBpbnQKIF90cmFuc3BvcnRfcGh5X3Jlc2V0KHN0cnVjdCBzYXNfcGh5ICpwaHksIGludCBoYXJkX3Jlc2V0KQogewogCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHBoeV90b19pb2MocGh5KTsKLQlzdHJ1Y3QgX3Nhc19waHkgKm1wdDJzYXNfcGh5OwogCU1waTJTYXNJb1VuaXRDb250cm9sUmVwbHlfdCBtcGlfcmVwbHk7CiAJTXBpMlNhc0lvVW5pdENvbnRyb2xSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCW1wdDJzYXNfcGh5ID0gX3RyYW5zcG9ydF9maW5kX2xvY2FsX3BoeShpb2MsIHBoeSk7Ci0KLQlpZiAoIW1wdDJzYXNfcGh5KSAvKiB0aGlzIHBoeSBub3Qgb24gc2FzX2hvc3QgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CisJaWYgKF90cmFuc3BvcnRfc2FzX25vZGVfZmluZF9ieV9zYXNfYWRkcmVzcyhpb2MsCisJICAgIHBoeS0+aWRlbnRpZnkuc2FzX2FkZHJlc3MpID09IE5VTEwpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtRUlOVkFMOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKIAorCS8qIGhhbmRsZSBleHBhbmRlciBwaHlzICovCisJaWYgKHBoeS0+aWRlbnRpZnkuc2FzX2FkZHJlc3MgIT0gaW9jLT5zYXNfaGJhLnNhc19hZGRyZXNzKQorCQlyZXR1cm4gX3RyYW5zcG9ydF9leHBhbmRlcl9waHlfY29udHJvbChpb2MsIHBoeSwKKwkJICAgIChoYXJkX3Jlc2V0ID09IDEpID8gU01QX1BIWV9DT05UUk9MX0hBUkRfUkVTRVQgOgorCQkgICAgU01QX1BIWV9DT05UUk9MX0xJTktfUkVTRVQpOworCisJLyogaGFuZGxlIGhiYSBwaHlzICovCiAJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJTYXNJb1VuaXRDb250cm9sUmVwbHlfdCkpOwogCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9TQVNfSU9fVU5JVF9DT05UUk9MOwogCW1waV9yZXF1ZXN0Lk9wZXJhdGlvbiA9IGhhcmRfcmVzZXQgPwogCSAgICBNUEkyX1NBU19PUF9QSFlfSEFSRF9SRVNFVCA6IE1QSTJfU0FTX09QX1BIWV9MSU5LX1JFU0VUOwotCW1waV9yZXF1ZXN0LlBoeU51bSA9IG1wdDJzYXNfcGh5LT5waHlfaWQ7CisJbXBpX3JlcXVlc3QuUGh5TnVtID0gcGh5LT5udW1iZXI7CiAKIAlpZiAoKG1wdDJzYXNfYmFzZV9zYXNfaW91bml0X2NvbnRyb2woaW9jLCAmbXBpX3JlcGx5LCAmbXBpX3JlcXVlc3QpKSkgewogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLApAQCAtMTA4Miw4ICsxNTI0LDcgQEAKIAlpZiAobXBpX3JlcGx5LklPQ1N0YXR1cyB8fCBtcGlfcmVwbHkuSU9DTG9nSW5mbykKIAkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInBoeSglZCksIGlvY19zdGF0dXMiCiAJCSAgICAiKDB4JTA0eCksIGxvZ2luZm8oMHglMDh4KVxuIiwgaW9jLT5uYW1lLAotCQkgICAgbXB0MnNhc19waHktPnBoeV9pZCwKLQkJICAgIGxlMTZfdG9fY3B1KG1waV9yZXBseS5JT0NTdGF0dXMpLAorCQkgICAgcGh5LT5udW1iZXIsIGxlMTZfdG9fY3B1KG1waV9yZXBseS5JT0NTdGF0dXMpLAogCQkgICAgbGUzMl90b19jcHUobXBpX3JlcGx5LklPQ0xvZ0luZm8pKTsKIAogCXJldHVybiAwOwpAQCAtMTEwMSwxNyArMTU0MiwyOCBAQAogX3RyYW5zcG9ydF9waHlfZW5hYmxlKHN0cnVjdCBzYXNfcGh5ICpwaHksIGludCBlbmFibGUpCiB7CiAJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gcGh5X3RvX2lvYyhwaHkpOwotCXN0cnVjdCBfc2FzX3BoeSAqbXB0MnNhc19waHk7CiAJTXBpMlNhc0lPVW5pdFBhZ2UxX3QgKnNhc19pb3VuaXRfcGcxID0gTlVMTDsKIAlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CiAJdTE2IGlvY19zdGF0dXM7CiAJdTE2IHN6OwogCWludCByYyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCW1wdDJzYXNfcGh5ID0gX3RyYW5zcG9ydF9maW5kX2xvY2FsX3BoeShpb2MsIHBoeSk7Ci0KLQlpZiAoIW1wdDJzYXNfcGh5KSAvKiB0aGlzIHBoeSBub3Qgb24gc2FzX2hvc3QgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CisJaWYgKF90cmFuc3BvcnRfc2FzX25vZGVfZmluZF9ieV9zYXNfYWRkcmVzcyhpb2MsCisJICAgIHBoeS0+aWRlbnRpZnkuc2FzX2FkZHJlc3MpID09IE5VTEwpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtRUlOVkFMOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKKworCS8qIGhhbmRsZSBleHBhbmRlciBwaHlzICovCisJaWYgKHBoeS0+aWRlbnRpZnkuc2FzX2FkZHJlc3MgIT0gaW9jLT5zYXNfaGJhLnNhc19hZGRyZXNzKQorCQlyZXR1cm4gX3RyYW5zcG9ydF9leHBhbmRlcl9waHlfY29udHJvbChpb2MsIHBoeSwKKwkJICAgIChlbmFibGUgPT0gMSkgPyBTTVBfUEhZX0NPTlRST0xfTElOS19SRVNFVCA6CisJCSAgICBTTVBfUEhZX0NPTlRST0xfRElTQUJMRSk7CisKKwkvKiBoYW5kbGUgaGJhIHBoeXMgKi8KIAogCS8qIHNhc19pb3VuaXQgcGFnZSAxICovCiAJc3ogPSBvZmZzZXRvZihNcGkyU2FzSU9Vbml0UGFnZTFfdCwgUGh5RGF0YSkgKyAoaW9jLT5zYXNfaGJhLm51bV9waHlzICoKQEAgLTExNDAsMTQgKzE1OTIsMTggQEAKIAl9CiAKIAlpZiAoZW5hYmxlKQotCQlzYXNfaW91bml0X3BnMS0+UGh5RGF0YVttcHQyc2FzX3BoeS0+cGh5X2lkXS5QaHlGbGFncworCQlzYXNfaW91bml0X3BnMS0+UGh5RGF0YVtwaHktPm51bWJlcl0uUGh5RmxhZ3MKIAkJICAgICY9IH5NUEkyX1NBU0lPVU5JVDFfUEhZRkxBR1NfUEhZX0RJU0FCTEU7CiAJZWxzZQotCQlzYXNfaW91bml0X3BnMS0+UGh5RGF0YVttcHQyc2FzX3BoeS0+cGh5X2lkXS5QaHlGbGFncworCQlzYXNfaW91bml0X3BnMS0+UGh5RGF0YVtwaHktPm51bWJlcl0uUGh5RmxhZ3MKIAkJICAgIHw9IE1QSTJfU0FTSU9VTklUMV9QSFlGTEFHU19QSFlfRElTQUJMRTsKIAogCW1wdDJzYXNfY29uZmlnX3NldF9zYXNfaW91bml0X3BnMShpb2MsICZtcGlfcmVwbHksIHNhc19pb3VuaXRfcGcxLCBzeik7CiAKKwkvKiBsaW5rIHJlc2V0ICovCisJaWYgKGVuYWJsZSkKKwkJX3RyYW5zcG9ydF9waHlfcmVzZXQocGh5LCAwKTsKKwogIG91dDoKIAlrZnJlZShzYXNfaW91bml0X3BnMSk7CiAJcmV0dXJuIHJjOwpAQCAtMTE2NSw3ICsxNjIxLDYgQEAKIF90cmFuc3BvcnRfcGh5X3NwZWVkKHN0cnVjdCBzYXNfcGh5ICpwaHksIHN0cnVjdCBzYXNfcGh5X2xpbmtyYXRlcyAqcmF0ZXMpCiB7CiAJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gcGh5X3RvX2lvYyhwaHkpOwotCXN0cnVjdCBfc2FzX3BoeSAqbXB0MnNhc19waHk7CiAJTXBpMlNhc0lPVW5pdFBhZ2UxX3QgKnNhc19pb3VuaXRfcGcxID0gTlVMTDsKIAlNcGkyU2FzUGh5UGFnZTBfdCBwaHlfcGcwOwogCU1waTJDb25maWdSZXBseV90IG1waV9yZXBseTsKQEAgLTExNzMsMTEgKzE2MjgsMTUgQEAKIAl1MTYgc3o7CiAJaW50IGk7CiAJaW50IHJjID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JbXB0MnNhc19waHkgPSBfdHJhbnNwb3J0X2ZpbmRfbG9jYWxfcGh5KGlvYywgcGh5KTsKLQotCWlmICghbXB0MnNhc19waHkpIC8qIHRoaXMgcGh5IG5vdCBvbiBzYXNfaG9zdCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKKwlpZiAoX3RyYW5zcG9ydF9zYXNfbm9kZV9maW5kX2J5X3Nhc19hZGRyZXNzKGlvYywKKwkgICAgcGh5LT5pZGVudGlmeS5zYXNfYWRkcmVzcykgPT0gTlVMTCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOwogCiAJaWYgKCFyYXRlcy0+bWluaW11bV9saW5rcmF0ZSkKIAkJcmF0ZXMtPm1pbmltdW1fbGlua3JhdGUgPSBwaHktPm1pbmltdW1fbGlua3JhdGU7CkBAIC0xMTg5LDYgKzE2NDgsMTYgQEAKIAllbHNlIGlmIChyYXRlcy0+bWF4aW11bV9saW5rcmF0ZSA+IHBoeS0+bWF4aW11bV9saW5rcmF0ZV9odykKIAkJcmF0ZXMtPm1heGltdW1fbGlua3JhdGUgPSBwaHktPm1heGltdW1fbGlua3JhdGVfaHc7CiAKKwkvKiBoYW5kbGUgZXhwYW5kZXIgcGh5cyAqLworCWlmIChwaHktPmlkZW50aWZ5LnNhc19hZGRyZXNzICE9IGlvYy0+c2FzX2hiYS5zYXNfYWRkcmVzcykgeworCQlwaHktPm1pbmltdW1fbGlua3JhdGUgPSByYXRlcy0+bWluaW11bV9saW5rcmF0ZTsKKwkJcGh5LT5tYXhpbXVtX2xpbmtyYXRlID0gcmF0ZXMtPm1heGltdW1fbGlua3JhdGU7CisJCXJldHVybiBfdHJhbnNwb3J0X2V4cGFuZGVyX3BoeV9jb250cm9sKGlvYywgcGh5LAorCQkgICAgU01QX1BIWV9DT05UUk9MX0xJTktfUkVTRVQpOworCX0KKworCS8qIGhhbmRsZSBoYmEgcGh5cyAqLworCiAJLyogc2FzX2lvdW5pdCBwYWdlIDEgKi8KIAlzeiA9IG9mZnNldG9mKE1waTJTYXNJT1VuaXRQYWdlMV90LCBQaHlEYXRhKSArIChpb2MtPnNhc19oYmEubnVtX3BoeXMgKgogCSAgICBzaXplb2YoTXBpMlNhc0lPVW5pdDFQaHlEYXRhX3QpKTsKQEAgLTEyMTYsNyArMTY4NSw3IEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IGlvYy0+c2FzX2hiYS5udW1fcGh5czsgaSsrKSB7Ci0JCWlmIChtcHQyc2FzX3BoeS0+cGh5X2lkICE9IGkpIHsKKwkJaWYgKHBoeS0+bnVtYmVyICE9IGkpIHsKIAkJCXNhc19pb3VuaXRfcGcxLT5QaHlEYXRhW2ldLk1heE1pbkxpbmtSYXRlID0KIAkJCSAgICAoaW9jLT5zYXNfaGJhLnBoeVtpXS5waHktPm1pbmltdW1fbGlua3JhdGUgKwogCQkJICAgIChpb2MtPnNhc19oYmEucGh5W2ldLnBoeS0+bWF4aW11bV9saW5rcmF0ZSA8PCA0KSk7CkBAIC0xMjQwLDcgKzE3MDksNyBAQAogCiAJLyogcmVhZCBwaHkgcGFnZSAwLCB0aGVuIHVwZGF0ZSB0aGUgcmF0ZXMgaW4gdGhlIHNhcyB0cmFuc3BvcnQgcGh5ICovCiAJaWYgKCFtcHQyc2FzX2NvbmZpZ19nZXRfcGh5X3BnMChpb2MsICZtcGlfcmVwbHksICZwaHlfcGcwLAotCSAgICBtcHQyc2FzX3BoeS0+cGh5X2lkKSkgeworCSAgICBwaHktPm51bWJlcikpIHsKIAkJcGh5LT5taW5pbXVtX2xpbmtyYXRlID0gX3RyYW5zcG9ydF9jb252ZXJ0X3BoeV9saW5rX3JhdGUoCiAJCSAgICBwaHlfcGcwLlByb2dyYW1tZWRMaW5rUmF0ZSAmIE1QSTJfU0FTX1BSQVRFX01JTl9SQVRFX01BU0spOwogCQlwaHktPm1heGltdW1fbGlua3JhdGUgPSBfdHJhbnNwb3J0X2NvbnZlcnRfcGh5X2xpbmtfcmF0ZSgKQEAgLTEzOTIsNyArMTg2MSw3IEBACiAJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUocHNnZSwgc2dsX2ZsYWdzIHwgKGJsa19ycV9ieXRlcyhyc3ApICsgNCksCiAJICAgIGRtYV9hZGRyX2luKTsKIAotCWR0cmFuc3BvcnRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzIC0gIgorCWR0cmFuc3BvcnRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXMgLSAiCiAJICAgICJzZW5kaW5nIHNtcCByZXF1ZXN0XG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CiAKIAltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOwpAQCAtMTQxMCwxNCArMTg3OSwxNCBAQAogCQlnb3RvIGlzc3VlX2hvc3RfcmVzZXQ7CiAJfQogCi0JZHRyYW5zcG9ydHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXMgLSAiCisJZHRyYW5zcG9ydHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlcyAtICIKIAkgICAgImNvbXBsZXRlXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CiAKIAlpZiAoaW9jLT50cmFuc3BvcnRfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9SRVBMWV9WQUxJRCkgewogCiAJCW1waV9yZXBseSA9IGlvYy0+dHJhbnNwb3J0X2NtZHMucmVwbHk7CiAKLQkJZHRyYW5zcG9ydHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVAorCQlkdHJhbnNwb3J0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQKIAkJICAgICIlcyAtIHJlcGx5IGRhdGEgdHJhbnNmZXIgc2l6ZSglZClcbiIsCiAJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fLAogCQkgICAgbGUxNl90b19jcHUobXBpX3JlcGx5LT5SZXNwb25zZURhdGFMZW5ndGgpKSk7CkBAIC0xNDI4LDcgKzE4OTcsNyBAQAogCQlyc3AtPnJlc2lkX2xlbiAtPQogCQkgICAgbGUxNl90b19jcHUobXBpX3JlcGx5LT5SZXNwb25zZURhdGFMZW5ndGgpOwogCX0gZWxzZSB7Ci0JCWR0cmFuc3BvcnRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQKKwkJZHRyYW5zcG9ydHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UCiAJCSAgICAiJXMgLSBubyByZXBseVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOwogCQlyYyA9IC1FTlhJTzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfc2FzLmMgYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfc2FzLmMKaW5kZXggZjVlMzIxNy4uYWRlZGFhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212c2FzL212X3Nhcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9zYXMuYwpAQCAtMTQ4Myw3ICsxNDgzLDcgQEAKIAkJfQogCiAJCWlmICh0YXNrLT50YXNrX3N0YXR1cy5yZXNwID09IFNBU19UQVNLX0NPTVBMRVRFICYmCi0JCSAgICB0YXNrLT50YXNrX3N0YXR1cy5zdGF0ID09IFNBTV9HT09EKSB7CisJCSAgICB0YXNrLT50YXNrX3N0YXR1cy5zdGF0ID09IFNBTV9TVEFUX0dPT0QpIHsKIAkJCXJlcyA9IFRNRl9SRVNQX0ZVTkNfQ09NUExFVEU7CiAJCQlicmVhazsKIAkJfQpAQCAtMTY0MCw3ICsxNjQwLDcgQEAKIAlzdHJ1Y3QgbXZzX3RtZl90YXNrIHRtZl90YXNrOwogCXN0cnVjdCBkb21haW5fZGV2aWNlICpkZXYgPSB0YXNrLT5kZXY7CiAJc3RydWN0IG12c19kZXZpY2UgKm12aV9kZXYgPSAoc3RydWN0IG12c19kZXZpY2UgKilkZXYtPmxsZGRfZGV2OwotCXN0cnVjdCBtdnNfaW5mbyAqbXZpID0gbXZpX2Rldi0+bXZpX2luZm87CisJc3RydWN0IG12c19pbmZvICptdmk7CiAJaW50IHJjID0gVE1GX1JFU1BfRlVOQ19GQUlMRUQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgdGFnOwpAQCAtMTY1MCw2ICsxNjUwLDggQEAKIAkJcmMgPSBUTUZfUkVTUF9GVU5DX0ZBSUxFRDsKIAl9CiAKKwltdmkgPSBtdmlfZGV2LT5tdmlfaW5mbzsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXNrLT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsKIAlpZiAodGFzay0+dGFza19zdGF0ZV9mbGFncyAmIFNBU19UQVNLX1NUQVRFX0RPTkUpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFzay0+dGFza19zdGF0ZV9sb2NrLCBmbGFncyk7CkBAIC0xNzU2LDcgKzE3NTgsNyBAQAogCXN0cnVjdCBtdnNfZGV2aWNlICptdmlfZGV2ID0gdGFzay0+ZGV2LT5sbGRkX2RldjsKIAlzdHJ1Y3QgdGFza19zdGF0dXNfc3RydWN0ICp0c3RhdCA9ICZ0YXNrLT50YXNrX3N0YXR1czsKIAlzdHJ1Y3QgYXRhX3Rhc2tfcmVzcCAqcmVzcCA9IChzdHJ1Y3QgYXRhX3Rhc2tfcmVzcCAqKXRzdGF0LT5idWY7Ci0JaW50IHN0YXQgPSBTQU1fR09PRDsKKwlpbnQgc3RhdCA9IFNBTV9TVEFUX0dPT0Q7CiAKIAogCXJlc3AtPmZyYW1lX2xlbiA9IHNpemVvZihzdHJ1Y3QgZGV2X3RvX2hvc3RfZmlzKTsKQEAgLTE3ODgsMTMgKzE3OTAsMTMgQEAKIAogCU1WU19DSElQX0RJU1AtPmNvbW1hbmRfYWN0aXZlKG12aSwgc2xvdF9pZHgpOwogCi0Jc3RhdCA9IFNBTV9DSEVDS19DT05EOworCXN0YXQgPSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT047CiAJc3dpdGNoICh0YXNrLT50YXNrX3Byb3RvKSB7CiAJY2FzZSBTQVNfUFJPVE9DT0xfU1NQOgogCQlzdGF0ID0gU0FTX0FCT1JURURfVEFTSzsKIAkJYnJlYWs7CiAJY2FzZSBTQVNfUFJPVE9DT0xfU01QOgotCQlzdGF0ID0gU0FNX0NIRUNLX0NPTkQ7CisJCXN0YXQgPSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT047CiAJCWJyZWFrOwogCiAJY2FzZSBTQVNfUFJPVE9DT0xfU0FUQToKQEAgLTE4NzksNyArMTg4MSw3IEBACiAJY2FzZSBTQVNfUFJPVE9DT0xfU1NQOgogCQkvKiBodyBzYXlzIHN0YXR1cyA9PSAwLCBkYXRhcHJlcyA9PSAwICovCiAJCWlmIChyeF9kZXNjICYgUlhRX0dPT0QpIHsKLQkJCXRzdGF0LT5zdGF0ID0gU0FNX0dPT0Q7CisJCQl0c3RhdC0+c3RhdCA9IFNBTV9TVEFUX0dPT0Q7CiAJCQl0c3RhdC0+cmVzcCA9IFNBU19UQVNLX0NPTVBMRVRFOwogCQl9CiAJCS8qIHJlc3BvbnNlIGZyYW1lIHByZXNlbnQgKi8KQEAgLTE4ODgsMTIgKzE4OTAsMTIgQEAKIAkJCQkJCXNpemVvZihzdHJ1Y3QgbXZzX2Vycl9pbmZvKTsKIAkJCXNhc19zc3BfdGFza19yZXNwb25zZShtdmktPmRldiwgdGFzaywgaXUpOwogCQl9IGVsc2UKLQkJCXRzdGF0LT5zdGF0ID0gU0FNX0NIRUNLX0NPTkQ7CisJCQl0c3RhdC0+c3RhdCA9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKIAkJYnJlYWs7CiAKIAljYXNlIFNBU19QUk9UT0NPTF9TTVA6IHsKIAkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dfcmVzcCA9ICZ0YXNrLT5zbXBfdGFzay5zbXBfcmVzcDsKLQkJCXRzdGF0LT5zdGF0ID0gU0FNX0dPT0Q7CisJCQl0c3RhdC0+c3RhdCA9IFNBTV9TVEFUX0dPT0Q7CiAJCQl0byA9IGttYXBfYXRvbWljKHNnX3BhZ2Uoc2dfcmVzcCksIEtNX0lSUTApOwogCQkJbWVtY3B5KHRvICsgc2dfcmVzcC0+b2Zmc2V0LAogCQkJCXNsb3QtPnJlc3BvbnNlICsgc2l6ZW9mKHN0cnVjdCBtdnNfZXJyX2luZm8pLApAQCAtMTkxMCw3ICsxOTEyLDcgQEAKIAkJfQogCiAJZGVmYXVsdDoKLQkJdHN0YXQtPnN0YXQgPSBTQU1fQ0hFQ0tfQ09ORDsKKwkJdHN0YXQtPnN0YXQgPSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT047CiAJCWJyZWFrOwogCX0KIAlpZiAoIXNsb3QtPnBvcnQtPnBvcnRfYXR0YWNoZWQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wY21jaWEvYWhhMTUyeF9zdHViLmMgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL2FoYTE1Mnhfc3R1Yi5jCmluZGV4IDlkNzBhZWYuLjYxZjQ5YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wY21jaWEvYWhhMTUyeF9zdHViLmMKKysrIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9haGExNTJ4X3N0dWIuYwpAQCAtNDksNyArNDksNiBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSAiYWhhMTUyeC5oIgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgpAQCAtMTAxLDkgKzEwMCw4IEBACiAgICAgaW5mby0+cF9kZXYgPSBsaW5rOwogICAgIGxpbmstPnByaXYgPSBpbmZvOwogCi0gICAgbGluay0+aW8uTnVtUG9ydHMxID0gMHgyMDsKLSAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotICAgIGxpbmstPmlvLklPQWRkckxpbmVzID0gMTA7CisgICAgbGluay0+cmVzb3VyY2VbMF0tPmVuZCA9IDB4MjA7CisgICAgbGluay0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKICAgICBsaW5rLT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKQEAgLTEzMSwxNSArMTI5LDE2IEBACiAJCQkJdW5zaWduZWQgaW50IHZjYywKIAkJCQl2b2lkICpwcml2X2RhdGEpCiB7CisJcF9kZXYtPmlvX2xpbmVzID0gMTA7CiAJLyogRm9yIE5ldyBNZWRpYSBUJkosIGxvb2sgZm9yIGEgU0NTSSB3aW5kb3cgKi8KIAlpZiAoY2ZnLT5pby53aW5bMF0ubGVuID49IDB4MjApCi0JCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBjZmctPmlvLndpblswXS5iYXNlOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gY2ZnLT5pby53aW5bMF0uYmFzZTsKIAllbHNlIGlmICgoY2ZnLT5pby5ud2luID4gMSkgJiYKIAkJIChjZmctPmlvLndpblsxXS5sZW4gPj0gMHgyMCkpCi0JCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBjZmctPmlvLndpblsxXS5iYXNlOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gY2ZnLT5pby53aW5bMV0uYmFzZTsKIAlpZiAoKGNmZy0+aW8ubndpbiA+IDApICYmCi0JICAgIChwX2Rldi0+aW8uQmFzZVBvcnQxIDwgMHhmZmZmKSkgewotCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkKKwkgICAgKHBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPCAweGZmZmYpKSB7CisJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpKQogCQkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRUlOVkFMOwpAQCAtMTY4LDcgKzE2Nyw3IEBACiAgICAgLyogU2V0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGFoYTE1MnggZHJpdmVyICovCiAgICAgbWVtc2V0KCZzLCAwLCBzaXplb2YocykpOwogICAgIHMuY29uZiAgICAgICAgPSAiUENNQ0lBIHNldHVwIjsKLSAgICBzLmlvX3BvcnQgICAgID0gbGluay0+aW8uQmFzZVBvcnQxOworICAgIHMuaW9fcG9ydCAgICAgPSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAgICAgcy5pcnEgICAgICAgICA9IGxpbmstPmlycTsKICAgICBzLnNjc2lpZCAgICAgID0gaG9zdF9pZDsKICAgICBzLnJlY29ubmVjdCAgID0gcmVjb25uZWN0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BjbWNpYS9mZG9tYWluX3N0dWIuYyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvZmRvbWFpbl9zdHViLmMKaW5kZXggMjFiMTQxMS4uMTNkYmU1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BjbWNpYS9mZG9tYWluX3N0dWIuYworKysgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL2Zkb21haW5fc3R1Yi5jCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlICJmZG9tYWluLmgiCiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CkBAIC04NCw5ICs4Myw4IEBACiAKIAlpbmZvLT5wX2RldiA9IGxpbms7CiAJbGluay0+cHJpdiA9IGluZm87Ci0JbGluay0+aW8uTnVtUG9ydHMxID0gMHgxMDsKLQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCWxpbmstPmlvLklPQWRkckxpbmVzID0gMTA7CisJbGluay0+cmVzb3VyY2VbMF0tPmVuZCA9IDB4MTA7CisJbGluay0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwogCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAlsaW5rLT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKQEAgLTExMyw4ICsxMTEsOSBAQAogCQkJCXVuc2lnbmVkIGludCB2Y2MsCiAJCQkJdm9pZCAqcHJpdl9kYXRhKQogewotCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBjZmctPmlvLndpblswXS5iYXNlOwotCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbyk7CisJcF9kZXYtPmlvX2xpbmVzID0gMTA7CisJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGNmZy0+aW8ud2luWzBdLmJhc2U7CisJcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2KTsKIH0KIAogCkBAIC0xMzgsMTAgKzEzNywxMCBAQAogCSAgICBnb3RvIGZhaWxlZDsKIAogICAgIC8qIEEgYmFkIGhhY2suLi4gKi8KLSAgICByZWxlYXNlX3JlZ2lvbihsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlvLk51bVBvcnRzMSk7CisgICAgcmVsZWFzZV9yZWdpb24obGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKGxpbmstPnJlc291cmNlWzBdKSk7CiAKICAgICAvKiBTZXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgZmRvbWFpbiBkcml2ZXIgKi8KLSAgICBzcHJpbnRmKHN0ciwgIiVkLCVkIiwgbGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pcnEpOworICAgIHNwcmludGYoc3RyLCAiJWQsJWQiLCAodW5zaWduZWQgaW50KSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQsIGxpbmstPmlycSk7CiAgICAgZmRvbWFpbl9zZXR1cChzdHIpOwogCiAgICAgaG9zdCA9IF9fZmRvbWFpbl8xNngwX2RldGVjdCgmZmRvbWFpbl9kcml2ZXJfdGVtcGxhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuYyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmMKaW5kZXggMGYwZTExMi4uZGQ5YjQwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuYworKysgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5jCkBAIC00Nyw3ICs0Nyw2IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2lvY3RsLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgpAQCAtMTU1OSw5ICsxNTU4LDggQEAKIAluc3BfZGJnKE5TUF9ERUJVR19JTklULCAiaW5mbz0weCVwIiwgaW5mbyk7CiAKIAkvKiBUaGUgaW8gc3RydWN0dXJlIGRlc2NyaWJlcyBJTyBwb3J0IG1hcHBpbmcgKi8KLQlsaW5rLT5pby5OdW1Qb3J0czEJID0gMHgxMDsKLQlsaW5rLT5pby5BdHRyaWJ1dGVzMQkgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLQlsaW5rLT5pby5JT0FkZHJMaW5lcwkgPSAxMDsJLyogbm90IHVzZWQgKi8KKwlsaW5rLT5yZXNvdXJjZVswXS0+ZW5kCSA9IDB4MTA7CisJbGluay0+cmVzb3VyY2VbMF0tPmZsYWdzID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CiAKIAkvKiBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uICovCiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzCSA9IENPTkZfRU5BQkxFX0lSUTsKQEAgLTE2NDIsMjkgKzE2NDAsMjcgQEAKIAkJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7CiAKIAkJLyogSU8gd2luZG93IHNldHRpbmdzICovCi0JCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA9IDA7CiAJCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQtPmlvLm53aW4gPiAwKSkgewogCQkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQotCQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKLQkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCi0JCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQkJCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7Ci0JCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCQlwX2Rldi0+aW9fbGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgJj0gfklPX0RBVEFfUEFUSF9XSURUSDsKKwkJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0KKwkJCQlwY21jaWFfaW9fY2ZnX2RhdGFfd2lkdGgoaW8tPmZsYWdzKTsKKwkJCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBpby0+d2luWzBdLmJhc2U7CisJCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmVuZCA9IGlvLT53aW5bMF0ubGVuOwogCQkJaWYgKGlvLT5ud2luID4gMSkgewotCQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMiA9IHBfZGV2LT5pby5BdHRyaWJ1dGVzMTsKLQkJCQlwX2Rldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOwotCQkJCXBfZGV2LT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKKwkJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPmZsYWdzID0KKwkJCQkJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFnczsKKwkJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPnN0YXJ0ID0gaW8tPndpblsxXS5iYXNlOworCQkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gaW8tPndpblsxXS5sZW47CiAJCQl9CiAJCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLwotCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSAhPSAwKQorCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2KSAhPSAwKQogCQkJCWdvdG8gbmV4dF9lbnRyeTsKIAkJfQogCiAJCWlmICgoY2ZnLT5tZW0ubndpbiA+IDApIHx8IChkZmx0LT5tZW0ubndpbiA+IDApKSB7Ci0JCQltZW1yZXFfdAltYXA7CiAJCQljaXN0cGxfbWVtX3QJKm1lbSA9CiAJCQkJKGNmZy0+bWVtLm53aW4pID8gJmNmZy0+bWVtIDogJmRmbHQtPm1lbTsKIAkJCWNmZ19tZW0tPnJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfMTZ8V0lOX01FTU9SWV9UWVBFX0NNOwpAQCAtMTY3Niw4ICsxNjcyLDggQEAKIAkJCWNmZ19tZW0tPnJlcS5BY2Nlc3NTcGVlZCA9IDA7CiAJCQlpZiAocGNtY2lhX3JlcXVlc3Rfd2luZG93KHBfZGV2LCAmY2ZnX21lbS0+cmVxLCAmcF9kZXYtPndpbikgIT0gMCkKIAkJCQlnb3RvIG5leHRfZW50cnk7Ci0JCQltYXAuUGFnZSA9IDA7IG1hcC5DYXJkT2Zmc2V0ID0gbWVtLT53aW5bMF0uY2FyZF9hZGRyOwotCQkJaWYgKHBjbWNpYV9tYXBfbWVtX3BhZ2UocF9kZXYsIHBfZGV2LT53aW4sICZtYXApICE9IDApCisJCQlpZiAocGNtY2lhX21hcF9tZW1fcGFnZShwX2RldiwgcF9kZXYtPndpbiwKKwkJCQkJbWVtLT53aW5bMF0uY2FyZF9hZGRyKSAhPSAwKQogCQkJCWdvdG8gbmV4dF9lbnRyeTsKIAogCQkJY2ZnX21lbS0+ZGF0YS0+TW1pb0FkZHJlc3MgPSAodW5zaWduZWQgbG9uZykgaW9yZW1hcF9ub2NhY2hlKGNmZ19tZW0tPnJlcS5CYXNlLCBjZmdfbWVtLT5yZXEuU2l6ZSk7CkBAIC0xNzIwLDE3ICsxNzE2LDE5IEBACiAJCWdvdG8gY3NfZmFpbGVkOwogCiAJaWYgKGZyZWVfcG9ydHMpIHsKLQkJaWYgKGxpbmstPmlvLkJhc2VQb3J0MSkgewotCQkJcmVsZWFzZV9yZWdpb24obGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pby5OdW1Qb3J0czEpOworCQlpZiAobGluay0+cmVzb3VyY2VbMF0pIHsKKwkJCXJlbGVhc2VfcmVnaW9uKGxpbmstPnJlc291cmNlWzBdLT5zdGFydCwKKwkJCQkJcmVzb3VyY2Vfc2l6ZShsaW5rLT5yZXNvdXJjZVswXSkpOwogCQl9Ci0JCWlmIChsaW5rLT5pby5CYXNlUG9ydDIpIHsKLQkJCXJlbGVhc2VfcmVnaW9uKGxpbmstPmlvLkJhc2VQb3J0MiwgbGluay0+aW8uTnVtUG9ydHMyKTsKKwkJaWYgKGxpbmstPnJlc291cmNlWzFdKSB7CisJCQlyZWxlYXNlX3JlZ2lvbihsaW5rLT5yZXNvdXJjZVsxXS0+c3RhcnQsCisJCQkJCXJlc291cmNlX3NpemUobGluay0+cmVzb3VyY2VbMV0pKTsKIAkJfQogCX0KIAogCS8qIFNldCBwb3J0IGFuZCBJUlEgKi8KLQlkYXRhLT5CYXNlQWRkcmVzcyA9IGxpbmstPmlvLkJhc2VQb3J0MTsKLQlkYXRhLT5OdW1BZGRyZXNzICA9IGxpbmstPmlvLk51bVBvcnRzMTsKKwlkYXRhLT5CYXNlQWRkcmVzcyA9IGxpbmstPnJlc291cmNlWzBdLT5zdGFydDsKKwlkYXRhLT5OdW1BZGRyZXNzICA9IHJlc291cmNlX3NpemUobGluay0+cmVzb3VyY2VbMF0pOwogCWRhdGEtPklycU51bWJlciAgID0gbGluay0+aXJxOwogCiAJbnNwX2RiZyhOU1BfREVCVUdfSU5JVCwgIkkvT1sweCV4KzB4JXhdIElSUSAlZCIsCkBAIC0xNzY1LDEzICsxNzYzLDEwIEBACiAJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkgewogCQlwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxKTsKIAl9Ci0JaWYgKGxpbmstPmlvLk51bVBvcnRzMSkgewotCQlwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKLQkJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MStsaW5rLT5pby5OdW1Qb3J0czEtMSk7Ci0JfQotCWlmIChsaW5rLT5pby5OdW1Qb3J0czIpCi0JCXByaW50aygiICYgMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MiwKLQkJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MitsaW5rLT5pby5OdW1Qb3J0czItMSk7CisJaWYgKGxpbmstPnJlc291cmNlWzBdKQorCQlwcmludGsoIiwgaW8gJXBSIiwgbGluay0+cmVzb3VyY2VbMF0pOworCWlmIChsaW5rLT5yZXNvdXJjZVsxXSkKKwkJcHJpbnRrKCIgJiAlcFIiLCBsaW5rLT5yZXNvdXJjZVsxXSk7CiAJaWYgKGxpbmstPndpbikKIAkJcHJpbnRrKCIsIG1lbSAweCUwNmx4LTB4JTA2bHgiLCBjZmdfbWVtLT5yZXEuQmFzZSwKIAkJICAgICAgIGNmZ19tZW0tPnJlcS5CYXNlK2NmZ19tZW0tPnJlcS5TaXplLTEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BjbWNpYS9xbG9naWNfc3R1Yi5jIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9xbG9naWNfc3R1Yi5jCmluZGV4IGYwZmM2YmEuLmViNzc1ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wY21jaWEvcWxvZ2ljX3N0dWIuYworKysgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL3Fsb2dpY19zdHViLmMKQEAgLTQ4LDcgKzQ4LDYgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgIi4uL3Fsb2dpY2ZhczQwOC5oIgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgpAQCAtMTU3LDkgKzE1Niw4IEBACiAJCXJldHVybiAtRU5PTUVNOwogCWluZm8tPnBfZGV2ID0gbGluazsKIAlsaW5rLT5wcml2ID0gaW5mbzsKLQlsaW5rLT5pby5OdW1Qb3J0czEgPSAxNjsKLQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCWxpbmstPmlvLklPQWRkckxpbmVzID0gMTA7CisJbGluay0+cmVzb3VyY2VbMF0tPmVuZCA9IDE2OworCWxpbmstPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAJbGluay0+Y29uZi5QcmVzZW50ID0gUFJFU0VOVF9PUFRJT047CkBAIC0xODYsMTMgKzE4NCwxNCBAQAogCQkJICAgICAgIHVuc2lnbmVkIGludCB2Y2MsCiAJCQkgICAgICAgdm9pZCAqcHJpdl9kYXRhKQogewotCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBjZmctPmlvLndpblswXS5iYXNlOwotCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBjZmctPmlvLndpblswXS5sZW47CisJcF9kZXYtPmlvX2xpbmVzID0gMTA7CisJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGNmZy0+aW8ud2luWzBdLmJhc2U7CisJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBjZmctPmlvLndpblswXS5sZW47CiAKLQlpZiAocF9kZXYtPmlvLkJhc2VQb3J0MSA9PSAwKQorCWlmIChwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID09IDApCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKTsKKwlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpOwogfQogCiBzdGF0aWMgaW50IHFsb2dpY19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKiBsaW5rKQpAQCAtMjE2LDE4ICsyMTUsMTggQEAKIAogCWlmICgoaW5mby0+bWFuZl9pZCA9PSBNQU5GSURfTUFDTklDQSkgfHwgKGluZm8tPm1hbmZfaWQgPT0gTUFORklEX1BJT05FRVIpIHx8IChpbmZvLT5tYW5mX2lkID09IDB4MDA5OCkpIHsKIAkJLyogc2V0IEFUQWNtZCAqLwotCQlvdXRiKDB4YjQsIGxpbmstPmlvLkJhc2VQb3J0MSArIDB4ZCk7Ci0JCW91dGIoMHgyNCwgbGluay0+aW8uQmFzZVBvcnQxICsgMHg5KTsKLQkJb3V0YigweDA0LCBsaW5rLT5pby5CYXNlUG9ydDEgKyAweGQpOworCQlvdXRiKDB4YjQsIGxpbmstPnJlc291cmNlWzBdLT5zdGFydCArIDB4ZCk7CisJCW91dGIoMHgyNCwgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ICsgMHg5KTsKKwkJb3V0YigweDA0LCBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQgKyAweGQpOwogCX0KIAogCS8qIFRoZSBLWEwtODEwQU4gaGFzIGEgYmlnZ2VyIElPIHBvcnQgd2luZG93ICovCi0JaWYgKGxpbmstPmlvLk51bVBvcnRzMSA9PSAzMikKKwlpZiAocmVzb3VyY2Vfc2l6ZShsaW5rLT5yZXNvdXJjZVswXSkgPT0gMzIpCiAJCWhvc3QgPSBxbG9naWNfZGV0ZWN0KCZxbG9naWNmYXNfZHJpdmVyX3RlbXBsYXRlLCBsaW5rLAotCQkJbGluay0+aW8uQmFzZVBvcnQxICsgMTYsIGxpbmstPmlycSk7CisJCQlsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQgKyAxNiwgbGluay0+aXJxKTsKIAllbHNlCiAJCWhvc3QgPSBxbG9naWNfZGV0ZWN0KCZxbG9naWNmYXNfZHJpdmVyX3RlbXBsYXRlLCBsaW5rLAotCQkJbGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pcnEpOworCQkJbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0LCBsaW5rLT5pcnEpOwogCQogCWlmICghaG9zdCkgewogCQlwcmludGsoS0VSTl9JTkZPICIlczogbm8gU0NTSSBkZXZpY2VzIGZvdW5kXG4iLCBxbG9naWNfbmFtZSk7CkBAIC0yNjksOSArMjY4LDkgQEAKIAlpZiAoKGluZm8tPm1hbmZfaWQgPT0gTUFORklEX01BQ05JQ0EpIHx8CiAJICAgIChpbmZvLT5tYW5mX2lkID09IE1BTkZJRF9QSU9ORUVSKSB8fAogCSAgICAoaW5mby0+bWFuZl9pZCA9PSAweDAwOTgpKSB7Ci0JCW91dGIoMHg4MCwgbGluay0+aW8uQmFzZVBvcnQxICsgMHhkKTsKLQkJb3V0YigweDI0LCBsaW5rLT5pby5CYXNlUG9ydDEgKyAweDkpOwotCQlvdXRiKDB4MDQsIGxpbmstPmlvLkJhc2VQb3J0MSArIDB4ZCk7CisJCW91dGIoMHg4MCwgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ICsgMHhkKTsKKwkJb3V0YigweDI0LCBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQgKyAweDkpOworCQlvdXRiKDB4MDQsIGxpbmstPnJlc291cmNlWzBdLT5zdGFydCArIDB4ZCk7CiAJfQogCS8qIFVnZ2dnbGxseXl5eSEhISAqLwogCXFsb2dpY2ZhczQwOF9idXNfcmVzZXQoTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGNtY2lhL3N5bTUzYzUwMF9jcy5jIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9zeW01M2M1MDBfY3MuYwppbmRleCBhNTExNjQxLi4zMjFlMzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGNtY2lhL3N5bTUzYzUwMF9jcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvc3ltNTNjNTAwX2NzLmMKQEAgLTcxLDcgKzcxLDYgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgpAQCAtNjkxLDEzICs2OTAsMTQgQEAKIAkJCQkgIHVuc2lnbmVkIGludCB2Y2MsCiAJCQkJICB2b2lkICpwcml2X2RhdGEpCiB7Ci0JcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGNmZy0+aW8ud2luWzBdLmJhc2U7Ci0JcF9kZXYtPmlvLk51bVBvcnRzMSA9IGNmZy0+aW8ud2luWzBdLmxlbjsKKwlwX2Rldi0+aW9fbGluZXMgPSAxMDsKKwlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gY2ZnLT5pby53aW5bMF0uYmFzZTsKKwlwX2Rldi0+cmVzb3VyY2VbMF0tPmVuZCA9IGNmZy0+aW8ud2luWzBdLmxlbjsKIAotCWlmIChwX2Rldi0+aW8uQmFzZVBvcnQxID09IDApCisJaWYgKHBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pOworCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2Rldik7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTczNCw5ICs3MzQsOSBAQAogCSAgICAoaW5mby0+bWFuZl9pZCA9PSBNQU5GSURfUElPTkVFUikgfHwKIAkgICAgKGluZm8tPm1hbmZfaWQgPT0gMHgwMDk4KSkgewogCQkvKiBzZXQgQVRBY21kICovCi0JCW91dGIoMHhiNCwgbGluay0+aW8uQmFzZVBvcnQxICsgMHhkKTsKLQkJb3V0YigweDI0LCBsaW5rLT5pby5CYXNlUG9ydDEgKyAweDkpOwotCQlvdXRiKDB4MDQsIGxpbmstPmlvLkJhc2VQb3J0MSArIDB4ZCk7CisJCW91dGIoMHhiNCwgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ICsgMHhkKTsKKwkJb3V0YigweDI0LCBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQgKyAweDkpOworCQlvdXRiKDB4MDQsIGxpbmstPnJlc291cmNlWzBdLT5zdGFydCArIDB4ZCk7CiAJfQogCiAJLyoKQEAgLTc0OSw3ICs3NDksNyBAQAogCSoJMHgxMzAsIDB4MjMwLCAweDI4MCwgMHgyOTAsCiAJKgkweDMyMCwgMHgzMzAsIDB4MzQwLCAweDM1MAogCSovCi0JcG9ydF9iYXNlID0gbGluay0+aW8uQmFzZVBvcnQxOworCXBvcnRfYmFzZSA9IGxpbmstPnJlc291cmNlWzBdLT5zdGFydDsKIAlpcnFfbGV2ZWwgPSBsaW5rLT5pcnE7CiAKIAlERUIocHJpbnRrKCJTWU01M0M1MDA6IHBvcnRfYmFzZT0weCV4LCBpcnE9JWQsIGZhc3RfcGlvPSVkXG4iLApAQCAtODIyLDE1ICs4MjIsMTUgQEAKIAlpZiAoKGluZm8tPm1hbmZfaWQgPT0gTUFORklEX01BQ05JQ0EpIHx8CiAJICAgIChpbmZvLT5tYW5mX2lkID09IE1BTkZJRF9QSU9ORUVSKSB8fAogCSAgICAoaW5mby0+bWFuZl9pZCA9PSAweDAwOTgpKSB7Ci0JCW91dGIoMHg4MCwgbGluay0+aW8uQmFzZVBvcnQxICsgMHhkKTsKLQkJb3V0YigweDI0LCBsaW5rLT5pby5CYXNlUG9ydDEgKyAweDkpOwotCQlvdXRiKDB4MDQsIGxpbmstPmlvLkJhc2VQb3J0MSArIDB4ZCk7CisJCW91dGIoMHg4MCwgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ICsgMHhkKTsKKwkJb3V0YigweDI0LCBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQgKyAweDkpOworCQlvdXRiKDB4MDQsIGxpbmstPnJlc291cmNlWzBdLT5zdGFydCArIDB4ZCk7CiAJfQogCS8qCiAJICogIElmIHRoaW5ncyBkb24ndCB3b3JrIGFmdGVyIGEgInJlc3VtZSIsCiAJICogIHRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcuCiAJICovCi0JU1lNNTNDNTAwX2ludF9ob3N0X3Jlc2V0KGxpbmstPmlvLkJhc2VQb3J0MSk7CisJU1lNNTNDNTAwX2ludF9ob3N0X3Jlc2V0KGxpbmstPnJlc291cmNlWzBdLT5zdGFydCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTg1OSw5ICs4NTksOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlpbmZvLT5wX2RldiA9IGxpbms7CiAJbGluay0+cHJpdiA9IGluZm87Ci0JbGluay0+aW8uTnVtUG9ydHMxID0gMTY7Ci0JbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDEwOworCWxpbmstPnJlc291cmNlWzBdLT5lbmQgPSAxNjsKKwlsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9od2kuYyBiL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2h3aS5jCmluZGV4IDVmZjgyNjEuLjU4ZDExMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2h3aS5jCisrKyBiL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2h3aS5jCkBAIC0xMDgyLDcgKzEwODIsNyBAQAogfQogCiAvKioKLSAqIHBtODAwMV9jaGlwX2lvdW5tYXAgLSB3aGljaCBtYXBlZCB3aGVuIGluaXRpbGl6ZWQuCisgKiBwbTgwMDFfY2hpcF9pb3VubWFwIC0gd2hpY2ggbWFwZWQgd2hlbiBpbml0aWFsaXplZC4KICAqIEBwbTgwMDFfaGE6IG91ciBoYmEgY2FyZCBpbmZvcm1hdGlvbgogICovCiBzdGF0aWMgdm9pZCBwbTgwMDFfY2hpcF9pb3VubWFwKHN0cnVjdCBwbTgwMDFfaGJhX2luZm8gKnBtODAwMV9oYSkKQEAgLTE0ODAsNyArMTQ4MCw3IEBACiAJCQkiLHBhcmFtID0gJWQgXG4iLCBwYXJhbSkpOwogCQlpZiAocGFyYW0gPT0gMCkgewogCQkJdHMtPnJlc3AgPSBTQVNfVEFTS19DT01QTEVURTsKLQkJCXRzLT5zdGF0ID0gU0FNX0dPT0Q7CisJCQl0cy0+c3RhdCA9IFNBTV9TVEFUX0dPT0Q7CiAJCX0gZWxzZSB7CiAJCQl0cy0+cmVzcCA9IFNBU19UQVNLX0NPTVBMRVRFOwogCQkJdHMtPnN0YXQgPSBTQVNfUFJPVE9fUkVTUE9OU0U7CkBAIC0xOTA5LDcgKzE5MDksNyBAQAogCQlQTTgwMDFfSU9fREJHKHBtODAwMV9oYSwgcG04MDAxX3ByaW50aygiSU9fU1VDQ0VTU1xuIikpOwogCQlpZiAocGFyYW0gPT0gMCkgewogCQkJdHMtPnJlc3AgPSBTQVNfVEFTS19DT01QTEVURTsKLQkJCXRzLT5zdGF0ID0gU0FNX0dPT0Q7CisJCQl0cy0+c3RhdCA9IFNBTV9TVEFUX0dPT0Q7CiAJCX0gZWxzZSB7CiAJCQl1OCBsZW47CiAJCQl0cy0+cmVzcCA9IFNBU19UQVNLX0NPTVBMRVRFOwpAQCAtMjQ1MCw3ICsyNDUwLDcgQEAKIAljYXNlIElPX1NVQ0NFU1M6CiAJCVBNODAwMV9JT19EQkcocG04MDAxX2hhLCBwbTgwMDFfcHJpbnRrKCJJT19TVUNDRVNTXG4iKSk7CiAJCXRzLT5yZXNwID0gU0FTX1RBU0tfQ09NUExFVEU7Ci0JCXRzLT5zdGF0ID0gU0FNX0dPT0Q7CisJCXRzLT5zdGF0ID0gU0FNX1NUQVRfR09PRDsKIAlpZiAocG04MDAxX2RldikKIAkJCXBtODAwMV9kZXYtPnJ1bm5pbmdfcmVxLS07CiAJCWJyZWFrOwpAQCAtMjQ3OSwxOSArMjQ3OSwxOSBAQAogCQlQTTgwMDFfSU9fREJHKHBtODAwMV9oYSwKIAkJCXBtODAwMV9wcmludGsoIklPX0VSUk9SX0hXX1RJTUVPVVRcbiIpKTsKIAkJdHMtPnJlc3AgPSBTQVNfVEFTS19DT01QTEVURTsKLQkJdHMtPnN0YXQgPSBTQU1fQlVTWTsKKwkJdHMtPnN0YXQgPSBTQU1fU1RBVF9CVVNZOwogCQlicmVhazsKIAljYXNlIElPX1hGRVJfRVJST1JfQlJFQUs6CiAJCVBNODAwMV9JT19EQkcocG04MDAxX2hhLAogCQkJcG04MDAxX3ByaW50aygiSU9fWEZFUl9FUlJPUl9CUkVBS1xuIikpOwogCQl0cy0+cmVzcCA9IFNBU19UQVNLX0NPTVBMRVRFOwotCQl0cy0+c3RhdCA9IFNBTV9CVVNZOworCQl0cy0+c3RhdCA9IFNBTV9TVEFUX0JVU1k7CiAJCWJyZWFrOwogCWNhc2UgSU9fWEZFUl9FUlJPUl9QSFlfTk9UX1JFQURZOgogCQlQTTgwMDFfSU9fREJHKHBtODAwMV9oYSwKIAkJCXBtODAwMV9wcmludGsoIklPX1hGRVJfRVJST1JfUEhZX05PVF9SRUFEWVxuIikpOwogCQl0cy0+cmVzcCA9IFNBU19UQVNLX0NPTVBMRVRFOwotCQl0cy0+c3RhdCA9IFNBTV9CVVNZOworCQl0cy0+c3RhdCA9IFNBTV9TVEFUX0JVU1k7CiAJCWJyZWFrOwogCWNhc2UgSU9fT1BFTl9DTlhfRVJST1JfUFJPVE9DT0xfTk9UX1NVUFBPUlRFRDoKIAkJUE04MDAxX0lPX0RCRyhwbTgwMDFfaGEsCkBAIC0zMjYwLDcgKzMyNjAsNyBAQAogCWNhc2UgSU9fU1VDQ0VTUzoKIAkJUE04MDAxX0VIX0RCRyhwbTgwMDFfaGEsIHBtODAwMV9wcmludGsoIklPX1NVQ0NFU1NcbiIpKTsKIAkJdHMtPnJlc3AgPSBTQVNfVEFTS19DT01QTEVURTsKLQkJdHMtPnN0YXQgPSBTQU1fR09PRDsKKwkJdHMtPnN0YXQgPSBTQU1fU1RBVF9HT09EOwogCQlicmVhazsKIAljYXNlIElPX05PVF9WQUxJRDoKIAkJUE04MDAxX0VIX0RCRyhwbTgwMDFfaGEsIHBtODAwMV9wcmludGsoIklPX05PVF9WQUxJRFxuIikpOwpAQCAtNDE1Miw3ICs0MTUyLDcgQEAKIH0KIAogLyoqCi0gKiBwbTgwMDFfY2hpcF9zc3BfdG1fcmVxIC0gYnVpbHQgdGhlIHRhc2sgbWFuYWdtZW50IGNvbW1hbmQuCisgKiBwbTgwMDFfY2hpcF9zc3BfdG1fcmVxIC0gYnVpbHQgdGhlIHRhc2sgbWFuYWdlbWVudCBjb21tYW5kLgogICogQHBtODAwMV9oYTogb3VyIGhiYSBjYXJkIGluZm9ybWF0aW9uLgogICogQGNjYjogdGhlIGNjYiBpbmZvcm1hdGlvbi4KICAqIEB0bWY6IHRhc2sgbWFuYWdlbWVudCBmdW5jdGlvbi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX3Nhcy5jIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmMKaW5kZXggY2QwMmNlYS4uNmFlMDU5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmMKKysrIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmMKQEAgLTc2Myw3ICs3NjMsNyBAQAogCQl9CiAKIAkJaWYgKHRhc2stPnRhc2tfc3RhdHVzLnJlc3AgPT0gU0FTX1RBU0tfQ09NUExFVEUgJiYKLQkJCXRhc2stPnRhc2tfc3RhdHVzLnN0YXQgPT0gU0FNX0dPT0QpIHsKKwkJCXRhc2stPnRhc2tfc3RhdHVzLnN0YXQgPT0gU0FNX1NUQVRfR09PRCkgewogCQkJcmVzID0gVE1GX1JFU1BfRlVOQ19DT01QTEVURTsKIAkJCWJyZWFrOwogCQl9CkBAIC04NTMsNyArODUzLDcgQEAKIAkJfQogCiAJCWlmICh0YXNrLT50YXNrX3N0YXR1cy5yZXNwID09IFNBU19UQVNLX0NPTVBMRVRFICYmCi0JCQl0YXNrLT50YXNrX3N0YXR1cy5zdGF0ID09IFNBTV9HT09EKSB7CisJCQl0YXNrLT50YXNrX3N0YXR1cy5zdGF0ID09IFNBTV9TVEFUX0dPT0QpIHsKIAkJCXJlcyA9IFRNRl9SRVNQX0ZVTkNfQ09NUExFVEU7CiAJCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuYyBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMKaW5kZXggYzQ0ZTRhYi4uZWNjNDVjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuYworKysgYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jCkBAIC0xMTMsNiArMTEzLDcgQEAKIAkgLmdsb2JhbF9pbnRyX21hc2sgPSAweDAwMDM0LAogCSAuaW9hX2hvc3RfaW50ciA9IDB4MDAwOUMsCiAJIC5pb2FfaG9zdF9pbnRyX2NsciA9IDB4MDAwQTAsCisJIC5pb2FfaG9zdF9tc2l4X2ludHIgPSAweDdGQzQwLAogCSAuaW9hX2hvc3RfbWFzayA9IDB4N0ZDMjgsCiAJIC5pb2FfaG9zdF9tYXNrX2NsciA9IDB4N0ZDMjgsCiAJIC5ob3N0X2lvYV9pbnRyID0gMHgwMDAyMCwKQEAgLTE1NCw4ICsxNTUsMTIgQEAKIAl1OCB0YXJnZXQsIGJ1cywgbHVuOwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKIAlpbnQgcmMgPSAtRU5YSU87CisJdTE2IGZ3X3ZlcnNpb247CisKIAlwaW5zdGFuY2UgPSBzaG9zdF9wcml2KHNjc2lfZGV2LT5ob3N0KTsKIAorCWZ3X3ZlcnNpb24gPSBiZTE2X3RvX2NwdShwaW5zdGFuY2UtPmlucV9kYXRhLT5md192ZXJzaW9uKTsKKwogCS8qIERyaXZlciBleHBvc2VzIFZTRVQgYW5kIEdTQ1NJIHJlc291cmNlcyBvbmx5OyBhbGwgb3RoZXIgZGV2aWNlIHR5cGVzCiAJICogYXJlIG5vdCBleHBvc2VkLiBSZXNvdXJjZSBsaXN0IGlzIHN5bmNocm9uaXplZCB1c2luZyByZXNvdXJjZSBsb2NrCiAJICogc28gYW55IHRyYXZlcnNhbCBvciBtb2RpZmljYXRpb25zIHRvIHRoZSBsaXN0IHNob3VsZCBiZSBkb25lIGluc2lkZQpAQCAtMTY2LDcgKzE3MSwxMSBAQAogCiAJCS8qIGRvIG5vdCBleHBvc2UgVlNFVHMgd2l0aCBvcmRlci1pZHMgPiBNQVhfVlNFVF9UQVJHRVRTICovCiAJCWlmIChSRVNfSVNfVlNFVCh0ZW1wLT5jZmdfZW50cnkpKSB7Ci0JCQl0YXJnZXQgPSB0ZW1wLT5jZmdfZW50cnkudW5pcXVlX2ZsYWdzMTsKKwkJCWlmIChmd192ZXJzaW9uIDw9IFBNQ1JBSURfRldfVkVSU0lPTl8xKQorCQkJCXRhcmdldCA9IHRlbXAtPmNmZ19lbnRyeS51bmlxdWVfZmxhZ3MxOworCQkJZWxzZQorCQkJCXRhcmdldCA9IHRlbXAtPmNmZ19lbnRyeS5hcnJheV9pZCAmIDB4RkY7CisKIAkJCWlmICh0YXJnZXQgPiBQTUNSQUlEX01BWF9WU0VUX1RBUkdFVFMpCiAJCQkJY29udGludWU7CiAJCQlidXMgPSBQTUNSQUlEX1ZTRVRfQlVTX0lEOwpAQCAtMjgzLDcgKzI5Miw3IEBACiAgKiBAcmVhc29uOiBjYWxsaW5nIGNvbnRleHQKICAqCiAgKiBSZXR1cm4gdmFsdWUKLSAqIAlhY3R1YWwgZGVwdGggc2V0CisgKglhY3R1YWwgZGVwdGggc2V0CiAgKi8KIHN0YXRpYyBpbnQgcG1jcmFpZF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2RldiwgaW50IGRlcHRoLAogCQkJCSAgICAgIGludCByZWFzb24pCkBAIC0zMDUsNyArMzE0LDcgQEAKICAqIEB0YWc6IHR5cGUgb2YgdGFncyB0byB1c2UKICAqCiAgKiBSZXR1cm4gdmFsdWU6Ci0gKiAJYWN0dWFsIHF1ZXVlIHR5cGUgc2V0CisgKglhY3R1YWwgcXVldWUgdHlwZSBzZXQKICAqLwogc3RhdGljIGludCBwbWNyYWlkX2NoYW5nZV9xdWV1ZV90eXBlKHN0cnVjdCBzY3NpX2RldmljZSAqc2NzaV9kZXYsIGludCB0YWcpCiB7CkBAIC0zNTcsNiArMzY2LDcgQEAKIAkJICogcHJvY2Vzc2VkIGJ5IElPQQogCQkgKi8KIAkJbWVtc2V0KCZjbWQtPmlvYV9jYi0+aW9hcmNiLmNkYiwgMCwgUE1DUkFJRF9NQVhfQ0RCX0xFTik7CisJCWlvYXJjYi0+aHJycV9pZCA9IDA7CiAJCWlvYXJjYi0+cmVxdWVzdF9mbGFnczAgPSAwOwogCQlpb2FyY2ItPnJlcXVlc3RfZmxhZ3MxID0gMDsKIAkJaW9hcmNiLT5jbWRfdGltZW91dCA9IDA7CkBAIC0zNjgsMTMgKzM3OCwxNSBAQAogCQlpb2FyY2ItPmFkZF9jbWRfcGFyYW1fb2Zmc2V0ID0gMDsKIAkJY21kLT5pb2FfY2ItPmlvYXNhLmlvYXNjID0gMDsKIAkJY21kLT5pb2FfY2ItPmlvYXNhLnJlc2lkdWFsX2RhdGFfbGVuZ3RoID0gMDsKLQkJY21kLT51LnRpbWVfbGVmdCA9IDA7CisJCWNtZC0+dGltZV9sZWZ0ID0gMDsKIAl9CiAKIAljbWQtPmNtZF9kb25lID0gTlVMTDsKIAljbWQtPnNjc2lfY21kID0gTlVMTDsKIAljbWQtPnJlbGVhc2UgPSAwOwogCWNtZC0+Y29tcGxldGlvbl9yZXEgPSAwOworCWNtZC0+c2Vuc2VfYnVmZmVyID0gMDsKKwljbWQtPnNlbnNlX2J1ZmZlcl9kbWEgPSAwOwogCWNtZC0+ZG1hX2hhbmRsZSA9IDA7CiAJaW5pdF90aW1lcigmY21kLT50aW1lcik7CiB9CkBAIC00NDksNyArNDYxLDkgQEAKICAqLwogc3RhdGljIHUzMiBwbWNyYWlkX3JlYWRfaW50ZXJydXB0cyhzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlKQogewotCXJldHVybiBpb3JlYWQzMihwaW5zdGFuY2UtPmludF9yZWdzLmlvYV9ob3N0X2ludGVycnVwdF9yZWcpOworCXJldHVybiAocGluc3RhbmNlLT5pbnRlcnJ1cHRfbW9kZSkgPworCQlpb3JlYWQzMihwaW5zdGFuY2UtPmludF9yZWdzLmlvYV9ob3N0X21zaXhfaW50ZXJydXB0X3JlZykgOgorCQlpb3JlYWQzMihwaW5zdGFuY2UtPmludF9yZWdzLmlvYV9ob3N0X2ludGVycnVwdF9yZWcpOwogfQogCiAvKioKQEAgLTQ2OSwxMCArNDgzLDE1IEBACiAJdTMyIGdtYXNrID0gaW9yZWFkMzIocGluc3RhbmNlLT5pbnRfcmVncy5nbG9iYWxfaW50ZXJydXB0X21hc2tfcmVnKTsKIAl1MzIgbm1hc2sgPSBnbWFzayB8IEdMT0JBTF9JTlRFUlJVUFRfTUFTSzsKIAotCWlvd3JpdGUzMihubWFzaywgcGluc3RhbmNlLT5pbnRfcmVncy5nbG9iYWxfaW50ZXJydXB0X21hc2tfcmVnKTsKIAlpb3dyaXRlMzIoaW50cnMsIHBpbnN0YW5jZS0+aW50X3JlZ3MuaW9hX2hvc3RfaW50ZXJydXB0X2Nscl9yZWcpOwotCWlvd3JpdGUzMihpbnRycywgcGluc3RhbmNlLT5pbnRfcmVncy5pb2FfaG9zdF9pbnRlcnJ1cHRfbWFza19yZWcpOwotCWlvcmVhZDMyKHBpbnN0YW5jZS0+aW50X3JlZ3MuaW9hX2hvc3RfaW50ZXJydXB0X21hc2tfcmVnKTsKKwlpb3dyaXRlMzIobm1hc2ssIHBpbnN0YW5jZS0+aW50X3JlZ3MuZ2xvYmFsX2ludGVycnVwdF9tYXNrX3JlZyk7CisJaW9yZWFkMzIocGluc3RhbmNlLT5pbnRfcmVncy5nbG9iYWxfaW50ZXJydXB0X21hc2tfcmVnKTsKKworCWlmICghcGluc3RhbmNlLT5pbnRlcnJ1cHRfbW9kZSkgeworCQlpb3dyaXRlMzIoaW50cnMsCisJCQlwaW5zdGFuY2UtPmludF9yZWdzLmlvYV9ob3N0X2ludGVycnVwdF9tYXNrX3JlZyk7CisJCWlvcmVhZDMyKHBpbnN0YW5jZS0+aW50X3JlZ3MuaW9hX2hvc3RfaW50ZXJydXB0X21hc2tfcmVnKTsKKwl9CiB9CiAKIC8qKgpAQCAtNDkzLDggKzUxMiwxMiBAQAogCXUzMiBubWFzayA9IGdtYXNrICYgKH5HTE9CQUxfSU5URVJSVVBUX01BU0spOwogCiAJaW93cml0ZTMyKG5tYXNrLCBwaW5zdGFuY2UtPmludF9yZWdzLmdsb2JhbF9pbnRlcnJ1cHRfbWFza19yZWcpOwotCWlvd3JpdGUzMih+aW50cnMsIHBpbnN0YW5jZS0+aW50X3JlZ3MuaW9hX2hvc3RfaW50ZXJydXB0X21hc2tfcmVnKTsKLQlpb3JlYWQzMihwaW5zdGFuY2UtPmludF9yZWdzLmlvYV9ob3N0X2ludGVycnVwdF9tYXNrX3JlZyk7CisKKwlpZiAoIXBpbnN0YW5jZS0+aW50ZXJydXB0X21vZGUpIHsKKwkJaW93cml0ZTMyKH5pbnRycywKKwkJCSBwaW5zdGFuY2UtPmludF9yZWdzLmlvYV9ob3N0X2ludGVycnVwdF9tYXNrX3JlZyk7CisJCWlvcmVhZDMyKHBpbnN0YW5jZS0+aW50X3JlZ3MuaW9hX2hvc3RfaW50ZXJydXB0X21hc2tfcmVnKTsKKwl9CiAKIAlwbWNyYWlkX2luZm8oImVuYWJsZWQgaW50ZXJydXB0cyBnbG9iYWwgbWFzayA9ICV4IGludHJfbWFzayA9ICV4XG4iLAogCQlpb3JlYWQzMihwaW5zdGFuY2UtPmludF9yZWdzLmdsb2JhbF9pbnRlcnJ1cHRfbWFza19yZWcpLApAQCAtNTAyLDYgKzUyNSwzOSBAQAogfQogCiAvKioKKyAqIHBtY3JhaWRfY2xyX3RyYW5zX29wIC0gY2xlYXIgdHJhbnMgdG8gb3AgaW50ZXJydXB0CisgKgorICogQHBpbnN0YW5jZTogcG9pbnRlciB0byBwZXIgYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4gVmFsdWUKKyAqCSBOb25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfY2xyX3RyYW5zX29wKAorCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UKKykKK3sKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisKKwlpZiAoIXBpbnN0YW5jZS0+aW50ZXJydXB0X21vZGUpIHsKKwkJaW93cml0ZTMyKElOVFJTX1RSQU5TSVRJT05fVE9fT1BFUkFUSU9OQUwsCisJCQlwaW5zdGFuY2UtPmludF9yZWdzLmlvYV9ob3N0X2ludGVycnVwdF9tYXNrX3JlZyk7CisJCWlvcmVhZDMyKHBpbnN0YW5jZS0+aW50X3JlZ3MuaW9hX2hvc3RfaW50ZXJydXB0X21hc2tfcmVnKTsKKwkJaW93cml0ZTMyKElOVFJTX1RSQU5TSVRJT05fVE9fT1BFUkFUSU9OQUwsCisJCQlwaW5zdGFuY2UtPmludF9yZWdzLmlvYV9ob3N0X2ludGVycnVwdF9jbHJfcmVnKTsKKwkJaW9yZWFkMzIocGluc3RhbmNlLT5pbnRfcmVncy5pb2FfaG9zdF9pbnRlcnJ1cHRfY2xyX3JlZyk7CisJfQorCisJaWYgKHBpbnN0YW5jZS0+cmVzZXRfY21kICE9IE5VTEwpIHsKKwkJZGVsX3RpbWVyKCZwaW5zdGFuY2UtPnJlc2V0X2NtZC0+dGltZXIpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgKKwkJCXBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwkJcGluc3RhbmNlLT5yZXNldF9jbWQtPmNtZF9kb25lKHBpbnN0YW5jZS0+cmVzZXRfY21kKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgKKwkJCXBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwl9Cit9CisKKy8qKgogICogcG1jcmFpZF9yZXNldF90eXBlIC0gRGV0ZXJtaW5lIHRoZSByZXF1aXJlZCByZXNldCB0eXBlCiAgKiBAcGluc3RhbmNlOiBwb2ludGVyIHRvIGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCiAgKgpAQCAtNTM2LDcgKzU5Miw3IEBACiAgKiBwbWNyYWlkX2Jpc3RfZG9uZSAtIGNvbXBsZXRpb24gZnVuY3Rpb24gZm9yIFBDSSBCSVNUCiAgKiBAY21kOiBwb2ludGVyIHRvIHJlc2V0IGNvbW1hbmQKICAqIFJldHVybiBWYWx1ZQotICogCW5vbmUKKyAqCW5vbmUKICAqLwogCiBzdGF0aWMgdm9pZCBwbWNyYWlkX2lvYV9yZXNldChzdHJ1Y3QgcG1jcmFpZF9jbWQgKik7CkBAIC01NTIsMTYgKzYwOCwxNiBAQAogCiAJLyogSWYgUENJIGNvbmZpZyBzcGFjZSBjYW4ndCBiZSBhY2Nlc3NlZCB3YWl0IGZvciBhbm90aGVyIHR3byBzZWNzICovCiAJaWYgKChyYyAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwgfHwgKCEocGNpX3JlZyAmIFBDSV9DT01NQU5EX01FTU9SWSkpKSAmJgotCSAgICBjbWQtPnUudGltZV9sZWZ0ID4gMCkgeworCSAgICBjbWQtPnRpbWVfbGVmdCA+IDApIHsKIAkJcG1jcmFpZF9pbmZvKCJCSVNUIG5vdCBjb21wbGV0ZSwgd2FpdGluZyBhbm90aGVyIDIgc2Vjc1xuIik7Ci0JCWNtZC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBjbWQtPnUudGltZV9sZWZ0OwotCQljbWQtPnUudGltZV9sZWZ0ID0gMDsKKwkJY21kLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIGNtZC0+dGltZV9sZWZ0OworCQljbWQtPnRpbWVfbGVmdCA9IDA7CiAJCWNtZC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWNtZDsKIAkJY21kLT50aW1lci5mdW5jdGlvbiA9CiAJCQkodm9pZCAoKikodW5zaWduZWQgbG9uZykpcG1jcmFpZF9iaXN0X2RvbmU7CiAJCWFkZF90aW1lcigmY21kLT50aW1lcik7CiAJfSBlbHNlIHsKLQkJY21kLT51LnRpbWVfbGVmdCA9IDA7CisJCWNtZC0+dGltZV9sZWZ0ID0gMDsKIAkJcG1jcmFpZF9pbmZvKCJCSVNUIGlzIGNvbXBsZXRlLCBwcm9jZWVkaW5nIHdpdGggcmVzZXRcbiIpOwogCQlzcGluX2xvY2tfaXJxc2F2ZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CiAJCXBtY3JhaWRfaW9hX3Jlc2V0KGNtZCk7CkBAIC01ODUsMTAgKzY0MSwxMCBAQAogCQlwaW5zdGFuY2UtPmludF9yZWdzLmhvc3RfaW9hX2ludGVycnVwdF9yZWcpOwogCWRvb3JiZWxscyA9IGlvcmVhZDMyKHBpbnN0YW5jZS0+aW50X3JlZ3MuaG9zdF9pb2FfaW50ZXJydXB0X3JlZyk7CiAJaW50cnMgPSBpb3JlYWQzMihwaW5zdGFuY2UtPmludF9yZWdzLmlvYV9ob3N0X2ludGVycnVwdF9yZWcpOwotCXBtY3JhaWRfaW5mbygiZG9vcmJlbGxzIGFmdGVyIHN0YXJ0IGJpc3Q6ICV4IGludHJzOiAleCBcbiIsCisJcG1jcmFpZF9pbmZvKCJkb29yYmVsbHMgYWZ0ZXIgc3RhcnQgYmlzdDogJXggaW50cnM6ICV4XG4iLAogCQkgICAgICBkb29yYmVsbHMsIGludHJzKTsKIAotCWNtZC0+dS50aW1lX2xlZnQgPSBtc2Vjc190b19qaWZmaWVzKFBNQ1JBSURfQklTVF9USU1FT1VUKTsKKwljbWQtPnRpbWVfbGVmdCA9IG1zZWNzX3RvX2ppZmZpZXMoUE1DUkFJRF9CSVNUX1RJTUVPVVQpOwogCWNtZC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWNtZDsKIAljbWQtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhQTUNSQUlEX0JJU1RfVElNRU9VVCk7CiAJY21kLT50aW1lci5mdW5jdGlvbiA9ICh2b2lkICgqKSh1bnNpZ25lZCBsb25nKSlwbWNyYWlkX2Jpc3RfZG9uZTsKQEAgLTYxMiw3ICs2NjgsNyBAQAogCSAqIHNvbWUgbW9yZSB0aW1lIHRvIHdhaXQsIHJlc3RhcnQgdGhlIHRpbWVyCiAJICovCiAJaWYgKCgoc3RhdHVzICYgSU5UUlNfQ1JJVElDQUxfT1BfSU5fUFJPR1JFU1MpID09IDApIHx8Ci0JICAgIGNtZC0+dS50aW1lX2xlZnQgPD0gMCkgeworCSAgICBjbWQtPnRpbWVfbGVmdCA8PSAwKSB7CiAJCXBtY3JhaWRfaW5mbygiY3JpdGljYWwgb3AgaXMgcmVzZXQgcHJvY2VlZGluZyB3aXRoIHJlc2V0XG4iKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwogCQlwbWNyYWlkX2lvYV9yZXNldChjbWQpOwpAQCAtNjIwLDcgKzY3Niw3IEBACiAJfSBlbHNlIHsKIAkJcG1jcmFpZF9pbmZvKCJjcml0aWNhbCBvcCBpcyBub3QgeWV0IHJlc2V0IHdhaXRpbmcgYWdhaW5cbiIpOwogCQkvKiByZXN0YXJ0IHRpbWVyIGlmIHNvbWUgbW9yZSB0aW1lIGlzIGF2YWlsYWJsZSB0byB3YWl0ICovCi0JCWNtZC0+dS50aW1lX2xlZnQgLT0gUE1DUkFJRF9DSEVDS19GT1JfUkVTRVRfVElNRU9VVDsKKwkJY21kLT50aW1lX2xlZnQgLT0gUE1DUkFJRF9DSEVDS19GT1JfUkVTRVRfVElNRU9VVDsKIAkJY21kLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpY21kOwogCQljbWQtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgUE1DUkFJRF9DSEVDS19GT1JfUkVTRVRfVElNRU9VVDsKIAkJY21kLT50aW1lci5mdW5jdGlvbiA9CkBAIC02MzgsNiArNjk0LDcgQEAKICAqCXN1Y2Nlc3NmdWxseSB3cml0dGVuIHRvIElPQS4gUmV0dXJucyBub24temVybyBpbiBjYXNlIHBjaV9jb25maWdfc3BhY2UKICAqCWlzIG5vdCBhY2Nlc3NpYmxlCiAgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfbm90aWZ5X2lvYXN0YXRlKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICosIHUzMik7CiBzdGF0aWMgdm9pZCBwbWNyYWlkX3Jlc2V0X2FsZXJ0KHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKQogewogCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPSBjbWQtPmRydl9pbnN0OwpAQCAtNjU4LDcgKzcxNSw3IEBACiAJCSAqIE9QRVJBVElPTiBiaXQgaXMgcmVzZXQuIEEgdGltZXIgaXMgc3RhcnRlZCB0byB3YWl0IGZvciB0aGlzCiAJCSAqIGJpdCB0byBiZSByZXNldC4KIAkJICovCi0JCWNtZC0+dS50aW1lX2xlZnQgPSBQTUNSQUlEX1JFU0VUX1RJTUVPVVQ7CisJCWNtZC0+dGltZV9sZWZ0ID0gUE1DUkFJRF9SRVNFVF9USU1FT1VUOwogCQljbWQtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZyljbWQ7CiAJCWNtZC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBQTUNSQUlEX0NIRUNLX0ZPUl9SRVNFVF9USU1FT1VUOwogCQljbWQtPnRpbWVyLmZ1bmN0aW9uID0KQEAgLTY5Myw3ICs3NTAsOCBAQAogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKIAogCWRldl9pbmZvKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwKLQkJIkFkYXB0ZXIgYmVpbmcgcmVzZXQgZHVlIHRvIGNvbW1hbmQgdGltZW91dC5cbiIpOworCQkiQWRhcHRlciBiZWluZyByZXNldCBkdWUgdG8gY21kKENEQlswXSA9ICV4KSB0aW1lb3V0XG4iLAorCQljbWQtPmlvYV9jYi0+aW9hcmNiLmNkYlswXSk7CiAKIAkvKiBDb21tYW5kIHRpbWVvdXRzIHJlc3VsdCBpbiBoYXJkIHJlc2V0IHNlcXVlbmNlLiBUaGUgY29tbWFuZCB0aGF0IGdvdAogCSAqIHRpbWVkIG91dCBtYXkgYmUgdGhlIG9uZSB1c2VkIGFzIHBhcnQgb2YgcmVzZXQgc2VxdWVuY2UuIEluIHRoaXMKQEAgLTczNiw5ICs3OTQsMTQgQEAKIAkJICovCiAJCWlmIChjbWQgPT0gcGluc3RhbmNlLT5yZXNldF9jbWQpCiAJCQljbWQtPmNtZF9kb25lID0gcG1jcmFpZF9pb2FfcmVzZXQ7Ci0KIAl9CiAKKwkvKiBOb3RpZnkgYXBwcyBvZiBpbXBvcnRhbnQgSU9BIGJyaW5ndXAvYnJpbmdkb3duIHNlcXVlbmNlcyAqLworCWlmIChwaW5zdGFuY2UtPnNjbi5pb2Ffc3RhdGUgIT0gUE1DX0RFVklDRV9FVkVOVF9SRVNFVF9TVEFSVCAmJgorCSAgICBwaW5zdGFuY2UtPnNjbi5pb2Ffc3RhdGUgIT0gUE1DX0RFVklDRV9FVkVOVF9TSFVURE9XTl9TVEFSVCkKKwkJcG1jcmFpZF9ub3RpZnlfaW9hc3RhdGUocGluc3RhbmNlLAorCQkJCQlQTUNfREVWSUNFX0VWRU5UX1JFU0VUX1NUQVJUKTsKKwogCXBpbnN0YW5jZS0+aW9hX3N0YXRlID0gSU9BX1NUQVRFX0lOX1JFU0VUX0FMRVJUOwogCXNjc2lfYmxvY2tfcmVxdWVzdHMocGluc3RhbmNlLT5ob3N0KTsKIAlwbWNyYWlkX3Jlc2V0X2FsZXJ0KGNtZCk7CkBAIC04NjYsNyArOTI5LDcgQEAKIAkvKiBBZGQgdGhpcyBjb21tYW5kIGJsb2NrIHRvIHBlbmRpbmcgY21kIHBvb2wuIFdlIGRvIHRoaXMgcHJpb3IgdG8KIAkgKiB3cml0dGluZyBJT0FSQ0IgdG8gaW9hcnJpbiBiZWNhdXNlIElPQSBtaWdodCBjb21wbGV0ZSB0aGUgY29tbWFuZAogCSAqIGJ5IHRoZSB0aW1lIHdlIGFyZSBhYm91dCB0byBhZGQgaXQgdG8gdGhlIGxpc3QuIFJlc3BvbnNlIGhhbmRsZXIKLQkgKiAoaXNyL3Rhc2tsZXQpIGxvb2tzIGZvciBjbWIgYmxvY2sgaW4gdGhlIHBlbmRpbmcgcGVuZGluZyBsaXN0LgorCSAqIChpc3IvdGFza2xldCkgbG9va3MgZm9yIGNtZCBibG9jayBpbiB0aGUgcGVuZGluZyBwZW5kaW5nIGxpc3QuCiAJICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBpbnN0YW5jZS0+cGVuZGluZ19wb29sX2xvY2ssIGxvY2tfZmxhZ3MpOwogCWxpc3RfYWRkX3RhaWwoJmNtZC0+ZnJlZV9saXN0LCAmcGluc3RhbmNlLT5wZW5kaW5nX2NtZF9wb29sKTsKQEAgLTkxNiw2ICs5NzksMjMgQEAKIH0KIAogLyoqCisgKiBwbWNyYWlkX2lvYV9zaHV0ZG93bl9kb25lIC0gY29tcGxldGlvbiBmdW5jdGlvbiBmb3IgSU9BIHNodXRkb3duIGNvbW1hbmQKKyAqIEBjbWQ6IHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgYmxvY2sgdXNlZCBmb3Igc2VuZGluZyBJT0Egc2h1dGRvd24gY29tbWFuZAorICoKKyAqIFJldHVybiB2YWx1ZQorICogIE5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9pb2Ffc2h1dGRvd25fZG9uZShzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlID0gY21kLT5kcnZfaW5zdDsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CisJcG1jcmFpZF9pb2FfcmVzZXQoY21kKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKK30KKworLyoqCiAgKiBwbWNyYWlkX2lvYV9zaHV0ZG93biAtIHNlbmRzIFNIVVRET1dOIGNvbW1hbmQgdG8gaW9hCiAgKgogICogQGNtZDogcG9pbnRlciB0byB0aGUgY29tbWFuZCBibG9jayB1c2VkIGFzIHBhcnQgb2YgcmVzZXQgc2VxdWVuY2UKQEAgLTk0MywzMCArMTAyMywxMTIgQEAKIAlwbWNyYWlkX2luZm8oImZpcmluZyBub3JtYWwgc2h1dGRvd24gY29tbWFuZCAoJWQpIHRvIElPQVxuIiwKIAkJICAgICBsZTMyX3RvX2NwdShjbWQtPmlvYV9jYi0+aW9hcmNiLnJlc3BvbnNlX2hhbmRsZSkpOwogCi0JcG1jcmFpZF9zZW5kX2NtZChjbWQsIHBtY3JhaWRfaW9hX3Jlc2V0LAorCXBtY3JhaWRfbm90aWZ5X2lvYXN0YXRlKGNtZC0+ZHJ2X2luc3QsIFBNQ19ERVZJQ0VfRVZFTlRfU0hVVERPV05fU1RBUlQpOworCisJcG1jcmFpZF9zZW5kX2NtZChjbWQsIHBtY3JhaWRfaW9hX3NodXRkb3duX2RvbmUsCiAJCQkgUE1DUkFJRF9TSFVURE9XTl9USU1FT1VULAogCQkJIHBtY3JhaWRfdGltZW91dF9oYW5kbGVyKTsKIH0KIAogLyoqCisgKiBwbWNyYWlkX2dldF9md3ZlcnNpb25fZG9uZSAtIGNvbXBsZXRpb24gZnVuY3Rpb24gZm9yIGdldF9md3ZlcnNpb24KKyAqCisgKiBAY21kOiBwb2ludGVyIHRvIGNvbW1hbmQgYmxvY2sgdXNlZCB0byBzZW5kIElOUVVJUlkgY29tbWFuZAorICoKKyAqIFJldHVybiBWYWx1ZQorICoJbm9uZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX3F1ZXJ5Y2ZnKHN0cnVjdCBwbWNyYWlkX2NtZCAqKTsKKworc3RhdGljIHZvaWQgcG1jcmFpZF9nZXRfZnd2ZXJzaW9uX2RvbmUoc3RydWN0IHBtY3JhaWRfY21kICpjbWQpCit7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSA9IGNtZC0+ZHJ2X2luc3Q7CisJdTMyIGlvYXNjID0gbGUzMl90b19jcHUoY21kLT5pb2FfY2ItPmlvYXNhLmlvYXNjKTsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisKKwkvKiBjb25maWd1cmF0aW9uIHRhYmxlIGVudHJ5IHNpemUgZGVwZW5kcyBvbiBmaXJtd2FyZSB2ZXJzaW9uLiBJZiBmdworCSAqIHZlcnNpb24gaXMgbm90IGtub3duLCBpdCBpcyBub3QgcG9zc2libGUgdG8gaW50ZXJwcmV0IElPQSBjb25maWcKKwkgKiB0YWJsZQorCSAqLworCWlmIChpb2FzYykgeworCQlwbWNyYWlkX2VycigiSU9BIElucXVpcnkgZmFpbGVkIHdpdGggJXhcbiIsIGlvYXNjKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCQlwaW5zdGFuY2UtPmlvYV9zdGF0ZSA9IElPQV9TVEFURV9JTl9SRVNFVF9BTEVSVDsKKwkJcG1jcmFpZF9yZXNldF9hbGVydChjbWQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwl9IGVsc2UgIHsKKwkJcG1jcmFpZF9xdWVyeWNmZyhjbWQpOworCX0KK30KKworLyoqCisgKiBwbWNyYWlkX2dldF9md3ZlcnNpb24gLSByZWFkcyBmaXJtd2FyZSB2ZXJzaW9uIGluZm9ybWF0aW9uCisgKgorICogQGNtZDogcG9pbnRlciB0byBjb21tYW5kIGJsb2NrIHVzZWQgdG8gc2VuZCBJTlFVSVJZIGNvbW1hbmQKKyAqCisgKiBSZXR1cm4gVmFsdWUKKyAqCW5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9nZXRfZnd2ZXJzaW9uKHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKQoreworCXN0cnVjdCBwbWNyYWlkX2lvYXJjYiAqaW9hcmNiID0gJmNtZC0+aW9hX2NiLT5pb2FyY2I7CisJc3RydWN0IHBtY3JhaWRfaW9hZGxfZGVzYyAqaW9hZGwgPSBpb2FyY2ItPmFkZF9kYXRhLnUuaW9hZGw7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSA9IGNtZC0+ZHJ2X2luc3Q7CisJdTE2IGRhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9pbnF1aXJ5X2RhdGEpOworCisJcG1jcmFpZF9yZWluaXRfY21kYmxrKGNtZCk7CisJaW9hcmNiLT5yZXF1ZXN0X3R5cGUgPSBSRVFfVFlQRV9TQ1NJOworCWlvYXJjYi0+cmVzb3VyY2VfaGFuZGxlID0gY3B1X3RvX2xlMzIoUE1DUkFJRF9JT0FfUkVTX0hBTkRMRSk7CisJaW9hcmNiLT5jZGJbMF0gPSBJTlFVSVJZOworCWlvYXJjYi0+Y2RiWzFdID0gMTsKKwlpb2FyY2ItPmNkYlsyXSA9IDB4RDA7CisJaW9hcmNiLT5jZGJbM10gPSAoZGF0YV9zaXplID4+IDgpICYgMHhGRjsKKwlpb2FyY2ItPmNkYls0XSA9IGRhdGFfc2l6ZSAmIDB4RkY7CisKKwkvKiBTaW5jZSBlbnRpcmUgaW5xdWlyeSBkYXRhIGl0IGNhbiBiZSBwYXJ0IG9mIElPQVJDQiBpdHNlbGYKKwkgKi8KKwlpb2FyY2ItPmlvYWRsX2J1c19hZGRyID0gY3B1X3RvX2xlNjQoKGNtZC0+aW9hX2NiX2J1c19hZGRyKSArCisJCQkJCW9mZnNldG9mKHN0cnVjdCBwbWNyYWlkX2lvYXJjYiwKKwkJCQkJCWFkZF9kYXRhLnUuaW9hZGxbMF0pKTsKKwlpb2FyY2ItPmlvYWRsX2xlbmd0aCA9IGNwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9pb2FkbF9kZXNjKSk7CisJaW9hcmNiLT5pb2FyY2JfYnVzX2FkZHIgJj0gfigweDFGVUxMKTsKKworCWlvYXJjYi0+cmVxdWVzdF9mbGFnczAgfD0gTk9fTElOS19ERVNDUzsKKwlpb2FyY2ItPmRhdGFfdHJhbnNmZXJfbGVuZ3RoID0gY3B1X3RvX2xlMzIoZGF0YV9zaXplKTsKKwlpb2FkbCA9ICYoaW9hcmNiLT5hZGRfZGF0YS51LmlvYWRsWzBdKTsKKwlpb2FkbC0+ZmxhZ3MgPSBJT0FETF9GTEFHU19MQVNUX0RFU0M7CisJaW9hZGwtPmFkZHJlc3MgPSBjcHVfdG9fbGU2NChwaW5zdGFuY2UtPmlucV9kYXRhX2JhZGRyKTsKKwlpb2FkbC0+ZGF0YV9sZW4gPSBjcHVfdG9fbGUzMihkYXRhX3NpemUpOworCisJcG1jcmFpZF9zZW5kX2NtZChjbWQsIHBtY3JhaWRfZ2V0X2Z3dmVyc2lvbl9kb25lLAorCQkJIFBNQ1JBSURfSU5URVJOQUxfVElNRU9VVCwgcG1jcmFpZF90aW1lb3V0X2hhbmRsZXIpOworfQorCisvKioKICAqIHBtY3JhaWRfaWRlbnRpZnlfaHJycSAtIHJlZ2lzdGVycyBob3N0IHJycSBidWZmZXJzIHdpdGggSU9BCiAgKiBAY21kOiBwb2ludGVyIHRvIGNvbW1hbmQgYmxvY2sgdG8gYmUgdXNlZCBmb3IgaWRlbnRpZnkgaHJycQogICoKICAqIFJldHVybiBWYWx1ZQotICoJIDAgaW4gY2FzZSBvZiBzdWNjZXNzLCBvdGhlcndpc2Ugbm9uLXplcm8gZmFpbHVyZSBjb2RlCisgKgkgbm9uZQogICovCi0KLXN0YXRpYyB2b2lkIHBtY3JhaWRfcXVlcnljZmcoc3RydWN0IHBtY3JhaWRfY21kICopOwotCiBzdGF0aWMgdm9pZCBwbWNyYWlkX2lkZW50aWZ5X2hycnEoc3RydWN0IHBtY3JhaWRfY21kICpjbWQpCiB7CiAJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSA9IGNtZC0+ZHJ2X2luc3Q7CiAJc3RydWN0IHBtY3JhaWRfaW9hcmNiICppb2FyY2IgPSAmY21kLT5pb2FfY2ItPmlvYXJjYjsKLQlpbnQgaW5kZXggPSAwOworCWludCBpbmRleCA9IGNtZC0+aHJycV9pbmRleDsKIAlfX2JlNjQgaHJycV9hZGRyID0gY3B1X3RvX2JlNjQocGluc3RhbmNlLT5ocnJxX3N0YXJ0X2J1c19hZGRyW2luZGV4XSk7CiAJdTMyIGhycnFfc2l6ZSA9IGNwdV90b19iZTMyKHNpemVvZih1MzIpICogUE1DUkFJRF9NQVhfQ01EKTsKKwl2b2lkICgqZG9uZV9mdW5jdGlvbikoc3RydWN0IHBtY3JhaWRfY21kICopOwogCiAJcG1jcmFpZF9yZWluaXRfY21kYmxrKGNtZCk7CisJY21kLT5ocnJxX2luZGV4ID0gaW5kZXggKyAxOworCisJaWYgKGNtZC0+aHJycV9pbmRleCA8IHBpbnN0YW5jZS0+bnVtX2hycnEpIHsKKwkJZG9uZV9mdW5jdGlvbiA9IHBtY3JhaWRfaWRlbnRpZnlfaHJycTsKKwl9IGVsc2UgeworCQljbWQtPmhycnFfaW5kZXggPSAwOworCQlkb25lX2Z1bmN0aW9uID0gcG1jcmFpZF9nZXRfZnd2ZXJzaW9uOworCX0KIAogCS8qIEluaXRpYWxpemUgaW9hcmNiICovCiAJaW9hcmNiLT5yZXF1ZXN0X3R5cGUgPSBSRVFfVFlQRV9JT0FDTUQ7CkBAIC05ODAsOCArMTE0Miw4IEBACiAJLyogSU9BIGV4cGVjdHMgNjQtYml0IHBjaSBhZGRyZXNzIHRvIGJlIHdyaXR0ZW4gaW4gQi5FIGZvcm1hdAogCSAqIChpLmUgY2RiWzJdPU1TQnl0ZS4uY2RiWzldPUxTQi4KIAkgKi8KLQlwbWNyYWlkX2luZm8oIkhSUlFfSURFTlRJRlkgd2l0aCBocnJxOmlvYXJjYiA9PiAlbGx4OiVsbHhcbiIsCi0JCSAgICAgaHJycV9hZGRyLCBpb2FyY2ItPmlvYXJjYl9idXNfYWRkcik7CisJcG1jcmFpZF9pbmZvKCJIUlJRX0lERU5USUZZIHdpdGggaHJycTppb2FyY2I6aW5kZXggPT4gJWxseDolbGx4OiV4XG4iLAorCQkgICAgIGhycnFfYWRkciwgaW9hcmNiLT5pb2FyY2JfYnVzX2FkZHIsIGluZGV4KTsKIAogCW1lbWNweSgmKGlvYXJjYi0+Y2RiWzJdKSwgJmhycnFfYWRkciwgc2l6ZW9mKGhycnFfYWRkcikpOwogCW1lbWNweSgmKGlvYXJjYi0+Y2RiWzEwXSksICZocnJxX3NpemUsIHNpemVvZihocnJxX3NpemUpKTsKQEAgLTk5MCw3ICsxMTUyLDcgQEAKIAkgKiBOb3RlIHRoYXQgdGhpcyBnZXRzIGNhbGxlZCBldmVuIGR1cmluZyByZXNldCBmcm9tIFNDU0kgbWlkLWxheWVyCiAJICogb3IgdGFza2xldAogCSAqLwotCXBtY3JhaWRfc2VuZF9jbWQoY21kLCBwbWNyYWlkX3F1ZXJ5Y2ZnLAorCXBtY3JhaWRfc2VuZF9jbWQoY21kLCBkb25lX2Z1bmN0aW9uLAogCQkJIFBNQ1JBSURfSU5URVJOQUxfVElNRU9VVCwKIAkJCSBwbWNyYWlkX3RpbWVvdXRfaGFuZGxlcik7CiB9CkBAIC0xMDQ3LDcgKzEyMDksNyBAQAogCX0KIAogCWlmICh0eXBlID09IFBNQ1JBSURfSENBTV9DT0RFX0NPTkZJR19DSEFOR0UpIHsKLQkJcmNiX3NpemUgPSBzaXplb2Yoc3RydWN0IHBtY3JhaWRfaGNhbV9jY24pOworCQlyY2Jfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9oY2FtX2Njbl9leHQpOwogCQljbWRfZG9uZSA9IHBtY3JhaWRfcHJvY2Vzc19jY247CiAJCWRtYSA9IHBpbnN0YW5jZS0+Y2NuLmJhZGRyICsgUE1DUkFJRF9BRU5fSERSX1NJWkU7CiAJCWhjYW0gPSAmcGluc3RhbmNlLT5jY247CkBAIC0xMDk0LDcgKzEyNTYsNyBAQAogICogVGhpcyBmdW5jdGlvbiB3aWxsIHNlbmQgYSBIb3N0IENvbnRyb2xsZWQgQXN5bmMgY29tbWFuZCB0byBJT0EuCiAgKgogICogUmV0dXJuIHZhbHVlOgotICogCW5vbmUKKyAqCW5vbmUKICAqLwogc3RhdGljIHZvaWQgcG1jcmFpZF9zZW5kX2hjYW0oc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSwgdTggdHlwZSkKIHsKQEAgLTEyMDIsMTggKzEzNjQsMjUgQEAKIC8qKgogICogcG1jcmFpZF9leHBvc2VfcmVzb3VyY2UgLSBjaGVjayBpZiB0aGUgcmVzb3VyY2UgY2FuIGJlIGV4cG9zZWQgdG8gT1MKICAqCisgKiBAZndfdmVyc2lvbjogZmlybXdhcmUgdmVyc2lvbiBjb2RlCiAgKiBAY2ZndGU6IHBvaW50ZXIgdG8gY29uZmlndXJhdGlvbiB0YWJsZSBlbnRyeSBvZiB0aGUgcmVzb3VyY2UKICAqCiAgKiBSZXR1cm4gdmFsdWU6Ci0gKiAJdHJ1ZSBpZiByZXNvdXJjZSBjYW4gYmUgYWRkZWQgdG8gbWlkbGF5ZXIsIGZhbHNlKDApIG90aGVyd2lzZQorICoJdHJ1ZSBpZiByZXNvdXJjZSBjYW4gYmUgYWRkZWQgdG8gbWlkbGF5ZXIsIGZhbHNlKDApIG90aGVyd2lzZQogICovCi1zdGF0aWMgaW50IHBtY3JhaWRfZXhwb3NlX3Jlc291cmNlKHN0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZV9lbnRyeSAqY2ZndGUpCitzdGF0aWMgaW50IHBtY3JhaWRfZXhwb3NlX3Jlc291cmNlKHUxNiBmd192ZXJzaW9uLAorCQkJCSAgIHN0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZV9lbnRyeSAqY2ZndGUpCiB7CiAJaW50IHJldHZhbCA9IDA7CiAKLQlpZiAoY2ZndGUtPnJlc291cmNlX3R5cGUgPT0gUkVTX1RZUEVfVlNFVCkKLQkJcmV0dmFsID0gKChjZmd0ZS0+dW5pcXVlX2ZsYWdzMSAmIDB4ODApID09IDApOwotCWVsc2UgaWYgKGNmZ3RlLT5yZXNvdXJjZV90eXBlID09IFJFU19UWVBFX0dTQ1NJKQorCWlmIChjZmd0ZS0+cmVzb3VyY2VfdHlwZSA9PSBSRVNfVFlQRV9WU0VUKSB7CisJCWlmIChmd192ZXJzaW9uIDw9IFBNQ1JBSURfRldfVkVSU0lPTl8xKQorCQkJcmV0dmFsID0gKChjZmd0ZS0+dW5pcXVlX2ZsYWdzMSAmIDB4ODApID09IDApOworCQllbHNlCisJCQlyZXR2YWwgPSAoKGNmZ3RlLT51bmlxdWVfZmxhZ3MwICYgMHg4MCkgPT0gMCAmJgorCQkJCSAgKGNmZ3RlLT51bmlxdWVfZmxhZ3MxICYgMHg4MCkgPT0gMCk7CisKKwl9IGVsc2UgaWYgKGNmZ3RlLT5yZXNvdXJjZV90eXBlID09IFJFU19UWVBFX0dTQ1NJKQogCQlyZXR2YWwgPSAoUkVTX0JVUyhjZmd0ZS0+cmVzb3VyY2VfYWRkcmVzcykgIT0KIAkJCQlQTUNSQUlEX1ZJUlRVQUxfRU5DTF9CVVNfSUQpOwogCXJldHVybiByZXR2YWw7CkBAIC0xMjQ2LDggKzE0MTUsOCBAQAogICogcG1jcmFpZF9uZXRsaW5rX2luaXQgLSByZWdpc3RlcnMgcG1jcmFpZF9ldmVudF9mYW1pbHkKICAqCiAgKiBSZXR1cm4gdmFsdWU6Ci0gKiAJMCBpZiB0aGUgcG1jcmFpZF9ldmVudF9mYW1pbHkgaXMgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQKLSAqIAl3aXRoIG5ldGxpbmsgZ2VuZXJpYywgbm9uLXplcm8gb3RoZXJ3aXNlCisgKgkwIGlmIHRoZSBwbWNyYWlkX2V2ZW50X2ZhbWlseSBpcyBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZAorICoJd2l0aCBuZXRsaW5rIGdlbmVyaWMsIG5vbi16ZXJvIG90aGVyd2lzZQogICovCiBzdGF0aWMgaW50IHBtY3JhaWRfbmV0bGlua19pbml0KHZvaWQpCiB7CkBAIC0xMjY4LDcgKzE0MzcsNyBAQAogICogcG1jcmFpZF9uZXRsaW5rX3JlbGVhc2UgLSB1bnJlZ2lzdGVycyBwbWNyYWlkX2V2ZW50X2ZhbWlseQogICoKICAqIFJldHVybiB2YWx1ZToKLSAqIAlub25lCisgKglub25lCiAgKi8KIHN0YXRpYyB2b2lkIHBtY3JhaWRfbmV0bGlua19yZWxlYXNlKHZvaWQpCiB7CkBAIC0xMjgzLDMxICsxNDUyLDMwIEBACiAgKiBSZXR1cm4gdmFsdWU6CiAgKgkwIGlmIHN1Y2Nlc3MsIGVycm9yIHZhbHVlIGluIGNhc2Ugb2YgYW55IGZhaWx1cmUuCiAgKi8KLXN0YXRpYyBpbnQgcG1jcmFpZF9ub3RpZnlfYWVuKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UsIHU4IHR5cGUpCitzdGF0aWMgaW50IHBtY3JhaWRfbm90aWZ5X2FlbigKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlLAorCXN0cnVjdCBwbWNyYWlkX2Flbl9tc2cgICphZW5fbXNnLAorCXUzMiAgICBkYXRhX3NpemUKKykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBwbWNyYWlkX2Flbl9tc2cgKmFlbl9tc2c7CiAJdm9pZCAqbXNnX2hlYWRlcjsKLQlpbnQgZGF0YV9zaXplLCB0b3RhbF9zaXplOworCXUzMiAgdG90YWxfc2l6ZSwgbmxhX2dlbmxfaGRyX3RvdGFsX3NpemU7CiAJaW50IHJlc3VsdDsKIAotCi0JaWYgKHR5cGUgPT0gUE1DUkFJRF9IQ0FNX0NPREVfTE9HX0RBVEEpIHsKLQkJYWVuX21zZyA9IHBpbnN0YW5jZS0+bGRuLm1zZzsKLQkJZGF0YV9zaXplID0gcGluc3RhbmNlLT5sZG4uaGNhbS0+ZGF0YV9sZW47Ci0JfSBlbHNlIHsKLQkJYWVuX21zZyA9IHBpbnN0YW5jZS0+Y2NuLm1zZzsKLQkJZGF0YV9zaXplID0gcGluc3RhbmNlLT5jY24uaGNhbS0+ZGF0YV9sZW47Ci0JfQotCi0JZGF0YV9zaXplICs9IHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9oY2FtX2hkcik7CiAJYWVuX21zZy0+aG9zdG5vID0gKHBpbnN0YW5jZS0+aG9zdC0+dW5pcXVlX2lkIDw8IDE2IHwKIAkJCSAgIE1JTk9SKHBpbnN0YW5jZS0+Y2Rldi5kZXYpKTsKIAlhZW5fbXNnLT5sZW5ndGggPSBkYXRhX3NpemU7CisKIAlkYXRhX3NpemUgKz0gc2l6ZW9mKCphZW5fbXNnKTsKIAogCXRvdGFsX3NpemUgPSBubGFfdG90YWxfc2l6ZShkYXRhX3NpemUpOwotCXNrYiA9IGdlbmxtc2dfbmV3KHRvdGFsX3NpemUsIEdGUF9BVE9NSUMpOworCS8qIEFkZCBHRU5MX0hEUiB0byB0b3RhbF9zaXplICovCisJbmxhX2dlbmxfaGRyX3RvdGFsX3NpemUgPQorCQkodG90YWxfc2l6ZSArIChHRU5MX0hEUkxFTiArCisJCSgoc3RydWN0IGdlbmxfZmFtaWx5ICopJnBtY3JhaWRfZXZlbnRfZmFtaWx5KS0+aGRyc2l6ZSkKKwkJICsgTkxNU0dfSERSTEVOKTsKKwlza2IgPSBnZW5sbXNnX25ldyhubGFfZ2VubF9oZHJfdG90YWxfc2l6ZSwgR0ZQX0FUT01JQyk7CiAKIAogCWlmICghc2tiKSB7CkBAIC0xMzI5LDcgKzE0OTcsNyBAQAogCXJlc3VsdCA9IG5sYV9wdXQoc2tiLCBQTUNSQUlEX0FFTl9BVFRSX0VWRU5ULCBkYXRhX3NpemUsIGFlbl9tc2cpOwogCiAJaWYgKHJlc3VsdCkgewotCQlwbWNyYWlkX2VycigiZmFpbGVkIHRvIGNvcHkgQUVOIGF0dHJpYnV0ZSBkYXRhIFxuIik7CisJCXBtY3JhaWRfZXJyKCJmYWlsZWQgdG8gY29weSBBRU4gYXR0cmlidXRlIGRhdGFcbiIpOwogCQlubG1zZ19mcmVlKHNrYik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTEzNTAsMTMgKzE1MTgsNTcgQEAKIAkgKiB2YWx1ZS4KIAkgKi8KIAlpZiAocmVzdWx0KQotCQlwbWNyYWlkX2luZm8oImZhaWxlZCB0byBzZW5kICVzIGV2ZW50IG1lc3NhZ2UgJXghXG4iLAotCQkJdHlwZSA9PSBQTUNSQUlEX0hDQU1fQ09ERV9MT0dfREFUQSA/ICJMRE4iIDogIkNDTiIsCi0JCQlyZXN1bHQpOworCQlwbWNyYWlkX2luZm8oImVycm9yICgleCkgc2VuZGluZyBhZW4gZXZlbnQgbWVzc2FnZVxuIiwgcmVzdWx0KTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCiAvKioKKyAqIHBtY3JhaWRfbm90aWZ5X2NjbiAtIG5vdGlmaWVzIGFib3V0IENDTiBldmVudCBtc2cgdG8gdXNlciBzcGFjZQorICogQHBpbnN0YW5jZTogcG9pbnRlciBhZGFwdGVyIGluc3RhbmNlIHN0cnVjdHVyZQorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqCTAgaWYgc3VjY2VzcywgZXJyb3IgdmFsdWUgaW4gY2FzZSBvZiBhbnkgZmFpbHVyZQorICovCitzdGF0aWMgaW50IHBtY3JhaWRfbm90aWZ5X2NjbihzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlKQoreworCXJldHVybiBwbWNyYWlkX25vdGlmeV9hZW4ocGluc3RhbmNlLAorCQkJCXBpbnN0YW5jZS0+Y2NuLm1zZywKKwkJCQlwaW5zdGFuY2UtPmNjbi5oY2FtLT5kYXRhX2xlbiArCisJCQkJc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2hjYW1faGRyKSk7Cit9CisKKy8qKgorICogcG1jcmFpZF9ub3RpZnlfbGRuIC0gbm90aWZpZXMgYWJvdXQgQ0NOIGV2ZW50IG1zZyB0byB1c2VyIHNwYWNlCisgKiBAcGluc3RhbmNlOiBwb2ludGVyIGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJuIHZhbHVlOgorICoJMCBpZiBzdWNjZXNzLCBlcnJvciB2YWx1ZSBpbiBjYXNlIG9mIGFueSBmYWlsdXJlCisgKi8KK3N0YXRpYyBpbnQgcG1jcmFpZF9ub3RpZnlfbGRuKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCit7CisJcmV0dXJuIHBtY3JhaWRfbm90aWZ5X2FlbihwaW5zdGFuY2UsCisJCQkJcGluc3RhbmNlLT5sZG4ubXNnLAorCQkJCXBpbnN0YW5jZS0+bGRuLmhjYW0tPmRhdGFfbGVuICsKKwkJCQlzaXplb2Yoc3RydWN0IHBtY3JhaWRfaGNhbV9oZHIpKTsKK30KKworLyoqCisgKiBwbWNyYWlkX25vdGlmeV9pb2FzdGF0ZSAtIHNlbmRzIElPQSBzdGF0ZSBldmVudCBtc2cgdG8gdXNlciBzcGFjZQorICogQHBpbnN0YW5jZTogcG9pbnRlciBhZGFwdGVyIGluc3RhbmNlIHN0cnVjdHVyZQorICogQGV2dDogY29udHJvbGxlciBzdGF0ZSBldmVudCB0byBiZSBzZW50CisgKgorICogUmV0dXJuIHZhbHVlOgorICoJMCBpZiBzdWNjZXNzLCBlcnJvciB2YWx1ZSBpbiBjYXNlIG9mIGFueSBmYWlsdXJlCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfbm90aWZ5X2lvYXN0YXRlKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UsIHUzMiBldnQpCit7CisJcGluc3RhbmNlLT5zY24uaW9hX3N0YXRlID0gZXZ0OworCXBtY3JhaWRfbm90aWZ5X2FlbihwaW5zdGFuY2UsCisJCQkgICZwaW5zdGFuY2UtPnNjbi5tc2csCisJCQkgIHNpemVvZih1MzIpKTsKK30KKworLyoqCiAgKiBwbWNyYWlkX2hhbmRsZV9jb25maWdfY2hhbmdlIC0gSGFuZGxlIGEgY29uZmlnIGNoYW5nZSBmcm9tIHRoZSBhZGFwdGVyCiAgKiBAcGluc3RhbmNlOiBwb2ludGVyIHRvIHBlciBhZGFwdGVyIGluc3RhbmNlIHN0cnVjdHVyZQogICoKQEAgLTEzNzUsMTAgKzE1ODcsMTIgQEAKIAl1bnNpZ25lZCBsb25nIGhvc3RfbG9ja19mbGFnczsKIAl1MzIgbmV3X2VudHJ5ID0gMTsKIAl1MzIgaGlkZGVuX2VudHJ5ID0gMDsKKwl1MTYgZndfdmVyc2lvbjsKIAlpbnQgcmM7CiAKIAljY25faGNhbSA9IChzdHJ1Y3QgcG1jcmFpZF9oY2FtX2NjbiAqKXBpbnN0YW5jZS0+Y2NuLmhjYW07CiAJY2ZnX2VudHJ5ID0gJmNjbl9oY2FtLT5jZmdfZW50cnk7CisJZndfdmVyc2lvbiA9IGJlMTZfdG9fY3B1KHBpbnN0YW5jZS0+aW5xX2RhdGEtPmZ3X3ZlcnNpb24pOwogCiAJcG1jcmFpZF9pbmZvCiAJCSgiQ0NOKCV4KTogJXggdHlwZTogJXggbG9zdDogJXggZmxhZ3M6ICV4IHJlczogJXg6JXg6JXg6JXhcbiIsCkBAIC0xMzkxLDcgKzE2MDUsMTAgQEAKIAkJIFJFU19JU19WU0VUKCpjZmdfZW50cnkpID8gUE1DUkFJRF9WU0VUX0JVU19JRCA6CiAJCSAoUkVTX0lTX0dTQ1NJKCpjZmdfZW50cnkpID8gUE1DUkFJRF9QSFlTX0JVU19JRCA6CiAJCQlSRVNfQlVTKGNmZ19lbnRyeS0+cmVzb3VyY2VfYWRkcmVzcykpLAotCQkgUkVTX0lTX1ZTRVQoKmNmZ19lbnRyeSkgPyBjZmdfZW50cnktPnVuaXF1ZV9mbGFnczEgOgorCQkgUkVTX0lTX1ZTRVQoKmNmZ19lbnRyeSkgPworCQkJKGZ3X3ZlcnNpb24gPD0gUE1DUkFJRF9GV19WRVJTSU9OXzEgPworCQkJCWNmZ19lbnRyeS0+dW5pcXVlX2ZsYWdzMSA6CisJCQkJCWNmZ19lbnRyeS0+YXJyYXlfaWQgJiAweEZGKSA6CiAJCQlSRVNfVEFSR0VUKGNmZ19lbnRyeS0+cmVzb3VyY2VfYWRkcmVzcyksCiAJCSBSRVNfTFVOKGNmZ19lbnRyeS0+cmVzb3VyY2VfYWRkcmVzcykpOwogCkBAIC0xNDE1LDExICsxNjMyLDE2IEBACiAJICovCiAJaWYgKHBpbnN0YW5jZS0+Y2NuLmhjYW0tPm5vdGlmaWNhdGlvbl90eXBlID09CiAJICAgIE5PVElGSUNBVElPTl9UWVBFX0VOVFJZX0NIQU5HRUQgJiYKLQkgICAgY2ZnX2VudHJ5LT5yZXNvdXJjZV90eXBlID09IFJFU19UWVBFX1ZTRVQgJiYKLQkgICAgY2ZnX2VudHJ5LT51bmlxdWVfZmxhZ3MxICYgMHg4MCkgewotCQloaWRkZW5fZW50cnkgPSAxOwotCX0gZWxzZSBpZiAoIXBtY3JhaWRfZXhwb3NlX3Jlc291cmNlKGNmZ19lbnRyeSkpCisJICAgIGNmZ19lbnRyeS0+cmVzb3VyY2VfdHlwZSA9PSBSRVNfVFlQRV9WU0VUKSB7CisKKwkJaWYgKGZ3X3ZlcnNpb24gPD0gUE1DUkFJRF9GV19WRVJTSU9OXzEpCisJCQloaWRkZW5fZW50cnkgPSAoY2ZnX2VudHJ5LT51bmlxdWVfZmxhZ3MxICYgMHg4MCkgIT0gMDsKKwkJZWxzZQorCQkJaGlkZGVuX2VudHJ5ID0gKGNmZ19lbnRyeS0+dW5pcXVlX2ZsYWdzMSAmIDB4ODApICE9IDA7CisKKwl9IGVsc2UgaWYgKCFwbWNyYWlkX2V4cG9zZV9yZXNvdXJjZShmd192ZXJzaW9uLCBjZmdfZW50cnkpKSB7CiAJCWdvdG8gb3V0X25vdGlmeV9hcHBzOworCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwaW5zdGFuY2UtPnJlc291cmNlX2xvY2ssIGxvY2tfZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocmVzLCAmcGluc3RhbmNlLT51c2VkX3Jlc19xLCBxdWV1ZSkgewpAQCAtMTQ2NiwxMyArMTY4OCwxNSBAQAogCQlsaXN0X2FkZF90YWlsKCZyZXMtPnF1ZXVlLCAmcGluc3RhbmNlLT51c2VkX3Jlc19xKTsKIAl9CiAKLQltZW1jcHkoJnJlcy0+Y2ZnX2VudHJ5LCBjZmdfZW50cnksCi0JCXNpemVvZihzdHJ1Y3QgcG1jcmFpZF9jb25maWdfdGFibGVfZW50cnkpKTsKKwltZW1jcHkoJnJlcy0+Y2ZnX2VudHJ5LCBjZmdfZW50cnksIHBpbnN0YW5jZS0+Y29uZmlnX3RhYmxlX2VudHJ5X3NpemUpOwogCiAJaWYgKHBpbnN0YW5jZS0+Y2NuLmhjYW0tPm5vdGlmaWNhdGlvbl90eXBlID09CiAJICAgIE5PVElGSUNBVElPTl9UWVBFX0VOVFJZX0RFTEVURUQgfHwgaGlkZGVuX2VudHJ5KSB7CiAJCWlmIChyZXMtPnNjc2lfZGV2KSB7Ci0JCQlyZXMtPmNmZ19lbnRyeS51bmlxdWVfZmxhZ3MxICY9IDB4N0Y7CisJCQlpZiAoZndfdmVyc2lvbiA8PSBQTUNSQUlEX0ZXX1ZFUlNJT05fMSkKKwkJCQlyZXMtPmNmZ19lbnRyeS51bmlxdWVfZmxhZ3MxICY9IDB4N0Y7CisJCQllbHNlCisJCQkJcmVzLT5jZmdfZW50cnkuYXJyYXlfaWQgJj0gMHhGRjsKIAkJCXJlcy0+Y2hhbmdlX2RldGVjdGVkID0gUkVTX0NIQU5HRV9ERUw7CiAJCQlyZXMtPmNmZ19lbnRyeS5yZXNvdXJjZV9oYW5kbGUgPQogCQkJCVBNQ1JBSURfSU5WQUxJRF9SRVNfSEFORExFOwpAQCAtMTQ5MSw3ICsxNzE1LDcgQEAKIAogCS8qIE5vdGlmeSBjb25maWd1cmF0aW9uIGNoYW5nZXMgdG8gcmVnaXN0ZXJlZCBhcHBsaWNhdGlvbnMuKi8KIAlpZiAoIXBtY3JhaWRfZGlzYWJsZV9hZW4pCi0JCXBtY3JhaWRfbm90aWZ5X2FlbihwaW5zdGFuY2UsIFBNQ1JBSURfSENBTV9DT0RFX0NPTkZJR19DSEFOR0UpOworCQlwbWNyYWlkX25vdGlmeV9jY24ocGluc3RhbmNlKTsKIAogCWNtZCA9IHBtY3JhaWRfaW5pdF9oY2FtKHBpbnN0YW5jZSwgUE1DUkFJRF9IQ0FNX0NPREVfQ09ORklHX0NIQU5HRSk7CiAJaWYgKGNtZCkKQEAgLTE1MjgsNyArMTc1Miw3IEBACiAJCXJldHVybjsKIAogCS8qIGxvZyB0aGUgZXJyb3Igc3RyaW5nICovCi0JcG1jcmFpZF9lcnIoImNtZCBbJWRdIGZvciByZXNvdXJjZSAleCBmYWlsZWQgd2l0aCAleCglcylcbiIsCisJcG1jcmFpZF9lcnIoImNtZCBbJXhdIGZvciByZXNvdXJjZSAleCBmYWlsZWQgd2l0aCAleCglcylcbiIsCiAJCWNtZC0+aW9hX2NiLT5pb2FyY2IuY2RiWzBdLAogCQljbWQtPmlvYV9jYi0+aW9hcmNiLnJlc291cmNlX2hhbmRsZSwKIAkJbGUzMl90b19jcHUoaW9hc2MpLCBlcnJvcl9pbmZvLT5lcnJvcl9zdHJpbmcpOwpAQCAtMTY2Myw3ICsxODg3LDcgQEAKIAl9CiAJLyogc2VuZCBuZXRsaW5rIG1lc3NhZ2UgZm9yIEhDQU0gbm90aWZpY2F0aW9uIGlmIGVuYWJsZWQgKi8KIAlpZiAoIXBtY3JhaWRfZGlzYWJsZV9hZW4pCi0JCXBtY3JhaWRfbm90aWZ5X2FlbihwaW5zdGFuY2UsIFBNQ1JBSURfSENBTV9DT0RFX0xPR19EQVRBKTsKKwkJcG1jcmFpZF9ub3RpZnlfbGRuKHBpbnN0YW5jZSk7CiAKIAljbWQgPSBwbWNyYWlkX2luaXRfaGNhbShwaW5zdGFuY2UsIFBNQ1JBSURfSENBTV9DT0RFX0xPR19EQVRBKTsKIAlpZiAoY21kKQpAQCAtMTcwMSwxMCArMTkyNSwxMyBAQAogCWF0b21pY19zZXQoJnBpbnN0YW5jZS0+bGRuLmlnbm9yZSwgMSk7CiAKIAkvKiBJZiBhZGFwdGVyIHJlc2V0IHdhcyBmb3JjZWQgYXMgcGFydCBvZiBydW50aW1lIHJlc2V0IHNlcXVlbmNlLAotCSAqIHN0YXJ0IHRoZSByZXNldCBzZXF1ZW5jZS4KKwkgKiBzdGFydCB0aGUgcmVzZXQgc2VxdWVuY2UuIFJlc2V0IHdpbGwgYmUgdHJpZ2dlcmVkIGV2ZW4gaW4gY2FzZQorCSAqIElPQSB1bml0X2NoZWNrLgogCSAqLwotCWlmIChwaW5zdGFuY2UtPmZvcmNlX2lvYV9yZXNldCAmJiAhcGluc3RhbmNlLT5pb2FfYnJpbmdkb3duKSB7CisJaWYgKChwaW5zdGFuY2UtPmZvcmNlX2lvYV9yZXNldCAmJiAhcGluc3RhbmNlLT5pb2FfYnJpbmdkb3duKSB8fAorCSAgICAgcGluc3RhbmNlLT5pb2FfdW5pdF9jaGVjaykgewogCQlwaW5zdGFuY2UtPmZvcmNlX2lvYV9yZXNldCA9IDA7CisJCXBpbnN0YW5jZS0+aW9hX3VuaXRfY2hlY2sgPSAwOwogCQlwaW5zdGFuY2UtPmlvYV9zdGF0ZSA9IElPQV9TVEFURV9JTl9SRVNFVF9BTEVSVDsKIAkJcG1jcmFpZF9yZXNldF9hbGVydChjbWQpOwogCQlyZXR1cm47CkBAIC0xNzM1LDEwICsxOTYyLDEzIEBACiAJcG1jcmFpZF9lbmFibGVfaW50ZXJydXB0cyhwaW5zdGFuY2UsIFBNQ1JBSURfUENJX0lOVEVSUlVQVFMpOwogCiAJaWYgKGludHJzICYgSU5UUlNfVFJBTlNJVElPTl9UT19PUEVSQVRJT05BTCkgewotCQlpb3dyaXRlMzIoSU5UUlNfVFJBTlNJVElPTl9UT19PUEVSQVRJT05BTCwKLQkJCXBpbnN0YW5jZS0+aW50X3JlZ3MuaW9hX2hvc3RfaW50ZXJydXB0X21hc2tfcmVnKTsKLQkJaW93cml0ZTMyKElOVFJTX1RSQU5TSVRJT05fVE9fT1BFUkFUSU9OQUwsCi0JCQlwaW5zdGFuY2UtPmludF9yZWdzLmlvYV9ob3N0X2ludGVycnVwdF9jbHJfcmVnKTsKKwkJaWYgKCFwaW5zdGFuY2UtPmludGVycnVwdF9tb2RlKSB7CisJCQlpb3dyaXRlMzIoSU5UUlNfVFJBTlNJVElPTl9UT19PUEVSQVRJT05BTCwKKwkJCQlwaW5zdGFuY2UtPmludF9yZWdzLgorCQkJCWlvYV9ob3N0X2ludGVycnVwdF9tYXNrX3JlZyk7CisJCQlpb3dyaXRlMzIoSU5UUlNfVFJBTlNJVElPTl9UT19PUEVSQVRJT05BTCwKKwkJCQlwaW5zdGFuY2UtPmludF9yZWdzLmlvYV9ob3N0X2ludGVycnVwdF9jbHJfcmVnKTsKKwkJfQogCQlyZXR1cm4gMTsKIAl9IGVsc2UgewogCQlyZXR1cm4gMDsKQEAgLTE3NzcsOCArMjAwNywxOSBAQAogCWRvb3JiZWxsID0gRE9PUkJFTExfUlVOVElNRV9SRVNFVCB8CiAJCSAgIERPT1JCRUxMX0VOQUJMRV9ERVNUUlVDVElWRV9ESUFHUzsKIAorCS8qIFNpbmNlIHdlIGRvIFJFU0VUX0FMRVJUIGFuZCBTdGFydCBCSVNUIHdlIGhhdmUgdG8gYWdhaW4gd3JpdGUKKwkgKiBNU0lYIERvb3JiZWxsIHRvIGluZGljYXRlIHRoZSBpbnRlcnJ1cHQgbW9kZQorCSAqLworCWlmIChwaW5zdGFuY2UtPmludGVycnVwdF9tb2RlKSB7CisJCWlvd3JpdGUzMihET09SQkVMTF9JTlRSX01PREVfTVNJWCwKKwkJCSAgcGluc3RhbmNlLT5pbnRfcmVncy5ob3N0X2lvYV9pbnRlcnJ1cHRfcmVnKTsKKwkJaW9yZWFkMzIocGluc3RhbmNlLT5pbnRfcmVncy5ob3N0X2lvYV9pbnRlcnJ1cHRfcmVnKTsKKwl9CisKIAlpb3dyaXRlMzIoZG9vcmJlbGwsIHBpbnN0YW5jZS0+aW50X3JlZ3MuaG9zdF9pb2FfaW50ZXJydXB0X3JlZyk7CisJaW9yZWFkMzIocGluc3RhbmNlLT5pbnRfcmVncy5ob3N0X2lvYV9pbnRlcnJ1cHRfcmVnKSwKIAlpbnRfcmVnID0gaW9yZWFkMzIocGluc3RhbmNlLT5pbnRfcmVncy5pb2FfaG9zdF9pbnRlcnJ1cHRfcmVnKTsKKwogCXBtY3JhaWRfaW5mbygiV2FpdGluZyBmb3IgSU9BIHRvIGJlY29tZSBvcGVyYXRpb25hbCAleDoleFxuIiwKIAkJICAgICBpb3JlYWQzMihwaW5zdGFuY2UtPmludF9yZWdzLmhvc3RfaW9hX2ludGVycnVwdF9yZWcpLAogCQkgICAgIGludF9yZWcpOwpAQCAtMTg1NCw3ICsyMDk1LDggQEAKIAkJfSBlbHNlIGlmIChjbWQtPmNtZF9kb25lID09IHBtY3JhaWRfaW50ZXJuYWxfZG9uZSB8fAogCQkJICAgY21kLT5jbWRfZG9uZSA9PSBwbWNyYWlkX2VycF9kb25lKSB7CiAJCQljbWQtPmNtZF9kb25lKGNtZCk7Ci0JCX0gZWxzZSBpZiAoY21kLT5jbWRfZG9uZSAhPSBwbWNyYWlkX2lvYV9yZXNldCkgeworCQl9IGVsc2UgaWYgKGNtZC0+Y21kX2RvbmUgIT0gcG1jcmFpZF9pb2FfcmVzZXQgJiYKKwkJCSAgIGNtZC0+Y21kX2RvbmUgIT0gcG1jcmFpZF9pb2Ffc2h1dGRvd25fZG9uZSkgewogCQkJcG1jcmFpZF9yZXR1cm5fY21kKGNtZCk7CiAJCX0KIApAQCAtMTk2NCw2ICsyMjA2LDEzIEBACiAJCQlwaW5zdGFuY2UtPmlvYV9yZXNldF9hdHRlbXB0cyA9IDA7CiAJCQlwbWNyYWlkX2VycigiSU9BIGRpZG4ndCByZXNwb25kIG1hcmtpbmcgaXQgYXMgZGVhZFxuIik7CiAJCQlwaW5zdGFuY2UtPmlvYV9zdGF0ZSA9IElPQV9TVEFURV9ERUFEOworCisJCQlpZiAocGluc3RhbmNlLT5pb2FfYnJpbmdkb3duKQorCQkJCXBtY3JhaWRfbm90aWZ5X2lvYXN0YXRlKHBpbnN0YW5jZSwKKwkJCQkJUE1DX0RFVklDRV9FVkVOVF9TSFVURE9XTl9GQUlMRUQpOworCQkJZWxzZQorCQkJCXBtY3JhaWRfbm90aWZ5X2lvYXN0YXRlKHBpbnN0YW5jZSwKKwkJCQkJCVBNQ19ERVZJQ0VfRVZFTlRfUkVTRVRfRkFJTEVEKTsKIAkJCXJlc2V0X2NvbXBsZXRlID0gMTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xOTcxLDcgKzIyMjAsNiBAQAogCQkvKiBPbmNlIGVpdGhlciBiaXN0IG9yIHBjaSByZXNldCBpcyBkb25lLCByZXN0b3JlIFBDSSBjb25maWcKIAkJICogc3BhY2UuIElmIHRoaXMgZmFpbHMsIHByb2NlZWQgd2l0aCBoYXJkIHJlc2V0IGFnYWluCiAJCSAqLwotCiAJCWlmIChwY2lfcmVzdG9yZV9zdGF0ZShwaW5zdGFuY2UtPnBkZXYpKSB7CiAJCQlwbWNyYWlkX2luZm8oImNvbmZpZy1zcGFjZSBlcnJvciByZXNldHRpbmcgYWdhaW5cbiIpOwogCQkJcGluc3RhbmNlLT5pb2Ffc3RhdGUgPSBJT0FfU1RBVEVfSU5fUkVTRVRfQUxFUlQ7CkBAIC0yMDAyLDYgKzIyNTAsOCBAQAogCQkJcGluc3RhbmNlLT5pb2Ffc2h1dGRvd25fdHlwZSA9IFNIVVRET1dOX05PTkU7CiAJCQlwaW5zdGFuY2UtPmlvYV9icmluZ2Rvd24gPSAwOwogCQkJcGluc3RhbmNlLT5pb2Ffc3RhdGUgPSBJT0FfU1RBVEVfVU5LTk9XTjsKKwkJCXBtY3JhaWRfbm90aWZ5X2lvYXN0YXRlKHBpbnN0YW5jZSwKKwkJCQkJUE1DX0RFVklDRV9FVkVOVF9TSFVURE9XTl9TVUNDRVNTKTsKIAkJCXJlc2V0X2NvbXBsZXRlID0gMTsKIAkJfSBlbHNlIHsKIAkJCS8qIGJyaW5nLXVwIElPQSwgc28gcHJvY2VlZCB3aXRoIHNvZnQgcmVzZXQKQEAgLTIwNTEsNiArMjMwMSw4IEBACiAJCSAqLwogCQlpZiAocGluc3RhbmNlLT5pb2Ffc2h1dGRvd25fdHlwZSA9PSBTSFVURE9XTl9OT05FICYmCiAJCSAgICBwaW5zdGFuY2UtPmZvcmNlX2lvYV9yZXNldCA9PSAwKSB7CisJCQlwbWNyYWlkX25vdGlmeV9pb2FzdGF0ZShwaW5zdGFuY2UsCisJCQkJCQlQTUNfREVWSUNFX0VWRU5UX1JFU0VUX1NVQ0NFU1MpOwogCQkJcmVzZXRfY29tcGxldGUgPSAxOwogCQl9IGVsc2UgewogCQkJaWYgKHBpbnN0YW5jZS0+aW9hX3NodXRkb3duX3R5cGUgIT0gU0hVVERPV05fTk9ORSkKQEAgLTIxMTYsNiArMjM2OCw4IEBACiAJCXBpbnN0YW5jZS0+aW9hX3NodXRkb3duX3R5cGUgPSBTSFVURE9XTl9OT05FOwogCQlwaW5zdGFuY2UtPnJlc2V0X2NtZCA9IGNtZDsKIAkJcGluc3RhbmNlLT5mb3JjZV9pb2FfcmVzZXQgPSAxOworCQlwbWNyYWlkX25vdGlmeV9pb2FzdGF0ZShwaW5zdGFuY2UsCisJCQkJCVBNQ19ERVZJQ0VfRVZFTlRfUkVTRVRfU1RBUlQpOwogCQlwbWNyYWlkX2lvYV9yZXNldChjbWQpOwogCX0KIH0KQEAgLTIxOTEsNyArMjQ0NSw3IEBACiAJCXdhaXRfZXZlbnQocGluc3RhbmNlLT5yZXNldF93YWl0X3EsCiAJCQkgICAhcGluc3RhbmNlLT5pb2FfcmVzZXRfaW5fcHJvZ3Jlc3MpOwogCi0JCXBtY3JhaWRfaW5mbygicmVzZXRfcmVsb2FkOiByZXNldCBpcyBjb21wbGV0ZSAhISBcbiIpOworCQlwbWNyYWlkX2luZm8oInJlc2V0X3JlbG9hZDogcmVzZXQgaXMgY29tcGxldGUgISFcbiIpOwogCQlzY3NpX3VuYmxvY2tfcmVxdWVzdHMocGluc3RhbmNlLT5ob3N0KTsKIAkJaWYgKHBpbnN0YW5jZS0+aW9hX3N0YXRlID09IHRhcmdldF9zdGF0ZSkKIAkJCXJlc2V0ID0gMDsKQEAgLTIyMjUsNiArMjQ3OSw4IEBACiAgKi8KIHN0YXRpYyBpbnQgcG1jcmFpZF9yZXNldF9icmluZ3VwKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCiB7CisJcG1jcmFpZF9ub3RpZnlfaW9hc3RhdGUocGluc3RhbmNlLCBQTUNfREVWSUNFX0VWRU5UX1JFU0VUX1NUQVJUKTsKKwogCXJldHVybiBwbWNyYWlkX3Jlc2V0X3JlbG9hZChwaW5zdGFuY2UsCiAJCQkJICAgIFNIVVRET1dOX05PTkUsCiAJCQkJICAgIElPQV9TVEFURV9PUEVSQVRJT05BTCk7CkBAIC0yNzA0LDcgKzI5NjAsNyBAQAogCiAJcG1jcmFpZF9pbmZvKCJjb21tYW5kICglZCkgQ0RCWzBdID0gJXggZm9yICV4XG4iLAogCQlsZTMyX3RvX2NwdShjYW5jZWxfY21kLT5pb2FfY2ItPmlvYXJjYi5yZXNwb25zZV9oYW5kbGUpID4+IDIsCi0JCWNtZC0+aW9hX2NiLT5pb2FyY2IuY2RiWzBdLAorCQljYW5jZWxfY21kLT5pb2FfY2ItPmlvYXJjYi5jZGJbMF0sCiAJCWxlMzJfdG9fY3B1KGNhbmNlbF9jbWQtPmlvYV9jYi0+aW9hcmNiLnJlc291cmNlX2hhbmRsZSkpOwogCiAJcG1jcmFpZF9zZW5kX2NtZChjYW5jZWxfY21kLApAQCAtMjcyOSw4ICsyOTg1LDggQEAKIAl1MzIgaW9hc2M7CiAKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjYW5jZWxfY21kLT53YWl0X2Zvcl9jb21wbGV0aW9uKTsKLQlyZXMgPSBjYW5jZWxfY21kLT51LnJlczsKLQljYW5jZWxfY21kLT51LnJlcyA9IE5VTEw7CisJcmVzID0gY2FuY2VsX2NtZC0+cmVzOworCWNhbmNlbF9jbWQtPnJlcyA9IE5VTEw7CiAJaW9hc2MgPSBsZTMyX3RvX2NwdShjYW5jZWxfY21kLT5pb2FfY2ItPmlvYXNhLmlvYXNjKTsKIAogCS8qIElmIHRoZSBhYm9ydCB0YXNrIGlzIG5vdCB0aW1lZCBvdXQgd2Ugd2lsbCBnZXQgYSBHb29kIGNvbXBsZXRpb24KQEAgLTI4MjMsNyArMzA3OSw3IEBACiAJCQkgICAgICAgaG9zdF9sb2NrX2ZsYWdzKTsKIAogCWlmIChjYW5jZWxfY21kKSB7Ci0JCWNhbmNlbF9jbWQtPnUucmVzID0gY21kLT5zY3NpX2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKwkJY2FuY2VsX2NtZC0+cmVzID0gY21kLT5zY3NpX2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAkJcmMgPSBwbWNyYWlkX2Fib3J0X2NvbXBsZXRlKGNhbmNlbF9jbWQpOwogCX0KIApAQCAtMjg0Miw3ICszMDk4LDcgQEAKICAqIHRha2VzIGNhcmUgYnkgbG9ja2luZy91bmxvY2tpbmcgaG9zdF9sb2NrLgogICoKICAqIFJldHVybiB2YWx1ZQotICogCVNVQ0NFU1Mgb3IgRkFJTEVECisgKglTVUNDRVNTIG9yIEZBSUxFRAogICovCiBzdGF0aWMgaW50IHBtY3JhaWRfZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKIHsKQEAgLTI4NzksNyArMzEzNSw3IEBACiAgKiBJbml0aWF0ZXMgYWRhcHRlciByZXNldCB0byBicmluZyBpdCB1cCB0byBvcGVyYXRpb25hbCBzdGF0ZQogICoKICAqIFJldHVybiB2YWx1ZQotICogCVNVQ0NFU1Mgb3IgRkFJTEVECisgKglTVUNDRVNTIG9yIEZBSUxFRAogICovCiBzdGF0aWMgaW50IHBtY3JhaWRfZWhfaG9zdF9yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCiB7CkBAIC0yOTkxLDcgKzMyNDcsNyBAQAogICogdG8gZmlybXdhcmUuIFRoaXMgYnVpbGRzIGlvYWRsIGRlc2NyaXB0b3JzIGFuZCBzZXRzIHVwIGlvYXJjYiBmaWVsZHMuCiAgKgogICogUmV0dXJuIHZhbHVlOgotICogCTAgb24gc3VjY2VzcyBvciAtMSBvbiBmYWlsdXJlCisgKgkwIG9uIHN1Y2Nlc3Mgb3IgLTEgb24gZmFpbHVyZQogICovCiBzdGF0aWMgaW50IHBtY3JhaWRfYnVpbGRfaW9hZGwoCiAJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSwKQEAgLTMwNDksNyArMzMwNSw3IEBACiAgKiBGcmVlIGEgRE1BJ2FibGUgbWVtb3J5IHByZXZpb3VzbHkgYWxsb2NhdGVkIHdpdGggcG1jcmFpZF9hbGxvY19zZ2xpc3QKICAqCiAgKiBSZXR1cm4gdmFsdWU6Ci0gKiAJbm9uZQorICoJbm9uZQogICovCiBzdGF0aWMgdm9pZCBwbWNyYWlkX2ZyZWVfc2dsaXN0KHN0cnVjdCBwbWNyYWlkX3NnbGlzdCAqc2dsaXN0KQogewpAQCAtMzA3MCw3ICszMzI2LDcgQEAKICAqIGxpc3QuCiAgKgogICogUmV0dXJuIHZhbHVlCi0gKiAJcG9pbnRlciB0byBzZ2xpc3QgLyBOVUxMIG9uIGZhaWx1cmUKKyAqCXBvaW50ZXIgdG8gc2dsaXN0IC8gTlVMTCBvbiBmYWlsdXJlCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcG1jcmFpZF9zZ2xpc3QgKnBtY3JhaWRfYWxsb2Nfc2dsaXN0KGludCBidWZsZW4pCiB7CkBAIC0zMjI0LDExICszNDgwLDEyIEBACiAJc3RydWN0IHBtY3JhaWRfcmVzb3VyY2VfZW50cnkgKnJlczsKIAlzdHJ1Y3QgcG1jcmFpZF9pb2FyY2IgKmlvYXJjYjsKIAlzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZDsKKwl1MzIgZndfdmVyc2lvbjsKIAlpbnQgcmMgPSAwOwogCiAJcGluc3RhbmNlID0KIAkJKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICopc2NzaV9jbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7Ci0KKwlmd192ZXJzaW9uID0gYmUxNl90b19jcHUocGluc3RhbmNlLT5pbnFfZGF0YS0+ZndfdmVyc2lvbik7CiAJc2NzaV9jbWQtPnNjc2lfZG9uZSA9IGRvbmU7CiAJcmVzID0gc2NzaV9jbWQtPmRldmljZS0+aG9zdGRhdGE7CiAJc2NzaV9jbWQtPnJlc3VsdCA9IChESURfT0sgPDwgMTYpOwpAQCAtMzI0Nyw2ICszNTA0LDE1IEBACiAJaWYgKHBpbnN0YW5jZS0+aW9hX3Jlc2V0X2luX3Byb2dyZXNzKQogCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKIAorCS8qIEZpcm13YXJlIGRvZXNuJ3Qgc3VwcG9ydCBTWU5DSFJPTklaRV9DQUNIRSBjb21tYW5kICgweDM1KSwgY29tcGxldGUKKwkgKiB0aGUgY29tbWFuZCBoZXJlIGl0c2VsZiB3aXRoIHN1Y2Nlc3MgcmV0dXJuCisJICovCisJaWYgKHNjc2lfY21kLT5jbW5kWzBdID09IFNZTkNIUk9OSVpFX0NBQ0hFKSB7CisJCXBtY3JhaWRfaW5mbygiU1lOQ19DQUNIRSgweDM1KSwgY29tcGxldGluZyBpbiBkcml2ZXIgaXRzZWxmXG4iKTsKKwkJc2NzaV9jbWQtPnNjc2lfZG9uZShzY3NpX2NtZCk7CisJCXJldHVybiAwOworCX0KKwogCS8qIGluaXRpYWxpemUgdGhlIGNvbW1hbmQgYW5kIElPQVJDQiB0byBiZSBzZW50IHRvIElPQSAqLwogCWNtZCA9IHBtY3JhaWRfZ2V0X2ZyZWVfY21kKHBpbnN0YW5jZSk7CiAKQEAgLTMyNjEsNiArMzUyNywxMyBAQAogCWlvYXJjYi0+cmVzb3VyY2VfaGFuZGxlID0gcmVzLT5jZmdfZW50cnkucmVzb3VyY2VfaGFuZGxlOwogCWlvYXJjYi0+cmVxdWVzdF90eXBlID0gUkVRX1RZUEVfU0NTSTsKIAorCS8qIHNldCBocnJxIG51bWJlciB3aGVyZSB0aGUgSU9BIHNob3VsZCByZXNwb25kIHRvLiBOb3RlIHRoYXQgYWxsIGNtZHMKKwkgKiBnZW5lcmF0ZWQgaW50ZXJuYWxseSB1c2VzIGhycnFfaWQgMCwgZXhjZXB0aW9uIHRvIHRoaXMgaXMgdGhlIGNtZAorCSAqIGJsb2NrIG9mIHNjc2lfY21kIHdoaWNoIGlzIHJlLXVzZWQgKGUuZy4gY2FuY2VsL2Fib3J0KSwgd2hpY2ggdXNlcworCSAqIGhycnFfaWQgYXNzaWduZWQgaGVyZSBpbiBxdWV1ZWNvbW1hbmQKKwkgKi8KKwlpb2FyY2ItPmhycnFfaWQgPSBhdG9taWNfYWRkX3JldHVybigxLCAmKHBpbnN0YW5jZS0+bGFzdF9tZXNzYWdlX2lkKSkgJQorCQkJICBwaW5zdGFuY2UtPm51bV9ocnJxOwogCWNtZC0+Y21kX2RvbmUgPSBwbWNyYWlkX2lvX2RvbmU7CiAKIAlpZiAoUkVTX0lTX0dTQ1NJKHJlcy0+Y2ZnX2VudHJ5KSB8fCBSRVNfSVNfVlNFVChyZXMtPmNmZ19lbnRyeSkpIHsKQEAgLTMyODcsNyArMzU2MCw5IEBACiAJCSAgICAgUkVTX0lTX1ZTRVQocmVzLT5jZmdfZW50cnkpID8gUE1DUkFJRF9WU0VUX0JVU19JRCA6CiAJCQlQTUNSQUlEX1BIWVNfQlVTX0lELAogCQkgICAgIFJFU19JU19WU0VUKHJlcy0+Y2ZnX2VudHJ5KSA/Ci0JCQlyZXMtPmNmZ19lbnRyeS51bmlxdWVfZmxhZ3MxIDoKKwkJCShmd192ZXJzaW9uIDw9IFBNQ1JBSURfRldfVkVSU0lPTl8xID8KKwkJCQlyZXMtPmNmZ19lbnRyeS51bmlxdWVfZmxhZ3MxIDoKKwkJCQkJcmVzLT5jZmdfZW50cnkuYXJyYXlfaWQgJiAweEZGKSA6CiAJCQlSRVNfVEFSR0VUKHJlcy0+Y2ZnX2VudHJ5LnJlc291cmNlX2FkZHJlc3MpLAogCQkgICAgIFJFU19MVU4ocmVzLT5jZmdfZW50cnkucmVzb3VyY2VfYWRkcmVzcykpOwogCkBAIC0zMzI0LDggKzM1OTksNyBAQAogICovCiBzdGF0aWMgaW50IHBtY3JhaWRfY2hyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwKQogewotCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPQotCQkoKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICopZmlsZXAtPnByaXZhdGVfZGF0YSk7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSA9IGZpbGVwLT5wcml2YXRlX2RhdGE7CiAKIAlmaWxlcC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKIAlmYXN5bmNfaGVscGVyKC0xLCBmaWxlcCwgMCwgJnBpbnN0YW5jZS0+YWVuX3F1ZXVlKTsKQEAgLTMzNDQsNyArMzYxOCw3IEBACiAJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZTsKIAlpbnQgcmM7CiAKLQlwaW5zdGFuY2UgPSAoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKilmaWxlcC0+cHJpdmF0ZV9kYXRhOworCXBpbnN0YW5jZSA9IGZpbGVwLT5wcml2YXRlX2RhdGE7CiAJbXV0ZXhfbG9jaygmcGluc3RhbmNlLT5hZW5fcXVldWVfbG9jayk7CiAJcmMgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlcCwgbW9kZSwgJnBpbnN0YW5jZS0+YWVuX3F1ZXVlKTsKIAltdXRleF91bmxvY2soJnBpbnN0YW5jZS0+YWVuX3F1ZXVlX2xvY2spOwpAQCAtMzQ2NSw2ICszNzM5LDcgQEAKIAl1bnNpZ25lZCBsb25nIHJlcXVlc3RfYnVmZmVyOwogCXVuc2lnbmVkIGxvbmcgcmVxdWVzdF9vZmZzZXQ7CiAJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCXUzMiBpb2FzYzsKIAlpbnQgcmVxdWVzdF9zaXplOwogCWludCBidWZmZXJfc2l6ZTsKIAl1OCBhY2Nlc3MsIGRpcmVjdGlvbjsKQEAgLTM1NjYsNiArMzg0MSwxNCBAQAogCQkJYnVmZmVyLT5pb2FyY2IuYWRkX2NtZF9wYXJhbV9sZW5ndGgpOwogCX0KIAorCS8qIHNldCBocnJxIG51bWJlciB3aGVyZSB0aGUgSU9BIHNob3VsZCByZXNwb25kIHRvLiBOb3RlIHRoYXQgYWxsIGNtZHMKKwkgKiBnZW5lcmF0ZWQgaW50ZXJuYWxseSB1c2VzIGhycnFfaWQgMCwgZXhjZXB0aW9uIHRvIHRoaXMgaXMgdGhlIGNtZAorCSAqIGJsb2NrIG9mIHNjc2lfY21kIHdoaWNoIGlzIHJlLXVzZWQgKGUuZy4gY2FuY2VsL2Fib3J0KSwgd2hpY2ggdXNlcworCSAqIGhycnFfaWQgYXNzaWduZWQgaGVyZSBpbiBxdWV1ZWNvbW1hbmQKKwkgKi8KKwlpb2FyY2ItPmhycnFfaWQgPSBhdG9taWNfYWRkX3JldHVybigxLCAmKHBpbnN0YW5jZS0+bGFzdF9tZXNzYWdlX2lkKSkgJQorCQkJICBwaW5zdGFuY2UtPm51bV9ocnJxOworCiAJaWYgKHJlcXVlc3Rfc2l6ZSkgewogCQlyYyA9IHBtY3JhaWRfYnVpbGRfcGFzc3Rocm91Z2hfaW9hZGxzKGNtZCwKIAkJCQkJCSAgICAgIHJlcXVlc3Rfc2l6ZSwKQEAgLTM2MDYsNiArMzg4OSwxNCBAQAogCV9wbWNyYWlkX2ZpcmVfY29tbWFuZChjbWQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwogCisJLyogTk9URSAhIFJlbW92ZSB0aGUgYmVsb3cgbGluZSBvbmNlIGFib3J0X3Rhc2sgaXMgaW1wbGVtZW50ZWQKKwkgKiBpbiBmaXJtd2FyZS4gVGhpcyBsaW5lIGRpc2FibGVzIGlvY3RsIGNvbW1hbmQgdGltZW91dCBoYW5kbGluZyBsb2dpYworCSAqIHNpbWlsYXIgdG8gSU8gY29tbWFuZCB0aW1lb3V0IGhhbmRsaW5nLCBtYWtpbmcgaW9jdGwgY29tbWFuZHMgdG8gd2FpdAorCSAqIHVudGlsIHRoZSBjb21tYW5kIGNvbXBsZXRpb24gcmVnYXJkbGVzcyBvZiB0aW1lb3V0IHZhbHVlIHNwZWNpZmllZCBpbgorCSAqIGlvYXJjYgorCSAqLworCWJ1ZmZlci0+aW9hcmNiLmNtZF90aW1lb3V0ID0gMDsKKwogCS8qIElmIGNvbW1hbmQgdGltZW91dCBpcyBzcGVjaWZpZWQgcHV0IGNhbGxlciB0byB3YWl0IHRpbGwgdGhhdCB0aW1lLAogCSAqIG90aGVyd2lzZSBpdCB3b3VsZCBiZSBibG9ja2luZyB3YWl0LiBJZiBjb21tYW5kIGdldHMgdGltZWQgb3V0LCBpdAogCSAqIHdpbGwgYmUgYWJvcnRlZC4KQEAgLTM2MjAsMjUgKzM5MTEsNDcgQEAKIAkJCWxlMzJfdG9fY3B1KGNtZC0+aW9hX2NiLT5pb2FyY2IucmVzcG9uc2VfaGFuZGxlID4+IDIpLAogCQkJY21kLT5pb2FfY2ItPmlvYXJjYi5jZGJbMF0pOwogCi0JCXJjID0gLUVUSU1FRE9VVDsKIAkJc3Bpbl9sb2NrX2lycXNhdmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwogCQljYW5jZWxfY21kID0gcG1jcmFpZF9hYm9ydF9jbWQoY21kKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CiAKIAkJaWYgKGNhbmNlbF9jbWQpIHsKIAkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmNhbmNlbF9jbWQtPndhaXRfZm9yX2NvbXBsZXRpb24pOworCQkJaW9hc2MgPSBjYW5jZWxfY21kLT5pb2FfY2ItPmlvYXNhLmlvYXNjOwogCQkJcG1jcmFpZF9yZXR1cm5fY21kKGNhbmNlbF9jbWQpOworCisJCQkvKiBpZiBhYm9ydCB0YXNrIGNvdWxkbid0IGZpbmQgdGhlIGNvbW1hbmQgaS5lIGl0IGdvdAorCQkJICogY29tcGxldGVkIHByaW9yIHRvIGFib3J0aW5nLCByZXR1cm4gZ29vZCBjb21wbGV0aW9uLgorCQkJICogaWYgY29tbWFuZCBnb3QgYWJvcnRlZCBzdWNjZXNmdWxseSBvciB0aGVyZSB3YXMgSU9BCisJCQkgKiByZXNldCBkdWUgdG8gYWJvcnQgdGFzayBpdHNlbGYgZ2V0dGluZyB0aW1lZG91dCB0aGVuCisJCQkgKiByZXR1cm4gLUVUSU1FRE9VVAorCQkJICovCisJCQlpZiAoaW9hc2MgPT0gUE1DUkFJRF9JT0FTQ19JT0FfV0FTX1JFU0VUIHx8CisJCQkgICAgUE1DUkFJRF9JT0FTQ19TRU5TRV9LRVkoaW9hc2MpID09IDB4MDApIHsKKwkJCQlpZiAoaW9hc2MgIT0gUE1DUkFJRF9JT0FTQ19HQ19JT0FSQ0JfTk9URk9VTkQpCisJCQkJCXJjID0gLUVUSU1FRE9VVDsKKwkJCQlnb3RvIG91dF9oYW5kbGVfcmVzcG9uc2U7CisJCQl9CiAJCX0KIAotCQlnb3RvIG91dF9mcmVlX3NnbGlzdDsKKwkJLyogbm8gY29tbWFuZCBibG9jayBmb3IgYWJvcnQgdGFzayBvciBhYm9ydCB0YXNrIGZhaWxlZCB0byBhYm9ydAorCQkgKiB0aGUgSU9BUkNCLCB0aGVuIHdhaXQgZm9yIDE1MCBtb3JlIHNlY29uZHMgYW5kIGluaXRpYXRlIHJlc2V0CisJCSAqIHNlcXVlbmNlIGFmdGVyIHRpbWVvdXQKKwkJICovCisJCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KAorCQkJJmNtZC0+d2FpdF9mb3JfY29tcGxldGlvbiwKKwkJCW1zZWNzX3RvX2ppZmZpZXMoMTUwICogMTAwMCkpKSB7CisJCQlwbWNyYWlkX3Jlc2V0X2JyaW5ndXAoY21kLT5kcnZfaW5zdCk7CisJCQlyYyA9IC1FVElNRURPVVQ7CisJCX0KIAl9CiAKK291dF9oYW5kbGVfcmVzcG9uc2U6CiAJLyogSWYgdGhlIGNvbW1hbmQgZmFpbGVkIGZvciBhbnkgcmVhc29uLCBjb3B5IGVudGlyZSBJT0FTQSBidWZmZXIgYW5kCiAJICogcmV0dXJuIElPQ1RMIHN1Y2Nlc3MuIElmIGNvcHlpbmcgSU9BU0EgdG8gdXNlci1idWZmZXIgZmFpbHMsIHJldHVybgogCSAqIEVGQVVMVAogCSAqLwotCWlmIChsZTMyX3RvX2NwdShjbWQtPmlvYV9jYi0+aW9hc2EuaW9hc2MpKSB7Ci0KKwlpZiAoUE1DUkFJRF9JT0FTQ19TRU5TRV9LRVkobGUzMl90b19jcHUoY21kLT5pb2FfY2ItPmlvYXNhLmlvYXNjKSkpIHsKIAkJdm9pZCAqaW9hc2EgPQogCQkgICAgKHZvaWQgKikoYXJnICsKIAkJICAgIG9mZnNldG9mKHN0cnVjdCBwbWNyYWlkX3Bhc3N0aHJvdWdoX2lvY3RsX2J1ZmZlciwgaW9hc2EpKTsKQEAgLTM2NTEsNiArMzk2NCw3IEBACiAJCQlyYyA9IC1FRkFVTFQ7CiAJCX0KIAl9CisKIAkvKiBJZiB0aGUgZGF0YSB0cmFuc2ZlciB3YXMgZnJvbSBkZXZpY2UsIGNvcHkgdGhlIGRhdGEgb250byB1c2VyCiAJICogYnVmZmVycwogCSAqLwpAQCAtMzY5OSw3ICs0MDEzLDcgQEAKIAlpbnQgcmMgPSAtRU5PU1lTOwogCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHVzZXJfYnVmZmVyLCBfSU9DX1NJWkUoY21kKSkpIHsKLQkJcG1jcmFpZF9lcnIoImlvY3RsX2RyaXZlcjogYWNjZXNzIGZhdWx0IGluIHJlcXVlc3QgYnVmZmVyIFxuIik7CisJCXBtY3JhaWRfZXJyKCJpb2N0bF9kcml2ZXI6IGFjY2VzcyBmYXVsdCBpbiByZXF1ZXN0IGJ1ZmZlclxuIik7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIApAQCAtMzc5NSw3ICs0MTA5LDcgQEAKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKLQlwaW5zdGFuY2UgPSAoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKilmaWxlcC0+cHJpdmF0ZV9kYXRhOworCXBpbnN0YW5jZSA9IGZpbGVwLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoIXBpbnN0YW5jZSkgewogCQlwbWNyYWlkX2luZm8oImFkYXB0ZXIgaW5zdGFuY2UgaXMgbm90IGZvdW5kXG4iKTsKQEAgLTQwMTEsMzYgKzQzMjUsNzcgQEAKIAkucHJvY19uYW1lID0gUE1DUkFJRF9EUklWRVJfTkFNRQogfTsKIAotLyoqCi0gKiBwbWNyYWlkX2lzcl9jb21tb24gLSBDb21tb24gaW50ZXJydXB0IGhhbmRsZXIgcm91dGluZQotICoKLSAqIEBwaW5zdGFuY2U6IHBvaW50ZXIgdG8gYWRhcHRlciBpbnN0YW5jZQotICogQGludHJzOiBhY3RpdmUgaW50ZXJydXB0cyAoY29udGVudHMgb2YgaW9hX2hvc3RfaW50ZXJydXB0IHJlZ2lzdGVyKQotICogQGhycnFfaWQ6IEhvc3QgUlJRIGluZGV4CisvKgorICogcG1jcmFpZF9pc3JfbXNpeCAtIGltcGxlbWVudHMgTVNJLVggaW50ZXJydXB0IGhhbmRsaW5nIHJvdXRpbmUKKyAqIEBpcnE6IGludGVycnVwdCB2ZWN0b3IgbnVtYmVyCisgKiBAZGV2X2lkOiBwb2ludGVyIGhycnFfdmVjdG9yCiAgKgogICogUmV0dXJuIFZhbHVlCi0gKglub25lCisgKgkgSVJRX0hBTkRMRUQgaWYgaW50ZXJydXB0IGlzIGhhbmRsZWQgb3IgSVJRX05PTkUgaWYgaWdub3JlZAogICovCi1zdGF0aWMgdm9pZCBwbWNyYWlkX2lzcl9jb21tb24oCi0Jc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSwKLQl1MzIgaW50cnMsCi0JaW50IGhycnFfaWQKLSkKLXsKLQl1MzIgaW50cnNfY2xlYXIgPQotCQkoaW50cnMgJiBJTlRSU19DUklUSUNBTF9PUF9JTl9QUk9HUkVTUykgPyBpbnRycwotCQkJCQkJCTogSU5UUlNfSFJSUV9WQUxJRDsKLQlpb3dyaXRlMzIoaW50cnNfY2xlYXIsCi0JCSAgcGluc3RhbmNlLT5pbnRfcmVncy5pb2FfaG9zdF9pbnRlcnJ1cHRfY2xyX3JlZyk7Ci0JaW50cnMgPSBpb3JlYWQzMihwaW5zdGFuY2UtPmludF9yZWdzLmlvYV9ob3N0X2ludGVycnVwdF9yZWcpOwogCi0JLyogaHJycSB2YWxpZCBiaXQgd2FzIHNldCwgc2NoZWR1bGUgdGFza2xldCB0byBoYW5kbGUgdGhlIHJlc3BvbnNlICovCi0JaWYgKGludHJzX2NsZWFyID09IElOVFJTX0hSUlFfVkFMSUQpCi0JCXRhc2tsZXRfc2NoZWR1bGUoJihwaW5zdGFuY2UtPmlzcl90YXNrbGV0W2hycnFfaWRdKSk7CitzdGF0aWMgaXJxcmV0dXJuX3QgcG1jcmFpZF9pc3JfbXNpeChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHBtY3JhaWRfaXNyX3BhcmFtICpocnJxX3ZlY3RvcjsKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlOworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwl1MzIgaW50cnNfdmFsOworCWludCBocnJxX2lkOworCisJaHJycV92ZWN0b3IgPSAoc3RydWN0IHBtY3JhaWRfaXNyX3BhcmFtICopZGV2X2lkOworCWhycnFfaWQgPSBocnJxX3ZlY3Rvci0+aHJycV9pZDsKKwlwaW5zdGFuY2UgPSBocnJxX3ZlY3Rvci0+ZHJ2X2luc3Q7CisKKwlpZiAoIWhycnFfaWQpIHsKKwkJLyogUmVhZCB0aGUgaW50ZXJydXB0ICovCisJCWludHJzX3ZhbCA9IHBtY3JhaWRfcmVhZF9pbnRlcnJ1cHRzKHBpbnN0YW5jZSk7CisJCWlmIChpbnRyc192YWwgJiYKKwkJCSgoaW9yZWFkMzIocGluc3RhbmNlLT5pbnRfcmVncy5ob3N0X2lvYV9pbnRlcnJ1cHRfcmVnKQorCQkJJiBET09SQkVMTF9JTlRSX01TSVhfQ0xSKSA9PSAwKSkgeworCQkJLyogQW55IGVycm9yIGludGVycnVwdHMgaW5jbHVkaW5nIHVuaXRfY2hlY2ssCisJCQkgKiBpbml0aWF0ZSBJT0EgcmVzZXQuSW4gY2FzZSBvZiB1bml0IGNoZWNrIGluZGljYXRlCisJCQkgKiB0byByZXNldF9zZXF1ZW5jZSB0aGF0IElPQSB1bml0IGNoZWNrZWQgYW5kIHByZXBhcmUKKwkJCSAqIGZvciBhIGR1bXAgZHVyaW5nIHJlc2V0IHNlcXVlbmNlCisJCQkgKi8KKwkJCWlmIChpbnRyc192YWwgJiBQTUNSQUlEX0VSUk9SX0lOVEVSUlVQVFMpIHsKKwkJCQlpZiAoaW50cnNfdmFsICYgSU5UUlNfSU9BX1VOSVRfQ0hFQ0spCisJCQkJCXBpbnN0YW5jZS0+aW9hX3VuaXRfY2hlY2sgPSAxOworCisJCQkJcG1jcmFpZF9lcnIoIklTUjogZXJyb3IgaW50ZXJydXB0czogJXggXAorCQkJCQlpbml0aWF0aW5nIHJlc2V0XG4iLCBpbnRyc192YWwpOworCQkJCXNwaW5fbG9ja19pcnFzYXZlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLAorCQkJCQlsb2NrX2ZsYWdzKTsKKwkJCQlwbWNyYWlkX2luaXRpYXRlX3Jlc2V0KHBpbnN0YW5jZSk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgKKwkJCQkJcGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssCisJCQkJCWxvY2tfZmxhZ3MpOworCQkJfQorCQkJLyogSWYgaW50ZXJydXB0IHdhcyBhcyBwYXJ0IG9mIHRoZSBpb2EgaW5pdGlhbGl6YXRpb24sCisJCQkgKiBjbGVhciBpdC4gRGVsZXRlIHRoZSB0aW1lciBhbmQgd2FrZXVwIHRoZQorCQkJICogcmVzZXQgZW5naW5lIHRvIHByb2NlZWQgd2l0aCByZXNldCBzZXF1ZW5jZQorCQkJICovCisJCQlpZiAoaW50cnNfdmFsICYgSU5UUlNfVFJBTlNJVElPTl9UT19PUEVSQVRJT05BTCkKKwkJCQlwbWNyYWlkX2Nscl90cmFuc19vcChwaW5zdGFuY2UpOworCisJCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0IHJlZ2lzdGVyIGJ5IHdyaXRpbmcKKwkJCSAqIHRvIGhvc3QgdG8gaW9hIGRvb3JiZWxsLiBPbmNlIGRvbmUKKwkJCSAqIEZXIHdpbGwgY2xlYXIgdGhlIGludGVycnVwdC4KKwkJCSAqLworCQkJaW93cml0ZTMyKERPT1JCRUxMX0lOVFJfTVNJWF9DTFIsCisJCQkJcGluc3RhbmNlLT5pbnRfcmVncy5ob3N0X2lvYV9pbnRlcnJ1cHRfcmVnKTsKKwkJCWlvcmVhZDMyKHBpbnN0YW5jZS0+aW50X3JlZ3MuaG9zdF9pb2FfaW50ZXJydXB0X3JlZyk7CisKKworCQl9CisJfQorCisJdGFza2xldF9zY2hlZHVsZSgmKHBpbnN0YW5jZS0+aXNyX3Rhc2tsZXRbaHJycV9pZF0pKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogLyoqCi0gKiBwbWNyYWlkX2lzciAgLSBpbXBsZW1lbnRzIGludGVycnVwdCBoYW5kbGluZyByb3V0aW5lCisgKiBwbWNyYWlkX2lzciAgLSBpbXBsZW1lbnRzIGxlZ2FjeSBpbnRlcnJ1cHQgaGFuZGxpbmcgcm91dGluZQogICoKICAqIEBpcnE6IGludGVycnVwdCB2ZWN0b3IgbnVtYmVyCiAgKiBAZGV2X2lkOiBwb2ludGVyIGhycnFfdmVjdG9yCkBAIC00MDUyLDggKzQ0MDcsOSBAQAogewogCXN0cnVjdCBwbWNyYWlkX2lzcl9wYXJhbSAqaHJycV92ZWN0b3I7CiAJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZTsKLQl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CiAJdTMyIGludHJzOworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwlpbnQgaHJycV9pZCA9IDA7CiAKIAkvKiBJbiBjYXNlIG9mIGxlZ2FjeSBpbnRlcnJ1cHQgbW9kZSB3aGVyZSBpbnRlcnJ1cHRzIGFyZSBzaGFyZWQgYWNyb3NzCiAJICogaXNycywgaXQgbWF5IGJlIHBvc3NpYmxlIHRoYXQgdGhlIGN1cnJlbnQgaW50ZXJydXB0IGlzIG5vdCBmcm9tIElPQQpAQCAtNDA2MiwyMSArNDQxOCwxMyBAQAogCQlwcmludGsoS0VSTl9JTkZPICIlcygpOiBOVUxMIGhvc3QgcG9pbnRlclxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gSVJRX05PTkU7CiAJfQotCiAJaHJycV92ZWN0b3IgPSAoc3RydWN0IHBtY3JhaWRfaXNyX3BhcmFtICopZGV2X2lkOwogCXBpbnN0YW5jZSA9IGhycnFfdmVjdG9yLT5kcnZfaW5zdDsKIAotCS8qIEFjcXVpcmUgdGhlIGxvY2sgKGN1cnJlbnRseSBob3N0X2xvY2spIHdoaWxlIHByb2Nlc3NpbmcgaW50ZXJydXB0cy4KLQkgKiBUaGlzIGludGVydmFsIGlzIHNtYWxsIGFzIG1vc3Qgb2YgdGhlIHJlc3BvbnNlIHByb2Nlc3NpbmcgaXMgZG9uZSBieQotCSAqIHRhc2tsZXQgd2l0aG91dCB0aGUgbG9jay4KLQkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CiAJaW50cnMgPSBwbWNyYWlkX3JlYWRfaW50ZXJydXB0cyhwaW5zdGFuY2UpOwogCi0JaWYgKHVubGlrZWx5KChpbnRycyAmIFBNQ1JBSURfUENJX0lOVEVSUlVQVFMpID09IDApKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCWlmICh1bmxpa2VseSgoaW50cnMgJiBQTUNSQUlEX1BDSV9JTlRFUlJVUFRTKSA9PSAwKSkKIAkJcmV0dXJuIElSUV9OT05FOwotCX0KIAogCS8qIEFueSBlcnJvciBpbnRlcnJ1cHRzIGluY2x1ZGluZyB1bml0X2NoZWNrLCBpbml0aWF0ZSBJT0EgcmVzZXQuCiAJICogSW4gY2FzZSBvZiB1bml0IGNoZWNrIGluZGljYXRlIHRvIHJlc2V0X3NlcXVlbmNlIHRoYXQgSU9BIHVuaXQKQEAgLTQwOTEsMTMgKzQ0MzksMjggQEAKIAkJCSAgcGluc3RhbmNlLT5pbnRfcmVncy5pb2FfaG9zdF9pbnRlcnJ1cHRfY2xyX3JlZyk7CiAJCXBtY3JhaWRfZXJyKCJJU1I6IGVycm9yIGludGVycnVwdHM6ICV4IGluaXRpYXRpbmcgcmVzZXRcbiIsCiAJCQkgICAgaW50cnMpOwotCQlpbnRycyA9IGlvcmVhZDMyKHBpbnN0YW5jZS0+aW50X3JlZ3MuaW9hX2hvc3RfaW50ZXJydXB0X3JlZyk7CisJCWludHJzID0gaW9yZWFkMzIoCisJCQkJcGluc3RhbmNlLT5pbnRfcmVncy5pb2FfaG9zdF9pbnRlcnJ1cHRfY2xyX3JlZyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKIAkJcG1jcmFpZF9pbml0aWF0ZV9yZXNldChwaW5zdGFuY2UpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKIAl9IGVsc2UgewotCQlwbWNyYWlkX2lzcl9jb21tb24ocGluc3RhbmNlLCBpbnRycywgaHJycV92ZWN0b3ItPmhycnFfaWQpOwotCX0KKwkJLyogSWYgaW50ZXJydXB0IHdhcyBhcyBwYXJ0IG9mIHRoZSBpb2EgaW5pdGlhbGl6YXRpb24sCisJCSAqIGNsZWFyLiBEZWxldGUgdGhlIHRpbWVyIGFuZCB3YWtldXAgdGhlCisJCSAqIHJlc2V0IGVuZ2luZSB0byBwcm9jZWVkIHdpdGggcmVzZXQgc2VxdWVuY2UKKwkJICovCisJCWlmIChpbnRycyAmIElOVFJTX1RSQU5TSVRJT05fVE9fT1BFUkFUSU9OQUwpIHsKKwkJCXBtY3JhaWRfY2xyX3RyYW5zX29wKHBpbnN0YW5jZSk7CisJCX0gZWxzZSB7CisJCQlpb3dyaXRlMzIoaW50cnMsCisJCQkJcGluc3RhbmNlLT5pbnRfcmVncy5pb2FfaG9zdF9pbnRlcnJ1cHRfY2xyX3JlZyk7CisJCQlpb3JlYWQzMigKKwkJCQlwaW5zdGFuY2UtPmludF9yZWdzLmlvYV9ob3N0X2ludGVycnVwdF9jbHJfcmVnKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCQkJdGFza2xldF9zY2hlZHVsZSgKKwkJCQkJJihwaW5zdGFuY2UtPmlzcl90YXNrbGV0W2hycnFfaWRdKSk7CisJCX0KKwl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC00MTIwLDYgKzQ0ODMsNyBAQAogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBob3N0X2xvY2tfZmxhZ3M7CisJdTE2IGZ3X3ZlcnNpb247CiAJdTggYnVzLCB0YXJnZXQsIGx1bjsKIAogCXBpbnN0YW5jZSA9IGNvbnRhaW5lcl9vZih3b3JrcCwgc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UsIHdvcmtlcl9xKTsKQEAgLTQxMjcsNiArNDQ5MSw4IEBACiAJaWYgKCFhdG9taWNfcmVhZCgmcGluc3RhbmNlLT5leHBvc2VfcmVzb3VyY2VzKSkKIAkJcmV0dXJuOwogCisJZndfdmVyc2lvbiA9IGJlMTZfdG9fY3B1KHBpbnN0YW5jZS0+aW5xX2RhdGEtPmZ3X3ZlcnNpb24pOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBpbnN0YW5jZS0+cmVzb3VyY2VfbG9jaywgbG9ja19mbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcywgdGVtcCwgJnBpbnN0YW5jZS0+dXNlZF9yZXNfcSwgcXVldWUpIHsKIApAQCAtNDE2NiwxMiArNDUzMiwxNiBAQAogCiAJCWlmIChyZXMtPmNoYW5nZV9kZXRlY3RlZCA9PSBSRVNfQ0hBTkdFX0FERCkgewogCi0JCQlpZiAoIXBtY3JhaWRfZXhwb3NlX3Jlc291cmNlKCZyZXMtPmNmZ19lbnRyeSkpCisJCQlpZiAoIXBtY3JhaWRfZXhwb3NlX3Jlc291cmNlKGZ3X3ZlcnNpb24sCisJCQkJCQkgICAgICZyZXMtPmNmZ19lbnRyeSkpCiAJCQkJY29udGludWU7CiAKIAkJCWlmIChSRVNfSVNfVlNFVChyZXMtPmNmZ19lbnRyeSkpIHsKIAkJCQlidXMgPSBQTUNSQUlEX1ZTRVRfQlVTX0lEOwotCQkJCXRhcmdldCA9IHJlcy0+Y2ZnX2VudHJ5LnVuaXF1ZV9mbGFnczE7CisJCQkJaWYgKGZ3X3ZlcnNpb24gPD0gUE1DUkFJRF9GV19WRVJTSU9OXzEpCisJCQkJCXRhcmdldCA9IHJlcy0+Y2ZnX2VudHJ5LnVuaXF1ZV9mbGFnczE7CisJCQkJZWxzZQorCQkJCQl0YXJnZXQgPSByZXMtPmNmZ19lbnRyeS5hcnJheV9pZCAmIDB4RkY7CiAJCQkJbHVuID0gUE1DUkFJRF9WU0VUX0xVTl9JRDsKIAkJCX0gZWxzZSB7CiAJCQkJYnVzID0gUE1DUkFJRF9QSFlTX0JVU19JRDsKQEAgLTQyMDEsNyArNDU3MSw3IEBACiAgKiBSZXR1cm4gVmFsdWUKICAqCU5vbmUKICAqLwotdm9pZCBwbWNyYWlkX3Rhc2tsZXRfZnVuY3Rpb24odW5zaWduZWQgbG9uZyBpbnN0YW5jZSkKK3N0YXRpYyB2b2lkIHBtY3JhaWRfdGFza2xldF9mdW5jdGlvbih1bnNpZ25lZCBsb25nIGluc3RhbmNlKQogewogCXN0cnVjdCBwbWNyYWlkX2lzcl9wYXJhbSAqaHJycV92ZWN0b3I7CiAJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZTsKQEAgLTQyMTAsMzUgKzQ1ODAsMTIgQEAKIAl1bnNpZ25lZCBsb25nIGhvc3RfbG9ja19mbGFnczsKIAlzcGlubG9ja190ICpsb2NrcDsgLyogaHJycSBidWZmZXIgbG9jayAqLwogCWludCBpZDsKLQl1MzIgaW50cnM7CiAJX19sZTMyIHJlc3A7CiAKIAlocnJxX3ZlY3RvciA9IChzdHJ1Y3QgcG1jcmFpZF9pc3JfcGFyYW0gKilpbnN0YW5jZTsKIAlwaW5zdGFuY2UgPSBocnJxX3ZlY3Rvci0+ZHJ2X2luc3Q7CiAJaWQgPSBocnJxX3ZlY3Rvci0+aHJycV9pZDsKIAlsb2NrcCA9ICYocGluc3RhbmNlLT5ocnJxX2xvY2tbaWRdKTsKLQlpbnRycyA9IHBtY3JhaWRfcmVhZF9pbnRlcnJ1cHRzKHBpbnN0YW5jZSk7Ci0KLQkvKiBJZiBpbnRlcnJ1cHRzIHdhcyBhcyBwYXJ0IG9mIHRoZSBpb2EgaW5pdGlhbGl6YXRpb24sIGNsZWFyIGFuZCBtYXNrCi0JICogaXQuIERlbGV0ZSB0aGUgdGltZXIgYW5kIHdha2V1cCB0aGUgcmVzZXQgZW5naW5lIHRvIHByb2NlZWQgd2l0aAotCSAqIHJlc2V0IHNlcXVlbmNlCi0JICovCi0JaWYgKGludHJzICYgSU5UUlNfVFJBTlNJVElPTl9UT19PUEVSQVRJT05BTCkgewotCQlpb3dyaXRlMzIoSU5UUlNfVFJBTlNJVElPTl9UT19PUEVSQVRJT05BTCwKLQkJCXBpbnN0YW5jZS0+aW50X3JlZ3MuaW9hX2hvc3RfaW50ZXJydXB0X21hc2tfcmVnKTsKLQkJaW93cml0ZTMyKElOVFJTX1RSQU5TSVRJT05fVE9fT1BFUkFUSU9OQUwsCi0JCQlwaW5zdGFuY2UtPmludF9yZWdzLmlvYV9ob3N0X2ludGVycnVwdF9jbHJfcmVnKTsKLQotCQlpZiAocGluc3RhbmNlLT5yZXNldF9jbWQgIT0gTlVMTCkgewotCQkJZGVsX3RpbWVyKCZwaW5zdGFuY2UtPnJlc2V0X2NtZC0+dGltZXIpOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssCi0JCQkJCSAgaG9zdF9sb2NrX2ZsYWdzKTsKLQkJCXBpbnN0YW5jZS0+cmVzZXRfY21kLT5jbWRfZG9uZShwaW5zdGFuY2UtPnJlc2V0X2NtZCk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLAotCQkJCQkgICAgICAgaG9zdF9sb2NrX2ZsYWdzKTsKLQkJfQotCQlyZXR1cm47Ci0JfQogCiAJLyogbG9vcCB0aHJvdWdoIGVhY2ggb2YgdGhlIGNvbW1hbmRzIHJlc3BvbmRlZCBieSBJT0EuIEVhY2ggSFJSUSBidWYgaXMKIAkgKiBwcm90ZWN0ZWQgYnkgaXRzIG93biBsb2NrLiBUcmF2ZXJzYWxzIG11c3QgYmUgZG9uZSB3aXRoaW4gdGhpcyBsb2NrCkBAIC00MjU2LDI3ICs0NjAzLDYgQEAKIAkJaW50IGNtZF9pbmRleCA9IHJlc3AgPj4gMjsKIAkJc3RydWN0IHBtY3JhaWRfY21kICpjbWQgPSBOVUxMOwogCi0JCWlmIChjbWRfaW5kZXggPCBQTUNSQUlEX01BWF9DTUQpIHsKLQkJCWNtZCA9IHBpbnN0YW5jZS0+Y21kX2xpc3RbY21kX2luZGV4XTsKLQkJfSBlbHNlIHsKLQkJCS8qIEluIGNhc2Ugb2YgaW52YWxpZCByZXNwb25zZSBoYW5kbGUsIGluaXRpYXRlIElPQQotCQkJICogcmVzZXQgc2VxdWVuY2UuCi0JCQkgKi8KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9ja3AsIGhycnFfbG9ja19mbGFncyk7Ci0KLQkJCXBtY3JhaWRfZXJyKCJJbnZhbGlkIHJlc3BvbnNlICVkIGluaXRpYXRpbmcgcmVzZXRcbiIsCi0JCQkJICAgIGNtZF9pbmRleCk7Ci0KLQkJCXNwaW5fbG9ja19pcnFzYXZlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLAotCQkJCQkgIGhvc3RfbG9ja19mbGFncyk7Ci0JCQlwbWNyYWlkX2luaXRpYXRlX3Jlc2V0KHBpbnN0YW5jZSk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLAotCQkJCQkgICAgICAgaG9zdF9sb2NrX2ZsYWdzKTsKLQotCQkJc3Bpbl9sb2NrX2lycXNhdmUobG9ja3AsIGhycnFfbG9ja19mbGFncyk7Ci0JCQlicmVhazsKLQkJfQotCiAJCWlmIChwaW5zdGFuY2UtPmhycnFfY3VycltpZF0gPCBwaW5zdGFuY2UtPmhycnFfZW5kW2lkXSkgewogCQkJcGluc3RhbmNlLT5ocnJxX2N1cnJbaWRdKys7CiAJCX0gZWxzZSB7CkBAIC00Mjg0LDYgKzQ2MTAsMTQgQEAKIAkJCXBpbnN0YW5jZS0+aG9zdF90b2dnbGVfYml0W2lkXSBePSAxdTsKIAkJfQogCisJCWlmIChjbWRfaW5kZXggPj0gUE1DUkFJRF9NQVhfQ01EKSB7CisJCQkvKiBJbiBjYXNlIG9mIGludmFsaWQgcmVzcG9uc2UgaGFuZGxlLCBsb2cgbWVzc2FnZSAqLworCQkJcG1jcmFpZF9lcnIoIkludmFsaWQgcmVzcG9uc2UgaGFuZGxlICVkXG4iLCBjbWRfaW5kZXgpOworCQkJcmVzcCA9IGxlMzJfdG9fY3B1KCoocGluc3RhbmNlLT5ocnJxX2N1cnJbaWRdKSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWNtZCA9IHBpbnN0YW5jZS0+Y21kX2xpc3RbY21kX2luZGV4XTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrcCwgaHJycV9sb2NrX2ZsYWdzKTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGluc3RhbmNlLT5wZW5kaW5nX3Bvb2xfbG9jaywKQEAgLTQzMjQsNyArNDY1OCwxNiBAQAogc3RhdGljCiB2b2lkIHBtY3JhaWRfdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfaGFuZGxlcihzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlKQogewotCWZyZWVfaXJxKHBpbnN0YW5jZS0+cGRldi0+aXJxLCAmKHBpbnN0YW5jZS0+aHJycV92ZWN0b3JbMF0pKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwaW5zdGFuY2UtPm51bV9ocnJxOyBpKyspCisJCWZyZWVfaXJxKHBpbnN0YW5jZS0+aHJycV92ZWN0b3JbaV0udmVjdG9yLAorCQkJICYocGluc3RhbmNlLT5ocnJxX3ZlY3RvcltpXSkpOworCisJaWYgKHBpbnN0YW5jZS0+aW50ZXJydXB0X21vZGUpIHsKKwkJcGNpX2Rpc2FibGVfbXNpeChwaW5zdGFuY2UtPnBkZXYpOworCQlwaW5zdGFuY2UtPmludGVycnVwdF9tb2RlID0gMDsKKwl9CiB9CiAKIC8qKgpAQCAtNDMzNywxNCArNDY4MCw3MCBAQAogc3RhdGljIGludAogcG1jcmFpZF9yZWdpc3Rlcl9pbnRlcnJ1cHRfaGFuZGxlcihzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlKQogeworCWludCByYzsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHBpbnN0YW5jZS0+cGRldjsKIAorCWlmIChwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfTVNJWCkpIHsKKwkJaW50IG51bV9ocnJxID0gUE1DUkFJRF9OVU1fTVNJWF9WRUNUT1JTOworCQlzdHJ1Y3QgbXNpeF9lbnRyeSBlbnRyaWVzW1BNQ1JBSURfTlVNX01TSVhfVkVDVE9SU107CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgUE1DUkFJRF9OVU1fTVNJWF9WRUNUT1JTOyBpKyspCisJCQllbnRyaWVzW2ldLmVudHJ5ID0gaTsKKworCQlyYyA9IHBjaV9lbmFibGVfbXNpeChwZGV2LCBlbnRyaWVzLCBudW1faHJycSk7CisJCWlmIChyYyA8IDApCisJCQlnb3RvIHBtY3JhaWRfaXNyX2xlZ2FjeTsKKworCQkvKiBDaGVjayBob3cgbWFueSBNU0lYIHZlY3RvcnMgYXJlIGFsbG9jYXRlZCBhbmQgcmVnaXN0ZXIKKwkJICogbXNpLXggaGFuZGxlcnMgZm9yIGVhY2ggb2YgdGhlbSBnaXZpbmcgYXBwcm9wcmlhdGUgYnVmZmVyCisJCSAqLworCQlpZiAocmMgPiAwKSB7CisJCQludW1faHJycSA9IHJjOworCQkJaWYgKHBjaV9lbmFibGVfbXNpeChwZGV2LCBlbnRyaWVzLCBudW1faHJycSkpCisJCQkJZ290byBwbWNyYWlkX2lzcl9sZWdhY3k7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2hycnE7IGkrKykgeworCQkJcGluc3RhbmNlLT5ocnJxX3ZlY3RvcltpXS5ocnJxX2lkID0gaTsKKwkJCXBpbnN0YW5jZS0+aHJycV92ZWN0b3JbaV0uZHJ2X2luc3QgPSBwaW5zdGFuY2U7CisJCQlwaW5zdGFuY2UtPmhycnFfdmVjdG9yW2ldLnZlY3RvciA9IGVudHJpZXNbaV0udmVjdG9yOworCQkJcmMgPSByZXF1ZXN0X2lycShwaW5zdGFuY2UtPmhycnFfdmVjdG9yW2ldLnZlY3RvciwKKwkJCQkJcG1jcmFpZF9pc3JfbXNpeCwgMCwKKwkJCQkJUE1DUkFJRF9EUklWRVJfTkFNRSwKKwkJCQkJJihwaW5zdGFuY2UtPmhycnFfdmVjdG9yW2ldKSk7CisKKwkJCWlmIChyYykgeworCQkJCWludCBqOworCQkJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCisJCQkJCWZyZWVfaXJxKGVudHJpZXNbal0udmVjdG9yLAorCQkJCQkJICYocGluc3RhbmNlLT5ocnJxX3ZlY3RvcltqXSkpOworCQkJCXBjaV9kaXNhYmxlX21zaXgocGRldik7CisJCQkJZ290byBwbWNyYWlkX2lzcl9sZWdhY3k7CisJCQl9CisJCX0KKworCQlwaW5zdGFuY2UtPm51bV9ocnJxID0gbnVtX2hycnE7CisJCXBpbnN0YW5jZS0+aW50ZXJydXB0X21vZGUgPSAxOworCQlpb3dyaXRlMzIoRE9PUkJFTExfSU5UUl9NT0RFX01TSVgsCisJCQkgIHBpbnN0YW5jZS0+aW50X3JlZ3MuaG9zdF9pb2FfaW50ZXJydXB0X3JlZyk7CisJCWlvcmVhZDMyKHBpbnN0YW5jZS0+aW50X3JlZ3MuaG9zdF9pb2FfaW50ZXJydXB0X3JlZyk7CisJCWdvdG8gcG1jcmFpZF9pc3Jfb3V0OworCX0KKworcG1jcmFpZF9pc3JfbGVnYWN5OgorCS8qIElmIE1TSS1YIHJlZ2lzdHJhdGlvbiBmYWlsZWQgZmFsbGJhY2sgdG8gbGVnYWN5IG1vZGUsIHdoZXJlCisJICogb25seSBvbmUgaHJycSBlbnRyeSB3aWxsIGJlIHVzZWQKKwkgKi8KIAlwaW5zdGFuY2UtPmhycnFfdmVjdG9yWzBdLmhycnFfaWQgPSAwOwogCXBpbnN0YW5jZS0+aHJycV92ZWN0b3JbMF0uZHJ2X2luc3QgPSBwaW5zdGFuY2U7Ci0JcGluc3RhbmNlLT5ocnJxX3ZlY3RvclswXS52ZWN0b3IgPSAwOworCXBpbnN0YW5jZS0+aHJycV92ZWN0b3JbMF0udmVjdG9yID0gcGRldi0+aXJxOwogCXBpbnN0YW5jZS0+bnVtX2hycnEgPSAxOwotCXJldHVybiByZXF1ZXN0X2lycShwZGV2LT5pcnEsIHBtY3JhaWRfaXNyLCBJUlFGX1NIQVJFRCwKLQkJCSAgIFBNQ1JBSURfRFJJVkVSX05BTUUsICZwaW5zdGFuY2UtPmhycnFfdmVjdG9yWzBdKTsKKwlyYyA9IDA7CisKKwlyYyA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgcG1jcmFpZF9pc3IsIElSUUZfU0hBUkVELAorCQkJIFBNQ1JBSURfRFJJVkVSX05BTUUsICZwaW5zdGFuY2UtPmhycnFfdmVjdG9yWzBdKTsKK3BtY3JhaWRfaXNyX291dDoKKwlyZXR1cm4gcmM7CiB9CiAKIC8qKgpAQCAtNDUxNiwxMiArNDkxNSwxMSBAQAogc3RhdGljIGludCBfX2RldmluaXQKIHBtY3JhaWRfYWxsb2NhdGVfaG9zdF9ycnFzKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCiB7Ci0JaW50IGk7Ci0JaW50IGJ1Zl9jb3VudCA9IFBNQ1JBSURfTUFYX0NNRCAvIHBpbnN0YW5jZS0+bnVtX2hycnE7CisJaW50IGksIGJ1ZmZlcl9zaXplOworCisJYnVmZmVyX3NpemUgPSBIUlJRX0VOVFJZX1NJWkUgKiBQTUNSQUlEX01BWF9DTUQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcGluc3RhbmNlLT5udW1faHJycTsgaSsrKSB7Ci0JCWludCBidWZmZXJfc2l6ZSA9IEhSUlFfRU5UUllfU0laRSAqIGJ1Zl9jb3VudDsKLQogCQlwaW5zdGFuY2UtPmhycnFfc3RhcnRbaV0gPQogCQkJcGNpX2FsbG9jX2NvbnNpc3RlbnQoCiAJCQkJCXBpbnN0YW5jZS0+cGRldiwKQEAgLTQ1MjksNyArNDkyNyw4IEBACiAJCQkJCSYocGluc3RhbmNlLT5ocnJxX3N0YXJ0X2J1c19hZGRyW2ldKSk7CiAKIAkJaWYgKHBpbnN0YW5jZS0+aHJycV9zdGFydFtpXSA9PSAwKSB7Ci0JCQlwbWNyYWlkX2VycigiY291bGQgbm90IGFsbG9jYXRlIGhvc3QgcnJxOiAlZFxuIiwgaSk7CisJCQlwbWNyYWlkX2VycigicGNpX2FsbG9jIGZhaWxlZCBmb3IgaHJycSB2ZWN0b3IgOiAlZFxuIiwKKwkJCQkgICAgaSk7CiAJCQlwbWNyYWlkX3JlbGVhc2VfaG9zdF9ycnFzKHBpbnN0YW5jZSwgaSk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQpAQCAtNDUzNyw3ICs0OTM2LDcgQEAKIAkJbWVtc2V0KHBpbnN0YW5jZS0+aHJycV9zdGFydFtpXSwgMCwgYnVmZmVyX3NpemUpOwogCQlwaW5zdGFuY2UtPmhycnFfY3VycltpXSA9IHBpbnN0YW5jZS0+aHJycV9zdGFydFtpXTsKIAkJcGluc3RhbmNlLT5ocnJxX2VuZFtpXSA9Ci0JCQlwaW5zdGFuY2UtPmhycnFfc3RhcnRbaV0gKyBidWZfY291bnQgLSAxOworCQkJcGluc3RhbmNlLT5ocnJxX3N0YXJ0W2ldICsgUE1DUkFJRF9NQVhfQ01EIC0gMTsKIAkJcGluc3RhbmNlLT5ob3N0X3RvZ2dsZV9iaXRbaV0gPSAxOwogCQlzcGluX2xvY2tfaW5pdCgmcGluc3RhbmNlLT5ocnJxX2xvY2tbaV0pOwogCX0KQEAgLTQ1NTcsNyArNDk1Niw3IEBACiAJaWYgKHBpbnN0YW5jZS0+Y2NuLm1zZyAhPSBOVUxMKSB7CiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQocGluc3RhbmNlLT5wZGV2LAogCQkJCSAgICBQTUNSQUlEX0FFTl9IRFJfU0laRSArCi0JCQkJICAgIHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9oY2FtX2NjbiksCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9oY2FtX2Njbl9leHQpLAogCQkJCSAgICBwaW5zdGFuY2UtPmNjbi5tc2csCiAJCQkJICAgIHBpbnN0YW5jZS0+Y2NuLmJhZGRyKTsKIApAQCAtNDU5MSw3ICs0OTkwLDcgQEAKIAlwaW5zdGFuY2UtPmNjbi5tc2cgPSBwY2lfYWxsb2NfY29uc2lzdGVudCgKIAkJCQkJcGluc3RhbmNlLT5wZGV2LAogCQkJCQlQTUNSQUlEX0FFTl9IRFJfU0laRSArCi0JCQkJCXNpemVvZihzdHJ1Y3QgcG1jcmFpZF9oY2FtX2NjbiksCisJCQkJCXNpemVvZihzdHJ1Y3QgcG1jcmFpZF9oY2FtX2Njbl9leHQpLAogCQkJCQkmKHBpbnN0YW5jZS0+Y2NuLmJhZGRyKSk7CiAKIAlwaW5zdGFuY2UtPmxkbi5tc2cgPSBwY2lfYWxsb2NfY29uc2lzdGVudCgKQEAgLTQ3MjQsNiArNTEyMywzMiBAQAogfQogCiAvKioKKyAqIHBtY3JhaWRfcmVsZWFzZV9idWZmZXJzIC0gcmVsZWFzZSBwZXItYWRhcHRlciBidWZmZXJzIGFsbG9jYXRlZAorICoKKyAqIEBwaW5zdGFuY2U6IHBvaW50ZXIgdG8gYWRhcHRlciBzb2Z0IHN0YXRlCisgKgorICogUmV0dXJuIFZhbHVlCisgKglub25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfcmVsZWFzZV9idWZmZXJzKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCit7CisJcG1jcmFpZF9yZWxlYXNlX2NvbmZpZ19idWZmZXJzKHBpbnN0YW5jZSk7CisJcG1jcmFpZF9yZWxlYXNlX2NvbnRyb2xfYmxvY2tzKHBpbnN0YW5jZSwgUE1DUkFJRF9NQVhfQ01EKTsKKwlwbWNyYWlkX3JlbGVhc2VfY21kX2Jsb2NrcyhwaW5zdGFuY2UsIFBNQ1JBSURfTUFYX0NNRCk7CisJcG1jcmFpZF9yZWxlYXNlX2hvc3RfcnJxcyhwaW5zdGFuY2UsIHBpbnN0YW5jZS0+bnVtX2hycnEpOworCisJaWYgKHBpbnN0YW5jZS0+aW5xX2RhdGEgIT0gTlVMTCkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBpbnN0YW5jZS0+cGRldiwKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2lucXVpcnlfZGF0YSksCisJCQkJICAgIHBpbnN0YW5jZS0+aW5xX2RhdGEsCisJCQkJICAgIHBpbnN0YW5jZS0+aW5xX2RhdGFfYmFkZHIpOworCisJCXBpbnN0YW5jZS0+aW5xX2RhdGEgPSBOVUxMOworCQlwaW5zdGFuY2UtPmlucV9kYXRhX2JhZGRyID0gMDsKKwl9Cit9CisKKy8qKgogICogcG1jcmFpZF9pbml0X2J1ZmZlcnMgLSBhbGxvY2F0ZXMgbWVtb3J5IGFuZCBpbml0aWFsaXplcyB2YXJpb3VzIHN0cnVjdHVyZXMKICAqIEBwaW5zdGFuY2U6IHBvaW50ZXIgdG8gcGVyIGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCiAgKgpAQCAtNDc1MywyMCArNTE3OCwzMiBAQAogCX0KIAogCWlmIChwbWNyYWlkX2FsbG9jYXRlX2NtZF9ibG9ja3MocGluc3RhbmNlKSkgewotCQlwbWNyYWlkX2VycigiY291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBjbWQgYmxvY2tzIFxuIik7CisJCXBtY3JhaWRfZXJyKCJjb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNtZCBibG9ja3NcbiIpOwogCQlwbWNyYWlkX3JlbGVhc2VfY29uZmlnX2J1ZmZlcnMocGluc3RhbmNlKTsKIAkJcG1jcmFpZF9yZWxlYXNlX2hvc3RfcnJxcyhwaW5zdGFuY2UsIHBpbnN0YW5jZS0+bnVtX2hycnEpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlpZiAocG1jcmFpZF9hbGxvY2F0ZV9jb250cm9sX2Jsb2NrcyhwaW5zdGFuY2UpKSB7Ci0JCXBtY3JhaWRfZXJyKCJjb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgY29udHJvbCBibG9ja3MgXG4iKTsKKwkJcG1jcmFpZF9lcnIoImNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBjb250cm9sIGJsb2Nrc1xuIik7CiAJCXBtY3JhaWRfcmVsZWFzZV9jb25maWdfYnVmZmVycyhwaW5zdGFuY2UpOwogCQlwbWNyYWlkX3JlbGVhc2VfY21kX2Jsb2NrcyhwaW5zdGFuY2UsIFBNQ1JBSURfTUFYX0NNRCk7CiAJCXBtY3JhaWRfcmVsZWFzZV9ob3N0X3JycXMocGluc3RhbmNlLCBwaW5zdGFuY2UtPm51bV9ocnJxKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJLyogYWxsb2NhdGUgRE1BYWJsZSBtZW1vcnkgZm9yIHBhZ2UgRDAgSU5RVUlSWSBidWZmZXIgKi8KKwlwaW5zdGFuY2UtPmlucV9kYXRhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoCisJCQkJCXBpbnN0YW5jZS0+cGRldiwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2lucXVpcnlfZGF0YSksCisJCQkJCSZwaW5zdGFuY2UtPmlucV9kYXRhX2JhZGRyKTsKKworCWlmIChwaW5zdGFuY2UtPmlucV9kYXRhID09IE5VTEwpIHsKKwkJcG1jcmFpZF9lcnIoImNvdWxkbid0IGFsbG9jYXRlIERNQSBtZW1vcnkgZm9yIElOUVVJUllcbiIpOworCQlwbWNyYWlkX3JlbGVhc2VfYnVmZmVycyhwaW5zdGFuY2UpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKIAkvKiBJbml0aWFsaXplIGFsbCB0aGUgY29tbWFuZCBibG9ja3MgYW5kIGFkZCB0aGVtIHRvIGZyZWUgcG9vbC4gTm8KIAkgKiBuZWVkIHRvIGxvY2sgKGZyZWVfcG9vbF9sb2NrKSBhcyB0aGlzIGlzIGRvbmUgaW4gaW5pdGlhbGl6YXRpb24KIAkgKiBpdHNlbGYKQEAgLTQ3ODUsNyArNTIyMiw3IEBACiAgKiBwbWNyYWlkX3JlaW5pdF9idWZmZXJzIC0gcmVzZXRzIHZhcmlvdXMgYnVmZmVyIHBvaW50ZXJzCiAgKiBAcGluc3RhbmNlOiBwb2ludGVyIHRvIGFkYXB0ZXIgaW5zdGFuY2UKICAqIFJldHVybiB2YWx1ZQotICogCW5vbmUKKyAqCW5vbmUKICAqLwogc3RhdGljIHZvaWQgcG1jcmFpZF9yZWluaXRfYnVmZmVycyhzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlKQogewpAQCAtNDgzNiw2ICs1MjczLDggQEAKIAkJCW1hcHBlZF9wY2lfYWRkciArIGNoaXBfY2ZnLT5pb2FfaG9zdF9pbnRyOwogCQlwaW50X3JlZ3MtPmlvYV9ob3N0X2ludGVycnVwdF9jbHJfcmVnID0KIAkJCW1hcHBlZF9wY2lfYWRkciArIGNoaXBfY2ZnLT5pb2FfaG9zdF9pbnRyX2NscjsKKwkJcGludF9yZWdzLT5pb2FfaG9zdF9tc2l4X2ludGVycnVwdF9yZWcgPQorCQkJbWFwcGVkX3BjaV9hZGRyICsgY2hpcF9jZmctPmlvYV9ob3N0X21zaXhfaW50cjsKIAkJcGludF9yZWdzLT5ob3N0X2lvYV9pbnRlcnJ1cHRfcmVnID0KIAkJCW1hcHBlZF9wY2lfYWRkciArIGNoaXBfY2ZnLT5ob3N0X2lvYV9pbnRyOwogCQlwaW50X3JlZ3MtPmhvc3RfaW9hX2ludGVycnVwdF9jbHJfcmVnID0KQEAgLTQ4NTgsNiArNTI5Nyw3IEBACiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcGluc3RhbmNlLT5yZXNldF93YWl0X3EpOwogCiAJYXRvbWljX3NldCgmcGluc3RhbmNlLT5vdXRzdGFuZGluZ19jbWRzLCAwKTsKKwlhdG9taWNfc2V0KCZwaW5zdGFuY2UtPmxhc3RfbWVzc2FnZV9pZCwgMCk7CiAJYXRvbWljX3NldCgmcGluc3RhbmNlLT5leHBvc2VfcmVzb3VyY2VzLCAwKTsKIAogCUlOSVRfTElTVF9IRUFEKCZwaW5zdGFuY2UtPmZyZWVfcmVzX3EpOwpAQCAtNDg4MywyMyArNTMyMyw2IEBACiB9CiAKIC8qKgotICogcG1jcmFpZF9yZWxlYXNlX2J1ZmZlcnMgLSByZWxlYXNlIHBlci1hZGFwdGVyIGJ1ZmZlcnMgYWxsb2NhdGVkCi0gKgotICogQHBpbnN0YW5jZTogcG9pbnRlciB0byBhZGFwdGVyIHNvZnQgc3RhdGUKLSAqCi0gKiBSZXR1cm4gVmFsdWUKLSAqIAlub25lCi0gKi8KLXN0YXRpYyB2b2lkIHBtY3JhaWRfcmVsZWFzZV9idWZmZXJzKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCi17Ci0JcG1jcmFpZF9yZWxlYXNlX2NvbmZpZ19idWZmZXJzKHBpbnN0YW5jZSk7Ci0JcG1jcmFpZF9yZWxlYXNlX2NvbnRyb2xfYmxvY2tzKHBpbnN0YW5jZSwgUE1DUkFJRF9NQVhfQ01EKTsKLQlwbWNyYWlkX3JlbGVhc2VfY21kX2Jsb2NrcyhwaW5zdGFuY2UsIFBNQ1JBSURfTUFYX0NNRCk7Ci0JcG1jcmFpZF9yZWxlYXNlX2hvc3RfcnJxcyhwaW5zdGFuY2UsIHBpbnN0YW5jZS0+bnVtX2hycnEpOwotCi19Ci0KLS8qKgogICogcG1jcmFpZF9zaHV0ZG93biAtIHNodXRkb3duIGFkYXB0ZXIgY29udHJvbGxlci4KICAqIEBwZGV2OiBwY2kgZGV2aWNlIHN0cnVjdAogICoKQEAgLTQ5NTgsNyArNTM4MSw3IEBACiAJCXBtY3JhaWRfcmVsZWFzZV9taW5vcihtaW5vcik7CiAJZWxzZQogCQlkZXZpY2VfY3JlYXRlKHBtY3JhaWRfY2xhc3MsIE5VTEwsIE1LREVWKHBtY3JhaWRfbWFqb3IsIG1pbm9yKSwKLQkJCSAgICAgIE5VTEwsICJwbWNzYXMldSIsIG1pbm9yKTsKKwkJCSAgICAgIE5VTEwsICIlcyV1IiwgUE1DUkFJRF9ERVZGSUxFLCBtaW5vcik7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC01MDUwLDcgKzU0NzMsNiBAQAogCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IHBpbnN0YW5jZS0+aG9zdDsKIAlpbnQgcmM7Ci0JaW50IGhycnFzOwogCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOwogCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDAsIDApOwpAQCAtNTA3Nyw4ICs1NDk5LDggQEAKIAkJZ290byBkaXNhYmxlX2RldmljZTsKIAl9CiAKKwlwbWNyYWlkX2Rpc2FibGVfaW50ZXJydXB0cyhwaW5zdGFuY2UsIH4wKTsKIAlhdG9taWNfc2V0KCZwaW5zdGFuY2UtPm91dHN0YW5kaW5nX2NtZHMsIDApOwotCWhycnFzID0gcGluc3RhbmNlLT5udW1faHJycTsKIAlyYyA9IHBtY3JhaWRfcmVnaXN0ZXJfaW50ZXJydXB0X2hhbmRsZXIocGluc3RhbmNlKTsKIAogCWlmIChyYykgewpAQCAtNTEwMCw3ICs1NTIyLDcgQEAKIAkgKiBzdGF0ZS4KIAkgKi8KIAlpZiAocG1jcmFpZF9yZXNldF9icmluZ3VwKHBpbnN0YW5jZSkpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGRuJ3QgaW5pdGlhbGl6ZSBJT0EgXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGRuJ3QgaW5pdGlhbGl6ZSBJT0FcbiIpOwogCQlyYyA9IC1FTk9ERVY7CiAJCWdvdG8gcmVsZWFzZV90YXNrbGV0czsKIAl9CkBAIC01MTA4LDYgKzU1MzAsNyBAQAogCXJldHVybiAwOwogCiByZWxlYXNlX3Rhc2tsZXRzOgorCXBtY3JhaWRfZGlzYWJsZV9pbnRlcnJ1cHRzKHBpbnN0YW5jZSwgfjApOwogCXBtY3JhaWRfa2lsbF90YXNrbGV0cyhwaW5zdGFuY2UpOwogCXBtY3JhaWRfdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfaGFuZGxlcihwaW5zdGFuY2UpOwogCkBAIC01MTI5LDcgKzU1NTIsNyBAQAogCiAvKioKICAqIHBtY3JhaWRfY29tcGxldGVfaW9hX3Jlc2V0IC0gQ2FsbGVkIGJ5IGVpdGhlciB0aW1lciBvciB0YXNrbGV0IGR1cmluZwotICogCSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb24gb2YgdGhlIGlvYSByZXNldAorICoJCQkJY29tcGxldGlvbiBvZiB0aGUgaW9hIHJlc2V0CiAgKiBAY21kOiBwb2ludGVyIHRvIHJlc2V0IGNvbW1hbmQgYmxvY2sKICAqLwogc3RhdGljIHZvaWQgcG1jcmFpZF9jb21wbGV0ZV9pb2FfcmVzZXQoc3RydWN0IHBtY3JhaWRfY21kICpjbWQpCkBAIC01MjA0LDExICs1NjI3LDE0IEBACiAJc3RydWN0IHBtY3JhaWRfY29uZmlnX3RhYmxlX2VudHJ5ICpjZmd0ZTsKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CiAJaW50IGZvdW5kLCByYywgaTsKKwl1MTYgZndfdmVyc2lvbjsKIAlMSVNUX0hFQUQob2xkX3Jlcyk7CiAKIAlpZiAocGluc3RhbmNlLT5jZmdfdGFibGUtPmZsYWdzICYgTUlDUk9DT0RFX1VQREFURV9SRVFVSVJFRCkKIAkJcG1jcmFpZF9lcnIoIklPQSByZXF1aXJlcyBtaWNyb2NvZGUgZG93bmxvYWRcbiIpOwogCisJZndfdmVyc2lvbiA9IGJlMTZfdG9fY3B1KHBpbnN0YW5jZS0+aW5xX2RhdGEtPmZ3X3ZlcnNpb24pOworCiAJLyogcmVzb3VyY2UgbGlzdCBpcyBwcm90ZWN0ZWQgYnkgcGluc3RhbmNlLT5yZXNvdXJjZV9sb2NrLgogCSAqIGluaXRfcmVzX3RhYmxlIGNhbiBiZSBjYWxsZWQgZnJvbSBwcm9iZSAodXNlci10aHJlYWQpIG9yIHJ1bnRpbWUKIAkgKiByZXNldCAodGltZXIvdGFza2xldCkKQEAgLTUyMTksOSArNTY0NSwxNCBAQAogCQlsaXN0X21vdmVfdGFpbCgmcmVzLT5xdWV1ZSwgJm9sZF9yZXMpOwogCiAJZm9yIChpID0gMDsgaSA8IHBpbnN0YW5jZS0+Y2ZnX3RhYmxlLT5udW1fZW50cmllczsgaSsrKSB7Ci0JCWNmZ3RlID0gJnBpbnN0YW5jZS0+Y2ZnX3RhYmxlLT5lbnRyaWVzW2ldOworCQlpZiAoYmUxNl90b19jcHUocGluc3RhbmNlLT5pbnFfZGF0YS0+ZndfdmVyc2lvbikgPD0KKwkJCQkJCVBNQ1JBSURfRldfVkVSU0lPTl8xKQorCQkJY2ZndGUgPSAmcGluc3RhbmNlLT5jZmdfdGFibGUtPmVudHJpZXNbaV07CisJCWVsc2UKKwkJCWNmZ3RlID0gKHN0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZV9lbnRyeSAqKQorCQkJCQkmcGluc3RhbmNlLT5jZmdfdGFibGUtPmVudHJpZXNfZXh0W2ldOwogCi0JCWlmICghcG1jcmFpZF9leHBvc2VfcmVzb3VyY2UoY2ZndGUpKQorCQlpZiAoIXBtY3JhaWRfZXhwb3NlX3Jlc291cmNlKGZ3X3ZlcnNpb24sIGNmZ3RlKSkKIAkJCWNvbnRpbnVlOwogCiAJCWZvdW5kID0gMDsKQEAgLTUyNjMsMTAgKzU2OTQsMTIgQEAKIAkJICovCiAJCWlmIChmb3VuZCkgewogCQkJbWVtY3B5KCZyZXMtPmNmZ19lbnRyeSwgY2ZndGUsCi0JCQkJc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZV9lbnRyeSkpOworCQkJCQlwaW5zdGFuY2UtPmNvbmZpZ190YWJsZV9lbnRyeV9zaXplKTsKIAkJCXBtY3JhaWRfaW5mbygiTmV3IHJlcyB0eXBlOiV4LCB2c2V0OiV4LCBhZGRyOiV4OlxuIiwKIAkJCQkgcmVzLT5jZmdfZW50cnkucmVzb3VyY2VfdHlwZSwKLQkJCQkgcmVzLT5jZmdfZW50cnkudW5pcXVlX2ZsYWdzMSwKKwkJCQkgKGZ3X3ZlcnNpb24gPD0gUE1DUkFJRF9GV19WRVJTSU9OXzEgPworCQkJCQlyZXMtPmNmZ19lbnRyeS51bmlxdWVfZmxhZ3MxIDoKKwkJCQkJCXJlcy0+Y2ZnX2VudHJ5LmFycmF5X2lkICYgMHhGRiksCiAJCQkJIGxlMzJfdG9fY3B1KHJlcy0+Y2ZnX2VudHJ5LnJlc291cmNlX2FkZHJlc3MpKTsKIAkJfQogCX0KQEAgLTUzMDYsNiArNTczOSwxNCBAQAogCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPSBjbWQtPmRydl9pbnN0OwogCWludCBjZmdfdGFibGVfc2l6ZSA9IGNwdV90b19iZTMyKHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9jb25maWdfdGFibGUpKTsKIAorCWlmIChiZTE2X3RvX2NwdShwaW5zdGFuY2UtPmlucV9kYXRhLT5md192ZXJzaW9uKSA8PQorCQkJCQlQTUNSQUlEX0ZXX1ZFUlNJT05fMSkKKwkJcGluc3RhbmNlLT5jb25maWdfdGFibGVfZW50cnlfc2l6ZSA9CisJCQlzaXplb2Yoc3RydWN0IHBtY3JhaWRfY29uZmlnX3RhYmxlX2VudHJ5KTsKKwllbHNlCisJCXBpbnN0YW5jZS0+Y29uZmlnX3RhYmxlX2VudHJ5X3NpemUgPQorCQkJc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZV9lbnRyeV9leHQpOworCiAJaW9hcmNiLT5yZXF1ZXN0X3R5cGUgPSBSRVFfVFlQRV9JT0FDTUQ7CiAJaW9hcmNiLT5yZXNvdXJjZV9oYW5kbGUgPSBjcHVfdG9fbGUzMihQTUNSQUlEX0lPQV9SRVNfSEFORExFKTsKIApAQCAtNTMzOCw3ICs1Nzc5LDcgQEAKIAogCiAvKioKLSAqIHBtY3JhaWRfcHJvYmUgLSBQQ0kgcHJvYmUgZW50cnkgcG9pbnRlciBmb3IgUE1DIE1heFJhaWQgY29udHJvbGxlciBkcml2ZXIKKyAqIHBtY3JhaWRfcHJvYmUgLSBQQ0kgcHJvYmUgZW50cnkgcG9pbnRlciBmb3IgUE1DIE1heFJBSUQgY29udHJvbGxlciBkcml2ZXIKICAqIEBwZGV2OiBwb2ludGVyIHRvIHBjaSBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAZGV2X2lkOiBwb2ludGVyIHRvIGRldmljZSBpZHMgc3RydWN0dXJlCiAgKgpAQCAtNTQ4NSw3ICs1OTI2LDcgQEAKIAkgKi8KIAlwbWNyYWlkX2luZm8oInN0YXJ0aW5nIElPQSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZVxuIik7CiAJaWYgKHBtY3JhaWRfcmVzZXRfYnJpbmd1cChwaW5zdGFuY2UpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkbid0IGluaXRpYWxpemUgSU9BIFxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkbid0IGluaXRpYWxpemUgSU9BXG4iKTsKIAkJcmMgPSAxOwogCQlnb3RvIG91dF9yZWxlYXNlX2J1ZnM7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuaCBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmgKaW5kZXggYjhhZDA3Yy4uNmNmYTAxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuaAorKysgYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5oCkBAIC00MCwxMCArNDAsMTIgQEAKICAqIERyaXZlciB2ZXJzaW9uOiB2ZXJzaW9uIHN0cmluZyBpbiBtYWpvcl92ZXJzaW9uLm1pbm9yX3ZlcnNpb24ucGF0Y2ggZm9ybWF0CiAgKiBEcml2ZXIgZGF0ZSAgIDogZGF0ZSBpbmZvcm1hdGlvbiBpbiAiTW9uIGRkIHl5eXkiIGZvcm1hdAogICovCi0jZGVmaW5lIFBNQ1JBSURfRFJJVkVSX05BTUUgICAgICAgCSJQTUMgTWF4UkFJRCIKKyNkZWZpbmUgUE1DUkFJRF9EUklWRVJfTkFNRQkJIlBNQyBNYXhSQUlEIgogI2RlZmluZSBQTUNSQUlEX0RFVkZJTEUJCQkicG1jc2FzIgotI2RlZmluZSBQTUNSQUlEX0RSSVZFUl9WRVJTSU9OICAgIAkiMS4wLjIiCi0jZGVmaW5lIFBNQ1JBSURfRFJJVkVSX0RBVEUgICAgICAgCV9fREFURV9fCisjZGVmaW5lIFBNQ1JBSURfRFJJVkVSX1ZFUlNJT04JCSIyLjAuMiIKKyNkZWZpbmUgUE1DUkFJRF9EUklWRVJfREFURQkJX19EQVRFX18KKworI2RlZmluZSBQTUNSQUlEX0ZXX1ZFUlNJT05fMQkJMHgwMDIKIAogLyogTWF4aW11bSBudW1iZXIgb2YgYWRhcHRlcnMgc3VwcG9ydGVkIGJ5IGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgZHJpdmVyICovCiAjZGVmaW5lIFBNQ1JBSURfTUFYX0FEQVBURVJTCQkxMDI0CkBAIC04NSwxNyArODcsMTcgQEAKICNkZWZpbmUgUE1DUkFJRF9JT0FSQ0JfQUxJR05NRU5UICAgICAgICAgICAgICAgICAzMgogI2RlZmluZSBQTUNSQUlEX0lPQURMX0FMSUdOTUVOVCAgICAgICAgICAgICAgICAgIDE2CiAjZGVmaW5lIFBNQ1JBSURfSU9BU0FfQUxJR05NRU5UICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQTUNSQUlEX05VTV9NU0lYX1ZFQ1RPUlMgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUE1DUkFJRF9OVU1fTVNJWF9WRUNUT1JTICAgICAgICAgICAgICAgICAxNgogCiAvKiB2YXJpb3VzIG90aGVyIGxpbWl0cyAqLwotI2RlZmluZSBQTUNSQUlEX1ZFTkRPUl9JRF9MRU4gICAgICAgICAgIAkgOAotI2RlZmluZSBQTUNSQUlEX1BST0RVQ1RfSURfTEVOICAgICAgICAgICAgCSAxNgotI2RlZmluZSBQTUNSQUlEX1NFUklBTF9OVU1fTEVOICAgICAgICAgIAkgOAotI2RlZmluZSBQTUNSQUlEX0xVTl9MRU4JCQkgICAgICAgICA4Ci0jZGVmaW5lIFBNQ1JBSURfTUFYX0NEQl9MRU4gICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUE1DUkFJRF9ERVZJQ0VfSURfTEVOCQkJIDgKLSNkZWZpbmUgUE1DUkFJRF9TRU5TRV9EQVRBX0xFTgkJCSAyNTYKLSNkZWZpbmUgUE1DUkFJRF9BRERfQ01EX1BBUkFNX0xFTgkJIDQ4CisjZGVmaW5lIFBNQ1JBSURfVkVORE9SX0lEX0xFTgkJCTgKKyNkZWZpbmUgUE1DUkFJRF9QUk9EVUNUX0lEX0xFTgkJCTE2CisjZGVmaW5lIFBNQ1JBSURfU0VSSUFMX05VTV9MRU4JCQk4CisjZGVmaW5lIFBNQ1JBSURfTFVOX0xFTgkJCQk4CisjZGVmaW5lIFBNQ1JBSURfTUFYX0NEQl9MRU4JCQkxNgorI2RlZmluZSBQTUNSQUlEX0RFVklDRV9JRF9MRU4JCQk4CisjZGVmaW5lIFBNQ1JBSURfU0VOU0VfREFUQV9MRU4JCQkyNTYKKyNkZWZpbmUgUE1DUkFJRF9BRERfQ01EX1BBUkFNX0xFTgkJNDgKIAogI2RlZmluZSBQTUNSQUlEX01BWF9CVVNfVE9fU0NBTiAgICAgICAgICAgICAgICAgIDEKICNkZWZpbmUgUE1DUkFJRF9NQVhfTlVNX1RBUkdFVFNfUEVSX0JVUyAgICAgICAgICAyNTYKQEAgLTExNiwxNyArMTE4LDEwIEBACiAjZGVmaW5lIFBNQ1JBSURfVlNFVF9NQVhfU0VDVE9SUyAgICAgICAgICAgICAgICAgNTEyCiAjZGVmaW5lIFBNQ1JBSURfTUFYX0NNRF9QRVJfTFVOICAgICAgICAgICAgICAgICAgMjU0CiAKLS8qIE51bWJlciBvZiBjb25maWd1cmF0aW9uIHRhYmxlIGVudHJpZXMgKHJlc291cmNlcykgKi8KLSNkZWZpbmUgUE1DUkFJRF9NQVhfTlVNX09GX1ZTRVRTICAgICAgICAgICAgICAgICAyNDAKLQotLyogVG9kbyA6IENoZWNrIG1heCBsaW1pdCBmb3IgUGhhc2UgMSAqLwotI2RlZmluZSBQTUNSQUlEX01BWF9OVU1fT0ZfUEhZX0RFVlMgICAgICAgICAgICAgIDI1NgotCi0vKiBNQVhfTlVNX09GX0RFVlMgaW5jbHVkZXMgMSBGUCwgMSBEdW1teSBFbmNsb3N1cmUgZGV2aWNlICovCi0jZGVmaW5lIFBNQ1JBSURfTUFYX05VTV9PRl9ERVZTICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChQTUNSQUlEX01BWF9OVU1fT0ZfVlNFVFMgKyBQTUNSQUlEX01BWF9OVU1fT0ZfUEhZX0RFVlMgKyAyKQotCi0jZGVmaW5lIFBNQ1JBSURfTUFYX1JFU09VUkNFUyAgICAgICAgICAgICAgICAgICAgUE1DUkFJRF9NQVhfTlVNX09GX0RFVlMKKy8qIE51bWJlciBvZiBjb25maWd1cmF0aW9uIHRhYmxlIGVudHJpZXMgKHJlc291cmNlcyksIGluY2x1ZGVzIDEgRlAsCisgKiAxIEVuY2xvc3VyZSBkZXZpY2UKKyAqLworI2RlZmluZSBQTUNSQUlEX01BWF9SRVNPVVJDRVMgICAgICAgICAgICAgICAgICAgIDI1NgogCiAvKiBBZGFwdGVyIENvbW1hbmRzIHVzZWQgYnkgZHJpdmVyICovCiAjZGVmaW5lIFBNQ1JBSURfUVVFUllfUkVTT1VSQ0VfU1RBVEUgICAgICAgICAgICAgMHhDMgpAQCAtMTc3LDYgKzE3Miw3IEBACiAjZGVmaW5lIFBNQ1JBSURfSU9BU0NfU0VOU0VfU1RBVFVTKGlvYXNjKSAgICAgICAgKChpb2FzYykgJiAweDAwMDAwMGZmKQogCiAjZGVmaW5lIFBNQ1JBSURfSU9BU0NfR09PRF9DT01QTEVUSU9OCQkJMHgwMDAwMDAwMAorI2RlZmluZSBQTUNSQUlEX0lPQVNDX0dDX0lPQVJDQl9OT1RGT1VORAkJMHgwMDVBMDAwMAogI2RlZmluZSBQTUNSQUlEX0lPQVNDX05SX0lOSVRfQ01EX1JFUVVJUkVECQkweDAyMDQwMjAwCiAjZGVmaW5lIFBNQ1JBSURfSU9BU0NfTlJfSU9BX1JFU0VUX1JFUVVJUkVECQkweDAyMDQ4MDAwCiAjZGVmaW5lIFBNQ1JBSURfSU9BU0NfTlJfU1lOQ19SRVFVSVJFRAkJCTB4MDIzRjAwMDAKQEAgLTE4NywxMiArMTgzLDEyIEBACiAjZGVmaW5lIFBNQ1JBSURfSU9BU0NfSFdfSU9BX1JFU0VUX1JFUVVJUkVECQkweDA0NDQ4NjAwCiAjZGVmaW5lIFBNQ1JBSURfSU9BU0NfSVJfSU5WQUxJRF9SRVNPVVJDRV9IQU5ETEUgICAgICAgIDB4MDUyNTAwMDAKICNkZWZpbmUgUE1DUkFJRF9JT0FTQ19BQ19URVJNSU5BVEVEX0JZX0hPU1QJCTB4MEI1QTAwMDAKLSNkZWZpbmUgUE1DUkFJRF9JT0FTQ19VQV9CVVNfV0FTX1JFU0VUICAgICAgICAgICAJMHgwNjI5MDAwMAotI2RlZmluZSBQTUNSQUlEX0lPQVNDX1VBX0JVU19XQVNfUkVTRVRfQllfT1RIRVIgIAkweDA2Mjk4MDAwCisjZGVmaW5lIFBNQ1JBSURfSU9BU0NfVUFfQlVTX1dBU19SRVNFVAkJCTB4MDYyOTAwMDAKKyNkZWZpbmUgUE1DUkFJRF9JT0FTQ19VQV9CVVNfV0FTX1JFU0VUX0JZX09USEVSCQkweDA2Mjk4MDAwCiAKIC8qIERyaXZlciBkZWZpbmVkIElPQVNDcyAqLwotI2RlZmluZSBQTUNSQUlEX0lPQVNDX0lPQV9XQVNfUkVTRVQgICAgICAgICAgICAgIAkweDEwMDAwMDAxCi0jZGVmaW5lIFBNQ1JBSURfSU9BU0NfUENJX0FDQ0VTU19FUlJPUiAgICAgICAgICAgCTB4MTAwMDAwMDIKKyNkZWZpbmUgUE1DUkFJRF9JT0FTQ19JT0FfV0FTX1JFU0VUCQkJMHgxMDAwMDAwMQorI2RlZmluZSBQTUNSQUlEX0lPQVNDX1BDSV9BQ0NFU1NfRVJST1IJCQkweDEwMDAwMDAyCiAKIC8qIFZhcmlvdXMgdGltZW91dCB2YWx1ZXMgKGluIG1pbGxpc2Vjb25kcykgdXNlZC4gSWYgYW55IG9mIHRoZXNlIGFyZSBjaGlwCiAgKiBzcGVjaWZpYywgbW92ZSB0aGVtIHRvIHBtY3JhaWRfY2hpcF9kZXRhaWxzIHN0cnVjdHVyZS4KQEAgLTMzNiw2ICszMzIsMTMgQEAKIAlfX3U4ICBsdW5bUE1DUkFJRF9MVU5fTEVOXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkKDQpKSk7CiAKKy8qIGV4dGVuZGVkIGNvbmZpZ3VyYXRpb24gdGFibGUgc2l6ZXMgYXJlIG9mIDY0IGJ5dGVzIGluIHNpemUgKi8KKyNkZWZpbmUgUE1DUkFJRF9DRkdURV9FWFRfU0laRQkzMgorc3RydWN0IHBtY3JhaWRfY29uZmlnX3RhYmxlX2VudHJ5X2V4dCB7CisJc3RydWN0IHBtY3JhaWRfY29uZmlnX3RhYmxlX2VudHJ5IGNmZ3RlOworCV9fdTggIGNmZ3RlX2V4dFtQTUNSQUlEX0NGR1RFX0VYVF9TSVpFXTsKK307CisKIC8qIHJlc291cmNlIHR5cGVzIChjb25maWdfdGFibGVfZW50cnkucmVzb3VyY2VfdHlwZSB2YWx1ZXMpICovCiAjZGVmaW5lIFJFU19UWVBFX0FGX0RBU0QgICAgIDB4MDAKICNkZWZpbmUgUkVTX1RZUEVfR1NDU0kgICAgICAgMHgwMQpAQCAtMzc2LDcgKzM3OSwxMiBAQAogCV9fdTggIHJlc2VydmVkMTsKIAlfX3U4ICBmbGFnczsKIAlfX3U4ICByZXNlcnZlZDJbMTFdOwotCXN0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZV9lbnRyeSBlbnRyaWVzW1BNQ1JBSURfTUFYX1JFU09VUkNFU107CisJdW5pb24geworCQlzdHJ1Y3QgcG1jcmFpZF9jb25maWdfdGFibGVfZW50cnkKKwkJCQllbnRyaWVzW1BNQ1JBSURfTUFYX1JFU09VUkNFU107CisJCXN0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZV9lbnRyeV9leHQKKwkJCQllbnRyaWVzX2V4dFtQTUNSQUlEX01BWF9SRVNPVVJDRVNdOworCX07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCwgYWxpZ25lZCg0KSkpOwogCiAvKiBjb25maWdfdGFibGUuZmxhZ3MgdmFsdWUgKi8KQEAgLTM4NSw3ICszOTMsNyBAQAogLyoKICAqIEhDQU0gZm9ybWF0CiAgKi8KLSNkZWZpbmUgUE1DUkFJRF9IT1NUUkNCX0xETlNJWkUgCQk0MDU2CisjZGVmaW5lIFBNQ1JBSURfSE9TVFJDQl9MRE5TSVpFCQkJNDA1NgogCiAvKiBFcnJvciBsb2cgbm90aWZpY2F0aW9uIGZvcm1hdCAqLwogc3RydWN0IHBtY3JhaWRfaG9zdHJjYl9lcnJvciB7CkBAIC00MTYsNiArNDI0LDE1IEBACiBzdHJ1Y3QgcG1jcmFpZF9oY2FtX2NjbiB7CiAJc3RydWN0IHBtY3JhaWRfaGNhbV9oZHIgaGVhZGVyOwogCXN0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZV9lbnRyeSBjZmdfZW50cnk7CisJc3RydWN0IHBtY3JhaWRfY29uZmlnX3RhYmxlX2VudHJ5IGNmZ19lbnRyeV9vbGQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCwgYWxpZ25lZCg0KSkpOworCisjZGVmaW5lIFBNQ1JBSURfQ0NOX0VYVF9TSVpFCTM5NDQKK3N0cnVjdCBwbWNyYWlkX2hjYW1fY2NuX2V4dCB7CisJc3RydWN0IHBtY3JhaWRfaGNhbV9oZHIgaGVhZGVyOworCXN0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZV9lbnRyeV9leHQgY2ZnX2VudHJ5OworCXN0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZV9lbnRyeV9leHQgY2ZnX2VudHJ5X29sZDsKKwlfX3U4ICAgcmVzZXJ2ZWRbUE1DUkFJRF9DQ05fRVhUX1NJWkVdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQoNCkpKTsKIAogc3RydWN0IHBtY3JhaWRfaGNhbV9sZG4gewpAQCAtNDMxLDYgKzQ0OCw4IEBACiAjZGVmaW5lIE5PVElGSUNBVElPTl9UWVBFX0VOVFJZX0NIQU5HRUQJCTB4MAogI2RlZmluZSBOT1RJRklDQVRJT05fVFlQRV9FTlRSWV9ORVcJCTB4MQogI2RlZmluZSBOT1RJRklDQVRJT05fVFlQRV9FTlRSWV9ERUxFVEVECQkweDIKKyNkZWZpbmUgTk9USUZJQ0FUSU9OX1RZUEVfU1RBVEVfQ0hBTkdFCQkweDMKKyNkZWZpbmUgTk9USUZJQ0FUSU9OX1RZUEVfRU5UUllfU1RBVEVDSEFOR0VECTB4NAogI2RlZmluZSBOT1RJRklDQVRJT05fVFlQRV9FUlJPUl9MT0cJCTB4MTAKICNkZWZpbmUgTk9USUZJQ0FUSU9OX1RZUEVfSU5GT1JNQVRJT05fTE9HCTB4MTEKIApAQCAtNDYwLDYgKzQ3OSw3IEBACiAJdW5zaWduZWQgbG9uZyAgbWFpbGJveDsKIAl1bnNpZ25lZCBsb25nICBnbG9iYWxfaW50cl9tYXNrOwogCXVuc2lnbmVkIGxvbmcgIGlvYV9ob3N0X2ludHI7CisJdW5zaWduZWQgbG9uZyAgaW9hX2hvc3RfbXNpeF9pbnRyOwogCXVuc2lnbmVkIGxvbmcgIGlvYV9ob3N0X2ludHJfY2xyOwogCXVuc2lnbmVkIGxvbmcgIGlvYV9ob3N0X21hc2s7CiAJdW5zaWduZWQgbG9uZyAgaW9hX2hvc3RfbWFza19jbHI7CkBAIC00ODIsNiArNTAyLDcgQEAKICNkZWZpbmUgSU5UUlNfSU9BX1BST0NFU1NPUl9FUlJPUgkJUE1DX0JJVDMyKDI5KQogI2RlZmluZSBJTlRSU19IUlJRX1ZBTElECQkJUE1DX0JJVDMyKDMwKQogI2RlZmluZSBJTlRSU19PUEVSQVRJT05BTF9TVEFUVVMJCVBNQ19CSVQzMigwKQorI2RlZmluZSBJTlRSU19BTExPV19NU0lYX1ZFQ1RPUjAJCVBNQ19CSVQzMigzMSkKIAogLyogSG9zdCB0byBJT0EgRG9vcmJlbGxzICovCiAjZGVmaW5lIERPT1JCRUxMX1JVTlRJTUVfUkVTRVQJCQlQTUNfQklUMzIoMSkKQEAgLTQ4OSwxMCArNTEwLDEyIEBACiAjZGVmaW5lIERPT1JCRUxMX0lPQV9ERUJVR19BTEVSVAkJUE1DX0JJVDMyKDkpCiAjZGVmaW5lIERPT1JCRUxMX0VOQUJMRV9ERVNUUlVDVElWRV9ESUFHUwlQTUNfQklUMzIoOCkKICNkZWZpbmUgRE9PUkJFTExfSU9BX1NUQVJUX0JJU1QJCQlQTUNfQklUMzIoMjMpCisjZGVmaW5lIERPT1JCRUxMX0lOVFJfTU9ERV9NU0lYCQkJUE1DX0JJVDMyKDI1KQorI2RlZmluZSBET09SQkVMTF9JTlRSX01TSVhfQ0xSCQkJUE1DX0JJVDMyKDI2KQogI2RlZmluZSBET09SQkVMTF9SRVNFVF9JT0EJCQlQTUNfQklUMzIoMzEpCiAKIC8qIEdsb2JhbCBpbnRlcnJ1cHQgbWFzayByZWdpc3RlciB2YWx1ZSAqLwotI2RlZmluZSBHTE9CQUxfSU5URVJSVVBUX01BU0sJCQkweDRVTEwKKyNkZWZpbmUgR0xPQkFMX0lOVEVSUlVQVF9NQVNLCQkJMHg1VUxMCiAKICNkZWZpbmUgUE1DUkFJRF9FUlJPUl9JTlRFUlJVUFRTCShJTlRSU19JT0FSQ0JfVFJBTlNGRVJfRkFJTEVEIHwgXAogCQkJCQkgSU5UUlNfSU9BX1VOSVRfQ0hFQ0sgfCBcCkBAIC01MDMsOCArNTI2LDggQEAKIAogI2RlZmluZSBQTUNSQUlEX1BDSV9JTlRFUlJVUFRTCQkoUE1DUkFJRF9FUlJPUl9JTlRFUlJVUFRTIHwgXAogCQkJCQkgSU5UUlNfSFJSUV9WQUxJRCB8IFwKLQkJCQkJIElOVFJTX0NSSVRJQ0FMX09QX0lOX1BST0dSRVNTIHxcCi0JCQkJCSBJTlRSU19UUkFOU0lUSU9OX1RPX09QRVJBVElPTkFMKQorCQkJCQkgSU5UUlNfVFJBTlNJVElPTl9UT19PUEVSQVRJT05BTCB8XAorCQkJCQkgSU5UUlNfQUxMT1dfTVNJWF9WRUNUT1IwKQogCiAvKiBjb250cm9sX2Jsb2NrLCBhc3NvY2lhdGVkIHdpdGggZWFjaCBvZiB0aGUgY29tbWFuZHMgY29udGFpbnMgSU9BUkNCLCBJT0FETHMKICAqIG1lbW9yeSBmb3IgSU9BU0EuIEFkZGl0aW9uYWwgMyAqIDE2IGJ5dGVzIGFyZSBhbGxvY2F0ZWQgaW4gb3JkZXIgdG8gc3VwcG9ydApAQCAtNTI2LDE3ICs1NDksMjQgQEAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2NhdHRlcmxpc3RbMV07CiB9OwogCisvKiBwYWdlIEQwIGlucXVpcnkgZGF0YSBvZiBmb2NhbCBwb2ludCByZXNvdXJjZSAqLworc3RydWN0IHBtY3JhaWRfaW5xdWlyeV9kYXRhIHsKKwlfX3U4CXBoX2Rldl90eXBlOworCV9fdTgJcGFnZV9jb2RlOworCV9fdTgJcmVzZXJ2ZWQxOworCV9fdTgJYWRkX3BhZ2VfbGVuOworCV9fdTgJbGVuZ3RoOworCV9fdTgJcmVzZXJ2ZWQyOworCV9fbGUxNglmd192ZXJzaW9uOworCV9fdTgJcmVzZXJ2ZWQzWzE2XTsKK307CisKIC8qIHBtY3JhaWRfY21kIC0gTExEIHJlcHJlc2VudGF0aW9uIG9mIFNDU0kgY29tbWFuZCAqLwogc3RydWN0IHBtY3JhaWRfY21kIHsKIAogCS8qIFB0ciBhbmQgYnVzIGFkZHJlc3Mgb2YgRE1BLmFibGUgY29udHJvbCBibG9jayBmb3IgdGhpcyBjb21tYW5kICovCiAJc3RydWN0IHBtY3JhaWRfY29udHJvbF9ibG9jayAqaW9hX2NiOwogCWRtYV9hZGRyX3QgaW9hX2NiX2J1c19hZGRyOwotCi0JLyogc2Vuc2UgYnVmZmVyIGZvciBSRVFVRVNUIFNFTlNFIGNvbW1hbmQgaWYgZmlybXdhcmUgaXMgbm90IHNlbmRpbmcKLQkgKiBhdXRvIHNlbnNlIGRhdGEKLQkgKi8KLQlkbWFfYWRkcl90IHNlbnNlX2J1ZmZlcl9kbWE7CiAJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOwogCXU4ICpzZW5zZV9idWZmZXI7CiAKQEAgLTU1NiwxMSArNTg2LDIyIEBACiAKIAlzdHJ1Y3QgcG1jcmFpZF9zZ2xpc3QgKnNnbGlzdDsgLyogdXNlZCBmb3IgcGFzc3Rocm91Z2ggSU9DVExzICovCiAKLQkvKiBzY3JhdGNoIHVzZWQgZHVyaW5nIHJlc2V0IHNlcXVlbmNlICovCisJLyogc2NyYXRjaCB1c2VkICovCiAJdW5pb24geworCQkvKiBkdXJpbmcgcmVzZXQgc2VxdWVuY2UgKi8KIAkJdW5zaWduZWQgbG9uZyB0aW1lX2xlZnQ7CiAJCXN0cnVjdCBwbWNyYWlkX3Jlc291cmNlX2VudHJ5ICpyZXM7Ci0JfSB1OworCQlpbnQgaHJycV9pbmRleDsKKworCQkvKiB1c2VkIGR1cmluZyBJTyBjb21tYW5kIGVycm9yIGhhbmRsaW5nLiBTZW5zZSBidWZmZXIKKwkJICogZm9yIFJFUVVFU1QgU0VOU0UgY29tbWFuZCBpZiBmaXJtd2FyZSBpcyBub3Qgc2VuZGluZworCQkgKiBhdXRvIHNlbnNlIGRhdGEKKwkJICovCisJCXN0cnVjdCAgeworCQkJdTggKnNlbnNlX2J1ZmZlcjsKKwkJCWRtYV9hZGRyX3Qgc2Vuc2VfYnVmZmVyX2RtYTsKKwkJfTsKKwl9OwogfTsKIAogLyoKQEAgLTU2OCw2ICs2MDksNyBAQAogICovCiBzdHJ1Y3QgcG1jcmFpZF9pbnRlcnJ1cHRzIHsKIAl2b2lkIF9faW9tZW0gKmlvYV9ob3N0X2ludGVycnVwdF9yZWc7CisJdm9pZCBfX2lvbWVtICppb2FfaG9zdF9tc2l4X2ludGVycnVwdF9yZWc7CiAJdm9pZCBfX2lvbWVtICppb2FfaG9zdF9pbnRlcnJ1cHRfY2xyX3JlZzsKIAl2b2lkIF9faW9tZW0gKmlvYV9ob3N0X2ludGVycnVwdF9tYXNrX3JlZzsKIAl2b2lkIF9faW9tZW0gKmlvYV9ob3N0X2ludGVycnVwdF9tYXNrX2Nscl9yZWc7CkBAIC01NzgsMTEgKzYyMCwxMiBAQAogCiAvKiBJU1IgcGFyYW1ldGVycyBMTEQgYWxsb2NhdGVzIChvbmUgZm9yIGVhY2ggTVNJLVggaWYgZW5hYmxlZCkgdmVjdG9ycyAqLwogc3RydWN0IHBtY3JhaWRfaXNyX3BhcmFtIHsKLQl1OCBocnJxX2lkOwkJCS8qIGhycnEgZW50cnkgaW5kZXggKi8KLQl1MTYgdmVjdG9yOwkJCS8qIGFsbG9jYXRlZCBtc2kteCB2ZWN0b3IgKi8KIAlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqZHJ2X2luc3Q7CisJdTE2IHZlY3RvcjsJCQkvKiBhbGxvY2F0ZWQgbXNpLXggdmVjdG9yICovCisJdTggaHJycV9pZDsJCQkvKiBocnJxIGVudHJ5IGluZGV4ICovCiB9OwogCisKIC8qIEFFTiBtZXNzYWdlIGhlYWRlciBzZW50IGFzIHBhcnQgb2YgZXZlbnQgZGF0YSB0byBhcHBsaWNhdGlvbnMgKi8KIHN0cnVjdCBwbWNyYWlkX2Flbl9tc2cgewogCXUzMiBob3N0bm87CkBAIC01OTEsNiArNjM0LDE5IEBACiAJdTggIGRhdGFbMF07CiB9OwogCisvKiBDb250cm9sbGVyIHN0YXRlIGV2ZW50IG1lc3NhZ2UgdHlwZSAqLworc3RydWN0IHBtY3JhaWRfc3RhdGVfbXNnIHsKKwlzdHJ1Y3QgcG1jcmFpZF9hZW5fbXNnIG1zZzsKKwl1MzIgaW9hX3N0YXRlOworfTsKKworI2RlZmluZSBQTUNfREVWSUNFX0VWRU5UX1JFU0VUX1NUQVJUCQkweDExMDAwMDAwCisjZGVmaW5lIFBNQ19ERVZJQ0VfRVZFTlRfUkVTRVRfU1VDQ0VTUwkJMHgxMTAwMDAwMQorI2RlZmluZSBQTUNfREVWSUNFX0VWRU5UX1JFU0VUX0ZBSUxFRAkJMHgxMTAwMDAwMgorI2RlZmluZSBQTUNfREVWSUNFX0VWRU5UX1NIVVRET1dOX1NUQVJUCQkweDExMDAwMDAzCisjZGVmaW5lIFBNQ19ERVZJQ0VfRVZFTlRfU0hVVERPV05fU1VDQ0VTUwkweDExMDAwMDA0CisjZGVmaW5lIFBNQ19ERVZJQ0VfRVZFTlRfU0hVVERPV05fRkFJTEVECTB4MTEwMDAwMDUKKwogc3RydWN0IHBtY3JhaWRfaG9zdHJjYiB7CiAJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKmRydl9pbnN0OwogCXN0cnVjdCBwbWNyYWlkX2Flbl9tc2cgKm1zZzsKQEAgLTYyOCw2ICs2ODQsNyBAQAogCS8qIEhvc3RSQ0JzIG5lZWRlZCBmb3IgSENBTSAqLwogCXN0cnVjdCBwbWNyYWlkX2hvc3RyY2IgbGRuOwogCXN0cnVjdCBwbWNyYWlkX2hvc3RyY2IgY2NuOworCXN0cnVjdCBwbWNyYWlkX3N0YXRlX21zZyBzY247CS8qIGNvbnRyb2xsZXIgc3RhdGUgY2hhbmdlIG1zZyAqLwogCiAKIAkvKiBCdXMgYWRkcmVzcyBvZiBzdGFydCBvZiBIUlJRICovCkBAIC02NDUsMTIgKzcwMiwxNSBAQAogCS8qIExvY2sgZm9yIEhSUlEgYWNjZXNzICovCiAJc3BpbmxvY2tfdCBocnJxX2xvY2tbUE1DUkFJRF9OVU1fTVNJWF9WRUNUT1JTXTsKIAorCXN0cnVjdCBwbWNyYWlkX2lucXVpcnlfZGF0YSAqaW5xX2RhdGE7CisJZG1hX2FkZHJfdCAgaW5xX2RhdGFfYmFkZHI7CisKKwkvKiBzaXplIG9mIGNvbmZpZ3VyYXRpb24gdGFibGUgZW50cnksIHZhcmllcyBiYXNlZCBvbiB0aGUgZmlybXdhcmUgKi8KKwl1MzIJY29uZmlnX3RhYmxlX2VudHJ5X3NpemU7CisKIAkvKiBFeHBlY3RlZCB0b2dnbGUgYml0IGF0IGhvc3QgKi8KIAl1OCBob3N0X3RvZ2dsZV9iaXRbUE1DUkFJRF9OVU1fTVNJWF9WRUNUT1JTXTsKIAotCS8qIE5vIG9mIFJlc2V0IElPQSByZXRyaWVzIC4gSU9BIG1hcmtlZCBkZWFkIGlmIHRocmVzaG9sZCBleGNlZWRzICovCi0JdTggaW9hX3Jlc2V0X2F0dGVtcHRzOwotI2RlZmluZSBQTUNSQUlEX1JFU0VUX0FUVEVNUFRTIDMKIAogCS8qIFdhaXQgUSBmb3IgIHRocmVhZHMgdG8gd2FpdCBmb3IgUmVzZXQgSU9BIGNvbXBsZXRpb24gKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCByZXNldF93YWl0X3E7CkBAIC02NjQsMTQgKzcyNCwyMiBAQAogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CS8qIG1pZCBsYXllciBpbnRlcmZhY2Ugc3RydWN0dXJlIGhhbmRsZSAqLwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwkvKiBQQ0kgZGV2aWNlIHN0cnVjdHVyZSBoYW5kbGUgKi8KIAorCS8qIE5vIG9mIFJlc2V0IElPQSByZXRyaWVzIC4gSU9BIG1hcmtlZCBkZWFkIGlmIHRocmVzaG9sZCBleGNlZWRzICovCisJdTggaW9hX3Jlc2V0X2F0dGVtcHRzOworI2RlZmluZSBQTUNSQUlEX1JFU0VUX0FUVEVNUFRTIDMKKwogCXU4ICBjdXJyZW50X2xvZ19sZXZlbDsJLyogZGVmYXVsdCBsZXZlbCBmb3IgbG9nZ2luZyBJT0FTQyBlcnJvcnMgKi8KIAogCXU4ICBudW1faHJycTsJCS8qIE51bWJlciBvZiBpbnRlcnJ1cHQgdmVjdG9ycyBhbGxvY2F0ZWQgKi8KKwl1OCAgaW50ZXJydXB0X21vZGU7CS8qIGN1cnJlbnQgaW50ZXJydXB0IG1vZGUgbGVnYWN5IG9yIG1zaXggKi8KIAlkZXZfdCBkZXY7CQkvKiBNYWpvci1NaW5vciBudW1iZXJzIGZvciBDaGFyIGRldmljZSAqLwogCiAJLyogVXNlZCBhcyBJU1IgaGFuZGxlciBhcmd1bWVudCAqLwogCXN0cnVjdCBwbWNyYWlkX2lzcl9wYXJhbSBocnJxX3ZlY3RvcltQTUNSQUlEX05VTV9NU0lYX1ZFQ1RPUlNdOwogCisJLyogTWVzc2FnZSBpZCBhcyBmaWxsZWQgaW4gbGFzdCBmaXJlZCBJT0FSQ0IsIHVzZWQgdG8gaWRlbnRpZnkgSFJSUSAqLworCWF0b21pY190IGxhc3RfbWVzc2FnZV9pZDsKKwogCS8qIGNvbmZpZ3VyYXRpb24gdGFibGUgKi8KIAlzdHJ1Y3QgcG1jcmFpZF9jb25maWdfdGFibGUgKmNmZ190YWJsZTsKIAlkbWFfYWRkcl90IGNmZ190YWJsZV9idXNfYWRkcjsKQEAgLTY4Niw4ICs3NTQsMTQgQEAKIAogCXN0cnVjdCBsaXN0X2hlYWQgZnJlZV9jbWRfcG9vbDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHBlbmRpbmdfY21kX3Bvb2w7Ci0Jc3BpbmxvY2tfdCBmcmVlX3Bvb2xfbG9jazsJIAkvKiBmcmVlIHBvb2wgbG9jayAqLwotCXNwaW5sb2NrX3QgcGVuZGluZ19wb29sX2xvY2s7CSAJLyogcGVuZGluZyBwb29sIGxvY2sgKi8KKwlzcGlubG9ja190IGZyZWVfcG9vbF9sb2NrOwkJLyogZnJlZSBwb29sIGxvY2sgKi8KKwlzcGlubG9ja190IHBlbmRpbmdfcG9vbF9sb2NrOwkJLyogcGVuZGluZyBwb29sIGxvY2sgKi8KKworCS8qIFRhc2tsZXQgdG8gaGFuZGxlIGRlZmVycmVkIHByb2Nlc3NpbmcgKi8KKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgaXNyX3Rhc2tsZXRbUE1DUkFJRF9OVU1fTVNJWF9WRUNUT1JTXTsKKworCS8qIFdvcmstcXVldWUgKFNoYXJlZCkgZm9yIGRlZmVycmVkIHJlc2V0IHByb2Nlc3NpbmcgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya2VyX3E7CiAKIAkvKiBObyBvZiBJTyBjb21tYW5kcyBwZW5kaW5nIHdpdGggRlcgKi8KIAlhdG9taWNfdCBvdXRzdGFuZGluZ19jbWRzOwpAQCAtNjk1LDExICs3NjksNiBAQAogCS8qIHNob3VsZCBhZGQvZGVsZXRlIHJlc291cmNlcyB0byBtaWQtbGF5ZXIgbm93ID8qLwogCWF0b21pY190IGV4cG9zZV9yZXNvdXJjZXM7CiAKLQkvKiBUYXNrbGV0IHRvIGhhbmRsZSBkZWZlcnJlZCBwcm9jZXNzaW5nICovCi0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IGlzcl90YXNrbGV0W1BNQ1JBSURfTlVNX01TSVhfVkVDVE9SU107Ci0KLQkvKiBXb3JrLXF1ZXVlIChTaGFyZWQpIGZvciBkZWZlcnJlZCByZXNldCBwcm9jZXNzaW5nICovCi0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcmtlcl9xOwogCiAKIAl1MzIgaW9hX3N0YXRlOjQ7CS8qIEZvciBJT0EgUmVzZXQgc2VxdWVuY2UgRlNNICovCkBAIC03MjgsNyArNzk3LDEwIEBACiAvKiBMTEQgbWFpbnRhaW5lZCByZXNvdXJjZSBlbnRyeSBzdHJ1Y3R1cmUgKi8KIHN0cnVjdCBwbWNyYWlkX3Jlc291cmNlX2VudHJ5IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlOwkvKiBsaW5rIHRvICJ0byBiZSBleHBvc2VkIiByZXNvdXJjZXMgKi8KLQlzdHJ1Y3QgcG1jcmFpZF9jb25maWdfdGFibGVfZW50cnkgY2ZnX2VudHJ5OworCXVuaW9uIHsKKwkJc3RydWN0IHBtY3JhaWRfY29uZmlnX3RhYmxlX2VudHJ5IGNmZ19lbnRyeTsKKwkJc3RydWN0IHBtY3JhaWRfY29uZmlnX3RhYmxlX2VudHJ5X2V4dCBjZmdfZW50cnlfZXh0OworCX07CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2RldjsJLyogTGluayBzY3NpX2RldmljZSBzdHJ1Y3R1cmUgKi8KIAlhdG9taWNfdCByZWFkX2ZhaWx1cmVzOwkJLyogY291bnQgb2YgZmFpbGVkIFJFQUQgY29tbWFuZHMgKi8KIAlhdG9taWNfdCB3cml0ZV9mYWlsdXJlczsJLyogY291bnQgb2YgZmFpbGVkIFdSSVRFIGNvbW1hbmRzICovCkBAIC03NzEsNzMgKzg0Myw3NSBAQAogICogc3RhdGljYWxseS4KICAqLwogc3RhdGljIHN0cnVjdCBwbWNyYWlkX2lvYXNjX2Vycm9yIHBtY3JhaWRfaW9hc2NfZXJyb3JfdGFibGVbXSA9IHsKLQl7MHgwMTE4MDYwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJezB4MDExODA2MDAsIElPQVNDX0xPR19MRVZFTF9IQVJELAogCSAiUmVjb3ZlcmVkIEVycm9yLCBzb2Z0IG1lZGlhIGVycm9yLCBzZWN0b3IgcmVhc3NpZ25tZW50IHN1Z2dlc3RlZCJ9LAotCXsweDAxNUQwMDAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKLQkgIlJlY292ZXJlZCBFcnJvciwgZmFpbHVyZSBwcmVkaWN0aW9uIHRocmVzaG9sZCBleGNlZWRlZCJ9LAotCXsweDAxNUQ5MjAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKLQkgIlJlY292ZXJlZCBFcnJvciwgc29mdCBDYWNoZSBDYXJkIEJhdHRlcnkgZXJyb3IgdGhyZXNob2xkIn0sCi0JezB4MDE1RDkyMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAotCSAiUmVjb3ZlcmVkIEVycm9yLCBzb2Z0IENhY2hlIENhcmQgQmF0dGVyeSBlcnJvciB0aHJlc2hvbGQifSwKLQl7MHgwMjA0ODAwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJezB4MDE1RDAwMDAsIElPQVNDX0xPR19MRVZFTF9IQVJELAorCSAiUmVjb3ZlcmVkIEVycm9yLCBmYWlsdXJlIHByZWRpY3Rpb24gdGhyZXNvbGQgZXhjZWVkZWQifSwKKwl7MHgwMTVEOTIwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCisJICJSZWNvdmVyZWQgRXJyb3IsIHNvZnQgQ2FjaGUgQ2FyZCBCYXR0ZXJ5IGVycm9yIHRocmVzb2xkIn0sCisJezB4MDE1RDkyMDAsIElPQVNDX0xPR19MRVZFTF9IQVJELAorCSAiUmVjb3ZlcmVkIEVycm9yLCBzb2Z0IENhY2hlIENhcmQgQmF0dGVyeSBlcnJvciB0aHJlc29sZCJ9LAorCXsweDAyMDQ4MDAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKIAkgIk5vdCBSZWFkeSwgSU9BIFJlc2V0IFJlcXVpcmVkIn0sCi0JezB4MDI0MDg1MDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCXsweDAyNDA4NTAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKIAkgIk5vdCBSZWFkeSwgSU9BIG1pY3JvY29kZSBkb3dubG9hZCByZXF1aXJlZCJ9LAotCXsweDAzMTEwQjAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwl7MHgwMzExMEIwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCiAJICJNZWRpdW0gRXJyb3IsIGRhdGEgdW5yZWFkYWJsZSwgcmVhc3NpZ25tZW50IHN1Z2dlc3RlZCJ9LAogCXsweDAzMTEwQzAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKIAkgIk1lZGl1bSBFcnJvciwgZGF0YSB1bnJlYWRhYmxlIGRvIG5vdCByZWFzc2lnbiJ9LAotCXsweDAzMzEwMDAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwl7MHgwMzMxMDAwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCiAJICJNZWRpdW0gRXJyb3IsIG1lZGlhIGNvcnJ1cHRlZCJ9LAotCXsweDA0MDUwMDAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwl7MHgwNDA1MDAwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCiAJICJIYXJkd2FyZSBFcnJvciwgSU9BIGNhbid0IGNvbW11bmljYXRlIHdpdGggZGV2aWNlIn0sCiAJezB4MDQwODAwMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAogCSAiSGFyZHdhcmUgRXJyb3IsIGRldmljZSBidXMgZXJyb3IifSwKLQl7MHgwNDA4MDAwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJezB4MDQwODgwMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAogCSAiSGFyZHdhcmUgRXJyb3IsIGRldmljZSBidXMgaXMgbm90IGZ1bmN0aW9uaW5nIn0sCi0JezB4MDQxMTgwMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCXsweDA0MTE4MDAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKIAkgIkhhcmR3YXJlIEVycm9yLCBJT0EgcmVzZXJ2ZWQgYXJlYSBkYXRhIGNoZWNrIn0sCi0JezB4MDQxMTgxMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCXsweDA0MTE4MTAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKIAkgIkhhcmR3YXJlIEVycm9yLCBJT0EgcmVzZXJ2ZWQgYXJlYSBpbnZhbGlkIGRhdGEgcGF0dGVybiJ9LAotCXsweDA0MTE4MjAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwl7MHgwNDExODIwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCiAJICJIYXJkd2FyZSBFcnJvciwgSU9BIHJlc2VydmVkIGFyZWEgTFJDIGVycm9yIn0sCi0JezB4MDQzMjAwMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCXsweDA0MzIwMDAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKIAkgIkhhcmR3YXJlIEVycm9yLCByZWFzc2lnbm1lbnQgc3BhY2UgZXhoYXVzdGVkIn0sCi0JezB4MDQzMzAwMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCXsweDA0MzMwMDAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKIAkgIkhhcmR3YXJlIEVycm9yLCBkYXRhIHRyYW5zZmVyIHVuZGVybGVuZ3RoIGVycm9yIn0sCi0JezB4MDQzMzAwMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCXsweDA0MzMwMDAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKIAkgIkhhcmR3YXJlIEVycm9yLCBkYXRhIHRyYW5zZmVyIG92ZXJsZW5ndGggZXJyb3IifSwKIAl7MHgwNDQxODAwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCiAJICJIYXJkd2FyZSBFcnJvciwgUENJIGJ1cyBlcnJvciJ9LAotCXsweDA0NDQwMDAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwl7MHgwNDQ0MDAwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCiAJICJIYXJkd2FyZSBFcnJvciwgZGV2aWNlIGVycm9yIn0sCi0JezB4MDQ0NDgzMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCXsweDA0NDQ4MjAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkhhcmR3YXJlIEVycm9yLCBJT0EgZXJyb3IifSwKKwl7MHgwNDQ0ODMwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCiAJICJIYXJkd2FyZSBFcnJvciwgdW5kZWZpbmVkIGRldmljZSByZXNwb25zZSJ9LAotCXsweDA0NDQ4NDAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwl7MHgwNDQ0ODQwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCiAJICJIYXJkd2FyZSBFcnJvciwgSU9BIG1pY3JvY29kZSBlcnJvciJ9LAotCXsweDA0NDQ4NjAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwl7MHgwNDQ0ODYwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCiAJICJIYXJkd2FyZSBFcnJvciwgSU9BIHJlc2V0IHJlcXVpcmVkIn0sCi0JezB4MDQ0NDkyMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCXsweDA0NDQ5MjAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKIAkgIkhhcmR3YXJlIEVycm9yLCBoYXJkIENhY2hlIEZlYXJ1ZWUgQ2FyZCBCYXR0ZXJ5IGVycm9yIn0sCi0JezB4MDQ0NEEwMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCXsweDA0NDRBMDAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKIAkgIkhhcmR3YXJlIEVycm9yLCBmYWlsZWQgZGV2aWNlIGFsdGVyZWQifSwKLQl7MHgwNDQ0QTIwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJezB4MDQ0NEEyMDAsIElPQVNDX0xPR19MRVZFTF9IQVJELAogCSAiSGFyZHdhcmUgRXJyb3IsIGRhdGEgY2hlY2sgYWZ0ZXIgcmVhc3NpZ25tZW50In0sCi0JezB4MDQ0NEEzMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCXsweDA0NDRBMzAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKIAkgIkhhcmR3YXJlIEVycm9yLCBMUkMgZXJyb3IgYWZ0ZXIgcmVhc3NpZ25tZW50In0sCi0JezB4MDQ0QTAwMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCXsweDA0NEEwMDAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKIAkgIkhhcmR3YXJlIEVycm9yLCBkZXZpY2UgYnVzIGVycm9yIChtc2cvY21kIHBoYXNlKSJ9LAotCXsweDA0NjcwNDAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwl7MHgwNDY3MDQwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCiAJICJIYXJkd2FyZSBFcnJvciwgbmV3IGRldmljZSBjYW4ndCBiZSB1c2VkIn0sCi0JezB4MDQ2NzgwMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCXsweDA0Njc4MDAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKIAkgIkhhcmR3YXJlIEVycm9yLCBpbnZhbGlkIG11bHRpYWRhcHRlciBjb25maWd1cmF0aW9uIn0sCi0JezB4MDQ2NzgxMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCXsweDA0Njc4MTAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKIAkgIkhhcmR3YXJlIEVycm9yLCBpbmNvcnJlY3QgY29ubmVjdGlvbiBiZXR3ZWVuIGVuY2xvc3VyZXMifSwKLQl7MHgwNDY3ODIwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJezB4MDQ2NzgyMDAsIElPQVNDX0xPR19MRVZFTF9IQVJELAogCSAiSGFyZHdhcmUgRXJyb3IsIGNvbm5lY3Rpb25zIGV4Y2VlZCBJT0EgZGVzaWduIGxpbWl0cyJ9LAotCXsweDA0Njc4MzAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwl7MHgwNDY3ODMwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCiAJICJIYXJkd2FyZSBFcnJvciwgaW5jb3JyZWN0IG11bHRpcGF0aCBjb25uZWN0aW9uIn0sCi0JezB4MDQ2NzkwMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCXsweDA0Njc5MDAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKIAkgIkhhcmR3YXJlIEVycm9yLCBjb21tYW5kIHRvIExVTiBmYWlsZWQifSwKIAl7MHgwNjRDODAwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCiAJICJVbml0IEF0dGVudGlvbiwgY2FjaGUgZXhpc3RzIGZvciBtaXNzaW5nL2ZhaWxlZCBkZXZpY2UifSwKQEAgLTg0NSwxNSArOTE5LDE1IEBACiAJICJVbml0IEF0dGVudGlvbiwgaW5jb21wYXRpYmxlIGV4cG9zZWQgbW9kZSBkZXZpY2UifSwKIAl7MHgwNjY3MDYwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCiAJICJVbml0IEF0dGVudGlvbiwgYXR0YWNobWVudCBvZiBsb2dpY2FsIHVuaXQgZmFpbGVkIn0sCi0JezB4MDY2NzgwMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCXsweDA2Njc4MDAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKIAkgIlVuaXQgQXR0ZW50aW9uLCBjYWJsZXMgZXhjZWVkIGNvbm5lY3RpdmUgZGVzaWduIGxpbWl0In0sCi0JezB4MDY2NzgzMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCXsweDA2Njc4MzAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKIAkgIlVuaXQgQXR0ZW50aW9uLCBpbmNvbXBsZXRlIG11bHRpcGF0aCBjb25uZWN0aW9uIGJldHdlZW4iIFwKIAkgIklPQSBhbmQgZW5jbG9zdXJlIn0sCi0JezB4MDY2Nzg0MDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCXsweDA2Njc4NDAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKIAkgIlVuaXQgQXR0ZW50aW9uLCBpbmNvbXBsZXRlIG11bHRpcGF0aCBjb25uZWN0aW9uIGJldHdlZW4iIFwKIAkgImRldmljZSBhbmQgZW5jbG9zdXJlIn0sCi0JezB4MDY2Nzg1MDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCXsweDA2Njc4NTAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKIAkgIlVuaXQgQXR0ZW50aW9uLCBpbmNvbXBsZXRlIG11bHRpcGF0aCBjb25uZWN0aW9uIGJldHdlZW4iIFwKIAkgIklPQSBhbmQgcmVtb3RlIElPQSJ9LAogCXsweDA2Njc4NjAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKQEAgLTg2MywxMSArOTM3LDExIEBACiAJICJmdW5jdGlvbiJ9LAogCXsweDA2Njk4MjAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKIAkgIlVuaXQgQXR0ZW50aW9uLCBjb3JydXB0IGFycmF5IHBhcml0eSBkZXRlY3RlZCBvbiBkZXZpY2UifSwKLQl7MHgwNjZCMDIwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJezB4MDY2QjAyMDAsIElPQVNDX0xPR19MRVZFTF9IQVJELAogCSAiVW5pdCBBdHRlbnRpb24sIGFycmF5IGV4cG9zZWQifSwKIAl7MHgwNjZCODIwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCiAJICJVbml0IEF0dGVudGlvbiwgZXhwb3NlZCBhcnJheSBpcyBzdGlsbCBwcm90ZWN0ZWQifSwKLQl7MHgwNjZCOTIwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJezB4MDY2QjkyMDAsIElPQVNDX0xPR19MRVZFTF9IQVJELAogCSAiVW5pdCBBdHRlbnRpb24sIE11bHRpcGF0aCByZWR1bmRhbmN5IGxldmVsIGdvdCB3b3JzZSJ9LAogCXsweDA3MjcwMDAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKIAkgIkRhdGEgUHJvdGVjdCwgZGV2aWNlIGlzIHJlYWQvd3JpdGUgcHJvdGVjdGVkIGJ5IElPQSJ9LApAQCAtODc1LDM3ICs5NDksMzcgQEAKIAkgIkRhdGEgUHJvdGVjdCwgSU9BIGRvZXNuJ3Qgc3VwcG9ydCBkZXZpY2UgYXR0cmlidXRlIn0sCiAJezB4MDcyNzgxMDAsIElPQVNDX0xPR19MRVZFTF9IQVJELAogCSAiRGF0YSBQcm90ZWN0LCBOVlJBTSBtaXJyb3JpbmcgcHJvaGliaXRlZCJ9LAotCXsweDA3Mjc4NDAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwl7MHgwNzI3ODQwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCiAJICJEYXRhIFByb3RlY3QsIGFycmF5IGlzIHNob3J0IDIgb3IgbW9yZSBkZXZpY2VzIn0sCi0JezB4MDcyNzg2MDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCXsweDA3Mjc4NjAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKIAkgIkRhdGEgUHJvdGVjdCwgZXhwb3NlZCBhcnJheSBpcyBzaG9ydCBhIHJlcXVpcmVkIGRldmljZSJ9LAotCXsweDA3Mjc4NzAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwl7MHgwNzI3ODcwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCiAJICJEYXRhIFByb3RlY3QsIGFycmF5IG1lbWJlcnMgbm90IGF0IHJlcXVpcmVkIGFkZHJlc3NlcyJ9LAotCXsweDA3Mjc4ODAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwl7MHgwNzI3ODgwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCiAJICJEYXRhIFByb3RlY3QsIGV4cG9zZWQgbW9kZSBkZXZpY2UgcmVzb3VyY2UgYWRkcmVzcyBjb25mbGljdCJ9LAotCXsweDA3Mjc4OTAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwl7MHgwNzI3ODkwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCiAJICJEYXRhIFByb3RlY3QsIGluY29ycmVjdCByZXNvdXJjZSBhZGRyZXNzIG9mIGV4cG9zZWQgbW9kZSBkZXZpY2UifSwKLQl7MHgwNzI3OEEwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJezB4MDcyNzhBMDAsIElPQVNDX0xPR19MRVZFTF9IQVJELAogCSAiRGF0YSBQcm90ZWN0LCBBcnJheSBpcyBtaXNzaW5nIGEgZGV2aWNlIGFuZCBwYXJpdHkgaXMgb3V0IG9mIHN5bmMifSwKLQl7MHgwNzI3OEIwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJezB4MDcyNzhCMDAsIElPQVNDX0xPR19MRVZFTF9IQVJELAogCSAiRGF0YSBQcm90ZWN0LCBtYXhpbXVtIG51bWJlciBvZiBhcnJheXMgYWxyZWFkeSBleGlzdCJ9LAogCXsweDA3Mjc4QzAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKIAkgIkRhdGEgUHJvdGVjdCwgY2Fubm90IGxvY2F0ZSBjYWNoZSBkYXRhIGZvciBkZXZpY2UifSwKIAl7MHgwNzI3OEQwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCiAJICJEYXRhIFByb3RlY3QsIGNhY2hlIGRhdGEgZXhpdHMgZm9yIGEgY2hhbmdlZCBkZXZpY2UifSwKLQl7MHgwNzI3OTEwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJezB4MDcyNzkxMDAsIElPQVNDX0xPR19MRVZFTF9IQVJELAogCSAiRGF0YSBQcm90ZWN0LCBkZXRlY3Rpb24gb2YgYSBkZXZpY2UgcmVxdWlyaW5nIGZvcm1hdCJ9LAotCXsweDA3Mjc5MjAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwl7MHgwNzI3OTIwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCiAJICJEYXRhIFByb3RlY3QsIElPQSBleGNlZWRzIG1heGltdW0gbnVtYmVyIG9mIGRldmljZXMifSwKLQl7MHgwNzI3OTYwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJezB4MDcyNzk2MDAsIElPQVNDX0xPR19MRVZFTF9IQVJELAogCSAiRGF0YSBQcm90ZWN0LCBtaXNzaW5nIGFycmF5LCB2b2x1bWUgc2V0IGlzIG5vdCBmdW5jdGlvbmFsIn0sCi0JezB4MDcyNzk3MDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCXsweDA3Mjc5NzAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKIAkgIkRhdGEgUHJvdGVjdCwgc2luZ2xlIGRldmljZSBmb3IgYSB2b2x1bWUgc2V0In0sCi0JezB4MDcyNzk4MDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCXsweDA3Mjc5ODAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKIAkgIkRhdGEgUHJvdGVjdCwgbWlzc2luZyBtdWx0aXBsZSBkZXZpY2VzIGZvciBhIHZvbHVtZSBzZXQifSwKIAl7MHgwNzI3OTkwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCiAJICJEYXRhIFByb3RlY3QsIG1heGltdW0gbnVtYmVyIG9mIHZvbHVtZW50IHNldHMgYWxyZWFkeSBleGlzdHMifSwKLQl7MHgwNzI3OUEwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJezB4MDcyNzlBMDAsIElPQVNDX0xPR19MRVZFTF9IQVJELAogCSAiRGF0YSBQcm90ZWN0LCBvdGhlciB2b2x1bWUgc2V0IHByb2JsZW0ifSwKIH07CiAKQEAgLTk1MiwyNyArMTAyNiw2IEBACiAKICNkZWZpbmUgUE1DUkFJRF9JT0NUTF9TSUdOQVRVUkUgICAgICAiUE1DUkFJRCIKIAotCi0vKgotICogcG1jcmFpZF9ldmVudF9kZXRhaWxzIC0gZGVmaW5lcyBBRU4gZGV0YWlscyB0aGF0IGFwcHMgY2FuIHJldHJpZXZlIGZyb20gTExECi0gKgotICogLnJjYl9jY24gLSBjb21wbGV0ZSBSQ0Igb2YgQ0NOCi0gKiAucmNiX2xkbiAtIGNvbXBsZXRlIFJDQiBvZiBDQ04KLSAqLwotc3RydWN0IHBtY3JhaWRfZXZlbnRfZGV0YWlscyB7Ci0Jc3RydWN0IHBtY3JhaWRfaGNhbV9jY24gcmNiX2NjbjsKLQlzdHJ1Y3QgcG1jcmFpZF9oY2FtX2xkbiByY2JfbGRuOwotfTsKLQotLyoKLSAqIHBtY3JhaWRfZHJpdmVyX2lvY3RsX2J1ZmZlciAtIHN0cnVjdHVyZSBwYXNzZWQgYXMgYXJndW1lbnQgdG8gbW9zdCBvZiB0aGUKLSAqIFBNQyBkcml2ZXIgaGFuZGxlZCBpb2N0bHMuCi0gKi8KLXN0cnVjdCBwbWNyYWlkX2RyaXZlcl9pb2N0bF9idWZmZXIgewotCXN0cnVjdCBwbWNyYWlkX2lvY3RsX2hlYWRlciBpb2N0bF9oZWFkZXI7Ci0Jc3RydWN0IHBtY3JhaWRfZXZlbnRfZGV0YWlscyBldmVudF9kZXRhaWxzOwotfTsKLQogLyoKICAqIHBtY3JhaWRfcGFzc3Rocm91Z2hfaW9jdGxfYnVmZmVyIC0gc3RydWN0dXJlIGdpdmVuIGFzIGFyZ3VtZW50IHRvCiAgKiBwYXNzdGhyb3VnaChvciBmaXJtd2FyZSBoYW5kbGVkKSBJT0NUTCBjb21tYW5kcy4gTm90ZSB0aGF0IGlvYXJjYiByZXF1aXJlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKaW5kZXggMWU0Y2FmYS4uNDIwMjM4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwOCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCkBAIC0xMTg3LDYgKzExODcsMjEgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKK3FsYTJ4MDBfb3B0cm9tX2dvbGRfZndfdmVyc2lvbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKyAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXNjc2lfcWxhX2hvc3RfdCAqdmhhID0gc2hvc3RfcHJpdihjbGFzc190b19zaG9zdChkZXYpKTsKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKworCWlmICghSVNfUUxBODFYWChoYSkpCisJCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIlxuIik7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZC4lMDJkLiUwMmQgKCVkKVxuIiwKKwkgICAgaGEtPmdvbGRfZndfdmVyc2lvblswXSwgaGEtPmdvbGRfZndfdmVyc2lvblsxXSwKKwkgICAgaGEtPmdvbGRfZndfdmVyc2lvblsyXSwgaGEtPmdvbGRfZndfdmVyc2lvblszXSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CiBxbGEyeDAwX3RvdGFsX2lzcF9hYm9ydHNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtMTIwOCw3ICsxMjIzLDcgQEAKIAlpZiAoIUlTX1FMQTg0WFgoaGEpKQogCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJcbiIpOwogCi0JaWYgKGhhLT5jczg0eHggJiYgaGEtPmNzODR4eC0+b3BfZndfdmVyc2lvbiA9PSAwKQorCWlmIChoYS0+Y3M4NHh4LT5vcF9md192ZXJzaW9uID09IDApCiAJCXJ2YWwgPSBxbGE4NHh4X3ZlcmlmeV9jaGlwKHZoYSwgc3RhdHVzKTsKIAogCWlmICgocnZhbCA9PSBRTEFfU1VDQ0VTUykgJiYgKHN0YXR1c1swXSA9PSAwKSkKQEAgLTEzMzYsNiArMTM1MSw4IEBACiAJCSAgIHFsYTJ4MDBfb3B0cm9tX2Zjb2RlX3ZlcnNpb25fc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIob3B0cm9tX2Z3X3ZlcnNpb24sIFNfSVJVR08sIHFsYTJ4MDBfb3B0cm9tX2Z3X3ZlcnNpb25fc2hvdywKIAkJICAgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIob3B0cm9tX2dvbGRfZndfdmVyc2lvbiwgU19JUlVHTywKKyAgICBxbGEyeDAwX29wdHJvbV9nb2xkX2Z3X3ZlcnNpb25fc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoODR4eF9md192ZXJzaW9uLCBTX0lSVUdPLCBxbGEyNHh4Xzg0eHhfZndfdmVyc2lvbl9zaG93LAogCQkgICBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUih0b3RhbF9pc3BfYWJvcnRzLCBTX0lSVUdPLCBxbGEyeDAwX3RvdGFsX2lzcF9hYm9ydHNfc2hvdywKQEAgLTEzNzYsNiArMTM5Myw3IEBACiAJJmRldl9hdHRyX3ZuX3BvcnRfbWFjX2FkZHJlc3MsCiAJJmRldl9hdHRyX2ZhYnJpY19wYXJhbSwKIAkmZGV2X2F0dHJfZndfc3RhdGUsCisJJmRldl9hdHRyX29wdHJvbV9nb2xkX2Z3X3ZlcnNpb24sCiAJTlVMTCwKIH07CiAKQEAgLTE3MzIsNyArMTc1MCw3IEBACiAJCQlmY192cG9ydF9zZXRfc3RhdGUoZmNfdnBvcnQsIEZDX1ZQT1JUX0xJTktET1dOKTsKIAl9CiAKLQlpZiAoSVNfUUxBMjVYWChoYSkgJiYgcWwyeGVuYWJsZWRpZikgeworCWlmICgoSVNfUUxBMjVYWChoYSkgfHwgSVNfUUxBODFYWChoYSkpICYmIHFsMnhlbmFibGVkaWYpIHsKIAkJaWYgKGhhLT5md19hdHRyaWJ1dGVzICYgQklUXzQpIHsKIAkJCXZoYS0+ZmxhZ3MuZGlmZGl4X3N1cHBvcnRlZCA9IDE7CiAJCQlERUJVRzE4KHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKQEAgLTE3NDAsOCArMTc1OCwxMCBAQAogCQkJICAgICIgcHJvdGVjdGlvbi5cbiIpKTsKIAkJCXNjc2lfaG9zdF9zZXRfcHJvdCh2aGEtPmhvc3QsCiAJCQkgICAgU0hPU1RfRElGX1RZUEUxX1BST1RFQ1RJT04KKwkJCSAgICB8IFNIT1NUX0RJRl9UWVBFMl9QUk9URUNUSU9OCiAJCQkgICAgfCBTSE9TVF9ESUZfVFlQRTNfUFJPVEVDVElPTgogCQkJICAgIHwgU0hPU1RfRElYX1RZUEUxX1BST1RFQ1RJT04KKwkJCSAgICB8IFNIT1NUX0RJWF9UWVBFMl9QUk9URUNUSU9OCiAJCQkgICAgfCBTSE9TVF9ESVhfVFlQRTNfUFJPVEVDVElPTik7CiAJCQlzY3NpX2hvc3Rfc2V0X2d1YXJkKHZoYS0+aG9zdCwgU0hPU1RfRElYX0dVQVJEX0NSQyk7CiAJCX0gZWxzZQpAQCAtMTgwOSw3ICsxODI5LDYgQEAKIHFsYTI0eHhfdnBvcnRfZGVsZXRlKHN0cnVjdCBmY192cG9ydCAqZmNfdnBvcnQpCiB7CiAJc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBmY192cG9ydC0+ZGRfZGF0YTsKLQlmY19wb3J0X3QgKmZjcG9ydCwgKnRmY3BvcnQ7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAJdWludDE2X3QgaWQgPSB2aGEtPnZwX2lkeDsKIApAQCAtMTgyMywxMSArMTg0Miw3IEBACiAKIAlzY3NpX3JlbW92ZV9ob3N0KHZoYS0+aG9zdCk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZmNwb3J0LCB0ZmNwb3J0LCAmdmhhLT52cF9mY3BvcnRzLCBsaXN0KSB7Ci0JCWxpc3RfZGVsKCZmY3BvcnQtPmxpc3QpOwotCQlrZnJlZShmY3BvcnQpOwotCQlmY3BvcnQgPSBOVUxMOwotCX0KKwlxbGEyeDAwX2ZyZWVfZmNwb3J0cyh2aGEpOwogCiAJcWxhMjR4eF9kZWFsbG9jYXRlX3ZwX2lkKHZoYSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ic2cuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ic2cuYwppbmRleCBiOTA1ZGZlLi45MDY3NjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYnNnLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2JzZy5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwOCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCkBAIC00MSwxMyArNDEsMjggQEAKIAlpbnQgaSwgcmV0LCBudW1fdmFsaWQ7CiAJdWludDhfdCAqYmNvZGU7CiAJc3RydWN0IHFsYV9mY3BfcHJpb19lbnRyeSAqcHJpX2VudHJ5OworCXVpbnQzMl90ICpiY29kZV92YWxfcHRyLCBiY29kZV92YWw7CiAKIAlyZXQgPSAxOwogCW51bV92YWxpZCA9IDA7CiAJYmNvZGUgPSAodWludDhfdCAqKXByaV9jZmc7CisJYmNvZGVfdmFsX3B0ciA9ICh1aW50MzJfdCAqKXByaV9jZmc7CisJYmNvZGVfdmFsID0gKHVpbnQzMl90KSgqYmNvZGVfdmFsX3B0cik7CiAKLQlpZiAoYmNvZGVbMHgwXSAhPSAnSCcgfHwgYmNvZGVbMHgxXSAhPSAnUScgfHwgYmNvZGVbMHgyXSAhPSAnTycgfHwKLQkJCWJjb2RlWzB4M10gIT0gJ1MnKSB7CisJaWYgKGJjb2RlX3ZhbCA9PSAweEZGRkZGRkZGKSB7CisJCS8qIE5vIEZDUCBQcmlvcml0eSBjb25maWcgZGF0YSBpbiBmbGFzaCAqLworCQlERUJVRzIocHJpbnRrKEtFUk5fSU5GTworCQkgICAgIiVzOiBObyBGQ1AgcHJpb3JpdHkgY29uZmlnIGRhdGEuXG4iLAorCQkgICAgX19mdW5jX18pKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGJjb2RlWzBdICE9ICdIJyB8fCBiY29kZVsxXSAhPSAnUScgfHwgYmNvZGVbMl0gIT0gJ08nIHx8CisJCQliY29kZVszXSAhPSAnUycpIHsKKwkJLyogSW52YWxpZCBGQ1AgcHJpb3JpdHkgZGF0YSBoZWFkZXIqLworCQlERUJVRzIocHJpbnRrKEtFUk5fRVJSCisJCSAgICAiJXM6IEludmFsaWQgRkNQIFByaW9yaXR5IGRhdGEgaGVhZGVyLiBiY29kZT0weCV4XG4iLAorCQkgICAgX19mdW5jX18sIGJjb2RlX3ZhbCkpOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKGZsYWcgIT0gMSkKQEAgLTYwLDggKzc1LDE4IEBACiAJCXByaV9lbnRyeSsrOwogCX0KIAotCWlmIChudW1fdmFsaWQgPT0gMCkKKwlpZiAobnVtX3ZhbGlkID09IDApIHsKKwkJLyogTm8gdmFsaWQgRkNQIHByaW9yaXR5IGRhdGEgZW50cmllcyAqLworCQlERUJVRzIocHJpbnRrKEtFUk5fRVJSCisJCSAgICAiJXM6IE5vIHZhbGlkIEZDUCBQcmlvcml0eSBkYXRhIGVudHJpZXMuXG4iLAorCQkgICAgX19mdW5jX18pKTsKIAkJcmV0ID0gMDsKKwl9IGVsc2UgeworCQkvKiBGQ1AgcHJpb3JpdHkgZGF0YSBpcyB2YWxpZCAqLworCQlERUJVRzIocHJpbnRrKEtFUk5fSU5GTworCQkgICAgIiVzOiBWYWxpZCBGQ1AgcHJpb3JpdHkgZGF0YS4gbnVtIGVudHJpZXMgPSAlZFxuIiwKKwkJICAgIF9fZnVuY19fLCBudW1fdmFsaWQpKTsKKwl9CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNzgsNiArMTAzLDExIEBACiAKIAlic2dfam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKIAorCWlmICghSVNfUUxBMjRYWF9UWVBFKGhhKSB8fCAhSVNfUUxBMjVYWChoYSkpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBleGl0X2ZjcF9wcmlvX2NmZzsKKwl9CisKIAlpZiAodGVzdF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKSB8fAogCQl0ZXN0X2JpdChBQk9SVF9JU1BfQUNUSVZFLCAmdmhhLT5kcGNfZmxhZ3MpIHx8CiAJCXRlc3RfYml0KElTUF9BQk9SVF9SRVRSWSwgJnZoYS0+ZHBjX2ZsYWdzKSkgewpAQCAtMTk5LDcgKzIyOSw3IEBACiBxbGEyeDAwX3Byb2Nlc3NfZWxzKHN0cnVjdCBmY19ic2dfam9iICpic2dfam9iKQogewogCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQ7Ci0JZmNfcG9ydF90ICpmY3BvcnQ7CisJZmNfcG9ydF90ICpmY3BvcnQgPSBOVUxMOwogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CiAJc2NzaV9xbGFfaG9zdF90ICp2aGE7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYTsKQEAgLTIxMCw2ICsyNDAsMjkgQEAKIAl1aW50MTZfdCBuZXh0bGlkID0gMDsKIAlzdHJ1Y3Qgc3JiX2N0eCAqZWxzOwogCisJaWYgKGJzZ19qb2ItPnJlcXVlc3QtPm1zZ2NvZGUgPT0gRkNfQlNHX1JQVF9FTFMpIHsKKwkJcnBvcnQgPSBic2dfam9iLT5ycG9ydDsKKwkJZmNwb3J0ID0gKihmY19wb3J0X3QgKiopIHJwb3J0LT5kZF9kYXRhOworCQlob3N0ID0gcnBvcnRfdG9fc2hvc3QocnBvcnQpOworCQl2aGEgPSBzaG9zdF9wcml2KGhvc3QpOworCQloYSA9IHZoYS0+aHc7CisJCXR5cGUgPSAiRkNfQlNHX1JQVF9FTFMiOworCX0gZWxzZSB7CisJCWhvc3QgPSBic2dfam9iLT5zaG9zdDsKKwkJdmhhID0gc2hvc3RfcHJpdihob3N0KTsKKwkJaGEgPSB2aGEtPmh3OworCQl0eXBlID0gIkZDX0JTR19IU1RfRUxTX05PTE9HSU4iOworCX0KKworCS8qIHBhc3MgdGhyb3VnaCBpcyBzdXBwb3J0ZWQgb25seSBmb3IgSVNQIDRHYiBvciBoaWdoZXIgKi8KKwlpZiAoIUlTX0ZXSTJfQ0FQQUJMRShoYSkpIHsKKwkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkJICAgICJzY3NpKCVsZCk6RUxTIHBhc3N0aHJ1IG5vdCBzdXBwb3J0ZWQgZm9yIElTUDIzeHggYmFzZWQgIgorCQkgICAgImFkYXB0ZXJzXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcnZhbCA9IC1FUEVSTTsKKwkJZ290byBkb25lOworCX0KKwogCS8qICBNdWx0aXBsZSBTRydzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBFTFMgcmVxdWVzdHMgKi8KIAlpZiAoYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCA+IDEgfHwKIAkJYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQgPiAxKSB7CkBAIC0yMjQsMTMgKzI3Nyw2IEBACiAKIAkvKiBFTFMgcmVxdWVzdCBmb3IgcnBvcnQgKi8KIAlpZiAoYnNnX2pvYi0+cmVxdWVzdC0+bXNnY29kZSA9PSBGQ19CU0dfUlBUX0VMUykgewotCQlycG9ydCA9IGJzZ19qb2ItPnJwb3J0OwotCQlmY3BvcnQgPSAqKGZjX3BvcnRfdCAqKikgcnBvcnQtPmRkX2RhdGE7Ci0JCWhvc3QgPSBycG9ydF90b19zaG9zdChycG9ydCk7Ci0JCXZoYSA9IHNob3N0X3ByaXYoaG9zdCk7Ci0JCWhhID0gdmhhLT5odzsKLQkJdHlwZSA9ICJGQ19CU0dfUlBUX0VMUyI7Ci0KIAkJLyogbWFrZSBzdXJlIHRoZSBycG9ydCBpcyBsb2dnZWQgaW4sCiAJCSAqIGlmIG5vdCBwZXJmb3JtIGZhYnJpYyBsb2dpbgogCQkgKi8KQEAgLTI0MiwxMSArMjg4LDYgQEAKIAkJCWdvdG8gZG9uZTsKIAkJfQogCX0gZWxzZSB7Ci0JCWhvc3QgPSBic2dfam9iLT5zaG9zdDsKLQkJdmhhID0gc2hvc3RfcHJpdihob3N0KTsKLQkJaGEgPSB2aGEtPmh3OwotCQl0eXBlID0gIkZDX0JTR19IU1RfRUxTX05PTE9HSU4iOwotCiAJCS8qIEFsbG9jYXRlIGEgZHVtbXkgZmNwb3J0IHN0cnVjdHVyZSwgc2luY2UgZnVuY3Rpb25zCiAJCSAqIHByZXBhcmluZyB0aGUgSU9DQiBhbmQgbWFpbGJveCBjb21tYW5kIHJldHJpZXZlcyBwb3J0CiAJCSAqIHNwZWNpZmljIGluZm9ybWF0aW9uIGZyb20gZmNwb3J0IHN0cnVjdHVyZS4gRm9yIEhvc3QgYmFzZWQKQEAgLTM2NiwxNSArNDA3LDYgQEAKIAljaGFyICAqdHlwZSA9ICJGQ19CU0dfSFNUX0NUIjsKIAlzdHJ1Y3Qgc3JiX2N0eCAqY3Q7CiAKLQkvKiBwYXNzIHRocm91Z2ggaXMgc3VwcG9ydGVkIG9ubHkgZm9yIElTUCA0R2Igb3IgaGlnaGVyICovCi0JaWYgKCFJU19GV0kyX0NBUEFCTEUoaGEpKSB7Ci0JCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCSAgICAic2NzaSglbGQpOkZpcm13YXJlIGlzIG5vdCBjYXBhYmxlIHRvIHN1cHBvcnQgRkMgIgotCQkgICAgIkNUIHBhc3MgdGhydVxuIiwgdmhhLT5ob3N0X25vKSk7Ci0JCXJ2YWwgPSAtRVBFUk07Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KIAlyZXFfc2dfY250ID0KIAkJZG1hX21hcF9zZygmaGEtPnBkZXYtPmRldiwgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCiAJCQlic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKQEAgLTQ4Myw2ICs1MTUsOTggQEAKIAlyZXR1cm4gcnZhbDsKIH0KIAorLyogU2V0IHRoZSBwb3J0IGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlIHRoZQorICogaW50ZXJuYWwgbG9vcGJhY2sgb24gSVNQODFYWAorICovCitzdGF0aWMgaW5saW5lIGludAorcWxhODF4eF9zZXRfaW50ZXJuYWxfbG9vcGJhY2soc2NzaV9xbGFfaG9zdF90ICp2aGEsIHVpbnQxNl90ICpjb25maWcsCisgICAgdWludDE2X3QgKm5ld19jb25maWcpCit7CisJaW50IHJldCA9IDA7CisJaW50IHJ2YWwgPSAwOworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCisJaWYgKCFJU19RTEE4MVhYKGhhKSkKKwkJZ290byBkb25lX3NldF9pbnRlcm5hbDsKKworCW5ld19jb25maWdbMF0gPSBjb25maWdbMF0gfCAoRU5BQkxFX0lOVEVSTkFMX0xPT1BCQUNLIDw8IDEpOworCW1lbWNweSgmbmV3X2NvbmZpZ1sxXSwgJmNvbmZpZ1sxXSwgc2l6ZW9mKHVpbnQxNl90KSAqIDMpIDsKKworCWhhLT5ub3RpZnlfZGNieF9jb21wID0gMTsKKwlyZXQgPSBxbGE4MXh4X3NldF9wb3J0X2NvbmZpZyh2aGEsIG5ld19jb25maWcpOworCWlmIChyZXQgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJREVCVUcyKHByaW50ayhLRVJOX0VSUgorCQkgICAgIiVzKCVsdSk6IFNldCBwb3J0IGNvbmZpZyBmYWlsZWRcbiIsCisJCSAgICBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCWhhLT5ub3RpZnlfZGNieF9jb21wID0gMDsKKwkJcnZhbCA9IC1FSU5WQUw7CisJCWdvdG8gZG9uZV9zZXRfaW50ZXJuYWw7CisJfQorCisJLyogV2FpdCBmb3IgRENCWCBjb21wbGV0ZSBldmVudCAqLworCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZoYS0+ZGNieF9jb21wLCAoMjAgKiBIWikpKSB7CisJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCSAgICAiU3RhdGUgY2hhbmdlIG5vdGlmaWNhaXRpb24gbm90IHJlY2VpdmVkLlxuIikpOworCX0gZWxzZQorCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkgICAgIlN0YXRlIGNoYW5nZSBSRUNFSVZFRFxuIikpOworCisJaGEtPm5vdGlmeV9kY2J4X2NvbXAgPSAwOworCitkb25lX3NldF9pbnRlcm5hbDoKKwlyZXR1cm4gcnZhbDsKK30KKworLyogU2V0IHRoZSBwb3J0IGNvbmZpZ3VyYXRpb24gdG8gZGlzYWJsZSB0aGUKKyAqIGludGVybmFsIGxvb3BiYWNrIG9uIElTUDgxWFgKKyAqLworc3RhdGljIGlubGluZSBpbnQKK3FsYTgxeHhfcmVzZXRfaW50ZXJuYWxfbG9vcGJhY2soc2NzaV9xbGFfaG9zdF90ICp2aGEsIHVpbnQxNl90ICpjb25maWcsCisgICAgaW50IHdhaXQpCit7CisJaW50IHJldCA9IDA7CisJaW50IHJ2YWwgPSAwOworCXVpbnQxNl90IG5ld19jb25maWdbNF07CisJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CisKKwlpZiAoIUlTX1FMQTgxWFgoaGEpKQorCQlnb3RvIGRvbmVfcmVzZXRfaW50ZXJuYWw7CisKKwltZW1zZXQobmV3X2NvbmZpZywgMCAsIHNpemVvZihuZXdfY29uZmlnKSk7CisJaWYgKChjb25maWdbMF0gJiBJTlRFUk5BTF9MT09QQkFDS19NQVNLKSA+PiAxID09CisJCQlFTkFCTEVfSU5URVJOQUxfTE9PUEJBQ0spIHsKKwkJbmV3X2NvbmZpZ1swXSA9IGNvbmZpZ1swXSAmIH5JTlRFUk5BTF9MT09QQkFDS19NQVNLOworCQltZW1jcHkoJm5ld19jb25maWdbMV0sICZjb25maWdbMV0sIHNpemVvZih1aW50MTZfdCkgKiAzKSA7CisKKwkJaGEtPm5vdGlmeV9kY2J4X2NvbXAgPSB3YWl0OworCQlyZXQgPSBxbGE4MXh4X3NldF9wb3J0X2NvbmZpZyh2aGEsIG5ld19jb25maWcpOworCQlpZiAocmV0ICE9IFFMQV9TVUNDRVNTKSB7CisJCQlERUJVRzIocHJpbnRrKEtFUk5fRVJSCisJCQkgICAgIiVzKCVsdSk6IFNldCBwb3J0IGNvbmZpZyBmYWlsZWRcbiIsCisJCQkgICAgIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJCWhhLT5ub3RpZnlfZGNieF9jb21wID0gMDsKKwkJCXJ2YWwgPSAtRUlOVkFMOworCQkJZ290byBkb25lX3Jlc2V0X2ludGVybmFsOworCQl9CisKKwkJLyogV2FpdCBmb3IgRENCWCBjb21wbGV0ZSBldmVudCAqLworCQlpZiAod2FpdCAmJiAhd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZoYS0+ZGNieF9jb21wLAorCQkJKDIwICogSFopKSkgeworCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCSAgICAiU3RhdGUgY2hhbmdlIG5vdGlmaWNhaXRpb24gbm90IHJlY2VpdmVkLlxuIikpOworCQkJaGEtPm5vdGlmeV9kY2J4X2NvbXAgPSAwOworCQkJcnZhbCA9IC1FSU5WQUw7CisJCQlnb3RvIGRvbmVfcmVzZXRfaW50ZXJuYWw7CisJCX0gZWxzZQorCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkJCSAgICAiU3RhdGUgY2hhbmdlIFJFQ0VJVkVEXG4iKSk7CisKKwkJaGEtPm5vdGlmeV9kY2J4X2NvbXAgPSAwOworCX0KK2RvbmVfcmVzZXRfaW50ZXJuYWw6CisJcmV0dXJuIHJ2YWw7Cit9CisKIHN0YXRpYyBpbnQKIHFsYTJ4MDBfcHJvY2Vzc19sb29wYmFjayhzdHJ1Y3QgZmNfYnNnX2pvYiAqYnNnX2pvYikKIHsKQEAgLTQ5NCw2ICs2MTgsNyBAQAogCWNoYXIgKnR5cGU7CiAJc3RydWN0IG1zZ19lY2hvX2xiIGVscmVxOwogCXVpbnQxNl90IHJlc3BvbnNlW01BSUxCT1hfUkVHSVNURVJfQ09VTlRdOworCXVpbnQxNl90IGNvbmZpZ1s0XSwgbmV3X2NvbmZpZ1s0XTsKIAl1aW50OF90ICpmd19zdHNfcHRyOwogCXVpbnQ4X3QgKnJlcV9kYXRhID0gTlVMTDsKIAlkbWFfYWRkcl90IHJlcV9kYXRhX2RtYTsKQEAgLTU2OCwyOSArNjkzLDEwMiBAQAogCiAJZWxyZXEub3B0aW9ucyA9IGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kWzFdOwogCi0JaWYgKGhhLT5jdXJyZW50X3RvcG9sb2d5ICE9IElTUF9DRkdfRikgewotCQl0eXBlID0gIkZDX0JTR19IU1RfVkVORE9SX0xPT1BCQUNLIjsKLQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCSJzY3NpKCVsZCkgYnNnIHJxc3QgdHlwZTogJXNcbiIsCi0JCQl2aGEtPmhvc3Rfbm8sIHR5cGUpKTsKLQotCQljb21tYW5kX3NlbnQgPSBJTlRfREVGX0xCX0xPT1BCQUNLX0NNRDsKLQkJcnZhbCA9IHFsYTJ4MDBfbG9vcGJhY2tfdGVzdCh2aGEsICZlbHJlcSwgcmVzcG9uc2UpOwotCQlpZiAoSVNfUUxBODFYWChoYSkpIHsKLQkJCWlmIChyZXNwb25zZVswXSA9PSBNQlNfQ09NTUFORF9FUlJPUiAmJgotCQkJCXJlc3BvbnNlWzFdID09IE1CU19MQl9SRVNFVCkgewotCQkJCURFQlVHMihwcmludGsoS0VSTl9FUlIgIiVzKCVsZCk6IEFCT1JUaW5nICIKLQkJCQkiSVNQXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7Ci0JCQkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOwotCQkJCXFsYTJ4eHhfd2FrZV9kcGModmhhKTsKLQkJCX0KLQkJfQotCX0gZWxzZSB7CisJaWYgKChoYS0+Y3VycmVudF90b3BvbG9neSA9PSBJU1BfQ0ZHX0YgfHwKKwkgICAgKElTX1FMQTgxWFgoaGEpICYmCisJICAgIGxlMzJfdG9fY3B1KCoodWludDMyX3QgKilyZXFfZGF0YSkgPT0gRUxTX09QQ09ERV9CWVRFCisJICAgICYmIHJlcV9kYXRhX2xlbiA9PSBNQVhfRUxTX0ZSQU1FX1BBWUxPQUQpKSAmJgorCQllbHJlcS5vcHRpb25zID09IEVYVEVSTkFMX0xPT1BCQUNLKSB7CiAJCXR5cGUgPSAiRkNfQlNHX0hTVF9WRU5ET1JfRUNIT19ESUFHIjsKIAkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJICAgICJzY3NpKCVsZCkgYnNnIHJxc3QgdHlwZTogJXNcbiIsIHZoYS0+aG9zdF9ubywgdHlwZSkpOworCQkJInNjc2koJWxkKSBic2cgcnFzdCB0eXBlOiAlc1xuIiwgdmhhLT5ob3N0X25vLCB0eXBlKSk7CiAJCWNvbW1hbmRfc2VudCA9IElOVF9ERUZfTEJfRUNIT19DTUQ7CiAJCXJ2YWwgPSBxbGEyeDAwX2VjaG9fdGVzdCh2aGEsICZlbHJlcSwgcmVzcG9uc2UpOworCX0gZWxzZSB7CisJCWlmIChJU19RTEE4MVhYKGhhKSkgeworCQkJbWVtc2V0KGNvbmZpZywgMCwgc2l6ZW9mKGNvbmZpZykpOworCQkJbWVtc2V0KG5ld19jb25maWcsIDAsIHNpemVvZihuZXdfY29uZmlnKSk7CisJCQlpZiAocWxhODF4eF9nZXRfcG9ydF9jb25maWcodmhhLCBjb25maWcpKSB7CisJCQkJREVCVUcyKHByaW50ayhLRVJOX0VSUgorCQkJCQkiJXMoJWx1KTogR2V0IHBvcnQgY29uZmlnIGZhaWxlZFxuIiwKKwkJCQkJX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQkJCWJzZ19qb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOworCQkJCWJzZ19qb2ItPnJlcGx5LT5yZXN1bHQgPSAoRElEX0VSUk9SIDw8IDE2KTsKKwkJCQlydmFsID0gLUVQRVJNOworCQkJCWdvdG8gZG9uZV9mcmVlX2RtYV9yZXE7CisJCQl9CisKKwkJCWlmIChlbHJlcS5vcHRpb25zICE9IEVYVEVSTkFMX0xPT1BCQUNLKSB7CisJCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkJCQkJIkludGVybmFsOiBjdXJyZW50IHBvcnQgY29uZmlnID0gJXhcbiIsCisJCQkJCWNvbmZpZ1swXSkpOworCQkJCWlmIChxbGE4MXh4X3NldF9pbnRlcm5hbF9sb29wYmFjayh2aGEsIGNvbmZpZywKKwkJCQkJbmV3X2NvbmZpZykpIHsKKwkJCQkJYnNnX2pvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9CisJCQkJCQkwOworCQkJCQlic2dfam9iLT5yZXBseS0+cmVzdWx0ID0KKwkJCQkJCShESURfRVJST1IgPDwgMTYpOworCQkJCQlydmFsID0gLUVQRVJNOworCQkJCQlnb3RvIGRvbmVfZnJlZV9kbWFfcmVxOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogRm9yIGV4dGVybmFsIGxvb3BiYWNrIHRvIHdvcmsKKwkJCQkgKiBlbnN1cmUgaW50ZXJuYWwgbG9vcGJhY2sgaXMgZGlzYWJsZWQKKwkJCQkgKi8KKwkJCQlpZiAocWxhODF4eF9yZXNldF9pbnRlcm5hbF9sb29wYmFjayh2aGEsCisJCQkJCWNvbmZpZywgMSkpIHsKKwkJCQkJYnNnX2pvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9CisJCQkJCQkwOworCQkJCQlic2dfam9iLT5yZXBseS0+cmVzdWx0ID0KKwkJCQkJCShESURfRVJST1IgPDwgMTYpOworCQkJCQlydmFsID0gLUVQRVJNOworCQkJCQlnb3RvIGRvbmVfZnJlZV9kbWFfcmVxOworCQkJCX0KKwkJCX0KKworCQkJdHlwZSA9ICJGQ19CU0dfSFNUX1ZFTkRPUl9MT09QQkFDSyI7CisJCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkJCSJzY3NpKCVsZCkgYnNnIHJxc3QgdHlwZTogJXNcbiIsCisJCQkJdmhhLT5ob3N0X25vLCB0eXBlKSk7CisKKwkJCWNvbW1hbmRfc2VudCA9IElOVF9ERUZfTEJfTE9PUEJBQ0tfQ01EOworCQkJcnZhbCA9IHFsYTJ4MDBfbG9vcGJhY2tfdGVzdCh2aGEsICZlbHJlcSwgcmVzcG9uc2UpOworCisJCQlpZiAobmV3X2NvbmZpZ1sxXSkgeworCQkJCS8qIFJldmVydCBiYWNrIHRvIG9yaWdpbmFsIHBvcnQgY29uZmlnCisJCQkJICogQWxzbyBjbGVhciBpbnRlcm5hbCBsb29wYmFjaworCQkJCSAqLworCQkJCXFsYTgxeHhfcmVzZXRfaW50ZXJuYWxfbG9vcGJhY2sodmhhLAorCQkJCSAgICBuZXdfY29uZmlnLCAwKTsKKwkJCX0KKworCQkJaWYgKHJlc3BvbnNlWzBdID09IE1CU19DT01NQU5EX0VSUk9SICYmCisJCQkJCXJlc3BvbnNlWzFdID09IE1CU19MQl9SRVNFVCkgeworCQkJCURFQlVHMihwcmludGsoS0VSTl9FUlIgIiVzKCVsZCk6IEFCT1JUaW5nICIKKwkJCQkJIklTUFxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQkJCXNldF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKKwkJCQlxbGEyeHh4X3dha2VfZHBjKHZoYSk7CisJCQkJcWxhMngwMF93YWl0X2Zvcl9jaGlwX3Jlc2V0KHZoYSk7CisJCQkJLyogQWxzbyByZXNldCB0aGUgTVBJICovCisJCQkJaWYgKHFsYTgxeHhfcmVzdGFydF9tcGlfZmlybXdhcmUodmhhKSAhPQorCQkJCSAgICBRTEFfU1VDQ0VTUykgeworCQkJCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCQkJCSAgICAiTVBJIHJlc2V0IGZhaWxlZCBmb3IgaG9zdCVsZC5cbiIsCisJCQkJCSAgICB2aGEtPmhvc3Rfbm8pOworCQkJCX0KKworCQkJCWJzZ19qb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOworCQkJCWJzZ19qb2ItPnJlcGx5LT5yZXN1bHQgPSAoRElEX0VSUk9SIDw8IDE2KTsKKwkJCQlydmFsID0gLUVJTzsKKwkJCQlnb3RvIGRvbmVfZnJlZV9kbWFfcmVxOworCQkJfQorCQl9IGVsc2UgeworCQkJdHlwZSA9ICJGQ19CU0dfSFNUX1ZFTkRPUl9MT09QQkFDSyI7CisJCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkJCSJzY3NpKCVsZCkgYnNnIHJxc3QgdHlwZTogJXNcbiIsCisJCQkJdmhhLT5ob3N0X25vLCB0eXBlKSk7CisJCQljb21tYW5kX3NlbnQgPSBJTlRfREVGX0xCX0xPT1BCQUNLX0NNRDsKKwkJCXJ2YWwgPSBxbGEyeDAwX2xvb3BiYWNrX3Rlc3QodmhhLCAmZWxyZXEsIHJlc3BvbnNlKTsKKwkJfQogCX0KIAogCWlmIChydmFsKSB7CkBAIC0xMDU2LDYgKzEyNTQsMjAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKGZjcG9ydC0+bG9vcF9pZCA9PSBGQ19OT19MT09QX0lEKSB7CisJCURFQlVHMihwcmludGsoS0VSTl9FUlIgIiVzKCVsZCk6IEludmFsaWQgcG9ydCBsb29wIGlkLCAiCisJCQkibG9vcF9pZCA9IDB4JXhcbiIsCisJCQlfX2Z1bmNfXywgdmhhLT5ob3N0X25vLCBmY3BvcnQtPmxvb3BfaWQpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGZjcG9ydC0+ZmxhZ3MgJiBGQ0ZfTE9HSU5fTkVFREVEKSB7CisJCURFQlVHMihwcmludGsoS0VSTl9FUlIgIiVzKCVsZCk6IFJlbW90ZSBwb3J0IG5vdCBsb2dnZWQgaW4sICIKKwkJICAgICJmbGFncyA9IDB4JXhcbiIsCisJCSAgICBfX2Z1bmNfXywgdmhhLT5ob3N0X25vLCBmY3BvcnQtPmZsYWdzKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWlmIChwb3J0X3BhcmFtLT5tb2RlKQogCQlydmFsID0gcWxhMngwMF9zZXRfaWRtYV9zcGVlZCh2aGEsIGZjcG9ydC0+bG9vcF9pZCwKIAkJCXBvcnRfcGFyYW0tPnNwZWVkLCBtYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYnNnLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYnNnLmgKaW5kZXggNzZlZDkyZC4uY2M3YzUyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2JzZy5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ic2cuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMDggUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpAQCAtMTksNiArMTksMTMgQEAKICNkZWZpbmUgSU5UX0RFRl9MQl9MT09QQkFDS19DTUQgICAgICAgICAwCiAjZGVmaW5lIElOVF9ERUZfTEJfRUNIT19DTUQgICAgICAgICAgICAgMQogCisvKiBMb29wYmFjayByZWxhdGVkIGRlZmluYXRpb25zICovCisjZGVmaW5lIEVYVEVSTkFMX0xPT1BCQUNLCQkweEYyCisjZGVmaW5lIEVOQUJMRV9JTlRFUk5BTF9MT09QQkFDSwkweDAyCisjZGVmaW5lIElOVEVSTkFMX0xPT1BCQUNLX01BU0sJCTB4MDAwRQorI2RlZmluZSBNQVhfRUxTX0ZSQU1FX1BBWUxPQUQJCTI1MgorI2RlZmluZSBFTFNfT1BDT0RFX0JZVEUJCQkweDEwCisKIC8qIEJTRyBWZW5kb3Igc3BlY2lmaWMgZGVmaW5hdGlvbnMgKi8KICNkZWZpbmUgQTg0X0lTU1VFX1dSSVRFX1RZUEVfQ01EICAgICAgICAwCiAjZGVmaW5lIEE4NF9JU1NVRV9SRUFEX1RZUEVfQ01EICAgICAgICAgMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RiZy5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RiZy5jCmluZGV4IDJhZmM4YTMuLjA5NjE0MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGJnLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogUUxvZ2ljIEZpYnJlIENoYW5uZWwgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDA4IFFMb2dpYyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDEwIFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKICAqIFNlZSBMSUNFTlNFLnFsYTJ4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuaAppbmRleCA5MTZjODFmLi42Y2ZjMjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGJnLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RiZy5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwOCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKaW5kZXggODM5NjEwOS4uM2E0MzJlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMDggUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpAQCAtMjAyLDYgKzIwMiw3IEBACiAgKiBTQ1NJIFJlcXVlc3QgQmxvY2sKICAqLwogdHlwZWRlZiBzdHJ1Y3Qgc3JiIHsKKwlhdG9taWNfdCByZWZfY291bnQ7CiAJc3RydWN0IGZjX3BvcnQgKmZjcG9ydDsKIAl1aW50MzJfdCBoYW5kbGU7CiAKQEAgLTI0OSwxNiArMjUwLDYgQEAKIAkJCXVpbnQzMl90IGx1bjsKIAkJCXVpbnQzMl90IGRhdGE7CiAJCX0gdG1mOwotCQlzdHJ1Y3QgewotCQkJLyoKLQkJCSAqIHZhbHVlcyBmb3IgbW9kaWYgZmllbGQgYmVsb3cgYXJlIGFzCi0JCQkgKiBkZWZpbmVkIGluIG1ya19lbnRyeV8yNHh4IHN0cnVjdAotCQkJICogZm9yIHRoZSBtb2RpZmllciBmaWVsZCBpbiBxbGFfZncuaC4KLQkJCSAqLwotCQkJdWludDhfdCBtb2RpZjsKLQkJCXVpbnQxNl90IGx1bjsKLQkJCXVpbnQzMl90IGRhdGE7Ci0JCX0gbWFya2VyOwogCX0gdTsKIAogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwpAQCAtMjc2LDcgKzI2Nyw2IEBACiAjZGVmaW5lIFNSQl9DVF9DTUQJNQogI2RlZmluZSBTUkJfQURJU0NfQ01ECTYKICNkZWZpbmUgU1JCX1RNX0NNRAk3Ci0jZGVmaW5lIFNSQl9NQVJLRVJfQ01ECTgKIAogc3RydWN0IHNyYl9jdHggewogCXVpbnQxNl90IHR5cGU7CkBAIC03MTMsNiArNzAzLDggQEAKICNkZWZpbmUgTUJDX1NFTkRfUk5GVF9FTFMJCTB4NWUJLyogU2VuZCBSTkZUIEVMUyByZXF1ZXN0ICovCiAjZGVmaW5lIE1CQ19HRVRfTElOS19QUklWX1NUQVRTCQkweDZkCS8qIEdldCBsaW5rICYgcHJpdmF0ZSBkYXRhLiAqLwogI2RlZmluZSBNQkNfU0VUX1ZFTkRPUl9JRAkJMHg3NgkvKiBTZXQgVmVuZG9yIElELiAqLworI2RlZmluZSBNQkNfU0VUX1BPUlRfQ09ORklHCQkweDEyMgkvKiBTZXQgcG9ydCBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIE1CQ19HRVRfUE9SVF9DT05GSUcJCTB4MTIzCS8qIEdldCBwb3J0IGNvbmZpZ3VyYXRpb24gKi8KIAogLyogRmlybXdhcmUgcmV0dXJuIGRhdGEgc2l6ZXMgKi8KICNkZWZpbmUgRkNBTF9NQVBfU0laRQkxMjgKQEAgLTE2NjAsOCArMTY1MiwxNCBAQAogCXVpbnQ4X3QgcG9ydF9uYW1lW1dXTl9TSVpFXTsKIAl1aW50OF90IGZhYnJpY19wb3J0X25hbWVbV1dOX1NJWkVdOwogCXVpbnQxNl90IGZwX3NwZWVkOworCXVpbnQ4X3QgZmM0X3R5cGU7CiB9IHN3X2luZm9fdDsKIAorLyogRkNQLTQgdHlwZXMgKi8KKyNkZWZpbmUgRkM0X1RZUEVfRkNQX1NDU0kJMHgwOAorI2RlZmluZSBGQzRfVFlQRV9PVEhFUgkJMHgwCisjZGVmaW5lIEZDNF9UWVBFX1VOS05PV04JMHhmZgorCiAvKgogICogRmlicmUgY2hhbm5lbCBwb3J0IHR5cGUuCiAgKi8KQEAgLTE3MDUsNiArMTcwMyw3IEBACiAJdTMyIHN1cHBvcnRlZF9jbGFzc2VzOwogCiAJdWludDE2X3QgdnBfaWR4OworCXVpbnQ4X3QgZmM0X3R5cGU7CiB9IGZjX3BvcnRfdDsKIAogLyoKQEAgLTE3ODcsNiArMTc4Niw5IEBACiAjZGVmaW5lCUdQU0NfUkVRX1NJWkUJKDE2ICsgOCkKICNkZWZpbmUJR1BTQ19SU1BfU0laRQkoMTYgKyAyICsgMikKIAorI2RlZmluZSBHRkZfSURfQ01ECTB4MDExRgorI2RlZmluZSBHRkZfSURfUkVRX1NJWkUJKDE2ICsgNCkKKyNkZWZpbmUgR0ZGX0lEX1JTUF9TSVpFICgxNiArIDEyOCkKIAogLyoKICAqIEhCQSBhdHRyaWJ1dGUgdHlwZXMuCkBAIC0xOTg4LDYgKzE5OTAsMTEgQEAKIAkJc3RydWN0IHsKIAkJCXVpbnQ4X3QgcG9ydF9uYW1lWzhdOwogCQl9IGdwc2M7CisKKwkJc3RydWN0IHsKKwkJCXVpbnQ4X3QgcmVzZXJ2ZWQ7CisJCQl1aW50OF90IHBvcnRfbmFtZVszXTsKKwkJfSBnZmZfaWQ7CiAJfSByZXE7CiB9OwogCkBAIC0yMDYwLDYgKzIwNjcsMTEgQEAKIAkJCXVpbnQxNl90IHNwZWVkczsKIAkJCXVpbnQxNl90IHNwZWVkOwogCQl9IGdwc2M7CisKKyNkZWZpbmUgR0ZGX0ZDUF9TQ1NJX09GRlNFVAk3CisJCXN0cnVjdCB7CisJCQl1aW50OF90IGZjNF9mZWF0dXJlc1sxMjhdOworCQl9IGdmZl9pZDsKIAl9IHJzcDsKIH07CiAKQEAgLTI0MTAsNiArMjQyMiw3IEBACiAJCXVpbnQzMl90CWNwdV9hZmZpbml0eV9lbmFibGVkCToxOwogCQl1aW50MzJfdAlkaXNhYmxlX21zaXhfaGFuZHNoYWtlCToxOwogCQl1aW50MzJfdAlmY3BfcHJpb19lbmFibGVkCToxOworCQl1aW50MzJfdAlmd19odW5nCToxOwogCX0gZmxhZ3M7CiAKIAkvKiBUaGlzIHNwaW5sb2NrIGlzIHVzZWQgdG8gcHJvdGVjdCAiaW8gdHJhbnNhY3Rpb25zIiwgeW91IG11c3QKQEAgLTI2MzAsNiArMjY0Myw4IEBACiAJc3RydWN0IG11dGV4IHZwb3J0X2xvY2s7ICAgICAgICAvKiBWaXJ0dWFsIHBvcnQgc3luY2hyb25pemF0aW9uICovCiAJc3RydWN0IGNvbXBsZXRpb24gbWJ4X2NtZF9jb21wOyAvKiBTZXJpYWxpemUgbWJ4IGFjY2VzcyAqLwogCXN0cnVjdCBjb21wbGV0aW9uIG1ieF9pbnRyX2NvbXA7ICAvKiBVc2VkIGZvciBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbiAqLworCXN0cnVjdCBjb21wbGV0aW9uIGRjYnhfY29tcDsJLyogRm9yIHNldCBwb3J0IGNvbmZpZyBub3RpZmljYXRpb24gKi8KKwlpbnQgbm90aWZ5X2RjYnhfY29tcDsKIAogCS8qIEJhc2ljIGZpcm13YXJlIHJlbGF0ZWQgaW5mb3JtYXRpb24uICovCiAJdWludDE2X3QJZndfbWFqb3JfdmVyc2lvbjsKQEAgLTI2OTksNiArMjcxNCw4IEBACiAJdWludDhfdCAJZmNvZGVfcmV2aXNpb25bMTZdOwogCXVpbnQzMl90CWZ3X3JldmlzaW9uWzRdOwogCisJdWludDMyX3QJZ29sZF9md192ZXJzaW9uWzRdOworCiAJLyogT2Zmc2V0cyBmb3IgZmxhc2gvbnZyYW0gYWNjZXNzIChzZXQgdG8gfjAgaWYgbm90IHVzZWQpLiAqLwogCXVpbnQzMl90CWZsYXNoX2NvbmZfb2ZmOwogCXVpbnQzMl90CWZsYXNoX2RhdGFfb2ZmOwpAQCAtMjc4Myw2ICsyODAwLDkgQEAKIAl1aW50MTZfdAlnYmxfZHNkX2F2YWlsOwogCXN0cnVjdCBsaXN0X2hlYWQgZ2JsX2RzZF9saXN0OwogI2RlZmluZSBOVU1fRFNEX0NIQUlOIDQwOTYKKworCXVpbnQ4X3QgZndfdHlwZTsKKwlfX2xlMzIgZmlsZV9wcmRfb2ZmOwkvKiBGaWxlIGZpcm13YXJlIHByb2R1Y3Qgb2Zmc2V0ICovCiB9OwogCiAvKgpAQCAtMjk2MSw5ICsyOTgxLDE1IEBACiAKICNkZWZpbmUJUUxBX0RTRFNfUEVSX0lPQ0IJMzcKIAorI2RlZmluZSBDTURfU1AoQ21uZCkJCSgoQ21uZCktPlNDcC5wdHIpCisKK2VudW0gbmV4dXNfd2FpdF90eXBlIHsKKwlXQUlUX0hPU1QgPSAwLAorCVdBSVRfVEFSR0VULAorCVdBSVRfTFVOLAorfTsKKwogI2luY2x1ZGUgInFsYV9nYmwuaCIKICNpbmNsdWRlICJxbGFfZGJnLmgiCiAjaW5jbHVkZSAicWxhX2lubGluZS5oIgotCi0jZGVmaW5lIENNRF9TUChDbW5kKQkJKChDbW5kKS0+U0NwLnB0cikKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Rmcy5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Rmcy5jCmluZGV4IDNhOWE2Y2EuLjYyNzEzNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZnMuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGZzLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogUUxvZ2ljIEZpYnJlIENoYW5uZWwgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDA4IFFMb2dpYyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDEwIFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKICAqIFNlZSBMSUNFTlNFLnFsYTJ4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9mdy5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmgKaW5kZXggOTNmODMzOS4uNjMxZmVmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogUUxvZ2ljIEZpYnJlIENoYW5uZWwgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDA4IFFMb2dpYyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDEwIFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKICAqIFNlZSBMSUNFTlNFLnFsYTJ4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaAppbmRleCA4MjE3YzNiLi4xYTFiMjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwOCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCkBAIC01OSw3ICs1OSw2IEBACiBleHRlcm4gaW50IHFsYTJ4MDBfYXN5bmNfYWRpc2Moc3RydWN0IHNjc2lfcWxhX2hvc3QgKiwgZmNfcG9ydF90ICosCiAgICAgdWludDE2X3QgKik7CiBleHRlcm4gaW50IHFsYTJ4MDBfYXN5bmNfdG1fY21kKGZjX3BvcnRfdCAqLCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90KTsKLWV4dGVybiBpbnQgcWxhMngwMF9hc3luY19tYXJrZXIoZmNfcG9ydF90ICosIHVpbnQxNl90LCB1aW50OF90KTsKIGV4dGVybiB2b2lkIHFsYTJ4MDBfYXN5bmNfbG9naW5fZG9uZShzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqLCBmY19wb3J0X3QgKiwKICAgICB1aW50MTZfdCAqKTsKIGV4dGVybiB2b2lkIHFsYTJ4MDBfYXN5bmNfbG9nb3V0X2RvbmUoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiwgZmNfcG9ydF90ICosCkBAIC02OCw4ICs2Nyw3IEBACiAgICAgdWludDE2X3QgKik7CiBleHRlcm4gdm9pZCBxbGEyeDAwX2FzeW5jX3RtX2NtZF9kb25lKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICosIGZjX3BvcnRfdCAqLAogCXN0cnVjdCBzcmJfaW9jYiAqKTsKLWV4dGVybiB2b2lkIHFsYTJ4MDBfYXN5bmNfbWFya2VyX2RvbmUoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiwgZmNfcG9ydF90ICosCi0Jc3RydWN0IHNyYl9pb2NiICopOworZXh0ZXJuIHZvaWQgKnFsYTJ4MDBfYWxsb2NfaW9jYnMoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiwgc3JiX3QgKik7CiAKIGV4dGVybiBmY19wb3J0X3QgKgogcWxhMngwMF9hbGxvY19mY3BvcnQoc2NzaV9xbGFfaG9zdF90ICosIGdmcF90ICk7CkBAIC0xMjQsNiArMTIyLDcgQEAKIGV4dGVybiB2b2lkIHFsYTJ4MDBfZnJlZV9ob3N0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICopOwogZXh0ZXJuIHZvaWQgcWxhMngwMF9yZWxvZ2luKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICopOwogZXh0ZXJuIHZvaWQgcWxhMngwMF9kb193b3JrKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICopOworZXh0ZXJuIHZvaWQgcWxhMngwMF9mcmVlX2ZjcG9ydHMoc3RydWN0IHNjc2lfcWxhX2hvc3QgKik7CiAKIC8qCiAgKiBHbG9iYWwgRnVuY3Rpb25zIGluIHFsYV9taWQuYyBzb3VyY2UgZmlsZS4KQEAgLTE3NiwxMCArMTc1LDcgQEAKIGV4dGVybiBpbnQgcWxhMjR4eF9zdGFydF9zY3NpKHNyYl90ICpzcCk7CiBpbnQgcWxhMngwMF9tYXJrZXIoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiwgc3RydWN0IHJlcV9xdWUgKiwgc3RydWN0IHJzcF9xdWUgKiwKIAkJCQkJCXVpbnQxNl90LCB1aW50MTZfdCwgdWludDhfdCk7Ci1pbnQgX19xbGEyeDAwX21hcmtlcihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqLCBzdHJ1Y3QgcmVxX3F1ZSAqLCBzdHJ1Y3QgcnNwX3F1ZSAqLAotCQkJCQkJdWludDE2X3QsIHVpbnQxNl90LCB1aW50OF90KTsKIGV4dGVybiBpbnQgcWxhMngwMF9zdGFydF9zcChzcmJfdCAqKTsKLWV4dGVybiB2b2lkIHFsYTJ4MDBfY3R4X3NwX2ZyZWUoc3JiX3QgKik7CiBleHRlcm4gdWludDE2X3QgcWxhMjR4eF9jYWxjX2lvY2JzKHVpbnQxNl90KTsKIGV4dGVybiB2b2lkIHFsYTI0eHhfYnVpbGRfc2NzaV9pb2NicyhzcmJfdCAqLCBzdHJ1Y3QgY21kX3R5cGVfNyAqLCB1aW50MTZfdCk7CiBleHRlcm4gaW50IHFsYTI0eHhfZGlmX3N0YXJ0X3Njc2koc3JiX3QgKik7CkBAIC0yOTMsNyArMjg5LDkgQEAKIHFsYTI0eHhfYWJvcnRfdGFyZ2V0KHN0cnVjdCBmY19wb3J0ICosIHVuc2lnbmVkIGludCwgaW50KTsKIGV4dGVybiBpbnQKIHFsYTI0eHhfbHVuX3Jlc2V0KHN0cnVjdCBmY19wb3J0ICosIHVuc2lnbmVkIGludCwgaW50KTsKLQorZXh0ZXJuIGludAorcWxhMngwMF9laF93YWl0X2Zvcl9wZW5kaW5nX2NvbW1hbmRzKHNjc2lfcWxhX2hvc3RfdCAqLCB1bnNpZ25lZCBpbnQsCisJdW5zaWduZWQgaW50LCBlbnVtIG5leHVzX3dhaXRfdHlwZSk7CiBleHRlcm4gaW50CiBxbGEyeDAwX3N5c3RlbV9lcnJvcihzY3NpX3FsYV9ob3N0X3QgKik7CiAKQEAgLTM1Nyw2ICszNTUsMTEgQEAKIGV4dGVybiBpbnQgcWxhMngwMF9nZXRfZGF0YV9yYXRlKHNjc2lfcWxhX2hvc3RfdCAqKTsKIGV4dGVybiBpbnQgcWxhMjR4eF9zZXRfZmNwX3ByaW8oc2NzaV9xbGFfaG9zdF90ICosIHVpbnQxNl90LCB1aW50MTZfdCwKIAl1aW50MTZfdCAqKTsKK2V4dGVybiBpbnQKK3FsYTgxeHhfZ2V0X3BvcnRfY29uZmlnKHNjc2lfcWxhX2hvc3RfdCAqLCB1aW50MTZfdCAqKTsKKworZXh0ZXJuIGludAorcWxhODF4eF9zZXRfcG9ydF9jb25maWcoc2NzaV9xbGFfaG9zdF90ICosIHVpbnQxNl90ICopOwogCiAvKgogICogR2xvYmFsIEZ1bmN0aW9uIFByb3RvdHlwZXMgaW4gcWxhX2lzci5jIHNvdXJjZSBmaWxlLgpAQCAtNDM4LDYgKzQ0MSw3IEBACiBleHRlcm4gaW50IHFsYTJ4MDBfZ2lkX3B0KHNjc2lfcWxhX2hvc3RfdCAqLCBzd19pbmZvX3QgKik7CiBleHRlcm4gaW50IHFsYTJ4MDBfZ3BuX2lkKHNjc2lfcWxhX2hvc3RfdCAqLCBzd19pbmZvX3QgKik7CiBleHRlcm4gaW50IHFsYTJ4MDBfZ25uX2lkKHNjc2lfcWxhX2hvc3RfdCAqLCBzd19pbmZvX3QgKik7CitleHRlcm4gdm9pZCBxbGEyeDAwX2dmZl9pZChzY3NpX3FsYV9ob3N0X3QgKiwgc3dfaW5mb190ICopOwogZXh0ZXJuIGludCBxbGEyeDAwX3JmdF9pZChzY3NpX3FsYV9ob3N0X3QgKik7CiBleHRlcm4gaW50IHFsYTJ4MDBfcmZmX2lkKHNjc2lfcWxhX2hvc3RfdCAqKTsKIGV4dGVybiBpbnQgcWxhMngwMF9ybm5faWQoc2NzaV9xbGFfaG9zdF90ICopOwpAQCAtNDgyLDExICs0ODYsOCBAQAogCXVpbnQxNl90LCBpbnQsIHVpbnQ4X3QpOwogZXh0ZXJuIGludCBxbGEyNXh4X2NyZWF0ZV9yc3BfcXVlKHN0cnVjdCBxbGFfaHdfZGF0YSAqLCB1aW50MTZfdCwgdWludDhfdCwKIAl1aW50MTZfdCwgaW50KTsKLWV4dGVybiBpbnQgcWxhMjV4eF91cGRhdGVfcmVxX3F1ZShzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqLCB1aW50OF90LCB1aW50OF90KTsKIGV4dGVybiB2b2lkIHFsYTJ4MDBfaW5pdF9yZXNwb25zZV9xX2VudHJpZXMoc3RydWN0IHJzcF9xdWUgKik7CiBleHRlcm4gaW50IHFsYTI1eHhfZGVsZXRlX3JlcV9xdWUoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiwgc3RydWN0IHJlcV9xdWUgKik7Ci1leHRlcm4gaW50IHFsYTI1eHhfZGVsZXRlX3JzcF9xdWUoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiwgc3RydWN0IHJzcF9xdWUgKik7Ci1leHRlcm4gaW50IHFsYTI1eHhfY3JlYXRlX3F1ZXVlcyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqLCB1aW50OF90KTsKIGV4dGVybiBpbnQgcWxhMjV4eF9kZWxldGVfcXVldWVzKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICopOwogZXh0ZXJuIHVpbnQxNl90IHFsYTI0eHhfcmRfcmVxX3JlZyhzdHJ1Y3QgcWxhX2h3X2RhdGEgKiwgdWludDE2X3QpOwogZXh0ZXJuIHVpbnQxNl90IHFsYTI1eHhfcmRfcmVxX3JlZyhzdHJ1Y3QgcWxhX2h3X2RhdGEgKiwgdWludDE2X3QpOwpAQCAtNTAzLDE3ICs1MDQsMTIgQEAKIGV4dGVybiBpbnQgcWxhODJ4eF9wY2lfbWVtX3dyaXRlXzJNKHN0cnVjdCBxbGFfaHdfZGF0YSAqLCB1NjQsIHZvaWQgKiwgaW50KTsKIGV4dGVybiBjaGFyICpxbGE4Mnh4X3BjaV9pbmZvX3N0cihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqLCBjaGFyICopOwogZXh0ZXJuIGludCBxbGE4Mnh4X3BjaV9yZWdpb25fb2Zmc2V0KHN0cnVjdCBwY2lfZGV2ICosIGludCk7Ci1leHRlcm4gaW50IHFsYTgyeHhfcGNpX3JlZ2lvbl9sZW4oc3RydWN0IHBjaV9kZXYgKiwgaW50KTsKIGV4dGVybiBpbnQgcWxhODJ4eF9pb3NwYWNlX2NvbmZpZyhzdHJ1Y3QgcWxhX2h3X2RhdGEgKik7CiAKIC8qIEluaXRpYWxpemF0aW9uIHJlbGF0ZWQgZnVuY3Rpb25zICovCiBleHRlcm4gdm9pZCBxbGE4Mnh4X3Jlc2V0X2NoaXAoc3RydWN0IHNjc2lfcWxhX2hvc3QgKik7CiBleHRlcm4gdm9pZCBxbGE4Mnh4X2NvbmZpZ19yaW5ncyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqKTsKLWV4dGVybiBpbnQgcWxhODJ4eF9udnJhbV9jb25maWcoc3RydWN0IHNjc2lfcWxhX2hvc3QgKik7CiBleHRlcm4gaW50IHFsYTgyeHhfcGluaXRfZnJvbV9yb20oc2NzaV9xbGFfaG9zdF90ICopOwotZXh0ZXJuIGludCBxbGE4Mnh4X2xvYWRfZmlybXdhcmUoc2NzaV9xbGFfaG9zdF90ICopOwotZXh0ZXJuIGludCBxbGE4Mnh4X3Jlc2V0X2h3KHNjc2lfcWxhX2hvc3RfdCAqKTsKLWV4dGVybiBpbnQgcWxhODJ4eF9sb2FkX3Jpc2NfYmxvYihzY3NpX3FsYV9ob3N0X3QgKiwgdWludDMyX3QgKik7CiBleHRlcm4gdm9pZCBxbGE4Mnh4X3dhdGNoZG9nKHNjc2lfcWxhX2hvc3RfdCAqKTsKIAogLyogRmlybXdhcmUgYW5kIGZsYXNoIHJlbGF0ZWQgZnVuY3Rpb25zICovCkBAIC01NjksNyArNTY1LDYgQEAKIGV4dGVybiBpbnQgcWxhODJ4eF9tYnhfaW50cl9kaXNhYmxlKHNjc2lfcWxhX2hvc3RfdCAqKTsKIGV4dGVybiB2b2lkIHFsYTgyeHhfc3RhcnRfaW9jYnMoc3JiX3QgKik7CiBleHRlcm4gaW50IHFsYTgyeHhfZmNvZV9jdHhfcmVzZXQoc2NzaV9xbGFfaG9zdF90ICopOwotZXh0ZXJuIHZvaWQgcWxhODJ4eF93YWl0X2Zvcl9wZW5kaW5nX2NvbW1hbmRzKHNjc2lfcWxhX2hvc3RfdCAqKTsKIAogLyogQlNHIHJlbGF0ZWQgZnVuY3Rpb25zICovCiBleHRlcm4gaW50IHFsYTI0eHhfYnNnX3JlcXVlc3Qoc3RydWN0IGZjX2JzZ19qb2IgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ3MuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ncy5jCmluZGV4IDg3MmM1NWYuLjRjMDgzOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ncy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ncy5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwOCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCkBAIC0xOTEzLDMgKzE5MTMsNzUgQEAKIAogCXJldHVybiAocnZhbCk7CiB9CisKKy8qKgorICogcWxhMngwMF9nZmZfaWQoKSAtIFNOUyBHZXQgRkMtNCBGZWF0dXJlcyAoR0ZGX0lEKSBxdWVyeS4KKyAqCisgKiBAaGE6IEhBIGNvbnRleHQKKyAqIEBsaXN0OiBzd2l0Y2ggaW5mbyBlbnRyaWVzIHRvIHBvcHVsYXRlCisgKgorICovCit2b2lkCitxbGEyeDAwX2dmZl9pZChzY3NpX3FsYV9ob3N0X3QgKnZoYSwgc3dfaW5mb190ICpsaXN0KQoreworCWludAkJcnZhbDsKKwl1aW50MTZfdAlpOworCisJbXNfaW9jYl9lbnRyeV90CSptc19wa3Q7CisJc3RydWN0IGN0X3Nuc19yZXEJKmN0X3JlcTsKKwlzdHJ1Y3QgY3Rfc25zX3JzcAkqY3RfcnNwOworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCXVpbnQ4X3QgZmNwX3Njc2lfZmVhdHVyZXMgPSAwOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9GSUJSRV9ERVZJQ0VTOyBpKyspIHsKKwkJLyogU2V0IGRlZmF1bHQgRkM0IFR5cGUgYXMgVU5LTk9XTiBzbyB0aGUgZGVmYXVsdCBpcyB0bworCQkgKiBQcm9jZXNzIHRoaXMgcG9ydCAqLworCQlsaXN0W2ldLmZjNF90eXBlID0gRkM0X1RZUEVfVU5LTk9XTjsKKworCQkvKiBEbyBub3QgYXR0ZW1wdCBHRkZfSUQgaWYgd2UgYXJlIG5vdCBGV0lfMiBjYXBhYmxlICovCisJCWlmICghSVNfRldJMl9DQVBBQkxFKGhhKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFByZXBhcmUgY29tbW9uIE1TIElPQ0IgKi8KKwkJbXNfcGt0ID0gaGEtPmlzcF9vcHMtPnByZXBfbXNfaW9jYih2aGEsIEdGRl9JRF9SRVFfU0laRSwKKwkJICAgIEdGRl9JRF9SU1BfU0laRSk7CisKKwkJLyogUHJlcGFyZSBDVCByZXF1ZXN0ICovCisJCWN0X3JlcSA9IHFsYTJ4MDBfcHJlcF9jdF9yZXEoJmhhLT5jdF9zbnMtPnAucmVxLCBHRkZfSURfQ01ELAorCQkgICAgR0ZGX0lEX1JTUF9TSVpFKTsKKwkJY3RfcnNwID0gJmhhLT5jdF9zbnMtPnAucnNwOworCisJCS8qIFByZXBhcmUgQ1QgYXJndW1lbnRzIC0tIHBvcnRfaWQgKi8KKwkJY3RfcmVxLT5yZXEucG9ydF9pZC5wb3J0X2lkWzBdID0gbGlzdFtpXS5kX2lkLmIuZG9tYWluOworCQljdF9yZXEtPnJlcS5wb3J0X2lkLnBvcnRfaWRbMV0gPSBsaXN0W2ldLmRfaWQuYi5hcmVhOworCQljdF9yZXEtPnJlcS5wb3J0X2lkLnBvcnRfaWRbMl0gPSBsaXN0W2ldLmRfaWQuYi5hbF9wYTsKKworCQkvKiBFeGVjdXRlIE1TIElPQ0IgKi8KKwkJcnZhbCA9IHFsYTJ4MDBfaXNzdWVfaW9jYih2aGEsIGhhLT5tc19pb2NiLCBoYS0+bXNfaW9jYl9kbWEsCisJCSAgIHNpemVvZihtc19pb2NiX2VudHJ5X3QpKTsKKworCQlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgeworCQkJREVCVUcyXzMocHJpbnRrKEtFUk5fSU5GTworCQkJICAgICJzY3NpKCVsZCk6IEdGRl9JRCBpc3N1ZSBJT0NCIGZhaWxlZCAiCisJCQkgICAgIiglZCkuXG4iLCB2aGEtPmhvc3Rfbm8sIHJ2YWwpKTsKKwkJfSBlbHNlIGlmIChxbGEyeDAwX2Noa19tc19zdGF0dXModmhhLCBtc19wa3QsIGN0X3JzcCwKKwkJCSAgICAgICAiR1BOX0lEIikgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJCURFQlVHMl8zKHByaW50ayhLRVJOX0lORk8KKwkJCSAgICAic2NzaSglbGQpOiBHRkZfSUQgSU9DQiBzdGF0dXMgaGFkIGEgIgorCQkJICAgICJmYWlsdXJlIHN0YXR1cyBjb2RlXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwkJfSBlbHNlIHsKKwkJCWZjcF9zY3NpX2ZlYXR1cmVzID0KKwkJCSAgIGN0X3JzcC0+cnNwLmdmZl9pZC5mYzRfZmVhdHVyZXNbR0ZGX0ZDUF9TQ1NJX09GRlNFVF07CisJCQlmY3Bfc2NzaV9mZWF0dXJlcyAmPSAweDBmOworCisJCQlpZiAoZmNwX3Njc2lfZmVhdHVyZXMpCisJCQkJbGlzdFtpXS5mYzRfdHlwZSA9IEZDNF9UWVBFX0ZDUF9TQ1NJOworCQkJZWxzZQorCQkJCWxpc3RbaV0uZmM0X3R5cGUgPSBGQzRfVFlQRV9PVEhFUjsKKwkJfQorCisJCS8qIExhc3QgZGV2aWNlIGV4aXQuICovCisJCWlmIChsaXN0W2ldLmRfaWQuYi5yc3ZkXzEgIT0gMCkKKwkJCWJyZWFrOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCmluZGV4IGFiMmNjNzEuLmQ4NjNlZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMDggUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpAQCAtNjAsMTIgKzYwLDExIEBACiAJY3R4ID0gc3AtPmN0eDsKIAlpb2NiID0gY3R4LT51LmlvY2JfY21kOwogCWlvY2ItPnRpbWVvdXQoc3ApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7Ci0KIAlpb2NiLT5mcmVlKHNwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogcWxhMngwMF9jdHhfc3BfZnJlZShzcmJfdCAqc3ApCiB7CiAJc3RydWN0IHNyYl9jdHggKmN0eCA9IHNwLT5jdHg7CkBAIC0xMjIsNyArMTIxLDIzIEBACiAKIC8qIEFzeW5jaHJvbm91cyBMb2dpbi9Mb2dvdXQgUm91dGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotI2RlZmluZSBFTFNfVE1PXzJfUkFUT1YoaGEpICgoaGEpLT5yX2FfdG92IC8gMTAgKiAyKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitxbGEyeDAwX2dldF9hc3luY190aW1lb3V0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEpCit7CisJdW5zaWduZWQgbG9uZyB0bW87CisJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CisKKwkvKiBGaXJtd2FyZSBzaG91bGQgdXNlIHN3aXRjaCBuZWdvdGlhdGVkIHJfYV90b3YgZm9yIHRpbWVvdXQuICovCisJdG1vID0gaGEtPnJfYV90b3YgLyAxMCAqIDI7CisJaWYgKCFJU19GV0kyX0NBUEFCTEUoaGEpKSB7CisJCS8qCisJCSAqIEV4Y2VwdCBmb3IgZWFybGllciBJU1BzIHdoZXJlIHRoZSB0aW1lb3V0IGlzIHNlZWRlZCBmcm9tIHRoZQorCQkgKiBpbml0aWFsaXphdGlvbiBjb250cm9sIGJsb2NrLgorCQkgKi8KKwkJdG1vID0gaGEtPmxvZ2luX3RpbWVvdXQ7CisJfQorCXJldHVybiB0bW87Cit9CiAKIHN0YXRpYyB2b2lkCiBxbGEyeDAwX2FzeW5jX2lvY2JfdGltZW91dChzcmJfdCAqc3ApCkBAIC0xMzEsMTIgKzE0NiwyMiBAQAogCXN0cnVjdCBzcmJfY3R4ICpjdHggPSBzcC0+Y3R4OwogCiAJREVCVUcyKHByaW50ayhLRVJOX1dBUk5JTkcKLQkgICAgInNjc2koJWxkOiV4KTogQXN5bmMtJXMgdGltZW91dC5cbiIsCi0JICAgIGZjcG9ydC0+dmhhLT5ob3N0X25vLCBzcC0+aGFuZGxlLCBjdHgtPm5hbWUpKTsKKwkJInNjc2koJWxkOiV4KTogQXN5bmMtJXMgdGltZW91dCAtIHBvcnRpZD0lMDJ4JTAyeCUwMnguXG4iLAorCQlmY3BvcnQtPnZoYS0+aG9zdF9ubywgc3AtPmhhbmRsZSwKKwkJY3R4LT5uYW1lLCBmY3BvcnQtPmRfaWQuYi5kb21haW4sCisJCWZjcG9ydC0+ZF9pZC5iLmFyZWEsIGZjcG9ydC0+ZF9pZC5iLmFsX3BhKSk7CiAKIAlmY3BvcnQtPmZsYWdzICY9IH5GQ0ZfQVNZTkNfU0VOVDsKLQlpZiAoY3R4LT50eXBlID09IFNSQl9MT0dJTl9DTUQpCisJaWYgKGN0eC0+dHlwZSA9PSBTUkJfTE9HSU5fQ01EKSB7CisJCXN0cnVjdCBzcmJfaW9jYiAqbGlvID0gY3R4LT51LmlvY2JfY21kOwogCQlxbGEyeDAwX3Bvc3RfYXN5bmNfbG9nb3V0X3dvcmsoZmNwb3J0LT52aGEsIGZjcG9ydCwgTlVMTCk7CisJCS8qIFJldHJ5IGFzIG5lZWRlZC4gKi8KKwkJbGlvLT51LmxvZ2lvLmRhdGFbMF0gPSBNQlNfQ09NTUFORF9FUlJPUjsKKwkJbGlvLT51LmxvZ2lvLmRhdGFbMV0gPSBsaW8tPnUubG9naW8uZmxhZ3MgJiBTUkJfTE9HSU5fUkVUUklFRCA/CisJCQlRTEFfTE9HSU9fTE9HSU5fUkVUUklFRCA6IDA7CisJCXFsYTJ4MDBfcG9zdF9hc3luY19sb2dpbl9kb25lX3dvcmsoZmNwb3J0LT52aGEsIGZjcG9ydCwKKwkJCWxpby0+dS5sb2dpby5kYXRhKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xNTQsNyArMTc5LDYgQEAKIHFsYTJ4MDBfYXN5bmNfbG9naW4oc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZoYSwgZmNfcG9ydF90ICpmY3BvcnQsCiAgICAgdWludDE2X3QgKmRhdGEpCiB7Ci0Jc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAJc3JiX3QgKnNwOwogCXN0cnVjdCBzcmJfY3R4ICpjdHg7CiAJc3RydWN0IHNyYl9pb2NiICpsaW87CkBAIC0xNjIsNyArMTg2LDcgQEAKIAogCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCXNwID0gcWxhMngwMF9nZXRfY3R4X3NwKHZoYSwgZmNwb3J0LCBzaXplb2Yoc3RydWN0IHNyYl9jdHgpLAotCSAgICBFTFNfVE1PXzJfUkFUT1YoaGEpICsgMik7CisJICAgIHFsYTJ4MDBfZ2V0X2FzeW5jX3RpbWVvdXQodmhhKSArIDIpOwogCWlmICghc3ApCiAJCWdvdG8gZG9uZTsKIApAQCAtMjA2LDcgKzIzMCw2IEBACiBpbnQKIHFsYTJ4MDBfYXN5bmNfbG9nb3V0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEsIGZjX3BvcnRfdCAqZmNwb3J0KQogewotCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwogCXNyYl90ICpzcDsKIAlzdHJ1Y3Qgc3JiX2N0eCAqY3R4OwogCXN0cnVjdCBzcmJfaW9jYiAqbGlvOwpAQCAtMjE0LDcgKzIzNyw3IEBACiAKIAlydmFsID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAlzcCA9IHFsYTJ4MDBfZ2V0X2N0eF9zcCh2aGEsIGZjcG9ydCwgc2l6ZW9mKHN0cnVjdCBzcmJfY3R4KSwKLQkgICAgRUxTX1RNT18yX1JBVE9WKGhhKSArIDIpOworCSAgICBxbGEyeDAwX2dldF9hc3luY190aW1lb3V0KHZoYSkgKyAyKTsKIAlpZiAoIXNwKQogCQlnb3RvIGRvbmU7CiAKQEAgLTI1NSw3ICsyNzgsNiBAQAogcWxhMngwMF9hc3luY19hZGlzYyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdmhhLCBmY19wb3J0X3QgKmZjcG9ydCwKICAgICB1aW50MTZfdCAqZGF0YSkKIHsKLQlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAlzcmJfdCAqc3A7CiAJc3RydWN0IHNyYl9jdHggKmN0eDsKIAlzdHJ1Y3Qgc3JiX2lvY2IgKmxpbzsKQEAgLTI2Myw3ICsyODUsNyBAQAogCiAJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJc3AgPSBxbGEyeDAwX2dldF9jdHhfc3AodmhhLCBmY3BvcnQsIHNpemVvZihzdHJ1Y3Qgc3JiX2N0eCksCi0JICAgIEVMU19UTU9fMl9SQVRPVihoYSkgKyAyKTsKKwkgICAgcWxhMngwMF9nZXRfYXN5bmNfdGltZW91dCh2aGEpICsgMik7CiAJaWYgKCFzcCkKIAkJZ290byBkb25lOwogCkBAIC0zMDcsNyArMzI5LDYgQEAKIAl1aW50MzJfdCB0YWcpCiB7CiAJc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZoYSA9IGZjcG9ydC0+dmhhOwotCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwogCXNyYl90ICpzcDsKIAlzdHJ1Y3Qgc3JiX2N0eCAqY3R4OwogCXN0cnVjdCBzcmJfaW9jYiAqdGNmOwpAQCAtMzE1LDcgKzMzNiw3IEBACiAKIAlydmFsID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAlzcCA9IHFsYTJ4MDBfZ2V0X2N0eF9zcCh2aGEsIGZjcG9ydCwgc2l6ZW9mKHN0cnVjdCBzcmJfY3R4KSwKLQkgICAgRUxTX1RNT18yX1JBVE9WKGhhKSArIDIpOworCSAgICBxbGEyeDAwX2dldF9hc3luY190aW1lb3V0KHZoYSkgKyAyKTsKIAlpZiAoIXNwKQogCQlnb3RvIGRvbmU7CiAKQEAgLTM0Niw1OCArMzY3LDYgQEAKIAlyZXR1cm4gcnZhbDsKIH0KIAotc3RhdGljIHZvaWQKLXFsYTJ4MDBfYXN5bmNfbWFya2VyX2N0eF9kb25lKHNyYl90ICpzcCkKLXsKLQlzdHJ1Y3Qgc3JiX2N0eCAqY3R4ID0gc3AtPmN0eDsKLQlzdHJ1Y3Qgc3JiX2lvY2IgKmlvY2IgPSAoc3RydWN0IHNyYl9pb2NiICopY3R4LT51LmlvY2JfY21kOwotCi0JcWxhMngwMF9hc3luY19tYXJrZXJfZG9uZShzcC0+ZmNwb3J0LT52aGEsIHNwLT5mY3BvcnQsIGlvY2IpOwotCWlvY2ItPmZyZWUoc3ApOwotfQotCi1pbnQKLXFsYTJ4MDBfYXN5bmNfbWFya2VyKGZjX3BvcnRfdCAqZmNwb3J0LCB1aW50MTZfdCBsdW4sIHVpbnQ4X3QgbW9kaWYpCi17Ci0Jc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZoYSA9IGZjcG9ydC0+dmhhOwotCXNyYl90ICpzcDsKLQlzdHJ1Y3Qgc3JiX2N0eCAqY3R4OwotCXN0cnVjdCBzcmJfaW9jYiAqbXJrOwotCWludCBydmFsOwotCi0JcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7Ci0Jc3AgPSBxbGEyeDAwX2dldF9jdHhfc3AodmhhLCBmY3BvcnQsIHNpemVvZihzdHJ1Y3Qgc3JiX2N0eCksIDApOwotCWlmICghc3ApCi0JCWdvdG8gZG9uZTsKLQotCWN0eCA9IHNwLT5jdHg7Ci0JY3R4LT50eXBlID0gU1JCX01BUktFUl9DTUQ7Ci0JY3R4LT5uYW1lID0gIm1hcmtlciI7Ci0JbXJrID0gY3R4LT51LmlvY2JfY21kOwotCW1yay0+dS5tYXJrZXIubHVuID0gbHVuOwotCW1yay0+dS5tYXJrZXIubW9kaWYgPSBtb2RpZjsKLQltcmstPnRpbWVvdXQgPSBxbGEyeDAwX2FzeW5jX2lvY2JfdGltZW91dDsKLQltcmstPmRvbmUgPSBxbGEyeDAwX2FzeW5jX21hcmtlcl9jdHhfZG9uZTsKLQotCXJ2YWwgPSBxbGEyeDAwX3N0YXJ0X3NwKHNwKTsKLQlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykKLQkJZ290byBkb25lX2ZyZWVfc3A7Ci0KLQlERUJVRzIocHJpbnRrKEtFUk5fREVCVUcKLQkgICAgInNjc2koJWxkOiV4KTogQXN5bmMtbWFya2VyIC0gbG9vcC1pZD0leCAiCi0JICAgICJwb3J0aWQ9JTAyeCUwMnglMDJ4LlxuIiwKLQkgICAgZmNwb3J0LT52aGEtPmhvc3Rfbm8sIHNwLT5oYW5kbGUsIGZjcG9ydC0+bG9vcF9pZCwKLQkgICAgZmNwb3J0LT5kX2lkLmIuZG9tYWluLCBmY3BvcnQtPmRfaWQuYi5hcmVhLAotCSAgICBmY3BvcnQtPmRfaWQuYi5hbF9wYSkpOwotCi0JcmV0dXJuIHJ2YWw7Ci0KLWRvbmVfZnJlZV9zcDoKLQltcmstPmZyZWUoc3ApOwotZG9uZToKLQlyZXR1cm4gcnZhbDsKLX0KLQogdm9pZAogcWxhMngwMF9hc3luY19sb2dpbl9kb25lKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEsIGZjX3BvcnRfdCAqZmNwb3J0LAogICAgIHVpbnQxNl90ICpkYXRhKQpAQCAtNDE4LDEwICszODcsMTEgQEAKIAkJaWYgKGRhdGFbMV0gJiBRTEFfTE9HSU9fTE9HSU5fUkVUUklFRCkKIAkJCXNldF9iaXQoUkVMT0dJTl9ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CiAJCWVsc2UKLQkJCXFsYTJ4MDBfbWFya19kZXZpY2VfbG9zdCh2aGEsIGZjcG9ydCwgMSwgMCk7CisJCQlxbGEyeDAwX21hcmtfZGV2aWNlX2xvc3QodmhhLCBmY3BvcnQsIDEsIDEpOwogCQlicmVhazsKIAljYXNlIE1CU19QT1JUX0lEX1VTRUQ6CiAJCWZjcG9ydC0+bG9vcF9pZCA9IGRhdGFbMV07CisJCXFsYTJ4MDBfcG9zdF9hc3luY19sb2dvdXRfd29yayh2aGEsIGZjcG9ydCwgTlVMTCk7CiAJCXFsYTJ4MDBfcG9zdF9hc3luY19sb2dpbl93b3JrKHZoYSwgZmNwb3J0LCBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBNQlNfTE9PUF9JRF9VU0VEOgpAQCAtNDI5LDcgKzM5OSw3IEBACiAJCXJ2YWwgPSBxbGEyeDAwX2ZpbmRfbmV3X2xvb3BfaWQodmhhLCBmY3BvcnQpOwogCQlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQkJZmNwb3J0LT5mbGFncyAmPSB+RkNGX0FTWU5DX1NFTlQ7Ci0JCQlxbGEyeDAwX21hcmtfZGV2aWNlX2xvc3QodmhhLCBmY3BvcnQsIDEsIDApOworCQkJcWxhMngwMF9tYXJrX2RldmljZV9sb3N0KHZoYSwgZmNwb3J0LCAxLCAxKTsKIAkJCWJyZWFrOwogCQl9CiAJCXFsYTJ4MDBfcG9zdF9hc3luY19sb2dpbl93b3JrKHZoYSwgZmNwb3J0LCBOVUxMKTsKQEAgLTQ2MSw3ICs0MzEsNyBAQAogCWlmIChkYXRhWzFdICYgUUxBX0xPR0lPX0xPR0lOX1JFVFJJRUQpCiAJCXNldF9iaXQoUkVMT0dJTl9ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CiAJZWxzZQotCQlxbGEyeDAwX21hcmtfZGV2aWNlX2xvc3QodmhhLCBmY3BvcnQsIDEsIDApOworCQlxbGEyeDAwX21hcmtfZGV2aWNlX2xvc3QodmhhLCBmY3BvcnQsIDEsIDEpOwogCiAJcmV0dXJuOwogfQpAQCAtNDc4LDcgKzQ0OCw4IEBACiAJbHVuID0gKHVpbnQxNl90KWlvY2ItPnUudG1mLmx1bjsKIAogCS8qIElzc3VlIE1hcmtlciBJT0NCICovCi0JcnZhbCA9IHFsYTJ4MDBfYXN5bmNfbWFya2VyKGZjcG9ydCwgbHVuLAorCXJ2YWwgPSBxbGEyeDAwX21hcmtlcih2aGEsIHZoYS0+aHctPnJlcV9xX21hcFswXSwKKwkJdmhhLT5ody0+cnNwX3FfbWFwWzBdLCBmY3BvcnQtPmxvb3BfaWQsIGx1biwKIAkJZmxhZ3MgPT0gVENGX0xVTl9SRVNFVCA/IE1LX1NZTkNfSURfTFVOIDogTUtfU1lOQ19JRCk7CiAKIAlpZiAoKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHx8IGlvY2ItPnUudG1mLmRhdGEpIHsKQEAgLTQ5MCwyNCArNDYxLDYgQEAKIAlyZXR1cm47CiB9CiAKLXZvaWQKLXFsYTJ4MDBfYXN5bmNfbWFya2VyX2RvbmUoc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZoYSwgZmNfcG9ydF90ICpmY3BvcnQsCi0gICAgc3RydWN0IHNyYl9pb2NiICppb2NiKQotewotCS8qCi0JICogQ3VycmVudGx5IHdlIGRvbnQgaGF2ZSBhbnkgc3BlY2lmaWMgcG9zdCByZXNwb25zZSBwcm9jZXNzaW5nCi0JICogZm9yIHRoaXMgSU9DQi4gV2UnbGwganVzdCByZXR1cm4gc3VjY2VzcyBvciBmYWlsZWQKLQkgKiBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgSU9DQiBjb21tYW5kIHN1Y2NlZWRlZCBvciBmYWlsZWQuCi0JICovCi0JaWYgKGlvY2ItPnUudG1mLmRhdGEpIHsKLQkJREVCVUcyXzNfMTEocHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgIiVzKCVsZCk6IE1hcmtlciBJT0NCIGZhaWxlZCAoJXgpLlxuIiwKLQkJICAgIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sIGlvY2ItPnUudG1mLmRhdGEpKTsKLQl9Ci0KLQlyZXR1cm47Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgUUxvZ2ljIElTUDJ4MDAgSGFyZHdhcmUgU3VwcG9ydCBGdW5jdGlvbnMuICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTYxMywxMSArNTY2LDggQEAKIAkJfQogCX0KIAotCWlmIChJU19RTEEyNFhYX1RZUEUoaGEpIHx8IElTX1FMQTI1WFgoaGEpKSB7Ci0JCWlmIChxbGEyNHh4X3JlYWRfZmNwX3ByaW9fY2ZnKHZoYSkpCi0JCQlxbGFfcHJpbnRrKEtFUk5fRVJSLCBoYSwKLQkJCSJVbmFibGUgdG8gcmVhZCBGQ1AgcHJpb3JpdHkgZGF0YS5cbiIpOwotCX0KKwlpZiAoSVNfUUxBMjRYWF9UWVBFKGhhKSB8fCBJU19RTEEyNVhYKGhhKSkKKwkJcWxhMjR4eF9yZWFkX2ZjcF9wcmlvX2NmZyh2aGEpOwogCiAJcmV0dXJuIChydmFsKTsKIH0KQEAgLTE0NTIsOCArMTQwMiwxMSBAQAogCiAJaWYgKElTX1FMQTgyWFgoaGEpKSB7CiAJCXJ2YWwgPSBoYS0+aXNwX29wcy0+bG9hZF9yaXNjKHZoYSwgJnNyaXNjX2FkZHJlc3MpOwotCQlpZiAocnZhbCA9PSBRTEFfU1VDQ0VTUykKKwkJaWYgKHJ2YWwgPT0gUUxBX1NVQ0NFU1MpIHsKKwkJCXFsYTJ4MDBfc3RvcF9maXJtd2FyZSh2aGEpOwogCQkJZ290byBlbmFibGVfODJ4eF9ucGl2OworCQl9IGVsc2UKKwkJCWdvdG8gZmFpbGVkOwogCX0KIAogCWlmICghSVNfRldJMl9DQVBBQkxFKGhhKSAmJiAhSVNfUUxBMjEwMChoYSkgJiYgIUlTX1FMQTIyMDAoaGEpKSB7CkBAIC0xOTYwLDcgKzE5MTMsOCBAQAogCQkJfQogCQl9IGVsc2UgewogCQkJLyogTWFpbGJveCBjbWQgZmFpbGVkLiBUaW1lb3V0IG9uIG1pbl93YWl0LiAqLwotCQkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgbXRpbWUpKQorCQkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgbXRpbWUpIHx8CisJCQkgICAgKElTX1FMQTgyWFgoaGEpICYmIGhhLT5mbGFncy5md19odW5nKSkKIAkJCQlicmVhazsKIAkJfQogCkBAIC0yMzk2LDcgKzIzNTAsNyBAQAogCWhhLT5yZXRyeV9jb3VudCA9IG52LT5yZXRyeV9jb3VudDsKIAogCS8qIFNldCBtaW5pbXVtIGxvZ2luX3RpbWVvdXQgdG8gNCBzZWNvbmRzLiAqLwotCWlmIChudi0+bG9naW5fdGltZW91dCA8IHFsMnhsb2dpbnRpbWVvdXQpCisJaWYgKG52LT5sb2dpbl90aW1lb3V0ICE9IHFsMnhsb2dpbnRpbWVvdXQpCiAJCW52LT5sb2dpbl90aW1lb3V0ID0gcWwyeGxvZ2ludGltZW91dDsKIAlpZiAobnYtPmxvZ2luX3RpbWVvdXQgPCA0KQogCQludi0+bG9naW5fdGltZW91dCA9IDQ7CkBAIC0yNjM5LDcgKzI1OTMsOCBAQAogCQkJc2V0X2JpdChMT0NBTF9MT09QX1VQREFURSwgJnZoYS0+ZHBjX2ZsYWdzKTsKIAkJaWYgKHRlc3RfYml0KFJTQ05fVVBEQVRFLCAmc2F2ZV9mbGFncykpIHsKIAkJCXNldF9iaXQoUlNDTl9VUERBVEUsICZ2aGEtPmRwY19mbGFncyk7Ci0JCQl2aGEtPmZsYWdzLnJzY25fcXVldWVfb3ZlcmZsb3cgPSAxOworCQkJaWYgKCFJU19BTE9HSU9fQ0FQQUJMRShoYSkpCisJCQkJdmhhLT5mbGFncy5yc2NuX3F1ZXVlX292ZXJmbG93ID0gMTsKIAkJfQogCX0KIApAQCAtMzEyNCw3ICszMDc5LDYgQEAKIAlyZXR1cm4gKHJ2YWwpOwogfQogCi0KIC8qCiAgKiBxbGEyeDAwX2ZpbmRfYWxsX2ZhYnJpY19kZXZzCiAgKgpAQCAtMzE3Nyw2ICszMTMxLDEwIEBACiAJCSAgICBxbGEyeDAwX2dmcG5faWQodmhhLCBzd2wpID09IFFMQV9TVUNDRVNTKSB7CiAJCQlxbGEyeDAwX2dwc2ModmhhLCBzd2wpOwogCQl9CisKKwkJLyogSWYgb3RoZXIgcXVlcmllcyBzdWNjZWVkZWQgcHJvYmUgZm9yIEZDLTQgdHlwZSAqLworCQlpZiAoc3dsKQorCQkJcWxhMngwMF9nZmZfaWQodmhhLCBzd2wpOwogCX0KIAlzd2xfaWR4ID0gMDsKIApAQCAtMzE5Nyw4ICszMTU1LDkgQEAKIAkJaWYgKHFsYTJ4MDBfaXNfcmVzZXJ2ZWRfaWQodmhhLCBsb29wX2lkKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChhdG9taWNfcmVhZCgmdmhhLT5sb29wX2Rvd25fdGltZXIpIHx8Ci0JCSAgICBMT09QX1RSQU5TSVRJT04odmhhKSkgeworCQlpZiAoaGEtPmN1cnJlbnRfdG9wb2xvZ3kgPT0gSVNQX0NGR19GTCAmJgorCQkgICAgKGF0b21pY19yZWFkKCZ2aGEtPmxvb3BfZG93bl90aW1lcikgfHwKKwkJICAgICBMT09QX1RSQU5TSVRJT04odmhhKSkpIHsKIAkJCWF0b21pY19zZXQoJnZoYS0+bG9vcF9kb3duX3RpbWVyLCAwKTsKIAkJCXNldF9iaXQoTE9PUF9SRVNZTkNfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOwogCQkJc2V0X2JpdChMT0NBTF9MT09QX1VQREFURSwgJnZoYS0+ZHBjX2ZsYWdzKTsKQEAgLTMyMTcsNiArMzE3Niw3IEBACiAJCQkJbWVtY3B5KG5ld19mY3BvcnQtPmZhYnJpY19wb3J0X25hbWUsCiAJCQkJICAgIHN3bFtzd2xfaWR4XS5mYWJyaWNfcG9ydF9uYW1lLCBXV05fU0laRSk7CiAJCQkJbmV3X2ZjcG9ydC0+ZnBfc3BlZWQgPSBzd2xbc3dsX2lkeF0uZnBfc3BlZWQ7CisJCQkJbmV3X2ZjcG9ydC0+ZmM0X3R5cGUgPSBzd2xbc3dsX2lkeF0uZmM0X3R5cGU7CiAKIAkJCQlpZiAoc3dsW3N3bF9pZHhdLmRfaWQuYi5yc3ZkXzEgIT0gMCkgewogCQkJCQlsYXN0X2RldiA9IDE7CkBAIC0zMjc4LDYgKzMyMzgsMTEgQEAKIAkJaWYgKChuZXdfZmNwb3J0LT5kX2lkLmIuZG9tYWluICYgMHhmMCkgPT0gMHhmMCkKIAkJCWNvbnRpbnVlOwogCisJCS8qIEJ5cGFzcyBwb3J0cyB3aG9zZSBGQ1AtNCB0eXBlIGlzIG5vdCBGQ1BfU0NTSSAqLworCQlpZiAobmV3X2ZjcG9ydC0+ZmM0X3R5cGUgIT0gRkM0X1RZUEVfRkNQX1NDU0kgJiYKKwkJICAgIG5ld19mY3BvcnQtPmZjNF90eXBlICE9IEZDNF9UWVBFX1VOS05PV04pCisJCQljb250aW51ZTsKKwogCQkvKiBMb2NhdGUgbWF0Y2hpbmcgZGV2aWNlIGluIGRhdGFiYXNlLiAqLwogCQlmb3VuZCA9IDA7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoZmNwb3J0LCAmdmhhLT52cF9mY3BvcnRzLCBsaXN0KSB7CkBAIC0zODY4LDggKzM4MzMsMTMgQEAKIAl9CiAKIAkvKiBNYWtlIHN1cmUgZm9yIElTUCA4MlhYIElPIERNQSBpcyBjb21wbGV0ZSAqLwotCWlmIChJU19RTEE4MlhYKGhhKSkKLQkJcWxhODJ4eF93YWl0X2Zvcl9wZW5kaW5nX2NvbW1hbmRzKHZoYSk7CisJaWYgKElTX1FMQTgyWFgoaGEpKSB7CisJCWlmIChxbGEyeDAwX2VoX3dhaXRfZm9yX3BlbmRpbmdfY29tbWFuZHModmhhLCAwLCAwLAorCQkJV0FJVF9IT1NUKSA9PSBRTEFfU1VDQ0VTUykgeworCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkJCSJEb25lIHdhaXQgZm9yIHBlbmRpbmcgY29tbWFuZHNcbiIpKTsKKwkJfQorCX0KIAogCS8qIFJlcXVldWUgYWxsIGNvbW1hbmRzIGluIG91dHN0YW5kaW5nIGNvbW1hbmQgbGlzdC4gKi8KIAlxbGEyeDAwX2Fib3J0X2FsbF9jbWRzKHZoYSwgRElEX1JFU0VUIDw8IDE2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbmxpbmUuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbmxpbmUuaAppbmRleCA4NGMyZmVhLi40OGY5N2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5saW5lLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lubGluZS5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwOCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW9jYi5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lvY2IuYwppbmRleCA4ZWY5NDUzLi41NzlmMDI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW9jYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pb2NiLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogUUxvZ2ljIEZpYnJlIENoYW5uZWwgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDA4IFFMb2dpYyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDEwIFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKICAqIFNlZSBMSUNFTlNFLnFsYTJ4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KQEAgLTExLDggKzExLDYgQEAKIAogI2luY2x1ZGUgPHNjc2kvc2NzaV90Y3EuaD4KIAotc3RhdGljIHJlcXVlc3RfdCAqcWxhMngwMF9yZXFfcGt0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICosIHN0cnVjdCByZXFfcXVlICosCi0JCQkJCQkJc3RydWN0IHJzcF9xdWUgKnJzcCk7CiBzdGF0aWMgdm9pZCBxbGEyeDAwX2lzcF9jbWQoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiwgc3RydWN0IHJlcV9xdWUgKik7CiAKIHN0YXRpYyB2b2lkIHFsYTI1eHhfc2V0X3F1ZShzcmJfdCAqLCBzdHJ1Y3QgcnNwX3F1ZSAqKik7CkBAIC00NjMsNyArNDYxLDcgQEAKICAqCiAgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIGEgZmFpbHVyZSBvY2N1cnJlZCwgZWxzZSB6ZXJvLgogICovCi1pbnQKK3N0YXRpYyBpbnQKIF9fcWxhMngwMF9tYXJrZXIoc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZoYSwgc3RydWN0IHJlcV9xdWUgKnJlcSwKIAkJCXN0cnVjdCByc3BfcXVlICpyc3AsIHVpbnQxNl90IGxvb3BfaWQsCiAJCQl1aW50MTZfdCBsdW4sIHVpbnQ4X3QgdHlwZSkKQEAgLTQ3NCw3ICs0NzIsNyBAQAogCXNjc2lfcWxhX2hvc3RfdCAqYmFzZV92aGEgPSBwY2lfZ2V0X2RydmRhdGEoaGEtPnBkZXYpOwogCiAJbXJrMjQgPSBOVUxMOwotCW1yayA9IChtcmtfZW50cnlfdCAqKXFsYTJ4MDBfcmVxX3BrdCh2aGEsIHJlcSwgcnNwKTsKKwltcmsgPSAobXJrX2VudHJ5X3QgKilxbGEyeDAwX2FsbG9jX2lvY2JzKHZoYSwgMCk7CiAJaWYgKG1yayA9PSBOVUxMKSB7CiAJCURFQlVHMl8zKHByaW50aygiJXMoJWxkKTogZmFpbGVkIHRvIGFsbG9jYXRlIE1hcmtlciBJT0NCLlxuIiwKIAkJICAgIF9fZnVuY19fLCBiYXNlX3ZoYS0+aG9zdF9ubykpOwpAQCAtNTIxLDg0ICs1MTksNiBAQAogfQogCiAvKioKLSAqIHFsYTJ4MDBfcmVxX3BrdCgpIC0gUmV0cmlldmUgYSByZXF1ZXN0IHBhY2tldCBmcm9tIHRoZSByZXF1ZXN0IHJpbmcuCi0gKiBAaGE6IEhBIGNvbnRleHQKLSAqCi0gKiBOb3RlOiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgaGFyZHdhcmUgbG9jayBiZWZvcmUgY2FsbGluZyB0aGlzIHJvdXRpbmUuCi0gKgotICogUmV0dXJucyBOVUxMIGlmIGZ1bmN0aW9uIGZhaWxlZCwgZWxzZSwgYSBwb2ludGVyIHRvIHRoZSByZXF1ZXN0IHBhY2tldC4KLSAqLwotc3RhdGljIHJlcXVlc3RfdCAqCi1xbGEyeDAwX3JlcV9wa3Qoc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZoYSwgc3RydWN0IHJlcV9xdWUgKnJlcSwKLQkJc3RydWN0IHJzcF9xdWUgKnJzcCkKLXsKLQlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKLQlkZXZpY2VfcmVnX3QgX19pb21lbSAqcmVnID0gSVNQX1FVRV9SRUcoaGEsIHJlcS0+aWQpOwotCXJlcXVlc3RfdAkqcGt0ID0gTlVMTDsKLQl1aW50MTZfdAljbnQ7Ci0JdWludDMyX3QJKmR3b3JkX3B0cjsKLQl1aW50MzJfdAl0aW1lcjsKLQl1aW50MTZfdAlyZXFfY250ID0gMTsKLQotCS8qIFdhaXQgMSBzZWNvbmQgZm9yIHNsb3QuICovCi0JZm9yICh0aW1lciA9IEhaOyB0aW1lcjsgdGltZXItLSkgewotCQlpZiAoKHJlcV9jbnQgKyAyKSA+PSByZXEtPmNudCkgewotCQkJLyogQ2FsY3VsYXRlIG51bWJlciBvZiBmcmVlIHJlcXVlc3QgZW50cmllcy4gKi8KLQkJCWlmIChoYS0+bXFlbmFibGUpCi0JCQkJY250ID0gKHVpbnQxNl90KQotCQkJCQlSRF9SRUdfRFdPUkQoJnJlZy0+aXNwMjVtcS5yZXFfcV9vdXQpOwotCQkJZWxzZSB7Ci0JCQkJaWYgKElTX1FMQTgyWFgoaGEpKQotCQkJCQljbnQgPSAodWludDE2X3QpUkRfUkVHX0RXT1JEKAotCQkJCQkgICAgJnJlZy0+aXNwODIucmVxX3Ffb3V0KTsKLQkJCQllbHNlIGlmIChJU19GV0kyX0NBUEFCTEUoaGEpKQotCQkJCQljbnQgPSAodWludDE2X3QpUkRfUkVHX0RXT1JEKAotCQkJCQkJJnJlZy0+aXNwMjQucmVxX3Ffb3V0KTsKLQkJCQllbHNlCi0JCQkJCWNudCA9IHFsYTJ4MDBfZGVib3VuY2VfcmVnaXN0ZXIoCi0JCQkJCQlJU1BfUkVRX1FfT1VUKGhhLCAmcmVnLT5pc3ApKTsKLQkJCX0KLQkJCWlmICAocmVxLT5yaW5nX2luZGV4IDwgY250KQotCQkJCXJlcS0+Y250ID0gY250IC0gcmVxLT5yaW5nX2luZGV4OwotCQkJZWxzZQotCQkJCXJlcS0+Y250ID0gcmVxLT5sZW5ndGggLQotCQkJCSAgICAocmVxLT5yaW5nX2luZGV4IC0gY250KTsKLQkJfQotCQkvKiBJZiByb29tIGZvciByZXF1ZXN0IGluIHJlcXVlc3QgcmluZy4gKi8KLQkJaWYgKChyZXFfY250ICsgMikgPCByZXEtPmNudCkgewotCQkJcmVxLT5jbnQtLTsKLQkJCXBrdCA9IHJlcS0+cmluZ19wdHI7Ci0KLQkJCS8qIFplcm8gb3V0IHBhY2tldC4gKi8KLQkJCWR3b3JkX3B0ciA9ICh1aW50MzJfdCAqKXBrdDsKLQkJCWZvciAoY250ID0gMDsgY250IDwgUkVRVUVTVF9FTlRSWV9TSVpFIC8gNDsgY250KyspCi0JCQkJKmR3b3JkX3B0cisrID0gMDsKLQotCQkJLyogU2V0IGVudHJ5IGNvdW50LiAqLwotCQkJcGt0LT5lbnRyeV9jb3VudCA9IDE7Ci0KLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogUmVsZWFzZSByaW5nIHNwZWNpZmljIGxvY2sgKi8KLQkJc3Bpbl91bmxvY2tfaXJxKCZoYS0+aGFyZHdhcmVfbG9jayk7Ci0KLQkJdWRlbGF5KDIpOyAgIC8qIDIgdXMgKi8KLQotCQkvKiBDaGVjayBmb3IgcGVuZGluZyBpbnRlcnJ1cHRzLiAqLwotCQkvKiBEdXJpbmcgaW5pdCB3ZSBpc3N1ZSBtYXJrZXIgZGlyZWN0bHkgKi8KLQkJaWYgKCF2aGEtPm1hcmtlcl9uZWVkZWQgJiYgIXZoYS0+ZmxhZ3MuaW5pdF9kb25lKQotCQkJcWxhMngwMF9wb2xsKHJzcCk7Ci0JCXNwaW5fbG9ja19pcnEoJmhhLT5oYXJkd2FyZV9sb2NrKTsKLQl9Ci0JaWYgKCFwa3QpIHsKLQkJREVCVUcyXzMocHJpbnRrKCIlcygpOiAqKioqIEZBSUxFRCAqKioqXG4iLCBfX2Z1bmNfXykpOwotCX0KLQotCXJldHVybiAocGt0KTsKLX0KLQotLyoqCiAgKiBxbGEyeDAwX2lzcF9jbWQoKSAtIE1vZGlmeSB0aGUgcmVxdWVzdCByaW5nIHBvaW50ZXIuCiAgKiBAaGE6IEhBIGNvbnRleHQKICAqCkBAIC03OTIsNiArNzEyLDI1IEBACiAJICogbWF0Y2ggTEJBIGluIENEQiArIE4KIAkgKi8KIAljYXNlIFNDU0lfUFJPVF9ESUZfVFlQRTI6CisJCWlmICghcWwyeGVuYWJsZWhiYV9lcnJfY2hrKQorCQkJYnJlYWs7CisKKwkJaWYgKHNjc2lfcHJvdF9zZ19jb3VudChjbWQpKSB7CisJCQlzcHQgPSBwYWdlX2FkZHJlc3Moc2dfcGFnZShzY3NpX3Byb3Rfc2dsaXN0KGNtZCkpKSArCisJCQkgICAgc2NzaV9wcm90X3NnbGlzdChjbWQpWzBdLm9mZnNldDsKKwkJCXBrdC0+YXBwX3RhZyA9IHN3YWIzMihzcHQtPmFwcF90YWcpOworCQkJcGt0LT5hcHBfdGFnX21hc2tbMF0gPSAgMHhmZjsKKwkJCXBrdC0+YXBwX3RhZ19tYXNrWzFdID0gIDB4ZmY7CisJCX0KKworCQlwa3QtPnJlZl90YWcgPSBjcHVfdG9fbGUzMigodWludDMyX3QpCisJCSAgICAoMHhmZmZmZmZmZiAmIHNjc2lfZ2V0X2xiYShjbWQpKSk7CisKKwkJLyogZW5hYmxlIEFMTCBieXRlcyBvZiB0aGUgcmVmIHRhZyAqLworCQlwa3QtPnJlZl90YWdfbWFza1swXSA9IDB4ZmY7CisJCXBrdC0+cmVmX3RhZ19tYXNrWzFdID0gMHhmZjsKKwkJcGt0LT5yZWZfdGFnX21hc2tbMl0gPSAweGZmOworCQlwa3QtPnJlZl90YWdfbWFza1szXSA9IDB4ZmY7CiAJCWJyZWFrOwogCiAJLyogRm9yIFR5cGUgMyBwcm90ZWN0aW9uOiAxNiBiaXQgR1VBUkQgb25seSAqLwpAQCAtMTEyOSw3ICsxMDY4LDcgQEAKIAljbWRfcGt0LT5mY3BfY21uZF9kc2VnX2FkZHJlc3NbMV0gPSBjcHVfdG9fbGUzMigKIAkgICAgTVNEKGNyY19jdHhfZG1hICsgQ1JDX0NPTlRFWFRfRkNQQ01ORF9PRkYpKTsKIAlmY3BfY21uZC0+dGFza19hdHRyaWJ1dGUgPSAwOwotCWZjcF9jbW5kLT50YXNrX21hbmFnbWVudCA9IDA7CisJZmNwX2NtbmQtPnRhc2tfbWFuYWdlbWVudCA9IDA7CiAKIAljbWRfcGt0LT5mY3BfcnNwX2RzZWdfbGVuID0gMDsgLyogTGV0IHJlc3BvbnNlIGNvbWUgaW4gc3RhdHVzIGlvY2IgKi8KIApAQCAtMTE0Miw3ICsxMDgxLDcgQEAKIAl0b3RhbF9ieXRlcyA9IGRhdGFfYnl0ZXM7CiAJZGlmX2J5dGVzID0gMDsKIAlibGtfc2l6ZSA9IGNtZC0+ZGV2aWNlLT5zZWN0b3Jfc2l6ZTsKLQlpZiAoc2NzaV9nZXRfcHJvdF90eXBlKGNtZCkgPT0gU0NTSV9QUk9UX0RJRl9UWVBFMSkgeworCWlmIChzY3NpX2dldF9wcm90X29wKGNtZCkgIT0gU0NTSV9QUk9UX05PUk1BTCkgewogCQlkaWZfYnl0ZXMgPSAoZGF0YV9ieXRlcyAvIGJsa19zaXplKSAqIDg7CiAJCXRvdGFsX2J5dGVzICs9IGRpZl9ieXRlczsKIAl9CkBAIC0xMTgwLDYgKzExMTksMTIgQEAKIAkgICAgdmhhLT5ob3N0X25vLCBkaWZfYnl0ZXMsIGRpZl9ieXRlcywgdG90YWxfYnl0ZXMsIHRvdGFsX2J5dGVzLAogCSAgICBjcmNfY3R4X3BrdC0+YmxrX3NpemUsIGNyY19jdHhfcGt0LT5ibGtfc2l6ZSkpOwogCisJaWYgKCFkYXRhX2J5dGVzIHx8IGNtZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX05PTkUpIHsKKwkJREVCVUcxOChwcmludGsoS0VSTl9JTkZPICIlczogWmVybyBkYXRhIGJ5dGVzIG9yIERNQS1OT05FICVkXG4iLAorCQkgICAgX19mdW5jX18sIGRhdGFfYnl0ZXMpKTsKKwkJY21kX3BrdC0+Ynl0ZV9jb3VudCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMCk7CisJCXJldHVybiBRTEFfU1VDQ0VTUzsKKwl9CiAJLyogV2Fsa3MgZGF0YSBzZWdtZW50cyAqLwogCiAJY21kX3BrdC0+Y29udHJvbF9mbGFncyB8PQpAQCAtMTM5MCw5ICsxMzM1LDExIEBACiAKICNkZWZpbmUgUURTU19HT1RfUV9TUEFDRQlCSVRfMAogCi0JLyogT25seSBwcm9jZXNzIHByb3RlY3Rpb24gaW4gdGhpcyByb3V0aW5lICovCi0JaWYgKHNjc2lfZ2V0X3Byb3Rfb3AoY21kKSA9PSBTQ1NJX1BST1RfTk9STUFMKQotCQlyZXR1cm4gcWxhMjR4eF9zdGFydF9zY3NpKHNwKTsKKwkvKiBPbmx5IHByb2Nlc3MgcHJvdGVjdGlvbiBvciA+MTYgY2RiIGluIHRoaXMgcm91dGluZSAqLworCWlmIChzY3NpX2dldF9wcm90X29wKGNtZCkgPT0gU0NTSV9QUk9UX05PUk1BTCkgeworCQlpZiAoY21kLT5jbWRfbGVuIDw9IDE2KQorCQkJcmV0dXJuIHFsYTI0eHhfc3RhcnRfc2NzaShzcCk7CisJfQogCiAJLyogU2V0dXAgZGV2aWNlIHBvaW50ZXJzLiAqLwogCkBAIC0xNTU5LDExICsxNTA2LDkgQEAKIH0KIAogLyogR2VuZXJpYyBDb250cm9sLVNSQiBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLiAqLwotCi1zdGF0aWMgdm9pZCAqCi1xbGEyeDAwX2FsbG9jX2lvY2JzKHNyYl90ICpzcCkKK3ZvaWQgKgorcWxhMngwMF9hbGxvY19pb2NicyhzY3NpX3FsYV9ob3N0X3QgKnZoYSwgc3JiX3QgKnNwKQogewotCXNjc2lfcWxhX2hvc3RfdAkqdmhhID0gc3AtPmZjcG9ydC0+dmhhOwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwogCXN0cnVjdCByZXFfcXVlICpyZXEgPSBoYS0+cmVxX3FfbWFwWzBdOwogCWRldmljZV9yZWdfdCBfX2lvbWVtICpyZWcgPSBJU1BfUVVFX1JFRyhoYSwgcmVxLT5pZCk7CkBAIC0xNTczLDYgKzE1MTgsMTAgQEAKIAogCXBrdCA9IE5VTEw7CiAJcmVxX2NudCA9IDE7CisJaGFuZGxlID0gMDsKKworCWlmICghc3ApCisJCWdvdG8gc2tpcF9jbWRfYXJyYXk7CiAKIAkvKiBDaGVjayBmb3Igcm9vbSBpbiBvdXRzdGFuZGluZyBjb21tYW5kIGxpc3QuICovCiAJaGFuZGxlID0gcmVxLT5jdXJyZW50X291dHN0YW5kaW5nX2NtZDsKQEAgLTE1ODYsMTAgKzE1MzUsMTggQEAKIAlpZiAoaW5kZXggPT0gTUFYX09VVFNUQU5ESU5HX0NPTU1BTkRTKQogCQlnb3RvIHF1ZXVpbmdfZXJyb3I7CiAKKwkvKiBQcmVwIGNvbW1hbmQgYXJyYXkuICovCisJcmVxLT5jdXJyZW50X291dHN0YW5kaW5nX2NtZCA9IGhhbmRsZTsKKwlyZXEtPm91dHN0YW5kaW5nX2NtZHNbaGFuZGxlXSA9IHNwOworCXNwLT5oYW5kbGUgPSBoYW5kbGU7CisKK3NraXBfY21kX2FycmF5OgogCS8qIENoZWNrIGZvciByb29tIG9uIHJlcXVlc3QgcXVldWUuICovCiAJaWYgKHJlcS0+Y250IDwgcmVxX2NudCkgewogCQlpZiAoaGEtPm1xZW5hYmxlKQogCQkJY250ID0gUkRfUkVHX0RXT1JEKCZyZWctPmlzcDI1bXEucmVxX3Ffb3V0KTsKKwkJZWxzZSBpZiAoSVNfUUxBODJYWChoYSkpCisJCQljbnQgPSBSRF9SRUdfRFdPUkQoJnJlZy0+aXNwODIucmVxX3Ffb3V0KTsKIAkJZWxzZSBpZiAoSVNfRldJMl9DQVBBQkxFKGhhKSkKIAkJCWNudCA9IFJEX1JFR19EV09SRCgmcmVnLT5pc3AyNC5yZXFfcV9vdXQpOwogCQllbHNlCkBAIC0xNjA2LDE1ICsxNTYzLDExIEBACiAJCWdvdG8gcXVldWluZ19lcnJvcjsKIAogCS8qIFByZXAgcGFja2V0ICovCi0JcmVxLT5jdXJyZW50X291dHN0YW5kaW5nX2NtZCA9IGhhbmRsZTsKLQlyZXEtPm91dHN0YW5kaW5nX2NtZHNbaGFuZGxlXSA9IHNwOwogCXJlcS0+Y250IC09IHJlcV9jbnQ7Ci0KIAlwa3QgPSByZXEtPnJpbmdfcHRyOwogCW1lbXNldChwa3QsIDAsIFJFUVVFU1RfRU5UUllfU0laRSk7CiAJcGt0LT5lbnRyeV9jb3VudCA9IHJlcV9jbnQ7CiAJcGt0LT5oYW5kbGUgPSBoYW5kbGU7Ci0Jc3AtPmhhbmRsZSA9IGhhbmRsZTsKIAogcXVldWluZ19lcnJvcjoKIAlyZXR1cm4gcGt0OwpAQCAtMTY4Myw3ICsxNjM2LDcgQEAKIAlzdHJ1Y3Qgc3JiX2lvY2IgKmxpbyA9IGN0eC0+dS5pb2NiX2NtZDsKIAl1aW50MTZfdCBvcHRzOwogCi0JbWJ4LT5lbnRyeV90eXBlID0gTUJYX0lPQ0JfVFlQRTs7CisJbWJ4LT5lbnRyeV90eXBlID0gTUJYX0lPQ0JfVFlQRTsKIAlTRVRfVEFSR0VUX0lEKGhhLCBtYngtPmxvb3BfaWQsIHNwLT5mY3BvcnQtPmxvb3BfaWQpOwogCW1ieC0+bWIwID0gY3B1X3RvX2xlMTYoTUJDX0xPR0lOX0ZBQlJJQ19QT1JUKTsKIAlvcHRzID0gbGlvLT51LmxvZ2lvLmZsYWdzICYgU1JCX0xPR0lOX0NPTkRfUExPR0kgPyBCSVRfMCA6IDA7CkBAIC0xNzE4LDcgKzE2NzEsNyBAQAogewogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSBzcC0+ZmNwb3J0LT52aGEtPmh3OwogCi0JbWJ4LT5lbnRyeV90eXBlID0gTUJYX0lPQ0JfVFlQRTs7CisJbWJ4LT5lbnRyeV90eXBlID0gTUJYX0lPQ0JfVFlQRTsKIAlTRVRfVEFSR0VUX0lEKGhhLCBtYngtPmxvb3BfaWQsIHNwLT5mY3BvcnQtPmxvb3BfaWQpOwogCW1ieC0+bWIwID0gY3B1X3RvX2xlMTYoTUJDX0xPR09VVF9GQUJSSUNfUE9SVCk7CiAJbWJ4LT5tYjEgPSBIQVNfRVhURU5ERURfSURTKGhhKSA/CkBAIC0xNzk1LDMxICsxNzQ4LDYgQEAKIH0KIAogc3RhdGljIHZvaWQKLXFsYTI0eHhfbWFya2VyX2lvY2Ioc3JiX3QgKnNwLCBzdHJ1Y3QgbXJrX2VudHJ5XzI0eHggKm1yaykKLXsKLQl1aW50MTZfdCBsdW47Ci0JdWludDhfdCBtb2RpZjsKLQlzdHJ1Y3QgZmNfcG9ydCAqZmNwb3J0ID0gc3AtPmZjcG9ydDsKLQlzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IGZjcG9ydC0+dmhhOwotCXN0cnVjdCBzcmJfY3R4ICpjdHggPSBzcC0+Y3R4OwotCXN0cnVjdCBzcmJfaW9jYiAqaW9jYiA9IGN0eC0+dS5pb2NiX2NtZDsKLQlzdHJ1Y3QgcmVxX3F1ZSAqcmVxID0gdmhhLT5yZXE7Ci0KLQlsdW4gPSBpb2NiLT51Lm1hcmtlci5sdW47Ci0JbW9kaWYgPSBpb2NiLT51Lm1hcmtlci5tb2RpZjsKLQltcmstPmVudHJ5X3R5cGUgPSBNQVJLRVJfVFlQRTsKLQltcmstPm1vZGlmaWVyID0gbW9kaWY7Ci0JaWYgKG1vZGlmICE9ICBNS19TWU5DX0FMTCkgewotCQltcmstPm5wb3J0X2hhbmRsZSA9IGNwdV90b19sZTE2KGZjcG9ydC0+bG9vcF9pZCk7Ci0JCW1yay0+bHVuWzFdID0gTFNCKGx1bik7Ci0JCW1yay0+bHVuWzJdID0gTVNCKGx1bik7Ci0JCWhvc3RfdG9fZmNwX3N3YXAobXJrLT5sdW4sIHNpemVvZihtcmstPmx1bikpOwotCQltcmstPnZwX2luZGV4ID0gdmhhLT52cF9pZHg7Ci0JCW1yay0+aGFuZGxlID0gTUFLRV9IQU5ETEUocmVxLT5pZCwgbXJrLT5oYW5kbGUpOwotCX0KLX0KLQotc3RhdGljIHZvaWQKIHFsYTI0eHhfZWxzX2lvY2Ioc3JiX3QgKnNwLCBzdHJ1Y3QgZWxzX2VudHJ5XzI0eHggKmVsc19pb2NiKQogewogCXN0cnVjdCBmY19ic2dfam9iICpic2dfam9iID0gKChzdHJ1Y3Qgc3JiX2N0eCAqKXNwLT5jdHgpLT51LmJzZ19qb2I7CkBAIC0xODY0LDYgKzE3OTIsODIgQEAKIH0KIAogc3RhdGljIHZvaWQKK3FsYTJ4MDBfY3RfaW9jYihzcmJfdCAqc3AsIG1zX2lvY2JfZW50cnlfdCAqY3RfaW9jYikKK3sKKwl1aW50MTZfdCAgICAgICAgYXZhaWxfZHNkczsKKwl1aW50MzJfdCAgICAgICAgKmN1cl9kc2Q7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQgaW5kZXg7CisJdWludDE2X3QgdG90X2RzZHM7CisJc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBzcC0+ZmNwb3J0LT52aGE7CisJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CisJc3RydWN0IGZjX2JzZ19qb2IgKmJzZ19qb2IgPSAoKHN0cnVjdCBzcmJfY3R4ICopc3AtPmN0eCktPnUuYnNnX2pvYjsKKwlpbnQgbG9vcF9pdGVyYXJ0aW9uID0gMDsKKwlpbnQgY29udF9pb2NiX3Byc250ID0gMDsKKwlpbnQgZW50cnlfY291bnQgPSAxOworCisJbWVtc2V0KGN0X2lvY2IsIDAsIHNpemVvZihtc19pb2NiX2VudHJ5X3QpKTsKKwljdF9pb2NiLT5lbnRyeV90eXBlID0gQ1RfSU9DQl9UWVBFOworCWN0X2lvY2ItPmVudHJ5X3N0YXR1cyA9IDA7CisJY3RfaW9jYi0+aGFuZGxlMSA9IHNwLT5oYW5kbGU7CisJU0VUX1RBUkdFVF9JRChoYSwgY3RfaW9jYi0+bG9vcF9pZCwgc3AtPmZjcG9ydC0+bG9vcF9pZCk7CisJY3RfaW9jYi0+c3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigwKTsKKwljdF9pb2NiLT5jb250cm9sX2ZsYWdzID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigwKTsKKwljdF9pb2NiLT50aW1lb3V0ID0gMDsKKwljdF9pb2NiLT5jbWRfZHNkX2NvdW50ID0KKwkgICAgX19jb25zdGFudF9jcHVfdG9fbGUxNihic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250KTsKKwljdF9pb2NiLT50b3RhbF9kc2RfY291bnQgPQorCSAgICBfX2NvbnN0YW50X2NwdV90b19sZTE2KGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQgKyAxKTsKKwljdF9pb2NiLT5yZXFfYnl0ZWNvdW50ID0KKwkgICAgY3B1X3RvX2xlMzIoYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnBheWxvYWRfbGVuKTsKKwljdF9pb2NiLT5yc3BfYnl0ZWNvdW50ID0KKwkgICAgY3B1X3RvX2xlMzIoYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5wYXlsb2FkX2xlbik7CisKKwljdF9pb2NiLT5kc2VnX3JlcV9hZGRyZXNzWzBdID0gY3B1X3RvX2xlMzIoTFNEKHNnX2RtYV9hZGRyZXNzCisJICAgIChic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCkpKTsKKwljdF9pb2NiLT5kc2VnX3JlcV9hZGRyZXNzWzFdID0gY3B1X3RvX2xlMzIoTVNEKHNnX2RtYV9hZGRyZXNzCisJICAgIChic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCkpKTsKKwljdF9pb2NiLT5kc2VnX3JlcV9sZW5ndGggPSBjdF9pb2NiLT5yZXFfYnl0ZWNvdW50OworCisJY3RfaW9jYi0+ZHNlZ19yc3BfYWRkcmVzc1swXSA9IGNwdV90b19sZTMyKExTRChzZ19kbWFfYWRkcmVzcworCSAgICAoYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0KSkpOworCWN0X2lvY2ItPmRzZWdfcnNwX2FkZHJlc3NbMV0gPSBjcHVfdG9fbGUzMihNU0Qoc2dfZG1hX2FkZHJlc3MKKwkgICAgKGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCkpKTsKKwljdF9pb2NiLT5kc2VnX3JzcF9sZW5ndGggPSBjdF9pb2NiLT5yc3BfYnl0ZWNvdW50OworCisJYXZhaWxfZHNkcyA9IDE7CisJY3VyX2RzZCA9ICh1aW50MzJfdCAqKWN0X2lvY2ItPmRzZWdfcnNwX2FkZHJlc3M7CisJaW5kZXggPSAwOworCXRvdF9kc2RzID0gYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQ7CisKKwlmb3JfZWFjaF9zZyhic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsIHNnLCB0b3RfZHNkcywgaW5kZXgpIHsKKwkJZG1hX2FkZHJfdCAgICAgICBzbGVfZG1hOworCQljb250X2E2NF9lbnRyeV90ICpjb250X3BrdDsKKworCQkvKiBBbGxvY2F0ZSBhZGRpdGlvbmFsIGNvbnRpbnVhdGlvbiBwYWNrZXRzPyAqLworCQlpZiAoYXZhaWxfZHNkcyA9PSAwKSB7CisJCQkvKgorCQkJKiBGaXZlIERTRHMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgQ29udC4KKwkJCSogVHlwZSAxIElPQ0IuCisJCQkgICAgICAgKi8KKwkJCWNvbnRfcGt0ID0gcWxhMngwMF9wcmVwX2NvbnRfdHlwZTFfaW9jYih2aGEpOworCQkJY3VyX2RzZCA9ICh1aW50MzJfdCAqKSBjb250X3BrdC0+ZHNlZ18wX2FkZHJlc3M7CisJCQlhdmFpbF9kc2RzID0gNTsKKwkJCWNvbnRfaW9jYl9wcnNudCA9IDE7CisJCQllbnRyeV9jb3VudCsrOworCQl9CisKKwkJc2xlX2RtYSA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJKmN1cl9kc2QrKyAgID0gY3B1X3RvX2xlMzIoTFNEKHNsZV9kbWEpKTsKKwkJKmN1cl9kc2QrKyAgID0gY3B1X3RvX2xlMzIoTVNEKHNsZV9kbWEpKTsKKwkJKmN1cl9kc2QrKyAgID0gY3B1X3RvX2xlMzIoc2dfZG1hX2xlbihzZykpOworCQlsb29wX2l0ZXJhcnRpb24rKzsKKwkJYXZhaWxfZHNkcy0tOworCX0KKwljdF9pb2NiLT5lbnRyeV9jb3VudCA9IGVudHJ5X2NvdW50OworfQorCitzdGF0aWMgdm9pZAogcWxhMjR4eF9jdF9pb2NiKHNyYl90ICpzcCwgc3RydWN0IGN0X2VudHJ5XzI0eHggKmN0X2lvY2IpCiB7CiAJdWludDE2X3QgICAgICAgIGF2YWlsX2RzZHM7CkBAIC0xOTQ1LDcgKzE5NDksNyBAQAogCiAJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7Ci0JcGt0ID0gcWxhMngwMF9hbGxvY19pb2NicyhzcCk7CisJcGt0ID0gcWxhMngwMF9hbGxvY19pb2NicyhzcC0+ZmNwb3J0LT52aGEsIHNwKTsKIAlpZiAoIXBrdCkKIAkJZ290byBkb25lOwogCkBAIC0xOTY2LDcgKzE5NzAsOSBAQAogCQlxbGEyNHh4X2Vsc19pb2NiKHNwLCBwa3QpOwogCQlicmVhazsKIAljYXNlIFNSQl9DVF9DTUQ6Ci0JCXFsYTI0eHhfY3RfaW9jYihzcCwgcGt0KTsKKwkJSVNfRldJMl9DQVBBQkxFKGhhKSA/CisJCXFsYTI0eHhfY3RfaW9jYihzcCwgcGt0KSA6CisJCXFsYTJ4MDBfY3RfaW9jYihzcCwgcGt0KTsKIAkJYnJlYWs7CiAJY2FzZSBTUkJfQURJU0NfQ01EOgogCQlJU19GV0kyX0NBUEFCTEUoaGEpID8KQEAgLTE5NzYsOSArMTk4Miw2IEBACiAJY2FzZSBTUkJfVE1fQ01EOgogCQlxbGEyNHh4X3RtX2lvY2Ioc3AsIHBrdCk7CiAJCWJyZWFrOwotCWNhc2UgU1JCX01BUktFUl9DTUQ6Ci0JCXFsYTI0eHhfbWFya2VyX2lvY2Ioc3AsIHBrdCk7Ci0JCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYwppbmRleCBiZTNkOGJlLi42OTgyYmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwOCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCkBAIC01NDUsMTAgKzU0NSwxMyBAQAogCQlpZiAoSVNfUUxBMjEwMChoYSkpCiAJCQlicmVhazsKIAotCQlpZiAoSVNfUUxBOFhYWF9UWVBFKGhhKSkKKwkJaWYgKElTX1FMQThYWFhfVFlQRShoYSkpIHsKIAkJCURFQlVHMihwcmludGsoInNjc2koJWxkKTogRENCWCBDb21wbGV0ZWQgLS0gJTA0eCAlMDR4ICIKIAkJCSAgICAiJTA0eFxuIiwgdmhhLT5ob3N0X25vLCBtYlsxXSwgbWJbMl0sIG1iWzNdKSk7Ci0JCWVsc2UKKwkJCWlmIChoYS0+bm90aWZ5X2RjYnhfY29tcCkKKwkJCQljb21wbGV0ZSgmaGEtPmRjYnhfY29tcCk7CisKKwkJfSBlbHNlCiAJCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IEFzeW5jaHJvbm91cyBQMlAgTU9ERSAiCiAJCQkgICAgInJlY2VpdmVkLlxuIiwgdmhhLT5ob3N0X25vKSk7CiAKQEAgLTkxOCwxMiArOTIxLDE1IEBACiAJICAgIFFMQV9MT0dJT19MT0dJTl9SRVRSSUVEIDogMDsKIAlpZiAobWJ4LT5lbnRyeV9zdGF0dXMpIHsKIAkJREVCVUcyKHByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICJzY3NpKCVsZDoleCk6IEFzeW5jLSVzIGVycm9yIGVudHJ5IC0gZW50cnktc3RhdHVzPSV4ICIKLQkJICAgICJzdGF0dXM9JXggc3RhdGUtZmxhZz0leCBzdGF0dXMtZmxhZ3M9JXguXG4iLAorCQkgICAgInNjc2koJWxkOiV4KTogQXN5bmMtJXMgZXJyb3IgZW50cnkgLSBwb3J0aWQ9JTAyeCUwMnglMDJ4ICIKKwkJICAgICJlbnRyeS1zdGF0dXM9JXggc3RhdHVzPSV4IHN0YXRlLWZsYWc9JXggIgorCQkgICAgInN0YXR1cy1mbGFncz0leC5cbiIsCiAJCSAgICBmY3BvcnQtPnZoYS0+aG9zdF9ubywgc3AtPmhhbmRsZSwgdHlwZSwKLQkJICAgIG1ieC0+ZW50cnlfc3RhdHVzLCBsZTE2X3RvX2NwdShtYngtPnN0YXR1cyksCi0JCSAgICBsZTE2X3RvX2NwdShtYngtPnN0YXRlX2ZsYWdzKSwKKwkJICAgIGZjcG9ydC0+ZF9pZC5iLmRvbWFpbiwgZmNwb3J0LT5kX2lkLmIuYXJlYSwKKwkJICAgIGZjcG9ydC0+ZF9pZC5iLmFsX3BhLCBtYngtPmVudHJ5X3N0YXR1cywKKwkJICAgIGxlMTZfdG9fY3B1KG1ieC0+c3RhdHVzKSwgbGUxNl90b19jcHUobWJ4LT5zdGF0ZV9mbGFncyksCiAJCSAgICBsZTE2X3RvX2NwdShtYngtPnN0YXR1c19mbGFncykpKTsKKwogCQlERUJVRzIocWxhMngwMF9kdW1wX2J1ZmZlcigodWludDhfdCAqKW1ieCwgc2l6ZW9mKCptYngpKSk7CiAKIAkJZ290byBsb2dpb19kb25lOwpAQCAtOTM1LDE2ICs5NDEsMTggQEAKIAkJc3RhdHVzID0gMDsKIAlpZiAoIXN0YXR1cyAmJiBsZTE2X3RvX2NwdShtYngtPm1iMCkgPT0gTUJTX0NPTU1BTkRfQ09NUExFVEUpIHsKIAkJREVCVUcyKHByaW50ayhLRVJOX0RFQlVHCi0JCSAgICAic2NzaSglbGQ6JXgpOiBBc3luYy0lcyBjb21wbGV0ZSAtIG1ieDE9JXguXG4iLAorCQkgICAgInNjc2koJWxkOiV4KTogQXN5bmMtJXMgY29tcGxldGUgLSBwb3J0aWQ9JTAyeCUwMnglMDJ4ICIKKwkJICAgICJtYngxPSV4LlxuIiwKIAkJICAgIGZjcG9ydC0+dmhhLT5ob3N0X25vLCBzcC0+aGFuZGxlLCB0eXBlLAotCQkgICAgbGUxNl90b19jcHUobWJ4LT5tYjEpKSk7CisJCSAgICBmY3BvcnQtPmRfaWQuYi5kb21haW4sIGZjcG9ydC0+ZF9pZC5iLmFyZWEsCisJCSAgICBmY3BvcnQtPmRfaWQuYi5hbF9wYSwgbGUxNl90b19jcHUobWJ4LT5tYjEpKSk7CiAKIAkJZGF0YVswXSA9IE1CU19DT01NQU5EX0NPTVBMRVRFOwogCQlpZiAoY3R4LT50eXBlID09IFNSQl9MT0dJTl9DTUQpIHsKIAkJCWZjcG9ydC0+cG9ydF90eXBlID0gRkNUX1RBUkdFVDsKIAkJCWlmIChsZTE2X3RvX2NwdShtYngtPm1iMSkgJiBCSVRfMCkKIAkJCQlmY3BvcnQtPnBvcnRfdHlwZSA9IEZDVF9JTklUSUFUT1I7Ci0JCQlpZiAobGUxNl90b19jcHUobWJ4LT5tYjEpICYgQklUXzEpCisJCQllbHNlIGlmIChsZTE2X3RvX2NwdShtYngtPm1iMSkgJiBCSVRfMSkKIAkJCQlmY3BvcnQtPmZsYWdzIHw9IEZDRl9GQ1AyX0RFVklDRTsKIAkJfQogCQlnb3RvIGxvZ2lvX2RvbmU7CkBAIC05NjMsOSArOTcxLDEwIEBACiAJfQogCiAJREVCVUcyKHByaW50ayhLRVJOX1dBUk5JTkcKLQkgICAgInNjc2koJWxkOiV4KTogQXN5bmMtJXMgZmFpbGVkIC0gc3RhdHVzPSV4IG1iMD0leCBtYjE9JXggbWIyPSV4ICIKLQkgICAgIm1iNj0leCBtYjc9JXguXG4iLAotCSAgICBmY3BvcnQtPnZoYS0+aG9zdF9ubywgc3AtPmhhbmRsZSwgdHlwZSwgc3RhdHVzLAorCSAgICAic2NzaSglbGQ6JXgpOiBBc3luYy0lcyBmYWlsZWQgLSBwb3J0aWQ9JTAyeCUwMnglMDJ4IHN0YXR1cz0leCAiCisJICAgICJtYjA9JXggbWIxPSV4IG1iMj0leCBtYjY9JXggbWI3PSV4LlxuIiwKKwkgICAgZmNwb3J0LT52aGEtPmhvc3Rfbm8sIHNwLT5oYW5kbGUsIHR5cGUsIGZjcG9ydC0+ZF9pZC5iLmRvbWFpbiwKKwkgICAgZmNwb3J0LT5kX2lkLmIuYXJlYSwgZmNwb3J0LT5kX2lkLmIuYWxfcGEsIHN0YXR1cywKIAkgICAgbGUxNl90b19jcHUobWJ4LT5tYjApLCBsZTE2X3RvX2NwdShtYngtPm1iMSksCiAJICAgIGxlMTZfdG9fY3B1KG1ieC0+bWIyKSwgbGUxNl90b19jcHUobWJ4LT5tYjYpLAogCSAgICBsZTE2X3RvX2NwdShtYngtPm1iNykpKTsKQEAgLTk3NSw2ICs5ODQsODYgQEAKIH0KIAogc3RhdGljIHZvaWQKK3FsYTJ4MDBfY3RfZW50cnkoc2NzaV9xbGFfaG9zdF90ICp2aGEsIHN0cnVjdCByZXFfcXVlICpyZXEsCisgICAgc3RzX2VudHJ5X3QgKnBrdCwgaW50IGlvY2JfdHlwZSkKK3sKKwljb25zdCBjaGFyIGZ1bmNbXSA9ICJDVF9JT0NCIjsKKwljb25zdCBjaGFyICp0eXBlOworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCXNyYl90ICpzcDsKKwlzdHJ1Y3Qgc3JiX2N0eCAqc3BfYnNnOworCXN0cnVjdCBmY19ic2dfam9iICpic2dfam9iOworCXVpbnQxNl90IGNvbXBfc3RhdHVzOworCisJc3AgPSBxbGEyeDAwX2dldF9zcF9mcm9tX2hhbmRsZSh2aGEsIGZ1bmMsIHJlcSwgcGt0KTsKKwlpZiAoIXNwKQorCQlyZXR1cm47CisKKwlzcF9ic2cgPSBzcC0+Y3R4OworCWJzZ19qb2IgPSBzcF9ic2ctPnUuYnNnX2pvYjsKKworCXR5cGUgPSBOVUxMOworCXN3aXRjaCAoc3BfYnNnLT50eXBlKSB7CisJY2FzZSBTUkJfQ1RfQ01EOgorCQl0eXBlID0gImN0IHBhc3MtdGhyb3VnaCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJICAgICIlczogVW5yZWNvZ25pemVkIFNSQjogKCVwKSB0eXBlPSVkLlxuIiwgZnVuYywgc3AsCisJCSAgICBzcF9ic2ctPnR5cGUpOworCQlyZXR1cm47CisJfQorCisJY29tcF9zdGF0dXMgPSBsZTE2X3RvX2NwdShwa3QtPmNvbXBfc3RhdHVzKTsKKworCS8qIHJldHVybiBGQ19DVEVMU19TVEFUVVNfT0sgYW5kIGxlYXZlIHRoZSBkZWNvZGluZyBvZiB0aGUgRUxTL0NUCisJICogZmMgcGF5bG9hZCAgdG8gdGhlIGNhbGxlcgorCSAqLworCWJzZ19qb2ItPnJlcGx5LT5yZXBseV9kYXRhLmN0ZWxzX3JlcGx5LnN0YXR1cyA9IEZDX0NURUxTX1NUQVRVU19PSzsKKwlic2dfam9iLT5yZXBseV9sZW4gPSBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXBseSk7CisKKwlpZiAoY29tcF9zdGF0dXMgIT0gQ1NfQ09NUExFVEUpIHsKKwkJaWYgKGNvbXBfc3RhdHVzID09IENTX0RBVEFfVU5ERVJSVU4pIHsKKwkJCWJzZ19qb2ItPnJlcGx5LT5yZXN1bHQgPSBESURfT0sgPDwgMTY7CisJCQlic2dfam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0KKwkJCSAgICBsZTE2X3RvX2NwdSgoKHN0c19lbnRyeV90ICopcGt0KS0+cnNwX2luZm9fbGVuKTsKKworCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCSAgICAic2NzaSglbGQpOiBDVCBwYXNzLXRocm91Z2gtJXMgZXJyb3IgIgorCQkJICAgICJjb21wX3N0YXR1cy1zdGF0dXM9MHgleCB0b3RhbF9ieXRlID0gMHgleC5cbiIsCisJCQkgICAgdmhhLT5ob3N0X25vLCB0eXBlLCBjb21wX3N0YXR1cywKKwkJCSAgICBic2dfam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuKSk7CisJCX0gZWxzZSB7CisJCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkJICAgICJzY3NpKCVsZCk6IENUIHBhc3MtdGhyb3VnaC0lcyBlcnJvciAiCisJCQkgICAgImNvbXBfc3RhdHVzLXN0YXR1cz0weCV4LlxuIiwKKwkJCSAgICB2aGEtPmhvc3Rfbm8sIHR5cGUsIGNvbXBfc3RhdHVzKSk7CisJCQlic2dfam9iLT5yZXBseS0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OworCQkJYnNnX2pvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CisJCX0KKwkJREVCVUcyKHFsYTJ4MDBfZHVtcF9idWZmZXIoKHVpbnQ4X3QgKilwa3QsIHNpemVvZigqcGt0KSkpOworCX0gZWxzZSB7CisJCWJzZ19qb2ItPnJlcGx5LT5yZXN1bHQgPSAgRElEX09LIDw8IDE2OzsKKwkJYnNnX2pvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9CisJCSAgICBic2dfam9iLT5yZXBseV9wYXlsb2FkLnBheWxvYWRfbGVuOworCQlic2dfam9iLT5yZXBseV9sZW4gPSAwOworCX0KKworCWRtYV91bm1hcF9zZygmaGEtPnBkZXYtPmRldiwgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJICAgIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOworCisJZG1hX3VubWFwX3NnKCZoYS0+cGRldi0+ZGV2LCBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJICAgIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBETUFfRlJPTV9ERVZJQ0UpOworCisJaWYgKHNwX2JzZy0+dHlwZSA9PSBTUkJfRUxTX0NNRF9IU1QgfHwgc3BfYnNnLT50eXBlID09IFNSQl9DVF9DTUQpCisJCWtmcmVlKHNwLT5mY3BvcnQpOworCisJa2ZyZWUoc3AtPmN0eCk7CisJbWVtcG9vbF9mcmVlKHNwLCBoYS0+c3JiX21lbXBvb2wpOworCWJzZ19qb2ItPmpvYl9kb25lKGJzZ19qb2IpOworfQorCitzdGF0aWMgdm9pZAogcWxhMjR4eF9lbHNfY3RfZW50cnkoc2NzaV9xbGFfaG9zdF90ICp2aGEsIHN0cnVjdCByZXFfcXVlICpyZXEsCiAgICAgc3RydWN0IHN0c19lbnRyeV8yNHh4ICpwa3QsIGludCBpb2NiX3R5cGUpCiB7CkBAIC0xMDk2LDkgKzExODUsMTEgQEAKIAkJUUxBX0xPR0lPX0xPR0lOX1JFVFJJRUQgOiAwOwogCWlmIChsb2dpby0+ZW50cnlfc3RhdHVzKSB7CiAJCURFQlVHMihwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAic2NzaSglbGQ6JXgpOiBBc3luYy0lcyBlcnJvciBlbnRyeSAtIGVudHJ5LXN0YXR1cz0leC5cbiIsCisJCSAgICAic2NzaSglbGQ6JXgpOiBBc3luYy0lcyBlcnJvciBlbnRyeSAtICIKKwkJICAgICJwb3J0aWQ9JTAyeCUwMnglMDJ4IGVudHJ5LXN0YXR1cz0leC5cbiIsCiAJCSAgICBmY3BvcnQtPnZoYS0+aG9zdF9ubywgc3AtPmhhbmRsZSwgdHlwZSwKLQkJICAgIGxvZ2lvLT5lbnRyeV9zdGF0dXMpKTsKKwkJICAgIGZjcG9ydC0+ZF9pZC5iLmRvbWFpbiwgZmNwb3J0LT5kX2lkLmIuYXJlYSwKKwkJICAgIGZjcG9ydC0+ZF9pZC5iLmFsX3BhLCBsb2dpby0+ZW50cnlfc3RhdHVzKSk7CiAJCURFQlVHMihxbGEyeDAwX2R1bXBfYnVmZmVyKCh1aW50OF90ICopbG9naW8sIHNpemVvZigqbG9naW8pKSk7CiAKIAkJZ290byBsb2dpb19kb25lOwpAQCAtMTEwNiw4ICsxMTk3LDExIEBACiAKIAlpZiAobGUxNl90b19jcHUobG9naW8tPmNvbXBfc3RhdHVzKSA9PSBDU19DT01QTEVURSkgewogCQlERUJVRzIocHJpbnRrKEtFUk5fREVCVUcKLQkJICAgICJzY3NpKCVsZDoleCk6IEFzeW5jLSVzIGNvbXBsZXRlIC0gaW9wMD0leC5cbiIsCisJCSAgICAic2NzaSglbGQ6JXgpOiBBc3luYy0lcyBjb21wbGV0ZSAtIHBvcnRpZD0lMDJ4JTAyeCUwMnggIgorCQkgICAgImlvcDA9JXguXG4iLAogCQkgICAgZmNwb3J0LT52aGEtPmhvc3Rfbm8sIHNwLT5oYW5kbGUsIHR5cGUsCisJCSAgICBmY3BvcnQtPmRfaWQuYi5kb21haW4sIGZjcG9ydC0+ZF9pZC5iLmFyZWEsCisJCSAgICBmY3BvcnQtPmRfaWQuYi5hbF9wYSwKIAkJICAgIGxlMzJfdG9fY3B1KGxvZ2lvLT5pb19wYXJhbWV0ZXJbMF0pKSk7CiAKIAkJZGF0YVswXSA9IE1CU19DT01NQU5EX0NPTVBMRVRFOwpAQCAtMTExOSw5ICsxMjEzLDkgQEAKIAkJCWZjcG9ydC0+cG9ydF90eXBlID0gRkNUX1RBUkdFVDsKIAkJCWlmIChpb3BbMF0gJiBCSVRfOCkKIAkJCQlmY3BvcnQtPmZsYWdzIHw9IEZDRl9GQ1AyX0RFVklDRTsKLQkJfQotCQlpZiAoaW9wWzBdICYgQklUXzUpCisJCX0gZWxzZSBpZiAoaW9wWzBdICYgQklUXzUpCiAJCQlmY3BvcnQtPnBvcnRfdHlwZSA9IEZDVF9JTklUSUFUT1I7CisKIAkJaWYgKGxvZ2lvLT5pb19wYXJhbWV0ZXJbN10gfHwgbG9naW8tPmlvX3BhcmFtZXRlcls4XSkKIAkJCWZjcG9ydC0+c3VwcG9ydGVkX2NsYXNzZXMgfD0gRkNfQ09TX0NMQVNTMjsKIAkJaWYgKGxvZ2lvLT5pb19wYXJhbWV0ZXJbOV0gfHwgbG9naW8tPmlvX3BhcmFtZXRlclsxMF0pCkBAIC0xMTUyLDggKzEyNDYsMTAgQEAKIAl9CiAKIAlERUJVRzIocHJpbnRrKEtFUk5fV0FSTklORwotCSAgICAic2NzaSglbGQ6JXgpOiBBc3luYy0lcyBmYWlsZWQgLSBjb21wPSV4IGlvcDA9JXggaW9wMT0leC5cbiIsCi0JICAgIGZjcG9ydC0+dmhhLT5ob3N0X25vLCBzcC0+aGFuZGxlLCB0eXBlLAorCSAgICAic2NzaSglbGQ6JXgpOiBBc3luYy0lcyBmYWlsZWQgLSBwb3J0aWQ9JTAyeCUwMnglMDJ4IGNvbXA9JXggIgorCSAgICAiaW9wMD0leCBpb3AxPSV4LlxuIiwKKwkgICAgZmNwb3J0LT52aGEtPmhvc3Rfbm8sIHNwLT5oYW5kbGUsIHR5cGUsIGZjcG9ydC0+ZF9pZC5iLmRvbWFpbiwKKwkgICAgZmNwb3J0LT5kX2lkLmIuYXJlYSwgZmNwb3J0LT5kX2lkLmIuYWxfcGEsCiAJICAgIGxlMTZfdG9fY3B1KGxvZ2lvLT5jb21wX3N0YXR1cyksCiAJICAgIGxlMzJfdG9fY3B1KGxvZ2lvLT5pb19wYXJhbWV0ZXJbMF0pLAogCSAgICBsZTMyX3RvX2NwdShsb2dpby0+aW9fcGFyYW1ldGVyWzFdKSkpOwpAQCAtMTIyMiwzOSArMTMxOCw2IEBACiAJaW9jYi0+ZG9uZShzcCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1xbGEyNHh4X21hcmtlcl9pb2NiX2VudHJ5KHNjc2lfcWxhX2hvc3RfdCAqdmhhLCBzdHJ1Y3QgcmVxX3F1ZSAqcmVxLAotICAgIHN0cnVjdCBtcmtfZW50cnlfMjR4eCAqbXJrKQotewotCWNvbnN0IGNoYXIgZnVuY1tdID0gIk1SSy1JT0NCIjsKLQljb25zdCBjaGFyICp0eXBlOwotCWZjX3BvcnRfdCAqZmNwb3J0OwotCXNyYl90ICpzcDsKLQlzdHJ1Y3Qgc3JiX2lvY2IgKmlvY2I7Ci0Jc3RydWN0IHNyYl9jdHggKmN0eDsKLQlzdHJ1Y3Qgc3RzX2VudHJ5XzI0eHggKnN0cyA9IChzdHJ1Y3Qgc3RzX2VudHJ5XzI0eHggKiltcms7Ci0KLQlzcCA9IHFsYTJ4MDBfZ2V0X3NwX2Zyb21faGFuZGxlKHZoYSwgZnVuYywgcmVxLCBtcmspOwotCWlmICghc3ApCi0JCXJldHVybjsKLQotCWN0eCA9IHNwLT5jdHg7Ci0JaW9jYiA9IGN0eC0+dS5pb2NiX2NtZDsKLQl0eXBlID0gY3R4LT5uYW1lOwotCWZjcG9ydCA9IHNwLT5mY3BvcnQ7Ci0KLQlpZiAoc3RzLT5lbnRyeV9zdGF0dXMpIHsKLQkJaW9jYi0+dS5tYXJrZXIuZGF0YSA9IDE7Ci0JCURFQlVHMihwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAic2NzaSglbGQ6JXgpOiBBc3luYy0lcyBlcnJvciBlbnRyeSAtIGVudHJ5LXN0YXR1cz0leC5cbiIsCi0JCSAgICBmY3BvcnQtPnZoYS0+aG9zdF9ubywgc3AtPmhhbmRsZSwgdHlwZSwKLQkJICAgIHN0cy0+ZW50cnlfc3RhdHVzKSk7Ci0JCURFQlVHMihxbGEyeDAwX2R1bXBfYnVmZmVyKCh1aW50OF90ICopbXJrLCBzaXplb2YoKnN0cykpKTsKLQl9Ci0KLQlpb2NiLT5kb25lKHNwKTsKLX0KLQogLyoqCiAgKiBxbGEyeDAwX3Byb2Nlc3NfcmVzcG9uc2VfcXVldWUoKSAtIFByb2Nlc3MgcmVzcG9uc2UgcXVldWUgZW50cmllcy4KICAqIEBoYTogU0NTSSBkcml2ZXIgSEEgY29udGV4dApAQCAtMTMyMCw2ICsxMzgzLDkgQEAKIAkJCXFsYTJ4MDBfbWJ4X2lvY2JfZW50cnkodmhhLCByc3AtPnJlcSwKIAkJCSAgICAoc3RydWN0IG1ieF9lbnRyeSAqKXBrdCk7CiAJCQlicmVhazsKKwkJY2FzZSBDVF9JT0NCX1RZUEU6CisJCQlxbGEyeDAwX2N0X2VudHJ5KHZoYSwgcnNwLT5yZXEsIHBrdCwgQ1RfSU9DQl9UWVBFKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJLyogVHlwZSBOb3QgU3VwcG9ydGVkLiAqLwogCQkJREVCVUc0KHByaW50ayhLRVJOX1dBUk5JTkcKQEAgLTEzMzcsOCArMTQwMyw5IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotcWxhMngwMF9oYW5kbGVfc2Vuc2Uoc3JiX3QgKnNwLCB1aW50OF90ICpzZW5zZV9kYXRhLCB1aW50MzJfdCBzZW5zZV9sZW4sCi0Jc3RydWN0IHJzcF9xdWUgKnJzcCkKKworcWxhMngwMF9oYW5kbGVfc2Vuc2Uoc3JiX3QgKnNwLCB1aW50OF90ICpzZW5zZV9kYXRhLCB1aW50MzJfdCBwYXJfc2Vuc2VfbGVuLAorICAgIHVpbnQzMl90IHNlbnNlX2xlbiwgc3RydWN0IHJzcF9xdWUgKnJzcCkKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjcCA9IHNwLT5jbWQ7CiAKQEAgLTEzNDcsOCArMTQxNCw4IEBACiAKIAlzcC0+cmVxdWVzdF9zZW5zZV9sZW5ndGggPSBzZW5zZV9sZW47CiAJc3AtPnJlcXVlc3Rfc2Vuc2VfcHRyID0gY3AtPnNlbnNlX2J1ZmZlcjsKLQlpZiAoc3AtPnJlcXVlc3Rfc2Vuc2VfbGVuZ3RoID4gMzIpCi0JCXNlbnNlX2xlbiA9IDMyOworCWlmIChzcC0+cmVxdWVzdF9zZW5zZV9sZW5ndGggPiBwYXJfc2Vuc2VfbGVuKQorCQlzZW5zZV9sZW4gPSBwYXJfc2Vuc2VfbGVuOwogCiAJbWVtY3B5KGNwLT5zZW5zZV9idWZmZXIsIHNlbnNlX2RhdGEsIHNlbnNlX2xlbik7CiAKQEAgLTE0NTUsNyArMTUyMiw4IEBACiAJdWludDE2X3QJb3hfaWQ7CiAJdWludDhfdAkJbHNjc2lfc3RhdHVzOwogCWludDMyX3QJCXJlc2lkOwotCXVpbnQzMl90CXNlbnNlX2xlbiwgcnNwX2luZm9fbGVuLCByZXNpZF9sZW4sIGZ3X3Jlc2lkX2xlbjsKKwl1aW50MzJfdCBzZW5zZV9sZW4sIHBhcl9zZW5zZV9sZW4sIHJzcF9pbmZvX2xlbiwgcmVzaWRfbGVuLAorCSAgICBmd19yZXNpZF9sZW47CiAJdWludDhfdAkJKnJzcF9pbmZvLCAqc2Vuc2VfZGF0YTsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAl1aW50MzJfdCBoYW5kbGU7CkBAIC0xNTEzLDcgKzE1ODEsOCBAQAogCWZjcG9ydCA9IHNwLT5mY3BvcnQ7CiAKIAlveF9pZCA9IDA7Ci0Jc2Vuc2VfbGVuID0gcnNwX2luZm9fbGVuID0gcmVzaWRfbGVuID0gZndfcmVzaWRfbGVuID0gMDsKKwlzZW5zZV9sZW4gPSBwYXJfc2Vuc2VfbGVuID0gcnNwX2luZm9fbGVuID0gcmVzaWRfbGVuID0KKwkgICAgZndfcmVzaWRfbGVuID0gMDsKIAlpZiAoSVNfRldJMl9DQVBBQkxFKGhhKSkgewogCQlpZiAoc2NzaV9zdGF0dXMgJiBTU19TRU5TRV9MRU5fVkFMSUQpCiAJCQlzZW5zZV9sZW4gPSBsZTMyX3RvX2NwdShzdHMyNC0+c2Vuc2VfbGVuKTsKQEAgLTE1MjcsNiArMTU5Niw3IEBACiAJCXNlbnNlX2RhdGEgPSBzdHMyNC0+ZGF0YTsKIAkJaG9zdF90b19mY3Bfc3dhcChzdHMyNC0+ZGF0YSwgc2l6ZW9mKHN0czI0LT5kYXRhKSk7CiAJCW94X2lkID0gbGUxNl90b19jcHUoc3RzMjQtPm94X2lkKTsKKwkJcGFyX3NlbnNlX2xlbiA9IHNpemVvZihzdHMyNC0+ZGF0YSk7CiAJfSBlbHNlIHsKIAkJaWYgKHNjc2lfc3RhdHVzICYgU1NfU0VOU0VfTEVOX1ZBTElEKQogCQkJc2Vuc2VfbGVuID0gbGUxNl90b19jcHUoc3RzLT5yZXFfc2Vuc2VfbGVuZ3RoKTsKQEAgLTE1MzUsMTMgKzE2MDUsMTYgQEAKIAkJcmVzaWRfbGVuID0gbGUzMl90b19jcHUoc3RzLT5yZXNpZHVhbF9sZW5ndGgpOwogCQlyc3BfaW5mbyA9IHN0cy0+cnNwX2luZm87CiAJCXNlbnNlX2RhdGEgPSBzdHMtPnJlcV9zZW5zZV9kYXRhOworCQlwYXJfc2Vuc2VfbGVuID0gc2l6ZW9mKHN0cy0+cmVxX3NlbnNlX2RhdGEpOwogCX0KIAogCS8qIENoZWNrIGZvciBhbnkgRkNQIHRyYW5zcG9ydCBlcnJvcnMuICovCiAJaWYgKHNjc2lfc3RhdHVzICYgU1NfUkVTUE9OU0VfSU5GT19MRU5fVkFMSUQpIHsKIAkJLyogU2Vuc2UgZGF0YSBsaWVzIGJleW9uZCBhbnkgRkNQIFJFU1BPTlNFIGRhdGEuICovCi0JCWlmIChJU19GV0kyX0NBUEFCTEUoaGEpKQorCQlpZiAoSVNfRldJMl9DQVBBQkxFKGhhKSkgewogCQkJc2Vuc2VfZGF0YSArPSByc3BfaW5mb19sZW47CisJCQlwYXJfc2Vuc2VfbGVuIC09IHJzcF9pbmZvX2xlbjsKKwkJfQogCQlpZiAocnNwX2luZm9fbGVuID4gMyAmJiByc3BfaW5mb1szXSkgewogCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKIAkJCSAgICAic2NzaSglbGQ6JWQ6JWQpOiBGQ1AgSS9PIHByb3RvY29sIGZhaWx1cmUgIgpAQCAtMTYwMSw3ICsxNjc0LDggQEAKIAkJaWYgKCEoc2NzaV9zdGF0dXMgJiBTU19TRU5TRV9MRU5fVkFMSUQpKQogCQkJYnJlYWs7CiAKLQkJcWxhMngwMF9oYW5kbGVfc2Vuc2Uoc3AsIHNlbnNlX2RhdGEsIHNlbnNlX2xlbiwgcnNwKTsKKwkJcWxhMngwMF9oYW5kbGVfc2Vuc2Uoc3AsIHNlbnNlX2RhdGEsIHBhcl9zZW5zZV9sZW4sIHNlbnNlX2xlbiwKKwkJICAgIHJzcCk7CiAJCWJyZWFrOwogCiAJY2FzZSBDU19EQVRBX1VOREVSUlVOOgpAQCAtMTY2NSw3ICsxNzM5LDggQEAKIAkJCWlmICghKHNjc2lfc3RhdHVzICYgU1NfU0VOU0VfTEVOX1ZBTElEKSkKIAkJCQlicmVhazsKIAotCQkJcWxhMngwMF9oYW5kbGVfc2Vuc2Uoc3AsIHNlbnNlX2RhdGEsIHNlbnNlX2xlbiwgcnNwKTsKKwkJCXFsYTJ4MDBfaGFuZGxlX3NlbnNlKHNwLCBzZW5zZV9kYXRhLCBwYXJfc2Vuc2VfbGVuLAorCQkJICAgIHNlbnNlX2xlbiwgcnNwKTsKIAkJfQogCQlicmVhazsKIApAQCAtMTcwMCw2ICsxNzc1LDkgQEAKIAkJYnJlYWs7CiAKIAljYXNlIENTX1JFU0VUOgorCQljcC0+cmVzdWx0ID0gRElEX1RSQU5TUE9SVF9ESVNSVVBURUQgPDwgMTY7CisJCWJyZWFrOworCiAJY2FzZSBDU19BQk9SVEVEOgogCQljcC0+cmVzdWx0ID0gRElEX1JFU0VUIDw8IDE2OwogCQlicmVhazsKQEAgLTE5MjYsMTAgKzIwMDQsNiBAQAogCQkJcWxhMjR4eF90bV9pb2NiX2VudHJ5KHZoYSwgcnNwLT5yZXEsCiAJCQkgICAgKHN0cnVjdCB0c2tfbWdtdF9lbnRyeSAqKXBrdCk7CiAJCQlicmVhazsKLQkJY2FzZSBNQVJLRVJfVFlQRToKLQkJCXFsYTI0eHhfbWFya2VyX2lvY2JfZW50cnkodmhhLCByc3AtPnJlcSwKLQkJCSAgICAoc3RydWN0IG1ya19lbnRyeV8yNHh4ICopcGt0KTsKLQkJCWJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgQ1RfSU9DQl9UWVBFOgogCQkJcWxhMjR4eF9lbHNfY3RfZW50cnkodmhhLCByc3AtPnJlcSwgcGt0LCBDVF9JT0NCX1RZUEUpOwogCQkJY2xlYXJfYml0KE1CWF9JTlRFUlJVUFQsICZ2aGEtPmh3LT5tYnhfY21kX2ZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYwppbmRleCBmMzY1MGQwLi42MDA5YjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwOCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCkBAIC0zNyw3ICszNyw3IEBACiAJZGV2aWNlX3JlZ190IF9faW9tZW0gKnJlZzsKIAl1aW50OF90CQlhYm9ydF9hY3RpdmU7CiAJdWludDhfdAkJaW9fbG9ja19vbjsKLQl1aW50MTZfdAljb21tYW5kOworCXVpbnQxNl90CWNvbW1hbmQgPSAwOwogCXVpbnQxNl90CSppcHRyOwogCXVpbnQxNl90IF9faW9tZW0gKm9wdHI7CiAJdWludDMyX3QJY250OwpAQCAtODMsNiArODMsMTMgQEAKIAkJcmV0dXJuIFFMQV9GVU5DVElPTl9USU1FT1VUOwogCX0KIAorCWlmIChJU19RTEE4MlhYKGhhKSAmJiBoYS0+ZmxhZ3MuZndfaHVuZykgeworCQkvKiBTZXR0aW5nIExpbmstRG93biBlcnJvciAqLworCQltY3AtPm1iWzBdID0gTUJTX0xJTktfRE9XTl9FUlJPUjsKKwkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CisJCWdvdG8gcHJlbWF0dXJlX2V4aXQ7CisJfQorCiAJaGEtPmZsYWdzLm1ib3hfYnVzeSA9IDE7CiAJLyogU2F2ZSBtYWlsYm94IGNvbW1hbmQgZm9yIGRlYnVnICovCiAJaGEtPm1jcCA9IG1jcDsKQEAgLTE1MSw3ICsxNTgsOCBAQAogCQkJCURFQlVHMl8zXzExKHByaW50ayhLRVJOX0lORk8KIAkJCQkgICAgIiVzKCVsZCk6IFBlbmRpbmcgTWFpbGJveCB0aW1lb3V0LiAiCiAJCQkJICAgICJFeGl0aW5nLlxuIiwgX19mdW5jX18sIGJhc2VfdmhhLT5ob3N0X25vKSk7Ci0JCQkJcmV0dXJuIFFMQV9GVU5DVElPTl9USU1FT1VUOworCQkJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fVElNRU9VVDsKKwkJCQlnb3RvIHByZW1hdHVyZV9leGl0OwogCQkJfQogCQkJV1JUX1JFR19EV09SRCgmcmVnLT5pc3A4Mi5oaW50LCBISU5UX01CWF9JTlRfUEVORElORyk7CiAJCX0gZWxzZSBpZiAoSVNfRldJMl9DQVBBQkxFKGhhKSkKQEAgLTE3Niw3ICsxODQsOCBAQAogCQkJCURFQlVHMl8zXzExKHByaW50ayhLRVJOX0lORk8KIAkJCQkgICAgIiVzKCVsZCk6IFBlbmRpbmcgTWFpbGJveCB0aW1lb3V0LiAiCiAJCQkJICAgICJFeGl0aW5nLlxuIiwgX19mdW5jX18sIGJhc2VfdmhhLT5ob3N0X25vKSk7Ci0JCQkJcmV0dXJuIFFMQV9GVU5DVElPTl9USU1FT1VUOworCQkJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fVElNRU9VVDsKKwkJCQlnb3RvIHByZW1hdHVyZV9leGl0OwogCQkJfQogCQkJV1JUX1JFR19EV09SRCgmcmVnLT5pc3A4Mi5oaW50LCBISU5UX01CWF9JTlRfUEVORElORyk7CiAJCX0gZWxzZSBpZiAoSVNfRldJMl9DQVBBQkxFKGhhKSkKQEAgLTIxNCw2ICsyMjMsMTUgQEAKIAkJaGEtPmZsYWdzLm1ib3hfaW50ID0gMDsKIAkJY2xlYXJfYml0KE1CWF9JTlRFUlJVUFQsICZoYS0+bWJ4X2NtZF9mbGFncyk7CiAKKwkJaWYgKElTX1FMQTgyWFgoaGEpICYmIGhhLT5mbGFncy5md19odW5nKSB7CisJCQloYS0+ZmxhZ3MubWJveF9idXN5ID0gMDsKKwkJCS8qIFNldHRpbmcgTGluay1Eb3duIGVycm9yICovCisJCQltY3AtPm1iWzBdID0gTUJTX0xJTktfRE9XTl9FUlJPUjsKKwkJCWhhLT5tY3AgPSBOVUxMOworCQkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CisJCQlnb3RvIHByZW1hdHVyZV9leGl0OworCQl9CisKIAkJaWYgKGhhLT5tYWlsYm94X291dFswXSAhPSBNQlNfQ09NTUFORF9DT01QTEVURSkKIAkJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCkBAIC0yNzksMzUgKzI5Nyw1MSBAQAogCQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiB0aW1lb3V0IHNjaGVkdWxlICIKIAkJCSJpc3BfYWJvcnRfbmVlZGVkLlxuIiwgX19mdW5jX18sCiAJCQliYXNlX3ZoYS0+aG9zdF9ubykpOwotCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJICAgICJNYWlsYm94IGNvbW1hbmQgdGltZW91dCBvY2N1cnJlZC4gU2NoZWR1bGluZyBJU1AgIgotCQkJICAgICJhYm9ydC4gZWVoX2J1c3k6IDB4JXhcbiIsIGhhLT5mbGFncy5lZWhfYnVzeSk7Ci0JCQlzZXRfYml0KElTUF9BQk9SVF9ORUVERUQsICZiYXNlX3ZoYS0+ZHBjX2ZsYWdzKTsKLQkJCXFsYTJ4eHhfd2FrZV9kcGModmhhKTsKKworCQkJaWYgKCF0ZXN0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpICYmCisJCQkgICAgIXRlc3RfYml0KEFCT1JUX0lTUF9BQ1RJVkUsICZ2aGEtPmRwY19mbGFncykgJiYKKwkJCSAgICAhdGVzdF9iaXQoSVNQX0FCT1JUX1JFVFJZLCAmdmhhLT5kcGNfZmxhZ3MpKSB7CisKKwkJCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQkJICAgICJNYWlsYm94IGNvbW1hbmQgdGltZW91dCBvY2N1cmVkLiAiCisJCQkJICAgICJTY2hlZHVsaW5nIElTUCAiICJhYm9ydC4gZWVoX2J1c3k6IDB4JXhcbiIsCisJCQkJICAgIGhhLT5mbGFncy5lZWhfYnVzeSk7CisJCQkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOworCQkJCXFsYTJ4eHhfd2FrZV9kcGModmhhKTsKKwkJCX0KIAkJfSBlbHNlIGlmICghYWJvcnRfYWN0aXZlKSB7CiAJCQkvKiBjYWxsIGFib3J0IGRpcmVjdGx5IHNpbmNlIHdlIGFyZSBpbiB0aGUgRFBDIHRocmVhZCAqLwogCQkJREVCVUcocHJpbnRrKCIlcyglbGQpOiB0aW1lb3V0IGNhbGxpbmcgYWJvcnRfaXNwXG4iLAogCQkJICAgIF9fZnVuY19fLCBiYXNlX3ZoYS0+aG9zdF9ubykpOwogCQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiB0aW1lb3V0IGNhbGxpbmcgIgogCQkJICAgICJhYm9ydF9pc3BcbiIsIF9fZnVuY19fLCBiYXNlX3ZoYS0+aG9zdF9ubykpOwotCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJICAgICJNYWlsYm94IGNvbW1hbmQgdGltZW91dCBvY2N1cnJlZC4gSXNzdWluZyBJU1AgIgotCQkJICAgICJhYm9ydC5cbiIpOwogCi0JCQlzZXRfYml0KEFCT1JUX0lTUF9BQ1RJVkUsICZiYXNlX3ZoYS0+ZHBjX2ZsYWdzKTsKLQkJCWNsZWFyX2JpdChJU1BfQUJPUlRfTkVFREVELCAmYmFzZV92aGEtPmRwY19mbGFncyk7Ci0JCQlpZiAoaGEtPmlzcF9vcHMtPmFib3J0X2lzcChiYXNlX3ZoYSkpIHsKLQkJCQkvKiBGYWlsZWQuIHJldHJ5IGxhdGVyLiAqLwotCQkJCXNldF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJmJhc2VfdmhhLT5kcGNfZmxhZ3MpOworCQkJaWYgKCF0ZXN0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpICYmCisJCQkgICAgIXRlc3RfYml0KEFCT1JUX0lTUF9BQ1RJVkUsICZ2aGEtPmRwY19mbGFncykgJiYKKwkJCSAgICAhdGVzdF9iaXQoSVNQX0FCT1JUX1JFVFJZLCAmdmhhLT5kcGNfZmxhZ3MpKSB7CisKKwkJCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQkJICAgICJNYWlsYm94IGNvbW1hbmQgdGltZW91dCBvY2N1cmVkLiAiCisJCQkJICAgICJJc3N1aW5nIElTUCBhYm9ydC5cbiIpOworCisJCQkJc2V0X2JpdChBQk9SVF9JU1BfQUNUSVZFLCAmdmhhLT5kcGNfZmxhZ3MpOworCQkJCWNsZWFyX2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOworCQkJCWlmIChoYS0+aXNwX29wcy0+YWJvcnRfaXNwKHZoYSkpIHsKKwkJCQkJLyogRmFpbGVkLiByZXRyeSBsYXRlci4gKi8KKwkJCQkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELAorCQkJCQkgICAgJnZoYS0+ZHBjX2ZsYWdzKTsKKwkJCQl9CisJCQkJY2xlYXJfYml0KEFCT1JUX0lTUF9BQ1RJVkUsICZ2aGEtPmRwY19mbGFncyk7CisJCQkJREVCVUcocHJpbnRrKCIlcyglbGQpOiBmaW5pc2hlZCBhYm9ydF9pc3BcbiIsCisJCQkJICAgIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJCQlERUJVRzJfM18xMShwcmludGsoCisJCQkJICAgICIlcyglbGQpOiBmaW5pc2hlZCBhYm9ydF9pc3BcbiIsCisJCQkJICAgIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKIAkJCX0KLQkJCWNsZWFyX2JpdChBQk9SVF9JU1BfQUNUSVZFLCAmYmFzZV92aGEtPmRwY19mbGFncyk7Ci0JCQlERUJVRyhwcmludGsoIiVzKCVsZCk6IGZpbmlzaGVkIGFib3J0X2lzcFxuIiwgX19mdW5jX18sCi0JCQkgICAgYmFzZV92aGEtPmhvc3Rfbm8pKTsKLQkJCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmluaXNoZWQgYWJvcnRfaXNwXG4iLAotCQkJICAgIF9fZnVuY19fLCBiYXNlX3ZoYS0+aG9zdF9ubykpOwogCQl9CiAJfQogCitwcmVtYXR1cmVfZXhpdDoKIAkvKiBBbGxvdyBuZXh0IG1ieCBjbWQgdG8gY29tZSBpbi4gKi8KIAljb21wbGV0ZSgmaGEtPm1ieF9jbWRfY29tcCk7CiAKQEAgLTg2Niw4ICs5MDAsOCBAQAogCiAJbCA9IGw7CiAJdmhhID0gZmNwb3J0LT52aGE7Ci0JcmVxID0gdmhhLT5ody0+cmVxX3FfbWFwW3RhZ107Ci0JcnNwID0gdmhhLT5ody0+cnNwX3FfbWFwW3RhZ107CisJcmVxID0gdmhhLT5ody0+cmVxX3FfbWFwWzBdOworCXJzcCA9IHJlcS0+cnNwOwogCW1jcC0+bWJbMF0gPSBNQkNfQUJPUlRfVEFSR0VUOwogCW1jcC0+b3V0X21iID0gTUJYXzl8TUJYXzJ8TUJYXzF8TUJYXzA7CiAJaWYgKEhBU19FWFRFTkRFRF9JRFModmhhLT5odykpIHsKQEAgLTkxNSw4ICs5NDksOCBAQAogCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIGZjcG9ydC0+dmhhLT5ob3N0X25vKSk7CiAKIAl2aGEgPSBmY3BvcnQtPnZoYTsKLQlyZXEgPSB2aGEtPmh3LT5yZXFfcV9tYXBbdGFnXTsKLQlyc3AgPSB2aGEtPmh3LT5yc3BfcV9tYXBbdGFnXTsKKwlyZXEgPSB2aGEtPmh3LT5yZXFfcV9tYXBbMF07CisJcnNwID0gcmVxLT5yc3A7CiAJbWNwLT5tYlswXSA9IE1CQ19MVU5fUkVTRVQ7CiAJbWNwLT5vdXRfbWIgPSBNQlhfOXxNQlhfM3xNQlhfMnxNQlhfMXxNQlhfMDsKIAlpZiAoSEFTX0VYVEVOREVEX0lEUyh2aGEtPmh3KSkKQEAgLTM5NTAsNiArMzk4NCw3MiBAQAogfQogCiBpbnQKK3FsYTgxeHhfZ2V0X3BvcnRfY29uZmlnKHNjc2lfcWxhX2hvc3RfdCAqdmhhLCB1aW50MTZfdCAqbWIpCit7CisJaW50IHJ2YWw7CisJbWJ4X2NtZF90IG1jOworCW1ieF9jbWRfdCAqbWNwID0gJm1jOworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCisJREVCVUcxMShwcmludGsoS0VSTl9JTkZPCisJICAgICIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCisJaWYgKCFJU19RTEE4MVhYKGhhKSkKKwkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CisJbWNwLT5tYlswXSA9IE1CQ19HRVRfUE9SVF9DT05GSUc7CisJbWNwLT5vdXRfbWIgPSBNQlhfMDsKKwltY3AtPmluX21iID0gTUJYXzR8TUJYXzN8TUJYXzJ8TUJYXzF8TUJYXzA7CisJbWNwLT50b3YgPSBNQlhfVE9WX1NFQ09ORFM7CisJbWNwLT5mbGFncyA9IDA7CisKKwlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQodmhhLCBtY3ApOworCisJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJREVCVUcyXzNfMTEocHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgIiVzKCVsZCk6IGZhaWxlZD0leCAoJXgpLlxuIiwgX19mdW5jX18sCisJCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwsIG1jcC0+bWJbMF0pKTsKKwl9IGVsc2UgeworCQkvKiBDb3B5IGFsbCBiaXRzIHRvIHByZXNlcnZlIG9yaWdpbmFsIHZhbHVlICovCisJCW1lbWNweShtYiwgJm1jcC0+bWJbMV0sIHNpemVvZih1aW50MTZfdCkgKiA0KTsKKworCQlERUJVRzExKHByaW50ayhLRVJOX0lORk8KKwkJICAgICIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCX0KKwlyZXR1cm4gcnZhbDsKK30KKworaW50CitxbGE4MXh4X3NldF9wb3J0X2NvbmZpZyhzY3NpX3FsYV9ob3N0X3QgKnZoYSwgdWludDE2X3QgKm1iKQoreworCWludCBydmFsOworCW1ieF9jbWRfdCBtYzsKKwltYnhfY21kX3QgKm1jcCA9ICZtYzsKKworCURFQlVHMTEocHJpbnRrKEtFUk5fSU5GTworCSAgICAiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKworCW1jcC0+bWJbMF0gPSBNQkNfU0VUX1BPUlRfQ09ORklHOworCS8qIENvcHkgYWxsIGJpdHMgdG8gcHJlc2VydmUgb3JpZ2luYWwgc2V0dGluZyAqLworCW1lbWNweSgmbWNwLT5tYlsxXSwgbWIsIHNpemVvZih1aW50MTZfdCkgKiA0KTsKKwltY3AtPm91dF9tYiA9IE1CWF80fE1CWF8zfE1CWF8yfE1CWF8xfE1CWF8wOworCW1jcC0+aW5fbWIgPSBNQlhfMDsKKwltY3AtPnRvdiA9IE1CWF9UT1ZfU0VDT05EUzsKKwltY3AtPmZsYWdzID0gMDsKKwlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQodmhhLCBtY3ApOworCisJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJREVCVUcyXzNfMTEocHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgIiVzKCVsZCk6IGZhaWxlZD0leCAoJXgpLlxuIiwgX19mdW5jX18sCisJCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwsIG1jcC0+bWJbMF0pKTsKKwl9IGVsc2UKKwkJREVCVUcxMShwcmludGsoS0VSTl9JTkZPCisJCSAgICAiJXMoJWxkKTogZG9uZS5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKworCXJldHVybiBydmFsOworfQorCisKK2ludAogcWxhMjR4eF9zZXRfZmNwX3ByaW8oc2NzaV9xbGFfaG9zdF90ICp2aGEsIHVpbnQxNl90IGxvb3BfaWQsIHVpbnQxNl90IHByaW9yaXR5LAogCQl1aW50MTZfdCAqbWIpCiB7CkBAIC00MDExLDcgKzQxMTEsNyBAQAogCQkiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKIAogCW1lbXNldChtY3AsIDAsIHNpemVvZihtYnhfY21kX3QpKTsKLQltY3AtPm1iWzBdID0gTUJDX1RPR0dMRV9JTlRSOworCW1jcC0+bWJbMF0gPSBNQkNfVE9HR0xFX0lOVEVSUlVQVDsKIAltY3AtPm1iWzFdID0gMTsKIAogCW1jcC0+b3V0X21iID0gTUJYXzF8TUJYXzA7CkBAIC00MDQ3LDcgKzQxNDcsNyBAQAogCQkiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKIAogCW1lbXNldChtY3AsIDAsIHNpemVvZihtYnhfY21kX3QpKTsKLQltY3AtPm1iWzBdID0gTUJDX1RPR0dMRV9JTlRSOworCW1jcC0+bWJbMF0gPSBNQkNfVE9HR0xFX0lOVEVSUlVQVDsKIAltY3AtPm1iWzFdID0gMDsKIAogCW1jcC0+b3V0X21iID0gTUJYXzF8TUJYXzA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWlkLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWlkLmMKaW5kZXggODIyMGU3Yi4uOTg3YzViMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9taWQuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMDggUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpAQCAtMTM2LDcgKzEzNiw4IEBACiAKIAkvKiBDaGVjayBpZiBwaHlzaWNhbCBoYSBwb3J0IGlzIFVwICovCiAJaWYgKGF0b21pY19yZWFkKCZiYXNlX3ZoYS0+bG9vcF9zdGF0ZSkgPT0gTE9PUF9ET1dOICB8fAotCQlhdG9taWNfcmVhZCgmYmFzZV92aGEtPmxvb3Bfc3RhdGUpID09IExPT1BfREVBRCkgeworCQlhdG9taWNfcmVhZCgmYmFzZV92aGEtPmxvb3Bfc3RhdGUpID09IExPT1BfREVBRCB8fAorCQkhKGhhLT5jdXJyZW50X3RvcG9sb2d5ICYgSVNQX0NGR19GKSkgewogCQl2aGEtPnZwX2Vycl9zdGF0ZSA9ICBWUF9FUlJfUE9SVERXTjsKIAkJZmNfdnBvcnRfc2V0X3N0YXRlKHZoYS0+ZmNfdnBvcnQsIEZDX1ZQT1JUX0xJTktET1dOKTsKIAkJZ290byBlbmFibGVfZmFpbGVkOwpAQCAtMzk4LDcgKzM5OSwxMCBAQAogCWhvc3QtPmNhbl9xdWV1ZSA9IGJhc2VfdmhhLT5yZXEtPmxlbmd0aCArIDEyODsKIAlob3N0LT50aGlzX2lkID0gMjU1OwogCWhvc3QtPmNtZF9wZXJfbHVuID0gMzsKLQlob3N0LT5tYXhfY21kX2xlbiA9IE1BWF9DTURTWjsKKwlpZiAoKElTX1FMQTI1WFgoaGEpIHx8IElTX1FMQTgxWFgoaGEpKSAmJiBxbDJ4ZW5hYmxlZGlmKQorCQlob3N0LT5tYXhfY21kX2xlbiA9IDMyOworCWVsc2UKKwkJaG9zdC0+bWF4X2NtZF9sZW4gPSBNQVhfQ01EU1o7CiAJaG9zdC0+bWF4X2NoYW5uZWwgPSBNQVhfQlVTRVMgLSAxOwogCWhvc3QtPm1heF9sdW4gPSBNQVhfTFVOUzsKIAlob3N0LT51bmlxdWVfaWQgPSBob3N0LT5ob3N0X25vOwpAQCAtNDgxLDcgKzQ4NSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50CitzdGF0aWMgaW50CiBxbGEyNXh4X2RlbGV0ZV9yc3BfcXVlKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEsIHN0cnVjdCByc3BfcXVlICpyc3ApCiB7CiAJaW50IHJldCA9IC0xOwpAQCAtNDk2LDIzICs1MDAsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBxbGEyNXh4X3VwZGF0ZV9yZXFfcXVlKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEsIHVpbnQ4X3QgcXVlLCB1aW50OF90IHFvcykKLXsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKLQlzdHJ1Y3QgcmVxX3F1ZSAqcmVxID0gaGEtPnJlcV9xX21hcFtxdWVdOwotCi0JcmVxLT5vcHRpb25zIHw9IEJJVF8zOwotCXJlcS0+cW9zID0gcW9zOwotCXJldCA9IHFsYTI1eHhfaW5pdF9yZXFfcXVlKHZoYSwgcmVxKTsKLQlpZiAocmV0ICE9IFFMQV9TVUNDRVNTKQotCQlERUJVRzJfMTcocHJpbnRrKEtFUk5fV0FSTklORyAiJXMgZmFpbGVkXG4iLCBfX2Z1bmNfXykpOwotCS8qIHJlc3RvcmUgb3B0aW9ucyBiaXQgKi8KLQlyZXEtPm9wdGlvbnMgJj0gfkJJVF8zOwotCXJldHVybiByZXQ7Ci19Ci0KLQogLyogRGVsZXRlIGFsbCBxdWV1ZXMgZm9yIGEgZ2l2ZW4gdmhvc3QgKi8KIGludAogcWxhMjV4eF9kZWxldGVfcXVldWVzKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEpCkBAIC03MzksMzUgKzcyNiwzIEBACiBmYWlsZWQ6CiAJcmV0dXJuIDA7CiB9Ci0KLWludAotcWxhMjV4eF9jcmVhdGVfcXVldWVzKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEsIHVpbnQ4X3QgcW9zKQotewotCXVpbnQxNl90IG9wdGlvbnMgPSAwOwotCXVpbnQ4X3QgcmV0ID0gMDsKLQlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKLQlzdHJ1Y3QgcnNwX3F1ZSAqcnNwOwotCi0Jb3B0aW9ucyB8PSBCSVRfMTsKLQlyZXQgPSBxbGEyNXh4X2NyZWF0ZV9yc3BfcXVlKGhhLCBvcHRpb25zLCB2aGEtPnZwX2lkeCwgMCwgLTEpOwotCWlmICghcmV0KSB7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgIlJlc3BvbnNlIFF1ZSBjcmVhdGUgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9IGVsc2UKLQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiUmVzcG9uc2UgUXVlOiVkIGNyZWF0ZWQuXG4iLCByZXQpOwotCXJzcCA9IGhhLT5yc3BfcV9tYXBbcmV0XTsKLQotCW9wdGlvbnMgPSAwOwotCWlmIChxb3MgJiBCSVRfNykKLQkJb3B0aW9ucyB8PSBCSVRfODsKLQlyZXQgPSBxbGEyNXh4X2NyZWF0ZV9yZXFfcXVlKGhhLCBvcHRpb25zLCB2aGEtPnZwX2lkeCwgMCwgcmV0LAotCQkJCQlxb3MgJiB+QklUXzcpOwotCWlmIChyZXQpIHsKLQkJdmhhLT5yZXEgPSBoYS0+cmVxX3FfbWFwW3JldF07Ci0JCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIlJlcXVlc3QgUXVlOiVkIGNyZWF0ZWQuXG4iLCByZXQpOwotCX0gZWxzZQotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJSZXF1ZXN0IFF1ZSBjcmVhdGUgZmFpbGVkXG4iKTsKLQlyc3AtPnJlcSA9IGhhLT5yZXFfcV9tYXBbcmV0XTsKLQotCXJldHVybiByZXQ7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbnguYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ueC5jCmluZGV4IGZmNTYyZGUuLjkxNWI3N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ueC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ueC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwOCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCkBAIC0xOSw2ICsxOSw3IEBACiAjZGVmaW5lIFFMQTgyWFhfUENJX09DTTBfMk0gKDB4YzAwMDApCiAjZGVmaW5lIFZBTElEX09DTV9BRERSKGFkZHIpICgoKGFkZHIpICYgMHgzZjgwMCkgIT0gMHgzZjgwMCkKICNkZWZpbmUgR0VUX01FTV9PRkZTXzJNKGFkZHIpIChhZGRyICYgTUFTSygxOCkpCisjZGVmaW5lIEJMT0NLX1BST1RFQ1RfQklUUyAweDBGCiAKIC8qIENSQiB3aW5kb3cgcmVsYXRlZCAqLwogI2RlZmluZSBDUkJfQkxLKG9mZikJKChvZmYgPj4gMjApICYgMHgzZikKQEAgLTc5NiwxNzkgKzc5Nyw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50Ci1xbGE4Mnh4X3dybWVtKHN0cnVjdCBxbGFfaHdfZGF0YSAqaGEsIHU2NCBvZmYsIHZvaWQgKmRhdGEsIGludCBzaXplKQotewotCWludCBpLCBqLCByZXQgPSAwLCBsb29wLCBzelsyXSwgb2ZmMDsKLQl1MzIgdGVtcDsKLQl1NjQgb2ZmOCwgbWVtX2NyYiwgdG1wdywgd29yZFsyXSA9IHswLCAwfTsKLSNkZWZpbmUgTUFYX0NUTF9DSEVDSyAgIDEwMDAKLQkvKgotCSAqIElmIG5vdCBNTiwgZ28gY2hlY2sgZm9yIE1TIG9yIGludmFsaWQuCi0JICovCi0JaWYgKG9mZiA+PSBRTEE4MlhYX0FERFJfUURSX05FVCAmJiBvZmYgPD0gUUxBODJYWF9QM19BRERSX1FEUl9ORVRfTUFYKSB7Ci0JCW1lbV9jcmIgPSBRTEE4MlhYX0NSQl9RRFJfTkVUOwotCX0gZWxzZSB7Ci0JCW1lbV9jcmIgPSBRTEE4MlhYX0NSQl9ERFJfTkVUOwotCQlpZiAocWxhODJ4eF9wY2lfbWVtX2JvdW5kX2NoZWNrKGhhLCBvZmYsIHNpemUpID09IDApCi0JCQlyZXR1cm4gcWxhODJ4eF9wY2lfbWVtX3dyaXRlX2RpcmVjdChoYSwgb2ZmLAotCQkJICAgIGRhdGEsIHNpemUpOwotCX0KLQotCW9mZjggPSBvZmYgJiAweGZmZmZmZmY4OwotCW9mZjAgPSBvZmYgJiAweDc7Ci0Jc3pbMF0gPSAoc2l6ZSA8ICg4IC0gb2ZmMCkpID8gc2l6ZSA6ICg4IC0gb2ZmMCk7Ci0Jc3pbMV0gPSBzaXplIC0gc3pbMF07Ci0JbG9vcCA9ICgob2ZmMCArIHNpemUgLSAxKSA+PiAzKSArIDE7Ci0KLQlpZiAoKHNpemUgIT0gOCkgfHwgKG9mZjAgIT0gMCkpICB7Ci0JCWZvciAoaSA9IDA7IGkgPCBsb29wOyBpKyspIHsKLQkJCWlmIChxbGE4Mnh4X3JkbWVtKGhhLCBvZmY4ICsgKGkgPDwgMyksICZ3b3JkW2ldLCA4KSkKLQkJCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci0KLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIDE6Ci0JCXRtcHcgPSAqKCh1OCAqKWRhdGEpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXRtcHcgPSAqKCh1MTYgKilkYXRhKTsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCQl0bXB3ID0gKigodTMyICopZGF0YSk7Ci0JCWJyZWFrOwotCWNhc2UgODoKLQlkZWZhdWx0OgotCQl0bXB3ID0gKigodTY0ICopZGF0YSk7Ci0JCWJyZWFrOwotCX0KLQotCXdvcmRbMF0gJj0gfigofih+MFVMTCA8PCAoc3pbMF0gKiA4KSkpIDw8IChvZmYwICogOCkpOwotCXdvcmRbMF0gfD0gdG1wdyA8PCAob2ZmMCAqIDgpOwotCi0JaWYgKGxvb3AgPT0gMikgewotCQl3b3JkWzFdICY9IH4ofjBVTEwgPDwgKHN6WzFdICogOCkpOwotCQl3b3JkWzFdIHw9IHRtcHcgPj4gKHN6WzBdICogOCk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGxvb3A7IGkrKykgewotCQl0ZW1wID0gb2ZmOCArIChpIDw8IDMpOwotCQlxbGE4Mnh4X3dyXzMyKGhhLCBtZW1fY3JiK01JVV9URVNUX0FHVF9BRERSX0xPLCB0ZW1wKTsKLQkJdGVtcCA9IDA7Ci0JCXFsYTgyeHhfd3JfMzIoaGEsIG1lbV9jcmIrTUlVX1RFU1RfQUdUX0FERFJfSEksIHRlbXApOwotCQl0ZW1wID0gd29yZFtpXSAmIDB4ZmZmZmZmZmY7Ci0JCXFsYTgyeHhfd3JfMzIoaGEsIG1lbV9jcmIrTUlVX1RFU1RfQUdUX1dSREFUQV9MTywgdGVtcCk7Ci0JCXRlbXAgPSAod29yZFtpXSA+PiAzMikgJiAweGZmZmZmZmZmOwotCQlxbGE4Mnh4X3dyXzMyKGhhLCBtZW1fY3JiK01JVV9URVNUX0FHVF9XUkRBVEFfSEksIHRlbXApOwotCQl0ZW1wID0gTUlVX1RBX0NUTF9FTkFCTEUgfCBNSVVfVEFfQ1RMX1dSSVRFOwotCQlxbGE4Mnh4X3dyXzMyKGhhLCBtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMLCB0ZW1wKTsKLQkJdGVtcCA9IE1JVV9UQV9DVExfU1RBUlQgfCBNSVVfVEFfQ1RMX0VOQUJMRSB8IE1JVV9UQV9DVExfV1JJVEU7Ci0JCXFsYTgyeHhfd3JfMzIoaGEsIG1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwsIHRlbXApOwotCi0JCWZvciAoaiA9IDA7IGogPCBNQVhfQ1RMX0NIRUNLOyBqKyspIHsKLQkJCXRlbXAgPSBxbGE4Mnh4X3JkXzMyKGhhLCBtZW1fY3JiICsgTUlVX1RFU1RfQUdUX0NUUkwpOwotCQkJaWYgKCh0ZW1wICYgTUlVX1RBX0NUTF9CVVNZKSA9PSAwKQotCQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKGogPj0gTUFYX0NUTF9DSEVDSykgewotCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJCSIlczogRmFpbCB0byB3cml0ZSB0aHJvdWdoIGFnZW50XG4iLAotCQkJCVFMQTJYWFhfRFJJVkVSX05BTUUpOwotCQkJcmV0ID0gLTE7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQKLXFsYTgyeHhfcmRtZW0oc3RydWN0IHFsYV9od19kYXRhICpoYSwgdTY0IG9mZiwgdm9pZCAqZGF0YSwgaW50IHNpemUpCi17Ci0JaW50IGksIGogPSAwLCBrLCBzdGFydCwgZW5kLCBsb29wLCBzelsyXSwgb2ZmMFsyXTsKLQl1MzIgdGVtcDsKLQl1NjQgb2ZmOCwgdmFsLCBtZW1fY3JiLCB3b3JkWzJdID0gezAsIDB9OwotI2RlZmluZSBNQVhfQ1RMX0NIRUNLICAgMTAwMAotCi0JLyoKLQkgKiBJZiBub3QgTU4sIGdvIGNoZWNrIGZvciBNUyBvciBpbnZhbGlkLgotCSAqLwotCWlmIChvZmYgPj0gUUxBODJYWF9BRERSX1FEUl9ORVQgJiYgb2ZmIDw9IFFMQTgyWFhfUDNfQUREUl9RRFJfTkVUX01BWCkKLQkJbWVtX2NyYiA9IFFMQTgyWFhfQ1JCX1FEUl9ORVQ7Ci0JZWxzZSB7Ci0JCW1lbV9jcmIgPSBRTEE4MlhYX0NSQl9ERFJfTkVUOwotCQlpZiAocWxhODJ4eF9wY2lfbWVtX2JvdW5kX2NoZWNrKGhhLCBvZmYsIHNpemUpID09IDApCi0JCQlyZXR1cm4gcWxhODJ4eF9wY2lfbWVtX3JlYWRfZGlyZWN0KGhhLCBvZmYsCi0JCQkJZGF0YSwgc2l6ZSk7Ci0JfQotCi0Jb2ZmOCA9IG9mZiAmIDB4ZmZmZmZmZjg7Ci0Jb2ZmMFswXSA9IG9mZiAmIDB4NzsKLQlvZmYwWzFdID0gMDsKLQlzelswXSA9IChzaXplIDwgKDggLSBvZmYwWzBdKSkgPyBzaXplIDogKDggLSBvZmYwWzBdKTsKLQlzelsxXSA9IHNpemUgLSBzelswXTsKLQlsb29wID0gKChvZmYwWzBdICsgc2l6ZSAtIDEpID4+IDMpICsgMTsKLQotCWZvciAoaSA9IDA7IGkgPCBsb29wOyBpKyspIHsKLQkJdGVtcCA9IG9mZjggKyAoaSA8PCAzKTsKLQkJcWxhODJ4eF93cl8zMihoYSwgbWVtX2NyYiArIE1JVV9URVNUX0FHVF9BRERSX0xPLCB0ZW1wKTsKLQkJdGVtcCA9IDA7Ci0JCXFsYTgyeHhfd3JfMzIoaGEsIG1lbV9jcmIgKyBNSVVfVEVTVF9BR1RfQUREUl9ISSwgdGVtcCk7Ci0JCXRlbXAgPSBNSVVfVEFfQ1RMX0VOQUJMRTsKLQkJcWxhODJ4eF93cl8zMihoYSwgbWVtX2NyYiArIE1JVV9URVNUX0FHVF9DVFJMLCB0ZW1wKTsKLQkJdGVtcCA9IE1JVV9UQV9DVExfU1RBUlQgfCBNSVVfVEFfQ1RMX0VOQUJMRTsKLQkJcWxhODJ4eF93cl8zMihoYSwgbWVtX2NyYiArIE1JVV9URVNUX0FHVF9DVFJMLCB0ZW1wKTsKLQotCQlmb3IgKGogPSAwOyBqIDwgTUFYX0NUTF9DSEVDSzsgaisrKSB7Ci0JCQl0ZW1wID0gcWxhODJ4eF9yZF8zMihoYSwgbWVtX2NyYiArIE1JVV9URVNUX0FHVF9DVFJMKTsKLQkJCWlmICgodGVtcCAmIE1JVV9UQV9DVExfQlVTWSkgPT0gMCkKLQkJCQlicmVhazsKLQkJfQotCi0JCWlmIChqID49IE1BWF9DVExfQ0hFQ0spIHsKLQkJCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCQkiJXM6IEZhaWwgdG8gcmVhZCB0aHJvdWdoIGFnZW50XG4iLAotCQkJCVFMQTJYWFhfRFJJVkVSX05BTUUpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlzdGFydCA9IG9mZjBbaV0gPj4gMjsKLQkJZW5kICAgPSAob2ZmMFtpXSArIHN6W2ldIC0gMSkgPj4gMjsKLQkJZm9yIChrID0gc3RhcnQ7IGsgPD0gZW5kOyBrKyspIHsKLQkJCXRlbXAgPSBxbGE4Mnh4X3JkXzMyKGhhLAotCQkJICAgIG1lbV9jcmIgKyBNSVVfVEVTVF9BR1RfUkREQVRBKGspKTsKLQkJCXdvcmRbaV0gfD0gKCh1NjQpdGVtcCA8PCAoMzIgKiBrKSk7Ci0JCX0KLQl9Ci0KLQlpZiAoaiA+PSBNQVhfQ1RMX0NIRUNLKQotCQlyZXR1cm4gLTE7Ci0KLQlpZiAoc3pbMF0gPT0gOCkgewotCQl2YWwgPSB3b3JkWzBdOwotCX0gZWxzZSB7Ci0JCXZhbCA9ICgod29yZFswXSA+PiAob2ZmMFswXSAqIDgpKSAmICh+KH4wVUxMIDw8IChzelswXSAqIDgpKSkpIHwKLQkJCSgod29yZFsxXSAmICh+KH4wVUxMIDw8IChzelsxXSAqIDgpKSkpIDw8IChzelswXSAqIDgpKTsKLQl9Ci0KLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIDE6Ci0JCSoodTggICopZGF0YSA9IHZhbDsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQkqKHUxNiAqKWRhdGEgPSB2YWw7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJKih1MzIgKilkYXRhID0gdmFsOwotCQlicmVhazsKLQljYXNlIDg6Ci0JCSoodTY0ICopZGF0YSA9IHZhbDsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOwotfQotCiAjZGVmaW5lIE1UVV9GVURHRV9GQUNUT1IgMTAwCiB1bnNpZ25lZCBsb25nIHFsYTgyeHhfZGVjb2RlX2NyYl9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKQEAgLTEzNDYsMTEgKzExNzQsNiBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAob2ZmID09IChRTEE4MlhYX0NSQl9QRUdfTkVUXzEgKyAweDE4KSkgewotCQkJaWYgKCFRTEE4MlhYX0lTX1JFVklTSU9OX1AzUExVUyhoYS0+Y2hpcF9yZXZpc2lvbikpCi0JCQkJYnVmW2ldLmRhdGEgPSAweDEwMjA7Ci0JCX0KLQogCQlxbGE4Mnh4X3dyXzMyKGhhLCBvZmYsIGJ1ZltpXS5kYXRhKTsKIAogCQkvKiBJU1AgcmVxdWlyZXMgbXVjaCBiaWdnZXIgZGVsYXkgdG8gc2V0dGxlIGRvd24sCkBAIC0xNDA3LDcgKzEyMzAsOCBAQAogewogCWludCAgaTsKIAlsb25nIHNpemUgPSAwOwotCWxvbmcgZmxhc2hhZGRyID0gQk9PVExEX1NUQVJULCBtZW1hZGRyID0gQk9PVExEX1NUQVJUOworCWxvbmcgZmxhc2hhZGRyID0gaGEtPmZsdF9yZWdpb25fYm9vdGxvYWQgPDwgMjsKKwlsb25nIG1lbWFkZHIgPSBCT09UTERfU1RBUlQ7CiAJdTY0IGRhdGE7CiAJdTMyIGhpZ2gsIGxvdzsKIAlzaXplID0gKElNQUdFX1NUQVJUIC0gQk9PVExEX1NUQVJUKSAvIDg7CkBAIC0xNDI3LDEyICsxMjUxLDggQEAKIAl9CiAJdWRlbGF5KDEwMCk7CiAJcmVhZF9sb2NrKCZoYS0+aHdfbG9jayk7Ci0JaWYgKFFMQTgyWFhfSVNfUkVWSVNJT05fUDNQTFVTKGhhLT5jaGlwX3JldmlzaW9uKSkgewotCQlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9QRUdfTkVUXzAgKyAweDE4LCAweDEwMjApOwotCQlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX1JPTVVTQl9HTEJfU1dfUkVTRVQsIDB4ODAwMDFlKTsKLQl9IGVsc2UgewotCQlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX1JPTVVTQl9HTEJfU1dfUkVTRVQsIDB4ODAwMDFkKTsKLQl9CisJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfUEVHX05FVF8wICsgMHgxOCwgMHgxMDIwKTsKKwlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX1JPTVVTQl9HTEJfU1dfUkVTRVQsIDB4ODAwMDFlKTsKIAlyZWFkX3VubG9jaygmaGEtPmh3X2xvY2spOwogCXJldHVybiAwOwogfQpAQCAtMTQ1OSwxNyArMTI3OSwxMCBAQAogCQkJICAgIG9mZiwgZGF0YSwgc2l6ZSk7CiAJfQogCi0JaWYgKFFMQTgyWFhfSVNfUkVWSVNJT05fUDNQTFVTKGhhLT5jaGlwX3JldmlzaW9uKSkgewotCQlvZmY4ID0gb2ZmICYgMHhmZmZmZmZmMDsKLQkJb2ZmMFswXSA9IG9mZiAmIDB4ZjsKLQkJc3pbMF0gPSAoc2l6ZSA8ICgxNiAtIG9mZjBbMF0pKSA/IHNpemUgOiAoMTYgLSBvZmYwWzBdKTsKLQkJc2hpZnRfYW1vdW50ID0gNDsKLQl9IGVsc2UgewotCQlvZmY4ID0gb2ZmICYgMHhmZmZmZmZmODsKLQkJb2ZmMFswXSA9IG9mZiAmIDB4NzsKLQkJc3pbMF0gPSAoc2l6ZSA8ICg4IC0gb2ZmMFswXSkpID8gc2l6ZSA6ICg4IC0gb2ZmMFswXSk7Ci0JCXNoaWZ0X2Ftb3VudCA9IDQ7Ci0JfQorCW9mZjggPSBvZmYgJiAweGZmZmZmZmYwOworCW9mZjBbMF0gPSBvZmYgJiAweGY7CisJc3pbMF0gPSAoc2l6ZSA8ICgxNiAtIG9mZjBbMF0pKSA/IHNpemUgOiAoMTYgLSBvZmYwWzBdKTsKKwlzaGlmdF9hbW91bnQgPSA0OwogCWxvb3AgPSAoKG9mZjBbMF0gKyBzaXplIC0gMSkgPj4gc2hpZnRfYW1vdW50KSArIDE7CiAJb2ZmMFsxXSA9IDA7CiAJc3pbMV0gPSBzaXplIC0gc3pbMF07CkBAIC0xNTQ5LDcgKzEzNjIsNyBAQAogCQl1NjQgb2ZmLCB2b2lkICpkYXRhLCBpbnQgc2l6ZSkKIHsKIAlpbnQgaSwgaiwgcmV0ID0gMCwgbG9vcCwgc3pbMl0sIG9mZjA7Ci0JaW50IHNjYWxlLCBzaGlmdF9hbW91bnQsIHAzcCwgc3RhcnR3b3JkOworCWludCBzY2FsZSwgc2hpZnRfYW1vdW50LCBzdGFydHdvcmQ7CiAJdWludDMyX3QgdGVtcDsKIAl1aW50NjRfdCBvZmY4LCBtZW1fY3JiLCB0bXB3LCB3b3JkWzJdID0gezAsIDB9OwogCkBAIC0xNTY5LDI4ICsxMzgyLDE2IEBACiAJc3pbMF0gPSAoc2l6ZSA8ICg4IC0gb2ZmMCkpID8gc2l6ZSA6ICg4IC0gb2ZmMCk7CiAJc3pbMV0gPSBzaXplIC0gc3pbMF07CiAKLQlpZiAoUUxBODJYWF9JU19SRVZJU0lPTl9QM1BMVVMoaGEtPmNoaXBfcmV2aXNpb24pKSB7Ci0JCW9mZjggPSBvZmYgJiAweGZmZmZmZmYwOwotCQlsb29wID0gKCgob2ZmICYgMHhmKSArIHNpemUgLSAxKSA+PiA0KSArIDE7Ci0JCXNoaWZ0X2Ftb3VudCA9IDQ7Ci0JCXNjYWxlID0gMjsKLQkJcDNwID0gMTsKLQkJc3RhcnR3b3JkID0gKG9mZiAmIDB4ZikvODsKLQl9IGVsc2UgewotCQlvZmY4ID0gb2ZmICYgMHhmZmZmZmZmODsKLQkJbG9vcCA9ICgob2ZmMCArIHNpemUgLSAxKSA+PiAzKSArIDE7Ci0JCXNoaWZ0X2Ftb3VudCA9IDM7Ci0JCXNjYWxlID0gMTsKLQkJcDNwID0gMDsKLQkJc3RhcnR3b3JkID0gMDsKLQl9CisJb2ZmOCA9IG9mZiAmIDB4ZmZmZmZmZjA7CisJbG9vcCA9ICgoKG9mZiAmIDB4ZikgKyBzaXplIC0gMSkgPj4gNCkgKyAxOworCXNoaWZ0X2Ftb3VudCA9IDQ7CisJc2NhbGUgPSAyOworCXN0YXJ0d29yZCA9IChvZmYgJiAweGYpLzg7CiAKLQlpZiAocDNwIHx8IChzaXplICE9IDgpIHx8IChvZmYwICE9IDApKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBsb29wOyBpKyspIHsKLQkJCWlmIChxbGE4Mnh4X3BjaV9tZW1fcmVhZF8yTShoYSwgb2ZmOCArCi0JCQkgICAgKGkgPDwgc2hpZnRfYW1vdW50KSwgJndvcmRbaSAqIHNjYWxlXSwgOCkpCi0JCQkJcmV0dXJuIC0xOwotCQl9CisJZm9yIChpID0gMDsgaSA8IGxvb3A7IGkrKykgeworCQlpZiAocWxhODJ4eF9wY2lfbWVtX3JlYWRfMk0oaGEsIG9mZjggKworCQkgICAgKGkgPDwgc2hpZnRfYW1vdW50KSwgJndvcmRbaSAqIHNjYWxlXSwgOCkpCisJCQlyZXR1cm4gLTE7CiAJfQogCiAJc3dpdGNoIChzaXplKSB7CkBAIC0xNjA5LDI2ICsxNDEwLDE2IEBACiAJCWJyZWFrOwogCX0KIAotCWlmIChRTEE4MlhYX0lTX1JFVklTSU9OX1AzUExVUyhoYS0+Y2hpcF9yZXZpc2lvbikpIHsKLQkJaWYgKHN6WzBdID09IDgpIHsKLQkJCXdvcmRbc3RhcnR3b3JkXSA9IHRtcHc7Ci0JCX0gZWxzZSB7Ci0JCQl3b3JkW3N0YXJ0d29yZF0gJj0KLQkJCQl+KCh+KH4wVUxMIDw8IChzelswXSAqIDgpKSkgPDwgKG9mZjAgKiA4KSk7Ci0JCQl3b3JkW3N0YXJ0d29yZF0gfD0gdG1wdyA8PCAob2ZmMCAqIDgpOwotCQl9Ci0JCWlmIChzelsxXSAhPSAwKSB7Ci0JCQl3b3JkW3N0YXJ0d29yZCsxXSAmPSB+KH4wVUxMIDw8IChzelsxXSAqIDgpKTsKLQkJCXdvcmRbc3RhcnR3b3JkKzFdIHw9IHRtcHcgPj4gKHN6WzBdICogOCk7Ci0JCX0KKwlpZiAoc3pbMF0gPT0gOCkgeworCQl3b3JkW3N0YXJ0d29yZF0gPSB0bXB3OwogCX0gZWxzZSB7Ci0JCXdvcmRbc3RhcnR3b3JkXSAmPSB+KCh+KH4wVUxMIDw8IChzelswXSAqIDgpKSkgPDwgKG9mZjAgKiA4KSk7CisJCXdvcmRbc3RhcnR3b3JkXSAmPQorCQkJfigofih+MFVMTCA8PCAoc3pbMF0gKiA4KSkpIDw8IChvZmYwICogOCkpOwogCQl3b3JkW3N0YXJ0d29yZF0gfD0gdG1wdyA8PCAob2ZmMCAqIDgpOwotCi0JCWlmIChsb29wID09IDIpIHsKLQkJCXdvcmRbMV0gJj0gfih+MFVMTCA8PCAoc3pbMV0gKiA4KSk7Ci0JCQl3b3JkWzFdIHw9IHRtcHcgPj4gKHN6WzBdICogOCk7Ci0JCX0KKwl9CisJaWYgKHN6WzFdICE9IDApIHsKKwkJd29yZFtzdGFydHdvcmQrMV0gJj0gfih+MFVMTCA8PCAoc3pbMV0gKiA4KSk7CisJCXdvcmRbc3RhcnR3b3JkKzFdIHw9IHRtcHcgPj4gKHN6WzBdICogOCk7CiAJfQogCiAJLyoKQEAgLTE2NDUsMTQgKzE0MzYsMTIgQEAKIAkJcWxhODJ4eF93cl8zMihoYSwgbWVtX2NyYitNSVVfVEVTVF9BR1RfV1JEQVRBX0xPLCB0ZW1wKTsKIAkJdGVtcCA9ICh3b3JkW2kgKiBzY2FsZV0gPj4gMzIpICYgMHhmZmZmZmZmZjsKIAkJcWxhODJ4eF93cl8zMihoYSwgbWVtX2NyYitNSVVfVEVTVF9BR1RfV1JEQVRBX0hJLCB0ZW1wKTsKLQkJaWYgKFFMQTgyWFhfSVNfUkVWSVNJT05fUDNQTFVTKGhhLT5jaGlwX3JldmlzaW9uKSkgewotCQkJdGVtcCA9IHdvcmRbaSpzY2FsZSArIDFdICYgMHhmZmZmZmZmZjsKLQkJCXFsYTgyeHhfd3JfMzIoaGEsIG1lbV9jcmIgKwotCQkJICAgIE1JVV9URVNUX0FHVF9XUkRBVEFfVVBQRVJfTE8sIHRlbXApOwotCQkJdGVtcCA9ICh3b3JkW2kqc2NhbGUgKyAxXSA+PiAzMikgJiAweGZmZmZmZmZmOwotCQkJcWxhODJ4eF93cl8zMihoYSwgbWVtX2NyYiArCi0JCQkgICAgTUlVX1RFU1RfQUdUX1dSREFUQV9VUFBFUl9ISSwgdGVtcCk7Ci0JCX0KKwkJdGVtcCA9IHdvcmRbaSpzY2FsZSArIDFdICYgMHhmZmZmZmZmZjsKKwkJcWxhODJ4eF93cl8zMihoYSwgbWVtX2NyYiArCisJCSAgICBNSVVfVEVTVF9BR1RfV1JEQVRBX1VQUEVSX0xPLCB0ZW1wKTsKKwkJdGVtcCA9ICh3b3JkW2kqc2NhbGUgKyAxXSA+PiAzMikgJiAweGZmZmZmZmZmOworCQlxbGE4Mnh4X3dyXzMyKGhhLCBtZW1fY3JiICsKKwkJICAgIE1JVV9URVNUX0FHVF9XUkRBVEFfVVBQRVJfSEksIHRlbXApOwogCiAJCXRlbXAgPSBNSVVfVEFfQ1RMX0VOQUJMRSB8IE1JVV9UQV9DVExfV1JJVEU7CiAJCXFsYTgyeHhfd3JfMzIoaGEsIG1lbV9jcmIgKyBNSVVfVEVTVF9BR1RfQ1RSTCwgdGVtcCk7CkBAIC0xNjc3LDYgKzE0NjYsOTQgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc3RydWN0IHFsYTgyeHhfdXJpX3RhYmxlX2Rlc2MgKgorcWxhODJ4eF9nZXRfdGFibGVfZGVzYyhjb25zdCB1OCAqdW5pcm9tLCBpbnQgc2VjdGlvbikKK3sKKwl1aW50MzJfdCBpOworCXN0cnVjdCBxbGE4Mnh4X3VyaV90YWJsZV9kZXNjICpkaXJlY3RvcnkgPQorCQkoc3RydWN0IHFsYTgyeHhfdXJpX3RhYmxlX2Rlc2MgKikmdW5pcm9tWzBdOworCV9fbGUzMiBvZmZzZXQ7CisJX19sZTMyIHRhYl90eXBlOworCV9fbGUzMiBlbnRyaWVzID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LT5udW1fZW50cmllcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZW50cmllczsgaSsrKSB7CisJCW9mZnNldCA9IGNwdV90b19sZTMyKGRpcmVjdG9yeS0+ZmluZGV4KSArCisJCSAgICAoaSAqIGNwdV90b19sZTMyKGRpcmVjdG9yeS0+ZW50cnlfc2l6ZSkpOworCQl0YWJfdHlwZSA9IGNwdV90b19sZTMyKCooKHUzMiAqKSZ1bmlyb21bb2Zmc2V0XSArIDgpKTsKKworCQlpZiAodGFiX3R5cGUgPT0gc2VjdGlvbikKKwkJCXJldHVybiAoc3RydWN0IHFsYTgyeHhfdXJpX3RhYmxlX2Rlc2MgKikmdW5pcm9tW29mZnNldF07CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcWxhODJ4eF91cmlfZGF0YV9kZXNjICoKK3FsYTgyeHhfZ2V0X2RhdGFfZGVzYyhzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhLAorCXUzMiBzZWN0aW9uLCB1MzIgaWR4X29mZnNldCkKK3sKKwljb25zdCB1OCAqdW5pcm9tID0gaGEtPmhhYmxvYi0+ZnctPmRhdGE7CisJaW50IGlkeCA9IGNwdV90b19sZTMyKCooKGludCAqKSZ1bmlyb21baGEtPmZpbGVfcHJkX29mZl0gKyBpZHhfb2Zmc2V0KSk7CisJc3RydWN0IHFsYTgyeHhfdXJpX3RhYmxlX2Rlc2MgKnRhYl9kZXNjID0gTlVMTDsKKwlfX2xlMzIgb2Zmc2V0OworCisJdGFiX2Rlc2MgPSBxbGE4Mnh4X2dldF90YWJsZV9kZXNjKHVuaXJvbSwgc2VjdGlvbik7CisJaWYgKCF0YWJfZGVzYykKKwkJcmV0dXJuIE5VTEw7CisKKwlvZmZzZXQgPSBjcHVfdG9fbGUzMih0YWJfZGVzYy0+ZmluZGV4KSArCisJICAgIChjcHVfdG9fbGUzMih0YWJfZGVzYy0+ZW50cnlfc2l6ZSkgKiBpZHgpOworCisJcmV0dXJuIChzdHJ1Y3QgcWxhODJ4eF91cmlfZGF0YV9kZXNjICopJnVuaXJvbVtvZmZzZXRdOworfQorCitzdGF0aWMgdTggKgorcWxhODJ4eF9nZXRfYm9vdGxkX29mZnNldChzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhKQoreworCXUzMiBvZmZzZXQgPSBCT09UTERfU1RBUlQ7CisJc3RydWN0IHFsYTgyeHhfdXJpX2RhdGFfZGVzYyAqdXJpX2Rlc2MgPSBOVUxMOworCisJaWYgKGhhLT5md190eXBlID09IFFMQTgyWFhfVU5JRklFRF9ST01JTUFHRSkgeworCQl1cmlfZGVzYyA9IHFsYTgyeHhfZ2V0X2RhdGFfZGVzYyhoYSwKKwkJICAgIFFMQTgyWFhfVVJJX0RJUl9TRUNUX0JPT1RMRCwgUUxBODJYWF9VUklfQk9PVExEX0lEWF9PRkYpOworCQlpZiAodXJpX2Rlc2MpCisJCQlvZmZzZXQgPSBjcHVfdG9fbGUzMih1cmlfZGVzYy0+ZmluZGV4KTsKKwl9CisKKwlyZXR1cm4gKHU4ICopJmhhLT5oYWJsb2ItPmZ3LT5kYXRhW29mZnNldF07Cit9CisKK3N0YXRpYyBfX2xlMzIKK3FsYTgyeHhfZ2V0X2Z3X3NpemUoc3RydWN0IHFsYV9od19kYXRhICpoYSkKK3sKKwlzdHJ1Y3QgcWxhODJ4eF91cmlfZGF0YV9kZXNjICp1cmlfZGVzYyA9IE5VTEw7CisKKwlpZiAoaGEtPmZ3X3R5cGUgPT0gUUxBODJYWF9VTklGSUVEX1JPTUlNQUdFKSB7CisJCXVyaV9kZXNjID0gIHFsYTgyeHhfZ2V0X2RhdGFfZGVzYyhoYSwgUUxBODJYWF9VUklfRElSX1NFQ1RfRlcsCisJCSAgICBRTEE4MlhYX1VSSV9GSVJNV0FSRV9JRFhfT0ZGKTsKKwkJaWYgKHVyaV9kZXNjKQorCQkJcmV0dXJuIGNwdV90b19sZTMyKHVyaV9kZXNjLT5zaXplKTsKKwl9CisKKwlyZXR1cm4gY3B1X3RvX2xlMzIoKih1MzIgKikmaGEtPmhhYmxvYi0+ZnctPmRhdGFbRldfU0laRV9PRkZTRVRdKTsKK30KKworc3RhdGljIHU4ICoKK3FsYTgyeHhfZ2V0X2Z3X29mZnMoc3RydWN0IHFsYV9od19kYXRhICpoYSkKK3sKKwl1MzIgb2Zmc2V0ID0gSU1BR0VfU1RBUlQ7CisJc3RydWN0IHFsYTgyeHhfdXJpX2RhdGFfZGVzYyAqdXJpX2Rlc2MgPSBOVUxMOworCisJaWYgKGhhLT5md190eXBlID09IFFMQTgyWFhfVU5JRklFRF9ST01JTUFHRSkgeworCQl1cmlfZGVzYyA9IHFsYTgyeHhfZ2V0X2RhdGFfZGVzYyhoYSwgUUxBODJYWF9VUklfRElSX1NFQ1RfRlcsCisJCQlRTEE4MlhYX1VSSV9GSVJNV0FSRV9JRFhfT0ZGKTsKKwkJaWYgKHVyaV9kZXNjKQorCQkJb2Zmc2V0ID0gY3B1X3RvX2xlMzIodXJpX2Rlc2MtPmZpbmRleCk7CisJfQorCisJcmV0dXJuICh1OCAqKSZoYS0+aGFibG9iLT5mdy0+ZGF0YVtvZmZzZXRdOworfQorCiAvKiBQQ0kgcmVsYXRlZCBmdW5jdGlvbnMgKi8KIGNoYXIgKgogcWxhODJ4eF9wY2lfaW5mb19zdHIoc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZoYSwgY2hhciAqc3RyKQpAQCAtMTcxNCwyMiArMTU5MSw2IEBACiAJcmV0dXJuIHZhbDsKIH0KIAotaW50IHFsYTgyeHhfcGNpX3JlZ2lvbl9sZW4oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCByZWdpb24pCi17Ci0JdW5zaWduZWQgbG9uZyB2YWwgPSAwOwotCXUzMiBjb250cm9sOwotCXN3aXRjaCAocmVnaW9uKSB7Ci0JY2FzZSAwOgotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgUUxBODJYWF9QQ0lfUkVHX01TSVhfVEJMLCAmY29udHJvbCk7Ci0JCXZhbCA9IGNvbnRyb2w7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJdmFsID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSAtCi0JCSAgICBxbGE4Mnh4X3BjaV9yZWdpb25fb2Zmc2V0KHBkZXYsIDEpOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIHZhbDsKLX0KIAogaW50CiBxbGE4Mnh4X2lvc3BhY2VfY29uZmlnKHN0cnVjdCBxbGFfaHdfZGF0YSAqaGEpCkBAIC0xODUxLDEyICsxNzEyLDYgQEAKIAlpY2ItPnJlc3BvbnNlX3FfYWRkcmVzc1swXSA9IGNwdV90b19sZTMyKExTRChyc3AtPmRtYSkpOwogCWljYi0+cmVzcG9uc2VfcV9hZGRyZXNzWzFdID0gY3B1X3RvX2xlMzIoTVNEKHJzcC0+ZG1hKSk7CiAKLQlpY2ItPnZlcnNpb24gPSAxOwotCWljYi0+ZnJhbWVfcGF5bG9hZF9zaXplID0gMjExMjsKLQlpY2ItPmV4ZWN1dGlvbl90aHJvdHRsZSA9IDg7Ci0JaWNiLT5leGNoYW5nZV9jb3VudCA9IDEyODsKLQlpY2ItPmxvZ2luX3JldHJ5X2NvdW50ID0gODsKLQogCVdSVF9SRUdfRFdPUkQoKHVuc2lnbmVkIGxvbmcgIF9faW9tZW0gKikmcmVnLT5yZXFfcV9vdXRbMF0sIDApOwogCVdSVF9SRUdfRFdPUkQoKHVuc2lnbmVkIGxvbmcgIF9faW9tZW0gKikmcmVnLT5yc3BfcV9pblswXSwgMCk7CiAJV1JUX1JFR19EV09SRCgodW5zaWduZWQgbG9uZyAgX19pb21lbSAqKSZyZWctPnJzcF9xX291dFswXSwgMCk7CkBAIC0xODc4LDE5ICsxNzMzLDE5IEBACiAKIAlzaXplID0gKElNQUdFX1NUQVJUIC0gQk9PVExEX1NUQVJUKSAvIDg7CiAKLQlwdHI2NCA9ICh1NjQgKikmaGEtPmhhYmxvYi0+ZnctPmRhdGFbQk9PVExEX1NUQVJUXTsKKwlwdHI2NCA9ICh1NjQgKilxbGE4Mnh4X2dldF9ib290bGRfb2Zmc2V0KGhhKTsKIAlmbGFzaGFkZHIgPSBCT09UTERfU1RBUlQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAJCWRhdGEgPSBjcHVfdG9fbGU2NChwdHI2NFtpXSk7Ci0JCXFsYTgyeHhfcGNpX21lbV93cml0ZV8yTShoYSwgZmxhc2hhZGRyLCAmZGF0YSwgOCk7CisJCWlmIChxbGE4Mnh4X3BjaV9tZW1fd3JpdGVfMk0oaGEsIGZsYXNoYWRkciwgJmRhdGEsIDgpKQorCQkJcmV0dXJuIC1FSU87CiAJCWZsYXNoYWRkciArPSA4OwogCX0KIAotCXNpemUgPSAqKHUzMiAqKSZoYS0+aGFibG9iLT5mdy0+ZGF0YVtGV19TSVpFX09GRlNFVF07Ci0Jc2l6ZSA9IChfX2ZvcmNlIHUzMiljcHVfdG9fbGUzMihzaXplKSAvIDg7Ci0JcHRyNjQgPSAodTY0ICopJmhhLT5oYWJsb2ItPmZ3LT5kYXRhW0lNQUdFX1NUQVJUXTsKIAlmbGFzaGFkZHIgPSBGTEFTSF9BRERSX1NUQVJUOworCXNpemUgPSAoX19mb3JjZSB1MzIpcWxhODJ4eF9nZXRfZndfc2l6ZShoYSkgLyA4OworCXB0cjY0ID0gKHU2NCAqKXFsYTgyeHhfZ2V0X2Z3X29mZnMoaGEpOwogCiAJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewogCQlkYXRhID0gY3B1X3RvX2xlNjQocHRyNjRbaV0pOwpAQCAtMTg5OSwxOSArMTc1NCw4NSBAQAogCQkJcmV0dXJuIC1FSU87CiAJCWZsYXNoYWRkciArPSA4OwogCX0KKwl1ZGVsYXkoMTAwKTsKIAogCS8qIFdyaXRlIGEgbWFnaWMgdmFsdWUgdG8gQ0FNUkFNIHJlZ2lzdGVyCiAJICogYXQgYSBzcGVjaWZpZWQgb2Zmc2V0IHRvIGluZGljYXRlCiAJICogdGhhdCBhbGwgZGF0YSBpcyB3cml0dGVuIGFuZAogCSAqIHJlYWR5IGZvciBmaXJtd2FyZSB0byBpbml0aWFsaXplLgogCSAqLwotCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfQ0FNX1JBTSgweDFmYyksIDB4MTIzNDU2NzgpOworCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfQ0FNX1JBTSgweDFmYyksIFFMQTgyWFhfQkRJTkZPX01BR0lDKTsKIAotCWlmIChRTEE4MlhYX0lTX1JFVklTSU9OX1AzUExVUyhoYS0+Y2hpcF9yZXZpc2lvbikpIHsKLQkJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfUEVHX05FVF8wICsgMHgxOCwgMHgxMDIwKTsKLQkJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9ST01VU0JfR0xCX1NXX1JFU0VULCAweDgwMDAxZSk7Ci0JfSBlbHNlCi0JCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfUk9NVVNCX0dMQl9TV19SRVNFVCwgMHg4MDAwMWQpOworCXJlYWRfbG9jaygmaGEtPmh3X2xvY2spOworCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX1BFR19ORVRfMCArIDB4MTgsIDB4MTAyMCk7CisJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9ST01VU0JfR0xCX1NXX1JFU0VULCAweDgwMDAxZSk7CisJcmVhZF91bmxvY2soJmhhLT5od19sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcWxhODJ4eF9zZXRfcHJvZHVjdF9vZmZzZXQoc3RydWN0IHFsYV9od19kYXRhICpoYSkKK3sKKwlzdHJ1Y3QgcWxhODJ4eF91cmlfdGFibGVfZGVzYyAqcHRhYl9kZXNjID0gTlVMTDsKKwljb25zdCB1aW50OF90ICp1bmlyb20gPSBoYS0+aGFibG9iLT5mdy0+ZGF0YTsKKwl1aW50MzJfdCBpOworCV9fbGUzMiBlbnRyaWVzOworCV9fbGUzMiBmbGFncywgZmlsZV9jaGlwcmV2LCBvZmZzZXQ7CisJdWludDhfdCBjaGlwcmV2ID0gaGEtPmNoaXBfcmV2aXNpb247CisJLyogSGFyZGNvZGluZyBtbl9wcmVzZW50IGZsYWcgZm9yIFAzUCAqLworCWludCBtbl9wcmVzZW50ID0gMDsKKwl1aW50MzJfdCBmbGFnYml0OworCisJcHRhYl9kZXNjID0gcWxhODJ4eF9nZXRfdGFibGVfZGVzYyh1bmlyb20sCisJCSBRTEE4MlhYX1VSSV9ESVJfU0VDVF9QUk9EVUNUX1RCTCk7CisgICAgICAgaWYgKCFwdGFiX2Rlc2MpCisJCXJldHVybiAtMTsKKworCWVudHJpZXMgPSBjcHVfdG9fbGUzMihwdGFiX2Rlc2MtPm51bV9lbnRyaWVzKTsKKworCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzOyBpKyspIHsKKwkJb2Zmc2V0ID0gY3B1X3RvX2xlMzIocHRhYl9kZXNjLT5maW5kZXgpICsKKwkJCShpICogY3B1X3RvX2xlMzIocHRhYl9kZXNjLT5lbnRyeV9zaXplKSk7CisJCWZsYWdzID0gY3B1X3RvX2xlMzIoKigoaW50ICopJnVuaXJvbVtvZmZzZXRdICsKKwkJCVFMQTgyWFhfVVJJX0ZMQUdTX09GRikpOworCQlmaWxlX2NoaXByZXYgPSBjcHVfdG9fbGUzMigqKChpbnQgKikmdW5pcm9tW29mZnNldF0gKworCQkJUUxBODJYWF9VUklfQ0hJUF9SRVZfT0ZGKSk7CisKKwkJZmxhZ2JpdCA9IG1uX3ByZXNlbnQgPyAxIDogMjsKKworCQlpZiAoKGNoaXByZXYgPT0gZmlsZV9jaGlwcmV2KSAmJiAoKDFVTEwgPDwgZmxhZ2JpdCkgJiBmbGFncykpIHsKKwkJCWhhLT5maWxlX3ByZF9vZmYgPSBvZmZzZXQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gLTE7Cit9CisKK2ludAorcWxhODJ4eF92YWxpZGF0ZV9maXJtd2FyZV9ibG9iKHNjc2lfcWxhX2hvc3RfdCAqdmhhLCB1aW50OF90IGZ3X3R5cGUpCit7CisJX19sZTMyIHZhbDsKKwl1aW50MzJfdCBtaW5fc2l6ZTsKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gaGEtPmhhYmxvYi0+Znc7CisKKwloYS0+ZndfdHlwZSA9IGZ3X3R5cGU7CisKKwlpZiAoZndfdHlwZSA9PSBRTEE4MlhYX1VOSUZJRURfUk9NSU1BR0UpIHsKKwkJaWYgKHFsYTgyeHhfc2V0X3Byb2R1Y3Rfb2Zmc2V0KGhhKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCW1pbl9zaXplID0gUUxBODJYWF9VUklfRldfTUlOX1NJWkU7CisJfSBlbHNlIHsKKwkJdmFsID0gY3B1X3RvX2xlMzIoKih1MzIgKikmZnctPmRhdGFbUUxBODJYWF9GV19NQUdJQ19PRkZTRVRdKTsKKwkJaWYgKChfX2ZvcmNlIHUzMil2YWwgIT0gUUxBODJYWF9CRElORk9fTUFHSUMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQltaW5fc2l6ZSA9IFFMQTgyWFhfRldfTUlOX1NJWkU7CisJfQorCisJaWYgKGZ3LT5zaXplIDwgbWluX3NpemUpCisJCXJldHVybiAtRUlOVkFMOwogCXJldHVybiAwOwogfQogCkBAIC0yMDk3LDggKzIwMTgsNiBAQAogCiAJCWlmIChSRF9SRUdfRFdPUkQoJnJlZy0+aG9zdF9pbnQpKSB7CiAJCQlzdGF0ID0gUkRfUkVHX0RXT1JEKCZyZWctPmhvc3Rfc3RhdHVzKTsKLQkJCWlmICgoc3RhdCAmIEhTUlhfUklTQ19JTlQpID09IDApCi0JCQkJYnJlYWs7CiAKIAkJCXN3aXRjaCAoc3RhdCAmIDB4ZmYpIHsKIAkJCWNhc2UgMHgxOgpAQCAtMjE3Myw4ICsyMDkyLDYgQEAKIAlkbyB7CiAJCWlmIChSRF9SRUdfRFdPUkQoJnJlZy0+aG9zdF9pbnQpKSB7CiAJCQlzdGF0ID0gUkRfUkVHX0RXT1JEKCZyZWctPmhvc3Rfc3RhdHVzKTsKLQkJCWlmICgoc3RhdCAmIEhTUlhfUklTQ19JTlQpID09IDApCi0JCQkJYnJlYWs7CiAKIAkJCXN3aXRjaCAoc3RhdCAmIDB4ZmYpIHsKIAkJCWNhc2UgMHgxOgpAQCAtMjQyNCwxMiArMjM0MSw2IEBACiAJc3RydWN0IGZ3X2Jsb2IgKmJsb2I7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAKLQkvKiBQdXQgYm90aCB0aGUgUEVHIENNRCBhbmQgUkNWIFBFRyB0byBkZWZhdWx0IHN0YXRlCi0JICogb2YgMCBiZWZvcmUgcmVzZXR0aW5nIHRoZSBoYXJkd2FyZQotCSAqLwotCXFsYTgyeHhfd3JfMzIoaGEsIENSQl9DTURQRUdfU1RBVEUsIDApOwotCXFsYTgyeHhfd3JfMzIoaGEsIENSQl9SQ1ZQRUdfU1RBVEUsIDApOwotCiAJaWYgKHFsYTgyeHhfcGluaXRfZnJvbV9yb20odmhhKSAhPSBRTEFfU1VDQ0VTUykgewogCQlxbGFfcHJpbnRrKEtFUk5fRVJSLCBoYSwKIAkJCSIlczogRXJyb3IgZHVyaW5nIENSQiBJbml0aWFsaXphdGlvblxuIiwgX19mdW5jX18pOwpAQCAtMjQ3MCw2ICsyMzgxLDE4IEBACiAJCWdvdG8gZndfbG9hZF9mYWlsZWQ7CiAJfQogCisJLyogVmFsaWRhdGluZyBmaXJtd2FyZSBibG9iICovCisJaWYgKHFsYTgyeHhfdmFsaWRhdGVfZmlybXdhcmVfYmxvYih2aGEsCisJCVFMQTgyWFhfRkxBU0hfUk9NSU1BR0UpKSB7CisJCS8qIEZhbGxiYWNrIHRvIFVSSSBmb3JtYXQgKi8KKwkJaWYgKHFsYTgyeHhfdmFsaWRhdGVfZmlybXdhcmVfYmxvYih2aGEsCisJCQlRTEE4MlhYX1VOSUZJRURfUk9NSU1BR0UpKSB7CisJCQlxbGFfcHJpbnRrKEtFUk5fRVJSLCBoYSwKKwkJCQkiTm8gdmFsaWQgZmlybXdhcmUgaW1hZ2UgZm91bmQhISEiKTsKKwkJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOworCQl9CisJfQorCiAJaWYgKHFsYTgyeHhfZndfbG9hZF9mcm9tX2Jsb2IoaGEpID09IFFMQV9TVUNDRVNTKSB7CiAJCXFsYV9wcmludGsoS0VSTl9FUlIsIGhhLAogCQkJIiVzOiBGaXJtd2FyZSBsb2FkZWQgc3VjY2Vzc2Z1bGx5ICIKQEAgLTI0OTgsNiArMjQyMSwxMiBAQAogCS8qIHNjcnViIGRtYSBtYXNrIGV4cGFuc2lvbiByZWdpc3RlciAqLwogCXFsYTgyeHhfd3JfMzIoaGEsIENSQl9ETUFfU0hJRlQsIDB4NTU1NTU1NTUpOwogCisJLyogUHV0IGJvdGggdGhlIFBFRyBDTUQgYW5kIFJDViBQRUcgdG8gZGVmYXVsdCBzdGF0ZQorCSAqIG9mIDAgYmVmb3JlIHJlc2V0dGluZyB0aGUgaGFyZHdhcmUKKwkgKi8KKwlxbGE4Mnh4X3dyXzMyKGhhLCBDUkJfQ01EUEVHX1NUQVRFLCAwKTsKKwlxbGE4Mnh4X3dyXzMyKGhhLCBDUkJfUkNWUEVHX1NUQVRFLCAwKTsKKwogCS8qIE92ZXJ3cml0ZSBzdGFsZSBpbml0aWFsaXphdGlvbiByZWdpc3RlciB2YWx1ZXMgKi8KIAlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX1BFR19IQUxUX1NUQVRVUzEsIDApOwogCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfUEVHX0hBTFRfU1RBVFVTMiwgMCk7CkBAIC0yOTc3LDEwICsyOTA2LDEwIEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZG9uZV91bnByb3RlY3Q7CiAKLQl2YWwgJj0gfigweDcgPDwgMik7CisJdmFsICY9IH4oQkxPQ0tfUFJPVEVDVF9CSVRTIDw8IDIpOwogCXJldCA9IHFsYTgyeHhfd3JpdGVfc3RhdHVzX3JlZyhoYSwgdmFsKTsKIAlpZiAocmV0IDwgMCkgewotCQl2YWwgfD0gKDB4NyA8PCAyKTsKKwkJdmFsIHw9IChCTE9DS19QUk9URUNUX0JJVFMgPDwgMik7CiAJCXFsYTgyeHhfd3JpdGVfc3RhdHVzX3JlZyhoYSwgdmFsKTsKIAl9CiAKQEAgLTMwMDgsNyArMjkzNyw3IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZG9uZV9wcm90ZWN0OwogCi0JdmFsIHw9ICgweDcgPDwgMik7CisJdmFsIHw9IChCTE9DS19QUk9URUNUX0JJVFMgPDwgMik7CiAJLyogTE9DSyBhbGwgc2VjdG9ycyAqLwogCXJldCA9IHFsYTgyeHhfd3JpdGVfc3RhdHVzX3JlZyhoYSwgdmFsKTsKIAlpZiAocmV0IDwgMCkKQEAgLTMyMDEsMTEgKzMxMzAsMTYgQEAKIAlkYnZhbCA9IDB4MDQgfCAoaGEtPnBvcnRudW0gPDwgNSk7CiAKIAlkYnZhbCA9IGRidmFsIHwgKHJlcS0+aWQgPDwgOCkgfCAocmVxLT5yaW5nX2luZGV4IDw8IDE2KTsKLQlXUlRfUkVHX0RXT1JEKCh1bnNpZ25lZCBsb25nIF9faW9tZW0gKiloYS0+bnhkYl93cl9wdHIsIGRidmFsKTsKLQl3bWIoKTsKLQl3aGlsZSAoUkRfUkVHX0RXT1JEKGhhLT5ueGRiX3JkX3B0cikgIT0gZGJ2YWwpIHsKLQkJV1JUX1JFR19EV09SRCgodW5zaWduZWQgbG9uZyAgX19pb21lbSAqKWhhLT5ueGRiX3dyX3B0ciwgZGJ2YWwpOworCWlmIChxbDJ4ZGJ3cikKKwkJcWxhODJ4eF93cl8zMihoYSwgaGEtPm54ZGJfd3JfcHRyLCBkYnZhbCk7CisJZWxzZSB7CisJCVdSVF9SRUdfRFdPUkQoKHVuc2lnbmVkIGxvbmcgX19pb21lbSAqKWhhLT5ueGRiX3dyX3B0ciwgZGJ2YWwpOwogCQl3bWIoKTsKKwkJd2hpbGUgKFJEX1JFR19EV09SRChoYS0+bnhkYl9yZF9wdHIpICE9IGRidmFsKSB7CisJCQlXUlRfUkVHX0RXT1JEKCh1bnNpZ25lZCBsb25nICBfX2lvbWVtICopaGEtPm54ZGJfd3JfcHRyLAorCQkJCWRidmFsKTsKKwkJCXdtYigpOworCQl9CiAJfQogfQogCkBAIC0zMjc5LDYgKzMyMTMsMTAgQEAKIAkvKiBEaXNhYmxlIHRoZSBib2FyZCAqLwogCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIkRpc2FibGluZyB0aGUgYm9hcmRcbiIpOwogCisJcWxhODJ4eF9pZGNfbG9jayhoYSk7CisJcWxhODJ4eF9jbGVhcl9kcnZfYWN0aXZlKGhhKTsKKwlxbGE4Mnh4X2lkY191bmxvY2soaGEpOworCiAJLyogU2V0IERFVl9GQUlMRUQgZmxhZyB0byBkaXNhYmxlIHRpbWVyICovCiAJdmhhLT5kZXZpY2VfZmxhZ3MgfD0gREZMR19ERVZfRkFJTEVEOwogCXFsYTJ4MDBfYWJvcnRfYWxsX2NtZHModmhhLCBESURfTk9fQ09OTkVDVCA8PCAxNik7CkBAIC0zMzY5LDYgKzMzMDcsMTQgQEAKIAkJCQlzZXRfYml0KElTUF9BQk9SVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CiAJCQl9CiAJCQlxbGEyeHh4X3dha2VfZHBjKHZoYSk7CisJCQlpZiAoaGEtPmZsYWdzLm1ib3hfYnVzeSkgeworCQkJCWhhLT5mbGFncy5md19odW5nID0gMTsKKwkJCQloYS0+ZmxhZ3MubWJveF9pbnQgPSAxOworCQkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fRVJSLCBoYSwKKwkJCQkgICAgIkR1ZSB0byBmdyBodW5nLCBkb2luZyBwcmVtYXR1cmUgIgorCQkJCSAgICAiY29tcGxldGlvbiBvZiBtYnggY29tbWFuZFxuIikpOworCQkJCWNvbXBsZXRlKCZoYS0+bWJ4X2ludHJfY29tcCk7CisJCQl9CiAJCX0KIAl9CiAJdmhhLT5md19oZWFydGJlYXRfY291bnRlciA9IGZ3X2hlYXJ0YmVhdF9jb3VudGVyOwpAQCAtMzQ3Miw2ICszNDE4LDE0IEBACiAJCQkJIiVzKCk6IEFkYXB0ZXIgcmVzZXQgbmVlZGVkIVxuIiwgX19mdW5jX18pOwogCQkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOwogCQkJcWxhMnh4eF93YWtlX2RwYyh2aGEpOworCQkJaWYgKGhhLT5mbGFncy5tYm94X2J1c3kpIHsKKwkJCQloYS0+ZmxhZ3MuZndfaHVuZyA9IDE7CisJCQkJaGEtPmZsYWdzLm1ib3hfaW50ID0gMTsKKwkJCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsCisJCQkJICAgICJOZWVkIHJlc2V0LCBkb2luZyBwcmVtYXR1cmUgIgorCQkJCSAgICAiY29tcGxldGlvbiBvZiBtYnggY29tbWFuZFxuIikpOworCQkJCWNvbXBsZXRlKCZoYS0+bWJ4X2ludHJfY29tcCk7CisJCQl9CiAJCX0gZWxzZSB7CiAJCQlxbGE4Mnh4X2NoZWNrX2Z3X2FsaXZlKHZoYSk7CiAJCX0KQEAgLTM1MjcsOCArMzQ4MSwxMCBAQAogCXFsYTgyeHhfY2xlYXJfcnN0X3JlYWR5KGhhKTsKIAlxbGE4Mnh4X2lkY191bmxvY2soaGEpOwogCi0JaWYgKHJ2YWwgPT0gUUxBX1NVQ0NFU1MpCisJaWYgKHJ2YWwgPT0gUUxBX1NVQ0NFU1MpIHsKKwkJaGEtPmZsYWdzLmZ3X2h1bmcgPSAwOwogCQlxbGE4Mnh4X3Jlc3RhcnRfaXNwKHZoYSk7CisJfQogCiAJaWYgKHJ2YWwpIHsKIAkJdmhhLT5mbGFncy5vbmxpbmUgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX254LmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbnguaAppbmRleCBmOGY5OWE1Li4xNTU1OWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbnguaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbnguaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMDggUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpAQCAtNTM4LDExICs1MzgsMTAgQEAKIC8qIERyaXZlciBDb2V4aXN0ZW5jZSBEZWZpbmVzICovCiAjZGVmaW5lIFFMQTgyWFhfQ1JCX0RSVl9BQ1RJVkUJICAgICAoUUxBODJYWF9DQU1fUkFNKDB4MTM4KSkKICNkZWZpbmUgUUxBODJYWF9DUkJfREVWX1NUQVRFCSAgICAgKFFMQTgyWFhfQ0FNX1JBTSgweDE0MCkpCi0jZGVmaW5lIFFMQTgyWFhfQ1JCX0RFVl9QQVJUX0lORk8gICAgKFFMQTgyWFhfQ0FNX1JBTSgweDE0YykpCi0jZGVmaW5lIFFMQTgyWFhfQ1JCX0RSVl9JRENfVkVSU0lPTiAgKFFMQTgyWFhfQ0FNX1JBTSgweDE3NCkpCiAjZGVmaW5lIFFMQTgyWFhfQ1JCX0RSVl9TVEFURQkgICAgIChRTEE4MlhYX0NBTV9SQU0oMHgxNDQpKQogI2RlZmluZSBRTEE4MlhYX0NSQl9EUlZfU0NSQVRDSCAgICAgIChRTEE4MlhYX0NBTV9SQU0oMHgxNDgpKQogI2RlZmluZSBRTEE4MlhYX0NSQl9ERVZfUEFSVF9JTkZPICAgIChRTEE4MlhYX0NBTV9SQU0oMHgxNGMpKQorI2RlZmluZSBRTEE4MlhYX0NSQl9EUlZfSURDX1ZFUlNJT04gIChRTEE4MlhYX0NBTV9SQU0oMHgxNzQpKQogCiAvKiBFdmVyeSBkcml2ZXIgc2hvdWxkIHVzZSB0aGVzZSBEZXZpY2UgU3RhdGUgKi8KICNkZWZpbmUgUUxBODJYWF9ERVZfQ09MRAkJMQpAQCAtNzc0LDE1ICs3NzMsNDkgQEAKIAkJLnBjaV9pbnRfcmVnCT0JSVNSX01TSV9JTlRfVFJJR0dFUig3KSB9LAlcCiB9CiAKKyNkZWZpbmUgQlJEQ0ZHX1NUQVJUCQkweDQwMDAKICNkZWZpbmUJQk9PVExEX1NUQVJUCQkweDEwMDAwCiAjZGVmaW5lCUlNQUdFX1NUQVJUCQkweDEwMDAwMAogI2RlZmluZSBGTEFTSF9BRERSX1NUQVJUCTB4NDMwMDAKIAogLyogTWFnaWMgbnVtYmVyIHRvIGxldCB1c2VyIGtub3cgZmxhc2ggaXMgcHJvZ3JhbW1lZCAqLwogI2RlZmluZSBRTEE4MlhYX0JESU5GT19NQUdJQwkweDEyMzQ1Njc4CisjZGVmaW5lIFFMQTgyWFhfRldfTUFHSUNfT0ZGU0VUCShCUkRDRkdfU1RBUlQgKyAweDEyOCkKICNkZWZpbmUgRldfU0laRV9PRkZTRVQJCSgweDNlODQwYykKKyNkZWZpbmUgUUxBODJYWF9GV19NSU5fU0laRQkweDNmZmZmZgogCi0jZGVmaW5lIFFMQTgyWFhfSVNfUkVWSVNJT05fUDNQTFVTKF9yZXZfKQkoKF9yZXZfKSA+PSAweDUwKQorLyogVU5JRklFRCBST01JTUFHRSBTVEFSVCAqLworI2RlZmluZSBRTEE4MlhYX1VSSV9GV19NSU5fU0laRQkJCTB4YzgwMDAKKyNkZWZpbmUgUUxBODJYWF9VUklfRElSX1NFQ1RfUFJPRFVDVF9UQkwJMHgwCisjZGVmaW5lIFFMQTgyWFhfVVJJX0RJUl9TRUNUX0JPT1RMRAkJMHg2CisjZGVmaW5lIFFMQTgyWFhfVVJJX0RJUl9TRUNUX0ZXCQkJMHg3CisKKy8qIE9mZnNldHMgKi8KKyNkZWZpbmUgUUxBODJYWF9VUklfQ0hJUF9SRVZfT0ZGCTEwCisjZGVmaW5lIFFMQTgyWFhfVVJJX0ZMQUdTX09GRgkJMTEKKyNkZWZpbmUgUUxBODJYWF9VUklfQklPU19WRVJTSU9OX09GRgkxMgorI2RlZmluZSBRTEE4MlhYX1VSSV9CT09UTERfSURYX09GRgkyNworI2RlZmluZSBRTEE4MlhYX1VSSV9GSVJNV0FSRV9JRFhfT0ZGCTI5CisKK3N0cnVjdCBxbGE4Mnh4X3VyaV90YWJsZV9kZXNjeworCXVpbnQzMl90CWZpbmRleDsKKwl1aW50MzJfdAludW1fZW50cmllczsKKwl1aW50MzJfdAllbnRyeV9zaXplOworCXVpbnQzMl90CXJlc2VydmVkWzVdOworfTsKKworc3RydWN0IHFsYTgyeHhfdXJpX2RhdGFfZGVzY3sKKwl1aW50MzJfdAlmaW5kZXg7CisJdWludDMyX3QJc2l6ZTsKKwl1aW50MzJfdAlyZXNlcnZlZFs1XTsKK307CisKKy8qIFVOSUZJRUQgUk9NSU1BR0UgRU5EICovCisKKyNkZWZpbmUgUUxBODJYWF9VTklGSUVEX1JPTUlNQUdFCTMKKyNkZWZpbmUgUUxBODJYWF9GTEFTSF9ST01JTUFHRQkJNAorI2RlZmluZSBRTEE4MlhYX1VOS05PV05fUk9NSU1BR0UJMHhmZgorCiAjZGVmaW5lIE1JVV9URVNUX0FHVF9XUkRBVEFfVVBQRVJfTE8JCSgweDBiMCkKICNkZWZpbmUJTUlVX1RFU1RfQUdUX1dSREFUQV9VUFBFUl9ISQkJKDB4MGI0KQogCkBAIC04MzIsNyArODY1LDcgQEAKIAlzdHJ1Y3Qgc2NzaV9sdW4gbHVuOwogCXVpbnQ4X3QgY3JuOwogCXVpbnQ4X3QgdGFza19hdHRyaWJ1dGU7Ci0JdWludDhfdCB0YXNrX21hbmFnbWVudDsKKwl1aW50OF90IHRhc2tfbWFuYWdlbWVudDsKIAl1aW50OF90IGFkZGl0aW9uYWxfY2RiX2xlbjsKIAl1aW50OF90IGNkYlsyNjBdOyAvKiAyNTYgZm9yIENEQiBsZW4gYW5kIDQgZm9yIEZDUF9ETCAqLwogfTsKQEAgLTg1Myw3ICs4ODYsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgZHNkX2xpc3Q7CiB9OwogCi0jZGVmaW5lIE1CQ19UT0dHTEVfSU5UUgkJCTB4MTAKKyNkZWZpbmUgTUJDX1RPR0dMRV9JTlRFUlJVUFQJMHgxMAogCiAvKiBGbGFzaCAgb2Zmc2V0ICovCiAjZGVmaW5lIEZMVF9SRUdfQk9PVExPQURfODJYWAkweDcyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCmluZGV4IGJlMWE4ZmMuLmZmMjE3MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwOCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCkBAIC0xNDAsNyArMTQwLDcgQEAKIAkJIkVuYWJsZXMgZmlybXdhcmUgRVRTIGJ1cnN0LiIKIAkJIkRlZmF1bHQgaXMgMCAtIHNraXAgRVRTIGVuYWJsZW1lbnQuIik7CiAKLWludCBxbDJ4ZGJ3cjsKK2ludCBxbDJ4ZGJ3ciA9IDE7CiBtb2R1bGVfcGFyYW0ocWwyeGRid3IsIGludCwgU19JUlVHT3xTX0lSVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MocWwyeGRid3IsCiAJIk9wdGlvbiB0byBzcGVjaWZ5IHNjaGVtZSBmb3IgcmVxdWVzdCBxdWV1ZSBwb3N0aW5nXG4iCkBAIC01MTcsNiArNTE3LDcgQEAKIAlpZiAoIXNwKQogCQlyZXR1cm4gc3A7CiAKKwlhdG9taWNfc2V0KCZzcC0+cmVmX2NvdW50LCAxKTsKIAlzcC0+ZmNwb3J0ID0gZmNwb3J0OwogCXNwLT5jbWQgPSBjbWQ7CiAJc3AtPmZsYWdzID0gMDsKQEAgLTcwMCw3ICs3MDEsNyBAQAogICogICAgU3VjY2VzcyAoQWRhcHRlciBpcyBvbmxpbmUvbm8gZmxhc2ggb3BzKSA6IDAKICAqICAgIEZhaWxlZCAgKEFkYXB0ZXIgaXMgb2ZmbGluZS9kaXNhYmxlZC9mbGFzaCBvcHMgaW4gcHJvZ3Jlc3MpIDogMQogICovCi1pbnQKK3N0YXRpYyBpbnQKIHFsYTJ4MDBfd2FpdF9mb3JfcmVzZXRfcmVhZHkoc2NzaV9xbGFfaG9zdF90ICp2aGEpCiB7CiAJaW50CQlyZXR1cm5fc3RhdHVzOwpAQCAtNzk3LDYgKzc5OCwxMiBAQAogCXJldHVybiAocmV0dXJuX3N0YXR1cyk7CiB9CiAKK3N0YXRpYyB2b2lkCitzcF9nZXQoc3RydWN0IHNyYiAqc3ApCit7CisJYXRvbWljX2luYygmc3AtPnJlZl9jb3VudCk7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBxbGEyeHh4X2VoX2Fib3J0CiAqCkBAIC04MjUsNiArODMyLDcgQEAKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAlzdHJ1Y3QgcmVxX3F1ZSAqcmVxID0gdmhhLT5yZXE7CiAJc3JiX3QgKnNwdDsKKwlpbnQgZ290X3JlZiA9IDA7CiAKIAlmY19ibG9ja19zY3NpX2VoKGNtZCk7CiAKQEAgLTg1Niw2ICs4NjQsMTAgQEAKIAkJREVCVUcyKHByaW50aygiJXMoJWxkKTogYWJvcnRpbmcgc3AgJXAgZnJvbSBSSVNDLiIKIAkJIiBwaWQ9JWxkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubywgc3AsIHNlcmlhbCkpOwogCisJCS8qIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgc3AgYW5kIGRyb3AgdGhlIGxvY2suKi8KKwkJc3BfZ2V0KHNwKTsKKwkJZ290X3JlZisrOworCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAJCWlmIChoYS0+aXNwX29wcy0+YWJvcnRfY29tbWFuZChzcCkpIHsKIAkJCURFQlVHMihwcmludGsoIiVzKCVsZCk6IGFib3J0X2NvbW1hbmQgIgpAQCAtODgxLDYgKzg5Myw5IEBACiAJCX0KIAl9CiAKKwlpZiAoZ290X3JlZikKKwkJcWxhMngwMF9zcF9jb21wbChoYSwgc3ApOworCiAJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAogCSAgICAic2NzaSglbGQ6JWQ6JWQpOiBBYm9ydCBjb21tYW5kIGlzc3VlZCAtLSAlZCAlbHggJXguXG4iLAogCSAgICB2aGEtPmhvc3Rfbm8sIGlkLCBsdW4sIHdhaXQsIHNlcmlhbCwgcmV0KTsKQEAgLTg4OCwyNCArOTAzLDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotZW51bSBuZXh1c193YWl0X3R5cGUgewotCVdBSVRfSE9TVCA9IDAsCi0JV0FJVF9UQVJHRVQsCi0JV0FJVF9MVU4sCi19OwotCi1zdGF0aWMgaW50CitpbnQKIHFsYTJ4MDBfZWhfd2FpdF9mb3JfcGVuZGluZ19jb21tYW5kcyhzY3NpX3FsYV9ob3N0X3QgKnZoYSwgdW5zaWduZWQgaW50IHQsCi0JdW5zaWduZWQgaW50IGwsIHNyYl90ICpzcCwgZW51bSBuZXh1c193YWl0X3R5cGUgdHlwZSkKKwl1bnNpZ25lZCBpbnQgbCwgZW51bSBuZXh1c193YWl0X3R5cGUgdHlwZSkKIHsKIAlpbnQgY250LCBtYXRjaCwgc3RhdHVzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAJc3RydWN0IHJlcV9xdWUgKnJlcTsKKwlzcmJfdCAqc3A7CiAKIAlzdGF0dXMgPSBRTEFfU1VDQ0VTUzsKLQlpZiAoIXNwKQotCQlyZXR1cm4gc3RhdHVzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAJcmVxID0gdmhhLT5yZXE7CkBAIC05NDMsMjQgKzk1MSw2IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotdm9pZCBxbGE4Mnh4X3dhaXRfZm9yX3BlbmRpbmdfY29tbWFuZHMoc2NzaV9xbGFfaG9zdF90ICp2aGEpCi17Ci0JaW50IGNudDsKLQlzcmJfdCAqc3A7Ci0Jc3RydWN0IHJlcV9xdWUgKnJlcSA9IHZoYS0+cmVxOwotCi0JREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCB2aGEtPmh3LAotCQkiV2FpdGluZyBmb3IgcGVuZGluZyBjb21tYW5kc1xuIikpOwotCWZvciAoY250ID0gMTsgY250IDwgTUFYX09VVFNUQU5ESU5HX0NPTU1BTkRTOyBjbnQrKykgewotCQlzcCA9IHJlcS0+b3V0c3RhbmRpbmdfY21kc1tjbnRdOwotCQlpZiAocWxhMngwMF9laF93YWl0X2Zvcl9wZW5kaW5nX2NvbW1hbmRzKHZoYSwgMCwgMCwKLQkJCXNwLCBXQUlUX0hPU1QpID09IFFMQV9TVUNDRVNTKSB7Ci0JCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIHZoYS0+aHcsCi0JCQkJIkRvbmUgd2FpdCBmb3IgcGVuZGluZyBjb21tYW5kc1xuIikpOwotCQl9Ci0JfQotfQotCiBzdGF0aWMgY2hhciAqcmVzZXRfZXJyb3JzW10gPSB7CiAJIkhCQSBub3Qgb25saW5lIiwKIAkiSEJBIG5vdCByZWFkeSIsCkBAIC05OTYsNyArOTg2LDcgQEAKIAkJZ290byBlaF9yZXNldF9mYWlsZWQ7CiAJZXJyID0gMzsKIAlpZiAocWxhMngwMF9laF93YWl0X2Zvcl9wZW5kaW5nX2NvbW1hbmRzKHZoYSwgY21kLT5kZXZpY2UtPmlkLAotCSAgICBjbWQtPmRldmljZS0+bHVuLCAoc3JiX3QgKikgQ01EX1NQKGNtZCksIHR5cGUpICE9IFFMQV9TVUNDRVNTKQorCSAgICBjbWQtPmRldmljZS0+bHVuLCB0eXBlKSAhPSBRTEFfU1VDQ0VTUykKIAkJZ290byBlaF9yZXNldF9mYWlsZWQ7CiAKIAlxbGFfcHJpbnRrKEtFUk5fSU5GTywgdmhhLT5odywgInNjc2koJWxkOiVkOiVkKTogJXMgUkVTRVQgU1VDQ0VFREVELlxuIiwKQEAgLTEwMDQsNyArOTk0LDcgQEAKIAogCXJldHVybiBTVUNDRVNTOwogCi0gZWhfcmVzZXRfZmFpbGVkOgorZWhfcmVzZXRfZmFpbGVkOgogCXFsYV9wcmludGsoS0VSTl9JTkZPLCB2aGEtPmh3LCAic2NzaSglbGQ6JWQ6JWQpOiAlcyBSRVNFVCBGQUlMRUQ6ICVzLlxuIgogCSAgICAsIHZoYS0+aG9zdF9ubywgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuLCBuYW1lLAogCSAgICByZXNldF9lcnJvcnNbZXJyXSk7CkBAIC0xMDU0LDcgKzEwNDQsNiBAQAogCWludCByZXQgPSBGQUlMRUQ7CiAJdW5zaWduZWQgaW50IGlkLCBsdW47CiAJdW5zaWduZWQgbG9uZyBzZXJpYWw7Ci0Jc3JiX3QgKnNwID0gKHNyYl90ICopIENNRF9TUChjbWQpOwogCiAJZmNfYmxvY2tfc2NzaV9laChjbWQpOwogCkBAIC0xMDgxLDcgKzEwNzAsNyBAQAogCQlnb3RvIGVoX2J1c19yZXNldF9kb25lOwogCiAJLyogRmx1c2ggb3V0c3RhbmRpbmcgY29tbWFuZHMuICovCi0JaWYgKHFsYTJ4MDBfZWhfd2FpdF9mb3JfcGVuZGluZ19jb21tYW5kcyh2aGEsIDAsIDAsIHNwLCBXQUlUX0hPU1QpICE9CisJaWYgKHFsYTJ4MDBfZWhfd2FpdF9mb3JfcGVuZGluZ19jb21tYW5kcyh2aGEsIDAsIDAsIFdBSVRfSE9TVCkgIT0KIAkgICAgUUxBX1NVQ0NFU1MpCiAJCXJldCA9IEZBSUxFRDsKIApAQCAtMTExNiw3ICsxMTA1LDYgQEAKIAlpbnQgcmV0ID0gRkFJTEVEOwogCXVuc2lnbmVkIGludCBpZCwgbHVuOwogCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwotCXNyYl90ICpzcCA9IChzcmJfdCAqKSBDTURfU1AoY21kKTsKIAlzY3NpX3FsYV9ob3N0X3QgKmJhc2VfdmhhID0gcGNpX2dldF9kcnZkYXRhKGhhLT5wZGV2KTsKIAogCWZjX2Jsb2NrX3Njc2lfZWgoY21kKTsKQEAgLTExNzEsNyArMTE1OSw3IEBACiAJfQogCiAJLyogV2FpdGluZyBmb3IgY29tbWFuZCB0byBiZSByZXR1cm5lZCB0byBPUy4qLwotCWlmIChxbGEyeDAwX2VoX3dhaXRfZm9yX3BlbmRpbmdfY29tbWFuZHModmhhLCAwLCAwLCBzcCwgV0FJVF9IT1NUKSA9PQorCWlmIChxbGEyeDAwX2VoX3dhaXRfZm9yX3BlbmRpbmdfY29tbWFuZHModmhhLCAwLCAwLCBXQUlUX0hPU1QpID09CiAJCVFMQV9TVUNDRVNTKQogCQlyZXQgPSBTVUNDRVNTOwogCkBAIC0xNjYyLDcgKzE2NTAsNyBAQAogCS5yZWFkX29wdHJvbQkJPSBxbGEyNXh4X3JlYWRfb3B0cm9tX2RhdGEsCiAJLndyaXRlX29wdHJvbQkJPSBxbGEyNHh4X3dyaXRlX29wdHJvbV9kYXRhLAogCS5nZXRfZmxhc2hfdmVyc2lvbgk9IHFsYTI0eHhfZ2V0X2ZsYXNoX3ZlcnNpb24sCi0JLnN0YXJ0X3Njc2kJCT0gcWxhMjR4eF9zdGFydF9zY3NpLAorCS5zdGFydF9zY3NpCQk9IHFsYTI0eHhfZGlmX3N0YXJ0X3Njc2ksCiAJLmFib3J0X2lzcAkJPSBxbGEyeDAwX2Fib3J0X2lzcCwKIH07CiAKQEAgLTIxMTMsNiArMjEwMSw3IEBACiAJaW5pdF9jb21wbGV0aW9uKCZoYS0+bWJ4X2NtZF9jb21wKTsKIAljb21wbGV0ZSgmaGEtPm1ieF9jbWRfY29tcCk7CiAJaW5pdF9jb21wbGV0aW9uKCZoYS0+bWJ4X2ludHJfY29tcCk7CisJaW5pdF9jb21wbGV0aW9uKCZoYS0+ZGNieF9jb21wKTsKIAogCXNldF9iaXQoMCwgKHVuc2lnbmVkIGxvbmcgKikgaGEtPnZwX2lkeF9tYXApOwogCkBAIC0yMTU4LDcgKzIxNDcsMTAgQEAKIAlob3N0LT50aGlzX2lkID0gMjU1OwogCWhvc3QtPmNtZF9wZXJfbHVuID0gMzsKIAlob3N0LT51bmlxdWVfaWQgPSBob3N0LT5ob3N0X25vOwotCWhvc3QtPm1heF9jbWRfbGVuID0gTUFYX0NNRFNaOworCWlmICgoSVNfUUxBMjVYWChoYSkgfHwgSVNfUUxBODFYWChoYSkpICYmIHFsMnhlbmFibGVkaWYpCisJCWhvc3QtPm1heF9jbWRfbGVuID0gMzI7CisJZWxzZQorCQlob3N0LT5tYXhfY21kX2xlbiA9IE1BWF9DTURTWjsKIAlob3N0LT5tYXhfY2hhbm5lbCA9IE1BWF9CVVNFUyAtIDE7CiAJaG9zdC0+bWF4X2x1biA9IE1BWF9MVU5TOwogCWhvc3QtPnRyYW5zcG9ydHQgPSBxbGEyeHh4X3RyYW5zcG9ydF90ZW1wbGF0ZTsKQEAgLTIyNTgsNyArMjI1MCw3IEBACiAJREVCVUcyKHByaW50aygiREVCVUc6IGRldGVjdCBoYmEgJWxkIGF0IGFkZHJlc3MgPSAlcFxuIiwKIAkgICAgYmFzZV92aGEtPmhvc3Rfbm8sIGhhKSk7CiAKLQlpZiAoSVNfUUxBMjVYWChoYSkgJiYgcWwyeGVuYWJsZWRpZikgeworCWlmICgoSVNfUUxBMjVYWChoYSkgfHwgSVNfUUxBODFYWChoYSkpICYmIHFsMnhlbmFibGVkaWYpIHsKIAkJaWYgKGhhLT5md19hdHRyaWJ1dGVzICYgQklUXzQpIHsKIAkJCWJhc2VfdmhhLT5mbGFncy5kaWZkaXhfc3VwcG9ydGVkID0gMTsKIAkJCURFQlVHMTgocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLApAQCAtMjI2Niw4ICsyMjU4LDEwIEBACiAJCQkgICAgIiBwcm90ZWN0aW9uLlxuIikpOwogCQkJc2NzaV9ob3N0X3NldF9wcm90KGhvc3QsCiAJCQkgICAgU0hPU1RfRElGX1RZUEUxX1BST1RFQ1RJT04KKwkJCSAgICB8IFNIT1NUX0RJRl9UWVBFMl9QUk9URUNUSU9OCiAJCQkgICAgfCBTSE9TVF9ESUZfVFlQRTNfUFJPVEVDVElPTgogCQkJICAgIHwgU0hPU1RfRElYX1RZUEUxX1BST1RFQ1RJT04KKwkJCSAgICB8IFNIT1NUX0RJWF9UWVBFMl9QUk9URUNUSU9OCiAJCQkgICAgfCBTSE9TVF9ESVhfVFlQRTNfUFJPVEVDVElPTik7CiAJCQlzY3NpX2hvc3Rfc2V0X2d1YXJkKGhvc3QsIFNIT1NUX0RJWF9HVUFSRF9DUkMpOwogCQl9IGVsc2UKQEAgLTI0MDIsNiArMjM5NiwxMCBAQAogCXNjc2lfaG9zdF9wdXQoYmFzZV92aGEtPmhvc3QpOwogCiAJaWYgKElTX1FMQTgyWFgoaGEpKSB7CisJCXFsYTgyeHhfaWRjX2xvY2soaGEpOworCQlxbGE4Mnh4X2NsZWFyX2Rydl9hY3RpdmUoaGEpOworCQlxbGE4Mnh4X2lkY191bmxvY2soaGEpOworCiAJCWlvdW5tYXAoKGRldmljZV9yZWdfdCBfX2lvbWVtICopaGEtPm54X3BjaWJhc2UpOwogCQlpZiAoIXFsMnhkYndyKQogCQkJaW91bm1hcCgoZGV2aWNlX3JlZ190IF9faW9tZW0gKiloYS0+bnhkYl93cl9wdHIpOwpAQCAtMjQ2NywxMSArMjQ2NSwyNCBAQAogCiAJcWxhMngwMF9mcmVlX2lycXModmhhKTsKIAorCXFsYTJ4MDBfZnJlZV9mY3BvcnRzKHZoYSk7CisKIAlxbGEyeDAwX21lbV9mcmVlKGhhKTsKIAogCXFsYTJ4MDBfZnJlZV9xdWV1ZXMoaGEpOwogfQogCit2b2lkIHFsYTJ4MDBfZnJlZV9mY3BvcnRzKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEpCit7CisJZmNfcG9ydF90ICpmY3BvcnQsICp0ZmNwb3J0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZjcG9ydCwgdGZjcG9ydCwgJnZoYS0+dnBfZmNwb3J0cywgbGlzdCkgeworCQlsaXN0X2RlbCgmZmNwb3J0LT5saXN0KTsKKwkJa2ZyZWUoZmNwb3J0KTsKKwkJZmNwb3J0ID0gTlVMTDsKKwl9Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZAogcWxhMngwMF9zY2hlZHVsZV9ycG9ydF9kZWwoc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZoYSwgZmNfcG9ydF90ICpmY3BvcnQsCiAgICAgaW50IGRlZmVyKQpAQCAtMzQ2Myw4ICszNDc0LDggQEAKIAlDTURfU1AoY21kKSA9IE5VTEw7CiB9CiAKLXZvaWQKLXFsYTJ4MDBfc3BfY29tcGwoc3RydWN0IHFsYV9od19kYXRhICpoYSwgc3JiX3QgKnNwKQorc3RhdGljIHZvaWQKK3FsYTJ4MDBfc3BfZmluYWxfY29tcGwoc3RydWN0IHFsYV9od19kYXRhICpoYSwgc3JiX3QgKnNwKQogewogCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IHNwLT5jbWQ7CiAKQEAgLTM0ODUsNiArMzQ5NiwyMCBAQAogCWNtZC0+c2NzaV9kb25lKGNtZCk7CiB9CiAKK3ZvaWQKK3FsYTJ4MDBfc3BfY29tcGwoc3RydWN0IHFsYV9od19kYXRhICpoYSwgc3JiX3QgKnNwKQoreworCWlmIChhdG9taWNfcmVhZCgmc3AtPnJlZl9jb3VudCkgPT0gMCkgeworCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkgICAgIlNQIHJlZmVyZW5jZS1jb3VudCB0byBaRVJPIC0tIHNwPSVwXG4iLCBzcCkpOworCQlERUJVRzIoQlVHKCkpOworCQlyZXR1cm47CisJfQorCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmc3AtPnJlZl9jb3VudCkpCisJCXJldHVybjsKKwlxbGEyeDAwX3NwX2ZpbmFsX2NvbXBsKGhhLCBzcCk7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgIHFsYTJ4MDBfdGltZXIKICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9zZXR0aW5ncy5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3NldHRpbmdzLmgKaW5kZXggMjgwMWMyNi4uZjBiMmI5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3NldHRpbmdzLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3NldHRpbmdzLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogUUxvZ2ljIEZpYnJlIENoYW5uZWwgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDA4IFFMb2dpYyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDEwIFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKICAqIFNlZSBMSUNFTlNFLnFsYTJ4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9zdXAuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9zdXAuYwppbmRleCBkZTkyNTA0Li43NmRlOTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfc3VwLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3N1cC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwOCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCkBAIC02NjQsNiArNjY0LDExIEBACiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAJc3RydWN0IHJlcV9xdWUgKnJlcSA9IGhhLT5yZXFfcV9tYXBbMF07CiAKKwlkZWYgPSAwOworCWlmIChJU19RTEEyNVhYKGhhKSkKKwkJZGVmID0gMTsKKwllbHNlIGlmIChJU19RTEE4MVhYKGhhKSkKKwkJZGVmID0gMjsKIAloYS0+Zmx0X3JlZ2lvbl9mbHQgPSBmbHRfYWRkcjsKIAl3cHRyID0gKHVpbnQxNl90ICopcmVxLT5yaW5nOwogCWZsdCA9IChzdHJ1Y3QgcWxhX2ZsdF9oZWFkZXIgKilyZXEtPnJpbmc7CkBAIC02OTEsNiArNjk2LDEwIEBACiAJCWdvdG8gbm9fZmxhc2hfZGF0YTsKIAl9CiAKKwkvKiBBc3NpZ24gRkNQIHByaW8gcmVnaW9uIHNpbmNlIG9sZGVyIEZMVCdzIG1heSBub3QgaGF2ZSBpdCAqLworCWhhLT5mbHRfcmVnaW9uX2ZjcF9wcmlvID0gaGEtPmZsYWdzLnBvcnQwID8KKwkgICAgZmNwX3ByaW9fY2ZnMFtkZWZdIDogZmNwX3ByaW9fY2ZnMVtkZWZdOworCiAJbG9jID0gbG9jYXRpb25zWzFdOwogCWNudCA9IGxlMTZfdG9fY3B1KGZsdC0+bGVuZ3RoKSAvIHNpemVvZihzdHJ1Y3QgcWxhX2ZsdF9yZWdpb24pOwogCWZvciAoIDsgY250OyBjbnQtLSwgcmVnaW9uKyspIHsKQEAgLTc3MywxMyArNzgyLDYgQEAKIG5vX2ZsYXNoX2RhdGE6CiAJLyogVXNlIGhhcmRjb2RlZCBkZWZhdWx0cy4gKi8KIAlsb2MgPSBsb2NhdGlvbnNbMF07Ci0JZGVmID0gMDsKLQlpZiAoSVNfUUxBMjRYWF9UWVBFKGhhKSkKLQkJZGVmID0gMDsKLQllbHNlIGlmIChJU19RTEEyNVhYKGhhKSkKLQkJZGVmID0gMTsKLQllbHNlIGlmIChJU19RTEE4MVhYKGhhKSkKLQkJZGVmID0gMjsKIAloYS0+Zmx0X3JlZ2lvbl9mdyA9IGRlZl9md1tkZWZdOwogCWhhLT5mbHRfcmVnaW9uX2Jvb3QgPSBkZWZfYm9vdFtkZWZdOwogCWhhLT5mbHRfcmVnaW9uX3ZwZF9udnJhbSA9IGRlZl92cGRfbnZyYW1bZGVmXTsKQEAgLTc5MCwxNCArNzkyLDEzIEBACiAJaGEtPmZsdF9yZWdpb25fZmR0ID0gZGVmX2ZkdFtkZWZdOwogCWhhLT5mbHRfcmVnaW9uX25waXZfY29uZiA9IGhhLT5mbGFncy5wb3J0MCA/CiAJICAgIGRlZl9ucGl2X2NvbmYwW2RlZl0gOiBkZWZfbnBpdl9jb25mMVtkZWZdOwotCWhhLT5mbHRfcmVnaW9uX2ZjcF9wcmlvID0gaGEtPmZsYWdzLnBvcnQwID8KLQkgICAgZmNwX3ByaW9fY2ZnMFtkZWZdIDogZmNwX3ByaW9fY2ZnMVtkZWZdOwogZG9uZToKIAlERUJVRzIocWxhX3ByaW50ayhLRVJOX0RFQlVHLCBoYSwgIkZMVFslc106IGJvb3Q9MHgleCBmdz0weCV4ICIKIAkgICAgInZwZF9udnJhbT0weCV4IHZwZD0weCV4IG52cmFtPTB4JXggZmR0PTB4JXggZmx0PTB4JXggIgotCSAgICAibnBpdj0weCV4LlxuIiwgbG9jLCBoYS0+Zmx0X3JlZ2lvbl9ib290LCBoYS0+Zmx0X3JlZ2lvbl9mdywKLQkgICAgaGEtPmZsdF9yZWdpb25fdnBkX252cmFtLCBoYS0+Zmx0X3JlZ2lvbl92cGQsIGhhLT5mbHRfcmVnaW9uX252cmFtLAotCSAgICBoYS0+Zmx0X3JlZ2lvbl9mZHQsIGhhLT5mbHRfcmVnaW9uX2ZsdCwgaGEtPmZsdF9yZWdpb25fbnBpdl9jb25mKSk7CisJICAgICJucGl2PTB4JXguIGZjcF9wcmlvX2NmZz0weCV4XG4iLCBsb2MsIGhhLT5mbHRfcmVnaW9uX2Jvb3QsCisJICAgIGhhLT5mbHRfcmVnaW9uX2Z3LCBoYS0+Zmx0X3JlZ2lvbl92cGRfbnZyYW0sIGhhLT5mbHRfcmVnaW9uX3ZwZCwKKwkgICAgaGEtPmZsdF9yZWdpb25fbnZyYW0sIGhhLT5mbHRfcmVnaW9uX2ZkdCwgaGEtPmZsdF9yZWdpb25fZmx0LAorCSAgICBoYS0+Zmx0X3JlZ2lvbl9ucGl2X2NvbmYsIGhhLT5mbHRfcmVnaW9uX2ZjcF9wcmlvKSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yNzU4LDYgKzI3NTksMjggQEAKIAkJaGEtPmZ3X3JldmlzaW9uWzNdID0gZGNvZGVbM107CiAJfQogCisJLyogQ2hlY2sgZm9yIGdvbGRlbiBmaXJtd2FyZSBhbmQgZ2V0IHZlcnNpb24gaWYgYXZhaWxhYmxlICovCisJaWYgKCFJU19RTEE4MVhYKGhhKSkgeworCQkvKiBHb2xkZW4gZmlybXdhcmUgaXMgbm90IHByZXNlbnQgaW4gbm9uIDgxWFggYWRhcHRlcnMgKi8KKwkJcmV0dXJuIHJldDsKKwl9CisKKwltZW1zZXQoaGEtPmdvbGRfZndfdmVyc2lvbiwgMCwgc2l6ZW9mKGhhLT5nb2xkX2Z3X3ZlcnNpb24pKTsKKwlkY29kZSA9IG1idWY7CisJaGEtPmlzcF9vcHMtPnJlYWRfb3B0cm9tKHZoYSwgKHVpbnQ4X3QgKilkY29kZSwKKwkgICAgaGEtPmZsdF9yZWdpb25fZ29sZF9mdyA8PCAyLCAzMik7CisKKwlpZiAoZGNvZGVbNF0gPT0gMHhGRkZGRkZGRiAmJiBkY29kZVs1XSA9PSAweEZGRkZGRkZGICYmCisJICAgIGRjb2RlWzZdID09IDB4RkZGRkZGRkYgJiYgZGNvZGVbN10gPT0gMHhGRkZGRkZGRikgeworCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkgICAgIiVzKCVsZCk6IFVucmVjb2duaXplZCBnb2xkZW4gZncgYXQgMHgleC5cbiIsCisJCSAgICBfX2Z1bmNfXywgdmhhLT5ob3N0X25vLCBoYS0+Zmx0X3JlZ2lvbl9nb2xkX2Z3ICogNCkpOworCQlyZXR1cm4gcmV0OworCX0KKworCWZvciAoaSA9IDQ7IGkgPCA4OyBpKyspCisJCWhhLT5nb2xkX2Z3X3ZlcnNpb25baS00XSA9IGJlMzJfdG9fY3B1KGRjb2RlW2ldKTsKKwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oCmluZGV4IDEwOTA2OGQuLmU3NWNjYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaApAQCAtMSwxNSArMSwxNSBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwOCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCiAvKgogICogRHJpdmVyIHZlcnNpb24KICAqLwotI2RlZmluZSBRTEEyWFhYX1ZFUlNJT04gICAgICAiOC4wMy4wMi1rMiIKKyNkZWZpbmUgUUxBMlhYWF9WRVJTSU9OICAgICAgIjguMDMuMDMtazAiCiAKICNkZWZpbmUgUUxBX0RSSVZFUl9NQUpPUl9WRVIJOAogI2RlZmluZSBRTEFfRFJJVkVSX01JTk9SX1ZFUgkzCi0jZGVmaW5lIFFMQV9EUklWRVJfUEFUQ0hfVkVSCTIKLSNkZWZpbmUgUUxBX0RSSVZFUl9CRVRBX1ZFUgkyCisjZGVmaW5lIFFMQV9EUklWRVJfUEFUQ0hfVkVSCTMKKyNkZWZpbmUgUUxBX0RSSVZFUl9CRVRBX1ZFUgkwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9LY29uZmlnIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvS2NvbmZpZwppbmRleCA2OWNiZmYzLi4yYzMzY2U2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L0tjb25maWcKQEAgLTEsNyArMSw3IEBACiBjb25maWcgU0NTSV9RTEFfSVNDU0kKLQl0cmlzdGF0ZSAiUUxvZ2ljIElTUDRYWFggaG9zdCBhZGFwdGVyIGZhbWlseSBzdXBwb3J0IgotCWRlcGVuZHMgb24gUENJICYmIFNDU0kgJiYgTkVUCisJdHJpc3RhdGUgIlFMb2dpYyBJU1A0WFhYIGFuZCBJU1A4MlhYIGhvc3QgYWRhcHRlciBmYW1pbHkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBDSSAmJiBTQ1NJCiAJc2VsZWN0IFNDU0lfSVNDU0lfQVRUUlMKIAktLS1oZWxwLS0tCi0JVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIFFMb2dpYyA0MHh4IChJU1A0WFhYKSBpU0NTSSBob3N0Ci0JYWRhcHRlciBmYW1pbHkuCisJVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIFFMb2dpYyA0MHh4IChJU1A0WFhYKSBhbmQgODAyMiAoSVNQODJYWCkKKwlpU0NTSSBob3N0IGFkYXB0ZXIgZmFtaWx5LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvTWFrZWZpbGUgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9NYWtlZmlsZQppbmRleCA4NmVhMzdiLi4wMzM5ZmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKIHFsYTR4eHgteSA6PSBxbDRfb3MubyBxbDRfaW5pdC5vIHFsNF9tYngubyBxbDRfaW9jYi5vIHFsNF9pc3IubyBcCi0JCXFsNF9udnJhbS5vIHFsNF9kYmcubworCQlxbDRfbngubyBxbDRfbnZyYW0ubyBxbDRfZGJnLm8KIAogb2JqLSQoQ09ORklHX1NDU0lfUUxBX0lTQ1NJKSArPSBxbGE0eHh4Lm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2RlZi5oIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2RlZi5oCmluZGV4IDQyODgwMjYuLmE3OWRhOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9kZWYuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZGVmLmgKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0Lmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oPgogCisjaW5jbHVkZSAicWw0X2RiZy5oIgorI2luY2x1ZGUgInFsNF9ueC5oIgogCiAjaWZuZGVmIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDQwMTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQNDAxMAkweDQwMTAKQEAgLTQ2LDYgKzQ4LDEwIEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDQwMzIJMHg0MDMyCiAjZW5kaWYKIAorI2lmbmRlZiBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1A4MDIyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDgwMjIJMHg4MDIyCisjZW5kaWYKKwogI2RlZmluZSBRTEFfU1VDQ0VTUwkJCTAKICNkZWZpbmUgUUxBX0VSUk9SCQkJMQogCkBAIC04NSwxNSArOTEsMjIgQEAKICNkZWZpbmUgQklUXzMwCTB4NDAwMDAwMDAKICNkZWZpbmUgQklUXzMxCTB4ODAwMDAwMDAKIAorLyoqCisgKiBNYWNyb3MgdG8gaGVscCBjb2RlLCBtYWludGFpbiwgZXRjLgorICoqLworI2RlZmluZSBxbDRfcHJpbnRrKGxldmVsLCBoYSwgZm9ybWF0LCBhcmcuLi4pIFwKKwlkZXZfcHJpbnRrKGxldmVsICwgJigoaGEpLT5wZGV2LT5kZXYpICwgZm9ybWF0ICwgIyMgYXJnKQorCisKIC8qCiAgKiBIb3N0IGFkYXB0ZXIgZGVmYXVsdCBkZWZpbml0aW9ucwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2RlZmluZSBNQVhfSEJBUwkJMTYKICNkZWZpbmUgTUFYX0JVU0VTCQkxCi0jZGVmaW5lIE1BWF9UQVJHRVRTCQkoTUFYX1BSU1RfREVWX0RCX0VOVFJJRVMgKyAgTUFYX0RFVl9EQl9FTlRSSUVTKQorI2RlZmluZSBNQVhfVEFSR0VUUwkJTUFYX0RFVl9EQl9FTlRSSUVTCiAjZGVmaW5lIE1BWF9MVU5TCQkweGZmZmYKICNkZWZpbmUgTUFYX0FFTl9FTlRSSUVTCQkyNTYgLyogc2hvdWxkIGJlID4gRVhUX0RFRl9NQVhfQUVOX1FVRVVFICovCi0jZGVmaW5lIE1BWF9EREJfRU5UUklFUwkJKE1BWF9QUlNUX0RFVl9EQl9FTlRSSUVTICsgTUFYX0RFVl9EQl9FTlRSSUVTKQorI2RlZmluZSBNQVhfRERCX0VOVFJJRVMJCU1BWF9ERVZfREJfRU5UUklFUwogI2RlZmluZSBNQVhfUERVX0VOVFJJRVMJCTMyCiAjZGVmaW5lIElOVkFMSURfRU5UUlkJCTB4RkZGRgogI2RlZmluZSBNQVhfQ01EU19UT19SSVNDCTEwMjQKQEAgLTExOCw3ICsxMzEsNyBAQAogI2RlZmluZSBEUklWRVJfTkFNRQkJCSJxbGE0eHh4IgogCiAjZGVmaW5lIE1BWF9MSU5LRURfQ01EU19QRVJfTFVOCQkzCi0jZGVmaW5lIE1BWF9SRVFTX1NFUlZJQ0VEX1BFUl9JTlRSCTE2CisjZGVmaW5lIE1BWF9SRVFTX1NFUlZJQ0VEX1BFUl9JTlRSCTEKIAogI2RlZmluZSBJU0NTSV9JUEFERFJfU0laRQkJNAkvKiBJUCBhZGRyZXNzIHNpemUgKi8KICNkZWZpbmUgSVNDU0lfQUxJQVNfU0laRQkJMzIJLyogSVNDU0kgQWxpYXMgbmFtZSBzaXplICovCkBAIC0xMzQsNyArMTQ3LDcgQEAKICNkZWZpbmUgU09GVF9SRVNFVF9UT1YJCQkzMAogI2RlZmluZSBSRVNFVF9JTlRSX1RPVgkJCTMKICNkZWZpbmUgU0VNQVBIT1JFX1RPVgkJCTEwCi0jZGVmaW5lIEFEQVBURVJfSU5JVF9UT1YJCTEyMAorI2RlZmluZSBBREFQVEVSX0lOSVRfVE9WCQkzMAogI2RlZmluZSBBREFQVEVSX1JFU0VUX1RPVgkJMTgwCiAjZGVmaW5lIEVYVEVORF9DTURfVE9WCQkJNjAKICNkZWZpbmUgV0FJVF9DTURfVE9WCQkJMzAKQEAgLTE4NCw4ICsxOTcsNiBAQAogCXVpbnQxNl90IGlvY2JfdG92OwogCXVpbnQxNl90IGlvY2JfY250OwkvKiBOdW1iZXIgb2YgdXNlZCBpb2NicyAqLwogCXVpbnQxNl90IGNjX3N0YXQ7Ci0JdV9sb25nIHJfc3RhcnQ7CQkvKiBUaW1lIHdlIHJlY2lldmUgYSBjbWQgZnJvbSBPUyAqLwotCXVfbG9uZyB1X3N0YXJ0OwkJLyogVGltZSB3aGVuIHdlIGhhbmRlZCB0aGUgY21kIHRvIEYvVyAqLwogCiAJLyogVXNlZCBmb3IgZXh0ZW5kZWQgc2Vuc2UgLyBzdGF0dXMgY29udGludWF0aW9uICovCiAJdWludDhfdCAqcmVxX3NlbnNlX3B0cjsKQEAgLTIyMSw3ICsyMzIsNiBAQAogCXVuc2lnbmVkIGxvbmcgZGV2X3NjYW5fd2FpdF90b19zdGFydF9yZWxvZ2luOwogCXVuc2lnbmVkIGxvbmcgZGV2X3NjYW5fd2FpdF90b19jb21wbGV0ZV9yZWxvZ2luOwogCi0JdWludDE2X3Qgb3NfdGFyZ2V0X2lkOwkvKiBUYXJnZXQgSUQgKi8KIAl1aW50MTZfdCBmd19kZGJfaW5kZXg7CS8qIEREQiBmaXJtd2FyZSBpbmRleCAqLwogCXVpbnQxNl90IG9wdGlvbnM7CiAJdWludDMyX3QgZndfZGRiX2RldmljZV9zdGF0ZTsgLyogRi9XIERldmljZSBTdGF0ZSAgLS0gc2VlIHFsNF9mdy5oICovCkBAIC0yODUsNiArMjk1LDY3IEBACiAjaW5jbHVkZSAicWw0X2Z3LmgiCiAjaW5jbHVkZSAicWw0X252cmFtLmgiCiAKK3N0cnVjdCBxbDgyeHhfaHdfZGF0YSB7CisJLyogT2Zmc2V0cyBmb3IgZmxhc2gvbnZyYW0gYWNjZXNzIChzZXQgdG8gfjAgaWYgbm90IHVzZWQpLiAqLworCXVpbnQzMl90IGZsYXNoX2NvbmZfb2ZmOworCXVpbnQzMl90IGZsYXNoX2RhdGFfb2ZmOworCisJdWludDMyX3QgZmR0X3dydF9kaXNhYmxlOworCXVpbnQzMl90IGZkdF9lcmFzZV9jbWQ7CisJdWludDMyX3QgZmR0X2Jsb2NrX3NpemU7CisJdWludDMyX3QgZmR0X3VucHJvdGVjdF9zZWNfY21kOworCXVpbnQzMl90IGZkdF9wcm90ZWN0X3NlY19jbWQ7CisKKwl1aW50MzJfdCBmbHRfcmVnaW9uX2ZsdDsKKwl1aW50MzJfdCBmbHRfcmVnaW9uX2ZkdDsKKwl1aW50MzJfdCBmbHRfcmVnaW9uX2Jvb3Q7CisJdWludDMyX3QgZmx0X3JlZ2lvbl9ib290bG9hZDsKKwl1aW50MzJfdCBmbHRfcmVnaW9uX2Z3OworCXVpbnQzMl90IHJlc2VydmVkOworfTsKKworc3RydWN0IHFsYTRfOHh4eF9sZWdhY3lfaW50cl9zZXQgeworCXVpbnQzMl90IGludF92ZWNfYml0OworCXVpbnQzMl90IHRndF9zdGF0dXNfcmVnOworCXVpbnQzMl90IHRndF9tYXNrX3JlZzsKKwl1aW50MzJfdCBwY2lfaW50X3JlZzsKK307CisKKy8qIE1TSS1YIFN1cHBvcnQgKi8KKworI2RlZmluZSBRTEFfTVNJWF9ERUZBVUxUCTB4MDAKKyNkZWZpbmUgUUxBX01TSVhfUlNQX1EJCTB4MDEKKworI2RlZmluZSBRTEFfTVNJWF9FTlRSSUVTCTIKKyNkZWZpbmUgUUxBX01JRFhfREVGQVVMVAkwCisjZGVmaW5lIFFMQV9NSURYX1JTUF9RCQkxCisKK3N0cnVjdCBxbDRfbXNpeF9lbnRyeSB7CisJaW50IGhhdmVfaXJxOworCXVpbnQxNl90IG1zaXhfdmVjdG9yOworCXVpbnQxNl90IG1zaXhfZW50cnk7Cit9OworCisvKgorICogSVNQIE9wZXJhdGlvbnMKKyAqLworc3RydWN0IGlzcF9vcGVyYXRpb25zIHsKKwlpbnQgKCppb3NwYWNlX2NvbmZpZykgKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSk7CisJdm9pZCAoKnBjaV9jb25maWcpIChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqKTsKKwl2b2lkICgqZGlzYWJsZV9pbnRycykgKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICopOworCXZvaWQgKCplbmFibGVfaW50cnMpIChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqKTsKKwlpbnQgKCpzdGFydF9maXJtd2FyZSkgKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICopOworCWlycXJldHVybl90ICgqaW50cl9oYW5kbGVyKSAoaW50ICwgdm9pZCAqKTsKKwl2b2lkICgqaW50ZXJydXB0X3NlcnZpY2Vfcm91dGluZSkgKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICosIHVpbnQzMl90KTsKKwlpbnQgKCpyZXNldF9jaGlwKSAoc3RydWN0IHNjc2lfcWxhX2hvc3QgKik7CisJaW50ICgqcmVzZXRfZmlybXdhcmUpIChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqKTsKKwl2b2lkICgqcXVldWVfaW9jYikgKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICopOworCXZvaWQgKCpjb21wbGV0ZV9pb2NiKSAoc3RydWN0IHNjc2lfcWxhX2hvc3QgKik7CisJdWludDE2X3QgKCpyZF9zaGR3X3JlcV9xX291dCkgKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICopOworCXVpbnQxNl90ICgqcmRfc2hkd19yc3BfcV9pbikgKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICopOworCWludCAoKmdldF9zeXNfaW5mbykgKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICopOworfTsKKwogLyoKICAqIExpbnV4IEhvc3QgQWRhcHRlciBzdHJ1Y3R1cmUKICAqLwpAQCAtMjk2LDI4ICszNjcsMzkgQEAKICNkZWZpbmUgQUZfSU5JVF9ET05FCQkJMSAvKiAweDAwMDAwMDAyICovCiAjZGVmaW5lIEFGX01CT1hfQ09NTUFORAkJCTIgLyogMHgwMDAwMDAwNCAqLwogI2RlZmluZSBBRl9NQk9YX0NPTU1BTkRfRE9ORQkJMyAvKiAweDAwMDAwMDA4ICovCisjZGVmaW5lIEFGX0RQQ19TQ0hFRFVMRUQJCTUgLyogMHgwMDAwMDAyMCAqLwogI2RlZmluZSBBRl9JTlRFUlJVUFRTX09OCQk2IC8qIDB4MDAwMDAwNDAgKi8KICNkZWZpbmUgQUZfR0VUX0NSQVNIX1JFQ09SRAkJNyAvKiAweDAwMDAwMDgwICovCiAjZGVmaW5lIEFGX0xJTktfVVAJCQk4IC8qIDB4MDAwMDAxMDAgKi8KICNkZWZpbmUgQUZfSVJRX0FUVEFDSEVECQkJMTAgLyogMHgwMDAwMDQwMCAqLwogI2RlZmluZSBBRl9ESVNBQkxFX0FDQl9DT01QTEVURQkJMTEgLyogMHgwMDAwMDgwMCAqLworI2RlZmluZSBBRl9IQkFfR09JTkdfQVdBWQkJMTIgLyogMHgwMDAwMTAwMCAqLworI2RlZmluZSBBRl9JTlR4X0VOQUJMRUQJCQkxNSAvKiAweDAwMDA4MDAwICovCisjZGVmaW5lIEFGX01TSV9FTkFCTEVECQkJMTYgLyogMHgwMDAxMDAwMCAqLworI2RlZmluZSBBRl9NU0lYX0VOQUJMRUQJCQkxNyAvKiAweDAwMDIwMDAwICovCisjZGVmaW5lIEFGX01CT1hfQ09NTUFORF9OT1BPTEwJCTE4IC8qIDB4MDAwNDAwMDAgKi8KKwogCiAJdW5zaWduZWQgbG9uZyBkcGNfZmxhZ3M7CiAKICNkZWZpbmUgRFBDX1JFU0VUX0hBCQkJMSAvKiAweDAwMDAwMDAyICovCiAjZGVmaW5lIERQQ19SRVRSWV9SRVNFVF9IQQkJMiAvKiAweDAwMDAwMDA0ICovCiAjZGVmaW5lIERQQ19SRUxPR0lOX0RFVklDRQkJMyAvKiAweDAwMDAwMDA4ICovCi0jZGVmaW5lIERQQ19SRVNFVF9IQV9ERVNUUk9ZX0REQl9MSVNUCTQgLyogMHgwMDAwMDAxMCAqLworI2RlZmluZSBEUENfUkVTRVRfSEFfRldfQ09OVEVYVAkJNCAvKiAweDAwMDAwMDEwICovCiAjZGVmaW5lIERQQ19SRVNFVF9IQV9JTlRSCQk1IC8qIDB4MDAwMDAwMjAgKi8KICNkZWZpbmUgRFBDX0lTTlNfUkVTVEFSVAkJNyAvKiAweDAwMDAwMDgwICovCiAjZGVmaW5lIERQQ19BRU4JCQkJOSAvKiAweDAwMDAwMjAwICovCiAjZGVmaW5lIERQQ19HRVRfREhDUF9JUF9BRERSCQkxNSAvKiAweDAwMDA4MDAwICovCiAjZGVmaW5lIERQQ19MSU5LX0NIQU5HRUQJCTE4IC8qIDB4MDAwNDAwMDAgKi8KKyNkZWZpbmUgRFBDX1JFU0VUX0FDVElWRQkJMjAgLyogMHgwMDA0MDAwMCAqLworI2RlZmluZSBEUENfSEFfVU5SRUNPVkVSQUJMRQkJMjEgLyogMHgwMDA4MDAwMCBJU1AtODJ4eCBvbmx5Ki8KKyNkZWZpbmUgRFBDX0hBX05FRURfUVVJRVNDRU5UCQkyMiAvKiAweDAwMTAwMDAwIElTUC04Mnh4IG9ubHkqLworCiAKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OyAvKiBwb2ludGVyIHRvIGhvc3QgZGF0YSAqLwogCXVpbnQzMl90IHRvdF9kZGJzOwogCi0JdWludDE2X3QJaW9jYl9jbnQ7CisJdWludDE2X3QgaW9jYl9jbnQ7CiAKIAkvKiBTUkIgY2FjaGUuICovCiAjZGVmaW5lIFNSQl9NSU5fUkVRCTEyOApAQCAtMzMyLDE0ICs0MTQsMTMgQEAKICNkZWZpbmUgTUlOX0lPQkFTRV9MRU4JCTB4MTAwCiAKIAl1aW50MTZfdCByZXFfcV9jb3VudDsKLQl1aW50OF90IHJzdmQxWzJdOwogCiAJdW5zaWduZWQgbG9uZyBob3N0X25vOwogCiAJLyogTlZSQU0gcmVnaXN0ZXJzICovCiAJc3RydWN0IGVlcHJvbV9kYXRhICpudnJhbTsKIAlzcGlubG9ja190IGhhcmR3YXJlX2xvY2sgX19fX2NhY2hlbGluZV9hbGlnbmVkOwotCXVpbnQzMl90ICAgZWVwcm9tX2NtZF9kYXRhOworCXVpbnQzMl90IGVlcHJvbV9jbWRfZGF0YTsKIAogCS8qIENvdW50ZXJzIGZvciBnZW5lcmFsIHN0YXRpc3RpY3MgKi8KIAl1aW50NjRfdCBpc3JfY291bnQ7CkBAIC0zNzUsNyArNDU2LDYgQEAKIAl1aW50OF90IGFsaWFzWzMyXTsKIAl1aW50OF90IG5hbWVfc3RyaW5nWzI1Nl07CiAJdWludDhfdCBoZWFydGJlYXRfaW50ZXJ2YWw7Ci0JdWludDhfdCByc3ZkOwogCiAJLyogLS0tIEZyb20gRmxhc2hTeXNJbmZvIC0tLSAqLwogCXVpbnQ4X3QgbXlfbWFjW01BQ19BRERSX0xFTl07CkBAIC00NjksNiArNTQ5LDQwIEBACiAJc3RydWN0IGluNl9hZGRyIGlwdjZfYWRkcjA7CiAJc3RydWN0IGluNl9hZGRyIGlwdjZfYWRkcjE7CiAJc3RydWN0IGluNl9hZGRyIGlwdjZfZGVmYXVsdF9yb3V0ZXJfYWRkcjsKKworCS8qIHFsYTgyeHggc3BlY2lmaWMgZmllbGRzICovCisJc3RydWN0IGRldmljZV9yZWdfODJ4eCAgX19pb21lbSAqcWxhNF84eHh4X3JlZzsgLyogQmFzZSBJL08gYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgbnhfcGNpYmFzZTsJLyogQmFzZSBJL08gYWRkcmVzcyAqLworCXVpbnQ4X3QgKm54X2RiX3JkX3B0cjsJCS8qIERvb3JiZWxsIHJlYWQgcG9pbnRlciAqLworCXVuc2lnbmVkIGxvbmcgbnhfZGJfd3JfcHRyOwkvKiBEb29yIGJlbGwgd3JpdGUgcG9pbnRlciAqLworCXVuc2lnbmVkIGxvbmcgZmlyc3RfcGFnZV9ncm91cF9zdGFydDsKKwl1bnNpZ25lZCBsb25nIGZpcnN0X3BhZ2VfZ3JvdXBfZW5kOworCisJdWludDMyX3QgY3JiX3dpbjsKKwl1aW50MzJfdCBjdXJyX3dpbmRvdzsKKwl1aW50MzJfdCBkZHJfbW5fd2luZG93OworCXVuc2lnbmVkIGxvbmcgbW5fd2luX2NyYjsKKwl1bnNpZ25lZCBsb25nIG1zX3dpbl9jcmI7CisJaW50IHFkcl9zbl93aW5kb3c7CisJcndsb2NrX3QgaHdfbG9jazsKKwl1aW50MTZfdCBmdW5jX251bTsKKwlpbnQgbGlua193aWR0aDsKKworCXN0cnVjdCBxbGE0Xzh4eHhfbGVnYWN5X2ludHJfc2V0IG54X2xlZ2FjeV9pbnRyOworCXUzMiBueF9jcmJfbWFzazsKKworCXVpbnQ4X3QgcmV2aXNpb25faWQ7CisJdWludDMyX3QgZndfaGVhcnRiZWF0X2NvdW50ZXI7CisKKwlzdHJ1Y3QgaXNwX29wZXJhdGlvbnMgKmlzcF9vcHM7CisJc3RydWN0IHFsODJ4eF9od19kYXRhIGh3OworCisJc3RydWN0IHFsNF9tc2l4X2VudHJ5IG1zaXhfZW50cmllc1tRTEFfTVNJWF9FTlRSSUVTXTsKKworCXVpbnQzMl90IG54X2Rldl9pbml0X3RpbWVvdXQ7CisJdWludDMyX3QgbnhfcmVzZXRfdGltZW91dDsKKworCXN0cnVjdCBjb21wbGV0aW9uIG1ieF9pbnRyX2NvbXA7CiB9OwogCiBzdGF0aWMgaW5saW5lIGludCBpc19pcHY0X2VuYWJsZWQoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKQpAQCAtNDk2LDYgKzYxMCwxMSBAQAogCXJldHVybiBoYS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDQwMzI7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3FsYTgwMjIoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKQoreworCXJldHVybiBoYS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDgwMjI7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGFkYXB0ZXJfdXAoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKQogewogCXJldHVybiAodGVzdF9iaXQoQUZfT05MSU5FLCAmaGEtPmZsYWdzKSAhPSAwKSAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2Z3LmggYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZncuaAppbmRleCA4NTUyMjZlLi5jOTRjOWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZncuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZncuaApAQCAtMTEsNyArMTEsNyBAQAogCiAjZGVmaW5lIE1BWF9QUlNUX0RFVl9EQl9FTlRSSUVTCQk2NAogI2RlZmluZSBNSU5fRElTQ19ERVZfREJfRU5UUlkJCU1BWF9QUlNUX0RFVl9EQl9FTlRSSUVTCi0jZGVmaW5lIE1BWF9ERVZfREJfRU5UUklFUyA1MTIKKyNkZWZpbmUgTUFYX0RFVl9EQl9FTlRSSUVTCQk1MTIKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0zNyw2ICszNywzMyBAQAogCV9fbGUzMiByc3J2ZDFbMzFdOwkvKiAweDg0LTB4RkYgKi8KIH07CiAKKy8qCisgKiBJU1AgODJ4eCBJL08gUmVnaXN0ZXIgU2V0IHN0cnVjdHVyZSBkZWZpbml0aW9ucy4KKyAqLworc3RydWN0IGRldmljZV9yZWdfODJ4eCB7CisJX19sZTMyIHJlcV9xX291dDsJLyogMHgwMDAwIChSKTogUmVxdWVzdCBRdWV1ZSBvdXQtUG9pbnRlci4gKi8KKwlfX2xlMzIgcmVzZXJ2ZTFbNjNdOwkvKiBSZXF1ZXN0IFF1ZXVlIG91dC1Qb2ludGVyLiAoNjQgKiA0KSAqLworCV9fbGUzMiByc3BfcV9pbjsJLyogMHgwMTAwIChSL1cpOiBSZXNwb25zZSBRdWV1ZSBJbi1Qb2ludGVyLiAqLworCV9fbGUzMiByZXNlcnZlMls2M107CS8qIFJlc3BvbnNlIFF1ZXVlIEluLVBvaW50ZXIuICovCisJX19sZTMyIHJzcF9xX291dDsJLyogMHgwMjAwIChSL1cpOiBSZXNwb25zZSBRdWV1ZSBPdXQtUG9pbnRlci4gKi8KKwlfX2xlMzIgcmVzZXJ2ZTNbNjNdOwkvKiBSZXNwb25zZSBRdWV1ZSBPdXQtUG9pbnRlci4gKi8KKworCV9fbGUzMiBtYWlsYm94X2luWzhdOwkvKiAweDAzMDAgKFIvVyk6IE1haWwgYm94IEluIHJlZ2lzdGVycyAqLworCV9fbGUzMiByZXNlcnZlNFsyNF07CisJX19sZTMyIGhpbnQ7CQkvKiAweDAzODAgKFIvVyk6IEhvc3QgaW50ZXJydXB0IHJlZ2lzdGVyICovCisjZGVmaW5lIEhJTlRfTUJYX0lOVF9QRU5ESU5HCUJJVF8wCisJX19sZTMyIHJlc2VydmU1WzMxXTsKKwlfX2xlMzIgbWFpbGJveF9vdXRbOF07CS8qIDB4MDQwMCAoUik6IE1haWwgYm94IE91dCByZWdpc3RlcnMgKi8KKwlfX2xlMzIgcmVzZXJ2ZTZbNTZdOworCisJX19sZTMyIGhvc3Rfc3RhdHVzOwkvKiBPZmZzZXQgMHg1MDAgKFIpOiBob3N0IHN0YXR1cyAqLworI2RlZmluZSBIU1JYX1JJU0NfTUJfSU5UCUJJVF8wICAvKiBSSVNDIHRvIEhvc3QgTWFpbGJveCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSFNSWF9SSVNDX0lPQ0JfSU5UCUJJVF8xICAvKiBSSVNDIHRvIEhvc3QgSU9DQiBpbnRlcnJ1cHQgKi8KKworCV9fbGUzMiBob3N0X2ludDsJLyogT2Zmc2V0IDB4MDUwNCAoUi9XKTogSW50ZXJydXB0IHN0YXR1cy4gKi8KKyNkZWZpbmUgSVNSWF84MlhYX1JJU0NfSU5UCUJJVF8wIC8qIFJJU0MgaW50ZXJydXB0LiAqLworfTsKKwogLyogIHJlbW90ZSByZWdpc3RlciBzZXQgKGFjY2VzcyB2aWEgUENJIG1lbW9yeSByZWFkL3dyaXRlKSAqLwogc3RydWN0IGlzcF9yZWcgewogI2RlZmluZSBNQk9YX1JFR19DT1VOVCA4CkBAIC0yMDYsNiArMjMzLDc5IEBACiAJdWludDMyX3QgQXN1aW50MzJfdDsKIH07CiAKKy8qIDgyWFggU3VwcG9ydCAgc3RhcnQgKi8KKy8qIDgyeHggRGVmYXVsdCBGTFQgQWRkcmVzc2VzICovCisjZGVmaW5lIEZBX0ZMQVNIX0xBWU9VVF9BRERSXzgyCQkweEZDNDAwCisjZGVmaW5lIEZBX0ZMQVNIX0RFU0NSX0FERFJfODIJCTB4RkMwMDAKKyNkZWZpbmUgRkFfQk9PVF9MT0FEX0FERFJfODIJCTB4MDQwMDAKKyNkZWZpbmUgRkFfQk9PVF9DT0RFX0FERFJfODIJCTB4MjAwMDAKKyNkZWZpbmUgRkFfUklTQ19DT0RFX0FERFJfODIJCTB4NDAwMDAKKyNkZWZpbmUgRkFfR09MRF9SSVNDX0NPREVfQUREUl84MgkweDgwMDAwCisKKy8qIEZsYXNoIERlc2NyaXB0aW9uIFRhYmxlICovCitzdHJ1Y3QgcWxhX2ZkdF9sYXlvdXQgeworCXVpbnQ4X3Qgc2lnWzRdOworCXVpbnQxNl90IHZlcnNpb247CisJdWludDE2X3QgbGVuOworCXVpbnQxNl90IGNoZWNrc3VtOworCXVpbnQ4X3QgdW51c2VkMVsyXTsKKwl1aW50OF90IG1vZGVsWzE2XTsKKwl1aW50MTZfdCBtYW5faWQ7CisJdWludDE2X3QgaWQ7CisJdWludDhfdCBmbGFnczsKKwl1aW50OF90IGVyYXNlX2NtZDsKKwl1aW50OF90IGFsdF9lcmFzZV9jbWQ7CisJdWludDhfdCB3cnRfZW5hYmxlX2NtZDsKKwl1aW50OF90IHdydF9lbmFibGVfYml0czsKKwl1aW50OF90IHdydF9zdHNfcmVnX2NtZDsKKwl1aW50OF90IHVucHJvdGVjdF9zZWNfY21kOworCXVpbnQ4X3QgcmVhZF9tYW5faWRfY21kOworCXVpbnQzMl90IGJsb2NrX3NpemU7CisJdWludDMyX3QgYWx0X2Jsb2NrX3NpemU7CisJdWludDMyX3QgZmxhc2hfc2l6ZTsKKwl1aW50MzJfdCB3cnRfZW5hYmxlX2RhdGE7CisJdWludDhfdCByZWFkX2lkX2FkZHJfbGVuOworCXVpbnQ4X3Qgd3J0X2Rpc2FibGVfYml0czsKKwl1aW50OF90IHJlYWRfZGV2X2lkX2xlbjsKKwl1aW50OF90IGNoaXBfZXJhc2VfY21kOworCXVpbnQxNl90IHJlYWRfdGltZW91dDsKKwl1aW50OF90IHByb3RlY3Rfc2VjX2NtZDsKKwl1aW50OF90IHVudXNlZDJbNjVdOworfTsKKworLyogRmxhc2ggTGF5b3V0IFRhYmxlICovCisKK3N0cnVjdCBxbGFfZmx0X2xvY2F0aW9uIHsKKwl1aW50OF90IHNpZ1s0XTsKKwl1aW50MTZfdCBzdGFydF9sbzsKKwl1aW50MTZfdCBzdGFydF9oaTsKKwl1aW50OF90IHZlcnNpb247CisJdWludDhfdCB1bnVzZWRbNV07CisJdWludDE2X3QgY2hlY2tzdW07Cit9OworCitzdHJ1Y3QgcWxhX2ZsdF9oZWFkZXIgeworCXVpbnQxNl90IHZlcnNpb247CisJdWludDE2X3QgbGVuZ3RoOworCXVpbnQxNl90IGNoZWNrc3VtOworCXVpbnQxNl90IHVudXNlZDsKK307CisKKy8qIDgyeHggRkxUIFJlZ2lvbnMgKi8KKyNkZWZpbmUgRkxUX1JFR19GRFQJCTB4MWEKKyNkZWZpbmUgRkxUX1JFR19GTFQJCTB4MWMKKyNkZWZpbmUgRkxUX1JFR19CT09UTE9BRF84MgkweDcyCisjZGVmaW5lIEZMVF9SRUdfRldfODIJCTB4NzQKKyNkZWZpbmUgRkxUX1JFR19HT0xEX0ZXXzgyCTB4NzUKKyNkZWZpbmUgRkxUX1JFR19CT09UX0NPREVfODIJMHg3OAorCitzdHJ1Y3QgcWxhX2ZsdF9yZWdpb24geworCXVpbnQzMl90IGNvZGU7CisJdWludDMyX3Qgc2l6ZTsKKwl1aW50MzJfdCBzdGFydDsKKwl1aW50MzJfdCBlbmQ7Cit9OworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqCQlNYWlsYm94IENvbW1hbmRzIFN0cnVjdHVyZXMgYW5kIERlZmluaXRpb25zCkBAIC0yMTUsNiArMzE1LDEwIEBACiAvKiAgTWFpbGJveCBjb21tYW5kIGRlZmluaXRpb25zICovCiAjZGVmaW5lIE1CT1hfQ01EX0FCT1VUX0ZXCQkJMHgwMDA5CiAjZGVmaW5lIE1CT1hfQ01EX1BJTkcJCQkJMHgwMDBCCisjZGVmaW5lIE1CT1hfQ01EX0VOQUJMRV9JTlRSUwkJCTB4MDAxMAorI2RlZmluZSBJTlRSX0RJU0FCTEUJCQkJMAorI2RlZmluZSBJTlRSX0VOQUJMRQkJCQkxCisjZGVmaW5lIE1CT1hfQ01EX1NUT1BfRlcJCQkweDAwMTQKICNkZWZpbmUgTUJPWF9DTURfQUJPUlRfVEFTSwkJCTB4MDAxNQogI2RlZmluZSBNQk9YX0NNRF9MVU5fUkVTRVQJCQkweDAwMTYKICNkZWZpbmUgTUJPWF9DTURfVEFSR0VUX1dBUk1fUkVTRVQJCTB4MDAxNwpAQCAtMjQzLDYgKzM0Nyw3IEBACiAjZGVmaW5lIEREQl9EU19MT0dJTl9JTl9QUk9DRVNTCQkJMHgwNwogI2RlZmluZSBNQk9YX0NNRF9HRVRfRldfU1RBVEUJCQkweDAwNjkKICNkZWZpbmUgTUJPWF9DTURfR0VUX0lOSVRfRldfQ1RSTF9CTE9DS19ERUZBVUxUUyAweDAwNkEKKyNkZWZpbmUgTUJPWF9DTURfR0VUX1NZU19JTkZPCQkJMHgwMDc4CiAjZGVmaW5lIE1CT1hfQ01EX1JFU1RPUkVfRkFDVE9SWV9ERUZBVUxUUwkweDAwODcKICNkZWZpbmUgTUJPWF9DTURfU0VUX0FDQgkJCTB4MDA4OAogI2RlZmluZSBNQk9YX0NNRF9HRVRfQUNCCQkJMHgwMDg5CkBAIC0zMTgsNiArNDIzLDE1IEBACiAjZGVmaW5lIE1CT1hfQVNUU19JUFNFQ19TWVNURU1fRkFUQUxfRVJST1IJMHg4MDIyCiAjZGVmaW5lIE1CT1hfQVNUU19TVUJORVRfU1RBVEVfQ0hBTkdFCQkweDgwMjcKIAorLyogQUNCIFN0YXRlIERlZmluZXMgKi8KKyNkZWZpbmUgQUNCX1NUQVRFX1VOQ09ORklHVVJFRAkweDAwCisjZGVmaW5lIEFDQl9TVEFURV9JTlZBTElECTB4MDEKKyNkZWZpbmUgQUNCX1NUQVRFX0FDUVVJUklORwkweDAyCisjZGVmaW5lIEFDQl9TVEFURV9URU5UQVRJVkUJMHgwMworI2RlZmluZSBBQ0JfU1RBVEVfREVQUklDQVRFRAkweDA0CisjZGVmaW5lIEFDQl9TVEFURV9WQUxJRAkJMHgwNQorI2RlZmluZSBBQ0JfU1RBVEVfRElTQUJMSU5HCTB4MDYKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIEhvc3QgQWRhcHRlciBJbml0aWFsaXphdGlvbiBDb250cm9sIEJsb2NrIChmcm9tIGhvc3QpICovCkBAIC01NTgsNiArNjcyLDIwIEBACiAJdWludDMyX3QgcmVzZXJ2ZWQxWzM5XTsgLyogMTcwLTFmZiAqLwogfTsJLyogMjAwICovCiAKK3N0cnVjdCBtYnhfc3lzX2luZm8geworCXVpbnQ4X3QgYm9hcmRfaWRfc3RyWzE2XTsJLyogS2VlcCBib2FyZCBJRCBzdHJpbmcgZmlyc3QgKi8KKwkJCQkJLyogaW4gdGhpcyBzdHJ1Y3R1cmUgZm9yIEdVSS4gKi8KKwl1aW50MTZfdCBib2FyZF9pZDsJLyogYm9hcmQgSUQgY29kZSAqLworCXVpbnQxNl90IHBoeXNfcG9ydF9jbnQ7CS8qIG51bWJlciBvZiBwaHlzaWNhbCBuZXR3b3JrIHBvcnRzICovCisJdWludDE2X3QgcG9ydF9udW07CS8qIG5ldHdvcmsgcG9ydCBmb3IgdGhpcyBQQ0kgZnVuY3Rpb24gKi8KKwkJCQkvKiAocG9ydCAwIGlzIGZpcnN0IHBvcnQpICovCisJdWludDhfdCBtYWNfYWRkcls2XTsJLyogTUFDIGFkZHJlc3MgZm9yIHRoaXMgUENJIGZ1bmN0aW9uICovCisJdWludDMyX3QgaXNjc2lfcGNpX2Z1bmNfY250OwkvKiBudW1iZXIgb2YgaVNDU0kgUENJIGZ1bmN0aW9ucyAqLworCXVpbnQzMl90IHBjaV9mdW5jOwkJLyogdGhpcyBQQ0kgZnVuY3Rpb24gKi8KKwl1bnNpZ25lZCBjaGFyIHNlcmlhbF9udW1iZXJbMTZdOwkvKiBzZXJpYWwgbnVtYmVyIHN0cmluZyAqLworCXVpbnQ4X3QgcmVzZXJ2ZWRbMTZdOworfTsKKwogc3RydWN0IGNyYXNoX3JlY29yZCB7CiAJdWludDE2X3QgZndfbWFqb3JfdmVyc2lvbjsJLyogMDAgLSAwMSAqLwogCXVpbnQxNl90IGZ3X21pbm9yX3ZlcnNpb247CS8qIDAyIC0gMDMgKi8KQEAgLTgxNCw0ICs5NDIsMTMgQEAKIAl1aW50OF90IHJlczRbMTZdOwkvKiAzMC0zRiAqLwogfTsKIAorLyoKKyAqIElTUCBxdWV1ZSAtIHJlc3BvbnNlIHF1ZXVlIGVudHJ5IGRlZmluaXRpb24uCisgKi8KK3N0cnVjdCByZXNwb25zZSB7CisJdWludDhfdCBkYXRhWzYwXTsKKwl1aW50MzJfdCBzaWduYXR1cmU7CisjZGVmaW5lIFJFU1BPTlNFX1BST0NFU1NFRAkweERFQURERUFECS8qIFNpZ25hdHVyZSAqLworfTsKKwogI2VuZGlmIC8qICBfUUxBNFhfRldfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2dsYmwuaCBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9nbGJsLmgKaW5kZXggYzQ2MzZmNi4uYzljZDVkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2dsYmwuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZ2xibC5oCkBAIC0xMCwzMSArMTAsMzIgQEAKIAogc3RydWN0IGlzY3NpX2Nsc19jb25uOwogCi12b2lkIHFsYTR4eHhfaHdfcmVzZXQoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKTsKK2ludCBxbGE0eHh4X2h3X3Jlc2V0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSk7CiBpbnQgcWw0eHh4X2xvY2tfZHJ2cl93YWl0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICphKTsKIGludCBxbGE0eHh4X3NlbmRfdGd0cyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsIGNoYXIgKmlwLCB1aW50MTZfdCBwb3J0KTsKLWludCBxbGE0eHh4X3NlbmRfY29tbWFuZF90b19pc3Aoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLCBzdHJ1Y3Qgc3JiICogc3JiKTsKLWludCBxbGE0eHh4X2luaXRpYWxpemVfYWRhcHRlcihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqIGhhLAoraW50IHFsYTR4eHhfc2VuZF9jb21tYW5kX3RvX2lzcChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsIHN0cnVjdCBzcmIgKnNyYik7CitpbnQgcWxhNHh4eF9pbml0aWFsaXplX2FkYXB0ZXIoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLAogCQkJICAgICAgIHVpbnQ4X3QgcmVuZXdfZGRiX2xpc3QpOwogaW50IHFsYTR4eHhfc29mdF9yZXNldChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpOwogaXJxcmV0dXJuX3QgcWxhNHh4eF9pbnRyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIAotdm9pZCBxbGE0eHh4X2ZyZWVfZGRiX2xpc3Qoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiBoYSk7Ci12b2lkIHFsYTR4eHhfcHJvY2Vzc19hZW4oc3RydWN0IHNjc2lfcWxhX2hvc3QgKiBoYSwgdWludDhfdCBwcm9jZXNzX2Flbik7Cit2b2lkIHFsYTR4eHhfZnJlZV9kZGJfbGlzdChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpOwordm9pZCBxbGE0eHh4X2ZyZWVfZGRiKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwgc3RydWN0IGRkYl9lbnRyeSAqZGRiX2VudHJ5KTsKK3ZvaWQgcWxhNHh4eF9wcm9jZXNzX2FlbihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsIHVpbnQ4X3QgcHJvY2Vzc19hZW4pOwogCi1pbnQgcWxhNHh4eF9nZXRfZGhjcF9pcF9hZGRyZXNzKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICogaGEpOwotaW50IHFsYTR4eHhfcmVsb2dpbl9kZXZpY2Uoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiBoYSwKLQkJCSAgIHN0cnVjdCBkZGJfZW50cnkgKiBkZGJfZW50cnkpOworaW50IHFsYTR4eHhfZ2V0X2RoY3BfaXBfYWRkcmVzcyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpOworaW50IHFsYTR4eHhfcmVsb2dpbl9kZXZpY2Uoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLAorCQkJICAgc3RydWN0IGRkYl9lbnRyeSAqZGRiX2VudHJ5KTsKIGludCBxbGE0eHh4X2Fib3J0X3Rhc2soc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLCBzdHJ1Y3Qgc3JiICpzcmIpOwotaW50IHFsYTR4eHhfcmVzZXRfbHVuKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICogaGEsIHN0cnVjdCBkZGJfZW50cnkgKiBkZGJfZW50cnksCitpbnQgcWxhNHh4eF9yZXNldF9sdW4oc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLCBzdHJ1Y3QgZGRiX2VudHJ5ICpkZGJfZW50cnksCiAJCSAgICAgIGludCBsdW4pOwotaW50IHFsYTR4eHhfcmVzZXRfdGFyZ2V0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICogaGEsCi0JCQkgc3RydWN0IGRkYl9lbnRyeSAqIGRkYl9lbnRyeSk7Ci1pbnQgcWxhNHh4eF9nZXRfZmxhc2goc3RydWN0IHNjc2lfcWxhX2hvc3QgKiBoYSwgZG1hX2FkZHJfdCBkbWFfYWRkciwKK2ludCBxbGE0eHh4X3Jlc2V0X3RhcmdldChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsCisJCQkgc3RydWN0IGRkYl9lbnRyeSAqZGRiX2VudHJ5KTsKK2ludCBxbGE0eHh4X2dldF9mbGFzaChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCiAJCSAgICAgIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuKTsKLWludCBxbGE0eHh4X2dldF9maXJtd2FyZV9zdGF0dXMoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiBoYSk7Ci1pbnQgcWxhNHh4eF9nZXRfZmlybXdhcmVfc3RhdGUoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiBoYSk7Ci1pbnQgcWxhNHh4eF9pbml0aWFsaXplX2Z3X2NiKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICogaGEpOworaW50IHFsYTR4eHhfZ2V0X2Zpcm13YXJlX3N0YXR1cyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpOworaW50IHFsYTR4eHhfZ2V0X2Zpcm13YXJlX3N0YXRlKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSk7CitpbnQgcWxhNHh4eF9pbml0aWFsaXplX2Z3X2NiKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSk7CiAKIC8qIEZJWE1FOiBHb29kbmVzcyEgIHRoaXMgcmVhbGx5IHdhbnRzIGEgc21hbGwgc3RydWN0IHRvIGhvbGQgdGhlCiAgKiBwYXJhbWV0ZXJzLiBPbiB4ODYgdGhlIGFyZ3Mgd2lsbCBnZXQgcGFzc2VkIG9uIHRoZSBzdGFjayEgKi8KQEAgLTU0LDIwICs1NSwyMCBAQAogCiB2b2lkIHFsYTR4eHhfbWFya19kZXZpY2VfbWlzc2luZyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsCiAJCQkJIHN0cnVjdCBkZGJfZW50cnkgKmRkYl9lbnRyeSk7Ci11MTYgcmRfbnZyYW1fd29yZChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqIGhhLCBpbnQgb2Zmc2V0KTsKLXZvaWQgcWxhNHh4eF9nZXRfY3Jhc2hfcmVjb3JkKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICogaGEpOwordTE2IHJkX252cmFtX3dvcmQoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLCBpbnQgb2Zmc2V0KTsKK3ZvaWQgcWxhNHh4eF9nZXRfY3Jhc2hfcmVjb3JkKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSk7CiBzdHJ1Y3QgZGRiX2VudHJ5ICpxbGE0eHh4X2FsbG9jX3Nlc3Moc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKTsKIGludCBxbGE0eHh4X2FkZF9zZXNzKHN0cnVjdCBkZGJfZW50cnkgKik7CiB2b2lkIHFsYTR4eHhfZGVzdHJveV9zZXNzKHN0cnVjdCBkZGJfZW50cnkgKmRkYl9lbnRyeSk7Ci1pbnQgcWxhNHh4eF9pc19udnJhbV9jb25maWd1cmF0aW9uX3ZhbGlkKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICogaGEpOworaW50IHFsYTR4eHhfaXNfbnZyYW1fY29uZmlndXJhdGlvbl92YWxpZChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpOwogaW50IHFsYTR4eHhfZ2V0X2Z3X3ZlcnNpb24oc3RydWN0IHNjc2lfcWxhX2hvc3QgKiBoYSk7Ci12b2lkIHFsYTR4eHhfaW50ZXJydXB0X3NlcnZpY2Vfcm91dGluZShzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqIGhhLAordm9pZCBxbGE0eHh4X2ludGVycnVwdF9zZXJ2aWNlX3JvdXRpbmUoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLAogCQkJCSAgICAgICB1aW50MzJfdCBpbnRyX3N0YXR1cyk7Ci1pbnQgcWxhNHh4eF9pbml0X3JpbmdzKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICogaGEpOwotc3RydWN0IHNyYiAqIHFsYTR4eHhfZGVsX2Zyb21fYWN0aXZlX2FycmF5KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwKLQkJCQkJdWludDMyX3QgaW5kZXgpOworaW50IHFsYTR4eHhfaW5pdF9yaW5ncyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpOwogdm9pZCBxbGE0eHh4X3NyYl9jb21wbChzdHJ1Y3Qga3JlZiAqcmVmKTsKLWludCBxbGE0eHh4X3JlaW5pdGlhbGl6ZV9kZGJfbGlzdChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqIGhhKTsKK3N0cnVjdCBzcmIgKnFsYTR4eHhfZGVsX2Zyb21fYWN0aXZlX2FycmF5KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwKKwkJdWludDMyX3QgaW5kZXgpOworaW50IHFsYTR4eHhfcmVpbml0aWFsaXplX2RkYl9saXN0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSk7CiBpbnQgcWxhNHh4eF9wcm9jZXNzX2RkYl9jaGFuZ2VkKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwgdWludDMyX3QgZndfZGRiX2luZGV4LAogCQl1aW50MzJfdCBzdGF0ZSwgdWludDMyX3QgY29ubl9lcnJvcik7CiB2b2lkIHFsYTR4eHhfZHVtcF9idWZmZXIodm9pZCAqYiwgdWludDMyX3Qgc2l6ZSk7CkBAIC03NSw4ICs3Niw2NSBAQAogCXN0cnVjdCBkZGJfZW50cnkgKmRkYl9lbnRyeSwgaW50IGx1biwgdWludDE2X3QgbXJrcl9tb2QpOwogaW50IHFsYTRfaXNfcmVsb2dpbl9hbGxvd2VkKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwgdWludDMyX3QgY29ubl9lcnIpOwogCitpbnQgcWxhNHh4eF9tYWlsYm94X2NvbW1hbmQoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLCB1aW50OF90IGluQ291bnQsCisJCXVpbnQ4X3Qgb3V0Q291bnQsIHVpbnQzMl90ICptYnhfY21kLCB1aW50MzJfdCAqbWJ4X3N0cyk7CisKK3ZvaWQgcWxhNHh4eF9xdWV1ZV9pb2NiKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSk7Cit2b2lkIHFsYTR4eHhfY29tcGxldGVfaW9jYihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpOworaW50IHFsYTR4eHhfZ2V0X3N5c19pbmZvKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSk7CitpbnQgcWxhNHh4eF9pb3NwYWNlX2NvbmZpZyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpOwordm9pZCBxbGE0eHh4X3BjaV9jb25maWcoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKTsKK2ludCBxbGE0eHh4X3N0YXJ0X2Zpcm13YXJlKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSk7CitpcnFyZXR1cm5fdCBxbGE0eHh4X2ludHJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwordWludDE2X3QgcWxhNHh4eF9yZF9zaGR3X3JlcV9xX291dChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpOwordWludDE2X3QgcWxhNHh4eF9yZF9zaGR3X3JzcF9xX2luKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSk7CitpbnQgcWxhNHh4eF9yZXF1ZXN0X2lycXMoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKTsKK3ZvaWQgcWxhNHh4eF9mcmVlX2lycXMoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKTsKK3ZvaWQgcWxhNHh4eF9wcm9jZXNzX3Jlc3BvbnNlX3F1ZXVlKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSk7Cit2b2lkIHFsYTR4eHhfd2FrZV9kcGMoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKTsKK3ZvaWQgcWxhNHh4eF9nZXRfY29ubl9ldmVudF9sb2coc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKTsKKwordm9pZCBxbGE0Xzh4eHhfcGNpX2NvbmZpZyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqKTsKK2ludCBxbGE0Xzh4eHhfaW9zcGFjZV9jb25maWcoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKTsKK2ludCBxbGE0Xzh4eHhfbG9hZF9yaXNjKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICopOworaXJxcmV0dXJuX3QgcWxhNF84eHh4X2ludHJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwordm9pZCBxbGE0Xzh4eHhfcXVldWVfaW9jYihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpOwordm9pZCBxbGE0Xzh4eHhfY29tcGxldGVfaW9jYihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpOworCitpbnQgcWxhNF84eHh4X2NyYl93aW5fbG9jayhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqKTsKK3ZvaWQgcWxhNF84eHh4X2NyYl93aW5fdW5sb2NrKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICopOworaW50IHFsYTRfOHh4eF9wY2lfZ2V0X2NyYl9hZGRyXzJNKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICosIHVsb25nICopOwordm9pZCBxbGE0Xzh4eHhfd3JfMzIoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiwgdWxvbmcsIHUzMik7CitpbnQgcWxhNF84eHh4X3JkXzMyKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICosIHVsb25nKTsKK2ludCBxbGE0Xzh4eHhfcGNpX21lbV9yZWFkXzJNKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICosIHU2NCwgdm9pZCAqLCBpbnQpOworaW50IHFsYTRfOHh4eF9wY2lfbWVtX3dyaXRlXzJNKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwgdTY0LCB2b2lkICosIGludCk7CitpbnQgcWxhNF84eHh4X2lzcF9yZXNldChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpOwordm9pZCBxbGE0Xzh4eHhfaW50ZXJydXB0X3NlcnZpY2Vfcm91dGluZShzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsCisJCXVpbnQzMl90IGludHJfc3RhdHVzKTsKK3VpbnQxNl90IHFsYTRfOHh4eF9yZF9zaGR3X3JlcV9xX291dChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpOwordWludDE2X3QgcWxhNF84eHh4X3JkX3NoZHdfcnNwX3FfaW4oc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKTsKK2ludCBxbGE0Xzh4eHhfZ2V0X3N5c19pbmZvKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSk7Cit2b2lkIHFsYTRfOHh4eF93YXRjaGRvZyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpOworaW50IHFsYTRfOHh4eF9zdG9wX2Zpcm13YXJlKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSk7CitpbnQgcWxhNF84eHh4X2dldF9mbGFzaF9pbmZvKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSk7Cit2b2lkIHFsYTRfOHh4eF9lbmFibGVfaW50cnMoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKTsKK3ZvaWQgcWxhNF84eHh4X2Rpc2FibGVfaW50cnMoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKTsKK2ludCBxbGE0Xzh4eHhfZW5hYmxlX21zaXgoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKTsKK3ZvaWQgcWxhNF84eHh4X2Rpc2FibGVfbXNpeChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpOworaXJxcmV0dXJuX3QgcWxhNF84eHh4X21zaV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CitpcnFyZXR1cm5fdCBxbGE0Xzh4eHhfZGVmYXVsdF9pbnRyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKK2lycXJldHVybl90IHFsYTRfOHh4eF9tc2l4X3JzcF9xKGludCBpcnEsIHZvaWQgKmRldl9pZCk7Cit2b2lkIHFsYTR4eHhfbWFya19hbGxfZGV2aWNlc19taXNzaW5nKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSk7Cit2b2lkIHFsYTR4eHhfZGVhZF9hZGFwdGVyX2NsZWFudXAoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKTsKK2ludCBxbGE0Xzh4eHhfaWRjX2xvY2soc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKTsKK3ZvaWQgcWxhNF84eHh4X2lkY191bmxvY2soc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKTsKK2ludCBxbGE0Xzh4eHhfZGV2aWNlX3N0YXRlX2hhbmRsZXIoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKTsKK3ZvaWQgcWxhNF84eHh4X25lZWRfcXNudF9oYW5kbGVyKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSk7Cit2b2lkIHFsYTRfOHh4eF9jbGVhcl9kcnZfYWN0aXZlKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSk7CisKIGV4dGVybiBpbnQgcWw0eGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmc7CiBleHRlcm4gaW50IHFsNHhkaXNjb3Zlcnl3YWl0OwogZXh0ZXJuIGludCBxbDR4ZG9udHJlc2V0aGJhOwotZXh0ZXJuIGludCBxbDRfbW9kX3VubG9hZDsKK2V4dGVybiBpbnQgcWw0eGVuYWJsZW1zaXg7CisKICNlbmRpZiAvKiBfUUxBNHhfR0JMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pbml0LmMgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW5pdC5jCmluZGV4IDU1MTBkZjguLjMwMDczNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2luaXQuYwpAQCAtMTEsOCArMTEsOCBAQAogI2luY2x1ZGUgInFsNF9kYmcuaCIKICNpbmNsdWRlICJxbDRfaW5saW5lLmgiCiAKLXN0YXRpYyBzdHJ1Y3QgZGRiX2VudHJ5ICogcWxhNHh4eF9hbGxvY19kZGIoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLAotCQkJCQkgICAgdWludDMyX3QgZndfZGRiX2luZGV4KTsKK3N0YXRpYyBzdHJ1Y3QgZGRiX2VudHJ5ICpxbGE0eHh4X2FsbG9jX2RkYihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsCisJCQkJCSAgIHVpbnQzMl90IGZ3X2RkYl9pbmRleCk7CiAKIHN0YXRpYyB2b2lkIHFsNHh4eF9zZXRfbWFjX251bWJlcihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCiB7CkBAIC01MSw4ICs1MSw4IEBACiAgKiBUaGlzIHJvdXRpbmUgZGVhbGxvY2F0ZXMgYW5kIHVubGlua3MgdGhlIHNwZWNpZmllZCBkZGJfZW50cnkgZnJvbSB0aGUKICAqIGFkYXB0ZXIncwogICoqLwotc3RhdGljIHZvaWQgcWxhNHh4eF9mcmVlX2RkYihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsCi0JCQkgICAgIHN0cnVjdCBkZGJfZW50cnkgKmRkYl9lbnRyeSkKK3ZvaWQgcWxhNHh4eF9mcmVlX2RkYihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsCisgICAgc3RydWN0IGRkYl9lbnRyeSAqZGRiX2VudHJ5KQogewogCS8qIFJlbW92ZSBkZXZpY2UgZW50cnkgZnJvbSBsaXN0ICovCiAJbGlzdF9kZWxfaW5pdCgmZGRiX2VudHJ5LT5saXN0KTsKQEAgLTg2LDYgKzg2LDI1IEBACiB9CiAKIC8qKgorICogcWxhNHh4eF9pbml0X3Jlc3BvbnNlX3FfZW50cmllcygpIC0gSW5pdGlhbGl6ZXMgcmVzcG9uc2UgcXVldWUgZW50cmllcy4KKyAqIEBoYTogSEEgY29udGV4dAorICoKKyAqIEJlZ2lubmluZyBvZiByZXF1ZXN0IHJpbmcgaGFzIGluaXRpYWxpemF0aW9uIGNvbnRyb2wgYmxvY2sgYWxyZWFkeSBidWlsdAorICogYnkgbnZyYW0gY29uZmlnIHJvdXRpbmUuCisgKiovCitzdGF0aWMgdm9pZCBxbGE0eHh4X2luaXRfcmVzcG9uc2VfcV9lbnRyaWVzKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK3sKKwl1aW50MTZfdCBjbnQ7CisJc3RydWN0IHJlc3BvbnNlICpwa3Q7CisKKwlwa3QgPSAoc3RydWN0IHJlc3BvbnNlICopaGEtPnJlc3BvbnNlX3B0cjsKKwlmb3IgKGNudCA9IDA7IGNudCA8IFJFU1BPTlNFX1FVRVVFX0RFUFRIOyBjbnQrKykgeworCQlwa3QtPnNpZ25hdHVyZSA9IFJFU1BPTlNFX1BST0NFU1NFRDsKKwkJcGt0Kys7CisJfQorfQorCisvKioKICAqIHFsYTR4eHhfaW5pdF9yaW5ncyAtIGluaXRpYWxpemUgaHcgcXVldWVzCiAgKiBAaGE6IHBvaW50ZXIgdG8gaG9zdCBhZGFwdGVyIHN0cnVjdHVyZS4KICAqCkBAIC0xMDksMTkgKzEyOCwzMSBAQAogCWhhLT5yZXNwb25zZV9vdXQgPSAwOwogCWhhLT5yZXNwb25zZV9wdHIgPSAmaGEtPnJlc3BvbnNlX3JpbmdbaGEtPnJlc3BvbnNlX291dF07CiAKLQkvKgotCSAqIEluaXRpYWxpemUgRE1BIFNoYWRvdyByZWdpc3RlcnMuICBUaGUgZmlybXdhcmUgaXMgcmVhbGx5IHN1cHBvc2VkIHRvCi0JICogdGFrZSBjYXJlIG9mIHRoaXMsIGJ1dCBvbiBzb21lIHVuaXByb2Nlc3NvciBzeXN0ZW1zLCB0aGUgc2hhZG93Ci0JICogcmVnaXN0ZXJzIGFyZW4ndCBjbGVhcmVkLS0gY2F1c2luZyB0aGUgaW50ZXJydXB0X2hhbmRsZXIgdG8gdGhpbmsKLQkgKiB0aGVyZSBhcmUgcmVzcG9uc2VzIHRvIGJlIHByb2Nlc3NlZCB3aGVuIHRoZXJlIGFyZW4ndC4KLQkgKi8KLQloYS0+c2hhZG93X3JlZ3MtPnJlcV9xX291dCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMCk7Ci0JaGEtPnNoYWRvd19yZWdzLT5yc3BfcV9pbiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMCk7Ci0Jd21iKCk7CisJaWYgKGlzX3FsYTgwMjIoaGEpKSB7CisJCXdyaXRlbCgwLAorCQkgICAgKHVuc2lnbmVkIGxvbmcgIF9faW9tZW0gKikmaGEtPnFsYTRfOHh4eF9yZWctPnJlcV9xX291dCk7CisJCXdyaXRlbCgwLAorCQkgICAgKHVuc2lnbmVkIGxvbmcgIF9faW9tZW0gKikmaGEtPnFsYTRfOHh4eF9yZWctPnJzcF9xX2luKTsKKwkJd3JpdGVsKDAsCisJCSAgICAodW5zaWduZWQgbG9uZyAgX19pb21lbSAqKSZoYS0+cWxhNF84eHh4X3JlZy0+cnNwX3Ffb3V0KTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBJbml0aWFsaXplIERNQSBTaGFkb3cgcmVnaXN0ZXJzLiAgVGhlIGZpcm13YXJlIGlzIHJlYWxseQorCQkgKiBzdXBwb3NlZCB0byB0YWtlIGNhcmUgb2YgdGhpcywgYnV0IG9uIHNvbWUgdW5pcHJvY2Vzc29yCisJCSAqIHN5c3RlbXMsIHRoZSBzaGFkb3cgcmVnaXN0ZXJzIGFyZW4ndCBjbGVhcmVkLS0gY2F1c2luZworCQkgKiB0aGUgaW50ZXJydXB0X2hhbmRsZXIgdG8gdGhpbmsgdGhlcmUgYXJlIHJlc3BvbnNlcyB0byBiZQorCQkgKiBwcm9jZXNzZWQgd2hlbiB0aGVyZSBhcmVuJ3QuCisJCSAqLworCQloYS0+c2hhZG93X3JlZ3MtPnJlcV9xX291dCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMCk7CisJCWhhLT5zaGFkb3dfcmVncy0+cnNwX3FfaW4gPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKDApOworCQl3bWIoKTsKIAotCXdyaXRlbCgwLCAmaGEtPnJlZy0+cmVxX3FfaW4pOwotCXdyaXRlbCgwLCAmaGEtPnJlZy0+cnNwX3Ffb3V0KTsKLQlyZWFkbCgmaGEtPnJlZy0+cnNwX3Ffb3V0KTsKKwkJd3JpdGVsKDAsICZoYS0+cmVnLT5yZXFfcV9pbik7CisJCXdyaXRlbCgwLCAmaGEtPnJlZy0+cnNwX3Ffb3V0KTsKKwkJcmVhZGwoJmhhLT5yZWctPnJzcF9xX291dCk7CisJfQorCisJcWxhNHh4eF9pbml0X3Jlc3BvbnNlX3FfZW50cmllcyhoYSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwogCkBAIC0xMjksMTEgKzE2MCwxMSBAQAogfQogCiAvKioKLSAqIHFsYTR4eHhfdmFsaWRhdGVfbWFjX2FkZHJlc3MgLSB2YWxpZGF0ZSBhZGFwdGVyIE1BQyBhZGRyZXNzKGVzKQorICogcWxhNHh4eF9nZXRfc3lzX2luZm8gLSB2YWxpZGF0ZSBhZGFwdGVyIE1BQyBhZGRyZXNzKGVzKQogICogQGhhOiBwb2ludGVyIHRvIGhvc3QgYWRhcHRlciBzdHJ1Y3R1cmUuCiAgKgogICoqLwotc3RhdGljIGludCBxbGE0eHh4X3ZhbGlkYXRlX21hY19hZGRyZXNzKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK2ludCBxbGE0eHh4X2dldF9zeXNfaW5mbyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCiB7CiAJc3RydWN0IGZsYXNoX3N5c19pbmZvICpzeXNfaW5mbzsKIAlkbWFfYWRkcl90IHN5c19pbmZvX2RtYTsKQEAgLTE0NSw3ICsxNzYsNyBAQAogCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiAlczogVW5hYmxlIHRvIGFsbG9jYXRlIGRtYSBidWZmZXIuXG4iLAogCQkJICAgICAgaGEtPmhvc3Rfbm8sIF9fZnVuY19fKSk7CiAKLQkJZ290byBleGl0X3ZhbGlkYXRlX21hY19ub19mcmVlOworCQlnb3RvIGV4aXRfZ2V0X3N5c19pbmZvX25vX2ZyZWU7CiAJfQogCW1lbXNldChzeXNfaW5mbywgMCwgc2l6ZW9mKCpzeXNfaW5mbykpOwogCkBAIC0xNTUsNyArMTg2LDcgQEAKIAkJREVCVUcyKHByaW50aygic2NzaSVsZDogJXM6IGdldF9mbGFzaCBGTEFTSF9PRkZTRVRfU1lTX0lORk8gIgogCQkJICAgICAgImZhaWxlZFxuIiwgaGEtPmhvc3Rfbm8sIF9fZnVuY19fKSk7CiAKLQkJZ290byBleGl0X3ZhbGlkYXRlX21hYzsKKwkJZ290byBleGl0X2dldF9zeXNfaW5mbzsKIAl9CiAKIAkvKiBTYXZlIE0uQS5DLiBhZGRyZXNzICYgc2VyaWFsX251bWJlciAqLwpAQCAtMTY4LDExICsxOTksMTEgQEAKIAogCXN0YXR1cyA9IFFMQV9TVUNDRVNTOwogCi0gZXhpdF92YWxpZGF0ZV9tYWM6CitleGl0X2dldF9zeXNfaW5mbzoKIAlkbWFfZnJlZV9jb2hlcmVudCgmaGEtPnBkZXYtPmRldiwgc2l6ZW9mKCpzeXNfaW5mbyksIHN5c19pbmZvLAogCQkJICBzeXNfaW5mb19kbWEpOwogCi0gZXhpdF92YWxpZGF0ZV9tYWNfbm9fZnJlZToKK2V4aXRfZ2V0X3N5c19pbmZvX25vX2ZyZWU6CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMTgzLDcgKzIxNCw3IEBACiAgKiovCiBzdGF0aWMgaW50IHFsYTR4eHhfaW5pdF9sb2NhbF9kYXRhKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKIHsKLQkvKiBJbml0aWxpemUgYWVuIHF1ZXVlICovCisJLyogSW5pdGlhbGl6ZSBhZW4gcXVldWUgKi8KIAloYS0+YWVuX3FfY291bnQgPSBNQVhfQUVOX0VOVFJJRVM7CiAKIAlyZXR1cm4gcWxhNHh4eF9nZXRfZmlybXdhcmVfc3RhdHVzKGhhKTsKQEAgLTI2Niw3ICsyOTcsNyBAQAogCXVpbnQzMl90IHRpbWVvdXRfY291bnQ7CiAJaW50IHJlYWR5ID0gMDsKIAotCURFQlVHMihkZXZfaW5mbygmaGEtPnBkZXYtPmRldiwgIldhaXRpbmcgZm9yIEZpcm13YXJlIFJlYWR5Li5cbiIpKTsKKwlERUJVRzIocWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLCAiV2FpdGluZyBmb3IgRmlybXdhcmUgUmVhZHkuLlxuIikpOwogCWZvciAodGltZW91dF9jb3VudCA9IEFEQVBURVJfSU5JVF9UT1Y7IHRpbWVvdXRfY291bnQgPiAwOwogCSAgICAgdGltZW91dF9jb3VudC0tKSB7CiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRFBDX0dFVF9ESENQX0lQX0FERFIsICZoYS0+ZHBjX2ZsYWdzKSkKQEAgLTMzOSwyOSArMzcwLDI5IEBACiAKIAkJCWlmICghcWxhNHh4eF93YWl0X2Zvcl9pcF9jb25maWcoaGEpIHx8CiAJCQkJCQkJdGltZW91dF9jb3VudCA9PSAxKSB7Ci0JCQkJREVCVUcyKGRldl9pbmZvKCZoYS0+cGRldi0+ZGV2LAotCQkJCQkJIkZpcm13YXJlIFJlYWR5Li5cbiIpKTsKKwkJCQlERUJVRzIocWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkJCSAgICAiRmlybXdhcmUgUmVhZHkuLlxuIikpOwogCQkJCS8qIFRoZSBmaXJtd2FyZSBpcyByZWFkeSB0byBwcm9jZXNzIFNDU0kKIAkJCQkgICBjb21tYW5kcy4gKi8KLQkJCQlERUJVRzIoZGV2X2luZm8oJmhhLT5wZGV2LT5kZXYsCisJCQkJREVCVUcyKHFsNF9wcmludGsoS0VSTl9JTkZPLCBoYSwKIAkJCQkJInNjc2klbGQ6ICVzOiBNRURJQSBUWVBFIgogCQkJCQkiIC0gJXNcbiIsIGhhLT5ob3N0X25vLAogCQkJCQlfX2Z1bmNfXywgKGhhLT5hZGRsX2Z3X3N0YXRlICYKIAkJCQkJRldfQUREU1RBVEVfT1BUSUNBTF9NRURJQSkKIAkJCQkJIT0gMCA/ICJPUFRJQ0FMIiA6ICJDT1BQRVIiKSk7Ci0JCQkJREVCVUcyKGRldl9pbmZvKCZoYS0+cGRldi0+ZGV2LAorCQkJCURFQlVHMihxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsCiAJCQkJCSJzY3NpJWxkOiAlczogREhDUHY0IFNUQVRFIgogCQkJCQkiIEVuYWJsZWQgJXNcbiIsIGhhLT5ob3N0X25vLAogCQkJCQkgX19mdW5jX18sIChoYS0+YWRkbF9md19zdGF0ZSAmCiAJCQkJCSBGV19BRERTVEFURV9ESENQdjRfRU5BQkxFRCkgIT0gMCA/CiAJCQkJCSJZRVMiIDogIk5PIikpOwotCQkJCURFQlVHMihkZXZfaW5mbygmaGEtPnBkZXYtPmRldiwKKwkJCQlERUJVRzIocWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLAogCQkJCQkic2NzaSVsZDogJXM6IExJTksgJXNcbiIsCiAJCQkJCWhhLT5ob3N0X25vLCBfX2Z1bmNfXywKIAkJCQkJKGhhLT5hZGRsX2Z3X3N0YXRlICYKIAkJCQkJIEZXX0FERFNUQVRFX0xJTktfVVApICE9IDAgPwogCQkJCQkiVVAiIDogIkRPV04iKSk7Ci0JCQkJREVCVUcyKGRldl9pbmZvKCZoYS0+cGRldi0+ZGV2LAorCQkJCURFQlVHMihxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsCiAJCQkJCSJzY3NpJWxkOiAlczogaVNOUyBTZXJ2aWNlICIKIAkJCQkJIlN0YXJ0ZWQgJXNcbiIsCiAJCQkJCWhhLT5ob3N0X25vLCBfX2Z1bmNfXywKQEAgLTM5OSw2ICs0MzAsNyBAQAogCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiAlczogRlcgaW5pdGlhbGl6ZWQsIGJ1dCAiCiAJCQkgICAgICAiYXV0by1kaXNjb3Zlcnkgc3RpbGwgaW4gcHJvY2Vzc1xuIiwKIAkJCSAgICAgICBoYS0+aG9zdF9ubywgX19mdW5jX18pKTsKKwkJcmVhZHkgPSAxOwogCX0KIAogCXJldHVybiByZWFkeTsKQEAgLTQxMyw3ICs0NDUsNyBAQAogewogCWludCBzdGF0dXMgPSBRTEFfRVJST1I7CiAKLQlkZXZfaW5mbygmaGEtPnBkZXYtPmRldiwgIkluaXRpYWxpemluZyBmaXJtd2FyZS4uXG4iKTsKKwlxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJJbml0aWFsaXppbmcgZmlybXdhcmUuLlxuIik7CiAJaWYgKHFsYTR4eHhfaW5pdGlhbGl6ZV9md19jYihoYSkgPT0gUUxBX0VSUk9SKSB7CiAJCURFQlVHMihwcmludGsoInNjc2klbGQ6ICVzOiBGYWlsZWQgdG8gaW5pdGlhbGl6ZSBmaXJtd2FyZSAiCiAJCQkgICAgICAiY29udHJvbCBibG9ja1xuIiwgaGEtPmhvc3Rfbm8sIF9fZnVuY19fKSk7CkBAIC00NDMsMTcgKzQ3NSwxNyBAQAogCWlmIChmd19kZGJfZW50cnkgPT0gTlVMTCkgewogCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiAlczogVW5hYmxlIHRvIGFsbG9jYXRlIGRtYSBidWZmZXIuXG4iLAogCQkJICAgICAgaGEtPmhvc3Rfbm8sIF9fZnVuY19fKSk7Ci0JCXJldHVybiBOVUxMOworCQlnb3RvIGV4aXRfZ2V0X2RkYl9lbnRyeV9ub19mcmVlOwogCX0KIAogCWlmIChxbGE0eHh4X2dldF9md2RkYl9lbnRyeShoYSwgZndfZGRiX2luZGV4LCBmd19kZGJfZW50cnksCiAJCQkJICAgIGZ3X2RkYl9lbnRyeV9kbWEsIE5VTEwsIE5VTEwsCiAJCQkJICAgICZkZXZpY2Vfc3RhdGUsIE5VTEwsIE5VTEwsIE5VTEwpID09Ci0JICAgIFFMQV9FUlJPUikgeworCQkJCSAgICBRTEFfRVJST1IpIHsKIAkJREVCVUcyKHByaW50aygic2NzaSVsZDogJXM6IGZhaWxlZCBnZXRfZGRiX2VudHJ5IGZvciAiCiAJCQkgICAgICAiZndfZGRiX2luZGV4ICVkXG4iLCBoYS0+aG9zdF9ubywgX19mdW5jX18sCiAJCQkgICAgICBmd19kZGJfaW5kZXgpKTsKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gZXhpdF9nZXRfZGRiX2VudHJ5OwogCX0KIAogCS8qIEFsbG9jYXRlIEREQiBpZiBub3QgYWxyZWFkeSBhbGxvY2F0ZWQuICovCkBAIC00NzEsNiArNTAzLDcgQEAKIAkJfQogCX0KIAorCS8qIGlmIG5vdCBmb3VuZCBhbGxvY2F0ZSBuZXcgZGRiICovCiAJaWYgKCFmb3VuZCkgewogCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiAlczogZGRiWyVkXSBub3QgZm91bmQgLSBhbGxvY2F0aW5nICIKIAkJCSAgICAgICJuZXcgZGRiXG4iLCBoYS0+aG9zdF9ubywgX19mdW5jX18sCkBAIC00NzksMTAgKzUxMiwxMSBAQAogCQlkZGJfZW50cnkgPSBxbGE0eHh4X2FsbG9jX2RkYihoYSwgZndfZGRiX2luZGV4KTsKIAl9CiAKLQkvKiBpZiBub3QgZm91bmQgYWxsb2NhdGUgbmV3IGRkYiAqLworZXhpdF9nZXRfZGRiX2VudHJ5OgogCWRtYV9mcmVlX2NvaGVyZW50KCZoYS0+cGRldi0+ZGV2LCBzaXplb2YoKmZ3X2RkYl9lbnRyeSksIGZ3X2RkYl9lbnRyeSwKIAkJCSAgZndfZGRiX2VudHJ5X2RtYSk7CiAKK2V4aXRfZ2V0X2RkYl9lbnRyeV9ub19mcmVlOgogCXJldHVybiBkZGJfZW50cnk7CiB9CiAKQEAgLTUxMCw3ICs1NDQsOCBAQAogCWlmIChkZGJfZW50cnkgPT0gTlVMTCkgewogCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiAlczogZGRiX2VudHJ5IGlzIE5VTExcbiIsIGhhLT5ob3N0X25vLAogCQkJICAgICAgX19mdW5jX18pKTsKLQkJZ290byBleGl0X3VwZGF0ZV9kZGI7CisKKwkJZ290byBleGl0X3VwZGF0ZV9kZGJfbm9fZnJlZTsKIAl9CiAKIAkvKiBNYWtlIHN1cmUgdGhlIGRtYSBidWZmZXIgaXMgdmFsaWQgKi8KQEAgLTUyMSw3ICs1NTYsNyBAQAogCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiAlczogVW5hYmxlIHRvIGFsbG9jYXRlIGRtYSBidWZmZXIuXG4iLAogCQkJICAgICAgaGEtPmhvc3Rfbm8sIF9fZnVuY19fKSk7CiAKLQkJZ290byBleGl0X3VwZGF0ZV9kZGI7CisJCWdvdG8gZXhpdF91cGRhdGVfZGRiX25vX2ZyZWU7CiAJfQogCiAJaWYgKHFsYTR4eHhfZ2V0X2Z3ZGRiX2VudHJ5KGhhLCBmd19kZGJfaW5kZXgsIGZ3X2RkYl9lbnRyeSwKQEAgLTUyOSw3ICs1NjQsNyBAQAogCQkJCSAgICAmZGRiX2VudHJ5LT5md19kZGJfZGV2aWNlX3N0YXRlLCAmY29ubl9lcnIsCiAJCQkJICAgICZkZGJfZW50cnktPnRjcF9zb3VyY2VfcG9ydF9udW0sCiAJCQkJICAgICZkZGJfZW50cnktPmNvbm5lY3Rpb25faWQpID09Ci0JICAgIFFMQV9FUlJPUikgeworCQkJCSAgICBRTEFfRVJST1IpIHsKIAkJREVCVUcyKHByaW50aygic2NzaSVsZDogJXM6IGZhaWxlZCBnZXRfZGRiX2VudHJ5IGZvciAiCiAJCQkgICAgICAiZndfZGRiX2luZGV4ICVkXG4iLCBoYS0+aG9zdF9ubywgX19mdW5jX18sCiAJCQkgICAgICBmd19kZGJfaW5kZXgpKTsKQEAgLTU1OSw2ICs1OTQsOSBAQAogCW1lbWNweSgmZGRiX2VudHJ5LT5pc2NzaV9uYW1lWzBdLCAmZndfZGRiX2VudHJ5LT5pc2NzaV9uYW1lWzBdLAogCSAgICAgICBtaW4oc2l6ZW9mKGRkYl9lbnRyeS0+aXNjc2lfbmFtZSksCiAJCSAgIHNpemVvZihmd19kZGJfZW50cnktPmlzY3NpX25hbWUpKSk7CisJbWVtY3B5KCZkZGJfZW50cnktPmlzY3NpX2FsaWFzWzBdLCAmZndfZGRiX2VudHJ5LT5pc2NzaV9hbGlhc1swXSwKKwkgICAgICAgbWluKHNpemVvZihkZGJfZW50cnktPmlzY3NpX2FsaWFzKSwKKwkJICAgc2l6ZW9mKGZ3X2RkYl9lbnRyeS0+aXNjc2lfYWxpYXMpKSk7CiAJbWVtY3B5KCZkZGJfZW50cnktPmlwX2FkZHJbMF0sICZmd19kZGJfZW50cnktPmlwX2FkZHJbMF0sCiAJICAgICAgIG1pbihzaXplb2YoZGRiX2VudHJ5LT5pcF9hZGRyKSwgc2l6ZW9mKGZ3X2RkYl9lbnRyeS0+aXBfYWRkcikpKTsKIApAQCAtNTgwLDIxICs2MTgsMTkgQEAKIAkJCW1pbihzaXplb2YoZGRiX2VudHJ5LT5saW5rX2xvY2FsX2lwdjZfYWRkciksCiAJCQlzaXplb2YoZndfZGRiX2VudHJ5LT5saW5rX2xvY2FsX2lwdjZfYWRkcikpKTsKIAotCQlERUJVRzIoZGV2X2luZm8oJmhhLT5wZGV2LT5kZXYsICIlczogRERCWyVkXSBvc0lkeCA9ICVkICIKLQkJCQkJIlN0YXRlICUwNHggQ29ubkVyciAlMDh4IElQICVwSTYgIgorCQlERUJVRzIocWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLCAiJXM6IEREQlslZF0gU3RhdGUgJTA0eCIKKwkJCQkJIiBDb25uRXJyICUwOHggSVAgJXBJNiAiCiAJCQkJCSI6JTA0ZCBcIiVzXCJcbiIsCiAJCQkJCV9fZnVuY19fLCBmd19kZGJfaW5kZXgsCi0JCQkJCWRkYl9lbnRyeS0+b3NfdGFyZ2V0X2lkLAogCQkJCQlkZGJfZW50cnktPmZ3X2RkYl9kZXZpY2Vfc3RhdGUsCiAJCQkJCWNvbm5fZXJyLCBmd19kZGJfZW50cnktPmlwX2FkZHIsCiAJCQkJCWxlMTZfdG9fY3B1KGZ3X2RkYl9lbnRyeS0+cG9ydCksCiAJCQkJCWZ3X2RkYl9lbnRyeS0+aXNjc2lfbmFtZSkpOwogCX0gZWxzZQotCQlERUJVRzIoZGV2X2luZm8oJmhhLT5wZGV2LT5kZXYsICIlczogRERCWyVkXSBvc0lkeCA9ICVkICIKLQkJCQkJIlN0YXRlICUwNHggQ29ubkVyciAlMDh4IElQICVwSTQgIgorCQlERUJVRzIocWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLCAiJXM6IEREQlslZF0gU3RhdGUgJTA0eCIKKwkJCQkJIiBDb25uRXJyICUwOHggSVAgJXBJNCAiCiAJCQkJCSI6JTA0ZCBcIiVzXCJcbiIsCiAJCQkJCV9fZnVuY19fLCBmd19kZGJfaW5kZXgsCi0JCQkJCWRkYl9lbnRyeS0+b3NfdGFyZ2V0X2lkLAogCQkJCQlkZGJfZW50cnktPmZ3X2RkYl9kZXZpY2Vfc3RhdGUsCiAJCQkJCWNvbm5fZXJyLCBmd19kZGJfZW50cnktPmlwX2FkZHIsCiAJCQkJCWxlMTZfdG9fY3B1KGZ3X2RkYl9lbnRyeS0+cG9ydCksCkBAIC02MDQsNiArNjQwLDcgQEAKIAkJZG1hX2ZyZWVfY29oZXJlbnQoJmhhLT5wZGV2LT5kZXYsIHNpemVvZigqZndfZGRiX2VudHJ5KSwKIAkJCQkgIGZ3X2RkYl9lbnRyeSwgZndfZGRiX2VudHJ5X2RtYSk7CiAKK2V4aXRfdXBkYXRlX2RkYl9ub19mcmVlOgogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTY2MCwxOCArNjk3LDE4IEBACiAJZXJyX2NvZGUgPSAoKGNvbm5fZXJyICYgMHgwMGZmMDAwMCkgPj4gMTYpOwogCWxvZ2luX3JzcF9zdHNfY2xhc3MgPSAoKGNvbm5fZXJyICYgMHgwMDAwZmYwMCkgPj4gOCk7CiAJaWYgKGVycl9jb2RlID09IDB4MWMgfHwgZXJyX2NvZGUgPT0gMHgwNikgewotCQlERUJVRzIoZGV2X2luZm8oJmhhLT5wZGV2LT5kZXYsCi0JCQkJIjogY29ubl9lcnI9MHglMDh4LCBzZW5kIHRhcmdldCBjb21wbGV0ZWQiCi0JCQkJIiBvciBhY2Nlc3MgZGVuaWVkIGZhaWx1cmVcbiIsIGNvbm5fZXJyKSk7CisJCURFQlVHMihxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCSAgICAiOiBjb25uX2Vycj0weCUwOHgsIHNlbmQgdGFyZ2V0IGNvbXBsZXRlZCIKKwkJICAgICIgb3IgYWNjZXNzIGRlbmllZCBmYWlsdXJlXG4iLCBjb25uX2VycikpOwogCQlyZWxvZ2luID0gMDsKIAl9CiAJaWYgKChlcnJfY29kZSA9PSAweDA4KSAmJiAobG9naW5fcnNwX3N0c19jbGFzcyA9PSAweDAyKSkgewogCQkvKiBMb2dpbiBSZXNwb25zZSBQRFUgcmV0dXJuZWQgYW4gZXJyb3IuCiAJCSAgIExvZ2luIFJlc3BvbnNlIFN0YXR1cyBpbiBFcnJvciBDb2RlIERldGFpbAogCQkgICBpbmRpY2F0ZXMgbG9naW4gc2hvdWxkIG5vdCBiZSByZXRyaWVkLiovCi0JCURFQlVHMihkZXZfaW5mbygmaGEtPnBkZXYtPmRldiwKLQkJCQkiOiBjb25uX2Vycj0weCUwOHgsIGRvIG5vdCByZXRyeSByZWxvZ2luXG4iLAotCQkJCWNvbm5fZXJyKSk7CisJCURFQlVHMihxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCSAgICAiOiBjb25uX2Vycj0weCUwOHgsIGRvIG5vdCByZXRyeSByZWxvZ2luXG4iLAorCQkgICAgY29ubl9lcnIpKTsKIAkJcmVsb2dpbiA9IDA7CiAJfQogCkBAIC02ODgsNyArNzI1LDcgQEAKICAqKi8KIHN0YXRpYyBpbnQgcWxhNHh4eF9idWlsZF9kZGJfbGlzdChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCiB7Ci0JaW50IHN0YXR1cyA9IFFMQV9TVUNDRVNTOworCWludCBzdGF0dXMgPSBRTEFfRVJST1I7CiAJdWludDMyX3QgZndfZGRiX2luZGV4ID0gMDsKIAl1aW50MzJfdCBuZXh0X2Z3X2RkYl9pbmRleCA9IDA7CiAJdWludDMyX3QgZGRiX3N0YXRlOwpAQCAtNzAyLDEyICs3MzksMTMgQEAKIAlmd19kZGJfZW50cnkgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmhhLT5wZGV2LT5kZXYsIHNpemVvZigqZndfZGRiX2VudHJ5KSwKIAkJCSZmd19kZGJfZW50cnlfZG1hLCBHRlBfS0VSTkVMKTsKIAlpZiAoZndfZGRiX2VudHJ5ID09IE5VTEwpIHsKLQkJREVCVUcyKGRldl9pbmZvKCZoYS0+cGRldi0+ZGV2LCAiJXM6IERNQSBhbGxvYyBmYWlsZWRcbiIsCisJCURFQlVHMihxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsICIlczogRE1BIGFsbG9jIGZhaWxlZFxuIiwKIAkJCQlfX2Z1bmNfXykpOwotCQlyZXR1cm4gUUxBX0VSUk9SOworCisJCWdvdG8gZXhpdF9idWlsZF9kZGJfbGlzdF9ub19mcmVlOwogCX0KIAotCWRldl9pbmZvKCZoYS0+cGRldi0+ZGV2LCAiSW5pdGlhbGl6aW5nIEREQnMgLi4uXG4iKTsKKwlxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJJbml0aWFsaXppbmcgRERCcyAuLi5cbiIpOwogCWZvciAoZndfZGRiX2luZGV4ID0gMDsgZndfZGRiX2luZGV4IDwgTUFYX0REQl9FTlRSSUVTOwogCSAgICAgZndfZGRiX2luZGV4ID0gbmV4dF9md19kZGJfaW5kZXgpIHsKIAkJLyogRmlyc3QsIGxldCdzIHNlZSBpZiBhIGRldmljZSBleGlzdHMgaGVyZSAqLwpAQCAtNzE5LDcgKzc1Nyw3IEBACiAJCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiAlczogZ2V0X2RkYl9lbnRyeSwgIgogCQkJCSAgICAgICJmd19kZGJfaW5kZXggJWQgZmFpbGVkIiwgaGEtPmhvc3Rfbm8sCiAJCQkJICAgICAgX19mdW5jX18sIGZ3X2RkYl9pbmRleCkpOwotCQkJcmV0dXJuIFFMQV9FUlJPUjsKKwkJCWdvdG8gZXhpdF9idWlsZF9kZGJfbGlzdDsKIAkJfQogCiAJCURFQlVHMihwcmludGsoInNjc2klbGQ6ICVzOiBHZXR0aW5nIEREQlslZF0gZGRic3RhdGU9MHgleCwgIgpAQCAtNzQ5LDcgKzc4Nyw3IEBACiAJCQkJCQkiZ2V0X2RkYl9lbnRyeSAlZCBmYWlsZWRcbiIsCiAJCQkJCQloYS0+aG9zdF9ubywKIAkJCQkJCV9fZnVuY19fLCBmd19kZGJfaW5kZXgpKTsKLQkJCQkJcmV0dXJuIFFMQV9FUlJPUjsKKwkJCQkJZ290byBleGl0X2J1aWxkX2RkYl9saXN0OwogCQkJCX0KIAkJCX0KIAkJfQpAQCAtNzY5LDcgKzgwNyw3IEBACiAJCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiAlczogVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSAiCiAJCQkJICAgICAgImZvciBkZXZpY2UgYXQgZndfZGRiX2luZGV4ICVkXG4iLAogCQkJCSAgICAgIGhhLT5ob3N0X25vLCBfX2Z1bmNfXywgZndfZGRiX2luZGV4KSk7Ci0JCQlyZXR1cm4gUUxBX0VSUk9SOworCQkJZ290byBleGl0X2J1aWxkX2RkYl9saXN0OwogCQl9CiAJCS8qIEZpbGwgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUgKi8KIAkJaWYgKHFsYTR4eHhfdXBkYXRlX2RkYl9lbnRyeShoYSwgZGRiX2VudHJ5LCBmd19kZGJfaW5kZXgpID09CkBAIC03NzcsMTEgKzgxNSwxMCBAQAogCQkJaGEtPmZ3X2RkYl9pbmRleF9tYXBbZndfZGRiX2luZGV4XSA9CiAJCQkJKHN0cnVjdCBkZGJfZW50cnkgKilJTlZBTElEX0VOVFJZOwogCi0KIAkJCURFQlVHMihwcmludGsoInNjc2klbGQ6ICVzOiB1cGRhdGVfZGRiX2VudHJ5IGZhaWxlZCAiCiAJCQkJICAgICAgImZvciBmd19kZGJfaW5kZXggJWQuXG4iLAogCQkJCSAgICAgIGhhLT5ob3N0X25vLCBfX2Z1bmNfXywgZndfZGRiX2luZGV4KSk7Ci0JCQlyZXR1cm4gUUxBX0VSUk9SOworCQkJZ290byBleGl0X2J1aWxkX2RkYl9saXN0OwogCQl9CiAKIG5leHRfb25lOgpAQCAtNzkxLDggKzgyOCwxNCBAQAogCQkJYnJlYWs7CiAJfQogCi0JZGV2X2luZm8oJmhhLT5wZGV2LT5kZXYsICJEREIgbGlzdCBkb25lLi5cbiIpOworCXN0YXR1cyA9IFFMQV9TVUNDRVNTOworCXFsNF9wcmludGsoS0VSTl9JTkZPLCBoYSwgIkREQiBsaXN0IGRvbmUuLlxuIik7CiAKK2V4aXRfYnVpbGRfZGRiX2xpc3Q6CisJZG1hX2ZyZWVfY29oZXJlbnQoJmhhLT5wZGV2LT5kZXYsIHNpemVvZigqZndfZGRiX2VudHJ5KSwgZndfZGRiX2VudHJ5LAorCQlmd19kZGJfZW50cnlfZG1hKTsKKworZXhpdF9idWlsZF9kZGJfbGlzdF9ub19mcmVlOgogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTk1MSw2ICs5OTQsOSBAQAogCiAJcWxhNHh4eF9mbHVzaF9BRU5TKGhhKTsKIAorCS8qIFdhaXQgZm9yIGFuIEFFTiAqLworCXFsYTR4eHhfZGV2aWNlc19yZWFkeShoYSk7CisKIAkvKgogCSAqIEZpcnN0IHBlcmZvcm0gZGV2aWNlIGRpc2NvdmVyeSBmb3IgYWN0aXZlCiAJICogZncgZGRiIGluZGV4ZXMgYW5kIGJ1aWxkCkBAIC05NTksOSArMTAwNSw2IEBACiAJaWYgKChzdGF0dXMgPSBxbGE0eHh4X2J1aWxkX2RkYl9saXN0KGhhKSkgPT0gUUxBX0VSUk9SKQogCQlyZXR1cm4gc3RhdHVzOwogCi0JLyogV2FpdCBmb3IgYW4gQUVOICovCi0JcWxhNHh4eF9kZXZpY2VzX3JlYWR5KGhhKTsKLQogCS8qCiAJICogVGFyZ2V0cyBjYW4gY29tZSBvbmxpbmUgYWZ0ZXIgdGhlIGluaXRhbCBkaXNjb3ZlcnksIHNvIHByb2Nlc3NpbmcKIAkgKiB0aGUgYWVucyBoZXJlIHdpbGwgY2F0Y2ggdGhlbS4KQEAgLTk3Myw3ICsxMDE2LDcgQEAKIH0KIAogLyoqCi0gKiBxbGE0eHh4X3VwZGF0ZV9kZGJfbGlzdCAtIHVwZGF0ZSB0aGUgZHJpdmVyIGRkYiBsaXN0CisgKiBxbGE0eHh4X3JlaW5pdGlhbGl6ZV9kZGJfbGlzdCAtIHVwZGF0ZSB0aGUgZHJpdmVyIGRkYiBsaXN0CiAgKiBAaGE6IHBvaW50ZXIgdG8gaG9zdCBhZGFwdGVyIHN0cnVjdHVyZS4KICAqCiAgKiBUaGlzIHJvdXRpbmUgb2J0YWlucyBkZXZpY2UgaW5mb3JtYXRpb24gZnJvbSB0aGUgRi9XIGRhdGFiYXNlIGFmdGVyCkBAIC05OTMsNiArMTAzNiw3IEBACiAJCQlERUJVRzIocHJpbnRrICgic2NzaSVsZDogJXM6IGRkYiBpbmRleCBbJWRdIG1hcmtlZCAiCiAJCQkJICAgICAgICJPTkxJTkVcbiIsIGhhLT5ob3N0X25vLCBfX2Z1bmNfXywKIAkJCQkgICAgICAgZGRiX2VudHJ5LT5md19kZGJfaW5kZXgpKTsKKwkJCWlzY3NpX3VuYmxvY2tfc2Vzc2lvbihkZGJfZW50cnktPnNlc3MpOwogCQl9IGVsc2UgaWYgKGF0b21pY19yZWFkKCZkZGJfZW50cnktPnN0YXRlKSA9PSBEREJfU1RBVEVfT05MSU5FKQogCQkJcWxhNHh4eF9tYXJrX2RldmljZV9taXNzaW5nKGhhLCBkZGJfZW50cnkpOwogCX0KQEAgLTEwMTYsNyArMTA2MCw3IEBACiAJCQkgICAgKHVpbnQxNl90KVJFTE9HSU5fVE9WKTsKIAlhdG9taWNfc2V0KCZkZGJfZW50cnktPnJlbG9naW5fdGltZXIsIHJlbG9naW5fdGltZXIpOwogCi0JREVCVUcyKHByaW50aygic2NzaSVsZDogUmVsb2dpbiBpbmRleCBbJWRdLiBUT1Y9JWRcbiIsIGhhLT5ob3N0X25vLAorCURFQlVHMihwcmludGsoInNjc2klbGQ6IFJlbG9naW4gZGRiIFslZF0uIFRPVj0lZFxuIiwgaGEtPmhvc3Rfbm8sCiAJCSAgICAgIGRkYl9lbnRyeS0+ZndfZGRiX2luZGV4LCByZWxvZ2luX3RpbWVyKSk7CiAKIAlxbGE0eHh4X3NldF9kZGJfZW50cnkoaGEsIGRkYl9lbnRyeS0+ZndfZGRiX2luZGV4LCAwKTsKQEAgLTEwMzksMTcgKzEwODMsMTcgQEAKIAl9CiAKIAkvKiBHZXQgRUVQUm9tIFBhcmFtZXRlcnMgZnJvbSBOVlJBTSBhbmQgdmFsaWRhdGUgKi8KLQlkZXZfaW5mbygmaGEtPnBkZXYtPmRldiwgIkNvbmZpZ3VyaW5nIE5WUkFNIC4uLlxuIik7CisJcWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLCAiQ29uZmlndXJpbmcgTlZSQU0gLi4uXG4iKTsKIAlpZiAocWxhNHh4eF9pc19udnJhbV9jb25maWd1cmF0aW9uX3ZhbGlkKGhhKSA9PSBRTEFfU1VDQ0VTUykgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIAkJZXh0SHdDb25maWcuQXN1aW50MzJfdCA9CiAJCQlyZF9udnJhbV93b3JkKGhhLCBlZXByb21fZXh0X2h3X2NvbmZfb2Zmc2V0KGhhKSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAJfSBlbHNlIHsKLQkJZGV2X3dhcm4oJmhhLT5wZGV2LT5kZXYsCi0JCQkgICAic2NzaSVsZDogJXM6IEVFUHJvbSBjaGVja3N1bSBpbnZhbGlkLiAgIgotCQkJICAgIlBsZWFzZSB1cGRhdGUgeW91ciBFRVBST01cbiIsIGhhLT5ob3N0X25vLAotCQkJICAgX19mdW5jX18pOworCQlxbDRfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCSAgICAic2NzaSVsZDogJXM6IEVFUHJvbSBjaGVja3N1bSBpbnZhbGlkLiAgIgorCQkgICAgIlBsZWFzZSB1cGRhdGUgeW91ciBFRVBST01cbiIsIGhhLT5ob3N0X25vLAorCQkgICAgX19mdW5jX18pOwogCiAJCS8qIEF0dGVtcHQgdG8gc2V0IGRlZmF1bHRzICovCiAJCWlmIChpc19xbGE0MDEwKGhhKSkKQEAgLTEwNzMsMTIgKzExMTcsMjEgQEAKIAlyZXR1cm4gUUxBX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyB2b2lkIHFsYTR4MDBfcGNpX2NvbmZpZyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCisvKioKKyAqIHFsYTRfOHh4eF9wY2lfY29uZmlnKCkgLSBTZXR1cCBJU1A4Mnh4IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycy4KKyAqIEBoYTogSEEgY29udGV4dAorICovCit2b2lkIHFsYTRfOHh4eF9wY2lfY29uZmlnKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK3sKKwlwY2lfc2V0X21hc3RlcihoYS0+cGRldik7Cit9CisKK3ZvaWQgcWxhNHh4eF9wY2lfY29uZmlnKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKIHsKIAl1aW50MTZfdCB3OwogCWludCBzdGF0dXM7CiAKLQlkZXZfaW5mbygmaGEtPnBkZXYtPmRldiwgIkNvbmZpZ3VyaW5nIFBDSSBzcGFjZS4uLlxuIik7CisJcWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLCAiQ29uZmlndXJpbmcgUENJIHNwYWNlLi4uXG4iKTsKIAogCXBjaV9zZXRfbWFzdGVyKGhhLT5wZGV2KTsKIAlzdGF0dXMgPSBwY2lfc2V0X213aShoYS0+cGRldik7CkBAIC0xMTAwLDcgKzExNTMsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdWludDMyX3QgbWJveF9zdGF0dXM7CiAKLQlkZXZfaW5mbygmaGEtPnBkZXYtPmRldiwgIlN0YXJ0aW5nIGZpcm13YXJlIC4uLlxuIik7CisJcWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLCAiU3RhcnRpbmcgZmlybXdhcmUgLi4uXG4iKTsKIAogCS8qCiAJICogU3RhcnQgZmlybXdhcmUgZnJvbSBmbGFzaCBST00KQEAgLTEyMDQsNyArMTI1Nyw3IEBACiAgKiBUaGlzIHJvdXRpbmUgcGVyZm9ybXMgdGhlIG5lY2Vzc2FyeSBzdGVwcyB0byBzdGFydCB0aGUgZmlybXdhcmUgZm9yCiAgKiB0aGUgUUxBNDAxMCBhZGFwdGVyLgogICoqLwotc3RhdGljIGludCBxbGE0eHh4X3N0YXJ0X2Zpcm13YXJlKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK2ludCBxbGE0eHh4X3N0YXJ0X2Zpcm13YXJlKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAl1aW50MzJfdCBtYm94X3N0YXR1czsKQEAgLTEyODMsNyArMTMzNiw4IEBACiAJaWYgKHNvZnRfcmVzZXQpIHsKIAkJREVCVUcocHJpbnRrKCJzY3NpJWxkOiAlczogSXNzdWUgU29mdCBSZXNldFxuIiwgaGEtPmhvc3Rfbm8sCiAJCQkgICAgIF9fZnVuY19fKSk7Ci0JCXN0YXR1cyA9IHFsYTR4eHhfc29mdF9yZXNldChoYSk7CisJCXN0YXR1cyA9IHFsYTR4eHhfc29mdF9yZXNldChoYSk7CS8qIE5PVEU6IGFjcXVpcmVzIGRydnIKKwkJCQkJCQkgKiBsb2NrIGFnYWluLCBidXQgb2sgKi8KIAkJaWYgKHN0YXR1cyA9PSBRTEFfRVJST1IpIHsKIAkJCURFQlVHKHByaW50aygic2NzaSVkOiAlczogU29mdCBSZXNldCBmYWlsZWQhXG4iLAogCQkJCSAgICAgaGEtPmhvc3Rfbm8sIF9fZnVuY19fKSk7CkBAIC0xMzA0LDcgKzEzNTgsNiBAQAogCiAJcWw0eHh4X3VubG9ja19kcnZyKGhhKTsKIAlpZiAoc3RhdHVzID09IFFMQV9TVUNDRVNTKSB7Ci0JCXFsYTR4eHhfZ2V0X2Z3X3ZlcnNpb24oaGEpOwogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFGX0dFVF9DUkFTSF9SRUNPUkQsICZoYS0+ZmxhZ3MpKQogCQkJcWxhNHh4eF9nZXRfY3Jhc2hfcmVjb3JkKGhhKTsKIAl9IGVsc2UgewpAQCAtMTMzMSwxOCArMTM4NCwyMSBAQAogCWludCBzdGF0dXMgPSBRTEFfRVJST1I7CiAJaW50OF90IGlwX2FkZHJlc3NbSVBfQUREUl9MRU5dID0gezB9IDsKIAotCWNsZWFyX2JpdChBRl9PTkxJTkUsICZoYS0+ZmxhZ3MpOwogCWhhLT5lZXByb21fY21kX2RhdGEgPSAwOwogCi0JcWxhNHgwMF9wY2lfY29uZmlnKGhhKTsKKwlxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJDb25maWd1cmluZyBQQ0kgc3BhY2UuLi5cbiIpOworCWhhLT5pc3Bfb3BzLT5wY2lfY29uZmlnKGhhKTsKIAotCXFsYTR4eHhfZGlzYWJsZV9pbnRycyhoYSk7CisJaGEtPmlzcF9vcHMtPmRpc2FibGVfaW50cnMoaGEpOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgSG9zdCBhZGFwdGVyIHJlcXVlc3QvcmVzcG9uc2UgcXVldWVzIGFuZCBmaXJtd2FyZSAqLwotCWlmIChxbGE0eHh4X3N0YXJ0X2Zpcm13YXJlKGhhKSA9PSBRTEFfRVJST1IpCisJaWYgKGhhLT5pc3Bfb3BzLT5zdGFydF9maXJtd2FyZShoYSkgPT0gUUxBX0VSUk9SKQogCQlnb3RvIGV4aXRfaW5pdF9oYmE7CiAKLQlpZiAocWxhNHh4eF92YWxpZGF0ZV9tYWNfYWRkcmVzcyhoYSkgPT0gUUxBX0VSUk9SKQorCWlmIChxbGE0eHh4X2dldF9md192ZXJzaW9uKGhhKSA9PSBRTEFfRVJST1IpCisJCWdvdG8gZXhpdF9pbml0X2hiYTsKKworCWlmIChoYS0+aXNwX29wcy0+Z2V0X3N5c19pbmZvKGhhKSA9PSBRTEFfRVJST1IpCiAJCWdvdG8gZXhpdF9pbml0X2hiYTsKIAogCWlmIChxbGE0eHh4X2luaXRfbG9jYWxfZGF0YShoYSkgPT0gUUxBX0VSUk9SKQpAQCAtMTM5NSw2ICsxNDUxLDggQEAKIGV4aXRfaW5pdF9vbmxpbmU6CiAJc2V0X2JpdChBRl9PTkxJTkUsICZoYS0+ZmxhZ3MpOwogZXhpdF9pbml0X2hiYToKKwlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiBpbml0aWFsaXplIGFkYXB0ZXI6ICVzXG4iLCBoYS0+aG9zdF9ubywKKwkgICAgc3RhdHVzID09IFFMQV9FUlJPUiA/ICJGQUlMRUQiIDogIlNVQ0NFREVEIikpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTE0ODcsNyArMTU0NSwxMCBAQAogCQkgICAgICBkZGJfZW50cnktPmZ3X2RkYl9kZXZpY2Vfc3RhdGUsIHN0YXRlLCBmd19kZGJfaW5kZXgpKTsKIAlpZiAob2xkX2Z3X2RkYl9kZXZpY2Vfc3RhdGUgPT0gc3RhdGUgJiYKIAkgICAgc3RhdGUgPT0gRERCX0RTX1NFU1NJT05fQUNUSVZFKSB7Ci0JCS8qIERvIG5vdGhpbmcsIHN0YXRlIG5vdCBjaGFuZ2VkLiAqLworCQlpZiAoYXRvbWljX3JlYWQoJmRkYl9lbnRyeS0+c3RhdGUpICE9IEREQl9TVEFURV9PTkxJTkUpIHsKKwkJCWF0b21pY19zZXQoJmRkYl9lbnRyeS0+c3RhdGUsIEREQl9TVEFURV9PTkxJTkUpOworCQkJaXNjc2lfdW5ibG9ja19zZXNzaW9uKGRkYl9lbnRyeS0+c2Vzcyk7CisJCX0KIAkJcmV0dXJuIFFMQV9TVUNDRVNTOwogCX0KIApAQCAtMTUxMSw3ICsxNTcyLDcgQEAKIAl9IGVsc2UgewogCQkvKiBEZXZpY2Ugd2VudCBhd2F5LCBtYXJrIGRldmljZSBtaXNzaW5nICovCiAJCWlmIChhdG9taWNfcmVhZCgmZGRiX2VudHJ5LT5zdGF0ZSkgPT0gRERCX1NUQVRFX09OTElORSkgewotCQkJREVCVUcyKGRldl9pbmZvKCZoYS0+cGRldi0+ZGV2LCAiJXMgbWFyayBtaXNzaW5nICIKKwkJCURFQlVHMihxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsICIlcyBtYXJrIG1pc3NpbmcgIgogCQkJCQkiZGRiX2VudHJ5IDB4JXAgc2VzcyAweCVwIGNvbm4gMHglcFxuIiwKIAkJCQkJX19mdW5jX18sIGRkYl9lbnRyeSwKIAkJCQkJZGRiX2VudHJ5LT5zZXNzLCBkZGJfZW50cnktPmNvbm4pKTsKQEAgLTE1NDMsOSArMTYwNCwyMCBAQAogCQkJYXRvbWljX3NldCgmZGRiX2VudHJ5LT5yZWxvZ2luX3RpbWVyLCAwKTsKIAkJCWF0b21pY19zZXQoJmRkYl9lbnRyeS0+cmV0cnlfcmVsb2dpbl90aW1lciwKIAkJCQkgICBkZGJfZW50cnktPmRlZmF1bHRfdGltZTJ3YWl0ICsgNCk7CisJCQlERUJVRyhwcmludGsoInNjc2klbGQ6ICVzOiBkZGJbJWRdICIKKwkJCSAgICAiaW5pdGlhdGUgcmVsb2dpbiBhZnRlciAlZCBzZWNvbmRzXG4iLAorCQkJICAgIGhhLT5ob3N0X25vLCBfX2Z1bmNfXywKKwkJCSAgICBkZGJfZW50cnktPmZ3X2RkYl9pbmRleCwKKwkJCSAgICBkZGJfZW50cnktPmRlZmF1bHRfdGltZTJ3YWl0ICsgNCkpOworCQl9IGVsc2UgeworCQkJREVCVUcocHJpbnRrKCJzY3NpJWxkOiAlczogZGRiWyVkXSAiCisJCQkgICAgInJlbG9naW4gbm90IGluaXRpYXRlZCwgc3RhdGUgPSAlZCwgIgorCQkJICAgICJkZGJfZW50cnktPmZsYWdzID0gMHglbHhcbiIsCisJCQkgICAgaGEtPmhvc3Rfbm8sIF9fZnVuY19fLAorCQkJICAgIGRkYl9lbnRyeS0+ZndfZGRiX2luZGV4LAorCQkJICAgIGRkYl9lbnRyeS0+ZndfZGRiX2RldmljZV9zdGF0ZSwKKwkJCSAgICBkZGJfZW50cnktPmZsYWdzKSk7CiAJCX0KIAl9Ci0KIAlyZXR1cm4gUUxBX1NVQ0NFU1M7CiB9Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pbmxpbmUuaCBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pbmxpbmUuaAppbmRleCA2Mzc1ZWIwLi45NDcxYWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW5saW5lLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lubGluZS5oCkBAIC0yOSw3ICsyOSw3IEBACiAJCWRkYl9lbnRyeSA9IGhhLT5md19kZGJfaW5kZXhfbWFwW2Z3X2RkYl9pbmRleF07CiAJfQogCi0JREVCVUczKHByaW50aygic2NzaSVkOiAlczogaW5kZXggWyVkXSwgZGRiX2VudHJ5ID0gJXBcbiIsCisJREVCVUczKHByaW50aygic2NzaSVkOiAlczogZGRiIFslZF0sIGRkYl9lbnRyeSA9ICVwXG4iLAogCSAgICBoYS0+aG9zdF9ubywgX19mdW5jX18sIGZ3X2RkYl9pbmRleCwgZGRiX2VudHJ5KSk7CiAKIAlyZXR1cm4gZGRiX2VudHJ5OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lvY2IuYyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pb2NiLmMKaW5kZXggZTY2ZjNmMi4uZjg5OTczZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lvY2IuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW9jYi5jCkBAIC0xMDgsOCArMTA4LDcgQEAKIAl3bWIoKTsKIAogCS8qIFRlbGwgSVNQIGl0J3MgZ290IGEgbmV3IEkvTyByZXF1ZXN0ICovCi0Jd3JpdGVsKGhhLT5yZXF1ZXN0X2luLCAmaGEtPnJlZy0+cmVxX3FfaW4pOwotCXJlYWRsKCZoYS0+cmVnLT5yZXFfcV9pbik7CisJaGEtPmlzcF9vcHMtPnF1ZXVlX2lvY2IoaGEpOwogCiBleGl0X3NlbmRfbWFya2VyOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CkBAIC0xOTQsNiArMTkzLDcyIEBACiB9CiAKIC8qKgorICogcWxhNF84eHh4X3F1ZXVlX2lvY2IgLSBUZWxsIElTUCBpdCdzIGdvdCBuZXcgcmVxdWVzdChzKQorICogQGhhOiBwb2ludGVyIHRvIGhvc3QgYWRhcHRlciBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIG5vdGlmaWVzIHRoZSBJU1AgdGhhdCBvbmUgb3IgbW9yZSBuZXcgcmVxdWVzdAorICogcXVldWUgZW50cmllcyBoYXZlIGJlZW4gcGxhY2VkIG9uIHRoZSByZXF1ZXN0IHF1ZXVlLgorICoqLwordm9pZCBxbGE0Xzh4eHhfcXVldWVfaW9jYihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCit7CisJdWludDMyX3QgZGJ2YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgd3RpbWU7CisKKwlkYnZhbCA9IDB4MTQgfCAoaGEtPmZ1bmNfbnVtIDw8IDUpOworCWRidmFsID0gZGJ2YWwgfCAoMCA8PCA4KSB8IChoYS0+cmVxdWVzdF9pbiA8PCAxNik7CisJd3JpdGVsKGRidmFsLCAodW5zaWduZWQgbG9uZyBfX2lvbWVtICopaGEtPm54X2RiX3dyX3B0cik7CisJd21iKCk7CisKKwl3dGltZSA9IGppZmZpZXMgKyAoMiAqIEhaKTsKKwl3aGlsZSAocmVhZGwoKHZvaWQgX19pb21lbSAqKWhhLT5ueF9kYl9yZF9wdHIpICE9IGRidmFsICYmCisJICAgICF0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHd0aW1lKSkgeworCQl3cml0ZWwoZGJ2YWwsICh1bnNpZ25lZCBsb25nIF9faW9tZW0gKiloYS0+bnhfZGJfd3JfcHRyKTsKKwkJd21iKCk7CisJfQorfQorCisvKioKKyAqIHFsYTRfOHh4eF9jb21wbGV0ZV9pb2NiIC0gVGVsbCBJU1Agd2UncmUgZG9uZSB3aXRoIHJlc3BvbnNlKHMpCisgKiBAaGE6IHBvaW50ZXIgdG8gaG9zdCBhZGFwdGVyIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgbm90aWZpZXMgdGhlIElTUCB0aGF0IG9uZSBvciBtb3JlIHJlc3BvbnNlL2NvbXBsZXRpb24KKyAqIHF1ZXVlIGVudHJpZXMgaGF2ZSBiZWVuIHByb2Nlc3NlZCBieSB0aGUgZHJpdmVyLgorICogVGhpcyBhbHNvIGNsZWFycyB0aGUgaW50ZXJydXB0LgorICoqLwordm9pZCBxbGE0Xzh4eHhfY29tcGxldGVfaW9jYihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCit7CisJd3JpdGVsKGhhLT5yZXNwb25zZV9vdXQsICZoYS0+cWxhNF84eHh4X3JlZy0+cnNwX3Ffb3V0KTsKKwlyZWFkbCgmaGEtPnFsYTRfOHh4eF9yZWctPnJzcF9xX291dCk7Cit9CisKKy8qKgorICogcWxhNHh4eF9xdWV1ZV9pb2NiIC0gVGVsbCBJU1AgaXQncyBnb3QgbmV3IHJlcXVlc3QocykKKyAqIEBoYTogcG9pbnRlciB0byBob3N0IGFkYXB0ZXIgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBub3RpZmllcyB0aGUgSVNQIHRoYXQgb25lIG9yIG1vcmUgbmV3IHJlcXVlc3QKKyAqIHF1ZXVlIGVudHJpZXMgaGF2ZSBiZWVuIHBsYWNlZCBvbiB0aGUgcmVxdWVzdCBxdWV1ZS4KKyAqKi8KK3ZvaWQgcWxhNHh4eF9xdWV1ZV9pb2NiKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK3sKKwl3cml0ZWwoaGEtPnJlcXVlc3RfaW4sICZoYS0+cmVnLT5yZXFfcV9pbik7CisJcmVhZGwoJmhhLT5yZWctPnJlcV9xX2luKTsKK30KKworLyoqCisgKiBxbGE0eHh4X2NvbXBsZXRlX2lvY2IgLSBUZWxsIElTUCB3ZSdyZSBkb25lIHdpdGggcmVzcG9uc2UocykKKyAqIEBoYTogcG9pbnRlciB0byBob3N0IGFkYXB0ZXIgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBub3RpZmllcyB0aGUgSVNQIHRoYXQgb25lIG9yIG1vcmUgcmVzcG9uc2UvY29tcGxldGlvbgorICogcXVldWUgZW50cmllcyBoYXZlIGJlZW4gcHJvY2Vzc2VkIGJ5IHRoZSBkcml2ZXIuCisgKiBUaGlzIGFsc28gY2xlYXJzIHRoZSBpbnRlcnJ1cHQuCisgKiovCit2b2lkIHFsYTR4eHhfY29tcGxldGVfaW9jYihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCit7CisJd3JpdGVsKGhhLT5yZXNwb25zZV9vdXQsICZoYS0+cmVnLT5yc3BfcV9vdXQpOworCXJlYWRsKCZoYS0+cmVnLT5yc3BfcV9vdXQpOworfQorCisvKioKICAqIHFsYTR4eHhfc2VuZF9jb21tYW5kX3RvX2lzcCAtIGlzc3VlcyBjb21tYW5kIHRvIEhCQQogICogQGhhOiBwb2ludGVyIHRvIGhvc3QgYWRhcHRlciBzdHJ1Y3R1cmUuCiAgKiBAc3JiOiBwb2ludGVyIHRvIFNDU0kgUmVxdWVzdCBCbG9jayB0byBiZSBzZW50IHRvIElTUApAQCAtMzEwLDkgKzM3NSw3IEBACiAJc3JiLT5pb2NiX2NudCA9IHJlcV9jbnQ7CiAJaGEtPnJlcV9xX2NvdW50IC09IHJlcV9jbnQ7CiAKLQkvKiBEZWJ1ZyBwcmludCBzdGF0ZW1lbnRzICovCi0Jd3JpdGVsKGhhLT5yZXF1ZXN0X2luLCAmaGEtPnJlZy0+cmVxX3FfaW4pOwotCXJlYWRsKCZoYS0+cmVnLT5yZXFfcV9pbik7CisJaGEtPmlzcF9vcHMtPnF1ZXVlX2lvY2IoaGEpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gUUxBX1NVQ0NFU1M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaXNyLmMgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaXNyLmMKaW5kZXggNTk2YzMwMy4uYWE2NTY5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lzci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pc3IuYwpAQCAtMTE4LDEzICsxMTgsMTIgQEAKIAogCXNyYiA9IHFsYTR4eHhfZGVsX2Zyb21fYWN0aXZlX2FycmF5KGhhLCBsZTMyX3RvX2NwdShzdHNfZW50cnktPmhhbmRsZSkpOwogCWlmICghc3JiKSB7Ci0JCS8qIEZJWE1FZGc6IERvbid0IHdlIG5lZWQgdG8gcmVzZXQgSVNQIGluIHRoaXMgY2FzZT8/PyAqLwogCQlERUJVRzIocHJpbnRrKEtFUk5fV0FSTklORyAic2NzaSVsZDogJXM6IFN0YXR1cyBFbnRyeSBpbnZhbGlkICIKIAkJCSAgICAgICJoYW5kbGUgMHgleCwgc3A9JXAuIFRoaXMgY21kIG1heSBoYXZlIGFscmVhZHkgIgogCQkJICAgICAgImJlZW4gY29tcGxldGVkLlxuIiwgaGEtPmhvc3Rfbm8sIF9fZnVuY19fLAogCQkJICAgICAgbGUzMl90b19jcHUoc3RzX2VudHJ5LT5oYW5kbGUpLCBzcmIpKTsKLQkJZGV2X3dhcm4oJmhhLT5wZGV2LT5kZXYsICIlcyBpbnZhbGlkIHN0YXR1cyBlbnRyeToiCi0JCQkiIGhhbmRsZT0weCUweFxuIiwgX19mdW5jX18sIHN0c19lbnRyeS0+aGFuZGxlKTsKKwkJcWw0X3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAiJXMgaW52YWxpZCBzdGF0dXMgZW50cnk6IgorCQkgICAgIiBoYW5kbGU9MHglMHhcbiIsIF9fZnVuY19fLCBzdHNfZW50cnktPmhhbmRsZSk7CiAJCXNldF9iaXQoRFBDX1JFU0VUX0hBLCAmaGEtPmRwY19mbGFncyk7CiAJCXJldHVybjsKIAl9CkBAIC0xMzUsOCArMTM0LDggQEAKIAkJCSAgICAgICJPUyBwa3QtPmhhbmRsZT0lZCBzcmI9JXAgc3JiLT5zdGF0ZTolZFxuIiwKIAkJCSAgICAgIGhhLT5ob3N0X25vLCBfX2Z1bmNfXywgc3RzX2VudHJ5LT5oYW5kbGUsCiAJCQkgICAgICBzcmIsIHNyYi0+c3RhdGUpKTsKLQkJZGV2X3dhcm4oJmhhLT5wZGV2LT5kZXYsICJDb21tYW5kIGlzIE5VTEw6IgotCQkJIiBhbHJlYWR5IHJldHVybmVkIHRvIE9TIChzcmI9JXApXG4iLCBzcmIpOworCQlxbDRfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJDb21tYW5kIGlzIE5VTEw6IgorCQkgICAgIiBhbHJlYWR5IHJldHVybmVkIHRvIE9TIChzcmI9JXApXG4iLCBzcmIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yOTMsNiArMjkyLDEwIEBACiAKIAljYXNlIFNDU19ERVZJQ0VfTE9HR0VEX09VVDoKIAljYXNlIFNDU19ERVZJQ0VfVU5BVkFJTEFCTEU6CisJCURFQlVHMihwcmludGsoS0VSTl9JTkZPICJzY3NpJWxkOiVkOiVkOiVkOiBTQ1NfREVWSUNFICIKKwkJICAgICJzdGF0ZTogMHgleFxuIiwgaGEtPmhvc3Rfbm8sCisJCSAgICBjbWQtPmRldmljZS0+Y2hhbm5lbCwgY21kLT5kZXZpY2UtPmlkLAorCQkgICAgY21kLT5kZXZpY2UtPmx1biwgc3RzX2VudHJ5LT5jb21wbGV0aW9uU3RhdHVzKSk7CiAJCS8qCiAJCSAqIE1hcmsgZGV2aWNlIG1pc3Npbmcgc28gdGhhdCB3ZSB3b24ndCBjb250aW51ZSB0bwogCQkgKiBzZW5kIEkvTyB0byB0aGlzIGRldmljZS4gIFdlIHNob3VsZCBnZXQgYSBkZGIKQEAgLTMzOSwxNiArMzQyLDE0IEBACiAgKiBUaGlzIHJvdXRpbmUgcHJvY2VzcyByZXNwb25zZSBxdWV1ZSBjb21wbGV0aW9ucyBpbiBpbnRlcnJ1cHQgY29udGV4dC4KICAqIEhhcmR3YXJlX2xvY2sgbG9ja2VkIHVwb24gZW50cnkKICAqKi8KLXN0YXRpYyB2b2lkIHFsYTR4eHhfcHJvY2Vzc19yZXNwb25zZV9xdWV1ZShzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqIGhhKQordm9pZCBxbGE0eHh4X3Byb2Nlc3NfcmVzcG9uc2VfcXVldWUoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKQogewogCXVpbnQzMl90IGNvdW50ID0gMDsKIAlzdHJ1Y3Qgc3JiICpzcmIgPSBOVUxMOwogCXN0cnVjdCBzdGF0dXNfZW50cnkgKnN0c19lbnRyeTsKIAogCS8qIFByb2Nlc3MgYWxsIHJlc3BvbnNlcyBmcm9tIHJlc3BvbnNlIHF1ZXVlICovCi0Jd2hpbGUgKChoYS0+cmVzcG9uc2VfaW4gPQotCQkodWludDE2X3QpbGUzMl90b19jcHUoaGEtPnNoYWRvd19yZWdzLT5yc3BfcV9pbikpICE9Ci0JICAgICAgIGhhLT5yZXNwb25zZV9vdXQpIHsKKwl3aGlsZSAoKGhhLT5yZXNwb25zZV9wdHItPnNpZ25hdHVyZSAhPSBSRVNQT05TRV9QUk9DRVNTRUQpKSB7CiAJCXN0c19lbnRyeSA9IChzdHJ1Y3Qgc3RhdHVzX2VudHJ5ICopIGhhLT5yZXNwb25zZV9wdHI7CiAJCWNvdW50Kys7CiAKQEAgLTQxMywxNCArNDE0LDE0IEBACiAJCQkJICAgICAgc3RzX2VudHJ5LT5oZHIuZW50cnlUeXBlKSk7CiAJCQlnb3RvIGV4aXRfcHJxX2Vycm9yOwogCQl9CisJCSgoc3RydWN0IHJlc3BvbnNlICopc3RzX2VudHJ5KS0+c2lnbmF0dXJlID0gUkVTUE9OU0VfUFJPQ0VTU0VEOworCQl3bWIoKTsKIAl9CiAKIAkvKgotCSAqIERvbmUgd2l0aCByZXNwb25zZXMsIHVwZGF0ZSB0aGUgSVNQIEZvciBRTEE0MDEwLCB0aGlzIGFsc28gY2xlYXJzCi0JICogdGhlIGludGVycnVwdC4KKwkgKiBUZWxsIElTUCB3ZSdyZSBkb25lIHdpdGggcmVzcG9uc2UocykuIFRoaXMgYWxzbyBjbGVhcnMgdGhlIGludGVycnVwdC4KIAkgKi8KLQl3cml0ZWwoaGEtPnJlc3BvbnNlX291dCwgJmhhLT5yZWctPnJzcF9xX291dCk7Ci0JcmVhZGwoJmhhLT5yZWctPnJzcF9xX291dCk7CisJaGEtPmlzcF9vcHMtPmNvbXBsZXRlX2lvY2IoaGEpOwogCiAJcmV0dXJuOwogCkBAIC00MzAsOSArNDMxLDcgQEAKIAkJICAgICAgc3RzX2VudHJ5LT5jb21wbGV0aW9uU3RhdHVzKSk7CiAKIGV4aXRfcHJxX2Vycm9yOgotCXdyaXRlbChoYS0+cmVzcG9uc2Vfb3V0LCAmaGEtPnJlZy0+cnNwX3Ffb3V0KTsKLQlyZWFkbCgmaGEtPnJlZy0+cnNwX3Ffb3V0KTsKLQorCWhhLT5pc3Bfb3BzLT5jb21wbGV0ZV9pb2NiKGhhKTsKIAlzZXRfYml0KERQQ19SRVNFVF9IQSwgJmhhLT5kcGNfZmxhZ3MpOwogfQogCkBAIC00NDgsNyArNDQ3LDcgQEAKIAkJCQkgICAgICAgdWludDMyX3QgbWJveF9zdGF0dXMpCiB7CiAJaW50IGk7Ci0JdWludDMyX3QgbWJveF9zdGF0MiwgbWJveF9zdGF0MzsKKwl1aW50MzJfdCBtYm94X3N0c1tNQk9YX0FFTl9SRUdfQ09VTlRdOwogCiAJaWYgKChtYm94X3N0YXR1cyA9PSBNQk9YX1NUU19CVVNZKSB8fAogCSAgICAobWJveF9zdGF0dXMgPT0gTUJPWF9TVFNfSU5URVJNRURJQVRFX0NPTVBMRVRJT04pIHx8CkBAIC00NjAsMjcgKzQ1OSwzNyBAQAogCQkJICogQ29weSBhbGwgbWFpbGJveCByZWdpc3RlcnMgdG8gYSB0ZW1wb3JhcnkKIAkJCSAqIGxvY2F0aW9uIGFuZCBzZXQgbWFpbGJveCBjb21tYW5kIGRvbmUgZmxhZwogCQkJICovCi0JCQlmb3IgKGkgPSAxOyBpIDwgaGEtPm1ib3hfc3RhdHVzX2NvdW50OyBpKyspCi0JCQkJaGEtPm1ib3hfc3RhdHVzW2ldID0KLQkJCQkJcmVhZGwoJmhhLT5yZWctPm1haWxib3hbaV0pOworCQkJZm9yIChpID0gMDsgaSA8IGhhLT5tYm94X3N0YXR1c19jb3VudDsgaSsrKQorCQkJCWhhLT5tYm94X3N0YXR1c1tpXSA9IGlzX3FsYTgwMjIoaGEpCisJCQkJICAgID8gcmVhZGwoJmhhLT5xbGE0Xzh4eHhfcmVnLT5tYWlsYm94X291dFtpXSkKKwkJCQkgICAgOiByZWFkbCgmaGEtPnJlZy0+bWFpbGJveFtpXSk7CiAKIAkJCXNldF9iaXQoQUZfTUJPWF9DT01NQU5EX0RPTkUsICZoYS0+ZmxhZ3MpOworCisJCQlpZiAodGVzdF9iaXQoQUZfTUJPWF9DT01NQU5EX05PUE9MTCwgJmhhLT5mbGFncykpCisJCQkJY29tcGxldGUoJmhhLT5tYnhfaW50cl9jb21wKTsKIAkJfQogCX0gZWxzZSBpZiAobWJveF9zdGF0dXMgPj4gMTIgPT0gTUJPWF9BU1lOQ19FVkVOVF9TVEFUVVMpIHsKKwkJZm9yIChpID0gMDsgaSA8IE1CT1hfQUVOX1JFR19DT1VOVDsgaSsrKQorCQkJbWJveF9zdHNbaV0gPSBpc19xbGE4MDIyKGhhKQorCQkJICAgID8gcmVhZGwoJmhhLT5xbGE0Xzh4eHhfcmVnLT5tYWlsYm94X291dFtpXSkKKwkJCSAgICA6IHJlYWRsKCZoYS0+cmVnLT5tYWlsYm94W2ldKTsKKwogCQkvKiBJbW1lZGlhdGVseSBwcm9jZXNzIHRoZSBBRU5zIHRoYXQgZG9uJ3QgcmVxdWlyZSBtdWNoIHdvcmsuCiAJCSAqIE9ubHkgcXVldWUgdGhlIGRhdGFiYXNlX2NoYW5nZWQgQUVOcyAqLwogCQlpZiAoaGEtPmFlbl9sb2cuY291bnQgPCBNQVhfQUVOX0VOVFJJRVMpIHsKIAkJCWZvciAoaSA9IDA7IGkgPCBNQk9YX0FFTl9SRUdfQ09VTlQ7IGkrKykKIAkJCQloYS0+YWVuX2xvZy5lbnRyeVtoYS0+YWVuX2xvZy5jb3VudF0ubWJveF9zdHNbaV0gPQotCQkJCQlyZWFkbCgmaGEtPnJlZy0+bWFpbGJveFtpXSk7CisJCQkJICAgIG1ib3hfc3RzW2ldOwogCQkJaGEtPmFlbl9sb2cuY291bnQrKzsKIAkJfQogCQlzd2l0Y2ggKG1ib3hfc3RhdHVzKSB7CiAJCWNhc2UgTUJPWF9BU1RTX1NZU1RFTV9FUlJPUjoKIAkJCS8qIExvZyBNYWlsYm94IHJlZ2lzdGVycyAqLworCQkJcWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLCAiJXM6IFN5c3RlbSBFcnJcbiIsIF9fZnVuY19fKTsKIAkJCWlmIChxbDR4ZG9udHJlc2V0aGJhKSB7Ci0JCQkJREVCVUcyKHByaW50aygiJXM6RG9udCBSZXNldCBIQkFcbiIsCi0JCQkJCSAgICAgIF9fZnVuY19fKSk7CisJCQkJREVCVUcyKHByaW50aygic2NzaSVsZDogJXM6RG9uJ3QgUmVzZXQgSEJBXG4iLAorCQkJCSAgICBoYS0+aG9zdF9ubywgX19mdW5jX18pKTsKIAkJCX0gZWxzZSB7CiAJCQkJc2V0X2JpdChBRl9HRVRfQ1JBU0hfUkVDT1JELCAmaGEtPmZsYWdzKTsKIAkJCQlzZXRfYml0KERQQ19SRVNFVF9IQSwgJmhhLT5kcGNfZmxhZ3MpOwpAQCAtNTAyLDE4ICs1MTEsMTUgQEAKIAkJCWlmICh0ZXN0X2JpdChBRl9JTklUX0RPTkUsICZoYS0+ZmxhZ3MpKQogCQkJCXNldF9iaXQoRFBDX0xJTktfQ0hBTkdFRCwgJmhhLT5kcGNfZmxhZ3MpOwogCi0JCQlERUJVRzIocHJpbnRrKEtFUk5fSU5GTyAic2NzaSVsZDogQUVOICUwNHggQWRhcHRlciIKLQkJCQkJIiBMSU5LIFVQXG4iLCBoYS0+aG9zdF9ubywKLQkJCQkJbWJveF9zdGF0dXMpKTsKKwkJCXFsNF9wcmludGsoS0VSTl9JTkZPLCBoYSwgIiVzOiBMSU5LIFVQXG4iLCBfX2Z1bmNfXyk7CiAJCQlicmVhazsKIAogCQljYXNlIE1CT1hfQVNUU19MSU5LX0RPV046CiAJCQljbGVhcl9iaXQoQUZfTElOS19VUCwgJmhhLT5mbGFncyk7Ci0JCQlzZXRfYml0KERQQ19MSU5LX0NIQU5HRUQsICZoYS0+ZHBjX2ZsYWdzKTsKKwkJCWlmICh0ZXN0X2JpdChBRl9JTklUX0RPTkUsICZoYS0+ZmxhZ3MpKQorCQkJCXNldF9iaXQoRFBDX0xJTktfQ0hBTkdFRCwgJmhhLT5kcGNfZmxhZ3MpOwogCi0JCQlERUJVRzIocHJpbnRrKEtFUk5fSU5GTyAic2NzaSVsZDogQUVOICUwNHggQWRhcHRlciIKLQkJCQkJIiBMSU5LIERPV05cbiIsIGhhLT5ob3N0X25vLAotCQkJCQltYm94X3N0YXR1cykpOworCQkJcWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLCAiJXM6IExJTksgRE9XTlxuIiwgX19mdW5jX18pOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBNQk9YX0FTVFNfSEVBUlRCRUFUOgpAQCAtNTM5LDEyICs1NDUsMTcgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgTUJPWF9BU1RTX0lQX0FERFJfU1RBVEVfQ0hBTkdFRDoKLQkJCW1ib3hfc3RhdDIgPSByZWFkbCgmaGEtPnJlZy0+bWFpbGJveFsyXSk7Ci0JCQltYm94X3N0YXQzID0gcmVhZGwoJmhhLT5yZWctPm1haWxib3hbM10pOworCQkJcHJpbnRrKCJzY3NpJWxkOiBBRU4gJTA0eCwgbWJveF9zdHNbMl09JTA0eCwgIgorCQkJICAgICJtYm94X3N0c1szXT0lMDR4XG4iLCBoYS0+aG9zdF9ubywgbWJveF9zdHNbMF0sCisJCQkgICAgbWJveF9zdHNbMl0sIG1ib3hfc3RzWzNdKTsKIAotCQkJaWYgKChtYm94X3N0YXQzID09IDUpICYmIChtYm94X3N0YXQyID09IDMpKQorCQkJLyogbWJveF9zdHNbMl0gPSBPbGQgQUNCIHN0YXRlCisJCQkgKiBtYm94X3N0c1szXSA9IG5ldyBBQ0Igc3RhdGUgKi8KKwkJCWlmICgobWJveF9zdHNbM10gPT0gQUNCX1NUQVRFX1ZBTElEKSAmJgorCQkJICAgIChtYm94X3N0c1syXSA9PSBBQ0JfU1RBVEVfVEVOVEFUSVZFKSkKIAkJCQlzZXRfYml0KERQQ19HRVRfREhDUF9JUF9BRERSLCAmaGEtPmRwY19mbGFncyk7Ci0JCQllbHNlIGlmICgobWJveF9zdGF0MyA9PSAyKSAmJiAobWJveF9zdGF0MiA9PSA1KSkKKwkJCWVsc2UgaWYgKChtYm94X3N0c1szXSA9PSBBQ0JfU1RBVEVfQUNRVUlSSU5HKSAmJgorCQkJICAgIChtYm94X3N0c1syXSA9PSBBQ0JfU1RBVEVfVkFMSUQpKQogCQkJCXNldF9iaXQoRFBDX1JFU0VUX0hBLCAmaGEtPmRwY19mbGFncyk7CiAJCQlicmVhazsKIApAQCAtNTUzLDkgKzU2NCw4IEBACiAJCQkvKiBObyBhY3Rpb24gKi8KIAkJCURFQlVHMihwcmludGsoS0VSTl9JTkZPICJzY3NpJWxkOiBBRU4gJTA0eCwgIgogCQkJCSAgICAgICJtYm94X3N0c1sxXT0lMDR4LCBtYm94X3N0c1syXT0lMDR4XG4iLAotCQkJCSAgICAgIGhhLT5ob3N0X25vLCBtYm94X3N0YXR1cywKLQkJCQkgICAgICByZWFkbCgmaGEtPnJlZy0+bWFpbGJveFsxXSksCi0JCQkJICAgICAgcmVhZGwoJmhhLT5yZWctPm1haWxib3hbMl0pKSk7CisJCQkJICAgICAgaGEtPmhvc3Rfbm8sIG1ib3hfc3RzWzBdLAorCQkJCSAgICAgIG1ib3hfc3RzWzFdLCBtYm94X3N0c1syXSkpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBNQk9YX0FTVFNfU0VMRl9URVNUX0ZBSUxFRDoKQEAgLTU2MywxMCArNTczLDggQEAKIAkJCS8qIE5vIGFjdGlvbiAqLwogCQkJREVCVUcyKHByaW50aygic2NzaSVsZDogQUVOICUwNHgsIG1ib3hfc3RzWzFdPSUwNHgsICIKIAkJCQkgICAgICAibWJveF9zdHNbMl09JTA0eCwgbWJveF9zdHNbM109JTA0eFxuIiwKLQkJCQkgICAgICBoYS0+aG9zdF9ubywgbWJveF9zdGF0dXMsCi0JCQkJICAgICAgcmVhZGwoJmhhLT5yZWctPm1haWxib3hbMV0pLAotCQkJCSAgICAgIHJlYWRsKCZoYS0+cmVnLT5tYWlsYm94WzJdKSwKLQkJCQkgICAgICByZWFkbCgmaGEtPnJlZy0+bWFpbGJveFszXSkpKTsKKwkJCQkgICAgICBoYS0+aG9zdF9ubywgbWJveF9zdHNbMF0sIG1ib3hfc3RzWzFdLAorCQkJCSAgICAgIG1ib3hfc3RzWzJdLCBtYm94X3N0c1szXSkpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBNQk9YX0FTVFNfREFUQUJBU0VfQ0hBTkdFRDoKQEAgLTU3NywyMSArNTg1LDE3IEBACiAJCQkJLyogZGVjcmVtZW50IGF2YWlsYWJsZSBjb3VudGVyICovCiAJCQkJaGEtPmFlbl9xX2NvdW50LS07CiAKLQkJCQlmb3IgKGkgPSAxOyBpIDwgTUJPWF9BRU5fUkVHX0NPVU5UOyBpKyspCisJCQkJZm9yIChpID0gMDsgaSA8IE1CT1hfQUVOX1JFR19DT1VOVDsgaSsrKQogCQkJCQloYS0+YWVuX3FbaGEtPmFlbl9pbl0ubWJveF9zdHNbaV0gPQotCQkJCQkJcmVhZGwoJmhhLT5yZWctPm1haWxib3hbaV0pOwotCi0JCQkJaGEtPmFlbl9xW2hhLT5hZW5faW5dLm1ib3hfc3RzWzBdID0gbWJveF9zdGF0dXM7CisJCQkJCSAgICBtYm94X3N0c1tpXTsKIAogCQkJCS8qIHByaW50IGRlYnVnIG1lc3NhZ2UgKi8KIAkJCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiBBRU5bJWRdICUwNHggcXVldWVkIgotCQkJCQkgICAgICAiIG1iMToweCV4IG1iMjoweCV4IG1iMzoweCV4IG1iNDoweCV4XG4iLAotCQkJCQkgICAgICBoYS0+aG9zdF9ubywgaGEtPmFlbl9pbiwKLQkJCQkJICAgICAgbWJveF9zdGF0dXMsCi0JCQkJCSAgICAgIGhhLT5hZW5fcVtoYS0+YWVuX2luXS5tYm94X3N0c1sxXSwKLQkJCQkJICAgICAgaGEtPmFlbl9xW2hhLT5hZW5faW5dLm1ib3hfc3RzWzJdLAotCQkJCQkgICAgICBoYS0+YWVuX3FbaGEtPmFlbl9pbl0ubWJveF9zdHNbM10sCi0JCQkJCSAgICAgIGhhLT5hZW5fcVtoYS0+YWVuX2luXS4gIG1ib3hfc3RzWzRdKSk7CisJCQkJICAgICIgbWIxOjB4JXggbWIyOjB4JXggbWIzOjB4JXggbWI0OjB4JXhcbiIsCisJCQkJICAgIGhhLT5ob3N0X25vLCBoYS0+YWVuX2luLCBtYm94X3N0c1swXSwKKwkJCQkgICAgbWJveF9zdHNbMV0sIG1ib3hfc3RzWzJdLCAgbWJveF9zdHNbM10sCisJCQkJICAgIG1ib3hfc3RzWzRdKSk7CisKIAkJCQkvKiBhZHZhbmNlIHBvaW50ZXIgKi8KIAkJCQloYS0+YWVuX2luKys7CiAJCQkJaWYgKGhhLT5hZW5faW4gPT0gTUFYX0FFTl9FTlRSSUVTKQpAQCAtNjAzLDE4ICs2MDcsMTYgQEAKIAkJCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiAlczogYWVuICUwNHgsIHF1ZXVlICIKIAkJCQkJICAgICAgIm92ZXJmbG93ZWQhICBBRU4gTE9TVCEhXG4iLAogCQkJCQkgICAgICBoYS0+aG9zdF9ubywgX19mdW5jX18sCi0JCQkJCSAgICAgIG1ib3hfc3RhdHVzKSk7CisJCQkJCSAgICAgIG1ib3hfc3RzWzBdKSk7CiAKIAkJCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiBEVU1QIEFFTiBRVUVVRVxuIiwKIAkJCQkJICAgICAgaGEtPmhvc3Rfbm8pKTsKIAogCQkJCWZvciAoaSA9IDA7IGkgPCBNQVhfQUVOX0VOVFJJRVM7IGkrKykgewogCQkJCQlERUJVRzIocHJpbnRrKCJBRU5bJWRdICUwNHggJTA0eCAlMDR4ICIKLQkJCQkJCSAgICAgICIlMDR4XG4iLCBpLAotCQkJCQkJICAgICAgaGEtPmFlbl9xW2ldLm1ib3hfc3RzWzBdLAotCQkJCQkJICAgICAgaGEtPmFlbl9xW2ldLm1ib3hfc3RzWzFdLAotCQkJCQkJICAgICAgaGEtPmFlbl9xW2ldLm1ib3hfc3RzWzJdLAotCQkJCQkJICAgICAgaGEtPmFlbl9xW2ldLm1ib3hfc3RzWzNdKSk7CisJCQkJCQkgICAgICAiJTA0eFxuIiwgaSwgbWJveF9zdHNbMF0sCisJCQkJCQkgICAgICBtYm94X3N0c1sxXSwgbWJveF9zdHNbMl0sCisJCQkJCQkgICAgICBtYm94X3N0c1szXSkpOwogCQkJCX0KIAkJCX0KIAkJCWJyZWFrOwpAQCAtNjIyLDcgKzYyNCw3IEBACiAJCWRlZmF1bHQ6CiAJCQlERUJVRzIocHJpbnRrKEtFUk5fV0FSTklORwogCQkJCSAgICAgICJzY3NpJWxkOiBBRU4gJTA0eCBVTktOT1dOXG4iLAotCQkJCSAgICAgIGhhLT5ob3N0X25vLCBtYm94X3N0YXR1cykpOworCQkJCSAgICAgIGhhLT5ob3N0X25vLCBtYm94X3N0c1swXSkpOwogCQkJYnJlYWs7CiAJCX0KIAl9IGVsc2UgewpAQCAtNjM0LDYgKzYzNiwzMCBAQAogfQogCiAvKioKKyAqIHFsYTRfOHh4eF9pbnRlcnJ1cHRfc2VydmljZV9yb3V0aW5lIC0gaXNyCisgKiBAaGE6IHBvaW50ZXIgdG8gaG9zdCBhZGFwdGVyIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGlzIHRoZSBtYWluIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUuCisgKiBoYXJkd2FyZV9sb2NrIGxvY2tlZCB1cG9uIGVudHJ5LiBydW5zIGluIGludGVycnVwdCBjb250ZXh0LgorICoqLwordm9pZCBxbGE0Xzh4eHhfaW50ZXJydXB0X3NlcnZpY2Vfcm91dGluZShzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsCisgICAgdWludDMyX3QgaW50cl9zdGF0dXMpCit7CisJLyogUHJvY2VzcyByZXNwb25zZSBxdWV1ZSBpbnRlcnJ1cHQuICovCisJaWYgKGludHJfc3RhdHVzICYgSFNSWF9SSVNDX0lPQ0JfSU5UKQorCQlxbGE0eHh4X3Byb2Nlc3NfcmVzcG9uc2VfcXVldWUoaGEpOworCisJLyogUHJvY2VzcyBtYWlsYm94L2FzeW5jaCBldmVudCBpbnRlcnJ1cHQuKi8KKwlpZiAoaW50cl9zdGF0dXMgJiBIU1JYX1JJU0NfTUJfSU5UKQorCQlxbGE0eHh4X2lzcl9kZWNvZGVfbWFpbGJveChoYSwKKwkJICAgIHJlYWRsKCZoYS0+cWxhNF84eHh4X3JlZy0+bWFpbGJveF9vdXRbMF0pKTsKKworCS8qIGNsZWFyIHRoZSBpbnRlcnJ1cHQgKi8KKwl3cml0ZWwoMCwgJmhhLT5xbGE0Xzh4eHhfcmVnLT5ob3N0X2ludCk7CisJcmVhZGwoJmhhLT5xbGE0Xzh4eHhfcmVnLT5ob3N0X2ludCk7Cit9CisKKy8qKgogICogcWxhNHh4eF9pbnRlcnJ1cHRfc2VydmljZV9yb3V0aW5lIC0gaXNyCiAgKiBAaGE6IHBvaW50ZXIgdG8gaG9zdCBhZGFwdGVyIHN0cnVjdHVyZS4KICAqCkBAIC02NjAsNiArNjg2LDI4IEBACiB9CiAKIC8qKgorICogcWxhNF84eHh4X3NwdXJpb3VzX2ludGVycnVwdCAtIHByb2Nlc3NlcyBzcHVyaW91cyBpbnRlcnJ1cHQKKyAqIEBoYTogcG9pbnRlciB0byBob3N0IGFkYXB0ZXIgc3RydWN0dXJlLgorICogQHJlcXNfY291bnQ6IC4KKyAqCisgKiovCitzdGF0aWMgdm9pZCBxbGE0Xzh4eHhfc3B1cmlvdXNfaW50ZXJydXB0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwKKyAgICB1aW50OF90IHJlcXNfY291bnQpCit7CisJaWYgKHJlcXNfY291bnQpCisJCXJldHVybjsKKworCURFQlVHMihxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJTcHVyaW91cyBJbnRlcnJ1cHRcbiIpKTsKKwlpZiAoaXNfcWxhODAyMihoYSkpIHsKKwkJd3JpdGVsKDAsICZoYS0+cWxhNF84eHh4X3JlZy0+aG9zdF9pbnQpOworCQlpZiAodGVzdF9iaXQoQUZfSU5UeF9FTkFCTEVELCAmaGEtPmZsYWdzKSkKKwkJCXFsYTRfOHh4eF93cl8zMihoYSwgaGEtPm54X2xlZ2FjeV9pbnRyLnRndF9tYXNrX3JlZywKKwkJCSAgICAweGZiZmYpOworCX0KKwloYS0+c3B1cmlvdXNfaW50X2NvdW50Kys7Cit9CisKKy8qKgogICogcWxhNHh4eF9pbnRyX2hhbmRsZXIgLSBoYXJkd2FyZSBpbnRlcnJ1cHQgaGFuZGxlci4KICAqIEBpcnE6IFVudXNlZAogICogQGRldl9pZDogUG9pbnRlciB0byBob3N0IGFkYXB0ZXIgc3RydWN0dXJlCkBAIC02ODksMTUgKzczNywxNCBAQAogCQkvKgogCQkgKiBSZWFkIGludGVycnVwdCBzdGF0dXMKIAkJICovCi0JCWlmIChsZTMyX3RvX2NwdShoYS0+c2hhZG93X3JlZ3MtPnJzcF9xX2luKSAhPQorCQlpZiAoaGEtPmlzcF9vcHMtPnJkX3NoZHdfcnNwX3FfaW4oaGEpICE9CiAJCSAgICBoYS0+cmVzcG9uc2Vfb3V0KQogCQkJaW50cl9zdGF0dXMgPSBDU1JfU0NTSV9DT01QTEVUSU9OX0lOVFI7CiAJCWVsc2UKIAkJCWludHJfc3RhdHVzID0gcmVhZGwoJmhhLT5yZWctPmN0cmxfc3RhdHVzKTsKIAogCQlpZiAoKGludHJfc3RhdHVzICYKLQkJICAgICAoQ1NSX1NDU0lfUkVTRVRfSU5UUnxDU1JfRkFUQUxfRVJST1J8SU5UUl9QRU5ESU5HKSkgPT0KLQkJICAgIDApIHsKKwkJICAgIChDU1JfU0NTSV9SRVNFVF9JTlRSfENTUl9GQVRBTF9FUlJPUnxJTlRSX1BFTkRJTkcpKSA9PSAwKSB7CiAJCQlpZiAocmVxc19jb3VudCA9PSAwKQogCQkJCWhhLT5zcHVyaW91c19pbnRfY291bnQrKzsKIAkJCWJyZWFrOwpAQCAtNzM5LDE3ICs3ODYsMTUgQEAKIAkJCSAgICAgICAmaGEtPnJlZy0+Y3RybF9zdGF0dXMpOwogCQkJcmVhZGwoJmhhLT5yZWctPmN0cmxfc3RhdHVzKTsKIAotCQkJaWYgKCFxbDRfbW9kX3VubG9hZCkKKwkJCWlmICghdGVzdF9iaXQoQUZfSEJBX0dPSU5HX0FXQVksICZoYS0+ZmxhZ3MpKQogCQkJCXNldF9iaXQoRFBDX1JFU0VUX0hBX0lOVFIsICZoYS0+ZHBjX2ZsYWdzKTsKIAogCQkJYnJlYWs7CiAJCX0gZWxzZSBpZiAoaW50cl9zdGF0dXMgJiBJTlRSX1BFTkRJTkcpIHsKLQkJCXFsYTR4eHhfaW50ZXJydXB0X3NlcnZpY2Vfcm91dGluZShoYSwgaW50cl9zdGF0dXMpOworCQkJaGEtPmlzcF9vcHMtPmludGVycnVwdF9zZXJ2aWNlX3JvdXRpbmUoaGEsIGludHJfc3RhdHVzKTsKIAkJCWhhLT50b3RhbF9pb19jb3VudCsrOwogCQkJaWYgKCsrcmVxc19jb3VudCA9PSBNQVhfUkVRU19TRVJWSUNFRF9QRVJfSU5UUikKIAkJCQlicmVhazsKLQotCQkJaW50cl9zdGF0dXMgPSAwOwogCQl9CiAJfQogCkBAIC03NTksNiArODA0LDE0NSBAQAogfQogCiAvKioKKyAqIHFsYTRfOHh4eF9pbnRyX2hhbmRsZXIgLSBoYXJkd2FyZSBpbnRlcnJ1cHQgaGFuZGxlci4KKyAqIEBpcnE6IFVudXNlZAorICogQGRldl9pZDogUG9pbnRlciB0byBob3N0IGFkYXB0ZXIgc3RydWN0dXJlCisgKiovCitpcnFyZXR1cm5fdCBxbGE0Xzh4eHhfaW50cl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEgPSBkZXZfaWQ7CisJdWludDMyX3QgaW50cl9zdGF0dXM7CisJdWludDMyX3Qgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCXVpbnQ4X3QgcmVxc19jb3VudCA9IDA7CisKKwloYS0+aXNyX2NvdW50Kys7CisJc3RhdHVzID0gcWxhNF84eHh4X3JkXzMyKGhhLCBJU1JfSU5UX1ZFQ1RPUik7CisJaWYgKCEoc3RhdHVzICYgaGEtPm54X2xlZ2FjeV9pbnRyLmludF92ZWNfYml0KSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJc3RhdHVzID0gcWxhNF84eHh4X3JkXzMyKGhhLCBJU1JfSU5UX1NUQVRFX1JFRyk7CisJaWYgKCFJU1JfSVNfTEVHQUNZX0lOVFJfVFJJR0dFUkVEKHN0YXR1cykpIHsKKwkJREVCVUcyKHFsNF9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkJICAgICIlcyBsZWdhY3kgSW50IG5vdCB0cmlnZ2VyZWRcbiIsIF9fZnVuY19fKSk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwkvKiBjbGVhciB0aGUgaW50ZXJydXB0ICovCisJcWxhNF84eHh4X3dyXzMyKGhhLCBoYS0+bnhfbGVnYWN5X2ludHIudGd0X3N0YXR1c19yZWcsIDB4ZmZmZmZmZmYpOworCisJLyogcmVhZCB0d2ljZSB0byBlbnN1cmUgd3JpdGUgaXMgZmx1c2hlZCAqLworCXFsYTRfOHh4eF9yZF8zMihoYSwgSVNSX0lOVF9WRUNUT1IpOworCXFsYTRfOHh4eF9yZF8zMihoYSwgSVNSX0lOVF9WRUNUT1IpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CisJd2hpbGUgKDEpIHsKKwkJaWYgKCEocmVhZGwoJmhhLT5xbGE0Xzh4eHhfcmVnLT5ob3N0X2ludCkgJgorCQkgICAgSVNSWF84MlhYX1JJU0NfSU5UKSkgeworCQkJcWxhNF84eHh4X3NwdXJpb3VzX2ludGVycnVwdChoYSwgcmVxc19jb3VudCk7CisJCQlicmVhazsKKwkJfQorCQlpbnRyX3N0YXR1cyA9ICByZWFkbCgmaGEtPnFsYTRfOHh4eF9yZWctPmhvc3Rfc3RhdHVzKTsKKwkJaWYgKChpbnRyX3N0YXR1cyAmCisJCSAgICAoSFNSWF9SSVNDX01CX0lOVCB8IEhTUlhfUklTQ19JT0NCX0lOVCkpID09IDApICB7CisJCQlxbGE0Xzh4eHhfc3B1cmlvdXNfaW50ZXJydXB0KGhhLCByZXFzX2NvdW50KTsKKwkJCWJyZWFrOworCQl9CisKKwkJaGEtPmlzcF9vcHMtPmludGVycnVwdF9zZXJ2aWNlX3JvdXRpbmUoaGEsIGludHJfc3RhdHVzKTsKKworCQkvKiBFbmFibGUgSW50ZXJydXB0ICovCisJCXFsYTRfOHh4eF93cl8zMihoYSwgaGEtPm54X2xlZ2FjeV9pbnRyLnRndF9tYXNrX3JlZywgMHhmYmZmKTsKKworCQlpZiAoKytyZXFzX2NvdW50ID09IE1BWF9SRVFTX1NFUlZJQ0VEX1BFUl9JTlRSKQorCQkJYnJlYWs7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK2lycXJldHVybl90CitxbGE0Xzh4eHhfbXNpX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYTsKKworCWhhID0gKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICopIGRldl9pZDsKKwlpZiAoIWhhKSB7CisJCURFQlVHMihwcmludGsoS0VSTl9JTkZPCisJCSAgICAicWxhNHh4eDogTVNJWDogSW50ZXJydXB0IHdpdGggTlVMTCBob3N0IHB0clxuIikpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJaGEtPmlzcl9jb3VudCsrOworCS8qIGNsZWFyIHRoZSBpbnRlcnJ1cHQgKi8KKwlxbGE0Xzh4eHhfd3JfMzIoaGEsIGhhLT5ueF9sZWdhY3lfaW50ci50Z3Rfc3RhdHVzX3JlZywgMHhmZmZmZmZmZik7CisKKwkvKiByZWFkIHR3aWNlIHRvIGVuc3VyZSB3cml0ZSBpcyBmbHVzaGVkICovCisJcWxhNF84eHh4X3JkXzMyKGhhLCBJU1JfSU5UX1ZFQ1RPUik7CisJcWxhNF84eHh4X3JkXzMyKGhhLCBJU1JfSU5UX1ZFQ1RPUik7CisKKwlyZXR1cm4gcWxhNF84eHh4X2RlZmF1bHRfaW50cl9oYW5kbGVyKGlycSwgZGV2X2lkKTsKK30KKworLyoqCisgKiBxbGE0Xzh4eHhfZGVmYXVsdF9pbnRyX2hhbmRsZXIgLSBoYXJkd2FyZSBpbnRlcnJ1cHQgaGFuZGxlci4KKyAqIEBpcnE6IFVudXNlZAorICogQGRldl9pZDogUG9pbnRlciB0byBob3N0IGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogVGhpcyBpbnRlcnJ1cHQgaGFuZGxlciBpcyBjYWxsZWQgZGlyZWN0bHkgZm9yIE1TSS1YLCBhbmQKKyAqIGNhbGxlZCBpbmRpcmVjdGx5IGZvciBNU0kuCisgKiovCitpcnFyZXR1cm5fdAorcWxhNF84eHh4X2RlZmF1bHRfaW50cl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEgPSBkZXZfaWQ7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCXVpbnQzMl90IGludHJfc3RhdHVzOworCXVpbnQ4X3QgcmVxc19jb3VudCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKKwl3aGlsZSAoMSkgeworCQlpZiAoIShyZWFkbCgmaGEtPnFsYTRfOHh4eF9yZWctPmhvc3RfaW50KSAmCisJCSAgICBJU1JYXzgyWFhfUklTQ19JTlQpKSB7CisJCQlxbGE0Xzh4eHhfc3B1cmlvdXNfaW50ZXJydXB0KGhhLCByZXFzX2NvdW50KTsKKwkJCWJyZWFrOworCQl9CisKKwkJaW50cl9zdGF0dXMgPSAgcmVhZGwoJmhhLT5xbGE0Xzh4eHhfcmVnLT5ob3N0X3N0YXR1cyk7CisJCWlmICgoaW50cl9zdGF0dXMgJgorCQkgICAgKEhTUlhfUklTQ19NQl9JTlQgfCBIU1JYX1JJU0NfSU9DQl9JTlQpKSA9PSAwKSB7CisJCQlxbGE0Xzh4eHhfc3B1cmlvdXNfaW50ZXJydXB0KGhhLCByZXFzX2NvdW50KTsKKwkJCWJyZWFrOworCQl9CisKKwkJaGEtPmlzcF9vcHMtPmludGVycnVwdF9zZXJ2aWNlX3JvdXRpbmUoaGEsIGludHJfc3RhdHVzKTsKKworCQlpZiAoKytyZXFzX2NvdW50ID09IE1BWF9SRVFTX1NFUlZJQ0VEX1BFUl9JTlRSKQorCQkJYnJlYWs7CisJfQorCisJaGEtPmlzcl9jb3VudCsrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitpcnFyZXR1cm5fdAorcWxhNF84eHh4X21zaXhfcnNwX3EoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSA9IGRldl9pZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CisJcWxhNHh4eF9wcm9jZXNzX3Jlc3BvbnNlX3F1ZXVlKGhhKTsKKwl3cml0ZWwoMCwgJmhhLT5xbGE0Xzh4eHhfcmVnLT5ob3N0X2ludCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKKworCWhhLT5pc3JfY291bnQrKzsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qKgogICogcWxhNHh4eF9wcm9jZXNzX2FlbiAtIHByb2Nlc3NlcyBBRU5zIGdlbmVyYXRlZCBieSBmaXJtd2FyZQogICogQGhhOiBwb2ludGVyIHRvIGhvc3QgYWRhcHRlciBzdHJ1Y3R1cmUuCiAgKiBAcHJvY2Vzc19hZW46IHR5cGUgb2YgQUVOcyB0byBwcm9jZXNzCkBAIC04MjUsNyArMTAwOSw3IEBACiAJCQkJCSgoZGRiX2VudHJ5LT5kZWZhdWx0X3RpbWUyd2FpdCArCiAJCQkJCSAgNCkgKiBIWik7CiAKLQkJCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiBkZGIgaW5kZXggWyVkXSBpbml0YXRlIgorCQkJCURFQlVHMihwcmludGsoInNjc2klbGQ6IGRkYiBbJWRdIGluaXRhdGUiCiAJCQkJCSAgICAgICIgUkVMT0dJTiBhZnRlciAlZCBzZWNvbmRzXG4iLAogCQkJCQkgICAgICBoYS0+aG9zdF9ubywKIAkJCQkJICAgICAgZGRiX2VudHJ5LT5md19kZGJfaW5kZXgsCkBAIC04NDcsMyArMTAzMSw4MSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiB9CiAKK2ludCBxbGE0eHh4X3JlcXVlc3RfaXJxcyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCit7CisJaW50IHJldDsKKworCWlmICghaXNfcWxhODAyMihoYSkpCisJCWdvdG8gdHJ5X2ludHg7CisKKwlpZiAocWw0eGVuYWJsZW1zaXggPT0gMikKKwkJZ290byB0cnlfbXNpOworCisJaWYgKHFsNHhlbmFibGVtc2l4ID09IDAgfHwgcWw0eGVuYWJsZW1zaXggIT0gMSkKKwkJZ290byB0cnlfaW50eDsKKworCS8qIFRyeWluZyBNU0ktWCAqLworCXJldCA9IHFsYTRfOHh4eF9lbmFibGVfbXNpeChoYSk7CisJaWYgKCFyZXQpIHsKKwkJREVCVUcyKHFsNF9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkJICAgICJNU0ktWDogRW5hYmxlZCAoMHglWCkuXG4iLCBoYS0+cmV2aXNpb25faWQpKTsKKwkJZ290byBpcnFfYXR0YWNoZWQ7CisJfQorCisJcWw0X3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCSAgICAiTVNJLVg6IEZhbGxpbmcgYmFjay10byBNU0kgbW9kZSAtLSAlZC5cbiIsIHJldCk7CisKK3RyeV9tc2k6CisJLyogVHJ5aW5nIE1TSSAqLworCXJldCA9IHBjaV9lbmFibGVfbXNpKGhhLT5wZGV2KTsKKwlpZiAoIXJldCkgeworCQlyZXQgPSByZXF1ZXN0X2lycShoYS0+cGRldi0+aXJxLCBxbGE0Xzh4eHhfbXNpX2hhbmRsZXIsCisJCQlJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELCBEUklWRVJfTkFNRSwgaGEpOworCQlpZiAoIXJldCkgeworCQkJREVCVUcyKHFsNF9wcmludGsoS0VSTl9JTkZPLCBoYSwgIk1TSTogRW5hYmxlZC5cbiIpKTsKKwkJCXNldF9iaXQoQUZfTVNJX0VOQUJMRUQsICZoYS0+ZmxhZ3MpOworCQkJZ290byBpcnFfYXR0YWNoZWQ7CisJCX0gZWxzZSB7CisJCQlxbDRfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQkgICAgIk1TSTogRmFpbGVkIHRvIHJlc2VydmUgaW50ZXJydXB0ICVkICIKKwkJCSAgICAiYWxyZWFkeSBpbiB1c2UuXG4iLCBoYS0+cGRldi0+aXJxKTsKKwkJCXBjaV9kaXNhYmxlX21zaShoYS0+cGRldik7CisJCX0KKwl9CisJcWw0X3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCSAgICAiTVNJOiBGYWxsaW5nIGJhY2stdG8gSU5UeCBtb2RlIC0tICVkLlxuIiwgcmV0KTsKKwordHJ5X2ludHg6CisJLyogVHJ5aW5nIElOVHggKi8KKwlyZXQgPSByZXF1ZXN0X2lycShoYS0+cGRldi0+aXJxLCBoYS0+aXNwX29wcy0+aW50cl9oYW5kbGVyLAorCSAgICBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELCBEUklWRVJfTkFNRSwgaGEpOworCWlmICghcmV0KSB7CisJCURFQlVHMihxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJJTlR4OiBFbmFibGVkLlxuIikpOworCQlzZXRfYml0KEFGX0lOVHhfRU5BQkxFRCwgJmhhLT5mbGFncyk7CisJCWdvdG8gaXJxX2F0dGFjaGVkOworCisJfSBlbHNlIHsKKwkJcWw0X3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkgICAgIklOVHg6IEZhaWxlZCB0byByZXNlcnZlIGludGVycnVwdCAlZCBhbHJlYWR5IGluIgorCQkgICAgIiB1c2UuXG4iLCBoYS0+cGRldi0+aXJxKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKK2lycV9hdHRhY2hlZDoKKwlzZXRfYml0KEFGX0lSUV9BVFRBQ0hFRCwgJmhhLT5mbGFncyk7CisJaGEtPmhvc3QtPmlycSA9IGhhLT5wZGV2LT5pcnE7CisJcWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLCAiJXM6IGlycSAlZCBhdHRhY2hlZFxuIiwKKwkgICAgX19mdW5jX18sIGhhLT5wZGV2LT5pcnEpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcWxhNHh4eF9mcmVlX2lycXMoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKQoreworCWlmICh0ZXN0X2JpdChBRl9NU0lYX0VOQUJMRUQsICZoYS0+ZmxhZ3MpKQorCQlxbGE0Xzh4eHhfZGlzYWJsZV9tc2l4KGhhKTsKKwllbHNlIGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQUZfTVNJX0VOQUJMRUQsICZoYS0+ZmxhZ3MpKSB7CisJCWZyZWVfaXJxKGhhLT5wZGV2LT5pcnEsIGhhKTsKKwkJcGNpX2Rpc2FibGVfbXNpKGhhLT5wZGV2KTsKKwl9IGVsc2UgaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChBRl9JTlR4X0VOQUJMRUQsICZoYS0+ZmxhZ3MpKQorCQlmcmVlX2lycShoYS0+cGRldi0+aXJxLCBoYSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfbWJ4LmMgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfbWJ4LmMKaW5kZXggNzU0OTZmYi4uOTQwZWU1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X21ieC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9tYnguYwpAQCAtMTksMTMgKzE5LDEzIEBACiAgKiBAbWJ4X2NtZDogZGF0YSBwb2ludGVyIGZvciBtYWlsYm94IGluIHJlZ2lzdGVycy4KICAqIEBtYnhfc3RzOiBkYXRhIHBvaW50ZXIgZm9yIG1haWxib3ggb3V0IHJlZ2lzdGVycy4KICAqCi0gKiBUaGlzIHJvdXRpbmUgc3NzdWUgbWFpbGJveCBjb21tYW5kcyBhbmQgd2FpdHMgZm9yIGNvbXBsZXRpb24uCisgKiBUaGlzIHJvdXRpbmUgaXNzc3VlIG1haWxib3ggY29tbWFuZHMgYW5kIHdhaXRzIGZvciBjb21wbGV0aW9uLgogICogSWYgb3V0Q291bnQgaXMgMCwgdGhpcyByb3V0aW5lIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkgV0lUSE9VVCB3YWl0aW5nCiAgKiBmb3IgdGhlIG1haWxib3ggY29tbWFuZCB0byBjb21wbGV0ZS4KICAqKi8KLXN0YXRpYyBpbnQgcWxhNHh4eF9tYWlsYm94X2NvbW1hbmQoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLCB1aW50OF90IGluQ291bnQsCi0JCQkJICAgdWludDhfdCBvdXRDb3VudCwgdWludDMyX3QgKm1ieF9jbWQsCi0JCQkJICAgdWludDMyX3QgKm1ieF9zdHMpCitpbnQgcWxhNHh4eF9tYWlsYm94X2NvbW1hbmQoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLCB1aW50OF90IGluQ291bnQsCisJCQkgICAgdWludDhfdCBvdXRDb3VudCwgdWludDMyX3QgKm1ieF9jbWQsCisJCQkgICAgdWludDMyX3QgKm1ieF9zdHMpCiB7CiAJaW50IHN0YXR1cyA9IFFMQV9FUlJPUjsKIAl1aW50OF90IGk7CkBAIC01OSwzMiArNTksNjYgQEAKIAl9CiAKIAkvKiBUbyBwcmV2ZW50IG92ZXJ3cml0aW5nIG1haWxib3ggcmVnaXN0ZXJzIGZvciBhIGNvbW1hbmQgdGhhdCBoYXMKLQkgKiBub3QgeWV0IGJlZW4gc2VydmljZWQsIGNoZWNrIHRvIHNlZSBpZiBhIHByZXZpb3VzbHkgaXNzdWVkCi0JICogbWFpbGJveCBjb21tYW5kIGlzIGludGVycnVwdGluZy4KKwkgKiBub3QgeWV0IGJlZW4gc2VydmljZWQsIGNoZWNrIHRvIHNlZSBpZiBhbiBhY3RpdmUgY29tbWFuZAorCSAqIChBRU4sIElPQ0IsIGV0Yy4pIGlzIGludGVycnVwdGluZywgdGhlbiBzZXJ2aWNlIGl0LgogCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7Ci0JaW50cl9zdGF0dXMgPSByZWFkbCgmaGEtPnJlZy0+Y3RybF9zdGF0dXMpOwotCWlmIChpbnRyX3N0YXR1cyAmIENTUl9TQ1NJX1BST0NFU1NPUl9JTlRSKSB7Ci0JCS8qIFNlcnZpY2UgZXhpc3RpbmcgaW50ZXJydXB0ICovCi0JCXFsYTR4eHhfaW50ZXJydXB0X3NlcnZpY2Vfcm91dGluZShoYSwgaW50cl9zdGF0dXMpOwotCQljbGVhcl9iaXQoQUZfTUJPWF9DT01NQU5EX0RPTkUsICZoYS0+ZmxhZ3MpOworCisJaWYgKGlzX3FsYTgwMjIoaGEpKSB7CisJCWludHJfc3RhdHVzID0gcmVhZGwoJmhhLT5xbGE0Xzh4eHhfcmVnLT5ob3N0X2ludCk7CisJCWlmIChpbnRyX3N0YXR1cyAmIElTUlhfODJYWF9SSVNDX0lOVCkgeworCQkJLyogU2VydmljZSBleGlzdGluZyBpbnRlcnJ1cHQgKi8KKwkJCURFQlVHMihwcmludGsoInNjc2klbGQ6ICVzOiAiCisJCQkgICAgInNlcnZpY2luZyBleGlzdGluZyBpbnRlcnJ1cHRcbiIsCisJCQkgICAgaGEtPmhvc3Rfbm8sIF9fZnVuY19fKSk7CisJCQlpbnRyX3N0YXR1cyA9IHJlYWRsKCZoYS0+cWxhNF84eHh4X3JlZy0+aG9zdF9zdGF0dXMpOworCQkJaGEtPmlzcF9vcHMtPmludGVycnVwdF9zZXJ2aWNlX3JvdXRpbmUoaGEsIGludHJfc3RhdHVzKTsKKwkJCWNsZWFyX2JpdChBRl9NQk9YX0NPTU1BTkRfRE9ORSwgJmhhLT5mbGFncyk7CisJCQlpZiAodGVzdF9iaXQoQUZfSU5URVJSVVBUU19PTiwgJmhhLT5mbGFncykgJiYKKwkJCSAgICB0ZXN0X2JpdChBRl9JTlR4X0VOQUJMRUQsICZoYS0+ZmxhZ3MpKQorCQkJCXFsYTRfOHh4eF93cl8zMihoYSwKKwkJCQkgICAgaGEtPm54X2xlZ2FjeV9pbnRyLnRndF9tYXNrX3JlZywKKwkJCQkgICAgMHhmYmZmKTsKKwkJfQorCX0gZWxzZSB7CisJCWludHJfc3RhdHVzID0gcmVhZGwoJmhhLT5yZWctPmN0cmxfc3RhdHVzKTsKKwkJaWYgKGludHJfc3RhdHVzICYgQ1NSX1NDU0lfUFJPQ0VTU09SX0lOVFIpIHsKKwkJCS8qIFNlcnZpY2UgZXhpc3RpbmcgaW50ZXJydXB0ICovCisJCQloYS0+aXNwX29wcy0+aW50ZXJydXB0X3NlcnZpY2Vfcm91dGluZShoYSwgaW50cl9zdGF0dXMpOworCQkJY2xlYXJfYml0KEFGX01CT1hfQ09NTUFORF9ET05FLCAmaGEtPmZsYWdzKTsKKwkJfQogCX0KIAotCS8qIFNlbmQgdGhlIG1haWxib3ggY29tbWFuZCB0byB0aGUgZmlybXdhcmUgKi8KIAloYS0+bWJveF9zdGF0dXNfY291bnQgPSBvdXRDb3VudDsKIAlmb3IgKGkgPSAwOyBpIDwgb3V0Q291bnQ7IGkrKykKIAkJaGEtPm1ib3hfc3RhdHVzW2ldID0gMDsKIAotCS8qIExvYWQgYWxsIG1haWxib3ggcmVnaXN0ZXJzLCBleGNlcHQgbWFpbGJveCAwLiAqLwotCWZvciAoaSA9IDE7IGkgPCBpbkNvdW50OyBpKyspCi0JCXdyaXRlbChtYnhfY21kW2ldLCAmaGEtPnJlZy0+bWFpbGJveFtpXSk7CisJaWYgKGlzX3FsYTgwMjIoaGEpKSB7CisJCS8qIExvYWQgYWxsIG1haWxib3ggcmVnaXN0ZXJzLCBleGNlcHQgbWFpbGJveCAwLiAqLworCQlERUJVRzUoCisJCSAgICBwcmludGsoInNjc2klbGQ6ICVzOiBDbWQgIiwgaGEtPmhvc3Rfbm8sIF9fZnVuY19fKTsKKwkJICAgIGZvciAoaSA9IDA7IGkgPCBpbkNvdW50OyBpKyspCisJCQlwcmludGsoIm1iJWQ9JTA0eCAiLCBpLCBtYnhfY21kW2ldKTsKKwkJICAgIHByaW50aygiXG4iKSk7CiAKLQkvKiBXYWtldXAgZmlybXdhcmUgICovCi0Jd3JpdGVsKG1ieF9jbWRbMF0sICZoYS0+cmVnLT5tYWlsYm94WzBdKTsKLQlyZWFkbCgmaGEtPnJlZy0+bWFpbGJveFswXSk7Ci0Jd3JpdGVsKHNldF9ybWFzayhDU1JfSU5UUl9SSVNDKSwgJmhhLT5yZWctPmN0cmxfc3RhdHVzKTsKLQlyZWFkbCgmaGEtPnJlZy0+Y3RybF9zdGF0dXMpOworCQlmb3IgKGkgPSAxOyBpIDwgaW5Db3VudDsgaSsrKQorCQkJd3JpdGVsKG1ieF9jbWRbaV0sICZoYS0+cWxhNF84eHh4X3JlZy0+bWFpbGJveF9pbltpXSk7CisJCXdyaXRlbChtYnhfY21kWzBdLCAmaGEtPnFsYTRfOHh4eF9yZWctPm1haWxib3hfaW5bMF0pOworCQlyZWFkbCgmaGEtPnFsYTRfOHh4eF9yZWctPm1haWxib3hfaW5bMF0pOworCQl3cml0ZWwoSElOVF9NQlhfSU5UX1BFTkRJTkcsICZoYS0+cWxhNF84eHh4X3JlZy0+aGludCk7CisJfSBlbHNlIHsKKwkJLyogTG9hZCBhbGwgbWFpbGJveCByZWdpc3RlcnMsIGV4Y2VwdCBtYWlsYm94IDAuICovCisJCWZvciAoaSA9IDE7IGkgPCBpbkNvdW50OyBpKyspCisJCQl3cml0ZWwobWJ4X2NtZFtpXSwgJmhhLT5yZWctPm1haWxib3hbaV0pOworCisJCS8qIFdha2V1cCBmaXJtd2FyZSAgKi8KKwkJd3JpdGVsKG1ieF9jbWRbMF0sICZoYS0+cmVnLT5tYWlsYm94WzBdKTsKKwkJcmVhZGwoJmhhLT5yZWctPm1haWxib3hbMF0pOworCQl3cml0ZWwoc2V0X3JtYXNrKENTUl9JTlRSX1JJU0MpLCAmaGEtPnJlZy0+Y3RybF9zdGF0dXMpOworCQlyZWFkbCgmaGEtPnJlZy0+Y3RybF9zdGF0dXMpOworCX0KKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAKIAkvKiBXYWl0IGZvciBjb21wbGV0aW9uICovCkBAIC05OCwyNiArMTMyLDY2IEBACiAJCXN0YXR1cyA9IFFMQV9TVUNDRVNTOwogCQlnb3RvIG1ib3hfZXhpdDsKIAl9Ci0JLyogV2FpdCBmb3IgY29tbWFuZCB0byBjb21wbGV0ZSAqLwotCXdhaXRfY291bnQgPSBqaWZmaWVzICsgTUJPWF9UT1YgKiBIWjsKLQl3aGlsZSAodGVzdF9iaXQoQUZfTUJPWF9DT01NQU5EX0RPTkUsICZoYS0+ZmxhZ3MpID09IDApIHsKLQkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgd2FpdF9jb3VudCkpCi0JCQlicmVhazsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKLQkJaW50cl9zdGF0dXMgPSByZWFkbCgmaGEtPnJlZy0+Y3RybF9zdGF0dXMpOwotCQlpZiAoaW50cl9zdGF0dXMgJiBJTlRSX1BFTkRJTkcpIHsKKwkvKgorCSAqIFdhaXQgZm9yIGNvbXBsZXRpb246IFBvbGwgb3IgY29tcGxldGlvbiBxdWV1ZQorCSAqLworCWlmICh0ZXN0X2JpdChBRl9JUlFfQVRUQUNIRUQsICZoYS0+ZmxhZ3MpICYmCisJICAgIHRlc3RfYml0KEFGX0lOVEVSUlVQVFNfT04sICZoYS0+ZmxhZ3MpICYmCisJICAgIHRlc3RfYml0KEFGX09OTElORSwgJmhhLT5mbGFncykgJiYKKwkgICAgIXRlc3RfYml0KEFGX0hCQV9HT0lOR19BV0FZLCAmaGEtPmZsYWdzKSkgeworCQkvKiBEbyBub3QgcG9sbCBmb3IgY29tcGxldGlvbi4gVXNlIGNvbXBsZXRpb24gcXVldWUgKi8KKwkJc2V0X2JpdChBRl9NQk9YX0NPTU1BTkRfTk9QT0xMLCAmaGEtPmZsYWdzKTsKKwkJd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZoYS0+bWJ4X2ludHJfY29tcCwgTUJPWF9UT1YgKiBIWik7CisJCWNsZWFyX2JpdChBRl9NQk9YX0NPTU1BTkRfTk9QT0xMLCAmaGEtPmZsYWdzKTsKKwl9IGVsc2UgeworCQkvKiBQb2xsIGZvciBjb21tYW5kIHRvIGNvbXBsZXRlICovCisJCXdhaXRfY291bnQgPSBqaWZmaWVzICsgTUJPWF9UT1YgKiBIWjsKKwkJd2hpbGUgKHRlc3RfYml0KEFGX01CT1hfQ09NTUFORF9ET05FLCAmaGEtPmZsYWdzKSA9PSAwKSB7CisJCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCB3YWl0X2NvdW50KSkKKwkJCQlicmVhazsKIAkJCS8qCiAJCQkgKiBTZXJ2aWNlIHRoZSBpbnRlcnJ1cHQuCiAJCQkgKiBUaGUgSVNSIHdpbGwgc2F2ZSB0aGUgbWFpbGJveCBzdGF0dXMgcmVnaXN0ZXJzCiAJCQkgKiB0byBhIHRlbXBvcmFyeSBzdG9yYWdlIGxvY2F0aW9uIGluIHRoZSBhZGFwdGVyCiAJCQkgKiBzdHJ1Y3R1cmUuCiAJCQkgKi8KLQkJCWhhLT5tYm94X3N0YXR1c19jb3VudCA9IG91dENvdW50OwotCQkJcWxhNHh4eF9pbnRlcnJ1cHRfc2VydmljZV9yb3V0aW5lKGhhLCBpbnRyX3N0YXR1cyk7CisKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOworCQkJaWYgKGlzX3FsYTgwMjIoaGEpKSB7CisJCQkJaW50cl9zdGF0dXMgPQorCQkJCSAgICByZWFkbCgmaGEtPnFsYTRfOHh4eF9yZWctPmhvc3RfaW50KTsKKwkJCQlpZiAoaW50cl9zdGF0dXMgJiBJU1JYXzgyWFhfUklTQ19JTlQpIHsKKwkJCQkJaGEtPm1ib3hfc3RhdHVzX2NvdW50ID0gb3V0Q291bnQ7CisJCQkJCWludHJfc3RhdHVzID0KKwkJCQkJIHJlYWRsKCZoYS0+cWxhNF84eHh4X3JlZy0+aG9zdF9zdGF0dXMpOworCQkJCQloYS0+aXNwX29wcy0+aW50ZXJydXB0X3NlcnZpY2Vfcm91dGluZSgKKwkJCQkJICAgIGhhLCBpbnRyX3N0YXR1cyk7CisJCQkJCWlmICh0ZXN0X2JpdChBRl9JTlRFUlJVUFRTX09OLAorCQkJCQkgICAgJmhhLT5mbGFncykgJiYKKwkJCQkJICAgIHRlc3RfYml0KEFGX0lOVHhfRU5BQkxFRCwKKwkJCQkJICAgICZoYS0+ZmxhZ3MpKQorCQkJCQkJcWxhNF84eHh4X3dyXzMyKGhhLAorCQkJCQkJaGEtPm54X2xlZ2FjeV9pbnRyLnRndF9tYXNrX3JlZywKKwkJCQkJCTB4ZmJmZik7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpbnRyX3N0YXR1cyA9IHJlYWRsKCZoYS0+cmVnLT5jdHJsX3N0YXR1cyk7CisJCQkJaWYgKGludHJfc3RhdHVzICYgSU5UUl9QRU5ESU5HKSB7CisJCQkJCS8qCisJCQkJCSAqIFNlcnZpY2UgdGhlIGludGVycnVwdC4KKwkJCQkJICogVGhlIElTUiB3aWxsIHNhdmUgdGhlIG1haWxib3ggc3RhdHVzCisJCQkJCSAqIHJlZ2lzdGVycyB0byBhIHRlbXBvcmFyeSBzdG9yYWdlCisJCQkJCSAqIGxvY2F0aW9uIGluIHRoZSBhZGFwdGVyIHN0cnVjdHVyZS4KKwkJCQkJICovCisJCQkJCWhhLT5tYm94X3N0YXR1c19jb3VudCA9IG91dENvdW50OworCQkJCQloYS0+aXNwX29wcy0+aW50ZXJydXB0X3NlcnZpY2Vfcm91dGluZSgKKwkJCQkJICAgIGhhLCBpbnRyX3N0YXR1cyk7CisJCQkJfQorCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKKwkJCW1zbGVlcCgxMCk7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKLQkJbXNsZWVwKDEwKTsKIAl9CiAKIAkvKiBDaGVjayBmb3IgbWFpbGJveCB0aW1lb3V0LiAqLwpAQCAtMTcyLDcgKzI0Niw3IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotdWludDhfdAorc3RhdGljIHVpbnQ4X3QKIHFsYTR4eHhfc2V0X2lmY2Ioc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLCB1aW50MzJfdCAqbWJveF9jbWQsCiAJCSB1aW50MzJfdCAqbWJveF9zdHMsIGRtYV9hZGRyX3QgaW5pdF9md19jYl9kbWEpCiB7CkBAIC0xOTYsNyArMjcwLDcgQEAKIAlyZXR1cm4gUUxBX1NVQ0NFU1M7CiB9CiAKLXVpbnQ4X3QKK3N0YXRpYyB1aW50OF90CiBxbGE0eHh4X2dldF9pZmNiKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwgdWludDMyX3QgKm1ib3hfY21kLAogCQkgdWludDMyX3QgKm1ib3hfc3RzLCBkbWFfYWRkcl90IGluaXRfZndfY2JfZG1hKQogewpAQCAtMjE4LDcgKzI5Miw3IEBACiAJcmV0dXJuIFFMQV9TVUNDRVNTOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogcWxhNHh4eF91cGRhdGVfbG9jYWxfaXAoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLAogCQkJIHN0cnVjdCBhZGRyX2N0cmxfYmxrICAqaW5pdF9md19jYikKIHsKQEAgLTI1Niw3ICszMzAsNyBAQAogCX0KIH0KIAotdWludDhfdAorc3RhdGljIHVpbnQ4X3QKIHFsYTR4eHhfdXBkYXRlX2xvY2FsX2lmY2Ioc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLAogCQkJICB1aW50MzJfdCAqbWJveF9jbWQsCiAJCQkgIHVpbnQzMl90ICptYm94X3N0cywKQEAgLTMxNyw3ICszOTEsNyBAQAogCWlmIChpbml0X2Z3X2NiID09IE5VTEwpIHsKIAkJREVCVUcyKHByaW50aygic2NzaSVsZDogJXM6IFVuYWJsZSB0byBhbGxvYyBpbml0X2NiXG4iLAogCQkJICAgICAgaGEtPmhvc3Rfbm8sIF9fZnVuY19fKSk7Ci0JCXJldHVybiAxMDsKKwkJZ290byBleGl0X2luaXRfZndfY2Jfbm9fZnJlZTsKIAl9CiAJbWVtc2V0KGluaXRfZndfY2IsIDAsIHNpemVvZihzdHJ1Y3QgYWRkcl9jdHJsX2JsaykpOwogCkBAIC0zNzMsNyArNDQ3LDcgQEAKIGV4aXRfaW5pdF9md19jYjoKIAlkbWFfZnJlZV9jb2hlcmVudCgmaGEtPnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBhZGRyX2N0cmxfYmxrKSwKIAkJCQlpbml0X2Z3X2NiLCBpbml0X2Z3X2NiX2RtYSk7Ci0KK2V4aXRfaW5pdF9md19jYl9ub19mcmVlOgogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTM5NCw3ICs0NjgsNyBAQAogCWlmIChpbml0X2Z3X2NiID09IE5VTEwpIHsKIAkJcHJpbnRrKCJzY3NpJWxkOiAlczogVW5hYmxlIHRvIGFsbG9jIGluaXRfY2JcbiIsIGhhLT5ob3N0X25vLAogCQkgICAgICAgX19mdW5jX18pOwotCQlyZXR1cm4gMTA7CisJCXJldHVybiBRTEFfRVJST1I7CiAJfQogCiAJLyogR2V0IEluaXRpYWxpemUgRmlybXdhcmUgQ29udHJvbCBCbG9jay4gKi8KQEAgLTQ0NSw3ICs1MTksNyBAQAogCURFQlVHMihwcmludGsoInNjc2klbGQ6ICVzIGZpcm13YXJlX3N0YXRlPTB4JXhcbiIsCiAJCSAgICAgIGhhLT5ob3N0X25vLCBfX2Z1bmNfXywgaGEtPmZpcm13YXJlX3N0YXRlKTspCiAKLQkJcmV0dXJuIFFMQV9TVUNDRVNTOworCXJldHVybiBRTEFfU1VDQ0VTUzsKIH0KIAogLyoqCkBAIC00NzAsNiArNTQ0LDEwIEBACiAJCQkgICAgICBtYm94X3N0c1swXSkpOwogCQlyZXR1cm4gUUxBX0VSUk9SOwogCX0KKworCXFsNF9wcmludGsoS0VSTl9JTkZPLCBoYSwgIiVsZCBmaXJtYXJlIElPQ0JzIGF2YWlsYWJsZSAoJWQpLlxuIiwKKwkgICAgaGEtPmhvc3Rfbm8sIG1ib3hfY21kWzJdKTsKKwogCXJldHVybiBRTEFfU1VDQ0VTUzsKIH0KIApAQCAtNTAwLDcgKzU3OCw3IEBACiAKIAkvKiBNYWtlIHN1cmUgdGhlIGRldmljZSBpbmRleCBpcyB2YWxpZCAqLwogCWlmIChmd19kZGJfaW5kZXggPj0gTUFYX0REQl9FTlRSSUVTKSB7Ci0JCURFQlVHMihwcmludGsoInNjc2klbGQ6ICVzOiBpbmRleCBbJWRdIG91dCBvZiByYW5nZS5cbiIsCisJCURFQlVHMihwcmludGsoInNjc2klbGQ6ICVzOiBkZGIgWyVkXSBvdXQgb2YgcmFuZ2UuXG4iLAogCQkJICAgICAgaGEtPmhvc3Rfbm8sIF9fZnVuY19fLCBmd19kZGJfaW5kZXgpKTsKIAkJZ290byBleGl0X2dldF9md2RkYjsKIAl9CkBAIC01MjEsNyArNTk5LDcgQEAKIAkJZ290byBleGl0X2dldF9md2RkYjsKIAl9CiAJaWYgKGZ3X2RkYl9pbmRleCAhPSBtYm94X3N0c1sxXSkgewotCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiAlczogaW5kZXggbWlzbWF0Y2ggWyVkXSAhPSBbJWRdLlxuIiwKKwkJREVCVUcyKHByaW50aygic2NzaSVsZDogJXM6IGRkYiBtaXNtYXRjaCBbJWRdICE9IFslZF0uXG4iLAogCQkJICAgICAgaGEtPmhvc3Rfbm8sIF9fZnVuY19fLCBmd19kZGJfaW5kZXgsCiAJCQkgICAgICBtYm94X3N0c1sxXSkpOwogCQlnb3RvIGV4aXRfZ2V0X2Z3ZGRiOwpAQCAtNTI5LDcgKzYwNyw3IEBACiAJaWYgKGZ3X2RkYl9lbnRyeSkgewogCQlvcHRpb25zID0gbGUxNl90b19jcHUoZndfZGRiX2VudHJ5LT5vcHRpb25zKTsKIAkJaWYgKG9wdGlvbnMgJiBEREJfT1BUX0lQVjZfREVWSUNFKSB7Ci0JCQlkZXZfaW5mbygmaGEtPnBkZXYtPmRldiwgIiVzOiBEREJbJWRdIE1CMCAlMDR4IFRvdCAlZCAiCisJCQlxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsICIlczogRERCWyVkXSBNQjAgJTA0eCBUb3QgJWQgIgogCQkJCSJOZXh0ICVkIFN0YXRlICUwNHggQ29ubkVyciAlMDh4ICVwSTYgIgogCQkJCSI6JTA0ZCBcIiVzXCJcbiIsIF9fZnVuY19fLCBmd19kZGJfaW5kZXgsCiAJCQkJbWJveF9zdHNbMF0sIG1ib3hfc3RzWzJdLCBtYm94X3N0c1szXSwKQEAgLTUzOCw3ICs2MTYsNyBAQAogCQkJCWxlMTZfdG9fY3B1KGZ3X2RkYl9lbnRyeS0+cG9ydCksCiAJCQkJZndfZGRiX2VudHJ5LT5pc2NzaV9uYW1lKTsKIAkJfSBlbHNlIHsKLQkJCWRldl9pbmZvKCZoYS0+cGRldi0+ZGV2LCAiJXM6IEREQlslZF0gTUIwICUwNHggVG90ICVkICIKKwkJCXFsNF9wcmludGsoS0VSTl9JTkZPLCBoYSwgIiVzOiBEREJbJWRdIE1CMCAlMDR4IFRvdCAlZCAiCiAJCQkJIk5leHQgJWQgU3RhdGUgJTA0eCBDb25uRXJyICUwOHggJXBJNCAiCiAJCQkJIjolMDRkIFwiJXNcIlxuIiwgX19mdW5jX18sIGZ3X2RkYl9pbmRleCwKIAkJCQltYm94X3N0c1swXSwgbWJveF9zdHNbMl0sIG1ib3hfc3RzWzNdLApAQCAtNTkwLDYgKzY2OCw3IEBACiB7CiAJdWludDMyX3QgbWJveF9jbWRbTUJPWF9SRUdfQ09VTlRdOwogCXVpbnQzMl90IG1ib3hfc3RzW01CT1hfUkVHX0NPVU5UXTsKKwlpbnQgc3RhdHVzOwogCiAJLyogRG8gbm90IHdhaXQgZm9yIGNvbXBsZXRpb24uIFRoZSBmaXJtd2FyZSB3aWxsIHNlbmQgdXMgYW4KIAkgKiBBU1RTX0RBVEFCQVNFX0NIQU5HRUQgKDB4ODAxNCkgdG8gbm90aWZ5IHVzIG9mIHRoZSBsb2dpbiBzdGF0dXMuCkBAIC02MDMsNyArNjgyLDEyIEBACiAJbWJveF9jbWRbM10gPSBNU0RXKGZ3X2RkYl9lbnRyeV9kbWEpOwogCW1ib3hfY21kWzRdID0gc2l6ZW9mKHN0cnVjdCBkZXZfZGJfZW50cnkpOwogCi0JcmV0dXJuIHFsYTR4eHhfbWFpbGJveF9jb21tYW5kKGhhLCBNQk9YX1JFR19DT1VOVCwgMSwgJm1ib3hfY21kWzBdLCAmbWJveF9zdHNbMF0pOworCXN0YXR1cyA9IHFsYTR4eHhfbWFpbGJveF9jb21tYW5kKGhhLCBNQk9YX1JFR19DT1VOVCwgNSwgJm1ib3hfY21kWzBdLAorCSAgICAmbWJveF9zdHNbMF0pOworCURFQlVHMihwcmludGsoInNjc2klbGQ6ICVzOiBzdGF0dXM9JWQgbWJ4MD0weCV4IG1ieDQ9MHgleFxuIiwKKwkgICAgaGEtPmhvc3Rfbm8sIF9fZnVuY19fLCBzdGF0dXMsIG1ib3hfc3RzWzBdLCBtYm94X3N0c1s0XSk7KQorCisJcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC04MTcsOCArOTAxLDggQEAKIC8qKgogICogcWxhNHh4eF9yZXNldF9sdW4gLSBpc3N1ZXMgTFVOIFJlc2V0CiAgKiBAaGE6IFBvaW50ZXIgdG8gaG9zdCBhZGFwdGVyIHN0cnVjdHVyZS4KLSAqIEBkYl9lbnRyeTogUG9pbnRlciB0byBkZXZpY2UgZGF0YWJhc2UgZW50cnkKLSAqIEB1bl9lbnRyeTogUG9pbnRlciB0byBsdW4gZW50cnkgc3RydWN0dXJlCisgKiBAZGRiX2VudHJ5OiBQb2ludGVyIHRvIGRldmljZSBkYXRhYmFzZSBlbnRyeQorICogQGx1bjogbHVuIG51bWJlcgogICoKICAqIFRoaXMgcm91dGluZSBwZXJmb3JtcyBhIExVTiBSRVNFVCBvbiB0aGUgc3BlY2lmaWVkIHRhcmdldC9sdW4uCiAgKiBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgdGhlIGRkYl9lbnRyeSBhbmQgbHVuX2VudHJ5IHBvaW50ZXJzCkBAIC04MzIsNyArOTE2LDcgQEAKIAlpbnQgc3RhdHVzID0gUUxBX1NVQ0NFU1M7CiAKIAlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiVkOiVkOiBsdW4gcmVzZXQgaXNzdWVkXG4iLCBoYS0+aG9zdF9ubywKLQkJICAgICAgZGRiX2VudHJ5LT5vc190YXJnZXRfaWQsIGx1bikpOworCQkgICAgICBkZGJfZW50cnktPmZ3X2RkYl9pbmRleCwgbHVuKSk7CiAKIAkvKgogCSAqIFNlbmQgbHVuIHJlc2V0IGNvbW1hbmQgdG8gSVNQLCBzbyB0aGF0IHRoZSBJU1Agd2lsbCByZXR1cm4gYWxsCkBAIC04NzIsNyArOTU2LDcgQEAKIAlpbnQgc3RhdHVzID0gUUxBX1NVQ0NFU1M7CiAKIAlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiVkOiB0YXJnZXQgcmVzZXQgaXNzdWVkXG4iLCBoYS0+aG9zdF9ubywKLQkJICAgICAgZGRiX2VudHJ5LT5vc190YXJnZXRfaWQpKTsKKwkJICAgICAgZGRiX2VudHJ5LT5md19kZGJfaW5kZXgpKTsKIAogCS8qCiAJICogU2VuZCB0YXJnZXQgcmVzZXQgY29tbWFuZCB0byBJU1AsIHNvIHRoYXQgdGhlIElTUCB3aWxsIHJldHVybiBhbGwKQEAgLTEwMTksMTYgKzExMDMsMTYgQEAKIAkJREVCVUcyKHByaW50aygic2NzaSVsZDogJXM6IFVuYWJsZSB0byBhbGxvY2F0ZSBkbWEgYnVmZmVyLlxuIiwKIAkJCSAgICAgIGhhLT5ob3N0X25vLCBfX2Z1bmNfXykpOwogCQlyZXRfdmFsID0gUUxBX0VSUk9SOwotCQlnb3RvIHFsYTR4eHhfc2VuZF90Z3RzX2V4aXQ7CisJCWdvdG8gZXhpdF9zZW5kX3RndHNfbm9fZnJlZTsKIAl9CiAKIAlyZXRfdmFsID0gcWxhNHh4eF9nZXRfZGVmYXVsdF9kZGIoaGEsIGZ3X2RkYl9lbnRyeV9kbWEpOwogCWlmIChyZXRfdmFsICE9IFFMQV9TVUNDRVNTKQotCQlnb3RvIHFsYTR4eHhfc2VuZF90Z3RzX2V4aXQ7CisJCWdvdG8gZXhpdF9zZW5kX3RndHM7CiAKIAlyZXRfdmFsID0gcWxhNHh4eF9yZXFfZGRiX2VudHJ5KGhhLCAmZGRiX2luZGV4KTsKIAlpZiAocmV0X3ZhbCAhPSBRTEFfU1VDQ0VTUykKLQkJZ290byBxbGE0eHh4X3NlbmRfdGd0c19leGl0OworCQlnb3RvIGV4aXRfc2VuZF90Z3RzOwogCiAJbWVtc2V0KGZ3X2RkYl9lbnRyeS0+aXNjc2lfYWxpYXMsIDAsCiAJICAgICAgIHNpemVvZihmd19kZGJfZW50cnktPmlzY3NpX2FsaWFzKSk7CkBAIC0xMDUwLDkgKzExMzQsMTAgQEAKIAogCXJldF92YWwgPSBxbGE0eHh4X3NldF9kZGJfZW50cnkoaGEsIGRkYl9pbmRleCwgZndfZGRiX2VudHJ5X2RtYSk7CiAKLXFsYTR4eHhfc2VuZF90Z3RzX2V4aXQ6CitleGl0X3NlbmRfdGd0czoKIAlkbWFfZnJlZV9jb2hlcmVudCgmaGEtPnBkZXYtPmRldiwgc2l6ZW9mKCpmd19kZGJfZW50cnkpLAogCQkJICBmd19kZGJfZW50cnksIGZ3X2RkYl9lbnRyeV9kbWEpOworZXhpdF9zZW5kX3RndHNfbm9fZnJlZToKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X252cmFtLmMgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfbnZyYW0uYwppbmRleCA3ZmUwNDgyLi5mMGQwZmJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfbnZyYW0uYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfbnZyYW0uYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAvKiBIYXJkd2FyZV9sb2NrIG11c3QgYmUgc2V0IGJlZm9yZSBjYWxsaW5nICovCiB1MTYgcmRfbnZyYW1fd29yZChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqIGhhLCBpbnQgb2Zmc2V0KQogewotCXUxNiB2YWw7CisJdTE2IHZhbCA9IDA7CiAKIAkvKiBOT1RFOiBOVlJBTSB1c2VzIGhhbGYtd29yZCBhZGRyZXNzZXMgKi8KIAllZXByb21fcmVhZHdvcmQob2Zmc2V0LCAmdmFsLCBoYSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfbnZyYW0uaCBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9udnJhbS5oCmluZGV4IGI0N2I0ZmMuLjdhOGZjNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9udnJhbS5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9udnJhbS5oCkBAIC04LDkgKzgsOSBAQAogI2lmbmRlZiBfUUw0WE5WUk1fSF8KICNkZWZpbmUgX1FMNFhOVlJNX0hfCiAKLS8qCisvKioKICAqIEFNMjlMViBGbGFzaCBkZWZpbml0aW9ucwotICovCisgKiovCiAjZGVmaW5lIEZNOTNDNTZBX1NJWkVfOAkgMHgxMDAKICNkZWZpbmUgRk05M0M1NkFfU0laRV8xNiAweDgwCiAjZGVmaW5lIEZNOTNDNjZBX1NJWkVfOAkgMHgyMDAKQEAgLTE5LDcgKzE5LDcgQEAKIAogI2RlZmluZQkgRk05M0M1NkFfU1RBUlQJICAgICAgMHgxCiAKLS8vIENvbW1hbmRzCisvKiBDb21tYW5kcyAqLwogI2RlZmluZQkgRk05M0M1NkFfUkVBRAkgICAgICAweDIKICNkZWZpbmUJIEZNOTNDNTZBX1dFTgkgICAgICAweDAKICNkZWZpbmUJIEZNOTNDNTZBX1dSSVRFCSAgICAgIDB4MQpAQCAtNjIsOSArNjIsOSBAQAogI2RlZmluZQkgQVVCVVJOX0VFUFJPTV9DTEtfUklTRQkgICAgMHgxCiAjZGVmaW5lCSBBVUJVUk5fRUVQUk9NX0NMS19GQUxMCSAgICAweDAKIAotLyogKi8KKy8qKi8KIC8qIEVFUFJPTSBmb3JtYXQgKi8KLS8qICovCisvKiovCiBzdHJ1Y3QgYmlvc19wYXJhbXMgewogCXVpbnQxNl90IFNwaW5VcERlbGF5OjE7CiAJdWludDE2X3QgQklPU0Rpc2FibGU6MTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9ueC5jIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X254LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UxMTlhZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9ueC5jCkBAIC0wLDAgKzEsMjMyMSBAQAorLyoKKyAqIFFMb2dpYyBpU0NTSSBIQkEgRHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMDkgUUxvZ2ljIENvcnBvcmF0aW9uCisgKgorICogU2VlIExJQ0VOU0UucWxhNHh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSAicWw0X2RlZi5oIgorI2luY2x1ZGUgInFsNF9nbGJsLmgiCisKKyNkZWZpbmUgTUFTSyhuKQkJRE1BX0JJVF9NQVNLKG4pCisjZGVmaW5lIE1OX1dJTihhZGRyKQkoKChhZGRyICYgMHgxZmMwMDAwKSA+PiAxKSB8ICgoYWRkciA+PiAyNSkgJiAweDNmZikpCisjZGVmaW5lIE9DTV9XSU4oYWRkcikJKCgoYWRkciAmIDB4MWZmMDAwMCkgPj4gMSkgfCAoKGFkZHIgPj4gMjUpICYgMHgzZmYpKQorI2RlZmluZSBNU19XSU4oYWRkcikJKGFkZHIgJiAweDBmZmMwMDAwKQorI2RlZmluZSBRTEE4MlhYX1BDSV9NTl8yTQkoMCkKKyNkZWZpbmUgUUxBODJYWF9QQ0lfTVNfMk0JKDB4ODAwMDApCisjZGVmaW5lIFFMQTgyWFhfUENJX09DTTBfMk0JKDB4YzAwMDApCisjZGVmaW5lIFZBTElEX09DTV9BRERSKGFkZHIpCSgoKGFkZHIpICYgMHgzZjgwMCkgIT0gMHgzZjgwMCkKKyNkZWZpbmUgR0VUX01FTV9PRkZTXzJNKGFkZHIpCShhZGRyICYgTUFTSygxOCkpCisKKy8qIENSQiB3aW5kb3cgcmVsYXRlZCAqLworI2RlZmluZSBDUkJfQkxLKG9mZikJKChvZmYgPj4gMjApICYgMHgzZikKKyNkZWZpbmUgQ1JCX1NVQkJMSyhvZmYpCSgob2ZmID4+IDE2KSAmIDB4ZikKKyNkZWZpbmUgQ1JCX1dJTkRPV18yTQkoMHgxMzAwNjApCisjZGVmaW5lIENSQl9ISShvZmYpCSgocWxhNF84eHh4X2NyYl9odWJfYWd0W0NSQl9CTEsob2ZmKV0gPDwgMjApIHwgXAorCQkJKChvZmYpICYgMHhmMDAwMCkpCisjZGVmaW5lIFFMQTgyWFhfUENJX0NBTVFNXzJNX0VORAkoMHgwNDgwMDgwMFVMKQorI2RlZmluZSBRTEE4MlhYX1BDSV9DQU1RTV8yTV9CQVNFCSgweDAwMGZmODAwVUwpCisjZGVmaW5lIENSQl9JTkRJUkVDVF8yTQkJCSgweDFlMDAwMFVMKQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCitxbGE0Xzh4eHhfcGNpX2Jhc2Vfb2Zmc2V0ZnNldChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsIHVuc2lnbmVkIGxvbmcgb2ZmKQoreworCWlmICgob2ZmIDwgaGEtPmZpcnN0X3BhZ2VfZ3JvdXBfZW5kKSAmJgorCSAgICAob2ZmID49IGhhLT5maXJzdF9wYWdlX2dyb3VwX3N0YXJ0KSkKKwkJcmV0dXJuICh2b2lkIF9faW9tZW0gKikoaGEtPm54X3BjaWJhc2UgKyBvZmYpOworCisJcmV0dXJuIE5VTEw7Cit9CisKKyNkZWZpbmUgTUFYX0NSQl9YRk9STSA2MAorc3RhdGljIHVuc2lnbmVkIGxvbmcgY3JiX2FkZHJfeGZvcm1bTUFYX0NSQl9YRk9STV07CitzdGF0aWMgaW50IHFsYTRfOHh4eF9jcmJfdGFibGVfaW5pdGlhbGl6ZWQ7CisKKyNkZWZpbmUgcWxhNF84eHh4X2NyYl9hZGRyX3RyYW5zZm9ybShuYW1lKSBcCisJKGNyYl9hZGRyX3hmb3JtW1FMQTgyWFhfSFdfUFhfTUFQX0NSQl8jI25hbWVdID0gXAorCSBRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl8jI25hbWUgPDwgMjApCitzdGF0aWMgdm9pZAorcWxhNF84eHh4X2NyYl9hZGRyX3RyYW5zZm9ybV9zZXR1cCh2b2lkKQoreworCXFsYTRfOHh4eF9jcmJfYWRkcl90cmFuc2Zvcm0oWERNQSk7CisJcWxhNF84eHh4X2NyYl9hZGRyX3RyYW5zZm9ybShUSU1SKTsKKwlxbGE0Xzh4eHhfY3JiX2FkZHJfdHJhbnNmb3JtKFNSRSk7CisJcWxhNF84eHh4X2NyYl9hZGRyX3RyYW5zZm9ybShTUU4zKTsKKwlxbGE0Xzh4eHhfY3JiX2FkZHJfdHJhbnNmb3JtKFNRTjIpOworCXFsYTRfOHh4eF9jcmJfYWRkcl90cmFuc2Zvcm0oU1FOMSk7CisJcWxhNF84eHh4X2NyYl9hZGRyX3RyYW5zZm9ybShTUU4wKTsKKwlxbGE0Xzh4eHhfY3JiX2FkZHJfdHJhbnNmb3JtKFNRUzMpOworCXFsYTRfOHh4eF9jcmJfYWRkcl90cmFuc2Zvcm0oU1FTMik7CisJcWxhNF84eHh4X2NyYl9hZGRyX3RyYW5zZm9ybShTUVMxKTsKKwlxbGE0Xzh4eHhfY3JiX2FkZHJfdHJhbnNmb3JtKFNRUzApOworCXFsYTRfOHh4eF9jcmJfYWRkcl90cmFuc2Zvcm0oUlBNWDcpOworCXFsYTRfOHh4eF9jcmJfYWRkcl90cmFuc2Zvcm0oUlBNWDYpOworCXFsYTRfOHh4eF9jcmJfYWRkcl90cmFuc2Zvcm0oUlBNWDUpOworCXFsYTRfOHh4eF9jcmJfYWRkcl90cmFuc2Zvcm0oUlBNWDQpOworCXFsYTRfOHh4eF9jcmJfYWRkcl90cmFuc2Zvcm0oUlBNWDMpOworCXFsYTRfOHh4eF9jcmJfYWRkcl90cmFuc2Zvcm0oUlBNWDIpOworCXFsYTRfOHh4eF9jcmJfYWRkcl90cmFuc2Zvcm0oUlBNWDEpOworCXFsYTRfOHh4eF9jcmJfYWRkcl90cmFuc2Zvcm0oUlBNWDApOworCXFsYTRfOHh4eF9jcmJfYWRkcl90cmFuc2Zvcm0oUk9NVVNCKTsKKwlxbGE0Xzh4eHhfY3JiX2FkZHJfdHJhbnNmb3JtKFNOKTsKKwlxbGE0Xzh4eHhfY3JiX2FkZHJfdHJhbnNmb3JtKFFNTik7CisJcWxhNF84eHh4X2NyYl9hZGRyX3RyYW5zZm9ybShRTVMpOworCXFsYTRfOHh4eF9jcmJfYWRkcl90cmFuc2Zvcm0oUEdOSSk7CisJcWxhNF84eHh4X2NyYl9hZGRyX3RyYW5zZm9ybShQR05EKTsKKwlxbGE0Xzh4eHhfY3JiX2FkZHJfdHJhbnNmb3JtKFBHTjMpOworCXFsYTRfOHh4eF9jcmJfYWRkcl90cmFuc2Zvcm0oUEdOMik7CisJcWxhNF84eHh4X2NyYl9hZGRyX3RyYW5zZm9ybShQR04xKTsKKwlxbGE0Xzh4eHhfY3JiX2FkZHJfdHJhbnNmb3JtKFBHTjApOworCXFsYTRfOHh4eF9jcmJfYWRkcl90cmFuc2Zvcm0oUEdTSSk7CisJcWxhNF84eHh4X2NyYl9hZGRyX3RyYW5zZm9ybShQR1NEKTsKKwlxbGE0Xzh4eHhfY3JiX2FkZHJfdHJhbnNmb3JtKFBHUzMpOworCXFsYTRfOHh4eF9jcmJfYWRkcl90cmFuc2Zvcm0oUEdTMik7CisJcWxhNF84eHh4X2NyYl9hZGRyX3RyYW5zZm9ybShQR1MxKTsKKwlxbGE0Xzh4eHhfY3JiX2FkZHJfdHJhbnNmb3JtKFBHUzApOworCXFsYTRfOHh4eF9jcmJfYWRkcl90cmFuc2Zvcm0oUFMpOworCXFsYTRfOHh4eF9jcmJfYWRkcl90cmFuc2Zvcm0oUEgpOworCXFsYTRfOHh4eF9jcmJfYWRkcl90cmFuc2Zvcm0oTklVKTsKKwlxbGE0Xzh4eHhfY3JiX2FkZHJfdHJhbnNmb3JtKEkyUSk7CisJcWxhNF84eHh4X2NyYl9hZGRyX3RyYW5zZm9ybShFRyk7CisJcWxhNF84eHh4X2NyYl9hZGRyX3RyYW5zZm9ybShNTik7CisJcWxhNF84eHh4X2NyYl9hZGRyX3RyYW5zZm9ybShNUyk7CisJcWxhNF84eHh4X2NyYl9hZGRyX3RyYW5zZm9ybShDQVMyKTsKKwlxbGE0Xzh4eHhfY3JiX2FkZHJfdHJhbnNmb3JtKENBUzEpOworCXFsYTRfOHh4eF9jcmJfYWRkcl90cmFuc2Zvcm0oQ0FTMCk7CisJcWxhNF84eHh4X2NyYl9hZGRyX3RyYW5zZm9ybShDQU0pOworCXFsYTRfOHh4eF9jcmJfYWRkcl90cmFuc2Zvcm0oQzJDMSk7CisJcWxhNF84eHh4X2NyYl9hZGRyX3RyYW5zZm9ybShDMkMwKTsKKwlxbGE0Xzh4eHhfY3JiX2FkZHJfdHJhbnNmb3JtKFNNQik7CisJcWxhNF84eHh4X2NyYl9hZGRyX3RyYW5zZm9ybShPQ00wKTsKKwlxbGE0Xzh4eHhfY3JiX2FkZHJfdHJhbnNmb3JtKEkyQzApOworCisJcWxhNF84eHh4X2NyYl90YWJsZV9pbml0aWFsaXplZCA9IDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3JiXzEyOE1fMk1fYmxvY2tfbWFwIGNyYl8xMjhNXzJNX21hcFs2NF0gPSB7CisJe3t7MCwgMCwgICAgICAgICAwLCAgICAgICAgIDB9IH0gfSwJCS8qIDA6IFBDSSAqLworCXt7ezEsIDB4MDEwMDAwMCwgMHgwMTAyMDAwLCAweDEyMDAwMH0sCS8qIDE6IFBDSUUgKi8KKwkJezEsIDB4MDExMDAwMCwgMHgwMTIwMDAwLCAweDEzMDAwMH0sCisJCXsxLCAweDAxMjAwMDAsIDB4MDEyMjAwMCwgMHgxMjQwMDB9LAorCQl7MSwgMHgwMTMwMDAwLCAweDAxMzIwMDAsIDB4MTI2MDAwfSwKKwkJezEsIDB4MDE0MDAwMCwgMHgwMTQyMDAwLCAweDEyODAwMH0sCisJCXsxLCAweDAxNTAwMDAsIDB4MDE1MjAwMCwgMHgxMmEwMDB9LAorCQl7MSwgMHgwMTYwMDAwLCAweDAxNzAwMDAsIDB4MTEwMDAwfSwKKwkJezEsIDB4MDE3MDAwMCwgMHgwMTcyMDAwLCAweDEyZTAwMH0sCisJCXswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCQl7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkJezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJCXswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCQl7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkJezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJCXsxLCAweDAxZTAwMDAsIDB4MDFlMDgwMCwgMHgxMjIwMDB9LAorCQl7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSB9IH0sCisJe3t7MSwgMHgwMjAwMDAwLCAweDAyMTAwMDAsIDB4MTgwMDAwfSB9IH0sLyogMjogTU4gKi8KKwl7e3swLCAwLCAgICAgICAgIDAsICAgICAgICAgMH0gfSB9LAkgICAgLyogMzogKi8KKwl7e3sxLCAweDA0MDAwMDAsIDB4MDQwMTAwMCwgMHgxNjkwMDB9IH0gfSwvKiA0OiBQMk5SMSAqLworCXt7ezEsIDB4MDUwMDAwMCwgMHgwNTEwMDAwLCAweDE0MDAwMH0gfSB9LC8qIDU6IFNSRSAgICovCisJe3t7MSwgMHgwNjAwMDAwLCAweDA2MTAwMDAsIDB4MWMwMDAwfSB9IH0sLyogNjogTklVICAgKi8KKwl7e3sxLCAweDA3MDAwMDAsIDB4MDcwNDAwMCwgMHgxYjgwMDB9IH0gfSwvKiA3OiBRTSAgICAqLworCXt7ezEsIDB4MDgwMDAwMCwgMHgwODAyMDAwLCAweDE3MDAwMH0sICAvKiA4OiBTUU0wICAqLworCQl7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkJezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJCXswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCQl7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkJezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJCXswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCQl7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkJezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJCXswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCQl7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkJezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJCXswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCQl7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkJezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJCXsxLCAweDA4ZjAwMDAsIDB4MDhmMjAwMCwgMHgxNzIwMDB9IH0gfSwKKwl7e3sxLCAweDA5MDAwMDAsIDB4MDkwMjAwMCwgMHgxNzQwMDB9LAkvKiA5OiBTUU0xKi8KKwkJezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJCXswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCQl7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkJezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJCXswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCQl7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkJezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJCXswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCQl7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkJezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJCXswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCQl7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkJezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJCXswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCQl7MSwgMHgwOWYwMDAwLCAweDA5ZjIwMDAsIDB4MTc2MDAwfSB9IH0sCisJe3t7MCwgMHgwYTAwMDAwLCAweDBhMDIwMDAsIDB4MTc4MDAwfSwJLyogMTA6IFNRTTIqLworCQl7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkJezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJCXswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCQl7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkJezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJCXswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCQl7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkJezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJCXswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCQl7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkJezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJCXswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCQl7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkJezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJCXsxLCAweDBhZjAwMDAsIDB4MGFmMjAwMCwgMHgxN2EwMDB9IH0gfSwKKwl7e3swLCAweDBiMDAwMDAsIDB4MGIwMjAwMCwgMHgxN2MwMDB9LAkvKiAxMTogU1FNMyovCisJCXswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCQl7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkJezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJCXswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCQl7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkJezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJCXswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCQl7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkJezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJCXswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCQl7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkJezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJCXswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCQl7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkJezEsIDB4MGJmMDAwMCwgMHgwYmYyMDAwLCAweDE3ZTAwMH0gfSB9LAorCXt7ezEsIDB4MGMwMDAwMCwgMHgwYzA0MDAwLCAweDFkNDAwMH0gfSB9LC8qIDEyOiBJMlEgKi8KKwl7e3sxLCAweDBkMDAwMDAsIDB4MGQwNDAwMCwgMHgxYTQwMDB9IH0gfSwvKiAxMzogVE1SICovCisJe3t7MSwgMHgwZTAwMDAwLCAweDBlMDQwMDAsIDB4MWEwMDAwfSB9IH0sLyogMTQ6IFJPTVVTQiAqLworCXt7ezEsIDB4MGYwMDAwMCwgMHgwZjAxMDAwLCAweDE2NDAwMH0gfSB9LC8qIDE1OiBQRUc0ICovCisJe3t7MCwgMHgxMDAwMDAwLCAweDEwMDQwMDAsIDB4MWE4MDAwfSB9IH0sLyogMTY6IFhETUEgKi8KKwl7e3sxLCAweDExMDAwMDAsIDB4MTEwMTAwMCwgMHgxNjAwMDB9IH0gfSwvKiAxNzogUEVHMCAqLworCXt7ezEsIDB4MTIwMDAwMCwgMHgxMjAxMDAwLCAweDE2MTAwMH0gfSB9LC8qIDE4OiBQRUcxICovCisJe3t7MSwgMHgxMzAwMDAwLCAweDEzMDEwMDAsIDB4MTYyMDAwfSB9IH0sLyogMTk6IFBFRzIgKi8KKwl7e3sxLCAweDE0MDAwMDAsIDB4MTQwMTAwMCwgMHgxNjMwMDB9IH0gfSwvKiAyMDogUEVHMyAqLworCXt7ezEsIDB4MTUwMDAwMCwgMHgxNTAxMDAwLCAweDE2NTAwMH0gfSB9LC8qIDIxOiBQMk5EICovCisJe3t7MSwgMHgxNjAwMDAwLCAweDE2MDEwMDAsIDB4MTY2MDAwfSB9IH0sLyogMjI6IFAyTkkgKi8KKwl7e3swLCAwLCAgICAgICAgIDAsICAgICAgICAgMH0gfSB9LAkvKiAyMzogKi8KKwl7e3swLCAwLCAgICAgICAgIDAsICAgICAgICAgMH0gfSB9LAkvKiAyNDogKi8KKwl7e3swLCAwLCAgICAgICAgIDAsICAgICAgICAgMH0gfSB9LAkvKiAyNTogKi8KKwl7e3swLCAwLCAgICAgICAgIDAsICAgICAgICAgMH0gfSB9LAkvKiAyNjogKi8KKwl7e3swLCAwLCAgICAgICAgIDAsICAgICAgICAgMH0gfSB9LAkvKiAyNzogKi8KKwl7e3swLCAwLCAgICAgICAgIDAsICAgICAgICAgMH0gfSB9LAkvKiAyODogKi8KKwl7e3sxLCAweDFkMDAwMDAsIDB4MWQxMDAwMCwgMHgxOTAwMDB9IH0gfSwvKiAyOTogTVMgKi8KKwl7e3sxLCAweDFlMDAwMDAsIDB4MWUwMTAwMCwgMHgxNmEwMDB9IH0gfSwvKiAzMDogUDJOUjIgKi8KKwl7e3sxLCAweDFmMDAwMDAsIDB4MWYxMDAwMCwgMHgxNTAwMDB9IH0gfSwvKiAzMTogRVBHICovCisJe3t7MH0gfSB9LAkJCQkvKiAzMjogUENJICovCisJe3t7MSwgMHgyMTAwMDAwLCAweDIxMDIwMDAsIDB4MTIwMDAwfSwJLyogMzM6IFBDSUUgKi8KKwkJezEsIDB4MjExMDAwMCwgMHgyMTIwMDAwLCAweDEzMDAwMH0sCisJCXsxLCAweDIxMjAwMDAsIDB4MjEyMjAwMCwgMHgxMjQwMDB9LAorCQl7MSwgMHgyMTMwMDAwLCAweDIxMzIwMDAsIDB4MTI2MDAwfSwKKwkJezEsIDB4MjE0MDAwMCwgMHgyMTQyMDAwLCAweDEyODAwMH0sCisJCXsxLCAweDIxNTAwMDAsIDB4MjE1MjAwMCwgMHgxMmEwMDB9LAorCQl7MSwgMHgyMTYwMDAwLCAweDIxNzAwMDAsIDB4MTEwMDAwfSwKKwkJezEsIDB4MjE3MDAwMCwgMHgyMTcyMDAwLCAweDEyZTAwMH0sCisJCXswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCQl7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkJezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJCXswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCQl7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkJezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJCXswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCQl7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSB9IH0sCisJe3t7MSwgMHgyMjAwMDAwLCAweDIyMDQwMDAsIDB4MWIwMDAwfSB9IH0sLyogMzQ6IENBTSAqLworCXt7ezB9IH0gfSwJCQkJLyogMzU6ICovCisJe3t7MH0gfSB9LAkJCQkvKiAzNjogKi8KKwl7e3swfSB9IH0sCQkJCS8qIDM3OiAqLworCXt7ezB9IH0gfSwJCQkJLyogMzg6ICovCisJe3t7MH0gfSB9LAkJCQkvKiAzOTogKi8KKwl7e3sxLCAweDI4MDAwMDAsIDB4MjgwNDAwMCwgMHgxYTQwMDB9IH0gfSwvKiA0MDogVE1SICovCisJe3t7MSwgMHgyOTAwMDAwLCAweDI5MDEwMDAsIDB4MTZiMDAwfSB9IH0sLyogNDE6IFAyTlIzICovCisJe3t7MSwgMHgyYTAwMDAwLCAweDJhMDA0MDAsIDB4MWFjNDAwfSB9IH0sLyogNDI6IFJQTVgxICovCisJe3t7MSwgMHgyYjAwMDAwLCAweDJiMDA0MDAsIDB4MWFjODAwfSB9IH0sLyogNDM6IFJQTVgyICovCisJe3t7MSwgMHgyYzAwMDAwLCAweDJjMDA0MDAsIDB4MWFjYzAwfSB9IH0sLyogNDQ6IFJQTVgzICovCisJe3t7MSwgMHgyZDAwMDAwLCAweDJkMDA0MDAsIDB4MWFkMDAwfSB9IH0sLyogNDU6IFJQTVg0ICovCisJe3t7MSwgMHgyZTAwMDAwLCAweDJlMDA0MDAsIDB4MWFkNDAwfSB9IH0sLyogNDY6IFJQTVg1ICovCisJe3t7MSwgMHgyZjAwMDAwLCAweDJmMDA0MDAsIDB4MWFkODAwfSB9IH0sLyogNDc6IFJQTVg2ICovCisJe3t7MSwgMHgzMDAwMDAwLCAweDMwMDA0MDAsIDB4MWFkYzAwfSB9IH0sLyogNDg6IFJQTVg3ICovCisJe3t7MCwgMHgzMTAwMDAwLCAweDMxMDQwMDAsIDB4MWE4MDAwfSB9IH0sLyogNDk6IFhETUEgKi8KKwl7e3sxLCAweDMyMDAwMDAsIDB4MzIwNDAwMCwgMHgxZDQwMDB9IH0gfSwvKiA1MDogSTJRICovCisJe3t7MSwgMHgzMzAwMDAwLCAweDMzMDQwMDAsIDB4MWEwMDAwfSB9IH0sLyogNTE6IFJPTVVTQiAqLworCXt7ezB9IH0gfSwJCQkJLyogNTI6ICovCisJe3t7MSwgMHgzNTAwMDAwLCAweDM1MDA0MDAsIDB4MWFjMDAwfSB9IH0sLyogNTM6IFJQTVgwICovCisJe3t7MSwgMHgzNjAwMDAwLCAweDM2MDA0MDAsIDB4MWFlMDAwfSB9IH0sLyogNTQ6IFJQTVg4ICovCisJe3t7MSwgMHgzNzAwMDAwLCAweDM3MDA0MDAsIDB4MWFlNDAwfSB9IH0sLyogNTU6IFJQTVg5ICovCisJe3t7MSwgMHgzODAwMDAwLCAweDM4MDQwMDAsIDB4MWQwMDAwfSB9IH0sLyogNTY6IE9DTTAgKi8KKwl7e3sxLCAweDM5MDAwMDAsIDB4MzkwNDAwMCwgMHgxYjQwMDB9IH0gfSwvKiA1NzogQ1JZUFRPICovCisJe3t7MSwgMHgzYTAwMDAwLCAweDNhMDQwMDAsIDB4MWQ4MDAwfSB9IH0sLyogNTg6IFNNQiAqLworCXt7ezB9IH0gfSwJCQkJLyogNTk6IEkyQzAgKi8KKwl7e3swfSB9IH0sCQkJCS8qIDYwOiBJMkMxICovCisJe3t7MSwgMHgzZDAwMDAwLCAweDNkMDQwMDAsIDB4MWRjMDAwfSB9IH0sLyogNjE6IExQQyAqLworCXt7ezEsIDB4M2UwMDAwMCwgMHgzZTAxMDAwLCAweDE2NzAwMH0gfSB9LC8qIDYyOiBQMk5DICovCisJe3t7MSwgMHgzZjAwMDAwLCAweDNmMDEwMDAsIDB4MTY4MDAwfSB9IH0JLyogNjM6IFAyTlIwICovCit9OworCisvKgorICogdG9wIDEyIGJpdHMgb2YgY3JiIGludGVybmFsIGFkZHJlc3MgKGh1YiwgYWdlbnQpCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBxbGE0Xzh4eHhfY3JiX2h1Yl9hZ3RbNjRdID0geworCTAsCisJUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfUFMsCisJUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfTU4sCisJUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfTVMsCisJMCwKKwlRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9TUkUsCisJUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfTklVLAorCVFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1FNTiwKKwlRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9TUU4wLAorCVFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1NRTjEsCisJUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfU1FOMiwKKwlRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9TUU4zLAorCVFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX0kyUSwKKwlRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9USU1SLAorCVFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1JPTVVTQiwKKwlRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9QR040LAorCVFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1hETUEsCisJUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfUEdOMCwKKwlRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9QR04xLAorCVFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1BHTjIsCisJUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfUEdOMywKKwlRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9QR05ELAorCVFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1BHTkksCisJUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfUEdTMCwKKwlRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9QR1MxLAorCVFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1BHUzIsCisJUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfUEdTMywKKwkwLAorCVFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1BHU0ksCisJUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfU04sCisJMCwKKwlRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9FRywKKwkwLAorCVFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1BTLAorCVFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX0NBTSwKKwkwLAorCTAsCisJMCwKKwkwLAorCTAsCisJUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfVElNUiwKKwkwLAorCVFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVgxLAorCVFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVgyLAorCVFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVgzLAorCVFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVg0LAorCVFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVg1LAorCVFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVg2LAorCVFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVg3LAorCVFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1hETUEsCisJUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfSTJRLAorCVFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1JPTVVTQiwKKwkwLAorCVFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVgwLAorCVFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVg4LAorCVFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVg5LAorCVFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX09DTTAsCisJMCwKKwlRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9TTUIsCisJUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfSTJDMCwKKwlRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9JMkMxLAorCTAsCisJUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfUEdOQywKKwkwLAorfTsKKworLyogRGV2aWNlIHN0YXRlcyAqLworc3RhdGljIGNoYXIgKnFkZXZfc3RhdGVbXSA9IHsKKwkiVW5rbm93biIsCisJIkNvbGQiLAorCSJJbml0aWFsaXppbmciLAorCSJSZWFkeSIsCisJIk5lZWQgUmVzZXQiLAorCSJOZWVkIFF1aWVzY2VudCIsCisJIkZhaWxlZCIsCisJIlF1aWVzY2VudCIsCit9OworCisvKgorICogSW46ICdvZmYnIGlzIG9mZnNldCBmcm9tIENSQiBzcGFjZSBpbiAxMjhNIHBjaSBtYXAKKyAqIE91dDogJ29mZicgaXMgMk0gcGNpIG1hcCBhZGRyCisgKiBzaWRlIGVmZmVjdDogbG9jayBjcmIgd2luZG93CisgKi8KK3N0YXRpYyB2b2lkCitxbGE0Xzh4eHhfcGNpX3NldF9jcmJ3aW5kb3dfMk0oc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLCB1bG9uZyAqb2ZmKQoreworCXUzMiB3aW5fcmVhZDsKKworCWhhLT5jcmJfd2luID0gQ1JCX0hJKCpvZmYpOworCXdyaXRlbChoYS0+Y3JiX3dpbiwKKwkJKHZvaWQgX19pb21lbSAqKShDUkJfV0lORE9XXzJNICsgaGEtPm54X3BjaWJhc2UpKTsKKworCS8qIFJlYWQgYmFjayB2YWx1ZSB0byBtYWtlIHN1cmUgd3JpdGUgaGFzIGdvbmUgdGhyb3VnaCBiZWZvcmUgdHJ5aW5nCisJKiB0byB1c2UgaXQuICovCisJd2luX3JlYWQgPSByZWFkbCgodm9pZCBfX2lvbWVtICopKENSQl9XSU5ET1dfMk0gKyBoYS0+bnhfcGNpYmFzZSkpOworCWlmICh3aW5fcmVhZCAhPSBoYS0+Y3JiX3dpbikgeworCQlERUJVRzIocWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkgICAgIiVzOiBXcml0dGVuIGNyYndpbiAoMHgleCkgIT0gUmVhZCBjcmJ3aW4gKDB4JXgpLCIKKwkJICAgICIgb2ZmPTB4JWx4XG4iLCBfX2Z1bmNfXywgaGEtPmNyYl93aW4sIHdpbl9yZWFkLCAqb2ZmKSk7CisJfQorCSpvZmYgPSAoKm9mZiAmIE1BU0soMTYpKSArIENSQl9JTkRJUkVDVF8yTSArIGhhLT5ueF9wY2liYXNlOworfQorCit2b2lkCitxbGE0Xzh4eHhfd3JfMzIoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLCB1bG9uZyBvZmYsIHUzMiBkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCWludCBydjsKKworCXJ2ID0gcWxhNF84eHh4X3BjaV9nZXRfY3JiX2FkZHJfMk0oaGEsICZvZmYpOworCisJQlVHX09OKHJ2ID09IC0xKTsKKworCWlmIChydiA9PSAxKSB7CisJCXdyaXRlX2xvY2tfaXJxc2F2ZSgmaGEtPmh3X2xvY2ssIGZsYWdzKTsKKwkJcWxhNF84eHh4X2NyYl93aW5fbG9jayhoYSk7CisJCXFsYTRfOHh4eF9wY2lfc2V0X2NyYndpbmRvd18yTShoYSwgJm9mZik7CisJfQorCisJd3JpdGVsKGRhdGEsICh2b2lkIF9faW9tZW0gKilvZmYpOworCisJaWYgKHJ2ID09IDEpIHsKKwkJcWxhNF84eHh4X2NyYl93aW5fdW5sb2NrKGhhKTsKKwkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5od19sb2NrLCBmbGFncyk7CisJfQorfQorCitpbnQKK3FsYTRfOHh4eF9yZF8zMihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsIHVsb25nIG9mZikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwlpbnQgcnY7CisJdTMyIGRhdGE7CisKKwlydiA9IHFsYTRfOHh4eF9wY2lfZ2V0X2NyYl9hZGRyXzJNKGhhLCAmb2ZmKTsKKworCUJVR19PTihydiA9PSAtMSk7CisKKwlpZiAocnYgPT0gMSkgeworCQl3cml0ZV9sb2NrX2lycXNhdmUoJmhhLT5od19sb2NrLCBmbGFncyk7CisJCXFsYTRfOHh4eF9jcmJfd2luX2xvY2soaGEpOworCQlxbGE0Xzh4eHhfcGNpX3NldF9jcmJ3aW5kb3dfMk0oaGEsICZvZmYpOworCX0KKwlkYXRhID0gcmVhZGwoKHZvaWQgX19pb21lbSAqKW9mZik7CisKKwlpZiAocnYgPT0gMSkgeworCQlxbGE0Xzh4eHhfY3JiX3dpbl91bmxvY2soaGEpOworCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmh3X2xvY2ssIGZsYWdzKTsKKwl9CisJcmV0dXJuIGRhdGE7Cit9CisKKyNkZWZpbmUgQ1JCX1dJTl9MT0NLX1RJTUVPVVQgMTAwMDAwMDAwCisKK2ludCBxbGE0Xzh4eHhfY3JiX3dpbl9sb2NrKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK3sKKwlpbnQgaTsKKwlpbnQgZG9uZSA9IDAsIHRpbWVvdXQgPSAwOworCisJd2hpbGUgKCFkb25lKSB7CisJCS8qIGFjcXVpcmUgc2VtYXBob3JlMyBmcm9tIFBDSSBIVyBibG9jayAqLworCQlkb25lID0gcWxhNF84eHh4X3JkXzMyKGhhLCBRTEE4MlhYX1BDSUVfUkVHKFBDSUVfU0VNN19MT0NLKSk7CisJCWlmIChkb25lID09IDEpCisJCQlicmVhazsKKwkJaWYgKHRpbWVvdXQgPj0gQ1JCX1dJTl9MT0NLX1RJTUVPVVQpCisJCQlyZXR1cm4gLTE7CisKKwkJdGltZW91dCsrOworCisJCS8qIFlpZWxkIENQVSAqLworCQlpZiAoIWluX2ludGVycnVwdCgpKQorCQkJc2NoZWR1bGUoKTsKKwkJZWxzZSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykKKwkJCQljcHVfcmVsYXgoKTsgICAgLypUaGlzIGEgbm9wIGluc3RyIG9uIGkzODYqLworCQl9CisJfQorCXFsYTRfOHh4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfV0lOX0xPQ0tfSUQsIGhhLT5mdW5jX251bSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcWxhNF84eHh4X2NyYl93aW5fdW5sb2NrKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK3sKKwlxbGE0Xzh4eHhfcmRfMzIoaGEsIFFMQTgyWFhfUENJRV9SRUcoUENJRV9TRU03X1VOTE9DSykpOworfQorCisjZGVmaW5lIElEQ19MT0NLX1RJTUVPVVQgMTAwMDAwMDAwCisKKy8qKgorICogcWxhNF84eHh4X2lkY19sb2NrIC0gaHdfbG9jaworICogQGhhOiBwb2ludGVyIHRvIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogR2VuZXJhbCBwdXJwb3NlIGxvY2sgdXNlZCB0byBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8KKyAqIENSQl9ERVZfU1RBVEUsIENSQl9ERVZfUkVGX0NPVU5ULCBldGMuCisgKiovCitpbnQgcWxhNF84eHh4X2lkY19sb2NrKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK3sKKwlpbnQgaTsKKwlpbnQgZG9uZSA9IDAsIHRpbWVvdXQgPSAwOworCisJd2hpbGUgKCFkb25lKSB7CisJCS8qIGFjcXVpcmUgc2VtYXBob3JlNSBmcm9tIFBDSSBIVyBibG9jayAqLworCQlkb25lID0gcWxhNF84eHh4X3JkXzMyKGhhLCBRTEE4MlhYX1BDSUVfUkVHKFBDSUVfU0VNNV9MT0NLKSk7CisJCWlmIChkb25lID09IDEpCisJCQlicmVhazsKKwkJaWYgKHRpbWVvdXQgPj0gSURDX0xPQ0tfVElNRU9VVCkKKwkJCXJldHVybiAtMTsKKworCQl0aW1lb3V0Kys7CisKKwkJLyogWWllbGQgQ1BVICovCisJCWlmICghaW5faW50ZXJydXB0KCkpCisJCQlzY2hlZHVsZSgpOworCQllbHNlIHsKKwkJCWZvciAoaSA9IDA7IGkgPCAyMDsgaSsrKQorCQkJCWNwdV9yZWxheCgpOyAgICAvKlRoaXMgYSBub3AgaW5zdHIgb24gaTM4NiovCisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcWxhNF84eHh4X2lkY191bmxvY2soc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKQoreworCXFsYTRfOHh4eF9yZF8zMihoYSwgUUxBODJYWF9QQ0lFX1JFRyhQQ0lFX1NFTTVfVU5MT0NLKSk7Cit9CisKK2ludAorcWxhNF84eHh4X3BjaV9nZXRfY3JiX2FkZHJfMk0oc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLCB1bG9uZyAqb2ZmKQoreworCXN0cnVjdCBjcmJfMTI4TV8yTV9zdWJfYmxvY2tfbWFwICptOworCisJaWYgKCpvZmYgPj0gUUxBODJYWF9DUkJfTUFYKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoKm9mZiA+PSBRTEE4MlhYX1BDSV9DQU1RTSAmJiAoKm9mZiA8IFFMQTgyWFhfUENJX0NBTVFNXzJNX0VORCkpIHsKKwkJKm9mZiA9ICgqb2ZmIC0gUUxBODJYWF9QQ0lfQ0FNUU0pICsKKwkJICAgIFFMQTgyWFhfUENJX0NBTVFNXzJNX0JBU0UgKyBoYS0+bnhfcGNpYmFzZTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCpvZmYgPCBRTEE4MlhYX1BDSV9DUkJTUEFDRSkKKwkJcmV0dXJuIC0xOworCisJKm9mZiAtPSBRTEE4MlhYX1BDSV9DUkJTUEFDRTsKKwkvKgorCSAqIFRyeSBkaXJlY3QgbWFwCisJICovCisKKwltID0gJmNyYl8xMjhNXzJNX21hcFtDUkJfQkxLKCpvZmYpXS5zdWJfYmxvY2tbQ1JCX1NVQkJMSygqb2ZmKV07CisKKwlpZiAobS0+dmFsaWQgJiYgKG0tPnN0YXJ0XzEyOE0gPD0gKm9mZikgJiYgKG0tPmVuZF8xMjhNID4gKm9mZikpIHsKKwkJKm9mZiA9ICpvZmYgKyBtLT5zdGFydF8yTSAtIG0tPnN0YXJ0XzEyOE0gKyBoYS0+bnhfcGNpYmFzZTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBOb3QgaW4gZGlyZWN0IG1hcCwgdXNlIGNyYiB3aW5kb3cKKwkgKi8KKwlyZXR1cm4gMTsKK30KKworLyogIFBDSSBXaW5kb3dpbmcgZm9yIEREUiByZWdpb25zLiAgKi8KKyNkZWZpbmUgUUxBODJYWF9BRERSX0lOX1JBTkdFKGFkZHIsIGxvdywgaGlnaCkgICAgICAgICAgICBcCisJKCgoYWRkcikgPD0gKGhpZ2gpKSAmJiAoKGFkZHIpID49IChsb3cpKSkKKworLyoKKyogY2hlY2sgbWVtb3J5IGFjY2VzcyBib3VuZGFyeS4KKyogdXNlZCBieSB0ZXN0IGFnZW50LiBzdXBwb3J0IGRkciBhY2Nlc3Mgb25seSBmb3Igbm93CisqLworc3RhdGljIHVuc2lnbmVkIGxvbmcKK3FsYTRfOHh4eF9wY2lfbWVtX2JvdW5kX2NoZWNrKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwKKwkJdW5zaWduZWQgbG9uZyBsb25nIGFkZHIsIGludCBzaXplKQoreworCWlmICghUUxBODJYWF9BRERSX0lOX1JBTkdFKGFkZHIsIFFMQTgyWFhfQUREUl9ERFJfTkVULAorCSAgICBRTEE4MlhYX0FERFJfRERSX05FVF9NQVgpIHx8CisJICAgICFRTEE4MlhYX0FERFJfSU5fUkFOR0UoYWRkciArIHNpemUgLSAxLAorCSAgICBRTEE4MlhYX0FERFJfRERSX05FVCwgUUxBODJYWF9BRERSX0REUl9ORVRfTUFYKSB8fAorCSAgICAoKHNpemUgIT0gMSkgJiYgKHNpemUgIT0gMikgJiYgKHNpemUgIT0gNCkgJiYgKHNpemUgIT0gOCkpKSB7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBxbGE0Xzh4eHhfcGNpX3NldF93aW5kb3dfd2FybmluZ19jb3VudDsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcKK3FsYTRfOHh4eF9wY2lfc2V0X3dpbmRvdyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsIHVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyKQoreworCWludCB3aW5kb3c7CisJdTMyIHdpbl9yZWFkOworCisJaWYgKFFMQTgyWFhfQUREUl9JTl9SQU5HRShhZGRyLCBRTEE4MlhYX0FERFJfRERSX05FVCwKKwkgICAgUUxBODJYWF9BRERSX0REUl9ORVRfTUFYKSkgeworCQkvKiBERFIgbmV0d29yayBzaWRlICovCisJCXdpbmRvdyA9IE1OX1dJTihhZGRyKTsKKwkJaGEtPmRkcl9tbl93aW5kb3cgPSB3aW5kb3c7CisJCXFsYTRfOHh4eF93cl8zMihoYSwgaGEtPm1uX3dpbl9jcmIgfAorCQkgICAgUUxBODJYWF9QQ0lfQ1JCU1BBQ0UsIHdpbmRvdyk7CisJCXdpbl9yZWFkID0gcWxhNF84eHh4X3JkXzMyKGhhLCBoYS0+bW5fd2luX2NyYiB8CisJCSAgICBRTEE4MlhYX1BDSV9DUkJTUEFDRSk7CisJCWlmICgod2luX3JlYWQgPDwgMTcpICE9IHdpbmRvdykgeworCQkJcWw0X3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkJIiVzOiBXcml0dGVuIE1Od2luICgweCV4KSAhPSBSZWFkIE1Od2luICgweCV4KVxuIiwKKwkJCV9fZnVuY19fLCB3aW5kb3csIHdpbl9yZWFkKTsKKwkJfQorCQlhZGRyID0gR0VUX01FTV9PRkZTXzJNKGFkZHIpICsgUUxBODJYWF9QQ0lfRERSX05FVDsKKwl9IGVsc2UgaWYgKFFMQTgyWFhfQUREUl9JTl9SQU5HRShhZGRyLCBRTEE4MlhYX0FERFJfT0NNMCwKKwkJCQlRTEE4MlhYX0FERFJfT0NNMF9NQVgpKSB7CisJCXVuc2lnbmVkIGludCB0ZW1wMTsKKwkJLyogaWYgYml0cyAxOToxOCYxNzoxMSBhcmUgb24gKi8KKwkJaWYgKChhZGRyICYgMHgwMGZmODAwKSA9PSAweGZmODAwKSB7CisJCQlwcmludGsoIiVzOiBRTSBhY2Nlc3Mgbm90IGhhbmRsZWQuXG4iLCBfX2Z1bmNfXyk7CisJCQlhZGRyID0gLTFVTDsKKwkJfQorCisJCXdpbmRvdyA9IE9DTV9XSU4oYWRkcik7CisJCWhhLT5kZHJfbW5fd2luZG93ID0gd2luZG93OworCQlxbGE0Xzh4eHhfd3JfMzIoaGEsIGhhLT5tbl93aW5fY3JiIHwKKwkJICAgIFFMQTgyWFhfUENJX0NSQlNQQUNFLCB3aW5kb3cpOworCQl3aW5fcmVhZCA9IHFsYTRfOHh4eF9yZF8zMihoYSwgaGEtPm1uX3dpbl9jcmIgfAorCQkgICAgUUxBODJYWF9QQ0lfQ1JCU1BBQ0UpOworCQl0ZW1wMSA9ICgod2luZG93ICYgMHgxRkYpIDw8IDcpIHwKKwkJICAgICgod2luZG93ICYgMHgwRkZGRTAwMDApID4+IDE3KTsKKwkJaWYgKHdpbl9yZWFkICE9IHRlbXAxKSB7CisJCQlwcmludGsoIiVzOiBXcml0dGVuIE9DTXdpbiAoMHgleCkgIT0gUmVhZCIKKwkJCSAgICAiIE9DTXdpbiAoMHgleClcbiIsIF9fZnVuY19fLCB0ZW1wMSwgd2luX3JlYWQpOworCQl9CisJCWFkZHIgPSBHRVRfTUVNX09GRlNfMk0oYWRkcikgKyBRTEE4MlhYX1BDSV9PQ00wXzJNOworCisJfSBlbHNlIGlmIChRTEE4MlhYX0FERFJfSU5fUkFOR0UoYWRkciwgUUxBODJYWF9BRERSX1FEUl9ORVQsCisJCQkJUUxBODJYWF9QM19BRERSX1FEUl9ORVRfTUFYKSkgeworCQkvKiBRRFIgbmV0d29yayBzaWRlICovCisJCXdpbmRvdyA9IE1TX1dJTihhZGRyKTsKKwkJaGEtPnFkcl9zbl93aW5kb3cgPSB3aW5kb3c7CisJCXFsYTRfOHh4eF93cl8zMihoYSwgaGEtPm1zX3dpbl9jcmIgfAorCQkgICAgUUxBODJYWF9QQ0lfQ1JCU1BBQ0UsIHdpbmRvdyk7CisJCXdpbl9yZWFkID0gcWxhNF84eHh4X3JkXzMyKGhhLAorCQkgICAgIGhhLT5tc193aW5fY3JiIHwgUUxBODJYWF9QQ0lfQ1JCU1BBQ0UpOworCQlpZiAod2luX3JlYWQgIT0gd2luZG93KSB7CisJCQlwcmludGsoIiVzOiBXcml0dGVuIE1Td2luICgweCV4KSAhPSBSZWFkICIKKwkJCSAgICAiTVN3aW4gKDB4JXgpXG4iLCBfX2Z1bmNfXywgd2luZG93LCB3aW5fcmVhZCk7CisJCX0KKwkJYWRkciA9IEdFVF9NRU1fT0ZGU18yTShhZGRyKSArIFFMQTgyWFhfUENJX1FEUl9ORVQ7CisKKwl9IGVsc2UgeworCQkvKgorCQkgKiBwZWcgZ2RiIGZyZXF1ZW50bHkgYWNjZXNzZXMgbWVtb3J5IHRoYXQgZG9lc24ndCBleGlzdCwKKwkJICogdGhpcyBsaW1pdHMgdGhlIGNoaXQgY2hhdCBzbyBkZWJ1Z2dpbmcgaXNuJ3Qgc2xvd2VkIGRvd24uCisJCSAqLworCQlpZiAoKHFsYTRfOHh4eF9wY2lfc2V0X3dpbmRvd193YXJuaW5nX2NvdW50KysgPCA4KSB8fAorCQkgICAgKHFsYTRfOHh4eF9wY2lfc2V0X3dpbmRvd193YXJuaW5nX2NvdW50JTY0ID09IDApKSB7CisJCQlwcmludGsoIiVzOiBXYXJuaW5nOiVzIFVua25vd24gYWRkcmVzcyByYW5nZSFcbiIsCisJCQkgICAgX19mdW5jX18sIERSSVZFUl9OQU1FKTsKKwkJfQorCQlhZGRyID0gLTFVTDsKKwl9CisJcmV0dXJuIGFkZHI7Cit9CisKKy8qIGNoZWNrIGlmIGFkZHJlc3MgaXMgaW4gdGhlIHNhbWUgd2luZG93cyBhcyB0aGUgcHJldmlvdXMgYWNjZXNzICovCitzdGF0aWMgaW50IHFsYTRfOHh4eF9wY2lfaXNfc2FtZV93aW5kb3coc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLAorCQl1bnNpZ25lZCBsb25nIGxvbmcgYWRkcikKK3sKKwlpbnQgd2luZG93OworCXVuc2lnbmVkIGxvbmcgbG9uZyBxZHJfbWF4OworCisJcWRyX21heCA9IFFMQTgyWFhfUDNfQUREUl9RRFJfTkVUX01BWDsKKworCWlmIChRTEE4MlhYX0FERFJfSU5fUkFOR0UoYWRkciwgUUxBODJYWF9BRERSX0REUl9ORVQsCisJICAgIFFMQTgyWFhfQUREUl9ERFJfTkVUX01BWCkpIHsKKwkJLyogRERSIG5ldHdvcmsgc2lkZSAqLworCQlCVUcoKTsJLyogTU4gYWNjZXNzIGNhbiBub3QgY29tZSBoZXJlICovCisJfSBlbHNlIGlmIChRTEE4MlhYX0FERFJfSU5fUkFOR0UoYWRkciwgUUxBODJYWF9BRERSX09DTTAsCisJICAgICBRTEE4MlhYX0FERFJfT0NNMF9NQVgpKSB7CisJCXJldHVybiAxOworCX0gZWxzZSBpZiAoUUxBODJYWF9BRERSX0lOX1JBTkdFKGFkZHIsIFFMQTgyWFhfQUREUl9PQ00xLAorCSAgICAgUUxBODJYWF9BRERSX09DTTFfTUFYKSkgeworCQlyZXR1cm4gMTsKKwl9IGVsc2UgaWYgKFFMQTgyWFhfQUREUl9JTl9SQU5HRShhZGRyLCBRTEE4MlhYX0FERFJfUURSX05FVCwKKwkgICAgcWRyX21heCkpIHsKKwkJLyogUURSIG5ldHdvcmsgc2lkZSAqLworCQl3aW5kb3cgPSAoKGFkZHIgLSBRTEE4MlhYX0FERFJfUURSX05FVCkgPj4gMjIpICYgMHgzZjsKKwkJaWYgKGhhLT5xZHJfc25fd2luZG93ID09IHdpbmRvdykKKwkJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFsYTRfOHh4eF9wY2lfbWVtX3JlYWRfZGlyZWN0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwKKwkJdTY0IG9mZiwgdm9pZCAqZGF0YSwgaW50IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisJaW50IHJldCA9IDA7CisJdTY0IHN0YXJ0OworCXZvaWQgX19pb21lbSAqbWVtX3B0ciA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBtZW1fYmFzZTsKKwl1bnNpZ25lZCBsb25nIG1lbV9wYWdlOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZoYS0+aHdfbG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBJZiBhdHRlbXB0aW5nIHRvIGFjY2VzcyB1bmtub3duIGFkZHJlc3Mgb3Igc3RyYWRkbGUgaHcgd2luZG93cywKKwkgKiBkbyBub3QgYWNjZXNzLgorCSAqLworCXN0YXJ0ID0gcWxhNF84eHh4X3BjaV9zZXRfd2luZG93KGhhLCBvZmYpOworCWlmICgoc3RhcnQgPT0gLTFVTCkgfHwKKwkgICAgKHFsYTRfOHh4eF9wY2lfaXNfc2FtZV93aW5kb3coaGEsIG9mZiArIHNpemUgLSAxKSA9PSAwKSkgeworCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmh3X2xvY2ssIGZsYWdzKTsKKwkJcHJpbnRrKEtFUk5fRVJSIiVzIG91dCBvZiBib3VuZCBwY2kgbWVtb3J5IGFjY2Vzcy4gIgorCQkJCSJvZmZzZXQgaXMgMHglbGx4XG4iLCBEUklWRVJfTkFNRSwgb2ZmKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWFkZHIgPSBxbGE0Xzh4eHhfcGNpX2Jhc2Vfb2Zmc2V0ZnNldChoYSwgc3RhcnQpOworCWlmICghYWRkcikgeworCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmh3X2xvY2ssIGZsYWdzKTsKKwkJbWVtX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoaGEtPnBkZXYsIDApOworCQltZW1fcGFnZSA9IHN0YXJ0ICYgUEFHRV9NQVNLOworCQkvKiBNYXAgdHdvIHBhZ2VzIHdoZW5ldmVyIHVzZXIgdHJpZXMgdG8gYWNjZXNzIGFkZHJlc3NlcyBpbiB0d28KKwkJICAgY29uc2VjdXRpdmUgcGFnZXMuCisJCSAqLworCQlpZiAobWVtX3BhZ2UgIT0gKChzdGFydCArIHNpemUgLSAxKSAmIFBBR0VfTUFTSykpCisJCQltZW1fcHRyID0gaW9yZW1hcChtZW1fYmFzZSArIG1lbV9wYWdlLCBQQUdFX1NJWkUgKiAyKTsKKwkJZWxzZQorCQkJbWVtX3B0ciA9IGlvcmVtYXAobWVtX2Jhc2UgKyBtZW1fcGFnZSwgUEFHRV9TSVpFKTsKKworCQlpZiAobWVtX3B0ciA9PSBOVUxMKSB7CisJCQkqKHU4ICopZGF0YSA9IDA7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJYWRkciA9IG1lbV9wdHI7CisJCWFkZHIgKz0gc3RhcnQgJiAoUEFHRV9TSVpFIC0gMSk7CisJCXdyaXRlX2xvY2tfaXJxc2F2ZSgmaGEtPmh3X2xvY2ssIGZsYWdzKTsKKwl9CisKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCSoodTggICopZGF0YSA9IHJlYWRiKGFkZHIpOworCQlicmVhazsKKwljYXNlIDI6CisJCSoodTE2ICopZGF0YSA9IHJlYWR3KGFkZHIpOworCQlicmVhazsKKwljYXNlIDQ6CisJCSoodTMyICopZGF0YSA9IHJlYWRsKGFkZHIpOworCQlicmVhazsKKwljYXNlIDg6CisJCSoodTY0ICopZGF0YSA9IHJlYWRxKGFkZHIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtMTsKKwkJYnJlYWs7CisJfQorCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aHdfbG9jaywgZmxhZ3MpOworCisJaWYgKG1lbV9wdHIpCisJCWlvdW5tYXAobWVtX3B0cik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorcWxhNF84eHh4X3BjaV9tZW1fd3JpdGVfZGlyZWN0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwgdTY0IG9mZiwKKwkJdm9pZCAqZGF0YSwgaW50IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisJaW50IHJldCA9IDA7CisJdTY0IHN0YXJ0OworCXZvaWQgX19pb21lbSAqbWVtX3B0ciA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBtZW1fYmFzZTsKKwl1bnNpZ25lZCBsb25nIG1lbV9wYWdlOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZoYS0+aHdfbG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBJZiBhdHRlbXB0aW5nIHRvIGFjY2VzcyB1bmtub3duIGFkZHJlc3Mgb3Igc3RyYWRkbGUgaHcgd2luZG93cywKKwkgKiBkbyBub3QgYWNjZXNzLgorCSAqLworCXN0YXJ0ID0gcWxhNF84eHh4X3BjaV9zZXRfd2luZG93KGhhLCBvZmYpOworCWlmICgoc3RhcnQgPT0gLTFVTCkgfHwKKwkgICAgKHFsYTRfOHh4eF9wY2lfaXNfc2FtZV93aW5kb3coaGEsIG9mZiArIHNpemUgLSAxKSA9PSAwKSkgeworCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmh3X2xvY2ssIGZsYWdzKTsKKwkJcHJpbnRrKEtFUk5fRVJSIiVzIG91dCBvZiBib3VuZCBwY2kgbWVtb3J5IGFjY2Vzcy4gIgorCQkJCSJvZmZzZXQgaXMgMHglbGx4XG4iLCBEUklWRVJfTkFNRSwgb2ZmKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWFkZHIgPSBxbGE0Xzh4eHhfcGNpX2Jhc2Vfb2Zmc2V0ZnNldChoYSwgc3RhcnQpOworCWlmICghYWRkcikgeworCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmh3X2xvY2ssIGZsYWdzKTsKKwkJbWVtX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoaGEtPnBkZXYsIDApOworCQltZW1fcGFnZSA9IHN0YXJ0ICYgUEFHRV9NQVNLOworCQkvKiBNYXAgdHdvIHBhZ2VzIHdoZW5ldmVyIHVzZXIgdHJpZXMgdG8gYWNjZXNzIGFkZHJlc3NlcyBpbiB0d28KKwkJICAgY29uc2VjdXRpdmUgcGFnZXMuCisJCSAqLworCQlpZiAobWVtX3BhZ2UgIT0gKChzdGFydCArIHNpemUgLSAxKSAmIFBBR0VfTUFTSykpCisJCQltZW1fcHRyID0gaW9yZW1hcChtZW1fYmFzZSArIG1lbV9wYWdlLCBQQUdFX1NJWkUqMik7CisJCWVsc2UKKwkJCW1lbV9wdHIgPSBpb3JlbWFwKG1lbV9iYXNlICsgbWVtX3BhZ2UsIFBBR0VfU0laRSk7CisJCWlmIChtZW1fcHRyID09IE5VTEwpCisJCQlyZXR1cm4gLTE7CisKKwkJYWRkciA9IG1lbV9wdHI7CisJCWFkZHIgKz0gc3RhcnQgJiAoUEFHRV9TSVpFIC0gMSk7CisJCXdyaXRlX2xvY2tfaXJxc2F2ZSgmaGEtPmh3X2xvY2ssIGZsYWdzKTsKKwl9CisKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCXdyaXRlYigqKHU4ICopZGF0YSwgYWRkcik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJd3JpdGV3KCoodTE2ICopZGF0YSwgYWRkcik7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJd3JpdGVsKCoodTMyICopZGF0YSwgYWRkcik7CisJCWJyZWFrOworCWNhc2UgODoKKwkJd3JpdGVxKCoodTY0ICopZGF0YSwgYWRkcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC0xOworCQlicmVhazsKKwl9CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5od19sb2NrLCBmbGFncyk7CisJaWYgKG1lbV9wdHIpCisJCWlvdW5tYXAobWVtX3B0cik7CisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBNVFVfRlVER0VfRkFDVE9SIDEwMAorCitzdGF0aWMgdW5zaWduZWQgbG9uZworcWxhNF84eHh4X2RlY29kZV9jcmJfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBiYXNlX2FkZHIsIG9mZnNldCwgcGNpX2Jhc2U7CisKKwlpZiAoIXFsYTRfOHh4eF9jcmJfdGFibGVfaW5pdGlhbGl6ZWQpCisJCXFsYTRfOHh4eF9jcmJfYWRkcl90cmFuc2Zvcm1fc2V0dXAoKTsKKworCXBjaV9iYXNlID0gQUREUl9FUlJPUjsKKwliYXNlX2FkZHIgPSBhZGRyICYgMHhmZmYwMDAwMDsKKwlvZmZzZXQgPSBhZGRyICYgMHgwMDBmZmZmZjsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfQ1JCX1hGT1JNOyBpKyspIHsKKwkJaWYgKGNyYl9hZGRyX3hmb3JtW2ldID09IGJhc2VfYWRkcikgeworCQkJcGNpX2Jhc2UgPSBpIDw8IDIwOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHBjaV9iYXNlID09IEFERFJfRVJST1IpCisJCXJldHVybiBwY2lfYmFzZTsKKwllbHNlCisJCXJldHVybiBwY2lfYmFzZSArIG9mZnNldDsKK30KKworc3RhdGljIGxvbmcgcm9tX21heF90aW1lb3V0ID0gMTAwOworc3RhdGljIGxvbmcgcWxhNF84eHh4X3JvbV9sb2NrX3RpbWVvdXQgPSAxMDA7CisKK3N0YXRpYyBpbnQKK3FsYTRfOHh4eF9yb21fbG9jayhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCit7CisJaW50IGk7CisJaW50IGRvbmUgPSAwLCB0aW1lb3V0ID0gMDsKKworCXdoaWxlICghZG9uZSkgeworCQkvKiBhY3F1aXJlIHNlbWFwaG9yZTIgZnJvbSBQQ0kgSFcgYmxvY2sgKi8KKworCQlkb25lID0gcWxhNF84eHh4X3JkXzMyKGhhLCBRTEE4MlhYX1BDSUVfUkVHKFBDSUVfU0VNMl9MT0NLKSk7CisJCWlmIChkb25lID09IDEpCisJCQlicmVhazsKKwkJaWYgKHRpbWVvdXQgPj0gcWxhNF84eHh4X3JvbV9sb2NrX3RpbWVvdXQpCisJCQlyZXR1cm4gLTE7CisKKwkJdGltZW91dCsrOworCisJCS8qIFlpZWxkIENQVSAqLworCQlpZiAoIWluX2ludGVycnVwdCgpKQorCQkJc2NoZWR1bGUoKTsKKwkJZWxzZSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykKKwkJCQljcHVfcmVsYXgoKTsgICAgLypUaGlzIGEgbm9wIGluc3RyIG9uIGkzODYqLworCQl9CisJfQorCXFsYTRfOHh4eF93cl8zMihoYSwgUUxBODJYWF9ST01fTE9DS19JRCwgUk9NX0xPQ0tfRFJJVkVSKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3FsYTRfOHh4eF9yb21fdW5sb2NrKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK3sKKwlxbGE0Xzh4eHhfcmRfMzIoaGEsIFFMQTgyWFhfUENJRV9SRUcoUENJRV9TRU0yX1VOTE9DSykpOworfQorCitzdGF0aWMgaW50CitxbGE0Xzh4eHhfd2FpdF9yb21fZG9uZShzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCit7CisJbG9uZyB0aW1lb3V0ID0gMDsKKwlsb25nIGRvbmUgPSAwIDsKKworCXdoaWxlIChkb25lID09IDApIHsKKwkJZG9uZSA9IHFsYTRfOHh4eF9yZF8zMihoYSwgUUxBODJYWF9ST01VU0JfR0xCX1NUQVRVUyk7CisJCWRvbmUgJj0gMjsKKwkJdGltZW91dCsrOworCQlpZiAodGltZW91dCA+PSByb21fbWF4X3RpbWVvdXQpIHsKKwkJCXByaW50aygiJXM6IFRpbWVvdXQgcmVhY2hlZCAgd2FpdGluZyBmb3Igcm9tIGRvbmUiLAorCQkJCQlEUklWRVJfTkFNRSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3FsYTRfOHh4eF9kb19yb21fZmFzdF9yZWFkKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwgaW50IGFkZHIsIGludCAqdmFscCkKK3sKKwlxbGE0Xzh4eHhfd3JfMzIoaGEsIFFMQTgyWFhfUk9NVVNCX1JPTV9BRERSRVNTLCBhZGRyKTsKKwlxbGE0Xzh4eHhfd3JfMzIoaGEsIFFMQTgyWFhfUk9NVVNCX1JPTV9EVU1NWV9CWVRFX0NOVCwgMCk7CisJcWxhNF84eHh4X3dyXzMyKGhhLCBRTEE4MlhYX1JPTVVTQl9ST01fQUJZVEVfQ05ULCAzKTsKKwlxbGE0Xzh4eHhfd3JfMzIoaGEsIFFMQTgyWFhfUk9NVVNCX1JPTV9JTlNUUl9PUENPREUsIDB4Yik7CisJaWYgKHFsYTRfOHh4eF93YWl0X3JvbV9kb25lKGhhKSkgeworCQlwcmludGsoIiVzOiBFcnJvciB3YWl0aW5nIGZvciByb20gZG9uZVxuIiwgRFJJVkVSX05BTUUpOworCQlyZXR1cm4gLTE7CisJfQorCS8qIHJlc2V0IGFieXRlX2NudCBhbmQgZHVtbXlfYnl0ZV9jbnQgKi8KKwlxbGE0Xzh4eHhfd3JfMzIoaGEsIFFMQTgyWFhfUk9NVVNCX1JPTV9EVU1NWV9CWVRFX0NOVCwgMCk7CisJdWRlbGF5KDEwKTsKKwlxbGE0Xzh4eHhfd3JfMzIoaGEsIFFMQTgyWFhfUk9NVVNCX1JPTV9BQllURV9DTlQsIDApOworCisJKnZhbHAgPSBxbGE0Xzh4eHhfcmRfMzIoaGEsIFFMQTgyWFhfUk9NVVNCX1JPTV9SREFUQSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3FsYTRfOHh4eF9yb21fZmFzdF9yZWFkKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwgaW50IGFkZHIsIGludCAqdmFscCkKK3sKKwlpbnQgcmV0LCBsb29wcyA9IDA7CisKKwl3aGlsZSAoKHFsYTRfOHh4eF9yb21fbG9jayhoYSkgIT0gMCkgJiYgKGxvb3BzIDwgNTAwMDApKSB7CisJCXVkZWxheSgxMDApOworCQlsb29wcysrOworCX0KKwlpZiAobG9vcHMgPj0gNTAwMDApIHsKKwkJcHJpbnRrKCIlczogcWxhNF84eHh4X3JvbV9sb2NrIGZhaWxlZFxuIiwgRFJJVkVSX05BTUUpOworCQlyZXR1cm4gLTE7CisJfQorCXJldCA9IHFsYTRfOHh4eF9kb19yb21fZmFzdF9yZWFkKGhhLCBhZGRyLCB2YWxwKTsKKwlxbGE0Xzh4eHhfcm9tX3VubG9jayhoYSk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBUaGlzIHJvdXRpbmUgZG9lcyBDUkIgaW5pdGlhbGl6ZSBzZXF1ZW5jZQorICogdG8gcHV0IHRoZSBJU1AgaW50byBvcGVyYXRpb25hbCBzdGF0ZQorICoqLworc3RhdGljIGludAorcWxhNF84eHh4X3Bpbml0X2Zyb21fcm9tKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwgaW50IHZlcmJvc2UpCit7CisJaW50IGFkZHIsIHZhbDsKKwlpbnQgaSA7CisJc3RydWN0IGNyYl9hZGRyX3BhaXIgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIG9mZjsKKwl1bnNpZ25lZCBvZmZzZXQsIG47CisKKwlzdHJ1Y3QgY3JiX2FkZHJfcGFpciB7CisJCWxvbmcgYWRkcjsKKwkJbG9uZyBkYXRhOworCX07CisKKwkvKiBIYWx0IGFsbCB0aGUgaW5kaXZpdWFsIFBFR3MgYW5kIG90aGVyIGJsb2NrcyBvZiB0aGUgSVNQICovCisJcWxhNF84eHh4X3JvbV9sb2NrKGhhKTsKKwlpZiAodGVzdF9iaXQoRFBDX1JFU0VUX0hBLCAmaGEtPmRwY19mbGFncykpCisJCS8qIGRvbid0IHJlc2V0IENBTSBibG9jayBvbiByZXNldCAqLworCQlxbGE0Xzh4eHhfd3JfMzIoaGEsIFFMQTgyWFhfUk9NVVNCX0dMQl9TV19SRVNFVCwgMHhmZWZmZmZmZik7CisJZWxzZQorCQlxbGE0Xzh4eHhfd3JfMzIoaGEsIFFMQTgyWFhfUk9NVVNCX0dMQl9TV19SRVNFVCwgMHhmZmZmZmZmZik7CisKKwlxbGE0Xzh4eHhfcm9tX3VubG9jayhoYSk7CisKKwkvKiBSZWFkIHRoZSBzaWduYXR1cmUgdmFsdWUgZnJvbSB0aGUgZmxhc2guCisJICogT2Zmc2V0IDA6IENvbnRhaW4gc2lnbmF0dXJlICgweGNhZmVjYWZlKQorCSAqIE9mZnNldCA0OiBPZmZzZXQgYW5kIG51bWJlciBvZiBhZGRyL3ZhbHVlIHBhaXJzCisJICogdGhhdCBwcmVzZW50IGluIENSQiBpbml0aWFsaXplIHNlcXVlbmNlCisJICovCisJaWYgKHFsYTRfOHh4eF9yb21fZmFzdF9yZWFkKGhhLCAwLCAmbikgIT0gMCB8fCBuICE9IDB4Y2FmZWNhZmVVTCB8fAorCSAgICBxbGE0Xzh4eHhfcm9tX2Zhc3RfcmVhZChoYSwgNCwgJm4pICE9IDApIHsKKwkJcWw0X3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkJIltFUlJPUl0gUmVhZGluZyBjcmJfaW5pdCBhcmVhOiBuOiAlMDh4XG4iLCBuKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIE9mZnNldCBpbiBmbGFzaCA9IGxvd2VyIDE2IGJpdHMKKwkgKiBOdW1iZXIgb2YgZW50ZXJpZXMgPSB1cHBlciAxNiBiaXRzCisJICovCisJb2Zmc2V0ID0gbiAmIDB4ZmZmZlU7CisJbiA9IChuID4+IDE2KSAmIDB4ZmZmZlU7CisKKwkvKiBudW1iZXIgb2YgYWRkci92YWx1ZSBwYWlyIHNob3VsZCBub3QgZXhjZWVkIDEwMjQgZW50ZXJpZXMgKi8KKwlpZiAobiAgPj0gMTAyNCkgeworCQlxbDRfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCSAgICAiJXM6ICVzOm49MHgleCBbRVJST1JdIENhcmQgZmxhc2ggbm90IGluaXRpYWxpemVkLlxuIiwKKwkJICAgIERSSVZFUl9OQU1FLCBfX2Z1bmNfXywgbik7CisJCXJldHVybiAtMTsKKwl9CisKKwlxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCSIlczogJWQgQ1JCIGluaXQgdmFsdWVzIGZvdW5kIGluIFJPTS5cbiIsIERSSVZFUl9OQU1FLCBuKTsKKworCWJ1ZiA9IGttYWxsb2MobiAqIHNpemVvZihzdHJ1Y3QgY3JiX2FkZHJfcGFpciksIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkgeworCQlxbDRfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCSAgICAiJXM6IFtFUlJPUl0gVW5hYmxlIHRvIG1hbGxvYyBtZW1vcnkuXG4iLCBEUklWRVJfTkFNRSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWlmIChxbGE0Xzh4eHhfcm9tX2Zhc3RfcmVhZChoYSwgOCppICsgNCpvZmZzZXQsICZ2YWwpICE9IDAgfHwKKwkJICAgIHFsYTRfOHh4eF9yb21fZmFzdF9yZWFkKGhhLCA4KmkgKyA0Km9mZnNldCArIDQsICZhZGRyKSAhPQorCQkgICAgMCkgeworCQkJa2ZyZWUoYnVmKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWJ1ZltpXS5hZGRyID0gYWRkcjsKKwkJYnVmW2ldLmRhdGEgPSB2YWw7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQkvKiBUcmFuc2xhdGUgaW50ZXJuYWwgQ1JCIGluaXRpYWxpemF0aW9uCisJCSAqIGFkZHJlc3MgdG8gUENJIGJ1cyBhZGRyZXNzCisJCSAqLworCQlvZmYgPSBxbGE0Xzh4eHhfZGVjb2RlX2NyYl9hZGRyKCh1bnNpZ25lZCBsb25nKWJ1ZltpXS5hZGRyKSArCisJCSAgICBRTEE4MlhYX1BDSV9DUkJTUEFDRTsKKwkJLyogTm90IGFsbCBDUkIgIGFkZHIvdmFsdWUgcGFpciB0byBiZSB3cml0dGVuLAorCQkgKiBzb21lIG9mIHRoZW0gYXJlIHNraXBwZWQKKwkJICovCisKKwkJLyogc2tpcCBpZiBMUyBiaXQgaXMgc2V0Ki8KKwkJaWYgKG9mZiAmIDB4MSkgeworCQkJREVCVUcyKHFsNF9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCSAgICAiU2tpcCBDUkIgaW5pdCByZXBsYXkgZm9yIG9mZnNldCA9IDB4JWx4XG4iLCBvZmYpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogc2tpcHBpbmcgY29sZCByZWJvb3QgTUFHSUMgKi8KKwkJaWYgKG9mZiA9PSBRTEE4MlhYX0NBTV9SQU0oMHgxZmMpKQorCQkJY29udGludWU7CisKKwkJLyogZG8gbm90IHJlc2V0IFBDSSAqLworCQlpZiAob2ZmID09IChST01VU0JfR0xCICsgMHhiYykpCisJCQljb250aW51ZTsKKworCQkvKiBza2lwIGNvcmUgY2xvY2ssIHNvIHRoYXQgZmlybXdhcmUgY2FuIGluY3JlYXNlIHRoZSBjbG9jayAqLworCQlpZiAob2ZmID09IChST01VU0JfR0xCICsgMHhjOCkpCisJCQljb250aW51ZTsKKworCQkvKiBza2lwIHRoZSBmdW5jdGlvbiBlbmFibGUgcmVnaXN0ZXIgKi8KKwkJaWYgKG9mZiA9PSBRTEE4MlhYX1BDSUVfUkVHKFBDSUVfU0VUVVBfRlVOQ1RJT04pKQorCQkJY29udGludWU7CisKKwkJaWYgKG9mZiA9PSBRTEE4MlhYX1BDSUVfUkVHKFBDSUVfU0VUVVBfRlVOQ1RJT04yKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgob2ZmICYgMHgwZmYwMDAwMCkgPT0gUUxBODJYWF9DUkJfU01CKQorCQkJY29udGludWU7CisKKwkJaWYgKChvZmYgJiAweDBmZjAwMDAwKSA9PSBRTEE4MlhYX0NSQl9ERFJfTkVUKQorCQkJY29udGludWU7CisKKwkJaWYgKG9mZiA9PSBBRERSX0VSUk9SKSB7CisJCQlxbDRfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQkgICAgIiVzOiBbRVJST1JdIFVua25vd24gYWRkcjogMHglMDhseFxuIiwKKwkJCSAgICBEUklWRVJfTkFNRSwgYnVmW2ldLmFkZHIpOworCQkJY29udGludWU7CisJCX0KKworCQlxbGE0Xzh4eHhfd3JfMzIoaGEsIG9mZiwgYnVmW2ldLmRhdGEpOworCisJCS8qIElTUCByZXF1aXJlcyBtdWNoIGJpZ2dlciBkZWxheSB0byBzZXR0bGUgZG93biwKKwkJICogZWxzZSBjcmJfd2luZG93IHJldHVybnMgMHhmZmZmZmZmZgorCQkgKi8KKwkJaWYgKG9mZiA9PSBRTEE4MlhYX1JPTVVTQl9HTEJfU1dfUkVTRVQpCisJCQltc2xlZXAoMTAwMCk7CisKKwkJLyogSVNQIHJlcXVpcmVzIG1pbGxpc2VjIGRlbGF5IGJldHdlZW4KKwkJICogc3VjY2Vzc2l2ZSBDUkIgcmVnaXN0ZXIgdXBkYXRpb24KKwkJICovCisJCW1zbGVlcCgxKTsKKwl9CisKKwlrZnJlZShidWYpOworCisJLyogUmVzZXR0aW5nIHRoZSBkYXRhIGFuZCBpbnN0cnVjdGlvbiBjYWNoZSAqLworCXFsYTRfOHh4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfUEVHX05FVF9EKzB4ZWMsIDB4MWUpOworCXFsYTRfOHh4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfUEVHX05FVF9EKzB4NGMsIDgpOworCXFsYTRfOHh4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfUEVHX05FVF9JKzB4NGMsIDgpOworCisJLyogQ2xlYXIgYWxsIHByb3RvY29sIHByb2Nlc3NpbmcgZW5naW5lcyAqLworCXFsYTRfOHh4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfUEVHX05FVF8wKzB4OCwgMCk7CisJcWxhNF84eHh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9QRUdfTkVUXzArMHhjLCAwKTsKKwlxbGE0Xzh4eHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX1BFR19ORVRfMSsweDgsIDApOworCXFsYTRfOHh4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfUEVHX05FVF8xKzB4YywgMCk7CisJcWxhNF84eHh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9QRUdfTkVUXzIrMHg4LCAwKTsKKwlxbGE0Xzh4eHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX1BFR19ORVRfMisweGMsIDApOworCXFsYTRfOHh4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfUEVHX05FVF8zKzB4OCwgMCk7CisJcWxhNF84eHh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9QRUdfTkVUXzMrMHhjLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFsYTRfOHh4eF9jaGVja19mb3JfYmFkX3NwZChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCit7CisJdTMyIHZhbCA9IDA7CisJdmFsID0gcWxhNF84eHh4X3JkXzMyKGhhLCBCT09UX0xPQURFUl9ESU1NX1NUQVRVUykgOworCXZhbCAmPSBRTEE4MlhYX0JPT1RfTE9BREVSX01OX0lTU1VFOworCWlmICh2YWwgJiBRTEE4MlhYX1BFR19UVU5FX01OX1NQRF9aRVJPRUQpIHsKKwkJcHJpbnRrKCJNZW1vcnkgRElNTSBTUEQgbm90IHByb2dyYW1tZWQuICBBc3N1bWVkIHZhbGlkLlxuIik7CisJCXJldHVybiAxOworCX0gZWxzZSBpZiAodmFsKSB7CisJCXByaW50aygiTWVtb3J5IERJTU0gdHlwZSBpbmNvcnJlY3QuICBJbmZvOiUwOFguXG4iLCB2YWwpOworCQlyZXR1cm4gMjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3FsYTRfOHh4eF9sb2FkX2Zyb21fZmxhc2goc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLCB1aW50MzJfdCBpbWFnZV9zdGFydCkKK3sKKwlpbnQgIGk7CisJbG9uZyBzaXplID0gMDsKKwlsb25nIGZsYXNoYWRkciwgbWVtYWRkcjsKKwl1NjQgZGF0YTsKKwl1MzIgaGlnaCwgbG93OworCisJZmxhc2hhZGRyID0gbWVtYWRkciA9IGhhLT5ody5mbHRfcmVnaW9uX2Jvb3Rsb2FkOworCXNpemUgPSAoaW1hZ2Vfc3RhcnQgLSBmbGFzaGFkZHIpLzg7CisKKwlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiAlczogYm9vdGxkcj0weCVseCwgZndfaW1hZ2U9MHgleFxuIiwKKwkgICAgaGEtPmhvc3Rfbm8sIF9fZnVuY19fLCBmbGFzaGFkZHIsIGltYWdlX3N0YXJ0KSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCWlmICgocWxhNF84eHh4X3JvbV9mYXN0X3JlYWQoaGEsIGZsYXNoYWRkciwgKGludCAqKSZsb3cpKSB8fAorCQkgICAgKHFsYTRfOHh4eF9yb21fZmFzdF9yZWFkKGhhLCBmbGFzaGFkZHIgKyA0LAorCQkgICAgKGludCAqKSZoaWdoKSkpIHsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlkYXRhID0gKCh1NjQpaGlnaCA8PCAzMikgfCBsb3cgOworCQlxbGE0Xzh4eHhfcGNpX21lbV93cml0ZV8yTShoYSwgbWVtYWRkciwgJmRhdGEsIDgpOworCQlmbGFzaGFkZHIgKz0gODsKKwkJbWVtYWRkciAgICs9IDg7CisKKwkJaWYgKGklMHgxMDAwID09IDApCisJCQltc2xlZXAoMSk7CisKKwl9CisKKwl1ZGVsYXkoMTAwKTsKKworCXJlYWRfbG9jaygmaGEtPmh3X2xvY2spOworCXFsYTRfOHh4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfUEVHX05FVF8wICsgMHgxOCwgMHgxMDIwKTsKKwlxbGE0Xzh4eHhfd3JfMzIoaGEsIFFMQTgyWFhfUk9NVVNCX0dMQl9TV19SRVNFVCwgMHg4MDAwMWUpOworCXJlYWRfdW5sb2NrKCZoYS0+aHdfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxbGE0Xzh4eHhfbG9hZF9mdyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsIHVpbnQzMl90IGltYWdlX3N0YXJ0KQoreworCXUzMiByc3Q7CisKKwlxbGE0Xzh4eHhfd3JfMzIoaGEsIENSQl9DTURQRUdfU1RBVEUsIDApOworCWlmIChxbGE0Xzh4eHhfcGluaXRfZnJvbV9yb20oaGEsIDApICE9IFFMQV9TVUNDRVNTKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBFcnJvciBkdXJpbmcgQ1JCIEluaXRpYWxpemF0aW9uXG4iLAorCQkgICAgX19mdW5jX18pOworCQlyZXR1cm4gUUxBX0VSUk9SOworCX0KKworCXVkZWxheSg1MDApOworCisJLyogYXQgdGhpcyBwb2ludCwgUU0gaXMgaW4gcmVzZXQuIFRoaXMgY291bGQgYmUgYSBwcm9ibGVtIGlmIHRoZXJlIGFyZQorCSAqIGluY29taW5nIGQqIHRyYW5zaXRpb24gcXVldWUgbWVzc2FnZXMuIFFNL1BDSUUgY291bGQgd2VkZ2UuCisJICogVG8gZ2V0IGFyb3VuZCB0aGlzLCBRTSBpcyBicm91Z2h0IG91dCBvZiByZXNldC4KKwkgKi8KKworCXJzdCA9IHFsYTRfOHh4eF9yZF8zMihoYSwgUUxBODJYWF9ST01VU0JfR0xCX1NXX1JFU0VUKTsKKwkvKiB1bnJlc2V0IHFtICovCisJcnN0ICY9IH4oMSA8PCAyOCk7CisJcWxhNF84eHh4X3dyXzMyKGhhLCBRTEE4MlhYX1JPTVVTQl9HTEJfU1dfUkVTRVQsIHJzdCk7CisKKwlpZiAocWxhNF84eHh4X2xvYWRfZnJvbV9mbGFzaChoYSwgaW1hZ2Vfc3RhcnQpKSB7CisJCXByaW50aygiJXM6IEVycm9yIHRyeWluZyB0byBsb2FkIGZ3IGZyb20gZmxhc2ghXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBRTEFfRVJST1I7CisJfQorCisJcmV0dXJuIFFMQV9TVUNDRVNTOworfQorCitpbnQKK3FsYTRfOHh4eF9wY2lfbWVtX3JlYWRfMk0oc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLAorCQl1NjQgb2ZmLCB2b2lkICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwlpbnQgaSwgaiA9IDAsIGssIHN0YXJ0LCBlbmQsIGxvb3AsIHN6WzJdLCBvZmYwWzJdOworCWludCBzaGlmdF9hbW91bnQ7CisJdWludDMyX3QgdGVtcDsKKwl1aW50NjRfdCBvZmY4LCB2YWwsIG1lbV9jcmIsIHdvcmRbMl0gPSB7MCwgMH07CisKKwkvKgorCSAqIElmIG5vdCBNTiwgZ28gY2hlY2sgZm9yIE1TIG9yIGludmFsaWQuCisJICovCisKKwlpZiAob2ZmID49IFFMQTgyWFhfQUREUl9RRFJfTkVUICYmIG9mZiA8PSBRTEE4MlhYX1AzX0FERFJfUURSX05FVF9NQVgpCisJCW1lbV9jcmIgPSBRTEE4MlhYX0NSQl9RRFJfTkVUOworCWVsc2UgeworCQltZW1fY3JiID0gUUxBODJYWF9DUkJfRERSX05FVDsKKwkJaWYgKHFsYTRfOHh4eF9wY2lfbWVtX2JvdW5kX2NoZWNrKGhhLCBvZmYsIHNpemUpID09IDApCisJCQlyZXR1cm4gcWxhNF84eHh4X3BjaV9tZW1fcmVhZF9kaXJlY3QoaGEsCisJCQkJCW9mZiwgZGF0YSwgc2l6ZSk7CisJfQorCisKKwlvZmY4ID0gb2ZmICYgMHhmZmZmZmZmMDsKKwlvZmYwWzBdID0gb2ZmICYgMHhmOworCXN6WzBdID0gKHNpemUgPCAoMTYgLSBvZmYwWzBdKSkgPyBzaXplIDogKDE2IC0gb2ZmMFswXSk7CisJc2hpZnRfYW1vdW50ID0gNDsKKworCWxvb3AgPSAoKG9mZjBbMF0gKyBzaXplIC0gMSkgPj4gc2hpZnRfYW1vdW50KSArIDE7CisJb2ZmMFsxXSA9IDA7CisJc3pbMV0gPSBzaXplIC0gc3pbMF07CisKKwlmb3IgKGkgPSAwOyBpIDwgbG9vcDsgaSsrKSB7CisJCXRlbXAgPSBvZmY4ICsgKGkgPDwgc2hpZnRfYW1vdW50KTsKKwkJcWxhNF84eHh4X3dyXzMyKGhhLCBtZW1fY3JiICsgTUlVX1RFU1RfQUdUX0FERFJfTE8sIHRlbXApOworCQl0ZW1wID0gMDsKKwkJcWxhNF84eHh4X3dyXzMyKGhhLCBtZW1fY3JiICsgTUlVX1RFU1RfQUdUX0FERFJfSEksIHRlbXApOworCQl0ZW1wID0gTUlVX1RBX0NUTF9FTkFCTEU7CisJCXFsYTRfOHh4eF93cl8zMihoYSwgbWVtX2NyYiArIE1JVV9URVNUX0FHVF9DVFJMLCB0ZW1wKTsKKwkJdGVtcCA9IE1JVV9UQV9DVExfU1RBUlQgfCBNSVVfVEFfQ1RMX0VOQUJMRTsKKwkJcWxhNF84eHh4X3dyXzMyKGhhLCBtZW1fY3JiICsgTUlVX1RFU1RfQUdUX0NUUkwsIHRlbXApOworCisJCWZvciAoaiA9IDA7IGogPCBNQVhfQ1RMX0NIRUNLOyBqKyspIHsKKwkJCXRlbXAgPSBxbGE0Xzh4eHhfcmRfMzIoaGEsIG1lbV9jcmIgKyBNSVVfVEVTVF9BR1RfQ1RSTCk7CisJCQlpZiAoKHRlbXAgJiBNSVVfVEFfQ1RMX0JVU1kpID09IDApCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaiA+PSBNQVhfQ1RMX0NIRUNLKSB7CisJCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJCXFsNF9wcmludGsoS0VSTl9FUlIsIGhhLAorCQkJCSAgICAiZmFpbGVkIHRvIHJlYWQgdGhyb3VnaCBhZ2VudFxuIik7CisJCQlicmVhazsKKwkJfQorCisJCXN0YXJ0ID0gb2ZmMFtpXSA+PiAyOworCQllbmQgICA9IChvZmYwW2ldICsgc3pbaV0gLSAxKSA+PiAyOworCQlmb3IgKGsgPSBzdGFydDsgayA8PSBlbmQ7IGsrKykgeworCQkJdGVtcCA9IHFsYTRfOHh4eF9yZF8zMihoYSwKKwkJCQltZW1fY3JiICsgTUlVX1RFU1RfQUdUX1JEREFUQShrKSk7CisJCQl3b3JkW2ldIHw9ICgodWludDY0X3QpdGVtcCA8PCAoMzIgKiAoayAmIDEpKSk7CisJCX0KKwl9CisKKwlpZiAoaiA+PSBNQVhfQ1RMX0NIRUNLKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoKG9mZjBbMF0gJiA3KSA9PSAwKSB7CisJCXZhbCA9IHdvcmRbMF07CisJfSBlbHNlIHsKKwkJdmFsID0gKCh3b3JkWzBdID4+IChvZmYwWzBdICogOCkpICYgKH4ofjBVTEwgPDwgKHN6WzBdICogOCkpKSkgfAorCQkoKHdvcmRbMV0gJiAofih+MFVMTCA8PCAoc3pbMV0gKiA4KSkpKSA8PCAoc3pbMF0gKiA4KSk7CisJfQorCisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxOgorCQkqKHVpbnQ4X3QgICopZGF0YSA9IHZhbDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQkqKHVpbnQxNl90ICopZGF0YSA9IHZhbDsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQkqKHVpbnQzMl90ICopZGF0YSA9IHZhbDsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQkqKHVpbnQ2NF90ICopZGF0YSA9IHZhbDsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitpbnQKK3FsYTRfOHh4eF9wY2lfbWVtX3dyaXRlXzJNKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwKKwkJdTY0IG9mZiwgdm9pZCAqZGF0YSwgaW50IHNpemUpCit7CisJaW50IGksIGosIHJldCA9IDAsIGxvb3AsIHN6WzJdLCBvZmYwOworCWludCBzY2FsZSwgc2hpZnRfYW1vdW50LCBzdGFydHdvcmQ7CisJdWludDMyX3QgdGVtcDsKKwl1aW50NjRfdCBvZmY4LCBtZW1fY3JiLCB0bXB3LCB3b3JkWzJdID0gezAsIDB9OworCisJLyoKKwkgKiBJZiBub3QgTU4sIGdvIGNoZWNrIGZvciBNUyBvciBpbnZhbGlkLgorCSAqLworCWlmIChvZmYgPj0gUUxBODJYWF9BRERSX1FEUl9ORVQgJiYgb2ZmIDw9IFFMQTgyWFhfUDNfQUREUl9RRFJfTkVUX01BWCkKKwkJbWVtX2NyYiA9IFFMQTgyWFhfQ1JCX1FEUl9ORVQ7CisJZWxzZSB7CisJCW1lbV9jcmIgPSBRTEE4MlhYX0NSQl9ERFJfTkVUOworCQlpZiAocWxhNF84eHh4X3BjaV9tZW1fYm91bmRfY2hlY2soaGEsIG9mZiwgc2l6ZSkgPT0gMCkKKwkJCXJldHVybiBxbGE0Xzh4eHhfcGNpX21lbV93cml0ZV9kaXJlY3QoaGEsCisJCQkJCW9mZiwgZGF0YSwgc2l6ZSk7CisJfQorCisJb2ZmMCA9IG9mZiAmIDB4NzsKKwlzelswXSA9IChzaXplIDwgKDggLSBvZmYwKSkgPyBzaXplIDogKDggLSBvZmYwKTsKKwlzelsxXSA9IHNpemUgLSBzelswXTsKKworCW9mZjggPSBvZmYgJiAweGZmZmZmZmYwOworCWxvb3AgPSAoKChvZmYgJiAweGYpICsgc2l6ZSAtIDEpID4+IDQpICsgMTsKKwlzaGlmdF9hbW91bnQgPSA0OworCXNjYWxlID0gMjsKKwlzdGFydHdvcmQgPSAob2ZmICYgMHhmKS84OworCisJZm9yIChpID0gMDsgaSA8IGxvb3A7IGkrKykgeworCQlpZiAocWxhNF84eHh4X3BjaV9tZW1fcmVhZF8yTShoYSwgb2ZmOCArCisJCSAgICAoaSA8PCBzaGlmdF9hbW91bnQpLCAmd29yZFtpICogc2NhbGVdLCA4KSkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCXRtcHcgPSAqKCh1aW50OF90ICopZGF0YSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdG1wdyA9ICooKHVpbnQxNl90ICopZGF0YSk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJdG1wdyA9ICooKHVpbnQzMl90ICopZGF0YSk7CisJCWJyZWFrOworCWNhc2UgODoKKwlkZWZhdWx0OgorCQl0bXB3ID0gKigodWludDY0X3QgKilkYXRhKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHN6WzBdID09IDgpCisJCXdvcmRbc3RhcnR3b3JkXSA9IHRtcHc7CisJZWxzZSB7CisJCXdvcmRbc3RhcnR3b3JkXSAmPQorCQkgICAgfigofih+MFVMTCA8PCAoc3pbMF0gKiA4KSkpIDw8IChvZmYwICogOCkpOworCQl3b3JkW3N0YXJ0d29yZF0gfD0gdG1wdyA8PCAob2ZmMCAqIDgpOworCX0KKworCWlmIChzelsxXSAhPSAwKSB7CisJCXdvcmRbc3RhcnR3b3JkKzFdICY9IH4ofjBVTEwgPDwgKHN6WzFdICogOCkpOworCQl3b3JkW3N0YXJ0d29yZCsxXSB8PSB0bXB3ID4+IChzelswXSAqIDgpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBsb29wOyBpKyspIHsKKwkJdGVtcCA9IG9mZjggKyAoaSA8PCBzaGlmdF9hbW91bnQpOworCQlxbGE0Xzh4eHhfd3JfMzIoaGEsIG1lbV9jcmIrTUlVX1RFU1RfQUdUX0FERFJfTE8sIHRlbXApOworCQl0ZW1wID0gMDsKKwkJcWxhNF84eHh4X3dyXzMyKGhhLCBtZW1fY3JiK01JVV9URVNUX0FHVF9BRERSX0hJLCB0ZW1wKTsKKwkJdGVtcCA9IHdvcmRbaSAqIHNjYWxlXSAmIDB4ZmZmZmZmZmY7CisJCXFsYTRfOHh4eF93cl8zMihoYSwgbWVtX2NyYitNSVVfVEVTVF9BR1RfV1JEQVRBX0xPLCB0ZW1wKTsKKwkJdGVtcCA9ICh3b3JkW2kgKiBzY2FsZV0gPj4gMzIpICYgMHhmZmZmZmZmZjsKKwkJcWxhNF84eHh4X3dyXzMyKGhhLCBtZW1fY3JiK01JVV9URVNUX0FHVF9XUkRBVEFfSEksIHRlbXApOworCQl0ZW1wID0gd29yZFtpKnNjYWxlICsgMV0gJiAweGZmZmZmZmZmOworCQlxbGE0Xzh4eHhfd3JfMzIoaGEsIG1lbV9jcmIgKyBNSVVfVEVTVF9BR1RfV1JEQVRBX1VQUEVSX0xPLAorCQkgICAgdGVtcCk7CisJCXRlbXAgPSAod29yZFtpKnNjYWxlICsgMV0gPj4gMzIpICYgMHhmZmZmZmZmZjsKKwkJcWxhNF84eHh4X3dyXzMyKGhhLCBtZW1fY3JiICsgTUlVX1RFU1RfQUdUX1dSREFUQV9VUFBFUl9ISSwKKwkJICAgIHRlbXApOworCisJCXRlbXAgPSBNSVVfVEFfQ1RMX0VOQUJMRSB8IE1JVV9UQV9DVExfV1JJVEU7CisJCXFsYTRfOHh4eF93cl8zMihoYSwgbWVtX2NyYitNSVVfVEVTVF9BR1RfQ1RSTCwgdGVtcCk7CisJCXRlbXAgPSBNSVVfVEFfQ1RMX1NUQVJUIHwgTUlVX1RBX0NUTF9FTkFCTEUgfCBNSVVfVEFfQ1RMX1dSSVRFOworCQlxbGE0Xzh4eHhfd3JfMzIoaGEsIG1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwsIHRlbXApOworCisJCWZvciAoaiA9IDA7IGogPCBNQVhfQ1RMX0NIRUNLOyBqKyspIHsKKwkJCXRlbXAgPSBxbGE0Xzh4eHhfcmRfMzIoaGEsIG1lbV9jcmIgKyBNSVVfVEVTVF9BR1RfQ1RSTCk7CisJCQlpZiAoKHRlbXAgJiBNSVVfVEFfQ1RMX0JVU1kpID09IDApCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaiA+PSBNQVhfQ1RMX0NIRUNLKSB7CisJCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJCXFsNF9wcmludGsoS0VSTl9FUlIsIGhhLAorCQkJCSAgICAiZmFpbGVkIHRvIHdyaXRlIHRocm91Z2ggYWdlbnRcbiIpOworCQkJcmV0ID0gLTE7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcWxhNF84eHh4X2NtZHBlZ19yZWFkeShzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsIGludCBwZWd0dW5lX3ZhbCkKK3sKKwl1MzIgdmFsID0gMDsKKwlpbnQgcmV0cmllcyA9IDYwOworCisJaWYgKCFwZWd0dW5lX3ZhbCkgeworCQlkbyB7CisJCQl2YWwgPSBxbGE0Xzh4eHhfcmRfMzIoaGEsIENSQl9DTURQRUdfU1RBVEUpOworCQkJaWYgKCh2YWwgPT0gUEhBTl9JTklUSUFMSVpFX0NPTVBMRVRFKSB8fAorCQkJICAgICh2YWwgPT0gUEhBTl9JTklUSUFMSVpFX0FDSykpCisJCQkJcmV0dXJuIDA7CisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCQlzY2hlZHVsZV90aW1lb3V0KDUwMCk7CisKKwkJfSB3aGlsZSAoLS1yZXRyaWVzKTsKKworCQlxbGE0Xzh4eHhfY2hlY2tfZm9yX2JhZF9zcGQoaGEpOworCisJCWlmICghcmV0cmllcykgeworCQkJcGVndHVuZV92YWwgPSBxbGE0Xzh4eHhfcmRfMzIoaGEsCisJCQkJUUxBODJYWF9ST01VU0JfR0xCX1BFR1RVTkVfRE9ORSk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogaW5pdCBmYWlsZWQsICIKKwkJCQkicGVndHVuZV92YWwgPSAleFxuIiwgX19mdW5jX18sIHBlZ3R1bmVfdmFsKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxbGE0Xzh4eHhfcmN2cGVnX3JlYWR5KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK3sKKwl1aW50MzJfdCBzdGF0ZSA9IDA7CisJaW50IGxvb3BzID0gMDsKKworCS8qIFdpbmRvdyAxIGNhbGwgKi8KKwlyZWFkX2xvY2soJmhhLT5od19sb2NrKTsKKwlzdGF0ZSA9IHFsYTRfOHh4eF9yZF8zMihoYSwgQ1JCX1JDVlBFR19TVEFURSk7CisJcmVhZF91bmxvY2soJmhhLT5od19sb2NrKTsKKworCXdoaWxlICgoc3RhdGUgIT0gUEhBTl9QRUdfUkNWX0lOSVRJQUxJWkVEKSAmJiAobG9vcHMgPCAzMDAwMCkpIHsKKwkJdWRlbGF5KDEwMCk7CisJCS8qIFdpbmRvdyAxIGNhbGwgKi8KKwkJcmVhZF9sb2NrKCZoYS0+aHdfbG9jayk7CisJCXN0YXRlID0gcWxhNF84eHh4X3JkXzMyKGhhLCBDUkJfUkNWUEVHX1NUQVRFKTsKKwkJcmVhZF91bmxvY2soJmhhLT5od19sb2NrKTsKKworCQlsb29wcysrOworCX0KKworCWlmIChsb29wcyA+PSAzMDAwMCkgeworCQlERUJVRzIocWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkgICAgIlJlY2VpdmUgUGVnIGluaXRpYWxpemF0aW9uIG5vdCBjb21wbGV0ZTogMHgleC5cbiIsIHN0YXRlKSk7CisJCXJldHVybiBRTEFfRVJST1I7CisJfQorCisJcmV0dXJuIFFMQV9TVUNDRVNTOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3FsYTRfOHh4eF9zZXRfZHJ2X2FjdGl2ZShzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCit7CisJdWludDMyX3QgZHJ2X2FjdGl2ZTsKKworCWRydl9hY3RpdmUgPSBxbGE0Xzh4eHhfcmRfMzIoaGEsIFFMQTgyWFhfQ1JCX0RSVl9BQ1RJVkUpOworCWRydl9hY3RpdmUgfD0gKDEgPDwgKGhhLT5mdW5jX251bSAqIDQpKTsKKwlxbGE0Xzh4eHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX0RSVl9BQ1RJVkUsIGRydl9hY3RpdmUpOworfQorCit2b2lkCitxbGE0Xzh4eHhfY2xlYXJfZHJ2X2FjdGl2ZShzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCit7CisJdWludDMyX3QgZHJ2X2FjdGl2ZTsKKworCWRydl9hY3RpdmUgPSBxbGE0Xzh4eHhfcmRfMzIoaGEsIFFMQTgyWFhfQ1JCX0RSVl9BQ1RJVkUpOworCWRydl9hY3RpdmUgJj0gfigxIDw8IChoYS0+ZnVuY19udW0gKiA0KSk7CisJcWxhNF84eHh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9EUlZfQUNUSVZFLCBkcnZfYWN0aXZlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3FsYTRfOHh4eF9uZWVkX3Jlc2V0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK3sKKwl1aW50MzJfdCBkcnZfc3RhdGU7CisJaW50IHJ2YWw7CisKKwlkcnZfc3RhdGUgPSBxbGE0Xzh4eHhfcmRfMzIoaGEsIFFMQTgyWFhfQ1JCX0RSVl9TVEFURSk7CisJcnZhbCA9IGRydl9zdGF0ZSAmICgxIDw8IChoYS0+ZnVuY19udW0gKiA0KSk7CisJcmV0dXJuIHJ2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcWxhNF84eHh4X3NldF9yc3RfcmVhZHkoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKQoreworCXVpbnQzMl90IGRydl9zdGF0ZTsKKworCWRydl9zdGF0ZSA9IHFsYTRfOHh4eF9yZF8zMihoYSwgUUxBODJYWF9DUkJfRFJWX1NUQVRFKTsKKwlkcnZfc3RhdGUgfD0gKDEgPDwgKGhhLT5mdW5jX251bSAqIDQpKTsKKwlxbGE0Xzh4eHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX0RSVl9TVEFURSwgZHJ2X3N0YXRlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitxbGE0Xzh4eHhfY2xlYXJfcnN0X3JlYWR5KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK3sKKwl1aW50MzJfdCBkcnZfc3RhdGU7CisKKwlkcnZfc3RhdGUgPSBxbGE0Xzh4eHhfcmRfMzIoaGEsIFFMQTgyWFhfQ1JCX0RSVl9TVEFURSk7CisJZHJ2X3N0YXRlICY9IH4oMSA8PCAoaGEtPmZ1bmNfbnVtICogNCkpOworCXFsYTRfOHh4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfRFJWX1NUQVRFLCBkcnZfc3RhdGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3FsYTRfOHh4eF9zZXRfcXNudF9yZWFkeShzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCit7CisJdWludDMyX3QgcXNudF9zdGF0ZTsKKworCXFzbnRfc3RhdGUgPSBxbGE0Xzh4eHhfcmRfMzIoaGEsIFFMQTgyWFhfQ1JCX0RSVl9TVEFURSk7CisJcXNudF9zdGF0ZSB8PSAoMiA8PCAoaGEtPmZ1bmNfbnVtICogNCkpOworCXFsYTRfOHh4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfRFJWX1NUQVRFLCBxc250X3N0YXRlKTsKK30KKworCitzdGF0aWMgaW50CitxbGE0Xzh4eHhfc3RhcnRfZmlybXdhcmUoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLCB1aW50MzJfdCBpbWFnZV9zdGFydCkKK3sKKwlpbnQgcGNpZV9jYXA7CisJdWludDE2X3QgbG5rOworCisJLyogc2NydWIgZG1hIG1hc2sgZXhwYW5zaW9uIHJlZ2lzdGVyICovCisJcWxhNF84eHh4X3dyXzMyKGhhLCBDUkJfRE1BX1NISUZULCAweDU1NTU1NTU1KTsKKworCS8qIE92ZXJ3cml0ZSBzdGFsZSBpbml0aWFsaXphdGlvbiByZWdpc3RlciB2YWx1ZXMgKi8KKwlxbGE0Xzh4eHhfd3JfMzIoaGEsIENSQl9DTURQRUdfU1RBVEUsIDApOworCXFsYTRfOHh4eF93cl8zMihoYSwgQ1JCX1JDVlBFR19TVEFURSwgMCk7CisJcWxhNF84eHh4X3dyXzMyKGhhLCBRTEE4MlhYX1BFR19IQUxUX1NUQVRVUzEsIDApOworCXFsYTRfOHh4eF93cl8zMihoYSwgUUxBODJYWF9QRUdfSEFMVF9TVEFUVVMyLCAwKTsKKworCWlmIChxbGE0Xzh4eHhfbG9hZF9mdyhoYSwgaW1hZ2Vfc3RhcnQpICE9IFFMQV9TVUNDRVNTKSB7CisJCXByaW50aygiJXM6IEVycm9yIHRyeWluZyB0byBzdGFydCBmdyFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIFFMQV9FUlJPUjsKKwl9CisKKwkvKiBIYW5kc2hha2Ugd2l0aCB0aGUgY2FyZCBiZWZvcmUgd2UgcmVnaXN0ZXIgdGhlIGRldmljZXMuICovCisJaWYgKHFsYTRfOHh4eF9jbWRwZWdfcmVhZHkoaGEsIDApICE9IFFMQV9TVUNDRVNTKSB7CisJCXByaW50aygiJXM6IEVycm9yIGR1cmluZyBjYXJkIGhhbmRzaGFrZSFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIFFMQV9FUlJPUjsKKwl9CisKKwkvKiBOZWdvdGlhdGVkIExpbmsgd2lkdGggKi8KKwlwY2llX2NhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkoaGEtPnBkZXYsIFBDSV9DQVBfSURfRVhQKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChoYS0+cGRldiwgcGNpZV9jYXAgKyBQQ0lfRVhQX0xOS1NUQSwgJmxuayk7CisJaGEtPmxpbmtfd2lkdGggPSAobG5rID4+IDQpICYgMHgzZjsKKworCS8qIFN5bmNocm9uaXplIHdpdGggUmVjZWl2ZSBwZWcgKi8KKwlyZXR1cm4gcWxhNF84eHh4X3JjdnBlZ19yZWFkeShoYSk7Cit9CisKK3N0YXRpYyBpbnQKK3FsYTRfOHh4eF90cnlfc3RhcnRfZncoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKQoreworCWludCBydmFsID0gUUxBX0VSUk9SOworCisJLyoKKwkgKiBGVyBMb2FkIHByaW9yaXR5OgorCSAqIDEpIE9wZXJhdGlvbmFsIGZpcm13YXJlIHJlc2lkaW5nIGluIGZsYXNoLgorCSAqIDIpIEZhaWwKKwkgKi8KKworCXFsNF9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkgICAgIkZXOiBSZXRyaWV2aW5nIGZsYXNoIG9mZnNldHMgZnJvbSBGTFQvRkRUIC4uLlxuIik7CisJcnZhbCA9IHFsYTRfOHh4eF9nZXRfZmxhc2hfaW5mbyhoYSk7CisJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpCisJCXJldHVybiBydmFsOworCisJcWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLAorCSAgICAiRlc6IEF0dGVtcHRpbmcgdG8gbG9hZCBmaXJtd2FyZSBmcm9tIGZsYXNoLi4uXG4iKTsKKwlydmFsID0gcWxhNF84eHh4X3N0YXJ0X2Zpcm13YXJlKGhhLCBoYS0+aHcuZmx0X3JlZ2lvbl9mdyk7CisJaWYgKHJ2YWwgPT0gUUxBX1NVQ0NFU1MpCisJCXJldHVybiBydmFsOworCisJcWw0X3ByaW50ayhLRVJOX0VSUiwgaGEsICJGVzogTG9hZCBmaXJtd2FyZSBmcm9tIGZsYXNoIEZBSUxFRC4uLlxuIik7CisKKwlyZXR1cm4gcnZhbDsKK30KKworLyoqCisgKiBxbGE0Xzh4eHhfZGV2aWNlX2Jvb3RzdHJhcCAtIEluaXRpYWxpemUgZGV2aWNlLCBzZXQgREVWX1JFQURZLCBzdGFydCBmdworICogQGhhOiBwb2ludGVyIHRvIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogTm90ZTogSURDIGxvY2sgbXVzdCBiZSBoZWxkIHVwb24gZW50cnkKKyAqKi8KK3N0YXRpYyBpbnQKK3FsYTRfOHh4eF9kZXZpY2VfYm9vdHN0cmFwKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK3sKKwlpbnQgcnZhbCwgaSwgdGltZW91dDsKKwl1aW50MzJfdCBvbGRfY291bnQsIGNvdW50OworCisJaWYgKHFsYTRfOHh4eF9uZWVkX3Jlc2V0KGhhKSkKKwkJZ290byBkZXZfaW5pdGlhbGl6ZTsKKworCW9sZF9jb3VudCA9IHFsYTRfOHh4eF9yZF8zMihoYSwgUUxBODJYWF9QRUdfQUxJVkVfQ09VTlRFUik7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQl0aW1lb3V0ID0gbXNsZWVwX2ludGVycnVwdGlibGUoMjAwKTsKKwkJaWYgKHRpbWVvdXQpIHsKKwkJCXFsYTRfOHh4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfREVWX1NUQVRFLAorCQkJICAgUUxBODJYWF9ERVZfRkFJTEVEKTsKKwkJCXJldHVybiBRTEFfRVJST1I7CisJCX0KKworCQljb3VudCA9IHFsYTRfOHh4eF9yZF8zMihoYSwgUUxBODJYWF9QRUdfQUxJVkVfQ09VTlRFUik7CisJCWlmIChjb3VudCAhPSBvbGRfY291bnQpCisJCQlnb3RvIGRldl9yZWFkeTsKKwl9CisKK2Rldl9pbml0aWFsaXplOgorCS8qIHNldCB0byBERVZfSU5JVElBTElaSU5HICovCisJcWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLCAiSFcgU3RhdGU6IElOSVRJQUxJWklOR1xuIik7CisJcWxhNF84eHh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9ERVZfU1RBVEUsIFFMQTgyWFhfREVWX0lOSVRJQUxJWklORyk7CisKKwkvKiBEcml2ZXIgdGhhdCBzZXRzIGRldmljZSBzdGF0ZSB0byBpbml0aWFsaXphdGluZyBzZXRzIElEQyB2ZXJzaW9uICovCisJcWxhNF84eHh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9EUlZfSURDX1ZFUlNJT04sIFFMQTgyWFhfSURDX1ZFUlNJT04pOworCisJcWxhNF84eHh4X2lkY191bmxvY2soaGEpOworCXJ2YWwgPSBxbGE0Xzh4eHhfdHJ5X3N0YXJ0X2Z3KGhhKTsKKwlxbGE0Xzh4eHhfaWRjX2xvY2soaGEpOworCisJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJcWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLCAiSFcgU3RhdGU6IEZBSUxFRFxuIik7CisJCXFsYTRfOHh4eF9jbGVhcl9kcnZfYWN0aXZlKGhhKTsKKwkJcWxhNF84eHh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9ERVZfU1RBVEUsIFFMQTgyWFhfREVWX0ZBSUxFRCk7CisJCXJldHVybiBydmFsOworCX0KKworZGV2X3JlYWR5OgorCXFsNF9wcmludGsoS0VSTl9JTkZPLCBoYSwgIkhXIFN0YXRlOiBSRUFEWVxuIik7CisJcWxhNF84eHh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9ERVZfU1RBVEUsIFFMQTgyWFhfREVWX1JFQURZKTsKKworCXJldHVybiBRTEFfU1VDQ0VTUzsKK30KKworLyoqCisgKiBxbGE0Xzh4eHhfbmVlZF9yZXNldF9oYW5kbGVyIC0gQ29kZSB0byBzdGFydCByZXNldCBzZXF1ZW5jZQorICogQGhhOiBwb2ludGVyIHRvIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogTm90ZTogSURDIGxvY2sgbXVzdCBiZSBoZWxkIHVwb24gZW50cnkKKyAqKi8KK3N0YXRpYyB2b2lkCitxbGE0Xzh4eHhfbmVlZF9yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK3sKKwl1aW50MzJfdCBkZXZfc3RhdGUsIGRydl9zdGF0ZSwgZHJ2X2FjdGl2ZTsKKwl1bnNpZ25lZCBsb25nIHJlc2V0X3RpbWVvdXQ7CisKKwlxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCSJQZXJmb3JtaW5nIElTUCBlcnJvciByZWNvdmVyeVxuIik7CisKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFGX09OTElORSwgJmhhLT5mbGFncykpIHsKKwkJcWxhNF84eHh4X2lkY191bmxvY2soaGEpOworCQloYS0+aXNwX29wcy0+ZGlzYWJsZV9pbnRycyhoYSk7CisJCXFsYTRfOHh4eF9pZGNfbG9jayhoYSk7CisJfQorCisJcWxhNF84eHh4X3NldF9yc3RfcmVhZHkoaGEpOworCisJLyogd2FpdCBmb3IgMTAgc2Vjb25kcyBmb3IgcmVzZXQgYWNrIGZyb20gYWxsIGZ1bmN0aW9ucyAqLworCXJlc2V0X3RpbWVvdXQgPSBqaWZmaWVzICsgKGhhLT5ueF9yZXNldF90aW1lb3V0ICogSFopOworCisJZHJ2X3N0YXRlID0gcWxhNF84eHh4X3JkXzMyKGhhLCBRTEE4MlhYX0NSQl9EUlZfU1RBVEUpOworCWRydl9hY3RpdmUgPSBxbGE0Xzh4eHhfcmRfMzIoaGEsIFFMQTgyWFhfQ1JCX0RSVl9BQ1RJVkUpOworCisJcWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkiJXMoJWxkKTogZHJ2X3N0YXRlID0gMHgleCwgZHJ2X2FjdGl2ZSA9IDB4JXhcbiIsCisJCV9fZnVuY19fLCBoYS0+aG9zdF9ubywgZHJ2X3N0YXRlLCBkcnZfYWN0aXZlKTsKKworCXdoaWxlIChkcnZfc3RhdGUgIT0gZHJ2X2FjdGl2ZSkgeworCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCByZXNldF90aW1lb3V0KSkgeworCQkJcHJpbnRrKCIlczogUkVTRVQgVElNRU9VVCFcbiIsIERSSVZFUl9OQU1FKTsKKwkJCWJyZWFrOworCQl9CisKKwkJcWxhNF84eHh4X2lkY191bmxvY2soaGEpOworCQltc2xlZXAoMTAwMCk7CisJCXFsYTRfOHh4eF9pZGNfbG9jayhoYSk7CisKKwkJZHJ2X3N0YXRlID0gcWxhNF84eHh4X3JkXzMyKGhhLCBRTEE4MlhYX0NSQl9EUlZfU1RBVEUpOworCQlkcnZfYWN0aXZlID0gcWxhNF84eHh4X3JkXzMyKGhhLCBRTEE4MlhYX0NSQl9EUlZfQUNUSVZFKTsKKwl9CisKKwlkZXZfc3RhdGUgPSBxbGE0Xzh4eHhfcmRfMzIoaGEsIFFMQTgyWFhfQ1JCX0RFVl9TVEFURSk7CisJcWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLCAiMzpEZXZpY2Ugc3RhdGUgaXMgMHgleCA9ICVzXG4iLCBkZXZfc3RhdGUsCisJCWRldl9zdGF0ZSA8IE1BWF9TVEFURVMgPyBxZGV2X3N0YXRlW2Rldl9zdGF0ZV0gOiAiVW5rbm93biIpOworCisJLyogRm9yY2UgdG8gREVWX0NPTEQgdW5sZXNzIHNvbWVvbmUgZWxzZSBpcyBzdGFydGluZyBhIHJlc2V0ICovCisJaWYgKGRldl9zdGF0ZSAhPSBRTEE4MlhYX0RFVl9JTklUSUFMSVpJTkcpIHsKKwkJcWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLCAiSFcgU3RhdGU6IENPTEQvUkUtSU5JVFxuIik7CisJCXFsYTRfOHh4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfREVWX1NUQVRFLCBRTEE4MlhYX0RFVl9DT0xEKTsKKwl9Cit9CisKKy8qKgorICogcWxhNF84eHh4X25lZWRfcXNudF9oYW5kbGVyIC0gQ29kZSB0byBzdGFydCBxc250CisgKiBAaGE6IHBvaW50ZXIgdG8gYWRhcHRlciBzdHJ1Y3R1cmUKKyAqKi8KK3ZvaWQKK3FsYTRfOHh4eF9uZWVkX3FzbnRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCit7CisJcWxhNF84eHh4X2lkY19sb2NrKGhhKTsKKwlxbGE0Xzh4eHhfc2V0X3FzbnRfcmVhZHkoaGEpOworCXFsYTRfOHh4eF9pZGNfdW5sb2NrKGhhKTsKK30KKworLyoqCisgKiBxbGE0Xzh4eHhfZGV2aWNlX3N0YXRlX2hhbmRsZXIgLSBBZGFwdGVyIHN0YXRlIG1hY2hpbmUKKyAqIEBoYTogcG9pbnRlciB0byBob3N0IGFkYXB0ZXIgc3RydWN0dXJlLgorICoKKyAqIE5vdGU6IElEQyBsb2NrIG11c3QgYmUgVU5MT0NLRUQgdXBvbiBlbnRyeQorICoqLworaW50IHFsYTRfOHh4eF9kZXZpY2Vfc3RhdGVfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCit7CisJdWludDMyX3QgZGV2X3N0YXRlOworCWludCBydmFsID0gUUxBX1NVQ0NFU1M7CisJdW5zaWduZWQgbG9uZyBkZXZfaW5pdF90aW1lb3V0OworCisJaWYgKCF0ZXN0X2JpdChBRl9JTklUX0RPTkUsICZoYS0+ZmxhZ3MpKQorCQlxbGE0Xzh4eHhfc2V0X2Rydl9hY3RpdmUoaGEpOworCisJZGV2X3N0YXRlID0gcWxhNF84eHh4X3JkXzMyKGhhLCBRTEE4MlhYX0NSQl9ERVZfU1RBVEUpOworCXFsNF9wcmludGsoS0VSTl9JTkZPLCBoYSwgIjE6RGV2aWNlIHN0YXRlIGlzIDB4JXggPSAlc1xuIiwgZGV2X3N0YXRlLAorCQlkZXZfc3RhdGUgPCBNQVhfU1RBVEVTID8gcWRldl9zdGF0ZVtkZXZfc3RhdGVdIDogIlVua25vd24iKTsKKworCS8qIHdhaXQgZm9yIDMwIHNlY29uZHMgZm9yIGRldmljZSB0byBnbyByZWFkeSAqLworCWRldl9pbml0X3RpbWVvdXQgPSBqaWZmaWVzICsgKGhhLT5ueF9kZXZfaW5pdF90aW1lb3V0ICogSFopOworCisJd2hpbGUgKDEpIHsKKwkJcWxhNF84eHh4X2lkY19sb2NrKGhhKTsKKworCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBkZXZfaW5pdF90aW1lb3V0KSkgeworCQkJcWw0X3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAiRGV2aWNlIGluaXQgZmFpbGVkIVxuIik7CisJCQlxbGE0Xzh4eHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX0RFVl9TVEFURSwKKwkJCQlRTEE4MlhYX0RFVl9GQUlMRUQpOworCQl9CisKKwkJZGV2X3N0YXRlID0gcWxhNF84eHh4X3JkXzMyKGhhLCBRTEE4MlhYX0NSQl9ERVZfU1RBVEUpOworCQlxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCSAgICAiMjpEZXZpY2Ugc3RhdGUgaXMgMHgleCA9ICVzXG4iLCBkZXZfc3RhdGUsCisJCSAgICBkZXZfc3RhdGUgPCBNQVhfU1RBVEVTID8gcWRldl9zdGF0ZVtkZXZfc3RhdGVdIDogIlVua25vd24iKTsKKworCQkvKiBOT1RFOiBNYWtlIHN1cmUgaWRjIHVubG9ja2VkIHVwb24gZXhpdCBvZiBzd2l0Y2ggc3RhdGVtZW50ICovCisJCXN3aXRjaCAoZGV2X3N0YXRlKSB7CisJCWNhc2UgUUxBODJYWF9ERVZfUkVBRFk6CisJCQlxbGE0Xzh4eHhfaWRjX3VubG9jayhoYSk7CisJCQlnb3RvIGV4aXQ7CisJCWNhc2UgUUxBODJYWF9ERVZfQ09MRDoKKwkJCXJ2YWwgPSBxbGE0Xzh4eHhfZGV2aWNlX2Jvb3RzdHJhcChoYSk7CisJCQlxbGE0Xzh4eHhfaWRjX3VubG9jayhoYSk7CisJCQlnb3RvIGV4aXQ7CisJCWNhc2UgUUxBODJYWF9ERVZfSU5JVElBTElaSU5HOgorCQkJcWxhNF84eHh4X2lkY191bmxvY2soaGEpOworCQkJbXNsZWVwKDEwMDApOworCQkJYnJlYWs7CisJCWNhc2UgUUxBODJYWF9ERVZfTkVFRF9SRVNFVDoKKwkJCWlmICghcWw0eGRvbnRyZXNldGhiYSkgeworCQkJCXFsYTRfOHh4eF9uZWVkX3Jlc2V0X2hhbmRsZXIoaGEpOworCQkJCS8qIFVwZGF0ZSB0aW1lb3V0IHZhbHVlIGFmdGVyIG5lZWQKKwkJCQkgKiByZXNldCBoYW5kbGVyICovCisJCQkJZGV2X2luaXRfdGltZW91dCA9IGppZmZpZXMgKworCQkJCQkoaGEtPm54X2Rldl9pbml0X3RpbWVvdXQgKiBIWik7CisJCQl9CisJCQlxbGE0Xzh4eHhfaWRjX3VubG9jayhoYSk7CisJCQlicmVhazsKKwkJY2FzZSBRTEE4MlhYX0RFVl9ORUVEX1FVSUVTQ0VOVDoKKwkJCXFsYTRfOHh4eF9pZGNfdW5sb2NrKGhhKTsKKwkJCS8qIGlkYyBsb2NrZWQvdW5sb2NrZWQgaW4gaGFuZGxlciAqLworCQkJcWxhNF84eHh4X25lZWRfcXNudF9oYW5kbGVyKGhhKTsKKwkJCXFsYTRfOHh4eF9pZGNfbG9jayhoYSk7CisJCQkvKiBmYWxsIHRocnUgbmVlZHMgaWRjX2xvY2tlZCAqLworCQljYXNlIFFMQTgyWFhfREVWX1FVSUVTQ0VOVDoKKwkJCXFsYTRfOHh4eF9pZGNfdW5sb2NrKGhhKTsKKwkJCW1zbGVlcCgxMDAwKTsKKwkJCWJyZWFrOworCQljYXNlIFFMQTgyWFhfREVWX0ZBSUxFRDoKKwkJCXFsYTRfOHh4eF9pZGNfdW5sb2NrKGhhKTsKKwkJCXFsYTR4eHhfZGVhZF9hZGFwdGVyX2NsZWFudXAoaGEpOworCQkJcnZhbCA9IFFMQV9FUlJPUjsKKwkJCWdvdG8gZXhpdDsKKwkJZGVmYXVsdDoKKwkJCXFsYTRfOHh4eF9pZGNfdW5sb2NrKGhhKTsKKwkJCXFsYTR4eHhfZGVhZF9hZGFwdGVyX2NsZWFudXAoaGEpOworCQkJcnZhbCA9IFFMQV9FUlJPUjsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0KK2V4aXQ6CisJcmV0dXJuIHJ2YWw7Cit9CisKK2ludCBxbGE0Xzh4eHhfbG9hZF9yaXNjKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IHFsYTRfOHh4eF9kZXZpY2Vfc3RhdGVfaGFuZGxlcihoYSk7CisKKwlpZiAocmV0dmFsID09IFFMQV9TVUNDRVNTICYmCisJICAgICF0ZXN0X2JpdChBRl9JTklUX0RPTkUsICZoYS0+ZmxhZ3MpKSB7CisJCXJldHZhbCA9IHFsYTR4eHhfcmVxdWVzdF9pcnFzKGhhKTsKKwkJaWYgKHJldHZhbCAhPSBRTEFfU1VDQ0VTUykgeworCQkJcWw0X3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkJICAgICJGYWlsZWQgdG8gcmVzZXJ2ZSBpbnRlcnJ1cHQgJWQgYWxyZWFkeSBpbiB1c2UuXG4iLAorCQkJICAgIGhhLT5wZGV2LT5pcnEpOworCQl9IGVsc2UgeworCQkJc2V0X2JpdChBRl9JUlFfQVRUQUNIRUQsICZoYS0+ZmxhZ3MpOworCQkJaGEtPmhvc3QtPmlycSA9IGhhLT5wZGV2LT5pcnE7CisJCQlxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsICIlczogaXJxICVkIGF0dGFjaGVkXG4iLAorCQkJICAgIF9fZnVuY19fLCBoYS0+cGRldi0+aXJxKTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBGbGFzaCBNYW5pcHVsYXRpb24gUm91dGluZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgT1BUUk9NX0JVUlNUX1NJWkUgICAgICAgMHgxMDAwCisjZGVmaW5lIE9QVFJPTV9CVVJTVF9EV09SRFMgICAgIChPUFRST01fQlVSU1RfU0laRSAvIDQpCisKKyNkZWZpbmUgRkFSWF9EQVRBX0ZMQUcJQklUXzMxCisjZGVmaW5lIEZBUlhfQUNDRVNTX0ZMQVNIX0NPTkYJMHg3RkZEMDAwMAorI2RlZmluZSBGQVJYX0FDQ0VTU19GTEFTSF9EQVRBCTB4N0ZGMDAwMDAKKworc3RhdGljIGlubGluZSB1aW50MzJfdAorZmxhc2hfY29uZl9hZGRyKHN0cnVjdCBxbDgyeHhfaHdfZGF0YSAqaHcsIHVpbnQzMl90IGZhZGRyKQoreworCXJldHVybiBody0+Zmxhc2hfY29uZl9vZmYgfCBmYWRkcjsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdAorZmxhc2hfZGF0YV9hZGRyKHN0cnVjdCBxbDgyeHhfaHdfZGF0YSAqaHcsIHVpbnQzMl90IGZhZGRyKQoreworCXJldHVybiBody0+Zmxhc2hfZGF0YV9vZmYgfCBmYWRkcjsKK30KKworc3RhdGljIHVpbnQzMl90ICoKK3FsYTRfOHh4eF9yZWFkX2ZsYXNoX2RhdGEoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLCB1aW50MzJfdCAqZHdwdHIsCisgICAgdWludDMyX3QgZmFkZHIsIHVpbnQzMl90IGxlbmd0aCkKK3sKKwl1aW50MzJfdCBpOworCXVpbnQzMl90IHZhbDsKKwlpbnQgbG9vcHMgPSAwOworCXdoaWxlICgocWxhNF84eHh4X3JvbV9sb2NrKGhhKSAhPSAwKSAmJiAobG9vcHMgPCA1MDAwMCkpIHsKKwkJdWRlbGF5KDEwMCk7CisJCWNvbmRfcmVzY2hlZCgpOworCQlsb29wcysrOworCX0KKwlpZiAobG9vcHMgPj0gNTAwMDApIHsKKwkJcWw0X3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAiUk9NIGxvY2sgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIGR3cHRyOworCX0KKworCS8qIER3b3JkIHJlYWRzIHRvIGZsYXNoLiAqLworCWZvciAoaSA9IDA7IGkgPCBsZW5ndGgvNDsgaSsrLCBmYWRkciArPSA0KSB7CisJCWlmIChxbGE0Xzh4eHhfZG9fcm9tX2Zhc3RfcmVhZChoYSwgZmFkZHIsICZ2YWwpKSB7CisJCQlxbDRfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQkgICAgIkRvIFJPTSBmYXN0IHJlYWQgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZG9uZV9yZWFkOworCQl9CisJCWR3cHRyW2ldID0gX19jb25zdGFudF9jcHVfdG9fbGUzMih2YWwpOworCX0KKworZG9uZV9yZWFkOgorCXFsYTRfOHh4eF9yb21fdW5sb2NrKGhhKTsKKwlyZXR1cm4gZHdwdHI7Cit9CisKKy8qKgorICogQWRkcmVzcyBhbmQgbGVuZ3RoIGFyZSBieXRlIGFkZHJlc3MKKyAqKi8KK3N0YXRpYyB1aW50OF90ICoKK3FsYTRfOHh4eF9yZWFkX29wdHJvbV9kYXRhKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwgdWludDhfdCAqYnVmLAorCQl1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCkKK3sKKwlxbGE0Xzh4eHhfcmVhZF9mbGFzaF9kYXRhKGhhLCAodWludDMyX3QgKilidWYsIG9mZnNldCwgbGVuZ3RoKTsKKwlyZXR1cm4gYnVmOworfQorCitzdGF0aWMgaW50CitxbGE0Xzh4eHhfZmluZF9mbHRfc3RhcnQoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLCB1aW50MzJfdCAqc3RhcnQpCit7CisJY29uc3QgY2hhciAqbG9jLCAqbG9jYXRpb25zW10gPSB7ICJERUYiLCAiUENJIiB9OworCisJLyoKKwkgKiBGTFQtbG9jYXRpb24gc3RydWN0dXJlIHJlc2lkZXMgYWZ0ZXIgdGhlIGxhc3QgUENJIHJlZ2lvbi4KKwkgKi8KKworCS8qIEJlZ2luIHdpdGggc2FuZSBkZWZhdWx0cy4gKi8KKwlsb2MgPSBsb2NhdGlvbnNbMF07CisJKnN0YXJ0ID0gRkFfRkxBU0hfTEFZT1VUX0FERFJfODI7CisKKwlERUJVRzIocWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLCAiRkxUTFslc10gPSAweCV4LlxuIiwgbG9jLCAqc3RhcnQpKTsKKwlyZXR1cm4gUUxBX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyB2b2lkCitxbGE0Xzh4eHhfZ2V0X2ZsdF9pbmZvKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwgdWludDMyX3QgZmx0X2FkZHIpCit7CisJY29uc3QgY2hhciAqbG9jLCAqbG9jYXRpb25zW10gPSB7ICJERUYiLCAiRkxUIiB9OworCXVpbnQxNl90ICp3cHRyOworCXVpbnQxNl90IGNudCwgY2hrc3VtOworCXVpbnQzMl90IHN0YXJ0OworCXN0cnVjdCBxbGFfZmx0X2hlYWRlciAqZmx0OworCXN0cnVjdCBxbGFfZmx0X3JlZ2lvbiAqcmVnaW9uOworCXN0cnVjdCBxbDgyeHhfaHdfZGF0YSAqaHcgPSAmaGEtPmh3OworCisJaHctPmZsdF9yZWdpb25fZmx0ID0gZmx0X2FkZHI7CisJd3B0ciA9ICh1aW50MTZfdCAqKWhhLT5yZXF1ZXN0X3Jpbmc7CisJZmx0ID0gKHN0cnVjdCBxbGFfZmx0X2hlYWRlciAqKWhhLT5yZXF1ZXN0X3Jpbmc7CisJcmVnaW9uID0gKHN0cnVjdCBxbGFfZmx0X3JlZ2lvbiAqKSZmbHRbMV07CisJcWxhNF84eHh4X3JlYWRfb3B0cm9tX2RhdGEoaGEsICh1aW50OF90ICopaGEtPnJlcXVlc3RfcmluZywKKwkJCWZsdF9hZGRyIDw8IDIsIE9QVFJPTV9CVVJTVF9TSVpFKTsKKwlpZiAoKndwdHIgPT0gX19jb25zdGFudF9jcHVfdG9fbGUxNigweGZmZmYpKQorCQlnb3RvIG5vX2ZsYXNoX2RhdGE7CisJaWYgKGZsdC0+dmVyc2lvbiAhPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDEpKSB7CisJCURFQlVHMihxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJVbnN1cHBvcnRlZCBGTFQgZGV0ZWN0ZWQ6ICIKKwkJCSJ2ZXJzaW9uPTB4JXggbGVuZ3RoPTB4JXggY2hlY2tzdW09MHgleC5cbiIsCisJCQlsZTE2X3RvX2NwdShmbHQtPnZlcnNpb24pLCBsZTE2X3RvX2NwdShmbHQtPmxlbmd0aCksCisJCQlsZTE2X3RvX2NwdShmbHQtPmNoZWNrc3VtKSkpOworCQlnb3RvIG5vX2ZsYXNoX2RhdGE7CisJfQorCisJY250ID0gKHNpemVvZihzdHJ1Y3QgcWxhX2ZsdF9oZWFkZXIpICsgbGUxNl90b19jcHUoZmx0LT5sZW5ndGgpKSA+PiAxOworCWZvciAoY2hrc3VtID0gMDsgY250OyBjbnQtLSkKKwkJY2hrc3VtICs9IGxlMTZfdG9fY3B1KCp3cHRyKyspOworCWlmIChjaGtzdW0pIHsKKwkJREVCVUcyKHFsNF9wcmludGsoS0VSTl9JTkZPLCBoYSwgIkluY29uc2lzdGVudCBGTFQgZGV0ZWN0ZWQ6ICIKKwkJCSJ2ZXJzaW9uPTB4JXggbGVuZ3RoPTB4JXggY2hlY2tzdW09MHgleC5cbiIsCisJCQlsZTE2X3RvX2NwdShmbHQtPnZlcnNpb24pLCBsZTE2X3RvX2NwdShmbHQtPmxlbmd0aCksCisJCQljaGtzdW0pKTsKKwkJZ290byBub19mbGFzaF9kYXRhOworCX0KKworCWxvYyA9IGxvY2F0aW9uc1sxXTsKKwljbnQgPSBsZTE2X3RvX2NwdShmbHQtPmxlbmd0aCkgLyBzaXplb2Yoc3RydWN0IHFsYV9mbHRfcmVnaW9uKTsKKwlmb3IgKCA7IGNudDsgY250LS0sIHJlZ2lvbisrKSB7CisJCS8qIFN0b3JlIGFkZHJlc3NlcyBhcyBEV09SRCBvZmZzZXRzLiAqLworCQlzdGFydCA9IGxlMzJfdG9fY3B1KHJlZ2lvbi0+c3RhcnQpID4+IDI7CisKKwkJREVCVUczKHFsNF9wcmludGsoS0VSTl9ERUJVRywgaGEsICJGTFRbJTAyeF06IHN0YXJ0PTB4JXggIgorCQkgICAgImVuZD0weCV4IHNpemU9MHgleC5cbiIsIGxlMzJfdG9fY3B1KHJlZ2lvbi0+Y29kZSksIHN0YXJ0LAorCQkgICAgbGUzMl90b19jcHUocmVnaW9uLT5lbmQpID4+IDIsIGxlMzJfdG9fY3B1KHJlZ2lvbi0+c2l6ZSkpKTsKKworCQlzd2l0Y2ggKGxlMzJfdG9fY3B1KHJlZ2lvbi0+Y29kZSkgJiAweGZmKSB7CisJCWNhc2UgRkxUX1JFR19GRFQ6CisJCQlody0+Zmx0X3JlZ2lvbl9mZHQgPSBzdGFydDsKKwkJCWJyZWFrOworCQljYXNlIEZMVF9SRUdfQk9PVF9DT0RFXzgyOgorCQkJaHctPmZsdF9yZWdpb25fYm9vdCA9IHN0YXJ0OworCQkJYnJlYWs7CisJCWNhc2UgRkxUX1JFR19GV184MjoKKwkJCWh3LT5mbHRfcmVnaW9uX2Z3ID0gc3RhcnQ7CisJCQlicmVhazsKKwkJY2FzZSBGTFRfUkVHX0JPT1RMT0FEXzgyOgorCQkJaHctPmZsdF9yZWdpb25fYm9vdGxvYWQgPSBzdGFydDsKKwkJCWJyZWFrOworCQl9CisJfQorCWdvdG8gZG9uZTsKKworbm9fZmxhc2hfZGF0YToKKwkvKiBVc2UgaGFyZGNvZGVkIGRlZmF1bHRzLiAqLworCWxvYyA9IGxvY2F0aW9uc1swXTsKKworCWh3LT5mbHRfcmVnaW9uX2ZkdCAgICAgID0gRkFfRkxBU0hfREVTQ1JfQUREUl84MjsKKwlody0+Zmx0X3JlZ2lvbl9ib290ICAgICA9IEZBX0JPT1RfQ09ERV9BRERSXzgyOworCWh3LT5mbHRfcmVnaW9uX2Jvb3Rsb2FkID0gRkFfQk9PVF9MT0FEX0FERFJfODI7CisJaHctPmZsdF9yZWdpb25fZncgICAgICAgPSBGQV9SSVNDX0NPREVfQUREUl84MjsKK2RvbmU6CisJREVCVUcyKHFsNF9wcmludGsoS0VSTl9JTkZPLCBoYSwgIkZMVFslc106IGZsdD0weCV4IGZkdD0weCV4ICIKKwkgICAgImJvb3Q9MHgleCBib290bG9hZD0weCV4IGZ3PTB4JXhcbiIsIGxvYywgaHctPmZsdF9yZWdpb25fZmx0LAorCSAgICBody0+Zmx0X3JlZ2lvbl9mZHQsCWh3LT5mbHRfcmVnaW9uX2Jvb3QsIGh3LT5mbHRfcmVnaW9uX2Jvb3Rsb2FkLAorCSAgICBody0+Zmx0X3JlZ2lvbl9mdykpOworfQorCitzdGF0aWMgdm9pZAorcWxhNF84eHh4X2dldF9mZHRfaW5mbyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCit7CisjZGVmaW5lIEZMQVNIX0JMS19TSVpFXzRLICAgICAgIDB4MTAwMAorI2RlZmluZSBGTEFTSF9CTEtfU0laRV8zMksgICAgICAweDgwMDAKKyNkZWZpbmUgRkxBU0hfQkxLX1NJWkVfNjRLICAgICAgMHgxMDAwMAorCWNvbnN0IGNoYXIgKmxvYywgKmxvY2F0aW9uc1tdID0geyAiTUlEIiwgIkZEVCIgfTsKKwl1aW50MTZfdCBjbnQsIGNoa3N1bTsKKwl1aW50MTZfdCAqd3B0cjsKKwlzdHJ1Y3QgcWxhX2ZkdF9sYXlvdXQgKmZkdDsKKwl1aW50MTZfdCBtaWQsIGZpZDsKKwlzdHJ1Y3QgcWw4Mnh4X2h3X2RhdGEgKmh3ID0gJmhhLT5odzsKKworCWh3LT5mbGFzaF9jb25mX29mZiA9IEZBUlhfQUNDRVNTX0ZMQVNIX0NPTkY7CisJaHctPmZsYXNoX2RhdGFfb2ZmID0gRkFSWF9BQ0NFU1NfRkxBU0hfREFUQTsKKworCXdwdHIgPSAodWludDE2X3QgKiloYS0+cmVxdWVzdF9yaW5nOworCWZkdCA9IChzdHJ1Y3QgcWxhX2ZkdF9sYXlvdXQgKiloYS0+cmVxdWVzdF9yaW5nOworCXFsYTRfOHh4eF9yZWFkX29wdHJvbV9kYXRhKGhhLCAodWludDhfdCAqKWhhLT5yZXF1ZXN0X3JpbmcsCisJICAgIGh3LT5mbHRfcmVnaW9uX2ZkdCA8PCAyLCBPUFRST01fQlVSU1RfU0laRSk7CisKKwlpZiAoKndwdHIgPT0gX19jb25zdGFudF9jcHVfdG9fbGUxNigweGZmZmYpKQorCQlnb3RvIG5vX2ZsYXNoX2RhdGE7CisKKwlpZiAoZmR0LT5zaWdbMF0gIT0gJ1EnIHx8IGZkdC0+c2lnWzFdICE9ICdMJyB8fCBmZHQtPnNpZ1syXSAhPSAnSScgfHwKKwkgICAgZmR0LT5zaWdbM10gIT0gJ0QnKQorCQlnb3RvIG5vX2ZsYXNoX2RhdGE7CisKKwlmb3IgKGNudCA9IDAsIGNoa3N1bSA9IDA7IGNudCA8IHNpemVvZihzdHJ1Y3QgcWxhX2ZkdF9sYXlvdXQpID4+IDE7CisJICAgIGNudCsrKQorCQljaGtzdW0gKz0gbGUxNl90b19jcHUoKndwdHIrKyk7CisKKwlpZiAoY2hrc3VtKSB7CisJCURFQlVHMihxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJJbmNvbnNpc3RlbnQgRkRUIGRldGVjdGVkOiAiCisJCSAgICAiY2hlY2tzdW09MHgleCBpZD0lYyB2ZXJzaW9uPTB4JXguXG4iLCBjaGtzdW0sIGZkdC0+c2lnWzBdLAorCQkgICAgbGUxNl90b19jcHUoZmR0LT52ZXJzaW9uKSkpOworCQlnb3RvIG5vX2ZsYXNoX2RhdGE7CisJfQorCisJbG9jID0gbG9jYXRpb25zWzFdOworCW1pZCA9IGxlMTZfdG9fY3B1KGZkdC0+bWFuX2lkKTsKKwlmaWQgPSBsZTE2X3RvX2NwdShmZHQtPmlkKTsKKwlody0+ZmR0X3dydF9kaXNhYmxlID0gZmR0LT53cnRfZGlzYWJsZV9iaXRzOworCWh3LT5mZHRfZXJhc2VfY21kID0gZmxhc2hfY29uZl9hZGRyKGh3LCAweDAzMDAgfCBmZHQtPmVyYXNlX2NtZCk7CisJaHctPmZkdF9ibG9ja19zaXplID0gbGUzMl90b19jcHUoZmR0LT5ibG9ja19zaXplKTsKKworCWlmIChmZHQtPnVucHJvdGVjdF9zZWNfY21kKSB7CisJCWh3LT5mZHRfdW5wcm90ZWN0X3NlY19jbWQgPSBmbGFzaF9jb25mX2FkZHIoaHcsIDB4MDMwMCB8CisJCSAgICBmZHQtPnVucHJvdGVjdF9zZWNfY21kKTsKKwkJaHctPmZkdF9wcm90ZWN0X3NlY19jbWQgPSBmZHQtPnByb3RlY3Rfc2VjX2NtZCA/CisJCSAgICBmbGFzaF9jb25mX2FkZHIoaHcsIDB4MDMwMCB8IGZkdC0+cHJvdGVjdF9zZWNfY21kKSA6CisJCSAgICBmbGFzaF9jb25mX2FkZHIoaHcsIDB4MDMzNik7CisJfQorCWdvdG8gZG9uZTsKKworbm9fZmxhc2hfZGF0YToKKwlsb2MgPSBsb2NhdGlvbnNbMF07CisJaHctPmZkdF9ibG9ja19zaXplID0gRkxBU0hfQkxLX1NJWkVfNjRLOworZG9uZToKKwlERUJVRzIocWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLCAiRkRUWyVzXTogKDB4JXgvMHgleCkgZXJhc2U9MHgleCAiCisJCSJwcm89JXggdXBybz0leCB3cnRkPTB4JXggYmxrPTB4JXguXG4iLCBsb2MsIG1pZCwgZmlkLAorCQlody0+ZmR0X2VyYXNlX2NtZCwgaHctPmZkdF9wcm90ZWN0X3NlY19jbWQsCisJCWh3LT5mZHRfdW5wcm90ZWN0X3NlY19jbWQsIGh3LT5mZHRfd3J0X2Rpc2FibGUsCisJCWh3LT5mZHRfYmxvY2tfc2l6ZSkpOworfQorCitzdGF0aWMgdm9pZAorcWxhNF84eHh4X2dldF9pZGNfcGFyYW0oc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKQoreworI2RlZmluZSBRTEE4MlhYX0lEQ19QQVJBTV9BRERSICAgICAgMHgwMDNlODg1YworCXVpbnQzMl90ICp3cHRyOworCisJaWYgKCFpc19xbGE4MDIyKGhhKSkKKwkJcmV0dXJuOworCXdwdHIgPSAodWludDMyX3QgKiloYS0+cmVxdWVzdF9yaW5nOworCXFsYTRfOHh4eF9yZWFkX29wdHJvbV9kYXRhKGhhLCAodWludDhfdCAqKWhhLT5yZXF1ZXN0X3JpbmcsCisJCQlRTEE4MlhYX0lEQ19QQVJBTV9BRERSICwgOCk7CisKKwlpZiAoKndwdHIgPT0gX19jb25zdGFudF9jcHVfdG9fbGUzMigweGZmZmZmZmZmKSkgeworCQloYS0+bnhfZGV2X2luaXRfdGltZW91dCA9IFJPTV9ERVZfSU5JVF9USU1FT1VUOworCQloYS0+bnhfcmVzZXRfdGltZW91dCA9IFJPTV9EUlZfUkVTRVRfQUNLX1RJTUVPVVQ7CisJfSBlbHNlIHsKKwkJaGEtPm54X2Rldl9pbml0X3RpbWVvdXQgPSBsZTMyX3RvX2NwdSgqd3B0cisrKTsKKwkJaGEtPm54X3Jlc2V0X3RpbWVvdXQgPSBsZTMyX3RvX2NwdSgqd3B0cik7CisJfQorCisJREVCVUcyKHFsNF9wcmludGsoS0VSTl9ERUJVRywgaGEsCisJCSJoYS0+bnhfZGV2X2luaXRfdGltZW91dCA9ICVkXG4iLCBoYS0+bnhfZGV2X2luaXRfdGltZW91dCkpOworCURFQlVHMihxbDRfcHJpbnRrKEtFUk5fREVCVUcsIGhhLAorCQkiaGEtPm54X3Jlc2V0X3RpbWVvdXQgPSAlZFxuIiwgaGEtPm54X3Jlc2V0X3RpbWVvdXQpKTsKKwlyZXR1cm47Cit9CisKK2ludAorcWxhNF84eHh4X2dldF9mbGFzaF9pbmZvKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK3sKKwlpbnQgcmV0OworCXVpbnQzMl90IGZsdF9hZGRyOworCisJcmV0ID0gcWxhNF84eHh4X2ZpbmRfZmx0X3N0YXJ0KGhhLCAmZmx0X2FkZHIpOworCWlmIChyZXQgIT0gUUxBX1NVQ0NFU1MpCisJCXJldHVybiByZXQ7CisKKwlxbGE0Xzh4eHhfZ2V0X2ZsdF9pbmZvKGhhLCBmbHRfYWRkcik7CisJcWxhNF84eHh4X2dldF9mZHRfaW5mbyhoYSk7CisJcWxhNF84eHh4X2dldF9pZGNfcGFyYW0oaGEpOworCisJcmV0dXJuIFFMQV9TVUNDRVNTOworfQorCisvKioKKyAqIHFsYTRfOHh4eF9zdG9wX2Zpcm13YXJlIC0gc3RvcHMgZmlybXdhcmUgb24gc3BlY2lmaWVkIGFkYXB0ZXIgaW5zdGFuY2UKKyAqIEBoYTogcG9pbnRlciB0byBob3N0IGFkYXB0ZXIgc3RydWN0dXJlLgorICoKKyAqIFJlbWFya3M6CisgKiBGb3IgaVNDU0ksIHRocm93cyBhd2F5IGFsbCBJL08gYW5kIEFFTnMgaW50byBiaXQgYnVja2V0LCBzbyB0aGV5IHdpbGwKKyAqIG5vdCBiZSBhdmFpbGFibGUgYWZ0ZXIgc3VjY2Vzc2Z1bCByZXR1cm4uICBEcml2ZXIgbXVzdCBjbGVhbnVwIHBvdGVudGlhbAorICogb3V0c3RhbmRpbmcgSS9PJ3MgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmNpb24uCisgKiovCitpbnQKK3FsYTRfOHh4eF9zdG9wX2Zpcm13YXJlKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK3sKKwlpbnQgc3RhdHVzOworCXVpbnQzMl90IG1ib3hfY21kW01CT1hfUkVHX0NPVU5UXTsKKwl1aW50MzJfdCBtYm94X3N0c1tNQk9YX1JFR19DT1VOVF07CisKKwltZW1zZXQoJm1ib3hfY21kLCAwLCBzaXplb2YobWJveF9jbWQpKTsKKwltZW1zZXQoJm1ib3hfc3RzLCAwLCBzaXplb2YobWJveF9zdHMpKTsKKworCW1ib3hfY21kWzBdID0gTUJPWF9DTURfU1RPUF9GVzsKKwlzdGF0dXMgPSBxbGE0eHh4X21haWxib3hfY29tbWFuZChoYSwgTUJPWF9SRUdfQ09VTlQsIDEsCisJICAgICZtYm94X2NtZFswXSwgJm1ib3hfc3RzWzBdKTsKKworCURFQlVHMihwcmludGsoInNjc2klbGQ6ICVzOiBzdGF0dXMgPSAlZFxuIiwgaGEtPmhvc3Rfbm8sCisJICAgIF9fZnVuY19fLCBzdGF0dXMpKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHFsYTRfOHh4eF9pc3BfcmVzZXQgLSBSZXNldHMgSVNQIGFuZCBhYm9ydHMgYWxsIG91dHN0YW5kaW5nIGNvbW1hbmRzLgorICogQGhhOiBwb2ludGVyIHRvIGhvc3QgYWRhcHRlciBzdHJ1Y3R1cmUuCisgKiovCitpbnQKK3FsYTRfOHh4eF9pc3BfcmVzZXQoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKQoreworCWludCBydmFsOworCXVpbnQzMl90IGRldl9zdGF0ZTsKKworCXFsYTRfOHh4eF9pZGNfbG9jayhoYSk7CisJZGV2X3N0YXRlID0gcWxhNF84eHh4X3JkXzMyKGhhLCBRTEE4MlhYX0NSQl9ERVZfU1RBVEUpOworCisJaWYgKGRldl9zdGF0ZSA9PSBRTEE4MlhYX0RFVl9SRUFEWSkgeworCQlxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJIVyBTdGF0ZTogTkVFRCBSRVNFVFxuIik7CisJCXFsYTRfOHh4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfREVWX1NUQVRFLAorCQkgICAgUUxBODJYWF9ERVZfTkVFRF9SRVNFVCk7CisJfSBlbHNlCisJCXFsNF9wcmludGsoS0VSTl9JTkZPLCBoYSwgIkhXIFN0YXRlOiBERVZJQ0UgSU5JVElBTElaSU5HXG4iKTsKKworCXFsYTRfOHh4eF9pZGNfdW5sb2NrKGhhKTsKKworCXJ2YWwgPSBxbGE0Xzh4eHhfZGV2aWNlX3N0YXRlX2hhbmRsZXIoaGEpOworCisJcWxhNF84eHh4X2lkY19sb2NrKGhhKTsKKwlxbGE0Xzh4eHhfY2xlYXJfcnN0X3JlYWR5KGhhKTsKKwlxbGE0Xzh4eHhfaWRjX3VubG9jayhoYSk7CisKKwlyZXR1cm4gcnZhbDsKK30KKworLyoqCisgKiBxbGE0Xzh4eHhfZ2V0X3N5c19pbmZvIC0gZ2V0IGFkYXB0ZXIgTUFDIGFkZHJlc3MoZXMpIGFuZCBzZXJpYWwgbnVtYmVyCisgKiBAaGE6IHBvaW50ZXIgdG8gaG9zdCBhZGFwdGVyIHN0cnVjdHVyZS4KKyAqCisgKiovCitpbnQgcWxhNF84eHh4X2dldF9zeXNfaW5mbyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCit7CisJdWludDMyX3QgbWJveF9jbWRbTUJPWF9SRUdfQ09VTlRdOworCXVpbnQzMl90IG1ib3hfc3RzW01CT1hfUkVHX0NPVU5UXTsKKwlzdHJ1Y3QgbWJ4X3N5c19pbmZvICpzeXNfaW5mbzsKKwlkbWFfYWRkcl90IHN5c19pbmZvX2RtYTsKKwlpbnQgc3RhdHVzID0gUUxBX0VSUk9SOworCisJc3lzX2luZm8gPSBkbWFfYWxsb2NfY29oZXJlbnQoJmhhLT5wZGV2LT5kZXYsIHNpemVvZigqc3lzX2luZm8pLAorCQkJCSAgICAgICZzeXNfaW5mb19kbWEsIEdGUF9LRVJORUwpOworCWlmIChzeXNfaW5mbyA9PSBOVUxMKSB7CisJCURFQlVHMihwcmludGsoInNjc2klbGQ6ICVzOiBVbmFibGUgdG8gYWxsb2NhdGUgZG1hIGJ1ZmZlci5cbiIsCisJCSAgICBoYS0+aG9zdF9ubywgX19mdW5jX18pKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwltZW1zZXQoc3lzX2luZm8sIDAsIHNpemVvZigqc3lzX2luZm8pKTsKKwltZW1zZXQoJm1ib3hfY21kLCAwLCBzaXplb2YobWJveF9jbWQpKTsKKwltZW1zZXQoJm1ib3hfc3RzLCAwLCBzaXplb2YobWJveF9zdHMpKTsKKworCW1ib3hfY21kWzBdID0gTUJPWF9DTURfR0VUX1NZU19JTkZPOworCW1ib3hfY21kWzFdID0gTFNEVyhzeXNfaW5mb19kbWEpOworCW1ib3hfY21kWzJdID0gTVNEVyhzeXNfaW5mb19kbWEpOworCW1ib3hfY21kWzRdID0gc2l6ZW9mKCpzeXNfaW5mbyk7CisKKwlpZiAocWxhNHh4eF9tYWlsYm94X2NvbW1hbmQoaGEsIE1CT1hfUkVHX0NPVU5ULCA2LCAmbWJveF9jbWRbMF0sCisJICAgICZtYm94X3N0c1swXSkgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJREVCVUcyKHByaW50aygic2NzaSVsZDogJXM6IEdFVF9TWVNfSU5GTyBmYWlsZWRcbiIsCisJCSAgICBoYS0+aG9zdF9ubywgX19mdW5jX18pKTsKKwkJZ290byBleGl0X3ZhbGlkYXRlX21hYzgyOworCX0KKworCWlmIChtYm94X3N0c1s0XSA8IHNpemVvZigqc3lzX2luZm8pKSB7CisJCURFQlVHMihwcmludGsoInNjc2klbGQ6ICVzOiBHRVRfU1lTX0lORk8gZGF0YSByZWNlaXZlIgorCQkgICAgIiBlcnJvciAoJXgpXG4iLCBoYS0+aG9zdF9ubywgX19mdW5jX18sIG1ib3hfc3RzWzRdKSk7CisJCWdvdG8gZXhpdF92YWxpZGF0ZV9tYWM4MjsKKworCX0KKworCS8qIFNhdmUgTS5BLkMuIGFkZHJlc3MgJiBzZXJpYWxfbnVtYmVyICovCisJbWVtY3B5KGhhLT5teV9tYWMsICZzeXNfaW5mby0+bWFjX2FkZHJbMF0sCisJICAgIG1pbihzaXplb2YoaGEtPm15X21hYyksIHNpemVvZihzeXNfaW5mby0+bWFjX2FkZHIpKSk7CisJbWVtY3B5KGhhLT5zZXJpYWxfbnVtYmVyLCAmc3lzX2luZm8tPnNlcmlhbF9udW1iZXIsCisJICAgIG1pbihzaXplb2YoaGEtPnNlcmlhbF9udW1iZXIpLCBzaXplb2Yoc3lzX2luZm8tPnNlcmlhbF9udW1iZXIpKSk7CisKKwlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiAlczogIgorCSAgICAibWFjICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4ICIKKwkgICAgInNlcmlhbCAlc1xuIiwgaGEtPmhvc3Rfbm8sIF9fZnVuY19fLAorCSAgICBoYS0+bXlfbWFjWzBdLCBoYS0+bXlfbWFjWzFdLCBoYS0+bXlfbWFjWzJdLAorCSAgICBoYS0+bXlfbWFjWzNdLCBoYS0+bXlfbWFjWzRdLCBoYS0+bXlfbWFjWzVdLAorCSAgICBoYS0+c2VyaWFsX251bWJlcikpOworCisJc3RhdHVzID0gUUxBX1NVQ0NFU1M7CisKK2V4aXRfdmFsaWRhdGVfbWFjODI6CisJZG1hX2ZyZWVfY29oZXJlbnQoJmhhLT5wZGV2LT5kZXYsIHNpemVvZigqc3lzX2luZm8pLCBzeXNfaW5mbywKKwkJCSAgc3lzX2luZm9fZG1hKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBJbnRlcnJ1cHQgaGFuZGxpbmcgaGVscGVycy4gKi8KKworc3RhdGljIGludAorcWxhNF84eHh4X21ieF9pbnRyX2VuYWJsZShzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCit7CisJdWludDMyX3QgbWJveF9jbWRbTUJPWF9SRUdfQ09VTlRdOworCXVpbnQzMl90IG1ib3hfc3RzW01CT1hfUkVHX0NPVU5UXTsKKworCURFQlVHMihxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsICIlc1xuIiwgX19mdW5jX18pKTsKKworCW1lbXNldCgmbWJveF9jbWQsIDAsIHNpemVvZihtYm94X2NtZCkpOworCW1lbXNldCgmbWJveF9zdHMsIDAsIHNpemVvZihtYm94X3N0cykpOworCW1ib3hfY21kWzBdID0gTUJPWF9DTURfRU5BQkxFX0lOVFJTOworCW1ib3hfY21kWzFdID0gSU5UUl9FTkFCTEU7CisJaWYgKHFsYTR4eHhfbWFpbGJveF9jb21tYW5kKGhhLCBNQk9YX1JFR19DT1VOVCwgMSwgJm1ib3hfY21kWzBdLAorCQkmbWJveF9zdHNbMF0pICE9IFFMQV9TVUNDRVNTKSB7CisJCURFQlVHMihxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCSAgICAiJXM6IE1CT1hfQ01EX0VOQUJMRV9JTlRSUyBmYWlsZWQgKDB4JTA0eClcbiIsCisJCSAgICBfX2Z1bmNfXywgbWJveF9zdHNbMF0pKTsKKwkJcmV0dXJuIFFMQV9FUlJPUjsKKwl9CisJcmV0dXJuIFFMQV9TVUNDRVNTOworfQorCitzdGF0aWMgaW50CitxbGE0Xzh4eHhfbWJ4X2ludHJfZGlzYWJsZShzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCit7CisJdWludDMyX3QgbWJveF9jbWRbTUJPWF9SRUdfQ09VTlRdOworCXVpbnQzMl90IG1ib3hfc3RzW01CT1hfUkVHX0NPVU5UXTsKKworCURFQlVHMihxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsICIlc1xuIiwgX19mdW5jX18pKTsKKworCW1lbXNldCgmbWJveF9jbWQsIDAsIHNpemVvZihtYm94X2NtZCkpOworCW1lbXNldCgmbWJveF9zdHMsIDAsIHNpemVvZihtYm94X3N0cykpOworCW1ib3hfY21kWzBdID0gTUJPWF9DTURfRU5BQkxFX0lOVFJTOworCW1ib3hfY21kWzFdID0gSU5UUl9ESVNBQkxFOworCWlmIChxbGE0eHh4X21haWxib3hfY29tbWFuZChoYSwgTUJPWF9SRUdfQ09VTlQsIDEsICZtYm94X2NtZFswXSwKKwkgICAgJm1ib3hfc3RzWzBdKSAhPSBRTEFfU1VDQ0VTUykgeworCQlERUJVRzIocWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkJIiVzOiBNQk9YX0NNRF9FTkFCTEVfSU5UUlMgZmFpbGVkICgweCUwNHgpXG4iLAorCQkJX19mdW5jX18sIG1ib3hfc3RzWzBdKSk7CisJCXJldHVybiBRTEFfRVJST1I7CisJfQorCisJcmV0dXJuIFFMQV9TVUNDRVNTOworfQorCit2b2lkCitxbGE0Xzh4eHhfZW5hYmxlX2ludHJzKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK3sKKwlxbGE0Xzh4eHhfbWJ4X2ludHJfZW5hYmxlKGhhKTsKKworCXNwaW5fbG9ja19pcnEoJmhhLT5oYXJkd2FyZV9sb2NrKTsKKwkvKiBCSVQgMTAgLSByZXNldCAqLworCXFsYTRfOHh4eF93cl8zMihoYSwgaGEtPm54X2xlZ2FjeV9pbnRyLnRndF9tYXNrX3JlZywgMHhmYmZmKTsKKwlzcGluX3VubG9ja19pcnEoJmhhLT5oYXJkd2FyZV9sb2NrKTsKKwlzZXRfYml0KEFGX0lOVEVSUlVQVFNfT04sICZoYS0+ZmxhZ3MpOworfQorCit2b2lkCitxbGE0Xzh4eHhfZGlzYWJsZV9pbnRycyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCit7CisJaWYgKHRlc3RfYml0KEFGX0lOVEVSUlVQVFNfT04sICZoYS0+ZmxhZ3MpKQorCQlxbGE0Xzh4eHhfbWJ4X2ludHJfZGlzYWJsZShoYSk7CisKKwlzcGluX2xvY2tfaXJxKCZoYS0+aGFyZHdhcmVfbG9jayk7CisJLyogQklUIDEwIC0gc2V0ICovCisJcWxhNF84eHh4X3dyXzMyKGhhLCBoYS0+bnhfbGVnYWN5X2ludHIudGd0X21hc2tfcmVnLCAweDA0MDApOworCXNwaW5fdW5sb2NrX2lycSgmaGEtPmhhcmR3YXJlX2xvY2spOworCWNsZWFyX2JpdChBRl9JTlRFUlJVUFRTX09OLCAmaGEtPmZsYWdzKTsKK30KKworc3RydWN0IHFsNF9pbml0X21zaXhfZW50cnkgeworCXVpbnQxNl90IGVudHJ5OworCXVpbnQxNl90IGluZGV4OworCWNvbnN0IGNoYXIgKm5hbWU7CisJaXJxX2hhbmRsZXJfdCBoYW5kbGVyOworfTsKKworc3RhdGljIHN0cnVjdCBxbDRfaW5pdF9tc2l4X2VudHJ5IHFsYTRfOHh4eF9tc2l4X2VudHJpZXNbUUxBX01TSVhfRU5UUklFU10gPSB7CisJeyBRTEFfTVNJWF9ERUZBVUxULCBRTEFfTUlEWF9ERUZBVUxULAorCSAgICAicWxhNHh4eCAoZGVmYXVsdCkiLAorCSAgICAoaXJxX2hhbmRsZXJfdClxbGE0Xzh4eHhfZGVmYXVsdF9pbnRyX2hhbmRsZXIgfSwKKwl7IFFMQV9NU0lYX1JTUF9RLCBRTEFfTUlEWF9SU1BfUSwKKwkgICAgInFsYTR4eHggKHJzcF9xKSIsIChpcnFfaGFuZGxlcl90KXFsYTRfOHh4eF9tc2l4X3JzcF9xIH0sCit9OworCit2b2lkCitxbGE0Xzh4eHhfZGlzYWJsZV9tc2l4KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcWw0X21zaXhfZW50cnkgKnFlbnRyeTsKKworCWZvciAoaSA9IDA7IGkgPCBRTEFfTVNJWF9FTlRSSUVTOyBpKyspIHsKKwkJcWVudHJ5ID0gJmhhLT5tc2l4X2VudHJpZXNbcWxhNF84eHh4X21zaXhfZW50cmllc1tpXS5pbmRleF07CisJCWlmIChxZW50cnktPmhhdmVfaXJxKSB7CisJCQlmcmVlX2lycShxZW50cnktPm1zaXhfdmVjdG9yLCBoYSk7CisJCQlERUJVRzIocWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLCAiJXM6ICVzXG4iLAorCQkJCV9fZnVuY19fLCBxbGE0Xzh4eHhfbXNpeF9lbnRyaWVzW2ldLm5hbWUpKTsKKwkJfQorCX0KKwlwY2lfZGlzYWJsZV9tc2l4KGhhLT5wZGV2KTsKKwljbGVhcl9iaXQoQUZfTVNJWF9FTkFCTEVELCAmaGEtPmZsYWdzKTsKK30KKworaW50CitxbGE0Xzh4eHhfZW5hYmxlX21zaXgoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKQoreworCWludCBpLCByZXQ7CisJc3RydWN0IG1zaXhfZW50cnkgZW50cmllc1tRTEFfTVNJWF9FTlRSSUVTXTsKKwlzdHJ1Y3QgcWw0X21zaXhfZW50cnkgKnFlbnRyeTsKKworCWZvciAoaSA9IDA7IGkgPCBRTEFfTVNJWF9FTlRSSUVTOyBpKyspCisJCWVudHJpZXNbaV0uZW50cnkgPSBxbGE0Xzh4eHhfbXNpeF9lbnRyaWVzW2ldLmVudHJ5OworCisJcmV0ID0gcGNpX2VuYWJsZV9tc2l4KGhhLT5wZGV2LCBlbnRyaWVzLCBBUlJBWV9TSVpFKGVudHJpZXMpKTsKKwlpZiAocmV0KSB7CisJCXFsNF9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJICAgICJNU0ktWDogRmFpbGVkIHRvIGVuYWJsZSBzdXBwb3J0IC0tICVkLyVkXG4iLAorCQkgICAgUUxBX01TSVhfRU5UUklFUywgcmV0KTsKKwkJZ290byBtc2l4X291dDsKKwl9CisJc2V0X2JpdChBRl9NU0lYX0VOQUJMRUQsICZoYS0+ZmxhZ3MpOworCisJZm9yIChpID0gMDsgaSA8IFFMQV9NU0lYX0VOVFJJRVM7IGkrKykgeworCQlxZW50cnkgPSAmaGEtPm1zaXhfZW50cmllc1txbGE0Xzh4eHhfbXNpeF9lbnRyaWVzW2ldLmluZGV4XTsKKwkJcWVudHJ5LT5tc2l4X3ZlY3RvciA9IGVudHJpZXNbaV0udmVjdG9yOworCQlxZW50cnktPm1zaXhfZW50cnkgPSBlbnRyaWVzW2ldLmVudHJ5OworCQlxZW50cnktPmhhdmVfaXJxID0gMDsKKwkJcmV0ID0gcmVxdWVzdF9pcnEocWVudHJ5LT5tc2l4X3ZlY3RvciwKKwkJICAgIHFsYTRfOHh4eF9tc2l4X2VudHJpZXNbaV0uaGFuZGxlciwgMCwKKwkJICAgIHFsYTRfOHh4eF9tc2l4X2VudHJpZXNbaV0ubmFtZSwgaGEpOworCQlpZiAocmV0KSB7CisJCQlxbDRfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQkgICAgIk1TSS1YOiBVbmFibGUgdG8gcmVnaXN0ZXIgaGFuZGxlciAtLSAleC8lZC5cbiIsCisJCQkgICAgcWxhNF84eHh4X21zaXhfZW50cmllc1tpXS5pbmRleCwgcmV0KTsKKwkJCXFsYTRfOHh4eF9kaXNhYmxlX21zaXgoaGEpOworCQkJZ290byBtc2l4X291dDsKKwkJfQorCQlxZW50cnktPmhhdmVfaXJxID0gMTsKKwkJREVCVUcyKHFsNF9wcmludGsoS0VSTl9JTkZPLCBoYSwgIiVzOiAlc1xuIiwKKwkJCV9fZnVuY19fLCBxbGE0Xzh4eHhfbXNpeF9lbnRyaWVzW2ldLm5hbWUpKTsKKwl9Cittc2l4X291dDoKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X254LmggYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfbnguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzFhZDNmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X254LmgKQEAgLTAsMCArMSw3NzkgQEAKKy8qCisgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMDggUUxvZ2ljIENvcnBvcmF0aW9uCisgKgorICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX1FMQV9OWF9ICisjZGVmaW5lIF9fUUxBX05YX0gKKworLyoKKyAqIEZvbGxvd2luZyBhcmUgdGhlIHN0YXRlcyBvZiB0aGUgUGhhbnRvbS4gUGhhbnRvbSB3aWxsIHNldCB0aGVtIGFuZAorICogSG9zdCB3aWxsIHJlYWQgdG8gY2hlY2sgaWYgdGhlIGZpZWxkcyBhcmUgY29ycmVjdC4KKyovCisjZGVmaW5lIFBIQU5fSU5JVElBTElaRV9GQUlMRUQJCTB4ZmZmZgorI2RlZmluZSBQSEFOX0lOSVRJQUxJWkVfQ09NUExFVEUJMHhmZjAxCisKKy8qIEhvc3Qgd3JpdGVzIHRoZSBmb2xsb3dpbmcgdG8gbm90aWZ5IHRoYXQgaXQgaGFzIGRvbmUgdGhlIGluaXQtaGFuZHNoYWtlICovCisjZGVmaW5lIFBIQU5fSU5JVElBTElaRV9BQ0sJCTB4ZjAwZgorI2RlZmluZSBQSEFOX1BFR19SQ1ZfSU5JVElBTElaRUQJMHhmZjAxCisKKy8qQ1JCX1JFTEFURUQqLworI2RlZmluZSBRTEE4MlhYX0NSQl9CQVNFCVFMQTgyWFhfQ0FNX1JBTSgweDIwMCkKKyNkZWZpbmUgUUxBODJYWF9SRUcoWCkJCShRTEE4MlhYX0NSQl9CQVNFKyhYKSkKKworI2RlZmluZSBDUkJfQ01EUEVHX1NUQVRFCQlRTEE4MlhYX1JFRygweDUwKQorI2RlZmluZSBDUkJfUkNWUEVHX1NUQVRFCQlRTEE4MlhYX1JFRygweDEzYykKKyNkZWZpbmUgQk9PVF9MT0FERVJfRElNTV9TVEFUVVMJCVFMQTgyWFhfUkVHKDB4NTQpCisjZGVmaW5lIENSQl9ETUFfU0hJRlQJCQlRTEE4MlhYX1JFRygweGNjKQorCisjZGVmaW5lIFFMQTgyWFhfSFdfSDBfQ0hfSFVCX0FEUgkweDA1CisjZGVmaW5lIFFMQTgyWFhfSFdfSDFfQ0hfSFVCX0FEUgkweDBFCisjZGVmaW5lIFFMQTgyWFhfSFdfSDJfQ0hfSFVCX0FEUgkweDAzCisjZGVmaW5lIFFMQTgyWFhfSFdfSDNfQ0hfSFVCX0FEUgkweDAxCisjZGVmaW5lIFFMQTgyWFhfSFdfSDRfQ0hfSFVCX0FEUgkweDA2CisjZGVmaW5lIFFMQTgyWFhfSFdfSDVfQ0hfSFVCX0FEUgkweDA3CisjZGVmaW5lIFFMQTgyWFhfSFdfSDZfQ0hfSFVCX0FEUgkweDA4CisKKy8qICBIdWIgMCAqLworI2RlZmluZSBRTEE4MlhYX0hXX01OX0NSQl9BR1RfQURSCTB4MTUKKyNkZWZpbmUgUUxBODJYWF9IV19NU19DUkJfQUdUX0FEUgkweDI1CisKKy8qICBIdWIgMSAqLworI2RlZmluZSBRTEE4MlhYX0hXX1BTX0NSQl9BR1RfQURSCTB4NzMKKyNkZWZpbmUgUUxBODJYWF9IV19RTVNfQ1JCX0FHVF9BRFIJMHgwMAorI2RlZmluZSBRTEE4MlhYX0hXX1JQTVgzX0NSQl9BR1RfQURSCTB4MGIKKyNkZWZpbmUgUUxBODJYWF9IV19TUUdTMF9DUkJfQUdUX0FEUgkweDAxCisjZGVmaW5lIFFMQTgyWFhfSFdfU1FHUzFfQ1JCX0FHVF9BRFIJMHgwMgorI2RlZmluZSBRTEE4MlhYX0hXX1NRR1MyX0NSQl9BR1RfQURSCTB4MDMKKyNkZWZpbmUgUUxBODJYWF9IV19TUUdTM19DUkJfQUdUX0FEUgkweDA0CisjZGVmaW5lIFFMQTgyWFhfSFdfQzJDMF9DUkJfQUdUX0FEUgkweDU4CisjZGVmaW5lIFFMQTgyWFhfSFdfQzJDMV9DUkJfQUdUX0FEUgkweDU5CisjZGVmaW5lIFFMQTgyWFhfSFdfQzJDMl9DUkJfQUdUX0FEUgkweDVhCisjZGVmaW5lIFFMQTgyWFhfSFdfUlBNWDJfQ1JCX0FHVF9BRFIJMHgwYQorI2RlZmluZSBRTEE4MlhYX0hXX1JQTVg0X0NSQl9BR1RfQURSCTB4MGMKKyNkZWZpbmUgUUxBODJYWF9IV19SUE1YN19DUkJfQUdUX0FEUgkweDBmCisjZGVmaW5lIFFMQTgyWFhfSFdfUlBNWDlfQ1JCX0FHVF9BRFIJMHgxMgorI2RlZmluZSBRTEE4MlhYX0hXX1NNQl9DUkJfQUdUX0FEUgkweDE4CisKKy8qICBIdWIgMiAqLworI2RlZmluZSBRTEE4MlhYX0hXX05JVV9DUkJfQUdUX0FEUgkweDMxCisjZGVmaW5lIFFMQTgyWFhfSFdfSTJDMF9DUkJfQUdUX0FEUgkweDE5CisjZGVmaW5lIFFMQTgyWFhfSFdfSTJDMV9DUkJfQUdUX0FEUgkweDI5CisKKyNkZWZpbmUgUUxBODJYWF9IV19TTl9DUkJfQUdUX0FEUgkweDEwCisjZGVmaW5lIFFMQTgyWFhfSFdfSTJRX0NSQl9BR1RfQURSCTB4MjAKKyNkZWZpbmUgUUxBODJYWF9IV19MUENfQ1JCX0FHVF9BRFIJMHgyMgorI2RlZmluZSBRTEE4MlhYX0hXX1JPTVVTQl9DUkJfQUdUX0FEUiAgIDB4MjEKKyNkZWZpbmUgUUxBODJYWF9IV19RTV9DUkJfQUdUX0FEUgkweDY2CisjZGVmaW5lIFFMQTgyWFhfSFdfU1FHMF9DUkJfQUdUX0FEUgkweDYwCisjZGVmaW5lIFFMQTgyWFhfSFdfU1FHMV9DUkJfQUdUX0FEUgkweDYxCisjZGVmaW5lIFFMQTgyWFhfSFdfU1FHMl9DUkJfQUdUX0FEUgkweDYyCisjZGVmaW5lIFFMQTgyWFhfSFdfU1FHM19DUkJfQUdUX0FEUgkweDYzCisjZGVmaW5lIFFMQTgyWFhfSFdfUlBNWDFfQ1JCX0FHVF9BRFIgICAgMHgwOQorI2RlZmluZSBRTEE4MlhYX0hXX1JQTVg1X0NSQl9BR1RfQURSICAgIDB4MGQKKyNkZWZpbmUgUUxBODJYWF9IV19SUE1YNl9DUkJfQUdUX0FEUiAgICAweDBlCisjZGVmaW5lIFFMQTgyWFhfSFdfUlBNWDhfQ1JCX0FHVF9BRFIgICAgMHgxMQorCisvKiAgSHViIDMgKi8KKyNkZWZpbmUgUUxBODJYWF9IV19QSF9DUkJfQUdUX0FEUgkweDFBCisjZGVmaW5lIFFMQTgyWFhfSFdfU1JFX0NSQl9BR1RfQURSCTB4NTAKKyNkZWZpbmUgUUxBODJYWF9IV19FR19DUkJfQUdUX0FEUgkweDUxCisjZGVmaW5lIFFMQTgyWFhfSFdfUlBNWDBfQ1JCX0FHVF9BRFIJMHgwOAorCisvKiAgSHViIDQgKi8KKyNkZWZpbmUgUUxBODJYWF9IV19QRUdOMF9DUkJfQUdUX0FEUgkweDQwCisjZGVmaW5lIFFMQTgyWFhfSFdfUEVHTjFfQ1JCX0FHVF9BRFIJMHg0MQorI2RlZmluZSBRTEE4MlhYX0hXX1BFR04yX0NSQl9BR1RfQURSCTB4NDIKKyNkZWZpbmUgUUxBODJYWF9IV19QRUdOM19DUkJfQUdUX0FEUgkweDQzCisjZGVmaW5lIFFMQTgyWFhfSFdfUEVHTklfQ1JCX0FHVF9BRFIJMHg0NAorI2RlZmluZSBRTEE4MlhYX0hXX1BFR05EX0NSQl9BR1RfQURSCTB4NDUKKyNkZWZpbmUgUUxBODJYWF9IV19QRUdOQ19DUkJfQUdUX0FEUgkweDQ2CisjZGVmaW5lIFFMQTgyWFhfSFdfUEVHUjBfQ1JCX0FHVF9BRFIJMHg0NworI2RlZmluZSBRTEE4MlhYX0hXX1BFR1IxX0NSQl9BR1RfQURSCTB4NDgKKyNkZWZpbmUgUUxBODJYWF9IV19QRUdSMl9DUkJfQUdUX0FEUgkweDQ5CisjZGVmaW5lIFFMQTgyWFhfSFdfUEVHUjNfQ1JCX0FHVF9BRFIJMHg0YQorI2RlZmluZSBRTEE4MlhYX0hXX1BFR040X0NSQl9BR1RfQURSCTB4NGIKKworLyogIEh1YiA1ICovCisjZGVmaW5lIFFMQTgyWFhfSFdfUEVHUzBfQ1JCX0FHVF9BRFIJMHg0MAorI2RlZmluZSBRTEE4MlhYX0hXX1BFR1MxX0NSQl9BR1RfQURSCTB4NDEKKyNkZWZpbmUgUUxBODJYWF9IV19QRUdTMl9DUkJfQUdUX0FEUgkweDQyCisjZGVmaW5lIFFMQTgyWFhfSFdfUEVHUzNfQ1JCX0FHVF9BRFIJMHg0MworCisjZGVmaW5lIFFMQTgyWFhfSFdfUEVHU0lfQ1JCX0FHVF9BRFIJMHg0NAorI2RlZmluZSBRTEE4MlhYX0hXX1BFR1NEX0NSQl9BR1RfQURSCTB4NDUKKyNkZWZpbmUgUUxBODJYWF9IV19QRUdTQ19DUkJfQUdUX0FEUgkweDQ2CisKKy8qICBIdWIgNiAqLworI2RlZmluZSBRTEE4MlhYX0hXX0NBUzBfQ1JCX0FHVF9BRFIJMHg0NgorI2RlZmluZSBRTEE4MlhYX0hXX0NBUzFfQ1JCX0FHVF9BRFIJMHg0NworI2RlZmluZSBRTEE4MlhYX0hXX0NBUzJfQ1JCX0FHVF9BRFIJMHg0OAorI2RlZmluZSBRTEE4MlhYX0hXX0NBUzNfQ1JCX0FHVF9BRFIJMHg0OQorI2RlZmluZSBRTEE4MlhYX0hXX05DTV9DUkJfQUdUX0FEUgkweDE2CisjZGVmaW5lIFFMQTgyWFhfSFdfVE1SX0NSQl9BR1RfQURSCTB4MTcKKyNkZWZpbmUgUUxBODJYWF9IV19YRE1BX0NSQl9BR1RfQURSCTB4MDUKKyNkZWZpbmUgUUxBODJYWF9IV19PQ00wX0NSQl9BR1RfQURSCTB4MDYKKyNkZWZpbmUgUUxBODJYWF9IV19PQ00xX0NSQl9BR1RfQURSCTB4MDcKKworLyogIFRoaXMgZmllbGQgZGVmaW5lcyBQQ0kvWCBhZHIgWzI1OjIwXSBvZiBhZ2VudHMgb24gdGhlIENSQiAqLworLyogICovCisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9QSAkwCisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9QUwkxCisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9NTgkyCisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9NUwkzCisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9TUkUJNQorI2RlZmluZSBRTEE4MlhYX0hXX1BYX01BUF9DUkJfTklVCTYKKyNkZWZpbmUgUUxBODJYWF9IV19QWF9NQVBfQ1JCX1FNTgk3CisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9TUU4wCTgKKyNkZWZpbmUgUUxBODJYWF9IV19QWF9NQVBfQ1JCX1NRTjEJOQorI2RlZmluZSBRTEE4MlhYX0hXX1BYX01BUF9DUkJfU1FOMgkxMAorI2RlZmluZSBRTEE4MlhYX0hXX1BYX01BUF9DUkJfU1FOMwkxMQorI2RlZmluZSBRTEE4MlhYX0hXX1BYX01BUF9DUkJfUU1TCTEyCisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9TUVMwCTEzCisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9TUVMxCTE0CisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9TUVMyCTE1CisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9TUVMzCTE2CisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9QR04wCTE3CisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9QR04xCTE4CisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9QR04yCTE5CisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9QR04zCTIwCisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9QR040CVFMQTgyWFhfSFdfUFhfTUFQX0NSQl9TUVMyCisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9QR05ECTIxCisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9QR05JCTIyCisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9QR1MwCTIzCisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9QR1MxCTI0CisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9QR1MyCTI1CisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9QR1MzCTI2CisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9QR1NECTI3CisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9QR1NJCTI4CisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9TTgkyOQorI2RlZmluZSBRTEE4MlhYX0hXX1BYX01BUF9DUkJfRUcJMzEKKyNkZWZpbmUgUUxBODJYWF9IV19QWF9NQVBfQ1JCX1BIMgkzMgorI2RlZmluZSBRTEE4MlhYX0hXX1BYX01BUF9DUkJfUFMyCTMzCisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9DQU0JMzQKKyNkZWZpbmUgUUxBODJYWF9IV19QWF9NQVBfQ1JCX0NBUzAJMzUKKyNkZWZpbmUgUUxBODJYWF9IV19QWF9NQVBfQ1JCX0NBUzEJMzYKKyNkZWZpbmUgUUxBODJYWF9IV19QWF9NQVBfQ1JCX0NBUzIJMzcKKyNkZWZpbmUgUUxBODJYWF9IV19QWF9NQVBfQ1JCX0MyQzAJMzgKKyNkZWZpbmUgUUxBODJYWF9IV19QWF9NQVBfQ1JCX0MyQzEJMzkKKyNkZWZpbmUgUUxBODJYWF9IV19QWF9NQVBfQ1JCX1RJTVIJNDAKKyNkZWZpbmUgUUxBODJYWF9IV19QWF9NQVBfQ1JCX1JQTVgxCTQyCisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9SUE1YMgk0MworI2RlZmluZSBRTEE4MlhYX0hXX1BYX01BUF9DUkJfUlBNWDMJNDQKKyNkZWZpbmUgUUxBODJYWF9IV19QWF9NQVBfQ1JCX1JQTVg0CTQ1CisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9SUE1YNQk0NgorI2RlZmluZSBRTEE4MlhYX0hXX1BYX01BUF9DUkJfUlBNWDYJNDcKKyNkZWZpbmUgUUxBODJYWF9IV19QWF9NQVBfQ1JCX1JQTVg3CTQ4CisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9YRE1BCTQ5CisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9JMlEJNTAKKyNkZWZpbmUgUUxBODJYWF9IV19QWF9NQVBfQ1JCX1JPTVVTQiAgICA1MQorI2RlZmluZSBRTEE4MlhYX0hXX1BYX01BUF9DUkJfQ0FTMwk1MgorI2RlZmluZSBRTEE4MlhYX0hXX1BYX01BUF9DUkJfUlBNWDAJNTMKKyNkZWZpbmUgUUxBODJYWF9IV19QWF9NQVBfQ1JCX1JQTVg4CTU0CisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9SUE1YOQk1NQorI2RlZmluZSBRTEE4MlhYX0hXX1BYX01BUF9DUkJfT0NNMAk1NgorI2RlZmluZSBRTEE4MlhYX0hXX1BYX01BUF9DUkJfT0NNMQk1NworI2RlZmluZSBRTEE4MlhYX0hXX1BYX01BUF9DUkJfU01CCTU4CisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9JMkMwCTU5CisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9JMkMxCTYwCisjZGVmaW5lIFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9MUEMJNjEKKyNkZWZpbmUgUUxBODJYWF9IV19QWF9NQVBfQ1JCX1BHTkMJNjIKKyNkZWZpbmUgUUxBODJYWF9IV19QWF9NQVBfQ1JCX1BHUjAJNjMKKyNkZWZpbmUgUUxBODJYWF9IV19QWF9NQVBfQ1JCX1BHUjEJNAorI2RlZmluZSBRTEE4MlhYX0hXX1BYX01BUF9DUkJfUEdSMgkzMAorI2RlZmluZSBRTEE4MlhYX0hXX1BYX01BUF9DUkJfUEdSMwk0MQorCisvKiAgVGhpcyBmaWVsZCBkZWZpbmVzIENSQiBhZHIgWzMxOjIwXSBvZiB0aGUgYWdlbnRzICovCisvKiAgKi8KKworI2RlZmluZSBRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9NTgkoKFFMQTgyWFhfSFdfSDBfQ0hfSFVCX0FEUiA8PCA3KSB8IFwKKwkJCQkJUUxBODJYWF9IV19NTl9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfUEgJKChRTEE4MlhYX0hXX0gwX0NIX0hVQl9BRFIgPDwgNykgfCBcCisJCQkJCVFMQTgyWFhfSFdfUEhfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX01TCSgoUUxBODJYWF9IV19IMF9DSF9IVUJfQURSIDw8IDcpIHwgXAorCQkJCQlRTEE4MlhYX0hXX01TX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9QUwkoKFFMQTgyWFhfSFdfSDFfQ0hfSFVCX0FEUiA8PCA3KSB8IFwKKwkJCQkJUUxBODJYWF9IV19QU19DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfU1MJKChRTEE4MlhYX0hXX0gxX0NIX0hVQl9BRFIgPDwgNykgfCBcCisJCQkJCVFMQTgyWFhfSFdfU1NfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVgzICAgICgoUUxBODJYWF9IV19IMV9DSF9IVUJfQURSIDw8IDcpIHwgXAorCQkJCQkgICAgUUxBODJYWF9IV19SUE1YM19DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfUU1TCSAgICAoKFFMQTgyWFhfSFdfSDFfQ0hfSFVCX0FEUiA8PCA3KSB8IFwKKwkJCQkJICAgIFFMQTgyWFhfSFdfUU1TX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9TUVMwICAgICAoKFFMQTgyWFhfSFdfSDFfQ0hfSFVCX0FEUiA8PCA3KSB8IFwKKwkJCQkJICAgIFFMQTgyWFhfSFdfU1FHUzBfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1NRUzEgICAgICgoUUxBODJYWF9IV19IMV9DSF9IVUJfQURSIDw8IDcpIHwgXAorCQkJCQkgICAgUUxBODJYWF9IV19TUUdTMV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfU1FTMiAgICAgKChRTEE4MlhYX0hXX0gxX0NIX0hVQl9BRFIgPDwgNykgfCBcCisJCQkJCSAgICBRTEE4MlhYX0hXX1NRR1MyX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9TUVMzICAgICAoKFFMQTgyWFhfSFdfSDFfQ0hfSFVCX0FEUiA8PCA3KSB8IFwKKwkJCQkJICAgIFFMQTgyWFhfSFdfU1FHUzNfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX0MyQzAgICAgICgoUUxBODJYWF9IV19IMV9DSF9IVUJfQURSIDw8IDcpIHwgXAorCQkJCQkgICAgUUxBODJYWF9IV19DMkMwX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9DMkMxICAgICAoKFFMQTgyWFhfSFdfSDFfQ0hfSFVCX0FEUiA8PCA3KSB8IFwKKwkJCQkJICAgIFFMQTgyWFhfSFdfQzJDMV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfUlBNWDIgICAgKChRTEE4MlhYX0hXX0gxX0NIX0hVQl9BRFIgPDwgNykgfCBcCisJCQkJCSAgICBRTEE4MlhYX0hXX1JQTVgyX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9SUE1YNCAgICAoKFFMQTgyWFhfSFdfSDFfQ0hfSFVCX0FEUiA8PCA3KSB8IFwKKwkJCQkJICAgIFFMQTgyWFhfSFdfUlBNWDRfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVg3ICAgICgoUUxBODJYWF9IV19IMV9DSF9IVUJfQURSIDw8IDcpIHwgXAorCQkJCQkgICAgUUxBODJYWF9IV19SUE1YN19DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfUlBNWDkgICAgKChRTEE4MlhYX0hXX0gxX0NIX0hVQl9BRFIgPDwgNykgfCBcCisJCQkJCSAgICBRTEE4MlhYX0hXX1JQTVg5X0NSQl9BR1RfQURSKQorI2RlZmluZSBRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9TTUIJICAgICgoUUxBODJYWF9IV19IMV9DSF9IVUJfQURSIDw8IDcpIHwgXAorCQkJCQkgICAgUUxBODJYWF9IV19TTUJfQ1JCX0FHVF9BRFIpCisKKyNkZWZpbmUgUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfTklVICAgICAgKChRTEE4MlhYX0hXX0gyX0NIX0hVQl9BRFIgPDwgNykgfCBcCisJCQkJCSAgICBRTEE4MlhYX0hXX05JVV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfSTJDMCAgICAgKChRTEE4MlhYX0hXX0gyX0NIX0hVQl9BRFIgPDwgNykgfCBcCisJCQkJCSAgICBRTEE4MlhYX0hXX0kyQzBfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX0kyQzEgICAgICgoUUxBODJYWF9IV19IMl9DSF9IVUJfQURSIDw8IDcpIHwgXAorCQkJCQkgICAgUUxBODJYWF9IV19JMkMxX0NSQl9BR1RfQURSKQorCisjZGVmaW5lIFFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1NSRSAgICAgICgoUUxBODJYWF9IV19IM19DSF9IVUJfQURSIDw8IDcpIHwgXAorCQkJCQkgICAgUUxBODJYWF9IV19TUkVfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX0VHICAgICAgICgoUUxBODJYWF9IV19IM19DSF9IVUJfQURSIDw8IDcpIHwgXAorCQkJCQkgICAgUUxBODJYWF9IV19FR19DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfUlBNWDAgICAgKChRTEE4MlhYX0hXX0gzX0NIX0hVQl9BRFIgPDwgNykgfCBcCisJCQkJCSAgICBRTEE4MlhYX0hXX1JQTVgwX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9RTU4gICAgICAoKFFMQTgyWFhfSFdfSDNfQ0hfSFVCX0FEUiA8PCA3KSB8IFwKKwkJCQkJICAgIFFMQTgyWFhfSFdfUU1fQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1NRTjAgICAgICgoUUxBODJYWF9IV19IM19DSF9IVUJfQURSIDw8IDcpIHwgXAorCQkJCQkgICAgUUxBODJYWF9IV19TUUcwX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9TUU4xICAgICAoKFFMQTgyWFhfSFdfSDNfQ0hfSFVCX0FEUiA8PCA3KSB8IFwKKwkJCQkJICAgIFFMQTgyWFhfSFdfU1FHMV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfU1FOMiAgICAgKChRTEE4MlhYX0hXX0gzX0NIX0hVQl9BRFIgPDwgNykgfCBcCisJCQkJCSAgICBRTEE4MlhYX0hXX1NRRzJfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1NRTjMgICAgICgoUUxBODJYWF9IV19IM19DSF9IVUJfQURSIDw8IDcpIHwgXAorCQkJCQkgICAgUUxBODJYWF9IV19TUUczX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9SUE1YMSAgICAoKFFMQTgyWFhfSFdfSDNfQ0hfSFVCX0FEUiA8PCA3KSB8IFwKKwkJCQkJICAgIFFMQTgyWFhfSFdfUlBNWDFfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVg1ICAgICgoUUxBODJYWF9IV19IM19DSF9IVUJfQURSIDw8IDcpIHwgXAorCQkJCQkgICAgUUxBODJYWF9IV19SUE1YNV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfUlBNWDYgICAgKChRTEE4MlhYX0hXX0gzX0NIX0hVQl9BRFIgPDwgNykgfCBcCisJCQkJCSAgICBRTEE4MlhYX0hXX1JQTVg2X0NSQl9BR1RfQURSKQorI2RlZmluZSBRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9SUE1YOCAgICAoKFFMQTgyWFhfSFdfSDNfQ0hfSFVCX0FEUiA8PCA3KSB8IFwKKwkJCQkJICAgIFFMQTgyWFhfSFdfUlBNWDhfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX0NBUzAgICAgICgoUUxBODJYWF9IV19IM19DSF9IVUJfQURSIDw8IDcpIHwgXAorCQkJCQkgICAgUUxBODJYWF9IV19DQVMwX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9DQVMxICAgICAoKFFMQTgyWFhfSFdfSDNfQ0hfSFVCX0FEUiA8PCA3KSB8IFwKKwkJCQkJICAgIFFMQTgyWFhfSFdfQ0FTMV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfQ0FTMiAgICAgKChRTEE4MlhYX0hXX0gzX0NIX0hVQl9BRFIgPDwgNykgfCBcCisJCQkJCSAgICBRTEE4MlhYX0hXX0NBUzJfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX0NBUzMgICAgICgoUUxBODJYWF9IV19IM19DSF9IVUJfQURSIDw8IDcpIHwgXAorCQkJCQkgICAgUUxBODJYWF9IV19DQVMzX0NSQl9BR1RfQURSKQorCisjZGVmaW5lIFFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1BHTkkgICAgICgoUUxBODJYWF9IV19INF9DSF9IVUJfQURSIDw8IDcpIHwgXAorCQkJCQkgICAgUUxBODJYWF9IV19QRUdOSV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfUEdORCAgICAgKChRTEE4MlhYX0hXX0g0X0NIX0hVQl9BRFIgPDwgNykgfCBcCisJCQkJCSAgICBRTEE4MlhYX0hXX1BFR05EX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9QR04wICAgICAoKFFMQTgyWFhfSFdfSDRfQ0hfSFVCX0FEUiA8PCA3KSB8IFwKKwkJCQkJICAgIFFMQTgyWFhfSFdfUEVHTjBfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1BHTjEgICAgICgoUUxBODJYWF9IV19INF9DSF9IVUJfQURSIDw8IDcpIHwgXAorCQkJCQkgICAgUUxBODJYWF9IV19QRUdOMV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfUEdOMiAgICAgKChRTEE4MlhYX0hXX0g0X0NIX0hVQl9BRFIgPDwgNykgfCBcCisJCQkJCSAgICBRTEE4MlhYX0hXX1BFR04yX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9QR04zICAgICAoKFFMQTgyWFhfSFdfSDRfQ0hfSFVCX0FEUiA8PCA3KSB8IFwKKwkJCQkJICAgIFFMQTgyWFhfSFdfUEVHTjNfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1BHTjQgICAgICgoUUxBODJYWF9IV19INF9DSF9IVUJfQURSIDw8IDcpIHwgXAorCQkJCQkgICAgUUxBODJYWF9IV19QRUdONF9DUkJfQUdUX0FEUikKKworI2RlZmluZSBRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9QR05DICAgICAoKFFMQTgyWFhfSFdfSDRfQ0hfSFVCX0FEUiA8PCA3KSB8IFwKKwkJCQkJICAgIFFMQTgyWFhfSFdfUEVHTkNfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1BHUjAgICAgICgoUUxBODJYWF9IV19INF9DSF9IVUJfQURSIDw8IDcpIHwgXAorCQkJCQkgICAgUUxBODJYWF9IV19QRUdSMF9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfUEdSMSAgICAgKChRTEE4MlhYX0hXX0g0X0NIX0hVQl9BRFIgPDwgNykgfCBcCisJCQkJCSAgICBRTEE4MlhYX0hXX1BFR1IxX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9QR1IyICAgICAoKFFMQTgyWFhfSFdfSDRfQ0hfSFVCX0FEUiA8PCA3KSB8IFwKKwkJCQkJICAgIFFMQTgyWFhfSFdfUEVHUjJfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1BHUjMgICAgICgoUUxBODJYWF9IV19INF9DSF9IVUJfQURSIDw8IDcpIHwgXAorCQkJCQkgICAgUUxBODJYWF9IV19QRUdSM19DUkJfQUdUX0FEUikKKworI2RlZmluZSBRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9QR1NJICAgICAoKFFMQTgyWFhfSFdfSDVfQ0hfSFVCX0FEUiA8PCA3KSB8IFwKKwkJCQkJICAgIFFMQTgyWFhfSFdfUEVHU0lfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1BHU0QgICAgICgoUUxBODJYWF9IV19INV9DSF9IVUJfQURSIDw8IDcpIHwgXAorCQkJCQkgICAgUUxBODJYWF9IV19QRUdTRF9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfUEdTMCAgICAgKChRTEE4MlhYX0hXX0g1X0NIX0hVQl9BRFIgPDwgNykgfCBcCisJCQkJCSAgICBRTEE4MlhYX0hXX1BFR1MwX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9QR1MxICAgICAoKFFMQTgyWFhfSFdfSDVfQ0hfSFVCX0FEUiA8PCA3KSB8IFwKKwkJCQkJICAgIFFMQTgyWFhfSFdfUEVHUzFfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1BHUzIgICAgICgoUUxBODJYWF9IV19INV9DSF9IVUJfQURSIDw8IDcpIHwgXAorCQkJCQkgICAgUUxBODJYWF9IV19QRUdTMl9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfUEdTMyAgICAgKChRTEE4MlhYX0hXX0g1X0NIX0hVQl9BRFIgPDwgNykgfCBcCisJCQkJCSAgICBRTEE4MlhYX0hXX1BFR1MzX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9QR1NDICAgICAoKFFMQTgyWFhfSFdfSDVfQ0hfSFVCX0FEUiA8PCA3KSB8IFwKKwkJCQkJICAgIFFMQTgyWFhfSFdfUEVHU0NfQ1JCX0FHVF9BRFIpCisKKyNkZWZpbmUgUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfQ0FNICAgICAgKChRTEE4MlhYX0hXX0g2X0NIX0hVQl9BRFIgPDwgNykgfCBcCisJCQkJCSAgICBRTEE4MlhYX0hXX05DTV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfVElNUiAgICAgKChRTEE4MlhYX0hXX0g2X0NIX0hVQl9BRFIgPDwgNykgfCBcCisJCQkJCSAgICBRTEE4MlhYX0hXX1RNUl9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfWERNQSAgICAgKChRTEE4MlhYX0hXX0g2X0NIX0hVQl9BRFIgPDwgNykgfCBcCisJCQkJCSAgICBRTEE4MlhYX0hXX1hETUFfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX1NOICAgICAgICgoUUxBODJYWF9IV19INl9DSF9IVUJfQURSIDw8IDcpIHwgXAorCQkJCQkgICAgUUxBODJYWF9IV19TTl9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfSTJRICAgICAgKChRTEE4MlhYX0hXX0g2X0NIX0hVQl9BRFIgPDwgNykgfCBcCisJCQkJCSAgICBRTEE4MlhYX0hXX0kyUV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfUk9NVVNCICAgKChRTEE4MlhYX0hXX0g2X0NIX0hVQl9BRFIgPDwgNykgfCBcCisJCQkJCSAgICBRTEE4MlhYX0hXX1JPTVVTQl9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxBODJYWF9IV19DUkJfSFVCX0FHVF9BRFJfT0NNMCAgICAgKChRTEE4MlhYX0hXX0g2X0NIX0hVQl9BRFIgPDwgNykgfCBcCisJCQkJCSAgICBRTEE4MlhYX0hXX09DTTBfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQTgyWFhfSFdfQ1JCX0hVQl9BR1RfQURSX09DTTEgICAgICgoUUxBODJYWF9IV19INl9DSF9IVUJfQURSIDw8IDcpIHwgXAorCQkJCQkgICAgUUxBODJYWF9IV19PQ00xX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTEE4MlhYX0hXX0NSQl9IVUJfQUdUX0FEUl9MUEMgICAgICAoKFFMQTgyWFhfSFdfSDZfQ0hfSFVCX0FEUiA8PCA3KSB8IFwKKwkJCQkJICAgIFFMQTgyWFhfSFdfTFBDX0NSQl9BR1RfQURSKQorCisjZGVmaW5lIFJPTVVTQl9HTEIJKFFMQTgyWFhfQ1JCX1JPTVVTQiArIDB4MDAwMDApCisjZGVmaW5lIFFMQTgyWFhfUk9NVVNCX0dMQl9QRUdUVU5FX0RPTkUJCShST01VU0JfR0xCICsgMHgwMDVjKQorI2RlZmluZSBRTEE4MlhYX1JPTVVTQl9HTEJfU1RBVFVTCQkoUk9NVVNCX0dMQiArIDB4MDAwNCkKKyNkZWZpbmUgUUxBODJYWF9ST01VU0JfR0xCX1NXX1JFU0VUCQkoUk9NVVNCX0dMQiArIDB4MDAwOCkKKyNkZWZpbmUgUUxBODJYWF9ST01VU0JfUk9NX0FERFJFU1MJCShST01VU0JfUk9NICsgMHgwMDA4KQorI2RlZmluZSBRTEE4MlhYX1JPTVVTQl9ST01fV0RBVEEJCShST01VU0JfUk9NICsgMHgwMDBjKQorI2RlZmluZSBRTEE4MlhYX1JPTVVTQl9ST01fQUJZVEVfQ05UCQkoUk9NVVNCX1JPTSArIDB4MDAxMCkKKyNkZWZpbmUgUUxBODJYWF9ST01VU0JfUk9NX0RVTU1ZX0JZVEVfQ05UCShST01VU0JfUk9NICsgMHgwMDE0KQorI2RlZmluZSBRTEE4MlhYX1JPTVVTQl9ST01fUkRBVEEJCShST01VU0JfUk9NICsgMHgwMDE4KQorCisjZGVmaW5lIFJPTVVTQl9ST00JKFFMQTgyWFhfQ1JCX1JPTVVTQiArIDB4MTAwMDApCisjZGVmaW5lIFFMQTgyWFhfUk9NVVNCX1JPTV9JTlNUUl9PUENPREUJKFJPTVVTQl9ST00gKyAweDAwMDQpCisjZGVmaW5lIFFMQTgyWFhfUk9NVVNCX0dMQl9DQVNfUlNUCShST01VU0JfR0xCICsgMHgwMDM4KQorCisvKiBMb2NrIElEcyBmb3IgUk9NIGxvY2sgKi8KKyNkZWZpbmUgUk9NX0xPQ0tfRFJJVkVSCQkweDBkNDE3MzQwCisKKyNkZWZpbmUgUUxBODJYWF9QQ0lfQ1JCX1dJTkRPV1NJWkUJMHgwMDEwMDAwMCAgICAvKiBhbGwgYXJlIDFNQiB3aW5kb3dzICovCisjZGVmaW5lIFFMQTgyWFhfUENJX0NSQl9XSU5ET1coQSkJKFFMQTgyWFhfUENJX0NSQlNQQUNFICsgXAorCQkJCQkoQSkqUUxBODJYWF9QQ0lfQ1JCX1dJTkRPV1NJWkUpCisKKyNkZWZpbmUgUUxBODJYWF9DUkJfQzJDXzAgXAorCVFMQTgyWFhfUENJX0NSQl9XSU5ET1coUUxBODJYWF9IV19QWF9NQVBfQ1JCX0MyQzApCisjZGVmaW5lIFFMQTgyWFhfQ1JCX0MyQ18xIFwKKwlRTEE4MlhYX1BDSV9DUkJfV0lORE9XKFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9DMkMxKQorI2RlZmluZSBRTEE4MlhYX0NSQl9DMkNfMiBcCisJUUxBODJYWF9QQ0lfQ1JCX1dJTkRPVyhRTEE4MlhYX0hXX1BYX01BUF9DUkJfQzJDMikKKyNkZWZpbmUgUUxBODJYWF9DUkJfQ0FNCVwKKwlRTEE4MlhYX1BDSV9DUkJfV0lORE9XKFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9DQU0pCisjZGVmaW5lIFFMQTgyWFhfQ1JCX0NBU1BFUiBcCisJUUxBODJYWF9QQ0lfQ1JCX1dJTkRPVyhRTEE4MlhYX0hXX1BYX01BUF9DUkJfQ0FTKQorI2RlZmluZSBRTEE4MlhYX0NSQl9DQVNQRVJfMCBcCisJUUxBODJYWF9QQ0lfQ1JCX1dJTkRPVyhRTEE4MlhYX0hXX1BYX01BUF9DUkJfQ0FTMCkKKyNkZWZpbmUgUUxBODJYWF9DUkJfQ0FTUEVSXzEgXAorCVFMQTgyWFhfUENJX0NSQl9XSU5ET1coUUxBODJYWF9IV19QWF9NQVBfQ1JCX0NBUzEpCisjZGVmaW5lIFFMQTgyWFhfQ1JCX0NBU1BFUl8yIFwKKwlRTEE4MlhYX1BDSV9DUkJfV0lORE9XKFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9DQVMyKQorI2RlZmluZSBRTEE4MlhYX0NSQl9ERFJfTUQgXAorCVFMQTgyWFhfUENJX0NSQl9XSU5ET1coUUxBODJYWF9IV19QWF9NQVBfQ1JCX01TKQorI2RlZmluZSBRTEE4MlhYX0NSQl9ERFJfTkVUIFwKKwlRTEE4MlhYX1BDSV9DUkJfV0lORE9XKFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9NTikKKyNkZWZpbmUgUUxBODJYWF9DUkJfRVBHIFwKKwlRTEE4MlhYX1BDSV9DUkJfV0lORE9XKFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9FRykKKyNkZWZpbmUgUUxBODJYWF9DUkJfSTJRIFwKKwlRTEE4MlhYX1BDSV9DUkJfV0lORE9XKFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9JMlEpCisjZGVmaW5lIFFMQTgyWFhfQ1JCX05JVQlcCisJUUxBODJYWF9QQ0lfQ1JCX1dJTkRPVyhRTEE4MlhYX0hXX1BYX01BUF9DUkJfTklVKQorLyogSEFDSyB1cG9uIEhBQ0sgdXBvbiBIQUNLIChmb3IgUENJRSBidWlsZHMpICovCisjZGVmaW5lIFFMQTgyWFhfQ1JCX1BDSVhfSE9TVCBcCisJUUxBODJYWF9QQ0lfQ1JCX1dJTkRPVyhRTEE4MlhYX0hXX1BYX01BUF9DUkJfUEgpCisjZGVmaW5lIFFMQTgyWFhfQ1JCX1BDSVhfSE9TVDIgXAorCVFMQTgyWFhfUENJX0NSQl9XSU5ET1coUUxBODJYWF9IV19QWF9NQVBfQ1JCX1BIMikKKyNkZWZpbmUgUUxBODJYWF9DUkJfUENJWF9NRCBcCisJUUxBODJYWF9QQ0lfQ1JCX1dJTkRPVyhRTEE4MlhYX0hXX1BYX01BUF9DUkJfUFMpCisjZGVmaW5lIFFMQTgyWFhfQ1JCX1BDSUUJUUxBODJYWF9DUkJfUENJWF9NRAorLyogd2luZG93IDEgcGNpZSBzbG90ICovCisjZGVmaW5lIFFMQTgyWFhfQ1JCX1BDSUUyIFwKKwlRTEE4MlhYX1BDSV9DUkJfV0lORE9XKFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9QUzIpCisKKyNkZWZpbmUgUUxBODJYWF9DUkJfUEVHX01EXzAgXAorCVFMQTgyWFhfUENJX0NSQl9XSU5ET1coUUxBODJYWF9IV19QWF9NQVBfQ1JCX1BHUzApCisjZGVmaW5lIFFMQTgyWFhfQ1JCX1BFR19NRF8xIFwKKwlRTEE4MlhYX1BDSV9DUkJfV0lORE9XKFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9QR1MxKQorI2RlZmluZSBRTEE4MlhYX0NSQl9QRUdfTURfMiBcCisJUUxBODJYWF9QQ0lfQ1JCX1dJTkRPVyhRTEE4MlhYX0hXX1BYX01BUF9DUkJfUEdTMikKKyNkZWZpbmUgUUxBODJYWF9DUkJfUEVHX01EXzMgXAorCVFMQTgyWFhfUENJX0NSQl9XSU5ET1coUUxBODJYWF9IV19QWF9NQVBfQ1JCX1BHUzMpCisjZGVmaW5lIFFMQTgyWFhfQ1JCX1BFR19NRF8zIFwKKwlRTEE4MlhYX1BDSV9DUkJfV0lORE9XKFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9QR1MzKQorI2RlZmluZSBRTEE4MlhYX0NSQl9QRUdfTURfRCBcCisJUUxBODJYWF9QQ0lfQ1JCX1dJTkRPVyhRTEE4MlhYX0hXX1BYX01BUF9DUkJfUEdTRCkKKyNkZWZpbmUgUUxBODJYWF9DUkJfUEVHX01EX0kgXAorCVFMQTgyWFhfUENJX0NSQl9XSU5ET1coUUxBODJYWF9IV19QWF9NQVBfQ1JCX1BHU0kpCisjZGVmaW5lIFFMQTgyWFhfQ1JCX1BFR19ORVRfMCBcCisJUUxBODJYWF9QQ0lfQ1JCX1dJTkRPVyhRTEE4MlhYX0hXX1BYX01BUF9DUkJfUEdOMCkKKyNkZWZpbmUgUUxBODJYWF9DUkJfUEVHX05FVF8xIFwKKwlRTEE4MlhYX1BDSV9DUkJfV0lORE9XKFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9QR04xKQorI2RlZmluZSBRTEE4MlhYX0NSQl9QRUdfTkVUXzIgXAorCVFMQTgyWFhfUENJX0NSQl9XSU5ET1coUUxBODJYWF9IV19QWF9NQVBfQ1JCX1BHTjIpCisjZGVmaW5lIFFMQTgyWFhfQ1JCX1BFR19ORVRfMyBcCisJUUxBODJYWF9QQ0lfQ1JCX1dJTkRPVyhRTEE4MlhYX0hXX1BYX01BUF9DUkJfUEdOMykKKyNkZWZpbmUgUUxBODJYWF9DUkJfUEVHX05FVF80IFwKKwlRTEE4MlhYX1BDSV9DUkJfV0lORE9XKFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9QR040KQorI2RlZmluZSBRTEE4MlhYX0NSQl9QRUdfTkVUX0QgXAorCVFMQTgyWFhfUENJX0NSQl9XSU5ET1coUUxBODJYWF9IV19QWF9NQVBfQ1JCX1BHTkQpCisjZGVmaW5lIFFMQTgyWFhfQ1JCX1BFR19ORVRfSSBcCisJUUxBODJYWF9QQ0lfQ1JCX1dJTkRPVyhRTEE4MlhYX0hXX1BYX01BUF9DUkJfUEdOSSkKKyNkZWZpbmUgUUxBODJYWF9DUkJfUFFNX01EIFwKKwlRTEE4MlhYX1BDSV9DUkJfV0lORE9XKFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9RTVMpCisjZGVmaW5lIFFMQTgyWFhfQ1JCX1BRTV9ORVQgXAorCVFMQTgyWFhfUENJX0NSQl9XSU5ET1coUUxBODJYWF9IV19QWF9NQVBfQ1JCX1FNTikKKyNkZWZpbmUgUUxBODJYWF9DUkJfUURSX01EIFwKKwlRTEE4MlhYX1BDSV9DUkJfV0lORE9XKFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9TUykKKyNkZWZpbmUgUUxBODJYWF9DUkJfUURSX05FVCBcCisJUUxBODJYWF9QQ0lfQ1JCX1dJTkRPVyhRTEE4MlhYX0hXX1BYX01BUF9DUkJfU04pCisjZGVmaW5lIFFMQTgyWFhfQ1JCX1JPTVVTQiBcCisJUUxBODJYWF9QQ0lfQ1JCX1dJTkRPVyhRTEE4MlhYX0hXX1BYX01BUF9DUkJfUk9NVVNCKQorI2RlZmluZSBRTEE4MlhYX0NSQl9SUE1YXzAgXAorCVFMQTgyWFhfUENJX0NSQl9XSU5ET1coUUxBODJYWF9IV19QWF9NQVBfQ1JCX1JQTVgwKQorI2RlZmluZSBRTEE4MlhYX0NSQl9SUE1YXzEgXAorCVFMQTgyWFhfUENJX0NSQl9XSU5ET1coUUxBODJYWF9IV19QWF9NQVBfQ1JCX1JQTVgxKQorI2RlZmluZSBRTEE4MlhYX0NSQl9SUE1YXzIgXAorCVFMQTgyWFhfUENJX0NSQl9XSU5ET1coUUxBODJYWF9IV19QWF9NQVBfQ1JCX1JQTVgyKQorI2RlZmluZSBRTEE4MlhYX0NSQl9SUE1YXzMgXAorCVFMQTgyWFhfUENJX0NSQl9XSU5ET1coUUxBODJYWF9IV19QWF9NQVBfQ1JCX1JQTVgzKQorI2RlZmluZSBRTEE4MlhYX0NSQl9SUE1YXzQgXAorCVFMQTgyWFhfUENJX0NSQl9XSU5ET1coUUxBODJYWF9IV19QWF9NQVBfQ1JCX1JQTVg0KQorI2RlZmluZSBRTEE4MlhYX0NSQl9SUE1YXzUgXAorCVFMQTgyWFhfUENJX0NSQl9XSU5ET1coUUxBODJYWF9IV19QWF9NQVBfQ1JCX1JQTVg1KQorI2RlZmluZSBRTEE4MlhYX0NSQl9SUE1YXzYgXAorCVFMQTgyWFhfUENJX0NSQl9XSU5ET1coUUxBODJYWF9IV19QWF9NQVBfQ1JCX1JQTVg2KQorI2RlZmluZSBRTEE4MlhYX0NSQl9SUE1YXzcgXAorCVFMQTgyWFhfUENJX0NSQl9XSU5ET1coUUxBODJYWF9IV19QWF9NQVBfQ1JCX1JQTVg3KQorI2RlZmluZSBRTEE4MlhYX0NSQl9TUU1fTURfMCBcCisJUUxBODJYWF9QQ0lfQ1JCX1dJTkRPVyhRTEE4MlhYX0hXX1BYX01BUF9DUkJfU1FTMCkKKyNkZWZpbmUgUUxBODJYWF9DUkJfU1FNX01EXzEgXAorCVFMQTgyWFhfUENJX0NSQl9XSU5ET1coUUxBODJYWF9IV19QWF9NQVBfQ1JCX1NRUzEpCisjZGVmaW5lIFFMQTgyWFhfQ1JCX1NRTV9NRF8yIFwKKwlRTEE4MlhYX1BDSV9DUkJfV0lORE9XKFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9TUVMyKQorI2RlZmluZSBRTEE4MlhYX0NSQl9TUU1fTURfMyBcCisJUUxBODJYWF9QQ0lfQ1JCX1dJTkRPVyhRTEE4MlhYX0hXX1BYX01BUF9DUkJfU1FTMykKKyNkZWZpbmUgUUxBODJYWF9DUkJfU1FNX05FVF8wIFwKKwlRTEE4MlhYX1BDSV9DUkJfV0lORE9XKFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9TUU4wKQorI2RlZmluZSBRTEE4MlhYX0NSQl9TUU1fTkVUXzEgXAorCVFMQTgyWFhfUENJX0NSQl9XSU5ET1coUUxBODJYWF9IV19QWF9NQVBfQ1JCX1NRTjEpCisjZGVmaW5lIFFMQTgyWFhfQ1JCX1NRTV9ORVRfMiBcCisJUUxBODJYWF9QQ0lfQ1JCX1dJTkRPVyhRTEE4MlhYX0hXX1BYX01BUF9DUkJfU1FOMikKKyNkZWZpbmUgUUxBODJYWF9DUkJfU1FNX05FVF8zIFwKKwlRTEE4MlhYX1BDSV9DUkJfV0lORE9XKFFMQTgyWFhfSFdfUFhfTUFQX0NSQl9TUU4zKQorI2RlZmluZSBRTEE4MlhYX0NSQl9TUkUgXAorCVFMQTgyWFhfUENJX0NSQl9XSU5ET1coUUxBODJYWF9IV19QWF9NQVBfQ1JCX1NSRSkKKyNkZWZpbmUgUUxBODJYWF9DUkJfVElNRVIgXAorCVFMQTgyWFhfUENJX0NSQl9XSU5ET1coUUxBODJYWF9IV19QWF9NQVBfQ1JCX1RJTVIpCisjZGVmaW5lIFFMQTgyWFhfQ1JCX1hETUEgXAorCVFMQTgyWFhfUENJX0NSQl9XSU5ET1coUUxBODJYWF9IV19QWF9NQVBfQ1JCX1hETUEpCisjZGVmaW5lIFFMQTgyWFhfQ1JCX0kyQzAgXAorCVFMQTgyWFhfUENJX0NSQl9XSU5ET1coUUxBODJYWF9IV19QWF9NQVBfQ1JCX0kyQzApCisjZGVmaW5lIFFMQTgyWFhfQ1JCX0kyQzEgXAorCVFMQTgyWFhfUENJX0NSQl9XSU5ET1coUUxBODJYWF9IV19QWF9NQVBfQ1JCX0kyQzEpCisjZGVmaW5lIFFMQTgyWFhfQ1JCX09DTTAgXAorCVFMQTgyWFhfUENJX0NSQl9XSU5ET1coUUxBODJYWF9IV19QWF9NQVBfQ1JCX09DTTApCisjZGVmaW5lIFFMQTgyWFhfQ1JCX1NNQiBcCisJUUxBODJYWF9QQ0lfQ1JCX1dJTkRPVyhRTEE4MlhYX0hXX1BYX01BUF9DUkJfU01CKQorCisjZGVmaW5lIFFMQTgyWFhfQ1JCX01BWAkJUUxBODJYWF9QQ0lfQ1JCX1dJTkRPVyg2NCkKKworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT0gQkFTRSBBRERSRVNTRVMgT04tQ0hJUCA9PT09PT09PT09PT09PT09PT09PT09CisgKiBCYXNlIGFkZHJlc3NlcyBvZiBtYWpvciBjb21wb25lbnRzIG9uLWNoaXAuCisgKiA9PT09PT09PT09PT09PT09PT09PT09IEJBU0UgQUREUkVTU0VTIE9OLUNISVAgPT09PT09PT09PT09PT09PT09PT09PQorICovCisjZGVmaW5lIFFMQTgyWFhfQUREUl9ERFJfTkVUCQkoMHgwMDAwMDAwMDAwMDAwMDAwVUxMKQorI2RlZmluZSBRTEE4MlhYX0FERFJfRERSX05FVF9NQVgJKDB4MDAwMDAwMDAwZmZmZmZmZlVMTCkKKworLyogSW1idXMgYWRkcmVzcyBiaXQgdXNlZCB0byBpbmRpY2F0ZSBhIGhvc3QgYWRkcmVzcy4gVGhpcyBiaXQgaXMKKyAqIGVsaW1pbmF0ZWQgYnkgdGhlIHBjaWUgYmFyIGFuZCBiYXIgc2VsZWN0IGJlZm9yZSBwcmVzZW50YXRpb24KKyAqIG92ZXIgcGNpZS4gKi8KKy8qIGhvc3QgbWVtb3J5IHZpYSBJTUJVUyAqLworI2RlZmluZSBRTEE4MlhYX1AyX0FERFJfUENJRQkoMHgwMDAwMDAwODAwMDAwMDAwVUxMKQorI2RlZmluZSBRTEE4MlhYX1AzX0FERFJfUENJRQkoMHgwMDAwMDA4MDAwMDAwMDAwVUxMKQorI2RlZmluZSBRTEE4MlhYX0FERFJfUENJRV9NQVgJKDB4MDAwMDAwMEZGRkZGRkZGRlVMTCkKKyNkZWZpbmUgUUxBODJYWF9BRERSX09DTTAJKDB4MDAwMDAwMDIwMDAwMDAwMFVMTCkKKyNkZWZpbmUgUUxBODJYWF9BRERSX09DTTBfTUFYCSgweDAwMDAwMDAyMDAwZmZmZmZVTEwpCisjZGVmaW5lIFFMQTgyWFhfQUREUl9PQ00xCSgweDAwMDAwMDAyMDA0MDAwMDBVTEwpCisjZGVmaW5lIFFMQTgyWFhfQUREUl9PQ00xX01BWAkoMHgwMDAwMDAwMjAwNGZmZmZmVUxMKQorI2RlZmluZSBRTEE4MlhYX0FERFJfUURSX05FVAkoMHgwMDAwMDAwMzAwMDAwMDAwVUxMKQorCisjZGVmaW5lIFFMQTgyWFhfUDJfQUREUl9RRFJfTkVUX01BWAkoMHgwMDAwMDAwMzAwMWZmZmZmVUxMKQorI2RlZmluZSBRTEE4MlhYX1AzX0FERFJfUURSX05FVF9NQVgJKDB4MDAwMDAwMDMwM2ZmZmZmZlVMTCkKKworI2RlZmluZSBRTEE4MlhYX1BDSV9DUkJTUEFDRQkJKHVuc2lnbmVkIGxvbmcpMHgwNjAwMDAwMAorI2RlZmluZSBRTEE4MlhYX1BDSV9ESVJFQ1RfQ1JCCQkodW5zaWduZWQgbG9uZykweDA0NDAwMDAwCisjZGVmaW5lIFFMQTgyWFhfUENJX0NBTVFNCQkodW5zaWduZWQgbG9uZykweDA0ODAwMDAwCisjZGVmaW5lIFFMQTgyWFhfUENJX0NBTVFNX01BWAkJKHVuc2lnbmVkIGxvbmcpMHgwNGZmZmZmZgorI2RlZmluZSBRTEE4MlhYX1BDSV9ERFJfTkVUCQkodW5zaWduZWQgbG9uZykweDAwMDAwMDAwCisjZGVmaW5lIFFMQTgyWFhfUENJX1FEUl9ORVQJCSh1bnNpZ25lZCBsb25nKTB4MDQwMDAwMDAKKyNkZWZpbmUgUUxBODJYWF9QQ0lfUURSX05FVF9NQVgJCSh1bnNpZ25lZCBsb25nKTB4MDQzZmZmZmYKKworLyoKKyAqICAgUmVnaXN0ZXIgb2Zmc2V0cyBmb3IgTU4KKyAqLworI2RlZmluZSBNSVVfQ09OVFJPTAkJCSgweDAwMCkKKyNkZWZpbmUgTUlVX1RBRwkJCQkoMHgwMDQpCisjZGVmaW5lIE1JVV9URVNUX0FHVF9DVFJMCQkoMHgwOTApCisjZGVmaW5lIE1JVV9URVNUX0FHVF9BRERSX0xPCQkoMHgwOTQpCisjZGVmaW5lIE1JVV9URVNUX0FHVF9BRERSX0hJCQkoMHgwOTgpCisjZGVmaW5lIE1JVV9URVNUX0FHVF9XUkRBVEFfTE8JCSgweDBhMCkKKyNkZWZpbmUgTUlVX1RFU1RfQUdUX1dSREFUQV9ISQkJKDB4MGE0KQorI2RlZmluZSBNSVVfVEVTVF9BR1RfV1JEQVRBKGkpCQkoMHgwYTArKDQqKGkpKSkKKyNkZWZpbmUgTUlVX1RFU1RfQUdUX1JEREFUQV9MTwkJKDB4MGE4KQorI2RlZmluZSBNSVVfVEVTVF9BR1RfUkREQVRBX0hJCQkoMHgwYWMpCisjZGVmaW5lIE1JVV9URVNUX0FHVF9SRERBVEEoaSkJCSgweDBhOCsoNCooaSkpKQorI2RlZmluZSBNSVVfVEVTVF9BR1RfQUREUl9NQVNLCQkweGZmZmZmZmY4CisjZGVmaW5lIE1JVV9URVNUX0FHVF9VUFBFUl9BRERSKG9mZikJKDApCisKKy8qIE1JVV9URVNUX0FHVF9DVFJMIGZsYWdzLiB3b3JrIGZvciBTSVUgYXMgd2VsbCAqLworI2RlZmluZSBNSVVfVEFfQ1RMX1NUQVJUCTEKKyNkZWZpbmUgTUlVX1RBX0NUTF9FTkFCTEUJMgorI2RlZmluZSBNSVVfVEFfQ1RMX1dSSVRFCTQKKyNkZWZpbmUgTUlVX1RBX0NUTF9CVVNZCQk4CisKKy8qQ0FNIFJBTSAqLworIyBkZWZpbmUgUUxBODJYWF9DQU1fUkFNX0JBU0UJKFFMQTgyWFhfQ1JCX0NBTSArIDB4MDIwMDApCisjIGRlZmluZSBRTEE4MlhYX0NBTV9SQU0ocmVnKQkoUUxBODJYWF9DQU1fUkFNX0JBU0UgKyAocmVnKSkKKworI2RlZmluZSBRTEE4MlhYX1BFR19UVU5FX01OX1NQRF9aRVJPRUQJMHg4MDAwMDAwMAorI2RlZmluZSBRTEE4MlhYX0JPT1RfTE9BREVSX01OX0lTU1VFCTB4ZmYwMGZmZmYKKyNkZWZpbmUgUUxBODJYWF9QT1JUX01PREVfQUREUgkJKFFMQTgyWFhfQ0FNX1JBTSgweDI0KSkKKyNkZWZpbmUgUUxBODJYWF9QRUdfSEFMVF9TVEFUVVMxCShRTEE4MlhYX0NBTV9SQU0oMHhhOCkpCisjZGVmaW5lIFFMQTgyWFhfUEVHX0hBTFRfU1RBVFVTMgkoUUxBODJYWF9DQU1fUkFNKDB4YWMpKQorI2RlZmluZSBRTEE4MlhYX1BFR19BTElWRV9DT1VOVEVSCShRTEE4MlhYX0NBTV9SQU0oMHhiMCkpCisKKyNkZWZpbmUgSEFMVF9TVEFUVVNfVU5SRUNPVkVSQUJMRQkweDgwMDAwMDAwCisjZGVmaW5lIEhBTFRfU1RBVFVTX1JFQ09WRVJBQkxFCQkweDQwMDAwMDAwCisKKworI2RlZmluZSBRTEE4MlhYX1JPTV9MT0NLX0lECQkoUUxBODJYWF9DQU1fUkFNKDB4MTAwKSkKKyNkZWZpbmUgUUxBODJYWF9DUkJfV0lOX0xPQ0tfSUQJCShRTEE4MlhYX0NBTV9SQU0oMHgxMjQpKQorI2RlZmluZSBRTEE4MlhYX0ZXX1ZFUlNJT05fTUFKT1IJKFFMQTgyWFhfQ0FNX1JBTSgweDE1MCkpCisjZGVmaW5lIFFMQTgyWFhfRldfVkVSU0lPTl9NSU5PUgkoUUxBODJYWF9DQU1fUkFNKDB4MTU0KSkKKyNkZWZpbmUgUUxBODJYWF9GV19WRVJTSU9OX1NVQgkJKFFMQTgyWFhfQ0FNX1JBTSgweDE1OCkpCisjZGVmaW5lIFFMQTgyWFhfUENJRV9SRUcocmVnKQkJKFFMQTgyWFhfQ1JCX1BDSUUgKyAocmVnKSkKKworLyogRHJpdmVyIENvZXhpc3RlbmNlIERlZmluZXMgKi8KKyNkZWZpbmUgUUxBODJYWF9DUkJfRFJWX0FDVElWRQkJKFFMQTgyWFhfQ0FNX1JBTSgweDEzOCkpCisjZGVmaW5lIFFMQTgyWFhfQ1JCX0RFVl9TVEFURQkJKFFMQTgyWFhfQ0FNX1JBTSgweDE0MCkpCisjZGVmaW5lIFFMQTgyWFhfQ1JCX0RFVl9QQVJUX0lORk8JKFFMQTgyWFhfQ0FNX1JBTSgweDE0YykpCisjZGVmaW5lIFFMQTgyWFhfQ1JCX0RSVl9JRENfVkVSU0lPTgkoUUxBODJYWF9DQU1fUkFNKDB4MTc0KSkKKyNkZWZpbmUgUUxBODJYWF9DUkJfRFJWX1NUQVRFCQkoUUxBODJYWF9DQU1fUkFNKDB4MTQ0KSkKKyNkZWZpbmUgUUxBODJYWF9DUkJfRFJWX1NDUkFUQ0gJCShRTEE4MlhYX0NBTV9SQU0oMHgxNDgpKQorI2RlZmluZSBRTEE4MlhYX0NSQl9ERVZfUEFSVF9JTkZPCShRTEE4MlhYX0NBTV9SQU0oMHgxNGMpKQorCisvKiBFdmVyeSBkcml2ZXIgc2hvdWxkIHVzZSB0aGVzZSBEZXZpY2UgU3RhdGUgKi8KKyNkZWZpbmUgUUxBODJYWF9ERVZfQ09MRAkJMQorI2RlZmluZSBRTEE4MlhYX0RFVl9JTklUSUFMSVpJTkcJMgorI2RlZmluZSBRTEE4MlhYX0RFVl9SRUFEWQkJMworI2RlZmluZSBRTEE4MlhYX0RFVl9ORUVEX1JFU0VUCQk0CisjZGVmaW5lIFFMQTgyWFhfREVWX05FRURfUVVJRVNDRU5UCTUKKyNkZWZpbmUgUUxBODJYWF9ERVZfRkFJTEVECQk2CisjZGVmaW5lIFFMQTgyWFhfREVWX1FVSUVTQ0VOVAkJNworI2RlZmluZSBNQVhfU1RBVEVTCQkJOCAvKiBJbmNyZW1lbnQgaWYgbmV3IHN0YXRlIGFkZGVkICovCisKKyNkZWZpbmUgUUxBODJYWF9JRENfVkVSU0lPTgkJMHgxCisjZGVmaW5lIFJPTV9ERVZfSU5JVF9USU1FT1VUCQkzMAorI2RlZmluZSBST01fRFJWX1JFU0VUX0FDS19USU1FT1VUCTEwCisKKyNkZWZpbmUgUENJRV9TRVRVUF9GVU5DVElPTgkJKDB4MTIwNDApCisjZGVmaW5lIFBDSUVfU0VUVVBfRlVOQ1RJT04yCQkoMHgxMjA0OCkKKworI2RlZmluZSBRTEE4MlhYX1BDSVhfUFNfUkVHKHJlZykJKFFMQTgyWFhfQ1JCX1BDSVhfTUQgKyAocmVnKSkKKyNkZWZpbmUgUUxBODJYWF9QQ0lYX1BTMl9SRUcocmVnKQkoUUxBODJYWF9DUkJfUENJRTIgKyAocmVnKSkKKworI2RlZmluZSBQQ0lFX1NFTTJfTE9DSwkJKDB4MWMwMTApICAvKiBGbGFzaCBsb2NrICAgKi8KKyNkZWZpbmUgUENJRV9TRU0yX1VOTE9DSwkoMHgxYzAxNCkgIC8qIEZsYXNoIHVubG9jayAqLworI2RlZmluZSBQQ0lFX1NFTTVfTE9DSwkJKDB4MWMwMjgpICAvKiBDb2V4aXN0ZW5jZSBsb2NrICAgKi8KKyNkZWZpbmUgUENJRV9TRU01X1VOTE9DSwkoMHgxYzAyYykgIC8qIENvZXhpc3RlbmNlIHVubG9jayAqLworI2RlZmluZSBQQ0lFX1NFTTdfTE9DSwkJKDB4MWMwMzgpICAvKiBjcmIgd2luIGxvY2sgKi8KKyNkZWZpbmUgUENJRV9TRU03X1VOTE9DSwkoMHgxYzAzYykgIC8qIGNyYndpbiB1bmxvY2sqLworCisvKgorICogVGhlIFBDSSBWZW5kb3JJRCBhbmQgRGV2aWNlSUQgZm9yIG91ciBib2FyZC4KKyAqLworI2RlZmluZSBRTEE4MlhYX01TSVhfVEJMX1NQQUNFCQk4MTkyCisjZGVmaW5lIFFMQTgyWFhfUENJX1JFR19NU0lYX1RCTAkweDQ0CisjZGVmaW5lIFFMQTgyWFhfUENJX01TSVhfQ09OVFJPTAkweDQwCisKK3N0cnVjdCBjcmJfMTI4TV8yTV9zdWJfYmxvY2tfbWFwIHsKKwl1bnNpZ25lZCB2YWxpZDsKKwl1bnNpZ25lZCBzdGFydF8xMjhNOworCXVuc2lnbmVkIGVuZF8xMjhNOworCXVuc2lnbmVkIHN0YXJ0XzJNOworfTsKKworc3RydWN0IGNyYl8xMjhNXzJNX2Jsb2NrX21hcCB7CisJc3RydWN0IGNyYl8xMjhNXzJNX3N1Yl9ibG9ja19tYXAgc3ViX2Jsb2NrWzE2XTsKK307CisKK3N0cnVjdCBjcmJfYWRkcl9wYWlyIHsKKwlsb25nIGFkZHI7CisJbG9uZyBkYXRhOworfTsKKworI2RlZmluZSBBRERSX0VSUk9SCSgodW5zaWduZWQgbG9uZykgMHhmZmZmZmZmZikKKyNkZWZpbmUgTUFYX0NUTF9DSEVDSwkxMDAwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCQlQQ0kgcmVsYXRlZCBkZWZpbmVzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogSW50ZXJydXB0IHJlbGF0ZWQgZGVmaW5lcy4KKyAqLworI2RlZmluZSBQQ0lYX1RBUkdFVF9TVEFUVVMJKDB4MTAxMTgpCisjZGVmaW5lIFBDSVhfVEFSR0VUX1NUQVRVU19GMQkoMHgxMDE2MCkKKyNkZWZpbmUgUENJWF9UQVJHRVRfU1RBVFVTX0YyCSgweDEwMTY0KQorI2RlZmluZSBQQ0lYX1RBUkdFVF9TVEFUVVNfRjMJKDB4MTAxNjgpCisjZGVmaW5lIFBDSVhfVEFSR0VUX1NUQVRVU19GNAkoMHgxMDM2MCkKKyNkZWZpbmUgUENJWF9UQVJHRVRfU1RBVFVTX0Y1CSgweDEwMzY0KQorI2RlZmluZSBQQ0lYX1RBUkdFVF9TVEFUVVNfRjYJKDB4MTAzNjgpCisjZGVmaW5lIFBDSVhfVEFSR0VUX1NUQVRVU19GNwkoMHgxMDM2YykKKworI2RlZmluZSBQQ0lYX1RBUkdFVF9NQVNLCSgweDEwMTI4KQorI2RlZmluZSBQQ0lYX1RBUkdFVF9NQVNLX0YxCSgweDEwMTcwKQorI2RlZmluZSBQQ0lYX1RBUkdFVF9NQVNLX0YyCSgweDEwMTc0KQorI2RlZmluZSBQQ0lYX1RBUkdFVF9NQVNLX0YzCSgweDEwMTc4KQorI2RlZmluZSBQQ0lYX1RBUkdFVF9NQVNLX0Y0CSgweDEwMzcwKQorI2RlZmluZSBQQ0lYX1RBUkdFVF9NQVNLX0Y1CSgweDEwMzc0KQorI2RlZmluZSBQQ0lYX1RBUkdFVF9NQVNLX0Y2CSgweDEwMzc4KQorI2RlZmluZSBQQ0lYX1RBUkdFVF9NQVNLX0Y3CSgweDEwMzdjKQorCisvKgorICogTWVzc2FnZSBTaWduYWxlZCBJbnRlcnJ1cHRzCisgKi8KKyNkZWZpbmUgUENJWF9NU0lfRjAJCSgweDEzMDAwKQorI2RlZmluZSBQQ0lYX01TSV9GMQkJKDB4MTMwMDQpCisjZGVmaW5lIFBDSVhfTVNJX0YyCQkoMHgxMzAwOCkKKyNkZWZpbmUgUENJWF9NU0lfRjMJCSgweDEzMDBjKQorI2RlZmluZSBQQ0lYX01TSV9GNAkJKDB4MTMwMTApCisjZGVmaW5lIFBDSVhfTVNJX0Y1CQkoMHgxMzAxNCkKKyNkZWZpbmUgUENJWF9NU0lfRjYJCSgweDEzMDE4KQorI2RlZmluZSBQQ0lYX01TSV9GNwkJKDB4MTMwMWMpCisjZGVmaW5lIFBDSVhfTVNJX0YoRlVOQykJKDB4MTMwMDAgKyAoKEZVTkMpICogNCkpCisKKy8qCisgKgorICovCisjZGVmaW5lIFBDSVhfSU5UX1ZFQ1RPUgkJKDB4MTAxMDApCisjZGVmaW5lIFBDSVhfSU5UX01BU0sJCSgweDEwMTA0KQorCisvKgorICogSW50ZXJydXB0IHN0YXRlIG1hY2hpbmUgYW5kIG90aGVyIGJpdHMuCisgKi8KKyNkZWZpbmUgUENJRV9NSVNDQ0ZHX1JDCQkoMHgxMjA2YykKKworCisjZGVmaW5lIElTUl9JTlRfVEFSR0VUX1NUQVRVUyBcCisJKFFMQTgyWFhfUENJWF9QU19SRUcoUENJWF9UQVJHRVRfU1RBVFVTKSkKKyNkZWZpbmUgSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0YxIFwKKwkoUUxBODJYWF9QQ0lYX1BTX1JFRyhQQ0lYX1RBUkdFVF9TVEFUVVNfRjEpKQorI2RlZmluZSBJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjIgXAorCShRTEE4MlhYX1BDSVhfUFNfUkVHKFBDSVhfVEFSR0VUX1NUQVRVU19GMikpCisjZGVmaW5lIElTUl9JTlRfVEFSR0VUX1NUQVRVU19GMyBcCisJKFFMQTgyWFhfUENJWF9QU19SRUcoUENJWF9UQVJHRVRfU1RBVFVTX0YzKSkKKyNkZWZpbmUgSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0Y0IFwKKwkoUUxBODJYWF9QQ0lYX1BTX1JFRyhQQ0lYX1RBUkdFVF9TVEFUVVNfRjQpKQorI2RlZmluZSBJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjUgXAorCShRTEE4MlhYX1BDSVhfUFNfUkVHKFBDSVhfVEFSR0VUX1NUQVRVU19GNSkpCisjZGVmaW5lIElTUl9JTlRfVEFSR0VUX1NUQVRVU19GNiBcCisJKFFMQTgyWFhfUENJWF9QU19SRUcoUENJWF9UQVJHRVRfU1RBVFVTX0Y2KSkKKyNkZWZpbmUgSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0Y3IFwKKwkoUUxBODJYWF9QQ0lYX1BTX1JFRyhQQ0lYX1RBUkdFVF9TVEFUVVNfRjcpKQorCisjZGVmaW5lIElTUl9JTlRfVEFSR0VUX01BU0sgXAorCShRTEE4MlhYX1BDSVhfUFNfUkVHKFBDSVhfVEFSR0VUX01BU0spKQorI2RlZmluZSBJU1JfSU5UX1RBUkdFVF9NQVNLX0YxIFwKKwkoUUxBODJYWF9QQ0lYX1BTX1JFRyhQQ0lYX1RBUkdFVF9NQVNLX0YxKSkKKyNkZWZpbmUgSVNSX0lOVF9UQVJHRVRfTUFTS19GMiBcCisJKFFMQTgyWFhfUENJWF9QU19SRUcoUENJWF9UQVJHRVRfTUFTS19GMikpCisjZGVmaW5lIElTUl9JTlRfVEFSR0VUX01BU0tfRjMgXAorCShRTEE4MlhYX1BDSVhfUFNfUkVHKFBDSVhfVEFSR0VUX01BU0tfRjMpKQorI2RlZmluZSBJU1JfSU5UX1RBUkdFVF9NQVNLX0Y0IFwKKwkoUUxBODJYWF9QQ0lYX1BTX1JFRyhQQ0lYX1RBUkdFVF9NQVNLX0Y0KSkKKyNkZWZpbmUgSVNSX0lOVF9UQVJHRVRfTUFTS19GNSBcCisJKFFMQTgyWFhfUENJWF9QU19SRUcoUENJWF9UQVJHRVRfTUFTS19GNSkpCisjZGVmaW5lIElTUl9JTlRfVEFSR0VUX01BU0tfRjYgXAorCShRTEE4MlhYX1BDSVhfUFNfUkVHKFBDSVhfVEFSR0VUX01BU0tfRjYpKQorI2RlZmluZSBJU1JfSU5UX1RBUkdFVF9NQVNLX0Y3IFwKKwkoUUxBODJYWF9QQ0lYX1BTX1JFRyhQQ0lYX1RBUkdFVF9NQVNLX0Y3KSkKKworI2RlZmluZSBJU1JfSU5UX1ZFQ1RPUgkJCShRTEE4MlhYX1BDSVhfUFNfUkVHKFBDSVhfSU5UX1ZFQ1RPUikpCisjZGVmaW5lIElTUl9JTlRfTUFTSwkJCShRTEE4MlhYX1BDSVhfUFNfUkVHKFBDSVhfSU5UX01BU0spKQorI2RlZmluZSBJU1JfSU5UX1NUQVRFX1JFRwkJKFFMQTgyWFhfUENJWF9QU19SRUcoUENJRV9NSVNDQ0ZHX1JDKSkKKworI2RlZmluZQlJU1JfTVNJX0lOVF9UUklHR0VSKEZVTkMpCShRTEE4MlhYX1BDSVhfUFNfUkVHKFBDSVhfTVNJX0YoRlVOQykpKQorCisKKyNkZWZpbmUJSVNSX0lTX0xFR0FDWV9JTlRSX0lETEUoVkFMKQkJKCgoVkFMKSAmIDB4MzAwKSA9PSAwKQorI2RlZmluZQlJU1JfSVNfTEVHQUNZX0lOVFJfVFJJR0dFUkVEKFZBTCkJKCgoVkFMKSAmIDB4MzAwKSA9PSAweDIwMCkKKworLyoKKyAqIFBDSSBJbnRlcnJ1cHQgVmVjdG9yIFZhbHVlcy4KKyAqLworI2RlZmluZQlQQ0lYX0lOVF9WRUNUT1JfQklUX0YwCTB4MDA4MAorI2RlZmluZQlQQ0lYX0lOVF9WRUNUT1JfQklUX0YxCTB4MDEwMAorI2RlZmluZQlQQ0lYX0lOVF9WRUNUT1JfQklUX0YyCTB4MDIwMAorI2RlZmluZQlQQ0lYX0lOVF9WRUNUT1JfQklUX0YzCTB4MDQwMAorI2RlZmluZQlQQ0lYX0lOVF9WRUNUT1JfQklUX0Y0CTB4MDgwMAorI2RlZmluZQlQQ0lYX0lOVF9WRUNUT1JfQklUX0Y1CTB4MTAwMAorI2RlZmluZQlQQ0lYX0lOVF9WRUNUT1JfQklUX0Y2CTB4MjAwMAorI2RlZmluZQlQQ0lYX0lOVF9WRUNUT1JfQklUX0Y3CTB4NDAwMAorCisvKiBzdHJ1Y3QgcWxhNF84eHh4X2xlZ2FjeV9pbnRyX3NldCBkZWZpbmVkIGluIHFsNF9kZWYuaCAqLworCisjZGVmaW5lIFFMQTgyWFhfTEVHQUNZX0lOVFJfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJLmludF92ZWNfYml0ICAgID0JUENJWF9JTlRfVkVDVE9SX0JJVF9GMCwgICAgICAgICBcCisJCS50Z3Rfc3RhdHVzX3JlZyA9CUlTUl9JTlRfVEFSR0VUX1NUQVRVUywgICAgICAgICAgXAorCQkudGd0X21hc2tfcmVnICAgPQlJU1JfSU5UX1RBUkdFVF9NQVNLLCAgICAgICAgICAgIFwKKwkJLnBjaV9pbnRfcmVnICAgID0JSVNSX01TSV9JTlRfVFJJR0dFUigwKSB9LCAgICAgICBcCisJCQkJCQkJCQlcCisJewkJCQkJCQkJXAorCQkuaW50X3ZlY19iaXQgICAgPQlQQ0lYX0lOVF9WRUNUT1JfQklUX0YxLCAgICAgICAgIFwKKwkJLnRndF9zdGF0dXNfcmVnID0JSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0YxLCAgICAgICBcCisJCS50Z3RfbWFza19yZWcgICA9CUlTUl9JTlRfVEFSR0VUX01BU0tfRjEsICAgICAgICAgXAorCQkucGNpX2ludF9yZWcgICAgPQlJU1JfTVNJX0lOVF9UUklHR0VSKDEpIH0sICAgICAgIFwKKwkJCQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJCS5pbnRfdmVjX2JpdCAgICA9CVBDSVhfSU5UX1ZFQ1RPUl9CSVRfRjIsICAgICAgICAgXAorCQkudGd0X3N0YXR1c19yZWcgPQlJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjIsICAgICAgIFwKKwkJLnRndF9tYXNrX3JlZyAgID0JSVNSX0lOVF9UQVJHRVRfTUFTS19GMiwgICAgICAgICBcCisJCS5wY2lfaW50X3JlZyAgICA9CUlTUl9NU0lfSU5UX1RSSUdHRVIoMikgfSwgICAgICAgXAorCQkJCQkJCQkJXAorCXsJCQkJCQkJCVwKKwkJLmludF92ZWNfYml0ICAgID0JUENJWF9JTlRfVkVDVE9SX0JJVF9GMywgICAgICAgICBcCisJCS50Z3Rfc3RhdHVzX3JlZyA9CUlTUl9JTlRfVEFSR0VUX1NUQVRVU19GMywgICAgICAgXAorCQkudGd0X21hc2tfcmVnICAgPQlJU1JfSU5UX1RBUkdFVF9NQVNLX0YzLCAgICAgICAgIFwKKwkJLnBjaV9pbnRfcmVnICAgID0JSVNSX01TSV9JTlRfVFJJR0dFUigzKSB9LCAgICAgICBcCisJCQkJCQkJCQlcCisJewkJCQkJCQkJXAorCQkuaW50X3ZlY19iaXQgICAgPQlQQ0lYX0lOVF9WRUNUT1JfQklUX0Y0LCAgICAgICAgIFwKKwkJLnRndF9zdGF0dXNfcmVnID0JSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0Y0LCAgICAgICBcCisJCS50Z3RfbWFza19yZWcgICA9CUlTUl9JTlRfVEFSR0VUX01BU0tfRjQsICAgICAgICAgXAorCQkucGNpX2ludF9yZWcgICAgPQlJU1JfTVNJX0lOVF9UUklHR0VSKDQpIH0sICAgICAgIFwKKwkJCQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJCS5pbnRfdmVjX2JpdCAgICA9CVBDSVhfSU5UX1ZFQ1RPUl9CSVRfRjUsICAgICAgICAgXAorCQkudGd0X3N0YXR1c19yZWcgPQlJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjUsICAgICAgIFwKKwkJLnRndF9tYXNrX3JlZyAgID0JSVNSX0lOVF9UQVJHRVRfTUFTS19GNSwgICAgICAgICBcCisJCS5wY2lfaW50X3JlZyAgICA9CUlTUl9NU0lfSU5UX1RSSUdHRVIoNSkgfSwgICAgICAgXAorCQkJCQkJCQkJXAorCXsJCQkJCQkJCVwKKwkJLmludF92ZWNfYml0ICAgID0JUENJWF9JTlRfVkVDVE9SX0JJVF9GNiwgICAgICAgICBcCisJCS50Z3Rfc3RhdHVzX3JlZyA9CUlTUl9JTlRfVEFSR0VUX1NUQVRVU19GNiwgICAgICAgXAorCQkudGd0X21hc2tfcmVnICAgPQlJU1JfSU5UX1RBUkdFVF9NQVNLX0Y2LCAgICAgICAgIFwKKwkJLnBjaV9pbnRfcmVnICAgID0JSVNSX01TSV9JTlRfVFJJR0dFUig2KSB9LCAgICAgICBcCisJCQkJCQkJCQlcCisJewkJCQkJCQkJXAorCQkuaW50X3ZlY19iaXQgICAgPQlQQ0lYX0lOVF9WRUNUT1JfQklUX0Y3LCAgICAgICAgIFwKKwkJLnRndF9zdGF0dXNfcmVnID0JSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0Y3LCAgICAgICBcCisJCS50Z3RfbWFza19yZWcgICA9CUlTUl9JTlRfVEFSR0VUX01BU0tfRjcsICAgICAgICAgXAorCQkucGNpX2ludF9yZWcgICAgPQlJU1JfTVNJX0lOVF9UUklHR0VSKDcpIH0sICAgICAgIFwKK30KKworLyogTWFnaWMgbnVtYmVyIHRvIGxldCB1c2VyIGtub3cgZmxhc2ggaXMgcHJvZ3JhbW1lZCAqLworI2RlZmluZQlRTEE4MlhYX0JESU5GT19NQUdJQwkweDEyMzQ1Njc4CisjZGVmaW5lIEZXX1NJWkVfT0ZGU0VUCQkoMHgzZTg0MGMpCisKKy8qIFFMQTgyWFggYWRkaXRpb25zICovCisjZGVmaW5lIE1JVV9URVNUX0FHVF9XUkRBVEFfVVBQRVJfTE8JKDB4MGIwKQorI2RlZmluZQlNSVVfVEVTVF9BR1RfV1JEQVRBX1VQUEVSX0hJCSgweDBiNCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9vcy5jCmluZGV4IDM4YjFkMzguLjU1MjliMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9vcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9vcy5jCkBAIC0zMCwyMiArMzAsMjkgQEAKICAqIE1vZHVsZSBwYXJhbWV0ZXIgaW5mb3JtYXRpb24gYW5kIHZhcmlhYmxlcwogICovCiBpbnQgcWw0eGRpc2NvdmVyeXdhaXQgPSA2MDsKLW1vZHVsZV9wYXJhbShxbDR4ZGlzY292ZXJ5d2FpdCwgaW50LCBTX0lSVUdPIHwgU19JUlVTUik7Cittb2R1bGVfcGFyYW0ocWw0eGRpc2NvdmVyeXdhaXQsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhxbDR4ZGlzY292ZXJ5d2FpdCwgIkRpc2NvdmVyeSB3YWl0IHRpbWUiKTsKKwogaW50IHFsNHhkb250cmVzZXRoYmEgPSAwOwotbW9kdWxlX3BhcmFtKHFsNHhkb250cmVzZXRoYmEsIGludCwgU19JUlVHTyB8IFNfSVJVU1IpOworbW9kdWxlX3BhcmFtKHFsNHhkb250cmVzZXRoYmEsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhxbDR4ZG9udHJlc2V0aGJhLAotCQkgIkRvbnQgcmVzZXQgdGhlIEhCQSB3aGVuIHRoZSBkcml2ZXIgZ2V0cyAweDgwMDIgQUVOICIKLQkJICIgZGVmYXVsdCBpdCB3aWxsIHJlc2V0IGhiYSA6MCIKLQkJICIgc2V0IHRvIDEgdG8gYXZvaWQgcmVzZXR0aW5nIEhCQSIpOworCQkiRG9uJ3QgcmVzZXQgdGhlIEhCQSBmb3IgZHJpdmVyIHJlY292ZXJ5IFxuIgorCQkiIDAgLSBJdCB3aWxsIHJlc2V0IEhCQSAoRGVmYXVsdClcbiIKKwkJIiAxIC0gSXQgd2lsbCBOT1QgcmVzZXQgSEJBIik7CiAKIGludCBxbDR4ZXh0ZW5kZWRfZXJyb3JfbG9nZ2luZyA9IDA7IC8qIDAgPSBvZmYsIDEgPSBsb2cgZXJyb3JzICovCi1tb2R1bGVfcGFyYW0ocWw0eGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmcsIGludCwgU19JUlVHTyB8IFNfSVJVU1IpOworbW9kdWxlX3BhcmFtKHFsNHhleHRlbmRlZF9lcnJvcl9sb2dnaW5nLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MocWw0eGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmcsCiAJCSAiT3B0aW9uIHRvIGVuYWJsZSBleHRlbmRlZCBlcnJvciBsb2dnaW5nLCAiCiAJCSAiRGVmYXVsdCBpcyAwIC0gbm8gbG9nZ2luZywgMSAtIGRlYnVnIGxvZ2dpbmciKTsKIAotaW50IHFsNF9tb2RfdW5sb2FkID0gMDsKK2ludCBxbDR4ZW5hYmxlbXNpeCA9IDE7Cittb2R1bGVfcGFyYW0ocWw0eGVuYWJsZW1zaXgsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MocWw0eGVuYWJsZW1zaXgsCisJCSJTZXQgdG8gZW5hYmxlIE1TSSBvciBNU0ktWCBpbnRlcnJ1cHQgbWVjaGFuaXNtLlxuIgorCQkiIDAgPSBlbmFibGUgSU5UeCBpbnRlcnJ1cHQgbWVjaGFuaXNtLlxuIgorCQkiIDEgPSBlbmFibGUgTVNJLVggaW50ZXJydXB0IG1lY2hhbmlzbSAoRGVmYXVsdCkuXG4iCisJCSIgMiA9IGVuYWJsZSBNU0kgaW50ZXJydXB0IG1lY2hhbmlzbS4iKTsKIAogI2RlZmluZSBRTDRfREVGX1FERVBUSCAzMgogCkBAIC04Myw2ICs5MCw5IEBACiBzdGF0aWMgdm9pZCBxbGE0eHh4X3NsYXZlX2Rlc3Ryb3koc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKIHN0YXRpYyB2b2lkIHFsYTR4eHhfc2Nhbl9zdGFydChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCk7CiAKK3N0YXRpYyBzdHJ1Y3QgcWxhNF84eHh4X2xlZ2FjeV9pbnRyX3NldCBsZWdhY3lfaW50cltdID0KKyAgICBRTEE4MlhYX0xFR0FDWV9JTlRSX0NPTkZJRzsKKwogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgcWxhNHh4eF9kcml2ZXJfdGVtcGxhdGUgPSB7CiAJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCQk9IERSSVZFUl9OQU1FLApAQCAtMTE2LDcgKzEyNiw4IEBACiAJLmNhcHMJCQk9IENBUF9GV19EQiB8IENBUF9TRU5EVEFSR0VUU19PRkZMT0FEIHwKIAkJCQkgIENBUF9EQVRBX1BBVEhfT0ZGTE9BRCwKIAkucGFyYW1fbWFzawkJPSBJU0NTSV9DT05OX1BPUlQgfCBJU0NTSV9DT05OX0FERFJFU1MgfAotCQkJCSAgSVNDU0lfVEFSR0VUX05BTUUgfCBJU0NTSV9UUEdULAorCQkJCSAgSVNDU0lfVEFSR0VUX05BTUUgfCBJU0NTSV9UUEdUIHwKKwkJCQkgIElTQ1NJX1RBUkdFVF9BTElBUywKIAkuaG9zdF9wYXJhbV9tYXNrCT0gSVNDU0lfSE9TVF9IV0FERFJFU1MgfAogCQkJCSAgSVNDU0lfSE9TVF9JUEFERFJFU1MgfAogCQkJCSAgSVNDU0lfSE9TVF9JTklUSUFUT1JfTkFNRSwKQEAgLTE1MiwxNSArMTYzLDEyIEBACiAJaWYgKGF0b21pY19yZWFkKCZkZGJfZW50cnktPnN0YXRlKSAhPSBEREJfU1RBVEVfT05MSU5FKSB7CiAJCWF0b21pY19zZXQoJmRkYl9lbnRyeS0+c3RhdGUsIEREQl9TVEFURV9ERUFEKTsKIAotCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiAlczogaW5kZXggWyVkXSBwb3J0IGRvd24gcmV0cnkgY291bnQgIgorCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiAlczogZGRiIFslZF0gcG9ydCBkb3duIHJldHJ5IGNvdW50ICIKIAkJCSAgICAgICJvZiAoJWQpIHNlY3MgZXhoYXVzdGVkLCBtYXJraW5nIGRldmljZSBERUFELlxuIiwKIAkJCSAgICAgIGhhLT5ob3N0X25vLCBfX2Z1bmNfXywgZGRiX2VudHJ5LT5md19kZGJfaW5kZXgsCiAJCQkgICAgICBoYS0+cG9ydF9kb3duX3JldHJ5X2NvdW50KSk7CiAKLQkJREVCVUcyKHByaW50aygic2NzaSVsZDogJXM6IHNjaGVkdWxpbmcgZHBjIHJvdXRpbmUgLSBkcGMgIgotCQkJICAgICAgImZsYWdzID0gMHglbHhcbiIsCi0JCQkgICAgICBoYS0+aG9zdF9ubywgX19mdW5jX18sIGhhLT5kcGNfZmxhZ3MpKTsKLQkJcXVldWVfd29yayhoYS0+ZHBjX3RocmVhZCwgJmhhLT5kcGNfd29yayk7CisJCXFsYTR4eHhfd2FrZV9kcGMoaGEpOwogCX0KIH0KIApAQCAtMjAzLDYgKzIxMSwxMCBAQAogCWNhc2UgSVNDU0lfUEFSQU1fVFBHVDoKIAkJbGVuID0gc3ByaW50ZihidWYsICIldVxuIiwgZGRiX2VudHJ5LT50cGd0KTsKIAkJYnJlYWs7CisJY2FzZSBJU0NTSV9QQVJBTV9UQVJHRVRfQUxJQVM6CisJCWxlbiA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFIC0gMSwgIiVzXG4iLAorCQkgICAgZGRiX2VudHJ5LT5pc2NzaV9hbGlhcyk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PU1lTOwogCX0KQEAgLTM2MiwxOSArMzc0LDM3IEBACiAgKiBAaGE6IFBvaW50ZXIgdG8gaG9zdCBhZGFwdGVyIHN0cnVjdHVyZS4KICAqIEBkZGJfZW50cnk6IFBvaW50ZXIgdG8gZGV2aWNlIGRhdGFiYXNlIGVudHJ5CiAgKgotICogVGhpcyByb3V0aW5lIG1hcmtzIGEgZGV2aWNlIG1pc3NpbmcgYW5kIHJlc2V0cyB0aGUgcmVsb2dpbiByZXRyeSBjb3VudC4KKyAqIFRoaXMgcm91dGluZSBtYXJrcyBhIGRldmljZSBtaXNzaW5nIGFuZCBjbG9zZSBjb25uZWN0aW9uLgogICoqLwogdm9pZCBxbGE0eHh4X21hcmtfZGV2aWNlX21pc3Npbmcoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLAogCQkJCSBzdHJ1Y3QgZGRiX2VudHJ5ICpkZGJfZW50cnkpCiB7Ci0JYXRvbWljX3NldCgmZGRiX2VudHJ5LT5zdGF0ZSwgRERCX1NUQVRFX01JU1NJTkcpOwotCURFQlVHMyhwcmludGsoInNjc2klZDolZDolZDogaW5kZXggWyVkXSBtYXJrZWQgTUlTU0lOR1xuIiwKLQkJICAgICAgaGEtPmhvc3Rfbm8sIGRkYl9lbnRyeS0+YnVzLCBkZGJfZW50cnktPnRhcmdldCwKLQkJICAgICAgZGRiX2VudHJ5LT5md19kZGJfaW5kZXgpKTsKKwlpZiAoKGF0b21pY19yZWFkKCZkZGJfZW50cnktPnN0YXRlKSAhPSBEREJfU1RBVEVfREVBRCkpIHsKKwkJYXRvbWljX3NldCgmZGRiX2VudHJ5LT5zdGF0ZSwgRERCX1NUQVRFX01JU1NJTkcpOworCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiBkZGIgWyVkXSBtYXJrZWQgTUlTU0lOR1xuIiwKKwkJICAgIGhhLT5ob3N0X25vLCBkZGJfZW50cnktPmZ3X2RkYl9pbmRleCkpOworCX0gZWxzZQorCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiBkZGIgWyVkXSBERUFEXG4iLCBoYS0+aG9zdF9ubywKKwkJICAgIGRkYl9lbnRyeS0+ZndfZGRiX2luZGV4KSkKKwogCWlzY3NpX2Jsb2NrX3Nlc3Npb24oZGRiX2VudHJ5LT5zZXNzKTsKIAlpc2NzaV9jb25uX2Vycm9yX2V2ZW50KGRkYl9lbnRyeS0+Y29ubiwgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKIH0KIAorLyoqCisgKiBxbGE0eHh4X21hcmtfYWxsX2RldmljZXNfbWlzc2luZyAtIG1hcmsgYWxsIGRldmljZXMgYXMgbWlzc2luZy4KKyAqIEBoYTogUG9pbnRlciB0byBob3N0IGFkYXB0ZXIgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBtYXJrcyBhIGRldmljZSBtaXNzaW5nIGFuZCByZXNldHMgdGhlIHJlbG9naW4gcmV0cnkgY291bnQuCisgKiovCit2b2lkIHFsYTR4eHhfbWFya19hbGxfZGV2aWNlc19taXNzaW5nKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK3sKKwlzdHJ1Y3QgZGRiX2VudHJ5ICpkZGJfZW50cnksICpkZGJ0ZW1wOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZGJfZW50cnksIGRkYnRlbXAsICZoYS0+ZGRiX2xpc3QsIGxpc3QpIHsKKwkJcWxhNHh4eF9tYXJrX2RldmljZV9taXNzaW5nKGhhLCBkZGJfZW50cnkpOworCX0KK30KKwogc3RhdGljIHN0cnVjdCBzcmIqIHFsYTR4eHhfZ2V0X25ld19zcmIoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLAogCQkJCSAgICAgICBzdHJ1Y3QgZGRiX2VudHJ5ICpkZGJfZW50cnksCiAJCQkJICAgICAgIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKQEAgLTQ2Myw3ICs0OTMsMTMgQEAKIAkJcmV0dXJuIFNDU0lfTUxRVUVVRV9UQVJHRVRfQlVTWTsKIAl9CiAKLQlpZiAodGVzdF9iaXQoRFBDX1JFU0VUX0hBX0lOVFIsICZoYS0+ZHBjX2ZsYWdzKSkKKwlpZiAodGVzdF9iaXQoRFBDX1JFU0VUX0hBX0lOVFIsICZoYS0+ZHBjX2ZsYWdzKSB8fAorCSAgICB0ZXN0X2JpdChEUENfUkVTRVRfQUNUSVZFLCAmaGEtPmRwY19mbGFncykgfHwKKwkgICAgdGVzdF9iaXQoRFBDX1JFU0VUX0hBLCAmaGEtPmRwY19mbGFncykgfHwKKwkgICAgdGVzdF9iaXQoRFBDX0hBX1VOUkVDT1ZFUkFCTEUsICZoYS0+ZHBjX2ZsYWdzKSB8fAorCSAgICB0ZXN0X2JpdChEUENfSEFfTkVFRF9RVUlFU0NFTlQsICZoYS0+ZHBjX2ZsYWdzKSB8fAorCSAgICAhdGVzdF9iaXQoQUZfT05MSU5FLCAmaGEtPmZsYWdzKSB8fAorCSAgICB0ZXN0X2JpdChEUENfUkVTRVRfSEFfRldfQ09OVEVYVCwgJmhhLT5kcGNfZmxhZ3MpKQogCQlnb3RvIHFjX2hvc3RfYnVzeTsKIAogCXNwaW5fdW5sb2NrX2lycShoYS0+aG9zdC0+aG9zdF9sb2NrKTsKQEAgLTUyNCw3ICs1NjAsMTUgQEAKIAloYS0+c3JiX21lbXBvb2wgPSBOVUxMOwogCiAJLyogcmVsZWFzZSBpbyBzcGFjZSByZWdpc3RlcnMgICovCi0JaWYgKGhhLT5yZWcpCisJaWYgKGlzX3FsYTgwMjIoaGEpKSB7CisJCWlmIChoYS0+bnhfcGNpYmFzZSkKKwkJCWlvdW5tYXAoCisJCQkgICAgKHN0cnVjdCBkZXZpY2VfcmVnXzgyeHggX19pb21lbSAqKWhhLT5ueF9wY2liYXNlKTsKKworCQlpZiAoaGEtPm54X2RiX3dyX3B0cikKKwkJCWlvdW5tYXAoCisJCQkgICAgKHN0cnVjdCBkZXZpY2VfcmVnXzgyeHggX19pb21lbSAqKWhhLT5ueF9kYl93cl9wdHIpOworCX0gZWxzZSBpZiAoaGEtPnJlZykKIAkJaW91bm1hcChoYS0+cmVnKTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKGhhLT5wZGV2KTsKIH0KQEAgLTU0OSw4ICs1OTMsOCBAQAogCWhhLT5xdWV1ZXMgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmhhLT5wZGV2LT5kZXYsIGhhLT5xdWV1ZXNfbGVuLAogCQkJCQkmaGEtPnF1ZXVlc19kbWEsIEdGUF9LRVJORUwpOwogCWlmIChoYS0+cXVldWVzID09IE5VTEwpIHsKLQkJZGV2X3dhcm4oJmhhLT5wZGV2LT5kZXYsCi0JCQkiTWVtb3J5IEFsbG9jYXRpb24gZmFpbGVkIC0gcXVldWVzLlxuIik7CisJCXFsNF9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJICAgICJNZW1vcnkgQWxsb2NhdGlvbiBmYWlsZWQgLSBxdWV1ZXMuXG4iKTsKIAogCQlnb3RvIG1lbV9hbGxvY19lcnJvcl9leGl0OwogCX0KQEAgLTU4Niw4ICs2MzAsOCBAQAogCWhhLT5zcmJfbWVtcG9vbCA9IG1lbXBvb2xfY3JlYXRlKFNSQl9NSU5fUkVRLCBtZW1wb29sX2FsbG9jX3NsYWIsCiAJCQkJCSBtZW1wb29sX2ZyZWVfc2xhYiwgc3JiX2NhY2hlcCk7CiAJaWYgKGhhLT5zcmJfbWVtcG9vbCA9PSBOVUxMKSB7Ci0JCWRldl93YXJuKCZoYS0+cGRldi0+ZGV2LAotCQkJIk1lbW9yeSBBbGxvY2F0aW9uIGZhaWxlZCAtIFNSQiBQb29sLlxuIik7CisJCXFsNF9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJICAgICJNZW1vcnkgQWxsb2NhdGlvbiBmYWlsZWQgLSBTUkIgUG9vbC5cbiIpOwogCiAJCWdvdG8gbWVtX2FsbG9jX2Vycm9yX2V4aXQ7CiAJfQpAQCAtNjAwLDYgKzY0NCw3NCBAQAogfQogCiAvKioKKyAqIHFsYTRfOHh4eF9jaGVja19md19hbGl2ZSAgLSBDaGVjayBmaXJtd2FyZSBoZWFsdGgKKyAqIEBoYTogUG9pbnRlciB0byBob3N0IGFkYXB0ZXIgc3RydWN0dXJlLgorICoKKyAqIENvbnRleHQ6IEludGVycnVwdAorICoqLworc3RhdGljIHZvaWQgcWxhNF84eHh4X2NoZWNrX2Z3X2FsaXZlKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK3sKKwl1aW50MzJfdCBmd19oZWFydGJlYXRfY291bnRlciwgaGFsdF9zdGF0dXM7CisKKwlmd19oZWFydGJlYXRfY291bnRlciA9IHFsYTRfOHh4eF9yZF8zMihoYSwgUUxBODJYWF9QRUdfQUxJVkVfQ09VTlRFUik7CisKKwlpZiAoaGEtPmZ3X2hlYXJ0YmVhdF9jb3VudGVyID09IGZ3X2hlYXJ0YmVhdF9jb3VudGVyKSB7CisJCWhhLT5zZWNvbmRzX3NpbmNlX2xhc3RfaGVhcnRiZWF0Kys7CisJCS8qIEZXIG5vdCBhbGl2ZSBhZnRlciAyIHNlY29uZHMgKi8KKwkJaWYgKGhhLT5zZWNvbmRzX3NpbmNlX2xhc3RfaGVhcnRiZWF0ID09IDIpIHsKKwkJCWhhLT5zZWNvbmRzX3NpbmNlX2xhc3RfaGVhcnRiZWF0ID0gMDsKKwkJCWhhbHRfc3RhdHVzID0gcWxhNF84eHh4X3JkXzMyKGhhLAorCQkJICAgIFFMQTgyWFhfUEVHX0hBTFRfU1RBVFVTMSk7CisJCQkvKiBTaW5jZSB3ZSBjYW5ub3QgY2hhbmdlIGRldl9zdGF0ZSBpbiBpbnRlcnJ1cHQKKwkJCSAqIGNvbnRleHQsIHNldCBhcHByb3ByaWF0ZSBEUEMgZmxhZyB0aGVuIHdha2V1cAorCQkJICogRFBDICovCisJCQlpZiAoaGFsdF9zdGF0dXMgJiBIQUxUX1NUQVRVU19VTlJFQ09WRVJBQkxFKQorCQkJCXNldF9iaXQoRFBDX0hBX1VOUkVDT1ZFUkFCTEUsICZoYS0+ZHBjX2ZsYWdzKTsKKwkJCWVsc2UgeworCQkJCXByaW50aygic2NzaSVsZDogJXM6IGRldGVjdCBhYm9ydCBuZWVkZWQhXG4iLAorCQkJCSAgICBoYS0+aG9zdF9ubywgX19mdW5jX18pOworCQkJCXNldF9iaXQoRFBDX1JFU0VUX0hBLCAmaGEtPmRwY19mbGFncyk7CisJCQl9CisJCQlxbGE0eHh4X3dha2VfZHBjKGhhKTsKKwkJfQorCX0KKwloYS0+ZndfaGVhcnRiZWF0X2NvdW50ZXIgPSBmd19oZWFydGJlYXRfY291bnRlcjsKK30KKworLyoqCisgKiBxbGE0Xzh4eHhfd2F0Y2hkb2cgLSBQb2xsIGRldiBzdGF0ZQorICogQGhhOiBQb2ludGVyIHRvIGhvc3QgYWRhcHRlciBzdHJ1Y3R1cmUuCisgKgorICogQ29udGV4dDogSW50ZXJydXB0CisgKiovCit2b2lkIHFsYTRfOHh4eF93YXRjaGRvZyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCit7CisJdWludDMyX3QgZGV2X3N0YXRlOworCisJZGV2X3N0YXRlID0gcWxhNF84eHh4X3JkXzMyKGhhLCBRTEE4MlhYX0NSQl9ERVZfU1RBVEUpOworCisJLyogZG9uJ3QgcG9sbCBpZiByZXNldCBpcyBnb2luZyBvbiAqLworCWlmICghdGVzdF9iaXQoRFBDX1JFU0VUX0FDVElWRSwgJmhhLT5kcGNfZmxhZ3MpKSB7CisJCWlmIChkZXZfc3RhdGUgPT0gUUxBODJYWF9ERVZfTkVFRF9SRVNFVCAmJgorCQkgICAgIXRlc3RfYml0KERQQ19SRVNFVF9IQSwgJmhhLT5kcGNfZmxhZ3MpKSB7CisJCQlwcmludGsoInNjc2klbGQ6ICVzOiBIVyBTdGF0ZTogTkVFRCBSRVNFVCFcbiIsCisJCQkgICAgaGEtPmhvc3Rfbm8sIF9fZnVuY19fKTsKKwkJCXNldF9iaXQoRFBDX1JFU0VUX0hBLCAmaGEtPmRwY19mbGFncyk7CisJCQlxbGE0eHh4X3dha2VfZHBjKGhhKTsKKwkJfSBlbHNlIGlmIChkZXZfc3RhdGUgPT0gUUxBODJYWF9ERVZfTkVFRF9RVUlFU0NFTlQgJiYKKwkJICAgICF0ZXN0X2JpdChEUENfSEFfTkVFRF9RVUlFU0NFTlQsICZoYS0+ZHBjX2ZsYWdzKSkgeworCQkJcHJpbnRrKCJzY3NpJWxkOiAlczogSFcgU3RhdGU6IE5FRUQgUVVJRVMhXG4iLAorCQkJICAgIGhhLT5ob3N0X25vLCBfX2Z1bmNfXyk7CisJCQlzZXRfYml0KERQQ19IQV9ORUVEX1FVSUVTQ0VOVCwgJmhhLT5kcGNfZmxhZ3MpOworCQkJcWxhNHh4eF93YWtlX2RwYyhoYSk7CisJCX0gZWxzZSAgeworCQkJLyogQ2hlY2sgZmlybXdhcmUgaGVhbHRoICovCisJCQlxbGE0Xzh4eHhfY2hlY2tfZndfYWxpdmUoaGEpOworCQl9CisJfQorfQorCisvKioKICAqIHFsYTR4eHhfdGltZXIgLSBjaGVja3MgZXZlcnkgc2Vjb25kIGZvciB3b3JrIHRvIGRvLgogICogQGhhOiBQb2ludGVyIHRvIGhvc3QgYWRhcHRlciBzdHJ1Y3R1cmUuCiAgKiovCkBAIC02MDgsNiArNzIwLDE2IEBACiAJc3RydWN0IGRkYl9lbnRyeSAqZGRiX2VudHJ5LCAqZHRlbXA7CiAJaW50IHN0YXJ0X2RwYyA9IDA7CiAKKwlpZiAodGVzdF9iaXQoQUZfSEJBX0dPSU5HX0FXQVksICZoYS0+ZmxhZ3MpKSB7CisJCURFQlVHMihxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsICIlcyBleGl0ZWQuIEhCQSBHT0lORyBBV0FZXG4iLAorCQkgICAgX19mdW5jX18pKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChpc19xbGE4MDIyKGhhKSkgeworCQlxbGE0Xzh4eHhfd2F0Y2hkb2coaGEpOworCX0KKwogCS8qIFNlYXJjaCBmb3IgcmVsb2dpbidzIHRvIHRpbWUtb3V0IGFuZCBwb3J0IGRvd24gcmV0cnkuICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRkYl9lbnRyeSwgZHRlbXAsICZoYS0+ZGRiX2xpc3QsIGxpc3QpIHsKIAkJLyogQ291bnQgZG93biB0aW1lIGJldHdlZW4gc2VuZGluZyByZWxvZ2lucyAqLwpAQCAtNjI0LDcgKzc0Niw3IEBACiAJCQkJCXNldF9iaXQoRFBDX1JFTE9HSU5fREVWSUNFLAogCQkJCQkJJmhhLT5kcGNfZmxhZ3MpOwogCQkJCQlzZXRfYml0KERGX1JFTE9HSU4sICZkZGJfZW50cnktPmZsYWdzKTsKLQkJCQkJREVCVUcyKHByaW50aygic2NzaSVsZDogJXM6IGluZGV4IFslZF0iCisJCQkJCURFQlVHMihwcmludGsoInNjc2klbGQ6ICVzOiBkZGIgWyVkXSIKIAkJCQkJCSAgICAgICIgbG9naW4gZGV2aWNlXG4iLAogCQkJCQkJICAgICAgaGEtPmhvc3Rfbm8sIF9fZnVuY19fLAogCQkJCQkJICAgICAgZGRiX2VudHJ5LT5md19kZGJfaW5kZXgpKTsKQEAgLTY0Nyw3ICs3NjksNyBAQAogCQkJICAgIEREQl9EU19TRVNTSU9OX0ZBSUxFRCkgewogCQkJCS8qIFJlc2V0IHJldHJ5IHJlbG9naW4gdGltZXIgKi8KIAkJCQlhdG9taWNfaW5jKCZkZGJfZW50cnktPnJlbG9naW5fcmV0cnlfY291bnQpOwotCQkJCURFQlVHMihwcmludGsoInNjc2klbGQ6IGluZGV4WyVkXSByZWxvZ2luIgorCQkJCURFQlVHMihwcmludGsoInNjc2klbGQ6IGRkYiBbJWRdIHJlbG9naW4iCiAJCQkJCSAgICAgICIgdGltZWQgb3V0LXJldHJ5aW5nIgogCQkJCQkgICAgICAiIHJlbG9naW4gKCVkKVxuIiwKIAkJCQkJICAgICAgaGEtPmhvc3Rfbm8sCkBAIC02NTYsNyArNzc4LDcgQEAKIAkJCQkJCQkgIHJlbG9naW5fcmV0cnlfY291bnQpKQogCQkJCQkpOwogCQkJCXN0YXJ0X2RwYysrOwotCQkJCURFQlVHKHByaW50aygic2NzaSVsZDolZDolZDogaW5kZXggWyVkXSAiCisJCQkJREVCVUcocHJpbnRrKCJzY3NpJWxkOiVkOiVkOiBkZGIgWyVkXSAiCiAJCQkJCSAgICAgImluaXRhdGUgcmVsb2dpbiBhZnRlciIKIAkJCQkJICAgICAiICVkIHNlY29uZHNcbiIsCiAJCQkJCSAgICAgaGEtPmhvc3Rfbm8sIGRkYl9lbnRyeS0+YnVzLApAQCAtNjcxLDMxICs3OTMsMzUgQEAKIAkJfQogCX0KIAotCS8qIENoZWNrIGZvciBoZWFydGJlYXQgaW50ZXJ2YWwuICovCi0JaWYgKGhhLT5maXJtd2FyZV9vcHRpb25zICYgRldPUFRfSEVBUlRCRUFUX0VOQUJMRSAmJgotCSAgICBoYS0+aGVhcnRiZWF0X2ludGVydmFsICE9IDApIHsKLQkJaGEtPnNlY29uZHNfc2luY2VfbGFzdF9oZWFydGJlYXQrKzsKLQkJaWYgKGhhLT5zZWNvbmRzX3NpbmNlX2xhc3RfaGVhcnRiZWF0ID4KLQkJICAgIGhhLT5oZWFydGJlYXRfaW50ZXJ2YWwgKyAyKQotCQkJc2V0X2JpdChEUENfUkVTRVRfSEEsICZoYS0+ZHBjX2ZsYWdzKTsKKwlpZiAoIWlzX3FsYTgwMjIoaGEpKSB7CisJCS8qIENoZWNrIGZvciBoZWFydGJlYXQgaW50ZXJ2YWwuICovCisJCWlmIChoYS0+ZmlybXdhcmVfb3B0aW9ucyAmIEZXT1BUX0hFQVJUQkVBVF9FTkFCTEUgJiYKKwkJICAgIGhhLT5oZWFydGJlYXRfaW50ZXJ2YWwgIT0gMCkgeworCQkJaGEtPnNlY29uZHNfc2luY2VfbGFzdF9oZWFydGJlYXQrKzsKKwkJCWlmIChoYS0+c2Vjb25kc19zaW5jZV9sYXN0X2hlYXJ0YmVhdCA+CisJCQkgICAgaGEtPmhlYXJ0YmVhdF9pbnRlcnZhbCArIDIpCisJCQkJc2V0X2JpdChEUENfUkVTRVRfSEEsICZoYS0+ZHBjX2ZsYWdzKTsKKwkJfQogCX0KIAotCiAJLyogV2FrZXVwIHRoZSBkcGMgcm91dGluZSBmb3IgdGhpcyBhZGFwdGVyLCBpZiBuZWVkZWQuICovCiAJaWYgKChzdGFydF9kcGMgfHwKIAkgICAgIHRlc3RfYml0KERQQ19SRVNFVF9IQSwgJmhhLT5kcGNfZmxhZ3MpIHx8CiAJICAgICB0ZXN0X2JpdChEUENfUkVUUllfUkVTRVRfSEEsICZoYS0+ZHBjX2ZsYWdzKSB8fAogCSAgICAgdGVzdF9iaXQoRFBDX1JFTE9HSU5fREVWSUNFLCAmaGEtPmRwY19mbGFncykgfHwKLQkgICAgIHRlc3RfYml0KERQQ19SRVNFVF9IQV9ERVNUUk9ZX0REQl9MSVNULCAmaGEtPmRwY19mbGFncykgfHwKKwkgICAgIHRlc3RfYml0KERQQ19SRVNFVF9IQV9GV19DT05URVhULCAmaGEtPmRwY19mbGFncykgfHwKIAkgICAgIHRlc3RfYml0KERQQ19SRVNFVF9IQV9JTlRSLCAmaGEtPmRwY19mbGFncykgfHwKIAkgICAgIHRlc3RfYml0KERQQ19HRVRfREhDUF9JUF9BRERSLCAmaGEtPmRwY19mbGFncykgfHwKIAkgICAgIHRlc3RfYml0KERQQ19MSU5LX0NIQU5HRUQsICZoYS0+ZHBjX2ZsYWdzKSB8fAorCSAgICAgdGVzdF9iaXQoRFBDX0hBX1VOUkVDT1ZFUkFCTEUsICZoYS0+ZHBjX2ZsYWdzKSB8fAorCSAgICAgdGVzdF9iaXQoRFBDX0hBX05FRURfUVVJRVNDRU5ULCAmaGEtPmRwY19mbGFncykgfHwKIAkgICAgIHRlc3RfYml0KERQQ19BRU4sICZoYS0+ZHBjX2ZsYWdzKSkgJiYKKwkgICAgICF0ZXN0X2JpdChBRl9EUENfU0NIRURVTEVELCAmaGEtPmZsYWdzKSAmJgogCSAgICAgaGEtPmRwY190aHJlYWQpIHsKIAkJREVCVUcyKHByaW50aygic2NzaSVsZDogJXM6IHNjaGVkdWxpbmcgZHBjIHJvdXRpbmUiCiAJCQkgICAgICAiIC0gZHBjIGZsYWdzID0gMHglbHhcbiIsCiAJCQkgICAgICBoYS0+aG9zdF9ubywgX19mdW5jX18sIGhhLT5kcGNfZmxhZ3MpKTsKLQkJcXVldWVfd29yayhoYS0+ZHBjX3RocmVhZCwgJmhhLT5kcGNfd29yayk7CisJCXFsYTR4eHhfd2FrZV9kcGMoaGEpOwogCX0KIAogCS8qIFJlc2NoZWR1bGUgdGltZXIgdGhyZWFkIHRvIGNhbGwgdXMgYmFjayBpbiBvbmUgc2Vjb25kICovCkBAIC03MTQsMTYgKzg0MCwxNSBAQAogc3RhdGljIGludCBxbGE0eHh4X2NtZF93YWl0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKIHsKIAl1aW50MzJfdCBpbmRleCA9IDA7Ci0JaW50IHN0YXQgPSBRTEFfU1VDQ0VTUzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBzY3NpX2NtbmQgKmNtZDsKLQlpbnQgd2FpdF9jbnQgPSBXQUlUX0NNRF9UT1Y7CS8qCi0JCQkJCSAqIEluaXRpYWxpemVkIGZvciAzMCBzZWNvbmRzIGFzIHdlCi0JCQkJCSAqIGV4cGVjdCBhbGwgY29tbWFuZHMgdG8gcmV0dW5lZAotCQkJCQkgKiBBU0FQLgotCQkJCQkgKi8KIAotCXdoaWxlICh3YWl0X2NudCkgeworCXVuc2lnbmVkIGxvbmcgd3RpbWUgPSBqaWZmaWVzICsgKFdBSVRfQ01EX1RPViAqIEhaKTsKKworCURFQlVHMihxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJXYWl0IHVwIHRvICVkIHNlY29uZHMgZm9yIGNtZHMgdG8gIgorCSAgICAiY29tcGxldGVcbiIsIFdBSVRfQ01EX1RPVikpOworCisJd2hpbGUgKCF0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHd0aW1lKSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIAkJLyogRmluZCBhIGNvbW1hbmQgdGhhdCBoYXNuJ3QgY29tcGxldGVkLiAqLwogCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBoYS0+aG9zdC0+Y2FuX3F1ZXVlOyBpbmRleCsrKSB7CkBAIC03MzQsMzEgKzg1OSwyNiBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwogCiAJCS8qIElmIE5vIENvbW1hbmRzIGFyZSBwZW5kaW5nLCB3YWl0IGlzIGNvbXBsZXRlICovCi0JCWlmIChpbmRleCA9PSBoYS0+aG9zdC0+Y2FuX3F1ZXVlKSB7Ci0JCQlicmVhazsKLQkJfQorCQlpZiAoaW5kZXggPT0gaGEtPmhvc3QtPmNhbl9xdWV1ZSkKKwkJCXJldHVybiBRTEFfU1VDQ0VTUzsKIAotCQkvKiBJZiB3ZSB0aW1lZCBvdXQgb24gd2FpdGluZyBmb3IgY29tbWFuZHMgdG8gY29tZSBiYWNrCi0JCSAqIHJldHVybiBFUlJPUi4KLQkJICovCi0JCXdhaXRfY250LS07Ci0JCWlmICh3YWl0X2NudCA9PSAwKQotCQkJc3RhdCA9IFFMQV9FUlJPUjsKLQkJZWxzZSB7Ci0JCQltc2xlZXAoMTAwMCk7Ci0JCX0KLQl9CQkJLyogRW5kIG9mIFdoaWxlICh3YWl0X2NudCkgKi8KLQotCXJldHVybiBzdGF0OworCQltc2xlZXAoMTAwMCk7CisJfQorCS8qIElmIHdlIHRpbWVkIG91dCBvbiB3YWl0aW5nIGZvciBjb21tYW5kcyB0byBjb21lIGJhY2sKKwkgKiByZXR1cm4gRVJST1IuICovCisJcmV0dXJuIFFMQV9FUlJPUjsKIH0KIAotdm9pZCBxbGE0eHh4X2h3X3Jlc2V0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK2ludCBxbGE0eHh4X2h3X3Jlc2V0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKIHsKIAl1aW50MzJfdCBjdHJsX3N0YXR1czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAogCURFQlVHMihwcmludGsoS0VSTl9FUlIgInNjc2klbGQ6ICVzXG4iLCBoYS0+aG9zdF9ubywgX19mdW5jX18pKTsKIAorCWlmIChxbDR4eHhfbG9ja19kcnZyX3dhaXQoaGEpICE9IFFMQV9TVUNDRVNTKQorCQlyZXR1cm4gUUxBX0VSUk9SOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAKIAkvKgpAQCAtNzc0LDYgKzg5NCw3IEBACiAJcmVhZGwoJmhhLT5yZWctPmN0cmxfc3RhdHVzKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIFFMQV9TVUNDRVNTOwogfQogCiAvKioKQEAgLTg3MiwxNSArOTkzLDE2IEBACiB9CiAKIC8qKgotICogcWxhNHh4eF9mbHVzaF9hY3RpdmVfc3JicyAtIHJldHVybnMgYWxsIG91dHN0YW5kaW5nIGkvbyByZXF1ZXN0cyB0byBPLlMuCisgKiBxbGE0eHh4X2Fib3J0X2FjdGl2ZV9jbWRzIC0gcmV0dXJucyBhbGwgb3V0c3RhbmRpbmcgaS9vIHJlcXVlc3RzIHRvIE8uUy4KICAqIEBoYTogUG9pbnRlciB0byBob3N0IGFkYXB0ZXIgc3RydWN0dXJlLgorICogQHJlczogcmV0dXJuZWQgc2NzaSBzdGF0dXMKICAqCiAgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGp1c3QgcHJpb3IgdG8gYSBIQVJEIFJFU0VUIHRvIHJldHVybiBhbGwKICAqIG91dHN0YW5kaW5nIGNvbW1hbmRzIGJhY2sgdG8gdGhlIE9wZXJhdGluZyBTeXN0ZW0uCiAgKiBDYWxsZXIgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSBmb2xsb3dpbmcgbG9ja3MgYXJlIHJlbGVhc2VkCiAgKiBiZWZvcmUgdGhpcyBjYWxsaW5nIHJvdXRpbmU6IEhhcmR3YXJlIGxvY2ssIGFuZCBpb19yZXF1ZXN0X2xvY2suCiAgKiovCi1zdGF0aWMgdm9pZCBxbGE0eHh4X2ZsdXNoX2FjdGl2ZV9zcmJzKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK3N0YXRpYyB2b2lkIHFsYTR4eHhfYWJvcnRfYWN0aXZlX2NtZHMoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLCBpbnQgcmVzKQogewogCXN0cnVjdCBzcmIgKnNyYjsKIAlpbnQgaTsKQEAgLTg5MCw3NCArMTAxMiwxMTYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgaGEtPmhvc3QtPmNhbl9xdWV1ZTsgaSsrKSB7CiAJCXNyYiA9IHFsYTR4eHhfZGVsX2Zyb21fYWN0aXZlX2FycmF5KGhhLCBpKTsKIAkJaWYgKHNyYiAhPSBOVUxMKSB7Ci0JCQlzcmItPmNtZC0+cmVzdWx0ID0gRElEX1JFU0VUIDw8IDE2OworCQkJc3JiLT5jbWQtPnJlc3VsdCA9IHJlczsKIAkJCWtyZWZfcHV0KCZzcmItPnNyYl9yZWYsIHFsYTR4eHhfc3JiX2NvbXBsKTsKIAkJfQogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwogfQogCit2b2lkIHFsYTR4eHhfZGVhZF9hZGFwdGVyX2NsZWFudXAoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKQoreworCWNsZWFyX2JpdChBRl9PTkxJTkUsICZoYS0+ZmxhZ3MpOworCisJLyogRGlzYWJsZSB0aGUgYm9hcmQgKi8KKwlxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJEaXNhYmxpbmcgdGhlIGJvYXJkXG4iKTsKKwlzZXRfYml0KEFGX0hCQV9HT0lOR19BV0FZLCAmaGEtPmZsYWdzKTsKKworCXFsYTR4eHhfYWJvcnRfYWN0aXZlX2NtZHMoaGEsIERJRF9OT19DT05ORUNUIDw8IDE2KTsKKwlxbGE0eHh4X21hcmtfYWxsX2RldmljZXNfbWlzc2luZyhoYSk7CisJY2xlYXJfYml0KEFGX0lOSVRfRE9ORSwgJmhhLT5mbGFncyk7Cit9CisKIC8qKgogICogcWxhNHh4eF9yZWNvdmVyX2FkYXB0ZXIgLSByZWNvdmVycyBhZGFwdGVyIGFmdGVyIGEgZmF0YWwgZXJyb3IKICAqIEBoYTogUG9pbnRlciB0byBob3N0IGFkYXB0ZXIgc3RydWN0dXJlLgotICogQHJlbmV3X2RkYl9saXN0OiBJbmRpY2F0ZXMgd2hhdCB0byBkbyB3aXRoIHRoZSBhZGFwdGVyJ3MgZGRiIGxpc3QKLSAqCi0gKiByZW5ld19kZGJfbGlzdCB2YWx1ZSBjYW4gYmUgMD1wcmVzZXJ2ZSBkZGIgbGlzdCwgMT1kZXN0cm95IGFuZCByZWJ1aWxkCi0gKiBkZGIgbGlzdC4KICAqKi8KLXN0YXRpYyBpbnQgcWxhNHh4eF9yZWNvdmVyX2FkYXB0ZXIoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLAotCQkJCXVpbnQ4X3QgcmVuZXdfZGRiX2xpc3QpCitzdGF0aWMgaW50IHFsYTR4eHhfcmVjb3Zlcl9hZGFwdGVyKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKIHsKLQlpbnQgc3RhdHVzOworCWludCBzdGF0dXMgPSBRTEFfRVJST1I7CisJdWludDhfdCByZXNldF9jaGlwID0gMDsKIAogCS8qIFN0YWxsIGluY29taW5nIEkvTyB1bnRpbCB3ZSBhcmUgZG9uZSAqLworCXNjc2lfYmxvY2tfcmVxdWVzdHMoaGEtPmhvc3QpOwogCWNsZWFyX2JpdChBRl9PTkxJTkUsICZoYS0+ZmxhZ3MpOwogCi0JREVCVUcyKHByaW50aygic2NzaSVsZDogJXMgY2FsbGluZyBxbGE0eHh4X2NtZF93YWl0XG4iLCBoYS0+aG9zdF9ubywKLQkJICAgICAgX19mdW5jX18pKTsKKwlERUJVRzIocWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLCAiJXM6IGFkYXB0ZXIgT0ZGTElORVxuIiwgX19mdW5jX18pKTsKIAotCS8qIFdhaXQgZm9yIG91dHN0YW5kaW5nIGNvbW1hbmRzIHRvIGNvbXBsZXRlLgotCSAqIFN0YWxscyB0aGUgZHJpdmVyIGZvciBtYXggMzAgc2VjcwotCSAqLwotCXN0YXR1cyA9IHFsYTR4eHhfY21kX3dhaXQoaGEpOworCXNldF9iaXQoRFBDX1JFU0VUX0FDVElWRSwgJmhhLT5kcGNfZmxhZ3MpOwogCi0JcWxhNHh4eF9kaXNhYmxlX2ludHJzKGhhKTsKKwlpZiAodGVzdF9iaXQoRFBDX1JFU0VUX0hBLCAmaGEtPmRwY19mbGFncykpCisJCXJlc2V0X2NoaXAgPSAxOwogCi0JLyogRmx1c2ggYW55IHBlbmRpbmcgZGRiIGNoYW5nZWQgQUVOcyAqLwotCXFsYTR4eHhfcHJvY2Vzc19hZW4oaGEsIEZMVVNIX0REQl9DSEFOR0VEX0FFTlMpOwotCi0JcWxhNHh4eF9mbHVzaF9hY3RpdmVfc3JicyhoYSk7Ci0KLQkvKiBSZXNldCB0aGUgZmlybXdhcmUuCUlmIHN1Y2Nlc3NmdWwsIGZ1bmN0aW9uCi0JICogcmV0dXJucyB3aXRoIElTUCBpbnRlcnJ1cHRzIGVuYWJsZWQuCi0JICovCi0JREVCVUcyKHByaW50aygic2NzaSVsZDogJXMgLSBQZXJmb3JtaW5nIHNvZnQgcmVzZXQuLlxuIiwKLQkJICAgICAgaGEtPmhvc3Rfbm8sIF9fZnVuY19fKSk7Ci0JaWYgKHFsNHh4eF9sb2NrX2RydnJfd2FpdChoYSkgPT0gUUxBX1NVQ0NFU1MpCi0JCXN0YXR1cyA9IHFsYTR4eHhfc29mdF9yZXNldChoYSk7Ci0JZWxzZQotCQlzdGF0dXMgPSBRTEFfRVJST1I7Ci0KLQkvKiBGbHVzaCBhbnkgcGVuZGluZyBkZGIgY2hhbmdlZCBBRU5zICovCi0JcWxhNHh4eF9wcm9jZXNzX2FlbihoYSwgRkxVU0hfRERCX0NIQU5HRURfQUVOUyk7Ci0KLQkvKiBSZS1pbml0aWFsaXplIGZpcm13YXJlLiBJZiBzdWNjZXNzZnVsLCBmdW5jdGlvbiByZXR1cm5zCi0JICogd2l0aCBJU1AgaW50ZXJydXB0cyBlbmFibGVkICovCi0JaWYgKHN0YXR1cyA9PSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiAlcyAtIEluaXRpYWxpemluZyBhZGFwdGVyLi5cbiIsCi0JCQkgICAgICBoYS0+aG9zdF9ubywgX19mdW5jX18pKTsKLQotCQkvKiBJZiBzdWNjZXNzZnVsLCBBRl9PTkxJTkUgZmxhZyBzZXQgaW4KLQkJICogcWxhNHh4eF9pbml0aWFsaXplX2FkYXB0ZXIgKi8KLQkJc3RhdHVzID0gcWxhNHh4eF9pbml0aWFsaXplX2FkYXB0ZXIoaGEsIHJlbmV3X2RkYl9saXN0KTsKKwkvKiBGb3IgdGhlIERQQ19SRVNFVF9IQV9JTlRSIGNhc2UgKElTUC00eHh4IHNwZWNpZmljKQorCSAqIGRvIG5vdCByZXNldCBhZGFwdGVyLCBqdW1wIHRvIGluaXRpYWxpemVfYWRhcHRlciAqLworCWlmICh0ZXN0X2JpdChEUENfUkVTRVRfSEFfSU5UUiwgJmhhLT5kcGNfZmxhZ3MpKSB7CisJCXN0YXR1cyA9IFFMQV9TVUNDRVNTOworCQlnb3RvIHJlY292ZXJfaGFfaW5pdF9hZGFwdGVyOwogCX0KIAotCS8qIEZhaWxlZCBhZGFwdGVyIGluaXRpYWxpemF0aW9uPwotCSAqIFJldHJ5IHJlc2V0X2hhIG9ubHkgaWYgaW52b2tlZCB2aWEgRFBDIChEUENfUkVTRVRfSEEpICovCi0JaWYgKCh0ZXN0X2JpdChBRl9PTkxJTkUsICZoYS0+ZmxhZ3MpID09IDApICYmCi0JICAgICh0ZXN0X2JpdChEUENfUkVTRVRfSEEsICZoYS0+ZHBjX2ZsYWdzKSkpIHsKKwkvKiBGb3IgdGhlIElTUC04Mnh4IGFkYXB0ZXIsIGlzc3VlIGEgc3RvcF9maXJtd2FyZSBpZiBpbnZva2VkCisJICogZnJvbSBlaF9ob3N0X3Jlc2V0IG9yIGlvY3RsIG1vZHVsZSAqLworCWlmIChpc19xbGE4MDIyKGhhKSAmJiAhcmVzZXRfY2hpcCAmJgorCSAgICB0ZXN0X2JpdChEUENfUkVTRVRfSEFfRldfQ09OVEVYVCwgJmhhLT5kcGNfZmxhZ3MpKSB7CisKKwkJREVCVUcyKHFsNF9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkJICAgICJzY3NpJWxkOiAlcyAtIFBlcmZvcm1pbmcgc3RvcF9maXJtd2FyZS4uLlxuIiwKKwkJICAgIGhhLT5ob3N0X25vLCBfX2Z1bmNfXykpOworCQlzdGF0dXMgPSBoYS0+aXNwX29wcy0+cmVzZXRfZmlybXdhcmUoaGEpOworCQlpZiAoc3RhdHVzID09IFFMQV9TVUNDRVNTKSB7CisJCQlxbGE0eHh4X2NtZF93YWl0KGhhKTsKKwkJCWhhLT5pc3Bfb3BzLT5kaXNhYmxlX2ludHJzKGhhKTsKKwkJCXFsYTR4eHhfcHJvY2Vzc19hZW4oaGEsIEZMVVNIX0REQl9DSEFOR0VEX0FFTlMpOworCQkJcWxhNHh4eF9hYm9ydF9hY3RpdmVfY21kcyhoYSwgRElEX1JFU0VUIDw8IDE2KTsKKwkJfSBlbHNlIHsKKwkJCS8qIElmIHRoZSBzdG9wX2Zpcm13YXJlIGZhaWxzIHRoZW4KKwkJCSAqIHJlc2V0IHRoZSBlbnRpcmUgY2hpcCAqLworCQkJcmVzZXRfY2hpcCA9IDE7CisJCQljbGVhcl9iaXQoRFBDX1JFU0VUX0hBX0ZXX0NPTlRFWFQsICZoYS0+ZHBjX2ZsYWdzKTsKKwkJCXNldF9iaXQoRFBDX1JFU0VUX0hBLCAmaGEtPmRwY19mbGFncyk7CisJCX0KKwl9CisKKwkvKiBJc3N1ZSBmdWxsIGNoaXAgcmVzZXQgaWYgcmVjb3ZlcmluZyBmcm9tIGEgY2F0YXN0cm9waGljIGVycm9yLAorCSAqIG9yIGlmIHN0b3BfZmlybXdhcmUgZmFpbHMgZm9yIElTUC04Mnh4LgorCSAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgY2FzZSBmb3IgSVNQLTR4eHggKi8KKwlpZiAoIWlzX3FsYTgwMjIoaGEpIHx8IHJlc2V0X2NoaXApIHsKKwkJcWxhNHh4eF9jbWRfd2FpdChoYSk7CisJCXFsYTR4eHhfcHJvY2Vzc19hZW4oaGEsIEZMVVNIX0REQl9DSEFOR0VEX0FFTlMpOworCQlxbGE0eHh4X2Fib3J0X2FjdGl2ZV9jbWRzKGhhLCBESURfUkVTRVQgPDwgMTYpOworCQlERUJVRzIocWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkgICAgInNjc2klbGQ6ICVzIC0gUGVyZm9ybWluZyBjaGlwIHJlc2V0Li5cbiIsCisJCSAgICBoYS0+aG9zdF9ubywgX19mdW5jX18pKTsKKwkJc3RhdHVzID0gaGEtPmlzcF9vcHMtPnJlc2V0X2NoaXAoaGEpOworCX0KKworCS8qIEZsdXNoIGFueSBwZW5kaW5nIGRkYiBjaGFuZ2VkIEFFTnMgKi8KKwlxbGE0eHh4X3Byb2Nlc3NfYWVuKGhhLCBGTFVTSF9EREJfQ0hBTkdFRF9BRU5TKTsKKworcmVjb3Zlcl9oYV9pbml0X2FkYXB0ZXI6CisJLyogVXBvbiBzdWNjZXNzZnVsIGZpcm13YXJlL2NoaXAgcmVzZXQsIHJlLWluaXRpYWxpemUgdGhlIGFkYXB0ZXIgKi8KKwlpZiAoc3RhdHVzID09IFFMQV9TVUNDRVNTKSB7CisJCS8qIEZvciBJU1AtNHh4eCwgZm9yY2UgZnVuY3Rpb24gMSB0byBhbHdheXMgaW5pdGlhbGl6ZQorCQkgKiBiZWZvcmUgZnVuY3Rpb24gMyB0byBwcmV2ZW50IGJvdGggZnVuY2lvbnMgZnJvbQorCQkgKiBzdGVwcGluZyBvbiB0b3Agb2YgdGhlIG90aGVyICovCisJCWlmICghaXNfcWxhODAyMihoYSkgJiYgKGhhLT5tYWNfaW5kZXggPT0gMykpCisJCQlzc2xlZXAoNik7CisKKwkJLyogTk9URTogQUZfT05MSU5FIGZsYWcgc2V0IHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mCisJCSAqICAgICAgIHFsYTR4eHhfaW5pdGlhbGl6ZV9hZGFwdGVyICovCisJCXN0YXR1cyA9IHFsYTR4eHhfaW5pdGlhbGl6ZV9hZGFwdGVyKGhhLCBQUkVTRVJWRV9EREJfTElTVCk7CisJfQorCisJLyogUmV0cnkgZmFpbGVkIGFkYXB0ZXIgaW5pdGlhbGl6YXRpb24sIGlmIG5lY2Vzc2FyeQorCSAqIERvIG5vdCByZXRyeSBpbml0aWFsaXplX2FkYXB0ZXIgZm9yIFJFU0VUX0hBX0lOVFIgKElTUC00eHh4IHNwZWNpZmljKQorCSAqIGNhc2UgdG8gcHJldmVudCBwaW5nLXBvbmcgcmVzZXRzIGJldHdlZW4gZnVuY3Rpb25zICovCisJaWYgKCF0ZXN0X2JpdChBRl9PTkxJTkUsICZoYS0+ZmxhZ3MpICYmCisJICAgICF0ZXN0X2JpdChEUENfUkVTRVRfSEFfSU5UUiwgJmhhLT5kcGNfZmxhZ3MpKSB7CiAJCS8qIEFkYXB0ZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkLCBzZWUgaWYgd2UgY2FuIHJldHJ5Ci0JCSAqIHJlc2V0dGluZyB0aGUgaGEgKi8KKwkJICogcmVzZXR0aW5nIHRoZSBoYS4KKwkJICogU2luY2Ugd2UgZG9uJ3Qgd2FudCB0byBibG9jayB0aGUgRFBDIGZvciB0b28gbG9uZworCQkgKiB3aXRoIG11bHRpcGxlIHJlc2V0cyBpbiB0aGUgc2FtZSB0aHJlYWQsCisJCSAqIHV0aWxpemUgRFBDIHRvIHJldHJ5ICovCiAJCWlmICghdGVzdF9iaXQoRFBDX1JFVFJZX1JFU0VUX0hBLCAmaGEtPmRwY19mbGFncykpIHsKIAkJCWhhLT5yZXRyeV9yZXNldF9oYV9jbnQgPSBNQVhfUkVTRVRfSEFfUkVUUklFUzsKIAkJCURFQlVHMihwcmludGsoInNjc2klbGQ6IHJlY292ZXIgYWRhcHRlciAtIHJldHJ5aW5nICIKQEAgLTk4MiwyOSArMTE0Niw0MyBAQAogCQkJCURFQlVHMihwcmludGsoInNjc2klbGQ6IHJlY292ZXIgYWRhcHRlciAiCiAJCQkJCSAgICAgICJmYWlsZWQgLSBib2FyZCBkaXNhYmxlZFxuIiwKIAkJCQkJICAgICAgaGEtPmhvc3Rfbm8pKTsKLQkJCQlxbGE0eHh4X2ZsdXNoX2FjdGl2ZV9zcmJzKGhhKTsKKwkJCQlxbGE0eHh4X2RlYWRfYWRhcHRlcl9jbGVhbnVwKGhhKTsKIAkJCQljbGVhcl9iaXQoRFBDX1JFVFJZX1JFU0VUX0hBLCAmaGEtPmRwY19mbGFncyk7CiAJCQkJY2xlYXJfYml0KERQQ19SRVNFVF9IQSwgJmhhLT5kcGNfZmxhZ3MpOwotCQkJCWNsZWFyX2JpdChEUENfUkVTRVRfSEFfREVTVFJPWV9EREJfTElTVCwKKwkJCQljbGVhcl9iaXQoRFBDX1JFU0VUX0hBX0ZXX0NPTlRFWFQsCiAJCQkJCSAgJmhhLT5kcGNfZmxhZ3MpOwogCQkJCXN0YXR1cyA9IFFMQV9FUlJPUjsKIAkJCX0KIAkJfQogCX0gZWxzZSB7CiAJCWNsZWFyX2JpdChEUENfUkVTRVRfSEEsICZoYS0+ZHBjX2ZsYWdzKTsKLQkJY2xlYXJfYml0KERQQ19SRVNFVF9IQV9ERVNUUk9ZX0REQl9MSVNULCAmaGEtPmRwY19mbGFncyk7CisJCWNsZWFyX2JpdChEUENfUkVTRVRfSEFfRldfQ09OVEVYVCwgJmhhLT5kcGNfZmxhZ3MpOwogCQljbGVhcl9iaXQoRFBDX1JFVFJZX1JFU0VUX0hBLCAmaGEtPmRwY19mbGFncyk7CiAJfQogCiAJaGEtPmFkYXB0ZXJfZXJyb3JfY291bnQrKzsKIAotCWlmIChzdGF0dXMgPT0gUUxBX1NVQ0NFU1MpCi0JCXFsYTR4eHhfZW5hYmxlX2ludHJzKGhhKTsKKwlpZiAodGVzdF9iaXQoQUZfT05MSU5FLCAmaGEtPmZsYWdzKSkKKwkJaGEtPmlzcF9vcHMtPmVuYWJsZV9pbnRycyhoYSk7CiAKLQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiByZWNvdmVyIGFkYXB0ZXIgLi4gRE9ORVxuIiwgaGEtPmhvc3Rfbm8pKTsKKwlzY3NpX3VuYmxvY2tfcmVxdWVzdHMoaGEtPmhvc3QpOworCisJY2xlYXJfYml0KERQQ19SRVNFVF9BQ1RJVkUsICZoYS0+ZHBjX2ZsYWdzKTsKKwlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiByZWNvdmVyIGFkYXB0ZXI6ICVzXG4iLCBoYS0+aG9zdF9ubywKKwkgICAgc3RhdHVzID09IFFMQV9FUlJPUiA/ICJGQUlMRUQiIDogIlNVQ0NFREVEIikpOworCiAJcmV0dXJuIHN0YXR1czsKIH0KIAordm9pZCBxbGE0eHh4X3dha2VfZHBjKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK3sKKwlpZiAoaGEtPmRwY190aHJlYWQgJiYKKwkgICAgIXRlc3RfYml0KEFGX0RQQ19TQ0hFRFVMRUQsICZoYS0+ZmxhZ3MpKSB7CisJCXNldF9iaXQoQUZfRFBDX1NDSEVEVUxFRCwgJmhhLT5mbGFncyk7CisJCXF1ZXVlX3dvcmsoaGEtPmRwY190aHJlYWQsICZoYS0+ZHBjX3dvcmspOworCX0KK30KKwogLyoqCiAgKiBxbGE0eHh4X2RvX2RwYyAtIGRwYyByb3V0aW5lCiAgKiBAZGF0YTogaW4gb3VyIGNhc2UgcG9pbnRlciB0byBhZGFwdGVyIHN0cnVjdHVyZQpAQCAtMTAyNCwyMSArMTIwMiw0NyBAQAogCWludCBzdGF0dXMgPSBRTEFfRVJST1I7CiAKIAlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiAlczogRFBDIGhhbmRsZXIgd2FraW5nIHVwLiIKLQkJImZsYWdzID0gMHglMDhseCwgZHBjX2ZsYWdzID0gMHglMDhseCBjdHJsX3N0YXQgPSAweCUwOHhcbiIsCi0JCWhhLT5ob3N0X25vLCBfX2Z1bmNfXywgaGEtPmZsYWdzLCBoYS0+ZHBjX2ZsYWdzLAotCQlyZWFkdygmaGEtPnJlZy0+Y3RybF9zdGF0dXMpKSk7CisJICAgICJmbGFncyA9IDB4JTA4bHgsIGRwY19mbGFncyA9IDB4JTA4bHhcbiIsCisJICAgIGhhLT5ob3N0X25vLCBfX2Z1bmNfXywgaGEtPmZsYWdzLCBoYS0+ZHBjX2ZsYWdzKSkKIAogCS8qIEluaXRpYWxpemF0aW9uIG5vdCB5ZXQgZmluaXNoZWQuIERvbid0IGRvIGFueXRoaW5nIHlldC4gKi8KIAlpZiAoIXRlc3RfYml0KEFGX0lOSVRfRE9ORSwgJmhhLT5mbGFncykpCiAJCXJldHVybjsKIAotCWlmIChhZGFwdGVyX3VwKGhhKSB8fAotCSAgICB0ZXN0X2JpdChEUENfUkVTRVRfSEEsICZoYS0+ZHBjX2ZsYWdzKSB8fAorCS8qIEhCQSBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBwZXJtYW5lbnRseSBkaXNhYmxlZC4KKwkgKiBEb24ndCBwcm9jZXNzIGFueXRoaW5nICovCisJaWYgKHRlc3RfYml0KEFGX0hCQV9HT0lOR19BV0FZLCAmaGEtPmZsYWdzKSkKKwkJcmV0dXJuOworCisJaWYgKGlzX3FsYTgwMjIoaGEpKSB7CisJCWlmICh0ZXN0X2JpdChEUENfSEFfVU5SRUNPVkVSQUJMRSwgJmhhLT5kcGNfZmxhZ3MpKSB7CisJCQlxbGE0Xzh4eHhfaWRjX2xvY2soaGEpOworCQkJcWxhNF84eHh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9ERVZfU1RBVEUsCisJCQkgICAgUUxBODJYWF9ERVZfRkFJTEVEKTsKKwkJCXFsYTRfOHh4eF9pZGNfdW5sb2NrKGhhKTsKKwkJCXFsNF9wcmludGsoS0VSTl9JTkZPLCBoYSwgIkhXIFN0YXRlOiBGQUlMRURcbiIpOworCQkJcWxhNF84eHh4X2RldmljZV9zdGF0ZV9oYW5kbGVyKGhhKTsKKwkJfQorCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KERQQ19IQV9ORUVEX1FVSUVTQ0VOVCwgJmhhLT5kcGNfZmxhZ3MpKSB7CisJCQlxbGE0Xzh4eHhfbmVlZF9xc250X2hhbmRsZXIoaGEpOworCQl9CisJfQorCisJaWYgKCF0ZXN0X2JpdChEUENfUkVTRVRfQUNUSVZFLCAmaGEtPmRwY19mbGFncykgJiYKKwkgICAgKHRlc3RfYml0KERQQ19SRVNFVF9IQSwgJmhhLT5kcGNfZmxhZ3MpIHx8CiAJICAgIHRlc3RfYml0KERQQ19SRVNFVF9IQV9JTlRSLCAmaGEtPmRwY19mbGFncykgfHwKLQkgICAgdGVzdF9iaXQoRFBDX1JFU0VUX0hBX0RFU1RST1lfRERCX0xJU1QsICZoYS0+ZHBjX2ZsYWdzKSkgewotCQlpZiAodGVzdF9iaXQoRFBDX1JFU0VUX0hBX0RFU1RST1lfRERCX0xJU1QsICZoYS0+ZHBjX2ZsYWdzKSB8fAotCQkJdGVzdF9iaXQoRFBDX1JFU0VUX0hBLCAmaGEtPmRwY19mbGFncykpCi0JCQlxbGE0eHh4X3JlY292ZXJfYWRhcHRlcihoYSwgUFJFU0VSVkVfRERCX0xJU1QpOworCSAgICB0ZXN0X2JpdChEUENfUkVTRVRfSEFfRldfQ09OVEVYVCwgJmhhLT5kcGNfZmxhZ3MpKSkgeworCQlpZiAocWw0eGRvbnRyZXNldGhiYSkgeworCQkJREVCVUcyKHByaW50aygic2NzaSVsZDogJXM6IERvbid0IFJlc2V0IEhCQVxuIiwKKwkJCSAgICBoYS0+aG9zdF9ubywgX19mdW5jX18pKTsKKwkJCWNsZWFyX2JpdChEUENfUkVTRVRfSEEsICZoYS0+ZHBjX2ZsYWdzKTsKKwkJCWNsZWFyX2JpdChEUENfUkVTRVRfSEFfSU5UUiwgJmhhLT5kcGNfZmxhZ3MpOworCQkJY2xlYXJfYml0KERQQ19SRVNFVF9IQV9GV19DT05URVhULCAmaGEtPmRwY19mbGFncyk7CisJCQlnb3RvIGRwY19wb3N0X3Jlc2V0X2hhOworCQl9CisJCWlmICh0ZXN0X2JpdChEUENfUkVTRVRfSEFfRldfQ09OVEVYVCwgJmhhLT5kcGNfZmxhZ3MpIHx8CisJCSAgICB0ZXN0X2JpdChEUENfUkVTRVRfSEEsICZoYS0+ZHBjX2ZsYWdzKSkKKwkJCXFsYTR4eHhfcmVjb3Zlcl9hZGFwdGVyKGhhKTsKIAogCQlpZiAodGVzdF9iaXQoRFBDX1JFU0VUX0hBX0lOVFIsICZoYS0+ZHBjX2ZsYWdzKSkgewogCQkJdWludDhfdCB3YWl0X3RpbWUgPSBSRVNFVF9JTlRSX1RPVjsKQEAgLTEwNTMsMTggKzEyNTcsMTggQEAKIAkJCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiAlczogU1J8RlNSICIKIAkJCQkJICAgICAgImJpdCBub3QgY2xlYXJlZC0tIHJlc2V0dGluZ1xuIiwKIAkJCQkJICAgICAgaGEtPmhvc3Rfbm8sIF9fZnVuY19fKSk7Ci0JCQlxbGE0eHh4X2ZsdXNoX2FjdGl2ZV9zcmJzKGhhKTsKKwkJCXFsYTR4eHhfYWJvcnRfYWN0aXZlX2NtZHMoaGEsIERJRF9SRVNFVCA8PCAxNik7CiAJCQlpZiAocWw0eHh4X2xvY2tfZHJ2cl93YWl0KGhhKSA9PSBRTEFfU1VDQ0VTUykgewogCQkJCXFsYTR4eHhfcHJvY2Vzc19hZW4oaGEsIEZMVVNIX0REQl9DSEFOR0VEX0FFTlMpOwotCQkJCXN0YXR1cyA9IHFsYTR4eHhfaW5pdGlhbGl6ZV9hZGFwdGVyKGhhLAotCQkJCQkJUFJFU0VSVkVfRERCX0xJU1QpOworCQkJCXN0YXR1cyA9IHFsYTR4eHhfcmVjb3Zlcl9hZGFwdGVyKGhhKTsKIAkJCX0KIAkJCWNsZWFyX2JpdChEUENfUkVTRVRfSEFfSU5UUiwgJmhhLT5kcGNfZmxhZ3MpOwogCQkJaWYgKHN0YXR1cyA9PSBRTEFfU1VDQ0VTUykKLQkJCQlxbGE0eHh4X2VuYWJsZV9pbnRycyhoYSk7CisJCQkJaGEtPmlzcF9vcHMtPmVuYWJsZV9pbnRycyhoYSk7CiAJCX0KIAl9CiAKK2RwY19wb3N0X3Jlc2V0X2hhOgogCS8qIC0tLS0gcHJvY2VzcyBBRU4/IC0tLSAqLwogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRFBDX0FFTiwgJmhhLT5kcGNfZmxhZ3MpKQogCQlxbGE0eHh4X3Byb2Nlc3NfYWVuKGhhLCBQUk9DRVNTX0FMTF9BRU5TKTsKQEAgLTExMDIsMTMgKzEzMDYsMTEgQEAKIAkJCQkJICAgIEREQl9EU19TRVNTSU9OX0FDVElWRSkgewogCQkJCQkJYXRvbWljX3NldCgmZGRiX2VudHJ5LT5zdGF0ZSwKIAkJCQkJCQkgICBEREJfU1RBVEVfT05MSU5FKTsKLQkJCQkJCWRldl9pbmZvKCZoYS0+cGRldi0+ZGV2LAorCQkJCQkJcWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLAogCQkJCQkJICAgICJzY3NpJWxkOiAlczogZGRiWyVkXSIKLQkJCQkJCSAgICAiIG9zWyVkXSBtYXJrZWQiCi0JCQkJCQkgICAgIiBPTkxJTkVcbiIsCisJCQkJCQkgICAgIiBtYXJrZWQgT05MSU5FXG4iLAogCQkJCQkJICAgIGhhLT5ob3N0X25vLCBfX2Z1bmNfXywKLQkJCQkJCSAgICBkZGJfZW50cnktPmZ3X2RkYl9pbmRleCwKLQkJCQkJCSAgICBkZGJfZW50cnktPm9zX3RhcmdldF9pZCk7CisJCQkJCQkgICAgZGRiX2VudHJ5LT5md19kZGJfaW5kZXgpOwogCiAJCQkJCQlpc2NzaV91bmJsb2NrX3Nlc3Npb24oCiAJCQkJCQkgICAgZGRiX2VudHJ5LT5zZXNzKTsKQEAgLTExNDQsNiArMTM0Niw3IEBACiAJCQl9CiAJCX0KIAl9CisJY2xlYXJfYml0KEFGX0RQQ19TQ0hFRFVMRUQsICZoYS0+ZmxhZ3MpOwogfQogCiAvKioKQEAgLTExNTUsMzAgKzEzNTgsOTkgQEAKIAogCWlmICh0ZXN0X2JpdChBRl9JTlRFUlJVUFRTX09OLCAmaGEtPmZsYWdzKSkgewogCQkvKiBUdXJuLW9mZiBpbnRlcnJ1cHRzIG9uIHRoZSBjYXJkLiAqLwotCQlxbGE0eHh4X2Rpc2FibGVfaW50cnMoaGEpOworCQloYS0+aXNwX29wcy0+ZGlzYWJsZV9pbnRycyhoYSk7CiAJfQogCi0JLyogS2lsbCB0aGUga2VybmVsIHRocmVhZCBmb3IgdGhpcyBob3N0ICovCi0JaWYgKGhhLT5kcGNfdGhyZWFkKQotCQlkZXN0cm95X3dvcmtxdWV1ZShoYS0+ZHBjX3RocmVhZCk7Ci0KLQkvKiBJc3N1ZSBTb2Z0IFJlc2V0IHRvIHB1dCBmaXJtd2FyZSBpbiB1bmtub3duIHN0YXRlICovCi0JaWYgKHFsNHh4eF9sb2NrX2RydnJfd2FpdChoYSkgPT0gUUxBX1NVQ0NFU1MpCi0JCXFsYTR4eHhfaHdfcmVzZXQoaGEpOwotCiAJLyogUmVtb3ZlIHRpbWVyIHRocmVhZCwgaWYgcHJlc2VudCAqLwogCWlmIChoYS0+dGltZXJfYWN0aXZlKQogCQlxbGE0eHh4X3N0b3BfdGltZXIoaGEpOwogCisJLyogS2lsbCB0aGUga2VybmVsIHRocmVhZCBmb3IgdGhpcyBob3N0ICovCisJaWYgKGhhLT5kcGNfdGhyZWFkKQorCQlkZXN0cm95X3dvcmtxdWV1ZShoYS0+ZHBjX3RocmVhZCk7CisKKwkvKiBQdXQgZmlybXdhcmUgaW4ga25vd24gc3RhdGUgKi8KKwloYS0+aXNwX29wcy0+cmVzZXRfZmlybXdhcmUoaGEpOworCisJaWYgKGlzX3FsYTgwMjIoaGEpKSB7CisJCXFsYTRfOHh4eF9pZGNfbG9jayhoYSk7CisJCXFsYTRfOHh4eF9jbGVhcl9kcnZfYWN0aXZlKGhhKTsKKwkJcWxhNF84eHh4X2lkY191bmxvY2soaGEpOworCX0KKwogCS8qIERldGFjaCBpbnRlcnJ1cHRzICovCiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChBRl9JUlFfQVRUQUNIRUQsICZoYS0+ZmxhZ3MpKQotCQlmcmVlX2lycShoYS0+cGRldi0+aXJxLCBoYSk7CisJCXFsYTR4eHhfZnJlZV9pcnFzKGhhKTsKIAogCS8qIGZyZWUgZXh0cmEgbWVtb3J5ICovCiAJcWxhNHh4eF9tZW1fZnJlZShoYSk7Cit9CiAKLQlwY2lfZGlzYWJsZV9kZXZpY2UoaGEtPnBkZXYpOworaW50IHFsYTRfOHh4eF9pb3NwYWNlX2NvbmZpZyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCit7CisJaW50IHN0YXR1cyA9IDA7CisJdWludDhfdCByZXZpc2lvbl9pZDsKKwl1bnNpZ25lZCBsb25nIG1lbV9iYXNlLCBtZW1fbGVuLCBkYl9iYXNlLCBkYl9sZW47CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBoYS0+cGRldjsKIAorCXN0YXR1cyA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgRFJJVkVSX05BTUUpOworCWlmIChzdGF0dXMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgInNjc2koJWxkKSBGYWlsZWQgdG8gcmVzZXJ2ZSBQSU8gcmVnaW9ucyAoJXMpICIKKwkJICAgICJzdGF0dXM9JWRcbiIsIGhhLT5ob3N0X25vLCBwY2lfbmFtZShwZGV2KSwgc3RhdHVzKTsKKwkJZ290byBpb3NwYWNlX2Vycm9yX2V4aXQ7CisJfQorCisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX1JFVklTSU9OX0lELCAmcmV2aXNpb25faWQpOworCURFQlVHMihwcmludGsoS0VSTl9JTkZPICIlczogcmV2aXNpb24taWQ9JWRcbiIsCisJICAgIF9fZnVuY19fLCByZXZpc2lvbl9pZCkpOworCWhhLT5yZXZpc2lvbl9pZCA9IHJldmlzaW9uX2lkOworCisJLyogcmVtYXAgcGh5cyBhZGRyZXNzICovCisJbWVtX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7IC8qIDAgaXMgZm9yIEJBUiAwICovCisJbWVtX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CisJREVCVUcyKHByaW50ayhLRVJOX0lORk8gIiVzOiBpb3JlbWFwIGZyb20gJWx4IGEgc2l6ZSBvZiAlbHhcbiIsCisJICAgIF9fZnVuY19fLCBtZW1fYmFzZSwgbWVtX2xlbikpOworCisJLyogbWFwcGluZyBvZiBwY2liYXNlIHBvaW50ZXIgKi8KKwloYS0+bnhfcGNpYmFzZSA9ICh1bnNpZ25lZCBsb25nKWlvcmVtYXAobWVtX2Jhc2UsIG1lbV9sZW4pOworCWlmICghaGEtPm54X3BjaWJhc2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAiY2Fubm90IHJlbWFwIE1NSU8gKCVzKSwgYWJvcnRpbmdcbiIsIHBjaV9uYW1lKHBkZXYpKTsKKwkJcGNpX3JlbGVhc2VfcmVnaW9ucyhoYS0+cGRldik7CisJCWdvdG8gaW9zcGFjZV9lcnJvcl9leGl0OworCX0KKworCS8qIE1hcHBpbmcgb2YgSU8gYmFzZSBwb2ludGVyLCBkb29yIGJlbGwgcmVhZCBhbmQgd3JpdGUgcG9pbnRlciAqLworCisJLyogbWFwcGluZyBvZiBJTyBiYXNlIHBvaW50ZXIgKi8KKwloYS0+cWxhNF84eHh4X3JlZyA9CisJICAgIChzdHJ1Y3QgZGV2aWNlX3JlZ184Mnh4ICBfX2lvbWVtICopKCh1aW50OF90ICopaGEtPm54X3BjaWJhc2UgKworCSAgICAweGJjMDAwICsgKGhhLT5wZGV2LT5kZXZmbiA8PCAxMSkpOworCisJZGJfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCA0KTsgIC8qIGRvb3JiZWxsIGlzIG9uIGJhciA0ICovCisJZGJfbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCA0KTsKKworCS8qIG1hcHBpbmcgb2YgZG9vcmJlbGwgd3JpdGUgcG9pbnRlciAqLworCWhhLT5ueF9kYl93cl9wdHIgPSAodW5zaWduZWQgbG9uZylpb3JlbWFwKGRiX2Jhc2UgKworCSAgICAoaGEtPnBkZXYtPmRldmZuIDw8IDEyKSwgNCk7CisJaWYgKCFoYS0+bnhfZGJfd3JfcHRyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgImNhbm5vdCByZW1hcCBNTUlPIGRvb3JiZWxsLXdyaXRlICglcyksIGFib3J0aW5nXG4iLAorCQkgICAgcGNpX25hbWUocGRldikpOworCQlnb3RvIGlvc3BhY2VfZXJyb3JfZXhpdDsKKwl9CisJLyogbWFwcGluZyBvZiBkb29yYmVsbCByZWFkIHBvaW50ZXIgKi8KKwloYS0+bnhfZGJfcmRfcHRyID0gKHVpbnQ4X3QgKikgaGEtPm54X3BjaWJhc2UgKyAoNTEyICogMTAyNCkgKworCSAgICAoaGEtPnBkZXYtPmRldmZuICogOCk7CisJaWYgKCFoYS0+bnhfZGJfcmRfcHRyKQorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICJjYW5ub3QgcmVtYXAgTU1JTyBkb29yYmVsbC1yZWFkICglcyksIGFib3J0aW5nXG4iLAorCQkgICAgcGNpX25hbWUocGRldikpOworCXJldHVybiAwOworCitpb3NwYWNlX2Vycm9yX2V4aXQ6CisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIC8qKioKQEAgLTExODgsNyArMTQ2MCw3IEBACiAgKiBUaGlzIHJvdXRpbmVzIG1hcHMgSEJBJ3MgcmVnaXN0ZXJzIGZyb20gdGhlIHBjaSBhZGRyZXNzIHNwYWNlCiAgKiBpbnRvIHRoZSBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIHNwYWNlIGZvciBtZW1vcnkgbWFwcGVkIGkvby4KICAqKi8KLXN0YXRpYyBpbnQgcWxhNHh4eF9pb3NwYWNlX2NvbmZpZyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCitpbnQgcWxhNHh4eF9pb3NwYWNlX2NvbmZpZyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCiB7CiAJdW5zaWduZWQgbG9uZyBwaW8sIHBpb19sZW4sIHBpb19mbGFnczsKIAl1bnNpZ25lZCBsb25nIG1taW8sIG1taW9fbGVuLCBtbWlvX2ZsYWdzOwpAQCAtMTE5OCwxMiArMTQ3MCwxMiBAQAogCXBpb19mbGFncyA9IHBjaV9yZXNvdXJjZV9mbGFncyhoYS0+cGRldiwgMCk7CiAJaWYgKHBpb19mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKIAkJaWYgKHBpb19sZW4gPCBNSU5fSU9CQVNFX0xFTikgewotCQkJZGV2X3dhcm4oJmhhLT5wZGV2LT5kZXYsCisJCQlxbDRfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCiAJCQkJIkludmFsaWQgUENJIEkvTyByZWdpb24gc2l6ZVxuIik7CiAJCQlwaW8gPSAwOwogCQl9CiAJfSBlbHNlIHsKLQkJZGV2X3dhcm4oJmhhLT5wZGV2LT5kZXYsICJyZWdpb24gIzAgbm90IGEgUElPIHJlc291cmNlXG4iKTsKKwkJcWw0X3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAicmVnaW9uICMwIG5vdCBhIFBJTyByZXNvdXJjZVxuIik7CiAJCXBpbyA9IDA7CiAJfQogCkBAIC0xMjEzLDIwICsxNDg1LDIxIEBACiAJbW1pb19mbGFncyA9IHBjaV9yZXNvdXJjZV9mbGFncyhoYS0+cGRldiwgMSk7CiAKIAlpZiAoIShtbWlvX2ZsYWdzICYgSU9SRVNPVVJDRV9NRU0pKSB7Ci0JCWRldl9lcnIoJmhhLT5wZGV2LT5kZXYsCi0JCQkicmVnaW9uICMwIG5vdCBhbiBNTUlPIHJlc291cmNlLCBhYm9ydGluZ1xuIik7CisJCXFsNF9wcmludGsoS0VSTl9FUlIsIGhhLAorCQkgICAgInJlZ2lvbiAjMCBub3QgYW4gTU1JTyByZXNvdXJjZSwgYWJvcnRpbmdcbiIpOwogCiAJCWdvdG8gaW9zcGFjZV9lcnJvcl9leGl0OwogCX0KKwogCWlmIChtbWlvX2xlbiA8IE1JTl9JT0JBU0VfTEVOKSB7Ci0JCWRldl9lcnIoJmhhLT5wZGV2LT5kZXYsCi0JCQkiSW52YWxpZCBQQ0kgbWVtIHJlZ2lvbiBzaXplLCBhYm9ydGluZ1xuIik7CisJCXFsNF9wcmludGsoS0VSTl9FUlIsIGhhLAorCQkgICAgIkludmFsaWQgUENJIG1lbSByZWdpb24gc2l6ZSwgYWJvcnRpbmdcbiIpOwogCQlnb3RvIGlvc3BhY2VfZXJyb3JfZXhpdDsKIAl9CiAKIAlpZiAocGNpX3JlcXVlc3RfcmVnaW9ucyhoYS0+cGRldiwgRFJJVkVSX05BTUUpKSB7Ci0JCWRldl93YXJuKCZoYS0+cGRldi0+ZGV2LAotCQkJIkZhaWxlZCB0byByZXNlcnZlIFBJTy9NTUlPIHJlZ2lvbnNcbiIpOworCQlxbDRfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCSAgICAiRmFpbGVkIHRvIHJlc2VydmUgUElPL01NSU8gcmVnaW9uc1xuIik7CiAKIAkJZ290byBpb3NwYWNlX2Vycm9yX2V4aXQ7CiAJfQpAQCAtMTIzNSw4ICsxNTA4LDggQEAKIAloYS0+cGlvX2xlbmd0aCA9IHBpb19sZW47CiAJaGEtPnJlZyA9IGlvcmVtYXAobW1pbywgTUlOX0lPQkFTRV9MRU4pOwogCWlmICghaGEtPnJlZykgewotCQlkZXZfZXJyKCZoYS0+cGRldi0+ZGV2LAotCQkJImNhbm5vdCByZW1hcCBNTUlPLCBhYm9ydGluZ1xuIik7CisJCXFsNF9wcmludGsoS0VSTl9FUlIsIGhhLAorCQkgICAgImNhbm5vdCByZW1hcCBNTUlPLCBhYm9ydGluZ1xuIik7CiAKIAkJZ290byBpb3NwYWNlX2Vycm9yX2V4aXQ7CiAJfQpAQCAtMTI0Nyw2ICsxNTIwLDYwIEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgaXNwX29wZXJhdGlvbnMgcWxhNHh4eF9pc3Bfb3BzID0geworCS5pb3NwYWNlX2NvbmZpZyAgICAgICAgID0gcWxhNHh4eF9pb3NwYWNlX2NvbmZpZywKKwkucGNpX2NvbmZpZyAgICAgICAgICAgICA9IHFsYTR4eHhfcGNpX2NvbmZpZywKKwkuZGlzYWJsZV9pbnRycyAgICAgICAgICA9IHFsYTR4eHhfZGlzYWJsZV9pbnRycywKKwkuZW5hYmxlX2ludHJzICAgICAgICAgICA9IHFsYTR4eHhfZW5hYmxlX2ludHJzLAorCS5zdGFydF9maXJtd2FyZSAgICAgICAgID0gcWxhNHh4eF9zdGFydF9maXJtd2FyZSwKKwkuaW50cl9oYW5kbGVyICAgICAgICAgICA9IHFsYTR4eHhfaW50cl9oYW5kbGVyLAorCS5pbnRlcnJ1cHRfc2VydmljZV9yb3V0aW5lID0gcWxhNHh4eF9pbnRlcnJ1cHRfc2VydmljZV9yb3V0aW5lLAorCS5yZXNldF9jaGlwICAgICAgICAgICAgID0gcWxhNHh4eF9zb2Z0X3Jlc2V0LAorCS5yZXNldF9maXJtd2FyZSAgICAgICAgID0gcWxhNHh4eF9od19yZXNldCwKKwkucXVldWVfaW9jYiAgICAgICAgICAgICA9IHFsYTR4eHhfcXVldWVfaW9jYiwKKwkuY29tcGxldGVfaW9jYiAgICAgICAgICA9IHFsYTR4eHhfY29tcGxldGVfaW9jYiwKKwkucmRfc2hkd19yZXFfcV9vdXQgICAgICA9IHFsYTR4eHhfcmRfc2hkd19yZXFfcV9vdXQsCisJLnJkX3NoZHdfcnNwX3FfaW4gICAgICAgPSBxbGE0eHh4X3JkX3NoZHdfcnNwX3FfaW4sCisJLmdldF9zeXNfaW5mbyAgICAgICAgICAgPSBxbGE0eHh4X2dldF9zeXNfaW5mbywKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXNwX29wZXJhdGlvbnMgcWxhNF84eHh4X2lzcF9vcHMgPSB7CisJLmlvc3BhY2VfY29uZmlnICAgICAgICAgPSBxbGE0Xzh4eHhfaW9zcGFjZV9jb25maWcsCisJLnBjaV9jb25maWcgICAgICAgICAgICAgPSBxbGE0Xzh4eHhfcGNpX2NvbmZpZywKKwkuZGlzYWJsZV9pbnRycyAgICAgICAgICA9IHFsYTRfOHh4eF9kaXNhYmxlX2ludHJzLAorCS5lbmFibGVfaW50cnMgICAgICAgICAgID0gcWxhNF84eHh4X2VuYWJsZV9pbnRycywKKwkuc3RhcnRfZmlybXdhcmUgICAgICAgICA9IHFsYTRfOHh4eF9sb2FkX3Jpc2MsCisJLmludHJfaGFuZGxlciAgICAgICAgICAgPSBxbGE0Xzh4eHhfaW50cl9oYW5kbGVyLAorCS5pbnRlcnJ1cHRfc2VydmljZV9yb3V0aW5lID0gcWxhNF84eHh4X2ludGVycnVwdF9zZXJ2aWNlX3JvdXRpbmUsCisJLnJlc2V0X2NoaXAgICAgICAgICAgICAgPSBxbGE0Xzh4eHhfaXNwX3Jlc2V0LAorCS5yZXNldF9maXJtd2FyZSAgICAgICAgID0gcWxhNF84eHh4X3N0b3BfZmlybXdhcmUsCisJLnF1ZXVlX2lvY2IgICAgICAgICAgICAgPSBxbGE0Xzh4eHhfcXVldWVfaW9jYiwKKwkuY29tcGxldGVfaW9jYiAgICAgICAgICA9IHFsYTRfOHh4eF9jb21wbGV0ZV9pb2NiLAorCS5yZF9zaGR3X3JlcV9xX291dCAgICAgID0gcWxhNF84eHh4X3JkX3NoZHdfcmVxX3Ffb3V0LAorCS5yZF9zaGR3X3JzcF9xX2luICAgICAgID0gcWxhNF84eHh4X3JkX3NoZHdfcnNwX3FfaW4sCisJLmdldF9zeXNfaW5mbyAgICAgICAgICAgPSBxbGE0Xzh4eHhfZ2V0X3N5c19pbmZvLAorfTsKKwordWludDE2X3QgcWxhNHh4eF9yZF9zaGR3X3JlcV9xX291dChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCit7CisJcmV0dXJuICh1aW50MTZfdClsZTMyX3RvX2NwdShoYS0+c2hhZG93X3JlZ3MtPnJlcV9xX291dCk7Cit9CisKK3VpbnQxNl90IHFsYTRfOHh4eF9yZF9zaGR3X3JlcV9xX291dChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCit7CisJcmV0dXJuICh1aW50MTZfdClsZTMyX3RvX2NwdShyZWFkbCgmaGEtPnFsYTRfOHh4eF9yZWctPnJlcV9xX291dCkpOworfQorCit1aW50MTZfdCBxbGE0eHh4X3JkX3NoZHdfcnNwX3FfaW4oc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKQoreworCXJldHVybiAodWludDE2X3QpbGUzMl90b19jcHUoaGEtPnNoYWRvd19yZWdzLT5yc3BfcV9pbik7Cit9CisKK3VpbnQxNl90IHFsYTRfOHh4eF9yZF9zaGR3X3JzcF9xX2luKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK3sKKwlyZXR1cm4gKHVpbnQxNl90KWxlMzJfdG9fY3B1KHJlYWRsKCZoYS0+cWxhNF84eHh4X3JlZy0+cnNwX3FfaW4pKTsKK30KKwogLyoqCiAgKiBxbGE0eHh4X3Byb2JlX2FkYXB0ZXIgLSBjYWxsYmFjayBmdW5jdGlvbiB0byBwcm9iZSBIQkEKICAqIEBwZGV2OiBwb2ludGVyIHRvIHBjaV9kZXYgc3RydWN0dXJlCkBAIC0xMjY0LDYgKzE1OTEsNyBAQAogCXN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYTsKIAl1aW50OF90IGluaXRfcmV0cnlfY291bnQgPSAwOwogCWNoYXIgYnVmWzM0XTsKKwlzdHJ1Y3QgcWxhNF84eHh4X2xlZ2FjeV9pbnRyX3NldCAqbnhfbGVnYWN5X2ludHI7CiAKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCiAJCXJldHVybiAtMTsKQEAgLTEyODQsMTIgKzE2MTIsMzAgQEAKIAloYS0+aG9zdCA9IGhvc3Q7CiAJaGEtPmhvc3Rfbm8gPSBob3N0LT5ob3N0X25vOwogCi0JLyogQ29uZmlndXJlIFBDSSBJL08gc3BhY2UuICovCi0JcmV0ID0gcWxhNHh4eF9pb3NwYWNlX2NvbmZpZyhoYSk7Ci0JaWYgKHJldCkKLQkJZ290byBwcm9iZV9mYWlsZWQ7CisJLyogU2V0dXAgUnVudGltZSBjb25maWd1cmFibGUgb3B0aW9ucyAqLworCWlmIChpc19xbGE4MDIyKGhhKSkgeworCQloYS0+aXNwX29wcyA9ICZxbGE0Xzh4eHhfaXNwX29wczsKKwkJcndsb2NrX2luaXQoJmhhLT5od19sb2NrKTsKKwkJaGEtPnFkcl9zbl93aW5kb3cgPSAtMTsKKwkJaGEtPmRkcl9tbl93aW5kb3cgPSAtMTsKKwkJaGEtPmN1cnJfd2luZG93ID0gMjU1OworCQloYS0+ZnVuY19udW0gPSBQQ0lfRlVOQyhoYS0+cGRldi0+ZGV2Zm4pOworCQlueF9sZWdhY3lfaW50ciA9ICZsZWdhY3lfaW50cltoYS0+ZnVuY19udW1dOworCQloYS0+bnhfbGVnYWN5X2ludHIuaW50X3ZlY19iaXQgPSBueF9sZWdhY3lfaW50ci0+aW50X3ZlY19iaXQ7CisJCWhhLT5ueF9sZWdhY3lfaW50ci50Z3Rfc3RhdHVzX3JlZyA9CisJCQlueF9sZWdhY3lfaW50ci0+dGd0X3N0YXR1c19yZWc7CisJCWhhLT5ueF9sZWdhY3lfaW50ci50Z3RfbWFza19yZWcgPSBueF9sZWdhY3lfaW50ci0+dGd0X21hc2tfcmVnOworCQloYS0+bnhfbGVnYWN5X2ludHIucGNpX2ludF9yZWcgPSBueF9sZWdhY3lfaW50ci0+cGNpX2ludF9yZWc7CisJfSBlbHNlIHsKKwkJaGEtPmlzcF9vcHMgPSAmcWxhNHh4eF9pc3Bfb3BzOworCX0KIAotCWRldl9pbmZvKCZoYS0+cGRldi0+ZGV2LCAiRm91bmQgYW4gSVNQJTA0eCwgaXJxICVkLCBpb2Jhc2UgMHglcFxuIiwKKwkvKiBDb25maWd1cmUgUENJIEkvTyBzcGFjZS4gKi8KKwlyZXQgPSBoYS0+aXNwX29wcy0+aW9zcGFjZV9jb25maWcoaGEpOworCWlmIChyZXQpCisJCWdvdG8gcHJvYmVfZmFpbGVkX2lvY29uZmlnOworCisJcWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLCAiRm91bmQgYW4gSVNQJTA0eCwgaXJxICVkLCBpb2Jhc2UgMHglcFxuIiwKIAkJICAgcGRldi0+ZGV2aWNlLCBwZGV2LT5pcnEsIGhhLT5yZWcpOwogCiAJcWxhNHh4eF9jb25maWdfZG1hX2FkZHJlc3NpbmcoaGEpOwpAQCAtMTI5OSwzMiArMTY0NSw0MSBAQAogCUlOSVRfTElTVF9IRUFEKCZoYS0+ZnJlZV9zcmJfcSk7CiAKIAltdXRleF9pbml0KCZoYS0+bWJveF9zZW0pOworCWluaXRfY29tcGxldGlvbigmaGEtPm1ieF9pbnRyX2NvbXApOwogCiAJc3Bpbl9sb2NrX2luaXQoJmhhLT5oYXJkd2FyZV9sb2NrKTsKIAogCS8qIEFsbG9jYXRlIGRtYSBidWZmZXJzICovCiAJaWYgKHFsYTR4eHhfbWVtX2FsbG9jKGhhKSkgewotCQlkZXZfd2FybigmaGEtPnBkZXYtPmRldiwKLQkJCSAgICJbRVJST1JdIEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGFkYXB0ZXJcbiIpOworCQlxbDRfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCSAgICAiW0VSUk9SXSBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBhZGFwdGVyXG4iKTsKIAogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIHByb2JlX2ZhaWxlZDsKIAl9CiAKKwlpZiAoaXNfcWxhODAyMihoYSkpCisJCSh2b2lkKSBxbGE0Xzh4eHhfZ2V0X2ZsYXNoX2luZm8oaGEpOworCiAJLyoKIAkgKiBJbml0aWFsaXplIHRoZSBIb3N0IGFkYXB0ZXIgcmVxdWVzdC9yZXNwb25zZSBxdWV1ZXMgYW5kCiAJICogZmlybXdhcmUKIAkgKiBOT1RFOiBpbnRlcnJ1cHRzIGVuYWJsZWQgdXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24KIAkgKi8KIAlzdGF0dXMgPSBxbGE0eHh4X2luaXRpYWxpemVfYWRhcHRlcihoYSwgUkVCVUlMRF9EREJfTElTVCk7Ci0Jd2hpbGUgKHN0YXR1cyA9PSBRTEFfRVJST1IgJiYgaW5pdF9yZXRyeV9jb3VudCsrIDwgTUFYX0lOSVRfUkVUUklFUykgeworCXdoaWxlICgoIXRlc3RfYml0KEFGX09OTElORSwgJmhhLT5mbGFncykpICYmCisJICAgIGluaXRfcmV0cnlfY291bnQrKyA8IE1BWF9JTklUX1JFVFJJRVMpIHsKIAkJREVCVUcyKHByaW50aygic2NzaTogJXM6IHJldHJ5aW5nIGFkYXB0ZXIgaW5pdGlhbGl6YXRpb24gIgogCQkJICAgICAgIiglZClcbiIsIF9fZnVuY19fLCBpbml0X3JldHJ5X2NvdW50KSk7Ci0JCXFsYTR4eHhfc29mdF9yZXNldChoYSk7CisKKwkJaWYgKGhhLT5pc3Bfb3BzLT5yZXNldF9jaGlwKGhhKSA9PSBRTEFfRVJST1IpCisJCQljb250aW51ZTsKKwogCQlzdGF0dXMgPSBxbGE0eHh4X2luaXRpYWxpemVfYWRhcHRlcihoYSwgUkVCVUlMRF9EREJfTElTVCk7CiAJfQotCWlmIChzdGF0dXMgPT0gUUxBX0VSUk9SKSB7Ci0JCWRldl93YXJuKCZoYS0+cGRldi0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgYWRhcHRlclxuIik7CisKKwlpZiAoIXRlc3RfYml0KEFGX09OTElORSwgJmhhLT5mbGFncykpIHsKKwkJcWw0X3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAiRmFpbGVkIHRvIGluaXRpYWxpemUgYWRhcHRlclxuIik7CiAKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBwcm9iZV9mYWlsZWQ7CkBAIC0xMzQwLDggKzE2OTUsOSBAQAogCiAgICAgICAgIHJldCA9IHNjc2lfaW5pdF9zaGFyZWRfdGFnX21hcChob3N0LCBNQVhfU1JCUyk7CiAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICBkZXZfd2FybigmaGEtPnBkZXYtPmRldiwgInNjc2lfaW5pdF9zaGFyZWRfdGFnX21hcCBmYWlsZWRcbiIpOwotICAgICAgICAgICAgICAgIGdvdG8gcHJvYmVfZmFpbGVkOworCQlxbDRfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCSAgICAic2NzaV9pbml0X3NoYXJlZF90YWdfbWFwIGZhaWxlZFxuIik7CisJCWdvdG8gcHJvYmVfZmFpbGVkOwogICAgICAgICB9CiAKIAkvKiBTdGFydHVwIHRoZSBrZXJuZWwgdGhyZWFkIGZvciB0aGlzIGhvc3QgYWRhcHRlci4gKi8KQEAgLTEzNTAsMjQgKzE3MDYsMjcgQEAKIAlzcHJpbnRmKGJ1ZiwgInFsYTR4eHhfJWx1X2RwYyIsIGhhLT5ob3N0X25vKTsKIAloYS0+ZHBjX3RocmVhZCA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGJ1Zik7CiAJaWYgKCFoYS0+ZHBjX3RocmVhZCkgewotCQlkZXZfd2FybigmaGEtPnBkZXYtPmRldiwgIlVuYWJsZSB0byBzdGFydCBEUEMgdGhyZWFkIVxuIik7CisJCXFsNF9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgIlVuYWJsZSB0byBzdGFydCBEUEMgdGhyZWFkIVxuIik7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gcHJvYmVfZmFpbGVkOwogCX0KIAlJTklUX1dPUksoJmhhLT5kcGNfd29yaywgcWxhNHh4eF9kb19kcGMpOwogCi0JcmV0ID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBxbGE0eHh4X2ludHJfaGFuZGxlciwKLQkJCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELCAicWxhNHh4eCIsIGhhKTsKLQlpZiAocmV0KSB7Ci0JCWRldl93YXJuKCZoYS0+cGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlc2VydmUgaW50ZXJydXB0ICVkIgotCQkJIiBhbHJlYWR5IGluIHVzZS5cbiIsIHBkZXYtPmlycSk7Ci0JCWdvdG8gcHJvYmVfZmFpbGVkOworCS8qIEZvciBJU1AtODJYWCwgcmVxdWVzdF9pcnFzIGlzIGNhbGxlZCBpbiBxbGE0Xzh4eHhfbG9hZF9yaXNjCisJICogKHdoaWNoIGlzIGNhbGxlZCBpbmRpcmVjdGx5IGJ5IHFsYTR4eHhfaW5pdGlhbGl6ZV9hZGFwdGVyKSwKKwkgKiBzbyB0aGF0IGlycXMgd2lsbCBiZSByZWdpc3RlcmVkIGFmdGVyIGNyYmluaXQgYnV0IGJlZm9yZQorCSAqIG1ieF9pbnRyX2VuYWJsZS4KKwkgKi8KKwlpZiAoIWlzX3FsYTgwMjIoaGEpKSB7CisJCXJldCA9IHFsYTR4eHhfcmVxdWVzdF9pcnFzKGhhKTsKKwkJaWYgKHJldCkgeworCQkJcWw0X3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAiRmFpbGVkIHRvIHJlc2VydmUgIgorCQkJICAgICJpbnRlcnJ1cHQgJWQgYWxyZWFkeSBpbiB1c2UuXG4iLCBwZGV2LT5pcnEpOworCQkJZ290byBwcm9iZV9mYWlsZWQ7CisJCX0KIAl9Ci0Jc2V0X2JpdChBRl9JUlFfQVRUQUNIRUQsICZoYS0+ZmxhZ3MpOwotCWhvc3QtPmlycSA9IHBkZXYtPmlycTsKLQlERUJVRyhwcmludGsoInNjc2klZDogaXJxICVkIGF0dGFjaGVkXG4iLCBoYS0+aG9zdF9ubywgaGEtPnBkZXYtPmlycSkpOwogCi0JcWxhNHh4eF9lbmFibGVfaW50cnMoaGEpOworCWhhLT5pc3Bfb3BzLT5lbmFibGVfaW50cnMoaGEpOwogCiAJLyogU3RhcnQgdGltZXIgdGhyZWFkLiAqLwogCXFsYTR4eHhfc3RhcnRfdGltZXIoaGEsIHFsYTR4eHhfdGltZXIsIDEpOwpAQCAtMTM5MSw2ICsxNzUwLDggQEAKIAogcHJvYmVfZmFpbGVkOgogCXFsYTR4eHhfZnJlZV9hZGFwdGVyKGhhKTsKKworcHJvYmVfZmFpbGVkX2lvY29uZmlnOgogCXNjc2lfaG9zdF9wdXQoaGEtPmhvc3QpOwogCiBwcm9iZV9kaXNhYmxlX2RldmljZToKQEAgLTE0MDksMTAgKzE3NzAsNyBAQAogCiAJaGEgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKLQlxbGE0eHh4X2Rpc2FibGVfaW50cnMoaGEpOwotCi0Jd2hpbGUgKHRlc3RfYml0KERQQ19SRVNFVF9IQV9JTlRSLCAmaGEtPmRwY19mbGFncykpCi0JCXNzbGVlcCgxKTsKKwlzZXRfYml0KEFGX0hCQV9HT0lOR19BV0FZLCAmaGEtPmZsYWdzKTsKIAogCS8qIHJlbW92ZSBkZXZzIGZyb20gaXNjc2lfc2Vzc2lvbnMgdG8gc2NzaV9kZXZpY2VzICovCiAJcWxhNHh4eF9mcmVlX2RkYl9saXN0KGhhKTsKQEAgLTE0MjMsNiArMTc4MSw3IEBACiAKIAlzY3NpX2hvc3RfcHV0KGhhLT5ob3N0KTsKIAorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiB9CiAKQEAgLTE0NzksNyArMTgzOCw4IEBACiAgKgogICogVGhpcyByb3V0aW5lIHJlbW92ZXMgYW5kIHJldHVybnMgdGhlIHNyYiBhdCB0aGUgc3BlY2lmaWVkIGluZGV4CiAgKiovCi1zdHJ1Y3Qgc3JiICogcWxhNHh4eF9kZWxfZnJvbV9hY3RpdmVfYXJyYXkoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLCB1aW50MzJfdCBpbmRleCkKK3N0cnVjdCBzcmIgKnFsYTR4eHhfZGVsX2Zyb21fYWN0aXZlX2FycmF5KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwKKyAgICB1aW50MzJfdCBpbmRleCkKIHsKIAlzdHJ1Y3Qgc3JiICpzcmIgPSBOVUxMOwogCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IE5VTEw7CkBAIC0xNjA1LDcgKzE5NjUsNyBAQAogCWludCByZXQgPSBTVUNDRVNTOwogCWludCB3YWl0ID0gMDsKIAotCWRldl9pbmZvKCZoYS0+cGRldi0+ZGV2LAorCXFsNF9wcmludGsoS0VSTl9JTkZPLCBoYSwKIAkgICAgInNjc2klbGQ6JWQ6JWQ6IEFib3J0IGNvbW1hbmQgaXNzdWVkIGNtZD0lcCwgcGlkPSVsZFxuIiwKIAkgICAgaGEtPmhvc3Rfbm8sIGlkLCBsdW4sIGNtZCwgc2VyaWFsKTsKIApAQCAtMTYzNyw3ICsxOTk3LDcgQEAKIAkJfQogCX0KIAotCWRldl9pbmZvKCZoYS0+cGRldi0+ZGV2LAorCXFsNF9wcmludGsoS0VSTl9JTkZPLCBoYSwKIAkgICAgInNjc2klbGQ6JWQ6JWQ6IEFib3J0IGNvbW1hbmQgLSAlc1xuIiwKIAkgICAgaGEtPmhvc3Rfbm8sIGlkLCBsdW4sIChyZXQgPT0gU1VDQ0VTUykgPyAic3VjY2VkZWQiIDogImZhaWxlZCIpOwogCkBAIC0xNjYwLDcgKzIwMjAsMTIgQEAKIAlpZiAoIWRkYl9lbnRyeSkKIAkJcmV0dXJuIHJldDsKIAotCWRldl9pbmZvKCZoYS0+cGRldi0+ZGV2LAorCXJldCA9IGlzY3NpX2Jsb2NrX3Njc2lfZWgoY21kKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IEZBSUxFRDsKKworCXFsNF9wcmludGsoS0VSTl9JTkZPLCBoYSwKIAkJICAgInNjc2klbGQ6JWQ6JWQ6JWQ6IERFVklDRSBSRVNFVCBJU1NVRUQuXG4iLCBoYS0+aG9zdF9ubywKIAkJICAgY21kLT5kZXZpY2UtPmNoYW5uZWwsIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1bik7CiAKQEAgLTE2NzMsMTMgKzIwMzgsMTMgQEAKIAkvKiBGSVhNRTogd2FpdCBmb3IgaGJhIHRvIGdvIG9ubGluZSAqLwogCXN0YXQgPSBxbGE0eHh4X3Jlc2V0X2x1bihoYSwgZGRiX2VudHJ5LCBjbWQtPmRldmljZS0+bHVuKTsKIAlpZiAoc3RhdCAhPSBRTEFfU1VDQ0VTUykgewotCQlkZXZfaW5mbygmaGEtPnBkZXYtPmRldiwgIkRFVklDRSBSRVNFVCBGQUlMRUQuICVkXG4iLCBzdGF0KTsKKwkJcWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLCAiREVWSUNFIFJFU0VUIEZBSUxFRC4gJWRcbiIsIHN0YXQpOwogCQlnb3RvIGVoX2Rldl9yZXNldF9kb25lOwogCX0KIAogCWlmIChxbGE0eHh4X2VoX3dhaXRfZm9yX2NvbW1hbmRzKGhhLCBzY3NpX3RhcmdldChjbWQtPmRldmljZSksCiAJCQkJCSBjbWQtPmRldmljZSkpIHsKLQkJZGV2X2luZm8oJmhhLT5wZGV2LT5kZXYsCisJCXFsNF9wcmludGsoS0VSTl9JTkZPLCBoYSwKIAkJCSAgICJERVZJQ0UgUkVTRVQgRkFJTEVEIC0gd2FpdGluZyBmb3IgIgogCQkJICAgImNvbW1hbmRzLlxuIik7CiAJCWdvdG8gZWhfZGV2X3Jlc2V0X2RvbmU7CkBAIC0xNjkwLDcgKzIwNTUsNyBAQAogCQlNTV9MVU5fUkVTRVQpICE9IFFMQV9TVUNDRVNTKQogCQlnb3RvIGVoX2Rldl9yZXNldF9kb25lOwogCi0JZGV2X2luZm8oJmhhLT5wZGV2LT5kZXYsCisJcWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLAogCQkgICAic2NzaSglbGQ6JWQ6JWQ6JWQpOiBERVZJQ0UgUkVTRVQgU1VDQ0VFREVELlxuIiwKIAkJICAgaGEtPmhvc3Rfbm8sIGNtZC0+ZGV2aWNlLT5jaGFubmVsLCBjbWQtPmRldmljZS0+aWQsCiAJCSAgIGNtZC0+ZGV2aWNlLT5sdW4pOwpAQCAtMTcxMiwxMSArMjA3NywxNSBAQAogewogCXN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSA9IHRvX3FsYV9ob3N0KGNtZC0+ZGV2aWNlLT5ob3N0KTsKIAlzdHJ1Y3QgZGRiX2VudHJ5ICpkZGJfZW50cnkgPSBjbWQtPmRldmljZS0+aG9zdGRhdGE7Ci0JaW50IHN0YXQ7CisJaW50IHN0YXQsIHJldDsKIAogCWlmICghZGRiX2VudHJ5KQogCQlyZXR1cm4gRkFJTEVEOwogCisJcmV0ID0gaXNjc2lfYmxvY2tfc2NzaV9laChjbWQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAlzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sIHNjc2lfdGFyZ2V0KGNtZC0+ZGV2aWNlKSwKIAkJICAgICAgICJXQVJNIFRBUkdFVCBSRVNFVCBJU1NVRUQuXG4iKTsKIApAQCAtMTc2OSw3ICsyMTM4LDEzIEBACiAKIAloYSA9IChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqKSBjbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7CiAKLQlkZXZfaW5mbygmaGEtPnBkZXYtPmRldiwKKwlpZiAocWw0eGRvbnRyZXNldGhiYSkgeworCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiAlczogRG9uJ3QgUmVzZXQgSEJBXG4iLAorCQkgICAgIGhhLT5ob3N0X25vLCBfX2Z1bmNfXykpOworCQlyZXR1cm4gRkFJTEVEOworCX0KKworCXFsNF9wcmludGsoS0VSTl9JTkZPLCBoYSwKIAkJICAgInNjc2koJWxkOiVkOiVkOiVkKTogSE9TVCBSRVNFVCBJU1NVRUQuXG4iLCBoYS0+aG9zdF9ubywKIAkJICAgY21kLT5kZXZpY2UtPmNoYW5uZWwsIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1bik7CiAKQEAgLTE3ODEsMjAgKzIxNTYsMjIgQEAKIAkJcmV0dXJuIEZBSUxFRDsKIAl9CiAKLQkvKiBtYWtlIHN1cmUgdGhlIGRwYyB0aHJlYWQgaXMgc3RvcHBlZCB3aGlsZSB3ZSByZXNldCB0aGUgaGJhICovCi0JY2xlYXJfYml0KEFGX09OTElORSwgJmhhLT5mbGFncyk7Ci0JZmx1c2hfd29ya3F1ZXVlKGhhLT5kcGNfdGhyZWFkKTsKKwlpZiAoIXRlc3RfYml0KERQQ19SRVNFVF9IQSwgJmhhLT5kcGNfZmxhZ3MpKSB7CisJCWlmIChpc19xbGE4MDIyKGhhKSkKKwkJCXNldF9iaXQoRFBDX1JFU0VUX0hBX0ZXX0NPTlRFWFQsICZoYS0+ZHBjX2ZsYWdzKTsKKwkJZWxzZQorCQkJc2V0X2JpdChEUENfUkVTRVRfSEEsICZoYS0+ZHBjX2ZsYWdzKTsKKwl9CiAKLQlpZiAocWxhNHh4eF9yZWNvdmVyX2FkYXB0ZXIoaGEsIFBSRVNFUlZFX0REQl9MSVNUKSA9PSBRTEFfU1VDQ0VTUykKKwlpZiAocWxhNHh4eF9yZWNvdmVyX2FkYXB0ZXIoaGEpID09IFFMQV9TVUNDRVNTKQogCQlyZXR1cm5fc3RhdHVzID0gU1VDQ0VTUzsKIAotCWRldl9pbmZvKCZoYS0+cGRldi0+ZGV2LCAiSE9TVCBSRVNFVCAlcy5cbiIsCisJcWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLCAiSE9TVCBSRVNFVCAlcy5cbiIsCiAJCSAgIHJldHVybl9zdGF0dXMgPT0gRkFJTEVEID8gIkZBSUxFRCIgOiAiU1VDQ0VERUQiKTsKIAogCXJldHVybiByZXR1cm5fc3RhdHVzOwogfQogCi0KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBxbGE0eHh4X3BjaV90YmxbXSA9IHsKIAl7CiAJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9RTE9HSUMsCkBAIC0xODE0LDYgKzIxOTEsMTIgQEAKIAkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCiAJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAogCX0sCisJeworCQkudmVuZG9yICAgICAgICAgPSBQQ0lfVkVORE9SX0lEX1FMT0dJQywKKwkJLmRldmljZSAgICAgICAgID0gUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQODAyMiwKKwkJLnN1YnZlbmRvciAgICAgID0gUENJX0FOWV9JRCwKKwkJLnN1YmRldmljZSAgICAgID0gUENJX0FOWV9JRCwKKwl9LAogCXswLCAwfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcWxhNHh4eF9wY2lfdGJsKTsKQEAgLTE4NjksNyArMjI1Miw2IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBxbGE0eHh4X21vZHVsZV9leGl0KHZvaWQpCiB7Ci0JcWw0X21vZF91bmxvYWQgPSAxOwogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcWxhNHh4eF9wY2lfZHJpdmVyKTsKIAlpc2NzaV91bnJlZ2lzdGVyX3RyYW5zcG9ydCgmcWxhNHh4eF9pc2NzaV90cmFuc3BvcnQpOwogCWttZW1fY2FjaGVfZGVzdHJveShzcmJfY2FjaGVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF92ZXJzaW9uLmggYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfdmVyc2lvbi5oCmluZGV4IDI4YTZjNDkuLmM5MDVkYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF92ZXJzaW9uLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X3ZlcnNpb24uaApAQCAtNSw0ICs1LDQgQEAKICAqIFNlZSBMSUNFTlNFLnFsYTR4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KIAotI2RlZmluZSBRTEE0WFhYX0RSSVZFUl9WRVJTSU9OCSI1LjAyLjAwLWsxIgorI2RlZmluZSBRTEE0WFhYX0RSSVZFUl9WRVJTSU9OCSI1LjAyLjAwLWsyIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Fsb2dpY3B0aS5jIGIvZHJpdmVycy9zY3NpL3Fsb2dpY3B0aS5jCmluZGV4IGNhNWMxNWMuLjUzZDdlZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbG9naWNwdGkuYworKysgYi9kcml2ZXJzL3Njc2kvcWxvZ2ljcHRpLmMKQEAgLTcyOSw3ICs3MjksNyBAQAogewogCXN0cnVjdCBvZl9kZXZpY2UgKm9wID0gcXB0aS0+b3A7CiAKLQlxcHRpLT5xaG9zdC0+aXJxID0gcXB0aS0+aXJxID0gb3AtPmlycXNbMF07CisJcXB0aS0+cWhvc3QtPmlycSA9IHFwdGktPmlycSA9IG9wLT5hcmNoZGF0YS5pcnFzWzBdOwogCiAJLyogV2UgdXNlZCB0byB0cnkgdmFyaW91cyBvdmVybHktY2xldmVyIHRoaW5ncyB0bwogCSAqIHJlZHVjZSB0aGUgaW50ZXJydXB0IHByb2Nlc3Npbmcgb3ZlcmhlYWQgb24KQEAgLTEzMDIsNyArMTMwMiw3IEBACiAJLyogU29tZXRpbWVzIEFudGFyZXMgY2FyZHMgY29tZSB1cCBub3QgY29tcGxldGVseQogCSAqIHNldHVwLCBhbmQgd2UgZ2V0IGEgcmVwb3J0IG9mIGEgemVybyBJUlEuCiAJICovCi0JaWYgKG9wLT5pcnFzWzBdID09IDApCisJaWYgKG9wLT5hcmNoZGF0YS5pcnFzWzBdID09IDApCiAJCXJldHVybiAtRU5PREVWOwogCiAJaG9zdCA9IHNjc2lfaG9zdF9hbGxvYyh0cG50LCBzaXplb2Yoc3RydWN0IHFsb2dpY3B0aSkpOwpAQCAtMTQ2NywxMiArMTQ2NywxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBxcHRpX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gb2ZfcmVnaXN0ZXJfZHJpdmVyKCZxcHRpX3NidXNfZHJpdmVyLCAmb2ZfYnVzX3R5cGUpOworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnFwdGlfc2J1c19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcXB0aV9leGl0KHZvaWQpCiB7Ci0Jb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoJnFwdGlfc2J1c19kcml2ZXIpOworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZxcHRpX3NidXNfZHJpdmVyKTsKIH0KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJRbG9naWNJU1AgU0JVUyBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCmluZGV4IDEzNjMyOWIuLmIwMmJkYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYwpAQCAtMTk5MSw3ICsxOTkxLDggQEAKIAkJYmxvY2sgPSBsYmEgKyBhbGlnbm1lbnQ7CiAJCXJlbSA9IGRvX2RpdihibG9jaywgZ3JhbnVsYXJpdHkpOwogCi0JCXNldF9iaXQoYmxvY2ssIG1hcF9zdG9yZXApOworCQlpZiAoYmxvY2sgPCBtYXBfc2l6ZSkKKwkJCXNldF9iaXQoYmxvY2ssIG1hcF9zdG9yZXApOwogCiAJCWxiYSArPSBncmFudWxhcml0eSAtIHJlbTsKIAl9CkBAIC0yMDExLDcgKzIwMTIsOCBAQAogCQlibG9jayA9IGxiYSArIGFsaWdubWVudDsKIAkJcmVtID0gZG9fZGl2KGJsb2NrLCBncmFudWxhcml0eSk7CiAKLQkJaWYgKHJlbSA9PSAwICYmIGxiYSArIGdyYW51bGFyaXR5IDw9IGVuZCkKKwkJaWYgKHJlbSA9PSAwICYmIGxiYSArIGdyYW51bGFyaXR5IDw9IGVuZCAmJgorCQkgICAgYmxvY2sgPCBtYXBfc2l6ZSkKIAkJCWNsZWFyX2JpdChibG9jaywgbWFwX3N0b3JlcCk7CiAKIAkJbGJhICs9IGdyYW51bGFyaXR5IC0gcmVtOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKaW5kZXggYTVkNjMwZi4uMmJmOTg0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCkBAIC0zMDcsNiArMzA3LDE5IEBACiAJCSAgICAoc3NoZHIuYXNjID09IDB4MDQpICYmIChzc2hkci5hc2NxID09IDB4MDIpKQogCQkJcmV0dXJuIEZBSUxFRDsKIAorCQlpZiAoc3NoZHIuYXNjID09IDB4M2YgJiYgc3NoZHIuYXNjcSA9PSAweDBlKQorCQkJc2NtZF9wcmludGsoS0VSTl9XQVJOSU5HLCBzY21kLAorCQkJCSAgICAiV2FybmluZyEgUmVjZWl2ZWQgYW4gaW5kaWNhdGlvbiB0aGF0IHRoZSAiCisJCQkJICAgICJMVU4gYXNzaWdubWVudHMgb24gdGhpcyB0YXJnZXQgaGF2ZSAiCisJCQkJICAgICJjaGFuZ2VkLiBUaGUgTGludXggU0NTSSBsYXllciBkb2VzIG5vdCAiCisJCQkJICAgICJhdXRvbWF0aWNhbGx5IHJlbWFwIExVTiBhc3NpZ25tZW50cy5cbiIpOworCQllbHNlIGlmIChzc2hkci5hc2MgPT0gMHgzZikKKwkJCXNjbWRfcHJpbnRrKEtFUk5fV0FSTklORywgc2NtZCwKKwkJCQkgICAgIldhcm5pbmchIFJlY2VpdmVkIGFuIGluZGljYXRpb24gdGhhdCB0aGUgIgorCQkJCSAgICAib3BlcmF0aW5nIHBhcmFtZXRlcnMgb24gdGhpcyB0YXJnZXQgaGF2ZSAiCisJCQkJICAgICJjaGFuZ2VkLiBUaGUgTGludXggU0NTSSBsYXllciBkb2VzIG5vdCAiCisJCQkJICAgICJhdXRvbWF0aWNhbGx5IGFkanVzdCB0aGVzZSBwYXJhbWV0ZXJzLlxuIik7CisKIAkJaWYgKGJsa19iYXJyaWVyX3JxKHNjbWQtPnJlcXVlc3QpKQogCQkJLyoKIAkJCSAqIGJhcnJpZXIgcmVxdWVzdHMgc2hvdWxkIGFsd2F5cyByZXRyeSBvbiBVQQpAQCAtMTc2Miw2ICsxNzc1LDE0IEBACiAJCSAqIHdoYXQgd2UgbmVlZCB0byBkbyB0byBnZXQgaXQgdXAgYW5kIG9ubGluZSBhZ2FpbiAoaWYgd2UgY2FuKS4KIAkJICogSWYgd2UgZmFpbCwgd2UgZW5kIHVwIHRha2luZyB0aGUgdGhpbmcgb2ZmbGluZS4KIAkJICovCisJCWlmIChzY3NpX2F1dG9wbV9nZXRfaG9zdChzaG9zdCkgIT0gMCkgeworCQkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMSwKKwkJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGhhbmRsZXIgc2NzaV9laF8lZCAiCisJCQkJCQkidW5hYmxlIHRvIGF1dG9yZXN1bWVcbiIsCisJCQkJCQlzaG9zdC0+aG9zdF9ubykpOworCQkJY29udGludWU7CisJCX0KKwogCQlpZiAoc2hvc3QtPnRyYW5zcG9ydHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIpCiAJCQlzaG9zdC0+dHJhbnNwb3J0dC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcihzaG9zdCk7CiAJCWVsc2UKQEAgLTE3NzUsNiArMTc5Niw3IEBACiAJCSAqIHdoaWNoIGFyZSBzdGlsbCBvbmxpbmUuCiAJCSAqLwogCQlzY3NpX3Jlc3RhcnRfb3BlcmF0aW9ucyhzaG9zdCk7CisJCXNjc2lfYXV0b3BtX3B1dF9ob3N0KHNob3N0KTsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAl9CiAJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwpAQCAtMTg3MiwxMiArMTg5NCwxNiBAQAogaW50CiBzY3NpX3Jlc2V0X3Byb3ZpZGVyKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgZmxhZykKIHsKLQlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kID0gc2NzaV9nZXRfY29tbWFuZChkZXYsIEdGUF9LRVJORUwpOworCXN0cnVjdCBzY3NpX2NtbmQgKnNjbWQ7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBkZXYtPmhvc3Q7CiAJc3RydWN0IHJlcXVlc3QgcmVxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJ0bjsKIAorCWlmIChzY3NpX2F1dG9wbV9nZXRfaG9zdChzaG9zdCkgPCAwKQorCQlyZXR1cm4gRkFJTEVEOworCisJc2NtZCA9IHNjc2lfZ2V0X2NvbW1hbmQoZGV2LCBHRlBfS0VSTkVMKTsKIAlibGtfcnFfaW5pdChOVUxMLCAmcmVxKTsKIAlzY21kLT5yZXF1ZXN0ID0gJnJlcTsKIApAQCAtMTkzNCw2ICsxOTYwLDcgQEAKIAlzY3NpX3J1bl9ob3N0X3F1ZXVlcyhzaG9zdCk7CiAKIAlzY3NpX25leHRfY29tbWFuZChzY21kKTsKKwlzY3NpX2F1dG9wbV9wdXRfaG9zdChzaG9zdCk7CiAJcmV0dXJuIHJ0bjsKIH0KIEVYUE9SVF9TWU1CT0woc2NzaV9yZXNldF9wcm92aWRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9wbS5jIGIvZHJpdmVycy9zY3NpL3Njc2lfcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzBlOTFhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfcG0uYwpAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqCXNjc2lfcG0uYwlDb3B5cmlnaHQgKEMpIDIwMTAgQWxhbiBTdGVybgorICoKKyAqCVNDU0kgZHluYW1pYyBQb3dlciBNYW5hZ2VtZW50CisgKgkJSW5pdGlhbCB2ZXJzaW9uOiBBbGFuIFN0ZXJuIDxzdGVybkByb3dsYW5kLmhhcnZhcmQuZWR1PgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisKKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RyaXZlci5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisKKyNpbmNsdWRlICJzY3NpX3ByaXYuaCIKKworc3RhdGljIGludCBzY3NpX2Rldl90eXBlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQoreworCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnY7CisJaW50IGVycjsKKworCWVyciA9IHNjc2lfZGV2aWNlX3F1aWVzY2UodG9fc2NzaV9kZXZpY2UoZGV2KSk7CisJaWYgKGVyciA9PSAwKSB7CisJCWRydiA9IGRldi0+ZHJpdmVyOworCQlpZiAoZHJ2ICYmIGRydi0+c3VzcGVuZCkKKwkJCWVyciA9IGRydi0+c3VzcGVuZChkZXYsIG1zZyk7CisJfQorCWRldl9kYmcoZGV2LCAic2NzaSBzdXNwZW5kOiAlZFxuIiwgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHNjc2lfZGV2X3R5cGVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2OworCWludCBlcnIgPSAwOworCisJZHJ2ID0gZGV2LT5kcml2ZXI7CisJaWYgKGRydiAmJiBkcnYtPnJlc3VtZSkKKwkJZXJyID0gZHJ2LT5yZXN1bWUoZGV2KTsKKwlzY3NpX2RldmljZV9yZXN1bWUodG9fc2NzaV9kZXZpY2UoZGV2KSk7CisJZGV2X2RiZyhkZXYsICJzY3NpIHJlc3VtZTogJWRcbiIsIGVycik7CisJcmV0dXJuIGVycjsKK30KKworI2lmZGVmIENPTkZJR19QTV9TTEVFUAorCitzdGF0aWMgaW50IHNjc2lfYnVzX3N1c3BlbmRfY29tbW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1zZykKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmIChzY3NpX2lzX3NkZXZfZGV2aWNlKGRldikpCisJCWVyciA9IHNjc2lfZGV2X3R5cGVfc3VzcGVuZChkZXYsIG1zZyk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzY3NpX2J1c19yZXN1bWVfY29tbW9uKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmIChzY3NpX2lzX3NkZXZfZGV2aWNlKGRldikpCisJCWVyciA9IHNjc2lfZGV2X3R5cGVfcmVzdW1lKGRldik7CisKKwlpZiAoZXJyID09IDApIHsKKwkJcG1fcnVudGltZV9kaXNhYmxlKGRldik7CisJCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZShkZXYpOworCQlwbV9ydW50aW1lX2VuYWJsZShkZXYpOworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHNjc2lfYnVzX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBzY3NpX2J1c19zdXNwZW5kX2NvbW1vbihkZXYsIFBNU0dfU1VTUEVORCk7Cit9CisKK3N0YXRpYyBpbnQgc2NzaV9idXNfZnJlZXplKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gc2NzaV9idXNfc3VzcGVuZF9jb21tb24oZGV2LCBQTVNHX0ZSRUVaRSk7Cit9CisKK3N0YXRpYyBpbnQgc2NzaV9idXNfcG93ZXJvZmYoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBzY3NpX2J1c19zdXNwZW5kX2NvbW1vbihkZXYsIFBNU0dfSElCRVJOQVRFKTsKK30KKworI2Vsc2UgLyogQ09ORklHX1BNX1NMRUVQICovCisKKyNkZWZpbmUgc2NzaV9idXNfcmVzdW1lX2NvbW1vbgkJTlVMTAorI2RlZmluZSBzY3NpX2J1c19zdXNwZW5kCQlOVUxMCisjZGVmaW5lIHNjc2lfYnVzX2ZyZWV6ZQkJCU5VTEwKKyNkZWZpbmUgc2NzaV9idXNfcG93ZXJvZmYJCU5VTEwKKworI2VuZGlmIC8qIENPTkZJR19QTV9TTEVFUCAqLworCisjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKworc3RhdGljIGludCBzY3NpX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IGVyciA9IDA7CisKKwlkZXZfZGJnKGRldiwgInNjc2lfcnVudGltZV9zdXNwZW5kXG4iKTsKKwlpZiAoc2NzaV9pc19zZGV2X2RldmljZShkZXYpKSB7CisJCWVyciA9IHNjc2lfZGV2X3R5cGVfc3VzcGVuZChkZXYsIFBNU0dfQVVUT19TVVNQRU5EKTsKKwkJaWYgKGVyciA9PSAtRUFHQUlOKQorCQkJcG1fc2NoZWR1bGVfc3VzcGVuZChkZXYsIGppZmZpZXNfdG9fbXNlY3MoCisJCQkJcm91bmRfamlmZmllc191cF9yZWxhdGl2ZShIWi8xMCkpKTsKKwl9CisKKwkvKiBJbnNlcnQgaG9va3MgaGVyZSBmb3IgdGFyZ2V0cywgaG9zdHMsIGFuZCB0cmFuc3BvcnQgY2xhc3NlcyAqLworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzY3NpX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgZXJyID0gMDsKKworCWRldl9kYmcoZGV2LCAic2NzaV9ydW50aW1lX3Jlc3VtZVxuIik7CisJaWYgKHNjc2lfaXNfc2Rldl9kZXZpY2UoZGV2KSkKKwkJZXJyID0gc2NzaV9kZXZfdHlwZV9yZXN1bWUoZGV2KTsKKworCS8qIEluc2VydCBob29rcyBoZXJlIGZvciB0YXJnZXRzLCBob3N0cywgYW5kIHRyYW5zcG9ydCBjbGFzc2VzICovCisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHNjc2lfcnVudGltZV9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgZXJyOworCisJZGV2X2RiZyhkZXYsICJzY3NpX3J1bnRpbWVfaWRsZVxuIik7CisKKwkvKiBJbnNlcnQgaG9va3MgaGVyZSBmb3IgdGFyZ2V0cywgaG9zdHMsIGFuZCB0cmFuc3BvcnQgY2xhc3NlcyAqLworCisJaWYgKHNjc2lfaXNfc2Rldl9kZXZpY2UoZGV2KSkKKwkJZXJyID0gcG1fc2NoZWR1bGVfc3VzcGVuZChkZXYsIDEwMCk7CisJZWxzZQorCQllcnIgPSBwbV9ydW50aW1lX3N1c3BlbmQoZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgc2NzaV9hdXRvcG1fZ2V0X2RldmljZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJaW50CWVycjsKKworCWVyciA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKKwlpZiAoZXJyIDwgMCkKKwkJcG1fcnVudGltZV9wdXRfc3luYygmc2Rldi0+c2Rldl9nZW5kZXYpOworCWVsc2UgaWYgKGVyciA+IDApCisJCWVyciA9IDA7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNjc2lfYXV0b3BtX2dldF9kZXZpY2UpOworCit2b2lkIHNjc2lfYXV0b3BtX3B1dF9kZXZpY2Uoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNjc2lfYXV0b3BtX3B1dF9kZXZpY2UpOworCit2b2lkIHNjc2lfYXV0b3BtX2dldF90YXJnZXQoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KQoreworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnN0YXJnZXQtPmRldik7Cit9CisKK3ZvaWQgc2NzaV9hdXRvcG1fcHV0X3RhcmdldChzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpCit7CisJcG1fcnVudGltZV9wdXRfc3luYygmc3RhcmdldC0+ZGV2KTsKK30KKworaW50IHNjc2lfYXV0b3BtX2dldF9ob3N0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQoreworCWludAllcnI7CisKKwllcnIgPSBwbV9ydW50aW1lX2dldF9zeW5jKCZzaG9zdC0+c2hvc3RfZ2VuZGV2KTsKKwlpZiAoZXJyIDwgMCkKKwkJcG1fcnVudGltZV9wdXRfc3luYygmc2hvc3QtPnNob3N0X2dlbmRldik7CisJZWxzZSBpZiAoZXJyID4gMCkKKwkJZXJyID0gMDsKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIHNjc2lfYXV0b3BtX3B1dF9ob3N0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQoreworCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnNob3N0LT5zaG9zdF9nZW5kZXYpOworfQorCisjZWxzZQorCisjZGVmaW5lIHNjc2lfcnVudGltZV9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgc2NzaV9ydW50aW1lX3Jlc3VtZQlOVUxMCisjZGVmaW5lIHNjc2lfcnVudGltZV9pZGxlCU5VTEwKKworI2VuZGlmIC8qIENPTkZJR19QTV9SVU5USU1FICovCisKK2NvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHNjc2lfYnVzX3BtX29wcyA9IHsKKwkuc3VzcGVuZCA9CQlzY3NpX2J1c19zdXNwZW5kLAorCS5yZXN1bWUgPQkJc2NzaV9idXNfcmVzdW1lX2NvbW1vbiwKKwkuZnJlZXplID0JCXNjc2lfYnVzX2ZyZWV6ZSwKKwkudGhhdyA9CQkJc2NzaV9idXNfcmVzdW1lX2NvbW1vbiwKKwkucG93ZXJvZmYgPQkJc2NzaV9idXNfcG93ZXJvZmYsCisJLnJlc3RvcmUgPQkJc2NzaV9idXNfcmVzdW1lX2NvbW1vbiwKKwkucnVudGltZV9zdXNwZW5kID0Jc2NzaV9ydW50aW1lX3N1c3BlbmQsCisJLnJ1bnRpbWVfcmVzdW1lID0Jc2NzaV9ydW50aW1lX3Jlc3VtZSwKKwkucnVudGltZV9pZGxlID0JCXNjc2lfcnVudGltZV9pZGxlLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9zY3NpX3ByaXYuaAppbmRleCAxZmJmN2M3Li5iNDA1NmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9wcml2LmgKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfcHJpdi5oCkBAIC03LDYgKzcsNyBAQAogc3RydWN0IHJlcXVlc3Q7CiBzdHJ1Y3Qgc2NzaV9jbW5kOwogc3RydWN0IHNjc2lfZGV2aWNlOworc3RydWN0IHNjc2lfdGFyZ2V0Owogc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZTsKIHN0cnVjdCBTY3NpX0hvc3Q7CiBzdHJ1Y3Qgc2NzaV9ubF9oZHI7CkBAIC0xNDQsNiArMTQ1LDIyIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc2NzaV9uZXRsaW5rX2V4aXQodm9pZCkge30KICNlbmRpZgogCisvKiBzY3NpX3BtLmMgKi8KKyNpZmRlZiBDT05GSUdfUE1fT1BTCitleHRlcm4gY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgc2NzaV9idXNfcG1fb3BzOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKK2V4dGVybiB2b2lkIHNjc2lfYXV0b3BtX2dldF90YXJnZXQoc3RydWN0IHNjc2lfdGFyZ2V0ICopOworZXh0ZXJuIHZvaWQgc2NzaV9hdXRvcG1fcHV0X3RhcmdldChzdHJ1Y3Qgc2NzaV90YXJnZXQgKik7CitleHRlcm4gaW50IHNjc2lfYXV0b3BtX2dldF9ob3N0KHN0cnVjdCBTY3NpX0hvc3QgKik7CitleHRlcm4gdm9pZCBzY3NpX2F1dG9wbV9wdXRfaG9zdChzdHJ1Y3QgU2NzaV9Ib3N0ICopOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzY3NpX2F1dG9wbV9nZXRfdGFyZ2V0KHN0cnVjdCBzY3NpX3RhcmdldCAqdCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBzY3NpX2F1dG9wbV9wdXRfdGFyZ2V0KHN0cnVjdCBzY3NpX3RhcmdldCAqdCkge30KK3N0YXRpYyBpbmxpbmUgaW50IHNjc2lfYXV0b3BtX2dldF9ob3N0KHN0cnVjdCBTY3NpX0hvc3QgKmgpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzY3NpX2F1dG9wbV9wdXRfaG9zdChzdHJ1Y3QgU2NzaV9Ib3N0ICpoKSB7fQorI2VuZGlmIC8qIENPTkZJR19QTV9SVU5USU1FICovCisKIC8qIAogICogaW50ZXJuYWwgc2NzaSB0aW1lb3V0IGZ1bmN0aW9uczogZm9yIHVzZSBieSBtaWQtbGF5ZXIgYW5kIHRyYW5zcG9ydAogICogY2xhc3Nlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwppbmRleCAxYzAyN2E5Li4zZDBhMWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCkBAIC0xNTEzLDE0ICsxNTEzLDE4IEBACiAJc3RhcmdldCA9IHNjc2lfYWxsb2NfdGFyZ2V0KHBhcmVudCwgY2hhbm5lbCwgaWQpOwogCWlmICghc3RhcmdldCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJc2NzaV9hdXRvcG1fZ2V0X3RhcmdldChzdGFyZ2V0KTsKIAogCW11dGV4X2xvY2soJnNob3N0LT5zY2FuX211dGV4KTsKIAlpZiAoIXNob3N0LT5hc3luY19zY2FuKQogCQlzY3NpX2NvbXBsZXRlX2FzeW5jX3NjYW5zKCk7CiAKLQlpZiAoc2NzaV9ob3N0X3NjYW5fYWxsb3dlZChzaG9zdCkpCisJaWYgKHNjc2lfaG9zdF9zY2FuX2FsbG93ZWQoc2hvc3QpICYmIHNjc2lfYXV0b3BtX2dldF9ob3N0KHNob3N0KSA9PSAwKSB7CiAJCXNjc2lfcHJvYmVfYW5kX2FkZF9sdW4oc3RhcmdldCwgbHVuLCBOVUxMLCAmc2RldiwgMSwgaG9zdGRhdGEpOworCQlzY3NpX2F1dG9wbV9wdXRfaG9zdChzaG9zdCk7CisJfQogCW11dGV4X3VubG9jaygmc2hvc3QtPnNjYW5fbXV0ZXgpOworCXNjc2lfYXV0b3BtX3B1dF90YXJnZXQoc3RhcmdldCk7CiAJc2NzaV90YXJnZXRfcmVhcChzdGFyZ2V0KTsKIAlwdXRfZGV2aWNlKCZzdGFyZ2V0LT5kZXYpOwogCkBAIC0xNTc0LDYgKzE1NzgsNyBAQAogCXN0YXJnZXQgPSBzY3NpX2FsbG9jX3RhcmdldChwYXJlbnQsIGNoYW5uZWwsIGlkKTsKIAlpZiAoIXN0YXJnZXQpCiAJCXJldHVybjsKKwlzY3NpX2F1dG9wbV9nZXRfdGFyZ2V0KHN0YXJnZXQpOwogCiAJaWYgKGx1biAhPSBTQ0FOX1dJTERfQ0FSRCkgewogCQkvKgpAQCAtMTU5OSw2ICsxNjA0LDcgQEAKIAl9CiAKICBvdXRfcmVhcDoKKwlzY3NpX2F1dG9wbV9wdXRfdGFyZ2V0KHN0YXJnZXQpOwogCS8qIG5vdyBkZXRlcm1pbmUgaWYgdGhlIHRhcmdldCBoYXMgYW55IGNoaWxkcmVuIGF0IGFsbAogCSAqIGFuZCBpZiBub3QsIG51a2UgaXQgKi8KIAlzY3NpX3RhcmdldF9yZWFwKHN0YXJnZXQpOwpAQCAtMTYzMyw4ICsxNjM5LDEwIEBACiAJaWYgKCFzaG9zdC0+YXN5bmNfc2NhbikKIAkJc2NzaV9jb21wbGV0ZV9hc3luY19zY2FucygpOwogCi0JaWYgKHNjc2lfaG9zdF9zY2FuX2FsbG93ZWQoc2hvc3QpKQorCWlmIChzY3NpX2hvc3Rfc2Nhbl9hbGxvd2VkKHNob3N0KSAmJiBzY3NpX2F1dG9wbV9nZXRfaG9zdChzaG9zdCkgPT0gMCkgewogCQlfX3Njc2lfc2Nhbl90YXJnZXQocGFyZW50LCBjaGFubmVsLCBpZCwgbHVuLCByZXNjYW4pOworCQlzY3NpX2F1dG9wbV9wdXRfaG9zdChzaG9zdCk7CisJfQogCW11dGV4X3VubG9jaygmc2hvc3QtPnNjYW5fbXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTChzY3NpX3NjYW5fdGFyZ2V0KTsKQEAgLTE2ODYsNyArMTY5NCw3IEBACiAJaWYgKCFzaG9zdC0+YXN5bmNfc2NhbikKIAkJc2NzaV9jb21wbGV0ZV9hc3luY19zY2FucygpOwogCi0JaWYgKHNjc2lfaG9zdF9zY2FuX2FsbG93ZWQoc2hvc3QpKSB7CisJaWYgKHNjc2lfaG9zdF9zY2FuX2FsbG93ZWQoc2hvc3QpICYmIHNjc2lfYXV0b3BtX2dldF9ob3N0KHNob3N0KSA9PSAwKSB7CiAJCWlmIChjaGFubmVsID09IFNDQU5fV0lMRF9DQVJEKQogCQkJZm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCA8PSBzaG9zdC0+bWF4X2NoYW5uZWw7CiAJCQkgICAgIGNoYW5uZWwrKykKQEAgLTE2OTQsNiArMTcwMiw3IEBACiAJCQkJCQkgIHJlc2Nhbik7CiAJCWVsc2UKIAkJCXNjc2lfc2Nhbl9jaGFubmVsKHNob3N0LCBjaGFubmVsLCBpZCwgbHVuLCByZXNjYW4pOworCQlzY3NpX2F1dG9wbV9wdXRfaG9zdChzaG9zdCk7CiAJfQogCW11dGV4X3VubG9jaygmc2hvc3QtPnNjYW5fbXV0ZXgpOwogCkBAIC0xODMxLDggKzE4NDAsMTEgQEAKIHN0YXRpYyBpbnQgZG9fc2Nhbl9hc3luYyh2b2lkICpfZGF0YSkKIHsKIAlzdHJ1Y3QgYXN5bmNfc2Nhbl9kYXRhICpkYXRhID0gX2RhdGE7Ci0JZG9fc2NzaV9zY2FuX2hvc3QoZGF0YS0+c2hvc3QpOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGF0YS0+c2hvc3Q7CisKKwlkb19zY3NpX3NjYW5faG9zdChzaG9zdCk7CiAJc2NzaV9maW5pc2hfYXN5bmNfc2NhbihkYXRhKTsKKwlzY3NpX2F1dG9wbV9wdXRfaG9zdChzaG9zdCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4NDcsMTYgKzE4NTksMjAgQEAKIAogCWlmIChzdHJuY21wKHNjc2lfc2Nhbl90eXBlLCAibm9uZSIsIDQpID09IDApCiAJCXJldHVybjsKKwlpZiAoc2NzaV9hdXRvcG1fZ2V0X2hvc3Qoc2hvc3QpIDwgMCkKKwkJcmV0dXJuOwogCiAJZGF0YSA9IHNjc2lfcHJlcF9hc3luY19zY2FuKHNob3N0KTsKIAlpZiAoIWRhdGEpIHsKIAkJZG9fc2NzaV9zY2FuX2hvc3Qoc2hvc3QpOworCQlzY3NpX2F1dG9wbV9wdXRfaG9zdChzaG9zdCk7CiAJCXJldHVybjsKIAl9CiAKIAlwID0ga3RocmVhZF9ydW4oZG9fc2Nhbl9hc3luYywgZGF0YSwgInNjc2lfc2Nhbl8lZCIsIHNob3N0LT5ob3N0X25vKTsKIAlpZiAoSVNfRVJSKHApKQogCQlkb19zY2FuX2FzeW5jKGRhdGEpOworCS8qIHNjc2lfYXV0b3BtX3B1dF9ob3N0KHNob3N0KSBpcyBjYWxsZWQgaW4gZG9fc2Nhbl9hc3luYygpICovCiB9CiBFWFBPUlRfU1lNQk9MKHNjc2lfc2Nhbl9ob3N0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKaW5kZXggYzIzYWI5Ny4uYzNmNjczNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KIAogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KQEAgLTM3Niw1NyArMzc3LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2NzaV9idXNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICogZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0Jc3RydWN0IGRldmljZV9kcml2ZXIgKmRydjsKLQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7Ci0JaW50IGVycjsKLQotCWlmIChkZXYtPnR5cGUgIT0gJnNjc2lfZGV2X3R5cGUpCi0JCXJldHVybiAwOwotCi0JZHJ2ID0gZGV2LT5kcml2ZXI7Ci0Jc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7Ci0KLQllcnIgPSBzY3NpX2RldmljZV9xdWllc2NlKHNkZXYpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlpZiAoZHJ2ICYmIGRydi0+c3VzcGVuZCkgewotCQllcnIgPSBkcnYtPnN1c3BlbmQoZGV2LCBzdGF0ZSk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNjc2lfYnVzX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICogZGV2KQotewotCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnY7Ci0Jc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OwotCWludCBlcnIgPSAwOwotCi0JaWYgKGRldi0+dHlwZSAhPSAmc2NzaV9kZXZfdHlwZSkKLQkJcmV0dXJuIDA7Ci0KLQlkcnYgPSBkZXYtPmRyaXZlcjsKLQlzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsKLQotCWlmIChkcnYgJiYgZHJ2LT5yZXN1bWUpCi0JCWVyciA9IGRydi0+cmVzdW1lKGRldik7Ci0KLQlzY3NpX2RldmljZV9yZXN1bWUoc2Rldik7Ci0KLQlyZXR1cm4gZXJyOwotfQotCiBzdHJ1Y3QgYnVzX3R5cGUgc2NzaV9idXNfdHlwZSA9IHsKICAgICAgICAgLm5hbWUJCT0gInNjc2kiLAogICAgICAgICAubWF0Y2gJCT0gc2NzaV9idXNfbWF0Y2gsCiAJLnVldmVudAkJPSBzY3NpX2J1c191ZXZlbnQsCi0JLnN1c3BlbmQJPSBzY3NpX2J1c19zdXNwZW5kLAotCS5yZXN1bWUJCT0gc2NzaV9idXNfcmVzdW1lLAorI2lmZGVmIENPTkZJR19QTV9PUFMKKwkucG0JCT0gJnNjc2lfYnVzX3BtX29wcywKKyNlbmRpZgogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHNjc2lfYnVzX3R5cGUpOwogCkBAIC04NDgsOCArODA1LDYgQEAKIAlpZiAoc3RhcmdldC0+c3RhdGUgIT0gU1RBUkdFVF9DUkVBVEVEKQogCQlyZXR1cm4gMDsKIAotCWRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZCgmc3RhcmdldC0+ZGV2KTsKLQogCWVycm9yID0gZGV2aWNlX2FkZCgmc3RhcmdldC0+ZGV2KTsKIAlpZiAoZXJyb3IpIHsKIAkJZGV2X2Vycigmc3RhcmdldC0+ZGV2LCAidGFyZ2V0IGRldmljZV9hZGQgZmFpbGVkLCBlcnJvciAlZFxuIiwgZXJyb3IpOwpAQCAtODU4LDYgKzgxMywxMCBAQAogCXRyYW5zcG9ydF9hZGRfZGV2aWNlKCZzdGFyZ2V0LT5kZXYpOwogCXN0YXJnZXQtPnN0YXRlID0gU1RBUkdFVF9SVU5OSU5HOwogCisJcG1fcnVudGltZV9zZXRfYWN0aXZlKCZzdGFyZ2V0LT5kZXYpOworCXBtX3J1bnRpbWVfZW5hYmxlKCZzdGFyZ2V0LT5kZXYpOworCWRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZCgmc3RhcmdldC0+ZGV2KTsKKwogCXJldHVybiAwOwogfQogCkBAIC04ODcsNyArODQ2LDIwIEBACiAJCXJldHVybiBlcnJvcjsKIAogCXRyYW5zcG9ydF9jb25maWd1cmVfZGV2aWNlKCZzdGFyZ2V0LT5kZXYpOworCiAJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKCZzZGV2LT5zZGV2X2dlbmRldik7CisJc2NzaV9hdXRvcG1fZ2V0X3RhcmdldChzdGFyZ2V0KTsKKwlwbV9ydW50aW1lX3NldF9hY3RpdmUoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKKwlwbV9ydW50aW1lX2ZvcmJpZCgmc2Rldi0+c2Rldl9nZW5kZXYpOworCXBtX3J1bnRpbWVfZW5hYmxlKCZzZGV2LT5zZGV2X2dlbmRldik7CisJc2NzaV9hdXRvcG1fcHV0X3RhcmdldChzdGFyZ2V0KTsKKworCS8qIFRoZSBmb2xsb3dpbmcgY2FsbCB3aWxsIGtlZXAgc2RldiBhY3RpdmUgaW5kZWZpbml0ZWx5LCB1bnRpbAorCSAqIGl0cyBkcml2ZXIgZG9lcyBhIGNvcnJlc3BvbmRpbmcgc2NzaV9hdXRvcG1fcG1fZGV2aWNlKCkuICBPbmx5CisJICogZHJpdmVycyBzdXBwb3J0aW5nIGF1dG9zdXNwZW5kIHdpbGwgZG8gdGhpcy4KKwkgKi8KKwlzY3NpX2F1dG9wbV9nZXRfZGV2aWNlKHNkZXYpOworCiAJZXJyb3IgPSBkZXZpY2VfYWRkKCZzZGV2LT5zZGV2X2dlbmRldik7CiAJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImVycm9yIDFcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwppbmRleCAwNjgxMzc4Li5lZGI2YjM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwpAQCAtOTY1LDcgKzk2NSw3IEBACiAKIC8qCiAgKiBOb3RlOiBpbiB0aGUgdGFyZ2V0IHNob3cgZnVuY3Rpb24gd2UgcmVjb2duaXplIHdoZW4gdGhlIHJlbW90ZQotICogIHBvcnQgaXMgaW4gdGhlIGhlaXJhcmNoeSBhbmQgZG8gbm90IGFsbG93IHRoZSBkcml2ZXIgdG8gZ2V0CisgKiAgcG9ydCBpcyBpbiB0aGUgaGllcmFyY2h5IGFuZCBkbyBub3QgYWxsb3cgdGhlIGRyaXZlciB0byBnZXQKICAqICBpbnZvbHZlZCBpbiBzeXNmcyBmdW5jdGlvbnMuIFRoZSBkcml2ZXIgb25seSBnZXRzIGludm9sdmVkIGlmCiAgKiAgaXQncyB0aGUgIm9sZCIgc3R5bGUgdGhhdCBkb2Vzbid0IHVzZSBycG9ydHMuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKaW5kZXggMWU2ZDQ3OS4uZTg0MDI2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKQEAgLTMwLDggKzMwLDkgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0Lmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvaXNjc2lfaWYuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogCi0jZGVmaW5lIElTQ1NJX1NFU1NJT05fQVRUUlMgMjIKKyNkZWZpbmUgSVNDU0lfU0VTU0lPTl9BVFRSUyAyMwogI2RlZmluZSBJU0NTSV9DT05OX0FUVFJTIDEzCiAjZGVmaW5lIElTQ1NJX0hPU1RfQVRUUlMgNAogCkBAIC01MzQsNiArNTM1LDM3IEBACiAJYXRvbWljX2RlYygmaWhvc3QtPm5yX3NjYW5zKTsKIH0KIAorLyoqCisgKiBpc2NzaV9ibG9ja19zY3NpX2VoIC0gYmxvY2sgc2NzaSBlaCB1bnRpbCBzZXNzaW9uIHN0YXRlIGhhcyB0cmFuc2lzdGlvbmVkCisgKiBjbWQ6IHNjc2kgY21kIHBhc3NlZCB0byBzY3NpIGVoIGhhbmRsZXIKKyAqCisgKiBJZiB0aGUgc2Vzc2lvbiBpcyBkb3duIHRoaXMgZnVuY3Rpb24gd2lsbCB3YWl0IGZvciB0aGUgcmVjb3ZlcnkKKyAqIHRpbWVyIHRvIGZpcmUgb3IgZm9yIHRoZSBzZXNzaW9uIHRvIGJlIGxvZ2dlZCBiYWNrIGluLiBJZiB0aGUKKyAqIHJlY292ZXJ5IHRpbWVyIGZpcmVzIHRoZW4gRkFTVF9JT19GQUlMIGlzIHJldHVybmVkLiBUaGUgY2FsbGVyCisgKiBzaG91bGQgcGFzcyB0aGlzIGVycm9yIHZhbHVlIHRvIHRoZSBzY3NpIGVoLgorICovCitpbnQgaXNjc2lfYmxvY2tfc2NzaV9laChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCit7CisJc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uID0KKwkJCXN0YXJnZXRfdG9fc2Vzc2lvbihzY3NpX3RhcmdldChjbWQtPmRldmljZSkpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2Vzc2lvbi0+bG9jaywgZmxhZ3MpOworCXdoaWxlIChzZXNzaW9uLT5zdGF0ZSAhPSBJU0NTSV9TRVNTSU9OX0xPR0dFRF9JTikgeworCQlpZiAoc2Vzc2lvbi0+c3RhdGUgPT0gSVNDU0lfU0VTU0lPTl9GUkVFKSB7CisJCQlyZXQgPSBGQVNUX0lPX0ZBSUw7CisJCQlicmVhazsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZXNzaW9uLT5sb2NrLCBmbGFncyk7CisJCW1zbGVlcCgxMDAwKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnNlc3Npb24tPmxvY2ssIGZsYWdzKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Vzc2lvbi0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9ibG9ja19zY3NpX2VoKTsKKwogc3RhdGljIHZvaWQgc2Vzc2lvbl9yZWNvdmVyeV90aW1lZG91dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uID0KQEAgLTE3NjMsNyArMTc5NSw4IEBACiBpc2NzaV9zZXNzaW9uX2F0dHIobHVfcmVzZXRfdG1vLCBJU0NTSV9QQVJBTV9MVV9SRVNFVF9UTU8sIDApOwogaXNjc2lfc2Vzc2lvbl9hdHRyKHRndF9yZXNldF90bW8sIElTQ1NJX1BBUkFNX1RHVF9SRVNFVF9UTU8sIDApOwogaXNjc2lfc2Vzc2lvbl9hdHRyKGlmYWNlbmFtZSwgSVNDU0lfUEFSQU1fSUZBQ0VfTkFNRSwgMCk7Ci1pc2NzaV9zZXNzaW9uX2F0dHIoaW5pdGlhdG9ybmFtZSwgSVNDU0lfUEFSQU1fSU5JVElBVE9SX05BTUUsIDApCitpc2NzaV9zZXNzaW9uX2F0dHIoaW5pdGlhdG9ybmFtZSwgSVNDU0lfUEFSQU1fSU5JVElBVE9SX05BTUUsIDApOworaXNjc2lfc2Vzc2lvbl9hdHRyKHRhcmdldGFsaWFzLCBJU0NTSV9QQVJBTV9UQVJHRVRfQUxJQVMsIDApOwogCiBzdGF0aWMgc3NpemVfdAogc2hvd19wcml2X3Nlc3Npb25fc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTE3ODIsMTQgKzE4MTUsNDIgQEAKIHsJCQkJCQkJCQlcCiAJc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uID0gCQkJCVwKIAkJCWlzY3NpX2Rldl90b19zZXNzaW9uKGRldi0+cGFyZW50KTsJCVwKKwlpZiAoc2Vzc2lvbi0+ZmllbGQgPT0gLTEpCQkJCQlcCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIm9mZlxuIik7CQkJCVwKIAlyZXR1cm4gc3ByaW50ZihidWYsIGZvcm1hdCJcbiIsIHNlc3Npb24tPmZpZWxkKTsJCVwKIH0KIAotI2RlZmluZSBpc2NzaV9wcml2X3Nlc3Npb25fYXR0cihmaWVsZCwgZm9ybWF0KQkJCQlcCisjZGVmaW5lIGlzY3NpX3ByaXZfc2Vzc2lvbl9hdHRyX3N0b3JlKGZpZWxkKQkJCQlcCitzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAorc3RvcmVfcHJpdl9zZXNzaW9uXyMjZmllbGQoc3RydWN0IGRldmljZSAqZGV2LAkJCQlcCisJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJCVwKKwkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQkJXAorewkJCQkJCQkJCVwKKwlpbnQgdmFsOwkJCQkJCQlcCisJY2hhciAqY3A7CQkJCQkJCVwKKwlzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKnNlc3Npb24gPQkJCQlcCisJCWlzY3NpX2Rldl90b19zZXNzaW9uKGRldi0+cGFyZW50KTsJCQlcCisJaWYgKChzZXNzaW9uLT5zdGF0ZSA9PSBJU0NTSV9TRVNTSU9OX0ZSRUUpIHx8CQkJXAorCSAgICAoc2Vzc2lvbi0+c3RhdGUgPT0gSVNDU0lfU0VTU0lPTl9GQUlMRUQpKQkJCVwKKwkJcmV0dXJuIC1FQlVTWTsJCQkJCQlcCisJaWYgKHN0cm5jbXAoYnVmLCAib2ZmIiwgMykgPT0gMCkJCQkJXAorCQlzZXNzaW9uLT5maWVsZCA9IC0xOwkJCQkJXAorCWVsc2UgewkJCQkJCQkJXAorCQl2YWwgPSBzaW1wbGVfc3RydG91bChidWYsICZjcCwgMCk7CQkJXAorCQlpZiAoKmNwICE9ICdcMCcgJiYgKmNwICE9ICdcbicpCQkJCVwKKwkJCXJldHVybiAtRUlOVkFMOwkJCQkJXAorCQlzZXNzaW9uLT5maWVsZCA9IHZhbDsJCQkJCVwKKwl9CQkJCQkJCQlcCisJcmV0dXJuIGNvdW50OwkJCQkJCQlcCit9CisKKyNkZWZpbmUgaXNjc2lfcHJpdl9zZXNzaW9uX3J3X2F0dHIoZmllbGQsIGZvcm1hdCkJCQlcCiAJaXNjc2lfcHJpdl9zZXNzaW9uX2F0dHJfc2hvdyhmaWVsZCwgZm9ybWF0KQkJCVwKLXN0YXRpYyBJU0NTSV9DTEFTU19BVFRSKHByaXZfc2VzcywgZmllbGQsIFNfSVJVR08sIHNob3dfcHJpdl9zZXNzaW9uXyMjZmllbGQsIFwKLQkJCU5VTEwpCi1pc2NzaV9wcml2X3Nlc3Npb25fYXR0cihyZWNvdmVyeV90bW8sICIlZCIpOworCWlzY3NpX3ByaXZfc2Vzc2lvbl9hdHRyX3N0b3JlKGZpZWxkKQkJCQlcCitzdGF0aWMgSVNDU0lfQ0xBU1NfQVRUUihwcml2X3Nlc3MsIGZpZWxkLCBTX0lSVUdPIHwgU19JV1VHTywJCVwKKwkJCXNob3dfcHJpdl9zZXNzaW9uXyMjZmllbGQsCQkJXAorCQkJc3RvcmVfcHJpdl9zZXNzaW9uXyMjZmllbGQpCitpc2NzaV9wcml2X3Nlc3Npb25fcndfYXR0cihyZWNvdmVyeV90bW8sICIlZCIpOwogCiAvKgogICogaVNDU0kgaG9zdCBhdHRycwpAQCAtMTgyMCw2ICsxODgxLDExIEBACiAJY291bnQrKzsJCQkJCQkJXAogfSB3aGlsZSAoMCkKIAorI2RlZmluZSBTRVRVUF9QUklWX1NFU1NJT05fUldfQVRUUihmaWVsZCkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlwcml2LT5zZXNzaW9uX2F0dHJzW2NvdW50XSA9ICZkZXZfYXR0cl9wcml2X3Nlc3NfIyNmaWVsZDsJXAorCWNvdW50Kys7CQkJCQkJCVwKK30gd2hpbGUgKDApCiAKICNkZWZpbmUgU0VUVVBfU0VTU0lPTl9SRF9BVFRSKGZpZWxkLCBwYXJhbV9mbGFnKQkJCVwKIGRvIHsJCQkJCQkJCQlcCkBAIC0yMDA2LDcgKzIwNzIsOCBAQAogCVNFVFVQX1NFU1NJT05fUkRfQVRUUih0Z3RfcmVzZXRfdG1vLElTQ1NJX1RHVF9SRVNFVF9UTU8pOwogCVNFVFVQX1NFU1NJT05fUkRfQVRUUihpZmFjZW5hbWUsIElTQ1NJX0lGQUNFX05BTUUpOwogCVNFVFVQX1NFU1NJT05fUkRfQVRUUihpbml0aWF0b3JuYW1lLCBJU0NTSV9JTklUSUFUT1JfTkFNRSk7Ci0JU0VUVVBfUFJJVl9TRVNTSU9OX1JEX0FUVFIocmVjb3ZlcnlfdG1vKTsKKwlTRVRVUF9TRVNTSU9OX1JEX0FUVFIodGFyZ2V0YWxpYXMsIElTQ1NJX1RBUkdFVF9BTElBUyk7CisJU0VUVVBfUFJJVl9TRVNTSU9OX1JXX0FUVFIocmVjb3ZlcnlfdG1vKTsKIAlTRVRVUF9QUklWX1NFU1NJT05fUkRfQVRUUihzdGF0ZSk7CiAKIAlCVUdfT04oY291bnQgPiBJU0NTSV9TRVNTSU9OX0FUVFJTKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZC5jIGIvZHJpdmVycy9zY3NpL3NkLmMKaW5kZXggODgwMmU0OC4uY2M4YTFkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NkLmMKKysrIGIvZHJpdmVycy9zY3NpL3NkLmMKQEAgLTc1OSw2ICs3NTksMTAgQEAKIAogCXNkZXYgPSBzZGtwLT5kZXZpY2U7CiAKKwlyZXR2YWwgPSBzY3NpX2F1dG9wbV9nZXRfZGV2aWNlKHNkZXYpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3JfYXV0b3BtOworCiAJLyoKIAkgKiBJZiB0aGUgZGV2aWNlIGlzIGluIGVycm9yIHJlY292ZXJ5LCB3YWl0IHVudGlsIGl0IGlzIGRvbmUuCiAJICogSWYgdGhlIGRldmljZSBpcyBvZmZsaW5lLCB0aGVuIGRpc2FsbG93IGFueSBhY2Nlc3MgdG8gaXQuCkBAIC04MDMsNiArODA3LDggQEAKIAlyZXR1cm4gMDsKIAogZXJyb3Jfb3V0OgorCXNjc2lfYXV0b3BtX3B1dF9kZXZpY2Uoc2Rldik7CitlcnJvcl9hdXRvcG06CiAJc2NzaV9kaXNrX3B1dChzZGtwKTsKIAlyZXR1cm4gcmV0dmFsOwkKIH0KQEAgLTgzNCw2ICs4NDAsOCBAQAogCSAqIFhYWCBhbmQgd2hhdCBpZiB0aGVyZSBhcmUgcGFja2V0cyBpbiBmbGlnaHQgYW5kIHRoaXMgY2xvc2UoKQogCSAqIFhYWCBpcyBmb2xsb3dlZCBieSBhICJybW1vZCBzZF9tb2QiPwogCSAqLworCisJc2NzaV9hdXRvcG1fcHV0X2RldmljZShzZGV2KTsKIAlzY3NpX2Rpc2tfcHV0KHNka3ApOwogCXJldHVybiAwOwogfQpAQCAtMjIzMiw3ICsyMjQwLDYgQEAKIAlpZiAoc2RwLT5yZW1vdmFibGUpCiAJCWdkLT5mbGFncyB8PSBHRU5IRF9GTF9SRU1PVkFCTEU7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBzZGtwKTsKIAlhZGRfZGlzayhnZCk7CiAJc2RfZGlmX2NvbmZpZ19ob3N0KHNka3ApOwogCkBAIC0yMjQwLDYgKzIyNDcsNyBAQAogCiAJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLCAiQXR0YWNoZWQgU0NTSSAlc2Rpc2tcbiIsCiAJCSAgc2RwLT5yZW1vdmFibGUgPyAicmVtb3ZhYmxlICIgOiAiIik7CisJc2NzaV9hdXRvcG1fcHV0X2RldmljZShzZHApOwogCXB1dF9kZXZpY2UoJnNka3AtPmRldik7CiB9CiAKQEAgLTIzMTcsMTQgKzIzMjUsMTUgQEAKIAl9CiAKIAlkZXZpY2VfaW5pdGlhbGl6ZSgmc2RrcC0+ZGV2KTsKLQlzZGtwLT5kZXYucGFyZW50ID0gJnNkcC0+c2Rldl9nZW5kZXY7CisJc2RrcC0+ZGV2LnBhcmVudCA9IGRldjsKIAlzZGtwLT5kZXYuY2xhc3MgPSAmc2RfZGlza19jbGFzczsKLQlkZXZfc2V0X25hbWUoJnNka3AtPmRldiwgZGV2X25hbWUoJnNkcC0+c2Rldl9nZW5kZXYpKTsKKwlkZXZfc2V0X25hbWUoJnNka3AtPmRldiwgZGV2X25hbWUoZGV2KSk7CiAKIAlpZiAoZGV2aWNlX2FkZCgmc2RrcC0+ZGV2KSkKIAkJZ290byBvdXRfZnJlZV9pbmRleDsKIAotCWdldF9kZXZpY2UoJnNkcC0+c2Rldl9nZW5kZXYpOworCWdldF9kZXZpY2UoZGV2KTsKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBzZGtwKTsKIAogCWdldF9kZXZpY2UoJnNka3AtPmRldik7CS8qIHByZXZlbnQgcmVsZWFzZSBiZWZvcmUgYXN5bmNfc2NoZWR1bGUgKi8KIAlhc3luY19zY2hlZHVsZShzZF9wcm9iZV9hc3luYywgc2RrcCk7CkBAIC0yMzU4LDggKzIzNjcsMTAgQEAKIHsKIAlzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwOwogCi0JYXN5bmNfc3luY2hyb25pemVfZnVsbCgpOwogCXNka3AgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzY3NpX2F1dG9wbV9nZXRfZGV2aWNlKHNka3AtPmRldmljZSk7CisKKwlhc3luY19zeW5jaHJvbml6ZV9mdWxsKCk7CiAJYmxrX3F1ZXVlX3ByZXBfcnEoc2RrcC0+ZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlLCBzY3NpX3ByZXBfZm4pOwogCWRldmljZV9kZWwoJnNka3AtPmRldik7CiAJZGVsX2dlbmRpc2soc2RrcC0+ZGlzayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2cuYyBiL2RyaXZlcnMvc2NzaS9zZy5jCmluZGV4IGVmNzUyYjIuLjI5NjhjNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZy5jCkBAIC0yNDUsNiArMjQ1LDEwIEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBzZ19wdXQ7CiAKKwlyZXR2YWwgPSBzY3NpX2F1dG9wbV9nZXRfZGV2aWNlKHNkcC0+ZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIHNkcF9wdXQ7CisKIAlpZiAoISgoZmxhZ3MgJiBPX05PTkJMT0NLKSB8fAogCSAgICAgIHNjc2lfYmxvY2tfd2hlbl9wcm9jZXNzaW5nX2Vycm9ycyhzZHAtPmRldmljZSkpKSB7CiAJCXJldHZhbCA9IC1FTlhJTzsKQEAgLTMwMiw4ICszMDYsMTEgQEAKIAl9CiAJcmV0dmFsID0gMDsKIGVycm9yX291dDoKLQlpZiAocmV0dmFsKQorCWlmIChyZXR2YWwpIHsKKwkJc2NzaV9hdXRvcG1fcHV0X2RldmljZShzZHAtPmRldmljZSk7CitzZHBfcHV0OgogCQlzY3NpX2RldmljZV9wdXQoc2RwLT5kZXZpY2UpOworCX0KIHNnX3B1dDoKIAlpZiAoc2RwKQogCQlzZ19wdXRfZGV2KHNkcCk7CkBAIC0zMjcsNiArMzM0LDcgQEAKIAlzZHAtPmV4Y2x1ZGUgPSAwOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc2RwLT5vX2V4Y2xfd2FpdCk7CiAKKwlzY3NpX2F1dG9wbV9wdXRfZGV2aWNlKHNkcC0+ZGV2aWNlKTsKIAlrcmVmX3B1dCgmc2ZwLT5mX3JlZiwgc2dfcmVtb3ZlX3NmcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC03MjksNiArNzM3LDggQEAKIAkJcmV0dXJuIGs7CS8qIHByb2JhYmx5IG91dCBvZiBzcGFjZSAtLT4gRU5PTUVNICovCiAJfQogCWlmIChzZHAtPmRldGFjaGVkKSB7CisJCWlmIChzcnAtPmJpbykKKwkJCWJsa19lbmRfcmVxdWVzdF9hbGwoc3JwLT5ycSwgLUVJTyk7CiAJCXNnX2ZpbmlzaF9yZW1fcmVxKHNycCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdW5fZXNwLmMgYi9kcml2ZXJzL3Njc2kvc3VuX2VzcC5jCmluZGV4IDM4NmRkOWQuLjg5YmE2ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdW5fZXNwLmMKKysrIGIvZHJpdmVycy9zY3NpL3N1bl9lc3AuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGVzcC0+aG9zdDsKIAlzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCA9IGVzcC0+ZGV2OwogCi0JaG9zdC0+aXJxID0gb3AtPmlycXNbMF07CisJaG9zdC0+aXJxID0gb3AtPmFyY2hkYXRhLmlycXNbMF07CiAJcmV0dXJuIHJlcXVlc3RfaXJxKGhvc3QtPmlycSwgc2NzaV9lc3BfaW50ciwgSVJRRl9TSEFSRUQsICJFU1AiLCBlc3ApOwogfQogCkBAIC02NDQsMTIgKzY0NCwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzdW5lc3BfaW5pdCh2b2lkKQogewotCXJldHVybiBvZl9yZWdpc3Rlcl9kcml2ZXIoJmVzcF9zYnVzX2RyaXZlciwgJm9mX2J1c190eXBlKTsKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZlc3Bfc2J1c19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc3VuZXNwX2V4aXQodm9pZCkKIHsKLQlvZl91bnJlZ2lzdGVyX2RyaXZlcigmZXNwX3NidXNfZHJpdmVyKTsKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZXNwX3NidXNfZHJpdmVyKTsKIH0KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTdW4gRVNQIFNDU0kgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC82ODM2MHNlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvNjgzNjBzZXJpYWwuYwppbmRleCAyNDY2MWNkLi43Njg2MTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC82ODM2MHNlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzY4MzYwc2VyaWFsLmMKQEAgLTI2NDksNyArMjY0OSw3IEBACiAJCQkJc3VwLT50ZmNyID0gU01DX0VCOwogCiAJCQkJLyogU2V0IHRoaXMgdG8gMSBmb3Igbm93LCBzbyB3ZSBnZXQgc2luZ2xlCi0JCQkJICogY2hhcmFjdGVyIGludGVycnVwdHMuICBVc2luZyBpZGxlIGNoYXJhdGVyCisJCQkJICogY2hhcmFjdGVyIGludGVycnVwdHMuICBVc2luZyBpZGxlIGNoYXJhY3RlcgogCQkJCSAqIHRpbWUgcmVxdWlyZXMgc29tZSBhZGRpdGlvbmFsIHR1bmluZy4KIAkJCQkgKi8KIAkJCQlzdXAtPm1yYmxyID0gMTsKQEAgLTI3MjgsNyArMjcyOCw3IEBACiAJCQkJdXAtPnRmY3IgPSBTTUNfRUI7CiAKIAkJCQkvKiBTZXQgdGhpcyB0byAxIGZvciBub3csIHNvIHdlIGdldCBzaW5nbGUKLQkJCQkgKiBjaGFyYWN0ZXIgaW50ZXJydXB0cy4gIFVzaW5nIGlkbGUgY2hhcmF0ZXIKKwkJCQkgKiBjaGFyYWN0ZXIgaW50ZXJydXB0cy4gIFVzaW5nIGlkbGUgY2hhcmFjdGVyCiAJCQkJICogdGltZSByZXF1aXJlcyBzb21lIGFkZGl0aW9uYWwgdHVuaW5nLgogCQkJCSAqLwogCQkJCXVwLT5tcmJsciA9IDE7CkBAIC0yODg2LDcgKzI4ODYsNyBAQAogCQlzdXAtPnRmY3IgPSBTTUNfRUI7CiAKIAkJLyogU2V0IHRoaXMgdG8gMSBmb3Igbm93LCBzbyB3ZSBnZXQgc2luZ2xlCi0JCSAqIGNoYXJhY3RlciBpbnRlcnJ1cHRzLiAgVXNpbmcgaWRsZSBjaGFyYXRlcgorCQkgKiBjaGFyYWN0ZXIgaW50ZXJydXB0cy4gIFVzaW5nIGlkbGUgY2hhcmFjdGVyCiAJCSAqIHRpbWUgcmVxdWlyZXMgc29tZSBhZGRpdGlvbmFsIHR1bmluZy4KIAkJICovCiAJCXN1cC0+bXJibHIgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MC5jIGIvZHJpdmVycy9zZXJpYWwvODI1MC5jCmluZGV4IDg5MWUxZGQuLjA5ZWY1NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKQEAgLTMwMiw3ICszMDIsNyBAQAogCX0sCiB9OwogCi0jaWYgZGVmaW5lZCAoQ09ORklHX1NFUklBTF84MjUwX0FVMVgwMCkKKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTX0FMQ0hFTVkpCiAKIC8qIEF1MXgwMCBVQVJUIGhhcmR3YXJlIGhhcyBhIHdlaXJkIHJlZ2lzdGVyIGxheW91dCAqLwogc3RhdGljIGNvbnN0IHU4IGF1X2lvX2luX21hcFtdID0gewpAQCAtNDIyLDcgKzQyMiw2IEBACiAJcmV0dXJuIHJlYWRsKHAtPm1lbWJhc2UgKyBvZmZzZXQpOwogfQogCi0jaWZkZWYgQ09ORklHX1NFUklBTF84MjUwX0FVMVgwMAogc3RhdGljIHVuc2lnbmVkIGludCBhdV9zZXJpYWxfaW4oc3RydWN0IHVhcnRfcG9ydCAqcCwgaW50IG9mZnNldCkKIHsKIAlvZmZzZXQgPSBtYXBfODI1MF9pbl9yZWcocCwgb2Zmc2V0KSA8PCBwLT5yZWdzaGlmdDsKQEAgLTQzNCw3ICs0MzMsNiBAQAogCW9mZnNldCA9IG1hcF84MjUwX291dF9yZWcocCwgb2Zmc2V0KSA8PCBwLT5yZWdzaGlmdDsKIAlfX3Jhd193cml0ZWwodmFsdWUsIHAtPm1lbWJhc2UgKyBvZmZzZXQpOwogfQotI2VuZGlmCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHNpX3NlcmlhbF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwLCBpbnQgb2Zmc2V0KQogewpAQCAtNTAzLDEyICs1MDEsMTEgQEAKIAkJcC0+c2VyaWFsX291dCA9IG1lbTMyX3NlcmlhbF9vdXQ7CiAJCWJyZWFrOwogCi0jaWZkZWYgQ09ORklHX1NFUklBTF84MjUwX0FVMVgwMAogCWNhc2UgVVBJT19BVToKIAkJcC0+c2VyaWFsX2luID0gYXVfc2VyaWFsX2luOwogCQlwLT5zZXJpYWxfb3V0ID0gYXVfc2VyaWFsX291dDsKIAkJYnJlYWs7Ci0jZW5kaWYKKwogCWNhc2UgVVBJT19UU0k6CiAJCXAtPnNlcmlhbF9pbiA9IHRzaV9zZXJpYWxfaW47CiAJCXAtPnNlcmlhbF9vdXQgPSB0c2lfc2VyaWFsX291dDsKQEAgLTUzNSw5ICs1MzIsNyBAQAogCXN3aXRjaCAocC0+aW90eXBlKSB7CiAJY2FzZSBVUElPX01FTToKIAljYXNlIFVQSU9fTUVNMzI6Ci0jaWZkZWYgQ09ORklHX1NFUklBTF84MjUwX0FVMVgwMAogCWNhc2UgVVBJT19BVToKLSNlbmRpZgogCWNhc2UgVVBJT19EV0FQQjoKIAkJcC0+c2VyaWFsX291dChwLCBvZmZzZXQsIHZhbHVlKTsKIAkJcC0+c2VyaWFsX2luKHAsIFVBUlRfTENSKTsJLyogc2FmZSwgbm8gc2lkZS1lZmZlY3RzICovCkBAIC01NzMsNyArNTY4LDcgQEAKIAlzZXJpYWxfb3V0cCh1cCwgVUFSVF9ETE0sIHZhbHVlID4+IDggJiAweGZmKTsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF84MjUwX0FVMVgwMCkKKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTX0FMQ0hFTVkpCiAvKiBBdTF4MDAgaGF2ZW4ndCBnb3QgYSBzdGFuZGFyZCBkaXZpc29yIGxhdGNoICovCiBzdGF0aWMgaW50IHNlcmlhbF9kbF9yZWFkKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXApCiB7CkBAIC0yNTk2LDExICsyNTkxLDkgQEAKIAlpZiAoZmxhZ3MgJiBVQVJUX0NPTkZJR19UWVBFKQogCQlhdXRvY29uZmlnKHVwLCBwcm9iZWZsYWdzKTsKIAotI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9BVTFYMDAKIAkvKiBpZiBhY2Nlc3MgbWV0aG9kIGlzIEFVLCBpdCBpcyBhIDE2NTUwIHdpdGggYSBxdWlyayAqLwogCWlmICh1cC0+cG9ydC50eXBlID09IFBPUlRfMTY1NTBBICYmIHVwLT5wb3J0LmlvdHlwZSA9PSBVUElPX0FVKQogCQl1cC0+YnVncyB8PSBVQVJUX0JVR19OT01TUjsKLSNlbmRpZgogCiAJaWYgKHVwLT5wb3J0LnR5cGUgIT0gUE9SVF9VTktOT1dOICYmIGZsYWdzICYgVUFSVF9DT05GSUdfSVJRKQogCQlhdXRvY29uZmlnX2lycSh1cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy9zZXJpYWwvS2NvbmZpZwppbmRleCA4YjIzMTY1Li5lNDM3Y2U4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKQEAgLTI1OCwxNCArMjU4LDYgQEAKIAkgIHN5c3RlbSwgc2F5IFkgdG8gdGhpcyBvcHRpb24uICBUaGUgZHJpdmVyIGNhbiBoYW5kbGUgMSwgMiwgb3IgMyBwb3J0CiAJICBjYXJkcy4gIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBTRVJJQUxfODI1MF9BVTFYMDAKLQlib29sICJBdTF4MDAgc2VyaWFsIHBvcnQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNFUklBTF84MjUwICE9IG4gJiYgU09DX0FVMVgwMAotCWhlbHAKLQkgIElmIHlvdSBoYXZlIGFuIEF1MXgwMCBTT0MgYmFzZWQgYm9hcmQgYW5kIHdhbnQgdG8gdXNlIHRoZSBzZXJpYWwgcG9ydCwKLQkgIHNheSBZIHRvIHRoaXMgb3B0aW9uLiBUaGUgZHJpdmVyIGNhbiBoYW5kbGUgdXAgdG8gNCBzZXJpYWwgcG9ydHMsCi0JICBkZXBlbmRpbmcgb24gdGhlIFNPQy4gSWYgdW5zdXJlLCBzYXkgTi4KLQogY29uZmlnIFNFUklBTF84MjUwX1JNOUsKIAlib29sICJTdXBwb3J0IGZvciBNSVBTIFJNOXh4eCBpbnRlZ3JhdGVkIHNlcmlhbCBwb3J0IgogCWRlcGVuZHMgb24gU0VSSUFMXzgyNTAgIT0gbiAmJiBTRVJJQUxfUk05MDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDEwLmMgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDEwLmMKaW5kZXggYjA5YTYzOC4uNTA0NDFmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTAuYwpAQCAtNzgyLDcgKzc4Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYW1iYV9pZCBwbDAxMF9pZHNbXSBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBhbWJhX2lkIHBsMDEwX2lkc1tdID0gewogCXsKIAkJLmlkCT0gMHgwMDA0MTAxMCwKIAkJLm1hc2sJPSAweDAwMGZmZmZmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jCmluZGV4IGViNGNiNDguLjZjYTdhNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYworKysgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMKQEAgLTY5LDkgKzY5LDEyIEBACiBzdHJ1Y3QgdWFydF9hbWJhX3BvcnQgewogCXN0cnVjdCB1YXJ0X3BvcnQJcG9ydDsKIAlzdHJ1Y3QgY2xrCQkqY2xrOwotCXVuc2lnbmVkIGludAkJaW07CS8qIGludGVycnVwdCBtYXNrICovCisJdW5zaWduZWQgaW50CQlpbTsJCS8qIGludGVycnVwdCBtYXNrICovCiAJdW5zaWduZWQgaW50CQlvbGRfc3RhdHVzOwotCXVuc2lnbmVkIGludAkJaWZsczsJLyogdmVuZG9yLXNwZWNpZmljICovCisJdW5zaWduZWQgaW50CQlpZmxzOwkJLyogdmVuZG9yLXNwZWNpZmljICovCisJdW5zaWduZWQgaW50CQlsY3JoX3R4OwkvKiB2ZW5kb3Itc3BlY2lmaWMgKi8KKwl1bnNpZ25lZCBpbnQJCWxjcmhfcng7CS8qIHZlbmRvci1zcGVjaWZpYyAqLworCWJvb2wJCQlvdmVyc2FtcGxpbmc7ICAgLyogdmVuZG9yLXNwZWNpZmljICovCiAJYm9vbAkJCWF1dG9ydHM7CiB9OwogCkBAIC03OSwxNiArODIsMjUgQEAKIHN0cnVjdCB2ZW5kb3JfZGF0YSB7CiAJdW5zaWduZWQgaW50CQlpZmxzOwogCXVuc2lnbmVkIGludAkJZmlmb3NpemU7CisJdW5zaWduZWQgaW50CQlsY3JoX3R4OworCXVuc2lnbmVkIGludAkJbGNyaF9yeDsKKwlib29sCQkJb3ZlcnNhbXBsaW5nOwogfTsKIAogc3RhdGljIHN0cnVjdCB2ZW5kb3JfZGF0YSB2ZW5kb3JfYXJtID0gewogCS5pZmxzCQkJPSBVQVJUMDExX0lGTFNfUlg0Xzh8VUFSVDAxMV9JRkxTX1RYNF84LAogCS5maWZvc2l6ZQkJPSAxNiwKKwkubGNyaF90eAkJPSBVQVJUMDExX0xDUkgsCisJLmxjcmhfcngJCT0gVUFSVDAxMV9MQ1JILAorCS5vdmVyc2FtcGxpbmcJCT0gZmFsc2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IHZlbmRvcl9kYXRhIHZlbmRvcl9zdCA9IHsKIAkuaWZscwkJCT0gVUFSVDAxMV9JRkxTX1JYX0hBTEZ8VUFSVDAxMV9JRkxTX1RYX0hBTEYsCiAJLmZpZm9zaXplCQk9IDY0LAorCS5sY3JoX3R4CQk9IFNUX1VBUlQwMTFfTENSSF9UWCwKKwkubGNyaF9yeAkJPSBTVF9VQVJUMDExX0xDUkhfUlgsCisJLm92ZXJzYW1wbGluZwkJPSB0cnVlLAogfTsKIAogc3RhdGljIHZvaWQgcGwwMTFfc3RvcF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQpAQCAtMzI3LDEyICszMzksMTIgQEAKIAl1bnNpZ25lZCBpbnQgbGNyX2g7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdWFwLT5wb3J0LmxvY2ssIGZsYWdzKTsKLQlsY3JfaCA9IHJlYWR3KHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxMV9MQ1JIKTsKKwlsY3JfaCA9IHJlYWR3KHVhcC0+cG9ydC5tZW1iYXNlICsgdWFwLT5sY3JoX3R4KTsKIAlpZiAoYnJlYWtfc3RhdGUgPT0gLTEpCiAJCWxjcl9oIHw9IFVBUlQwMXhfTENSSF9CUks7CiAJZWxzZQogCQlsY3JfaCAmPSB+VUFSVDAxeF9MQ1JIX0JSSzsKLQl3cml0ZXcobGNyX2gsIHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxMV9MQ1JIKTsKKwl3cml0ZXcobGNyX2gsIHVhcC0+cG9ydC5tZW1iYXNlICsgdWFwLT5sY3JoX3R4KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1YXAtPnBvcnQubG9jaywgZmxhZ3MpOwogfQogCkBAIC0zOTMsNyArNDA1LDE3IEBACiAJd3JpdGV3KGNyLCB1YXAtPnBvcnQubWVtYmFzZSArIFVBUlQwMTFfQ1IpOwogCXdyaXRldygwLCB1YXAtPnBvcnQubWVtYmFzZSArIFVBUlQwMTFfRkJSRCk7CiAJd3JpdGV3KDEsIHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxMV9JQlJEKTsKLQl3cml0ZXcoMCwgdWFwLT5wb3J0Lm1lbWJhc2UgKyBVQVJUMDExX0xDUkgpOworCXdyaXRldygwLCB1YXAtPnBvcnQubWVtYmFzZSArIHVhcC0+bGNyaF9yeCk7CisJaWYgKHVhcC0+bGNyaF90eCAhPSB1YXAtPmxjcmhfcngpIHsKKwkJaW50IGk7CisJCS8qCisJCSAqIFdhaXQgMTAgUENMS3MgYmVmb3JlIHdyaXRpbmcgTENSSF9UWCByZWdpc3RlciwKKwkJICogdG8gZ2V0IHRoaXMgZGVsYXkgd3JpdGUgcmVhZCBvbmx5IHJlZ2lzdGVyIDEwIHRpbWVzCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgMTA7ICsraSkKKwkJCXdyaXRldygweGZmLCB1YXAtPnBvcnQubWVtYmFzZSArIFVBUlQwMTFfTUlTKTsKKwkJd3JpdGV3KDAsIHVhcC0+cG9ydC5tZW1iYXNlICsgdWFwLT5sY3JoX3R4KTsKKwl9CiAJd3JpdGV3KDAsIHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxeF9EUik7CiAJd2hpbGUgKHJlYWR3KHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxeF9GUikgJiBVQVJUMDF4X0ZSX0JVU1kpCiAJCWJhcnJpZXIoKTsKQEAgLTQyMiwxMCArNDQ0LDE5IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorc3RhdGljIHZvaWQgcGwwMTFfc2h1dGRvd25fY2hhbm5lbChzdHJ1Y3QgdWFydF9hbWJhX3BvcnQgKnVhcCwKKwkJCQkJdW5zaWduZWQgaW50IGxjcmgpCit7CisgICAgICB1bnNpZ25lZCBsb25nIHZhbDsKKworICAgICAgdmFsID0gcmVhZHcodWFwLT5wb3J0Lm1lbWJhc2UgKyBsY3JoKTsKKyAgICAgIHZhbCAmPSB+KFVBUlQwMXhfTENSSF9CUksgfCBVQVJUMDF4X0xDUkhfRkVOKTsKKyAgICAgIHdyaXRldyh2YWwsIHVhcC0+cG9ydC5tZW1iYXNlICsgbGNyaCk7Cit9CisKIHN0YXRpYyB2b2lkIHBsMDExX3NodXRkb3duKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHVhcnRfYW1iYV9wb3J0ICp1YXAgPSAoc3RydWN0IHVhcnRfYW1iYV9wb3J0ICopcG9ydDsKLQl1bnNpZ25lZCBsb25nIHZhbDsKIAogCS8qCiAJICogZGlzYWJsZSBhbGwgaW50ZXJydXB0cwpAQCAtNDUwLDkgKzQ4MSw5IEBACiAJLyoKIAkgKiBkaXNhYmxlIGJyZWFrIGNvbmRpdGlvbiBhbmQgZmlmb3MKIAkgKi8KLQl2YWwgPSByZWFkdyh1YXAtPnBvcnQubWVtYmFzZSArIFVBUlQwMTFfTENSSCk7Ci0JdmFsICY9IH4oVUFSVDAxeF9MQ1JIX0JSSyB8IFVBUlQwMXhfTENSSF9GRU4pOwotCXdyaXRldyh2YWwsIHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxMV9MQ1JIKTsKKwlwbDAxMV9zaHV0ZG93bl9jaGFubmVsKHVhcCwgdWFwLT5sY3JoX3J4KTsKKwlpZiAodWFwLT5sY3JoX3J4ICE9IHVhcC0+bGNyaF90eCkKKwkJcGwwMTFfc2h1dGRvd25fY2hhbm5lbCh1YXAsIHVhcC0+bGNyaF90eCk7CiAKIAkvKgogCSAqIFNodXQgZG93biB0aGUgY2xvY2sgcHJvZHVjZXIKQEAgLTQ3Miw4ICs1MDMsMTMgQEAKIAkvKgogCSAqIEFzayB0aGUgY29yZSB0byBjYWxjdWxhdGUgdGhlIGRpdmlzb3IgZm9yIHVzLgogCSAqLwotCWJhdWQgPSB1YXJ0X2dldF9iYXVkX3JhdGUocG9ydCwgdGVybWlvcywgb2xkLCAwLCBwb3J0LT51YXJ0Y2xrLzE2KTsKLQlxdW90ID0gcG9ydC0+dWFydGNsayAqIDQgLyBiYXVkOworCWJhdWQgPSB1YXJ0X2dldF9iYXVkX3JhdGUocG9ydCwgdGVybWlvcywgb2xkLCAwLAorCQkJCSAgcG9ydC0+dWFydGNsay8odWFwLT5vdmVyc2FtcGxpbmcgPyA4IDogMTYpKTsKKworCWlmIChiYXVkID4gcG9ydC0+dWFydGNsay8xNikKKwkJcXVvdCA9IERJVl9ST1VORF9DTE9TRVNUKHBvcnQtPnVhcnRjbGsgKiA4LCBiYXVkKTsKKwllbHNlCisJCXF1b3QgPSBESVZfUk9VTkRfQ0xPU0VTVChwb3J0LT51YXJ0Y2xrICogNCwgYmF1ZCk7CiAKIAlzd2l0Y2ggKHRlcm1pb3MtPmNfY2ZsYWcgJiBDU0laRSkgewogCWNhc2UgQ1M1OgpAQCAtNTUyLDYgKzU4OCwxMyBAQAogCQl1YXAtPmF1dG9ydHMgPSBmYWxzZTsKIAl9CiAKKwlpZiAodWFwLT5vdmVyc2FtcGxpbmcpIHsKKwkJaWYgKGJhdWQgPiBwb3J0LT51YXJ0Y2xrLzE2KQorCQkJb2xkX2NyIHw9IFNUX1VBUlQwMTFfQ1JfT1ZTRkFDVDsKKwkJZWxzZQorCQkJb2xkX2NyICY9IH5TVF9VQVJUMDExX0NSX09WU0ZBQ1Q7CisJfQorCiAJLyogU2V0IGJhdWQgcmF0ZSAqLwogCXdyaXRldyhxdW90ICYgMHgzZiwgcG9ydC0+bWVtYmFzZSArIFVBUlQwMTFfRkJSRCk7CiAJd3JpdGV3KHF1b3QgPj4gNiwgcG9ydC0+bWVtYmFzZSArIFVBUlQwMTFfSUJSRCk7CkBAIC01NjEsNyArNjA0LDE3IEBACiAJICogTk9URTogTVVTVCBCRSBXUklUVEVOIEFGVEVSIFVBUlRMQ1JfTSAmIFVBUlRMQ1JfTAogCSAqIC0tLS0tLS0tLS1eLS0tLS0tLS0tLV4tLS0tLS0tLS0tXi0tLS0tLS0tLS1eLS0tLS0KIAkgKi8KLQl3cml0ZXcobGNyX2gsIHBvcnQtPm1lbWJhc2UgKyBVQVJUMDExX0xDUkgpOworCXdyaXRldyhsY3JfaCwgcG9ydC0+bWVtYmFzZSArIHVhcC0+bGNyaF9yeCk7CisJaWYgKHVhcC0+bGNyaF9yeCAhPSB1YXAtPmxjcmhfdHgpIHsKKwkJaW50IGk7CisJCS8qCisJCSAqIFdhaXQgMTAgUENMS3MgYmVmb3JlIHdyaXRpbmcgTENSSF9UWCByZWdpc3RlciwKKwkJICogdG8gZ2V0IHRoaXMgZGVsYXkgd3JpdGUgcmVhZCBvbmx5IHJlZ2lzdGVyIDEwIHRpbWVzCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgMTA7ICsraSkKKwkJCXdyaXRldygweGZmLCB1YXAtPnBvcnQubWVtYmFzZSArIFVBUlQwMTFfTUlTKTsKKwkJd3JpdGV3KGxjcl9oLCBwb3J0LT5tZW1iYXNlICsgdWFwLT5sY3JoX3R4KTsKKwl9CiAJd3JpdGV3KG9sZF9jciwgcG9ydC0+bWVtYmFzZSArIFVBUlQwMTFfQ1IpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwpAQCAtNjg4LDcgKzc0MSw3IEBACiAJaWYgKHJlYWR3KHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxMV9DUikgJiBVQVJUMDF4X0NSX1VBUlRFTikgewogCQl1bnNpZ25lZCBpbnQgbGNyX2gsIGlicmQsIGZicmQ7CiAKLQkJbGNyX2ggPSByZWFkdyh1YXAtPnBvcnQubWVtYmFzZSArIFVBUlQwMTFfTENSSCk7CisJCWxjcl9oID0gcmVhZHcodWFwLT5wb3J0Lm1lbWJhc2UgKyB1YXAtPmxjcmhfdHgpOwogCiAJCSpwYXJpdHkgPSAnbic7CiAJCWlmIChsY3JfaCAmIFVBUlQwMXhfTENSSF9QRU4pIHsKQEAgLTcwNyw2ICs3NjAsMTIgQEAKIAkJZmJyZCA9IHJlYWR3KHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxMV9GQlJEKTsKIAogCQkqYmF1ZCA9IHVhcC0+cG9ydC51YXJ0Y2xrICogNCAvICg2NCAqIGlicmQgKyBmYnJkKTsKKworCQlpZiAodWFwLT5vdmVyc2FtcGxpbmcpIHsKKwkJCWlmIChyZWFkdyh1YXAtPnBvcnQubWVtYmFzZSArIFVBUlQwMTFfQ1IpCisJCQkJICAmIFNUX1VBUlQwMTFfQ1JfT1ZTRkFDVCkKKwkJCQkqYmF1ZCAqPSAyOworCQl9CiAJfQogfQogCkBAIC04MDAsNiArODU5LDkgQEAKIAl9CiAKIAl1YXAtPmlmbHMgPSB2ZW5kb3ItPmlmbHM7CisJdWFwLT5sY3JoX3J4ID0gdmVuZG9yLT5sY3JoX3J4OworCXVhcC0+bGNyaF90eCA9IHZlbmRvci0+bGNyaF90eDsKKwl1YXAtPm92ZXJzYW1wbGluZyA9IHZlbmRvci0+b3ZlcnNhbXBsaW5nOwogCXVhcC0+cG9ydC5kZXYgPSAmZGV2LT5kZXY7CiAJdWFwLT5wb3J0Lm1hcGJhc2UgPSBkZXYtPnJlcy5zdGFydDsKIAl1YXAtPnBvcnQubWVtYmFzZSA9IGJhc2U7CkBAIC04NjgsNyArOTMwLDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGFtYmFfaWQgcGwwMTFfaWRzW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9pZCBwbDAxMV9pZHNbXSA9IHsKIAl7CiAJCS5pZAk9IDB4MDAwNDEwMTEsCiAJCS5tYXNrCT0gMHgwMDBmZmZmZiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKaW5kZXggZWVkM2MyZC4uYTE4MmRlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9zZXJpYWxfYXQ5MS5oPgogI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYwppbmRleCBjZDZjZjU3Li42MDE2MTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jCkBAIC04NTIsNyArODUyLDcgQEAKIAkgKi8KIAljcG1fc2V0X3NtY19mY3IodXApOwogCi0JLyogVXNpbmcgaWRsZSBjaGFyYXRlciB0aW1lIHJlcXVpcmVzIHNvbWUgYWRkaXRpb25hbCB0dW5pbmcuICAqLworCS8qIFVzaW5nIGlkbGUgY2hhcmFjdGVyIHRpbWUgcmVxdWlyZXMgc29tZSBhZGRpdGlvbmFsIHR1bmluZy4gICovCiAJb3V0X2JlMTYoJnVwLT5zbWNfbXJibHIsIHBpbmZvLT5yeF9maWZvc2l6ZSk7CiAJb3V0X2JlMTYoJnVwLT5zbWNfbWF4aWRsLCBwaW5mby0+cnhfZmlmb3NpemUpOwogCW91dF9iZTE2KCZ1cC0+c21jX2Jya2xlbiwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9rZ2Rib2MuYyBiL2RyaXZlcnMvc2VyaWFsL2tnZGJvYy5jCmluZGV4IGE5YTk0YWUuLjM5ZjlhMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2tnZGJvYy5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2tnZGJvYy5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgva2RiLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Z0X2tlcm4uaD4KIAogI2RlZmluZSBNQVhfQ09ORklHX0xFTgkJNDAKIApAQCAtMzEsNiArMzIsNyBAQAogCS5tYXhsZW4JCQk9IE1BWF9DT05GSUdfTEVOLAogfTsKIAorc3RhdGljIGludCBrZ2Rib2NfdXNlX2ttczsgIC8qIDEgaWYgd2UgdXNlIGtlcm5lbCBtb2RlIHN3aXRjaGluZyAqLwogc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyCSprZ2RiX3R0eV9kcml2ZXI7CiBzdGF0aWMgaW50CQkJa2dkYl90dHlfbGluZTsKIApAQCAtMTA0LDYgKzEwNiwxMiBAQAogCWtnZGJvY19pb19vcHMuaXNfY29uc29sZSA9IDA7CiAJa2dkYl90dHlfZHJpdmVyID0gTlVMTDsKIAorCWtnZGJvY191c2Vfa21zID0gMDsKKwlpZiAoc3RybmNtcChjcHRyLCAia21zLCIsIDQpID09IDApIHsKKwkJY3B0ciArPSA0OworCQlrZ2Rib2NfdXNlX2ttcyA9IDE7CisJfQorCiAJaWYgKGtnZGJvY19yZWdpc3Rlcl9rYmQoJmNwdHIpKQogCQlnb3RvIGRvX3JlZ2lzdGVyOwogCkBAIC0yMDEsOCArMjA5LDE0IEBACiAJcmV0dXJuIGNvbmZpZ3VyZV9rZ2Rib2MoKTsKIH0KIAorc3RhdGljIGludCBkYmdfcmVzdG9yZV9ncmFwaGljczsKKwogc3RhdGljIHZvaWQga2dkYm9jX3ByZV9leHBfaGFuZGxlcih2b2lkKQogeworCWlmICghZGJnX3Jlc3RvcmVfZ3JhcGhpY3MgJiYga2dkYm9jX3VzZV9rbXMpIHsKKwkJZGJnX3Jlc3RvcmVfZ3JhcGhpY3MgPSAxOworCQljb25fZGVidWdfZW50ZXIodmNfY29uc1tmZ19jb25zb2xlXS5kKTsKKwl9CiAJLyogSW5jcmVtZW50IHRoZSBtb2R1bGUgY291bnQgd2hlbiB0aGUgZGVidWdnZXIgaXMgYWN0aXZlICovCiAJaWYgKCFrZ2RiX2Nvbm5lY3RlZCkKIAkJdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOwpAQCAtMjEzLDYgKzIyNywxMCBAQAogCS8qIGRlY3JlbWVudCB0aGUgbW9kdWxlIGNvdW50IHdoZW4gdGhlIGRlYnVnZ2VyIGRldGFjaGVzICovCiAJaWYgKCFrZ2RiX2Nvbm5lY3RlZCkKIAkJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CisJaWYgKGtnZGJvY191c2Vfa21zICYmIGRiZ19yZXN0b3JlX2dyYXBoaWNzKSB7CisJCWRiZ19yZXN0b3JlX2dyYXBoaWNzID0gMDsKKwkJY29uX2RlYnVnX2xlYXZlKCk7CisJfQogfQogCiBzdGF0aWMgc3RydWN0IGtnZGJfaW8ga2dkYm9jX2lvX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jIGIvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKaW5kZXggODRhMzVmNi4uMWE4OGIzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKQEAgLTExMyw3ICsxMTMsOSBAQAogCXVuc2lnbmVkIGNoYXIJKCpyZWFkX2NoYXIpKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpOwogCXZvaWQJCSgqY3dfZGlzYWJsZV9pbnRzKShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KTsKIAl2b2lkCQkoKmN3X3Jlc3RvcmVfaW50cykoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCk7Ci0JdW5zaWduZWQgbG9uZwkoKmdldHVhcnRjbGspKHZvaWQgKnApOworCXVuc2lnbmVkIGludAkoKnNldF9iYXVkcmF0ZSkoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKKwkJCQkJc3RydWN0IGt0ZXJtaW9zICpuZXcsCisJCQkJCXN0cnVjdCBrdGVybWlvcyAqb2xkKTsKIAlpbnQJCSgqY2xvY2spKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBlbmFibGUpOwogCWludAkJKCpmaWZvY19pbml0KSh2b2lkKTsKIAl2b2lkCQkoKmZpZm9jX3VuaW5pdCkodm9pZCk7CkBAIC0xMjEsNiArMTIzLDE2IEBACiAJaXJxcmV0dXJuX3QJKCpoYW5kbGVfaXJxKShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KTsKIH07CiAKKy8qIHNldHRpbmcgdGhlIHByZXNjYWxlciBhbmQgZGl2aXNvciByZWcgaXMgY29tbW9uIGZvciBhbGwgY2hpcHMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBtcGM1Mnh4X3NldF9kaXZpc29yKHN0cnVjdCBtcGM1Mnh4X3BzYyBfX2lvbWVtICpwc2MsCisJCQkJICAgICAgIHUxNiBwcmVzY2FsZXIsIHVuc2lnbmVkIGludCBkaXZpc29yKQoreworCS8qIHNlbGVjdCBwcmVzY2FsZXIgKi8KKwlvdXRfYmUxNigmcHNjLT5tcGM1Mnh4X3BzY19jbG9ja19zZWxlY3QsIHByZXNjYWxlcik7CisJb3V0XzgoJnBzYy0+Y3R1ciwgZGl2aXNvciA+PiA4KTsKKwlvdXRfOCgmcHNjLT5jdGxyLCBkaXZpc29yICYgMHhmZik7Cit9CisKICNpZmRlZiBDT05GSUdfUFBDX01QQzUyeHgKICNkZWZpbmUgRklGT181Mnh4KHBvcnQpICgoc3RydWN0IG1wYzUyeHhfcHNjX2ZpZm8gX19pb21lbSAqKShQU0MocG9ydCkrMSkpCiBzdGF0aWMgdm9pZCBtcGM1Mnh4X3BzY19maWZvX2luaXQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKQEAgLTEyOCw5ICsxNDAsNiBAQAogCXN0cnVjdCBtcGM1Mnh4X3BzYyBfX2lvbWVtICpwc2MgPSBQU0MocG9ydCk7CiAJc3RydWN0IG1wYzUyeHhfcHNjX2ZpZm8gX19pb21lbSAqZmlmbyA9IEZJRk9fNTJ4eChwb3J0KTsKIAotCS8qIC8zMiBwcmVzY2FsZXIgKi8KLQlvdXRfYmUxNigmcHNjLT5tcGM1Mnh4X3BzY19jbG9ja19zZWxlY3QsIDB4ZGQwMCk7Ci0KIAlvdXRfOCgmZmlmby0+cmZjbnRsLCAweDAwKTsKIAlvdXRfYmUxNigmZmlmby0+cmZhbGFybSwgMHgxZmYpOwogCW91dF84KCZmaWZvLT50ZmNudGwsIDB4MDcpOwpAQCAtMjE5LDE1ICsyMjgsNDcgQEAKIAlvdXRfYmUxNigmUFNDKHBvcnQpLT5tcGM1Mnh4X3BzY19pbXIsIHBvcnQtPnJlYWRfc3RhdHVzX21hc2spOwogfQogCi0vKiBTZWFyY2ggZm9yIGJ1cy1mcmVxdWVuY3kgcHJvcGVydHkgaW4gdGhpcyBub2RlIG9yIGEgcGFyZW50ICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBtcGM1Mnh4X2dldHVhcnRjbGsodm9pZCAqcCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXBjNTIwMF9wc2Nfc2V0X2JhdWRyYXRlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCisJCQkJCSAgICAgc3RydWN0IGt0ZXJtaW9zICpuZXcsCisJCQkJCSAgICAgc3RydWN0IGt0ZXJtaW9zICpvbGQpCiB7Ci0JLyoKLQkgKiA1MjAwIFVBUlRzIGhhdmUgYSAvIDMyIHByZXNjYWxlcgotCSAqIGJ1dCB0aGUgZ2VuZXJpYyBzZXJpYWwgY29kZSBhc3N1bWVzIDE2Ci0JICogc28gcmV0dXJuIGlwYiBmcmVxIC8gMgotCSAqLwotCXJldHVybiBtcGM1eHh4X2dldF9idXNfZnJlcXVlbmN5KHApIC8gMjsKKwl1bnNpZ25lZCBpbnQgYmF1ZDsKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjsKKworCS8qIFRoZSA1MjAwIGhhcyBhIGZpeGVkIC8zMiBwcmVzY2FsZXIsIHVhcnRjbGsgY29udGFpbnMgdGhlIGlwYiBmcmVxICovCisJYmF1ZCA9IHVhcnRfZ2V0X2JhdWRfcmF0ZShwb3J0LCBuZXcsIG9sZCwKKwkJCQkgIHBvcnQtPnVhcnRjbGsgLyAoMzIgKiAweGZmZmYpICsgMSwKKwkJCQkgIHBvcnQtPnVhcnRjbGsgLyAzMik7CisJZGl2aXNvciA9IChwb3J0LT51YXJ0Y2xrICsgMTYgKiBiYXVkKSAvICgzMiAqIGJhdWQpOworCisJLyogZW5hYmxlIHRoZSAvMzIgcHJlc2NhbGVyIGFuZCBzZXQgdGhlIGRpdmlzb3IgKi8KKwltcGM1Mnh4X3NldF9kaXZpc29yKFBTQyhwb3J0KSwgMHhkZDAwLCBkaXZpc29yKTsKKwlyZXR1cm4gYmF1ZDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBtcGM1MjAwYl9wc2Nfc2V0X2JhdWRyYXRlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCisJCQkJCSAgICAgIHN0cnVjdCBrdGVybWlvcyAqbmV3LAorCQkJCQkgICAgICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKK3sKKwl1bnNpZ25lZCBpbnQgYmF1ZDsKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjsKKwl1MTYgcHJlc2NhbGVyOworCisJLyogVGhlIDUyMDBCIGhhcyBhIHNlbGVjdGFibGUgLzQgb3IgLzMyIHByZXNjYWxlciwgdWFydGNsayBjb250YWlucyB0aGUKKwkgKiBpcGIgZnJlcSAqLworCWJhdWQgPSB1YXJ0X2dldF9iYXVkX3JhdGUocG9ydCwgbmV3LCBvbGQsCisJCQkJICBwb3J0LT51YXJ0Y2xrIC8gKDMyICogMHhmZmZmKSArIDEsCisJCQkJICBwb3J0LT51YXJ0Y2xrIC8gNCk7CisJZGl2aXNvciA9IChwb3J0LT51YXJ0Y2xrICsgMiAqIGJhdWQpIC8gKDQgKiBiYXVkKTsKKworCS8qIHNlbGVjdCB0aGUgcHJvcGVyIHByZXNjYWxlciBhbmQgc2V0IHRoZSBkaXZpc29yICovCisJaWYgKGRpdmlzb3IgPiAweGZmZmYpIHsKKwkJZGl2aXNvciA9IChkaXZpc29yICsgNCkgLyA4OworCQlwcmVzY2FsZXIgPSAweGRkMDA7IC8qIC8zMiAqLworCX0gZWxzZQorCQlwcmVzY2FsZXIgPSAweGZmMDA7IC8qIC80ICovCisJbXBjNTJ4eF9zZXRfZGl2aXNvcihQU0MocG9ydCksIHByZXNjYWxlciwgZGl2aXNvcik7CisJcmV0dXJuIGJhdWQ7CiB9CiAKIHN0YXRpYyB2b2lkIG1wYzUyeHhfcHNjX2dldF9pcnEoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IGRldmljZV9ub2RlICpucCkKQEAgLTI1OCw3ICsyOTksMjggQEAKIAkucmVhZF9jaGFyID0gbXBjNTJ4eF9wc2NfcmVhZF9jaGFyLAogCS5jd19kaXNhYmxlX2ludHMgPSBtcGM1Mnh4X3BzY19jd19kaXNhYmxlX2ludHMsCiAJLmN3X3Jlc3RvcmVfaW50cyA9IG1wYzUyeHhfcHNjX2N3X3Jlc3RvcmVfaW50cywKLQkuZ2V0dWFydGNsayA9IG1wYzUyeHhfZ2V0dWFydGNsaywKKwkuc2V0X2JhdWRyYXRlID0gbXBjNTIwMF9wc2Nfc2V0X2JhdWRyYXRlLAorCS5nZXRfaXJxID0gbXBjNTJ4eF9wc2NfZ2V0X2lycSwKKwkuaGFuZGxlX2lycSA9IG1wYzUyeHhfcHNjX2hhbmRsZV9pcnEsCit9OworCitzdGF0aWMgc3RydWN0IHBzY19vcHMgbXBjNTIwMGJfcHNjX29wcyA9IHsKKwkuZmlmb19pbml0ID0gbXBjNTJ4eF9wc2NfZmlmb19pbml0LAorCS5yYXdfcnhfcmR5ID0gbXBjNTJ4eF9wc2NfcmF3X3J4X3JkeSwKKwkucmF3X3R4X3JkeSA9IG1wYzUyeHhfcHNjX3Jhd190eF9yZHksCisJLnJ4X3JkeSA9IG1wYzUyeHhfcHNjX3J4X3JkeSwKKwkudHhfcmR5ID0gbXBjNTJ4eF9wc2NfdHhfcmR5LAorCS50eF9lbXB0eSA9IG1wYzUyeHhfcHNjX3R4X2VtcHR5LAorCS5zdG9wX3J4ID0gbXBjNTJ4eF9wc2Nfc3RvcF9yeCwKKwkuc3RhcnRfdHggPSBtcGM1Mnh4X3BzY19zdGFydF90eCwKKwkuc3RvcF90eCA9IG1wYzUyeHhfcHNjX3N0b3BfdHgsCisJLnJ4X2Nscl9pcnEgPSBtcGM1Mnh4X3BzY19yeF9jbHJfaXJxLAorCS50eF9jbHJfaXJxID0gbXBjNTJ4eF9wc2NfdHhfY2xyX2lycSwKKwkud3JpdGVfY2hhciA9IG1wYzUyeHhfcHNjX3dyaXRlX2NoYXIsCisJLnJlYWRfY2hhciA9IG1wYzUyeHhfcHNjX3JlYWRfY2hhciwKKwkuY3dfZGlzYWJsZV9pbnRzID0gbXBjNTJ4eF9wc2NfY3dfZGlzYWJsZV9pbnRzLAorCS5jd19yZXN0b3JlX2ludHMgPSBtcGM1Mnh4X3BzY19jd19yZXN0b3JlX2ludHMsCisJLnNldF9iYXVkcmF0ZSA9IG1wYzUyMDBiX3BzY19zZXRfYmF1ZHJhdGUsCiAJLmdldF9pcnEgPSBtcGM1Mnh4X3BzY19nZXRfaXJxLAogCS5oYW5kbGVfaXJxID0gbXBjNTJ4eF9wc2NfaGFuZGxlX2lycSwKIH07CkBAIC0zOTIsOSArNDU0LDM1IEBACiAJb3V0X2JlMzIoJkZJRk9fNTEyeChwb3J0KS0+cnhpbXIsIHBvcnQtPnJlYWRfc3RhdHVzX21hc2sgJiAweDdmKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgbXBjNTEyeF9nZXR1YXJ0Y2xrKHZvaWQgKnApCitzdGF0aWMgdW5zaWduZWQgaW50IG1wYzUxMnhfcHNjX3NldF9iYXVkcmF0ZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LAorCQkJCQkgICAgIHN0cnVjdCBrdGVybWlvcyAqbmV3LAorCQkJCQkgICAgIHN0cnVjdCBrdGVybWlvcyAqb2xkKQogewotCXJldHVybiBtcGM1eHh4X2dldF9idXNfZnJlcXVlbmN5KHApOworCXVuc2lnbmVkIGludCBiYXVkOworCXVuc2lnbmVkIGludCBkaXZpc29yOworCisJLyoKKwkgKiBUaGUgIk1QQzUxMjFlIE1pY3JvY29udHJvbGxlciBSZWZlcmVuY2UgTWFudWFsLCBSZXYuIDMiIHNheXMgb24KKwkgKiBwZy4gMzAtMTAgdGhhdCB0aGUgY2hpcCBzdXBwb3J0cyBhIC8zMiBhbmQgYSAvMTAgcHJlc2NhbGVyLgorCSAqIEZ1cnRoZXJtb3JlLCBpdCBzdGF0ZXMgdGhhdCAiQWZ0ZXIgcmVzZXQsIHRoZSBwcmVzY2FsZXIgYnkgMTAKKwkgKiBmb3IgdGhlIFVBUlQgbW9kZSBpcyBzZWxlY3RlZCIsIGJ1dCB0aGUgcmVzZXQgcmVnaXN0ZXIgdmFsdWUgaXMKKwkgKiAweDAwMDAgd2hpY2ggbWVhbnMgYSAvMzIgcHJlc2NhbGVyLiBUaGlzIGlzIHdyb25nLgorCSAqCisJICogSW4gcmVhbGl0eSB1c2luZyAvMzIgcHJlc2NhbGVyIGRvZXNuJ3Qgd29yaywgYXMgaXQgaXMgbm90IHN1cHBvcnRlZCEKKwkgKiBVc2UgLzE2IG9yIC8xMCBwcmVzY2FsZXIsIHNlZSAiTVBDNTEyMWUgSGFyZHdhcmUgRGVzaWduIEd1aWRlIiwKKwkgKiBDaGFwdGVyIDQuMSBQU0MgaW4gVUFSVCBNb2RlLgorCSAqIENhbGN1bGF0ZSB3aXRoIGEgLzE2IHByZXNjYWxlciBoZXJlLgorCSAqLworCisJLyogdWFydGNsayBjb250YWlucyB0aGUgaXBzIGZyZXEgKi8KKwliYXVkID0gdWFydF9nZXRfYmF1ZF9yYXRlKHBvcnQsIG5ldywgb2xkLAorCQkJCSAgcG9ydC0+dWFydGNsayAvICgxNiAqIDB4ZmZmZikgKyAxLAorCQkJCSAgcG9ydC0+dWFydGNsayAvIDE2KTsKKwlkaXZpc29yID0gKHBvcnQtPnVhcnRjbGsgKyA4ICogYmF1ZCkgLyAoMTYgKiBiYXVkKTsKKworCS8qIGVuYWJsZSB0aGUgLzE2IHByZXNjYWxlciBhbmQgc2V0IHRoZSBkaXZpc29yICovCisJbXBjNTJ4eF9zZXRfZGl2aXNvcihQU0MocG9ydCksIDB4ZGQwMCwgZGl2aXNvcik7CisJcmV0dXJuIGJhdWQ7CiB9CiAKIC8qIEluaXQgUFNDIEZJRk8gQ29udHJvbGxlciAqLwpAQCAtNDk4LDcgKzU4Niw3IEBACiAJLnJlYWRfY2hhciA9IG1wYzUxMnhfcHNjX3JlYWRfY2hhciwKIAkuY3dfZGlzYWJsZV9pbnRzID0gbXBjNTEyeF9wc2NfY3dfZGlzYWJsZV9pbnRzLAogCS5jd19yZXN0b3JlX2ludHMgPSBtcGM1MTJ4X3BzY19jd19yZXN0b3JlX2ludHMsCi0JLmdldHVhcnRjbGsgPSBtcGM1MTJ4X2dldHVhcnRjbGssCisJLnNldF9iYXVkcmF0ZSA9IG1wYzUxMnhfcHNjX3NldF9iYXVkcmF0ZSwKIAkuY2xvY2sgPSBtcGM1MTJ4X3BzY19jbG9jaywKIAkuZmlmb2NfaW5pdCA9IG1wYzUxMnhfcHNjX2ZpZm9jX2luaXQsCiAJLmZpZm9jX3VuaW5pdCA9IG1wYzUxMnhfcHNjX2ZpZm9jX3VuaW5pdCwKQEAgLTY2Niw4ICs3NTQsOCBAQAogCXN0cnVjdCBtcGM1Mnh4X3BzYyBfX2lvbWVtICpwc2MgPSBQU0MocG9ydCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBjaGFyIG1yMSwgbXIyOwotCXVuc2lnbmVkIHNob3J0IGN0cjsKLQl1bnNpZ25lZCBpbnQgaiwgYmF1ZCwgcXVvdDsKKwl1bnNpZ25lZCBpbnQgajsKKwl1bnNpZ25lZCBpbnQgYmF1ZDsKIAogCS8qIFByZXBhcmUgd2hhdCB3ZSdyZSBnb25uYSB3cml0ZSAqLwogCW1yMSA9IDA7CkBAIC03MDQsMTYgKzc5Miw5IEBACiAJCW1yMiB8PSBNUEM1Mnh4X1BTQ19NT0RFX1RYQ1RTOwogCX0KIAotCWJhdWQgPSB1YXJ0X2dldF9iYXVkX3JhdGUocG9ydCwgbmV3LCBvbGQsIDAsIHBvcnQtPnVhcnRjbGsvMTYpOwotCXF1b3QgPSB1YXJ0X2dldF9kaXZpc29yKHBvcnQsIGJhdWQpOwotCWN0ciA9IHF1b3QgJiAweGZmZmY7Ci0KIAkvKiBHZXQgdGhlIGxvY2sgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCi0JLyogVXBkYXRlIHRoZSBwZXItcG9ydCB0aW1lb3V0ICovCi0JdWFydF91cGRhdGVfdGltZW91dChwb3J0LCBuZXctPmNfY2ZsYWcsIGJhdWQpOwotCiAJLyogRG8gb3VyIGJlc3QgdG8gZmx1c2ggVFggJiBSWCwgc28gd2UgZG9uJ3QgbG9zZSBhbnl0aGluZyAqLwogCS8qIEJ1dCB3ZSBkb24ndCB3YWl0IGluZGVmaW5pdGVseSAhICovCiAJaiA9IDUwMDAwMDA7CS8qIE1heGltdW0gd2FpdCAqLwpAQCAtNzM3LDggKzgxOCwxMCBAQAogCW91dF84KCZwc2MtPmNvbW1hbmQsIE1QQzUyeHhfUFNDX1NFTF9NT0RFX1JFR18xKTsKIAlvdXRfOCgmcHNjLT5tb2RlLCBtcjEpOwogCW91dF84KCZwc2MtPm1vZGUsIG1yMik7Ci0Jb3V0XzgoJnBzYy0+Y3R1ciwgY3RyID4+IDgpOwotCW91dF84KCZwc2MtPmN0bHIsIGN0ciAmIDB4ZmYpOworCWJhdWQgPSBwc2Nfb3BzLT5zZXRfYmF1ZHJhdGUocG9ydCwgbmV3LCBvbGQpOworCisJLyogVXBkYXRlIHRoZSBwZXItcG9ydCB0aW1lb3V0ICovCisJdWFydF91cGRhdGVfdGltZW91dChwb3J0LCBuZXctPmNfY2ZsYWcsIGJhdWQpOwogCiAJaWYgKFVBUlRfRU5BQkxFX01TKHBvcnQsIG5ldy0+Y19jZmxhZykpCiAJCW1wYzUyeHhfdWFydF9lbmFibGVfbXMocG9ydCk7CkBAIC0xMTE4LDcgKzEyMDEsNyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCXVhcnRjbGsgPSBwc2Nfb3BzLT5nZXR1YXJ0Y2xrKG5wKTsKKwl1YXJ0Y2xrID0gbXBjNXh4eF9nZXRfYnVzX2ZyZXF1ZW5jeShucCk7CiAJaWYgKHVhcnRjbGsgPT0gMCkgewogCQlwcl9kZWJ1ZygiQ291bGQgbm90IGZpbmQgdWFydCBjbG9jayBmcmVxdWVuY3khXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMjAxLDYgKzEyODQsNyBAQAogCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtcGM1Mnh4X3VhcnRfb2ZfbWF0Y2hbXSA9IHsKICNpZmRlZiBDT05GSUdfUFBDX01QQzUyeHgKKwl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsIC5kYXRhID0gJm1wYzUyMDBiX3BzY19vcHMsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1wc2MtdWFydCIsIC5kYXRhID0gJm1wYzUyeHhfcHNjX29wcywgfSwKIAkvKiBiaW5kaW5nIHVzZWQgYnkgb2xkIGxpdGU1MjAwIGRldmljZSB0cmVlczogKi8KIAl7IC5jb21wYXRpYmxlID0gIm1wYzUyMDAtcHNjLXVhcnQiLCAuZGF0YSA9ICZtcGM1Mnh4X3BzY19vcHMsIH0sCkBAIC0xMjMzLDcgKzEzMTcsMTAgQEAKIAlwcl9kZWJ1ZygiRm91bmQgJXMgYXNzaWduZWQgdG8gdHR5UFNDJXhcbiIsCiAJCSBtcGM1Mnh4X3VhcnRfbm9kZXNbaWR4XS0+ZnVsbF9uYW1lLCBpZHgpOwogCi0JdWFydGNsayA9IHBzY19vcHMtPmdldHVhcnRjbGsob3AtPmRldi5vZl9ub2RlKTsKKwkvKiBzZXQgdGhlIHVhcnQgY2xvY2sgdG8gdGhlIGlucHV0IGNsb2NrIG9mIHRoZSBwc2MsIHRoZSBkaWZmZXJlbnQKKwkgKiBwcmVzY2FsZXJzIGFyZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gdGhlIHNldF9iYXVkcmF0ZSgpIG1ldGhvZHMKKwkgKiBvZiB0aGUgcmVzcGVjdGl2ZSBjaGlwICovCisJdWFydGNsayA9IG1wYzV4eHhfZ2V0X2J1c19mcmVxdWVuY3kob3AtPmRldi5vZl9ub2RlKTsKIAlpZiAodWFydGNsayA9PSAwKSB7CiAJCWRldl9kYmcoJm9wLT5kZXYsICJDb3VsZCBub3QgZmluZCB1YXJ0IGNsb2NrIGZyZXF1ZW5jeSFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL253cHNlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvbndwc2VyaWFsLmMKaW5kZXggM2MwMmZhOS4uZTY1YjBkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbndwc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbndwc2VyaWFsLmMKQEAgLTgxLDcgKzgxLDcgQEAKIAogCXVhcnRfY29uc29sZV93cml0ZSgmdXAtPnBvcnQsIHMsIGNvdW50LCBud3BzZXJpYWxfY29uc29sZV9wdXRjaGFyKTsKIAotCS8qIHdhaXQgZm9yIHRyYW5zbWl0dGVyIHRvIGJlY29tZSBlbXRweSAqLworCS8qIHdhaXQgZm9yIHRyYW5zbWl0dGVyIHRvIGJlY29tZSBlbXB0eSAqLwogCXdoaWxlICgoZGNyX3JlYWQodXAtPmRjcl9ob3N0LCBVQVJUX0xTUikgJiBVQVJUX0xTUl9USFJFKSA9PSAwKQogCQljcHVfcmVsYXgoKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYwppbmRleCBhYjE3YzA4Li4xNDFjNjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYwpAQCAtNDUsNyArNDUsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzY29kZS5oPgpAQCAtMTE1LDE2ICsxMTQsMTQgQEAKIAogc3RhdGljIGludCBxdWlya19wb3N0X2libShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQljb25mX3JlZ190IHJlZyA9IHsgMCwgQ1NfUkVBRCwgMHg4MDAsIDAgfTsKKwl1OCB2YWw7CiAJaW50IHJldDsKIAotCXJldCA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKTsKKwlyZXQgPSBwY21jaWFfcmVhZF9jb25maWdfYnl0ZShsaW5rLCAweDgwMCwgJnZhbCk7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsZWQ7CiAKLQlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7Ci0JcmVnLlZhbHVlID0gcmVnLlZhbHVlIHwgMTsKLQlyZXQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluaywgJnJlZyk7CisJcmV0ID0gcGNtY2lhX3dyaXRlX2NvbmZpZ19ieXRlKGxpbmssIDB4ODAwLCB2YWwgfCAxKTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZDsKIAlyZXR1cm4gMDsKQEAgLTMzOCw4ICszMzUsOCBAQAogCWluZm8tPnBfZGV2ID0gbGluazsKIAlsaW5rLT5wcml2ID0gaW5mbzsKIAotCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JbGluay0+aW8uTnVtUG9ydHMxID0gODsKKwlsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJbGluay0+cmVzb3VyY2VbMF0tPmVuZCA9IDg7CiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogCWlmIChkb19zb3VuZCkgewogCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKQEAgLTQyNywxMiArNDI0LDEzIEBACiAJCXBfZGV2LT5jb25mLlZwcCA9CiAJCQljZi0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKIAorCXBfZGV2LT5pb19saW5lcyA9ICgoKnRyeSAmIDB4MSkgPT0gMCkgPworCQkJMTYgOiBjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwogCWlmICgoY2YtPmlvLm53aW4gPiAwKSAmJiAoY2YtPmlvLndpblswXS5sZW4gPT0gc2l6ZV90YWJsZVsoKnRyeSA+PiAxKV0pCiAJICAgICYmIChjZi0+aW8ud2luWzBdLmJhc2UgIT0gMCkpIHsKLQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGNmLT5pby53aW5bMF0uYmFzZTsKLQkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gKCgqdHJ5ICYgMHgxKSA9PSAwKSA/Ci0JCQkxNiA6IGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGNmLT5pby53aW5bMF0uYmFzZTsKKwkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldikpCiAJCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CkBAIC00NDksOSArNDQ3LDkgQEAKIAogCWlmICgoY2YtPmlvLm53aW4gPiAwKSAmJiAoKGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLKSA8PSAzKSkgewogCQlmb3IgKGogPSAwOyBqIDwgNTsgaisrKSB7Ci0JCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gYmFzZVtqXTsKLQkJCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IGJhc2Vbal0gPyAxNiA6IDM7Ci0JCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkKKwkJCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBiYXNlW2pdOworCQkJcF9kZXYtPmlvX2xpbmVzID0gYmFzZVtqXSA/IDE2IDogMzsKKwkJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpKQogCQkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtNDY2LDEzICs0NjQsMTMgQEAKIAkvKiBJZiB0aGUgY2FyZCBpcyBhbHJlYWR5IGNvbmZpZ3VyZWQsIGxvb2sgdXAgdGhlIHBvcnQgYW5kIGlycSAqLwogCWlmIChsaW5rLT5mdW5jdGlvbl9jb25maWcpIHsKIAkJdW5zaWduZWQgaW50IHBvcnQgPSAwOwotCQlpZiAoKGxpbmstPmlvLkJhc2VQb3J0MiAhPSAwKSAmJgotCQkgICAgKGxpbmstPmlvLk51bVBvcnRzMiA9PSA4KSkgewotCQkJcG9ydCA9IGxpbmstPmlvLkJhc2VQb3J0MjsKKwkJaWYgKChsaW5rLT5yZXNvdXJjZVsxXS0+ZW5kICE9IDApICYmCisJCQkocmVzb3VyY2Vfc2l6ZShsaW5rLT5yZXNvdXJjZVsxXSkgPT0gOCkpIHsKKwkJCXBvcnQgPSBsaW5rLT5yZXNvdXJjZVsxXS0+ZW5kOwogCQkJaW5mby0+c2xhdmUgPSAxOwogCQl9IGVsc2UgaWYgKChpbmZvLT5tYW5maWQgPT0gTUFORklEX09TSVRFQ0gpICYmCi0JCQkgICAobGluay0+aW8uTnVtUG9ydHMxID09IDB4NDApKSB7Ci0JCQlwb3J0ID0gbGluay0+aW8uQmFzZVBvcnQxICsgMHgyODsKKwkJCShyZXNvdXJjZV9zaXplKGxpbmstPnJlc291cmNlWzBdKSA9PSAweDQwKSkgeworCQkJcG9ydCA9IGxpbmstPnJlc291cmNlWzBdLT5zdGFydCArIDB4Mjg7CiAJCQlpbmZvLT5zbGF2ZSA9IDE7CiAJCX0KIAkJaWYgKGluZm8tPnNsYXZlKSB7CkBAIC01MTAsNyArNTA4LDcgQEAKIAlpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CiAJaWYgKGkgIT0gMCkKIAkJcmV0dXJuIC0xOwotCXJldHVybiBzZXR1cF9zZXJpYWwobGluaywgaW5mbywgbGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pcnEpOworCXJldHVybiBzZXR1cF9zZXJpYWwobGluaywgaW5mbywgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0LCBsaW5rLT5pcnEpOwogfQogCiBzdGF0aWMgaW50IG11bHRpX2NvbmZpZ19jaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCkBAIC01MjQsMTAgKzUyMiwxMCBAQAogCS8qIFRoZSBxdWFkIHBvcnQgY2FyZHMgaGF2ZSBiYWQgQ0lTJ3MsIHNvIGp1c3QgbG9vayBmb3IgYQogCSAgIHdpbmRvdyBsYXJnZXIgdGhhbiA4IHBvcnRzIGFuZCBhc3N1bWUgaXQgd2lsbCBiZSByaWdodCAqLwogCWlmICgoY2YtPmlvLm53aW4gPT0gMSkgJiYgKGNmLT5pby53aW5bMF0ubGVuID4gOCkpIHsKLQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGNmLT5pby53aW5bMF0uYmFzZTsKLQkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKSB7Ci0JCQkqYmFzZTIgPSBwX2Rldi0+aW8uQmFzZVBvcnQxICsgODsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGNmLT5pby53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPmlvX2xpbmVzID0gY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpKSB7CisJCQkqYmFzZTIgPSBwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ICsgODsKIAkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtNTQzLDExICs1NDEsMTEgQEAKIAlpbnQgKmJhc2UyID0gcHJpdl9kYXRhOwogCiAJaWYgKGNmLT5pby5ud2luID09IDIpIHsKLQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGNmLT5pby53aW5bMF0uYmFzZTsKLQkJcF9kZXYtPmlvLkJhc2VQb3J0MiA9IGNmLT5pby53aW5bMV0uYmFzZTsKLQkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKSB7Ci0JCQkqYmFzZTIgPSBwX2Rldi0+aW8uQmFzZVBvcnQyOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gY2YtPmlvLndpblswXS5iYXNlOworCQlwX2Rldi0+cmVzb3VyY2VbMV0tPnN0YXJ0ID0gY2YtPmlvLndpblsxXS5iYXNlOworCQlwX2Rldi0+aW9fbGluZXMgPSBjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldikpIHsKKwkJCSpiYXNlMiA9IHBfZGV2LT5yZXNvdXJjZVsxXS0+c3RhcnQ7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KQEAgLTU2MCwxMCArNTU4LDEwIEBACiAJaW50IGksIGJhc2UyID0gMDsKIAogCS8qIEZpcnN0LCBsb29rIGZvciBhIGdlbmVyaWMgZnVsbC1zaXplZCB3aW5kb3cgKi8KLQlsaW5rLT5pby5OdW1Qb3J0czEgPSBpbmZvLT5tdWx0aSAqIDg7CisJbGluay0+cmVzb3VyY2VbMF0tPmVuZCA9IGluZm8tPm11bHRpICogODsKIAlpZiAocGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIG11bHRpX2NvbmZpZ19jaGVjaywgJmJhc2UyKSkgewogCQkvKiBJZiB0aGF0IGRpZG4ndCB3b3JrLCBsb29rIGZvciB0d28gd2luZG93cyAqLwotCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBsaW5rLT5pby5OdW1Qb3J0czIgPSA4OworCQlsaW5rLT5yZXNvdXJjZVswXS0+ZW5kID0gbGluay0+cmVzb3VyY2VbMV0tPmVuZCA9IDg7CiAJCWluZm8tPm11bHRpID0gMjsKIAkJaWYgKHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBtdWx0aV9jb25maWdfY2hlY2tfbm90cGlja3ksCiAJCQkJICAgICAgICZiYXNlMikpIHsKQEAgLTU5OSw5ICs1OTcsOSBAQAogCQkgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9PSAzKSB7CiAJCQllcnIgPSBzZXR1cF9zZXJpYWwobGluaywgaW5mbywgYmFzZTIsCiAJCQkJCWxpbmstPmlycSk7Ci0JCQliYXNlMiA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKwkJCWJhc2UyID0gbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0OzsKIAkJfSBlbHNlIHsKLQkJCWVyciA9IHNldHVwX3NlcmlhbChsaW5rLCBpbmZvLCBsaW5rLT5pby5CYXNlUG9ydDEsCisJCQllcnIgPSBzZXR1cF9zZXJpYWwobGluaywgaW5mbywgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0LAogCQkJCQlsaW5rLT5pcnEpOwogCQl9CiAJCWluZm8tPmM5NTBjdHJsID0gYmFzZTI7CkBAIC02MTYsNyArNjE0LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0Jc2V0dXBfc2VyaWFsKGxpbmssIGluZm8sIGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aXJxKTsKKwlzZXR1cF9zZXJpYWwobGluaywgaW5mbywgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0LCBsaW5rLT5pcnEpOwogCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5tdWx0aSAtIDE7IGkrKykKIAkJc2V0dXBfc2VyaWFsKGxpbmssIGluZm8sIGJhc2UyICsgKDggKiBpKSwKIAkJCQlsaW5rLT5pcnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc25fY29uc29sZS5jIGIvZHJpdmVycy9zZXJpYWwvc25fY29uc29sZS5jCmluZGV4IDk3OTRlMGMuLjdlNWU1ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NuX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zbl9jb25zb2xlLmMKQEAgLTQ3MCw3ICs0NzAsNyBAQAogCX0KIAogCWlmIChwb3J0LT5zY19wb3J0LnN0YXRlKSB7Ci0JCS8qIFRoZSBzZXJpYWxfY29yZSBzdHVmZnMgYXJlIGluaXRpbGl6ZWQsIHVzZSB0aGVtICovCisJCS8qIFRoZSBzZXJpYWxfY29yZSBzdHVmZnMgYXJlIGluaXRpYWxpemVkLCB1c2UgdGhlbSAqLwogCQl0dHkgPSBwb3J0LT5zY19wb3J0LnN0YXRlLT5wb3J0LnR0eTsKIAl9CiAJZWxzZSB7CkBAIC01NTEsMTEgKzU1MSwxMSBAQAogCUJVR19PTighcG9ydC0+c2NfaXNfYXN5bmNoKTsKIAogCWlmIChwb3J0LT5zY19wb3J0LnN0YXRlKSB7Ci0JCS8qIFdlJ3JlIGluaXRpbGl6ZWQsIHVzaW5nIHNlcmlhbCBjb3JlIGluZnJhc3RydWN0dXJlICovCisJCS8qIFdlJ3JlIGluaXRpYWxpemVkLCB1c2luZyBzZXJpYWwgY29yZSBpbmZyYXN0cnVjdHVyZSAqLwogCQl4bWl0ID0gJnBvcnQtPnNjX3BvcnQuc3RhdGUtPnhtaXQ7CiAJfSBlbHNlIHsKIAkJLyogUHJvYmFibHkgc25fc2FsX3N3aXRjaF90b19hc3luY2ggaGFzIGJlZW4gcnVuIGJ1dCBzZXJpYWwgY29yZSBpc24ndAotCQkgKiBpbml0aWxpemVkIHlldC4gIEp1c3QgcmV0dXJuLiAgV3JpdGVzIGFyZSBnb2luZyB0aHJvdWdoCisJCSAqIGluaXRpYWxpemVkIHlldC4gIEp1c3QgcmV0dXJuLiAgV3JpdGVzIGFyZSBnb2luZyB0aHJvdWdoCiAJCSAqIHNuX3NhbF9jb25zb2xlX3dyaXRlIChkdWUgdG8gcmVnaXN0ZXJfY29uc29sZSkgYXQgdGhpcyB0aW1lLgogCQkgKi8KIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc3VuY29yZS5jIGIvZHJpdmVycy9zZXJpYWwvc3VuY29yZS5jCmluZGV4IGVkN2Q5NTguLjU0NGYyZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3N1bmNvcmUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zdW5jb3JlLmMKQEAgLTcxLDcgKzcxLDkgQEAKIAogCWNvbi0+aW5kZXggPSBsaW5lOwogCWRydi0+Y29ucyA9IGNvbjsKLQlhZGRfcHJlZmVycmVkX2NvbnNvbGUoY29uLT5uYW1lLCBsaW5lLCBOVUxMKTsKKworCWlmICghY29uc29sZV9zZXRfb25fY21kbGluZSkKKwkJYWRkX3ByZWZlcnJlZF9jb25zb2xlKGNvbi0+bmFtZSwgbGluZSwgTlVMTCk7CiAKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3N1bmh2LmMgYi9kcml2ZXJzL3NlcmlhbC9zdW5odi5jCmluZGV4IDg5MGY5MTcuLmE3NzllMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3N1bmh2LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc3VuaHYuYwpAQCAtNTI1LDcgKzUyNSw3IEBACiAJdW5zaWduZWQgbG9uZyBtaW5vcjsKIAlpbnQgZXJyOwogCi0JaWYgKG9wLT5pcnFzWzBdID09IDB4ZmZmZmZmZmYpCisJaWYgKG9wLT5hcmNoZGF0YS5pcnFzWzBdID09IDB4ZmZmZmZmZmYpCiAJCXJldHVybiAtRU5PREVWOwogCiAJcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1YXJ0X3BvcnQpLCBHRlBfS0VSTkVMKTsKQEAgLTU1Nyw3ICs1NTcsNyBAQAogCiAJcG9ydC0+bWVtYmFzZSA9ICh1bnNpZ25lZCBjaGFyIF9faW9tZW0gKikgX19wYShwb3J0KTsKIAotCXBvcnQtPmlycSA9IG9wLT5pcnFzWzBdOworCXBvcnQtPmlycSA9IG9wLT5hcmNoZGF0YS5pcnFzWzBdOwogCiAJcG9ydC0+ZGV2ID0gJm9wLT5kZXY7CiAKQEAgLTY0NCwxMiArNjQ0LDEyIEBACiAJaWYgKHRsYl90eXBlICE9IGh5cGVydmlzb3IpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0dXJuIG9mX3JlZ2lzdGVyX2RyaXZlcigmaHZfZHJpdmVyLCAmb2ZfYnVzX3R5cGUpOworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmh2X2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzdW5odl9leGl0KHZvaWQpCiB7Ci0Jb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoJmh2X2RyaXZlcik7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmh2X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHN1bmh2X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc3Vuc2FiLmMgYi9kcml2ZXJzL3NlcmlhbC9zdW5zYWIuYwppbmRleCA1ZTgxYmM2Li45ODQ1ZmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zdW5zYWIuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zdW5zYWIuYwpAQCAtOTY5LDcgKzk2OSw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCXVwLT5yZWdzID0gKHVuaW9uIHNhYjgyNTMyX2FzeW5jX3JlZ3MgX19pb21lbSAqKSB1cC0+cG9ydC5tZW1iYXNlOwogCi0JdXAtPnBvcnQuaXJxID0gb3AtPmlycXNbMF07CisJdXAtPnBvcnQuaXJxID0gb3AtPmFyY2hkYXRhLmlycXNbMF07CiAKIAl1cC0+cG9ydC5maWZvc2l6ZSA9IFNBQjgyNTMyX1hNSVRfRklGT19TSVpFOwogCXVwLT5wb3J0LmlvdHlwZSA9IFVQSU9fTUVNOwpAQCAtMTEzMCwxMiArMTEzMCwxMiBAQAogCQl9CiAJfQogCi0JcmV0dXJuIG9mX3JlZ2lzdGVyX2RyaXZlcigmc2FiX2RyaXZlciwgJm9mX2J1c190eXBlKTsKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZzYWJfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHN1bnNhYl9leGl0KHZvaWQpCiB7Ci0Jb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoJnNhYl9kcml2ZXIpOworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZzYWJfZHJpdmVyKTsKIAlpZiAoc3Vuc2FiX3JlZy5ucikgewogCQlzdW5zZXJpYWxfdW5yZWdpc3Rlcl9taW5vcnMoJnN1bnNhYl9yZWcsIHN1bnNhYl9yZWcubnIpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3N1bnN1LmMgYi9kcml2ZXJzL3NlcmlhbC9zdW5zdS5jCmluZGV4IDIzNDQ1OWMuLjNjZGY3NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3N1bnN1LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc3Vuc3UuYwpAQCAtMTQ0Myw3ICsxNDQzLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JdXAtPnBvcnQuaXJxID0gb3AtPmlycXNbMF07CisJdXAtPnBvcnQuaXJxID0gb3AtPmFyY2hkYXRhLmlycXNbMF07CiAKIAl1cC0+cG9ydC5kZXYgPSAmb3AtPmRldjsKIApAQCAtMTUwMCwyMCArMTUwMCwyNSBAQAogc3RhdGljIGludCBfX2RldmV4aXQgc3VfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQogewogCXN0cnVjdCB1YXJ0X3N1bnN1X3BvcnQgKnVwID0gZGV2X2dldF9kcnZkYXRhKCZvcC0+ZGV2KTsKKwlib29sIGtiZG1zID0gZmFsc2U7CiAKIAlpZiAodXAtPnN1X3R5cGUgPT0gU1VfUE9SVF9NUyB8fAotCSAgICB1cC0+c3VfdHlwZSA9PSBTVV9QT1JUX0tCRCkgeworCSAgICB1cC0+c3VfdHlwZSA9PSBTVV9QT1JUX0tCRCkKKwkJa2JkbXMgPSB0cnVlOworCisJaWYgKGtiZG1zKSB7CiAjaWZkZWYgQ09ORklHX1NFUklPCiAJCXNlcmlvX3VucmVnaXN0ZXJfcG9ydCgmdXAtPnNlcmlvKTsKICNlbmRpZgotCQlrZnJlZSh1cCk7Ci0JfSBlbHNlIGlmICh1cC0+cG9ydC50eXBlICE9IFBPUlRfVU5LTk9XTikgeworCX0gZWxzZSBpZiAodXAtPnBvcnQudHlwZSAhPSBQT1JUX1VOS05PV04pCiAJCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZzdW5zdV9yZWcsICZ1cC0+cG9ydCk7Ci0JfQogCiAJaWYgKHVwLT5wb3J0Lm1lbWJhc2UpCiAJCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVswXSwgdXAtPnBvcnQubWVtYmFzZSwgdXAtPnJlZ19zaXplKTsKIAorCWlmIChrYmRtcykKKwkJa2ZyZWUodXApOworCiAJZGV2X3NldF9kcnZkYXRhKCZvcC0+ZGV2LCBOVUxMKTsKIAogCXJldHVybiAwOwpAQCAtMTU4MSw3ICsxNTg2LDcgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCi0JZXJyID0gb2ZfcmVnaXN0ZXJfZHJpdmVyKCZzdV9kcml2ZXIsICZvZl9idXNfdHlwZSk7CisJZXJyID0gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZzdV9kcml2ZXIpOwogCWlmIChlcnIgJiYgbnVtX3VhcnQpCiAJCXN1bnNlcmlhbF91bnJlZ2lzdGVyX21pbm9ycygmc3Vuc3VfcmVnLCBudW1fdWFydCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmMgYi9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5jCmluZGV4IGY5YTI0ZjQuLmQxZTZiY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYwpAQCAtMTQyNiw3ICsxNDI2LDcgQEAKIAlycCA9IHN1bnppbG9nX2NoaXBfcmVnc1tpbnN0XTsKIAogCWlmICh6aWxvZ19pcnEgPT0gLTEpCi0JCXppbG9nX2lycSA9IG9wLT5pcnFzWzBdOworCQl6aWxvZ19pcnEgPSBvcC0+YXJjaGRhdGEuaXJxc1swXTsKIAogCXVwID0gJnN1bnppbG9nX3BvcnRfdGFibGVbaW5zdCAqIDJdOwogCkBAIC0xNDM0LDcgKzE0MzQsNyBAQAogCXVwWzBdLnBvcnQubWFwYmFzZSA9IG9wLT5yZXNvdXJjZVswXS5zdGFydCArIDB4MDA7CiAJdXBbMF0ucG9ydC5tZW1iYXNlID0gKHZvaWQgX19pb21lbSAqKSAmcnAtPmNoYW5uZWxBOwogCXVwWzBdLnBvcnQuaW90eXBlID0gVVBJT19NRU07Ci0JdXBbMF0ucG9ydC5pcnEgPSBvcC0+aXJxc1swXTsKKwl1cFswXS5wb3J0LmlycSA9IG9wLT5hcmNoZGF0YS5pcnFzWzBdOwogCXVwWzBdLnBvcnQudWFydGNsayA9IFpTX0NMT0NLOwogCXVwWzBdLnBvcnQuZmlmb3NpemUgPSAxOwogCXVwWzBdLnBvcnQub3BzID0gJnN1bnppbG9nX3BvcHM7CkBAIC0xNDUxLDcgKzE0NTEsNyBAQAogCXVwWzFdLnBvcnQubWFwYmFzZSA9IG9wLT5yZXNvdXJjZVswXS5zdGFydCArIDB4MDQ7CiAJdXBbMV0ucG9ydC5tZW1iYXNlID0gKHZvaWQgX19pb21lbSAqKSAmcnAtPmNoYW5uZWxCOwogCXVwWzFdLnBvcnQuaW90eXBlID0gVVBJT19NRU07Ci0JdXBbMV0ucG9ydC5pcnEgPSBvcC0+aXJxc1swXTsKKwl1cFsxXS5wb3J0LmlycSA9IG9wLT5hcmNoZGF0YS5pcnFzWzBdOwogCXVwWzFdLnBvcnQudWFydGNsayA9IFpTX0NMT0NLOwogCXVwWzFdLnBvcnQuZmlmb3NpemUgPSAxOwogCXVwWzFdLnBvcnQub3BzID0gJnN1bnppbG9nX3BvcHM7CkBAIC0xNDkyLDEyICsxNDkyLDEyIEBACiAJCSAgICAgICAiaXMgYSAlc1xuIiwKIAkJICAgICAgIGRldl9uYW1lKCZvcC0+ZGV2KSwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHVwWzBdLnBvcnQubWFwYmFzZSwKLQkJICAgICAgIG9wLT5pcnFzWzBdLCBzdW56aWxvZ190eXBlKCZ1cFswXS5wb3J0KSk7CisJCSAgICAgICBvcC0+YXJjaGRhdGEuaXJxc1swXSwgc3Vuemlsb2dfdHlwZSgmdXBbMF0ucG9ydCkpOwogCQlwcmludGsoS0VSTl9JTkZPICIlczogTW91c2UgYXQgTU1JTyAweCVsbHggKGlycSA9ICVkKSAiCiAJCSAgICAgICAiaXMgYSAlc1xuIiwKIAkJICAgICAgIGRldl9uYW1lKCZvcC0+ZGV2KSwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHVwWzFdLnBvcnQubWFwYmFzZSwKLQkJICAgICAgIG9wLT5pcnFzWzBdLCBzdW56aWxvZ190eXBlKCZ1cFsxXS5wb3J0KSk7CisJCSAgICAgICBvcC0+YXJjaGRhdGEuaXJxc1swXSwgc3Vuemlsb2dfdHlwZSgmdXBbMV0ucG9ydCkpOwogCQlrYm1faW5zdCsrOwogCX0KIApAQCAtMTU3Niw3ICsxNTc2LDcgQEAKIAkJCWdvdG8gb3V0X2ZyZWVfdGFibGVzOwogCX0KIAotCWVyciA9IG9mX3JlZ2lzdGVyX2RyaXZlcigmenNfZHJpdmVyLCAmb2ZfYnVzX3R5cGUpOworCWVyciA9IG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmenNfZHJpdmVyKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX3VhcnQ7CiAKQEAgLTE2MDQsNyArMTYwNCw3IEBACiAJcmV0dXJuIGVycjsKIAogb3V0X3VucmVnaXN0ZXJfZHJpdmVyOgotCW9mX3VucmVnaXN0ZXJfZHJpdmVyKCZ6c19kcml2ZXIpOworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZ6c19kcml2ZXIpOwogCiBvdXRfdW5yZWdpc3Rlcl91YXJ0OgogCWlmIChudW1fc3Vuemlsb2cpIHsKQEAgLTE2MTksNyArMTYxOSw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzdW56aWxvZ19leGl0KHZvaWQpCiB7Ci0Jb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoJnpzX2RyaXZlcik7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnpzX2RyaXZlcik7CiAKIAlpZiAoemlsb2dfaXJxICE9IC0xKSB7CiAJCXN0cnVjdCB1YXJ0X3N1bnppbG9nX3BvcnQgKnVwID0gc3Vuemlsb2dfaXJxX2NoYWluOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvdWFydGxpdGUuYyBiL2RyaXZlcnMvc2VyaWFsL3VhcnRsaXRlLmMKaW5kZXggOGFjY2NkNS4uY2FmMDg1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvdWFydGxpdGUuYworKysgYi9kcml2ZXJzL3NlcmlhbC91YXJ0bGl0ZS5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaWYgZGVmaW5lZChDT05GSUdfT0YpICYmIChkZWZpbmVkKENPTkZJR19QUEMzMikgfHwgZGVmaW5lZChDT05GSUdfTUlDUk9CTEFaRSkpCiAjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvbXBjNTEyeF9wc2Nfc3BpLmMgYi9kcml2ZXJzL3NwaS9tcGM1MTJ4X3BzY19zcGkuYwppbmRleCAyNTM0YjFlLi4xMGJhYWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9tcGM1MTJ4X3BzY19zcGkuYworKysgYi9kcml2ZXJzL3NwaS9tcGM1MTJ4X3BzY19zcGkuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KQEAgLTQ0MCw2ICs0NDEsNyBAQAogCW1hc3Rlci0+c2V0dXAgPSBtcGM1MTJ4X3BzY19zcGlfc2V0dXA7CiAJbWFzdGVyLT50cmFuc2ZlciA9IG1wYzUxMnhfcHNjX3NwaV90cmFuc2ZlcjsKIAltYXN0ZXItPmNsZWFudXAgPSBtcGM1MTJ4X3BzY19zcGlfY2xlYW51cDsKKwltYXN0ZXItPmRldi5vZl9ub2RlID0gZGV2LT5vZl9ub2RlOwogCiAJdGVtcHAgPSBpb3JlbWFwKHJlZ2FkZHIsIHNpemUpOwogCWlmICghdGVtcHApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL21wYzUyeHhfcHNjX3NwaS5jIGIvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKaW5kZXggNzEwNGNiNy4uNjZkMTcwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKQEAgLTE2LDggKzE2LDggQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8bGludXgvb2Zfc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CkBAIC0zOTgsNiArMzk4LDcgQEAKIAltYXN0ZXItPnNldHVwID0gbXBjNTJ4eF9wc2Nfc3BpX3NldHVwOwogCW1hc3Rlci0+dHJhbnNmZXIgPSBtcGM1Mnh4X3BzY19zcGlfdHJhbnNmZXI7CiAJbWFzdGVyLT5jbGVhbnVwID0gbXBjNTJ4eF9wc2Nfc3BpX2NsZWFudXA7CisJbWFzdGVyLT5kZXYub2Zfbm9kZSA9IGRldi0+b2Zfbm9kZTsKIAogCW1wcy0+cHNjID0gaW9yZW1hcChyZWdhZGRyLCBzaXplKTsKIAlpZiAoIW1wcy0+cHNjKSB7CkBAIC00NzAsNyArNDcxLDYgQEAKIAljb25zdCB1MzIgKnJlZ2FkZHJfcDsKIAl1NjQgcmVnYWRkcjY0LCBzaXplNjQ7CiAJczE2IGlkID0gLTE7Ci0JaW50IHJjOwogCiAJcmVnYWRkcl9wID0gb2ZfZ2V0X2FkZHJlc3Mob3AtPmRldi5vZl9ub2RlLCAwLCAmc2l6ZTY0LCBOVUxMKTsKIAlpZiAoIXJlZ2FkZHJfcCkgewpAQCAtNDkxLDEzICs0OTEsOCBAQAogCQlpZCA9ICpwc2NfbnVtcCArIDE7CiAJfQogCi0JcmMgPSBtcGM1Mnh4X3BzY19zcGlfZG9fcHJvYmUoJm9wLT5kZXYsICh1MzIpcmVnYWRkcjY0LCAodTMyKXNpemU2NCwKKwlyZXR1cm4gbXBjNTJ4eF9wc2Nfc3BpX2RvX3Byb2JlKCZvcC0+ZGV2LCAodTMyKXJlZ2FkZHI2NCwgKHUzMilzaXplNjQsCiAJCQkJaXJxX29mX3BhcnNlX2FuZF9tYXAob3AtPmRldi5vZl9ub2RlLCAwKSwgaWQpOwotCWlmIChyYyA9PSAwKQotCQlvZl9yZWdpc3Rlcl9zcGlfZGV2aWNlcyhkZXZfZ2V0X2RydmRhdGEoJm9wLT5kZXYpLAotCQkJCQlvcC0+ZGV2Lm9mX25vZGUpOwotCi0JcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IF9fZXhpdCBtcGM1Mnh4X3BzY19zcGlfb2ZfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvbXBjNTJ4eF9zcGkuYyBiL2RyaXZlcnMvc3BpL21wYzUyeHhfc3BpLmMKaW5kZXggYjFhNzZiZi4uNTYxMzZmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvbXBjNTJ4eF9zcGkuYworKysgYi9kcml2ZXJzL3NwaS9tcGM1Mnh4X3NwaS5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvb2Zfc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtNDM5LDYgKzQzOCw3IEBACiAJbWFzdGVyLT5zZXR1cCA9IG1wYzUyeHhfc3BpX3NldHVwOwogCW1hc3Rlci0+dHJhbnNmZXIgPSBtcGM1Mnh4X3NwaV90cmFuc2ZlcjsKIAltYXN0ZXItPm1vZGVfYml0cyA9IFNQSV9DUE9MIHwgU1BJX0NQSEEgfCBTUElfTFNCX0ZJUlNUOworCW1hc3Rlci0+ZGV2Lm9mX25vZGUgPSBvcC0+ZGV2Lm9mX25vZGU7CiAKIAlkZXZfc2V0X2RydmRhdGEoJm9wLT5kZXYsIG1hc3Rlcik7CiAKQEAgLTUxMiw3ICs1MTIsNiBAQAogCWlmIChyYykKIAkJZ290byBlcnJfcmVnaXN0ZXI7CiAKLQlvZl9yZWdpc3Rlcl9zcGlfZGV2aWNlcyhtYXN0ZXIsIG9wLT5kZXYub2Zfbm9kZSk7CiAJZGV2X2luZm8oJm1zLT5tYXN0ZXItPmRldiwgInJlZ2lzdGVyZWQgTVBDNTIwMCBTUEkgYnVzXG4iKTsKIAogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS5jIGIvZHJpdmVycy9zcGkvc3BpLmMKaW5kZXggYjNhMWY5Mi4uMWJiMWI4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3NwaS5oPgogCiAKIC8qIFNQSSBidXN0eXBlIGFuZCBzcGlfbWFzdGVyIGNsYXNzIGFyZSByZWdpc3RlcmVkIGFmdGVyIGJvYXJkIGluaXQgY29kZQpAQCAtNTQwLDYgKzU0MSw5IEBACiAJLyogcG9wdWxhdGUgY2hpbGRyZW4gZnJvbSBhbnkgc3BpIGRldmljZSB0YWJsZXMgKi8KIAlzY2FuX2JvYXJkaW5mbyhtYXN0ZXIpOwogCXN0YXR1cyA9IDA7CisKKwkvKiBSZWdpc3RlciBkZXZpY2VzIGZyb20gdGhlIGRldmljZSB0cmVlICovCisJb2ZfcmVnaXN0ZXJfc3BpX2RldmljZXMobWFzdGVyKTsKIGRvbmU6CiAJcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9tcGM4eHh4LmMgYi9kcml2ZXJzL3NwaS9zcGlfbXBjOHh4eC5jCmluZGV4IGZmYTExMWEuLmFhZDlhZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9tcGM4eHh4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX21wYzh4eHguYwpAQCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlIDxzeXNkZXYvZnNsX3NvYy5oPgpAQCAtNjYsMjggKzY1LDYgQEAKIAlfX2JlMzIgcmVjZWl2ZTsKIH07CiAKLS8qIFNQSSBQYXJhbWV0ZXIgUkFNICovCi1zdHJ1Y3Qgc3BpX3ByYW0gewotCV9fYmUxNglyYmFzZTsJLyogUnggQnVmZmVyIGRlc2NyaXB0b3IgYmFzZSBhZGRyZXNzICovCi0JX19iZTE2CXRiYXNlOwkvKiBUeCBCdWZmZXIgZGVzY3JpcHRvciBiYXNlIGFkZHJlc3MgKi8KLQl1OAlyZmNyOwkvKiBSeCBmdW5jdGlvbiBjb2RlICovCi0JdTgJdGZjcjsJLyogVHggZnVuY3Rpb24gY29kZSAqLwotCV9fYmUxNgltcmJscjsJLyogTWF4IHJlY2VpdmUgYnVmZmVyIGxlbmd0aCAqLwotCV9fYmUzMglyc3RhdGU7CS8qIEludGVybmFsICovCi0JX19iZTMyCXJkcDsJLyogSW50ZXJuYWwgKi8KLQlfX2JlMTYJcmJwdHI7CS8qIEludGVybmFsICovCi0JX19iZTE2CXJiYzsJLyogSW50ZXJuYWwgKi8KLQlfX2JlMzIJcnh0bXA7CS8qIEludGVybmFsICovCi0JX19iZTMyCXRzdGF0ZTsJLyogSW50ZXJuYWwgKi8KLQlfX2JlMzIJdGRwOwkvKiBJbnRlcm5hbCAqLwotCV9fYmUxNgl0YnB0cjsJLyogSW50ZXJuYWwgKi8KLQlfX2JlMTYJdGJjOwkvKiBJbnRlcm5hbCAqLwotCV9fYmUzMgl0eHRtcDsJLyogSW50ZXJuYWwgKi8KLQlfX2JlMzIJcmVzOwkvKiBUeCB0ZW1wLiAqLwotCV9fYmUxNiAgcnBiYXNlOwkvKiBSZWxvY2F0aW9uIHBvaW50ZXIgKENQTTEgb25seSkgKi8KLQlfX2JlMTYJcmVzMTsJLyogUmVzZXJ2ZWQgKi8KLX07Ci0KIC8qIFNQSSBDb250cm9sbGVyIG1vZGUgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUJU1BNT0RFX0xPT1AJCSgxIDw8IDMwKQogI2RlZmluZQlTUE1PREVfQ0lfSU5BQ1RJVkVISUdICSgxIDw8IDI5KQpAQCAtMTAzMSw2ICsxMDA4LDcgQEAKIAltYXN0ZXItPnNldHVwID0gbXBjOHh4eF9zcGlfc2V0dXA7CiAJbWFzdGVyLT50cmFuc2ZlciA9IG1wYzh4eHhfc3BpX3RyYW5zZmVyOwogCW1hc3Rlci0+Y2xlYW51cCA9IG1wYzh4eHhfc3BpX2NsZWFudXA7CisJbWFzdGVyLT5kZXYub2Zfbm9kZSA9IGRldi0+b2Zfbm9kZTsKIAogCW1wYzh4eHhfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOwogCW1wYzh4eHhfc3BpLT5kZXYgPSBkZXY7CkBAIC0xMzIxLDggKzEyOTksNiBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQlvZl9yZWdpc3Rlcl9zcGlfZGV2aWNlcyhtYXN0ZXIsIG5wKTsKLQogCXJldHVybiAwOwogCiBlcnI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfcHBjNHh4LmMgYi9kcml2ZXJzL3NwaS9zcGlfcHBjNHh4LmMKaW5kZXggZDUzNDY2YS4uMGY1ZmE3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX3BwYzR4eC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9wcGM0eHguYwpAQCAtNDA3LDYgKzQwNyw3IEBACiAJbWFzdGVyID0gc3BpX2FsbG9jX21hc3RlcihkZXYsIHNpemVvZiAqaHcpOwogCWlmIChtYXN0ZXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CisJbWFzdGVyLT5kZXYub2Zfbm9kZSA9IG5wOwogCWRldl9zZXRfZHJ2ZGF0YShkZXYsIG1hc3Rlcik7CiAJaHcgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CiAJaHctPm1hc3RlciA9IHNwaV9tYXN0ZXJfZ2V0KG1hc3Rlcik7CkBAIC01NDUsNyArNTQ2LDYgQEAKIAl9CiAKIAlkZXZfaW5mbyhkZXYsICJkcml2ZXIgaW5pdGlhbGl6ZWRcbiIpOwotCW9mX3JlZ2lzdGVyX3NwaV9kZXZpY2VzKG1hc3RlciwgbnApOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3hpbGlueF9zcGkuYyBiL2RyaXZlcnMvc3BpL3hpbGlueF9zcGkuYwppbmRleCAxYjQ3MzYzLi44MGYyZGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS94aWxpbnhfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkveGlsaW54X3NwaS5jCkBAIC0zOTAsNiArMzkwLDkgQEAKIAogCW1hc3Rlci0+YnVzX251bSA9IGJ1c19udW07CiAJbWFzdGVyLT5udW1fY2hpcHNlbGVjdCA9IHBkYXRhLT5udW1fY2hpcHNlbGVjdDsKKyNpZmRlZiBDT05GSUdfT0YKKwltYXN0ZXItPmRldi5vZl9ub2RlID0gZGV2LT5vZl9ub2RlOworI2VuZGlmCiAKIAl4c3BpLT5tZW0gPSAqbWVtOwogCXhzcGktPmlycSA9IGlycTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3hpbGlueF9zcGlfb2YuYyBiL2RyaXZlcnMvc3BpL3hpbGlueF9zcGlfb2YuYwppbmRleCA0NjU0ODA1Li5mNTNkM2Y2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS94aWxpbnhfc3BpX29mLmMKKysrIGIvZHJpdmVycy9zcGkveGlsaW54X3NwaV9vZi5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9zcGkuaD4KQEAgLTgwLDkgKzgxLDYgQEAKIAogCWRldl9zZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldiwgbWFzdGVyKTsKIAotCS8qIEFkZCBhbnkgc3Vibm9kZXMgb24gdGhlIFNQSSBidXMgKi8KLQlvZl9yZWdpc3Rlcl9zcGlfZGV2aWNlcyhtYXN0ZXIsIG9mZGV2LT5kZXYub2Zfbm9kZSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb24uYyBiL2RyaXZlcnMvc3NiL2RyaXZlcl9jaGlwY29tbW9uLmMKaW5kZXggNTlhZTc2Yi4uN2MwMzFmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb24uYworKysgYi9kcml2ZXJzL3NzYi9kcml2ZXJfY2hpcGNvbW1vbi5jCkBAIC0yMDksNiArMjA5LDI0IEBACiAJfQogfQogCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BtdUZhc3RQd3J1cERlbGF5ICovCitzdGF0aWMgdTE2IHBtdV9mYXN0X3Bvd2VydXBfZGVsYXkoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYykKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gY2MtPmRldi0+YnVzOworCisJc3dpdGNoIChidXMtPmNoaXBfaWQpIHsKKwljYXNlIDB4NDMxMjoKKwljYXNlIDB4NDMyMjoKKwljYXNlIDB4NDMyODoKKwkJcmV0dXJuIDcwMDA7CisJY2FzZSAweDQzMjU6CisJCS8qIFRPRE86ICovCisJZGVmYXVsdDoKKwkJcmV0dXJuIDE1MDAwOworCX0KK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9DbGtjdGxGYXN0UHdydXBEZWxheSAqLwogc3RhdGljIHZvaWQgY2FsY19mYXN0X3Bvd2VydXBfZGVsYXkoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYykKIHsKIAlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gY2MtPmRldi0+YnVzOwpAQCAtMjE4LDYgKzIzNiwxMiBAQAogCiAJaWYgKGJ1cy0+YnVzdHlwZSAhPSBTU0JfQlVTVFlQRV9QQ0kpCiAJCXJldHVybjsKKworCWlmIChjYy0+Y2FwYWJpbGl0aWVzICYgU1NCX0NISVBDT19DQVBfUE1VKSB7CisJCWNjLT5mYXN0X3B3cnVwX2RlbGF5ID0gcG11X2Zhc3RfcG93ZXJ1cF9kZWxheShjYyk7CisJCXJldHVybjsKKwl9CisKIAlpZiAoIShjYy0+Y2FwYWJpbGl0aWVzICYgU1NCX0NISVBDT19DQVBfUENUTCkpCiAJCXJldHVybjsKIApAQCAtMjM1LDYgKzI1OSw3IEBACiAJCXJldHVybjsgLyogV2UgZG9uJ3QgaGF2ZSBhIENoaXBDb21tb24gKi8KIAlpZiAoY2MtPmRldi0+aWQucmV2aXNpb24gPj0gMTEpCiAJCWNjLT5zdGF0dXMgPSBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX0NISVBTVEFUKTsKKwlzc2JfZHByaW50ayhLRVJOX0lORk8gUEZYICJjaGlwY29tbW9uIHN0YXR1cyBpcyAweCV4XG4iLCBjYy0+c3RhdHVzKTsKIAlzc2JfcG11X2luaXQoY2MpOwogCWNoaXBjb19wb3dlcmNvbnRyb2xfaW5pdChjYyk7CiAJc3NiX2NoaXBjb19zZXRfY2xvY2ttb2RlKGNjLCBTU0JfQ0xLTU9ERV9GQVNUKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL2RyaXZlcl9jaGlwY29tbW9uX3BtdS5jIGIvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb25fcG11LmMKaW5kZXggM2Q1NTEyNC4uNTczMmJiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb25fcG11LmMKKysrIGIvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb25fcG11LmMKQEAgLTUwMiw5ICs1MDIsOSBAQAogCQljaGlwY29fd3JpdGUzMihjYywgU1NCX0NISVBDT19QTVVfTUFYUkVTX01TSywgbWF4X21zayk7CiB9CiAKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvU1NCL1BtdUluaXQgKi8KIHZvaWQgc3NiX3BtdV9pbml0KHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MpCiB7Ci0Jc3RydWN0IHNzYl9idXMgKmJ1cyA9IGNjLT5kZXYtPmJ1czsKIAl1MzIgcG11Y2FwOwogCiAJaWYgKCEoY2MtPmNhcGFiaWxpdGllcyAmIFNTQl9DSElQQ09fQ0FQX1BNVSkpCkBAIC01MTYsMTUgKzUxNiwxMiBAQAogCXNzYl9kcHJpbnRrKEtFUk5fREVCVUcgUEZYICJGb3VuZCByZXYgJXUgUE1VIChjYXBhYmlsaXRpZXMgMHglMDhYKVxuIiwKIAkJICAgIGNjLT5wbXUucmV2LCBwbXVjYXApOwogCi0JaWYgKGNjLT5wbXUucmV2ID49IDEpIHsKLQkJaWYgKChidXMtPmNoaXBfaWQgPT0gMHg0MzI1KSAmJiAoYnVzLT5jaGlwX3JldiA8IDIpKSB7Ci0JCQljaGlwY29fbWFzazMyKGNjLCBTU0JfQ0hJUENPX1BNVV9DVEwsCi0JCQkJICAgICAgflNTQl9DSElQQ09fUE1VX0NUTF9OT0lMUE9OVyk7Ci0JCX0gZWxzZSB7Ci0JCQljaGlwY29fc2V0MzIoY2MsIFNTQl9DSElQQ09fUE1VX0NUTCwKLQkJCQkgICAgIFNTQl9DSElQQ09fUE1VX0NUTF9OT0lMUE9OVyk7Ci0JCX0KLQl9CisJaWYgKGNjLT5wbXUucmV2ID09IDEpCisJCWNoaXBjb19tYXNrMzIoY2MsIFNTQl9DSElQQ09fUE1VX0NUTCwKKwkJCSAgICAgIH5TU0JfQ0hJUENPX1BNVV9DVExfTk9JTFBPTlcpOworCWVsc2UKKwkJY2hpcGNvX3NldDMyKGNjLCBTU0JfQ0hJUENPX1BNVV9DVEwsCisJCQkgICAgIFNTQl9DSElQQ09fUE1VX0NUTF9OT0lMUE9OVyk7CiAJc3NiX3BtdV9wbGxfaW5pdChjYyk7CiAJc3NiX3BtdV9yZXNvdXJjZXNfaW5pdChjYyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9tYWluLmMgYi9kcml2ZXJzL3NzYi9tYWluLmMKaW5kZXggNTEyNzVhYS4uNzg5MmFjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvbWFpbi5jCisrKyBiL2RyaXZlcnMvc3NiL21haW4uYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tYy9zZGlvX2Z1bmMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CkBAIC00ODYsNiArNDg1LDcgQEAKICNpZmRlZiBDT05GSUdfU1NCX1BDSUhPU1QKIAkJCXNkZXYtPmlycSA9IGJ1cy0+aG9zdF9wY2ktPmlycTsKIAkJCWRldi0+cGFyZW50ID0gJmJ1cy0+aG9zdF9wY2ktPmRldjsKKwkJCXNkZXYtPmRtYV9kZXYgPSBkZXYtPnBhcmVudDsKICNlbmRpZgogCQkJYnJlYWs7CiAJCWNhc2UgU1NCX0JVU1RZUEVfUENNQ0lBOgpAQCAtNTAxLDYgKzUwMSw3IEBACiAJCQlicmVhazsKIAkJY2FzZSBTU0JfQlVTVFlQRV9TU0I6CiAJCQlkZXYtPmRtYV9tYXNrID0gJmRldi0+Y29oZXJlbnRfZG1hX21hc2s7CisJCQlzZGV2LT5kbWFfZGV2ID0gZGV2OwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTIyNiw4MCArMTIyNyw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKHNzYl9kbWFfdHJhbnNsYXRpb24pOwogCi1pbnQgc3NiX2RtYV9zZXRfbWFzayhzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LCB1NjQgbWFzaykKLXsKLSNpZmRlZiBDT05GSUdfU1NCX1BDSUhPU1QKLQlpbnQgZXJyOwotI2VuZGlmCi0KLQlzd2l0Y2ggKGRldi0+YnVzLT5idXN0eXBlKSB7Ci0JY2FzZSBTU0JfQlVTVFlQRV9QQ0k6Ci0jaWZkZWYgQ09ORklHX1NTQl9QQ0lIT1NUCi0JCWVyciA9IHBjaV9zZXRfZG1hX21hc2soZGV2LT5idXMtPmhvc3RfcGNpLCBtYXNrKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JCWVyciA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhkZXYtPmJ1cy0+aG9zdF9wY2ksIG1hc2spOwotCQlyZXR1cm4gZXJyOwotI2VuZGlmCi0JY2FzZSBTU0JfQlVTVFlQRV9TU0I6Ci0JCXJldHVybiBkbWFfc2V0X21hc2soZGV2LT5kZXYsIG1hc2spOwotCWRlZmF1bHQ6Ci0JCV9fc3NiX2RtYV9ub3RfaW1wbGVtZW50ZWQoZGV2KTsKLQl9Ci0JcmV0dXJuIC1FTk9TWVM7Ci19Ci1FWFBPUlRfU1lNQk9MKHNzYl9kbWFfc2V0X21hc2spOwotCi12b2lkICogc3NiX2RtYV9hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcF9mbGFncykKLXsKLQlzd2l0Y2ggKGRldi0+YnVzLT5idXN0eXBlKSB7Ci0JY2FzZSBTU0JfQlVTVFlQRV9QQ0k6Ci0jaWZkZWYgQ09ORklHX1NTQl9QQ0lIT1NUCi0JCWlmIChnZnBfZmxhZ3MgJiBHRlBfRE1BKSB7Ci0JCQkvKiBXb3JrYXJvdW5kOiBUaGUgUENJIEFQSSBkb2VzIG5vdCBzdXBwb3J0IHBhc3NpbmcKLQkJCSAqIGEgR0ZQIGZsYWcuICovCi0JCQlyZXR1cm4gZG1hX2FsbG9jX2NvaGVyZW50KCZkZXYtPmJ1cy0+aG9zdF9wY2ktPmRldiwKLQkJCQkJCSAgc2l6ZSwgZG1hX2hhbmRsZSwgZ2ZwX2ZsYWdzKTsKLQkJfQotCQlyZXR1cm4gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LT5idXMtPmhvc3RfcGNpLCBzaXplLCBkbWFfaGFuZGxlKTsKLSNlbmRpZgotCWNhc2UgU1NCX0JVU1RZUEVfU1NCOgotCQlyZXR1cm4gZG1hX2FsbG9jX2NvaGVyZW50KGRldi0+ZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBnZnBfZmxhZ3MpOwotCWRlZmF1bHQ6Ci0JCV9fc3NiX2RtYV9ub3RfaW1wbGVtZW50ZWQoZGV2KTsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci1FWFBPUlRfU1lNQk9MKHNzYl9kbWFfYWxsb2NfY29uc2lzdGVudCk7Ci0KLXZvaWQgc3NiX2RtYV9mcmVlX2NvbnNpc3RlbnQoc3RydWN0IHNzYl9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCi0JCQkgICAgIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCi0JCQkgICAgIGdmcF90IGdmcF9mbGFncykKLXsKLQlzd2l0Y2ggKGRldi0+YnVzLT5idXN0eXBlKSB7Ci0JY2FzZSBTU0JfQlVTVFlQRV9QQ0k6Ci0jaWZkZWYgQ09ORklHX1NTQl9QQ0lIT1NUCi0JCWlmIChnZnBfZmxhZ3MgJiBHRlBfRE1BKSB7Ci0JCQkvKiBXb3JrYXJvdW5kOiBUaGUgUENJIEFQSSBkb2VzIG5vdCBzdXBwb3J0IHBhc3NpbmcKLQkJCSAqIGEgR0ZQIGZsYWcuICovCi0JCQlkbWFfZnJlZV9jb2hlcmVudCgmZGV2LT5idXMtPmhvc3RfcGNpLT5kZXYsCi0JCQkJCSAgc2l6ZSwgdmFkZHIsIGRtYV9oYW5kbGUpOwotCQkJcmV0dXJuOwotCQl9Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5idXMtPmhvc3RfcGNpLCBzaXplLAotCQkJCSAgICB2YWRkciwgZG1hX2hhbmRsZSk7Ci0JCXJldHVybjsKLSNlbmRpZgotCWNhc2UgU1NCX0JVU1RZUEVfU1NCOgotCQlkbWFfZnJlZV9jb2hlcmVudChkZXYtPmRldiwgc2l6ZSwgdmFkZHIsIGRtYV9oYW5kbGUpOwotCQlyZXR1cm47Ci0JZGVmYXVsdDoKLQkJX19zc2JfZG1hX25vdF9pbXBsZW1lbnRlZChkZXYpOwotCX0KLX0KLUVYUE9SVF9TWU1CT0woc3NiX2RtYV9mcmVlX2NvbnNpc3RlbnQpOwotCiBpbnQgc3NiX2J1c19tYXlfcG93ZXJkb3duKHN0cnVjdCBzc2JfYnVzICpidXMpCiB7CiAJc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL3BjaS5jIGIvZHJpdmVycy9zc2IvcGNpLmMKaW5kZXggNmRjZGE4Ni4uNmU4OGQyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvcGNpLmMKKysrIGIvZHJpdmVycy9zc2IvcGNpLmMKQEAgLTYyNiwxMSArNjI2LDIyIEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlpZiAoYnVzLT5jaGlwY28uZGV2KSB7CS8qIGNhbiBiZSB1bmF2YWlsaWJsZSEgKi8KLQkJYnVzLT5zcHJvbV9vZmZzZXQgPSAoYnVzLT5jaGlwY28uZGV2LT5pZC5yZXZpc2lvbiA8IDMxKSA/Ci0JCQlTU0JfU1BST01fQkFTRTEgOiBTU0JfU1BST01fQkFTRTMxOworCQkvKgorCQkgKiBnZXQgU1BST00gb2Zmc2V0OiBTU0JfU1BST01fQkFTRTEgZXhjZXB0IGZvcgorCQkgKiBjaGlwY29tbW9uIHJldiA+PSAzMSBvciBjaGlwIElEIGlzIDB4NDMxMiBhbmQKKwkJICogY2hpcGNvbW1vbiBzdGF0dXMgJiAzID09IDIKKwkJICovCisJCWlmIChidXMtPmNoaXBjby5kZXYtPmlkLnJldmlzaW9uID49IDMxKQorCQkJYnVzLT5zcHJvbV9vZmZzZXQgPSBTU0JfU1BST01fQkFTRTMxOworCQllbHNlIGlmIChidXMtPmNoaXBfaWQgPT0gMHg0MzEyICYmCisJCQkgKGJ1cy0+Y2hpcGNvLnN0YXR1cyAmIDB4MDMpID09IDIpCisJCQlidXMtPnNwcm9tX29mZnNldCA9IFNTQl9TUFJPTV9CQVNFMzE7CisJCWVsc2UKKwkJCWJ1cy0+c3Byb21fb2Zmc2V0ID0gU1NCX1NQUk9NX0JBU0UxOwogCX0gZWxzZSB7CiAJCWJ1cy0+c3Byb21fb2Zmc2V0ID0gU1NCX1NQUk9NX0JBU0UxOwogCX0KKwlzc2JfZHByaW50ayhLRVJOX0lORk8gUEZYICJTUFJPTSBvZmZzZXQgaXMgMHgleFxuIiwgYnVzLT5zcHJvbV9vZmZzZXQpOwogCiAJYnVmID0ga2NhbGxvYyhTU0JfU1BST01TSVpFX1dPUkRTX1IxMjMsIHNpemVvZih1MTYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL3BjbWNpYS5jIGIvZHJpdmVycy9zc2IvcGNtY2lhLmMKaW5kZXggZTcyZjQwNC4uNTI2NjgyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvcGNtY2lhLmMKKysrIGIvZHJpdmVycy9zc2IvcGNtY2lhLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc2NvZGUuaD4KQEAgLTcyLDE0ICs3MSw5IEBACiAvKiBXcml0ZSB0byBhIFBDTUNJQSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLiAqLwogc3RhdGljIGludCBzc2JfcGNtY2lhX2NmZ193cml0ZShzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCB1OCBvZmZzZXQsIHU4IHZhbHVlKQogewotCWNvbmZfcmVnX3QgcmVnOwogCWludCByZXM7CiAKLQltZW1zZXQoJnJlZywgMCwgc2l6ZW9mKHJlZykpOwotCXJlZy5PZmZzZXQgPSBvZmZzZXQ7Ci0JcmVnLkFjdGlvbiA9IENTX1dSSVRFOwotCXJlZy5WYWx1ZSA9IHZhbHVlOwotCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihidXMtPmhvc3RfcGNtY2lhLCAmcmVnKTsKKwlyZXMgPSBwY21jaWFfd3JpdGVfY29uZmlnX2J5dGUoYnVzLT5ob3N0X3BjbWNpYSwgb2Zmc2V0LCB2YWx1ZSk7CiAJaWYgKHVubGlrZWx5KHJlcyAhPSAwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIApAQCAtODksMTYgKzgzLDExIEBACiAvKiBSZWFkIGZyb20gYSBQQ01DSUEgY29uZmlndXJhdGlvbiByZWdpc3Rlci4gKi8KIHN0YXRpYyBpbnQgc3NiX3BjbWNpYV9jZmdfcmVhZChzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCB1OCBvZmZzZXQsIHU4ICp2YWx1ZSkKIHsKLQljb25mX3JlZ190IHJlZzsKIAlpbnQgcmVzOwogCi0JbWVtc2V0KCZyZWcsIDAsIHNpemVvZihyZWcpKTsKLQlyZWcuT2Zmc2V0ID0gb2Zmc2V0OwotCXJlZy5BY3Rpb24gPSBDU19SRUFEOwotCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihidXMtPmhvc3RfcGNtY2lhLCAmcmVnKTsKKwlyZXMgPSBwY21jaWFfcmVhZF9jb25maWdfYnl0ZShidXMtPmhvc3RfcGNtY2lhLCBvZmZzZXQsIHZhbHVlKTsKIAlpZiAodW5saWtlbHkocmVzICE9IDApKQogCQlyZXR1cm4gLUVCVVNZOwotCSp2YWx1ZSA9IHJlZy5WYWx1ZTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2Ivc2Nhbi5jIGIvZHJpdmVycy9zc2Ivc2Nhbi5jCmluZGV4IDBkNmMwMjguLjk3MzhjYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL3NjYW4uYworKysgYi9kcml2ZXJzL3NzYi9zY2FuLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwppbmRleCA5ODRhNzU0Li40YTdhN2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwpAQCAtOTcsNiArOTcsOCBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9zZXJxdF91c2IyL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvS2NvbmZpZyIKKwogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcXVhdGVjaF91c2IyL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9LY29uZmlnIgpAQCAtMTA5LDE1ICsxMTEsMTMgQEAKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvdm1lL0tjb25maWciCiAKLXNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3Jhcl9yZWdpc3Rlci9LY29uZmlnIgotCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9tZW1yYXIvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvc2VwL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2lpby9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9LY29uZmlnIgorc291cmNlICJkcml2ZXJzL3N0YWdpbmcvenJhbS9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL0tjb25maWciCiAKQEAgLTEyOSw4ICsxMjksNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9zbTd4eC9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9kdDMxNTUvS2NvbmZpZyIKLQogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvZHQzMTU1djRsL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9LY29uZmlnIgpAQCAtMTQ3LDUgKzE0NSwxNSBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9tc20vS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL3N0YWdpbmcvbGlyYy9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9lYXN5Y2FwL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3F1aWNrc3RhcnQvS2NvbmZpZyIKKwogZW5kaWYgIyAhU1RBR0lOR19FWENMVURFX0JVSUxECiBlbmRpZiAjIFNUQUdJTkcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQppbmRleCA5ZmEyNTEzLi5jYTVjMDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCkBAIC04LDYgKzgsNyBAQAogb2JqLSQoQ09ORklHX1ZJREVPX0dPNzAwNykJKz0gZ283MDA3Lwogb2JqLSQoQ09ORklHX1ZJREVPX0NYMjU4MjEpCSs9IGN4MjU4MjEvCiBvYmotJChDT05GSUdfVklERU9fVE02MDAwKQkrPSB0bTYwMDAvCitvYmotJChDT05GSUdfTElSQ19TVEFHSU5HKQkrPSBsaXJjLwogb2JqLSQoQ09ORklHX1VTQl9JUF9DT01NT04pCSs9IHVzYmlwLwogb2JqLSQoQ09ORklHX1czNVVORCkJCSs9IHdpbmJvbmQvCiBvYmotJChDT05GSUdfUFJJU00yX1VTQikJKz0gd2xhbi1uZy8KQEAgLTIyLDYgKzIzLDcgQEAKIG9iai0kKENPTkZJR19SVEw4MTkyU1UpCQkrPSBydGw4MTkyc3UvCiBvYmotJChDT05GSUdfUlRMODE5MlUpCQkrPSBydGw4MTkydS8KIG9iai0kKENPTkZJR19SVEw4MTkyRSkJCSs9IHJ0bDgxOTJlLworb2JqLSQoQ09ORklHX1NQRUNUUkEpCQkrPSBzcGVjdHJhLwogb2JqLSQoQ09ORklHX1RSQU5aUE9SVCkJCSs9IGZyb250aWVyLwogb2JqLSQoQ09ORklHX0RSRUFNKQkJKz0gZHJlYW0vCiBvYmotJChDT05GSUdfUE9ITUVMRlMpCQkrPSBwb2htZWxmcy8KQEAgLTM1LDE3ICszNywxNSBAQAogb2JqLSQoQ09ORklHX0ZCX1VETCkJCSs9IHVkbGZiLwogb2JqLSQoQ09ORklHX0hZUEVSVikJCSs9IGh2Lwogb2JqLSQoQ09ORklHX1ZNRV9CVVMpCQkrPSB2bWUvCi1vYmotJChDT05GSUdfUkFSX1JFR0lTVEVSKQkrPSByYXJfcmVnaXN0ZXIvCiBvYmotJChDT05GSUdfTVJTVF9SQVJfSEFORExFUikJKz0gbWVtcmFyLwogb2JqLSQoQ09ORklHX0RYX1NFUCkJCSs9IHNlcC8KIG9iai0kKENPTkZJR19JSU8pCQkrPSBpaW8vCi1vYmotJChDT05GSUdfUkFNWlNXQVApCQkrPSByYW16c3dhcC8KK29iai0kKENPTkZJR19aUkFNKQkJKz0genJhbS8KIG9iai0kKENPTkZJR19XTEFHUzQ5X0gyKQkrPSB3bGFnczQ5X2gyLwogb2JqLSQoQ09ORklHX1dMQUdTNDlfSDI1KQkrPSB3bGFnczQ5X2gyNS8KIG9iai0kKENPTkZJR19CQVRNQU5fQURWKQkrPSBiYXRtYW4tYWR2Lwogb2JqLSQoQ09ORklHX1NBTVNVTkdfTEFQVE9QKQkrPSBzYW1zdW5nLWxhcHRvcC8KIG9iai0kKENPTkZJR19GQl9TTTdYWCkJCSs9IHNtN3h4Lwotb2JqLSQoQ09ORklHX0RUMzE1NSkJCSs9IGR0MzE1NS8KIG9iai0kKENPTkZJR19WSURFT19EVDMxNTUpCSs9IGR0MzE1NXY0bC8KIG9iai0kKENPTkZJR19DUllTVEFMSEQpCQkrPSBjcnlzdGFsaGQvCiBvYmotJChDT05GSUdfQ1hUMUUxKQkJKz0gY3h0MWUxLwpAQCAtNTQsMyArNTQsNyBAQAogb2JqLSQoQ09ORklHX0ZCX1hHSSkJCSs9IHhnaWZiLwogb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX01SU1RPVUNIKQkrPSBtcnN0LXRvdWNoc2NyZWVuLwogb2JqLSQoQ09ORklHX01TTV9TVEFHSU5HKQkrPSBtc20vCitvYmotJChDT05GSUdfRUFTWUNBUCkJCSs9IGVhc3ljYXAvCitvYmotJChDT05GSUdfU09MTzZYMTApCQkrPSBzb2xvNngxMC8KK29iai0kKENPTkZJR19USURTUEJSSURHRSkJKz0gdGlkc3BicmlkZ2UvCitvYmotJChDT05GSUdfQUNQSV9RVUlDS1NUQVJUKQkrPSBxdWlja3N0YXJ0LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FkaXMxNjI1NS9hZGlzMTYyNTUuYyBiL2RyaXZlcnMvc3RhZ2luZy9hZGlzMTYyNTUvYWRpczE2MjU1LmMKaW5kZXggNTVkNjZlMi4uYzNlNmE0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FkaXMxNjI1NS9hZGlzMTYyNTUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYWRpczE2MjU1L2FkaXMxNjI1NS5jCkBAIC0zMDMsNyArMzAzLDcgQEAKIAlpZiAoc3RhdHVzICE9IDApCiAJCWdvdG8gZXJyOwogCWlmICh2YWx1ZSAhPSAweDA4MDApIHsKLQkJZGV2X3dhcm4oJnNwaWFkaXMtPnNwaS0+ZGV2LCAiU2NhbGUgZmFjdG9yIGlzIG5vbmUgZGVmYXVsdCIKKwkJZGV2X3dhcm4oJnNwaWFkaXMtPnNwaS0+ZGV2LCAiU2NhbGUgZmFjdG9yIGlzIG5vbmUgZGVmYXVsdCAiCiAJCQkJInZhbHVlICglLjR4KVxuIiwgdmFsdWUpOwogCX0KIApAQCAtMzM4LDcgKzMzOCw3IEBACiAJCQlzdGF0dXMgPSAtRU5PREVWOwogCQkJZ290byBlcnI7CiAJCX0gZWxzZSBpZiAodmFsdWUgJiAweDMpCXsKLQkJCWRldl93YXJuKCZzcGlhZGlzLT5zcGktPmRldiwgIlNlbnNvciB2b2x0YWdlIgorCQkJZGV2X3dhcm4oJnNwaWFkaXMtPnNwaS0+ZGV2LCAiU2Vuc29yIHZvbHRhZ2UgIgogCQkJCQkJIm91dCBvZiByYW5nZS5cbiIpOwogCQkJc3RhdHVzID0gLUVOT0RFVjsKIAkJCWdvdG8gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvQ0hBTkdFTE9HIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvQ0hBTkdFTE9HCmluZGV4IGM4ZjlkOWUuLjg2NDUwYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L0NIQU5HRUxPRworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9DSEFOR0VMT0cKQEAgLTEsMyArMSwxNSBAQAorYmF0bWFuLWFkdiAyMDEwLjAuMDoKKworKiBzdXBwb3J0IGxhdGVzdCBrZXJuZWxzICgyLjYuMjEgLSAyLjYuMzUpCisqIGZ1cnRoZXIgY29kZSByZWZhY3RvcmluZyBhbmQgY2xlYW5pbmcgZm9yIGNvZGluZyBzdHlsZQorKiBtb3ZlIGZyb20gcHJvY2ZzIGJhc2VkIGNvbmZpZ3VyYXRpb24gdG8gc3lzZnMKKyogcmVvcmdhbml6ZWQgc2VxdWVuY2UgbnVtYmVyIGhhbmRsaW5nCisqIGxpbWl0IHF1ZXVlIGxlbmd0aHMgZm9yIGJhdG1hbiBhbmQgYnJvYWRjYXN0IHBhY2tldHMKKyogbWFueSBidWdzIChlbmRsZXNzIGxvb3AgYW5kIHJvZ3VlIHBhY2tldHMgb24gc2h1dGRvd24sIHdyb25nIHRjcGR1bXAgb3V0cHV0LAorICBtaXNzaW5nIGZyZWVzIGluIGVycm9yIHNpdHVhdGlvbnMsIHNsZWVwcyBpbiBhdG9taWMgY29udGV4dHMpIHNxdWFzaGVkCisKKyAtLSBGcmksIDE4IEp1biAyMDEwIDIxOjM0OjI2ICswMjAwCisKIGJhdG1hbi1hZHYgMC4yLjE6CiAKICogc3VwcG9ydCBsYXRlc3Qga2VybmVscyAoMi42LjIwIC0gMi42LjMzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L0tjb25maWcKaW5kZXggMWU3ZTBhOC4uODU1M2YzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9LY29uZmlnCkBAIC00LDcgKzQsNyBAQAogCiBjb25maWcgQkFUTUFOX0FEVgogCXRyaXN0YXRlICJCLkEuVC5NLkEuTi4gQWR2YW5jZWQgTWVzaGluZyBQcm90b2NvbCIKLQlkZXBlbmRzIG9uIFBST0NfRlMgJiYgTkVUCisJZGVwZW5kcyBvbiBORVQKICAgICAgICAgZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L01ha2VmaWxlCmluZGV4IGYyNTA2OGMuLmU5ODE3YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L01ha2VmaWxlCkBAIC0xOCw1ICsxOCw1IEBACiAjIDAyMTEwLTEzMDEsIFVTQQogIwogCi1vYmotbSArPSBiYXRtYW4tYWR2Lm8KLWJhdG1hbi1hZHYtb2JqcyA6PSBtYWluLm8gc2VuZC5vIHJvdXRpbmcubyBzb2Z0LWludGVyZmFjZS5vIGRldmljZS5vIHRyYW5zbGF0aW9uLXRhYmxlLm8gYml0YXJyYXkubyBoYXNoLm8gcmluZ19idWZmZXIubyB2aXMubyBoYXJkLWludGVyZmFjZS5vIGFnZ3JlZ2F0aW9uLm8gb3JpZ2luYXRvci5vIGJhdF9zeXNmcy5vCitvYmotJChDT05GSUdfQkFUTUFOX0FEVikgKz0gYmF0bWFuLWFkdi5vCitiYXRtYW4tYWR2LW9ianMgOj0gbWFpbi5vIGJhdF9kZWJ1Z2ZzLm8gYmF0X3N5c2ZzLm8gc2VuZC5vIHJvdXRpbmcubyBzb2Z0LWludGVyZmFjZS5vIGljbXBfc29ja2V0Lm8gdHJhbnNsYXRpb24tdGFibGUubyBiaXRhcnJheS5vIGhhc2gubyByaW5nX2J1ZmZlci5vIHZpcy5vIGhhcmQtaW50ZXJmYWNlLm8gYWdncmVnYXRpb24ubyBvcmlnaW5hdG9yLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L1JFQURNRSBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L1JFQURNRQppbmRleCAxNDI0NGEyLi43MTkyYjdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9SRUFETUUKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvUkVBRE1FCkBAIC0xLDQgKzEsNCBAQAotW3N0YXRlOiAwMy0wNS0yMDEwXQorW3N0YXRlOiAxMi0wNi0yMDEwXQogCiBCQVRNQU4tQURWCiAtLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvVE9ETwppbmRleCA1MThkYjdmLi45YzVhZWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L1RPRE8KQEAgLTEsNiArMSw5IEBACi1SZXF1ZXN0IGEgcmV2aWV3LgotUHJvY2VzcyB0aGUgY29tbWVudHMgZnJvbSB0aGUgcmV2aWV3LgotTW92ZSBpbnRvIG1haW5saW5lIHByb3Blci4KKyAqIFVzZSBod2VpZ2h0KiBmb3IgaGFtbWluZyB3ZWlnaHQgY2FsY3VsYXRpb24KKyAqIFNhdmUvY2FjaGUgcGFja2V0cyBkaXJla3RseSBhcyBza2IgaW5zdGVhZCBvZiB1c2luZyBhIG5vcm1hbCBtZW1vcnkgcmVnaW9uCisgICBhbmQgY29weWluZyBpdCBpbiBhIHNrYiB1c2luZyBzZW5kX3Jhd19wYWNrZXQgYW5kIHNpbWlsYXIgZnVuY3Rpb25zCisgKiBSZXF1ZXN0IGEgbmV3IHJldmlldworICogUHJvY2VzcyB0aGUgY29tbWVudHMgZnJvbSB0aGUgcmV2aWV3CisgKiBNb3ZlIGludG8gbWFpbmxpbmUgcHJvcGVyCiAKIFBsZWFzZSBzZW5kIGFsbCBwYXRjaGVzIHRvOgogCU1hcmVrIExpbmRuZXIgPGxpbmRuZXJfbWFyZWtAeWFob28uZGU+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9hZ2dyZWdhdGlvbi5jIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvYWdncmVnYXRpb24uYwppbmRleCBjZThiOGE2Li45ODYyZDE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9hZ2dyZWdhdGlvbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2FnZ3JlZ2F0aW9uLmMKQEAgLTEwNiwxMSArMTA2LDE0IEBACiB7CiAJc3RydWN0IGZvcndfcGFja2V0ICpmb3J3X3BhY2tldF9hZ2dyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJLyogRklYTUU6IGVhY2ggYmF0bWFuX2lmIHdpbGwgYmUgYXR0YWNoZWQgdG8gYSBzb2Z0aWYgKi8KKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoc29mdF9kZXZpY2UpOwogCiAJLyogb3duIHBhY2tldCBzaG91bGQgYWx3YXlzIGJlIHNjaGVkdWxlZCAqLwogCWlmICghb3duX3BhY2tldCkgewogCQlpZiAoIWF0b21pY19kZWNfbm90X3plcm8oJmJhdG1hbl9xdWV1ZV9sZWZ0KSkgewotCQkJYmF0X2RiZyhEQkdfQkFUTUFOLCAiYmF0bWFuIHBhY2tldCBxdWV1ZSBmdWxsXG4iKTsKKwkJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCQkJImJhdG1hbiBwYWNrZXQgcXVldWUgZnVsbFxuIik7CiAJCQlyZXR1cm47CiAJCX0KIAl9CkBAIC0yNTIsOSArMjU1LDkgQEAKIAl3aGlsZSAoYWdncmVnYXRlZF9wYWNrZXQoYnVmZl9wb3MsIHBhY2tldF9sZW4sCiAJCQkJIGJhdG1hbl9wYWNrZXQtPm51bV9obmEpKSB7CiAKLQkJLyogbmV0d29yayB0byBob3N0IG9yZGVyIGZvciBvdXIgMTZiaXQgc2Vxbm8sIGFuZCB0aGUKKwkJLyogbmV0d29yayB0byBob3N0IG9yZGVyIGZvciBvdXIgMzJiaXQgc2Vxbm8sIGFuZCB0aGUKIAkJICAgb3JpZ19pbnRlcnZhbC4gKi8KLQkJYmF0bWFuX3BhY2tldC0+c2Vxbm8gPSBudG9ocyhiYXRtYW5fcGFja2V0LT5zZXFubyk7CisJCWJhdG1hbl9wYWNrZXQtPnNlcW5vID0gbnRvaGwoYmF0bWFuX3BhY2tldC0+c2Vxbm8pOwogCiAJCWhuYV9idWZmID0gcGFja2V0X2J1ZmYgKyBidWZmX3BvcyArIEJBVF9QQUNLRVRfTEVOOwogCQlyZWNlaXZlX2JhdF9wYWNrZXQoZXRoaGRyLCBiYXRtYW5fcGFja2V0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvYWdncmVnYXRpb24uaCBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2FnZ3JlZ2F0aW9uLmgKaW5kZXggODQ0MDFjYS4uNzFhOTFiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvYWdncmVnYXRpb24uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9hZ2dyZWdhdGlvbi5oCkBAIC0xOSw2ICsxOSw5IEBACiAgKgogICovCiAKKyNpZm5kZWYgX05FVF9CQVRNQU5fQURWX0FHR1JFR0FUSU9OX0hfCisjZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9BR0dSRUdBVElPTl9IXworCiAjaW5jbHVkZSAibWFpbi5oIgogCiAvKiBpcyB0aGVyZSBhbm90aGVyIGFnZ3JlZ2F0ZWQgcGFja2V0IGhlcmU/ICovCkBAIC0zNiwzICszOSw1IEBACiAJCQkgICAgdW5zaWduZWQgbG9uZyBzZW5kX3RpbWUpOwogdm9pZCByZWNlaXZlX2FnZ3JfYmF0X3BhY2tldChzdHJ1Y3QgZXRoaGRyICpldGhoZHIsIHVuc2lnbmVkIGNoYXIgKnBhY2tldF9idWZmLAogCQkJICAgICBpbnQgcGFja2V0X2xlbiwgc3RydWN0IGJhdG1hbl9pZiAqaWZfaW5jb21pbmcpOworCisjZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX0FHR1JFR0FUSU9OX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9iYXRfZGVidWdmcy5jIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvYmF0X2RlYnVnZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDdkYTY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvYmF0X2RlYnVnZnMuYwpAQCAtMCwwICsxLDM0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBCLkEuVC5NLkEuTi4gY29udHJpYnV0b3JzOgorICoKKyAqIE1hcmVrIExpbmRuZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQQorICoKKyAqLworCisjaW5jbHVkZSAibWFpbi5oIgorCisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorCisjaW5jbHVkZSAiYmF0X2RlYnVnZnMuaCIKKyNpbmNsdWRlICJ0cmFuc2xhdGlvbi10YWJsZS5oIgorI2luY2x1ZGUgIm9yaWdpbmF0b3IuaCIKKyNpbmNsdWRlICJoYXJkLWludGVyZmFjZS5oIgorI2luY2x1ZGUgInZpcy5oIgorI2luY2x1ZGUgImljbXBfc29ja2V0LmgiCisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpiYXRfZGVidWdmczsKKworI2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0RFQlVHCisjZGVmaW5lIExPR19CVUZGX01BU0sgKGxvZ19idWZmX2xlbi0xKQorI2RlZmluZSBMT0dfQlVGRihpZHgpIChkZWJ1Z19sb2ctPmxvZ19idWZmWyhpZHgpICYgTE9HX0JVRkZfTUFTS10pCisKK3N0YXRpYyBpbnQgbG9nX2J1ZmZfbGVuID0gTE9HX0JVRl9MRU47CisKK3N0YXRpYyB2b2lkIGVtaXRfbG9nX2NoYXIoc3RydWN0IGRlYnVnX2xvZyAqZGVidWdfbG9nLCBjaGFyIGMpCit7CisJTE9HX0JVRkYoZGVidWdfbG9nLT5sb2dfZW5kKSA9IGM7CisJZGVidWdfbG9nLT5sb2dfZW5kKys7CisKKwlpZiAoZGVidWdfbG9nLT5sb2dfZW5kIC0gZGVidWdfbG9nLT5sb2dfc3RhcnQgPiBsb2dfYnVmZl9sZW4pCisJCWRlYnVnX2xvZy0+bG9nX3N0YXJ0ID0gZGVidWdfbG9nLT5sb2dfZW5kIC0gbG9nX2J1ZmZfbGVuOworfQorCitzdGF0aWMgaW50IGZkZWJ1Z19sb2coc3RydWN0IGRlYnVnX2xvZyAqZGVidWdfbG9nLCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgcHJpbnRlZF9sZW47CisJdmFfbGlzdCBhcmdzOworCXN0YXRpYyBjaGFyIGRlYnVnX2xvZ19idWZbMjU2XTsKKwljaGFyICpwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIWRlYnVnX2xvZykKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGVidWdfbG9nLT5sb2NrLCBmbGFncyk7CisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlwcmludGVkX2xlbiA9IHZzY25wcmludGYoZGVidWdfbG9nX2J1Ziwgc2l6ZW9mKGRlYnVnX2xvZ19idWYpLAorCQkJCSBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKworCWZvciAocCA9IGRlYnVnX2xvZ19idWY7ICpwICE9IDA7IHArKykKKwkJZW1pdF9sb2dfY2hhcihkZWJ1Z19sb2csICpwKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlYnVnX2xvZy0+bG9jaywgZmxhZ3MpOworCisJd2FrZV91cCgmZGVidWdfbG9nLT5xdWV1ZV93YWl0KTsKKworCXJldHVybiAwOworfQorCitpbnQgZGVidWdfbG9nKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsIGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwljaGFyIHRtcF9sb2dfYnVmWzI1Nl07CisKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCXZzY25wcmludGYodG1wX2xvZ19idWYsIHNpemVvZih0bXBfbG9nX2J1ZiksIGZtdCwgYXJncyk7CisJZmRlYnVnX2xvZyhiYXRfcHJpdi0+ZGVidWdfbG9nLCAiWyUxMHVdICVzIiwKKwkJICAgKGppZmZpZXMgLyBIWiksIHRtcF9sb2dfYnVmKTsKKwl2YV9lbmQoYXJncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb2dfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOworCWluY19tb2R1bGVfY291bnQoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb2dfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlkZWNfbW9kdWxlX2NvdW50KCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGxvZ19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGVidWdfbG9nICpkZWJ1Z19sb2cgPSBiYXRfcHJpdi0+ZGVidWdfbG9nOworCWludCBlcnJvciwgaSA9IDA7CisJY2hhciBjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSAmJgorCSAgICAhKGRlYnVnX2xvZy0+bG9nX2VuZCAtIGRlYnVnX2xvZy0+bG9nX3N0YXJ0KSkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlpZiAoKCFidWYpIHx8IChjb3VudCA8IDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKworCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgYnVmLCBjb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJZXJyb3IgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGVidWdfbG9nLT5xdWV1ZV93YWl0LAorCQkJCShkZWJ1Z19sb2ctPmxvZ19zdGFydCAtIGRlYnVnX2xvZy0+bG9nX2VuZCkpOworCisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGVidWdfbG9nLT5sb2NrLCBmbGFncyk7CisKKwl3aGlsZSAoKCFlcnJvcikgJiYgKGkgPCBjb3VudCkgJiYKKwkgICAgICAgKGRlYnVnX2xvZy0+bG9nX3N0YXJ0ICE9IGRlYnVnX2xvZy0+bG9nX2VuZCkpIHsKKwkJYyA9IExPR19CVUZGKGRlYnVnX2xvZy0+bG9nX3N0YXJ0KTsKKworCQlkZWJ1Z19sb2ctPmxvZ19zdGFydCsrOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlYnVnX2xvZy0+bG9jaywgZmxhZ3MpOworCisJCWVycm9yID0gX19wdXRfdXNlcihjLCBidWYpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZWJ1Z19sb2ctPmxvY2ssIGZsYWdzKTsKKworCQlidWYrKzsKKwkJaSsrOworCisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVidWdfbG9nLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoIWVycm9yKQorCQlyZXR1cm4gaTsKKworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBsb2dfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkZWJ1Z19sb2cgKmRlYnVnX2xvZyA9IGJhdF9wcml2LT5kZWJ1Z19sb2c7CisKKwlwb2xsX3dhaXQoZmlsZSwgJmRlYnVnX2xvZy0+cXVldWVfd2FpdCwgd2FpdCk7CisKKwlpZiAoZGVidWdfbG9nLT5sb2dfZW5kIC0gZGVidWdfbG9nLT5sb2dfc3RhcnQpCisJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxvZ19mb3BzID0geworCS5vcGVuICAgICAgICAgICA9IGxvZ19vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IGxvZ19yZWxlYXNlLAorCS5yZWFkICAgICAgICAgICA9IGxvZ19yZWFkLAorCS5wb2xsICAgICAgICAgICA9IGxvZ19wb2xsLAorfTsKKworc3RhdGljIGludCBkZWJ1Z19sb2dfc2V0dXAoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkOworCisJaWYgKCFiYXRfcHJpdi0+ZGVidWdfZGlyKQorCQlnb3RvIGVycjsKKworCWJhdF9wcml2LT5kZWJ1Z19sb2cgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGVidWdfbG9nKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFiYXRfcHJpdi0+ZGVidWdfbG9nKQorCQlnb3RvIGVycjsKKworCXNwaW5fbG9ja19pbml0KCZiYXRfcHJpdi0+ZGVidWdfbG9nLT5sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZiYXRfcHJpdi0+ZGVidWdfbG9nLT5xdWV1ZV93YWl0KTsKKworCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJsb2ciLCBTX0lGUkVHIHwgU19JUlVTUiwKKwkJCQliYXRfcHJpdi0+ZGVidWdfZGlyLCBiYXRfcHJpdiwgJmxvZ19mb3BzKTsKKwlpZiAoZCkKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBkZWJ1Z19sb2dfY2xlYW51cChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KQoreworCWtmcmVlKGJhdF9wcml2LT5kZWJ1Z19sb2cpOworCWJhdF9wcml2LT5kZWJ1Z19sb2cgPSBOVUxMOworfQorI2Vsc2UgLyogQ09ORklHX0JBVE1BTl9BRFZfREVCVUcgKi8KK3N0YXRpYyBpbnQgZGVidWdfbG9nX3NldHVwKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCit7CisJYmF0X3ByaXYtPmRlYnVnX2xvZyA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRlYnVnX2xvZ19jbGVhbnVwKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCit7CisJcmV0dXJuOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgb3JpZ2luYXRvcnNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWlub2RlLT5pX3ByaXZhdGU7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIG9yaWdfc2VxX3ByaW50X3RleHQsIG5ldF9kZXYpOworfQorCitzdGF0aWMgaW50IHRyYW5zdGFibGVfZ2xvYmFsX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilpbm9kZS0+aV9wcml2YXRlOworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBobmFfZ2xvYmFsX3NlcV9wcmludF90ZXh0LCBuZXRfZGV2KTsKK30KKworc3RhdGljIGludCB0cmFuc3RhYmxlX2xvY2FsX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilpbm9kZS0+aV9wcml2YXRlOworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBobmFfbG9jYWxfc2VxX3ByaW50X3RleHQsIG5ldF9kZXYpOworfQorCitzdGF0aWMgaW50IHZpc19kYXRhX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilpbm9kZS0+aV9wcml2YXRlOworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCB2aXNfc2VxX3ByaW50X3RleHQsIG5ldF9kZXYpOworfQorCitzdHJ1Y3QgYmF0X2RlYnVnaW5mbyB7CisJc3RydWN0IGF0dHJpYnV0ZSBhdHRyOworCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wczsKK307CisKKyNkZWZpbmUgQkFUX0RFQlVHSU5GTyhfbmFtZSwgX21vZGUsIF9vcGVuKQlcCitzdHJ1Y3QgYmF0X2RlYnVnaW5mbyBiYXRfZGVidWdpbmZvXyMjX25hbWUgPSB7CVwKKwkuYXR0ciA9IHsgLm5hbWUgPSBfX3N0cmluZ2lmeShfbmFtZSksCVwKKwkJICAubW9kZSA9IF9tb2RlLCB9LAkJXAorCS5mb3BzID0geyAub3duZXIgPSBUSElTX01PRFVMRSwJCVwKKwkJICAub3BlbiA9IF9vcGVuLAkJXAorCQkgIC5yZWFkCT0gc2VxX3JlYWQsCQlcCisJCSAgLmxsc2VlayA9IHNlcV9sc2VlaywJCVwKKwkJICAucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAlcCisJCX0JCQkJXAorfTsKKworc3RhdGljIEJBVF9ERUJVR0lORk8ob3JpZ2luYXRvcnMsIFNfSVJVR08sIG9yaWdpbmF0b3JzX29wZW4pOworc3RhdGljIEJBVF9ERUJVR0lORk8odHJhbnN0YWJsZV9nbG9iYWwsIFNfSVJVR08sIHRyYW5zdGFibGVfZ2xvYmFsX29wZW4pOworc3RhdGljIEJBVF9ERUJVR0lORk8odHJhbnN0YWJsZV9sb2NhbCwgU19JUlVHTywgdHJhbnN0YWJsZV9sb2NhbF9vcGVuKTsKK3N0YXRpYyBCQVRfREVCVUdJTkZPKHZpc19kYXRhLCBTX0lSVUdPLCB2aXNfZGF0YV9vcGVuKTsKKworc3RhdGljIHN0cnVjdCBiYXRfZGVidWdpbmZvICptZXNoX2RlYnVnaW5mb3NbXSA9IHsKKwkmYmF0X2RlYnVnaW5mb19vcmlnaW5hdG9ycywKKwkmYmF0X2RlYnVnaW5mb190cmFuc3RhYmxlX2dsb2JhbCwKKwkmYmF0X2RlYnVnaW5mb190cmFuc3RhYmxlX2xvY2FsLAorCSZiYXRfZGVidWdpbmZvX3Zpc19kYXRhLAorCU5VTEwsCit9OworCit2b2lkIGRlYnVnZnNfaW5pdCh2b2lkKQoreworCWJhdF9kZWJ1Z2ZzID0gZGVidWdmc19jcmVhdGVfZGlyKERFQlVHRlNfQkFUX1NVQkRJUiwgTlVMTCk7CisJaWYgKGJhdF9kZWJ1Z2ZzID09IEVSUl9QVFIoLUVOT0RFVikpCisJCWJhdF9kZWJ1Z2ZzID0gTlVMTDsKK30KKwordm9pZCBkZWJ1Z2ZzX2Rlc3Ryb3kodm9pZCkKK3sKKwlpZiAoYmF0X2RlYnVnZnMpIHsKKwkJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGJhdF9kZWJ1Z2ZzKTsKKwkJYmF0X2RlYnVnZnMgPSBOVUxMOworCX0KK30KKworaW50IGRlYnVnZnNfYWRkX21lc2hpZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBiYXRfZGVidWdpbmZvICoqYmF0X2RlYnVnOworCXN0cnVjdCBkZW50cnkgKmZpbGU7CisKKwlpZiAoIWJhdF9kZWJ1Z2ZzKQorCQlnb3RvIG91dDsKKworCWJhdF9wcml2LT5kZWJ1Z19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGV2LT5uYW1lLCBiYXRfZGVidWdmcyk7CisJaWYgKCFiYXRfcHJpdi0+ZGVidWdfZGlyKQorCQlnb3RvIG91dDsKKworCWJhdF9zb2NrZXRfc2V0dXAoYmF0X3ByaXYpOworCWRlYnVnX2xvZ19zZXR1cChiYXRfcHJpdik7CisKKwlmb3IgKGJhdF9kZWJ1ZyA9IG1lc2hfZGVidWdpbmZvczsgKmJhdF9kZWJ1ZzsgKytiYXRfZGVidWcpIHsKKwkJZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoKCgqYmF0X2RlYnVnKS0+YXR0cikubmFtZSwKKwkJCQkJICBTX0lGUkVHIHwgKCgqYmF0X2RlYnVnKS0+YXR0cikubW9kZSwKKwkJCQkJICBiYXRfcHJpdi0+ZGVidWdfZGlyLAorCQkJCQkgIGRldiwgJigqYmF0X2RlYnVnKS0+Zm9wcyk7CisJCWlmICghZmlsZSkgeworCQkJYmF0X2VycihkZXYsICJDYW4ndCBhZGQgZGVidWdmcyBmaWxlOiAlcy8lc1xuIiwKKwkJCQlkZXYtPm5hbWUsICgoKmJhdF9kZWJ1ZyktPmF0dHIpLm5hbWUpOworCQkJZ290byByZW1fYXR0cjsKKwkJfQorCX0KKworCXJldHVybiAwOworcmVtX2F0dHI6CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGJhdF9wcml2LT5kZWJ1Z19kaXIpOworCWJhdF9wcml2LT5kZWJ1Z19kaXIgPSBOVUxMOworb3V0OgorI2lmZGVmIENPTkZJR19ERUJVR19GUworCXJldHVybiAtRU5PTUVNOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZiAvKiBDT05GSUdfREVCVUdfRlMgKi8KK30KKwordm9pZCBkZWJ1Z2ZzX2RlbF9tZXNoaWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWRlYnVnX2xvZ19jbGVhbnVwKGJhdF9wcml2KTsKKworCWlmIChiYXRfZGVidWdmcykgeworCQlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoYmF0X3ByaXYtPmRlYnVnX2Rpcik7CisJCWJhdF9wcml2LT5kZWJ1Z19kaXIgPSBOVUxMOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2JhdF9kZWJ1Z2ZzLmggYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9iYXRfZGVidWdmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZGY1MzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9iYXRfZGVidWdmcy5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQi5BLlQuTS5BLk4uIGNvbnRyaWJ1dG9yczoKKyAqCisgKiBNYXJlayBMaW5kbmVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EKKyAqCisgKi8KKworCisjaWZuZGVmIF9ORVRfQkFUTUFOX0FEVl9ERUJVR0ZTX0hfCisjZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9ERUJVR0ZTX0hfCisKKyNkZWZpbmUgREVCVUdGU19CQVRfU1VCRElSICJiYXRtYW5fYWR2IgorCit2b2lkIGRlYnVnZnNfaW5pdCh2b2lkKTsKK3ZvaWQgZGVidWdmc19kZXN0cm95KHZvaWQpOworaW50IGRlYnVnZnNfYWRkX21lc2hpZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3ZvaWQgZGVidWdmc19kZWxfbWVzaGlmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCisjZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX0RFQlVHRlNfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2JhdF9zeXNmcy5jIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvYmF0X3N5c2ZzLmMKaW5kZXggMjEyYmMyMS4uYjRhOGQ1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvYmF0X3N5c2ZzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvYmF0X3N5c2ZzLmMKQEAgLTI4LDIyICsyOCw2IEBACiAKICNkZWZpbmUgdG9fZGV2KG9iaikgICAgIGNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopCiAKLXN0cnVjdCBiYXRfYXR0cmlidXRlIHsKLQlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7Ci0Jc3NpemVfdCAoKnNob3cpKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAotCQkJY2hhciAqYnVmKTsKLQlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAotCQkJIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKLX07Ci0KLXN0cnVjdCBoYXJkaWZfYXR0cmlidXRlIHsKLQlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7Ci0Jc3NpemVfdCAoKnNob3cpKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAotCQkJY2hhciAqYnVmKTsKLQlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAotCQkJIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKLX07Ci0KICNkZWZpbmUgQkFUX0FUVFIoX25hbWUsIF9tb2RlLCBfc2hvdywgX3N0b3JlKQlcCiBzdHJ1Y3QgYmF0X2F0dHJpYnV0ZSBiYXRfYXR0cl8jI19uYW1lID0gewlcCiAJLmF0dHIgPSB7Lm5hbWUgPSBfX3N0cmluZ2lmeShfbmFtZSksCVwKQEAgLTUyLDM0ICszNiwxOCBAQAogCS5zdG9yZSAgPSBfc3RvcmUsCQkJXAogfTsKIAotI2RlZmluZSBCQVRfQklOX0FUVFIoX25hbWUsIF9tb2RlLCBfcmVhZCwgX3dyaXRlKQlcCi1zdHJ1Y3QgYmluX2F0dHJpYnV0ZSBiYXRfYXR0cl8jI19uYW1lID0gewkJXAotCS5hdHRyID0geyAubmFtZSA9IF9fc3RyaW5naWZ5KF9uYW1lKSwJCVwKLQkJICAubW9kZSA9IF9tb2RlLCB9LAkJCVwKLQkucmVhZCA9IF9yZWFkLAkJCQkJXAotCS53cml0ZSA9IF93cml0ZSwJCQkJXAotfTsKLQotI2RlZmluZSBIQVJESUZfQVRUUihfbmFtZSwgX21vZGUsIF9zaG93LCBfc3RvcmUpCVwKLXN0cnVjdCBoYXJkaWZfYXR0cmlidXRlIGhhcmRpZl9hdHRyXyMjX25hbWUgPSB7CQlcCi0JLmF0dHIgPSB7Lm5hbWUgPSBfX3N0cmluZ2lmeShfbmFtZSksCQlcCi0JCSAubW9kZSA9IF9tb2RlIH0sCQkJXAotCS5zaG93ICAgPSBfc2hvdywJCQkJXAotCS5zdG9yZSAgPSBfc3RvcmUsCQkJCVwKLX07Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfYWdncl9vZ20oc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCitzdGF0aWMgc3NpemVfdCBzaG93X2FnZ3Jfb2dtcyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgICAgY2hhciAqYnVmZikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXYoa29iai0+cGFyZW50KTsKIAlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYodG9fbmV0X2RldihkZXYpKTsKIAlpbnQgYWdncl9zdGF0dXMgPSBhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmFnZ3JlZ2F0aW9uX2VuYWJsZWQpOwogCi0JcmV0dXJuIHNwcmludGYoYnVmZiwgInN0YXR1czogJXNcbmNvbW1hbmRzOiBlbmFibGUsIGRpc2FibGUsIDAsIDFcbiIsCisJcmV0dXJuIHNwcmludGYoYnVmZiwgIiVzXG4iLAogCQkgICAgICAgYWdncl9zdGF0dXMgPT0gMCA/ICJkaXNhYmxlZCIgOiAiZW5hYmxlZCIpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9hZ2dyX29nbShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2FnZ3Jfb2dtcyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgICAgIGNoYXIgKmJ1ZmYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXYoa29iai0+cGFyZW50KTsKQEAgLTk5LDIzICs2Nyw3MyBAQAogCQlpZiAoYnVmZltjb3VudCAtIDFdID09ICdcbicpCiAJCQlidWZmW2NvdW50IC0gMV0gPSAnXDAnOwogCi0JCXByaW50ayhLRVJOX0lORk8gImJhdG1hbi1hZHY6SW52YWxpZCBwYXJhbWV0ZXIgZm9yICdhZ2dyZWdhdGUgT0dNJyBzZXR0aW5nIG9uIG1lc2ggJXMgcmVjZWl2ZWQ6ICVzXG4iLAotCQkgICAgICAgbmV0X2Rldi0+bmFtZSwgYnVmZik7CisJCWJhdF9pbmZvKG5ldF9kZXYsCisJCQkgIkludmFsaWQgcGFyYW1ldGVyIGZvciAnYWdncmVnYXRlIE9HTScgc2V0dGluZyIKKwkJCSAicmVjZWl2ZWQ6ICVzXG4iLCBidWZmKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKGF0b21pY19yZWFkKCZiYXRfcHJpdi0+YWdncmVnYXRpb25fZW5hYmxlZCkgPT0gYWdncl90bXApCiAJCXJldHVybiBjb3VudDsKIAotCXByaW50ayhLRVJOX0lORk8gImJhdG1hbi1hZHY6Q2hhbmdpbmcgYWdncmVnYXRpb24gZnJvbTogJXMgdG86ICVzIG9uIG1lc2g6ICVzXG4iLAotCSAgICAgICBhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmFnZ3JlZ2F0aW9uX2VuYWJsZWQpID09IDEgPwotCSAgICAgICAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLCBhZ2dyX3RtcCA9PSAxID8gImVuYWJsZWQiIDogImRpc2FibGVkIiwKLQkgICAgICAgbmV0X2Rldi0+bmFtZSk7CisJYmF0X2luZm8obmV0X2RldiwgIkNoYW5naW5nIGFnZ3JlZ2F0aW9uIGZyb206ICVzIHRvOiAlc1xuIiwKKwkJIGF0b21pY19yZWFkKCZiYXRfcHJpdi0+YWdncmVnYXRpb25fZW5hYmxlZCkgPT0gMSA/CisJCSAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLCBhZ2dyX3RtcCA9PSAxID8gImVuYWJsZWQiIDoKKwkJICJkaXNhYmxlZCIpOwogCiAJYXRvbWljX3NldCgmYmF0X3ByaXYtPmFnZ3JlZ2F0aW9uX2VuYWJsZWQsICh1bnNpZ25lZClhZ2dyX3RtcCk7CiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgc3NpemVfdCBzaG93X2JvbmQoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNoYXIgKmJ1ZmYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2KGtvYmotPnBhcmVudCk7CisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KHRvX25ldF9kZXYoZGV2KSk7CisJaW50IGJvbmRfc3RhdHVzID0gYXRvbWljX3JlYWQoJmJhdF9wcml2LT5ib25kaW5nX2VuYWJsZWQpOworCisJcmV0dXJuIHNwcmludGYoYnVmZiwgIiVzXG4iLAorCQkgICAgICAgYm9uZF9zdGF0dXMgPT0gMCA/ICJkaXNhYmxlZCIgOiAiZW5hYmxlZCIpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9ib25kKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCQkJICBjaGFyICpidWZmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2KGtvYmotPnBhcmVudCk7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSB0b19uZXRfZGV2KGRldik7CisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KG5ldF9kZXYpOworCWludCBib25kaW5nX2VuYWJsZWRfdG1wID0gLTE7CisKKwlpZiAoKChjb3VudCA9PSAyKSAmJiAoYnVmZlswXSA9PSAnMScpKSB8fAorCSAgICAoc3RybmNtcChidWZmLCAiZW5hYmxlIiwgNikgPT0gMCkpCisJCWJvbmRpbmdfZW5hYmxlZF90bXAgPSAxOworCisJaWYgKCgoY291bnQgPT0gMikgJiYgKGJ1ZmZbMF0gPT0gJzAnKSkgfHwKKwkgICAgKHN0cm5jbXAoYnVmZiwgImRpc2FibGUiLCA3KSA9PSAwKSkKKwkJYm9uZGluZ19lbmFibGVkX3RtcCA9IDA7CisKKwlpZiAoYm9uZGluZ19lbmFibGVkX3RtcCA8IDApIHsKKwkJaWYgKGJ1ZmZbY291bnQgLSAxXSA9PSAnXG4nKQorCQkJYnVmZltjb3VudCAtIDFdID0gJ1wwJzsKKworCQliYXRfZXJyKG5ldF9kZXYsCisJCQkiSW52YWxpZCBwYXJhbWV0ZXIgZm9yICdib25kaW5nJyBzZXR0aW5nIHJlY2VpdmVkOiAiCisJCQkiJXNcbiIsIGJ1ZmYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoYXRvbWljX3JlYWQoJmJhdF9wcml2LT5ib25kaW5nX2VuYWJsZWQpID09IGJvbmRpbmdfZW5hYmxlZF90bXApCisJCXJldHVybiBjb3VudDsKKworCWJhdF9pbmZvKG5ldF9kZXYsICJDaGFuZ2luZyBib25kaW5nIGZyb206ICVzIHRvOiAlc1xuIiwKKwkJIGF0b21pY19yZWFkKCZiYXRfcHJpdi0+Ym9uZGluZ19lbmFibGVkKSA9PSAxID8KKwkJICJlbmFibGVkIiA6ICJkaXNhYmxlZCIsCisJCSBib25kaW5nX2VuYWJsZWRfdG1wID09IDEgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKKworCWF0b21pY19zZXQoJmJhdF9wcml2LT5ib25kaW5nX2VuYWJsZWQsICh1bnNpZ25lZClib25kaW5nX2VuYWJsZWRfdG1wKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKIHN0YXRpYyBzc2l6ZV90IHNob3dfdmlzX21vZGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICAgIGNoYXIgKmJ1ZmYpCiB7CkBAIC0xMjMsMTAgKzE0MSw5IEBACiAJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KHRvX25ldF9kZXYoZGV2KSk7CiAJaW50IHZpc19tb2RlID0gYXRvbWljX3JlYWQoJmJhdF9wcml2LT52aXNfbW9kZSk7CiAKLQlyZXR1cm4gc3ByaW50ZihidWZmLCAic3RhdHVzOiAlc1xuY29tbWFuZHM6IGNsaWVudCwgc2VydmVyLCAlZCwgJWRcbiIsCisJcmV0dXJuIHNwcmludGYoYnVmZiwgIiVzXG4iLAogCQkgICAgICAgdmlzX21vZGUgPT0gVklTX1RZUEVfQ0xJRU5UX1VQREFURSA/Ci0JCQkJCQkJImNsaWVudCIgOiAic2VydmVyIiwKLQkJICAgICAgIFZJU19UWVBFX1NFUlZFUl9TWU5DLCBWSVNfVFlQRV9DTElFTlRfVVBEQVRFKTsKKwkJCQkJCQkiY2xpZW50IiA6ICJzZXJ2ZXIiKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfdmlzX21vZGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCkBAIC0xNDEsNyArMTU4LDggQEAKIAlyZXQgPSBzdHJpY3Rfc3RydG91bChidWZmLCAxMCwgJnZhbCk7CiAKIAlpZiAoKChjb3VudCA9PSAyKSAmJiAoIXJldCkgJiYgKHZhbCA9PSBWSVNfVFlQRV9DTElFTlRfVVBEQVRFKSkgfHwKLQkgICAgKHN0cm5jbXAoYnVmZiwgImNsaWVudCIsIDYpID09IDApKQorCSAgICAoc3RybmNtcChidWZmLCAiY2xpZW50IiwgNikgPT0gMCkgfHwKKwkgICAgKHN0cm5jbXAoYnVmZiwgIm9mZiIsIDMpID09IDApKQogCQl2aXNfbW9kZV90bXAgPSBWSVNfVFlQRV9DTElFTlRfVVBEQVRFOwogCiAJaWYgKCgoY291bnQgPT0gMikgJiYgKCFyZXQpICYmICh2YWwgPT0gVklTX1RZUEVfU0VSVkVSX1NZTkMpKSB8fApAQCAtMTUyLDE4ICsxNzAsMTkgQEAKIAkJaWYgKGJ1ZmZbY291bnQgLSAxXSA9PSAnXG4nKQogCQkJYnVmZltjb3VudCAtIDFdID0gJ1wwJzsKIAotCQlwcmludGsoS0VSTl9JTkZPICJiYXRtYW4tYWR2OkludmFsaWQgcGFyYW1ldGVyIGZvciAndmlzIG1vZGUnIHNldHRpbmcgb24gbWVzaCAlcyByZWNlaXZlZDogJXNcbiIsCi0JCSAgICAgICBuZXRfZGV2LT5uYW1lLCBidWZmKTsKKwkJYmF0X2luZm8obmV0X2RldiwKKwkJCSAiSW52YWxpZCBwYXJhbWV0ZXIgZm9yICd2aXMgbW9kZScgc2V0dGluZyByZWNlaXZlZDogIgorCQkJICIlc1xuIiwgYnVmZik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPnZpc19tb2RlKSA9PSB2aXNfbW9kZV90bXApCiAJCXJldHVybiBjb3VudDsKIAotCXByaW50ayhLRVJOX0lORk8gImJhdG1hbi1hZHY6Q2hhbmdpbmcgdmlzIG1vZGUgZnJvbTogJXMgdG86ICVzIG9uIG1lc2g6ICVzXG4iLAotCSAgICAgICBhdG9taWNfcmVhZCgmYmF0X3ByaXYtPnZpc19tb2RlKSA9PSBWSVNfVFlQRV9DTElFTlRfVVBEQVRFID8KLQkgICAgICAgImNsaWVudCIgOiAic2VydmVyIiwgdmlzX21vZGVfdG1wID09IFZJU19UWVBFX0NMSUVOVF9VUERBVEUgPwotCSAgICAgICAiY2xpZW50IiA6ICJzZXJ2ZXIiLCBuZXRfZGV2LT5uYW1lKTsKKwliYXRfaW5mbyhuZXRfZGV2LCAiQ2hhbmdpbmcgdmlzIG1vZGUgZnJvbTogJXMgdG86ICVzXG4iLAorCQkgYXRvbWljX3JlYWQoJmJhdF9wcml2LT52aXNfbW9kZSkgPT0gVklTX1RZUEVfQ0xJRU5UX1VQREFURSA/CisJCSAiY2xpZW50IiA6ICJzZXJ2ZXIiLCB2aXNfbW9kZV90bXAgPT0gVklTX1RZUEVfQ0xJRU5UX1VQREFURSA/CisJCSAiY2xpZW50IiA6ICJzZXJ2ZXIiKTsKIAogCWF0b21pY19zZXQoJmJhdF9wcml2LT52aXNfbW9kZSwgKHVuc2lnbmVkKXZpc19tb2RlX3RtcCk7CiAJcmV0dXJuIGNvdW50OwpAQCAtMTc1LDcgKzE5NCw3IEBACiAJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2KGtvYmotPnBhcmVudCk7CiAJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KHRvX25ldF9kZXYoZGV2KSk7CiAKLQlyZXR1cm4gc3ByaW50ZihidWZmLCAic3RhdHVzOiAlaVxuIiwKKwlyZXR1cm4gc3ByaW50ZihidWZmLCAiJWlcbiIsCiAJCSAgICAgICBhdG9taWNfcmVhZCgmYmF0X3ByaXYtPm9yaWdfaW50ZXJ2YWwpKTsKIH0KIApAQCAtMTkwLDkxICsyMDksODcgQEAKIAogCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZmYsIDEwLCAmb3JpZ19pbnRlcnZhbF90bXApOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiYmF0bWFuLWFkdjpJbnZhbGlkIHBhcmFtZXRlciBmb3IgJ29yaWdfaW50ZXJ2YWwnIHNldHRpbmcgb24gbWVzaCAlcyByZWNlaXZlZDogJXNcbiIsCi0JCSAgICAgICBuZXRfZGV2LT5uYW1lLCBidWZmKTsKKwkJYmF0X2luZm8obmV0X2RldiwgIkludmFsaWQgcGFyYW1ldGVyIGZvciAnb3JpZ19pbnRlcnZhbCcgIgorCQkJICJzZXR0aW5nIHJlY2VpdmVkOiAlc1xuIiwgYnVmZik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChvcmlnX2ludGVydmFsX3RtcCA8PSBKSVRURVIgKiAyKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImJhdG1hbi1hZHY6TmV3IG9yaWdpbmF0b3IgaW50ZXJ2YWwgdG9vIHNtYWxsOiAlbGkgKG1pbjogJWkpXG4iLAotCQkgICAgICAgb3JpZ19pbnRlcnZhbF90bXAsIEpJVFRFUiAqIDIpOworCWlmIChvcmlnX2ludGVydmFsX3RtcCA8IEpJVFRFUiAqIDIpIHsKKwkJYmF0X2luZm8obmV0X2RldiwgIk5ldyBvcmlnaW5hdG9yIGludGVydmFsIHRvbyBzbWFsbDogJWxpICIKKwkJCSAiKG1pbjogJWkpXG4iLCBvcmlnX2ludGVydmFsX3RtcCwgSklUVEVSICogMik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPm9yaWdfaW50ZXJ2YWwpID09IG9yaWdfaW50ZXJ2YWxfdG1wKQogCQlyZXR1cm4gY291bnQ7CiAKLQlwcmludGsoS0VSTl9JTkZPICJiYXRtYW4tYWR2OkNoYW5naW5nIG9yaWdpbmF0b3IgaW50ZXJ2YWwgZnJvbTogJWkgdG86ICVsaSBvbiBtZXNoOiAlc1xuIiwKLQkgICAgICAgYXRvbWljX3JlYWQoJmJhdF9wcml2LT5vcmlnX2ludGVydmFsKSwKLQkgICAgICAgb3JpZ19pbnRlcnZhbF90bXAsIG5ldF9kZXYtPm5hbWUpOworCWJhdF9pbmZvKG5ldF9kZXYsICJDaGFuZ2luZyBvcmlnaW5hdG9yIGludGVydmFsIGZyb206ICVpIHRvOiAlbGlcbiIsCisJCSBhdG9taWNfcmVhZCgmYmF0X3ByaXYtPm9yaWdfaW50ZXJ2YWwpLAorCQkgb3JpZ19pbnRlcnZhbF90bXApOwogCiAJYXRvbWljX3NldCgmYmF0X3ByaXYtPm9yaWdfaW50ZXJ2YWwsIG9yaWdfaW50ZXJ2YWxfdG1wKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBCQVRfQVRUUihhZ2dyZWdhdGVfb2dtLCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJc2hvd19hZ2dyX29nbSwgc3RvcmVfYWdncl9vZ20pOworI2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0RFQlVHCitzdGF0aWMgc3NpemVfdCBzaG93X2xvZ19sZXZlbChzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgY2hhciAqYnVmZikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXYoa29iai0+cGFyZW50KTsKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYodG9fbmV0X2RldihkZXYpKTsKKwlpbnQgbG9nX2xldmVsID0gYXRvbWljX3JlYWQoJmJhdF9wcml2LT5sb2dfbGV2ZWwpOworCisJcmV0dXJuIHNwcmludGYoYnVmZiwgIiVkXG4iLCBsb2dfbGV2ZWwpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9sb2dfbGV2ZWwoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICBjaGFyICpidWZmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2KGtvYmotPnBhcmVudCk7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSB0b19uZXRfZGV2KGRldik7CisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KG5ldF9kZXYpOworCXVuc2lnbmVkIGxvbmcgbG9nX2xldmVsX3RtcDsKKwlpbnQgcmV0OworCisJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmZiwgMTAsICZsb2dfbGV2ZWxfdG1wKTsKKwlpZiAocmV0KSB7CisJCWJhdF9pbmZvKG5ldF9kZXYsICJJbnZhbGlkIHBhcmFtZXRlciBmb3IgJ2xvZ19sZXZlbCcgIgorCQkJICJzZXR0aW5nIHJlY2VpdmVkOiAlc1xuIiwgYnVmZik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChsb2dfbGV2ZWxfdG1wID4gMykgeworCQliYXRfaW5mbyhuZXRfZGV2LCAiTmV3IGxvZyBsZXZlbCB0b28gYmlnOiAlbGkgIgorCQkJICIobWF4OiAlaSlcbiIsIGxvZ19sZXZlbF90bXAsIDMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoYXRvbWljX3JlYWQoJmJhdF9wcml2LT5sb2dfbGV2ZWwpID09IGxvZ19sZXZlbF90bXApCisJCXJldHVybiBjb3VudDsKKworCWF0b21pY19zZXQoJmJhdF9wcml2LT5sb2dfbGV2ZWwsICh1bnNpZ25lZClsb2dfbGV2ZWxfdG1wKTsKKwlyZXR1cm4gY291bnQ7Cit9CisjZW5kaWYKKworc3RhdGljIEJBVF9BVFRSKGFnZ3JlZ2F0ZWRfb2dtcywgU19JUlVHTyB8IFNfSVdVU1IsCisJCXNob3dfYWdncl9vZ21zLCBzdG9yZV9hZ2dyX29nbXMpOworc3RhdGljIEJBVF9BVFRSKGJvbmRpbmcsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2JvbmQsIHN0b3JlX2JvbmQpOwogc3RhdGljIEJBVF9BVFRSKHZpc19tb2RlLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd192aXNfbW9kZSwgc3RvcmVfdmlzX21vZGUpOwogc3RhdGljIEJBVF9BVFRSKG9yaWdfaW50ZXJ2YWwsIFNfSVJVR08gfCBTX0lXVVNSLAogCQlzaG93X29yaWdfaW50ZXJ2YWwsIHN0b3JlX29yaWdfaW50ZXJ2YWwpOworI2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0RFQlVHCitzdGF0aWMgQkFUX0FUVFIobG9nX2xldmVsLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19sb2dfbGV2ZWwsIHN0b3JlX2xvZ19sZXZlbCk7CisjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBiYXRfYXR0cmlidXRlICptZXNoX2F0dHJzW10gPSB7Ci0JJmJhdF9hdHRyX2FnZ3JlZ2F0ZV9vZ20sCisJJmJhdF9hdHRyX2FnZ3JlZ2F0ZWRfb2dtcywKKwkmYmF0X2F0dHJfYm9uZGluZywKIAkmYmF0X2F0dHJfdmlzX21vZGUsCiAJJmJhdF9hdHRyX29yaWdfaW50ZXJ2YWwsCi0JTlVMTCwKLX07Ci0KLXN0YXRpYyBzc2l6ZV90IHRyYW5zdGFibGVfbG9jYWxfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkJICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCi0JCQkJICBjaGFyICpidWZmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2KGtvYmotPnBhcmVudCk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSB0b19uZXRfZGV2KGRldik7Ci0KLQlyZXR1cm4gaG5hX2xvY2FsX2ZpbGxfYnVmZmVyX3RleHQobmV0X2RldiwgYnVmZiwgY291bnQsIG9mZik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHRyYW5zdGFibGVfZ2xvYmFsX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCSAgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLAotCQkJCSAgY2hhciAqYnVmZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2Rldihrb2JqLT5wYXJlbnQpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gdG9fbmV0X2RldihkZXYpOwotCi0JcmV0dXJuIGhuYV9nbG9iYWxfZmlsbF9idWZmZXJfdGV4dChuZXRfZGV2LCBidWZmLCBjb3VudCwgb2ZmKTsKLX0KLQotc3RhdGljIHNzaXplX3Qgb3JpZ2luYXRvcnNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkJICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCi0JCQkJICBjaGFyICpidWZmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2KGtvYmotPnBhcmVudCk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSB0b19uZXRfZGV2KGRldik7Ci0KLQlyZXR1cm4gb3JpZ19maWxsX2J1ZmZlcl90ZXh0KG5ldF9kZXYsIGJ1ZmYsIGNvdW50LCBvZmYpOwotfQotCi1zdGF0aWMgc3NpemVfdCB2aXNfZGF0YV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQkgIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKLQkJCQkgIGNoYXIgKmJ1ZmYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXYoa29iai0+cGFyZW50KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IHRvX25ldF9kZXYoZGV2KTsKLQotCXJldHVybiB2aXNfZmlsbF9idWZmZXJfdGV4dChuZXRfZGV2LCBidWZmLCBjb3VudCwgb2ZmKTsKLX0KLQotc3RhdGljIEJBVF9CSU5fQVRUUih0cmFuc3RhYmxlX2xvY2FsLCBTX0lSVUdPLCB0cmFuc3RhYmxlX2xvY2FsX3JlYWQsIE5VTEwpOwotc3RhdGljIEJBVF9CSU5fQVRUUih0cmFuc3RhYmxlX2dsb2JhbCwgU19JUlVHTywgdHJhbnN0YWJsZV9nbG9iYWxfcmVhZCwgTlVMTCk7Ci1zdGF0aWMgQkFUX0JJTl9BVFRSKG9yaWdpbmF0b3JzLCBTX0lSVUdPLCBvcmlnaW5hdG9yc19yZWFkLCBOVUxMKTsKLXN0YXRpYyBCQVRfQklOX0FUVFIodmlzX2RhdGEsIFNfSVJVR08sIHZpc19kYXRhX3JlYWQsIE5VTEwpOwotCi1zdGF0aWMgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKm1lc2hfYmluX2F0dHJzW10gPSB7Ci0JJmJhdF9hdHRyX3RyYW5zdGFibGVfbG9jYWwsCi0JJmJhdF9hdHRyX3RyYW5zdGFibGVfZ2xvYmFsLAotCSZiYXRfYXR0cl9vcmlnaW5hdG9ycywKLQkmYmF0X2F0dHJfdmlzX2RhdGEsCisjaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfREVCVUcKKwkmYmF0X2F0dHJfbG9nX2xldmVsLAorI2VuZGlmCiAJTlVMTCwKIH07CiAKQEAgLTI4MywyMiArMjk4LDI0IEBACiAJc3RydWN0IGtvYmplY3QgKmJhdGlmX2tvYmplY3QgPSAmZGV2LT5kZXYua29iajsKIAlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgYmF0X2F0dHJpYnV0ZSAqKmJhdF9hdHRyOwotCXN0cnVjdCBiaW5fYXR0cmlidXRlICoqYmluX2F0dHI7CiAJaW50IGVycjsKIAogCS8qIEZJWE1FOiBzaG91bGQgYmUgZG9uZSBpbiB0aGUgZ2VuZXJhbCBtZXNoIHNldHVwCiAJCSAgcm91dGluZSBhcyBzb29uIGFzIHdlIGhhdmUgaXQgKi8KIAlhdG9taWNfc2V0KCZiYXRfcHJpdi0+YWdncmVnYXRpb25fZW5hYmxlZCwgMSk7CisJYXRvbWljX3NldCgmYmF0X3ByaXYtPmJvbmRpbmdfZW5hYmxlZCwgMCk7CiAJYXRvbWljX3NldCgmYmF0X3ByaXYtPnZpc19tb2RlLCBWSVNfVFlQRV9DTElFTlRfVVBEQVRFKTsKIAlhdG9taWNfc2V0KCZiYXRfcHJpdi0+b3JpZ19pbnRlcnZhbCwgMTAwMCk7CisJYXRvbWljX3NldCgmYmF0X3ByaXYtPmxvZ19sZXZlbCwgMCk7CisKIAliYXRfcHJpdi0+cHJpbWFyeV9pZiA9IE5VTEw7CiAJYmF0X3ByaXYtPm51bV9pZmFjZXMgPSAwOwogCiAJYmF0X3ByaXYtPm1lc2hfb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZChTWVNGU19JRl9NRVNIX1NVQkRJUiwKIAkJCQkJCSAgICBiYXRpZl9rb2JqZWN0KTsKIAlpZiAoIWJhdF9wcml2LT5tZXNoX29iaikgewotCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6Q2FuJ3QgYWRkIHN5c2ZzIGRpcmVjdG9yeTogJXMvJXNcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIFNZU0ZTX0lGX01FU0hfU1VCRElSKTsKKwkJYmF0X2VycihkZXYsICJDYW4ndCBhZGQgc3lzZnMgZGlyZWN0b3J5OiAlcy8lc1xuIiwgZGV2LT5uYW1lLAorCQkJU1lTRlNfSUZfTUVTSF9TVUJESVIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTMwNiwyOCArMzIzLDE1IEBACiAJCWVyciA9IHN5c2ZzX2NyZWF0ZV9maWxlKGJhdF9wcml2LT5tZXNoX29iaiwKIAkJCQkJJigoKmJhdF9hdHRyKS0+YXR0cikpOwogCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6Q2FuJ3QgYWRkIHN5c2ZzIGZpbGU6ICVzLyVzLyVzXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgU1lTRlNfSUZfTUVTSF9TVUJESVIsCi0JCQkgICAgICAgKCgqYmF0X2F0dHIpLT5hdHRyKS5uYW1lKTsKKwkJCWJhdF9lcnIoZGV2LCAiQ2FuJ3QgYWRkIHN5c2ZzIGZpbGU6ICVzLyVzLyVzXG4iLAorCQkJCWRldi0+bmFtZSwgU1lTRlNfSUZfTUVTSF9TVUJESVIsCisJCQkJKCgqYmF0X2F0dHIpLT5hdHRyKS5uYW1lKTsKIAkJCWdvdG8gcmVtX2F0dHI7CiAJCX0KIAl9CiAKLQlmb3IgKGJpbl9hdHRyID0gbWVzaF9iaW5fYXR0cnM7ICpiaW5fYXR0cjsgKytiaW5fYXR0cikgewotCQllcnIgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoYmF0X3ByaXYtPm1lc2hfb2JqLCAoKmJpbl9hdHRyKSk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjpDYW4ndCBhZGQgc3lzZnMgZmlsZTogJXMvJXMvJXNcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBTWVNGU19JRl9NRVNIX1NVQkRJUiwKLQkJCSAgICAgICAoKCpiaW5fYXR0ciktPmF0dHIpLm5hbWUpOwotCQkJZ290byByZW1fYmluX2F0dHI7Ci0JCX0KLQl9Ci0KIAlyZXR1cm4gMDsKIAotcmVtX2Jpbl9hdHRyOgotCWZvciAoYmluX2F0dHIgPSBtZXNoX2Jpbl9hdHRyczsgKmJpbl9hdHRyOyArK2Jpbl9hdHRyKQotCQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoYmF0X3ByaXYtPm1lc2hfb2JqLCAoKmJpbl9hdHRyKSk7CiByZW1fYXR0cjoKIAlmb3IgKGJhdF9hdHRyID0gbWVzaF9hdHRyczsgKmJhdF9hdHRyOyArK2JhdF9hdHRyKQogCQlzeXNmc19yZW1vdmVfZmlsZShiYXRfcHJpdi0+bWVzaF9vYmosICYoKCpiYXRfYXR0ciktPmF0dHIpKTsKQEAgLTM0MiwxMCArMzQ2LDYgQEAKIHsKIAlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgYmF0X2F0dHJpYnV0ZSAqKmJhdF9hdHRyOwotCXN0cnVjdCBiaW5fYXR0cmlidXRlICoqYmluX2F0dHI7Ci0KLQlmb3IgKGJpbl9hdHRyID0gbWVzaF9iaW5fYXR0cnM7ICpiaW5fYXR0cjsgKytiaW5fYXR0cikKLQkJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKGJhdF9wcml2LT5tZXNoX29iaiwgKCpiaW5fYXR0cikpOwogCiAJZm9yIChiYXRfYXR0ciA9IG1lc2hfYXR0cnM7ICpiYXRfYXR0cjsgKytiYXRfYXR0cikKIAkJc3lzZnNfcmVtb3ZlX2ZpbGUoYmF0X3ByaXYtPm1lc2hfb2JqLCAmKCgqYmF0X2F0dHIpLT5hdHRyKSk7CkBAIC0zNjQsNyArMzY0LDcgQEAKIAlpZiAoIWJhdG1hbl9pZikKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gc3ByaW50ZihidWZmLCAic3RhdHVzOiAlc1xuY29tbWFuZHM6IG5vbmUsIGJhdDBcbiIsCisJcmV0dXJuIHNwcmludGYoYnVmZiwgIiVzXG4iLAogCQkgICAgICAgYmF0bWFuX2lmLT5pZl9zdGF0dXMgPT0gSUZfTk9UX0lOX1VTRSA/CiAJCQkJCQkJIm5vbmUiIDogImJhdDAiKTsKIH0KQEAgLTM5MCw4ICszOTAsOCBAQAogCQlpZiAoYnVmZltjb3VudCAtIDFdID09ICdcbicpCiAJCQlidWZmW2NvdW50IC0gMV0gPSAnXDAnOwogCi0JCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjpJbnZhbGlkIHBhcmFtZXRlciBmb3IgJ21lc2hfaWZhY2UnIHNldHRpbmcgcmVjZWl2ZWQ6ICVzXG4iLAotCQkgICAgICAgYnVmZik7CisJCXByX2VycigiSW52YWxpZCBwYXJhbWV0ZXIgZm9yICdtZXNoX2lmYWNlJyBzZXR0aW5nIHJlY2VpdmVkOiAiCisJCSAgICAgICAiJXNcbiIsIGJ1ZmYpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTQzMywzNyArNDMzLDM3IEBACiAJfQogfQogCi1zdGF0aWMgSEFSRElGX0FUVFIobWVzaF9pZmFjZSwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgIHNob3dfbWVzaF9pZmFjZSwgc3RvcmVfbWVzaF9pZmFjZSk7Ci1zdGF0aWMgSEFSRElGX0FUVFIoaWZhY2Vfc3RhdHVzLCBTX0lSVUdPLCBzaG93X2lmYWNlX3N0YXR1cywgTlVMTCk7CitzdGF0aWMgQkFUX0FUVFIobWVzaF9pZmFjZSwgU19JUlVHTyB8IFNfSVdVU1IsCisJCXNob3dfbWVzaF9pZmFjZSwgc3RvcmVfbWVzaF9pZmFjZSk7CitzdGF0aWMgQkFUX0FUVFIoaWZhY2Vfc3RhdHVzLCBTX0lSVUdPLCBzaG93X2lmYWNlX3N0YXR1cywgTlVMTCk7CiAKLXN0YXRpYyBzdHJ1Y3QgaGFyZGlmX2F0dHJpYnV0ZSAqYmF0bWFuX2F0dHJzW10gPSB7Ci0JJmhhcmRpZl9hdHRyX21lc2hfaWZhY2UsCi0JJmhhcmRpZl9hdHRyX2lmYWNlX3N0YXR1cywKK3N0YXRpYyBzdHJ1Y3QgYmF0X2F0dHJpYnV0ZSAqYmF0bWFuX2F0dHJzW10gPSB7CisJJmJhdF9hdHRyX21lc2hfaWZhY2UsCisJJmJhdF9hdHRyX2lmYWNlX3N0YXR1cywKIAlOVUxMLAogfTsKIAogaW50IHN5c2ZzX2FkZF9oYXJkaWYoc3RydWN0IGtvYmplY3QgKipoYXJkaWZfb2JqLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBrb2JqZWN0ICpoYXJkaWZfa29iamVjdCA9ICZkZXYtPmRldi5rb2JqOwotCXN0cnVjdCBoYXJkaWZfYXR0cmlidXRlICoqaGFyZGlmX2F0dHI7CisJc3RydWN0IGJhdF9hdHRyaWJ1dGUgKipiYXRfYXR0cjsKIAlpbnQgZXJyOwogCiAJKmhhcmRpZl9vYmogPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKFNZU0ZTX0lGX0JBVF9TVUJESVIsCiAJCQkJCQkgICAgaGFyZGlmX2tvYmplY3QpOwogCiAJaWYgKCEqaGFyZGlmX29iaikgewotCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6Q2FuJ3QgYWRkIHN5c2ZzIGRpcmVjdG9yeTogJXMvJXNcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIFNZU0ZTX0lGX0JBVF9TVUJESVIpOworCQliYXRfZXJyKGRldiwgIkNhbid0IGFkZCBzeXNmcyBkaXJlY3Rvcnk6ICVzLyVzXG4iLCBkZXYtPm5hbWUsCisJCQlTWVNGU19JRl9CQVRfU1VCRElSKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JZm9yIChoYXJkaWZfYXR0ciA9IGJhdG1hbl9hdHRyczsgKmhhcmRpZl9hdHRyOyArK2hhcmRpZl9hdHRyKSB7Ci0JCWVyciA9IHN5c2ZzX2NyZWF0ZV9maWxlKCpoYXJkaWZfb2JqLCAmKCgqaGFyZGlmX2F0dHIpLT5hdHRyKSk7CisJZm9yIChiYXRfYXR0ciA9IGJhdG1hbl9hdHRyczsgKmJhdF9hdHRyOyArK2JhdF9hdHRyKSB7CisJCWVyciA9IHN5c2ZzX2NyZWF0ZV9maWxlKCpoYXJkaWZfb2JqLCAmKCgqYmF0X2F0dHIpLT5hdHRyKSk7CiAJCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjpDYW4ndCBhZGQgc3lzZnMgZmlsZTogJXMvJXMvJXNcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBTWVNGU19JRl9CQVRfU1VCRElSLAotCQkJICAgICAgICgoKmhhcmRpZl9hdHRyKS0+YXR0cikubmFtZSk7CisJCQliYXRfZXJyKGRldiwgIkNhbid0IGFkZCBzeXNmcyBmaWxlOiAlcy8lcy8lc1xuIiwKKwkJCQlkZXYtPm5hbWUsIFNZU0ZTX0lGX0JBVF9TVUJESVIsCisJCQkJKCgqYmF0X2F0dHIpLT5hdHRyKS5uYW1lKTsKIAkJCWdvdG8gcmVtX2F0dHI7CiAJCX0KIAl9CkBAIC00NzEsOCArNDcxLDggQEAKIAlyZXR1cm4gMDsKIAogcmVtX2F0dHI6Ci0JZm9yIChoYXJkaWZfYXR0ciA9IGJhdG1hbl9hdHRyczsgKmhhcmRpZl9hdHRyOyArK2hhcmRpZl9hdHRyKQotCQlzeXNmc19yZW1vdmVfZmlsZSgqaGFyZGlmX29iaiwgJigoKmhhcmRpZl9hdHRyKS0+YXR0cikpOworCWZvciAoYmF0X2F0dHIgPSBiYXRtYW5fYXR0cnM7ICpiYXRfYXR0cjsgKytiYXRfYXR0cikKKwkJc3lzZnNfcmVtb3ZlX2ZpbGUoKmhhcmRpZl9vYmosICYoKCpiYXRfYXR0ciktPmF0dHIpKTsKIG91dDoKIAlyZXR1cm4gLUVOT01FTTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2JhdF9zeXNmcy5oIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvYmF0X3N5c2ZzLmgKaW5kZXggZTE4OTM0MS4uN2YxODZjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvYmF0X3N5c2ZzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvYmF0X3N5c2ZzLmgKQEAgLTIwLDEwICsyMCwyMyBAQAogICovCiAKIAorI2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfU1lTRlNfSF8KKyNkZWZpbmUgX05FVF9CQVRNQU5fQURWX1NZU0ZTX0hfCisKICNkZWZpbmUgU1lTRlNfSUZfTUVTSF9TVUJESVIgIm1lc2giCiAjZGVmaW5lIFNZU0ZTX0lGX0JBVF9TVUJESVIgImJhdG1hbl9hZHYiCiAKK3N0cnVjdCBiYXRfYXR0cmlidXRlIHsKKwlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CisJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCQkJY2hhciAqYnVmKTsKKwlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCQkJIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKK307CisKIGludCBzeXNmc19hZGRfbWVzaGlmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogdm9pZCBzeXNmc19kZWxfbWVzaGlmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogaW50IHN5c2ZzX2FkZF9oYXJkaWYoc3RydWN0IGtvYmplY3QgKipoYXJkaWZfb2JqLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgc3lzZnNfZGVsX2hhcmRpZihzdHJ1Y3Qga29iamVjdCAqKmhhcmRpZl9vYmopOworCisjZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX1NZU0ZTX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9iaXRhcnJheS5jIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvYml0YXJyYXkuYwppbmRleCAyZmVmNmUzLi5kZDQxOTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9iaXRhcnJheS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2JpdGFycmF5LmMKQEAgLTI0LDEwICsyNCwxMCBAQAogCiAvKiByZXR1cm5zIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIHRoZSBnaXZlbiBzZXFfYml0cyBpbmRpY2F0ZXMgdHJ1ZQogICogYW5kIGN1cnJfc2Vxbm8gaXMgd2l0aGluIHJhbmdlIG9mIGxhc3Rfc2Vxbm8gKi8KLXVpbnQ4X3QgZ2V0X2JpdF9zdGF0dXMoVFlQRV9PRl9XT1JEICpzZXFfYml0cywgdWludDE2X3QgbGFzdF9zZXFubywKLQkJICAgICAgIHVpbnQxNl90IGN1cnJfc2Vxbm8pCit1aW50OF90IGdldF9iaXRfc3RhdHVzKFRZUEVfT0ZfV09SRCAqc2VxX2JpdHMsIHVpbnQzMl90IGxhc3Rfc2Vxbm8sCisJCSAgICAgICB1aW50MzJfdCBjdXJyX3NlcW5vKQogewotCWludDE2X3QgZGlmZiwgd29yZF9vZmZzZXQsIHdvcmRfbnVtOworCWludDMyX3QgZGlmZiwgd29yZF9vZmZzZXQsIHdvcmRfbnVtOwogCiAJZGlmZiA9IGxhc3Rfc2Vxbm8gLSBjdXJyX3NlcW5vOwogCWlmIChkaWZmIDwgMCB8fCBkaWZmID49IFRRX0xPQ0FMX1dJTkRPV19TSVpFKSB7CkBAIC02Myw3ICs2Myw3IEBACiB9CiAKIC8qIHNoaWZ0IHRoZSBwYWNrZXQgYXJyYXkgYnkgbiBwbGFjZXMuICovCi12b2lkIGJpdF9zaGlmdChUWVBFX09GX1dPUkQgKnNlcV9iaXRzLCBpbnQzMl90IG4pCitzdGF0aWMgdm9pZCBiaXRfc2hpZnQoVFlQRV9PRl9XT1JEICpzZXFfYml0cywgaW50MzJfdCBuKQogewogCWludDMyX3Qgd29yZF9vZmZzZXQsIHdvcmRfbnVtOwogCWludDMyX3QgaTsKQEAgLTEyNSw5ICsxMjUsMTIgQEAKICAqICAxIGlmIHRoZSB3aW5kb3cgd2FzIG1vdmVkIChlaXRoZXIgbmV3IG9yIHZlcnkgb2xkKQogICogIDAgaWYgdGhlIHdpbmRvdyB3YXMgbm90IG1vdmVkL3NoaWZ0ZWQuCiAgKi8KLWNoYXIgYml0X2dldF9wYWNrZXQoVFlQRV9PRl9XT1JEICpzZXFfYml0cywgaW50MTZfdCBzZXFfbnVtX2RpZmYsCitjaGFyIGJpdF9nZXRfcGFja2V0KFRZUEVfT0ZfV09SRCAqc2VxX2JpdHMsIGludDMyX3Qgc2VxX251bV9kaWZmLAogCQkgICAgaW50OF90IHNldF9tYXJrKQogeworCS8qIEZJWE1FOiBlYWNoIG9yaWdfbm9kZS0+YmF0bWFuX2lmIHdpbGwgYmUgYXR0YWNoZWQgdG8gYSBzb2Z0aWYgKi8KKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoc29mdF9kZXZpY2UpOworCiAJLyogc2VxdWVuY2UgbnVtYmVyIGlzIHNsaWdodGx5IG9sZGVyLiBXZSBhbHJlYWR5IGdvdCBhIHNlcXVlbmNlIG51bWJlcgogCSAqIGhpZ2hlciB0aGFuIHRoaXMgb25lLCBzbyB3ZSBqdXN0IG1hcmsgaXQuICovCiAKQEAgLTE1Miw3ICsxNTUsNyBAQAogCiAJaWYgKChzZXFfbnVtX2RpZmYgPj0gVFFfTE9DQUxfV0lORE9XX1NJWkUpCiAJCXx8IChzZXFfbnVtX2RpZmYgPCBFWFBFQ1RFRF9TRVFOT19SQU5HRSkpIHsKLQkJYmF0X2RiZyhEQkdfQkFUTUFOLAorCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAogCQkJIldlIG1pc3NlZCBhIGxvdCBvZiBwYWNrZXRzICglaSkgIVxuIiwKIAkJCXNlcV9udW1fZGlmZiAtIDEpOwogCQliaXRfcmVzZXRfd2luZG93KHNlcV9iaXRzKTsKQEAgLTE2OSw3ICsxNzIsNyBAQAogCWlmICgoc2VxX251bV9kaWZmIDw9IC1UUV9MT0NBTF9XSU5ET1dfU0laRSkKIAkJfHwgKHNlcV9udW1fZGlmZiA+PSBFWFBFQ1RFRF9TRVFOT19SQU5HRSkpIHsKIAotCQliYXRfZGJnKERCR19CQVRNQU4sCisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCiAJCQkiT3RoZXIgaG9zdCBwcm9iYWJseSByZXN0YXJ0ZWQhXG4iKTsKIAogCQliaXRfcmVzZXRfd2luZG93KHNlcV9iaXRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2JpdGFycmF5LmggYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9iaXRhcnJheS5oCmluZGV4IDc2YWQyNGMuLjAxODk3ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2JpdGFycmF5LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvYml0YXJyYXkuaApAQCAtMTksNiArMTksOCBAQAogICoKICAqLwogCisjaWZuZGVmIF9ORVRfQkFUTUFOX0FEVl9CSVRBUlJBWV9IXworI2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfQklUQVJSQVlfSF8KIAogLyogeW91IHNob3VsZCBjaG9vc2Ugc29tZXRoaW5nIGJpZywgaWYgeW91IGRvbid0IHdhbnQgdG8gd2FzdGUgY3B1ICovCiAjZGVmaW5lIFRZUEVfT0ZfV09SRCB1bnNpZ25lZCBsb25nCkBAIC0yNiwyMCArMjgsMTkgQEAKIAogLyogcmV0dXJucyB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBpbiB0aGUgZ2l2ZW4gc2VxX2JpdHMgaW5kaWNhdGVzIHRydWUKICAqIGFuZCBjdXJyX3NlcW5vIGlzIHdpdGhpbiByYW5nZSBvZiBsYXN0X3NlcW5vICovCi11aW50OF90IGdldF9iaXRfc3RhdHVzKFRZUEVfT0ZfV09SRCAqc2VxX2JpdHMsIHVpbnQxNl90IGxhc3Rfc2Vxbm8sCi0JCQkJCSAgIHVpbnQxNl90IGN1cnJfc2Vxbm8pOwordWludDhfdCBnZXRfYml0X3N0YXR1cyhUWVBFX09GX1dPUkQgKnNlcV9iaXRzLCB1aW50MzJfdCBsYXN0X3NlcW5vLAorCQkJCQkgICB1aW50MzJfdCBjdXJyX3NlcW5vKTsKIAogLyogdHVybiBjb3JyZXNwb25kaW5nIGJpdCBvbiwgc28gd2UgY2FuIHJlbWVtYmVyIHRoYXQgd2UgZ290IHRoZSBwYWNrZXQgKi8KIHZvaWQgYml0X21hcmsoVFlQRV9PRl9XT1JEICpzZXFfYml0cywgaW50MzJfdCBuKTsKIAotLyogc2hpZnQgdGhlIHBhY2tldCBhcnJheSBieSBuIHBsYWNlcy4gKi8KLXZvaWQgYml0X3NoaWZ0KFRZUEVfT0ZfV09SRCAqc2VxX2JpdHMsIGludDMyX3Qgbik7Ci0KIAogLyogcmVjZWl2ZSBhbmQgcHJvY2VzcyBvbmUgcGFja2V0LCByZXR1cm5zIDEgaWYgcmVjZWl2ZWQgc2VxX251bSBpcyBjb25zaWRlcmVkCiAgKiBuZXcsIDAgaWYgb2xkICAqLwotY2hhciBiaXRfZ2V0X3BhY2tldChUWVBFX09GX1dPUkQgKnNlcV9iaXRzLCBpbnQxNl90IHNlcV9udW1fZGlmZiwKK2NoYXIgYml0X2dldF9wYWNrZXQoVFlQRV9PRl9XT1JEICpzZXFfYml0cywgaW50MzJfdCBzZXFfbnVtX2RpZmYsCiAJCQkJCWludDhfdCBzZXRfbWFyayk7CiAKIC8qIGNvdW50IHRoZSBoYW1taW5nIHdlaWdodCwgaG93IG1hbnkgZ29vZCBwYWNrZXRzIGRpZCB3ZSByZWNlaXZlPyAqLwogaW50ICBiaXRfcGFja2V0X2NvdW50KFRZUEVfT0ZfV09SRCAqc2VxX2JpdHMpOworCisjZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX0JJVEFSUkFZX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9kZXZpY2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2RldmljZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjIwNGI1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2RldmljZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBCLkEuVC5NLkEuTi4gY29udHJpYnV0b3JzOgotICoKLSAqIE1hcmVrIExpbmRuZXIKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEsIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgIm1haW4uaCIKLSNpbmNsdWRlICJkZXZpY2UuaCIKLSNpbmNsdWRlICJzZW5kLmgiCi0jaW5jbHVkZSAidHlwZXMuaCIKLSNpbmNsdWRlICJoYXNoLmgiCi0jaW5jbHVkZSAiaGFyZC1pbnRlcmZhY2UuaCIKLQotc3RhdGljIHN0cnVjdCBjbGFzcyAqYmF0bWFuX2NsYXNzOwotCi1zdGF0aWMgaW50IE1ham9yOwkvKiBNYWpvciBudW1iZXIgYXNzaWduZWQgdG8gb3VyIGRldmljZSBkcml2ZXIgKi8KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wcyA9IHsKLQkub3BlbiA9IGJhdF9kZXZpY2Vfb3BlbiwKLQkucmVsZWFzZSA9IGJhdF9kZXZpY2VfcmVsZWFzZSwKLQkucmVhZCA9IGJhdF9kZXZpY2VfcmVhZCwKLQkud3JpdGUgPSBiYXRfZGV2aWNlX3dyaXRlLAotCS5wb2xsID0gYmF0X2RldmljZV9wb2xsLAotfTsKLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfY2xpZW50ICpkZXZpY2VfY2xpZW50X2hhc2hbMjU2XTsKLQotdm9pZCBiYXRfZGV2aWNlX2luaXQodm9pZCkKLXsKLQltZW1zZXQoZGV2aWNlX2NsaWVudF9oYXNoLCAwLCBzaXplb2YoZGV2aWNlX2NsaWVudF9oYXNoKSk7Ci19Ci0KLWludCBiYXRfZGV2aWNlX3NldHVwKHZvaWQpCi17Ci0JaW50IHRtcF9tYWpvcjsKLQotCWlmIChNYWpvcikKLQkJcmV0dXJuIDE7Ci0KLQkvKiByZWdpc3RlciBvdXIgZGV2aWNlIC0ga2VybmVsIGFzc2lnbnMgYSBmcmVlIG1ham9yIG51bWJlciAqLwotCXRtcF9tYWpvciA9IHJlZ2lzdGVyX2NocmRldigwLCBEUklWRVJfREVWSUNFLCAmZm9wcyk7Ci0JaWYgKHRtcF9tYWpvciA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OiIKLQkJICAgICAgICJSZWdpc3RlcmluZyB0aGUgY2hhcmFjdGVyIGRldmljZSBmYWlsZWQgd2l0aCAlZFxuIiwKLQkJCSAgdG1wX21ham9yKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JYmF0bWFuX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAiYmF0bWFuLWFkdiIpOwotCi0JaWYgKElTX0VSUihiYXRtYW5fY2xhc3MpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjoiCi0JCSAgICAgICAiQ291bGQgbm90IHJlZ2lzdGVyIGNsYXNzICdiYXRtYW4tYWR2J1xuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCWRldmljZV9jcmVhdGUoYmF0bWFuX2NsYXNzLCBOVUxMLCBNS0RFVih0bXBfbWFqb3IsIDApLCBOVUxMLAotCQkgICAgICAiYmF0bWFuLWFkdiIpOwotCi0JTWFqb3IgPSB0bXBfbWFqb3I7Ci0JcmV0dXJuIDE7Ci19Ci0KLXZvaWQgYmF0X2RldmljZV9kZXN0cm95KHZvaWQpCi17Ci0JaWYgKCFNYWpvcikKLQkJcmV0dXJuOwotCi0JZGV2aWNlX2Rlc3Ryb3koYmF0bWFuX2NsYXNzLCBNS0RFVihNYWpvciwgMCkpOwotCWNsYXNzX2Rlc3Ryb3koYmF0bWFuX2NsYXNzKTsKLQotCS8qIFVucmVnaXN0ZXIgdGhlIGRldmljZSAqLwotCXVucmVnaXN0ZXJfY2hyZGV2KE1ham9yLCBEUklWRVJfREVWSUNFKTsKLQotCU1ham9yID0gMDsKLX0KLQotaW50IGJhdF9kZXZpY2Vfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQlzdHJ1Y3QgZGV2aWNlX2NsaWVudCAqZGV2aWNlX2NsaWVudDsKLQotCWRldmljZV9jbGllbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGV2aWNlX2NsaWVudCksIEdGUF9LRVJORUwpOwotCi0JaWYgKCFkZXZpY2VfY2xpZW50KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRldmljZV9jbGllbnRfaGFzaCk7IGkrKykgewotCQlpZiAoIWRldmljZV9jbGllbnRfaGFzaFtpXSkgewotCQkJZGV2aWNlX2NsaWVudF9oYXNoW2ldID0gZGV2aWNlX2NsaWVudDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKGkgPT0gQVJSQVlfU0laRShkZXZpY2VfY2xpZW50X2hhc2gpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjoiCi0JCSAgICAgICAiRXJyb3IgLSBjYW4ndCBhZGQgYW5vdGhlciBwYWNrZXQgY2xpZW50OiAiCi0JCSAgICAgICAibWF4aW11bSBudW1iZXIgb2YgY2xpZW50cyByZWFjaGVkXG4iKTsKLQkJa2ZyZWUoZGV2aWNlX2NsaWVudCk7Ci0JCXJldHVybiAtRVhGVUxMOwotCX0KLQotCUlOSVRfTElTVF9IRUFEKCZkZXZpY2VfY2xpZW50LT5xdWV1ZV9saXN0KTsKLQlkZXZpY2VfY2xpZW50LT5xdWV1ZV9sZW4gPSAwOwotCWRldmljZV9jbGllbnQtPmluZGV4ID0gaTsKLQlzcGluX2xvY2tfaW5pdCgmZGV2aWNlX2NsaWVudC0+bG9jayk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2aWNlX2NsaWVudC0+cXVldWVfd2FpdCk7Ci0KLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBkZXZpY2VfY2xpZW50OwotCi0JaW5jX21vZHVsZV9jb3VudCgpOwotCXJldHVybiAwOwotfQotCi1pbnQgYmF0X2RldmljZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBkZXZpY2VfY2xpZW50ICpkZXZpY2VfY2xpZW50ID0KLQkJKHN0cnVjdCBkZXZpY2VfY2xpZW50ICopZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkZXZpY2VfcGFja2V0ICpkZXZpY2VfcGFja2V0OwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfcG9zLCAqbGlzdF9wb3NfdG1wOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2aWNlX2NsaWVudC0+bG9jaywgZmxhZ3MpOwotCi0JLyogZm9yIGFsbCBwYWNrZXRzIGluIHRoZSBxdWV1ZSAuLi4gKi8KLQlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdF9wb3MsIGxpc3RfcG9zX3RtcCwgJmRldmljZV9jbGllbnQtPnF1ZXVlX2xpc3QpIHsKLQkJZGV2aWNlX3BhY2tldCA9IGxpc3RfZW50cnkobGlzdF9wb3MsCi0JCQkJCSAgIHN0cnVjdCBkZXZpY2VfcGFja2V0LCBsaXN0KTsKLQotCQlsaXN0X2RlbChsaXN0X3Bvcyk7Ci0JCWtmcmVlKGRldmljZV9wYWNrZXQpOwotCX0KLQotCWRldmljZV9jbGllbnRfaGFzaFtkZXZpY2VfY2xpZW50LT5pbmRleF0gPSBOVUxMOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldmljZV9jbGllbnQtPmxvY2ssIGZsYWdzKTsKLQotCWtmcmVlKGRldmljZV9jbGllbnQpOwotCWRlY19tb2R1bGVfY291bnQoKTsKLQotCXJldHVybiAwOwotfQotCi1zc2l6ZV90IGJhdF9kZXZpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAotCQkJbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBkZXZpY2VfY2xpZW50ICpkZXZpY2VfY2xpZW50ID0KLQkJKHN0cnVjdCBkZXZpY2VfY2xpZW50ICopZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkZXZpY2VfcGFja2V0ICpkZXZpY2VfcGFja2V0OwotCWludCBlcnJvcjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgJiYgKGRldmljZV9jbGllbnQtPnF1ZXVlX2xlbiA9PSAwKSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0KLQlpZiAoKCFidWYpIHx8IChjb3VudCA8IHNpemVvZihzdHJ1Y3QgaWNtcF9wYWNrZXQpKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGJ1ZiwgY291bnQpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWVycm9yID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRldmljZV9jbGllbnQtPnF1ZXVlX3dhaXQsCi0JCQkJCSBkZXZpY2VfY2xpZW50LT5xdWV1ZV9sZW4pOwotCi0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2aWNlX2NsaWVudC0+bG9jaywgZmxhZ3MpOwotCi0JZGV2aWNlX3BhY2tldCA9IGxpc3RfZmlyc3RfZW50cnkoJmRldmljZV9jbGllbnQtPnF1ZXVlX2xpc3QsCi0JCQkJCSBzdHJ1Y3QgZGV2aWNlX3BhY2tldCwgbGlzdCk7Ci0JbGlzdF9kZWwoJmRldmljZV9wYWNrZXQtPmxpc3QpOwotCWRldmljZV9jbGllbnQtPnF1ZXVlX2xlbi0tOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2aWNlX2NsaWVudC0+bG9jaywgZmxhZ3MpOwotCi0JZXJyb3IgPSBfX2NvcHlfdG9fdXNlcihidWYsICZkZXZpY2VfcGFja2V0LT5pY21wX3BhY2tldCwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGljbXBfcGFja2V0KSk7Ci0KLQlrZnJlZShkZXZpY2VfcGFja2V0KTsKLQotCWlmIChlcnJvcikKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldCk7Ci19Ci0KLXNzaXplX3QgYmF0X2RldmljZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmYsCi0JCQkgc2l6ZV90IGxlbiwgbG9mZl90ICpvZmYpCi17Ci0Jc3RydWN0IGRldmljZV9jbGllbnQgKmRldmljZV9jbGllbnQgPQotCQkoc3RydWN0IGRldmljZV9jbGllbnQgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGljbXBfcGFja2V0IGljbXBfcGFja2V0OwotCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKLQlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWY7Ci0JdWludDhfdCBkc3RhZGRyW0VUSF9BTEVOXTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGxlbiA8IHNpemVvZihzdHJ1Y3QgaWNtcF9wYWNrZXQpKSB7Ci0JCWJhdF9kYmcoREJHX0JBVE1BTiwgImJhdG1hbi1hZHY6IgotCQkJIkVycm9yIC0gY2FuJ3Qgc2VuZCBwYWNrZXQgZnJvbSBjaGFyIGRldmljZTogIgotCQkJImludmFsaWQgcGFja2V0IHNpemVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgYnVmZiwgc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmIChfX2NvcHlfZnJvbV91c2VyKCZpY21wX3BhY2tldCwgYnVmZiwgc2l6ZW9mKGljbXBfcGFja2V0KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKGljbXBfcGFja2V0LnBhY2tldF90eXBlICE9IEJBVF9JQ01QKSB7Ci0JCWJhdF9kYmcoREJHX0JBVE1BTiwgImJhdG1hbi1hZHY6IgotCQkJIkVycm9yIC0gY2FuJ3Qgc2VuZCBwYWNrZXQgZnJvbSBjaGFyIGRldmljZTogIgotCQkJImdvdCBib2d1cyBwYWNrZXQgdHlwZSAoZXhwZWN0ZWQ6IEJBVF9JQ01QKVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChpY21wX3BhY2tldC5tc2dfdHlwZSAhPSBFQ0hPX1JFUVVFU1QpIHsKLQkJYmF0X2RiZyhEQkdfQkFUTUFOLCAiYmF0bWFuLWFkdjoiCi0JCQkiRXJyb3IgLSBjYW4ndCBzZW5kIHBhY2tldCBmcm9tIGNoYXIgZGV2aWNlOiAiCi0JCQkiZ290IGJvZ3VzIG1lc3NhZ2UgdHlwZSAoZXhwZWN0ZWQ6IEVDSE9fUkVRVUVTVClcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpY21wX3BhY2tldC51aWQgPSBkZXZpY2VfY2xpZW50LT5pbmRleDsKLQotCWlmIChpY21wX3BhY2tldC52ZXJzaW9uICE9IENPTVBBVF9WRVJTSU9OKSB7Ci0JCWljbXBfcGFja2V0Lm1zZ190eXBlID0gUEFSQU1FVEVSX1BST0JMRU07Ci0JCWljbXBfcGFja2V0LnR0bCA9IENPTVBBVF9WRVJTSU9OOwotCQliYXRfZGV2aWNlX2FkZF9wYWNrZXQoZGV2aWNlX2NsaWVudCwgJmljbXBfcGFja2V0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGF0b21pY19yZWFkKCZtb2R1bGVfc3RhdGUpICE9IE1PRFVMRV9BQ1RJVkUpCi0JCWdvdG8gZHN0X3VucmVhY2g7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKLQlvcmlnX25vZGUgPSAoKHN0cnVjdCBvcmlnX25vZGUgKiloYXNoX2ZpbmQob3JpZ19oYXNoLCBpY21wX3BhY2tldC5kc3QpKTsKLQotCWlmICghb3JpZ19ub2RlKQotCQlnb3RvIHVubG9jazsKLQotCWlmICghb3JpZ19ub2RlLT5yb3V0ZXIpCi0JCWdvdG8gdW5sb2NrOwotCi0JYmF0bWFuX2lmID0gb3JpZ19ub2RlLT5yb3V0ZXItPmlmX2luY29taW5nOwotCW1lbWNweShkc3RhZGRyLCBvcmlnX25vZGUtPnJvdXRlci0+YWRkciwgRVRIX0FMRU4pOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKLQotCWlmICghYmF0bWFuX2lmKQotCQlnb3RvIGRzdF91bnJlYWNoOwotCi0JaWYgKGJhdG1hbl9pZi0+aWZfc3RhdHVzICE9IElGX0FDVElWRSkKLQkJZ290byBkc3RfdW5yZWFjaDsKLQotCW1lbWNweShpY21wX3BhY2tldC5vcmlnLAotCSAgICAgICBiYXRtYW5faWYtPm5ldF9kZXYtPmRldl9hZGRyLAotCSAgICAgICBFVEhfQUxFTik7Ci0KLQlzZW5kX3Jhd19wYWNrZXQoKHVuc2lnbmVkIGNoYXIgKikmaWNtcF9wYWNrZXQsCi0JCQlzaXplb2Yoc3RydWN0IGljbXBfcGFja2V0KSwKLQkJCWJhdG1hbl9pZiwgZHN0YWRkcik7Ci0KLQlnb3RvIG91dDsKLQotdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7Ci1kc3RfdW5yZWFjaDoKLQlpY21wX3BhY2tldC5tc2dfdHlwZSA9IERFU1RJTkFUSU9OX1VOUkVBQ0hBQkxFOwotCWJhdF9kZXZpY2VfYWRkX3BhY2tldChkZXZpY2VfY2xpZW50LCAmaWNtcF9wYWNrZXQpOwotb3V0OgotCXJldHVybiBsZW47Ci19Ci0KLXVuc2lnbmVkIGludCBiYXRfZGV2aWNlX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCi17Ci0Jc3RydWN0IGRldmljZV9jbGllbnQgKmRldmljZV9jbGllbnQgPQotCQkoc3RydWN0IGRldmljZV9jbGllbnQgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0KLQlwb2xsX3dhaXQoZmlsZSwgJmRldmljZV9jbGllbnQtPnF1ZXVlX3dhaXQsIHdhaXQpOwotCi0JaWYgKGRldmljZV9jbGllbnQtPnF1ZXVlX2xlbiA+IDApCi0JCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgYmF0X2RldmljZV9hZGRfcGFja2V0KHN0cnVjdCBkZXZpY2VfY2xpZW50ICpkZXZpY2VfY2xpZW50LAotCQkJICAgc3RydWN0IGljbXBfcGFja2V0ICppY21wX3BhY2tldCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX3BhY2tldCAqZGV2aWNlX3BhY2tldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JZGV2aWNlX3BhY2tldCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkZXZpY2VfcGFja2V0KSwgR0ZQX0FUT01JQyk7Ci0KLQlpZiAoIWRldmljZV9wYWNrZXQpCi0JCXJldHVybjsKLQotCUlOSVRfTElTVF9IRUFEKCZkZXZpY2VfcGFja2V0LT5saXN0KTsKLQltZW1jcHkoJmRldmljZV9wYWNrZXQtPmljbXBfcGFja2V0LCBpY21wX3BhY2tldCwKLQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldCkpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldmljZV9jbGllbnQtPmxvY2ssIGZsYWdzKTsKLQotCS8qIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBsb2NrIHRoZSBkZXZpY2VfY2xpZW50IGNvdWxkIGhhdmUgYmVlbgotCSAqIGRlbGV0ZWQgKi8KLQlpZiAoIWRldmljZV9jbGllbnRfaGFzaFtpY21wX3BhY2tldC0+dWlkXSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZpY2VfY2xpZW50LT5sb2NrLCBmbGFncyk7Ci0JCWtmcmVlKGRldmljZV9wYWNrZXQpOwotCQlyZXR1cm47Ci0JfQotCi0JbGlzdF9hZGRfdGFpbCgmZGV2aWNlX3BhY2tldC0+bGlzdCwgJmRldmljZV9jbGllbnQtPnF1ZXVlX2xpc3QpOwotCWRldmljZV9jbGllbnQtPnF1ZXVlX2xlbisrOwotCi0JaWYgKGRldmljZV9jbGllbnQtPnF1ZXVlX2xlbiA+IDEwMCkgewotCQlkZXZpY2VfcGFja2V0ID0gbGlzdF9maXJzdF9lbnRyeSgmZGV2aWNlX2NsaWVudC0+cXVldWVfbGlzdCwKLQkJCQkJCSBzdHJ1Y3QgZGV2aWNlX3BhY2tldCwgbGlzdCk7Ci0KLQkJbGlzdF9kZWwoJmRldmljZV9wYWNrZXQtPmxpc3QpOwotCQlrZnJlZShkZXZpY2VfcGFja2V0KTsKLQkJZGV2aWNlX2NsaWVudC0+cXVldWVfbGVuLS07Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2aWNlX2NsaWVudC0+bG9jaywgZmxhZ3MpOwotCi0Jd2FrZV91cCgmZGV2aWNlX2NsaWVudC0+cXVldWVfd2FpdCk7Ci19Ci0KLXZvaWQgYmF0X2RldmljZV9yZWNlaXZlX3BhY2tldChzdHJ1Y3QgaWNtcF9wYWNrZXQgKmljbXBfcGFja2V0KQotewotCXN0cnVjdCBkZXZpY2VfY2xpZW50ICpoYXNoID0gZGV2aWNlX2NsaWVudF9oYXNoW2ljbXBfcGFja2V0LT51aWRdOwotCi0JaWYgKGhhc2gpCi0JCWJhdF9kZXZpY2VfYWRkX3BhY2tldChoYXNoLCBpY21wX3BhY2tldCk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9kZXZpY2UuaCBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2RldmljZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjE0YjM3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2RldmljZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIEIuQS5ULk0uQS5OLiBjb250cmlidXRvcnM6Ci0gKgotICogTWFyZWsgTGluZG5lcgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSwgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlICJ0eXBlcy5oIgotCi12b2lkIGJhdF9kZXZpY2VfaW5pdCh2b2lkKTsKLWludCBiYXRfZGV2aWNlX3NldHVwKHZvaWQpOwotdm9pZCBiYXRfZGV2aWNlX2Rlc3Ryb3kodm9pZCk7Ci1pbnQgYmF0X2RldmljZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKLWludCBiYXRfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3NpemVfdCBiYXRfZGV2aWNlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKLQkJCWxvZmZfdCAqcHBvcyk7Ci1zc2l6ZV90IGJhdF9kZXZpY2Vfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmLAotCQkJIHNpemVfdCBsZW4sIGxvZmZfdCAqb2ZmKTsKLXVuc2lnbmVkIGludCBiYXRfZGV2aWNlX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpOwotdm9pZCBiYXRfZGV2aWNlX2FkZF9wYWNrZXQoc3RydWN0IGRldmljZV9jbGllbnQgKmRldmljZV9jbGllbnQsCi0JCQkgICBzdHJ1Y3QgaWNtcF9wYWNrZXQgKmljbXBfcGFja2V0KTsKLXZvaWQgYmF0X2RldmljZV9yZWNlaXZlX3BhY2tldChzdHJ1Y3QgaWNtcF9wYWNrZXQgKmljbXBfcGFja2V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jCmluZGV4IDdhNTgyZTguLjkyYzIxNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImhhc2guaCIKIAogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9icmlkZ2UuaD4KIAogI2RlZmluZSBNSU4oeCwgeSkgKCh4KSA8ICh5KSA/ICh4KSA6ICh5KSkKIApAQCAtNzEsNyArNzIsNyBAQAogI2VuZGlmCiAKIAkvKiBEZXZpY2UgaXMgYmVpbmcgYnJpZGdlZCAqLwotCS8qIGlmIChuZXRfZGV2LT5icl9wb3J0ICE9IE5VTEwpCisJLyogaWYgKG5ldF9kZXYtPnByaXZfZmxhZ3MgJiBJRkZfQlJJREdFX1BPUlQpCiAJCXJldHVybiAwOyAqLwogCiAJcmV0dXJuIDE7CkBAIC0xMDgsNyArMTA5LDcgQEAKIAlzZXRfbWFpbl9pZl9hZGRyKGJhdG1hbl9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIpOwogCiAJYmF0bWFuX3BhY2tldCA9IChzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqKShiYXRtYW5faWYtPnBhY2tldF9idWZmKTsKLQliYXRtYW5fcGFja2V0LT5mbGFncyA9IDA7CisJYmF0bWFuX3BhY2tldC0+ZmxhZ3MgPSBQUklNQVJJRVNfRklSU1RfSE9QOwogCWJhdG1hbl9wYWNrZXQtPnR0bCA9IFRUTDsKIAogCS8qKioKQEAgLTE0OSwxMiArMTUwLDEwIEBACiAJCWlmICghY29tcGFyZV9vcmlnKGJhdG1hbl9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIGFkZHIpKQogCQkJY29udGludWU7CiAKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmF0bWFuLWFkdjoiCi0JCSAgICAiVGhlIG5ld2x5IGFkZGVkIG1hYyBhZGRyZXNzICglcE0pIGFscmVhZHkgZXhpc3RzIG9uOiAlc1xuIiwKLQkJICAgIGFkZHIsIGJhdG1hbl9pZi0+ZGV2KTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmF0bWFuLWFkdjoiCi0JCSAgICAiSXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8ga2VlcCBtYWMgYWRkcmVzc2VzIHVuaXF1ZSIKLQkJICAgICJ0byBhdm9pZCBwcm9ibGVtcyFcbiIpOworCQlwcl93YXJuaW5nKCJUaGUgbmV3bHkgYWRkZWQgbWFjIGFkZHJlc3MgKCVwTSkgYWxyZWFkeSBleGlzdHMgIgorCQkJICAgIm9uOiAlc1xuIiwgYWRkciwgYmF0bWFuX2lmLT5kZXYpOworCQlwcl93YXJuaW5nKCJJdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0byBrZWVwIG1hYyBhZGRyZXNzZXMgIgorCQkJICAgInVuaXF1ZSB0byBhdm9pZCBwcm9ibGVtcyFcbiIpOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KQEAgLTE4OCw3ICsxODcsOCBAQAogCQlzb2Z0X2RldmljZS0+bXR1ID0gbWluX210dTsKIH0KIAotc3RhdGljIHZvaWQgaGFyZGlmX2FjdGl2YXRlX2ludGVyZmFjZShzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorc3RhdGljIHZvaWQgaGFyZGlmX2FjdGl2YXRlX2ludGVyZmFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKKwkJCQkgICAgICBzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAogCQkJCSAgICAgIHN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZikKIHsKIAlpZiAoYmF0bWFuX2lmLT5pZl9zdGF0dXMgIT0gSUZfSU5BQ1RJVkUpCkBAIC0yMDYsOCArMjA2LDcgQEAKIAlpZiAoIWJhdF9wcml2LT5wcmltYXJ5X2lmKQogCQlzZXRfcHJpbWFyeV9pZihiYXRfcHJpdiwgYmF0bWFuX2lmKTsKIAotCXByaW50ayhLRVJOX0lORk8gImJhdG1hbi1hZHY6SW50ZXJmYWNlIGFjdGl2YXRlZDogJXNcbiIsCi0JICAgICAgIGJhdG1hbl9pZi0+ZGV2KTsKKwliYXRfaW5mbyhuZXRfZGV2LCAiSW50ZXJmYWNlIGFjdGl2YXRlZDogJXNcbiIsIGJhdG1hbl9pZi0+ZGV2KTsKIAogCWlmIChhdG9taWNfcmVhZCgmbW9kdWxlX3N0YXRlKSA9PSBNT0RVTEVfSU5BQ1RJVkUpCiAJCWFjdGl2YXRlX21vZHVsZSgpOwpAQCAtMjE2LDcgKzIxNSw4IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCBoYXJkaWZfZGVhY3RpdmF0ZV9pbnRlcmZhY2Uoc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmKQorc3RhdGljIHZvaWQgaGFyZGlmX2RlYWN0aXZhdGVfaW50ZXJmYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAorCQkJCQlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYpCiB7CiAJaWYgKChiYXRtYW5faWYtPmlmX3N0YXR1cyAhPSBJRl9BQ1RJVkUpICYmCiAJICAgKGJhdG1hbl9pZi0+aWZfc3RhdHVzICE9IElGX1RPX0JFX0FDVElWQVRFRCkpCkBAIC0yMjYsOCArMjI2LDcgQEAKIAogCWJhdG1hbl9pZi0+aWZfc3RhdHVzID0gSUZfSU5BQ1RJVkU7CiAKLQlwcmludGsoS0VSTl9JTkZPICJiYXRtYW4tYWR2OkludGVyZmFjZSBkZWFjdGl2YXRlZDogJXNcbiIsCi0JICAgICAgIGJhdG1hbl9pZi0+ZGV2KTsKKwliYXRfaW5mbyhuZXRfZGV2LCAiSW50ZXJmYWNlIGRlYWN0aXZhdGVkOiAlc1xuIiwgYmF0bWFuX2lmLT5kZXYpOwogCiAJdXBkYXRlX21pbl9tdHUoKTsKIH0KQEAgLTI0NSw5ICsyNDQsOCBAQAogCWJhdG1hbl9pZi0+cGFja2V0X2J1ZmYgPSBrbWFsbG9jKGJhdG1hbl9pZi0+cGFja2V0X2xlbiwgR0ZQX0FUT01JQyk7CiAKIAlpZiAoIWJhdG1hbl9pZi0+cGFja2V0X2J1ZmYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OiIKLQkJICAgICAgICJDYW4ndCBhZGQgaW50ZXJmYWNlIHBhY2tldCAoJXMpOiBvdXQgb2YgbWVtb3J5XG4iLAotCQkgICAgICAgYmF0bWFuX2lmLT5kZXYpOworCQliYXRfZXJyKHNvZnRfZGV2aWNlLCAiQ2FuJ3QgYWRkIGludGVyZmFjZSBwYWNrZXQgKCVzKTogIgorCQkJIm91dCBvZiBtZW1vcnlcbiIsIGJhdG1hbl9pZi0+ZGV2KTsKIAkJZ290byBlcnI7CiAJfQogCkBAIC0yNjUsMTUgKzI2MywxNCBAQAogCW9yaWdfaGFzaF9hZGRfaWYoYmF0bWFuX2lmLCBiYXRfcHJpdi0+bnVtX2lmYWNlcyk7CiAKIAlhdG9taWNfc2V0KCZiYXRtYW5faWYtPnNlcW5vLCAxKTsKLQlwcmludGsoS0VSTl9JTkZPICJiYXRtYW4tYWR2OkFkZGluZyBpbnRlcmZhY2U6ICVzXG4iLCBiYXRtYW5faWYtPmRldik7CisJYmF0X2luZm8oc29mdF9kZXZpY2UsICJBZGRpbmcgaW50ZXJmYWNlOiAlc1xuIiwgYmF0bWFuX2lmLT5kZXYpOwogCiAJaWYgKGhhcmRpZl9pc19pZmFjZV91cChiYXRtYW5faWYpKQotCQloYXJkaWZfYWN0aXZhdGVfaW50ZXJmYWNlKGJhdF9wcml2LCBiYXRtYW5faWYpOworCQloYXJkaWZfYWN0aXZhdGVfaW50ZXJmYWNlKHNvZnRfZGV2aWNlLCBiYXRfcHJpdiwgYmF0bWFuX2lmKTsKIAllbHNlCi0JCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjoiCi0JCSAgICAgICAiTm90IHVzaW5nIGludGVyZmFjZSAlcyAiCi0JCSAgICAgICAiKHJldHJ5aW5nIGxhdGVyKTogaW50ZXJmYWNlIG5vdCBhY3RpdmVcbiIsCi0JCSAgICAgICBiYXRtYW5faWYtPmRldik7CisJCWJhdF9lcnIoc29mdF9kZXZpY2UsICJOb3QgdXNpbmcgaW50ZXJmYWNlICVzICIKKwkJCSIocmV0cnlpbmcgbGF0ZXIpOiBpbnRlcmZhY2Ugbm90IGFjdGl2ZVxuIiwKKwkJCWJhdG1hbl9pZi0+ZGV2KTsKIAogCS8qIGJlZ2luIHNjaGVkdWxpbmcgb3JpZ2luYXRvciBtZXNzYWdlcyBvbiB0aGF0IGludGVyZmFjZSAqLwogCXNjaGVkdWxlX293bl9wYWNrZXQoYmF0bWFuX2lmKTsKQEAgLTI5MSwxMiArMjg4LDEyIEBACiAJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KHNvZnRfZGV2aWNlKTsKIAogCWlmIChiYXRtYW5faWYtPmlmX3N0YXR1cyA9PSBJRl9BQ1RJVkUpCi0JCWhhcmRpZl9kZWFjdGl2YXRlX2ludGVyZmFjZShiYXRtYW5faWYpOworCQloYXJkaWZfZGVhY3RpdmF0ZV9pbnRlcmZhY2Uoc29mdF9kZXZpY2UsIGJhdG1hbl9pZik7CiAKIAlpZiAoYmF0bWFuX2lmLT5pZl9zdGF0dXMgIT0gSUZfSU5BQ1RJVkUpCiAJCXJldHVybjsKIAotCXByaW50ayhLRVJOX0lORk8gImJhdG1hbi1hZHY6UmVtb3ZpbmcgaW50ZXJmYWNlOiAlc1xuIiwgYmF0bWFuX2lmLT5kZXYpOworCWJhdF9pbmZvKHNvZnRfZGV2aWNlLCAiUmVtb3ZpbmcgaW50ZXJmYWNlOiAlc1xuIiwgYmF0bWFuX2lmLT5kZXYpOwogCWJhdF9wcml2LT5udW1faWZhY2VzLS07CiAJb3JpZ19oYXNoX2RlbF9pZihiYXRtYW5faWYsIGJhdF9wcml2LT5udW1faWZhY2VzKTsKIApAQCAtMzIzLDggKzMyMCw3IEBACiAKIAliYXRtYW5faWYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYmF0bWFuX2lmKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFiYXRtYW5faWYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OiIKLQkJICAgICAgICJDYW4ndCBhZGQgaW50ZXJmYWNlICglcyk6IG91dCBvZiBtZW1vcnlcbiIsCisJCXByX2VycigiQ2FuJ3QgYWRkIGludGVyZmFjZSAoJXMpOiBvdXQgb2YgbWVtb3J5XG4iLAogCQkgICAgICAgbmV0X2Rldi0+bmFtZSk7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTQwNywxMSArNDAzLDExIEBACiAJY2FzZSBORVRERVZfUkVHSVNURVI6CiAJCWJyZWFrOwogCWNhc2UgTkVUREVWX1VQOgotCQloYXJkaWZfYWN0aXZhdGVfaW50ZXJmYWNlKGJhdF9wcml2LCBiYXRtYW5faWYpOworCQloYXJkaWZfYWN0aXZhdGVfaW50ZXJmYWNlKHNvZnRfZGV2aWNlLCBiYXRfcHJpdiwgYmF0bWFuX2lmKTsKIAkJYnJlYWs7CiAJY2FzZSBORVRERVZfR09JTkdfRE9XTjoKIAljYXNlIE5FVERFVl9ET1dOOgotCQloYXJkaWZfZGVhY3RpdmF0ZV9pbnRlcmZhY2UoYmF0bWFuX2lmKTsKKwkJaGFyZGlmX2RlYWN0aXZhdGVfaW50ZXJmYWNlKHNvZnRfZGV2aWNlLCBiYXRtYW5faWYpOwogCQlicmVhazsKIAljYXNlIE5FVERFVl9VTlJFR0lTVEVSOgogCQloYXJkaWZfcmVtb3ZlX2ludGVyZmFjZShiYXRtYW5faWYpOwpAQCAtNDMyLDE0ICs0MjgsMjIgQEAKIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CiAKK3N0YXRpYyBpbnQgYmF0bWFuX3NrYl9yZWN2X2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBORl9BQ0NFUFQ7Cit9CisKIC8qIHJlY2VpdmUgYSBwYWNrZXQgd2l0aCB0aGUgYmF0bWFuIGV0aGVydHlwZSBjb21pbmcgb24gYSBoYXJkCiAgKiBpbnRlcmZhY2UgKi8KIGludCBiYXRtYW5fc2tiX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7CisJLyogRklYTUU6IGVhY2ggb3JpZ19ub2RlLT5iYXRtYW5faWYgd2lsbCBiZSBhdHRhY2hlZCB0byBhIHNvZnRpZiAqLworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihzb2Z0X2RldmljZSk7CiAJc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQ7CiAJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKKwlzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgdGVtcDsKIAlpbnQgcmV0OwogCiAJc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7CkBAIC00NTEsNiArNDU1LDEzIEBACiAJaWYgKGF0b21pY19yZWFkKCZtb2R1bGVfc3RhdGUpICE9IE1PRFVMRV9BQ1RJVkUpCiAJCWdvdG8gZXJyX2ZyZWU7CiAKKwkvKiBpZiBuZXRmaWx0ZXIvZWJ0YWJsZXMgd2FudHMgdG8gYmxvY2sgaW5jb21pbmcgYmF0bWFuCisJICogcGFja2V0cyB0aGVuIGdpdmUgdGhlbSBhIGNoYW5jZSB0byBkbyBzbyBoZXJlICovCisJcmV0ID0gTkZfSE9PSyhQRl9CUklER0UsIE5GX0JSX0xPQ0FMX0lOLCBza2IsIGRldiwgTlVMTCwKKwkJICAgICAgYmF0bWFuX3NrYl9yZWN2X2ZpbmlzaCk7CisJaWYgKHJldCAhPSAxKQorCQlnb3RvIGVycl9vdXQ7CisKIAkvKiBwYWNrZXQgc2hvdWxkIGhvbGQgYXQgbGVhc3QgdHlwZSBhbmQgdmVyc2lvbiAqLwogCWlmICh1bmxpa2VseShza2JfaGVhZGxlbihza2IpIDwgMikpCiAJCWdvdG8gZXJyX2ZyZWU7CkBAIC00NjgsNyArNDc5LDcgQEAKIAlpZiAoYmF0bWFuX2lmLT5pZl9zdGF0dXMgIT0gSUZfQUNUSVZFKQogCQlnb3RvIGVycl9mcmVlOwogCi0Jc3RhdHMgPSAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKilkZXZfZ2V0X3N0YXRzKHNrYi0+ZGV2KTsKKwlzdGF0cyA9IChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKWRldl9nZXRfc3RhdHMoc2tiLT5kZXYsICZ0ZW1wKTsKIAlpZiAoc3RhdHMpIHsKIAkJc3RhdHMtPnJ4X3BhY2tldHMrKzsKIAkJc3RhdHMtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOwpAQCAtNDc3LDcgKzQ4OCw3IEBACiAJYmF0bWFuX3BhY2tldCA9IChzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqKXNrYi0+ZGF0YTsKIAogCWlmIChiYXRtYW5fcGFja2V0LT52ZXJzaW9uICE9IENPTVBBVF9WRVJTSU9OKSB7Ci0JCWJhdF9kYmcoREJHX0JBVE1BTiwKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKIAkJCSJEcm9wIHBhY2tldDogaW5jb21wYXRpYmxlIGJhdG1hbiB2ZXJzaW9uICglaSlcbiIsCiAJCQliYXRtYW5fcGFja2V0LT52ZXJzaW9uKTsKIAkJZ290byBlcnJfZnJlZTsKQEAgLTQ5OSw3ICs1MTAsNyBAQAogCiAJCS8qIHVuaWNhc3QgcGFja2V0ICovCiAJY2FzZSBCQVRfVU5JQ0FTVDoKLQkJcmV0ID0gcmVjdl91bmljYXN0X3BhY2tldChza2IpOworCQlyZXQgPSByZWN2X3VuaWNhc3RfcGFja2V0KHNrYiwgYmF0bWFuX2lmKTsKIAkJYnJlYWs7CiAKIAkJLyogYnJvYWRjYXN0IHBhY2tldCAqLwpAQCAtNTMwLDcgKzU0MSw2IEBACiAJcmV0dXJuIE5FVF9SWF9EUk9QOwogfQogCi0KIHN0cnVjdCBub3RpZmllcl9ibG9jayBoYXJkX2lmX25vdGlmaWVyID0gewogCS5ub3RpZmllcl9jYWxsID0gaGFyZF9pZl9ldmVudCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuaAppbmRleCAxZTVmYzNlLi5kNTY0MGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmgKQEAgLTE5LDYgKzE5LDkgQEAKICAqCiAgKi8KIAorI2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfSEFSRF9JTlRFUkZBQ0VfSF8KKyNkZWZpbmUgX05FVF9CQVRNQU5fQURWX0hBUkRfSU5URVJGQUNFX0hfCisKICNkZWZpbmUgSUZfTk9UX0lOX1VTRSAwCiAjZGVmaW5lIElGX1RPX0JFX1JFTU9WRUQgMQogI2RlZmluZSBJRl9JTkFDVElWRSAyCkBAIC0zOCwzICs0MSw1IEBACiAJCQkJc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KTsKIGludCBoYXJkaWZfbWluX210dSh2b2lkKTsKIHZvaWQgdXBkYXRlX21pbl9tdHUodm9pZCk7CisKKyNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfSEFSRF9JTlRFUkZBQ0VfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2hhc2guYyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2hhc2guYwppbmRleCBkNGE0YWRjLi4xMjg2ZjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9oYXNoLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvaGFzaC5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSAiaGFzaC5oIgogCiAvKiBjbGVhcnMgdGhlIGhhc2ggKi8KLXZvaWQgaGFzaF9pbml0KHN0cnVjdCBoYXNodGFibGVfdCAqaGFzaCkKK3N0YXRpYyB2b2lkIGhhc2hfaW5pdChzdHJ1Y3QgaGFzaHRhYmxlX3QgKmhhc2gpCiB7CiAJaW50IGk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2hhc2guaCBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2hhc2guaAppbmRleCBlYTZkMjFlLi5jNDgzZTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9oYXNoLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvaGFzaC5oCkBAIC0xOSw4ICsxOSw5IEBACiAgKgogICovCiAKLSNpZm5kZWYgX0JBVE1BTl9IQVNIX0gKLSNkZWZpbmUgX0JBVE1BTl9IQVNIX0gKKyNpZm5kZWYgX05FVF9CQVRNQU5fQURWX0hBU0hfSF8KKyNkZWZpbmUgX05FVF9CQVRNQU5fQURWX0hBU0hfSF8KKwogI2RlZmluZSBIQVNISVQobmFtZSkgc3RydWN0IGhhc2hfaXRfdCBuYW1lID0geyBcCiAJCS5pbmRleCA9IC0xLCAuYnVja2V0ID0gTlVMTCwgXAogCQkucHJldl9idWNrZXQgPSBOVUxMLCBcCkBAIC01Niw5ICs1Nyw2IEBACiAJCQkJICAgICAqIGFyZ3VtZW50IGFuZCB0aGUgc2l6ZSB0aGUgc2Vjb25kICovCiB9OwogCi0vKiBjbGVhcnMgdGhlIGhhc2ggKi8KLXZvaWQgaGFzaF9pbml0KHN0cnVjdCBoYXNodGFibGVfdCAqaGFzaCk7Ci0KIC8qIGFsbG9jYXRlcyBhbmQgY2xlYXJzIHRoZSBoYXNoICovCiBzdHJ1Y3QgaGFzaHRhYmxlX3QgKmhhc2hfbmV3KGludCBzaXplLCBoYXNoZGF0YV9jb21wYXJlX2NiIGNvbXBhcmUsCiAJCQkgICAgIGhhc2hkYXRhX2Nob29zZV9jYiBjaG9vc2UpOwpAQCAtOTksNiArOTcsNCBAQAogc3RydWN0IGhhc2hfaXRfdCAqaGFzaF9pdGVyYXRlKHN0cnVjdCBoYXNodGFibGVfdCAqaGFzaCwKIAkJCSAgICAgICBzdHJ1Y3QgaGFzaF9pdF90ICppdGVyX2luKTsKIAotLyogcHJpbnQgdGhlIGhhc2ggdGFibGUgZm9yIGRlYnVnZ2luZyAqLwotdm9pZCBoYXNoX2RlYnVnKHN0cnVjdCBoYXNodGFibGVfdCAqaGFzaCk7Ci0jZW5kaWYKKyNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfSEFTSF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvaWNtcF9zb2NrZXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2ljbXBfc29ja2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMzZDMyYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2ljbXBfc29ja2V0LmMKQEAgLTAsMCArMSwzMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBCLkEuVC5NLkEuTi4gY29udHJpYnV0b3JzOgorICoKKyAqIE1hcmVrIExpbmRuZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQQorICoKKyAqLworCisjaW5jbHVkZSAibWFpbi5oIgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSAiaWNtcF9zb2NrZXQuaCIKKyNpbmNsdWRlICJzZW5kLmgiCisjaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlICJoYXNoLmgiCisjaW5jbHVkZSAiaGFyZC1pbnRlcmZhY2UuaCIKKworCitzdGF0aWMgc3RydWN0IHNvY2tldF9jbGllbnQgKnNvY2tldF9jbGllbnRfaGFzaFsyNTZdOworCitzdGF0aWMgdm9pZCBiYXRfc29ja2V0X2FkZF9wYWNrZXQoc3RydWN0IHNvY2tldF9jbGllbnQgKnNvY2tldF9jbGllbnQsCisJCQkJICBzdHJ1Y3QgaWNtcF9wYWNrZXRfcnIgKmljbXBfcGFja2V0LAorCQkJCSAgc2l6ZV90IGljbXBfbGVuKTsKKwordm9pZCBiYXRfc29ja2V0X2luaXQodm9pZCkKK3sKKwltZW1zZXQoc29ja2V0X2NsaWVudF9oYXNoLCAwLCBzaXplb2Yoc29ja2V0X2NsaWVudF9oYXNoKSk7Cit9CisKK3N0YXRpYyBpbnQgYmF0X3NvY2tldF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBzb2NrZXRfY2xpZW50ICpzb2NrZXRfY2xpZW50OworCisJc29ja2V0X2NsaWVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrZXRfY2xpZW50KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXNvY2tldF9jbGllbnQpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc29ja2V0X2NsaWVudF9oYXNoKTsgaSsrKSB7CisJCWlmICghc29ja2V0X2NsaWVudF9oYXNoW2ldKSB7CisJCQlzb2NrZXRfY2xpZW50X2hhc2hbaV0gPSBzb2NrZXRfY2xpZW50OworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoaSA9PSBBUlJBWV9TSVpFKHNvY2tldF9jbGllbnRfaGFzaCkpIHsKKwkJcHJfZXJyKCJFcnJvciAtIGNhbid0IGFkZCBhbm90aGVyIHBhY2tldCBjbGllbnQ6ICIKKwkJICAgICAgICJtYXhpbXVtIG51bWJlciBvZiBjbGllbnRzIHJlYWNoZWRcbiIpOworCQlrZnJlZShzb2NrZXRfY2xpZW50KTsKKwkJcmV0dXJuIC1FWEZVTEw7CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJnNvY2tldF9jbGllbnQtPnF1ZXVlX2xpc3QpOworCXNvY2tldF9jbGllbnQtPnF1ZXVlX2xlbiA9IDA7CisJc29ja2V0X2NsaWVudC0+aW5kZXggPSBpOworCXNwaW5fbG9ja19pbml0KCZzb2NrZXRfY2xpZW50LT5sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzb2NrZXRfY2xpZW50LT5xdWV1ZV93YWl0KTsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IHNvY2tldF9jbGllbnQ7CisKKwlpbmNfbW9kdWxlX2NvdW50KCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmF0X3NvY2tldF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBzb2NrZXRfY2xpZW50ICpzb2NrZXRfY2xpZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzb2NrZXRfcGFja2V0ICpzb2NrZXRfcGFja2V0OworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfcG9zLCAqbGlzdF9wb3NfdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc29ja2V0X2NsaWVudC0+bG9jaywgZmxhZ3MpOworCisJLyogZm9yIGFsbCBwYWNrZXRzIGluIHRoZSBxdWV1ZSAuLi4gKi8KKwlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdF9wb3MsIGxpc3RfcG9zX3RtcCwgJnNvY2tldF9jbGllbnQtPnF1ZXVlX2xpc3QpIHsKKwkJc29ja2V0X3BhY2tldCA9IGxpc3RfZW50cnkobGlzdF9wb3MsCisJCQkJCSAgIHN0cnVjdCBzb2NrZXRfcGFja2V0LCBsaXN0KTsKKworCQlsaXN0X2RlbChsaXN0X3Bvcyk7CisJCWtmcmVlKHNvY2tldF9wYWNrZXQpOworCX0KKworCXNvY2tldF9jbGllbnRfaGFzaFtzb2NrZXRfY2xpZW50LT5pbmRleF0gPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNvY2tldF9jbGllbnQtPmxvY2ssIGZsYWdzKTsKKworCWtmcmVlKHNvY2tldF9jbGllbnQpOworCWRlY19tb2R1bGVfY291bnQoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBiYXRfc29ja2V0X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHNvY2tldF9jbGllbnQgKnNvY2tldF9jbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNvY2tldF9wYWNrZXQgKnNvY2tldF9wYWNrZXQ7CisJc2l6ZV90IHBhY2tldF9sZW47CisJaW50IGVycm9yOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSAmJiAoc29ja2V0X2NsaWVudC0+cXVldWVfbGVuID09IDApKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCWlmICgoIWJ1ZikgfHwgKGNvdW50IDwgc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgYnVmLCBjb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJZXJyb3IgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc29ja2V0X2NsaWVudC0+cXVldWVfd2FpdCwKKwkJCQkJIHNvY2tldF9jbGllbnQtPnF1ZXVlX2xlbik7CisKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzb2NrZXRfY2xpZW50LT5sb2NrLCBmbGFncyk7CisKKwlzb2NrZXRfcGFja2V0ID0gbGlzdF9maXJzdF9lbnRyeSgmc29ja2V0X2NsaWVudC0+cXVldWVfbGlzdCwKKwkJCQkJIHN0cnVjdCBzb2NrZXRfcGFja2V0LCBsaXN0KTsKKwlsaXN0X2RlbCgmc29ja2V0X3BhY2tldC0+bGlzdCk7CisJc29ja2V0X2NsaWVudC0+cXVldWVfbGVuLS07CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NrZXRfY2xpZW50LT5sb2NrLCBmbGFncyk7CisKKwllcnJvciA9IF9fY29weV90b191c2VyKGJ1ZiwgJnNvY2tldF9wYWNrZXQtPmljbXBfcGFja2V0LAorCQkJICAgICAgIHNvY2tldF9wYWNrZXQtPmljbXBfbGVuKTsKKworCXBhY2tldF9sZW4gPSBzb2NrZXRfcGFja2V0LT5pY21wX2xlbjsKKwlrZnJlZShzb2NrZXRfcGFja2V0KTsKKworCWlmIChlcnJvcikKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gcGFja2V0X2xlbjsKK30KKworc3RhdGljIHNzaXplX3QgYmF0X3NvY2tldF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmYsCisJCQkJc2l6ZV90IGxlbiwgbG9mZl90ICpvZmYpCit7CisJLyogRklYTUU6IGVhY2ggb3JpZ19ub2RlLT5iYXRtYW5faWYgd2lsbCBiZSBhdHRhY2hlZCB0byBhIHNvZnRpZiAqLworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihzb2Z0X2RldmljZSk7CisJc3RydWN0IHNvY2tldF9jbGllbnQgKnNvY2tldF9jbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGljbXBfcGFja2V0X3JyIGljbXBfcGFja2V0OworCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKKwlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWY7CisJc2l6ZV90IHBhY2tldF9sZW4gPSBzaXplb2Yoc3RydWN0IGljbXBfcGFja2V0KTsKKwl1aW50OF90IGRzdGFkZHJbRVRIX0FMRU5dOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAobGVuIDwgc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldCkpIHsKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKKwkJCSJFcnJvciAtIGNhbid0IHNlbmQgcGFja2V0IGZyb20gY2hhciBkZXZpY2U6ICIKKwkJCSJpbnZhbGlkIHBhY2tldCBzaXplXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGxlbiA+PSBzaXplb2Yoc3RydWN0IGljbXBfcGFja2V0X3JyKSkKKwkJcGFja2V0X2xlbiA9IHNpemVvZihzdHJ1Y3QgaWNtcF9wYWNrZXRfcnIpOworCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGJ1ZmYsIHBhY2tldF9sZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChfX2NvcHlfZnJvbV91c2VyKCZpY21wX3BhY2tldCwgYnVmZiwgcGFja2V0X2xlbikpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKGljbXBfcGFja2V0LnBhY2tldF90eXBlICE9IEJBVF9JQ01QKSB7CisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCQkiRXJyb3IgLSBjYW4ndCBzZW5kIHBhY2tldCBmcm9tIGNoYXIgZGV2aWNlOiAiCisJCQkiZ290IGJvZ3VzIHBhY2tldCB0eXBlIChleHBlY3RlZDogQkFUX0lDTVApXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGljbXBfcGFja2V0Lm1zZ190eXBlICE9IEVDSE9fUkVRVUVTVCkgeworCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAorCQkJIkVycm9yIC0gY2FuJ3Qgc2VuZCBwYWNrZXQgZnJvbSBjaGFyIGRldmljZTogIgorCQkJImdvdCBib2d1cyBtZXNzYWdlIHR5cGUgKGV4cGVjdGVkOiBFQ0hPX1JFUVVFU1QpXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWNtcF9wYWNrZXQudWlkID0gc29ja2V0X2NsaWVudC0+aW5kZXg7CisKKwlpZiAoaWNtcF9wYWNrZXQudmVyc2lvbiAhPSBDT01QQVRfVkVSU0lPTikgeworCQlpY21wX3BhY2tldC5tc2dfdHlwZSA9IFBBUkFNRVRFUl9QUk9CTEVNOworCQlpY21wX3BhY2tldC50dGwgPSBDT01QQVRfVkVSU0lPTjsKKwkJYmF0X3NvY2tldF9hZGRfcGFja2V0KHNvY2tldF9jbGllbnQsICZpY21wX3BhY2tldCwgcGFja2V0X2xlbik7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChhdG9taWNfcmVhZCgmbW9kdWxlX3N0YXRlKSAhPSBNT0RVTEVfQUNUSVZFKQorCQlnb3RvIGRzdF91bnJlYWNoOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CisJb3JpZ19ub2RlID0gKChzdHJ1Y3Qgb3JpZ19ub2RlICopaGFzaF9maW5kKG9yaWdfaGFzaCwgaWNtcF9wYWNrZXQuZHN0KSk7CisKKwlpZiAoIW9yaWdfbm9kZSkKKwkJZ290byB1bmxvY2s7CisKKwlpZiAoIW9yaWdfbm9kZS0+cm91dGVyKQorCQlnb3RvIHVubG9jazsKKworCWJhdG1hbl9pZiA9IG9yaWdfbm9kZS0+cm91dGVyLT5pZl9pbmNvbWluZzsKKwltZW1jcHkoZHN0YWRkciwgb3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIsIEVUSF9BTEVOKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CisKKwlpZiAoIWJhdG1hbl9pZikKKwkJZ290byBkc3RfdW5yZWFjaDsKKworCWlmIChiYXRtYW5faWYtPmlmX3N0YXR1cyAhPSBJRl9BQ1RJVkUpCisJCWdvdG8gZHN0X3VucmVhY2g7CisKKwltZW1jcHkoaWNtcF9wYWNrZXQub3JpZywgYmF0bWFuX2lmLT5uZXRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCisJaWYgKHBhY2tldF9sZW4gPT0gc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldF9ycikpCisJCW1lbWNweShpY21wX3BhY2tldC5yciwgYmF0bWFuX2lmLT5uZXRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCisJc2VuZF9yYXdfcGFja2V0KCh1bnNpZ25lZCBjaGFyICopJmljbXBfcGFja2V0LAorCQkJcGFja2V0X2xlbiwgYmF0bWFuX2lmLCBkc3RhZGRyKTsKKworCWdvdG8gb3V0OworCit1bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKK2RzdF91bnJlYWNoOgorCWljbXBfcGFja2V0Lm1zZ190eXBlID0gREVTVElOQVRJT05fVU5SRUFDSEFCTEU7CisJYmF0X3NvY2tldF9hZGRfcGFja2V0KHNvY2tldF9jbGllbnQsICZpY21wX3BhY2tldCwgcGFja2V0X2xlbik7CitvdXQ6CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBiYXRfc29ja2V0X3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IHNvY2tldF9jbGllbnQgKnNvY2tldF9jbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlwb2xsX3dhaXQoZmlsZSwgJnNvY2tldF9jbGllbnQtPnF1ZXVlX3dhaXQsIHdhaXQpOworCisJaWYgKHNvY2tldF9jbGllbnQtPnF1ZXVlX2xlbiA+IDApCisJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBiYXRfc29ja2V0X29wZW4sCisJLnJlbGVhc2UgPSBiYXRfc29ja2V0X3JlbGVhc2UsCisJLnJlYWQgPSBiYXRfc29ja2V0X3JlYWQsCisJLndyaXRlID0gYmF0X3NvY2tldF93cml0ZSwKKwkucG9sbCA9IGJhdF9zb2NrZXRfcG9sbCwKK307CisKK2ludCBiYXRfc29ja2V0X3NldHVwKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCit7CisJc3RydWN0IGRlbnRyeSAqZDsKKworCWlmICghYmF0X3ByaXYtPmRlYnVnX2RpcikKKwkJZ290byBlcnI7CisKKwlkID0gZGVidWdmc19jcmVhdGVfZmlsZShJQ01QX1NPQ0tFVCwgU19JRlJFRyB8IFNfSVdVU1IgfCBTX0lSVVNSLAorCQkJCWJhdF9wcml2LT5kZWJ1Z19kaXIsIE5VTEwsICZmb3BzKTsKKwlpZiAoZCkKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBiYXRfc29ja2V0X2FkZF9wYWNrZXQoc3RydWN0IHNvY2tldF9jbGllbnQgKnNvY2tldF9jbGllbnQsCisJCQkJICBzdHJ1Y3QgaWNtcF9wYWNrZXRfcnIgKmljbXBfcGFja2V0LAorCQkJCSAgc2l6ZV90IGljbXBfbGVuKQoreworCXN0cnVjdCBzb2NrZXRfcGFja2V0ICpzb2NrZXRfcGFja2V0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzb2NrZXRfcGFja2V0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNvY2tldF9wYWNrZXQpLCBHRlBfQVRPTUlDKTsKKworCWlmICghc29ja2V0X3BhY2tldCkKKwkJcmV0dXJuOworCisJSU5JVF9MSVNUX0hFQUQoJnNvY2tldF9wYWNrZXQtPmxpc3QpOworCW1lbWNweSgmc29ja2V0X3BhY2tldC0+aWNtcF9wYWNrZXQsIGljbXBfcGFja2V0LCBpY21wX2xlbik7CisJc29ja2V0X3BhY2tldC0+aWNtcF9sZW4gPSBpY21wX2xlbjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzb2NrZXRfY2xpZW50LT5sb2NrLCBmbGFncyk7CisKKwkvKiB3aGlsZSB3YWl0aW5nIGZvciB0aGUgbG9jayB0aGUgc29ja2V0X2NsaWVudCBjb3VsZCBoYXZlIGJlZW4KKwkgKiBkZWxldGVkICovCisJaWYgKCFzb2NrZXRfY2xpZW50X2hhc2hbaWNtcF9wYWNrZXQtPnVpZF0pIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc29ja2V0X2NsaWVudC0+bG9jaywgZmxhZ3MpOworCQlrZnJlZShzb2NrZXRfcGFja2V0KTsKKwkJcmV0dXJuOworCX0KKworCWxpc3RfYWRkX3RhaWwoJnNvY2tldF9wYWNrZXQtPmxpc3QsICZzb2NrZXRfY2xpZW50LT5xdWV1ZV9saXN0KTsKKwlzb2NrZXRfY2xpZW50LT5xdWV1ZV9sZW4rKzsKKworCWlmIChzb2NrZXRfY2xpZW50LT5xdWV1ZV9sZW4gPiAxMDApIHsKKwkJc29ja2V0X3BhY2tldCA9IGxpc3RfZmlyc3RfZW50cnkoJnNvY2tldF9jbGllbnQtPnF1ZXVlX2xpc3QsCisJCQkJCQkgc3RydWN0IHNvY2tldF9wYWNrZXQsIGxpc3QpOworCisJCWxpc3RfZGVsKCZzb2NrZXRfcGFja2V0LT5saXN0KTsKKwkJa2ZyZWUoc29ja2V0X3BhY2tldCk7CisJCXNvY2tldF9jbGllbnQtPnF1ZXVlX2xlbi0tOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNvY2tldF9jbGllbnQtPmxvY2ssIGZsYWdzKTsKKworCXdha2VfdXAoJnNvY2tldF9jbGllbnQtPnF1ZXVlX3dhaXQpOworfQorCit2b2lkIGJhdF9zb2NrZXRfcmVjZWl2ZV9wYWNrZXQoc3RydWN0IGljbXBfcGFja2V0X3JyICppY21wX3BhY2tldCwKKwkJCSAgICAgICBzaXplX3QgaWNtcF9sZW4pCit7CisJc3RydWN0IHNvY2tldF9jbGllbnQgKmhhc2ggPSBzb2NrZXRfY2xpZW50X2hhc2hbaWNtcF9wYWNrZXQtPnVpZF07CisKKwlpZiAoaGFzaCkKKwkJYmF0X3NvY2tldF9hZGRfcGFja2V0KGhhc2gsIGljbXBfcGFja2V0LCBpY21wX2xlbik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9pY21wX3NvY2tldC5oIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvaWNtcF9zb2NrZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjliMzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvaWNtcF9zb2NrZXQuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgQi5BLlQuTS5BLk4uIGNvbnRyaWJ1dG9yczoKKyAqCisgKiBNYXJlayBMaW5kbmVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfSUNNUF9TT0NLRVRfSF8KKyNkZWZpbmUgX05FVF9CQVRNQU5fQURWX0lDTVBfU09DS0VUX0hfCisKKyNpbmNsdWRlICJ0eXBlcy5oIgorCisjZGVmaW5lIElDTVBfU09DS0VUICJzb2NrZXQiCisKK3ZvaWQgYmF0X3NvY2tldF9pbml0KHZvaWQpOworaW50IGJhdF9zb2NrZXRfc2V0dXAoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdik7Cit2b2lkIGJhdF9zb2NrZXRfcmVjZWl2ZV9wYWNrZXQoc3RydWN0IGljbXBfcGFja2V0X3JyICppY21wX3BhY2tldCwKKwkJCSAgICAgICBzaXplX3QgaWNtcF9sZW4pOworCisjZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX0lDTVBfU09DS0VUX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9tYWluLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9tYWluLmMKaW5kZXggNzRjNzBkNS4uMjY4NjAxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvbWFpbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L21haW4uYwpAQCAtMjEsMTEgKzIxLDEyIEBACiAKICNpbmNsdWRlICJtYWluLmgiCiAjaW5jbHVkZSAiYmF0X3N5c2ZzLmgiCisjaW5jbHVkZSAiYmF0X2RlYnVnZnMuaCIKICNpbmNsdWRlICJyb3V0aW5nLmgiCiAjaW5jbHVkZSAic2VuZC5oIgogI2luY2x1ZGUgIm9yaWdpbmF0b3IuaCIKICNpbmNsdWRlICJzb2Z0LWludGVyZmFjZS5oIgotI2luY2x1ZGUgImRldmljZS5oIgorI2luY2x1ZGUgImljbXBfc29ja2V0LmgiCiAjaW5jbHVkZSAidHJhbnNsYXRpb24tdGFibGUuaCIKICNpbmNsdWRlICJoYXJkLWludGVyZmFjZS5oIgogI2luY2x1ZGUgInR5cGVzLmgiCkBAIC00MSw3ICs0Miw2IEBACiBERUZJTkVfU1BJTkxPQ0soZm9yd19iYXRfbGlzdF9sb2NrKTsKIERFRklORV9TUElOTE9DSyhmb3J3X2JjYXN0X2xpc3RfbG9jayk7CiAKLWF0b21pY190IHZpc19pbnRlcnZhbDsKIGF0b21pY190IGJjYXN0X3F1ZXVlX2xlZnQ7CiBhdG9taWNfdCBiYXRtYW5fcXVldWVfbGVmdDsKIApAQCAtNDksNyArNDksNyBAQAogCiBzdHJ1Y3QgbmV0X2RldmljZSAqc29mdF9kZXZpY2U7CiAKLXVuc2lnbmVkIGNoYXIgYnJvYWRjYXN0QWRkcltdID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OwordW5zaWduZWQgY2hhciBicm9hZGNhc3RfYWRkcltdID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OwogYXRvbWljX3QgbW9kdWxlX3N0YXRlOwogCiBzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGJhdG1hbl9hZHZfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKQEAgLTU5LDE4ICs1OSw3IEBACiAKIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpiYXRfZXZlbnRfd29ya3F1ZXVlOwogCi0jaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfREVCVUcKLWludCBkZWJ1ZzsKLQotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwotCi1pbnQgYmF0X2RlYnVnX3R5cGUoaW50IHR5cGUpCi17Ci0JcmV0dXJuIGRlYnVnICYgdHlwZTsKLX0KLSNlbmRpZgotCi1pbnQgaW5pdF9tb2R1bGUodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGJhdG1hbl9pbml0KHZvaWQpCiB7CiAJaW50IHJldHZhbDsKIApAQCAtODAsOCArNjksNiBAQAogCiAJYXRvbWljX3NldCgmbW9kdWxlX3N0YXRlLCBNT0RVTEVfSU5BQ1RJVkUpOwogCi0JYXRvbWljX3NldCgmdmlzX2ludGVydmFsLCAxMDAwKTsvKiBUT0RPOiByYWlzZSB0aGlzIGxhdGVyLCB0aGlzIGlzIG9ubHkKLQkJCQkJICogZm9yIGRlYnVnZ2luZyBub3cuICovCiAJYXRvbWljX3NldCgmYmNhc3RfcXVldWVfbGVmdCwgQkNBU1RfUVVFVUVfTEVOKTsKIAlhdG9taWNfc2V0KCZiYXRtYW5fcXVldWVfbGVmdCwgQkFUTUFOX1FVRVVFX0xFTik7CiAKQEAgLTkyLDIzICs3OSwyMiBAQAogCWlmICghYmF0X2V2ZW50X3dvcmtxdWV1ZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQliYXRfZGV2aWNlX2luaXQoKTsKKwliYXRfc29ja2V0X2luaXQoKTsKKwlkZWJ1Z2ZzX2luaXQoKTsKIAogCS8qIGluaXRpYWxpemUgbGF5ZXIgMiBpbnRlcmZhY2UgKi8KIAlzb2Z0X2RldmljZSA9IGFsbG9jX25ldGRldihzaXplb2Yoc3RydWN0IGJhdF9wcml2KSAsICJiYXQlZCIsCiAJCQkJICAgaW50ZXJmYWNlX3NldHVwKTsKIAogCWlmICghc29mdF9kZXZpY2UpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OiIKLQkJICAgICAgICJVbmFibGUgdG8gYWxsb2NhdGUgdGhlIGJhdG1hbiBpbnRlcmZhY2VcbiIpOworCQlwcl9lcnIoIlVuYWJsZSB0byBhbGxvY2F0ZSB0aGUgYmF0bWFuIGludGVyZmFjZVxuIik7CiAJCWdvdG8gZW5kOwogCX0KIAogCXJldHZhbCA9IHJlZ2lzdGVyX25ldGRldihzb2Z0X2RldmljZSk7CiAKIAlpZiAocmV0dmFsIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6IgotCQkgICAgICAgIlVuYWJsZSB0byByZWdpc3RlciB0aGUgYmF0bWFuIGludGVyZmFjZTogJWlcbiIsIHJldHZhbCk7CisJCXByX2VycigiVW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBiYXRtYW4gaW50ZXJmYWNlOiAlaVxuIiwgcmV0dmFsKTsKIAkJZ290byBmcmVlX3NvZnRfZGV2aWNlOwogCX0KIApAQCAtMTE3LDE1ICsxMDMsMjIgQEAKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byB1bnJlZ19zb2Z0X2RldmljZTsKIAorCXJldHZhbCA9IGRlYnVnZnNfYWRkX21lc2hpZihzb2Z0X2RldmljZSk7CisKKwlpZiAocmV0dmFsIDwgMCkKKwkJZ290byB1bnJlZ19zeXNmczsKKwogCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmaGFyZF9pZl9ub3RpZmllcik7CiAJZGV2X2FkZF9wYWNrKCZiYXRtYW5fYWR2X3BhY2tldF90eXBlKTsKIAotCXByaW50ayhLRVJOX0lORk8gImJhdG1hbi1hZHY6IgotCSAgICAgICAiQi5BLlQuTS5BLk4uIGFkdmFuY2VkICVzJXMgKGNvbXBhdGliaWxpdHkgdmVyc2lvbiAlaSkgbG9hZGVkXG4iLAotCSAgICAgICBTT1VSQ0VfVkVSU0lPTiwgUkVWSVNJT05fVkVSU0lPTl9TVFIsIENPTVBBVF9WRVJTSU9OKTsKKwlwcl9pbmZvKCJCLkEuVC5NLkEuTi4gYWR2YW5jZWQgJXMlcyAoY29tcGF0aWJpbGl0eSB2ZXJzaW9uICVpKSAiCisJCSJsb2FkZWRcbiIsIFNPVVJDRV9WRVJTSU9OLCBSRVZJU0lPTl9WRVJTSU9OX1NUUiwKKwkJQ09NUEFUX1ZFUlNJT04pOwogCiAJcmV0dXJuIDA7CiAKK3VucmVnX3N5c2ZzOgorCXN5c2ZzX2RlbF9tZXNoaWYoc29mdF9kZXZpY2UpOwogdW5yZWdfc29mdF9kZXZpY2U6CiAJdW5yZWdpc3Rlcl9uZXRkZXYoc29mdF9kZXZpY2UpOwogCXNvZnRfZGV2aWNlID0gTlVMTDsKQEAgLTEzOCwxNCArMTMxLDE2IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLXZvaWQgY2xlYW51cF9tb2R1bGUodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBiYXRtYW5fZXhpdCh2b2lkKQogewogCWRlYWN0aXZhdGVfbW9kdWxlKCk7CiAKKwlkZWJ1Z2ZzX2Rlc3Ryb3koKTsKIAl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmaGFyZF9pZl9ub3RpZmllcik7CiAJaGFyZGlmX3JlbW92ZV9pbnRlcmZhY2VzKCk7CiAKIAlpZiAoc29mdF9kZXZpY2UpIHsKKwkJZGVidWdmc19kZWxfbWVzaGlmKHNvZnRfZGV2aWNlKTsKIAkJc3lzZnNfZGVsX21lc2hpZihzb2Z0X2RldmljZSk7CiAJCXVucmVnaXN0ZXJfbmV0ZGV2KHNvZnRfZGV2aWNlKTsKIAkJc29mdF9kZXZpY2UgPSBOVUxMOwpAQCAtMTU3LDcgKzE1Miw3IEBACiAJYmF0X2V2ZW50X3dvcmtxdWV1ZSA9IE5VTEw7CiB9CiAKLS8qIGFjdGl2YXRlcyB0aGUgbW9kdWxlLCBjcmVhdGVzIGJhdCBkZXZpY2UsIHN0YXJ0cyB0aW1lciAuLi4gKi8KKy8qIGFjdGl2YXRlcyB0aGUgbW9kdWxlLCBzdGFydHMgdGltZXIgLi4uICovCiB2b2lkIGFjdGl2YXRlX21vZHVsZSh2b2lkKQogewogCWlmIChvcmlnaW5hdG9yX2luaXQoKSA8IDEpCkBAIC0xNzEsOSArMTY2LDYgQEAKIAogCWhuYV9sb2NhbF9hZGQoc29mdF9kZXZpY2UtPmRldl9hZGRyKTsKIAotCWlmIChiYXRfZGV2aWNlX3NldHVwKCkgPCAxKQotCQlnb3RvIGVuZDsKLQogCWlmICh2aXNfaW5pdCgpIDwgMSkKIAkJZ290byBlcnI7CiAKQEAgLTE4Miw4ICsxNzQsNyBAQAogCWdvdG8gZW5kOwogCiBlcnI6Ci0JcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OiIKLQkgICAgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIG1lc2ggaW5mb3JtYXRpb24gc3RydWN0dXJlczogIgorCXByX2VycigiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgbWVzaCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmVzOiAiCiAJICAgICAgICJvdXQgb2YgbWVtID9cbiIpOwogCWRlYWN0aXZhdGVfbW9kdWxlKCk7CiBlbmQ6CkBAIC0yMDgsNyArMTk5LDYgQEAKIAlobmFfZ2xvYmFsX2ZyZWUoKTsKIAogCXN5bmNocm9uaXplX25ldCgpOwotCWJhdF9kZXZpY2VfZGVzdHJveSgpOwogCiAJc3luY2hyb25pemVfcmN1KCk7CiAJYXRvbWljX3NldCgmbW9kdWxlX3N0YXRlLCBNT0RVTEVfSU5BQ1RJVkUpOwpAQCAtMjI2LDggKzIxNiw3IEBACiAKIGludCBhZGRyX3RvX3N0cmluZyhjaGFyICpidWZmLCB1aW50OF90ICphZGRyKQogewotCXJldHVybiBzcHJpbnRmKGJ1ZmYsIE1BQ19GTVQsCi0JCSAgICAgICBhZGRyWzBdLCBhZGRyWzFdLCBhZGRyWzJdLCBhZGRyWzNdLCBhZGRyWzRdLCBhZGRyWzVdKTsKKwlyZXR1cm4gc3ByaW50ZihidWZmLCAiJXBNIiwgYWRkcik7CiB9CiAKIC8qIHJldHVybnMgMSBpZiB0aGV5IGFyZSB0aGUgc2FtZSBvcmlnaW5hdG9yICovCkBAIC0yODQsNiArMjczLDkgQEAKIAlyZXR1cm4gKmFkZHIgJiAweDAxOwogfQogCittb2R1bGVfaW5pdChiYXRtYW5faW5pdCk7Cittb2R1bGVfZXhpdChiYXRtYW5fZXhpdCk7CisKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L21haW4uaCBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L21haW4uaAppbmRleCA1ZjgzNDNkLi44NTEzMjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9tYWluLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvbWFpbi5oCkBAIC0xOSw2ICsxOSw5IEBACiAgKgogICovCiAKKyNpZm5kZWYgX05FVF9CQVRNQU5fQURWX01BSU5fSF8KKyNkZWZpbmUgX05FVF9CQVRNQU5fQURWX01BSU5fSF8KKwogLyogS2VybmVsIFByb2dyYW1taW5nICovCiAjZGVmaW5lIExJTlVYCiAKQEAgLTI3LDcgKzMwLDcgQEAKICNkZWZpbmUgRFJJVkVSX0RFU0MgICAiQi5BLlQuTS5BLk4uIGFkdmFuY2VkIgogI2RlZmluZSBEUklWRVJfREVWSUNFICJiYXRtYW4tYWR2IgogCi0jZGVmaW5lIFNPVVJDRV9WRVJTSU9OICIwLjIuMi1iZXRhIgorI2RlZmluZSBTT1VSQ0VfVkVSU0lPTiAibWFpbnQiCiAKIAogLyogQi5BLlQuTS5BLk4uIHBhcmFtZXRlcnMgKi8KQEAgLTM2LDEwICszOSwxMCBAQAogI2RlZmluZSBKSVRURVIgMjAKICNkZWZpbmUgVFRMIDUwCQkJICAvKiBUaW1lIFRvIExpdmUgb2YgYnJvYWRjYXN0IG1lc3NhZ2VzICovCiAKLSNkZWZpbmUgUFVSR0VfVElNRU9VVCAyMDAwMDAJICAvKiBwdXJnZSBvcmlnaW5hdG9ycyBhZnRlciB0aW1lIGluIG1zIGlmIG5vCisjZGVmaW5lIFBVUkdFX1RJTUVPVVQgMjAwCS8qIHB1cmdlIG9yaWdpbmF0b3JzIGFmdGVyIHRpbWUgaW4gc2Vjb25kcyBpZiBubwogCQkJCSAgICogdmFsaWQgcGFja2V0IGNvbWVzIGluIC0+IFRPRE86IGNoZWNrCiAJCQkJICAgKiBpbmZsdWVuY2Ugb24gVFFfTE9DQUxfV0lORE9XX1NJWkUgKi8KLSNkZWZpbmUgTE9DQUxfSE5BX1RJTUVPVVQgMzYwMDAwMAorI2RlZmluZSBMT0NBTF9ITkFfVElNRU9VVCAzNjAwIC8qIGluIHNlY29uZHMgKi8KIAogI2RlZmluZSBUUV9MT0NBTF9XSU5ET1dfU0laRSA2NAkgIC8qIHNsaWRpbmcgcGFja2V0IHJhbmdlIG9mIHJlY2VpdmVkIG9yaWdpbmF0b3IKIAkJCQkgICAqIG1lc3NhZ2VzIGluIHNxdWVuY2UgbnVtYmVycyAoc2hvdWxkIGJlIGEKQEAgLTU3LDQ0ICs2MCw0MiBAQAogI2RlZmluZSBMT0dfQlVGX0xFTiA4MTkyCSAgLyogaGFzIHRvIGJlIGEgcG93ZXIgb2YgMiAqLwogI2RlZmluZSBFVEhfU1RSX0xFTiAyMAogCisjZGVmaW5lIFZJU19JTlRFUlZBTCA1MDAwCS8qIDUgc2Vjb25kcyAqLworCisvKiBob3cgbXVjaCB3b3JzZSBzZWNvbmRhcnkgaW50ZXJmYWNlcyBtYXkgYmUgdG8KKyAqIHRvIGJlIGNvbnNpZGVyZWQgYXMgYm9uZGluZyBjYW5kaWRhdGVzICovCisKKyNkZWZpbmUgQk9ORElOR19UUV9USFJFU0hPTEQJNTAKKwogI2RlZmluZSBNQVhfQUdHUkVHQVRJT05fQllURVMgNTEyIC8qIHNob3VsZCBub3QgYmUgYmlnZ2VyIHRoYW4gNTEyIGJ5dGVzIG9yCiAJCQkJICAgKiBjaGFuZ2UgdGhlIHNpemUgb2YKIAkJCQkgICAqIGZvcndfcGFja2V0LT5kaXJlY3RfbGlua19mbGFncyAqLwogI2RlZmluZSBNQVhfQUdHUkVHQVRJT05fTVMgMTAwCiAKICNkZWZpbmUgUkVTRVRfUFJPVEVDVElPTl9NUyAzMDAwMAotI2RlZmluZSBFWFBFQ1RFRF9TRVFOT19SQU5HRQk0MDk2CisjZGVmaW5lIEVYUEVDVEVEX1NFUU5PX1JBTkdFCTY1NTM2CiAvKiBkb24ndCByZXNldCBhZ2FpbiB3aXRoaW4gMzAgc2Vjb25kcyAqLwogCiAjZGVmaW5lIE1PRFVMRV9JTkFDVElWRSAwCiAjZGVmaW5lIE1PRFVMRV9BQ1RJVkUgMQogI2RlZmluZSBNT0RVTEVfREVBQ1RJVkFUSU5HIDIKIAotI2RlZmluZSBCQ0FTVF9RVUVVRV9MRU4gMjU2CisjZGVmaW5lIEJDQVNUX1FVRVVFX0xFTgkJMjU2CiAjZGVmaW5lIEJBVE1BTl9RVUVVRV9MRU4JMjU2CiAKIC8qCiAgKiBEZWJ1ZyBNZXNzYWdlcwogICovCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10IC8qIEFwcGVuZCAnYmF0bWFuLWFkdjogJyBiZWZvcmUKKwkJCQkJICAgICAqIGtlcm5lbCBtZXNzYWdlcyAqLwogCiAjZGVmaW5lIERCR19CQVRNQU4gMQkvKiBhbGwgbWVzc2FnZXMgcmVsYXRlZCB0byByb3V0aW5nIC8gZmxvb2RpbmcgLwogCQkJICogYnJvYWRjYXN0aW5nIC8gZXRjICovCiAjZGVmaW5lIERCR19ST1VURVMgMgkvKiByb3V0ZSBvciBobmEgYWRkZWQgLyBjaGFuZ2VkIC8gZGVsZXRlZCAqLworI2RlZmluZSBEQkdfQUxMIDMKIAotI2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0RFQlVHCi1leHRlcm4gaW50IGRlYnVnOworI2RlZmluZSBMT0dfQlVGX0xFTiA4MTkyICAgICAgICAgIC8qIGhhcyB0byBiZSBhIHBvd2VyIG9mIDIgKi8KIAotZXh0ZXJuIGludCBiYXRfZGVidWdfdHlwZShpbnQgdHlwZSk7Ci0jZGVmaW5lIGJhdF9kYmcodHlwZSwgZm10LCBhcmcuLi4pIGRvIHsJCQkJCVwKLQkJaWYgKGJhdF9kZWJ1Z190eXBlKHR5cGUpKQkJCQlcCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiYmF0bWFuLWFkdjoiIGZtdCwgIyMgYXJnKTsJXAotCX0JCQkJCQkJCVwKLQl3aGlsZSAoMCkKLSNlbHNlIC8qICFDT05GSUdfQkFUTUFOX0FEVl9ERUJVRyAqLwotI2RlZmluZSBiYXRfZGJnKHR5cGUsIGZtdCwgYXJnLi4uKSBkbyB7CQlcCi0JfQkJCQkJXAotCXdoaWxlICgwKQotI2VuZGlmCiAKIC8qCiAgKiAgVmlzCkBAIC0xMTcsNiArMTE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4JCS8qIHN0cnVjdCBzb2NrICovCiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSAidHlwZXMuaCIKIAogI2lmbmRlZiBSRVZJU0lPTl9WRVJTSU9OCkBAIC0xMzQsMTQgKzEzNiwxMyBAQAogZXh0ZXJuIHNwaW5sb2NrX3QgZm9yd19iYXRfbGlzdF9sb2NrOwogZXh0ZXJuIHNwaW5sb2NrX3QgZm9yd19iY2FzdF9saXN0X2xvY2s7CiAKLWV4dGVybiBhdG9taWNfdCB2aXNfaW50ZXJ2YWw7CiBleHRlcm4gYXRvbWljX3QgYmNhc3RfcXVldWVfbGVmdDsKIGV4dGVybiBhdG9taWNfdCBiYXRtYW5fcXVldWVfbGVmdDsKIGV4dGVybiBpbnQxNl90IG51bV9obmE7CiAKIGV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqc29mdF9kZXZpY2U7CiAKLWV4dGVybiB1bnNpZ25lZCBjaGFyIGJyb2FkY2FzdEFkZHJbXTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIGJyb2FkY2FzdF9hZGRyW107CiBleHRlcm4gYXRvbWljX3QgbW9kdWxlX3N0YXRlOwogZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpiYXRfZXZlbnRfd29ya3F1ZXVlOwogCkBAIC0xNTUsMyArMTU2LDQ0IEBACiBpbnQgaXNfbXlfbWFjKHVpbnQ4X3QgKmFkZHIpOwogaW50IGlzX2JjYXN0KHVpbnQ4X3QgKmFkZHIpOwogaW50IGlzX21jYXN0KHVpbnQ4X3QgKmFkZHIpOworCisjaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfREVCVUcKK2V4dGVybiBpbnQgZGVidWdfbG9nKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsIGNoYXIgKmZtdCwgLi4uKTsKKworI2RlZmluZSBiYXRfZGJnKHR5cGUsIGJhdF9wcml2LCBmbXQsIGFyZy4uLikJCQlcCisJZG8gewkJCQkJCQlcCisJCWlmIChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmxvZ19sZXZlbCkgJiB0eXBlKQlcCisJCQlkZWJ1Z19sb2coYmF0X3ByaXYsIGZtdCwgIyMgYXJnKTsJXAorCX0JCQkJCQkJXAorCXdoaWxlICgwKQorI2Vsc2UgLyogIUNPTkZJR19CQVRNQU5fQURWX0RFQlVHICovCitzdGF0aWMgaW5saW5lIHZvaWQgYmF0X2RiZyhjaGFyIHR5cGUgX19hdHRyaWJ1dGVfXygodW51c2VkKSksCisJCQkgICBzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2IF9fYXR0cmlidXRlX18oKHVudXNlZCkpLAorCQkJICAgY2hhciAqZm10IF9fYXR0cmlidXRlX18oKHVudXNlZCkpLCAuLi4pCit7Cit9CisjZW5kaWYKKworI2RlZmluZSBiYXRfd2FybmluZyhuZXRfZGV2LCBmbXQsIGFyZy4uLikJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJc3RydWN0IG5ldF9kZXZpY2UgKl9uZXRkZXYgPSAobmV0X2Rldik7ICAgICAgICAgICAgICAgICBcCisJCXN0cnVjdCBiYXRfcHJpdiAqX2JhdHByaXYgPSBuZXRkZXZfcHJpdihfbmV0ZGV2KTsgICAgICAgXAorCQliYXRfZGJnKERCR19BTEwsIF9iYXRwcml2LCBmbXQsICMjIGFyZyk7CQlcCisJCXByX3dhcm5pbmcoIiVzOiAiIGZtdCwgX25ldGRldi0+bmFtZSwgIyMgYXJnKTsJCVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBiYXRfaW5mbyhuZXRfZGV2LCBmbXQsIGFyZy4uLikJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXN0cnVjdCBuZXRfZGV2aWNlICpfbmV0ZGV2ID0gKG5ldF9kZXYpOyAgICAgICAgICAgICAgICAgXAorCQlzdHJ1Y3QgYmF0X3ByaXYgKl9iYXRwcml2ID0gbmV0ZGV2X3ByaXYoX25ldGRldik7ICAgICAgIFwKKwkJYmF0X2RiZyhEQkdfQUxMLCBfYmF0cHJpdiwgZm10LCAjIyBhcmcpOwkJXAorCQlwcl9pbmZvKCIlczogIiBmbXQsIF9uZXRkZXYtPm5hbWUsICMjIGFyZyk7CQlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgYmF0X2VycihuZXRfZGV2LCBmbXQsIGFyZy4uLikJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXN0cnVjdCBuZXRfZGV2aWNlICpfbmV0ZGV2ID0gKG5ldF9kZXYpOyAgICAgICAgICAgICAgICAgXAorCQlzdHJ1Y3QgYmF0X3ByaXYgKl9iYXRwcml2ID0gbmV0ZGV2X3ByaXYoX25ldGRldik7ICAgICAgIFwKKwkJYmF0X2RiZyhEQkdfQUxMLCBfYmF0cHJpdiwgZm10LCAjIyBhcmcpOwkJXAorCQlwcl9lcnIoIiVzOiAiIGZtdCwgX25ldGRldi0+bmFtZSwgIyMgYXJnKTsJCVwKKwl9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX01BSU5fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYwppbmRleCA1NjhhZWY4Li4yOGJiNjI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jCkBAIC01NiwyOCArNTYsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBvcmlnaW5hdG9yX2ZyZWUodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCFvcmlnX2hhc2gpCi0JCXJldHVybjsKLQotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHVyZ2Vfb3JpZ193cSk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKLQloYXNoX2RlbGV0ZShvcmlnX2hhc2gsIGZyZWVfb3JpZ19ub2RlKTsKLQlvcmlnX2hhc2ggPSBOVUxMOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7Ci19Ci0KIHN0cnVjdCBuZWlnaF9ub2RlICoKIGNyZWF0ZV9uZWlnaGJvcihzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbmVpZ2hfbm9kZSwKIAkJdWludDhfdCAqbmVpZ2gsIHN0cnVjdCBiYXRtYW5faWYgKmlmX2luY29taW5nKQogeworCS8qIEZJWE1FOiBlYWNoIG9yaWdfbm9kZS0+YmF0bWFuX2lmIHdpbGwgYmUgYXR0YWNoZWQgdG8gYSBzb2Z0aWYgKi8KKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoc29mdF9kZXZpY2UpOwogCXN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlOwogCi0JYmF0X2RiZyhEQkdfQkFUTUFOLCAiQ3JlYXRpbmcgbmV3IGxhc3QtaG9wIG5laWdoYm9yIG9mIG9yaWdpbmF0b3JcbiIpOworCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCSJDcmVhdGluZyBuZXcgbGFzdC1ob3AgbmVpZ2hib3Igb2Ygb3JpZ2luYXRvclxuIik7CiAKIAluZWlnaF9ub2RlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5laWdoX25vZGUpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIW5laWdoX25vZGUpCkBAIC05Myw3ICs4MSw3IEBACiAJcmV0dXJuIG5laWdoX25vZGU7CiB9CiAKLXZvaWQgZnJlZV9vcmlnX25vZGUodm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkIGZyZWVfb3JpZ19ub2RlKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9wb3MsICpsaXN0X3Bvc190bXA7CiAJc3RydWN0IG5laWdoX25vZGUgKm5laWdoX25vZGU7CkBAIC0xMTQsNiArMTAyLDIxIEBACiAJa2ZyZWUob3JpZ19ub2RlKTsKIH0KIAordm9pZCBvcmlnaW5hdG9yX2ZyZWUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFvcmlnX2hhc2gpCisJCXJldHVybjsKKworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHVyZ2Vfb3JpZ193cSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKKwloYXNoX2RlbGV0ZShvcmlnX2hhc2gsIGZyZWVfb3JpZ19ub2RlKTsKKwlvcmlnX2hhc2ggPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7Cit9CisKIC8qIHRoaXMgZnVuY3Rpb24gZmluZHMgb3IgY3JlYXRlcyBhbiBvcmlnaW5hdG9yIGVudHJ5IGZvciB0aGUgZ2l2ZW4KICAqIGFkZHJlc3MgaWYgaXQgZG9lcyBub3QgZXhpdHMgKi8KIHN0cnVjdCBvcmlnX25vZGUgKmdldF9vcmlnX25vZGUodWludDhfdCAqYWRkcikKQEAgLTEyOSw3ICsxMzIsOCBAQAogCWlmIChvcmlnX25vZGUgIT0gTlVMTCkKIAkJcmV0dXJuIG9yaWdfbm9kZTsKIAotCWJhdF9kYmcoREJHX0JBVE1BTiwgIkNyZWF0aW5nIG5ldyBvcmlnaW5hdG9yOiAlcE1cbiIsIGFkZHIpOworCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCSJDcmVhdGluZyBuZXcgb3JpZ2luYXRvcjogJXBNXG4iLCBhZGRyKTsKIAogCW9yaWdfbm9kZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvcmlnX25vZGUpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIW9yaWdfbm9kZSkKQEAgLTE2Myw4ICsxNjcsOCBAQAogCQlzd2FwaGFzaCA9IGhhc2hfcmVzaXplKG9yaWdfaGFzaCwgb3JpZ19oYXNoLT5zaXplICogMik7CiAKIAkJaWYgKHN3YXBoYXNoID09IE5VTEwpCi0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiYmF0bWFuLWFkdjpDb3VsZG4ndCByZXNpemUgb3JpZyBoYXNoIHRhYmxlXG4iKTsKKwkJCWJhdF9lcnIoc29mdF9kZXZpY2UsCisJCQkJIkNvdWxkbid0IHJlc2l6ZSBvcmlnIGhhc2ggdGFibGVcbiIpOwogCQllbHNlCiAJCQlvcmlnX2hhc2ggPSBzd2FwaGFzaDsKIAl9CkBAIC0xODIsNiArMTg2LDggQEAKIHN0YXRpYyBib29sIHB1cmdlX29yaWdfbmVpZ2hib3JzKHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwKIAkJCQkgc3RydWN0IG5laWdoX25vZGUgKipiZXN0X25laWdoX25vZGUpCiB7CisJLyogRklYTUU6IGVhY2ggb3JpZ19ub2RlLT5iYXRtYW5faWYgd2lsbCBiZSBhdHRhY2hlZCB0byBhIHNvZnRpZiAqLworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihzb2Z0X2RldmljZSk7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9wb3MsICpsaXN0X3Bvc190bXA7CiAJc3RydWN0IG5laWdoX25vZGUgKm5laWdoX25vZGU7CiAJYm9vbCBuZWlnaF9wdXJnZWQgPSBmYWxzZTsKQEAgLTE5MywyMCArMTk5LDE5IEBACiAJCW5laWdoX25vZGUgPSBsaXN0X2VudHJ5KGxpc3RfcG9zLCBzdHJ1Y3QgbmVpZ2hfbm9kZSwgbGlzdCk7CiAKIAkJaWYgKCh0aW1lX2FmdGVyKGppZmZpZXMsCi0JCQkgICAgICAgKG5laWdoX25vZGUtPmxhc3RfdmFsaWQgKwotCQkJCSgoUFVSR0VfVElNRU9VVCAqIEhaKSAvIDEwMDApKSkpIHx8CisJCQluZWlnaF9ub2RlLT5sYXN0X3ZhbGlkICsgUFVSR0VfVElNRU9VVCAqIEhaKSkgfHwKIAkJICAgIChuZWlnaF9ub2RlLT5pZl9pbmNvbWluZy0+aWZfc3RhdHVzID09CiAJCQkJCQlJRl9UT19CRV9SRU1PVkVEKSkgewogCiAJCQlpZiAobmVpZ2hfbm9kZS0+aWZfaW5jb21pbmctPmlmX3N0YXR1cyA9PQogCQkJCQkJCUlGX1RPX0JFX1JFTU9WRUQpCi0JCQkJYmF0X2RiZyhEQkdfQkFUTUFOLAorCQkJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCiAJCQkJCSJuZWlnaGJvciBwdXJnZTogb3JpZ2luYXRvciAlcE0sICIKIAkJCQkJIm5laWdoYm9yOiAlcE0sIGlmYWNlOiAlc1xuIiwKIAkJCQkJb3JpZ19ub2RlLT5vcmlnLCBuZWlnaF9ub2RlLT5hZGRyLAogCQkJCQluZWlnaF9ub2RlLT5pZl9pbmNvbWluZy0+ZGV2KTsKIAkJCWVsc2UKLQkJCQliYXRfZGJnKERCR19CQVRNQU4sCisJCQkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKIAkJCQkJIm5laWdoYm9yIHRpbWVvdXQ6IG9yaWdpbmF0b3IgJXBNLCAiCiAJCQkJCSJuZWlnaGJvcjogJXBNLCBsYXN0X3ZhbGlkOiAlbHVcbiIsCiAJCQkJCW9yaWdfbm9kZS0+b3JpZywgbmVpZ2hfbm9kZS0+YWRkciwKQEAgLTIyNiwyMSArMjMxLDI2IEBACiAKIHN0YXRpYyBib29sIHB1cmdlX29yaWdfbm9kZShzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUpCiB7CisJLyogRklYTUU6IGVhY2ggYmF0bWFuX2lmIHdpbGwgYmUgYXR0YWNoZWQgdG8gYSBzb2Z0aWYgKi8KKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoc29mdF9kZXZpY2UpOwogCXN0cnVjdCBuZWlnaF9ub2RlICpiZXN0X25laWdoX25vZGU7CiAKIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLAotCQkgICAgICAgKG9yaWdfbm9kZS0+bGFzdF92YWxpZCArCi0JCQkoKDIgKiBQVVJHRV9USU1FT1VUICogSFopIC8gMTAwMCkpKSkgeworCQlvcmlnX25vZGUtPmxhc3RfdmFsaWQgKyAyICogUFVSR0VfVElNRU9VVCAqIEhaKSkgewogCi0JCWJhdF9kYmcoREJHX0JBVE1BTiwKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKIAkJCSJPcmlnaW5hdG9yIHRpbWVvdXQ6IG9yaWdpbmF0b3IgJXBNLCBsYXN0X3ZhbGlkICVsdVxuIiwKIAkJCW9yaWdfbm9kZS0+b3JpZywgKG9yaWdfbm9kZS0+bGFzdF92YWxpZCAvIEhaKSk7CiAJCXJldHVybiB0cnVlOwogCX0gZWxzZSB7Ci0JCWlmIChwdXJnZV9vcmlnX25laWdoYm9ycyhvcmlnX25vZGUsICZiZXN0X25laWdoX25vZGUpKQorCQlpZiAocHVyZ2Vfb3JpZ19uZWlnaGJvcnMob3JpZ19ub2RlLCAmYmVzdF9uZWlnaF9ub2RlKSkgewogCQkJdXBkYXRlX3JvdXRlcyhvcmlnX25vZGUsIGJlc3RfbmVpZ2hfbm9kZSwKIAkJCQkgICAgICBvcmlnX25vZGUtPmhuYV9idWZmLAogCQkJCSAgICAgIG9yaWdfbm9kZS0+aG5hX2J1ZmZfbGVuKTsKKwkJCS8qIHVwZGF0ZSBib25kaW5nIGNhbmRpZGF0ZXMsIHdlIGNvdWxkIGhhdmUgbG9zdAorCQkJICogc29tZSBjYW5kaWRhdGVzLiAqLworCQkJdXBkYXRlX2JvbmRpbmdfY2FuZGlkYXRlcyhiYXRfcHJpdiwgb3JpZ19ub2RlKTsKKwkJfQogCX0KIAogCXJldHVybiBmYWxzZTsKQEAgLTI3MSw0OSArMjgxLDQxIEBACiAJCXN0YXJ0X3B1cmdlX3RpbWVyKCk7CiB9CiAKLXNzaXplX3Qgb3JpZ19maWxsX2J1ZmZlcl90ZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LCBjaGFyICpidWZmLAotCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3Qgb2ZmKQoraW50IG9yaWdfc2VxX3ByaW50X3RleHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKIHsKIAlIQVNISVQoaGFzaGl0KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKXNlcS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CiAJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOwogCXN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlOwotCXNpemVfdCBoZHJfbGVuLCB0bXBfbGVuOwotCWludCBiYXRtYW5fY291bnQgPSAwLCBieXRlc193cml0dGVuID0gMDsKKwlpbnQgYmF0bWFuX2NvdW50ID0gMDsKKwlpbnQgbGFzdF9zZWVuX3NlY3M7CisJaW50IGxhc3Rfc2Vlbl9tc2VjczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWNoYXIgb3JpZ19zdHJbRVRIX1NUUl9MRU5dLCByb3V0ZXJfc3RyW0VUSF9TVFJfTEVOXTsKIAotCWlmICghYmF0X3ByaXYtPnByaW1hcnlfaWYpIHsKLQkJaWYgKG9mZiA9PSAwKQotCQkJcmV0dXJuIHNwcmludGYoYnVmZiwKLQkJCQkgICAgICJCQVRNQU4gbWVzaCAlcyBkaXNhYmxlZCAtICIKKwlpZiAoKCFiYXRfcHJpdi0+cHJpbWFyeV9pZikgfHwKKwkgICAgKGJhdF9wcml2LT5wcmltYXJ5X2lmLT5pZl9zdGF0dXMgIT0gSUZfQUNUSVZFKSkgeworCQlpZiAoIWJhdF9wcml2LT5wcmltYXJ5X2lmKQorCQkJcmV0dXJuIHNlcV9wcmludGYoc2VxLCAiQkFUTUFOIG1lc2ggJXMgZGlzYWJsZWQgLSAiCiAJCQkJICAgICAicGxlYXNlIHNwZWNpZnkgaW50ZXJmYWNlcyB0byBlbmFibGUgaXRcbiIsCiAJCQkJICAgICBuZXRfZGV2LT5uYW1lKTsKIAotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIHNlcV9wcmludGYoc2VxLCAiQkFUTUFOIG1lc2ggJXMgIgorCQkJCSAgImRpc2FibGVkIC0gcHJpbWFyeSBpbnRlcmZhY2Ugbm90IGFjdGl2ZVxuIiwKKwkJCQkgIG5ldF9kZXYtPm5hbWUpOwogCX0KIAotCWlmIChiYXRfcHJpdi0+cHJpbWFyeV9pZi0+aWZfc3RhdHVzICE9IElGX0FDVElWRSAmJiBvZmYgPT0gMCkKLQkJcmV0dXJuIHNwcmludGYoYnVmZiwKLQkJCSAgICAgICAiQkFUTUFOIG1lc2ggJXMgIgotCQkJICAgICAgICJkaXNhYmxlZCAtIHByaW1hcnkgaW50ZXJmYWNlIG5vdCBhY3RpdmVcbiIsCi0JCQkgICAgICAgbmV0X2Rldi0+bmFtZSk7Ci0JZWxzZSBpZiAoYmF0X3ByaXYtPnByaW1hcnlfaWYtPmlmX3N0YXR1cyAhPSBJRl9BQ1RJVkUpCi0JCXJldHVybiAwOwotCiAJcmN1X3JlYWRfbG9jaygpOwotCWhkcl9sZW4gPSBzcHJpbnRmKGJ1ZmYsCi0JCSAgICIgICUtMTRzICglcy8laSkgJTE3cyBbJTEwc106ICUyMHMgIgotCQkgICAiLi4uIFtCLkEuVC5NLkEuTi4gYWR2ICVzJXMsIE1haW5JRi9NQUM6ICVzLyVzICglcyldXG4iLAotCQkgICAiT3JpZ2luYXRvciIsICIjIiwgVFFfTUFYX1ZBTFVFLCAiTmV4dGhvcCIsICJvdXRnb2luZ0lGIiwKLQkJICAgIlBvdGVudGlhbCBuZXh0aG9wcyIsIFNPVVJDRV9WRVJTSU9OLCBSRVZJU0lPTl9WRVJTSU9OX1NUUiwKKwlzZXFfcHJpbnRmKHNlcSwgIltCLkEuVC5NLkEuTi4gYWR2ICVzJXMsIE1haW5JRi9NQUM6ICVzLyVzICglcyldXG4iLAorCQkgICBTT1VSQ0VfVkVSU0lPTiwgUkVWSVNJT05fVkVSU0lPTl9TVFIsCiAJCSAgIGJhdF9wcml2LT5wcmltYXJ5X2lmLT5kZXYsIGJhdF9wcml2LT5wcmltYXJ5X2lmLT5hZGRyX3N0ciwKIAkJICAgbmV0X2Rldi0+bmFtZSk7CisJc2VxX3ByaW50ZihzZXEsICIgICUtMTVzICVzICglcy8laSkgJTE3cyBbJTEwc106ICUyMHMgLi4uXG4iLAorCQkgICAiT3JpZ2luYXRvciIsICJsYXN0LXNlZW4iLCAiIyIsIFRRX01BWF9WQUxVRSwgIk5leHRob3AiLAorCQkgICAib3V0Z29pbmdJRiIsICJQb3RlbnRpYWwgbmV4dGhvcHMiKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAotCWlmIChvZmYgPCBoZHJfbGVuKQotCQlieXRlc193cml0dGVuID0gaGRyX2xlbjsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOwogCiAJd2hpbGUgKGhhc2hfaXRlcmF0ZShvcmlnX2hhc2gsICZoYXNoaXQpKSB7CkBAIC0zMjYsNDQgKzMyOCwzNCBAQAogCQlpZiAob3JpZ19ub2RlLT5yb3V0ZXItPnRxX2F2ZyA9PSAwKQogCQkJY29udGludWU7CiAKLQkJLyogZXN0aW1hdGVkIGxpbmUgbGVuZ3RoICovCi0JCWlmIChjb3VudCA8IGJ5dGVzX3dyaXR0ZW4gKyAyMDApCi0JCQlicmVhazsKLQogCQlhZGRyX3RvX3N0cmluZyhvcmlnX3N0ciwgb3JpZ19ub2RlLT5vcmlnKTsKIAkJYWRkcl90b19zdHJpbmcocm91dGVyX3N0ciwgb3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIpOworCQlsYXN0X3NlZW5fc2VjcyA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtCisJCQkJCQlvcmlnX25vZGUtPmxhc3RfdmFsaWQpIC8gMTAwMDsKKwkJbGFzdF9zZWVuX21zZWNzID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0KKwkJCQkJCW9yaWdfbm9kZS0+bGFzdF92YWxpZCkgJSAxMDAwOwogCi0JCXRtcF9sZW4gPSBzcHJpbnRmKGJ1ZmYgKyBieXRlc193cml0dGVuLAotCQkJCSAgIiUtMTdzICAoJTNpKSAlMTdzIFslMTBzXToiLAotCQkJCSAgIG9yaWdfc3RyLCBvcmlnX25vZGUtPnJvdXRlci0+dHFfYXZnLAotCQkJCSAgIHJvdXRlcl9zdHIsCi0JCQkJICAgb3JpZ19ub2RlLT5yb3V0ZXItPmlmX2luY29taW5nLT5kZXYpOworCQlzZXFfcHJpbnRmKHNlcSwgIiUtMTdzICU0aS4lMDNpcyAgICglM2kpICUxN3MgWyUxMHNdOiIsCisJCQkgICBvcmlnX3N0ciwgbGFzdF9zZWVuX3NlY3MsIGxhc3Rfc2Vlbl9tc2VjcywKKwkJCSAgIG9yaWdfbm9kZS0+cm91dGVyLT50cV9hdmcsIHJvdXRlcl9zdHIsCisJCQkgICBvcmlnX25vZGUtPnJvdXRlci0+aWZfaW5jb21pbmctPmRldik7CiAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShuZWlnaF9ub2RlLCAmb3JpZ19ub2RlLT5uZWlnaF9saXN0LCBsaXN0KSB7CiAJCQlhZGRyX3RvX3N0cmluZyhvcmlnX3N0ciwgbmVpZ2hfbm9kZS0+YWRkcik7Ci0JCQl0bXBfbGVuICs9IHNwcmludGYoYnVmZiArIGJ5dGVzX3dyaXR0ZW4gKyB0bXBfbGVuLAotCQkJCQkgICAiICUxN3MgKCUzaSkiLCBvcmlnX3N0ciwKKwkJCXNlcV9wcmludGYoc2VxLCAiICUxN3MgKCUzaSkiLCBvcmlnX3N0ciwKIAkJCQkJICAgbmVpZ2hfbm9kZS0+dHFfYXZnKTsKIAkJfQogCi0JCXRtcF9sZW4gKz0gc3ByaW50ZihidWZmICsgYnl0ZXNfd3JpdHRlbiArIHRtcF9sZW4sICJcbiIpOwotCisJCXNlcV9wcmludGYoc2VxLCAiXG4iKTsKIAkJYmF0bWFuX2NvdW50Kys7Ci0JCWhkcl9sZW4gKz0gdG1wX2xlbjsKLQotCQlpZiAob2ZmID49IGhkcl9sZW4pCi0JCQljb250aW51ZTsKLQotCQlieXRlc193cml0dGVuICs9IHRtcF9sZW47CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKIAotCWlmICgoYmF0bWFuX2NvdW50ID09IDApICYmIChvZmYgPT0gMCkpCi0JCWJ5dGVzX3dyaXR0ZW4gKz0gc3ByaW50ZihidWZmICsgYnl0ZXNfd3JpdHRlbiwKLQkJCQkJIk5vIGJhdG1hbiBub2RlcyBpbiByYW5nZSAuLi5cbiIpOworCWlmICgoYmF0bWFuX2NvdW50ID09IDApKQorCQlzZXFfcHJpbnRmKHNlcSwgIk5vIGJhdG1hbiBub2RlcyBpbiByYW5nZSAuLi5cbiIpOwogCi0JcmV0dXJuIGJ5dGVzX3dyaXR0ZW47CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgb3JpZ19ub2RlX2FkZF9pZihzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsIGludCBtYXhfaWZfbnVtKQpAQCAtMzczLDggKzM2NSw3IEBACiAJZGF0YV9wdHIgPSBrbWFsbG9jKG1heF9pZl9udW0gKiBzaXplb2YoVFlQRV9PRl9XT1JEKSAqIE5VTV9XT1JEUywKIAkJCSAgIEdGUF9BVE9NSUMpOwogCWlmICghZGF0YV9wdHIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiYmF0bWFuLWFkdjpDYW4ndCByZXNpemUgb3JpZzogb3V0IG9mIG1lbW9yeVxuIik7CisJCXByX2VycigiQ2FuJ3QgcmVzaXplIG9yaWc6IG91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0zODUsOCArMzc2LDcgQEAKIAogCWRhdGFfcHRyID0ga21hbGxvYyhtYXhfaWZfbnVtICogc2l6ZW9mKHVpbnQ4X3QpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWRhdGFfcHRyKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImJhdG1hbi1hZHY6Q2FuJ3QgcmVzaXplIG9yaWc6IG91dCBvZiBtZW1vcnlcbiIpOworCQlwcl9lcnIoIkNhbid0IHJlc2l6ZSBvcmlnOiBvdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtNDM1LDggKzQyNSw3IEBACiAJY2h1bmtfc2l6ZSA9IHNpemVvZihUWVBFX09GX1dPUkQpICogTlVNX1dPUkRTOwogCWRhdGFfcHRyID0ga21hbGxvYyhtYXhfaWZfbnVtICogY2h1bmtfc2l6ZSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFkYXRhX3B0cikgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJiYXRtYW4tYWR2OkNhbid0IHJlc2l6ZSBvcmlnOiBvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcHJfZXJyKCJDYW4ndCByZXNpemUgb3JpZzogb3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTQ1Nyw4ICs0NDYsNyBAQAogCiAJZGF0YV9wdHIgPSBrbWFsbG9jKG1heF9pZl9udW0gKiBzaXplb2YodWludDhfdCksIEdGUF9BVE9NSUMpOwogCWlmICghZGF0YV9wdHIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiYmF0bWFuLWFkdjpDYW4ndCByZXNpemUgb3JpZzogb3V0IG9mIG1lbW9yeVxuIik7CisJCXByX2VycigiQ2FuJ3QgcmVzaXplIG9yaWc6IG91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmggYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmgKaW5kZXggYWZiYzdjMC4uZTg4NDExZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvb3JpZ2luYXRvci5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L29yaWdpbmF0b3IuaApAQCAtMTksMTYgKzE5LDE4IEBACiAgKgogICovCiAKKyNpZm5kZWYgX05FVF9CQVRNQU5fQURWX09SSUdJTkFUT1JfSF8KKyNkZWZpbmUgX05FVF9CQVRNQU5fQURWX09SSUdJTkFUT1JfSF8KKwogaW50IG9yaWdpbmF0b3JfaW5pdCh2b2lkKTsKLXZvaWQgZnJlZV9vcmlnX25vZGUodm9pZCAqZGF0YSk7CiB2b2lkIG9yaWdpbmF0b3JfZnJlZSh2b2lkKTsKIHZvaWQgcHVyZ2Vfb3JpZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19maW5kKGNoYXIgKm1hYyk7CiBzdHJ1Y3Qgb3JpZ19ub2RlICpnZXRfb3JpZ19ub2RlKHVpbnQ4X3QgKmFkZHIpOwogc3RydWN0IG5laWdoX25vZGUgKgogY3JlYXRlX25laWdoYm9yKHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwgc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19uZWlnaF9ub2RlLAogCQl1aW50OF90ICpuZWlnaCwgc3RydWN0IGJhdG1hbl9pZiAqaWZfaW5jb21pbmcpOwotc3NpemVfdCBvcmlnX2ZpbGxfYnVmZmVyX3RleHQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsIGNoYXIgKmJ1ZmYsCi0JCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCBvZmYpOworaW50IG9yaWdfc2VxX3ByaW50X3RleHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCk7CiBpbnQgb3JpZ19oYXNoX2FkZF9pZihzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYsIGludCBtYXhfaWZfbnVtKTsKIGludCBvcmlnX2hhc2hfZGVsX2lmKHN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZiwgaW50IG1heF9pZl9udW0pOworCisjZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX09SSUdJTkFUT1JfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3BhY2tldC5oIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvcGFja2V0LmgKaW5kZXggMTUyZjU3Yi4uYWJiNWU0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvcGFja2V0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvcGFja2V0LmgKQEAgLTE5LDYgKzE5LDkgQEAKICAqCiAgKi8KIAorI2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfUEFDS0VUX0hfCisjZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9QQUNLRVRfSF8KKwogI2RlZmluZSBFVEhfUF9CQVRNQU4gIDB4NDMwNQkvKiB1bm9mZmljaWFsL25vdCByZWdpc3RlcmVkIEV0aGVydHlwZSAqLwogCiAjZGVmaW5lIEJBVF9QQUNLRVQgICAgMHgwMQpAQCAtMjgsOSArMzEsMTAgQEAKICNkZWZpbmUgQkFUX1ZJUyAgICAgICAweDA1CiAKIC8qIHRoaXMgZmlsZSBpcyBpbmNsdWRlZCBieSBiYXRjdGwgd2hpY2ggbmVlZHMgdGhlc2UgZGVmaW5lcyAqLwotI2RlZmluZSBDT01QQVRfVkVSU0lPTiA4CisjZGVmaW5lIENPTVBBVF9WRVJTSU9OIDExCiAjZGVmaW5lIERJUkVDVExJTksgMHg0MAogI2RlZmluZSBWSVNfU0VSVkVSIDB4MjAKKyNkZWZpbmUgUFJJTUFSSUVTX0ZJUlNUX0hPUCAweDEwCiAKIC8qIElDTVAgbWVzc2FnZSB0eXBlcyAqLwogI2RlZmluZSBFQ0hPX1JFUExZIDAKQEAgLTQ4LDcgKzUyLDcgQEAKIAl1aW50OF90ICB2ZXJzaW9uOyAgLyogYmF0bWFuIHZlcnNpb24gZmllbGQgKi8KIAl1aW50OF90ICBmbGFnczsgICAgLyogMHg0MDogRElSRUNUTElOSyBmbGFnLCAweDIwIFZJU19TRVJWRVIgZmxhZy4uLiAqLwogCXVpbnQ4X3QgIHRxOwotCXVpbnQxNl90IHNlcW5vOworCXVpbnQzMl90IHNlcW5vOwogCXVpbnQ4X3QgIG9yaWdbNl07CiAJdWludDhfdCAgcHJldl9zZW5kZXJbNl07CiAJdWludDhfdCAgdHRsOwpAQCAtNjgsNiArNzIsMjMgQEAKIAl1aW50OF90ICB1aWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCisjZGVmaW5lIEJBVF9SUl9MRU4gMTYKKworLyogaWNtcF9wYWNrZXRfcnIgbXVzdCBzdGFydCB3aXRoIGFsbCBmaWVsZHMgZnJvbSBpbWNwX3BhY2tldAorICAgYXMgdGhpcyBpcyBhc3N1bWVkIGJ5IGNvZGUgdGhhdCBoYW5kbGVzIElDTVAgcGFja2V0cyAqLworc3RydWN0IGljbXBfcGFja2V0X3JyIHsKKwl1aW50OF90ICBwYWNrZXRfdHlwZTsKKwl1aW50OF90ICB2ZXJzaW9uOyAgLyogYmF0bWFuIHZlcnNpb24gZmllbGQgKi8KKwl1aW50OF90ICBtc2dfdHlwZTsgLyogc2VlIElDTVAgbWVzc2FnZSB0eXBlcyBhYm92ZSAqLworCXVpbnQ4X3QgIHR0bDsKKwl1aW50OF90ICBkc3RbNl07CisJdWludDhfdCAgb3JpZ1s2XTsKKwl1aW50MTZfdCBzZXFubzsKKwl1aW50OF90ICB1aWQ7CisJdWludDhfdCAgcnJfY3VyOworCXVpbnQ4X3QgIHJyW0JBVF9SUl9MRU5dW0VUSF9BTEVOXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKIHN0cnVjdCB1bmljYXN0X3BhY2tldCB7CiAJdWludDhfdCAgcGFja2V0X3R5cGU7CiAJdWludDhfdCAgdmVyc2lvbjsgIC8qIGJhdG1hbiB2ZXJzaW9uIGZpZWxkICovCkBAIC03OSwxOCArMTAwLDIxIEBACiAJdWludDhfdCAgcGFja2V0X3R5cGU7CiAJdWludDhfdCAgdmVyc2lvbjsgIC8qIGJhdG1hbiB2ZXJzaW9uIGZpZWxkICovCiAJdWludDhfdCAgb3JpZ1s2XTsKLQl1aW50MTZfdCBzZXFubzsKKwl1aW50OF90ICB0dGw7CisJdWludDMyX3Qgc2Vxbm87CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgdmlzX3BhY2tldCB7CiAJdWludDhfdCAgcGFja2V0X3R5cGU7CiAJdWludDhfdCAgdmVyc2lvbjsgICAgICAgIC8qIGJhdG1hbiB2ZXJzaW9uIGZpZWxkICovCiAJdWludDhfdCAgdmlzX3R5cGU7CSAvKiB3aGljaCB0eXBlIG9mIHZpcy1wYXJ0aWNpcGFudCBzZW50IHRoaXM/ICovCi0JdWludDhfdCAgc2Vxbm87CQkgLyogc2VxdWVuY2UgbnVtYmVyICovCiAJdWludDhfdCAgZW50cmllczsJIC8qIG51bWJlciBvZiBlbnRyaWVzIGJlaGluZCB0aGlzIHN0cnVjdCAqLworCXVpbnQzMl90IHNlcW5vOwkJIC8qIHNlcXVlbmNlIG51bWJlciAqLwogCXVpbnQ4X3QgIHR0bDsJCSAvKiBUVEwgKi8KIAl1aW50OF90ICB2aXNfb3JpZ1s2XTsJIC8qIG9yaWdpbmF0b3IgdGhhdCBpbmZvcm1zIGFib3V0IGl0cwogCQkJCSAgKiBuZWlnaGJvcnMgKi8KIAl1aW50OF90ICB0YXJnZXRfb3JpZ1s2XTsgLyogd2hvIHNob3VsZCByZWNlaXZlIHRoaXMgcGFja2V0ICovCiAJdWludDhfdCAgc2VuZGVyX29yaWdbNl07IC8qIHdobyBzZW50IG9yIHJlYnJvYWRjYXN0ZWQgdGhpcyBwYWNrZXQgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfUEFDS0VUX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9yaW5nX2J1ZmZlci5oIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvcmluZ19idWZmZXIuaAppbmRleCBiOGM5NDU2Li42YjBjYjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9yaW5nX2J1ZmZlci5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3JpbmdfYnVmZmVyLmgKQEAgLTE5LDUgKzE5LDEwIEBACiAgKgogICovCiAKKyNpZm5kZWYgX05FVF9CQVRNQU5fQURWX1JJTkdfQlVGRkVSX0hfCisjZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9SSU5HX0JVRkZFUl9IXworCiB2b2lkIHJpbmdfYnVmZmVyX3NldCh1aW50OF90IGxxX3JlY3ZbXSwgdWludDhfdCAqbHFfaW5kZXgsIHVpbnQ4X3QgdmFsdWUpOwogdWludDhfdCByaW5nX2J1ZmZlcl9hdmcodWludDhfdCBscV9yZWN2W10pOworCisjZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX1JJTkdfQlVGRkVSX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9yb3V0aW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9yb3V0aW5nLmMKaW5kZXggMDY2ZGM4Yi4uMDY2Y2M5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvcm91dGluZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3JvdXRpbmcuYwpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgImhhc2guaCIKICNpbmNsdWRlICJzb2Z0LWludGVyZmFjZS5oIgogI2luY2x1ZGUgImhhcmQtaW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiZGV2aWNlLmgiCisjaW5jbHVkZSAiaWNtcF9zb2NrZXQuaCIKICNpbmNsdWRlICJ0cmFuc2xhdGlvbi10YWJsZS5oIgogI2luY2x1ZGUgIm9yaWdpbmF0b3IuaCIKICNpbmNsdWRlICJ0eXBlcy5oIgpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgInZpcy5oIgogI2luY2x1ZGUgImFnZ3JlZ2F0aW9uLmgiCiAKLURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHRocmVhZF93YWl0KTsKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRCh0aHJlYWRfd2FpdCk7CiAKIHZvaWQgc2xpZGVfb3duX2JjYXN0X3dpbmRvdyhzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYpCiB7CkBAIC03NywyNCArNzcsMjcgQEAKIAkJCSBzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZSwKIAkJCSB1bnNpZ25lZCBjaGFyICpobmFfYnVmZiwgaW50IGhuYV9idWZmX2xlbikKIHsKKwkvKiBGSVhNRTogZWFjaCBvcmlnX25vZGUtPmJhdG1hbl9pZiB3aWxsIGJlIGF0dGFjaGVkIHRvIGEgc29mdGlmICovCisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KHNvZnRfZGV2aWNlKTsKKwogCS8qIHJvdXRlIGRlbGV0ZWQgKi8KIAlpZiAoKG9yaWdfbm9kZS0+cm91dGVyICE9IE5VTEwpICYmIChuZWlnaF9ub2RlID09IE5VTEwpKSB7CiAKLQkJYmF0X2RiZyhEQkdfUk9VVEVTLCAiRGVsZXRpbmcgcm91dGUgdG93YXJkczogJXBNXG4iLAorCQliYXRfZGJnKERCR19ST1VURVMsIGJhdF9wcml2LCAiRGVsZXRpbmcgcm91dGUgdG93YXJkczogJXBNXG4iLAogCQkJb3JpZ19ub2RlLT5vcmlnKTsKIAkJaG5hX2dsb2JhbF9kZWxfb3JpZyhvcmlnX25vZGUsICJvcmlnaW5hdG9yIHRpbWVkIG91dCIpOwogCiAJCS8qIHJvdXRlIGFkZGVkICovCiAJfSBlbHNlIGlmICgob3JpZ19ub2RlLT5yb3V0ZXIgPT0gTlVMTCkgJiYgKG5laWdoX25vZGUgIT0gTlVMTCkpIHsKIAotCQliYXRfZGJnKERCR19ST1VURVMsCisJCWJhdF9kYmcoREJHX1JPVVRFUywgYmF0X3ByaXYsCiAJCQkiQWRkaW5nIHJvdXRlIHRvd2FyZHM6ICVwTSAodmlhICVwTSlcbiIsCiAJCQlvcmlnX25vZGUtPm9yaWcsIG5laWdoX25vZGUtPmFkZHIpOwogCQlobmFfZ2xvYmFsX2FkZF9vcmlnKG9yaWdfbm9kZSwgaG5hX2J1ZmYsIGhuYV9idWZmX2xlbik7CiAKIAkJLyogcm91dGUgY2hhbmdlZCAqLwogCX0gZWxzZSB7Ci0JCWJhdF9kYmcoREJHX1JPVVRFUywKKwkJYmF0X2RiZyhEQkdfUk9VVEVTLCBiYXRfcHJpdiwKIAkJCSJDaGFuZ2luZyByb3V0ZSB0b3dhcmRzOiAlcE0gIgogCQkJIihub3cgdmlhICVwTSAtIHdhcyB2aWEgJXBNKVxuIiwKIAkJCW9yaWdfbm9kZS0+b3JpZywgbmVpZ2hfbm9kZS0+YWRkciwKQEAgLTEyMCwxMSArMTIzLDEzIEBACiAJCXVwZGF0ZV9ITkEob3JpZ19ub2RlLCBobmFfYnVmZiwgaG5hX2J1ZmZfbGVuKTsKIH0KIAotc3RhdGljIGludCBpc0JpZGlyZWN0aW9uYWxOZWlnaChzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsCitzdGF0aWMgaW50IGlzX2JpZGlyZWN0aW9uYWxfbmVpZ2goc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlLAogCQkJCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbmVpZ2hfbm9kZSwKIAkJCQlzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldCwKIAkJCQlzdHJ1Y3QgYmF0bWFuX2lmICppZl9pbmNvbWluZykKIHsKKwkvKiBGSVhNRTogZWFjaCBvcmlnX25vZGUtPmJhdG1hbl9pZiB3aWxsIGJlIGF0dGFjaGVkIHRvIGEgc29mdGlmICovCisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KHNvZnRfZGV2aWNlKTsKIAlzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZSA9IE5VTEwsICp0bXBfbmVpZ2hfbm9kZSA9IE5VTEw7CiAJdW5zaWduZWQgY2hhciB0b3RhbF9jb3VudDsKIApAQCAtMjExLDcgKzIxNiw3IEBACiAJCQkgICAgICBvcmlnX25laWdoX25vZGUtPnRxX2FzeW1fcGVuYWx0eSkgLwogCQkJICAgICAoVFFfTUFYX1ZBTFVFICogVFFfTUFYX1ZBTFVFKSk7CiAKLQliYXRfZGJnKERCR19CQVRNQU4sCisJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKIAkJImJpZGlyZWN0aW9uYWw6ICIKIAkJIm9yaWcgPSAlLTE1cE0gbmVpZ2ggPSAlLTE1cE0gPT4gb3duX2JjYXN0ID0gJTJpLCAiCiAJCSJyZWFsIHJlY3YgPSAlMmksIGxvY2FsIHRxOiAlM2ksIGFzeW1fcGVuYWx0eTogJTNpLCAiCkBAIC0yMzQsMTAgKzIzOSwxMiBAQAogCQkJdW5zaWduZWQgY2hhciAqaG5hX2J1ZmYsIGludCBobmFfYnVmZl9sZW4sCiAJCQljaGFyIGlzX2R1cGxpY2F0ZSkKIHsKKwkvKiBGSVhNRTogZ2V0IGJhdF9wcml2ICovCisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KHNvZnRfZGV2aWNlKTsKIAlzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZSA9IE5VTEwsICp0bXBfbmVpZ2hfbm9kZSA9IE5VTEw7CiAJaW50IHRtcF9obmFfYnVmZl9sZW47CiAKLQliYXRfZGJnKERCR19CQVRNQU4sICJ1cGRhdGVfb3JpZ2luYXRvcigpOiAiCisJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwgInVwZGF0ZV9vcmlnaW5hdG9yKCk6ICIKIAkJIlNlYXJjaGluZyBhbmQgdXBkYXRpbmcgb3JpZ2luYXRvciBlbnRyeSBvZiByZWNlaXZlZCBwYWNrZXRcbiIpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXBfbmVpZ2hfbm9kZSwgJm9yaWdfbm9kZS0+bmVpZ2hfbGlzdCwgbGlzdCkgewpAQCAtMjY5LDcgKzI3Niw3IEBACiAJCWlmICghbmVpZ2hfbm9kZSkKIAkJCXJldHVybjsKIAl9IGVsc2UKLQkJYmF0X2RiZyhEQkdfQkFUTUFOLAorCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAogCQkJIlVwZGF0aW5nIGV4aXN0aW5nIGxhc3QtaG9wIG5laWdoYm9yIG9mIG9yaWdpbmF0b3JcbiIpOwogCiAJb3JpZ19ub2RlLT5mbGFncyA9IGJhdG1hbl9wYWNrZXQtPmZsYWdzOwpAQCAtMzE4LDE2ICszMjUsMTkgQEAKICAqICAwIGlmIHRoZSBwYWNrZXQgaXMgdG8gYmUgYWNjZXB0ZWQKICAqICAxIGlmIHRoZSBwYWNrZXQgaXMgdG8gYmUgaWdub3JlZC4KICAqLwotc3RhdGljIGludCB3aW5kb3dfcHJvdGVjdGVkKGludDE2X3Qgc2VxX251bV9kaWZmLAorc3RhdGljIGludCB3aW5kb3dfcHJvdGVjdGVkKGludDMyX3Qgc2VxX251bV9kaWZmLAogCQkJCXVuc2lnbmVkIGxvbmcgKmxhc3RfcmVzZXQpCiB7CisJLyogRklYTUU6IGVhY2ggb3JpZ19ub2RlLT5iYXRtYW5faWYgd2lsbCBiZSBhdHRhY2hlZCB0byBhIHNvZnRpZiAqLworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihzb2Z0X2RldmljZSk7CisKIAlpZiAoKHNlcV9udW1fZGlmZiA8PSAtVFFfTE9DQUxfV0lORE9XX1NJWkUpCiAJCXx8IChzZXFfbnVtX2RpZmYgPj0gRVhQRUNURURfU0VRTk9fUkFOR0UpKSB7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsICpsYXN0X3Jlc2V0ICsKIAkJCW1zZWNzX3RvX2ppZmZpZXMoUkVTRVRfUFJPVEVDVElPTl9NUykpKSB7CiAKIAkJCSpsYXN0X3Jlc2V0ID0gamlmZmllczsKLQkJCWJhdF9kYmcoREJHX0JBVE1BTiwKKwkJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCiAJCQkJIm9sZCBwYWNrZXQgcmVjZWl2ZWQsIHN0YXJ0IHByb3RlY3Rpb25cbiIpOwogCiAJCQlyZXR1cm4gMDsKQEAgLTM0OSwxMCArMzU5LDEyIEBACiAJCQkgICAgICAgc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQsCiAJCQkgICAgICAgc3RydWN0IGJhdG1hbl9pZiAqaWZfaW5jb21pbmcpCiB7CisJLyogRklYTUU6IGVhY2ggb3JpZ19ub2RlLT5iYXRtYW5faWYgd2lsbCBiZSBhdHRhY2hlZCB0byBhIHNvZnRpZiAqLworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihzb2Z0X2RldmljZSk7CiAJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOwogCXN0cnVjdCBuZWlnaF9ub2RlICp0bXBfbmVpZ2hfbm9kZTsKIAljaGFyIGlzX2R1cGxpY2F0ZSA9IDA7Ci0JaW50MTZfdCBzZXFfZGlmZjsKKwlpbnQzMl90IHNlcV9kaWZmOwogCWludCBuZWVkX3VwZGF0ZSA9IDA7CiAJaW50IHNldF9tYXJrOwogCkBAIC0zODcsNyArMzk5LDggQEAKIAl9CiAKIAlpZiAobmVlZF91cGRhdGUpIHsKLQkJYmF0X2RiZyhEQkdfQkFUTUFOLCAidXBkYXRpbmcgbGFzdF9zZXFubzogb2xkICVkLCBuZXcgJWRcbiIsCisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCQkidXBkYXRpbmcgbGFzdF9zZXFubzogb2xkICVkLCBuZXcgJWRcbiIsCiAJCQlvcmlnX25vZGUtPmxhc3RfcmVhbF9zZXFubywgYmF0bWFuX3BhY2tldC0+c2Vxbm8pOwogCQlvcmlnX25vZGUtPmxhc3RfcmVhbF9zZXFubyA9IGJhdG1hbl9wYWNrZXQtPnNlcW5vOwogCX0KQEAgLTM5NSwxOCArNDA4LDEyNyBAQAogCXJldHVybiBpc19kdXBsaWNhdGU7CiB9CiAKKy8qIGNvcHkgcHJpbWFyeSBhZGRyZXNzIGZvciBib25kaW5nICovCitzdGF0aWMgdm9pZCBtYXJrX2JvbmRpbmdfYWRkcmVzcyhzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorCQkJCSBzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsCisJCQkJIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbmVpZ2hfbm9kZSwKKwkJCQkgc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQpCisKK3sKKwlpZiAoYmF0bWFuX3BhY2tldC0+ZmxhZ3MgJiBQUklNQVJJRVNfRklSU1RfSE9QKQorCQltZW1jcHkob3JpZ19uZWlnaF9ub2RlLT5wcmltYXJ5X2FkZHIsCisJCSAgICAgICBvcmlnX25vZGUtPm9yaWcsIEVUSF9BTEVOKTsKKworCXJldHVybjsKK30KKworLyogbWFyayBwb3NzaWJsZSBib25kLmNhbmRpZGF0ZXMgaW4gdGhlIG5laWdoYm9yIGxpc3QgKi8KK3ZvaWQgdXBkYXRlX2JvbmRpbmdfY2FuZGlkYXRlcyhzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorCQkJICAgICAgIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSkKK3sKKwlpbnQgY2FuZGlkYXRlczsKKwlpbnQgaW50ZXJmZXJlbmNlX2NhbmRpZGF0ZTsKKwlpbnQgYmVzdF90cTsKKwlzdHJ1Y3QgbmVpZ2hfbm9kZSAqdG1wX25laWdoX25vZGUsICp0bXBfbmVpZ2hfbm9kZTI7CisJc3RydWN0IG5laWdoX25vZGUgKmZpcnN0X2NhbmRpZGF0ZSwgKmxhc3RfY2FuZGlkYXRlOworCisJLyogdXBkYXRlIHRoZSBjYW5kaWRhdGVzIGZvciB0aGlzIG9yaWdpbmF0b3IgKi8KKwlpZiAoIW9yaWdfbm9kZS0+cm91dGVyKSB7CisJCW9yaWdfbm9kZS0+Ym9uZC5jYW5kaWRhdGVzID0gMDsKKwkJcmV0dXJuOworCX0KKworCWJlc3RfdHEgPSBvcmlnX25vZGUtPnJvdXRlci0+dHFfYXZnOworCisJLyogdXBkYXRlIGJvbmQuY2FuZGlkYXRlcyAqLworCisJY2FuZGlkYXRlcyA9IDA7CisKKwkvKiBtYXJrIG90aGVyIG5vZGVzIHdoaWNoIGFsc28gcmVjZWl2ZWQgIlBSSU1BUklFUyBGSVJTVCBIT1AiIHBhY2tldHMKKwkgKiBhcyAiYm9uZGluZyBwYXJ0bmVyIiAqLworCisJLyogZmlyc3QsIHplcm8gdGhlIGxpc3QgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcF9uZWlnaF9ub2RlLCAmb3JpZ19ub2RlLT5uZWlnaF9saXN0LCBsaXN0KSB7CisJCXRtcF9uZWlnaF9ub2RlLT5uZXh0X2JvbmRfY2FuZGlkYXRlID0gTlVMTDsKKwl9CisKKwlmaXJzdF9jYW5kaWRhdGUgPSBOVUxMOworCWxhc3RfY2FuZGlkYXRlID0gTlVMTDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcF9uZWlnaF9ub2RlLCAmb3JpZ19ub2RlLT5uZWlnaF9saXN0LCBsaXN0KSB7CisKKwkJLyogb25seSBjb25zaWRlciBpZiBpdCBoYXMgdGhlIHNhbWUgcHJpbWFyeSBhZGRyZXNzIC4uLiAgKi8KKwkJaWYgKG1lbWNtcChvcmlnX25vZGUtPm9yaWcsCisJCQkJdG1wX25laWdoX25vZGUtPm9yaWdfbm9kZS0+cHJpbWFyeV9hZGRyLAorCQkJCUVUSF9BTEVOKSAhPSAwKQorCQkJY29udGludWU7CisKKwkJLyogLi4uIGFuZCBpcyBnb29kIGVub3VnaCB0byBiZSBjb25zaWRlcmVkICovCisJCWlmICh0bXBfbmVpZ2hfbm9kZS0+dHFfYXZnIDwgYmVzdF90cSAtIEJPTkRJTkdfVFFfVEhSRVNIT0xEKQorCQkJY29udGludWU7CisKKwkJLyogY2hlY2sgaWYgd2UgaGF2ZSBhbm90aGVyIGNhbmRpZGF0ZSB3aXRoIHRoZSBzYW1lCisJCSAqIG1hYyBhZGRyZXNzIG9yIGludGVyZmFjZS4gSWYgd2UgZG8sIHdlIHdvbid0CisJCSAqIHNlbGVjdCB0aGlzIGNhbmRpZGF0ZSBiZWNhdXNlIG9mIHBvc3NpYmxlIGludGVyZmVyZW5jZS4gKi8KKworCQlpbnRlcmZlcmVuY2VfY2FuZGlkYXRlID0gMDsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXBfbmVpZ2hfbm9kZTIsCisJCQkJJm9yaWdfbm9kZS0+bmVpZ2hfbGlzdCwgbGlzdCkgeworCisJCQlpZiAodG1wX25laWdoX25vZGUyID09IHRtcF9uZWlnaF9ub2RlKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiB3ZSBvbmx5IGNhcmUgaWYgdGhlIG90aGVyIGNhbmRpZGF0ZSBpcyBldmVuCisJCQkgKiBjb25zaWRlcmVkIGFzIGNhbmRpZGF0ZS4gKi8KKwkJCWlmICh0bXBfbmVpZ2hfbm9kZTItPm5leHRfYm9uZF9jYW5kaWRhdGUgPT0gTlVMTCkKKwkJCQljb250aW51ZTsKKworCisJCQlpZiAoKHRtcF9uZWlnaF9ub2RlLT5pZl9pbmNvbWluZyA9PQorCQkJCXRtcF9uZWlnaF9ub2RlMi0+aWZfaW5jb21pbmcpCisJCQkJfHwgKG1lbWNtcCh0bXBfbmVpZ2hfbm9kZS0+YWRkciwKKwkJCQl0bXBfbmVpZ2hfbm9kZTItPmFkZHIsIEVUSF9BTEVOKSA9PSAwKSkgeworCisJCQkJaW50ZXJmZXJlbmNlX2NhbmRpZGF0ZSA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJLyogZG9uJ3QgY2FyZSBmdXJ0aGVyIGlmIGl0IGlzIGFuIGludGVyZmVyZW5jZSBjYW5kaWRhdGUgKi8KKwkJaWYgKGludGVyZmVyZW5jZV9jYW5kaWRhdGUpCisJCQljb250aW51ZTsKKworCQlpZiAoZmlyc3RfY2FuZGlkYXRlID09IE5VTEwpIHsKKwkJCWZpcnN0X2NhbmRpZGF0ZSA9IHRtcF9uZWlnaF9ub2RlOworCQkJdG1wX25laWdoX25vZGUtPm5leHRfYm9uZF9jYW5kaWRhdGUgPSBmaXJzdF9jYW5kaWRhdGU7CisJCX0gZWxzZQorCQkJdG1wX25laWdoX25vZGUtPm5leHRfYm9uZF9jYW5kaWRhdGUgPSBsYXN0X2NhbmRpZGF0ZTsKKworCQlsYXN0X2NhbmRpZGF0ZSA9IHRtcF9uZWlnaF9ub2RlOworCisJCWNhbmRpZGF0ZXMrKzsKKwl9CisKKwlpZiAoY2FuZGlkYXRlcyA+IDApIHsKKwkJZmlyc3RfY2FuZGlkYXRlLT5uZXh0X2JvbmRfY2FuZGlkYXRlID0gbGFzdF9jYW5kaWRhdGU7CisJCW9yaWdfbm9kZS0+Ym9uZC5zZWxlY3RlZCA9IGZpcnN0X2NhbmRpZGF0ZTsKKwl9CisKKwlvcmlnX25vZGUtPmJvbmQuY2FuZGlkYXRlcyA9IGNhbmRpZGF0ZXM7Cit9CisKIHZvaWQgcmVjZWl2ZV9iYXRfcGFja2V0KHN0cnVjdCBldGhoZHIgKmV0aGhkciwKIAkJCQlzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldCwKIAkJCQl1bnNpZ25lZCBjaGFyICpobmFfYnVmZiwgaW50IGhuYV9idWZmX2xlbiwKIAkJCQlzdHJ1Y3QgYmF0bWFuX2lmICppZl9pbmNvbWluZykKIHsKKwkvKiBGSVhNRTogZWFjaCBvcmlnX25vZGUtPmJhdG1hbl9pZiB3aWxsIGJlIGF0dGFjaGVkIHRvIGEgc29mdGlmICovCisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KHNvZnRfZGV2aWNlKTsKIAlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWY7CiAJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19uZWlnaF9ub2RlLCAqb3JpZ19ub2RlOwogCWNoYXIgaGFzX2RpcmVjdGxpbmtfZmxhZzsKIAljaGFyIGlzX215X2FkZHIgPSAwLCBpc19teV9vcmlnID0gMCwgaXNfbXlfb2xkb3JpZyA9IDA7CiAJY2hhciBpc19icm9hZGNhc3QgPSAwLCBpc19iaWRpcmVjdGlvbmFsLCBpc19zaW5nbGVfaG9wX25laWdoOwogCWNoYXIgaXNfZHVwbGljYXRlOwotCXVuc2lnbmVkIHNob3J0IGlmX2luY29taW5nX3NlcW5vOworCXVpbnQzMl90IGlmX2luY29taW5nX3NlcW5vOwogCiAJLyogU2lsZW50bHkgZHJvcCB3aGVuIHRoZSBiYXRtYW4gcGFja2V0IGlzIGFjdHVhbGx5IG5vdCBhCiAJICogY29ycmVjdCBwYWNrZXQuCkBAIC00MzEsNyArNTUzLDggQEAKIAlpc19zaW5nbGVfaG9wX25laWdoID0gKGNvbXBhcmVfb3JpZyhldGhoZHItPmhfc291cmNlLAogCQkJCQkgICAgYmF0bWFuX3BhY2tldC0+b3JpZykgPyAxIDogMCk7CiAKLQliYXRfZGJnKERCR19CQVRNQU4sICJSZWNlaXZlZCBCQVRNQU4gcGFja2V0IHZpYSBOQjogJXBNLCBJRjogJXMgWyVzXSAiCisJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKKwkJIlJlY2VpdmVkIEJBVE1BTiBwYWNrZXQgdmlhIE5COiAlcE0sIElGOiAlcyBbJXNdICIKIAkJIihmcm9tIE9HOiAlcE0sIHZpYSBwcmV2IE9HOiAlcE0sIHNlcW5vICVkLCB0cSAlZCwgIgogCQkiVFRMICVkLCBWICVkLCBJREYgJWQpXG4iLAogCQlldGhoZHItPmhfc291cmNlLCBpZl9pbmNvbWluZy0+ZGV2LCBpZl9pbmNvbWluZy0+YWRkcl9zdHIsCkBAIC00NTUsMTkgKzU3OCwxOSBAQAogCQkJCSBiYXRtYW5faWYtPm5ldF9kZXYtPmRldl9hZGRyKSkKIAkJCWlzX215X29sZG9yaWcgPSAxOwogCi0JCWlmIChjb21wYXJlX29yaWcoZXRoaGRyLT5oX3NvdXJjZSwgYnJvYWRjYXN0QWRkcikpCisJCWlmIChjb21wYXJlX29yaWcoZXRoaGRyLT5oX3NvdXJjZSwgYnJvYWRjYXN0X2FkZHIpKQogCQkJaXNfYnJvYWRjYXN0ID0gMTsKIAl9CiAKIAlpZiAoYmF0bWFuX3BhY2tldC0+dmVyc2lvbiAhPSBDT01QQVRfVkVSU0lPTikgewotCQliYXRfZGJnKERCR19CQVRNQU4sCisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCiAJCQkiRHJvcCBwYWNrZXQ6IGluY29tcGF0aWJsZSBiYXRtYW4gdmVyc2lvbiAoJWkpXG4iLAogCQkJYmF0bWFuX3BhY2tldC0+dmVyc2lvbik7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoaXNfbXlfYWRkcikgewotCQliYXRfZGJnKERCR19CQVRNQU4sCisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCiAJCQkiRHJvcCBwYWNrZXQ6IHJlY2VpdmVkIG15IG93biBicm9hZGNhc3QgKHNlbmRlcjogJXBNIgogCQkJIilcbiIsCiAJCQlldGhoZHItPmhfc291cmNlKTsKQEAgLTQ3NSw3ICs1OTgsNyBAQAogCX0KIAogCWlmIChpc19icm9hZGNhc3QpIHsKLQkJYmF0X2RiZyhEQkdfQkFUTUFOLCAiRHJvcCBwYWNrZXQ6ICIKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwgIkRyb3AgcGFja2V0OiAiCiAJCSJpZ25vcmluZyBhbGwgcGFja2V0cyB3aXRoIGJyb2FkY2FzdCBzb3VyY2UgYWRkciAoc2VuZGVyOiAlcE0iCiAJCSIpXG4iLCBldGhoZHItPmhfc291cmNlKTsKIAkJcmV0dXJuOwpAQCAtNTA1LDEzICs2MjgsMTMgQEAKIAkJCQliaXRfcGFja2V0X2NvdW50KHdvcmQpOwogCQl9CiAKLQkJYmF0X2RiZyhEQkdfQkFUTUFOLCAiRHJvcCBwYWNrZXQ6ICIKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwgIkRyb3AgcGFja2V0OiAiCiAJCQkib3JpZ2luYXRvciBwYWNrZXQgZnJvbSBteXNlbGYgKHZpYSBuZWlnaGJvcilcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKGlzX215X29sZG9yaWcpIHsKLQkJYmF0X2RiZyhEQkdfQkFUTUFOLAorCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAogCQkJIkRyb3AgcGFja2V0OiBpZ25vcmluZyBhbGwgcmVicm9hZGNhc3QgZWNob3MgKHNlbmRlcjogIgogCQkJIiVwTSlcbiIsIGV0aGhkci0+aF9zb3VyY2UpOwogCQlyZXR1cm47CkBAIC01MjQsMTQgKzY0NywxNCBAQAogCWlzX2R1cGxpY2F0ZSA9IGNvdW50X3JlYWxfcGFja2V0cyhldGhoZHIsIGJhdG1hbl9wYWNrZXQsIGlmX2luY29taW5nKTsKIAogCWlmIChpc19kdXBsaWNhdGUgPT0gLTEpIHsKLQkJYmF0X2RiZyhEQkdfQkFUTUFOLAorCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAogCQkJIkRyb3AgcGFja2V0OiBwYWNrZXQgd2l0aGluIHNlcW5vIHByb3RlY3Rpb24gdGltZSAiCiAJCQkiKHNlbmRlcjogJXBNKVxuIiwgZXRoaGRyLT5oX3NvdXJjZSk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoYmF0bWFuX3BhY2tldC0+dHEgPT0gMCkgewotCQliYXRfZGJnKERCR19CQVRNQU4sCisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCiAJCQkiRHJvcCBwYWNrZXQ6IG9yaWdpbmF0b3IgcGFja2V0IHdpdGggdHEgZXF1YWwgMFxuIik7CiAJCXJldHVybjsKIAl9CkBAIC01NDQsNyArNjY3LDcgQEAKIAkgICAgIShjb21wYXJlX29yaWcoYmF0bWFuX3BhY2tldC0+b3JpZywgYmF0bWFuX3BhY2tldC0+cHJldl9zZW5kZXIpKSAmJgogCSAgICAoY29tcGFyZV9vcmlnKG9yaWdfbm9kZS0+cm91dGVyLT5hZGRyLAogCQkJICBvcmlnX25vZGUtPnJvdXRlci0+b3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIpKSkgewotCQliYXRfZGJnKERCR19CQVRNQU4sCisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCiAJCQkiRHJvcCBwYWNrZXQ6IGlnbm9yaW5nIGFsbCByZWJyb2FkY2FzdCBwYWNrZXRzIHRoYXQgIgogCQkJIm1heSBtYWtlIG1lIGxvb3AgKHNlbmRlcjogJXBNKVxuIiwgZXRoaGRyLT5oX3NvdXJjZSk7CiAJCXJldHVybjsKQEAgLTU2MSwxMSArNjg0LDEyIEBACiAJICogZG9uJ3Qgcm91dGUgdG93YXJkcyBpdCAqLwogCWlmICghaXNfc2luZ2xlX2hvcF9uZWlnaCAmJgogCSAgICAob3JpZ19uZWlnaF9ub2RlLT5yb3V0ZXIgPT0gTlVMTCkpIHsKLQkJYmF0X2RiZyhEQkdfQkFUTUFOLCAiRHJvcCBwYWNrZXQ6IE9HTSB2aWEgdW5rbm93biBuZWlnaGJvciFcbiIpOworCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAorCQkJIkRyb3AgcGFja2V0OiBPR00gdmlhIHVua25vd24gbmVpZ2hib3IhXG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCWlzX2JpZGlyZWN0aW9uYWwgPSBpc0JpZGlyZWN0aW9uYWxOZWlnaChvcmlnX25vZGUsIG9yaWdfbmVpZ2hfbm9kZSwKKwlpc19iaWRpcmVjdGlvbmFsID0gaXNfYmlkaXJlY3Rpb25hbF9uZWlnaChvcmlnX25vZGUsIG9yaWdfbmVpZ2hfbm9kZSwKIAkJCQkJCWJhdG1hbl9wYWNrZXQsIGlmX2luY29taW5nKTsKIAogCS8qIHVwZGF0ZSByYW5raW5nIGlmIGl0IGlzIG5vdCBhIGR1cGxpY2F0ZSBvciBoYXMgdGhlIHNhbWUKQEAgLTU3Nyw2ICs3MDEsMTAgQEAKIAkJdXBkYXRlX29yaWcob3JpZ19ub2RlLCBldGhoZHIsIGJhdG1hbl9wYWNrZXQsCiAJCQkgICAgaWZfaW5jb21pbmcsIGhuYV9idWZmLCBobmFfYnVmZl9sZW4sIGlzX2R1cGxpY2F0ZSk7CiAKKwltYXJrX2JvbmRpbmdfYWRkcmVzcyhiYXRfcHJpdiwgb3JpZ19ub2RlLAorCQkJICAgICBvcmlnX25laWdoX25vZGUsIGJhdG1hbl9wYWNrZXQpOworCXVwZGF0ZV9ib25kaW5nX2NhbmRpZGF0ZXMoYmF0X3ByaXYsIG9yaWdfbm9kZSk7CisKIAkvKiBpcyBzaW5nbGUgaG9wIChkaXJlY3QpIG5laWdoYm9yICovCiAJaWYgKGlzX3NpbmdsZV9ob3BfbmVpZ2gpIHsKIApAQCAtNTg0LDI0ICs3MTIsMjUgQEAKIAkJc2NoZWR1bGVfZm9yd2FyZF9wYWNrZXQob3JpZ19ub2RlLCBldGhoZHIsIGJhdG1hbl9wYWNrZXQsCiAJCQkJCTEsIGhuYV9idWZmX2xlbiwgaWZfaW5jb21pbmcpOwogCi0JCWJhdF9kYmcoREJHX0JBVE1BTiwgIkZvcndhcmRpbmcgcGFja2V0OiAiCisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsICJGb3J3YXJkaW5nIHBhY2tldDogIgogCQkJInJlYnJvYWRjYXN0IG5laWdoYm9yIHBhY2tldCB3aXRoIGRpcmVjdCBsaW5rIGZsYWdcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJLyogbXVsdGlob3Agb3JpZ2luYXRvciAqLwogCWlmICghaXNfYmlkaXJlY3Rpb25hbCkgewotCQliYXRfZGJnKERCR19CQVRNQU4sCisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCiAJCQkiRHJvcCBwYWNrZXQ6IG5vdCByZWNlaXZlZCB2aWEgYmlkaXJlY3Rpb25hbCBsaW5rXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmIChpc19kdXBsaWNhdGUpIHsKLQkJYmF0X2RiZyhEQkdfQkFUTUFOLCAiRHJvcCBwYWNrZXQ6IGR1cGxpY2F0ZSBwYWNrZXQgcmVjZWl2ZWRcbiIpOworCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAorCQkJIkRyb3AgcGFja2V0OiBkdXBsaWNhdGUgcGFja2V0IHJlY2VpdmVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCWJhdF9kYmcoREJHX0JBVE1BTiwKKwliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAogCQkiRm9yd2FyZGluZyBwYWNrZXQ6IHJlYnJvYWRjYXN0IG9yaWdpbmF0b3IgcGFja2V0XG4iKTsKIAlzY2hlZHVsZV9mb3J3YXJkX3BhY2tldChvcmlnX25vZGUsIGV0aGhkciwgYmF0bWFuX3BhY2tldCwKIAkJCQkwLCBobmFfYnVmZl9sZW4sIGlmX2luY29taW5nKTsKQEAgLTY1MiwxMCArNzgxLDEwIEBACiAJcmV0dXJuIE5FVF9SWF9TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IHJlY3ZfbXlfaWNtcF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgcmVjdl9teV9pY21wX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzaXplX3QgaWNtcF9sZW4pCiB7CiAJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOwotCXN0cnVjdCBpY21wX3BhY2tldCAqaWNtcF9wYWNrZXQ7CisJc3RydWN0IGljbXBfcGFja2V0X3JyICppY21wX3BhY2tldDsKIAlzdHJ1Y3QgZXRoaGRyICpldGhoZHI7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYl9vbGQ7CiAJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmOwpAQCAtNjYzLDEyICs3OTIsMTIgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVpbnQ4X3QgZHN0YWRkcltFVEhfQUxFTl07CiAKLQlpY21wX3BhY2tldCA9IChzdHJ1Y3QgaWNtcF9wYWNrZXQgKilza2ItPmRhdGE7CisJaWNtcF9wYWNrZXQgPSAoc3RydWN0IGljbXBfcGFja2V0X3JyICopc2tiLT5kYXRhOwogCWV0aGhkciA9IChzdHJ1Y3QgZXRoaGRyICopc2tiX21hY19oZWFkZXIoc2tiKTsKIAogCS8qIGFkZCBkYXRhIHRvIGRldmljZSBxdWV1ZSAqLwogCWlmIChpY21wX3BhY2tldC0+bXNnX3R5cGUgIT0gRUNIT19SRVFVRVNUKSB7Ci0JCWJhdF9kZXZpY2VfcmVjZWl2ZV9wYWNrZXQoaWNtcF9wYWNrZXQpOworCQliYXRfc29ja2V0X3JlY2VpdmVfcGFja2V0KGljbXBfcGFja2V0LCBpY21wX2xlbik7CiAJCXJldHVybiBORVRfUlhfRFJPUDsKIAl9CiAKQEAgLTY5MCwxMyArODE5LDEyIEBACiAKIAkJLyogY3JlYXRlIGEgY29weSBvZiB0aGUgc2tiLCBpZiBuZWVkZWQsIHRvIG1vZGlmeSBpdC4gKi8KIAkJc2tiX29sZCA9IE5VTEw7Ci0JCWlmICghc2tiX2Nsb25lX3dyaXRhYmxlKHNrYiwgc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldCkpKSB7CisJCWlmICghc2tiX2Nsb25lX3dyaXRhYmxlKHNrYiwgaWNtcF9sZW4pKSB7CiAJCQlza2Jfb2xkID0gc2tiOwogCQkJc2tiID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKIAkJCWlmICghc2tiKQogCQkJCXJldHVybiBORVRfUlhfRFJPUDsKLQotCQkJaWNtcF9wYWNrZXQgPSAoc3RydWN0IGljbXBfcGFja2V0ICopc2tiLT5kYXRhOworCQkJaWNtcF9wYWNrZXQgPSAoc3RydWN0IGljbXBfcGFja2V0X3JyICopc2tiLT5kYXRhOwogCQkJZXRoaGRyID0gKHN0cnVjdCBldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpOwogCQkJa2ZyZWVfc2tiKHNrYl9vbGQpOwogCQl9CkBAIC03MTUsNyArODQzLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHJlY3ZfaWNtcF90dGxfZXhjZWVkZWQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgcmVjdl9pY21wX3R0bF9leGNlZWRlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzaXplX3QgaWNtcF9sZW4pCiB7CiAJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOwogCXN0cnVjdCBpY21wX3BhY2tldCAqaWNtcF9wYWNrZXQ7CkBAIC03MzEsMTAgKzg1OSw5IEBACiAKIAkvKiBzZW5kIFRUTCBleGNlZWRlZCBpZiBwYWNrZXQgaXMgYW4gZWNobyByZXF1ZXN0ICh0cmFjZXJvdXRlKSAqLwogCWlmIChpY21wX3BhY2tldC0+bXNnX3R5cGUgIT0gRUNIT19SRVFVRVNUKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImJhdG1hbi1hZHY6IgotCQkgICAgICAgIldhcm5pbmcgLSBjYW4ndCBmb3J3YXJkIGljbXAgcGFja2V0IGZyb20gJXBNIHRvICVwTTogIgotCQkgICAgICAgInR0bCBleGNlZWRlZFxuIiwKLQkJICAgICAgIGljbXBfcGFja2V0LT5vcmlnLCBpY21wX3BhY2tldC0+ZHN0KTsKKwkJcHJfd2FybmluZygiV2FybmluZyAtIGNhbid0IGZvcndhcmQgaWNtcCBwYWNrZXQgZnJvbSAlcE0gdG8gIgorCQkJICAgIiVwTTogdHRsIGV4Y2VlZGVkXG4iLCBpY21wX3BhY2tldC0+b3JpZywKKwkJCSAgIGljbXBfcGFja2V0LT5kc3QpOwogCQlyZXR1cm4gTkVUX1JYX0RST1A7CiAJfQogCkBAIC03NTQsNyArODgxLDcgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKIAogCQkvKiBjcmVhdGUgYSBjb3B5IG9mIHRoZSBza2IsIGlmIG5lZWRlZCwgdG8gbW9kaWZ5IGl0LiAqLwotCQlpZiAoIXNrYl9jbG9uZV93cml0YWJsZShza2IsIHNpemVvZihzdHJ1Y3QgaWNtcF9wYWNrZXQpKSkgeworCQlpZiAoIXNrYl9jbG9uZV93cml0YWJsZShza2IsIGljbXBfbGVuKSkgewogCQkJc2tiX29sZCA9IHNrYjsKIAkJCXNrYiA9IHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7CiAJCQlpZiAoIXNrYikKQEAgLTc4MSw3ICs5MDgsNyBAQAogCiBpbnQgcmVjdl9pY21wX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpY21wX3BhY2tldCAqaWNtcF9wYWNrZXQ7CisJc3RydWN0IGljbXBfcGFja2V0X3JyICppY21wX3BhY2tldDsKIAlzdHJ1Y3QgZXRoaGRyICpldGhoZHI7CiAJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOwogCXN0cnVjdCBza19idWZmICpza2Jfb2xkOwpAQCAtNzkxLDYgKzkxOCwxMiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdWludDhfdCBkc3RhZGRyW0VUSF9BTEVOXTsKIAorCS8qKgorCSAqIHdlIHRydW5jYXRlIGFsbCBpbmNvbWluZyBpY21wIHBhY2tldHMgaWYgdGhleSBkb24ndCBtYXRjaCBvdXIgc2l6ZQorCSAqLworCWlmIChza2JfaGVhZGxlbihza2IpID49IHNpemVvZihzdHJ1Y3QgaWNtcF9wYWNrZXRfcnIpKQorCQloZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWNtcF9wYWNrZXRfcnIpOworCiAJLyogZHJvcCBwYWNrZXQgaWYgaXQgaGFzIG5vdCBuZWNlc3NhcnkgbWluaW11bSBzaXplICovCiAJaWYgKHNrYl9oZWFkbGVuKHNrYikgPCBoZHJfc2l6ZSkKIAkJcmV0dXJuIE5FVF9SWF9EUk9QOwpAQCAtODA5LDE1ICs5NDIsMjMgQEAKIAlpZiAoIWlzX215X21hYyhldGhoZHItPmhfZGVzdCkpCiAJCXJldHVybiBORVRfUlhfRFJPUDsKIAotCWljbXBfcGFja2V0ID0gKHN0cnVjdCBpY21wX3BhY2tldCAqKXNrYi0+ZGF0YTsKKwlpY21wX3BhY2tldCA9IChzdHJ1Y3QgaWNtcF9wYWNrZXRfcnIgKilza2ItPmRhdGE7CisKKwkvKiBhZGQgcmVjb3JkIHJvdXRlIGluZm9ybWF0aW9uIGlmIG5vdCBmdWxsICovCisJaWYgKChoZHJfc2l6ZSA9PSBzaXplb2Yoc3RydWN0IGljbXBfcGFja2V0X3JyKSkgJiYKKwkgICAgKGljbXBfcGFja2V0LT5ycl9jdXIgPCBCQVRfUlJfTEVOKSkgeworCQltZW1jcHkoJihpY21wX3BhY2tldC0+cnJbaWNtcF9wYWNrZXQtPnJyX2N1cl0pLAorCQkJZXRoaGRyLT5oX2Rlc3QsIEVUSF9BTEVOKTsKKwkJaWNtcF9wYWNrZXQtPnJyX2N1cisrOworCX0KIAogCS8qIHBhY2tldCBmb3IgbWUgKi8KIAlpZiAoaXNfbXlfbWFjKGljbXBfcGFja2V0LT5kc3QpKQotCQlyZXR1cm4gcmVjdl9teV9pY21wX3BhY2tldChza2IpOworCQlyZXR1cm4gcmVjdl9teV9pY21wX3BhY2tldChza2IsIGhkcl9zaXplKTsKIAogCS8qIFRUTCBleGNlZWRlZCAqLwogCWlmIChpY21wX3BhY2tldC0+dHRsIDwgMikKLQkJcmV0dXJuIHJlY3ZfaWNtcF90dGxfZXhjZWVkZWQoc2tiKTsKKwkJcmV0dXJuIHJlY3ZfaWNtcF90dGxfZXhjZWVkZWQoc2tiLCBoZHJfc2l6ZSk7CiAKIAlyZXQgPSBORVRfUlhfRFJPUDsKIApAQCAtODM2LDEyICs5NzcsMTIgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKIAogCQkvKiBjcmVhdGUgYSBjb3B5IG9mIHRoZSBza2IsIGlmIG5lZWRlZCwgdG8gbW9kaWZ5IGl0LiAqLwotCQlpZiAoIXNrYl9jbG9uZV93cml0YWJsZShza2IsIHNpemVvZihzdHJ1Y3QgaWNtcF9wYWNrZXQpKSkgeworCQlpZiAoIXNrYl9jbG9uZV93cml0YWJsZShza2IsIGhkcl9zaXplKSkgewogCQkJc2tiX29sZCA9IHNrYjsKIAkJCXNrYiA9IHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7CiAJCQlpZiAoIXNrYikKIAkJCQlyZXR1cm4gTkVUX1JYX0RST1A7Ci0JCQlpY21wX3BhY2tldCA9IChzdHJ1Y3QgaWNtcF9wYWNrZXQgKilza2ItPmRhdGE7CisJCQlpY21wX3BhY2tldCA9IChzdHJ1Y3QgaWNtcF9wYWNrZXRfcnIgKilza2ItPmRhdGE7CiAJCQlldGhoZHIgPSAoc3RydWN0IGV0aGhkciAqKXNrYl9tYWNfaGVhZGVyKHNrYik7CiAJCQlrZnJlZV9za2Ioc2tiX29sZCk7CiAJCX0KQEAgLTg1OSwxNiArMTAwMCwxMDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgcmVjdl91bmljYXN0X3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorLyogZmluZCBhIHN1aXRhYmxlIHJvdXRlciBmb3IgdGhpcyBvcmlnaW5hdG9yLCBhbmQgdXNlCisgKiBib25kaW5nIGlmIHBvc3NpYmxlLiAqLworc3RydWN0IG5laWdoX25vZGUgKmZpbmRfcm91dGVyKHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwKKwkJc3RydWN0IGJhdG1hbl9pZiAqcmVjdl9pZikKK3sKKwkvKiBGSVhNRTogZWFjaCBvcmlnX25vZGUtPmJhdG1hbl9pZiB3aWxsIGJlIGF0dGFjaGVkIHRvIGEgc29mdGlmICovCisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KHNvZnRfZGV2aWNlKTsKKwlzdHJ1Y3Qgb3JpZ19ub2RlICpwcmltYXJ5X29yaWdfbm9kZTsKKwlzdHJ1Y3Qgb3JpZ19ub2RlICpyb3V0ZXJfb3JpZzsKKwlzdHJ1Y3QgbmVpZ2hfbm9kZSAqcm91dGVyLCAqZmlyc3RfY2FuZGlkYXRlLCAqYmVzdF9yb3V0ZXI7CisJc3RhdGljIHVpbnQ4X3QgemVyb19tYWNbRVRIX0FMRU5dID0gezAsIDAsIDAsIDAsIDAsIDB9OworCWludCBib25kaW5nX2VuYWJsZWQ7CisKKwlpZiAoIW9yaWdfbm9kZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIW9yaWdfbm9kZS0+cm91dGVyKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIHdpdGhvdXQgYm9uZGluZywgdGhlIGZpcnN0IG5vZGUgc2hvdWxkCisJICogYWx3YXlzIGNob29zZSB0aGUgZGVmYXVsdCByb3V0ZXIuICovCisKKwlib25kaW5nX2VuYWJsZWQgPSBhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmJvbmRpbmdfZW5hYmxlZCk7CisJaWYgKCFib25kaW5nX2VuYWJsZWQgJiYgKHJlY3ZfaWYgPT0gTlVMTCkpCisJCQlyZXR1cm4gb3JpZ19ub2RlLT5yb3V0ZXI7CisKKwlyb3V0ZXJfb3JpZyA9IG9yaWdfbm9kZS0+cm91dGVyLT5vcmlnX25vZGU7CisKKwkvKiBpZiB3ZSBoYXZlIHNvbWV0aGluZyBpbiB0aGUgcHJpbWFyeV9hZGRyLCB3ZSBjYW4gc2VhcmNoCisJICogZm9yIGEgcG90ZW50aWFsIGJvbmRpbmcgY2FuZGlkYXRlLiAqLworCWlmIChtZW1jbXAocm91dGVyX29yaWctPnByaW1hcnlfYWRkciwgemVyb19tYWMsIEVUSF9BTEVOKSA9PSAwKQorCQlyZXR1cm4gb3JpZ19ub2RlLT5yb3V0ZXI7CisKKwkvKiBmaW5kIHRoZSBvcmlnX25vZGUgd2hpY2ggaGFzIHRoZSBwcmltYXJ5IGludGVyZmFjZS4gbWlnaHQKKwkgKiBldmVuIGJlIHRoZSBzYW1lIGFzIG91ciByb3V0ZXJfb3JpZyBpbiBtYW55IGNhc2VzICovCisKKwlpZiAobWVtY21wKHJvdXRlcl9vcmlnLT5wcmltYXJ5X2FkZHIsCisJCQkJcm91dGVyX29yaWctPm9yaWcsIEVUSF9BTEVOKSA9PSAwKSB7CisJCXByaW1hcnlfb3JpZ19ub2RlID0gcm91dGVyX29yaWc7CisJfSBlbHNlIHsKKwkJcHJpbWFyeV9vcmlnX25vZGUgPSBoYXNoX2ZpbmQob3JpZ19oYXNoLAorCQkJCQkJcm91dGVyX29yaWctPnByaW1hcnlfYWRkcik7CisJCWlmICghcHJpbWFyeV9vcmlnX25vZGUpCisJCQlyZXR1cm4gb3JpZ19ub2RlLT5yb3V0ZXI7CisJfQorCisJLyogd2l0aCBsZXNzIHRoYW4gMiBjYW5kaWRhdGVzLCB3ZSBjYW4ndCBkbyBhbnkKKwkgKiBib25kaW5nIGFuZCBwcmVmZXIgdGhlIG9yaWdpbmFsIHJvdXRlci4gKi8KKworCWlmIChwcmltYXJ5X29yaWdfbm9kZS0+Ym9uZC5jYW5kaWRhdGVzIDwgMikKKwkJcmV0dXJuIG9yaWdfbm9kZS0+cm91dGVyOworCisKKwkvKiBhbGwgbm9kZXMgYmV0d2VlbiBzaG91bGQgY2hvb3NlIGEgY2FuZGlkYXRlIHdoaWNoCisJICogaXMgaXMgbm90IG9uIHRoZSBpbnRlcmZhY2Ugd2hlcmUgdGhlIHBhY2tldCBjYW1lCisJICogaW4uICovCisJZmlyc3RfY2FuZGlkYXRlID0gcHJpbWFyeV9vcmlnX25vZGUtPmJvbmQuc2VsZWN0ZWQ7CisJcm91dGVyID0gZmlyc3RfY2FuZGlkYXRlOworCisJaWYgKGJvbmRpbmdfZW5hYmxlZCkgeworCQkvKiBpbiB0aGUgYm9uZGluZyBjYXNlLCBzZW5kIHRoZSBwYWNrZXRzIGluIGEgcm91bmQKKwkJICogcm9iaW4gZmFzaGlvbiBvdmVyIHRoZSByZW1haW5pbmcgaW50ZXJmYWNlcy4gKi8KKwkJZG8geworCQkJLyogcmVjdl9pZiA9PSBOVUxMIG9uIHRoZSBmaXJzdCBub2RlLiAqLworCQkJaWYgKHJvdXRlci0+aWZfaW5jb21pbmcgIT0gcmVjdl9pZikKKwkJCQlicmVhazsKKworCQkJcm91dGVyID0gcm91dGVyLT5uZXh0X2JvbmRfY2FuZGlkYXRlOworCQl9IHdoaWxlIChyb3V0ZXIgIT0gZmlyc3RfY2FuZGlkYXRlKTsKKworCQlwcmltYXJ5X29yaWdfbm9kZS0+Ym9uZC5zZWxlY3RlZCA9IHJvdXRlci0+bmV4dF9ib25kX2NhbmRpZGF0ZTsKKworCX0gZWxzZSB7CisJCS8qIGlmIGJvbmRpbmcgaXMgZGlzYWJsZWQsIHVzZSB0aGUgYmVzdCBvZiB0aGUKKwkJICogcmVtYWluaW5nIGNhbmRpZGF0ZXMgd2hpY2ggYXJlIG5vdCB1c2luZworCQkgKiB0aGlzIGludGVyZmFjZS4gKi8KKwkJYmVzdF9yb3V0ZXIgPSBmaXJzdF9jYW5kaWRhdGU7CisKKwkJZG8geworCQkJLyogcmVjdl9pZiA9PSBOVUxMIG9uIHRoZSBmaXJzdCBub2RlLiAqLworCQkJaWYgKChyb3V0ZXItPmlmX2luY29taW5nICE9IHJlY3ZfaWYpICYmCisJCQkJKHJvdXRlci0+dHFfYXZnID4gYmVzdF9yb3V0ZXItPnRxX2F2ZykpCisJCQkJCWJlc3Rfcm91dGVyID0gcm91dGVyOworCisJCQlyb3V0ZXIgPSByb3V0ZXItPm5leHRfYm9uZF9jYW5kaWRhdGU7CisJCX0gd2hpbGUgKHJvdXRlciAhPSBmaXJzdF9jYW5kaWRhdGUpOworCisJCXJvdXRlciA9IGJlc3Rfcm91dGVyOworCX0KKworCXJldHVybiByb3V0ZXI7Cit9CisKK2ludCByZWN2X3VuaWNhc3RfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBiYXRtYW5faWYgKnJlY3ZfaWYpCiB7CiAJc3RydWN0IHVuaWNhc3RfcGFja2V0ICp1bmljYXN0X3BhY2tldDsKIAlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7CisJc3RydWN0IG5laWdoX25vZGUgKnJvdXRlcjsKIAlzdHJ1Y3QgZXRoaGRyICpldGhoZHI7CiAJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmOwogCXN0cnVjdCBza19idWZmICpza2Jfb2xkOwogCXVpbnQ4X3QgZHN0YWRkcltFVEhfQUxFTl07CiAJaW50IGhkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCB1bmljYXN0X3BhY2tldCk7Ci0JaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogZHJvcCBwYWNrZXQgaWYgaXQgaGFzIG5vdCBuZWNlc3NhcnkgbWluaW11bSBzaXplICovCkBAIC04OTksNDkgKzExMzMsNTAgQEAKIAogCS8qIFRUTCBleGNlZWRlZCAqLwogCWlmICh1bmljYXN0X3BhY2tldC0+dHRsIDwgMikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJiYXRtYW4tYWR2Oldhcm5pbmcgLSAiCi0JCSAgICAgICAiY2FuJ3QgZm9yd2FyZCB1bmljYXN0IHBhY2tldCBmcm9tICVwTSB0byAlcE06ICIKLQkJICAgICAgICJ0dGwgZXhjZWVkZWRcbiIsCi0JCSAgICAgICBldGhoZHItPmhfc291cmNlLCB1bmljYXN0X3BhY2tldC0+ZGVzdCk7CisJCXByX3dhcm5pbmcoIldhcm5pbmcgLSBjYW4ndCBmb3J3YXJkIHVuaWNhc3QgcGFja2V0IGZyb20gJXBNIHRvICIKKwkJCSAgICIlcE06IHR0bCBleGNlZWRlZFxuIiwgZXRoaGRyLT5oX3NvdXJjZSwKKwkJCSAgIHVuaWNhc3RfcGFja2V0LT5kZXN0KTsKIAkJcmV0dXJuIE5FVF9SWF9EUk9QOwogCX0KIAotCXJldCA9IE5FVF9SWF9EUk9QOwogCS8qIGdldCByb3V0aW5nIGluZm9ybWF0aW9uICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CiAJb3JpZ19ub2RlID0gKChzdHJ1Y3Qgb3JpZ19ub2RlICopCiAJCSAgICAgaGFzaF9maW5kKG9yaWdfaGFzaCwgdW5pY2FzdF9wYWNrZXQtPmRlc3QpKTsKIAotCWlmICgob3JpZ19ub2RlICE9IE5VTEwpICYmCi0JICAgIChvcmlnX25vZGUtPnJvdXRlciAhPSBOVUxMKSkgeworCXJvdXRlciA9IGZpbmRfcm91dGVyKG9yaWdfbm9kZSwgcmVjdl9pZik7CiAKLQkJLyogZG9uJ3QgbG9jayB3aGlsZSBzZW5kaW5nIHRoZSBwYWNrZXRzIC4uLiB3ZSB0aGVyZWZvcmUKLQkJICogY29weSB0aGUgcmVxdWlyZWQgZGF0YSBiZWZvcmUgc2VuZGluZyAqLwotCQliYXRtYW5faWYgPSBvcmlnX25vZGUtPnJvdXRlci0+aWZfaW5jb21pbmc7Ci0JCW1lbWNweShkc3RhZGRyLCBvcmlnX25vZGUtPnJvdXRlci0+YWRkciwgRVRIX0FMRU4pOworCWlmICghcm91dGVyKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CisJCXJldHVybiBORVRfUlhfRFJPUDsKKwl9CiAKLQkJLyogY3JlYXRlIGEgY29weSBvZiB0aGUgc2tiLCBpZiBuZWVkZWQsIHRvIG1vZGlmeSBpdC4gKi8KLQkJaWYgKCFza2JfY2xvbmVfd3JpdGFibGUoc2tiLCBzaXplb2Yoc3RydWN0IHVuaWNhc3RfcGFja2V0KSkpIHsKLQkJCXNrYl9vbGQgPSBza2I7Ci0JCQlza2IgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpOwotCQkJaWYgKCFza2IpCi0JCQkJcmV0dXJuIE5FVF9SWF9EUk9QOwotCQkJdW5pY2FzdF9wYWNrZXQgPSAoc3RydWN0IHVuaWNhc3RfcGFja2V0ICopc2tiLT5kYXRhOwotCQkJZXRoaGRyID0gKHN0cnVjdCBldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpOwotCQkJa2ZyZWVfc2tiKHNrYl9vbGQpOwotCQl9Ci0JCS8qIGRlY3JlbWVudCB0dGwgKi8KLQkJdW5pY2FzdF9wYWNrZXQtPnR0bC0tOworCS8qIGRvbid0IGxvY2sgd2hpbGUgc2VuZGluZyB0aGUgcGFja2V0cyAuLi4gd2UgdGhlcmVmb3JlCisJICogY29weSB0aGUgcmVxdWlyZWQgZGF0YSBiZWZvcmUgc2VuZGluZyAqLwogCi0JCS8qIHJvdXRlIGl0ICovCi0JCXNlbmRfc2tiX3BhY2tldChza2IsIGJhdG1hbl9pZiwgZHN0YWRkcik7Ci0JCXJldCA9IE5FVF9SWF9TVUNDRVNTOworCWJhdG1hbl9pZiA9IHJvdXRlci0+aWZfaW5jb21pbmc7CisJbWVtY3B5KGRzdGFkZHIsIHJvdXRlci0+YWRkciwgRVRIX0FMRU4pOwogCi0JfSBlbHNlCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKIAotCXJldHVybiByZXQ7CisJLyogY3JlYXRlIGEgY29weSBvZiB0aGUgc2tiLCBpZiBuZWVkZWQsIHRvIG1vZGlmeSBpdC4gKi8KKwlpZiAoIXNrYl9jbG9uZV93cml0YWJsZShza2IsIHNpemVvZihzdHJ1Y3QgdW5pY2FzdF9wYWNrZXQpKSkgeworCQlza2Jfb2xkID0gc2tiOworCQlza2IgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpOworCQlpZiAoIXNrYikKKwkJCXJldHVybiBORVRfUlhfRFJPUDsKKwkJdW5pY2FzdF9wYWNrZXQgPSAoc3RydWN0IHVuaWNhc3RfcGFja2V0ICopIHNrYi0+ZGF0YTsKKwkJZXRoaGRyID0gKHN0cnVjdCBldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpOworCQlrZnJlZV9za2Ioc2tiX29sZCk7CisJfQorCisJLyogZGVjcmVtZW50IHR0bCAqLworCXVuaWNhc3RfcGFja2V0LT50dGwtLTsKKworCS8qIHJvdXRlIGl0ICovCisJc2VuZF9za2JfcGFja2V0KHNrYiwgYmF0bWFuX2lmLCBkc3RhZGRyKTsKKworCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKIH0KIAogaW50IHJlY3ZfYmNhc3RfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IpCkBAIC05NTAsNyArMTE4NSw3IEBACiAJc3RydWN0IGJjYXN0X3BhY2tldCAqYmNhc3RfcGFja2V0OwogCXN0cnVjdCBldGhoZHIgKmV0aGhkcjsKIAlpbnQgaGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IGJjYXN0X3BhY2tldCk7Ci0JaW50MTZfdCBzZXFfZGlmZjsKKwlpbnQzMl90IHNlcV9kaWZmOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBkcm9wIHBhY2tldCBpZiBpdCBoYXMgbm90IG5lY2Vzc2FyeSBtaW5pbXVtIHNpemUgKi8KQEAgLTk3Nyw2ICsxMjEyLDkgQEAKIAlpZiAoaXNfbXlfbWFjKGJjYXN0X3BhY2tldC0+b3JpZykpCiAJCXJldHVybiBORVRfUlhfRFJPUDsKIAorCWlmIChiY2FzdF9wYWNrZXQtPnR0bCA8IDIpCisJCXJldHVybiBORVRfUlhfRFJPUDsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOwogCW9yaWdfbm9kZSA9ICgoc3RydWN0IG9yaWdfbm9kZSAqKQogCQkgICAgIGhhc2hfZmluZChvcmlnX2hhc2gsIGJjYXN0X3BhY2tldC0+b3JpZykpOwpAQCAtOTg5LDEyICsxMjI3LDEyIEBACiAJLyogY2hlY2sgd2hldGhlciB0aGUgcGFja2V0IGlzIGEgZHVwbGljYXRlICovCiAJaWYgKGdldF9iaXRfc3RhdHVzKG9yaWdfbm9kZS0+YmNhc3RfYml0cywKIAkJCSAgIG9yaWdfbm9kZS0+bGFzdF9iY2FzdF9zZXFubywKLQkJCSAgIG50b2hzKGJjYXN0X3BhY2tldC0+c2Vxbm8pKSkgeworCQkJICAgbnRvaGwoYmNhc3RfcGFja2V0LT5zZXFubykpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CiAJCXJldHVybiBORVRfUlhfRFJPUDsKIAl9CiAKLQlzZXFfZGlmZiA9IG50b2hzKGJjYXN0X3BhY2tldC0+c2Vxbm8pIC0gb3JpZ19ub2RlLT5sYXN0X2JjYXN0X3NlcW5vOworCXNlcV9kaWZmID0gbnRvaGwoYmNhc3RfcGFja2V0LT5zZXFubykgLSBvcmlnX25vZGUtPmxhc3RfYmNhc3Rfc2Vxbm87CiAKIAkvKiBjaGVjayB3aGV0aGVyIHRoZSBwYWNrZXQgaXMgb2xkIGFuZCB0aGUgaG9zdCBqdXN0IHJlc3RhcnRlZC4gKi8KIAlpZiAod2luZG93X3Byb3RlY3RlZChzZXFfZGlmZiwgJm9yaWdfbm9kZS0+YmNhc3Rfc2Vxbm9fcmVzZXQpKSB7CkBAIC0xMDA1LDcgKzEyNDMsNyBAQAogCS8qIG1hcmsgYnJvYWRjYXN0IGluIGZsb29kIGhpc3RvcnksIHVwZGF0ZSB3aW5kb3cgcG9zaXRpb24KIAkgKiBpZiByZXF1aXJlZC4gKi8KIAlpZiAoYml0X2dldF9wYWNrZXQob3JpZ19ub2RlLT5iY2FzdF9iaXRzLCBzZXFfZGlmZiwgMSkpCi0JCW9yaWdfbm9kZS0+bGFzdF9iY2FzdF9zZXFubyA9IG50b2hzKGJjYXN0X3BhY2tldC0+c2Vxbm8pOworCQlvcmlnX25vZGUtPmxhc3RfYmNhc3Rfc2Vxbm8gPSBudG9obChiY2FzdF9wYWNrZXQtPnNlcW5vKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CiAJLyogcmVicm9hZGNhc3QgcGFja2V0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9yb3V0aW5nLmggYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9yb3V0aW5nLmgKaW5kZXggODI4OGRlYy4uM2VhYzY0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvcm91dGluZy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3JvdXRpbmcuaApAQCAtMTksOSArMTksMTAgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgInR5cGVzLmgiCisjaWZuZGVmIF9ORVRfQkFUTUFOX0FEVl9ST1VUSU5HX0hfCisjZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9ST1VUSU5HX0hfCiAKLWV4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCB0aHJlYWRfd2FpdDsKKyNpbmNsdWRlICJ0eXBlcy5oIgogCiB2b2lkIHNsaWRlX293bl9iY2FzdF93aW5kb3coc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmKTsKIHZvaWQgcmVjZWl2ZV9iYXRfcGFja2V0KHN0cnVjdCBldGhoZHIgKmV0aGhkciwKQEAgLTMyLDggKzMzLDE0IEBACiAJCQkJc3RydWN0IG5laWdoX25vZGUgKm5laWdoX25vZGUsCiAJCQkJdW5zaWduZWQgY2hhciAqaG5hX2J1ZmYsIGludCBobmFfYnVmZl9sZW4pOwogaW50IHJlY3ZfaWNtcF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1pbnQgcmVjdl91bmljYXN0X3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCByZWN2X3VuaWNhc3RfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBiYXRtYW5faWYgKnJlY3ZfaWYpOwogaW50IHJlY3ZfYmNhc3RfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IpOwogaW50IHJlY3ZfdmlzX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGludCByZWN2X2JhdF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYpOworc3RydWN0IG5laWdoX25vZGUgKmZpbmRfcm91dGVyKHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwKKwkJc3RydWN0IGJhdG1hbl9pZiAqcmVjdl9pZik7Cit2b2lkIHVwZGF0ZV9ib25kaW5nX2NhbmRpZGF0ZXMoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUpOworCisjZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX1JPVVRJTkdfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3NlbmQuYyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3NlbmQuYwppbmRleCBhYzY5ZWQ4Li4wNTVlZGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zZW5kLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc2VuZC5jCkBAIC0yOSw2ICsyOSwxMCBAQAogI2luY2x1ZGUgInZpcy5oIgogI2luY2x1ZGUgImFnZ3JlZ2F0aW9uLmgiCiAKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg+CisKK3N0YXRpYyB2b2lkIHNlbmRfb3V0c3RhbmRpbmdfYmNhc3RfcGFja2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKIC8qIGFwcGx5IGhvcCBwZW5hbHR5IGZvciBhIG5vcm1hbCBsaW5rICovCiBzdGF0aWMgdWludDhfdCBob3BfcGVuYWx0eShjb25zdCB1aW50OF90IHRxKQogewpAQCAtMzgsMTUgKzQyLDE1IEBACiAvKiB3aGVuIGRvIHdlIHNjaGVkdWxlIG91ciBvd24gcGFja2V0IHRvIGJlIHNlbnQgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIG93bl9zZW5kX3RpbWUoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKIHsKLQlyZXR1cm4gamlmZmllcyArCi0JCSgoKGF0b21pY19yZWFkKCZiYXRfcHJpdi0+b3JpZ19pbnRlcnZhbCkgLSBKSVRURVIgKwotCQkgICAocmFuZG9tMzIoKSAlIDIqSklUVEVSKSkgKiBIWikgLyAxMDAwKTsKKwlyZXR1cm4gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoCisJCSAgIGF0b21pY19yZWFkKCZiYXRfcHJpdi0+b3JpZ19pbnRlcnZhbCkgLQorCQkgICBKSVRURVIgKyAocmFuZG9tMzIoKSAlIDIqSklUVEVSKSk7CiB9CiAKIC8qIHdoZW4gZG8gd2Ugc2NoZWR1bGUgYSBmb3J3YXJkZWQgcGFja2V0IHRvIGJlIHNlbnQgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZvcndhcmRfc2VuZF90aW1lKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCiB7Ci0JcmV0dXJuIGppZmZpZXMgKyAoKChyYW5kb20zMigpICUgKEpJVFRFUi8yKSkgKiBIWikgLyAxMDAwKTsKKwlyZXR1cm4gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMocmFuZG9tMzIoKSAlIChKSVRURVIvMikpOwogfQogCiAvKiBzZW5kIG91dCBhbiBhbHJlYWR5IHByZXBhcmVkIHBhY2tldCB0byB0aGUgZ2l2ZW4gYWRkcmVzcyB2aWEgdGhlCkBAIC02NCwxMCArNjgsOCBAQAogCQlnb3RvIHNlbmRfc2tiX2VycjsKIAogCWlmICghKGJhdG1hbl9pZi0+bmV0X2Rldi0+ZmxhZ3MgJiBJRkZfVVApKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJiYXRtYW4tYWR2OkludGVyZmFjZSAlcyAiCi0JCSAgICAgICAiaXMgbm90IHVwIC0gY2FuJ3Qgc2VuZCBwYWNrZXQgdmlhIHRoYXQgaW50ZXJmYWNlIVxuIiwKLQkJICAgICAgIGJhdG1hbl9pZi0+ZGV2KTsKKwkJcHJfd2FybmluZygiSW50ZXJmYWNlICVzIGlzIG5vdCB1cCAtIGNhbid0IHNlbmQgcGFja2V0IHZpYSAiCisJCQkgICAidGhhdCBpbnRlcmZhY2UhXG4iLCBiYXRtYW5faWYtPmRldik7CiAJCWdvdG8gc2VuZF9za2JfZXJyOwogCX0KIApAQCAtOTAsOSArOTIsMTIgQEAKIAogCS8qIGRldl9xdWV1ZV94bWl0KCkgcmV0dXJucyBhIG5lZ2F0aXZlIHJlc3VsdCBvbiBlcnJvci4JIEhvd2V2ZXIgb24KIAkgKiBjb25nZXN0aW9uIGFuZCB0cmFmZmljIHNoYXBpbmcsIGl0IGRyb3BzIGFuZCByZXR1cm5zIE5FVF9YTUlUX0RST1AKLQkgKiAod2hpY2ggaXMgPiAwKS4gVGhpcyB3aWxsIG5vdCBiZSB0cmVhdGVkIGFzIGFuIGVycm9yLiAqLworCSAqICh3aGljaCBpcyA+IDApLiBUaGlzIHdpbGwgbm90IGJlIHRyZWF0ZWQgYXMgYW4gZXJyb3IuCisJICogQWxzbywgaWYgbmV0ZmlsdGVyL2VidGFibGVzIHdhbnRzIHRvIGJsb2NrIG91dGdvaW5nIGJhdG1hbgorCSAqIHBhY2tldHMgdGhlbiBnaXZpbmcgdGhlbSBhIGNoYW5jZSB0byBkbyBzbyBoZXJlICovCiAKLQlyZXR1cm4gZGV2X3F1ZXVlX3htaXQoc2tiKTsKKwlyZXR1cm4gTkZfSE9PSyhQRl9CUklER0UsIE5GX0JSX0xPQ0FMX09VVCwgc2tiLCBOVUxMLCBza2ItPmRldiwKKwkJICAgICAgIGRldl9xdWV1ZV94bWl0KTsKIHNlbmRfc2tiX2VycjoKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gTkVUX1hNSVRfRFJPUDsKQEAgLTExOSw2ICsxMjQsOCBAQAogc3RhdGljIHZvaWQgc2VuZF9wYWNrZXRfdG9faWYoc3RydWN0IGZvcndfcGFja2V0ICpmb3J3X3BhY2tldCwKIAkJCSAgICAgIHN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZikKIHsKKwkvKiBGSVhNRTogZWFjaCBiYXRtYW5faWYgd2lsbCBiZSBhdHRhY2hlZCB0byBhIHNvZnRpZiAqLworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihzb2Z0X2RldmljZSk7CiAJY2hhciAqZndkX3N0cjsKIAl1aW50OF90IHBhY2tldF9udW07CiAJaW50MTZfdCBidWZmX3BvczsKQEAgLTE0OCwxMSArMTU1LDExIEBACiAJCWZ3ZF9zdHIgPSAocGFja2V0X251bSA+IDAgPyAiRm9yd2FyZGluZyIgOiAoZm9yd19wYWNrZXQtPm93biA/CiAJCQkJCQkJICAgICJTZW5kaW5nIG93biIgOgogCQkJCQkJCSAgICAiRm9yd2FyZGluZyIpKTsKLQkJYmF0X2RiZyhEQkdfQkFUTUFOLAorCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAogCQkJIiVzICVzcGFja2V0IChvcmlnaW5hdG9yICVwTSwgc2Vxbm8gJWQsIFRRICVkLCBUVEwgJWQsIgogCQkJIiBJREYgJXMpIG9uIGludGVyZmFjZSAlcyBbJXNdXG4iLAogCQkJZndkX3N0ciwgKHBhY2tldF9udW0gPiAwID8gImFnZ3JlZ2F0ZWQgIiA6ICIiKSwKLQkJCWJhdG1hbl9wYWNrZXQtPm9yaWcsIG50b2hzKGJhdG1hbl9wYWNrZXQtPnNlcW5vKSwKKwkJCWJhdG1hbl9wYWNrZXQtPm9yaWcsIG50b2hsKGJhdG1hbl9wYWNrZXQtPnNlcW5vKSwKIAkJCWJhdG1hbl9wYWNrZXQtPnRxLCBiYXRtYW5fcGFja2V0LT50dGwsCiAJCQkoYmF0bWFuX3BhY2tldC0+ZmxhZ3MgJiBESVJFQ1RMSU5LID8KIAkJCSAib24iIDogIm9mZiIpLApAQCAtMTY3LDIwICsxNzQsMjIgQEAKIAogCXNlbmRfcmF3X3BhY2tldChmb3J3X3BhY2tldC0+cGFja2V0X2J1ZmYsCiAJCQlmb3J3X3BhY2tldC0+cGFja2V0X2xlbiwKLQkJCWJhdG1hbl9pZiwgYnJvYWRjYXN0QWRkcik7CisJCQliYXRtYW5faWYsIGJyb2FkY2FzdF9hZGRyKTsKIH0KIAogLyogc2VuZCBhIGJhdG1hbiBwYWNrZXQgKi8KIHN0YXRpYyB2b2lkIHNlbmRfcGFja2V0KHN0cnVjdCBmb3J3X3BhY2tldCAqZm9yd19wYWNrZXQpCiB7CisJLyogRklYTUU6IGVhY2ggYmF0bWFuX2lmIHdpbGwgYmUgYXR0YWNoZWQgdG8gYSBzb2Z0aWYgKi8KKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoc29mdF9kZXZpY2UpOwogCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZjsKIAlzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldCA9CiAJCShzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqKShmb3J3X3BhY2tldC0+cGFja2V0X2J1ZmYpOwogCXVuc2lnbmVkIGNoYXIgZGlyZWN0bGluayA9IChiYXRtYW5fcGFja2V0LT5mbGFncyAmIERJUkVDVExJTksgPyAxIDogMCk7CiAKIAlpZiAoIWZvcndfcGFja2V0LT5pZl9pbmNvbWluZykgewotCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6IEVycm9yIC0gY2FuJ3QgZm9yd2FyZCBwYWNrZXQ6ICIKLQkJICAgICAgICJpbmNvbWluZyBpZmFjZSBub3Qgc3BlY2lmaWVkXG4iKTsKKwkJcHJfZXJyKCJFcnJvciAtIGNhbid0IGZvcndhcmQgcGFja2V0OiBpbmNvbWluZyBpZmFjZSBub3QgIgorCQkgICAgICAgInNwZWNpZmllZFxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE5MywxOCArMjAyLDE4IEBACiAJICAgIChmb3J3X3BhY2tldC0+b3duICYmIChmb3J3X3BhY2tldC0+aWZfaW5jb21pbmctPmlmX251bSA+IDApKSkgewogCiAJCS8qIEZJWE1FOiB3aGF0IGFib3V0IGFnZ3JlZ2F0ZWQgcGFja2V0cyA/ICovCi0JCWJhdF9kYmcoREJHX0JBVE1BTiwKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKIAkJCSIlcyBwYWNrZXQgKG9yaWdpbmF0b3IgJXBNLCBzZXFubyAlZCwgVFRMICVkKSAiCiAJCQkib24gaW50ZXJmYWNlICVzIFslc11cbiIsCiAJCQkoZm9yd19wYWNrZXQtPm93biA/ICJTZW5kaW5nIG93biIgOiAiRm9yd2FyZGluZyIpLAotCQkJYmF0bWFuX3BhY2tldC0+b3JpZywgbnRvaHMoYmF0bWFuX3BhY2tldC0+c2Vxbm8pLAorCQkJYmF0bWFuX3BhY2tldC0+b3JpZywgbnRvaGwoYmF0bWFuX3BhY2tldC0+c2Vxbm8pLAogCQkJYmF0bWFuX3BhY2tldC0+dHRsLCBmb3J3X3BhY2tldC0+aWZfaW5jb21pbmctPmRldiwKIAkJCWZvcndfcGFja2V0LT5pZl9pbmNvbWluZy0+YWRkcl9zdHIpOwogCiAJCXNlbmRfcmF3X3BhY2tldChmb3J3X3BhY2tldC0+cGFja2V0X2J1ZmYsCiAJCQkJZm9yd19wYWNrZXQtPnBhY2tldF9sZW4sCiAJCQkJZm9yd19wYWNrZXQtPmlmX2luY29taW5nLAotCQkJCWJyb2FkY2FzdEFkZHIpOworCQkJCWJyb2FkY2FzdF9hZGRyKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjc2LDE0ICsyODUsMTQgQEAKIAliYXRtYW5fcGFja2V0ID0gKHN0cnVjdCBiYXRtYW5fcGFja2V0ICopYmF0bWFuX2lmLT5wYWNrZXRfYnVmZjsKIAogCS8qIGNoYW5nZSBzZXF1ZW5jZSBudW1iZXIgdG8gbmV0d29yayBvcmRlciAqLwotCWJhdG1hbl9wYWNrZXQtPnNlcW5vID0gaHRvbnMoKHVpbnQxNl90KWF0b21pY19yZWFkKCZiYXRtYW5faWYtPnNlcW5vKSk7CisJYmF0bWFuX3BhY2tldC0+c2Vxbm8gPQorCQlodG9ubCgodWludDMyX3QpYXRvbWljX3JlYWQoJmJhdG1hbl9pZi0+c2Vxbm8pKTsKIAogCWlmICh2aXNfc2VydmVyID09IFZJU19UWVBFX1NFUlZFUl9TWU5DKQotCQliYXRtYW5fcGFja2V0LT5mbGFncyA9IFZJU19TRVJWRVI7CisJCWJhdG1hbl9wYWNrZXQtPmZsYWdzIHw9IFZJU19TRVJWRVI7CiAJZWxzZQogCQliYXRtYW5fcGFja2V0LT5mbGFncyAmPSB+VklTX1NFUlZFUjsKIAotCS8qIGNvdWxkIGJlIHJlYWQgYnkgcmVjZWl2ZV9iYXRfcGFja2V0KCkgKi8KIAlhdG9taWNfaW5jKCZiYXRtYW5faWYtPnNlcW5vKTsKIAogCXNsaWRlX293bl9iY2FzdF93aW5kb3coYmF0bWFuX2lmKTsKQEAgLTMwNiw3ICszMTUsNyBAQAogCXVuc2lnbmVkIGxvbmcgc2VuZF90aW1lOwogCiAJaWYgKGJhdG1hbl9wYWNrZXQtPnR0bCA8PSAxKSB7Ci0JCWJhdF9kYmcoREJHX0JBVE1BTiwgInR0bCBleGNlZWRlZFxuIik7CisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsICJ0dGwgZXhjZWVkZWRcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0zMzUsMTMgKzM0NCwxNiBAQAogCS8qIGFwcGx5IGhvcCBwZW5hbHR5ICovCiAJYmF0bWFuX3BhY2tldC0+dHEgPSBob3BfcGVuYWx0eShiYXRtYW5fcGFja2V0LT50cSk7CiAKLQliYXRfZGJnKERCR19CQVRNQU4sICJGb3J3YXJkaW5nIHBhY2tldDogdHFfb3JpZzogJWksIHRxX2F2ZzogJWksICIKKwliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAorCQkiRm9yd2FyZGluZyBwYWNrZXQ6IHRxX29yaWc6ICVpLCB0cV9hdmc6ICVpLCAiCiAJCSJ0cV9mb3J3OiAlaSwgdHRsX29yaWc6ICVpLCB0dGxfZm9ydzogJWlcbiIsCiAJCWluX3RxLCB0cV9hdmcsIGJhdG1hbl9wYWNrZXQtPnRxLCBpbl90dGwgLSAxLAogCQliYXRtYW5fcGFja2V0LT50dGwpOwogCi0JYmF0bWFuX3BhY2tldC0+c2Vxbm8gPSBodG9ucyhiYXRtYW5fcGFja2V0LT5zZXFubyk7CisJYmF0bWFuX3BhY2tldC0+c2Vxbm8gPSBodG9ubChiYXRtYW5fcGFja2V0LT5zZXFubyk7CiAKKwkvKiBzd2l0Y2ggb2YgcHJpbWFyaWVzIGZpcnN0IGhvcCBmbGFnIHdoZW4gZm9yd2FyZGluZyAqLworCWJhdG1hbl9wYWNrZXQtPmZsYWdzICY9IH5QUklNQVJJRVNfRklSU1RfSE9QOwogCWlmIChkaXJlY3RsaW5rKQogCQliYXRtYW5fcGFja2V0LT5mbGFncyB8PSBESVJFQ1RMSU5LOwogCWVsc2UKQEAgLTM5Miw5ICs0MDQsMTIgQEAKIGludCBhZGRfYmNhc3RfcGFja2V0X3RvX2xpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgZm9yd19wYWNrZXQgKmZvcndfcGFja2V0OworCXN0cnVjdCBiY2FzdF9wYWNrZXQgKmJjYXN0X3BhY2tldDsKKwkvKiBGSVhNRTogZWFjaCBiYXRtYW5faWYgd2lsbCBiZSBhdHRhY2hlZCB0byBhIHNvZnRpZiAqLworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihzb2Z0X2RldmljZSk7CiAKIAlpZiAoIWF0b21pY19kZWNfbm90X3plcm8oJmJjYXN0X3F1ZXVlX2xlZnQpKSB7Ci0JCWJhdF9kYmcoREJHX0JBVE1BTiwgImJjYXN0IHBhY2tldCBxdWV1ZSBmdWxsXG4iKTsKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwgImJjYXN0IHBhY2tldCBxdWV1ZSBmdWxsXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC00MDcsNiArNDIyLDEwIEBACiAJaWYgKCFza2IpCiAJCWdvdG8gcGFja2V0X2ZyZWU7CiAKKwkvKiBhcyB3ZSBoYXZlIGEgY29weSBub3csIGl0IGlzIHNhZmUgdG8gZGVjcmVhc2UgdGhlIFRUTCAqLworCWJjYXN0X3BhY2tldCA9IChzdHJ1Y3QgYmNhc3RfcGFja2V0ICopc2tiLT5kYXRhOworCWJjYXN0X3BhY2tldC0+dHRsLS07CisKIAlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwogCiAJZm9yd19wYWNrZXQtPnNrYiA9IHNrYjsKQEAgLTQyNiw3ICs0NDUsNyBAQAogCXJldHVybiBORVRERVZfVFhfQlVTWTsKIH0KIAotdm9pZCBzZW5kX291dHN0YW5kaW5nX2JjYXN0X3BhY2tldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgdm9pZCBzZW5kX291dHN0YW5kaW5nX2JjYXN0X3BhY2tldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgKmRlbGF5ZWRfd29yayA9CkBAIC00NTAsNyArNDY5LDcgQEAKIAkJc2tiMSA9IHNrYl9jb3B5KGZvcndfcGFja2V0LT5za2IsIEdGUF9BVE9NSUMpOwogCQlpZiAoc2tiMSkKIAkJCXNlbmRfc2tiX3BhY2tldChza2IxLAotCQkJCWJhdG1hbl9pZiwgYnJvYWRjYXN0QWRkcik7CisJCQkJYmF0bWFuX2lmLCBicm9hZGNhc3RfYWRkcik7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogCkBAIC01MDIsMTUgKzUyMSwxOSBAQAogCiB2b2lkIHB1cmdlX291dHN0YW5kaW5nX3BhY2tldHMoc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmKQogeworCS8qIEZJWE1FOiBlYWNoIGJhdG1hbl9pZiB3aWxsIGJlIGF0dGFjaGVkIHRvIGEgc29mdGlmICovCisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KHNvZnRfZGV2aWNlKTsKIAlzdHJ1Y3QgZm9yd19wYWNrZXQgKmZvcndfcGFja2V0OwogCXN0cnVjdCBobGlzdF9ub2RlICp0bXBfbm9kZSwgKnNhZmVfdG1wX25vZGU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChiYXRtYW5faWYpCi0JCWJhdF9kYmcoREJHX0JBVE1BTiwgInB1cmdlX291dHN0YW5kaW5nX3BhY2tldHMoKTogJXNcbiIsCisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCQkicHVyZ2Vfb3V0c3RhbmRpbmdfcGFja2V0cygpOiAlc1xuIiwKIAkJCWJhdG1hbl9pZi0+ZGV2KTsKIAllbHNlCi0JCWJhdF9kYmcoREJHX0JBVE1BTiwgInB1cmdlX291dHN0YW5kaW5nX3BhY2tldHMoKVxuIik7CisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCQkicHVyZ2Vfb3V0c3RhbmRpbmdfcGFja2V0cygpXG4iKTsKIAogCS8qIGZyZWUgYmNhc3QgbGlzdCAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZmb3J3X2JjYXN0X2xpc3RfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc2VuZC5oIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc2VuZC5oCmluZGV4IGZlYWEyZmMuLmI2NGM2MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3NlbmQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zZW5kLmgKQEAgLTE5LDkgKzE5LDExIEBACiAgKgogICovCiAKKyNpZm5kZWYgX05FVF9CQVRNQU5fQURWX1NFTkRfSF8KKyNkZWZpbmUgX05FVF9CQVRNQU5fQURWX1NFTkRfSF8KKwogI2luY2x1ZGUgInR5cGVzLmgiCiAKLXZvaWQgc2VuZF9vd25fcGFja2V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIGludCBzZW5kX3NrYl9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYsCiAJCQkJdWludDhfdCAqZHN0X2FkZHIpOwpAQCAtMzQsNiArMzYsNyBAQAogCQkJICAgICB1aW50OF90IGRpcmVjdGxpbmssIGludCBobmFfYnVmZl9sZW4sCiAJCQkgICAgIHN0cnVjdCBiYXRtYW5faWYgKmlmX291dGdvaW5nKTsKIGludCAgYWRkX2JjYXN0X3BhY2tldF90b19saXN0KHN0cnVjdCBza19idWZmICpza2IpOwotdm9pZCBzZW5kX291dHN0YW5kaW5nX2JjYXN0X3BhY2tldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBzZW5kX291dHN0YW5kaW5nX2JhdF9wYWNrZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHZvaWQgcHVyZ2Vfb3V0c3RhbmRpbmdfcGFja2V0cyhzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYpOworCisjZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX1NFTkRfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3NvZnQtaW50ZXJmYWNlLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zb2Z0LWludGVyZmFjZS5jCmluZGV4IDUxYzQwYjcuLjJlYTk3ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3NvZnQtaW50ZXJmYWNlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc29mdC1pbnRlcmZhY2UuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIm1haW4uaCIKICNpbmNsdWRlICJzb2Z0LWludGVyZmFjZS5oIgogI2luY2x1ZGUgImhhcmQtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAicm91dGluZy5oIgogI2luY2x1ZGUgInNlbmQuaCIKICNpbmNsdWRlICJ0cmFuc2xhdGlvbi10YWJsZS5oIgogI2luY2x1ZGUgInR5cGVzLmgiCkBAIC0zMCwxMyArMzEsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KIAotc3RhdGljIHVpbnQxNl90IGJjYXN0X3NlcW5vID0gMTsgLyogZ2l2ZSBvd24gYmNhc3QgbWVzc2FnZXMgc2VxIG51bWJlcnMgdG8gYXZvaWQKK3N0YXRpYyB1aW50MzJfdCBiY2FzdF9zZXFubyA9IDE7IC8qIGdpdmUgb3duIGJjYXN0IG1lc3NhZ2VzIHNlcSBudW1iZXJzIHRvIGF2b2lkCiAJCQkJICAqIGJyb2FkY2FzdCBzdG9ybXMgKi8KIHN0YXRpYyBpbnQzMl90IHNrYl9wYWNrZXRzOwogc3RhdGljIGludDMyX3Qgc2tiX2JhZF9wYWNrZXRzOwogCi11bnNpZ25lZCBjaGFyIG1haW5JZkFkZHJbRVRIX0FMRU5dOwotc3RhdGljIHVuc2lnbmVkIGNoYXIgbWFpbklmQWRkcl9kZWZhdWx0W0VUSF9BTEVOXTsKK3Vuc2lnbmVkIGNoYXIgbWFpbl9pZl9hZGRyW0VUSF9BTEVOXTsKIHN0YXRpYyBpbnQgYmF0X2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCk7CiBzdGF0aWMgdm9pZCBiYXRfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKTsKQEAgLTU4LDEyICs1OCw3IEBACiAKIHZvaWQgc2V0X21haW5faWZfYWRkcih1aW50OF90ICphZGRyKQogewotCW1lbWNweShtYWluSWZBZGRyLCBhZGRyLCBFVEhfQUxFTik7Ci19Ci0KLWludCBtYWluX2lmX3dhc191cCh2b2lkKQotewotCXJldHVybiAobWVtY21wKG1haW5JZkFkZHIsIG1haW5JZkFkZHJfZGVmYXVsdCwgRVRIX0FMRU4pICE9IDAgPyAxIDogMCk7CisJbWVtY3B5KG1haW5faWZfYWRkciwgYWRkciwgRVRIX0FMRU4pOwogfQogCiBpbnQgbXlfc2tiX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKQEAgLTgzLDY5ICs3OCwyNSBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgSEFWRV9ORVRfREVWSUNFX09QUwotc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBiYXRfbmV0ZGV2X29wcyA9IHsKLQkubmRvX29wZW4gPSBpbnRlcmZhY2Vfb3BlbiwKLQkubmRvX3N0b3AgPSBpbnRlcmZhY2VfcmVsZWFzZSwKLQkubmRvX2dldF9zdGF0cyA9IGludGVyZmFjZV9zdGF0cywKLQkubmRvX3NldF9tYWNfYWRkcmVzcyA9IGludGVyZmFjZV9zZXRfbWFjX2FkZHIsCi0JLm5kb19jaGFuZ2VfbXR1ID0gaW50ZXJmYWNlX2NoYW5nZV9tdHUsCi0JLm5kb19zdGFydF94bWl0ID0gaW50ZXJmYWNlX3R4LAotCS5uZG9fdmFsaWRhdGVfYWRkciA9IGV0aF92YWxpZGF0ZV9hZGRyCi19OwotI2VuZGlmCi0KLXZvaWQgaW50ZXJmYWNlX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGJhdF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQljaGFyIGRldl9hZGRyW0VUSF9BTEVOXTsKLQotCWV0aGVyX3NldHVwKGRldik7Ci0KLSNpZmRlZiBIQVZFX05FVF9ERVZJQ0VfT1BTCi0JZGV2LT5uZXRkZXZfb3BzID0gJmJhdF9uZXRkZXZfb3BzOwotI2Vsc2UKLQlkZXYtPm9wZW4gPSBpbnRlcmZhY2Vfb3BlbjsKLQlkZXYtPnN0b3AgPSBpbnRlcmZhY2VfcmVsZWFzZTsKLQlkZXYtPmdldF9zdGF0cyA9IGludGVyZmFjZV9zdGF0czsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IGludGVyZmFjZV9zZXRfbWFjX2FkZHI7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gaW50ZXJmYWNlX2NoYW5nZV9tdHU7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpbnRlcmZhY2VfdHg7Ci0jZW5kaWYKLQlkZXYtPmRlc3RydWN0b3IgPSBmcmVlX25ldGRldjsKLQotCWRldi0+bXR1ID0gaGFyZGlmX21pbl9tdHUoKTsKLQlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IEJBVF9IRUFERVJfTEVOOyAvKiByZXNlcnZlIG1vcmUgc3BhY2UgaW4gdGhlCi0JCQkJCQkqIHNrYnVmZiBmb3Igb3VyIGhlYWRlciAqLwotCi0JLyogZ2VuZXJhdGUgcmFuZG9tIGFkZHJlc3MgKi8KLQlyYW5kb21fZXRoZXJfYWRkcihkZXZfYWRkcik7Ci0JbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGRldl9hZGRyLCBFVEhfQUxFTik7Ci0KLQlTRVRfRVRIVE9PTF9PUFMoZGV2LCAmYmF0X2V0aHRvb2xfb3BzKTsKLQotCW1lbXNldChwcml2LCAwLCBzaXplb2Yoc3RydWN0IGJhdF9wcml2KSk7Ci19Ci0KLWludCBpbnRlcmZhY2Vfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBpbnRlcmZhY2Vfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAJcmV0dXJuIDA7CiB9CiAKLWludCBpbnRlcmZhY2VfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBpbnRlcmZhY2VfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmludGVyZmFjZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICppbnRlcmZhY2Vfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYmF0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXJldHVybiAmcHJpdi0+c3RhdHM7CiB9CiAKLWludCBpbnRlcmZhY2Vfc2V0X21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApCitzdGF0aWMgaW50IGludGVyZmFjZV9zZXRfbWFjX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKIHsKIAlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOwogCkBAIC0xNjMsNyArMTE0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGludGVyZmFjZV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQorc3RhdGljIGludCBpbnRlcmZhY2VfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKIAkvKiBjaGVjayByYW5nZXMgKi8KIAlpZiAoKG5ld19tdHUgPCA2OCkgfHwgKG5ld19tdHUgPiBoYXJkaWZfbWluX210dSgpKSkKQEAgLTE3OSw2ICsxMzAsNyBAQAogCXN0cnVjdCB1bmljYXN0X3BhY2tldCAqdW5pY2FzdF9wYWNrZXQ7CiAJc3RydWN0IGJjYXN0X3BhY2tldCAqYmNhc3RfcGFja2V0OwogCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKKwlzdHJ1Y3QgbmVpZ2hfbm9kZSAqcm91dGVyOwogCXN0cnVjdCBldGhoZHIgKmV0aGhkciA9IChzdHJ1Y3QgZXRoaGRyICopc2tiLT5kYXRhOwogCXN0cnVjdCBiYXRfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmOwpAQCAtMjA1LDE2ICsxNTcsMTcgQEAKIAogCQliY2FzdF9wYWNrZXQgPSAoc3RydWN0IGJjYXN0X3BhY2tldCAqKXNrYi0+ZGF0YTsKIAkJYmNhc3RfcGFja2V0LT52ZXJzaW9uID0gQ09NUEFUX1ZFUlNJT047CisJCWJjYXN0X3BhY2tldC0+dHRsID0gVFRMOwogCiAJCS8qIGJhdG1hbiBwYWNrZXQgdHlwZTogYnJvYWRjYXN0ICovCiAJCWJjYXN0X3BhY2tldC0+cGFja2V0X3R5cGUgPSBCQVRfQkNBU1Q7CiAKIAkJLyogaHcgYWRkcmVzcyBvZiBmaXJzdCBpbnRlcmZhY2UgaXMgdGhlIG9yaWcgbWFjIGJlY2F1c2Ugb25seQogCQkgKiB0aGlzIG1hYyBpcyBrbm93biB0aHJvdWdob3V0IHRoZSBtZXNoICovCi0JCW1lbWNweShiY2FzdF9wYWNrZXQtPm9yaWcsIG1haW5JZkFkZHIsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGJjYXN0X3BhY2tldC0+b3JpZywgbWFpbl9pZl9hZGRyLCBFVEhfQUxFTik7CiAKIAkJLyogc2V0IGJyb2FkY2FzdCBzZXF1ZW5jZSBudW1iZXIgKi8KLQkJYmNhc3RfcGFja2V0LT5zZXFubyA9IGh0b25zKGJjYXN0X3NlcW5vKTsKKwkJYmNhc3RfcGFja2V0LT5zZXFubyA9IGh0b25sKGJjYXN0X3NlcW5vKTsKIAogCQkvKiBicm9hZGNhc3QgcGFja2V0LiBvbiBzdWNjZXNzLCBpbmNyZWFzZSBzZXFuby4gKi8KIAkJaWYgKGFkZF9iY2FzdF9wYWNrZXRfdG9fbGlzdChza2IpID09IE5FVERFVl9UWF9PSykKQEAgLTIzNSwzOCArMTg4LDM2IEBACiAJCWlmICghb3JpZ19ub2RlKQogCQkJb3JpZ19ub2RlID0gdHJhbnN0YWJsZV9zZWFyY2goZXRoaGRyLT5oX2Rlc3QpOwogCi0JCWlmICgob3JpZ19ub2RlKSAmJgotCQkgICAgKG9yaWdfbm9kZS0+cm91dGVyKSkgewotCQkJc3RydWN0IG5laWdoX25vZGUgKnJvdXRlciA9IG9yaWdfbm9kZS0+cm91dGVyOworCQlyb3V0ZXIgPSBmaW5kX3JvdXRlcihvcmlnX25vZGUsIE5VTEwpOwogCi0JCQlpZiAobXlfc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IHVuaWNhc3RfcGFja2V0KSkgPCAwKQotCQkJCWdvdG8gdW5sb2NrOwotCi0JCQl1bmljYXN0X3BhY2tldCA9IChzdHJ1Y3QgdW5pY2FzdF9wYWNrZXQgKilza2ItPmRhdGE7Ci0KLQkJCXVuaWNhc3RfcGFja2V0LT52ZXJzaW9uID0gQ09NUEFUX1ZFUlNJT047Ci0JCQkvKiBiYXRtYW4gcGFja2V0IHR5cGU6IHVuaWNhc3QgKi8KLQkJCXVuaWNhc3RfcGFja2V0LT5wYWNrZXRfdHlwZSA9IEJBVF9VTklDQVNUOwotCQkJLyogc2V0IHVuaWNhc3QgdHRsICovCi0JCQl1bmljYXN0X3BhY2tldC0+dHRsID0gVFRMOwotCQkJLyogY29weSB0aGUgZGVzdGluYXRpb24gZm9yIGZhc3RlciByb3V0aW5nICovCi0JCQltZW1jcHkodW5pY2FzdF9wYWNrZXQtPmRlc3QsIG9yaWdfbm9kZS0+b3JpZywgRVRIX0FMRU4pOwotCi0JCQkvKiBuZXRfZGV2IHdvbid0IGJlIGF2YWlsYWJsZSB3aGVuIG5vdCBhY3RpdmUgKi8KLQkJCWlmIChyb3V0ZXItPmlmX2luY29taW5nLT5pZl9zdGF0dXMgIT0gSUZfQUNUSVZFKQotCQkJCWdvdG8gdW5sb2NrOwotCi0JCQkvKiBkb24ndCBsb2NrIHdoaWxlIHNlbmRpbmcgdGhlIHBhY2tldHMgLi4uIHdlIHRoZXJlZm9yZQotCQkJICogY29weSB0aGUgcmVxdWlyZWQgZGF0YSBiZWZvcmUgc2VuZGluZyAqLwotCi0JCQliYXRtYW5faWYgPSByb3V0ZXItPmlmX2luY29taW5nOwotCQkJbWVtY3B5KGRzdGFkZHIsIHJvdXRlci0+YWRkciwgRVRIX0FMRU4pOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKLQotCQkJc2VuZF9za2JfcGFja2V0KHNrYiwgYmF0bWFuX2lmLCBkc3RhZGRyKTsKLQkJfSBlbHNlIHsKKwkJaWYgKCFyb3V0ZXIpCiAJCQlnb3RvIHVubG9jazsKLQkJfQorCisJCS8qIGRvbid0IGxvY2sgd2hpbGUgc2VuZGluZyB0aGUgcGFja2V0cyAuLi4gd2UgdGhlcmVmb3JlCisJCSAqIGNvcHkgdGhlIHJlcXVpcmVkIGRhdGEgYmVmb3JlIHNlbmRpbmcgKi8KKworCQliYXRtYW5faWYgPSByb3V0ZXItPmlmX2luY29taW5nOworCQltZW1jcHkoZHN0YWRkciwgcm91dGVyLT5hZGRyLCBFVEhfQUxFTik7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKKworCQlpZiAoYmF0bWFuX2lmLT5pZl9zdGF0dXMgIT0gSUZfQUNUSVZFKQorCQkJZ290byBkcm9wcGVkOworCisJCWlmIChteV9za2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgdW5pY2FzdF9wYWNrZXQpKSA8IDApCisJCQlnb3RvIGRyb3BwZWQ7CisKKwkJdW5pY2FzdF9wYWNrZXQgPSAoc3RydWN0IHVuaWNhc3RfcGFja2V0ICopc2tiLT5kYXRhOworCisJCXVuaWNhc3RfcGFja2V0LT52ZXJzaW9uID0gQ09NUEFUX1ZFUlNJT047CisJCS8qIGJhdG1hbiBwYWNrZXQgdHlwZTogdW5pY2FzdCAqLworCQl1bmljYXN0X3BhY2tldC0+cGFja2V0X3R5cGUgPSBCQVRfVU5JQ0FTVDsKKwkJLyogc2V0IHVuaWNhc3QgdHRsICovCisJCXVuaWNhc3RfcGFja2V0LT50dGwgPSBUVEw7CisJCS8qIGNvcHkgdGhlIGRlc3RpbmF0aW9uIGZvciBmYXN0ZXIgcm91dGluZyAqLworCQltZW1jcHkodW5pY2FzdF9wYWNrZXQtPmRlc3QsIG9yaWdfbm9kZS0+b3JpZywgRVRIX0FMRU4pOworCisJCXNlbmRfc2tiX3BhY2tldChza2IsIGJhdG1hbl9pZiwgZHN0YWRkcik7CiAJfQogCiAJcHJpdi0+c3RhdHMudHhfcGFja2V0cysrOwpAQCAtMzE1LDYgKzI2Niw1MCBAQAogCW5ldGlmX3J4KHNrYik7CiB9CiAKKyNpZmRlZiBIQVZFX05FVF9ERVZJQ0VfT1BTCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJhdF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiA9IGludGVyZmFjZV9vcGVuLAorCS5uZG9fc3RvcCA9IGludGVyZmFjZV9yZWxlYXNlLAorCS5uZG9fZ2V0X3N0YXRzID0gaW50ZXJmYWNlX3N0YXRzLAorCS5uZG9fc2V0X21hY19hZGRyZXNzID0gaW50ZXJmYWNlX3NldF9tYWNfYWRkciwKKwkubmRvX2NoYW5nZV9tdHUgPSBpbnRlcmZhY2VfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBpbnRlcmZhY2VfdHgsCisJLm5kb192YWxpZGF0ZV9hZGRyID0gZXRoX3ZhbGlkYXRlX2FkZHIKK307CisjZW5kaWYKKwordm9pZCBpbnRlcmZhY2Vfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYmF0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWNoYXIgZGV2X2FkZHJbRVRIX0FMRU5dOworCisJZXRoZXJfc2V0dXAoZGV2KTsKKworI2lmZGVmIEhBVkVfTkVUX0RFVklDRV9PUFMKKwlkZXYtPm5ldGRldl9vcHMgPSAmYmF0X25ldGRldl9vcHM7CisjZWxzZQorCWRldi0+b3BlbiA9IGludGVyZmFjZV9vcGVuOworCWRldi0+c3RvcCA9IGludGVyZmFjZV9yZWxlYXNlOworCWRldi0+Z2V0X3N0YXRzID0gaW50ZXJmYWNlX3N0YXRzOworCWRldi0+c2V0X21hY19hZGRyZXNzID0gaW50ZXJmYWNlX3NldF9tYWNfYWRkcjsKKwlkZXYtPmNoYW5nZV9tdHUgPSBpbnRlcmZhY2VfY2hhbmdlX210dTsKKwlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGludGVyZmFjZV90eDsKKyNlbmRpZgorCWRldi0+ZGVzdHJ1Y3RvciA9IGZyZWVfbmV0ZGV2OworCisJZGV2LT5tdHUgPSBoYXJkaWZfbWluX210dSgpOworCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gQkFUX0hFQURFUl9MRU47IC8qIHJlc2VydmUgbW9yZSBzcGFjZSBpbiB0aGUKKwkJCQkJCSogc2tidWZmIGZvciBvdXIgaGVhZGVyICovCisKKwkvKiBnZW5lcmF0ZSByYW5kb20gYWRkcmVzcyAqLworCXJhbmRvbV9ldGhlcl9hZGRyKGRldl9hZGRyKTsKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgZGV2X2FkZHIsIEVUSF9BTEVOKTsKKworCVNFVF9FVEhUT09MX09QUyhkZXYsICZiYXRfZXRodG9vbF9vcHMpOworCisJbWVtc2V0KHByaXYsIDAsIHNpemVvZihzdHJ1Y3QgYmF0X3ByaXYpKTsKK30KKwogLyogZXRodG9vbCAqLwogc3RhdGljIGludCBiYXRfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc29mdC1pbnRlcmZhY2UuaCBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3NvZnQtaW50ZXJmYWNlLmgKaW5kZXggZTdmNTlhZi4uNjM2NDg1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc29mdC1pbnRlcmZhY2UuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zb2Z0LWludGVyZmFjZS5oCkBAIC0xOSwxNiArMTksMTUgQEAKICAqCiAgKi8KIAorI2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfU09GVF9JTlRFUkZBQ0VfSF8KKyNkZWZpbmUgX05FVF9CQVRNQU5fQURWX1NPRlRfSU5URVJGQUNFX0hfCisKIHZvaWQgc2V0X21haW5faWZfYWRkcih1aW50OF90ICphZGRyKTsKLWludCBtYWluX2lmX3dhc191cCh2b2lkKTsKIHZvaWQgaW50ZXJmYWNlX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotaW50IGludGVyZmFjZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotaW50IGludGVyZmFjZV9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmludGVyZmFjZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLWludCBpbnRlcmZhY2Vfc2V0X21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpOwotaW50IGludGVyZmFjZV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KTsKIGludCBpbnRlcmZhY2VfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiB2b2lkIGludGVyZmFjZV9yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGRyX3NpemUpOwogaW50IG15X3NrYl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pOwogCi1leHRlcm4gdW5zaWduZWQgY2hhciBtYWluSWZBZGRyW107CitleHRlcm4gdW5zaWduZWQgY2hhciBtYWluX2lmX2FkZHJbXTsKKworI2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9TT0ZUX0lOVEVSRkFDRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc3lzZnMtY2xhc3MtbmV0LWJhdG1hbi1hZHYgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zeXNmcy1jbGFzcy1uZXQtYmF0bWFuLWFkdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGRkNzYyZGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zeXNmcy1jbGFzcy1uZXQtYmF0bWFuLWFkdgpAQCAtMCwwICsxLDE0IEBACisKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL25ldC88aWZhY2U+L2JhdG1hbi1hZHYvbWVzaF9pZmFjZQorRGF0ZTogICAgICAgICAgIE1heSAyMDEwCitDb250YWN0OiAgICAgICAgTWFyZWsgTGluZG5lciA8bGluZG5lcl9tYXJla0B5YWhvby5kZT4KK0Rlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIFRoZSAvc3lzL2NsYXNzL25ldC88aWZhY2U+L2JhdG1hbi1hZHYvbWVzaF9pZmFjZSBmaWxlCisgICAgICAgICAgICAgICAgZGlzcGxheXMgdGhlIGJhdG1hbiBtZXNoIGludGVyZmFjZSB0aGlzIDxpZmFjZT4KKyAgICAgICAgICAgICAgICBjdXJyZW50bHkgaXMgYXNzb2NpYXRlZCB3aXRoLgorCitXaGF0OiAgICAgICAgICAgL3N5cy9jbGFzcy9uZXQvPGlmYWNlPi9iYXRtYW4tYWR2L2lmYWNlX3N0YXR1cworRGF0ZTogICAgICAgICAgIE1heSAyMDEwCitDb250YWN0OiAgICAgICAgTWFyZWsgTGluZG5lciA8bGluZG5lcl9tYXJla0B5YWhvby5kZT4KK0Rlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIEluZGljYXRlcyB0aGUgc3RhdHVzIG9mIDxpZmFjZT4gYXMgaXQgaXMgc2VlbiBieSBiYXRtYW4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zeXNmcy1jbGFzcy1uZXQtbWVzaCBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3N5c2ZzLWNsYXNzLW5ldC1tZXNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYTE5MTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zeXNmcy1jbGFzcy1uZXQtbWVzaApAQCAtMCwwICsxLDMzIEBACisKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL25ldC88bWVzaF9pZmFjZT4vbWVzaC9hZ2dyZWdhdGVkX29nbXMKK0RhdGU6ICAgICAgICAgICBNYXkgMjAxMAorQ29udGFjdDogICAgICAgIE1hcmVrIExpbmRuZXIgPGxpbmRuZXJfbWFyZWtAeWFob28uZGU+CitEZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICBJbmRpY2F0ZXMgd2hldGhlciB0aGUgYmF0bWFuIHByb3RvY29sIG1lc3NhZ2VzIG9mIHRoZQorICAgICAgICAgICAgICAgIG1lc2ggPG1lc2hfaWZhY2U+IHNoYWxsIGJlIGFnZ3JlZ2F0ZWQgb3Igbm90LgorCitXaGF0OiAgICAgICAgICAgL3N5cy9jbGFzcy9uZXQvPG1lc2hfaWZhY2U+L21lc2gvYm9uZGluZworRGF0ZTogICAgICAgICAgIEp1bmUgMjAxMAorQ29udGFjdDogICAgICAgIFNpbW9uIFd1bmRlcmxpY2ggPHNpd3VAaHJ6LnR1LWNoZW1uaXR6LmRlPgorRGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRhdGEgdHJhZmZpYyBnb2luZyB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgIG1lc2ggd2lsbCBiZSBzZW50IHVzaW5nIG11bHRpcGxlIGludGVyZmFjZXMgYXQgdGhlCisgICAgICAgICAgICAgICAgc2FtZSB0aW1lIChpZiBhdmFpbGFibGUpLgorCitXaGF0OiAgICAgICAgICAgL3N5cy9jbGFzcy9uZXQvPG1lc2hfaWZhY2U+L21lc2gvb3JpZ19pbnRlcnZhbAorRGF0ZTogICAgICAgICAgIE1heSAyMDEwCitDb250YWN0OiAgICAgICAgTWFyZWsgTGluZG5lciA8bGluZG5lcl9tYXJla0B5YWhvby5kZT4KK0Rlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIERlZmluZXMgdGhlIGludGVydmFsIGluIG1pbGxpc2Vjb25kcyBpbiB3aGljaCBiYXRtYW4KKyAgICAgICAgICAgICAgICBzZW5kcyBpdHMgcHJvdG9jb2wgbWVzc2FnZXMuCisKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL25ldC88bWVzaF9pZmFjZT4vbWVzaC92aXNfbW9kZQorRGF0ZTogICAgICAgICAgIE1heSAyMDEwCitDb250YWN0OiAgICAgICAgTWFyZWsgTGluZG5lciA8bGluZG5lcl9tYXJla0B5YWhvby5kZT4KK0Rlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIEVhY2ggYmF0bWFuIG5vZGUgb25seSBtYWludGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgaXRzCisgICAgICAgICAgICAgICAgb3duIGxvY2FsIG5laWdoYm9yaG9vZCwgdGhlcmVmb3JlIGdlbmVyYXRpbmcgZ3JhcGhzCisgICAgICAgICAgICAgICAgc2hvd2luZyB0aGUgdG9wb2xvZ3kgb2YgdGhlIGVudGlyZSBtZXNoIGlzIG5vdCBlYXNpbHkKKyAgICAgICAgICAgICAgICBmZWFzaWJsZSB3aXRob3V0IGhhdmluZyBhIGNlbnRyYWwgaW5zdGFuY2UgdG8gY29sbGVjdAorICAgICAgICAgICAgICAgIHRoZSBsb2NhbCB0b3BvbG9naWVzIGZyb20gYWxsIG5vZGVzLiBUaGlzIGZpbGUgYWxsb3dzCisgICAgICAgICAgICAgICAgdG8gYWN0aXZhdGUgdGhlIGNvbGxlY3RpbmcgKHNlcnZlcikgbW9kZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jCmluZGV4IGUwMWZmMjEuLmIyMzMzNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYwpAQCAtMzIsNyArMzIsMTAgQEAKIERFRklORV9TUElOTE9DSyhobmFfbG9jYWxfaGFzaF9sb2NrKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaG5hX2dsb2JhbF9oYXNoX2xvY2spOwogCitzdGF0aWMgdm9pZCBobmFfbG9jYWxfcHVyZ2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHN0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyhobmFfbG9jYWxfcHVyZ2Vfd3EsIGhuYV9sb2NhbF9wdXJnZSk7CitzdGF0aWMgdm9pZCBfaG5hX2dsb2JhbF9kZWxfb3JpZyhzdHJ1Y3QgaG5hX2dsb2JhbF9lbnRyeSAqaG5hX2dsb2JhbF9lbnRyeSwKKwkJCQkgY2hhciAqbWVzc2FnZSk7CiAKIHN0YXRpYyB2b2lkIGhuYV9sb2NhbF9zdGFydF90aW1lcih2b2lkKQogewpAQCAtNTcsNiArNjAsOCBAQAogCiB2b2lkIGhuYV9sb2NhbF9hZGQodWludDhfdCAqYWRkcikKIHsKKwkvKiBGSVhNRTogZWFjaCBvcmlnX25vZGUtPmJhdG1hbl9pZiB3aWxsIGJlIGF0dGFjaGVkIHRvIGEgc29mdGlmICovCisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KHNvZnRfZGV2aWNlKTsKIAlzdHJ1Y3QgaG5hX2xvY2FsX2VudHJ5ICpobmFfbG9jYWxfZW50cnk7CiAJc3RydWN0IGhuYV9nbG9iYWxfZW50cnkgKmhuYV9nbG9iYWxfZW50cnk7CiAJc3RydWN0IGhhc2h0YWJsZV90ICpzd2FwaGFzaDsKQEAgLTc3LDE1ICs4MiwxNSBAQAogCSAgIE1BQy1mbG9vZGluZy4gKi8KIAlpZiAoKG51bV9obmEgKyAxID4gKEVUSF9EQVRBX0xFTiAtIEJBVF9QQUNLRVRfTEVOKSAvIEVUSF9BTEVOKSB8fAogCSAgICAobnVtX2huYSArIDEgPiAyNTUpKSB7Ci0JCWJhdF9kYmcoREJHX1JPVVRFUywKKwkJYmF0X2RiZyhEQkdfUk9VVEVTLCBiYXRfcHJpdiwKIAkJCSJDYW4ndCBhZGQgbmV3IGxvY2FsIGhuYSBlbnRyeSAoJXBNKTogIgogCQkJIm51bWJlciBvZiBsb2NhbCBobmEgZW50cmllcyBleGNlZWRzIHBhY2tldCBzaXplXG4iLAogCQkJYWRkcik7CiAJCXJldHVybjsKIAl9CiAKLQliYXRfZGJnKERCR19ST1VURVMsICJDcmVhdGluZyBuZXcgbG9jYWwgaG5hIGVudHJ5OiAlcE1cbiIsCi0JCWFkZHIpOworCWJhdF9kYmcoREJHX1JPVVRFUywgYmF0X3ByaXYsCisJCSJDcmVhdGluZyBuZXcgbG9jYWwgaG5hIGVudHJ5OiAlcE1cbiIsIGFkZHIpOwogCiAJaG5hX2xvY2FsX2VudHJ5ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhuYV9sb2NhbF9lbnRyeSksIEdGUF9BVE9NSUMpOwogCWlmICghaG5hX2xvY2FsX2VudHJ5KQpAQCAtMTExLDggKzExNiw3IEBACiAJCQkJICAgICAgIGhuYV9sb2NhbF9oYXNoLT5zaXplICogMik7CiAKIAkJaWYgKHN3YXBoYXNoID09IE5VTEwpCi0JCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6IgotCQkJICAgICAgICJDb3VsZG4ndCByZXNpemUgbG9jYWwgaG5hIGhhc2ggdGFibGVcbiIpOworCQkJcHJfZXJyKCJDb3VsZG4ndCByZXNpemUgbG9jYWwgaG5hIGhhc2ggdGFibGVcbiIpOwogCQllbHNlCiAJCQlobmFfbG9jYWxfaGFzaCA9IHN3YXBoYXNoOwogCX0KQEAgLTE2MCw1OSArMTY0LDU0IEBACiAJcmV0dXJuIGk7CiB9CiAKLWludCBobmFfbG9jYWxfZmlsbF9idWZmZXJfdGV4dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwgY2hhciAqYnVmZiwKLQkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCBvZmYpCitpbnQgaG5hX2xvY2FsX3NlcV9wcmludF90ZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCiB7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilzZXEtPnByaXZhdGU7CiAJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwogCXN0cnVjdCBobmFfbG9jYWxfZW50cnkgKmhuYV9sb2NhbF9lbnRyeTsKIAlIQVNISVQoaGFzaGl0KTsKLQlpbnQgYnl0ZXNfd3JpdHRlbiA9IDA7CisJSEFTSElUKGhhc2hpdF9jb3VudCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzaXplX3QgaGRyX2xlbjsKKwlzaXplX3QgYnVmX3NpemUsIHBvczsKKwljaGFyICpidWZmOwogCiAJaWYgKCFiYXRfcHJpdi0+cHJpbWFyeV9pZikgewotCQlpZiAob2ZmID09IDApCi0JCQlyZXR1cm4gc3ByaW50ZihidWZmLAotCQkJCSAgICAgIkJBVE1BTiBtZXNoICVzIGRpc2FibGVkIC0gIgotCQkJCSAgICAgInBsZWFzZSBzcGVjaWZ5IGludGVyZmFjZXMgdG8gZW5hYmxlIGl0XG4iLAotCQkJCSAgICAgbmV0X2Rldi0+bmFtZSk7Ci0KLQkJcmV0dXJuIDA7CisJCXJldHVybiBzZXFfcHJpbnRmKHNlcSwgIkJBVE1BTiBtZXNoICVzIGRpc2FibGVkIC0gIgorCQkJICAgICAgICJwbGVhc2Ugc3BlY2lmeSBpbnRlcmZhY2VzIHRvIGVuYWJsZSBpdFxuIiwKKwkJCSAgICAgICBuZXRfZGV2LT5uYW1lKTsKIAl9CiAKLQloZHJfbGVuID0gc3ByaW50ZihidWZmLAotCQkJICAiTG9jYWxseSByZXRyaWV2ZWQgYWRkcmVzc2VzIChmcm9tICVzKSAiCi0JCQkgICJhbm5vdW5jZWQgdmlhIEhOQTpcbiIsCi0JCQkgIG5ldF9kZXYtPm5hbWUpOwotCi0JaWYgKG9mZiA8IGhkcl9sZW4pCi0JCWJ5dGVzX3dyaXR0ZW4gPSBoZHJfbGVuOworCXNlcV9wcmludGYoc2VxLCAiTG9jYWxseSByZXRyaWV2ZWQgYWRkcmVzc2VzIChmcm9tICVzKSAiCisJCSAgICJhbm5vdW5jZWQgdmlhIEhOQTpcbiIsCisJCSAgIG5ldF9kZXYtPm5hbWUpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhuYV9sb2NhbF9oYXNoX2xvY2ssIGZsYWdzKTsKIAorCWJ1Zl9zaXplID0gMTsKKwkvKiBFc3RpbWF0ZSBsZW5ndGggZm9yOiAiICogeHg6eHg6eHg6eHg6eHg6eHhcbiIgKi8KKwl3aGlsZSAoaGFzaF9pdGVyYXRlKGhuYV9sb2NhbF9oYXNoLCAmaGFzaGl0X2NvdW50KSkKKwkJYnVmX3NpemUgKz0gMjE7CisKKwlidWZmID0ga21hbGxvYyhidWZfc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKCFidWZmKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhuYV9sb2NhbF9oYXNoX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWJ1ZmZbMF0gPSAnXDAnOworCXBvcyA9IDA7CisKIAl3aGlsZSAoaGFzaF9pdGVyYXRlKGhuYV9sb2NhbF9oYXNoLCAmaGFzaGl0KSkgewotCQloZHJfbGVuICs9IDIxOwotCi0JCWlmIChjb3VudCA8IGJ5dGVzX3dyaXR0ZW4gKyAyMikKLQkJCWJyZWFrOwotCi0JCWlmIChvZmYgPj0gaGRyX2xlbikKLQkJCWNvbnRpbnVlOwotCiAJCWhuYV9sb2NhbF9lbnRyeSA9IGhhc2hpdC5idWNrZXQtPmRhdGE7CiAKLQkJYnl0ZXNfd3JpdHRlbiArPSBzbnByaW50ZihidWZmICsgYnl0ZXNfd3JpdHRlbiwgMjIsCi0JCQkJCSAgIiAqICIgTUFDX0ZNVCAiXG4iLAotCQkJCQkgIGhuYV9sb2NhbF9lbnRyeS0+YWRkclswXSwKLQkJCQkJICBobmFfbG9jYWxfZW50cnktPmFkZHJbMV0sCi0JCQkJCSAgaG5hX2xvY2FsX2VudHJ5LT5hZGRyWzJdLAotCQkJCQkgIGhuYV9sb2NhbF9lbnRyeS0+YWRkclszXSwKLQkJCQkJICBobmFfbG9jYWxfZW50cnktPmFkZHJbNF0sCi0JCQkJCSAgaG5hX2xvY2FsX2VudHJ5LT5hZGRyWzVdKTsKKwkJcG9zICs9IHNucHJpbnRmKGJ1ZmYgKyBwb3MsIDIyLCAiICogJXBNXG4iLAorCQkJCWhuYV9sb2NhbF9lbnRyeS0+YWRkcik7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG5hX2xvY2FsX2hhc2hfbG9jaywgZmxhZ3MpOwotCXJldHVybiBieXRlc193cml0dGVuOworCisJc2VxX3ByaW50ZihzZXEsICIlcyIsIGJ1ZmYpOworCWtmcmVlKGJ1ZmYpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfaG5hX2xvY2FsX2RlbCh2b2lkICpkYXRhKQpAQCAtMjI1LDcgKzIyNCw5IEBACiBzdGF0aWMgdm9pZCBobmFfbG9jYWxfZGVsKHN0cnVjdCBobmFfbG9jYWxfZW50cnkgKmhuYV9sb2NhbF9lbnRyeSwKIAkJCSAgY2hhciAqbWVzc2FnZSkKIHsKLQliYXRfZGJnKERCR19ST1VURVMsICJEZWxldGluZyBsb2NhbCBobmEgZW50cnkgKCVwTSk6ICVzXG4iLAorCS8qIEZJWE1FOiBlYWNoIG9yaWdfbm9kZS0+YmF0bWFuX2lmIHdpbGwgYmUgYXR0YWNoZWQgdG8gYSBzb2Z0aWYgKi8KKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoc29mdF9kZXZpY2UpOworCWJhdF9kYmcoREJHX1JPVVRFUywgYmF0X3ByaXYsICJEZWxldGluZyBsb2NhbCBobmEgZW50cnkgKCVwTSk6ICVzXG4iLAogCQlobmFfbG9jYWxfZW50cnktPmFkZHIsIG1lc3NhZ2UpOwogCiAJaGFzaF9yZW1vdmUoaG5hX2xvY2FsX2hhc2gsIGhuYV9sb2NhbF9lbnRyeS0+YWRkcik7CkBAIC0yNDcsNyArMjQ4LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZobmFfbG9jYWxfaGFzaF9sb2NrLCBmbGFncyk7CiB9CiAKLXZvaWQgaG5hX2xvY2FsX3B1cmdlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyB2b2lkIGhuYV9sb2NhbF9wdXJnZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGhuYV9sb2NhbF9lbnRyeSAqaG5hX2xvY2FsX2VudHJ5OwogCUhBU0hJVChoYXNoaXQpOwpAQCAtMjU5LDggKzI2MCw3IEBACiAJd2hpbGUgKGhhc2hfaXRlcmF0ZShobmFfbG9jYWxfaGFzaCwgJmhhc2hpdCkpIHsKIAkJaG5hX2xvY2FsX2VudHJ5ID0gaGFzaGl0LmJ1Y2tldC0+ZGF0YTsKIAotCQl0aW1lb3V0ID0gaG5hX2xvY2FsX2VudHJ5LT5sYXN0X3NlZW4gKwotCQkJKChMT0NBTF9ITkFfVElNRU9VVCAvIDEwMDApICogSFopOworCQl0aW1lb3V0ID0gaG5hX2xvY2FsX2VudHJ5LT5sYXN0X3NlZW4gKyBMT0NBTF9ITkFfVElNRU9VVCAqIEhaOwogCQlpZiAoKCFobmFfbG9jYWxfZW50cnktPm5ldmVyX3B1cmdlKSAmJgogCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKIAkJCWhuYV9sb2NhbF9kZWwoaG5hX2xvY2FsX2VudHJ5LCAiYWRkcmVzcyB0aW1lZCBvdXQiKTsKQEAgLTI5Niw2ICsyOTYsOCBAQAogdm9pZCBobmFfZ2xvYmFsX2FkZF9vcmlnKHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwKIAkJCSB1bnNpZ25lZCBjaGFyICpobmFfYnVmZiwgaW50IGhuYV9idWZmX2xlbikKIHsKKwkvKiBGSVhNRTogZWFjaCBvcmlnX25vZGUtPmJhdG1hbl9pZiB3aWxsIGJlIGF0dGFjaGVkIHRvIGEgc29mdGlmICovCisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KHNvZnRfZGV2aWNlKTsKIAlzdHJ1Y3QgaG5hX2dsb2JhbF9lbnRyeSAqaG5hX2dsb2JhbF9lbnRyeTsKIAlzdHJ1Y3QgaG5hX2xvY2FsX2VudHJ5ICpobmFfbG9jYWxfZW50cnk7CiAJc3RydWN0IGhhc2h0YWJsZV90ICpzd2FwaGFzaDsKQEAgLTMyMiw3ICszMjQsNyBAQAogCiAJCQltZW1jcHkoaG5hX2dsb2JhbF9lbnRyeS0+YWRkciwgaG5hX3B0ciwgRVRIX0FMRU4pOwogCi0JCQliYXRfZGJnKERCR19ST1VURVMsCisJCQliYXRfZGJnKERCR19ST1VURVMsIGJhdF9wcml2LAogCQkJCSJDcmVhdGluZyBuZXcgZ2xvYmFsIGhuYSBlbnRyeTogIgogCQkJCSIlcE0gKHZpYSAlcE0pXG4iLAogCQkJCWhuYV9nbG9iYWxfZW50cnktPmFkZHIsIG9yaWdfbm9kZS0+b3JpZyk7CkBAIC0zNjksOCArMzcxLDcgQEAKIAkJCQkgICAgICAgaG5hX2dsb2JhbF9oYXNoLT5zaXplICogMik7CiAKIAkJaWYgKHN3YXBoYXNoID09IE5VTEwpCi0JCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6IgotCQkJICAgICAgICJDb3VsZG4ndCByZXNpemUgZ2xvYmFsIGhuYSBoYXNoIHRhYmxlXG4iKTsKKwkJCXByX2VycigiQ291bGRuJ3QgcmVzaXplIGdsb2JhbCBobmEgaGFzaCB0YWJsZVxuIik7CiAJCWVsc2UKIAkJCWhuYV9nbG9iYWxfaGFzaCA9IHN3YXBoYXNoOwogCX0KQEAgLTM3OCw3MSArMzc5LDYzIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG5hX2dsb2JhbF9oYXNoX2xvY2ssIGZsYWdzKTsKIH0KIAotaW50IGhuYV9nbG9iYWxfZmlsbF9idWZmZXJfdGV4dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwgY2hhciAqYnVmZiwKLQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCBvZmYpCitpbnQgaG5hX2dsb2JhbF9zZXFfcHJpbnRfdGV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogeworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopc2VxLT5wcml2YXRlOwogCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKIAlzdHJ1Y3QgaG5hX2dsb2JhbF9lbnRyeSAqaG5hX2dsb2JhbF9lbnRyeTsKIAlIQVNISVQoaGFzaGl0KTsKLQlpbnQgYnl0ZXNfd3JpdHRlbiA9IDA7CisJSEFTSElUKGhhc2hpdF9jb3VudCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzaXplX3QgaGRyX2xlbjsKKwlzaXplX3QgYnVmX3NpemUsIHBvczsKKwljaGFyICpidWZmOwogCiAJaWYgKCFiYXRfcHJpdi0+cHJpbWFyeV9pZikgewotCQlpZiAob2ZmID09IDApCi0JCQlyZXR1cm4gc3ByaW50ZihidWZmLAotCQkJCSAgICAgIkJBVE1BTiBtZXNoICVzIGRpc2FibGVkIC0gIgotCQkJCSAgICAgInBsZWFzZSBzcGVjaWZ5IGludGVyZmFjZXMgdG8gZW5hYmxlIGl0XG4iLAotCQkJCSAgICAgbmV0X2Rldi0+bmFtZSk7Ci0KLQkJcmV0dXJuIDA7CisJCXJldHVybiBzZXFfcHJpbnRmKHNlcSwgIkJBVE1BTiBtZXNoICVzIGRpc2FibGVkIC0gIgorCQkJCSAgInBsZWFzZSBzcGVjaWZ5IGludGVyZmFjZXMgdG8gZW5hYmxlIGl0XG4iLAorCQkJCSAgbmV0X2Rldi0+bmFtZSk7CiAJfQogCi0JaGRyX2xlbiA9IHNwcmludGYoYnVmZiwKLQkJCSAgIkdsb2JhbGx5IGFubm91bmNlZCBITkFzIHJlY2VpdmVkIHZpYSB0aGUgbWVzaCAlcyAiCi0JCQkgICIodHJhbnNsYXRpb24gdGFibGUpOlxuIiwKLQkJCSAgbmV0X2Rldi0+bmFtZSk7Ci0KLQlpZiAob2ZmIDwgaGRyX2xlbikKLQkJYnl0ZXNfd3JpdHRlbiA9IGhkcl9sZW47CisJc2VxX3ByaW50ZihzZXEsICJHbG9iYWxseSBhbm5vdW5jZWQgSE5BcyByZWNlaXZlZCB2aWEgdGhlIG1lc2ggJXNcbiIsCisJCSAgIG5ldF9kZXYtPm5hbWUpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhuYV9nbG9iYWxfaGFzaF9sb2NrLCBmbGFncyk7CiAKKwlidWZfc2l6ZSA9IDE7CisJLyogRXN0aW1hdGUgbGVuZ3RoIGZvcjogIiAqIHh4Onh4Onh4Onh4Onh4Onh4IHZpYSB4eDp4eDp4eDp4eDp4eDp4eFxuIiovCisJd2hpbGUgKGhhc2hfaXRlcmF0ZShobmFfZ2xvYmFsX2hhc2gsICZoYXNoaXRfY291bnQpKQorCQlidWZfc2l6ZSArPSA0MzsKKworCWJ1ZmYgPSBrbWFsbG9jKGJ1Zl9zaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWJ1ZmYpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG5hX2dsb2JhbF9oYXNoX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWJ1ZmZbMF0gPSAnXDAnOworCXBvcyA9IDA7CisKIAl3aGlsZSAoaGFzaF9pdGVyYXRlKGhuYV9nbG9iYWxfaGFzaCwgJmhhc2hpdCkpIHsKLQkJaGRyX2xlbiArPSA0MzsKLQotCQlpZiAoY291bnQgPCBieXRlc193cml0dGVuICsgNDQpCi0JCQlicmVhazsKLQotCQlpZiAob2ZmID49IGhkcl9sZW4pCi0JCQljb250aW51ZTsKLQogCQlobmFfZ2xvYmFsX2VudHJ5ID0gaGFzaGl0LmJ1Y2tldC0+ZGF0YTsKIAotCQlieXRlc193cml0dGVuICs9IHNucHJpbnRmKGJ1ZmYgKyBieXRlc193cml0dGVuLCA0NCwKLQkJCQkJICAiICogIiBNQUNfRk1UICIgdmlhICIgTUFDX0ZNVCAiXG4iLAotCQkJCQkgIGhuYV9nbG9iYWxfZW50cnktPmFkZHJbMF0sCi0JCQkJCSAgaG5hX2dsb2JhbF9lbnRyeS0+YWRkclsxXSwKLQkJCQkJICBobmFfZ2xvYmFsX2VudHJ5LT5hZGRyWzJdLAotCQkJCQkgIGhuYV9nbG9iYWxfZW50cnktPmFkZHJbM10sCi0JCQkJCSAgaG5hX2dsb2JhbF9lbnRyeS0+YWRkcls0XSwKLQkJCQkJICBobmFfZ2xvYmFsX2VudHJ5LT5hZGRyWzVdLAotCQkJCQkgIGhuYV9nbG9iYWxfZW50cnktPm9yaWdfbm9kZS0+b3JpZ1swXSwKLQkJCQkJICBobmFfZ2xvYmFsX2VudHJ5LT5vcmlnX25vZGUtPm9yaWdbMV0sCi0JCQkJCSAgaG5hX2dsb2JhbF9lbnRyeS0+b3JpZ19ub2RlLT5vcmlnWzJdLAotCQkJCQkgIGhuYV9nbG9iYWxfZW50cnktPm9yaWdfbm9kZS0+b3JpZ1szXSwKLQkJCQkJICBobmFfZ2xvYmFsX2VudHJ5LT5vcmlnX25vZGUtPm9yaWdbNF0sCi0JCQkJCSAgaG5hX2dsb2JhbF9lbnRyeS0+b3JpZ19ub2RlLT5vcmlnWzVdKTsKKwkJcG9zICs9IHNucHJpbnRmKGJ1ZmYgKyBwb3MsIDQ0LAorCQkJCSIgKiAlcE0gdmlhICVwTVxuIiwgaG5hX2dsb2JhbF9lbnRyeS0+YWRkciwKKwkJCQlobmFfZ2xvYmFsX2VudHJ5LT5vcmlnX25vZGUtPm9yaWcpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhuYV9nbG9iYWxfaGFzaF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIGJ5dGVzX3dyaXR0ZW47CisKKwlzZXFfcHJpbnRmKHNlcSwgIiVzIiwgYnVmZik7CisJa2ZyZWUoYnVmZik7CisJcmV0dXJuIDA7CiB9CiAKLXZvaWQgX2huYV9nbG9iYWxfZGVsX29yaWcoc3RydWN0IGhuYV9nbG9iYWxfZW50cnkgKmhuYV9nbG9iYWxfZW50cnksCi0JCQkgIGNoYXIgKm1lc3NhZ2UpCitzdGF0aWMgdm9pZCBfaG5hX2dsb2JhbF9kZWxfb3JpZyhzdHJ1Y3QgaG5hX2dsb2JhbF9lbnRyeSAqaG5hX2dsb2JhbF9lbnRyeSwKKwkJCQkgY2hhciAqbWVzc2FnZSkKIHsKLQliYXRfZGJnKERCR19ST1VURVMsICJEZWxldGluZyBnbG9iYWwgaG5hIGVudHJ5ICVwTSAodmlhICVwTSk6ICVzXG4iLAorCS8qIEZJWE1FOiBlYWNoIG9yaWdfbm9kZS0+YmF0bWFuX2lmIHdpbGwgYmUgYXR0YWNoZWQgdG8gYSBzb2Z0aWYgKi8KKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoc29mdF9kZXZpY2UpOworCWJhdF9kYmcoREJHX1JPVVRFUywgYmF0X3ByaXYsCisJCSJEZWxldGluZyBnbG9iYWwgaG5hIGVudHJ5ICVwTSAodmlhICVwTSk6ICVzXG4iLAogCQlobmFfZ2xvYmFsX2VudHJ5LT5hZGRyLCBobmFfZ2xvYmFsX2VudHJ5LT5vcmlnX25vZGUtPm9yaWcsCiAJCW1lc3NhZ2UpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5oIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuaAppbmRleCA4ZjQxMmZjLi5mYTkzZTM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmgKQEAgLTE5LDIzICsxOSwyMSBAQAogICoKICAqLwogCisjaWZuZGVmIF9ORVRfQkFUTUFOX0FEVl9UUkFOU0xBVElPTl9UQUJMRV9IXworI2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfVFJBTlNMQVRJT05fVEFCTEVfSF8KKwogI2luY2x1ZGUgInR5cGVzLmgiCiAKIGludCBobmFfbG9jYWxfaW5pdCh2b2lkKTsKIHZvaWQgaG5hX2xvY2FsX2FkZCh1aW50OF90ICphZGRyKTsKIHZvaWQgaG5hX2xvY2FsX3JlbW92ZSh1aW50OF90ICphZGRyLCBjaGFyICptZXNzYWdlKTsKIGludCBobmFfbG9jYWxfZmlsbF9idWZmZXIodW5zaWduZWQgY2hhciAqYnVmZiwgaW50IGJ1ZmZfbGVuKTsKLWludCBobmFfbG9jYWxfZmlsbF9idWZmZXJfdGV4dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwgY2hhciAqYnVmZiwKLQkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCBvZmYpOwotdm9pZCBobmFfbG9jYWxfcHVyZ2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK2ludCBobmFfbG9jYWxfc2VxX3ByaW50X3RleHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCk7CiB2b2lkIGhuYV9sb2NhbF9mcmVlKHZvaWQpOwogaW50IGhuYV9nbG9iYWxfaW5pdCh2b2lkKTsKIHZvaWQgaG5hX2dsb2JhbF9hZGRfb3JpZyhzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsIHVuc2lnbmVkIGNoYXIgKmhuYV9idWZmLAogCQkJIGludCBobmFfYnVmZl9sZW4pOwotaW50IGhuYV9nbG9iYWxfZmlsbF9idWZmZXJfdGV4dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwgY2hhciAqYnVmZiwKLQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCBvZmYpOwotdm9pZCBfaG5hX2dsb2JhbF9kZWxfb3JpZyhzdHJ1Y3QgaG5hX2dsb2JhbF9lbnRyeSAqaG5hX2dsb2JhbF9lbnRyeSwKLQkJCSAgY2hhciAqb3JpZ19zdHIpOworaW50IGhuYV9nbG9iYWxfc2VxX3ByaW50X3RleHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCk7CiB2b2lkIGhuYV9nbG9iYWxfZGVsX29yaWcoc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlLCBjaGFyICptZXNzYWdlKTsKIHZvaWQgaG5hX2dsb2JhbF9mcmVlKHZvaWQpOwogc3RydWN0IG9yaWdfbm9kZSAqdHJhbnN0YWJsZV9zZWFyY2godWludDhfdCAqYWRkcik7CkBAIC00MywzICs0MSw1IEBACiBleHRlcm4gc3BpbmxvY2tfdCBobmFfbG9jYWxfaGFzaF9sb2NrOwogZXh0ZXJuIHN0cnVjdCBoYXNodGFibGVfdCAqaG5hX2xvY2FsX2hhc2g7CiBleHRlcm4gYXRvbWljX3QgaG5hX2xvY2FsX2NoYW5nZWQ7CisKKyNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfVFJBTlNMQVRJT05fVEFCTEVfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3R5cGVzLmggYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi90eXBlcy5oCmluZGV4IDg2MDA3YzcuLjIxZDA3MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3R5cGVzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvdHlwZXMuaApAQCAtMjEsMTAgKzIxLDggQEAKIAogCiAKLQotCi0jaWZuZGVmIFRZUEVTX0gKLSNkZWZpbmUgVFlQRVNfSAorI2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfVFlQRVNfSF8KKyNkZWZpbmUgX05FVF9CQVRNQU5fQURWX1RZUEVTX0hfCiAKICNpbmNsdWRlICJwYWNrZXQuaCIKICNpbmNsdWRlICJiaXRhcnJheS5oIgpAQCAtNTIsNiArNTAsNyBAQAogCiAvKioKICAgKglvcmlnX25vZGUgLSBzdHJ1Y3R1cmUgZm9yIG9yaWdfbGlzdCBtYWludGFpbmluZyBub2RlcyBvZiBtZXNoCisgICoJQHByaW1hcnlfYWRkcjogaG9zdHMgcHJpbWFyeSBpbnRlcmZhY2UgYWRkcmVzcwogICAqCUBsYXN0X3ZhbGlkOiB3aGVuIGxhc3QgcGFja2V0IGZyb20gdGhpcyBub2RlIHdhcyByZWNlaXZlZAogICAqCUBiY2FzdF9zZXFub19yZXNldDogdGltZSB3aGVuIHRoZSBicm9hZGNhc3Qgc2Vxbm8gd2luZG93IHdhcyByZXNldAogICAqCUBiYXRtYW5fc2Vxbm9fcmVzZXQ6IHRpbWUgd2hlbiB0aGUgYmF0bWFuIHNlcW5vIHdpbmRvdyB3YXMgcmVzZXQKQEAgLTU5LDkgKzU4LDEzIEBACiAgICoJQGxhc3RfcmVhbF9zZXFubzogbGFzdCBhbmQgYmVzdCBrbm93biBzcXVlbmNlIG51bWJlcgogICAqCUBsYXN0X3R0bDogdHRsIG9mIGxhc3QgcmVjZWl2ZWQgcGFja2V0CiAgICoJQGxhc3RfYmNhc3Rfc2Vxbm86IGxhc3QgYnJvYWRjYXN0IHNlcXVlbmNlIG51bWJlciByZWNlaXZlZCBieSB0aGlzIGhvc3QKKyAgKgorICAqCUBjYW5kaWRhdGVzOiBob3cgbWFueSBjYW5kaWRhdGVzIGFyZSBhdmFpbGFibGUKKyAgKglAc2VsZWN0ZWQ6IG5leHQgYm9uZGluZyBjYW5kaWRhdGUKICAqLwogc3RydWN0IG9yaWdfbm9kZSB7CiAJdWludDhfdCBvcmlnW0VUSF9BTEVOXTsKKwl1aW50OF90IHByaW1hcnlfYWRkcltFVEhfQUxFTl07CiAJc3RydWN0IG5laWdoX25vZGUgKnJvdXRlcjsKIAlUWVBFX09GX1dPUkQgKmJjYXN0X293bjsKIAl1aW50OF90ICpiY2FzdF9vd25fc3VtOwpAQCAtNzIsMTIgKzc1LDE2IEBACiAJdW5zaWduZWQgbG9uZyBiYXRtYW5fc2Vxbm9fcmVzZXQ7CiAJdWludDhfdCAgZmxhZ3M7CiAJdW5zaWduZWQgY2hhciAqaG5hX2J1ZmY7Ci0JaW50MTZfdCAgaG5hX2J1ZmZfbGVuOwotCXVpbnQxNl90IGxhc3RfcmVhbF9zZXFubzsKKwlpbnQxNl90IGhuYV9idWZmX2xlbjsKKwl1aW50MzJfdCBsYXN0X3JlYWxfc2Vxbm87CiAJdWludDhfdCBsYXN0X3R0bDsKIAlUWVBFX09GX1dPUkQgYmNhc3RfYml0c1tOVU1fV09SRFNdOwotCXVpbnQxNl90IGxhc3RfYmNhc3Rfc2Vxbm87CisJdWludDMyX3QgbGFzdF9iY2FzdF9zZXFubzsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5laWdoX2xpc3Q7CisJc3RydWN0IHsKKwkJdWludDhfdCBjYW5kaWRhdGVzOworCQlzdHJ1Y3QgbmVpZ2hfbm9kZSAqc2VsZWN0ZWQ7CisJfSBib25kOwogfTsKIAogLyoqCkBAIC05Miw2ICs5OSw3IEBACiAJdWludDhfdCB0cV9pbmRleDsKIAl1aW50OF90IHRxX2F2ZzsKIAl1aW50OF90IGxhc3RfdHRsOworCXN0cnVjdCBuZWlnaF9ub2RlICpuZXh0X2JvbmRfY2FuZGlkYXRlOwogCXVuc2lnbmVkIGxvbmcgbGFzdF92YWxpZDsKIAlUWVBFX09GX1dPUkQgcmVhbF9iaXRzW05VTV9XT1JEU107CiAJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOwpAQCAtMTAxLDE0ICsxMDksMTggQEAKIHN0cnVjdCBiYXRfcHJpdiB7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJYXRvbWljX3QgYWdncmVnYXRpb25fZW5hYmxlZDsKKwlhdG9taWNfdCBib25kaW5nX2VuYWJsZWQ7CiAJYXRvbWljX3QgdmlzX21vZGU7CiAJYXRvbWljX3Qgb3JpZ19pbnRlcnZhbDsKKwlhdG9taWNfdCBsb2dfbGV2ZWw7CiAJY2hhciBudW1faWZhY2VzOworCXN0cnVjdCBkZWJ1Z19sb2cgKmRlYnVnX2xvZzsKIAlzdHJ1Y3QgYmF0bWFuX2lmICpwcmltYXJ5X2lmOwogCXN0cnVjdCBrb2JqZWN0ICptZXNoX29iajsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z19kaXI7CiB9OwogCi1zdHJ1Y3QgZGV2aWNlX2NsaWVudCB7CitzdHJ1Y3Qgc29ja2V0X2NsaWVudCB7CiAJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZV9saXN0OwogCXVuc2lnbmVkIGludCBxdWV1ZV9sZW47CiAJdW5zaWduZWQgY2hhciBpbmRleDsKQEAgLTExNiw5ICsxMjgsMTAgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZV93YWl0OwogfTsKIAotc3RydWN0IGRldmljZV9wYWNrZXQgeworc3RydWN0IHNvY2tldF9wYWNrZXQgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgaWNtcF9wYWNrZXQgaWNtcF9wYWNrZXQ7CisJc2l6ZV90IGljbXBfbGVuOworCXN0cnVjdCBpY21wX3BhY2tldF9yciBpY21wX3BhY2tldDsKIH07CiAKIHN0cnVjdCBobmFfbG9jYWxfZW50cnkgewpAQCAtMTU5LDQgKzE3MiwxMiBAQAogCXN0cnVjdCBobGlzdF9ub2RlIGxpc3Q7CiB9OwogCi0jZW5kaWYKK3N0cnVjdCBkZWJ1Z19sb2cgeworCWNoYXIgbG9nX2J1ZmZbTE9HX0JVRl9MRU5dOworCXVuc2lnbmVkIGxvbmcgbG9nX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgbG9nX2VuZDsKKwlzcGlubG9ja190IGxvY2s7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWVfd2FpdDsKK307CisKKyNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfVFlQRVNfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3Zpcy5jIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvdmlzLmMKaW5kZXggMWQzZDk1NC4uNGI2YTUwNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3Zpcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3Zpcy5jCkBAIC00Myw4ICs0Myw4IEBACiAJCQlfZHVtbXkgPiBzbWFsbGVzdF9zaWduZWRfaW50KF9kdW1teSk7IH0pCiAjZGVmaW5lIHNlcV9hZnRlcih4LCB5KSBzZXFfYmVmb3JlKHksIHgpCiAKLXN0cnVjdCBoYXNodGFibGVfdCAqdmlzX2hhc2g7Ci1ERUZJTkVfU1BJTkxPQ0sodmlzX2hhc2hfbG9jayk7CitzdGF0aWMgc3RydWN0IGhhc2h0YWJsZV90ICp2aXNfaGFzaDsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sodmlzX2hhc2hfbG9jayk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJlY3ZfbGlzdF9sb2NrKTsKIHN0YXRpYyBzdHJ1Y3QgdmlzX2luZm8gKm15X3Zpc19pbmZvOwogc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgc2VuZF9saXN0OwkvKiBhbHdheXMgbG9ja2VkIHdpdGggdmlzX2hhc2hfbG9jayAqLwpAQCAtMTE1LDcgKzExNSw3IEBACiAJfQogCiAJLyogaXRzIGEgbmV3IGFkZHJlc3MsIGFkZCBpdCB0byB0aGUgbGlzdCAqLwotCWVudHJ5ID0ga21hbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CisJZW50cnkgPSBrbWFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWVudHJ5KQogCQlyZXR1cm47CiAJbWVtY3B5KGVudHJ5LT5hZGRyLCBpbnRlcmZhY2UsIEVUSF9BTEVOKTsKQEAgLTE0MiwxMiArMTQyLDI5IEBACiAJcmV0dXJuIGxlbjsKIH0KIAorc3RhdGljIHNpemVfdCB2aXNfZGF0YV9jb3VudF9wcmltX3NlYyhzdHJ1Y3QgaGxpc3RfaGVhZCAqaWZfbGlzdCkKK3sKKwlzdHJ1Y3QgaWZfbGlzdF9lbnRyeSAqZW50cnk7CisJc3RydWN0IGhsaXN0X25vZGUgKnBvczsKKwlzaXplX3QgY291bnQgPSAwOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIHBvcywgaWZfbGlzdCwgbGlzdCkgeworCQlpZiAoZW50cnktPnByaW1hcnkpCisJCQljb3VudCArPSA5OworCQllbHNlCisJCQljb3VudCArPSAyMzsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKIC8qIHJlYWQgYW4gZW50cnkgICovCiBzdGF0aWMgc3NpemVfdCB2aXNfZGF0YV9yZWFkX2VudHJ5KGNoYXIgKmJ1ZmYsIHN0cnVjdCB2aXNfaW5mb19lbnRyeSAqZW50cnksCiAJCQkJICAgdWludDhfdCAqc3JjLCBib29sIHByaW1hcnkpCiB7Ci0JY2hhciB0b1s0MF07CisJY2hhciB0b1sxOF07CiAKKwkvKiBtYXhpbWFsIGxlbmd0aDogbWF4KDQrMTcrMiwgMysxNysxKzMrMikgPT0gMjYgKi8KIAlhZGRyX3RvX3N0cmluZyh0bywgZW50cnktPmRlc3QpOwogCWlmIChwcmltYXJ5ICYmIGVudHJ5LT5xdWFsaXR5ID09IDApCiAJCXJldHVybiBzcHJpbnRmKGJ1ZmYsICJITkEgJXMsICIsIHRvKTsKQEAgLTE1NywzOCArMTc0LDc0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXNzaXplX3QgdmlzX2ZpbGxfYnVmZmVyX3RleHQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsIGNoYXIgKmJ1ZmYsCi0JCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCBvZmYpCitpbnQgdmlzX3NlcV9wcmludF90ZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCiB7CiAJSEFTSElUKGhhc2hpdCk7CisJSEFTSElUKGhhc2hpdF9jb3VudCk7CiAJc3RydWN0IHZpc19pbmZvICppbmZvOwogCXN0cnVjdCB2aXNfaW5mb19lbnRyeSAqZW50cmllczsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKXNlcS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CiAJSExJU1RfSEVBRCh2aXNfaWZfbGlzdCk7CiAJc3RydWN0IGlmX2xpc3RfZW50cnkgKmVudHJ5OwogCXN0cnVjdCBobGlzdF9ub2RlICpwb3MsICpuOwotCXNpemVfdCBoZHJfbGVuLCB0bXBfbGVuOwotCWludCBpLCBieXRlc193cml0dGVuID0gMDsKKwlpbnQgaTsKIAljaGFyIHRtcF9hZGRyX3N0cltFVEhfU1RSX0xFTl07CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgdmlzX3NlcnZlciA9IGF0b21pY19yZWFkKCZiYXRfcHJpdi0+dmlzX21vZGUpOworCXNpemVfdCBidWZmX3BvcywgYnVmX3NpemU7CisJY2hhciAqYnVmZjsKIAogCWlmICgoIWJhdF9wcml2LT5wcmltYXJ5X2lmKSB8fAogCSAgICAodmlzX3NlcnZlciA9PSBWSVNfVFlQRV9DTElFTlRfVVBEQVRFKSkKIAkJcmV0dXJuIDA7CiAKLQloZHJfbGVuID0gMDsKLQorCWJ1Zl9zaXplID0gMTsKKwkvKiBFc3RpbWF0ZSBsZW5ndGggKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmdmlzX2hhc2hfbG9jaywgZmxhZ3MpOworCXdoaWxlIChoYXNoX2l0ZXJhdGUodmlzX2hhc2gsICZoYXNoaXRfY291bnQpKSB7CisJCWluZm8gPSBoYXNoaXRfY291bnQuYnVja2V0LT5kYXRhOworCQllbnRyaWVzID0gKHN0cnVjdCB2aXNfaW5mb19lbnRyeSAqKQorCQkJKChjaGFyICopaW5mbyArIHNpemVvZihzdHJ1Y3QgdmlzX2luZm8pKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+cGFja2V0LmVudHJpZXM7IGkrKykgeworCQkJaWYgKGVudHJpZXNbaV0ucXVhbGl0eSA9PSAwKQorCQkJCWNvbnRpbnVlOworCQkJdmlzX2RhdGFfaW5zZXJ0X2ludGVyZmFjZShlbnRyaWVzW2ldLnNyYywgJnZpc19pZl9saXN0LAorCQkJCWNvbXBhcmVfb3JpZyhlbnRyaWVzW2ldLnNyYywKKwkJCQkJCWluZm8tPnBhY2tldC52aXNfb3JpZykpOworCQl9CisKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIHBvcywgJnZpc19pZl9saXN0LCBsaXN0KSB7CisJCQlidWZfc2l6ZSArPSAxOCArIDI2ICogaW5mby0+cGFja2V0LmVudHJpZXM7CisKKwkJCS8qIGFkZCBwcmltYXJ5L3NlY29uZGFyeSByZWNvcmRzICovCisJCQlpZiAoY29tcGFyZV9vcmlnKGVudHJ5LT5hZGRyLCBpbmZvLT5wYWNrZXQudmlzX29yaWcpKQorCQkJCWJ1Zl9zaXplICs9CisJCQkJCXZpc19kYXRhX2NvdW50X3ByaW1fc2VjKCZ2aXNfaWZfbGlzdCk7CisKKwkJCWJ1Zl9zaXplICs9IDE7CisJCX0KKworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBwb3MsIG4sICZ2aXNfaWZfbGlzdCwgbGlzdCkgeworCQkJaGxpc3RfZGVsKCZlbnRyeS0+bGlzdCk7CisJCQlrZnJlZShlbnRyeSk7CisJCX0KKwl9CisKKwlidWZmID0ga21hbGxvYyhidWZfc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKCFidWZmKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpc19oYXNoX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWJ1ZmZbMF0gPSAnXDAnOworCWJ1ZmZfcG9zID0gMDsKKwogCXdoaWxlIChoYXNoX2l0ZXJhdGUodmlzX2hhc2gsICZoYXNoaXQpKSB7CiAJCWluZm8gPSBoYXNoaXQuYnVja2V0LT5kYXRhOwogCQllbnRyaWVzID0gKHN0cnVjdCB2aXNfaW5mb19lbnRyeSAqKQogCQkJKChjaGFyICopaW5mbyArIHNpemVvZihzdHJ1Y3QgdmlzX2luZm8pKTsKIAotCQkvKiBlc3RpbWF0ZWQgbGluZSBsZW5ndGggKi8KLQkJaWYgKGNvdW50IDwgYnl0ZXNfd3JpdHRlbiArIDIwMCkKLQkJCWJyZWFrOwotCiAJCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5wYWNrZXQuZW50cmllczsgaSsrKSB7CiAJCQlpZiAoZW50cmllc1tpXS5xdWFsaXR5ID09IDApCiAJCQkJY29udGludWU7CkBAIC0xOTksMzAgKzI1MiwyMiBAQAogCiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBwb3MsICZ2aXNfaWZfbGlzdCwgbGlzdCkgewogCQkJYWRkcl90b19zdHJpbmcodG1wX2FkZHJfc3RyLCBlbnRyeS0+YWRkcik7Ci0JCQl0bXBfbGVuID0gc3ByaW50ZihidWZmICsgYnl0ZXNfd3JpdHRlbiwKLQkJCQkJICAiJXMsIiwgdG1wX2FkZHJfc3RyKTsKKwkJCWJ1ZmZfcG9zICs9IHNwcmludGYoYnVmZiArIGJ1ZmZfcG9zLCAiJXMsIiwKKwkJCQkJICAgIHRtcF9hZGRyX3N0cik7CiAKIAkJCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5wYWNrZXQuZW50cmllczsgaSsrKQotCQkJCXRtcF9sZW4gKz0gdmlzX2RhdGFfcmVhZF9lbnRyeSgKLQkJCQkJCWJ1ZmYgKyBieXRlc193cml0dGVuICsgdG1wX2xlbiwKLQkJCQkJCSZlbnRyaWVzW2ldLCBlbnRyeS0+YWRkciwKLQkJCQkJCWVudHJ5LT5wcmltYXJ5KTsKKwkJCQlidWZmX3BvcyArPSB2aXNfZGF0YV9yZWFkX2VudHJ5KGJ1ZmYgKyBidWZmX3BvcywKKwkJCQkJCQkJJmVudHJpZXNbaV0sCisJCQkJCQkJCWVudHJ5LT5hZGRyLAorCQkJCQkJCQllbnRyeS0+cHJpbWFyeSk7CiAKIAkJCS8qIGFkZCBwcmltYXJ5L3NlY29uZGFyeSByZWNvcmRzICovCiAJCQlpZiAoY29tcGFyZV9vcmlnKGVudHJ5LT5hZGRyLCBpbmZvLT5wYWNrZXQudmlzX29yaWcpKQotCQkJCXRtcF9sZW4gKz0gdmlzX2RhdGFfcmVhZF9wcmltX3NlYygKLQkJCQkJCWJ1ZmYgKyBieXRlc193cml0dGVuICsgdG1wX2xlbiwKLQkJCQkJCSZ2aXNfaWZfbGlzdCk7CisJCQkJYnVmZl9wb3MgKz0KKwkJCQkJdmlzX2RhdGFfcmVhZF9wcmltX3NlYyhidWZmICsgYnVmZl9wb3MsCisJCQkJCQkJICAgICAgICZ2aXNfaWZfbGlzdCk7CiAKLQkJCXRtcF9sZW4gKz0gc3ByaW50ZihidWZmICsgYnl0ZXNfd3JpdHRlbiArIHRtcF9sZW4sCi0JCQkJCSAgIlxuIik7Ci0KLQkJCWhkcl9sZW4gKz0gdG1wX2xlbjsKLQotCQkJaWYgKG9mZiA+PSBoZHJfbGVuKQotCQkJCWNvbnRpbnVlOwotCi0JCQlieXRlc193cml0dGVuICs9IHRtcF9sZW47CisJCQlidWZmX3BvcyArPSBzcHJpbnRmKGJ1ZmYgKyBidWZmX3BvcywgIlxuIik7CiAJCX0KIAogCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBwb3MsIG4sICZ2aXNfaWZfbGlzdCwgbGlzdCkgewpAQCAtMjMwLDkgKzI3NSwxMyBAQAogCQkJa2ZyZWUoZW50cnkpOwogCQl9CiAJfQorCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlzX2hhc2hfbG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIGJ5dGVzX3dyaXR0ZW47CisJc2VxX3ByaW50ZihzZXEsICIlcyIsIGJ1ZmYpOworCWtmcmVlKGJ1ZmYpOworCisJcmV0dXJuIDA7CiB9CiAKIC8qIGFkZCB0aGUgaW5mbyBwYWNrZXQgdG8gdGhlIHNlbmQgbGlzdCwgaWYgaXQgd2FzIG5vdApAQCAtMzA4LDcgKzM1Nyw4IEBACiAJb2xkX2luZm8gPSBoYXNoX2ZpbmQodmlzX2hhc2gsICZzZWFyY2hfZWxlbSk7CiAKIAlpZiAob2xkX2luZm8gIT0gTlVMTCkgewotCQlpZiAoIXNlcV9hZnRlcih2aXNfcGFja2V0LT5zZXFubywgb2xkX2luZm8tPnBhY2tldC5zZXFubykpIHsKKwkJaWYgKCFzZXFfYWZ0ZXIobnRvaGwodmlzX3BhY2tldC0+c2Vxbm8pLAorCQkJCW50b2hsKG9sZF9pbmZvLT5wYWNrZXQuc2Vxbm8pKSkgewogCQkJaWYgKG9sZF9pbmZvLT5wYWNrZXQuc2Vxbm8gPT0gdmlzX3BhY2tldC0+c2Vxbm8pIHsKIAkJCQlyZWN2X2xpc3RfYWRkKCZvbGRfaW5mby0+cmVjdl9saXN0LAogCQkJCQkgICAgICB2aXNfcGFja2V0LT5zZW5kZXJfb3JpZyk7CkBAIC0zNDAsNyArMzkwLDcgQEAKIAogCS8qIE1ha2UgaXQgYSBicm9hZGNhc3QgcGFja2V0LCBpZiByZXF1aXJlZCAqLwogCWlmIChtYWtlX2Jyb2FkY2FzdCkKLQkJbWVtY3B5KGluZm8tPnBhY2tldC50YXJnZXRfb3JpZywgYnJvYWRjYXN0QWRkciwgRVRIX0FMRU4pOworCQltZW1jcHkoaW5mby0+cGFja2V0LnRhcmdldF9vcmlnLCBicm9hZGNhc3RfYWRkciwgRVRIX0FMRU4pOwogCiAJLyogcmVwYWlyIGlmIGVudHJpZXMgaXMgbG9uZ2VyIHRoYW4gcGFja2V0LiAqLwogCWlmIChpbmZvLT5wYWNrZXQuZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgdmlzX2luZm9fZW50cnkpID4gdmlzX2luZm9fbGVuKQpAQCAtNDc0LDkgKzUyNCw5IEBACiAJaW5mby0+cGFja2V0LnZpc190eXBlID0gYXRvbWljX3JlYWQoJmJhdF9wcml2LT52aXNfbW9kZSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKLQltZW1jcHkoaW5mby0+cGFja2V0LnRhcmdldF9vcmlnLCBicm9hZGNhc3RBZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KGluZm8tPnBhY2tldC50YXJnZXRfb3JpZywgYnJvYWRjYXN0X2FkZHIsIEVUSF9BTEVOKTsKIAlpbmZvLT5wYWNrZXQudHRsID0gVFRMOwotCWluZm8tPnBhY2tldC5zZXFubysrOworCWluZm8tPnBhY2tldC5zZXFubyA9IGh0b25sKG50b2hsKGluZm8tPnBhY2tldC5zZXFubykgKyAxKTsKIAlpbmZvLT5wYWNrZXQuZW50cmllcyA9IDA7CiAKIAlpZiAoaW5mby0+cGFja2V0LnZpc190eXBlID09IFZJU19UWVBFX0NMSUVOVF9VUERBVEUpIHsKQEAgLTU0Nyw3ICs1OTcsNyBAQAogCQlpZiAoaW5mbyA9PSBteV92aXNfaW5mbykJLyogbmV2ZXIgcHVyZ2Ugb3duIGRhdGEuICovCiAJCQljb250aW51ZTsKIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywKLQkJCSAgICAgICBpbmZvLT5maXJzdF9zZWVuICsgKFZJU19USU1FT1VUKkhaKS8xMDAwKSkgeworCQkJICAgICAgIGluZm8tPmZpcnN0X3NlZW4gKyBWSVNfVElNRU9VVCAqIEhaKSkgewogCQkJaGFzaF9yZW1vdmVfYnVja2V0KHZpc19oYXNoLCAmaGFzaGl0KTsKIAkJCXNlbmRfbGlzdF9kZWwoaW5mbyk7CiAJCQlrcmVmX3B1dCgmaW5mby0+cmVmY291bnQsIGZyZWVfaW5mbyk7CkBAIC01OTEsNyArNjQxLDcgQEAKIAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOwotCW1lbWNweShpbmZvLT5wYWNrZXQudGFyZ2V0X29yaWcsIGJyb2FkY2FzdEFkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkoaW5mby0+cGFja2V0LnRhcmdldF9vcmlnLCBicm9hZGNhc3RfYWRkciwgRVRIX0FMRU4pOwogfQogCiBzdGF0aWMgdm9pZCB1bmljYXN0X3Zpc19wYWNrZXQoc3RydWN0IHZpc19pbmZvICppbmZvLCBpbnQgcGFja2V0X2xlbmd0aCkKQEAgLTYyOCwxMSArNjc4LDExIEBACiAJaW50IHBhY2tldF9sZW5ndGg7CiAKIAlpZiAoaW5mby0+cGFja2V0LnR0bCA8IDIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmF0bWFuLWFkdjogRXJyb3IgLSBjYW4ndCBzZW5kIHZpcyBwYWNrZXQ6IHR0bCBleGNlZWRlZFxuIik7CisJCXByX3dhcm5pbmcoIkVycm9yIC0gY2FuJ3Qgc2VuZCB2aXMgcGFja2V0OiB0dGwgZXhjZWVkZWRcbiIpOwogCQlyZXR1cm47CiAJfQogCi0JbWVtY3B5KGluZm8tPnBhY2tldC5zZW5kZXJfb3JpZywgbWFpbklmQWRkciwgRVRIX0FMRU4pOworCW1lbWNweShpbmZvLT5wYWNrZXQuc2VuZGVyX29yaWcsIG1haW5faWZfYWRkciwgRVRIX0FMRU4pOwogCWluZm8tPnBhY2tldC50dGwtLTsKIAogCXBhY2tldF9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHZpc19wYWNrZXQpICsKQEAgLTY5MCwxOCArNzQwLDE4IEBACiAKIAl2aXNfaGFzaCA9IGhhc2hfbmV3KDI1NiwgdmlzX2luZm9fY21wLCB2aXNfaW5mb19jaG9vc2UpOwogCWlmICghdmlzX2hhc2gpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OkNhbid0IGluaXRpYWxpemUgdmlzX2hhc2hcbiIpOworCQlwcl9lcnIoIkNhbid0IGluaXRpYWxpemUgdmlzX2hhc2hcbiIpOwogCQlnb3RvIGVycjsKIAl9CiAKIAlteV92aXNfaW5mbyA9IGttYWxsb2MoMTAwMCwgR0ZQX0FUT01JQyk7CiAJaWYgKCFteV92aXNfaW5mbykgewotCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6Q2FuJ3QgaW5pdGlhbGl6ZSB2aXMgcGFja2V0XG4iKTsKKwkJcHJfZXJyKCJDYW4ndCBpbml0aWFsaXplIHZpcyBwYWNrZXRcbiIpOwogCQlnb3RvIGVycjsKIAl9CiAKIAkvKiBwcmVmaWxsIHRoZSB2aXMgaW5mbyAqLwotCW15X3Zpc19pbmZvLT5maXJzdF9zZWVuID0gamlmZmllcyAtIGF0b21pY19yZWFkKCZ2aXNfaW50ZXJ2YWwpOworCW15X3Zpc19pbmZvLT5maXJzdF9zZWVuID0gamlmZmllcyAtIG1zZWNzX3RvX2ppZmZpZXMoVklTX0lOVEVSVkFMKTsKIAlJTklUX0xJU1RfSEVBRCgmbXlfdmlzX2luZm8tPnJlY3ZfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJm15X3Zpc19pbmZvLT5zZW5kX2xpc3QpOwogCWtyZWZfaW5pdCgmbXlfdmlzX2luZm8tPnJlZmNvdW50KTsKQEAgLTcxMywxMiArNzYzLDExIEBACiAKIAlJTklUX0xJU1RfSEVBRCgmc2VuZF9saXN0KTsKIAotCW1lbWNweShteV92aXNfaW5mby0+cGFja2V0LnZpc19vcmlnLCBtYWluSWZBZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG15X3Zpc19pbmZvLT5wYWNrZXQuc2VuZGVyX29yaWcsIG1haW5JZkFkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkobXlfdmlzX2luZm8tPnBhY2tldC52aXNfb3JpZywgbWFpbl9pZl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG15X3Zpc19pbmZvLT5wYWNrZXQuc2VuZGVyX29yaWcsIG1haW5faWZfYWRkciwgRVRIX0FMRU4pOwogCiAJaWYgKGhhc2hfYWRkKHZpc19oYXNoLCBteV92aXNfaW5mbykgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImJhdG1hbi1hZHY6Q2FuJ3QgYWRkIG93biB2aXMgcGFja2V0IGludG8gaGFzaFxuIik7CisJCXByX2VycigiQ2FuJ3QgYWRkIG93biB2aXMgcGFja2V0IGludG8gaGFzaFxuIik7CiAJCS8qIG5vdCBpbiBoYXNoLCBuZWVkIHRvIHJlbW92ZSBpdCBtYW51YWxseS4gKi8KIAkJa3JlZl9wdXQoJm15X3Zpc19pbmZvLT5yZWZjb3VudCwgZnJlZV9pbmZvKTsKIAkJZ290byBlcnI7CkBAIC03NjQsNSArODEzLDUgQEAKIHN0YXRpYyB2b2lkIHN0YXJ0X3Zpc190aW1lcih2b2lkKQogewogCXF1ZXVlX2RlbGF5ZWRfd29yayhiYXRfZXZlbnRfd29ya3F1ZXVlLCAmdmlzX3RpbWVyX3dxLAotCQkJICAgKGF0b21pY19yZWFkKCZ2aXNfaW50ZXJ2YWwpICogSFopIC8gMTAwMCk7CisJCQkgICAoVklTX0lOVEVSVkFMICogSFopIC8gMTAwMCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi92aXMuaCBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3Zpcy5oCmluZGV4IDljMWZkNzcuLmJiMTNiZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3Zpcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3Zpcy5oCkBAIC0xOSw3ICsxOSwxMCBAQAogICoKICAqLwogCi0jZGVmaW5lIFZJU19USU1FT1VUCQkyMDAwMDAKKyNpZm5kZWYgX05FVF9CQVRNQU5fQURWX1ZJU19IXworI2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfVklTX0hfCisKKyNkZWZpbmUgVklTX1RJTUVPVVQJCTIwMAkvKiB0aW1lb3V0IG9mIHZpcyBwYWNrZXRzIGluIHNlY29uZHMgKi8KIAogc3RydWN0IHZpc19pbmZvIHsKIAl1bnNpZ25lZCBsb25nICAgICAgIGZpcnN0X3NlZW47CkBAIC00NCwxMSArNDcsNyBAQAogCXVpbnQ4X3QgbWFjW0VUSF9BTEVOXTsKIH07CiAKLWV4dGVybiBzdHJ1Y3QgaGFzaHRhYmxlX3QgKnZpc19oYXNoOwotZXh0ZXJuIHNwaW5sb2NrX3QgdmlzX2hhc2hfbG9jazsKLQotc3NpemVfdCB2aXNfZmlsbF9idWZmZXJfdGV4dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwgY2hhciAqYnVmZiwKLQkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90IG9mZik7CitpbnQgdmlzX3NlcV9wcmludF90ZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpOwogdm9pZCByZWNlaXZlX3NlcnZlcl9zeW5jX3BhY2tldChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAogCQkJCXN0cnVjdCB2aXNfcGFja2V0ICp2aXNfcGFja2V0LAogCQkJCWludCB2aXNfaW5mb19sZW4pOwpAQCAtNTcsMyArNTYsNSBAQAogCQkJCSAgaW50IHZpc19pbmZvX2xlbik7CiBpbnQgdmlzX2luaXQodm9pZCk7CiB2b2lkIHZpc19xdWl0KHZvaWQpOworCisjZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX1ZJU19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9UT0RPCmluZGV4IDE1YzkzNDguLmIxMGY3MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvVE9ETworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL1RPRE8KQEAgLTIsNyArMiw2IEBACiAJLSBjaGVja3BhdGNoLnBsIGNsZWFudXBzCiAJLSBMaW5kZW50CiAJLSByZW1vdmUgYWxsIHdyYXBwZXJzCi0JLSByZW1vdmUgdHlwZWRlZnMKIAktIGF1ZGl0IHVzZXJzcGFjZSBpbnRlcmZhY2UKIAktIHJlc2VydmUgbWFqb3IgbnVtYmVyCiAJLSBjbGVhbnVwIHRoZSBpbmRpdmlkdWFsIGNvbWVkaSBkcml2ZXJzIGFzIHdlbGwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2ZvcHMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2ZvcHMuYwppbmRleCBhZWIyYzAwLi4xNDA5MTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5jCkBAIC0xODQ1LDggKzE4NDUsMTUgQEAKIAkJfQogCX0KIAotCWlmIChkZXYtPmF0dGFjaGVkICYmIGRldi0+dXNlX2NvdW50ID09IDAgJiYgZGV2LT5vcGVuKQotCQlkZXYtPm9wZW4oZGV2KTsKKwlpZiAoZGV2LT5hdHRhY2hlZCAmJiBkZXYtPnVzZV9jb3VudCA9PSAwICYmIGRldi0+b3BlbikgeworCQlpbnQgcmMgPSBkZXYtPm9wZW4oZGV2KTsKKwkJaWYgKHJjIDwgMCkgeworCQkJbW9kdWxlX3B1dChkZXYtPmRyaXZlci0+bW9kdWxlKTsKKwkJCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOworCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKKwkJCXJldHVybiByYzsKKwkJfQorCX0KIAogCWRldi0+dXNlX2NvdW50Kys7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpZGV2LmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaWRldi5oCmluZGV4IDRlYjJiNzcuLjY4YWE5MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpZGV2LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlkZXYuaApAQCAtNTMsNjIgKzUzLDYgQEAKIAlDT01FRElfTUlOT1JWRVJTSU9OLCBDT01FRElfTUlDUk9WRVJTSU9OKQogI2RlZmluZSBDT01FRElfUkVMRUFTRSBWRVJTSU9OCiAKLSNkZWZpbmUgQ09NRURJX0lOSVRDTEVBTlVQX05PTU9EVUxFKHgpCQkJCQlcCi0Jc3RhdGljIGludCBfX2luaXQgeCAjIyBfaW5pdF9tb2R1bGUodm9pZCkJCQlcCi0JCXtyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmKHgpKTsgfQkJCVwKLQlzdGF0aWMgdm9pZCBfX2V4aXQgeCAjIyBfY2xlYW51cF9tb2R1bGUodm9pZCkJCQlcCi0JCXtjb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJih4KSk7IH0JCQlcCi0JbW9kdWxlX2luaXQoeCAjIyBfaW5pdF9tb2R1bGUpOwkJCQkJXAotCW1vZHVsZV9leGl0KHggIyMgX2NsZWFudXBfbW9kdWxlKTsKLQotI2RlZmluZSBDT01FRElfTU9EVUxFX01BQ1JPUwkJCQkJCVwKLQlNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CQlcCi0JTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOwkJCVwKLQlNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLSNkZWZpbmUgQ09NRURJX0lOSVRDTEVBTlVQKHgpCQkJCQkJXAotCUNPTUVESV9NT0RVTEVfTUFDUk9TCQlcCi0JQ09NRURJX0lOSVRDTEVBTlVQX05PTU9EVUxFKHgpCi0KLSNkZWZpbmUgQ09NRURJX1BDSV9JTklUQ0xFQU5VUF9OT01PRFVMRShjb21lZGlfZHJpdmVyLCBwY2lfaWRfdGFibGUpIFwKLQlzdGF0aWMgaW50IF9fZGV2aW5pdCBjb21lZGlfZHJpdmVyICMjIF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwgXAotCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KSBcCi0JeyBcCi0JCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgY29tZWRpX2RyaXZlci5kcml2ZXJfbmFtZSk7IFwKLQl9IFwKLQlzdGF0aWMgdm9pZCBfX2RldmV4aXQgY29tZWRpX2RyaXZlciAjIyBfcGNpX3JlbW92ZShcCi0JCXN0cnVjdCBwY2lfZGV2ICpkZXYpIFwKLQl7IFwKLQkJY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKGRldik7IFwKLQl9IFwKLQlzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgY29tZWRpX2RyaXZlciAjIyBfcGNpX2RyaXZlciA9IFwKLQl7IFwKLQkJLmlkX3RhYmxlID0gcGNpX2lkX3RhYmxlLCBcCi0JCS5wcm9iZSA9ICZjb21lZGlfZHJpdmVyICMjIF9wY2lfcHJvYmUsIFwKLQkJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKCZjb21lZGlfZHJpdmVyICMjIF9wY2lfcmVtb3ZlKSBcCi0JfTsgXAotCXN0YXRpYyBpbnQgX19pbml0IGNvbWVkaV9kcml2ZXIgIyMgX2luaXRfbW9kdWxlKHZvaWQpIFwKLQl7IFwKLQkJaW50IHJldHZhbDsgXAotCQlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZjb21lZGlfZHJpdmVyKTsgXAotCQlpZiAocmV0dmFsIDwgMCkgXAotCQkJcmV0dXJuIHJldHZhbDsgXAotCQkJY29tZWRpX2RyaXZlciAjIyBfcGNpX2RyaXZlci5uYW1lID0gXAotCQkJCShjaGFyICopY29tZWRpX2RyaXZlci5kcml2ZXJfbmFtZTsgXAotCQlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmY29tZWRpX2RyaXZlciAjIyBfcGNpX2RyaXZlcik7IFwKLQl9IFwKLQlzdGF0aWMgdm9pZCBfX2V4aXQgY29tZWRpX2RyaXZlciAjIyBfY2xlYW51cF9tb2R1bGUodm9pZCkgXAotCXsgXAotCQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmNvbWVkaV9kcml2ZXIgIyMgX3BjaV9kcml2ZXIpOyBcCi0JCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmY29tZWRpX2RyaXZlcik7IFwKLQl9IFwKLQltb2R1bGVfaW5pdChjb21lZGlfZHJpdmVyICMjIF9pbml0X21vZHVsZSk7IFwKLQltb2R1bGVfZXhpdChjb21lZGlfZHJpdmVyICMjIF9jbGVhbnVwX21vZHVsZSk7Ci0KLSNkZWZpbmUgQ09NRURJX1BDSV9JTklUQ0xFQU5VUChjb21lZGlfZHJpdmVyLCBwY2lfaWRfdGFibGUpIFwKLQlDT01FRElfTU9EVUxFX01BQ1JPUyBcCi0JQ09NRURJX1BDSV9JTklUQ0xFQU5VUF9OT01PRFVMRShjb21lZGlfZHJpdmVyLCBwY2lfaWRfdGFibGUpCi0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BRExJTksJCTB4MTQ0YQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0lDUAkJMHgxMDRjCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ09OVEVDCQkweDEyMjEKQEAgLTI4NSw3ICsyMjksNyBAQAogCiAJc3RydWN0IGZhc3luY19zdHJ1Y3QgKmFzeW5jX3F1ZXVlOwogCi0Jdm9pZCAoKm9wZW4pIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKKwlpbnQgKCpvcGVuKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CiAJdm9pZCAoKmNsb3NlKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvODI1NS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzLzgyNTUuYwppbmRleCBmZTYzODMwLi45NTA0OWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvODI1NS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy84MjU1LmMKQEAgLTExNyw3ICsxMTcsMTggQEAKIAkuZGV0YWNoID0gZGV2XzgyNTVfZGV0YWNoLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl84MjU1KTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl84MjU1X2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl84MjU1KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl84MjU1X2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfODI1NSk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl84MjU1X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl84MjU1X2NsZWFudXBfbW9kdWxlKTsKIAogc3RhdGljIHZvaWQgZG9fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKIApAQCAtNDU3LDMgKzQ2OCw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FjbDcyMjViLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWNsNzIyNWIuYwppbmRleCBlMjBjMzU0Li45ZGVmMjI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWNsNzIyNWIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWNsNzIyNWIuYwpAQCAtNDksNyArNDksMTggQEAKIAkub2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBib2FyZHR5cGUpLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9hY2w3MjI1Yik7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfYWNsNzIyNWJfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2FjbDcyMjViKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9hY2w3MjI1Yl9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2FjbDcyMjViKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2FjbDcyMjViX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9hY2w3MjI1Yl9jbGVhbnVwX21vZHVsZSk7CiAKIHN0YXRpYyBpbnQgYWNsNzIyNWJfZG9faW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLApAQCAtMTUwLDMgKzE2MSw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2FtY2NfczU5MzMuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9hbWNjX3M1OTMzLmgKaW5kZXggYzMyODRlYi4uOGVkMTliYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2FtY2NfczU5MzMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfYW1jY19zNTkzMy5oCkBAIC0yNDcsMTYgKzI0NywxNCBAQAogLyogYnVpbGQgbGlzdCBvZiBhbWNjIGNhcmRzIGluIHRoaXMgc3lzdGVtICovCiB2b2lkIHZfcGNpX2NhcmRfbGlzdF9pbml0KHVuc2lnbmVkIHNob3J0IHBjaV92ZW5kb3IsIGNoYXIgZGlzcGxheSkKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXYgPSBOVUxMOwogCXN0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjLCAqbGFzdDsKIAlpbnQgaTsKIAlpbnQgaV9Db3VudCA9IDA7CiAJYW1jY19kZXZpY2VzID0gTlVMTDsKIAlsYXN0ID0gTlVMTDsKIAotCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7Ci0JICAgICBwY2lkZXYgIT0gTlVMTDsKLQkgICAgIHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaWRldikpIHsKKwlmb3JfZWFjaF9wY2lfZGV2KHBjaWRldikgewogCQlmb3IgKGlfQ291bnQgPSAwOyBpX0NvdW50IDwgMjsgaV9Db3VudCsrKSB7CiAJCQlwY2lfdmVuZG9yID0gaV9BRERJREFUQURldmljZUlEW2lfQ291bnRdOwogCQkJaWYgKHBjaWRldi0+dmVuZG9yID09IHBjaV92ZW5kb3IpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9jb21tb24uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9jb21tb24uYwppbmRleCBiMThlODFkLi41ZWQ0Yjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2NvbW1vbi5jCkBAIC0yNTQxLDcgKzI1NDEsNDMgQEAKIAkub2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBhZGRpX2JvYXJkKSwKIH07CiAKLUNPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2FkZGksIGFkZGlfYXBjaV90YmwpOworc3RhdGljIGludCBfX2RldmluaXQgZHJpdmVyX2FkZGlfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBkcml2ZXJfYWRkaS5kcml2ZXJfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkcml2ZXJfYWRkaV9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXJfYWRkaV9wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IGFkZGlfYXBjaV90YmwsCisJLnByb2JlID0gJmRyaXZlcl9hZGRpX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9hZGRpX3BjaV9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfYWRkaV9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfYWRkaSk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfYWRkaV9wY2lfZHJpdmVyLm5hbWUgPSAoY2hhciAqKWRyaXZlcl9hZGRpLmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfYWRkaV9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9hZGRpX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfYWRkaV9wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9hZGRpKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2FkZGlfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2FkZGlfY2xlYW51cF9tb2R1bGUpOwogCiAvKgogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfZWVwcm9tLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfZWVwcm9tLmMKaW5kZXggYmVhMzI5Zi4uZTAyMTNhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2VlcHJvbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9lZXByb20uYwpAQCAtMTAxLDEwICsxMDEsMTAgQEAKIH07CiAKIAotdHlwZWRlZiBzdHJ1Y3Qgeworc3RydWN0IHN0cl9BbmFsb2dPdXRwdXRIZWFkZXIgewogCXVuc2lnbmVkIHNob3J0IHdfTmNoYW5uZWw7CiAJdW5zaWduZWQgY2hhciBiX1Jlc29sdXRpb247Ci19IHN0cl9BbmFsb2dPdXRwdXRIZWFkZXI7Cit9OwogCiBzdHJ1Y3Qgc3RyX0FuYWxvZ0lucHV0SGVhZGVyIHsKIAl1bnNpZ25lZCBzaG9ydCB3X05jaGFubmVsOwpAQCAtMTM2LDcgKzEzNiw3IEBACiAKIGludCBpX0VlcHJvbVJlYWRBbmxvZ091dHB1dEhlYWRlcih1bnNpZ25lZCBzaG9ydCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKIAljaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24sIHVuc2lnbmVkIHNob3J0IHdfQWRkcmVzcywKLQlzdHJfQW5hbG9nT3V0cHV0SGVhZGVyICpzX0hlYWRlcik7CisJc3RydWN0IHN0cl9BbmFsb2dPdXRwdXRIZWFkZXIgKnNfSGVhZGVyKTsKIAogaW50IGlfRWVwcm9tUmVhZEFubG9nSW5wdXRIZWFkZXIodW5zaWduZWQgc2hvcnQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCiAJY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLCB1bnNpZ25lZCBzaG9ydCB3X0FkZHJlc3MsCkBAIC02MzUsNyArNjM1LDcgQEAKIAogfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHVuc2lnbmVkIGludCBkd19BZGRyZXNzIDogUENJIGVlcHJvbSBiYXNlIGFkZHJlc3MgICAgICAgICAgICAgICAgICB8CiAKLXwJCSAgICAgIHVuc2lnbmVkIHNob3J0ICAgIHdfb2Zmc2V0IDogT2Zmc2V0IG9mIHRoZSBhZHJlc3MgdG8gcmVhZCAgICAgICAgICAgICB8Cit8CQkgICAgICB1bnNpZ25lZCBzaG9ydCAgICB3X29mZnNldCA6IE9mZnNldCBvZiB0aGUgYWRkcmVzcyB0byByZWFkICAgICAgICAgICAgIHwKIAogfAkJICAgICAgdW5zaWduZWQgc2hvcnQgKiAgIHB3X1ZhbHVlIDogUENJIGVlcHJvbSAxNiBiaXQgcmVhZCB2YWx1ZS4gICAgICAgICAgICB8CiAKQEAgLTgxMSw3ICs4MTEsNyBAQAogCXN0cnVjdCBzdHJfRGlnaXRhbElucHV0SGVhZGVyIHNfRGlnaXRhbElucHV0SGVhZGVyOwogCXN0cnVjdCBzdHJfRGlnaXRhbE91dHB1dEhlYWRlciBzX0RpZ2l0YWxPdXRwdXRIZWFkZXI7CiAJLyogc3RydWN0IHN0cl9UaW1lck1haW5IZWFkZXIgICAgIHNfVGltZXJNYWluSGVhZGVyLHNfV2F0Y2hkb2dNYWluSGVhZGVyOyAqLwotCXN0cl9BbmFsb2dPdXRwdXRIZWFkZXIgc19BbmFsb2dPdXRwdXRIZWFkZXI7CisJc3RydWN0IHN0cl9BbmFsb2dPdXRwdXRIZWFkZXIgc19BbmFsb2dPdXRwdXRIZWFkZXI7CiAJc3RydWN0IHN0cl9BbmFsb2dJbnB1dEhlYWRlciBzX0FuYWxvZ0lucHV0SGVhZGVyOwogCiAJLyogUmVhZCBzaXplICovCkBAIC0xMDgxLDcgKzEwODEsNyBAQAogCiBpbnQgaV9FZXByb21SZWFkQW5sb2dPdXRwdXRIZWFkZXIodW5zaWduZWQgc2hvcnQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCiAJY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLCB1bnNpZ25lZCBzaG9ydCB3X0FkZHJlc3MsCi0Jc3RyX0FuYWxvZ091dHB1dEhlYWRlciAqc19IZWFkZXIpCisJc3RydWN0IHN0cl9BbmFsb2dPdXRwdXRIZWFkZXIgKnNfSGVhZGVyKQogewogCXVuc2lnbmVkIHNob3J0IHdfVGVtcDsKIAkvKiAgTm8gb2YgY2hhbm5lbHMgZm9yIDFzdCBoYXJkIGNvbXBvbmVudCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzEyMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzEyMC5jCmluZGV4IGY5M2RkZDQuLjg1MWY3MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMxMjAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMTIwLmMKQEAgLTEwOTAsMTMgKzEwOTAsMTMgQEAKICAqIGFuZCBwdXQgaW50byBpbnRvIGFuIGFycmF5IGFycmF5IHVzZWQgbWF5IGJlIGZvciBkaWZmZXJuZXQgcGFnZXMKICAqLwogCi0JCS8qICBETUEgU3RhcnQgQWRyZXNzIExvdyAqLworCQkvKiAgRE1BIFN0YXJ0IEFkZHJlc3MgTG93ICovCiAJCW91dHcoQVBDSTMxMjBfQUREX09OX01XQVJfTE9XLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMCk7CiAJCW91dHcoKGRldnByaXYtPnVsX0RtYUJ1ZmZlckh3WzBdICYgMHhGRkZGKSwKIAkJCWRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAyKTsKIAogCQkvKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQkJLyogRE1BIFN0YXJ0IEFkcmVzcyBIaWdoICovCisJCS8qIERNQSBTdGFydCBBZGRyZXNzIEhpZ2ggKi8KIAkJLyoqKioqKioqKioqKioqKioqKioqKioqKiovCiAJCW91dHcoQVBDSTMxMjBfQUREX09OX01XQVJfSElHSCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDApOwogCQlvdXR3KChkZXZwcml2LT51bF9EbWFCdWZmZXJId1swXSAvIDY1NTM2KSwKQEAgLTE3MzMsMTEgKzE3MzMsMTEgQEAKIAkJdmFyID0gZGV2cHJpdi0+dWxfRG1hQnVmZmVySHdbbmV4dF9kbWFfYnVmXTsKIAkJaGlnaF93b3JkID0gdmFyIC8gNjU1MzY7CiAKLQkJLyogRE1BIFN0YXJ0IEFkcmVzcyBMb3cgKi8KKwkJLyogRE1BIFN0YXJ0IEFkZHJlc3MgTG93ICovCiAJCW91dHcoQVBDSTMxMjBfQUREX09OX01XQVJfTE9XLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMCk7CiAJCW91dHcobG93X3dvcmQsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAyKTsKIAotCQkvKiBETUEgU3RhcnQgQWRyZXNzIEhpZ2ggKi8KKwkJLyogRE1BIFN0YXJ0IEFkZHJlc3MgSGlnaCAqLwogCQlvdXR3KEFQQ0kzMTIwX0FERF9PTl9NV0FSX0hJR0gsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAwKTsKIAkJb3V0dyhoaWdoX3dvcmQsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8wMzUuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMDM1LmMKaW5kZXggNmRmY2JlOC4uNGMwMGRmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8wMzUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzAzNS5jCkBAIC01LDMgKzUsNyBAQAogI2RlZmluZSBBRERJREFUQV9EUklWRVJfTkFNRQkiYWRkaV9hcGNpXzAzNSIKIAogI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzEwMzIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTAzMi5jCmluZGV4IDQ3MjJlYzguLjc4MzFjZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTAzMi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTAzMi5jCkBAIC0zLDMgKzMsNyBAQAogI2RlZmluZSBBRERJREFUQV9EUklWRVJfTkFNRQkiYWRkaV9hcGNpXzEwMzIiCiAKICNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xNTAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzE1MDAuYwppbmRleCBkYjNkYWZkLi5iZmQ4NGY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzE1MDAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzE1MDAuYwpAQCAtMywzICszLDcgQEAKICNkZWZpbmUgQURESURBVEFfRFJJVkVSX05BTUUJImFkZGlfYXBjaV8xNTAwIgogCiAjaW5jbHVkZSAiYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMiCisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTUxNi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xNTE2LmMKaW5kZXggZjU5MWJhZi4uYTEyZTJmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xNTE2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xNTE2LmMKQEAgLTMsMyArMyw3IEBACiAjZGVmaW5lIEFERElEQVRBX0RSSVZFUl9OQU1FCSJhZGRpX2FwY2lfMTUxNiIKIAogI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzE1NjQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTU2NC5jCmluZGV4IDZmNWM5MjMuLjFiOWQ1OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTU2NC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTU2NC5jCkBAIC0zLDMgKzMsNyBAQAogI2RlZmluZSBBRERJREFUQV9EUklWRVJfTkFNRQkiYWRkaV9hcGNpXzE1NjQiCiAKICNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xNnh4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzE2eHguYwppbmRleCAxZDkyNmFkLi5kNTQyMThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzE2eHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzE2eHguYwpAQCAtMywzICszLDcgQEAKICNkZWZpbmUgQURESURBVEFfRFJJVkVSX05BTUUJImFkZGlfYXBjaV8xNnh4IgogCiAjaW5jbHVkZSAiYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMiCisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMjAxNi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8yMDE2LmMKaW5kZXggNzI2NmU0MS4uZmE1MGM3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8yMDE2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8yMDE2LmMKQEAgLTMsMyArMyw3IEBACiAjZGVmaW5lIEFERElEQVRBX0RSSVZFUl9OQU1FCSJhZGRpX2FwY2lfMjAxNiIKIAogI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzIwMzIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMjAzMi5jCmluZGV4IGY2N2RhOTQuLjA3M2E4YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMjAzMi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMjAzMi5jCkBAIC0zLDMgKzMsNyBAQAogI2RlZmluZSBBRERJREFUQV9EUklWRVJfTkFNRQkiYWRkaV9hcGNpXzIwMzIiCiAKICNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8yMjAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzIyMDAuYwppbmRleCBiYzdmN2Q2Li5hZGZiYjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzIyMDAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzIyMDAuYwpAQCAtMywzICszLDcgQEAKICNkZWZpbmUgQURESURBVEFfRFJJVkVSX05BTUUJImFkZGlfYXBjaV8yMjAwIgogCiAjaW5jbHVkZSAiYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMiCisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMzAwMS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zMDAxLmMKaW5kZXggZDg2YzQyMC4uMDBhYzc2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zMDAxLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zMDAxLmMKQEAgLTMsMyArMyw3IEBACiAjZGVmaW5lIEFERElEQVRBX0RSSVZFUl9OQU1FCSJhZGRpX2FwY2lfMzAwMSIKIAogI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzMxMjAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMzEyMC5jCmluZGV4IDBiMjJjZjEuLmMzNTUxNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMzEyMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMzEyMC5jCkBAIC0zLDMgKzMsNyBAQAogI2RlZmluZSBBRERJREFUQV9EUklWRVJfTkFNRQkiYWRkaV9hcGNpXzMxMjAiCiAKICNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zNTAxLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzM1MDEuYwppbmRleCBkOGEwMWIxLi5kZDJjMWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzM1MDEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzM1MDEuYwpAQCAtMywzICszLDcgQEAKICNkZWZpbmUgQURESURBVEFfRFJJVkVSX05BTUUJImFkZGlfYXBjaV8zNTAxIgogCiAjaW5jbHVkZSAiYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMiCisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfM3h4eC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zeHh4LmMKaW5kZXggOTQyYmM5ZS4uMDMxNjFjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zeHh4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zeHh4LmMKQEAgLTMsMyArMyw3IEBACiAjZGVmaW5lIEFERElEQVRBX0RSSVZFUl9OQU1FCSJhZGRpX2FwY2lfM3h4eCIKIAogI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTYyMDguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpNjIwOC5jCmluZGV4IDcxMmI5ZTAuLjA3M2QwMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpNjIwOC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpNjIwOC5jCkBAIC0xMTksNyArMTE5LDQzIEBACiAJLmRldGFjaCA9IHBjaTYyMDhfZGV0YWNoLAogfTsKIAotQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfcGNpNjIwOCwgcGNpNjIwOF9wY2lfdGFibGUpOworc3RhdGljIGludCBfX2RldmluaXQgZHJpdmVyX3BjaTYyMDhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBkcml2ZXJfcGNpNjIwOC5kcml2ZXJfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkcml2ZXJfcGNpNjIwOF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXJfcGNpNjIwOF9wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IHBjaTYyMDhfcGNpX3RhYmxlLAorCS5wcm9iZSA9ICZkcml2ZXJfcGNpNjIwOF9wY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKCZkcml2ZXJfcGNpNjIwOF9wY2lfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX3BjaTYyMDhfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX3BjaTYyMDgpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJZHJpdmVyX3BjaTYyMDhfcGNpX2RyaXZlci5uYW1lID0gKGNoYXIgKilkcml2ZXJfcGNpNjIwOC5kcml2ZXJfbmFtZTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX3BjaTYyMDhfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfcGNpNjIwOF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX3BjaTYyMDhfcGNpX2RyaXZlcik7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfcGNpNjIwOCk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9wY2k2MjA4X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9wY2k2MjA4X2NsZWFudXBfbW9kdWxlKTsKIAogc3RhdGljIGludCBwY2k2MjA4X2ZpbmRfZGV2aWNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIGludCBidXMsIGludCBzbG90KTsKIHN0YXRpYyBpbnQKQEAgLTMxNSwxMiArMzUxLDEwIEBACiAKIHN0YXRpYyBpbnQgcGNpNjIwOF9maW5kX2RldmljZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBpbnQgYnVzLCBpbnQgc2xvdCkKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IE5VTEw7CiAJaW50IGk7CiAKLQlmb3IgKHBjaV9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKLQkgICAgIHBjaV9kZXYgIT0gTlVMTDsKLQkgICAgIHBjaV9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lfZGV2KSkgeworCWZvcl9lYWNoX3BjaV9kZXYocGNpX2RldikgewogCQlpZiAocGNpX2Rldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQURMSU5LKSB7CiAJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwY2k2MjA4X2JvYXJkcyk7IGkrKykgewogCQkJCWlmIChwY2k2MjA4X2JvYXJkc1tpXS5kZXZfaWQgPT0KQEAgLTQwOCwzICs0NDIsNyBAQAogCiAJcmV0dXJuIDA7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpNzIzMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k3MjMwLmMKaW5kZXggMjRhODJlYi4uNzJhNzI1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k3MjMwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k3MjMwLmMKQEAgLTkwLDcgKzkwLDcgQEAKIHN0YXRpYyBpbnQgYWRsX3BjaTcyMzBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCiAJc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldiA9IE5VTEw7CiAJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAJaW50IGJ1cywgc2xvdDsKIApAQCAtMTA2LDEwICsxMDYsNyBAQAogCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgMikgPCAwKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7Ci0JCXBjaWRldiAhPSBOVUxMOwotCQlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lkZXYpKSB7Ci0KKwlmb3JfZWFjaF9wY2lfZGV2KHBjaWRldikgewogCQlpZiAocGNpZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BRExJTksgJiYKIAkJCXBjaWRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUENJNzIzMCkgewogCQkJaWYgKGJ1cyB8fCBzbG90KSB7CkBAIC0yMDMsNCArMjAwLDQ2IEBACiAJcmV0dXJuIDI7CiB9CiAKLUNPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2FkbF9wY2k3MjMwLCBhZGxfcGNpNzIzMF9wY2lfdGFibGUpOworc3RhdGljIGludCBfX2RldmluaXQgZHJpdmVyX2FkbF9wY2k3MjMwX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZAorCQkJCQkJICAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgZHJpdmVyX2FkbF9wY2k3MjMwLmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRyaXZlcl9hZGxfcGNpNzIzMF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXJfYWRsX3BjaTcyMzBfcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBhZGxfcGNpNzIzMF9wY2lfdGFibGUsCisJLnByb2JlID0gJmRyaXZlcl9hZGxfcGNpNzIzMF9wY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKCZkcml2ZXJfYWRsX3BjaTcyMzBfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9hZGxfcGNpNzIzMF9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfYWRsX3BjaTcyMzApOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJZHJpdmVyX2FkbF9wY2k3MjMwX3BjaV9kcml2ZXIubmFtZSA9CisJICAgIChjaGFyICopZHJpdmVyX2FkbF9wY2k3MjMwLmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfYWRsX3BjaTcyMzBfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfYWRsX3BjaTcyMzBfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9hZGxfcGNpNzIzMF9wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9hZGxfcGNpNzIzMCk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9hZGxfcGNpNzIzMF9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfYWRsX3BjaTcyMzBfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTcyOTYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpNzI5Ni5jCmluZGV4IDg2MDI4NjUuLmYyOGZlNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpNzI5Ni5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpNzI5Ni5jCkBAIC03Nyw3ICs3Nyw3IEBACiBzdGF0aWMgaW50IGFkbF9wY2k3Mjk2X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJICAgICAgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldiA9IE5VTEw7CiAJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAJaW50IGJ1cywgc2xvdDsKIAlpbnQgcmV0OwpAQCAtOTQsMTAgKzk0LDcgQEAKIAlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDQpIDwgMCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlmb3IgKHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOwotCSAgICAgcGNpZGV2ICE9IE5VTEw7Ci0JICAgICBwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lkZXYpKSB7Ci0KKwlmb3JfZWFjaF9wY2lfZGV2KHBjaWRldikgewogCQlpZiAocGNpZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BRExJTksgJiYKIAkJICAgIHBjaWRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUENJNzI5NikgewogCQkJaWYgKGJ1cyB8fCBzbG90KSB7CkBAIC0xNzcsNCArMTc0LDQ2IEBACiAJcmV0dXJuIDA7CiB9CiAKLUNPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2FkbF9wY2k3Mjk2LCBhZGxfcGNpNzI5Nl9wY2lfdGFibGUpOworc3RhdGljIGludCBfX2RldmluaXQgZHJpdmVyX2FkbF9wY2k3Mjk2X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZAorCQkJCQkJICAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgZHJpdmVyX2FkbF9wY2k3Mjk2LmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRyaXZlcl9hZGxfcGNpNzI5Nl9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXJfYWRsX3BjaTcyOTZfcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBhZGxfcGNpNzI5Nl9wY2lfdGFibGUsCisJLnByb2JlID0gJmRyaXZlcl9hZGxfcGNpNzI5Nl9wY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKCZkcml2ZXJfYWRsX3BjaTcyOTZfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9hZGxfcGNpNzI5Nl9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfYWRsX3BjaTcyOTYpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJZHJpdmVyX2FkbF9wY2k3Mjk2X3BjaV9kcml2ZXIubmFtZSA9CisJICAgIChjaGFyICopZHJpdmVyX2FkbF9wY2k3Mjk2LmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfYWRsX3BjaTcyOTZfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfYWRsX3BjaTcyOTZfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9hZGxfcGNpNzI5Nl9wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9hZGxfcGNpNzI5Nik7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9hZGxfcGNpNzI5Nl9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfYWRsX3BjaTcyOTZfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTc0MzIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpNzQzMi5jCmluZGV4IGI1YTk0OTkuLjI2MmRhN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpNzQzMi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpNzQzMi5jCkBAIC04Niw3ICs4Niw3IEBACiBzdGF0aWMgaW50IGFkbF9wY2k3NDMyX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJICAgICAgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldiA9IE5VTEw7CiAJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAJaW50IGJ1cywgc2xvdDsKIApAQCAtMTAyLDEwICsxMDIsNyBAQAogCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgMikgPCAwKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7Ci0JICAgICBwY2lkZXYgIT0gTlVMTDsKLQkgICAgIHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaWRldikpIHsKLQorCWZvcl9lYWNoX3BjaV9kZXYocGNpZGV2KSB7CiAJCWlmIChwY2lkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FETElOSyAmJgogCQkgICAgcGNpZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9QQ0k3NDMyKSB7CiAJCQlpZiAoYnVzIHx8IHNsb3QpIHsKQEAgLTIxMCw0ICsyMDcsNDYgQEAKIAlyZXR1cm4gMjsKIH0KIAotQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfYWRsX3BjaTc0MzIsIGFkbF9wY2k3NDMyX3BjaV90YWJsZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBkcml2ZXJfYWRsX3BjaTc0MzJfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkCisJCQkJCQkgICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBkcml2ZXJfYWRsX3BjaTc0MzIuZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX2FkbF9wY2k3NDMyX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9hZGxfcGNpNzQzMl9wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IGFkbF9wY2k3NDMyX3BjaV90YWJsZSwKKwkucHJvYmUgPSAmZHJpdmVyX2FkbF9wY2k3NDMyX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9hZGxfcGNpNzQzMl9wY2lfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2FkbF9wY2k3NDMyX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9hZGxfcGNpNzQzMik7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfYWRsX3BjaTc0MzJfcGNpX2RyaXZlci5uYW1lID0KKwkgICAgKGNoYXIgKilkcml2ZXJfYWRsX3BjaTc0MzIuZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9hZGxfcGNpNzQzMl9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9hZGxfcGNpNzQzMl9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2FkbF9wY2k3NDMyX3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2FkbF9wY2k3NDMyKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2FkbF9wY2k3NDMyX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9hZGxfcGNpNzQzMl9jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpODE2NC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k4MTY0LmMKaW5kZXggZGEyNTZhMS4uNzY3YTU5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k4MTY0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k4MTY0LmMKQEAgLTEyNSw3ICsxMjUsNyBAQAogc3RhdGljIGludCBhZGxfcGNpODE2NF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAkJCSAgICAgIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXYgPSBOVUxMOwogCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCWludCBidXMsIHNsb3Q7CiAKQEAgLTE0MiwxMCArMTQyLDcgQEAKIAlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDQpIDwgMCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlmb3IgKHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOwotCSAgICAgcGNpZGV2ICE9IE5VTEw7Ci0JICAgICBwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lkZXYpKSB7Ci0KKwlmb3JfZWFjaF9wY2lfZGV2KHBjaWRldikgewogCQlpZiAocGNpZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BRExJTksgJiYKIAkJICAgIHBjaWRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUENJODE2NCkgewogCQkJaWYgKGJ1cyB8fCBzbG90KSB7CkBAIC0zODksNCArMzg2LDQ2IEBACiAJcmV0dXJuIDI7CiB9CiAKLUNPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2FkbF9wY2k4MTY0LCBhZGxfcGNpODE2NF9wY2lfdGFibGUpOworc3RhdGljIGludCBfX2RldmluaXQgZHJpdmVyX2FkbF9wY2k4MTY0X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZAorCQkJCQkJICAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgZHJpdmVyX2FkbF9wY2k4MTY0LmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRyaXZlcl9hZGxfcGNpODE2NF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXJfYWRsX3BjaTgxNjRfcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBhZGxfcGNpODE2NF9wY2lfdGFibGUsCisJLnByb2JlID0gJmRyaXZlcl9hZGxfcGNpODE2NF9wY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKCZkcml2ZXJfYWRsX3BjaTgxNjRfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9hZGxfcGNpODE2NF9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfYWRsX3BjaTgxNjQpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJZHJpdmVyX2FkbF9wY2k4MTY0X3BjaV9kcml2ZXIubmFtZSA9CisJICAgIChjaGFyICopZHJpdmVyX2FkbF9wY2k4MTY0LmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfYWRsX3BjaTgxNjRfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfYWRsX3BjaTgxNjRfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9hZGxfcGNpODE2NF9wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9hZGxfcGNpODE2NCk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9hZGxfcGNpODE2NF9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfYWRsX3BjaTgxNjRfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTkxMTEuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpOTExMS5jCmluZGV4IDM5ZDExMmIuLmIyYTAyYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpOTExMS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpOTExMS5jCkBAIC0zOCw4ICszOCw4IEBACiAgIC0gZG9faW5zbiByZWFkL3dyaXRlCiAgIC0gYWlfZG9fY21kIG1vZGUgd2l0aCB0aGUgZm9sbG93aW5nIHNvdXJjZXM6CiAKLSAgICAtIHN0YXJ0X3NyYyAJCVRSSUdfTk9XCi0gICAgLSBzY2FuX2JlZ2luX3NyYyAJCVRSSUdfRk9MTE9XCVRSSUdfVElNRVIJVFJJR19FWFQKKyAgICAtIHN0YXJ0X3NyYwkJCVRSSUdfTk9XCisgICAgLSBzY2FuX2JlZ2luX3NyYwkJVFJJR19GT0xMT1cJVFJJR19USU1FUglUUklHX0VYVAogICAgIC0gY29udmVydF9zcmMJCQkJVFJJR19USU1FUglUUklHX0VYVAogICAgIC0gc2Nhbl9lbmRfc3JjCQlUUklHX0NPVU5UCiAgICAgLSBzdG9wX3NyYwkJCVRSSUdfQ09VTlQJVFJJR19OT05FCkBAIC02OCw4ICs2OCw5IEBACiBUT0RPOgogCiAgIC0gUmVhbGx5IHRlc3QgaW1wbGVtZW50ZWQgZnVuY3Rpb25hbGl0eS4KLSAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIFBDSS05MTExREcgd2l0aCBhIHByb2JlIHJvdXRpbmUgdG8gaWRlbnRpZnkgdGhlIGNhcmQgdHlwZQotICAgIChwZXJoYXBzIHdpdGggdGhlIGhlbHAgb2YgdGhlIGNoYW5uZWwgbnVtYmVyIHJlYWRiYWNrIG9mIHRoZSBBL0QgRGF0YSByZWdpc3RlcikuCisgIC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBQQ0ktOTExMURHIHdpdGggYSBwcm9iZSByb3V0aW5lIHRvIGlkZW50aWZ5IHRoZSBjYXJkCisgICAgdHlwZSAocGVyaGFwcyB3aXRoIHRoZSBoZWxwIG9mIHRoZSBjaGFubmVsIG51bWJlciByZWFkYmFjayBvZiB0aGUgQS9EIERhdGEKKyAgICByZWdpc3RlcikuCiAgIC0gQWRkIGV4dGVybmFsIG11bHRpcGxleGVyIHN1cHBvcnQuCiAKICovCkBAIC04MywxMiArODQsMTIgQEAKICNpbmNsdWRlICJjb21lZGlfcGNpLmgiCiAjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCiAKLSNkZWZpbmUgUENJOTExMV9EUklWRVJfTkFNRSAJImFkbF9wY2k5MTExIgotI2RlZmluZSBQQ0k5MTExX0hSX0RFVklDRV9JRCAJMHg5MTExCisjZGVmaW5lIFBDSTkxMTFfRFJJVkVSX05BTUUJImFkbF9wY2k5MTExIgorI2RlZmluZSBQQ0k5MTExX0hSX0RFVklDRV9JRAkweDkxMTEKIAogLyogIFRPRE86IEFkZCBvdGhlciBwY2k5MTExIGJvYXJkIGlkICovCiAKLSNkZWZpbmUgUENJOTExMV9JT19SQU5HRSAJMHgwMTAwCisjZGVmaW5lIFBDSTkxMTFfSU9fUkFOR0UJMHgwMTAwCiAKICNkZWZpbmUgUENJOTExMV9GSUZPX0hBTEZfU0laRQk1MTIKIApAQCAtMTM0LDI3ICsxMzUsMjkgQEAKIAogLyogSU8gYWRkcmVzcyBtYXAgKi8KIAotI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX0FEX0ZJRk9fVkFMVUUgCQkJMHgwMAkvKiAgQUQgRGF0YSBzdG9yZWQgaW4gRklGTyAqLwotI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX0RBX09VVFBVVCAJCQkweDAwCi0jZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfRElHSVRBTF9JTyAJCQkweDAyCi0jZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfRVhURU5ERURfSU9fUE9SVFMgCQkweDA0Ci0jZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfQURfQ0hBTk5FTF9DT05UUk9MIAkJMHgwNgkvKiAgQ2hhbm5lbCBzZWxlY3Rpb24gKi8KLSNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9BRF9DSEFOTkVMX1JFQURCQUNLIAkJMHgwNgotI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX0lOUFVUX1NJR05BTF9SQU5HRSAJCTB4MDgKLSNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9SQU5HRV9TVEFUVVNfUkVBREJBQ0sgCQkweDA4Ci0jZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfVFJJR0dFUl9NT0RFX0NPTlRST0wgCQkweDBBCi0jZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfQURfTU9ERV9JTlRFUlJVUFRfUkVBREJBQ0sgCTB4MEEKLSNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9TT0ZUV0FSRV9UUklHR0VSIAkJMHgwRQotI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX0lOVEVSUlVQVF9DT05UUk9MIAkJMHgwQworI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX0FEX0ZJRk9fVkFMVUUJCQkweDAwIC8qIEFEIERhdGEgc3RvcmVkCisJCQkJCQkJCWluIEZJRk8gKi8KKyNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9EQV9PVVRQVVQJCQkweDAwCisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfRElHSVRBTF9JTwkJCTB4MDIKKyNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9FWFRFTkRFRF9JT19QT1JUUwkJMHgwNAorI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX0FEX0NIQU5ORUxfQ09OVFJPTAkJMHgwNiAvKiBDaGFubmVsCisJCQkJCQkJCXNlbGVjdGlvbiAqLworI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX0FEX0NIQU5ORUxfUkVBREJBQ0sJCTB4MDYKKyNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9JTlBVVF9TSUdOQUxfUkFOR0UJCTB4MDgKKyNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9SQU5HRV9TVEFUVVNfUkVBREJBQ0sJCTB4MDgKKyNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9UUklHR0VSX01PREVfQ09OVFJPTAkJMHgwQQorI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX0FEX01PREVfSU5URVJSVVBUX1JFQURCQUNLCTB4MEEKKyNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9TT0ZUV0FSRV9UUklHR0VSCQkweDBFCisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfSU5URVJSVVBUX0NPTlRST0wJCTB4MEMKICNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl84MjU0X0NPVU5URVJfMAkJCTB4NDAKICNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl84MjU0X0NPVU5URVJfMQkJCTB4NDIKLSNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl84MjU0X0NPVU5URVJfMiAJCTBYNDQKKyNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl84MjU0X0NPVU5URVJfMgkJCTBYNDQKICNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl84MjU0X0NPTlRST0wJCQkweDQ2Ci0jZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfSU5URVJSVVBUX0NMRUFSIAkJMHg0OAorI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX0lOVEVSUlVQVF9DTEVBUgkJMHg0OAogCi0jZGVmaW5lIFBDSTkxMTFfVFJJR0dFUl9NQVNLIAkJCQkweDBGCi0jZGVmaW5lIFBDSTkxMTFfUFRSR19PRkYgCQkJCSgwIDw8IDMpCi0jZGVmaW5lIFBDSTkxMTFfUFRSR19PTiAJCQkJKDEgPDwgMykKKyNkZWZpbmUgUENJOTExMV9UUklHR0VSX01BU0sJCQkJMHgwRgorI2RlZmluZSBQQ0k5MTExX1BUUkdfT0ZGCQkJCSgwIDw8IDMpCisjZGVmaW5lIFBDSTkxMTFfUFRSR19PTgkJCQkJKDEgPDwgMykKICNkZWZpbmUgUENJOTExMV9FSVRTX0VYVEVSTkFMCQkJCSgxIDw8IDIpCiAjZGVmaW5lIFBDSTkxMTFfRUlUU19JTlRFUk5BTAkJCQkoMCA8PCAyKQogI2RlZmluZSBQQ0k5MTExX1RQU1RfU09GVFdBUkVfVFJJR0dFUgkJCSgwIDw8IDEpCkBAIC0xNjQsOSArMTY3LDkgQEAKIAogI2RlZmluZSBQQ0k5MTExX0lTQzBfU0VUX0lSUV9PTl9FTkRJTkdfT0ZfQURfQ09OVkVSU0lPTiAoMCA8PCAwKQogI2RlZmluZSBQQ0k5MTExX0lTQzBfU0VUX0lSUV9PTl9GSUZPX0hBTEZfRlVMTAkJKDEgPDwgMCkKLSNkZWZpbmUgUENJOTExMV9JU0MxX1NFVF9JUlFfT05fVElNRVJfVElDSyAgCQkoMCA8PCAxKQotI2RlZmluZSBQQ0k5MTExX0lTQzFfU0VUX0lSUV9PTl9FWFRfVFJHIAkJKDEgPDwgMSkKLSNkZWZpbmUgUENJOTExMV9GRkVOX1NFVF9GSUZPX0VOQUJMRSAJCQkoMCA8PCAyKQorI2RlZmluZSBQQ0k5MTExX0lTQzFfU0VUX0lSUV9PTl9USU1FUl9USUNLCQkoMCA8PCAxKQorI2RlZmluZSBQQ0k5MTExX0lTQzFfU0VUX0lSUV9PTl9FWFRfVFJHCQkJKDEgPDwgMSkKKyNkZWZpbmUgUENJOTExMV9GRkVOX1NFVF9GSUZPX0VOQUJMRQkJCSgwIDw8IDIpCiAjZGVmaW5lIFBDSTkxMTFfRkZFTl9TRVRfRklGT19ESVNBQkxFCQkJKDEgPDwgMikKIAogI2RlZmluZSBQQ0k5MTExX0NIQU5ORUxfTUFTSwkJCQkweDBGCkBAIC0xNzcsNyArMTgwLDcgQEAKICNkZWZpbmUgUENJOTExMV9GSUZPX0ZVTExfTUFTSwkJCQkweDQwCiAjZGVmaW5lIFBDSTkxMTFfQURfQlVTWV9NQVNLCQkJCTB4ODAKIAotI2RlZmluZSBQQ0k5MTExX0lPX0JBU0UgZGV2LT5pb2Jhc2UKKyNkZWZpbmUgUENJOTExMV9JT19CQVNFIChkZXYtPmlvYmFzZSkKIAogLyoKICAqIERlZmluZSBpbmxpbmVkIGZ1bmN0aW9uCkBAIC0xODksOCArMTkyLDkgQEAKICNkZWZpbmUgcGNpOTExMV90cmlnZ2VyX2FuZF9hdXRvc2Nhbl9zZXQoZmxhZ3MpIFwKICAgb3V0YihmbGFncywgUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfVFJJR0dFUl9NT0RFX0NPTlRST0wpCiAKLSNkZWZpbmUgcGNpOTExMV9pbnRlcnJ1cHRfYW5kX2ZpZm9fZ2V0KCkgXAotICAoKGluYihQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9BRF9NT0RFX0lOVEVSUlVQVF9SRUFEQkFDSykgPj4gNCkgJjB4MDMpCisjZGVmaW5lIHBjaTkxMTFfaW50ZXJydXB0X2FuZF9maWZvX2dldCgpCQkJCSAgIFwKKyAgKChpbmIoUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfQURfTU9ERV9JTlRFUlJVUFRfUkVBREJBQ0spID4+IDQpIFwKKyAgICYweDAzKQogCiAjZGVmaW5lIHBjaTkxMTFfaW50ZXJydXB0X2FuZF9maWZvX3NldChmbGFncykgXAogICBvdXRiKGZsYWdzLCBQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9JTlRFUlJVUFRfQ09OVFJPTCkKQEAgLTIwMSw0NSArMjA1LDU2IEBACiAjZGVmaW5lIHBjaTkxMTFfc29mdHdhcmVfdHJpZ2dlcigpIFwKICAgb3V0YigwLCBQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9TT0ZUV0FSRV9UUklHR0VSKQogCi0jZGVmaW5lIHBjaTkxMTFfZmlmb19yZXNldCgpIFwKLSAgb3V0YihQQ0k5MTExX0ZGRU5fU0VUX0ZJRk9fRU5BQkxFLCBQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9JTlRFUlJVUFRfQ09OVFJPTCk7IFwKLSAgb3V0YihQQ0k5MTExX0ZGRU5fU0VUX0ZJRk9fRElTQUJMRSwgUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfSU5URVJSVVBUX0NPTlRST0wpOyBcCi0gIG91dGIoUENJOTExMV9GRkVOX1NFVF9GSUZPX0VOQUJMRSwgUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfSU5URVJSVVBUX0NPTlRST0wpCisjZGVmaW5lIHBjaTkxMTFfZmlmb19yZXNldCgpIGRvIHsJCQkJCVwKKyAgb3V0YihQQ0k5MTExX0ZGRU5fU0VUX0ZJRk9fRU5BQkxFLAkJCQkJXAorICAgICAgIFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX0lOVEVSUlVQVF9DT05UUk9MKTsJCVwKKyAgb3V0YihQQ0k5MTExX0ZGRU5fU0VUX0ZJRk9fRElTQUJMRSwJCQkJCVwKKyAgICAgICBQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9JTlRFUlJVUFRfQ09OVFJPTCk7CQlcCisgIG91dGIoUENJOTExMV9GRkVOX1NFVF9GSUZPX0VOQUJMRSwJCQkJCVwKKyAgICAgICBQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9JTlRFUlJVUFRfQ09OVFJPTCk7CQlcCisgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgcGNpOTExMV9pc19maWZvX2Z1bGwoKSBcCiAgICgoaW5iKFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX1JBTkdFX1NUQVRVU19SRUFEQkFDSykmIFwKLSAgICBQQ0k5MTExX0ZJRk9fRlVMTF9NQVNLKT09MCkKKyAgICBQQ0k5MTExX0ZJRk9fRlVMTF9NQVNLKSA9PSAwKQogCiAjZGVmaW5lIHBjaTkxMTFfaXNfZmlmb19oYWxmX2Z1bGwoKSBcCiAgICgoaW5iKFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX1JBTkdFX1NUQVRVU19SRUFEQkFDSykmIFwKLSAgICBQQ0k5MTExX0ZJRk9fSEFMRl9GVUxMX01BU0spPT0wKQorICAgIFBDSTkxMTFfRklGT19IQUxGX0ZVTExfTUFTSykgPT0gMCkKIAogI2RlZmluZSBwY2k5MTExX2lzX2ZpZm9fZW1wdHkoKSBcCiAgICgoaW5iKFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX1JBTkdFX1NUQVRVU19SRUFEQkFDSykmIFwKLSAgICBQQ0k5MTExX0ZJRk9fRU1QVFlfTUFTSyk9PTApCisgICAgUENJOTExMV9GSUZPX0VNUFRZX01BU0spID09IDApCiAKLSNkZWZpbmUgcGNpOTExMV9haV9jaGFubmVsX3NldChjaGFubmVsKSBcCi0gIG91dGIoKGNoYW5uZWwpJlBDSTkxMTFfQ0hBTk5FTF9NQVNLLCBQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9BRF9DSEFOTkVMX0NPTlRST0wpCisjZGVmaW5lIHBjaTkxMTFfYWlfY2hhbm5lbF9zZXQoY2hhbm5lbCkJCQkJCVwKKyAgb3V0YigoY2hhbm5lbCkmUENJOTExMV9DSEFOTkVMX01BU0ssCQkJCQlcCisgICAgICAgUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfQURfQ0hBTk5FTF9DT05UUk9MKQogCi0jZGVmaW5lIHBjaTkxMTFfYWlfY2hhbm5lbF9nZXQoKSBcCi0gIGluYihQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9BRF9DSEFOTkVMX1JFQURCQUNLKSZQQ0k5MTExX0NIQU5ORUxfTUFTSworI2RlZmluZSBwY2k5MTExX2FpX2NoYW5uZWxfZ2V0KCkJCQkJCVwKKyAgKGluYihQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9BRF9DSEFOTkVMX1JFQURCQUNLKQkJXAorICAgJlBDSTkxMTFfQ0hBTk5FTF9NQVNLKQogCi0jZGVmaW5lIHBjaTkxMTFfYWlfcmFuZ2Vfc2V0KHJhbmdlKSBcCi0gIG91dGIoKHJhbmdlKSZQQ0k5MTExX1JBTkdFX01BU0ssIFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX0lOUFVUX1NJR05BTF9SQU5HRSkKKyNkZWZpbmUgcGNpOTExMV9haV9yYW5nZV9zZXQocmFuZ2UpCQkJCQlcCisgIG91dGIoKHJhbmdlKSZQQ0k5MTExX1JBTkdFX01BU0ssCQkJCQlcCisgICAgICAgUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfSU5QVVRfU0lHTkFMX1JBTkdFKQogCi0jZGVmaW5lIHBjaTkxMTFfYWlfcmFuZ2VfZ2V0KCkgXAotICBpbmIoUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfUkFOR0VfU1RBVFVTX1JFQURCQUNLKSZQQ0k5MTExX1JBTkdFX01BU0sKKyNkZWZpbmUgcGNpOTExMV9haV9yYW5nZV9nZXQoKQkJCQkJCVwKKyAgKGluYihQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9SQU5HRV9TVEFUVVNfUkVBREJBQ0spCQlcCisgICAmUENJOTExMV9SQU5HRV9NQVNLKQogCi0jZGVmaW5lIHBjaTkxMTFfYWlfZ2V0X2RhdGEoKSBcCi0gICgoaW53KFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX0FEX0ZJRk9fVkFMVUUpPj40KSZQQ0k5MTExX0FJX1JFU09MVVRJT05fTUFTSykgXAotICBeIFBDSTkxMTFfQUlfUkVTT0xVVElPTl8yX0NNUF9CSVQKKyNkZWZpbmUgcGNpOTExMV9haV9nZXRfZGF0YSgpCQkJCQkJXAorICAoKChpbncoUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfQURfRklGT19WQUxVRSk+PjQpCQlcCisgICAgJlBDSTkxMTFfQUlfUkVTT0xVVElPTl9NQVNLKQkJCQkJXAorICAgXiBQQ0k5MTExX0FJX1JFU09MVVRJT05fMl9DTVBfQklUKQogCi0jZGVmaW5lIHBjaTkxMTFfaHJfYWlfZ2V0X2RhdGEoKSBcCi0gIChpbncoUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfQURfRklGT19WQUxVRSkgJiBQQ0k5MTExX0hSX0FJX1JFU09MVVRJT05fTUFTSykgXAotICBeIFBDSTkxMTFfSFJfQUlfUkVTT0xVVElPTl8yX0NNUF9CSVQKKyNkZWZpbmUgcGNpOTExMV9ocl9haV9nZXRfZGF0YSgpCQkJCQlcCisgICgoaW53KFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX0FEX0ZJRk9fVkFMVUUpCQkJXAorICAgICYgUENJOTExMV9IUl9BSV9SRVNPTFVUSU9OX01BU0spCQkJCQlcCisgICBeIFBDSTkxMTFfSFJfQUlfUkVTT0xVVElPTl8yX0NNUF9CSVQpCiAKLSNkZWZpbmUgcGNpOTExMV9hb19zZXRfZGF0YShkYXRhKSBcCi0gIG91dHcoZGF0YSZQQ0k5MTExX0FPX1JFU09MVVRJT05fTUFTSywgUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfREFfT1VUUFVUKQorI2RlZmluZSBwY2k5MTExX2FvX3NldF9kYXRhKGRhdGEpCQkJCQlcCisgIG91dHcoZGF0YSZQQ0k5MTExX0FPX1JFU09MVVRJT05fTUFTSywJCQkJCVwKKyAgICAgICBQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9EQV9PVVRQVVQpCiAKICNkZWZpbmUgcGNpOTExMV9kaV9nZXRfYml0cygpIFwKICAgaW53KFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX0RJR0lUQUxfSU8pCkBAIC0yODQsMTIgKzI5OSwxMSBAQAogfTsKIAogc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHBjaTkxMTFfcGNpX3RhYmxlKSA9IHsKLQl7Ci0JUENJX1ZFTkRPUl9JRF9BRExJTkssIFBDSTkxMTFfSFJfREVWSUNFX0lELCBQQ0lfQU5ZX0lELAotCQkgICAgUENJX0FOWV9JRCwgMCwgMCwgMH0sCi0JICAgIC8qIHsgUENJX1ZFTkRPUl9JRF9BRExJTkssIFBDSTkxMTFfSEdfREVWSUNFX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sICovCi0JewotCTB9CisJeyBQQ0lfVkVORE9SX0lEX0FETElOSywgUENJOTExMV9IUl9ERVZJQ0VfSUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJICAwLCAwLCAwIH0sCisJLyogeyBQQ0lfVkVORE9SX0lEX0FETElOSywgUENJOTExMV9IR19ERVZJQ0VfSUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJICogICAwLCAwLCAwIH0sICovCisJeyAwIH0KIH07CiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwY2k5MTExX3BjaV90YWJsZSk7CkBAIC0zMzcsNyArMzUxLDQzIEBACiAJLmRldGFjaCA9IHBjaTkxMTFfZGV0YWNoLAogfTsKIAotQ09NRURJX1BDSV9JTklUQ0xFQU5VUChwY2k5MTExX2RyaXZlciwgcGNpOTExMV9wY2lfdGFibGUpOworc3RhdGljIGludCBfX2RldmluaXQgcGNpOTExMV9kcml2ZXJfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBwY2k5MTExX2RyaXZlci5kcml2ZXJfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBwY2k5MTExX2RyaXZlcl9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBwY2k5MTExX2RyaXZlcl9wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IHBjaTkxMTFfcGNpX3RhYmxlLAorCS5wcm9iZSA9ICZwY2k5MTExX2RyaXZlcl9wY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKCZwY2k5MTExX2RyaXZlcl9wY2lfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgcGNpOTExMV9kcml2ZXJfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmcGNpOTExMV9kcml2ZXIpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJcGNpOTExMV9kcml2ZXJfcGNpX2RyaXZlci5uYW1lID0gKGNoYXIgKilwY2k5MTExX2RyaXZlci5kcml2ZXJfbmFtZTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcGNpOTExMV9kcml2ZXJfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwY2k5MTExX2RyaXZlcl9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcGNpOTExMV9kcml2ZXJfcGNpX2RyaXZlcik7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZwY2k5MTExX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBjaTkxMTFfZHJpdmVyX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KHBjaTkxMTFfZHJpdmVyX2NsZWFudXBfbW9kdWxlKTsKIAogLyogIFByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgKi8KIApAQCAtMzQ1LDcgKzM5NSw4IEBACiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZpY2U7CiAJdW5zaWduZWQgbG9uZyBpb19yYW5nZTsJLyogIFBDSTY1MDMgaW8gcmFuZ2UgKi8KIAotCXVuc2lnbmVkIGxvbmcgbGNyX2lvX2Jhc2U7CS8qICBMb2NhbCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgbGNyX2lvX2Jhc2U7IC8qIExvY2FsIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgYmFzZQorCQkJCSAgICAqIGFkZHJlc3MgKi8KIAl1bnNpZ25lZCBsb25nIGxjcl9pb19yYW5nZTsKIAogCWludCBzdG9wX2NvdW50ZXI7CkBAIC0zNTgsNyArNDA5LDggQEAKIAogCWludCBhb19yZWFkYmFjazsJLyogIExhc3Qgd3JpdHRlbiBhbmFsb2cgb3V0cHV0IGRhdGEgKi8KIAotCXVuc2lnbmVkIGludCB0aW1lcl9kaXZpc29yXzE7CS8qICBEaXZpc29yIHZhbHVlcyBmb3IgdGhlIDgyNTQgdGltZXIgcGFjZXIgKi8KKwl1bnNpZ25lZCBpbnQgdGltZXJfZGl2aXNvcl8xOyAvKiBEaXZpc29yIHZhbHVlcyBmb3IgdGhlIDgyNTQgdGltZXIKKwkJCQkgICAgICAgKiBwYWNlciAqLwogCXVuc2lnbmVkIGludCB0aW1lcl9kaXZpc29yXzI7CiAKIAlpbnQgaXNfdmFsaWQ7CQkvKiAgSXMgZGV2aWNlIHZhbGlkICovCkBAIC0zNjYsNyArNDE4LDcgQEAKIAlzaG9ydCBhaV9ib3VuY2VfYnVmZmVyWzIgKiBQQ0k5MTExX0ZJRk9fSEFMRl9TSVpFXTsKIH07CiAKLSNkZWZpbmUgZGV2X3ByaXZhdGUgCSgoc3RydWN0IHBjaTkxMTFfcHJpdmF0ZV9kYXRhICopZGV2LT5wcml2YXRlKQorI2RlZmluZSBkZXZfcHJpdmF0ZQkoKHN0cnVjdCBwY2k5MTExX3ByaXZhdGVfZGF0YSAqKWRldi0+cHJpdmF0ZSkKIAogLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogIFBMWDkwNTAgU0VDVElPTiAqLwpAQCAtNTQ4LDEwICs2MDAsMTIgQEAKIAogLyogIFRlc3QgYW5hbG9nIGlucHV0IGNvbW1hbmQgKi8KIAotI2RlZmluZSBwY2k5MTExX2NoZWNrX3RyaWdnZXJfc3JjKHNyYywgZmxhZ3MpIFwKLSAgdG1wID0gc3JjOyBcCi0gIHNyYyAmPSBmbGFnczsgXAotICBpZiAoIXNyYyB8fCB0bXAgIT0gc3JjKSBlcnJvcisrCisjZGVmaW5lIHBjaTkxMTFfY2hlY2tfdHJpZ2dlcl9zcmMoc3JjLCBmbGFncykJZG8gewkJCVwKKwkJdG1wID0gc3JjOwkJCQkJCVwKKwkJc3JjICY9IGZsYWdzOwkJCQkJCVwKKwkJaWYgKCFzcmMgfHwgdG1wICE9IHNyYykJCQkJCVwKKwkJCWVycm9yKys7CQkJCQlcCisJfSB3aGlsZSAoZmFsc2UpOwogCiBzdGF0aWMgaW50CiBwY2k5MTExX2FpX2RvX2NtZF90ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCkBAIC01NzUsNyArNjI5LDggQEAKIAlpZiAoZXJyb3IpCiAJCXJldHVybiAxOwogCi0JLyogIHN0ZXAgMiA6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCS8qICBzdGVwIDIgOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5CisJICogIGNvbXBhdGlibGUgKi8KIAogCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVykKIAkJZXJyb3IrKzsKQEAgLTYzNyw3ICs2OTIsOCBAQAogCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gYm9hcmQtPmFpX2FjcXVpc2l0aW9uX3BlcmlvZF9taW5fbnM7CiAJCWVycm9yKys7CiAJfQotCWlmICgoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykgJiYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gMCkpIHsKKwlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cpCisJICAgICYmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApKSB7CiAJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOwogCQllcnJvcisrOwogCX0KQEAgLTEyMTYsNyArMTI3Miw3IEBACiB7CiAJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnN1YmRldmljZTsKIAl1bnNpZ25lZCBsb25nIGlvX2Jhc2UsIGlvX3JhbmdlLCBsY3JfaW9fYmFzZSwgbGNyX2lvX3JhbmdlOwotCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2aWNlOworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2aWNlID0gTlVMTDsKIAlpbnQgZXJyb3IsIGk7CiAJY29uc3Qgc3RydWN0IHBjaTkxMTFfYm9hcmQgKmJvYXJkOwogCkBAIC0xMjI2LDE3ICsxMjgyLDE3IEBACiAKIAlwcmludGsoImNvbWVkaSVkOiAiIFBDSTkxMTFfRFJJVkVSX05BTUUgIiBkcml2ZXJcbiIsIGRldi0+bWlub3IpOwogCi0JZm9yIChwY2lfZGV2aWNlID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7Ci0JICAgICBwY2lfZGV2aWNlICE9IE5VTEw7Ci0JICAgICBwY2lfZGV2aWNlID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGNpX2RldmljZSkpIHsKKwlmb3JfZWFjaF9wY2lfZGV2KHBjaV9kZXZpY2UpIHsKIAkJaWYgKHBjaV9kZXZpY2UtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FETElOSykgewogCQkJZm9yIChpID0gMDsgaSA8IHBjaTkxMTFfYm9hcmRfbmJyOyBpKyspIHsKIAkJCQlpZiAocGNpOTExMV9ib2FyZHNbaV0uZGV2aWNlX2lkID09CiAJCQkJICAgIHBjaV9kZXZpY2UtPmRldmljZSkgewotCQkJCQkvKiAgd2FzIGEgcGFydGljdWxhciBidXMvc2xvdCByZXF1ZXN0ZWQ/ICovCisJCQkJCS8qIHdhcyBhIHBhcnRpY3VsYXIgYnVzL3Nsb3QKKwkJCQkJICogcmVxdWVzdGVkPyAqLwogCQkJCQlpZiAoKGl0LT5vcHRpb25zWzBdICE9IDApCiAJCQkJCSAgICB8fCAoaXQtPm9wdGlvbnNbMV0gIT0gMCkpIHsKLQkJCQkJCS8qICBhcmUgd2Ugb24gdGhlIHdyb25nIGJ1cy9zbG90PyAqLworCQkJCQkJLyogYXJlIHdlIG9uIHRoZSB3cm9uZworCQkJCQkJICogYnVzL3Nsb3Q/ICovCiAJCQkJCQlpZiAocGNpX2RldmljZS0+YnVzLT5udW1iZXIgIT0KIAkJCQkJCSAgICBpdC0+b3B0aW9uc1swXQogCQkJCQkJICAgIHx8CkBAIC0xMjcyLDcgKzEzMjgsOCBAQAogCiAJLyogIFRPRE86IFdhcm4gYWJvdXQgbm9uLXRlc3RlZCBib2FyZHMuICovCiAKLQkvKiAgUmVhZCBsb2NhbCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcyBbUENJX0JBU0VfQUREUkVTUyAjMV0uICovCisJLyogIFJlYWQgbG9jYWwgY29uZmlndXJhdGlvbiByZWdpc3RlciBiYXNlIGFkZHJlc3MKKwkgKiAgW1BDSV9CQVNFX0FERFJFU1MgIzFdLiAqLwogCiAJbGNyX2lvX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldmljZSwgMSk7CiAJbGNyX2lvX3JhbmdlID0gcGNpX3Jlc291cmNlX2xlbihwY2lfZGV2aWNlLCAxKTsKQEAgLTEzOTksMyArMTQ1Niw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k5MTE4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTkxMTguYwppbmRleCBjY2VmNTQ5Li5iMGUzOWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTkxMTguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTkxMTguYwpAQCAtMjg5LDcgKzI4OSw0MyBAQAogCS5vZmZzZXQgPSBzaXplb2Yoc3RydWN0IGJvYXJkdHlwZSksCiB9OwogCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2k5MTE4LCBwY2k5MTE4X3BjaV90YWJsZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBkcml2ZXJfcGNpOTExOF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIGRyaXZlcl9wY2k5MTE4LmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRyaXZlcl9wY2k5MTE4X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9wY2k5MTE4X3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gcGNpOTExOF9wY2lfdGFibGUsCisJLnByb2JlID0gJmRyaXZlcl9wY2k5MTE4X3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9wY2k5MTE4X3BjaV9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfcGNpOTExOF9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfcGNpOTExOCk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfcGNpOTExOF9wY2lfZHJpdmVyLm5hbWUgPSAoY2hhciAqKWRyaXZlcl9wY2k5MTE4LmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfcGNpOTExOF9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9wY2k5MTE4X2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfcGNpOTExOF9wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9wY2k5MTE4KTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX3BjaTkxMThfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX3BjaTkxMThfY2xlYW51cF9tb2R1bGUpOwogCiBzdHJ1Y3QgcGNpOTExOF9wcml2YXRlIHsKIAl1bnNpZ25lZCBsb25nIGlvYmFzZV9hOwkvKiBiYXNlK3NpemUgZm9yIEFNQ0MgY2hpcCAqLwpAQCAtMjQzMiwzICsyNDY4LDcgQEAKIC8qCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHExMmIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHExMmIuYwppbmRleCBmM2JhNjQ1Li40YjQ3MDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRxMTJiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkcTEyYi5jCkBAIC00MDIsNCArNDAyLDE5IEBACiAgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCiAgKiBhcyBuZWNlc3NhcnkuCiAgKi8KLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfYWRxMTJiKTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9hZHExMmJfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2FkcTEyYik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfYWRxMTJiX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfYWRxMTJiKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2FkcTEyYl9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfYWRxMTJiX2NsZWFudXBfbW9kdWxlKTsKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fkdl9wY2kxNzEwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWR2X3BjaTE3MTAuYwppbmRleCA2N2M0ZjExLi5iZGQ2OTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWR2X3BjaTE3MTAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWR2X3BjaTE3MTAuYwpAQCAtMTksNyArMTksNyBAQAogLyoKIERyaXZlcjogYWR2X3BjaTE3MTAKIERlc2NyaXB0aW9uOiBBZHZhbnRlY2ggUENJLTE3MTAsIFBDSS0xNzEwSEcsIFBDSS0xNzExLCBQQ0ktMTcxMywKLSAgICAgICAgICAgICBBZHZhbnRlY2ggUENJLTE3MjAsIFBDSS0xNzMxCisJICAgICBBZHZhbnRlY2ggUENJLTE3MjAsIFBDSS0xNzMxCiBBdXRob3I6IE1pY2hhbCBEb2JlcyA8ZG9iZXNAdGVzbmV0LmN6PgogRGV2aWNlczogW0FkdmFudGVjaF0gUENJLTE3MTAgKGFkdl9wY2kxNzEwKSwgUENJLTE3MTBIRyAocGNpMTcxMGhnKSwKICAgUENJLTE3MTEgKGFkdl9wY2kxNzEwKSwgUENJLTE3MTMsIFBDSS0xNzIwLApAQCAtMzcsOCArMzcsOCBAQAogQ29uZmlndXJhdGlvbiBvcHRpb25zOgogICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpCiAgIFsxXSAtIFBDSSBzbG90IG9mIGRldmljZSAob3B0aW9uYWwpCi0gICAgICAgICAgSWYgYnVzL3Nsb3QgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZpcnN0IGF2YWlsYWJsZSBQQ0kKLSAgICAgICAgICBkZXZpY2Ugd2lsbCBiZSB1c2VkLgorCUlmIGJ1cy9zbG90IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBmaXJzdCBhdmFpbGFibGUgUENJCisJZGV2aWNlIHdpbGwgYmUgdXNlZC4KICovCiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KQEAgLTUwLDcgKzUwLDkgQEAKICNpbmNsdWRlICI4MjUzLmgiCiAjaW5jbHVkZSAiYW1jY19zNTkzMy5oIgogCi0jZGVmaW5lIFBDSTE3MXhfUEFSQU5PSURDSEVDSwkvKiBpZiBkZWZpbmVkLCB0aGVuIGlzIHVzZWQgY29kZSB3aGljaCBjb250cm9sIGNvcnJlY3QgY2hhbm5lbCBudW1iZXIgb24gZXZlcnkgMTIgYml0IHNhbXBsZSAqLworI2RlZmluZSBQQ0kxNzF4X1BBUkFOT0lEQ0hFQ0sJLyogaWYgZGVmaW5lZCwgdGhlbiBpcyB1c2VkIGNvZGUgd2hpY2ggY29udHJvbAorCQkJCSAqIGNvcnJlY3QgY2hhbm5lbCBudW1iZXIgb24gZXZlcnkgMTIgYml0CisJCQkJICogc2FtcGxlICovCiAKICN1bmRlZiBQQ0kxNzFYX0VYVERFQlVHCiAKQEAgLTcwLDggKzcyLDggQEAKICNkZWZpbmUgVFlQRV9QQ0kxNzEzCTIKICNkZWZpbmUgVFlQRV9QQ0kxNzIwCTMKIAotI2RlZmluZSBJT1JBTkdFXzE3MXggCTMyCi0jZGVmaW5lIElPUkFOR0VfMTcyMCAJMTYKKyNkZWZpbmUgSU9SQU5HRV8xNzF4CTMyCisjZGVmaW5lIElPUkFOR0VfMTcyMAkxNgogCiAjZGVmaW5lIFBDSTE3MXhfQURfREFUQQkgMAkvKiBSOiAgIEEvRCBkYXRhICovCiAjZGVmaW5lIFBDSTE3MXhfU09GVFRSRwkgMAkvKiBXOiAgIHNvZnQgdHJpZ2dlciBmb3IgQS9EICovCkBAIC05MSwxMyArOTMsMTUgQEAKICNkZWZpbmUgUENJMTcxeF9DTlQyCTI4CS8qIFIvVzogODI1NCBjb3VudGVyIDIgKi8KICNkZWZpbmUgUENJMTcxeF9DTlRDVFJMCTMwCS8qIFc6ICAgODI1NCBjb3VudGVyIGNvbnRyb2wgKi8KIAotLyogdXBwZXIgYml0cyBmcm9tIHN0YXR1cyByZWdpc3RlciAoUENJMTcxeF9TVEFUVVMpIChsb3dlciBpcyBzYW1lIHdvdGggY29udHJvbCByZWcpICovCisvKiB1cHBlciBiaXRzIGZyb20gc3RhdHVzIHJlZ2lzdGVyIChQQ0kxNzF4X1NUQVRVUykgKGxvd2VyIGlzIHNhbWUgd2l0aCBjb250cm9sCisgKiByZWcpICovCiAjZGVmaW5lCVN0YXR1c19GRQkweDAxMDAJLyogMT1GSUZPIGlzIGVtcHR5ICovCiAjZGVmaW5lIFN0YXR1c19GSAkweDAyMDAJLyogMT1GSUZPIGlzIGhhbGYgZnVsbCAqLwogI2RlZmluZSBTdGF0dXNfRkYJMHgwNDAwCS8qIDE9RklGTyBpcyBmdWxsLCBmYXRhbCBlcnJvciAqLwogI2RlZmluZSBTdGF0dXNfSVJRCTB4MDgwMAkvKiAxPUlSUSBvY2N1cmVkICovCiAvKiBiaXRzIGZyb20gY29udHJvbCByZWdpc3RlciAoUENJMTcxeF9DT05UUk9MKSAqLwotI2RlZmluZSBDb250cm9sX0NOVDAJMHgwMDQwCS8qIDE9Q05UMCBoYXZlIGV4dGVybmFsIHNvdXJjZSwgMD1oYXZlIGludGVybmFsIDEwMGtIeiBzb3VyY2UgKi8KKyNkZWZpbmUgQ29udHJvbF9DTlQwCTB4MDA0MAkvKiAxPUNOVDAgaGF2ZSBleHRlcm5hbCBzb3VyY2UsCisJCQkJICogMD1oYXZlIGludGVybmFsIDEwMGtIeiBzb3VyY2UgKi8KICNkZWZpbmUgQ29udHJvbF9PTkVGSAkweDAwMjAJLyogMT1JUlEgb24gRklGTyBpcyBoYWxmIGZ1bGwsIDA9ZXZlcnkgc2FtcGxlICovCiAjZGVmaW5lIENvbnRyb2xfSVJRRU4JMHgwMDEwCS8qIDE9ZW5hYmxlIElSUSAqLwogI2RlZmluZSBDb250cm9sX0dBVEUJMHgwMDA4CS8qIDE9ZW5hYmxlIGV4dGVybmFsIHRyaWdnZXIgR0FURSAoODI1ND8pICovCkBAIC0xMTIsNyArMTE2LDggQEAKICNkZWZpbmUgQ291bnRlcl9SVzAgICAgIDB4MDAxMAkvKiBSVzAvUlcxIHNlbGVjdCByZWFkL3dyaXRlIG1vZGUgKi8KICNkZWZpbmUgQ291bnRlcl9SVzEgICAgIDB4MDAyMAogI2RlZmluZSBDb3VudGVyX1NDMCAgICAgMHgwMDQwCS8qIFNlbGVjdCBDb3VudGVyLiBPbmx5IDAwIG9yIDExIG1heSAqLwotI2RlZmluZSBDb3VudGVyX1NDMSAgICAgMHgwMDgwCS8qIGJlIHVzZWQsIDAwIGZvciBDTlQwLCAxMSBmb3IgcmVhZC1iYWNrIGNvbW1hbmQgKi8KKyNkZWZpbmUgQ291bnRlcl9TQzEgICAgIDB4MDA4MAkvKiBiZSB1c2VkLCAwMCBmb3IgQ05UMCwKKwkJCQkgKiAxMSBmb3IgcmVhZC1iYWNrIGNvbW1hbmQgKi8KIAogI2RlZmluZSBQQ0kxNzIwX0RBMAkgMAkvKiBXOiAgIEQvQSByZWdpc3RlciAwICovCiAjZGVmaW5lIFBDSTE3MjBfREExCSAyCS8qIFc6ICAgRC9BIHJlZ2lzdGVyIDEgKi8KQEAgLTEzOCw4ICsxNDMsOCBAQAogCQkJCQkJCSAgfQogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgcmFuZ2VfY29kZXNfcGNpMTcxMF8zW10gPQotICAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMyB9Oworc3RhdGljIGNvbnN0IGNoYXIgcmFuZ2VfY29kZXNfcGNpMTcxMF8zW10gPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsCisJCQkJCSAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMgfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjaTE3MTBoZyA9IHsgMTIsIHsKIAkJCQkJCQkgICBCSVBfUkFOR0UoNSksCkBAIC0xNTcsMTAgKzE2Miw5IEBACiAJCQkJCQkJICAgfQogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgcmFuZ2VfY29kZXNfcGNpMTcxMGhnW10gPQotICAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgxMCwgMHgxMSwgMHgxMiwKLQkweDEzCi19Oworc3RhdGljIGNvbnN0IGNoYXIgcmFuZ2VfY29kZXNfcGNpMTcxMGhnW10gPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsCisJCQkJCSAgICAgIDB4MDUsIDB4MDYsIDB4MDcsIDB4MTAsIDB4MTEsCisJCQkJCSAgICAgIDB4MTIsIDB4MTMgfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjaTE3eDEgPSB7IDUsIHsKIAkJCQkJCQlCSVBfUkFOR0UoMTApLApAQCAtMzAxLDcgKzMwNSw4IEBACiAJdW5zaWduZWQgaW50IGFpX3RpbWVyMTsJLyogIHRpbWVycyAqLwogCXVuc2lnbmVkIGludCBhaV90aW1lcjI7CiAJc2hvcnQgYW9fZGF0YVs0XTsJLyogIGRhdGEgb3V0cHV0IGJ1ZmZlciAqLwotCXVuc2lnbmVkIGludCBjbnQwX3dyaXRlX3dhaXQ7CS8qICBhZnRlciBhIHdyaXRlLCB3YWl0IGZvciB1cGRhdGUgb2YgdGhlIGludGVybmFsIHN0YXRlICovCisJdW5zaWduZWQgaW50IGNudDBfd3JpdGVfd2FpdDsJLyogYWZ0ZXIgYSB3cml0ZSwgd2FpdCBmb3IgdXBkYXRlIG9mIHRoZQorCQkJCQkgKiBpbnRlcm5hbCBzdGF0ZSAqLwogfTsKIAogI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHBjaTE3MTBfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKQEAgLTMyNCw3ICszMjksOSBAQAogc3RhdGljIGludCBwY2kxNzF4X2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbXV4b25lY2hhbltdID0geyAweDAwMDAsIDB4MDEwMSwgMHgwMjAyLCAweDAzMDMsIDB4MDQwNCwgMHgwNTA1LCAweDA2MDYsIDB4MDcwNywJLyogIHVzZWQgZm9yIGdhaW4gbGlzdCBwcm9ncmFtbWluZyAqLworLyogIHVzZWQgZm9yIGdhaW4gbGlzdCBwcm9ncmFtbWluZyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtdXhvbmVjaGFuW10gPSB7CisJMHgwMDAwLCAweDAxMDEsIDB4MDIwMiwgMHgwMzAzLCAweDA0MDQsIDB4MDUwNSwgMHgwNjA2LCAweDA3MDcsCiAJMHgwODA4LCAweDA5MDksIDB4MGEwYSwgMHgwYjBiLCAweDBjMGMsIDB4MGQwZCwgMHgwZTBlLCAweDBmMGYsCiAJMHgxMDEwLCAweDExMTEsIDB4MTIxMiwgMHgxMzEzLCAweDE0MTQsIDB4MTUxNSwgMHgxNjE2LCAweDE3MTcsCiAJMHgxODE4LCAweDE5MTksIDB4MWExYSwgMHgxYjFiLCAweDFjMWMsIDB4MWQxZCwgMHgxZTFlLCAweDFmMWYKQEAgLTc3NCw3ICs3ODEsOCBAQAogCX0KIAogCWlmICghZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkpCi0JCWlmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA+PSBkZXZwcml2LT5haV9zY2FucykgewkvKiBhbGwgZGF0YSBzYW1wbGVkICovCisJCWlmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA+PSBkZXZwcml2LT5haV9zY2FucykgeyAvKiBhbGwgZGF0YQorCQkJCQkJCQkgICAgc2FtcGxlZCAqLwogCQkJcGNpMTcxeF9haV9jYW5jZWwoZGV2LCBzKTsKIAkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKIAkJCWNvbWVkaV9ldmVudChkZXYsIHMpOwpAQCAtMTU1OSw3ICsxNTY3LDggQEAKIAkJcy0+bWF4ZGF0YSA9IDE7CiAJCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNfYm9hcmQtPm5fZG9jaGFuOwogCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOwotCQlzLT5pb19iaXRzID0gKDEgPDwgdGhpc19ib2FyZC0+bl9kb2NoYW4pIC0gMTsJLyogYWxsIGJpdHMgb3V0cHV0ICovCisJCS8qIGFsbCBiaXRzIG91dHB1dCAqLworCQlzLT5pb19iaXRzID0gKDEgPDwgdGhpc19ib2FyZC0+bl9kb2NoYW4pIC0gMTsKIAkJcy0+c3RhdGUgPSAwOwogCQlzLT5pbnNuX2JpdHMgPSBwY2kxNzF4X2luc25fYml0c19kbzsKIAkJc3ViZGV2Kys7CkBAIC0xNjA5LDcgKzE2MTgsNDcgQEAKIC8qCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2kxNzEwLCBwY2kxNzEwX3BjaV90YWJsZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBkcml2ZXJfcGNpMTcxMF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIGRyaXZlcl9wY2kxNzEwLmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRyaXZlcl9wY2kxNzEwX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9wY2kxNzEwX3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gcGNpMTcxMF9wY2lfdGFibGUsCisJLnByb2JlID0gJmRyaXZlcl9wY2kxNzEwX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9wY2kxNzEwX3BjaV9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfcGNpMTcxMF9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfcGNpMTcxMCk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfcGNpMTcxMF9wY2lfZHJpdmVyLm5hbWUgPSAoY2hhciAqKWRyaXZlcl9wY2kxNzEwLmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfcGNpMTcxMF9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9wY2kxNzEwX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfcGNpMTcxMF9wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9wY2kxNzEwKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX3BjaTE3MTBfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX3BjaTE3MTBfY2xlYW51cF9tb2R1bGUpOwogLyoKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fkdl9wY2kxNzIzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWR2X3BjaTE3MjMuYwppbmRleCA5ZmU4ZmNjLi5iMTMzYmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWR2X3BjaTE3MjMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWR2X3BjaTE3MjMuYwpAQCAtNDk2LDQgKzQ5Niw0NCBAQAogICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAogICogYXMgbmVjZXNzYXJ5LgogICovCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2kxNzIzLCBwY2kxNzIzX3BjaV90YWJsZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBkcml2ZXJfcGNpMTcyM19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIGRyaXZlcl9wY2kxNzIzLmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRyaXZlcl9wY2kxNzIzX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9wY2kxNzIzX3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gcGNpMTcyM19wY2lfdGFibGUsCisJLnByb2JlID0gJmRyaXZlcl9wY2kxNzIzX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9wY2kxNzIzX3BjaV9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfcGNpMTcyM19pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfcGNpMTcyMyk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfcGNpMTcyM19wY2lfZHJpdmVyLm5hbWUgPSAoY2hhciAqKWRyaXZlcl9wY2kxNzIzLmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfcGNpMTcyM19wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9wY2kxNzIzX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfcGNpMTcyM19wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9wY2kxNzIzKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX3BjaTE3MjNfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX3BjaTE3MjNfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWR2X3BjaV9kaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpX2Rpby5jCmluZGV4IGU0MjRhMGMuLmQwMThiYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpX2Rpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpX2Rpby5jCkBAIC04LDggKzgsOCBAQAogLyoKIERyaXZlcjogYWR2X3BjaV9kaW8KIERlc2NyaXB0aW9uOiBBZHZhbnRlY2ggUENJLTE3MzAsIFBDSS0xNzMzLCBQQ0ktMTczNCwgUENJLTE3MzVVLAotICAgICAgICAgICAgIFBDSS0xNzM2VVAsIFBDSS0xNzUwLCBQQ0ktMTc1MSwgUENJLTE3NTIsIFBDSS0xNzUzL0UsCi0gICAgICAgICAgICAgUENJLTE3NTQsIFBDSS0xNzU2LCBQQ0ktMTc2MgorCVBDSS0xNzM2VVAsIFBDSS0xNzUwLCBQQ0ktMTc1MSwgUENJLTE3NTIsIFBDSS0xNzUzL0UsCisJUENJLTE3NTQsIFBDSS0xNzU2LCBQQ0ktMTc2MgogQXV0aG9yOiBNaWNoYWwgRG9iZXMgPGRvYmVzQHRlc25ldC5jej4KIERldmljZXM6IFtBZHZhbnRlY2hdIFBDSS0xNzMwIChhZHZfcGNpX2RpbyksIFBDSS0xNzMzLAogICBQQ0ktMTczNCwgUENJLTE3MzVVLCBQQ0ktMTczNlVQLCBQQ0ktMTc1MCwKQEAgLTI0LDggKzI0LDggQEAKIENvbmZpZ3VyYXRpb24gb3B0aW9uczoKICAgWzBdIC0gUENJIGJ1cyBvZiBkZXZpY2UgKG9wdGlvbmFsKQogICBbMV0gLSBQQ0kgc2xvdCBvZiBkZXZpY2UgKG9wdGlvbmFsKQotICAgICAgICAgIElmIGJ1cy9zbG90IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBmaXJzdCBhdmFpbGFibGUgUENJCi0gICAgICAgICAgZGV2aWNlIHdpbGwgYmUgdXNlZC4KKwlJZiBidXMvc2xvdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZmlyc3QgYXZhaWxhYmxlIFBDSQorCWRldmljZSB3aWxsIGJlIHVzZWQuCiAKICovCiAKQEAgLTY3LDkgKzY3LDEyIEBACiAKICNkZWZpbmUgTUFYX0RJX1NVQkRFVlMJMgkvKiBtYXggbnVtYmVyIG9mIERJIHN1YmRldmljZXMgcGVyIGNhcmQgKi8KICNkZWZpbmUgTUFYX0RPX1NVQkRFVlMJMgkvKiBtYXggbnVtYmVyIG9mIERPIHN1YmRldmljZXMgcGVyIGNhcmQgKi8KLSNkZWZpbmUgTUFYX0RJT19TVUJERVZHCTIJLyogbWF4IG51bWJlciBvZiBESU8gc3ViZGV2aWNlcyBncm91cCBwZXIgY2FyZCAqLwotI2RlZmluZSBNQVhfODI1NF9TVUJERVZTICAgMQkvKiBtYXggbnVtYmVyIG9mIDgyNTQgY291bnRlciBzdWJkZXZzIHBlciBjYXJkICovCi0JCQkJLyogKGNvdWxkIGJlIG1vcmUgdGhhbiBvbmUgODI1NCBwZXIgc3ViZGV2aWNlKSAqLworI2RlZmluZSBNQVhfRElPX1NVQkRFVkcJMgkvKiBtYXggbnVtYmVyIG9mIERJTyBzdWJkZXZpY2VzIGdyb3VwIHBlcgorCQkJCSAqIGNhcmQgKi8KKyNkZWZpbmUgTUFYXzgyNTRfU1VCREVWUyAgIDEJLyogbWF4IG51bWJlciBvZiA4MjU0IGNvdW50ZXIgc3ViZGV2cyBwZXIKKwkJCQkgKiBjYXJkICovCisJCQkJLyogKGNvdWxkIGJlIG1vcmUgdGhhbiBvbmUgODI1NCBwZXIKKwkJCQkgKiBzdWJkZXZpY2UpICovCiAKICNkZWZpbmUgU0laRV84MjU0CSAgIDQJLyogODI1NCBJTyBzcGFjZSBsZW5ndGggKi8KICNkZWZpbmUgU0laRV84MjU1CSAgIDQJLyogODI1NSBJTyBzcGFjZSBsZW5ndGggKi8KQEAgLTg0LDcgKzg3LDggQEAKICNkZWZpbmUgUENJMTczMF9ETwkgICAyCS8qIFc6ICAgRGlnaXRhbCBvdXRwdXQgMC0xNSAqLwogI2RlZmluZSBQQ0kxNzMzX0lESQkgICAwCS8qIFI6ICAgSXNvbGF0ZWQgZGlnaXRhbCBpbnB1dCAgMC0zMSAqLwogI2RlZmluZQlQQ0kxNzMwXzNfSU5UX0VOCTB4MDgJLyogUi9XOiBlbmFibGUvZGlzYWJsZSBpbnRlcnJ1cHRzICovCi0jZGVmaW5lCVBDSTE3MzBfM19JTlRfUkYJMHgwYwkvKiBSL1c6IHNldCBmYWxsaW5nL3JhaXNpbmcgZWRnZSBmb3IgaW50ZXJydXB0cyAqLworI2RlZmluZQlQQ0kxNzMwXzNfSU5UX1JGCTB4MGMJLyogUi9XOiBzZXQgZmFsbGluZy9yYWlzaW5nIGVkZ2UgZm9yCisJCQkJCSAqIGludGVycnVwdHMgKi8KICNkZWZpbmUJUENJMTczMF8zX0lOVF9DTFIJMHgxMAkvKiBSL1c6IGNsZWFyIGludGVycnVwdHMgKi8KICNkZWZpbmUgUENJMTczNF9JRE8JICAgMAkvKiBXOiAgIElzb2xhdGVkIGRpZ2l0YWwgb3V0cHV0IDAtMzEgKi8KICNkZWZpbmUgUENJMTczeF9CT0FSRElECSAgIDQJLyogUjogICBCb2FyZCBJL0Qgc3dpdGNoIGZvciAxNzMwLzMvNCAqLwpAQCAtOTksNyArMTAzLDggQEAKICNkZWZpbmUgUENJMTczNl9JREkgICAgICAgIDAJLyogUjogICBJc29sYXRlZCBkaWdpdGFsIGlucHV0ICAwLTE1ICovCiAjZGVmaW5lIFBDSTE3MzZfSURPICAgICAgICAwCS8qIFc6ICAgSXNvbGF0ZWQgZGlnaXRhbCBvdXRwdXQgMC0xNSAqLwogI2RlZmluZSBQQ0kxNzM2XzNfSU5UX0VOICAgICAgICAweDA4CS8qIFIvVzogZW5hYmxlL2Rpc2FibGUgaW50ZXJydXB0cyAqLwotI2RlZmluZSBQQ0kxNzM2XzNfSU5UX1JGICAgICAgICAweDBjCS8qIFIvVzogc2V0IGZhbGxpbmcvcmFpc2luZyBlZGdlIGZvciBpbnRlcnJ1cHRzICovCisjZGVmaW5lIFBDSTE3MzZfM19JTlRfUkYgICAgICAgIDB4MGMJLyogUi9XOiBzZXQgZmFsbGluZy9yYWlzaW5nIGVkZ2UgZm9yCisJCQkJCSAqIGludGVycnVwdHMgKi8KICNkZWZpbmUgUENJMTczNl8zX0lOVF9DTFIgICAgICAgMHgxMAkvKiBSL1c6IGNsZWFyIGludGVycnVwdHMgKi8KICNkZWZpbmUgUENJMTczNl9CT0FSRElEICAgIDQJLyogUjogICBCb2FyZCBJL0Qgc3dpdGNoIGZvciAxNzM2VVAgKi8KICNkZWZpbmUgUENJMTczNl9NQUlOUkVHICAgIDAJLyogTm9ybWFsIHJlZ2lzdGVyICgyKSBkb2Vzbid0IHdvcmsgKi8KQEAgLTE2MSwzNyArMTY2LDY2IEBACiAjZGVmaW5lIElOVENTUjMJCTB4M2IKIAogLyogIFBDSS0xNzYwIG1haWxib3ggY29tbWFuZHMgKi8KLSNkZWZpbmUgQ01EX0NsZWFySU1CMgkJMHgwMAkvKiBDbGVhciBJTUIyIHN0YXR1cyBhbmQgcmV0dXJuIGFjdGF1bCBESSBzdGF0dXMgaW4gSU1CMyAqLworI2RlZmluZSBDTURfQ2xlYXJJTUIyCQkweDAwCS8qIENsZWFyIElNQjIgc3RhdHVzIGFuZCByZXR1cm4gYWN0dWFsCisJCQkJCSAqIERJIHN0YXR1cyBpbiBJTUIzICovCiAjZGVmaW5lIENNRF9TZXRSZWxheXNPdXRwdXQJMHgwMQkvKiBTZXQgcmVsYXkgb3V0cHV0IGZyb20gT01CMCAqLwogI2RlZmluZSBDTURfR2V0UmVsYXlzU3RhdHVzCTB4MDIJLyogR2V0IHJlbGF5IHN0YXR1cyB0byBJTUIwICovCi0jZGVmaW5lIENNRF9SZWFkQ3VycmVudFN0YXR1cwkweDA3CS8qIFJlYWQgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSByZWdpc3RlciBpbiBPTUIwLCByZXN1bHQgaW4gSU1CMCAqLwotI2RlZmluZSBDTURfUmVhZEZpcm13YXJlVmVyc2lvbgkweDBlCS8qIFJlYWQgdGhlIGZpcm13YXJlIHZlci4sIHJlc3VsdCBpbiBJTUIxLklNQjAgKi8KLSNkZWZpbmUgQ01EX1JlYWRIYXJkd2FyZVZlcnNpb24JMHgwZgkvKiBSZWFkIHRoZSBoYXJkd2FyZSB2ZXIuLCByZXN1bHQgaW4gSU1CMS5JTUIwICovCi0jZGVmaW5lIENNRF9FbmFibGVJRElGaWx0ZXJzCTB4MjAJLyogRW5hYmxlIElESSBmaWx0ZXJzIGJhc2VkIG9uIGJpdHMgaW4gT01CMCAqLwotI2RlZmluZSBDTURfRW5hYmxlSURJUGF0dGVybk1hdGNoIDB4MjEJLyogRW5hYmxlIElESSBwYXR0ZXJuIG1hdGNoIGJhc2VkIG9uIGJpdHMgaW4gT01CMCAqLwotI2RlZmluZSBDTURfU2V0SURJUGF0dGVybk1hdGNoCTB4MjIJLyogRW5hYmxlIElESSBwYXR0ZXJuIG1hdGNoIGJhc2VkIG9uIGJpdHMgaW4gT01CMCAqLwotI2RlZmluZSBDTURfRW5hYmxlSURJQ291bnRlcnMJMHgyOAkvKiBFbmFibGUgSURJIGNvdW50ZXJzIGJhc2VkIG9uIGJpdHMgaW4gT01CMCAqLwotI2RlZmluZSBDTURfUmVzZXRJRElDb3VudGVycwkweDI5CS8qIFJlc2V0IElESSBjb3VudGVycyBiYXNlZCBvbiBiaXRzIGluIE9NQjAgdG8gaXRzIHJlc2V0IHZhbHVlcyAqLwotI2RlZmluZSBDTURfT3ZlcmZsb3dJRElDb3VudGVycwkweDJhCS8qIEVuYWJsZSBJREkgY291bnRlcnMgb3ZlcmZsb3cgaW50ZXJydXB0cyAgYmFzZWQgb24gYml0cyBpbiBPTUIwICovCi0jZGVmaW5lIENNRF9NYXRjaEludElESUNvdW50ZXJzCTB4MmIJLyogRW5hYmxlIElESSBjb3VudGVycyBtYXRjaCB2YWx1ZSBpbnRlcnJ1cHRzICBiYXNlZCBvbiBiaXRzIGluIE9NQjAgKi8KLSNkZWZpbmUgQ01EX0VkZ2VJRElDb3VudGVycwkweDJjCS8qIFNldCBJREkgdXAgY291bnRlcnMgY291bnQgZWRnZSAoYml0PTAgLSByaXNpbmcsID0xIC0gZmFsbGluZykgKi8KLSNkZWZpbmUgQ01EX0dldElESUNudEN1clZhbHVlCTB4MmYJLyogUmVhZCBJREl7T01CMH0gdXAgY291bnRlciBjdXJyZW50IHZhbHVlICovCi0jZGVmaW5lIENNRF9TZXRJREkwQ250UmVzZXRWYWx1ZSAweDQwCS8qIFNldCBJREkwIENvdW50ZXIgUmVzZXQgVmFsdWUgMjU2Kk9NQjErT01CMCAqLwotI2RlZmluZSBDTURfU2V0SURJMUNudFJlc2V0VmFsdWUgMHg0MQkvKiBTZXQgSURJMSBDb3VudGVyIFJlc2V0IFZhbHVlIDI1NipPTUIxK09NQjAgKi8KLSNkZWZpbmUgQ01EX1NldElESTJDbnRSZXNldFZhbHVlIDB4NDIJLyogU2V0IElESTIgQ291bnRlciBSZXNldCBWYWx1ZSAyNTYqT01CMStPTUIwICovCi0jZGVmaW5lIENNRF9TZXRJREkzQ250UmVzZXRWYWx1ZSAweDQzCS8qIFNldCBJREkzIENvdW50ZXIgUmVzZXQgVmFsdWUgMjU2Kk9NQjErT01CMCAqLwotI2RlZmluZSBDTURfU2V0SURJNENudFJlc2V0VmFsdWUgMHg0NAkvKiBTZXQgSURJNCBDb3VudGVyIFJlc2V0IFZhbHVlIDI1NipPTUIxK09NQjAgKi8KLSNkZWZpbmUgQ01EX1NldElESTVDbnRSZXNldFZhbHVlIDB4NDUJLyogU2V0IElESTUgQ291bnRlciBSZXNldCBWYWx1ZSAyNTYqT01CMStPTUIwICovCi0jZGVmaW5lIENNRF9TZXRJREk2Q250UmVzZXRWYWx1ZSAweDQ2CS8qIFNldCBJREk2IENvdW50ZXIgUmVzZXQgVmFsdWUgMjU2Kk9NQjErT01CMCAqLwotI2RlZmluZSBDTURfU2V0SURJN0NudFJlc2V0VmFsdWUgMHg0NwkvKiBTZXQgSURJNyBDb3VudGVyIFJlc2V0IFZhbHVlIDI1NipPTUIxK09NQjAgKi8KLSNkZWZpbmUgQ01EX1NldElESTBDbnRNYXRjaFZhbHVlIDB4NDgJLyogU2V0IElESTAgQ291bnRlciBNYXRjaCBWYWx1ZSAyNTYqT01CMStPTUIwICovCi0jZGVmaW5lIENNRF9TZXRJREkxQ250TWF0Y2hWYWx1ZSAweDQ5CS8qIFNldCBJREkxIENvdW50ZXIgTWF0Y2ggVmFsdWUgMjU2Kk9NQjErT01CMCAqLwotI2RlZmluZSBDTURfU2V0SURJMkNudE1hdGNoVmFsdWUgMHg0YQkvKiBTZXQgSURJMiBDb3VudGVyIE1hdGNoIFZhbHVlIDI1NipPTUIxK09NQjAgKi8KLSNkZWZpbmUgQ01EX1NldElESTNDbnRNYXRjaFZhbHVlIDB4NGIJLyogU2V0IElESTMgQ291bnRlciBNYXRjaCBWYWx1ZSAyNTYqT01CMStPTUIwICovCi0jZGVmaW5lIENNRF9TZXRJREk0Q250TWF0Y2hWYWx1ZSAweDRjCS8qIFNldCBJREk0IENvdW50ZXIgTWF0Y2ggVmFsdWUgMjU2Kk9NQjErT01CMCAqLwotI2RlZmluZSBDTURfU2V0SURJNUNudE1hdGNoVmFsdWUgMHg0ZAkvKiBTZXQgSURJNSBDb3VudGVyIE1hdGNoIFZhbHVlIDI1NipPTUIxK09NQjAgKi8KLSNkZWZpbmUgQ01EX1NldElESTZDbnRNYXRjaFZhbHVlIDB4NGUJLyogU2V0IElESTYgQ291bnRlciBNYXRjaCBWYWx1ZSAyNTYqT01CMStPTUIwICovCi0jZGVmaW5lIENNRF9TZXRJREk3Q250TWF0Y2hWYWx1ZSAweDRmCS8qIFNldCBJREk3IENvdW50ZXIgTWF0Y2ggVmFsdWUgMjU2Kk9NQjErT01CMCAqLworI2RlZmluZSBDTURfUmVhZEN1cnJlbnRTdGF0dXMJMHgwNwkvKiBSZWFkIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUKKwkJCQkJICogcmVnaXN0ZXIgaW4gT01CMCwgcmVzdWx0IGluIElNQjAgKi8KKyNkZWZpbmUgQ01EX1JlYWRGaXJtd2FyZVZlcnNpb24JMHgwZQkvKiBSZWFkIHRoZSBmaXJtd2FyZSB2ZXIuLCByZXN1bHQgaW4KKwkJCQkJICogSU1CMS5JTUIwICovCisjZGVmaW5lIENNRF9SZWFkSGFyZHdhcmVWZXJzaW9uCTB4MGYJLyogUmVhZCB0aGUgaGFyZHdhcmUgdmVyLiwgcmVzdWx0IGluCisJCQkJCSAqIElNQjEuSU1CMCAqLworI2RlZmluZSBDTURfRW5hYmxlSURJRmlsdGVycwkweDIwCS8qIEVuYWJsZSBJREkgZmlsdGVycyBiYXNlZCBvbiBiaXRzIGluCisJCQkJCSAqIE9NQjAgKi8KKyNkZWZpbmUgQ01EX0VuYWJsZUlESVBhdHRlcm5NYXRjaCAweDIxCS8qIEVuYWJsZSBJREkgcGF0dGVybiBtYXRjaCBiYXNlZCBvbgorCQkJCQkgKiBiaXRzIGluIE9NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESVBhdHRlcm5NYXRjaAkweDIyCS8qIEVuYWJsZSBJREkgcGF0dGVybiBtYXRjaCBiYXNlZCBvbgorCQkJCQkgKiBiaXRzIGluIE9NQjAgKi8KKyNkZWZpbmUgQ01EX0VuYWJsZUlESUNvdW50ZXJzCTB4MjgJLyogRW5hYmxlIElESSBjb3VudGVycyBiYXNlZCBvbiBiaXRzIGluCisJCQkJCSAqIE9NQjAgKi8KKyNkZWZpbmUgQ01EX1Jlc2V0SURJQ291bnRlcnMJMHgyOQkvKiBSZXNldCBJREkgY291bnRlcnMgYmFzZWQgb24gYml0cyBpbgorCQkJCQkgKiBPTUIwIHRvIGl0cyByZXNldCB2YWx1ZXMgKi8KKyNkZWZpbmUgQ01EX092ZXJmbG93SURJQ291bnRlcnMJMHgyYQkvKiBFbmFibGUgSURJIGNvdW50ZXJzIG92ZXJmbG93CisJCQkJCSAqIGludGVycnVwdHMgIGJhc2VkIG9uIGJpdHMgaW4gT01CMCAqLworI2RlZmluZSBDTURfTWF0Y2hJbnRJRElDb3VudGVycwkweDJiCS8qIEVuYWJsZSBJREkgY291bnRlcnMgbWF0Y2ggdmFsdWUKKwkJCQkJICogaW50ZXJydXB0cyAgYmFzZWQgb24gYml0cyBpbiBPTUIwICovCisjZGVmaW5lIENNRF9FZGdlSURJQ291bnRlcnMJMHgyYwkvKiBTZXQgSURJIHVwIGNvdW50ZXJzIGNvdW50IGVkZ2UgKGJpdD0wCisJCQkJCSAqIC0gcmlzaW5nLCA9MSAtIGZhbGxpbmcpICovCisjZGVmaW5lIENNRF9HZXRJRElDbnRDdXJWYWx1ZQkweDJmCS8qIFJlYWQgSURJe09NQjB9IHVwIGNvdW50ZXIgY3VycmVudAorCQkJCQkgKiB2YWx1ZSAqLworI2RlZmluZSBDTURfU2V0SURJMENudFJlc2V0VmFsdWUgMHg0MAkvKiBTZXQgSURJMCBDb3VudGVyIFJlc2V0IFZhbHVlCisJCQkJCSAqIDI1NipPTUIxK09NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESTFDbnRSZXNldFZhbHVlIDB4NDEJLyogU2V0IElESTEgQ291bnRlciBSZXNldCBWYWx1ZQorCQkJCQkgKiAyNTYqT01CMStPTUIwICovCisjZGVmaW5lIENNRF9TZXRJREkyQ250UmVzZXRWYWx1ZSAweDQyCS8qIFNldCBJREkyIENvdW50ZXIgUmVzZXQgVmFsdWUKKwkJCQkJICogMjU2Kk9NQjErT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJM0NudFJlc2V0VmFsdWUgMHg0MwkvKiBTZXQgSURJMyBDb3VudGVyIFJlc2V0IFZhbHVlCisJCQkJCSAqIDI1NipPTUIxK09NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESTRDbnRSZXNldFZhbHVlIDB4NDQJLyogU2V0IElESTQgQ291bnRlciBSZXNldCBWYWx1ZQorCQkJCQkgKiAyNTYqT01CMStPTUIwICovCisjZGVmaW5lIENNRF9TZXRJREk1Q250UmVzZXRWYWx1ZSAweDQ1CS8qIFNldCBJREk1IENvdW50ZXIgUmVzZXQgVmFsdWUKKwkJCQkJICogMjU2Kk9NQjErT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJNkNudFJlc2V0VmFsdWUgMHg0NgkvKiBTZXQgSURJNiBDb3VudGVyIFJlc2V0IFZhbHVlCisJCQkJCSAqIDI1NipPTUIxK09NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESTdDbnRSZXNldFZhbHVlIDB4NDcJLyogU2V0IElESTcgQ291bnRlciBSZXNldCBWYWx1ZQorCQkJCQkgKiAyNTYqT01CMStPTUIwICovCisjZGVmaW5lIENNRF9TZXRJREkwQ250TWF0Y2hWYWx1ZSAweDQ4CS8qIFNldCBJREkwIENvdW50ZXIgTWF0Y2ggVmFsdWUKKwkJCQkJICogMjU2Kk9NQjErT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJMUNudE1hdGNoVmFsdWUgMHg0OQkvKiBTZXQgSURJMSBDb3VudGVyIE1hdGNoIFZhbHVlCisJCQkJCSAqIDI1NipPTUIxK09NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESTJDbnRNYXRjaFZhbHVlIDB4NGEJLyogU2V0IElESTIgQ291bnRlciBNYXRjaCBWYWx1ZQorCQkJCQkgKiAyNTYqT01CMStPTUIwICovCisjZGVmaW5lIENNRF9TZXRJREkzQ250TWF0Y2hWYWx1ZSAweDRiCS8qIFNldCBJREkzIENvdW50ZXIgTWF0Y2ggVmFsdWUKKwkJCQkJICogMjU2Kk9NQjErT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJNENudE1hdGNoVmFsdWUgMHg0YwkvKiBTZXQgSURJNCBDb3VudGVyIE1hdGNoIFZhbHVlCisJCQkJCSAqIDI1NipPTUIxK09NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESTVDbnRNYXRjaFZhbHVlIDB4NGQJLyogU2V0IElESTUgQ291bnRlciBNYXRjaCBWYWx1ZQorCQkJCQkgKiAyNTYqT01CMStPTUIwICovCisjZGVmaW5lIENNRF9TZXRJREk2Q250TWF0Y2hWYWx1ZSAweDRlCS8qIFNldCBJREk2IENvdW50ZXIgTWF0Y2ggVmFsdWUKKwkJCQkJICogMjU2Kk9NQjErT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJN0NudE1hdGNoVmFsdWUgMHg0ZgkvKiBTZXQgSURJNyBDb3VudGVyIE1hdGNoIFZhbHVlCisJCQkJCSAqIDI1NipPTUIxK09NQjAgKi8KIAogI2RlZmluZSBPTUJDTURfUkVUUlkJMHgwMwkvKiAzIHRpbWVzIHRyeSByZXF1ZXN0IGJlZm9yZSBlcnJvciAqLwogCkBAIC0yNDQsMTE1ICsyNzgsMTE1IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGRpb19ib2FyZHR5cGUgYm9hcmR0eXBlc1tdID0gewogCXsicGNpMTczMCIsIFBDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3MzAsIFBDSURJT19NQUlOUkVHLAogCSBUWVBFX1BDSTE3MzAsCi0JIHt7MTYsIFBDSTE3MzBfREksIDIsIDB9LCB7MTYsIFBDSTE3MzBfSURJLCAyLCAwfX0sCi0JIHt7MTYsIFBDSTE3MzBfRE8sIDIsIDB9LCB7MTYsIFBDSTE3MzBfSURPLCAyLCAwfX0sCi0JIHt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCisJIHsgezE2LCBQQ0kxNzMwX0RJLCAyLCAwfSwgezE2LCBQQ0kxNzMwX0lESSwgMiwgMH0gfSwKKwkgeyB7MTYsIFBDSTE3MzBfRE8sIDIsIDB9LCB7MTYsIFBDSTE3MzBfSURPLCAyLCAwfSB9LAorCSB7IHswLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9IH0sCiAJIHs0LCBQQ0kxNzN4X0JPQVJESUQsIDEsIFNERl9JTlRFUk5BTH0sCi0JIHt7MCwgMCwgMCwgMH19LAorCSB7IHswLCAwLCAwLCAwfSB9LAogCSBJT184Yn0sCiAJeyJwY2kxNzMzIiwgUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTczMywgUENJRElPX01BSU5SRUcsCiAJIFRZUEVfUENJMTczMywKLQkge3swLCAwLCAwLCAwfSwgezMyLCBQQ0kxNzMzX0lESSwgNCwgMH19LAotCSB7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAotCSB7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCSB7IHswLCAwLCAwLCAwfSwgezMyLCBQQ0kxNzMzX0lESSwgNCwgMH0gfSwKKwkgeyB7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfSB9LAorCSB7IHswLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9IH0sCiAJIHs0LCBQQ0kxNzN4X0JPQVJESUQsIDEsIFNERl9JTlRFUk5BTH0sCi0JIHt7MCwgMCwgMCwgMH19LAorCSB7IHswLCAwLCAwLCAwfSB9LAogCSBJT184Yn0sCiAJeyJwY2kxNzM0IiwgUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTczNCwgUENJRElPX01BSU5SRUcsCiAJIFRZUEVfUENJMTczNCwKLQkge3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKLQkge3swLCAwLCAwLCAwfSwgezMyLCBQQ0kxNzM0X0lETywgNCwgMH19LAotCSB7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCSB7IHswLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9IH0sCisJIHsgezAsIDAsIDAsIDB9LCB7MzIsIFBDSTE3MzRfSURPLCA0LCAwfSB9LAorCSB7IHswLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9IH0sCiAJIHs0LCBQQ0kxNzN4X0JPQVJESUQsIDEsIFNERl9JTlRFUk5BTH0sCi0JIHt7MCwgMCwgMCwgMH19LAorCSB7IHswLCAwLCAwLCAwfSB9LAogCSBJT184Yn0sCiAJeyJwY2kxNzM1IiwgUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTczNSwgUENJRElPX01BSU5SRUcsCiAJIFRZUEVfUENJMTczNSwKLQkge3szMiwgUENJMTczNV9ESSwgNCwgMH0sIHswLCAwLCAwLCAwfX0sCi0JIHt7MzIsIFBDSTE3MzVfRE8sIDQsIDB9LCB7MCwgMCwgMCwgMH19LAotCSB7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCSB7IHszMiwgUENJMTczNV9ESSwgNCwgMH0sIHswLCAwLCAwLCAwfSB9LAorCSB7IHszMiwgUENJMTczNV9ETywgNCwgMH0sIHswLCAwLCAwLCAwfSB9LAorCSB7IHswLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9IH0sCiAJIHsgNCwgUENJMTczNV9CT0FSRElELCAxLCBTREZfSU5URVJOQUx9LAotCSB7ezMsIFBDSTE3MzVfQzgyNTQsIDEsIDB9fSwKKwkgeyB7MywgUENJMTczNV9DODI1NCwgMSwgMH0gfSwKIAkgSU9fOGJ9LAogCXsicGNpMTczNiIsIFBDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3MzYsIFBDSTE3MzZfTUFJTlJFRywKIAkgVFlQRV9QQ0kxNzM2LAotCSB7ezAsIDAsIDAsIDB9LCB7MTYsIFBDSTE3MzZfSURJLCAyLCAwfX0sCi0JIHt7MCwgMCwgMCwgMH0sIHsxNiwgUENJMTczNl9JRE8sIDIsIDB9fSwKLQkge3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkgeyB7MCwgMCwgMCwgMH0sIHsxNiwgUENJMTczNl9JREksIDIsIDB9IH0sCisJIHsgezAsIDAsIDAsIDB9LCB7MTYsIFBDSTE3MzZfSURPLCAyLCAwfSB9LAorCSB7IHswLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9IH0sCiAJIHs0LCBQQ0kxNzM2X0JPQVJESUQsIDEsIFNERl9JTlRFUk5BTH0sCi0JIHt7MCwgMCwgMCwgMH19LAorCSB7IHswLCAwLCAwLCAwfSB9LAogCSBJT184Yn0sCiAJeyJwY2kxNzUwIiwgUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTc1MCwgUENJRElPX01BSU5SRUcsCiAJIFRZUEVfUENJMTc1MCwKLQkge3swLCAwLCAwLCAwfSwgezE2LCBQQ0kxNzUwX0lESSwgMiwgMH19LAotCSB7ezAsIDAsIDAsIDB9LCB7MTYsIFBDSTE3NTBfSURPLCAyLCAwfX0sCi0JIHt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCisJIHsgezAsIDAsIDAsIDB9LCB7MTYsIFBDSTE3NTBfSURJLCAyLCAwfSB9LAorCSB7IHswLCAwLCAwLCAwfSwgezE2LCBQQ0kxNzUwX0lETywgMiwgMH0gfSwKKwkgeyB7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfSB9LAogCSB7MCwgMCwgMCwgMH0sCi0JIHt7MCwgMCwgMCwgMH19LAorCSB7IHswLCAwLCAwLCAwfSB9LAogCSBJT184Yn0sCiAJeyJwY2kxNzUxIiwgUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTc1MSwgUENJRElPX01BSU5SRUcsCiAJIFRZUEVfUENJMTc1MSwKLQkge3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKLQkge3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKLQkge3s0OCwgUENJMTc1MV9ESU8sIDIsIDB9LCB7MCwgMCwgMCwgMH19LAorCSB7IHswLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9IH0sCisJIHsgezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH0gfSwKKwkgeyB7NDgsIFBDSTE3NTFfRElPLCAyLCAwfSwgezAsIDAsIDAsIDB9IH0sCiAJIHswLCAwLCAwLCAwfSwKLQkge3swLCAwLCAwLCAwfX0sCisJIHsgezAsIDAsIDAsIDB9IH0sCiAJIElPXzhifSwKIAl7InBjaTE3NTIiLCBQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzUyLCBQQ0lESU9fTUFJTlJFRywKIAkgVFlQRV9QQ0kxNzUyLAotCSB7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAotCSB7ezMyLCBQQ0kxNzUyX0lETywgMiwgMH0sIHszMiwgUENJMTc1Ml9JRE8yLCAyLCAwfX0sCi0JIHt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCisJIHsgezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH0gfSwKKwkgeyB7MzIsIFBDSTE3NTJfSURPLCAyLCAwfSwgezMyLCBQQ0kxNzUyX0lETzIsIDIsIDB9IH0sCisJIHsgezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH0gfSwKIAkgezQsIFBDSTE3NXhfQk9BUkRJRCwgMSwgU0RGX0lOVEVSTkFMfSwKLQkge3swLCAwLCAwLCAwfX0sCisJIHsgezAsIDAsIDAsIDB9IH0sCiAJIElPXzE2Yn0sCiAJeyJwY2kxNzUzIiwgUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTc1MywgUENJRElPX01BSU5SRUcsCiAJIFRZUEVfUENJMTc1MywKLQkge3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKLQkge3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKLQkge3s5NiwgUENJMTc1M19ESU8sIDQsIDB9LCB7MCwgMCwgMCwgMH19LAorCSB7IHswLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9IH0sCisJIHsgezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH0gfSwKKwkgeyB7OTYsIFBDSTE3NTNfRElPLCA0LCAwfSwgezAsIDAsIDAsIDB9IH0sCiAJIHswLCAwLCAwLCAwfSwKLQkge3swLCAwLCAwLCAwfX0sCisJIHsgezAsIDAsIDAsIDB9IH0sCiAJIElPXzhifSwKIAl7InBjaTE3NTNlIiwgUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTc1MywgUENJRElPX01BSU5SRUcsCiAJIFRZUEVfUENJMTc1M0UsCi0JIHt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCi0JIHt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCi0JIHt7OTYsIFBDSTE3NTNfRElPLCA0LCAwfSwgezk2LCBQQ0kxNzUzRV9ESU8sIDQsIDB9fSwKKwkgeyB7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfSB9LAorCSB7IHswLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9IH0sCisJIHsgezk2LCBQQ0kxNzUzX0RJTywgNCwgMH0sIHs5NiwgUENJMTc1M0VfRElPLCA0LCAwfSB9LAogCSB7MCwgMCwgMCwgMH0sCi0JIHt7MCwgMCwgMCwgMH19LAorCSB7IHswLCAwLCAwLCAwfSB9LAogCSBJT184Yn0sCiAJeyJwY2kxNzU0IiwgUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTc1NCwgUENJRElPX01BSU5SRUcsCiAJIFRZUEVfUENJMTc1NCwKLQkge3szMiwgUENJMTc1NF9JREksIDIsIDB9LCB7MzIsIFBDSTE3NTRfSURJMiwgMiwgMH19LAotCSB7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAotCSB7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCSB7IHszMiwgUENJMTc1NF9JREksIDIsIDB9LCB7MzIsIFBDSTE3NTRfSURJMiwgMiwgMH0gfSwKKwkgeyB7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfSB9LAorCSB7IHswLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9IH0sCiAJIHs0LCBQQ0kxNzV4X0JPQVJESUQsIDEsIFNERl9JTlRFUk5BTH0sCi0JIHt7MCwgMCwgMCwgMH19LAorCSB7IHswLCAwLCAwLCAwfSB9LAogCSBJT18xNmJ9LAogCXsicGNpMTc1NiIsIFBDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3NTYsIFBDSURJT19NQUlOUkVHLAogCSBUWVBFX1BDSTE3NTYsCi0JIHt7MCwgMCwgMCwgMH0sIHszMiwgUENJMTc1Nl9JREksIDIsIDB9fSwKLQkge3swLCAwLCAwLCAwfSwgezMyLCBQQ0kxNzU2X0lETywgMiwgMH19LAotCSB7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCSB7IHswLCAwLCAwLCAwfSwgezMyLCBQQ0kxNzU2X0lESSwgMiwgMH0gfSwKKwkgeyB7MCwgMCwgMCwgMH0sIHszMiwgUENJMTc1Nl9JRE8sIDIsIDB9IH0sCisJIHsgezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH0gfSwKIAkgezQsIFBDSTE3NXhfQk9BUkRJRCwgMSwgU0RGX0lOVEVSTkFMfSwKLQkge3swLCAwLCAwLCAwfX0sCisJIHsgezAsIDAsIDAsIDB9IH0sCiAJIElPXzE2Yn0sCiAJeyJwY2kxNzYwIiwgUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTc2MCwgMCwKIAkgVFlQRV9QQ0kxNzYwLAotCSB7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAkvKiAgVGhpcyBjYXJkIGhhdmUgb3duIHNldHVwIHdvcmsgKi8KLQkge3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKLQkge3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkgeyB7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfSB9LCAvKiBUaGlzIGNhcmQgaGF2ZSBvd24gc2V0dXAgd29yayAqLworCSB7IHswLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9IH0sCisJIHsgezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH0gfSwKIAkgezAsIDAsIDAsIDB9LAotCSB7ezAsIDAsIDAsIDB9fSwKKwkgeyB7MCwgMCwgMCwgMH0gfSwKIAkgSU9fOGJ9LAogCXsicGNpMTc2MiIsIFBDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3NjIsIFBDSURJT19NQUlOUkVHLAogCSBUWVBFX1BDSTE3NjIsCi0JIHt7MCwgMCwgMCwgMH0sIHsxNiwgUENJMTc2Ml9JREksIDEsIDB9fSwKLQkge3swLCAwLCAwLCAwfSwgezE2LCBQQ0kxNzYyX1JPLCAxLCAwfX0sCi0JIHt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCisJIHsgezAsIDAsIDAsIDB9LCB7MTYsIFBDSTE3NjJfSURJLCAxLCAwfSB9LAorCSB7IHswLCAwLCAwLCAwfSwgezE2LCBQQ0kxNzYyX1JPLCAxLCAwfSB9LAorCSB7IHswLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9IH0sCiAJIHs0LCBQQ0kxNzYyX0JPQVJESUQsIDEsIFNERl9JTlRFUk5BTH0sCi0JIHt7MCwgMCwgMCwgMH19LAorCSB7IHswLCAwLCAwLCAwfSB9LAogCSBJT18xNmJ9CiB9OwogCkBAIC0zNzIsMTMgKzQwNiwxNiBAQAogCWNoYXIgdmFsaWQ7CQkvKiAgY2FyZCBpcyB1c2FibGUgKi8KIAljaGFyIEdsb2JhbElycUVuYWJsZWQ7CS8qICAxPSBhbnkgSVJRIHNvdXJjZSBpcyBlbmFibGVkICovCiAJLyogIFBDSS0xNzYwIHNwZWNpZmljIGRhdGEgKi8KLQl1bnNpZ25lZCBjaGFyIElESUNudEVuYWJsZTsJLyogIGNvdW50ZXIncyBjb3VudGluZyBlbmFibGUgc3RhdHVzICovCi0JdW5zaWduZWQgY2hhciBJRElDbnRPdmVyRW5hYmxlOwkvKiAgY291bnRlcidzIG92ZXJmbG93IGludGVycnVwdHMgZW5hYmxlIHN0YXR1cyAqLwotCXVuc2lnbmVkIGNoYXIgSURJQ250TWF0Y2hFbmFibGU7CS8qICBjb3VudGVyJ3MgbWF0Y2ggaW50ZXJydXB0cyBlbmFibGUgc3RhdHVzICovCi0JdW5zaWduZWQgY2hhciBJRElDbnRFZGdlOwkvKiAgY291bnRlcidzIGNvdW50IGVkZ2UgdmFsdWUgKGJpdD0wIC0gcmlzaW5nLCA9MSAtIGZhbGxpbmcpICovCisJdW5zaWduZWQgY2hhciBJRElDbnRFbmFibGU7CS8qIGNvdW50ZXIncyBjb3VudGluZyBlbmFibGUgc3RhdHVzICovCisJdW5zaWduZWQgY2hhciBJRElDbnRPdmVyRW5hYmxlOwkvKiBjb3VudGVyJ3Mgb3ZlcmZsb3cgaW50ZXJydXB0cyBlbmFibGUKKwkJCQkJICogc3RhdHVzICovCisJdW5zaWduZWQgY2hhciBJRElDbnRNYXRjaEVuYWJsZTsJLyogY291bnRlcidzIG1hdGNoIGludGVycnVwdHMKKwkJCQkJCSAqIGVuYWJsZSBzdGF0dXMgKi8KKwl1bnNpZ25lZCBjaGFyIElESUNudEVkZ2U7CS8qIGNvdW50ZXIncyBjb3VudCBlZGdlIHZhbHVlCisJCQkJCSAqIChiaXQ9MCAtIHJpc2luZywgPTEgLSBmYWxsaW5nKSAqLwogCXVuc2lnbmVkIHNob3J0IENudFJlc1ZhbHVlWzhdOwkvKiAgY291bnRlcnMnIHJlc2V0IHZhbHVlICovCi0JdW5zaWduZWQgc2hvcnQgQ250TWF0Y2hWYWx1ZVs4XTsJLyogIGNvdW50ZXJzJyBtYXRjaCBpbnRlcnJ1cHQgdmFsdWUgKi8KLQl1bnNpZ25lZCBjaGFyIElESUZpbHRlcnNFbjsJLyogIElESSdzIGRpZ2l0YWwgZmlsdGVycyBlbmFibGUgc3RhdHVzICovCisJdW5zaWduZWQgc2hvcnQgQ250TWF0Y2hWYWx1ZVs4XTsgLyogIGNvdW50ZXJzJyBtYXRjaCBpbnRlcnJ1cHQgdmFsdWUgKi8KKwl1bnNpZ25lZCBjaGFyIElESUZpbHRlcnNFbjsgLyogIElESSdzIGRpZ2l0YWwgZmlsdGVycyBlbmFibGUgc3RhdHVzICovCiAJdW5zaWduZWQgY2hhciBJRElQYXRNYXRjaEVuOwkvKiAgSURJJ3MgcGF0dGVybiBtYXRjaCBlbmFibGUgc3RhdHVzICovCiAJdW5zaWduZWQgY2hhciBJRElQYXRNYXRjaFZhbHVlOwkvKiAgSURJJ3MgcGF0dGVybiBtYXRjaCB2YWx1ZSAqLwogCXVuc2lnbmVkIHNob3J0IElESUZpbHRyTG93WzhdOwkvKiAgSURJJ3MgZmlsdGVyIHZhbHVlIGxvdyBzaWduYWwgKi8KQEAgLTY5MSw3ICs3MjgsOCBAQAogCX07CiAJdW5zaWduZWQgY2hhciBpbWJbNF07CiAKLQlpZiAoZGV2cHJpdi0+Q250UmVzVmFsdWVbY2hhbl0gIT0gKGRhdGFbMF0gJiAweGZmZmYpKSB7CS8qICBTZXQgcmVzZXQgdmFsdWUgaWYgZGlmZmVyZW50ICovCisJLyogU2V0IHJlc2V0IHZhbHVlIGlmIGRpZmZlcmVudCAqLworCWlmIChkZXZwcml2LT5DbnRSZXNWYWx1ZVtjaGFuXSAhPSAoZGF0YVswXSAmIDB4ZmZmZikpIHsKIAkJcmV0ID0gcGNpMTc2MF9tYnhyZXF1ZXN0KGRldiwgb21iLCBpbWIpOwogCQlpZiAoIXJldCkKIAkJCXJldHVybiByZXQ7CkBAIC03MDQsNyArNzQyLDggQEAKIAlpZiAoIXJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlmICghKGJpdG1hc2sgJiBkZXZwcml2LT5JRElDbnRFbmFibGUpKSB7CS8qICBzdGFydCBjb3VudGVyIGlmIGl0IGRvbid0IHJ1biAqLworCS8qICBzdGFydCBjb3VudGVyIGlmIGl0IGRvbid0IHJ1biAqLworCWlmICghKGJpdG1hc2sgJiBkZXZwcml2LT5JRElDbnRFbmFibGUpKSB7CiAJCW9tYlswXSA9IGJpdG1hc2s7CiAJCW9tYlsyXSA9IENNRF9FbmFibGVJRElDb3VudGVyczsKIAkJcmV0ID0gcGNpMTc2MF9tYnhyZXF1ZXN0KGRldiwgb21iLCBpbWIpOwpAQCAtNzQwLDEyICs3NzksMTQgQEAKIAlkZXZwcml2LT5JRElDbnRFbmFibGUgPSAwOwogCiAJb21iWzBdID0gMHgwMDsKLQlvbWJbMl0gPSBDTURfT3ZlcmZsb3dJRElDb3VudGVyczsJLyogIGRpc2FibGUgY291bnRlcnMgb3ZlcmZsb3cgaW50ZXJydXB0cyAqLworCW9tYlsyXSA9IENNRF9PdmVyZmxvd0lESUNvdW50ZXJzOyAvKiBkaXNhYmxlIGNvdW50ZXJzIG92ZXJmbG93CisJCQkJCSAgICogaW50ZXJydXB0cyAqLwogCXBjaTE3NjBfbWJ4cmVxdWVzdChkZXYsIG9tYiwgaW1iKTsKIAlkZXZwcml2LT5JRElDbnRPdmVyRW5hYmxlID0gMDsKIAogCW9tYlswXSA9IDB4MDA7Ci0Jb21iWzJdID0gQ01EX01hdGNoSW50SURJQ291bnRlcnM7CS8qICBkaXNhYmxlIGNvdW50ZXJzIG1hdGNoIHZhbHVlIGludGVycnVwdHMgKi8KKwlvbWJbMl0gPSBDTURfTWF0Y2hJbnRJRElDb3VudGVyczsgLyogZGlzYWJsZSBjb3VudGVycyBtYXRjaCB2YWx1ZQorCQkJCQkgICAqIGludGVycnVwdHMgKi8KIAlwY2kxNzYwX21ieHJlcXVlc3QoZGV2LCBvbWIsIGltYik7CiAJZGV2cHJpdi0+SURJQ250TWF0Y2hFbmFibGUgPSAwOwogCkBAIC03NjYsNyArODA3LDggQEAKIAl9CiAKIAlvbWJbMF0gPSAweGZmOwotCW9tYlsyXSA9IENNRF9SZXNldElESUNvdW50ZXJzOwkvKiAgcmVzZXQgSURJIHVwIGNvdW50ZXJzIHRvIHJlc2V0IHZhbHVlcyAqLworCW9tYlsyXSA9IENNRF9SZXNldElESUNvdW50ZXJzOyAvKiByZXNldCBJREkgdXAgY291bnRlcnMgdG8gcmVzZXQKKwkJCQkJKiB2YWx1ZXMgKi8KIAlwY2kxNzYwX21ieHJlcXVlc3QoZGV2LCBvbWIsIGltYik7CiAKIAlvbWJbMF0gPSAweDAwOwpAQCAtODA3LDkgKzg0OSwxMiBAQAogCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTczMF9JRE8gKyAxKTsKIAkJLyogTk8gYnJlYWsgdGhlcmUhICovCiAJY2FzZSBUWVBFX1BDSTE3MzM6Ci0JCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzMwXzNfSU5UX0VOKTsJLyogIGRpc2FibGUgaW50ZXJydXB0cyAqLwotCQlvdXRiKDB4MGYsIGRldi0+aW9iYXNlICsgUENJMTczMF8zX0lOVF9DTFIpOwkvKiAgY2xlYXIgaW50ZXJydXB0cyAqLwotCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTczMF8zX0lOVF9SRik7CS8qICBzZXQgcmlzaW5nIGVkZ2UgdHJpZ2dlciAqLworCQkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MzBfM19JTlRfRU4pOworCQkvKiBjbGVhciBpbnRlcnJ1cHRzICovCisJCW91dGIoMHgwZiwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzMwXzNfSU5UX0NMUik7CisJCS8qIHNldCByaXNpbmcgZWRnZSB0cmlnZ2VyICovCisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzMwXzNfSU5UX1JGKTsKIAkJYnJlYWs7CiAJY2FzZSBUWVBFX1BDSTE3MzQ6CiAJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzM0X0lETyk7CS8qICBjbGVhciBvdXRwdXRzICovCkBAIC04MzAsNDMgKzg3NSw1MyBAQAogCWNhc2UgVFlQRV9QQ0kxNzM2OgogCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTczNl9JRE8pOwogCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTczNl9JRE8gKyAxKTsKLQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MzZfM19JTlRfRU4pOwkvKiAgZGlzYWJsZSBpbnRlcnJ1cHRzICovCi0JCW91dGIoMHgwZiwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzM2XzNfSU5UX0NMUik7CS8qICBjbGVhciBpbnRlcnJ1cHRzICovCi0JCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzM2XzNfSU5UX1JGKTsJLyogIHNldCByaXNpbmcgZWRnZSB0cmlnZ2VyICovCisJCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTczNl8zX0lOVF9FTik7CisJCS8qIGNsZWFyIGludGVycnVwdHMgKi8KKwkJb3V0YigweDBmLCBkZXYtPmlvYmFzZSArIFBDSTE3MzZfM19JTlRfQ0xSKTsKKwkJLyogc2V0IHJpc2luZyBlZGdlIHRyaWdnZXIgKi8KKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MzZfM19JTlRfUkYpOwogCQlicmVhazsKIAogCWNhc2UgVFlQRV9QQ0kxNzUwOgogCWNhc2UgVFlQRV9QQ0kxNzUxOgotCQlvdXRiKDB4ODgsIGRldi0+aW9iYXNlICsgUENJMTc1MF9JQ1IpOwkvKiAgZGlzYWJsZSAmIGNsZWFyIGludGVycnVwdHMgKi8KKwkJLyogZGlzYWJsZSAmIGNsZWFyIGludGVycnVwdHMgKi8KKwkJb3V0YigweDg4LCBkZXYtPmlvYmFzZSArIFBDSTE3NTBfSUNSKTsKIAkJYnJlYWs7CiAJY2FzZSBUWVBFX1BDSTE3NTI6Ci0JCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUyXzZfQ0ZDKTsJLyogIGRpc2FibGUgY2hhbm5lbCBmcmVlemUgZnVuY3Rpb24gKi8KKwkJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTE3NTJfNl9DRkMpOyAvKiBkaXNhYmxlIGNoYW5uZWwgZnJlZXplCisJCQkJCQkgICAgICAgKiBmdW5jdGlvbiAqLwogCQlvdXR3KDAsIGRldi0+aW9iYXNlICsgUENJMTc1Ml9JRE8pOwkvKiAgY2xlYXIgb3V0cHV0cyAqLwogCQlvdXR3KDAsIGRldi0+aW9iYXNlICsgUENJMTc1Ml9JRE8gKyAyKTsKIAkJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTE3NTJfSURPMik7CiAJCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUyX0lETzIgKyAyKTsKIAkJYnJlYWs7CiAJY2FzZSBUWVBFX1BDSTE3NTNFOgotCQlvdXRiKDB4ODgsIGRldi0+aW9iYXNlICsgUENJMTc1M0VfSUNSMCk7CS8qICBkaXNhYmxlICYgY2xlYXIgaW50ZXJydXB0cyAqLworCQlvdXRiKDB4ODgsIGRldi0+aW9iYXNlICsgUENJMTc1M0VfSUNSMCk7IC8qIGRpc2FibGUgJiBjbGVhcgorCQkJCQkJCSAgKiBpbnRlcnJ1cHRzICovCiAJCW91dGIoMHg4MCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUzRV9JQ1IxKTsKIAkJb3V0YigweDgwLCBkZXYtPmlvYmFzZSArIFBDSTE3NTNFX0lDUjIpOwogCQlvdXRiKDB4ODAsIGRldi0+aW9iYXNlICsgUENJMTc1M0VfSUNSMyk7CiAJCS8qIE5PIGJyZWFrIHRoZXJlISAqLwogCWNhc2UgVFlQRV9QQ0kxNzUzOgotCQlvdXRiKDB4ODgsIGRldi0+aW9iYXNlICsgUENJMTc1M19JQ1IwKTsJLyogIGRpc2FibGUgJiBjbGVhciBpbnRlcnJ1cHRzICovCisJCW91dGIoMHg4OCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUzX0lDUjApOyAvKiBkaXNhYmxlICYgY2xlYXIKKwkJCQkJCQkgKiBpbnRlcnJ1cHRzICovCiAJCW91dGIoMHg4MCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUzX0lDUjEpOwogCQlvdXRiKDB4ODAsIGRldi0+aW9iYXNlICsgUENJMTc1M19JQ1IyKTsKIAkJb3V0YigweDgwLCBkZXYtPmlvYmFzZSArIFBDSTE3NTNfSUNSMyk7CiAJCWJyZWFrOwogCWNhc2UgVFlQRV9QQ0kxNzU0OgotCQlvdXR3KDB4MDgsIGRldi0+aW9iYXNlICsgUENJMTc1NF82X0lDUjApOwkvKiAgZGlzYWJsZSBhbmQgY2xlYXIgaW50ZXJydXB0cyAqLworCQlvdXR3KDB4MDgsIGRldi0+aW9iYXNlICsgUENJMTc1NF82X0lDUjApOyAvKiBkaXNhYmxlIGFuZCBjbGVhcgorCQkJCQkJCSAgICogaW50ZXJydXB0cyAqLwogCQlvdXR3KDB4MDgsIGRldi0+aW9iYXNlICsgUENJMTc1NF82X0lDUjEpOwogCQlvdXR3KDB4MDgsIGRldi0+aW9iYXNlICsgUENJMTc1NF9JQ1IyKTsKIAkJb3V0dygweDA4LCBkZXYtPmlvYmFzZSArIFBDSTE3NTRfSUNSMyk7CiAJCWJyZWFrOwogCWNhc2UgVFlQRV9QQ0kxNzU2OgotCQlvdXR3KDAsIGRldi0+aW9iYXNlICsgUENJMTc1Ml82X0NGQyk7CS8qICBkaXNhYmxlIGNoYW5uZWwgZnJlZXplIGZ1bmN0aW9uICovCi0JCW91dHcoMHgwOCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzU0XzZfSUNSMCk7CS8qICBkaXNhYmxlIGFuZCBjbGVhciBpbnRlcnJ1cHRzICovCisJCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUyXzZfQ0ZDKTsgLyogZGlzYWJsZSBjaGFubmVsIGZyZWV6ZQorCQkJCQkJICAgICAgICogZnVuY3Rpb24gKi8KKwkJb3V0dygweDA4LCBkZXYtPmlvYmFzZSArIFBDSTE3NTRfNl9JQ1IwKTsgLyogZGlzYWJsZSBhbmQgY2xlYXIKKwkJCQkJCQkgICAqIGludGVycnVwdHMgKi8KIAkJb3V0dygweDA4LCBkZXYtPmlvYmFzZSArIFBDSTE3NTRfNl9JQ1IxKTsKIAkJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTE3NTZfSURPKTsJLyogIGNsZWFyIG91dHB1dHMgKi8KIAkJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTE3NTZfSURPICsgMik7CkBAIC04NzUsNyArOTMwLDggQEAKIAkJcGNpMTc2MF9yZXNldChkZXYpOwogCQlicmVhazsKIAljYXNlIFRZUEVfUENJMTc2MjoKLQkJb3V0dygweDAxMDEsIGRldi0+aW9iYXNlICsgUENJMTc2Ml9JQ1IpOwkvKiAgZGlzYWJsZSAmIGNsZWFyIGludGVycnVwdHMgKi8KKwkJb3V0dygweDAxMDEsIGRldi0+aW9iYXNlICsgUENJMTc2Ml9JQ1IpOyAvKiBkaXNhYmxlICYgY2xlYXIKKwkJCQkJCQkgICogaW50ZXJydXB0cyAqLwogCQlicmVhazsKIAl9CiAKQEAgLTk5Niw3ICsxMDUyLDcgQEAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KIHN0YXRpYyBpbnQgcGNpX2Rpb19hZGRfODI1NChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwkJCSAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKIAkJCSAgICBjb25zdCBzdHJ1Y3QgZGlvc3ViZF9kYXRhICpkLCBpbnQgc3ViZGV2KQogewogCXMtPnR5cGUgPSBDT01FRElfU1VCRF9DT1VOVEVSOwpAQCAtMTAyMyw3ICsxMDc5LDcgQEAKIAogCWZvciAocHIgPSBwY2lfcHJpdiwgcHJldiA9IE5VTEw7IHByICE9IE5VTEw7IHByZXYgPSBwciwgcHIgPSBwci0+bmV4dCkgewogCQlpZiAocHItPnBjaWRldiA9PSBwY2lkZXYpCi0JCQlyZXR1cm4gMDsJLyogIHRoaXMgY2FyZCBpcyB1c2VkLCBsb29rIGZvciBhbm90aGVyICovCisJCQlyZXR1cm4gMDsgLyogdGhpcyBjYXJkIGlzIHVzZWQsIGxvb2sgZm9yIGFub3RoZXIgKi8KIAogCX0KIApAQCAtMTA0OCw3ICsxMTA0LDcgQEAKIAlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAlpbnQgcmV0LCBzdWJkZXYsIG5fc3ViZGV2aWNlcywgaSwgajsKIAl1bnNpZ25lZCBsb25nIGlvYmFzZTsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXYgPSBOVUxMOwogCiAJcHJpbnRrKCJjb21lZGklZDogYWR2X3BjaV9kaW86ICIsIGRldi0+bWlub3IpOwogCkBAIC0xMDU4LDkgKzExMTQsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlmb3IgKHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOwotCSAgICAgcGNpZGV2ICE9IE5VTEw7Ci0JICAgICBwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lkZXYpKSB7CisJZm9yX2VhY2hfcGNpX2RldihwY2lkZXYpIHsKIAkJLyogIGxvb3AgdGhyb3VnaCBjYXJkcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIgKi8KIAkJZm9yIChpID0gMDsgaSA8IG5fYm9hcmR0eXBlczsgKytpKSB7CiAJCQlpZiAoYm9hcmR0eXBlc1tpXS52ZW5kb3JfaWQgIT0gcGNpZGV2LT52ZW5kb3IpCkBAIC0xMjE1LDE1ICsxMjY5LDEyIEBACiAJCQl9CiAJCX0KIAotCQlpZiAodGhpc19ib2FyZC0+Ym9hcmRpZC5jaGFucykgeworCQlpZiAodGhpc19ib2FyZC0+Ym9hcmRpZC5jaGFucykKIAkJCXN1YmRldisrOwotCQl9CiAKLQkJZm9yIChpID0gMDsgaSA8IE1BWF84MjU0X1NVQkRFVlM7IGkrKykgewotCQkJaWYgKHRoaXNfYm9hcmQtPnM4MjU0W2ldLmNoYW5zKSB7CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfODI1NF9TVUJERVZTOyBpKyspCisJCQlpZiAodGhpc19ib2FyZC0+czgyNTRbaV0uY2hhbnMpCiAJCQkJc3ViZGV2Kys7Ci0JCQl9Ci0JCX0KIAogCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5uX3N1YmRldmljZXM7IGkrKykgewogCQkJcyA9IGRldi0+c3ViZGV2aWNlcyArIGk7CkBAIC0xMjUzLDcgKzEzMDQsNDcgQEAKIC8qCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2lfZGlvLCBwY2lfZGlvX3BjaV90YWJsZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBkcml2ZXJfcGNpX2Rpb19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIGRyaXZlcl9wY2lfZGlvLmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRyaXZlcl9wY2lfZGlvX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9wY2lfZGlvX3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gcGNpX2Rpb19wY2lfdGFibGUsCisJLnByb2JlID0gJmRyaXZlcl9wY2lfZGlvX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9wY2lfZGlvX3BjaV9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfcGNpX2Rpb19pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfcGNpX2Rpbyk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfcGNpX2Rpb19wY2lfZHJpdmVyLm5hbWUgPSAoY2hhciAqKWRyaXZlcl9wY2lfZGlvLmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfcGNpX2Rpb19wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9wY2lfZGlvX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfcGNpX2Rpb19wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9wY2lfZGlvKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX3BjaV9kaW9faW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX3BjaV9kaW9fY2xlYW51cF9tb2R1bGUpOwogLyoKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fpb19haW8xMl84LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWlvX2FpbzEyXzguYwppbmRleCA3YTFjNjM2Li4xNzI4Y2MwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWlvX2FpbzEyXzguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWlvX2FpbzEyXzguYwpAQCAtMjI3LDQgKzIyNywxOSBAQAogCS5vZmZzZXQgPSBzaXplb2Yoc3RydWN0IGFpbzEyXzhfYm9hcmR0eXBlKSwKIH07CiAKLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfYWlvX2FpbzEyXzgpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2Fpb19haW8xMl84X2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9haW9fYWlvMTJfOCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfYWlvX2FpbzEyXzhfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9haW9fYWlvMTJfOCk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9haW9fYWlvMTJfOF9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfYWlvX2FpbzEyXzhfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWlvX2lpcm9fMTYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9haW9faWlyb18xNi5jCmluZGV4IDRiYWVmOWYuLjQ4NzU5OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9haW9faWlyb18xNi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9haW9faWlyb18xNi5jCkBAIC0xODQsNCArMTg0LDE5IEBACiAJcmV0dXJuIDI7CiB9CiAKLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfYWlvX2lpcm9fMTYpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2Fpb19paXJvXzE2X2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9haW9faWlyb18xNik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfYWlvX2lpcm9fMTZfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9haW9faWlyb18xNik7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9haW9faWlyb18xNl9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfYWlvX2lpcm9fMTZfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW05NTEzLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW05NTEzLmgKaW5kZXggNzMzNjdkNi4uMGJiODM5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtOTUxMy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbTk1MTMuaApAQCAtNDcsMzIgKzQ3LDMyIEBACiAjaWZkZWYgQW05NTEzXzhCSVRCVVMKIAogI2RlZmluZSBBbTk1MTNfd3JpdGVfcmVnaXN0ZXIocmVnLCB2YWwpCQkJCVwKLQlkb3sJCQkJCQkJXAorCWRvIHsJCQkJCQkJXAogCQlBbTk1MTNfb3V0cHV0X2NvbnRyb2wocmVnKTsJCQlcCiAJCUFtOTUxM19vdXRwdXRfZGF0YSh2YWw+PjgpOwkJCVwKIAkJQW05NTEzX291dHB1dF9kYXRhKHZhbCYweGZmKTsJCQlcCi0JfXdoaWxlICgwKQorCX0gd2hpbGUgKDApCiAKICNkZWZpbmUgQW05NTEzX3JlYWRfcmVnaXN0ZXIocmVnLCB2YWwpCQkJCVwKLQlkb3sJCQkJCQkJXAorCWRvIHsJCQkJCQkJXAogCQlBbTk1MTNfb3V0cHV0X2NvbnRyb2wocmVnKTsJCQlcCi0JCXZhbD1BbTk1MTNfaW5wdXRfZGF0YSgpPDw4OwkJCVwKLQkJdmFsfD1BbTk1MTNfaW5wdXRfZGF0YSgpOwkJCVwKLQl9d2hpbGUgKDApCisJCXZhbCA9IEFtOTUxM19pbnB1dF9kYXRhKCk8PDg7CQkJXAorCQl2YWwgfD0gQW05NTEzX2lucHV0X2RhdGEoKTsJCQlcCisJfSB3aGlsZSAoMCkKIAogI2Vsc2UgLyogQW05NTEzXzE2QklUQlVTICovCiAKICNkZWZpbmUgQW05NTEzX3dyaXRlX3JlZ2lzdGVyKHJlZywgdmFsKQkJCQlcCi0JZG97CQkJCQkJCVwKKwlkbyB7CQkJCQkJCVwKIAkJQW05NTEzX291dHB1dF9jb250cm9sKHJlZyk7CQkJXAogCQlBbTk1MTNfb3V0cHV0X2RhdGEodmFsKTsJCQlcCi0JfXdoaWxlICgwKQorCX0gd2hpbGUgKDApCiAKICNkZWZpbmUgQW05NTEzX3JlYWRfcmVnaXN0ZXIocmVnLCB2YWwpCQkJCVwKLQlkb3sJCQkJCQkJXAorCWRvIHsJCQkJCQkJXAogCQlBbTk1MTNfb3V0cHV0X2NvbnRyb2wocmVnKTsJCQlcCi0JCXZhbD1BbTk1MTNfaW5wdXRfZGF0YSgpOwkJCVwKLQl9d2hpbGUgKDApCisJCXZhbCA9IEFtOTUxM19pbnB1dF9kYXRhKCk7CQkJXAorCX0gd2hpbGUgKDApCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfZGlvMjAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfZGlvMjAwLmMKaW5kZXggYmYyNzYxNy4uOTNiYmU0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX2RpbzIwMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19kaW8yMDAuYwpAQCAtNDk0LDkgKzQ5NCw1OCBAQAogfTsKIAogI2lmZGVmIENPTkZJR19DT01FRElfUENJCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9hbXBsY19kaW8yMDAsIGRpbzIwMF9wY2lfdGFibGUpOworc3RhdGljIGludCBfX2RldmluaXQgZHJpdmVyX2FtcGxjX2RpbzIwMF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkCisJCQkJCQkgICAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgZHJpdmVyX2FtcGxjX2RpbzIwMC5kcml2ZXJfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkcml2ZXJfYW1wbGNfZGlvMjAwX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9hbXBsY19kaW8yMDBfcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBkaW8yMDBfcGNpX3RhYmxlLAorCS5wcm9iZSA9ICZkcml2ZXJfYW1wbGNfZGlvMjAwX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9hbXBsY19kaW8yMDBfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9hbXBsY19kaW8yMDBfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2FtcGxjX2RpbzIwMCk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfYW1wbGNfZGlvMjAwX3BjaV9kcml2ZXIubmFtZSA9CisJICAgIChjaGFyICopZHJpdmVyX2FtcGxjX2RpbzIwMC5kcml2ZXJfbmFtZTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2FtcGxjX2RpbzIwMF9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9hbXBsY19kaW8yMDBfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9hbXBsY19kaW8yMDBfcGNpX2RyaXZlcik7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfYW1wbGNfZGlvMjAwKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2FtcGxjX2RpbzIwMF9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfYW1wbGNfZGlvMjAwX2NsZWFudXBfbW9kdWxlKTsKICNlbHNlCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2FtcGxjX2RpbzIwMCk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfYW1wbGNfZGlvMjAwX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9hbXBsY19kaW8yMDApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2FtcGxjX2RpbzIwMF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2FtcGxjX2RpbzIwMCk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9hbXBsY19kaW8yMDBfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2FtcGxjX2RpbzIwMF9jbGVhbnVwX21vZHVsZSk7CiAjZW5kaWYKIAogLyoKQEAgLTE1MDEsMyArMTU1MCw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjMjM2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGMyMzYuYwppbmRleCBhMzA3ZDY4Li40ODI0NmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGMyMzYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGMyMzYuYwpAQCAtMTgyLDkgKzE4Miw1OCBAQAogfTsKIAogI2lmZGVmIENPTkZJR19DT01FRElfUENJCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9hbXBsY19wYzIzNiwgcGMyMzZfcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9hbXBsY19wYzIzNl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQKKwkJCQkJCSAgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIGRyaXZlcl9hbXBsY19wYzIzNi5kcml2ZXJfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkcml2ZXJfYW1wbGNfcGMyMzZfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyX2FtcGxjX3BjMjM2X3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gcGMyMzZfcGNpX3RhYmxlLAorCS5wcm9iZSA9ICZkcml2ZXJfYW1wbGNfcGMyMzZfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmZHJpdmVyX2FtcGxjX3BjMjM2X3BjaV9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfYW1wbGNfcGMyMzZfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2FtcGxjX3BjMjM2KTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRyaXZlcl9hbXBsY19wYzIzNl9wY2lfZHJpdmVyLm5hbWUgPQorCSAgICAoY2hhciAqKWRyaXZlcl9hbXBsY19wYzIzNi5kcml2ZXJfbmFtZTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2FtcGxjX3BjMjM2X3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2FtcGxjX3BjMjM2X2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfYW1wbGNfcGMyMzZfcGNpX2RyaXZlcik7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfYW1wbGNfcGMyMzYpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfYW1wbGNfcGMyMzZfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2FtcGxjX3BjMjM2X2NsZWFudXBfbW9kdWxlKTsKICNlbHNlCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2FtcGxjX3BjMjM2KTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9hbXBsY19wYzIzNl9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfYW1wbGNfcGMyMzYpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2FtcGxjX3BjMjM2X2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfYW1wbGNfcGMyMzYpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfYW1wbGNfcGMyMzZfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2FtcGxjX3BjMjM2X2NsZWFudXBfbW9kdWxlKTsKICNlbmRpZgogCiBzdGF0aWMgaW50IHBjMjM2X3JlcXVlc3RfcmVnaW9uKHVuc2lnbmVkIG1pbm9yLCB1bnNpZ25lZCBsb25nIGZyb20sCkBAIC02NjQsMyArNzEzLDcgQEAKIAl9CiAJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wYzI2My5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjMjYzLmMKaW5kZXggMTU4MDhlOS4uOGEzMzg4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjMjYzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjMjYzLmMKQEAgLTQzMiw3ICs0MzIsNjAgQEAKICAqIGFzIG5lY2Vzc2FyeS4KICAqLwogI2lmZGVmIENPTkZJR19DT01FRElfUENJCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9hbXBsY19wYzI2MywgcGMyNjNfcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9hbXBsY19wYzI2M19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQKKwkJCQkJCSAgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIGRyaXZlcl9hbXBsY19wYzI2My5kcml2ZXJfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkcml2ZXJfYW1wbGNfcGMyNjNfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyX2FtcGxjX3BjMjYzX3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gcGMyNjNfcGNpX3RhYmxlLAorCS5wcm9iZSA9ICZkcml2ZXJfYW1wbGNfcGMyNjNfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmZHJpdmVyX2FtcGxjX3BjMjYzX3BjaV9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfYW1wbGNfcGMyNjNfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2FtcGxjX3BjMjYzKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRyaXZlcl9hbXBsY19wYzI2M19wY2lfZHJpdmVyLm5hbWUgPQorCSAgICAoY2hhciAqKWRyaXZlcl9hbXBsY19wYzI2My5kcml2ZXJfbmFtZTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2FtcGxjX3BjMjYzX3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2FtcGxjX3BjMjYzX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfYW1wbGNfcGMyNjNfcGNpX2RyaXZlcik7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfYW1wbGNfcGMyNjMpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfYW1wbGNfcGMyNjNfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2FtcGxjX3BjMjYzX2NsZWFudXBfbW9kdWxlKTsKICNlbHNlCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2FtcGxjX3BjMjYzKTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9hbXBsY19wYzI2M19pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfYW1wbGNfcGMyNjMpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2FtcGxjX3BjMjYzX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfYW1wbGNfcGMyNjMpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfYW1wbGNfcGMyNjNfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2FtcGxjX3BjMjYzX2NsZWFudXBfbW9kdWxlKTsKICNlbmRpZgorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGNpMjI0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGNpMjI0LmMKaW5kZXggYzQ4NmE4Ny4uMWI1YmExYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjaTIyNC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wY2kyMjQuYwpAQCAtNDQzLDcgKzQ0Myw0NSBAQAogCS5udW1fbmFtZXMgPSBBUlJBWV9TSVpFKHBjaTIyNF9ib2FyZHMpLAogfTsKIAotQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfYW1wbGNfcGNpMjI0LCBwY2kyMjRfcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9hbXBsY19wY2kyMjRfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZAorCQkJCQkJICAgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIGRyaXZlcl9hbXBsY19wY2kyMjQuZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX2FtcGxjX3BjaTIyNF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXJfYW1wbGNfcGNpMjI0X3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gcGNpMjI0X3BjaV90YWJsZSwKKwkucHJvYmUgPSAmZHJpdmVyX2FtcGxjX3BjaTIyNF9wY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKCZkcml2ZXJfYW1wbGNfcGNpMjI0X3BjaV9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfYW1wbGNfcGNpMjI0X2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9hbXBsY19wY2kyMjQpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJZHJpdmVyX2FtcGxjX3BjaTIyNF9wY2lfZHJpdmVyLm5hbWUgPQorCSAgICAoY2hhciAqKWRyaXZlcl9hbXBsY19wY2kyMjQuZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9hbXBsY19wY2kyMjRfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfYW1wbGNfcGNpMjI0X2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfYW1wbGNfcGNpMjI0X3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2FtcGxjX3BjaTIyNCk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9hbXBsY19wY2kyMjRfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2FtcGxjX3BjaTIyNF9jbGVhbnVwX21vZHVsZSk7CiAKIC8qCiAgKiBDYWxsZWQgZnJvbSB0aGUgJ2luc25fd3JpdGUnIGZ1bmN0aW9uIHRvIHBlcmZvcm0gYSBzaW5nbGUgd3JpdGUuCkBAIC0xNTU3LDMgKzE1OTUsNyBAQAogCiAJcmV0dXJuIDA7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wY2kyMzAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wY2kyMzAuYwppbmRleCA3ZmZmZDk2Li41ZDA2NDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGNpMjMwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjaTIzMC5jCkBAIC02MTcsNyArNjE3LDQ1IEBACiAJLm51bV9uYW1lcyA9IEFSUkFZX1NJWkUocGNpMjMwX2JvYXJkcyksCiB9OwogCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9hbXBsY19wY2kyMzAsIHBjaTIzMF9wY2lfdGFibGUpOworc3RhdGljIGludCBfX2RldmluaXQgZHJpdmVyX2FtcGxjX3BjaTIzMF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkCisJCQkJCQkgICAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgZHJpdmVyX2FtcGxjX3BjaTIzMC5kcml2ZXJfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkcml2ZXJfYW1wbGNfcGNpMjMwX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9hbXBsY19wY2kyMzBfcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBwY2kyMzBfcGNpX3RhYmxlLAorCS5wcm9iZSA9ICZkcml2ZXJfYW1wbGNfcGNpMjMwX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9hbXBsY19wY2kyMzBfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9hbXBsY19wY2kyMzBfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2FtcGxjX3BjaTIzMCk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfYW1wbGNfcGNpMjMwX3BjaV9kcml2ZXIubmFtZSA9CisJICAgIChjaGFyICopZHJpdmVyX2FtcGxjX3BjaTIzMC5kcml2ZXJfbmFtZTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2FtcGxjX3BjaTIzMF9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9hbXBsY19wY2kyMzBfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9hbXBsY19wY2kyMzBfcGNpX2RyaXZlcik7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfYW1wbGNfcGNpMjMwKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2FtcGxjX3BjaTIzMF9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfYW1wbGNfcGNpMjMwX2NsZWFudXBfbW9kdWxlKTsKIAogc3RhdGljIGludCBwY2kyMzBfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCkBAIC03MjYsNyArNzY0LDcgQEAKIAlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAl1bnNpZ25lZCBsb25nIGlvYmFzZTEsIGlvYmFzZTI7CiAJLyogUENJMjMwJ3MgSS9PIHNwYWNlcyAxIGFuZCAyIHJlc3BlY3RpdmVseS4gKi8KLQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IE5VTEw7CiAJaW50IGkgPSAwLCBpcnFfaGRsLCByYzsKIAogCXByaW50aygiY29tZWRpJWQ6IGFtcGxjX3BjaTIzMDogYXR0YWNoICVzICVkLCVkXG4iLCBkZXYtPm1pbm9yLApAQCAtNzQyLDkgKzc4MCw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJmRldnByaXYtPmFpX3N0b3Bfc3BpbmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZkZXZwcml2LT5hb19zdG9wX3NwaW5sb2NrKTsKIAkvKiBGaW5kIGNhcmQgKi8KLQlmb3IgKHBjaV9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKLQkgICAgIHBjaV9kZXYgIT0gTlVMTDsKLQkgICAgIHBjaV9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lfZGV2KSkgeworCWZvcl9lYWNoX3BjaV9kZXYocGNpX2RldikgewogCQlpZiAoaXQtPm9wdGlvbnNbMF0gfHwgaXQtPm9wdGlvbnNbMV0pIHsKIAkJCS8qIE1hdGNoIGFnYWluc3QgYnVzL3Nsb3Qgb3B0aW9ucy4gKi8KIAkJCWlmIChpdC0+b3B0aW9uc1swXSAhPSBwY2lfZGV2LT5idXMtPm51bWJlciB8fApAQCAtMzAxNCwzICszMDUwLDcgQEAKIAlwY2kyMzBfYWlfc3RvcChkZXYsIHMpOwogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYzZ4ZGlnaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jNnhkaWdpby5jCmluZGV4IGZiMGQ1ZmEuLmUwYWM4MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jNnhkaWdpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jNnhkaWdpby5jCkBAIC01MTcsNCArNTE3LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfYzZ4ZGlnaW8pOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2M2eGRpZ2lvX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9jNnhkaWdpbyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfYzZ4ZGlnaW9fY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9jNnhkaWdpbyk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9jNnhkaWdpb19pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfYzZ4ZGlnaW9fY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfZGFzMTZfY3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9kYXMxNl9jcy5jCmluZGV4IGNmZWIxMWYuLmY4ZWRlMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9kYXMxNl9jcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9kYXMxNl9jcy5jCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KQEAgLTE3MSw3ICsxNzAsNyBAQAogCWlmICghbGluaykKIAkJcmV0dXJuIC1FSU87CiAKLQlkZXYtPmlvYmFzZSA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKwlkZXYtPmlvYmFzZSA9IGxpbmstPnJlc291cmNlWzBdLT5zdGFydDs7CiAJcHJpbnRrKCJJL08gYmFzZT0weCUwNGx4ICIsIGRldi0+aW9iYXNlKTsKIAogCXByaW50aygiZmluZ2VycHJpbnQ6XG4iKTsKQEAgLTY2MiwxNCArNjYxLDYgQEAKICAgIGxlc3Mgb24gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4KICovCiAKLS8qCi0gICBUaGUgZGV2X2luZm8gdmFyaWFibGUgaXMgdGhlICJrZXkiIHRoYXQgaXMgdXNlZCB0byBtYXRjaCB1cCB0aGlzCi0gICBkZXZpY2UgZHJpdmVyIHdpdGggYXBwcm9wcmlhdGUgY2FyZHMsIHRocm91Z2ggdGhlIGNhcmQgY29uZmlndXJhdGlvbgotICAgZGF0YWJhc2UuCi0qLwotCi1zdGF0aWMgZGV2X2luZm9fdCBkZXZfaW5mbyA9ICJjYl9kYXMxNl9jcyI7Ci0KIHN0cnVjdCBsb2NhbF9pbmZvX3QgewogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOwogCWludCBzdG9wOwpAQCAtNzE5LDggKzcxMCw3IEBACiAJKChzdHJ1Y3QgbG9jYWxfaW5mb190ICopbGluay0+cHJpdiktPnN0b3AgPSAxOwogCWRhczE2Y3NfcGNtY2lhX3JlbGVhc2UobGluayk7CiAJLyogVGhpcyBwb2ludHMgdG8gdGhlIHBhcmVudCBzdHJ1Y3QgbG9jYWxfaW5mb190IHN0cnVjdCAqLwotCWlmIChsaW5rLT5wcml2KQotCQlrZnJlZShsaW5rLT5wcml2KTsKKwlrZnJlZShsaW5rLT5wcml2KTsKIH0JCQkJLyogZGFzMTZjc19wY21jaWFfZGV0YWNoICovCiAKIApAQCAtNzM3LDI0ICs3MjcsMjIgQEAKIAlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKIAogCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLwotCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwlwX2Rldi0+cmVzb3VyY2VbMF0tPmVuZCA9IHBfZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gMDsKIAlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKIAkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKLQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKLQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKLQkJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQlwX2Rldi0+aW9fbGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyAmPSB+SU9fREFUQV9QQVRIX1dJRFRIOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9CisJCQlwY21jaWFfaW9fY2ZnX2RhdGFfd2lkdGgoaW8tPmZsYWdzKTsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGlvLT53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBpby0+d2luWzBdLmxlbjsKIAkJaWYgKGlvLT5ud2luID4gMSkgewotCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMyID0gcF9kZXYtPmlvLkF0dHJpYnV0ZXMxOwotCQkJcF9kZXYtPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKLQkJCXBfZGV2LT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+ZmxhZ3MgPSBwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzOworCQkJcF9kZXYtPnJlc291cmNlWzFdLT5zdGFydCA9IGlvLT53aW5bMV0uYmFzZTsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gaW8tPndpblsxXS5sZW47CiAJCX0KIAkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KLQkJcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKTsKKwkJcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2KTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTc4OCwxMiArNzc2LDEwIEBACiAJZGV2X2luZm8oJmxpbmstPmRldiwgImluZGV4IDB4JTAyeCIsIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgpOwogCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCiAJCXByaW50aygiLCBpcnEgJXUiLCBsaW5rLT5pcnEpOwotCWlmIChsaW5rLT5pby5OdW1Qb3J0czEpCi0JCXByaW50aygiLCBpbyAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQxLAotCQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQxICsgbGluay0+aW8uTnVtUG9ydHMxIC0gMSk7Ci0JaWYgKGxpbmstPmlvLk51bVBvcnRzMikKLQkJcHJpbnRrKCIgJiAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQyLAotCQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQyICsgbGluay0+aW8uTnVtUG9ydHMyIC0gMSk7CisJaWYgKGxpbmstPnJlc291cmNlWzBdKQorCQlwcmludGsoIiwgaW8gJXBSIiwgbGluay0+cmVzb3VyY2VbMF0pOworCWlmIChsaW5rLT5yZXNvdXJjZVsxXSkKKwkJcHJpbnRrKCIsIGlvICVwUiIsIGxpbmstPnJlc291cmNlWzFdKTsKIAlwcmludGsoIlxuIik7CiAKIAlyZXR1cm47CkBAIC04NDcsNyArODMzLDcgQEAKIAkuaWRfdGFibGUgPSBkYXMxNmNzX2lkX3RhYmxlLAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5kcnYgPSB7Ci0JCS5uYW1lID0gZGV2X2luZm8sCisJCS5uYW1lID0gImNiX2RhczE2X2NzIiwKIAkJfSwKIH07CiAKQEAgLTg4MSw1ICs4NjcsMTYgQEAKIH0KIAogI2Vsc2UKLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfZGFzMTZjcyk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfZGFzMTZjc19pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfZGFzMTZjcyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfZGFzMTZjc19jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2RhczE2Y3MpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfZGFzMTZjc19pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfZGFzMTZjc19jbGVhbnVwX21vZHVsZSk7CiAjZW5kaWYgLyogQ09ORklHX1BDTUNJQSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhcy5jCmluZGV4IDQzNDU5MWQuLjY1MzBiNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkYXMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGFzLmMKQEAgLTUzMyw3ICs1MzMsNyBAQAogCQkJICAgIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKIHsKIAlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXYgPSBOVUxMOwogCWludCBpbmRleDsKIAlpbnQgaTsKIApAQCAtNTUwLDkgKzU1MCw3IEBACiAgKi8KIAlwcmludGsoIlxuIik7CiAKLQlmb3IgKHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOwotCSAgICAgcGNpZGV2ICE9IE5VTEw7Ci0JICAgICBwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lkZXYpKSB7CisJZm9yX2VhY2hfcGNpX2RldihwY2lkZXYpIHsKIAkJLyogIGlzIGl0IG5vdCBhIGNvbXB1dGVyIGJvYXJkcyBjYXJkPyAqLwogCQlpZiAocGNpZGV2LT52ZW5kb3IgIT0gUENJX1ZFTkRPUl9JRF9DQikKIAkJCWNvbnRpbnVlOwpAQCAtMTg3MSw0ICsxODY5LDQ0IEBACiAgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCiAgKiBhcyBuZWNlc3NhcnkuCiAgKi8KLUNPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2NiX3BjaWRhcywgY2JfcGNpZGFzX3BjaV90YWJsZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBkcml2ZXJfY2JfcGNpZGFzX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIGRyaXZlcl9jYl9wY2lkYXMuZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX2NiX3BjaWRhc19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXJfY2JfcGNpZGFzX3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gY2JfcGNpZGFzX3BjaV90YWJsZSwKKwkucHJvYmUgPSAmZHJpdmVyX2NiX3BjaWRhc19wY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKCZkcml2ZXJfY2JfcGNpZGFzX3BjaV9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfY2JfcGNpZGFzX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9jYl9wY2lkYXMpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJZHJpdmVyX2NiX3BjaWRhc19wY2lfZHJpdmVyLm5hbWUgPSAoY2hhciAqKWRyaXZlcl9jYl9wY2lkYXMuZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9jYl9wY2lkYXNfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfY2JfcGNpZGFzX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfY2JfcGNpZGFzX3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2NiX3BjaWRhcyk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9jYl9wY2lkYXNfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2NiX3BjaWRhc19jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkYXM2NC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhczY0LmMKaW5kZXggNzlhYTI4Ni4uNTNlNzAxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhczY0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhczY0LmMKQEAgLTEyMzcsNyArMTIzNyw0MyBAQAogc3RhdGljIHZvaWQgbG9hZF9hb19kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAkJCWNvbnN0IHN0cnVjdCBjb21lZGlfY21kICpjbWQpOwogCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9jYl9wY2lkYXMsIHBjaWRhczY0X3BjaV90YWJsZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBkcml2ZXJfY2JfcGNpZGFzX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIGRyaXZlcl9jYl9wY2lkYXMuZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX2NiX3BjaWRhc19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXJfY2JfcGNpZGFzX3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gcGNpZGFzNjRfcGNpX3RhYmxlLAorCS5wcm9iZSA9ICZkcml2ZXJfY2JfcGNpZGFzX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9jYl9wY2lkYXNfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9jYl9wY2lkYXNfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2NiX3BjaWRhcyk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfY2JfcGNpZGFzX3BjaV9kcml2ZXIubmFtZSA9IChjaGFyICopZHJpdmVyX2NiX3BjaWRhcy5kcml2ZXJfbmFtZTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2NiX3BjaWRhc19wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9jYl9wY2lkYXNfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9jYl9wY2lkYXNfcGNpX2RyaXZlcik7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfY2JfcGNpZGFzKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2NiX3BjaWRhc19pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfY2JfcGNpZGFzX2NsZWFudXBfbW9kdWxlKTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBhaV9yYW5nZV9iaXRzXzZ4eHgoY29uc3Qgc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IHJhbmdlX2luZGV4KQpAQCAtMTcxOCw3ICsxNzU0LDcgQEAKICAqLwogc3RhdGljIGludCBhdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldiA9IE5VTEw7CiAJaW50IGluZGV4OwogCXVpbnQzMl90IGxvY2FsX3JhbmdlLCBsb2NhbF9kZWNvZGU7CiAJaW50IHJldHZhbDsKQEAgLTE3MzUsOSArMTc3MSw3IEBACiAgKiBQcm9iZSB0aGUgZGV2aWNlIHRvIGRldGVybWluZSB3aGF0IGRldmljZSBpbiB0aGUgc2VyaWVzIGl0IGlzLgogICovCiAKLQlmb3IgKHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOwotCSAgICAgcGNpZGV2ICE9IE5VTEw7Ci0JICAgICBwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lkZXYpKSB7CisJZm9yX2VhY2hfcGNpX2RldihwY2lkZXYpIHsKIAkJLyogIGlzIGl0IG5vdCBhIGNvbXB1dGVyIGJvYXJkcyBjYXJkPyAqLwogCQlpZiAocGNpZGV2LT52ZW5kb3IgIT0gUENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUykKIAkJCWNvbnRpbnVlOwpAQCAtNDMwMywzICs0MzM3LDcgQEAKIAl9CiAJaTJjX3N0b3AoZGV2KTsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRkYS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRkYS5jCmluZGV4IGMzNzRiZWUuLjJkMzUxNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkZGEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGRhLmMKQEAgLTI4MCw3ICsyODAsNyBAQAogCQkJICAgIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKIHsKIAlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXYgPSBOVUxMOwogCWludCBpbmRleDsKIAogCXByaW50aygiY29tZWRpJWQ6IGNiX3BjaWRkYTogIiwgZGV2LT5taW5vcik7CkBAIC0yOTYsOSArMjk2LDcgQEAKICAqLwogCXByaW50aygiXG4iKTsKIAotCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7Ci0JICAgICBwY2lkZXYgIT0gTlVMTDsKLQkgICAgIHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaWRldikpIHsKKwlmb3JfZWFjaF9wY2lfZGV2KHBjaWRldikgewogCQlpZiAocGNpZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9DQikgewogCQkJaWYgKGl0LT5vcHRpb25zWzBdIHx8IGl0LT5vcHRpb25zWzFdKSB7CiAJCQkJaWYgKHBjaWRldi0+YnVzLT5udW1iZXIgIT0gaXQtPm9wdGlvbnNbMF0gfHwKQEAgLTg1Niw0ICs4NTQsNDQgQEAKICAqIEEgY29udmVuaWVudCBtYWNybyB0aGF0IGRlZmluZXMgaW5pdF9tb2R1bGUoKSBhbmQgY2xlYW51cF9tb2R1bGUoKSwKICAqIGFzIG5lY2Vzc2FyeS4KICAqLwotQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfY2JfcGNpZGRhLCBjYl9wY2lkZGFfcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9jYl9wY2lkZGFfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgZHJpdmVyX2NiX3BjaWRkYS5kcml2ZXJfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkcml2ZXJfY2JfcGNpZGRhX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9jYl9wY2lkZGFfcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBjYl9wY2lkZGFfcGNpX3RhYmxlLAorCS5wcm9iZSA9ICZkcml2ZXJfY2JfcGNpZGRhX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9jYl9wY2lkZGFfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9jYl9wY2lkZGFfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2NiX3BjaWRkYSk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfY2JfcGNpZGRhX3BjaV9kcml2ZXIubmFtZSA9IChjaGFyICopZHJpdmVyX2NiX3BjaWRkYS5kcml2ZXJfbmFtZTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2NiX3BjaWRkYV9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9jYl9wY2lkZGFfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9jYl9wY2lkZGFfcGNpX2RyaXZlcik7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfY2JfcGNpZGRhKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2NiX3BjaWRkYV9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfY2JfcGNpZGRhX2NsZWFudXBfbW9kdWxlKTsKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRpby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRpby5jCmluZGV4IDM4Y2NkMTAuLmMxNjkzYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGlvLmMKQEAgLTIwMiw5ICsyMDIsNyBAQAogICogUHJvYmUgdGhlIGRldmljZSB0byBkZXRlcm1pbmUgd2hhdCBkZXZpY2UgaW4gdGhlIHNlcmllcyBpdCBpcy4KICAqLwogCi0JZm9yIChwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKLQkgICAgIHBjaWRldiAhPSBOVUxMOwotCSAgICAgcGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGNpZGV2KSkgeworCWZvcl9lYWNoX3BjaV9kZXYocGNpZGV2KSB7CiAJCS8qICBpcyBpdCBub3QgYSBjb21wdXRlciBib2FyZHMgY2FyZD8gKi8KIAkJaWYgKHBjaWRldi0+dmVuZG9yICE9IFBDSV9WRU5ET1JfSURfQ0IpCiAJCQljb250aW51ZTsKQEAgLTMwMCw0ICsyOTgsNDQgQEAKICAqIEEgY29udmVuaWVudCBtYWNybyB0aGF0IGRlZmluZXMgaW5pdF9tb2R1bGUoKSBhbmQgY2xlYW51cF9tb2R1bGUoKSwKICAqIGFzIG5lY2Vzc2FyeS4KICAqLwotQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfY2JfcGNpZGlvLCBwY2lkaW9fcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9jYl9wY2lkaW9fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgZHJpdmVyX2NiX3BjaWRpby5kcml2ZXJfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkcml2ZXJfY2JfcGNpZGlvX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9jYl9wY2lkaW9fcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBwY2lkaW9fcGNpX3RhYmxlLAorCS5wcm9iZSA9ICZkcml2ZXJfY2JfcGNpZGlvX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9jYl9wY2lkaW9fcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9jYl9wY2lkaW9faW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2NiX3BjaWRpbyk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfY2JfcGNpZGlvX3BjaV9kcml2ZXIubmFtZSA9IChjaGFyICopZHJpdmVyX2NiX3BjaWRpby5kcml2ZXJfbmFtZTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2NiX3BjaWRpb19wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9jYl9wY2lkaW9fY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9jYl9wY2lkaW9fcGNpX2RyaXZlcik7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfY2JfcGNpZGlvKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2NiX3BjaWRpb19pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfY2JfcGNpZGlvX2NsZWFudXBfbW9kdWxlKTsKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaW1kYXMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2ltZGFzLmMKaW5kZXggNDlkY2NiYi4uY2VkMzQ2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaW1kYXMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpbWRhcy5jCkBAIC0yMTAsNyArMjEwLDcgQEAKIAkJCSAgICAgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQogewogCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwotCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldiA9IE5VTEw7CiAJaW50IGluZGV4OwogCS8qIGludCBpOyAqLwogCkBAIC0yMjcsOSArMjI3LDcgQEAKICAqLwogCXByaW50aygiXG4iKTsKIAotCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7Ci0JICAgICBwY2lkZXYgIT0gTlVMTDsKLQkgICAgIHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaWRldikpIHsKKwlmb3JfZWFjaF9wY2lfZGV2KHBjaWRldikgewogCQkvKiAgaXMgaXQgbm90IGEgY29tcHV0ZXIgYm9hcmRzIGNhcmQ/ICovCiAJCWlmIChwY2lkZXYtPnZlbmRvciAhPSBQQ0lfVkVORE9SX0lEX0NPTVBVVEVSQk9BUkRTKQogCQkJY29udGludWU7CkBAIC00OTEsNCArNDg5LDQ2IEBACiAgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCiAgKiBhcyBuZWNlc3NhcnkuCiAgKi8KLUNPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2NiX3BjaW1kYXMsIGNiX3BjaW1kYXNfcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9jYl9wY2ltZGFzX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkJIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkCisJCQkJCQkgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIGRyaXZlcl9jYl9wY2ltZGFzLmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRyaXZlcl9jYl9wY2ltZGFzX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9jYl9wY2ltZGFzX3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gY2JfcGNpbWRhc19wY2lfdGFibGUsCisJLnByb2JlID0gJmRyaXZlcl9jYl9wY2ltZGFzX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9jYl9wY2ltZGFzX3BjaV9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfY2JfcGNpbWRhc19pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfY2JfcGNpbWRhcyk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfY2JfcGNpbWRhc19wY2lfZHJpdmVyLm5hbWUgPQorCSAgICAoY2hhciAqKWRyaXZlcl9jYl9wY2ltZGFzLmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfY2JfcGNpbWRhc19wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9jYl9wY2ltZGFzX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfY2JfcGNpbWRhc19wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9jYl9wY2ltZGFzKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2NiX3BjaW1kYXNfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2NiX3BjaW1kYXNfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpbWRkYS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaW1kZGEuYwppbmRleCBmNDA0ZWM3Ny4uOGM5ODFhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaW1kZGEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpbWRkYS5jCkBAIC0xOTUsNyArMTk1LDQ1IEBACiAJCSAgICJzZXJpZXMuICBDdXJyZW50bHkgb25seSBzdXBwb3J0cyBQQ0lNLUREQTA2LTE2ICh3aGljaCAiCiAJCSAgICJhbHNvIGhhcHBlbnMgdG8gYmUgdGhlIG9ubHkgYm9hcmQgaW4gdGhpcyBzZXJpZXMuIDopICkgIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1DT01FRElfUENJX0lOSVRDTEVBTlVQX05PTU9EVUxFKGNiX3BjaW1kZGFfZHJpdmVyLCBwY2lfdGFibGUpOworc3RhdGljIGludCBfX2RldmluaXQgY2JfcGNpbWRkYV9kcml2ZXJfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCQkgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQKKwkJCQkJCSAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgY2JfcGNpbWRkYV9kcml2ZXIuZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgY2JfcGNpbWRkYV9kcml2ZXJfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgY2JfcGNpbWRkYV9kcml2ZXJfcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBwY2lfdGFibGUsCisJLnByb2JlID0gJmNiX3BjaW1kZGFfZHJpdmVyX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmNiX3BjaW1kZGFfZHJpdmVyX3BjaV9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjYl9wY2ltZGRhX2RyaXZlcl9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZjYl9wY2ltZGRhX2RyaXZlcik7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwljYl9wY2ltZGRhX2RyaXZlcl9wY2lfZHJpdmVyLm5hbWUgPQorCSAgICAoY2hhciAqKWNiX3BjaW1kZGFfZHJpdmVyLmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZjYl9wY2ltZGRhX2RyaXZlcl9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNiX3BjaW1kZGFfZHJpdmVyX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZjYl9wY2ltZGRhX2RyaXZlcl9wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmNiX3BjaW1kZGFfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoY2JfcGNpbWRkYV9kcml2ZXJfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoY2JfcGNpbWRkYV9kcml2ZXJfY2xlYW51cF9tb2R1bGUpOwogCiBzdGF0aWMgaW50IGFvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOwpAQCAtNDI2LDEzICs0NjQsMTEgQEAKICAqLwogc3RhdGljIGludCBwcm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2ID0gTlVMTDsKIAlpbnQgaW5kZXg7CiAJdW5zaWduZWQgbG9uZyByZWdpc3RlcnM7CiAKLQlmb3IgKHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOwotCSAgICAgcGNpZGV2ICE9IE5VTEw7Ci0JICAgICBwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lkZXYpKSB7CisJZm9yX2VhY2hfcGNpX2RldihwY2lkZXYpIHsKIAkJLyogIGlzIGl0IG5vdCBhIGNvbXB1dGVyIGJvYXJkcyBjYXJkPyAqLwogCQlpZiAocGNpZGV2LT52ZW5kb3IgIT0gUENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUykKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9ib25kLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX2JvbmQuYwppbmRleCA3MDE2MjIyLi5jZmNiZDliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX2JvbmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX2JvbmQuYwpAQCAtNTAsNDMgKzUwLDYgQEAKICAgd2l0aGluIGVhY2ggbWlub3Igd2lsbCBiZSBjb25jYXRlbmF0ZWQgdG9nZXRoZXIgaW4gdGhlIG9yZGVyIGdpdmVuIGhlcmUuCiAqLwogCi0vKgotICogVGhlIHByZXZpb3VzIGJsb2NrIGNvbW1lbnQgaXMgdXNlZCB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlCi0gKiBkb2N1bWVudGF0aW9uIGluIENvbWVkaSBhbmQgQ29tZWRpbGliLiAgVGhlIGZpZWxkczoKLSAqCi0gKiBEcml2ZXI6IHRoZSBuYW1lIG9mIHRoZSBkcml2ZXIKLSAqIERlc2NyaXB0aW9uOiBhIHNob3J0IHBocmFzZSBkZXNjcmliaW5nIHRoZSBkcml2ZXIuICBEb24ndCBsaXN0IGJvYXJkcy4KLSAqIERldmljZXM6IGEgZnVsbCBsaXN0IG9mIHRoZSBib2FyZHMgdGhhdCBhdHRlbXB0IHRvIGJlIHN1cHBvcnRlZCBieQotICogICB0aGUgZHJpdmVyLiAgRm9ybWF0IGlzICIobWFudWZhY3R1cmVyKSBib2FyZCBuYW1lIFtjb21lZGkgbmFtZV0iLAotICogICB3aGVyZSBjb21lZGlfbmFtZSBpcyB0aGUgbmFtZSB0aGF0IGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBib2FyZC4KLSAqICAgU2VlIHRoZSBjb21tZW50IG5lYXIgYm9hcmRfbmFtZTogaW4gdGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZQotICogICBiZWxvdy4gIElmIChtYW51ZmFjdHVyZXIpIG9yIFtjb21lZGkgbmFtZV0gaXMgbWlzc2luZywgdGhlIHByZXZpb3VzCi0gKiAgIHZhbHVlIGlzIHVzZWQuCi0gKiBBdXRob3I6IHlvdQotICogVXBkYXRlZDogZGF0ZSB3aGVuIHRoZSBfZG9jdW1lbnRhdGlvbl8gd2FzIGxhc3QgdXBkYXRlZC4gIFVzZSAnZGF0ZSAtUicKLSAqICAgdG8gZ2V0IGEgdmFsdWUgZm9yIHRoaXMuCi0gKiBTdGF0dXM6IGEgb25lLXdvcmQgZGVzY3JpcHRpb24gb2YgdGhlIHN0YXR1cy4gIFZhbGlkIHZhbHVlcyBhcmU6Ci0gKiAgIHdvcmtzIC0gZHJpdmVyIHdvcmtzIGNvcnJlY3RseSBvbiBtb3N0IGJvYXJkcyBzdXBwb3J0ZWQsIGFuZAotICogICAgIHBhc3NlcyBjb21lZGlfdGVzdC4KLSAqICAgdW5rbm93biAtIHVua25vd24uICBVc3VhbGx5IHB1dCB0aGVyZSBieSBkcy4KLSAqICAgZXhwZXJpbWVudGFsIC0gbWF5IG5vdCB3b3JrIGluIGFueSBwYXJ0aWN1bGFyIHJlbGVhc2UuICBBdXRob3IKLSAqICAgICBwcm9iYWJseSB3YW50cyBhc3Npc3RhbmNlIHRlc3RpbmcgaXQuCi0gKiAgIGJpdHJvdHRlbiAtIGRyaXZlciBoYXMgbm90IGJlZW4gdXBkYXRlIGluIGEgbG9uZyB0aW1lLCBwcm9iYWJseQotICogICAgIGRvZXNuJ3Qgd29yaywgYW5kIHByb2JhYmx5IGlzIG1pc3Npbmcgc3VwcG9ydCBmb3Igc2lnbmlmaWNhbnQKLSAqICAgICBDb21lZGkgaW50ZXJmYWNlIGZlYXR1cmVzLgotICogICB1bnRlc3RlZCAtIGF1dGhvciBwcm9iYWJseSB3cm90ZSBpdCAiYmxpbmQiLCBhbmQgaXMgYmVsaWV2ZWQgdG8KLSAqICAgICB3b3JrLCBidXQgbm8gY29uZmlybWF0aW9uLgotICoKLSAqIFRoZXNlIGhlYWRlcnMgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IGEgYmxhbmsgbGluZSwgYW5kIGFueSBjb21tZW50cwotICogeW91IHdpc2ggdG8gc2F5IGFib3V0IHRoZSBkcml2ZXIuICBUaGUgY29tbWVudCBhcmVhIGlzIHRoZSBwbGFjZQotICogdG8gcHV0IGFueSBrbm93biBidWdzLCBsaW1pdGF0aW9ucywgdW5zdXBwb3J0ZWQgZmVhdHVyZXMsIHN1cHBvcnRlZAotICogY29tbWFuZCB0cmlnZ2Vycywgd2hldGhlciBvciBub3QgY29tbWFuZHMgYXJlIHN1cHBvcnRlZCBvbiBwYXJ0aWN1bGFyCi0gKiBzdWJkZXZpY2VzLCBldGMuCi0gKgotICogU29tZXdoZXJlIGluIHRoZSBjb21tZW50IHNob3VsZCBiZSBpbmZvcm1hdGlvbiBhYm91dCBjb25maWd1cmF0aW9uCi0gKiBvcHRpb25zIHRoYXQgYXJlIHVzZWQgd2l0aCBjb21lZGlfY29uZmlnLgotICovCi0KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSAiLi4vY29tZWRpLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX3BhcnBvcnQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfcGFycG9ydC5jCmluZGV4IGZjZDc3MjEuLjIxZDgzNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfcGFycG9ydC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfcGFycG9ydC5jCkBAIC0xMDEsNyArMTAxLDE4IEBACiAJLmRldGFjaCA9IHBhcnBvcnRfZGV0YWNoLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wYXJwb3J0KTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9wYXJwb3J0X2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9wYXJwb3J0KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9wYXJwb3J0X2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfcGFycG9ydCk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9wYXJwb3J0X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9wYXJwb3J0X2NsZWFudXBfbW9kdWxlKTsKIAogc3RydWN0IHBhcnBvcnRfcHJpdmF0ZSB7CiAJdW5zaWduZWQgaW50IGFfZGF0YTsKQEAgLTM5NiwzICs0MDcsNyBAQAogCiAJcmV0dXJuIDA7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfdGVzdC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV90ZXN0LmMKaW5kZXggZWY4M2ExYS4uYjIyMGIzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV90ZXN0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV90ZXN0LmMKQEAgLTEwNyw3ICsxMDcsMTggQEAKIAkubnVtX25hbWVzID0gQVJSQVlfU0laRSh3YXZlZm9ybV9ib2FyZHMpLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl93YXZlZm9ybSk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfd2F2ZWZvcm1faW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX3dhdmVmb3JtKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl93YXZlZm9ybV9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX3dhdmVmb3JtKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX3dhdmVmb3JtX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl93YXZlZm9ybV9jbGVhbnVwX21vZHVsZSk7CiAKIHN0YXRpYyBpbnQgd2F2ZWZvcm1fYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLApAQCAtNTQ5LDMgKzU2MCw3IEBACiAKIAlyZXR1cm4gaW5zbi0+bjsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbnRlY19wY2lfZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29udGVjX3BjaV9kaW8uYwppbmRleCA5NTExODE0Li44NzFmMTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29udGVjX3BjaV9kaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29udGVjX3BjaV9kaW8uYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAKIHN0YXRpYyBpbnQgY29udGVjX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAogCXByaW50aygiY29tZWRpJWQ6IGNvbnRlYzogIiwgZGV2LT5taW5vcik7CkBAIC0xMTYsMTAgKzExNiw3IEBACiAJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAyKSA8IDApCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZm9yIChwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKLQkgICAgIHBjaWRldiAhPSBOVUxMOwotCSAgICAgcGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGNpZGV2KSkgewotCisJZm9yX2VhY2hfcGNpX2RldihwY2lkZXYpIHsKIAkJaWYgKHBjaWRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQ09OVEVDICYmCiAJCSAgICBwY2lkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1BJTzE2MTZMKSB7CiAJCQlpZiAoaXQtPm9wdGlvbnNbMF0gfHwgaXQtPm9wdGlvbnNbMV0pIHsKQEAgLTIzMiw0ICsyMjksNDQgQEAKIAlyZXR1cm4gMjsKIH0KIAotQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfY29udGVjLCBjb250ZWNfcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9jb250ZWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIGRyaXZlcl9jb250ZWMuZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX2NvbnRlY19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXJfY29udGVjX3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gY29udGVjX3BjaV90YWJsZSwKKwkucHJvYmUgPSAmZHJpdmVyX2NvbnRlY19wY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKCZkcml2ZXJfY29udGVjX3BjaV9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfY29udGVjX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9jb250ZWMpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJZHJpdmVyX2NvbnRlY19wY2lfZHJpdmVyLm5hbWUgPSAoY2hhciAqKWRyaXZlcl9jb250ZWMuZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9jb250ZWNfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfY29udGVjX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfY29udGVjX3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2NvbnRlYyk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9jb250ZWNfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2NvbnRlY19jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXFib2FyZDIwMDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXFib2FyZDIwMDAuYwppbmRleCAwNzhlYzI3Li42YWY2YzgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFxYm9hcmQyMDAwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhcWJvYXJkMjAwMC5jCkBAIC04ODcsNCArODg3LDQ2IEBACiAJcmV0dXJuIDA7CiB9CiAKLUNPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2RhcWJvYXJkMjAwMCwgZGFxYm9hcmQyMDAwX3BjaV90YWJsZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBkcml2ZXJfZGFxYm9hcmQyMDAwX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQKKwkJCQkJCSAgICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBkcml2ZXJfZGFxYm9hcmQyMDAwLmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRyaXZlcl9kYXFib2FyZDIwMDBfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyX2RhcWJvYXJkMjAwMF9wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IGRhcWJvYXJkMjAwMF9wY2lfdGFibGUsCisJLnByb2JlID0gJmRyaXZlcl9kYXFib2FyZDIwMDBfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmZHJpdmVyX2RhcWJvYXJkMjAwMF9wY2lfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2RhcWJvYXJkMjAwMF9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfZGFxYm9hcmQyMDAwKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRyaXZlcl9kYXFib2FyZDIwMDBfcGNpX2RyaXZlci5uYW1lID0KKwkgICAgKGNoYXIgKilkcml2ZXJfZGFxYm9hcmQyMDAwLmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfZGFxYm9hcmQyMDAwX3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2RhcWJvYXJkMjAwMF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2RhcWJvYXJkMjAwMF9wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9kYXFib2FyZDIwMDApOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfZGFxYm9hcmQyMDAwX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9kYXFib2FyZDIwMDBfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMDguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMwOC5jCmluZGV4IDljYjE0NGYuLjMxNDFkYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMwOC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMwOC5jCkBAIC0yOSwxMSArMjksMTEgQEAKICAqIERlc2NyaXB0aW9uOiBEQVMtMDggY29tcGF0aWJsZSBib2FyZHMKICAqIEF1dGhvcjogV2FycmVuIEphc3BlciwgZHMsIEZyYW5rIEhlc3MKICAqIERldmljZXM6IFtLZWl0aGxleSBNZXRyYWJ5dGVdIERBUzA4IChpc2EtZGFzMDgpLAotICogW0NvbXB1dGVyQm9hcmRzXSBEQVMwOCAoaXNhLWRhczA4KSwgREFTMDgtUEdNIChkYXMwOC1wZ20pLAotICogREFTMDgtUEdIIChkYXMwOC1wZ2gpLCBEQVMwOC1QR0wgKGRhczA4LXBnbCksIERBUzA4LUFPSCAoZGFzMDgtYW9oKSwKLSAqIERBUzA4LUFPTCAoZGFzMDgtYW9sKSwgREFTMDgtQU9NIChkYXMwOC1hb20pLCBEQVMwOC9KUi1BTyAoZGFzMDgvanItYW8pLAotICogREFTMDgvSlItMTYtQU8gKGRhczA4anItMTYtYW8pLCBQQ0ktREFTMDggKGRhczA4KSwKLSAqIFBDMTA0LURBUzA4IChwYzEwNC1kYXMwOCksIERBUzA4L0pSLzE2IChkYXMwOGpyLzE2KQorICogICBbQ29tcHV0ZXJCb2FyZHNdIERBUzA4IChpc2EtZGFzMDgpLCBEQVMwOC1QR00gKGRhczA4LXBnbSksCisgKiAgIERBUzA4LVBHSCAoZGFzMDgtcGdoKSwgREFTMDgtUEdMIChkYXMwOC1wZ2wpLCBEQVMwOC1BT0ggKGRhczA4LWFvaCksCisgKiAgIERBUzA4LUFPTCAoZGFzMDgtYW9sKSwgREFTMDgtQU9NIChkYXMwOC1hb20pLCBEQVMwOC9KUi1BTyAoZGFzMDgvanItYW8pLAorICogICBEQVMwOC9KUi0xNi1BTyAoZGFzMDhqci0xNi1hbyksIFBDSS1EQVMwOCAoZGFzMDgpLAorICogICBQQzEwNC1EQVMwOCAocGMxMDQtZGFzMDgpLCBEQVMwOC9KUi8xNiAoZGFzMDhqci8xNikKICAqIFN0YXR1czogd29ya3MKICAqCiAgKiBUaGlzIGlzIGEgcmV3cml0ZSBvZiB0aGUgZGFzMDggYW5kIGRhczA4anIgZHJpdmVycy4KQEAgLTk4MCw3ICs5ODAsNyBAQAogCXVuc2lnbmVkIGxvbmcgaW9iYXNlOwogI2lmZGVmIENPTkZJR19DT01FRElfUENJCiAJdW5zaWduZWQgbG9uZyBwY2lfaW9iYXNlID0gMDsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7CiAjZW5kaWYKIAogCXJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGRhczA4X3ByaXZhdGVfc3RydWN0KSk7CkBAIC05OTcsOSArOTk3LDcgQEAKIAkJfQogCQlwcmludGsoIlxuIik7CiAJCS8qICBmaW5kIGNhcmQgKi8KLQkJZm9yIChwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7Ci0JCSAgICAgcGRldiAhPSBOVUxMOwotCQkgICAgIHBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwZGV2KSkgeworCQlmb3JfZWFjaF9wY2lfZGV2KHBkZXYpIHsKIAkJCWlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUwogCQkJICAgICYmIHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1BDSURBUzA4KSB7CiAJCQkJaWYgKGl0LT5vcHRpb25zWzBdIHx8IGl0LT5vcHRpb25zWzFdKSB7CkBAIC0xMDgyLDExICsxMDgwLDYyIEBACiBFWFBPUlRfU1lNQk9MX0dQTChkYXMwOF9jb21tb25fZGV0YWNoKTsKIAogI2lmZGVmIENPTkZJR19DT01FRElfUENJCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9kYXMwOCwgZGFzMDhfcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9kYXMwOF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBkcml2ZXJfZGFzMDguZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX2RhczA4X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9kYXMwOF9wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IGRhczA4X3BjaV90YWJsZSwKKwkucHJvYmUgPSAmZHJpdmVyX2RhczA4X3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9kYXMwOF9wY2lfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2RhczA4X2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9kYXMwOCk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfZGFzMDhfcGNpX2RyaXZlci5uYW1lID0gKGNoYXIgKilkcml2ZXJfZGFzMDguZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9kYXMwOF9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9kYXMwOF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2RhczA4X3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2RhczA4KTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2RhczA4X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9kYXMwOF9jbGVhbnVwX21vZHVsZSk7CiAjZWxzZQotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9kYXMwOCk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfZGFzMDhfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2RhczA4KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9kYXMwOF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2RhczA4KTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2RhczA4X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9kYXMwOF9jbGVhbnVwX21vZHVsZSk7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19DT01FRElfUENNQ0lBCiBFWFBPUlRfU1lNQk9MX0dQTChkYXMwOF9jc19ib2FyZHMpOwogI2VuZGlmCisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMwOF9jcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczA4X2NzLmMKaW5kZXggODc2MWE2ZC4uYzZhYTUyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczA4X2NzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczA4X2NzLmMKQEAgLTQ4LDcgKzQ4LDYgQEAKICNpbmNsdWRlICJkYXMwOC5oIgogCiAvKiBwY21jaWEgaW5jbHVkZXMgKi8KLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CkBAIC04OSw3ICs4OCw3IEBACiAJCQlwcmludGsoIiBubyBwY21jaWEgY2FyZHMgZm91bmRcbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KLQkJaW9iYXNlID0gbGluay0+aW8uQmFzZVBvcnQxOworCQlpb2Jhc2UgPSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKCIgYnVnISBib2FyZCBkb2VzIG5vdCBoYXZlIFBDTUNJQSBidXN0eXBlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzIsMTQgKzEzMSw2IEBACiAgICBsZXNzIG9uIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuCiAqLwogCi0vKgotICAgVGhlIGRldl9pbmZvIHZhcmlhYmxlIGlzIHRoZSAia2V5IiB0aGF0IGlzIHVzZWQgdG8gbWF0Y2ggdXAgdGhpcwotICAgZGV2aWNlIGRyaXZlciB3aXRoIGFwcHJvcHJpYXRlIGNhcmRzLCB0aHJvdWdoIHRoZSBjYXJkIGNvbmZpZ3VyYXRpb24KLSAgIGRhdGFiYXNlLgotKi8KLQotc3RhdGljIGNvbnN0IGRldl9pbmZvX3QgZGV2X2luZm8gPSAicGNtLWRhczA4IjsKLQogc3RydWN0IGxvY2FsX2luZm9fdCB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CiAJaW50IHN0b3A7CkBAIC0yMDYsOCArMTk3LDcgQEAKIAlkYXMwOF9wY21jaWFfcmVsZWFzZShsaW5rKTsKIAogCS8qIFRoaXMgcG9pbnRzIHRvIHRoZSBwYXJlbnQgc3RydWN0IGxvY2FsX2luZm9fdCBzdHJ1Y3QgKi8KLQlpZiAobGluay0+cHJpdikKLQkJa2ZyZWUobGluay0+cHJpdik7CisJa2ZyZWUobGluay0+cHJpdik7CiAKIH0JCQkJLyogZGFzMDhfcGNtY2lhX2RldGFjaCAqLwogCkBAIC0yMjUsMjQgKzIxNSwyMyBAQAogCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROwogCiAJLyogSU8gd2luZG93IHNldHRpbmdzICovCi0JcF9kZXYtPmlvLk51bVBvcnRzMSA9IHBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOworCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gcF9kZXYtPnJlc291cmNlWzFdLT5lbmQgPSAwOwogCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQtPmlvLm53aW4gPiAwKSkgewogCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQtPmlvOwotCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQotCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OwotCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQotCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJCXBfZGV2LT5pb19saW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzICY9IH5JT19EQVRBX1BBVEhfV0lEVEg7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0KKwkJCXBjbWNpYV9pb19jZmdfZGF0YV93aWR0aChpby0+ZmxhZ3MpOwogCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKLQkJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gaW8tPndpblswXS5iYXNlOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmVuZCA9IGlvLT53aW5bMF0ubGVuOwogCQlpZiAoaW8tPm53aW4gPiAxKSB7Ci0JCQlwX2Rldi0+aW8uQXR0cmlidXRlczIgPSBwX2Rldi0+aW8uQXR0cmlidXRlczE7Ci0JCQlwX2Rldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOwotCQkJcF9kZXYtPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOworCQkJcF9kZXYtPnJlc291cmNlWzFdLT5mbGFncyA9IHBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3M7CisJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPnN0YXJ0ID0gaW8tPndpblsxXS5iYXNlOworCQkJcF9kZXYtPnJlc291cmNlWzFdLT5lbmQgPSBpby0+d2luWzFdLmxlbjsKIAkJfQogCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLwotCQlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pOworCQlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTI4NCwxMiArMjczLDEwIEBACiAJZGV2X2luZm8oJmxpbmstPmRldiwgImluZGV4IDB4JTAyeCIsIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgpOwogCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCiAJCXByaW50aygiLCBpcnEgJXUiLCBsaW5rLT5pcnEpOwotCWlmIChsaW5rLT5pby5OdW1Qb3J0czEpCi0JCXByaW50aygiLCBpbyAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQxLAotCQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQxICsgbGluay0+aW8uTnVtUG9ydHMxIC0gMSk7Ci0JaWYgKGxpbmstPmlvLk51bVBvcnRzMikKLQkJcHJpbnRrKCIgJiAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQyLAotCQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQyICsgbGluay0+aW8uTnVtUG9ydHMyIC0gMSk7CisJaWYgKGxpbmstPnJlc291cmNlWzBdKQorCQlwcmludGsoIiwgaW8gJXBSIiwgbGluay0+cmVzb3VyY2VbMF0pOworCWlmIChsaW5rLT5yZXNvdXJjZVsxXSkKKwkJcHJpbnRrKCIgJiAlcFIiLCBsaW5rLT5yZXNvdXJjZVsxXSk7CiAJcHJpbnRrKCJcbiIpOwogCiAJcmV0dXJuOwpAQCAtMzYzLDcgKzM1MCw3IEBACiAJLmlkX3RhYmxlID0gZGFzMDhfY3NfaWRfdGFibGUsCiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmRydiA9IHsKLQkJLm5hbWUgPSBkZXZfaW5mbywKKwkJLm5hbWUgPSAicGNtLWRhczA4IiwKIAkJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMxNi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczE2LmMKaW5kZXggY2NlZTRmMS4uMGFmMWI0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczE2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczE2LmMKQEAgLTE3MTcsNyArMTcxNywxOCBAQAogCXJldHVybiAwOwogfQogCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2RhczE2KTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9kYXMxNl9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfZGFzMTYpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2RhczE2X2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfZGFzMTYpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfZGFzMTZfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2RhczE2X2NsZWFudXBfbW9kdWxlKTsKIAogLyogdXRpbGl0eSBmdW5jdGlvbiB0aGF0IHN1Z2dlc3RzIGEgZG1hIHRyYW5zZmVyIHNpemUgaW4gYnl0ZXMgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFzMTZfc3VnZ2VzdF90cmFuc2Zlcl9zaXplKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCkBAIC0xNzc2LDMgKzE3ODcsNyBAQAogCiAJfQogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMTZtMS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczE2bTEuYwppbmRleCBjNDAzZDg4Li5hNWNlM2IyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMTZtMS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMxNm0xLmMKQEAgLTE5OCw3ICsxOTgsMTggQEAKICNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBkYXMxNm0xX3ByaXZhdGVfc3RydWN0ICopKGRldi0+cHJpdmF0ZSkpCiAjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBkYXMxNm0xX2JvYXJkICopKGRldi0+Ym9hcmRfcHRyKSkKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9kYXMxNm0xKTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9kYXMxNm0xX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9kYXMxNm0xKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9kYXMxNm0xX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfZGFzMTZtMSk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9kYXMxNm0xX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9kYXMxNm0xX2NsZWFudXBfbW9kdWxlKTsKIAogc3RhdGljIGlubGluZSBzaG9ydCBtdW5nZV9zYW1wbGUoc2hvcnQgZGF0YSkKIHsKQEAgLTc3NywzICs3ODgsNyBAQAogCiAJcmV0dXJuIDA7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMxODAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMTgwMC5jCmluZGV4IGRlNWU4MmYuLjZlYTkzZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMxODAwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczE4MDAuYwpAQCAtNTMxLDcgKzUzMSwxOCBAQAogICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAogICogYXMgbmVjZXNzYXJ5LgogICovCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2RhczE4MDApOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2RhczE4MDBfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2RhczE4MDApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2RhczE4MDBfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9kYXMxODAwKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2RhczE4MDBfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2RhczE4MDBfY2xlYW51cF9tb2R1bGUpOwogCiBzdGF0aWMgaW50IGRhczE4MDBfaW5pdF9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGRtYTAsCiAJCQkgICAgdW5zaWduZWQgaW50IGRtYTEpCkBAIC0xODAwLDMgKzE4MTEsNyBAQAogCiAJcmV0dXJuIHNpemU7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXM2NDAyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzNjQwMi5jCmluZGV4IGE0MDRhMTguLjYzMjhmNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXM2NDAyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczY0MDIuYwpAQCAtMTA5LDcgKzEwOSwxOCBAQAogCS5kZXRhY2ggPSBkYXM2NDAyX2RldGFjaCwKIH07CiAKLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfZGFzNjQwMik7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfZGFzNjQwMl9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfZGFzNjQwMik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfZGFzNjQwMl9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2RhczY0MDIpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfZGFzNjQwMl9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfZGFzNjQwMl9jbGVhbnVwX21vZHVsZSk7CiAKIHN0cnVjdCBkYXM2NDAyX3ByaXZhdGUgewogCWludCBhaV9ieXRlc190b19yZWFkOwpAQCAtMzYwLDMgKzM3MSw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczgwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczgwMC5jCmluZGV4IGFhZGM0OTcuLmFlY2FlZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXM4MDAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzODAwLmMKQEAgLTM0Nyw3ICszNDcsMTggQEAKICAqIEEgY29udmVuaWVudCBtYWNybyB0aGF0IGRlZmluZXMgaW5pdF9tb2R1bGUoKSBhbmQgY2xlYW51cF9tb2R1bGUoKSwKICAqIGFzIG5lY2Vzc2FyeS4KICAqLwotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9kYXM4MDApOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2RhczgwMF9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfZGFzODAwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9kYXM4MDBfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9kYXM4MDApOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfZGFzODAwX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9kYXM4MDBfY2xlYW51cF9tb2R1bGUpOwogCiAvKiBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lICovCiBzdGF0aWMgaXJxcmV0dXJuX3QgZGFzODAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKQpAQCAtOTA1LDMgKzkxNiw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RtbTMyYXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kbW0zMmF0LmMKaW5kZXggZDVjYmQ1MS4uNjkzNzI4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RtbTMyYXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZG1tMzJhdC5jCkBAIC0zNyw0MyArMzcsNiBAQAogICBjb21lZGlfY29uZmlnIC9kZXYvY29tZWRpMCBkbW0zMmF0IGJhc2VhZGRyLGlycQogKi8KIAotLyoKLSAqIFRoZSBwcmV2aW91cyBibG9jayBjb21tZW50IGlzIHVzZWQgdG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZQotICogZG9jdW1lbnRhdGlvbiBpbiBDb21lZGkgYW5kIENvbWVkaWxpYi4gIFRoZSBmaWVsZHM6Ci0gKgotICogRHJpdmVyOiB0aGUgbmFtZSBvZiB0aGUgZHJpdmVyCi0gKiBEZXNjcmlwdGlvbjogYSBzaG9ydCBwaHJhc2UgZGVzY3JpYmluZyB0aGUgZHJpdmVyLiAgRG9uJ3QgbGlzdCBib2FyZHMuCi0gKiBEZXZpY2VzOiBhIGZ1bGwgbGlzdCBvZiB0aGUgYm9hcmRzIHRoYXQgYXR0ZW1wdCB0byBiZSBzdXBwb3J0ZWQgYnkKLSAqICAgdGhlIGRyaXZlci4gIEZvcm1hdCBpcyAiKG1hbnVmYWN0dXJlcikgYm9hcmQgbmFtZSBbY29tZWRpIG5hbWVdIiwKLSAqICAgd2hlcmUgY29tZWRpX25hbWUgaXMgdGhlIG5hbWUgdGhhdCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgYm9hcmQuCi0gKiAgIFNlZSB0aGUgY29tbWVudCBuZWFyIGJvYXJkX25hbWU6IGluIHRoZSBzdHJ1Y3QgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUKLSAqICAgYmVsb3cuICBJZiAobWFudWZhY3R1cmVyKSBvciBbY29tZWRpIG5hbWVdIGlzIG1pc3NpbmcsIHRoZSBwcmV2aW91cwotICogICB2YWx1ZSBpcyB1c2VkLgotICogQXV0aG9yOiB5b3UKLSAqIFVwZGF0ZWQ6IGRhdGUgd2hlbiB0aGUgX2RvY3VtZW50YXRpb25fIHdhcyBsYXN0IHVwZGF0ZWQuICBVc2UgJ2RhdGUgLVInCi0gKiAgIHRvIGdldCBhIHZhbHVlIGZvciB0aGlzLgotICogU3RhdHVzOiBhIG9uZS13b3JkIGRlc2NyaXB0aW9uIG9mIHRoZSBzdGF0dXMuICBWYWxpZCB2YWx1ZXMgYXJlOgotICogICB3b3JrcyAtIGRyaXZlciB3b3JrcyBjb3JyZWN0bHkgb24gbW9zdCBib2FyZHMgc3VwcG9ydGVkLCBhbmQKLSAqICAgICBwYXNzZXMgY29tZWRpX3Rlc3QuCi0gKiAgIHVua25vd24gLSB1bmtub3duLiAgVXN1YWxseSBwdXQgdGhlcmUgYnkgZHMuCi0gKiAgIGV4cGVyaW1lbnRhbCAtIG1heSBub3Qgd29yayBpbiBhbnkgcGFydGljdWxhciByZWxlYXNlLiAgQXV0aG9yCi0gKiAgICAgcHJvYmFibHkgd2FudHMgYXNzaXN0YW5jZSB0ZXN0aW5nIGl0LgotICogICBiaXRyb3R0ZW4gLSBkcml2ZXIgaGFzIG5vdCBiZWVuIHVwZGF0ZSBpbiBhIGxvbmcgdGltZSwgcHJvYmFibHkKLSAqICAgICBkb2Vzbid0IHdvcmssIGFuZCBwcm9iYWJseSBpcyBtaXNzaW5nIHN1cHBvcnQgZm9yIHNpZ25pZmljYW50Ci0gKiAgICAgQ29tZWRpIGludGVyZmFjZSBmZWF0dXJlcy4KLSAqICAgdW50ZXN0ZWQgLSBhdXRob3IgcHJvYmFibHkgd3JvdGUgaXQgImJsaW5kIiwgYW5kIGlzIGJlbGlldmVkIHRvCi0gKiAgICAgd29yaywgYnV0IG5vIGNvbmZpcm1hdGlvbi4KLSAqCi0gKiBUaGVzZSBoZWFkZXJzIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGJsYW5rIGxpbmUsIGFuZCBhbnkgY29tbWVudHMKLSAqIHlvdSB3aXNoIHRvIHNheSBhYm91dCB0aGUgZHJpdmVyLiAgVGhlIGNvbW1lbnQgYXJlYSBpcyB0aGUgcGxhY2UKLSAqIHRvIHB1dCBhbnkga25vd24gYnVncywgbGltaXRhdGlvbnMsIHVuc3VwcG9ydGVkIGZlYXR1cmVzLCBzdXBwb3J0ZWQKLSAqIGNvbW1hbmQgdHJpZ2dlcnMsIHdoZXRoZXIgb3Igbm90IGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQgb24gcGFydGljdWxhcgotICogc3ViZGV2aWNlcywgZXRjLgotICoKLSAqIFNvbWV3aGVyZSBpbiB0aGUgY29tbWVudCBzaG91bGQgYmUgaW5mb3JtYXRpb24gYWJvdXQgY29uZmlndXJhdGlvbgotICogb3B0aW9ucyB0aGF0IGFyZSB1c2VkIHdpdGggY29tZWRpX2NvbmZpZy4KLSAqLwotCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CkBAIC0zMzYsMTIgKzI5OSwxNCBAQAogCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOwogCWlycSA9IGl0LT5vcHRpb25zWzFdOwogCi0JcHJpbnRrKCJjb21lZGklZDogZG1tMzJhdDogYXR0YWNoaW5nXG4iLCBkZXYtPm1pbm9yKTsKLQlwcmludGsoImRtbTMyYXQ6IHByb2JpbmcgYXQgYWRkcmVzcyAweCUwNGx4LCBpcnEgJXVcbiIsIGlvYmFzZSwgaXJxKTsKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogZG1tMzJhdDogYXR0YWNoaW5nXG4iLCBkZXYtPm1pbm9yKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiZG1tMzJhdDogcHJvYmluZyBhdCBhZGRyZXNzIDB4JTA0bHgsIGlycSAldVxuIiwKKwkgICAgICAgaW9iYXNlLCBpcnEpOwogCiAJLyogcmVnaXN0ZXIgYWRkcmVzcyBzcGFjZSAqLwogCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBETU0zMkFUX01FTVNJWkUsIHRoaXNib2FyZC0+bmFtZSkpIHsKLQkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGRtbTMyYXQ6IEkvTyBwb3J0IGNvbmZsaWN0XG4iLAorCQkgICAgICAgZGV2LT5taW5vcik7CiAJCXJldHVybiAtRUlPOwogCX0KIAlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKQEAgLTM3OSwxNCArMzQ0LDE1IEBACiAJaW50c3RhdCA9IGRtbV9pbmIoZGV2LCBETU0zMkFUX0lOVENMT0NLKTsKIAlhaXJiYWNrID0gZG1tX2luYihkZXYsIERNTTMyQVRfQUlSQkFDSyk7CiAKLQlwcmludGsoImRtbTMyYXQ6IGxvPTB4JTAyeCBoaT0weCUwMnggZmlmb3N0YXQ9MHglMDJ4XG4iLAorCXByaW50ayhLRVJOX0RFQlVHICJkbW0zMmF0OiBsbz0weCUwMnggaGk9MHglMDJ4IGZpZm9zdGF0PTB4JTAyeFxuIiwKIAkgICAgICAgYWlsbywgYWloaSwgZmlmb3N0YXQpOwotCXByaW50aygiZG1tMzJhdDogYWlzdGF0PTB4JTAyeCBpbnRzdGF0PTB4JTAyeCBhaXJiYWNrPTB4JTAyeFxuIiwKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiZG1tMzJhdDogYWlzdGF0PTB4JTAyeCBpbnRzdGF0PTB4JTAyeCBhaXJiYWNrPTB4JTAyeFxuIiwKIAkgICAgICAgYWlzdGF0LCBpbnRzdGF0LCBhaXJiYWNrKTsKIAogCWlmICgoYWlsbyAhPSAweDAwKSB8fCAoYWloaSAhPSAweDFmKSB8fCAoZmlmb3N0YXQgIT0gMHg4MCkgfHwKIAkgICAgKGFpc3RhdCAhPSAweDYwIHx8IChpbnRzdGF0ICE9IDB4MDApIHx8IGFpcmJhY2sgIT0gMHgwYykpIHsKLQkJcHJpbnRrKCJkbW1hdDMyOiBib2FyZCBkZXRlY3Rpb24gZmFpbGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJkbW1hdDMyOiBib2FyZCBkZXRlY3Rpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0zOTQsNyArMzYwLDcgQEAKIAlpZiAoaXJxKSB7CiAJCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgZG1tMzJhdF9pc3IsIDAsIHRoaXNib2FyZC0+bmFtZSwgZGV2KTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCXByaW50aygiaXJxIGNvbmZsaWN0XG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiZG1tMzJhdDogaXJxIGNvbmZsaWN0XG4iKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAkJZGV2LT5pcnEgPSBpcnE7CkBAIC00NzgsNyArNDQ0LDcgQEAKIAl9CiAKIAkvKiBzdWNjZXNzICovCi0JcHJpbnRrKCJjb21lZGklZDogZG1tMzJhdDogYXR0YWNoZWRcbiIsIGRldi0+bWlub3IpOworCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiBkbW0zMmF0OiBhdHRhY2hlZFxuIiwgZGV2LT5taW5vcik7CiAKIAlyZXR1cm4gMTsKIApAQCAtNDk0LDcgKzQ2MCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgZG1tMzJhdF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKLQlwcmludGsoImNvbWVkaSVkOiBkbW0zMmF0OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiBkbW0zMmF0OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOwogCWlmIChkZXYtPmlycSkKIAkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CiAJaWYgKGRldi0+aW9iYXNlKQpAQCAtNTQyLDcgKzUwOCw3IEBACiAJCQlicmVhazsKIAl9CiAJaWYgKGkgPT0gNDAwMDApIHsKLQkJcHJpbnRrKCJ0aW1lb3V0XG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiZG1tMzJhdDogdGltZW91dFxuIik7CiAJCXJldHVybiAtRVRJTUVET1VUOwogCX0KIApAQCAtNTU3LDcgKzUyMyw3IEBACiAJCQkJYnJlYWs7CiAJCX0KIAkJaWYgKGkgPT0gNDAwMDApIHsKLQkJCXByaW50aygidGltZW91dFxuIik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJkbW0zMmF0OiB0aW1lb3V0XG4iKTsKIAkJCXJldHVybiAtRVRJTUVET1VUOwogCQl9CiAKQEAgLTYyNyw3ICs1OTMsOCBAQAogCWlmIChlcnIpCiAJCXJldHVybiAxOwogCi0JLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkKKwkgKiBjb21wYXRpYmxlICovCiAKIAkvKiBub3RlIHRoYXQgbXV0dWFsIGNvbXBhdGliaWxpdHkgaXMgbm90IGFuIGlzc3VlIGhlcmUgKi8KIAlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSICYmCkBAIC04MDAsNyArNzY3LDggQEAKIAlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKQogCQlkZXZwcml2LT5haV9zY2Fuc19sZWZ0ID0gY21kLT5zdG9wX2FyZzsKIAllbHNlIHsJCQkvKiBUUklHX05PTkUgKi8KLQkJZGV2cHJpdi0+YWlfc2NhbnNfbGVmdCA9IDB4ZmZmZmZmZmY7CS8qIGluZGljYXRlcyBUUklHX05PTkUgdG8gaXNyICovCisJCWRldnByaXYtPmFpX3NjYW5zX2xlZnQgPSAweGZmZmZmZmZmOyAvKiBpbmRpY2F0ZXMgVFJJR19OT05FIHRvCisJCQkJCQkgICAgICAqIGlzciAqLwogCX0KIAogCS8qIHdhaXQgZm9yIGNpcmN1aXQgdG8gc2V0dGxlICovCkBAIC04MTAsNyArNzc4LDcgQEAKIAkJCWJyZWFrOwogCX0KIAlpZiAoaSA9PSA0MDAwMCkgewotCQlwcmludGsoInRpbWVvdXRcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJkbW0zMmF0OiB0aW1lb3V0XG4iKTsKIAkJcmV0dXJuIC1FVElNRURPVVQ7CiAJfQogCkBAIC04MjMsMTMgKzc5MSwxMyBAQAogCQlkbW1fb3V0YihkZXYsIERNTTMyQVRfQ09OViwgMHhmZik7CiAJfQogCi0vKiAJcHJpbnRrKCJkbW1hdDMyIGluIGNvbW1hbmRcbiIpOyAqLworLyoJcHJpbnRrKCJkbW1hdDMyIGluIGNvbW1hbmRcbiIpOyAqLwogCi0vKiAJZm9yKGk9MDtpPGNtZC0+Y2hhbmxpc3RfbGVuO2krKykgKi8KLS8qIAkJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsaSoxMDApOyAqLworLyoJZm9yKGk9MDtpPGNtZC0+Y2hhbmxpc3RfbGVuO2krKykgKi8KKy8qCQljb21lZGlfYnVmX3B1dChzLT5hc3luYyxpKjEwMCk7ICovCiAKLS8qIAlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7ICovCi0vKiAJY29tZWRpX2V2ZW50KGRldiwgcyk7ICovCisvKglzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7ICovCisvKgljb21lZGlfZXZlbnQoZGV2LCBzKTsgKi8KIAogCXJldHVybiAwOwogCkBAIC05MzcsNyArOTA1LDcgQEAKIAkJCQlicmVhazsKIAkJfQogCQlpZiAoaSA9PSA0MDAwMCkgewotCQkJcHJpbnRrKCJ0aW1lb3V0XG4iKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImRtbTMyYXQ6IHRpbWVvdXRcbiIpOwogCQkJcmV0dXJuIC1FVElNRURPVVQ7CiAJCX0KIAkJLyogZHVtbXkgcmVhZCB0byB1cGRhdGUgdHJpZ2dlciB0aGUgb3V0cHV0ICovCkBAIC0xMDk1LDQgKzEwNjMsMTkgQEAKICAqIEEgY29udmVuaWVudCBtYWNybyB0aGF0IGRlZmluZXMgaW5pdF9tb2R1bGUoKSBhbmQgY2xlYW51cF9tb2R1bGUoKSwKICAqIGFzIG5lY2Vzc2FyeS4KICAqLwotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9kbW0zMmF0KTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9kbW0zMmF0X2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9kbW0zMmF0KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9kbW0zMmF0X2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfZG1tMzJhdCk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9kbW0zMmF0X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9kbW0zMmF0X2NsZWFudXBfbW9kdWxlKTsKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgwMS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgwMS5jCmluZGV4IDgzZmI2ZTUuLjVjY2UxYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MDEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODAxLmMKQEAgLTk4LDcgKzk4LDE4IEBACiAJLmRldGFjaCA9IGR0MjgwMV9kZXRhY2gsCiB9OwogCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2R0MjgwMSk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfZHQyODAxX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9kdDI4MDEpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2R0MjgwMV9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2R0MjgwMSk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9kdDI4MDFfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2R0MjgwMV9jbGVhbnVwX21vZHVsZSk7CiAKICNpZiAwCiAvKiBpZ25vcmUgJ2RlZmluZWQgYnV0IG5vdCB1c2VkJyB3YXJuaW5nICovCkBAIC03MjAsMyArNzMxLDcgQEAKIAogCXJldHVybiAxOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODExLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODExLmMKaW5kZXggZWE5YmZiNy4uYTE2NjRjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxMS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTEuYwpAQCAtMjM5LDcgKzIzOSwxOCBAQAogCS5vZmZzZXQgPSBzaXplb2Yoc3RydWN0IGR0MjgxMV9ib2FyZCksCiB9OwogCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2R0MjgxMSk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfZHQyODExX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9kdDI4MTEpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2R0MjgxMV9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2R0MjgxMSk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9kdDI4MTFfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2R0MjgxMV9jbGVhbnVwX21vZHVsZSk7CiAKIHN0YXRpYyBpbnQgZHQyODExX2FpX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCiAJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKQEAgLTYyNSwzICs2MzYsNyBAQAogCiAJcmV0dXJuIDI7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTQuYwppbmRleCAxNmZkZTA2Li4xYzYyNDhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODE0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxNC5jCkBAIC03MCw3ICs3MCwxOCBAQAogCS5kZXRhY2ggPSBkdDI4MTRfZGV0YWNoLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9kdDI4MTQpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2R0MjgxNF9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfZHQyODE0KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9kdDI4MTRfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9kdDI4MTQpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfZHQyODE0X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9kdDI4MTRfY2xlYW51cF9tb2R1bGUpOwogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZHQyODE0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXYpOwogCkBAIC0zODcsMyArMzk4LDcgQEAKIAljb21lZGlfZXZlbnQoZGV2LCBzKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTUuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTUuYwppbmRleCBkMWE0Zjc4Li40MTU1ZGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODE1LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxNS5jCkBAIC04Miw3ICs4MiwxOCBAQAogCS5kZXRhY2ggPSBkdDI4MTVfZGV0YWNoLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9kdDI4MTUpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2R0MjgxNV9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfZHQyODE1KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9kdDI4MTVfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9kdDI4MTUpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfZHQyODE1X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9kdDI4MTVfY2xlYW51cF9tb2R1bGUpOwogCiBzdGF0aWMgdm9pZCBkdDI4MTVfZnJlZV9yZXNvdXJjZXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CiAKQEAgLTI1NSwzICsyNjYsNyBAQAogCiAJcmV0dXJuIDA7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTcuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTcuYwppbmRleCA1NGUwZGVhLi42NTFmZTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODE3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxNy5jCkBAIC01Nyw3ICs1NywxOCBAQAogCS5kZXRhY2ggPSBkdDI4MTdfZGV0YWNoLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9kdDI4MTcpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2R0MjgxN19pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfZHQyODE3KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9kdDI4MTdfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9kdDI4MTcpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfZHQyODE3X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9kdDI4MTdfY2xlYW51cF9tb2R1bGUpOwogCiBzdGF0aWMgaW50IGR0MjgxN19kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAkJCQkgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLApAQCAtMTgwLDMgKzE5MSw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgyeC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgyeC5jCmluZGV4IGZkODcyOGMuLjhjZWE5ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODJ4LmMKQEAgLTQyMyw3ICs0MjMsMTggQEAKIAkub2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBkdDI4MnhfYm9hcmQpLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9kdDI4MngpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2R0MjgyeF9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfZHQyODJ4KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9kdDI4MnhfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9kdDI4MngpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfZHQyODJ4X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9kdDI4MnhfY2xlYW51cF9tb2R1bGUpOwogCiBzdGF0aWMgdm9pZCBmcmVlX3Jlc291cmNlcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgcHJlcF9haV9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgaW50IGNoYW4sIGludCBzaXplKTsKQEAgLTE1MDIsMyArMTUxMyw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MzAwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MzAwMC5jCmluZGV4IGNhNjg3ODkuLjY1NmU3YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDMwMDAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQzMDAwLmMKQEAgLTI4Nyw3ICsyODcsNDMgQEAKIAkuZGV0YWNoID0gZHQzMDAwX2RldGFjaCwKIH07CiAKLUNPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2R0MzAwMCwgZHQza19wY2lfdGFibGUpOworc3RhdGljIGludCBfX2RldmluaXQgZHJpdmVyX2R0MzAwMF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgZHJpdmVyX2R0MzAwMC5kcml2ZXJfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkcml2ZXJfZHQzMDAwX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9kdDMwMDBfcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBkdDNrX3BjaV90YWJsZSwKKwkucHJvYmUgPSAmZHJpdmVyX2R0MzAwMF9wY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKCZkcml2ZXJfZHQzMDAwX3BjaV9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfZHQzMDAwX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9kdDMwMDApOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJZHJpdmVyX2R0MzAwMF9wY2lfZHJpdmVyLm5hbWUgPSAoY2hhciAqKWRyaXZlcl9kdDMwMDAuZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9kdDMwMDBfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfZHQzMDAwX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfZHQzMDAwX3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2R0MzAwMCk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9kdDMwMDBfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2R0MzAwMF9jbGVhbnVwX21vZHVsZSk7CiAKIHN0YXRpYyB2b2lkIGR0M2tfYWlfZW1wdHlfZmlmbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKQEAgLTk5MSwzICsxMDI3LDcgQEAKIAkqYm9hcmQgPSAtMTsKIAlyZXR1cm4gZnJvbTsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0OTgxMi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0OTgxMi5jCmluZGV4IDk2Y2FhZTMuLmQwMWQyZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDk4MTIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQ5ODEyLmMKQEAgLTg5MCw4ICs4OTAsMTAgQEAKICAqIENvbWVkaSBmdW5jdGlvbnMKICAqLwogCi1zdGF0aWMgdm9pZCBkdDk4MTJfY29tZWRpX29wZW4oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgZHQ5ODEyX2NvbWVkaV9vcGVuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CisJaW50IHJlc3VsdCA9IC1FTk9ERVY7CisKIAlkb3duKCZkZXZwcml2LT5zbG90LT5tdXRleCk7CiAJaWYgKGRldnByaXYtPnNsb3QtPnVzYikgewogCQkvKiBXZSBoYXZlIGFuIGF0dGFjaGVkIGRldmljZSwgZmlsbCBpbiBjdXJyZW50IHJhbmdlIGluZm8gKi8KQEAgLTkzNCw4ICs5MzYsMTAgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQl9CisJCXJlc3VsdCA9IDA7CiAJfQogCXVwKCZkZXZwcml2LT5zbG90LT5tdXRleCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGludCBkdDk4MTJfZGlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9mbDUxMi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2ZsNTEyLmMKaW5kZXggYTEwYTJiMC4uN2Y0OWFkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2ZsNTEyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2ZsNTEyLmMKQEAgLTUyLDcgKzUyLDE4IEBACiAJLmRldGFjaCA9IGZsNTEyX2RldGFjaCwKIH07CiAKLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfZmw1MTIpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2ZsNTEyX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9mbDUxMik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfZmw1MTJfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9mbDUxMik7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9mbDUxMl9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfZmw1MTJfY2xlYW51cF9tb2R1bGUpOwogCiBzdGF0aWMgaW50IGZsNTEyX2FpX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLApAQCAtMjA1LDMgKzIxNiw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IGZsNTEyOiBkdW1teSBpIGRldGFjaFxuIiwgZGV2LT5taW5vcik7CiAJcmV0dXJuIDA7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9nc2NfaHBkaS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2dzY19ocGRpLmMKaW5kZXggNTFmMTJiZi4uMTY2MWI1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2dzY19ocGRpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2dzY19ocGRpLmMKQEAgLTMxMSwxNyArMzExLDI1IEBACiAJdm9pZCAqcGx4OTA4MF9pb2Jhc2U7CiAJdm9pZCAqaHBkaV9pb2Jhc2U7CiAJdWludDMyX3QgKmRpb19idWZmZXJbTlVNX0RNQV9CVUZGRVJTXTsJLyogIGRtYSBidWZmZXJzICovCi0JZG1hX2FkZHJfdCBkaW9fYnVmZmVyX3BoeXNfYWRkcltOVU1fRE1BX0JVRkZFUlNdOwkvKiAgcGh5c2ljYWwgYWRkcmVzc2VzIG9mIGRtYSBidWZmZXJzICovCi0Jc3RydWN0IHBseF9kbWFfZGVzYyAqZG1hX2Rlc2M7CS8qICBhcnJheSBvZiBkbWEgZGVzY3JpcHRvcnMgcmVhZCBieSBwbHg5MDgwLCBhbGxvY2F0ZWQgdG8gZ2V0IHByb3BlciBhbGlnbm1lbnQgKi8KLQlkbWFfYWRkcl90IGRtYV9kZXNjX3BoeXNfYWRkcjsJLyogIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZG1hIGRlc2NyaXB0b3IgYXJyYXkgKi8KKwkvKiBwaHlzaWNhbCBhZGRyZXNzZXMgb2YgZG1hIGJ1ZmZlcnMgKi8KKwlkbWFfYWRkcl90IGRpb19idWZmZXJfcGh5c19hZGRyW05VTV9ETUFfQlVGRkVSU107CisJLyogYXJyYXkgb2YgZG1hIGRlc2NyaXB0b3JzIHJlYWQgYnkgcGx4OTA4MCwgYWxsb2NhdGVkIHRvIGdldCBwcm9wZXIKKwkgKiBhbGlnbm1lbnQgKi8KKwlzdHJ1Y3QgcGx4X2RtYV9kZXNjICpkbWFfZGVzYzsKKwkvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIGRtYSBkZXNjcmlwdG9yIGFycmF5ICovCisJZG1hX2FkZHJfdCBkbWFfZGVzY19waHlzX2FkZHI7CiAJdW5zaWduZWQgaW50IG51bV9kbWFfZGVzY3JpcHRvcnM7Ci0JdWludDMyX3QgKmRlc2NfZGlvX2J1ZmZlcltOVU1fRE1BX0RFU0NSSVBUT1JTXTsJLyogIHBvaW50ZXIgdG8gc3RhcnQgb2YgYnVmZmVycyBpbmRleGVkIGJ5IGRlc2NyaXB0b3IgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZG1hX2Rlc2NfaW5kZXg7CS8qICBpbmRleCBvZiB0aGUgZG1hIGRlc2NyaXB0b3IgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgdXNlZCAqLworCS8qIHBvaW50ZXIgdG8gc3RhcnQgb2YgYnVmZmVycyBpbmRleGVkIGJ5IGRlc2NyaXB0b3IgKi8KKwl1aW50MzJfdCAqZGVzY19kaW9fYnVmZmVyW05VTV9ETUFfREVTQ1JJUFRPUlNdOworCS8qIGluZGV4IG9mIHRoZSBkbWEgZGVzY3JpcHRvciB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyB1c2VkICovCisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGRtYV9kZXNjX2luZGV4OwogCXVuc2lnbmVkIGludCB0eF9maWZvX3NpemU7CiAJdW5zaWduZWQgaW50IHJ4X2ZpZm9fc2l6ZTsKIAl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGRpb19jb3VudDsKLQl2b2xhdGlsZSB1aW50MzJfdCBiaXRzWzI0XTsJLyogIHNvZnR3YXJlIGNvcGllcyBvZiB2YWx1ZXMgd3JpdHRlbiB0byBocGRpIHJlZ2lzdGVycyAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGludCBibG9ja19zaXplOwkvKiAgbnVtYmVyIG9mIGJ5dGVzIGF0IHdoaWNoIHRvIGdlbmVyYXRlIENPTUVESV9DQl9CTE9DSyBldmVudHMgKi8KKwkvKiBzb2Z0d2FyZSBjb3BpZXMgb2YgdmFsdWVzIHdyaXR0ZW4gdG8gaHBkaSByZWdpc3RlcnMgKi8KKwl2b2xhdGlsZSB1aW50MzJfdCBiaXRzWzI0XTsKKwkvKiBudW1iZXIgb2YgYnl0ZXMgYXQgd2hpY2ggdG8gZ2VuZXJhdGUgQ09NRURJX0NCX0JMT0NLIGV2ZW50cyAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBibG9ja19zaXplOwogCXVuc2lnbmVkIGRpb19jb25maWdfb3V0cHV0OjE7CiB9OwogCkBAIC0zMzcsNyArMzQ1LDQzIEBACiAJLmRldGFjaCA9IGhwZGlfZGV0YWNoLAogfTsKIAotQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfaHBkaSwgaHBkaV9wY2lfdGFibGUpOworc3RhdGljIGludCBfX2RldmluaXQgZHJpdmVyX2hwZGlfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBkcml2ZXJfaHBkaS5kcml2ZXJfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkcml2ZXJfaHBkaV9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXJfaHBkaV9wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IGhwZGlfcGNpX3RhYmxlLAorCS5wcm9iZSA9ICZkcml2ZXJfaHBkaV9wY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKCZkcml2ZXJfaHBkaV9wY2lfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2hwZGlfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2hwZGkpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJZHJpdmVyX2hwZGlfcGNpX2RyaXZlci5uYW1lID0gKGNoYXIgKilkcml2ZXJfaHBkaS5kcml2ZXJfbmFtZTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2hwZGlfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfaHBkaV9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2hwZGlfcGNpX2RyaXZlcik7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfaHBkaSk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9ocGRpX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9ocGRpX2NsZWFudXBfbW9kdWxlKTsKIAogc3RhdGljIGludCBkaW9fY29uZmlnX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCkBAIC01NzAsNyArNjE0LDggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlwY2lkZXYgPSBOVUxMOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhwZGlfYm9hcmRzKSAmJiBkZXYtPmJvYXJkX3B0ciA9PSBOVUxMOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShocGRpX2JvYXJkcykgJiYKKwkJICAgIGRldi0+Ym9hcmRfcHRyID09IE5VTEw7IGkrKykgewogCQlkbyB7CiAJCQlwY2lkZXYgPSBwY2lfZ2V0X3N1YnN5cyhQQ0lfVkVORE9SX0lEX1BMWCwKIAkJCQkJCWhwZGlfYm9hcmRzW2ldLmRldmljZV9pZCwKQEAgLTYxOCw3ICs2NjMsNyBAQAogCS8qICByZW1hcCwgd29uJ3Qgd29yayB3aXRoIDIuMCBrZXJuZWxzIGJ1dCB3aG8gY2FyZXMgKi8KIAlwcml2KGRldiktPnBseDkwODBfaW9iYXNlID0gaW9yZW1hcChwcml2KGRldiktPnBseDkwODBfcGh5c19pb2Jhc2UsCiAJCQkJCSAgICBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwKLQkJCQkJCQkgICAgIFBMWDkwODBfQkFERFJJTkRFWCkpOworCQkJCQkgICAgUExYOTA4MF9CQUREUklOREVYKSk7CiAJcHJpdihkZXYpLT5ocGRpX2lvYmFzZSA9CiAJICAgIGlvcmVtYXAocHJpdihkZXYpLT5ocGRpX3BoeXNfaW9iYXNlLAogCQkgICAgcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIEhQRElfQkFERFJJTkRFWCkpOwpAQCAtNzY5LDcgKzgxNCw4IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIDE7CiAKLQkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseQorCSAqIGNvbXBhdGlibGUgKi8KIAogCS8qICB1bmlxdWVuZXNzIGNoZWNrICovCiAJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSkKQEAgLTEwNjYsMyArMTExMiw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2ljcF9tdWx0aS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2ljcF9tdWx0aS5jCmluZGV4IGZhMGU0ODEuLjgwOWQxN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9pY3BfbXVsdGkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvaWNwX211bHRpLmMKQEAgLTE4NSw3ICsxODUsMTggQEAKIG9mZnNldCA6IHNpemVvZihzdHJ1Y3QgYm9hcmR0eXBlKSwKIH07CiAKLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfaWNwX211bHRpKTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9pY3BfbXVsdGlfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2ljcF9tdWx0aSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfaWNwX211bHRpX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfaWNwX211bHRpKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2ljcF9tdWx0aV9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfaWNwX211bHRpX2NsZWFudXBfbW9kdWxlKTsKIAogc3RydWN0IGljcF9tdWx0aV9wcml2YXRlIHsKIAlzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqY2FyZDsJLyogIHBvaW50ZXIgdG8gY2FyZCAqLwpAQCAtMTEyNSwzICsxMTM2LDcgQEAKIAogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvaWNwX211bHRpLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvaWNwX211bHRpLmgKaW5kZXggMmJiOTZiMS4uNjhhY2VmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2ljcF9tdWx0aS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9pY3BfbXVsdGkuaApAQCAtNjIsMTYgKzYyLDE0IEBACiAvKiBidWlsZCBsaXN0IG9mIElub3ZhIGNhcmRzIGluIHRoaXMgc3lzdGVtICovCiBzdGF0aWMgdm9pZCBwY2lfY2FyZF9saXN0X2luaXQodW5zaWduZWQgc2hvcnQgcGNpX3ZlbmRvciwgY2hhciBkaXNwbGF5KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldiA9IE5VTEw7CiAJc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmlub3ZhLCAqbGFzdDsKIAlpbnQgaTsKIAogCWlub3ZhX2RldmljZXMgPSBOVUxMOwogCWxhc3QgPSBOVUxMOwogCi0JZm9yIChwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKLQkgICAgIHBjaWRldiAhPSBOVUxMOwotCSAgICAgcGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGNpZGV2KSkgeworCWZvcl9lYWNoX3BjaV9kZXYocGNpZGV2KSB7CiAJCWlmIChwY2lkZXYtPnZlbmRvciA9PSBwY2lfdmVuZG9yKSB7CiAJCQlpbm92YSA9IGt6YWxsb2Moc2l6ZW9mKCppbm92YSksIEdGUF9LRVJORUwpOwogCQkJaWYgKCFpbm92YSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2lpX3BjaTIwa2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9paV9wY2kyMGtjLmMKaW5kZXggZTI2YzFiOC4uMzlhNmE4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2lpX3BjaTIwa2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvaWlfcGNpMjBrYy5jCkBAIC02NDAsNCArNjQwLDE5IEBACiB9CiAjZW5kaWYKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2kyMHh4eCk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfcGNpMjB4eHhfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX3BjaTIweHh4KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9wY2kyMHh4eF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX3BjaTIweHh4KTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX3BjaTIweHh4X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9wY2kyMHh4eF9jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvanIzX3BjaS5jCmluZGV4IGQzMzBiMTguLjhiMzgzZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuYwpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlICJjb21lZGlfcGNpLmgiCiAjaW5jbHVkZSAianIzX3BjaS5oIgogCkBAIC0xMjMsMTIgKzEyNCw5IEBACiB9OwogCiAvKiBIb3RwbHVnIGZpcm13YXJlIGxvYWRpbmcgc3R1ZmYgKi8KLQotdHlwZWRlZiBpbnQgY29tZWRpX2Zpcm13YXJlX2NhbGxiYWNrKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCi0JCQkJICAgICBjb25zdCB1OCAqIGRhdGEsIHNpemVfdCBzaXplKTsKLQogc3RhdGljIGludCBjb21lZGlfbG9hZF9maXJtd2FyZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBjaGFyICpuYW1lLAotCQkJCWNvbWVkaV9maXJtd2FyZV9jYWxsYmFjayBjYikKKwkJCQlpbnQgKCpjYikoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJY29uc3QgdTggKmRhdGEsIHNpemVfdCBzaXplKSkKIHsKIAlpbnQgcmVzdWx0ID0gMDsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwpAQCAtMzczLDcgKzM3MSw3IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIHZvaWQganIzX3BjaV9vcGVuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGpyM19wY2lfb3BlbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCWludCBpOwogCXN0cnVjdCBqcjNfcGNpX2Rldl9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOwpAQCAtMzg4LDYgKzM4Niw3IEBACiAJCQkgICAgICAgcC0+Y2hhbm5lbF9ubyk7CiAJCX0KIAl9CisJcmV0dXJuIDA7CiB9CiAKIGludCByZWFkX2lkbV93b3JkKGNvbnN0IHU4ICogZGF0YSwgc2l6ZV90IHNpemUsIGludCAqcG9zLCB1bnNpZ25lZCBpbnQgKnZhbCkKQEAgLTM5OSwxNCArMzk4LDE0IEBACiAJCX0KIAkJLyogIENvbGxlY3QgdmFsdWUgKi8KIAkJKnZhbCA9IDA7Ci0JCWZvciAoOyAqcG9zIDwgc2l6ZSAmJiBpc3hkaWdpdChkYXRhWypwb3NdKTsgKCpwb3MpKyspIHsKLQkJCWNoYXIgY2ggPSB0b2xvd2VyKGRhdGFbKnBvc10pOwotCQkJcmVzdWx0ID0gMTsKLQkJCWlmICgnMCcgPD0gY2ggJiYgY2ggPD0gJzknKSB7Ci0JCQkJKnZhbCA9ICgqdmFsIDw8IDQpICsgKGNoIC0gJzAnKTsKLQkJCX0gZWxzZSBpZiAoJ2EnIDw9IGNoICYmIGNoIDw9ICdmJykgewotCQkJCSp2YWwgPSAoKnZhbCA8PCA0KSArIChjaCAtICdhJyArIDEwKTsKLQkJCX0KKwkJZm9yICg7ICpwb3MgPCBzaXplOyAoKnBvcykrKykgeworCQkJaW50IHZhbHVlOworCQkJdmFsdWUgPSBoZXhfdG9fYmluKGRhdGFbKnBvc10pOworCQkJaWYgKHZhbHVlID49IDApIHsKKwkJCQlyZXN1bHQgPSAxOworCQkJCSp2YWwgPSAoKnZhbCA8PCA0KSArIHZhbHVlOworCQkJfSBlbHNlCisJCQkJYnJlYWs7CiAJCX0KIAl9CiAJcmV0dXJuIHJlc3VsdDsKQEAgLTk4Niw0ICs5ODUsNDQgQEAKIAlyZXR1cm4gMDsKIH0KIAotQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfanIzX3BjaSwganIzX3BjaV9wY2lfdGFibGUpOworc3RhdGljIGludCBfX2RldmluaXQgZHJpdmVyX2pyM19wY2lfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBkcml2ZXJfanIzX3BjaS5kcml2ZXJfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkcml2ZXJfanIzX3BjaV9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXJfanIzX3BjaV9wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IGpyM19wY2lfcGNpX3RhYmxlLAorCS5wcm9iZSA9ICZkcml2ZXJfanIzX3BjaV9wY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKCZkcml2ZXJfanIzX3BjaV9wY2lfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2pyM19wY2lfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2pyM19wY2kpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJZHJpdmVyX2pyM19wY2lfcGNpX2RyaXZlci5uYW1lID0gKGNoYXIgKilkcml2ZXJfanIzX3BjaS5kcml2ZXJfbmFtZTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2pyM19wY2lfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfanIzX3BjaV9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2pyM19wY2lfcGNpX2RyaXZlcik7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfanIzX3BjaSk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9qcjNfcGNpX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9qcjNfcGNpX2NsZWFudXBfbW9kdWxlKTsKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2tlX2NvdW50ZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9rZV9jb3VudGVyLmMKaW5kZXggNzNiMDQ0NS4uMjg2MDkzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2tlX2NvdW50ZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMva2VfY291bnRlci5jCkBAIC05Niw3ICs5Niw0MyBAQAogCS5kZXRhY2ggPSBjbnRfZGV0YWNoLAogfTsKIAotQ09NRURJX1BDSV9JTklUQ0xFQU5VUChjbnRfZHJpdmVyLCBjbnRfcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGNudF9kcml2ZXJfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIGNudF9kcml2ZXIuZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgY250X2RyaXZlcl9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBjbnRfZHJpdmVyX3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gY250X3BjaV90YWJsZSwKKwkucHJvYmUgPSAmY250X2RyaXZlcl9wY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKCZjbnRfZHJpdmVyX3BjaV9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjbnRfZHJpdmVyX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmNudF9kcml2ZXIpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJY250X2RyaXZlcl9wY2lfZHJpdmVyLm5hbWUgPSAoY2hhciAqKWNudF9kcml2ZXIuZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmNudF9kcml2ZXJfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjbnRfZHJpdmVyX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZjbnRfZHJpdmVyX3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmY250X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGNudF9kcml2ZXJfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoY250X2RyaXZlcl9jbGVhbnVwX21vZHVsZSk7CiAKIC8qLS0gY291bnRlciB3cml0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTUyLDcgKzE4OCw3IEBACiBzdGF0aWMgaW50IGNudF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQogewogCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkZXZpY2U7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZpY2U7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZpY2UgPSBOVUxMOwogCXN0cnVjdCBjbnRfYm9hcmRfc3RydWN0ICpib2FyZDsKIAl1bnNpZ25lZCBsb25nIGlvX2Jhc2U7CiAJaW50IGVycm9yLCBpOwpAQCAtMTYzLDkgKzE5OSw3IEBACiAJCXJldHVybiBlcnJvcjsKIAogCS8qIFByb2JlIHRoZSBkZXZpY2UgdG8gZGV0ZXJtaW5lIHdoYXQgZGV2aWNlIGluIHRoZSBzZXJpZXMgaXQgaXMuICovCi0JZm9yIChwY2lfZGV2aWNlID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7Ci0JICAgICBwY2lfZGV2aWNlICE9IE5VTEw7Ci0JICAgICBwY2lfZGV2aWNlID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGNpX2RldmljZSkpIHsKKwlmb3JfZWFjaF9wY2lfZGV2KHBjaV9kZXZpY2UpIHsKIAkJaWYgKHBjaV9kZXZpY2UtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0tPTFRFUikgewogCQkJZm9yIChpID0gMDsgaSA8IGNudF9ib2FyZF9uYnI7IGkrKykgewogCQkJCWlmIChjbnRfYm9hcmRzW2ldLmRldmljZV9pZCA9PQpAQCAtMjU5LDMgKzI5Myw3IEBACiAJICAgICAgIGRldi0+bWlub3IpOwogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWU0MDAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWU0MDAwLmMKaW5kZXggOGI5ZmEwZi4uMTQ3MTM4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lNDAwMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZTQwMDAuYwpAQCAtOTEsMjIgKzkxLDIyIEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbWU0MDAwX3BjaV90YWJsZSk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWU0MDAwX2JvYXJkIG1lNDAwMF9ib2FyZHNbXSA9IHsKLQl7Ik1FLTQ2NTAiLCAweDQ2NTAsIHswLCAwfSwgezE2LCAwLCAwLCAwfSwgezR9LCB7MH19LAorCXsiTUUtNDY1MCIsIDB4NDY1MCwgezAsIDB9LCB7MTYsIDAsIDAsIDB9LCB7NH0sIHswfSB9LAogCi0JeyJNRS00NjYwIiwgMHg0NjYwLCB7MCwgMH0sIHszMiwgMCwgMTYsIDB9LCB7NH0sIHszfX0sCi0JeyJNRS00NjYwaSIsIDB4NDY2MSwgezAsIDB9LCB7MzIsIDAsIDE2LCAwfSwgezR9LCB7M319LAotCXsiTUUtNDY2MHMiLCAweDQ2NjIsIHswLCAwfSwgezMyLCA4LCAxNiwgMH0sIHs0fSwgezN9fSwKLQl7Ik1FLTQ2NjBpcyIsIDB4NDY2MywgezAsIDB9LCB7MzIsIDgsIDE2LCAwfSwgezR9LCB7M319LAorCXsiTUUtNDY2MCIsIDB4NDY2MCwgezAsIDB9LCB7MzIsIDAsIDE2LCAwfSwgezR9LCB7M30gfSwKKwl7Ik1FLTQ2NjBpIiwgMHg0NjYxLCB7MCwgMH0sIHszMiwgMCwgMTYsIDB9LCB7NH0sIHszfSB9LAorCXsiTUUtNDY2MHMiLCAweDQ2NjIsIHswLCAwfSwgezMyLCA4LCAxNiwgMH0sIHs0fSwgezN9IH0sCisJeyJNRS00NjYwaXMiLCAweDQ2NjMsIHswLCAwfSwgezMyLCA4LCAxNiwgMH0sIHs0fSwgezN9IH0sCiAKLQl7Ik1FLTQ2NzAiLCAweDQ2NzAsIHs0LCAwfSwgezMyLCAwLCAxNiwgMX0sIHs0fSwgezN9fSwKLQl7Ik1FLTQ2NzBpIiwgMHg0NjcxLCB7NCwgMH0sIHszMiwgMCwgMTYsIDF9LCB7NH0sIHszfX0sCi0JeyJNRS00NjcwcyIsIDB4NDY3MiwgezQsIDB9LCB7MzIsIDgsIDE2LCAxfSwgezR9LCB7M319LAotCXsiTUUtNDY3MGlzIiwgMHg0NjczLCB7NCwgMH0sIHszMiwgOCwgMTYsIDF9LCB7NH0sIHszfX0sCisJeyJNRS00NjcwIiwgMHg0NjcwLCB7NCwgMH0sIHszMiwgMCwgMTYsIDF9LCB7NH0sIHszfSB9LAorCXsiTUUtNDY3MGkiLCAweDQ2NzEsIHs0LCAwfSwgezMyLCAwLCAxNiwgMX0sIHs0fSwgezN9IH0sCisJeyJNRS00NjcwcyIsIDB4NDY3MiwgezQsIDB9LCB7MzIsIDgsIDE2LCAxfSwgezR9LCB7M30gfSwKKwl7Ik1FLTQ2NzBpcyIsIDB4NDY3MywgezQsIDB9LCB7MzIsIDgsIDE2LCAxfSwgezR9LCB7M30gfSwKIAotCXsiTUUtNDY4MCIsIDB4NDY4MCwgezQsIDR9LCB7MzIsIDAsIDE2LCAxfSwgezR9LCB7M319LAotCXsiTUUtNDY4MGkiLCAweDQ2ODEsIHs0LCA0fSwgezMyLCAwLCAxNiwgMX0sIHs0fSwgezN9fSwKLQl7Ik1FLTQ2ODBzIiwgMHg0NjgyLCB7NCwgNH0sIHszMiwgOCwgMTYsIDF9LCB7NH0sIHszfX0sCi0JeyJNRS00NjgwaXMiLCAweDQ2ODMsIHs0LCA0fSwgezMyLCA4LCAxNiwgMX0sIHs0fSwgezN9fSwKKwl7Ik1FLTQ2ODAiLCAweDQ2ODAsIHs0LCA0fSwgezMyLCAwLCAxNiwgMX0sIHs0fSwgezN9IH0sCisJeyJNRS00NjgwaSIsIDB4NDY4MSwgezQsIDR9LCB7MzIsIDAsIDE2LCAxfSwgezR9LCB7M30gfSwKKwl7Ik1FLTQ2ODBzIiwgMHg0NjgyLCB7NCwgNH0sIHszMiwgOCwgMTYsIDF9LCB7NH0sIHszfSB9LAorCXsiTUUtNDY4MGlzIiwgMHg0NjgzLCB7NCwgNH0sIHszMiwgOCwgMTYsIDF9LCB7NH0sIHszfSB9LAogCiAJezB9LAogfTsKQEAgLTEyMCwxMCArMTIwLDEwIEBACiAJCQkgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KTsKIHN0YXRpYyBpbnQgbWU0MDAwX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfbWU0MDAwID0gewotZHJpdmVyX25hbWU6Im1lNDAwMCIsCi1tb2R1bGU6VEhJU19NT0RVTEUsCi1hdHRhY2g6bWU0MDAwX2F0dGFjaCwKLWRldGFjaDptZTQwMDBfZGV0YWNoLAorZHJpdmVyX25hbWU6ICJtZTQwMDAiLAorbW9kdWxlIDogVEhJU19NT0RVTEUsCithdHRhY2ggOiBtZTQwMDBfYXR0YWNoLAorZGV0YWNoIDogbWU0MDAwX2RldGFjaCwKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTMwMiw4ICszMDIsOCBAQAogCQkJaWYgKHJlcXVlc3RfaXJxKGluZm8tPmlycSwgbWU0MDAwX2FpX2lzciwKIAkJCQkJSVJRRl9TSEFSRUQsICJNRS00MDAwIiwgZGV2KSkgewogCQkJCXByaW50awotCQkJCSAgICAoImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9hdHRhY2goKTogVW5hYmxlIHRvIGFsbG9jYXRlIGlycVxuIiwKLQkJCQkgICAgIGRldi0+bWlub3IpOworCQkJCSAgICAoImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9hdHRhY2goKTogIgorCQkJCSAgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBpcnFcbiIsIGRldi0+bWlub3IpOwogCQkJfSBlbHNlIHsKIAkJCQlkZXYtPnJlYWRfc3ViZGV2ID0gczsKIAkJCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0NNRF9SRUFEOwpAQCAtMzEzLDggKzMxMyw4IEBACiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9hdHRhY2goKTogTm8gaW50ZXJydXB0IGF2YWlsYWJsZVxuIiwKLQkJCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2F0dGFjaCgpOiAiCisJCQkgICAgICAgIk5vIGludGVycnVwdCBhdmFpbGFibGVcbiIsIGRldi0+bWlub3IpOwogCQl9CiAJfSBlbHNlIHsKIAkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKQEAgLTM4OSw3ICszODksNyBAQAogCiBzdGF0aWMgaW50IG1lNDAwMF9wcm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZpY2U7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZpY2UgPSBOVUxMOwogCWludCByZXN1bHQsIGk7CiAJc3RydWN0IG1lNDAwMF9ib2FyZCAqYm9hcmQ7CiAKQEAgLTQwMiwxNyArNDAyLDIxIEBACiAJLyoKIAkgKiBQcm9iZSB0aGUgZGV2aWNlIHRvIGRldGVybWluZSB3aGF0IGRldmljZSBpbiB0aGUgc2VyaWVzIGl0IGlzLgogCSAqLwotCWZvciAocGNpX2RldmljZSA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOwotCSAgICAgcGNpX2RldmljZSAhPSBOVUxMOwotCSAgICAgcGNpX2RldmljZSA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaV9kZXZpY2UpKSB7CisJZm9yX2VhY2hfcGNpX2RldihwY2lfZGV2aWNlKSB7CiAJCWlmIChwY2lfZGV2aWNlLT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9NRUlMSEFVUykgewogCQkJZm9yIChpID0gMDsgaSA8IE1FNDAwMF9CT0FSRF9WRVJTSU9OUzsgaSsrKSB7CiAJCQkJaWYgKG1lNDAwMF9ib2FyZHNbaV0uZGV2aWNlX2lkID09CiAJCQkJICAgIHBjaV9kZXZpY2UtPmRldmljZSkgewotCQkJCQkvKiBXYXMgYSBwYXJ0aWN1bGFyIGJ1cy9zbG90IHJlcXVlc3RlZD8gKi8KKwkJCQkJLyoKKwkJCQkJICogV2FzIGEgcGFydGljdWxhcgorCQkJCQkgKiBidXMvc2xvdCByZXF1ZXN0ZWQ/CisJCQkJCSAqLwogCQkJCQlpZiAoKGl0LT5vcHRpb25zWzBdICE9IDApCiAJCQkJCSAgICB8fCAoaXQtPm9wdGlvbnNbMV0gIT0gMCkpIHsKLQkJCQkJCS8qIEFyZSB3ZSBvbiB0aGUgd3JvbmcgYnVzL3Nsb3Q/ICovCisJCQkJCQkvKgorCQkJCQkJICogQXJlIHdlIG9uIHRoZSB3cm9uZworCQkJCQkJICogYnVzL3Nsb3Q/CisJCQkJCQkgKi8KIAkJCQkJCWlmIChwY2lfZGV2aWNlLT5idXMtPm51bWJlciAhPQogCQkJCQkJICAgIGl0LT5vcHRpb25zWzBdCiAJCQkJCQkgICAgfHwKQEAgLTQzMywxNCArNDM3LDE2IEBACiAJfQogCiAJcHJpbnRrKEtFUk5fRVJSCi0JICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfcHJvYmUoKTogTm8gc3VwcG9ydGVkIGJvYXJkIGZvdW5kIChyZXEuIGJ1cy9zbG90IDogJWQvJWQpXG4iLAorCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX3Byb2JlKCk6ICIKKwkgICAgICAgIk5vIHN1cHBvcnRlZCBib2FyZCBmb3VuZCAocmVxLiBidXMvc2xvdCA6ICVkLyVkKVxuIiwKIAkgICAgICAgZGV2LT5taW5vciwgaXQtPm9wdGlvbnNbMF0sIGl0LT5vcHRpb25zWzFdKTsKIAlyZXR1cm4gLUVOT0RFVjsKIAogZm91bmQ6CiAKIAlwcmludGsoS0VSTl9JTkZPCi0JICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfcHJvYmUoKTogRm91bmQgJXMgYXQgUENJIGJ1cyAlZCwgc2xvdCAlZFxuIiwKKwkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9wcm9iZSgpOiAiCisJICAgICAgICJGb3VuZCAlcyBhdCBQQ0kgYnVzICVkLCBzbG90ICVkXG4iLAogCSAgICAgICBkZXYtPm1pbm9yLCBtZTQwMDBfYm9hcmRzW2ldLm5hbWUsIHBjaV9kZXZpY2UtPmJ1cy0+bnVtYmVyLAogCSAgICAgICBQQ0lfU0xPVChwY2lfZGV2aWNlLT5kZXZmbikpOwogCkBAIC00NTEsOCArNDU3LDggQEAKIAlyZXN1bHQgPSBjb21lZGlfcGNpX2VuYWJsZShwY2lfZGV2aWNlLCBkZXYtPmJvYXJkX25hbWUpOwogCWlmIChyZXN1bHQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX3Byb2JlKCk6IENhbm5vdCBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCBJL08gcmVnaW9uc1xuIiwKLQkJICAgICAgIGRldi0+bWlub3IpOworCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9wcm9iZSgpOiBDYW5ub3QgZW5hYmxlIFBDSSAiCisJCSAgICAgICAiZGV2aWNlIGFuZCByZXF1ZXN0IEkvTyByZWdpb25zXG4iLCBkZXYtPm1pbm9yKTsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAKQEAgLTQ2MCwxNiArNDY2LDE2IEBACiAJcmVzdWx0ID0gZ2V0X3JlZ2lzdGVycyhkZXYsIHBjaV9kZXZpY2UpOwogCWlmIChyZXN1bHQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX3Byb2JlKCk6IENhbm5vdCBnZXQgcmVnaXN0ZXJzXG4iLAotCQkgICAgICAgZGV2LT5taW5vcik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX3Byb2JlKCk6ICIKKwkJICAgICAgICJDYW5ub3QgZ2V0IHJlZ2lzdGVyc1xuIiwgZGV2LT5taW5vcik7CiAJCXJldHVybiByZXN1bHQ7CiAJfQogCS8qIEluaXRpYWxpemUgYm9hcmQgaW5mbyAqLwogCXJlc3VsdCA9IGluaXRfYm9hcmRfaW5mbyhkZXYsIHBjaV9kZXZpY2UpOwogCWlmIChyZXN1bHQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX3Byb2JlKCk6IENhbm5vdCBpbml0IGJhb3JkIGluZm9cbiIsCi0JCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfcHJvYmUoKTogIgorCQkgICAgICAgIkNhbm5vdCBpbml0IGJhb3JkIGluZm9cbiIsIGRldi0+bWlub3IpOwogCQlyZXR1cm4gcmVzdWx0OwogCX0KIApAQCAtNDc3LDggKzQ4Myw4IEBACiAJcmVzdWx0ID0gaW5pdF9hb19jb250ZXh0KGRldik7CiAJaWYgKHJlc3VsdCkgewogCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfcHJvYmUoKTogQ2Fubm90IGluaXQgYW8gY29udGV4dFxuIiwKLQkJICAgICAgIGRldi0+bWlub3IpOworCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9wcm9iZSgpOiAiCisJCSAgICAgICAiQ2Fubm90IGluaXQgYW8gY29udGV4dFxuIiwgZGV2LT5taW5vcik7CiAJCXJldHVybiByZXN1bHQ7CiAJfQogCkBAIC00ODYsOCArNDkyLDggQEAKIAlyZXN1bHQgPSBpbml0X2FpX2NvbnRleHQoZGV2KTsKIAlpZiAocmVzdWx0KSB7CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9wcm9iZSgpOiBDYW5ub3QgaW5pdCBhaSBjb250ZXh0XG4iLAotCQkgICAgICAgZGV2LT5taW5vcik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX3Byb2JlKCk6ICIKKwkJICAgICAgICJDYW5ub3QgaW5pdCBhaSBjb250ZXh0XG4iLCBkZXYtPm1pbm9yKTsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAKQEAgLTQ5NSw4ICs1MDEsOCBAQAogCXJlc3VsdCA9IGluaXRfZGlvX2NvbnRleHQoZGV2KTsKIAlpZiAocmVzdWx0KSB7CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9wcm9iZSgpOiBDYW5ub3QgaW5pdCBkaW8gY29udGV4dFxuIiwKLQkJICAgICAgIGRldi0+bWlub3IpOworCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9wcm9iZSgpOiAiCisJCSAgICAgICAiQ2Fubm90IGluaXQgZGlvIGNvbnRleHRcbiIsIGRldi0+bWlub3IpOwogCQlyZXR1cm4gcmVzdWx0OwogCX0KIApAQCAtNTA0LDggKzUxMCw4IEBACiAJcmVzdWx0ID0gaW5pdF9jbnRfY29udGV4dChkZXYpOwogCWlmIChyZXN1bHQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX3Byb2JlKCk6IENhbm5vdCBpbml0IGNudCBjb250ZXh0XG4iLAotCQkgICAgICAgZGV2LT5taW5vcik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX3Byb2JlKCk6ICIKKwkJICAgICAgICJDYW5ub3QgaW5pdCBjbnQgY29udGV4dFxuIiwgZGV2LT5taW5vcik7CiAJCXJldHVybiByZXN1bHQ7CiAJfQogCkBAIC01MTMsOCArNTE5LDggQEAKIAlyZXN1bHQgPSB4aWxpbnhfZG93bmxvYWQoZGV2KTsKIAlpZiAocmVzdWx0KSB7CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9wcm9iZSgpOiBDYW4ndCBkb3dubG9hZCBmaXJtd2FyZVxuIiwKLQkJICAgICAgIGRldi0+bWlub3IpOworCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9wcm9iZSgpOiAiCisJCSAgICAgICAiQ2FuJ3QgZG93bmxvYWQgZmlybXdhcmVcbiIsIGRldi0+bWlub3IpOwogCQlyZXR1cm4gcmVzdWx0OwogCX0KIApAQCAtNTM1LDI0ICs1NDEsMjQgQEAKIAogCUNBTExfUERFQlVHKCJJbiBnZXRfcmVnaXN0ZXJzKClcbiIpOwogCi0gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcGx4IHJlZ2Jhc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBwbHggcmVnYmFzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCWluZm8tPnBseF9yZWdiYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXZfcCwgMSk7CiAJaWYgKGluZm8tPnBseF9yZWdiYXNlID09IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogZ2V0X3JlZ2lzdGVycygpOiBQQ0kgYmFzZSBhZGRyZXNzIDEgaXMgbm90IGF2YWlsYWJsZVxuIiwKLQkJICAgICAgIGRldi0+bWlub3IpOworCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IGdldF9yZWdpc3RlcnMoKTogIgorCQkgICAgICAgIlBDSSBiYXNlIGFkZHJlc3MgMSBpcyBub3QgYXZhaWxhYmxlXG4iLCBkZXYtPm1pbm9yKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWluZm8tPnBseF9yZWdiYXNlX3NpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHBjaV9kZXZfcCwgMSk7CiAKLSAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtZTQwMDAgcmVnYmFzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1lNDAwMCByZWdiYXNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAJaW5mby0+bWU0MDAwX3JlZ2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2Rldl9wLCAyKTsKIAlpZiAoaW5mby0+bWU0MDAwX3JlZ2Jhc2UgPT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBnZXRfcmVnaXN0ZXJzKCk6IFBDSSBiYXNlIGFkZHJlc3MgMiBpcyBub3QgYXZhaWxhYmxlXG4iLAotCQkgICAgICAgZGV2LT5taW5vcik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogZ2V0X3JlZ2lzdGVycygpOiAiCisJCSAgICAgICAiUENJIGJhc2UgYWRkcmVzcyAyIGlzIG5vdCBhdmFpbGFibGVcbiIsIGRldi0+bWlub3IpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJaW5mby0+bWU0MDAwX3JlZ2Jhc2Vfc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpX2Rldl9wLCAyKTsKQEAgLTU2MiwxOSArNTY4LDE5IEBACiAJaW5mby0+dGltZXJfcmVnYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2X3AsIDMpOwogCWlmIChpbmZvLT50aW1lcl9yZWdiYXNlID09IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogZ2V0X3JlZ2lzdGVycygpOiBQQ0kgYmFzZSBhZGRyZXNzIDMgaXMgbm90IGF2YWlsYWJsZVxuIiwKLQkJICAgICAgIGRldi0+bWlub3IpOworCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IGdldF9yZWdpc3RlcnMoKTogIgorCQkgICAgICAgIlBDSSBiYXNlIGFkZHJlc3MgMyBpcyBub3QgYXZhaWxhYmxlXG4iLCBkZXYtPm1pbm9yKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWluZm8tPnRpbWVyX3JlZ2Jhc2Vfc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpX2Rldl9wLCAzKTsKIAotICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHByb2dyYW0gcmVnYmFzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHByb2dyYW0gcmVnYmFzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCWluZm8tPnByb2dyYW1fcmVnYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2X3AsIDUpOwogCWlmIChpbmZvLT5wcm9ncmFtX3JlZ2Jhc2UgPT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBnZXRfcmVnaXN0ZXJzKCk6IFBDSSBiYXNlIGFkZHJlc3MgNSBpcyBub3QgYXZhaWxhYmxlXG4iLAotCQkgICAgICAgZGV2LT5taW5vcik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogZ2V0X3JlZ2lzdGVycygpOiAiCisJCSAgICAgICAiUENJIGJhc2UgYWRkcmVzcyA1IGlzIG5vdCBhdmFpbGFibGVcbiIsIGRldi0+bWlub3IpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJaW5mby0+cHJvZ3JhbV9yZWdiYXNlX3NpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHBjaV9kZXZfcCwgNSk7CkBAIC04MDAsOCArODA2LDggQEAKIAl1ZGVsYXkoMjApOwogCWlmICghKGlubChpbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JTlRDU1IpICYgMHgyMCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogeGlsaW54X2Rvd25sb2FkKCk6IENhbid0IGluaXQgWGlsaW54XG4iLAotCQkgICAgICAgZGV2LT5taW5vcik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogeGlsaW54X2Rvd25sb2FkKCk6ICIKKwkJICAgICAgICJDYW4ndCBpbml0IFhpbGlueFxuIiwgZGV2LT5taW5vcik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtODEwLDggKzgxNiw4IEBACiAJdmFsdWUgJj0gfjB4MTAwOwogCW91dGwodmFsdWUsIGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CiAJaWYgKEZJUk1XQVJFX05PVF9BVkFJTEFCTEUpIHsKLQkJY29tZWRpX2Vycm9yKGRldiwKLQkJCSAgICAgInhpbGlueCBmaXJtd2FyZSB1bmF2YWlsYWJsZSBkdWUgdG8gbGljZW5zaW5nLCBhYm9ydGluZyIpOworCQljb21lZGlfZXJyb3IoZGV2LCAieGlsaW54IGZpcm13YXJlIHVuYXZhaWxhYmxlICIKKwkJCSAgICAgImR1ZSB0byBsaWNlbnNpbmcsIGFib3J0aW5nIik7CiAJCXJldHVybiAtRUlPOwogCX0gZWxzZSB7CiAJCS8qIERvd25sb2FkIFhpbGlueCBmaXJtd2FyZSAqLwpAQCAtODI2LDcgKzgzMiw4IEBACiAJCQkvKiBDaGVjayBpZiBCVVNZIGZsYWcgaXMgbG93ICovCiAJCQlpZiAoaW5sKGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUikgJiAweDIwKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiB4aWxpbnhfZG93bmxvYWQoKTogWGlsaW54IGlzIHN0aWxsIGJ1c3kgKGlkeCA9ICVkKVxuIiwKKwkJCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IHhpbGlueF9kb3dubG9hZCgpOiAiCisJCQkJICAgICAgICJYaWxpbnggaXMgc3RpbGwgYnVzeSAoaWR4ID0gJWQpXG4iLAogCQkJCSAgICAgICBkZXYtPm1pbm9yLCBpZHgpOwogCQkJCXJldHVybiAtRUlPOwogCQkJfQpAQCAtODM3LDExICs4NDQsMTEgQEAKIAlpZiAoaW5sKGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUikgJiAweDQpIHsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiB4aWxpbnhfZG93bmxvYWQoKTogRE9ORSBmbGFnIGlzIG5vdCBzZXRcbiIsCi0JCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiB4aWxpbnhfZG93bmxvYWQoKTogIgorCQkgICAgICAgIkRPTkUgZmxhZyBpcyBub3Qgc2V0XG4iLCBkZXYtPm1pbm9yKTsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogeGlsaW54X2Rvd25sb2FkKCk6IERvd25sb2FkIG5vdCBzdWNjZXNzZnVsXG4iLAotCQkgICAgICAgZGV2LT5taW5vcik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogeGlsaW54X2Rvd25sb2FkKCk6ICIKKwkJICAgICAgICJEb3dubG9hZCBub3Qgc3VjY2Vzc2Z1bFxuIiwgZGV2LT5taW5vcik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtOTAyLDcgKzkwOSwxMCBAQAogCW1lNDAwMF9vdXRsKGRldiwgTUU0MDAwX0FPX0RFTVVYX0FESlVTVF9WQUxVRSwKIAkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPX0RFTVVYX0FESlVTVF9SRUcpOwogCi0JLyogU2V0IGRpZ2l0YWwgSS9PIGRpcmVjdGlvbiBmb3IgcG9ydCAwIHRvIG91dHB1dCBvbiBpc29sYXRlZCB2ZXJzaW9ucyAqLworCS8qCisJICogU2V0IGRpZ2l0YWwgSS9PIGRpcmVjdGlvbiBmb3IgcG9ydCAwCisJICogdG8gb3V0cHV0IG9uIGlzb2xhdGVkIHZlcnNpb25zCisJICovCiAJaWYgKCEobWU0MDAwX2lubChkZXYsIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0RJT19ESVJfUkVHKSAmIDB4MSkpIHsKIAkJbWU0MDAwX291dGwoZGV2LCAweDEsCiAJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfRElPX0NUUkxfUkVHKTsKQEAgLTk1MCw4ICs5NjAsOCBAQAogCQlyZXR1cm4gMDsKIAl9IGVsc2UgaWYgKGluc24tPm4gPiAxKSB7CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9pbnNuX3JlYWQoKTogSW52YWxpZCBpbnN0cnVjdGlvbiBsZW5ndGggJWRcbiIsCi0JCSAgICAgICBkZXYtPm1pbm9yLCBpbnNuLT5uKTsKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfaW5zbl9yZWFkKCk6ICIKKwkJICAgICAgICJJbnZhbGlkIGluc3RydWN0aW9uIGxlbmd0aCAlZFxuIiwgZGV2LT5taW5vciwgaW5zbi0+bik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtOTcwLDggKzk4MCw4IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9pbnNuX3JlYWQoKTogSW52YWxpZCByYW5nZSBzcGVjaWZpZWRcbiIsCi0JCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfaW5zbl9yZWFkKCk6ICIKKwkJICAgICAgICJJbnZhbGlkIHJhbmdlIHNwZWNpZmllZFxuIiwgZGV2LT5taW5vcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtOTgwLDggKzk5MCw4IEBACiAJY2FzZSBBUkVGX0NPTU1PTjoKIAkJaWYgKGNoYW4gPj0gdGhpc2JvYXJkLT5haS5jb3VudCkgewogCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9pbnNuX3JlYWQoKTogQW5hbG9nIGlucHV0IGlzIG5vdCBhdmFpbGFibGVcbiIsCi0JCQkgICAgICAgZGV2LT5taW5vcik7CisJCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9pbnNuX3JlYWQoKTogIgorCQkJICAgICAgICJBbmFsb2cgaW5wdXQgaXMgbm90IGF2YWlsYWJsZVxuIiwgZGV2LT5taW5vcik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQllbnRyeSB8PSBNRTQwMDBfQUlfTElTVF9JTlBVVF9TSU5HTEVfRU5ERUQgfCBjaGFuOwpAQCAtOTkwLDIzICsxMDAwLDI0IEBACiAJY2FzZSBBUkVGX0RJRkY6CiAJCWlmIChyYW5nID09IDAgfHwgcmFuZyA9PSAxKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2luc25fcmVhZCgpOiBSYW5nZSBtdXN0IGJlIGJpcG9sYXIgd2hlbiBhcmVmID0gZGlmZlxuIiwKKwkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2luc25fcmVhZCgpOiAiCisJCQkgICAgICAgIlJhbmdlIG11c3QgYmUgYmlwb2xhciB3aGVuIGFyZWYgPSBkaWZmXG4iLAogCQkJICAgICAgIGRldi0+bWlub3IpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAogCQlpZiAoY2hhbiA+PSB0aGlzYm9hcmQtPmFpLmRpZmZfY291bnQpIHsKIAkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfaW5zbl9yZWFkKCk6IEFuYWxvZyBpbnB1dCBpcyBub3QgYXZhaWxhYmxlXG4iLAotCQkJICAgICAgIGRldi0+bWlub3IpOworCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfaW5zbl9yZWFkKCk6ICIKKwkJCSAgICAgICAiQW5hbG9nIGlucHV0IGlzIG5vdCBhdmFpbGFibGVcbiIsIGRldi0+bWlub3IpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJZW50cnkgfD0gTUU0MDAwX0FJX0xJU1RfSU5QVVRfRElGRkVSRU5USUFMIHwgY2hhbjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2luc25fcmVhZCgpOiBJbnZhbGlkIGFyZWYgc3BlY2lmaWVkXG4iLAotCQkgICAgICAgZGV2LT5taW5vcik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2luc25fcmVhZCgpOiAiCisJCSAgICAgICAiSW52YWxpZCBhcmVmIHNwZWNpZmllZFxuIiwgZGV2LT5taW5vcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTA0NSw4ICsxMDU2LDggQEAKIAkgICAgKG1lNDAwMF9pbmwoZGV2LCBpbmZvLT5haV9jb250ZXh0LnN0YXR1c19yZWcpICYKIAkgICAgIE1FNDAwMF9BSV9TVEFUVVNfQklUX0VGX0RBVEEpKSB7CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9pbnNuX3JlYWQoKTogVmFsdWUgbm90IGF2YWlsYWJsZSBhZnRlciB3YWl0XG4iLAotCQkgICAgICAgZGV2LT5taW5vcik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2luc25fcmVhZCgpOiAiCisJCSAgICAgICAiVmFsdWUgbm90IGF2YWlsYWJsZSBhZnRlciB3YWl0XG4iLCBkZXYtPm1pbm9yKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0xMDg2LDI0ICsxMDk3LDI0IEBACiAJLyogQ2hlY2sgd2hldGhlciBhIGNoYW5uZWwgbGlzdCBpcyBhdmFpbGFibGUgKi8KIAlpZiAoIWNtZC0+Y2hhbmxpc3RfbGVuKSB7CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IGFpX2NoZWNrX2NoYW5saXN0KCk6IE5vIGNoYW5uZWwgbGlzdCBhdmFpbGFibGVcbiIsCi0JCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBhaV9jaGVja19jaGFubGlzdCgpOiAiCisJCSAgICAgICAiTm8gY2hhbm5lbCBsaXN0IGF2YWlsYWJsZVxuIiwgZGV2LT5taW5vcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIENoZWNrIHRoZSBjaGFubmVsIGxpc3Qgc2l6ZSAqLwogCWlmIChjbWQtPmNoYW5saXN0X2xlbiA+IE1FNDAwMF9BSV9DSEFOTkVMX0xJU1RfQ09VTlQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogYWlfY2hlY2tfY2hhbmxpc3QoKTogQ2hhbm5lbCBsaXN0IGlzIHRvIGxhcmdlXG4iLAotCQkgICAgICAgZGV2LT5taW5vcik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogYWlfY2hlY2tfY2hhbmxpc3QoKTogIgorCQkgICAgICAgIkNoYW5uZWwgbGlzdCBpcyB0byBsYXJnZVxuIiwgZGV2LT5taW5vcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIENoZWNrIHRoZSBwb2ludGVyICovCiAJaWYgKCFjbWQtPmNoYW5saXN0KSB7CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IGFpX2NoZWNrX2NoYW5saXN0KCk6IE5VTEwgcG9pbnRlciB0byBjaGFubmVsIGxpc3RcbiIsCi0JCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBhaV9jaGVja19jaGFubGlzdCgpOiAiCisJCSAgICAgICAiTlVMTCBwb2ludGVyIHRvIGNoYW5uZWwgbGlzdFxuIiwgZGV2LT5taW5vcik7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIApAQCAtMTExMiw3ICsxMTIzLDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgewogCQlpZiAoQ1JfQVJFRihjbWQtPmNoYW5saXN0W2ldKSAhPSBhcmVmKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogYWlfY2hlY2tfY2hhbmxpc3QoKTogTW9kZSBpcyBub3QgZXF1YWwgZm9yIGFsbCBlbnRyaWVzXG4iLAorCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBhaV9jaGVja19jaGFubGlzdCgpOiAiCisJCQkgICAgICAgIk1vZGUgaXMgbm90IGVxdWFsIGZvciBhbGwgZW50cmllc1xuIiwKIAkJCSAgICAgICBkZXYtPm1pbm9yKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC0xMTI0LDggKzExMzYsOCBAQAogCQkJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkgPj0KIAkJCSAgICB0aGlzYm9hcmQtPmFpLmRpZmZfY291bnQpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IGFpX2NoZWNrX2NoYW5saXN0KCk6IENoYW5uZWwgbnVtYmVyIHRvIGhpZ2hcbiIsCi0JCQkJICAgICAgIGRldi0+bWlub3IpOworCQkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogYWlfY2hlY2tfY2hhbmxpc3QoKToiCisJCQkJICAgICAgICIgQ2hhbm5lbCBudW1iZXIgdG8gaGlnaFxuIiwgZGV2LT5taW5vcik7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCX0KQEAgLTExMzMsOCArMTE0NSw4IEBACiAJCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CiAJCQlpZiAoQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKSA+PSB0aGlzYm9hcmQtPmFpLmNvdW50KSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBhaV9jaGVja19jaGFubGlzdCgpOiBDaGFubmVsIG51bWJlciB0byBoaWdoXG4iLAotCQkJCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IGFpX2NoZWNrX2NoYW5saXN0KCk6ICIKKwkJCQkgICAgICAgIkNoYW5uZWwgbnVtYmVyIHRvIGhpZ2hcbiIsIGRldi0+bWlub3IpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQl9CkBAIC0xMTQ2LDcgKzExNTgsOSBAQAogCQkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pICE9IDEgJiYKIAkJCSAgICBDUl9SQU5HRShjbWQtPmNoYW5saXN0W2ldKSAhPSAyKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBhaV9jaGVja19jaGFubGlzdCgpOiBCaXBvbGFyIGlzIG5vdCBzZWxlY3RlZCBpbiBkaWZmZXJlbnRpYWwgbW9kZVxuIiwKKwkJCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IGFpX2NoZWNrX2NoYW5saXN0KCk6ICIKKwkJCQkgICAgICAgIkJpcG9sYXIgaXMgbm90IHNlbGVjdGVkIGluICIKKwkJCQkgICAgICAgImRpZmZlcmVudGlhbCBtb2RlXG4iLAogCQkJCSAgICAgICBkZXYtPm1pbm9yKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KQEAgLTEzMzAsMjEgKzEzNDQsMTkgQEAKIAogCQllbnRyeSA9IGNoYW47CiAKLQkJaWYgKHJhbmcgPT0gMCkgeworCQlpZiAocmFuZyA9PSAwKQogCQkJZW50cnkgfD0gTUU0MDAwX0FJX0xJU1RfUkFOR0VfVU5JUE9MQVJfMl81OwotCQl9IGVsc2UgaWYgKHJhbmcgPT0gMSkgeworCQllbHNlIGlmIChyYW5nID09IDEpCiAJCQllbnRyeSB8PSBNRTQwMDBfQUlfTElTVF9SQU5HRV9VTklQT0xBUl8xMDsKLQkJfSBlbHNlIGlmIChyYW5nID09IDIpIHsKKwkJZWxzZSBpZiAocmFuZyA9PSAyKQogCQkJZW50cnkgfD0gTUU0MDAwX0FJX0xJU1RfUkFOR0VfQklQT0xBUl8yXzU7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCWVudHJ5IHw9IE1FNDAwMF9BSV9MSVNUX1JBTkdFX0JJUE9MQVJfMTA7Ci0JCX0KIAotCQlpZiAoYXJlZiA9PSBTREZfRElGRikgeworCQlpZiAoYXJlZiA9PSBTREZfRElGRikKIAkJCWVudHJ5IHw9IE1FNDAwMF9BSV9MSVNUX0lOUFVUX0RJRkZFUkVOVElBTDsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJZW50cnkgfD0gTUU0MDAwX0FJX0xJU1RfSU5QVVRfU0lOR0xFX0VOREVEOwotCQl9CiAKIAkJbWU0MDAwX291dGwoZGV2LCBlbnRyeSwgaW5mby0+YWlfY29udGV4dC5jaGFubmVsX2xpc3RfcmVnKTsKIAl9CkBAIC0xNDU0LDggKzE0NjYsOCBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBzdGFydCBzb3VyY2VcbiIsCi0JCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogIgorCQkgICAgICAgIkludmFsaWQgc3RhcnQgc291cmNlXG4iLCBkZXYtPm1pbm9yKTsKIAkJY21kLT5zdGFydF9zcmMgPSBUUklHX05PVzsKIAkJZXJyKys7CiAJfQpAQCAtMTQ3MCw4ICsxNDgyLDggQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IEludmFsaWQgc2NhbiBiZWdpbiBzb3VyY2VcbiIsCi0JCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogIgorCQkgICAgICAgIkludmFsaWQgc2NhbiBiZWdpbiBzb3VyY2VcbiIsIGRldi0+bWlub3IpOwogCQljbWQtPnNjYW5fYmVnaW5fc3JjID0gVFJJR19GT0xMT1c7CiAJCWVycisrOwogCX0KQEAgLTE0ODUsOCArMTQ5Nyw4IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIGNvbnZlcnQgc291cmNlXG4iLAotCQkgICAgICAgZGV2LT5taW5vcik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6ICIKKwkJICAgICAgICJJbnZhbGlkIGNvbnZlcnQgc291cmNlXG4iLCBkZXYtPm1pbm9yKTsKIAkJY21kLT5jb252ZXJ0X3NyYyA9IFRSSUdfVElNRVI7CiAJCWVycisrOwogCX0KQEAgLTE1MDAsOCArMTUxMiw4IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIHNjYW4gZW5kIHNvdXJjZVxuIiwKLQkJICAgICAgIGRldi0+bWlub3IpOworCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiAiCisJCSAgICAgICAiSW52YWxpZCBzY2FuIGVuZCBzb3VyY2VcbiIsIGRldi0+bWlub3IpOwogCQljbWQtPnNjYW5fZW5kX3NyYyA9IFRSSUdfTk9ORTsKIAkJZXJyKys7CiAJfQpAQCAtMTUxNSw4ICsxNTI3LDggQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IEludmFsaWQgc3RvcCBzb3VyY2VcbiIsCi0JCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogIgorCQkgICAgICAgIkludmFsaWQgc3RvcCBzb3VyY2VcbiIsIGRldi0+bWlub3IpOwogCQljbWQtPnN0b3Bfc3JjID0gVFJJR19OT05FOwogCQllcnIrKzsKIAl9CkBAIC0xNTQ2LDggKzE1NTgsOCBAQAogCQkgICBjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfRVhUKSB7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IEludmFsaWQgc3RhcnQgdHJpZ2dlciBjb21iaW5hdGlvblxuIiwKLQkJICAgICAgIGRldi0+bWlub3IpOworCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiAiCisJCSAgICAgICAiSW52YWxpZCBzdGFydCB0cmlnZ2VyIGNvbWJpbmF0aW9uXG4iLCBkZXYtPm1pbm9yKTsKIAkJY21kLT5zdGFydF9zcmMgPSBUUklHX05PVzsKIAkJY21kLT5zY2FuX2JlZ2luX3NyYyA9IFRSSUdfRk9MTE9XOwogCQljbWQtPmNvbnZlcnRfc3JjID0gVFJJR19USU1FUjsKQEAgLTE1NjMsOCArMTU3NSw4IEBACiAJCSAgIGNtZC0+c2Nhbl9lbmRfc3JjID09IFRSSUdfQ09VTlQpIHsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBzdG9wIHRyaWdnZXIgY29tYmluYXRpb25cbiIsCi0JCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogIgorCQkgICAgICAgIkludmFsaWQgc3RvcCB0cmlnZ2VyIGNvbWJpbmF0aW9uXG4iLCBkZXYtPm1pbm9yKTsKIAkJY21kLT5zdG9wX3NyYyA9IFRSSUdfTk9ORTsKIAkJY21kLT5zY2FuX2VuZF9zcmMgPSBUUklHX05PTkU7CiAJCWVycisrOwpAQCAtMTU3NywyOSArMTU4OSwyOSBAQAogCSAqLwogCWlmIChjbWQtPmNoYW5saXN0X2xlbiA8IDEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IE5vIGNoYW5uZWwgbGlzdFxuIiwKLQkJICAgICAgIGRldi0+bWlub3IpOworCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiAiCisJCSAgICAgICAiTm8gY2hhbm5lbCBsaXN0XG4iLCBkZXYtPm1pbm9yKTsKIAkJY21kLT5jaGFubGlzdF9sZW4gPSAxOwogCQllcnIrKzsKIAl9CiAJaWYgKGluaXRfdGlja3MgPCA2NikgewogCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogU3RhcnQgYXJnIHRvIGxvd1xuIiwKLQkJICAgICAgIGRldi0+bWlub3IpOworCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiAiCisJCSAgICAgICAiU3RhcnQgYXJnIHRvIGxvd1xuIiwgZGV2LT5taW5vcik7CiAJCWNtZC0+c3RhcnRfYXJnID0gMjAwMDsKIAkJZXJyKys7CiAJfQogCWlmIChzY2FuX3RpY2tzICYmIHNjYW5fdGlja3MgPCA2NykgewogCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogU2NhbiBiZWdpbiBhcmcgdG8gbG93XG4iLAotCQkgICAgICAgZGV2LT5taW5vcik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6ICIKKwkJICAgICAgICJTY2FuIGJlZ2luIGFyZyB0byBsb3dcbiIsIGRldi0+bWlub3IpOwogCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMjAzMTsKIAkJZXJyKys7CiAJfQogCWlmIChjaGFuX3RpY2tzIDwgNjYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IENvbnZlcnQgYXJnIHRvIGxvd1xuIiwKLQkJICAgICAgIGRldi0+bWlub3IpOworCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiAiCisJCSAgICAgICAiQ29udmVydCBhcmcgdG8gbG93XG4iLCBkZXYtPm1pbm9yKTsKIAkJY21kLT5jb252ZXJ0X2FyZyA9IDIwMDA7CiAJCWVycisrOwogCX0KQEAgLTE2MTcsMjMgKzE2MjksMjUgQEAKIAkJLyogQ2hlY2sgdGltZXIgYXJndW1lbnRzICovCiAJCWlmIChpbml0X3RpY2tzIDwgTUU0MDAwX0FJX01JTl9USUNLUykgewogCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIHN0YXJ0IGFyZ1xuIiwKLQkJCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6ICIKKwkJCSAgICAgICAiSW52YWxpZCBzdGFydCBhcmdcbiIsIGRldi0+bWlub3IpOwogCQkJY21kLT5zdGFydF9hcmcgPSAyMDAwOwkvKiAgNjYgdGlja3MgYXQgbGVhc3QgKi8KIAkJCWVycisrOwogCQl9CiAJCWlmIChjaGFuX3RpY2tzIDwgTUU0MDAwX0FJX01JTl9USUNLUykgewogCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIGNvbnZlcnQgYXJnXG4iLAotCQkJICAgICAgIGRldi0+bWlub3IpOworCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogIgorCQkJICAgICAgICJJbnZhbGlkIGNvbnZlcnQgYXJnXG4iLCBkZXYtPm1pbm9yKTsKIAkJCWNtZC0+Y29udmVydF9hcmcgPSAyMDAwOwkvKiAgNjYgdGlja3MgYXQgbGVhc3QgKi8KIAkJCWVycisrOwogCQl9CiAJCWlmIChzY2FuX3RpY2tzIDw9IGNtZC0+Y2hhbmxpc3RfbGVuICogY2hhbl90aWNrcykgewogCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIHNjYW4gZW5kIGFyZ1xuIiwKLQkJCSAgICAgICBkZXYtPm1pbm9yKTsKLQkJCWNtZC0+c2Nhbl9lbmRfYXJnID0gMjAwMCAqIGNtZC0+Y2hhbmxpc3RfbGVuICsgMzE7CS8qICBBdCBsZWFzdCBvbmUgdGljayBtb3JlICovCisJCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiAiCisJCQkgICAgICAgIkludmFsaWQgc2NhbiBlbmQgYXJnXG4iLCBkZXYtPm1pbm9yKTsKKworCQkJLyogIEF0IGxlYXN0IG9uZSB0aWNrIG1vcmUgKi8KKwkJCWNtZC0+c2Nhbl9lbmRfYXJnID0gMjAwMCAqIGNtZC0+Y2hhbmxpc3RfbGVuICsgMzE7CiAJCQllcnIrKzsKIAkJfQogCX0gZWxzZSBpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19OT1cgJiYKQEAgLTE2NDMsMTUgKzE2NTcsMTUgQEAKIAkJLyogQ2hlY2sgdGltZXIgYXJndW1lbnRzICovCiAJCWlmIChpbml0X3RpY2tzIDwgTUU0MDAwX0FJX01JTl9USUNLUykgewogCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIHN0YXJ0IGFyZ1xuIiwKLQkJCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6ICIKKwkJCSAgICAgICAiSW52YWxpZCBzdGFydCBhcmdcbiIsIGRldi0+bWlub3IpOwogCQkJY21kLT5zdGFydF9hcmcgPSAyMDAwOwkvKiAgNjYgdGlja3MgYXQgbGVhc3QgKi8KIAkJCWVycisrOwogCQl9CiAJCWlmIChjaGFuX3RpY2tzIDwgTUU0MDAwX0FJX01JTl9USUNLUykgewogCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIGNvbnZlcnQgYXJnXG4iLAotCQkJICAgICAgIGRldi0+bWlub3IpOworCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogIgorCQkJICAgICAgICJJbnZhbGlkIGNvbnZlcnQgYXJnXG4iLCBkZXYtPm1pbm9yKTsKIAkJCWNtZC0+Y29udmVydF9hcmcgPSAyMDAwOwkvKiAgNjYgdGlja3MgYXQgbGVhc3QgKi8KIAkJCWVycisrOwogCQl9CkBAIC0xNjYyLDIzICsxNjc2LDI1IEBACiAJCS8qIENoZWNrIHRpbWVyIGFyZ3VtZW50cyAqLwogCQlpZiAoaW5pdF90aWNrcyA8IE1FNDAwMF9BSV9NSU5fVElDS1MpIHsKIAkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBzdGFydCBhcmdcbiIsCi0JCQkgICAgICAgZGV2LT5taW5vcik7CisJCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiAiCisJCQkgICAgICAgIkludmFsaWQgc3RhcnQgYXJnXG4iLCBkZXYtPm1pbm9yKTsKIAkJCWNtZC0+c3RhcnRfYXJnID0gMjAwMDsJLyogIDY2IHRpY2tzIGF0IGxlYXN0ICovCiAJCQllcnIrKzsKIAkJfQogCQlpZiAoY2hhbl90aWNrcyA8IE1FNDAwMF9BSV9NSU5fVElDS1MpIHsKIAkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBjb252ZXJ0IGFyZ1xuIiwKLQkJCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6ICIKKwkJCSAgICAgICAiSW52YWxpZCBjb252ZXJ0IGFyZ1xuIiwgZGV2LT5taW5vcik7CiAJCQljbWQtPmNvbnZlcnRfYXJnID0gMjAwMDsJLyogIDY2IHRpY2tzIGF0IGxlYXN0ICovCiAJCQllcnIrKzsKIAkJfQogCQlpZiAoc2Nhbl90aWNrcyA8PSBjbWQtPmNoYW5saXN0X2xlbiAqIGNoYW5fdGlja3MpIHsKIAkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBzY2FuIGVuZCBhcmdcbiIsCi0JCQkgICAgICAgZGV2LT5taW5vcik7Ci0JCQljbWQtPnNjYW5fZW5kX2FyZyA9IDIwMDAgKiBjbWQtPmNoYW5saXN0X2xlbiArIDMxOwkvKiAgQXQgbGVhc3Qgb25lIHRpY2sgbW9yZSAqLworCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogIgorCQkJICAgICAgICJJbnZhbGlkIHNjYW4gZW5kIGFyZ1xuIiwgZGV2LT5taW5vcik7CisKKwkJCS8qICBBdCBsZWFzdCBvbmUgdGljayBtb3JlICovCisJCQljbWQtPnNjYW5fZW5kX2FyZyA9IDIwMDAgKiBjbWQtPmNoYW5saXN0X2xlbiArIDMxOwogCQkJZXJyKys7CiAJCX0KIAl9IGVsc2UgaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUICYmCkBAIC0xNjg4LDE1ICsxNzA0LDE1IEBACiAJCS8qIENoZWNrIHRpbWVyIGFyZ3VtZW50cyAqLwogCQlpZiAoaW5pdF90aWNrcyA8IE1FNDAwMF9BSV9NSU5fVElDS1MpIHsKIAkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBzdGFydCBhcmdcbiIsCi0JCQkgICAgICAgZGV2LT5taW5vcik7CisJCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiAiCisJCQkgICAgICAgIkludmFsaWQgc3RhcnQgYXJnXG4iLCBkZXYtPm1pbm9yKTsKIAkJCWNtZC0+c3RhcnRfYXJnID0gMjAwMDsJLyogIDY2IHRpY2tzIGF0IGxlYXN0ICovCiAJCQllcnIrKzsKIAkJfQogCQlpZiAoY2hhbl90aWNrcyA8IE1FNDAwMF9BSV9NSU5fVElDS1MpIHsKIAkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBjb252ZXJ0IGFyZ1xuIiwKLQkJCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6ICIKKwkJCSAgICAgICAiSW52YWxpZCBjb252ZXJ0IGFyZ1xuIiwgZGV2LT5taW5vcik7CiAJCQljbWQtPmNvbnZlcnRfYXJnID0gMjAwMDsJLyogIDY2IHRpY2tzIGF0IGxlYXN0ICovCiAJCQllcnIrKzsKIAkJfQpAQCAtMTcwNywxNSArMTcyMywxNSBAQAogCQkvKiBDaGVjayB0aW1lciBhcmd1bWVudHMgKi8KIAkJaWYgKGluaXRfdGlja3MgPCBNRTQwMDBfQUlfTUlOX1RJQ0tTKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IEludmFsaWQgc3RhcnQgYXJnXG4iLAotCQkJICAgICAgIGRldi0+bWlub3IpOworCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogIgorCQkJICAgICAgICJJbnZhbGlkIHN0YXJ0IGFyZ1xuIiwgZGV2LT5taW5vcik7CiAJCQljbWQtPnN0YXJ0X2FyZyA9IDIwMDA7CS8qICA2NiB0aWNrcyBhdCBsZWFzdCAqLwogCQkJZXJyKys7CiAJCX0KIAkJaWYgKGNoYW5fdGlja3MgPCBNRTQwMDBfQUlfTUlOX1RJQ0tTKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IEludmFsaWQgY29udmVydCBhcmdcbiIsCi0JCQkgICAgICAgZGV2LT5taW5vcik7CisJCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiAiCisJCQkgICAgICAgIkludmFsaWQgY29udmVydCBhcmdcbiIsIGRldi0+bWlub3IpOwogCQkJY21kLT5jb252ZXJ0X2FyZyA9IDIwMDA7CS8qICA2NiB0aWNrcyBhdCBsZWFzdCAqLwogCQkJZXJyKys7CiAJCX0KQEAgLTE3MjYsOCArMTc0Miw4IEBACiAJCS8qIENoZWNrIHRpbWVyIGFyZ3VtZW50cyAqLwogCQlpZiAoaW5pdF90aWNrcyA8IE1FNDAwMF9BSV9NSU5fVElDS1MpIHsKIAkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBzdGFydCBhcmdcbiIsCi0JCQkgICAgICAgZGV2LT5taW5vcik7CisJCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiAiCisJCQkgICAgICAgIkludmFsaWQgc3RhcnQgYXJnXG4iLCBkZXYtPm1pbm9yKTsKIAkJCWNtZC0+c3RhcnRfYXJnID0gMjAwMDsJLyogIDY2IHRpY2tzIGF0IGxlYXN0ICovCiAJCQllcnIrKzsKIAkJfQpAQCAtMTczNSw4ICsxNzUxLDggQEAKIAlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CiAJCWlmIChjbWQtPnN0b3BfYXJnID09IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBzdG9wIGFyZ1xuIiwKLQkJCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6ICIKKwkJCSAgICAgICAiSW52YWxpZCBzdG9wIGFyZ1xuIiwgZGV2LT5taW5vcik7CiAJCQljbWQtPnN0b3BfYXJnID0gMTsKIAkJCWVycisrOwogCQl9CkBAIC0xNzQ0LDggKzE3NjAsOCBAQAogCWlmIChjbWQtPnNjYW5fZW5kX3NyYyA9PSBUUklHX0NPVU5UKSB7CiAJCWlmIChjbWQtPnNjYW5fZW5kX2FyZyA9PSAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IEludmFsaWQgc2NhbiBlbmQgYXJnXG4iLAotCQkJICAgICAgIGRldi0+bWlub3IpOworCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogIgorCQkJICAgICAgICJJbnZhbGlkIHNjYW4gZW5kIGFyZ1xuIiwgZGV2LT5taW5vcik7CiAJCQljbWQtPnNjYW5fZW5kX2FyZyA9IDE7CiAJCQllcnIrKzsKIAkJfQpAQCAtMTc4Niw4ICsxODAyLDggQEAKIAkvKiBDaGVjayBpZiBpcnEgbnVtYmVyIGlzIHJpZ2h0ICovCiAJaWYgKGlycSAhPSBhaV9jb250ZXh0LT5pcnEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2lzcigpOiBJbmNvcnJlY3QgaW50ZXJydXB0IG51bTogJWRcbiIsCi0JCSAgICAgICBkZXYtPm1pbm9yLCBpcnEpOworCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9pc3IoKTogIgorCQkgICAgICAgIkluY29ycmVjdCBpbnRlcnJ1cHQgbnVtOiAlZFxuIiwgZGV2LT5taW5vciwgaXJxKTsKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KIApAQCAtMTgwNiw3ICsxODIyLDEwIEBACiAJCQlJU1JfUERFQlVHKCJtZTQwMDBfYWlfaXNyKCk6IEZpZm8gZnVsbFxuIik7CiAJCQljID0gTUU0MDAwX0FJX0ZJRk9fQ09VTlQ7CiAKLQkJCS8qIEZJRk8gb3ZlcmZsb3csIHNvIHN0b3AgY29udmVyc2lvbiBhbmQgZGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLworCQkJLyoKKwkJCSAqIEZJRk8gb3ZlcmZsb3csIHNvIHN0b3AgY29udmVyc2lvbgorCQkJICogYW5kIGRpc2FibGUgYWxsIGludGVycnVwdHMKKwkJCSAqLwogCQkJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9JTU1FRElBVEVfU1RPUDsKIAkJCXRtcCAmPSB+KE1FNDAwMF9BSV9DVFJMX0JJVF9IRl9JUlEgfAogCQkJCSBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJRKTsKQEAgLTE4MTUsOCArMTgzNCw4IEBACiAJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUiB8IENPTUVESV9DQl9FT0E7CiAKIAkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfaXNyKCk6IEZJRk8gb3ZlcmZsb3dcbiIsCi0JCQkgICAgICAgZGV2LT5taW5vcik7CisJCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9pc3IoKTogIgorCQkJICAgICAgICJGSUZPIG92ZXJmbG93XG4iLCBkZXYtPm1pbm9yKTsKIAkJfSBlbHNlIGlmICgodG1wICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRkZfREFUQSkKIAkJCSAgICYmICEodG1wICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfSEZfREFUQSkKIAkJCSAgICYmICh0bXAgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9FRl9EQVRBKSkgewpAQCAtMTgyNywxMSArMTg0NiwxNCBAQAogCQkJYyA9IE1FNDAwMF9BSV9GSUZPX0NPVU5UIC8gMjsKIAkJfSBlbHNlIHsKIAkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfaXNyKCk6IENhbid0IGRldGVybWluZSBzdGF0ZSBvZiBmaWZvXG4iLAotCQkJICAgICAgIGRldi0+bWlub3IpOworCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfaXNyKCk6ICIKKwkJCSAgICAgICAiQ2FuJ3QgZGV0ZXJtaW5lIHN0YXRlIG9mIGZpZm9cbiIsIGRldi0+bWlub3IpOwogCQkJYyA9IDA7CiAKLQkJCS8qIFVuZGVmaW5lZCBzdGF0ZSwgc28gc3RvcCBjb252ZXJzaW9uIGFuZCBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCisJCQkvKgorCQkJICogVW5kZWZpbmVkIHN0YXRlLCBzbyBzdG9wIGNvbnZlcnNpb24KKwkJCSAqIGFuZCBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzCisJCQkgKi8KIAkJCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1A7CiAJCQl0bXAgJj0gfihNRTQwMDBfQUlfQ1RSTF9CSVRfSEZfSVJRIHwKIAkJCQkgTUU0MDAwX0FJX0NUUkxfQklUX1NDX0lSUSk7CkBAIC0xODQwLDggKzE4NjIsOCBAQAogCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfRU9BOwogCiAJCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2lzcigpOiBVbmRlZmluZWQgRklGTyBzdGF0ZVxuIiwKLQkJCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2lzcigpOiAiCisJCQkgICAgICAgIlVuZGVmaW5lZCBGSUZPIHN0YXRlXG4iLCBkZXYtPm1pbm9yKTsKIAkJfQogCiAJCUlTUl9QREVCVUcoIm1lNDAwMF9haV9pc3IoKTogVHJ5IHRvIHJlYWQgJWQgdmFsdWVzXG4iLCBjKTsKQEAgLTE4NTIsNyArMTg3NCwxMCBAQAogCQkJbHZhbCBePSAweDgwMDA7CiAKIAkJCWlmICghY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIGx2YWwpKSB7Ci0JCQkJLyogQnVmZmVyIG92ZXJmbG93LCBzbyBzdG9wIGNvbnZlcnNpb24gYW5kIGRpc2FibGUgYWxsIGludGVycnVwdHMgKi8KKwkJCQkvKgorCQkJCSAqIEJ1ZmZlciBvdmVyZmxvdywgc28gc3RvcCBjb252ZXJzaW9uCisJCQkJICogYW5kIGRpc2FibGUgYWxsIGludGVycnVwdHMKKwkJCQkgKi8KIAkJCQl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0lNTUVESUFURV9TVE9QOwogCQkJCXRtcCAmPSB+KE1FNDAwMF9BSV9DVFJMX0JJVF9IRl9JUlEgfAogCQkJCQkgTUU0MDAwX0FJX0NUUkxfQklUX1NDX0lSUSk7CkBAIC0xODYxLDggKzE4ODYsOCBAQAogCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX09WRVJGTE9XOwogCiAJCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfaXNyKCk6IEJ1ZmZlciBvdmVyZmxvd1xuIiwKLQkJCQkgICAgICAgZGV2LT5taW5vcik7CisJCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfaXNyKCk6ICIKKwkJCQkgICAgICAgIkJ1ZmZlciBvdmVyZmxvd1xuIiwgZGV2LT5taW5vcik7CiAKIAkJCQlicmVhazsKIAkJCX0KQEAgLTE4ODMsNyArMTkwOCwxMCBAQAogCiAJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0JMT0NLIHwgQ09NRURJX0NCX0VPQTsKIAotCQkvKiBBY3F1aXNpdGlvbiBpcyBjb21wbGV0ZSwgc28gc3RvcCBjb252ZXJzaW9uIGFuZCBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCisJCS8qCisJCSAqIEFjcXVpc2l0aW9uIGlzIGNvbXBsZXRlLCBzbyBzdG9wCisJCSAqIGNvbnZlcnNpb24gYW5kIGRpc2FibGUgYWxsIGludGVycnVwdHMKKwkJICovCiAJCXRtcCA9IG1lNDAwMF9pbmwoZGV2LCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CiAJCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1A7CiAJCXRtcCAmPSB+KE1FNDAwMF9BSV9DVFJMX0JJVF9IRl9JUlEgfCBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJRKTsKQEAgLTE4OTcsOCArMTkyNSw4IEBACiAKIAkJCWlmICghY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIGx2YWwpKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfaXNyKCk6IEJ1ZmZlciBvdmVyZmxvd1xuIiwKLQkJCQkgICAgICAgZGV2LT5taW5vcik7CisJCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfaXNyKCk6ICIKKwkJCQkgICAgICAgIkJ1ZmZlciBvdmVyZmxvd1xuIiwgZGV2LT5taW5vcik7CiAJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfT1ZFUkZMT1c7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xOTQxLDI5ICsxOTY5LDI5IEBACiAJCXJldHVybiAwOwogCX0gZWxzZSBpZiAoaW5zbi0+biA+IDEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FvX2luc25fd3JpdGUoKTogSW52YWxpZCBpbnN0cnVjdGlvbiBsZW5ndGggJWRcbiIsCi0JCSAgICAgICBkZXYtPm1pbm9yLCBpbnNuLT5uKTsKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYW9faW5zbl93cml0ZSgpOiAiCisJCSAgICAgICAiSW52YWxpZCBpbnN0cnVjdGlvbiBsZW5ndGggJWRcbiIsIGRldi0+bWlub3IsIGluc24tPm4pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoY2hhbiA+PSB0aGlzYm9hcmQtPmFvLmNvdW50KSB7CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9hb19pbnNuX3dyaXRlKCk6IEludmFsaWQgY2hhbm5lbCAlZFxuIiwKLQkJICAgICAgIGRldi0+bWlub3IsIGluc24tPm4pOworCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9hb19pbnNuX3dyaXRlKCk6ICIKKwkJICAgICAgICJJbnZhbGlkIGNoYW5uZWwgJWRcbiIsIGRldi0+bWlub3IsIGluc24tPm4pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAocmFuZyAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9hb19pbnNuX3dyaXRlKCk6IEludmFsaWQgcmFuZ2UgJWRcbiIsCi0JCSAgICAgICBkZXYtPm1pbm9yLCBpbnNuLT5uKTsKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYW9faW5zbl93cml0ZSgpOiAiCisJCSAgICAgICAiSW52YWxpZCByYW5nZSAlZFxuIiwgZGV2LT5taW5vciwgaW5zbi0+bik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChhcmVmICE9IEFSRUZfR1JPVU5EICYmIGFyZWYgIT0gQVJFRl9DT01NT04pIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FvX2luc25fd3JpdGUoKTogSW52YWxpZCBhcmVmICVkXG4iLAotCQkgICAgICAgZGV2LT5taW5vciwgaW5zbi0+bik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FvX2luc25fd3JpdGUoKTogIgorCQkgICAgICAgIkludmFsaWQgYXJlZiAlZFxuIiwgZGV2LT5taW5vciwgaW5zbi0+bik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTk5NCw4ICsyMDIyLDggQEAKIAkJcmV0dXJuIDA7CiAJfSBlbHNlIGlmIChpbnNuLT5uID4gMSkgewogCQlwcmludGsKLQkJICAgICgiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FvX2luc25fcmVhZCgpOiBJbnZhbGlkIGluc3RydWN0aW9uIGxlbmd0aFxuIiwKLQkJICAgICBkZXYtPm1pbm9yKTsKKwkJICAgICgiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FvX2luc25fcmVhZCgpOiAiCisJCSAgICAgIkludmFsaWQgaW5zdHJ1Y3Rpb24gbGVuZ3RoXG4iLCBkZXYtPm1pbm9yKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yMDIxLDggKzIwNDksOCBAQAogCiAJaWYgKGluc24tPm4gIT0gMikgewogCQlwcmludGsKLQkJICAgICgiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2Rpb19pbnNuX2JpdHMoKTogSW52YWxpZCBpbnN0cnVjdGlvbiBsZW5ndGhcbiIsCi0JCSAgICAgZGV2LT5taW5vcik7CisJCSAgICAoImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9kaW9faW5zbl9iaXRzKCk6ICIKKwkJICAgICAiSW52YWxpZCBpbnN0cnVjdGlvbiBsZW5ndGhcbiIsIGRldi0+bWlub3IpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTIwOTUsOCArMjEyMyw5IEBACiAJCQl0bXAgfD0gTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzA7CiAJCX0gZWxzZSBpZiAoY2hhbiA8IDE2KSB7CiAJCQkvKgotCQkJICogQ2hlY2ggZm9yIG9wdG9pc29sYXRlZCBNRS00MDAwIHZlcnNpb24uIElmIG9uZSB0aGUgZmlyc3QKLQkJCSAqIHBvcnQgaXMgYSBmaXhlZCBvdXRwdXQgcG9ydCBhbmQgdGhlIHNlY29uZCBpcyBhIGZpeGVkIGlucHV0IHBvcnQuCisJCQkgKiBDaGVjaCBmb3Igb3B0b2lzb2xhdGVkIE1FLTQwMDAgdmVyc2lvbi4KKwkJCSAqIElmIG9uZSB0aGUgZmlyc3QgcG9ydCBpcyBhIGZpeGVkIG91dHB1dAorCQkJICogcG9ydCBhbmQgdGhlIHNlY29uZCBpcyBhIGZpeGVkIGlucHV0IHBvcnQuCiAJCQkgKi8KIAkJCWlmICghbWU0MDAwX2lubChkZXYsIGluZm8tPmRpb19jb250ZXh0LmRpcl9yZWcpKQogCQkJCXJldHVybiAtRU5PREVWOwpAQCAtMjEyMSw4ICsyMTUwLDkgQEAKIAl9IGVsc2UgewogCQlpZiAoY2hhbiA8IDgpIHsKIAkJCS8qCi0JCQkgKiBDaGVjaCBmb3Igb3B0b2lzb2xhdGVkIE1FLTQwMDAgdmVyc2lvbi4gSWYgb25lIHRoZSBmaXJzdAotCQkJICogcG9ydCBpcyBhIGZpeGVkIG91dHB1dCBwb3J0IGFuZCB0aGUgc2Vjb25kIGlzIGEgZml4ZWQgaW5wdXQgcG9ydC4KKwkJCSAqIENoZWNoIGZvciBvcHRvaXNvbGF0ZWQgTUUtNDAwMCB2ZXJzaW9uLgorCQkJICogSWYgb25lIHRoZSBmaXJzdCBwb3J0IGlzIGEgZml4ZWQgb3V0cHV0CisJCQkgKiBwb3J0IGFuZCB0aGUgc2Vjb25kIGlzIGEgZml4ZWQgaW5wdXQgcG9ydC4KIAkJCSAqLwogCQkJaWYgKCFtZTQwMDBfaW5sKGRldiwgaW5mby0+ZGlvX2NvbnRleHQuZGlyX3JlZykpCiAJCQkJcmV0dXJuIC1FTk9ERVY7CkBAIC0yMjU3LDcgKzIyODcsOCBAQAogCWNhc2UgR1BDVF9SRVNFVDoKIAkJaWYgKGluc24tPm4gIT0gMSkgewogCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9jbnRfaW5zbl9jb25maWcoKTogSW52YWxpZCBpbnN0cnVjdGlvbiBsZW5ndGglZFxuIiwKKwkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2NudF9pbnNuX2NvbmZpZygpOiAiCisJCQkgICAgICAgIkludmFsaWQgaW5zdHJ1Y3Rpb24gbGVuZ3RoJWRcbiIsCiAJCQkgICAgICAgZGV2LT5taW5vciwgaW5zbi0+bik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtMjI2OSw3ICsyMzAwLDggQEAKIAljYXNlIEdQQ1RfU0VUX09QRVJBVElPTjoKIAkJaWYgKGluc24tPm4gIT0gMikgewogCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9jbnRfaW5zbl9jb25maWcoKTogSW52YWxpZCBpbnN0cnVjdGlvbiBsZW5ndGglZFxuIiwKKwkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2NudF9pbnNuX2NvbmZpZygpOiAiCisJCQkgICAgICAgIkludmFsaWQgaW5zdHJ1Y3Rpb24gbGVuZ3RoJWRcbiIsCiAJCQkgICAgICAgZGV2LT5taW5vciwgaW5zbi0+bik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtMjI4MCw4ICsyMzEyLDggQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2NudF9pbnNuX2NvbmZpZygpOiBJbnZhbGlkIGluc3RydWN0aW9uXG4iLAotCQkgICAgICAgZGV2LT5taW5vcik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2NudF9pbnNuX2NvbmZpZygpOiAiCisJCSAgICAgICAiSW52YWxpZCBpbnN0cnVjdGlvblxuIiwgZGV2LT5taW5vcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMjMwMiw3ICsyMzM0LDggQEAKIAogCWlmIChpbnNuLT5uID4gMSkgewogCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfY250X2luc25fcmVhZCgpOiBJbnZhbGlkIGluc3RydWN0aW9uIGxlbmd0aCAlZFxuIiwKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfY250X2luc25fcmVhZCgpOiAiCisJCSAgICAgICAiSW52YWxpZCBpbnN0cnVjdGlvbiBsZW5ndGggJWRcbiIsCiAJCSAgICAgICBkZXYtPm1pbm9yLCBpbnNuLT5uKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjMyOCw3ICsyMzYxLDggQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2NudF9pbnNuX3JlYWQoKTogSW52YWxpZCBjaGFubmVsICVkXG4iLAorCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9jbnRfaW5zbl9yZWFkKCk6ICIKKwkJICAgICAgICJJbnZhbGlkIGNoYW5uZWwgJWRcbiIsCiAJCSAgICAgICBkZXYtPm1pbm9yLCBpbnNuLT5jaGFuc3BlYyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTIzNDksNyArMjM4Myw4IEBACiAJCXJldHVybiAwOwogCX0gZWxzZSBpZiAoaW5zbi0+biA+IDEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2NudF9pbnNuX3dyaXRlKCk6IEludmFsaWQgaW5zdHJ1Y3Rpb24gbGVuZ3RoICVkXG4iLAorCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9jbnRfaW5zbl93cml0ZSgpOiAiCisJCSAgICAgICAiSW52YWxpZCBpbnN0cnVjdGlvbiBsZW5ndGggJWRcbiIsCiAJCSAgICAgICBkZXYtPm1pbm9yLCBpbnNuLT5uKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjM3NSw3ICsyNDEwLDggQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2NudF9pbnNuX3dyaXRlKCk6IEludmFsaWQgY2hhbm5lbCAlZFxuIiwKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfY250X2luc25fd3JpdGUoKTogIgorCQkgICAgICAgIkludmFsaWQgY2hhbm5lbCAlZFxuIiwKIAkJICAgICAgIGRldi0+bWlub3IsIGluc24tPmNoYW5zcGVjKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjM4Myw0ICsyNDE5LDQ0IEBACiAJcmV0dXJuIDE7CiB9CiAKLUNPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX21lNDAwMCwgbWU0MDAwX3BjaV90YWJsZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBkcml2ZXJfbWU0MDAwX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBkcml2ZXJfbWU0MDAwLmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRyaXZlcl9tZTQwMDBfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyX21lNDAwMF9wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IG1lNDAwMF9wY2lfdGFibGUsCisJLnByb2JlID0gJmRyaXZlcl9tZTQwMDBfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmZHJpdmVyX21lNDAwMF9wY2lfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX21lNDAwMF9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfbWU0MDAwKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRyaXZlcl9tZTQwMDBfcGNpX2RyaXZlci5uYW1lID0gKGNoYXIgKilkcml2ZXJfbWU0MDAwLmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfbWU0MDAwX3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX21lNDAwMF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX21lNDAwMF9wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9tZTQwMDApOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfbWU0MDAwX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9tZTQwMDBfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWVfZGFxLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWVfZGFxLmMKaW5kZXggYzg0ODRhZS4uY2RhNGIyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lX2RhcS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZV9kYXEuYwpAQCAtMjU3LDcgKzI1Nyw0MyBAQAogCS5kZXRhY2ggPSBtZV9kZXRhY2gsCiB9OwogCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKG1lX2RyaXZlciwgbWVfcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1lX2RyaXZlcl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBtZV9kcml2ZXIuZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgbWVfZHJpdmVyX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG1lX2RyaXZlcl9wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IG1lX3BjaV90YWJsZSwKKwkucHJvYmUgPSAmbWVfZHJpdmVyX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJm1lX2RyaXZlcl9wY2lfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgbWVfZHJpdmVyX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJm1lX2RyaXZlcik7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwltZV9kcml2ZXJfcGNpX2RyaXZlci5uYW1lID0gKGNoYXIgKiltZV9kcml2ZXIuZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJm1lX2RyaXZlcl9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG1lX2RyaXZlcl9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbWVfZHJpdmVyX3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmbWVfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobWVfZHJpdmVyX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KG1lX2RyaXZlcl9jbGVhbnVwX21vZHVsZSk7CiAKIC8qIFByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgKi8KIHN0cnVjdCBtZV9wcml2YXRlX2RhdGEgewpAQCAtNjQ0LDcgKzY4MCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgbWVfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldmljZTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldmljZSA9IE5VTEw7CiAJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnN1YmRldmljZTsKIAlzdHJ1Y3QgbWVfYm9hcmQgKmJvYXJkOwogCXJlc291cmNlX3NpemVfdCBwbHhfcmVnYmFzZV90bXA7CkBAIC02NjEsOSArNjk3LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBQcm9iZSB0aGUgZGV2aWNlIHRvIGRldGVybWluZSB3aGF0IGRldmljZSBpbiB0aGUgc2VyaWVzIGl0IGlzLiAqLwotCWZvciAocGNpX2RldmljZSA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOwotCSAgICAgcGNpX2RldmljZSAhPSBOVUxMOwotCSAgICAgcGNpX2RldmljZSA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaV9kZXZpY2UpKSB7CisJZm9yX2VhY2hfcGNpX2RldihwY2lfZGV2aWNlKSB7CiAJCWlmIChwY2lfZGV2aWNlLT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9NRUlMSEFVUykgewogCQkJZm9yIChpID0gMDsgaSA8IG1lX2JvYXJkX25icjsgaSsrKSB7CiAJCQkJaWYgKG1lX2JvYXJkc1tpXS5kZXZpY2VfaWQgPT0KQEAgLTg1NywzICs4OTEsNyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21pdGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9taXRlLmMKaW5kZXggOTlkOTk4NS4uY2QyNWIyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21pdGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWl0ZS5jCkBAIC03MCwxMiArNzAsMTAgQEAKIAogdm9pZCBtaXRlX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXYgPSBOVUxMOwogCXN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZTsKIAotCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7Ci0JICAgICBwY2lkZXYgIT0gTlVMTDsKLQkgICAgIHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaWRldikpIHsKKwlmb3JfZWFjaF9wY2lfZGV2KHBjaWRldikgewogCQlpZiAocGNpZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9OSSkgewogCQkJdW5zaWduZWQgaTsKIApAQCAtODI5LDMgKzgyNyw3IEBACiAJbWl0ZV9jbGVhbnVwKCk7CiB9CiAjZW5kaWYKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21wYzYyNC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21wYzYyNC5jCmluZGV4IDk4NzRhYzMuLmE4OWVlYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tcGM2MjQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbXBjNjI0LmMKQEAgLTQwNiw0ICs0MDYsMTkgQEAKIAlyZXR1cm4gbjsKIH0KIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9tcGM2MjQpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX21wYzYyNF9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfbXBjNjI0KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9tcGM2MjRfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9tcGM2MjQpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfbXBjNjI0X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9tcGM2MjRfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbXBjODI2MGNwbS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21wYzgyNjBjcG0uYwppbmRleCA0NDBhMTQ0Li41ZjY4MTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbXBjODI2MGNwbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tcGM4MjYwY3BtLmMKQEAgLTU2LDcgKzU2LDE4IEBACiAJLmRldGFjaCA9IG1wYzgyNjBjcG1fZGV0YWNoLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9tcGM4MjYwY3BtKTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9tcGM4MjYwY3BtX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9tcGM4MjYwY3BtKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9tcGM4MjYwY3BtX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfbXBjODI2MGNwbSk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9tcGM4MjYwY3BtX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9tcGM4MjYwY3BtX2NsZWFudXBfbW9kdWxlKTsKIAogc3RhdGljIGludCBtcGM4MjYwY3BtX2Rpb19jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAkJCQkgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbXVsdGlxMy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL211bHRpcTMuYwppbmRleCA2YjIyZjBmLi5kYWNlOTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbXVsdGlxMy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tdWx0aXEzLmMKQEAgLTkzLDcgKzkzLDE4IEBACiAJLmRldGFjaCA9IG11bHRpcTNfZGV0YWNoLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9tdWx0aXEzKTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9tdWx0aXEzX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9tdWx0aXEzKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9tdWx0aXEzX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfbXVsdGlxMyk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9tdWx0aXEzX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9tdWx0aXEzX2NsZWFudXBfbW9kdWxlKTsKIAogc3RydWN0IG11bHRpcTNfcHJpdmF0ZSB7CiAJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzJdOwpAQCAtMzM4LDMgKzM0OSw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1MjcuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NTI3LmMKaW5kZXggMWZjNzZjYy4uMTRlNzE2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1MjcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjUyNy5jCkBAIC00OTAsNCArNDkwLDQwIEBACiAJcmV0dXJuIC1FSU87CiB9CiAKLUNPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX25pNjUyNywgbmk2NTI3X3BjaV90YWJsZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBkcml2ZXJfbmk2NTI3X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBkcml2ZXJfbmk2NTI3LmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRyaXZlcl9uaTY1MjdfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyX25pNjUyN19wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IG5pNjUyN19wY2lfdGFibGUsCisJLnByb2JlID0gJmRyaXZlcl9uaTY1MjdfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmZHJpdmVyX25pNjUyN19wY2lfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX25pNjUyN19pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfbmk2NTI3KTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRyaXZlcl9uaTY1MjdfcGNpX2RyaXZlci5uYW1lID0gKGNoYXIgKilkcml2ZXJfbmk2NTI3LmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfbmk2NTI3X3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX25pNjUyN19jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX25pNjUyN19wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9uaTY1MjcpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfbmk2NTI3X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9uaTY1MjdfY2xlYW51cF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1eHguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NXh4LmMKaW5kZXggZDc5M2Y1YS4uOGI4ZTJhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1eHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjV4eC5jCkBAIC04MzQsNCArODM0LDQwIEBACiAJcmV0dXJuIC1FSU87CiB9CiAKLUNPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX25pXzY1eHgsIG5pXzY1eHhfcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9uaV82NXh4X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgZHJpdmVyX25pXzY1eHguZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX25pXzY1eHhfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyX25pXzY1eHhfcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBuaV82NXh4X3BjaV90YWJsZSwKKwkucHJvYmUgPSAmZHJpdmVyX25pXzY1eHhfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmZHJpdmVyX25pXzY1eHhfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9uaV82NXh4X2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9uaV82NXh4KTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRyaXZlcl9uaV82NXh4X3BjaV9kcml2ZXIubmFtZSA9IChjaGFyICopZHJpdmVyX25pXzY1eHguZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9uaV82NXh4X3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX25pXzY1eHhfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9uaV82NXh4X3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX25pXzY1eHgpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfbmlfNjV4eF9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfbmlfNjV4eF9jbGVhbnVwX21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjYweC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY2MHguYwppbmRleCA2YTZmYWU1Li42NjEyYjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjYweC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NjB4LmMKQEAgLTM4Miw3ICszODIsNyBAQAogCUdsb2JhbF9JbnRfRW5hYmxlX0JpdCA9IDB4ODAwMDAwMDAKIH07CiAKLS8qIE9mZnNldCBvZiB0aGUgR1BDVCBjaGlwcyBmcm9tIHRoZSBiYXNlLWFkcmVzcyBvZiB0aGUgY2FyZCAqLworLyogT2Zmc2V0IG9mIHRoZSBHUENUIGNoaXBzIGZyb20gdGhlIGJhc2UtYWRkcmVzcyBvZiB0aGUgY2FyZCAqLwogLyogRmlyc3QgY2hpcCBpcyBhdCBiYXNlLWFkZHJlc3MgKyAweDAwLCBldGMuICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgR1BDVF9PRkZTRVRbMl0gPSB7IDB4MCwgMHg4MDAgfTsKIApAQCAtNDcxLDcgKzQ3MSw0MyBAQAogCS5kZXRhY2ggPSBuaV82NjB4X2RldGFjaCwKIH07CiAKLUNPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX25pXzY2MHgsIG5pXzY2MHhfcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9uaV82NjB4X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgZHJpdmVyX25pXzY2MHguZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX25pXzY2MHhfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyX25pXzY2MHhfcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBuaV82NjB4X3BjaV90YWJsZSwKKwkucHJvYmUgPSAmZHJpdmVyX25pXzY2MHhfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmZHJpdmVyX25pXzY2MHhfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9uaV82NjB4X2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9uaV82NjB4KTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRyaXZlcl9uaV82NjB4X3BjaV9kcml2ZXIubmFtZSA9IChjaGFyICopZHJpdmVyX25pXzY2MHguZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9uaV82NjB4X3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX25pXzY2MHhfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9uaV82NjB4X3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX25pXzY2MHgpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfbmlfNjYweF9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfbmlfNjYweF9jbGVhbnVwX21vZHVsZSk7CiAKIHN0YXRpYyBpbnQgbmlfNjYweF9maW5kX2RldmljZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBpbnQgYnVzLCBpbnQgc2xvdCk7CiBzdGF0aWMgaW50IG5pXzY2MHhfc2V0X3BmaV9yb3V0aW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY3MHguYwppbmRleCA0NGFlODM2Li5lOWYwMzRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmMKQEAgLTEyMCw3ICsxMjAsNDMgQEAKIAkuZGV0YWNoID0gbmlfNjcweF9kZXRhY2gsCiB9OwogCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9uaV82NzB4LCBuaV82NzB4X3BjaV90YWJsZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBkcml2ZXJfbmlfNjcweF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIGRyaXZlcl9uaV82NzB4LmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRyaXZlcl9uaV82NzB4X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9uaV82NzB4X3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gbmlfNjcweF9wY2lfdGFibGUsCisJLnByb2JlID0gJmRyaXZlcl9uaV82NzB4X3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9uaV82NzB4X3BjaV9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfbmlfNjcweF9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfbmlfNjcweCk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfbmlfNjcweF9wY2lfZHJpdmVyLm5hbWUgPSAoY2hhciAqKWRyaXZlcl9uaV82NzB4LmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfbmlfNjcweF9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9uaV82NzB4X2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfbmlfNjcweF9wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9uaV82NzB4KTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX25pXzY3MHhfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX25pXzY3MHhfY2xlYW51cF9tb2R1bGUpOwogCiBzdGF0aWMgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfMF8yMG1BID0geyAxLCB7UkFOR0VfbUEoMCwgMjApfSB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRfYTIxNTAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdF9hMjE1MC5jCmluZGV4IDliZmYzNGMuLmU0NmQ2MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdF9hMjE1MC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdF9hMjE1MC5jCkBAIC0xOTcsNyArMTk3LDE4IEBACiAgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCiAgKiBhcyBuZWNlc3NhcnkuCiAgKi8KLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfYTIxNTApOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2EyMTUwX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9hMjE1MCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfYTIxNTBfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9hMjE1MCk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9hMjE1MF9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfYTIxNTBfY2xlYW51cF9tb2R1bGUpOwogCiAjaWZkZWYgQTIxNTBfREVCVUcKIApAQCAtOTEwLDMgKzkyMSw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0X2FvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRfYW8uYwppbmRleCBjZTYwMjI0Li4xMzhkY2MyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRfYW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRfYW8uYwpAQCAtMTk0LDcgKzE5NCwxOCBAQAogCS5udW1fbmFtZXMgPSBBUlJBWV9TSVpFKGF0YW9fYm9hcmRzKSwKIH07CiAKLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfYXRhbyk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfYXRhb19pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfYXRhbyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfYXRhb19jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2F0YW8pOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfYXRhb19pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfYXRhb19jbGVhbnVwX21vZHVsZSk7CiAKIHN0YXRpYyB2b2lkIGF0YW9fcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CiAKQEAgLTQ1OSwzICs0NzAsNyBAQAogCiAJcmV0dXJuIGluc24tPm47CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdG1pby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0bWlvLmMKaW5kZXggMDAzZDAwYi4uMzMzMGIzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0bWlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0bWlvLmMKQEAgLTM0OSw3ICszNDksMTggQEAKIAkuZGV0YWNoID0gbmlfYXRtaW9fZGV0YWNoLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9hdG1pbyk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfYXRtaW9faW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2F0bWlvKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9hdG1pb19jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2F0bWlvKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2F0bWlvX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9hdG1pb19jbGVhbnVwX21vZHVsZSk7CiAKICNpbmNsdWRlICJuaV9taW9fY29tbW9uLmMiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdG1pbzE2ZC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0bWlvMTZkLmMKaW5kZXggY2Y0ZjI0MS4uMjg1YjkzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0bWlvMTZkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0bWlvMTZkLmMKQEAgLTE1MSw3ICsxNTEsMTggQEAKIAkub2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBhdG1pbzE2X2JvYXJkX3QpLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9hdG1pbzE2ZCk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfYXRtaW8xNmRfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2F0bWlvMTZkKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9hdG1pbzE2ZF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2F0bWlvMTZkKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2F0bWlvMTZkX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9hdG1pbzE2ZF9jbGVhbnVwX21vZHVsZSk7CiAKIC8qIHJhbmdlIHN0cnVjdHMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hdG1pbzE2ZF9haV8xMF9iaXBvbGFyID0geyA0LCB7CkBAIC04ODcsMyArODk4LDcgQEAKIAogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxXzcwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2RhcV83MDAuYwppbmRleCA2ZWM3N2JmLi5jYzE1NjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxXzcwMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9kYXFfNzAwLmMKQEAgLTQ3LDcgKzQ3LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KQEAgLTM3Nyw3ICszNzYsNyBAQAogCQlsaW5rID0gcGNtY2lhX2N1cl9kZXY7CS8qIFhYWCBoYWNrICovCiAJCWlmICghbGluaykKIAkJCXJldHVybiAtRUlPOwotCQlpb2Jhc2UgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisJCWlvYmFzZSA9IGxpbmstPnJlc291cmNlWzBdLT5zdGFydDsKICNpZmRlZiBpbmNvbXBsZXRlCiAJCWlycSA9IGxpbmstPmlycTsKICNlbmRpZgpAQCAtNDU5LDE0ICs0NTgsNiBAQAogICAgbGVzcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLgogKi8KIAotLyoKLSAgIFRoZSBkZXZfaW5mbyB2YXJpYWJsZSBpcyB0aGUgImtleSIgdGhhdCBpcyB1c2VkIHRvIG1hdGNoIHVwIHRoaXMKLSAgIGRldmljZSBkcml2ZXIgd2l0aCBhcHByb3ByaWF0ZSBjYXJkcywgdGhyb3VnaCB0aGUgY2FyZCBjb25maWd1cmF0aW9uCi0gICBkYXRhYmFzZS4KLSovCi0KLXN0YXRpYyBjb25zdCBkZXZfaW5mb190IGRldl9pbmZvID0gIm5pX2RhcV83MDAiOwotCiBzdHJ1Y3QgbG9jYWxfaW5mb190IHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKIAlpbnQgc3RvcDsKQEAgLTUzNyw4ICs1MjgsNyBAQAogCWRpbzcwMF9yZWxlYXNlKGxpbmspOwogCiAJLyogVGhpcyBwb2ludHMgdG8gdGhlIHBhcmVudCBzdHJ1Y3QgbG9jYWxfaW5mb190IHN0cnVjdCAqLwotCWlmIChsaW5rLT5wcml2KQotCQlrZnJlZShsaW5rLT5wcml2KTsKKwlrZnJlZShsaW5rLT5wcml2KTsKIAogfQkJCQkvKiBkaW83MDBfY3NfZGV0YWNoICovCiAKQEAgLTU1Niw5ICs1NDYsNiBAQAogCQkJCXVuc2lnbmVkIGludCB2Y2MsCiAJCQkJdm9pZCAqcHJpdl9kYXRhKQogewotCXdpbl9yZXFfdCAqcmVxID0gcHJpdl9kYXRhOwotCW1lbXJlcV90IG1hcDsKLQogCWlmIChjZmctPmluZGV4ID09IDApCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC01NzIsNDQgKzU1OSwyNSBAQAogCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROwogCiAJLyogSU8gd2luZG93IHNldHRpbmdzICovCi0JcF9kZXYtPmlvLk51bVBvcnRzMSA9IHBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOworCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gcF9kZXYtPnJlc291cmNlWzFdLT5lbmQgPSAwOwogCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQtPmlvLm53aW4gPiAwKSkgewogCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQtPmlvOwotCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQotCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OwotCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQotCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOwotCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCXBfZGV2LT5pb19saW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzICY9IH5JT19EQVRBX1BBVEhfV0lEVEg7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0KKwkJCXBjbWNpYV9pb19jZmdfZGF0YV93aWR0aChpby0+ZmxhZ3MpOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gaW8tPndpblswXS5iYXNlOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmVuZCA9IGlvLT53aW5bMF0ubGVuOwogCQlpZiAoaW8tPm53aW4gPiAxKSB7Ci0JCQlwX2Rldi0+aW8uQXR0cmlidXRlczIgPSBwX2Rldi0+aW8uQXR0cmlidXRlczE7Ci0JCQlwX2Rldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOwotCQkJcF9kZXYtPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOworCQkJcF9kZXYtPnJlc291cmNlWzFdLT5mbGFncyA9IHBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3M7CisJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPnN0YXJ0ID0gaW8tPndpblsxXS5iYXNlOworCQkJcF9kZXYtPnJlc291cmNlWzFdLT5lbmQgPSBpby0+d2luWzFdLmxlbjsKIAkJfQogCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLwotCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pICE9IDApCisJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwX2RldikgIT0gMCkKIAkJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWlmICgoY2ZnLT5tZW0ubndpbiA+IDApIHx8IChkZmx0LT5tZW0ubndpbiA+IDApKSB7Ci0JCWNpc3RwbF9tZW1fdCAqbWVtID0KLQkJCShjZmctPm1lbS5ud2luKSA/ICZjZmctPm1lbSA6ICZkZmx0LT5tZW07Ci0JCXJlcS0+QXR0cmlidXRlcyA9IFdJTl9EQVRBX1dJRFRIXzE2IHwgV0lOX01FTU9SWV9UWVBFX0NNOwotCQlyZXEtPkF0dHJpYnV0ZXMgfD0gV0lOX0VOQUJMRTsKLQkJcmVxLT5CYXNlID0gbWVtLT53aW5bMF0uaG9zdF9hZGRyOwotCQlyZXEtPlNpemUgPSBtZW0tPndpblswXS5sZW47Ci0JCWlmIChyZXEtPlNpemUgPCAweDEwMDApCi0JCQlyZXEtPlNpemUgPSAweDEwMDA7Ci0JCXJlcS0+QWNjZXNzU3BlZWQgPSAwOwotCQlpZiAocGNtY2lhX3JlcXVlc3Rfd2luZG93KHBfZGV2LCByZXEsICZwX2Rldi0+d2luKSkKLQkJCXJldHVybiAtRU5PREVWOwotCQltYXAuUGFnZSA9IDA7Ci0JCW1hcC5DYXJkT2Zmc2V0ID0gbWVtLT53aW5bMF0uY2FyZF9hZGRyOwotCQlpZiAocGNtY2lhX21hcF9tZW1fcGFnZShwX2RldiwgcF9kZXYtPndpbiwgJm1hcCkpCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQl9CiAJLyogSWYgd2UgZ290IHRoaXMgZmFyLCB3ZSdyZSBjb29sISAqLwogCXJldHVybiAwOwogfQpAQCAtNjIzLDcgKzU5MSw3IEBACiAKIAlkZXZfZGJnKCZsaW5rLT5kZXYsICJkaW83MDBfY29uZmlnXG4iKTsKIAotCXJldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBkaW83MDBfcGNtY2lhX2NvbmZpZ19sb29wLCAmcmVxKTsKKwlyZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgZGlvNzAwX3BjbWNpYV9jb25maWdfbG9vcCwgTlVMTCk7CiAJaWYgKHJldCkgewogCQlkZXZfd2FybigmbGluay0+ZGV2LCAibm8gY29uZmlndXJhdGlvbiBmb3VuZFxuIik7CiAJCWdvdG8gZmFpbGVkOwpAQCAtNjQ1LDE1ICs2MTMsMTAgQEAKIAlkZXZfaW5mbygmbGluay0+ZGV2LCAiaW5kZXggMHglMDJ4IiwgbGluay0+Y29uZi5Db25maWdJbmRleCk7CiAJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkKIAkJcHJpbnRrKCIsIGlycSAlZCIsIGxpbmstPmlycSk7Ci0JaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKLQkJcHJpbnRrKCIsIGlvIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDEsCi0JCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDEgKyBsaW5rLT5pby5OdW1Qb3J0czEgLSAxKTsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMyKQotCQlwcmludGsoIiAmIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDIsCi0JCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDIgKyBsaW5rLT5pby5OdW1Qb3J0czIgLSAxKTsKLQlpZiAobGluay0+d2luKQotCQlwcmludGsoIiwgbWVtIDB4JTA2bHgtMHglMDZseCIsIHJlcS5CYXNlLAotCQkgICAgICAgcmVxLkJhc2UgKyByZXEuU2l6ZSAtIDEpOworCWlmIChsaW5rLT5yZXNvdXJjZVswXSkKKwkJcHJpbnRrKCIsIGlvICVwUiIsIGxpbmstPnJlc291cmNlWzBdKTsKKwlpZiAobGluay0+cmVzb3VyY2VbMV0pCisJCXByaW50aygiICYgJXBSIiwgbGluay0+cmVzb3VyY2VbMV0pOwogCXByaW50aygiXG4iKTsKIAogCXJldHVybjsKQEAgLTcyMyw3ICs2ODYsNyBAQAogCS5pZF90YWJsZSA9IGRpbzcwMF9jc19pZHMsCiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmRydiA9IHsKLQkJLm5hbWUgPSBkZXZfaW5mbywKKwkJLm5hbWUgPSAibmlfZGFxXzcwMCIsCiAJCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxX2RpbzI0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxX2RpbzI0LmMKaW5kZXggZTQ4NjViMS4uNzczYWUyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2RhcV9kaW8yNC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9kYXFfZGlvMjQuYwpAQCAtNDgsNyArNDgsNiBAQAogCiAjaW5jbHVkZSAiODI1NS5oIgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KQEAgLTEyOSw3ICsxMjgsNyBAQAogCQlsaW5rID0gcGNtY2lhX2N1cl9kZXY7CS8qIFhYWCBoYWNrICovCiAJCWlmICghbGluaykKIAkJCXJldHVybiAtRUlPOwotCQlpb2Jhc2UgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisJCWlvYmFzZSA9IGxpbmstPnJlc291cmNlWzBdLT5zdGFydDsKICNpZmRlZiBpbmNvbXBsZXRlCiAJCWlycSA9IGxpbmstPmlycTsKICNlbmRpZgpAQCAtMjExLDE0ICsyMTAsNiBAQAogICAgbGVzcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLgogKi8KIAotLyoKLSAgIFRoZSBkZXZfaW5mbyB2YXJpYWJsZSBpcyB0aGUgImtleSIgdGhhdCBpcyB1c2VkIHRvIG1hdGNoIHVwIHRoaXMKLSAgIGRldmljZSBkcml2ZXIgd2l0aCBhcHByb3ByaWF0ZSBjYXJkcywgdGhyb3VnaCB0aGUgY2FyZCBjb25maWd1cmF0aW9uCi0gICBkYXRhYmFzZS4KLSovCi0KLXN0YXRpYyBjb25zdCBkZXZfaW5mb190IGRldl9pbmZvID0gIm5pX2RhcV9kaW8yNCI7Ci0KIHN0cnVjdCBsb2NhbF9pbmZvX3QgewogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOwogCWludCBzdG9wOwpAQCAtMjg5LDggKzI4MCw3IEBACiAJZGlvMjRfcmVsZWFzZShsaW5rKTsKIAogCS8qIFRoaXMgcG9pbnRzIHRvIHRoZSBwYXJlbnQgbG9jYWxfaW5mb190IHN0cnVjdCAqLwotCWlmIChsaW5rLT5wcml2KQotCQlrZnJlZShsaW5rLT5wcml2KTsKKwlrZnJlZShsaW5rLT5wcml2KTsKIAogfQkJCQkvKiBkaW8yNF9jc19kZXRhY2ggKi8KIApAQCAtMzA4LDkgKzI5OCw2IEBACiAJCQkJdW5zaWduZWQgaW50IHZjYywKIAkJCQl2b2lkICpwcml2X2RhdGEpCiB7Ci0Jd2luX3JlcV90ICpyZXEgPSBwcml2X2RhdGE7Ci0JbWVtcmVxX3QgbWFwOwotCiAJaWYgKGNmZy0+aW5kZXggPT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTMyNCw0NCArMzExLDI1IEBACiAJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7CiAKIAkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KLQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gcF9kZXYtPmlvLk51bVBvcnRzMiA9IDA7CisJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA9IDA7CiAJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC0+aW8ubndpbiA+IDApKSB7CiAJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC0+aW87Ci0JCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCi0JCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7Ci0JCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCi0JCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7Ci0JCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKKwkJcF9kZXYtPmlvX2xpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgJj0gfklPX0RBVEFfUEFUSF9XSURUSDsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyB8PQorCQkJcGNtY2lhX2lvX2NmZ19kYXRhX3dpZHRoKGlvLT5mbGFncyk7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBpby0+d2luWzBdLmJhc2U7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gaW8tPndpblswXS5sZW47CiAJCWlmIChpby0+bndpbiA+IDEpIHsKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMiA9IHBfZGV2LT5pby5BdHRyaWJ1dGVzMTsKLQkJCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7Ci0JCQlwX2Rldi0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPmZsYWdzID0gcF9kZXYtPnJlc291cmNlWzBdLT5mbGFnczsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+c3RhcnQgPSBpby0+d2luWzFdLmJhc2U7CisJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA9IGlvLT53aW5bMV0ubGVuOwogCQl9CiAJCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCi0JCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbykgIT0gMCkKKwkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2KSAhPSAwKQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaWYgKChjZmctPm1lbS5ud2luID4gMCkgfHwgKGRmbHQtPm1lbS5ud2luID4gMCkpIHsKLQkJY2lzdHBsX21lbV90ICptZW0gPQotCQkJKGNmZy0+bWVtLm53aW4pID8gJmNmZy0+bWVtIDogJmRmbHQtPm1lbTsKLQkJcmVxLT5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfMTYgfCBXSU5fTUVNT1JZX1RZUEVfQ007Ci0JCXJlcS0+QXR0cmlidXRlcyB8PSBXSU5fRU5BQkxFOwotCQlyZXEtPkJhc2UgPSBtZW0tPndpblswXS5ob3N0X2FkZHI7Ci0JCXJlcS0+U2l6ZSA9IG1lbS0+d2luWzBdLmxlbjsKLQkJaWYgKHJlcS0+U2l6ZSA8IDB4MTAwMCkKLQkJCXJlcS0+U2l6ZSA9IDB4MTAwMDsKLQkJcmVxLT5BY2Nlc3NTcGVlZCA9IDA7Ci0JCWlmIChwY21jaWFfcmVxdWVzdF93aW5kb3cocF9kZXYsIHJlcSwgJnBfZGV2LT53aW4pKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCW1hcC5QYWdlID0gMDsKLQkJbWFwLkNhcmRPZmZzZXQgPSBtZW0tPndpblswXS5jYXJkX2FkZHI7Ci0JCWlmIChwY21jaWFfbWFwX21lbV9wYWdlKHBfZGV2LCBwX2Rldi0+d2luLCAmbWFwKSkKLQkJCXJldHVybiAtRU5PREVWOwotCX0KIAkvKiBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGNvb2whICovCiAJcmV0dXJuIDA7CiB9CkBAIC0zNjksMTMgKzMzNywxMiBAQAogc3RhdGljIHZvaWQgZGlvMjRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCWludCByZXQ7Ci0Jd2luX3JlcV90IHJlcTsKIAogCXByaW50ayhLRVJOX0lORk8gIm5pX2RhcV9kaW8yNDogSE9MQSBTT1kgWU8hIC0gY29uZmlnXG4iKTsKIAogCWRldl9kYmcoJmxpbmstPmRldiwgImRpbzI0X2NvbmZpZ1xuIik7CiAKLQlyZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgZGlvMjRfcGNtY2lhX2NvbmZpZ19sb29wLCAmcmVxKTsKKwlyZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgZGlvMjRfcGNtY2lhX2NvbmZpZ19sb29wLCBOVUxMKTsKIAlpZiAocmV0KSB7CiAJCWRldl93YXJuKCZsaW5rLT5kZXYsICJubyBjb25maWd1cmF0aW9uIGZvdW5kXG4iKTsKIAkJZ290byBmYWlsZWQ7CkBAIC0zOTcsMTUgKzM2NCwxMCBAQAogCWRldl9pbmZvKCZsaW5rLT5kZXYsICJpbmRleCAweCUwMngiLCBsaW5rLT5jb25mLkNvbmZpZ0luZGV4KTsKIAlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQogCQlwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxKTsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMxKQotCQlwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKLQkJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MSArIGxpbmstPmlvLk51bVBvcnRzMSAtIDEpOwotCWlmIChsaW5rLT5pby5OdW1Qb3J0czIpCi0JCXByaW50aygiICYgMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MiwKLQkJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MiArIGxpbmstPmlvLk51bVBvcnRzMiAtIDEpOwotCWlmIChsaW5rLT53aW4pCi0JCXByaW50aygiLCBtZW0gMHglMDZseC0weCUwNmx4IiwgcmVxLkJhc2UsCi0JCSAgICAgICByZXEuQmFzZSArIHJlcS5TaXplIC0gMSk7CisJaWYgKGxpbmstPnJlc291cmNlWzBdKQorCQlwcmludGsoIiAmICVwUiIsIGxpbmstPnJlc291cmNlWzBdKTsKKwlpZiAobGluay0+cmVzb3VyY2VbMV0pCisJCXByaW50aygiICYgJXBSIiwgbGluay0+cmVzb3VyY2VbMV0pOwogCXByaW50aygiXG4iKTsKIAogCXJldHVybjsKQEAgLTQ3NCw3ICs0MzYsNyBAQAogCS5pZF90YWJsZSA9IGRpbzI0X2NzX2lkcywKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuZHJ2ID0gewotCQkubmFtZSA9IGRldl9pbmZvLAorCQkubmFtZSA9ICJuaV9kYXFfZGlvMjQiLAogCQl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYwppbmRleCA2N2M4YTUzLi4zYWNmN2U2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYwpAQCAtNTI2LDcgKzUyNiw4IEBACiAJdW5zaWduZWQgbG9uZyBkbWFfZmxhZ3MsIGlzcl9mbGFnczsKIAlzaG9ydCBsc2IsIG1zYjsKIAotCXByaW50aygiY29tZWRpJWQ6IG5pX2xhYnBjOiAlcywgaW8gMHglbHgiLCBkZXYtPm1pbm9yLCB0aGlzYm9hcmQtPm5hbWUsCisJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogbmlfbGFicGM6ICVzLCBpbyAweCVseCIsIGRldi0+bWlub3IsCisJCQkJCQkJCXRoaXNib2FyZC0+bmFtZSwKIAkgICAgICAgaW9iYXNlKTsKIAlpZiAoaXJxKQogCQlwcmludGsoIiwgaXJxICV1IiwgaXJxKTsKQEAgLTU0Myw3ICs1NDQsNyBAQAogCQkvKiBjaGVjayBpZiBpbyBhZGRyZXNzZXMgYXJlIGF2YWlsYWJsZSAqLwogCQlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgTEFCUENfU0laRSwKIAkJCQkgICAgZHJpdmVyX2xhYnBjLmRyaXZlcl9uYW1lKSkgewotCQkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CiAJfQpAQCAtNTc1LDcgKzU3Niw3IEBACiAJCQlpc3JfZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CiAJCWlmIChyZXF1ZXN0X2lycShpcnEsIGxhYnBjX2ludGVycnVwdCwgaXNyX2ZsYWdzLAogCQkJCWRyaXZlcl9sYWJwYy5kcml2ZXJfbmFtZSwgZGV2KSkgewotCQkJcHJpbnRrKCJ1bmFibGUgdG8gYWxsb2NhdGUgaXJxICV1XG4iLCBpcnEpOworCQkJcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gYWxsb2NhdGUgaXJxICV1XG4iLCBpcnEpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CkBAIC01ODMsMTggKzU4NCwxOCBAQAogCiAJLyogZ3JhYiBkbWEgY2hhbm5lbCAqLwogCWlmIChkbWFfY2hhbiA+IDMpIHsKLQkJcHJpbnRrKCIgaW52YWxpZCBkbWEgY2hhbm5lbCAldVxuIiwgZG1hX2NoYW4pOworCQlwcmludGsoS0VSTl9FUlIgIiBpbnZhbGlkIGRtYSBjaGFubmVsICV1XG4iLCBkbWFfY2hhbik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0gZWxzZSBpZiAoZG1hX2NoYW4pIHsKIAkJLyogYWxsb2NhdGUgZG1hIGJ1ZmZlciAqLwogCQlkZXZwcml2LT5kbWFfYnVmZmVyID0KIAkJICAgIGttYWxsb2MoZG1hX2J1ZmZlcl9zaXplLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJCWlmIChkZXZwcml2LT5kbWFfYnVmZmVyID09IE5VTEwpIHsKLQkJCXByaW50aygiIGZhaWxlZCB0byBhbGxvY2F0ZSBkbWEgYnVmZmVyXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiIGZhaWxlZCB0byBhbGxvY2F0ZSBkbWEgYnVmZmVyXG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCWlmIChyZXF1ZXN0X2RtYShkbWFfY2hhbiwgZHJpdmVyX2xhYnBjLmRyaXZlcl9uYW1lKSkgewotCQkJcHJpbnRrKCIgZmFpbGVkIHRvIGFsbG9jYXRlIGRtYSBjaGFubmVsICV1XG4iLAorCQkJcHJpbnRrKEtFUk5fRVJSICIgZmFpbGVkIHRvIGFsbG9jYXRlIGRtYSBjaGFubmVsICV1XG4iLAogCQkJICAgICAgIGRtYV9jaGFuKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC02OTAsNyArNjkxLDcgQEAKIAkJZm9yIChpID0gMDsgaSA8IEVFUFJPTV9TSVpFOyBpKyspCiAJCQlkZXZwcml2LT5lZXByb21fZGF0YVtpXSA9IGxhYnBjX2VlcHJvbV9yZWFkKGRldiwgaSk7CiAjaWZkZWYgTEFCUENfREVCVUcKLQkJcHJpbnRrKCIgZWVwcm9tOiIpOworCQlwcmludGsoS0VSTl9FUlIgIiBlZXByb206Iik7CiAJCWZvciAoaSA9IDA7IGkgPCBFRVBST01fU0laRTsgaSsrKQogCQkJcHJpbnRrKCIgJWk6MHgleCAiLCBpLCBkZXZwcml2LT5lZXByb21fZGF0YVtpXSk7CiAJCXByaW50aygiXG4iKTsKQEAgLTczMiw3ICs3MzMsOCBAQAogCQlpb2Jhc2UgPSAodW5zaWduZWQgbG9uZylkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkcjsKIAkJaXJxID0gbWl0ZV9pcnEoZGV2cHJpdi0+bWl0ZSk7CiAjZWxzZQotCQlwcmludGsoIiB0aGlzIGRyaXZlciBoYXMgbm90IGJlZW4gYnVpbHQgd2l0aCBQQ0kgc3VwcG9ydC5cbiIpOworCQlwcmludGsoS0VSTl9FUlIgIiB0aGlzIGRyaXZlciBoYXMgbm90IGJlZW4gYnVpbHQgd2l0aCBQQ0kgIgorCQkJCQkJCQkic3VwcG9ydC5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKICNlbmRpZgogCQlicmVhazsKQEAgLTc0Miw3ICs3NDQsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKCJidWchIGNvdWxkbid0IGRldGVybWluZSBib2FyZCB0eXBlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJidWchIGNvdWxkbid0IGRldGVybWluZSBib2FyZCB0eXBlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJCWJyZWFrOwogCX0KQEAgLTc3Niw3ICs3NzgsNyBAQAogCQkJfQogCQl9CiAJfQotCXByaW50aygibm8gZGV2aWNlIGZvdW5kXG4iKTsKKwlwcmludGsoS0VSTl9FUlIgIm5vIGRldmljZSBmb3VuZFxuIik7CiAJbWl0ZV9saXN0X2RldmljZXMoKTsKIAlyZXR1cm4gLUVJTzsKIH0KQEAgLTc4NCw3ICs3ODYsNyBAQAogCiBpbnQgbGFicGNfY29tbW9uX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewotCXByaW50aygiY29tZWRpJWQ6IG5pX2xhYnBjOiBkZXRhY2hcbiIsIGRldi0+bWlub3IpOworCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IG5pX2xhYnBjOiBkZXRhY2hcbiIsIGRldi0+bWlub3IpOwogCiAJaWYgKGRldi0+c3ViZGV2aWNlcykKIAkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDIpOwpAQCAtODQ2LDcgKzg0OCw3IEBACiAJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFswXSkgPiBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMV0pKQogCQlyZXR1cm4gTU9ERV9NVUxUX0NIQU5fRE9XTjsKIAotCXByaW50aygibmlfbGFicGM6IGJ1ZyEgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuXG4iKTsKKwlwcmludGsoS0VSTl9FUlIgIm5pX2xhYnBjOiBidWchIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlblxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTkwMiw3ICs5MDQsNyBAQAogCQkJfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoIm5pX2xhYnBjOiBidWchIGluIGNoYW5saXN0IGNoZWNrXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAibmlfbGFicGM6IGJ1ZyEgaW4gY2hhbmxpc3QgY2hlY2tcbiIpOwogCQkJcmV0dXJuIDE7CiAJCQlicmVhazsKIAkJfQpAQCAtMTA5Niw3ICsxMDk4LDEwIEBACiAJCQllcnIrKzsKIAkJfQogCQlicmVhazsKLQkJLyogIFRSSUdfRVhUIGRvZXNuJ3QgY2FyZSBzaW5jZSBpdCBkb2Vzbid0IHRyaWdnZXIgb2ZmIGEgbnVtYmVyZWQgY2hhbm5lbCAqLworCQkvKgorCQkgKiBUUklHX0VYVCBkb2Vzbid0IGNhcmUgc2luY2UgaXQgZG9lc24ndAorCQkgKiB0cmlnZ2VyIG9mZiBhIG51bWJlcmVkIGNoYW5uZWwKKwkJICovCiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtMTE1NCwyNSArMTE1OSwzNSBAQAogCiAJLyogIHNldHVwIGhhcmR3YXJlIGNvbnZlcnNpb24gY291bnRlciAqLwogCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfRVhUKSB7Ci0JCS8qICBsb2FkIGNvdW50ZXIgYTEgd2l0aCBjb3VudCBvZiAzIChwYysgbWFudWFsIHNheXMgdGhpcyBpcyBtaW5pbXVtIGFsbG93ZWQpIHVzaW5nIG1vZGUgMCAqLworCQkvKgorCQkgKiBsb2FkIGNvdW50ZXIgYTEgd2l0aCBjb3VudCBvZiAzCisJCSAqIChwYysgbWFudWFsIHNheXMgdGhpcyBpcyBtaW5pbXVtIGFsbG93ZWQpIHVzaW5nIG1vZGUgMAorCQkgKi8KIAkJcmV0ID0gbGFicGNfY291bnRlcl9sb2FkKGRldiwgZGV2LT5pb2Jhc2UgKyBDT1VOVEVSX0FfQkFTRV9SRUcsCiAJCQkJCSAxLCAzLCAwKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWNvbWVkaV9lcnJvcihkZXYsICJlcnJvciBsb2FkaW5nIGNvdW50ZXIgYTEiKTsKIAkJCXJldHVybiAtMTsKIAkJfQotCX0gZWxzZQkJCS8qICBvdGhlcndpc2UsIGp1c3QgcHV0IGExIGluIG1vZGUgMCB3aXRoIG5vIGNvdW50IHRvIHNldCBpdHMgb3V0cHV0IGxvdyAqLworCX0gZWxzZQkJCS8qCisJCQkJICogb3RoZXJ3aXNlLCBqdXN0IHB1dCBhMSBpbiBtb2RlIDAKKwkJCQkgKiB3aXRoIG5vIGNvdW50IHRvIHNldCBpdHMgb3V0cHV0IGxvdworCQkJCSAqLwogCQlkZXZwcml2LT53cml0ZV9ieXRlKElOSVRfQTFfQklUUywKIAkJCQkgICAgZGV2LT5pb2Jhc2UgKyBDT1VOVEVSX0FfQ09OVFJPTF9SRUcpOwogCiAJLyogIGZpZ3VyZSBvdXQgd2hhdCBtZXRob2Qgd2Ugd2lsbCB1c2UgdG8gdHJhbnNmZXIgZGF0YSAqLwogCWlmIChkZXZwcml2LT5kbWFfY2hhbiAmJgkvKiAgbmVlZCBhIGRtYSBjaGFubmVsIGFsbG9jYXRlZCAqLwotCSAgICAvKiAgZG1hIHVuc2FmZSBhdCBSVCBwcmlvcml0eSwgYW5kIHRvbyBtdWNoIHNldHVwIHRpbWUgZm9yIFRSSUdfV0FLRV9FT1MgZm9yICovCisJCS8qCisJCSAqIGRtYSB1bnNhZmUgYXQgUlQgcHJpb3JpdHksCisJCSAqIGFuZCB0b28gbXVjaCBzZXR1cCB0aW1lIGZvciBUUklHX1dBS0VfRU9TIGZvcgorCQkgKi8KIAkgICAgKGNtZC0+ZmxhZ3MgJiAoVFJJR19XQUtFX0VPUyB8IFRSSUdfUlQpKSA9PSAwICYmCiAJICAgIC8qICBvbmx5IGF2YWlsYWJsZSBvbiB0aGUgaXNhIGJvYXJkcyAqLwogCSAgICB0aGlzYm9hcmQtPmJ1c3R5cGUgPT0gaXNhX2J1c3R5cGUpIHsKIAkJeGZlciA9IGlzYV9kbWFfdHJhbnNmZXI7Ci0JfSBlbHNlIGlmICh0aGlzYm9hcmQtPnJlZ2lzdGVyX2xheW91dCA9PSBsYWJwY18xMjAwX2xheW91dCAmJgkvKiAgcGMtcGx1cyBoYXMgbm8gZmlmby1oYWxmIGZ1bGwgaW50ZXJydXB0ICovCisJCS8qIHBjLXBsdXMgaGFzIG5vIGZpZm8taGFsZiBmdWxsIGludGVycnVwdCAqLworCX0gZWxzZSBpZiAodGhpc2JvYXJkLT5yZWdpc3Rlcl9sYXlvdXQgPT0gbGFicGNfMTIwMF9sYXlvdXQgJiYKIAkJICAgLyogIHdha2UtZW5kLW9mLXNjYW4gc2hvdWxkIGludGVycnVwdCBvbiBmaWZvIG5vdCBlbXB0eSAqLwogCQkgICAoY21kLT5mbGFncyAmIFRSSUdfV0FLRV9FT1MpID09IDAgJiYKIAkJICAgLyogIG1ha2Ugc3VyZSB3ZSBhcmUgdGFraW5nIG1vcmUgdGhhbiBqdXN0IGEgZmV3IHBvaW50cyAqLwpAQCAtMTYxOSw3ICsxNjM0LDEwIEBACiAJCWRldnByaXYtPmNvbW1hbmQ0X2JpdHMgfD0gQURDX0RJRkZfQklUOwogCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDRfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5ENF9SRUcpOwogCi0JLyogaW5pdGlhbGl6ZSBwYWNlciBjb3VudGVyIG91dHB1dCB0byBtYWtlIHN1cmUgaXQgZG9lc24ndCBjYXVzZSBhbnkgcHJvYmxlbXMgKi8KKwkvKgorCSAqIGluaXRpYWxpemUgcGFjZXIgY291bnRlciBvdXRwdXQgdG8gbWFrZSBzdXJlIGl0IGRvZXNuJ3QKKwkgKiBjYXVzZSBhbnkgcHJvYmxlbXMKKwkgKi8KIAlkZXZwcml2LT53cml0ZV9ieXRlKElOSVRfQTBfQklUUywgZGV2LT5pb2Jhc2UgKyBDT1VOVEVSX0FfQ09OVFJPTF9SRUcpOwogCiAJbGFicGNfY2xlYXJfYWRjX2ZpZm8oZGV2KTsKQEAgLTE4NDQsNyArMTg2MiwxMCBAQAogCQl1bnNpZ25lZCBpbnQgc2Nhbl9wZXJpb2Q7CiAKIAkJc2Nhbl9wZXJpb2QgPSBsYWJwY19haV9zY2FuX3BlcmlvZChjbWQpOwotCQkvKiBjYWxjdWxhdGUgY2FzY2FkZWQgY291bnRlciB2YWx1ZXMgdGhhdCBnaXZlIGRlc2lyZWQgc2NhbiB0aW1pbmcgKi8KKwkJLyoKKwkJICogY2FsY3VsYXRlIGNhc2NhZGVkIGNvdW50ZXIgdmFsdWVzCisJCSAqIHRoYXQgZ2l2ZSBkZXNpcmVkIHNjYW4gdGltaW5nCisJCSAqLwogCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYoTEFCUENfVElNRVJfQkFTRSwKIAkJCQkJICAgICAgICYoZGV2cHJpdi0+ZGl2aXNvcl9iMSksCiAJCQkJCSAgICAgICAmKGRldnByaXYtPmRpdmlzb3JfYjApLApAQCAtMTg1NSw3ICsxODc2LDEwIEBACiAJCXVuc2lnbmVkIGludCBjb252ZXJ0X3BlcmlvZDsKIAogCQljb252ZXJ0X3BlcmlvZCA9IGxhYnBjX2FpX2NvbnZlcnRfcGVyaW9kKGNtZCk7Ci0JCS8qIGNhbGN1bGF0ZSBjYXNjYWRlZCBjb3VudGVyIHZhbHVlcyB0aGF0IGdpdmUgZGVzaXJlZCBjb252ZXJzaW9uIHRpbWluZyAqLworCQkvKgorCQkgKiBjYWxjdWxhdGUgY2FzY2FkZWQgY291bnRlciB2YWx1ZXMKKwkJICogdGhhdCBnaXZlIGRlc2lyZWQgY29udmVyc2lvbiB0aW1pbmcKKwkJICovCiAJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihMQUJQQ19USU1FUl9CQVNFLAogCQkJCQkgICAgICAgJihkZXZwcml2LT5kaXZpc29yX2EwKSwKIAkJCQkJICAgICAgICYoZGV2cHJpdi0+ZGl2aXNvcl9iMCksCkBAIC0yMDc2LDkgKzIxMDAsNTYgQEAKIH0KIAogI2lmZGVmIENPTkZJR19DT01FRElfUENJCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9sYWJwYywgbGFicGNfcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9sYWJwY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBkcml2ZXJfbGFicGMuZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX2xhYnBjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9sYWJwY19wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IGxhYnBjX3BjaV90YWJsZSwKKwkucHJvYmUgPSAmZHJpdmVyX2xhYnBjX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9sYWJwY19wY2lfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2xhYnBjX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9sYWJwYyk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfbGFicGNfcGNpX2RyaXZlci5uYW1lID0gKGNoYXIgKilkcml2ZXJfbGFicGMuZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9sYWJwY19wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9sYWJwY19jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2xhYnBjX3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2xhYnBjKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2xhYnBjX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9sYWJwY19jbGVhbnVwX21vZHVsZSk7CiAjZWxzZQotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9sYWJwYyk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfbGFicGNfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2xhYnBjKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9sYWJwY19jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2xhYnBjKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2xhYnBjX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9sYWJwY19jbGVhbnVwX21vZHVsZSk7CiAjZW5kaWYKIAogRVhQT1JUX1NZTUJPTF9HUEwobGFicGNfY29tbW9uX2F0dGFjaCk7CkBAIC0yMDg2LDMgKzIxNTcsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwocmFuZ2VfbGFicGNfMTIwMF9haSk7CiBFWFBPUlRfU1lNQk9MX0dQTChsYWJwY18xMjAwX2FpX2dhaW5fYml0cyk7CiBFWFBPUlRfU1lNQk9MX0dQTChsYWJwY18xMjAwX2lzX3VuaXBvbGFyKTsKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjX2NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGNfY3MuYwppbmRleCAxNjMyNDVlLi42OGM0ZWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGNfY3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGNfY3MuYwpAQCAtNzEsNyArNzEsNiBAQAogI2luY2x1ZGUgImNvbWVkaV9mYy5oIgogI2luY2x1ZGUgIm5pX2xhYnBjLmgiCiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgpAQCAtMTQzLDcgKzE0Miw3IEBACiAJCWxpbmsgPSBwY21jaWFfY3VyX2RldjsJLyogWFhYIGhhY2sgKi8KIAkJaWYgKCFsaW5rKQogCQkJcmV0dXJuIC1FSU87Ci0JCWlvYmFzZSA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKwkJaW9iYXNlID0gbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCQlpcnEgPSBsaW5rLT5pcnE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xODksMTQgKzE4OCw2IEBACiAgICBsZXNzIG9uIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuCiAqLwogCi0vKgotICAgVGhlIGRldl9pbmZvIHZhcmlhYmxlIGlzIHRoZSAia2V5IiB0aGF0IGlzIHVzZWQgdG8gbWF0Y2ggdXAgdGhpcwotICAgZGV2aWNlIGRyaXZlciB3aXRoIGFwcHJvcHJpYXRlIGNhcmRzLCB0aHJvdWdoIHRoZSBjYXJkIGNvbmZpZ3VyYXRpb24KLSAgIGRhdGFiYXNlLgotKi8KLQotc3RhdGljIGNvbnN0IGRldl9pbmZvX3QgZGV2X2luZm8gPSAiZGFxY2FyZC0xMjAwIjsKLQogc3RydWN0IGxvY2FsX2luZm9fdCB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CiAJaW50IHN0b3A7CkBAIC0yODYsOSArMjc3LDYgQEAKIAkJCQl1bnNpZ25lZCBpbnQgdmNjLAogCQkJCXZvaWQgKnByaXZfZGF0YSkKIHsKLQl3aW5fcmVxX3QgKnJlcSA9IHByaXZfZGF0YTsKLQltZW1yZXFfdCBtYXA7Ci0KIAlpZiAoY2ZnLT5pbmRleCA9PSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtMzAyLDQ0ICsyOTAsMjUgQEAKIAlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUSB8IENPTkZfRU5BQkxFX1BVTFNFX0lSUTsKIAogCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLwotCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwlwX2Rldi0+cmVzb3VyY2VbMF0tPmVuZCA9IHBfZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gMDsKIAlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKIAkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKLQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKLQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKLQkJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQlwX2Rldi0+aW9fbGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyAmPSB+SU9fREFUQV9QQVRIX1dJRFRIOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9CisJCQlwY21jaWFfaW9fY2ZnX2RhdGFfd2lkdGgoaW8tPmZsYWdzKTsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGlvLT53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBpby0+d2luWzBdLmxlbjsKIAkJaWYgKGlvLT5ud2luID4gMSkgewotCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMyID0gcF9kZXYtPmlvLkF0dHJpYnV0ZXMxOwotCQkJcF9kZXYtPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKLQkJCXBfZGV2LT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+ZmxhZ3MgPSBwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzOworCQkJcF9kZXYtPnJlc291cmNlWzFdLT5zdGFydCA9IGlvLT53aW5bMV0uYmFzZTsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gaW8tPndpblsxXS5sZW47CiAJCX0KIAkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KLQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSAhPSAwKQorCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpICE9IDApCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpZiAoKGNmZy0+bWVtLm53aW4gPiAwKSB8fCAoZGZsdC0+bWVtLm53aW4gPiAwKSkgewotCQljaXN0cGxfbWVtX3QgKm1lbSA9Ci0JCQkoY2ZnLT5tZW0ubndpbikgPyAmY2ZnLT5tZW0gOiAmZGZsdC0+bWVtOwotCQlyZXEtPkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF8xNiB8IFdJTl9NRU1PUllfVFlQRV9DTTsKLQkJcmVxLT5BdHRyaWJ1dGVzIHw9IFdJTl9FTkFCTEU7Ci0JCXJlcS0+QmFzZSA9IG1lbS0+d2luWzBdLmhvc3RfYWRkcjsKLQkJcmVxLT5TaXplID0gbWVtLT53aW5bMF0ubGVuOwotCQlpZiAocmVxLT5TaXplIDwgMHgxMDAwKQotCQkJcmVxLT5TaXplID0gMHgxMDAwOwotCQlyZXEtPkFjY2Vzc1NwZWVkID0gMDsKLQkJaWYgKHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhwX2RldiwgcmVxLCAmcF9kZXYtPndpbikpCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJbWFwLlBhZ2UgPSAwOwotCQltYXAuQ2FyZE9mZnNldCA9IG1lbS0+d2luWzBdLmNhcmRfYWRkcjsKLQkJaWYgKHBjbWNpYV9tYXBfbWVtX3BhZ2UocF9kZXYsIHBfZGV2LT53aW4sICZtYXApKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQogCS8qIElmIHdlIGdvdCB0aGlzIGZhciwgd2UncmUgY29vbCEgKi8KIAlyZXR1cm4gMDsKIH0KQEAgLTM0OCwxMSArMzE3LDEwIEBACiBzdGF0aWMgdm9pZCBsYWJwY19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJaW50IHJldDsKLQl3aW5fcmVxX3QgcmVxOwogCiAJZGV2X2RiZygmbGluay0+ZGV2LCAibGFicGNfY29uZmlnXG4iKTsKIAotCXJldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBsYWJwY19wY21jaWFfY29uZmlnX2xvb3AsICZyZXEpOworCXJldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBsYWJwY19wY21jaWFfY29uZmlnX2xvb3AsIE5VTEwpOwogCWlmIChyZXQpIHsKIAkJZGV2X3dhcm4oJmxpbmstPmRldiwgIm5vIGNvbmZpZ3VyYXRpb24gZm91bmRcbiIpOwogCQlnb3RvIGZhaWxlZDsKQEAgLTM3NCwxNSArMzQyLDEwIEBACiAJZGV2X2luZm8oJmxpbmstPmRldiwgImluZGV4IDB4JTAyeCIsIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgpOwogCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCiAJCXByaW50aygiLCBpcnEgJWQiLCBsaW5rLT5pcnEpOwotCWlmIChsaW5rLT5pby5OdW1Qb3J0czEpCi0JCXByaW50aygiLCBpbyAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQxLAotCQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQxICsgbGluay0+aW8uTnVtUG9ydHMxIC0gMSk7Ci0JaWYgKGxpbmstPmlvLk51bVBvcnRzMikKLQkJcHJpbnRrKCIgJiAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQyLAotCQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQyICsgbGluay0+aW8uTnVtUG9ydHMyIC0gMSk7Ci0JaWYgKGxpbmstPndpbikKLQkJcHJpbnRrKCIsIG1lbSAweCUwNmx4LTB4JTA2bHgiLCByZXEuQmFzZSwKLQkJICAgICAgIHJlcS5CYXNlICsgcmVxLlNpemUgLSAxKTsKKwlpZiAobGluay0+cmVzb3VyY2VbMF0pCisJCXByaW50aygiICYgJXBSIiwgbGluay0+cmVzb3VyY2VbMF0pOworCWlmIChsaW5rLT5yZXNvdXJjZVsxXSkKKwkJcHJpbnRrKCIgJiAlcFIiLCBsaW5rLT5yZXNvdXJjZVsxXSk7CiAJcHJpbnRrKCJcbiIpOwogCiAJcmV0dXJuOwpAQCAtNDQ5LDcgKzQxMiw3IEBACiAJLmlkX3RhYmxlID0gbGFicGNfY3NfaWRzLAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5kcnYgPSB7Ci0JCS5uYW1lID0gZGV2X2luZm8sCisJCS5uYW1lID0gImRhcWNhcmQtMTIwMCIsCiAJCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NzLmMKaW5kZXggM2E0NmYwYy4uMWYyNDI2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY3MuYwpAQCAtNDgsNyArNDgsNiBAQAogI2luY2x1ZGUgIm5pX3N0Yy5oIgogI2luY2x1ZGUgIjgyNTUuaCIKIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KQEAgLTI2MSwxMiArMjYwLDExIEBACiBzdGF0aWMgdm9pZCBjc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKik7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqY3VyX2RldiA9IE5VTEw7Ci1zdGF0aWMgY29uc3QgZGV2X2luZm9fdCBkZXZfaW5mbyA9ICJuaV9taW9fY3MiOwogCiBzdGF0aWMgaW50IGNzX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKLQlsaW5rLT5pby5OdW1Qb3J0czEgPSAxNjsKKwlsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OworCWxpbmstPnJlc291cmNlWzBdLT5lbmQgPSAxNjsKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAKQEAgLTMxMSwxMyArMzA5LDEyIEBACiB7CiAJaW50IGJhc2UsIHJldDsKIAotCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBjZmctPmlvLndpblswXS5sZW47Ci0JcF9kZXYtPmlvLklPQWRkckxpbmVzID0gY2ZnLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCXBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOworCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gY2ZnLT5pby53aW5bMF0ubGVuOworCXBfZGV2LT5pb19saW5lcyA9IGNmZy0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKIAogCWZvciAoYmFzZSA9IDB4MDAwOyBiYXNlIDwgMHg0MDA7IGJhc2UgKz0gMHgyMCkgewotCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gYmFzZTsKLQkJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gYmFzZTsKKwkJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpOwogCQlpZiAoIXJldCkKIAkJCXJldHVybiAwOwogCX0KQEAgLTM1Niw3ICszNTMsNyBAQAogCQlyZXR1cm4gLUVJTzsKIAogCWRldi0+ZHJpdmVyID0gJmRyaXZlcl9uaV9taW9fY3M7Ci0JZGV2LT5pb2Jhc2UgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisJZGV2LT5pb2Jhc2UgPSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAKIAlpcnEgPSBsaW5rLT5pcnE7CiAKQEAgLTQ1MCw3ICs0NDcsNyBAQAogCS5pZF90YWJsZSA9IG5pX21pb19jc19pZHMsCiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmRydiA9IHsKLQkJLm5hbWUgPSBkZXZfaW5mbywKKwkJLm5hbWUgPSAibmlfbWlvX2NzIiwKIAkJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYwppbmRleCBiMTI2NjM4Li44NGExNWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jCkBAIC0xMzE3LDQgKzEzMTcsNDAgQEAKIAlyZXR1cm4gLUVJTzsKIH0KIAotQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfcGNpZGlvLCBuaV9wY2lkaW9fcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9wY2lkaW9fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIGRyaXZlcl9wY2lkaW8uZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX3BjaWRpb19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXJfcGNpZGlvX3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gbmlfcGNpZGlvX3BjaV90YWJsZSwKKwkucHJvYmUgPSAmZHJpdmVyX3BjaWRpb19wY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKCZkcml2ZXJfcGNpZGlvX3BjaV9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfcGNpZGlvX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9wY2lkaW8pOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJZHJpdmVyX3BjaWRpb19wY2lfZHJpdmVyLm5hbWUgPSAoY2hhciAqKWRyaXZlcl9wY2lkaW8uZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9wY2lkaW9fcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfcGNpZGlvX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfcGNpZGlvX3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX3BjaWRpbyk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9wY2lkaW9faW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX3BjaWRpb19jbGVhbnVwX21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpbWlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpbWlvLmMKaW5kZXggNTc3ZmRhOC4uMjNhMzgxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaW1pby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2ltaW8uYwpAQCAtMTIzOSw3ICsxMjM5LDQzIEBACiAJLmRldGFjaCA9IHBjaW1pb19kZXRhY2gsCiB9OwogCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2ltaW8sIG5pX3BjaV90YWJsZSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9wY2ltaW9fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIGRyaXZlcl9wY2ltaW8uZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX3BjaW1pb19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXJfcGNpbWlvX3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gbmlfcGNpX3RhYmxlLAorCS5wcm9iZSA9ICZkcml2ZXJfcGNpbWlvX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9wY2ltaW9fcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9wY2ltaW9faW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX3BjaW1pbyk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfcGNpbWlvX3BjaV9kcml2ZXIubmFtZSA9IChjaGFyICopZHJpdmVyX3BjaW1pby5kcml2ZXJfbmFtZTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX3BjaW1pb19wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9wY2ltaW9fY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9wY2ltaW9fcGNpX2RyaXZlcik7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfcGNpbWlvKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX3BjaW1pb19pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfcGNpbWlvX2NsZWFudXBfbW9kdWxlKTsKIAogc3RydWN0IG5pX3ByaXZhdGUgewogTklfUFJJVkFURV9DT01NT059OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3Rpby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3Rpby5jCmluZGV4IDEzZTViMjYuLmE5YmI2YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV90aW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfdGlvLmMKQEAgLTMwMiw3ICszMDIsNyBAQAogCQkJCQkJCQkJbmlfZ3BjdF9yZWdpc3RlcgogCQkJCQkJCQkJcmVnKSwKIAkJCQkJCXVuc2lnbmVkICgqcmVhZF9yZWdpc3RlcikKLQkJCQkJCShzdHJ1Y3QgbmlfZ3BjdCAqIGNvdW50ZXIsCisJCQkJCQkoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsCiAJCQkJCQkgZW51bSBuaV9ncGN0X3JlZ2lzdGVyIHJlZyksCiAJCQkJCQllbnVtIG5pX2dwY3RfdmFyaWFudCB2YXJpYW50LAogCQkJCQkJdW5zaWduZWQgbnVtX2NvdW50ZXJzKQpAQCAtMzMyLDYgKzMzMiw3IEBACiAJY291bnRlcl9kZXYtPm51bV9jb3VudGVycyA9IG51bV9jb3VudGVyczsKIAlyZXR1cm4gY291bnRlcl9kZXY7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChuaV9ncGN0X2RldmljZV9jb25zdHJ1Y3QpOwogCiB2b2lkIG5pX2dwY3RfZGV2aWNlX2Rlc3Ryb3koc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2RldikKIHsKQEAgLTM0MCw2ICszNDEsNyBAQAogCWtmcmVlKGNvdW50ZXJfZGV2LT5jb3VudGVycyk7CiAJa2ZyZWUoY291bnRlcl9kZXYpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobmlfZ3BjdF9kZXZpY2VfZGVzdHJveSk7CiAKIHN0YXRpYyBpbnQgbmlfdGlvX3NlY29uZF9nYXRlX3JlZ2lzdGVyc19wcmVzZW50KGNvbnN0IHN0cnVjdCBuaV9ncGN0X2RldmljZQogCQkJCQkJKmNvdW50ZXJfZGV2KQpAQCAtNDE4LDYgKzQyMCw3IEBACiAJCQlOSVRJT19HaV9JbnRlcnJ1cHRfRW5hYmxlX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSwKIAkJCX4wLCAweDApOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobmlfdGlvX2luaXRfY291bnRlcik7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmlfdGlvX2NvdW50ZXJfc3RhdHVzKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyKQogewpAQCAtNDQ2LDkgKzQ0OSw3IEBACiAJaWYgKG5pX3Rpb19jb3VudGluZ19tb2RlX3JlZ2lzdGVyc19wcmVzZW50KGNvdW50ZXJfZGV2KSA9PSAwKQogCQlyZXR1cm47CiAKLQlzd2l0Y2ggKG5pX3Rpb19nZXRfc29mdF9jb3B5KGNvdW50ZXIsCi0JCQkJICAgICBjb3VudGluZ19tb2RlX3JlZykgJiBHaV9Db3VudGluZ19Nb2RlX01hc2spCi0JeworCXN3aXRjaCAobmlfdGlvX2dldF9zb2Z0X2NvcHkoY291bnRlciwgY291bnRpbmdfbW9kZV9yZWcpICYgR2lfQ291bnRpbmdfTW9kZV9NYXNrKSB7CiAJY2FzZSBHaV9Db3VudGluZ19Nb2RlX1F1YWRyYXR1cmVYMV9CaXRzOgogCWNhc2UgR2lfQ291bnRpbmdfTW9kZV9RdWFkcmF0dXJlWDJfQml0czoKIAljYXNlIEdpX0NvdW50aW5nX01vZGVfUXVhZHJhdHVyZVg0X0JpdHM6CkBAIC01MTMsOSArNTE0LDggQEAKIAkJY291bnRpbmdfbW9kZV9iaXRzIHw9CiAJCSAgICAoKG1vZGUgPj4gTklfR1BDVF9JTkRFWF9QSEFTRV9CSVRTSElGVCkgPDwKIAkJICAgICBHaV9JbmRleF9QaGFzZV9CaXRzaGlmdCkgJiBHaV9JbmRleF9QaGFzZV9NYXNrOwotCQlpZiAobW9kZSAmIE5JX0dQQ1RfSU5ERVhfRU5BQkxFX0JJVCkgeworCQlpZiAobW9kZSAmIE5JX0dQQ1RfSU5ERVhfRU5BQkxFX0JJVCkKIAkJCWNvdW50aW5nX21vZGVfYml0cyB8PSBHaV9JbmRleF9Nb2RlX0JpdDsKLQkJfQogCQluaV90aW9fc2V0X2JpdHMoY291bnRlciwKIAkJCQlOSVRJT19HaV9Db3VudGluZ19Nb2RlX1JlZyhjb3VudGVyLT4KIAkJCQkJCQkgICBjb3VudGVyX2luZGV4KSwKQEAgLTUyOSwxMiArNTI5LDEwIEBACiAJCQkobW9kZSA+PiBOSV9HUENUX0NPVU5USU5HX0RJUkVDVElPTl9TSElGVCkgPDwKIAkJCUdpX1VwX0Rvd25fU2hpZnQpOwogCi0JaWYgKG1vZGUgJiBOSV9HUENUX09SX0dBVEVfQklUKSB7CisJaWYgKG1vZGUgJiBOSV9HUENUX09SX0dBVEVfQklUKQogCQlpbnB1dF9zZWxlY3RfYml0cyB8PSBHaV9Pcl9HYXRlX0JpdDsKLQl9Ci0JaWYgKG1vZGUgJiBOSV9HUENUX0lOVkVSVF9PVVRQVVRfQklUKSB7CisJaWYgKG1vZGUgJiBOSV9HUENUX0lOVkVSVF9PVVRQVVRfQklUKQogCQlpbnB1dF9zZWxlY3RfYml0cyB8PSBHaV9PdXRwdXRfUG9sYXJpdHlfQml0OwotCX0KIAluaV90aW9fc2V0X2JpdHMoY291bnRlciwKIAkJCU5JVElPX0dpX0lucHV0X1NlbGVjdF9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCiAJCQlHaV9HYXRlX1NlbGVjdF9Mb2FkX1NvdXJjZV9CaXQgfCBHaV9Pcl9HYXRlX0JpdCB8CkBAIC02MDAsNiArNTk4LDcgQEAKIAkJCQkgIDAsIDAsIGNvbW1hbmRfdHJhbnNpZW50X2JpdHMpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobmlfdGlvX2FybSk7CiAKIHN0YXRpYyB1bnNpZ25lZCBuaV82NjB4X3NvdXJjZV9zZWxlY3RfYml0cyh1bnNpZ25lZCBpbnQgY2xvY2tfc291cmNlKQogewpAQCAtNzA2LDcgKzcwNSw3IEBACiAJCX0KIAkJaWYgKGkgPD0gbmlfbV9zZXJpZXNfbWF4X3BmaV9jaGFubmVsKQogCQkJYnJlYWs7Ci0JCXByaW50aygiaW52YWxpZCBjbG9jayBzb3VyY2UgMHglbHhcbiIsCisJCXByaW50ayhLRVJOX0VSUiAiaW52YWxpZCBjbG9jayBzb3VyY2UgMHglbHhcbiIsCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyljbG9ja19zb3VyY2UpOwogCQlCVUcoKTsKIAkJbmlfbV9zZXJpZXNfY2xvY2sgPSAwOwpAQCAtMTAyNiwxNCArMTAyNSwxMiBAQAogCWNvbnN0IHVuc2lnbmVkIG1vZGVfbWFzayA9IEdpX0dhdGVfUG9sYXJpdHlfQml0IHwgR2lfR2F0aW5nX01vZGVfTWFzazsKIAl1bnNpZ25lZCBtb2RlX3ZhbHVlcyA9IDA7CiAKLQlpZiAoZ2F0ZV9zb3VyY2UgJiBDUl9JTlZFUlQpIHsKKwlpZiAoZ2F0ZV9zb3VyY2UgJiBDUl9JTlZFUlQpCiAJCW1vZGVfdmFsdWVzIHw9IEdpX0dhdGVfUG9sYXJpdHlfQml0OwotCX0KLQlpZiAoZ2F0ZV9zb3VyY2UgJiBDUl9FREdFKSB7CisJaWYgKGdhdGVfc291cmNlICYgQ1JfRURHRSkKIAkJbW9kZV92YWx1ZXMgfD0gR2lfUmlzaW5nX0VkZ2VfR2F0aW5nX0JpdHM7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCW1vZGVfdmFsdWVzIHw9IEdpX0xldmVsX0dhdGluZ19CaXRzOwotCX0KIAluaV90aW9fc2V0X2JpdHMoY291bnRlciwgTklUSU9fR2lfTW9kZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCiAJCQltb2RlX21hc2ssIG1vZGVfdmFsdWVzKTsKIH0KQEAgLTEyOTAsNiArMTI4Nyw3IEBACiAJfQogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobmlfdGlvX3NldF9nYXRlX3NyYyk7CiAKIHN0YXRpYyBpbnQgbmlfdGlvX3NldF9vdGhlcl9zcmMoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHVuc2lnbmVkIGluZGV4LAogCQkJCXVuc2lnbmVkIGludCBzb3VyY2UpCkBAIC0xNTMxLDEyICsxNTI5LDEwIEBACiAJCQlCVUcoKTsKIAkJCWJyZWFrOwogCQl9Ci0JCWlmIChtb2RlX2JpdHMgJiBHaV9HYXRlX1BvbGFyaXR5X0JpdCkgeworCQlpZiAobW9kZV9iaXRzICYgR2lfR2F0ZV9Qb2xhcml0eV9CaXQpCiAJCQkqZ2F0ZV9zb3VyY2UgfD0gQ1JfSU5WRVJUOwotCQl9Ci0JCWlmICgobW9kZV9iaXRzICYgR2lfR2F0aW5nX01vZGVfTWFzaykgIT0gR2lfTGV2ZWxfR2F0aW5nX0JpdHMpIHsKKwkJaWYgKChtb2RlX2JpdHMgJiBHaV9HYXRpbmdfTW9kZV9NYXNrKSAhPSBHaV9MZXZlbF9HYXRpbmdfQml0cykKIAkJCSpnYXRlX3NvdXJjZSB8PSBDUl9FREdFOwotCQl9CiAJCWJyZWFrOwogCWNhc2UgMToKIAkJaWYgKChtb2RlX2JpdHMgJiBHaV9HYXRpbmdfTW9kZV9NYXNrKSA9PSBHaV9HYXRpbmdfRGlzYWJsZWRfQml0cwpAQCAtMTU3Miw5ICsxNTY4LDggQEAKIAkJCSpnYXRlX3NvdXJjZSB8PSBDUl9JTlZFUlQ7CiAJCX0KIAkJLyogc2Vjb25kIGdhdGUgY2FuJ3QgaGF2ZSBlZGdlL2xldmVsIG1vZGUgc2V0IGluZGVwZW5kZW50bHkgKi8KLQkJaWYgKChtb2RlX2JpdHMgJiBHaV9HYXRpbmdfTW9kZV9NYXNrKSAhPSBHaV9MZXZlbF9HYXRpbmdfQml0cykgeworCQlpZiAoKG1vZGVfYml0cyAmIEdpX0dhdGluZ19Nb2RlX01hc2spICE9IEdpX0xldmVsX0dhdGluZ19CaXRzKQogCQkJKmdhdGVfc291cmNlIHw9IENSX0VER0U7Ci0JCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNjI3LDYgKzE2MjIsNyBAQAogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG5pX3Rpb19pbnNuX2NvbmZpZyk7CiAKIGludCBuaV90aW9fcmluc24oc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKIAkJIHVuc2lnbmVkIGludCAqZGF0YSkKQEAgLTE2ODEsNiArMTY3Nyw3IEBACiAJfTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG5pX3Rpb19yaW5zbik7CiAKIHN0YXRpYyB1bnNpZ25lZCBuaV90aW9fbmV4dF9sb2FkX3JlZ2lzdGVyKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyKQogewpAQCAtMTY4OCwxMSArMTY4NSwxMCBAQAogCQkJCQkgICAgTklUSU9fR3h4X1N0YXR1c19SZWcoY291bnRlci0+CiAJCQkJCQkJCSBjb3VudGVyX2luZGV4KSk7CiAKLQlpZiAoYml0cyAmIEdpX05leHRfTG9hZF9Tb3VyY2VfQml0KGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKSB7CisJaWYgKGJpdHMgJiBHaV9OZXh0X0xvYWRfU291cmNlX0JpdChjb3VudGVyLT5jb3VudGVyX2luZGV4KSkKIAkJcmV0dXJuIE5JVElPX0dpX0xvYWRCX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KTsKLQl9IGVsc2UgeworCWVsc2UKIAkJcmV0dXJuIE5JVElPX0dpX0xvYWRBX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KTsKLQl9CiB9CiAKIGludCBuaV90aW9fd2luc24oc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKQEAgLTE3MzUsMTIgKzE3MzEsNCBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLQotRVhQT1JUX1NZTUJPTF9HUEwobmlfdGlvX3JpbnNuKTsKIEVYUE9SVF9TWU1CT0xfR1BMKG5pX3Rpb193aW5zbik7Ci1FWFBPUlRfU1lNQk9MX0dQTChuaV90aW9faW5zbl9jb25maWcpOwotRVhQT1JUX1NZTUJPTF9HUEwobmlfdGlvX2luaXRfY291bnRlcik7Ci1FWFBPUlRfU1lNQk9MX0dQTChuaV90aW9fYXJtKTsKLUVYUE9SVF9TWU1CT0xfR1BMKG5pX3Rpb19zZXRfZ2F0ZV9zcmMpOwotRVhQT1JUX1NZTUJPTF9HUEwobmlfZ3BjdF9kZXZpY2VfY29uc3RydWN0KTsKLUVYUE9SVF9TWU1CT0xfR1BMKG5pX2dwY3RfZGV2aWNlX2Rlc3Ryb3kpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcxMS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcxMS5jCmluZGV4IGE0OTlmNzAuLmI0NDM4NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MTEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzExLmMKQEAgLTE3MSw3ICsxNzEsMTggQEAKIAkub2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBwY2w3MTFfYm9hcmQpLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2w3MTEpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX3BjbDcxMV9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfcGNsNzExKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9wY2w3MTFfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9wY2w3MTEpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfcGNsNzExX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9wY2w3MTFfY2xlYW51cF9tb2R1bGUpOwogCiBzdHJ1Y3QgcGNsNzExX3ByaXZhdGUgewogCkBAIC0yNzAsNyArMjgxLDcgQEAKIAkJCQlnb3RvIG9rOwogCQkJdWRlbGF5KDEpOwogCQl9Ci0JCXByaW50aygiY29tZWRpJWQ6IHBjbDcxMTogQS9EIHRpbWVvdXRcbiIsIGRldi0+bWlub3IpOworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBwY2w3MTE6IEEvRCB0aW1lb3V0XG4iLCBkZXYtPm1pbm9yKTsKIAkJcmV0dXJuIC1FVElNRTsKIAogb2s6CkBAIC01MDUsNyArNTE2LDcgQEAKIC8qICBGcmVlIGFueSByZXNvdXJjZXMgdGhhdCB3ZSBoYXZlIGNsYWltZWQgICovCiBzdGF0aWMgaW50IHBjbDcxMV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKLQlwcmludGsoImNvbWVkaSVkOiBwY2w3MTE6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IHBjbDcxMTogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKIAogCWlmIChkZXYtPmlycSkKIAkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CkBAIC01MjcsNyArNTM4LDcgQEAKIAkvKiBjbGFpbSBvdXIgSS9PIHNwYWNlICovCiAKIAlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKLQlwcmludGsoImNvbWVkaSVkOiBwY2w3MTE6IDB4JTA0bHggIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogcGNsNzExOiAweCUwNGx4ICIsIGRldi0+bWlub3IsIGlvYmFzZSk7CiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIFBDTDcxMV9TSVpFLCAicGNsNzExIikpIHsKIAkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CiAJCXJldHVybiAtRUlPOwpAQCAtNTQyLDE1ICs1NTMsMTUgQEAKIAkvKiBncmFiIG91ciBJUlEgKi8KIAlpcnEgPSBpdC0+b3B0aW9uc1sxXTsKIAlpZiAoaXJxID4gdGhpc19ib2FyZC0+bWF4aXJxKSB7Ci0JCXByaW50aygiaXJxIG91dCBvZiByYW5nZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiaXJxIG91dCBvZiByYW5nZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoaXJxKSB7CiAJCWlmIChyZXF1ZXN0X2lycShpcnEsIHBjbDcxMV9pbnRlcnJ1cHQsIDAsICJwY2w3MTEiLCBkZXYpKSB7Ci0JCQlwcmludGsoInVuYWJsZSB0byBhbGxvY2F0ZSBpcnEgJXVcbiIsIGlycSk7CisJCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBhbGxvY2F0ZSBpcnEgJXVcbiIsIGlycSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfSBlbHNlIHsKLQkJCXByaW50aygiKCBpcnEgPSAldSApXG4iLCBpcnEpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiKCBpcnEgPSAldSApXG4iLCBpcnEpOwogCQl9CiAJfQogCWRldi0+aXJxID0gaXJxOwpAQCAtNjI0LDcgKzYzNSwxMSBAQAogCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfREExX0xPKTsKIAlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMNzExX0RBMV9ISSk7CiAKLQlwcmludGsoIlxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKIAogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI0LmMKaW5kZXggMGYxMDNjMy4uMzk2YTA1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcyNC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MjQuYwpAQCAtOTMsNyArOTMsMTggQEAKIAkub2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBwY2w3MjRfYm9hcmQpLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2w3MjQpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX3BjbDcyNF9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfcGNsNzI0KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9wY2w3MjRfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9wY2w3MjQpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfcGNsNzI0X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9wY2w3MjRfY2xlYW51cF9tb2R1bGUpOwogCiBzdGF0aWMgaW50IHN1YmRldl84MjU1X2NiKGludCBkaXIsIGludCBwb3J0LCBpbnQgZGF0YSwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC0yMjEsMyArMjMyLDcgQEAKIAogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI1LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI1LmMKaW5kZXggNjAyNjFmNC4uMjRiMjIzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcyNS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MjUuYwpAQCAtMzAsNyArMzAsMTggQEAKIAkuZGV0YWNoID0gcGNsNzI1X2RldGFjaCwKIH07CiAKLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfcGNsNzI1KTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9wY2w3MjVfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX3BjbDcyNSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfcGNsNzI1X2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfcGNsNzI1KTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX3BjbDcyNV9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfcGNsNzI1X2NsZWFudXBfbW9kdWxlKTsKIAogc3RhdGljIGludCBwY2w3MjVfZG9faW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKIAkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCkBAIC0xMTAsMyArMTIxLDcgQEAKIAogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI2LmMKaW5kZXggNmExYTk3OS4uODk3Y2Q4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcyNi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MjYuYwpAQCAtMTYyLDcgKzE2MiwxOCBAQAogCS5vZmZzZXQgPSBzaXplb2Yoc3RydWN0IHBjbDcyNl9ib2FyZCksCiB9OwogCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3BjbDcyNik7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfcGNsNzI2X2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9wY2w3MjYpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX3BjbDcyNl9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX3BjbDcyNik7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9wY2w3MjZfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX3BjbDcyNl9jbGVhbnVwX21vZHVsZSk7CiAKIHN0cnVjdCBwY2w3MjZfcHJpdmF0ZSB7CiAKQEAgLTM4MSwzICszOTIsNyBAQAogCiAJcmV0dXJuIDA7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MzAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MzAuYwppbmRleCBlNWU3YmVkLi5jOTY4MmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzMwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDczMC5jCkBAIC01NSw3ICs1NSwxOCBAQAogCS5vZmZzZXQgPSBzaXplb2Yoc3RydWN0IHBjbDczMF9ib2FyZCksCiB9OwogCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3BjbDczMCk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfcGNsNzMwX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9wY2w3MzApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX3BjbDczMF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX3BjbDczMCk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9wY2w3MzBfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX3BjbDczMF9jbGVhbnVwX21vZHVsZSk7CiAKIHN0YXRpYyBpbnQgcGNsNzMwX2RvX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCiAJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQpAQCAtMTY2LDMgKzE3Nyw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxMi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxMi5jCmluZGV4IDFkZGMxOWMuLmM2ZGNlNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODEyLmMKQEAgLTE1LDk3ICsxNSw5OCBAQAogICogIGNhcmQ6ICAgQS04MjNQR0gsIEEtODIzUEdMLCBBLTgyNlBHCiAgKiBkcml2ZXI6ICBhODIzcGdoLCAgYTgyM3BnbCwgIGE4MjZwZwogICovCisKIC8qCi1Ecml2ZXI6IHBjbDgxMgotRGVzY3JpcHRpb246IEFkdmFudGVjaCBQQ0wtODEyL1BHLCBQQ0wtODEzL0IsCi0gICAgICAgICAgICAgQURMaW5rIEFDTC04MTEyREcvSEcvUEcsIEFDTC04MTEzLCBBQ0wtODIxNiwKLSAgICAgICAgICAgICBJQ1AgREFTIEEtODIxUEdIL1BHTC9QR0wtTkRBLCBBLTgyMlBHSC9QR0wsIEEtODIzUEdIL1BHTCwgQS04MjZQRywKLSAgICAgICAgICAgICBJQ1AgREFTIElTTy04MTMKLUF1dGhvcjogTWljaGFsIERvYmVzIDxkb2Jlc0B0ZXNuZXQuY3o+Ci1EZXZpY2VzOiBbQWR2YW50ZWNoXSBQQ0wtODEyIChwY2w4MTIpLCBQQ0wtODEyUEcgKHBjbDgxMnBnKSwKLSAgUENMLTgxMyAocGNsODEzKSwgUENMLTgxM0IgKHBjbDgxM2IpLCBbQURMaW5rXSBBQ0wtODExMkRHIChhY2w4MTEyZGcpLAotICBBQ0wtODExMkhHIChhY2w4MTEyaGcpLCBBQ0wtODExMyAoYWNsLTgxMTMpLCBBQ0wtODIxNiAoYWNsODIxNiksCi0gIFtJQ1BdIElTTy04MTMgKGlzbzgxMyksIEEtODIxUEdIIChhODIxcGdoKSwgQS04MjFQR0wgKGE4MjFwZ2wpLAotICBBLTgyMVBHTC1OREEgKGE4MjFwY2xuZGEpLCBBLTgyMlBHSCAoYTgyMnBnaCksIEEtODIyUEdMIChhODIycGdsKSwKLSAgQS04MjNQR0ggKGE4MjNwZ2gpLCBBLTgyM1BHTCAoYTgyM3BnbCksIEEtODI2UEcgKGE4MjZwZykKLVVwZGF0ZWQ6IE1vbiwgMDYgQXVnIDIwMDcgMTI6MDM6MTUgKzAxMDAKLVN0YXR1czogd29ya3MgKEkgaG9wZS4gTXkgYm9hcmQgZmlyZSB1cCB1bmRlciBteSBoYW5kcwotICAgICAgICAgICAgICAgYW5kIEkgY2Fubid0IHRlc3QgYWxsIGZlYXR1cmVzLikKLQotVGhpcyBkcml2ZXIgc3VwcG9ydHMgaW5zbiBhbmQgY21kIGludGVyZmFjZXMuIFNvbWUgYm9hcmRzIHN1cHBvcnQgb25seSBpbnNuCi1iZWNvdXNlIHRoZWlyIGhhcmR3YXJlIGRvbid0IGFsbG93IG1vcmUgKFBDTC04MTMvQiwgQUNMLTgxMTMsIElTTy04MTMpLgotRGF0YSB0cmFuc2ZlciBvdmVyIERNQSBpcyBzdXBwb3J0ZWQgb25seSB3aGVuIHlvdSBtZWFzdXJlIG9ubHkgb25lCi1jaGFubmVsLCB0aGlzIGlzIHRvbyBoYXJkd2FyZSBsaW1pdGF0aW9uIG9mIHRoZXNlIGJvYXJkcy4KLQotT3B0aW9ucyBmb3IgUENMLTgxMjoKLSAgWzBdIC0gSU8gQmFzZQotICBbMV0gLSBJUlEgICgwPWRpc2FibGUsIDIsIDMsIDQsIDUsIDYsIDc7IDEwLCAxMSwgMTIsIDE0LCAxNSkKLSAgWzJdIC0gRE1BICAoMD1kaXNhYmxlLCAxLCAzKQotICBbM10gLSAwPXRyaWdnZXIgc291cmNlIGlzIGludGVybmFsIDgyNTMgd2l0aCAyTUh6IGNsb2NrCi0gICAgICAgIDE9dHJpZ2dlciBzb3VyY2UgaXMgZXh0ZXJuYWwKLSAgWzRdIC0gMD1BL0QgaW5wdXQgcmFuZ2UgaXMgKy8tMTBWCi0gICAgICAgIDE9QS9EIGlucHV0IHJhbmdlIGlzICsvLTVWCi0gICAgICAgIDI9QS9EIGlucHV0IHJhbmdlIGlzICsvLTIuNVYKLSAgICAgICAgMz1BL0QgaW5wdXQgcmFuZ2UgaXMgKy8tMS4yNVYKLSAgICAgICAgND1BL0QgaW5wdXQgcmFuZ2UgaXMgKy8tMC42MjVWCi0gICAgICAgIDU9QS9EIGlucHV0IHJhbmdlIGlzICsvLTAuMzEyNVYKLSAgWzVdIC0gMD1EL0Egb3V0cHV0cyAwLTVWICAoaW50ZXJuYWwgcmVmZXJlbmNlIC01VikKLSAgICAgICAgMT1EL0Egb3V0cHV0cyAwLTEwViAoaW50ZXJuYWwgcmVmZXJlbmNlIC0xMFYpCi0gICAgICAgIDI9RC9BIG91dHB1dHMgdW5rbm93biAoZXh0ZXJuYWwgcmVmZXJlbmNlKQotCi1PcHRpb25zIGZvciBQQ0wtODEyUEcsIEFDTC04MTEyUEc6Ci0gIFswXSAtIElPIEJhc2UKLSAgWzFdIC0gSVJRICAoMD1kaXNhYmxlLCAyLCAzLCA0LCA1LCA2LCA3OyAxMCwgMTEsIDEyLCAxNCwgMTUpCi0gIFsyXSAtIERNQSAgKDA9ZGlzYWJsZSwgMSwgMykKLSAgWzNdIC0gMD10cmlnZ2VyIHNvdXJjZSBpcyBpbnRlcm5hbCA4MjUzIHdpdGggMk1IeiBjbG9jawotICAgICAgICAxPXRyaWdnZXIgc291cmNlIGlzIGV4dGVybmFsCi0gIFs0XSAtIDA9QS9EIGhhdmUgbWF4ICsvLTVWIGlucHV0Ci0gICAgICAgIDE9QS9EIGhhdmUgbWF4ICsvLTEwViBpbnB1dAotICBbNV0gLSAwPUQvQSBvdXRwdXRzIDAtNVYgIChpbnRlcm5hbCByZWZlcmVuY2UgLTVWKQotICAgICAgICAxPUQvQSBvdXRwdXRzIDAtMTBWIChpbnRlcm5hbCByZWZlcmVuY2UgLTEwVikKLSAgICAgICAgMj1EL0Egb3V0cHV0cyB1bmtub3duIChleHRlcm5hbCByZWZlcmVuY2UpCi0KLU9wdGlvbnMgZm9yIEFDTC04MTEyREcvSEcsIEEtODIyUEdML1BHSCwgQS04MjNQR0wvUEdILCBBQ0wtODIxNiwgQS04MjZQRzoKLSAgWzBdIC0gSU8gQmFzZQotICBbMV0gLSBJUlEgICgwPWRpc2FibGUsIDIsIDMsIDQsIDUsIDYsIDc7IDEwLCAxMSwgMTIsIDE0LCAxNSkKLSAgWzJdIC0gRE1BICAoMD1kaXNhYmxlLCAxLCAzKQotICBbM10gLSAwPXRyaWdnZXIgc291cmNlIGlzIGludGVybmFsIDgyNTMgd2l0aCAyTUh6IGNsb2NrCi0gICAgICAgIDE9dHJpZ2dlciBzb3VyY2UgaXMgZXh0ZXJuYWwKLSAgWzRdIC0gMD1BL0QgY2hhbm5lbHMgYXJlIFMuRS4KLSAgICAgICAgMT1BL0QgY2hhbm5lbHMgYXJlIERJRkYKLSAgWzVdIC0gMD1EL0Egb3V0cHV0cyAwLTVWICAoaW50ZXJuYWwgcmVmZXJlbmNlIC01VikKLSAgICAgICAgMT1EL0Egb3V0cHV0cyAwLTEwViAoaW50ZXJuYWwgcmVmZXJlbmNlIC0xMFYpCi0gICAgICAgIDI9RC9BIG91dHB1dHMgdW5rbm93biAoZXh0ZXJuYWwgcmVmZXJlbmNlKQotCi1PcHRpb25zIGZvciBBLTgyMVBHTC9QR0g6Ci0gIFswXSAtIElPIEJhc2UKLSAgWzFdIC0gSVJRICAoMD1kaXNhYmxlLCAyLCAzLCA0LCA1LCA2LCA3KQotICBbMl0gLSAwPUEvRCBjaGFubmVscyBhcmUgUy5FLgotICAgICAgICAxPUEvRCBjaGFubmVscyBhcmUgRElGRgotICBbM10gLSAwPUQvQSBvdXRwdXQgMC01ViAgKGludGVybmFsIHJlZmVyZW5jZSAtNVYpCi0gICAgICAgIDE9RC9BIG91dHB1dCAwLTEwViAoaW50ZXJuYWwgcmVmZXJlbmNlIC0xMFYpCi0KLU9wdGlvbnMgZm9yIEEtODIxUEdMLU5EQToKLSAgWzBdIC0gSU8gQmFzZQotICBbMV0gLSBJUlEgICgwPWRpc2FibGUsIDIsIDMsIDQsIDUsIDYsIDcpCi0gIFsyXSAtIDA9QS9EIGNoYW5uZWxzIGFyZSBTLkUuCi0gICAgICAgIDE9QS9EIGNoYW5uZWxzIGFyZSBESUZGCi0KLU9wdGlvbnMgZm9yIFBDTC04MTM6Ci0gIFswXSAtIElPIEJhc2UKLQotT3B0aW9ucyBmb3IgUENMLTgxM0I6Ci0gIFswXSAtIElPIEJhc2UKLSAgWzFdIC0gMD0gYmlwb2xhciBpbnB1dHMKLSAgICAgICAgMT0gdW5pcG9sYXIgaW5wdXRzCi0KLU9wdGlvbnMgZm9yIEFDTC04MTEzLCBJU08tODEzOgotICBbMF0gLSBJTyBCYXNlCi0gIFsxXSAtIDA9IDEwViBiaXBvbGFyIGlucHV0cwotICAgICAgICAxPSAxMFYgdW5pcG9sYXIgaW5wdXRzCi0gICAgICAgIDI9IDIwViBiaXBvbGFyIGlucHV0cwotICAgICAgICAzPSAyMFYgdW5pcG9sYXIgaW5wdXRzCi0qLworICogRHJpdmVyOiBwY2w4MTIKKyAqIERlc2NyaXB0aW9uOiBBZHZhbnRlY2ggUENMLTgxMi9QRywgUENMLTgxMy9CLAorICoJICAgICBBRExpbmsgQUNMLTgxMTJERy9IRy9QRywgQUNMLTgxMTMsIEFDTC04MjE2LAorICoJICAgICBJQ1AgREFTIEEtODIxUEdIL1BHTC9QR0wtTkRBLCBBLTgyMlBHSC9QR0wsIEEtODIzUEdIL1BHTCwgQS04MjZQRywKKyAqCSAgICAgSUNQIERBUyBJU08tODEzCisgKiBBdXRob3I6IE1pY2hhbCBEb2JlcyA8ZG9iZXNAdGVzbmV0LmN6PgorICogRGV2aWNlczogW0FkdmFudGVjaF0gUENMLTgxMiAocGNsODEyKSwgUENMLTgxMlBHIChwY2w4MTJwZyksCisgKglQQ0wtODEzIChwY2w4MTMpLCBQQ0wtODEzQiAocGNsODEzYiksIFtBRExpbmtdIEFDTC04MTEyREcgKGFjbDgxMTJkZyksCisgKglBQ0wtODExMkhHIChhY2w4MTEyaGcpLCBBQ0wtODExMyAoYWNsLTgxMTMpLCBBQ0wtODIxNiAoYWNsODIxNiksCisgKglbSUNQXSBJU08tODEzIChpc284MTMpLCBBLTgyMVBHSCAoYTgyMXBnaCksIEEtODIxUEdMIChhODIxcGdsKSwKKyAqCUEtODIxUEdMLU5EQSAoYTgyMXBjbG5kYSksIEEtODIyUEdIIChhODIycGdoKSwgQS04MjJQR0wgKGE4MjJwZ2wpLAorICoJQS04MjNQR0ggKGE4MjNwZ2gpLCBBLTgyM1BHTCAoYTgyM3BnbCksIEEtODI2UEcgKGE4MjZwZykKKyAqIFVwZGF0ZWQ6IE1vbiwgMDYgQXVnIDIwMDcgMTI6MDM6MTUgKzAxMDAKKyAqIFN0YXR1czogd29ya3MgKEkgaG9wZS4gTXkgYm9hcmQgZmlyZSB1cCB1bmRlciBteSBoYW5kcworICoJICAgICAgIGFuZCBJIGNhbm4ndCB0ZXN0IGFsbCBmZWF0dXJlcy4pCisgKgorICogVGhpcyBkcml2ZXIgc3VwcG9ydHMgaW5zbiBhbmQgY21kIGludGVyZmFjZXMuIFNvbWUgYm9hcmRzIHN1cHBvcnQgb25seSBpbnNuCisgKiBiZWNvdXNlIHRoZWlyIGhhcmR3YXJlIGRvbid0IGFsbG93IG1vcmUgKFBDTC04MTMvQiwgQUNMLTgxMTMsIElTTy04MTMpLgorICogRGF0YSB0cmFuc2ZlciBvdmVyIERNQSBpcyBzdXBwb3J0ZWQgb25seSB3aGVuIHlvdSBtZWFzdXJlIG9ubHkgb25lCisgKiBjaGFubmVsLCB0aGlzIGlzIHRvbyBoYXJkd2FyZSBsaW1pdGF0aW9uIG9mIHRoZXNlIGJvYXJkcy4KKyAqCisgKiBPcHRpb25zIGZvciBQQ0wtODEyOgorICogICBbMF0gLSBJTyBCYXNlCisgKiAgIFsxXSAtIElSUSAgKDA9ZGlzYWJsZSwgMiwgMywgNCwgNSwgNiwgNzsgMTAsIDExLCAxMiwgMTQsIDE1KQorICogICBbMl0gLSBETUEgICgwPWRpc2FibGUsIDEsIDMpCisgKiAgIFszXSAtIDA9dHJpZ2dlciBzb3VyY2UgaXMgaW50ZXJuYWwgODI1MyB3aXRoIDJNSHogY2xvY2sKKyAqICAgICAgICAgMT10cmlnZ2VyIHNvdXJjZSBpcyBleHRlcm5hbAorICogICBbNF0gLSAwPUEvRCBpbnB1dCByYW5nZSBpcyArLy0xMFYKKyAqCSAgIDE9QS9EIGlucHV0IHJhbmdlIGlzICsvLTVWCisgKgkgICAyPUEvRCBpbnB1dCByYW5nZSBpcyArLy0yLjVWCisgKgkgICAzPUEvRCBpbnB1dCByYW5nZSBpcyArLy0xLjI1VgorICoJICAgND1BL0QgaW5wdXQgcmFuZ2UgaXMgKy8tMC42MjVWCisgKgkgICA1PUEvRCBpbnB1dCByYW5nZSBpcyArLy0wLjMxMjVWCisgKiAgIFs1XSAtIDA9RC9BIG91dHB1dHMgMC01ViAgKGludGVybmFsIHJlZmVyZW5jZSAtNVYpCisgKgkgICAxPUQvQSBvdXRwdXRzIDAtMTBWIChpbnRlcm5hbCByZWZlcmVuY2UgLTEwVikKKyAqCSAgIDI9RC9BIG91dHB1dHMgdW5rbm93biAoZXh0ZXJuYWwgcmVmZXJlbmNlKQorICoKKyAqIE9wdGlvbnMgZm9yIFBDTC04MTJQRywgQUNMLTgxMTJQRzoKKyAqICAgWzBdIC0gSU8gQmFzZQorICogICBbMV0gLSBJUlEgICgwPWRpc2FibGUsIDIsIDMsIDQsIDUsIDYsIDc7IDEwLCAxMSwgMTIsIDE0LCAxNSkKKyAqICAgWzJdIC0gRE1BICAoMD1kaXNhYmxlLCAxLCAzKQorICogICBbM10gLSAwPXRyaWdnZXIgc291cmNlIGlzIGludGVybmFsIDgyNTMgd2l0aCAyTUh6IGNsb2NrCisgKgkgICAxPXRyaWdnZXIgc291cmNlIGlzIGV4dGVybmFsCisgKiAgIFs0XSAtIDA9QS9EIGhhdmUgbWF4ICsvLTVWIGlucHV0CisgKgkgICAxPUEvRCBoYXZlIG1heCArLy0xMFYgaW5wdXQKKyAqICAgWzVdIC0gMD1EL0Egb3V0cHV0cyAwLTVWICAoaW50ZXJuYWwgcmVmZXJlbmNlIC01VikKKyAqCSAgIDE9RC9BIG91dHB1dHMgMC0xMFYgKGludGVybmFsIHJlZmVyZW5jZSAtMTBWKQorICoJICAgMj1EL0Egb3V0cHV0cyB1bmtub3duIChleHRlcm5hbCByZWZlcmVuY2UpCisgKgorICogT3B0aW9ucyBmb3IgQUNMLTgxMTJERy9IRywgQS04MjJQR0wvUEdILCBBLTgyM1BHTC9QR0gsIEFDTC04MjE2LCBBLTgyNlBHOgorICogICBbMF0gLSBJTyBCYXNlCisgKiAgIFsxXSAtIElSUSAgKDA9ZGlzYWJsZSwgMiwgMywgNCwgNSwgNiwgNzsgMTAsIDExLCAxMiwgMTQsIDE1KQorICogICBbMl0gLSBETUEgICgwPWRpc2FibGUsIDEsIDMpCisgKiAgIFszXSAtIDA9dHJpZ2dlciBzb3VyY2UgaXMgaW50ZXJuYWwgODI1MyB3aXRoIDJNSHogY2xvY2sKKyAqCSAgIDE9dHJpZ2dlciBzb3VyY2UgaXMgZXh0ZXJuYWwKKyAqICAgWzRdIC0gMD1BL0QgY2hhbm5lbHMgYXJlIFMuRS4KKyAqCSAgIDE9QS9EIGNoYW5uZWxzIGFyZSBESUZGCisgKiAgIFs1XSAtIDA9RC9BIG91dHB1dHMgMC01ViAgKGludGVybmFsIHJlZmVyZW5jZSAtNVYpCisgKgkgICAxPUQvQSBvdXRwdXRzIDAtMTBWIChpbnRlcm5hbCByZWZlcmVuY2UgLTEwVikKKyAqCSAgIDI9RC9BIG91dHB1dHMgdW5rbm93biAoZXh0ZXJuYWwgcmVmZXJlbmNlKQorICoKKyAqIE9wdGlvbnMgZm9yIEEtODIxUEdML1BHSDoKKyAqICAgWzBdIC0gSU8gQmFzZQorICogICBbMV0gLSBJUlEgICgwPWRpc2FibGUsIDIsIDMsIDQsIDUsIDYsIDcpCisgKiAgIFsyXSAtIDA9QS9EIGNoYW5uZWxzIGFyZSBTLkUuCisgKgkgICAxPUEvRCBjaGFubmVscyBhcmUgRElGRgorICogICBbM10gLSAwPUQvQSBvdXRwdXQgMC01ViAgKGludGVybmFsIHJlZmVyZW5jZSAtNVYpCisgKgkgICAxPUQvQSBvdXRwdXQgMC0xMFYgKGludGVybmFsIHJlZmVyZW5jZSAtMTBWKQorICoKKyAqIE9wdGlvbnMgZm9yIEEtODIxUEdMLU5EQToKKyAqICAgWzBdIC0gSU8gQmFzZQorICogICBbMV0gLSBJUlEgICgwPWRpc2FibGUsIDIsIDMsIDQsIDUsIDYsIDcpCisgKiAgIFsyXSAtIDA9QS9EIGNoYW5uZWxzIGFyZSBTLkUuCisgKgkgICAxPUEvRCBjaGFubmVscyBhcmUgRElGRgorICoKKyAqIE9wdGlvbnMgZm9yIFBDTC04MTM6CisgKiAgIFswXSAtIElPIEJhc2UKKyAqCisgKiBPcHRpb25zIGZvciBQQ0wtODEzQjoKKyAqICAgWzBdIC0gSU8gQmFzZQorICogICBbMV0gLSAwPSBiaXBvbGFyIGlucHV0cworICoJICAgMT0gdW5pcG9sYXIgaW5wdXRzCisgKgorICogT3B0aW9ucyBmb3IgQUNMLTgxMTMsIElTTy04MTM6CisgKiAgIFswXSAtIElPIEJhc2UKKyAqICAgWzFdIC0gMD0gMTBWIGJpcG9sYXIgaW5wdXRzCisgKgkgICAxPSAxMFYgdW5pcG9sYXIgaW5wdXRzCisgKgkgICAyPSAyMFYgYmlwb2xhciBpbnB1dHMKKyAqCSAgIDM9IDIwViB1bmlwb2xhciBpbnB1dHMKKyAqLwogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CkBAIC0xMTcsNDkgKzExOCw1MCBAQAogCiAjaW5jbHVkZSAiODI1My5oIgogCi0jdW5kZWYgUENMODEyX0VYVERFQlVHCQkvKiBpZiB0aGlzIGlzIGRlZmluZWQgdGhlbiBhIGxvdCBvZiBtZXNzYWdlcyBpcyBwcmludGVkICovCisvKiBpZiB0aGlzIGlzIGRlZmluZWQgdGhlbiBhIGxvdCBvZiBtZXNzYWdlcyBpcyBwcmludGVkICovCisjdW5kZWYgUENMODEyX0VYVERFQlVHCiAKIC8qIGhhcmR3YXJlIHR5cGVzIG9mIHRoZSBjYXJkcyAqLwotI2RlZmluZSBib2FyZFBDTDgxMlBHIAkJIDAJLyogYW5kIEFDTC04MTEyUEcgKi8KLSNkZWZpbmUgYm9hcmRQQ0w4MTNCIAkJIDEKLSNkZWZpbmUgYm9hcmRQQ0w4MTIJCSAyCi0jZGVmaW5lIGJvYXJkUENMODEzIAkJIDMKLSNkZWZpbmUgYm9hcmRJU084MTMgCQkgNQotI2RlZmluZSBib2FyZEFDTDgxMTMgCQkgNgotI2RlZmluZSBib2FyZEFDTDgxMTIgCQkgNwkvKiBBQ0wtODExMkRHL0hHLCBBLTgyMlBHTC9QR0gsIEEtODIzUEdML1BHSCAqLwotI2RlZmluZSBib2FyZEFDTDgyMTYJCSA4CS8qIGFuZCBJQ1AgREFTIEEtODI2UEcgKi8KLSNkZWZpbmUgYm9hcmRBODIxCQkgOQkvKiBQR0gsIFBHTCwgUEdML05EQSB2ZXJzaW9ucyAqLworI2RlZmluZSBib2FyZFBDTDgxMlBHCSAgICAgIDAJLyogYW5kIEFDTC04MTEyUEcgKi8KKyNkZWZpbmUgYm9hcmRQQ0w4MTNCCSAgICAgIDEKKyNkZWZpbmUgYm9hcmRQQ0w4MTIJICAgICAgMgorI2RlZmluZSBib2FyZFBDTDgxMwkgICAgICAzCisjZGVmaW5lIGJvYXJkSVNPODEzCSAgICAgIDUKKyNkZWZpbmUgYm9hcmRBQ0w4MTEzCSAgICAgIDYKKyNkZWZpbmUgYm9hcmRBQ0w4MTEyCSAgICAgIDcgLyogQUNMLTgxMTJERy9IRywgQS04MjJQR0wvUEdILCBBLTgyM1BHTC9QR0ggKi8KKyNkZWZpbmUgYm9hcmRBQ0w4MjE2CSAgICAgIDgJLyogYW5kIElDUCBEQVMgQS04MjZQRyAqLworI2RlZmluZSBib2FyZEE4MjEJICAgICAgOQkvKiBQR0gsIFBHTCwgUEdML05EQSB2ZXJzaW9ucyAqLwogCi0jZGVmaW5lIFBDTHgxeF9JT1JBTkdFIAkJMTYKKyNkZWZpbmUgUENMeDF4X0lPUkFOR0UJICAgICAxNgogCi0jZGVmaW5lIFBDTDgxMl9DVFIwCQkgMAotI2RlZmluZSBQQ0w4MTJfQ1RSMQkJIDEKLSNkZWZpbmUgUENMODEyX0NUUjIJCSAyCi0jZGVmaW5lIFBDTDgxMl9DVFJDVEwJCSAzCi0jZGVmaW5lIFBDTDgxMl9BRF9MTwkJIDQKLSNkZWZpbmUgUENMODEyX0RBMV9MTwkJIDQKLSNkZWZpbmUgUENMODEyX0FEX0hJCQkgNQotI2RlZmluZSBQQ0w4MTJfREExX0hJCQkgNQotI2RlZmluZSBQQ0w4MTJfREEyX0xPCQkgNgotI2RlZmluZSBQQ0w4MTJfRElfTE8JCSA2Ci0jZGVmaW5lIFBDTDgxMl9EQTJfSEkJCSA3Ci0jZGVmaW5lIFBDTDgxMl9ESV9ISQkJIDcKLSNkZWZpbmUgUENMODEyX0NMUklOVAkJIDgKLSNkZWZpbmUgUENMODEyX0dBSU4JCSA5Ci0jZGVmaW5lIFBDTDgxMl9NVVgJCTEwCi0jZGVmaW5lIFBDTDgxMl9NT0RFCQkxMQotI2RlZmluZSBQQ0w4MTJfQ05URU5BQkxFIAkxMAotI2RlZmluZSBQQ0w4MTJfU09GVFRSSUcgCTEyCi0jZGVmaW5lIFBDTDgxMl9ET19MTwkJMTMKLSNkZWZpbmUgUENMODEyX0RPX0hJIAkJMTQKKyNkZWZpbmUgUENMODEyX0NUUjAJICAgICAgMAorI2RlZmluZSBQQ0w4MTJfQ1RSMQkgICAgICAxCisjZGVmaW5lIFBDTDgxMl9DVFIyCSAgICAgIDIKKyNkZWZpbmUgUENMODEyX0NUUkNUTAkgICAgICAzCisjZGVmaW5lIFBDTDgxMl9BRF9MTwkgICAgICA0CisjZGVmaW5lIFBDTDgxMl9EQTFfTE8JICAgICAgNAorI2RlZmluZSBQQ0w4MTJfQURfSEkJICAgICAgNQorI2RlZmluZSBQQ0w4MTJfREExX0hJCSAgICAgIDUKKyNkZWZpbmUgUENMODEyX0RBMl9MTwkgICAgICA2CisjZGVmaW5lIFBDTDgxMl9ESV9MTwkgICAgICA2CisjZGVmaW5lIFBDTDgxMl9EQTJfSEkJICAgICAgNworI2RlZmluZSBQQ0w4MTJfRElfSEkJICAgICAgNworI2RlZmluZSBQQ0w4MTJfQ0xSSU5UCSAgICAgIDgKKyNkZWZpbmUgUENMODEyX0dBSU4JICAgICAgOQorI2RlZmluZSBQQ0w4MTJfTVVYCSAgICAgMTAKKyNkZWZpbmUgUENMODEyX01PREUJICAgICAxMQorI2RlZmluZSBQQ0w4MTJfQ05URU5BQkxFICAgICAxMAorI2RlZmluZSBQQ0w4MTJfU09GVFRSSUcJICAgICAxMgorI2RlZmluZSBQQ0w4MTJfRE9fTE8JICAgICAxMworI2RlZmluZSBQQ0w4MTJfRE9fSEkJICAgICAxNAogCi0jZGVmaW5lIFBDTDgxMl9EUkRZIAkJMHgxMAkvKiA9MCBkYXRhIHJlYWR5ICovCisjZGVmaW5lIFBDTDgxMl9EUkRZCSAgIDB4MTAJLyogPTAgZGF0YSByZWFkeSAqLwogCi0jZGVmaW5lIEFDTDgyMTZfU1RBVFVTIAkJIDgJLyogNS4gYml0IHNpZ25hbGl6ZSBkYXRhIHJlYWR5ICovCisjZGVmaW5lIEFDTDgyMTZfU1RBVFVTCSAgICAgIDgJLyogNS4gYml0IHNpZ25hbGl6ZSBkYXRhIHJlYWR5ICovCiAKLSNkZWZpbmUgQUNMODIxNl9EUkRZIAkJMHgyMAkvKiA9MCBkYXRhIHJlYWR5ICovCisjZGVmaW5lIEFDTDgyMTZfRFJEWQkgICAweDIwCS8qID0wIGRhdGEgcmVhZHkgKi8KIAotI2RlZmluZSBNQVhfQ0hBTkxJU1RfTEVOCTI1NgkvKiBsZW5ndGggb2Ygc2NhbiBsaXN0ICovCisjZGVmaW5lIE1BWF9DSEFOTElTVF9MRU4gICAgMjU2CS8qIGxlbmd0aCBvZiBzY2FuIGxpc3QgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjbDgxMnBnX2FpID0geyA1LCB7CiAJCQkJCQkJICAgIEJJUF9SQU5HRSg1KSwKQEAgLTQwNyw3ICs0MDksMTggQEAKIAkub2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBwY2w4MTJfYm9hcmQpLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2w4MTIpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX3BjbDgxMl9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfcGNsODEyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9wY2w4MTJfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9wY2w4MTIpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfcGNsODEyX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9wY2w4MTJfY2xlYW51cF9tb2R1bGUpOwogCiBzdHJ1Y3QgcGNsODEyX3ByaXZhdGUgewogCkBAIC00NjYsMTAgKzQ3OSwxMyBAQAogCWludCBuOwogCWludCB0aW1lb3V0LCBoaTsKIAotCW91dGIoZGV2cHJpdi0+bW9kZV9yZWdfaW50IHwgMSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfTU9ERSk7CS8qIHNlbGVjdCBzb2Z0d2FyZSB0cmlnZ2VyICovCi0Jc2V0dXBfcmFuZ2VfY2hhbm5lbChkZXYsIHMsIGluc24tPmNoYW5zcGVjLCAxKTsJLyogIHNlbGVjdCBjaGFubmVsIGFuZCByZW5nZSAqLworCS8qIHNlbGVjdCBzb2Z0d2FyZSB0cmlnZ2VyICovCisJb3V0YihkZXZwcml2LT5tb2RlX3JlZ19pbnQgfCAxLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9NT0RFKTsKKwkvKiAgc2VsZWN0IGNoYW5uZWwgYW5kIHJlbmdlICovCisJc2V0dXBfcmFuZ2VfY2hhbm5lbChkZXYsIHMsIGluc24tPmNoYW5zcGVjLCAxKTsKIAlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7Ci0JCW91dGIoMjU1LCBkZXYtPmlvYmFzZSArIFBDTDgxMl9TT0ZUVFJJRyk7CS8qIHN0YXJ0IGNvbnZlcnNpb24gKi8KKwkJLyogc3RhcnQgY29udmVyc2lvbiAqLworCQlvdXRiKDI1NSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfU09GVFRSSUcpOwogCQl1ZGVsYXkoNSk7CiAJCXRpbWVvdXQgPSA1MDsJLyogd2FpdCBtYXggNTB1cywgaXQgbXVzdCBmaW5pc2ggdW5kZXIgMzN1cyAqLwogCQl3aGlsZSAodGltZW91dC0tKSB7CkBAIC01MDEsMTAgKzUxNywxMyBAQAogCWludCBuOwogCWludCB0aW1lb3V0OwogCi0Jb3V0YigxLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9NT0RFKTsJLyogc2VsZWN0IHNvZnR3YXJlIHRyaWdnZXIgKi8KLQlzZXR1cF9yYW5nZV9jaGFubmVsKGRldiwgcywgaW5zbi0+Y2hhbnNwZWMsIDEpOwkvKiAgc2VsZWN0IGNoYW5uZWwgYW5kIHJlbmdlICovCisJLyogc2VsZWN0IHNvZnR3YXJlIHRyaWdnZXIgKi8KKwlvdXRiKDEsIGRldi0+aW9iYXNlICsgUENMODEyX01PREUpOworCS8qICBzZWxlY3QgY2hhbm5lbCBhbmQgcmVuZ2UgKi8KKwlzZXR1cF9yYW5nZV9jaGFubmVsKGRldiwgcywgaW5zbi0+Y2hhbnNwZWMsIDEpOwogCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKLQkJb3V0YigyNTUsIGRldi0+aW9iYXNlICsgUENMODEyX1NPRlRUUklHKTsJLyogc3RhcnQgY29udmVyc2lvbiAqLworCQkvKiBzdGFydCBjb252ZXJzaW9uICovCisJCW91dGIoMjU1LCBkZXYtPmlvYmFzZSArIFBDTDgxMl9TT0ZUVFJJRyk7CiAJCXVkZWxheSg1KTsKIAkJdGltZW91dCA9IDUwOwkvKiB3YWl0IG1heCA1MHVzLCBpdCBtdXN0IGZpbmlzaCB1bmRlciAzM3VzICovCiAJCXdoaWxlICh0aW1lb3V0LS0pIHsKQEAgLTU1OCw5ICs1NzcsOCBAQAogCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykKIAkJZGF0YVtpXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOwotCX0KIAogCXJldHVybiBpOwogfQpAQCAtNjA4LDE0ICs2MjYsMTUgQEAKICovCiBzdGF0aWMgdm9pZCBwY2w4MTJfY21kdGVzdF9vdXQoaW50IGUsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7Ci0JcHJpbnRrKCJwY2w4MTIgZT0lZCBzdGFydHNyYz0leCBzY2Fuc3JjPSV4IGNvbnZzcmM9JXhcbiIsIGUsCisJcHJpbnRrKEtFUk5fSU5GTyAicGNsODEyIGU9JWQgc3RhcnRzcmM9JXggc2NhbnNyYz0leCBjb252c3JjPSV4XG4iLCBlLAogCSAgICAgICBjbWQtPnN0YXJ0X3NyYywgY21kLT5zY2FuX2JlZ2luX3NyYywgY21kLT5jb252ZXJ0X3NyYyk7Ci0JcHJpbnRrKCJwY2w4MTIgZT0lZCBzdGFydGFyZz0lZCBzY2FuYXJnPSVkIGNvbnZhcmc9JWRcbiIsIGUsCisJcHJpbnRrKEtFUk5fSU5GTyAicGNsODEyIGU9JWQgc3RhcnRhcmc9JWQgc2NhbmFyZz0lZCBjb252YXJnPSVkXG4iLCBlLAogCSAgICAgICBjbWQtPnN0YXJ0X2FyZywgY21kLT5zY2FuX2JlZ2luX2FyZywgY21kLT5jb252ZXJ0X2FyZyk7Ci0JcHJpbnRrKCJwY2w4MTIgZT0lZCBzdG9wc3JjPSV4IHNjYW5lbmQ9JXhcbiIsIGUsIGNtZC0+c3RvcF9zcmMsCi0JICAgICAgIGNtZC0+c2Nhbl9lbmRfc3JjKTsKLQlwcmludGsoInBjbDgxMiBlPSVkIHN0b3Bhcmc9JWQgc2NhbmVuZGFyZz0lZCBjaGFubGlzdGxlbj0lZFxuIiwgZSwKLQkgICAgICAgY21kLT5zdG9wX2FyZywgY21kLT5zY2FuX2VuZF9hcmcsIGNtZC0+Y2hhbmxpc3RfbGVuKTsKKwlwcmludGsoS0VSTl9JTkZPICJwY2w4MTIgZT0lZCBzdG9wc3JjPSV4IHNjYW5lbmQ9JXhcbiIsIGUsCisJICAgICAgIGNtZC0+c3RvcF9zcmMsIGNtZC0+c2Nhbl9lbmRfc3JjKTsKKwlwcmludGsoS0VSTl9JTkZPICJwY2w4MTIgZT0lZCBzdG9wYXJnPSVkIHNjYW5lbmRhcmc9JWQgIgorCSAgICAgICAiY2hhbmxpc3RsZW49JWRcbiIsIGUsIGNtZC0+c3RvcF9hcmcsIGNtZC0+c2Nhbl9lbmRfYXJnLAorCSAgICAgICBjbWQtPmNoYW5saXN0X2xlbik7CiB9CiAjZW5kaWYKIApAQCAtNjQ1LDExICs2NjQsMTEgQEAKIAkJZXJyKys7CiAKIAl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOwotCWlmIChkZXZwcml2LT51c2VfZXh0X3RyZykgeworCWlmIChkZXZwcml2LT51c2VfZXh0X3RyZykKIAkJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX0VYVDsKLQl9IGVsc2UgeworCWVsc2UKIAkJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX1RJTUVSOwotCX0KKwogCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKIAkJZXJyKys7CiAKQEAgLTY3Myw3ICs2OTIsMTAgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKwkvKgorCSAqIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUKKwkgKiB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUKKwkgKi8KIAogCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVykgewogCQljbWQtPnN0YXJ0X3NyYyA9IFRSSUdfTk9XOwpAQCAtODA3LDcgKzgyOSw3IEBACiAJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCiAjaWZkZWYgUENMODEyX0VYVERFQlVHCi0JcHJpbnRrKCJwY2w4MTIgRURCRzogQkdOOiBwY2w4MTJfYWlfY21kKC4uLilcbiIpOworCXByaW50ayhLRVJOX0RFQlVHICJwY2w4MTIgRURCRzogQkdOOiBwY2w4MTJfYWlfY21kKC4uLilcbiIpOwogI2VuZGlmCiAKIAlpZiAoY21kLT5zdGFydF9zcmMgIT0gVFJJR19OT1cpCkBAIC04NDIsMTMgKzg2NCwxNSBAQAogCWRldnByaXYtPmFpX25fY2hhbiA9IGNtZC0+Y2hhbmxpc3RfbGVuOwogCW1lbWNweShkZXZwcml2LT5haV9jaGFubGlzdCwgY21kLT5jaGFubGlzdCwKIAkgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGludCkgKiBjbWQtPnNjYW5fZW5kX2FyZyk7Ci0Jc2V0dXBfcmFuZ2VfY2hhbm5lbChkZXYsIHMsIGRldnByaXYtPmFpX2NoYW5saXN0WzBdLCAxKTsJLyogIHNlbGVjdCBmaXJzdCBjaGFubmVsIGFuZCByYW5nZSAqLworCS8qICBzZWxlY3QgZmlyc3QgY2hhbm5lbCBhbmQgcmFuZ2UgKi8KKwlzZXR1cF9yYW5nZV9jaGFubmVsKGRldiwgcywgZGV2cHJpdi0+YWlfY2hhbmxpc3RbMF0sIDEpOwogCiAJaWYgKGRldnByaXYtPmRtYSkgewkvKiAgY2hlY2sgaWYgd2UgY2FuIHVzZSBETUEgdHJhbnNmZXIgKi8KIAkJZGV2cHJpdi0+YWlfZG1hID0gMTsKIAkJZm9yIChpID0gMTsgaSA8IGRldnByaXYtPmFpX25fY2hhbjsgaSsrKQogCQkJaWYgKGRldnByaXYtPmFpX2NoYW5saXN0WzBdICE9IGRldnByaXYtPmFpX2NoYW5saXN0W2ldKSB7Ci0JCQkJZGV2cHJpdi0+YWlfZG1hID0gMDsJLyogIHdlIGNhbm4ndCB1c2UgRE1BIDotKCAqLworCQkJCS8qICB3ZSBjYW5uJ3QgdXNlIERNQSA6LSggKi8KKwkJCQlkZXZwcml2LT5haV9kbWEgPSAwOwogCQkJCWJyZWFrOwogCQkJfQogCX0gZWxzZQpAQCAtODY5LDE0ICs4OTMsMTggQEAKIAlkZXZwcml2LT5haV9wb2xsX3B0ciA9IDA7CiAJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKIAotCWlmICgoZGV2cHJpdi0+YWlfZmxhZ3MgJiBUUklHX1dBS0VfRU9TKSkgewkvKiAgZG9uJ3Qgd2Ugd2FudCB3YWtlIHVwIGV2ZXJ5IHNjYW4/ICovCisJLyogIGRvbid0IHdlIHdhbnQgd2FrZSB1cCBldmVyeSBzY2FuPyAqLworCWlmICgoZGV2cHJpdi0+YWlfZmxhZ3MgJiBUUklHX1dBS0VfRU9TKSkgewogCQlkZXZwcml2LT5haV9lb3MgPSAxOworCisJCS8qICBETUEgaXMgdXNlbGVzcyBmb3IgdGhpcyBzaXR1YXRpb24gKi8KIAkJaWYgKGRldnByaXYtPmFpX25fY2hhbiA9PSAxKQotCQkJZGV2cHJpdi0+YWlfZG1hID0gMDsJLyogIERNQSBpcyB1c2VsZXNzIGZvciB0aGlzIHNpdHVhdGlvbiAqLworCQkJZGV2cHJpdi0+YWlfZG1hID0gMDsKIAl9CiAKIAlpZiAoZGV2cHJpdi0+YWlfZG1hKSB7Ci0JCWlmIChkZXZwcml2LT5haV9lb3MpIHsJLyogIHdlIHVzZSBFT1MsIHNvIGFkYXB0IERNQSBidWZmZXIgdG8gb25lIHNjYW4gKi8KKwkJLyogIHdlIHVzZSBFT1MsIHNvIGFkYXB0IERNQSBidWZmZXIgdG8gb25lIHNjYW4gKi8KKwkJaWYgKGRldnByaXYtPmFpX2VvcykgewogCQkJZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbMF0gPQogCQkJICAgIGRldnByaXYtPmFpX25fY2hhbiAqIHNpemVvZihzaG9ydCk7CiAJCQlkZXZwcml2LT5kbWFieXRlc3RvbW92ZVsxXSA9CkBAIC04OTQsOSArOTIyLDE3IEBACiAJCQlpZiAoZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcpIHsKIAkJCQlkZXZwcml2LT5kbWFfcnVuc190b19lbmQgPSAxOwogCQkJfSBlbHNlIHsKLQkJCQlieXRlcyA9IGRldnByaXYtPmFpX25fY2hhbiAqIGRldnByaXYtPmFpX3NjYW5zICogc2l6ZW9mKHNob3J0KTsJLyogIGhvdyBtYW55IHNhbXBsZXMgd2UgbXVzdCB0cmFuc2Zlcj8gKi8KLQkJCQlkZXZwcml2LT5kbWFfcnVuc190b19lbmQgPSBieXRlcyAvIGRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzBdOwkvKiAgaG93IG1hbnkgRE1BIHBhZ2VzIHdlIG11c3QgZmlsbCAqLwotCQkJCWRldnByaXYtPmxhc3RfZG1hX3J1biA9IGJ5dGVzICUgZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbMF07CS8qIG9uIGxhc3QgZG1hIHRyYW5zZmVyIG11c3QgYmUgbW92ZWQgKi8KKwkJCQkvKiAgaG93IG1hbnkgc2FtcGxlcyB3ZSBtdXN0IHRyYW5zZmVyPyAqLworCQkJCWJ5dGVzID0gZGV2cHJpdi0+YWlfbl9jaGFuICoKKwkJCQkJZGV2cHJpdi0+YWlfc2NhbnMgKiBzaXplb2Yoc2hvcnQpOworCisJCQkJLyogIGhvdyBtYW55IERNQSBwYWdlcyB3ZSBtdXN0IGZpbGwgKi8KKwkJCQlkZXZwcml2LT5kbWFfcnVuc190b19lbmQgPQorCQkJCQlieXRlcyAvIGRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzBdOworCisJCQkJLyogb24gbGFzdCBkbWEgdHJhbnNmZXIgbXVzdCBiZSBtb3ZlZCAqLworCQkJCWRldnByaXYtPmxhc3RfZG1hX3J1biA9CisJCQkJCWJ5dGVzICUgZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbMF07CiAJCQkJaWYgKGRldnByaXYtPmRtYV9ydW5zX3RvX2VuZCA9PSAwKQogCQkJCQlkZXZwcml2LT5kbWFieXRlc3RvbW92ZVswXSA9CiAJCQkJCSAgICBkZXZwcml2LT5sYXN0X2RtYV9ydW47CkBAIC05MzQsMTQgKzk3MCwxMyBAQAogCQlicmVhazsKIAl9CiAKLQlpZiAoZGV2cHJpdi0+YWlfZG1hKSB7Ci0JCW91dGIoZGV2cHJpdi0+bW9kZV9yZWdfaW50IHwgMiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfTU9ERSk7CS8qICBsZXQncyBnbyEgKi8KLQl9IGVsc2UgewotCQlvdXRiKGRldnByaXYtPm1vZGVfcmVnX2ludCB8IDYsIGRldi0+aW9iYXNlICsgUENMODEyX01PREUpOwkvKiAgbGV0J3MgZ28hICovCi0JfQorCWlmIChkZXZwcml2LT5haV9kbWEpCQkJCQkvKiAgbGV0J3MgZ28hICovCisJCW91dGIoZGV2cHJpdi0+bW9kZV9yZWdfaW50IHwgMiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfTU9ERSk7CisJZWxzZQkJCQkJCQkvKiAgbGV0J3MgZ28hICovCisJCW91dGIoZGV2cHJpdi0+bW9kZV9yZWdfaW50IHwgNiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfTU9ERSk7CiAKICNpZmRlZiBQQ0w4MTJfRVhUREVCVUcKLQlwcmludGsoInBjbDgxMiBFREJHOiBFTkQ6IHBjbDgxMl9haV9jbWQoLi4uKVxuIik7CisJcHJpbnRrKEtFUk5fREVCVUcgInBjbDgxMiBFREJHOiBFTkQ6IHBjbDgxMl9haV9jbWQoLi4uKVxuIik7CiAjZW5kaWYKIAogCXJldHVybiAwOwpAQCAtOTgzLDcgKzEwMTgsOCBAQAogCiAJaWYgKGVycikgewogCQlwcmludGsKLQkJICAgICgiY29tZWRpJWQ6IHBjbDgxMjogKCVzIGF0IDB4JWx4KSBBL0QgY21kIElSUSB3aXRob3V0IERSRFkhXG4iLAorCQkgICAgKCJjb21lZGklZDogcGNsODEyOiAoJXMgYXQgMHglbHgpICIKKwkJICAgICAiQS9EIGNtZCBJUlEgd2l0aG91dCBEUkRZIVxuIiwKIAkJICAgICBkZXYtPm1pbm9yLCBkZXYtPmJvYXJkX25hbWUsIGRldi0+aW9iYXNlKTsKIAkJcGNsODEyX2FpX2NhbmNlbChkZXYsIHMpOwogCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CkBAIC0xMDA5LDcgKzEwNDUsOCBAQAogCWlmIChuZXh0X2NoYW4gPT0gMCkgewkvKiBvbmUgc2NhbiBkb25lICovCiAJCWRldnByaXYtPmFpX2FjdF9zY2FuKys7CiAJCWlmICghKGRldnByaXYtPmFpX25ldmVyZW5kaW5nKSkKLQkJCWlmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA+PSBkZXZwcml2LT5haV9zY2FucykgewkvKiBhbGwgZGF0YSBzYW1wbGVkICovCisJCQkJCQkJLyogYWxsIGRhdGEgc2FtcGxlZCAqLworCQkJaWYgKGRldnByaXYtPmFpX2FjdF9zY2FuID49IGRldnByaXYtPmFpX3NjYW5zKSB7CiAJCQkJcGNsODEyX2FpX2NhbmNlbChkZXYsIHMpOwogCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKIAkJCX0KQEAgLTEwMzAsMTQgKzEwNjcsMTYgQEAKIAogCXMtPmFzeW5jLT5ldmVudHMgPSAwOwogCWZvciAoaSA9IGxlbjsgaTsgaS0tKSB7Ci0JCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCBwdHJbYnVmcHRyKytdKTsJLyogIGdldCBvbmUgc2FtcGxlICovCisJCQkJCQkJLyogIGdldCBvbmUgc2FtcGxlICovCisJCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCBwdHJbYnVmcHRyKytdKTsKIAogCQlzLT5hc3luYy0+Y3VyX2NoYW4rKzsKIAkJaWYgKHMtPmFzeW5jLT5jdXJfY2hhbiA+PSBkZXZwcml2LT5haV9uX2NoYW4pIHsKIAkJCXMtPmFzeW5jLT5jdXJfY2hhbiA9IDA7CiAJCQlkZXZwcml2LT5haV9hY3Rfc2NhbisrOwogCQkJaWYgKCFkZXZwcml2LT5haV9uZXZlcmVuZGluZykKLQkJCQlpZiAoZGV2cHJpdi0+YWlfYWN0X3NjYW4gPj0gZGV2cHJpdi0+YWlfc2NhbnMpIHsJLyogYWxsIGRhdGEgc2FtcGxlZCAqLworCQkJCQkJCS8qIGFsbCBkYXRhIHNhbXBsZWQgKi8KKwkJCQlpZiAoZGV2cHJpdi0+YWlfYWN0X3NjYW4gPj0gZGV2cHJpdi0+YWlfc2NhbnMpIHsKIAkJCQkJcGNsODEyX2FpX2NhbmNlbChkZXYsIHMpOwogCQkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CiAJCQkJCWJyZWFrOwpAQCAtMTA2MCw3ICsxMDk5LDcgQEAKIAlzaG9ydCAqcHRyOwogCiAjaWZkZWYgUENMODEyX0VYVERFQlVHCi0JcHJpbnRrKCJwY2w4MTIgRURCRzogQkdOOiBpbnRlcnJ1cHRfcGNsODEyX2FpX2RtYSguLi4pXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGNsODEyIEVEQkc6IEJHTjogaW50ZXJydXB0X3BjbDgxMl9haV9kbWEoLi4uKVxuIik7CiAjZW5kaWYKIAlwdHIgPSAoc2hvcnQgKilkZXZwcml2LT5kbWFidWZbZGV2cHJpdi0+bmV4dF9kbWFfYnVmXTsKIAlsZW4gPSAoZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbZGV2cHJpdi0+bmV4dF9kbWFfYnVmXSA+PiAxKSAtCkBAIC0xMDk1LDcgKzExMzQsNyBAQAogCXRyYW5zZmVyX2Zyb21fZG1hX2J1ZihkZXYsIHMsIHB0ciwgYnVmcHRyLCBsZW4pOwogCiAjaWZkZWYgUENMODEyX0VYVERFQlVHCi0JcHJpbnRrKCJwY2w4MTIgRURCRzogRU5EOiBpbnRlcnJ1cHRfcGNsODEyX2FpX2RtYSguLi4pXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGNsODEyIEVEQkc6IEVORDogaW50ZXJydXB0X3BjbDgxMl9haV9kbWEoLi4uKVxuIik7CiAjZW5kaWYKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0xMTExLDExICsxMTUwLDEwIEBACiAJCWNvbWVkaV9lcnJvcihkZXYsICJzcHVyaW91cyBpbnRlcnJ1cHQiKTsKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KLQlpZiAoZGV2cHJpdi0+YWlfZG1hKSB7CisJaWYgKGRldnByaXYtPmFpX2RtYSkKIAkJcmV0dXJuIGludGVycnVwdF9wY2w4MTJfYWlfZG1hKGlycSwgZCk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCXJldHVybiBpbnRlcnJ1cHRfcGNsODEyX2FpX2ludChpcnEsIGQpOwotCX07CiB9CiAKIC8qCkBAIC0xMTMyLDcgKzExNzAsOCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewotCQl0b3AxID0gZ2V0X2RtYV9yZXNpZHVlKGRldnByaXYtPmFpX2RtYSk7CS8qICB3aGVyZSBpcyBub3cgRE1BICovCisJCS8qICB3aGVyZSBpcyBub3cgRE1BICovCisJCXRvcDEgPSBnZXRfZG1hX3Jlc2lkdWUoZGV2cHJpdi0+YWlfZG1hKTsKIAkJdG9wMiA9IGdldF9kbWFfcmVzaWR1ZShkZXZwcml2LT5haV9kbWEpOwogCQlpZiAodG9wMSA9PSB0b3AyKQogCQkJYnJlYWs7CkBAIC0xMTQyLDggKzExODEsOCBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CiAJCXJldHVybiAwOwogCX0KLQotCXRvcDEgPSBkZXZwcml2LT5kbWFieXRlc3RvbW92ZVsxIC0gZGV2cHJpdi0+bmV4dF9kbWFfYnVmXSAtIHRvcDE7CS8qICB3aGVyZSBpcyBub3cgRE1BIGluIGJ1ZmZlciAqLworCS8qICB3aGVyZSBpcyBub3cgRE1BIGluIGJ1ZmZlciAqLworCXRvcDEgPSBkZXZwcml2LT5kbWFieXRlc3RvbW92ZVsxIC0gZGV2cHJpdi0+bmV4dF9kbWFfYnVmXSAtIHRvcDE7CiAJdG9wMSA+Pj0gMTsJCS8qICBzYW1wbGUgcG9zaXRpb24gKi8KIAl0b3AyID0gdG9wMSAtIGRldnByaXYtPmFpX3BvbGxfcHRyOwogCWlmICh0b3AyIDwgMSkgewkJLyogIG5vIG5ldyBzYW1wbGVzICovCkBAIC0xMTcxLDcgKzEyMTAsOSBAQAogCQkJCXVuc2lnbmVkIGludCByYW5nZWNoYW4sIGNoYXIgd2FpdCkKIHsKIAl1bnNpZ25lZCBjaGFyIGNoYW5fcmVnID0gQ1JfQ0hBTihyYW5nZWNoYW4pOwkvKiAgbm9ybWFsIGJvYXJkICovCi0JdW5zaWduZWQgY2hhciBnYWluX3JlZyA9IENSX1JBTkdFKHJhbmdlY2hhbikgKyBkZXZwcml2LT5yYW5nZV9jb3JyZWN0aW9uOwkvKiAgZ2FpbiBpbmRleCAqLworCQkJCQkJCS8qICBnYWluIGluZGV4ICovCisJdW5zaWduZWQgY2hhciBnYWluX3JlZyA9IENSX1JBTkdFKHJhbmdlY2hhbikgKworCQkJCSBkZXZwcml2LT5yYW5nZV9jb3JyZWN0aW9uOwogCiAJaWYgKChjaGFuX3JlZyA9PSBkZXZwcml2LT5vbGRfY2hhbl9yZWcpCiAJICAgICYmIChnYWluX3JlZyA9PSBkZXZwcml2LT5vbGRfZ2Fpbl9yZWcpKQpAQCAtMTE4NCwyMCArMTIyNSwyNSBAQAogCQlpZiAoZGV2cHJpdi0+dXNlX2RpZmYpIHsKIAkJCWNoYW5fcmVnID0gY2hhbl9yZWcgfCAweDMwOwkvKiAgRElGRiBpbnB1dHMgKi8KIAkJfSBlbHNlIHsKLQkJCWlmIChjaGFuX3JlZyAmIDB4ODApIHsKLQkJCQljaGFuX3JlZyA9IGNoYW5fcmVnIHwgMHgyMDsJLyogIFNFIGlucHV0cyA4LTE1ICovCi0JCQl9IGVsc2UgewotCQkJCWNoYW5fcmVnID0gY2hhbl9yZWcgfCAweDEwOwkvKiAgU0UgaW5wdXRzIDAtNyAqLwotCQkJfQorCQkJaWYgKGNoYW5fcmVnICYgMHg4MCkKKwkJCQkJCQkvKiAgU0UgaW5wdXRzIDgtMTUgKi8KKwkJCQljaGFuX3JlZyA9IGNoYW5fcmVnIHwgMHgyMDsKKwkJCWVsc2UKKwkJCQkJCQkvKiAgU0UgaW5wdXRzIDAtNyAqLworCQkJCWNoYW5fcmVnID0gY2hhbl9yZWcgfCAweDEwOwogCQl9CiAJfQogCiAJb3V0YihjaGFuX3JlZywgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfTVVYKTsJLyogc2VsZWN0IGNoYW5uZWwgKi8KIAlvdXRiKGdhaW5fcmVnLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9HQUlOKTsJLyogc2VsZWN0IGdhaW4gKi8KIAotCWlmICh3YWl0KSB7Ci0JCXVkZWxheShkZXZwcml2LT5tYXhfODEyX2FpX21vZGUwX3Jhbmdld2FpdCk7CS8qICBYWFggdGhpcyBkZXBlbmRzIG9uIHNlbGVjdGVkIHJhbmdlIGFuZCBjYW4gYmUgdmVyeSBsb25nIGZvciBzb21lIGhpZ2ggZ2FpbiByYW5nZXMhICovCi0JfQorCisJaWYgKHdhaXQpCisJCS8qCisJCSAqIFhYWCB0aGlzIGRlcGVuZHMgb24gc2VsZWN0ZWQgcmFuZ2UgYW5kIGNhbiBiZSB2ZXJ5IGxvbmcgZm9yCisJCSAqIHNvbWUgaGlnaCBnYWluIHJhbmdlcyEKKwkJICovCisJCXVkZWxheShkZXZwcml2LT5tYXhfODEyX2FpX21vZGUwX3Jhbmdld2FpdCk7CiB9CiAKIC8qCkBAIC0xMjA3LDggKzEyNTMsOCBAQAogCQkJdW5zaWduZWQgaW50IGRpdmlzb3IxLCB1bnNpZ25lZCBpbnQgZGl2aXNvcjIpCiB7CiAjaWZkZWYgUENMODEyX0VYVERFQlVHCi0JcHJpbnRrKCJwY2w4MTIgRURCRzogQkdOOiBzdGFydF9wYWNlciglZCwldSwldSlcbiIsIG1vZGUsIGRpdmlzb3IxLAotCSAgICAgICBkaXZpc29yMik7CisJcHJpbnRrKEtFUk5fREVCVUcgInBjbDgxMiBFREJHOiBCR046IHN0YXJ0X3BhY2VyKCVkLCV1LCV1KVxuIiwgbW9kZSwKKwkgICAgICAgZGl2aXNvcjEsIGRpdmlzb3IyKTsKICNlbmRpZgogCW91dGIoMHhiNCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfQ1RSQ1RMKTsKIAlvdXRiKDB4NzQsIGRldi0+aW9iYXNlICsgUENMODEyX0NUUkNUTCk7CkBAIC0xMjIxLDcgKzEyNjcsNyBAQAogCQlvdXRiKChkaXZpc29yMSA+PiA4KSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENMODEyX0NUUjEpOwogCX0KICNpZmRlZiBQQ0w4MTJfRVhUREVCVUcKLQlwcmludGsoInBjbDgxMiBFREJHOiBFTkQ6IHN0YXJ0X3BhY2VyKC4uLilcbiIpOworCXByaW50ayhLRVJOX0RFQlVHICJwY2w4MTIgRURCRzogRU5EOiBzdGFydF9wYWNlciguLi4pXG4iKTsKICNlbmRpZgogfQogCkBAIC0xMjUyLDE2ICsxMjk4LDE3IEBACiAJCQkgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAjaWZkZWYgUENMODEyX0VYVERFQlVHCi0JcHJpbnRrKCJwY2w4MTIgRURCRzogQkdOOiBwY2w4MTJfYWlfY2FuY2VsKC4uLilcbiIpOworCXByaW50ayhLRVJOX0RFQlVHICJwY2w4MTIgRURCRzogQkdOOiBwY2w4MTJfYWlfY2FuY2VsKC4uLilcbiIpOwogI2VuZGlmCiAJaWYgKGRldnByaXYtPmFpX2RtYSkKIAkJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hKTsKIAlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODEyX0NMUklOVCk7CS8qIGNsZWFyIElOVCByZXF1ZXN0ICovCi0Jb3V0YihkZXZwcml2LT5tb2RlX3JlZ19pbnQgfCAwLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9NT0RFKTsJLyogU3RvcCBBL0QgKi8KKwkJCQkJCQkvKiBTdG9wIEEvRCAqLworCW91dGIoZGV2cHJpdi0+bW9kZV9yZWdfaW50IHwgMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfTU9ERSk7CiAJc3RhcnRfcGFjZXIoZGV2LCAtMSwgMCwgMCk7CS8qICBzdG9wIDgyNTQgKi8KIAlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODEyX0NMUklOVCk7CS8qIGNsZWFyIElOVCByZXF1ZXN0ICovCiAjaWZkZWYgUENMODEyX0VYVERFQlVHCi0JcHJpbnRrKCJwY2w4MTIgRURCRzogRU5EOiBwY2w4MTJfYWlfY2FuY2VsKC4uLilcbiIpOworCXByaW50ayhLRVJOX0RFQlVHICJwY2w4MTIgRURCRzogRU5EOiBwY2w4MTJfYWlfY2FuY2VsKC4uLilcbiIpOwogI2VuZGlmCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjcyLDcgKzEzMTksNyBAQAogc3RhdGljIHZvaWQgcGNsODEyX3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAjaWZkZWYgUENMODEyX0VYVERFQlVHCi0JcHJpbnRrKCJwY2w4MTIgRURCRzogQkdOOiBwY2w4MTJfcmVzZXQoLi4uKVxuIik7CisJcHJpbnRrKEtFUk5fREVCVUcgInBjbDgxMiBFREJHOiBCR046IHBjbDgxMl9yZXNldCguLi4pXG4iKTsKICNlbmRpZgogCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfTVVYKTsKIAlvdXRiKDAgKyBkZXZwcml2LT5yYW5nZV9jb3JyZWN0aW9uLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9HQUlOKTsKQEAgLTEzMDQsNyArMTM1MSw3IEBACiAJfQogCXVkZWxheSg1KTsKICNpZmRlZiBQQ0w4MTJfRVhUREVCVUcKLQlwcmludGsoInBjbDgxMiBFREJHOiBFTkQ6IHBjbDgxMl9yZXNldCguLi4pXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGNsODEyIEVEQkc6IEVORDogcGNsODEyX3Jlc2V0KC4uLilcbiIpOwogI2VuZGlmCiB9CiAKQEAgLTEzMjIsOCArMTM2OSw4IEBACiAJaW50IG5fc3ViZGV2aWNlczsKIAogCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOwotCXByaW50aygiY29tZWRpJWQ6IHBjbDgxMjogIGJvYXJkPSVzLCBpb3BvcnQ9MHglMDNseCIsIGRldi0+bWlub3IsCi0JICAgICAgIHRoaXNfYm9hcmQtPm5hbWUsIGlvYmFzZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IHBjbDgxMjogIGJvYXJkPSVzLCBpb3BvcnQ9MHglMDNseCIsCisJICAgICAgIGRldi0+bWlub3IsIHRoaXNfYm9hcmQtPm5hbWUsIGlvYmFzZSk7CiAKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgdGhpc19ib2FyZC0+aW9fcmFuZ2UsICJwY2w4MTIiKSkgewogCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKQEAgLTEzNDUsMTggKzEzOTIsMTggQEAKIAkJaWYgKGlycSkgewkvKiB3ZSB3YW50IHRvIHVzZSBJUlEgKi8KIAkJCWlmICgoKDEgPDwgaXJxKSAmIHRoaXNfYm9hcmQtPklSUWJpdHMpID09IDApIHsKIAkJCQlwcmludGsKLQkJCQkgICAgKCIsIElSUSAldSBpcyBvdXQgb2YgYWxsb3dlZCByYW5nZSwgRElTQUJMSU5HIElUIiwKLQkJCQkgICAgIGlycSk7CisJCQkJICAgICgiLCBJUlEgJXUgaXMgb3V0IG9mIGFsbG93ZWQgcmFuZ2UsICIKKwkJCQkgICAgICJESVNBQkxJTkcgSVQiLCBpcnEpOwogCQkJCWlycSA9IDA7CS8qIEJhZCBJUlEgKi8KIAkJCX0gZWxzZSB7CiAJCQkJaWYgKHJlcXVlc3RfaXJxCiAJCQkJICAgIChpcnEsIGludGVycnVwdF9wY2w4MTIsIDAsICJwY2w4MTIiLCBkZXYpKSB7CiAJCQkJCXByaW50awotCQkJCQkgICAgKCIsIHVuYWJsZSB0byBhbGxvY2F0ZSBJUlEgJXUsIERJU0FCTElORyBJVCIsCi0JCQkJCSAgICAgaXJxKTsKKwkJCQkJICAgICgiLCB1bmFibGUgdG8gYWxsb2NhdGUgSVJRICV1LCAiCisJCQkJCSAgICAgIkRJU0FCTElORyBJVCIsIGlycSk7CiAJCQkJCWlycSA9IDA7CS8qIENhbid0IHVzZSBJUlEgKi8KIAkJCQl9IGVsc2UgewotCQkJCQlwcmludGsoIiwgaXJxPSV1IiwgaXJxKTsKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiLCBpcnE9JXUiLCBpcnEpOwogCQkJCX0KIAkJCX0KIAkJfQpAQCAtMTM3NiwxNiArMTQyMywyMCBAQAogCQl9CiAJCXJldCA9IHJlcXVlc3RfZG1hKGRtYSwgInBjbDgxMiIpOwogCQlpZiAocmV0KSB7Ci0JCQlwcmludGsoIiwgdW5hYmxlIHRvIGFsbG9jYXRlIERNQSAldSwgRkFJTCFcbiIsIGRtYSk7CisJCQlwcmludGsoS0VSTl9FUlIgIiwgdW5hYmxlIHRvIGFsbG9jYXRlIERNQSAldSwgRkFJTCFcbiIsCisJCQkgICAgICAgZG1hKTsKIAkJCXJldHVybiAtRUJVU1k7CS8qIERNQSBpc24ndCBmcmVlICovCiAJCX0KIAkJZGV2cHJpdi0+ZG1hID0gZG1hOwotCQlwcmludGsoIiwgZG1hPSV1IiwgZG1hKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiLCBkbWE9JXUiLCBkbWEpOwogCQlwYWdlcyA9IDE7CS8qIHdlIHdhbnQgOEtCICovCiAJCWRldnByaXYtPmRtYWJ1ZlswXSA9IF9fZ2V0X2RtYV9wYWdlcyhHRlBfS0VSTkVMLCBwYWdlcyk7CiAJCWlmICghZGV2cHJpdi0+ZG1hYnVmWzBdKSB7CiAJCQlwcmludGsoIiwgdW5hYmxlIHRvIGFsbG9jYXRlIERNQSBidWZmZXIsIEZBSUwhXG4iKTsKLQkJCS8qIG1heWJlIGV4cGVyaW1lbnQgd2l0aCB0cnlfdG9fZnJlZV9wYWdlcygpIHdpbGwgaGVscCAuLi4uICovCisJCQkvKgorCQkJICogbWF5YmUgZXhwZXJpbWVudCB3aXRoIHRyeV90b19mcmVlX3BhZ2VzKCkKKwkJCSAqIHdpbGwgaGVscCAuLi4uCisJCQkgKi8KIAkJCWZyZWVfcmVzb3VyY2VzKGRldik7CiAJCQlyZXR1cm4gLUVCVVNZOwkvKiBubyBidWZmZXIgOi0oICovCiAJCX0KQEAgLTEzOTQsNyArMTQ0NSw3IEBACiAJCWRldnByaXYtPmh3ZG1hc2l6ZVswXSA9IFBBR0VfU0laRSAqICgxIDw8IHBhZ2VzKTsKIAkJZGV2cHJpdi0+ZG1hYnVmWzFdID0gX19nZXRfZG1hX3BhZ2VzKEdGUF9LRVJORUwsIHBhZ2VzKTsKIAkJaWYgKCFkZXZwcml2LT5kbWFidWZbMV0pIHsKLQkJCXByaW50aygiLCB1bmFibGUgdG8gYWxsb2NhdGUgRE1BIGJ1ZmZlciwgRkFJTCFcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICIsIHVuYWJsZSB0byBhbGxvY2F0ZSBETUEgYnVmZmVyLCBGQUlMIVxuIik7CiAJCQlmcmVlX3Jlc291cmNlcyhkZXYpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQpAQCAtMTQ1NywxMSArMTUwOCwxMSBAQAogCQlzLT5tYXhkYXRhID0gdGhpc19ib2FyZC0+YWlfbWF4ZGF0YTsKIAkJcy0+bGVuX2NoYW5saXN0ID0gTUFYX0NIQU5MSVNUX0xFTjsKIAkJcy0+cmFuZ2VfdGFibGUgPSB0aGlzX2JvYXJkLT5yYW5nZWxpc3RfYWk7Ci0JCWlmICh0aGlzX2JvYXJkLT5ib2FyZF90eXBlID09IGJvYXJkQUNMODIxNikgeworCQlpZiAodGhpc19ib2FyZC0+Ym9hcmRfdHlwZSA9PSBib2FyZEFDTDgyMTYpCiAJCQlzLT5pbnNuX3JlYWQgPSBhY2w4MjE2X2FpX2luc25fcmVhZDsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJcy0+aW5zbl9yZWFkID0gcGNsODEyX2FpX2luc25fcmVhZDsKLQkJfQorCiAJCWRldnByaXYtPnVzZV9NUEMgPSB0aGlzX2JvYXJkLT5oYXZlTVBDNTA4OwogCQlzLT5jYW5jZWwgPSBwY2w4MTJfYWlfY2FuY2VsOwogCQlpZiAoZGV2LT5pcnEpIHsKQEAgLTE1MDAsOCArMTU1MSw4IEBACiAJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwOwogCQkJCWJyZWFrOwogCQkJCXByaW50awotCQkJCSAgICAoIiwgaW5jb3JyZWN0IHJhbmdlIG51bWJlciAlZCwgY2hhbmdpbmcgdG8gMCAoKy8tMTBWKSIsCi0JCQkJICAgICBpdC0+b3B0aW9uc1s0XSk7CisJCQkJICAgICgiLCBpbmNvcnJlY3QgcmFuZ2UgbnVtYmVyICVkLCBjaGFuZ2luZyAiCisJCQkJICAgICAidG8gMCAoKy8tMTBWKSIsIGl0LT5vcHRpb25zWzRdKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMTUzMCw4ICsxNTgxLDggQEAKIAkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9pc284MTNfMV9haTsKIAkJCQlicmVhazsKIAkJCQlwcmludGsKLQkJCQkgICAgKCIsIGluY29ycmVjdCByYW5nZSBudW1iZXIgJWQsIGNoYW5naW5nIHRvIDAgIiwKLQkJCQkgICAgIGl0LT5vcHRpb25zWzFdKTsKKwkJCQkgICAgKCIsIGluY29ycmVjdCByYW5nZSBudW1iZXIgJWQsICIKKwkJCQkgICAgICJjaGFuZ2luZyB0byAwICIsIGl0LT5vcHRpb25zWzFdKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMTU1NSw4ICsxNjA2LDggQEAKIAkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9hY2w4MTEzXzFfYWk7CiAJCQkJYnJlYWs7CiAJCQkJcHJpbnRrCi0JCQkJICAgICgiLCBpbmNvcnJlY3QgcmFuZ2UgbnVtYmVyICVkLCBjaGFuZ2luZyB0byAwICIsCi0JCQkJICAgICBpdC0+b3B0aW9uc1sxXSk7CisJCQkJICAgICgiLCBpbmNvcnJlY3QgcmFuZ2UgbnVtYmVyICVkLCAiCisJCQkJICAgICAiY2hhbmdpbmcgdG8gMCAiLCBpdC0+b3B0aW9uc1sxXSk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlicmVhazsKQEAgLTE2MjcsNyArMTY3OCw4IEBACiAJY2FzZSBib2FyZEFDTDgxMTI6CiAJCWRldnByaXYtPm1heF84MTJfYWlfbW9kZTBfcmFuZ2V3YWl0ID0gMTsKIAkJaWYgKGl0LT5vcHRpb25zWzNdID4gMCkKLQkJCWRldnByaXYtPnVzZV9leHRfdHJnID0gMTsJLyogIHdlIHVzZSBleHRlcm5hbCB0cmlnZ2VyICovCisJCQkJCQkvKiAgd2UgdXNlIGV4dGVybmFsIHRyaWdnZXIgKi8KKwkJCWRldnByaXYtPnVzZV9leHRfdHJnID0gMTsKIAljYXNlIGJvYXJkQTgyMToKIAkJZGV2cHJpdi0+bWF4XzgxMl9haV9tb2RlMF9yYW5nZXdhaXQgPSAxOwogCQlkZXZwcml2LT5tb2RlX3JlZ19pbnQgPSAoaXJxIDw8IDQpICYgMHhmMDsKQEAgLTE2MzYsMTEgKzE2ODgsMTIgQEAKIAljYXNlIGJvYXJkUENMODEzOgogCWNhc2UgYm9hcmRJU084MTM6CiAJY2FzZSBib2FyZEFDTDgxMTM6Ci0JCWRldnByaXYtPm1heF84MTJfYWlfbW9kZTBfcmFuZ2V3YWl0ID0gNTsJLyogbWF5YmUgdGhlcmUgbXVzdCBieSBncmVhdGVzdCB0aW1lb3V0ICovCisJCS8qIG1heWJlIHRoZXJlIG11c3QgYnkgZ3JlYXRlc3QgdGltZW91dCAqLworCQlkZXZwcml2LT5tYXhfODEyX2FpX21vZGUwX3Jhbmdld2FpdCA9IDU7CiAJCWJyZWFrOwogCX0KIAotCXByaW50aygiXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJcbiIpOwogCWRldnByaXYtPnZhbGlkID0gMTsKIAogCXBjbDgxMl9yZXNldChkZXYpOwpAQCAtMTY1NSw4ICsxNzA4LDEyIEBACiB7CiAKICNpZmRlZiBQQ0w4MTJfRVhUREVCVUcKLQlwcmludGsoImNvbWVkaSVkOiBwY2w4MTI6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaSVkOiBwY2w4MTI6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CiAjZW5kaWYKIAlmcmVlX3Jlc291cmNlcyhkZXYpOwogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE2LmMKaW5kZXggNzFjMmEzYS4uM2QwZjAxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxNi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTYuYwpAQCAtMiw3ICsyLDcgQEAKICAgIGNvbWVkaS9kcml2ZXJzL3BjbDgxNi5jCiAKICAgIEF1dGhvcjogIEp1YW4gR3JpZ2VyYSA8anVhbkBncmlnZXJhLmNvbS5hcj4KLSAgICAgICAgICAgIGJhc2VkIG9uIHBjbDgxOCBieSBNaWNoYWwgRG9iZXMgPGRvYmVzQHRlc25ldC5jej4gYW5kIGJpdHMgb2YgcGNsODEyCisJICAgIGJhc2VkIG9uIHBjbDgxOCBieSBNaWNoYWwgRG9iZXMgPGRvYmVzQHRlc25ldC5jej4gYW5kIGJpdHMgb2YgcGNsODEyCiAKICAgIGhhcmR3YXJlIGRyaXZlciBmb3IgQWR2YW50ZWNoIGNhcmRzOgogICAgIGNhcmQ6ICAgUENMLTgxNiwgUENMODE0QgpAQCAtMjgsNyArMjgsNyBAQAogICBbMV0gLSBJUlEJKDA9ZGlzYWJsZSwgMiwgMywgNCwgNSwgNiwgNykKICAgWzJdIC0gRE1BCSgwPWRpc2FibGUsIDEsIDMpCiAgIFszXSAtIDAsIDEwPTEwTUh6IGNsb2NrIGZvciA4MjU0Ci0gICAgICAgICAgICAxPSAxTUh6IGNsb2NrIGZvciA4MjU0CisJICAgIDE9IDFNSHogY2xvY2sgZm9yIDgyNTQKIAogKi8KIApAQCAtODUsNyArODUsNyBAQAogI2RlZmluZSBJTlRfVFlQRV9BSTNfRE1BX1JUQyAxMAogCiAvKiBSVEMgc3R1ZmYuLi4gKi8KLSNkZWZpbmUgUlRDX0lSUSAJOAorI2RlZmluZSBSVENfSVJRCQk4CiAjZGVmaW5lIFJUQ19JT19FWFRFTlQJMHgxMAogI2VuZGlmCiAKQEAgLTE2OCw3ICsxNjgsMTggQEAKIAkub2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBwY2w4MTZfYm9hcmQpLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2w4MTYpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX3BjbDgxNl9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfcGNsODE2KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9wY2w4MTZfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9wY2w4MTYpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfcGNsODE2X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9wY2w4MTZfY2xlYW51cF9tb2R1bGUpOwogCiBzdHJ1Y3QgcGNsODE2X3ByaXZhdGUgewogCkBAIC0yNTMsNyArMjY0LDggQEAKIAogCS8qICBTZXQgdGhlIGlucHV0IGNoYW5uZWwgKi8KIAlvdXRiKENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpICYgMHhmLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9NVVgpOwotCW91dGIoQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9SQU5HRSk7CS8qIHNlbGVjdCBnYWluICovCisJLyogc2VsZWN0IGdhaW4gKi8KKwlvdXRiKENSX1JBTkdFKGluc24tPmNoYW5zcGVjKSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfUkFOR0UpOwogCiAJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgewogCkBAIC0yNjgsOCArMjgwLDggQEAKIAkJCQkgICAgKChpbmIoZGV2LT5pb2Jhc2UgKwogCQkJCQkgIFBDTDgxNl9BRF9ISSkgPDwgOCkgfAogCQkJCSAgICAgKGluYihkZXYtPmlvYmFzZSArIFBDTDgxNl9BRF9MTykpKTsKLQotCQkJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ0xSSU5UKTsJLyogY2xlYXIgSU5UIChjb252ZXJzaW9uIGVuZCkgZmxhZyAqLworCQkJCS8qIGNsZWFyIElOVCAoY29udmVyc2lvbiBlbmQpIGZsYWcgKi8KKwkJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE2X0NMUklOVCk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQl1ZGVsYXkoMSk7CkBAIC0yNzgsNyArMjkwLDggQEAKIAkJaWYgKCF0aW1lb3V0KSB7CiAJCQljb21lZGlfZXJyb3IoZGV2LCAiQS9EIGluc24gdGltZW91dFxuIik7CiAJCQlkYXRhWzBdID0gMDsKLQkJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ0xSSU5UKTsJLyogY2xlYXIgSU5UIChjb252ZXJzaW9uIGVuZCkgZmxhZyAqLworCQkJLyogY2xlYXIgSU5UIChjb252ZXJzaW9uIGVuZCkgZmxhZyAqLworCQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DTFJJTlQpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIApAQCAtMzMyLDcgKzM0NSw4IEBACiAJfQogCiAJaWYgKCFkZXZwcml2LT5haV9uZXZlcmVuZGluZykKLQkJaWYgKGRldnByaXYtPmFpX2FjdF9zY2FuID49IGRldnByaXYtPmFpX3NjYW5zKSB7CS8qIGFsbCBkYXRhIHNhbXBsZWQgKi8KKwkJCQkJLyogYWxsIGRhdGEgc2FtcGxlZCAqLworCQlpZiAoZGV2cHJpdi0+YWlfYWN0X3NjYW4gPj0gZGV2cHJpdi0+YWlfc2NhbnMpIHsKIAkJCS8qIGFsbCBkYXRhIHNhbXBsZWQgKi8KIAkJCXBjbDgxNl9haV9jYW5jZWwoZGV2LCBzKTsKIAkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKQEAgLTM2OSw3ICszODMsOCBAQAogCQl9CiAKIAkJaWYgKCFkZXZwcml2LT5haV9uZXZlcmVuZGluZykKLQkJCWlmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA+PSBkZXZwcml2LT5haV9zY2FucykgewkvKiAgYWxsIGRhdGEgc2FtcGxlZCAqLworCQkJCQkJLyogIGFsbCBkYXRhIHNhbXBsZWQgKi8KKwkJCWlmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA+PSBkZXZwcml2LT5haV9zY2FucykgewogCQkJCXBjbDgxNl9haV9jYW5jZWwoZGV2LCBzKTsKIAkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CiAJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfQkxPQ0s7CkBAIC0zOTEsNyArNDA2LDggQEAKIAlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWEpOwogCXRoaXNfZG1hX2J1ZiA9IGRldnByaXYtPm5leHRfZG1hX2J1ZjsKIAotCWlmICgoZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kID4gLTEpIHx8IGRldnByaXYtPmFpX25ldmVyZW5kaW5nKSB7CS8qICBzd2l0Y2ggZG1hIGJ1ZnMgKi8KKwkvKiAgc3dpdGNoIGRtYSBidWZzICovCisJaWYgKChkZXZwcml2LT5kbWFfcnVuc190b19lbmQgPiAtMSkgfHwgZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcpIHsKIAogCQlkZXZwcml2LT5uZXh0X2RtYV9idWYgPSAxIC0gZGV2cHJpdi0+bmV4dF9kbWFfYnVmOwogCQlzZXRfZG1hX21vZGUoZGV2cHJpdi0+ZG1hLCBETUFfTU9ERV9SRUFEKTsKQEAgLTQ2NywxNCArNDgzLDE0IEBACiAqLwogc3RhdGljIHZvaWQgcGNsODE2X2NtZHRlc3Rfb3V0KGludCBlLCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQogewotCXByaW50aygicGNsODE2IGU9JWQgc3RhcnRzcmM9JXggc2NhbnNyYz0leCBjb252c3JjPSV4XG4iLCBlLAorCXByaW50ayhLRVJOX0lORk8gInBjbDgxNiBlPSVkIHN0YXJ0c3JjPSV4IHNjYW5zcmM9JXggY29udnNyYz0leFxuIiwgZSwKIAkgICAgICAgY21kLT5zdGFydF9zcmMsIGNtZC0+c2Nhbl9iZWdpbl9zcmMsIGNtZC0+Y29udmVydF9zcmMpOwotCXByaW50aygicGNsODE2IGU9JWQgc3RhcnRhcmc9JWQgc2NhbmFyZz0lZCBjb252YXJnPSVkXG4iLCBlLAorCXByaW50ayhLRVJOX0lORk8gInBjbDgxNiBlPSVkIHN0YXJ0YXJnPSVkIHNjYW5hcmc9JWQgY29udmFyZz0lZFxuIiwgZSwKIAkgICAgICAgY21kLT5zdGFydF9hcmcsIGNtZC0+c2Nhbl9iZWdpbl9hcmcsIGNtZC0+Y29udmVydF9hcmcpOwotCXByaW50aygicGNsODE2IGU9JWQgc3RvcHNyYz0leCBzY2FuZW5kPSV4XG4iLCBlLCBjbWQtPnN0b3Bfc3JjLAotCSAgICAgICBjbWQtPnNjYW5fZW5kX3NyYyk7Ci0JcHJpbnRrKCJwY2w4MTYgZT0lZCBzdG9wYXJnPSVkIHNjYW5lbmRhcmc9JWQgY2hhbmxpc3RsZW49JWRcbiIsIGUsCi0JICAgICAgIGNtZC0+c3RvcF9hcmcsIGNtZC0+c2Nhbl9lbmRfYXJnLCBjbWQtPmNoYW5saXN0X2xlbik7CisJcHJpbnRrKEtFUk5fSU5GTyAicGNsODE2IGU9JWQgc3RvcHNyYz0leCBzY2FuZW5kPSV4XG4iLCBlLAorCSAgICAgICBjbWQtPnN0b3Bfc3JjLCBjbWQtPnNjYW5fZW5kX3NyYyk7CisJcHJpbnRrKEtFUk5fSU5GTyAicGNsODE2IGU9JWQgc3RvcGFyZz0lZCBzY2FuZW5kYXJnPSVkIGNoYW5saXN0bGVuPSVkXG4iLAorCSAgICAgICBlLCBjbWQtPnN0b3BfYXJnLCBjbWQtPnNjYW5fZW5kX2FyZywgY21kLT5jaGFubGlzdF9sZW4pOwogfQogCiAvKgpAQCAtNDg2LDggKzUwMiw5IEBACiAJaW50IGVyciA9IDA7CiAJaW50IHRtcCwgZGl2aXNvcjEgPSAwLCBkaXZpc29yMiA9IDA7CiAKLQlERUJVRyhwcmludGsoInBjbDgxNiBwY2w4MTJfYWlfY21kdGVzdFxuIik7IHBjbDgxNl9jbWR0ZXN0X291dCgtMSwgY21kKTsKLQkgICAgKTsKKwlERUJVRyhwcmludGsoS0VSTl9JTkZPICJwY2w4MTYgcGNsODEyX2FpX2NtZHRlc3RcbiIpOworCSAgICAgIHBjbDgxNl9jbWR0ZXN0X291dCgtMSwgY21kKTsKKwkgICAgICk7CiAKIAkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLwogCXRtcCA9IGNtZC0+c3RhcnRfc3JjOwpAQCAtNTE1LDExICs1MzIsMTQgQEAKIAlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCiAJCWVycisrOwogCi0JaWYgKGVycikgeworCWlmIChlcnIpCiAJCXJldHVybiAxOwotCX0KIAotCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwkvKgorCSAqIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcworCSAqIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUKKwkgKi8KIAogCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVykgewogCQljbWQtPnN0YXJ0X3NyYyA9IFRSSUdfTk9XOwpAQCAtNTQ0LDkgKzU2NCw5IEBACiAJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCkKIAkJZXJyKys7CiAKLQlpZiAoZXJyKSB7CisJaWYgKGVycikKIAkJcmV0dXJuIDI7Ci0JfQorCiAKIAkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCiAJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKQEAgLTU4Niw5ICs2MDYsOSBAQAogCQl9CiAJfQogCi0JaWYgKGVycikgeworCWlmIChlcnIpCiAJCXJldHVybiAzOwotCX0KKwogCiAJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLwogCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKQEAgLTYwMyw5ICs2MjMsOSBAQAogCQkJZXJyKys7CiAJfQogCi0JaWYgKGVycikgeworCWlmIChlcnIpCiAJCXJldHVybiA0OwotCX0KKwogCiAJLyogc3RlcCA1OiBjb21wbGFpbiBhYm91dCBzcGVjaWFsIGNoYW5saXN0IGNvbnNpZGVyYXRpb25zICovCiAKQEAgLTY0Myw3ICs2NjMsOSBAQAogCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKHRoaXNfYm9hcmQtPmk4MjU0X29zY19iYXNlLCAmZGl2aXNvcjEsCiAJCQkJCSAgJmRpdmlzb3IyLCAmY21kLT5jb252ZXJ0X2FyZywKIAkJCQkJICBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKLQkJaWYgKGRpdmlzb3IxID09IDEpIHsJLyogIFBDTDgxNiBjcmFzaCBpZiBhbnkgZGl2aXNvciBpcyBzZXQgdG8gMSAqLworCisJCS8qICBQQ0w4MTYgY3Jhc2ggaWYgYW55IGRpdmlzb3IgaXMgc2V0IHRvIDEgKi8KKwkJaWYgKGRpdmlzb3IxID09IDEpIHsKIAkJCWRpdmlzb3IxID0gMjsKIAkJCWRpdmlzb3IyIC89IDI7CiAJCX0KQEAgLTY3Niw4ICs2OTgsMTAgQEAKIAkJZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcgPSAxOwogCX0KIAotCWlmICgoY21kLT5mbGFncyAmIFRSSUdfV0FLRV9FT1MpKSB7CS8qICBkb24ndCB3ZSB3YW50IHdha2UgdXAgZXZlcnkgc2Nhbj8gKi8KLQkJcHJpbnRrKCJwbDgxNjogWW91IHdhbmt0IFdBS0VfRU9TIGJ1dCBJIGRvbnQgd2FudCBoYW5kbGUgaXQiKTsKKwkvKiAgZG9uJ3Qgd2Ugd2FudCB3YWtlIHVwIGV2ZXJ5IHNjYW4/ICovCisJaWYgKChjbWQtPmZsYWdzICYgVFJJR19XQUtFX0VPUykpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgInBsODE2OiBZb3Ugd2Fua3QgV0FLRV9FT1MgYnV0IEkgZG9udCB3YW50IGhhbmRsZSBpdCIpOwogCQkvKiAgICAgICAgICAgICAgIGRldnByaXYtPmFpX2Vvcz0xOyAqLwogCQkvKiBpZiAoZGV2cHJpdi0+YWlfbl9jaGFuPT0xKSAqLwogCQkvKiAgICAgICBkZXZwcml2LT5kbWE9MDsgLy8gRE1BIGlzIHVzZWxlc3MgZm9yIHRoaXMgc2l0dWF0aW9uICovCkBAIC02ODYsOSArNzEwLDE3IEBACiAJaWYgKGRldnByaXYtPmRtYSkgewogCQlieXRlcyA9IGRldnByaXYtPmh3ZG1hc2l6ZVswXTsKIAkJaWYgKCFkZXZwcml2LT5haV9uZXZlcmVuZGluZykgewotCQkJYnl0ZXMgPSBzLT5hc3luYy0+Y21kLmNoYW5saXN0X2xlbiAqIHMtPmFzeW5jLT5jbWQuY2hhbmxpc3RfbGVuICogc2l6ZW9mKHNob3J0KTsJLyogIGhvdyBtYW55ICovCi0JCQlkZXZwcml2LT5kbWFfcnVuc190b19lbmQgPSBieXRlcyAvIGRldnByaXYtPmh3ZG1hc2l6ZVswXTsJLyogIGhvdyBtYW55IERNQSBwYWdlcyB3ZSBtdXN0IGZpbGwgKi8KLQkJCWRldnByaXYtPmxhc3RfZG1hX3J1biA9IGJ5dGVzICUgZGV2cHJpdi0+aHdkbWFzaXplWzBdOwkvKiBvbiBsYXN0IGRtYSB0cmFuc2ZlciBtdXN0IGJlIG1vdmVkICovCisJCQkvKiAgaG93IG1hbnkgKi8KKwkJCWJ5dGVzID0gcy0+YXN5bmMtPmNtZC5jaGFubGlzdF9sZW4gKgorCQkJcy0+YXN5bmMtPmNtZC5jaGFubGlzdF9sZW4gKgorCQkJc2l6ZW9mKHNob3J0KTsKKworCQkJLyogIGhvdyBtYW55IERNQSBwYWdlcyB3ZSBtdXN0IGZpbGwgKi8KKwkJCWRldnByaXYtPmRtYV9ydW5zX3RvX2VuZCA9IGJ5dGVzIC8KKwkJCWRldnByaXYtPmh3ZG1hc2l6ZVswXTsKKworCQkJLyogb24gbGFzdCBkbWEgdHJhbnNmZXIgbXVzdCBiZSBtb3ZlZCAqLworCQkJZGV2cHJpdi0+bGFzdF9kbWFfcnVuID0gYnl0ZXMgJSBkZXZwcml2LT5od2RtYXNpemVbMF07CiAJCQlkZXZwcml2LT5kbWFfcnVuc190b19lbmQtLTsKIAkJCWlmIChkZXZwcml2LT5kbWFfcnVuc190b19lbmQgPj0gMCkKIAkJCQlieXRlcyA9IGRldnByaXYtPmh3ZG1hc2l6ZVswXTsKQEAgLTcxMSwxNCArNzQzLDIyIEBACiAJc3dpdGNoIChjbWQtPmNvbnZlcnRfc3JjKSB7CiAJY2FzZSBUUklHX1RJTUVSOgogCQlkZXZwcml2LT5pbnQ4MTZfbW9kZSA9IElOVF9UWVBFX0FJMV9ETUE7Ci0JCW91dGIoMHgzMiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ09OVFJPTCk7CS8qICBQYWNlcitJUlErRE1BICovCi0JCW91dGIoZG1haXJxLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9TVEFUVVMpOwkvKiAgd3JpdGUgaXJxIGFuZCBETUEgdG8gY2FyZCAqLworCisJCS8qICBQYWNlcitJUlErRE1BICovCisJCW91dGIoMHgzMiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ09OVFJPTCk7CisKKwkJLyogIHdyaXRlIGlycSBhbmQgRE1BIHRvIGNhcmQgKi8KKwkJb3V0YihkbWFpcnEsIGRldi0+aW9iYXNlICsgUENMODE2X1NUQVRVUyk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKIAkJZGV2cHJpdi0+aW50ODE2X21vZGUgPSBJTlRfVFlQRV9BSTNfRE1BOwotCQlvdXRiKDB4MzQsIGRldi0+aW9iYXNlICsgUENMODE2X0NPTlRST0wpOwkvKiAgRXh0IHRyaWcrSVJRK0RNQSAqLwotCQlvdXRiKGRtYWlycSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfU1RBVFVTKTsJLyogIHdyaXRlIGlycSB0byBjYXJkICovCisKKwkJLyogIEV4dCB0cmlnK0lSUStETUEgKi8KKwkJb3V0YigweDM0LCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DT05UUk9MKTsKKworCQkvKiAgd3JpdGUgaXJxIHRvIGNhcmQgKi8KKwkJb3V0YihkbWFpcnEsIGRldi0+aW9iYXNlICsgUENMODE2X1NUQVRVUyk7CiAJCWJyZWFrOwogCX0KIApAQCAtNzQ3LDcgKzc4Nyw4IEBACiAJCXJldHVybiAwOwogCX0KIAotCXRvcDEgPSBkZXZwcml2LT5od2RtYXNpemVbMF0gLSB0b3AxOwkvKiAgd2hlcmUgaXMgbm93IERNQSBpbiBidWZmZXIgKi8KKwkvKiAgd2hlcmUgaXMgbm93IERNQSBpbiBidWZmZXIgKi8KKwl0b3AxID0gZGV2cHJpdi0+aHdkbWFzaXplWzBdIC0gdG9wMTsKIAl0b3AxID4+PSAxOwkJLyogIHNhbXBsZSBwb3NpdGlvbiAqLwogCXRvcDIgPSB0b3AxIC0gZGV2cHJpdi0+YWlfcG9sbF9wdHI7CiAJaWYgKHRvcDIgPCAxKSB7CQkvKiAgbm8gbmV3IHNhbXBsZXMgKi8KQEAgLTc4NywxNiArODI4LDIzIEBACiAJCQlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWEpOwogCQljYXNlIElOVF9UWVBFX0FJMV9JTlQ6CiAJCWNhc2UgSU5UX1RZUEVfQUkzX0lOVDoKLQkJCW91dGIoaW5iKGRldi0+aW9iYXNlICsgUENMODE2X0NPTlRST0wpICYgMHg3MywgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ09OVFJPTCk7CS8qIFN0b3AgQS9EICovCisJCQlvdXRiKGluYihkZXYtPmlvYmFzZSArIFBDTDgxNl9DT05UUk9MKSAmIDB4NzMsCisJCQkgICAgIGRldi0+aW9iYXNlICsgUENMODE2X0NPTlRST0wpOwkvKiBTdG9wIEEvRCAqLwogCQkJdWRlbGF5KDEpOwogCQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DT05UUk9MKTsJLyogU3RvcCBBL0QgKi8KLQkJCW91dGIoMHhiMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ1RSQ1RMKTsJLyogU3RvcCBwYWNlciAqLworCisJCQkvKiBTdG9wIHBhY2VyICovCisJCQlvdXRiKDB4YjAsIGRldi0+aW9iYXNlICsgUENMODE2X0NUUkNUTCk7CiAJCQlvdXRiKDB4NzAsIGRldi0+aW9iYXNlICsgUENMODE2X0NUUkNUTCk7CiAJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE2X0FEX0xPKTsKIAkJCWluYihkZXYtPmlvYmFzZSArIFBDTDgxNl9BRF9MTyk7CiAJCQlpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQURfSEkpOwotCQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DTFJJTlQpOwkvKiBjbGVhciBJTlQgcmVxdWVzdCAqLwotCQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DT05UUk9MKTsJLyogU3RvcCBBL0QgKi8KKworCQkJLyogY2xlYXIgSU5UIHJlcXVlc3QgKi8KKwkJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ0xSSU5UKTsKKworCQkJLyogU3RvcCBBL0QgKi8KKwkJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ09OVFJPTCk7CiAJCQlkZXZwcml2LT5pcnFfYmxvY2tlZCA9IDA7CiAJCQlkZXZwcml2LT5pcnFfd2FzX25vd19jbG9zZWQgPSBkZXZwcml2LT5pbnQ4MTZfbW9kZTsKIAkJCWRldnByaXYtPmludDgxNl9tb2RlID0gMDsKQEAgLTg2Niw4ICs5MTQsMTEgQEAKIAlvdXRiKDB4ZmYsIGRldi0+aW9iYXNlICsgUENMODE2X0NUUjApOwogCW91dGIoMHgwMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ1RSMCk7CiAJdWRlbGF5KDEpOwotCW91dGIoMHhiNCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ1RSQ1RMKTsJLyogIHNldCBjb3VudGVyIDIgYXMgbW9kZSAzICovCi0Jb3V0YigweDc0LCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DVFJDVEwpOwkvKiAgc2V0IGNvdW50ZXIgMSBhcyBtb2RlIDMgKi8KKworCS8qICBzZXQgY291bnRlciAyIGFzIG1vZGUgMyAqLworCW91dGIoMHhiNCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ1RSQ1RMKTsKKwkvKiAgc2V0IGNvdW50ZXIgMSBhcyBtb2RlIDMgKi8KKwlvdXRiKDB4NzQsIGRldi0+aW9iYXNlICsgUENMODE2X0NUUkNUTCk7CiAJdWRlbGF5KDEpOwogCiAJaWYgKG1vZGUgPT0gMSkgewpAQCAtOTAzLDQxICs5NTQsNTEgQEAKIAl9CiAKIAlpZiAoY2hhbmxlbiA+IDEpIHsKLQkJY2hhbnNlZ21lbnRbMF0gPSBjaGFubGlzdFswXTsJLyogIGZpcnN0IGNoYW5uZWwgaXMgZXZlcnl0aW1lIG9rICovCisJCS8qICBmaXJzdCBjaGFubmVsIGlzIGV2ZXJ5dGltZSBvayAqLworCQljaGFuc2VnbWVudFswXSA9IGNoYW5saXN0WzBdOwogCQlmb3IgKGkgPSAxLCBzZWdsZW4gPSAxOyBpIDwgY2hhbmxlbjsgaSsrLCBzZWdsZW4rKykgewogCQkJLyogIGJ1aWxkIHBhcnQgb2YgY2hhbmxpc3QgKi8KLQkJCURFQlVHKHByaW50aygiJWQuICVkICVkXG4iLCBpLCBDUl9DSEFOKGNoYW5saXN0W2ldKSwKKwkJCURFQlVHKHByaW50ayhLRVJOX0lORk8gIiVkLiAlZCAlZFxuIiwgaSwKKwkJCQkgICAgIENSX0NIQU4oY2hhbmxpc3RbaV0pLAogCQkJCSAgICAgQ1JfUkFOR0UoY2hhbmxpc3RbaV0pKTspCisKKwkJCS8qICB3ZSBkZXRlY3QgbG9vcCwgdGhpcyBtdXN0IGJ5IGZpbmlzaCAqLwogCQkJICAgIGlmIChjaGFubGlzdFswXSA9PSBjaGFubGlzdFtpXSkKLQkJCQlicmVhazsJLyogIHdlIGRldGVjdCBsb29wLCB0aGlzIG11c3QgYnkgZmluaXNoICovCisJCQkJYnJlYWs7CiAJCQlub3dtdXN0YmVjaGFuID0KIAkJCSAgICAoQ1JfQ0hBTihjaGFuc2VnbWVudFtpIC0gMV0pICsgMSkgJSBjaGFubGVuOwogCQkJaWYgKG5vd211c3RiZWNoYW4gIT0gQ1JfQ0hBTihjaGFubGlzdFtpXSkpIHsKIAkJCQkvKiAgY2hhbm5lbCBsaXN0IGlzbid0IGNvbnRpbm91cyA6LSggKi8KLQkJCQlwcmludGsKLQkJCQkgICAgKCJjb21lZGklZDogcGNsODE2OiBjaGFubmVsIGxpc3QgbXVzdCBiZSBjb250aW5vdXMhIGNoYW5saXN0WyVpXT0lZCBidXQgbXVzdCBiZSAlZCBvciAlZCFcbiIsCi0JCQkJICAgICBkZXYtPm1pbm9yLCBpLCBDUl9DSEFOKGNoYW5saXN0W2ldKSwKLQkJCQkgICAgIG5vd211c3RiZWNoYW4sIENSX0NIQU4oY2hhbmxpc3RbMF0pKTsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgICAgICJjb21lZGklZDogcGNsODE2OiBjaGFubmVsIGxpc3QgbXVzdCAiCisJCQkJICAgICAgICJiZSBjb250aW5vdXMhIGNoYW5saXN0WyVpXT0lZCBidXQgIgorCQkJCSAgICAgICAibXVzdCBiZSAlZCBvciAlZCFcbiIsIGRldi0+bWlub3IsCisJCQkJICAgICAgIGksIENSX0NIQU4oY2hhbmxpc3RbaV0pLCBub3dtdXN0YmVjaGFuLAorCQkJCSAgICAgICBDUl9DSEFOKGNoYW5saXN0WzBdKSk7CiAJCQkJcmV0dXJuIDA7CiAJCQl9Ci0JCQljaGFuc2VnbWVudFtpXSA9IGNoYW5saXN0W2ldOwkvKiAgd2VsbCwgdGhpcyBpcyBuZXh0IGNvcnJlY3QgY2hhbm5lbCBpbiBsaXN0ICovCisJCQkvKiAgd2VsbCwgdGhpcyBpcyBuZXh0IGNvcnJlY3QgY2hhbm5lbCBpbiBsaXN0ICovCisJCQljaGFuc2VnbWVudFtpXSA9IGNoYW5saXN0W2ldOwogCQl9CiAKLQkJZm9yIChpID0gMCwgc2VncG9zID0gMDsgaSA8IGNoYW5sZW47IGkrKykgewkvKiAgY2hlY2sgd2hvbGUgY2hhbmxpc3QgKi8KKwkJLyogIGNoZWNrIHdob2xlIGNoYW5saXN0ICovCisJCWZvciAoaSA9IDAsIHNlZ3BvcyA9IDA7IGkgPCBjaGFubGVuOyBpKyspIHsKIAkJCURFQlVHKHByaW50aygiJWQgJWQ9JWQgJWRcbiIsCiAJCQkJICAgICBDUl9DSEFOKGNoYW5zZWdtZW50W2kgJSBzZWdsZW5dKSwKIAkJCQkgICAgIENSX1JBTkdFKGNoYW5zZWdtZW50W2kgJSBzZWdsZW5dKSwKIAkJCQkgICAgIENSX0NIQU4oY2hhbmxpc3RbaV0pLAogCQkJCSAgICAgQ1JfUkFOR0UoY2hhbmxpc3RbaV0pKTspCiAJCQkgICAgaWYgKGNoYW5saXN0W2ldICE9IGNoYW5zZWdtZW50W2kgJSBzZWdsZW5dKSB7Ci0JCQkJcHJpbnRrCi0JCQkJICAgICgiY29tZWRpJWQ6IHBjbDgxNjogYmFkIGNoYW5uZWwgb3IgcmFuZ2UgbnVtYmVyISBjaGFubGlzdFslaV09JWQsJWQsJWQgYW5kIG5vdCAlZCwlZCwlZCFcbiIsCi0JCQkJICAgICBkZXYtPm1pbm9yLCBpLCBDUl9DSEFOKGNoYW5zZWdtZW50W2ldKSwKLQkJCQkgICAgIENSX1JBTkdFKGNoYW5zZWdtZW50W2ldKSwKLQkJCQkgICAgIENSX0FSRUYoY2hhbnNlZ21lbnRbaV0pLAotCQkJCSAgICAgQ1JfQ0hBTihjaGFubGlzdFtpICUgc2VnbGVuXSksCi0JCQkJICAgICBDUl9SQU5HRShjaGFubGlzdFtpICUgc2VnbGVuXSksCi0JCQkJICAgICBDUl9BUkVGKGNoYW5zZWdtZW50W2kgJSBzZWdsZW5dKSk7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSAgICAgICAiY29tZWRpJWQ6IHBjbDgxNjogYmFkIGNoYW5uZWwgb3IgcmFuZ2UiCisJCQkJICAgICAgICIgbnVtYmVyISBjaGFubGlzdFslaV09JWQsJWQsJWQgYW5kIG5vdCIKKwkJCQkgICAgICAgIiAlZCwlZCwlZCFcbiIsIGRldi0+bWlub3IsIGksCisJCQkJICAgICAgIENSX0NIQU4oY2hhbnNlZ21lbnRbaV0pLAorCQkJCSAgICAgICBDUl9SQU5HRShjaGFuc2VnbWVudFtpXSksCisJCQkJICAgICAgIENSX0FSRUYoY2hhbnNlZ21lbnRbaV0pLAorCQkJCSAgICAgICBDUl9DSEFOKGNoYW5saXN0W2kgJSBzZWdsZW5dKSwKKwkJCQkgICAgICAgQ1JfUkFOR0UoY2hhbmxpc3RbaSAlIHNlZ2xlbl0pLAorCQkJCSAgICAgICBDUl9BUkVGKGNoYW5zZWdtZW50W2kgJSBzZWdsZW5dKSk7CiAJCQkJcmV0dXJuIDA7CS8qICBjaGFuL2dhaW4gbGlzdCBpcyBzdHJhbmdlICovCiAJCQl9CiAJCX0KQEAgLTk2NSwxMiArMTAyNiwxNSBAQAogCWZvciAoaSA9IDA7IGkgPCBzZWdsZW47IGkrKykgewkvKiAgc3RvcmUgcmFuZ2UgbGlzdCB0byBjYXJkICovCiAJCWRldnByaXYtPmFpX2FjdF9jaGFubGlzdFtpXSA9IENSX0NIQU4oY2hhbmxpc3RbaV0pOwogCQlvdXRiKENSX0NIQU4oY2hhbmxpc3RbMF0pICYgMHhmLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9NVVgpOwotCQlvdXRiKENSX1JBTkdFKGNoYW5saXN0WzBdKSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfUkFOR0UpOwkvKiBzZWxlY3QgZ2FpbiAqLworCQkvKiBzZWxlY3QgZ2FpbiAqLworCQlvdXRiKENSX1JBTkdFKGNoYW5saXN0WzBdKSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfUkFOR0UpOwogCX0KIAogCXVkZWxheSgxKTsKLQotCW91dGIoZGV2cHJpdi0+YWlfYWN0X2NoYW5saXN0WzBdIHwgKGRldnByaXYtPmFpX2FjdF9jaGFubGlzdFtzZWdsZW4gLSAxXSA8PCA0KSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfTVVYKTsJLyogc2VsZWN0IGNoYW5uZWwgaW50ZXJ2YWwgdG8gc2NhbiAqLworCS8qIHNlbGVjdCBjaGFubmVsIGludGVydmFsIHRvIHNjYW4gKi8KKwlvdXRiKGRldnByaXYtPmFpX2FjdF9jaGFubGlzdFswXSB8CisJICAgICAoZGV2cHJpdi0+YWlfYWN0X2NoYW5saXN0W3NlZ2xlbiAtIDFdIDw8IDQpLAorCSAgICAgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfTVVYKTsKIH0KIAogI2lmZGVmIHVudXNlZApAQCAtOTk4LDExICsxMDYyLDExIEBACiAJc2F2ZV9mbGFncyhmbGFncyk7CiAJY2xpKCk7CiAJdmFsID0gQ01PU19SRUFEKFJUQ19DT05UUk9MKTsKLQlpZiAoYml0KSB7CisJaWYgKGJpdCkKIAkJdmFsIHw9IFJUQ19QSUU7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCXZhbCAmPSB+UlRDX1BJRTsKLQl9CisKIAlDTU9TX1dSSVRFKHZhbCwgUlRDX0NPTlRST0wpOwogCUNNT1NfUkVBRChSVENfSU5UUl9GTEFHUyk7CiAJcmVzdG9yZV9mbGFncyhmbGFncyk7CkBAIC0xMDcyLDcgKzExMzYsNyBAQAogCWRldi0+aW9iYXNlID0gaW9iYXNlOwogCiAJaWYgKHBjbDgxNl9jaGVjayhpb2Jhc2UpKSB7Ci0JCXByaW50aygiLCBJIGNhbm4ndCBkZXRlY3QgYm9hcmQuIEZBSUwhXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIsIEkgY2Fubid0IGRldGVjdCBib2FyZC4gRkFJTCFcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTEwOTAsMzAgKzExNTQsMjkgQEAKIAkJaWYgKGlycSkgewkvKiB3ZSB3YW50IHRvIHVzZSBJUlEgKi8KIAkJCWlmICgoKDEgPDwgaXJxKSAmIHRoaXNfYm9hcmQtPklSUWJpdHMpID09IDApIHsKIAkJCQlwcmludGsKLQkJCQkgICAgKCIsIElSUSAldSBpcyBvdXQgb2YgYWxsb3dlZCByYW5nZSwgRElTQUJMSU5HIElUIiwKLQkJCQkgICAgIGlycSk7CisJCQkJICAgICgiLCBJUlEgJXUgaXMgb3V0IG9mIGFsbG93ZWQgcmFuZ2UsICIKKwkJCQkgICAgICJESVNBQkxJTkcgSVQiLCBpcnEpOwogCQkJCWlycSA9IDA7CS8qIEJhZCBJUlEgKi8KIAkJCX0gZWxzZSB7CiAJCQkJaWYgKHJlcXVlc3RfaXJxCiAJCQkJICAgIChpcnEsIGludGVycnVwdF9wY2w4MTYsIDAsICJwY2w4MTYiLCBkZXYpKSB7CiAJCQkJCXByaW50awotCQkJCQkgICAgKCIsIHVuYWJsZSB0byBhbGxvY2F0ZSBJUlEgJXUsIERJU0FCTElORyBJVCIsCi0JCQkJCSAgICAgaXJxKTsKKwkJCQkJICAgICgiLCB1bmFibGUgdG8gYWxsb2NhdGUgSVJRICV1LCAiCisJCQkJCSAgICAgIkRJU0FCTElORyBJVCIsIGlycSk7CiAJCQkJCWlycSA9IDA7CS8qIENhbid0IHVzZSBJUlEgKi8KIAkJCQl9IGVsc2UgewotCQkJCQlwcmludGsoIiwgaXJxPSV1IiwgaXJxKTsKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiLCBpcnE9JXUiLCBpcnEpOwogCQkJCX0KIAkJCX0KIAkJfQogCX0KIAogCWRldi0+aXJxID0gaXJxOwotCWlmIChpcnEpIHsKKwlpZiAoaXJxKQkvKiAxPXdlIGhhdmUgYWxsb2NhdGVkIGlycSAqLwogCQlkZXZwcml2LT5pcnFfZnJlZSA9IDE7Ci0JfSAvKiAxPXdlIGhhdmUgYWxsb2NhdGVkIGlycSAqLwotCWVsc2UgeworCWVsc2UKIAkJZGV2cHJpdi0+aXJxX2ZyZWUgPSAwOwotCX0KKwogCWRldnByaXYtPmlycV9ibG9ja2VkID0gMDsJLyogbnVtYmVyIG9mIHN1YmRldmljZSB3aGljaCB1c2UgSVJRICovCiAJZGV2cHJpdi0+aW50ODE2X21vZGUgPSAwOwkvKiBtb2RlIG9mIGlycSAqLwogCkBAIC0xMTcwLDE4ICsxMjMzLDIyIEBACiAJCX0KIAkJcmV0ID0gcmVxdWVzdF9kbWEoZG1hLCAicGNsODE2Iik7CiAJCWlmIChyZXQpIHsKLQkJCXByaW50aygiLCB1bmFibGUgdG8gYWxsb2NhdGUgRE1BICV1LCBGQUlMIVxuIiwgZG1hKTsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIsIHVuYWJsZSB0byBhbGxvY2F0ZSBETUEgJXUsIEZBSUwhXG4iLCBkbWEpOwogCQkJcmV0dXJuIC1FQlVTWTsJLyogRE1BIGlzbid0IGZyZWUgKi8KIAkJfQogCiAJCWRldnByaXYtPmRtYSA9IGRtYTsKLQkJcHJpbnRrKCIsIGRtYT0ldSIsIGRtYSk7CisJCXByaW50ayhLRVJOX0lORk8gIiwgZG1hPSV1IiwgZG1hKTsKIAkJcGFnZXMgPSAyOwkvKiB3ZSBuZWVkIDE2S0IgKi8KIAkJZGV2cHJpdi0+ZG1hYnVmWzBdID0gX19nZXRfZG1hX3BhZ2VzKEdGUF9LRVJORUwsIHBhZ2VzKTsKIAogCQlpZiAoIWRldnByaXYtPmRtYWJ1ZlswXSkgewogCQkJcHJpbnRrKCIsIHVuYWJsZSB0byBhbGxvY2F0ZSBETUEgYnVmZmVyLCBGQUlMIVxuIik7Ci0JCQkvKiBtYXliZSBleHBlcmltZW50IHdpdGggdHJ5X3RvX2ZyZWVfcGFnZXMoKSB3aWxsIGhlbHAgLi4uLiAqLworCQkJLyoKKwkJCSAqIG1heWJlIGV4cGVyaW1lbnQgd2l0aCB0cnlfdG9fZnJlZV9wYWdlcygpCisJCQkgKiB3aWxsIGhlbHAgLi4uLgorCQkJICovCiAJCQlyZXR1cm4gLUVCVVNZOwkvKiBubyBidWZmZXIgOi0oICovCiAJCX0KIAkJZGV2cHJpdi0+ZG1hcGFnZXNbMF0gPSBwYWdlczsKQEAgLTExOTIsOCArMTI1OSw5IEBACiAJCWlmIChkZXZwcml2LT5kbWFfcnRjID09IDApIHsJLyogIHdlIG11c3QgZG8gZHVibGUgYnVmZiA6LSggKi8KIAkJCWRldnByaXYtPmRtYWJ1ZlsxXSA9IF9fZ2V0X2RtYV9wYWdlcyhHRlBfS0VSTkVMLCBwYWdlcyk7CiAJCQlpZiAoIWRldnByaXYtPmRtYWJ1ZlsxXSkgewotCQkJCXByaW50awotCQkJCSAgICAoIiwgdW5hYmxlIHRvIGFsbG9jYXRlIERNQSBidWZmZXIsIEZBSUwhXG4iKTsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIiwgdW5hYmxlIHRvIGFsbG9jYXRlIERNQSBidWZmZXIsICIKKwkJCQkgICAgICAgIkZBSUwhXG4iKTsKIAkJCQlyZXR1cm4gLUVCVVNZOwogCQkJfQogCQkJZGV2cHJpdi0+ZG1hcGFnZXNbMV0gPSBwYWdlczsKQEAgLTEyNzcsNyArMTM0NSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgcGNsODE2X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewotCURFQlVHKHByaW50aygiY29tZWRpJWQ6IHBjbDgxNjogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTspCisJREVCVUcocHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IHBjbDgxNjogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTspCiAJICAgIGZyZWVfcmVzb3VyY2VzKGRldik7CiAjaWZkZWYgdW51c2VkCiAJaWYgKGRldnByaXYtPmRtYV9ydGMpCkBAIC0xMjg1LDMgKzEzNTMsNyBAQAogI2VuZGlmCiAJcmV0dXJuIDA7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTguYwppbmRleCA5ZDZhYTM5Li5kMmJkNmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxOC5jCkBAIC0zMTMsNyArMzEzLDE4IEBACiAJLm9mZnNldCA9IHNpemVvZihzdHJ1Y3QgcGNsODE4X2JvYXJkKSwKIH07CiAKLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfcGNsODE4KTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9wY2w4MThfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX3BjbDgxOCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfcGNsODE4X2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfcGNsODE4KTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX3BjbDgxOF9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfcGNsODE4X2NsZWFudXBfbW9kdWxlKTsKIAogc3RydWN0IHBjbDgxOF9wcml2YXRlIHsKIApAQCAtMjAzNiwzICsyMDQ3LDcgQEAKIAlmcmVlX3Jlc291cmNlcyhkZXYpOwogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtMzcyNC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbTM3MjQuYwppbmRleCBlZDYxMDMwLi43ZmIzYzI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtMzcyNC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY20zNzI0LmMKQEAgLTk3LDcgKzk3LDE4IEBACiAJLm9mZnNldCA9IHNpemVvZihzdHJ1Y3QgcGNtMzcyNF9ib2FyZCksCiB9OwogCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3BjbTM3MjQpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX3BjbTM3MjRfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX3BjbTM3MjQpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX3BjbTM3MjRfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9wY20zNzI0KTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX3BjbTM3MjRfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX3BjbTM3MjRfY2xlYW51cF9tb2R1bGUpOwogCiAvKiAoc2V0cSBjLWJhc2ljLW9mZnNldCA4KSAqLwogCkBAIC0xODQsNyArMTk1LDcgQEAKIAlzdHJ1Y3QgcHJpdl9wY20zNzI0ICpwcml2OwogCiAJZ2F0ZWNmZyA9IDA7Ci0JcHJpdiA9IChzdHJ1Y3QgcHJpdl9wY20zNzI0ICopKGRldi0+cHJpdmF0ZSk7CisJcHJpdiA9IGRldi0+cHJpdmF0ZTsKIAogCW1hc2sgPSAxIDw8IENSX0NIQU4oY2hhbnNwZWMpOwogCWlmIChzID09IGRldi0+c3ViZGV2aWNlcykJLyogIHN1YmRldiAwICovCkBAIC0zMDcsMyArMzE4LDcgQEAKIAogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtMzczMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbTM3MzAuYwppbmRleCAyMmI3YWFlLi5iYWRhNmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtMzczMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY20zNzMwLmMKQEAgLTM4LDcgKzM4LDE4IEBACiAJLmRldGFjaCA9IHBjbTM3MzBfZGV0YWNoLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY20zNzMwKTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9wY20zNzMwX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9wY20zNzMwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9wY20zNzMwX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfcGNtMzczMCk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9wY20zNzMwX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9wY20zNzMwX2NsZWFudXBfbW9kdWxlKTsKIAogc3RhdGljIGludCBwY20zNzMwX2RvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLApAQCAtMTU0LDMgKzE2NSw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbV9jb21tb24uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21fY29tbW9uLmMKaW5kZXggNTJjMmE2NjkuLjQ3NGFmN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21fY29tbW9uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbV9jb21tb24uYwpAQCAtMTA5LDMgKzEwOSw3IEBACiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGNvbWVkaV9wY21fY21kdGVzdCk7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21hZC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbWFkLmMKaW5kZXggZmFiODA5Mi4uMjNiM2Q3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbWFkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbWFkLmMKQEAgLTg5LDcgKzg5LDE4IEBACiAJLm9mZnNldCA9IHNpemVvZihwY21hZF9ib2FyZHNbMF0pLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY21hZCk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfcGNtYWRfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX3BjbWFkKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9wY21hZF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX3BjbWFkKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX3BjbWFkX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9wY21hZF9jbGVhbnVwX21vZHVsZSk7CiAKICNkZWZpbmUgVElNRU9VVAkxMDAKIApAQCAtMTc2LDMgKzE4Nyw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbWRhMTIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21kYTEyLmMKaW5kZXggNzEzM2ViMC4uMGU5ZmZhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbWRhMTIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtZGExMi5jCkBAIC0xNTcsNyArMTU3LDggQEAKIAl1bnNpZ25lZCBsb25nIGlvYmFzZTsKIAogCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOwotCXByaW50aygiY29tZWRpJWQ6ICVzOiBpbzogJWx4ICVzICIsIGRldi0+bWlub3IsIGRyaXZlci5kcml2ZXJfbmFtZSwKKwlwcmludGsoS0VSTl9JTkZPCisJICAgICAgICJjb21lZGklZDogJXM6IGlvOiAlbHggJXMgIiwgZGV2LT5taW5vciwgZHJpdmVyLmRyaXZlcl9uYW1lLAogCSAgICAgICBpb2Jhc2UsIGl0LT5vcHRpb25zWzFdID8gInNpbXVsdGFuZW91cyB4ZmVyIG1vZGUgZW5hYmxlZCIgOiAiIik7CiAKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgSU9TSVpFLCBkcml2ZXIuZHJpdmVyX25hbWUpKSB7CkBAIC0xNzcsNyArMTc4LDcgQEAKICAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KICAqLwogCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY21kYTEyX3ByaXZhdGUpKSA8IDApIHsKLQkJcHJpbnRrKCJjYW5ub3QgYWxsb2NhdGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiY2Fubm90IGFsbG9jYXRlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTE5MSw3ICsxOTIsNyBAQAogCSAqIDk2LWNoYW5uZWwgdmVyc2lvbiBvZiB0aGUgYm9hcmQuCiAJICovCiAJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAxKSA8IDApIHsKLQkJcHJpbnRrKCJjYW5ub3QgYWxsb2NhdGUgc3ViZGV2aWNlIGRhdGEgc3RydWN0dXJlc1xuIik7CisJCXByaW50ayhLRVJOX0VSUiAiY2Fubm90IGFsbG9jYXRlIHN1YmRldmljZSBkYXRhIHN0cnVjdHVyZXNcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTIwNyw3ICsyMDgsNyBAQAogCiAJemVyb19jaGFucyhkZXYpOwkvKiBjbGVhciBvdXQgYWxsIHRoZSByZWdpc3RlcnMsIGJhc2ljYWxseSAqLwogCi0JcHJpbnRrKCJhdHRhY2hlZFxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiYXR0YWNoZWRcbiIpOwogCiAJcmV0dXJuIDE7CiB9CkBAIC0yMjIsNyArMjIzLDggQEAKICAqLwogc3RhdGljIGludCBwY21kYTEyX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewotCXByaW50aygiY29tZWRpJWQ6ICVzOiByZW1vdmVcbiIsIGRldi0+bWlub3IsIGRyaXZlci5kcml2ZXJfbmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAiY29tZWRpJWQ6ICVzOiByZW1vdmVcbiIsIGRldi0+bWlub3IsIGRyaXZlci5kcml2ZXJfbmFtZSk7CiAJaWYgKGRldi0+aW9iYXNlKQogCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgSU9TSVpFKTsKIAlyZXR1cm4gMDsKQEAgLTMwMyw0ICszMDUsMTkgQEAKICAqIEEgY29udmVuaWVudCBtYWNybyB0aGF0IGRlZmluZXMgaW5pdF9tb2R1bGUoKSBhbmQgY2xlYW51cF9tb2R1bGUoKSwKICAqIGFzIG5lY2Vzc2FyeS4KICAqLwotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcik7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21taW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21taW8uYwppbmRleCAwMjVhNTJlLi41YzgzMmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtbWlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbW1pby5jCkBAIC0xNDUsMTAgKzE0NSw2IEBACiAjZGVmaW5lIFBBR0VfRU5BQiAyCiAjZGVmaW5lIFBBR0VfSU5UX0lEIDMKIAotdHlwZWRlZiBpbnQgKCpjb21lZGlfaW5zbl9mbl90KSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiwKLQkJCQkgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiwKLQkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICosIHVuc2lnbmVkIGludCAqKTsKLQogc3RhdGljIGludCBhaV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqLCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqLAogCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICosIHVuc2lnbmVkIGludCAqKTsKIHN0YXRpYyBpbnQgYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiwKQEAgLTE3MSw3ICsxNjcsMTggQEAKIAljb25zdCBpbnQgbl9haV9jaGFuczsKIAljb25zdCBpbnQgbl9hb19jaGFuczsKIAljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYWlfcmFuZ2VfdGFibGUsICphb19yYW5nZV90YWJsZTsKLQljb21lZGlfaW5zbl9mbl90IGFpX3JpbnNuLCBhb19yaW5zbiwgYW9fd2luc247CisJaW50ICgqYWlfcmluc24pIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQl1bnNpZ25lZCBpbnQgKmRhdGEpOworCWludCAoKmFvX3JpbnNuKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJdW5zaWduZWQgaW50ICpkYXRhKTsKKwlpbnQgKCphb193aW5zbikgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCXVuc2lnbmVkIGludCAqZGF0YSk7CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VzX2FpID0gewpAQCAtMTMzMyw0ICsxMzQwLDE5IEBACiAgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCiAgKiBhcyBuZWNlc3NhcnkuCiAgKi8KLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXIpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtdWlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtdWlvLmMKaW5kZXggNWFmNGM4NC4uN2E5Mjg3NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY211aW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtdWlvLmMKQEAgLTEwMTgsNCArMTAxOCwxOSBAQAogICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAogICogYXMgbmVjZXNzYXJ5LgogICovCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyKTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXIpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2NsZWFudXBfbW9kdWxlKTsKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BvYy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BvYy5jCmluZGV4IDFlYmMzNTYuLjgzMWE1NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcG9jLmMKQEAgLTI0OCw0ICsyNDgsMTkgQEAKIAlyZXR1cm4gMjsKIH0KIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wb2MpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX3BvY19pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfcG9jKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9wb2NfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9wb2MpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfcG9jX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9wb2NfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcXVhdGVjaF9kYXFwX2NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcXVhdGVjaF9kYXFwX2NzLmMKaW5kZXggYTkxZGI2Yy4uYmY0ODlkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3F1YXRlY2hfZGFxcF9jcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9xdWF0ZWNoX2RhcXBfY3MuYwpAQCAtMTQsNyArMTQsNyBAQAogCiAgICAgRG9jdW1lbnRhdGlvbiBmb3IgdGhlIERBUVAgUENNQ0lBIGNhcmRzIGNhbiBiZSBmb3VuZCBvbiBRdWF0ZWNoJ3Mgc2l0ZToKIAotICAgICAgICAgICAgICAgIGZ0cDovL2Z0cC5xdWF0ZWNoLmNvbS9NYW51YWxzL2RhcXAtMjA4LnBkZgorCQlmdHA6Ly9mdHAucXVhdGVjaC5jb20vTWFudWFscy9kYXFwLTIwOC5wZGYKIAogICAgIFRoaXMgbWFudWFsIGlzIGZvciBib3RoIHRoZSBEQVFQLTIwOCBhbmQgdGhlIERBUVAtMzA4LgogCkBAIC01MCw3ICs1MCw2IEBACiAjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCiAjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgpAQCAtMTk1LDcgKzE5NCw3IEBACiAKIHN0YXRpYyB2b2lkIGRhcXBfZHVtcChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewotCXByaW50aygiREFRUDogc3RhdHVzICUwMng7IGF1eCBzdGF0dXMgJTAyeFxuIiwKKwlwcmludGsoS0VSTl9JTkZPICJEQVFQOiBzdGF0dXMgJTAyeDsgYXV4IHN0YXR1cyAlMDJ4XG4iLAogCSAgICAgICBpbmIoZGV2LT5pb2Jhc2UgKyBEQVFQX1NUQVRVUyksIGluYihkZXYtPmlvYmFzZSArIERBUVBfQVVYKSk7CiB9CiAKQEAgLTIwNyw5ICsyMDYsOSBAQAogCXByaW50ayhzdHIpOwogCiAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCWlmIChpICUgMTYgPT0gMCkgewotCQkJcHJpbnRrKCJcbjB4JTA4eDoiLCAodW5zaWduZWQgaW50KWNwdHIpOwotCQl9CisJCWlmIChpICUgMTYgPT0gMCkKKwkJCXByaW50aygiXG4lcDoiLCBjcHRyKTsKKwogCQlwcmludGsoIiAlMDJ4IiwgKihjcHRyKyspKTsKIAl9CiAJcHJpbnRrKCJcbiIpOwpAQCAtMjIzLDkgKzIyMiw5IEBACiB7CiAJc3RydWN0IGxvY2FsX2luZm9fdCAqbG9jYWwgPSAoc3RydWN0IGxvY2FsX2luZm9fdCAqKXMtPnByaXZhdGU7CiAKLQlpZiAobG9jYWwtPnN0b3ApIHsKKwlpZiAobG9jYWwtPnN0b3ApCiAJCXJldHVybiAtRUlPOwotCX0KKwogCiAJb3V0YihEQVFQX0NPTU1BTkRfU1RPUCwgZGV2LT5pb2Jhc2UgKyBEQVFQX0NPTU1BTkQpOwogCkBAIC0zNTUsOSArMzU0LDkgQEAKIAlpbnQgdjsKIAlpbnQgY291bnRlciA9IDEwMDAwOwogCi0JaWYgKGxvY2FsLT5zdG9wKSB7CisJaWYgKGxvY2FsLT5zdG9wKQogCQlyZXR1cm4gLUVJTzsKLQl9CisKIAogCS8qIFN0b3AgYW55IHJ1bm5pbmcgY29udmVyc2lvbiAqLwogCWRhcXBfYWlfY2FuY2VsKGRldiwgcyk7CkBAIC0zNzIsOSArMzcxLDkgQEAKIAl2ID0gREFRUF9TQ0FOTElTVF9DSEFOTkVMKENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpKQogCSAgICB8IERBUVBfU0NBTkxJU1RfR0FJTihDUl9SQU5HRShpbnNuLT5jaGFuc3BlYykpOwogCi0JaWYgKENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpID09IEFSRUZfRElGRikgeworCWlmIChDUl9BUkVGKGluc24tPmNoYW5zcGVjKSA9PSBBUkVGX0RJRkYpCiAJCXYgfD0gREFRUF9TQ0FOTElTVF9ESUZGRVJFTlRJQUw7Ci0JfQorCiAKIAl2IHw9IERBUVBfU0NBTkxJU1RfU1RBUlQ7CiAKQEAgLTQ4OCw3ICs0ODcsMTAgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gMTsKIAotCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisJLyoKKwkgKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMKKwkgKiBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlCisJICovCiAKIAkvKiBub3RlIHRoYXQgbXV0dWFsIGNvbXBhdGliaWxpdHkgaXMgbm90IGFuIGlzc3VlIGhlcmUgKi8KIAlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSICYmCkBAIC01ODgsOSArNTkwLDkgQEAKIAlpbnQgaTsKIAlpbnQgdjsKIAotCWlmIChsb2NhbC0+c3RvcCkgeworCWlmIChsb2NhbC0+c3RvcCkKIAkJcmV0dXJuIC1FSU87Ci0JfQorCiAKIAkvKiBTdG9wIGFueSBydW5uaW5nIGNvbnZlcnNpb24gKi8KIAlkYXFwX2FpX2NhbmNlbChkZXYsIHMpOwpAQCAtNjQwLDEzICs2NDIsMTEgQEAKIAkJdiA9IERBUVBfU0NBTkxJU1RfQ0hBTk5FTChDUl9DSEFOKGNoYW5zcGVjKSkKIAkJICAgIHwgREFRUF9TQ0FOTElTVF9HQUlOKENSX1JBTkdFKGNoYW5zcGVjKSk7CiAKLQkJaWYgKENSX0FSRUYoY2hhbnNwZWMpID09IEFSRUZfRElGRikgeworCQlpZiAoQ1JfQVJFRihjaGFuc3BlYykgPT0gQVJFRl9ESUZGKQogCQkJdiB8PSBEQVFQX1NDQU5MSVNUX0RJRkZFUkVOVElBTDsKLQkJfQogCi0JCWlmIChpID09IDAgfHwgc2Nhbmxpc3Rfc3RhcnRfb25fZXZlcnlfZW50cnkpIHsKKwkJaWYgKGkgPT0gMCB8fCBzY2FubGlzdF9zdGFydF9vbl9ldmVyeV9lbnRyeSkKIAkJCXYgfD0gREFRUF9TQ0FOTElTVF9TVEFSVDsKLQkJfQogCiAJCW91dGIodiAmIDB4ZmYsIGRldi0+aW9iYXNlICsgREFRUF9TQ0FOTElTVCk7CiAJCW91dGIodiA+PiA4LCBkZXYtPmlvYmFzZSArIERBUVBfU0NBTkxJU1QpOwpAQCAtNzYwLDcgKzc2MCw4IEBACiAJd2hpbGUgKC0tY291bnRlcgogCSAgICAgICAmJiAoaW5iKGRldi0+aW9iYXNlICsgREFRUF9TVEFUVVMpICYgREFRUF9TVEFUVVNfRVZFTlRTKSkgOwogCWlmICghY291bnRlcikgewotCQlwcmludGsoImRhcXA6IGNvdWxkbid0IGNsZWFyIGludGVycnVwdHMgaW4gc3RhdHVzIHJlZ2lzdGVyXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiZGFxcDogY291bGRuJ3QgY2xlYXIgaW50ZXJydXB0cyBpbiBzdGF0dXMgcmVnaXN0ZXJcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC03ODUsOSArNzg2LDggQEAKIAlpbnQgZDsKIAl1bnNpZ25lZCBpbnQgY2hhbjsKIAotCWlmIChsb2NhbC0+c3RvcCkgeworCWlmIChsb2NhbC0+c3RvcCkKIAkJcmV0dXJuIC1FSU87Ci0JfQogCiAJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwogCWQgPSBkYXRhWzBdOwpAQCAtODExLDkgKzgxMSw4IEBACiB7CiAJc3RydWN0IGxvY2FsX2luZm9fdCAqbG9jYWwgPSAoc3RydWN0IGxvY2FsX2luZm9fdCAqKXMtPnByaXZhdGU7CiAKLQlpZiAobG9jYWwtPnN0b3ApIHsKKwlpZiAobG9jYWwtPnN0b3ApCiAJCXJldHVybiAtRUlPOwotCX0KIAogCWRhdGFbMF0gPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVFQX0RJR0lUQUxfSU8pOwogCkBAIC04MjgsOSArODI3LDggQEAKIHsKIAlzdHJ1Y3QgbG9jYWxfaW5mb190ICpsb2NhbCA9IChzdHJ1Y3QgbG9jYWxfaW5mb190ICopcy0+cHJpdmF0ZTsKIAotCWlmIChsb2NhbC0+c3RvcCkgeworCWlmIChsb2NhbC0+c3RvcCkKIAkJcmV0dXJuIC1FSU87Ci0JfQogCiAJb3V0dyhkYXRhWzBdICYgMHhmLCBkZXYtPmlvYmFzZSArIERBUVBfRElHSVRBTF9JTyk7CiAKQEAgLTg3MiwxMyArODcwLDEzIEBACiAJCX0KIAl9CiAKLQlkZXYtPmlvYmFzZSA9IGxvY2FsLT5saW5rLT5pby5CYXNlUG9ydDE7CisJZGV2LT5pb2Jhc2UgPSBsb2NhbC0+bGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCiAJcmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDQpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcHJpbnRrKCJjb21lZGklZDogYXR0YWNoaW5nIGRhcXAlZCAoaW8gMHglMDRseClcbiIsCisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IGF0dGFjaGluZyBkYXFwJWQgKGlvIDB4JTA0bHgpXG4iLAogCSAgICAgICBkZXYtPm1pbm9yLCBpdC0+b3B0aW9uc1swXSwgZGV2LT5pb2Jhc2UpOwogCiAJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CkBAIC05MzEsNyArOTI5LDcgQEAKIAogc3RhdGljIGludCBkYXFwX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewotCXByaW50aygiY29tZWRpJWQ6IGRldGFjaGluZyBkYXFwXG4iLCBkZXYtPm1pbm9yKTsKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogZGV0YWNoaW5nIGRhcXBcbiIsIGRldi0+bWlub3IpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05OTYsMTQgKzk5NCw2IEBACiBzdGF0aWMgaW50IGRhcXBfY3NfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICopOwogc3RhdGljIHZvaWQgZGFxcF9jc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKik7CiAKLS8qCi0gICBUaGUgZGV2X2luZm8gdmFyaWFibGUgaXMgdGhlICJrZXkiIHRoYXQgaXMgdXNlZCB0byBtYXRjaCB1cCB0aGlzCi0gICBkZXZpY2UgZHJpdmVyIHdpdGggYXBwcm9wcmlhdGUgY2FyZHMsIHRocm91Z2ggdGhlIGNhcmQgY29uZmlndXJhdGlvbgotICAgZGF0YWJhc2UuCi0qLwotCi1zdGF0aWMgY29uc3QgZGV2X2luZm9fdCBkZXZfaW5mbyA9ICJxdWF0ZWNoX2RhcXBfY3MiOwotCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogICAgIGRhcXBfY3NfYXR0YWNoKCkgY3JlYXRlcyBhbiAiaW5zdGFuY2UiIG9mIHRoZSBkcml2ZXIsIGFsbG9jYXRpbmcKQEAgLTEwNzYsOCArMTA2Niw3IEBACiAKIAkvKiBVbmxpbmsgZGV2aWNlIHN0cnVjdHVyZSwgYW5kIGZyZWUgaXQgKi8KIAlkZXZfdGFibGVbZGV2LT50YWJsZV9pbmRleF0gPSBOVUxMOwotCWlmIChkZXYpCi0JCWtmcmVlKGRldik7CisJa2ZyZWUoZGV2KTsKIAogfQkJCQkvKiBkYXFwX2NzX2RldGFjaCAqLwogCkBAIC0xMTAzLDI2ICsxMDkyLDI0IEBACiAJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7CiAKIAkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KLQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gcF9kZXYtPmlvLk51bVBvcnRzMiA9IDA7CisJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA9IDA7CiAJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC0+aW8ubndpbiA+IDApKSB7CiAJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC0+aW87Ci0JCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCi0JCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7Ci0JCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCi0JCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7Ci0JCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKKwkJcF9kZXYtPmlvX2xpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgJj0gfklPX0RBVEFfUEFUSF9XSURUSDsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyB8PQorCQkJcGNtY2lhX2lvX2NmZ19kYXRhX3dpZHRoKGlvLT5mbGFncyk7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBpby0+d2luWzBdLmJhc2U7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gaW8tPndpblswXS5sZW47CiAJCWlmIChpby0+bndpbiA+IDEpIHsKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMiA9IHBfZGV2LT5pby5BdHRyaWJ1dGVzMTsKLQkJCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7Ci0JCQlwX2Rldi0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPmZsYWdzID0gcF9kZXYtPnJlc291cmNlWzBdLT5mbGFnczsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+c3RhcnQgPSBpby0+d2luWzFdLmJhc2U7CisJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA9IGlvLT53aW5bMV0ubGVuOwogCQl9CiAJfQogCiAJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KLQlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pOworCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2Rldik7CiB9CiAKIHN0YXRpYyB2b2lkIGRhcXBfY3NfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQpAQCAtMTE1NCwxMiArMTE0MSwxMCBAQAogCWRldl9pbmZvKCZsaW5rLT5kZXYsICJpbmRleCAweCUwMngiLCBsaW5rLT5jb25mLkNvbmZpZ0luZGV4KTsKIAlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQogCQlwcmludGsoIiwgaXJxICV1IiwgbGluay0+aXJxKTsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMxKQotCQlwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKLQkJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MSArIGxpbmstPmlvLk51bVBvcnRzMSAtIDEpOwotCWlmIChsaW5rLT5pby5OdW1Qb3J0czIpCi0JCXByaW50aygiICYgMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MiwKLQkJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MiArIGxpbmstPmlvLk51bVBvcnRzMiAtIDEpOworCWlmIChsaW5rLT5yZXNvdXJjZVswXSkKKwkJcHJpbnRrKCIgJiAlcFIiLCBsaW5rLT5yZXNvdXJjZVswXSk7CisJaWYgKGxpbmstPnJlc291cmNlWzFdKQorCQlwcmludGsoIiAmICVwUiIsIGxpbmstPnJlc291cmNlWzFdKTsKIAlwcmludGsoIlxuIik7CiAKIAlyZXR1cm47CkBAIC0xMjI4LDcgKzEyMTMsNyBAQAogCS5pZF90YWJsZSA9IGRhcXBfY3NfaWRfdGFibGUsCiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmRydiA9IHsKLQkJLm5hbWUgPSBkZXZfaW5mbywKKwkJLm5hbWUgPSAicXVhdGVjaF9kYXFwX2NzIiwKIAkJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGQ1MjAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGQ1MjAuYwppbmRleCA4NjI2NjU4Li4wMzY3ZDJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRkNTIwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0ZDUyMC5jCkBAIC0yMzU2LDQgKzIzNTYsNDQgQEAKICAqIEEgY29udmVuaWVudCBtYWNybyB0aGF0IGRlZmluZXMgaW5pdF9tb2R1bGUoKSBhbmQgY2xlYW51cF9tb2R1bGUoKSwKICAqIGFzIG5lY2Vzc2FyeS4KICAqLwotQ09NRURJX1BDSV9JTklUQ0xFQU5VUChydGQ1MjBEcml2ZXIsIHJ0ZDUyMF9wY2lfdGFibGUpOworc3RhdGljIGludCBfX2RldmluaXQgcnRkNTIwRHJpdmVyX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIHJ0ZDUyMERyaXZlci5kcml2ZXJfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBydGQ1MjBEcml2ZXJfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcnRkNTIwRHJpdmVyX3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gcnRkNTIwX3BjaV90YWJsZSwKKwkucHJvYmUgPSAmcnRkNTIwRHJpdmVyX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJnJ0ZDUyMERyaXZlcl9wY2lfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgcnRkNTIwRHJpdmVyX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJnJ0ZDUyMERyaXZlcik7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlydGQ1MjBEcml2ZXJfcGNpX2RyaXZlci5uYW1lID0gKGNoYXIgKilydGQ1MjBEcml2ZXIuZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnJ0ZDUyMERyaXZlcl9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHJ0ZDUyMERyaXZlcl9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcnRkNTIwRHJpdmVyX3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmcnRkNTIwRHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocnRkNTIwRHJpdmVyX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KHJ0ZDUyMERyaXZlcl9jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGk4MDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGk4MDAuYwppbmRleCAwMjhlZDZmLi43MjA0MmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRpODAwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0aTgwMC5jCkBAIC0xNTgsNyArMTU4LDE4IEBACiAJLm9mZnNldCA9IHNpemVvZihzdHJ1Y3QgcnRpODAwX2JvYXJkKSwKIH07CiAKLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfcnRpODAwKTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9ydGk4MDBfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX3J0aTgwMCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfcnRpODAwX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfcnRpODAwKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX3J0aTgwMF9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfcnRpODAwX2NsZWFudXBfbW9kdWxlKTsKIAogc3RhdGljIGlycXJldHVybl90IHJ0aTgwMF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2KTsKIApAQCAtNDc1LDMgKzQ4Niw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0aTgwMi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0aTgwMi5jCmluZGV4IDIxNTdlZGMuLmY1OWNiMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGk4MDIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRpODAyLmMKQEAgLTU3LDcgKzU3LDE4IEBACiAJLmRldGFjaCA9IHJ0aTgwMl9kZXRhY2gsCiB9OwogCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3J0aTgwMik7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfcnRpODAyX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9ydGk4MDIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX3J0aTgwMl9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX3J0aTgwMik7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9ydGk4MDJfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX3J0aTgwMl9jbGVhbnVwX21vZHVsZSk7CiAKIHN0cnVjdCBydGk4MDJfcHJpdmF0ZSB7CiAJZW51bSB7CkBAIC0xNTAsMyArMTYxLDcgQEAKIAogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczUyNi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M1MjYuYwppbmRleCAwN2MyMWU2Li4zNjA3YWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczUyNi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNTI2LmMKQEAgLTEwMDIsNCArMTAwMiwxOSBAQAogICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAogICogYXMgbmVjZXNzYXJ5LgogICovCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3M1MjYpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX3M1MjZfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX3M1MjYpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX3M1MjZfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9zNTI2KTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX3M1MjZfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX3M1MjZfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczYyNi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M2MjYuYwppbmRleCBhM2NjOTMzLi5kNWJhM2FiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczYyNi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNjI2LmMKQEAgLTYwLDEwICs2MCwxMCBAQAogICAgaW5zbi5pbnNuPUlOU05fQ09ORklHOyAgIC8vY29uZmlndXJhdGlvbiBpbnN0cnVjdGlvbgogICAgaW5zbi5uPTE7ICAgICAgICAgICAgICAgIC8vbnVtYmVyIG9mIG9wZXJhdGlvbiAobXVzdCBiZSAxKQogICAgaW5zbi5kYXRhPSZpbml0aWFsdmFsdWU7IC8vaW5pdGlhbCB2YWx1ZSBsb2FkZWQgaW50byBlbmNvZGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9kdXJpbmcgY29uZmlndXJhdGlvbgorCQkJCS8vZHVyaW5nIGNvbmZpZ3VyYXRpb24KICAgIGluc24uc3ViZGV2PTU7ICAgICAgICAgICAvL2VuY29kZXIgc3ViZGV2aWNlCiAgICBpbnNuLmNoYW5zcGVjPUNSX1BBQ0soZW5jb2Rlcl9jaGFubmVsLDAsQVJFRl9PVEhFUik7IC8vZW5jb2Rlcl9jaGFubmVsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdG8gY29uZmlndXJlCisJCQkJCQkJLy90byBjb25maWd1cmUKIAogICAgY29tZWRpX2RvX2luc24oY2YsJmluc24pOyAvL2V4ZWN1dGluZyBjb25maWd1cmF0aW9uCiAqLwpAQCAtMjI0LDcgKzIyNCw0MyBAQAogI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHM2MjZfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKICNkZWZpbmUgZGlvcHJpdiAoKHN0cnVjdCBkaW9fcHJpdmF0ZSAqKXMtPnByaXZhdGUpCiAKLUNPTUVESV9QQ0lfSU5JVENMRUFOVVBfTk9NT0RVTEUoZHJpdmVyX3M2MjYsIHM2MjZfcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9zNjI2X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgZHJpdmVyX3M2MjYuZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX3M2MjZfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyX3M2MjZfcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBzNjI2X3BjaV90YWJsZSwKKwkucHJvYmUgPSAmZHJpdmVyX3M2MjZfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmZHJpdmVyX3M2MjZfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9zNjI2X2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9zNjI2KTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRyaXZlcl9zNjI2X3BjaV9kcml2ZXIubmFtZSA9IChjaGFyICopZHJpdmVyX3M2MjYuZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9zNjI2X3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX3M2MjZfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9zNjI2X3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX3M2MjYpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfczYyNl9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfczYyNl9jbGVhbnVwX21vZHVsZSk7CiAKIC8qIGlvY3RsIHJvdXRpbmVzICovCiBzdGF0aWMgaW50IHM2MjZfYWlfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKQEAgLTI2Myw3ICsyOTksNyBAQAogCQkJICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCQkJICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKIHN0YXRpYyBpbnQgczYyNl9uc190b190aW1lcihpbnQgKm5hbm9zZWMsIGludCByb3VuZF9tb2RlKTsKLXN0YXRpYyBpbnQgczYyNl9haV9sb2FkX3BvbGxsaXN0KHVpbnQ4X3QgKiBwcGwsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpOworc3RhdGljIGludCBzNjI2X2FpX2xvYWRfcG9sbGxpc3QodWludDhfdCAqcHBsLCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKTsKIHN0YXRpYyBpbnQgczYyNl9haV9pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCiAJCQkgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgdW5zaWduZWQgaW50IHRyaWdudW0pOwogc3RhdGljIGlycXJldHVybl90IHM2MjZfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZCk7CkBAIC0yOTQsMTYgKzMzMCwxNiBAQAogLyogIENPVU5URVIgT0JKRUNUIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogc3RydWN0IGVuY19wcml2YXRlIHsKIAkvKiAgUG9pbnRlcnMgdG8gZnVuY3Rpb25zIHRoYXQgZGlmZmVyIGZvciBBIGFuZCBCIGNvdW50ZXJzOiAqLwotCXVpbnQxNl90KCpHZXRFbmFibGUpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGVuY19wcml2YXRlICopOwkvKiBSZXR1cm4gY2xvY2sgZW5hYmxlLiAqLwotCXVpbnQxNl90KCpHZXRJbnRTcmMpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGVuY19wcml2YXRlICopOwkvKiBSZXR1cm4gaW50ZXJydXB0IHNvdXJjZS4gKi8KLQl1aW50MTZfdCgqR2V0TG9hZFRyaWcpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGVuY19wcml2YXRlICopOwkvKiBSZXR1cm4gcHJlbG9hZCB0cmlnZ2VyIHNvdXJjZS4gKi8KLQl1aW50MTZfdCgqR2V0TW9kZSkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKik7CS8qIFJldHVybiBzdGFuZGFyZGl6ZWQgb3BlcmF0aW5nIG1vZGUuICovCi0Jdm9pZCAoKlB1bHNlSW5kZXgpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGVuY19wcml2YXRlICopOwkvKiBHZW5lcmF0ZSBzb2Z0IGluZGV4IHN0cm9iZS4gKi8KLQl2b2lkICgqU2V0RW5hYmxlKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqLCB1aW50MTZfdCBlbmFiKTsJLyogUHJvZ3JhbSBjbG9jayBlbmFibGUuICovCi0Jdm9pZCAoKlNldEludFNyYykgKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKiwgdWludDE2X3QgSW50U291cmNlKTsJLyogUHJvZ3JhbSBpbnRlcnJ1cHQgc291cmNlLiAqLwotCXZvaWQgKCpTZXRMb2FkVHJpZykgKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKiwgdWludDE2X3QgVHJpZyk7CS8qIFByb2dyYW0gcHJlbG9hZCB0cmlnZ2VyIHNvdXJjZS4gKi8KLQl2b2lkICgqU2V0TW9kZSkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKiwgdWludDE2X3QgU2V0dXAsIHVpbnQxNl90IERpc2FibGVJbnRTcmMpOwkvKiBQcm9ncmFtIHN0YW5kYXJkaXplZCBvcGVyYXRpbmcgbW9kZS4gKi8KLQl2b2lkICgqUmVzZXRDYXBGbGFncykgKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKik7CS8qIFJlc2V0IGV2ZW50IGNhcHR1cmUgZmxhZ3MuICovCisJdWludDE2X3QoKkdldEVuYWJsZSkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqKTsJLyogUmV0dXJuIGNsb2NrIGVuYWJsZS4gKi8KKwl1aW50MTZfdCgqR2V0SW50U3JjKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICopOwkvKiBSZXR1cm4gaW50ZXJydXB0IHNvdXJjZS4gKi8KKwl1aW50MTZfdCgqR2V0TG9hZFRyaWcpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKik7CS8qIFJldHVybiBwcmVsb2FkIHRyaWdnZXIgc291cmNlLiAqLworCXVpbnQxNl90KCpHZXRNb2RlKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICopOwkvKiBSZXR1cm4gc3RhbmRhcmRpemVkIG9wZXJhdGluZyBtb2RlLiAqLworCXZvaWQgKCpQdWxzZUluZGV4KSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICopOwkvKiBHZW5lcmF0ZSBzb2Z0IGluZGV4IHN0cm9iZS4gKi8KKwl2b2lkICgqU2V0RW5hYmxlKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICosIHVpbnQxNl90IGVuYWIpOwkvKiBQcm9ncmFtIGNsb2NrIGVuYWJsZS4gKi8KKwl2b2lkICgqU2V0SW50U3JjKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICosIHVpbnQxNl90IEludFNvdXJjZSk7CS8qIFByb2dyYW0gaW50ZXJydXB0IHNvdXJjZS4gKi8KKwl2b2lkICgqU2V0TG9hZFRyaWcpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKiwgdWludDE2X3QgVHJpZyk7CS8qIFByb2dyYW0gcHJlbG9hZCB0cmlnZ2VyIHNvdXJjZS4gKi8KKwl2b2lkICgqU2V0TW9kZSkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqLCB1aW50MTZfdCBTZXR1cCwgdWludDE2X3QgRGlzYWJsZUludFNyYyk7CS8qIFByb2dyYW0gc3RhbmRhcmRpemVkIG9wZXJhdGluZyBtb2RlLiAqLworCXZvaWQgKCpSZXNldENhcEZsYWdzKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICopOwkvKiBSZXNldCBldmVudCBjYXB0dXJlIGZsYWdzLiAqLwogCiAJdWludDE2X3QgTXlDUkE7CQkvKiAgICBBZGRyZXNzIG9mIENSQSByZWdpc3Rlci4gKi8KIAl1aW50MTZfdCBNeUNSQjsJCS8qICAgIEFkZHJlc3Mgb2YgQ1JCIHJlZ2lzdGVyLiAqLwpAQCAtNTQzLDEzICs1NzksMTMgQEAKIAlkZXZwcml2LT5wZGV2ID0gcGRldjsKIAogCWlmIChwZGV2ID09IE5VTEwpIHsKLQkJcHJpbnRrKCJzNjI2X2F0dGFjaDogQm9hcmQgbm90IHByZXNlbnQhISFcbiIpOworCQlwcmludGsoS0VSTl9FUlIgInM2MjZfYXR0YWNoOiBCb2FyZCBub3QgcHJlc2VudCEhIVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXJlc3VsdCA9IGNvbWVkaV9wY2lfZW5hYmxlKHBkZXYsICJzNjI2Iik7CiAJaWYgKHJlc3VsdCA8IDApIHsKLQkJcHJpbnRrKCJzNjI2X2F0dGFjaDogY29tZWRpX3BjaV9lbmFibGUgZmFpbHNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgInM2MjZfYXR0YWNoOiBjb21lZGlfcGNpX2VuYWJsZSBmYWlsc1xuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlkZXZwcml2LT5nb3RfcmVnaW9ucyA9IDE7CkBAIC01NTgsNyArNTk0LDcgQEAKIAogCWRldnByaXYtPmJhc2VfYWRkciA9IGlvcmVtYXAocmVzb3VyY2VTdGFydCwgU0laRU9GX0FERFJFU1NfU1BBQ0UpOwogCWlmIChkZXZwcml2LT5iYXNlX2FkZHIgPT0gTlVMTCkgewotCQlwcmludGsoInM2MjZfYXR0YWNoOiBJT1JFTUFQIGZhaWxlZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiczYyNl9hdHRhY2g6IElPUkVNQVAgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC01NzksNyArNjE1LDcgQEAKIAkJICAgIHBjaV9hbGxvY19jb25zaXN0ZW50KGRldnByaXYtPnBkZXYsIERNQUJVRl9TSVpFLCAmYXBwZG1hKTsKIAogCQlpZiAoZGV2cHJpdi0+QU5BQnVmLkxvZ2ljYWxCYXNlID09IE5VTEwpIHsKLQkJCXByaW50aygiczYyNl9hdHRhY2g6IERNQSBNZW1vcnkgbWFwcGluZyBlcnJvclxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgInM2MjZfYXR0YWNoOiBETUEgTWVtb3J5IG1hcHBpbmcgZXJyb3JcbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIApAQCAtNTk2LDcgKzYzMiw3IEBACiAJCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChkZXZwcml2LT5wZGV2LCBETUFCVUZfU0laRSwgJmFwcGRtYSk7CiAKIAkJaWYgKGRldnByaXYtPlJQU0J1Zi5Mb2dpY2FsQmFzZSA9PSBOVUxMKSB7Ci0JCQlwcmludGsoInM2MjZfYXR0YWNoOiBETUEgTWVtb3J5IG1hcHBpbmcgZXJyb3JcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJzNjI2X2F0dGFjaDogRE1BIE1lbW9yeSBtYXBwaW5nIGVycm9yXG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKQEAgLTYyMiwxOCArNjU4LDE4IEBACiAKIAkvKiBzZXQgdXAgaW50ZXJydXB0IGhhbmRsZXIgKi8KIAlpZiAoZGV2LT5pcnEgPT0gMCkgewotCQlwcmludGsoIiB1bmtub3duIGlycSAoYmFkKVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiIHVua25vd24gaXJxIChiYWQpXG4iKTsKIAl9IGVsc2UgewogCQlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgczYyNl9pcnFfaGFuZGxlciwgSVJRRl9TSEFSRUQsCiAJCQkJICAiczYyNiIsIGRldik7CiAKIAkJaWYgKHJldCA8IDApIHsKLQkJCXByaW50aygiIGlycSBub3QgYXZhaWxhYmxlXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiIGlycSBub3QgYXZhaWxhYmxlXG4iKTsKIAkJCWRldi0+aXJxID0gMDsKIAkJfQogCX0KIAotCURFQlVHKCJzNjI2X2F0dGFjaDogLS0gaXQgb3B0cyAgJWQsJWQgLS0gXG4iLAorCURFQlVHKCJzNjI2X2F0dGFjaDogLS0gaXQgb3B0cyAgJWQsJWQgLS1cbiIsCiAJICAgICAgaXQtPm9wdGlvbnNbMF0sIGl0LT5vcHRpb25zWzFdKTsKIAogCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOwpAQCAtNzc5LDcgKzgxNSw4IEBACiAJCS8qICBXcml0ZSBJMkMgY29udHJvbDogYWJvcnQgYW55IEkyQyBhY3Rpdml0eS4gKi8KIAkJTUNfRU5BQkxFKFBfTUMyLCBNQzJfVVBMRF9JSUMpOwogCQkvKiAgSW52b2tlIGNvbW1hbmQgIHVwbG9hZCAqLwotCQl3aGlsZSAoKFJSNzE0NihQX01DMikgJiBNQzJfVVBMRF9JSUMpID09IDApIDsKKwkJd2hpbGUgKChSUjcxNDYoUF9NQzIpICYgTUMyX1VQTERfSUlDKSA9PSAwKQorCQkJOwogCQkvKiAgYW5kIHdhaXQgZm9yIHVwbG9hZCB0byBjb21wbGV0ZS4gKi8KIAogCQkvKiBQZXIgU0FBNzE0NiBkYXRhIHNoZWV0LCB3cml0ZSB0byBTVEFUVVMgcmVnIHR3aWNlIHRvCkBAIC03ODgsNyArODI1LDggQEAKIAkJCVdSNzE0NihQX0kyQ1NUQVQsIEkyQ19DTEtTRUwpOwogCQkJLyogIFdyaXRlIEkyQyBjb250cm9sOiByZXNldCAgZXJyb3IgZmxhZ3MuICovCiAJCQlNQ19FTkFCTEUoUF9NQzIsIE1DMl9VUExEX0lJQyk7CS8qICBJbnZva2UgY29tbWFuZCB1cGxvYWQgKi8KLQkJCXdoaWxlICghTUNfVEVTVChQX01DMiwgTUMyX1VQTERfSUlDKSkgOworCQkJd2hpbGUgKCFNQ19URVNUKFBfTUMyLCBNQzJfVVBMRF9JSUMpKQorCQkJCTsKIAkJCS8qIGFuZCB3YWl0IGZvciB1cGxvYWQgdG8gY29tcGxldGUuICovCiAJCX0KIApAQCAtODI4LDE0ICs4NjYsMTQgQEAKIAkJICogbm90IHN0YXJ0IHVwIGluIGEgZGVmaW5lZCBzdGF0ZSBhZnRlciBhIFBDSSByZXNldC4KIAkJICovCiAKLS8qICAgICBQb2xsTGlzdCA9IEVPUEw7CQkJLy8gQ3JlYXRlIGEgc2ltcGxlIHBvbGxpbmcgKi8KLS8qIAkJCQkJLy8gbGlzdCBmb3IgYW5hbG9nIGlucHV0ICovCi0vKiAJCQkJCS8vIGNoYW5uZWwgMC4gKi8KKy8qICAgICBQb2xsTGlzdCA9IEVPUEw7CQkvLyBDcmVhdGUgYSBzaW1wbGUgcG9sbGluZyAqLworLyoJCQkJLy8gbGlzdCBmb3IgYW5hbG9nIGlucHV0ICovCisvKgkJCQkvLyBjaGFubmVsIDAuICovCiAvKiAgICAgUmVzZXRBREMoIGRldiwgJlBvbGxMaXN0ICk7ICovCiAKIC8qICAgICBzNjI2X2FpX3JpbnNuKGRldixkZXYtPnN1YmRldmljZXMsTlVMTCxkYXRhKTsgLy8oICZBZGNEYXRhICk7IC8vICovCi0vKiAJCQkJCQkgIC8vR2V0IGluaXRpYWwgQURDICovCi0vKiAJCQkJCQkgIC8vdmFsdWUuICovCisvKgkJCQkJCQkvL0dldCBpbml0aWFsIEFEQyAqLworLyoJCQkJCQkJLy92YWx1ZS4gKi8KIAogLyogICAgIFN0YXJ0VmFsID0gZGF0YVswXTsgKi8KIApAQCAtODQ4LDEwICs4ODYsMTAgQEAKIAogLyogICAgIGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCA1MDA7IGluZGV4KysgKSAqLwogLyogICAgICAgeyAqLwotLyogCXM2MjZfYWlfcmluc24oZGV2LGRldi0+c3ViZGV2aWNlcyxOVUxMLGRhdGEpOyAqLwotLyogCUFkY0RhdGEgPSBkYXRhWzBdOwkvL1JlYWRBREMoICAmQWRjRGF0YSApOyAqLwotLyogCWlmICggQWRjRGF0YSAhPSBTdGFydFZhbCApICovCi0vKiAJICBicmVhazsgKi8KKy8qCXM2MjZfYWlfcmluc24oZGV2LGRldi0+c3ViZGV2aWNlcyxOVUxMLGRhdGEpOyAqLworLyoJQWRjRGF0YSA9IGRhdGFbMF07CS8vUmVhZEFEQyggICZBZGNEYXRhICk7ICovCisvKglpZiAoIEFkY0RhdGEgIT0gU3RhcnRWYWwgKSAqLworLyoJCWJyZWFrOyAqLwogLyogICAgICAgfSAqLwogCiAJCS8qICBlbmQgaW5pdEFEQyAqLwpAQCAtMTUxMyw3ICsxNTUxLDcgQEAKIAkJCWJyZWFrOwkvKiAgRXhpdCBwb2xsIGxpc3QgcHJvY2Vzc2luZyBsb29wLiAqLwogCQl9CiAJfQotCURFQlVHKCJSZXNldEFEQzogQURDIGl0ZW1zICVkIFxuIiwgZGV2cHJpdi0+QWRjSXRlbXMpOworCURFQlVHKCJSZXNldEFEQzogQURDIGl0ZW1zICVkXG4iLCBkZXZwcml2LT5BZGNJdGVtcyk7CiAKIAkvKiBWRVJTSU9OIDIuMDEgQ0hBTkdFOiBERUxBWSBDSEFOR0VEIEZST00gMjUwTlMgdG8gMlVTLiAgQWxsb3cgdGhlCiAJICogQURDIHRvIHN0YWJpbGl6ZSBmb3IgMiBtaWNyb3NlY29uZHMgYmVmb3JlIHN0YXJ0aW5nIHRoZSBmaW5hbApAQCAtMTU3NCw3ICsxNjEyLDcgQEAKIC8qICAgcmVnaXN0ZXIgdWludDhfdAlpOyAqLwogLyogICByZWdpc3RlciBpbnQzMl90CSpyZWFkYWRkcjsgKi8KIAotLyogICBERUJVRygiYXM2MjZfYWlfcmluc246IGFpX3JpbnNuIGVudGVyIFxuIik7ICAqLworLyogICBERUJVRygiYXM2MjZfYWlfcmluc246IGFpX3JpbnNuIGVudGVyXG4iKTsgICovCiAKIC8qICAgVHJpZ2dlciBBREMgc2NhbiBsb29wIHN0YXJ0IGJ5IHNldHRpbmcgUlBTIFNpZ25hbCAwLiAqLwogLyogICBNQ19FTkFCTEUoIFBfTUMyLCBNQzJfQURDX1JQUyApOyAqLwpAQCAtMTU5MSwxMSArMTYyOSwxMSBAQAogLyogIENvbnZlcnQgQURDIGRhdGEgdG8gMTYtYml0IGludGVnZXIgdmFsdWVzIGFuZCBjb3B5IHRvIGFwcGxpY2F0aW9uIGJ1ZmZlci4gKi8KIC8qICAgZm9yICggaSA9IDA7IGkgPCBkZXZwcml2LT5BZGNJdGVtczsgaSsrICkgeyAqLwogLyogICAgICpkYXRhID0gczYyNl9haV9yZWdfdG9fdWludCggKnJlYWRhZGRyKysgKTsgKi8KLS8qICAgICBERUJVRygiczYyNl9haV9yaW5zbjogZGF0YSAlZCBcbiIsKmRhdGEpOyAqLworLyogICAgIERFQlVHKCJzNjI2X2FpX3JpbnNuOiBkYXRhICVkXG4iLCpkYXRhKTsgKi8KIC8qICAgICBkYXRhKys7ICovCiAvKiAgIH0gKi8KIAotLyogICBERUJVRygiczYyNl9haV9yaW5zbjogYWlfcmluc24gZXNjYXBlIFxuIik7ICovCisvKiAgIERFQlVHKCJzNjI2X2FpX3JpbnNuOiBhaV9yaW5zbiBlc2NhcGVcbiIpOyAqLwogLyogICByZXR1cm4gaTsgKi8KIC8qIH0gKi8KIApAQCAtMTY1MSw3ICsxNjg5LDggQEAKIAkJLyogIHNoaWZ0IGludG8gRkIgQlVGRkVSIDEgcmVnaXN0ZXIuICovCiAKIAkJLyogIFdhaXQgZm9yIEFEQyBkb25lLiAqLwotCQl3aGlsZSAoIShSUjcxNDYoUF9QU1IpICYgUFNSX0dQSU8yKSkgOworCQl3aGlsZSAoIShSUjcxNDYoUF9QU1IpICYgUFNSX0dQSU8yKSkKKwkJCTsKIAogCQkvKiAgRmV0Y2ggQURDIGRhdGEuICovCiAJCWlmIChuICE9IDApCkBAIC0xNjgzLDcgKzE3MjIsOCBAQAogCS8qICBXYWl0IGZvciB0aGUgZGF0YSB0byBhcnJpdmUgaW4gRkIgQlVGRkVSIDEgcmVnaXN0ZXIuICovCiAKIAkvKiAgV2FpdCBmb3IgQURDIGRvbmUuICovCi0Jd2hpbGUgKCEoUlI3MTQ2KFBfUFNSKSAmIFBTUl9HUElPMikpIDsKKwl3aGlsZSAoIShSUjcxNDYoUF9QU1IpICYgUFNSX0dQSU8yKSkKKwkJOwogCiAJLyogIEZldGNoIEFEQyBkYXRhIGZyb20gYXVkaW8gaW50ZXJmYWNlJ3MgaW5wdXQgc2hpZnQgcmVnaXN0ZXIuICovCiAKQEAgLTE2OTYsNyArMTczNiw3IEBACiAJcmV0dXJuIG47CiB9CiAKLXN0YXRpYyBpbnQgczYyNl9haV9sb2FkX3BvbGxsaXN0KHVpbnQ4X3QgKiBwcGwsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCitzdGF0aWMgaW50IHM2MjZfYWlfbG9hZF9wb2xsbGlzdCh1aW50OF90ICpwcGwsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7CiAKIAlpbnQgbjsKQEAgLTE3NDMsNyArMTc4Myw3IEBACiAJREVCVUcoInM2MjZfYWlfY21kOiBlbnRlcmluZyBjb21tYW5kIGZ1bmN0aW9uXG4iKTsKIAogCWlmIChkZXZwcml2LT5haV9jbWRfcnVubmluZykgewotCQlwcmludGsoInM2MjZfYWlfY21kOiBBbm90aGVyIGFpX2NtZCBpcyBydW5uaW5nICVkXG4iLAorCQlwcmludGsoS0VSTl9FUlIgInM2MjZfYWlfY21kOiBBbm90aGVyIGFpX2NtZCBpcyBydW5uaW5nICVkXG4iLAogCQkgICAgICAgZGV2LT5taW5vcik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQpAQCAtMjE0Nyw3ICsyMTg3LDcgQEAKIAkJREVCSXdyaXRlKGRldiwgZGlvcHJpdi0+V1JET3V0LCAwKTsJLyogIFByb2dyYW0gYWxsIG91dHB1dHMgKi8KIAkJLyogIHRvIGluYWN0aXZlIHN0YXRlLiAqLwogCX0KLQlERUJVRygiczYyNl9kaW9faW5pdDogRElPIGluaXRpYWxpemVkIFxuIik7CisJREVCVUcoInM2MjZfZGlvX2luaXQ6IERJTyBpbml0aWFsaXplZFxuIik7CiB9CiAKIC8qIERJTyBkZXZpY2VzIGFyZSBzbGlnaHRseSBzcGVjaWFsLiAgQWx0aG91Z2ggaXQgaXMgcG9zc2libGUgdG8KQEAgLTIzNDYsNyArMjM4Niw3IEBACiAJaW50IG47CiAJc3RydWN0IGVuY19wcml2YXRlICprID0gJmVuY3ByaXZbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOwogCi0JREVCVUcoInM2MjZfZW5jX2luc25fcmVhZDogZW5jb2RlciByZWFkIGNoYW5uZWwgJWQgXG4iLAorCURFQlVHKCJzNjI2X2VuY19pbnNuX3JlYWQ6IGVuY29kZXIgcmVhZCBjaGFubmVsICVkXG4iLAogCSAgICAgIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpKTsKIAogCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspCkBAIC0yMzY0LDcgKzI0MDQsNyBAQAogCiAJc3RydWN0IGVuY19wcml2YXRlICprID0gJmVuY3ByaXZbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOwogCi0JREVCVUcoInM2MjZfZW5jX2luc25fd3JpdGU6IGVuY29kZXIgd3JpdGUgY2hhbm5lbCAlZCBcbiIsCisJREVCVUcoInM2MjZfZW5jX2luc25fd3JpdGU6IGVuY29kZXIgd3JpdGUgY2hhbm5lbCAlZFxuIiwKIAkgICAgICBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSk7CiAKIAkvKiAgU2V0IHRoZSBwcmVsb2FkIHJlZ2lzdGVyICovCkBAIC0yNDI1LDggKzI0NjUsNyBAQAogc3RhdGljIHVpbnQ4X3QgdHJpbWNoYW5bXSA9IHsgMTAsIDksIDgsIDMsIDIsIDcsIDYsIDEsIDAsIDUsIDQgfTsKIAogLyogIFRyaW1EYWMgTG9naWNhbENoYW4tdG8tRWVwcm9tQWRycyBtYXBwaW5nIHRhYmxlLiAqLwotc3RhdGljIHVpbnQ4X3QgdHJpbWFkcnNbXSA9Ci0gICAgeyAweDQwLCAweDQxLCAweDQyLCAweDUwLCAweDUxLCAweDUyLCAweDUzLCAweDYwLCAweDYxLCAweDYyLCAweDYzIH07CitzdGF0aWMgdWludDhfdCB0cmltYWRyc1tdID0geyAweDQwLCAweDQxLCAweDQyLCAweDUwLCAweDUxLCAweDUyLCAweDUzLCAweDYwLCAweDYxLCAweDYyLCAweDYzIH07CiAKIHN0YXRpYyB2b2lkIExvYWRUcmltREFDcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewpAQCAtMjUyNCwxMCArMjU2MywxMiBAQAogCS8qICB1cGxvYWQgY29uZmlybWF0aW9uLiAqLwogCiAJTUNfRU5BQkxFKFBfTUMyLCBNQzJfVVBMRF9JSUMpOwotCXdoaWxlICghTUNfVEVTVChQX01DMiwgTUMyX1VQTERfSUlDKSkgOworCXdoaWxlICghTUNfVEVTVChQX01DMiwgTUMyX1VQTERfSUlDKSkKKwkJOwogCiAJLyogIFdhaXQgdW50aWwgSTJDIGJ1cyB0cmFuc2ZlciBpcyBmaW5pc2hlZCBvciBhbiBlcnJvciBvY2N1cnMuICovCi0Jd2hpbGUgKChSUjcxNDYoUF9JMkNDVFJMKSAmIChJMkNfQlVTWSB8IEkyQ19FUlIpKSA9PSBJMkNfQlVTWSkgOworCXdoaWxlICgoUlI3MTQ2KFBfSTJDQ1RSTCkgJiAoSTJDX0JVU1kgfCBJMkNfRVJSKSkgPT0gSTJDX0JVU1kpCisJCTsKIAogCS8qICBSZXR1cm4gbm9uLXplcm8gaWYgSTJDIGVycm9yIG9jY3VyZWQuICovCiAJcmV0dXJuIFJSNzE0NihQX0kyQ0NUUkwpICYgSTJDX0VSUjsKQEAgLTI2NDEsNyArMjY4Miw4IEBACiAJICogRG9uZSBieSBwb2xsaW5nIHRoZSBETUFDIGVuYWJsZSBmbGFnOyB0aGlzIGZsYWcgaXMgYXV0b21hdGljYWxseQogCSAqIGNsZWFyZWQgd2hlbiB0aGUgdHJhbnNmZXIgaGFzIGZpbmlzaGVkLgogCSAqLwotCXdoaWxlICgoUlI3MTQ2KFBfTUMxKSAmIE1DMV9BMk9VVCkgIT0gMCkgOworCXdoaWxlICgoUlI3MTQ2KFBfTUMxKSAmIE1DMV9BMk9VVCkgIT0gMCkKKwkJOwogCiAJLyogU1RBUlQgVEhFIE9VVFBVVCBTVFJFQU0gVE8gVEhFIFRBUkdFVCBEQUMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtMjY1OCw3ICsyNzAwLDggQEAKIAkgKiBmaW5pc2hlZCB0cmFuc2ZlcnJpbmcgdGhlIERBQydzIGRhdGEgRFdPUkQgZnJvbSB0aGUgb3V0cHV0IEZJRk8KIAkgKiB0byB0aGUgb3V0cHV0IGJ1ZmZlciByZWdpc3Rlci4KIAkgKi8KLQl3aGlsZSAoKFJSNzE0NihQX1NTUikgJiBTU1JfQUYyX09VVCkgPT0gMCkgOworCXdoaWxlICgoUlI3MTQ2KFBfU1NSKSAmIFNTUl9BRjJfT1VUKSA9PSAwKQorCQk7CiAKIAkvKiBTZXQgdXAgdG8gdHJhcCBleGVjdXRpb24gYXQgc2xvdCAwIHdoZW4gdGhlIFRTTCBzZXF1ZW5jZXIgY3ljbGVzCiAJICogYmFjayB0byBzbG90IDAgYWZ0ZXIgZXhlY3V0aW5nIHRoZSBFT1MgaW4gc2xvdCA1LiAgQWxzbywKQEAgLTI2OTQsNyArMjczNyw4IEBACiAJCSAqIGZyb20gMHhGRiB0byAweDAwLCB3aGljaCBzbG90IDAgY2F1c2VzIHRvIGhhcHBlbiBieSBzaGlmdGluZwogCQkgKiBvdXQvaW4gb24gU0QyIHRoZSAweDAwIHRoYXQgaXMgYWx3YXlzIHJlZmVyZW5jZWQgYnkgc2xvdCA1LgogCQkgKi8KLQkJd2hpbGUgKChSUjcxNDYoUF9GQl9CVUZGRVIyKSAmIDB4RkYwMDAwMDApICE9IDApIDsKKwkJd2hpbGUgKChSUjcxNDYoUF9GQl9CVUZGRVIyKSAmIDB4RkYwMDAwMDApICE9IDApCisJCQk7CiAJfQogCS8qIEVpdGhlciAoMSkgd2Ugd2VyZSB0b28gbGF0ZSBzZXR0aW5nIHRoZSBzbG90IDAgdHJhcDsgdGhlIFRTTAogCSAqIHNlcXVlbmNlciByZXN0YXJ0ZWQgc2xvdCAwIGJlZm9yZSB3ZSBjb3VsZCBzZXQgdGhlIEVPUyB0cmFwIGZsYWcsCkBAIC0yNzEwLDcgKzI3NTQsOCBAQAogCSAqIHRoZSBuZXh0IERBQyB3cml0ZS4gIFRoaXMgaXMgZGV0ZWN0ZWQgd2hlbiBGQl9CVUZGRVIyIE1TQiBjaGFuZ2VzCiAJICogZnJvbSAweDAwIHRvIDB4RkYuCiAJICovCi0Jd2hpbGUgKChSUjcxNDYoUF9GQl9CVUZGRVIyKSAmIDB4RkYwMDAwMDApID09IDApIDsKKwl3aGlsZSAoKFJSNzE0NihQX0ZCX0JVRkZFUjIpICYgMHhGRjAwMDAwMCkgPT0gMCkKKwkJOwogfQogCiBzdGF0aWMgdm9pZCBXcml0ZU1JU0MyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVpbnQxNl90IE5ld0ltYWdlKQpAQCAtMjc0OSwxMCArMjc5NCwxMiBAQAogCiAJLyogIFdhaXQgZm9yIGNvbXBsZXRpb24gb2YgdXBsb2FkIGZyb20gc2hhZG93IFJBTSB0byBERUJJIGNvbnRyb2wgKi8KIAkvKiAgcmVnaXN0ZXIuICovCi0Jd2hpbGUgKCFNQ19URVNUKFBfTUMyLCBNQzJfVVBMRF9ERUJJKSkgOworCXdoaWxlICghTUNfVEVTVChQX01DMiwgTUMyX1VQTERfREVCSSkpCisJCTsKIAogCS8qICBXYWl0IHVudGlsIERFQkkgdHJhbnNmZXIgaXMgZG9uZS4gKi8KLQl3aGlsZSAoUlI3MTQ2KFBfUFNSKSAmIFBTUl9ERUJJX1MpIDsKKwl3aGlsZSAoUlI3MTQ2KFBfUFNSKSAmIFBTUl9ERUJJX1MpCisJCTsKIH0KIAogLyogIFdyaXRlIGEgdmFsdWUgdG8gYSBnYXRlIGFycmF5IHJlZ2lzdGVyLiAqLwpAQCAtMzA5OSwxOCArMzE0NiwxOCBAQAogc3RhdGljIHZvaWQgU2V0TGF0Y2hTb3VyY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprLAogCQkJICAgdWludDE2X3QgdmFsdWUpCiB7Ci0JREVCVUcoIlNldExhdGNoU291cmNlOiBTZXRMYXRjaFNvdXJjZSBlbnRlciAzNTUwIFxuIik7CisJREVCVUcoIlNldExhdGNoU291cmNlOiBTZXRMYXRjaFNvdXJjZSBlbnRlciAzNTUwXG4iKTsKIAlERUJJcmVwbGFjZShkZXYsIGstPk15Q1JCLAogCQkgICAgKHVpbnQxNl90KSAofihDUkJNU0tfSU5UQ1RSTCB8IENSQk1TS19MQVRDSFNSQykpLAogCQkgICAgKHVpbnQxNl90KSAodmFsdWUgPDwgQ1JCQklUX0xBVENIU1JDKSk7CiAKLQlERUJVRygiU2V0TGF0Y2hTb3VyY2U6IFNldExhdGNoU291cmNlIGV4aXQgXG4iKTsKKwlERUJVRygiU2V0TGF0Y2hTb3VyY2U6IFNldExhdGNoU291cmNlIGV4aXRcbiIpOwogfQogCiAvKgogICogc3RhdGljIHVpbnQxNl90IEdldExhdGNoU291cmNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqayApCiAgKiB7Ci0gKiAJcmV0dXJuICggREVCSXJlYWQoIGRldiwgay0+TXlDUkIpID4+IENSQkJJVF9MQVRDSFNSQyApICYgMzsKKyAqCXJldHVybiAoIERFQklyZWFkKCBkZXYsIGstPk15Q1JCKSA+PiBDUkJCSVRfTEFUQ0hTUkMgKSAmIDM7CiAgKiB9CiAgKi8KIApAQCAtMzMxNyw2ICszMzY0LDYgQEAKIAkJay0+UmVzZXRDYXBGbGFncyhkZXYsIGspOwogCQlrLT5TZXRFbmFibGUoZGV2LCBrLCBDTEtFTkFCX0FMV0FZUyk7CiAJfQotCURFQlVHKCJDb3VudGVyc0luaXQ6IGNvdW50ZXJzIGluaXRpYWxpemVkIFxuIik7CisJREVCVUcoIkNvdW50ZXJzSW5pdDogY291bnRlcnMgaW5pdGlhbGl6ZWRcbiIpOwogCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczYyNi5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M2MjYuaAppbmRleCBkMDI3NDJhLi4yZDFhZmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczYyNi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNjI2LmgKQEAgLTcyMCwxNSArNzIwLDYgQEAKICNkZWZpbmUgU1RETVNLX0NMS01VTFQJCSgodWludDE2X3QpKDMgPDwgU1REQklUX0NMS01VTFQpKQogI2RlZmluZSBTVERNU0tfQ0xLRU5BQgkJKCh1aW50MTZfdCkoMSA8PCBTVERCSVRfQ0xLRU5BQikpCiAKLS8qIHR5cGVkZWYgc3RydWN0IGluZGV4Q291bnRlciAqLwotLyogeyAqLwotLyogICB1bnNpZ25lZCBpbnQgYW87ICovCi0vKiAgIHVuc2lnbmVkIGludCBhaTsgKi8KLS8qICAgdW5zaWduZWQgaW50IGRpZ291dDsgKi8KLS8qICAgdW5zaWduZWQgaW50IGRpZ2luOyAqLwotLyogICB1bnNpZ25lZCBpbnQgZW5jOyAqLwotLyogfUNhbGxDb3VudGVyOyAqLwotCiBzdHJ1Y3QgYnVmZmVyRE1BIHsKIAlkbWFfYWRkcl90IFBoeXNpY2FsQmFzZTsKIAl2b2lkICpMb2dpY2FsQmFzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zZXJpYWwyMDAyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc2VyaWFsMjAwMi5jCmluZGV4IDA3OTI2MTcuLmM5YmU5ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zZXJpYWwyMDAyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3NlcmlhbDIwMDIuYwpAQCAtMzkzLDE1ICszOTMsMTYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHNlcmlhbF8yMDAyX29wZW4oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc2VyaWFsXzIwMDJfb3BlbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogeworCWludCByZXN1bHQ7CiAJY2hhciBwb3J0WzIwXTsKIAogCXNwcmludGYocG9ydCwgIi9kZXYvdHR5UyVkIiwgZGV2cHJpdi0+cG9ydCk7CiAJZGV2cHJpdi0+dHR5ID0gZmlscF9vcGVuKHBvcnQsIE9fUkRXUiwgMCk7CiAJaWYgKElTX0VSUihkZXZwcml2LT50dHkpKSB7Ci0JCXByaW50aygic2VyaWFsXzIwMDI6IGZpbGUgb3BlbiBlcnJvciA9ICVsZFxuIiwKLQkJICAgICAgIFBUUl9FUlIoZGV2cHJpdi0+dHR5KSk7CisJCXJlc3VsdCA9IChpbnQpUFRSX0VSUihkZXZwcml2LT50dHkpOworCQlwcmludGsoInNlcmlhbF8yMDAyOiBmaWxlIG9wZW4gZXJyb3IgPSAlZFxuIiwgcmVzdWx0KTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgY29uZmlnX3QgewogCkBAIC00MTEsMjkgKzQxMiwyNSBAQAogCQkJaW50IG1heDsKIAkJfTsKIAotCQlzdHJ1Y3QgY29uZmlnX3QgZGlnX2luX2NvbmZpZ1szMl07Ci0JCXN0cnVjdCBjb25maWdfdCBkaWdfb3V0X2NvbmZpZ1szMl07Ci0JCXN0cnVjdCBjb25maWdfdCBjaGFuX2luX2NvbmZpZ1szMl07Ci0JCXN0cnVjdCBjb25maWdfdCBjaGFuX291dF9jb25maWdbMzJdOworCQlzdHJ1Y3QgY29uZmlnX3QgKmRpZ19pbl9jb25maWc7CisJCXN0cnVjdCBjb25maWdfdCAqZGlnX291dF9jb25maWc7CisJCXN0cnVjdCBjb25maWdfdCAqY2hhbl9pbl9jb25maWc7CisJCXN0cnVjdCBjb25maWdfdCAqY2hhbl9vdXRfY29uZmlnOwogCQlpbnQgaTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgewotCQkJZGlnX2luX2NvbmZpZ1tpXS5raW5kID0gMDsKLQkJCWRpZ19pbl9jb25maWdbaV0uYml0cyA9IDA7Ci0JCQlkaWdfaW5fY29uZmlnW2ldLm1pbiA9IDA7Ci0JCQlkaWdfaW5fY29uZmlnW2ldLm1heCA9IDA7Ci0JCQlkaWdfb3V0X2NvbmZpZ1tpXS5raW5kID0gMDsKLQkJCWRpZ19vdXRfY29uZmlnW2ldLmJpdHMgPSAwOwotCQkJZGlnX291dF9jb25maWdbaV0ubWluID0gMDsKLQkJCWRpZ19vdXRfY29uZmlnW2ldLm1heCA9IDA7Ci0JCQljaGFuX2luX2NvbmZpZ1tpXS5raW5kID0gMDsKLQkJCWNoYW5faW5fY29uZmlnW2ldLmJpdHMgPSAwOwotCQkJY2hhbl9pbl9jb25maWdbaV0ubWluID0gMDsKLQkJCWNoYW5faW5fY29uZmlnW2ldLm1heCA9IDA7Ci0JCQljaGFuX291dF9jb25maWdbaV0ua2luZCA9IDA7Ci0JCQljaGFuX291dF9jb25maWdbaV0uYml0cyA9IDA7Ci0JCQljaGFuX291dF9jb25maWdbaV0ubWluID0gMDsKLQkJCWNoYW5fb3V0X2NvbmZpZ1tpXS5tYXggPSAwOworCQlyZXN1bHQgPSAwOworCQlkaWdfaW5fY29uZmlnID0ga2NhbGxvYygzMiwgc2l6ZW9mKHN0cnVjdCBjb25maWdfdCksCisJCQkJR0ZQX0tFUk5FTCk7CisJCWRpZ19vdXRfY29uZmlnID0ga2NhbGxvYygzMiwgc2l6ZW9mKHN0cnVjdCBjb25maWdfdCksCisJCQkJR0ZQX0tFUk5FTCk7CisJCWNoYW5faW5fY29uZmlnID0ga2NhbGxvYygzMiwgc2l6ZW9mKHN0cnVjdCBjb25maWdfdCksCisJCQkJR0ZQX0tFUk5FTCk7CisJCWNoYW5fb3V0X2NvbmZpZyA9IGtjYWxsb2MoMzIsIHNpemVvZihzdHJ1Y3QgY29uZmlnX3QpLAorCQkJCUdGUF9LRVJORUwpOworCQlpZiAoIWRpZ19pbl9jb25maWcgfHwgIWRpZ19vdXRfY29uZmlnCisJCSAgICB8fCAhY2hhbl9pbl9jb25maWcgfHwgIWNoYW5fb3V0X2NvbmZpZykgeworCQkJcmVzdWx0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyX2FsbG9jX2NvbmZpZ3M7CiAJCX0KIAogCQl0dHlfc2V0c3BlZWQoZGV2cHJpdi0+dHR5LCBkZXZwcml2LT5zcGVlZCk7CkBAIC00NDcsNyArNDQ0LDcgQEAKIAkJCQlicmVhazsKIAkJCX0gZWxzZSB7CiAJCQkJaW50IGNvbW1hbmQsIGNoYW5uZWwsIGtpbmQ7Ci0JCQkJc3RydWN0IGNvbmZpZ190ICpjdXJfY29uZmlnID0gMDsKKwkJCQlzdHJ1Y3QgY29uZmlnX3QgKmN1cl9jb25maWcgPSBOVUxMOwogCiAJCQkJY2hhbm5lbCA9IGRhdGEudmFsdWUgJiAweDFmOwogCQkJCWtpbmQgPSAoZGF0YS52YWx1ZSA+PiA1KSAmIDB4NzsKQEAgLTU3NCw4ICs1NzEsOCBAQAogCQlmb3IgKGkgPSAwOyBpIDw9IDQ7IGkrKykgewogCQkJLyogIEZpbGwgaW4gc3ViZGV2IGRhdGEgKi8KIAkJCXN0cnVjdCBjb25maWdfdCAqYzsKLQkJCXVuc2lnbmVkIGNoYXIgKm1hcHBpbmcgPSAwOwotCQkJc3RydWN0IHNlcmlhbDIwMDJfcmFuZ2VfdGFibGVfdCAqcmFuZ2UgPSAwOworCQkJdW5zaWduZWQgY2hhciAqbWFwcGluZyA9IE5VTEw7CisJCQlzdHJ1Y3Qgc2VyaWFsMjAwMl9yYW5nZV90YWJsZV90ICpyYW5nZSA9IE5VTEw7CiAJCQlpbnQga2luZCA9IDA7CiAKIAkJCXN3aXRjaCAoaSkgewpAQCAtNjEzLDcgKzYxMCw3IEBACiAJCQkJfQogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDp7Ci0JCQkJCWMgPSAwOworCQkJCQljID0gTlVMTDsKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC02MzIsMjIgKzYyOSwyMyBAQAogCQkJCXMgPSAmZGV2LT5zdWJkZXZpY2VzW2ldOwogCQkJCXMtPm5fY2hhbiA9IGNoYW47CiAJCQkJcy0+bWF4ZGF0YSA9IDA7Ci0JCQkJaWYgKHMtPm1heGRhdGFfbGlzdCkgewotCQkJCQlrZnJlZShzLT5tYXhkYXRhX2xpc3QpOwotCQkJCX0KKwkJCQlrZnJlZShzLT5tYXhkYXRhX2xpc3QpOwogCQkJCXMtPm1heGRhdGFfbGlzdCA9IG1heGRhdGFfbGlzdCA9CiAJCQkJICAgIGttYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGludCkgKiBzLT5uX2NoYW4sCiAJCQkJCSAgICBHRlBfS0VSTkVMKTsKLQkJCQlpZiAocy0+cmFuZ2VfdGFibGVfbGlzdCkgewotCQkJCQlrZnJlZShzLT5yYW5nZV90YWJsZV9saXN0KTsKLQkJCQl9CisJCQkJaWYgKCFzLT5tYXhkYXRhX2xpc3QpCisJCQkJCWJyZWFrOwkvKiBlcnJvciBoYW5kbGVkIGJlbG93ICovCisJCQkJa2ZyZWUocy0+cmFuZ2VfdGFibGVfbGlzdCk7CisJCQkJcy0+cmFuZ2VfdGFibGUgPSBOVUxMOworCQkJCXMtPnJhbmdlX3RhYmxlX2xpc3QgPSBOVUxMOwogCQkJCWlmIChyYW5nZSkgewotCQkJCQlzLT5yYW5nZV90YWJsZSA9IDA7CiAJCQkJCXMtPnJhbmdlX3RhYmxlX2xpc3QgPSByYW5nZV90YWJsZV9saXN0ID0KIAkJCQkJICAgIGttYWxsb2Moc2l6ZW9mCiAJCQkJCQkgICAgKHN0cnVjdAogCQkJCQkJICAgICBzZXJpYWwyMDAyX3JhbmdlX3RhYmxlX3QpICoKIAkJCQkJCSAgICBzLT5uX2NoYW4sIEdGUF9LRVJORUwpOworCQkJCQlpZiAoIXMtPnJhbmdlX3RhYmxlX2xpc3QpCisJCQkJCQlicmVhazsJLyogZXJyIGhhbmRsZWQgYmVsb3cgKi8KIAkJCQl9CiAJCQkJZm9yIChjaGFuID0gMCwgaiA9IDA7IGogPCAzMjsgaisrKSB7CiAJCQkJCWlmIChjW2pdLmtpbmQgPT0ga2luZCkgewpAQCAtNjczLDcgKzY3MSwzNSBAQAogCQkJCX0KIAkJCX0KIAkJfQorCQlpZiAoaSA8PSA0KSB7CisJCQkvKiBGYWlsZWQgdG8gYWxsb2NhdGUgbWF4ZGF0YV9saXN0IG9yIHJhbmdlX3RhYmxlX2xpc3QKKwkJCSAqIGZvciBhIHN1YmRldmljZSB0aGF0IG5lZWRlZCBpdC4gICovCisJCQlyZXN1bHQgPSAtRU5PTUVNOworCQkJZm9yIChpID0gMDsgaSA8PSA0OyBpKyspIHsKKwkJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKworCQkJCXMgPSAmZGV2LT5zdWJkZXZpY2VzW2ldOworCQkJCWtmcmVlKHMtPm1heGRhdGFfbGlzdCk7CisJCQkJcy0+bWF4ZGF0YV9saXN0ID0gTlVMTDsKKwkJCQlrZnJlZShzLT5yYW5nZV90YWJsZV9saXN0KTsKKwkJCQlzLT5yYW5nZV90YWJsZV9saXN0ID0gTlVMTDsKKwkJCX0KKwkJfQorCitlcnJfYWxsb2NfY29uZmlnczoKKwkJa2ZyZWUoZGlnX2luX2NvbmZpZyk7CisJCWtmcmVlKGRpZ19vdXRfY29uZmlnKTsKKwkJa2ZyZWUoY2hhbl9pbl9jb25maWcpOworCQlrZnJlZShjaGFuX291dF9jb25maWcpOworCisJCWlmIChyZXN1bHQpIHsKKwkJCWlmIChkZXZwcml2LT50dHkpIHsKKwkJCQlmaWxwX2Nsb3NlKGRldnByaXYtPnR0eSwgMCk7CisJCQkJZGV2cHJpdi0+dHR5ID0gTlVMTDsKKwkJCX0KKwkJfQogCX0KKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgdm9pZCBzZXJpYWxfMjAwMl9jbG9zZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQpAQCAtODc5LDcgKzkwNSw3IEBACiAJaW50IGk7CiAKIAlwcmludGsoImNvbWVkaSVkOiBzZXJpYWwyMDAyOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CiAJCXMgPSAmZGV2LT5zdWJkZXZpY2VzW2ldOwogCQlpZiAocy0+bWF4ZGF0YV9saXN0KSB7CiAJCQlrZnJlZShzLT5tYXhkYXRhX2xpc3QpOwpAQCAtODkxLDQgKzkxNywxOSBAQAogCXJldHVybiAwOwogfQogCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3NlcmlhbDIwMDIpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX3NlcmlhbDIwMDJfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX3NlcmlhbDIwMDIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX3NlcmlhbDIwMDJfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9zZXJpYWwyMDAyKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX3NlcmlhbDIwMDJfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX3NlcmlhbDIwMDJfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc2tlbC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3NrZWwuYwppbmRleCA0OTA3NTNiLi4wYjllY2IxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc2tlbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9za2VsLmMKQEAgLTM5LDI4ICszOSwyOCBAQAogICogVGhlIHByZXZpb3VzIGJsb2NrIGNvbW1lbnQgaXMgdXNlZCB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlCiAgKiBkb2N1bWVudGF0aW9uIGluIENvbWVkaSBhbmQgQ29tZWRpbGliLiAgVGhlIGZpZWxkczoKICAqCi0gKiBEcml2ZXI6IHRoZSBuYW1lIG9mIHRoZSBkcml2ZXIKLSAqIERlc2NyaXB0aW9uOiBhIHNob3J0IHBocmFzZSBkZXNjcmliaW5nIHRoZSBkcml2ZXIuICBEb24ndCBsaXN0IGJvYXJkcy4KLSAqIERldmljZXM6IGEgZnVsbCBsaXN0IG9mIHRoZSBib2FyZHMgdGhhdCBhdHRlbXB0IHRvIGJlIHN1cHBvcnRlZCBieQotICogICB0aGUgZHJpdmVyLiAgRm9ybWF0IGlzICIobWFudWZhY3R1cmVyKSBib2FyZCBuYW1lIFtjb21lZGkgbmFtZV0iLAotICogICB3aGVyZSBjb21lZGlfbmFtZSBpcyB0aGUgbmFtZSB0aGF0IGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBib2FyZC4KLSAqICAgU2VlIHRoZSBjb21tZW50IG5lYXIgYm9hcmRfbmFtZTogaW4gdGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZQotICogICBiZWxvdy4gIElmIChtYW51ZmFjdHVyZXIpIG9yIFtjb21lZGkgbmFtZV0gaXMgbWlzc2luZywgdGhlIHByZXZpb3VzCi0gKiAgIHZhbHVlIGlzIHVzZWQuCi0gKiBBdXRob3I6IHlvdQotICogVXBkYXRlZDogZGF0ZSB3aGVuIHRoZSBfZG9jdW1lbnRhdGlvbl8gd2FzIGxhc3QgdXBkYXRlZC4gIFVzZSAnZGF0ZSAtUicKLSAqICAgdG8gZ2V0IGEgdmFsdWUgZm9yIHRoaXMuCi0gKiBTdGF0dXM6IGEgb25lLXdvcmQgZGVzY3JpcHRpb24gb2YgdGhlIHN0YXR1cy4gIFZhbGlkIHZhbHVlcyBhcmU6Ci0gKiAgIHdvcmtzIC0gZHJpdmVyIHdvcmtzIGNvcnJlY3RseSBvbiBtb3N0IGJvYXJkcyBzdXBwb3J0ZWQsIGFuZAotICogICAgIHBhc3NlcyBjb21lZGlfdGVzdC4KLSAqICAgdW5rbm93biAtIHVua25vd24uICBVc3VhbGx5IHB1dCB0aGVyZSBieSBkcy4KLSAqICAgZXhwZXJpbWVudGFsIC0gbWF5IG5vdCB3b3JrIGluIGFueSBwYXJ0aWN1bGFyIHJlbGVhc2UuICBBdXRob3IKLSAqICAgICBwcm9iYWJseSB3YW50cyBhc3Npc3RhbmNlIHRlc3RpbmcgaXQuCi0gKiAgIGJpdHJvdHRlbiAtIGRyaXZlciBoYXMgbm90IGJlZW4gdXBkYXRlIGluIGEgbG9uZyB0aW1lLCBwcm9iYWJseQotICogICAgIGRvZXNuJ3Qgd29yaywgYW5kIHByb2JhYmx5IGlzIG1pc3Npbmcgc3VwcG9ydCBmb3Igc2lnbmlmaWNhbnQKLSAqICAgICBDb21lZGkgaW50ZXJmYWNlIGZlYXR1cmVzLgotICogICB1bnRlc3RlZCAtIGF1dGhvciBwcm9iYWJseSB3cm90ZSBpdCAiYmxpbmQiLCBhbmQgaXMgYmVsaWV2ZWQgdG8KLSAqICAgICB3b3JrLCBidXQgbm8gY29uZmlybWF0aW9uLgorICogIERyaXZlcjogdGhlIG5hbWUgb2YgdGhlIGRyaXZlcgorICogIERlc2NyaXB0aW9uOiBhIHNob3J0IHBocmFzZSBkZXNjcmliaW5nIHRoZSBkcml2ZXIuICBEb24ndCBsaXN0IGJvYXJkcy4KKyAqICBEZXZpY2VzOiBhIGZ1bGwgbGlzdCBvZiB0aGUgYm9hcmRzIHRoYXQgYXR0ZW1wdCB0byBiZSBzdXBwb3J0ZWQgYnkKKyAqICAgIHRoZSBkcml2ZXIuICBGb3JtYXQgaXMgIihtYW51ZmFjdHVyZXIpIGJvYXJkIG5hbWUgW2NvbWVkaSBuYW1lXSIsCisgKiAgICB3aGVyZSBjb21lZGlfbmFtZSBpcyB0aGUgbmFtZSB0aGF0IGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBib2FyZC4KKyAqICAgIFNlZSB0aGUgY29tbWVudCBuZWFyIGJvYXJkX25hbWU6IGluIHRoZSBzdHJ1Y3QgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUKKyAqICAgIGJlbG93LiAgSWYgKG1hbnVmYWN0dXJlcikgb3IgW2NvbWVkaSBuYW1lXSBpcyBtaXNzaW5nLCB0aGUgcHJldmlvdXMKKyAqICAgIHZhbHVlIGlzIHVzZWQuCisgKiAgQXV0aG9yOiB5b3UKKyAqICBVcGRhdGVkOiBkYXRlIHdoZW4gdGhlIF9kb2N1bWVudGF0aW9uXyB3YXMgbGFzdCB1cGRhdGVkLiAgVXNlICdkYXRlIC1SJworICogICAgdG8gZ2V0IGEgdmFsdWUgZm9yIHRoaXMuCisgKiAgU3RhdHVzOiBhIG9uZS13b3JkIGRlc2NyaXB0aW9uIG9mIHRoZSBzdGF0dXMuICBWYWxpZCB2YWx1ZXMgYXJlOgorICogICAgd29ya3MgLSBkcml2ZXIgd29ya3MgY29ycmVjdGx5IG9uIG1vc3QgYm9hcmRzIHN1cHBvcnRlZCwgYW5kCisgKiAgICAgIHBhc3NlcyBjb21lZGlfdGVzdC4KKyAqICAgIHVua25vd24gLSB1bmtub3duLiAgVXN1YWxseSBwdXQgdGhlcmUgYnkgZHMuCisgKiAgICBleHBlcmltZW50YWwgLSBtYXkgbm90IHdvcmsgaW4gYW55IHBhcnRpY3VsYXIgcmVsZWFzZS4gIEF1dGhvcgorICogICAgICBwcm9iYWJseSB3YW50cyBhc3Npc3RhbmNlIHRlc3RpbmcgaXQuCisgKiAgICBiaXRyb3R0ZW4gLSBkcml2ZXIgaGFzIG5vdCBiZWVuIHVwZGF0ZSBpbiBhIGxvbmcgdGltZSwgcHJvYmFibHkKKyAqICAgICAgZG9lc24ndCB3b3JrLCBhbmQgcHJvYmFibHkgaXMgbWlzc2luZyBzdXBwb3J0IGZvciBzaWduaWZpY2FudAorICogICAgICBDb21lZGkgaW50ZXJmYWNlIGZlYXR1cmVzLgorICogICAgdW50ZXN0ZWQgLSBhdXRob3IgcHJvYmFibHkgd3JvdGUgaXQgImJsaW5kIiwgYW5kIGlzIGJlbGlldmVkIHRvCisgKiAgICAgIHdvcmssIGJ1dCBubyBjb25maXJtYXRpb24uCiAgKgogICogVGhlc2UgaGVhZGVycyBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYSBibGFuayBsaW5lLCBhbmQgYW55IGNvbW1lbnRzCiAgKiB5b3Ugd2lzaCB0byBzYXkgYWJvdXQgdGhlIGRyaXZlci4gIFRoZSBjb21tZW50IGFyZWEgaXMgdGhlIHBsYWNlCkBAIC02MjAsMTIgKzYyMCw1OSBAQAogCXJldHVybiBpbnNuLT5uOwogfQogCi0vKgotICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAotICogYXMgbmVjZXNzYXJ5LgotICovCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3NrZWwpOwotLyogSWYgeW91IGFyZSB3cml0aW5nIGEgUENJIGRyaXZlciB5b3Ugc2hvdWxkIHVzZSBDT01FRElfUENJX0lOSVRDTEVBTlVQCi0gKiBpbnN0ZWFkLgotICovCi0vKiBDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9za2VsLCBza2VsX3BjaV90YWJsZSkgKi8KKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorc3RhdGljIGludCBfX2RldmluaXQgZHJpdmVyX3NrZWxfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBkcml2ZXJfc2tlbC5kcml2ZXJfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkcml2ZXJfc2tlbF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXJfc2tlbF9wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IHNrZWxfcGNpX3RhYmxlLAorCS5wcm9iZSA9ICZkcml2ZXJfc2tlbF9wY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKCZkcml2ZXJfc2tlbF9wY2lfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX3NrZWxfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX3NrZWwpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJZHJpdmVyX3NrZWxfcGNpX2RyaXZlci5uYW1lID0gKGNoYXIgKilkcml2ZXJfc2tlbC5kcml2ZXJfbmFtZTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX3NrZWxfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfc2tlbF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX3NrZWxfcGNpX2RyaXZlcik7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfc2tlbCk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9za2VsX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9za2VsX2NsZWFudXBfbW9kdWxlKTsKKyNlbHNlCitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfc2tlbF9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfc2tlbCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfc2tlbF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX3NrZWwpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfc2tlbF9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfc2tlbF9jbGVhbnVwX21vZHVsZSk7CisjZW5kaWYKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3Nzdl9kbnAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zc3ZfZG5wLmMKaW5kZXggMThiMGE4My4uNTI2ZGUyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3Nzdl9kbnAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc3N2X2RucC5jCkBAIC0xMDIsNyArMTAyLDE4IEBACiAJLm51bV9uYW1lcyA9IEFSUkFZX1NJWkUoZG5wX2JvYXJkcyksCiB9OwogCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2RucCk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfZG5wX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9kbnApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2RucF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2RucCk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9kbnBfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2RucF9jbGVhbnVwX21vZHVsZSk7CiAKIHN0YXRpYyBpbnQgZG5wX2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAkJCSAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCkBAIC0zMTQsMyArMzI1LDcgQEAKIAlyZXR1cm4gMTsKIAogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdW5pb3h4NS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VuaW94eDUuYwppbmRleCAxNmQ0YzlmLi41OTg4ODRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdW5pb3h4NS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91bmlveHg1LmMKQEAgLTExNCw3ICsxMTQsMTggQEAKIAkuZGV0YWNoID0gdW5pb3h4NV9kZXRhY2gKIH07CiAKLUNPTUVESV9JTklUQ0xFQU5VUCh1bmlveHg1X2RyaXZlcik7CitzdGF0aWMgaW50IF9faW5pdCB1bmlveHg1X2RyaXZlcl9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZ1bmlveHg1X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1bmlveHg1X2RyaXZlcl9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmdW5pb3h4NV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh1bmlveHg1X2RyaXZlcl9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdCh1bmlveHg1X2RyaXZlcl9jbGVhbnVwX21vZHVsZSk7CiAKIHN0YXRpYyBpbnQgdW5pb3h4NV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAkJCSAgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQpAQCAtMzAyLDcgKzMxMyw4IEBACiAJCV9fdW5pb3h4NV9hbmFsb2dfY29uZmlnKHVzcCwgaSAqIDIpOwogCQlvdXRiKGkgKyAxLCBzdWJkZXZfaW9iYXNlICsgNSk7CS8qIHNlbmRzIGNoYW5uZWwgbnVtYmVyIHRvIGNhcmQgKi8KIAkJb3V0YignSCcsIHN1YmRldl9pb2Jhc2UgKyA2KTsJLyogcmVxdWVzdHMgRUVQUk9NIHdvcmxkICovCi0JCXdoaWxlICghKGluYihzdWJkZXZfaW9iYXNlICsgMCkgJiBUeEJFKSkgOwkvKiB3YWl0cyB3aGlsZSB3cml0dGluZyB3aWxsIGJlIGFsbG93ZWQgKi8KKwkJd2hpbGUgKCEoaW5iKHN1YmRldl9pb2Jhc2UgKyAwKSAmIFR4QkUpKQorCQkJOwkvKiB3YWl0cyB3aGlsZSB3cml0dGluZyB3aWxsIGJlIGFsbG93ZWQgKi8KIAkJb3V0YigwLCBzdWJkZXZfaW9iYXNlICsgNik7CiAKIAkJLyogd2FpdHMgd2hpbGUgcmVhZGluZyBvZiB0d28gYnl0ZXMgd2lsbCBiZSBhbGxvd2VkICovCkBAIC00MzcsNyArNDQ5LDggQEAKIAogCS8qIHNlbmRpbmcgZm9yIGJ5dGVzIHRvIG1vZHVsZShvbmUgYnl0ZSBwZXIgY3ljbGUgaXRlcmF0aW9uKSAqLwogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJd2hpbGUgKCEoKGluYih1c3AtPnVzcF9pb2Jhc2UgKyAwKSkgJiBUeEJFKSkgOwkvKiB3YWl0cyB3aGlsZSB3cml0dGluZyB3aWxsIGJlIGFsbG93ZWQgKi8KKwkJd2hpbGUgKCEoKGluYih1c3AtPnVzcF9pb2Jhc2UgKyAwKSkgJiBUeEJFKSkKKwkJCTsJLyogd2FpdHMgd2hpbGUgd3JpdHRpbmcgd2lsbCBiZSBhbGxvd2VkICovCiAJCW91dGIodXNwLT51c3BfZXh0cmFfZGF0YVttb2R1bGVdW2ldLCB1c3AtPnVzcF9pb2Jhc2UgKyA2KTsKIAl9CiAKQEAgLTQ2Nyw3ICs0ODAsOCBAQAogCWNvbnRyb2wgPSBpbmIodXNwLT51c3BfaW9iYXNlKTsJLyogZ2V0IGNvbnRyb2wgcmVnaXN0ZXIgYnl0ZSAqLwogCiAJLyogd2FpdHMgd2hpbGUgcmVhZGluZyBmb3VyIGJ5dGVzIHdpbGwgYmUgYWxsb3dlZCAqLwotCXdoaWxlICghKChjb250cm9sID0gaW5iKHVzcC0+dXNwX2lvYmFzZSArIDApKSAmIFJ4NENBKSkgOworCXdoaWxlICghKChjb250cm9sID0gaW5iKHVzcC0+dXNwX2lvYmFzZSArIDApKSAmIFJ4NENBKSkKKwkJOwogCiAJLyogaWYgZm91ciBieXRlcyByZWFkZGluZyBlcnJvciBvY2N1cnMgLSByZXR1cm4gMChmYWxzZSkgKi8KIAlpZiAoKGNvbnRyb2wgJiBSeDRDQV9FUlJfTUFTSykpIHsKQEAgLTUyNiwzICs1NDAsNyBAQAogCiAJcmV0dXJuIChjaGFuX251bSA+PiAzKSArIDE7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXguYwppbmRleCAyN2I0Y2IyLi40YjMyMGIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eC5jCkBAIC0xMTEsNyArMTExLDcgQEAKICNkZWZpbmUgVkVORE9SX0RJUl9JTiAgMHhDMAogI2RlZmluZSBWRU5ET1JfRElSX09VVCAweDQwCiAKLS8qIGludGVybmFsIGFkcmVzc2VzIG9mIHRoZSA4MDUxIHByb2Nlc3NvciAqLworLyogaW50ZXJuYWwgYWRkcmVzc2VzIG9mIHRoZSA4MDUxIHByb2Nlc3NvciAqLwogI2RlZmluZSBVU0JEVVhTVUJfQ1BVQ1MgMHhFNjAwCiAKIC8qCkBAIC0yMDg1LDcgKzIwODUsNyBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JLyogaW5pdGFsaXNlIHRoZSBidWZmZXIgKi8KKwkvKiBpbml0aWFsaXNlIHRoZSBidWZmZXIgKi8KIAlmb3IgKGkgPSAwOyBpIDwgdGhpc191c2JkdXhzdWItPnNpemVQd21CdWY7IGkrKykKIAkJKChjaGFyICopKHRoaXNfdXNiZHV4c3ViLT51cmJQd20tPnRyYW5zZmVyX2J1ZmZlcikpW2ldID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eGZhc3QuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXhmYXN0LmMKaW5kZXggMjljM2MwMS4uMGExNjRhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eGZhc3QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4ZmFzdC5jCkBAIC02Nyw3ICs2Nyw3IEBACiAjZGVmaW5lIFZFTkRPUl9ESVJfT1VUCQkweDQwCiAKIC8qCi0gKiBpbnRlcm5hbCBhZHJlc3NlcyBvZiB0aGUgODA1MSBwcm9jZXNzb3IKKyAqIGludGVybmFsIGFkZHJlc3NlcyBvZiB0aGUgODA1MSBwcm9jZXNzb3IKICAqLwogI2RlZmluZSBVU0JEVVhGQVNUU1VCX0NQVUNTCTB4RTYwMAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2tjb21lZGlsaWIva2NvbWVkaWxpYl9tYWluLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2tjb21lZGlsaWIva2NvbWVkaWxpYl9tYWluLmMKaW5kZXggODYzYWFlNC4uMDI1MmI0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2tjb21lZGlsaWJfbWFpbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkva2NvbWVkaWxpYi9rY29tZWRpbGliX21haW4uYwpAQCAtOTMsNyArOTMsNyBAQAogCXMgPSBkZXYtPnN1YmRldmljZXMgKyBpbnNuLT5zdWJkZXY7CiAKIAlpZiAocy0+dHlwZSA9PSBDT01FRElfU1VCRF9VTlVTRUQpIHsKLQkJcHJpbnRrKCIlZCBub3QgdXNlYWJsZSBzdWJkZXZpY2VcbiIsIGluc24tPnN1YmRldik7CisJCXByaW50ayhLRVJOX0VSUiAiJWQgbm90IHVzZWFibGUgc3ViZGV2aWNlXG4iLCBpbnNuLT5zdWJkZXYpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIGVycm9yOwogCX0KQEAgLTEwMiw3ICsxMDIsNyBAQAogCiAJcmV0ID0gY29tZWRpX2NoZWNrX2NoYW5saXN0KHMsIDEsICZpbnNuLT5jaGFuc3BlYyk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJiYWQgY2hhbnNwZWNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgImJhZCBjaGFuc3BlY1xuIik7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyb3I7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9jcnlzdGFsaGRfbG54LmMgYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9sbnguYwppbmRleCBhNGVjODkxLi5mYmI4MGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9sbnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9sbnguYwpAQCAtMTUsMTEgKzE1LDEyIEBACiAgIGFsb25nIHdpdGggdGhpcyBkcml2ZXIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSAiY3J5c3RhbGhkX2xueC5oIgogCitzdGF0aWMgREVGSU5FX01VVEVYKGNoZF9kZWNfbXV0ZXgpOwogc3RhdGljIHN0cnVjdCBjbGFzcyAqY3J5c3RhbGhkX2NsYXNzOwogCiBzdGF0aWMgc3RydWN0IGNyeXN0YWxoZF9hZHAgKmdfYWRwX2luZm87CkBAIC0xNTIsMTAgKzE1Myw4IEBACiAJaWYgKHJjKSB7CiAJCUJDTUxPR19FUlIoImZhaWxlZCB0byBwdWxsIGFkZF9jZGF0YSBzejoleCB1YV9vZmY6JXhcbiIsCiAJCQkgICBpby0+YWRkX2NkYXRhX3N6LCAodW5zaWduZWQgaW50KXVhX29mZik7Ci0JCWlmIChpby0+YWRkX2NkYXRhKSB7Ci0JCQlrZnJlZShpby0+YWRkX2NkYXRhKTsKLQkJCWlvLT5hZGRfY2RhdGEgPSBOVUxMOwotCQl9CisJCWtmcmVlKGlvLT5hZGRfY2RhdGEpOworCQlpby0+YWRkX2NkYXRhID0gTlVMTDsKIAkJcmV0dXJuIC1FTk9EQVRBOwogCX0KIApAQCAtMjczLDIyICsyNzIsMjIgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JdWMgPSAoc3RydWN0IGNyeXN0YWxoZF91c2VyICopZmQtPnByaXZhdGVfZGF0YTsKKwl1YyA9IGZkLT5wcml2YXRlX2RhdGE7CiAJaWYgKCF1YykgewogCQlCQ01MT0dfRVJSKCJGYWlsZWQgdG8gZ2V0IHVjXG4iKTsKIAkJcmV0dXJuIC1FTk9EQVRBOwogCX0KIAotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmY2hkX2RlY19tdXRleCk7CiAJY3Byb2MgPSBjcnlzdGFsaGRfZ2V0X2NtZF9wcm9jKCZhZHAtPmNtZHMsIGNtZCwgdWMpOwogCWlmICghY3Byb2MpIHsKIAkJQkNNTE9HX0VSUigiVW5oYW5kbGVkIGNvbW1hbmQ6ICVkXG4iLCBjbWQpOwotCQl1bmxvY2tfa2VybmVsKCk7CisJCW11dGV4X3VubG9jaygmY2hkX2RlY19tdXRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXJldCA9IGNoZF9kZWNfYXBpX2NtZChhZHAsIHVhLCB1Yy0+dWlkLCBjbWQsIGNwcm9jKTsKLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZjaGRfZGVjX211dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMzQsNyArMzMzLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JdWMgPSAoc3RydWN0IGNyeXN0YWxoZF91c2VyICopZmQtPnByaXZhdGVfZGF0YTsKKwl1YyA9IGZkLT5wcml2YXRlX2RhdGE7CiAJaWYgKCF1YykgewogCQlCQ01MT0dfRVJSKCJGYWlsZWQgdG8gZ2V0IHVjXG4iKTsKIAkJcmV0dXJuIC1FTk9EQVRBOwpAQCAtNDM1LDggKzQzNCw3IEBACiAJLyogQ2xlYXIgaW9kYXRhIHBvb2wuLiAqLwogCWRvIHsKIAkJdGVtcCA9IGNoZF9kZWNfYWxsb2NfaW9kYXRhKGFkcCwgMCk7Ci0JCWlmICh0ZW1wKQotCQkJa2ZyZWUodGVtcCk7CisJCWtmcmVlKHRlbXApOwogCX0gd2hpbGUgKHRlbXApOwogCiAJY3J5c3RhbGhkX2RlbGV0ZV9lbGVtX3Bvb2woYWRwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvTWFrZWZpbGUKaW5kZXggMTBmODdmMC4uZDBlYjE2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvTWFrZWZpbGUKQEAgLTEsOSArMSw4IEBACi1jeDI1ODIxLW9ianMJOj0gY3gyNTgyMS1jb3JlLm8gY3gyNTgyMS1jYXJkcy5vIGN4MjU4MjEtaTJjLm8gY3gyNTgyMS1ncGlvLm8gCQkJCVwKLQkJCQljeDI1ODIxLW1lZHVzYS12aWRlby5vIGN4MjU4MjEtdmlkZW8ubyBjeDI1ODIxLXZpZGVvMC5vIGN4MjU4MjEtdmlkZW8xLm8gICAgXAotCQkJCWN4MjU4MjEtdmlkZW8yLm8gY3gyNTgyMS12aWRlbzMubyBjeDI1ODIxLXZpZGVvNC5vIGN4MjU4MjEtdmlkZW81Lm8gICAgICAgICBcCi0JCQkJY3gyNTgyMS12aWRlbzYubyBjeDI1ODIxLXZpZGVvNy5vIGN4MjU4MjEtdmlkdXBzOS5vIGN4MjU4MjEtdmlkdXBzMTAubyAgICAgIFwKLQkJCQljeDI1ODIxLWF1ZHVwczExLm8gY3gyNTgyMS12aWRlby11cHN0cmVhbS5vIGN4MjU4MjEtdmlkZW8tdXBzdHJlYW0tY2gyLm8gCVwKLQkJCQljeDI1ODIxLWF1ZGlvLXVwc3RyZWFtLm8gY3gyNTgyMS12aWRlb2lvY3RsLm8KK2N4MjU4MjEtb2JqcyAgIDo9IGN4MjU4MjEtY29yZS5vIGN4MjU4MjEtY2FyZHMubyBjeDI1ODIxLWkyYy5vIFwKKwkJICAgICAgIGN4MjU4MjEtZ3Bpby5vIGN4MjU4MjEtbWVkdXNhLXZpZGVvLm8gXAorCQkgICAgICAgY3gyNTgyMS12aWRlby5vIGN4MjU4MjEtdmlkZW8tdXBzdHJlYW0ubyBcCisJCSAgICAgICBjeDI1ODIxLXZpZGVvLXVwc3RyZWFtLWNoMi5vIFwKKwkJICAgICAgIGN4MjU4MjEtYXVkaW8tdXBzdHJlYW0ubwogCiBvYmotJChDT05GSUdfVklERU9fQ1gyNTgyMSkgKz0gY3gyNTgyMS5vCiBvYmotJChDT05GSUdfVklERU9fQ1gyNTgyMV9BTFNBKSArPSBjeDI1ODIxLWFsc2EubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1hbHNhLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWFsc2EuYwppbmRleCAxNzk4OTc1Li5iYmUzNjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWFsc2EuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWFsc2EuYwpAQCAtNTUsNiArNTUsMTIgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2NhcmQgKnNuZF9jeDI1ODIxX2NhcmRzW1NORFJWX0NBUkRTXTsKIHN0YXRpYyBpbnQgZGV2bm87CiAKK3N0cnVjdCBjeDI1ODIxX2F1ZGlvX2J1ZmZlciB7CisJdW5zaWduZWQgaW50IGJwbDsKKwlzdHJ1Y3QgYnRjeF9yaXNjbWVtIHJpc2M7CisJc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiBkbWE7Cit9OworCiBzdHJ1Y3QgY3gyNTgyMV9hdWRpb19kZXYgewogCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2OwogCXN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlIHE7CkBAIC03Nyw3ICs4Myw3IEBACiAKIAlzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWFfcmlzYzsKIAotCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmOworCXN0cnVjdCBjeDI1ODIxX2F1ZGlvX2J1ZmZlciAqYnVmOwogCiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CiB9OwpAQCAtMTM2LDcgKzE0Miw3IEBACiAKIHN0YXRpYyBpbnQgX2N4MjU4MjFfc3RhcnRfYXVkaW9fZG1hKHN0cnVjdCBjeDI1ODIxX2F1ZGlvX2RldiAqY2hpcCkKIHsKLQlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZiA9IGNoaXAtPmJ1ZjsKKwlzdHJ1Y3QgY3gyNTgyMV9hdWRpb19idWZmZXIgKmJ1ZiA9IGNoaXAtPmJ1ZjsKIAlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGNoaXAtPmRldjsKIAlzdHJ1Y3Qgc3JhbV9jaGFubmVsICphdWRpb19jaCA9CiAJICAgICZjeDI1ODIxX3NyYW1fY2hhbm5lbHNbQVVESU9fU1JBTV9DSEFOTkVMXTsKQEAgLTMzMSw3ICszMzcsNyBAQAogCUJVR19PTighY2hpcC0+ZG1hX3NpemUpOwogCiAJZHByaW50aygyLCAiRnJlZWluZyBidWZmZXJcbiIpOwotCXZpZGVvYnVmX3NnX2RtYV91bm1hcCgmY2hpcC0+cGNpLT5kZXYsIGNoaXAtPmRtYV9yaXNjKTsKKwl2aWRlb2J1Zl9kbWFfdW5tYXAoJmNoaXAtPnBjaS0+ZGV2LCBjaGlwLT5kbWFfcmlzYyk7CiAJdmlkZW9idWZfZG1hX2ZyZWUoY2hpcC0+ZG1hX3Jpc2MpOwogCWJ0Y3hfcmlzY21lbV9mcmVlKGNoaXAtPnBjaSwgJmNoaXAtPmJ1Zi0+cmlzYyk7CiAJa2ZyZWUoY2hpcC0+YnVmKTsKQEAgLTQzMiw3ICs0MzgsNyBAQAogCXN0cnVjdCBjeDI1ODIxX2F1ZGlvX2RldiAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWE7CiAKLQlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZjsKKwlzdHJ1Y3QgY3gyNTgyMV9hdWRpb19idWZmZXIgKmJ1ZjsKIAlpbnQgcmV0OwogCiAJaWYgKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEpIHsKQEAgLTQ0NywzNiArNDUzLDMxIEBACiAJQlVHX09OKCFjaGlwLT5kbWFfc2l6ZSk7CiAJQlVHX09OKGNoaXAtPm51bV9wZXJpb2RzICYgKGNoaXAtPm51bV9wZXJpb2RzIC0gMSkpOwogCi0JYnVmID0gdmlkZW9idWZfc2dfYWxsb2Moc2l6ZW9mKCpidWYpKTsKKwlidWYgPSBremFsbG9jKHNpemVvZigqYnVmKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKE5VTEwgPT0gYnVmKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWlmIChjaGlwLT5wZXJpb2Rfc2l6ZSA+IEFVRElPX0xJTkVfU0laRSkKIAkJY2hpcC0+cGVyaW9kX3NpemUgPSBBVURJT19MSU5FX1NJWkU7CiAKLQlidWYtPnZiLm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7Ci0JYnVmLT52Yi5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKLQlidWYtPnZiLndpZHRoID0gY2hpcC0+cGVyaW9kX3NpemU7CiAJYnVmLT5icGwgPSBjaGlwLT5wZXJpb2Rfc2l6ZTsKLQlidWYtPnZiLmhlaWdodCA9IGNoaXAtPm51bV9wZXJpb2RzOwotCWJ1Zi0+dmIuc2l6ZSA9IGNoaXAtPmRtYV9zaXplOwogCi0JZG1hID0gdmlkZW9idWZfdG9fZG1hKCZidWYtPnZiKTsKKwlkbWEgPSAmYnVmLT5kbWE7CiAJdmlkZW9idWZfZG1hX2luaXQoZG1hKTsKLQogCXJldCA9IHZpZGVvYnVmX2RtYV9pbml0X2tlcm5lbChkbWEsIFBDSV9ETUFfRlJPTURFVklDRSwKLQkJCQkgICAgICAgKFBBR0VfQUxJR04oYnVmLT52Yi5zaXplKSA+PgorCQkJCSAgICAgICAoUEFHRV9BTElHTihjaGlwLT5kbWFfc2l6ZSkgPj4KIAkJCQkJUEFHRV9TSElGVCkpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycm9yOwogCi0JcmV0ID0gdmlkZW9idWZfc2dfZG1hX21hcCgmY2hpcC0+cGNpLT5kZXYsIGRtYSk7CisJcmV0ID0gdmlkZW9idWZfZG1hX21hcCgmY2hpcC0+cGNpLT5kZXYsIGRtYSk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyb3I7CiAKIAlyZXQgPQogCSAgICBjeDI1ODIxX3Jpc2NfZGF0YWJ1ZmZlcl9hdWRpbyhjaGlwLT5wY2ksICZidWYtPnJpc2MsIGRtYS0+c2dsaXN0LAotCQkJCQkgIGJ1Zi0+dmIud2lkdGgsIGJ1Zi0+dmIuaGVpZ2h0LCAxKTsKKwkJCQkJICBjaGlwLT5wZXJpb2Rfc2l6ZSwgY2hpcC0+bnVtX3BlcmlvZHMsCisJCQkJCSAgMSk7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTwogCQkJIkRFQlVHOiBFUlJPUiBhZnRlciBjeDI1ODIxX3Jpc2NfZGF0YWJ1ZmZlcl9hdWRpbygpXG4iKTsKQEAgLTQ4OCwxMiArNDg5LDEwIEBACiAJYnVmLT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKGJ1Zi0+cmlzYy5kbWEpOwogCWJ1Zi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsJLyogYml0cyA2My0zMiAqLwogCi0JYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1BSRVBBUkVEOwotCiAJY2hpcC0+YnVmID0gYnVmOwogCWNoaXAtPmRtYV9yaXNjID0gZG1hOwogCi0Jc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSA9IGNoaXAtPmRtYV9yaXNjLT52bWFsbG9jOworCXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEgPSBjaGlwLT5kbWFfcmlzYy0+dmFkZHI7CiAJc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYnl0ZXMgPSBjaGlwLT5kbWFfc2l6ZTsKIAlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hZGRyID0gMDsKIApAQCAtNjk5LDcgKzY5OCw3IEBACiAKIAkvKiBDYXJkICJjcmVhdGlvbiIgKi8KIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfY3gyNTgyMV9kZXZfZnJlZTsKLQljaGlwID0gKHN0cnVjdCBjeDI1ODIxX2F1ZGlvX2RldiAqKSBjYXJkLT5wcml2YXRlX2RhdGE7CisJY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlzcGluX2xvY2tfaW5pdCgmY2hpcC0+cmVnX2xvY2spOwogCiAJY2hpcC0+ZGV2ID0gZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1hdWRpby11cHN0cmVhbS5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1hdWRpby11cHN0cmVhbS5jCmluZGV4IGViMzlkMTMuLmNkZmY0OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtYXVkaW8tdXBzdHJlYW0uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWF1ZGlvLXVwc3RyZWFtLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogewogCXVuc2lnbmVkIGludCBsaW5lOwogCXN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2ggPQotCSAgICAmZGV2LT5zcmFtX2NoYW5uZWxzW2Rldi0+X2F1ZGlvX3Vwc3RyZWFtX2NoYW5uZWxfc2VsZWN0XTsKKwkgICBkZXYtPmNoYW5uZWxzW2Rldi0+X2F1ZGlvX3Vwc3RyZWFtX2NoYW5uZWxfc2VsZWN0XS5zcmFtX2NoYW5uZWxzOwogCWludCBvZmZzZXQgPSAwOwogCiAJLyogc2NhbiBsaW5lcyAqLwpAQCAtMjE3LDcgKzIxNyw3IEBACiB2b2lkIGN4MjU4MjFfc3RvcF91cHN0cmVhbV9hdWRpbyhzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldikKIHsKIAlzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoID0KLQkgICAgJmRldi0+c3JhbV9jaGFubmVsc1tBVURJT19VUFNUUkVBTV9TUkFNX0NIQU5ORUxfQl07CisJICAgZGV2LT5jaGFubmVsc1tBVURJT19VUFNUUkVBTV9TUkFNX0NIQU5ORUxfQl0uc3JhbV9jaGFubmVsczsKIAl1MzIgdG1wID0gMDsKIAogCWlmICghZGV2LT5fYXVkaW9faXNfcnVubmluZykgewpAQCAtMjg3LDE0ICsyODcsMTQgQEAKIAkJcmV0dXJuIFBUUl9FUlIobXlmaWxlKTsKIAl9IGVsc2UgewogCQlpZiAoIShteWZpbGUtPmZfb3ApKSB7Ci0JCQlwcmludGsoIiVzOiBGaWxlIGhhcyBubyBmaWxlIG9wZXJhdGlvbnMgcmVnaXN0ZXJlZCFcbiIsCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGaWxlIGhhcyBubyBmaWxlIG9wZXJhdGlvbnMgcmVnaXN0ZXJlZCFcbiIsCiAJCQkgICAgICAgX19mdW5jX18pOwogCQkJZmlscF9jbG9zZShteWZpbGUsIE5VTEwpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAogCQlpZiAoIW15ZmlsZS0+Zl9vcC0+cmVhZCkgewotCQkJcHJpbnRrKCIlczogRmlsZSBoYXMgbm8gUkVBRCBvcGVyYXRpb25zIHJlZ2lzdGVyZWQhXG4iLAorCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmlsZSBoYXMgbm8gUkVBRCBvcGVyYXRpb25zIHJlZ2lzdGVyZWQhXG4iLAogCQkJICAgICAgIF9fZnVuY19fKTsKIAkJCWZpbHBfY2xvc2UobXlmaWxlLCBOVUxMKTsKIAkJCXJldHVybiAtRUlPOwpAQCAtMzUzLDggKzM1Myw5IEBACiAJfQogCiAJY3gyNTgyMV9nZXRfYXVkaW9fZGF0YShkZXYsCi0JCQkgICAgICAgJmRldi0+c3JhbV9jaGFubmVsc1tkZXYtPgotCQkJCQkJICAgX2F1ZGlvX3Vwc3RyZWFtX2NoYW5uZWxfc2VsZWN0XSk7CisJCQkgICAgICBkZXYtPmNoYW5uZWxzW2Rldi0+CisJCQkJICAgICAgIF9hdWRpb191cHN0cmVhbV9jaGFubmVsX3NlbGVjdF0uCisJCQkJICAgICAgIHNyYW1fY2hhbm5lbHMpOwogfQogCiBpbnQgY3gyNTgyMV9vcGVuZmlsZV9hdWRpbyhzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKQEAgLTM3OCwxNCArMzc5LDE0IEBACiAJCXJldHVybiBQVFJfRVJSKG15ZmlsZSk7CiAJfSBlbHNlIHsKIAkJaWYgKCEobXlmaWxlLT5mX29wKSkgewotCQkJcHJpbnRrKCIlczogRmlsZSBoYXMgbm8gZmlsZSBvcGVyYXRpb25zIHJlZ2lzdGVyZWQhXG4iLAorCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmlsZSBoYXMgbm8gZmlsZSBvcGVyYXRpb25zIHJlZ2lzdGVyZWQhXG4iLAogCQkJICAgICAgIF9fZnVuY19fKTsKIAkJCWZpbHBfY2xvc2UobXlmaWxlLCBOVUxMKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CiAKIAkJaWYgKCFteWZpbGUtPmZfb3AtPnJlYWQpIHsKLQkJCXByaW50aygiJXM6IEZpbGUgaGFzIG5vIFJFQUQgb3BlcmF0aW9ucyByZWdpc3RlcmVkIVxuIiwKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZpbGUgaGFzIG5vIFJFQUQgb3BlcmF0aW9ucyByZWdpc3RlcmVkIVxuIiwKIAkJCSAgICAgICBfX2Z1bmNfXyk7CiAJCQlmaWxwX2Nsb3NlKG15ZmlsZSwgTlVMTCk7CiAJCQlyZXR1cm4gLUVJTzsKQEAgLTUwNSw3ICs1MDYsNyBAQAogewogCWludCBpID0gMDsKIAl1MzIgaW50X21za190bXA7Ci0Jc3RydWN0IHNyYW1fY2hhbm5lbCAqY2hhbm5lbCA9ICZkZXYtPnNyYW1fY2hhbm5lbHNbY2hhbl9udW1dOworICAgICAgIHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWwgPSBkZXYtPmNoYW5uZWxzW2NoYW5fbnVtXS5zcmFtX2NoYW5uZWxzOwogCWRtYV9hZGRyX3QgcmlzY19waHlzX2p1bXBfYWRkcjsKIAlfX2xlMzIgKnJwOwogCkBAIC01NjksMTUgKzU3MCwxNSBAQAogCQlzcGluX3VubG9jaygmZGV2LT5zbG9jayk7CiAJfSBlbHNlIHsKIAkJaWYgKHN0YXR1cyAmIEZMRF9BVURfU1JDX09GKQotCQkJcHJpbnRrKCIlczogQXVkaW8gUmVjZWl2ZWQgT3ZlcmZsb3cgRXJyb3IgSW50ZXJydXB0IVxuIiwKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBBdWRpbyBSZWNlaXZlZCBPdmVyZmxvdyBFcnJvciBJbnRlcnJ1cHQhXG4iLAogCQkJICAgICAgIF9fZnVuY19fKTsKIAogCQlpZiAoc3RhdHVzICYgRkxEX0FVRF9TUkNfU1lOQykKLQkJCXByaW50aygiJXM6IEF1ZGlvIFJlY2VpdmVkIFN5bmMgRXJyb3IgSW50ZXJydXB0IVxuIiwKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBBdWRpbyBSZWNlaXZlZCBTeW5jIEVycm9yIEludGVycnVwdCFcbiIsCiAJCQkgICAgICAgX19mdW5jX18pOwogCiAJCWlmIChzdGF0dXMgJiBGTERfQVVEX1NSQ19PUENfRVJSKQotCQkJcHJpbnRrKCIlczogQXVkaW8gUmVjZWl2ZWQgT3BDb2RlIEVycm9yIEludGVycnVwdCFcbiIsCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQXVkaW8gUmVjZWl2ZWQgT3BDb2RlIEVycm9yIEludGVycnVwdCFcbiIsCiAJCQkgICAgICAgX19mdW5jX18pOwogCiAJCS8qIFJlYWQgYW5kIHdyaXRlIGJhY2sgdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgdG8gY2xlYXIKQEAgLTU4Niw3ICs1ODcsNyBAQAogCX0KIAogCWlmIChkZXYtPl9hdWRpb2ZpbGVfc3RhdHVzID09IEVORF9PRl9GSUxFKSB7Ci0JCXByaW50aygiY3gyNTgyMTogRU9GIENoYW5uZWwgQXVkaW8gRnJhbWVjb3VudCA9ICVkXG4iLAorCQlwcmludGsoS0VSTl9XQVJOSU5HICJjeDI1ODIxOiBFT0YgQ2hhbm5lbCBBdWRpbyBGcmFtZWNvdW50ID0gJWRcbiIsCiAJCSAgICAgICBkZXYtPl9hdWRpb2ZyYW1lX2NvdW50KTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTYwNyw3ICs2MDgsOCBAQAogCWlmICghZGV2KQogCQlyZXR1cm4gLTE7CiAKLQlzcmFtX2NoID0gJmRldi0+c3JhbV9jaGFubmVsc1tkZXYtPl9hdWRpb191cHN0cmVhbV9jaGFubmVsX3NlbGVjdF07CisgICAgICAgc3JhbV9jaCA9IGRldi0+Y2hhbm5lbHNbZGV2LT5fYXVkaW9fdXBzdHJlYW1fY2hhbm5lbF9zZWxlY3RdLgorCQkJCSAgICAgICBzcmFtX2NoYW5uZWxzOwogCiAJbXNrX3N0YXQgPSBjeF9yZWFkKHNyYW1fY2gtPmludF9tc3RhdCk7CiAJYXVkaW9fc3RhdHVzID0gY3hfcmVhZChzcmFtX2NoLT5pbnRfc3RhdCk7CkBAIC02NDQsOCArNjQ2LDggQEAKIAogCQkvKiAxMCBtaWxsaXNlY29uZCB0aW1lb3V0ICovCiAJCWlmIChjb3VudCsrID4gMTAwMCkgewotCQkJcHJpbnRrCi0JCQkgICAgKCJjeDI1ODIxIEVSUk9SOiAlcygpIGZpZm8gaXMgTk9UIHR1cm5lZCBvbi4gVGltZW91dCFcbiIsCisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiY3gyNTgyMSBFUlJPUjogJXMoKSBmaWZvIGlzIE5PVCB0dXJuZWQgb24uIFRpbWVvdXQhXG4iLAogCQkJICAgICBfX2Z1bmNfXyk7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTcyNiwxMiArNzI4LDEyIEBACiAJaW50IHN0cl9sZW5ndGggPSAwOwogCiAJaWYgKGRldi0+X2F1ZGlvX2lzX3J1bm5pbmcpIHsKLQkJcHJpbnRrKCJBdWRpbyBDaGFubmVsIGlzIHN0aWxsIHJ1bm5pbmcgc28gcmV0dXJuIVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkF1ZGlvIENoYW5uZWwgaXMgc3RpbGwgcnVubmluZyBzbyByZXR1cm4hXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJZGV2LT5fYXVkaW9fdXBzdHJlYW1fY2hhbm5lbF9zZWxlY3QgPSBjaGFubmVsX3NlbGVjdDsKLQlzcmFtX2NoID0gJmRldi0+c3JhbV9jaGFubmVsc1tjaGFubmVsX3NlbGVjdF07CisgICAgICAgc3JhbV9jaCA9IGRldi0+Y2hhbm5lbHNbY2hhbm5lbF9zZWxlY3RdLnNyYW1fY2hhbm5lbHM7CiAKIAkvKiBXb3JrIHF1ZXVlICovCiAJSU5JVF9XT1JLKCZkZXYtPl9hdWRpb193b3JrX2VudHJ5LCBjeDI1ODIxX2F1ZGlvdXBzX2hhbmRsZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1hdWRpby5oIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1hdWRpby5oCmluZGV4IDUwM2Y0MmYuLjQzNGIyYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtYXVkaW8uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWF1ZGlvLmgKQEAgLTI3LDI0ICsyNywyNSBAQAogI2RlZmluZSBMSU5FU19QRVJfQlVGRkVSICAgICAgICAgICAgMTUKICNkZWZpbmUgQVVESU9fTElORV9TSVpFICAgICAgICAgICAgIDEyOAogCi0vL051bWJlciBvZiBidWZmZXIgcHJvZ3JhbXMgdG8gdXNlIGF0IG9uY2UuCisvKiBOdW1iZXIgb2YgYnVmZmVyIHByb2dyYW1zIHRvIHVzZSBhdCBvbmNlLiAqLwogI2RlZmluZSBOVU1CRVJfT0ZfUFJPR1JBTVMgIDgKIAotLy9NYXggc2l6ZSBvZiB0aGUgUklTQyBwcm9ncmFtIGZvciBhIGJ1ZmZlci4gLSB3b3JzdCBjYXNlIGlzIDIgd3JpdGVzIHBlciBsaW5lCi0vLyBTcGFjZSBpcyBhbHNvIGFkZGVkIGZvciB0aGUgNCBuby1vcCBpbnN0cnVjdGlvbnMgYWRkZWQgb24gdGhlIGVuZC4KLQorLyoKKyAgTWF4IHNpemUgb2YgdGhlIFJJU0MgcHJvZ3JhbSBmb3IgYSBidWZmZXIuIC0gd29yc3QgY2FzZSBpcyAyIHdyaXRlcyBwZXIgbGluZQorICBTcGFjZSBpcyBhbHNvIGFkZGVkIGZvciB0aGUgNCBuby1vcCBpbnN0cnVjdGlvbnMgYWRkZWQgb24gdGhlIGVuZC4KKyovCiAjaWZuZGVmIFVTRV9SSVNDX05PT1AKICNkZWZpbmUgTUFYX0JVRkZFUl9QUk9HUkFNX1NJWkUgICAgIFwKICAgICAoMipMSU5FU19QRVJfQlVGRkVSKlJJU0NfV1JJVEVfSU5TVFJVQ1RJT05fU0laRSArIFJJU0NfV1JJVEVDUl9JTlNUUlVDVElPTl9TSVpFKjQpCiAjZW5kaWYKIAotLy8gTUFFIDEyIEp1bHkgMjAwNSBUcnkgdG8gdXNlIE5PT1AgUklTQyBpbnN0cnVjdGlvbiBpbnN0ZWFkCisvKiBNQUUgMTIgSnVseSAyMDA1IFRyeSB0byB1c2UgTk9PUCBSSVNDIGluc3RydWN0aW9uIGluc3RlYWQgKi8KICNpZmRlZiBVU0VfUklTQ19OT09QCiAjZGVmaW5lIE1BWF9CVUZGRVJfUFJPR1JBTV9TSVpFICAgICBcCiAgICAgKDIqTElORVNfUEVSX0JVRkZFUipSSVNDX1dSSVRFX0lOU1RSVUNUSU9OX1NJWkUgKyBSSVNDX05PT1BfSU5TVFJVQ1RJT05fU0laRSo0KQogI2VuZGlmCiAKLS8vU2l6ZXMgb2YgdmFyaW91cyBpbnN0cnVjdGlvbnMgaW4gYnl0ZXMuICBVc2VkIHdoZW4gYWRkaW5nIGluc3RydWN0aW9ucy4KKy8qIFNpemVzIG9mIHZhcmlvdXMgaW5zdHJ1Y3Rpb25zIGluIGJ5dGVzLiAgVXNlZCB3aGVuIGFkZGluZyBpbnN0cnVjdGlvbnMuICovCiAjZGVmaW5lIFJJU0NfV1JJVEVfSU5TVFJVQ1RJT05fU0laRSAxMgogI2RlZmluZSBSSVNDX0pVTVBfSU5TVFJVQ1RJT05fU0laRSAgMTIKICNkZWZpbmUgUklTQ19TS0lQX0lOU1RSVUNUSU9OX1NJWkUgIDQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtYXVkdXBzMTEuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtYXVkdXBzMTEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ5ZWFkOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWF1ZHVwczExLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MjAgKzAsMCBAQAotLyoKLSAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KLSAqICBBdXRob3JzICA8c2h1LmxpbkBjb25leGFudC5jb20+LCA8aGllcC5odXluaEBjb25leGFudC5jb20+Ci0gKiAgQmFzZWQgb24gU3RldmVuIFRvdGggPHN0b3RoQGxpbnV4dHYub3JnPiBjeDIzODg1IGRyaXZlcgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLSNpbmNsdWRlICJjeDI1ODIxLXZpZGVvLmgiCi0KLXN0YXRpYyB2b2lkIGJ1ZmZlcl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZiA9Ci0JICAgIGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yik7Ci0Jc3RydWN0IGN4MjU4MjFfYnVmZmVyICpwcmV2OwotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHZxLT5wcml2X2RhdGE7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCXN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlICpxID0gJmRldi0+dmlkcVtTUkFNX0NIMTFdOwotCi0JLyogYWRkIGp1bXAgdG8gc3RvcHBlciAqLwotCWJ1Zi0+cmlzYy5qbXBbMF0gPSBjcHVfdG9fbGUzMihSSVNDX0pVTVAgfCBSSVNDX0lSUTEgfCBSSVNDX0NOVF9JTkMpOwotCWJ1Zi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihxLT5zdG9wcGVyLmRtYSk7Ci0JYnVmLT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOwkvKiBiaXRzIDYzLTMyICovCi0KLQlkcHJpbnRrKDIsICJqbXAgdG8gc3RvcHBlciAoMHgleClcbiIsIGJ1Zi0+cmlzYy5qbXBbMV0pOwotCi0JaWYgKCFsaXN0X2VtcHR5KCZxLT5xdWV1ZWQpKSB7Ci0JCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5xdWV1ZWQpOwotCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOwotCQlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBxdWV1ZWRcbiIsIGJ1ZiwKLQkJCWJ1Zi0+dmIuaSk7Ci0KLQl9IGVsc2UgaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKLQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7Ci0JCWN4MjU4MjFfc3RhcnRfdmlkZW9fZG1hKGRldiwgcSwgYnVmLAotCQkJCQkmZGV2LT5zcmFtX2NoYW5uZWxzW1NSQU1fQ0gxMV0pOwotCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOwotCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKLQkJbW9kX3RpbWVyKCZxLT50aW1lb3V0LCBqaWZmaWVzICsgQlVGRkVSX1RJTUVPVVQpOwotCQlkcHJpbnRrKDIsCi0JCQkiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBhY3RpdmUsIGJ1ZiBjbnQgPSAlZCwgcS0+Y291bnQgPSAlZFxuIiwKLQkJCWJ1ZiwgYnVmLT52Yi5pLCBidWYtPmNvdW50LCBxLT5jb3VudCk7Ci0JfSBlbHNlIHsKLQkJcHJldiA9Ci0JCSAgICBsaXN0X2VudHJ5KHEtPmFjdGl2ZS5wcmV2LCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnF1ZXVlKTsKLQkJaWYgKHByZXYtPnZiLndpZHRoID09IGJ1Zi0+dmIud2lkdGgKLQkJICAgICYmIHByZXYtPnZiLmhlaWdodCA9PSBidWYtPnZiLmhlaWdodAotCQkgICAgJiYgcHJldi0+Zm10ID09IGJ1Zi0+Zm10KSB7Ci0JCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+YWN0aXZlKTsKLQkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7Ci0JCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKLQkJCXByZXYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIoYnVmLT5yaXNjLmRtYSk7Ci0KLQkJCS8qIDY0IGJpdCBiaXRzIDYzLTMyICovCi0JCQlwcmV2LT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOwotCQkJZHByaW50aygyLAotCQkJCSJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBhY3RpdmUsIGJ1Zi0+Y291bnQ9JWRcbiIsCi0JCQkJYnVmLCBidWYtPnZiLmksIGJ1Zi0+Y291bnQpOwotCi0JCX0gZWxzZSB7Ci0JCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+cXVldWVkKTsKLQkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7Ci0JCQlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGZpcnN0IHF1ZXVlZFxuIiwgYnVmLAotCQkJCWJ1Zi0+dmIuaSk7Ci0JCX0KLQl9Ci0KLQlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgewotCQlkcHJpbnRrKDIsICJhY3RpdmUgcXVldWUgZW1wdHkhXG4iKTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIGN4MjU4MjFfdmlkZW9fcW9wcyA9IHsKLQkuYnVmX3NldHVwID0gY3gyNTgyMV9idWZmZXJfc2V0dXAsCi0JLmJ1Zl9wcmVwYXJlID0gY3gyNTgyMV9idWZmZXJfcHJlcGFyZSwKLQkuYnVmX3F1ZXVlID0gYnVmZmVyX3F1ZXVlLAotCS5idWZfcmVsZWFzZSA9IGN4MjU4MjFfYnVmZmVyX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgaW50IHZpZGVvX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaDsKLQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQotCXByaW50aygib3BlbiBkZXY9JXMgdHlwZT0lc1xuIiwgdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZGV2KSwKLQkJdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKLQotCS8qIGFsbG9jYXRlICsgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCi0JZmggPSBremFsbG9jKHNpemVvZigqZmgpLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBmaCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlsb2NrX2tlcm5lbCgpOwotCi0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7Ci0JZmgtPmRldiA9IGRldjsKLQlmaC0+dHlwZSA9IHR5cGU7Ci0JZmgtPndpZHRoID0gNzIwOwotCi0JaWYgKGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0JHIHx8IGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0RLKQotCQlmaC0+aGVpZ2h0ID0gNTc2OwotCWVsc2UKLQkJZmgtPmhlaWdodCA9IDQ4MDsKLQotCWRldi0+Y2hhbm5lbF9vcGVuZWQgPSAxMDsKLQlmaC0+Zm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhWNEwyX1BJWF9GTVRfWVVZVik7Ci0KLQl2NGwyX3ByaW9fb3BlbigmZGV2LT5wcmlvLCAmZmgtPnByaW8pOwotCi0JdmlkZW9idWZfcXVldWVfc2dfaW5pdCgmZmgtPnZpZHEsICZjeDI1ODIxX3ZpZGVvX3FvcHMsCi0JCQkgICAgICAgJmRldi0+cGNpLT5kZXYsICZkZXYtPnNsb2NrLAotCQkJICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKLQkJCSAgICAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQsCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBjeDI1ODIxX2J1ZmZlciksIGZoKTsKLQotCWRwcmludGsoMSwgInBvc3QgdmlkZW9idWZfcXVldWVfaW5pdCgpXG4iKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHNzaXplX3QgdmlkZW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiBkYXRhLCBzaXplX3QgY291bnQsCi0JCQkgIGxvZmZfdCAqIHBwb3MpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0Jc3dpdGNoIChmaC0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQlpZiAoY3gyNTgyMV9yZXNfbG9ja2VkKGZoLT5kZXYsIFJFU09VUkNFX1ZJREVPMTEpKQotCQkJcmV0dXJuIC1FQlVTWTsKLQotCQlyZXR1cm4gdmlkZW9idWZfcmVhZF9vbmUoJmZoLT52aWRxLCBkYXRhLCBjb3VudCwgcHBvcywKLQkJCQkJIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKLQotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdmlkZW9fcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmOwotCi0JaWYgKGN4MjU4MjFfcmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFTzExKSkgewotCQkvKiBzdHJlYW1pbmcgY2FwdHVyZSAqLwotCQlpZiAobGlzdF9lbXB0eSgmZmgtPnZpZHEuc3RyZWFtKSkKLQkJCXJldHVybiBQT0xMRVJSOwotCQlidWYgPSBsaXN0X2VudHJ5KGZoLT52aWRxLnN0cmVhbS5uZXh0LAotCQkJCSBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnN0cmVhbSk7Ci0JfSBlbHNlIHsKLQkJLyogcmVhZCgpIGNhcHR1cmUgKi8KLQkJYnVmID0gKHN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqKWZoLT52aWRxLnJlYWRfYnVmOwotCQlpZiAoTlVMTCA9PSBidWYpCi0JCQlyZXR1cm4gUE9MTEVSUjsKLQl9Ci0KLQlwb2xsX3dhaXQoZmlsZSwgJmJ1Zi0+dmIuZG9uZSwgd2FpdCk7Ci0JaWYgKGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRE9ORSB8fCBidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0VSUk9SKQotCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRlb19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7Ci0KLQkvL3N0b3AgdGhlIHJpc2MgZW5naW5lIGFuZCBmaWZvCi0JLy9jeF93cml0ZShjaGFubmVsMTEtPmRtYV9jdGwsIDApOwotCi0JLyogc3RvcCB2aWRlbyBjYXB0dXJlICovCi0JaWYgKGN4MjU4MjFfcmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFTzExKSkgewotCQl2aWRlb2J1Zl9xdWV1ZV9jYW5jZWwoJmZoLT52aWRxKTsKLQkJY3gyNTgyMV9yZXNfZnJlZShkZXYsIGZoLCBSRVNPVVJDRV9WSURFTzExKTsKLQl9Ci0KLQlpZiAoZmgtPnZpZHEucmVhZF9idWYpIHsKLQkJY3gyNTgyMV9idWZmZXJfcmVsZWFzZSgmZmgtPnZpZHEsIGZoLT52aWRxLnJlYWRfYnVmKTsKLQkJa2ZyZWUoZmgtPnZpZHEucmVhZF9idWYpOwotCX0KLQotCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPnZpZHEpOwotCi0JdjRsMl9wcmlvX2Nsb3NlKCZkZXYtPnByaW8sIGZoLT5wcmlvKTsKLQotCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7Ci0Ja2ZyZWUoZmgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKLQotCWlmICh1bmxpa2VseShmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpKSB7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICh1bmxpa2VseShpICE9IGZoLT50eXBlKSkgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAodW5saWtlbHkoIWN4MjU4MjFfcmVzX2dldChkZXYsIGZoLCBjeDI1ODIxX2dldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU8xMSkpKSkgewotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbihnZXRfcXVldWUoZmgpKTsKLX0KLQotc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKLQlpbnQgZXJyLCByZXM7Ci0KLQlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoaSAhPSBmaC0+dHlwZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXMgPSBjeDI1ODIxX2dldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU8xMSk7Ci0JZXJyID0gdmlkZW9idWZfc3RyZWFtb2ZmKGdldF9xdWV1ZShmaCkpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCWN4MjU4MjFfcmVzX2ZyZWUoZGV2LCBmaCwgcmVzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OwotCWludCBlcnI7Ci0KLQlpZiAoZmgpIHsKLQkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sIGZoLT5wcmlvKTsKLQkJaWYgKDAgIT0gZXJyKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlkcHJpbnRrKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7Ci0JZXJyID0gY3gyNTgyMV92aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIHByaXYsIGYpOwotCi0JaWYgKDAgIT0gZXJyKQotCQlyZXR1cm4gZXJyOwotCWZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpOwotCWZoLT53aWR0aCA9IGYtPmZtdC5waXgud2lkdGg7Ci0JZmgtPmhlaWdodCA9IGYtPmZtdC5waXguaGVpZ2h0OwotCWZoLT52aWRxLmZpZWxkID0gZi0+Zm10LnBpeC5maWVsZDsKLQlkcHJpbnRrKDIsICIlcygpIHdpZHRoPSVkIGhlaWdodD0lZCBmaWVsZD0lZFxuIiwgX19mdW5jX18sIGZoLT53aWR0aCwKLQkJZmgtPmhlaWdodCwgZmgtPnZpZHEuZmllbGQpOwotCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCB2aWRlbywgc19mbXQsIGYpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgbG9uZyB2aWRlb19pb2N0bF91cHN0cmVhbTExKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7Ci0JaW50IGNvbW1hbmQgPSAwOwotCXN0cnVjdCB1cHN0cmVhbV91c2VyX3N0cnVjdCAqZGF0YV9mcm9tX3VzZXI7Ci0KLQlkYXRhX2Zyb21fdXNlciA9IChzdHJ1Y3QgdXBzdHJlYW1fdXNlcl9zdHJ1Y3QgKilhcmc7Ci0KLQlpZiAoIWRhdGFfZnJvbV91c2VyKSB7Ci0JCXByaW50awotCQkgICAgKCJjeDI1ODIxIGluICVzKCk6IFVwc3RyZWFtIGRhdGEgaXMgSU5WQUxJRC4gUmV0dXJuaW5nLlxuIiwKLQkJICAgICBfX2Z1bmNfXyk7Ci0JCXJldHVybiAwOwotCX0KLQotCWNvbW1hbmQgPSBkYXRhX2Zyb21fdXNlci0+Y29tbWFuZDsKLQotCWlmIChjb21tYW5kICE9IFVQU1RSRUFNX1NUQVJUX0FVRElPICYmIGNvbW1hbmQgIT0gVVBTVFJFQU1fU1RPUF9BVURJTykgewotCQlyZXR1cm4gMDsKLQl9Ci0KLQlkZXYtPmlucHV0X2ZpbGVuYW1lID0gZGF0YV9mcm9tX3VzZXItPmlucHV0X2ZpbGVuYW1lOwotCWRldi0+aW5wdXRfYXVkaW9maWxlbmFtZSA9IGRhdGFfZnJvbV91c2VyLT5pbnB1dF9maWxlbmFtZTsKLQlkZXYtPnZpZF9zdGRuYW1lID0gZGF0YV9mcm9tX3VzZXItPnZpZF9zdGRuYW1lOwotCWRldi0+cGl4ZWxfZm9ybWF0ID0gZGF0YV9mcm9tX3VzZXItPnBpeGVsX2Zvcm1hdDsKLQlkZXYtPmNoYW5uZWxfc2VsZWN0ID0gZGF0YV9mcm9tX3VzZXItPmNoYW5uZWxfc2VsZWN0OwotCWRldi0+Y29tbWFuZCA9IGRhdGFfZnJvbV91c2VyLT5jb21tYW5kOwotCi0Jc3dpdGNoIChjb21tYW5kKSB7Ci0JY2FzZSBVUFNUUkVBTV9TVEFSVF9BVURJTzoKLQkJY3gyNTgyMV9zdGFydF91cHN0cmVhbV9hdWRpbyhkZXYsIGRhdGFfZnJvbV91c2VyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFVQU1RSRUFNX1NUT1BfQVVESU86Ci0JCWN4MjU4MjFfc3RvcF91cHN0cmVhbV9hdWRpbyhkZXYpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqcCkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXJldHVybiB2aWRlb2J1Zl9kcWJ1ZihnZXRfcXVldWUoZmgpLCBwLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX2xvZ19zdGF0dXMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKLQljaGFyIG5hbWVbMzIgKyAyXTsKLQotCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzLzIiLCBkZXYtPm5hbWUpOwotCXByaW50ayhLRVJOX0lORk8gIiVzLzI6ID09PT09PT09PT09PSAgU1RBUlQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09XG4iLAotCSAgICAgICBkZXYtPm5hbWUpOwotCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCBjb3JlLCBsb2dfc3RhdHVzKTsKLQlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT09ICBFTkQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09PVxuIiwKLQkgICAgICAgZGV2LT5uYW1lKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2OwotCWludCBlcnI7Ci0KLQlpZiAoZmgpIHsKLQkJZGV2ID0gZmgtPmRldjsKLQkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sIGZoLT5wcmlvKTsKLQkJaWYgKDAgIT0gZXJyKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8vIGV4cG9ydGVkIHN0dWZmCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHZpZGVvX2ZvcHMgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLm9wZW4gPSB2aWRlb19vcGVuLAotCS5yZWxlYXNlID0gdmlkZW9fcmVsZWFzZSwKLQkucmVhZCA9IHZpZGVvX3JlYWQsCi0JLnBvbGwgPSB2aWRlb19wb2xsLAotCS5tbWFwID0gY3gyNTgyMV92aWRlb19tbWFwLAotCS5pb2N0bCA9IHZpZGVvX2lvY3RsX3Vwc3RyZWFtMTEsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHZpZGVvX2lvY3RsX29wcyA9IHsKLQkudmlkaW9jX3F1ZXJ5Y2FwID0gY3gyNTgyMV92aWRpb2NfcXVlcnljYXAsCi0JLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwID0gY3gyNTgyMV92aWRpb2NfZW51bV9mbXRfdmlkX2NhcCwKLQkudmlkaW9jX2dfZm10X3ZpZF9jYXAgPSBjeDI1ODIxX3ZpZGlvY19nX2ZtdF92aWRfY2FwLAotCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwID0gY3gyNTgyMV92aWRpb2NfdHJ5X2ZtdF92aWRfY2FwLAotCS52aWRpb2Nfc19mbXRfdmlkX2NhcCA9IHZpZGlvY19zX2ZtdF92aWRfY2FwLAotCS52aWRpb2NfcmVxYnVmcyA9IGN4MjU4MjFfdmlkaW9jX3JlcWJ1ZnMsCi0JLnZpZGlvY19xdWVyeWJ1ZiA9IGN4MjU4MjFfdmlkaW9jX3F1ZXJ5YnVmLAotCS52aWRpb2NfcWJ1ZiA9IGN4MjU4MjFfdmlkaW9jX3FidWYsCi0JLnZpZGlvY19kcWJ1ZiA9IHZpZGlvY19kcWJ1ZiwKLSNpZmRlZiBUVU5FUl9GTEFHCi0JLnZpZGlvY19zX3N0ZCA9IGN4MjU4MjFfdmlkaW9jX3Nfc3RkLAotCS52aWRpb2NfcXVlcnlzdGQgPSBjeDI1ODIxX3ZpZGlvY19xdWVyeXN0ZCwKLSNlbmRpZgotCS52aWRpb2NfY3JvcGNhcCA9IGN4MjU4MjFfdmlkaW9jX2Nyb3BjYXAsCi0JLnZpZGlvY19zX2Nyb3AgPSBjeDI1ODIxX3ZpZGlvY19zX2Nyb3AsCi0JLnZpZGlvY19nX2Nyb3AgPSBjeDI1ODIxX3ZpZGlvY19nX2Nyb3AsCi0JLnZpZGlvY19lbnVtX2lucHV0ID0gY3gyNTgyMV92aWRpb2NfZW51bV9pbnB1dCwKLQkudmlkaW9jX2dfaW5wdXQgPSBjeDI1ODIxX3ZpZGlvY19nX2lucHV0LAotCS52aWRpb2Nfc19pbnB1dCA9IGN4MjU4MjFfdmlkaW9jX3NfaW5wdXQsCi0JLnZpZGlvY19nX2N0cmwgPSBjeDI1ODIxX3ZpZGlvY19nX2N0cmwsCi0JLnZpZGlvY19zX2N0cmwgPSB2aWRpb2Nfc19jdHJsLAotCS52aWRpb2NfcXVlcnljdHJsID0gY3gyNTgyMV92aWRpb2NfcXVlcnljdHJsLAotCS52aWRpb2Nfc3RyZWFtb24gPSB2aWRpb2Nfc3RyZWFtb24sCi0JLnZpZGlvY19zdHJlYW1vZmYgPSB2aWRpb2Nfc3RyZWFtb2ZmLAotCS52aWRpb2NfbG9nX3N0YXR1cyA9IHZpZGlvY19sb2dfc3RhdHVzLAotCS52aWRpb2NfZ19wcmlvcml0eSA9IGN4MjU4MjFfdmlkaW9jX2dfcHJpb3JpdHksCi0JLnZpZGlvY19zX3ByaW9yaXR5ID0gY3gyNTgyMV92aWRpb2Nfc19wcmlvcml0eSwKLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLQkudmlkaW9jZ21idWYgPSBjeDI1ODIxX3ZpZGlvY2dtYnVmLAotI2VuZGlmCi0jaWZkZWYgVFVORVJfRkxBRwotCS52aWRpb2NfZ190dW5lciA9IGN4MjU4MjFfdmlkaW9jX2dfdHVuZXIsCi0JLnZpZGlvY19zX3R1bmVyID0gY3gyNTgyMV92aWRpb2Nfc190dW5lciwKLQkudmlkaW9jX2dfZnJlcXVlbmN5ID0gY3gyNTgyMV92aWRpb2NfZ19mcmVxdWVuY3ksCi0JLnZpZGlvY19zX2ZyZXF1ZW5jeSA9IGN4MjU4MjFfdmlkaW9jX3NfZnJlcXVlbmN5LAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwotCS52aWRpb2NfZ19yZWdpc3RlciA9IGN4MjU4MjFfdmlkaW9jX2dfcmVnaXN0ZXIsCi0JLnZpZGlvY19zX3JlZ2lzdGVyID0gY3gyNTgyMV92aWRpb2Nfc19yZWdpc3RlciwKLSNlbmRpZgotfTsKLQotc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMTEgPSB7Ci0JLm5hbWUgPSAiY3gyNTgyMS1hdWRpb3Vwc3RyZWFtIiwKLQkuZm9wcyA9ICZ2aWRlb19mb3BzLAotCS5pb2N0bF9vcHMgPSAmdmlkZW9faW9jdGxfb3BzLAotCS50dm5vcm1zID0gQ1gyNTgyMV9OT1JNUywKLQkuY3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQ19NLAotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1jb3JlLmMKaW5kZXggZDkwYWJiMy4uYzQ4N2MxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1jb3JlLmMKQEAgLTc4MSwxNCArNzgxLDE0IEBACiAKIAkvKiBEaXNhYmxlIFZpZGVvIEEvQiBhY3Rpdml0eSAqLwogCWZvciAoaSA9IDA7IGkgPCBWSURfQ0hBTk5FTF9OVU07IGkrKykgewotCQljeF93cml0ZShkZXYtPnNyYW1fY2hhbm5lbHNbaV0uZG1hX2N0bCwgMCk7Ci0JCWN4X3dyaXRlKGRldi0+c3JhbV9jaGFubmVsc1tpXS5pbnRfbXNrLCAwKTsKKwkgICAgICAgY3hfd3JpdGUoZGV2LT5jaGFubmVsc1tpXS5zcmFtX2NoYW5uZWxzLT5kbWFfY3RsLCAwKTsKKwkgICAgICAgY3hfd3JpdGUoZGV2LT5jaGFubmVsc1tpXS5zcmFtX2NoYW5uZWxzLT5pbnRfbXNrLCAwKTsKIAl9CiAKIAlmb3IgKGkgPSBWSURfVVBTVFJFQU1fU1JBTV9DSEFOTkVMX0k7IGkgPD0gVklEX1VQU1RSRUFNX1NSQU1fQ0hBTk5FTF9KOwogCSAgICAgaSsrKSB7Ci0JCWN4X3dyaXRlKGRldi0+c3JhbV9jaGFubmVsc1tpXS5kbWFfY3RsLCAwKTsKLQkJY3hfd3JpdGUoZGV2LT5zcmFtX2NoYW5uZWxzW2ldLmludF9tc2ssIDApOworCSAgICAgICBjeF93cml0ZShkZXYtPmNoYW5uZWxzW2ldLnNyYW1fY2hhbm5lbHMtPmRtYV9jdGwsIDApOworCSAgICAgICBjeF93cml0ZShkZXYtPmNoYW5uZWxzW2ldLnNyYW1fY2hhbm5lbHMtPmludF9tc2ssIDApOwogCX0KIAogCS8qIERpc2FibGUgQXVkaW8gYWN0aXZpdHkgKi8KQEAgLTgwNSwxMiArODA1LDEwIEBACiB2b2lkIGN4MjU4MjFfc2V0X3BpeGVsX2Zvcm1hdChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgaW50IGNoYW5uZWxfc2VsZWN0LAogCQkJICAgICAgdTMyIGZvcm1hdCkKIHsKLQlzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaDsKLQogCWlmIChjaGFubmVsX3NlbGVjdCA8PSA3ICYmIGNoYW5uZWxfc2VsZWN0ID49IDApIHsKLQkJY2ggPSAmY3gyNTgyMV9zcmFtX2NoYW5uZWxzW2NoYW5uZWxfc2VsZWN0XTsKLQkJY3hfd3JpdGUoY2gtPnBpeF9mcm10LCBmb3JtYXQpOwotCQlkZXYtPnBpeGVsX2Zvcm1hdHNbY2hhbm5lbF9zZWxlY3RdID0gZm9ybWF0OworCSAgICAgICBjeF93cml0ZShkZXYtPmNoYW5uZWxzW2NoYW5uZWxfc2VsZWN0XS4KKwkJCSAgICAgICBzcmFtX2NoYW5uZWxzLT5waXhfZnJtdCwgZm9ybWF0KTsKKwkgICAgICAgZGV2LT5jaGFubmVsc1tjaGFubmVsX3NlbGVjdF0ucGl4ZWxfZm9ybWF0cyA9IGZvcm1hdDsKIAl9CiB9CiAKQEAgLTgzMSw3ICs4MjksNyBAQAogCWN4X3dyaXRlKFBDSV9JTlRfU1RBVCwgMHhmZmZmZmZmZik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgVklEX0NIQU5ORUxfTlVNOyBpKyspCi0JCWN4X3dyaXRlKGRldi0+c3JhbV9jaGFubmVsc1tpXS5pbnRfc3RhdCwgMHhmZmZmZmZmZik7CisJICAgICAgIGN4X3dyaXRlKGRldi0+Y2hhbm5lbHNbaV0uc3JhbV9jaGFubmVscy0+aW50X3N0YXQsIDB4ZmZmZmZmZmYpOwogCiAJY3hfd3JpdGUoQVVEX0FfSU5UX1NUQVQsIDB4ZmZmZmZmZmYpOwogCWN4X3dyaXRlKEFVRF9CX0lOVF9TVEFULCAweGZmZmZmZmZmKTsKQEAgLTg0NSwyMSArODQzLDIyIEBACiAJbWRlbGF5KDEwMCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgVklEX0NIQU5ORUxfTlVNOyBpKyspIHsKLQkJY3gyNTgyMV9zZXRfdmlwX21vZGUoZGV2LCAmZGV2LT5zcmFtX2NoYW5uZWxzW2ldKTsKLQkJY3gyNTgyMV9zcmFtX2NoYW5uZWxfc2V0dXAoZGV2LCAmZGV2LT5zcmFtX2NoYW5uZWxzW2ldLCAxNDQwLAotCQkJCQkgICAwKTsKLQkJZGV2LT5waXhlbF9mb3JtYXRzW2ldID0gUElYRUxfRlJNVF80MjI7Ci0JCWRldi0+dXNlX2NpZl9yZXNvbHV0aW9uW2ldID0gRkFMU0U7CisJICAgICAgIGN4MjU4MjFfc2V0X3ZpcF9tb2RlKGRldiwgZGV2LT5jaGFubmVsc1tpXS5zcmFtX2NoYW5uZWxzKTsKKwkgICAgICAgY3gyNTgyMV9zcmFtX2NoYW5uZWxfc2V0dXAoZGV2LCBkZXYtPmNoYW5uZWxzW2ldLnNyYW1fY2hhbm5lbHMsCisJCQkJCSAgICAgICAxNDQwLCAwKTsKKwkgICAgICAgZGV2LT5jaGFubmVsc1tpXS5waXhlbF9mb3JtYXRzID0gUElYRUxfRlJNVF80MjI7CisJICAgICAgIGRldi0+Y2hhbm5lbHNbaV0udXNlX2NpZl9yZXNvbHV0aW9uID0gRkFMU0U7CiAJfQogCiAJLyogUHJvYmFibHkgb25seSBhZmZlY3QgRG93bnN0cmVhbSAqLwogCWZvciAoaSA9IFZJRF9VUFNUUkVBTV9TUkFNX0NIQU5ORUxfSTsgaSA8PSBWSURfVVBTVFJFQU1fU1JBTV9DSEFOTkVMX0o7CiAJICAgICBpKyspIHsKLQkJY3gyNTgyMV9zZXRfdmlwX21vZGUoZGV2LCAmZGV2LT5zcmFtX2NoYW5uZWxzW2ldKTsKKwkgICAgICAgY3gyNTgyMV9zZXRfdmlwX21vZGUoZGV2LCBkZXYtPmNoYW5uZWxzW2ldLnNyYW1fY2hhbm5lbHMpOwogCX0KIAotCWN4MjU4MjFfc3JhbV9jaGFubmVsX3NldHVwX2F1ZGlvKGRldiwgJmRldi0+c3JhbV9jaGFubmVsc1tTUkFNX0NIMDhdLAotCQkJCQkgMTI4LCAwKTsKKyAgICAgICBjeDI1ODIxX3NyYW1fY2hhbm5lbF9zZXR1cF9hdWRpbyhkZXYsCisJCQkgICAgICAgZGV2LT5jaGFubmVsc1tTUkFNX0NIMDhdLnNyYW1fY2hhbm5lbHMsCisJCQkgICAgICAgMTI4LCAwKTsKIAogCWN4MjU4MjFfZ3Bpb19pbml0KGRldik7CiB9CkBAIC05MDIsMjEgKzkwMSw2IEBACiB7CiAJaW50IGlvX3NpemUgPSAwLCBpOwogCi0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fdGVtcGxhdGVbXSA9IHsKLQkJJmN4MjU4MjFfdmlkZW9fdGVtcGxhdGUwLAotCQkmY3gyNTgyMV92aWRlb190ZW1wbGF0ZTEsCi0JCSZjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMiwKLQkJJmN4MjU4MjFfdmlkZW9fdGVtcGxhdGUzLAotCQkmY3gyNTgyMV92aWRlb190ZW1wbGF0ZTQsCi0JCSZjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlNSwKLQkJJmN4MjU4MjFfdmlkZW9fdGVtcGxhdGU2LAotCQkmY3gyNTgyMV92aWRlb190ZW1wbGF0ZTcsCi0JCSZjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlOSwKLQkJJmN4MjU4MjFfdmlkZW9fdGVtcGxhdGUxMCwKLQkJJmN4MjU4MjFfdmlkZW9fdGVtcGxhdGUxMSwKLQkJJmN4MjU4MjFfdmlkZW9pb2N0bF90ZW1wbGF0ZSwKLQl9OwotCiAJcHJpbnRrKEtFUk5fSU5GTyAiXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiY3gyNTgyMSBzZXQgdXBcbiIpOwogCXByaW50ayhLRVJOX0lORk8gIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiIpOwpAQCAtOTQ3LDcgKzkzMSw4IEBACiAKIAkvKiBBcHBseSBhIHNlbnNpYmxlIGNsb2NrIGZyZXF1ZW5jeSBmb3IgdGhlIFBDSWUgYnJpZGdlICovCiAJZGV2LT5jbGtfZnJlcSA9IDI4MDAwMDAwOwotCWRldi0+c3JhbV9jaGFubmVscyA9IGN4MjU4MjFfc3JhbV9jaGFubmVsczsKKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX1ZJRF9DSEFOTkVMX05VTTsgaSsrKQorCSAgICAgICBkZXYtPmNoYW5uZWxzW2ldLnNyYW1fY2hhbm5lbHMgPSAmY3gyNTgyMV9zcmFtX2NoYW5uZWxzW2ldOwogCiAJaWYgKGRldi0+bnIgPiAxKQogCQlDWDI1ODIxX0lORk8oImRldi0+bnIgPiAxISIpOwpAQCAtOTcwLDcgKzk1NSw2IEBACiAJZGV2LT5pMmNfYnVzWzBdLnJlZ193ZGF0YSA9IEkyQzFfV0RBVEE7CiAJZGV2LT5pMmNfYnVzWzBdLmkyY19wZXJpb2QgPSAoMHgwNyA8PCAyNCk7CS8qIDEuOTVNSHogKi8KIAotCiAJaWYgKGN4MjU4MjFfZ2V0X3Jlc291cmNlcyhkZXYpIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzIE5vIG1vcmUgUENJZSByZXNvdXJjZXMgZm9yICIKIAkJICAgICAgICJzdWJzeXN0ZW06ICUwNHg6JTA0eFxuIiwKQEAgLTEwMTgsMzcgKzEwMDIsMjQgQEAKIAkJICAgICBkZXYtPmkyY19idXNbMF0uaTJjX3JjKTsKIAogCWN4MjU4MjFfY2FyZF9zZXR1cChkZXYpOwotCW1lZHVzYV92aWRlb19pbml0KGRldik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgVklEX0NIQU5ORUxfTlVNOyBpKyspIHsKLQkJaWYgKGN4MjU4MjFfdmlkZW9fcmVnaXN0ZXIoZGV2LCBpLCB2aWRlb190ZW1wbGF0ZVtpXSkgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiJXMoKSBGYWlsZWQgdG8gcmVnaXN0ZXIgYW5hbG9nIHZpZGVvIGFkYXB0ZXJzIG9uIFZJRCBjaGFubmVsICVkXG4iLAotCQkJICAgICAgIF9fZnVuY19fLCBpKTsKLQkJfQotCX0KKyAgICAgICBpZiAobWVkdXNhX3ZpZGVvX2luaXQoZGV2KSA8IDApCisJICAgICAgIENYMjU4MjFfRVJSKCIlcygpIEZhaWxlZCB0byBpbml0aWFsaXplIG1lZHVzYSFcbiIKKwkgICAgICAgLCBfX2Z1bmNfXyk7CiAKLQlmb3IgKGkgPSBWSURfVVBTVFJFQU1fU1JBTV9DSEFOTkVMX0k7Ci0JICAgICBpIDw9IEFVRElPX1VQU1RSRUFNX1NSQU1fQ0hBTk5FTF9COyBpKyspIHsKLQkJLyogU2luY2Ugd2UgZG9uJ3QgaGF2ZSB0ZW1wbGF0ZTggZm9yIEF1ZGlvIERvd25zdHJlYW0gKi8KLQkJaWYgKGN4MjU4MjFfdmlkZW9fcmVnaXN0ZXIoZGV2LCBpLCB2aWRlb190ZW1wbGF0ZVtpIC0gMV0pIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIiVzKCkgRmFpbGVkIHRvIHJlZ2lzdGVyIGFuYWxvZyB2aWRlbyBhZGFwdGVycyBmb3IgVXBzdHJlYW0gY2hhbm5lbCAlZC5cbiIsCi0JCQkgICAgICAgX19mdW5jX18sIGkpOwotCQl9Ci0JfQorICAgICAgIGN4MjU4MjFfdmlkZW9fcmVnaXN0ZXIoZGV2KTsKIAogCS8qIHJlZ2lzdGVyIElPQ1RMIGRldmljZSAqLwogCWRldi0+aW9jdGxfZGV2ID0KLQkgICAgY3gyNTgyMV92ZGV2X2luaXQoZGV2LCBkZXYtPnBjaSwgdmlkZW9fdGVtcGxhdGVbVklERU9fSU9DVExfQ0hdLAorCSAgIGN4MjU4MjFfdmRldl9pbml0KGRldiwgZGV2LT5wY2ksICZjeDI1ODIxX3ZpZGVvaW9jdGxfdGVtcGxhdGUsCiAJCQkgICAgICAidmlkZW8iKTsKIAogCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UKIAkgICAgKGRldi0+aW9jdGxfZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCBWSURFT19JT0NUTF9DSCkgPCAwKSB7CiAJCWN4MjU4MjFfdmlkZW9pb2N0bF91bnJlZ2lzdGVyKGRldik7CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIiVzKCkgRmFpbGVkIHRvIHJlZ2lzdGVyIHZpZGVvIGFkYXB0ZXIgZm9yIElPQ1RMIHNvIHJlbGVhc2luZy5cbiIsCi0JCSAgICAgICBfX2Z1bmNfXyk7CisJCSAgICIlcygpIEZhaWxlZCB0byByZWdpc3RlciB2aWRlbyBhZGFwdGVyIGZvciBJT0NUTCwgc28gXAorCQkgICB1bnJlZ2lzdGVyaW5nIHZpZGVvaW9jdGwgZGV2aWNlLlxuIiwgX19mdW5jX18pOwogCX0KIAogCWN4MjU4MjFfZGV2X2NoZWNrcmV2aXNpb24oZGV2KTsKQEAgLTEzNDksNyArMTMyMCw3IEBACiAKIAlCVUdfT04oaW5faW50ZXJydXB0KCkpOwogCXZpZGVvYnVmX3dhaXRvbigmYnVmLT52YiwgMCwgMCk7Ci0JdmlkZW9idWZfZG1hX3VubWFwKHEsIGRtYSk7CisJdmlkZW9idWZfZG1hX3VubWFwKHEtPmRldiwgZG1hKTsKIAl2aWRlb2J1Zl9kbWFfZnJlZShkbWEpOwogCWJ0Y3hfcmlzY21lbV9mcmVlKHRvX3BjaV9kZXYocS0+ZGV2KSwgJmJ1Zi0+cmlzYyk7CiAJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7CkBAIC0xMzcxLDcgKzEzNDIsOCBAQAogCiAJZm9yIChpID0gMDsgaSA8IFZJRF9DSEFOTkVMX05VTTsgaSsrKSB7CiAJCWlmIChwY2lfc3RhdHVzICYgbWFza1tpXSkgewotCQkJdmlkX3N0YXR1cyA9IGN4X3JlYWQoZGV2LT5zcmFtX2NoYW5uZWxzW2ldLmludF9zdGF0KTsKKwkJICAgICAgIHZpZF9zdGF0dXMgPSBjeF9yZWFkKGRldi0+Y2hhbm5lbHNbaV0uCisJCQkgICAgICAgc3JhbV9jaGFubmVscy0+aW50X3N0YXQpOwogCiAJCQlpZiAodmlkX3N0YXR1cykKIAkJCQloYW5kbGVkICs9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWkyYy5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1pMmMuYwppbmRleCAwOGY0NWI1Li5lNDM1NzJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWkyYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtaTJjLmMKQEAgLTI4Miw2ICsyODIsOSBAQAogc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGN4MjU4MjFfaTJjX2FsZ29fdGVtcGxhdGUgPSB7CiAJLm1hc3Rlcl94ZmVyID0gaTJjX3hmZXIsCiAJLmZ1bmN0aW9uYWxpdHkgPSBjeDI1ODIxX2Z1bmN0aW9uYWxpdHksCisjaWZkZWYgTkVFRF9BTEdPX0NPTlRST0wKKyAgICAgICAuYWxnb19jb250cm9sID0gZHVtbXlfYWxnb19jb250cm9sLAorI2VuZGlmCiB9OwogCiBzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIGN4MjU4MjFfaTJjX2FkYXBfdGVtcGxhdGUgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLW1lZHVzYS1kZWZpbmVzLmggYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLW1lZHVzYS1kZWZpbmVzLmgKaW5kZXggYjBkMjE2Yi4uNjBkMTk3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1tZWR1c2EtZGVmaW5lcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtbWVkdXNhLWRlZmluZXMuaApAQCAtMjMsNyArMjMsNyBAQAogI2lmbmRlZiBfTUVEVVNBX0RFRl9IXwogI2RlZmluZSBfTUVEVVNBX0RFRl9IXwogCi0vLyBWaWRlbyBkZW9jZGVyIHRoYXQgd2Ugc3VwcG9ydGVkCisvKiBWaWRlbyBkZW9jZGVyIHRoYXQgd2Ugc3VwcG9ydGVkICovCiAjZGVmaW5lIFZERUNfQQkJMAogI2RlZmluZSBWREVDX0IJCTEKICNkZWZpbmUgVkRFQ19DCQkyCkBAIC0zMywxOSArMzMsMTAgQEAKICNkZWZpbmUgVkRFQ19HCQk2CiAjZGVmaW5lIFZERUNfSAkJNwogCi0vLyNkZWZpbmUgQVVUT19TV0lUQ0hfQklUW10gID0geyA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1IH07Ci0KLS8vIFRoZSBmb2xsb3dpbmcgYml0IHBvc2l0aW9uIGVuYWJsZXMgYXV0b21hdGljIHNvdXJjZSBzd2l0Y2hpbmcgZm9yIGRlY29kZXIgQS1ILgotLy8gRGlzcGxheSBpbmRleCBwZXIgY2FtZXJhLgotLy8jZGVmaW5lIFZERUNfSU5ERVhbXSA9IHswLCAwLCAxLCAxLCAyLCAyLCAzLCAzLCA0LCA0LCA1LCA1LCA2LCA2LCA3LCA3fTsKLQotLy8gU2VsZWN0IGlucHV0IGJpdCB0byB2aWRlbyBkZWNvZGVyIEEtSC4KLS8vI2RlZmluZSBDSF9TUkNfU0VMX0JJVFtdID0gezI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMX07Ci0KLS8vIGVuZCBvZiBkaXNwbGF5IHNlcXVlbmNlCisvKiBlbmQgb2YgZGlzcGxheSBzZXF1ZW5jZSAqLwogI2RlZmluZSBFTkRfT0ZfU0VRCQkJCQkweEY7CiAKLS8vIHJlZ2lzdHJ5IHN0cmluZyBzaXplCisvKiByZWdpc3RyeSBzdHJpbmcgc2l6ZSAqLwogI2RlZmluZSBNQVhfUkVHSVNUUllfU1oJCQkJCTQwOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtbWVkdXNhLXJlZy5oIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1tZWR1c2EtcmVnLmgKaW5kZXggMTJjOTBmOC4uZjdmMzNiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1tZWR1c2EtcmVnLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1tZWR1c2EtcmVnLmgKQEAgLTIzLDExICsyMywxMSBAQAogI2lmbmRlZiBfX01FRFVTQV9SRUdJU1RFUlNfXwogI2RlZmluZSBfX01FRFVTQV9SRUdJU1RFUlNfXwogCi0vLyBTZXJpYWwgU2xhdmUgUmVnaXN0ZXJzCisvKiBTZXJpYWwgU2xhdmUgUmVnaXN0ZXJzICovCiAjZGVmaW5lCUhPU1RfUkVHSVNURVIxCQkJCTB4MDAwMAogI2RlZmluZQlIT1NUX1JFR0lTVEVSMgkJCQkweDAwMDEKIAotLy8gQ2hpcCBDb25maWd1cmF0aW9uIFJlZ2lzdGVycworLyogQ2hpcCBDb25maWd1cmF0aW9uIFJlZ2lzdGVycyAqLwogI2RlZmluZQlDSElQX0NUUkwJCQkJCTB4MDEwMAogI2RlZmluZQlBRkVfQUJfQ1RSTAkJCQkJMHgwMTA0CiAjZGVmaW5lCUFGRV9DRF9DVFJMCQkJCQkweDAxMDgKQEAgLTkyLDcgKzkyLDcgQEAKICNkZWZpbmUJQUJJU1RfQ0xBTVBfRQkJCQkweDAxRjQKICNkZWZpbmUJQUJJU1RfQ0xBTVBfRgkJCQkweDAxRjgKIAotLy8gICAgICAgICAgICAgIERpZ2l0YWwgVmlkZW8gRW5jb2RlciBBIFJlZ2lzdGVycworLyogICAgICAgICAgICAgIERpZ2l0YWwgVmlkZW8gRW5jb2RlciBBIFJlZ2lzdGVycyAqLwogI2RlZmluZQlERU5DX0FfUkVHXzEJCQkJCTB4MDIwMAogI2RlZmluZQlERU5DX0FfUkVHXzIJCQkJCTB4MDIwNAogI2RlZmluZQlERU5DX0FfUkVHXzMJCQkJCTB4MDIwOApAQCAtMTAyLDcgKzEwMiw3IEBACiAjZGVmaW5lCURFTkNfQV9SRUdfNwkJCQkJMHgwMjE4CiAjZGVmaW5lCURFTkNfQV9SRUdfOAkJCQkJMHgwMjFDCiAKLS8vICAgICAgRGlnaXRhbCBWaWRlbyBFbmNvZGVyIEIgUmVnaXN0ZXJzCisvKiAgICAgIERpZ2l0YWwgVmlkZW8gRW5jb2RlciBCIFJlZ2lzdGVycyAqLwogI2RlZmluZQlERU5DX0JfUkVHXzEJCQkJCTB4MDMwMAogI2RlZmluZQlERU5DX0JfUkVHXzIJCQkJCTB4MDMwNAogI2RlZmluZQlERU5DX0JfUkVHXzMJCQkJCTB4MDMwOApAQCAtMTEyLDcgKzExMiw3IEBACiAjZGVmaW5lCURFTkNfQl9SRUdfNwkJCQkJMHgwMzE4CiAjZGVmaW5lCURFTkNfQl9SRUdfOAkJCQkJMHgwMzFDCiAKLS8vICAgICAgICAgICAgICBWaWRlbyBEZWNvZGVyIEEgUmVnaXN0ZXJzCisvKiAgICAgICAgICAgICAgVmlkZW8gRGVjb2RlciBBIFJlZ2lzdGVycyAqLwogI2RlZmluZQlNT0RFX0NUUkwJCQkJCQkweDEwMDAKICNkZWZpbmUJT1VUX0NUUkwxCQkJCQkJMHgxMDA0CiAjZGVmaW5lCU9VVF9DVFJMX05TCQkJCQkJMHgxMDA4CkBAIC0xNTMsNyArMTUzLDcgQEAKICNkZWZpbmUJVkVSU0lPTgkJCQkJCQkweDExRjgKICNkZWZpbmUJU09GVF9SU1RfQ1RSTAkJCQkJMHgxMUZDCiAKLS8vICAgICAgVmlkZW8gRGVjb2RlciBCIFJlZ2lzdGVycworLyogICAgICBWaWRlbyBEZWNvZGVyIEIgUmVnaXN0ZXJzICovCiAjZGVmaW5lCVZERUNfQl9NT0RFX0NUUkwJCQkJMHgxMjAwCiAjZGVmaW5lCVZERUNfQl9PVVRfQ1RSTDEJCQkJMHgxMjA0CiAjZGVmaW5lCVZERUNfQl9PVVRfQ1RSTF9OUwkJCQkweDEyMDgKQEAgLTE5NCw3ICsxOTQsNyBAQAogI2RlZmluZQlWREVDX0JfVkVSU0lPTgkJCQkJMHgxM0Y4CiAjZGVmaW5lCVZERUNfQl9TT0ZUX1JTVF9DVFJMCQkJMHgxM0ZDCiAKLS8vIFZpZGVvIERlY29kZXIgQyBSZWdpc3RlcnMKKy8qIFZpZGVvIERlY29kZXIgQyBSZWdpc3RlcnMgKi8KICNkZWZpbmUJVkRFQ19DX01PREVfQ1RSTAkJCQkweDE0MDAKICNkZWZpbmUJVkRFQ19DX09VVF9DVFJMMQkJCQkweDE0MDQKICNkZWZpbmUJVkRFQ19DX09VVF9DVFJMX05TCQkJCTB4MTQwOApAQCAtMjM1LDcgKzIzNSw3IEBACiAjZGVmaW5lCVZERUNfQ19WRVJTSU9OCQkJCQkweDE1RjgKICNkZWZpbmUJVkRFQ19DX1NPRlRfUlNUX0NUUkwJCQkweDE1RkMKIAotLy8gVmlkZW8gRGVjb2RlciBEIFJlZ2lzdGVycworLyogVmlkZW8gRGVjb2RlciBEIFJlZ2lzdGVycyAqLwogI2RlZmluZSBWREVDX0RfTU9ERV9DVFJMCQkJCTB4MTYwMAogI2RlZmluZSBWREVDX0RfT1VUX0NUUkwxCQkJCTB4MTYwNAogI2RlZmluZSBWREVDX0RfT1VUX0NUUkxfTlMJCQkJMHgxNjA4CkBAIC0yNzYsNyArMjc2LDcgQEAKICNkZWZpbmUgVkRFQ19EX1ZFUlNJT04JCQkJCTB4MTdGOAogI2RlZmluZSBWREVDX0RfU09GVF9SU1RfQ1RSTAkJCTB4MTdGQwogCi0vLyBWaWRlbyBEZWNvZGVyIEUgUmVnaXN0ZXJzCisvKiBWaWRlbyBEZWNvZGVyIEUgUmVnaXN0ZXJzICovCiAjZGVmaW5lCVZERUNfRV9NT0RFX0NUUkwJCQkJMHgxODAwCiAjZGVmaW5lCVZERUNfRV9PVVRfQ1RSTDEJCQkJMHgxODA0CiAjZGVmaW5lCVZERUNfRV9PVVRfQ1RSTF9OUwkJCQkweDE4MDgKQEAgLTMxNyw3ICszMTcsNyBAQAogI2RlZmluZQlWREVDX0VfVkVSU0lPTgkJCQkJMHgxOUY4CiAjZGVmaW5lCVZERUNfRV9TT0ZUX1JTVF9DVFJMCQkJMHgxOUZDCiAKLS8vIFZpZGVvIERlY29kZXIgRiBSZWdpc3RlcnMKKy8qIFZpZGVvIERlY29kZXIgRiBSZWdpc3RlcnMgKi8KICNkZWZpbmUJVkRFQ19GX01PREVfQ1RSTAkJCQkweDFBMDAKICNkZWZpbmUJVkRFQ19GX09VVF9DVFJMMQkJCQkweDFBMDQKICNkZWZpbmUJVkRFQ19GX09VVF9DVFJMX05TCQkJCTB4MUEwOApAQCAtMzU4LDcgKzM1OCw3IEBACiAjZGVmaW5lCVZERUNfRl9WRVJTSU9OCQkJCQkweDFCRjgKICNkZWZpbmUJVkRFQ19GX1NPRlRfUlNUX0NUUkwJCQkweDFCRkMKIAotLy8gVmlkZW8gRGVjb2RlciBHIFJlZ2lzdGVycworLyogVmlkZW8gRGVjb2RlciBHIFJlZ2lzdGVycyAqLwogI2RlZmluZQlWREVDX0dfTU9ERV9DVFJMCQkJCTB4MUMwMAogI2RlZmluZQlWREVDX0dfT1VUX0NUUkwxCQkJCTB4MUMwNAogI2RlZmluZQlWREVDX0dfT1VUX0NUUkxfTlMJCQkJMHgxQzA4CkBAIC0zOTksNyArMzk5LDcgQEAKICNkZWZpbmUJVkRFQ19HX1ZFUlNJT04JCQkJCTB4MURGOAogI2RlZmluZQlWREVDX0dfU09GVF9SU1RfQ1RSTAkJCTB4MURGQwogCi0vLyAgICAgICAgICAgICAgVmlkZW8gRGVjb2RlciBIIFJlZ2lzdGVycworLyogICAgICAgICAgICAgIFZpZGVvIERlY29kZXIgSCBSZWdpc3RlcnMgICovCiAjZGVmaW5lCVZERUNfSF9NT0RFX0NUUkwJCQkJMHgxRTAwCiAjZGVmaW5lCVZERUNfSF9PVVRfQ1RSTDEJCQkJMHgxRTA0CiAjZGVmaW5lCVZERUNfSF9PVVRfQ1RSTF9OUwkJCQkweDFFMDgKQEAgLTQ0MCwxNCArNDQwLDE0IEBACiAjZGVmaW5lCVZERUNfSF9WRVJTSU9OCQkJCQkweDFGRjgKICNkZWZpbmUJVkRFQ19IX1NPRlRfUlNUX0NUUkwJCQkweDFGRkMKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLy8gTFVNQV9DVFJMIHJlZ2lzdGVyIGZpZWxkcworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTFVNQV9DVFJMIHJlZ2lzdGVyIGZpZWxkcyAqLwogI2RlZmluZSBWREVDX0FfQlJJVEVfQ1RSTAkJCQkweDEwMTQKICNkZWZpbmUgVkRFQ19BX0NOVFJTVF9DVFJMICAgICAgIAkJMHgxMDE1CiAjZGVmaW5lIFZERUNfQV9QRUFLX1NFTCAgICAgICAgICAJCTB4MTAxNgogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0vLyBDSFJPTUFfQ1RSTCByZWdpc3RlciBmaWVsZHMKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENIUk9NQV9DVFJMIHJlZ2lzdGVyIGZpZWxkcyAqLwogI2RlZmluZSBWREVDX0FfVVNBVF9DVFJMICAgICAgICAgCQkweDEwMTgKICNkZWZpbmUgVkRFQ19BX1ZTQVRfQ1RSTCAgICAgICAgIAkJMHgxMDE5CiAjZGVmaW5lIFZERUNfQV9IVUVfQ1RSTCAgICAgICAgICAJCTB4MTAxQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1tZWR1c2EtdmlkZW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtbWVkdXNhLXZpZGVvLmMKaW5kZXggMzQ2MTZkYy4uZWY5ZjJiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1tZWR1c2EtdmlkZW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLW1lZHVzYS12aWRlby5jCkBAIC03NzgsOSArNzc4LDkgQEAKIAogaW50IG1lZHVzYV92aWRlb19pbml0KHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KQogewotCXUzMiB2YWx1ZSwgdG1wID0gMDsKLQlpbnQgcmV0X3ZhbDsKLQlpbnQgaTsKKyAgICAgICB1MzIgdmFsdWUgPSAwLCB0bXAgPSAwOworICAgICAgIGludCByZXRfdmFsID0gMDsKKyAgICAgICBpbnQgaSA9IDA7CiAKIAltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCkBAIC03OTAsNiArNzkwLDcgQEAKIAl2YWx1ZSA9IGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwgTU9OX0FfQ1RSTCwgJnRtcCk7CiAJdmFsdWUgJj0gMHhGRkZGRjBGRjsKIAlyZXRfdmFsID0gY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwgTU9OX0FfQ1RSTCwgdmFsdWUpOworCiAJaWYgKHJldF92YWwgPCAwKQogCQlnb3RvIGVycm9yOwogCkBAIC03OTcsNiArNzk4LDcgQEAKIAl2YWx1ZSA9IGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwgTU9OX0FfQ1RSTCwgJnRtcCk7CiAJdmFsdWUgJj0gMHhGRkZGRkZERjsKIAlyZXRfdmFsID0gY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwgTU9OX0FfQ1RSTCwgdmFsdWUpOworCiAJaWYgKHJldF92YWwgPCAwKQogCQlnb3RvIGVycm9yOwogCkBAIC04MTIsNiArODE0LDcgQEAKIAl2YWx1ZSAmPSAweEZGNzBGRjcwOwogCXZhbHVlIHw9IDB4MDAwOTAwMDg7CS8qIHNldCBlbl9hY3RpdmUgKi8KIAlyZXRfdmFsID0gY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwgREVOQ19BQl9DVFJMLCB2YWx1ZSk7CisKIAlpZiAocmV0X3ZhbCA8IDApCiAJCWdvdG8gZXJyb3I7CiAKQEAgLTgyNiw4ICs4MjksMTAgQEAKIAkvKiBzZWxlY3QgQUZFIGNsb2NrIHRvIG91dHB1dCBtb2RlICovCiAJdmFsdWUgPSBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sIEFGRV9BQl9ESUFHX0NUUkwsICZ0bXApOwogCXZhbHVlICY9IDB4ODNGRkZGRkY7Ci0JcmV0X3ZhbCA9IGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sIEFGRV9BQl9ESUFHX0NUUkwsCi0JCQkJICAgIHZhbHVlIHwgMHgxMDAwMDAwMCk7CisgICAgICAgcmV0X3ZhbCA9CisJICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwgQUZFX0FCX0RJQUdfQ1RSTCwKKwkJCSAgICAgdmFsdWUgfCAweDEwMDAwMDAwKTsKKwogCWlmIChyZXRfdmFsIDwgMCkKIAkJZ290byBlcnJvcjsKIApAQCAtODQ5LDEyICs4NTQsMTUgQEAKIAogCXZhbHVlIHw9IDc7CiAJcmV0X3ZhbCA9IGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sIFBJTl9PRV9DVFJMLCB2YWx1ZSk7CisKIAlpZiAocmV0X3ZhbCA8IDApCiAJCWdvdG8gZXJyb3I7CiAKKwogCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAogCXJldF92YWwgPSBtZWR1c2Ffc2V0X3ZpZGVvc3RhbmRhcmQoZGV2KTsKKwogCXJldHVybiByZXRfdmFsOwogCiBlcnJvcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtbWVkdXNhLXZpZGVvLmggYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLW1lZHVzYS12aWRlby5oCmluZGV4IDJmYWI0YjIuLjYxNzVlMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtbWVkdXNhLXZpZGVvLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1tZWR1c2EtdmlkZW8uaApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiY3gyNTgyMS1tZWR1c2EtZGVmaW5lcy5oIgogCi0vLyBDb2xvciBjb250cm9sIGNvbnN0YW50cworLyogQ29sb3IgY29udHJvbCBjb25zdGFudHMgKi8KICNkZWZpbmUgVklERU9fUFJPQ0FNUF9NSU4gICAgICAgICAgICAgICAgIDAKICNkZWZpbmUgVklERU9fUFJPQ0FNUF9NQVggICAgICAgICAgICAgICAgIDEwMDAwCiAjZGVmaW5lIFVOU0lHTkVEX0JZVEVfTUlOICAgICAgICAgICAgICAgICAwCkBAIC0zMyw3ICszMyw3IEBACiAjZGVmaW5lIFNJR05FRF9CWVRFX01JTiAgICAgICAgICAgICAgICAgICAtMTI4CiAjZGVmaW5lIFNJR05FRF9CWVRFX01BWCAgICAgICAgICAgICAgICAgICAxMjcKIAotLy8gRGVmYXVsdCB2aWRlbyBjb2xvciBzZXR0aW5ncworLyogRGVmYXVsdCB2aWRlbyBjb2xvciBzZXR0aW5ncyAqLwogI2RlZmluZSBTSEFSUE5FU1NfREVGQVVMVCAgICAgICAgICAgICAgICAgNTAKICNkZWZpbmUgU0FUVVJBVElPTl9ERUZBVUxUICAgICAgICAgICAgICA1MDAwCiAjZGVmaW5lIEJSSUdIVE5FU1NfREVGQVVMVCAgICAgICAgICAgICAgNjIwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1yZWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtcmVnLmgKaW5kZXggNzI0MWU3ZS4uY2ZlMGYzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1yZWcuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXJlZy5oCkBAIC00OCwyNCArNDgsMjQgQEAKICNkZWZpbmUgUklTQ19TWU5DX0VWRU5fVkJJCSAweDAwMDAwMjA3CiAjZGVmaW5lIFJJU0NfTk9PUAkJCSAweEYwMDAwMDAwCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLS8vIEFTQiBTUkFNCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBUWF9TUkFNICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwCS8vIFRyYW5zbWl0IFNSQU0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBBU0IgU1JBTQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSAgVFhfU1JBTSAgICAgICAgICAgICAgICAgICAweDAwMDAwMAkvKiBUcmFuc21pdCBTUkFNICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIFJYX1JBTSAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAJLy8gUmVjZWl2ZSBTUkFNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lICBSWF9SQU0gICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwCS8qIFJlY2VpdmUgU1JBTSAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0vLyBBcHBsaWNhdGlvbiBMYXllciAoQUwpCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBERVZfQ05UUkwyICAgICAgICAgICAgICAgIDB4MDQwMDAwCS8vIERldmljZSBjb250cm9sCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQXBwbGljYXRpb24gTGF5ZXIgKEFMKQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSAgREVWX0NOVFJMMiAgICAgICAgICAgICAgICAweDA0MDAwMAkvKiBEZXZpY2UgY29udHJvbCAqLwogI2RlZmluZSAgRkxEX1JVTl9SSVNDICAgICAgICAgICAgICAweDAwMDAwMDIwCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIFBDSV9JTlRfTVNLICAgICAgICAgICAgICAgMHgwNDAwMTAJLy8gUENJIGludGVycnVwdCBtYXNrCi0jZGVmaW5lICBQQ0lfSU5UX1NUQVQgICAgICAgICAgICAgIDB4MDQwMDE0CS8vIFBDSSBpbnRlcnJ1cHQgc3RhdHVzCi0jZGVmaW5lICBQQ0lfSU5UX01TVEFUICAgICAgICAgICAgIDB4MDQwMDE4CS8vIFBDSSBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIFBDSV9JTlRfTVNLICAgICAgICAgICAgICAgMHgwNDAwMTAJLyogUENJIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lICBQQ0lfSU5UX1NUQVQgICAgICAgICAgICAgIDB4MDQwMDE0CS8qIFBDSSBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lICBQQ0lfSU5UX01TVEFUICAgICAgICAgICAgIDB4MDQwMDE4CS8qIFBDSSBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cyAqLwogI2RlZmluZSAgRkxEX0hBTU1FUkhFQURfSU5UICAgICAgICAoMSA8PCAyNykKICNkZWZpbmUgIEZMRF9VQVJUX0lOVCAgICAgICAgICAgICAgKDEgPDwgMjYpCiAjZGVmaW5lICBGTERfSVJRTl9JTlQgICAgICAgICAgICAgICgxIDw8IDI1KQpAQCAtOTMsNjUgKzkzLDY1IEBACiAjZGVmaW5lICBGTERfVklEX0JfSU5UICAgICAgICAgICAgICgxIDw8IDEpCiAjZGVmaW5lICBGTERfVklEX0FfSU5UICAgICAgICAgICAgICgxIDw8IDApCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIFZJRF9BX0lOVF9NU0sgICAgICAgICAgICAgMHgwNDAwMjAJLy8gVmlkZW8gQSBpbnRlcnJ1cHQgbWFzawotI2RlZmluZSAgVklEX0FfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDAyNAkvLyBWaWRlbyBBIGludGVycnVwdCBzdGF0dXMKLSNkZWZpbmUgIFZJRF9BX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAwMjgJLy8gVmlkZW8gQSBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cwotI2RlZmluZSAgVklEX0FfSU5UX1NTVEFUICAgICAgICAgICAweDA0MDAyQwkvLyBWaWRlbyBBIGludGVycnVwdCBzZXQgc3RhdHVzCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgVklEX0FfSU5UX01TSyAgICAgICAgICAgICAweDA0MDAyMAkvKiBWaWRlbyBBIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lICBWSURfQV9JTlRfU1RBVCAgICAgICAgICAgIDB4MDQwMDI0CS8qIFZpZGVvIEEgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgVklEX0FfSU5UX01TVEFUICAgICAgICAgICAweDA0MDAyOAkvKiBWaWRlbyBBIGludGVycnVwdCBtYXNrZWQgc3RhdHVzICovCisjZGVmaW5lICBWSURfQV9JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMDJDCS8qIFZpZGVvIEEgaW50ZXJydXB0IHNldCBzdGF0dXMgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgVklEX0JfSU5UX01TSyAgICAgICAgICAgICAweDA0MDAzMAkvLyBWaWRlbyBCIGludGVycnVwdCBtYXNrCi0jZGVmaW5lICBWSURfQl9JTlRfU1RBVCAgICAgICAgICAgIDB4MDQwMDM0CS8vIFZpZGVvIEIgaW50ZXJydXB0IHN0YXR1cwotI2RlZmluZSAgVklEX0JfSU5UX01TVEFUICAgICAgICAgICAweDA0MDAzOAkvLyBWaWRlbyBCIGludGVycnVwdCBtYXNrZWQgc3RhdHVzCi0jZGVmaW5lICBWSURfQl9JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMDNDCS8vIFZpZGVvIEIgaW50ZXJydXB0IHNldCBzdGF0dXMKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBWSURfQl9JTlRfTVNLICAgICAgICAgICAgIDB4MDQwMDMwCS8qIFZpZGVvIEIgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgIFZJRF9CX0lOVF9TVEFUICAgICAgICAgICAgMHgwNDAwMzQJLyogVmlkZW8gQiBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lICBWSURfQl9JTlRfTVNUQVQgICAgICAgICAgIDB4MDQwMDM4CS8qIFZpZGVvIEIgaW50ZXJydXB0IG1hc2tlZCBzdGF0dXMgKi8KKyNkZWZpbmUgIFZJRF9CX0lOVF9TU1RBVCAgICAgICAgICAgMHgwNDAwM0MJLyogVmlkZW8gQiBpbnRlcnJ1cHQgc2V0IHN0YXR1cyAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBWSURfQ19JTlRfTVNLICAgICAgICAgICAgIDB4MDQwMDQwCS8vIFZpZGVvIEMgaW50ZXJydXB0IG1hc2sKLSNkZWZpbmUgIFZJRF9DX0lOVF9TVEFUICAgICAgICAgICAgMHgwNDAwNDQJLy8gVmlkZW8gQyBpbnRlcnJ1cHQgc3RhdHVzCi0jZGVmaW5lICBWSURfQ19JTlRfTVNUQVQgICAgICAgICAgIDB4MDQwMDQ4CS8vIFZpZGVvIEMgaW50ZXJydXB0IG1hc2tlZCBzdGF0dXMKLSNkZWZpbmUgIFZJRF9DX0lOVF9TU1RBVCAgICAgICAgICAgMHgwNDAwNEMJLy8gVmlkZW8gQyBpbnRlcnJ1cHQgc2V0IHN0YXR1cworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIFZJRF9DX0lOVF9NU0sgICAgICAgICAgICAgMHgwNDAwNDAJLyogVmlkZW8gQyBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSAgVklEX0NfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDA0NAkvKiBWaWRlbyBDIGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgIFZJRF9DX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAwNDgJLyogVmlkZW8gQyBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cyAqLworI2RlZmluZSAgVklEX0NfSU5UX1NTVEFUICAgICAgICAgICAweDA0MDA0QwkvKiBWaWRlbyBDIGludGVycnVwdCBzZXQgc3RhdHVzICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIFZJRF9EX0lOVF9NU0sgICAgICAgICAgICAgMHgwNDAwNTAJLy8gVmlkZW8gRCBpbnRlcnJ1cHQgbWFzawotI2RlZmluZSAgVklEX0RfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDA1NAkvLyBWaWRlbyBEIGludGVycnVwdCBzdGF0dXMKLSNkZWZpbmUgIFZJRF9EX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAwNTgJLy8gVmlkZW8gRCBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cwotI2RlZmluZSAgVklEX0RfSU5UX1NTVEFUICAgICAgICAgICAweDA0MDA1QwkvLyBWaWRlbyBEIGludGVycnVwdCBzZXQgc3RhdHVzCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgVklEX0RfSU5UX01TSyAgICAgICAgICAgICAweDA0MDA1MAkvKiBWaWRlbyBEIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lICBWSURfRF9JTlRfU1RBVCAgICAgICAgICAgIDB4MDQwMDU0CS8qIFZpZGVvIEQgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgVklEX0RfSU5UX01TVEFUICAgICAgICAgICAweDA0MDA1OAkvKiBWaWRlbyBEIGludGVycnVwdCBtYXNrZWQgc3RhdHVzICovCisjZGVmaW5lICBWSURfRF9JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMDVDCS8qIFZpZGVvIEQgaW50ZXJydXB0IHNldCBzdGF0dXMgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgVklEX0VfSU5UX01TSyAgICAgICAgICAgICAweDA0MDA2MAkvLyBWaWRlbyBFIGludGVycnVwdCBtYXNrCi0jZGVmaW5lICBWSURfRV9JTlRfU1RBVCAgICAgICAgICAgIDB4MDQwMDY0CS8vIFZpZGVvIEUgaW50ZXJydXB0IHN0YXR1cwotI2RlZmluZSAgVklEX0VfSU5UX01TVEFUICAgICAgICAgICAweDA0MDA2OAkvLyBWaWRlbyBFIGludGVycnVwdCBtYXNrZWQgc3RhdHVzCi0jZGVmaW5lICBWSURfRV9JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMDZDCS8vIFZpZGVvIEUgaW50ZXJydXB0IHNldCBzdGF0dXMKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBWSURfRV9JTlRfTVNLICAgICAgICAgICAgIDB4MDQwMDYwCS8qIFZpZGVvIEUgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgIFZJRF9FX0lOVF9TVEFUICAgICAgICAgICAgMHgwNDAwNjQJLyogVmlkZW8gRSBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lICBWSURfRV9JTlRfTVNUQVQgICAgICAgICAgIDB4MDQwMDY4CS8qIFZpZGVvIEUgaW50ZXJydXB0IG1hc2tlZCBzdGF0dXMgKi8KKyNkZWZpbmUgIFZJRF9FX0lOVF9TU1RBVCAgICAgICAgICAgMHgwNDAwNkMJLyogVmlkZW8gRSBpbnRlcnJ1cHQgc2V0IHN0YXR1cyAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBWSURfRl9JTlRfTVNLICAgICAgICAgICAgIDB4MDQwMDcwCS8vIFZpZGVvIEYgaW50ZXJydXB0IG1hc2sKLSNkZWZpbmUgIFZJRF9GX0lOVF9TVEFUICAgICAgICAgICAgMHgwNDAwNzQJLy8gVmlkZW8gRiBpbnRlcnJ1cHQgc3RhdHVzCi0jZGVmaW5lICBWSURfRl9JTlRfTVNUQVQgICAgICAgICAgIDB4MDQwMDc4CS8vIFZpZGVvIEYgaW50ZXJydXB0IG1hc2tlZCBzdGF0dXMKLSNkZWZpbmUgIFZJRF9GX0lOVF9TU1RBVCAgICAgICAgICAgMHgwNDAwN0MJLy8gVmlkZW8gRiBpbnRlcnJ1cHQgc2V0IHN0YXR1cworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIFZJRF9GX0lOVF9NU0sgICAgICAgICAgICAgMHgwNDAwNzAJLyogVmlkZW8gRiBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSAgVklEX0ZfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDA3NAkvKiBWaWRlbyBGIGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgIFZJRF9GX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAwNzgJLyogVmlkZW8gRiBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cyAqLworI2RlZmluZSAgVklEX0ZfSU5UX1NTVEFUICAgICAgICAgICAweDA0MDA3QwkvKiBWaWRlbyBGIGludGVycnVwdCBzZXQgc3RhdHVzICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIFZJRF9HX0lOVF9NU0sgICAgICAgICAgICAgMHgwNDAwODAJLy8gVmlkZW8gRyBpbnRlcnJ1cHQgbWFzawotI2RlZmluZSAgVklEX0dfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDA4NAkvLyBWaWRlbyBHIGludGVycnVwdCBzdGF0dXMKLSNkZWZpbmUgIFZJRF9HX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAwODgJLy8gVmlkZW8gRyBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cwotI2RlZmluZSAgVklEX0dfSU5UX1NTVEFUICAgICAgICAgICAweDA0MDA4QwkvLyBWaWRlbyBHIGludGVycnVwdCBzZXQgc3RhdHVzCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgVklEX0dfSU5UX01TSyAgICAgICAgICAgICAweDA0MDA4MAkvKiBWaWRlbyBHIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lICBWSURfR19JTlRfU1RBVCAgICAgICAgICAgIDB4MDQwMDg0CS8qIFZpZGVvIEcgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgVklEX0dfSU5UX01TVEFUICAgICAgICAgICAweDA0MDA4OAkvKiBWaWRlbyBHIGludGVycnVwdCBtYXNrZWQgc3RhdHVzICovCisjZGVmaW5lICBWSURfR19JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMDhDCS8qIFZpZGVvIEcgaW50ZXJydXB0IHNldCBzdGF0dXMgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgVklEX0hfSU5UX01TSyAgICAgICAgICAgICAweDA0MDA5MAkvLyBWaWRlbyBIIGludGVycnVwdCBtYXNrCi0jZGVmaW5lICBWSURfSF9JTlRfU1RBVCAgICAgICAgICAgIDB4MDQwMDk0CS8vIFZpZGVvIEggaW50ZXJydXB0IHN0YXR1cwotI2RlZmluZSAgVklEX0hfSU5UX01TVEFUICAgICAgICAgICAweDA0MDA5OAkvLyBWaWRlbyBIIGludGVycnVwdCBtYXNrZWQgc3RhdHVzCi0jZGVmaW5lICBWSURfSF9JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMDlDCS8vIFZpZGVvIEggaW50ZXJydXB0IHNldCBzdGF0dXMKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBWSURfSF9JTlRfTVNLICAgICAgICAgICAgIDB4MDQwMDkwCS8qIFZpZGVvIEggaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgIFZJRF9IX0lOVF9TVEFUICAgICAgICAgICAgMHgwNDAwOTQJLyogVmlkZW8gSCBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lICBWSURfSF9JTlRfTVNUQVQgICAgICAgICAgIDB4MDQwMDk4CS8qIFZpZGVvIEggaW50ZXJydXB0IG1hc2tlZCBzdGF0dXMgKi8KKyNkZWZpbmUgIFZJRF9IX0lOVF9TU1RBVCAgICAgICAgICAgMHgwNDAwOUMJLyogVmlkZW8gSCBpbnRlcnJ1cHQgc2V0IHN0YXR1cyAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBWSURfSV9JTlRfTVNLICAgICAgICAgICAgIDB4MDQwMEEwCS8vIFZpZGVvIEkgaW50ZXJydXB0IG1hc2sKLSNkZWZpbmUgIFZJRF9JX0lOVF9TVEFUICAgICAgICAgICAgMHgwNDAwQTQJLy8gVmlkZW8gSSBpbnRlcnJ1cHQgc3RhdHVzCi0jZGVmaW5lICBWSURfSV9JTlRfTVNUQVQgICAgICAgICAgIDB4MDQwMEE4CS8vIFZpZGVvIEkgaW50ZXJydXB0IG1hc2tlZCBzdGF0dXMKLSNkZWZpbmUgIFZJRF9JX0lOVF9TU1RBVCAgICAgICAgICAgMHgwNDAwQUMJLy8gVmlkZW8gSSBpbnRlcnJ1cHQgc2V0IHN0YXR1cworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIFZJRF9JX0lOVF9NU0sgICAgICAgICAgICAgMHgwNDAwQTAJLyogVmlkZW8gSSBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSAgVklEX0lfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDBBNAkvKiBWaWRlbyBJIGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgIFZJRF9JX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAwQTgJLyogVmlkZW8gSSBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cyAqLworI2RlZmluZSAgVklEX0lfSU5UX1NTVEFUICAgICAgICAgICAweDA0MDBBQwkvKiBWaWRlbyBJIGludGVycnVwdCBzZXQgc3RhdHVzICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIFZJRF9KX0lOVF9NU0sgICAgICAgICAgICAgMHgwNDAwQjAJLy8gVmlkZW8gSiBpbnRlcnJ1cHQgbWFzawotI2RlZmluZSAgVklEX0pfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDBCNAkvLyBWaWRlbyBKIGludGVycnVwdCBzdGF0dXMKLSNkZWZpbmUgIFZJRF9KX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAwQjgJLy8gVmlkZW8gSiBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cwotI2RlZmluZSAgVklEX0pfSU5UX1NTVEFUICAgICAgICAgICAweDA0MDBCQwkvLyBWaWRlbyBKIGludGVycnVwdCBzZXQgc3RhdHVzCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgVklEX0pfSU5UX01TSyAgICAgICAgICAgICAweDA0MDBCMAkvKiBWaWRlbyBKIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lICBWSURfSl9JTlRfU1RBVCAgICAgICAgICAgIDB4MDQwMEI0CS8qIFZpZGVvIEogaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgVklEX0pfSU5UX01TVEFUICAgICAgICAgICAweDA0MDBCOAkvKiBWaWRlbyBKIGludGVycnVwdCBtYXNrZWQgc3RhdHVzICovCisjZGVmaW5lICBWSURfSl9JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMEJDCS8qIFZpZGVvIEogaW50ZXJydXB0IHNldCBzdGF0dXMgKi8KIAogI2RlZmluZSAgRkxEX1ZJRF9TUkNfT1BDX0VSUiAgICAgICAweDAwMDIwMDAwCiAjZGVmaW5lICBGTERfVklEX0RTVF9PUENfRVJSICAgICAgIDB4MDAwMTAwMDAKQEAgLTE2NiwzNSArMTY2LDM1IEBACiAjZGVmaW5lICBGTERfVklEX1NSQ19FUlJPUlMJCUZMRF9WSURfU1JDX09QQ19FUlIgfCBGTERfVklEX1NSQ19TWU5DIHwgRkxEX1ZJRF9TUkNfVUYKICNkZWZpbmUgIEZMRF9WSURfRFNUX0VSUk9SUwkJRkxEX1ZJRF9EU1RfT1BDX0VSUiB8IEZMRF9WSURfRFNUX1NZTkMgfCBGTERfVklEX0RTVF9PRgogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBBVURfQV9JTlRfTVNLICAgICAgICAgICAgIDB4MDQwMEMwCS8vIEF1ZGlvIEludCBpbnRlcnJ1cHQgbWFzawotI2RlZmluZSAgQVVEX0FfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDBDNAkvLyBBdWRpbyBJbnQgaW50ZXJydXB0IHN0YXR1cwotI2RlZmluZSAgQVVEX0FfSU5UX01TVEFUICAgICAgICAgICAweDA0MDBDOAkvLyBBdWRpbyBJbnQgaW50ZXJydXB0IG1hc2tlZCBzdGF0dXMKLSNkZWZpbmUgIEFVRF9BX0lOVF9TU1RBVCAgICAgICAgICAgMHgwNDAwQ0MJLy8gQXVkaW8gSW50IGludGVycnVwdCBzZXQgc3RhdHVzCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgQVVEX0FfSU5UX01TSyAgICAgICAgICAgICAweDA0MDBDMAkvKiBBdWRpbyBJbnQgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgIEFVRF9BX0lOVF9TVEFUICAgICAgICAgICAgMHgwNDAwQzQJLyogQXVkaW8gSW50IGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgIEFVRF9BX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAwQzgJLyogQXVkaW8gSW50IGludGVycnVwdCBtYXNrZWQgc3RhdHVzICovCisjZGVmaW5lICBBVURfQV9JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMENDCS8qIEF1ZGlvIEludCBpbnRlcnJ1cHQgc2V0IHN0YXR1cyAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBBVURfQl9JTlRfTVNLICAgICAgICAgICAgIDB4MDQwMEQwCS8vIEF1ZGlvIEludCBpbnRlcnJ1cHQgbWFzawotI2RlZmluZSAgQVVEX0JfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDBENAkvLyBBdWRpbyBJbnQgaW50ZXJydXB0IHN0YXR1cwotI2RlZmluZSAgQVVEX0JfSU5UX01TVEFUICAgICAgICAgICAweDA0MDBEOAkvLyBBdWRpbyBJbnQgaW50ZXJydXB0IG1hc2tlZCBzdGF0dXMKLSNkZWZpbmUgIEFVRF9CX0lOVF9TU1RBVCAgICAgICAgICAgMHgwNDAwREMJLy8gQXVkaW8gSW50IGludGVycnVwdCBzZXQgc3RhdHVzCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgQVVEX0JfSU5UX01TSyAgICAgICAgICAgICAweDA0MDBEMAkvKiBBdWRpbyBJbnQgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgIEFVRF9CX0lOVF9TVEFUICAgICAgICAgICAgMHgwNDAwRDQJLyogQXVkaW8gSW50IGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgIEFVRF9CX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAwRDgJLyogQXVkaW8gSW50IGludGVycnVwdCBtYXNrZWQgc3RhdHVzICovCisjZGVmaW5lICBBVURfQl9JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMERDCS8qIEF1ZGlvIEludCBpbnRlcnJ1cHQgc2V0IHN0YXR1cyAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBBVURfQ19JTlRfTVNLICAgICAgICAgICAgIDB4MDQwMEUwCS8vIEF1ZGlvIEludCBpbnRlcnJ1cHQgbWFzawotI2RlZmluZSAgQVVEX0NfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDBFNAkvLyBBdWRpbyBJbnQgaW50ZXJydXB0IHN0YXR1cwotI2RlZmluZSAgQVVEX0NfSU5UX01TVEFUICAgICAgICAgICAweDA0MDBFOAkvLyBBdWRpbyBJbnQgaW50ZXJydXB0IG1hc2tlZCBzdGF0dXMKLSNkZWZpbmUgIEFVRF9DX0lOVF9TU1RBVCAgICAgICAgICAgMHgwNDAwRUMJLy8gQXVkaW8gSW50IGludGVycnVwdCBzZXQgc3RhdHVzCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgQVVEX0NfSU5UX01TSyAgICAgICAgICAgICAweDA0MDBFMAkvKiBBdWRpbyBJbnQgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgIEFVRF9DX0lOVF9TVEFUICAgICAgICAgICAgMHgwNDAwRTQJLyogQXVkaW8gSW50IGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgIEFVRF9DX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAwRTgJLyogQXVkaW8gSW50IGludGVycnVwdCBtYXNrZWQgc3RhdHVzICovCisjZGVmaW5lICBBVURfQ19JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMEVDCS8qIEF1ZGlvIEludCBpbnRlcnJ1cHQgc2V0IHN0YXR1cyAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBBVURfRF9JTlRfTVNLICAgICAgICAgICAgIDB4MDQwMEYwCS8vIEF1ZGlvIEludCBpbnRlcnJ1cHQgbWFzawotI2RlZmluZSAgQVVEX0RfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDBGNAkvLyBBdWRpbyBJbnQgaW50ZXJydXB0IHN0YXR1cwotI2RlZmluZSAgQVVEX0RfSU5UX01TVEFUICAgICAgICAgICAweDA0MDBGOAkvLyBBdWRpbyBJbnQgaW50ZXJydXB0IG1hc2tlZCBzdGF0dXMKLSNkZWZpbmUgIEFVRF9EX0lOVF9TU1RBVCAgICAgICAgICAgMHgwNDAwRkMJLy8gQXVkaW8gSW50IGludGVycnVwdCBzZXQgc3RhdHVzCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgQVVEX0RfSU5UX01TSyAgICAgICAgICAgICAweDA0MDBGMAkvKiBBdWRpbyBJbnQgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgIEFVRF9EX0lOVF9TVEFUICAgICAgICAgICAgMHgwNDAwRjQJLyogQXVkaW8gSW50IGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgIEFVRF9EX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAwRjgJLyogQXVkaW8gSW50IGludGVycnVwdCBtYXNrZWQgc3RhdHVzICovCisjZGVmaW5lICBBVURfRF9JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMEZDCS8qIEF1ZGlvIEludCBpbnRlcnJ1cHQgc2V0IHN0YXR1cyAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBBVURfRV9JTlRfTVNLICAgICAgICAgICAgIDB4MDQwMTAwCS8vIEF1ZGlvIEludCBpbnRlcnJ1cHQgbWFzawotI2RlZmluZSAgQVVEX0VfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDEwNAkvLyBBdWRpbyBJbnQgaW50ZXJydXB0IHN0YXR1cwotI2RlZmluZSAgQVVEX0VfSU5UX01TVEFUICAgICAgICAgICAweDA0MDEwOAkvLyBBdWRpbyBJbnQgaW50ZXJydXB0IG1hc2tlZCBzdGF0dXMKLSNkZWZpbmUgIEFVRF9FX0lOVF9TU1RBVCAgICAgICAgICAgMHgwNDAxMEMJLy8gQXVkaW8gSW50IGludGVycnVwdCBzZXQgc3RhdHVzCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgQVVEX0VfSU5UX01TSyAgICAgICAgICAgICAweDA0MDEwMAkvKiBBdWRpbyBJbnQgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgIEFVRF9FX0lOVF9TVEFUICAgICAgICAgICAgMHgwNDAxMDQJLyogQXVkaW8gSW50IGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgIEFVRF9FX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAxMDgJLyogQXVkaW8gSW50IGludGVycnVwdCBtYXNrZWQgc3RhdHVzICovCisjZGVmaW5lICBBVURfRV9JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMTBDCS8qIEF1ZGlvIEludCBpbnRlcnJ1cHQgc2V0IHN0YXR1cyAqLwogCiAjZGVmaW5lICBGTERfQVVEX1NSQ19PUENfRVJSICAgICAgIDB4MDAwMjAwMDAKICNkZWZpbmUgIEZMRF9BVURfRFNUX09QQ19FUlIgICAgICAgMHgwMDAxMDAwMApAQCAtMjA3LDE3ICsyMDcsMTcgQEAKICNkZWZpbmUgIEZMRF9BVURfU1JDX1JJU0NJMSAgICAgICAgMHgwMDAwMDAwMgogI2RlZmluZSAgRkxEX0FVRF9EU1RfUklTQ0kxICAgICAgICAweDAwMDAwMDAxCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIE1CSUZfQV9JTlRfTVNLICAgICAgICAgICAgIDB4MDQwMTEwCS8vIE1CSUYgSW50IGludGVycnVwdCBtYXNrCi0jZGVmaW5lICBNQklGX0FfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDExNAkvLyBNQklGIEludCBpbnRlcnJ1cHQgc3RhdHVzCi0jZGVmaW5lICBNQklGX0FfSU5UX01TVEFUICAgICAgICAgICAweDA0MDExOAkvLyBNQklGIEludCBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cwotI2RlZmluZSAgTUJJRl9BX0lOVF9TU1RBVCAgICAgICAgICAgMHgwNDAxMUMJLy8gTUJJRiBJbnQgaW50ZXJydXB0IHNldCBzdGF0dXMKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBNQklGX0FfSU5UX01TSyAgICAgICAgICAgICAweDA0MDExMAkvKiBNQklGIEludCBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSAgTUJJRl9BX0lOVF9TVEFUICAgICAgICAgICAgMHgwNDAxMTQJLyogTUJJRiBJbnQgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgTUJJRl9BX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAxMTgJLyogTUJJRiBJbnQgaW50ZXJydXB0IG1hc2tlZCBzdGF0dXMgKi8KKyNkZWZpbmUgIE1CSUZfQV9JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMTFDCS8qIE1CSUYgSW50IGludGVycnVwdCBzZXQgc3RhdHVzICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIE1CSUZfQl9JTlRfTVNLICAgICAgICAgICAgIDB4MDQwMTIwCS8vIE1CSUYgSW50IGludGVycnVwdCBtYXNrCi0jZGVmaW5lICBNQklGX0JfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDEyNAkvLyBNQklGIEludCBpbnRlcnJ1cHQgc3RhdHVzCi0jZGVmaW5lICBNQklGX0JfSU5UX01TVEFUICAgICAgICAgICAweDA0MDEyOAkvLyBNQklGIEludCBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cwotI2RlZmluZSAgTUJJRl9CX0lOVF9TU1RBVCAgICAgICAgICAgMHgwNDAxMkMJLy8gTUJJRiBJbnQgaW50ZXJydXB0IHNldCBzdGF0dXMKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBNQklGX0JfSU5UX01TSyAgICAgICAgICAgICAweDA0MDEyMAkvKiBNQklGIEludCBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSAgTUJJRl9CX0lOVF9TVEFUICAgICAgICAgICAgMHgwNDAxMjQJLyogTUJJRiBJbnQgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgTUJJRl9CX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAxMjgJLyogTUJJRiBJbnQgaW50ZXJydXB0IG1hc2tlZCBzdGF0dXMgKi8KKyNkZWZpbmUgIE1CSUZfQl9JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMTJDCS8qIE1CSUYgSW50IGludGVycnVwdCBzZXQgc3RhdHVzICovCiAKICNkZWZpbmUgIEZMRF9NQklGX0RTVF9PUENfRVJSICAgICAgIDB4MDAwMTAwMDAKICNkZWZpbmUgIEZMRF9NQklGX0RTVF9TWU5DICAgICAgICAgIDB4MDAwMDEwMDAKQEAgLTIyNSwzNSArMjI1LDM1IEBACiAjZGVmaW5lICBGTERfTUJJRl9EU1RfUklTQ0kyICAgICAgICAweDAwMDAwMDEwCiAjZGVmaW5lICBGTERfTUJJRl9EU1RfUklTQ0kxICAgICAgICAweDAwMDAwMDAxCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIEFVRF9FWFRfSU5UX01TSyAgICAgICAgICAgMHgwNDAwNjAJLy8gQXVkaW8gRXh0IGludGVycnVwdCBtYXNrCi0jZGVmaW5lICBBVURfRVhUX0lOVF9TVEFUICAgICAgICAgIDB4MDQwMDY0CS8vIEF1ZGlvIEV4dCBpbnRlcnJ1cHQgc3RhdHVzCi0jZGVmaW5lICBBVURfRVhUX0lOVF9NU1RBVCAgICAgICAgIDB4MDQwMDY4CS8vIEF1ZGlvIEV4dCBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cwotI2RlZmluZSAgQVVEX0VYVF9JTlRfU1NUQVQgICAgICAgICAweDA0MDA2QwkvLyBBdWRpbyBFeHQgaW50ZXJydXB0IHNldCBzdGF0dXMKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBBVURfRVhUX0lOVF9NU0sgICAgICAgICAgIDB4MDQwMDYwCS8qIEF1ZGlvIEV4dCBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSAgQVVEX0VYVF9JTlRfU1RBVCAgICAgICAgICAweDA0MDA2NAkvKiBBdWRpbyBFeHQgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgQVVEX0VYVF9JTlRfTVNUQVQgICAgICAgICAweDA0MDA2OAkvKiBBdWRpbyBFeHQgaW50ZXJydXB0IG1hc2tlZCBzdGF0dXMgKi8KKyNkZWZpbmUgIEFVRF9FWFRfSU5UX1NTVEFUICAgICAgICAgMHgwNDAwNkMJLyogQXVkaW8gRXh0IGludGVycnVwdCBzZXQgc3RhdHVzICovCiAjZGVmaW5lICBGTERfQVVEX0VYVF9PUENfRVJSICAgICAgIDB4MDAwMTAwMDAKICNkZWZpbmUgIEZMRF9BVURfRVhUX1NZTkMgICAgICAgICAgMHgwMDAwMTAwMAogI2RlZmluZSAgRkxEX0FVRF9FWFRfT0YgICAgICAgICAgICAweDAwMDAwMTAwCiAjZGVmaW5lICBGTERfQVVEX0VYVF9SSVNDSTIgICAgICAgIDB4MDAwMDAwMTAKICNkZWZpbmUgIEZMRF9BVURfRVhUX1JJU0NJMSAgICAgICAgMHgwMDAwMDAwMQogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBHUElPX0xPICAgICAgICAgICAgICAgICAgIDB4MTEwMDEwCS8vIExvd2VyICBvZiBHUElPIHBpbnMgWzMxOjBdCi0jZGVmaW5lICBHUElPX0hJICAgICAgICAgICAgICAgICAgIDB4MTEwMDE0CS8vIFVwcGVyIFdPUkQgIG9mIEdQSU8gcGlucyBbNDc6MzFdCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgR1BJT19MTyAgICAgICAgICAgICAgICAgICAweDExMDAxMAkvKiBMb3dlciAgb2YgR1BJTyBwaW5zIFszMTowXSAqLworI2RlZmluZSAgR1BJT19ISSAgICAgICAgICAgICAgICAgICAweDExMDAxNAkvKiBVcHBlciBXT1JEICBvZiBHUElPIHBpbnMgWzQ3OjMxXSAqLwogCi0jZGVmaW5lICBHUElPX0xPX09FICAgICAgICAgICAgICAgIDB4MTEwMDE4CS8vIExvd2VyICBvZiBHUElPIG91dHB1dCBlbmFibGUgWzMxOjBdCi0jZGVmaW5lICBHUElPX0hJX09FICAgICAgICAgICAgICAgIDB4MTEwMDFDCS8vIFVwcGVyIHdvcmQgIG9mIEdQSU8gb3V0cHV0IGVuYWJsZSBbNDc6MzJdCisjZGVmaW5lICBHUElPX0xPX09FICAgICAgICAgICAgICAgIDB4MTEwMDE4CS8qIExvd2VyICBvZiBHUElPIG91dHB1dCBlbmFibGUgWzMxOjBdICovCisjZGVmaW5lICBHUElPX0hJX09FICAgICAgICAgICAgICAgIDB4MTEwMDFDCS8qIFVwcGVyIHdvcmQgIG9mIEdQSU8gb3V0cHV0IGVuYWJsZSBbNDc6MzJdICovCiAKLSNkZWZpbmUgIEdQSU9fTE9fSU5UX01TSyAgICAgICAgICAgMHgxMTAwM0MJLy8gR1BJTyBpbnRlcnJ1cHQgbWFzawotI2RlZmluZSAgR1BJT19MT19JTlRfU1RBVCAgICAgICAgICAweDExMDA0NAkvLyBHUElPIGludGVycnVwdCBzdGF0dXMKLSNkZWZpbmUgIEdQSU9fTE9fSU5UX01TVEFUICAgICAgICAgMHgxMTAwNEMJLy8gR1BJTyBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cwotI2RlZmluZSAgR1BJT19MT19JU01fU05TICAgICAgICAgICAweDExMDA1NAkvLyBHUElPIGludGVycnVwdCBzZW5zaXRpdml0eQotI2RlZmluZSAgR1BJT19MT19JU01fUE9MICAgICAgICAgICAweDExMDA1QwkvLyBHUElPIGludGVycnVwdCBwb2xhcml0eQorI2RlZmluZSAgR1BJT19MT19JTlRfTVNLICAgICAgICAgICAweDExMDAzQwkvKiBHUElPIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lICBHUElPX0xPX0lOVF9TVEFUICAgICAgICAgIDB4MTEwMDQ0CS8qIEdQSU8gaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgR1BJT19MT19JTlRfTVNUQVQgICAgICAgICAweDExMDA0QwkvKiBHUElPIGludGVycnVwdCBtYXNrZWQgc3RhdHVzICovCisjZGVmaW5lICBHUElPX0xPX0lTTV9TTlMgICAgICAgICAgIDB4MTEwMDU0CS8qIEdQSU8gaW50ZXJydXB0IHNlbnNpdGl2aXR5ICovCisjZGVmaW5lICBHUElPX0xPX0lTTV9QT0wgICAgICAgICAgIDB4MTEwMDVDCS8qIEdQSU8gaW50ZXJydXB0IHBvbGFyaXR5ICovCiAKLSNkZWZpbmUgIEdQSU9fSElfSU5UX01TSyAgICAgICAgICAgMHgxMTAwNDAJLy8gR1BJTyBpbnRlcnJ1cHQgbWFzawotI2RlZmluZSAgR1BJT19ISV9JTlRfU1RBVCAgICAgICAgICAweDExMDA0OAkvLyBHUElPIGludGVycnVwdCBzdGF0dXMKLSNkZWZpbmUgIEdQSU9fSElfSU5UX01TVEFUICAgICAgICAgMHgxMTAwNTAJLy8gR1BJTyBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cwotI2RlZmluZSAgR1BJT19ISV9JU01fU05TICAgICAgICAgICAweDExMDA1OAkvLyBHUElPIGludGVycnVwdCBzZW5zaXRpdml0eQotI2RlZmluZSAgR1BJT19ISV9JU01fUE9MICAgICAgICAgICAweDExMDA2MAkvLyBHUElPIGludGVycnVwdCBwb2xhcml0eQorI2RlZmluZSAgR1BJT19ISV9JTlRfTVNLICAgICAgICAgICAweDExMDA0MAkvKiBHUElPIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lICBHUElPX0hJX0lOVF9TVEFUICAgICAgICAgIDB4MTEwMDQ4CS8qIEdQSU8gaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgR1BJT19ISV9JTlRfTVNUQVQgICAgICAgICAweDExMDA1MAkvKiBHUElPIGludGVycnVwdCBtYXNrZWQgc3RhdHVzICovCisjZGVmaW5lICBHUElPX0hJX0lTTV9TTlMgICAgICAgICAgIDB4MTEwMDU4CS8qIEdQSU8gaW50ZXJydXB0IHNlbnNpdGl2aXR5ICovCisjZGVmaW5lICBHUElPX0hJX0lTTV9QT0wgICAgICAgICAgIDB4MTEwMDYwCS8qIEdQSU8gaW50ZXJydXB0IHBvbGFyaXR5ICovCiAKICNkZWZpbmUgIEZMRF9HUElPNDNfSU5UICAgICAgICAgICAgKDEgPDwgMTEpCiAjZGVmaW5lICBGTERfR1BJTzQyX0lOVCAgICAgICAgICAgICgxIDw8IDEwKQpAQCAtMjcxLDIzNiArMjcxLDIzNiBAQAogI2RlZmluZSAgRkxEX0dQSU8xX0lOVCAgICAgICAgICAgICAoMSA8PCAxKQogI2RlZmluZSAgRkxEX0dQSU8wX0lOVCAgICAgICAgICAgICAoMSA8PCAwKQogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBUQ19SRVEgICAgICAgICAgICAgICAgICAgIDB4MDQwMDkwCS8vIFJpZGVyIFBDSSBFeHByZXNzIHRyYUZGaWMgY2xhc3MgcmVxdWVzdAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIFRDX1JFUSAgICAgICAgICAgICAgICAgICAgMHgwNDAwOTAJLyogUmlkZXIgUENJIEV4cHJlc3MgdHJhRkZpYyBjbGFzcyByZXF1ZXN0ICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIFRDX1JFUV9TRVQgICAgICAgICAgICAgICAgMHgwNDAwOTQJLy8gUmlkZXIgUENJIEV4cHJlc3MgdHJhRkZpYyBjbGFzcyByZXF1ZXN0IHNldAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIFRDX1JFUV9TRVQgICAgICAgICAgICAgICAgMHgwNDAwOTQJLyogUmlkZXIgUENJIEV4cHJlc3MgdHJhRkZpYyBjbGFzcyByZXF1ZXN0IHNldCAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0vLyBSaWRlcgotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIFJpZGVyICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogCi0vLyBQQ0kgQ29tcGF0aWJsZSBIZWFkZXIKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qIFBDSSBDb21wYXRpYmxlIEhlYWRlciAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICNkZWZpbmUgIFJEUl9DRkcwICAgICAgICAgICAgICAgICAgMHgwNTAwMDAKICNkZWZpbmUgIFJEUl9WRU5ET1JfREVWSUNFX0lEX0NGRyAgMHgwNTAwMDAKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICNkZWZpbmUgIFJEUl9DRkcxICAgICAgICAgICAgICAgICAgMHgwNTAwMDQKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICNkZWZpbmUgIFJEUl9DRkcyICAgICAgICAgICAgICAgICAgMHgwNTAwMDgKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICNkZWZpbmUgIFJEUl9DRkczICAgICAgICAgICAgICAgICAgMHgwNTAwMEMKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICNkZWZpbmUgIFJEUl9DRkc0ICAgICAgICAgICAgICAgICAgMHgwNTAwMTAKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICNkZWZpbmUgIFJEUl9DRkc1ICAgICAgICAgICAgICAgICAgMHgwNTAwMTQKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICNkZWZpbmUgIFJEUl9DRkc2ICAgICAgICAgICAgICAgICAgMHgwNTAwMTgKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICNkZWZpbmUgIFJEUl9DRkc3ICAgICAgICAgICAgICAgICAgMHgwNTAwMUMKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICNkZWZpbmUgIFJEUl9DRkc4ICAgICAgICAgICAgICAgICAgMHgwNTAwMjAKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICNkZWZpbmUgIFJEUl9DRkc5ICAgICAgICAgICAgICAgICAgMHgwNTAwMjQKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICNkZWZpbmUgIFJEUl9DRkdBICAgICAgICAgICAgICAgICAgMHgwNTAwMjgKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICNkZWZpbmUgIFJEUl9DRkdCICAgICAgICAgICAgICAgICAgMHgwNTAwMkMKICNkZWZpbmUgIFJEUl9TVVNTWVNURU1fSURfQ0ZHICAgICAgMHgwNTAwMkMKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICNkZWZpbmUgIFJEUl9DRkdDICAgICAgICAgICAgICAgICAgMHgwNTAwMzAKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICNkZWZpbmUgIFJEUl9DRkdEICAgICAgICAgICAgICAgICAgMHgwNTAwMzQKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICNkZWZpbmUgIFJEUl9DRkdFICAgICAgICAgICAgICAgICAgMHgwNTAwMzgKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICNkZWZpbmUgIFJEUl9DRkdGICAgICAgICAgICAgICAgICAgMHgwNTAwM0MKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLy8gUENJLUV4cHJlc3MgQ2FwYWJpbGl0aWVzCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogUENJLUV4cHJlc3MgQ2FwYWJpbGl0aWVzICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogI2RlZmluZSAgUkRSX1BFQ0FQICAgICAgICAgICAgICAgICAweDA1MDA0MAogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogI2RlZmluZSAgUkRSX1BFREVWQ0FQICAgICAgICAgICAgICAweDA1MDA0NAogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogI2RlZmluZSAgUkRSX1BFREVWU0MgICAgICAgICAgICAgICAweDA1MDA0OAogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogI2RlZmluZSAgUkRSX1BFTElOS0NBUCAgICAgICAgICAgICAweDA1MDA0QwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogI2RlZmluZSAgUkRSX1BFTElOS1NDICAgICAgICAgICAgICAweDA1MDA1MAogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogI2RlZmluZSAgUkRSX1BNSUNBUCAgICAgICAgICAgICAgICAweDA1MDA4MAogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogI2RlZmluZSAgUkRSX1BNQ1NSICAgICAgICAgICAgICAgICAweDA1MDA4NAogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogI2RlZmluZSAgUkRSX1ZQRENBUCAgICAgICAgICAgICAgICAweDA1MDA5MAogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogI2RlZmluZSAgUkRSX1ZQRERBVEEgICAgICAgICAgICAgICAweDA1MDA5NAogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogI2RlZmluZSAgUkRSX01TSUNBUCAgICAgICAgICAgICAgICAweDA1MDBBMAogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogI2RlZmluZSAgUkRSX01TSUFSTCAgICAgICAgICAgICAgICAweDA1MDBBNAogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogI2RlZmluZSAgUkRSX01TSUFSVSAgICAgICAgICAgICAgICAweDA1MDBBOAogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogI2RlZmluZSAgUkRSX01TSURBVEEgICAgICAgICAgICAgICAweDA1MDBBQwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0vLyBQQ0kgRXhwcmVzcyBFeHRlbmRlZCBDYXBhYmlsaXRpZXMKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBQQ0kgRXhwcmVzcyBFeHRlbmRlZCBDYXBhYmlsaXRpZXMgKi8KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfQUVSWENBUCAgICAgICAgICAgICAgIDB4MDUwMTAwCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfQUVSVUVTVEEgICAgICAgICAgICAgIDB4MDUwMTA0CiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfQUVSVUVNU0sgICAgICAgICAgICAgIDB4MDUwMTA4CiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfQUVSVUVTRVYgICAgICAgICAgICAgIDB4MDUwMTBDCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfQUVSQ0VTVEEgICAgICAgICAgICAgIDB4MDUwMTEwCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfQUVSQ0VNU0sgICAgICAgICAgICAgIDB4MDUwMTE0CiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfQUVSQ0MgICAgICAgICAgICAgICAgIDB4MDUwMTE4CiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfQUVSSEwwICAgICAgICAgICAgICAgIDB4MDUwMTFDCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfQUVSSEwxICAgICAgICAgICAgICAgIDB4MDUwMTIwCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfQUVSSEwyICAgICAgICAgICAgICAgIDB4MDUwMTI0CiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfQUVSSEwzICAgICAgICAgICAgICAgIDB4MDUwMTI4CiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfVkNYQ0FQICAgICAgICAgICAgICAgIDB4MDUwMjAwCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfVkNDQVAxICAgICAgICAgICAgICAgIDB4MDUwMjA0CiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfVkNDQVAyICAgICAgICAgICAgICAgIDB4MDUwMjA4CiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfVkNTQyAgICAgICAgICAgICAgICAgIDB4MDUwMjBDCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfVkNSMF9DQVAgICAgICAgICAgICAgIDB4MDUwMjEwCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfVkNSMF9DVFJMICAgICAgICAgICAgIDB4MDUwMjE0CiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfVkNSMF9TVEFUICAgICAgICAgICAgIDB4MDUwMjE4CiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfVkNSMV9DQVAgICAgICAgICAgICAgIDB4MDUwMjFDCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfVkNSMV9DVFJMICAgICAgICAgICAgIDB4MDUwMjIwCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfVkNSMV9TVEFUICAgICAgICAgICAgIDB4MDUwMjI0CiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfVkNSMl9DQVAgICAgICAgICAgICAgIDB4MDUwMjI4CiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfVkNSMl9DVFJMICAgICAgICAgICAgIDB4MDUwMjJDCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfVkNSMl9TVEFUICAgICAgICAgICAgIDB4MDUwMjMwCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfVkNSM19DQVAgICAgICAgICAgICAgIDB4MDUwMjM0CiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfVkNSM19DVFJMICAgICAgICAgICAgIDB4MDUwMjM4CiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfVkNSM19TVEFUICAgICAgICAgICAgIDB4MDUwMjNDCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfVkNBUkIwICAgICAgICAgICAgICAgIDB4MDUwMjQwCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfVkNBUkIxICAgICAgICAgICAgICAgIDB4MDUwMjQ0CiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfVkNBUkIyICAgICAgICAgICAgICAgIDB4MDUwMjQ4CiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfVkNBUkIzICAgICAgICAgICAgICAgIDB4MDUwMjRDCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfVkNBUkI0ICAgICAgICAgICAgICAgIDB4MDUwMjUwCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfVkNBUkI1ICAgICAgICAgICAgICAgIDB4MDUwMjU0CiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfVkNBUkI2ICAgICAgICAgICAgICAgIDB4MDUwMjU4CiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfVkNBUkI3ICAgICAgICAgICAgICAgIDB4MDUwMjVDCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfUkRSU1RBVDAgICAgICAgICAgICAgIDB4MDUwMzAwCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfUkRSU1RBVDEgICAgICAgICAgICAgIDB4MDUwMzA0CiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfUkRSQ1RMMCAgICAgICAgICAgICAgIDB4MDUwMzA4CiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfUkRSQ1RMMSAgICAgICAgICAgICAgIDB4MDUwMzBDCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLS8vIFRyYW5zYWN0aW9uIExheWVyIFJlZ2lzdGVycwotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIFRyYW5zYWN0aW9uIExheWVyIFJlZ2lzdGVycyAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICNkZWZpbmUgIFJEUl9UTFNUQVQwICAgICAgICAgICAgICAgMHgwNTAzMTAKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICNkZWZpbmUgIFJEUl9UTFNUQVQxICAgICAgICAgICAgICAgMHgwNTAzMTQKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICNkZWZpbmUgIFJEUl9UTENUTDAgICAgICAgICAgICAgICAgMHgwNTAzMTgKICNkZWZpbmUgIEZMRF9DRkdfVVJfQ1BMX01PREUgICAgICAgMHgwMDAwMDA0MAogI2RlZmluZSAgRkxEX0NGR19DT1JSX0VSUl9RVUlURSAgICAweDAwMDAwMDIwCkBAIC01MTAsNTY5ICs1MTAsNTY5IEBACiAjZGVmaW5lICBGTERfQ0ZHX1JFTEFYX09SREVSX01TSyAgIDB4MDAwMDAwMDIKICNkZWZpbmUgIEZMRF9DRkdfVEFHX09SREVSX0VOICAgICAgMHgwMDAwMDAwMQogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogI2RlZmluZSAgUkRSX1RMQ1RMMSAgICAgICAgICAgICAgICAweDA1MDMxQwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogI2RlZmluZSAgUkRSX1JFUVJDQUwgICAgICAgICAgICAgICAweDA1MDMyMAogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogI2RlZmluZSAgUkRSX1JFUVJDQVUgICAgICAgICAgICAgICAweDA1MDMyNAogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogI2RlZmluZSAgUkRSX1JFUUVQQSAgICAgICAgICAgICAgICAweDA1MDMyOAogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogI2RlZmluZSAgUkRSX1JFUUNUUkwgICAgICAgICAgICAgICAweDA1MDMyQwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogI2RlZmluZSAgUkRSX1JFUVNUQVQgICAgICAgICAgICAgICAweDA1MDMzMAogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogI2RlZmluZSAgUkRSX1RMX1RFU1QgICAgICAgICAgICAgICAweDA1MDMzNAogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogI2RlZmluZSAgUkRSX1ZDUjAxX0NUTCAgICAgICAgICAgICAweDA1MDM0OAogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogI2RlZmluZSAgUkRSX1ZDUjIzX0NUTCAgICAgICAgICAgICAweDA1MDM0QwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogI2RlZmluZSAgUkRSX1JYX1ZDUjBfRkMgICAgICAgICAgICAweDA1MDM1MAogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogI2RlZmluZSAgUkRSX1JYX1ZDUjFfRkMgICAgICAgICAgICAweDA1MDM1NAogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogI2RlZmluZSAgUkRSX1JYX1ZDUjJfRkMgICAgICAgICAgICAweDA1MDM1OAogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogI2RlZmluZSAgUkRSX1JYX1ZDUjNfRkMgICAgICAgICAgICAweDA1MDM1QwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0vLyBEYXRhIExpbmsgTGF5ZXIgUmVnaXN0ZXJzCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogRGF0YSBMaW5rIExheWVyIFJlZ2lzdGVycyAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICNkZWZpbmUgIFJEUl9ETExTVEFUICAgICAgICAgICAgICAgMHgwNTAzNjAKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICNkZWZpbmUgIFJEUl9ETExDVFJMICAgICAgICAgICAgICAgMHgwNTAzNjQKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICNkZWZpbmUgIFJEUl9SRVBMQVlUTyAgICAgICAgICAgICAgMHgwNTAzNjgKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICNkZWZpbmUgIFJEUl9BQ0tMQVRUTyAgICAgICAgICAgICAgMHgwNTAzNkMKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLy8gTUFDIExheWVyIFJlZ2lzdGVycwotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1BQyBMYXllciBSZWdpc3RlcnMgKi8KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfTUFDU1RBVDAgICAgICAgICAgICAgIDB4MDUwMzgwCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfTUFDU1RBVDEgICAgICAgICAgICAgIDB4MDUwMzg0CiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfTUFDQ1RSTDAgICAgICAgICAgICAgIDB4MDUwMzg4CiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfTUFDQ1RSTDEgICAgICAgICAgICAgIDB4MDUwMzhDCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfTUFDQ1RSTDIgICAgICAgICAgICAgIDB4MDUwMzkwCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfTUFDX0xCX0RBVEEgICAgICAgICAgIDB4MDUwMzk0CiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAjZGVmaW5lICBSRFJfTDBTX0VYSVRfTEFUICAgICAgICAgIDB4MDUwMzk4CiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLS8vIERNQUMKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTFfUFRSMSAgICAgICAgICAgICAgICAgMHgxMDAwMDAJLy8gRE1BIEN1cnJlbnQgUHRyIDogQ2gjMQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIERNQUMgKi8KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUExX1BUUjEgICAgICAgICAgICAgICAgIDB4MTAwMDAwCS8qIERNQSBDdXJyZW50IFB0ciA6IENoIzEgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgRE1BMl9QVFIxICAgICAgICAgICAgICAgICAweDEwMDAwNAkvLyBETUEgQ3VycmVudCBQdHIgOiBDaCMyCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMl9QVFIxICAgICAgICAgICAgICAgICAweDEwMDAwNAkvKiBETUEgQ3VycmVudCBQdHIgOiBDaCMyICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTNfUFRSMSAgICAgICAgICAgICAgICAgMHgxMDAwMDgJLy8gRE1BIEN1cnJlbnQgUHRyIDogQ2gjMworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIERNQTNfUFRSMSAgICAgICAgICAgICAgICAgMHgxMDAwMDgJLyogRE1BIEN1cnJlbnQgUHRyIDogQ2gjMyAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUE0X1BUUjEgICAgICAgICAgICAgICAgIDB4MTAwMDBDCS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzQKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUE0X1BUUjEgICAgICAgICAgICAgICAgIDB4MTAwMDBDCS8qIERNQSBDdXJyZW50IFB0ciA6IENoIzQgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgRE1BNV9QVFIxICAgICAgICAgICAgICAgICAweDEwMDAxMAkvLyBETUEgQ3VycmVudCBQdHIgOiBDaCM1CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BNV9QVFIxICAgICAgICAgICAgICAgICAweDEwMDAxMAkvKiBETUEgQ3VycmVudCBQdHIgOiBDaCM1ICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTZfUFRSMSAgICAgICAgICAgICAgICAgMHgxMDAwMTQJLy8gRE1BIEN1cnJlbnQgUHRyIDogQ2gjNgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIERNQTZfUFRSMSAgICAgICAgICAgICAgICAgMHgxMDAwMTQJLyogRE1BIEN1cnJlbnQgUHRyIDogQ2gjNiAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUE3X1BUUjEgICAgICAgICAgICAgICAgIDB4MTAwMDE4CS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzcKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUE3X1BUUjEgICAgICAgICAgICAgICAgIDB4MTAwMDE4CS8qIERNQSBDdXJyZW50IFB0ciA6IENoIzcgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgRE1BOF9QVFIxICAgICAgICAgICAgICAgICAweDEwMDAxQwkvLyBETUEgQ3VycmVudCBQdHIgOiBDaCM4CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BOF9QVFIxICAgICAgICAgICAgICAgICAweDEwMDAxQwkvKiBETUEgQ3VycmVudCBQdHIgOiBDaCM4ICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTlfUFRSMSAgICAgICAgICAgICAgICAgMHgxMDAwMjAJLy8gRE1BIEN1cnJlbnQgUHRyIDogQ2gjOQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIERNQTlfUFRSMSAgICAgICAgICAgICAgICAgMHgxMDAwMjAJLyogRE1BIEN1cnJlbnQgUHRyIDogQ2gjOSAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUExMF9QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDI0CS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzEwCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMTBfUFRSMSAgICAgICAgICAgICAgICAweDEwMDAyNAkvKiBETUEgQ3VycmVudCBQdHIgOiBDaCMxMCAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUExMV9QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDI4CS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzExCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMTFfUFRSMSAgICAgICAgICAgICAgICAweDEwMDAyOAkvKiBETUEgQ3VycmVudCBQdHIgOiBDaCMxMSAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUExMl9QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDJDCS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzEyCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMTJfUFRSMSAgICAgICAgICAgICAgICAweDEwMDAyQwkvKiBETUEgQ3VycmVudCBQdHIgOiBDaCMxMiAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUExM19QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDMwCS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzEzCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMTNfUFRSMSAgICAgICAgICAgICAgICAweDEwMDAzMAkvKiBETUEgQ3VycmVudCBQdHIgOiBDaCMxMyAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUExNF9QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDM0CS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzE0CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMTRfUFRSMSAgICAgICAgICAgICAgICAweDEwMDAzNAkvKiBETUEgQ3VycmVudCBQdHIgOiBDaCMxNCAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUExNV9QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDM4CS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzE1CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMTVfUFRSMSAgICAgICAgICAgICAgICAweDEwMDAzOAkvKiBETUEgQ3VycmVudCBQdHIgOiBDaCMxNSAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUExNl9QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDNDCS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzE2CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMTZfUFRSMSAgICAgICAgICAgICAgICAweDEwMDAzQwkvKiBETUEgQ3VycmVudCBQdHIgOiBDaCMxNiAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUExN19QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDQwCS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzE3CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMTdfUFRSMSAgICAgICAgICAgICAgICAweDEwMDA0MAkvKiBETUEgQ3VycmVudCBQdHIgOiBDaCMxNyAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUExOF9QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDQ0CS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzE4CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMThfUFRSMSAgICAgICAgICAgICAgICAweDEwMDA0NAkvKiBETUEgQ3VycmVudCBQdHIgOiBDaCMxOCAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUExOV9QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDQ4CS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzE5CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMTlfUFRSMSAgICAgICAgICAgICAgICAweDEwMDA0OAkvKiBETUEgQ3VycmVudCBQdHIgOiBDaCMxOSAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUEyMF9QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDRDCS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzIwCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMjBfUFRSMSAgICAgICAgICAgICAgICAweDEwMDA0QwkvKiBETUEgQ3VycmVudCBQdHIgOiBDaCMyMCAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUEyMV9QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDUwCS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzIxCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMjFfUFRSMSAgICAgICAgICAgICAgICAweDEwMDA1MAkvKiBETUEgQ3VycmVudCBQdHIgOiBDaCMyMSAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUEyMl9QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDU0CS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzIyCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMjJfUFRSMSAgICAgICAgICAgICAgICAweDEwMDA1NAkvKiBETUEgQ3VycmVudCBQdHIgOiBDaCMyMiAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUEyM19QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDU4CS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzIzCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMjNfUFRSMSAgICAgICAgICAgICAgICAweDEwMDA1OAkvKiBETUEgQ3VycmVudCBQdHIgOiBDaCMyMyAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUEyNF9QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDVDCS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzI0CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMjRfUFRSMSAgICAgICAgICAgICAgICAweDEwMDA1QwkvKiBETUEgQ3VycmVudCBQdHIgOiBDaCMyNCAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUEyNV9QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDYwCS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzI1CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMjVfUFRSMSAgICAgICAgICAgICAgICAweDEwMDA2MAkvKiBETUEgQ3VycmVudCBQdHIgOiBDaCMyNSAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUEyNl9QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDY0CS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzI2CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMjZfUFRSMSAgICAgICAgICAgICAgICAweDEwMDA2NAkvKiBETUEgQ3VycmVudCBQdHIgOiBDaCMyNiAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUExX1BUUjIgICAgICAgICAgICAgICAgIDB4MTAwMDgwCS8vIERNQSBUYWIgUHRyIDogQ2gjMQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIERNQTFfUFRSMiAgICAgICAgICAgICAgICAgMHgxMDAwODAJLyogRE1BIFRhYiBQdHIgOiBDaCMxICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTJfUFRSMiAgICAgICAgICAgICAgICAgMHgxMDAwODQJLy8gRE1BIFRhYiBQdHIgOiBDaCMyCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMl9QVFIyICAgICAgICAgICAgICAgICAweDEwMDA4NAkvKiBETUEgVGFiIFB0ciA6IENoIzIgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgRE1BM19QVFIyICAgICAgICAgICAgICAgICAweDEwMDA4OAkvLyBETUEgVGFiIFB0ciA6IENoIzMKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUEzX1BUUjIgICAgICAgICAgICAgICAgIDB4MTAwMDg4CS8qIERNQSBUYWIgUHRyIDogQ2gjMyAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUE0X1BUUjIgICAgICAgICAgICAgICAgIDB4MTAwMDhDCS8vIERNQSBUYWIgUHRyIDogQ2gjNAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIERNQTRfUFRSMiAgICAgICAgICAgICAgICAgMHgxMDAwOEMJLyogRE1BIFRhYiBQdHIgOiBDaCM0ICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTVfUFRSMiAgICAgICAgICAgICAgICAgMHgxMDAwOTAJLy8gRE1BIFRhYiBQdHIgOiBDaCM1CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BNV9QVFIyICAgICAgICAgICAgICAgICAweDEwMDA5MAkvKiBETUEgVGFiIFB0ciA6IENoIzUgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgRE1BNl9QVFIyICAgICAgICAgICAgICAgICAweDEwMDA5NAkvLyBETUEgVGFiIFB0ciA6IENoIzYKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUE2X1BUUjIgICAgICAgICAgICAgICAgIDB4MTAwMDk0CS8qIERNQSBUYWIgUHRyIDogQ2gjNiAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUE3X1BUUjIgICAgICAgICAgICAgICAgIDB4MTAwMDk4CS8vIERNQSBUYWIgUHRyIDogQ2gjNworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIERNQTdfUFRSMiAgICAgICAgICAgICAgICAgMHgxMDAwOTgJLyogRE1BIFRhYiBQdHIgOiBDaCM3ICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQThfUFRSMiAgICAgICAgICAgICAgICAgMHgxMDAwOUMJLy8gRE1BIFRhYiBQdHIgOiBDaCM4CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BOF9QVFIyICAgICAgICAgICAgICAgICAweDEwMDA5QwkvKiBETUEgVGFiIFB0ciA6IENoIzggKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgRE1BOV9QVFIyICAgICAgICAgICAgICAgICAweDEwMDBBMAkvLyBETUEgVGFiIFB0ciA6IENoIzkKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUE5X1BUUjIgICAgICAgICAgICAgICAgIDB4MTAwMEEwCS8qIERNQSBUYWIgUHRyIDogQ2gjOSAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUExMF9QVFIyICAgICAgICAgICAgICAgIDB4MTAwMEE0CS8vIERNQSBUYWIgUHRyIDogQ2gjMTAKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUExMF9QVFIyICAgICAgICAgICAgICAgIDB4MTAwMEE0CS8qIERNQSBUYWIgUHRyIDogQ2gjMTAgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgRE1BMTFfUFRSMiAgICAgICAgICAgICAgICAweDEwMDBBOAkvLyBETUEgVGFiIFB0ciA6IENoIzExCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMTFfUFRSMiAgICAgICAgICAgICAgICAweDEwMDBBOAkvKiBETUEgVGFiIFB0ciA6IENoIzExICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTEyX1BUUjIgICAgICAgICAgICAgICAgMHgxMDAwQUMJLy8gRE1BIFRhYiBQdHIgOiBDaCMxMgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIERNQTEyX1BUUjIgICAgICAgICAgICAgICAgMHgxMDAwQUMJLyogRE1BIFRhYiBQdHIgOiBDaCMxMiAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUExM19QVFIyICAgICAgICAgICAgICAgIDB4MTAwMEIwCS8vIERNQSBUYWIgUHRyIDogQ2gjMTMKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUExM19QVFIyICAgICAgICAgICAgICAgIDB4MTAwMEIwCS8qIERNQSBUYWIgUHRyIDogQ2gjMTMgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgRE1BMTRfUFRSMiAgICAgICAgICAgICAgICAweDEwMDBCNAkvLyBETUEgVGFiIFB0ciA6IENoIzE0CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMTRfUFRSMiAgICAgICAgICAgICAgICAweDEwMDBCNAkvKiBETUEgVGFiIFB0ciA6IENoIzE0ICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTE1X1BUUjIgICAgICAgICAgICAgICAgMHgxMDAwQjgJLy8gRE1BIFRhYiBQdHIgOiBDaCMxNQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIERNQTE1X1BUUjIgICAgICAgICAgICAgICAgMHgxMDAwQjgJLyogRE1BIFRhYiBQdHIgOiBDaCMxNSAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUExNl9QVFIyICAgICAgICAgICAgICAgIDB4MTAwMEJDCS8vIERNQSBUYWIgUHRyIDogQ2gjMTYKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUExNl9QVFIyICAgICAgICAgICAgICAgIDB4MTAwMEJDCS8qIERNQSBUYWIgUHRyIDogQ2gjMTYgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgRE1BMTdfUFRSMiAgICAgICAgICAgICAgICAweDEwMDBDMAkvLyBETUEgVGFiIFB0ciA6IENoIzE3CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMTdfUFRSMiAgICAgICAgICAgICAgICAweDEwMDBDMAkvKiBETUEgVGFiIFB0ciA6IENoIzE3ICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTE4X1BUUjIgICAgICAgICAgICAgICAgMHgxMDAwQzQJLy8gRE1BIFRhYiBQdHIgOiBDaCMxOAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIERNQTE4X1BUUjIgICAgICAgICAgICAgICAgMHgxMDAwQzQJLyogRE1BIFRhYiBQdHIgOiBDaCMxOCAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUExOV9QVFIyICAgICAgICAgICAgICAgIDB4MTAwMEM4CS8vIERNQSBUYWIgUHRyIDogQ2gjMTkKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUExOV9QVFIyICAgICAgICAgICAgICAgIDB4MTAwMEM4CS8qIERNQSBUYWIgUHRyIDogQ2gjMTkgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgRE1BMjBfUFRSMiAgICAgICAgICAgICAgICAweDEwMDBDQwkvLyBETUEgVGFiIFB0ciA6IENoIzIwCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMjBfUFRSMiAgICAgICAgICAgICAgICAweDEwMDBDQwkvKiBETUEgVGFiIFB0ciA6IENoIzIwICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTIxX1BUUjIgICAgICAgICAgICAgICAgMHgxMDAwRDAJLy8gRE1BIFRhYiBQdHIgOiBDaCMyMQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIERNQTIxX1BUUjIgICAgICAgICAgICAgICAgMHgxMDAwRDAJLyogRE1BIFRhYiBQdHIgOiBDaCMyMSAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUEyMl9QVFIyICAgICAgICAgICAgICAgIDB4MTAwMEQ0CS8vIERNQSBUYWIgUHRyIDogQ2gjMjIKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUEyMl9QVFIyICAgICAgICAgICAgICAgIDB4MTAwMEQ0CS8qIERNQSBUYWIgUHRyIDogQ2gjMjIgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgRE1BMjNfUFRSMiAgICAgICAgICAgICAgICAweDEwMDBEOAkvLyBETUEgVGFiIFB0ciA6IENoIzIzCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMjNfUFRSMiAgICAgICAgICAgICAgICAweDEwMDBEOAkvKiBETUEgVGFiIFB0ciA6IENoIzIzICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTI0X1BUUjIgICAgICAgICAgICAgICAgMHgxMDAwREMJLy8gRE1BIFRhYiBQdHIgOiBDaCMyNAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIERNQTI0X1BUUjIgICAgICAgICAgICAgICAgMHgxMDAwREMJLyogRE1BIFRhYiBQdHIgOiBDaCMyNCAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUEyNV9QVFIyICAgICAgICAgICAgICAgIDB4MTAwMEUwCS8vIERNQSBUYWIgUHRyIDogQ2gjMjUKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUEyNV9QVFIyICAgICAgICAgICAgICAgIDB4MTAwMEUwCS8qIERNQSBUYWIgUHRyIDogQ2gjMjUgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgRE1BMjZfUFRSMiAgICAgICAgICAgICAgICAweDEwMDBFNAkvLyBETUEgVGFiIFB0ciA6IENoIzI2CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMjZfUFRSMiAgICAgICAgICAgICAgICAweDEwMDBFNAkvKiBETUEgVGFiIFB0ciA6IENoIzI2ICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTFfQ05UMSAgICAgICAgICAgICAgICAgMHgxMDAxMDAJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIERNQTFfQ05UMSAgICAgICAgICAgICAgICAgMHgxMDAxMDAJLyogRE1BIEJ1RkZlciBTaXplIDogQ2gjMSAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUEyX0NOVDEgICAgICAgICAgICAgICAgIDB4MTAwMTA0CS8vIERNQSBCdUZGZXIgU2l6ZSA6IENoIzIKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUEyX0NOVDEgICAgICAgICAgICAgICAgIDB4MTAwMTA0CS8qIERNQSBCdUZGZXIgU2l6ZSA6IENoIzIgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgRE1BM19DTlQxICAgICAgICAgICAgICAgICAweDEwMDEwOAkvLyBETUEgQnVGRmVyIFNpemUgOiBDaCMzCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BM19DTlQxICAgICAgICAgICAgICAgICAweDEwMDEwOAkvKiBETUEgQnVGRmVyIFNpemUgOiBDaCMzICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTRfQ05UMSAgICAgICAgICAgICAgICAgMHgxMDAxMEMJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjNAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIERNQTRfQ05UMSAgICAgICAgICAgICAgICAgMHgxMDAxMEMJLyogRE1BIEJ1RkZlciBTaXplIDogQ2gjNCAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUE1X0NOVDEgICAgICAgICAgICAgICAgIDB4MTAwMTEwCS8vIERNQSBCdUZGZXIgU2l6ZSA6IENoIzUKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUE1X0NOVDEgICAgICAgICAgICAgICAgIDB4MTAwMTEwCS8qIERNQSBCdUZGZXIgU2l6ZSA6IENoIzUgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgRE1BNl9DTlQxICAgICAgICAgICAgICAgICAweDEwMDExNAkvLyBETUEgQnVGRmVyIFNpemUgOiBDaCM2CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BNl9DTlQxICAgICAgICAgICAgICAgICAweDEwMDExNAkvKiBETUEgQnVGRmVyIFNpemUgOiBDaCM2ICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTdfQ05UMSAgICAgICAgICAgICAgICAgMHgxMDAxMTgJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjNworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIERNQTdfQ05UMSAgICAgICAgICAgICAgICAgMHgxMDAxMTgJLyogRE1BIEJ1RkZlciBTaXplIDogQ2gjNyAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUE4X0NOVDEgICAgICAgICAgICAgICAgIDB4MTAwMTFDCS8vIERNQSBCdUZGZXIgU2l6ZSA6IENoIzgKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUE4X0NOVDEgICAgICAgICAgICAgICAgIDB4MTAwMTFDCS8qIERNQSBCdUZGZXIgU2l6ZSA6IENoIzggKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgRE1BOV9DTlQxICAgICAgICAgICAgICAgICAweDEwMDEyMAkvLyBETUEgQnVGRmVyIFNpemUgOiBDaCM5CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BOV9DTlQxICAgICAgICAgICAgICAgICAweDEwMDEyMAkvKiBETUEgQnVGRmVyIFNpemUgOiBDaCM5ICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTEwX0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxMjQJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMTAKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUExMF9DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTI0CS8qIERNQSBCdUZGZXIgU2l6ZSA6IENoIzEwICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTExX0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxMjgJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMTEKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUExMV9DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTI4CS8qIERNQSBCdUZGZXIgU2l6ZSA6IENoIzExICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTEyX0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxMkMJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMTIKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUExMl9DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTJDCS8qIERNQSBCdUZGZXIgU2l6ZSA6IENoIzEyICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTEzX0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxMzAJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMTMKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUExM19DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTMwCS8qIERNQSBCdUZGZXIgU2l6ZSA6IENoIzEzICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTE0X0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxMzQJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMTQKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUExNF9DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTM0CS8qIERNQSBCdUZGZXIgU2l6ZSA6IENoIzE0ICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTE1X0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxMzgJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMTUKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUExNV9DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTM4CS8qIERNQSBCdUZGZXIgU2l6ZSA6IENoIzE1ICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTE2X0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxM0MJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMTYKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUExNl9DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTNDCS8qIERNQSBCdUZGZXIgU2l6ZSA6IENoIzE2ICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTE3X0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxNDAJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMTcKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUExN19DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTQwCS8qIERNQSBCdUZGZXIgU2l6ZSA6IENoIzE3ICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTE4X0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxNDQJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMTgKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUExOF9DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTQ0CS8qIERNQSBCdUZGZXIgU2l6ZSA6IENoIzE4ICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTE5X0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxNDgJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMTkKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUExOV9DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTQ4CS8qIERNQSBCdUZGZXIgU2l6ZSA6IENoIzE5ICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTIwX0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxNEMJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMjAKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUEyMF9DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTRDCS8qIERNQSBCdUZGZXIgU2l6ZSA6IENoIzIwICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTIxX0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxNTAJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMjEKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUEyMV9DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTUwCS8qIERNQSBCdUZGZXIgU2l6ZSA6IENoIzIxICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTIyX0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxNTQJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMjIKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUEyMl9DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTU0CS8qIERNQSBCdUZGZXIgU2l6ZSA6IENoIzIyICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTIzX0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxNTgJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMjMKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUEyM19DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTU4CS8qIERNQSBCdUZGZXIgU2l6ZSA6IENoIzIzICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTI0X0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxNUMJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMjQKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUEyNF9DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTVDCS8qIERNQSBCdUZGZXIgU2l6ZSA6IENoIzI0ICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTI1X0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxNjAJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMjUKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUEyNV9DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTYwCS8qIERNQSBCdUZGZXIgU2l6ZSA6IENoIzI1ICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTI2X0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxNjQJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMjYKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUEyNl9DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTY0CS8qIERNQSBCdUZGZXIgU2l6ZSA6IENoIzI2ICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTFfQ05UMiAgICAgICAgICAgICAgICAgMHgxMDAxODAJLy8gRE1BIFRhYmxlIFNpemUgOiBDaCMxCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMV9DTlQyICAgICAgICAgICAgICAgICAweDEwMDE4MAkvKiBETUEgVGFibGUgU2l6ZSA6IENoIzEgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgRE1BMl9DTlQyICAgICAgICAgICAgICAgICAweDEwMDE4NAkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzIKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUEyX0NOVDIgICAgICAgICAgICAgICAgIDB4MTAwMTg0CS8qIERNQSBUYWJsZSBTaXplIDogQ2gjMiAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUEzX0NOVDIgICAgICAgICAgICAgICAgIDB4MTAwMTg4CS8vIERNQSBUYWJsZSBTaXplIDogQ2gjMworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIERNQTNfQ05UMiAgICAgICAgICAgICAgICAgMHgxMDAxODgJLyogRE1BIFRhYmxlIFNpemUgOiBDaCMzICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTRfQ05UMiAgICAgICAgICAgICAgICAgMHgxMDAxOEMJLy8gRE1BIFRhYmxlIFNpemUgOiBDaCM0CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BNF9DTlQyICAgICAgICAgICAgICAgICAweDEwMDE4QwkvKiBETUEgVGFibGUgU2l6ZSA6IENoIzQgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgRE1BNV9DTlQyICAgICAgICAgICAgICAgICAweDEwMDE5MAkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzUKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUE1X0NOVDIgICAgICAgICAgICAgICAgIDB4MTAwMTkwCS8qIERNQSBUYWJsZSBTaXplIDogQ2gjNSAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUE2X0NOVDIgICAgICAgICAgICAgICAgIDB4MTAwMTk0CS8vIERNQSBUYWJsZSBTaXplIDogQ2gjNgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIERNQTZfQ05UMiAgICAgICAgICAgICAgICAgMHgxMDAxOTQJLyogRE1BIFRhYmxlIFNpemUgOiBDaCM2ICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTdfQ05UMiAgICAgICAgICAgICAgICAgMHgxMDAxOTgJLy8gRE1BIFRhYmxlIFNpemUgOiBDaCM3CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BN19DTlQyICAgICAgICAgICAgICAgICAweDEwMDE5OAkvKiBETUEgVGFibGUgU2l6ZSA6IENoIzcgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgRE1BOF9DTlQyICAgICAgICAgICAgICAgICAweDEwMDE5QwkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzgKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUE4X0NOVDIgICAgICAgICAgICAgICAgIDB4MTAwMTlDCS8qIERNQSBUYWJsZSBTaXplIDogQ2gjOCAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUE5X0NOVDIgICAgICAgICAgICAgICAgIDB4MTAwMUEwCS8vIERNQSBUYWJsZSBTaXplIDogQ2gjOQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIERNQTlfQ05UMiAgICAgICAgICAgICAgICAgMHgxMDAxQTAJLyogRE1BIFRhYmxlIFNpemUgOiBDaCM5ICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTEwX0NOVDIgICAgICAgICAgICAgICAgMHgxMDAxQTQJLy8gRE1BIFRhYmxlIFNpemUgOiBDaCMxMAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIERNQTEwX0NOVDIgICAgICAgICAgICAgICAgMHgxMDAxQTQJLyogRE1BIFRhYmxlIFNpemUgOiBDaCMxMCAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUExMV9DTlQyICAgICAgICAgICAgICAgIDB4MTAwMUE4CS8vIERNQSBUYWJsZSBTaXplIDogQ2gjMTEKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUExMV9DTlQyICAgICAgICAgICAgICAgIDB4MTAwMUE4CS8qIERNQSBUYWJsZSBTaXplIDogQ2gjMTEgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgRE1BMTJfQ05UMiAgICAgICAgICAgICAgICAweDEwMDFBQwkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzEyCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMTJfQ05UMiAgICAgICAgICAgICAgICAweDEwMDFBQwkvKiBETUEgVGFibGUgU2l6ZSA6IENoIzEyICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTEzX0NOVDIgICAgICAgICAgICAgICAgMHgxMDAxQjAJLy8gRE1BIFRhYmxlIFNpemUgOiBDaCMxMworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIERNQTEzX0NOVDIgICAgICAgICAgICAgICAgMHgxMDAxQjAJLyogRE1BIFRhYmxlIFNpemUgOiBDaCMxMyAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUExNF9DTlQyICAgICAgICAgICAgICAgIDB4MTAwMUI0CS8vIERNQSBUYWJsZSBTaXplIDogQ2gjMTQKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUExNF9DTlQyICAgICAgICAgICAgICAgIDB4MTAwMUI0CS8qIERNQSBUYWJsZSBTaXplIDogQ2gjMTQgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgRE1BMTVfQ05UMiAgICAgICAgICAgICAgICAweDEwMDFCOAkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzE1CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMTVfQ05UMiAgICAgICAgICAgICAgICAweDEwMDFCOAkvKiBETUEgVGFibGUgU2l6ZSA6IENoIzE1ICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTE2X0NOVDIgICAgICAgICAgICAgICAgMHgxMDAxQkMJLy8gRE1BIFRhYmxlIFNpemUgOiBDaCMxNgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIERNQTE2X0NOVDIgICAgICAgICAgICAgICAgMHgxMDAxQkMJLyogRE1BIFRhYmxlIFNpemUgOiBDaCMxNiAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUExN19DTlQyICAgICAgICAgICAgICAgIDB4MTAwMUMwCS8vIERNQSBUYWJsZSBTaXplIDogQ2gjMTcKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUExN19DTlQyICAgICAgICAgICAgICAgIDB4MTAwMUMwCS8qIERNQSBUYWJsZSBTaXplIDogQ2gjMTcgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgRE1BMThfQ05UMiAgICAgICAgICAgICAgICAweDEwMDFDNAkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzE4CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMThfQ05UMiAgICAgICAgICAgICAgICAweDEwMDFDNAkvKiBETUEgVGFibGUgU2l6ZSA6IENoIzE4ICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTE5X0NOVDIgICAgICAgICAgICAgICAgMHgxMDAxQzgJLy8gRE1BIFRhYmxlIFNpemUgOiBDaCMxOQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIERNQTE5X0NOVDIgICAgICAgICAgICAgICAgMHgxMDAxQzgJLyogRE1BIFRhYmxlIFNpemUgOiBDaCMxOSAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUEyMF9DTlQyICAgICAgICAgICAgICAgIDB4MTAwMUNDCS8vIERNQSBUYWJsZSBTaXplIDogQ2gjMjAKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUEyMF9DTlQyICAgICAgICAgICAgICAgIDB4MTAwMUNDCS8qIERNQSBUYWJsZSBTaXplIDogQ2gjMjAgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgRE1BMjFfQ05UMiAgICAgICAgICAgICAgICAweDEwMDFEMAkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzIxCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMjFfQ05UMiAgICAgICAgICAgICAgICAweDEwMDFEMAkvKiBETUEgVGFibGUgU2l6ZSA6IENoIzIxICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTIyX0NOVDIgICAgICAgICAgICAgICAgMHgxMDAxRDQJLy8gRE1BIFRhYmxlIFNpemUgOiBDaCMyMgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIERNQTIyX0NOVDIgICAgICAgICAgICAgICAgMHgxMDAxRDQJLyogRE1BIFRhYmxlIFNpemUgOiBDaCMyMiAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUEyM19DTlQyICAgICAgICAgICAgICAgIDB4MTAwMUQ4CS8vIERNQSBUYWJsZSBTaXplIDogQ2gjMjMKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUEyM19DTlQyICAgICAgICAgICAgICAgIDB4MTAwMUQ4CS8qIERNQSBUYWJsZSBTaXplIDogQ2gjMjMgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgRE1BMjRfQ05UMiAgICAgICAgICAgICAgICAweDEwMDFEQwkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzI0CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgRE1BMjRfQ05UMiAgICAgICAgICAgICAgICAweDEwMDFEQwkvKiBETUEgVGFibGUgU2l6ZSA6IENoIzI0ICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIERNQTI1X0NOVDIgICAgICAgICAgICAgICAgMHgxMDAxRTAJLy8gRE1BIFRhYmxlIFNpemUgOiBDaCMyNQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIERNQTI1X0NOVDIgICAgICAgICAgICAgICAgMHgxMDAxRTAJLyogRE1BIFRhYmxlIFNpemUgOiBDaCMyNSAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBETUEyNl9DTlQyICAgICAgICAgICAgICAgIDB4MTAwMUU0CS8vIERNQSBUYWJsZSBTaXplIDogQ2gjMjYKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBETUEyNl9DTlQyICAgICAgICAgICAgICAgIDB4MTAwMUU0CS8qIERNQSBUYWJsZSBTaXplIDogQ2gjMjYgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIC8vIElURwotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgVE1fQ05UX0xEVyAgICAgICAgICAgICAgICAweDExMDAwMAkvLyBUaW1lciA6IENvdW50ZXIgbG93CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworIC8qIElURyAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIFRNX0NOVF9MRFcgICAgICAgICAgICAgICAgMHgxMTAwMDAJLyogVGltZXIgOiBDb3VudGVyIGxvdyAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBUTV9DTlRfVVcgICAgICAgICAgICAgICAgIDB4MTEwMDA0CS8vIFRpbWVyIDogQ291bnRlciBoaWdoIHdvcmQKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBUTV9DTlRfVVcgICAgICAgICAgICAgICAgIDB4MTEwMDA0CS8qIFRpbWVyIDogQ291bnRlciBoaWdoIHdvcmQgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgVE1fTE1UX0xEVyAgICAgICAgICAgICAgICAweDExMDAwOAkvLyBUaW1lciA6IExpbWl0IGxvdworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIFRNX0xNVF9MRFcgICAgICAgICAgICAgICAgMHgxMTAwMDgJLyogVGltZXIgOiBMaW1pdCBsb3cgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgVE1fTE1UX1VXICAgICAgICAgICAgICAgICAweDExMDAwQwkvLyBUaW1lciA6IExpbWl0IGhpZ2ggd29yZAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIFRNX0xNVF9VVyAgICAgICAgICAgICAgICAgMHgxMTAwMEMJLyogVGltZXIgOiBMaW1pdCBoaWdoIHdvcmQgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgR1AwX0lPICAgICAgICAgICAgICAgICAgICAweDExMDAxMAkvLyBHUElPIG91dHB1dCBlbmFibGVzIGRhdGEgSS9PCi0jZGVmaW5lICBGTERfR1BfT0UgICAgICAgICAgICAgICAgIDB4MDBGRjAwMDAJLy8gR1BJTzogR1BfT0Ugb3V0cHV0IGVuYWJsZQotI2RlZmluZSAgRkxEX0dQX0lOICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCS8vIEdQSU86IEdQX0lOIHN0YXR1cwotI2RlZmluZSAgRkxEX0dQX09VVCAgICAgICAgICAgICAgICAweDAwMDAwMEZGCS8vIEdQSU86IEdQX09VVCBjb250cm9sCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgR1AwX0lPICAgICAgICAgICAgICAgICAgICAweDExMDAxMAkvKiBHUElPIG91dHB1dCBlbmFibGVzIGRhdGEgSS9PICovCisjZGVmaW5lICBGTERfR1BfT0UgICAgICAgICAgICAgICAgIDB4MDBGRjAwMDAJLyogR1BJTzogR1BfT0Ugb3V0cHV0IGVuYWJsZSAqLworI2RlZmluZSAgRkxEX0dQX0lOICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCS8qIEdQSU86IEdQX0lOIHN0YXR1cyAqLworI2RlZmluZSAgRkxEX0dQX09VVCAgICAgICAgICAgICAgICAweDAwMDAwMEZGCS8qIEdQSU86IEdQX09VVCBjb250cm9sICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIEdQSU9fSVNNICAgICAgICAgICAgICAgICAgMHgxMTAwMTQJLy8gR1BJTyBpbnRlcnJ1cHQgc2Vuc2l0aXZpdHkgbW9kZQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIEdQSU9fSVNNICAgICAgICAgICAgICAgICAgMHgxMTAwMTQJLyogR1BJTyBpbnRlcnJ1cHQgc2Vuc2l0aXZpdHkgbW9kZSAqLwogI2RlZmluZSAgRkxEX0dQX0lTTV9TTlMgICAgICAgICAgICAweDAwMDAwMDcwCiAjZGVmaW5lICBGTERfR1BfSVNNX1BPTCAgICAgICAgICAgIDB4MDAwMDAwMDcKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgU09GVF9SRVNFVCAgICAgICAgICAgICAgICAweDExMDAxQwkvLyBPdXRwdXQgc3lzdGVtIHJlc2V0IHJlZworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIFNPRlRfUkVTRVQgICAgICAgICAgICAgICAgMHgxMTAwMUMJLyogT3V0cHV0IHN5c3RlbSByZXNldCByZWcgKi8KICNkZWZpbmUgIEZMRF9QRUNPU19TT0ZUX1JFU0VUICAgICAgMHgwMDAwMDAwMQogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBNQzQxNl9SV0QgICAgICAgICAgICAgICAgIDB4MTEwMDIwCS8vIE1DNDE2IEdQSU9bMTg6M10gcGluCi0jZGVmaW5lICBNQzQxNl9PRU4gICAgICAgICAgICAgICAgIDB4MTEwMDI0CS8vIE91dHB1dCBlbmFibGUgb2YgR1BJT1sxODozXQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIE1DNDE2X1JXRCAgICAgICAgICAgICAgICAgMHgxMTAwMjAJLyogTUM0MTYgR1BJT1sxODozXSBwaW4gKi8KKyNkZWZpbmUgIE1DNDE2X09FTiAgICAgICAgICAgICAgICAgMHgxMTAwMjQJLyogT3V0cHV0IGVuYWJsZSBvZiBHUElPWzE4OjNdICovCiAjZGVmaW5lICBNQzQxNl9DVEwgICAgICAgICAgICAgICAgIDB4MTEwMDI4CiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIEFMVF9QSU5fT1VUX1NFTCAgICAgICAgICAgMHgxMTAwMkMJLy8gQWx0ZXJuYXRlIEdQSU8gb3V0cHV0IHNlbGVjdAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIEFMVF9QSU5fT1VUX1NFTCAgICAgICAgICAgMHgxMTAwMkMJLyogQWx0ZXJuYXRlIEdQSU8gb3V0cHV0IHNlbGVjdCAqLwogCiAjZGVmaW5lICBGTERfQUxUX0dQSU9fT1VUX1NFTCAgICAgIDB4RjAwMDAwMDAKLS8vIDAgICAgICAgICAgRGlzYWJsZWQgPC0tIGRlZmF1bHQKLS8vIDEgICAgICAgICAgR1BJT1swXQotLy8gMiAgICAgICAgICBHUElPWzEwXQotLy8gMyAgICAgICAgICBWSVBfNjU2X0RBVEFfVkFMCi0vLyA0ICAgICAgICAgIFZJUF82NTZfREFUQVswXQotLy8gNSAgICAgICAgICBWSVBfNjU2X0NMSwotLy8gNiAgICAgICAgICBWSVBfNjU2X0RBVEFfRVhUWzFdCi0vLyA3ICAgICAgICAgIFZJUF82NTZfREFUQV9FWFRbMF0KLS8vIDggICAgICAgICAgQVRUX0lGCisvKiAwICAgICAgICAgIERpc2FibGVkIDwtLSBkZWZhdWx0ICovCisvKiAxICAgICAgICAgIEdQSU9bMF0gKi8KKy8qIDIgICAgICAgICAgR1BJT1sxMF0gKi8KKy8qIDMgICAgICAgICAgVklQXzY1Nl9EQVRBX1ZBTCAqLworLyogNCAgICAgICAgICBWSVBfNjU2X0RBVEFbMF0gKi8KKy8qIDUgICAgICAgICAgVklQXzY1Nl9DTEsgKi8KKy8qIDYgICAgICAgICAgVklQXzY1Nl9EQVRBX0VYVFsxXSAqLworLyogNyAgICAgICAgICBWSVBfNjU2X0RBVEFfRVhUWzBdICovCisvKiA4ICAgICAgICAgIEFUVF9JRiAqLwogCiAjZGVmaW5lICBGTERfQVVYX1BMTF9DTEtfQUxUX1NFTCAgIDB4MEYwMDAwMDAKLS8vIDAgICAgICAgICAgQVVYX1BMTF9DTEs8LS0gZGVmYXVsdAotLy8gMSAgICAgICAgICBHUElPWzJdCi0vLyAyICAgICAgICAgIEdQSU9bMTBdCi0vLyAzICAgICAgICAgIFZJUF82NTZfREFUQV9WQUwKLS8vIDQgICAgICAgICAgVklQXzY1Nl9EQVRBWzBdCi0vLyA1ICAgICAgICAgIFZJUF82NTZfQ0xLCi0vLyA2ICAgICAgICAgIFZJUF82NTZfREFUQV9FWFRbMV0KLS8vIDcgICAgICAgICAgVklQXzY1Nl9EQVRBX0VYVFswXQorLyogMCAgICAgICAgICBBVVhfUExMX0NMSzwtLSBkZWZhdWx0ICovCisvKiAxICAgICAgICAgIEdQSU9bMl0gKi8KKy8qIDIgICAgICAgICAgR1BJT1sxMF0gKi8KKy8qIDMgICAgICAgICAgVklQXzY1Nl9EQVRBX1ZBTCAqLworLyogNCAgICAgICAgICBWSVBfNjU2X0RBVEFbMF0gKi8KKy8qIDUgICAgICAgICAgVklQXzY1Nl9DTEsgKi8KKy8qIDYgICAgICAgICAgVklQXzY1Nl9EQVRBX0VYVFsxXSAqLworLyogNyAgICAgICAgICBWSVBfNjU2X0RBVEFfRVhUWzBdICovCiAKICNkZWZpbmUgIEZMRF9JUl9UWF9BTFRfU0VMICAgICAgICAgMHgwMEYwMDAwMAotLy8gMCAgICAgICAgICBJUl9UWCA8LS0gZGVmYXVsdAotLy8gMSAgICAgICAgICBHUElPWzFdCi0vLyAyICAgICAgICAgIEdQSU9bMTBdCi0vLyAzICAgICAgICAgIFZJUF82NTZfREFUQV9WQUwKLS8vIDQgICAgICAgICAgVklQXzY1Nl9EQVRBWzBdCi0vLyA1ICAgICAgICAgIFZJUF82NTZfQ0xLCi0vLyA2ICAgICAgICAgIFZJUF82NTZfREFUQV9FWFRbMV0KLS8vIDcgICAgICAgICAgVklQXzY1Nl9EQVRBX0VYVFswXQorLyogMCAgICAgICAgICBJUl9UWCA8LS0gZGVmYXVsdCAqLworLyogMSAgICAgICAgICBHUElPWzFdICovCisvKiAyICAgICAgICAgIEdQSU9bMTBdICovCisvKiAzICAgICAgICAgIFZJUF82NTZfREFUQV9WQUwgKi8KKy8qIDQgICAgICAgICAgVklQXzY1Nl9EQVRBWzBdICovCisvKiA1ICAgICAgICAgIFZJUF82NTZfQ0xLICovCisvKiA2ICAgICAgICAgIFZJUF82NTZfREFUQV9FWFRbMV0gKi8KKy8qIDcgICAgICAgICAgVklQXzY1Nl9EQVRBX0VYVFswXSAqLwogCiAjZGVmaW5lICBGTERfSVJfUlhfQUxUX1NFTCAgICAgICAgIDB4MDAwRjAwMDAKLS8vIDAgICAgICAgICAgSVJfUlggPC0tIGRlZmF1bHQKLS8vIDEgICAgICAgICAgR1BJT1swXQotLy8gMiAgICAgICAgICBHUElPWzEwXQotLy8gMyAgICAgICAgICBWSVBfNjU2X0RBVEFfVkFMCi0vLyA0ICAgICAgICAgIFZJUF82NTZfREFUQVswXQotLy8gNSAgICAgICAgICBWSVBfNjU2X0NMSwotLy8gNiAgICAgICAgICBWSVBfNjU2X0RBVEFfRVhUWzFdCi0vLyA3ICAgICAgICAgIFZJUF82NTZfREFUQV9FWFRbMF0KKy8qIDAgICAgICAgICAgSVJfUlggPC0tIGRlZmF1bHQgKi8KKy8qIDEgICAgICAgICAgR1BJT1swXSAqLworLyogMiAgICAgICAgICBHUElPWzEwXSAqLworLyogMyAgICAgICAgICBWSVBfNjU2X0RBVEFfVkFMICovCisvKiA0ICAgICAgICAgIFZJUF82NTZfREFUQVswXSAqLworLyogNSAgICAgICAgICBWSVBfNjU2X0NMSyAqLworLyogNiAgICAgICAgICBWSVBfNjU2X0RBVEFfRVhUWzFdICovCisvKiA3ICAgICAgICAgIFZJUF82NTZfREFUQV9FWFRbMF0gKi8KIAogI2RlZmluZSAgRkxEX0dQSU8xMF9BTFRfU0VMICAgICAgICAweDAwMDBGMDAwCi0vLyAwICAgICAgICAgIEdQSU9bMTBdIDwtLSBkZWZhdWx0Ci0vLyAxICAgICAgICAgIEdQSU9bMF0KLS8vIDIgICAgICAgICAgR1BJT1sxMF0KLS8vIDMgICAgICAgICAgVklQXzY1Nl9EQVRBX1ZBTAotLy8gNCAgICAgICAgICBWSVBfNjU2X0RBVEFbMF0KLS8vIDUgICAgICAgICAgVklQXzY1Nl9DTEsKLS8vIDYgICAgICAgICAgVklQXzY1Nl9EQVRBX0VYVFsxXQotLy8gNyAgICAgICAgICBWSVBfNjU2X0RBVEFfRVhUWzBdCisvKiAwICAgICAgICAgIEdQSU9bMTBdIDwtLSBkZWZhdWx0ICovCisvKiAxICAgICAgICAgIEdQSU9bMF0gKi8KKy8qIDIgICAgICAgICAgR1BJT1sxMF0gKi8KKy8qIDMgICAgICAgICAgVklQXzY1Nl9EQVRBX1ZBTCAqLworLyogNCAgICAgICAgICBWSVBfNjU2X0RBVEFbMF0gKi8KKy8qIDUgICAgICAgICAgVklQXzY1Nl9DTEsgKi8KKy8qIDYgICAgICAgICAgVklQXzY1Nl9EQVRBX0VYVFsxXSAqLworLyogNyAgICAgICAgICBWSVBfNjU2X0RBVEFfRVhUWzBdICovCiAKICNkZWZpbmUgIEZMRF9HUElPMl9BTFRfU0VMICAgICAgICAgMHgwMDAwMEYwMAotLy8gMCAgICAgICAgICBHUElPWzJdIDwtLSBkZWZhdWx0Ci0vLyAxICAgICAgICAgIEdQSU9bMV0KLS8vIDIgICAgICAgICAgR1BJT1sxMF0KLS8vIDMgICAgICAgICAgVklQXzY1Nl9EQVRBX1ZBTAotLy8gNCAgICAgICAgICBWSVBfNjU2X0RBVEFbMF0KLS8vIDUgICAgICAgICAgVklQXzY1Nl9DTEsKLS8vIDYgICAgICAgICAgVklQXzY1Nl9EQVRBX0VYVFsxXQotLy8gNyAgICAgICAgICBWSVBfNjU2X0RBVEFfRVhUWzBdCisvKiAwICAgICAgICAgIEdQSU9bMl0gPC0tIGRlZmF1bHQgKi8KKy8qIDEgICAgICAgICAgR1BJT1sxXSAqLworLyogMiAgICAgICAgICBHUElPWzEwXSAqLworLyogMyAgICAgICAgICBWSVBfNjU2X0RBVEFfVkFMICovCisvKiA0ICAgICAgICAgIFZJUF82NTZfREFUQVswXSAqLworLyogNSAgICAgICAgICBWSVBfNjU2X0NMSyAqLworLyogNiAgICAgICAgICBWSVBfNjU2X0RBVEFfRVhUWzFdICovCisvKiA3ICAgICAgICAgIFZJUF82NTZfREFUQV9FWFRbMF0gKi8KIAogI2RlZmluZSAgRkxEX0dQSU8xX0FMVF9TRUwgICAgICAgICAweDAwMDAwMEYwCi0vLyAwICAgICAgICAgIEdQSU9bMV0gPC0tIGRlZmF1bHQKLS8vIDEgICAgICAgICAgR1BJT1swXQotLy8gMiAgICAgICAgICBHUElPWzEwXQotLy8gMyAgICAgICAgICBWSVBfNjU2X0RBVEFfVkFMCi0vLyA0ICAgICAgICAgIFZJUF82NTZfREFUQVswXQotLy8gNSAgICAgICAgICBWSVBfNjU2X0NMSwotLy8gNiAgICAgICAgICBWSVBfNjU2X0RBVEFfRVhUWzFdCi0vLyA3ICAgICAgICAgIFZJUF82NTZfREFUQV9FWFRbMF0KKy8qIDAgICAgICAgICAgR1BJT1sxXSA8LS0gZGVmYXVsdCAqLworLyogMSAgICAgICAgICBHUElPWzBdICovCisvKiAyICAgICAgICAgIEdQSU9bMTBdICovCisvKiAzICAgICAgICAgIFZJUF82NTZfREFUQV9WQUwgKi8KKy8qIDQgICAgICAgICAgVklQXzY1Nl9EQVRBWzBdICovCisvKiA1ICAgICAgICAgIFZJUF82NTZfQ0xLICovCisvKiA2ICAgICAgICAgIFZJUF82NTZfREFUQV9FWFRbMV0gKi8KKy8qIDcgICAgICAgICAgVklQXzY1Nl9EQVRBX0VYVFswXSAqLwogCiAjZGVmaW5lICBGTERfR1BJTzBfQUxUX1NFTCAgICAgICAgIDB4MDAwMDAwMEYKLS8vIDAgICAgICAgICAgR1BJT1swXSA8LS0gZGVmYXVsdAotLy8gMSAgICAgICAgICBHUElPWzFdCi0vLyAyICAgICAgICAgIEdQSU9bMTBdCi0vLyAzICAgICAgICAgIFZJUF82NTZfREFUQV9WQUwKLS8vIDQgICAgICAgICAgVklQXzY1Nl9EQVRBWzBdCi0vLyA1ICAgICAgICAgIFZJUF82NTZfQ0xLCi0vLyA2ICAgICAgICAgIFZJUF82NTZfREFUQV9FWFRbMV0KLS8vIDcgICAgICAgICAgVklQXzY1Nl9EQVRBX0VYVFswXQorLyogMCAgICAgICAgICBHUElPWzBdIDwtLSBkZWZhdWx0ICovCisvKiAxICAgICAgICAgIEdQSU9bMV0gKi8KKy8qIDIgICAgICAgICAgR1BJT1sxMF0gKi8KKy8qIDMgICAgICAgICAgVklQXzY1Nl9EQVRBX1ZBTCAqLworLyogNCAgICAgICAgICBWSVBfNjU2X0RBVEFbMF0gKi8KKy8qIDUgICAgICAgICAgVklQXzY1Nl9DTEsgKi8KKy8qIDYgICAgICAgICAgVklQXzY1Nl9EQVRBX0VYVFsxXSAqLworLyogNyAgICAgICAgICBWSVBfNjU2X0RBVEFfRVhUWzBdICovCiAKLSNkZWZpbmUgIEFMVF9QSU5fSU5fU0VMICAgICAgICAgICAgMHgxMTAwMzAJLy8gQWx0ZXJuYXRlIEdQSU8gaW5wdXQgc2VsZWN0CisjZGVmaW5lICBBTFRfUElOX0lOX1NFTCAgICAgICAgICAgIDB4MTEwMDMwCS8qIEFsdGVybmF0ZSBHUElPIGlucHV0IHNlbGVjdCAqLwogCiAjZGVmaW5lICBGTERfR1BJTzEwX0FMVF9JTl9TRUwgICAgIDB4MDAwMEYwMDAKLS8vIDAgICAgICAgICAgR1BJT1sxMF0gPC0tIGRlZmF1bHQKLS8vIDEgICAgICAgICAgSVJfUlgKLS8vIDIgICAgICAgICAgSVJfVFgKLS8vIDMgICAgICAgICAgQVVYX1BMTF9DTEsKLS8vIDQgICAgICAgICAgSUZfQVRUX1NFTAotLy8gNSAgICAgICAgICBHUElPWzBdCi0vLyA2ICAgICAgICAgIEdQSU9bMV0KLS8vIDcgICAgICAgICAgR1BJT1syXQorLyogMCAgICAgICAgICBHUElPWzEwXSA8LS0gZGVmYXVsdCAqLworLyogMSAgICAgICAgICBJUl9SWCAqLworLyogMiAgICAgICAgICBJUl9UWCAqLworLyogMyAgICAgICAgICBBVVhfUExMX0NMSyAqLworLyogNCAgICAgICAgICBJRl9BVFRfU0VMICovCisvKiA1ICAgICAgICAgIEdQSU9bMF0gKi8KKy8qIDYgICAgICAgICAgR1BJT1sxXSAqLworLyogNyAgICAgICAgICBHUElPWzJdICovCiAKICNkZWZpbmUgIEZMRF9HUElPMl9BTFRfSU5fU0VMICAgICAgMHgwMDAwMEYwMAotLy8gMCAgICAgICAgICBHUElPWzJdIDwtLSBkZWZhdWx0Ci0vLyAxICAgICAgICAgIElSX1JYCi0vLyAyICAgICAgICAgIElSX1RYCi0vLyAzICAgICAgICAgIEFVWF9QTExfQ0xLCi0vLyA0ICAgICAgICAgIElGX0FUVF9TRUwKKy8qIDAgICAgICAgICAgR1BJT1syXSA8LS0gZGVmYXVsdCAqLworLyogMSAgICAgICAgICBJUl9SWCAqLworLyogMiAgICAgICAgICBJUl9UWCAqLworLyogMyAgICAgICAgICBBVVhfUExMX0NMSyAqLworLyogNCAgICAgICAgICBJRl9BVFRfU0VMICovCiAKICNkZWZpbmUgIEZMRF9HUElPMV9BTFRfSU5fU0VMICAgICAgMHgwMDAwMDBGMAotLy8gMCAgICAgICAgICBHUElPWzFdIDwtLSBkZWZhdWx0Ci0vLyAxICAgICAgICAgIElSX1JYCi0vLyAyICAgICAgICAgIElSX1RYCi0vLyAzICAgICAgICAgIEFVWF9QTExfQ0xLCi0vLyA0ICAgICAgICAgIElGX0FUVF9TRUwKKy8qIDAgICAgICAgICAgR1BJT1sxXSA8LS0gZGVmYXVsdCAqLworLyogMSAgICAgICAgICBJUl9SWCAqLworLyogMiAgICAgICAgICBJUl9UWCAqLworLyogMyAgICAgICAgICBBVVhfUExMX0NMSyAqLworLyogNCAgICAgICAgICBJRl9BVFRfU0VMICovCiAKICNkZWZpbmUgIEZMRF9HUElPMF9BTFRfSU5fU0VMICAgICAgMHgwMDAwMDAwRgotLy8gMCAgICAgICAgICBHUElPWzBdIDwtLSBkZWZhdWx0Ci0vLyAxICAgICAgICAgIElSX1JYCi0vLyAyICAgICAgICAgIElSX1RYCi0vLyAzICAgICAgICAgIEFVWF9QTExfQ0xLCi0vLyA0ICAgICAgICAgIElGX0FUVF9TRUwKKy8qIDAgICAgICAgICAgR1BJT1swXSA8LS0gZGVmYXVsdCAqLworLyogMSAgICAgICAgICBJUl9SWCAqLworLyogMiAgICAgICAgICBJUl9UWCAqLworLyogMyAgICAgICAgICBBVVhfUExMX0NMSyAqLworLyogNCAgICAgICAgICBJRl9BVFRfU0VMICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIFRFU1RfQlVTX0NUTDEgICAgICAgICAgICAgMHgxMTAwNDAJLy8gVGVzdCBidXMgY29udHJvbCByZWdpc3RlciAjMQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIFRFU1RfQlVTX0NUTDEgICAgICAgICAgICAgMHgxMTAwNDAJLyogVGVzdCBidXMgY29udHJvbCByZWdpc3RlciAjMSAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBURVNUX0JVU19DVEwyICAgICAgICAgICAgIDB4MTEwMDQ0CS8vIFRlc3QgYnVzIGNvbnRyb2wgcmVnaXN0ZXIgIzIKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBURVNUX0JVU19DVEwyICAgICAgICAgICAgIDB4MTEwMDQ0CS8qIFRlc3QgYnVzIGNvbnRyb2wgcmVnaXN0ZXIgIzIgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgQ0xLX0RFTEFZICAgICAgICAgICAgICAgICAweDExMDA0OAkvLyBDbG9jayBkZWxheQotI2RlZmluZSAgRkxEX01PRV9DTEtfRElTICAgICAgICAgICAweDgwMDAwMDAwCS8vIERpc2FibGUgTW9FIGNsb2NrCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgQ0xLX0RFTEFZICAgICAgICAgICAgICAgICAweDExMDA0OAkvKiBDbG9jayBkZWxheSAqLworI2RlZmluZSAgRkxEX01PRV9DTEtfRElTICAgICAgICAgICAweDgwMDAwMDAwCS8qIERpc2FibGUgTW9FIGNsb2NrICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIFBBRF9DVFJMICAgICAgICAgICAgICAgICAgMHgxMTAwNjgJLy8gUGFkIGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBQQURfQ1RSTCAgICAgICAgICAgICAgICAgIDB4MTEwMDY4CS8qIFBhZCBkcml2ZSBzdHJlbmd0aCBjb250cm9sICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIE1CSVNUX0NUUkwgICAgICAgICAgICAgICAgMHgxMTAwNTAJLy8gU1JBTSBtZW1vcnkgYnVpbHQtaW4gc2VsZiB0ZXN0IGNvbnRyb2wKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBNQklTVF9DVFJMICAgICAgICAgICAgICAgIDB4MTEwMDUwCS8qIFNSQU0gbWVtb3J5IGJ1aWx0LWluIHNlbGYgdGVzdCBjb250cm9sICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIE1CSVNUX1NUQVQgICAgICAgICAgICAgICAgMHgxMTAwNTQJLy8gU1JBTSBtZW1vcnkgYnVpbHQtaW4gc2VsZiB0ZXN0IHN0YXR1cworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIE1CSVNUX1NUQVQgICAgICAgICAgICAgICAgMHgxMTAwNTQJLyogU1JBTSBtZW1vcnkgYnVpbHQtaW4gc2VsZiB0ZXN0IHN0YXR1cyAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0vLyBQTEwgcmVnaXN0ZXJzCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogUExMIHJlZ2lzdGVycyAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICNkZWZpbmUgIFBMTF9BX0lOVF9GUkFDICAgICAgICAgICAgMHgxMTAwODgKICNkZWZpbmUgIFBMTF9BX1BPU1RfU1RBVF9CSVNUICAgICAgMHgxMTAwOEMKICNkZWZpbmUgIFBMTF9CX0lOVF9GUkFDICAgICAgICAgICAgMHgxMTAwOTAKQEAgLTEwOTAsMjYwICsxMDkwLDI2MCBAQAogI2RlZmluZSAgVklEX0NIX01PREVfU0VMICAgICAgICAgICAweDExMDA3OAogI2RlZmluZSAgVklEX0NIX0NMS19TRUwgICAgICAgICAgICAweDExMDA3QwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBWQklfQV9ETUEgICAgICAgICAgICAgICAgIDB4MTMwMDA4CS8vIFZCSSBBIERNQSBkYXRhIHBvcnQKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBWQklfQV9ETUEgICAgICAgICAgICAgICAgIDB4MTMwMDA4CS8qIFZCSSBBIERNQSBkYXRhIHBvcnQgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgVklEX0FfVklQX0NUTCAgICAgICAgICAgICAweDEzMDA4MAkvLyBWaWRlbyBBIFZJUCBmb3JtYXQgY29udHJvbAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIFZJRF9BX1ZJUF9DVEwgICAgICAgICAgICAgMHgxMzAwODAJLyogVmlkZW8gQSBWSVAgZm9ybWF0IGNvbnRyb2wgKi8KICNkZWZpbmUgIEZMRF9WSVBfTU9ERSAgICAgICAgICAgICAgMHgwMDAwMDAwMQogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBWSURfQV9QSVhFTF9GUk1UICAgICAgICAgIDB4MTMwMDg0CS8vIFZpZGVvIEEgcGl4ZWwgZm9ybWF0CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgVklEX0FfUElYRUxfRlJNVCAgICAgICAgICAweDEzMDA4NAkvKiBWaWRlbyBBIHBpeGVsIGZvcm1hdCAqLwogI2RlZmluZSAgRkxEX1ZJRF9BX0dBTU1BX0RJUyAgICAgICAweDAwMDAwMDA4CiAjZGVmaW5lICBGTERfVklEX0FfRk9STUFUICAgICAgICAgIDB4MDAwMDAwMDcKICNkZWZpbmUgIEZMRF9WSURfQV9HQU1NQV9GQUNUT1IgICAgMHgwMDAwMDAxMAogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBWSURfQV9WQklfQ1RMICAgICAgICAgICAgIDB4MTMwMDg4CS8vIFZpZGVvIEEgVkJJIG1pc2NlbGxhbmVvdXMgY29udHJvbAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIFZJRF9BX1ZCSV9DVEwgICAgICAgICAgICAgMHgxMzAwODgJLyogVmlkZW8gQSBWQkkgbWlzY2VsbGFuZW91cyBjb250cm9sICovCiAjZGVmaW5lICBGTERfVklEX0FfVklQX0VYVCAgICAgICAgIDB4MDAwMDAwMDMKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgVklEX0JfRE1BICAgICAgICAgICAgICAgICAweDEzMDEwMAkvLyBWaWRlbyBCIERNQSBkYXRhIHBvcnQKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBWSURfQl9ETUEgICAgICAgICAgICAgICAgIDB4MTMwMTAwCS8qIFZpZGVvIEIgRE1BIGRhdGEgcG9ydCAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBWQklfQl9ETUEgICAgICAgICAgICAgICAgIDB4MTMwMTA4CS8vIFZCSSBCIERNQSBkYXRhIHBvcnQKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBWQklfQl9ETUEgICAgICAgICAgICAgICAgIDB4MTMwMTA4CS8qIFZCSSBCIERNQSBkYXRhIHBvcnQgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgVklEX0JfU1JDX1NFTCAgICAgICAgICAgICAweDEzMDE0NAkvLyBWaWRlbyBCIHNvdXJjZSBzZWxlY3QKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBWSURfQl9TUkNfU0VMICAgICAgICAgICAgIDB4MTMwMTQ0CS8qIFZpZGVvIEIgc291cmNlIHNlbGVjdCAqLwogI2RlZmluZSAgRkxEX1ZJRF9CX1NSQ19TRUwgICAgICAgICAweDAwMDAwMDAwCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIFZJRF9CX0xOR1RIICAgICAgICAgICAgICAgMHgxMzAxNTAJLy8gVmlkZW8gQiBsaW5lIGxlbmd0aAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIFZJRF9CX0xOR1RIICAgICAgICAgICAgICAgMHgxMzAxNTAJLyogVmlkZW8gQiBsaW5lIGxlbmd0aCAqLwogI2RlZmluZSAgRkxEX1ZJRF9CX0xOX0xOR1RIICAgICAgICAweDAwMDAwRkZGCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIFZJRF9CX1ZJUF9DVEwgICAgICAgICAgICAgMHgxMzAxODAJLy8gVmlkZW8gQiBWSVAgZm9ybWF0IGNvbnRyb2wKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBWSURfQl9WSVBfQ1RMICAgICAgICAgICAgIDB4MTMwMTgwCS8qIFZpZGVvIEIgVklQIGZvcm1hdCBjb250cm9sICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIFZJRF9CX1BJWEVMX0ZSTVQgICAgICAgICAgMHgxMzAxODQJLy8gVmlkZW8gQiBwaXhlbCBmb3JtYXQKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBWSURfQl9QSVhFTF9GUk1UICAgICAgICAgIDB4MTMwMTg0CS8qIFZpZGVvIEIgcGl4ZWwgZm9ybWF0ICovCiAjZGVmaW5lICBGTERfVklEX0JfR0FNTUFfRElTICAgICAgIDB4MDAwMDAwMDgKICNkZWZpbmUgIEZMRF9WSURfQl9GT1JNQVQgICAgICAgICAgMHgwMDAwMDAwNwogI2RlZmluZSAgRkxEX1ZJRF9CX0dBTU1BX0ZBQ1RPUiAgICAweDAwMDAwMDEwCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIFZJRF9DX0RNQSAgICAgICAgICAgICAgICAgMHgxMzAyMDAJLy8gVmlkZW8gQyBETUEgZGF0YSBwb3J0CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgVklEX0NfRE1BICAgICAgICAgICAgICAgICAweDEzMDIwMAkvKiBWaWRlbyBDIERNQSBkYXRhIHBvcnQgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgVklEX0NfTE5HVEggICAgICAgICAgICAgICAweDEzMDI1MAkvLyBWaWRlbyBDIGxpbmUgbGVuZ3RoCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgVklEX0NfTE5HVEggICAgICAgICAgICAgICAweDEzMDI1MAkvKiBWaWRlbyBDIGxpbmUgbGVuZ3RoICovCiAjZGVmaW5lICBGTERfVklEX0NfTE5fTE5HVEggICAgICAgIDB4MDAwMDBGRkYKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLy8gVmlkZW8gRGVzdGluYXRpb24gQ2hhbm5lbHMKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBWaWRlbyBEZXN0aW5hdGlvbiBDaGFubmVscyAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KIAotI2RlZmluZSAgVklEX0RTVF9BX0dQQ05UICAgICAgICAgICAweDEzMDAyMAkvLyBWaWRlbyBBIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyCi0jZGVmaW5lICBWSURfRFNUX0JfR1BDTlQgICAgICAgICAgIDB4MTMwMTIwCS8vIFZpZGVvIEIgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIKLSNkZWZpbmUgIFZJRF9EU1RfQ19HUENOVCAgICAgICAgICAgMHgxMzAyMjAJLy8gVmlkZW8gQyBnZW5lcmFsIHB1cnBvc2UgY291bnRlcgotI2RlZmluZSAgVklEX0RTVF9EX0dQQ05UICAgICAgICAgICAweDEzMDMyMAkvLyBWaWRlbyBEIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyCi0jZGVmaW5lICBWSURfRFNUX0VfR1BDTlQgICAgICAgICAgIDB4MTMwNDIwCS8vIFZpZGVvIEUgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIKLSNkZWZpbmUgIFZJRF9EU1RfRl9HUENOVCAgICAgICAgICAgMHgxMzA1MjAJLy8gVmlkZW8gRiBnZW5lcmFsIHB1cnBvc2UgY291bnRlcgotI2RlZmluZSAgVklEX0RTVF9HX0dQQ05UICAgICAgICAgICAweDEzMDYyMAkvLyBWaWRlbyBHIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyCi0jZGVmaW5lICBWSURfRFNUX0hfR1BDTlQgICAgICAgICAgIDB4MTMwNzIwCS8vIFZpZGVvIEggZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIKKyNkZWZpbmUgIFZJRF9EU1RfQV9HUENOVCAgICAgICAgICAgMHgxMzAwMjAJLyogVmlkZW8gQSBnZW5lcmFsIHB1cnBvc2UgY291bnRlciAqLworI2RlZmluZSAgVklEX0RTVF9CX0dQQ05UICAgICAgICAgICAweDEzMDEyMAkvKiBWaWRlbyBCIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyICovCisjZGVmaW5lICBWSURfRFNUX0NfR1BDTlQgICAgICAgICAgIDB4MTMwMjIwCS8qIFZpZGVvIEMgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIgKi8KKyNkZWZpbmUgIFZJRF9EU1RfRF9HUENOVCAgICAgICAgICAgMHgxMzAzMjAJLyogVmlkZW8gRCBnZW5lcmFsIHB1cnBvc2UgY291bnRlciAqLworI2RlZmluZSAgVklEX0RTVF9FX0dQQ05UICAgICAgICAgICAweDEzMDQyMAkvKiBWaWRlbyBFIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyICovCisjZGVmaW5lICBWSURfRFNUX0ZfR1BDTlQgICAgICAgICAgIDB4MTMwNTIwCS8qIFZpZGVvIEYgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIgKi8KKyNkZWZpbmUgIFZJRF9EU1RfR19HUENOVCAgICAgICAgICAgMHgxMzA2MjAJLyogVmlkZW8gRyBnZW5lcmFsIHB1cnBvc2UgY291bnRlciAqLworI2RlZmluZSAgVklEX0RTVF9IX0dQQ05UICAgICAgICAgICAweDEzMDcyMAkvKiBWaWRlbyBIIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAKLSNkZWZpbmUgIFZJRF9EU1RfQV9HUENOVF9DVEwgICAgICAgMHgxMzAwMzAJLy8gVmlkZW8gQSBnZW5lcmFsIHB1cnBvc2UgY29udHJvbAotI2RlZmluZSAgVklEX0RTVF9CX0dQQ05UX0NUTCAgICAgICAweDEzMDEzMAkvLyBWaWRlbyBCIGdlbmVyYWwgcHVycG9zZSBjb250cm9sCi0jZGVmaW5lICBWSURfRFNUX0NfR1BDTlRfQ1RMICAgICAgIDB4MTMwMjMwCS8vIFZpZGVvIEMgZ2VuZXJhbCBwdXJwb3NlIGNvbnRyb2wKLSNkZWZpbmUgIFZJRF9EU1RfRF9HUENOVF9DVEwgICAgICAgMHgxMzAzMzAJLy8gVmlkZW8gRCBnZW5lcmFsIHB1cnBvc2UgY29udHJvbAotI2RlZmluZSAgVklEX0RTVF9FX0dQQ05UX0NUTCAgICAgICAweDEzMDQzMAkvLyBWaWRlbyBFIGdlbmVyYWwgcHVycG9zZSBjb250cm9sCi0jZGVmaW5lICBWSURfRFNUX0ZfR1BDTlRfQ1RMICAgICAgIDB4MTMwNTMwCS8vIFZpZGVvIEYgZ2VuZXJhbCBwdXJwb3NlIGNvbnRyb2wKLSNkZWZpbmUgIFZJRF9EU1RfR19HUENOVF9DVEwgICAgICAgMHgxMzA2MzAJLy8gVmlkZW8gRyBnZW5lcmFsIHB1cnBvc2UgY29udHJvbAotI2RlZmluZSAgVklEX0RTVF9IX0dQQ05UX0NUTCAgICAgICAweDEzMDczMAkvLyBWaWRlbyBIIGdlbmVyYWwgcHVycG9zZSBjb250cm9sCisjZGVmaW5lICBWSURfRFNUX0FfR1BDTlRfQ1RMICAgICAgIDB4MTMwMDMwCS8qIFZpZGVvIEEgZ2VuZXJhbCBwdXJwb3NlIGNvbnRyb2wgKi8KKyNkZWZpbmUgIFZJRF9EU1RfQl9HUENOVF9DVEwgICAgICAgMHgxMzAxMzAJLyogVmlkZW8gQiBnZW5lcmFsIHB1cnBvc2UgY29udHJvbCAqLworI2RlZmluZSAgVklEX0RTVF9DX0dQQ05UX0NUTCAgICAgICAweDEzMDIzMAkvKiBWaWRlbyBDIGdlbmVyYWwgcHVycG9zZSBjb250cm9sICovCisjZGVmaW5lICBWSURfRFNUX0RfR1BDTlRfQ1RMICAgICAgIDB4MTMwMzMwCS8qIFZpZGVvIEQgZ2VuZXJhbCBwdXJwb3NlIGNvbnRyb2wgKi8KKyNkZWZpbmUgIFZJRF9EU1RfRV9HUENOVF9DVEwgICAgICAgMHgxMzA0MzAJLyogVmlkZW8gRSBnZW5lcmFsIHB1cnBvc2UgY29udHJvbCAqLworI2RlZmluZSAgVklEX0RTVF9GX0dQQ05UX0NUTCAgICAgICAweDEzMDUzMAkvKiBWaWRlbyBGIGdlbmVyYWwgcHVycG9zZSBjb250cm9sICovCisjZGVmaW5lICBWSURfRFNUX0dfR1BDTlRfQ1RMICAgICAgIDB4MTMwNjMwCS8qIFZpZGVvIEcgZ2VuZXJhbCBwdXJwb3NlIGNvbnRyb2wgKi8KKyNkZWZpbmUgIFZJRF9EU1RfSF9HUENOVF9DVEwgICAgICAgMHgxMzA3MzAJLyogVmlkZW8gSCBnZW5lcmFsIHB1cnBvc2UgY29udHJvbCAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogCi0jZGVmaW5lICBWSURfRFNUX0FfRE1BX0NUTCAgICAgICAgIDB4MTMwMDQwCS8vIFZpZGVvIEEgRE1BIGNvbnRyb2wKLSNkZWZpbmUgIFZJRF9EU1RfQl9ETUFfQ1RMICAgICAgICAgMHgxMzAxNDAJLy8gVmlkZW8gQiBETUEgY29udHJvbAotI2RlZmluZSAgVklEX0RTVF9DX0RNQV9DVEwgICAgICAgICAweDEzMDI0MAkvLyBWaWRlbyBDIERNQSBjb250cm9sCi0jZGVmaW5lICBWSURfRFNUX0RfRE1BX0NUTCAgICAgICAgIDB4MTMwMzQwCS8vIFZpZGVvIEQgRE1BIGNvbnRyb2wKLSNkZWZpbmUgIFZJRF9EU1RfRV9ETUFfQ1RMICAgICAgICAgMHgxMzA0NDAJLy8gVmlkZW8gRSBETUEgY29udHJvbAotI2RlZmluZSAgVklEX0RTVF9GX0RNQV9DVEwgICAgICAgICAweDEzMDU0MAkvLyBWaWRlbyBGIERNQSBjb250cm9sCi0jZGVmaW5lICBWSURfRFNUX0dfRE1BX0NUTCAgICAgICAgIDB4MTMwNjQwCS8vIFZpZGVvIEcgRE1BIGNvbnRyb2wKLSNkZWZpbmUgIFZJRF9EU1RfSF9ETUFfQ1RMICAgICAgICAgMHgxMzA3NDAJLy8gVmlkZW8gSCBETUEgY29udHJvbAorI2RlZmluZSAgVklEX0RTVF9BX0RNQV9DVEwgICAgICAgICAweDEzMDA0MAkvKiBWaWRlbyBBIERNQSBjb250cm9sICovCisjZGVmaW5lICBWSURfRFNUX0JfRE1BX0NUTCAgICAgICAgIDB4MTMwMTQwCS8qIFZpZGVvIEIgRE1BIGNvbnRyb2wgKi8KKyNkZWZpbmUgIFZJRF9EU1RfQ19ETUFfQ1RMICAgICAgICAgMHgxMzAyNDAJLyogVmlkZW8gQyBETUEgY29udHJvbCAqLworI2RlZmluZSAgVklEX0RTVF9EX0RNQV9DVEwgICAgICAgICAweDEzMDM0MAkvKiBWaWRlbyBEIERNQSBjb250cm9sICovCisjZGVmaW5lICBWSURfRFNUX0VfRE1BX0NUTCAgICAgICAgIDB4MTMwNDQwCS8qIFZpZGVvIEUgRE1BIGNvbnRyb2wgKi8KKyNkZWZpbmUgIFZJRF9EU1RfRl9ETUFfQ1RMICAgICAgICAgMHgxMzA1NDAJLyogVmlkZW8gRiBETUEgY29udHJvbCAqLworI2RlZmluZSAgVklEX0RTVF9HX0RNQV9DVEwgICAgICAgICAweDEzMDY0MAkvKiBWaWRlbyBHIERNQSBjb250cm9sICovCisjZGVmaW5lICBWSURfRFNUX0hfRE1BX0NUTCAgICAgICAgIDB4MTMwNzQwCS8qIFZpZGVvIEggRE1BIGNvbnRyb2wgKi8KIAogI2RlZmluZSAgRkxEX1ZJRF9SSVNDX0VOICAgICAgICAgICAweDAwMDAwMDEwCiAjZGVmaW5lICBGTERfVklEX0ZJRk9fRU4gICAgICAgICAgIDB4MDAwMDAwMDEKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KIAotI2RlZmluZSAgVklEX0RTVF9BX1ZJUF9DVEwgICAgICAgICAweDEzMDA4MAkvLyBWaWRlbyBBIFZJUCBjb250cm9sCi0jZGVmaW5lICBWSURfRFNUX0JfVklQX0NUTCAgICAgICAgIDB4MTMwMTgwCS8vIFZpZGVvIEIgVklQIGNvbnRyb2wKLSNkZWZpbmUgIFZJRF9EU1RfQ19WSVBfQ1RMICAgICAgICAgMHgxMzAyODAJLy8gVmlkZW8gQyBWSVAgY29udHJvbAotI2RlZmluZSAgVklEX0RTVF9EX1ZJUF9DVEwgICAgICAgICAweDEzMDM4MAkvLyBWaWRlbyBEIFZJUCBjb250cm9sCi0jZGVmaW5lICBWSURfRFNUX0VfVklQX0NUTCAgICAgICAgIDB4MTMwNDgwCS8vIFZpZGVvIEUgVklQIGNvbnRyb2wKLSNkZWZpbmUgIFZJRF9EU1RfRl9WSVBfQ1RMICAgICAgICAgMHgxMzA1ODAJLy8gVmlkZW8gRiBWSVAgY29udHJvbAotI2RlZmluZSAgVklEX0RTVF9HX1ZJUF9DVEwgICAgICAgICAweDEzMDY4MAkvLyBWaWRlbyBHIFZJUCBjb250cm9sCi0jZGVmaW5lICBWSURfRFNUX0hfVklQX0NUTCAgICAgICAgIDB4MTMwNzgwCS8vIFZpZGVvIEggVklQIGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9EU1RfQV9WSVBfQ1RMICAgICAgICAgMHgxMzAwODAJLyogVmlkZW8gQSBWSVAgY29udHJvbCAqLworI2RlZmluZSAgVklEX0RTVF9CX1ZJUF9DVEwgICAgICAgICAweDEzMDE4MAkvKiBWaWRlbyBCIFZJUCBjb250cm9sICovCisjZGVmaW5lICBWSURfRFNUX0NfVklQX0NUTCAgICAgICAgIDB4MTMwMjgwCS8qIFZpZGVvIEMgVklQIGNvbnRyb2wgKi8KKyNkZWZpbmUgIFZJRF9EU1RfRF9WSVBfQ1RMICAgICAgICAgMHgxMzAzODAJLyogVmlkZW8gRCBWSVAgY29udHJvbCAqLworI2RlZmluZSAgVklEX0RTVF9FX1ZJUF9DVEwgICAgICAgICAweDEzMDQ4MAkvKiBWaWRlbyBFIFZJUCBjb250cm9sICovCisjZGVmaW5lICBWSURfRFNUX0ZfVklQX0NUTCAgICAgICAgIDB4MTMwNTgwCS8qIFZpZGVvIEYgVklQIGNvbnRyb2wgKi8KKyNkZWZpbmUgIFZJRF9EU1RfR19WSVBfQ1RMICAgICAgICAgMHgxMzA2ODAJLyogVmlkZW8gRyBWSVAgY29udHJvbCAqLworI2RlZmluZSAgVklEX0RTVF9IX1ZJUF9DVEwgICAgICAgICAweDEzMDc4MAkvKiBWaWRlbyBIIFZJUCBjb250cm9sICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAKLSNkZWZpbmUgIFZJRF9EU1RfQV9QSVhfRlJNVCAgICAgICAgMHgxMzAwODQJLy8gVmlkZW8gQSBQaXhlbCBmb3JtYXQKLSNkZWZpbmUgIFZJRF9EU1RfQl9QSVhfRlJNVCAgICAgICAgMHgxMzAxODQJLy8gVmlkZW8gQiBQaXhlbCBmb3JtYXQKLSNkZWZpbmUgIFZJRF9EU1RfQ19QSVhfRlJNVCAgICAgICAgMHgxMzAyODQJLy8gVmlkZW8gQyBQaXhlbCBmb3JtYXQKLSNkZWZpbmUgIFZJRF9EU1RfRF9QSVhfRlJNVCAgICAgICAgMHgxMzAzODQJLy8gVmlkZW8gRCBQaXhlbCBmb3JtYXQKLSNkZWZpbmUgIFZJRF9EU1RfRV9QSVhfRlJNVCAgICAgICAgMHgxMzA0ODQJLy8gVmlkZW8gRSBQaXhlbCBmb3JtYXQKLSNkZWZpbmUgIFZJRF9EU1RfRl9QSVhfRlJNVCAgICAgICAgMHgxMzA1ODQJLy8gVmlkZW8gRiBQaXhlbCBmb3JtYXQKLSNkZWZpbmUgIFZJRF9EU1RfR19QSVhfRlJNVCAgICAgICAgMHgxMzA2ODQJLy8gVmlkZW8gRyBQaXhlbCBmb3JtYXQKLSNkZWZpbmUgIFZJRF9EU1RfSF9QSVhfRlJNVCAgICAgICAgMHgxMzA3ODQJLy8gVmlkZW8gSCBQaXhlbCBmb3JtYXQKKyNkZWZpbmUgIFZJRF9EU1RfQV9QSVhfRlJNVCAgICAgICAgMHgxMzAwODQJLyogVmlkZW8gQSBQaXhlbCBmb3JtYXQgKi8KKyNkZWZpbmUgIFZJRF9EU1RfQl9QSVhfRlJNVCAgICAgICAgMHgxMzAxODQJLyogVmlkZW8gQiBQaXhlbCBmb3JtYXQgKi8KKyNkZWZpbmUgIFZJRF9EU1RfQ19QSVhfRlJNVCAgICAgICAgMHgxMzAyODQJLyogVmlkZW8gQyBQaXhlbCBmb3JtYXQgKi8KKyNkZWZpbmUgIFZJRF9EU1RfRF9QSVhfRlJNVCAgICAgICAgMHgxMzAzODQJLyogVmlkZW8gRCBQaXhlbCBmb3JtYXQgKi8KKyNkZWZpbmUgIFZJRF9EU1RfRV9QSVhfRlJNVCAgICAgICAgMHgxMzA0ODQJLyogVmlkZW8gRSBQaXhlbCBmb3JtYXQgKi8KKyNkZWZpbmUgIFZJRF9EU1RfRl9QSVhfRlJNVCAgICAgICAgMHgxMzA1ODQJLyogVmlkZW8gRiBQaXhlbCBmb3JtYXQgKi8KKyNkZWZpbmUgIFZJRF9EU1RfR19QSVhfRlJNVCAgICAgICAgMHgxMzA2ODQJLyogVmlkZW8gRyBQaXhlbCBmb3JtYXQgKi8KKyNkZWZpbmUgIFZJRF9EU1RfSF9QSVhfRlJNVCAgICAgICAgMHgxMzA3ODQJLyogVmlkZW8gSCBQaXhlbCBmb3JtYXQgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLy8gVmlkZW8gU291cmNlIENoYW5uZWxzCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogVmlkZW8gU291cmNlIENoYW5uZWxzICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogCi0jZGVmaW5lICBWSURfU1JDX0FfR1BDTlRfQ1RMICAgICAgIDB4MTMwODA0CS8vIFZpZGVvIEEgZ2VuZXJhbCBwdXJwb3NlIGNvbnRyb2wKLSNkZWZpbmUgIFZJRF9TUkNfQl9HUENOVF9DVEwgICAgICAgMHgxMzA5MDQJLy8gVmlkZW8gQiBnZW5lcmFsIHB1cnBvc2UgY29udHJvbAotI2RlZmluZSAgVklEX1NSQ19DX0dQQ05UX0NUTCAgICAgICAweDEzMEEwNAkvLyBWaWRlbyBDIGdlbmVyYWwgcHVycG9zZSBjb250cm9sCi0jZGVmaW5lICBWSURfU1JDX0RfR1BDTlRfQ1RMICAgICAgIDB4MTMwQjA0CS8vIFZpZGVvIEQgZ2VuZXJhbCBwdXJwb3NlIGNvbnRyb2wKLSNkZWZpbmUgIFZJRF9TUkNfRV9HUENOVF9DVEwgICAgICAgMHgxMzBDMDQJLy8gVmlkZW8gRSBnZW5lcmFsIHB1cnBvc2UgY29udHJvbAotI2RlZmluZSAgVklEX1NSQ19GX0dQQ05UX0NUTCAgICAgICAweDEzMEQwNAkvLyBWaWRlbyBGIGdlbmVyYWwgcHVycG9zZSBjb250cm9sCi0jZGVmaW5lICBWSURfU1JDX0lfR1BDTlRfQ1RMICAgICAgIDB4MTMwRTA0CS8vIFZpZGVvIEkgZ2VuZXJhbCBwdXJwb3NlIGNvbnRyb2wKLSNkZWZpbmUgIFZJRF9TUkNfSl9HUENOVF9DVEwgICAgICAgMHgxMzBGMDQJLy8gVmlkZW8gSiBnZW5lcmFsIHB1cnBvc2UgY29udHJvbAorI2RlZmluZSAgVklEX1NSQ19BX0dQQ05UX0NUTCAgICAgICAweDEzMDgwNAkvKiBWaWRlbyBBIGdlbmVyYWwgcHVycG9zZSBjb250cm9sICovCisjZGVmaW5lICBWSURfU1JDX0JfR1BDTlRfQ1RMICAgICAgIDB4MTMwOTA0CS8qIFZpZGVvIEIgZ2VuZXJhbCBwdXJwb3NlIGNvbnRyb2wgKi8KKyNkZWZpbmUgIFZJRF9TUkNfQ19HUENOVF9DVEwgICAgICAgMHgxMzBBMDQJLyogVmlkZW8gQyBnZW5lcmFsIHB1cnBvc2UgY29udHJvbCAqLworI2RlZmluZSAgVklEX1NSQ19EX0dQQ05UX0NUTCAgICAgICAweDEzMEIwNAkvKiBWaWRlbyBEIGdlbmVyYWwgcHVycG9zZSBjb250cm9sICovCisjZGVmaW5lICBWSURfU1JDX0VfR1BDTlRfQ1RMICAgICAgIDB4MTMwQzA0CS8qIFZpZGVvIEUgZ2VuZXJhbCBwdXJwb3NlIGNvbnRyb2wgKi8KKyNkZWZpbmUgIFZJRF9TUkNfRl9HUENOVF9DVEwgICAgICAgMHgxMzBEMDQJLyogVmlkZW8gRiBnZW5lcmFsIHB1cnBvc2UgY29udHJvbCAqLworI2RlZmluZSAgVklEX1NSQ19JX0dQQ05UX0NUTCAgICAgICAweDEzMEUwNAkvKiBWaWRlbyBJIGdlbmVyYWwgcHVycG9zZSBjb250cm9sICovCisjZGVmaW5lICBWSURfU1JDX0pfR1BDTlRfQ1RMICAgICAgIDB4MTMwRjA0CS8qIFZpZGVvIEogZ2VuZXJhbCBwdXJwb3NlIGNvbnRyb2wgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KIAotI2RlZmluZSAgVklEX1NSQ19BX0dQQ05UICAgICAgICAgICAweDEzMDgwOAkvLyBWaWRlbyBBIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyCi0jZGVmaW5lICBWSURfU1JDX0JfR1BDTlQgICAgICAgICAgIDB4MTMwOTA4CS8vIFZpZGVvIEIgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIKLSNkZWZpbmUgIFZJRF9TUkNfQ19HUENOVCAgICAgICAgICAgMHgxMzBBMDgJLy8gVmlkZW8gQyBnZW5lcmFsIHB1cnBvc2UgY291bnRlcgotI2RlZmluZSAgVklEX1NSQ19EX0dQQ05UICAgICAgICAgICAweDEzMEIwOAkvLyBWaWRlbyBEIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyCi0jZGVmaW5lICBWSURfU1JDX0VfR1BDTlQgICAgICAgICAgIDB4MTMwQzA4CS8vIFZpZGVvIEUgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIKLSNkZWZpbmUgIFZJRF9TUkNfRl9HUENOVCAgICAgICAgICAgMHgxMzBEMDgJLy8gVmlkZW8gRiBnZW5lcmFsIHB1cnBvc2UgY291bnRlcgotI2RlZmluZSAgVklEX1NSQ19JX0dQQ05UICAgICAgICAgICAweDEzMEUwOAkvLyBWaWRlbyBJIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyCi0jZGVmaW5lICBWSURfU1JDX0pfR1BDTlQgICAgICAgICAgIDB4MTMwRjA4CS8vIFZpZGVvIEogZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIKKyNkZWZpbmUgIFZJRF9TUkNfQV9HUENOVCAgICAgICAgICAgMHgxMzA4MDgJLyogVmlkZW8gQSBnZW5lcmFsIHB1cnBvc2UgY291bnRlciAqLworI2RlZmluZSAgVklEX1NSQ19CX0dQQ05UICAgICAgICAgICAweDEzMDkwOAkvKiBWaWRlbyBCIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyICovCisjZGVmaW5lICBWSURfU1JDX0NfR1BDTlQgICAgICAgICAgIDB4MTMwQTA4CS8qIFZpZGVvIEMgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIgKi8KKyNkZWZpbmUgIFZJRF9TUkNfRF9HUENOVCAgICAgICAgICAgMHgxMzBCMDgJLyogVmlkZW8gRCBnZW5lcmFsIHB1cnBvc2UgY291bnRlciAqLworI2RlZmluZSAgVklEX1NSQ19FX0dQQ05UICAgICAgICAgICAweDEzMEMwOAkvKiBWaWRlbyBFIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyICovCisjZGVmaW5lICBWSURfU1JDX0ZfR1BDTlQgICAgICAgICAgIDB4MTMwRDA4CS8qIFZpZGVvIEYgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIgKi8KKyNkZWZpbmUgIFZJRF9TUkNfSV9HUENOVCAgICAgICAgICAgMHgxMzBFMDgJLyogVmlkZW8gSSBnZW5lcmFsIHB1cnBvc2UgY291bnRlciAqLworI2RlZmluZSAgVklEX1NSQ19KX0dQQ05UICAgICAgICAgICAweDEzMEYwOAkvKiBWaWRlbyBKIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAKLSNkZWZpbmUgIFZJRF9TUkNfQV9ETUFfQ1RMICAgICAgICAgMHgxMzA4MEMJLy8gVmlkZW8gQSBETUEgY29udHJvbAotI2RlZmluZSAgVklEX1NSQ19CX0RNQV9DVEwgICAgICAgICAweDEzMDkwQwkvLyBWaWRlbyBCIERNQSBjb250cm9sCi0jZGVmaW5lICBWSURfU1JDX0NfRE1BX0NUTCAgICAgICAgIDB4MTMwQTBDCS8vIFZpZGVvIEMgRE1BIGNvbnRyb2wKLSNkZWZpbmUgIFZJRF9TUkNfRF9ETUFfQ1RMICAgICAgICAgMHgxMzBCMEMJLy8gVmlkZW8gRCBETUEgY29udHJvbAotI2RlZmluZSAgVklEX1NSQ19FX0RNQV9DVEwgICAgICAgICAweDEzMEMwQwkvLyBWaWRlbyBFIERNQSBjb250cm9sCi0jZGVmaW5lICBWSURfU1JDX0ZfRE1BX0NUTCAgICAgICAgIDB4MTMwRDBDCS8vIFZpZGVvIEYgRE1BIGNvbnRyb2wKLSNkZWZpbmUgIFZJRF9TUkNfSV9ETUFfQ1RMICAgICAgICAgMHgxMzBFMEMJLy8gVmlkZW8gSSBETUEgY29udHJvbAotI2RlZmluZSAgVklEX1NSQ19KX0RNQV9DVEwgICAgICAgICAweDEzMEYwQwkvLyBWaWRlbyBKIERNQSBjb250cm9sCisjZGVmaW5lICBWSURfU1JDX0FfRE1BX0NUTCAgICAgICAgIDB4MTMwODBDCS8qIFZpZGVvIEEgRE1BIGNvbnRyb2wgKi8KKyNkZWZpbmUgIFZJRF9TUkNfQl9ETUFfQ1RMICAgICAgICAgMHgxMzA5MEMJLyogVmlkZW8gQiBETUEgY29udHJvbCAqLworI2RlZmluZSAgVklEX1NSQ19DX0RNQV9DVEwgICAgICAgICAweDEzMEEwQwkvKiBWaWRlbyBDIERNQSBjb250cm9sICovCisjZGVmaW5lICBWSURfU1JDX0RfRE1BX0NUTCAgICAgICAgIDB4MTMwQjBDCS8qIFZpZGVvIEQgRE1BIGNvbnRyb2wgKi8KKyNkZWZpbmUgIFZJRF9TUkNfRV9ETUFfQ1RMICAgICAgICAgMHgxMzBDMEMJLyogVmlkZW8gRSBETUEgY29udHJvbCAqLworI2RlZmluZSAgVklEX1NSQ19GX0RNQV9DVEwgICAgICAgICAweDEzMEQwQwkvKiBWaWRlbyBGIERNQSBjb250cm9sICovCisjZGVmaW5lICBWSURfU1JDX0lfRE1BX0NUTCAgICAgICAgIDB4MTMwRTBDCS8qIFZpZGVvIEkgRE1BIGNvbnRyb2wgKi8KKyNkZWZpbmUgIFZJRF9TUkNfSl9ETUFfQ1RMICAgICAgICAgMHgxMzBGMEMJLyogVmlkZW8gSiBETUEgY29udHJvbCAqLwogCiAjZGVmaW5lICBGTERfQVBCX1JJU0NfRU4gICAgICAgICAgIDB4MDAwMDAwMTAKICNkZWZpbmUgIEZMRF9BUEJfRklGT19FTiAgICAgICAgICAgMHgwMDAwMDAwMQogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogCi0jZGVmaW5lICBWSURfU1JDX0FfRk1UX0NUTCAgICAgICAgIDB4MTMwODEwCS8vIFZpZGVvIEEgZm9ybWF0IGNvbnRyb2wKLSNkZWZpbmUgIFZJRF9TUkNfQl9GTVRfQ1RMICAgICAgICAgMHgxMzA5MTAJLy8gVmlkZW8gQiBmb3JtYXQgY29udHJvbAotI2RlZmluZSAgVklEX1NSQ19DX0ZNVF9DVEwgICAgICAgICAweDEzMEExMAkvLyBWaWRlbyBDIGZvcm1hdCBjb250cm9sCi0jZGVmaW5lICBWSURfU1JDX0RfRk1UX0NUTCAgICAgICAgIDB4MTMwQjEwCS8vIFZpZGVvIEQgZm9ybWF0IGNvbnRyb2wKLSNkZWZpbmUgIFZJRF9TUkNfRV9GTVRfQ1RMICAgICAgICAgMHgxMzBDMTAJLy8gVmlkZW8gRSBmb3JtYXQgY29udHJvbAotI2RlZmluZSAgVklEX1NSQ19GX0ZNVF9DVEwgICAgICAgICAweDEzMEQxMAkvLyBWaWRlbyBGIGZvcm1hdCBjb250cm9sCi0jZGVmaW5lICBWSURfU1JDX0lfRk1UX0NUTCAgICAgICAgIDB4MTMwRTEwCS8vIFZpZGVvIEkgZm9ybWF0IGNvbnRyb2wKLSNkZWZpbmUgIFZJRF9TUkNfSl9GTVRfQ1RMICAgICAgICAgMHgxMzBGMTAJLy8gVmlkZW8gSiBmb3JtYXQgY29udHJvbAorI2RlZmluZSAgVklEX1NSQ19BX0ZNVF9DVEwgICAgICAgICAweDEzMDgxMAkvKiBWaWRlbyBBIGZvcm1hdCBjb250cm9sICovCisjZGVmaW5lICBWSURfU1JDX0JfRk1UX0NUTCAgICAgICAgIDB4MTMwOTEwCS8qIFZpZGVvIEIgZm9ybWF0IGNvbnRyb2wgKi8KKyNkZWZpbmUgIFZJRF9TUkNfQ19GTVRfQ1RMICAgICAgICAgMHgxMzBBMTAJLyogVmlkZW8gQyBmb3JtYXQgY29udHJvbCAqLworI2RlZmluZSAgVklEX1NSQ19EX0ZNVF9DVEwgICAgICAgICAweDEzMEIxMAkvKiBWaWRlbyBEIGZvcm1hdCBjb250cm9sICovCisjZGVmaW5lICBWSURfU1JDX0VfRk1UX0NUTCAgICAgICAgIDB4MTMwQzEwCS8qIFZpZGVvIEUgZm9ybWF0IGNvbnRyb2wgKi8KKyNkZWZpbmUgIFZJRF9TUkNfRl9GTVRfQ1RMICAgICAgICAgMHgxMzBEMTAJLyogVmlkZW8gRiBmb3JtYXQgY29udHJvbCAqLworI2RlZmluZSAgVklEX1NSQ19JX0ZNVF9DVEwgICAgICAgICAweDEzMEUxMAkvKiBWaWRlbyBJIGZvcm1hdCBjb250cm9sICovCisjZGVmaW5lICBWSURfU1JDX0pfRk1UX0NUTCAgICAgICAgIDB4MTMwRjEwCS8qIFZpZGVvIEogZm9ybWF0IGNvbnRyb2wgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KIAotI2RlZmluZSAgVklEX1NSQ19BX0FDVElWRV9DVEwxICAgICAweDEzMDgxNAkvLyBWaWRlbyBBIGFjdGl2ZSBjb250cm9sICAgICAgMQotI2RlZmluZSAgVklEX1NSQ19CX0FDVElWRV9DVEwxICAgICAweDEzMDkxNAkvLyBWaWRlbyBCIGFjdGl2ZSBjb250cm9sICAgICAgMQotI2RlZmluZSAgVklEX1NSQ19DX0FDVElWRV9DVEwxICAgICAweDEzMEExNAkvLyBWaWRlbyBDIGFjdGl2ZSBjb250cm9sICAgICAgMQotI2RlZmluZSAgVklEX1NSQ19EX0FDVElWRV9DVEwxICAgICAweDEzMEIxNAkvLyBWaWRlbyBEIGFjdGl2ZSBjb250cm9sICAgICAgMQotI2RlZmluZSAgVklEX1NSQ19FX0FDVElWRV9DVEwxICAgICAweDEzMEMxNAkvLyBWaWRlbyBFIGFjdGl2ZSBjb250cm9sICAgICAgMQotI2RlZmluZSAgVklEX1NSQ19GX0FDVElWRV9DVEwxICAgICAweDEzMEQxNAkvLyBWaWRlbyBGIGFjdGl2ZSBjb250cm9sICAgICAgMQotI2RlZmluZSAgVklEX1NSQ19JX0FDVElWRV9DVEwxICAgICAweDEzMEUxNAkvLyBWaWRlbyBJIGFjdGl2ZSBjb250cm9sICAgICAgMQotI2RlZmluZSAgVklEX1NSQ19KX0FDVElWRV9DVEwxICAgICAweDEzMEYxNAkvLyBWaWRlbyBKIGFjdGl2ZSBjb250cm9sICAgICAgMQorI2RlZmluZSAgVklEX1NSQ19BX0FDVElWRV9DVEwxICAgICAweDEzMDgxNAkvKiBWaWRlbyBBIGFjdGl2ZSBjb250cm9sICAgICAgMSAqLworI2RlZmluZSAgVklEX1NSQ19CX0FDVElWRV9DVEwxICAgICAweDEzMDkxNAkvKiBWaWRlbyBCIGFjdGl2ZSBjb250cm9sICAgICAgMSAqLworI2RlZmluZSAgVklEX1NSQ19DX0FDVElWRV9DVEwxICAgICAweDEzMEExNAkvKiBWaWRlbyBDIGFjdGl2ZSBjb250cm9sICAgICAgMSAqLworI2RlZmluZSAgVklEX1NSQ19EX0FDVElWRV9DVEwxICAgICAweDEzMEIxNAkvKiBWaWRlbyBEIGFjdGl2ZSBjb250cm9sICAgICAgMSAqLworI2RlZmluZSAgVklEX1NSQ19FX0FDVElWRV9DVEwxICAgICAweDEzMEMxNAkvKiBWaWRlbyBFIGFjdGl2ZSBjb250cm9sICAgICAgMSAqLworI2RlZmluZSAgVklEX1NSQ19GX0FDVElWRV9DVEwxICAgICAweDEzMEQxNAkvKiBWaWRlbyBGIGFjdGl2ZSBjb250cm9sICAgICAgMSAqLworI2RlZmluZSAgVklEX1NSQ19JX0FDVElWRV9DVEwxICAgICAweDEzMEUxNAkvKiBWaWRlbyBJIGFjdGl2ZSBjb250cm9sICAgICAgMSAqLworI2RlZmluZSAgVklEX1NSQ19KX0FDVElWRV9DVEwxICAgICAweDEzMEYxNAkvKiBWaWRlbyBKIGFjdGl2ZSBjb250cm9sICAgICAgMSAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogCi0jZGVmaW5lICBWSURfU1JDX0FfQUNUSVZFX0NUTDIgICAgIDB4MTMwODE4CS8vIFZpZGVvIEEgYWN0aXZlIGNvbnRyb2wgICAgICAyCi0jZGVmaW5lICBWSURfU1JDX0JfQUNUSVZFX0NUTDIgICAgIDB4MTMwOTE4CS8vIFZpZGVvIEIgYWN0aXZlIGNvbnRyb2wgICAgICAyCi0jZGVmaW5lICBWSURfU1JDX0NfQUNUSVZFX0NUTDIgICAgIDB4MTMwQTE4CS8vIFZpZGVvIEMgYWN0aXZlIGNvbnRyb2wgICAgICAyCi0jZGVmaW5lICBWSURfU1JDX0RfQUNUSVZFX0NUTDIgICAgIDB4MTMwQjE4CS8vIFZpZGVvIEQgYWN0aXZlIGNvbnRyb2wgICAgICAyCi0jZGVmaW5lICBWSURfU1JDX0VfQUNUSVZFX0NUTDIgICAgIDB4MTMwQzE4CS8vIFZpZGVvIEUgYWN0aXZlIGNvbnRyb2wgICAgICAyCi0jZGVmaW5lICBWSURfU1JDX0ZfQUNUSVZFX0NUTDIgICAgIDB4MTMwRDE4CS8vIFZpZGVvIEYgYWN0aXZlIGNvbnRyb2wgICAgICAyCi0jZGVmaW5lICBWSURfU1JDX0lfQUNUSVZFX0NUTDIgICAgIDB4MTMwRTE4CS8vIFZpZGVvIEkgYWN0aXZlIGNvbnRyb2wgICAgICAyCi0jZGVmaW5lICBWSURfU1JDX0pfQUNUSVZFX0NUTDIgICAgIDB4MTMwRjE4CS8vIFZpZGVvIEogYWN0aXZlIGNvbnRyb2wgICAgICAyCisjZGVmaW5lICBWSURfU1JDX0FfQUNUSVZFX0NUTDIgICAgIDB4MTMwODE4CS8qIFZpZGVvIEEgYWN0aXZlIGNvbnRyb2wgICAgICAyICovCisjZGVmaW5lICBWSURfU1JDX0JfQUNUSVZFX0NUTDIgICAgIDB4MTMwOTE4CS8qIFZpZGVvIEIgYWN0aXZlIGNvbnRyb2wgICAgICAyICovCisjZGVmaW5lICBWSURfU1JDX0NfQUNUSVZFX0NUTDIgICAgIDB4MTMwQTE4CS8qIFZpZGVvIEMgYWN0aXZlIGNvbnRyb2wgICAgICAyICovCisjZGVmaW5lICBWSURfU1JDX0RfQUNUSVZFX0NUTDIgICAgIDB4MTMwQjE4CS8qIFZpZGVvIEQgYWN0aXZlIGNvbnRyb2wgICAgICAyICovCisjZGVmaW5lICBWSURfU1JDX0VfQUNUSVZFX0NUTDIgICAgIDB4MTMwQzE4CS8qIFZpZGVvIEUgYWN0aXZlIGNvbnRyb2wgICAgICAyICovCisjZGVmaW5lICBWSURfU1JDX0ZfQUNUSVZFX0NUTDIgICAgIDB4MTMwRDE4CS8qIFZpZGVvIEYgYWN0aXZlIGNvbnRyb2wgICAgICAyICovCisjZGVmaW5lICBWSURfU1JDX0lfQUNUSVZFX0NUTDIgICAgIDB4MTMwRTE4CS8qIFZpZGVvIEkgYWN0aXZlIGNvbnRyb2wgICAgICAyICovCisjZGVmaW5lICBWSURfU1JDX0pfQUNUSVZFX0NUTDIgICAgIDB4MTMwRjE4CS8qIFZpZGVvIEogYWN0aXZlIGNvbnRyb2wgICAgICAyICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAKLSNkZWZpbmUgIFZJRF9TUkNfQV9DRFRfU1ogICAgICAgICAgMHgxMzA4MUMJLy8gVmlkZW8gQSBDRFQgc2l6ZQotI2RlZmluZSAgVklEX1NSQ19CX0NEVF9TWiAgICAgICAgICAweDEzMDkxQwkvLyBWaWRlbyBCIENEVCBzaXplCi0jZGVmaW5lICBWSURfU1JDX0NfQ0RUX1NaICAgICAgICAgIDB4MTMwQTFDCS8vIFZpZGVvIEMgQ0RUIHNpemUKLSNkZWZpbmUgIFZJRF9TUkNfRF9DRFRfU1ogICAgICAgICAgMHgxMzBCMUMJLy8gVmlkZW8gRCBDRFQgc2l6ZQotI2RlZmluZSAgVklEX1NSQ19FX0NEVF9TWiAgICAgICAgICAweDEzMEMxQwkvLyBWaWRlbyBFIENEVCBzaXplCi0jZGVmaW5lICBWSURfU1JDX0ZfQ0RUX1NaICAgICAgICAgIDB4MTMwRDFDCS8vIFZpZGVvIEYgQ0RUIHNpemUKLSNkZWZpbmUgIFZJRF9TUkNfSV9DRFRfU1ogICAgICAgICAgMHgxMzBFMUMJLy8gVmlkZW8gSSBDRFQgc2l6ZQotI2RlZmluZSAgVklEX1NSQ19KX0NEVF9TWiAgICAgICAgICAweDEzMEYxQwkvLyBWaWRlbyBKIENEVCBzaXplCisjZGVmaW5lICBWSURfU1JDX0FfQ0RUX1NaICAgICAgICAgIDB4MTMwODFDCS8qIFZpZGVvIEEgQ0RUIHNpemUgKi8KKyNkZWZpbmUgIFZJRF9TUkNfQl9DRFRfU1ogICAgICAgICAgMHgxMzA5MUMJLyogVmlkZW8gQiBDRFQgc2l6ZSAqLworI2RlZmluZSAgVklEX1NSQ19DX0NEVF9TWiAgICAgICAgICAweDEzMEExQwkvKiBWaWRlbyBDIENEVCBzaXplICovCisjZGVmaW5lICBWSURfU1JDX0RfQ0RUX1NaICAgICAgICAgIDB4MTMwQjFDCS8qIFZpZGVvIEQgQ0RUIHNpemUgKi8KKyNkZWZpbmUgIFZJRF9TUkNfRV9DRFRfU1ogICAgICAgICAgMHgxMzBDMUMJLyogVmlkZW8gRSBDRFQgc2l6ZSAqLworI2RlZmluZSAgVklEX1NSQ19GX0NEVF9TWiAgICAgICAgICAweDEzMEQxQwkvKiBWaWRlbyBGIENEVCBzaXplICovCisjZGVmaW5lICBWSURfU1JDX0lfQ0RUX1NaICAgICAgICAgIDB4MTMwRTFDCS8qIFZpZGVvIEkgQ0RUIHNpemUgKi8KKyNkZWZpbmUgIFZJRF9TUkNfSl9DRFRfU1ogICAgICAgICAgMHgxMzBGMUMJLyogVmlkZW8gSiBDRFQgc2l6ZSAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0vLyBBdWRpbyBJL0YKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIEFVRF9EU1RfQV9ETUEgICAgICAgICAgICAgMHgxNDAwMDAJLy8gQXVkaW8gSW50IEEgRE1BIGRhdGEgcG9ydAotI2RlZmluZSAgQVVEX1NSQ19BX0RNQSAgICAgICAgICAgICAweDE0MDAwOAkvLyBBdWRpbyBJbnQgQSBETUEgZGF0YSBwb3J0CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogQXVkaW8gSS9GICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgQVVEX0RTVF9BX0RNQSAgICAgICAgICAgICAweDE0MDAwMAkvKiBBdWRpbyBJbnQgQSBETUEgZGF0YSBwb3J0ICovCisjZGVmaW5lICBBVURfU1JDX0FfRE1BICAgICAgICAgICAgIDB4MTQwMDA4CS8qIEF1ZGlvIEludCBBIERNQSBkYXRhIHBvcnQgKi8KIAotI2RlZmluZSAgQVVEX0FfR1BDTlQgICAgICAgICAgICAgICAweDE0MDAxMAkvLyBBdWRpbyBJbnQgQSBncCBjb3VudGVyCisjZGVmaW5lICBBVURfQV9HUENOVCAgICAgICAgICAgICAgIDB4MTQwMDEwCS8qIEF1ZGlvIEludCBBIGdwIGNvdW50ZXIgKi8KICNkZWZpbmUgIEZMRF9BVURfQV9HUF9DTlQgICAgICAgICAgMHgwMDAwRkZGRgogCi0jZGVmaW5lICBBVURfQV9HUENOVF9DVEwgICAgICAgICAgIDB4MTQwMDE0CS8vIEF1ZGlvIEludCBBIGdwIGNvbnRyb2wKKyNkZWZpbmUgIEFVRF9BX0dQQ05UX0NUTCAgICAgICAgICAgMHgxNDAwMTQJLyogQXVkaW8gSW50IEEgZ3AgY29udHJvbCAqLwogCi0jZGVmaW5lICBBVURfQV9MTkdUSCAgICAgICAgICAgICAgIDB4MTQwMDE4CS8vIEF1ZGlvIEludCBBIGxpbmUgbGVuZ3RoCisjZGVmaW5lICBBVURfQV9MTkdUSCAgICAgICAgICAgICAgIDB4MTQwMDE4CS8qIEF1ZGlvIEludCBBIGxpbmUgbGVuZ3RoICovCiAKLSNkZWZpbmUgIEFVRF9BX0NGRyAgICAgICAgICAgICAgICAgMHgxNDAwMUMJLy8gQXVkaW8gSW50IEEgY29uZmlndXJhdGlvbgorI2RlZmluZSAgQVVEX0FfQ0ZHICAgICAgICAgICAgICAgICAweDE0MDAxQwkvKiBBdWRpbyBJbnQgQSBjb25maWd1cmF0aW9uICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIEFVRF9EU1RfQl9ETUEgICAgICAgICAgICAgMHgxNDAxMDAJLy8gQXVkaW8gSW50IEIgRE1BIGRhdGEgcG9ydAotI2RlZmluZSAgQVVEX1NSQ19CX0RNQSAgICAgICAgICAgICAweDE0MDEwOAkvLyBBdWRpbyBJbnQgQiBETUEgZGF0YSBwb3J0CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgQVVEX0RTVF9CX0RNQSAgICAgICAgICAgICAweDE0MDEwMAkvKiBBdWRpbyBJbnQgQiBETUEgZGF0YSBwb3J0ICovCisjZGVmaW5lICBBVURfU1JDX0JfRE1BICAgICAgICAgICAgIDB4MTQwMTA4CS8qIEF1ZGlvIEludCBCIERNQSBkYXRhIHBvcnQgKi8KIAotI2RlZmluZSAgQVVEX0JfR1BDTlQgICAgICAgICAgICAgICAweDE0MDExMAkvLyBBdWRpbyBJbnQgQiBncCBjb3VudGVyCisjZGVmaW5lICBBVURfQl9HUENOVCAgICAgICAgICAgICAgIDB4MTQwMTEwCS8qIEF1ZGlvIEludCBCIGdwIGNvdW50ZXIgKi8KICNkZWZpbmUgIEZMRF9BVURfQl9HUF9DTlQgICAgICAgICAgMHgwMDAwRkZGRgogCi0jZGVmaW5lICBBVURfQl9HUENOVF9DVEwgICAgICAgICAgIDB4MTQwMTE0CS8vIEF1ZGlvIEludCBCIGdwIGNvbnRyb2wKKyNkZWZpbmUgIEFVRF9CX0dQQ05UX0NUTCAgICAgICAgICAgMHgxNDAxMTQJLyogQXVkaW8gSW50IEIgZ3AgY29udHJvbCAqLwogCi0jZGVmaW5lICBBVURfQl9MTkdUSCAgICAgICAgICAgICAgIDB4MTQwMTE4CS8vIEF1ZGlvIEludCBCIGxpbmUgbGVuZ3RoCisjZGVmaW5lICBBVURfQl9MTkdUSCAgICAgICAgICAgICAgIDB4MTQwMTE4CS8qIEF1ZGlvIEludCBCIGxpbmUgbGVuZ3RoICovCiAKLSNkZWZpbmUgIEFVRF9CX0NGRyAgICAgICAgICAgICAgICAgMHgxNDAxMUMJLy8gQXVkaW8gSW50IEIgY29uZmlndXJhdGlvbgorI2RlZmluZSAgQVVEX0JfQ0ZHICAgICAgICAgICAgICAgICAweDE0MDExQwkvKiBBdWRpbyBJbnQgQiBjb25maWd1cmF0aW9uICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIEFVRF9EU1RfQ19ETUEgICAgICAgICAgICAgMHgxNDAyMDAJLy8gQXVkaW8gSW50IEMgRE1BIGRhdGEgcG9ydAotI2RlZmluZSAgQVVEX1NSQ19DX0RNQSAgICAgICAgICAgICAweDE0MDIwOAkvLyBBdWRpbyBJbnQgQyBETUEgZGF0YSBwb3J0CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgQVVEX0RTVF9DX0RNQSAgICAgICAgICAgICAweDE0MDIwMAkvKiBBdWRpbyBJbnQgQyBETUEgZGF0YSBwb3J0ICovCisjZGVmaW5lICBBVURfU1JDX0NfRE1BICAgICAgICAgICAgIDB4MTQwMjA4CS8qIEF1ZGlvIEludCBDIERNQSBkYXRhIHBvcnQgKi8KIAotI2RlZmluZSAgQVVEX0NfR1BDTlQgICAgICAgICAgICAgICAweDE0MDIxMAkvLyBBdWRpbyBJbnQgQyBncCBjb3VudGVyCisjZGVmaW5lICBBVURfQ19HUENOVCAgICAgICAgICAgICAgIDB4MTQwMjEwCS8qIEF1ZGlvIEludCBDIGdwIGNvdW50ZXIgKi8KICNkZWZpbmUgIEZMRF9BVURfQ19HUF9DTlQgICAgICAgICAgMHgwMDAwRkZGRgogCi0jZGVmaW5lICBBVURfQ19HUENOVF9DVEwgICAgICAgICAgIDB4MTQwMjE0CS8vIEF1ZGlvIEludCBDIGdwIGNvbnRyb2wKKyNkZWZpbmUgIEFVRF9DX0dQQ05UX0NUTCAgICAgICAgICAgMHgxNDAyMTQJLyogQXVkaW8gSW50IEMgZ3AgY29udHJvbCAqLwogCi0jZGVmaW5lICBBVURfQ19MTkdUSCAgICAgICAgICAgICAgIDB4MTQwMjE4CS8vIEF1ZGlvIEludCBDIGxpbmUgbGVuZ3RoCisjZGVmaW5lICBBVURfQ19MTkdUSCAgICAgICAgICAgICAgIDB4MTQwMjE4CS8qIEF1ZGlvIEludCBDIGxpbmUgbGVuZ3RoICovCiAKLSNkZWZpbmUgIEFVRF9DX0NGRyAgICAgICAgICAgICAgICAgMHgxNDAyMUMJLy8gQXVkaW8gSW50IEMgY29uZmlndXJhdGlvbgorI2RlZmluZSAgQVVEX0NfQ0ZHICAgICAgICAgICAgICAgICAweDE0MDIxQwkvKiBBdWRpbyBJbnQgQyBjb25maWd1cmF0aW9uICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIEFVRF9EU1RfRF9ETUEgICAgICAgICAgICAgMHgxNDAzMDAJLy8gQXVkaW8gSW50IEQgRE1BIGRhdGEgcG9ydAotI2RlZmluZSAgQVVEX1NSQ19EX0RNQSAgICAgICAgICAgICAweDE0MDMwOAkvLyBBdWRpbyBJbnQgRCBETUEgZGF0YSBwb3J0CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgQVVEX0RTVF9EX0RNQSAgICAgICAgICAgICAweDE0MDMwMAkvKiBBdWRpbyBJbnQgRCBETUEgZGF0YSBwb3J0ICovCisjZGVmaW5lICBBVURfU1JDX0RfRE1BICAgICAgICAgICAgIDB4MTQwMzA4CS8qIEF1ZGlvIEludCBEIERNQSBkYXRhIHBvcnQgKi8KIAotI2RlZmluZSAgQVVEX0RfR1BDTlQgICAgICAgICAgICAgICAweDE0MDMxMAkvLyBBdWRpbyBJbnQgRCBncCBjb3VudGVyCisjZGVmaW5lICBBVURfRF9HUENOVCAgICAgICAgICAgICAgIDB4MTQwMzEwCS8qIEF1ZGlvIEludCBEIGdwIGNvdW50ZXIgKi8KICNkZWZpbmUgIEZMRF9BVURfRF9HUF9DTlQgICAgICAgICAgMHgwMDAwRkZGRgogCi0jZGVmaW5lICBBVURfRF9HUENOVF9DVEwgICAgICAgICAgIDB4MTQwMzE0CS8vIEF1ZGlvIEludCBEIGdwIGNvbnRyb2wKKyNkZWZpbmUgIEFVRF9EX0dQQ05UX0NUTCAgICAgICAgICAgMHgxNDAzMTQJLyogQXVkaW8gSW50IEQgZ3AgY29udHJvbCAqLwogCi0jZGVmaW5lICBBVURfRF9MTkdUSCAgICAgICAgICAgICAgIDB4MTQwMzE4CS8vIEF1ZGlvIEludCBEIGxpbmUgbGVuZ3RoCisjZGVmaW5lICBBVURfRF9MTkdUSCAgICAgICAgICAgICAgIDB4MTQwMzE4CS8qIEF1ZGlvIEludCBEIGxpbmUgbGVuZ3RoICovCiAKLSNkZWZpbmUgIEFVRF9EX0NGRyAgICAgICAgICAgICAgICAgMHgxNDAzMUMJLy8gQXVkaW8gSW50IEQgY29uZmlndXJhdGlvbgorI2RlZmluZSAgQVVEX0RfQ0ZHICAgICAgICAgICAgICAgICAweDE0MDMxQwkvKiBBdWRpbyBJbnQgRCBjb25maWd1cmF0aW9uICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIEFVRF9TUkNfRV9ETUEgICAgICAgICAgICAgMHgxNDA0MDAJLy8gQXVkaW8gSW50IEUgRE1BIGRhdGEgcG9ydAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIEFVRF9TUkNfRV9ETUEgICAgICAgICAgICAgMHgxNDA0MDAJLyogQXVkaW8gSW50IEUgRE1BIGRhdGEgcG9ydCAqLwogCi0jZGVmaW5lICBBVURfRV9HUENOVCAgICAgICAgICAgICAgIDB4MTQwNDEwCS8vIEF1ZGlvIEludCBFIGdwIGNvdW50ZXIKKyNkZWZpbmUgIEFVRF9FX0dQQ05UICAgICAgICAgICAgICAgMHgxNDA0MTAJLyogQXVkaW8gSW50IEUgZ3AgY291bnRlciAqLwogI2RlZmluZSAgRkxEX0FVRF9FX0dQX0NOVCAgICAgICAgICAweDAwMDBGRkZGCiAKLSNkZWZpbmUgIEFVRF9FX0dQQ05UX0NUTCAgICAgICAgICAgMHgxNDA0MTQJLy8gQXVkaW8gSW50IEUgZ3AgY29udHJvbAorI2RlZmluZSAgQVVEX0VfR1BDTlRfQ1RMICAgICAgICAgICAweDE0MDQxNAkvKiBBdWRpbyBJbnQgRSBncCBjb250cm9sICovCiAKLSNkZWZpbmUgIEFVRF9FX0NGRyAgICAgICAgICAgICAgICAgMHgxNDA0MUMJLy8gQXVkaW8gSW50IEUgY29uZmlndXJhdGlvbgorI2RlZmluZSAgQVVEX0VfQ0ZHICAgICAgICAgICAgICAgICAweDE0MDQxQwkvKiBBdWRpbyBJbnQgRSBjb25maWd1cmF0aW9uICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAKICNkZWZpbmUgIEZMRF9BVURfRFNUX0xOX0xOR1RIICAgICAgMHgwMDAwMEZGRgogCkBAIC0xMzYxLDggKzEzNjEsOCBAQAogCiAjZGVmaW5lICBGTERfQVVEX1NSQ19FTkFCTEUgICAgICAgIDB4MDAwMTAwMDAKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgQVVEX0lOVF9ETUFfQ1RMICAgICAgICAgICAweDE0MDUwMAkvLyBBdWRpbyBJbnQgRE1BIGNvbnRyb2wKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBBVURfSU5UX0RNQV9DVEwgICAgICAgICAgIDB4MTQwNTAwCS8qIEF1ZGlvIEludCBETUEgY29udHJvbCAqLwogCiAjZGVmaW5lICBGTERfQVVEX1NSQ19FX1JJU0NfRU4gICAgIDB4MDAwMDgwMDAKICNkZWZpbmUgIEZMRF9BVURfU1JDX0NfUklTQ19FTiAgICAgMHgwMDAwNDAwMApAQCAtMTM4NCwxNSArMTM4NCwxNSBAQAogI2RlZmluZSAgRkxEX0FVRF9EU1RfQl9GSUZPX0VOICAgICAweDAwMDAwMDAyCiAjZGVmaW5lICBGTERfQVVEX0RTVF9BX0ZJRk9fRU4gICAgIDB4MDAwMDAwMDEKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLy8KLS8vICAgICAgICAgICAgICAgICAgIE1vYmlseWdlbiBJbnRlcmZhY2UgUmVnaXN0ZXJzCi0vLwotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLy8gTW9iaWx5Z2VuIEludGVyZmFjZSBBCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBNQl9JRl9BX0RNQSAgICAgICAgICAgICAgIDB4MTUwMDAwCS8vIE1CSUYgQSBETUEgZGF0YSBwb3J0Ci0jZGVmaW5lICBNQl9JRl9BX0dQQ04gICAgICAgICAgICAgIDB4MTUwMDA4CS8vIE1CSUYgQSBHUCBjb3VudGVyCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogICovCisvKiBNb2JpbHlnZW4gSW50ZXJmYWNlIFJlZ2lzdGVycyAqLworLyogICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTW9iaWx5Z2VuIEludGVyZmFjZSBBICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgTUJfSUZfQV9ETUEgICAgICAgICAgICAgICAweDE1MDAwMAkvKiBNQklGIEEgRE1BIGRhdGEgcG9ydCAqLworI2RlZmluZSAgTUJfSUZfQV9HUENOICAgICAgICAgICAgICAweDE1MDAwOAkvKiBNQklGIEEgR1AgY291bnRlciAqLwogI2RlZmluZSAgTUJfSUZfQV9HUENOX0NUUkwgICAgICAgICAweDE1MDAwQwogI2RlZmluZSAgTUJfSUZfQV9ETUFfQ1RSTCAgICAgICAgICAweDE1MDAxMAogI2RlZmluZSAgTUJfSUZfQV9MRU5HVEggICAgICAgICAgICAweDE1MDAxNApAQCAtMTQxNSwxMSArMTQxNSwxMSBAQAogI2RlZmluZSAgTUJfSUZfQV9EQVRBX1NUUlVDVF9EICAgICAweDE1MDA1OAogI2RlZmluZSAgTUJfSUZfQV9EQVRBX1NUUlVDVF9FICAgICAweDE1MDA1QwogI2RlZmluZSAgTUJfSUZfQV9EQVRBX1NUUlVDVF9GICAgICAweDE1MDA2MAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLy8gTW9iaWx5Z2VuIEludGVyZmFjZSBCCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBNQl9JRl9CX0RNQSAgICAgICAgICAgICAgIDB4MTYwMDAwCS8vIE1CSUYgQSBETUEgZGF0YSBwb3J0Ci0jZGVmaW5lICBNQl9JRl9CX0dQQ04gICAgICAgICAgICAgIDB4MTYwMDA4CS8vIE1CSUYgQSBHUCBjb3VudGVyCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTW9iaWx5Z2VuIEludGVyZmFjZSBCICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgTUJfSUZfQl9ETUEgICAgICAgICAgICAgICAweDE2MDAwMAkvKiBNQklGIEEgRE1BIGRhdGEgcG9ydCAqLworI2RlZmluZSAgTUJfSUZfQl9HUENOICAgICAgICAgICAgICAweDE2MDAwOAkvKiBNQklGIEEgR1AgY291bnRlciAqLwogI2RlZmluZSAgTUJfSUZfQl9HUENOX0NUUkwgICAgICAgICAweDE2MDAwQwogI2RlZmluZSAgTUJfSUZfQl9ETUFfQ1RSTCAgICAgICAgICAweDE2MDAxMAogI2RlZmluZSAgTUJfSUZfQl9MRU5HVEggICAgICAgICAgICAweDE2MDAxNApAQCAtMTQ0MywxNCArMTQ0MywxNCBAQAogI2RlZmluZSAgTUJfSUZfQl9EQVRBX1NUUlVDVF9FICAgICAweDE2MDA1QwogI2RlZmluZSAgTUJfSUZfQl9EQVRBX1NUUlVDVF9GICAgICAweDE2MDA2MAogCi0vLyBNQl9ETUFfQ1RSTAorLyogTUJfRE1BX0NUUkwgKi8KICNkZWZpbmUgIEZMRF9NQl9JRl9SSVNDX0VOICAgICAgICAgMHgwMDAwMDAxMAogI2RlZmluZSAgRkxEX01CX0lGX0ZJRk9fRU4gICAgICAgICAweDAwMDAwMDAxCiAKLS8vIE1CX0xFTkdUSAorLyogTUJfTEVOR1RIICovCiAjZGVmaW5lICBGTERfTUJfSUZfTE5fTE5HVEggICAgICAgIDB4MDAwMDBGRkYKIAotLy8gTUJfSENNRCByZWdpc3RlcgorLyogTUJfSENNRCByZWdpc3RlciAqLwogI2RlZmluZSAgRkxEX01CX0hDTURfSF9HTyAgICAgICAgICAweDgwMDAwMDAwCiAjZGVmaW5lICBGTERfTUJfSENNRF9IX0JVU1kgICAgICAgIDB4NDAwMDAwMDAKICNkZWZpbmUgIEZMRF9NQl9IQ01EX0hfRE1BX0hPTEQgICAgMHgxMDAwMDAwMApAQCAtMTQ2MSwxMTggKzE0NjEsMTE4IEBACiAjZGVmaW5lICBGTERfTUJfSENNRF9IX0FERFIgICAgICAgIDB4MDBGRjAwMDAKICNkZWZpbmUgIEZMRF9NQl9IQ01EX0hfREFUQSAgICAgICAgMHgwMDAwRkZGRgogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0vLyBJMkMgIzEKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIEkyQzFfQUREUiAgICAgICAgICAgICAgICAgMHgxODAwMDAJLy8gSTJDICMxIGFkZHJlc3MKLSNkZWZpbmUgIEZMRF9JMkNfREFERFIgICAgICAgICAgICAgMHhmZTAwMDAwMAkvLyBSVyBbMzE6MjVdIEkyQyBEZXZpY2UgQWRkcmVzcwotCQkJCQkJIC8vIFJPIFsyNF0gcmVzZXJ2ZWQKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIEZMRF9JMkNfU0FERFIgICAgICAgICAgICAgMHgwMEZGRkZGRgkvLyBSVyBbMjM6MF0gIEkyQyBTdWItYWRkcmVzcworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIEkyQyAjMSAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIEkyQzFfQUREUiAgICAgICAgICAgICAgICAgMHgxODAwMDAJLyogSTJDICMxIGFkZHJlc3MgKi8KKyNkZWZpbmUgIEZMRF9JMkNfREFERFIgICAgICAgICAgICAgMHhmZTAwMDAwMAkvKiBSVyBbMzE6MjVdIEkyQyBEZXZpY2UgQWRkcmVzcyAqLworCQkJCQkJIC8qIFJPIFsyNF0gcmVzZXJ2ZWQgKi8KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBGTERfSTJDX1NBRERSICAgICAgICAgICAgIDB4MDBGRkZGRkYJLyogUlcgWzIzOjBdICBJMkMgU3ViLWFkZHJlc3MgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgSTJDMV9XREFUQSAgICAgICAgICAgICAgICAweDE4MDAwNAkvLyBJMkMgIzEgd3JpdGUgZGF0YQotI2RlZmluZSAgRkxEX0kyQ19XREFUQSAgICAgICAgICAgICAweEZGRkZGRkZGCS8vIFJXIFszMTowXQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIEkyQzFfV0RBVEEgICAgICAgICAgICAgICAgMHgxODAwMDQJLyogSTJDICMxIHdyaXRlIGRhdGEgKi8KKyNkZWZpbmUgIEZMRF9JMkNfV0RBVEEgICAgICAgICAgICAgMHhGRkZGRkZGRgkvKiBSVyBbMzE6MF0gKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgSTJDMV9DVFJMICAgICAgICAgICAgICAgICAweDE4MDAwOAkvLyBJMkMgIzEgY29udHJvbAotI2RlZmluZSAgRkxEX0kyQ19QRVJJT0QgICAgICAgICAgICAweEZGMDAwMDAwCS8vIFJXIFszMToyNF0KLSNkZWZpbmUgIEZMRF9JMkNfU0NMX0lOICAgICAgICAgICAgMHgwMDIwMDAwMAkvLyBSVyBbMjFdCi0jZGVmaW5lICBGTERfSTJDX1NEQV9JTiAgICAgICAgICAgIDB4MDAxMDAwMDAJLy8gUlcgWzIwXQotCQkJCQkJIC8vIFJPIFsxOToxOF0gcmVzZXJ2ZWQKLSNkZWZpbmUgIEZMRF9JMkNfU0NMX09VVCAgICAgICAgICAgMHgwMDAyMDAwMAkvLyBSVyBbMTddCi0jZGVmaW5lICBGTERfSTJDX1NEQV9PVVQgICAgICAgICAgIDB4MDAwMTAwMDAJLy8gUlcgWzE2XQotCQkJCQkJIC8vIFJPIFsxNV0gcmVzZXJ2ZWQKLSNkZWZpbmUgIEZMRF9JMkNfREFUQV9MRU4gICAgICAgICAgMHgwMDAwNzAwMAkvLyBSVyBbMTQ6MTJdCi0jZGVmaW5lICBGTERfSTJDX1NBRERSX0lOQyAgICAgICAgIDB4MDAwMDA4MDAJLy8gUlcgWzExXQotCQkJCQkJIC8vIFJPIFsxMDo5XSByZXNlcnZlZAotI2RlZmluZSAgRkxEX0kyQ19TQUREUl9MRU4gICAgICAgICAweDAwMDAwMzAwCS8vIFJXIFs5OjhdCi0JCQkJCQkgLy8gUk8gWzc6Nl0gcmVzZXJ2ZWQKLSNkZWZpbmUgIEZMRF9JMkNfU09GVCAgICAgICAgICAgICAgMHgwMDAwMDAyMAkvLyBSVyBbNV0KLSNkZWZpbmUgIEZMRF9JMkNfTk9TVE9QICAgICAgICAgICAgMHgwMDAwMDAxMAkvLyBSVyBbNF0KLSNkZWZpbmUgIEZMRF9JMkNfRVhURU5EICAgICAgICAgICAgMHgwMDAwMDAwOAkvLyBSVyBbM10KLSNkZWZpbmUgIEZMRF9JMkNfU1lOQyAgICAgICAgICAgICAgMHgwMDAwMDAwNAkvLyBSVyBbMl0KLSNkZWZpbmUgIEZMRF9JMkNfUkVBRF9TQSAgICAgICAgICAgMHgwMDAwMDAwMgkvLyBSVyBbMV0KLSNkZWZpbmUgIEZMRF9JMkNfUkVBRF9XUk4gICAgICAgICAgMHgwMDAwMDAwMQkvLyBSVyBbMF0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBJMkMxX0NUUkwgICAgICAgICAgICAgICAgIDB4MTgwMDA4CS8qIEkyQyAjMSBjb250cm9sICovCisjZGVmaW5lICBGTERfSTJDX1BFUklPRCAgICAgICAgICAgIDB4RkYwMDAwMDAJLyogUlcgWzMxOjI0XSAqLworI2RlZmluZSAgRkxEX0kyQ19TQ0xfSU4gICAgICAgICAgICAweDAwMjAwMDAwCS8qIFJXIFsyMV0gKi8KKyNkZWZpbmUgIEZMRF9JMkNfU0RBX0lOICAgICAgICAgICAgMHgwMDEwMDAwMAkvKiBSVyBbMjBdICovCisJCQkJCQkgLyogUk8gWzE5OjE4XSByZXNlcnZlZCAqLworI2RlZmluZSAgRkxEX0kyQ19TQ0xfT1VUICAgICAgICAgICAweDAwMDIwMDAwCS8qIFJXIFsxN10gKi8KKyNkZWZpbmUgIEZMRF9JMkNfU0RBX09VVCAgICAgICAgICAgMHgwMDAxMDAwMAkvKiBSVyBbMTZdICovCisJCQkJCQkgLyogUk8gWzE1XSByZXNlcnZlZCAqLworI2RlZmluZSAgRkxEX0kyQ19EQVRBX0xFTiAgICAgICAgICAweDAwMDA3MDAwCS8qIFJXIFsxNDoxMl0gKi8KKyNkZWZpbmUgIEZMRF9JMkNfU0FERFJfSU5DICAgICAgICAgMHgwMDAwMDgwMAkvKiBSVyBbMTFdICovCisJCQkJCQkgLyogUk8gWzEwOjldIHJlc2VydmVkICovCisjZGVmaW5lICBGTERfSTJDX1NBRERSX0xFTiAgICAgICAgIDB4MDAwMDAzMDAJLyogUlcgWzk6OF0gKi8KKwkJCQkJCSAvKiBSTyBbNzo2XSByZXNlcnZlZCAqLworI2RlZmluZSAgRkxEX0kyQ19TT0ZUICAgICAgICAgICAgICAweDAwMDAwMDIwCS8qIFJXIFs1XSAqLworI2RlZmluZSAgRkxEX0kyQ19OT1NUT1AgICAgICAgICAgICAweDAwMDAwMDEwCS8qIFJXIFs0XSAqLworI2RlZmluZSAgRkxEX0kyQ19FWFRFTkQgICAgICAgICAgICAweDAwMDAwMDA4CS8qIFJXIFszXSAqLworI2RlZmluZSAgRkxEX0kyQ19TWU5DICAgICAgICAgICAgICAweDAwMDAwMDA0CS8qIFJXIFsyXSAqLworI2RlZmluZSAgRkxEX0kyQ19SRUFEX1NBICAgICAgICAgICAweDAwMDAwMDAyCS8qIFJXIFsxXSAqLworI2RlZmluZSAgRkxEX0kyQ19SRUFEX1dSTiAgICAgICAgICAweDAwMDAwMDAxCS8qIFJXIFswXSAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBJMkMxX1JEQVRBICAgICAgICAgICAgICAgIDB4MTgwMDBDCS8vIEkyQyAjMSByZWFkIGRhdGEKLSNkZWZpbmUgIEZMRF9JMkNfUkRBVEEgICAgICAgICAgICAgMHhGRkZGRkZGRgkvLyBSTyBbMzE6MF0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBJMkMxX1JEQVRBICAgICAgICAgICAgICAgIDB4MTgwMDBDCS8qIEkyQyAjMSByZWFkIGRhdGEgKi8KKyNkZWZpbmUgIEZMRF9JMkNfUkRBVEEgICAgICAgICAgICAgMHhGRkZGRkZGRgkvKiBSTyBbMzE6MF0gKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgSTJDMV9TVEFUICAgICAgICAgICAgICAgICAweDE4MDAxMAkvLyBJMkMgIzEgc3RhdHVzCi0jZGVmaW5lICBGTERfSTJDX1hGRVJfSU5fUFJPRyAgICAgIDB4MDAwMDAwMDIJLy8gUk8gWzFdCi0jZGVmaW5lICBGTERfSTJDX1JBQ0sgICAgICAgICAgICAgIDB4MDAwMDAwMDEJLy8gUk8gWzBdCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgSTJDMV9TVEFUICAgICAgICAgICAgICAgICAweDE4MDAxMAkvKiBJMkMgIzEgc3RhdHVzICovCisjZGVmaW5lICBGTERfSTJDX1hGRVJfSU5fUFJPRyAgICAgIDB4MDAwMDAwMDIJLyogUk8gWzFdICovCisjZGVmaW5lICBGTERfSTJDX1JBQ0sgICAgICAgICAgICAgIDB4MDAwMDAwMDEJLyogUk8gWzBdICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLS8vIEkyQyAjMgotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgSTJDMl9BRERSICAgICAgICAgICAgICAgICAweDE5MDAwMAkvLyBJMkMgIzIgYWRkcmVzcworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIEkyQyAjMiAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIEkyQzJfQUREUiAgICAgICAgICAgICAgICAgMHgxOTAwMDAJLyogSTJDICMyIGFkZHJlc3MgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgSTJDMl9XREFUQSAgICAgICAgICAgICAgICAweDE5MDAwNAkvLyBJMkMgIzIgd3JpdGUgZGF0YQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIEkyQzJfV0RBVEEgICAgICAgICAgICAgICAgMHgxOTAwMDQJLyogSTJDICMyIHdyaXRlIGRhdGEgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgSTJDMl9DVFJMICAgICAgICAgICAgICAgICAweDE5MDAwOAkvLyBJMkMgIzIgY29udHJvbAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIEkyQzJfQ1RSTCAgICAgICAgICAgICAgICAgMHgxOTAwMDgJLyogSTJDICMyIGNvbnRyb2wgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgSTJDMl9SREFUQSAgICAgICAgICAgICAgICAweDE5MDAwQwkvLyBJMkMgIzIgcmVhZCBkYXRhCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgSTJDMl9SREFUQSAgICAgICAgICAgICAgICAweDE5MDAwQwkvKiBJMkMgIzIgcmVhZCBkYXRhICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIEkyQzJfU1RBVCAgICAgICAgICAgICAgICAgMHgxOTAwMTAJLy8gSTJDICMyIHN0YXR1cworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIEkyQzJfU1RBVCAgICAgICAgICAgICAgICAgMHgxOTAwMTAJLyogSTJDICMyIHN0YXR1cyAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0vLyBJMkMgIzMKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIEkyQzNfQUREUiAgICAgICAgICAgICAgICAgMHgxQTAwMDAJLy8gSTJDICMzIGFkZHJlc3MKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBJMkMgIzMgKi8KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBJMkMzX0FERFIgICAgICAgICAgICAgICAgIDB4MUEwMDAwCS8qIEkyQyAjMyBhZGRyZXNzICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIEkyQzNfV0RBVEEgICAgICAgICAgICAgICAgMHgxQTAwMDQJLy8gSTJDICMzIHdyaXRlIGRhdGEKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBJMkMzX1dEQVRBICAgICAgICAgICAgICAgIDB4MUEwMDA0CS8qIEkyQyAjMyB3cml0ZSBkYXRhICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIEkyQzNfQ1RSTCAgICAgICAgICAgICAgICAgMHgxQTAwMDgJLy8gSTJDICMzIGNvbnRyb2wKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBJMkMzX0NUUkwgICAgICAgICAgICAgICAgIDB4MUEwMDA4CS8qIEkyQyAjMyBjb250cm9sICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIEkyQzNfUkRBVEEgICAgICAgICAgICAgICAgMHgxQTAwMEMJLy8gSTJDICMzIHJlYWQgZGF0YQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgIEkyQzNfUkRBVEEgICAgICAgICAgICAgICAgMHgxQTAwMEMJLyogSTJDICMzIHJlYWQgZGF0YSAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBJMkMzX1NUQVQgICAgICAgICAgICAgICAgIDB4MUEwMDEwCS8vIEkyQyAjMyBzdGF0dXMKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBJMkMzX1NUQVQgICAgICAgICAgICAgICAgIDB4MUEwMDEwCS8qIEkyQyAjMyBzdGF0dXMgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLy8gVUFSVAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgVUFSVF9DVEwgICAgICAgICAgICAgICAgICAweDFCMDAwMAkvLyBVQVJUIENvbnRyb2wgUmVnaXN0ZXIKLSNkZWZpbmUgIEZMRF9MT09QX0JBQ0tfRU4gICAgICAgICAgKDEgPDwgNykJLy8gUlcgZmllbGQgLSBkZWZhdWx0IDAKLSNkZWZpbmUgIEZMRF9SWF9UUkdfU1ogICAgICAgICAgICAgKDMgPDwgMikJLy8gUlcgZmllbGQgLSBkZWZhdWx0IDAKLSNkZWZpbmUgIEZMRF9SWF9FTiAgICAgICAgICAgICAgICAgKDEgPDwgMSkJLy8gUlcgZmllbGQgLSBkZWZhdWx0IDAKLSNkZWZpbmUgIEZMRF9UWF9FTiAgICAgICAgICAgICAgICAgKDEgPDwgMCkJLy8gUlcgZmllbGQgLSBkZWZhdWx0IDAKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBVQVJUICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgVUFSVF9DVEwgICAgICAgICAgICAgICAgICAweDFCMDAwMAkvKiBVQVJUIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgIEZMRF9MT09QX0JBQ0tfRU4gICAgICAgICAgKDEgPDwgNykJLyogUlcgZmllbGQgLSBkZWZhdWx0IDAgKi8KKyNkZWZpbmUgIEZMRF9SWF9UUkdfU1ogICAgICAgICAgICAgKDMgPDwgMikJLyogUlcgZmllbGQgLSBkZWZhdWx0IDAgKi8KKyNkZWZpbmUgIEZMRF9SWF9FTiAgICAgICAgICAgICAgICAgKDEgPDwgMSkJLyogUlcgZmllbGQgLSBkZWZhdWx0IDAgKi8KKyNkZWZpbmUgIEZMRF9UWF9FTiAgICAgICAgICAgICAgICAgKDEgPDwgMCkJLyogUlcgZmllbGQgLSBkZWZhdWx0IDAgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgVUFSVF9CUkQgICAgICAgICAgICAgICAgICAweDFCMDAwNAkvLyBVQVJUIEJhdWQgUmF0ZSBEaXZpc29yCi0jZGVmaW5lICBGTERfQlJEICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYJLy8gUlcgZmllbGQgLSBkZWZhdWx0IDB4MTk3CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgVUFSVF9CUkQgICAgICAgICAgICAgICAgICAweDFCMDAwNAkvKiBVQVJUIEJhdWQgUmF0ZSBEaXZpc29yICovCisjZGVmaW5lICBGTERfQlJEICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYJLyogUlcgZmllbGQgLSBkZWZhdWx0IDB4MTk3ICovCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSNkZWZpbmUgIFVBUlRfREJVRiAgICAgICAgICAgICAgICAgMHgxQjAwMDgJLy8gVUFSVCBUeC9SeCBEYXRhIEJ1RkZlcgotI2RlZmluZSAgRkxEX0RCICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCS8vIFJXIGZpZWxkIC0gZGVmYXVsdCAwCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgVUFSVF9EQlVGICAgICAgICAgICAgICAgICAweDFCMDAwOAkvKiBVQVJUIFR4L1J4IERhdGEgQnVGRmVyICovCisjZGVmaW5lICBGTERfREIgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYJLyogUlcgZmllbGQgLSBkZWZhdWx0IDAgKi8KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotI2RlZmluZSAgVUFSVF9JU1IgICAgICAgICAgICAgICAgICAweDFCMDAwQwkvLyBVQVJUIEludGVycnVwdCBTdGF0dXMKLSNkZWZpbmUgIEZMRF9SWERfVElNRU9VVF9FTiAgICAgICAgKDEgPDwgNykJLy8gUlcgZmllbGQgLSBkZWZhdWx0IDAKLSNkZWZpbmUgIEZMRF9GUk1fRVJSX0VOICAgICAgICAgICAgKDEgPDwgNikJLy8gUlcgZmllbGQgLSBkZWZhdWx0IDAKLSNkZWZpbmUgIEZMRF9SWERfUkRZX0VOICAgICAgICAgICAgKDEgPDwgNSkJLy8gUlcgZmllbGQgLSBkZWZhdWx0IDAKLSNkZWZpbmUgIEZMRF9UWERfRU1QVFlfRU4gICAgICAgICAgKDEgPDwgNCkJLy8gUlcgZmllbGQgLSBkZWZhdWx0IDAKLSNkZWZpbmUgIEZMRF9SWERfT1ZFUkZMT1cgICAgICAgICAgKDEgPDwgMykJLy8gUlcgZmllbGQgLSBkZWZhdWx0IDAKLSNkZWZpbmUgIEZMRF9GUk1fRVJSICAgICAgICAgICAgICAgKDEgPDwgMikJLy8gUlcgZmllbGQgLSBkZWZhdWx0IDAKLSNkZWZpbmUgIEZMRF9SWERfUkRZICAgICAgICAgICAgICAgKDEgPDwgMSkJLy8gUlcgZmllbGQgLSBkZWZhdWx0IDAKLSNkZWZpbmUgIEZMRF9UWERfRU1QVFkgICAgICAgICAgICAgKDEgPDwgMCkJLy8gUlcgZmllbGQgLSBkZWZhdWx0IDAKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lICBVQVJUX0lTUiAgICAgICAgICAgICAgICAgIDB4MUIwMDBDCS8qIFVBUlQgSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZSAgRkxEX1JYRF9USU1FT1VUX0VOICAgICAgICAoMSA8PCA3KQkvKiBSVyBmaWVsZCAtIGRlZmF1bHQgMCAqLworI2RlZmluZSAgRkxEX0ZSTV9FUlJfRU4gICAgICAgICAgICAoMSA8PCA2KQkvKiBSVyBmaWVsZCAtIGRlZmF1bHQgMCAqLworI2RlZmluZSAgRkxEX1JYRF9SRFlfRU4gICAgICAgICAgICAoMSA8PCA1KQkvKiBSVyBmaWVsZCAtIGRlZmF1bHQgMCAqLworI2RlZmluZSAgRkxEX1RYRF9FTVBUWV9FTiAgICAgICAgICAoMSA8PCA0KQkvKiBSVyBmaWVsZCAtIGRlZmF1bHQgMCAqLworI2RlZmluZSAgRkxEX1JYRF9PVkVSRkxPVyAgICAgICAgICAoMSA8PCAzKQkvKiBSVyBmaWVsZCAtIGRlZmF1bHQgMCAqLworI2RlZmluZSAgRkxEX0ZSTV9FUlIgICAgICAgICAgICAgICAoMSA8PCAyKQkvKiBSVyBmaWVsZCAtIGRlZmF1bHQgMCAqLworI2RlZmluZSAgRkxEX1JYRF9SRFkgICAgICAgICAgICAgICAoMSA8PCAxKQkvKiBSVyBmaWVsZCAtIGRlZmF1bHQgMCAqLworI2RlZmluZSAgRkxEX1RYRF9FTVBUWSAgICAgICAgICAgICAoMSA8PCAwKQkvKiBSVyBmaWVsZCAtIGRlZmF1bHQgMCAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jZGVmaW5lICBVQVJUX0NOVCAgICAgICAgICAgICAgICAgIDB4MUIwMDEwCS8vIFVBUlQgVHgvUnggRklGTyBCeXRlIENvdW50Ci0jZGVmaW5lICBGTERfVFhEX0NOVCAgICAgICAgICAgICAgICgweDFGIDw8IDgpCS8vIFJXIGZpZWxkIC0gZGVmYXVsdCAwCi0jZGVmaW5lICBGTERfUlhEX0NOVCAgICAgICAgICAgICAgICgweDFGIDw8IDApCS8vIFJXIGZpZWxkIC0gZGVmYXVsdCAwCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSAgVUFSVF9DTlQgICAgICAgICAgICAgICAgICAweDFCMDAxMAkvKiBVQVJUIFR4L1J4IEZJRk8gQnl0ZSBDb3VudCAqLworI2RlZmluZSAgRkxEX1RYRF9DTlQgICAgICAgICAgICAgICAoMHgxRiA8PCA4KQkvKiBSVyBmaWVsZCAtIGRlZmF1bHQgMCAqLworI2RlZmluZSAgRkxEX1JYRF9DTlQgICAgICAgICAgICAgICAoMHgxRiA8PCAwKQkvKiBSVyBmaWVsZCAtIGRlZmF1bHQgMCAqLwogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0vLyBNb3Rpb24gRGV0ZWN0aW9uCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTW90aW9uIERldGVjdGlvbiAqLwogI2RlZmluZSAgTURfQ0gwX0dSSURfQkxPQ0tfWUNOVCAgICAweDE3MDAxNAogI2RlZmluZSAgTURfQ0gxX0dSSURfQkxPQ0tfWUNOVCAgICAweDE3MDA5NAogI2RlZmluZSAgTURfQ0gyX0dSSURfQkxPQ0tfWUNOVCAgICAweDE3MDExNApAQCAtMTU4OSw0ICsxNTg5LDQgQEAKICNkZWZpbmUgUElYRUxfRU5HSU5FX1ZJUDEgMAogI2RlZmluZSBQSVhFTF9FTkdJTkVfVklQMiAxCiAKLSNlbmRpZiAvL0F0aGVuYV9SRUdJU1RFUlMKKyNlbmRpZiAvKiBBdGhlbmFfUkVHSVNURVJTICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXNyYW0uaCBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtc3JhbS5oCmluZGV4IGJkNjc3ZWUuLjVmMDVkMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtc3JhbS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtc3JhbS5oCkBAIC0yMywzNCArMjMsMzQgQEAKICNpZm5kZWYgX19BVEhFTkFfU1JBTV9IX18KICNkZWZpbmUgX19BVEhFTkFfU1JBTV9IX18KIAotLy8jZGVmaW5lIFJYX1NSQU1fU1RBUlRfU0laRSAgICAgICAgPSAwOyAgLy8gIFN0YXJ0IG9mIHJlc2VydmVkIFNSQU0KLSNkZWZpbmUgVklEX0NNRFNfU0laRSAgICAgICAgICAgICA4MAkvLyAgVmlkZW8gQ01EUyBzaXplIGluIGJ5dGVzCi0jZGVmaW5lIEFVRElPX0NNRFNfU0laRSAgICAgICAgICAgODAJLy8gIEFVRElPIENNRFMgc2l6ZSBpbiBieXRlcwotI2RlZmluZSBNQklGX0NNRFNfU0laRSAgICAgICAgICAgIDgwCS8vICBNQklGICBDTURTIHNpemUgaW4gYnl0ZXMKKy8qICNkZWZpbmUgUlhfU1JBTV9TVEFSVF9TSVpFICAgICAgICA9IDA7ICAvLyAgU3RhcnQgb2YgcmVzZXJ2ZWQgU1JBTSAqLworI2RlZmluZSBWSURfQ01EU19TSVpFICAgICAgICAgICAgIDgwCS8qIFZpZGVvIENNRFMgc2l6ZSBpbiBieXRlcyAqLworI2RlZmluZSBBVURJT19DTURTX1NJWkUgICAgICAgICAgIDgwCS8qIEFVRElPIENNRFMgc2l6ZSBpbiBieXRlcyAqLworI2RlZmluZSBNQklGX0NNRFNfU0laRSAgICAgICAgICAgIDgwCS8qIE1CSUYgIENNRFMgc2l6ZSBpbiBieXRlcyAqLwogCi0vLyNkZWZpbmUgUlhfU1JBTV9QT09MX1NUQVJUX1NJWkUgICA9IDA7ICAvLyAgU3RhcnQgb2YgdXNlYWJsZSBSWCBTUkFNIGZvciBidWZmZXJzCi0jZGVmaW5lIFZJRF9JUV9TSVpFICAgICAgICAgICAgICAgNjQJLy8gIFZJRCBpbnN0cnVjdGlvbiBxdWV1ZSBzaXplIGluIGJ5dGVzCisvKiAjZGVmaW5lIFJYX1NSQU1fUE9PTF9TVEFSVF9TSVpFICAgPSAwOyAgLy8gIFN0YXJ0IG9mIHVzZWFibGUgUlggU1JBTSBmb3IgYnVmZmVycyAqLworI2RlZmluZSBWSURfSVFfU0laRSAgICAgICAgICAgICAgIDY0CS8qIFZJRCBpbnN0cnVjdGlvbiBxdWV1ZSBzaXplIGluIGJ5dGVzICovCiAjZGVmaW5lIE1CSUZfSVFfU0laRSAgICAgICAgICAgICAgNjQKLSNkZWZpbmUgQVVESU9fSVFfU0laRSAgICAgICAgICAgICA2NAkvLyAgQVVEIGluc3RydWN0aW9uIHF1ZXVlIHNpemUgaW4gYnl0ZXMKKyNkZWZpbmUgQVVESU9fSVFfU0laRSAgICAgICAgICAgICA2NAkvKiBBVUQgaW5zdHJ1Y3Rpb24gcXVldWUgc2l6ZSBpbiBieXRlcyAqLwogCi0jZGVmaW5lIFZJRF9DRFRfU0laRSAgICAgICAgICAgICAgNjQJLy8gIFZJRCBjbHVzdGVyIGRlc2NyaXB0b3IgdGFibGUgc2l6ZSBpbiBieXRlcwotI2RlZmluZSBNQklGX0NEVF9TSVpFICAgICAgICAgICAgIDY0CS8vICBNQklGL0hCSSBjbHVzdGVyIGRlc2NyaXB0b3IgdGFibGUgc2l6ZSBpbiBieXRlcwotI2RlZmluZSBBVURJT19DRFRfU0laRSAgICAgICAgICAgIDQ4CS8vICBBVUQgY2x1c3RlciBkZXNjcmlwdG9yIHRhYmxlIHNpemUgaW4gYnl0ZXMKKyNkZWZpbmUgVklEX0NEVF9TSVpFICAgICAgICAgICAgICA2NAkvKiBWSUQgY2x1c3RlciBkZXNjcmlwdG9yIHRhYmxlIHNpemUgaW4gYnl0ZXMgKi8KKyNkZWZpbmUgTUJJRl9DRFRfU0laRSAgICAgICAgICAgICA2NAkvKiBNQklGL0hCSSBjbHVzdGVyIGRlc2NyaXB0b3IgdGFibGUgc2l6ZSBpbiBieXRlcyAqLworI2RlZmluZSBBVURJT19DRFRfU0laRSAgICAgICAgICAgIDQ4CS8qIEFVRCBjbHVzdGVyIGRlc2NyaXB0b3IgdGFibGUgc2l6ZSBpbiBieXRlcyAqLwogCi0vLyNkZWZpbmUgUlhfU1JBTV9QT09MX0ZSRUVfU0laRSAgICA9IDE2OyAvLyAgU3RhcnQgb2YgYXZhaWxhYmxlIFJYIFNSQU0KLS8vI2RlZmluZSBSWF9TUkFNX0VORF9TSVpFICAgICAgICAgID0gMDsgIC8vICBFbmQgb2YgUlggU1JBTQorLyogI2RlZmluZSBSWF9TUkFNX1BPT0xfRlJFRV9TSVpFICAgID0gMTY7IC8vICBTdGFydCBvZiBhdmFpbGFibGUgUlggU1JBTSAqLworLyogI2RlZmluZSBSWF9TUkFNX0VORF9TSVpFICAgICAgICAgID0gMDsgIC8vICBFbmQgb2YgUlggU1JBTSAqLwogCi0vLyNkZWZpbmUgVFhfU1JBTV9QT09MX1NUQVJUX1NJWkUgICA9IDA7ICAvLyAgU3RhcnQgb2YgdHJhbnNtaXQgcG9vbCBTUkFNCi0vLyNkZWZpbmUgTVNJX0RBVEFfU0laRSAgICAgICAgICAgICA9IDY0OyAvLyAgUmVzZXJ2ZWQgKE1TSSBEYXRhLCBSSVNDIHdvcmtpbmcgc3RvcmEKKy8qICNkZWZpbmUgVFhfU1JBTV9QT09MX1NUQVJUX1NJWkUgICA9IDA7ICAvLyAgU3RhcnQgb2YgdHJhbnNtaXQgcG9vbCBTUkFNICovCisvKiAjZGVmaW5lIE1TSV9EQVRBX1NJWkUgICAgICAgICAgICAgPSA2NDsgLy8gIFJlc2VydmVkIChNU0kgRGF0YSwgUklTQyB3b3JraW5nIHN0b3JhICovCiAKLSNkZWZpbmUgVklEX0NMVVNURVJfU0laRSAgICAgICAgICAxNDQwCS8vICBWSUQgY2x1c3RlciBkYXRhIGxpbmUKLSNkZWZpbmUgQVVESU9fQ0xVU1RFUl9TSVpFICAgICAgICAxMjgJLy8gIEFVRElPIGNsdXN0ZXIgZGF0YSBsaW5lCi0jZGVmaW5lIE1CSUZfQ0xVU1RFUl9TSVpFICAgICAgICAgMTQ0MAkvLyAgTUJJRi9IQkkgY2x1c3RlciBkYXRhIGxpbmUKKyNkZWZpbmUgVklEX0NMVVNURVJfU0laRSAgICAgICAgICAxNDQwCS8qIFZJRCBjbHVzdGVyIGRhdGEgbGluZSAqLworI2RlZmluZSBBVURJT19DTFVTVEVSX1NJWkUgICAgICAgIDEyOAkvKiBBVURJTyBjbHVzdGVyIGRhdGEgbGluZSAqLworI2RlZmluZSBNQklGX0NMVVNURVJfU0laRSAgICAgICAgIDE0NDAJLyogTUJJRi9IQkkgY2x1c3RlciBkYXRhIGxpbmUgKi8KIAotLy8jZGVmaW5lIFRYX1NSQU1fUE9PTF9GUkVFX1NJWkUgICAgPSA3MDQ7ICAgIC8vICBTdGFydCBvZiBhdmFpbGFibGUgVFggU1JBTQotLy8jZGVmaW5lIFRYX1NSQU1fRU5EX1NJWkUgICAgICAgICAgPSAwOyAgICAgIC8vICBFbmQgb2YgVFggU1JBTQorLyogI2RlZmluZSBUWF9TUkFNX1BPT0xfRlJFRV9TSVpFICAgID0gNzA0OyAgICAvLyAgU3RhcnQgb2YgYXZhaWxhYmxlIFRYIFNSQU0gKi8KKy8qICNkZWZpbmUgVFhfU1JBTV9FTkRfU0laRSAgICAgICAgICA9IDA7ICAgICAgLy8gIEVuZCBvZiBUWCBTUkFNICovCiAKLS8vIFJlY2VpdmUgU1JBTQorLyogUmVjZWl2ZSBTUkFNICovCiAjZGVmaW5lIFJYX1NSQU1fU1RBUlQgICAgICAgICAgICAgMHgxMDAwMAogI2RlZmluZSBWSURfQV9ET1dOX0NNRFMgICAgICAgICAgIDB4MTAwMDAKICNkZWZpbmUgVklEX0JfRE9XTl9DTURTICAgICAgICAgICAweDEwMDUwCkBAIC03OCw5ICs3OCw5IEBACiAjZGVmaW5lIEFVRF9FX1VQX0NNRFMgICAgICAgICAgICAgMHgxMDczMAogI2RlZmluZSBNQklGX0FfRE9XTl9DTURTICAgICAgICAgIDB4MTA3ODAKICNkZWZpbmUgTUJJRl9CX0RPV05fQ01EUyAgICAgICAgICAweDEwN0QwCi0jZGVmaW5lIERNQV9TQ1JBVENIX1BBRCAgICAgICAgICAgMHgxMDgyMAkvLyBTY3JhdGNoIHBhZCBhcmVhIGZyb20gMHgxMDgyMCB0byAweDEwQjQwCisjZGVmaW5lIERNQV9TQ1JBVENIX1BBRCAgICAgICAgICAgMHgxMDgyMAkvKiBTY3JhdGNoIHBhZCBhcmVhIGZyb20gMHgxMDgyMCB0byAweDEwQjQwICovCiAKLS8vI2RlZmluZSBSWF9TUkFNX1BPT0xfU1RBUlQgICAgICAgID0gMHgxMDVCMDsKKy8qICNkZWZpbmUgUlhfU1JBTV9QT09MX1NUQVJUICAgICAgICA9IDB4MTA1QjA7ICovCiAKICNkZWZpbmUgVklEX0FfSVEgICAgICAgICAgICAgICAgICAweDExMDAwCiAjZGVmaW5lIFZJRF9CX0lRICAgICAgICAgICAgICAgICAgMHgxMTA0MApAQCAtMTE4LDcgKzExOCw3IEBACiAjZGVmaW5lIE1CSUZfQV9DRFQgICAgICAgICAgICAgICAgMHgxMEMwMAogI2RlZmluZSBNQklGX0JfQ0RUICAgICAgICAgICAgICAgIDB4MTBDQzAKIAotLy8gQ2x1c3RlciBCdWZmZXIgZm9yIFJYCisvKiBDbHVzdGVyIEJ1ZmZlciBmb3IgUlggKi8KICNkZWZpbmUgVklEX0FfVVBfQ0xVU1RFUl8xICAgICAgICAweDExNDAwCiAjZGVmaW5lIFZJRF9BX1VQX0NMVVNURVJfMiAgICAgICAgMHgxMTlBMAogI2RlZmluZSBWSURfQV9VUF9DTFVTVEVSXzMgICAgICAgIDB4MTFGNDAKQEAgLTE3OCw5ICsxNzgsOSBAQAogI2RlZmluZSBSWF9TUkFNX1BPT0xfRlJFRSAgICAgICAgIDB4MUNFMDAKICNkZWZpbmUgUlhfU1JBTV9FTkQgICAgICAgICAgICAgICAweDFEMDAwCiAKLS8vIEZyZWUgUmVjZWl2ZSBTUkFNICAgIDE0NCBCeXRlcworLyogRnJlZSBSZWNlaXZlIFNSQU0gICAgMTQ0IEJ5dGVzICovCiAKLS8vIFRyYW5zbWl0IFNSQU0KKy8qIFRyYW5zbWl0IFNSQU0gKi8KICNkZWZpbmUgVFhfU1JBTV9QT09MX1NUQVJUICAgICAgICAweDAwMDAwCiAKICNkZWZpbmUgVklEX0FfRE9XTl9DTFVTVEVSXzEgICAgICAweDAwMDQwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLXVwc3RyZWFtLWNoMi5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby11cHN0cmVhbS1jaDIuYwppbmRleCAzNDNkZjY2Li5kMTJkYmI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLXVwc3RyZWFtLWNoMi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8tdXBzdHJlYW0tY2gyLmMKQEAgLTg0LDcgKzg0LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgbGluZSwgaTsKIAlzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoID0KLQkgICAgJmRldi0+c3JhbV9jaGFubmVsc1tkZXYtPl9jaGFubmVsMl91cHN0cmVhbV9zZWxlY3RdOworCSAgIGRldi0+Y2hhbm5lbHNbZGV2LT5fY2hhbm5lbDJfdXBzdHJlYW1fc2VsZWN0XS5zcmFtX2NoYW5uZWxzOwogCWludCBkaXN0X2JldHduX3N0YXJ0cyA9IGJwbCAqIDI7CiAKIAkvKiBzeW5jIGluc3RydWN0aW9uICovCkBAIC0xMTAsOCArMTEwLDExIEBACiAJCQlvZmZzZXQgKz0gZGlzdF9iZXR3bl9zdGFydHM7CiAJCX0KIAotCQkvLyBjaGVjayBpZiB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgRklGTyBhZnRlciB0aGUgZmlyc3QgNCBsaW5lcwotCQkvLyBGb3IgdGhlIHVwc3RyZWFtIHZpZGVvIGNoYW5uZWwsIHRoZSByaXNjIGVuZ2luZSB3aWxsIGVuYWJsZSB0aGUgRklGTy4KKwkgICAgICAgLyoKKwkJIGNoZWNrIGlmIHdlIG5lZWQgdG8gZW5hYmxlIHRoZSBGSUZPIGFmdGVyIHRoZSBmaXJzdCA0IGxpbmVzCisJCSAgRm9yIHRoZSB1cHN0cmVhbSB2aWRlbyBjaGFubmVsLCB0aGUgcmlzYyBlbmdpbmUgd2lsbCBlbmFibGUKKwkJICB0aGUgRklGTy4KKwkgICAgICAgKi8KIAkJaWYgKGZpZm9fZW5hYmxlICYmIGxpbmUgPT0gMykgewogCQkJKihycCsrKSA9IFJJU0NfV1JJVEVDUjsKIAkJCSoocnArKykgPSBzcmFtX2NoLT5kbWFfY3RsOwpAQCAtMTMwLDcgKzEzMyw3IEBACiB7CiAJX19sZTMyICpycDsKIAlpbnQgZmlmb19lbmFibGUgPSAwOwotCWludCBzaW5nbGVmaWVsZF9saW5lcyA9IGxpbmVzID4+IDE7CS8vZ2V0IGxpbmUgY291bnQgZm9yIHNpbmdsZSBmaWVsZAorICAgICAgIGludCBzaW5nbGVmaWVsZF9saW5lcyA9IGxpbmVzID4+IDE7IC8qZ2V0IGxpbmUgY291bnQgZm9yIHNpbmdsZSBmaWVsZCAqLwogCWludCBvZGRfbnVtX2xpbmVzID0gc2luZ2xlZmllbGRfbGluZXM7CiAJaW50IGZyYW1lID0gMDsKIAlpbnQgZnJhbWVfc2l6ZSA9IDA7CkBAIC0xNzQsNyArMTc3LDcgQEAKIAogCQlmaWZvX2VuYWJsZSA9IEZJRk9fRElTQUJMRTsKIAotCQkvL0V2ZW4gZmllbGQKKwkgICAgICAgLyogRXZlbiBmaWVsZCAqLwogCQlycCA9IGN4MjU4MjFfcmlzY19maWVsZF91cHN0cmVhbV9jaDIoZGV2LCBycCwKIAkJCQkJCSAgICAgZGV2LT4KIAkJCQkJCSAgICAgX2RhdGFfYnVmX3BoeXNfYWRkcl9jaDIgKwpAQCAtMTkyLDcgKzE5NSwxMCBAQAogCQkJcmlzY19waHlzX2p1bXBfYWRkciA9IGRldi0+X2RtYV9waHlzX3N0YXJ0X2FkZHJfY2gyOwogCQl9CiAKLQkJLy8gTG9vcCB0byAybmRGcmFtZVJJU0Mgb3IgdG8gU3RhcnQgb2YgUmlzYyBwcm9ncmFtICYgZ2VuZXJhdGUgSVJRCisJICAgICAgIC8qCisJCSAgTG9vcCB0byAybmRGcmFtZVJJU0Mgb3IgdG8gU3RhcnQgb2YKKwkJICBSaXNjIHByb2dyYW0gJiBnZW5lcmF0ZSBJUlEKKwkgICAgICAgKi8KIAkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfSlVNUCB8IFJJU0NfSVJRMSB8IHJpc2NfZmxhZyk7CiAJCSoocnArKykgPSBjcHVfdG9fbGUzMihyaXNjX3BoeXNfanVtcF9hZGRyKTsKIAkJKihycCsrKSA9IGNwdV90b19sZTMyKDApOwpAQCAtMjA0LDcgKzIxMCw3IEBACiB2b2lkIGN4MjU4MjFfc3RvcF91cHN0cmVhbV92aWRlb19jaDIoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCA9Ci0JICAgICZkZXYtPnNyYW1fY2hhbm5lbHNbVklEX1VQU1RSRUFNX1NSQU1fQ0hBTk5FTF9KXTsKKwkgICBkZXYtPmNoYW5uZWxzW1ZJRF9VUFNUUkVBTV9TUkFNX0NIQU5ORUxfSl0uc3JhbV9jaGFubmVsczsKIAl1MzIgdG1wID0gMDsKIAogCWlmICghZGV2LT5faXNfcnVubmluZ19jaDIpIHsKQEAgLTIxMiwxNSArMjE4LDE1IEBACiAJCSAgICAoImN4MjU4MjE6IE5vIHZpZGVvIGZpbGUgaXMgY3VycmVudGx5IHJ1bm5pbmcgc28gcmV0dXJuIVxuIik7CiAJCXJldHVybjsKIAl9Ci0JLy9EaXNhYmxlIFJJU0MgaW50ZXJydXB0cworICAgICAgIC8qIERpc2FibGUgUklTQyBpbnRlcnJ1cHRzICovCiAJdG1wID0gY3hfcmVhZChzcmFtX2NoLT5pbnRfbXNrKTsKIAljeF93cml0ZShzcmFtX2NoLT5pbnRfbXNrLCB0bXAgJiB+X2ludHJfbXNrKTsKIAotCS8vVHVybiBPRkYgcmlzYyBhbmQgZmlmbworICAgICAgIC8qIFR1cm4gT0ZGIHJpc2MgYW5kIGZpZm8gKi8KIAl0bXAgPSBjeF9yZWFkKHNyYW1fY2gtPmRtYV9jdGwpOwogCWN4X3dyaXRlKHNyYW1fY2gtPmRtYV9jdGwsIHRtcCAmIH4oRkxEX1ZJRF9GSUZPX0VOIHwgRkxEX1ZJRF9SSVNDX0VOKSk7CiAKLQkvL0NsZWFyIGRhdGEgYnVmZmVyIG1lbW9yeQorICAgICAgIC8qIENsZWFyIGRhdGEgYnVmZmVyIG1lbW9yeSAqLwogCWlmIChkZXYtPl9kYXRhX2J1Zl92aXJ0X2FkZHJfY2gyKQogCQltZW1zZXQoZGV2LT5fZGF0YV9idWZfdmlydF9hZGRyX2NoMiwgMCwKIAkJICAgICAgIGRldi0+X2RhdGFfYnVmX3NpemVfY2gyKTsKQEAgLTM3MSw4ICszNzcsOCBAQAogCX0KIAogCWN4MjU4MjFfZ2V0X2ZyYW1lX2NoMihkZXYsCi0JCQkgICAgICAmZGV2LT5zcmFtX2NoYW5uZWxzW2Rldi0+Ci0JCQkJCQkgIF9jaGFubmVsMl91cHN0cmVhbV9zZWxlY3RdKTsKKwkJCSAgICAgZGV2LT5jaGFubmVsc1tkZXYtPgorCQkJICAgICAgIF9jaGFubmVsMl91cHN0cmVhbV9zZWxlY3RdLnNyYW1fY2hhbm5lbHMpOwogfQogCiBpbnQgY3gyNTgyMV9vcGVuZmlsZV9jaDIoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIHN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2gpCkBAIC00ODgsNyArNDk0LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JLy9JbmlpdGl6ZSBhdCB0aGlzIGFkZHJlc3MgdW50aWwgbiBieXRlcyB0byAwCisgICAgICAgLyogSW5paXRpemUgYXQgdGhpcyBhZGRyZXNzIHVudGlsIG4gYnl0ZXMgdG8gMCAqLwogCW1lbXNldChkZXYtPl9kbWFfdmlydF9hZGRyX2NoMiwgMCwgZGV2LT5fcmlzY19zaXplX2NoMik7CiAKIAlpZiAoZGV2LT5fZGF0YV9idWZfdmlydF9hZGRyX2NoMiAhPSBOVUxMKSB7CkBAIC00OTYsNyArNTAyLDcgQEAKIAkJCQkgICAgZGV2LT5fZGF0YV9idWZfdmlydF9hZGRyX2NoMiwKIAkJCQkgICAgZGV2LT5fZGF0YV9idWZfcGh5c19hZGRyX2NoMik7CiAJfQotCS8vRm9yIFZpZGVvIERhdGEgYnVmZmVyIGFsbG9jYXRpb24KKyAgICAgICAvKiBGb3IgVmlkZW8gRGF0YSBidWZmZXIgYWxsb2NhdGlvbiAqLwogCWRldi0+X2RhdGFfYnVmX3ZpcnRfYWRkcl9jaDIgPQogCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYtPnBjaSwgZGV2LT51cHN0cmVhbV9kYXRhYnVmX3NpemVfY2gyLAogCQkJCSAmZGF0YV9kbWFfYWRkcik7CkBAIC01MDksMTQgKzUxNSwxNCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQkvL0luaXRpYWxpemUgYXQgdGhpcyBhZGRyZXNzIHVudGlsIG4gYnl0ZXMgdG8gMAorICAgICAgIC8qIEluaXRpYWxpemUgYXQgdGhpcyBhZGRyZXNzIHVudGlsIG4gYnl0ZXMgdG8gMCAqLwogCW1lbXNldChkZXYtPl9kYXRhX2J1Zl92aXJ0X2FkZHJfY2gyLCAwLCBkZXYtPl9kYXRhX2J1Zl9zaXplX2NoMik7CiAKIAlyZXQgPSBjeDI1ODIxX29wZW5maWxlX2NoMihkZXYsIHNyYW1fY2gpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JLy9DcmVhdGluZyBSSVNDIHByb2dyYW1zCisgICAgICAgLyogQ3JlYXRpbmcgUklTQyBwcm9ncmFtcyAqLwogCXJldCA9CiAJICAgIGN4MjU4MjFfcmlzY19idWZmZXJfdXBzdHJlYW1fY2gyKGRldiwgZGV2LT5wY2ksIDAsIGJwbCwKIAkJCQkJICAgICBkZXYtPl9saW5lc19jb3VudF9jaDIpOwpAQCAtNTM2LDcgKzU0Miw3IEBACiAJCQkJICAgdTMyIHN0YXR1cykKIHsKIAl1MzIgaW50X21za190bXA7Ci0Jc3RydWN0IHNyYW1fY2hhbm5lbCAqY2hhbm5lbCA9ICZkZXYtPnNyYW1fY2hhbm5lbHNbY2hhbl9udW1dOworICAgICAgIHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWwgPSBkZXYtPmNoYW5uZWxzW2NoYW5fbnVtXS5zcmFtX2NoYW5uZWxzOwogCWludCBzaW5nbGVmaWVsZF9saW5lcyA9IE5UU0NfRklFTERfSEVJR0hUOwogCWludCBsaW5lX3NpemVfaW5fYnl0ZXMgPSBZNDIyX0xJTkVfU1o7CiAJaW50IG9kZF9yaXNjX3Byb2dfc2l6ZSA9IDA7CkBAIC01NDQsMTAgKzU1MCwxMyBAQAogCV9fbGUzMiAqcnA7CiAKIAlpZiAoc3RhdHVzICYgRkxEX1ZJRF9TUkNfUklTQzEpIHsKLQkJLy8gV2Ugc2hvdWxkIG9ubHkgcHJvY2VzcyBvbmUgcHJvZ3JhbSBwZXIgY2FsbAorCSAgICAgICAvKiBXZSBzaG91bGQgb25seSBwcm9jZXNzIG9uZSBwcm9ncmFtIHBlciBjYWxsICovCiAJCXUzMiBwcm9nX2NudCA9IGN4X3JlYWQoY2hhbm5lbC0+Z3BjbnQpOwogCi0JCS8vU2luY2Ugd2UndmUgaWRlbnRpZmllZCBvdXIgSVJRLCBjbGVhciBvdXIgYml0cyBmcm9tIHRoZSBpbnRlcnJ1cHQgbWFzayBhbmQgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMKKwkgICAgICAgLyoKKwkJICBTaW5jZSB3ZSd2ZSBpZGVudGlmaWVkIG91ciBJUlEsIGNsZWFyIG91ciBiaXRzIGZyb20gdGhlCisJCSAgaW50ZXJydXB0IG1hc2sgYW5kIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzCisJICAgICAgICovCiAJCWludF9tc2tfdG1wID0gY3hfcmVhZChjaGFubmVsLT5pbnRfbXNrKTsKIAkJY3hfd3JpdGUoY2hhbm5lbC0+aW50X21zaywgaW50X21za190bXAgJiB+X2ludHJfbXNrKTsKIAkJY3hfd3JpdGUoY2hhbm5lbC0+aW50X3N0YXQsIF9pbnRyX21zayk7CkBAIC01ODgsNyArNTk3LDcgQEAKIAkJCQkJCQkJICAgIEZJRk9fRElTQUJMRSwKIAkJCQkJCQkJICAgIE9ERF9GSUVMRCk7CiAKLQkJCQkvLyBKdW1wIHRvIEV2ZW4gUmlzYyBwcm9ncmFtIG9mIDFzdCBGcmFtZQorCQkJICAgICAgIC8qIEp1bXAgdG8gRXZlbiBSaXNjIHByb2dyYW0gb2YgMXN0IEZyYW1lICovCiAJCQkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfSlVNUCk7CiAJCQkJKihycCsrKSA9IGNwdV90b19sZTMyKHJpc2NfcGh5c19qdW1wX2FkZHIpOwogCQkJCSoocnArKykgPSBjcHVfdG9fbGUzMigwKTsKQEAgLTYwMyw3ICs2MTIsNyBAQAogCQkgICAgICAgZGV2LT5fZnJhbWVfY291bnRfY2gyKTsKIAkJcmV0dXJuIC0xOwogCX0KLQkvL0VsU0UsIHNldCB0aGUgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIsIHJlLWVuYWJsZSBpcnEuCisgICAgICAgLyogRWxTRSwgc2V0IHRoZSBpbnRlcnJ1cHQgbWFzayByZWdpc3RlciwgcmUtZW5hYmxlIGlycS4gKi8KIAlpbnRfbXNrX3RtcCA9IGN4X3JlYWQoY2hhbm5lbC0+aW50X21zayk7CiAJY3hfd3JpdGUoY2hhbm5lbC0+aW50X21zaywgaW50X21za190bXAgfD0gX2ludHJfbXNrKTsKIApAQCAtNjIzLDEyICs2MzIsMTIgQEAKIAogCWNoYW5uZWxfbnVtID0gVklEX1VQU1RSRUFNX1NSQU1fQ0hBTk5FTF9KOwogCi0Jc3JhbV9jaCA9ICZkZXYtPnNyYW1fY2hhbm5lbHNbY2hhbm5lbF9udW1dOworICAgICAgIHNyYW1fY2ggPSBkZXYtPmNoYW5uZWxzW2NoYW5uZWxfbnVtXS5zcmFtX2NoYW5uZWxzOwogCiAJbXNrX3N0YXQgPSBjeF9yZWFkKHNyYW1fY2gtPmludF9tc3RhdCk7CiAJdmlkX3N0YXR1cyA9IGN4X3JlYWQoc3JhbV9jaC0+aW50X3N0YXQpOwogCi0JLy8gT25seSBkZWFsIHdpdGggb3VyIGludGVycnVwdAorICAgICAgIC8qIE9ubHkgZGVhbCB3aXRoIG91ciBpbnRlcnJ1cHQgKi8KIAlpZiAodmlkX3N0YXR1cykgewogCQloYW5kbGVkID0KIAkJICAgIGN4MjU4MjFfdmlkZW9fdXBzdHJlYW1faXJxX2NoMihkZXYsIGNoYW5uZWxfbnVtLApAQCAtNjU4LDcgKzY2NywxMCBAQAogCXZhbHVlIHw9IGRldi0+X2lzTlRTQ19jaDIgPyAwIDogMHgxMDsKIAljeF93cml0ZShjaC0+dmlkX2ZtdF9jdGwsIHZhbHVlKTsKIAotCS8vIHNldCBudW1iZXIgb2YgYWN0aXZlIHBpeGVscyBpbiBlYWNoIGxpbmUuIERlZmF1bHQgaXMgNzIwIHBpeGVscyBpbiBib3RoIE5UU0MgYW5kIFBBTCBmb3JtYXQKKyAgICAgICAvKgorCSAgc2V0IG51bWJlciBvZiBhY3RpdmUgcGl4ZWxzIGluIGVhY2ggbGluZS4gRGVmYXVsdCBpcyA3MjAKKwkgIHBpeGVscyBpbiBib3RoIE5UU0MgYW5kIFBBTCBmb3JtYXQKKyAgICAgICAqLwogCWN4X3dyaXRlKGNoLT52aWRfYWN0aXZlX2N0bDEsIHdpZHRoKTsKIAogCW51bV9saW5lcyA9IChoZWlnaHQgLyAyKSAmIDB4M0ZGOwpAQCAtNjcwLDcgKzY4Miw3IEBACiAKIAl2YWx1ZSA9IChudW1fbGluZXMgPDwgMTYpIHwgb2RkX251bV9saW5lczsKIAotCS8vIHNldCBudW1iZXIgb2YgYWN0aXZlIGxpbmVzIGluIGZpZWxkIDAgKHRvcCkgYW5kIGZpZWxkIDEgKGJvdHRvbSkKKyAgICAgICAvKiBzZXQgbnVtYmVyIG9mIGFjdGl2ZSBsaW5lcyBpbiBmaWVsZCAwICh0b3ApIGFuZCBmaWVsZCAxIChib3R0b20pICovCiAJY3hfd3JpdGUoY2gtPnZpZF9hY3RpdmVfY3RsMiwgdmFsdWUpOwogCiAJY3hfd3JpdGUoY2gtPnZpZF9jZHRfc2l6ZSwgVklEX0NEVF9TSVpFID4+IDMpOwpAQCAtNjgyLDIxICs2OTQsMjcgQEAKIAl1MzIgdG1wID0gMDsKIAlpbnQgZXJyID0gMDsKIAotCS8vIDY1Ni9WSVAgU1JDIFVwc3RyZWFtIENoYW5uZWwgSSAmIEogYW5kIDcgLSBIb3N0IEJ1cyBJbnRlcmZhY2UgZm9yIGNoYW5uZWwgQS1DCisgICAgICAgLyoKKwkgIDY1Ni9WSVAgU1JDIFVwc3RyZWFtIENoYW5uZWwgSSAmIEogYW5kIDcgLSBIb3N0IEJ1cyBJbnRlcmZhY2UKKwkgIGZvciBjaGFubmVsIEEtQworICAgICAgICovCiAJdG1wID0gY3hfcmVhZChWSURfQ0hfTU9ERV9TRUwpOwogCWN4X3dyaXRlKFZJRF9DSF9NT0RFX1NFTCwgdG1wIHwgMHgxQjAwMDFGRik7CiAKLQkvLyBTZXQgdGhlIHBoeXNpY2FsIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIFJJU0MgcHJvZ3JhbSBpbiB0aGUgaW5pdGlhbCBwcm9ncmFtIGNvdW50ZXIoSVBDKSBtZW1iZXIgb2YgdGhlIGNtZHMuCisgICAgICAgLyoKKwkgIFNldCB0aGUgcGh5c2ljYWwgc3RhcnQgYWRkcmVzcyBvZiB0aGUgUklTQyBwcm9ncmFtIGluIHRoZSBpbml0aWFsCisJICBwcm9ncmFtIGNvdW50ZXIoSVBDKSBtZW1iZXIgb2YgdGhlIGNtZHMuCisgICAgICAgKi8KIAljeF93cml0ZShzcmFtX2NoLT5jbWRzX3N0YXJ0ICsgMCwgZGV2LT5fZG1hX3BoeXNfYWRkcl9jaDIpOwotCWN4X3dyaXRlKHNyYW1fY2gtPmNtZHNfc3RhcnQgKyA0LCAwKTsJLyogUmlzYyBJUEMgSGlnaCA2NCBiaXRzIDYzLTMyICovCisgICAgICAgY3hfd3JpdGUoc3JhbV9jaC0+Y21kc19zdGFydCArIDQsIDApOyAvKiBSaXNjIElQQyBIaWdoIDY0IGJpdHMgNjMtMzIgKi8KIAogCS8qIHJlc2V0IGNvdW50ZXIgKi8KIAljeF93cml0ZShzcmFtX2NoLT5ncGNudF9jdGwsIDMpOwogCi0JLy8gQ2xlYXIgb3VyIGJpdHMgZnJvbSB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3Rlci4KKyAgICAgICAvKiBDbGVhciBvdXIgYml0cyBmcm9tIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyLiAqLwogCWN4X3dyaXRlKHNyYW1fY2gtPmludF9zdGF0LCBfaW50cl9tc2spOwogCi0JLy9TZXQgdGhlIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyLCBlbmFibGUgaXJxLgorICAgICAgIC8qIFNldCB0aGUgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIsIGVuYWJsZSBpcnEuICovCiAJY3hfc2V0KFBDSV9JTlRfTVNLLCBjeF9yZWFkKFBDSV9JTlRfTVNLKSB8ICgxIDw8IHNyYW1fY2gtPmlycV9iaXQpKTsKIAl0bXAgPSBjeF9yZWFkKHNyYW1fY2gtPmludF9tc2spOwogCWN4X3dyaXRlKHNyYW1fY2gtPmludF9tc2ssIHRtcCB8PSBfaW50cl9tc2spOwpAQCAtNzA5LDcgKzcyNyw3IEBACiAJCSAgICAgICBkZXYtPnBjaS0+aXJxKTsKIAkJZ290byBmYWlsX2lycTsKIAl9Ci0JLy8gU3RhcnQgdGhlIERNQSAgZW5naW5lCisgICAgICAgLyogU3RhcnQgdGhlIERNQSAgZW5naW5lICovCiAJdG1wID0gY3hfcmVhZChzcmFtX2NoLT5kbWFfY3RsKTsKIAljeF9zZXQoc3JhbV9jaC0+ZG1hX2N0bCwgdG1wIHwgRkxEX1ZJRF9SSVNDX0VOKTsKIApAQCAtNzQwLDcgKzc1OCw3IEBACiAJfQogCiAJZGV2LT5fY2hhbm5lbDJfdXBzdHJlYW1fc2VsZWN0ID0gY2hhbm5lbF9zZWxlY3Q7Ci0Jc3JhbV9jaCA9ICZkZXYtPnNyYW1fY2hhbm5lbHNbY2hhbm5lbF9zZWxlY3RdOworICAgICAgIHNyYW1fY2ggPSBkZXYtPmNoYW5uZWxzW2NoYW5uZWxfc2VsZWN0XS5zcmFtX2NoYW5uZWxzOwogCiAJSU5JVF9XT1JLKCZkZXYtPl9pcnFfd29ya19lbnRyeV9jaDIsIGN4MjU4MjFfdmlkdXBzX2hhbmRsZXJfY2gyKTsKIAlkZXYtPl9pcnFfcXVldWVzX2NoMiA9CkBAIC03NTEsNyArNzY5LDEwIEBACiAJCSAgICAoImN4MjU4MjE6IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCkgZm9yIFZpZGVvIEZBSUxFRCFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JLy8gNjU2L1ZJUCBTUkMgVXBzdHJlYW0gQ2hhbm5lbCBJICYgSiBhbmQgNyAtIEhvc3QgQnVzIEludGVyZmFjZSBmb3IgY2hhbm5lbCBBLUMKKyAgICAgICAvKgorCSAgNjU2L1ZJUCBTUkMgVXBzdHJlYW0gQ2hhbm5lbCBJICYgSiBhbmQgNyAtCisJICBIb3N0IEJ1cyBJbnRlcmZhY2UgZm9yIGNoYW5uZWwgQS1DCisgICAgICAgKi8KIAl0bXAgPSBjeF9yZWFkKFZJRF9DSF9NT0RFX1NFTCk7CiAJY3hfd3JpdGUoVklEX0NIX01PREVfU0VMLCB0bXAgfCAweDFCMDAwMUZGKTsKIApAQCAtNzg3LDcgKzgwOCw3IEBACiAJCSAgICAgICBzdHJfbGVuZ3RoICsgMSk7CiAJfQogCi0JLy9EZWZhdWx0IGlmIGZpbGVuYW1lIGlzIGVtcHR5IHN0cmluZworICAgICAgIC8qIERlZmF1bHQgaWYgZmlsZW5hbWUgaXMgZW1wdHkgc3RyaW5nICovCiAJaWYgKHN0cmNtcChkZXYtPmlucHV0X2ZpbGVuYW1lX2NoMiwgIiIpID09IDApIHsKIAkJaWYgKGRldi0+X2lzTlRTQ19jaDIpIHsKIAkJCWRldi0+X2ZpbGVuYW1lX2NoMiA9CkBAIC04MTIsNyArODMzLDcgQEAKIAlkZXYtPnVwc3RyZWFtX3Jpc2NidWZfc2l6ZV9jaDIgPSByaXNjX2J1ZmZlcl9zaXplICogMjsKIAlkZXYtPnVwc3RyZWFtX2RhdGFidWZfc2l6ZV9jaDIgPSBkYXRhX2ZyYW1lX3NpemUgKiAyOwogCi0JLy9BbGxvY2F0aW5nIGJ1ZmZlcnMgYW5kIHByZXBhcmUgUklTQyBwcm9ncmFtCisgICAgICAgLyogQWxsb2NhdGluZyBidWZmZXJzIGFuZCBwcmVwYXJlIFJJU0MgcHJvZ3JhbSAqLwogCXJldHZhbCA9CiAJICAgIGN4MjU4MjFfdXBzdHJlYW1fYnVmZmVyX3ByZXBhcmVfY2gyKGRldiwgc3JhbV9jaCwKIAkJCQkJCWRldi0+X2xpbmVfc2l6ZV9jaDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby11cHN0cmVhbS1jaDIuaCBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8tdXBzdHJlYW0tY2gyLmgKaW5kZXggNzNmZWVhMS4uNjIzNDA2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby11cHN0cmVhbS1jaDIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLXVwc3RyZWFtLWNoMi5oCkBAIC0zNyw3ICszNyw3IEBACiAjZGVmaW5lIFJFU0VUX1NUQVRVUyAgICAgICAgICAtMQogI2RlZmluZSBOVU1fTk9fT1BTICAgICAgICAgICAgNQogCi0vLyBQQUwgYW5kIE5UU0MgbGluZSBzaXplcyBhbmQgbnVtYmVyIG9mIGxpbmVzLgorLyogUEFMIGFuZCBOVFNDIGxpbmUgc2l6ZXMgYW5kIG51bWJlciBvZiBsaW5lcy4gKi8KICNkZWZpbmUgV0lEVEhfRDEgICAgICAgICAgICAgIDcyMAogI2RlZmluZSBOVFNDX0xJTkVTX1BFUl9GUkFNRSAgNDgwCiAjZGVmaW5lIFBBTF9MSU5FU19QRVJfRlJBTUUgICA1NzYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8tdXBzdHJlYW0uYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8tdXBzdHJlYW0uYwppbmRleCA3YTNkYWQ5Li43NTZhODIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLXVwc3RyZWFtLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby11cHN0cmVhbS5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgbGluZSwgaTsKIAlzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoID0KLQkgICAgJmRldi0+c3JhbV9jaGFubmVsc1tkZXYtPl9jaGFubmVsX3Vwc3RyZWFtX3NlbGVjdF07CisJICAgZGV2LT5jaGFubmVsc1tkZXYtPl9jaGFubmVsX3Vwc3RyZWFtX3NlbGVjdF0uc3JhbV9jaGFubmVsczsKIAlpbnQgZGlzdF9iZXR3bl9zdGFydHMgPSBicGwgKiAyOwogCiAJLyogc3luYyBpbnN0cnVjdGlvbiAqLwpAQCAtMjUzLDcgKzI1Myw3IEBACiB2b2lkIGN4MjU4MjFfc3RvcF91cHN0cmVhbV92aWRlb19jaDEoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCA9Ci0JICAgICZkZXYtPnNyYW1fY2hhbm5lbHNbVklEX1VQU1RSRUFNX1NSQU1fQ0hBTk5FTF9JXTsKKwkgICBkZXYtPmNoYW5uZWxzW1ZJRF9VUFNUUkVBTV9TUkFNX0NIQU5ORUxfSV0uc3JhbV9jaGFubmVsczsKIAl1MzIgdG1wID0gMDsKIAogCWlmICghZGV2LT5faXNfcnVubmluZykgewpAQCAtMzQ2LDIwICszNDYsMjMgQEAKIAogCWlmIChJU19FUlIobXlmaWxlKSkgewogCQljb25zdCBpbnQgb3Blbl9lcnJubyA9IC1QVFJfRVJSKG15ZmlsZSk7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMoKTogRVJST1Igb3BlbmluZyBmaWxlKCVzKSB3aXRoIGVycm5vID0gJWQhXG4iLAotCQkgICAgICAgX19mdW5jX18sIGRldi0+X2ZpbGVuYW1lLCBvcGVuX2Vycm5vKTsKKwkgICAgICAgcHJpbnRrKEtFUk5fRVJSCisJCSAgICIlcygpOiBFUlJPUiBvcGVuaW5nIGZpbGUoJXMpIHdpdGggZXJybm8gPSAlZCFcbiIsCisJCSAgIF9fZnVuY19fLCBkZXYtPl9maWxlbmFtZSwgb3Blbl9lcnJubyk7CiAJCXJldHVybiBQVFJfRVJSKG15ZmlsZSk7CiAJfSBlbHNlIHsKIAkJaWYgKCEobXlmaWxlLT5mX29wKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmlsZSBoYXMgbm8gZmlsZSBvcGVyYXRpb25zIHJlZ2lzdGVyZWQhIiwKLQkJCSAgICAgICBfX2Z1bmNfXyk7CisJCSAgICAgICBwcmludGsoS0VSTl9FUlIKKwkJCSAgICIlczogRmlsZSBoYXMgbm8gZmlsZSBvcGVyYXRpb25zIHJlZ2lzdGVyZWQhIiwKKwkJCSAgIF9fZnVuY19fKTsKIAkJCWZpbHBfY2xvc2UobXlmaWxlLCBOVUxMKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CiAKIAkJaWYgKCFteWZpbGUtPmZfb3AtPnJlYWQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZpbGUgaGFzIG5vIFJFQUQgb3BlcmF0aW9ucyByZWdpc3RlcmVkISIsCi0JCQkgICAgICAgX19mdW5jX18pOworCQkgICAgICAgcHJpbnRrKEtFUk5fRVJSCisJCQkgICAiJXM6IEZpbGUgaGFzIG5vIFJFQUQgb3BlcmF0aW9ucyByZWdpc3RlcmVkISIsCisJCQkgICBfX2Z1bmNfXyk7CiAJCQlmaWxwX2Nsb3NlKG15ZmlsZSwgTlVMTCk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQpAQCAtMzg2LDcgKzM4OSw4IEBACiAKIAkJCWlmICh2ZnNfcmVhZF9yZXR2YWwgPCBsaW5lX3NpemUpIHsKIAkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJICAgICAgICJEb25lOiBleGl0ICVzKCkgc2luY2Ugbm8gbW9yZSBieXRlcyB0byByZWFkIGZyb20gVmlkZW8gZmlsZS5cbiIsCisJCQkJICAgICAgIkRvbmU6IGV4aXQgJXMoKSBzaW5jZSBubyBtb3JlIGJ5dGVzIHRvIFwKKwkJCQkgICAgICByZWFkIGZyb20gVmlkZW8gZmlsZS5cbiIsCiAJCQkJICAgICAgIF9fZnVuY19fKTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTQxMSwxMyArNDE1LDE1IEBACiAJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY3gyNTgyMV9kZXYsIF9pcnFfd29ya19lbnRyeSk7CiAKIAlpZiAoIWRldikgewotCQlwcmludGsoS0VSTl9FUlIgIkVSUk9SICVzKCk6IHNpbmNlIGNvbnRhaW5lcl9vZih3b3JrX3N0cnVjdCkgRkFJTEVEIVxuIiwKLQkJICAgICAgIF9fZnVuY19fKTsKKwkgICAgICAgcHJpbnRrKEtFUk5fRVJSCisJCSAgICJFUlJPUiAlcygpOiBzaW5jZSBjb250YWluZXJfb2Yod29ya19zdHJ1Y3QpIEZBSUxFRCFcbiIsCisJCSAgIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAogCWN4MjU4MjFfZ2V0X2ZyYW1lKGRldiwKLQkJCSAgJmRldi0+c3JhbV9jaGFubmVsc1tkZXYtPl9jaGFubmVsX3Vwc3RyZWFtX3NlbGVjdF0pOworCQkJIGRldi0+Y2hhbm5lbHNbZGV2LT5fY2hhbm5lbF91cHN0cmVhbV9zZWxlY3RdLgorCQkJCQkgICAgICAgc3JhbV9jaGFubmVscyk7CiB9CiAKIGludCBjeDI1ODIxX29wZW5maWxlKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoKQpAQCAtNDM3LDIwICs0NDMsMjIgQEAKIAogCWlmIChJU19FUlIobXlmaWxlKSkgewogCQljb25zdCBpbnQgb3Blbl9lcnJubyA9IC1QVFJfRVJSKG15ZmlsZSk7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMoKTogRVJST1Igb3BlbmluZyBmaWxlKCVzKSB3aXRoIGVycm5vID0gJWQhXG4iLAorCSAgICAgICBwcmludGsoS0VSTl9FUlIgICIlcygpOiBFUlJPUiBvcGVuaW5nIGZpbGUoJXMpIHdpdGggZXJybm8gPSAlZCFcbiIsCiAJCSAgICAgICBfX2Z1bmNfXywgZGV2LT5fZmlsZW5hbWUsIG9wZW5fZXJybm8pOwogCQlyZXR1cm4gUFRSX0VSUihteWZpbGUpOwogCX0gZWxzZSB7CiAJCWlmICghKG15ZmlsZS0+Zl9vcCkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZpbGUgaGFzIG5vIGZpbGUgb3BlcmF0aW9ucyByZWdpc3RlcmVkISIsCi0JCQkgICAgICAgX19mdW5jX18pOworCQkgICAgICAgcHJpbnRrKEtFUk5fRVJSCisJCQkgICAiJXM6IEZpbGUgaGFzIG5vIGZpbGUgb3BlcmF0aW9ucyByZWdpc3RlcmVkISIsCisJCQkgICBfX2Z1bmNfXyk7CiAJCQlmaWxwX2Nsb3NlKG15ZmlsZSwgTlVMTCk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCiAJCWlmICghbXlmaWxlLT5mX29wLT5yZWFkKSB7Ci0JCQlwcmludGsKLQkJCSAgICAoS0VSTl9FUlIgIiVzOiBGaWxlIGhhcyBubyBSRUFEIG9wZXJhdGlvbnMgcmVnaXN0ZXJlZCEgIFJldHVybmluZy4iLAorCQkgICAgICAgcHJpbnRrKEtFUk5fRVJSCisJCQkgICAiJXM6IEZpbGUgaGFzIG5vIFJFQUQgb3BlcmF0aW9ucyByZWdpc3RlcmVkISAgXAorCQkJICAgUmV0dXJuaW5nLiIsCiAJCQkgICAgIF9fZnVuY19fKTsKIAkJCWZpbHBfY2xvc2UobXlmaWxlLCBOVUxMKTsKIAkJCXJldHVybiAtRUlPOwpAQCAtNDgwLDcgKzQ4OCw4IEBACiAKIAkJCQlpZiAodmZzX3JlYWRfcmV0dmFsIDwgbGluZV9zaXplKSB7CiAJCQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkJICAgICAgICJEb25lOiBleGl0ICVzKCkgc2luY2Ugbm8gbW9yZSBieXRlcyB0byByZWFkIGZyb20gVmlkZW8gZmlsZS5cbiIsCisJCQkJCSAgICAiRG9uZTogZXhpdCAlcygpIHNpbmNlIG5vIG1vcmUgXAorCQkJCQkgICAgYnl0ZXMgdG8gcmVhZCBmcm9tIFZpZGVvIGZpbGUuXG4iLAogCQkJCQkgICAgICAgX19mdW5jX18pOwogCQkJCQlicmVhazsKIAkJCQl9CkBAIC01MjYsNyArNTM1LDggQEAKIAogCWlmICghZGV2LT5fZG1hX3ZpcnRfYWRkcikgewogCQlwcmludGsKLQkJICAgIChLRVJOX0VSUiAiY3gyNTgyMTogRkFJTEVEIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgUmlzYyBidWZmZXIhIFJldHVybmluZy5cbiIpOworCQkgICAoS0VSTl9FUlIgImN4MjU4MjE6IEZBSUxFRCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIFJpc2MgXAorCQkgICBidWZmZXIhIFJldHVybmluZy5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTU0Nyw3ICs1NTcsOCBAQAogCiAJaWYgKCFkZXYtPl9kYXRhX2J1Zl92aXJ0X2FkZHIpIHsKIAkJcHJpbnRrCi0JCSAgICAoS0VSTl9FUlIgImN4MjU4MjE6IEZBSUxFRCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRhdGEgYnVmZmVyISBSZXR1cm5pbmcuXG4iKTsKKwkJICAgKEtFUk5fRVJSICJjeDI1ODIxOiBGQUlMRUQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBkYXRhIFwKKwkJICAgYnVmZmVyISBSZXR1cm5pbmcuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC01NzgsNyArNTg5LDcgQEAKIAkJCSAgICAgICB1MzIgc3RhdHVzKQogewogCXUzMiBpbnRfbXNrX3RtcDsKLQlzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaGFubmVsID0gJmRldi0+c3JhbV9jaGFubmVsc1tjaGFuX251bV07CisgICAgICAgc3RydWN0IHNyYW1fY2hhbm5lbCAqY2hhbm5lbCA9IGRldi0+Y2hhbm5lbHNbY2hhbl9udW1dLnNyYW1fY2hhbm5lbHM7CiAJaW50IHNpbmdsZWZpZWxkX2xpbmVzID0gTlRTQ19GSUVMRF9IRUlHSFQ7CiAJaW50IGxpbmVfc2l6ZV9pbl9ieXRlcyA9IFk0MjJfTElORV9TWjsKIAlpbnQgb2RkX3Jpc2NfcHJvZ19zaXplID0gMDsKQEAgLTY0MiwxNiArNjUzLDE2IEBACiAJfSBlbHNlIHsKIAkJaWYgKHN0YXR1cyAmIEZMRF9WSURfU1JDX1VGKQogCQkJcHJpbnRrCi0JCQkgICAgKEtFUk5fRVJSICIlczogVmlkZW8gUmVjZWl2ZWQgVW5kZXJmbG93IEVycm9yIEludGVycnVwdCFcbiIsCi0JCQkgICAgIF9fZnVuY19fKTsKKwkJCSAgIChLRVJOX0VSUiAiJXM6IFZpZGVvIFJlY2VpdmVkIFVuZGVyZmxvdyBFcnJvciBcCisJCQkgICBJbnRlcnJ1cHQhXG4iLCBfX2Z1bmNfXyk7CiAKIAkJaWYgKHN0YXR1cyAmIEZMRF9WSURfU1JDX1NZTkMpCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBWaWRlbyBSZWNlaXZlZCBTeW5jIEVycm9yIEludGVycnVwdCFcbiIsCi0JCQkgICAgICAgX19mdW5jX18pOworCQkgICAgICAgcHJpbnRrKEtFUk5fRVJSICIlczogVmlkZW8gUmVjZWl2ZWQgU3luYyBFcnJvciBcCisJCSAgICAgICBJbnRlcnJ1cHQhXG4iLCBfX2Z1bmNfXyk7CiAKIAkJaWYgKHN0YXR1cyAmIEZMRF9WSURfU1JDX09QQ19FUlIpCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBWaWRlbyBSZWNlaXZlZCBPcENvZGUgRXJyb3IgSW50ZXJydXB0IVxuIiwKLQkJCSAgICAgICBfX2Z1bmNfXyk7CisJCSAgICAgICBwcmludGsoS0VSTl9FUlIgIiVzOiBWaWRlbyBSZWNlaXZlZCBPcENvZGUgRXJyb3IgXAorCQkgICAgICAgSW50ZXJydXB0IVxuIiwgX19mdW5jX18pOwogCX0KIAogCWlmIChkZXYtPl9maWxlX3N0YXR1cyA9PSBFTkRfT0ZfRklMRSkgewpAQCAtNjc5LDcgKzY5MCw3IEBACiAKIAljaGFubmVsX251bSA9IFZJRF9VUFNUUkVBTV9TUkFNX0NIQU5ORUxfSTsKIAotCXNyYW1fY2ggPSAmZGV2LT5zcmFtX2NoYW5uZWxzW2NoYW5uZWxfbnVtXTsKKyAgICAgICBzcmFtX2NoID0gZGV2LT5jaGFubmVsc1tjaGFubmVsX251bV0uc3JhbV9jaGFubmVsczsKIAogCW1za19zdGF0ID0gY3hfcmVhZChzcmFtX2NoLT5pbnRfbXN0YXQpOwogCXZpZF9zdGF0dXMgPSBjeF9yZWFkKHNyYW1fY2gtPmludF9zdGF0KTsKQEAgLTgwMCwxNCArODExLDE1IEBACiAJfQogCiAJZGV2LT5fY2hhbm5lbF91cHN0cmVhbV9zZWxlY3QgPSBjaGFubmVsX3NlbGVjdDsKLQlzcmFtX2NoID0gJmRldi0+c3JhbV9jaGFubmVsc1tjaGFubmVsX3NlbGVjdF07CisgICAgICAgc3JhbV9jaCA9IGRldi0+Y2hhbm5lbHNbY2hhbm5lbF9zZWxlY3RdLnNyYW1fY2hhbm5lbHM7CiAKIAlJTklUX1dPUksoJmRldi0+X2lycV93b3JrX2VudHJ5LCBjeDI1ODIxX3ZpZHVwc19oYW5kbGVyKTsKIAlkZXYtPl9pcnFfcXVldWVzID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImN4MjU4MjFfd29ya3F1ZXVlIik7CiAKIAlpZiAoIWRldi0+X2lycV9xdWV1ZXMpIHsKIAkJcHJpbnRrCi0JCSAgICAoS0VSTl9FUlIgImN4MjU4MjE6IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCkgZm9yIFZpZGVvIEZBSUxFRCFcbiIpOworCQkgICAoS0VSTl9FUlIgImN4MjU4MjE6IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCkgZm9yIFwKKwkJICAgVmlkZW8gRkFJTEVEIVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAkvKiA2NTYvVklQIFNSQyBVcHN0cmVhbSBDaGFubmVsIEkgJiBKIGFuZCA3IC0gSG9zdCBCdXMgSW50ZXJmYWNlIGZvcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby11cHN0cmVhbS5oIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby11cHN0cmVhbS5oCmluZGV4IGNjOWY5MzguLjEwZGVlNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8tdXBzdHJlYW0uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLXVwc3RyZWFtLmgKQEAgLTM4LDcgKzM4LDcgQEAKICNkZWZpbmUgUkVTRVRfU1RBVFVTICAgICAgICAgIC0xCiAjZGVmaW5lIE5VTV9OT19PUFMgICAgICAgICAgICA1CiAKLS8vIFBBTCBhbmQgTlRTQyBsaW5lIHNpemVzIGFuZCBudW1iZXIgb2YgbGluZXMuCisvKiBQQUwgYW5kIE5UU0MgbGluZSBzaXplcyBhbmQgbnVtYmVyIG9mIGxpbmVzLiAqLwogI2RlZmluZSBXSURUSF9EMSAgICAgICAgICAgICAgNzIwCiAjZGVmaW5lIE5UU0NfTElORVNfUEVSX0ZSQU1FICA0ODAKICNkZWZpbmUgUEFMX0xJTkVTX1BFUl9GUkFNRSAgIDU3NgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby5jCmluZGV4IDc5MTIxMmMuLjFkNWU4NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLmMKQEAgLTQsNiArNCw5IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IENvbmV4YW50IFN5c3RlbXMgSW5jLgogICogIEF1dGhvcnMgIDxzaHUubGluQGNvbmV4YW50LmNvbT4sIDxoaWVwLmh1eW5oQGNvbmV4YW50LmNvbT4KICAqICBCYXNlZCBvbiBTdGV2ZW4gVG90aCA8c3RvdGhAbGludXh0di5vcmc+IGN4MjM4ODUgZHJpdmVyCisgKiAgUGFydHMgYWRhcHRlZC90YWtlbiBmcm9tIEVkdWFyZG8gTW9zY29zbyBSdWJpbm8KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgRWR1YXJkbyBNb3Njb3NvIFJ1YmlubyA8bW9zY29zb0BUb3BvTG9naWNhLmNvbT4KKyAqCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTI0LDcgKzI3LDcgQEAKICNpbmNsdWRlICJjeDI1ODIxLXZpZGVvLmgiCiAKIE1PRFVMRV9ERVNDUklQVElPTigidjRsMiBkcml2ZXIgbW9kdWxlIGZvciBjeDI1ODIxIGJhc2VkIFRWIGNhcmRzIik7Ci1NT0RVTEVfQVVUSE9SKCJTdGV2ZW4gVG90aCA8c3RvdGhAbGludXh0di5vcmc+Iik7CitNT0RVTEVfQVVUSE9SKCJIaWVwIEh1eW5oIDxoaWVwLmh1eW5oQGNvbmV4YW50LmNvbT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogc3RhdGljIHVuc2lnbmVkIGludCB2aWRlb19ucltdID0ge1swIC4uLiAoQ1gyNTgyMV9NQVhCT0FSRFMgLSAxKV0gPSBVTlNFVCB9OwpAQCAtNDgsNyArNTEsMTAgQEAKIG1vZHVsZV9wYXJhbSh2aWRfbGltaXQsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHZpZF9saW1pdCwgImNhcHR1cmUgbWVtb3J5IGxpbWl0IGluIG1lZ2FieXRlcyIpOwogCi1zdGF0aWMgdm9pZCBpbml0X2NvbnRyb2xzKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgY2hhbl9udW0pOworc3RhdGljIHZvaWQgY3gyNTgyMV9pbml0X2NvbnRyb2xzKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgY2hhbl9udW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHZpZGVvX2ZvcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHZpZGVvX2lvY3RsX29wczsKIAogI2RlZmluZSBGT1JNQVRfRkxBR1NfUEFDS0VEICAgICAgIDB4MDEKIApAQCAtMjExLDcgKzIxNyw3IEBACiB9CiAqLwogCi0vLyByZXNvdXJjZSBtYW5hZ2VtZW50CisvKiByZXNvdXJjZSBtYW5hZ2VtZW50ICovCiBpbnQgY3gyNTgyMV9yZXNfZ2V0KHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBzdHJ1Y3QgY3gyNTgyMV9maCAqZmgsIHVuc2lnbmVkIGludCBiaXQpCiB7CiAJZHByaW50aygxLCAiJXMoKVxuIiwgX19mdW5jX18pOwpAQCAtMjIxLDE0ICsyMjcsMTQgQEAKIAogCS8qIGlzIGl0IGZyZWU/ICovCiAJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKLQlpZiAoZGV2LT5yZXNvdXJjZXMgJiBiaXQpIHsKKyAgICAgICBpZiAoZGV2LT5jaGFubmVsc1tmaC0+Y2hhbm5lbF9pZF0ucmVzb3VyY2VzICYgYml0KSB7CiAJCS8qIG5vLCBzb21lb25lIGVsc2UgdXNlcyBpdCAqLwogCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJCXJldHVybiAwOwogCX0KIAkvKiBpdCdzIGZyZWUsIGdyYWIgaXQgKi8KIAlmaC0+cmVzb3VyY2VzIHw9IGJpdDsKLQlkZXYtPnJlc291cmNlcyB8PSBiaXQ7CisgICAgICAgZGV2LT5jaGFubmVsc1tmaC0+Y2hhbm5lbF9pZF0ucmVzb3VyY2VzIHw9IGJpdDsKIAlkcHJpbnRrKDEsICJyZXM6IGdldCAlZFxuIiwgYml0KTsKIAltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJcmV0dXJuIDE7CkBAIC0yMzksOSArMjQ1LDkgQEAKIAlyZXR1cm4gZmgtPnJlc291cmNlcyAmIGJpdDsKIH0KIAotaW50IGN4MjU4MjFfcmVzX2xvY2tlZChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgdW5zaWduZWQgaW50IGJpdCkKK2ludCBjeDI1ODIxX3Jlc19sb2NrZWQoc3RydWN0IGN4MjU4MjFfZmggKmZoLCB1bnNpZ25lZCBpbnQgYml0KQogewotCXJldHVybiBkZXYtPnJlc291cmNlcyAmIGJpdDsKKyAgICAgICByZXR1cm4gZmgtPmRldi0+Y2hhbm5lbHNbZmgtPmNoYW5uZWxfaWRdLnJlc291cmNlcyAmIGJpdDsKIH0KIAogdm9pZCBjeDI1ODIxX3Jlc19mcmVlKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBzdHJ1Y3QgY3gyNTgyMV9maCAqZmgsIHVuc2lnbmVkIGludCBiaXRzKQpAQCAtMjUxLDcgKzI1Nyw3IEBACiAKIAltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCWZoLT5yZXNvdXJjZXMgJj0gfmJpdHM7Ci0JZGV2LT5yZXNvdXJjZXMgJj0gfmJpdHM7CisgICAgICAgZGV2LT5jaGFubmVsc1tmaC0+Y2hhbm5lbF9pZF0ucmVzb3VyY2VzICY9IH5iaXRzOwogCWRwcmludGsoMSwgInJlczogcHV0ICVkXG4iLCBiaXRzKTsKIAltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiB9CkBAIC0zNTgsMTEgKzM2NCwxMSBAQAogCXN0cnVjdCBjeDI1ODIxX2RhdGEgKnRpbWVvdXRfZGF0YSA9IChzdHJ1Y3QgY3gyNTgyMV9kYXRhICopZGF0YTsKIAlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IHRpbWVvdXRfZGF0YS0+ZGV2OwogCXN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWwgPSB0aW1lb3V0X2RhdGEtPmNoYW5uZWw7Ci0Jc3RydWN0IGN4MjU4MjFfZG1hcXVldWUgKnEgPSAmZGV2LT52aWRxW2NoYW5uZWwtPmldOworICAgICAgIHN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlICpxID0gJmRldi0+Y2hhbm5lbHNbY2hhbm5lbC0+aV0udmlkcTsKIAlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JLy9jeDI1ODIxX3NyYW1fY2hhbm5lbF9kdW1wKGRldiwgY2hhbm5lbCk7CisgICAgICAgLyogY3gyNTgyMV9zcmFtX2NoYW5uZWxfZHVtcChkZXYsIGNoYW5uZWwpOyAqLwogCWN4X2NsZWFyKGNoYW5uZWwtPmRtYV9jdGwsIDB4MTEpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c2xvY2ssIGZsYWdzKTsKQEAgLTM4NCw3ICszOTAsNyBAQAogCXUzMiBjb3VudCA9IDA7CiAJaW50IGhhbmRsZWQgPSAwOwogCXUzMiBtYXNrOwotCXN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWwgPSAmZGV2LT5zcmFtX2NoYW5uZWxzW2NoYW5fbnVtXTsKKyAgICAgICBzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaGFubmVsID0gZGV2LT5jaGFubmVsc1tjaGFuX251bV0uc3JhbV9jaGFubmVsczsKIAogCW1hc2sgPSBjeF9yZWFkKGNoYW5uZWwtPmludF9tc2spOwogCWlmICgwID09IChzdGF0dXMgJiBtYXNrKSkKQEAgLTQwNCw3ICs0MTAsOCBAQAogCWlmIChzdGF0dXMgJiBGTERfVklEX0RTVF9SSVNDMSkgewogCQlzcGluX2xvY2soJmRldi0+c2xvY2spOwogCQljb3VudCA9IGN4X3JlYWQoY2hhbm5lbC0+Z3BjbnQpOwotCQljeDI1ODIxX3ZpZGVvX3dha2V1cChkZXYsICZkZXYtPnZpZHFbY2hhbm5lbC0+aV0sIGNvdW50KTsKKwkgICAgICAgY3gyNTgyMV92aWRlb193YWtldXAoZGV2LAorCQkgICAgICAgJmRldi0+Y2hhbm5lbHNbY2hhbm5lbC0+aV0udmlkcSwgY291bnQpOwogCQlzcGluX3VubG9jaygmZGV2LT5zbG9jayk7CiAJCWhhbmRsZWQrKzsKIAl9CkBAIC00MTMsOCArNDIwLDkgQEAKIAlpZiAoc3RhdHVzICYgMHgxMCkgewogCQlkcHJpbnRrKDIsICJzdG9wcGVyIHZpZGVvXG4iKTsKIAkJc3Bpbl9sb2NrKCZkZXYtPnNsb2NrKTsKLQkJY3gyNTgyMV9yZXN0YXJ0X3ZpZGVvX3F1ZXVlKGRldiwgJmRldi0+dmlkcVtjaGFubmVsLT5pXSwKLQkJCQkJICAgIGNoYW5uZWwpOworCSAgICAgICBjeDI1ODIxX3Jlc3RhcnRfdmlkZW9fcXVldWUoZGV2LAorCQkJICAgICAgICZkZXYtPmNoYW5uZWxzW2NoYW5uZWwtPmldLnZpZHEsCisJCQkJICAgICAgIGNoYW5uZWwpOwogCQlzcGluX3VubG9jaygmZGV2LT5zbG9jayk7CiAJCWhhbmRsZWQrKzsKIAl9CkBAIC00MzcsNzIgKzQ0NSw5NSBAQAogewogCWN4X2NsZWFyKFBDSV9JTlRfTVNLLCAxKTsKIAotCWlmIChkZXYtPnZpZGVvX2RldltjaGFuX251bV0pIHsKLQkJaWYgKHZpZGVvX2lzX3JlZ2lzdGVyZWQoZGV2LT52aWRlb19kZXZbY2hhbl9udW1dKSkKLQkJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+dmlkZW9fZGV2W2NoYW5fbnVtXSk7CisgICAgICAgaWYgKGRldi0+Y2hhbm5lbHNbY2hhbl9udW1dLnZpZGVvX2RldikgeworCSAgICAgICBpZiAodmlkZW9faXNfcmVnaXN0ZXJlZChkZXYtPmNoYW5uZWxzW2NoYW5fbnVtXS52aWRlb19kZXYpKQorCQkgICAgICAgdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoCisJCQkgICAgICAgZGV2LT5jaGFubmVsc1tjaGFuX251bV0udmlkZW9fZGV2KTsKIAkJZWxzZQotCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoZGV2LT52aWRlb19kZXZbY2hhbl9udW1dKTsKKwkJICAgICAgIHZpZGVvX2RldmljZV9yZWxlYXNlKAorCQkJICAgICAgIGRldi0+Y2hhbm5lbHNbY2hhbl9udW1dLnZpZGVvX2Rldik7CiAKLQkJZGV2LT52aWRlb19kZXZbY2hhbl9udW1dID0gTlVMTDsKKwkgICAgICAgZGV2LT5jaGFubmVsc1tjaGFuX251bV0udmlkZW9fZGV2ID0gTlVMTDsKIAotCQlidGN4X3Jpc2NtZW1fZnJlZShkZXYtPnBjaSwgJmRldi0+dmlkcVtjaGFuX251bV0uc3RvcHBlcik7CisJICAgICAgIGJ0Y3hfcmlzY21lbV9mcmVlKGRldi0+cGNpLAorCQkgICAgICAgJmRldi0+Y2hhbm5lbHNbY2hhbl9udW1dLnZpZHEuc3RvcHBlcik7CiAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiZGV2aWNlICVkIHJlbGVhc2VkIVxuIiwgY2hhbl9udW0pOwogCX0KIAogfQogCi1pbnQgY3gyNTgyMV92aWRlb19yZWdpc3RlcihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgaW50IGNoYW5fbnVtLAotCQkJICAgc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fdGVtcGxhdGUpCitpbnQgY3gyNTgyMV92aWRlb19yZWdpc3RlcihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldikKIHsKIAlpbnQgZXJyOworICAgICAgIGludCBpOworCisgICAgICAgc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX2RldmljZSA9IHsKKwkgICAgICAgLm5hbWUgPSAiY3gyNTgyMS12aWRlbyIsCisJICAgICAgIC5mb3BzID0gJnZpZGVvX2ZvcHMsCisJICAgICAgIC5taW5vciA9IC0xLAorCSAgICAgICAuaW9jdGxfb3BzID0gJnZpZGVvX2lvY3RsX29wcywKKwkgICAgICAgLnR2bm9ybXMgPSBDWDI1ODIxX05PUk1TLAorCSAgICAgICAuY3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQ19NLAorICAgICAgIH07CiAKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5zbG9jayk7CiAKLQkvL3ByaW50ayhLRVJOX1dBUk5JTkcgIkNoYW5uZWwgJWRcbiIsIGNoYW5fbnVtKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX1ZJRF9DSEFOTkVMX05VTSAtIDE7ICsraSkgeworCSAgICAgICBjeDI1ODIxX2luaXRfY29udHJvbHMoZGV2LCBpKTsKIAotI2lmZGVmIFRVTkVSX0ZMQUcKLQlkZXYtPnR2bm9ybSA9IHZpZGVvX3RlbXBsYXRlLT5jdXJyZW50X25vcm07Ci0jZW5kaWYKKwkgICAgICAgY3gyNTgyMV9yaXNjX3N0b3BwZXIoZGV2LT5wY2ksCisJCQkgICAgICAgJmRldi0+Y2hhbm5lbHNbaV0udmlkcS5zdG9wcGVyLAorCQkJICAgICAgIGRldi0+Y2hhbm5lbHNbaV0uc3JhbV9jaGFubmVscy0+ZG1hX2N0bCwKKwkJCSAgICAgICAweDExLCAwKTsKIAotCS8qIGluaXQgdmlkZW8gZG1hIHF1ZXVlcyAqLwotCWRldi0+dGltZW91dF9kYXRhW2NoYW5fbnVtXS5kZXYgPSBkZXY7Ci0JZGV2LT50aW1lb3V0X2RhdGFbY2hhbl9udW1dLmNoYW5uZWwgPSAmZGV2LT5zcmFtX2NoYW5uZWxzW2NoYW5fbnVtXTsKLQlJTklUX0xJU1RfSEVBRCgmZGV2LT52aWRxW2NoYW5fbnVtXS5hY3RpdmUpOwotCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZpZHFbY2hhbl9udW1dLnF1ZXVlZCk7Ci0JZGV2LT52aWRxW2NoYW5fbnVtXS50aW1lb3V0LmZ1bmN0aW9uID0gY3gyNTgyMV92aWRfdGltZW91dDsKLQlkZXYtPnZpZHFbY2hhbl9udW1dLnRpbWVvdXQuZGF0YSA9Ci0JICAgICh1bnNpZ25lZCBsb25nKSZkZXYtPnRpbWVvdXRfZGF0YVtjaGFuX251bV07Ci0JaW5pdF90aW1lcigmZGV2LT52aWRxW2NoYW5fbnVtXS50aW1lb3V0KTsKLQljeDI1ODIxX3Jpc2Nfc3RvcHBlcihkZXYtPnBjaSwgJmRldi0+dmlkcVtjaGFuX251bV0uc3RvcHBlciwKLQkJCSAgICAgZGV2LT5zcmFtX2NoYW5uZWxzW2NoYW5fbnVtXS5kbWFfY3RsLCAweDExLCAwKTsKKwkgICAgICAgZGV2LT5jaGFubmVsc1tpXS5zcmFtX2NoYW5uZWxzID0gJmN4MjU4MjFfc3JhbV9jaGFubmVsc1tpXTsKKwkgICAgICAgZGV2LT5jaGFubmVsc1tpXS52aWRlb19kZXYgPSBOVUxMOworCSAgICAgICBkZXYtPmNoYW5uZWxzW2ldLnJlc291cmNlcyA9IDA7CiAKLQkvKiByZWdpc3RlciB2NGwgZGV2aWNlcyAqLwotCWRldi0+dmlkZW9fZGV2W2NoYW5fbnVtXSA9Ci0JICAgIGN4MjU4MjFfdmRldl9pbml0KGRldiwgZGV2LT5wY2ksIHZpZGVvX3RlbXBsYXRlLCAidmlkZW8iKTsKLQllcnIgPQotCSAgICB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoZGV2LT52aWRlb19kZXZbY2hhbl9udW1dLCBWRkxfVFlQRV9HUkFCQkVSLAotCQkJCSAgdmlkZW9fbnJbZGV2LT5ucl0pOworCSAgICAgICBjeF93cml0ZShkZXYtPmNoYW5uZWxzW2ldLnNyYW1fY2hhbm5lbHMtPmludF9zdGF0LAorCQkJICAgICAgIDB4ZmZmZmZmZmYpOwogCi0JaWYgKGVyciA8IDApIHsKLQkJZ290byBmYWlsX3VucmVnOworCSAgICAgICBJTklUX0xJU1RfSEVBRCgmZGV2LT5jaGFubmVsc1tpXS52aWRxLmFjdGl2ZSk7CisJICAgICAgIElOSVRfTElTVF9IRUFEKCZkZXYtPmNoYW5uZWxzW2ldLnZpZHEucXVldWVkKTsKKworCSAgICAgICBkZXYtPmNoYW5uZWxzW2ldLnRpbWVvdXRfZGF0YS5kZXYgPSBkZXY7CisJICAgICAgIGRldi0+Y2hhbm5lbHNbaV0udGltZW91dF9kYXRhLmNoYW5uZWwgPQorCQkJCSAgICAgICAmY3gyNTgyMV9zcmFtX2NoYW5uZWxzW2ldOworCSAgICAgICBkZXYtPmNoYW5uZWxzW2ldLnZpZHEudGltZW91dC5mdW5jdGlvbiA9CisJCQkJICAgICAgIGN4MjU4MjFfdmlkX3RpbWVvdXQ7CisJICAgICAgIGRldi0+Y2hhbm5lbHNbaV0udmlkcS50aW1lb3V0LmRhdGEgPQorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpJmRldi0+Y2hhbm5lbHNbaV0udGltZW91dF9kYXRhOworCSAgICAgICBpbml0X3RpbWVyKCZkZXYtPmNoYW5uZWxzW2ldLnZpZHEudGltZW91dCk7CisKKwkgICAgICAgLyogcmVnaXN0ZXIgdjRsIGRldmljZXMgKi8KKwkgICAgICAgZGV2LT5jaGFubmVsc1tpXS52aWRlb19kZXYgPSBjeDI1ODIxX3ZkZXZfaW5pdChkZXYsCisJCSAgICAgICBkZXYtPnBjaSwgJmN4MjU4MjFfdmlkZW9fZGV2aWNlLCAidmlkZW8iKTsKKworCSAgICAgICBlcnIgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoZGV2LT5jaGFubmVsc1tpXS52aWRlb19kZXYsCisJCQkgICAgICAgVkZMX1RZUEVfR1JBQkJFUiwgdmlkZW9fbnJbZGV2LT5ucl0pOworCisJICAgICAgIGlmIChlcnIgPCAwKQorCQkgICAgICAgZ290byBmYWlsX3VucmVnOworCiAJfQotCS8vc2V0IFBDSSBpbnRlcnJ1cHQKKworICAgIC8qIHNldCBQQ0kgaW50ZXJydXB0ICovCiAJY3hfc2V0KFBDSV9JTlRfTVNLLCAweGZmKTsKIAogCS8qIGluaXRpYWwgZGV2aWNlIGNvbmZpZ3VyYXRpb24gKi8KIAltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogI2lmZGVmIFRVTkVSX0ZMQUcKKyAgICAgICBkZXYtPnR2bm9ybSA9IGN4MjU4MjFfdmlkZW9fZGV2aWNlLmN1cnJlbnRfbm9ybTsKIAljeDI1ODIxX3NldF90dm5vcm0oZGV2LCBkZXYtPnR2bm9ybSk7CiAjZW5kaWYKIAltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAKLQlpbml0X2NvbnRyb2xzKGRldiwgY2hhbl9udW0pOwogCi0JcmV0dXJuIDA7CisgICAgcmV0dXJuIDA7CiAKLSAgICAgIGZhaWxfdW5yZWc6Ci0JY3gyNTgyMV92aWRlb191bnJlZ2lzdGVyKGRldiwgY2hhbl9udW0pOworZmFpbF91bnJlZzoKKyAgICAgICBjeDI1ODIxX3ZpZGVvX3VucmVnaXN0ZXIoZGV2LCBpKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC01MzMsNyArNTY0LDcgQEAKIAl1MzIgbGluZTBfb2Zmc2V0LCBsaW5lMV9vZmZzZXQ7CiAJc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hID0gdmlkZW9idWZfdG9fZG1hKCZidWYtPnZiKTsKIAlpbnQgYnBsX2xvY2FsID0gTElORV9TSVpFX0QxOwotCWludCBjaGFubmVsX29wZW5lZCA9IDA7CisgICAgICAgaW50IGNoYW5uZWxfb3BlbmVkID0gZmgtPmNoYW5uZWxfaWQ7CiAKIAlCVUdfT04oTlVMTCA9PSBmaC0+Zm10KTsKIAlpZiAoZmgtPndpZHRoIDwgNDggfHwgZmgtPndpZHRoID4gNzIwIHx8CkBAIC01NzIsMjYgKzYwMywyOSBAQAogCQljaGFubmVsX29wZW5lZCA9IChjaGFubmVsX29wZW5lZCA8IDAKIAkJCQkgIHx8IGNoYW5uZWxfb3BlbmVkID4gNykgPyA3IDogY2hhbm5lbF9vcGVuZWQ7CiAKLQkJaWYgKGRldi0+cGl4ZWxfZm9ybWF0c1tjaGFubmVsX29wZW5lZF0gPT0gUElYRUxfRlJNVF80MTEpCisJICAgICAgIGlmIChkZXYtPmNoYW5uZWxzW2NoYW5uZWxfb3BlbmVkXQorCQkgICAgICAgLnBpeGVsX2Zvcm1hdHMgPT0gUElYRUxfRlJNVF80MTEpCiAJCQlidWYtPmJwbCA9IChidWYtPmZtdC0+ZGVwdGggKiBidWYtPnZiLndpZHRoKSA+PiAzOwogCQllbHNlCiAJCQlidWYtPmJwbCA9IChidWYtPmZtdC0+ZGVwdGggPj4gMykgKiAoYnVmLT52Yi53aWR0aCk7CiAKLQkJaWYgKGRldi0+cGl4ZWxfZm9ybWF0c1tjaGFubmVsX29wZW5lZF0gPT0gUElYRUxfRlJNVF80MTEpIHsKKwkgICAgICAgaWYgKGRldi0+Y2hhbm5lbHNbY2hhbm5lbF9vcGVuZWRdCisJCSAgICAgICAucGl4ZWxfZm9ybWF0cyA9PSBQSVhFTF9GUk1UXzQxMSkgewogCQkJYnBsX2xvY2FsID0gYnVmLT5icGw7CiAJCX0gZWxzZSB7Ci0JCQlicGxfbG9jYWwgPSBidWYtPmJwbDsJLy9EZWZhdWx0CisJCSAgICAgICBicGxfbG9jYWwgPSBidWYtPmJwbDsgICAvKiBEZWZhdWx0ICovCiAKIAkJCWlmIChjaGFubmVsX29wZW5lZCA+PSAwICYmIGNoYW5uZWxfb3BlbmVkIDw9IDcpIHsKLQkJCQlpZiAoZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bY2hhbm5lbF9vcGVuZWRdKSB7CisJCQkgICAgICAgaWYgKGRldi0+Y2hhbm5lbHNbY2hhbm5lbF9vcGVuZWRdCisJCQkJCSAgICAgICAudXNlX2NpZl9yZXNvbHV0aW9uKSB7CiAJCQkJCWlmIChkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9CRwogCQkJCQkgICAgfHwgZGV2LT50dm5vcm0gJiBWNEwyX1NURF9QQUxfREspCiAJCQkJCQlicGxfbG9jYWwgPSAzNTIgPDwgMTsKIAkJCQkJZWxzZQogCQkJCQkJYnBsX2xvY2FsID0KLQkJCQkJCSAgICBkZXYtPgotCQkJCQkJICAgIGNpZl93aWR0aFtjaGFubmVsX29wZW5lZF0gPDwKLQkJCQkJCSAgICAxOworCQkJCQkJIGRldi0+Y2hhbm5lbHNbY2hhbm5lbF9vcGVuZWRdLgorCQkJCQkJIGNpZl93aWR0aCA8PAorCQkJCQkJIDE7CiAJCQkJfQogCQkJfQogCQl9CkBAIC02ODUsNiArNzE5LDM4MyBAQAogCXJldHVybiB2aWRlb2J1Zl9tbWFwX21hcHBlcihnZXRfcXVldWUoZmgpLCB2bWEpOwogfQogCisKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKyAgICAgICBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZiA9CisJICAgY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiKTsKKyAgICAgICBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKnByZXY7CisgICAgICAgc3RydWN0IGN4MjU4MjFfZmggKmZoID0gdnEtPnByaXZfZGF0YTsKKyAgICAgICBzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisgICAgICAgc3RydWN0IGN4MjU4MjFfZG1hcXVldWUgKnEgPSAmZGV2LT5jaGFubmVsc1tmaC0+Y2hhbm5lbF9pZF0udmlkcTsKKworICAgICAgIC8qIGFkZCBqdW1wIHRvIHN0b3BwZXIgKi8KKyAgICAgICBidWYtPnJpc2Muam1wWzBdID0gY3B1X3RvX2xlMzIoUklTQ19KVU1QIHwgUklTQ19JUlExIHwgUklTQ19DTlRfSU5DKTsKKyAgICAgICBidWYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIocS0+c3RvcHBlci5kbWEpOworICAgICAgIGJ1Zi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsgICAgICAvKiBiaXRzIDYzLTMyICovCisKKyAgICAgICBkcHJpbnRrKDIsICJqbXAgdG8gc3RvcHBlciAoMHgleClcbiIsIGJ1Zi0+cmlzYy5qbXBbMV0pOworCisgICAgICAgaWYgKCFsaXN0X2VtcHR5KCZxLT5xdWV1ZWQpKSB7CisJICAgICAgIGxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5xdWV1ZWQpOworCSAgICAgICBidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworCSAgICAgICBkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBxdWV1ZWRcbiIsIGJ1ZiwKKwkJICAgICAgIGJ1Zi0+dmIuaSk7CisKKyAgICAgICB9IGVsc2UgaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKKwkgICAgICAgbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7CisJICAgICAgIGN4MjU4MjFfc3RhcnRfdmlkZW9fZG1hKGRldiwgcSwgYnVmLAorCQkJCSAgICAgICBkZXYtPmNoYW5uZWxzW2ZoLT5jaGFubmVsX2lkXS4KKwkJCQkgICAgICAgc3JhbV9jaGFubmVscyk7CisJICAgICAgIGJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJICAgICAgIGJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOworCSAgICAgICBtb2RfdGltZXIoJnEtPnRpbWVvdXQsIGppZmZpZXMgKyBCVUZGRVJfVElNRU9VVCk7CisJICAgICAgIGRwcmludGsoMiwKKwkJICAgICAgICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGZpcnN0IGFjdGl2ZSwgYnVmIGNudCA9ICVkLCBcCisJCSAgICAgICBxLT5jb3VudCA9ICVkXG4iLAorCQkgICAgICAgYnVmLCBidWYtPnZiLmksIGJ1Zi0+Y291bnQsIHEtPmNvdW50KTsKKyAgICAgICB9IGVsc2UgeworCSAgICAgICBwcmV2ID0KKwkJICAgbGlzdF9lbnRyeShxLT5hY3RpdmUucHJldiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5xdWV1ZSk7CisJICAgICAgIGlmIChwcmV2LT52Yi53aWR0aCA9PSBidWYtPnZiLndpZHRoCisJCSAgICYmIHByZXYtPnZiLmhlaWdodCA9PSBidWYtPnZiLmhlaWdodAorCQkgICAmJiBwcmV2LT5mbXQgPT0gYnVmLT5mbXQpIHsKKwkJICAgICAgIGxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOworCQkgICAgICAgYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwkJICAgICAgIGJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOworCQkgICAgICAgcHJldi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihidWYtPnJpc2MuZG1hKTsKKworCQkgICAgICAgLyogNjQgYml0IGJpdHMgNjMtMzIgKi8KKwkJICAgICAgIHByZXYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7CisJCSAgICAgICBkcHJpbnRrKDIsCisJCQkgICAgICAgIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gYXBwZW5kIHRvIGFjdGl2ZSwgXAorCQkJICAgICAgIGJ1Zi0+Y291bnQ9JWRcbiIsCisJCQkgICAgICAgYnVmLCBidWYtPnZiLmksIGJ1Zi0+Y291bnQpOworCisJICAgICAgIH0gZWxzZSB7CisJCSAgICAgICBsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+cXVldWVkKTsKKwkJICAgICAgIGJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJCSAgICAgICBkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGZpcnN0IHF1ZXVlZFxuIiwgYnVmLAorCQkJICAgICAgIGJ1Zi0+dmIuaSk7CisJICAgICAgIH0KKyAgICAgICB9CisKKyAgICAgICBpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkKKwkgICAgICAgZHByaW50aygyLCAiYWN0aXZlIHF1ZXVlIGVtcHR5IVxuIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIGN4MjU4MjFfdmlkZW9fcW9wcyA9IHsKKyAgICAgICAuYnVmX3NldHVwID0gY3gyNTgyMV9idWZmZXJfc2V0dXAsCisgICAgICAgLmJ1Zl9wcmVwYXJlID0gY3gyNTgyMV9idWZmZXJfcHJlcGFyZSwKKyAgICAgICAuYnVmX3F1ZXVlID0gYnVmZmVyX3F1ZXVlLAorICAgICAgIC5idWZfcmVsZWFzZSA9IGN4MjU4MjFfYnVmZmVyX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHZpZGVvX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CisgICAgICAgc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisgICAgICAgc3RydWN0IGN4MjU4MjFfZGV2ICpoLCAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKyAgICAgICBzdHJ1Y3QgY3gyNTgyMV9maCAqZmg7CisgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKyAgICAgICBpbnQgbWlub3IgPSB2aWRlb19kZXZkYXRhKGZpbGUpLT5taW5vcjsKKyAgICAgICBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKyAgICAgICB1MzIgcGl4X2Zvcm1hdDsKKyAgICAgICBpbnQgY2hfaWQgPSAwOworICAgICAgIGludCBpOworCisgICAgICAgZHByaW50aygxLCAib3BlbiBkZXY9JXMgdHlwZT0lc1xuIiwKKwkJICAgICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUodmRldiksCisJCSAgICAgICB2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOworCisgICAgICAgLyogYWxsb2NhdGUgKyBpbml0aWFsaXplIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KKyAgICAgICBmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksIEdGUF9LRVJORUwpOworICAgICAgIGlmIChOVUxMID09IGZoKQorCSAgICAgICByZXR1cm4gLUVOT01FTTsKKworICAgICAgIGxvY2tfa2VybmVsKCk7CisKKyAgICAgICBsaXN0X2Zvcl9lYWNoKGxpc3QsICZjeDI1ODIxX2Rldmxpc3QpCisgICAgICAgeworCSAgICAgICBoID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgY3gyNTgyMV9kZXYsIGRldmxpc3QpOworCisJICAgICAgIGZvciAoaSA9IDA7IGkgPCBNQVhfVklEX0NIQU5ORUxfTlVNOyBpKyspIHsKKwkJICAgICAgIGlmIChoLT5jaGFubmVsc1tpXS52aWRlb19kZXYgJiYKKwkJCSAgIGgtPmNoYW5uZWxzW2ldLnZpZGVvX2Rldi0+bWlub3IgPT0gbWlub3IpIHsKKwkJCSAgICAgICBkZXYgPSBoOworCQkJICAgICAgIGNoX2lkID0gaTsKKwkJCSAgICAgICB0eXBlICA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJICAgICAgIH0KKwkgICAgICAgfQorICAgICAgIH0KKworICAgICAgIGlmIChOVUxMID09IGRldikgeworCSAgICAgICB1bmxvY2tfa2VybmVsKCk7CisJICAgICAgIHJldHVybiAtRU5PREVWOworICAgICAgIH0KKworICAgICAgIGZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOworICAgICAgIGZoLT5kZXYgPSBkZXY7CisgICAgICAgZmgtPnR5cGUgPSB0eXBlOworICAgICAgIGZoLT53aWR0aCA9IDcyMDsKKyAgICBmaC0+Y2hhbm5lbF9pZCA9IGNoX2lkOworCisgICAgICAgaWYgKGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0JHIHx8IGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0RLKQorCSAgICAgICBmaC0+aGVpZ2h0ID0gNTc2OworICAgICAgIGVsc2UKKwkgICAgICAgZmgtPmhlaWdodCA9IDQ4MDsKKworICAgICAgIGRldi0+Y2hhbm5lbF9vcGVuZWQgPSBmaC0+Y2hhbm5lbF9pZDsKKyAgICAgICBwaXhfZm9ybWF0ID0KKwkgICAoZGV2LT5jaGFubmVsc1tjaF9pZF0ucGl4ZWxfZm9ybWF0cyA9PQorCSAgICBQSVhFTF9GUk1UXzQxMSkgPyBWNEwyX1BJWF9GTVRfWTQxUCA6IFY0TDJfUElYX0ZNVF9ZVVlWOworICAgICAgIGZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKHBpeF9mb3JtYXQpOworCisgICAgICAgdjRsMl9wcmlvX29wZW4oJmRldi0+Y2hhbm5lbHNbY2hfaWRdLnByaW8sICZmaC0+cHJpbyk7CisKKyAgICAgICB2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KCZmaC0+dmlkcSwgJmN4MjU4MjFfdmlkZW9fcW9wcywKKwkJCSAgICAgICZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5zbG9jaywKKwkJCSAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKKwkJCSAgICAgIFY0TDJfRklFTERfSU5URVJMQUNFRCwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3QgY3gyNTgyMV9idWZmZXIpLCBmaCk7CisKKyAgICAgICBkcHJpbnRrKDEsICJwb3N0IHZpZGVvYnVmX3F1ZXVlX2luaXQoKVxuIik7CisgICAgICAgdW5sb2NrX2tlcm5lbCgpOworCisgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZpZGVvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogZGF0YSwgc2l6ZV90IGNvdW50LAorCQkJIGxvZmZfdCAqcHBvcykKK3sKKyAgICAgICBzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKyAgICAgICBzd2l0Y2ggKGZoLT50eXBlKSB7CisgICAgICAgY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6CisJICAgICAgIGlmIChjeDI1ODIxX3Jlc19sb2NrZWQoZmgsIFJFU09VUkNFX1ZJREVPMCkpCisJCSAgICAgICByZXR1cm4gLUVCVVNZOworCisJICAgICAgIHJldHVybiB2aWRlb2J1Zl9yZWFkX29uZSgmZmgtPnZpZHEsIGRhdGEsIGNvdW50LCBwcG9zLAorCQkJCQlmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisKKyAgICAgICBkZWZhdWx0OgorCSAgICAgICBCVUcoKTsKKwkgICAgICAgcmV0dXJuIDA7CisgICAgICAgfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHZpZGVvX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCit7CisgICAgICAgc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworICAgICAgIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmOworCisgICAgICAgaWYgKGN4MjU4MjFfcmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFTzApKSB7CisJICAgICAgIC8qIHN0cmVhbWluZyBjYXB0dXJlICovCisJICAgICAgIGlmIChsaXN0X2VtcHR5KCZmaC0+dmlkcS5zdHJlYW0pKQorCQkgICAgICAgcmV0dXJuIFBPTExFUlI7CisJICAgICAgIGJ1ZiA9IGxpc3RfZW50cnkoZmgtPnZpZHEuc3RyZWFtLm5leHQsCisJCQkJc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5zdHJlYW0pOworICAgICAgIH0gZWxzZSB7CisJICAgICAgIC8qIHJlYWQoKSBjYXB0dXJlICovCisJICAgICAgIGJ1ZiA9IChzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKilmaC0+dmlkcS5yZWFkX2J1ZjsKKwkgICAgICAgaWYgKE5VTEwgPT0gYnVmKQorCQkgICAgICAgcmV0dXJuIFBPTExFUlI7CisgICAgICAgfQorCisgICAgICAgcG9sbF93YWl0KGZpbGUsICZidWYtPnZiLmRvbmUsIHdhaXQpOworICAgICAgIGlmIChidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0RPTkUgfHwgYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9FUlJPUikgeworCSAgICAgICBpZiAoYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ET05FKSB7CisJCSAgICAgICBzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwkJICAgICAgIGlmIChkZXYgJiYgZGV2LT5jaGFubmVsc1tmaC0+Y2hhbm5lbF9pZF0KKwkJCQkJICAgICAgIC51c2VfY2lmX3Jlc29sdXRpb24pIHsKKwkJCSAgICAgICB1OCBjYW1faWQgPSAqKChjaGFyICopYnVmLT52Yi5iYWRkciArIDMpOworCQkJICAgICAgIG1lbWNweSgoY2hhciAqKWJ1Zi0+dmIuYmFkZHIsCisJCQkJICAgICAgKGNoYXIgKilidWYtPnZiLmJhZGRyICsgKGZoLT53aWR0aCAqIDIpLAorCQkJCSAgICAgIChmaC0+d2lkdGggKiAyKSk7CisJCQkgICAgICAgKigoY2hhciAqKWJ1Zi0+dmIuYmFkZHIgKyAzKSA9IGNhbV9pZDsKKwkJICAgICAgIH0KKwkgICAgICAgfQorCisJICAgICAgIHJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOworICAgICAgIH0KKworICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGVvX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCit7CisgICAgICAgc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworICAgICAgIHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKworICAgICAgIC8qIHN0b3AgdGhlIHJpc2MgZW5naW5lIGFuZCBmaWZvICovCisgICAgICAgY3hfd3JpdGUoY2hhbm5lbDAtPmRtYV9jdGwsIDApOyAvKiBGSUZPIGFuZCBSSVNDIGRpc2FibGUgKi8KKworICAgICAgIC8qIHN0b3AgdmlkZW8gY2FwdHVyZSAqLworICAgICAgIGlmIChjeDI1ODIxX3Jlc19jaGVjayhmaCwgUkVTT1VSQ0VfVklERU8wKSkgeworCSAgICAgICB2aWRlb2J1Zl9xdWV1ZV9jYW5jZWwoJmZoLT52aWRxKTsKKwkgICAgICAgY3gyNTgyMV9yZXNfZnJlZShkZXYsIGZoLCBSRVNPVVJDRV9WSURFTzApOworICAgICAgIH0KKworICAgICAgIGlmIChmaC0+dmlkcS5yZWFkX2J1ZikgeworCSAgICAgICBjeDI1ODIxX2J1ZmZlcl9yZWxlYXNlKCZmaC0+dmlkcSwgZmgtPnZpZHEucmVhZF9idWYpOworCSAgICAgICBrZnJlZShmaC0+dmlkcS5yZWFkX2J1Zik7CisgICAgICAgfQorCisgICAgICAgdmlkZW9idWZfbW1hcF9mcmVlKCZmaC0+dmlkcSk7CisKKyAgICAgICB2NGwyX3ByaW9fY2xvc2UoJmRldi0+Y2hhbm5lbHNbZmgtPmNoYW5uZWxfaWRdLnByaW8sIGZoLT5wcmlvKTsKKyAgICAgICBmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworICAgICAgIGtmcmVlKGZoKTsKKworICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCit7CisgICAgICAgc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKyAgICAgICBzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKyAgICAgICBpZiAodW5saWtlbHkoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSkKKwkgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICAgICBpZiAodW5saWtlbHkoaSAhPSBmaC0+dHlwZSkpCisJICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgICAgaWYgKHVubGlrZWx5KCFjeDI1ODIxX3Jlc19nZXQoZGV2LCBmaCwKKwkJICAgICAgIGN4MjU4MjFfZ2V0X3Jlc291cmNlKGZoLCBSRVNPVVJDRV9WSURFTzApKSkpCisJICAgICAgIHJldHVybiAtRUJVU1k7CisKKyAgICAgICByZXR1cm4gdmlkZW9idWZfc3RyZWFtb24oZ2V0X3F1ZXVlKGZoKSk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCit7CisgICAgICAgc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKyAgICAgICBzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisgICAgICAgaW50IGVyciwgcmVzOworCisgICAgICAgaWYgKGZoLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgaWYgKGkgIT0gZmgtPnR5cGUpCisJICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgICAgcmVzID0gY3gyNTgyMV9nZXRfcmVzb3VyY2UoZmgsIFJFU09VUkNFX1ZJREVPMCk7CisgICAgICAgZXJyID0gdmlkZW9idWZfc3RyZWFtb2ZmKGdldF9xdWV1ZShmaCkpOworICAgICAgIGlmIChlcnIgPCAwKQorCSAgICAgICByZXR1cm4gZXJyOworICAgICAgIGN4MjU4MjFfcmVzX2ZyZWUoZGV2LCBmaCwgcmVzKTsKKyAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisgICAgICAgc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKyAgICAgICBzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworICAgICAgIGludCBlcnI7CisgICAgICAgaW50IHBpeF9mb3JtYXQgPSBQSVhFTF9GUk1UXzQyMjsKKworICAgICAgIGlmIChmaCkgeworCSAgICAgICBlcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+Y2hhbm5lbHNbZmgtPmNoYW5uZWxfaWRdCisJCQkJCSAgICAgICAucHJpbywgZmgtPnByaW8pOworCSAgICAgICBpZiAoMCAhPSBlcnIpCisJCSAgICAgICByZXR1cm4gZXJyOworICAgICAgIH0KKworICAgICAgIGRwcmludGsoMiwgIiVzKClcbiIsIF9fZnVuY19fKTsKKyAgICAgICBlcnIgPSBjeDI1ODIxX3ZpZGlvY190cnlfZm10X3ZpZF9jYXAoZmlsZSwgcHJpdiwgZik7CisKKyAgICAgICBpZiAoMCAhPSBlcnIpCisJICAgICAgIHJldHVybiBlcnI7CisKKyAgICAgICBmaC0+Zm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKKyAgICAgICBmaC0+dmlkcS5maWVsZCA9IGYtPmZtdC5waXguZmllbGQ7CisKKyAgICAgICAvKiBjaGVjayBpZiB3aWR0aCBhbmQgaGVpZ2h0IGlzIHZhbGlkIGJhc2VkIG9uIHNldCBzdGFuZGFyZCAqLworICAgICAgIGlmIChjeDI1ODIxX2lzX3ZhbGlkX3dpZHRoKGYtPmZtdC5waXgud2lkdGgsIGRldi0+dHZub3JtKSkKKwkgICAgICAgZmgtPndpZHRoID0gZi0+Zm10LnBpeC53aWR0aDsKKworICAgICAgIGlmIChjeDI1ODIxX2lzX3ZhbGlkX2hlaWdodChmLT5mbXQucGl4LmhlaWdodCwgZGV2LT50dm5vcm0pKQorCSAgICAgICBmaC0+aGVpZ2h0ID0gZi0+Zm10LnBpeC5oZWlnaHQ7CisKKyAgICAgICBpZiAoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfWTQxUCkKKwkgICAgICAgcGl4X2Zvcm1hdCA9IFBJWEVMX0ZSTVRfNDExOworICAgICAgIGVsc2UgaWYgKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1lVWVYpCisJICAgICAgIHBpeF9mb3JtYXQgPSBQSVhFTF9GUk1UXzQyMjsKKyAgICAgICBlbHNlCisJICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgICAgY3gyNTgyMV9zZXRfcGl4ZWxfZm9ybWF0KGRldiwgU1JBTV9DSDAwLCBwaXhfZm9ybWF0KTsKKworICAgICAgIC8qIGNoZWNrIGlmIGNpZiByZXNvbHV0aW9uICovCisgICAgICAgaWYgKGZoLT53aWR0aCA9PSAzMjAgfHwgZmgtPndpZHRoID09IDM1MikKKwkgICAgICAgZGV2LT5jaGFubmVsc1tmaC0+Y2hhbm5lbF9pZF0udXNlX2NpZl9yZXNvbHV0aW9uID0gMTsKKyAgICAgICBlbHNlCisJICAgICAgIGRldi0+Y2hhbm5lbHNbZmgtPmNoYW5uZWxfaWRdLnVzZV9jaWZfcmVzb2x1dGlvbiA9IDA7CisKKyAgICAgICBkZXYtPmNoYW5uZWxzW2ZoLT5jaGFubmVsX2lkXS5jaWZfd2lkdGggPSBmaC0+d2lkdGg7CisgICAgICAgbWVkdXNhX3NldF9yZXNvbHV0aW9uKGRldiwgZmgtPndpZHRoLCBTUkFNX0NIMDApOworCisgICAgICAgZHByaW50aygyLCAiJXMoKSB3aWR0aD0lZCBoZWlnaHQ9JWQgZmllbGQ9JWRcbiIsIF9fZnVuY19fLCBmaC0+d2lkdGgsCisJICAgICAgIGZoLT5oZWlnaHQsIGZoLT52aWRxLmZpZWxkKTsKKyAgICAgICBjeDI1ODIxX2NhbGxfYWxsKGRldiwgdmlkZW8sIHNfZm10LCBmKTsKKworICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpwKQoreworICAgICAgIGludCByZXRfdmFsID0gMDsKKyAgICAgICBzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworICAgICAgIHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisKKyAgICAgICByZXRfdmFsID0gdmlkZW9idWZfZHFidWYoZ2V0X3F1ZXVlKGZoKSwgcCwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCisgICAgcC0+c2VxdWVuY2UgPSBkZXYtPmNoYW5uZWxzW2ZoLT5jaGFubmVsX2lkXS52aWRxLmNvdW50OworCisgICAgICAgcmV0dXJuIHJldF92YWw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2xvZ19zdGF0dXMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYpCit7CisgICAgICAgc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKyAgICAgICBzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworICAgICAgIGNoYXIgbmFtZVszMiArIDJdOworCisgICAgICAgc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCA9IGRldi0+Y2hhbm5lbHNbZmgtPmNoYW5uZWxfaWRdCisJCQkJCQkgICAgICAgLnNyYW1fY2hhbm5lbHM7CisgICAgICAgdTMyIHRtcCA9IDA7CisKKyAgICAgICBzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcy8yIiwgZGV2LT5uYW1lKTsKKyAgICAgICBwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT0gIFNUQVJUIExPRyBTVEFUVVMgID09PT09PT09PT09PVxuIiwKKwkgICAgICBkZXYtPm5hbWUpOworICAgICAgIGN4MjU4MjFfY2FsbF9hbGwoZGV2LCBjb3JlLCBsb2dfc3RhdHVzKTsKKyAgICAgICB0bXAgPSBjeF9yZWFkKHNyYW1fY2gtPmRtYV9jdGwpOworICAgICAgIHByaW50ayhLRVJOX0lORk8gIlZpZGVvIGlucHV0IDAgaXMgJXNcbiIsCisJICAgICAgKHRtcCAmIDB4MTEpID8gInN0cmVhbWluZyIgOiAic3RvcHBlZCIpOworICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzLzI6ID09PT09PT09PT09PT0gIEVORCBMT0cgU1RBVFVTICA9PT09PT09PT09PT09XG4iLAorCSAgICAgIGRldi0+bmFtZSk7CisgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKK3sKKyAgICAgICBzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworICAgICAgIHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisgICAgICAgaW50IGVycjsKKworICAgICAgIGlmIChmaCkgeworCSAgICAgICBlcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+Y2hhbm5lbHNbZmgtPmNoYW5uZWxfaWRdCisJCQkJCSAgICAgICAucHJpbywgZmgtPnByaW8pOworCSAgICAgICBpZiAoMCAhPSBlcnIpCisJCSAgICAgICByZXR1cm4gZXJyOworICAgICAgIH0KKworICAgICAgIHJldHVybiBjeDI1ODIxX3NldF9jb250cm9sKGRldiwgY3RsLCBmaC0+Y2hhbm5lbF9pZCk7Cit9CisKIC8qIFZJREVPIElPQ1RMUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogaW50IGN4MjU4MjFfdmlkaW9jX2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKQEAgLTgyMiw4ICsxMjMzLDkgQEAKIGludCBjeDI1ODIxX3ZpZGlvY19nX3ByaW9yaXR5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmLCBlbnVtIHY0bDJfcHJpb3JpdHkgKnApCiB7CiAJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopZiktPmRldjsKKyAgICAgICBzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmOwogCi0JKnAgPSB2NGwyX3ByaW9fbWF4KCZkZXYtPnByaW8pOworICAgICAgICpwID0gdjRsMl9wcmlvX21heCgmZGV2LT5jaGFubmVsc1tmaC0+Y2hhbm5lbF9pZF0ucHJpbyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTgzMyw3ICsxMjQ1LDggQEAKIAlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmOwogCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKWYpLT5kZXY7CiAKLQlyZXR1cm4gdjRsMl9wcmlvX2NoYW5nZSgmZGV2LT5wcmlvLCAmZmgtPnByaW8sIHByaW8pOworICAgICAgIHJldHVybiB2NGwyX3ByaW9fY2hhbmdlKCZkZXYtPmNoYW5uZWxzW2ZoLT5jaGFubmVsX2lkXQorCQkJCSAgICAgICAucHJpbywgJmZoLT5wcmlvLCBwcmlvKTsKIH0KIAogI2lmZGVmIFRVTkVSX0ZMQUcKQEAgLTg0Niw3ICsxMjU5LDggQEAKIAlkcHJpbnRrKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoZmgpIHsKLQkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sIGZoLT5wcmlvKTsKKwkgICAgICAgZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPmNoYW5uZWxzW2ZoLT5jaGFubmVsX2lkXQorCQkJCQkgICAgICAgLnByaW8sIGZoLT5wcmlvKTsKIAkJaWYgKDAgIT0gZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CkBAIC05MTYsNyArMTMzMCw4IEBACiAJZHByaW50aygxLCAiJXMoJWQpXG4iLCBfX2Z1bmNfXywgaSk7CiAKIAlpZiAoZmgpIHsKLQkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sIGZoLT5wcmlvKTsKKwkgICAgICAgZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPmNoYW5uZWxzW2ZoLT5jaGFubmVsX2lkXQorCQkJCQkgICAgICAgLnByaW8sIGZoLT5wcmlvKTsKIAkJaWYgKDAgIT0gZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CkBAIC05NjcsOSArMTM4MiwxNCBAQAogCWludCBlcnI7CiAKIAlpZiAoZmgpIHsKLQkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sIGZoLT5wcmlvKTsKKwkgICAgICAgZGV2ID0gZmgtPmRldjsKKwkgICAgICAgZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPmNoYW5uZWxzW2ZoLT5jaGFubmVsX2lkXQorCQkJCQkgICAgICAgLnByaW8sIGZoLT5wcmlvKTsKIAkJaWYgKDAgIT0gZXJyKQogCQkJcmV0dXJuIGVycjsKKyAgICAgICB9IGVsc2UgeworCSAgICAgICBwcmludGsoS0VSTl9FUlIgIkludmFsaWQgZmggcG9pbnRlciFcbiIpOworCSAgICAgICByZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlyZXR1cm4gY3gyNTgyMV9zZXRfZnJlcShkZXYsIGYpOwpAQCAtMTAzMSw3ICsxNDUxLDggQEAKIAlpbnQgZXJyOwogCiAJaWYgKGZoKSB7Ci0JCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCBmaC0+cHJpbyk7CisJICAgICAgIGVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5jaGFubmVsc1tmaC0+Y2hhbm5lbF9pZF0KKwkJCQkJICAgICAgIC5wcmlvLCBmaC0+cHJpbyk7CiAJCWlmICgwICE9IGVycikKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMTA0Niw3ICsxNDY3LDcgQEAKIH0KIAogI2VuZGlmCi0vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgbm9fY3RsID0gewogCS5uYW1lID0gIjQyIiwKIAkuZmxhZ3MgPSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRCwKQEAgLTExMjksNiArMTU1MCw3IEBACiBpbnQgY3gyNTgyMV92aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdGwpCiB7CiAJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKyAgICAgICBzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwogCiAJY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsOwogCkBAIC0xMTM4LDE2ICsxNTYwLDE2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCXN3aXRjaCAoY3RsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQkJY3RsLT52YWx1ZSA9IGRldi0+Y3RsX2JyaWdodDsKKwkgICAgICAgY3RsLT52YWx1ZSA9IGRldi0+Y2hhbm5lbHNbZmgtPmNoYW5uZWxfaWRdLmN0bF9icmlnaHQ7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfSFVFOgotCQljdGwtPnZhbHVlID0gZGV2LT5jdGxfaHVlOworCSAgICAgICBjdGwtPnZhbHVlID0gZGV2LT5jaGFubmVsc1tmaC0+Y2hhbm5lbF9pZF0uY3RsX2h1ZTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJY3RsLT52YWx1ZSA9IGRldi0+Y3RsX2NvbnRyYXN0OworCSAgICAgICBjdGwtPnZhbHVlID0gZGV2LT5jaGFubmVsc1tmaC0+Y2hhbm5lbF9pZF0uY3RsX2NvbnRyYXN0OwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046Ci0JCWN0bC0+dmFsdWUgPSBkZXYtPmN0bF9zYXR1cmF0aW9uOworCSAgICAgICBjdGwtPnZhbHVlID0gZGV2LT5jaGFubmVsc1tmaC0+Y2hhbm5lbF9pZF0uY3RsX3NhdHVyYXRpb247CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKQEAgLTExODEsMTkgKzE2MDMsMTkgQEAKIAogCXN3aXRjaCAoY3RsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQkJZGV2LT5jdGxfYnJpZ2h0ID0gY3RsLT52YWx1ZTsKKwkgICAgICAgZGV2LT5jaGFubmVsc1tjaGFuX251bV0uY3RsX2JyaWdodCA9IGN0bC0+dmFsdWU7CiAJCW1lZHVzYV9zZXRfYnJpZ2h0bmVzcyhkZXYsIGN0bC0+dmFsdWUsIGNoYW5fbnVtKTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCWRldi0+Y3RsX2h1ZSA9IGN0bC0+dmFsdWU7CisJICAgICAgIGRldi0+Y2hhbm5lbHNbY2hhbl9udW1dLmN0bF9odWUgPSBjdGwtPnZhbHVlOwogCQltZWR1c2Ffc2V0X2h1ZShkZXYsIGN0bC0+dmFsdWUsIGNoYW5fbnVtKTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJZGV2LT5jdGxfY29udHJhc3QgPSBjdGwtPnZhbHVlOworCSAgICAgICBkZXYtPmNoYW5uZWxzW2NoYW5fbnVtXS5jdGxfY29udHJhc3QgPSBjdGwtPnZhbHVlOwogCQltZWR1c2Ffc2V0X2NvbnRyYXN0KGRldiwgY3RsLT52YWx1ZSwgY2hhbl9udW0pOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046Ci0JCWRldi0+Y3RsX3NhdHVyYXRpb24gPSBjdGwtPnZhbHVlOworCSAgICAgICBkZXYtPmNoYW5uZWxzW2NoYW5fbnVtXS5jdGxfc2F0dXJhdGlvbiA9IGN0bC0+dmFsdWU7CiAJCW1lZHVzYV9zZXRfc2F0dXJhdGlvbihkZXYsIGN0bC0+dmFsdWUsIGNoYW5fbnVtKTsKIAkJYnJlYWs7CiAJfQpAQCAtMTIwMyw3ICsxNjI1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBpbml0X2NvbnRyb2xzKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgY2hhbl9udW0pCitzdGF0aWMgdm9pZCBjeDI1ODIxX2luaXRfY29udHJvbHMoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIGludCBjaGFuX251bSkKIHsKIAlzdHJ1Y3QgdjRsMl9jb250cm9sIGN0cmw7CiAJaW50IGk7CkBAIC0xMjM5LDIzICsxNjYxLDI0IEBACiAJaW50IGVycjsKIAogCWlmIChmaCkgewotCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgZmgtPnByaW8pOworCSAgICAgICBlcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+Y2hhbm5lbHNbZmgtPmNoYW5uZWxfaWRdLgorCQkJCQkgICAgICAgcHJpbywgZmgtPnByaW8pOwogCQlpZiAoMCAhPSBlcnIpCiAJCQlyZXR1cm4gZXJyOwogCX0KLQkvLyBjeDI1ODIxX3ZpZGlvY19zX2Nyb3Agbm90IHN1cHBvcnRlZAorICAgICAgIC8qIGN4MjU4MjFfdmlkaW9jX3NfY3JvcCBub3Qgc3VwcG9ydGVkICovCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIGludCBjeDI1ODIxX3ZpZGlvY19nX2Nyb3Aoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2Nyb3AgKmNyb3ApCiB7Ci0JLy8gY3gyNTgyMV92aWRpb2NfZ19jcm9wIG5vdCBzdXBwb3J0ZWQKKyAgICAgICAvKiBjeDI1ODIxX3ZpZGlvY19nX2Nyb3Agbm90IHN1cHBvcnRlZCAqLwogCXJldHVybiAtRUlOVkFMOwogfQogCiBpbnQgY3gyNTgyMV92aWRpb2NfcXVlcnlzdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICogbm9ybSkKIHsKLQkvLyBtZWR1c2EgZG9lcyBub3Qgc3VwcG9ydCB2aWRlbyBzdGFuZGFyZCBzZW5zaW5nIG9mIGN1cnJlbnQgaW5wdXQKKyAgICAgICAvKiBtZWR1c2EgZG9lcyBub3Qgc3VwcG9ydCB2aWRlbyBzdGFuZGFyZCBzZW5zaW5nIG9mIGN1cnJlbnQgaW5wdXQgKi8KIAkqbm9ybSA9IENYMjU4MjFfTk9STVM7CiAKIAlyZXR1cm4gMDsKQEAgLTEyOTcsMyArMTcyMCwzMjUgQEAKIAogCXJldHVybiAwOwogfQorCitzdGF0aWMgbG9uZyB2aWRlb19pb2N0bF91cHN0cmVhbTkoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCQkJIHVuc2lnbmVkIGxvbmcgYXJnKQoreworICAgICAgIHN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKyAgICAgICBzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisgICAgICAgaW50IGNvbW1hbmQgPSAwOworICAgICAgIHN0cnVjdCB1cHN0cmVhbV91c2VyX3N0cnVjdCAqZGF0YV9mcm9tX3VzZXI7CisKKyAgICAgICBkYXRhX2Zyb21fdXNlciA9IChzdHJ1Y3QgdXBzdHJlYW1fdXNlcl9zdHJ1Y3QgKilhcmc7CisKKyAgICAgICBpZiAoIWRhdGFfZnJvbV91c2VyKSB7CisJICAgICAgIHByaW50aworCQkgICAoImN4MjU4MjEgaW4gJXMoKTogVXBzdHJlYW0gZGF0YSBpcyBJTlZBTElELiBSZXR1cm5pbmcuXG4iLAorCQkgICAgX19mdW5jX18pOworCSAgICAgICByZXR1cm4gMDsKKyAgICAgICB9CisKKyAgICAgICBjb21tYW5kID0gZGF0YV9mcm9tX3VzZXItPmNvbW1hbmQ7CisKKyAgICAgICBpZiAoY29tbWFuZCAhPSBVUFNUUkVBTV9TVEFSVF9WSURFTyAmJgorCSAgICAgICBjb21tYW5kICE9IFVQU1RSRUFNX1NUT1BfVklERU8pCisJICAgICAgIHJldHVybiAwOworCisgICAgICAgZGV2LT5pbnB1dF9maWxlbmFtZSA9IGRhdGFfZnJvbV91c2VyLT5pbnB1dF9maWxlbmFtZTsKKyAgICAgICBkZXYtPmlucHV0X2F1ZGlvZmlsZW5hbWUgPSBkYXRhX2Zyb21fdXNlci0+aW5wdXRfZmlsZW5hbWU7CisgICAgICAgZGV2LT52aWRfc3RkbmFtZSA9IGRhdGFfZnJvbV91c2VyLT52aWRfc3RkbmFtZTsKKyAgICAgICBkZXYtPnBpeGVsX2Zvcm1hdCA9IGRhdGFfZnJvbV91c2VyLT5waXhlbF9mb3JtYXQ7CisgICAgICAgZGV2LT5jaGFubmVsX3NlbGVjdCA9IGRhdGFfZnJvbV91c2VyLT5jaGFubmVsX3NlbGVjdDsKKyAgICAgICBkZXYtPmNvbW1hbmQgPSBkYXRhX2Zyb21fdXNlci0+Y29tbWFuZDsKKworICAgICAgIHN3aXRjaCAoY29tbWFuZCkgeworICAgICAgIGNhc2UgVVBTVFJFQU1fU1RBUlRfVklERU86CisJICAgICAgIGN4MjU4MjFfc3RhcnRfdXBzdHJlYW1fdmlkZW9fY2gxKGRldiwgZGF0YV9mcm9tX3VzZXIpOworCSAgICAgICBicmVhazsKKworICAgICAgIGNhc2UgVVBTVFJFQU1fU1RPUF9WSURFTzoKKwkgICAgICAgY3gyNTgyMV9zdG9wX3Vwc3RyZWFtX3ZpZGVvX2NoMShkZXYpOworCSAgICAgICBicmVhazsKKyAgICAgICB9CisKKyAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGxvbmcgdmlkZW9faW9jdGxfdXBzdHJlYW0xMChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworICAgICAgIHN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKyAgICAgICBzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisgICAgICAgaW50IGNvbW1hbmQgPSAwOworICAgICAgIHN0cnVjdCB1cHN0cmVhbV91c2VyX3N0cnVjdCAqZGF0YV9mcm9tX3VzZXI7CisKKyAgICAgICBkYXRhX2Zyb21fdXNlciA9IChzdHJ1Y3QgdXBzdHJlYW1fdXNlcl9zdHJ1Y3QgKilhcmc7CisKKyAgICAgICBpZiAoIWRhdGFfZnJvbV91c2VyKSB7CisJICAgICAgIHByaW50aworCQkgICAoImN4MjU4MjEgaW4gJXMoKTogVXBzdHJlYW0gZGF0YSBpcyBJTlZBTElELiBSZXR1cm5pbmcuXG4iLAorCQkgICAgX19mdW5jX18pOworCSAgICAgICByZXR1cm4gMDsKKyAgICAgICB9CisKKyAgICAgICBjb21tYW5kID0gZGF0YV9mcm9tX3VzZXItPmNvbW1hbmQ7CisKKyAgICAgICBpZiAoY29tbWFuZCAhPSBVUFNUUkVBTV9TVEFSVF9WSURFTyAmJgorCSAgICAgICBjb21tYW5kICE9IFVQU1RSRUFNX1NUT1BfVklERU8pCisJICAgICAgIHJldHVybiAwOworCisgICAgICAgZGV2LT5pbnB1dF9maWxlbmFtZV9jaDIgPSBkYXRhX2Zyb21fdXNlci0+aW5wdXRfZmlsZW5hbWU7CisgICAgICAgZGV2LT5pbnB1dF9hdWRpb2ZpbGVuYW1lID0gZGF0YV9mcm9tX3VzZXItPmlucHV0X2ZpbGVuYW1lOworICAgICAgIGRldi0+dmlkX3N0ZG5hbWVfY2gyID0gZGF0YV9mcm9tX3VzZXItPnZpZF9zdGRuYW1lOworICAgICAgIGRldi0+cGl4ZWxfZm9ybWF0X2NoMiA9IGRhdGFfZnJvbV91c2VyLT5waXhlbF9mb3JtYXQ7CisgICAgICAgZGV2LT5jaGFubmVsX3NlbGVjdF9jaDIgPSBkYXRhX2Zyb21fdXNlci0+Y2hhbm5lbF9zZWxlY3Q7CisgICAgICAgZGV2LT5jb21tYW5kX2NoMiA9IGRhdGFfZnJvbV91c2VyLT5jb21tYW5kOworCisgICAgICAgc3dpdGNoIChjb21tYW5kKSB7CisgICAgICAgY2FzZSBVUFNUUkVBTV9TVEFSVF9WSURFTzoKKwkgICAgICAgY3gyNTgyMV9zdGFydF91cHN0cmVhbV92aWRlb19jaDIoZGV2LCBkYXRhX2Zyb21fdXNlcik7CisJICAgICAgIGJyZWFrOworCisgICAgICAgY2FzZSBVUFNUUkVBTV9TVE9QX1ZJREVPOgorCSAgICAgICBjeDI1ODIxX3N0b3BfdXBzdHJlYW1fdmlkZW9fY2gyKGRldik7CisJICAgICAgIGJyZWFrOworICAgICAgIH0KKworICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgbG9uZyB2aWRlb19pb2N0bF91cHN0cmVhbTExKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJCSAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisgICAgICAgc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworICAgICAgIHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKyAgICAgICBpbnQgY29tbWFuZCA9IDA7CisgICAgICAgc3RydWN0IHVwc3RyZWFtX3VzZXJfc3RydWN0ICpkYXRhX2Zyb21fdXNlcjsKKworICAgICAgIGRhdGFfZnJvbV91c2VyID0gKHN0cnVjdCB1cHN0cmVhbV91c2VyX3N0cnVjdCAqKWFyZzsKKworICAgICAgIGlmICghZGF0YV9mcm9tX3VzZXIpIHsKKwkgICAgICAgcHJpbnRrCisJCSAgICgiY3gyNTgyMSBpbiAlcygpOiBVcHN0cmVhbSBkYXRhIGlzIElOVkFMSUQuIFJldHVybmluZy5cbiIsCisJCSAgICBfX2Z1bmNfXyk7CisJICAgICAgIHJldHVybiAwOworICAgICAgIH0KKworICAgICAgIGNvbW1hbmQgPSBkYXRhX2Zyb21fdXNlci0+Y29tbWFuZDsKKworICAgICAgIGlmIChjb21tYW5kICE9IFVQU1RSRUFNX1NUQVJUX0FVRElPICYmCisJICAgICAgIGNvbW1hbmQgIT0gVVBTVFJFQU1fU1RPUF9BVURJTykKKwkgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICBkZXYtPmlucHV0X2ZpbGVuYW1lID0gZGF0YV9mcm9tX3VzZXItPmlucHV0X2ZpbGVuYW1lOworICAgICAgIGRldi0+aW5wdXRfYXVkaW9maWxlbmFtZSA9IGRhdGFfZnJvbV91c2VyLT5pbnB1dF9maWxlbmFtZTsKKyAgICAgICBkZXYtPnZpZF9zdGRuYW1lID0gZGF0YV9mcm9tX3VzZXItPnZpZF9zdGRuYW1lOworICAgICAgIGRldi0+cGl4ZWxfZm9ybWF0ID0gZGF0YV9mcm9tX3VzZXItPnBpeGVsX2Zvcm1hdDsKKyAgICAgICBkZXYtPmNoYW5uZWxfc2VsZWN0ID0gZGF0YV9mcm9tX3VzZXItPmNoYW5uZWxfc2VsZWN0OworICAgICAgIGRldi0+Y29tbWFuZCA9IGRhdGFfZnJvbV91c2VyLT5jb21tYW5kOworCisgICAgICAgc3dpdGNoIChjb21tYW5kKSB7CisgICAgICAgY2FzZSBVUFNUUkVBTV9TVEFSVF9BVURJTzoKKwkgICAgICAgY3gyNTgyMV9zdGFydF91cHN0cmVhbV9hdWRpbyhkZXYsIGRhdGFfZnJvbV91c2VyKTsKKwkgICAgICAgYnJlYWs7CisKKyAgICAgICBjYXNlIFVQU1RSRUFNX1NUT1BfQVVESU86CisJICAgICAgIGN4MjU4MjFfc3RvcF91cHN0cmVhbV9hdWRpbyhkZXYpOworCSAgICAgICBicmVhazsKKyAgICAgICB9CisKKyAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGxvbmcgdmlkZW9faW9jdGxfc2V0KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisgICAgICAgc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworICAgICAgIHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKyAgICAgICBzdHJ1Y3QgZG93bnN0cmVhbV91c2VyX3N0cnVjdCAqZGF0YV9mcm9tX3VzZXI7CisgICAgICAgaW50IGNvbW1hbmQ7CisgICAgICAgaW50IHdpZHRoID0gNzIwOworICAgICAgIGludCBzZWxlY3RlZF9jaGFubmVsID0gMCwgcGl4X2Zvcm1hdCA9IDAsIGkgPSAwOworICAgICAgIGludCBjaWZfZW5hYmxlID0gMCwgY2lmX3dpZHRoID0gMDsKKyAgICAgICB1MzIgdmFsdWUgPSAwOworCisgICAgICAgZGF0YV9mcm9tX3VzZXIgPSAoc3RydWN0IGRvd25zdHJlYW1fdXNlcl9zdHJ1Y3QgKilhcmc7CisKKyAgICAgICBpZiAoIWRhdGFfZnJvbV91c2VyKSB7CisJICAgICAgIHByaW50aygKKwkgICAgICAgImN4MjU4MjEgaW4gJXMoKTogVXNlciBkYXRhIGlzIElOVkFMSUQuIFJldHVybmluZy5cbiIsCisJICAgICAgIF9fZnVuY19fKTsKKwkgICAgICAgcmV0dXJuIDA7CisgICAgICAgfQorCisgICAgICAgY29tbWFuZCA9IGRhdGFfZnJvbV91c2VyLT5jb21tYW5kOworCisgICAgICAgaWYgKGNvbW1hbmQgIT0gU0VUX1ZJREVPX1NURCAmJiBjb21tYW5kICE9IFNFVF9QSVhFTF9GT1JNQVQKKwkgICAmJiBjb21tYW5kICE9IEVOQUJMRV9DSUZfUkVTT0xVVElPTiAmJiBjb21tYW5kICE9IFJFR19SRUFECisJICAgJiYgY29tbWFuZCAhPSBSRUdfV1JJVEUgJiYgY29tbWFuZCAhPSBNRURVU0FfUkVBRAorCSAgICYmIGNvbW1hbmQgIT0gTUVEVVNBX1dSSVRFKSB7CisJICAgICAgIHJldHVybiAwOworICAgICAgIH0KKworICAgICAgIHN3aXRjaCAoY29tbWFuZCkgeworICAgICAgIGNhc2UgU0VUX1ZJREVPX1NURDoKKwkgICAgICAgZGV2LT50dm5vcm0gPQorCQkgICAhc3RyY21wKGRhdGFfZnJvbV91c2VyLT52aWRfc3RkbmFtZSwKKwkJCSAgICJQQUwiKSA/IFY0TDJfU1REX1BBTF9CRyA6IFY0TDJfU1REX05UU0NfTTsKKwkgICAgICAgbWVkdXNhX3NldF92aWRlb3N0YW5kYXJkKGRldik7CisJICAgICAgIGJyZWFrOworCisgICAgICAgY2FzZSBTRVRfUElYRUxfRk9STUFUOgorCSAgICAgICBzZWxlY3RlZF9jaGFubmVsID0gZGF0YV9mcm9tX3VzZXItPmRlY29kZXJfc2VsZWN0OworCSAgICAgICBwaXhfZm9ybWF0ID0gZGF0YV9mcm9tX3VzZXItPnBpeGVsX2Zvcm1hdDsKKworCSAgICAgICBpZiAoIShzZWxlY3RlZF9jaGFubmVsIDw9IDcgJiYgc2VsZWN0ZWRfY2hhbm5lbCA+PSAwKSkgeworCQkgICAgICAgc2VsZWN0ZWRfY2hhbm5lbCAtPSA0OworCQkgICAgICAgc2VsZWN0ZWRfY2hhbm5lbCA9IHNlbGVjdGVkX2NoYW5uZWwgJSA4OworCSAgICAgICB9CisKKwkgICAgICAgaWYgKHNlbGVjdGVkX2NoYW5uZWwgPj0gMCkKKwkJICAgICAgIGN4MjU4MjFfc2V0X3BpeGVsX2Zvcm1hdChkZXYsIHNlbGVjdGVkX2NoYW5uZWwsCisJCQkJCQlwaXhfZm9ybWF0KTsKKworCSAgICAgICBicmVhazsKKworICAgICAgIGNhc2UgRU5BQkxFX0NJRl9SRVNPTFVUSU9OOgorCSAgICAgICBzZWxlY3RlZF9jaGFubmVsID0gZGF0YV9mcm9tX3VzZXItPmRlY29kZXJfc2VsZWN0OworCSAgICAgICBjaWZfZW5hYmxlID0gZGF0YV9mcm9tX3VzZXItPmNpZl9yZXNvbHV0aW9uX2VuYWJsZTsKKwkgICAgICAgY2lmX3dpZHRoID0gZGF0YV9mcm9tX3VzZXItPmNpZl93aWR0aDsKKworCSAgICAgICBpZiAoY2lmX2VuYWJsZSkgeworCQkgICAgICAgaWYgKGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0JHCisJCQkgICB8fCBkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9ESykKKwkJCSAgICAgICB3aWR0aCA9IDM1MjsKKwkJICAgICAgIGVsc2UKKwkJCSAgICAgICB3aWR0aCA9IChjaWZfd2lkdGggPT0gMzIwCisJCQkJCXx8IGNpZl93aWR0aCA9PSAzNTIpID8gY2lmX3dpZHRoIDogMzIwOworCSAgICAgICB9CisKKwkgICAgICAgaWYgKCEoc2VsZWN0ZWRfY2hhbm5lbCA8PSA3ICYmIHNlbGVjdGVkX2NoYW5uZWwgPj0gMCkpIHsKKwkJICAgICAgIHNlbGVjdGVkX2NoYW5uZWwgLT0gNDsKKwkJICAgICAgIHNlbGVjdGVkX2NoYW5uZWwgPSBzZWxlY3RlZF9jaGFubmVsICUgODsKKwkgICAgICAgfQorCisJICAgICAgIGlmIChzZWxlY3RlZF9jaGFubmVsIDw9IDcgJiYgc2VsZWN0ZWRfY2hhbm5lbCA+PSAwKSB7CisJCSAgICAgICBkZXYtPmNoYW5uZWxzW3NlbGVjdGVkX2NoYW5uZWxdLgorCQkJICAgICAgIHVzZV9jaWZfcmVzb2x1dGlvbiA9IGNpZl9lbmFibGU7CisJCSAgICAgICBkZXYtPmNoYW5uZWxzW3NlbGVjdGVkX2NoYW5uZWxdLmNpZl93aWR0aCA9IHdpZHRoOworCSAgICAgICB9IGVsc2UgeworCQkgICAgICAgZm9yIChpID0gMDsgaSA8IFZJRF9DSEFOTkVMX05VTTsgaSsrKSB7CisJCQkgICAgICAgZGV2LT5jaGFubmVsc1tpXS51c2VfY2lmX3Jlc29sdXRpb24gPQorCQkJCSAgICAgICBjaWZfZW5hYmxlOworCQkJICAgICAgIGRldi0+Y2hhbm5lbHNbaV0uY2lmX3dpZHRoID0gd2lkdGg7CisJCSAgICAgICB9CisJICAgICAgIH0KKworCSAgICAgICBtZWR1c2Ffc2V0X3Jlc29sdXRpb24oZGV2LCB3aWR0aCwgc2VsZWN0ZWRfY2hhbm5lbCk7CisJICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgUkVHX1JFQUQ6CisJICAgICAgIGRhdGFfZnJvbV91c2VyLT5yZWdfZGF0YSA9IGN4X3JlYWQoZGF0YV9mcm9tX3VzZXItPnJlZ19hZGRyZXNzKTsKKwkgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSBSRUdfV1JJVEU6CisJICAgICAgIGN4X3dyaXRlKGRhdGFfZnJvbV91c2VyLT5yZWdfYWRkcmVzcywgZGF0YV9mcm9tX3VzZXItPnJlZ19kYXRhKTsKKwkgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSBNRURVU0FfUkVBRDoKKwkgICAgICAgdmFsdWUgPQorCQkgICBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICh1MTYpIGRhdGFfZnJvbV91c2VyLT5yZWdfYWRkcmVzcywKKwkJCQkgICAgJmRhdGFfZnJvbV91c2VyLT5yZWdfZGF0YSk7CisJICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgTUVEVVNBX1dSSVRFOgorCSAgICAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAodTE2KSBkYXRhX2Zyb21fdXNlci0+cmVnX2FkZHJlc3MsCisJCQkJIGRhdGFfZnJvbV91c2VyLT5yZWdfZGF0YSk7CisJICAgICAgIGJyZWFrOworICAgICAgIH0KKworICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgbG9uZyBjeDI1ODIxX3ZpZGVvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworICAgICAgIGludCAgcmV0ID0gMDsKKworICAgICAgIHN0cnVjdCBjeDI1ODIxX2ZoICAqZmggID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisgICAgICAgLyogY2hlY2sgdG8gc2VlIGlmIGl0J3MgdGhlIHZpZGVvIHVwc3RyZWFtICovCisgICAgICAgaWYgKGZoLT5jaGFubmVsX2lkID09IFNSQU1fQ0gwOSkgeworCSAgICAgICByZXQgPSB2aWRlb19pb2N0bF91cHN0cmVhbTkoZmlsZSwgY21kLCBhcmcpOworCSAgICAgICByZXR1cm4gcmV0OworICAgICAgIH0gZWxzZSBpZiAoZmgtPmNoYW5uZWxfaWQgPT0gU1JBTV9DSDEwKSB7CisJICAgICAgIHJldCA9IHZpZGVvX2lvY3RsX3Vwc3RyZWFtMTAoZmlsZSwgY21kLCBhcmcpOworCSAgICAgICByZXR1cm4gcmV0OworICAgICAgIH0gZWxzZSBpZiAoZmgtPmNoYW5uZWxfaWQgPT0gU1JBTV9DSDExKSB7CisJICAgICAgIHJldCA9IHZpZGVvX2lvY3RsX3Vwc3RyZWFtMTEoZmlsZSwgY21kLCBhcmcpOworCSAgICAgICByZXQgPSB2aWRlb19pb2N0bF9zZXQoZmlsZSwgY21kLCBhcmcpOworCSAgICAgICByZXR1cm4gcmV0OworICAgICAgIH0KKworICAgIHJldHVybiB2aWRlb19pb2N0bDIoZmlsZSwgY21kLCBhcmcpOworfQorCisvKiBleHBvcnRlZCBzdHVmZiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2aWRlb19mb3BzID0geworICAgICAgIC5vd25lciA9IFRISVNfTU9EVUxFLAorICAgICAgIC5vcGVuID0gdmlkZW9fb3BlbiwKKyAgICAgICAucmVsZWFzZSA9IHZpZGVvX3JlbGVhc2UsCisgICAgICAgLnJlYWQgPSB2aWRlb19yZWFkLAorICAgICAgIC5wb2xsID0gdmlkZW9fcG9sbCwKKyAgICAgICAubW1hcCA9IGN4MjU4MjFfdmlkZW9fbW1hcCwKKyAgICAgICAuaW9jdGwgPSBjeDI1ODIxX3ZpZGVvX2lvY3RsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB2aWRlb19pb2N0bF9vcHMgPSB7CisgICAgICAgLnZpZGlvY19xdWVyeWNhcCA9IGN4MjU4MjFfdmlkaW9jX3F1ZXJ5Y2FwLAorICAgICAgIC52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IGN4MjU4MjFfdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCisgICAgICAgLnZpZGlvY19nX2ZtdF92aWRfY2FwID0gY3gyNTgyMV92aWRpb2NfZ19mbXRfdmlkX2NhcCwKKyAgICAgICAudmlkaW9jX3RyeV9mbXRfdmlkX2NhcCA9IGN4MjU4MjFfdmlkaW9jX3RyeV9mbXRfdmlkX2NhcCwKKyAgICAgICAudmlkaW9jX3NfZm10X3ZpZF9jYXAgPSB2aWRpb2Nfc19mbXRfdmlkX2NhcCwKKyAgICAgICAudmlkaW9jX3JlcWJ1ZnMgPSBjeDI1ODIxX3ZpZGlvY19yZXFidWZzLAorICAgICAgIC52aWRpb2NfcXVlcnlidWYgPSBjeDI1ODIxX3ZpZGlvY19xdWVyeWJ1ZiwKKyAgICAgICAudmlkaW9jX3FidWYgPSBjeDI1ODIxX3ZpZGlvY19xYnVmLAorICAgICAgIC52aWRpb2NfZHFidWYgPSB2aWRpb2NfZHFidWYsCisjaWZkZWYgVFVORVJfRkxBRworICAgICAgIC52aWRpb2Nfc19zdGQgPSBjeDI1ODIxX3ZpZGlvY19zX3N0ZCwKKyAgICAgICAudmlkaW9jX3F1ZXJ5c3RkID0gY3gyNTgyMV92aWRpb2NfcXVlcnlzdGQsCisjZW5kaWYKKyAgICAgICAudmlkaW9jX2Nyb3BjYXAgPSBjeDI1ODIxX3ZpZGlvY19jcm9wY2FwLAorICAgICAgIC52aWRpb2Nfc19jcm9wID0gY3gyNTgyMV92aWRpb2Nfc19jcm9wLAorICAgICAgIC52aWRpb2NfZ19jcm9wID0gY3gyNTgyMV92aWRpb2NfZ19jcm9wLAorICAgICAgIC52aWRpb2NfZW51bV9pbnB1dCA9IGN4MjU4MjFfdmlkaW9jX2VudW1faW5wdXQsCisgICAgICAgLnZpZGlvY19nX2lucHV0ID0gY3gyNTgyMV92aWRpb2NfZ19pbnB1dCwKKyAgICAgICAudmlkaW9jX3NfaW5wdXQgPSBjeDI1ODIxX3ZpZGlvY19zX2lucHV0LAorICAgICAgIC52aWRpb2NfZ19jdHJsID0gY3gyNTgyMV92aWRpb2NfZ19jdHJsLAorICAgICAgIC52aWRpb2Nfc19jdHJsID0gdmlkaW9jX3NfY3RybCwKKyAgICAgICAudmlkaW9jX3F1ZXJ5Y3RybCA9IGN4MjU4MjFfdmlkaW9jX3F1ZXJ5Y3RybCwKKyAgICAgICAudmlkaW9jX3N0cmVhbW9uID0gdmlkaW9jX3N0cmVhbW9uLAorICAgICAgIC52aWRpb2Nfc3RyZWFtb2ZmID0gdmlkaW9jX3N0cmVhbW9mZiwKKyAgICAgICAudmlkaW9jX2xvZ19zdGF0dXMgPSB2aWRpb2NfbG9nX3N0YXR1cywKKyAgICAgICAudmlkaW9jX2dfcHJpb3JpdHkgPSBjeDI1ODIxX3ZpZGlvY19nX3ByaW9yaXR5LAorICAgICAgIC52aWRpb2Nfc19wcmlvcml0eSA9IGN4MjU4MjFfdmlkaW9jX3NfcHJpb3JpdHksCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCisgICAgICAgLnZpZGlvY2dtYnVmID0gY3gyNTgyMV92aWRpb2NnbWJ1ZiwKKyNlbmRpZgorI2lmZGVmIFRVTkVSX0ZMQUcKKyAgICAgICAudmlkaW9jX2dfdHVuZXIgPSBjeDI1ODIxX3ZpZGlvY19nX3R1bmVyLAorICAgICAgIC52aWRpb2Nfc190dW5lciA9IGN4MjU4MjFfdmlkaW9jX3NfdHVuZXIsCisgICAgICAgLnZpZGlvY19nX2ZyZXF1ZW5jeSA9IGN4MjU4MjFfdmlkaW9jX2dfZnJlcXVlbmN5LAorICAgICAgIC52aWRpb2Nfc19mcmVxdWVuY3kgPSBjeDI1ODIxX3ZpZGlvY19zX2ZyZXF1ZW5jeSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKyAgICAgICAudmlkaW9jX2dfcmVnaXN0ZXIgPSBjeDI1ODIxX3ZpZGlvY19nX3JlZ2lzdGVyLAorICAgICAgIC52aWRpb2Nfc19yZWdpc3RlciA9IGN4MjU4MjFfdmlkaW9jX3NfcmVnaXN0ZXIsCisjZW5kaWYKK307CisKK3N0cnVjdCB2aWRlb19kZXZpY2UgY3gyNTgyMV92aWRlb2lvY3RsX3RlbXBsYXRlID0geworCSAgICAgICAubmFtZSA9ICJjeDI1ODIxLXZpZGVvaW9jdGwiLAorCSAgICAgICAuZm9wcyA9ICZ2aWRlb19mb3BzLAorCSAgICAgICAuaW9jdGxfb3BzID0gJnZpZGVvX2lvY3RsX29wcywKKwkgICAgICAgLnR2bm9ybXMgPSBDWDI1ODIxX05PUk1TLAorCSAgICAgICAuY3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQ19NLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8uaCBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8uaAppbmRleCAwYmRkYzAyLi5jYzYwMzRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby5oCkBAIC01NCw3ICs1NCw3IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzLzA6ICIgZm10LCBkZXYtPm5hbWUsICMjIGFyZyk7XAogICAgIH0gd2hpbGUgKDApCiAKLS8vRm9yIElPQ1RMIHRvIGlkZW50aWZ5IHJ1bm5pbmcgdXBzdHJlYW0KKy8qIEZvciBJT0NUTCB0byBpZGVudGlmeSBydW5uaW5nIHVwc3RyZWFtICovCiAjZGVmaW5lIFVQU1RSRUFNX1NUQVJUX1ZJREVPICAgICAgICA3MDAKICNkZWZpbmUgVVBTVFJFQU1fU1RPUF9WSURFTyAgICAgICAgIDcwMQogI2RlZmluZSBVUFNUUkVBTV9TVEFSVF9BVURJTyAgICAgICAgNzAyCkBAIC04MCwxOSArODAsOCBAQAogZXh0ZXJuIHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWw5OwogZXh0ZXJuIHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWwxMDsKIGV4dGVybiBzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaGFubmVsMTE7Ci1leHRlcm4gc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMDsKLWV4dGVybiBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4MjU4MjFfdmlkZW9fdGVtcGxhdGUxOwotZXh0ZXJuIHN0cnVjdCB2aWRlb19kZXZpY2UgY3gyNTgyMV92aWRlb190ZW1wbGF0ZTI7Ci1leHRlcm4gc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMzsKLWV4dGVybiBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4MjU4MjFfdmlkZW9fdGVtcGxhdGU0OwotZXh0ZXJuIHN0cnVjdCB2aWRlb19kZXZpY2UgY3gyNTgyMV92aWRlb190ZW1wbGF0ZTU7Ci1leHRlcm4gc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlNjsKLWV4dGVybiBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4MjU4MjFfdmlkZW9fdGVtcGxhdGU3OwotZXh0ZXJuIHN0cnVjdCB2aWRlb19kZXZpY2UgY3gyNTgyMV92aWRlb190ZW1wbGF0ZTk7Ci1leHRlcm4gc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMTA7Ci1leHRlcm4gc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMTE7CiBleHRlcm4gc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvaW9jdGxfdGVtcGxhdGU7Ci0vL2V4dGVybiBjb25zdCB1MzIgKmN0cmxfY2xhc3Nlc1tdOworLyogZXh0ZXJuIGNvbnN0IHUzMiAqY3RybF9jbGFzc2VzW107ICovCiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgdmlkX2xpbWl0OwogCkBAIC0xMTMsNyArMTAyLDcgQEAKIGV4dGVybiBpbnQgY3gyNTgyMV9yZXNfZ2V0KHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBzdHJ1Y3QgY3gyNTgyMV9maCAqZmgsCiAJCSAgIHVuc2lnbmVkIGludCBiaXQpOwogZXh0ZXJuIGludCBjeDI1ODIxX3Jlc19jaGVjayhzdHJ1Y3QgY3gyNTgyMV9maCAqZmgsIHVuc2lnbmVkIGludCBiaXQpOwotZXh0ZXJuIGludCBjeDI1ODIxX3Jlc19sb2NrZWQoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBiaXQpOworZXh0ZXJuIGludCBjeDI1ODIxX3Jlc19sb2NrZWQoc3RydWN0IGN4MjU4MjFfZmggKmZoLCB1bnNpZ25lZCBpbnQgYml0KTsKIGV4dGVybiB2b2lkIGN4MjU4MjFfcmVzX2ZyZWUoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIHN0cnVjdCBjeDI1ODIxX2ZoICpmaCwKIAkJICAgICB1bnNpZ25lZCBpbnQgYml0cyk7CiBleHRlcm4gaW50IGN4MjU4MjFfdmlkZW9fbXV4KHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgaW5wdXQpOwpAQCAtMTI2LDggKzExNSw3IEBACiAJCQkgICAgIHVuc2lnbmVkIGludCBoZWlnaHQsIGVudW0gdjRsMl9maWVsZCBmaWVsZCk7CiBleHRlcm4gaW50IGN4MjU4MjFfdmlkZW9faXJxKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgY2hhbl9udW0sIHUzMiBzdGF0dXMpOwogZXh0ZXJuIHZvaWQgY3gyNTgyMV92aWRlb191bnJlZ2lzdGVyKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgY2hhbl9udW0pOwotZXh0ZXJuIGludCBjeDI1ODIxX3ZpZGVvX3JlZ2lzdGVyKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgY2hhbl9udW0sCi0JCQkJICBzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb190ZW1wbGF0ZSk7CitleHRlcm4gaW50IGN4MjU4MjFfdmlkZW9fcmVnaXN0ZXIoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpOwogZXh0ZXJuIGludCBjeDI1ODIxX2dldF9mb3JtYXRfc2l6ZSh2b2lkKTsKIAogZXh0ZXJuIGludCBjeDI1ODIxX2J1ZmZlcl9zZXR1cChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHVuc2lnbmVkIGludCAqY291bnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvMC5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGJlMmNjMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvMC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDM0ICswLDAgQEAKLS8qCi0gKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCi0gKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgotICogIEJhc2VkIG9uIFN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4gY3gyMzg4NSBkcml2ZXIKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKgotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY3gyNTgyMS12aWRlby5oIgotCi1zdGF0aWMgdm9pZCBidWZmZXJfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCi17Ci0Jc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWYgPQotCSAgICBjb250YWluZXJfb2YodmIsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIpOwotCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqcHJldjsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSB2cS0+cHJpdl9kYXRhOwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKLQlzdHJ1Y3QgY3gyNTgyMV9kbWFxdWV1ZSAqcSA9ICZkZXYtPnZpZHFbU1JBTV9DSDAwXTsKLQotCS8qIGFkZCBqdW1wIHRvIHN0b3BwZXIgKi8KLQlidWYtPnJpc2Muam1wWzBdID0gY3B1X3RvX2xlMzIoUklTQ19KVU1QIHwgUklTQ19JUlExIHwgUklTQ19DTlRfSU5DKTsKLQlidWYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIocS0+c3RvcHBlci5kbWEpOwotCWJ1Zi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsJLyogYml0cyA2My0zMiAqLwotCi0JZHByaW50aygyLCAiam1wIHRvIHN0b3BwZXIgKDB4JXgpXG4iLCBidWYtPnJpc2Muam1wWzFdKTsKLQotCWlmICghbGlzdF9lbXB0eSgmcS0+cXVldWVkKSkgewotCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+cXVldWVkKTsKLQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKLQkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gcXVldWVkXG4iLCBidWYsCi0JCQlidWYtPnZiLmkpOwotCi0JfSBlbHNlIGlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7Ci0JCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOwotCQljeDI1ODIxX3N0YXJ0X3ZpZGVvX2RtYShkZXYsIHEsIGJ1ZiwKLQkJCQkJJmRldi0+c3JhbV9jaGFubmVsc1tTUkFNX0NIMDBdKTsKLQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKLQkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7Ci0JCW1vZF90aW1lcigmcS0+dGltZW91dCwgamlmZmllcyArIEJVRkZFUl9USU1FT1VUKTsKLQkJZHByaW50aygyLAotCQkJIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gZmlyc3QgYWN0aXZlLCBidWYgY250ID0gJWQsIHEtPmNvdW50ID0gJWRcbiIsCi0JCQlidWYsIGJ1Zi0+dmIuaSwgYnVmLT5jb3VudCwgcS0+Y291bnQpOwotCX0gZWxzZSB7Ci0JCXByZXYgPQotCQkgICAgbGlzdF9lbnRyeShxLT5hY3RpdmUucHJldiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5xdWV1ZSk7Ci0JCWlmIChwcmV2LT52Yi53aWR0aCA9PSBidWYtPnZiLndpZHRoCi0JCSAgICAmJiBwcmV2LT52Yi5oZWlnaHQgPT0gYnVmLT52Yi5oZWlnaHQKLQkJICAgICYmIHByZXYtPmZtdCA9PSBidWYtPmZtdCkgewotCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7Ci0JCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOwotCQkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7Ci0JCQlwcmV2LT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKGJ1Zi0+cmlzYy5kbWEpOwotCi0JCQkvKiA2NCBiaXQgYml0cyA2My0zMiAqLwotCQkJcHJldi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsKLQkJCWRwcmludGsoMiwKLQkJCQkiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gYWN0aXZlLCBidWYtPmNvdW50PSVkXG4iLAotCQkJCWJ1ZiwgYnVmLT52Yi5pLCBidWYtPmNvdW50KTsKLQotCQl9IGVsc2UgewotCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPnF1ZXVlZCk7Ci0JCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOwotCQkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBxdWV1ZWRcbiIsIGJ1ZiwKLQkJCQlidWYtPnZiLmkpOwotCQl9Ci0JfQotCi0JaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKLQkJZHByaW50aygyLCAiYWN0aXZlIHF1ZXVlIGVtcHR5IVxuIik7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBjeDI1ODIxX3ZpZGVvX3FvcHMgPSB7Ci0JLmJ1Zl9zZXR1cCA9IGN4MjU4MjFfYnVmZmVyX3NldHVwLAotCS5idWZfcHJlcGFyZSA9IGN4MjU4MjFfYnVmZmVyX3ByZXBhcmUsCi0JLmJ1Zl9xdWV1ZSA9IGJ1ZmZlcl9xdWV1ZSwKLQkuYnVmX3JlbGVhc2UgPSBjeDI1ODIxX2J1ZmZlcl9yZWxlYXNlLAotfTsKLQotc3RhdGljIGludCB2aWRlb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmg7Ci0JZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JdTMyIHBpeF9mb3JtYXQ7Ci0KLQlwcmludGsoIm9wZW4gZGV2PSVzIHR5cGU9JXNcbiIsIHZpZGVvX2RldmljZV9ub2RlX25hbWUodmRldiksCi0JCXY0bDJfdHlwZV9uYW1lc1t0eXBlXSk7Ci0KLQkvKiBhbGxvY2F0ZSArIGluaXRpYWxpemUgcGVyIGZpbGVoYW5kbGUgZGF0YSAqLwotCWZoID0ga3phbGxvYyhzaXplb2YoKmZoKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gZmgpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbG9ja19rZXJuZWwoKTsKLQotCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOwotCWZoLT5kZXYgPSBkZXY7Ci0JZmgtPnR5cGUgPSB0eXBlOwotCWZoLT53aWR0aCA9IDcyMDsKLQotCWlmIChkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9CRyB8fCBkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9ESykKLQkJZmgtPmhlaWdodCA9IDU3NjsKLQllbHNlCi0JCWZoLT5oZWlnaHQgPSA0ODA7Ci0KLQlkZXYtPmNoYW5uZWxfb3BlbmVkID0gU1JBTV9DSDAwOwotCXBpeF9mb3JtYXQgPQotCSAgICAoZGV2LT5waXhlbF9mb3JtYXRzW2Rldi0+Y2hhbm5lbF9vcGVuZWRdID09Ci0JICAgICBQSVhFTF9GUk1UXzQxMSkgPyBWNEwyX1BJWF9GTVRfWTQxUCA6IFY0TDJfUElYX0ZNVF9ZVVlWOwotCWZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKHBpeF9mb3JtYXQpOwotCi0JdjRsMl9wcmlvX29wZW4oJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKLQotCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJmZoLT52aWRxLCAmY3gyNTgyMV92aWRlb19xb3BzLAotCQkJICAgICAgICZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5zbG9jaywKLQkJCSAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCi0JCQkgICAgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY3gyNTgyMV9idWZmZXIpLCBmaCk7Ci0KLQlkcHJpbnRrKDEsICJwb3N0IHZpZGVvYnVmX3F1ZXVlX2luaXQoKVxuIik7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHZpZGVvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogZGF0YSwgc2l6ZV90IGNvdW50LAotCQkJICBsb2ZmX3QgKiBwcG9zKQotewotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQotCXN3aXRjaCAoZmgtPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKLQkJaWYgKGN4MjU4MjFfcmVzX2xvY2tlZChmaC0+ZGV2LCBSRVNPVVJDRV9WSURFTzApKQotCQkJcmV0dXJuIC1FQlVTWTsKLQotCQlyZXR1cm4gdmlkZW9idWZfcmVhZF9vbmUoJmZoLT52aWRxLCBkYXRhLCBjb3VudCwgcHBvcywKLQkJCQkJIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKLQotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdmlkZW9fcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmOwotCi0JaWYgKGN4MjU4MjFfcmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFTzApKSB7Ci0JCS8qIHN0cmVhbWluZyBjYXB0dXJlICovCi0JCWlmIChsaXN0X2VtcHR5KCZmaC0+dmlkcS5zdHJlYW0pKQotCQkJcmV0dXJuIFBPTExFUlI7Ci0JCWJ1ZiA9IGxpc3RfZW50cnkoZmgtPnZpZHEuc3RyZWFtLm5leHQsCi0JCQkJIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIuc3RyZWFtKTsKLQl9IGVsc2UgewotCQkvKiByZWFkKCkgY2FwdHVyZSAqLwotCQlidWYgPSAoc3RydWN0IGN4MjU4MjFfYnVmZmVyICopZmgtPnZpZHEucmVhZF9idWY7Ci0JCWlmIChOVUxMID09IGJ1ZikKLQkJCXJldHVybiBQT0xMRVJSOwotCX0KLQotCXBvbGxfd2FpdChmaWxlLCAmYnVmLT52Yi5kb25lLCB3YWl0KTsKLQlpZiAoYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ET05FIHx8IGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRVJST1IpIHsKLQkJaWYgKGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRE9ORSkgewotCQkJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCi0JCQlpZiAoZGV2ICYmIGRldi0+dXNlX2NpZl9yZXNvbHV0aW9uW1NSQU1fQ0gwMF0pIHsKLQkJCQl1OCBjYW1faWQgPSAqKChjaGFyICopYnVmLT52Yi5iYWRkciArIDMpOwotCQkJCW1lbWNweSgoY2hhciAqKWJ1Zi0+dmIuYmFkZHIsCi0JCQkJICAgICAgIChjaGFyICopYnVmLT52Yi5iYWRkciArIChmaC0+d2lkdGggKiAyKSwKLQkJCQkgICAgICAgKGZoLT53aWR0aCAqIDIpKTsKLQkJCQkqKChjaGFyICopYnVmLT52Yi5iYWRkciArIDMpID0gY2FtX2lkOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkZW9fcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCi0JLy9zdG9wIHRoZSByaXNjIGVuZ2luZSBhbmQgZmlmbwotCWN4X3dyaXRlKGNoYW5uZWwwLT5kbWFfY3RsLCAwKTsJLyogRklGTyBhbmQgUklTQyBkaXNhYmxlICovCi0KLQkvKiBzdG9wIHZpZGVvIGNhcHR1cmUgKi8KLQlpZiAoY3gyNTgyMV9yZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPMCkpIHsKLQkJdmlkZW9idWZfcXVldWVfY2FuY2VsKCZmaC0+dmlkcSk7Ci0JCWN4MjU4MjFfcmVzX2ZyZWUoZGV2LCBmaCwgUkVTT1VSQ0VfVklERU8wKTsKLQl9Ci0KLQlpZiAoZmgtPnZpZHEucmVhZF9idWYpIHsKLQkJY3gyNTgyMV9idWZmZXJfcmVsZWFzZSgmZmgtPnZpZHEsIGZoLT52aWRxLnJlYWRfYnVmKTsKLQkJa2ZyZWUoZmgtPnZpZHEucmVhZF9idWYpOwotCX0KLQotCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPnZpZHEpOwotCi0JdjRsMl9wcmlvX2Nsb3NlKCZkZXYtPnByaW8sIGZoLT5wcmlvKTsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCWtmcmVlKGZoKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7Ci0KLQlpZiAodW5saWtlbHkoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSkgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAodW5saWtlbHkoaSAhPSBmaC0+dHlwZSkpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHVubGlrZWx5KCFjeDI1ODIxX3Jlc19nZXQoZGV2LCBmaCwgY3gyNTgyMV9nZXRfcmVzb3VyY2UoZmgsIFJFU09VUkNFX1ZJREVPMCkpKSkgewotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbihnZXRfcXVldWUoZmgpKTsKLX0KLQotc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKLQlpbnQgZXJyLCByZXM7Ci0KLQlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoaSAhPSBmaC0+dHlwZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXMgPSBjeDI1ODIxX2dldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU8wKTsKLQllcnIgPSB2aWRlb2J1Zl9zdHJlYW1vZmYoZ2V0X3F1ZXVlKGZoKSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JY3gyNTgyMV9yZXNfZnJlZShkZXYsIGZoLCByZXMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7Ci0JaW50IGVycjsKLQlpbnQgcGl4X2Zvcm1hdCA9IFBJWEVMX0ZSTVRfNDIyOwotCi0JaWYgKGZoKSB7Ci0JCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCBmaC0+cHJpbyk7Ci0JCWlmICgwICE9IGVycikKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JZHByaW50aygyLCAiJXMoKVxuIiwgX19mdW5jX18pOwotCWVyciA9IGN4MjU4MjFfdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBwcml2LCBmKTsKLQotCWlmICgwICE9IGVycikKLQkJcmV0dXJuIGVycjsKLQotCWZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpOwotCWZoLT52aWRxLmZpZWxkID0gZi0+Zm10LnBpeC5maWVsZDsKLQotCS8vIGNoZWNrIGlmIHdpZHRoIGFuZCBoZWlnaHQgaXMgdmFsaWQgYmFzZWQgb24gc2V0IHN0YW5kYXJkCi0JaWYgKGN4MjU4MjFfaXNfdmFsaWRfd2lkdGgoZi0+Zm10LnBpeC53aWR0aCwgZGV2LT50dm5vcm0pKSB7Ci0JCWZoLT53aWR0aCA9IGYtPmZtdC5waXgud2lkdGg7Ci0JfQotCi0JaWYgKGN4MjU4MjFfaXNfdmFsaWRfaGVpZ2h0KGYtPmZtdC5waXguaGVpZ2h0LCBkZXYtPnR2bm9ybSkpIHsKLQkJZmgtPmhlaWdodCA9IGYtPmZtdC5waXguaGVpZ2h0OwotCX0KLQotCWlmIChmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZNDFQKQotCQlwaXhfZm9ybWF0ID0gUElYRUxfRlJNVF80MTE7Ci0JZWxzZSBpZiAoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfWVVZVikKLQkJcGl4X2Zvcm1hdCA9IFBJWEVMX0ZSTVRfNDIyOwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQljeDI1ODIxX3NldF9waXhlbF9mb3JtYXQoZGV2LCBTUkFNX0NIMDAsIHBpeF9mb3JtYXQpOwotCi0JLy8gY2hlY2sgaWYgY2lmIHJlc29sdXRpb24KLQlpZiAoZmgtPndpZHRoID09IDMyMCB8fCBmaC0+d2lkdGggPT0gMzUyKSB7Ci0JCWRldi0+dXNlX2NpZl9yZXNvbHV0aW9uW1NSQU1fQ0gwMF0gPSAxOwotCX0gZWxzZSB7Ci0JCWRldi0+dXNlX2NpZl9yZXNvbHV0aW9uW1NSQU1fQ0gwMF0gPSAwOwotCX0KLQlkZXYtPmNpZl93aWR0aFtTUkFNX0NIMDBdID0gZmgtPndpZHRoOwotCW1lZHVzYV9zZXRfcmVzb2x1dGlvbihkZXYsIGZoLT53aWR0aCwgU1JBTV9DSDAwKTsKLQotCWRwcmludGsoMiwgIiVzKCkgd2lkdGg9JWQgaGVpZ2h0PSVkIGZpZWxkPSVkXG4iLCBfX2Z1bmNfXywgZmgtPndpZHRoLAotCQlmaC0+aGVpZ2h0LCBmaC0+dmlkcS5maWVsZCk7Ci0JY3gyNTgyMV9jYWxsX2FsbChkZXYsIHZpZGVvLCBzX2ZtdCwgZik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqcCkKLXsKLQlpbnQgcmV0X3ZhbCA9IDA7Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OwotCi0JcmV0X3ZhbCA9IHZpZGVvYnVmX2RxYnVmKGdldF9xdWV1ZShmaCksIHAsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKLQotCXAtPnNlcXVlbmNlID0gZGV2LT52aWRxW1NSQU1fQ0gwMF0uY291bnQ7Ci0KLQlyZXR1cm4gcmV0X3ZhbDsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfbG9nX3N0YXR1cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdikKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OwotCWNoYXIgbmFtZVszMiArIDJdOwotCi0Jc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCA9ICZkZXYtPnNyYW1fY2hhbm5lbHNbU1JBTV9DSDAwXTsKLQl1MzIgdG1wID0gMDsKLQotCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzLzIiLCBkZXYtPm5hbWUpOwotCXByaW50ayhLRVJOX0lORk8gIiVzLzI6ID09PT09PT09PT09PSAgU1RBUlQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09XG4iLAotCSAgICAgICBkZXYtPm5hbWUpOwotCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCBjb3JlLCBsb2dfc3RhdHVzKTsKLQl0bXAgPSBjeF9yZWFkKHNyYW1fY2gtPmRtYV9jdGwpOwotCXByaW50ayhLRVJOX0lORk8gIlZpZGVvIGlucHV0IDAgaXMgJXNcbiIsCi0JICAgICAgICh0bXAgJiAweDExKSA/ICJzdHJlYW1pbmciIDogInN0b3BwZWQiKTsKLQlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT09ICBFTkQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09PVxuIiwKLQkgICAgICAgZGV2LT5uYW1lKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7Ci0JaW50IGVycjsKLQotCWlmIChmaCkgewotCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgZmgtPnByaW8pOwotCQlpZiAoMCAhPSBlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiBjeDI1ODIxX3NldF9jb250cm9sKGRldiwgY3RsLCBTUkFNX0NIMDApOwotfQotCi0vLyBleHBvcnRlZCBzdHVmZgotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2aWRlb19mb3BzID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5vcGVuID0gdmlkZW9fb3BlbiwKLQkucmVsZWFzZSA9IHZpZGVvX3JlbGVhc2UsCi0JLnJlYWQgPSB2aWRlb19yZWFkLAotCS5wb2xsID0gdmlkZW9fcG9sbCwKLQkubW1hcCA9IGN4MjU4MjFfdmlkZW9fbW1hcCwKLQkuaW9jdGwgPSB2aWRlb19pb2N0bDIsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHZpZGVvX2lvY3RsX29wcyA9IHsKLQkudmlkaW9jX3F1ZXJ5Y2FwID0gY3gyNTgyMV92aWRpb2NfcXVlcnljYXAsCi0JLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwID0gY3gyNTgyMV92aWRpb2NfZW51bV9mbXRfdmlkX2NhcCwKLQkudmlkaW9jX2dfZm10X3ZpZF9jYXAgPSBjeDI1ODIxX3ZpZGlvY19nX2ZtdF92aWRfY2FwLAotCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwID0gY3gyNTgyMV92aWRpb2NfdHJ5X2ZtdF92aWRfY2FwLAotCS52aWRpb2Nfc19mbXRfdmlkX2NhcCA9IHZpZGlvY19zX2ZtdF92aWRfY2FwLAotCS52aWRpb2NfcmVxYnVmcyA9IGN4MjU4MjFfdmlkaW9jX3JlcWJ1ZnMsCi0JLnZpZGlvY19xdWVyeWJ1ZiA9IGN4MjU4MjFfdmlkaW9jX3F1ZXJ5YnVmLAotCS52aWRpb2NfcWJ1ZiA9IGN4MjU4MjFfdmlkaW9jX3FidWYsCi0JLnZpZGlvY19kcWJ1ZiA9IHZpZGlvY19kcWJ1ZiwKLSNpZmRlZiBUVU5FUl9GTEFHCi0JLnZpZGlvY19zX3N0ZCA9IGN4MjU4MjFfdmlkaW9jX3Nfc3RkLAotCS52aWRpb2NfcXVlcnlzdGQgPSBjeDI1ODIxX3ZpZGlvY19xdWVyeXN0ZCwKLSNlbmRpZgotCS52aWRpb2NfY3JvcGNhcCA9IGN4MjU4MjFfdmlkaW9jX2Nyb3BjYXAsCi0JLnZpZGlvY19zX2Nyb3AgPSBjeDI1ODIxX3ZpZGlvY19zX2Nyb3AsCi0JLnZpZGlvY19nX2Nyb3AgPSBjeDI1ODIxX3ZpZGlvY19nX2Nyb3AsCi0JLnZpZGlvY19lbnVtX2lucHV0ID0gY3gyNTgyMV92aWRpb2NfZW51bV9pbnB1dCwKLQkudmlkaW9jX2dfaW5wdXQgPSBjeDI1ODIxX3ZpZGlvY19nX2lucHV0LAotCS52aWRpb2Nfc19pbnB1dCA9IGN4MjU4MjFfdmlkaW9jX3NfaW5wdXQsCi0JLnZpZGlvY19nX2N0cmwgPSBjeDI1ODIxX3ZpZGlvY19nX2N0cmwsCi0JLnZpZGlvY19zX2N0cmwgPSB2aWRpb2Nfc19jdHJsLAotCS52aWRpb2NfcXVlcnljdHJsID0gY3gyNTgyMV92aWRpb2NfcXVlcnljdHJsLAotCS52aWRpb2Nfc3RyZWFtb24gPSB2aWRpb2Nfc3RyZWFtb24sCi0JLnZpZGlvY19zdHJlYW1vZmYgPSB2aWRpb2Nfc3RyZWFtb2ZmLAotCS52aWRpb2NfbG9nX3N0YXR1cyA9IHZpZGlvY19sb2dfc3RhdHVzLAotCS52aWRpb2NfZ19wcmlvcml0eSA9IGN4MjU4MjFfdmlkaW9jX2dfcHJpb3JpdHksCi0JLnZpZGlvY19zX3ByaW9yaXR5ID0gY3gyNTgyMV92aWRpb2Nfc19wcmlvcml0eSwKLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLQkudmlkaW9jZ21idWYgPSBjeDI1ODIxX3ZpZGlvY2dtYnVmLAotI2VuZGlmCi0jaWZkZWYgVFVORVJfRkxBRwotCS52aWRpb2NfZ190dW5lciA9IGN4MjU4MjFfdmlkaW9jX2dfdHVuZXIsCi0JLnZpZGlvY19zX3R1bmVyID0gY3gyNTgyMV92aWRpb2Nfc190dW5lciwKLQkudmlkaW9jX2dfZnJlcXVlbmN5ID0gY3gyNTgyMV92aWRpb2NfZ19mcmVxdWVuY3ksCi0JLnZpZGlvY19zX2ZyZXF1ZW5jeSA9IGN4MjU4MjFfdmlkaW9jX3NfZnJlcXVlbmN5LAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwotCS52aWRpb2NfZ19yZWdpc3RlciA9IGN4MjU4MjFfdmlkaW9jX2dfcmVnaXN0ZXIsCi0JLnZpZGlvY19zX3JlZ2lzdGVyID0gY3gyNTgyMV92aWRpb2Nfc19yZWdpc3RlciwKLSNlbmRpZgotfTsKLQotc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMCA9IHsKLQkubmFtZSA9ICJjeDI1ODIxLXZpZGVvIiwKLQkuZm9wcyA9ICZ2aWRlb19mb3BzLAotCS5pb2N0bF9vcHMgPSAmdmlkZW9faW9jdGxfb3BzLAotCS50dm5vcm1zID0gQ1gyNTgyMV9OT1JNUywKLQkuY3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQ19NLAotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8xLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvMS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGJhZTYyNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvMS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDM0ICswLDAgQEAKLS8qCi0gKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCi0gKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgotICogIEJhc2VkIG9uIFN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4gY3gyMzg4NSBkcml2ZXIKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKgotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY3gyNTgyMS12aWRlby5oIgotCi1zdGF0aWMgdm9pZCBidWZmZXJfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCi17Ci0Jc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWYgPQotCSAgICBjb250YWluZXJfb2YodmIsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIpOwotCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqcHJldjsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSB2cS0+cHJpdl9kYXRhOwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKLQlzdHJ1Y3QgY3gyNTgyMV9kbWFxdWV1ZSAqcSA9ICZkZXYtPnZpZHFbU1JBTV9DSDAxXTsKLQotCS8qIGFkZCBqdW1wIHRvIHN0b3BwZXIgKi8KLQlidWYtPnJpc2Muam1wWzBdID0gY3B1X3RvX2xlMzIoUklTQ19KVU1QIHwgUklTQ19JUlExIHwgUklTQ19DTlRfSU5DKTsKLQlidWYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIocS0+c3RvcHBlci5kbWEpOwotCWJ1Zi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsJLyogYml0cyA2My0zMiAqLwotCi0JZHByaW50aygyLCAiam1wIHRvIHN0b3BwZXIgKDB4JXgpXG4iLCBidWYtPnJpc2Muam1wWzFdKTsKLQotCWlmICghbGlzdF9lbXB0eSgmcS0+cXVldWVkKSkgewotCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+cXVldWVkKTsKLQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKLQkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gcXVldWVkXG4iLCBidWYsCi0JCQlidWYtPnZiLmkpOwotCi0JfSBlbHNlIGlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7Ci0JCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOwotCQljeDI1ODIxX3N0YXJ0X3ZpZGVvX2RtYShkZXYsIHEsIGJ1ZiwKLQkJCQkJJmRldi0+c3JhbV9jaGFubmVsc1tTUkFNX0NIMDFdKTsKLQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKLQkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7Ci0JCW1vZF90aW1lcigmcS0+dGltZW91dCwgamlmZmllcyArIEJVRkZFUl9USU1FT1VUKTsKLQkJZHByaW50aygyLAotCQkJIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gZmlyc3QgYWN0aXZlLCBidWYgY250ID0gJWQsIHEtPmNvdW50ID0gJWRcbiIsCi0JCQlidWYsIGJ1Zi0+dmIuaSwgYnVmLT5jb3VudCwgcS0+Y291bnQpOwotCX0gZWxzZSB7Ci0JCXByZXYgPQotCQkgICAgbGlzdF9lbnRyeShxLT5hY3RpdmUucHJldiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5xdWV1ZSk7Ci0JCWlmIChwcmV2LT52Yi53aWR0aCA9PSBidWYtPnZiLndpZHRoCi0JCSAgICAmJiBwcmV2LT52Yi5oZWlnaHQgPT0gYnVmLT52Yi5oZWlnaHQKLQkJICAgICYmIHByZXYtPmZtdCA9PSBidWYtPmZtdCkgewotCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7Ci0JCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOwotCQkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7Ci0JCQlwcmV2LT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKGJ1Zi0+cmlzYy5kbWEpOwotCi0JCQkvKiA2NCBiaXQgYml0cyA2My0zMiAqLwotCQkJcHJldi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsKLQkJCWRwcmludGsoMiwKLQkJCQkiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gYWN0aXZlLCBidWYtPmNvdW50PSVkXG4iLAotCQkJCWJ1ZiwgYnVmLT52Yi5pLCBidWYtPmNvdW50KTsKLQotCQl9IGVsc2UgewotCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPnF1ZXVlZCk7Ci0JCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOwotCQkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBxdWV1ZWRcbiIsIGJ1ZiwKLQkJCQlidWYtPnZiLmkpOwotCQl9Ci0JfQotCi0JaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKLQkJZHByaW50aygyLCAiYWN0aXZlIHF1ZXVlIGVtcHR5IVxuIik7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBjeDI1ODIxX3ZpZGVvX3FvcHMgPSB7Ci0JLmJ1Zl9zZXR1cCA9IGN4MjU4MjFfYnVmZmVyX3NldHVwLAotCS5idWZfcHJlcGFyZSA9IGN4MjU4MjFfYnVmZmVyX3ByZXBhcmUsCi0JLmJ1Zl9xdWV1ZSA9IGJ1ZmZlcl9xdWV1ZSwKLQkuYnVmX3JlbGVhc2UgPSBjeDI1ODIxX2J1ZmZlcl9yZWxlYXNlLAotfTsKLQotc3RhdGljIGludCB2aWRlb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmg7Ci0JZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JdTMyIHBpeF9mb3JtYXQ7Ci0KLQlwcmludGsoIm9wZW4gZGV2PSVzIHR5cGU9JXNcbiIsIHZpZGVvX2RldmljZV9ub2RlX25hbWUodmRldiksCi0JCXY0bDJfdHlwZV9uYW1lc1t0eXBlXSk7Ci0KLQkvKiBhbGxvY2F0ZSArIGluaXRpYWxpemUgcGVyIGZpbGVoYW5kbGUgZGF0YSAqLwotCWZoID0ga3phbGxvYyhzaXplb2YoKmZoKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gZmgpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbG9ja19rZXJuZWwoKTsKLQotCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOwotCWZoLT5kZXYgPSBkZXY7Ci0JZmgtPnR5cGUgPSB0eXBlOwotCWZoLT53aWR0aCA9IDcyMDsKLQotCWlmIChkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9CRyB8fCBkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9ESykKLQkJZmgtPmhlaWdodCA9IDU3NjsKLQllbHNlCi0JCWZoLT5oZWlnaHQgPSA0ODA7Ci0KLQlkZXYtPmNoYW5uZWxfb3BlbmVkID0gU1JBTV9DSDAxOwotCXBpeF9mb3JtYXQgPQotCSAgICAoZGV2LT5waXhlbF9mb3JtYXRzW2Rldi0+Y2hhbm5lbF9vcGVuZWRdID09Ci0JICAgICBQSVhFTF9GUk1UXzQxMSkgPyBWNEwyX1BJWF9GTVRfWTQxUCA6IFY0TDJfUElYX0ZNVF9ZVVlWOwotCWZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKHBpeF9mb3JtYXQpOwotCi0JdjRsMl9wcmlvX29wZW4oJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKLQotCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJmZoLT52aWRxLCAmY3gyNTgyMV92aWRlb19xb3BzLAotCQkJICAgICAgICZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5zbG9jaywKLQkJCSAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCi0JCQkgICAgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY3gyNTgyMV9idWZmZXIpLCBmaCk7Ci0KLQlkcHJpbnRrKDEsICJwb3N0IHZpZGVvYnVmX3F1ZXVlX2luaXQoKVxuIik7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHZpZGVvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogZGF0YSwgc2l6ZV90IGNvdW50LAotCQkJICBsb2ZmX3QgKiBwcG9zKQotewotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQotCXN3aXRjaCAoZmgtPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKLQkJaWYgKGN4MjU4MjFfcmVzX2xvY2tlZChmaC0+ZGV2LCBSRVNPVVJDRV9WSURFTzEpKQotCQkJcmV0dXJuIC1FQlVTWTsKLQotCQlyZXR1cm4gdmlkZW9idWZfcmVhZF9vbmUoJmZoLT52aWRxLCBkYXRhLCBjb3VudCwgcHBvcywKLQkJCQkJIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKLQotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdmlkZW9fcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmOwotCi0JaWYgKGN4MjU4MjFfcmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFTzEpKSB7Ci0JCS8qIHN0cmVhbWluZyBjYXB0dXJlICovCi0JCWlmIChsaXN0X2VtcHR5KCZmaC0+dmlkcS5zdHJlYW0pKQotCQkJcmV0dXJuIFBPTExFUlI7Ci0JCWJ1ZiA9IGxpc3RfZW50cnkoZmgtPnZpZHEuc3RyZWFtLm5leHQsCi0JCQkJIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIuc3RyZWFtKTsKLQl9IGVsc2UgewotCQkvKiByZWFkKCkgY2FwdHVyZSAqLwotCQlidWYgPSAoc3RydWN0IGN4MjU4MjFfYnVmZmVyICopZmgtPnZpZHEucmVhZF9idWY7Ci0JCWlmIChOVUxMID09IGJ1ZikKLQkJCXJldHVybiBQT0xMRVJSOwotCX0KLQotCXBvbGxfd2FpdChmaWxlLCAmYnVmLT52Yi5kb25lLCB3YWl0KTsKLQlpZiAoYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ET05FIHx8IGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRVJST1IpIHsKLQkJaWYgKGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRE9ORSkgewotCQkJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCi0JCQlpZiAoZGV2ICYmIGRldi0+dXNlX2NpZl9yZXNvbHV0aW9uW1NSQU1fQ0gwMV0pIHsKLQkJCQl1OCBjYW1faWQgPSAqKChjaGFyICopYnVmLT52Yi5iYWRkciArIDMpOwotCQkJCW1lbWNweSgoY2hhciAqKWJ1Zi0+dmIuYmFkZHIsCi0JCQkJICAgICAgIChjaGFyICopYnVmLT52Yi5iYWRkciArIChmaC0+d2lkdGggKiAyKSwKLQkJCQkgICAgICAgKGZoLT53aWR0aCAqIDIpKTsKLQkJCQkqKChjaGFyICopYnVmLT52Yi5iYWRkciArIDMpID0gY2FtX2lkOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkZW9fcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCi0JLy9zdG9wIHRoZSByaXNjIGVuZ2luZSBhbmQgZmlmbwotCWN4X3dyaXRlKGNoYW5uZWwxLT5kbWFfY3RsLCAwKTsJLyogRklGTyBhbmQgUklTQyBkaXNhYmxlICovCi0KLQkvKiBzdG9wIHZpZGVvIGNhcHR1cmUgKi8KLQlpZiAoY3gyNTgyMV9yZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPMSkpIHsKLQkJdmlkZW9idWZfcXVldWVfY2FuY2VsKCZmaC0+dmlkcSk7Ci0JCWN4MjU4MjFfcmVzX2ZyZWUoZGV2LCBmaCwgUkVTT1VSQ0VfVklERU8xKTsKLQl9Ci0KLQlpZiAoZmgtPnZpZHEucmVhZF9idWYpIHsKLQkJY3gyNTgyMV9idWZmZXJfcmVsZWFzZSgmZmgtPnZpZHEsIGZoLT52aWRxLnJlYWRfYnVmKTsKLQkJa2ZyZWUoZmgtPnZpZHEucmVhZF9idWYpOwotCX0KLQotCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPnZpZHEpOwotCi0JdjRsMl9wcmlvX2Nsb3NlKCZkZXYtPnByaW8sIGZoLT5wcmlvKTsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCWtmcmVlKGZoKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7Ci0KLQlpZiAodW5saWtlbHkoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSkgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAodW5saWtlbHkoaSAhPSBmaC0+dHlwZSkpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHVubGlrZWx5KCFjeDI1ODIxX3Jlc19nZXQoZGV2LCBmaCwgY3gyNTgyMV9nZXRfcmVzb3VyY2UoZmgsIFJFU09VUkNFX1ZJREVPMSkpKSkgewotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbihnZXRfcXVldWUoZmgpKTsKLX0KLQotc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKLQlpbnQgZXJyLCByZXM7Ci0KLQlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoaSAhPSBmaC0+dHlwZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXMgPSBjeDI1ODIxX2dldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU8xKTsKLQllcnIgPSB2aWRlb2J1Zl9zdHJlYW1vZmYoZ2V0X3F1ZXVlKGZoKSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JY3gyNTgyMV9yZXNfZnJlZShkZXYsIGZoLCByZXMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7Ci0JaW50IGVycjsKLQlpbnQgcGl4X2Zvcm1hdCA9IDA7Ci0KLQlpZiAoZmgpIHsKLQkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sIGZoLT5wcmlvKTsKLQkJaWYgKDAgIT0gZXJyKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlkcHJpbnRrKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7Ci0JZXJyID0gY3gyNTgyMV92aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIHByaXYsIGYpOwotCi0JaWYgKDAgIT0gZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZmgtPmZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7Ci0JZmgtPnZpZHEuZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOwotCi0JLy8gY2hlY2sgaWYgd2lkdGggYW5kIGhlaWdodCBpcyB2YWxpZCBiYXNlZCBvbiBzZXQgc3RhbmRhcmQKLQlpZiAoY3gyNTgyMV9pc192YWxpZF93aWR0aChmLT5mbXQucGl4LndpZHRoLCBkZXYtPnR2bm9ybSkpIHsKLQkJZmgtPndpZHRoID0gZi0+Zm10LnBpeC53aWR0aDsKLQl9Ci0KLQlpZiAoY3gyNTgyMV9pc192YWxpZF9oZWlnaHQoZi0+Zm10LnBpeC5oZWlnaHQsIGRldi0+dHZub3JtKSkgewotCQlmaC0+aGVpZ2h0ID0gZi0+Zm10LnBpeC5oZWlnaHQ7Ci0JfQotCi0JaWYgKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1k0MVApCi0JCXBpeF9mb3JtYXQgPSBQSVhFTF9GUk1UXzQxMTsKLQllbHNlIGlmIChmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVVlWKQotCQlwaXhfZm9ybWF0ID0gUElYRUxfRlJNVF80MjI7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWN4MjU4MjFfc2V0X3BpeGVsX2Zvcm1hdChkZXYsIFNSQU1fQ0gwMSwgcGl4X2Zvcm1hdCk7Ci0KLQkvLyBjaGVjayBpZiBjaWYgcmVzb2x1dGlvbgotCWlmIChmaC0+d2lkdGggPT0gMzIwIHx8IGZoLT53aWR0aCA9PSAzNTIpIHsKLQkJZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDAxXSA9IDE7Ci0JfSBlbHNlIHsKLQkJZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDAxXSA9IDA7Ci0JfQotCWRldi0+Y2lmX3dpZHRoW1NSQU1fQ0gwMV0gPSBmaC0+d2lkdGg7Ci0JbWVkdXNhX3NldF9yZXNvbHV0aW9uKGRldiwgZmgtPndpZHRoLCBTUkFNX0NIMDEpOwotCi0JZHByaW50aygyLCAiJXMoKSB3aWR0aD0lZCBoZWlnaHQ9JWQgZmllbGQ9JWRcbiIsIF9fZnVuY19fLCBmaC0+d2lkdGgsCi0JCWZoLT5oZWlnaHQsIGZoLT52aWRxLmZpZWxkKTsKLQljeDI1ODIxX2NhbGxfYWxsKGRldiwgdmlkZW8sIHNfZm10LCBmKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpwKQotewotCWludCByZXRfdmFsID0gMDsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7Ci0KLQlyZXRfdmFsID0gdmlkZW9idWZfZHFidWYoZ2V0X3F1ZXVlKGZoKSwgcCwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotCi0JcC0+c2VxdWVuY2UgPSBkZXYtPnZpZHFbU1JBTV9DSDAxXS5jb3VudDsKLQotCXJldHVybiByZXRfdmFsOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19sb2dfc3RhdHVzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2KQotewotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7Ci0JY2hhciBuYW1lWzMyICsgMl07Ci0KLQlzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoID0gJmRldi0+c3JhbV9jaGFubmVsc1tTUkFNX0NIMDFdOwotCXUzMiB0bXAgPSAwOwotCi0Jc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMvMiIsIGRldi0+bmFtZSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogPT09PT09PT09PT09ICBTVEFSVCBMT0cgU1RBVFVTICA9PT09PT09PT09PT1cbiIsCi0JICAgICAgIGRldi0+bmFtZSk7Ci0JY3gyNTgyMV9jYWxsX2FsbChkZXYsIGNvcmUsIGxvZ19zdGF0dXMpOwotCXRtcCA9IGN4X3JlYWQoc3JhbV9jaC0+ZG1hX2N0bCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiVmlkZW8gaW5wdXQgMSBpcyAlc1xuIiwKLQkgICAgICAgKHRtcCAmIDB4MTEpID8gInN0cmVhbWluZyIgOiAic3RvcHBlZCIpOwotCXByaW50ayhLRVJOX0lORk8gIiVzLzI6ID09PT09PT09PT09PT0gIEVORCBMT0cgU1RBVFVTICA9PT09PT09PT09PT09XG4iLAotCSAgICAgICBkZXYtPm5hbWUpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkgc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQotewotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKLQlpbnQgZXJyOwotCi0JaWYgKGZoKSB7Ci0JCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCBmaC0+cHJpbyk7Ci0JCWlmICgwICE9IGVycikKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIGN4MjU4MjFfc2V0X2NvbnRyb2woZGV2LCBjdGwsIFNSQU1fQ0gwMSk7Ci19Ci0KLS8vZXhwb3J0ZWQgc3R1ZmYKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdmlkZW9fZm9wcyA9IHsKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkub3BlbiA9IHZpZGVvX29wZW4sCi0JLnJlbGVhc2UgPSB2aWRlb19yZWxlYXNlLAotCS5yZWFkID0gdmlkZW9fcmVhZCwKLQkucG9sbCA9IHZpZGVvX3BvbGwsCi0JLm1tYXAgPSBjeDI1ODIxX3ZpZGVvX21tYXAsCi0JLmlvY3RsID0gdmlkZW9faW9jdGwyLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB2aWRlb19pb2N0bF9vcHMgPSB7Ci0JLnZpZGlvY19xdWVyeWNhcCA9IGN4MjU4MjFfdmlkaW9jX3F1ZXJ5Y2FwLAotCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IGN4MjU4MjFfdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCi0JLnZpZGlvY19nX2ZtdF92aWRfY2FwID0gY3gyNTgyMV92aWRpb2NfZ19mbXRfdmlkX2NhcCwKLQkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcCA9IGN4MjU4MjFfdmlkaW9jX3RyeV9mbXRfdmlkX2NhcCwKLQkudmlkaW9jX3NfZm10X3ZpZF9jYXAgPSB2aWRpb2Nfc19mbXRfdmlkX2NhcCwKLQkudmlkaW9jX3JlcWJ1ZnMgPSBjeDI1ODIxX3ZpZGlvY19yZXFidWZzLAotCS52aWRpb2NfcXVlcnlidWYgPSBjeDI1ODIxX3ZpZGlvY19xdWVyeWJ1ZiwKLQkudmlkaW9jX3FidWYgPSBjeDI1ODIxX3ZpZGlvY19xYnVmLAotCS52aWRpb2NfZHFidWYgPSB2aWRpb2NfZHFidWYsCi0jaWZkZWYgVFVORVJfRkxBRwotCS52aWRpb2Nfc19zdGQgPSBjeDI1ODIxX3ZpZGlvY19zX3N0ZCwKLQkudmlkaW9jX3F1ZXJ5c3RkID0gY3gyNTgyMV92aWRpb2NfcXVlcnlzdGQsCi0jZW5kaWYKLQkudmlkaW9jX2Nyb3BjYXAgPSBjeDI1ODIxX3ZpZGlvY19jcm9wY2FwLAotCS52aWRpb2Nfc19jcm9wID0gY3gyNTgyMV92aWRpb2Nfc19jcm9wLAotCS52aWRpb2NfZ19jcm9wID0gY3gyNTgyMV92aWRpb2NfZ19jcm9wLAotCS52aWRpb2NfZW51bV9pbnB1dCA9IGN4MjU4MjFfdmlkaW9jX2VudW1faW5wdXQsCi0JLnZpZGlvY19nX2lucHV0ID0gY3gyNTgyMV92aWRpb2NfZ19pbnB1dCwKLQkudmlkaW9jX3NfaW5wdXQgPSBjeDI1ODIxX3ZpZGlvY19zX2lucHV0LAotCS52aWRpb2NfZ19jdHJsID0gY3gyNTgyMV92aWRpb2NfZ19jdHJsLAotCS52aWRpb2Nfc19jdHJsID0gdmlkaW9jX3NfY3RybCwKLQkudmlkaW9jX3F1ZXJ5Y3RybCA9IGN4MjU4MjFfdmlkaW9jX3F1ZXJ5Y3RybCwKLQkudmlkaW9jX3N0cmVhbW9uID0gdmlkaW9jX3N0cmVhbW9uLAotCS52aWRpb2Nfc3RyZWFtb2ZmID0gdmlkaW9jX3N0cmVhbW9mZiwKLQkudmlkaW9jX2xvZ19zdGF0dXMgPSB2aWRpb2NfbG9nX3N0YXR1cywKLQkudmlkaW9jX2dfcHJpb3JpdHkgPSBjeDI1ODIxX3ZpZGlvY19nX3ByaW9yaXR5LAotCS52aWRpb2Nfc19wcmlvcml0eSA9IGN4MjU4MjFfdmlkaW9jX3NfcHJpb3JpdHksCi0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0JLnZpZGlvY2dtYnVmID0gY3gyNTgyMV92aWRpb2NnbWJ1ZiwKLSNlbmRpZgotI2lmZGVmIFRVTkVSX0ZMQUcKLQkudmlkaW9jX2dfdHVuZXIgPSBjeDI1ODIxX3ZpZGlvY19nX3R1bmVyLAotCS52aWRpb2Nfc190dW5lciA9IGN4MjU4MjFfdmlkaW9jX3NfdHVuZXIsCi0JLnZpZGlvY19nX2ZyZXF1ZW5jeSA9IGN4MjU4MjFfdmlkaW9jX2dfZnJlcXVlbmN5LAotCS52aWRpb2Nfc19mcmVxdWVuY3kgPSBjeDI1ODIxX3ZpZGlvY19zX2ZyZXF1ZW5jeSwKLSNlbmRpZgotI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKLQkudmlkaW9jX2dfcmVnaXN0ZXIgPSBjeDI1ODIxX3ZpZGlvY19nX3JlZ2lzdGVyLAotCS52aWRpb2Nfc19yZWdpc3RlciA9IGN4MjU4MjFfdmlkaW9jX3NfcmVnaXN0ZXIsCi0jZW5kaWYKLX07Ci0KLXN0cnVjdCB2aWRlb19kZXZpY2UgY3gyNTgyMV92aWRlb190ZW1wbGF0ZTEgPSB7Ci0JLm5hbWUgPSAiY3gyNTgyMS12aWRlbyIsCi0JLmZvcHMgPSAmdmlkZW9fZm9wcywKLQkuaW9jdGxfb3BzID0gJnZpZGVvX2lvY3RsX29wcywKLQkudHZub3JtcyA9IENYMjU4MjFfTk9STVMsCi0JLmN1cnJlbnRfbm9ybSA9IFY0TDJfU1REX05UU0NfTSwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvMi5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAwY2RiOC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvMi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDM2ICswLDAgQEAKLS8qCi0gKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCi0gKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgotICogIEJhc2VkIG9uIFN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4gY3gyMzg4NSBkcml2ZXIKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKgotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY3gyNTgyMS12aWRlby5oIgotCi1zdGF0aWMgdm9pZCBidWZmZXJfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCi17Ci0Jc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWYgPQotCSAgICBjb250YWluZXJfb2YodmIsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIpOwotCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqcHJldjsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSB2cS0+cHJpdl9kYXRhOwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKLQlzdHJ1Y3QgY3gyNTgyMV9kbWFxdWV1ZSAqcSA9ICZkZXYtPnZpZHFbU1JBTV9DSDAyXTsKLQotCS8qIGFkZCBqdW1wIHRvIHN0b3BwZXIgKi8KLQlidWYtPnJpc2Muam1wWzBdID0gY3B1X3RvX2xlMzIoUklTQ19KVU1QIHwgUklTQ19JUlExIHwgUklTQ19DTlRfSU5DKTsKLQlidWYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIocS0+c3RvcHBlci5kbWEpOwotCWJ1Zi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsJLyogYml0cyA2My0zMiAqLwotCi0JZHByaW50aygyLCAiam1wIHRvIHN0b3BwZXIgKDB4JXgpXG4iLCBidWYtPnJpc2Muam1wWzFdKTsKLQotCWlmICghbGlzdF9lbXB0eSgmcS0+cXVldWVkKSkgewotCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+cXVldWVkKTsKLQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKLQkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gcXVldWVkXG4iLCBidWYsCi0JCQlidWYtPnZiLmkpOwotCi0JfSBlbHNlIGlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7Ci0JCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOwotCQljeDI1ODIxX3N0YXJ0X3ZpZGVvX2RtYShkZXYsIHEsIGJ1ZiwKLQkJCQkJJmRldi0+c3JhbV9jaGFubmVsc1tTUkFNX0NIMDJdKTsKLQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKLQkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7Ci0JCW1vZF90aW1lcigmcS0+dGltZW91dCwgamlmZmllcyArIEJVRkZFUl9USU1FT1VUKTsKLQkJZHByaW50aygyLAotCQkJIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gZmlyc3QgYWN0aXZlLCBidWYgY250ID0gJWQsIHEtPmNvdW50ID0gJWRcbiIsCi0JCQlidWYsIGJ1Zi0+dmIuaSwgYnVmLT5jb3VudCwgcS0+Y291bnQpOwotCX0gZWxzZSB7Ci0JCXByZXYgPQotCQkgICAgbGlzdF9lbnRyeShxLT5hY3RpdmUucHJldiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5xdWV1ZSk7Ci0JCWlmIChwcmV2LT52Yi53aWR0aCA9PSBidWYtPnZiLndpZHRoCi0JCSAgICAmJiBwcmV2LT52Yi5oZWlnaHQgPT0gYnVmLT52Yi5oZWlnaHQKLQkJICAgICYmIHByZXYtPmZtdCA9PSBidWYtPmZtdCkgewotCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7Ci0JCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOwotCQkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7Ci0JCQlwcmV2LT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKGJ1Zi0+cmlzYy5kbWEpOwotCi0JCQkvKiA2NCBiaXQgYml0cyA2My0zMiAqLwotCQkJcHJldi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsKLQkJCWRwcmludGsoMiwKLQkJCQkiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gYWN0aXZlLCBidWYtPmNvdW50PSVkXG4iLAotCQkJCWJ1ZiwgYnVmLT52Yi5pLCBidWYtPmNvdW50KTsKLQotCQl9IGVsc2UgewotCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPnF1ZXVlZCk7Ci0JCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOwotCQkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBxdWV1ZWRcbiIsIGJ1ZiwKLQkJCQlidWYtPnZiLmkpOwotCQl9Ci0JfQotCi0JaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKLQkJZHByaW50aygyLCAiYWN0aXZlIHF1ZXVlIGVtcHR5IVxuIik7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBjeDI1ODIxX3ZpZGVvX3FvcHMgPSB7Ci0JLmJ1Zl9zZXR1cCA9IGN4MjU4MjFfYnVmZmVyX3NldHVwLAotCS5idWZfcHJlcGFyZSA9IGN4MjU4MjFfYnVmZmVyX3ByZXBhcmUsCi0JLmJ1Zl9xdWV1ZSA9IGJ1ZmZlcl9xdWV1ZSwKLQkuYnVmX3JlbGVhc2UgPSBjeDI1ODIxX2J1ZmZlcl9yZWxlYXNlLAotfTsKLQotc3RhdGljIGludCB2aWRlb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmg7Ci0JZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JdTMyIHBpeF9mb3JtYXQ7Ci0KLQlwcmludGsoIm9wZW4gZGV2PSVzIHR5cGU9JXNcbiIsIHZpZGVvX2RldmljZV9ub2RlX25hbWUodmRldiksCi0JCXY0bDJfdHlwZV9uYW1lc1t0eXBlXSk7Ci0KLQkvKiBhbGxvY2F0ZSArIGluaXRpYWxpemUgcGVyIGZpbGVoYW5kbGUgZGF0YSAqLwotCWZoID0ga3phbGxvYyhzaXplb2YoKmZoKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gZmgpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbG9ja19rZXJuZWwoKTsKLQotCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOwotCWZoLT5kZXYgPSBkZXY7Ci0JZmgtPnR5cGUgPSB0eXBlOwotCWZoLT53aWR0aCA9IDcyMDsKLQotCWlmIChkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9CRyB8fCBkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9ESykKLQkJZmgtPmhlaWdodCA9IDU3NjsKLQllbHNlCi0JCWZoLT5oZWlnaHQgPSA0ODA7Ci0KLQlkZXYtPmNoYW5uZWxfb3BlbmVkID0gU1JBTV9DSDAyOwotCXBpeF9mb3JtYXQgPQotCSAgICAoZGV2LT5waXhlbF9mb3JtYXRzW2Rldi0+Y2hhbm5lbF9vcGVuZWRdID09Ci0JICAgICBQSVhFTF9GUk1UXzQxMSkgPyBWNEwyX1BJWF9GTVRfWTQxUCA6IFY0TDJfUElYX0ZNVF9ZVVlWOwotCWZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKHBpeF9mb3JtYXQpOwotCi0JdjRsMl9wcmlvX29wZW4oJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKLQotCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJmZoLT52aWRxLCAmY3gyNTgyMV92aWRlb19xb3BzLAotCQkJICAgICAgICZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5zbG9jaywKLQkJCSAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCi0JCQkgICAgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY3gyNTgyMV9idWZmZXIpLCBmaCk7Ci0KLQlkcHJpbnRrKDEsICJwb3N0IHZpZGVvYnVmX3F1ZXVlX2luaXQoKVxuIik7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHZpZGVvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogZGF0YSwgc2l6ZV90IGNvdW50LAotCQkJICBsb2ZmX3QgKiBwcG9zKQotewotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQotCXN3aXRjaCAoZmgtPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKLQkJaWYgKGN4MjU4MjFfcmVzX2xvY2tlZChmaC0+ZGV2LCBSRVNPVVJDRV9WSURFTzIpKQotCQkJcmV0dXJuIC1FQlVTWTsKLQotCQlyZXR1cm4gdmlkZW9idWZfcmVhZF9vbmUoJmZoLT52aWRxLCBkYXRhLCBjb3VudCwgcHBvcywKLQkJCQkJIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKLQotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdmlkZW9fcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmOwotCi0JaWYgKGN4MjU4MjFfcmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFTzIpKSB7Ci0JCS8qIHN0cmVhbWluZyBjYXB0dXJlICovCi0JCWlmIChsaXN0X2VtcHR5KCZmaC0+dmlkcS5zdHJlYW0pKQotCQkJcmV0dXJuIFBPTExFUlI7Ci0JCWJ1ZiA9IGxpc3RfZW50cnkoZmgtPnZpZHEuc3RyZWFtLm5leHQsCi0JCQkJIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIuc3RyZWFtKTsKLQl9IGVsc2UgewotCQkvKiByZWFkKCkgY2FwdHVyZSAqLwotCQlidWYgPSAoc3RydWN0IGN4MjU4MjFfYnVmZmVyICopZmgtPnZpZHEucmVhZF9idWY7Ci0JCWlmIChOVUxMID09IGJ1ZikKLQkJCXJldHVybiBQT0xMRVJSOwotCX0KLQotCXBvbGxfd2FpdChmaWxlLCAmYnVmLT52Yi5kb25lLCB3YWl0KTsKLQlpZiAoYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ET05FIHx8IGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRVJST1IpIHsKLQkJaWYgKGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRE9ORSkgewotCQkJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCi0JCQlpZiAoZGV2ICYmIGRldi0+dXNlX2NpZl9yZXNvbHV0aW9uW1NSQU1fQ0gwMl0pIHsKLQkJCQl1OCBjYW1faWQgPSAqKChjaGFyICopYnVmLT52Yi5iYWRkciArIDMpOwotCQkJCW1lbWNweSgoY2hhciAqKWJ1Zi0+dmIuYmFkZHIsCi0JCQkJICAgICAgIChjaGFyICopYnVmLT52Yi5iYWRkciArIChmaC0+d2lkdGggKiAyKSwKLQkJCQkgICAgICAgKGZoLT53aWR0aCAqIDIpKTsKLQkJCQkqKChjaGFyICopYnVmLT52Yi5iYWRkciArIDMpID0gY2FtX2lkOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkZW9fcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCi0JLy9zdG9wIHRoZSByaXNjIGVuZ2luZSBhbmQgZmlmbwotCWN4X3dyaXRlKGNoYW5uZWwyLT5kbWFfY3RsLCAwKTsJLyogRklGTyBhbmQgUklTQyBkaXNhYmxlICovCi0KLQkvKiBzdG9wIHZpZGVvIGNhcHR1cmUgKi8KLQlpZiAoY3gyNTgyMV9yZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPMikpIHsKLQkJdmlkZW9idWZfcXVldWVfY2FuY2VsKCZmaC0+dmlkcSk7Ci0JCWN4MjU4MjFfcmVzX2ZyZWUoZGV2LCBmaCwgUkVTT1VSQ0VfVklERU8yKTsKLQl9Ci0KLQlpZiAoZmgtPnZpZHEucmVhZF9idWYpIHsKLQkJY3gyNTgyMV9idWZmZXJfcmVsZWFzZSgmZmgtPnZpZHEsIGZoLT52aWRxLnJlYWRfYnVmKTsKLQkJa2ZyZWUoZmgtPnZpZHEucmVhZF9idWYpOwotCX0KLQotCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPnZpZHEpOwotCi0JdjRsMl9wcmlvX2Nsb3NlKCZkZXYtPnByaW8sIGZoLT5wcmlvKTsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCWtmcmVlKGZoKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7Ci0KLQlpZiAodW5saWtlbHkoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSkgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAodW5saWtlbHkoaSAhPSBmaC0+dHlwZSkpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHVubGlrZWx5KCFjeDI1ODIxX3Jlc19nZXQoZGV2LCBmaCwgY3gyNTgyMV9nZXRfcmVzb3VyY2UoZmgsIFJFU09VUkNFX1ZJREVPMikpKSkgewotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbihnZXRfcXVldWUoZmgpKTsKLX0KLQotc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKLQlpbnQgZXJyLCByZXM7Ci0KLQlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoaSAhPSBmaC0+dHlwZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXMgPSBjeDI1ODIxX2dldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU8yKTsKLQllcnIgPSB2aWRlb2J1Zl9zdHJlYW1vZmYoZ2V0X3F1ZXVlKGZoKSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JY3gyNTgyMV9yZXNfZnJlZShkZXYsIGZoLCByZXMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7Ci0JaW50IGVycjsKLQlpbnQgcGl4X2Zvcm1hdCA9IDA7Ci0KLQlpZiAoZmgpIHsKLQkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sIGZoLT5wcmlvKTsKLQkJaWYgKDAgIT0gZXJyKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlkcHJpbnRrKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7Ci0JZXJyID0gY3gyNTgyMV92aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIHByaXYsIGYpOwotCi0JaWYgKDAgIT0gZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZmgtPmZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7Ci0JZmgtPnZpZHEuZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOwotCi0JLy8gY2hlY2sgaWYgd2lkdGggYW5kIGhlaWdodCBpcyB2YWxpZCBiYXNlZCBvbiBzZXQgc3RhbmRhcmQKLQlpZiAoY3gyNTgyMV9pc192YWxpZF93aWR0aChmLT5mbXQucGl4LndpZHRoLCBkZXYtPnR2bm9ybSkpIHsKLQkJZmgtPndpZHRoID0gZi0+Zm10LnBpeC53aWR0aDsKLQl9Ci0KLQlpZiAoY3gyNTgyMV9pc192YWxpZF9oZWlnaHQoZi0+Zm10LnBpeC5oZWlnaHQsIGRldi0+dHZub3JtKSkgewotCQlmaC0+aGVpZ2h0ID0gZi0+Zm10LnBpeC5oZWlnaHQ7Ci0JfQotCi0JaWYgKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1k0MVApCi0JCXBpeF9mb3JtYXQgPSBQSVhFTF9GUk1UXzQxMTsKLQllbHNlIGlmIChmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVVlWKQotCQlwaXhfZm9ybWF0ID0gUElYRUxfRlJNVF80MjI7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWN4MjU4MjFfc2V0X3BpeGVsX2Zvcm1hdChkZXYsIFNSQU1fQ0gwMiwgcGl4X2Zvcm1hdCk7Ci0KLQkvLyBjaGVjayBpZiBjaWYgcmVzb2x1dGlvbgotCWlmIChmaC0+d2lkdGggPT0gMzIwIHx8IGZoLT53aWR0aCA9PSAzNTIpIHsKLQkJZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDAyXSA9IDE7Ci0JfSBlbHNlIHsKLQkJZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDAyXSA9IDA7Ci0JfQotCWRldi0+Y2lmX3dpZHRoW1NSQU1fQ0gwMl0gPSBmaC0+d2lkdGg7Ci0JbWVkdXNhX3NldF9yZXNvbHV0aW9uKGRldiwgZmgtPndpZHRoLCBTUkFNX0NIMDIpOwotCi0JZHByaW50aygyLCAiJXMoKSB3aWR0aD0lZCBoZWlnaHQ9JWQgZmllbGQ9JWRcbiIsIF9fZnVuY19fLCBmaC0+d2lkdGgsCi0JCWZoLT5oZWlnaHQsIGZoLT52aWRxLmZpZWxkKTsKLQljeDI1ODIxX2NhbGxfYWxsKGRldiwgdmlkZW8sIHNfZm10LCBmKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpwKQotewotCWludCByZXRfdmFsID0gMDsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7Ci0KLQlyZXRfdmFsID0gdmlkZW9idWZfZHFidWYoZ2V0X3F1ZXVlKGZoKSwgcCwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotCi0JcC0+c2VxdWVuY2UgPSBkZXYtPnZpZHFbU1JBTV9DSDAyXS5jb3VudDsKLQotCXJldHVybiByZXRfdmFsOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19sb2dfc3RhdHVzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2KQotewotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7Ci0JY2hhciBuYW1lWzMyICsgMl07Ci0KLQlzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoID0gJmRldi0+c3JhbV9jaGFubmVsc1tTUkFNX0NIMDJdOwotCXUzMiB0bXAgPSAwOwotCi0Jc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMvMiIsIGRldi0+bmFtZSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogPT09PT09PT09PT09ICBTVEFSVCBMT0cgU1RBVFVTICA9PT09PT09PT09PT1cbiIsCi0JICAgICAgIGRldi0+bmFtZSk7Ci0KLQljeDI1ODIxX2NhbGxfYWxsKGRldiwgY29yZSwgbG9nX3N0YXR1cyk7Ci0KLQl0bXAgPSBjeF9yZWFkKHNyYW1fY2gtPmRtYV9jdGwpOwotCXByaW50ayhLRVJOX0lORk8gIlZpZGVvIGlucHV0IDIgaXMgJXNcbiIsCi0JICAgICAgICh0bXAgJiAweDExKSA/ICJzdHJlYW1pbmciIDogInN0b3BwZWQiKTsKLQlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT09ICBFTkQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09PVxuIiwKLQkgICAgICAgZGV2LT5uYW1lKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7Ci0JaW50IGVycjsKLQotCWlmIChmaCkgewotCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgZmgtPnByaW8pOwotCQlpZiAoMCAhPSBlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiBjeDI1ODIxX3NldF9jb250cm9sKGRldiwgY3RsLCBTUkFNX0NIMDIpOwotfQotCi0vLyBleHBvcnRlZCBzdHVmZgotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2aWRlb19mb3BzID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5vcGVuID0gdmlkZW9fb3BlbiwKLQkucmVsZWFzZSA9IHZpZGVvX3JlbGVhc2UsCi0JLnJlYWQgPSB2aWRlb19yZWFkLAotCS5wb2xsID0gdmlkZW9fcG9sbCwKLQkubW1hcCA9IGN4MjU4MjFfdmlkZW9fbW1hcCwKLQkuaW9jdGwgPSB2aWRlb19pb2N0bDIsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHZpZGVvX2lvY3RsX29wcyA9IHsKLQkudmlkaW9jX3F1ZXJ5Y2FwID0gY3gyNTgyMV92aWRpb2NfcXVlcnljYXAsCi0JLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwID0gY3gyNTgyMV92aWRpb2NfZW51bV9mbXRfdmlkX2NhcCwKLQkudmlkaW9jX2dfZm10X3ZpZF9jYXAgPSBjeDI1ODIxX3ZpZGlvY19nX2ZtdF92aWRfY2FwLAotCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwID0gY3gyNTgyMV92aWRpb2NfdHJ5X2ZtdF92aWRfY2FwLAotCS52aWRpb2Nfc19mbXRfdmlkX2NhcCA9IHZpZGlvY19zX2ZtdF92aWRfY2FwLAotCS52aWRpb2NfcmVxYnVmcyA9IGN4MjU4MjFfdmlkaW9jX3JlcWJ1ZnMsCi0JLnZpZGlvY19xdWVyeWJ1ZiA9IGN4MjU4MjFfdmlkaW9jX3F1ZXJ5YnVmLAotCS52aWRpb2NfcWJ1ZiA9IGN4MjU4MjFfdmlkaW9jX3FidWYsCi0JLnZpZGlvY19kcWJ1ZiA9IHZpZGlvY19kcWJ1ZiwKLSNpZmRlZiBUVU5FUl9GTEFHCi0JLnZpZGlvY19zX3N0ZCA9IGN4MjU4MjFfdmlkaW9jX3Nfc3RkLAotCS52aWRpb2NfcXVlcnlzdGQgPSBjeDI1ODIxX3ZpZGlvY19xdWVyeXN0ZCwKLSNlbmRpZgotCS52aWRpb2NfY3JvcGNhcCA9IGN4MjU4MjFfdmlkaW9jX2Nyb3BjYXAsCi0JLnZpZGlvY19zX2Nyb3AgPSBjeDI1ODIxX3ZpZGlvY19zX2Nyb3AsCi0JLnZpZGlvY19nX2Nyb3AgPSBjeDI1ODIxX3ZpZGlvY19nX2Nyb3AsCi0JLnZpZGlvY19lbnVtX2lucHV0ID0gY3gyNTgyMV92aWRpb2NfZW51bV9pbnB1dCwKLQkudmlkaW9jX2dfaW5wdXQgPSBjeDI1ODIxX3ZpZGlvY19nX2lucHV0LAotCS52aWRpb2Nfc19pbnB1dCA9IGN4MjU4MjFfdmlkaW9jX3NfaW5wdXQsCi0JLnZpZGlvY19nX2N0cmwgPSBjeDI1ODIxX3ZpZGlvY19nX2N0cmwsCi0JLnZpZGlvY19zX2N0cmwgPSB2aWRpb2Nfc19jdHJsLAotCS52aWRpb2NfcXVlcnljdHJsID0gY3gyNTgyMV92aWRpb2NfcXVlcnljdHJsLAotCS52aWRpb2Nfc3RyZWFtb24gPSB2aWRpb2Nfc3RyZWFtb24sCi0JLnZpZGlvY19zdHJlYW1vZmYgPSB2aWRpb2Nfc3RyZWFtb2ZmLAotCS52aWRpb2NfbG9nX3N0YXR1cyA9IHZpZGlvY19sb2dfc3RhdHVzLAotCS52aWRpb2NfZ19wcmlvcml0eSA9IGN4MjU4MjFfdmlkaW9jX2dfcHJpb3JpdHksCi0JLnZpZGlvY19zX3ByaW9yaXR5ID0gY3gyNTgyMV92aWRpb2Nfc19wcmlvcml0eSwKLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLQkudmlkaW9jZ21idWYgPSBjeDI1ODIxX3ZpZGlvY2dtYnVmLAotI2VuZGlmCi0jaWZkZWYgVFVORVJfRkxBRwotCS52aWRpb2NfZ190dW5lciA9IGN4MjU4MjFfdmlkaW9jX2dfdHVuZXIsCi0JLnZpZGlvY19zX3R1bmVyID0gY3gyNTgyMV92aWRpb2Nfc190dW5lciwKLQkudmlkaW9jX2dfZnJlcXVlbmN5ID0gY3gyNTgyMV92aWRpb2NfZ19mcmVxdWVuY3ksCi0JLnZpZGlvY19zX2ZyZXF1ZW5jeSA9IGN4MjU4MjFfdmlkaW9jX3NfZnJlcXVlbmN5LAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwotCS52aWRpb2NfZ19yZWdpc3RlciA9IGN4MjU4MjFfdmlkaW9jX2dfcmVnaXN0ZXIsCi0JLnZpZGlvY19zX3JlZ2lzdGVyID0gY3gyNTgyMV92aWRpb2Nfc19yZWdpc3RlciwKLSNlbmRpZgotfTsKLQotc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMiA9IHsKLQkubmFtZSA9ICJjeDI1ODIxLXZpZGVvIiwKLQkuZm9wcyA9ICZ2aWRlb19mb3BzLAotCS5pb2N0bF9vcHMgPSAmdmlkZW9faW9jdGxfb3BzLAotCS50dm5vcm1zID0gQ1gyNTgyMV9OT1JNUywKLQkuY3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQ19NLAotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8zLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvMy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjIxNmVkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8zLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MzUgKzAsMCBAQAotLyoKLSAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KLSAqICBBdXRob3JzICA8c2h1LmxpbkBjb25leGFudC5jb20+LCA8aGllcC5odXluaEBjb25leGFudC5jb20+Ci0gKiAgQmFzZWQgb24gU3RldmVuIFRvdGggPHN0b3RoQGxpbnV4dHYub3JnPiBjeDIzODg1IGRyaXZlcgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjeDI1ODIxLXZpZGVvLmgiCi0KLXN0YXRpYyB2b2lkIGJ1ZmZlcl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZiA9Ci0JICAgIGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yik7Ci0Jc3RydWN0IGN4MjU4MjFfYnVmZmVyICpwcmV2OwotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHZxLT5wcml2X2RhdGE7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCXN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlICpxID0gJmRldi0+dmlkcVtTUkFNX0NIMDNdOwotCi0JLyogYWRkIGp1bXAgdG8gc3RvcHBlciAqLwotCWJ1Zi0+cmlzYy5qbXBbMF0gPSBjcHVfdG9fbGUzMihSSVNDX0pVTVAgfCBSSVNDX0lSUTEgfCBSSVNDX0NOVF9JTkMpOwotCWJ1Zi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihxLT5zdG9wcGVyLmRtYSk7Ci0JYnVmLT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOwkvKiBiaXRzIDYzLTMyICovCi0KLQlkcHJpbnRrKDIsICJqbXAgdG8gc3RvcHBlciAoMHgleClcbiIsIGJ1Zi0+cmlzYy5qbXBbMV0pOwotCi0JaWYgKCFsaXN0X2VtcHR5KCZxLT5xdWV1ZWQpKSB7Ci0JCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5xdWV1ZWQpOwotCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOwotCQlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBxdWV1ZWRcbiIsIGJ1ZiwKLQkJCWJ1Zi0+dmIuaSk7Ci0KLQl9IGVsc2UgaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKLQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7Ci0JCWN4MjU4MjFfc3RhcnRfdmlkZW9fZG1hKGRldiwgcSwgYnVmLAotCQkJCQkmZGV2LT5zcmFtX2NoYW5uZWxzW1NSQU1fQ0gwM10pOwotCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOwotCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKLQkJbW9kX3RpbWVyKCZxLT50aW1lb3V0LCBqaWZmaWVzICsgQlVGRkVSX1RJTUVPVVQpOwotCQlkcHJpbnRrKDIsCi0JCQkiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBhY3RpdmUsIGJ1ZiBjbnQgPSAlZCwgcS0+Y291bnQgPSAlZFxuIiwKLQkJCWJ1ZiwgYnVmLT52Yi5pLCBidWYtPmNvdW50LCBxLT5jb3VudCk7Ci0JfSBlbHNlIHsKLQkJcHJldiA9Ci0JCSAgICBsaXN0X2VudHJ5KHEtPmFjdGl2ZS5wcmV2LCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnF1ZXVlKTsKLQkJaWYgKHByZXYtPnZiLndpZHRoID09IGJ1Zi0+dmIud2lkdGgKLQkJICAgICYmIHByZXYtPnZiLmhlaWdodCA9PSBidWYtPnZiLmhlaWdodAotCQkgICAgJiYgcHJldi0+Zm10ID09IGJ1Zi0+Zm10KSB7Ci0JCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+YWN0aXZlKTsKLQkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7Ci0JCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKLQkJCXByZXYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIoYnVmLT5yaXNjLmRtYSk7Ci0KLQkJCS8qIDY0IGJpdCBiaXRzIDYzLTMyICovCi0JCQlwcmV2LT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOwotCQkJZHByaW50aygyLAotCQkJCSJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBhY3RpdmUsIGJ1Zi0+Y291bnQ9JWRcbiIsCi0JCQkJYnVmLCBidWYtPnZiLmksIGJ1Zi0+Y291bnQpOwotCi0JCX0gZWxzZSB7Ci0JCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+cXVldWVkKTsKLQkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7Ci0JCQlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGZpcnN0IHF1ZXVlZFxuIiwgYnVmLAotCQkJCWJ1Zi0+dmIuaSk7Ci0JCX0KLQl9Ci0KLQlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgewotCQlkcHJpbnRrKDIsICJhY3RpdmUgcXVldWUgZW1wdHkhXG4iKTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIGN4MjU4MjFfdmlkZW9fcW9wcyA9IHsKLQkuYnVmX3NldHVwID0gY3gyNTgyMV9idWZmZXJfc2V0dXAsCi0JLmJ1Zl9wcmVwYXJlID0gY3gyNTgyMV9idWZmZXJfcHJlcGFyZSwKLQkuYnVmX3F1ZXVlID0gYnVmZmVyX3F1ZXVlLAotCS5idWZfcmVsZWFzZSA9IGN4MjU4MjFfYnVmZmVyX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgaW50IHZpZGVvX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaDsKLQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQl1MzIgcGl4X2Zvcm1hdDsKLQotCXByaW50aygib3BlbiBkZXY9JXMgdHlwZT0lc1xuIiwgdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZGV2KSwKLQkJdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKLQotCS8qIGFsbG9jYXRlICsgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCi0JZmggPSBremFsbG9jKHNpemVvZigqZmgpLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBmaCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlsb2NrX2tlcm5lbCgpOwotCi0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7Ci0JZmgtPmRldiA9IGRldjsKLQlmaC0+dHlwZSA9IHR5cGU7Ci0JZmgtPndpZHRoID0gNzIwOwotCi0JaWYgKGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0JHIHx8IGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0RLKQotCQlmaC0+aGVpZ2h0ID0gNTc2OwotCWVsc2UKLQkJZmgtPmhlaWdodCA9IDQ4MDsKLQotCWRldi0+Y2hhbm5lbF9vcGVuZWQgPSBTUkFNX0NIMDM7Ci0JcGl4X2Zvcm1hdCA9Ci0JICAgIChkZXYtPnBpeGVsX2Zvcm1hdHNbZGV2LT5jaGFubmVsX29wZW5lZF0gPT0KLQkgICAgIFBJWEVMX0ZSTVRfNDExKSA/IFY0TDJfUElYX0ZNVF9ZNDFQIDogVjRMMl9QSVhfRk1UX1lVWVY7Ci0JZmgtPmZtdCA9IGZvcm1hdF9ieV9mb3VyY2MocGl4X2Zvcm1hdCk7Ci0KLQl2NGwyX3ByaW9fb3BlbigmZGV2LT5wcmlvLCAmZmgtPnByaW8pOwotCi0JdmlkZW9idWZfcXVldWVfc2dfaW5pdCgmZmgtPnZpZHEsICZjeDI1ODIxX3ZpZGVvX3FvcHMsCi0JCQkgICAgICAgJmRldi0+cGNpLT5kZXYsICZkZXYtPnNsb2NrLAotCQkJICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKLQkJCSAgICAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQsCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBjeDI1ODIxX2J1ZmZlciksIGZoKTsKLQotCWRwcmludGsoMSwgInBvc3QgdmlkZW9idWZfcXVldWVfaW5pdCgpXG4iKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHNzaXplX3QgdmlkZW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiBkYXRhLCBzaXplX3QgY291bnQsCi0JCQkgIGxvZmZfdCAqIHBwb3MpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0Jc3dpdGNoIChmaC0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQlpZiAoY3gyNTgyMV9yZXNfbG9ja2VkKGZoLT5kZXYsIFJFU09VUkNFX1ZJREVPMykpCi0JCQlyZXR1cm4gLUVCVVNZOwotCi0JCXJldHVybiB2aWRlb2J1Zl9yZWFkX29uZSgmZmgtPnZpZHEsIGRhdGEsIGNvdW50LCBwcG9zLAotCQkJCQkgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotCi0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JCXJldHVybiAwOwotCX0KLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCB2aWRlb19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLAotCQkJICAgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWY7Ci0KLQlpZiAoY3gyNTgyMV9yZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPMykpIHsKLQkJLyogc3RyZWFtaW5nIGNhcHR1cmUgKi8KLQkJaWYgKGxpc3RfZW1wdHkoJmZoLT52aWRxLnN0cmVhbSkpCi0JCQlyZXR1cm4gUE9MTEVSUjsKLQkJYnVmID0gbGlzdF9lbnRyeShmaC0+dmlkcS5zdHJlYW0ubmV4dCwKLQkJCQkgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5zdHJlYW0pOwotCX0gZWxzZSB7Ci0JCS8qIHJlYWQoKSBjYXB0dXJlICovCi0JCWJ1ZiA9IChzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKilmaC0+dmlkcS5yZWFkX2J1ZjsKLQkJaWYgKE5VTEwgPT0gYnVmKQotCQkJcmV0dXJuIFBPTExFUlI7Ci0JfQotCi0JcG9sbF93YWl0KGZpbGUsICZidWYtPnZiLmRvbmUsIHdhaXQpOwotCWlmIChidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0RPTkUgfHwgYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9FUlJPUikgewotCQlpZiAoYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ET05FKSB7Ci0JCQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7Ci0KLQkJCWlmIChkZXYgJiYgZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDAzXSkgewotCQkJCXU4IGNhbV9pZCA9ICooKGNoYXIgKilidWYtPnZiLmJhZGRyICsgMyk7Ci0JCQkJbWVtY3B5KChjaGFyICopYnVmLT52Yi5iYWRkciwKLQkJCQkgICAgICAgKGNoYXIgKilidWYtPnZiLmJhZGRyICsgKGZoLT53aWR0aCAqIDIpLAotCQkJCSAgICAgICAoZmgtPndpZHRoICogMikpOwotCQkJCSooKGNoYXIgKilidWYtPnZiLmJhZGRyICsgMykgPSBjYW1faWQ7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRlb19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7Ci0KLQkvL3N0b3AgdGhlIHJpc2MgZW5naW5lIGFuZCBmaWZvCi0JY3hfd3JpdGUoY2hhbm5lbDMtPmRtYV9jdGwsIDApOwkvKiBGSUZPIGFuZCBSSVNDIGRpc2FibGUgKi8KLQotCS8qIHN0b3AgdmlkZW8gY2FwdHVyZSAqLwotCWlmIChjeDI1ODIxX3Jlc19jaGVjayhmaCwgUkVTT1VSQ0VfVklERU8zKSkgewotCQl2aWRlb2J1Zl9xdWV1ZV9jYW5jZWwoJmZoLT52aWRxKTsKLQkJY3gyNTgyMV9yZXNfZnJlZShkZXYsIGZoLCBSRVNPVVJDRV9WSURFTzMpOwotCX0KLQotCWlmIChmaC0+dmlkcS5yZWFkX2J1ZikgewotCQljeDI1ODIxX2J1ZmZlcl9yZWxlYXNlKCZmaC0+dmlkcSwgZmgtPnZpZHEucmVhZF9idWYpOwotCQlrZnJlZShmaC0+dmlkcS5yZWFkX2J1Zik7Ci0JfQotCi0JdmlkZW9idWZfbW1hcF9mcmVlKCZmaC0+dmlkcSk7Ci0KLQl2NGwyX3ByaW9fY2xvc2UoJmRldi0+cHJpbywgZmgtPnByaW8pOwotCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7Ci0Ja2ZyZWUoZmgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKLQotCWlmICh1bmxpa2VseShmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpKSB7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICh1bmxpa2VseShpICE9IGZoLT50eXBlKSkgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAodW5saWtlbHkoIWN4MjU4MjFfcmVzX2dldChkZXYsIGZoLCBjeDI1ODIxX2dldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU8zKSkpKSB7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9uKGdldF9xdWV1ZShmaCkpOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQotewotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCWludCBlcnIsIHJlczsKLQotCWlmIChmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChpICE9IGZoLT50eXBlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJlcyA9IGN4MjU4MjFfZ2V0X3Jlc291cmNlKGZoLCBSRVNPVVJDRV9WSURFTzMpOwotCWVyciA9IHZpZGVvYnVmX3N0cmVhbW9mZihnZXRfcXVldWUoZmgpKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQljeDI1ODIxX3Jlc19mcmVlKGRldiwgZmgsIHJlcyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQotewotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKLQlpbnQgZXJyOwotCWludCBwaXhfZm9ybWF0ID0gMDsKLQotCWlmIChmaCkgewotCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgZmgtPnByaW8pOwotCQlpZiAoMCAhPSBlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCWRwcmludGsoMiwgIiVzKClcbiIsIF9fZnVuY19fKTsKLQllcnIgPSBjeDI1ODIxX3ZpZGlvY190cnlfZm10X3ZpZF9jYXAoZmlsZSwgcHJpdiwgZik7Ci0KLQlpZiAoMCAhPSBlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlmaC0+Zm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKLQlmaC0+dmlkcS5maWVsZCA9IGYtPmZtdC5waXguZmllbGQ7Ci0KLQkvLyBjaGVjayBpZiB3aWR0aCBhbmQgaGVpZ2h0IGlzIHZhbGlkIGJhc2VkIG9uIHNldCBzdGFuZGFyZAotCWlmIChjeDI1ODIxX2lzX3ZhbGlkX3dpZHRoKGYtPmZtdC5waXgud2lkdGgsIGRldi0+dHZub3JtKSkgewotCQlmaC0+d2lkdGggPSBmLT5mbXQucGl4LndpZHRoOwotCX0KLQotCWlmIChjeDI1ODIxX2lzX3ZhbGlkX2hlaWdodChmLT5mbXQucGl4LmhlaWdodCwgZGV2LT50dm5vcm0pKSB7Ci0JCWZoLT5oZWlnaHQgPSBmLT5mbXQucGl4LmhlaWdodDsKLQl9Ci0KLQlpZiAoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfWTQxUCkKLQkJcGl4X2Zvcm1hdCA9IFBJWEVMX0ZSTVRfNDExOwotCWVsc2UgaWYgKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1lVWVYpCi0JCXBpeF9mb3JtYXQgPSBQSVhFTF9GUk1UXzQyMjsKLQllbHNlCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY3gyNTgyMV9zZXRfcGl4ZWxfZm9ybWF0KGRldiwgU1JBTV9DSDAzLCBwaXhfZm9ybWF0KTsKLQotCS8vIGNoZWNrIGlmIGNpZiByZXNvbHV0aW9uCi0JaWYgKGZoLT53aWR0aCA9PSAzMjAgfHwgZmgtPndpZHRoID09IDM1MikgewotCQlkZXYtPnVzZV9jaWZfcmVzb2x1dGlvbltTUkFNX0NIMDNdID0gMTsKLQl9IGVsc2UgewotCQlkZXYtPnVzZV9jaWZfcmVzb2x1dGlvbltTUkFNX0NIMDNdID0gMDsKLQl9Ci0JZGV2LT5jaWZfd2lkdGhbU1JBTV9DSDAzXSA9IGZoLT53aWR0aDsKLQltZWR1c2Ffc2V0X3Jlc29sdXRpb24oZGV2LCBmaC0+d2lkdGgsIFNSQU1fQ0gwMyk7Ci0KLQlkcHJpbnRrKDIsICIlcygpIHdpZHRoPSVkIGhlaWdodD0lZCBmaWVsZD0lZFxuIiwgX19mdW5jX18sIGZoLT53aWR0aCwKLQkJZmgtPmhlaWdodCwgZmgtPnZpZHEuZmllbGQpOwotCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCB2aWRlbywgc19mbXQsIGYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCi17Ci0JaW50IHJldF92YWwgPSAwOwotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKLQotCXJldF92YWwgPSB2aWRlb2J1Zl9kcWJ1ZihnZXRfcXVldWUoZmgpLCBwLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Ci0KLQlwLT5zZXF1ZW5jZSA9IGRldi0+dmlkcVtTUkFNX0NIMDNdLmNvdW50OwotCi0JcmV0dXJuIHJldF92YWw7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX2xvZ19zdGF0dXMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKLQljaGFyIG5hbWVbMzIgKyAyXTsKLQotCXN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2ggPSAmZGV2LT5zcmFtX2NoYW5uZWxzW1NSQU1fQ0gwM107Ci0JdTMyIHRtcCA9IDA7Ci0KLQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcy8yIiwgZGV2LT5uYW1lKTsKLQlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT0gIFNUQVJUIExPRyBTVEFUVVMgID09PT09PT09PT09PVxuIiwKLQkgICAgICAgZGV2LT5uYW1lKTsKLQljeDI1ODIxX2NhbGxfYWxsKGRldiwgY29yZSwgbG9nX3N0YXR1cyk7Ci0KLQl0bXAgPSBjeF9yZWFkKHNyYW1fY2gtPmRtYV9jdGwpOwotCXByaW50ayhLRVJOX0lORk8gIlZpZGVvIGlucHV0IDMgaXMgJXNcbiIsCi0JICAgICAgICh0bXAgJiAweDExKSA/ICJzdHJlYW1pbmciIDogInN0b3BwZWQiKTsKLQlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT09ICBFTkQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09PVxuIiwKLQkgICAgICAgZGV2LT5uYW1lKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7Ci0JaW50IGVycjsKLQotCWlmIChmaCkgewotCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgZmgtPnByaW8pOwotCQlpZiAoMCAhPSBlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiBjeDI1ODIxX3NldF9jb250cm9sKGRldiwgY3RsLCBTUkFNX0NIMDMpOwotfQotCi0vLyBleHBvcnRlZCBzdHVmZgotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2aWRlb19mb3BzID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5vcGVuID0gdmlkZW9fb3BlbiwKLQkucmVsZWFzZSA9IHZpZGVvX3JlbGVhc2UsCi0JLnJlYWQgPSB2aWRlb19yZWFkLAotCS5wb2xsID0gdmlkZW9fcG9sbCwKLQkubW1hcCA9IGN4MjU4MjFfdmlkZW9fbW1hcCwKLQkuaW9jdGwgPSB2aWRlb19pb2N0bDIsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHZpZGVvX2lvY3RsX29wcyA9IHsKLQkudmlkaW9jX3F1ZXJ5Y2FwID0gY3gyNTgyMV92aWRpb2NfcXVlcnljYXAsCi0JLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwID0gY3gyNTgyMV92aWRpb2NfZW51bV9mbXRfdmlkX2NhcCwKLQkudmlkaW9jX2dfZm10X3ZpZF9jYXAgPSBjeDI1ODIxX3ZpZGlvY19nX2ZtdF92aWRfY2FwLAotCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwID0gY3gyNTgyMV92aWRpb2NfdHJ5X2ZtdF92aWRfY2FwLAotCS52aWRpb2Nfc19mbXRfdmlkX2NhcCA9IHZpZGlvY19zX2ZtdF92aWRfY2FwLAotCS52aWRpb2NfcmVxYnVmcyA9IGN4MjU4MjFfdmlkaW9jX3JlcWJ1ZnMsCi0JLnZpZGlvY19xdWVyeWJ1ZiA9IGN4MjU4MjFfdmlkaW9jX3F1ZXJ5YnVmLAotCS52aWRpb2NfcWJ1ZiA9IGN4MjU4MjFfdmlkaW9jX3FidWYsCi0JLnZpZGlvY19kcWJ1ZiA9IHZpZGlvY19kcWJ1ZiwKLSNpZmRlZiBUVU5FUl9GTEFHCi0JLnZpZGlvY19zX3N0ZCA9IGN4MjU4MjFfdmlkaW9jX3Nfc3RkLAotCS52aWRpb2NfcXVlcnlzdGQgPSBjeDI1ODIxX3ZpZGlvY19xdWVyeXN0ZCwKLSNlbmRpZgotCS52aWRpb2NfY3JvcGNhcCA9IGN4MjU4MjFfdmlkaW9jX2Nyb3BjYXAsCi0JLnZpZGlvY19zX2Nyb3AgPSBjeDI1ODIxX3ZpZGlvY19zX2Nyb3AsCi0JLnZpZGlvY19nX2Nyb3AgPSBjeDI1ODIxX3ZpZGlvY19nX2Nyb3AsCi0JLnZpZGlvY19lbnVtX2lucHV0ID0gY3gyNTgyMV92aWRpb2NfZW51bV9pbnB1dCwKLQkudmlkaW9jX2dfaW5wdXQgPSBjeDI1ODIxX3ZpZGlvY19nX2lucHV0LAotCS52aWRpb2Nfc19pbnB1dCA9IGN4MjU4MjFfdmlkaW9jX3NfaW5wdXQsCi0JLnZpZGlvY19nX2N0cmwgPSBjeDI1ODIxX3ZpZGlvY19nX2N0cmwsCi0JLnZpZGlvY19zX2N0cmwgPSB2aWRpb2Nfc19jdHJsLAotCS52aWRpb2NfcXVlcnljdHJsID0gY3gyNTgyMV92aWRpb2NfcXVlcnljdHJsLAotCS52aWRpb2Nfc3RyZWFtb24gPSB2aWRpb2Nfc3RyZWFtb24sCi0JLnZpZGlvY19zdHJlYW1vZmYgPSB2aWRpb2Nfc3RyZWFtb2ZmLAotCS52aWRpb2NfbG9nX3N0YXR1cyA9IHZpZGlvY19sb2dfc3RhdHVzLAotCS52aWRpb2NfZ19wcmlvcml0eSA9IGN4MjU4MjFfdmlkaW9jX2dfcHJpb3JpdHksCi0JLnZpZGlvY19zX3ByaW9yaXR5ID0gY3gyNTgyMV92aWRpb2Nfc19wcmlvcml0eSwKLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLQkudmlkaW9jZ21idWYgPSBjeDI1ODIxX3ZpZGlvY2dtYnVmLAotI2VuZGlmCi0jaWZkZWYgVFVORVJfRkxBRwotCS52aWRpb2NfZ190dW5lciA9IGN4MjU4MjFfdmlkaW9jX2dfdHVuZXIsCi0JLnZpZGlvY19zX3R1bmVyID0gY3gyNTgyMV92aWRpb2Nfc190dW5lciwKLQkudmlkaW9jX2dfZnJlcXVlbmN5ID0gY3gyNTgyMV92aWRpb2NfZ19mcmVxdWVuY3ksCi0JLnZpZGlvY19zX2ZyZXF1ZW5jeSA9IGN4MjU4MjFfdmlkaW9jX3NfZnJlcXVlbmN5LAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwotCS52aWRpb2NfZ19yZWdpc3RlciA9IGN4MjU4MjFfdmlkaW9jX2dfcmVnaXN0ZXIsCi0JLnZpZGlvY19zX3JlZ2lzdGVyID0gY3gyNTgyMV92aWRpb2Nfc19yZWdpc3RlciwKLSNlbmRpZgotfTsKLQotc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMyA9IHsKLQkubmFtZSA9ICJjeDI1ODIxLXZpZGVvIiwKLQkuZm9wcyA9ICZ2aWRlb19mb3BzLAotCS5pb2N0bF9vcHMgPSAmdmlkZW9faW9jdGxfb3BzLAotCS50dm5vcm1zID0gQ1gyNTgyMV9OT1JNUywKLQkuY3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQ19NLAotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW80LmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvNC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2IwOGM1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW80LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MzQgKzAsMCBAQAotLyoKLSAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KLSAqICBBdXRob3JzICA8c2h1LmxpbkBjb25leGFudC5jb20+LCA8aGllcC5odXluaEBjb25leGFudC5jb20+Ci0gKiAgQmFzZWQgb24gU3RldmVuIFRvdGggPHN0b3RoQGxpbnV4dHYub3JnPiBjeDIzODg1IGRyaXZlcgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjeDI1ODIxLXZpZGVvLmgiCi0KLXN0YXRpYyB2b2lkIGJ1ZmZlcl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZiA9Ci0JICAgIGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yik7Ci0Jc3RydWN0IGN4MjU4MjFfYnVmZmVyICpwcmV2OwotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHZxLT5wcml2X2RhdGE7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCXN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlICpxID0gJmRldi0+dmlkcVtTUkFNX0NIMDRdOwotCi0JLyogYWRkIGp1bXAgdG8gc3RvcHBlciAqLwotCWJ1Zi0+cmlzYy5qbXBbMF0gPSBjcHVfdG9fbGUzMihSSVNDX0pVTVAgfCBSSVNDX0lSUTEgfCBSSVNDX0NOVF9JTkMpOwotCWJ1Zi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihxLT5zdG9wcGVyLmRtYSk7Ci0JYnVmLT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOwkvKiBiaXRzIDYzLTMyICovCi0KLQlkcHJpbnRrKDIsICJqbXAgdG8gc3RvcHBlciAoMHgleClcbiIsIGJ1Zi0+cmlzYy5qbXBbMV0pOwotCi0JaWYgKCFsaXN0X2VtcHR5KCZxLT5xdWV1ZWQpKSB7Ci0JCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5xdWV1ZWQpOwotCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOwotCQlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBxdWV1ZWRcbiIsIGJ1ZiwKLQkJCWJ1Zi0+dmIuaSk7Ci0KLQl9IGVsc2UgaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKLQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7Ci0JCWN4MjU4MjFfc3RhcnRfdmlkZW9fZG1hKGRldiwgcSwgYnVmLAotCQkJCQkmZGV2LT5zcmFtX2NoYW5uZWxzW1NSQU1fQ0gwNF0pOwotCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOwotCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKLQkJbW9kX3RpbWVyKCZxLT50aW1lb3V0LCBqaWZmaWVzICsgQlVGRkVSX1RJTUVPVVQpOwotCQlkcHJpbnRrKDIsCi0JCQkiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBhY3RpdmUsIGJ1ZiBjbnQgPSAlZCwgcS0+Y291bnQgPSAlZFxuIiwKLQkJCWJ1ZiwgYnVmLT52Yi5pLCBidWYtPmNvdW50LCBxLT5jb3VudCk7Ci0JfSBlbHNlIHsKLQkJcHJldiA9Ci0JCSAgICBsaXN0X2VudHJ5KHEtPmFjdGl2ZS5wcmV2LCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnF1ZXVlKTsKLQkJaWYgKHByZXYtPnZiLndpZHRoID09IGJ1Zi0+dmIud2lkdGgKLQkJICAgICYmIHByZXYtPnZiLmhlaWdodCA9PSBidWYtPnZiLmhlaWdodAotCQkgICAgJiYgcHJldi0+Zm10ID09IGJ1Zi0+Zm10KSB7Ci0JCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+YWN0aXZlKTsKLQkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7Ci0JCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKLQkJCXByZXYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIoYnVmLT5yaXNjLmRtYSk7Ci0KLQkJCS8qIDY0IGJpdCBiaXRzIDYzLTMyICovCi0JCQlwcmV2LT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOwotCQkJZHByaW50aygyLAotCQkJCSJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBhY3RpdmUsIGJ1Zi0+Y291bnQ9JWRcbiIsCi0JCQkJYnVmLCBidWYtPnZiLmksIGJ1Zi0+Y291bnQpOwotCi0JCX0gZWxzZSB7Ci0JCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+cXVldWVkKTsKLQkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7Ci0JCQlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGZpcnN0IHF1ZXVlZFxuIiwgYnVmLAotCQkJCWJ1Zi0+dmIuaSk7Ci0JCX0KLQl9Ci0KLQlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgewotCQlkcHJpbnRrKDIsICJhY3RpdmUgcXVldWUgZW1wdHkhXG4iKTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIGN4MjU4MjFfdmlkZW9fcW9wcyA9IHsKLQkuYnVmX3NldHVwID0gY3gyNTgyMV9idWZmZXJfc2V0dXAsCi0JLmJ1Zl9wcmVwYXJlID0gY3gyNTgyMV9idWZmZXJfcHJlcGFyZSwKLQkuYnVmX3F1ZXVlID0gYnVmZmVyX3F1ZXVlLAotCS5idWZfcmVsZWFzZSA9IGN4MjU4MjFfYnVmZmVyX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgaW50IHZpZGVvX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaDsKLQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQl1MzIgcGl4X2Zvcm1hdDsKLQotCXByaW50aygib3BlbiBkZXY9JXMgdHlwZT0lc1xuIiwgdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZGV2KSwKLQkJdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKLQotCS8qIGFsbG9jYXRlICsgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCi0JZmggPSBremFsbG9jKHNpemVvZigqZmgpLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBmaCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlsb2NrX2tlcm5lbCgpOwotCi0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7Ci0JZmgtPmRldiA9IGRldjsKLQlmaC0+dHlwZSA9IHR5cGU7Ci0JZmgtPndpZHRoID0gNzIwOwotCi0JaWYgKGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0JHIHx8IGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0RLKQotCQlmaC0+aGVpZ2h0ID0gNTc2OwotCWVsc2UKLQkJZmgtPmhlaWdodCA9IDQ4MDsKLQotCWRldi0+Y2hhbm5lbF9vcGVuZWQgPSBTUkFNX0NIMDQ7Ci0JcGl4X2Zvcm1hdCA9Ci0JICAgIChkZXYtPnBpeGVsX2Zvcm1hdHNbZGV2LT5jaGFubmVsX29wZW5lZF0gPT0KLQkgICAgIFBJWEVMX0ZSTVRfNDExKSA/IFY0TDJfUElYX0ZNVF9ZNDFQIDogVjRMMl9QSVhfRk1UX1lVWVY7Ci0JZmgtPmZtdCA9IGZvcm1hdF9ieV9mb3VyY2MocGl4X2Zvcm1hdCk7Ci0KLQl2NGwyX3ByaW9fb3BlbigmZGV2LT5wcmlvLCAmZmgtPnByaW8pOwotCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJmZoLT52aWRxLCAmY3gyNTgyMV92aWRlb19xb3BzLAotCQkJICAgICAgICZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5zbG9jaywKLQkJCSAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCi0JCQkgICAgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY3gyNTgyMV9idWZmZXIpLCBmaCk7Ci0KLQlkcHJpbnRrKDEsICJwb3N0IHZpZGVvYnVmX3F1ZXVlX2luaXQoKVxuIik7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHZpZGVvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogZGF0YSwgc2l6ZV90IGNvdW50LAotCQkJICBsb2ZmX3QgKiBwcG9zKQotewotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQotCXN3aXRjaCAoZmgtPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKLQkJaWYgKGN4MjU4MjFfcmVzX2xvY2tlZChmaC0+ZGV2LCBSRVNPVVJDRV9WSURFTzQpKQotCQkJcmV0dXJuIC1FQlVTWTsKLQotCQlyZXR1cm4gdmlkZW9idWZfcmVhZF9vbmUoJmZoLT52aWRxLCBkYXRhLCBjb3VudCwgcHBvcywKLQkJCQkJIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKLQotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdmlkZW9fcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmOwotCi0JaWYgKGN4MjU4MjFfcmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFTzQpKSB7Ci0JCS8qIHN0cmVhbWluZyBjYXB0dXJlICovCi0JCWlmIChsaXN0X2VtcHR5KCZmaC0+dmlkcS5zdHJlYW0pKQotCQkJcmV0dXJuIFBPTExFUlI7Ci0JCWJ1ZiA9IGxpc3RfZW50cnkoZmgtPnZpZHEuc3RyZWFtLm5leHQsCi0JCQkJIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIuc3RyZWFtKTsKLQl9IGVsc2UgewotCQkvKiByZWFkKCkgY2FwdHVyZSAqLwotCQlidWYgPSAoc3RydWN0IGN4MjU4MjFfYnVmZmVyICopZmgtPnZpZHEucmVhZF9idWY7Ci0JCWlmIChOVUxMID09IGJ1ZikKLQkJCXJldHVybiBQT0xMRVJSOwotCX0KLQotCXBvbGxfd2FpdChmaWxlLCAmYnVmLT52Yi5kb25lLCB3YWl0KTsKLQlpZiAoYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ET05FIHx8IGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRVJST1IpIHsKLQkJaWYgKGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRE9ORSkgewotCQkJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCi0JCQlpZiAoZGV2ICYmIGRldi0+dXNlX2NpZl9yZXNvbHV0aW9uW1NSQU1fQ0gwNF0pIHsKLQkJCQl1OCBjYW1faWQgPSAqKChjaGFyICopYnVmLT52Yi5iYWRkciArIDMpOwotCQkJCW1lbWNweSgoY2hhciAqKWJ1Zi0+dmIuYmFkZHIsCi0JCQkJICAgICAgIChjaGFyICopYnVmLT52Yi5iYWRkciArIChmaC0+d2lkdGggKiAyKSwKLQkJCQkgICAgICAgKGZoLT53aWR0aCAqIDIpKTsKLQkJCQkqKChjaGFyICopYnVmLT52Yi5iYWRkciArIDMpID0gY2FtX2lkOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkZW9fcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCi0JLy9zdG9wIHRoZSByaXNjIGVuZ2luZSBhbmQgZmlmbwotCWN4X3dyaXRlKGNoYW5uZWw0LT5kbWFfY3RsLCAwKTsJLyogRklGTyBhbmQgUklTQyBkaXNhYmxlICovCi0KLQkvKiBzdG9wIHZpZGVvIGNhcHR1cmUgKi8KLQlpZiAoY3gyNTgyMV9yZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPNCkpIHsKLQkJdmlkZW9idWZfcXVldWVfY2FuY2VsKCZmaC0+dmlkcSk7Ci0JCWN4MjU4MjFfcmVzX2ZyZWUoZGV2LCBmaCwgUkVTT1VSQ0VfVklERU80KTsKLQl9Ci0KLQlpZiAoZmgtPnZpZHEucmVhZF9idWYpIHsKLQkJY3gyNTgyMV9idWZmZXJfcmVsZWFzZSgmZmgtPnZpZHEsIGZoLT52aWRxLnJlYWRfYnVmKTsKLQkJa2ZyZWUoZmgtPnZpZHEucmVhZF9idWYpOwotCX0KLQotCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPnZpZHEpOwotCi0JdjRsMl9wcmlvX2Nsb3NlKCZkZXYtPnByaW8sIGZoLT5wcmlvKTsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCWtmcmVlKGZoKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7Ci0KLQlpZiAodW5saWtlbHkoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSkgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAodW5saWtlbHkoaSAhPSBmaC0+dHlwZSkpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHVubGlrZWx5KCFjeDI1ODIxX3Jlc19nZXQoZGV2LCBmaCwgY3gyNTgyMV9nZXRfcmVzb3VyY2UoZmgsIFJFU09VUkNFX1ZJREVPNCkpKSkgewotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbihnZXRfcXVldWUoZmgpKTsKLX0KLQotc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKLQlpbnQgZXJyLCByZXM7Ci0KLQlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoaSAhPSBmaC0+dHlwZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXMgPSBjeDI1ODIxX2dldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU80KTsKLQllcnIgPSB2aWRlb2J1Zl9zdHJlYW1vZmYoZ2V0X3F1ZXVlKGZoKSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JY3gyNTgyMV9yZXNfZnJlZShkZXYsIGZoLCByZXMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7Ci0JaW50IGVycjsKLQlpbnQgcGl4X2Zvcm1hdCA9IDA7Ci0KLQkvLyBjaGVjayBwcmlvcml0eQotCWlmIChmaCkgewotCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgZmgtPnByaW8pOwotCQlpZiAoMCAhPSBlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KLQlkcHJpbnRrKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7Ci0JZXJyID0gY3gyNTgyMV92aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIHByaXYsIGYpOwotCi0JaWYgKDAgIT0gZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZmgtPmZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7Ci0JZmgtPnZpZHEuZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOwotCi0JLy8gY2hlY2sgaWYgd2lkdGggYW5kIGhlaWdodCBpcyB2YWxpZCBiYXNlZCBvbiBzZXQgc3RhbmRhcmQKLQlpZiAoY3gyNTgyMV9pc192YWxpZF93aWR0aChmLT5mbXQucGl4LndpZHRoLCBkZXYtPnR2bm9ybSkpIHsKLQkJZmgtPndpZHRoID0gZi0+Zm10LnBpeC53aWR0aDsKLQl9Ci0KLQlpZiAoY3gyNTgyMV9pc192YWxpZF9oZWlnaHQoZi0+Zm10LnBpeC5oZWlnaHQsIGRldi0+dHZub3JtKSkgewotCQlmaC0+aGVpZ2h0ID0gZi0+Zm10LnBpeC5oZWlnaHQ7Ci0JfQotCi0JaWYgKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1k0MVApCi0JCXBpeF9mb3JtYXQgPSBQSVhFTF9GUk1UXzQxMTsKLQllbHNlIGlmIChmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVVlWKQotCQlwaXhfZm9ybWF0ID0gUElYRUxfRlJNVF80MjI7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWN4MjU4MjFfc2V0X3BpeGVsX2Zvcm1hdChkZXYsIFNSQU1fQ0gwNCwgcGl4X2Zvcm1hdCk7Ci0KLQkvLyBjaGVjayBpZiBjaWYgcmVzb2x1dGlvbgotCWlmIChmaC0+d2lkdGggPT0gMzIwIHx8IGZoLT53aWR0aCA9PSAzNTIpIHsKLQkJZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDA0XSA9IDE7Ci0JfSBlbHNlIHsKLQkJZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDA0XSA9IDA7Ci0JfQotCWRldi0+Y2lmX3dpZHRoW1NSQU1fQ0gwNF0gPSBmaC0+d2lkdGg7Ci0JbWVkdXNhX3NldF9yZXNvbHV0aW9uKGRldiwgZmgtPndpZHRoLCBTUkFNX0NIMDQpOwotCi0JZHByaW50aygyLCAiJXMoKSB3aWR0aD0lZCBoZWlnaHQ9JWQgZmllbGQ9JWRcbiIsIF9fZnVuY19fLCBmaC0+d2lkdGgsCi0JCWZoLT5oZWlnaHQsIGZoLT52aWRxLmZpZWxkKTsKLQljeDI1ODIxX2NhbGxfYWxsKGRldiwgdmlkZW8sIHNfZm10LCBmKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpwKQotewotCWludCByZXRfdmFsID0gMDsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7Ci0KLQlyZXRfdmFsID0gdmlkZW9idWZfZHFidWYoZ2V0X3F1ZXVlKGZoKSwgcCwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotCi0JcC0+c2VxdWVuY2UgPSBkZXYtPnZpZHFbU1JBTV9DSDA0XS5jb3VudDsKLQotCXJldHVybiByZXRfdmFsOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19sb2dfc3RhdHVzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2KQotewotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7Ci0JY2hhciBuYW1lWzMyICsgMl07Ci0KLQlzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoID0gJmRldi0+c3JhbV9jaGFubmVsc1tTUkFNX0NIMDRdOwotCXUzMiB0bXAgPSAwOwotCi0Jc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMvMiIsIGRldi0+bmFtZSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogPT09PT09PT09PT09ICBTVEFSVCBMT0cgU1RBVFVTICA9PT09PT09PT09PT1cbiIsCi0JICAgICAgIGRldi0+bmFtZSk7Ci0JY3gyNTgyMV9jYWxsX2FsbChkZXYsIGNvcmUsIGxvZ19zdGF0dXMpOwotCi0JdG1wID0gY3hfcmVhZChzcmFtX2NoLT5kbWFfY3RsKTsKLQlwcmludGsoS0VSTl9JTkZPICJWaWRlbyBpbnB1dCA0IGlzICVzXG4iLAotCSAgICAgICAodG1wICYgMHgxMSkgPyAic3RyZWFtaW5nIiA6ICJzdG9wcGVkIik7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogPT09PT09PT09PT09PSAgRU5EIExPRyBTVEFUVVMgID09PT09PT09PT09PT1cbiIsCi0JICAgICAgIGRldi0+bmFtZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCSBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdGwpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OwotCWludCBlcnI7Ci0KLQlpZiAoZmgpIHsKLQkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sIGZoLT5wcmlvKTsKLQkJaWYgKDAgIT0gZXJyKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gY3gyNTgyMV9zZXRfY29udHJvbChkZXYsIGN0bCwgU1JBTV9DSDA0KTsKLX0KLQotLy8gZXhwb3J0ZWQgc3R1ZmYKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdmlkZW9fZm9wcyA9IHsKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkub3BlbiA9IHZpZGVvX29wZW4sCi0JLnJlbGVhc2UgPSB2aWRlb19yZWxlYXNlLAotCS5yZWFkID0gdmlkZW9fcmVhZCwKLQkucG9sbCA9IHZpZGVvX3BvbGwsCi0JLm1tYXAgPSBjeDI1ODIxX3ZpZGVvX21tYXAsCi0JLmlvY3RsID0gdmlkZW9faW9jdGwyLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB2aWRlb19pb2N0bF9vcHMgPSB7Ci0JLnZpZGlvY19xdWVyeWNhcCA9IGN4MjU4MjFfdmlkaW9jX3F1ZXJ5Y2FwLAotCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IGN4MjU4MjFfdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCi0JLnZpZGlvY19nX2ZtdF92aWRfY2FwID0gY3gyNTgyMV92aWRpb2NfZ19mbXRfdmlkX2NhcCwKLQkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcCA9IGN4MjU4MjFfdmlkaW9jX3RyeV9mbXRfdmlkX2NhcCwKLQkudmlkaW9jX3NfZm10X3ZpZF9jYXAgPSB2aWRpb2Nfc19mbXRfdmlkX2NhcCwKLQkudmlkaW9jX3JlcWJ1ZnMgPSBjeDI1ODIxX3ZpZGlvY19yZXFidWZzLAotCS52aWRpb2NfcXVlcnlidWYgPSBjeDI1ODIxX3ZpZGlvY19xdWVyeWJ1ZiwKLQkudmlkaW9jX3FidWYgPSBjeDI1ODIxX3ZpZGlvY19xYnVmLAotCS52aWRpb2NfZHFidWYgPSB2aWRpb2NfZHFidWYsCi0jaWZkZWYgVFVORVJfRkxBRwotCS52aWRpb2Nfc19zdGQgPSBjeDI1ODIxX3ZpZGlvY19zX3N0ZCwKLQkudmlkaW9jX3F1ZXJ5c3RkID0gY3gyNTgyMV92aWRpb2NfcXVlcnlzdGQsCi0jZW5kaWYKLQkudmlkaW9jX2Nyb3BjYXAgPSBjeDI1ODIxX3ZpZGlvY19jcm9wY2FwLAotCS52aWRpb2Nfc19jcm9wID0gY3gyNTgyMV92aWRpb2Nfc19jcm9wLAotCS52aWRpb2NfZ19jcm9wID0gY3gyNTgyMV92aWRpb2NfZ19jcm9wLAotCS52aWRpb2NfZW51bV9pbnB1dCA9IGN4MjU4MjFfdmlkaW9jX2VudW1faW5wdXQsCi0JLnZpZGlvY19nX2lucHV0ID0gY3gyNTgyMV92aWRpb2NfZ19pbnB1dCwKLQkudmlkaW9jX3NfaW5wdXQgPSBjeDI1ODIxX3ZpZGlvY19zX2lucHV0LAotCS52aWRpb2NfZ19jdHJsID0gY3gyNTgyMV92aWRpb2NfZ19jdHJsLAotCS52aWRpb2Nfc19jdHJsID0gdmlkaW9jX3NfY3RybCwKLQkudmlkaW9jX3F1ZXJ5Y3RybCA9IGN4MjU4MjFfdmlkaW9jX3F1ZXJ5Y3RybCwKLQkudmlkaW9jX3N0cmVhbW9uID0gdmlkaW9jX3N0cmVhbW9uLAotCS52aWRpb2Nfc3RyZWFtb2ZmID0gdmlkaW9jX3N0cmVhbW9mZiwKLQkudmlkaW9jX2xvZ19zdGF0dXMgPSB2aWRpb2NfbG9nX3N0YXR1cywKLQkudmlkaW9jX2dfcHJpb3JpdHkgPSBjeDI1ODIxX3ZpZGlvY19nX3ByaW9yaXR5LAotCS52aWRpb2Nfc19wcmlvcml0eSA9IGN4MjU4MjFfdmlkaW9jX3NfcHJpb3JpdHksCi0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0JLnZpZGlvY2dtYnVmID0gY3gyNTgyMV92aWRpb2NnbWJ1ZiwKLSNlbmRpZgotI2lmZGVmIFRVTkVSX0ZMQUcKLQkudmlkaW9jX2dfdHVuZXIgPSBjeDI1ODIxX3ZpZGlvY19nX3R1bmVyLAotCS52aWRpb2Nfc190dW5lciA9IGN4MjU4MjFfdmlkaW9jX3NfdHVuZXIsCi0JLnZpZGlvY19nX2ZyZXF1ZW5jeSA9IGN4MjU4MjFfdmlkaW9jX2dfZnJlcXVlbmN5LAotCS52aWRpb2Nfc19mcmVxdWVuY3kgPSBjeDI1ODIxX3ZpZGlvY19zX2ZyZXF1ZW5jeSwKLSNlbmRpZgotI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKLQkudmlkaW9jX2dfcmVnaXN0ZXIgPSBjeDI1ODIxX3ZpZGlvY19nX3JlZ2lzdGVyLAotCS52aWRpb2Nfc19yZWdpc3RlciA9IGN4MjU4MjFfdmlkaW9jX3NfcmVnaXN0ZXIsCi0jZW5kaWYKLX07Ci0KLXN0cnVjdCB2aWRlb19kZXZpY2UgY3gyNTgyMV92aWRlb190ZW1wbGF0ZTQgPSB7Ci0JLm5hbWUgPSAiY3gyNTgyMS12aWRlbyIsCi0JLmZvcHMgPSAmdmlkZW9fZm9wcywKLQkuaW9jdGxfb3BzID0gJnZpZGVvX2lvY3RsX29wcywKLQkudHZub3JtcyA9IENYMjU4MjFfTk9STVMsCi0JLmN1cnJlbnRfbm9ybSA9IFY0TDJfU1REX05UU0NfTSwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvNS5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkzNzAzMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvNS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDM0ICswLDAgQEAKLS8qCi0gKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCi0gKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgotICogIEJhc2VkIG9uIFN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4gY3gyMzg4NSBkcml2ZXIKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKgotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY3gyNTgyMS12aWRlby5oIgotCi1zdGF0aWMgdm9pZCBidWZmZXJfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCi17Ci0Jc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWYgPQotCSAgICBjb250YWluZXJfb2YodmIsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIpOwotCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqcHJldjsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSB2cS0+cHJpdl9kYXRhOwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKLQlzdHJ1Y3QgY3gyNTgyMV9kbWFxdWV1ZSAqcSA9ICZkZXYtPnZpZHFbU1JBTV9DSDA1XTsKLQotCS8qIGFkZCBqdW1wIHRvIHN0b3BwZXIgKi8KLQlidWYtPnJpc2Muam1wWzBdID0gY3B1X3RvX2xlMzIoUklTQ19KVU1QIHwgUklTQ19JUlExIHwgUklTQ19DTlRfSU5DKTsKLQlidWYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIocS0+c3RvcHBlci5kbWEpOwotCWJ1Zi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsJLyogYml0cyA2My0zMiAqLwotCi0JZHByaW50aygyLCAiam1wIHRvIHN0b3BwZXIgKDB4JXgpXG4iLCBidWYtPnJpc2Muam1wWzFdKTsKLQotCWlmICghbGlzdF9lbXB0eSgmcS0+cXVldWVkKSkgewotCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+cXVldWVkKTsKLQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKLQkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gcXVldWVkXG4iLCBidWYsCi0JCQlidWYtPnZiLmkpOwotCi0JfSBlbHNlIGlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7Ci0JCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOwotCQljeDI1ODIxX3N0YXJ0X3ZpZGVvX2RtYShkZXYsIHEsIGJ1ZiwKLQkJCQkJJmRldi0+c3JhbV9jaGFubmVsc1tTUkFNX0NIMDVdKTsKLQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKLQkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7Ci0JCW1vZF90aW1lcigmcS0+dGltZW91dCwgamlmZmllcyArIEJVRkZFUl9USU1FT1VUKTsKLQkJZHByaW50aygyLAotCQkJIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gZmlyc3QgYWN0aXZlLCBidWYgY250ID0gJWQsIHEtPmNvdW50ID0gJWRcbiIsCi0JCQlidWYsIGJ1Zi0+dmIuaSwgYnVmLT5jb3VudCwgcS0+Y291bnQpOwotCX0gZWxzZSB7Ci0JCXByZXYgPQotCQkgICAgbGlzdF9lbnRyeShxLT5hY3RpdmUucHJldiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5xdWV1ZSk7Ci0JCWlmIChwcmV2LT52Yi53aWR0aCA9PSBidWYtPnZiLndpZHRoCi0JCSAgICAmJiBwcmV2LT52Yi5oZWlnaHQgPT0gYnVmLT52Yi5oZWlnaHQKLQkJICAgICYmIHByZXYtPmZtdCA9PSBidWYtPmZtdCkgewotCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7Ci0JCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOwotCQkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7Ci0JCQlwcmV2LT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKGJ1Zi0+cmlzYy5kbWEpOwotCi0JCQkvKiA2NCBiaXQgYml0cyA2My0zMiAqLwotCQkJcHJldi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsKLQkJCWRwcmludGsoMiwKLQkJCQkiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gYWN0aXZlLCBidWYtPmNvdW50PSVkXG4iLAotCQkJCWJ1ZiwgYnVmLT52Yi5pLCBidWYtPmNvdW50KTsKLQotCQl9IGVsc2UgewotCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPnF1ZXVlZCk7Ci0JCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOwotCQkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBxdWV1ZWRcbiIsIGJ1ZiwKLQkJCQlidWYtPnZiLmkpOwotCQl9Ci0JfQotCi0JaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKLQkJZHByaW50aygyLCAiYWN0aXZlIHF1ZXVlIGVtcHR5IVxuIik7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBjeDI1ODIxX3ZpZGVvX3FvcHMgPSB7Ci0JLmJ1Zl9zZXR1cCA9IGN4MjU4MjFfYnVmZmVyX3NldHVwLAotCS5idWZfcHJlcGFyZSA9IGN4MjU4MjFfYnVmZmVyX3ByZXBhcmUsCi0JLmJ1Zl9xdWV1ZSA9IGJ1ZmZlcl9xdWV1ZSwKLQkuYnVmX3JlbGVhc2UgPSBjeDI1ODIxX2J1ZmZlcl9yZWxlYXNlLAotfTsKLQotc3RhdGljIGludCB2aWRlb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmg7Ci0JZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JdTMyIHBpeF9mb3JtYXQ7Ci0KLQlwcmludGsoIm9wZW4gZGV2PSVzIHR5cGU9JXNcbiIsIHZpZGVvX2RldmljZV9ub2RlX25hbWUodmRldiksCi0JCXY0bDJfdHlwZV9uYW1lc1t0eXBlXSk7Ci0KLQkvKiBhbGxvY2F0ZSArIGluaXRpYWxpemUgcGVyIGZpbGVoYW5kbGUgZGF0YSAqLwotCWZoID0ga3phbGxvYyhzaXplb2YoKmZoKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gZmgpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbG9ja19rZXJuZWwoKTsKLQotCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOwotCWZoLT5kZXYgPSBkZXY7Ci0JZmgtPnR5cGUgPSB0eXBlOwotCWZoLT53aWR0aCA9IDcyMDsKLQotCWlmIChkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9CRyB8fCBkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9ESykKLQkJZmgtPmhlaWdodCA9IDU3NjsKLQllbHNlCi0JCWZoLT5oZWlnaHQgPSA0ODA7Ci0KLQlkZXYtPmNoYW5uZWxfb3BlbmVkID0gU1JBTV9DSDA1OwotCXBpeF9mb3JtYXQgPQotCSAgICAoZGV2LT5waXhlbF9mb3JtYXRzW2Rldi0+Y2hhbm5lbF9vcGVuZWRdID09Ci0JICAgICBQSVhFTF9GUk1UXzQxMSkgPyBWNEwyX1BJWF9GTVRfWTQxUCA6IFY0TDJfUElYX0ZNVF9ZVVlWOwotCWZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKHBpeF9mb3JtYXQpOwotCi0JdjRsMl9wcmlvX29wZW4oJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKLQotCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJmZoLT52aWRxLCAmY3gyNTgyMV92aWRlb19xb3BzLAotCQkJICAgICAgICZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5zbG9jaywKLQkJCSAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCi0JCQkgICAgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY3gyNTgyMV9idWZmZXIpLCBmaCk7Ci0KLQlkcHJpbnRrKDEsICJwb3N0IHZpZGVvYnVmX3F1ZXVlX2luaXQoKVxuIik7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHZpZGVvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogZGF0YSwgc2l6ZV90IGNvdW50LAotCQkJICBsb2ZmX3QgKiBwcG9zKQotewotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQotCXN3aXRjaCAoZmgtPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKLQkJaWYgKGN4MjU4MjFfcmVzX2xvY2tlZChmaC0+ZGV2LCBSRVNPVVJDRV9WSURFTzUpKQotCQkJcmV0dXJuIC1FQlVTWTsKLQotCQlyZXR1cm4gdmlkZW9idWZfcmVhZF9vbmUoJmZoLT52aWRxLCBkYXRhLCBjb3VudCwgcHBvcywKLQkJCQkJIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKLQotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdmlkZW9fcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmOwotCi0JaWYgKGN4MjU4MjFfcmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFTzUpKSB7Ci0JCS8qIHN0cmVhbWluZyBjYXB0dXJlICovCi0JCWlmIChsaXN0X2VtcHR5KCZmaC0+dmlkcS5zdHJlYW0pKQotCQkJcmV0dXJuIFBPTExFUlI7Ci0JCWJ1ZiA9IGxpc3RfZW50cnkoZmgtPnZpZHEuc3RyZWFtLm5leHQsCi0JCQkJIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIuc3RyZWFtKTsKLQl9IGVsc2UgewotCQkvKiByZWFkKCkgY2FwdHVyZSAqLwotCQlidWYgPSAoc3RydWN0IGN4MjU4MjFfYnVmZmVyICopZmgtPnZpZHEucmVhZF9idWY7Ci0JCWlmIChOVUxMID09IGJ1ZikKLQkJCXJldHVybiBQT0xMRVJSOwotCX0KLQotCXBvbGxfd2FpdChmaWxlLCAmYnVmLT52Yi5kb25lLCB3YWl0KTsKLQlpZiAoYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ET05FIHx8IGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRVJST1IpIHsKLQkJaWYgKGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRE9ORSkgewotCQkJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCi0JCQlpZiAoZGV2ICYmIGRldi0+dXNlX2NpZl9yZXNvbHV0aW9uW1NSQU1fQ0gwNV0pIHsKLQkJCQl1OCBjYW1faWQgPSAqKChjaGFyICopYnVmLT52Yi5iYWRkciArIDMpOwotCQkJCW1lbWNweSgoY2hhciAqKWJ1Zi0+dmIuYmFkZHIsCi0JCQkJICAgICAgIChjaGFyICopYnVmLT52Yi5iYWRkciArIChmaC0+d2lkdGggKiAyKSwKLQkJCQkgICAgICAgKGZoLT53aWR0aCAqIDIpKTsKLQkJCQkqKChjaGFyICopYnVmLT52Yi5iYWRkciArIDMpID0gY2FtX2lkOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkZW9fcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCi0JLy9zdG9wIHRoZSByaXNjIGVuZ2luZSBhbmQgZmlmbwotCWN4X3dyaXRlKGNoYW5uZWw1LT5kbWFfY3RsLCAwKTsJLyogRklGTyBhbmQgUklTQyBkaXNhYmxlICovCi0KLQkvKiBzdG9wIHZpZGVvIGNhcHR1cmUgKi8KLQlpZiAoY3gyNTgyMV9yZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPNSkpIHsKLQkJdmlkZW9idWZfcXVldWVfY2FuY2VsKCZmaC0+dmlkcSk7Ci0JCWN4MjU4MjFfcmVzX2ZyZWUoZGV2LCBmaCwgUkVTT1VSQ0VfVklERU81KTsKLQl9Ci0KLQlpZiAoZmgtPnZpZHEucmVhZF9idWYpIHsKLQkJY3gyNTgyMV9idWZmZXJfcmVsZWFzZSgmZmgtPnZpZHEsIGZoLT52aWRxLnJlYWRfYnVmKTsKLQkJa2ZyZWUoZmgtPnZpZHEucmVhZF9idWYpOwotCX0KLQotCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPnZpZHEpOwotCi0JdjRsMl9wcmlvX2Nsb3NlKCZkZXYtPnByaW8sIGZoLT5wcmlvKTsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCWtmcmVlKGZoKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7Ci0KLQlpZiAodW5saWtlbHkoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSkgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAodW5saWtlbHkoaSAhPSBmaC0+dHlwZSkpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHVubGlrZWx5KCFjeDI1ODIxX3Jlc19nZXQoZGV2LCBmaCwgY3gyNTgyMV9nZXRfcmVzb3VyY2UoZmgsIFJFU09VUkNFX1ZJREVPNSkpKSkgewotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbihnZXRfcXVldWUoZmgpKTsKLX0KLQotc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKLQlpbnQgZXJyLCByZXM7Ci0KLQlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoaSAhPSBmaC0+dHlwZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXMgPSBjeDI1ODIxX2dldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU81KTsKLQllcnIgPSB2aWRlb2J1Zl9zdHJlYW1vZmYoZ2V0X3F1ZXVlKGZoKSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JY3gyNTgyMV9yZXNfZnJlZShkZXYsIGZoLCByZXMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7Ci0JaW50IGVycjsKLQlpbnQgcGl4X2Zvcm1hdCA9IDA7Ci0KLQlpZiAoZmgpIHsKLQkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sIGZoLT5wcmlvKTsKLQkJaWYgKDAgIT0gZXJyKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlkcHJpbnRrKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7Ci0JZXJyID0gY3gyNTgyMV92aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIHByaXYsIGYpOwotCi0JaWYgKDAgIT0gZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZmgtPmZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7Ci0JZmgtPnZpZHEuZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOwotCi0JLy8gY2hlY2sgaWYgd2lkdGggYW5kIGhlaWdodCBpcyB2YWxpZCBiYXNlZCBvbiBzZXQgc3RhbmRhcmQKLQlpZiAoY3gyNTgyMV9pc192YWxpZF93aWR0aChmLT5mbXQucGl4LndpZHRoLCBkZXYtPnR2bm9ybSkpIHsKLQkJZmgtPndpZHRoID0gZi0+Zm10LnBpeC53aWR0aDsKLQl9Ci0KLQlpZiAoY3gyNTgyMV9pc192YWxpZF9oZWlnaHQoZi0+Zm10LnBpeC5oZWlnaHQsIGRldi0+dHZub3JtKSkgewotCQlmaC0+aGVpZ2h0ID0gZi0+Zm10LnBpeC5oZWlnaHQ7Ci0JfQotCi0JaWYgKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1k0MVApCi0JCXBpeF9mb3JtYXQgPSBQSVhFTF9GUk1UXzQxMTsKLQllbHNlIGlmIChmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVVlWKQotCQlwaXhfZm9ybWF0ID0gUElYRUxfRlJNVF80MjI7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWN4MjU4MjFfc2V0X3BpeGVsX2Zvcm1hdChkZXYsIFNSQU1fQ0gwNSwgcGl4X2Zvcm1hdCk7Ci0KLQkvLyBjaGVjayBpZiBjaWYgcmVzb2x1dGlvbgotCWlmIChmaC0+d2lkdGggPT0gMzIwIHx8IGZoLT53aWR0aCA9PSAzNTIpIHsKLQkJZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDA1XSA9IDE7Ci0JfSBlbHNlIHsKLQkJZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDA1XSA9IDA7Ci0JfQotCWRldi0+Y2lmX3dpZHRoW1NSQU1fQ0gwNV0gPSBmaC0+d2lkdGg7Ci0JbWVkdXNhX3NldF9yZXNvbHV0aW9uKGRldiwgZmgtPndpZHRoLCBTUkFNX0NIMDUpOwotCi0JZHByaW50aygyLCAiJXMoKSB3aWR0aD0lZCBoZWlnaHQ9JWQgZmllbGQ9JWRcbiIsIF9fZnVuY19fLCBmaC0+d2lkdGgsCi0JCWZoLT5oZWlnaHQsIGZoLT52aWRxLmZpZWxkKTsKLQljeDI1ODIxX2NhbGxfYWxsKGRldiwgdmlkZW8sIHNfZm10LCBmKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpwKQotewotCWludCByZXRfdmFsID0gMDsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7Ci0KLQlyZXRfdmFsID0gdmlkZW9idWZfZHFidWYoZ2V0X3F1ZXVlKGZoKSwgcCwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotCi0JcC0+c2VxdWVuY2UgPSBkZXYtPnZpZHFbU1JBTV9DSDA1XS5jb3VudDsKLQotCXJldHVybiByZXRfdmFsOwotfQotc3RhdGljIGludCB2aWRpb2NfbG9nX3N0YXR1cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdikKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OwotCWNoYXIgbmFtZVszMiArIDJdOwotCi0Jc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCA9ICZkZXYtPnNyYW1fY2hhbm5lbHNbU1JBTV9DSDA1XTsKLQl1MzIgdG1wID0gMDsKLQotCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzLzIiLCBkZXYtPm5hbWUpOwotCXByaW50ayhLRVJOX0lORk8gIiVzLzI6ID09PT09PT09PT09PSAgU1RBUlQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09XG4iLAotCSAgICAgICBkZXYtPm5hbWUpOwotCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCBjb3JlLCBsb2dfc3RhdHVzKTsKLQotCXRtcCA9IGN4X3JlYWQoc3JhbV9jaC0+ZG1hX2N0bCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiVmlkZW8gaW5wdXQgNSBpcyAlc1xuIiwKLQkgICAgICAgKHRtcCAmIDB4MTEpID8gInN0cmVhbWluZyIgOiAic3RvcHBlZCIpOwotCXByaW50ayhLRVJOX0lORk8gIiVzLzI6ID09PT09PT09PT09PT0gIEVORCBMT0cgU1RBVFVTICA9PT09PT09PT09PT09XG4iLAotCSAgICAgICBkZXYtPm5hbWUpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkgc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQotewotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKLQlpbnQgZXJyOwotCi0JaWYgKGZoKSB7Ci0JCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCBmaC0+cHJpbyk7Ci0JCWlmICgwICE9IGVycikKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIGN4MjU4MjFfc2V0X2NvbnRyb2woZGV2LCBjdGwsIFNSQU1fQ0gwNSk7Ci19Ci0KLS8vIGV4cG9ydGVkIHN0dWZmCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHZpZGVvX2ZvcHMgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLm9wZW4gPSB2aWRlb19vcGVuLAotCS5yZWxlYXNlID0gdmlkZW9fcmVsZWFzZSwKLQkucmVhZCA9IHZpZGVvX3JlYWQsCi0JLnBvbGwgPSB2aWRlb19wb2xsLAotCS5tbWFwID0gY3gyNTgyMV92aWRlb19tbWFwLAotCS5pb2N0bCA9IHZpZGVvX2lvY3RsMiwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdmlkZW9faW9jdGxfb3BzID0gewotCS52aWRpb2NfcXVlcnljYXAgPSBjeDI1ODIxX3ZpZGlvY19xdWVyeWNhcCwKLQkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgPSBjeDI1ODIxX3ZpZGlvY19lbnVtX2ZtdF92aWRfY2FwLAotCS52aWRpb2NfZ19mbXRfdmlkX2NhcCA9IGN4MjU4MjFfdmlkaW9jX2dfZm10X3ZpZF9jYXAsCi0JLnZpZGlvY190cnlfZm10X3ZpZF9jYXAgPSBjeDI1ODIxX3ZpZGlvY190cnlfZm10X3ZpZF9jYXAsCi0JLnZpZGlvY19zX2ZtdF92aWRfY2FwID0gdmlkaW9jX3NfZm10X3ZpZF9jYXAsCi0JLnZpZGlvY19yZXFidWZzID0gY3gyNTgyMV92aWRpb2NfcmVxYnVmcywKLQkudmlkaW9jX3F1ZXJ5YnVmID0gY3gyNTgyMV92aWRpb2NfcXVlcnlidWYsCi0JLnZpZGlvY19xYnVmID0gY3gyNTgyMV92aWRpb2NfcWJ1ZiwKLQkudmlkaW9jX2RxYnVmID0gdmlkaW9jX2RxYnVmLAotI2lmZGVmIFRVTkVSX0ZMQUcKLQkudmlkaW9jX3Nfc3RkID0gY3gyNTgyMV92aWRpb2Nfc19zdGQsCi0JLnZpZGlvY19xdWVyeXN0ZCA9IGN4MjU4MjFfdmlkaW9jX3F1ZXJ5c3RkLAotI2VuZGlmCi0JLnZpZGlvY19jcm9wY2FwID0gY3gyNTgyMV92aWRpb2NfY3JvcGNhcCwKLQkudmlkaW9jX3NfY3JvcCA9IGN4MjU4MjFfdmlkaW9jX3NfY3JvcCwKLQkudmlkaW9jX2dfY3JvcCA9IGN4MjU4MjFfdmlkaW9jX2dfY3JvcCwKLQkudmlkaW9jX2VudW1faW5wdXQgPSBjeDI1ODIxX3ZpZGlvY19lbnVtX2lucHV0LAotCS52aWRpb2NfZ19pbnB1dCA9IGN4MjU4MjFfdmlkaW9jX2dfaW5wdXQsCi0JLnZpZGlvY19zX2lucHV0ID0gY3gyNTgyMV92aWRpb2Nfc19pbnB1dCwKLQkudmlkaW9jX2dfY3RybCA9IGN4MjU4MjFfdmlkaW9jX2dfY3RybCwKLQkudmlkaW9jX3NfY3RybCA9IHZpZGlvY19zX2N0cmwsCi0JLnZpZGlvY19xdWVyeWN0cmwgPSBjeDI1ODIxX3ZpZGlvY19xdWVyeWN0cmwsCi0JLnZpZGlvY19zdHJlYW1vbiA9IHZpZGlvY19zdHJlYW1vbiwKLQkudmlkaW9jX3N0cmVhbW9mZiA9IHZpZGlvY19zdHJlYW1vZmYsCi0JLnZpZGlvY19sb2dfc3RhdHVzID0gdmlkaW9jX2xvZ19zdGF0dXMsCi0JLnZpZGlvY19nX3ByaW9yaXR5ID0gY3gyNTgyMV92aWRpb2NfZ19wcmlvcml0eSwKLQkudmlkaW9jX3NfcHJpb3JpdHkgPSBjeDI1ODIxX3ZpZGlvY19zX3ByaW9yaXR5LAotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotCS52aWRpb2NnbWJ1ZiA9IGN4MjU4MjFfdmlkaW9jZ21idWYsCi0jZW5kaWYKLSNpZmRlZiBUVU5FUl9GTEFHCi0JLnZpZGlvY19nX3R1bmVyID0gY3gyNTgyMV92aWRpb2NfZ190dW5lciwKLQkudmlkaW9jX3NfdHVuZXIgPSBjeDI1ODIxX3ZpZGlvY19zX3R1bmVyLAotCS52aWRpb2NfZ19mcmVxdWVuY3kgPSBjeDI1ODIxX3ZpZGlvY19nX2ZyZXF1ZW5jeSwKLQkudmlkaW9jX3NfZnJlcXVlbmN5ID0gY3gyNTgyMV92aWRpb2Nfc19mcmVxdWVuY3ksCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi0JLnZpZGlvY19nX3JlZ2lzdGVyID0gY3gyNTgyMV92aWRpb2NfZ19yZWdpc3RlciwKLQkudmlkaW9jX3NfcmVnaXN0ZXIgPSBjeDI1ODIxX3ZpZGlvY19zX3JlZ2lzdGVyLAotI2VuZGlmCi19OwotCi1zdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4MjU4MjFfdmlkZW9fdGVtcGxhdGU1ID0gewotCS5uYW1lID0gImN4MjU4MjEtdmlkZW8iLAotCS5mb3BzID0gJnZpZGVvX2ZvcHMsCi0JLmlvY3RsX29wcyA9ICZ2aWRlb19pb2N0bF9vcHMsCi0JLnR2bm9ybXMgPSBDWDI1ODIxX05PUk1TLAotCS5jdXJyZW50X25vcm0gPSBWNEwyX1NURF9OVFNDX00sCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW82LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkYjJlYjguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzYuYworKysgL2Rldi9udWxsCkBAIC0xLDQzNCArMCwwIEBACi0vKgotICogIERyaXZlciBmb3IgdGhlIENvbmV4YW50IENYMjU4MjEgUENJZSBicmlkZ2UKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA5IENvbmV4YW50IFN5c3RlbXMgSW5jLgotICogIEF1dGhvcnMgIDxzaHUubGluQGNvbmV4YW50LmNvbT4sIDxoaWVwLmh1eW5oQGNvbmV4YW50LmNvbT4KLSAqICBCYXNlZCBvbiBTdGV2ZW4gVG90aCA8c3RvdGhAbGludXh0di5vcmc+IGN4MjM4ODUgZHJpdmVyCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICoKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImN4MjU4MjEtdmlkZW8uaCIKLQotc3RhdGljIHZvaWQgYnVmZmVyX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQotewotCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmID0KLQkgICAgY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiKTsKLQlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKnByZXY7Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gdnEtPnByaXZfZGF0YTsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7Ci0Jc3RydWN0IGN4MjU4MjFfZG1hcXVldWUgKnEgPSAmZGV2LT52aWRxW1NSQU1fQ0gwNl07Ci0KLQkvKiBhZGQganVtcCB0byBzdG9wcGVyICovCi0JYnVmLT5yaXNjLmptcFswXSA9IGNwdV90b19sZTMyKFJJU0NfSlVNUCB8IFJJU0NfSVJRMSB8IFJJU0NfQ05UX0lOQyk7Ci0JYnVmLT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKHEtPnN0b3BwZXIuZG1hKTsKLQlidWYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7CS8qIGJpdHMgNjMtMzIgKi8KLQotCWRwcmludGsoMiwgImptcCB0byBzdG9wcGVyICgweCV4KVxuIiwgYnVmLT5yaXNjLmptcFsxXSk7Ci0KLQlpZiAoIWxpc3RfZW1wdHkoJnEtPnF1ZXVlZCkpIHsKLQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPnF1ZXVlZCk7Ci0JCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7Ci0JCWRwcmludGsoMiwgIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gYXBwZW5kIHRvIHF1ZXVlZFxuIiwgYnVmLAotCQkJYnVmLT52Yi5pKTsKLQotCX0gZWxzZSBpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgewotCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+YWN0aXZlKTsKLQkJY3gyNTgyMV9zdGFydF92aWRlb19kbWEoZGV2LCBxLCBidWYsCi0JCQkJCSZkZXYtPnNyYW1fY2hhbm5lbHNbU1JBTV9DSDA2XSk7Ci0JCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7Ci0JCWJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOwotCQltb2RfdGltZXIoJnEtPnRpbWVvdXQsIGppZmZpZXMgKyBCVUZGRVJfVElNRU9VVCk7Ci0JCWRwcmludGsoMiwKLQkJCSJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGZpcnN0IGFjdGl2ZSwgYnVmIGNudCA9ICVkLCBxLT5jb3VudCA9ICVkXG4iLAotCQkJYnVmLCBidWYtPnZiLmksIGJ1Zi0+Y291bnQsIHEtPmNvdW50KTsKLQl9IGVsc2UgewotCQlwcmV2ID0KLQkJICAgIGxpc3RfZW50cnkocS0+YWN0aXZlLnByZXYsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIucXVldWUpOwotCQlpZiAocHJldi0+dmIud2lkdGggPT0gYnVmLT52Yi53aWR0aAotCQkgICAgJiYgcHJldi0+dmIuaGVpZ2h0ID09IGJ1Zi0+dmIuaGVpZ2h0Ci0JCSAgICAmJiBwcmV2LT5mbXQgPT0gYnVmLT5mbXQpIHsKLQkJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOwotCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKLQkJCWJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOwotCQkJcHJldi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihidWYtPnJpc2MuZG1hKTsKLQotCQkJLyogNjQgYml0IGJpdHMgNjMtMzIgKi8KLQkJCXByZXYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7Ci0JCQlkcHJpbnRrKDIsCi0JCQkJIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gYXBwZW5kIHRvIGFjdGl2ZSwgYnVmLT5jb3VudD0lZFxuIiwKLQkJCQlidWYsIGJ1Zi0+dmIuaSwgYnVmLT5jb3VudCk7Ci0KLQkJfSBlbHNlIHsKLQkJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5xdWV1ZWQpOwotCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKLQkJCWRwcmludGsoMiwgIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gZmlyc3QgcXVldWVkXG4iLCBidWYsCi0JCQkJYnVmLT52Yi5pKTsKLQkJfQotCX0KLQotCWlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7Ci0JCWRwcmludGsoMiwgImFjdGl2ZSBxdWV1ZSBlbXB0eSFcbiIpOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgY3gyNTgyMV92aWRlb19xb3BzID0gewotCS5idWZfc2V0dXAgPSBjeDI1ODIxX2J1ZmZlcl9zZXR1cCwKLQkuYnVmX3ByZXBhcmUgPSBjeDI1ODIxX2J1ZmZlcl9wcmVwYXJlLAotCS5idWZfcXVldWUgPSBidWZmZXJfcXVldWUsCi0JLmJ1Zl9yZWxlYXNlID0gY3gyNTgyMV9idWZmZXJfcmVsZWFzZSwKLX07Ci0KLXN0YXRpYyBpbnQgdmlkZW9fb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoOwotCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCXUzMiBwaXhfZm9ybWF0OwotCi0JcHJpbnRrKCJvcGVuIGRldj0lcyB0eXBlPSVzXG4iLCB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKHZkZXYpLAotCQl2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOwotCi0JLyogYWxsb2NhdGUgKyBpbml0aWFsaXplIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KLQlmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksIEdGUF9LRVJORUwpOwotCWlmIChOVUxMID09IGZoKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWxvY2tfa2VybmVsKCk7Ci0KLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKLQlmaC0+ZGV2ID0gZGV2OwotCWZoLT50eXBlID0gdHlwZTsKLQlmaC0+d2lkdGggPSA3MjA7Ci0KLQlpZiAoZGV2LT50dm5vcm0gJiBWNEwyX1NURF9QQUxfQkcgfHwgZGV2LT50dm5vcm0gJiBWNEwyX1NURF9QQUxfREspCi0JCWZoLT5oZWlnaHQgPSA1NzY7Ci0JZWxzZQotCQlmaC0+aGVpZ2h0ID0gNDgwOwotCi0JZGV2LT5jaGFubmVsX29wZW5lZCA9IFNSQU1fQ0gwNjsKLQlwaXhfZm9ybWF0ID0KLQkgICAgKGRldi0+cGl4ZWxfZm9ybWF0c1tkZXYtPmNoYW5uZWxfb3BlbmVkXSA9PQotCSAgICAgUElYRUxfRlJNVF80MTEpID8gVjRMMl9QSVhfRk1UX1k0MVAgOiBWNEwyX1BJWF9GTVRfWVVZVjsKLQlmaC0+Zm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhwaXhfZm9ybWF0KTsKLQotCXY0bDJfcHJpb19vcGVuKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7Ci0KLQl2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KCZmaC0+dmlkcSwgJmN4MjU4MjFfdmlkZW9fcW9wcywKLQkJCSAgICAgICAmZGV2LT5wY2ktPmRldiwgJmRldi0+c2xvY2ssCi0JCQkgICAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAotCQkJICAgICAgIFY0TDJfRklFTERfSU5URVJMQUNFRCwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGN4MjU4MjFfYnVmZmVyKSwgZmgpOwotCi0JZHByaW50aygxLCAicG9zdCB2aWRlb2J1Zl9xdWV1ZV9pbml0KClcbiIpOwotCXVubG9ja19rZXJuZWwoKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3NpemVfdCB2aWRlb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqIGRhdGEsIHNpemVfdCBjb3VudCwKLQkJCSAgbG9mZl90ICogcHBvcykKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0KLQlzd2l0Y2ggKGZoLT50eXBlKSB7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6Ci0JCWlmIChjeDI1ODIxX3Jlc19sb2NrZWQoZmgtPmRldiwgUkVTT1VSQ0VfVklERU82KSkKLQkJCXJldHVybiAtRUJVU1k7Ci0KLQkJcmV0dXJuIHZpZGVvYnVmX3JlYWRfb25lKCZmaC0+dmlkcSwgZGF0YSwgY291bnQsIHBwb3MsCi0JCQkJCSBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Ci0KLQlkZWZhdWx0OgotCQlCVUcoKTsKLQkJcmV0dXJuIDA7Ci0JfQotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHZpZGVvX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICAgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQotewotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZjsKLQotCWlmIChjeDI1ODIxX3Jlc19jaGVjayhmaCwgUkVTT1VSQ0VfVklERU82KSkgewotCQkvKiBzdHJlYW1pbmcgY2FwdHVyZSAqLwotCQlpZiAobGlzdF9lbXB0eSgmZmgtPnZpZHEuc3RyZWFtKSkKLQkJCXJldHVybiBQT0xMRVJSOwotCQlidWYgPSBsaXN0X2VudHJ5KGZoLT52aWRxLnN0cmVhbS5uZXh0LAotCQkJCSBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnN0cmVhbSk7Ci0JfSBlbHNlIHsKLQkJLyogcmVhZCgpIGNhcHR1cmUgKi8KLQkJYnVmID0gKHN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqKWZoLT52aWRxLnJlYWRfYnVmOwotCQlpZiAoTlVMTCA9PSBidWYpCi0JCQlyZXR1cm4gUE9MTEVSUjsKLQl9Ci0KLQlwb2xsX3dhaXQoZmlsZSwgJmJ1Zi0+dmIuZG9uZSwgd2FpdCk7Ci0JaWYgKGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRE9ORSB8fCBidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0VSUk9SKSB7Ci0JCWlmIChidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0RPTkUpIHsKLQkJCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKLQotCQkJaWYgKGRldiAmJiBkZXYtPnVzZV9jaWZfcmVzb2x1dGlvbltTUkFNX0NIMDZdKSB7Ci0JCQkJdTggY2FtX2lkID0gKigoY2hhciAqKWJ1Zi0+dmIuYmFkZHIgKyAzKTsKLQkJCQltZW1jcHkoKGNoYXIgKilidWYtPnZiLmJhZGRyLAotCQkJCSAgICAgICAoY2hhciAqKWJ1Zi0+dmIuYmFkZHIgKyAoZmgtPndpZHRoICogMiksCi0JCQkJICAgICAgIChmaC0+d2lkdGggKiAyKSk7Ci0JCQkJKigoY2hhciAqKWJ1Zi0+dmIuYmFkZHIgKyAzKSA9IGNhbV9pZDsKLQkJCX0KLQkJfQotCi0JCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGVvX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKLQotCS8vc3RvcCB0aGUgcmlzYyBlbmdpbmUgYW5kIGZpZm8KLQljeF93cml0ZShjaGFubmVsNi0+ZG1hX2N0bCwgMCk7CS8qIEZJRk8gYW5kIFJJU0MgZGlzYWJsZSAqLwotCi0JLyogc3RvcCB2aWRlbyBjYXB0dXJlICovCi0JaWYgKGN4MjU4MjFfcmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFTzYpKSB7Ci0JCXZpZGVvYnVmX3F1ZXVlX2NhbmNlbCgmZmgtPnZpZHEpOwotCQljeDI1ODIxX3Jlc19mcmVlKGRldiwgZmgsIFJFU09VUkNFX1ZJREVPNik7Ci0JfQotCWlmIChmaC0+dmlkcS5yZWFkX2J1ZikgewotCQljeDI1ODIxX2J1ZmZlcl9yZWxlYXNlKCZmaC0+dmlkcSwgZmgtPnZpZHEucmVhZF9idWYpOwotCQlrZnJlZShmaC0+dmlkcS5yZWFkX2J1Zik7Ci0JfQotCi0JdmlkZW9idWZfbW1hcF9mcmVlKCZmaC0+dmlkcSk7Ci0KLQl2NGwyX3ByaW9fY2xvc2UoJmRldi0+cHJpbywgZmgtPnByaW8pOwotCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7Ci0Ja2ZyZWUoZmgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKLQotCWlmICh1bmxpa2VseShmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpKSB7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICh1bmxpa2VseShpICE9IGZoLT50eXBlKSkgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAodW5saWtlbHkoIWN4MjU4MjFfcmVzX2dldChkZXYsIGZoLCBjeDI1ODIxX2dldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU82KSkpKSB7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9uKGdldF9xdWV1ZShmaCkpOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQotewotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCWludCBlcnIsIHJlczsKLQotCWlmIChmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChpICE9IGZoLT50eXBlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJlcyA9IGN4MjU4MjFfZ2V0X3Jlc291cmNlKGZoLCBSRVNPVVJDRV9WSURFTzYpOwotCWVyciA9IHZpZGVvYnVmX3N0cmVhbW9mZihnZXRfcXVldWUoZmgpKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQljeDI1ODIxX3Jlc19mcmVlKGRldiwgZmgsIHJlcyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQotewotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKLQlpbnQgZXJyOwotCWludCBwaXhfZm9ybWF0ID0gMDsKLQotCWlmIChmaCkgewotCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgZmgtPnByaW8pOwotCQlpZiAoMCAhPSBlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCWRwcmludGsoMiwgIiVzKClcbiIsIF9fZnVuY19fKTsKLQllcnIgPSBjeDI1ODIxX3ZpZGlvY190cnlfZm10X3ZpZF9jYXAoZmlsZSwgcHJpdiwgZik7Ci0KLQlpZiAoMCAhPSBlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlmaC0+Zm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKLQlmaC0+dmlkcS5maWVsZCA9IGYtPmZtdC5waXguZmllbGQ7Ci0KLQkvLyBjaGVjayBpZiB3aWR0aCBhbmQgaGVpZ2h0IGlzIHZhbGlkIGJhc2VkIG9uIHNldCBzdGFuZGFyZAotCWlmIChjeDI1ODIxX2lzX3ZhbGlkX3dpZHRoKGYtPmZtdC5waXgud2lkdGgsIGRldi0+dHZub3JtKSkgewotCQlmaC0+d2lkdGggPSBmLT5mbXQucGl4LndpZHRoOwotCX0KLQotCWlmIChjeDI1ODIxX2lzX3ZhbGlkX2hlaWdodChmLT5mbXQucGl4LmhlaWdodCwgZGV2LT50dm5vcm0pKSB7Ci0JCWZoLT5oZWlnaHQgPSBmLT5mbXQucGl4LmhlaWdodDsKLQl9Ci0KLQlpZiAoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfWTQxUCkKLQkJcGl4X2Zvcm1hdCA9IFBJWEVMX0ZSTVRfNDExOwotCWVsc2UgaWYgKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1lVWVYpCi0JCXBpeF9mb3JtYXQgPSBQSVhFTF9GUk1UXzQyMjsKLQllbHNlCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY3gyNTgyMV9zZXRfcGl4ZWxfZm9ybWF0KGRldiwgU1JBTV9DSDA2LCBwaXhfZm9ybWF0KTsKLQotCS8vIGNoZWNrIGlmIGNpZiByZXNvbHV0aW9uCi0JaWYgKGZoLT53aWR0aCA9PSAzMjAgfHwgZmgtPndpZHRoID09IDM1MikgewotCQlkZXYtPnVzZV9jaWZfcmVzb2x1dGlvbltTUkFNX0NIMDZdID0gMTsKLQl9IGVsc2UgewotCQlkZXYtPnVzZV9jaWZfcmVzb2x1dGlvbltTUkFNX0NIMDZdID0gMDsKLQl9Ci0JZGV2LT5jaWZfd2lkdGhbU1JBTV9DSDA2XSA9IGZoLT53aWR0aDsKLQltZWR1c2Ffc2V0X3Jlc29sdXRpb24oZGV2LCBmaC0+d2lkdGgsIFNSQU1fQ0gwNik7Ci0KLQlkcHJpbnRrKDIsICIlcygpIHdpZHRoPSVkIGhlaWdodD0lZCBmaWVsZD0lZFxuIiwgX19mdW5jX18sIGZoLT53aWR0aCwKLQkJZmgtPmhlaWdodCwgZmgtPnZpZHEuZmllbGQpOwotCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCB2aWRlbywgc19mbXQsIGYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCi17Ci0JaW50IHJldF92YWwgPSAwOwotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKLQotCXJldF92YWwgPSB2aWRlb2J1Zl9kcWJ1ZihnZXRfcXVldWUoZmgpLCBwLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Ci0KLQlwLT5zZXF1ZW5jZSA9IGRldi0+dmlkcVtTUkFNX0NIMDZdLmNvdW50OwotCi0JcmV0dXJuIHJldF92YWw7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX2xvZ19zdGF0dXMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKLQljaGFyIG5hbWVbMzIgKyAyXTsKLQotCXN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2ggPSAmZGV2LT5zcmFtX2NoYW5uZWxzW1NSQU1fQ0gwNl07Ci0JdTMyIHRtcCA9IDA7Ci0KLQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcy8yIiwgZGV2LT5uYW1lKTsKLQlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT0gIFNUQVJUIExPRyBTVEFUVVMgID09PT09PT09PT09PVxuIiwKLQkgICAgICAgZGV2LT5uYW1lKTsKLQljeDI1ODIxX2NhbGxfYWxsKGRldiwgY29yZSwgbG9nX3N0YXR1cyk7Ci0KLQl0bXAgPSBjeF9yZWFkKHNyYW1fY2gtPmRtYV9jdGwpOwotCXByaW50ayhLRVJOX0lORk8gIlZpZGVvIGlucHV0IDYgaXMgJXNcbiIsCi0JICAgICAgICh0bXAgJiAweDExKSA/ICJzdHJlYW1pbmciIDogInN0b3BwZWQiKTsKLQlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT09ICBFTkQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09PVxuIiwKLQkgICAgICAgZGV2LT5uYW1lKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7Ci0JaW50IGVycjsKLQotCWlmIChmaCkgewotCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgZmgtPnByaW8pOwotCQlpZiAoMCAhPSBlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiBjeDI1ODIxX3NldF9jb250cm9sKGRldiwgY3RsLCBTUkFNX0NIMDYpOwotfQotCi0vLyBleHBvcnRlZCBzdHVmZgotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2aWRlb19mb3BzID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5vcGVuID0gdmlkZW9fb3BlbiwKLQkucmVsZWFzZSA9IHZpZGVvX3JlbGVhc2UsCi0JLnJlYWQgPSB2aWRlb19yZWFkLAotCS5wb2xsID0gdmlkZW9fcG9sbCwKLQkubW1hcCA9IGN4MjU4MjFfdmlkZW9fbW1hcCwKLQkuaW9jdGwgPSB2aWRlb19pb2N0bDIsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHZpZGVvX2lvY3RsX29wcyA9IHsKLQkudmlkaW9jX3F1ZXJ5Y2FwID0gY3gyNTgyMV92aWRpb2NfcXVlcnljYXAsCi0JLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwID0gY3gyNTgyMV92aWRpb2NfZW51bV9mbXRfdmlkX2NhcCwKLQkudmlkaW9jX2dfZm10X3ZpZF9jYXAgPSBjeDI1ODIxX3ZpZGlvY19nX2ZtdF92aWRfY2FwLAotCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwID0gY3gyNTgyMV92aWRpb2NfdHJ5X2ZtdF92aWRfY2FwLAotCS52aWRpb2Nfc19mbXRfdmlkX2NhcCA9IHZpZGlvY19zX2ZtdF92aWRfY2FwLAotCS52aWRpb2NfcmVxYnVmcyA9IGN4MjU4MjFfdmlkaW9jX3JlcWJ1ZnMsCi0JLnZpZGlvY19xdWVyeWJ1ZiA9IGN4MjU4MjFfdmlkaW9jX3F1ZXJ5YnVmLAotCS52aWRpb2NfcWJ1ZiA9IGN4MjU4MjFfdmlkaW9jX3FidWYsCi0JLnZpZGlvY19kcWJ1ZiA9IHZpZGlvY19kcWJ1ZiwKLSNpZmRlZiBUVU5FUl9GTEFHCi0JLnZpZGlvY19zX3N0ZCA9IGN4MjU4MjFfdmlkaW9jX3Nfc3RkLAotCS52aWRpb2NfcXVlcnlzdGQgPSBjeDI1ODIxX3ZpZGlvY19xdWVyeXN0ZCwKLSNlbmRpZgotCS52aWRpb2NfY3JvcGNhcCA9IGN4MjU4MjFfdmlkaW9jX2Nyb3BjYXAsCi0JLnZpZGlvY19zX2Nyb3AgPSBjeDI1ODIxX3ZpZGlvY19zX2Nyb3AsCi0JLnZpZGlvY19nX2Nyb3AgPSBjeDI1ODIxX3ZpZGlvY19nX2Nyb3AsCi0JLnZpZGlvY19lbnVtX2lucHV0ID0gY3gyNTgyMV92aWRpb2NfZW51bV9pbnB1dCwKLQkudmlkaW9jX2dfaW5wdXQgPSBjeDI1ODIxX3ZpZGlvY19nX2lucHV0LAotCS52aWRpb2Nfc19pbnB1dCA9IGN4MjU4MjFfdmlkaW9jX3NfaW5wdXQsCi0JLnZpZGlvY19nX2N0cmwgPSBjeDI1ODIxX3ZpZGlvY19nX2N0cmwsCi0JLnZpZGlvY19zX2N0cmwgPSB2aWRpb2Nfc19jdHJsLAotCS52aWRpb2NfcXVlcnljdHJsID0gY3gyNTgyMV92aWRpb2NfcXVlcnljdHJsLAotCS52aWRpb2Nfc3RyZWFtb24gPSB2aWRpb2Nfc3RyZWFtb24sCi0JLnZpZGlvY19zdHJlYW1vZmYgPSB2aWRpb2Nfc3RyZWFtb2ZmLAotCS52aWRpb2NfbG9nX3N0YXR1cyA9IHZpZGlvY19sb2dfc3RhdHVzLAotCS52aWRpb2NfZ19wcmlvcml0eSA9IGN4MjU4MjFfdmlkaW9jX2dfcHJpb3JpdHksCi0JLnZpZGlvY19zX3ByaW9yaXR5ID0gY3gyNTgyMV92aWRpb2Nfc19wcmlvcml0eSwKLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLQkudmlkaW9jZ21idWYgPSBjeDI1ODIxX3ZpZGlvY2dtYnVmLAotI2VuZGlmCi0jaWZkZWYgVFVORVJfRkxBRwotCS52aWRpb2NfZ190dW5lciA9IGN4MjU4MjFfdmlkaW9jX2dfdHVuZXIsCi0JLnZpZGlvY19zX3R1bmVyID0gY3gyNTgyMV92aWRpb2Nfc190dW5lciwKLQkudmlkaW9jX2dfZnJlcXVlbmN5ID0gY3gyNTgyMV92aWRpb2NfZ19mcmVxdWVuY3ksCi0JLnZpZGlvY19zX2ZyZXF1ZW5jeSA9IGN4MjU4MjFfdmlkaW9jX3NfZnJlcXVlbmN5LAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwotCS52aWRpb2NfZ19yZWdpc3RlciA9IGN4MjU4MjFfdmlkaW9jX2dfcmVnaXN0ZXIsCi0JLnZpZGlvY19zX3JlZ2lzdGVyID0gY3gyNTgyMV92aWRpb2Nfc19yZWdpc3RlciwKLSNlbmRpZgotfTsKLQotc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlNiA9IHsKLQkubmFtZSA9ICJjeDI1ODIxLXZpZGVvIiwKLQkuZm9wcyA9ICZ2aWRlb19mb3BzLAotCS5pb2N0bF9vcHMgPSAmdmlkZW9faW9jdGxfb3BzLAotCS50dm5vcm1zID0gQ1gyNTgyMV9OT1JNUywKLQkuY3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQ19NLAotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW83LmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvNy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTRhNzY5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW83LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MzMgKzAsMCBAQAotLyoKLSAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KLSAqICBBdXRob3JzICA8c2h1LmxpbkBjb25leGFudC5jb20+LCA8aGllcC5odXluaEBjb25leGFudC5jb20+Ci0gKiAgQmFzZWQgb24gU3RldmVuIFRvdGggPHN0b3RoQGxpbnV4dHYub3JnPiBjeDIzODg1IGRyaXZlcgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjeDI1ODIxLXZpZGVvLmgiCi0KLXN0YXRpYyB2b2lkIGJ1ZmZlcl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZiA9Ci0JICAgIGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yik7Ci0Jc3RydWN0IGN4MjU4MjFfYnVmZmVyICpwcmV2OwotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHZxLT5wcml2X2RhdGE7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCXN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlICpxID0gJmRldi0+dmlkcVtTUkFNX0NIMDddOwotCi0JLyogYWRkIGp1bXAgdG8gc3RvcHBlciAqLwotCWJ1Zi0+cmlzYy5qbXBbMF0gPSBjcHVfdG9fbGUzMihSSVNDX0pVTVAgfCBSSVNDX0lSUTEgfCBSSVNDX0NOVF9JTkMpOwotCWJ1Zi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihxLT5zdG9wcGVyLmRtYSk7Ci0JYnVmLT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOwkvKiBiaXRzIDYzLTMyICovCi0KLQlkcHJpbnRrKDIsICJqbXAgdG8gc3RvcHBlciAoMHgleClcbiIsIGJ1Zi0+cmlzYy5qbXBbMV0pOwotCWlmICghbGlzdF9lbXB0eSgmcS0+cXVldWVkKSkgewotCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+cXVldWVkKTsKLQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKLQkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gcXVldWVkXG4iLCBidWYsCi0JCQlidWYtPnZiLmkpOwotCi0JfSBlbHNlIGlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7Ci0JCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOwotCQljeDI1ODIxX3N0YXJ0X3ZpZGVvX2RtYShkZXYsIHEsIGJ1ZiwKLQkJCQkJJmRldi0+c3JhbV9jaGFubmVsc1tTUkFNX0NIMDddKTsKLQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKLQkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7Ci0JCW1vZF90aW1lcigmcS0+dGltZW91dCwgamlmZmllcyArIEJVRkZFUl9USU1FT1VUKTsKLQkJZHByaW50aygyLAotCQkJIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gZmlyc3QgYWN0aXZlLCBidWYgY250ID0gJWQsIHEtPmNvdW50ID0gJWRcbiIsCi0JCQlidWYsIGJ1Zi0+dmIuaSwgYnVmLT5jb3VudCwgcS0+Y291bnQpOwotCX0gZWxzZSB7Ci0JCXByZXYgPQotCQkgICAgbGlzdF9lbnRyeShxLT5hY3RpdmUucHJldiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5xdWV1ZSk7Ci0JCWlmIChwcmV2LT52Yi53aWR0aCA9PSBidWYtPnZiLndpZHRoCi0JCSAgICAmJiBwcmV2LT52Yi5oZWlnaHQgPT0gYnVmLT52Yi5oZWlnaHQKLQkJICAgICYmIHByZXYtPmZtdCA9PSBidWYtPmZtdCkgewotCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7Ci0JCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOwotCQkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7Ci0JCQlwcmV2LT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKGJ1Zi0+cmlzYy5kbWEpOwotCi0JCQkvKiA2NCBiaXQgYml0cyA2My0zMiAqLwotCQkJcHJldi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsKLQkJCWRwcmludGsoMiwKLQkJCQkiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gYWN0aXZlLCBidWYtPmNvdW50PSVkXG4iLAotCQkJCWJ1ZiwgYnVmLT52Yi5pLCBidWYtPmNvdW50KTsKLQotCQl9IGVsc2UgewotCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPnF1ZXVlZCk7Ci0JCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOwotCQkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBxdWV1ZWRcbiIsIGJ1ZiwKLQkJCQlidWYtPnZiLmkpOwotCQl9Ci0JfQotCi0JaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKLQkJZHByaW50aygyLCAiYWN0aXZlIHF1ZXVlIGVtcHR5IVxuIik7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBjeDI1ODIxX3ZpZGVvX3FvcHMgPSB7Ci0JLmJ1Zl9zZXR1cCA9IGN4MjU4MjFfYnVmZmVyX3NldHVwLAotCS5idWZfcHJlcGFyZSA9IGN4MjU4MjFfYnVmZmVyX3ByZXBhcmUsCi0JLmJ1Zl9xdWV1ZSA9IGJ1ZmZlcl9xdWV1ZSwKLQkuYnVmX3JlbGVhc2UgPSBjeDI1ODIxX2J1ZmZlcl9yZWxlYXNlLAotfTsKLQotc3RhdGljIGludCB2aWRlb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmg7Ci0JZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JdTMyIHBpeF9mb3JtYXQ7Ci0KLQlwcmludGsoIm9wZW4gZGV2PSVzIHR5cGU9JXNcbiIsIHZpZGVvX2RldmljZV9ub2RlX25hbWUodmRldiksCi0JCXY0bDJfdHlwZV9uYW1lc1t0eXBlXSk7Ci0KLQkvKiBhbGxvY2F0ZSArIGluaXRpYWxpemUgcGVyIGZpbGVoYW5kbGUgZGF0YSAqLwotCWZoID0ga3phbGxvYyhzaXplb2YoKmZoKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gZmgpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbG9ja19rZXJuZWwoKTsKLQotCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOwotCWZoLT5kZXYgPSBkZXY7Ci0JZmgtPnR5cGUgPSB0eXBlOwotCWZoLT53aWR0aCA9IDcyMDsKLQotCWlmIChkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9CRyB8fCBkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9ESykKLQkJZmgtPmhlaWdodCA9IDU3NjsKLQllbHNlCi0JCWZoLT5oZWlnaHQgPSA0ODA7Ci0KLQlkZXYtPmNoYW5uZWxfb3BlbmVkID0gU1JBTV9DSDA3OwotCXBpeF9mb3JtYXQgPQotCSAgICAoZGV2LT5waXhlbF9mb3JtYXRzW2Rldi0+Y2hhbm5lbF9vcGVuZWRdID09Ci0JICAgICBQSVhFTF9GUk1UXzQxMSkgPyBWNEwyX1BJWF9GTVRfWTQxUCA6IFY0TDJfUElYX0ZNVF9ZVVlWOwotCWZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKHBpeF9mb3JtYXQpOwotCi0JdjRsMl9wcmlvX29wZW4oJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKLQotCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJmZoLT52aWRxLCAmY3gyNTgyMV92aWRlb19xb3BzLAotCQkJICAgICAgICZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5zbG9jaywKLQkJCSAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCi0JCQkgICAgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY3gyNTgyMV9idWZmZXIpLCBmaCk7Ci0KLQlkcHJpbnRrKDEsICJwb3N0IHZpZGVvYnVmX3F1ZXVlX2luaXQoKVxuIik7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHZpZGVvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogZGF0YSwgc2l6ZV90IGNvdW50LAotCQkJICBsb2ZmX3QgKiBwcG9zKQotewotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQotCXN3aXRjaCAoZmgtPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKLQkJaWYgKGN4MjU4MjFfcmVzX2xvY2tlZChmaC0+ZGV2LCBSRVNPVVJDRV9WSURFTzcpKQotCQkJcmV0dXJuIC1FQlVTWTsKLQotCQlyZXR1cm4gdmlkZW9idWZfcmVhZF9vbmUoJmZoLT52aWRxLCBkYXRhLCBjb3VudCwgcHBvcywKLQkJCQkJIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKLQotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdmlkZW9fcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmOwotCi0JaWYgKGN4MjU4MjFfcmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFTzcpKSB7Ci0JCS8qIHN0cmVhbWluZyBjYXB0dXJlICovCi0JCWlmIChsaXN0X2VtcHR5KCZmaC0+dmlkcS5zdHJlYW0pKQotCQkJcmV0dXJuIFBPTExFUlI7Ci0JCWJ1ZiA9IGxpc3RfZW50cnkoZmgtPnZpZHEuc3RyZWFtLm5leHQsCi0JCQkJIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIuc3RyZWFtKTsKLQl9IGVsc2UgewotCQkvKiByZWFkKCkgY2FwdHVyZSAqLwotCQlidWYgPSAoc3RydWN0IGN4MjU4MjFfYnVmZmVyICopZmgtPnZpZHEucmVhZF9idWY7Ci0JCWlmIChOVUxMID09IGJ1ZikKLQkJCXJldHVybiBQT0xMRVJSOwotCX0KLQotCXBvbGxfd2FpdChmaWxlLCAmYnVmLT52Yi5kb25lLCB3YWl0KTsKLQlpZiAoYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ET05FIHx8IGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRVJST1IpIHsKLQkJaWYgKGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRE9ORSkgewotCQkJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCi0JCQlpZiAoZGV2ICYmIGRldi0+dXNlX2NpZl9yZXNvbHV0aW9uW1NSQU1fQ0gwN10pIHsKLQkJCQl1OCBjYW1faWQgPSAqKChjaGFyICopYnVmLT52Yi5iYWRkciArIDMpOwotCQkJCW1lbWNweSgoY2hhciAqKWJ1Zi0+dmIuYmFkZHIsCi0JCQkJICAgICAgIChjaGFyICopYnVmLT52Yi5iYWRkciArIChmaC0+d2lkdGggKiAyKSwKLQkJCQkgICAgICAgKGZoLT53aWR0aCAqIDIpKTsKLQkJCQkqKChjaGFyICopYnVmLT52Yi5iYWRkciArIDMpID0gY2FtX2lkOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkZW9fcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCi0JLy9zdG9wIHRoZSByaXNjIGVuZ2luZSBhbmQgZmlmbwotCWN4X3dyaXRlKGNoYW5uZWw3LT5kbWFfY3RsLCAwKTsJLyogRklGTyBhbmQgUklTQyBkaXNhYmxlICovCi0KLQkvKiBzdG9wIHZpZGVvIGNhcHR1cmUgKi8KLQlpZiAoY3gyNTgyMV9yZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPNykpIHsKLQkJdmlkZW9idWZfcXVldWVfY2FuY2VsKCZmaC0+dmlkcSk7Ci0JCWN4MjU4MjFfcmVzX2ZyZWUoZGV2LCBmaCwgUkVTT1VSQ0VfVklERU83KTsKLQl9Ci0KLQlpZiAoZmgtPnZpZHEucmVhZF9idWYpIHsKLQkJY3gyNTgyMV9idWZmZXJfcmVsZWFzZSgmZmgtPnZpZHEsIGZoLT52aWRxLnJlYWRfYnVmKTsKLQkJa2ZyZWUoZmgtPnZpZHEucmVhZF9idWYpOwotCX0KLQotCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPnZpZHEpOwotCi0JdjRsMl9wcmlvX2Nsb3NlKCZkZXYtPnByaW8sIGZoLT5wcmlvKTsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCWtmcmVlKGZoKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7Ci0KLQlpZiAodW5saWtlbHkoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSkgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAodW5saWtlbHkoaSAhPSBmaC0+dHlwZSkpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHVubGlrZWx5KCFjeDI1ODIxX3Jlc19nZXQoZGV2LCBmaCwgY3gyNTgyMV9nZXRfcmVzb3VyY2UoZmgsIFJFU09VUkNFX1ZJREVPNykpKSkgewotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbihnZXRfcXVldWUoZmgpKTsKLX0KLQotc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKLQlpbnQgZXJyLCByZXM7Ci0KLQlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoaSAhPSBmaC0+dHlwZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXMgPSBjeDI1ODIxX2dldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU83KTsKLQllcnIgPSB2aWRlb2J1Zl9zdHJlYW1vZmYoZ2V0X3F1ZXVlKGZoKSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JY3gyNTgyMV9yZXNfZnJlZShkZXYsIGZoLCByZXMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7Ci0JaW50IGVycjsKLQlpbnQgcGl4X2Zvcm1hdCA9IDA7Ci0KLQlpZiAoZmgpIHsKLQkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sIGZoLT5wcmlvKTsKLQkJaWYgKDAgIT0gZXJyKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlkcHJpbnRrKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7Ci0JZXJyID0gY3gyNTgyMV92aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIHByaXYsIGYpOwotCi0JaWYgKDAgIT0gZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZmgtPmZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7Ci0JZmgtPnZpZHEuZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOwotCi0JLy8gY2hlY2sgaWYgd2lkdGggYW5kIGhlaWdodCBpcyB2YWxpZCBiYXNlZCBvbiBzZXQgc3RhbmRhcmQKLQlpZiAoY3gyNTgyMV9pc192YWxpZF93aWR0aChmLT5mbXQucGl4LndpZHRoLCBkZXYtPnR2bm9ybSkpIHsKLQkJZmgtPndpZHRoID0gZi0+Zm10LnBpeC53aWR0aDsKLQl9Ci0KLQlpZiAoY3gyNTgyMV9pc192YWxpZF9oZWlnaHQoZi0+Zm10LnBpeC5oZWlnaHQsIGRldi0+dHZub3JtKSkgewotCQlmaC0+aGVpZ2h0ID0gZi0+Zm10LnBpeC5oZWlnaHQ7Ci0JfQotCi0JaWYgKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1k0MVApCi0JCXBpeF9mb3JtYXQgPSBQSVhFTF9GUk1UXzQxMTsKLQllbHNlIGlmIChmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVVlWKQotCQlwaXhfZm9ybWF0ID0gUElYRUxfRlJNVF80MjI7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWN4MjU4MjFfc2V0X3BpeGVsX2Zvcm1hdChkZXYsIFNSQU1fQ0gwNywgcGl4X2Zvcm1hdCk7Ci0KLQkvLyBjaGVjayBpZiBjaWYgcmVzb2x1dGlvbgotCWlmIChmaC0+d2lkdGggPT0gMzIwIHx8IGZoLT53aWR0aCA9PSAzNTIpIHsKLQkJZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDA3XSA9IDE7Ci0JfSBlbHNlIHsKLQkJZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDA3XSA9IDA7Ci0JfQotCWRldi0+Y2lmX3dpZHRoW1NSQU1fQ0gwN10gPSBmaC0+d2lkdGg7Ci0JbWVkdXNhX3NldF9yZXNvbHV0aW9uKGRldiwgZmgtPndpZHRoLCBTUkFNX0NIMDcpOwotCi0JZHByaW50aygyLCAiJXMoKSB3aWR0aD0lZCBoZWlnaHQ9JWQgZmllbGQ9JWRcbiIsIF9fZnVuY19fLCBmaC0+d2lkdGgsCi0JCWZoLT5oZWlnaHQsIGZoLT52aWRxLmZpZWxkKTsKLQljeDI1ODIxX2NhbGxfYWxsKGRldiwgdmlkZW8sIHNfZm10LCBmKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpwKQotewotCWludCByZXRfdmFsID0gMDsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7Ci0KLQlyZXRfdmFsID0gdmlkZW9idWZfZHFidWYoZ2V0X3F1ZXVlKGZoKSwgcCwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotCi0JcC0+c2VxdWVuY2UgPSBkZXYtPnZpZHFbU1JBTV9DSDA3XS5jb3VudDsKLQotCXJldHVybiByZXRfdmFsOwotfQotc3RhdGljIGludCB2aWRpb2NfbG9nX3N0YXR1cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdikKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OwotCWNoYXIgbmFtZVszMiArIDJdOwotCi0Jc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCA9ICZkZXYtPnNyYW1fY2hhbm5lbHNbU1JBTV9DSDA3XTsKLQl1MzIgdG1wID0gMDsKLQotCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzLzIiLCBkZXYtPm5hbWUpOwotCXByaW50ayhLRVJOX0lORk8gIiVzLzI6ID09PT09PT09PT09PSAgU1RBUlQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09XG4iLAotCSAgICAgICBkZXYtPm5hbWUpOwotCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCBjb3JlLCBsb2dfc3RhdHVzKTsKLQotCXRtcCA9IGN4X3JlYWQoc3JhbV9jaC0+ZG1hX2N0bCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiVmlkZW8gaW5wdXQgNyBpcyAlc1xuIiwKLQkgICAgICAgKHRtcCAmIDB4MTEpID8gInN0cmVhbWluZyIgOiAic3RvcHBlZCIpOwotCXByaW50ayhLRVJOX0lORk8gIiVzLzI6ID09PT09PT09PT09PT0gIEVORCBMT0cgU1RBVFVTICA9PT09PT09PT09PT09XG4iLAotCSAgICAgICBkZXYtPm5hbWUpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkgc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQotewotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKLQlpbnQgZXJyOwotCi0JaWYgKGZoKSB7Ci0JCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCBmaC0+cHJpbyk7Ci0JCWlmICgwICE9IGVycikKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIGN4MjU4MjFfc2V0X2NvbnRyb2woZGV2LCBjdGwsIFNSQU1fQ0gwNyk7Ci19Ci0KLS8vIGV4cG9ydGVkIHN0dWZmCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHZpZGVvX2ZvcHMgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLm9wZW4gPSB2aWRlb19vcGVuLAotCS5yZWxlYXNlID0gdmlkZW9fcmVsZWFzZSwKLQkucmVhZCA9IHZpZGVvX3JlYWQsCi0JLnBvbGwgPSB2aWRlb19wb2xsLAotCS5tbWFwID0gY3gyNTgyMV92aWRlb19tbWFwLAotCS5pb2N0bCA9IHZpZGVvX2lvY3RsMiwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdmlkZW9faW9jdGxfb3BzID0gewotCS52aWRpb2NfcXVlcnljYXAgPSBjeDI1ODIxX3ZpZGlvY19xdWVyeWNhcCwKLQkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgPSBjeDI1ODIxX3ZpZGlvY19lbnVtX2ZtdF92aWRfY2FwLAotCS52aWRpb2NfZ19mbXRfdmlkX2NhcCA9IGN4MjU4MjFfdmlkaW9jX2dfZm10X3ZpZF9jYXAsCi0JLnZpZGlvY190cnlfZm10X3ZpZF9jYXAgPSBjeDI1ODIxX3ZpZGlvY190cnlfZm10X3ZpZF9jYXAsCi0JLnZpZGlvY19zX2ZtdF92aWRfY2FwID0gdmlkaW9jX3NfZm10X3ZpZF9jYXAsCi0JLnZpZGlvY19yZXFidWZzID0gY3gyNTgyMV92aWRpb2NfcmVxYnVmcywKLQkudmlkaW9jX3F1ZXJ5YnVmID0gY3gyNTgyMV92aWRpb2NfcXVlcnlidWYsCi0JLnZpZGlvY19xYnVmID0gY3gyNTgyMV92aWRpb2NfcWJ1ZiwKLQkudmlkaW9jX2RxYnVmID0gdmlkaW9jX2RxYnVmLAotI2lmZGVmIFRVTkVSX0ZMQUcKLQkudmlkaW9jX3Nfc3RkID0gY3gyNTgyMV92aWRpb2Nfc19zdGQsCi0JLnZpZGlvY19xdWVyeXN0ZCA9IGN4MjU4MjFfdmlkaW9jX3F1ZXJ5c3RkLAotI2VuZGlmCi0JLnZpZGlvY19jcm9wY2FwID0gY3gyNTgyMV92aWRpb2NfY3JvcGNhcCwKLQkudmlkaW9jX3NfY3JvcCA9IGN4MjU4MjFfdmlkaW9jX3NfY3JvcCwKLQkudmlkaW9jX2dfY3JvcCA9IGN4MjU4MjFfdmlkaW9jX2dfY3JvcCwKLQkudmlkaW9jX2VudW1faW5wdXQgPSBjeDI1ODIxX3ZpZGlvY19lbnVtX2lucHV0LAotCS52aWRpb2NfZ19pbnB1dCA9IGN4MjU4MjFfdmlkaW9jX2dfaW5wdXQsCi0JLnZpZGlvY19zX2lucHV0ID0gY3gyNTgyMV92aWRpb2Nfc19pbnB1dCwKLQkudmlkaW9jX2dfY3RybCA9IGN4MjU4MjFfdmlkaW9jX2dfY3RybCwKLQkudmlkaW9jX3NfY3RybCA9IHZpZGlvY19zX2N0cmwsCi0JLnZpZGlvY19xdWVyeWN0cmwgPSBjeDI1ODIxX3ZpZGlvY19xdWVyeWN0cmwsCi0JLnZpZGlvY19zdHJlYW1vbiA9IHZpZGlvY19zdHJlYW1vbiwKLQkudmlkaW9jX3N0cmVhbW9mZiA9IHZpZGlvY19zdHJlYW1vZmYsCi0JLnZpZGlvY19sb2dfc3RhdHVzID0gdmlkaW9jX2xvZ19zdGF0dXMsCi0JLnZpZGlvY19nX3ByaW9yaXR5ID0gY3gyNTgyMV92aWRpb2NfZ19wcmlvcml0eSwKLQkudmlkaW9jX3NfcHJpb3JpdHkgPSBjeDI1ODIxX3ZpZGlvY19zX3ByaW9yaXR5LAotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotCS52aWRpb2NnbWJ1ZiA9IGN4MjU4MjFfdmlkaW9jZ21idWYsCi0jZW5kaWYKLSNpZmRlZiBUVU5FUl9GTEFHCi0JLnZpZGlvY19nX3R1bmVyID0gY3gyNTgyMV92aWRpb2NfZ190dW5lciwKLQkudmlkaW9jX3NfdHVuZXIgPSBjeDI1ODIxX3ZpZGlvY19zX3R1bmVyLAotCS52aWRpb2NfZ19mcmVxdWVuY3kgPSBjeDI1ODIxX3ZpZGlvY19nX2ZyZXF1ZW5jeSwKLQkudmlkaW9jX3NfZnJlcXVlbmN5ID0gY3gyNTgyMV92aWRpb2Nfc19mcmVxdWVuY3ksCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi0JLnZpZGlvY19nX3JlZ2lzdGVyID0gY3gyNTgyMV92aWRpb2NfZ19yZWdpc3RlciwKLQkudmlkaW9jX3NfcmVnaXN0ZXIgPSBjeDI1ODIxX3ZpZGlvY19zX3JlZ2lzdGVyLAotI2VuZGlmCi19OwotCi1zdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4MjU4MjFfdmlkZW9fdGVtcGxhdGU3ID0gewotCS5uYW1lID0gImN4MjU4MjEtdmlkZW8iLAotCS5mb3BzID0gJnZpZGVvX2ZvcHMsCi0JLmlvY3RsX29wcyA9ICZ2aWRlb19pb2N0bF9vcHMsCi0JLnR2bm9ybXMgPSBDWDI1ODIxX05PUk1TLAotCS5jdXJyZW50X25vcm0gPSBWNEwyX1NURF9OVFNDX00sCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlb2lvY3RsLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvaW9jdGwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE2ODA3ZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvaW9jdGwuYworKysgL2Rldi9udWxsCkBAIC0xLDQ4MCArMCwwIEBACi0vKgotICogIERyaXZlciBmb3IgdGhlIENvbmV4YW50IENYMjU4MjEgUENJZSBicmlkZ2UKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA5IENvbmV4YW50IFN5c3RlbXMgSW5jLgotICogIEF1dGhvcnMgIDxzaHUubGluQGNvbmV4YW50LmNvbT4sIDxoaWVwLmh1eW5oQGNvbmV4YW50LmNvbT4KLSAqICBCYXNlZCBvbiBTdGV2ZW4gVG90aCA8c3RvdGhAbGludXh0di5vcmc+IGN4MjM4ODUgZHJpdmVyCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICoKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImN4MjU4MjEtdmlkZW8uaCIKLQotc3RhdGljIHZvaWQgYnVmZmVyX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQotewotCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmID0KLQkgICAgY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiKTsKLQlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKnByZXY7Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gdnEtPnByaXZfZGF0YTsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7Ci0Jc3RydWN0IGN4MjU4MjFfZG1hcXVldWUgKnEgPSAmZGV2LT52aWRxW1ZJREVPX0lPQ1RMX0NIXTsKLQotCS8qIGFkZCBqdW1wIHRvIHN0b3BwZXIgKi8KLQlidWYtPnJpc2Muam1wWzBdID0gY3B1X3RvX2xlMzIoUklTQ19KVU1QIHwgUklTQ19JUlExIHwgUklTQ19DTlRfSU5DKTsKLQlidWYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIocS0+c3RvcHBlci5kbWEpOwotCWJ1Zi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsJLyogYml0cyA2My0zMiAqLwotCi0JZHByaW50aygyLCAiam1wIHRvIHN0b3BwZXIgKDB4JXgpXG4iLCBidWYtPnJpc2Muam1wWzFdKTsKLQotCWlmICghbGlzdF9lbXB0eSgmcS0+cXVldWVkKSkgewotCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+cXVldWVkKTsKLQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKLQkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gcXVldWVkXG4iLCBidWYsCi0JCQlidWYtPnZiLmkpOwotCi0JfSBlbHNlIGlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7Ci0JCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOwotCQljeDI1ODIxX3N0YXJ0X3ZpZGVvX2RtYShkZXYsIHEsIGJ1ZiwKLQkJCQkJJmRldi0+c3JhbV9jaGFubmVsc1tWSURFT19JT0NUTF9DSF0pOwotCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOwotCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKLQkJbW9kX3RpbWVyKCZxLT50aW1lb3V0LCBqaWZmaWVzICsgQlVGRkVSX1RJTUVPVVQpOwotCQlkcHJpbnRrKDIsCi0JCQkiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBhY3RpdmUsIGJ1ZiBjbnQgPSAlZCwgcS0+Y291bnQgPSAlZFxuIiwKLQkJCWJ1ZiwgYnVmLT52Yi5pLCBidWYtPmNvdW50LCBxLT5jb3VudCk7Ci0JfSBlbHNlIHsKLQkJcHJldiA9Ci0JCSAgICBsaXN0X2VudHJ5KHEtPmFjdGl2ZS5wcmV2LCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnF1ZXVlKTsKLQkJaWYgKHByZXYtPnZiLndpZHRoID09IGJ1Zi0+dmIud2lkdGgKLQkJICAgICYmIHByZXYtPnZiLmhlaWdodCA9PSBidWYtPnZiLmhlaWdodAotCQkgICAgJiYgcHJldi0+Zm10ID09IGJ1Zi0+Zm10KSB7Ci0JCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+YWN0aXZlKTsKLQkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7Ci0JCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKLQkJCXByZXYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIoYnVmLT5yaXNjLmRtYSk7Ci0KLQkJCS8qIDY0IGJpdCBiaXRzIDYzLTMyICovCi0JCQlwcmV2LT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOwotCQkJZHByaW50aygyLAotCQkJCSJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBhY3RpdmUsIGJ1Zi0+Y291bnQ9JWRcbiIsCi0JCQkJYnVmLCBidWYtPnZiLmksIGJ1Zi0+Y291bnQpOwotCi0JCX0gZWxzZSB7Ci0JCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+cXVldWVkKTsKLQkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7Ci0JCQlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGZpcnN0IHF1ZXVlZFxuIiwgYnVmLAotCQkJCWJ1Zi0+dmIuaSk7Ci0JCX0KLQl9Ci0KLQlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgewotCQlkcHJpbnRrKDIsICJhY3RpdmUgcXVldWUgZW1wdHkhXG4iKTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIGN4MjU4MjFfdmlkZW9fcW9wcyA9IHsKLQkuYnVmX3NldHVwID0gY3gyNTgyMV9idWZmZXJfc2V0dXAsCi0JLmJ1Zl9wcmVwYXJlID0gY3gyNTgyMV9idWZmZXJfcHJlcGFyZSwKLQkuYnVmX3F1ZXVlID0gYnVmZmVyX3F1ZXVlLAotCS5idWZfcmVsZWFzZSA9IGN4MjU4MjFfYnVmZmVyX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgaW50IHZpZGVvX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaDsKLQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQl1MzIgcGl4X2Zvcm1hdDsKLQotCXByaW50aygib3BlbiBkZXY9JXMgdHlwZT0lc1xuIiwgdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZGV2KSwKLQkJdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKLQotCS8qIGFsbG9jYXRlICsgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCi0JZmggPSBremFsbG9jKHNpemVvZigqZmgpLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBmaCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlsb2NrX2tlcm5lbCgpOwotCi0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7Ci0JZmgtPmRldiA9IGRldjsKLQlmaC0+dHlwZSA9IHR5cGU7Ci0JZmgtPndpZHRoID0gNzIwOwotCi0JaWYgKGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0JHIHx8IGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0RLKQotCQlmaC0+aGVpZ2h0ID0gNTc2OwotCWVsc2UKLQkJZmgtPmhlaWdodCA9IDQ4MDsKLQotCWRldi0+Y2hhbm5lbF9vcGVuZWQgPSBWSURFT19JT0NUTF9DSDsKLQlwaXhfZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1lVWVY7Ci0JZmgtPmZtdCA9IGZvcm1hdF9ieV9mb3VyY2MocGl4X2Zvcm1hdCk7Ci0KLQl2NGwyX3ByaW9fb3BlbigmZGV2LT5wcmlvLCAmZmgtPnByaW8pOwotCi0JdmlkZW9idWZfcXVldWVfc2dfaW5pdCgmZmgtPnZpZHEsICZjeDI1ODIxX3ZpZGVvX3FvcHMsCi0JCQkgICAgICAgJmRldi0+cGNpLT5kZXYsICZkZXYtPnNsb2NrLAotCQkJICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKLQkJCSAgICAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQsCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBjeDI1ODIxX2J1ZmZlciksIGZoKTsKLQotCWRwcmludGsoMSwgInBvc3QgdmlkZW9idWZfcXVldWVfaW5pdCgpXG4iKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHNzaXplX3QgdmlkZW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiBkYXRhLCBzaXplX3QgY291bnQsCi0JCQkgIGxvZmZfdCAqIHBwb3MpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0Jc3dpdGNoIChmaC0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQlpZiAoY3gyNTgyMV9yZXNfbG9ja2VkKGZoLT5kZXYsIFJFU09VUkNFX1ZJREVPX0lPQ1RMKSkKLQkJCXJldHVybiAtRUJVU1k7Ci0KLQkJcmV0dXJuIHZpZGVvYnVmX3JlYWRfb25lKCZmaC0+dmlkcSwgZGF0YSwgY291bnQsIHBwb3MsCi0JCQkJCSBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Ci0KLQlkZWZhdWx0OgotCQlCVUcoKTsKLQkJcmV0dXJuIDA7Ci0JfQotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHZpZGVvX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICAgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQotewotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZjsKLQotCWlmIChjeDI1ODIxX3Jlc19jaGVjayhmaCwgUkVTT1VSQ0VfVklERU9fSU9DVEwpKSB7Ci0JCS8qIHN0cmVhbWluZyBjYXB0dXJlICovCi0JCWlmIChsaXN0X2VtcHR5KCZmaC0+dmlkcS5zdHJlYW0pKQotCQkJcmV0dXJuIFBPTExFUlI7Ci0JCWJ1ZiA9IGxpc3RfZW50cnkoZmgtPnZpZHEuc3RyZWFtLm5leHQsCi0JCQkJIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIuc3RyZWFtKTsKLQl9IGVsc2UgewotCQkvKiByZWFkKCkgY2FwdHVyZSAqLwotCQlidWYgPSAoc3RydWN0IGN4MjU4MjFfYnVmZmVyICopZmgtPnZpZHEucmVhZF9idWY7Ci0JCWlmIChOVUxMID09IGJ1ZikKLQkJCXJldHVybiBQT0xMRVJSOwotCX0KLQotCXBvbGxfd2FpdChmaWxlLCAmYnVmLT52Yi5kb25lLCB3YWl0KTsKLQlpZiAoYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ET05FIHx8IGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRVJST1IpCi0JCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkZW9fcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCi0JLyogc3RvcCB2aWRlbyBjYXB0dXJlICovCi0JaWYgKGN4MjU4MjFfcmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFT19JT0NUTCkpIHsKLQkJdmlkZW9idWZfcXVldWVfY2FuY2VsKCZmaC0+dmlkcSk7Ci0JCWN4MjU4MjFfcmVzX2ZyZWUoZGV2LCBmaCwgUkVTT1VSQ0VfVklERU9fSU9DVEwpOwotCX0KLQotCWlmIChmaC0+dmlkcS5yZWFkX2J1ZikgewotCQljeDI1ODIxX2J1ZmZlcl9yZWxlYXNlKCZmaC0+dmlkcSwgZmgtPnZpZHEucmVhZF9idWYpOwotCQlrZnJlZShmaC0+dmlkcS5yZWFkX2J1Zik7Ci0JfQotCi0JdmlkZW9idWZfbW1hcF9mcmVlKCZmaC0+dmlkcSk7Ci0KLQl2NGwyX3ByaW9fY2xvc2UoJmRldi0+cHJpbywgZmgtPnByaW8pOwotCi0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKLQlrZnJlZShmaCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQotewotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCi0JaWYgKHVubGlrZWx5KGZoLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHVubGlrZWx5KGkgIT0gZmgtPnR5cGUpKSB7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICh1bmxpa2VseSghY3gyNTgyMV9yZXNfZ2V0KGRldiwgZmgsIGN4MjU4MjFfZ2V0X3Jlc291cmNlKGZoLCBSRVNPVVJDRV9WSURFT19JT0NUTCkpKSkgewotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbihnZXRfcXVldWUoZmgpKTsKLX0KLQotc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKLQlpbnQgZXJyLCByZXM7Ci0KLQlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoaSAhPSBmaC0+dHlwZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXMgPSBjeDI1ODIxX2dldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU9fSU9DVEwpOwotCWVyciA9IHZpZGVvYnVmX3N0cmVhbW9mZihnZXRfcXVldWUoZmgpKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQljeDI1ODIxX3Jlc19mcmVlKGRldiwgZmgsIHJlcyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQotewotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKLQlpbnQgZXJyOwotCi0JaWYgKGZoKSB7Ci0JCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCBmaC0+cHJpbyk7Ci0JCWlmICgwICE9IGVycikKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JZHByaW50aygyLCAiJXMoKVxuIiwgX19mdW5jX18pOwotCWVyciA9IGN4MjU4MjFfdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBwcml2LCBmKTsKLQotCWlmICgwICE9IGVycikKLQkJcmV0dXJuIGVycjsKLQlmaC0+Zm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKLQlmaC0+d2lkdGggPSBmLT5mbXQucGl4LndpZHRoOwotCWZoLT5oZWlnaHQgPSBmLT5mbXQucGl4LmhlaWdodDsKLQlmaC0+dmlkcS5maWVsZCA9IGYtPmZtdC5waXguZmllbGQ7Ci0JZHByaW50aygyLCAiJXMoKSB3aWR0aD0lZCBoZWlnaHQ9JWQgZmllbGQ9JWRcbiIsIF9fZnVuY19fLCBmaC0+d2lkdGgsCi0JCWZoLT5oZWlnaHQsIGZoLT52aWRxLmZpZWxkKTsKLQljeDI1ODIxX2NhbGxfYWxsKGRldiwgdmlkZW8sIHNfZm10LCBmKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqcCkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXJldHVybiB2aWRlb2J1Zl9kcWJ1ZihnZXRfcXVldWUoZmgpLCBwLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Ci19Ci0KLXN0YXRpYyBsb25nIHZpZGVvX2lvY3RsX3NldChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKLQkJCSAgICB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCXN0cnVjdCBkb3duc3RyZWFtX3VzZXJfc3RydWN0ICpkYXRhX2Zyb21fdXNlcjsKLQlpbnQgY29tbWFuZDsKLQlpbnQgd2lkdGggPSA3MjA7Ci0JaW50IHNlbGVjdGVkX2NoYW5uZWwgPSAwLCBwaXhfZm9ybWF0ID0gMCwgaSA9IDA7Ci0JaW50IGNpZl9lbmFibGUgPSAwLCBjaWZfd2lkdGggPSAwOwotCXUzMiB2YWx1ZSA9IDA7Ci0KLQlkYXRhX2Zyb21fdXNlciA9IChzdHJ1Y3QgZG93bnN0cmVhbV91c2VyX3N0cnVjdCAqKWFyZzsKLQotCWlmICghZGF0YV9mcm9tX3VzZXIpIHsKLQkJcHJpbnRrKCJjeDI1ODIxIGluICVzKCk6IFVzZXIgZGF0YSBpcyBJTlZBTElELiBSZXR1cm5pbmcuXG4iLAotCQkgICAgICAgX19mdW5jX18pOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQljb21tYW5kID0gZGF0YV9mcm9tX3VzZXItPmNvbW1hbmQ7Ci0KLQlpZiAoY29tbWFuZCAhPSBTRVRfVklERU9fU1REICYmIGNvbW1hbmQgIT0gU0VUX1BJWEVMX0ZPUk1BVAotCSAgICAmJiBjb21tYW5kICE9IEVOQUJMRV9DSUZfUkVTT0xVVElPTiAmJiBjb21tYW5kICE9IFJFR19SRUFECi0JICAgICYmIGNvbW1hbmQgIT0gUkVHX1dSSVRFICYmIGNvbW1hbmQgIT0gTUVEVVNBX1JFQUQKLQkgICAgJiYgY29tbWFuZCAhPSBNRURVU0FfV1JJVEUpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc3dpdGNoIChjb21tYW5kKSB7Ci0JY2FzZSBTRVRfVklERU9fU1REOgotCQlkZXYtPnR2bm9ybSA9Ci0JCSAgICAhc3RyY21wKGRhdGFfZnJvbV91c2VyLT52aWRfc3RkbmFtZSwKLQkJCSAgICAiUEFMIikgPyBWNEwyX1NURF9QQUxfQkcgOiBWNEwyX1NURF9OVFNDX007Ci0JCW1lZHVzYV9zZXRfdmlkZW9zdGFuZGFyZChkZXYpOwotCQlicmVhazsKLQotCWNhc2UgU0VUX1BJWEVMX0ZPUk1BVDoKLQkJc2VsZWN0ZWRfY2hhbm5lbCA9IGRhdGFfZnJvbV91c2VyLT5kZWNvZGVyX3NlbGVjdDsKLQkJcGl4X2Zvcm1hdCA9IGRhdGFfZnJvbV91c2VyLT5waXhlbF9mb3JtYXQ7Ci0KLQkJaWYgKCEoc2VsZWN0ZWRfY2hhbm5lbCA8PSA3ICYmIHNlbGVjdGVkX2NoYW5uZWwgPj0gMCkpIHsKLQkJCXNlbGVjdGVkX2NoYW5uZWwgLT0gNDsKLQkJCXNlbGVjdGVkX2NoYW5uZWwgPSBzZWxlY3RlZF9jaGFubmVsICUgODsKLQkJfQotCi0JCWlmIChzZWxlY3RlZF9jaGFubmVsID49IDApCi0JCQljeDI1ODIxX3NldF9waXhlbF9mb3JtYXQoZGV2LCBzZWxlY3RlZF9jaGFubmVsLAotCQkJCQkJIHBpeF9mb3JtYXQpOwotCi0JCWJyZWFrOwotCi0JY2FzZSBFTkFCTEVfQ0lGX1JFU09MVVRJT046Ci0JCXNlbGVjdGVkX2NoYW5uZWwgPSBkYXRhX2Zyb21fdXNlci0+ZGVjb2Rlcl9zZWxlY3Q7Ci0JCWNpZl9lbmFibGUgPSBkYXRhX2Zyb21fdXNlci0+Y2lmX3Jlc29sdXRpb25fZW5hYmxlOwotCQljaWZfd2lkdGggPSBkYXRhX2Zyb21fdXNlci0+Y2lmX3dpZHRoOwotCi0JCWlmIChjaWZfZW5hYmxlKSB7Ci0JCQlpZiAoZGV2LT50dm5vcm0gJiBWNEwyX1NURF9QQUxfQkcKLQkJCSAgICB8fCBkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9ESykKLQkJCQl3aWR0aCA9IDM1MjsKLQkJCWVsc2UKLQkJCQl3aWR0aCA9IChjaWZfd2lkdGggPT0gMzIwCi0JCQkJCSB8fCBjaWZfd2lkdGggPT0gMzUyKSA/IGNpZl93aWR0aCA6IDMyMDsKLQkJfQotCi0JCWlmICghKHNlbGVjdGVkX2NoYW5uZWwgPD0gNyAmJiBzZWxlY3RlZF9jaGFubmVsID49IDApKSB7Ci0JCQlzZWxlY3RlZF9jaGFubmVsIC09IDQ7Ci0JCQlzZWxlY3RlZF9jaGFubmVsID0gc2VsZWN0ZWRfY2hhbm5lbCAlIDg7Ci0JCX0KLQotCQlpZiAoc2VsZWN0ZWRfY2hhbm5lbCA8PSA3ICYmIHNlbGVjdGVkX2NoYW5uZWwgPj0gMCkgewotCQkJZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bc2VsZWN0ZWRfY2hhbm5lbF0gPSBjaWZfZW5hYmxlOwotCQkJZGV2LT5jaWZfd2lkdGhbc2VsZWN0ZWRfY2hhbm5lbF0gPSB3aWR0aDsKLQkJfSBlbHNlIHsKLQkJCWZvciAoaSA9IDA7IGkgPCBWSURfQ0hBTk5FTF9OVU07IGkrKykgewotCQkJCWRldi0+dXNlX2NpZl9yZXNvbHV0aW9uW2ldID0gY2lmX2VuYWJsZTsKLQkJCQlkZXYtPmNpZl93aWR0aFtpXSA9IHdpZHRoOwotCQkJfQotCQl9Ci0KLQkJbWVkdXNhX3NldF9yZXNvbHV0aW9uKGRldiwgd2lkdGgsIHNlbGVjdGVkX2NoYW5uZWwpOwotCQlicmVhazsKLQljYXNlIFJFR19SRUFEOgotCQlkYXRhX2Zyb21fdXNlci0+cmVnX2RhdGEgPSBjeF9yZWFkKGRhdGFfZnJvbV91c2VyLT5yZWdfYWRkcmVzcyk7Ci0JCWJyZWFrOwotCWNhc2UgUkVHX1dSSVRFOgotCQljeF93cml0ZShkYXRhX2Zyb21fdXNlci0+cmVnX2FkZHJlc3MsIGRhdGFfZnJvbV91c2VyLT5yZWdfZGF0YSk7Ci0JCWJyZWFrOwotCWNhc2UgTUVEVVNBX1JFQUQ6Ci0JCXZhbHVlID0KLQkJICAgIGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwKLQkJCQkgICAgICh1MTYpIGRhdGFfZnJvbV91c2VyLT5yZWdfYWRkcmVzcywKLQkJCQkgICAgICZkYXRhX2Zyb21fdXNlci0+cmVnX2RhdGEpOwotCQlicmVhazsKLQljYXNlIE1FRFVTQV9XUklURToKLQkJY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwKLQkJCQkgICh1MTYpIGRhdGFfZnJvbV91c2VyLT5yZWdfYWRkcmVzcywKLQkJCQkgIGRhdGFfZnJvbV91c2VyLT5yZWdfZGF0YSk7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19sb2dfc3RhdHVzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2KQotewotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7Ci0JY2hhciBuYW1lWzMyICsgMl07Ci0KLQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcy8yIiwgZGV2LT5uYW1lKTsKLQlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT0gIFNUQVJUIExPRyBTVEFUVVMgID09PT09PT09PT09PVxuIiwKLQkgICAgICAgZGV2LT5uYW1lKTsKLQljeDI1ODIxX2NhbGxfYWxsKGRldiwgY29yZSwgbG9nX3N0YXR1cyk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogPT09PT09PT09PT09PSAgRU5EIExPRyBTVEFUVVMgID09PT09PT09PT09PT1cbiIsCi0JICAgICAgIGRldi0+bmFtZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCSBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdGwpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OwotCWludCBlcnI7Ci0KLQlpZiAoZmgpIHsKLQkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sIGZoLT5wcmlvKTsKLQkJaWYgKDAgIT0gZXJyKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLy8gZXhwb3J0ZWQgc3R1ZmYKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdmlkZW9fZm9wcyA9IHsKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkub3BlbiA9IHZpZGVvX29wZW4sCi0JLnJlbGVhc2UgPSB2aWRlb19yZWxlYXNlLAotCS5yZWFkID0gdmlkZW9fcmVhZCwKLQkucG9sbCA9IHZpZGVvX3BvbGwsCi0JLm1tYXAgPSBjeDI1ODIxX3ZpZGVvX21tYXAsCi0JLmlvY3RsID0gdmlkZW9faW9jdGxfc2V0LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB2aWRlb19pb2N0bF9vcHMgPSB7Ci0JLnZpZGlvY19xdWVyeWNhcCA9IGN4MjU4MjFfdmlkaW9jX3F1ZXJ5Y2FwLAotCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IGN4MjU4MjFfdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCi0JLnZpZGlvY19nX2ZtdF92aWRfY2FwID0gY3gyNTgyMV92aWRpb2NfZ19mbXRfdmlkX2NhcCwKLQkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcCA9IGN4MjU4MjFfdmlkaW9jX3RyeV9mbXRfdmlkX2NhcCwKLQkudmlkaW9jX3NfZm10X3ZpZF9jYXAgPSB2aWRpb2Nfc19mbXRfdmlkX2NhcCwKLQkudmlkaW9jX3JlcWJ1ZnMgPSBjeDI1ODIxX3ZpZGlvY19yZXFidWZzLAotCS52aWRpb2NfcXVlcnlidWYgPSBjeDI1ODIxX3ZpZGlvY19xdWVyeWJ1ZiwKLQkudmlkaW9jX3FidWYgPSBjeDI1ODIxX3ZpZGlvY19xYnVmLAotCS52aWRpb2NfZHFidWYgPSB2aWRpb2NfZHFidWYsCi0jaWZkZWYgVFVORVJfRkxBRwotCS52aWRpb2Nfc19zdGQgPSBjeDI1ODIxX3ZpZGlvY19zX3N0ZCwKLQkudmlkaW9jX3F1ZXJ5c3RkID0gY3gyNTgyMV92aWRpb2NfcXVlcnlzdGQsCi0jZW5kaWYKLQkudmlkaW9jX2Nyb3BjYXAgPSBjeDI1ODIxX3ZpZGlvY19jcm9wY2FwLAotCS52aWRpb2Nfc19jcm9wID0gY3gyNTgyMV92aWRpb2Nfc19jcm9wLAotCS52aWRpb2NfZ19jcm9wID0gY3gyNTgyMV92aWRpb2NfZ19jcm9wLAotCS52aWRpb2NfZW51bV9pbnB1dCA9IGN4MjU4MjFfdmlkaW9jX2VudW1faW5wdXQsCi0JLnZpZGlvY19nX2lucHV0ID0gY3gyNTgyMV92aWRpb2NfZ19pbnB1dCwKLQkudmlkaW9jX3NfaW5wdXQgPSBjeDI1ODIxX3ZpZGlvY19zX2lucHV0LAotCS52aWRpb2NfZ19jdHJsID0gY3gyNTgyMV92aWRpb2NfZ19jdHJsLAotCS52aWRpb2Nfc19jdHJsID0gdmlkaW9jX3NfY3RybCwKLQkudmlkaW9jX3F1ZXJ5Y3RybCA9IGN4MjU4MjFfdmlkaW9jX3F1ZXJ5Y3RybCwKLQkudmlkaW9jX3N0cmVhbW9uID0gdmlkaW9jX3N0cmVhbW9uLAotCS52aWRpb2Nfc3RyZWFtb2ZmID0gdmlkaW9jX3N0cmVhbW9mZiwKLQkudmlkaW9jX2xvZ19zdGF0dXMgPSB2aWRpb2NfbG9nX3N0YXR1cywKLQkudmlkaW9jX2dfcHJpb3JpdHkgPSBjeDI1ODIxX3ZpZGlvY19nX3ByaW9yaXR5LAotCS52aWRpb2Nfc19wcmlvcml0eSA9IGN4MjU4MjFfdmlkaW9jX3NfcHJpb3JpdHksCi0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0JLnZpZGlvY2dtYnVmID0gY3gyNTgyMV92aWRpb2NnbWJ1ZiwKLSNlbmRpZgotI2lmZGVmIFRVTkVSX0ZMQUcKLQkudmlkaW9jX2dfdHVuZXIgPSBjeDI1ODIxX3ZpZGlvY19nX3R1bmVyLAotCS52aWRpb2Nfc190dW5lciA9IGN4MjU4MjFfdmlkaW9jX3NfdHVuZXIsCi0JLnZpZGlvY19nX2ZyZXF1ZW5jeSA9IGN4MjU4MjFfdmlkaW9jX2dfZnJlcXVlbmN5LAotCS52aWRpb2Nfc19mcmVxdWVuY3kgPSBjeDI1ODIxX3ZpZGlvY19zX2ZyZXF1ZW5jeSwKLSNlbmRpZgotI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKLQkudmlkaW9jX2dfcmVnaXN0ZXIgPSBjeDI1ODIxX3ZpZGlvY19nX3JlZ2lzdGVyLAotCS52aWRpb2Nfc19yZWdpc3RlciA9IGN4MjU4MjFfdmlkaW9jX3NfcmVnaXN0ZXIsCi0jZW5kaWYKLX07Ci0KLXN0cnVjdCB2aWRlb19kZXZpY2UgY3gyNTgyMV92aWRlb2lvY3RsX3RlbXBsYXRlID0gewotCS5uYW1lID0gImN4MjU4MjEtdmlkZW9pb2N0bCIsCi0JLmZvcHMgPSAmdmlkZW9fZm9wcywKLQkuaW9jdGxfb3BzID0gJnZpZGVvX2lvY3RsX29wcywKLQkudHZub3JtcyA9IENYMjU4MjFfTk9STVMsCi0JLmN1cnJlbnRfbm9ybSA9IFY0TDJfU1REX05UU0NfTSwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZHVwczEwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZHVwczEwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3NDZhMTcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWR1cHMxMC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDE4ICswLDAgQEAKLS8qCi0gKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCi0gKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgotICogIEJhc2VkIG9uIFN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4gY3gyMzg4NSBkcml2ZXIKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKgotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY3gyNTgyMS12aWRlby5oIgotCi1zdGF0aWMgdm9pZCBidWZmZXJfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCi17Ci0Jc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWYgPQotCSAgICBjb250YWluZXJfb2YodmIsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIpOwotCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqcHJldjsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSB2cS0+cHJpdl9kYXRhOwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKLQlzdHJ1Y3QgY3gyNTgyMV9kbWFxdWV1ZSAqcSA9ICZkZXYtPnZpZHFbU1JBTV9DSDEwXTsKLQotCS8qIGFkZCBqdW1wIHRvIHN0b3BwZXIgKi8KLQlidWYtPnJpc2Muam1wWzBdID0gY3B1X3RvX2xlMzIoUklTQ19KVU1QIHwgUklTQ19JUlExIHwgUklTQ19DTlRfSU5DKTsKLQlidWYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIocS0+c3RvcHBlci5kbWEpOwotCWJ1Zi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsJLyogYml0cyA2My0zMiAqLwotCi0JZHByaW50aygyLCAiam1wIHRvIHN0b3BwZXIgKDB4JXgpXG4iLCBidWYtPnJpc2Muam1wWzFdKTsKLQotCWlmICghbGlzdF9lbXB0eSgmcS0+cXVldWVkKSkgewotCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+cXVldWVkKTsKLQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKLQkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gcXVldWVkXG4iLCBidWYsCi0JCQlidWYtPnZiLmkpOwotCi0JfSBlbHNlIGlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7Ci0JCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOwotCQljeDI1ODIxX3N0YXJ0X3ZpZGVvX2RtYShkZXYsIHEsIGJ1ZiwKLQkJCQkJJmRldi0+c3JhbV9jaGFubmVsc1tTUkFNX0NIMTBdKTsKLQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKLQkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7Ci0JCW1vZF90aW1lcigmcS0+dGltZW91dCwgamlmZmllcyArIEJVRkZFUl9USU1FT1VUKTsKLQkJZHByaW50aygyLAotCQkJIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gZmlyc3QgYWN0aXZlLCBidWYgY250ID0gJWQsIHEtPmNvdW50ID0gJWRcbiIsCi0JCQlidWYsIGJ1Zi0+dmIuaSwgYnVmLT5jb3VudCwgcS0+Y291bnQpOwotCX0gZWxzZSB7Ci0JCXByZXYgPQotCQkgICAgbGlzdF9lbnRyeShxLT5hY3RpdmUucHJldiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5xdWV1ZSk7Ci0JCWlmIChwcmV2LT52Yi53aWR0aCA9PSBidWYtPnZiLndpZHRoCi0JCSAgICAmJiBwcmV2LT52Yi5oZWlnaHQgPT0gYnVmLT52Yi5oZWlnaHQKLQkJICAgICYmIHByZXYtPmZtdCA9PSBidWYtPmZtdCkgewotCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7Ci0JCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOwotCQkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7Ci0JCQlwcmV2LT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKGJ1Zi0+cmlzYy5kbWEpOwotCi0JCQkvKiA2NCBiaXQgYml0cyA2My0zMiAqLwotCQkJcHJldi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsKLQkJCWRwcmludGsoMiwKLQkJCQkiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gYWN0aXZlLCBidWYtPmNvdW50PSVkXG4iLAotCQkJCWJ1ZiwgYnVmLT52Yi5pLCBidWYtPmNvdW50KTsKLQotCQl9IGVsc2UgewotCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPnF1ZXVlZCk7Ci0JCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOwotCQkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBxdWV1ZWRcbiIsIGJ1ZiwKLQkJCQlidWYtPnZiLmkpOwotCQl9Ci0JfQotCi0JaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKLQkJZHByaW50aygyLCAiYWN0aXZlIHF1ZXVlIGVtcHR5IVxuIik7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBjeDI1ODIxX3ZpZGVvX3FvcHMgPSB7Ci0JLmJ1Zl9zZXR1cCA9IGN4MjU4MjFfYnVmZmVyX3NldHVwLAotCS5idWZfcHJlcGFyZSA9IGN4MjU4MjFfYnVmZmVyX3ByZXBhcmUsCi0JLmJ1Zl9xdWV1ZSA9IGJ1ZmZlcl9xdWV1ZSwKLQkuYnVmX3JlbGVhc2UgPSBjeDI1ODIxX2J1ZmZlcl9yZWxlYXNlLAotfTsKLQotc3RhdGljIGludCB2aWRlb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmg7Ci0JZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0KLQlwcmludGsoIm9wZW4gZGV2PSVzIHR5cGU9JXNcbiIsIHZpZGVvX2RldmljZV9ub2RlX25hbWUodmRldiksCi0JCXY0bDJfdHlwZV9uYW1lc1t0eXBlXSk7Ci0KLQkvKiBhbGxvY2F0ZSArIGluaXRpYWxpemUgcGVyIGZpbGVoYW5kbGUgZGF0YSAqLwotCWZoID0ga3phbGxvYyhzaXplb2YoKmZoKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gZmgpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbG9ja19rZXJuZWwoKTsKLQotCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOwotCWZoLT5kZXYgPSBkZXY7Ci0JZmgtPnR5cGUgPSB0eXBlOwotCWZoLT53aWR0aCA9IDcyMDsKLQotCWlmIChkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9CRyB8fCBkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9ESykKLQkJZmgtPmhlaWdodCA9IDU3NjsKLQllbHNlCi0JCWZoLT5oZWlnaHQgPSA0ODA7Ci0KLQlkZXYtPmNoYW5uZWxfb3BlbmVkID0gOTsKLQlmaC0+Zm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhWNEwyX1BJWF9GTVRfWVVZVik7Ci0KLQl2NGwyX3ByaW9fb3BlbigmZGV2LT5wcmlvLCAmZmgtPnByaW8pOwotCi0JdmlkZW9idWZfcXVldWVfc2dfaW5pdCgmZmgtPnZpZHEsICZjeDI1ODIxX3ZpZGVvX3FvcHMsCi0JCQkgICAgICAgJmRldi0+cGNpLT5kZXYsICZkZXYtPnNsb2NrLAotCQkJICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKLQkJCSAgICAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQsCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBjeDI1ODIxX2J1ZmZlciksIGZoKTsKLQotCWRwcmludGsoMSwgInBvc3QgdmlkZW9idWZfcXVldWVfaW5pdCgpXG4iKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHNzaXplX3QgdmlkZW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiBkYXRhLCBzaXplX3QgY291bnQsCi0JCQkgIGxvZmZfdCAqIHBwb3MpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0Jc3dpdGNoIChmaC0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQlpZiAoY3gyNTgyMV9yZXNfbG9ja2VkKGZoLT5kZXYsIFJFU09VUkNFX1ZJREVPMTApKQotCQkJcmV0dXJuIC1FQlVTWTsKLQotCQlyZXR1cm4gdmlkZW9idWZfcmVhZF9vbmUoJmZoLT52aWRxLCBkYXRhLCBjb3VudCwgcHBvcywKLQkJCQkJIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKLQotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdmlkZW9fcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmOwotCi0JaWYgKGN4MjU4MjFfcmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFTzEwKSkgewotCQkvKiBzdHJlYW1pbmcgY2FwdHVyZSAqLwotCQlpZiAobGlzdF9lbXB0eSgmZmgtPnZpZHEuc3RyZWFtKSkKLQkJCXJldHVybiBQT0xMRVJSOwotCQlidWYgPSBsaXN0X2VudHJ5KGZoLT52aWRxLnN0cmVhbS5uZXh0LAotCQkJCSBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnN0cmVhbSk7Ci0JfSBlbHNlIHsKLQkJLyogcmVhZCgpIGNhcHR1cmUgKi8KLQkJYnVmID0gKHN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqKWZoLT52aWRxLnJlYWRfYnVmOwotCQlpZiAoTlVMTCA9PSBidWYpCi0JCQlyZXR1cm4gUE9MTEVSUjsKLQl9Ci0KLQlwb2xsX3dhaXQoZmlsZSwgJmJ1Zi0+dmIuZG9uZSwgd2FpdCk7Ci0JaWYgKGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRE9ORSB8fCBidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0VSUk9SKQotCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRlb19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7Ci0KLQkvL3N0b3AgdGhlIHJpc2MgZW5naW5lIGFuZCBmaWZvCi0JLy9jeF93cml0ZShjaGFubmVsMTAtPmRtYV9jdGwsIDApOwotCi0JLyogc3RvcCB2aWRlbyBjYXB0dXJlICovCi0JaWYgKGN4MjU4MjFfcmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFTzEwKSkgewotCQl2aWRlb2J1Zl9xdWV1ZV9jYW5jZWwoJmZoLT52aWRxKTsKLQkJY3gyNTgyMV9yZXNfZnJlZShkZXYsIGZoLCBSRVNPVVJDRV9WSURFTzEwKTsKLQl9Ci0KLQlpZiAoZmgtPnZpZHEucmVhZF9idWYpIHsKLQkJY3gyNTgyMV9idWZmZXJfcmVsZWFzZSgmZmgtPnZpZHEsIGZoLT52aWRxLnJlYWRfYnVmKTsKLQkJa2ZyZWUoZmgtPnZpZHEucmVhZF9idWYpOwotCX0KLQotCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPnZpZHEpOwotCi0JdjRsMl9wcmlvX2Nsb3NlKCZkZXYtPnByaW8sIGZoLT5wcmlvKTsKLQotCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7Ci0Ja2ZyZWUoZmgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKLQotCWlmICh1bmxpa2VseShmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpKSB7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICh1bmxpa2VseShpICE9IGZoLT50eXBlKSkgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAodW5saWtlbHkoIWN4MjU4MjFfcmVzX2dldChkZXYsIGZoLCBjeDI1ODIxX2dldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU8xMCkpKSkgewotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbihnZXRfcXVldWUoZmgpKTsKLX0KLQotc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKLQlpbnQgZXJyLCByZXM7Ci0KLQlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoaSAhPSBmaC0+dHlwZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXMgPSBjeDI1ODIxX2dldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU8xMCk7Ci0JZXJyID0gdmlkZW9idWZfc3RyZWFtb2ZmKGdldF9xdWV1ZShmaCkpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCWN4MjU4MjFfcmVzX2ZyZWUoZGV2LCBmaCwgcmVzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGxvbmcgdmlkZW9faW9jdGxfdXBzdHJlYW0xMChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKLQkJCQkgICB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCWludCBjb21tYW5kID0gMDsKLQlzdHJ1Y3QgdXBzdHJlYW1fdXNlcl9zdHJ1Y3QgKmRhdGFfZnJvbV91c2VyOwotCi0JZGF0YV9mcm9tX3VzZXIgPSAoc3RydWN0IHVwc3RyZWFtX3VzZXJfc3RydWN0ICopYXJnOwotCi0JaWYgKCFkYXRhX2Zyb21fdXNlcikgewotCQlwcmludGsKLQkJICAgICgiY3gyNTgyMSBpbiAlcygpOiBVcHN0cmVhbSBkYXRhIGlzIElOVkFMSUQuIFJldHVybmluZy5cbiIsCi0JCSAgICAgX19mdW5jX18pOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQljb21tYW5kID0gZGF0YV9mcm9tX3VzZXItPmNvbW1hbmQ7Ci0KLQlpZiAoY29tbWFuZCAhPSBVUFNUUkVBTV9TVEFSVF9WSURFTyAmJiBjb21tYW5kICE9IFVQU1RSRUFNX1NUT1BfVklERU8pIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JZGV2LT5pbnB1dF9maWxlbmFtZV9jaDIgPSBkYXRhX2Zyb21fdXNlci0+aW5wdXRfZmlsZW5hbWU7Ci0JZGV2LT5pbnB1dF9hdWRpb2ZpbGVuYW1lID0gZGF0YV9mcm9tX3VzZXItPmlucHV0X2ZpbGVuYW1lOwotCWRldi0+dmlkX3N0ZG5hbWVfY2gyID0gZGF0YV9mcm9tX3VzZXItPnZpZF9zdGRuYW1lOwotCWRldi0+cGl4ZWxfZm9ybWF0X2NoMiA9IGRhdGFfZnJvbV91c2VyLT5waXhlbF9mb3JtYXQ7Ci0JZGV2LT5jaGFubmVsX3NlbGVjdF9jaDIgPSBkYXRhX2Zyb21fdXNlci0+Y2hhbm5lbF9zZWxlY3Q7Ci0JZGV2LT5jb21tYW5kX2NoMiA9IGRhdGFfZnJvbV91c2VyLT5jb21tYW5kOwotCi0Jc3dpdGNoIChjb21tYW5kKSB7Ci0JY2FzZSBVUFNUUkVBTV9TVEFSVF9WSURFTzoKLQkJY3gyNTgyMV9zdGFydF91cHN0cmVhbV92aWRlb19jaDIoZGV2LCBkYXRhX2Zyb21fdXNlcik7Ci0JCWJyZWFrOwotCi0JY2FzZSBVUFNUUkVBTV9TVE9QX1ZJREVPOgotCQljeDI1ODIxX3N0b3BfdXBzdHJlYW1fdmlkZW9fY2gyKGRldik7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7Ci0JaW50IGVycjsKLQotCWlmIChmaCkgewotCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgZmgtPnByaW8pOwotCQlpZiAoMCAhPSBlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCWRwcmludGsoMiwgIiVzKClcbiIsIF9fZnVuY19fKTsKLQllcnIgPSBjeDI1ODIxX3ZpZGlvY190cnlfZm10X3ZpZF9jYXAoZmlsZSwgcHJpdiwgZik7Ci0KLQlpZiAoMCAhPSBlcnIpCi0JCXJldHVybiBlcnI7Ci0JZmgtPmZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7Ci0JZmgtPndpZHRoID0gZi0+Zm10LnBpeC53aWR0aDsKLQlmaC0+aGVpZ2h0ID0gZi0+Zm10LnBpeC5oZWlnaHQ7Ci0JZmgtPnZpZHEuZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOwotCWRwcmludGsoMiwgIiVzKCkgd2lkdGg9JWQgaGVpZ2h0PSVkIGZpZWxkPSVkXG4iLCBfX2Z1bmNfXywgZmgtPndpZHRoLAotCQlmaC0+aGVpZ2h0LCBmaC0+dmlkcS5maWVsZCk7Ci0JY3gyNTgyMV9jYWxsX2FsbChkZXYsIHZpZGVvLCBzX2ZtdCwgZik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKLQlyZXR1cm4gdmlkZW9idWZfZHFidWYoZ2V0X3F1ZXVlKGZoKSwgcCwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19sb2dfc3RhdHVzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2KQotewotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7Ci0JY2hhciBuYW1lWzMyICsgMl07Ci0KLQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcy8yIiwgZGV2LT5uYW1lKTsKLQlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT0gIFNUQVJUIExPRyBTVEFUVVMgID09PT09PT09PT09PVxuIiwKLQkgICAgICAgZGV2LT5uYW1lKTsKLQljeDI1ODIxX2NhbGxfYWxsKGRldiwgY29yZSwgbG9nX3N0YXR1cyk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogPT09PT09PT09PT09PSAgRU5EIExPRyBTVEFUVVMgID09PT09PT09PT09PT1cbiIsCi0JICAgICAgIGRldi0+bmFtZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCSBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdGwpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OwotCWludCBlcnI7Ci0KLQlpZiAoZmgpIHsKLQkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sIGZoLT5wcmlvKTsKLQkJaWYgKDAgIT0gZXJyKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLy9leHBvcnRlZCBzdHVmZgotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2aWRlb19mb3BzID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5vcGVuID0gdmlkZW9fb3BlbiwKLQkucmVsZWFzZSA9IHZpZGVvX3JlbGVhc2UsCi0JLnJlYWQgPSB2aWRlb19yZWFkLAotCS5wb2xsID0gdmlkZW9fcG9sbCwKLQkubW1hcCA9IGN4MjU4MjFfdmlkZW9fbW1hcCwKLQkuaW9jdGwgPSB2aWRlb19pb2N0bF91cHN0cmVhbTEwLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB2aWRlb19pb2N0bF9vcHMgPSB7Ci0JLnZpZGlvY19xdWVyeWNhcCA9IGN4MjU4MjFfdmlkaW9jX3F1ZXJ5Y2FwLAotCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IGN4MjU4MjFfdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCi0JLnZpZGlvY19nX2ZtdF92aWRfY2FwID0gY3gyNTgyMV92aWRpb2NfZ19mbXRfdmlkX2NhcCwKLQkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcCA9IGN4MjU4MjFfdmlkaW9jX3RyeV9mbXRfdmlkX2NhcCwKLQkudmlkaW9jX3NfZm10X3ZpZF9jYXAgPSB2aWRpb2Nfc19mbXRfdmlkX2NhcCwKLQkudmlkaW9jX3JlcWJ1ZnMgPSBjeDI1ODIxX3ZpZGlvY19yZXFidWZzLAotCS52aWRpb2NfcXVlcnlidWYgPSBjeDI1ODIxX3ZpZGlvY19xdWVyeWJ1ZiwKLQkudmlkaW9jX3FidWYgPSBjeDI1ODIxX3ZpZGlvY19xYnVmLAotCS52aWRpb2NfZHFidWYgPSB2aWRpb2NfZHFidWYsCi0jaWZkZWYgVFVORVJfRkxBRwotCS52aWRpb2Nfc19zdGQgPSBjeDI1ODIxX3ZpZGlvY19zX3N0ZCwKLQkudmlkaW9jX3F1ZXJ5c3RkID0gY3gyNTgyMV92aWRpb2NfcXVlcnlzdGQsCi0jZW5kaWYKLQkudmlkaW9jX2Nyb3BjYXAgPSBjeDI1ODIxX3ZpZGlvY19jcm9wY2FwLAotCS52aWRpb2Nfc19jcm9wID0gY3gyNTgyMV92aWRpb2Nfc19jcm9wLAotCS52aWRpb2NfZ19jcm9wID0gY3gyNTgyMV92aWRpb2NfZ19jcm9wLAotCS52aWRpb2NfZW51bV9pbnB1dCA9IGN4MjU4MjFfdmlkaW9jX2VudW1faW5wdXQsCi0JLnZpZGlvY19nX2lucHV0ID0gY3gyNTgyMV92aWRpb2NfZ19pbnB1dCwKLQkudmlkaW9jX3NfaW5wdXQgPSBjeDI1ODIxX3ZpZGlvY19zX2lucHV0LAotCS52aWRpb2NfZ19jdHJsID0gY3gyNTgyMV92aWRpb2NfZ19jdHJsLAotCS52aWRpb2Nfc19jdHJsID0gdmlkaW9jX3NfY3RybCwKLQkudmlkaW9jX3F1ZXJ5Y3RybCA9IGN4MjU4MjFfdmlkaW9jX3F1ZXJ5Y3RybCwKLQkudmlkaW9jX3N0cmVhbW9uID0gdmlkaW9jX3N0cmVhbW9uLAotCS52aWRpb2Nfc3RyZWFtb2ZmID0gdmlkaW9jX3N0cmVhbW9mZiwKLQkudmlkaW9jX2xvZ19zdGF0dXMgPSB2aWRpb2NfbG9nX3N0YXR1cywKLQkudmlkaW9jX2dfcHJpb3JpdHkgPSBjeDI1ODIxX3ZpZGlvY19nX3ByaW9yaXR5LAotCS52aWRpb2Nfc19wcmlvcml0eSA9IGN4MjU4MjFfdmlkaW9jX3NfcHJpb3JpdHksCi0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0JLnZpZGlvY2dtYnVmID0gY3gyNTgyMV92aWRpb2NnbWJ1ZiwKLSNlbmRpZgotI2lmZGVmIFRVTkVSX0ZMQUcKLQkudmlkaW9jX2dfdHVuZXIgPSBjeDI1ODIxX3ZpZGlvY19nX3R1bmVyLAotCS52aWRpb2Nfc190dW5lciA9IGN4MjU4MjFfdmlkaW9jX3NfdHVuZXIsCi0JLnZpZGlvY19nX2ZyZXF1ZW5jeSA9IGN4MjU4MjFfdmlkaW9jX2dfZnJlcXVlbmN5LAotCS52aWRpb2Nfc19mcmVxdWVuY3kgPSBjeDI1ODIxX3ZpZGlvY19zX2ZyZXF1ZW5jeSwKLSNlbmRpZgotI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKLQkudmlkaW9jX2dfcmVnaXN0ZXIgPSBjeDI1ODIxX3ZpZGlvY19nX3JlZ2lzdGVyLAotCS52aWRpb2Nfc19yZWdpc3RlciA9IGN4MjU4MjFfdmlkaW9jX3NfcmVnaXN0ZXIsCi0jZW5kaWYKLX07Ci0KLXN0cnVjdCB2aWRlb19kZXZpY2UgY3gyNTgyMV92aWRlb190ZW1wbGF0ZTEwID0gewotCS5uYW1lID0gImN4MjU4MjEtdXBzdHJlYW0xMCIsCi0JLmZvcHMgPSAmdmlkZW9fZm9wcywKLQkuaW9jdGxfb3BzID0gJnZpZGVvX2lvY3RsX29wcywKLQkudHZub3JtcyA9IENYMjU4MjFfTk9STVMsCi0JLmN1cnJlbnRfbm9ybSA9IFY0TDJfU1REX05UU0NfTSwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZHVwczkuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkdXBzOS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjZlMGYzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkdXBzOS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDE2ICswLDAgQEAKLS8qCi0gKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCi0gKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgotICogIEJhc2VkIG9uIFN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4gY3gyMzg4NSBkcml2ZXIKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKgotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY3gyNTgyMS12aWRlby5oIgotCi1zdGF0aWMgdm9pZCBidWZmZXJfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCi17Ci0Jc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWYgPQotCSAgICBjb250YWluZXJfb2YodmIsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIpOwotCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqcHJldjsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSB2cS0+cHJpdl9kYXRhOwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKLQlzdHJ1Y3QgY3gyNTgyMV9kbWFxdWV1ZSAqcSA9ICZkZXYtPnZpZHFbU1JBTV9DSDA5XTsKLQotCS8qIGFkZCBqdW1wIHRvIHN0b3BwZXIgKi8KLQlidWYtPnJpc2Muam1wWzBdID0gY3B1X3RvX2xlMzIoUklTQ19KVU1QIHwgUklTQ19JUlExIHwgUklTQ19DTlRfSU5DKTsKLQlidWYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIocS0+c3RvcHBlci5kbWEpOwotCWJ1Zi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsJLyogYml0cyA2My0zMiAqLwotCi0JZHByaW50aygyLCAiam1wIHRvIHN0b3BwZXIgKDB4JXgpXG4iLCBidWYtPnJpc2Muam1wWzFdKTsKLQotCWlmICghbGlzdF9lbXB0eSgmcS0+cXVldWVkKSkgewotCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+cXVldWVkKTsKLQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKLQkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gcXVldWVkXG4iLCBidWYsCi0JCQlidWYtPnZiLmkpOwotCi0JfSBlbHNlIGlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7Ci0JCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOwotCQljeDI1ODIxX3N0YXJ0X3ZpZGVvX2RtYShkZXYsIHEsIGJ1ZiwKLQkJCQkJJmRldi0+c3JhbV9jaGFubmVsc1tTUkFNX0NIMDldKTsKLQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKLQkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7Ci0JCW1vZF90aW1lcigmcS0+dGltZW91dCwgamlmZmllcyArIEJVRkZFUl9USU1FT1VUKTsKLQkJZHByaW50aygyLAotCQkJIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gZmlyc3QgYWN0aXZlLCBidWYgY250ID0gJWQsIHEtPmNvdW50ID0gJWRcbiIsCi0JCQlidWYsIGJ1Zi0+dmIuaSwgYnVmLT5jb3VudCwgcS0+Y291bnQpOwotCX0gZWxzZSB7Ci0JCXByZXYgPQotCQkgICAgbGlzdF9lbnRyeShxLT5hY3RpdmUucHJldiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5xdWV1ZSk7Ci0JCWlmIChwcmV2LT52Yi53aWR0aCA9PSBidWYtPnZiLndpZHRoCi0JCSAgICAmJiBwcmV2LT52Yi5oZWlnaHQgPT0gYnVmLT52Yi5oZWlnaHQKLQkJICAgICYmIHByZXYtPmZtdCA9PSBidWYtPmZtdCkgewotCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7Ci0JCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOwotCQkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7Ci0JCQlwcmV2LT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKGJ1Zi0+cmlzYy5kbWEpOwotCi0JCQkvKiA2NCBiaXQgYml0cyA2My0zMiAqLwotCQkJcHJldi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsKLQkJCWRwcmludGsoMiwKLQkJCQkiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gYWN0aXZlLCBidWYtPmNvdW50PSVkXG4iLAotCQkJCWJ1ZiwgYnVmLT52Yi5pLCBidWYtPmNvdW50KTsKLQotCQl9IGVsc2UgewotCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPnF1ZXVlZCk7Ci0JCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOwotCQkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBxdWV1ZWRcbiIsIGJ1ZiwKLQkJCQlidWYtPnZiLmkpOwotCQl9Ci0JfQotCi0JaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKLQkJZHByaW50aygyLCAiYWN0aXZlIHF1ZXVlIGVtcHR5IVxuIik7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBjeDI1ODIxX3ZpZGVvX3FvcHMgPSB7Ci0JLmJ1Zl9zZXR1cCA9IGN4MjU4MjFfYnVmZmVyX3NldHVwLAotCS5idWZfcHJlcGFyZSA9IGN4MjU4MjFfYnVmZmVyX3ByZXBhcmUsCi0JLmJ1Zl9xdWV1ZSA9IGJ1ZmZlcl9xdWV1ZSwKLQkuYnVmX3JlbGVhc2UgPSBjeDI1ODIxX2J1ZmZlcl9yZWxlYXNlLAotfTsKLQotc3RhdGljIGludCB2aWRlb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmg7Ci0JZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0KLQlwcmludGsoIm9wZW4gZGV2PSVzIHR5cGU9JXNcbiIsIHZpZGVvX2RldmljZV9ub2RlX25hbWUodmRldiksCi0JCXY0bDJfdHlwZV9uYW1lc1t0eXBlXSk7Ci0KLQkvKiBhbGxvY2F0ZSArIGluaXRpYWxpemUgcGVyIGZpbGVoYW5kbGUgZGF0YSAqLwotCWZoID0ga3phbGxvYyhzaXplb2YoKmZoKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gZmgpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbG9ja19rZXJuZWwoKTsKLQotCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOwotCWZoLT5kZXYgPSBkZXY7Ci0JZmgtPnR5cGUgPSB0eXBlOwotCWZoLT53aWR0aCA9IDcyMDsKLQotCWlmIChkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9CRyB8fCBkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9ESykKLQkJZmgtPmhlaWdodCA9IDU3NjsKLQllbHNlCi0JCWZoLT5oZWlnaHQgPSA0ODA7Ci0KLQlkZXYtPmNoYW5uZWxfb3BlbmVkID0gODsKLQlmaC0+Zm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhWNEwyX1BJWF9GTVRfWVVZVik7Ci0KLQl2NGwyX3ByaW9fb3BlbigmZGV2LT5wcmlvLCAmZmgtPnByaW8pOwotCi0JdmlkZW9idWZfcXVldWVfc2dfaW5pdCgmZmgtPnZpZHEsICZjeDI1ODIxX3ZpZGVvX3FvcHMsCi0JCQkgICAgICAgJmRldi0+cGNpLT5kZXYsICZkZXYtPnNsb2NrLAotCQkJICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKLQkJCSAgICAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQsCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBjeDI1ODIxX2J1ZmZlciksIGZoKTsKLQotCWRwcmludGsoMSwgInBvc3QgdmlkZW9idWZfcXVldWVfaW5pdCgpXG4iKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHNzaXplX3QgdmlkZW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiBkYXRhLCBzaXplX3QgY291bnQsCi0JCQkgIGxvZmZfdCAqIHBwb3MpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0Jc3dpdGNoIChmaC0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQlpZiAoY3gyNTgyMV9yZXNfbG9ja2VkKGZoLT5kZXYsIFJFU09VUkNFX1ZJREVPOSkpCi0JCQlyZXR1cm4gLUVCVVNZOwotCi0JCXJldHVybiB2aWRlb2J1Zl9yZWFkX29uZSgmZmgtPnZpZHEsIGRhdGEsIGNvdW50LCBwcG9zLAotCQkJCQkgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotCi0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JCXJldHVybiAwOwotCX0KLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCB2aWRlb19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLAotCQkJICAgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWY7Ci0KLQlpZiAoY3gyNTgyMV9yZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPOSkpIHsKLQkJLyogc3RyZWFtaW5nIGNhcHR1cmUgKi8KLQkJaWYgKGxpc3RfZW1wdHkoJmZoLT52aWRxLnN0cmVhbSkpCi0JCQlyZXR1cm4gUE9MTEVSUjsKLQkJYnVmID0gbGlzdF9lbnRyeShmaC0+dmlkcS5zdHJlYW0ubmV4dCwKLQkJCQkgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5zdHJlYW0pOwotCX0gZWxzZSB7Ci0JCS8qIHJlYWQoKSBjYXB0dXJlICovCi0JCWJ1ZiA9IChzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKilmaC0+dmlkcS5yZWFkX2J1ZjsKLQkJaWYgKE5VTEwgPT0gYnVmKQotCQkJcmV0dXJuIFBPTExFUlI7Ci0JfQotCi0JcG9sbF93YWl0KGZpbGUsICZidWYtPnZiLmRvbmUsIHdhaXQpOwotCWlmIChidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0RPTkUgfHwgYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9FUlJPUikKLQkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkZW9fcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCi0JLy9zdG9wIHRoZSByaXNjIGVuZ2luZSBhbmQgZmlmbwotCS8vY3hfd3JpdGUoY2hhbm5lbDktPmRtYV9jdGwsIDApOwotCi0JLyogc3RvcCB2aWRlbyBjYXB0dXJlICovCi0JaWYgKGN4MjU4MjFfcmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFTzkpKSB7Ci0JCXZpZGVvYnVmX3F1ZXVlX2NhbmNlbCgmZmgtPnZpZHEpOwotCQljeDI1ODIxX3Jlc19mcmVlKGRldiwgZmgsIFJFU09VUkNFX1ZJREVPOSk7Ci0JfQotCi0JaWYgKGZoLT52aWRxLnJlYWRfYnVmKSB7Ci0JCWN4MjU4MjFfYnVmZmVyX3JlbGVhc2UoJmZoLT52aWRxLCBmaC0+dmlkcS5yZWFkX2J1Zik7Ci0JCWtmcmVlKGZoLT52aWRxLnJlYWRfYnVmKTsKLQl9Ci0KLQl2aWRlb2J1Zl9tbWFwX2ZyZWUoJmZoLT52aWRxKTsKLQotCXY0bDJfcHJpb19jbG9zZSgmZGV2LT5wcmlvLCBmaC0+cHJpbyk7Ci0KLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCWtmcmVlKGZoKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7Ci0KLQlpZiAodW5saWtlbHkoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSkgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAodW5saWtlbHkoaSAhPSBmaC0+dHlwZSkpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHVubGlrZWx5KCFjeDI1ODIxX3Jlc19nZXQoZGV2LCBmaCwgY3gyNTgyMV9nZXRfcmVzb3VyY2UoZmgsIFJFU09VUkNFX1ZJREVPOSkpKSkgewotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbihnZXRfcXVldWUoZmgpKTsKLX0KLQotc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKLQlpbnQgZXJyLCByZXM7Ci0KLQlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoaSAhPSBmaC0+dHlwZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXMgPSBjeDI1ODIxX2dldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU85KTsKLQllcnIgPSB2aWRlb2J1Zl9zdHJlYW1vZmYoZ2V0X3F1ZXVlKGZoKSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JY3gyNTgyMV9yZXNfZnJlZShkZXYsIGZoLCByZXMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgbG9uZyB2aWRlb19pb2N0bF91cHN0cmVhbTkoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCi0JCQkJICB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCWludCBjb21tYW5kID0gMDsKLQlzdHJ1Y3QgdXBzdHJlYW1fdXNlcl9zdHJ1Y3QgKmRhdGFfZnJvbV91c2VyOwotCi0JZGF0YV9mcm9tX3VzZXIgPSAoc3RydWN0IHVwc3RyZWFtX3VzZXJfc3RydWN0ICopYXJnOwotCi0JaWYgKCFkYXRhX2Zyb21fdXNlcikgewotCQlwcmludGsKLQkJICAgICgiY3gyNTgyMSBpbiAlcygpOiBVcHN0cmVhbSBkYXRhIGlzIElOVkFMSUQuIFJldHVybmluZy5cbiIsCi0JCSAgICAgX19mdW5jX18pOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQljb21tYW5kID0gZGF0YV9mcm9tX3VzZXItPmNvbW1hbmQ7Ci0KLQlpZiAoY29tbWFuZCAhPSBVUFNUUkVBTV9TVEFSVF9WSURFTyAmJiBjb21tYW5kICE9IFVQU1RSRUFNX1NUT1BfVklERU8pIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JZGV2LT5pbnB1dF9maWxlbmFtZSA9IGRhdGFfZnJvbV91c2VyLT5pbnB1dF9maWxlbmFtZTsKLQlkZXYtPmlucHV0X2F1ZGlvZmlsZW5hbWUgPSBkYXRhX2Zyb21fdXNlci0+aW5wdXRfZmlsZW5hbWU7Ci0JZGV2LT52aWRfc3RkbmFtZSA9IGRhdGFfZnJvbV91c2VyLT52aWRfc3RkbmFtZTsKLQlkZXYtPnBpeGVsX2Zvcm1hdCA9IGRhdGFfZnJvbV91c2VyLT5waXhlbF9mb3JtYXQ7Ci0JZGV2LT5jaGFubmVsX3NlbGVjdCA9IGRhdGFfZnJvbV91c2VyLT5jaGFubmVsX3NlbGVjdDsKLQlkZXYtPmNvbW1hbmQgPSBkYXRhX2Zyb21fdXNlci0+Y29tbWFuZDsKLQotCXN3aXRjaCAoY29tbWFuZCkgewotCWNhc2UgVVBTVFJFQU1fU1RBUlRfVklERU86Ci0JCWN4MjU4MjFfc3RhcnRfdXBzdHJlYW1fdmlkZW9fY2gxKGRldiwgZGF0YV9mcm9tX3VzZXIpOwotCQlicmVhazsKLQotCWNhc2UgVVBTVFJFQU1fU1RPUF9WSURFTzoKLQkJY3gyNTgyMV9zdG9wX3Vwc3RyZWFtX3ZpZGVvX2NoMShkZXYpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OwotCWludCBlcnI7Ci0KLQlpZiAoZmgpIHsKLQkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sIGZoLT5wcmlvKTsKLQkJaWYgKDAgIT0gZXJyKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlkcHJpbnRrKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7Ci0JZXJyID0gY3gyNTgyMV92aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIHByaXYsIGYpOwotCi0JaWYgKDAgIT0gZXJyKQotCQlyZXR1cm4gZXJyOwotCWZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpOwotCWZoLT53aWR0aCA9IGYtPmZtdC5waXgud2lkdGg7Ci0JZmgtPmhlaWdodCA9IGYtPmZtdC5waXguaGVpZ2h0OwotCWZoLT52aWRxLmZpZWxkID0gZi0+Zm10LnBpeC5maWVsZDsKLQlkcHJpbnRrKDIsICIlcygpIHdpZHRoPSVkIGhlaWdodD0lZCBmaWVsZD0lZFxuIiwgX19mdW5jX18sIGZoLT53aWR0aCwKLQkJZmgtPmhlaWdodCwgZmgtPnZpZHEuZmllbGQpOwotCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCB2aWRlbywgc19mbXQsIGYpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpwKQotewotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7Ci0JcmV0dXJuIHZpZGVvYnVmX2RxYnVmKGdldF9xdWV1ZShmaCksIHAsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKLX0KLXN0YXRpYyBpbnQgdmlkaW9jX2xvZ19zdGF0dXMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKLQljaGFyIG5hbWVbMzIgKyAyXTsKLQotCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzLzIiLCBkZXYtPm5hbWUpOwotCXByaW50ayhLRVJOX0lORk8gIiVzLzI6ID09PT09PT09PT09PSAgU1RBUlQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09XG4iLAotCSAgICAgICBkZXYtPm5hbWUpOwotCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCBjb3JlLCBsb2dfc3RhdHVzKTsKLQlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT09ICBFTkQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09PVxuIiwKLQkgICAgICAgZGV2LT5uYW1lKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OwotCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7Ci0JaW50IGVycjsKLQlpZiAoZmgpIHsKLQkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sIGZoLT5wcmlvKTsKLQkJaWYgKDAgIT0gZXJyKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLy8gZXhwb3J0ZWQgc3R1ZmYKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdmlkZW9fZm9wcyA9IHsKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkub3BlbiA9IHZpZGVvX29wZW4sCi0JLnJlbGVhc2UgPSB2aWRlb19yZWxlYXNlLAotCS5yZWFkID0gdmlkZW9fcmVhZCwKLQkucG9sbCA9IHZpZGVvX3BvbGwsCi0JLm1tYXAgPSBjeDI1ODIxX3ZpZGVvX21tYXAsCi0JLmlvY3RsID0gdmlkZW9faW9jdGxfdXBzdHJlYW05LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB2aWRlb19pb2N0bF9vcHMgPSB7Ci0JLnZpZGlvY19xdWVyeWNhcCA9IGN4MjU4MjFfdmlkaW9jX3F1ZXJ5Y2FwLAotCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IGN4MjU4MjFfdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCi0JLnZpZGlvY19nX2ZtdF92aWRfY2FwID0gY3gyNTgyMV92aWRpb2NfZ19mbXRfdmlkX2NhcCwKLQkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcCA9IGN4MjU4MjFfdmlkaW9jX3RyeV9mbXRfdmlkX2NhcCwKLQkudmlkaW9jX3NfZm10X3ZpZF9jYXAgPSB2aWRpb2Nfc19mbXRfdmlkX2NhcCwKLQkudmlkaW9jX3JlcWJ1ZnMgPSBjeDI1ODIxX3ZpZGlvY19yZXFidWZzLAotCS52aWRpb2NfcXVlcnlidWYgPSBjeDI1ODIxX3ZpZGlvY19xdWVyeWJ1ZiwKLQkudmlkaW9jX3FidWYgPSBjeDI1ODIxX3ZpZGlvY19xYnVmLAotCS52aWRpb2NfZHFidWYgPSB2aWRpb2NfZHFidWYsCi0jaWZkZWYgVFVORVJfRkxBRwotCS52aWRpb2Nfc19zdGQgPSBjeDI1ODIxX3ZpZGlvY19zX3N0ZCwKLQkudmlkaW9jX3F1ZXJ5c3RkID0gY3gyNTgyMV92aWRpb2NfcXVlcnlzdGQsCi0jZW5kaWYKLQkudmlkaW9jX2Nyb3BjYXAgPSBjeDI1ODIxX3ZpZGlvY19jcm9wY2FwLAotCS52aWRpb2Nfc19jcm9wID0gY3gyNTgyMV92aWRpb2Nfc19jcm9wLAotCS52aWRpb2NfZ19jcm9wID0gY3gyNTgyMV92aWRpb2NfZ19jcm9wLAotCS52aWRpb2NfZW51bV9pbnB1dCA9IGN4MjU4MjFfdmlkaW9jX2VudW1faW5wdXQsCi0JLnZpZGlvY19nX2lucHV0ID0gY3gyNTgyMV92aWRpb2NfZ19pbnB1dCwKLQkudmlkaW9jX3NfaW5wdXQgPSBjeDI1ODIxX3ZpZGlvY19zX2lucHV0LAotCS52aWRpb2NfZ19jdHJsID0gY3gyNTgyMV92aWRpb2NfZ19jdHJsLAotCS52aWRpb2Nfc19jdHJsID0gdmlkaW9jX3NfY3RybCwKLQkudmlkaW9jX3F1ZXJ5Y3RybCA9IGN4MjU4MjFfdmlkaW9jX3F1ZXJ5Y3RybCwKLQkudmlkaW9jX3N0cmVhbW9uID0gdmlkaW9jX3N0cmVhbW9uLAotCS52aWRpb2Nfc3RyZWFtb2ZmID0gdmlkaW9jX3N0cmVhbW9mZiwKLQkudmlkaW9jX2xvZ19zdGF0dXMgPSB2aWRpb2NfbG9nX3N0YXR1cywKLQkudmlkaW9jX2dfcHJpb3JpdHkgPSBjeDI1ODIxX3ZpZGlvY19nX3ByaW9yaXR5LAotCS52aWRpb2Nfc19wcmlvcml0eSA9IGN4MjU4MjFfdmlkaW9jX3NfcHJpb3JpdHksCi0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0JLnZpZGlvY2dtYnVmID0gY3gyNTgyMV92aWRpb2NnbWJ1ZiwKLSNlbmRpZgotI2lmZGVmIFRVTkVSX0ZMQUcKLQkudmlkaW9jX2dfdHVuZXIgPSBjeDI1ODIxX3ZpZGlvY19nX3R1bmVyLAotCS52aWRpb2Nfc190dW5lciA9IGN4MjU4MjFfdmlkaW9jX3NfdHVuZXIsCi0JLnZpZGlvY19nX2ZyZXF1ZW5jeSA9IGN4MjU4MjFfdmlkaW9jX2dfZnJlcXVlbmN5LAotCS52aWRpb2Nfc19mcmVxdWVuY3kgPSBjeDI1ODIxX3ZpZGlvY19zX2ZyZXF1ZW5jeSwKLSNlbmRpZgotI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKLQkudmlkaW9jX2dfcmVnaXN0ZXIgPSBjeDI1ODIxX3ZpZGlvY19nX3JlZ2lzdGVyLAotCS52aWRpb2Nfc19yZWdpc3RlciA9IGN4MjU4MjFfdmlkaW9jX3NfcmVnaXN0ZXIsCi0jZW5kaWYKLX07Ci0KLXN0cnVjdCB2aWRlb19kZXZpY2UgY3gyNTgyMV92aWRlb190ZW1wbGF0ZTkgPSB7Ci0JLm5hbWUgPSAiY3gyNTgyMS11cHN0cmVhbTkiLAotCS5mb3BzID0gJnZpZGVvX2ZvcHMsCi0JLmlvY3RsX29wcyA9ICZ2aWRlb19pb2N0bF9vcHMsCi0JLnR2bm9ybXMgPSBDWDI1ODIxX05PUk1TLAotCS5jdXJyZW50X25vcm0gPSBWNEwyX1NURF9OVFNDX00sCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS5oIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS5oCmluZGV4IGNmMjI4NmQuLjFiNjI4ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLmgKQEAgLTYxLDcgKzYxLDcgQEAKICNkZWZpbmUgRkFMU0UgICAwCiAjZGVmaW5lIExJTkVfU0laRV9EMSAgICAxNDQwCiAKLS8vIE51bWJlciBvZiBkZWNvZGVycyBhbmQgZW5jb2RlcnMKKy8qIE51bWJlciBvZiBkZWNvZGVycyBhbmQgZW5jb2RlcnMgKi8KICNkZWZpbmUgTUFYX0RFQ09ERVJTICAgICAgICAgICAgOAogI2RlZmluZSBNQVhfRU5DT0RFUlMgICAgICAgICAgICAyCiAjZGVmaW5lIFFVQURfREVDT0RFUlMgICAgICAgICAgIDQKQEAgLTEzOSw2ICsxMzksNyBAQAogCS8qIHZpZGVvIGNhcHR1cmUgKi8KIAlzdHJ1Y3QgY3gyNTgyMV9mbXQgKmZtdDsKIAl1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodDsKKyAgICBpbnQgY2hhbm5lbF9pZDsKIAogCS8qIHZiaSBjYXB0dXJlICovCiAJc3RydWN0IHZpZGVvYnVmX3F1ZXVlIHZpZHE7CkBAIC0yMzYsMTMgKzIzNywzNCBAQAogCXN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWw7CiB9OwogCitzdHJ1Y3QgY3gyNTgyMV9jaGFubmVsIHsKKyAgICAgICBzdHJ1Y3QgdjRsMl9wcmlvX3N0YXRlIHByaW87CisKKyAgICAgICBpbnQgY3RsX2JyaWdodDsKKyAgICAgICBpbnQgY3RsX2NvbnRyYXN0OworICAgICAgIGludCBjdGxfaHVlOworICAgICAgIGludCBjdGxfc2F0dXJhdGlvbjsKKworICAgICAgIHN0cnVjdCBjeDI1ODIxX2RhdGEgdGltZW91dF9kYXRhOworCisgICAgICAgc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fZGV2OworICAgICAgIHN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlIHZpZHE7CisKKyAgICAgICBzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoYW5uZWxzOworCisgICAgICAgc3RydWN0IG11dGV4IGxvY2s7CisgICAgICAgaW50IHJlc291cmNlczsKKworICAgICAgIGludCBwaXhlbF9mb3JtYXRzOworICAgICAgIGludCB1c2VfY2lmX3Jlc29sdXRpb247CisgICAgICAgaW50IGNpZl93aWR0aDsKK307CisKIHN0cnVjdCBjeDI1ODIxX2RldiB7CiAJc3RydWN0IGxpc3RfaGVhZCBkZXZsaXN0OwogCWF0b21pY190IHJlZmNvdW50OwogCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKIAotCXN0cnVjdCB2NGwyX3ByaW9fc3RhdGUgcHJpbzsKLQogCS8qIHBjaSBzdHVmZiAqLwogCXN0cnVjdCBwY2lfZGV2ICpwY2k7CiAJdW5zaWduZWQgY2hhciBwY2lfcmV2LCBwY2lfbGF0OwpAQCAtMjYxLDEzICsyODMsMTIgQEAKIAlpbnQgbnI7CiAJc3RydWN0IG11dGV4IGxvY2s7CiAKKyAgICBzdHJ1Y3QgY3gyNTgyMV9jaGFubmVsIGNoYW5uZWxzW01BWF9WSURfQ0hBTk5FTF9OVU1dOworCiAJLyogYm9hcmQgZGV0YWlscyAqLwogCXVuc2lnbmVkIGludCBib2FyZDsKIAljaGFyIG5hbWVbMzJdOwogCi0JLyogc3JhbSBjb25maWd1cmF0aW9uICovCi0Jc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaGFubmVsczsKLQogCS8qIEFuYWxvZyB2aWRlbyAqLwogCXUzMiByZXNvdXJjZXM7CiAJdW5zaWduZWQgaW50IGlucHV0OwpAQCAtMjgyLDEzICszMDMsNiBAQAogCXVuc2lnbmVkIGNoYXIgdmlkZWNfYWRkcjsKIAl1bnNpZ25lZCBzaG9ydCBfbWF4X251bV9kZWNvZGVyczsKIAotCWludCBjdGxfYnJpZ2h0OwotCWludCBjdGxfY29udHJhc3Q7Ci0JaW50IGN0bF9odWU7Ci0JaW50IGN0bF9zYXR1cmF0aW9uOwotCi0Jc3RydWN0IGN4MjU4MjFfZGF0YSB0aW1lb3V0X2RhdGFbTUFYX1ZJRF9DSEFOTkVMX05VTV07Ci0KIAkvKiBBbmFsb2cgQXVkaW8gVXBzdHJlYW0gKi8KIAlpbnQgX2F1ZGlvX2lzX3J1bm5pbmc7CiAJaW50IF9hdWRpb3BpeGVsX2Zvcm1hdDsKQEAgLTI5Nyw3ICszMTEsNyBAQAogCWludCBfYXVkaW9fbGluZXNfY291bnQ7CiAJaW50IF9hdWRpb2ZyYW1lX2NvdW50OwogCWludCBfYXVkaW9fdXBzdHJlYW1fY2hhbm5lbF9zZWxlY3Q7Ci0JaW50IF9sYXN0X2luZGV4X2lycTsJLy9UaGUgbGFzdCBpbnRlcnJ1cHQgaW5kZXggcHJvY2Vzc2VkLgorICAgICAgIGludCBfbGFzdF9pbmRleF9pcnE7ICAgIC8qIFRoZSBsYXN0IGludGVycnVwdCBpbmRleCBwcm9jZXNzZWQuICovCiAKIAlfX2xlMzIgKl9yaXNjX2F1ZGlvX2ptcF9hZGRyOwogCV9fbGUzMiAqX3Jpc2NfdmlydF9zdGFydF9hZGRyOwpAQCAtMzEzLDEyICszMjcsMTAgQEAKIAogCS8qIFY0bCAqLwogCXUzMiBmcmVxOwotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvX2RldltNQVhfVklEX0NIQU5ORUxfTlVNXTsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2YmlfZGV2OwogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnJhZGlvX2RldjsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICppb2N0bF9kZXY7CiAKLQlzdHJ1Y3QgY3gyNTgyMV9kbWFxdWV1ZSB2aWRxW01BWF9WSURfQ0hBTk5FTF9OVU1dOwogCXNwaW5sb2NrX3Qgc2xvY2s7CiAKIAkvKiBWaWRlbyBVcHN0cmVhbSAqLwpAQCAtNDAxLDkgKzQxMyw2IEBACiAJaW50IHBpeGVsX2Zvcm1hdDsKIAlpbnQgY2hhbm5lbF9zZWxlY3Q7CiAJaW50IGNvbW1hbmQ7Ci0JaW50IHBpeGVsX2Zvcm1hdHNbVklEX0NIQU5ORUxfTlVNXTsKLQlpbnQgdXNlX2NpZl9yZXNvbHV0aW9uW1ZJRF9DSEFOTkVMX05VTV07Ci0JaW50IGNpZl93aWR0aFtWSURfQ0hBTk5FTF9OVU1dOwogCWludCBjaGFubmVsX29wZW5lZDsKIH07CiAKQEAgLTQ4Miw3ICs0OTEsNyBAQAogCXUzMiBmbGRfYXVkX2ZpZm9fZW47CiAJdTMyIGZsZF9hdWRfcmlzY19lbjsKIAotCS8vRm9yIFVwc3RyZWFtIFZpZGVvCisgICAgICAgLyogRm9yIFVwc3RyZWFtIFZpZGVvICovCiAJdTMyIHZpZF9mbXRfY3RsOwogCXUzMiB2aWRfYWN0aXZlX2N0bDE7CiAJdTMyIHZpZF9hY3RpdmVfY3RsMjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvZnVuY3Rpb25zLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL2Z1bmN0aW9ucy5jCmluZGV4IDg2YjQ5ODAuLjIzZWExMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvZnVuY3Rpb25zLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9mdW5jdGlvbnMuYwpAQCAtMTIyLDE5ICsxMjIsNyBAQAogICAgICAgICAgICAgcHJfd2FybmluZygiJXM6IGRydnIgbm90IGF2YWlsYWJsZSAoJXgpXG4iLCBfX2Z1bmNfXywgZHJ2cl9zdGF0ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0gICAgLyogSW5pdGlhbGl6ZSB0aGUgdHEgZW50cnkgb25seSB0aGUgZmlyc3QgdGltZSAqLwotICAgIGlmICh3ZC0+aW5pdF90cSkKLSAgICB7Ci0gICAgICAgIHdkLT5pbml0X3RxID0gMDsKLSAgICAgICAgd2QtPnRxLnJvdXRpbmUgPSB3ZC0+ZnVuYzsKLSAgICAgICAgd2QtPnRxLnN5bmMgPSAwOwotICAgICAgICB3ZC0+dHEuZGF0YSA9IHdkLT5zb2Z0YzsKLSAgICB9Ci0gICAgc2NoZWR1bGVfdGFzayAoJndkLT50cSk7Ci0jZWxzZQogICAgIHNjaGVkdWxlX3dvcmsgKCZ3ZC0+d29yayk7Ci0jZW5kaWYKICAgICBtb2RfdGltZXIgKCZ3ZC0+aCwgamlmZmllcyArIHdkLT50aWNrcyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvaHdwcm9iZS5jIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9od3Byb2JlLmMKaW5kZXggNGM4NjEwMi4uODkyMDBlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9od3Byb2JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9od3Byb2JlLmMKQEAgLTMwNSwxNSArMzA1LDkgQEAKICAgICBlcnJvcl9mbGFnID0gMDsKICAgICBwcmVwX2hkd19pbmZvICgpOwogICAgIC8qKiogc2NhbiBQQ0kgYnVzIGZvciBhbGwgcG9zc2libGUgYm9hcmRzICovCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwwKQogICAgIHdoaWxlICgocGRldiA9IHBjaV9nZXRfZGV2aWNlIChQQ0lfVkVORE9SX0lEX0NPTkVYQU5ULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfREVWSUNFX0lEX0NOODQ3NCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRldikpKQotI2Vsc2UKLSAgICB3aGlsZSAoKHBkZXYgPSBwY2lfZmluZF9kZXZpY2UgKFBDSV9WRU5ET1JfSURfQ09ORVhBTlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfREVWSUNFX0lEX0NOODQ3NCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZXYpKSkKLSNlbmRpZgogICAgIHsKICAgICAgICAgaWYgKGM0X2hkd19pbml0IChwZGV2LCBmb3VuZCkpCiAgICAgICAgICAgICBmb3VuZCsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9saW51eC5jIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9saW51eC5jCmluZGV4IDEzNGU3NTYuLmViMGY0YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvbGludXguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL2xpbnV4LmMKQEAgLTE0MiwxMCArMTQyLDYgQEAKIH0KIAogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0jZGVmaW5lIERFVl9UT19QUklWKGRldikgKCAqIChzdHJ1Y3QgYzRfcHJpdiAqKikgKChoZGxjX2RldmljZSopKGRldikrMSkpCi0jZWxzZQotCiBjaGFyICAgICAgICoKIGdldF9oZGxjX25hbWUgKGhkbGNfZGV2aWNlICogaGRsYykKIHsKQEAgLTE1NCw3ICsxNTAsNiBAQAogCiAgICAgcmV0dXJuIGRldi0+bmFtZTsKIH0KLSNlbmRpZgogCiAKIHN0YXRpYyAgICAgIHN0YXR1c190CkBAIC0xNjcsNyArMTYyLDYgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsNDEpCiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKIC8qKioKQEAgLTI1OSw3ICsyNTMsNiBAQAogICAgICAgICBwaS0+d3FfcG9ydCA9IDA7CiAgICAgfQogfQotI2VuZGlmCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTI5MSw0OCArMjg0LDYgQEAKIH0KIAogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0jaWYgIWRlZmluZWQoR0VORVJJQ19IRExDX1ZFUlNJT04pIHx8IChHRU5FUklDX0hETENfVkVSU0lPTiA8IDQpCi0KLS8qKiBMaW51eCAyLjQuMTgtMTkgKiovCi1TVEFUSUMgaW50Ci1jaGFuX29wZW4gKGhkbGNfZGV2aWNlICogaGRsYykKLXsKLSAgICBzdGF0dXNfdCAgICByZXQ7Ci0KLSAgICBpZiAoKHJldCA9IGM0X2NoYW5fdXAgKERFVl9UT19QUklWIChoZGxjKS0+Y2ksIERFVl9UT19QUklWIChoZGxjKS0+Y2hhbm51bSkpKQotICAgICAgICByZXR1cm4gLXJldDsKLSAgICBNT0RfSU5DX1VTRV9DT1VOVDsKLSAgICBuZXRpZl9zdGFydF9xdWV1ZSAoaGRsY190b19kZXYgKGhkbGMpKTsKLSAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIGVycm9yID0gc3VjY2VzcyAqLwotfQotCi0jZWxzZQotCi0vKiogTGludXggMi40LjIwIGFuZCBoaWdoZXIgKiovCi1TVEFUSUMgaW50Ci1jaGFuX29wZW4gKHN0cnVjdCBuZXRfZGV2aWNlICogbmRldikKLXsKLSAgICBoZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjIChuZGV2KTsKLSAgICBzdGF0dXNfdCAgICByZXQ7Ci0KLSAgICBoZGxjLT5wcm90byA9IElGX1BST1RPX0hETEM7Ci0gICAgaWYgKChyZXQgPSBoZGxjX29wZW4gKGhkbGMpKSkKLSAgICB7Ci0gICAgICAgIHByX2luZm8oImhkbGNfb3BlbiBmYWlsdXJlLCBlcnIgJWQuXG4iLCByZXQpOwotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0KLSAgICBpZiAoKHJldCA9IGM0X2NoYW5fdXAgKERFVl9UT19QUklWIChoZGxjKS0+Y2ksIERFVl9UT19QUklWIChoZGxjKS0+Y2hhbm51bSkpKQotICAgICAgICByZXR1cm4gLXJldDsKLSAgICBNT0RfSU5DX1VTRV9DT1VOVDsKLSAgICBuZXRpZl9zdGFydF9xdWV1ZSAoaGRsY190b19kZXYgKGhkbGMpKTsKLSAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIGVycm9yID0gc3VjY2VzcyAqLwotfQotI2VuZGlmCi0KLSNlbHNlCi0KLS8qKiBMaW51eCAyLjYgKiovCiBTVEFUSUMgaW50CiBjaGFuX29wZW4gKHN0cnVjdCBuZXRfZGV2aWNlICogbmRldikKIHsKQEAgLTM1MSwzOSArMzAyLDggQEAKICAgICBuZXRpZl9zdGFydF9xdWV1ZSAobmRldik7CiAgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBlcnJvciA9IHN1Y2Nlc3MgKi8KIH0KLSNlbmRpZgogCiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSNpZiAhZGVmaW5lZChHRU5FUklDX0hETENfVkVSU0lPTikgfHwgKEdFTkVSSUNfSERMQ19WRVJTSU9OIDwgNCkKLQotLyoqIExpbnV4IDIuNC4xOC0xOSAqKi8KLVNUQVRJQyB2b2lkCi1jaGFuX2Nsb3NlIChoZGxjX2RldmljZSAqIGhkbGMpCi17Ci0gICAgbmV0aWZfc3RvcF9xdWV1ZSAoaGRsY190b19kZXYgKGhkbGMpKTsKLSAgICBtdXN5Y2NfY2hhbl9kb3duICgoY2lfdCAqKSAwLCBERVZfVE9fUFJJViAoaGRsYyktPmNoYW5udW0pOwotICAgIE1PRF9ERUNfVVNFX0NPVU5UOwotfQotI2Vsc2UKLQotLyoqIExpbnV4IDIuNC4yMCBhbmQgaGlnaGVyICoqLwotU1RBVElDIGludAotY2hhbl9jbG9zZSAoc3RydWN0IG5ldF9kZXZpY2UgKiBuZGV2KQotewotICAgIGhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMgKG5kZXYpOwotCi0gICAgbmV0aWZfc3RvcF9xdWV1ZSAoaGRsY190b19kZXYgKGhkbGMpKTsKLSAgICBtdXN5Y2NfY2hhbl9kb3duICgoY2lfdCAqKSAwLCBERVZfVE9fUFJJViAoaGRsYyktPmNoYW5udW0pOwotICAgIGhkbGNfY2xvc2UgKGhkbGMpOwotICAgIE1PRF9ERUNfVVNFX0NPVU5UOwotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KLSNlbHNlCi0KLS8qKiBMaW51eCAyLjYgKiovCiBTVEFUSUMgaW50CiBjaGFuX2Nsb3NlIChzdHJ1Y3QgbmV0X2RldmljZSAqIG5kZXYpCiB7CkBAIC0zOTYsMzcgKzMxNiw4IEBACiAgICAgbW9kdWxlX3B1dCAoVEhJU19NT0RVTEUpOwogICAgIHJldHVybiAwOwogfQotI2VuZGlmCiAKIAotI2lmICFkZWZpbmVkKEdFTkVSSUNfSERMQ19WRVJTSU9OKSB8fCAoR0VORVJJQ19IRExDX1ZFUlNJT04gPCA0KQotCi0vKiogTGludXggMi40LjE4LTE5ICoqLwotU1RBVElDIGludAotY2hhbl9pb2N0bCAoaGRsY19kZXZpY2UgKiBoZGxjLCBzdHJ1Y3QgaWZyZXEgKiBpZnIsIGludCBjbWQpCi17Ci0gICAgaWYgKGNtZCA9PSBIRExDU0NMT0NLKQotICAgIHsKLSAgICAgICAgaWZyLT5pZnJfaWZydS5pZnJ1X2l2YWx1ZSA9IExJTkVfREVGQVVMVDsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiAtRUlOVkFMOwotfQotI2VuZGlmCi0KLQotI2lmICFkZWZpbmVkKEdFTkVSSUNfSERMQ19WRVJTSU9OKSB8fCAoR0VORVJJQ19IRExDX1ZFUlNJT04gPCA0KQotU1RBVElDIGludAotY2hhbl9kZXZfaW9jdGwgKHN0cnVjdCBuZXRfZGV2aWNlICogaGRsYywgc3RydWN0IGlmcmVxICogaWZyLCBpbnQgY21kKQotewotICAgIGlmIChjbWQgPT0gSERMQ1NDTE9DSykKLSAgICB7Ci0gICAgICAgIGlmci0+aWZyX2lmcnUuaWZydV9pdmFsdWUgPSBMSU5FX0RFRkFVTFQ7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gLUVJTlZBTDsKLX0KLSNlbHNlCiBTVEFUSUMgaW50CiBjaGFuX2Rldl9pb2N0bCAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIHN0cnVjdCBpZnJlcSAqIGlmciwgaW50IGNtZCkKIHsKQEAgLTQzNSwxNiArMzI2LDExIEBACiAKIAogU1RBVElDIGludAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotY2hhbl9hdHRhY2hfbm9vcCAoaGRsY19kZXZpY2UgKiBoZGxjLCB1bnNpZ25lZCBzaG9ydCBmb29fMSwgdW5zaWduZWQgc2hvcnQgZm9vXzIpCi0jZWxzZQogY2hhbl9hdHRhY2hfbm9vcCAoc3RydWN0IG5ldF9kZXZpY2UgKiBuZGV2LCB1bnNpZ25lZCBzaG9ydCBmb29fMSwgdW5zaWduZWQgc2hvcnQgZm9vXzIpCi0jZW5kaWYKIHsKICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgLyogb3VyIGRyaXZlciBoYXMgbm90aGluZyB0byBkbyBoZXJlLCBzaG93J3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogb3ZlciwgZ28gaG9tZSAqLwogfQotI2VuZGlmCiAKIAogU1RBVElDIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICoKQEAgLTQ1NSwxNiArMzQxLDEyIEBACiAgICAgc3RydWN0IHNiZWNvbV9jaGFuX3N0YXRzICpzdGF0czsKICAgICBpbnQgICAgICAgICBjaGFubnVtOwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0gICAgY2hhbm51bSA9IERFVl9UT19QUklWIChuZGV2KS0+Y2hhbm51bTsKLSNlbHNlCiAgICAgewogICAgICAgICBzdHJ1Y3QgYzRfcHJpdiAqcHJpdjsKIAogICAgICAgICBwcml2ID0gKHN0cnVjdCBjNF9wcml2ICopIGRldl90b19oZGxjIChuZGV2KS0+cHJpdjsKICAgICAgICAgY2hhbm51bSA9IHByaXYtPmNoYW5udW07CiAgICAgfQotI2VuZGlmCiAKICAgICBjaCA9IGM0X2ZpbmRfY2hhbiAoY2hhbm51bSk7CiAgICAgaWYgKGNoID09IE5VTEwpCkBAIC01MTEsMzQgKzM5MywxOSBAQAogfQogCiAKLSNpZiAhZGVmaW5lZChHRU5FUklDX0hETENfVkVSU0lPTikgfHwgKEdFTkVSSUNfSERMQ19WRVJTSU9OIDwgNCkKLVNUQVRJQyBpbnQKLWM0X2xpbnV4X3htaXQgKGhkbGNfZGV2aWNlICogaGRsYywgc3RydWN0IHNrX2J1ZmYgKiBza2IpCi17Ci0gICAgaW50ICAgICAgICAgcnZhbDsKLQotICAgIHJ2YWwgPSBtdXN5Y2Nfc3RhcnRfeG1pdCAoREVWX1RPX1BSSVYgKGhkbGMpLT5jaSwgREVWX1RPX1BSSVYgKGhkbGMpLT5jaGFubnVtLCBza2IpOwotICAgIHJldHVybiAtcnZhbDsKLX0KLSNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmV3ICovCiBTVEFUSUMgaW50CiBjNF9saW51eF94bWl0IChzdHJ1Y3Qgc2tfYnVmZiAqIHNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKiBuZGV2KQogewogICAgIGNvbnN0IHN0cnVjdCBjNF9wcml2ICpwcml2OwogICAgIGludCAgICAgICAgIHJ2YWw7CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSAgICBwcml2ID0gREVWX1RPX1BSSVYgKG5kZXYpOwotI2Vsc2UKICAgICBoZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjIChuZGV2KTsKIAogICAgIHByaXYgPSBoZGxjLT5wcml2OwotI2VuZGlmCiAKICAgICBydmFsID0gbXVzeWNjX3N0YXJ0X3htaXQgKHByaXYtPmNpLCBwcml2LT5jaGFubnVtLCBza2IpOwogICAgIHJldHVybiAtcnZhbDsKIH0KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR0VORVJJQ19IRExDX1ZFUlNJT04gKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjaGFuX29wcyA9IHsKICAgICAgICAubmRvX29wZW4gICAgICAgPSBjaGFuX29wZW4sCkBAIC04MjMsMTggKzY5MCwxMCBAQAogICAgIHJldCA9IG1rcmV0IChjNF9uZXdfY2hhbiAoY2ksIGNwLnBvcnQsIGNwLmNoYW5udW0sIGRldikpOwogICAgIGlmIChyZXQpCiAgICAgewotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotICAgICAgICBydG5sX3VubG9jayAoKTsgICAgICAgICAgICAgLyogbmVlZGVkIGR1ZSB0byBJb2N0bCBjYWxsaW5nIHNlcXVlbmNlICovCi0gICAgICAgIFY3ICh1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKSAoZGV2X3RvX2hkbGMgKGRldikpOwotICAgICAgICBydG5sX2xvY2sgKCk7ICAgICAgICAgICAgICAgLyogbmVlZGVkIGR1ZSB0byBJb2N0bCBjYWxsaW5nIHNlcXVlbmNlICovCi0gICAgICAgIE9TX2tmcmVlIChERVZfVE9fUFJJViAoZGV2KSk7Ci0gICAgICAgIE9TX2tmcmVlIChkZXYpOwotI2Vsc2UKICAgICAgICAgcnRubF91bmxvY2sgKCk7ICAgICAgICAgICAgIC8qIG5lZWRlZCBkdWUgdG8gSW9jdGwgY2FsbGluZyBzZXF1ZW5jZSAqLwogICAgICAgICB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlIChkZXYpOwogICAgICAgICBydG5sX2xvY2sgKCk7ICAgICAgICAgICAgICAgLyogbmVlZGVkIGR1ZSB0byBJb2N0bCBjYWxsaW5nIHNlcXVlbmNlICovCiAgICAgICAgIGZyZWVfbmV0ZGV2IChkZXYpOwotI2VuZGlmCiAgICAgfQogICAgIHJldHVybiByZXQ7CiB9CkBAIC04ODMsMTEgKzc0Miw3IEBACiAgICAgICAgIGNvbnN0IHN0cnVjdCBjNF9wcml2ICpwcml2OwogICAgICAgICBpbnQgICAgICAgICBjaGFubnVtOwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0gICAgICAgIHByaXYgPSBERVZfVE9fUFJJViAobmRldik7Ci0jZWxzZQogICAgICAgICBwcml2ID0gKHN0cnVjdCBjNF9wcml2ICopIGRldl90b19oZGxjIChuZGV2KS0+cHJpdjsKLSNlbmRpZgogICAgICAgICBjaSA9IHByaXYtPmNpOwogICAgICAgICBjaGFubnVtID0gcHJpdi0+Y2hhbm51bTsKIApAQCAtODk3LDIyICs3NTIsMTIgQEAKICAgICAgICAgY2gtPnVzZXIgPSAwOyAgICAgICAgICAgICAgIC8qIHdpbGwgYmUgZnJlZWQsIGJlbG93ICovCiAgICAgfQogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0gICAgaWYgKGxvY2tpdCkKLSAgICAgICAgcnRubF91bmxvY2sgKCk7ICAgICAgICAgICAgIC8qIG5lZWRlZCBpZiBJb2N0bCBjYWxsaW5nIHNlcXVlbmNlICovCi0gICAgVjcgKHVucmVnaXN0ZXJfaGRsY19kZXZpY2UpIChkZXZfdG9faGRsYyAobmRldikpOwotICAgIGlmIChsb2NraXQpCi0gICAgICAgIHJ0bmxfbG9jayAoKTsgICAgICAgICAgICAgICAvKiBuZWVkZWQgaWYgSW9jdGwgY2FsbGluZyBzZXF1ZW5jZSAqLwotICAgIE9TX2tmcmVlIChERVZfVE9fUFJJViAobmRldikpOwotICAgIE9TX2tmcmVlIChuZGV2KTsKLSNlbHNlCiAgICAgaWYgKGxvY2tpdCkKICAgICAgICAgcnRubF91bmxvY2sgKCk7ICAgICAgICAgICAgIC8qIG5lZWRlZCBpZiBJb2N0bCBjYWxsaW5nIHNlcXVlbmNlICovCiAgICAgdW5yZWdpc3Rlcl9oZGxjX2RldmljZSAobmRldik7CiAgICAgaWYgKGxvY2tpdCkKICAgICAgICAgcnRubF9sb2NrICgpOyAgICAgICAgICAgICAgIC8qIG5lZWRlZCBpZiBJb2N0bCBjYWxsaW5nIHNlcXVlbmNlICovCiAgICAgZnJlZV9uZXRkZXYgKG5kZXYpOwotI2VuZGlmCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTEzMzksMTQgKzExODQsNiBAQAogbW9kdWxlX2luaXQgKGM0X21vZF9pbml0KTsKIG1vZHVsZV9leGl0IChjNF9tb2RfcmVtb3ZlKTsKIAotI2lmbmRlZiBTQkVfSU5DTFVERV9TWU1CT0xTCi0jaWZuZGVmIENPTkZJR19TQkVfV0FOQzI0X05DT01NCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi1FWFBPUlRfTk9fU1lNQk9MUzsKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLQogTU9EVUxFX0FVVEhPUiAoIlNCRSBUZWNobmljYWwgU2VydmljZXMgPHN1cHBvcnRAc2JlaS5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04gKCJ3YW5QQ0ktQ3hUMUUxIEdlbmVyaWMgSERMQyBXQU4gRHJpdmVyIG1vZHVsZSIpOwogI2lmZGVmIE1PRFVMRV9MSUNFTlNFCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL211c3ljYy5jIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9tdXN5Y2MuYwppbmRleCBkM2Y1YTViLi4xMmM3NmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL211c3ljYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvbXVzeWNjLmMKQEAgLTQwNSw3ICs0MDUsNiBAQAogfQogCiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsNDEpCiAvKgogICogVGhpcyBpcyB0aGUgd29ya3EgdGFzayBleGVjdXRlZCBieSB0aGUgT1Mgd2hlbiBvdXIgcXVldWVfd29yaygpIGlzCiAgKiBzY2hlZHVsZWQgYW5kIHJ1bi4gIEl0IGNhbiBmaXJlIG9mZiBlaXRoZXIgUlggb3IgVFggQUNUSVZBVElPTiBkZXBlbmRpbmcKQEAgLTUxNSw3ICs1MTQsNiBAQAogI2VuZGlmCiAgICAgfQogfQotI2VuZGlmCiAKIAogIC8qCkBAIC01MzEsNyArNTI5LDYgQEAKICAgICAgICAgICAgIGNoLT5jaGFubnVtLCBjaC0+dHhkX2lycV9zcnYsIGNoLT50eGRfaXJxX3Nydi0+c3RhdHVzKTsKICNlbmRpZgogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDQxKQogICAgIC8qIDIuNiAtIGZpbmQgbmV4dCB1bnByb2Nlc3NlZCBtZXNzYWdlLCB0aGVuIHNldCBUWCB0aHAgdG8gaXQgKi8KICNpZmRlZiBSTERfUkVTVEFSVF9ERUJVRwogICAgIHByX2luZm8oIj4+IG11c3ljY19jaGFuX3Jlc3RhcnQ6IHNjaGVkdWxpbmcgQ2hhbiAleCB3b3JrUSBAICVwXG4iLCBjaC0+Y2hhbm51bSwgJmNoLT5jaF93b3JrKTsKQEAgLTUzOSw1MSArNTM2LDkgQEAKICAgICBjNF93a19jaGFuX3Jlc3RhcnQgKGNoKTsgICAgICAgIC8qIHdvcmsgcXVldWUgbWVjaGFuaXNtIGZpcmVzIG9mZjogUmVmOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbXVzeWNjX3dxX2NoYW5fcmVzdGFydCAoKSAqLwogCi0jZWxzZQotCi0KLSAgICAvKiAyLjQgLSBmaW5kIG5leHQgdW5wcm9jZXNzZWQgbWVzc2FnZSwgdGhlbiBzZXQgVFggdGhwIHRvIGl0ICovCi0jaWZkZWYgUkxEX1JFU1RBUlRfREVCVUcKLSAgICBwcl9pbmZvKCI+PiBtdXN5Y2NfY2hhbl9yZXN0YXJ0OiBzY2hlZHVsaW5nIENoYW4gJXggc3RhcnRfdHggJXhcbiIsIGNoLT5jaGFubnVtLCBjaC0+Y2hfc3RhcnRfdHgpOwotI2VuZGlmCi0gICAgLyogcmVzdGFydCB0cmFuc21pc3Npb24gZnJvbSBiYWNrZ3JvdW5kIGxvb3AgKi8KLSAgICBjaC0+dXAtPnVwLT53ZF9ub3RpZnkgPSBXRF9OT1RJRllfMVRYOwotI2VuZGlmCiB9CiAKIAotI2lmIDAKLXZvaWQKLW11c3ljY19jbGVhbnVwIChjaV90ICogY2kpCi17Ci0gICAgbXBpX3QgICAgICAqcGk7Ci0gICAgaW50ICAgICAgICAgaSwgajsKLQotICAgIC8qIGZyZWUgdXAgZHJpdmVyIHJlc291cmNlcyAqLwotICAgIGNpLT5zdGF0ZSA9IENfSU5JVDsgICAgICAgICAgICAgLyogbWFyayBhcyBoYXJkd2FyZSBub3QgYXZhaWxhYmxlICovCi0KLSAgICBmb3IgKGkgPSAwOyBpIDwgY2ktPm1heF9wb3J0czsgaSsrKQotICAgIHsKLSAgICAgICAgcGkgPSAmY2ktPnBvcnRbaV07Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDQxKQotICAgICAgICBjNF93cV9wb3J0X2NsZWFudXAgKHBpKTsKLSNlbmRpZgotICAgICAgICBmb3IgKGogPSAwOyBqIDwgTVVTWUNDX05DSEFOUzsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocGktPmNoYW5bal0pCi0gICAgICAgICAgICAgICAgT1Nfa2ZyZWUgKHBpLT5jaGFuW2pdKTsgLyogZnJlZSBtY2hfdCBzdHJ1Y3QgKi8KLSAgICAgICAgfQotICAgICAgICBPU19rZnJlZSAocGktPnJlZ3JhbV9zYXZlZCk7Ci0gICAgfQotI2lmIDAKLSAgICAvKiBvYnNvbGV0ZSAtIHdhdGNoZG9nIGlzIG5vdyBzdGF0aWMgdy9pbiBjaV90ICovCi0gICAgT1NfZnJlZV93YXRjaGRvZyAoY2ktPndkKTsKLSNlbmRpZgotICAgIE9TX2tmcmVlIChjaS0+aXFkX3Bfc2F2ZWQpOwotICAgIE9TX2tmcmVlIChjaSk7Ci19Ci0jZW5kaWYKLQogdm9pZAogcmxkX3B1dF9sZWQgKG1waV90ICogcGksIHVfaW50MzJfdCBsZWR2YWwpCiB7CkBAIC0yMDA4LDM3ICsxOTYzLDEzIEBACiAgICAgYXRvbWljX2FkZCAobGVuLCAmY2ktPnR4X3BlbmRpbmcpOwogICAgIGNoLT5zLnR4X3BhY2tldHMrKzsKICAgICBjaC0+cy50eF9ieXRlcyArPSBsZW47Ci0jaWYgMAotICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZjaC0+Y2hfdHhsb2NrLCBmbGFncyk7ICAgLyogYWxsb3cgcGVuZGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW50ZXJydXB0IHRvIHNuZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aHJ1ICovCi0jZW5kaWYKLQogICAgIC8qCiAgICAgICogSWYgYW4gT05SIHdhcyBzZWVuLCB0aGVuIGNoYW5uZWwgcmVxdWlyZXMgcG9raW5nIHRvIHJlc3RhcnQKICAgICAgKiB0cmFuc21pc3Npb24uCiAgICAgICovCiAgICAgaWYgKGNoLT5jaF9zdGFydF90eCkKICAgICB7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9IEtFUk5FTF9WRVJTSU9OKDIsNSw0MSkKLSAgICAgICAgU0RfU0VNX1RBS0UgKCZjaS0+c2VtX3dkYnVzeSwgIl93ZF8iKTsgIC8qIG9ubHkgMSB0aHJ1IGhlcmUsIHBlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYm9hcmQgKi8KLSAgICAgICAgaWYgKChjaC0+Y2hfc3RhcnRfdHggPT0gQ0hfU1RBUlRfVFhfT05SKSAmJiAoY2gtPnAuY2hhbl9tb2RlID09IENGR19DSF9QUk9UT19UUkFOUykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qIE9OUiByZXN0YXJ0IHRyYW5zbWlzc2lvbiBmcm9tIGJhY2tncm91bmQgbG9vcCAqLwotICAgICAgICAgICAgY2ktPndkX25vdGlmeSA9IFdEX05PVElGWV9PTlI7ICAgICAgLyogZW5hYmxlZCBnbG9iYWwgd2F0Y2hkb2cKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNjYW4tdGhydSAgKi8KLSAgICAgICAgfSBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qIHN0YXJ0IGZpcnN0IHRyYW5zbWlzc2lvbiBmcm9tIGJhY2tncm91bmQgbG9vcCAqLwotICAgICAgICAgICAgY2ktPndkX25vdGlmeSA9IFdEX05PVElGWV8xVFg7ICAgICAgLyogZW5hYmxlZCBnbG9iYWwgd2F0Y2hkb2cKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNjYW4tdGhydSAgKi8KLSAgICAgICAgfQogICAgICAgICBtdXN5Y2NfY2hhbl9yZXN0YXJ0IChjaCk7Ci0gICAgICAgIFNEX1NFTV9HSVZFICgmY2ktPnNlbV93ZGJ1c3kpOwotI2Vsc2UKLSAgICAgICAgbXVzeWNjX2NoYW5fcmVzdGFydCAoY2gpOwotI2VuZGlmCiAgICAgfQogI2lmZGVmIFNCRV9XQU4yNTZUM19FTkFCTEUKICAgICB3YW4yNTZ0M19sZWQgKGNpLCBMRURfVFgsIExFRFZfRyk7CkBAIC0yMDQ3LDEzOSArMTk3OCw0IEBACiB9CiAKIAotI2lmIDAKLWludAotbXVzeWNjX3NldF9jaGFuIChjaV90ICogY2ksIGludCBjaGFubnVtLCBzdHJ1Y3Qgc2JlY29tX2NoYW5fcGFyYW0gKiBwKQotewotICAgIG1jaF90ICAgICAgKmNoOwotICAgIGludCAgICAgICAgIHJvayA9IDA7Ci0gICAgaW50ICAgICAgICAgbiA9IDA7Ci0KLSAgICBpZiAoY2hhbm51bSA8IDAgfHwgY2hhbm51bSA+PSAoTVVTWUNDX05QT1JUUyAqIE1VU1lDQ19OQ0hBTlMpKSAgICAgIC8qIHNhbml0eSBjaGsgcGFyYW0gKi8KLSAgICAgICAgcmV0dXJuIEVDSFJORzsKLSAgICBpZiAoIShjaCA9IHNkX2ZpbmRfY2hhbiAoY2ksIGNoYW5udW0pKSkKLSAgICAgICAgcmV0dXJuIEVOT0VOVDsKLSAgICBpZiAoY2gtPmNoYW5udW0gIT0gcC0+Y2hhbm51bSkKLSAgICAgICAgcmV0dXJuIEVJTlZBTDsKLSAgICBpZiAoc2RfbGluZV9pc19vayAoY2gtPnVzZXIpKQotICAgIHsKLSAgICAgICAgcm9rID0gMTsKLSAgICAgICAgc2RfbGluZV9pc19kb3duIChjaC0+dXNlcik7Ci0gICAgfQotICAgIGlmIChjaC0+c3RhdGUgPT0gVVAgJiYgICAgICAgICAgLyogYnJpbmcgZG93biBpbiBjdXJyZW50IGNvbmZpZ3VyYXRpb24gKi8KLSAgICAgICAgKGNoLT5wLnN0YXR1cyAhPSBwLT5zdGF0dXMgfHwKLSAgICAgICAgIGNoLT5wLmNoYW5fbW9kZSAhPSBwLT5jaGFuX21vZGUgfHwKLSAgICAgICAgIGNoLT5wLmludHJfbWFzayAhPSBwLT5pbnRyX21hc2sgfHwKLSAgICAgICAgIGNoLT50eGRfZnJlZSA8IGNoLT50eGRfbnVtKSkKLSAgICB7Ci0gICAgICAgIGlmICgobiA9IG11c3ljY19jaGFuX2Rvd24gKGNpLCBjaGFubnVtKSkpCi0gICAgICAgICAgICByZXR1cm4gbjsKLSAgICAgICAgaWYgKGNoLT5wLm1vZGVfNTZrICE9IHAtPm1vZGVfNTZrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaC0+cCA9ICpwOyAgICAgICAgICAgICAvKiBjb3B5IGluIG5ldyBwYXJhbWV0ZXJzICovCi0gICAgICAgICAgICBtdXN5Y2NfdXBkYXRlX3RpbWVzbG90cyAoJmNpLT5wb3J0W2NoLT5jaGFubnVtIC8gTVVTWUNDX05DSEFOU10pOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNoLT5wID0gKnA7ICAgICAgICAgICAgIC8qIGNvcHkgaW4gbmV3IHBhcmFtZXRlcnMgKi8KLSAgICAgICAgaWYgKChuID0gbXVzeWNjX2NoYW5fdXAgKGNpLCBjaGFubnVtKSkpCi0gICAgICAgICAgICByZXR1cm4gbjsKLSAgICAgICAgc2RfZW5hYmxlX3htaXQgKGNoLT51c2VyKTsgIC8qIHJlLWVuYWJsZSB0byBjYXRjaCBmbG93IGNvbnRyb2xsZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGNoYW5uZWwgKi8KLSAgICB9IGVsc2UKLSAgICB7Ci0gICAgICAgIGlmIChjaC0+cC5tb2RlXzU2ayAhPSBwLT5tb2RlXzU2aykKLSAgICAgICAgewotICAgICAgICAgICAgY2gtPnAgPSAqcDsgICAgICAgICAgICAgLyogY29weSBpbiBuZXcgcGFyYW1ldGVycyAqLwotICAgICAgICAgICAgbXVzeWNjX3VwZGF0ZV90aW1lc2xvdHMgKCZjaS0+cG9ydFtjaC0+Y2hhbm51bSAvIE1VU1lDQ19OQ0hBTlNdKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjaC0+cCA9ICpwOyAgICAgICAgICAgICAvKiBjb3B5IGluIG5ldyBwYXJhbWV0ZXJzICovCi0gICAgfQotCi0gICAgaWYgKHJvaykKLSAgICAgICAgc2RfbGluZV9pc191cCAoY2gtPnVzZXIpOwotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KLQotaW50Ci1tdXN5Y2NfZ2V0X2NoYW4gKGNpX3QgKiBjaSwgaW50IGNoYW5udW0sIHN0cnVjdCBzYmVjb21fY2hhbl9wYXJhbSAqIHApCi17Ci0gICAgbWNoX3QgICAgICAqY2g7Ci0KLSNpZiAwCi0gICAgaWYgKGNoYW5udW0gPCAwIHx8IGNoYW5udW0gPj0gKE1VU1lDQ19OUE9SVFMgKiBNVVNZQ0NfTkNIQU5TKSkgICAgICAvKiBzYW5pdHkgY2hrIHBhcmFtICovCi0gICAgICAgIHJldHVybiBFQ0hSTkc7Ci0jZW5kaWYKLSAgICBpZiAoIShjaCA9IHNkX2ZpbmRfY2hhbiAoY2ksIGNoYW5udW0pKSkKLSAgICAgICAgcmV0dXJuIEVOT0VOVDsKLSAgICAqcCA9IGNoLT5wOwotICAgIHJldHVybiAwOwotfQotCi0KLWludAotbXVzeWNjX2dldF9jaGFuX3N0YXRzIChjaV90ICogY2ksIGludCBjaGFubnVtLCBzdHJ1Y3Qgc2JlY29tX2NoYW5fc3RhdHMgKiBwKQotewotICAgIG1jaF90ICAgICAgKmNoOwotCi0gICAgaWYgKGNoYW5udW0gPCAwIHx8IGNoYW5udW0gPj0gKE1VU1lDQ19OUE9SVFMgKiBNVVNZQ0NfTkNIQU5TKSkgICAgICAvKiBzYW5pdHkgY2hrIHBhcmFtICovCi0gICAgICAgIHJldHVybiBFQ0hSTkc7Ci0gICAgaWYgKCEoY2ggPSBzZF9maW5kX2NoYW4gKGNpLCBjaGFubnVtKSkpCi0gICAgICAgIHJldHVybiBFTk9FTlQ7Ci0gICAgKnAgPSBjaC0+czsKLSAgICBwLT50eF9wZW5kaW5nID0gYXRvbWljX3JlYWQgKCZjaC0+dHhfcGVuZGluZyk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQotCi0jaWZkZWYgU0JFX1dBTjI1NlQzX0VOQUJMRQotaW50Ci1tdXN5Y2NfY2hhbl9kb3duIChjaV90ICogY2ksIGludCBjaGFubnVtKQotewotICAgIG1jaF90ICAgICAgKmNoOwotICAgIG1waV90ICAgICAgKnBpOwotICAgIGludCAgICAgICAgIGksIGdjaGFuOwotCi0gICAgaWYgKCEoY2ggPSBzZF9maW5kX2NoYW4gKGNpLCBjaGFubnVtKSkpCi0gICAgICAgIHJldHVybiBFSU5WQUw7Ci0gICAgcGkgPSBjaC0+dXA7Ci0gICAgZ2NoYW4gPSBjaC0+Z2NoYW47Ci0KLSAgICAvKiBEZWFjdGl2YXRlIHRoZSBjaGFubmVsICovCi0gICAgbXVzeWNjX3NlcnZfcmVxIChwaSwgU1JfQ0hBTk5FTF9ERUFDVElWQVRFIHwgU1JfUlhfRElSRUNUSU9OIHwgZ2NoYW4pOwotICAgIGNoLT5jaF9zdGFydF9yeCA9IDA7Ci0gICAgbXVzeWNjX3NlcnZfcmVxIChwaSwgU1JfQ0hBTk5FTF9ERUFDVElWQVRFIHwgU1JfVFhfRElSRUNUSU9OIHwgZ2NoYW4pOwotICAgIGNoLT5jaF9zdGFydF90eCA9IDA7Ci0KLSAgICBpZiAoY2gtPnN0YXRlID09IERPV04pCi0gICAgICAgIHJldHVybiAwOwotICAgIGNoLT5zdGF0ZSA9IERPV047Ci0KLSAgICBwaS0+cmVncmFtLT50aHBbZ2NoYW5dID0gMDsKLSAgICBwaS0+cmVncmFtLT50bXBbZ2NoYW5dID0gMDsKLSAgICBwaS0+cmVncmFtLT5yaHBbZ2NoYW5dID0gMDsKLSAgICBwaS0+cmVncmFtLT5ybXBbZ2NoYW5dID0gMDsKLSAgICBGTFVTSF9NRU1fV1JJVEUgKCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IGNoLT50eGRfbnVtOyBpKyspCi0gICAgewotICAgICAgICBpZiAoY2gtPm1kdFtpXS5tZW1fdG9rZW4gIT0gMCkKLSAgICAgICAgICAgIE9TX21lbV90b2tlbl9mcmVlIChjaC0+bWR0W2ldLm1lbV90b2tlbik7Ci0gICAgfQotCi0gICAgZm9yIChpID0gMDsgaSA8IGNoLT5yeGRfbnVtOyBpKyspCi0gICAgewotICAgICAgICBpZiAoY2gtPm1kcltpXS5tZW1fdG9rZW4gIT0gMCkKLSAgICAgICAgICAgIE9TX21lbV90b2tlbl9mcmVlIChjaC0+bWRyW2ldLm1lbV90b2tlbik7Ci0gICAgfQotCi0gICAgT1Nfa2ZyZWUgKGNoLT5tZHQpOwotICAgIGNoLT5tZHQgPSAwOwotICAgIE9TX2tmcmVlIChjaC0+bWRyKTsKLSAgICBjaC0+bWRyID0gMDsKLQotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KIC8qKiogRW5kLW9mLUZpbGUgKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9wbWM5M3g2X2VlcHJvbS5jIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9wbWM5M3g2X2VlcHJvbS5jCmluZGV4IDFjOGRmYjguLjYyYjEyZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvcG1jOTN4Nl9lZXByb20uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL3BtYzkzeDZfZWVwcm9tLmMKQEAgLTUwMCwxMSArNTAwLDcgQEAKICAgICB0aW1lX3QgICAgICBjcmVhdGVUaW1lOwogICAgIGludCAgICAgICAgIGk7CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSAgICBjcmVhdGVUaW1lID0gQ1VSUkVOVF9USU1FOwotI2Vsc2UKICAgICBjcmVhdGVUaW1lID0gZ2V0X3NlY29uZHMgKCk7Ci0jZW5kaWYKIAogICAgIC8qIHVzZSB0ZW1wbGF0ZSBkYXRhICovCiAgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZiAoRkxEX1RZUEUyKTsgKytpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9wbWNjNC5oIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9wbWNjNC5oCmluZGV4IDI2YzFmMGUuLmVmNmFjN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvcG1jYzQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL3BtY2M0LmgKQEAgLTExNywxMiArMTE3LDggQEAKIAogI2luY2x1ZGUgInBtY2M0X3ByaXZhdGUuaCIKIAotI2lmICEoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApKQogY2hhciAgICAgICAqZ2V0X2hkbGNfbmFtZSAoaGRsY19kZXZpY2UgKik7CiAKLSNlbmRpZgotCi0KIC8qCiAgKiBleHRlcm5hbCBpbnRlcmZhY2UKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9wbWNjNF9kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvcG1jYzRfZHJ2LmMKaW5kZXggMzMzY2YyNi4uOWY3MzBlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9wbWNjNF9kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL3BtY2M0X2Rydi5jCkBAIC0xMTksMTIgKzExOSwxMCBAQAogI2RlZmluZSBLRVJOX1dBUk4gS0VSTl9XQVJOSU5HCiAKIC8qIGZvcndhcmQgcmVmZXJlbmNlcyAqLwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSw0MSkKIHN0YXR1c190ICAgIGM0X3drX2NoYW5faW5pdCAobXBpX3QgKiwgbWNoX3QgKik7CiB2b2lkICAgICAgICBjNF93cV9wb3J0X2NsZWFudXAgKG1waV90ICopOwogc3RhdHVzX3QgICAgYzRfd3FfcG9ydF9pbml0IChtcGlfdCAqKTsKIAotI2VuZGlmCiBpbnQgICAgICAgICBjNF9sb29wX3BvcnQgKGNpX3QgKiwgaW50LCB1X2ludDhfdCk7CiBzdGF0dXNfdCAgICBjNF9zZXRfcG9ydCAoY2lfdCAqLCBpbnQpOwogc3RhdHVzX3QgICAgbXVzeWNjX2NoYW5fZG93biAoY2lfdCAqLCBpbnQpOwpAQCAtNTMzLDE0NSArNTMxLDE1IEBACiBTVEFUSUMgdm9pZAogYzRfd2F0Y2hkb2cgKGNpX3QgKiBjaSkKIHsKLSNpZiAwCi0gICAgLy91bnNpZ25lZCBsb25nIGZsYWdzOwotI2VuZGlmCi0KICAgICBpZiAoZHJ2cl9zdGF0ZSAhPSBTQkVfRFJWUl9BVkFJTEFCTEUpCiAgICAgewogICAgICAgICBpZiAobG9nX2xldmVsID49IExPR19NT05JVE9SKQogICAgICAgICAgICAgcHJfaW5mbygiZHJ2ciBub3QgYXZhaWxhYmxlICgleClcbiIsIGRydnJfc3RhdGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotI2lmIDAKLSAgICBTRF9TRU1fVEFLRSAoJmNpLT5zZW1fd2RidXN5LCAiX3dkXyIpOyAgICAvKiBvbmx5IDEgdGhydSBoZXJlLCBwZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBib2FyZCAqLwotI2VuZGlmCi0KICAgICBjaS0+d2Rjb3VudCsrOwogICAgIGNoZWNrUG9ydHMgKGNpKTsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPD0gS0VSTkVMX1ZFUlNJT04oMiw1LDQxKQotICAgIGlmIChjaS0+d2Rfbm90aWZ5KQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXMgdGhlcmUgYSBzdGF0ZSBjaGFuZ2UgdG8gc2VhcmNoIGZvciAqLwotICAgICAgICBpbnQgICAgICAgICBwb3J0LCBnY2hhbjsKLQotICAgICAgICBjaS0+d2Rfbm90aWZ5ID0gMDsgICAgICAgICAgLyogcmVzZXQgbm90aWZpY2F0aW9uICovCi0gICAgICAgIGZvciAoZ2NoYW4gPSAwOyBnY2hhbiA8IE1VU1lDQ19OQ0hBTlM7IGdjaGFuKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAocG9ydCA9IDA7IHBvcnQgPCBjaS0+bWF4X3BvcnQ7IHBvcnQrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtY2hfdCAgICAgICpjaCA9IGNpLT5wb3J0W3BvcnRdLmNoYW5bZ2NoYW5dOwotCi0gICAgICAgICAgICAgICAgaWYgKCFjaCB8fCBjaS0+c3RhdGUgIT0gQ19SVU5OSU5HKSAgICAgIC8qIHN0YXRlIGNoYW5nZWQgd2hpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYWNxdWlyaW5nIHNlbWFwaG9yZSAqLwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAoY2gtPnN0YXRlID09IFVQKS8qIGNoYW5uZWwgbXVzdCBiZSBzZXQgdXAgKi8KLSAgICAgICAgICAgICAgICB7Ci0jaWYgMAotI2lmZGVmIFJMRF9UUkFOU19ERUJVRwotICAgICAgICAgICAgICAgICAgICBpZiAoMSB8fCBsb2dfbGV2ZWwgPj0gTE9HX01PTklUT1IpCi0jZWxzZQotICAgICAgICAgICAgICAgICAgICBpZiAobG9nX2xldmVsID49IExPR19NT05JVE9SKQotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICBwcl9pbmZvKCIlczogd2F0Y2hkb2cgcmV2aXZpbmcgUG9ydCAlZCBDaGFubmVsICVkIFslZF0gc3RzICV4LyV4LCBzdGFydF9UWCAleCBmcmVlICV4IHN0YXJ0X1JYICV4XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNpLT5kZXZuYW1lLCBjaC0+Y2hhbm51bSwgcG9ydCwgZ2NoYW4sIGNoLT5jaGFubnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaC0+cC5zdGF0dXMsIGNoLT5zdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2gtPmNoX3N0YXJ0X3R4LCBjaC0+dHhkX2ZyZWUsIGNoLT5jaF9zdGFydF9yeCk7Ci0jZW5kaWYKLQotICAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgICAgICAgICAgICAgICAgLyoqIGNoZWNrIGZvciBSWCByZXN0YXJ0IHJlcXVlc3QgKiovCi0gICAgICAgICAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChjaC0+Y2hfc3RhcnRfcnggJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIChjaC0+c3RhdHVzICYgUlhfRU5BQkxFRCkpICAgICAgLyogcmVxdWlyZXMgc3RhcnQgb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZW5hYmxlZCBSWCAqLwotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaC0+Y2hfc3RhcnRfcnggPSAwOyAgICAvKiB3ZSBhcmUgcmVzdGFydGluZyBSWC4uLiAqLwotI2lmZGVmIFJMRF9UUkFOU19ERUJVRwotICAgICAgICAgICAgICAgICAgICAgICAgcHJfaW5mbygiKysgYzRfd2F0Y2hkb2coKSBDSEFOIFJYIEFDVElWQVRFOiBjaGFuICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaC0+Y2hhbm51bSk7Ci0jZW5kaWYKLSNpZmRlZiBSTERfUlhBQ1RfREVCVUcKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWRlc2MgKm1kOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBpbnQgIGhlcmViNCA9IDc7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVyZWI0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVyZWI0LS07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kID0gJmNoLT5tZHJbY2gtPnJ4aXhfaXJxX3Nydl07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByX2luZm8oIisrIGM0X3dhdGNoZG9nWyVkXSBDSEFOIFJYIEFDVElWQVRFOiByeGl4X2lycV9zcnYgJWQsIG1kICVwIHN0cyAleCwgcnhwa3QgJWx1XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoLT5jaGFubnVtLCBjaC0+cnhpeF9pcnFfc3J2LCBtZCwgbGUzMl90b19jcHUgKG1kLT5zdGF0dXMpLCBjaC0+cy5yeF9wYWNrZXRzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVzeWNjX2R1bXBfcnhidWZmZXJfcmluZyAoY2gsIDEpOyAgICAgIC8qIFJMRCBERUJVRyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgbXVzeWNjX3NlcnZfcmVxIChjaC0+dXAsIFNSX0NIQU5ORUxfQUNUSVZBVEUgfCBTUl9SWF9ESVJFQ1RJT04gfCBnY2hhbik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAgICAgICAgICAgICAgIC8qKiBjaGVjayBmb3IgVFggcmVzdGFydCByZXF1ZXN0ICoqLwotICAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotICAgICAgICAgICAgICAgICAgICBpZiAoY2gtPmNoX3N0YXJ0X3R4ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAoY2gtPnN0YXR1cyAmIFRYX0VOQUJMRUQpKSAgICAgIC8qIHJlcXVpcmVzIHN0YXJ0IG9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGVuYWJsZWQgVFggKi8KLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1kZXNjICptZDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIGZpbmQgbmV4dCB1bnByb2Nlc3NlZCBtZXNzYWdlLCB0aGVuIHNldCBUWCB0aHAgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAqIGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIG11c3ljY191cGRhdGVfdHhfdGhwIChjaCk7Ci0KLSNpZiAwCi0gICAgICAgICAgICAgICAgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSAoJmNoLT5jaF90eGxvY2ssIGZsYWdzKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgbWQgPSBjaC0+dHhkX2lycV9zcnY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1kKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByX2luZm8oIi0tIGM0X3dhdGNoZG9nWyVkXTogV0FSTklORywgc3RhcnRpbmcgTlVMTCBtZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoLT5jaGFubnVtKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcl9pbmZvKCItLSAgIGNoYW4gJWQgdHhkX2lycV9zcnYgJXAgc3RzICV4IHVzcl9hZGQgJXAgc3RzICV4LCB0eHBrdCAlbHVcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaC0+Y2hhbm51bSwgY2gtPnR4ZF9pcnFfc3J2LCBsZTMyX3RvX2NwdSAoKHN0cnVjdCBtZGVzYyAqKSAoY2gtPnR4ZF9pcnFfc3J2KS0+c3RhdHVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoLT50eGRfdXNyX2FkZCwgbGUzMl90b19jcHUgKChzdHJ1Y3QgbWRlc2MgKikgKGNoLT50eGRfdXNyX2FkZCktPnN0YXR1cyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaC0+cy50eF9wYWNrZXRzKTsKLSNpZiAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmNoLT5jaF90eGxvY2ssIGZsYWdzKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtZC0+ZGF0YSAmJiAoKGxlMzJfdG9fY3B1IChtZC0+c3RhdHVzKSkgJiBNVVNZQ0NfVFhfT1dORUQpKQotICAgICAgICAgICAgICAgICAgICAgICAgewotI2lmZGVmIFJMRF9UUkFOU19ERUJVRwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByX2luZm8oIisrIGM0X3dhdGNoZG9nWyVkXSBDSEFOIFRYIEFDVElWQVRFOiBzdGFydF90eCAleFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoLT5jaGFubnVtLCBjaC0+Y2hfc3RhcnRfdHgpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2gtPmNoX3N0YXJ0X3R4ID0gMDsgICAgICAgIC8qIHdlIGFyZSByZXN0YXJ0aW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFRYLi4uICovCi0jaWYgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZjaC0+Y2hfdHhsb2NrLCBmbGFncyk7ICAgLyogYWxsb3cgaW50ZXJydXB0cyBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNlcnZpY2UgcmVxdWVzdCAqLwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVzeWNjX3NlcnZfcmVxIChjaC0+dXAsIFNSX0NIQU5ORUxfQUNUSVZBVEUgfCBTUl9UWF9ESVJFQ1RJT04gfCBnY2hhbik7Ci0jaWZkZWYgUkxEX1RSQU5TX0RFQlVHCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDEgfHwgbG9nX2xldmVsID49IExPR19NT05JVE9SKQotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9nX2xldmVsID49IExPR19NT05JVE9SKQotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByX2luZm8oIisrIFNBQ0tbUCVkL0MlZF0gYWNrJ2QsIGNvbnRpbnVpbmcuLi5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2gtPnVwLT5wb3J0bnVtLCBjaC0+Y2hhbm51bSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZQogICAgIGNpLT53ZF9ub3RpZnkgPSAwOwotI2VuZGlmCi0jaWYgMAotICAgIFNEX1NFTV9HSVZFICgmY2ktPnNlbV93ZGJ1c3kpOy8qIHJlbGVhc2UgcGVyLWJvYXJkIGhvbGQgKi8KLSNlbmRpZgogfQogCiAKQEAgLTY5MCw5ICs1NTgsNyBAQAogICAgICAgICBmb3IgKHBvcnRudW0gPSAwOyBwb3J0bnVtIDwgY2ktPm1heF9wb3J0OyBwb3J0bnVtKyspCiAgICAgICAgIHsKICAgICAgICAgICAgIHBpID0gJmNpLT5wb3J0W3BvcnRudW1dOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSw0MSkKICAgICAgICAgICAgIGM0X3dxX3BvcnRfY2xlYW51cCAocGkpOwotI2VuZGlmCiAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgTVVTWUNDX05DSEFOUzsgaisrKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmIChwaS0+Y2hhbltqXSkKQEAgLTcwMCwxMCArNTY2LDYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIE9TX2tmcmVlIChwaS0+cmVncmFtX3NhdmVkKTsKICAgICAgICAgfQotI2lmIDAKLSAgICAgICAgLyogb2Jzb2xldGUgLSB3YXRjaGRvZyBpcyBub3cgc3RhdGljIHcvaW4gY2lfdCAqLwotICAgICAgICBPU19mcmVlX3dhdGNoZG9nIChjaS0+d2QpOwotI2VuZGlmCiAgICAgICAgIE9TX2tmcmVlIChjaS0+aXFkX3Bfc2F2ZWQpOwogICAgICAgICBPU19rZnJlZSAoY2kpOwogICAgICAgICBjaSA9IG5leHQ7ICAgICAgICAgICAgICAgICAgLyogY2xlYW51cCBuZXh0IGJvYXJkLCBpZiBhbnkgKi8KQEAgLTExNDUsNyArMTAwNyw2IEBACiAgICAgICAgIHJldHVybiBFQlVTWTsgICAgICAgICAgICAgICAvKiBncm91cCBuZWVkcyBpbml0aWFsaXphdGlvbiBvbmx5IGZvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZmlyc3QgY2hhbm5lbCBvZiBhIGdyb3VwICovCiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsNDEpCiAgICAgewogICAgICAgICBzdGF0dXNfdCAgICByZXQ7CiAKQEAgLTExNTMsNyArMTAxNCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB3b3JrcXVldWVfc3RydWN0ICovCiAgICAgICAgICAgICByZXR1cm4gKHJldCk7CiAgICAgfQotI2VuZGlmCiAKICAgICBpbml0X2NvbWV0IChjaSwgcGktPmNvbWV0YmFzZSwgcHAtPnBvcnRfbW9kZSwgMSAvKiBjbG9ja21hc3RlciA9PSB0cnVlICovICwgcHAtPnBvcnRQKTsKICAgICBjbGNrID0gcGNpX3JlYWRfMzIgKCh1X2ludDMyX3QgKikgJmNpLT5jcGxkYmFzZS0+bWNsaykgJiBQTUNDNF9DUExEX01DTEtfTUFTSzsKQEAgLTEyNjksMTQgKzExMjksMTIgQEAKICAgICBzcGluX2xvY2tfaW5pdCAoJmNoLT5jaF9yeGxvY2spOwogICAgIHNwaW5fbG9ja19pbml0ICgmY2gtPmNoX3R4bG9jayk7CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsNDEpCiAgICAgewogICAgICAgICBzdGF0dXNfdCAgICByZXQ7CiAKICAgICAgICAgaWYgKChyZXQgPSBjNF93a19jaGFuX2luaXQgKHBpLCBjaCkpKQogICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICB9Ci0jZW5kaWYKIAogICAgIC8qIHNhdmUgb2ZmIGludGVyZmFjZSBhc3NpZ25tZW50cyB3aGljaCBib3VuZCBhIGJvYXJkICovCiAgICAgaWYgKGNpLT5maXJzdF9pZiA9PSAwKSAgICAgICAgICAvKiBmaXJzdCBjaGFubmVsIHJlZ2lzdGVyZWQgaXMgYXNzdW1lZCB0bwpAQCAtMTcwNSwzMSArMTU2MywyMyBAQAogCiAgICAgaWYgKGNpLT5maXJzdF9pZikKICAgICB7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0gICAgICAgIG5wID0gKGNoYXIgKikgaGRsY190b19uYW1lIChjaS0+Zmlyc3RfaWYpOwotI2Vsc2UKICAgICAgICAgewogICAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAogICAgICAgICAgICAgZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGNpLT5maXJzdF9pZjsKICAgICAgICAgICAgIG5wID0gKGNoYXIgKikgZGV2LT5uYW1lOwogICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAgc3RybmNweSAoYmlwLT5maXJzdF9pbmFtZSwgbnAsIENITk1fU1RSTEVOIC0gMSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHN0cmNweSAoYmlwLT5maXJzdF9pbmFtZSwgIjxOVUxMPiIpOwogICAgIGlmIChjaS0+bGFzdF9pZikKICAgICB7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0gICAgICAgIG5wID0gKGNoYXIgKikgaGRsY190b19uYW1lIChjaS0+bGFzdF9pZik7Ci0jZWxzZQogICAgICAgICB7CiAgICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCiAgICAgICAgICAgICBkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgY2ktPmxhc3RfaWY7CiAgICAgICAgICAgICBucCA9IChjaGFyICopIGRldi0+bmFtZTsKICAgICAgICAgfQotI2VuZGlmCiAgICAgICAgIHN0cm5jcHkgKGJpcC0+bGFzdF9pbmFtZSwgbnAsIENITk1fU1RSTEVOIC0gMSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHN0cmNweSAoYmlwLT5sYXN0X2luYW1lLCAiPE5VTEw+Iik7CkBAIC0xNzYzLDExICsxNjEzLDcgQEAKICAgICBpZiAoIShkZXYgPSBnZXR1c2VyYnljaGFuIChpaXAtPmNoYW5udW0pKSkKICAgICAgICAgcmV0dXJuIEVOT0VOVDsKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotICAgIG5wID0gKGNoYXIgKikgaGRsY190b19uYW1lIChkZXZfdG9faGRsYyAoZGV2KSk7Ci0jZWxzZQogICAgIG5wID0gZGV2LT5uYW1lOwotI2VuZGlmCiAgICAgc3RybmNweSAoaWlwLT5pbmFtZSwgbnAsIENITk1fU1RSTEVOIC0gMSk7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0xODI2LDExICsxNjcyLDcgQEAKICAgICBwY2lfd3JpdGVfMzIgKCh1X2ludDMyX3QgKikgJmNpLT5yZWctPmdsY2QsIEdDRF9NQUdJQyB8IE1VU1lDQ19HQ0RfSU5UQl9ESVNBQkxFKTsKICNlbmRpZgogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9IEtFUk5FTF9WRVJTSU9OKDIsNCwyMCkKLSAgICByZXR1cm47Ci0jZWxzZQogICAgIHJldHVybiBJUlFfUkVUVkFMIChoYW5kbGVkKTsKLSNlbmRpZgogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvc2JlY29tX2lubGluZV9saW51eC5oIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9zYmVjb21faW5saW5lX2xpbnV4LmgKaW5kZXggYzY1MTcyZC4uNWE3MmNiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9zYmVjb21faW5saW5lX2xpbnV4LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9zYmVjb21faW5saW5lX2xpbnV4LmgKQEAgLTQ4LDkgKzQ4LDYgQEAKICNlbHNlCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDE4KQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiAhIGRlZmluZWQoX19TTVBfXykKICNkZWZpbmUgX19TTVBfXwogI2VuZGlmCkBAIC02MCwxMiArNTcsOCBAQAogCiAjaWZkZWYgTU9EVUxFCiAjaWZkZWYgTU9EVkVSU0lPTlMKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSNpbmNsdWRlIDxsaW51eC9tb2R2ZXJzaW9ucy5oPgotI2Vsc2UKICNpbmNsdWRlIDxjb25maWcvbW9kdmVyc2lvbnMuaD4KICNlbmRpZgotI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjZW5kaWYKICNlbmRpZgpAQCAtMjYwLDExICsyNTMsNyBAQAogc3RydWN0IHdhdGNoZG9nCiB7CiAgICAgc3RydWN0IHRpbWVyX2xpc3QgaDsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSAgICBzdHJ1Y3QgdHFfc3RydWN0IHRxOwotI2Vsc2UKICAgICBzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKLSNlbmRpZgogICAgIHZvaWQgICAgICAgKnNvZnRjOwogICAgIHZvaWQgICAgICAgICgqZnVuYykgKHZvaWQgKnNvZnRjKTsKICAgICBpbnQgICAgICAgICB0aWNrczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9jYW1lcmEvbXNtX3ZmZTh4LmMgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vY2FtZXJhL21zbV92ZmU4eC5jCmluZGV4IGU2MWZkYmEuLmQ4N2Q1NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9jYW1lcmEvbXNtX3ZmZTh4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2NhbWVyYS9tc21fdmZlOHguYwpAQCAtNjQ0LDE3ICs2NDQsMTAgQEAKIAkJaWYgKCFheGlkKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJYXhpbyA9Ci0JCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdmZlX2NtZF9heGlfb3V0cHV0X2NvbmZpZyksCi0JCQkJR0ZQX0FUT01JQyk7Ci0JCWlmICghYXhpbykKLQkJCXJldHVybiAtRU5PTUVNOwotCi0JCWlmIChjb3B5X2Zyb21fdXNlcihheGlvLCAodm9pZCBfX3VzZXIgKikodmZlY21kLnZhbHVlKSwKLQkJCXNpemVvZihzdHJ1Y3QgdmZlX2NtZF9heGlfb3V0cHV0X2NvbmZpZykpKSB7Ci0JCQlrZnJlZShheGlvKTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9CisJCWF4aW8gPSBtZW1kdXBfdXNlcigodm9pZCBfX3VzZXIgKikodmZlY21kLnZhbHVlKSwKKwkJCQkgICBzaXplb2Yoc3RydWN0IHZmZV9jbWRfYXhpX291dHB1dF9jb25maWcpKTsKKwkJaWYgKElTX0VSUihheGlvKSkKKwkJCXJldHVybiBQVFJfRVJSKGF4aW8pOwogCiAJCXZmZV9jb25maWdfYXhpKE9VVFBVVF8xLCBheGlkLCBheGlvKTsKIAkJdmZlX2F4aV9vdXRwdXRfY29uZmlnKGF4aW8pOwpAQCAtNjY5LDE3ICs2NjIsMTAgQEAKIAkJaWYgKCFheGlkKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJYXhpbyA9Ci0JCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdmZlX2NtZF9heGlfb3V0cHV0X2NvbmZpZyksCi0JCQkJR0ZQX0FUT01JQyk7Ci0JCWlmICghYXhpbykKLQkJCXJldHVybiAtRU5PTUVNOwotCi0JCWlmIChjb3B5X2Zyb21fdXNlcihheGlvLCAodm9pZCBfX3VzZXIgKikodmZlY21kLnZhbHVlKSwKLQkJCQlzaXplb2Yoc3RydWN0IHZmZV9jbWRfYXhpX291dHB1dF9jb25maWcpKSkgewotCQkJa2ZyZWUoYXhpbyk7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQorCQlheGlvID0gbWVtZHVwX3VzZXIoKHZvaWQgX191c2VyICopKHZmZWNtZC52YWx1ZSksCisJCQkJICAgc2l6ZW9mKHN0cnVjdCB2ZmVfY21kX2F4aV9vdXRwdXRfY29uZmlnKSk7CisJCWlmIChJU19FUlIoYXhpbykpCisJCQlyZXR1cm4gUFRSX0VSUihheGlvKTsKIAogCQl2ZmVfY29uZmlnX2F4aShPVVRQVVRfMiwgYXhpZCwgYXhpbyk7CiAKQEAgLTY5NCwxNyArNjgwLDEwIEBACiAJCWlmICghYXhpZCkKIAkJCXJldHVybiAtRUZBVUxUOwogCi0JCWF4aW8gPQotCQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IHZmZV9jbWRfYXhpX291dHB1dF9jb25maWcpLAotCQkJCUdGUF9BVE9NSUMpOwotCQlpZiAoIWF4aW8pCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQlpZiAoY29weV9mcm9tX3VzZXIoYXhpbywgKHZvaWQgX191c2VyICopKHZmZWNtZC52YWx1ZSksCi0JCQlzaXplb2Yoc3RydWN0IHZmZV9jbWRfYXhpX291dHB1dF9jb25maWcpKSkgewotCQkJa2ZyZWUoYXhpbyk7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQorCQlheGlvID0gbWVtZHVwX3VzZXIoKHZvaWQgX191c2VyICopKHZmZWNtZC52YWx1ZSksCisJCQkJICAgc2l6ZW9mKHN0cnVjdCB2ZmVfY21kX2F4aV9vdXRwdXRfY29uZmlnKSk7CisJCWlmIChJU19FUlIoYXhpbykpCisJCQlyZXR1cm4gUFRSX0VSUihheGlvKTsKIAogCQl2ZmVfY29uZmlnX2F4aShPVVRQVVRfMV9BTkRfMiwKIAkJCWF4aWQsIGF4aW8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL3BtZW0uYyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9wbWVtLmMKaW5kZXggNjM4NzM2NS4uN2Q2YmJhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL3BtZW0uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vcG1lbS5jCkBAIC0yNCw4ICsyNCw4IEBACiAjaW5jbHVkZSA8bGludXgvbWVtcG9saWN5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogCiAjZGVmaW5lIFBNRU1fTUFYX0RFVklDRVMgMTAKQEAgLTE3NSw3ICsxNzUsNyBAQAogc3RhdGljIGludCBwbWVtX29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwogc3RhdGljIGxvbmcgcG1lbV9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwogCi1zdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBtZW1fZm9wcyA9IHsKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcG1lbV9mb3BzID0gewogCS5yZWxlYXNlID0gcG1lbV9yZWxlYXNlLAogCS5tbWFwID0gcG1lbV9tbWFwLAogCS5vcGVuID0gcG1lbV9vcGVuLApAQCAtMjA5LDcgKzIwOSw3IEBACiAKIAlpZiAodW5saWtlbHkoIWZpbGUtPnByaXZhdGVfZGF0YSkpCiAJCXJldHVybiAwOwotCWRhdGEgPSAoc3RydWN0IHBtZW1fZGF0YSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlkYXRhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWlmICh1bmxpa2VseShkYXRhLT5pbmRleCA8IDApKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gMTsKQEAgLTIyMyw3ICsyMjMsNyBAQAogCiAJaWYgKCFpc19wbWVtX2ZpbGUoZmlsZSkgfHwgIWhhc19hbGxvY2F0aW9uKGZpbGUpKQogCQlyZXR1cm4gMDsKLQlkYXRhID0gKHN0cnVjdCBwbWVtX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpZiAoUE1FTV9GTEFHU19NQVNURVJNQVAgJiBkYXRhLT5mbGFncykKIAkJcmV0dXJuIDE7CiAJbWFzdGVyX2ZpbGUgPSBmZ2V0X2xpZ2h0KGRhdGEtPm1hc3Rlcl9mZCwgJnB1dF9uZWVkZWQpOwpAQCAtMjY4LDcgKzI2OCw3IEBACiAKIHN0YXRpYyBpbnQgcG1lbV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBwbWVtX2RhdGEgKmRhdGEgPSAoc3RydWN0IHBtZW1fZGF0YSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcG1lbV9kYXRhICpkYXRhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBwbWVtX3JlZ2lvbl9ub2RlICpyZWdpb25fbm9kZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbHQsICplbHQyOwogCWludCBpZCA9IGdldF9pZChmaWxlKSwgcmV0ID0gMDsKQEAgLTM5OSw4ICszOTksOCBAQAogCURMT0coIm9yZGVyICVseFxuIiwgb3JkZXIpOwogCiAJLyogbG9vayB0aHJvdWdoIHRoZSBiaXRtYXA6Ci0JICogCWlmIHlvdSBmaW5kIGEgZnJlZSBzbG90IG9mIHRoZSBjb3JyZWN0IG9yZGVyIHVzZSBpdAotCSAqIAlvdGhlcndpc2UsIHVzZSB0aGUgYmVzdCBmaXQgKHNtYWxsZXN0IHdpdGggc2l6ZSA+IG9yZGVyKSBzbG90CisJICoJaWYgeW91IGZpbmQgYSBmcmVlIHNsb3Qgb2YgdGhlIGNvcnJlY3Qgb3JkZXIgdXNlIGl0CisJICoJb3RoZXJ3aXNlLCB1c2UgdGhlIGJlc3QgZml0IChzbWFsbGVzdCB3aXRoIHNpemUgPiBvcmRlcikgc2xvdAogCSAqLwogCXdoaWxlIChjdXJyIDwgZW5kKSB7CiAJCWlmIChQTUVNX0lTX0ZSRUUoaWQsIGN1cnIpKSB7CkBAIC00MjYsOCArNDI2LDggQEAKIAl9CiAKIAkvKiBub3cgcGFydGl0aW9uIHRoZSBiZXN0IGZpdDoKLQkgKiAJc3BsaXQgdGhlIHNsb3QgaW50byAyIGJ1ZGRpZXMgb2Ygb3JkZXIgLSAxCi0JICogCXJlcGVhdCB1bnRpbCB0aGUgc2xvdCBpcyBvZiB0aGUgY29ycmVjdCBvcmRlcgorCSAqCXNwbGl0IHRoZSBzbG90IGludG8gMiBidWRkaWVzIG9mIG9yZGVyIC0gMQorCSAqCXJlcGVhdCB1bnRpbCB0aGUgc2xvdCBpcyBvZiB0aGUgY29ycmVjdCBvcmRlcgogCSAqLwogCXdoaWxlIChQTUVNX09SREVSKGlkLCBiZXN0X2ZpdCkgPiAodW5zaWduZWQgY2hhcilvcmRlcikgewogCQlpbnQgYnVkZHk7CkBAIC01OTEsNyArNTkxLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZGF0YSA9IChzdHJ1Y3QgcG1lbV9kYXRhICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCWRhdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJZG93bl93cml0ZSgmZGF0YS0+c2VtKTsKIAkvKiBjaGVjayB0aGlzIGZpbGUgaXNuJ3QgYWxyZWFkeSBtbWFwZWQsIGZvciBzdWJtYXBzIGNoZWNrIHRoaXMgZmlsZQogCSAqIGhhcyBuZXZlciBiZWVuIG1tYXBlZCAqLwpAQCAtNjkwLDcgKzY5MCw3IEBACiAjZW5kaWYKIAkJcmV0dXJuIC0xOwogCX0KLQlkYXRhID0gKHN0cnVjdCBwbWVtX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlkb3duX3JlYWQoJmRhdGEtPnNlbSk7CiAJaWYgKGRhdGEtPnZtYSkgewogCQkqc3RhcnQgPSBkYXRhLT52bWEtPnZtX3N0YXJ0OwpAQCAtNzEyLDcgKzcxMiw3IEBACiAJaWYgKCFpc19wbWVtX2ZpbGUoZmlsZSkgfHwgIWhhc19hbGxvY2F0aW9uKGZpbGUpKQogCQlyZXR1cm4gLTE7CiAKLQlkYXRhID0gKHN0cnVjdCBwbWVtX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpZiAoZGF0YS0+aW5kZXggPT0gLTEpIHsKICNpZiBQTUVNX0RFQlVHCiAJCXByaW50ayhLRVJOX0lORk8gInBtZW06IHJlcXVlc3RlZCBwbWVtIGRhdGEgZnJvbSBmaWxlIHdpdGggbm8gIgpAQCAtNzY2LDcgKzc2Niw3IEBACiAJaWYgKCFpc19wbWVtX2ZpbGUoZmlsZSkpCiAJCXJldHVybjsKIAlpZCA9IGdldF9pZChmaWxlKTsKLQlkYXRhID0gKHN0cnVjdCBwbWVtX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKICNpZiBQTUVNX0RFQlVHCiAJZG93bl93cml0ZSgmZGF0YS0+c2VtKTsKIAlpZiAoZGF0YS0+cmVmID09IDApIHsKQEAgLTc5Myw3ICs3OTMsNyBAQAogCQlyZXR1cm47CiAKIAlpZCA9IGdldF9pZChmaWxlKTsKLQlkYXRhID0gKHN0cnVjdCBwbWVtX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpZiAoIXBtZW1baWRdLmNhY2hlZCkKIAkJcmV0dXJuOwogCkBAIC04MjIsNyArODIyLDcgQEAKIAogc3RhdGljIGludCBwbWVtX2Nvbm5lY3QodW5zaWduZWQgbG9uZyBjb25uZWN0LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgcG1lbV9kYXRhICpkYXRhID0gKHN0cnVjdCBwbWVtX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHBtZW1fZGF0YSAqZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgcG1lbV9kYXRhICpzcmNfZGF0YTsKIAlzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGU7CiAJaW50IHJldCA9IDAsIHB1dF9uZWVkZWQ7CkBAIC04NDIsNyArODQyLDcgQEAKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfYmFkX2ZpbGU7CiAJfQotCXNyY19kYXRhID0gKHN0cnVjdCBwbWVtX2RhdGEgKilzcmNfZmlsZS0+cHJpdmF0ZV9kYXRhOworCXNyY19kYXRhID0gc3JjX2ZpbGUtPnByaXZhdGVfZGF0YTsKIAogCWlmIChoYXNfYWxsb2NhdGlvbihmaWxlKSAmJiAoZGF0YS0+aW5kZXggIT0gc3JjX2RhdGEtPmluZGV4KSkgewogCQlwcmludGsoS0VSTl9JTkZPICJwbWVtOiBmaWxlIGlzIGFscmVhZHkgbWFwcGVkIGJ1dCBkb2Vzbid0ICIKQEAgLTkyOSw3ICs5MjksNyBAQAogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gTlVMTDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbHQsICplbHQyOwogCWludCBpZCA9IGdldF9pZChmaWxlKTsKLQlzdHJ1Y3QgcG1lbV9kYXRhICpkYXRhID0gKHN0cnVjdCBwbWVtX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHBtZW1fZGF0YSAqZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAogCS8qIHBtZW0gcmVnaW9uIG11c3QgYmUgYWxpZ25lZCBvbiBhIHBhZ2UgYm91bmRyeSAqLwogCWlmICh1bmxpa2VseSghUE1FTV9JU19QQUdFX0FMSUdORUQocmVnaW9uLT5vZmZzZXQpIHx8CkBAIC0xMDUzLDcgKzEwNTMsNyBAQAogCiBzdGF0aWMgdm9pZCBwbWVtX2dldF9zaXplKHN0cnVjdCBwbWVtX3JlZ2lvbiAqcmVnaW9uLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgcG1lbV9kYXRhICpkYXRhID0gKHN0cnVjdCBwbWVtX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHBtZW1fZGF0YSAqZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpbnQgaWQgPSBnZXRfaWQoZmlsZSk7CiAKIAlpZiAoIWhhc19hbGxvY2F0aW9uKGZpbGUpKSB7CkBAIC0xMDgyLDcgKzEwODIsNyBAQAogCQkJCXJlZ2lvbi5vZmZzZXQgPSAwOwogCQkJCXJlZ2lvbi5sZW4gPSAwOwogCQkJfSBlbHNlIHsKLQkJCQlkYXRhID0gKHN0cnVjdCBwbWVtX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJCQkJZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAkJCQlyZWdpb24ub2Zmc2V0ID0gcG1lbV9zdGFydF9hZGRyKGlkLCBkYXRhKTsKIAkJCQlyZWdpb24ubGVuID0gcG1lbV9sZW4oaWQsIGRhdGEpOwogCQkJfQpAQCAtMTA5OSw3ICsxMDk5LDcgQEAKIAkJCWlmIChjb3B5X2Zyb21fdXNlcigmcmVnaW9uLCAodm9pZCBfX3VzZXIgKilhcmcsCiAJCQkJCQlzaXplb2Yoc3RydWN0IHBtZW1fcmVnaW9uKSkpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlkYXRhID0gKHN0cnVjdCBwbWVtX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJCQlkYXRhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCQkJcmV0dXJuIHBtZW1fcmVtYXAoJnJlZ2lvbiwgZmlsZSwgUE1FTV9NQVApOwogCQl9CiAJCWJyZWFrOwpAQCAtMTEwOSw3ICsxMTA5LDcgQEAKIAkJCWlmIChjb3B5X2Zyb21fdXNlcigmcmVnaW9uLCAodm9pZCBfX3VzZXIgKilhcmcsCiAJCQkJCQlzaXplb2Yoc3RydWN0IHBtZW1fcmVnaW9uKSkpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlkYXRhID0gKHN0cnVjdCBwbWVtX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJCQlkYXRhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCQkJcmV0dXJuIHBtZW1fcmVtYXAoJnJlZ2lvbiwgZmlsZSwgUE1FTV9VTk1BUCk7CiAJCQlicmVhazsKIAkJfQpAQCAtMTEzOSw3ICsxMTM5LDcgQEAKIAkJewogCQkJaWYgKGhhc19hbGxvY2F0aW9uKGZpbGUpKQogCQkJCXJldHVybiAtRUlOVkFMOwotCQkJZGF0YSA9IChzdHJ1Y3QgcG1lbV9kYXRhICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCQkJZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAkJCWRhdGEtPmluZGV4ID0gcG1lbV9hbGxvY2F0ZShpZCwgYXJnKTsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMzI5M2MuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1jb25maWcgRFQzMTU1Ci0JdHJpc3RhdGUgIkRUMzE1NSBEaWdpdGl6ZXIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBDSQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM2ZjIxZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1vYmotJChDT05GSUdfRFQzMTU1KQkrPSBkdDMxNTUubwotZHQzMTU1LW9ianMgOj0JXAotCQlkdDMxNTVfZHJ2Lm8JXAotCQlkdDMxNTVfaXNyLm8JXAotCQlkdDMxNTVfaW8ubwlcCi0JCWFsbG9jYXRvci5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L1RPRE8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiYWEzYjYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9UT0RPCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotVE9ETzoKLQktIGZpeCBjaGVja3BhdGNoLnBsIGlzc3VlcwotCS0gcmVtb3ZlIG9sZCBrZXJuZWwgc3VwcG9ydCwgaXQgaXMgbm90IG5lZWRlZAotCS0gY29udmVydCB0byBwcm9wZXIgUENJIGRldmljZSBBUEkKLQktIGZpeCBzcGFyc2Ugd2FybmluZ3MKLQktIGF1ZGl0IGZvciBjb3JyZWN0IHN1YnN5c3RlbSBpbnRlcmFjdGlvbgotCS0gcmV2aWV3IHJldmlldyByZXZpZXchCi0KLVBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KLWFuZCBTY290dCBTbWVkbGV5IDxzc0BhYW8uZ292LmF1PgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9hbGxvY2F0b3IuUkVBRE1FIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9hbGxvY2F0b3IuUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTcwMGI2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvYWxsb2NhdG9yLlJFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLQotVGhlIGFsbG9jYXRvciBzaG93biBoZXJlICBleHBsb2l0cyBoaWdoIG1lbW9yeS4gVGhpcyBkb2N1bWVudCBleHBsYWlucwotaG93ICBhIHVzZXIgY2FuICBkZWFsICAgd2l0aCBkcml2ZXJzIHVzZXMgICB0aGlzICBhbGxvY2F0b3IgYW5kIGhvdyAgYQotcHJvZ3JhbW1lciBjYW4gbGluayBpbiB0aGUgbW9kdWxlLgotCi1UaGUgbW9kdWxlIGlzIGJlaW5nIHVzZWQgYnkgbXkgcHhjIGFuZCBweGRydiBkZXZpY2UgZHJpdmVycyAoYXMgd2VsbCBhcwotb3RoZXIgb25lcyksIGF2YWlsYWJsZSBmcm9tIGZ0cC5zeXN0ZW15Lml0L3B1Yi9kZXZlbG9wIGFuZAotZnRwLmxpbnV4Lml0L3B1Yi9QZW9wbGUvUnViaW5pCi0KLQlVc2VyJ3MgbWFudWFsCi0JPT09PT09PT09PT09PQotCi0KLU9uZSBvZiB0aGUgbW9zdCBjb21wZWxsaW5nIHByb2JsZW1zIHdpdGggYW55IERNQS1jYXBhYmxlIGRldmljZSBpcyB0aGUKLWFsbG9jYXRpb24gIG9mIGEgc3VpdGFibGUgIG1lbW9yeSBidWZmZXIuIFRoZSAiYWxsb2NhdG9yIiBtb2R1bGUgdHJpZXMKLXRvIGRlYWwgd2l0aCAgdGhlIHByb2JsZW0gaW4gIGEgY2xlYW4gd2F5LiAgVGhlIG1vZHVsZSBpcyAgYWJsZSB0byB1c2UKLWhpZ2ggICBtZW1vcnkgIChhYm92ZSB0aGUgIG9uZSAgIHVzZWQgaW4gIG5vcm1hbCAgIG9wZXJhdGlvbikgIGZvciBETUEKLWFsbG9jYXRpb24uCi0KLVRvIHByZXZlbnQgIHRoZSAga2VybmVsIGZvciB1c2luZyAgIGhpZ2ggbWVtb3J5LCAgc28gIHRoYXQgaXQgIHJlbWFpbnMKLWF2YWlsYWJsZSBmb3IgIERNQSwgeW91IHNob3VsZCAgcGFzcyBhICBjb21tYW5kICBsaW5lIGFyZ3VtZW50IHRvICB0aGUKLWtlcm5lbC4gIENvbW1hbmQgbGluZSBhcmd1bWVudHMgIGNhbiBiZSBwYXNzZWQgdG8gIExpbG8sIHRvIExvYWRsaW4gb3IKLXRvIHdoaWNoZXZlciBsb2FkZXIgIHlvdSBhcmUgdXNpbmcgICh1bmxlc3MgaXQncyB2ZXJ5IHBvb3IgaW4gZGVzaWduKS4KLUZvciBMaWxvLCBlaXRoZXIgdXNlICAiYXBwZW5kPSIgaW4gIC9ldGMvbGlsby5jb25mIG9yIGFkZCAgY29tbWFuZGxpbmUKLWFyZ3VtZW50cyB0byB0aGUgIGludGVyYWN0aXZlIHByb21wdC4gRm9yICBleGFtcGxlLCBJIGhhdmUgYSAzMk1CICBib3gKLWFuZCByZXNlcnZlIHR3byBtZWdzIGZvciBETUE6Ci0KLUluIGxpbG8uY29uZjoKLQlpbWFnZSA9IC96SW1hZ2UKLQlsYWJlbCA9IGxpbnV4Ci0JYXBwZW5kID0gIm1lbT0zME0iCi0KLU9yLCBpbnRlcmFjdGl2ZWx5OgotCUxJTE86IGxpbnV4IG1lbT0zME0KLQotT25jZSAgdGhlIGtlcm5lbCBpcyBib290ZWQgIHdpdGggdGhlICByaWdodCBjb21tYW5kLWxpbmUgYXJndW1lbnQsIGFueQotZHJpdmVyICBsaW5rZWQgICB3aXRoICB0aGUgIGFsbG9jYXRvciAgIG1vZHVsZSAgd2lsbCAgYmUgYWJsZSAgIHRvIGdldAotRE1BLWNhcGFibGUgbWVtb3J5IHdpdGhvdXQgIG11Y2ggIHRyb3VibGUgKHVubGVzcyB0aGUgIHZhcmlvdXMgZHJpdmVycwotbmVlZCBtb3JlIG1lbW9yeSB0aGFuIGF2YWlsYWJsZSkuCi0KLVRoZSBtb2R1bGUgaW1wbGVtZW50cyBhbiBhbGxvYy9mcmVlICBtZWNoYW5pc20sICBzbyB0aGF0IGl0IGNhbiAgc2VydmUKLW11bHRpcGxlIGRyaXZlcnMgIGF0IHRoZSAgc2FtZSB0aW1lLiBOb3RlICBob3dldmVyIHRoYXQgIHRoZSBhbGxvY2F0b3IKLXVzZXMgYWxsIG9mICBoaWdoIG1lbW9yeSBhbmQgYXNzdW1lcyB0byAgYmUgdGhlIG9ubHkgcGllY2Ugb2Ygc29mdHdhcmUKLXVzaW5nIHN1Y2ggbWVtb3J5LgotCi0KLQlQcm9ncmFtbWVyJ3MgbWFudWFsCi0JPT09PT09PT09PT09PT09PT09PQotCi1UaGUgYWxsb2NhdG9yLCAgYXMgIHJlbGVhc2VkLCBpcyBkZXNpZ25lZCAgdG8gIGJlIGxpbmtlZCAgdG8gIGEgZGV2aWNlCi1kcml2ZXIuICBJbiB0aGlzICBjYXNlLCB0aGUgZHJpdmVyICBtdXN0IGNhbGwgYWxsb2NhdG9yX2luaXQoKSAgYmVmb3JlCi11c2luZyAgIHRoZSAgYWxsb2NhdG9yICAgYW5kICBtdXN0ICBjYWxsICAgYWxsb2NhdG9yX2NsZWFudXAoKSAgYmVmb3JlCi11bmxvYWRpbmcuICBUaGlzIGlzICB1c3VhbGx5ICBkb25lICAgZnJvbSB3aXRoaW4gIGluaXRfbW9kdWxlKCkgICAgYW5kCi1jbGVhbnVwX21vZHVsZSgpLiBJZiB0aGUgYWxsb2NhdG9yIGlzIGxpbmtlZCB0byAgYSBkcml2ZXIsIGl0IHdvbid0IGJlCi1wb3NzaWJsZSBmb3Igc2V2ZXJhbCBkcml2ZXJzIHRvIGFsbG9jYXRlIGhpZ2ggRE1BIG1lbW9yeSwgYXMgZXhwbGFpbmVkCi1hYm92ZS4KLQotSXQgaXMgcG9zc2libGUsIG9uIHRoZSBvdGhlciBoYW5kLCB0byBjb21waWxlIHRoZSBtb2R1bGUgYXMgYSBzdGFuZGFsb25lCi1tb2R1bGUsIHNvIHRoYXQgc2V2ZXJhbCBtb2R1bGVzIGNhbiByZWx5IG9uIHRoZSBhbGxvY2F0b3IgZm9yIHRoZXkgRE1BCi1idWZmZXJzLiBUbyBjb21waWxlIHRoZSBhbGxvY2F0b3IgYXMgYSBzdGFuZGFsb25lIG1vZHVsZSwgZG8gdGhlCi1mb2xsb3dpbmcgaW4gdGhpcyBkaXJlY3RvcnkgKG9yIHByb3ZpZGUgYSBzdWl0YWJsZSBNYWtlZmlsZSwgb3IgZWRpdAotdGhlIHNvdXJjZSBjb2RlKToKLQotCW1ha2UgYWxsb2NhdG9yLm8gQ0M9ImdjYyAtRGFsbG9jYXRvcl9pbml0PWluaXRfbW9kdWxlIC1EYWxsb2NhdG9yX2NsZWFudXA9Y2xlYW51cF9tb2R1bGUgLWluY2x1ZGUgL3Vzci9pbmNsdWRlL2xpbnV4L21vZHVsZS5oIgotCi1UaGUgcHJldmlvdXMgY29tbWFuZGxpbmUgIHRlbGxzICAgdG8gaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ICBpbiAgdGhlCi1maXJzdCBwbGFjZSwgIGFuZCB0byByZW5hbWUgdGhlIGluaXQgIGFuZCBjbGVhbnVwIGZ1bmN0aW9uIHRvIHRoZSBvbmVzCi1uZWVkZWQgZm9yICBtb2R1bGUgbG9hZGluZyBhbmQgIHVubG9hZGluZy4gIERyaXZlcnMgdXNpbmcgYSBzdGFuZGFsb25lCi1hbGxvY2F0b3Igd29uJ3QgbmVlZCB0byBjYWxsIGFsbG9jYXRvcl9pbml0KCkgbm9yIGFsbG9jYXRvcl9jbGVhbnVwKCkuCi0KLVRoZSBhbGxvY2F0b3IgZXhwb3J0cyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyAoZGVjbGFyZWQgaW4gYWxsb2NhdG9yLmgpOgotCi0gICB1bnNpZ25lZCBsb25nIGFsbG9jYXRvcl9hbGxvY2F0ZV9kbWEgKHVuc2lnbmVkIGxvbmcga2lsb2J5dGVzLAotCQkJCQkgaW50IHByaW9yaXR5KTsKLQotCVRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBoeXNpY2FsIGFkZHJlc3MsIG92ZXIgaGlnaF9tZW1vcnksCi0Jd2hpY2ggY29ycmVzcG9uZHMgdG8gYW4gYXJlYSBvZiBhdCBsZWFzdCAia2lsb2J5dGVzIiBraWxvYnl0ZXMuCi0JVGhlIGFyZWEgd2lsbCBiZSBvd25lZCBieSB0aGUgbW9kdWxlIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLgotCVRoZSByZXR1cm5lZCBhZGRyZXNzIGNhbiBiZSBwYXNzZWQgdG8gZGV2aWNlIGJvYXJkcywgdG8gaW5zdHJ1Y3QKLQl0aGVpciBETUEgY29udHJvbGxlcnMsIHZpYSBwaHlzX3RvX2J1cygpLiBUaGUgYWRkcmVzcyBjYW4gYmUgdXNlZAotCWJ5IEMgY29kZSBhZnRlciB2cmVtYXAoKS9pb3JlbWFwKCkuIFRoZSAicHJpb3JpdHkiIGFyZ3VtZW50IHNob3VsZAotCWJlIEdGUF9LRVJORUwgb3IgR0ZQX0FUT01JQywgYWNjb3JkaW5nIHRvIHRoZSBjb250ZXh0IG9mIHRoZQotCWNhbGxlcjsgaXQgaXMgdXNlZCB0byBjYWxsIGttYWxsb2MoKSwgYXMgdGhlIGFsbG9jYXRvciBtdXN0IGtlZXAKLQl0cmFjayBvZiBhbnkgcmVnaW9uIGl0IGdpdmVzIGF3YXkuIEluIGNhc2Ugb2YgZXJyb3IgdGhlIGZ1bmN0aW9uCi0JcmV0dXJucyAwLCBhbmQgdGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBpc3N1ZSBhIC1FTk9NRU0gZXJyb3IuCi0KLQotICAgdm9pZCBhbGxvY2F0b3JfZnJlZV9kbWEgKHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7Ci0KLQlUaGlzIGZ1bmN0aW9uIGlzIHRoZSByZXZlcnNlIG9mIHRoZSBwcmV2aW91cyBvbmUuIElmIGEgZHJpdmVyCi0JZG9lc24ndCBmcmVlIHRoZSBETUEgbWVtb3J5IGl0IGFsbG9jYXRlZCwgdGhlIGFsbG9jYXRvciB3aWxsCi0JY29uc2lkZXIgc3VjaCBtZW1vcnkgYXMgYnVzeS4gTm90ZSwgaG93ZXZlciwgdGhhdAotCWFsbG9jYXRvcl9jbGVhbnVwKCkgY2FsbHMga2ZyZWUoKSBvbiBldmVyeSByZWdpb24gaXQgcmVjbGFpbWVkLAotCXNvIHRoYXQgYSBkcml2ZXIgd2l0aCB0aGUgYWxsb2NhdG9yIGxpbmtlZCBpbiBjYW4gYXZvaWQgY2FsbGluZwotCWFsbG9jYXRvcl9mcmVlX2RtYSgpIGF0IHVubG9hZCB0aW1lLgotCi0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9hbGxvY2F0b3IuYyBiL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvYWxsb2NhdG9yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzMzk0N2IuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9hbGxvY2F0b3IuYworKysgL2Rldi9udWxsCkBAIC0xLDI5NCArMCwwIEBACi0vKgotICogYWxsb2NhdG9yLmMgLS0gYWxsb2NhdGUgYWZ0ZXIgaGlnaF9tZW1vcnksIGlmIGF2YWlsYWJsZQotICoKLSAqIE5PVEU6IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gbXkgcHJldmlvdXMgYWxsb2NhdG9yLCB0aGUgb25lIHRoYXQKLSAqICAgICAgIGFzc2VtYmxlcyBwYWdlcywgd2hpY2ggcmV2ZWFsZWQgaXRzZWxmIGJvdGggc2xvdyBhbmQgdW5yZWxpYWJsZS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggICBydWJpbmlAbGludXguaXQgKEFsZXNzYW5kcm8gUnViaW5pKQotICoKLSAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqCi0KLS0tIENoYW5nZXMgLS0KLQotICBEYXRlCSAgICAgIFByb2dyYW1tZXIgIERlc2NyaXB0aW9uIG9mIGNoYW5nZXMgbWFkZQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIDAyLUF1Zy0yMDAyIE5KQyAgICAgICAgIGFsbG9jYXRvciBub3cgc3RlcHMgaW4gMU1CIGluY3JlbWVudHMsIHJhdGhlcgotCQkJICB0aGFuIGRvdWJsaW5nIGl0cyBzaXplIGVhY2ggdGltZS4KLQkJCSAgQWxzbywgYWxsb2NhdG9yX2luaXQodTMyICopIG5vdyByZXR1cm5zCi0JCQkgIChpbiB0aGUgZmlyc3QgYXJnKSB0aGUgc2l6ZSBvZiB0aGUgZnJlZQotCQkJICBzcGFjZS4gIFRoaXMgaXMgbm8gbG9uZ2VyIGNvbnNpc3RlbnQgd2l0aAotCQkJICB1c2luZyB0aGUgYWxsb2NhdG9yIGFzIGEgbW9kdWxlLCBhbmQgc29tZSBjaGFuZ2VzCi0JCQkgIG1heSBiZSBuZWNlc3NhcnkgZm9yIHRoYXQgcHVycG9zZS4gIFRoaXMgd2FzCi0JCQkgIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgRFQzMTU1IGRyaXZlciwgaW4KLQkJCSAgc3RhbmQgYWxvbmUgbW9kZSBvbmx5ISEhCi0gIDI2LU9jdC0yMDA5IFNTCSAgUG9ydCB0byAyLjYuMzAga2VybmVsLgotICovCi0KLQotI2lmbmRlZiBfX0tFUk5FTF9fCi0jICBkZWZpbmUgX19LRVJORUxfXwotI2VuZGlmCi0jaWZuZGVmIE1PRFVMRQotIyAgZGVmaW5lIE1PRFVMRQotI2VuZGlmCi0KLQotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+CS8qIFBBR0VfQUxJR04oKSAqLwotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLQotI2luY2x1ZGUgImFsbG9jYXRvci5oIgotCi0vKiNkZWZpbmUgQUxMX0RFQlVHKi8KLSNkZWZpbmUgQUxMX01TRyAiYWxsb2NhdG9yOiAiCi0KLSN1bmRlZiBQREVCVUcgICAgICAgICAgICAgLyogdW5kZWYgaXQsIGp1c3QgaW4gY2FzZSAqLwotI2lmZGVmIEFMTF9ERUJVRwotIyAgZGVmaW5lIF9fc3RhdGljCi0jICBkZWZpbmUgRFVNUF9MSVNUKCkgZHVtcF9saXN0KCkKLSMgIGlmZGVmIF9fS0VSTkVMX18KLSAgICAgLyogVGhpcyBvbmUgaWYgZGVidWdnaW5nIGlzIG9uLCBhbmQga2VybmVsIHNwYWNlICovCi0jICAgIGRlZmluZSBQREVCVUcoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBBTExfTVNHIGZtdCwgIyMgYXJncykKLSMgIGVsc2UKLSAgICAgLyogVGhpcyBvbmUgZm9yIHVzZXIgc3BhY2UgKi8KLSMgICAgZGVmaW5lIFBERUJVRyhmbXQsIGFyZ3MuLi4pIGZwcmludGYoc3RkZXJyLCBmbXQsICMjIGFyZ3MpCi0jICBlbmRpZgotI2Vsc2UKLSMgIGRlZmluZSBQREVCVUcoZm10LCBhcmdzLi4uKSAvKiBub3QgZGVidWdnaW5nOiBub3RoaW5nICovCi0jICBkZWZpbmUgRFVNUF9MSVNUKCkKLSMgIGRlZmluZSBfX3N0YXRpYyBzdGF0aWMKLSNlbmRpZgotCi0jdW5kZWYgUERFQlVHRwotI2RlZmluZSBQREVCVUdHKGZtdCwgYXJncy4uLikKLS8qI2RlZmluZSBQREVCVUdHKGZtdCwgYXJncy4uLikgcHJpbnRrKCBLRVJOX0RFQlVHIEFMTF9NU0cgZm10LCAjIyBhcmdzKSovCi0KLQotc3RhdGljIGludCBhbGxvY2F0b3JfaGltZW0gPSAxOyAvKiAwID0gcHJvYmUsIHBvcy4gPSBtZWdzLCBuZWcuID0gZGlzYWJsZSAgICovCi1zdGF0aWMgaW50IGFsbG9jYXRvcl9zdGVwID0gMTsgIC8qIFRoaXMgaXMgdGhlIHN0ZXAgc2l6ZSBpbiBNQiAgICAgICAgICAgICAgKi8KLXN0YXRpYyBpbnQgYWxsb2NhdG9yX3Byb2JlID0gMTsgLyogVGhpcyBpcyBhIGZsYWcgLS0gMT1wcm9iZSwgMD1kb24ndCBwcm9iZSAqLwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY2F0b3JfYnVmZmVyOwkJLyogcGh5c2ljYWwgYWRkcmVzcyAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NhdG9yX2J1ZmZlcl9zaXplOwkvKiBraWxvYnl0ZXMgKi8KLQotLyoKLSAqIFRoZSBhbGxvY2F0b3Iga2VlcHMgYSBsaXN0IG9mIERNQSBhcmVhcywgc28gbXVsdGlwbGUgZGV2aWNlcwotICogY2FuIGNvZXhpc3QuIFRoZSBsaXN0IGlzIGtlcHQgc29ydGVkIGJ5IGFkZHJlc3MKLSAqLwotCi1zdHJ1Y3QgYWxsb2NhdG9yX3N0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBhZGRyZXNzOwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQlzdHJ1Y3QgYWxsb2NhdG9yX3N0cnVjdCAqbmV4dDsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYWxsb2NhdG9yX3N0cnVjdCAqYWxsb2NhdG9yX2xpc3Q7Ci0KLSNpZmRlZiBBTExfREVCVUcKLXN0YXRpYyBpbnQgZHVtcF9saXN0KHZvaWQpCi17Ci0Jc3RydWN0IGFsbG9jYXRvcl9zdHJ1Y3QgKnB0cjsKLQotCVBERUJVRygiQ3VycmVudCBsaXN0OlxuIik7Ci0JZm9yIChwdHIgPSBhbGxvY2F0b3JfbGlzdDsgcHRyOyBwdHIgPSBwdHItPm5leHQpCi0JCVBERUJVRygiMHglMDhseCAoc2l6ZSAlbGlrQilcbiIsIHB0ci0+YWRkcmVzcywgcHRyLT5zaXplPj4xMCk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBhY3R1YWwgYWxsb2NhdG9yLgotICoKLSAqIElmIHNwYWNlIGlzIGF2YWlsYWJsZSBpbiBoaWdoIG1lbW9yeSAoYXMgZGV0ZWN0ZWQgYXQgbG9hZCB0aW1lKSwgdGhhdAotICogb25lIGlzIHJldHVybmVkLiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgcGh5c2ljYWwgYWRkcmVzcyAoaS5lLiwgaXQgY2FuCi0gKiBiZSB1c2VkIHN0cmFpZ2h0IGFoZWFkIGZvciBETUEsIGJ1dCBuZWVkcyByZW1hcHBpbmcgZm9yIHByb2dyYW0gdXNlKS4KLSAqLwotCi11bnNpZ25lZCBsb25nIGFsbG9jYXRvcl9hbGxvY2F0ZV9kbWEodW5zaWduZWQgbG9uZyBraWxvYnl0ZXMsIGdmcF90IGZsYWdzKQotewotCXN0cnVjdCBhbGxvY2F0b3Jfc3RydWN0ICpwdHIgPSBhbGxvY2F0b3JfbGlzdCwgKm5ld3B0cjsKLQl1bnNpZ25lZCBsb25nIGJ5dGVzID0ga2lsb2J5dGVzIDw8IDEwOwotCi0JLyogY2hlY2sgaWYgaGlnaCBtZW1vcnkgaXMgYXZhaWxhYmxlICovCi0JaWYgKCFhbGxvY2F0b3JfYnVmZmVyKQotCQlyZXR1cm4gMDsKLQotCS8qIFJvdW5kIGl0IHRvIGEgbXVsdGlwbGUgb2YgdGhlIHBhZ2VzaXplICovCi0JYnl0ZXMgPSBQQUdFX0FMSUdOKGJ5dGVzKTsKLQlQREVCVUcoInJlcXVlc3QgZm9yICVsaSBieXRlc1xuIiwgYnl0ZXMpOwotCi0Jd2hpbGUgKHB0ciAmJiBwdHItPm5leHQpIHsKLQkJaWYgKHB0ci0+bmV4dC0+YWRkcmVzcyAtIChwdHItPmFkZHJlc3MgKyBwdHItPnNpemUpID49IGJ5dGVzKQotCQkJYnJlYWs7IC8qIGVub3VnaCBzcGFjZSAqLwotCQlwdHIgPSBwdHItPm5leHQ7Ci0JfQotCWlmICghcHRyLT5uZXh0KSB7Ci0JCURVTVBfTElTVCgpOwotCQlQREVCVUcoImFsbG9jIGZhaWxlZFxuIik7Ci0JCXJldHVybiAwOyAvKiBlbmQgb2YgbGlzdCAqLwotCX0KLQluZXdwdHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWxsb2NhdG9yX3N0cnVjdCksIGZsYWdzKTsKLQlpZiAoIW5ld3B0cikKLQkJcmV0dXJuIDA7Ci0KLQkvKiBvaywgbm93IHN0aWNrIGl0IGFmdGVyIHB0ciAqLwotCW5ld3B0ci0+YWRkcmVzcyA9IHB0ci0+YWRkcmVzcyArIHB0ci0+c2l6ZTsKLQluZXdwdHItPnNpemUgPSBieXRlczsKLQluZXdwdHItPm5leHQgPSBwdHItPm5leHQ7Ci0JcHRyLT5uZXh0ID0gbmV3cHRyOwotCi0JRFVNUF9MSVNUKCk7Ci0JUERFQlVHKCJyZXR1cm5pbmcgMHglMDhseFxuIiwgbmV3cHRyLT5hZGRyZXNzKTsKLQlyZXR1cm4gbmV3cHRyLT5hZGRyZXNzOwotfQotCi1pbnQgYWxsb2NhdG9yX2ZyZWVfZG1hKHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKLXsKLQlzdHJ1Y3QgYWxsb2NhdG9yX3N0cnVjdCAqcHRyID0gYWxsb2NhdG9yX2xpc3QsICpwcmV2OwotCi0Jd2hpbGUgKHB0ciAmJiBwdHItPm5leHQpIHsKLQkJaWYgKHB0ci0+bmV4dC0+YWRkcmVzcyA9PSBhZGRyZXNzKQotCQkJYnJlYWs7Ci0JCXB0ciA9IHB0ci0+bmV4dDsKLQl9Ci0JLyogdGhlIG9uZSBiZWluZyBmcmVlZCBpcyBwdHItPm5leHQgKi8KLQlwcmV2ID0gcHRyOyBwdHIgPSBwdHItPm5leHQ7Ci0KLQlpZiAoIXB0cikgewotCQlwcl9lcnIoQUxMX01TRyAiZnJlZV9kbWEgYnV0IGFkZC4gbm90IGFsbG9jYXRlZFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlQREVCVUdHKCJmcmVlaW5nOiAlMDhseCAoJWxpKSBuZXh0ICUwOGx4XG4iLCBwdHItPmFkZHJlc3MsIHB0ci0+c2l6ZSwKLQkJcHRyLT5uZXh0LT5hZGRyZXNzKTsKLQlwcmV2LT5uZXh0ID0gcHRyLT5uZXh0OwotCWtmcmVlKHB0cik7Ci0KLQkvKiBkdW1wX2xpc3QoKTsgKi8KLQlyZXR1cm4gMDsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBJbml0IGFuZCBjbGVhbnVwCi0gKgotICogT24gY2xlYW51cCBldmVyeXRoaW5nIGlzIHJlbGVhc2VkLiBJZiB0aGUgbGlzdCBpcyBub3QgZW1wdHksIHRoYXQgYQotICogcHJvYmxlbSBvZiBvdXIgY2xpZW50cwotICovCi1pbnQgYWxsb2NhdG9yX2luaXQodTMyICphbGxvY2F0b3JfbWF4KQotewotCS8qIGNoZWNrIGhvdyBtdWNoIGZyZWUgbWVtb3J5IGlzIHRoZXJlICovCi0Jdm9pZCAqcmVtYXBwZWQ7Ci0JdW5zaWduZWQgbG9uZyBtYXg7Ci0JdW5zaWduZWQgbG9uZyB0cmlhbF9zaXplID0gYWxsb2NhdG9yX2hpbWVtPDwyMDsKLQl1bnNpZ25lZCBsb25nIGxhc3RfdHJpYWwgPSAwOwotCXVuc2lnbmVkIGxvbmcgc3RlcCA9IGFsbG9jYXRvcl9zdGVwPDwyMDsKLQl1bnNpZ25lZCBsb25nIGkgPSAwOwotCXN0cnVjdCBhbGxvY2F0b3Jfc3RydWN0ICpoZWFkLCAqdGFpbDsKLQljaGFyIHRlc3Rfc3RyaW5nW10gPSAiMDEyMzQ1Njc4OWFiY2RlIjsgLyogMTYgYnl0ZXMgKi8KLQotCVBERUJVR0coImhpbWVtID0gJWlcbiIsIGFsbG9jYXRvcl9oaW1lbSk7Ci0JaWYgKGFsbG9jYXRvcl9oaW1lbSA8IDApIC8qIGRvbid0IGV2ZW4gdHJ5ICovCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCF0cmlhbF9zaXplKQotCQl0cmlhbF9zaXplID0gMTw8MjA7IC8qIG5vdCBzcGVjaWZpZWQ6IHRyeSBvbmUgbWVnICovCi0KLQl3aGlsZSAoMSkgewotCQlyZW1hcHBlZCA9IGlvcmVtYXAoX19wYShoaWdoX21lbW9yeSksIHRyaWFsX3NpemUpOwotCQlpZiAoIXJlbWFwcGVkKSB7Ci0JCQlQREVCVUdHKCIlbGkgbWVncyBmYWlsZWQhXG4iLCB0cmlhbF9zaXplPj4yMCk7Ci0JCQlicmVhazsKLQkJfQotCQlQREVCVUdHKCJUcnlpbmcgJWxpIG1lZ3MgKGF0ICVwLCAlcClcbiIsIHRyaWFsX3NpemU+PjIwLAotCQkJKHZvaWQgKilfX3BhKGhpZ2hfbWVtb3J5KSwgcmVtYXBwZWQpOwotCQlmb3IgKGkgPSBsYXN0X3RyaWFsOyBpIDwgdHJpYWxfc2l6ZTsgaSArPSAxNikgewotCQkJc3RyY3B5KChjaGFyICopKHJlbWFwcGVkKStpLCB0ZXN0X3N0cmluZyk7Ci0JCQlpZiAoc3RyY21wKChjaGFyICopKHJlbWFwcGVkKStpLCB0ZXN0X3N0cmluZykpCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCWlvdW5tYXAoKHZvaWQgKilyZW1hcHBlZCk7Ci0JCXNjaGVkdWxlKCk7Ci0JCWxhc3RfdHJpYWwgPSB0cmlhbF9zaXplOwotCQlpZiAoaSA9PSB0cmlhbF9zaXplKQotCQkJdHJpYWxfc2l6ZSArPSBzdGVwOyAvKiBpbmNyZW1lbnQsIGlmIGFsbCB3ZW50IHdlbGwgKi8KLQkJZWxzZSB7Ci0JCQlQREVCVUdHKCIlbGkgbWVncyBjb3B5IHRlc3QgZmFpbGVkIVxuIiwgdHJpYWxfc2l6ZT4+MjApOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKCFhbGxvY2F0b3JfcHJvYmUpCi0JCQlicmVhazsKLQl9Ci0JUERFQlVHKCIlbGkgbWVncyAoJWxpIGssICVsaSBiKVxuIiwgaT4+MjAsIGk+PjEwLCBpKTsKLQlhbGxvY2F0b3JfYnVmZmVyX3NpemUgPSBpPj4xMDsgLyoga2lsb2J5dGVzICovCi0JYWxsb2NhdG9yX2J1ZmZlciA9IF9fcGEoaGlnaF9tZW1vcnkpOwotCWlmICghYWxsb2NhdG9yX2J1ZmZlcl9zaXplKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgQUxMX01TRyAibm8gZnJlZSBoaWdoIG1lbW9yeSB0byB1c2VcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKgotCSogdG8gc2ltcGxpZnkgdGhpbmdzLCBhbHdheXMgaGF2ZSB0d28gY2VsbHMgaW4gdGhlIGxpc3Q6Ci0JKiB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0LiBUaGlzIGF2b2lkcyBzb21lIGNvbmRpdGlvbmFscyBhbmQKLQkqIGV4dHJhIGNvZGUgd2hlbiBhbGxvY2F0aW5nIGFuZCBkZWFsbG9jYXRpbmc6IHdlIG9ubHkgcGxheQotCSogaW4gdGhlIG1pZGRsZSBvZiB0aGUgbGlzdAotCSovCi0JaGVhZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhbGxvY2F0b3Jfc3RydWN0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFoZWFkKQotCQlyZXR1cm4gLUVOT01FTTsKLQl0YWlsID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFsbG9jYXRvcl9zdHJ1Y3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRhaWwpIHsKLQkJa2ZyZWUoaGVhZCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCW1heCA9IGFsbG9jYXRvcl9idWZmZXJfc2l6ZTw8MTA7Ci0KLQloZWFkLT5zaXplID0gdGFpbC0+c2l6ZSA9IDA7Ci0JaGVhZC0+YWRkcmVzcyA9IGFsbG9jYXRvcl9idWZmZXI7Ci0JdGFpbC0+YWRkcmVzcyA9IGFsbG9jYXRvcl9idWZmZXIgKyBtYXg7Ci0JaGVhZC0+bmV4dCA9IHRhaWw7Ci0JdGFpbC0+bmV4dCA9IE5VTEw7Ci0JYWxsb2NhdG9yX2xpc3QgPSBoZWFkOwotCi0JLyogQmFjayB0byB0aGUgdXNlciBjb2RlLCBpbiBLQiAqLwotCSphbGxvY2F0b3JfbWF4ID0gYWxsb2NhdG9yX2J1ZmZlcl9zaXplOwotCi0JcmV0dXJuIDA7IC8qIG9rLCByZWFkeSAqLwotfQotCi12b2lkIGFsbG9jYXRvcl9jbGVhbnVwKHZvaWQpCi17Ci0Jc3RydWN0IGFsbG9jYXRvcl9zdHJ1Y3QgKnB0ciwgKm5leHQ7Ci0KLQlmb3IgKHB0ciA9IGFsbG9jYXRvcl9saXN0OyBwdHI7IHB0ciA9IG5leHQpIHsKLQkJbmV4dCA9IHB0ci0+bmV4dDsKLQkJUERFQlVHKCJmcmVlaW5nIGxpc3Q6IDB4JTA4bHhcbiIsIHB0ci0+YWRkcmVzcyk7Ci0JCWtmcmVlKHB0cik7Ci0JfQotCi0JYWxsb2NhdG9yX2J1ZmZlciAgICAgID0gMDsKLQlhbGxvY2F0b3JfYnVmZmVyX3NpemUgPSAwOwotCWFsbG9jYXRvcl9saXN0ID0gTlVMTDsKLX0KLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2FsbG9jYXRvci5oIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9hbGxvY2F0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI1YjcwZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2FsbG9jYXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoKLSAqIGFsbG9jYXRvci5oIC0tIHByb3RvdHlwZXMgZm9yIGFsbG9jYXRpbmcgaGlnaCBtZW1vcnkKLSAqCi0gKiBOT1RFOiB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIG15IHByZXZpb3VzIGFsbG9jYXRvciwgdGhlIG9uZSB0aGF0Ci0gKiAgICAgICBhc3NlbWJsZXMgcGFnZXMsIHdoaWNoIHJldmVhbGVkIGl0c2VsZiBib3RoIHNsb3cgYW5kIHVucmVsaWFibGUuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk4ICAgcnViaW5pQGxpbnV4Lml0IChBbGVzc2FuZHJvIFJ1YmluaSkKLSAqCi0gKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKgotICovCi0KLWludCBhbGxvY2F0b3JfZnJlZV9kbWEodW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKLXVuc2lnbmVkIGxvbmcgYWxsb2NhdG9yX2FsbG9jYXRlX2RtYSh1bnNpZ25lZCBsb25nIGtpbG9ieXRlcywgZ2ZwX3QgZmxhZ3MpOwotaW50IGFsbG9jYXRvcl9pbml0KHUzMiAqKTsKLXZvaWQgYWxsb2NhdG9yX2NsZWFudXAodm9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NS5oIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzkzZTJmYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLS8qCi0KLUNvcHlyaWdodCAxOTk2LDIwMDIsMjAwNSBHcmVnb3J5IEQuIEhhZ2VyLCBBbGZyZWQgQS4gUml6emksIE5vYWggSi4gQ293YW4sCi0JCQkgSmFzb24gTGFwZW50YSwgU2NvdHQgU21lZGxleQotCi1UaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRFQzMTU1IERldmljZSBEcml2ZXIuCi0KLVRoZSBEVDMxNTUgRGV2aWNlIERyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdAotYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi1wdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKLUxpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLVRoZSBEVDMxNTUgRGV2aWNlIERyaXZlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKLXVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKLW9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi1hbG9uZyB3aXRoIHRoZSBEVDMxNTUgRGV2aWNlIERyaXZlcjsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLU1BIDAyMTExLTEzMDcgVVNBCi0KLS0tIENoYW5nZXMgLS0KLQotICBEYXRlICAgICBQcm9ncmFtbWVyICBEZXNjcmlwdGlvbiBvZiBjaGFuZ2VzIG1hZGUKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAwMy1KdWwtMjAwMCBKTUwgICAgIG4vYQotICAxMC1PY3QtMjAwMSBTUyAgICAgIHBvcnQgdG8gMi40IGtlcm5lbC4KLSAgMjQtSnVsLTIwMDIgU1MgICAgICByZW1vdmUgdW51c2VkIGNvZGUgJiBhZGRlZCBHUEwgbGljZW5jZS4KLSAgMDUtQXVnLTIwMDUgU1MgICAgICBwb3J0IHRvIDIuNiBrZXJuZWw7IG1ha2UgQ0NJUiBtb2RlIGRlZmF1bHQuCi0KLSovCi0KLSNpZm5kZWYgX0RUMzE1NV9JTkMKLSNkZWZpbmUgX0RUMzE1NV9JTkMKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgkJLyogc3RydWN0IHRpbWV2YWwgKi8KLQotCi0vKiBVbmNvbW1lbnQgdGhpcyBmb3IgNTBIeiBDQ0lSICovCi0jZGVmaW5lIENDSVIgMQotCi0vKiBDYW4gYmUgMSBvciAyICovCi0jZGVmaW5lIE1BWEJPQVJEUyAxCi0KLSNkZWZpbmUgQk9BUkRfTUFYX0JVRkZTCTMKLSNkZWZpbmUgTUFYQlVGRkVSUwkoQk9BUkRfTUFYX0JVRkZTKk1BWEJPQVJEUykKLQotI2RlZmluZSBQQ0lfUEFHRV9TSVpFCSgxIDw8IDEyKQotCi0jaWZkZWYgQ0NJUgotI2RlZmluZSBEVDMxNTVfTUFYX1JPV1MJNTc2Ci0jZGVmaW5lIERUMzE1NV9NQVhfQ09MUwk3NjgKLSNkZWZpbmUgRk9STUFUNTBIWgkxCi0jZWxzZQotI2RlZmluZSBEVDMxNTVfTUFYX1JPV1MJNDgwCi0jZGVmaW5lIERUMzE1NV9NQVhfQ09MUwk2NDAKLSNkZWZpbmUgRk9STUFUNTBIWgkwCi0jZW5kaWYKLQotLyogQ29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KLXN0cnVjdCBkdDMxNTVfY29uZmlnIHsKLQl1MzIgYWNxX21vZGU7Ci0JdTMyIGNvbHMsIHJvd3M7Ci0JdTMyIGNvbnRpbnVvdXM7Ci19OwotCi0KLS8qIGhvbGQgZGF0YSBmb3IgZWFjaCBmcmFtZSAqLwotc3RydWN0IGZyYW1lX2luZm8gewotCXUzMiBhZGRyOwkJLyogYWRkcmVzcyBvZiB0aGUgYnVmZmVyIHdpdGggdGhlIGZyYW1lICovCi0JdTMyIHRhZzsJCS8qIHVuaXF1ZSBudW1iZXIgZm9yIHRoZSBmcmFtZSAqLwotCXN0cnVjdCB0aW1ldmFsIHRpbWU7CS8qIHRpbWUgdGhhdCBjYXB0dXJlIHRvb2sgcGxhY2UgKi8KLX07Ci0KLS8qCi0gKiBTdHJ1Y3R1cmUgZm9yIGludGVycnVwdCBhbmQgYnVmZmVyIGhhbmRsaW5nLgotICogVGhpcyBpcyB0aGUgc2V0dXAgZm9yIDEgY2FyZAotICovCi1zdHJ1Y3QgZHQzMTU1X2ZidWZmZXIgewotCWludCAgICBuYnVmZmVyczsKLQotCXN0cnVjdCBmcmFtZV9pbmZvIGZyYW1lX2luZm9bQk9BUkRfTUFYX0JVRkZTXTsKLQotCWludCBlbXB0eV9idWZmZXJzW0JPQVJEX01BWF9CVUZGU107CS8qIGluZGV4ZXMgZW1wdHkgZnJhbWVzICovCi0JaW50IGVtcHR5X2xlbjsJCQkJLyogTnVtYmVyIG9mIGVtcHR5IGJ1ZmZlcnMgKi8KLQkJCQkJCS8qIFplcm8gbWVhbnMgZW1wdHkgKi8KLQotCWludCBhY3RpdmVfYnVmOwkJCS8qIFdoZXJlIGRhdGEgaXMgY3VycmVudGx5IGRtYSdpbmcgKi8KLQlpbnQgbG9ja2VkX2J1ZjsJCQkvKiBCdWZmZXJzIHVzZWQgYnkgdXNlciAqLwotCi0JaW50IHJlYWR5X3F1ZVtCT0FSRF9NQVhfQlVGRlNdOwotCXUzMiByZWFkeV9oZWFkOwkvKiBUaGUgbW9zdCByZWNlbnQgYnVmZmVyIGxvY2F0ZWQgaGVyZSAqLwotCXUzMiByZWFkeV9sZW47CS8qIFRoZSBudW1iZXIgb2YgcmVhZHkgYnVmZmVycyAqLwotCi0JaW50IGV2ZW5faGFwcGVuZWQ7Ci0JaW50IGV2ZW5fc3RvcHBlZDsKLQotCWludCBzdG9wX2FjcXVpcmU7CS8qIEZsYWcgdG8gc3RvcCBpbnRlcnJ1cHRzICovCi0JdTMyIGZyYW1lX2NvdW50OwkvKiBDb3VudGVyIGZvciBmcmFtZXMgYWNxdWlyZWQgYnkgdGhpcyBjYXJkICovCi19OwotCi0KLQotI2RlZmluZSBEVDMxNTVfTU9ERV9GUkFNRQkxCi0jZGVmaW5lIERUMzE1NV9NT0RFX0ZJRUxECTIKLQotI2RlZmluZSBEVDMxNTVfU05BUAkJMQotI2RlZmluZSBEVDMxNTVfQUNRCQkyCi0KLS8qIFRoZXJlIGlzIG9uZSBzdGF0dXMgc3RydWN0dXJlIGZvciBlYWNoIGNhcmQuICovCi1zdHJ1Y3QgZHQzMTU1X3N0YXR1cyB7Ci0JaW50IGZpeGVkX21vZGU7CQkvKiBpZiAxLCB3ZSBhcmUgaW4gZml4ZWQgZnJhbWUgbW9kZSAqLwotCXUzMiByZWdfYWRkcjsJLyogUmVnaXN0ZXIgYWRkcmVzcyBmb3IgYSBzaW5nbGUgY2FyZCAqLwotCXUzMiBtZW1fYWRkcjsJLyogQnVmZmVyIHN0YXJ0IGFkZHIgZm9yIHRoaXMgY2FyZCAqLwotCXUzMiBtZW1fc2l6ZTsJLyogVGhpcyBpcyB0aGUgYW1vdW50IG9mIG1lbSBhdmFpbGFibGUgICovCi0JdTMyIGlycTsJCS8qIHRoaXMgY2FyZCdzIGlycSAqLwotCXN0cnVjdCBkdDMxNTVfY29uZmlnIGNvbmZpZzsJCS8qIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCi0Jc3RydWN0IGR0MzE1NV9mYnVmZmVyIGZidWZmZXI7CS8qIGZyYW1lIGJ1ZmZlciBzdGF0ZSBzdHJ1Y3QgKi8KLQl1MzIgc3RhdGU7CQkvKiB0aGlzIGNhcmQncyBzdGF0ZSAqLwotCXUzMiBkZXZpY2VfaW5zdGFsbGVkOwkvKiBGbGFnIGlmIGluc3RhbGxlZC4gMT1pbnN0YWxsZWQgKi8KLX07Ci0KLS8qIFJlZmVyZW5jZSB0byBnbG9iYWwgc3RhdHVzIHN0cnVjdHVyZSAqLwotZXh0ZXJuIHN0cnVjdCBkdDMxNTVfc3RhdHVzIGR0MzE1NV9zdGF0dXNbTUFYQk9BUkRTXTsKLQotI2RlZmluZSBEVDMxNTVfU1RBVEVfSURMRQkweDAwCi0jZGVmaW5lIERUMzE1NV9TVEFURV9GUkFNRQkweDAxCi0jZGVmaW5lIERUMzE1NV9TVEFURV9GTEQJMHgwMgotI2RlZmluZSBEVDMxNTVfU1RBVEVfU1RPUAkweDEwMAotI2RlZmluZSBEVDMxNTVfU1RBVEVfRVJST1IJMHgyMDAKLSNkZWZpbmUgRFQzMTU1X1NUQVRFX01PREUJMHgwZmYKLQotI2RlZmluZSBEVDMxNTVfSU9DX01BR0lDCSchJwotCi0jZGVmaW5lIERUMzE1NV9TRVRfQ09ORklHCV9JT1coRFQzMTU1X0lPQ19NQUdJQywgMSwgc3RydWN0IGR0MzE1NV9jb25maWcpCi0jZGVmaW5lIERUMzE1NV9HRVRfQ09ORklHCV9JT1IoRFQzMTU1X0lPQ19NQUdJQywgMiwgc3RydWN0IGR0MzE1NV9zdGF0dXMpCi0jZGVmaW5lIERUMzE1NV9TVE9QCQlfSU8oRFQzMTU1X0lPQ19NQUdJQywgMykKLSNkZWZpbmUgRFQzMTU1X1NUQVJUCQlfSU8oRFQzMTU1X0lPQ19NQUdJQywgNCkKLSNkZWZpbmUgRFQzMTU1X0ZMVVNICQlfSU8oRFQzMTU1X0lPQ19NQUdJQywgNSkKLSNkZWZpbmUgRFQzMTU1X0lPQ19NQVhOUgk1Ci0KLS8qIEVycm9yIGNvZGVzICovCi0KLSNkZWZpbmUgRFRfRVJSX05PX0JVRkZFUlMJMHgxMDAwMAkvKiBub3QgdXNlZCBidXQgaXQgbWlnaHQgYmUgb25lIGRheSAqLwotI2RlZmluZSBEVF9FUlJfQ09SUlVQVAkJMHgyMDAwMAotI2RlZmluZSBEVF9FUlJfT1ZFUlJVTgkJMHgzMDAwMAotI2RlZmluZSBEVF9FUlJfSTJDX1RJTUVPVVQJMHg0MDAwMAotI2RlZmluZSBEVF9FUlJfTUFTSwkJMHhmZjAwMDAvKiBub3QgdXNlZCBidXQgaXQgbWlnaHQgYmUgb25lIGRheSAqLwotCi0vKiBVc2VyIGNvZGUgd2lsbCBwcm9iYWJseSB3YW50IHRvIGRlY2xhcmUgb25lIG9mIHRoZXNlIGZvciBlYWNoIGNhcmQgKi8KLXN0cnVjdCBkdDMxNTVfcmVhZCB7Ci0JdTMyIG9mZnNldDsKLQl1MzIgZnJhbWVfc2VxOwotCXUzMiBzdGF0ZTsKLQotCXN0cnVjdCBmcmFtZV9pbmZvIGZyYW1lX2luZm87Ci19OwotCi0jZW5kaWYgLyogX0RUMzE1NV9pbmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvZHQzMTU1LnN5c3Zpbml0IGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTUuc3lzdmluaXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZWMwOTMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTUuc3lzdmluaXQKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0jISAvYmluL3NoCi0jCi0jIE1vZHVsZSBsb2FkL3VubG9hZCBzY3JpcHQgZm9yIHVzZSB3aXRoIFN5c1Ytc3R5bGUgL2V0Yy9pbml0LmQvIHN5c3RlbXMuCi0jIE9uIGEgRGViaWFuIHN5c3RlbSwgY29weSB0aGlzIHRvIC9ldGMvaW5pdC5kL2R0MzE1NSBhbmQgdGhlbiBydW4KLSMgCS91c3Ivc2Jpbi91cGRhdGUtcmMuZCBkdDMxNTUgZGVmYXVsdHMgNTUKLSMgdG8gY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSAvZXRjL3JjPy5kL1tTS101NWR0MzE1NSBzdGFydC9zdG9wIGxpbmtzLgotIyAoVGhlICI1NSIgaXMgYXJiaXRyYXJ5IGJ1dCBpcyB3aGF0IEkgdXNlIHRvIGxvYWQgdGhpcyByYXRoZXIgbGF0ZS4pCi0jCi0jICAgIEFuZHkgRG91Z2hlcnR5ICAgRmViIDIyIDIwMDAJZG91Z2hlcmFAbGFmYXlldHRlLmVkdQotIyAgICBEZXB0LiBvZiBQaHlzaWNzCi0jICAgIExhZmF5ZXR0ZSBDb2xsZWdlLCBFYXN0b24gUEEgMTgwNDIKLSMKLQotUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KLQotIyBFZGl0IHRvIHBvaW50IHRvIHlvdXIgbG9jYWwgY29weS4KLUZJTEU9L3Vzci9sb2NhbC9saWIvbW9kdWxlcy9kdDMxNTUvZHQzMTU1Lm8KLU5BTUU9ImR0MzE1NSIKLURFU0M9ImR0MzE1NSBGcmFtZSBHcmFiYmVyIG1vZHVsZSIKLURFVj0iZHQzMTU1IgotCi1pZiB0ZXN0ICEgLWYgJEZJTEU7IHRoZW4KLSAgICBlY2hvICJVbmFibGUgdG8gbG9jYXRlICRGSUxFIgotICAgIGV4aXQgMAotZmkKLQotc2V0IC1lCi0KLWNhc2UgIiQxIiBpbgotICBzdGFydCkKLSAgICBlY2hvIC1uICJMb2FkaW5nICRERVNDICIKLSAgICBpZiAvc2Jpbi9pbnNtb2QgLXYgLWYgJEZJTEU7IHRoZW4KLQltYWpvcj1gZ3JlcCAkREVWIC9wcm9jL2RldmljZXMgfCBhd2sgIntwcmludCBcXCQxfSJgCi0Jcm0gLWYgL2Rldi9kdDMxNTU/Ci0JbWtub2QgL2Rldi9kdDMxNTVhIGMgJG1ham9yIDAKLQlta25vZCAvZGV2L2R0MzE1NWIgYyAkbWFqb3IgMQotCWNobW9kIGdvK3J3IC9kZXYvZHQzMTU1PwotCWVjaG8KLSAgICBlbHNlCi0JZWNobyAiJEZJTEUgbm90IGxvYWRlZC4iCi0gICAgZmkKLSAgICA7OwotICBzdG9wKQotICAgIGVjaG8gLW4gIlVubG9hZGluZyAkREVTQzogIgotICAgIGlmIC9zYmluL3JtbW9kICROQU1FIDsgdGhlbgotCWVjaG8KLSAgICBlbHNlCi0JZWNobyAiJERFViBub3QgcmVtb3ZlZCIKLQlleGl0IDAKLSAgICBmaQotICAgIHJtIC1mIC9kZXYvZHQzMTU1PwotICAgIDs7Ci0gICopCi0gICAgZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kLyROQU1FIHtzdGFydHxzdG9wfSIKLSAgICBleGl0IDEKLSAgICA7OwotZXNhYwotCi1leGl0IDAKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTVfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9kcnYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBlZjk3Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9kcnYuYworKysgL2Rldi9udWxsCkBAIC0xLDEwOTkgKzAsMCBAQAotLyoKLQotQ29weXJpZ2h0IDE5OTYsMjAwMiwyMDA1IEdyZWdvcnkgRC4gSGFnZXIsIEFsZnJlZCBBLiBSaXp6aSwgTm9haCBKLiBDb3dhbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBKYXNvbiBMYXBlbnRhLCBTY290dCBTbWVkbGV5LCBHcmVnIFNoYXJwCi0KLVRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBEVDMxNTUgRGV2aWNlIERyaXZlci4KLQotVGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0Ci1hbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQotTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotVGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQotdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQotb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLWFsb25nIHdpdGggdGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi1Tb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotTUEgMDIxMTEtMTMwNyBVU0EKLQotLS0gQ2hhbmdlcyAtLQotCi0gIERhdGUgICAgIFByb2dyYW1tZXIJRGVzY3JpcHRpb24gb2YgY2hhbmdlcyBtYWRlCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgMDMtSnVsLTIwMDAgSk1MICAgICAgIG4vYQotICAxMC1PY3QtMjAwMSBTUyAgICAgICAgcG9ydCB0byAyLjQga2VybmVsCi0gIDAyLUFwci0yMDAyIFNTICAgICAgICBNb2RzIHRvIHVzZSBhbGxvY2F0b3IgYXMgYSBzdGFuZGFsb25lIG1vZHVsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1lcmdlZCBKb2huIFJvbGwncyBjaGFuZ2VzIChqb2huQGNmYS5oYXJ2YXJkLmVkdSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvIG1ha2Ugd29yayB3aXRoIG11bHRpcGxlIGJvYXJkcy4KLSAgMDItSnVsLTIwMDIgU1MgICAgICAgIE1lcmdlZCBKYW1lcyBSb3NlJ3MgY2hhZ2VzIChyb3NlanJAcHVyZHVlLmVkdSkgdG86Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKiBmaXggc3VjY2Vzc2l2ZSBpbnRlcnJ1cHQtZHJpdmVuIGNhcHR1cmVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBhZGQgc2VsZWN0L3BvbGwgc3VwcG9ydC4KLSAgMTAtSnVsLTIwMDIgR0NTICAgICAgIEFkZCBlcnJvciBjaGVjayB3aGVuIG5kZXZpY2VzID4gTUFYQk9BUkRTLgotICAwMi1BdWctMjAwMiBHQ1MgICAgICAgRml4IGZpZWxkIG1vZGUgc28gdGhhdCBvZGQgKGxvd2VyKSBmaWVsZCBpcyBzdG9yZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIGluIGxvd2VyIGhhbGYgb2YgYnVmZmVyLgotICAwNS1BdWctMjAwNSBTUyAgICAgICAgcG9ydCB0byAyLjYga2VybmVsLgotICAyNi1PY3QtMjAwOSBTUwlwb3J0IHRvIDIuNi4zMCBrZXJuZWwuCi0KLS0tIE5vdGVzIC0tCi0KLSoqIGFwcGVuZGVkICJtZW09MTI0IiBpbiBsaWxvLmNvbmYgdG8gYWxsb3cgZm9yIDRtZWdzIGZyZWUgb24gbXkgMTI4bWVnIHN5c3RlbS4KLSAqIHVzaW5nIGFsbG9jYXRvci5jIGFuZCBhbGxvY2F0b3IuaCBmcm9tIG8ncmVpbGx5IGJvb2sgKGFsZXNzYW5kcm8gcnViaW5pKQotICAgIGZ0cDovL2Z0cC5zeXN0ZW15Lml0L3B1Yi9kZXZlbG9wIChzZWUgUkVBRE1FLmFsbG9jYXRvcikKLQotICsgbWlnaHQgd2FudCB0byBnZXQgcmlkIG9mIE1BWGJvYXJkcyBmb3IgYWxsb2NhdGluZyBpbml0aWFsIGJ1ZmZlci4KLSAgICBjb25mdXNpbmcgYW5kIG5vdCBuZWNlc3NhcnkKLQotICsgaW4gY2xlYW51cF9tb2R1bGUgdGhlIE1PRF9JTl9VU0UgbG9va3MgbGlrZSBpdCBpcyBjaGVjayBhZnRlciBpdCBzaG91bGQKLQotICogR0ZQX0RNQSBzaG91bGQgbm90IGJlIHNldCB3aXRoIGEgUENJIHN5c3RlbSAocGcgMjkxKQotCi0gLSBOSkMgd2h5IGFyZSBvbmx5IHR3byBidWZmZXJzIGFsbG93ZWQ/IChzZWUgaXNyLCBhcHByb3ggbGluZSAzNTgpCi0KLSovCi0KLWV4dGVybiB2b2lkIHByaW50cXVlcyhpbnQpOwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotI2luY2x1ZGUgImR0MzE1NS5oIgotI2luY2x1ZGUgImR0MzE1NV9kcnYuaCIKLSNpbmNsdWRlICJkdDMxNTVfaXNyLmgiCi0jaW5jbHVkZSAiZHQzMTU1X2lvLmgiCi0jaW5jbHVkZSAiYWxsb2NhdG9yLmgiCi0KLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vKiBFcnJvciB2YXJpYWJsZS4gIFplcm8gbWVhbnMgbm8gZXJyb3IuICovCi1pbnQgZHQzMTU1X2Vycm5vID0gMDsKLQotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0lOVEVMXzcxMTYKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF83MTE2IDB4MTIyMwotI2VuZGlmCi0KLSNkZWZpbmUgRFQzMTU1X1ZFTkRPUklEICAgIFBDSV9WRU5ET1JfSURfSU5URUwKLSNkZWZpbmUgRFQzMTU1X0RFVklDRUlEICAgIFBDSV9ERVZJQ0VfSURfSU5URUxfNzExNgotI2RlZmluZSBNQVhQQ0kgICAgMTYKLQotI2lmZGVmIERUX0RFQlVHCi0jZGVmaW5lIERUXzMxNTVfREVCVUdfTVNHKHgseSkgcHJpbnRrKHgseSkKLSNlbHNlCi0jZGVmaW5lIERUXzMxNTVfREVCVUdfTVNHKHgseSkKLSNlbmRpZgotCi0vKiB3YWl0IHF1ZXVlIGZvciBpbnRlcnJ1cHRzICovCi13YWl0X3F1ZXVlX2hlYWRfdCBkdDMxNTVfcmVhZF93YWl0X3F1ZXVlW01BWEJPQVJEU107Ci0KLSNkZWZpbmUgRFRfMzE1NV9TVUNDRVNTIDAKLSNkZWZpbmUgRFRfMzE1NV9GQUlMVVJFIC1FSU8KLQotLyogc2V0IHRvIGR5bmFtaWNhbHkgYWxsb2NhdGUsIGJ1dCBpdCBpcyB0dW5hYmxlOiAqLwotLyogaW5zbW9kIERUXzMxNTUgZHQzMTU1IGR0MzE1NV9tYWpvcj1YWCAqLwotaW50IGR0MzE1NV9tYWpvciA9IDA7Ci0KLS8qIFRoZSBtaW5vciBudW1iZXJzIGFyZSAwIGFuZCAxIC4uLiB0aGV5IGFyZSBub3QgdHVuYWJsZS4KLSAqIFRoZXkgYXJlIHVzZWQgYXMgdGhlIGluZGljZXMgZm9yIHRoZSBzdHJ1Y3R1cmUgdmVjdG9ycywKLSAqIGFuZCByZWdpc3RlciBhZGRyZXNzIHZlY3RvcnMKLSAqLwotCi0vKiBHbG9iYWwgc3RydWN0dXJlcyBhbmQgdmFyaWFibGVzICovCi0KLS8qIFN0YXR1cyBvZiBlYWNoIGRldmljZSAqLwotc3RydWN0IGR0MzE1NV9zdGF0dXMgZHQzMTU1X3N0YXR1c1tNQVhCT0FSRFNdOwotCi0vKiBrZXJuZWwgbG9naWNhbCBhZGRyZXNzIG9mIHRoZSBib2FyZCAqLwotdTggKmR0MzE1NV9sYmFzZVtNQVhCT0FSRFNdID0geyBOVUxMCi0jaWYgTUFYQk9BUkRTID09IDIKLQkJCQkgICAgICAsIE5VTEwKLSNlbmRpZgotfTsKLS8qIERUMzE1NSByZWdpc3RlcnMgICAgICAgICAgICAgICovCi11OCAqZHQzMTU1X2JiYXNlID0gTlVMTDsJCSAgLyoga2VybmVsIGxvZ2ljYWwgYWRkcmVzcyBvZiB0aGUgKgotCQkJCQkgICAqIGJ1ZmZlciByZWdpb24gICAgICAgICAgICAgICAgICovCi11MzIgIGR0MzE1NV9kZXZfb3BlbltNQVhCT0FSRFNdID0gezAKLSNpZiBNQVhCT0FSRFMgPT0gMgotCQkJCSAgICAgICAsIDAKLSNlbmRpZgotfTsKLQotdTMyICBuZGV2aWNlcyA9IDA7Ci11MzIgdW5pcXVlX3RhZyA9IDA7OwotCi0KLS8qCi0gKiBTdG9wcyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiByaWdodCBhd2F5IGFuZCByZXNldHMgdGhlIHN0YXR1cwotICogdG8gaWRsZS4gIEkgZG9uJ3Qga25vdyB3aHkgdGhpcyB3b3JrcyBhbmQgdGhlIG90aGVyIHdheSBkb2Vzbid0LgotICogKEphbWVzIFJvc2UpCi0gKi8KLXN0YXRpYyB2b2lkIHF1aWNrX3N0b3AgKGludCBtaW5vcikKLXsKLSAgLy8gVE9ETzogc2NvdHQgd2FzIGhlcmUKLSNpZiAxCi0gIFJlYWRNUmVnKChkdDMxNTVfbGJhc2VbbWlub3JdICsgSU5UX0NTUiksIGludF9jc3Jfci5yZWcpOwotICAvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KLSAgaW50X2Nzcl9yLmZsZC5GTERfRU5EX0VWRV9FTiA9IDA7Ci0gIGludF9jc3Jfci5mbGQuRkxEX0VORF9PRERfRU4gPSAwOwotICBXcml0ZU1SZWcoKGR0MzE1NV9sYmFzZVttaW5vcl0gKyBJTlRfQ1NSKSwgaW50X2Nzcl9yLnJlZyk7Ci0KLSAgZHQzMTU1X3N0YXR1c1ttaW5vcl0uc3RhdGUgJj0gfihEVDMxNTVfU1RBVEVfU1RPUHwweGZmKTsKLSAgLyogbWFyayB0aGUgc3lzdGVtIHN0b3BwZWQ6ICovCi0gIGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlIHw9IERUMzE1NV9TVEFURV9JRExFOwotICBkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPnN0b3BfYWNxdWlyZSA9IDA7Ci0gIGR0MzE1NV9mYnVmZmVyW21pbm9yXS0+ZXZlbl9zdG9wcGVkID0gMDsKLSNlbHNlCi0gIGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlIHw9IERUMzE1NV9TVEFURV9TVE9QOwotICBkdDMxNTVfc3RhdHVzW21pbm9yXS5mYnVmZmVyLnN0b3BfYWNxdWlyZSA9IDE7Ci0jZW5kaWYKLQotfQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIGR0MzE1NV9pc3IoKSBJbnRlcnJ1cHQgc2VydmljZSByb3V0aWVuCi0gKgotICogLSBsb29rcyBsaWtlIHRoaXMgaXNyIHN1cHBvcnRzIElSUSBzaGFyaW5nIChvciBjb3VsZCkgSk1MCi0gKiAtIEFzc3VtZXMgaXJxJ3MgYXJlIGRpc2FibGVkLCB2aWEgU0FfSU5URVJSVVBUIGZsYWcKLSAqIGJlaW5nIHNldCBpbiByZXF1ZXN0X2lycSgpIGNhbGwgZnJvbSBpbml0X21vZHVsZSgpCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBkdDMxNTVfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0gIGludCAgICBtaW5vciA9IC0xOwotICBpbnQgICAgaW5kZXg7Ci0gIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gIHUzMiBidWZmZXJfYWRkcjsKLQotICAvKiBmaW5kIG91dCB3aG8gaXNzdWVkIHRoZSBpbnRlcnJ1cHQgKi8KLSAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbmRldmljZXM7IGluZGV4KyspIHsKLSAgICBpZihkZXZfaWQgPT0gKHZvaWQqKSAmZHQzMTU1X3N0YXR1c1tpbmRleF0pCi0gICAgICB7Ci0JbWlub3IgPSBpbmRleDsKLQlicmVhazsKLSAgICAgIH0KLSAgfQotCi0gIC8qIGhvcGVmdWxseSB3ZSBzaG91bGQgbm90IGdldCBoZXJlICovCi0gIGlmIChtaW5vciA8IDAgfHwgbWlub3IgPj0gTUFYQk9BUkRTKSB7Ci0gICAgcHJpbnRrKEtFUk5fRVJSICJkdDMxNTVfaXNyIGNhbGxlZCB3aXRoIGludmFsaWQgZGV2X2lkXG4iKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvKiBDaGVjayBmb3IgY29ycnVwdGlvbiBhbmQgc2V0IGEgZmxhZyBpZiBzbyAqLwotICBSZWFkTVJlZygoZHQzMTU1X2xiYXNlW21pbm9yXSArIENTUjEpLCBjc3IxX3IucmVnKTsKLQotICBpZiAoKGNzcjFfci5mbGQuRkxEX0NSUFRfRVZFKSB8fCAoY3NyMV9yLmZsZC5GTERfQ1JQVF9PREQpKQotICAgIHsKLSAgICAgIC8qIFRPRE86IHRoaXMgc2hvdWxkIHByb2JhYmx5IHN0b3AgYWNxdWlzaXRpb24gKi8KLSAgICAgIC8qIGFuZCBzZXQgc29tZSBmbGFncyBzbyB0aGF0IGR0MzE1NV9yZWFkICAgICAgKi8KLSAgICAgIC8qIHJldHVybnMgYW4gZXJyb3IgbmV4dCB0aW1lIGl0IGlzIGNhbGxlZCAgICAgKi8KLSAgICAgIGR0MzE1NV9lcnJubyA9IERUX0VSUl9DT1JSVVBUOwotICAgICAgcHJpbnRrKCJkdDMxNTU6ICBjb3JydXB0IGZpZWxkXG4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgUmVhZE1SZWcoKGR0MzE1NV9sYmFzZVttaW5vcl0gKyBJTlRfQ1NSKSwgaW50X2Nzcl9yLnJlZyk7Ci0KLSAgLyogSGFuZGxlIHRoZSBldmVuIGZpZWxkIC4uLiAqLwotICBpZiAoaW50X2Nzcl9yLmZsZC5GTERfRU5EX0VWRSkKLSAgICB7Ci0gICAgICBpZiAoKGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlICYgRFQzMTU1X1NUQVRFX01PREUpID09Ci0JICAgRFQzMTU1X1NUQVRFX0ZMRCkKLQl7Ci0JICBkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPmZyYW1lX2NvdW50Kys7Ci0JfQotCi0gICAgICBSZWFkSTJDKGR0MzE1NV9sYmFzZVttaW5vcl0sIEVWRU5fQ1NSLCAmaTJjX2V2ZW5fY3NyLnJlZyk7Ci0KLSAgICAgIC8qIENsZWFyIHRoZSBpbnRlcnJ1cHQ/ICovCi0gICAgICBpbnRfY3NyX3IuZmxkLkZMRF9FTkRfRVZFID0gMTsKLQotICAgICAgLyogZGlzYWJsZSB0aGUgaW50ZXJydXB0IGlmIGxhc3QgZmllbGQgKi8KLSAgICAgIGlmIChkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPnN0b3BfYWNxdWlyZSkKLQl7Ci0JICBwcmludGsoImR0MzE1NTogIGV2ZW4gc3RvcHBlZC5cbiIpOwotCSAgZHQzMTU1X2ZidWZmZXJbbWlub3JdLT5ldmVuX3N0b3BwZWQgPSAxOwotCSAgaWYgKGkyY19ldmVuX2Nzci5mbGQuU05HTF9FVkUpCi0JICAgIHsKLQkgICAgICBpbnRfY3NyX3IuZmxkLkZMRF9FTkRfRVZFX0VOID0gMDsKLQkgICAgfQotCSAgZWxzZQotCSAgICB7Ci0JICAgICAgaTJjX2V2ZW5fY3NyLmZsZC5TTkdMX0VWRSAgPSAxOwotCSAgICB9Ci0JfQotCi0gICAgICBXcml0ZU1SZWcoKGR0MzE1NV9sYmFzZVttaW5vcl0gKyBJTlRfQ1NSKSwgaW50X2Nzcl9yLnJlZyk7Ci0KLSAgICAgIC8qIFNldCB1cCBuZXh0IERNQSBpZiB3ZSBhcmUgZG9pbmcgRklFTERTICovCi0gICAgICBpZiAoKGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlICYgRFQzMTU1X1NUQVRFX01PREUpID09Ci0JICAgRFQzMTU1X1NUQVRFX0ZMRCkKLQl7Ci0JICAvKiBHQ1MgKEF1ZyAyLCAyMDAyKSAtLSBJbiBmaWVsZCBtb2RlLCBkbWEgdGhlIG9kZCBmaWVsZAotCSAgICAgaW50byB0aGUgbG93ZXIgaGFsZiBvZiB0aGUgYnVmZmVyICovCi0JICBjb25zdCB1MzIgc3RyaWRlID0gIGR0MzE1NV9zdGF0dXNbbWlub3JdLmNvbmZpZy5jb2xzOwotCSAgYnVmZmVyX2FkZHIgPSBkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPgotCSAgICBmcmFtZV9pbmZvW2R0MzE1NV9mYnVmZmVyW21pbm9yXS0+YWN0aXZlX2J1Zl0uYWRkcgotCSAgICArIChEVDMxNTVfTUFYX1JPV1MgLyAyKSAqIHN0cmlkZTsKLQkgIGxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwotCSAgbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQkgIHdha2VfdXBfaW50ZXJydXB0aWJsZSgmZHQzMTU1X3JlYWRfd2FpdF9xdWV1ZVttaW5vcl0pOwotCi0JICAvKiBTZXQgdXAgdGhlIERNQSBhZGRyZXNzIGZvciB0aGUgbmV4dCBmaWVsZCAqLwotCSAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCSAgV3JpdGVNUmVnKChkdDMxNTVfbGJhc2VbbWlub3JdICsgT0REX0RNQV9TVEFSVCksIGJ1ZmZlcl9hZGRyKTsKLQl9Ci0KLSAgICAgIC8qIENoZWNrIGZvciBlcnJvcnMuICovCi0gICAgICBpMmNfZXZlbl9jc3IuZmxkLkRPTkVfRVZFID0gMTsKLSAgICAgIGlmIChpMmNfZXZlbl9jc3IuZmxkLkVSUk9SX0VWRSkKLQlkdDMxNTVfZXJybm8gPSBEVF9FUlJfT1ZFUlJVTjsKLQotICAgICAgV3JpdGVJMkMoZHQzMTU1X2xiYXNlW21pbm9yXSwgRVZFTl9DU1IsIGkyY19ldmVuX2Nzci5yZWcpOwotCi0gICAgICAvKiBOb3RlIHRoYXQgd2UgYWN0dWFsbHkgc2F3IGFuIGV2ZW4gZmllbGQgbWVhbmluZyAgKi8KLSAgICAgIC8qIHRoYXQgc3Vic2VxdWVudCBvZGQgZmllbGQgY29tcGxldGUgdGhlIGZyYW1lICAgICAqLwotICAgICAgZHQzMTU1X2ZidWZmZXJbbWlub3JdLT5ldmVuX2hhcHBlbmVkID0gMTsKLQotICAgICAgLyogcmVjb3JkaW5nIHRoZSB0aW1lIHRoYXQgdGhlIGV2ZW4gZmllbGQgZmluaXNoZWQsIHRoaXMgc2hvdWxkIGJlICovCi0gICAgICAvKiBhYm91dCB0aW1lIGluIHRoZSBtaWRkbGUgb2YgdGhlIGZyYW1lICovCi0gICAgICBkb19nZXR0aW1lb2ZkYXkoJihkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPgotCQkJIGZyYW1lX2luZm9bZHQzMTU1X2ZidWZmZXJbbWlub3JdLT4KLQkJCQkgICAgIGFjdGl2ZV9idWZdLnRpbWUpKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgLyogLi4uIG5vdyBoYW5kbGUgdGhlIG9kZCBmaWVsZCAqLwotICBpZiAoaW50X2Nzcl9yLmZsZC5GTERfRU5EX09ERCkKLSAgICB7Ci0gICAgICBSZWFkSTJDKGR0MzE1NV9sYmFzZVttaW5vcl0sIE9ERF9DU1IsICZpMmNfb2RkX2Nzci5yZWcpOwotCi0gICAgICAvKiBDbGVhciB0aGUgaW50ZXJydXB0PyAqLwotICAgICAgaW50X2Nzcl9yLmZsZC5GTERfRU5EX09ERCA9IDE7Ci0KLSAgICAgIGlmIChkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPmV2ZW5faGFwcGVuZWQgfHwKLQkgIChkdDMxNTVfc3RhdHVzW21pbm9yXS5zdGF0ZSAmIERUMzE1NV9TVEFURV9NT0RFKSA9PQotCSAgRFQzMTU1X1NUQVRFX0ZMRCkKLQl7Ci0JICBkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPmZyYW1lX2NvdW50Kys7Ci0JfQotCi0gICAgICBpZiAoZHQzMTU1X2ZidWZmZXJbbWlub3JdLT5zdG9wX2FjcXVpcmUgJiYKLQkgICBkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPmV2ZW5fc3RvcHBlZCkKLQl7Ci0JICBwcmludGsoS0VSTl9ERUJVRyAiZHQzMTU1OiAgc3RvcHBpbmcgb2RkLi5cbiIpOwotCSAgaWYgKGkyY19vZGRfY3NyLmZsZC5TTkdMX09ERCkKLQkgICAgewotCSAgICAgIC8qIGRpc2FibGUgaW50ZXJydXB0cyAqLwotCSAgICAgIGludF9jc3Jfci5mbGQuRkxEX0VORF9PRERfRU4gPSAwOwotCSAgICAgIGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlICY9IH4oRFQzMTU1X1NUQVRFX1NUT1B8MHhmZik7Ci0KLQkgICAgICAvKiBtYXJrIHRoZSBzeXN0ZW0gc3RvcHBlZDogKi8KLQkgICAgICBkdDMxNTVfc3RhdHVzW21pbm9yXS5zdGF0ZSB8PSBEVDMxNTVfU1RBVEVfSURMRTsKLQkgICAgICBkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPnN0b3BfYWNxdWlyZSA9IDA7Ci0JICAgICAgZHQzMTU1X2ZidWZmZXJbbWlub3JdLT5ldmVuX3N0b3BwZWQgPSAwOwotCi0JICAgICAgcHJpbnRrKEtFUk5fREVCVUcgImR0MzE1NTogIHN0YXRlIGlzIG5vdyAleFxuIiwKLQkJICAgICBkdDMxNTVfc3RhdHVzW21pbm9yXS5zdGF0ZSk7Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgewotCSAgICAgIGkyY19vZGRfY3NyLmZsZC5TTkdMX09ERCAgPSAxOwotCSAgICB9Ci0JfQotCi0gICAgICBXcml0ZU1SZWcoKGR0MzE1NV9sYmFzZVttaW5vcl0gKyBJTlRfQ1NSKSwgaW50X2Nzcl9yLnJlZyk7Ci0KLSAgICAgIC8qIGlmIHRoZSBvZGQgZmllbGQgaGFzIGJlZW4gYWNxdWlyZWQsIHRoZW4gICAgICovCi0gICAgICAvKiBjaGFuZ2UgdGhlIG5leHQgZG1hIGxvY2F0aW9uIGZvciBib3RoIGZpZWxkcyAqLwotICAgICAgLyogYW5kIHdha2UgdXAgdGhlIHByb2Nlc3MgaWYgc2xlZXBpbmcgICAgICAgICAgKi8KLSAgICAgIGlmIChkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPmV2ZW5faGFwcGVuZWQgfHwKLQkgICAoZHQzMTU1X3N0YXR1c1ttaW5vcl0uc3RhdGUgJiBEVDMxNTVfU1RBVEVfTU9ERSkgPT0KLQkgICBEVDMxNTVfU1RBVEVfRkxEKQotCXsKLQotCSAgbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7Ci0JICBsb2NhbF9pcnFfZGlzYWJsZSgpOwotCi0jaWZkZWYgREVCVUdfUVVFU19CCi0JICBwcmludHF1ZXMobWlub3IpOwotI2VuZGlmCi0JICBpZiAoZHQzMTU1X2ZidWZmZXJbbWlub3JdLT5uYnVmZmVycyA+IDIpCi0JICAgIHsKLQkgICAgICBpZiAoIWFyZV9lbXB0eV9idWZmZXJzKG1pbm9yKSkKLQkJewotCQkgIC8qIFRoZSBudW1iZXIgb2YgYWN0aXZlICsgbG9ja2VkIGJ1ZmZlcnMgaXMKLQkJICAgKiBhdCBtb3N0IDIsIGFuZCBzaW5jZSB0aGVyZSBhcmUgbm9uZSBlbXB0eSwgdGhlcmUKLQkJICAgKiBtdXN0IGJlIGF0IGxlYXN0IG5idWZmZXJzLTIgcmVhZHkgYnVmZmVycy4KLQkJICAgKiBUaGlzIGlzIHdoZXJlIHdlICdkcm9wIGZyYW1lcycsIG9sZGVzdCBmaXJzdC4gKi8KLQkJICBwdXNoX2VtcHR5KHBvcF9yZWFkeShtaW5vciksICBtaW5vcik7Ci0JCX0KLQotCSAgICAgIC8qIFRoZSByZWFkeV9xdWUgY2FuJ3QgYmUgZnVsbCwgc2luY2Ugd2Uga25vdwotCSAgICAgICAqIHRoZXJlIGlzIG9uZSBhY3RpdmUgYnVmZmVyIHJpZ2h0IG5vdywgc28gaXQncyBzYWZlCi0JICAgICAgICogdG8gcHVzaCB0aGUgYWN0aXZlIGJ1ZiBvbiB0aGUgcmVhZHlfcXVlLiAqLwotCSAgICAgIHB1c2hfcmVhZHkobWlub3IsIGR0MzE1NV9mYnVmZmVyW21pbm9yXS0+YWN0aXZlX2J1Zik7Ci0JICAgICAgLyogVGhlcmUncyBhdCBsZWFzdCAxIGVtcHR5IC0tIG1ha2UgaXQgYWN0aXZlICovCi0JICAgICAgZHQzMTU1X2ZidWZmZXJbbWlub3JdLT5hY3RpdmVfYnVmID0gcG9wX2VtcHR5KG1pbm9yKTsKLQkgICAgICBkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPgotCQlmcmFtZV9pbmZvW2R0MzE1NV9mYnVmZmVyW21pbm9yXS0+Ci0JCQkgICAgYWN0aXZlX2J1Zl0udGFnID0gKyt1bmlxdWVfdGFnOwotCSAgICB9Ci0JICBlbHNlIC8qIG5idWZmZXJzID09IDIsIHNwZWNpYWwgY2FzZSAqLwotCSAgICB7IC8qIFRoZXJlIGlzIDEgYWN0aXZlIGJ1ZmZlci4KLQkgICAgICAgKiBJZiB0aGVyZSBpcyBhIGxvY2tlZCBidWZmZXIsIGtlZXAgdGhlIGFjdGl2ZSBidWZmZXIKLQkgICAgICAgKiB0aGUgc2FtZSAtLSB0aGF0IG1lYW5zIHdlIGRyb3AgYSBmcmFtZS4KLQkgICAgICAgKi8KLQkgICAgICBpZiAoZHQzMTU1X2ZidWZmZXJbbWlub3JdLT5sb2NrZWRfYnVmIDwgMCkKLQkJewotCQkgIHB1c2hfcmVhZHkobWlub3IsCi0JCQkgICAgICBkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPmFjdGl2ZV9idWYpOwotCQkgIGlmIChhcmVfZW1wdHlfYnVmZmVycyhtaW5vcikpCi0JCSAgICB7Ci0JCSAgICAgIGR0MzE1NV9mYnVmZmVyW21pbm9yXS0+YWN0aXZlX2J1ZiA9Ci0JCQlwb3BfZW1wdHkobWlub3IpOwotCQkgICAgfQotCQkgIGVsc2UKLQkJICAgIHsgLyogbm8gZW1wdHkgb3IgbG9ja2VkIGJ1ZmZlcnMsIHNvIHVzZSBhIHJlYWR5YnVmICovCi0JCSAgICAgIGR0MzE1NV9mYnVmZmVyW21pbm9yXS0+YWN0aXZlX2J1ZiA9Ci0JCQlwb3BfcmVhZHkobWlub3IpOwotCQkgICAgfQotCQl9Ci0JICAgIH0KLQotI2lmZGVmIERFQlVHX1FVRVNfQgotCSAgcHJpbnRxdWVzKG1pbm9yKTsKLSNlbmRpZgotCi0JICBkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPmV2ZW5faGFwcGVuZWQgPSAwOwotCi0JICB3YWtlX3VwX2ludGVycnVwdGlibGUoJmR0MzE1NV9yZWFkX3dhaXRfcXVldWVbbWlub3JdKTsKLQotCSAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCX0KLQotCi0gICAgICAvKiBTZXQgdXAgdGhlIERNQSBhZGRyZXNzIGZvciB0aGUgbmV4dCBmcmFtZS9maWVsZCAqLwotICAgICAgYnVmZmVyX2FkZHIgPSBkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPgotCWZyYW1lX2luZm9bZHQzMTU1X2ZidWZmZXJbbWlub3JdLT5hY3RpdmVfYnVmXS5hZGRyOwotICAgICAgaWYgKChkdDMxNTVfc3RhdHVzW21pbm9yXS5zdGF0ZSAmIERUMzE1NV9TVEFURV9NT0RFKSA9PQotCSAgIERUMzE1NV9TVEFURV9GTEQpCi0JewotCSAgV3JpdGVNUmVnKChkdDMxNTVfbGJhc2VbbWlub3JdICsgRVZFTl9ETUFfU1RBUlQpLCBidWZmZXJfYWRkcik7Ci0JfQotICAgICAgZWxzZQotCXsKLQkgIFdyaXRlTVJlZygoZHQzMTU1X2xiYXNlW21pbm9yXSArIEVWRU5fRE1BX1NUQVJUKSwgYnVmZmVyX2FkZHIpOwotCi0JICBXcml0ZU1SZWcoKGR0MzE1NV9sYmFzZVttaW5vcl0gKyBPRERfRE1BX1NUQVJUKSwgYnVmZmVyX2FkZHIKLQkJICAgICsgZHQzMTU1X3N0YXR1c1ttaW5vcl0uY29uZmlnLmNvbHMpOwotCX0KLQotICAgICAgLyogRG8gZXJyb3IgY2hlY2tpbmcgKi8KLSAgICAgIGkyY19vZGRfY3NyLmZsZC5ET05FX09ERCA9IDE7Ci0gICAgICBpZiAoaTJjX29kZF9jc3IuZmxkLkVSUk9SX09ERCkKLQlkdDMxNTVfZXJybm8gPSBEVF9FUlJfT1ZFUlJVTjsKLQotICAgICAgV3JpdGVJMkMoZHQzMTU1X2xiYXNlW21pbm9yXSwgT0REX0NTUiwgaTJjX29kZF9jc3IucmVnKTsKLQotICAgICAgcmV0dXJuOwotICAgIH0KLSAgLyogSWYgd2UgZ2V0IGhlcmUsIHRoZSBPZGQgRmllbGQgd2Fzbid0IGl0IGVpdGhlci4uLiAqLwotICBwcmludGsoIm5laXRoZXIgZXZlbiBub3Igb2RkLiAgc2hhcmVkIHBlcmhhcHM/XG4iKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBpbml0X2lzcihpbnQgbWlub3IpCi0gKiAgIHR1cm5zIG9uIGludGVydXB0IGdlbmVyYXRpb24gZm9yIHRoZSBjYXJkCi0gKiAgIGRlc2lnbmF0ZWQgYnkgIm1pbm9yIi4KLSAqICAgSXQgaXMgY2FsbGVkICpvbmx5KiBmcm9tIGluc2lkZSBpb2N0bCgpLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgZHQzMTU1X2luaXRfaXNyKGludCBtaW5vcikKLXsKLSAgY29uc3QgdTMyIHN0cmlkZSA9ICBkdDMxNTVfc3RhdHVzW21pbm9yXS5jb25maWcuY29sczsKLQotICBzd2l0Y2ggKGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlICYgRFQzMTU1X1NUQVRFX01PREUpCi0gICAgewotICAgIGNhc2UgRFQzMTU1X1NUQVRFX0ZMRDoKLSAgICAgIHsKLQlldmVuX2RtYV9zdGFydF9yICA9IGR0MzE1NV9zdGF0dXNbbWlub3JdLgotCSAgZmJ1ZmZlci5mcmFtZV9pbmZvW2R0MzE1NV9zdGF0dXNbbWlub3JdLmZidWZmZXIuYWN0aXZlX2J1Zl0uYWRkcjsKLQlldmVuX2RtYV9zdHJpZGVfciA9IDA7Ci0Jb2RkX2RtYV9zdHJpZGVfciAgPSAwOwotCi0JV3JpdGVNUmVnKChkdDMxNTVfbGJhc2VbbWlub3JdICsgRVZFTl9ETUFfU1RBUlQpLAotCQkgIGV2ZW5fZG1hX3N0YXJ0X3IpOwotCVdyaXRlTVJlZygoZHQzMTU1X2xiYXNlW21pbm9yXSArIEVWRU5fRE1BX1NUUklERSksCi0JCSAgZXZlbl9kbWFfc3RyaWRlX3IpOwotCVdyaXRlTVJlZygoZHQzMTU1X2xiYXNlW21pbm9yXSArIE9ERF9ETUFfU1RSSURFKSwKLQkJICBvZGRfZG1hX3N0cmlkZV9yKTsKLQlicmVhazsKLSAgICAgIH0KLQotICAgIGNhc2UgRFQzMTU1X1NUQVRFX0ZSQU1FOgotICAgIGRlZmF1bHQ6Ci0gICAgICB7Ci0JZXZlbl9kbWFfc3RhcnRfciAgPSBkdDMxNTVfc3RhdHVzW21pbm9yXS4KLQkgIGZidWZmZXIuZnJhbWVfaW5mb1tkdDMxNTVfc3RhdHVzW21pbm9yXS5mYnVmZmVyLmFjdGl2ZV9idWZdLmFkZHI7Ci0Jb2RkX2RtYV9zdGFydF9yICAgPSAgZXZlbl9kbWFfc3RhcnRfciArIHN0cmlkZTsKLQlldmVuX2RtYV9zdHJpZGVfciA9ICBzdHJpZGU7Ci0Jb2RkX2RtYV9zdHJpZGVfciAgPSAgc3RyaWRlOwotCi0JV3JpdGVNUmVnKChkdDMxNTVfbGJhc2VbbWlub3JdICsgRVZFTl9ETUFfU1RBUlQpLAotCQkgIGV2ZW5fZG1hX3N0YXJ0X3IpOwotCVdyaXRlTVJlZygoZHQzMTU1X2xiYXNlW21pbm9yXSArIE9ERF9ETUFfU1RBUlQpLAotCQkgIG9kZF9kbWFfc3RhcnRfcik7Ci0JV3JpdGVNUmVnKChkdDMxNTVfbGJhc2VbbWlub3JdICsgRVZFTl9ETUFfU1RSSURFKSwKLQkJICBldmVuX2RtYV9zdHJpZGVfcik7Ci0JV3JpdGVNUmVnKChkdDMxNTVfbGJhc2VbbWlub3JdICsgT0REX0RNQV9TVFJJREUpLAotCQkgIG9kZF9kbWFfc3RyaWRlX3IpOwotCWJyZWFrOwotICAgICAgfQotICAgIH0KLQotICAvKiA1MC82MCBIeiBzaG91bGQgYmUgc2V0IGJlZm9yZSB0aGlzIHBvaW50IGJ1dCBsZXQncyBtYWtlIHN1cmUgaXQgaXMgKi8KLSAgLyogcmlnaHQgYW55d2F5ICovCi0KLSAgUmVhZEkyQyhkdDMxNTVfbGJhc2VbbWlub3JdLCBDU1IyLCAmaTJjX2NzcjIucmVnKTsKLSAgaTJjX2NzcjIuZmxkLkhaNTAgPSBGT1JNQVQ1MEhaOwotICBXcml0ZUkyQyhkdDMxNTVfbGJhc2VbbWlub3JdLCBDU1IyLCBpMmNfY3NyMi5yZWcpOwotCi0gIC8qIGVuYWJsZSBidXNtYXN0ZXIgY2hpcCwgY2xlYXIgZmxhZ3MgKi8KLQotICAvKgotICAgKiBUT0RPOgotICAgKiBzaG91bGRuJ3Qgd2UgYmUgY29uY2VyZWQgd2l0aCBjb250aW51b3VzIHZhbHVlcyBvZgotICAgKiBEVDMxNTVfU05BUCAmIERUMzE1NV9BQ1EgaGVyZT8gKFNTKQotICAgKi8KLQotICBjc3IxX3IucmVnICAgICAgICAgICAgICAgID0gMDsKLSAgY3NyMV9yLmZsZC5DQVBfQ09OVF9FVkUgICA9IDE7IC8qIHVzZSBjb250aW51b3VzIGNhcHR1cmUgYml0cyB0byAqLwotICBjc3IxX3IuZmxkLkNBUF9DT05UX09ERCAgID0gMTsgLyogZW5hYmxlICovCi0gIGNzcjFfci5mbGQuRkxEX0ROX0VWRSAgICAgPSAxOyAvKiB3cml0aW5nIGEgMSBjbGVhcnMgZmxhZ3MgKi8KLSAgY3NyMV9yLmZsZC5GTERfRE5fT0REICAgICA9IDE7Ci0gIGNzcjFfci5mbGQuU1JTVCAgICAgICAgICAgPSAxOyAvKiByZXNldCAgICAgICAgLSBtdXN0IGJlIDEgKi8KLSAgY3NyMV9yLmZsZC5GSUZPX0VOICAgICAgICA9IDE7IC8qIGZpZm8gY29udHJvbCAtIG11c3QgYmUgMSAqLwotICBjc3IxX3IuZmxkLkZMRF9DUlBUX0VWRSAgID0gMTsgLyogd3JpdGluZyBhIDEgY2xlYXJzIGZsYWdzICovCi0gIGNzcjFfci5mbGQuRkxEX0NSUFRfT0REICAgPSAxOwotCi0gIFdyaXRlTVJlZygoZHQzMTU1X2xiYXNlW21pbm9yXSArIENTUjEpLGNzcjFfci5yZWcpOwotCi0gIC8qIEVuYWJsZSBpbnRlcnJ1cHRzIGF0IHRoZSBlbmQgb2YgZWFjaCBmaWVsZCAqLwotCi0gIGludF9jc3Jfci5yZWcgPSAwOwotICBpbnRfY3NyX3IuZmxkLkZMRF9FTkRfRVZFX0VOID0gMTsKLSAgaW50X2Nzcl9yLmZsZC5GTERfRU5EX09ERF9FTiA9IDE7Ci0gIGludF9jc3Jfci5mbGQuRkxEX1NUQVJUX0VOID0gMDsKLQotICBXcml0ZU1SZWcoKGR0MzE1NV9sYmFzZVttaW5vcl0gKyBJTlRfQ1NSKSwgaW50X2Nzcl9yLnJlZyk7Ci0KLSAgLyogc3RhcnQgaW50ZXJuYWwgQlVTWSBiaXRzICovCi0KLSAgUmVhZEkyQyhkdDMxNTVfbGJhc2VbbWlub3JdLCBDU1IyLCAmaTJjX2NzcjIucmVnKTsKLSAgaTJjX2NzcjIuZmxkLkJVU1lfT0REICA9IDE7Ci0gIGkyY19jc3IyLmZsZC5CVVNZX0VWRSAgPSAxOwotICBXcml0ZUkyQyhkdDMxNTVfbGJhc2VbbWlub3JdLCBDU1IyLCBpMmNfY3NyMi5yZWcpOwotCi0gIC8qIE5vdyBpdHMgdXAgdG8gdGhlIGludGVycnVwdCByb3V0aW5lISEgKi8KLQotICByZXR1cm47Ci19Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBpb2N0bCgpCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBkdDMxNTVfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCXN0cnVjdCBmaWxlICpmaWxlLAotCQkJdW5zaWduZWQgaW50IGNtZCwKLQkJCXVuc2lnbmVkIGxvbmcgYXJnKQotewotICBpbnQgbWlub3IgPSBNSU5PUihpbm9kZS0+aV9yZGV2KTsgLyogV2hhdCBkZXZpY2UgYXJlIHdlIGlvY3RsKCknaW5nPyAqLwotCi0gIGlmIChtaW5vciA+PSBNQVhCT0FSRFMgfHwgbWlub3IgPCAwKQotICAgIHJldHVybiAtRU5PREVWOwotCi0gIC8qIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZCBjb21tYW5kICovCi0gIGlmIChfSU9DX05SKGNtZCkgPiBEVDMxNTVfSU9DX01BWE5SKQotICAgIHsKLSAgICAgIHByaW50aygiRFQzMTU1OiBpbnZhbGlkIElPQ1RMKDB4JXgpXG4iLGNtZCk7Ci0gICAgICBwcmludGsoIkRUMzE1NTogVmFsaWQgY29tbWFuZHMgKDB4JXgpLCAoMHgleCksICgweCV4KSwgKDB4JXgpLCAoMHgleClcbiIsCi0JICAgICAodW5zaWduZWQgaW50KURUMzE1NV9HRVRfQ09ORklHLAotCSAgICAgKHVuc2lnbmVkIGludClEVDMxNTVfU0VUX0NPTkZJRywKLQkgICAgICh1bnNpZ25lZCBpbnQpRFQzMTU1X1NUQVJULAotCSAgICAgKHVuc2lnbmVkIGludClEVDMxNTVfU1RPUCwKLQkgICAgICh1bnNpZ25lZCBpbnQpRFQzMTU1X0ZMVVNIKTsKLSAgICAgIHJldHVybiAtRUlOVkFMOwotICAgIH0KLQotICBzd2l0Y2ggKGNtZCkKLSAgICB7Ci0gICAgY2FzZSBEVDMxNTVfU0VUX0NPTkZJRzoKLSAgICAgIHsKLQlpZiAoZHQzMTU1X3N0YXR1c1ttaW5vcl0uc3RhdGUgIT0gRFQzMTU1X1NUQVRFX0lETEUpCi0JICByZXR1cm4gLUVCVVNZOwotCi0JewotCSAgc3RydWN0IGR0MzE1NV9jb25maWcgdG1wOwotCSAgaWYgKGNvcHlfZnJvbV91c2VyKCh2b2lkICopJnRtcCwgKHZvaWQgKikgYXJnLCBzaXplb2YodG1wKSkpCi0JICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0JICAvKiBjaGVjayBmb3IgdmFsaWQgc2V0dGluZ3MgKi8KLQkgIGlmICh0bXAucm93cyA+IERUMzE1NV9NQVhfUk9XUyB8fAotCSAgICAgIHRtcC5jb2xzID4gRFQzMTU1X01BWF9DT0xTIHx8Ci0JICAgICAgKHRtcC5hY3FfbW9kZSAhPSBEVDMxNTVfTU9ERV9GUkFNRSAmJgotCSAgICAgICB0bXAuYWNxX21vZGUgIT0gRFQzMTU1X01PREVfRklFTEQpIHx8Ci0JICAgICAgKHRtcC5jb250aW51b3VzICE9IERUMzE1NV9TTkFQICYmCi0JICAgICAgIHRtcC5jb250aW51b3VzICE9IERUMzE1NV9BQ1EpKQotCSAgICB7Ci0JICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0JICAgIH0KLQkgIGR0MzE1NV9zdGF0dXNbbWlub3JdLmNvbmZpZyA9IHRtcDsKLQl9Ci0JcmV0dXJuIDA7Ci0gICAgICB9Ci0gICAgY2FzZSBEVDMxNTVfR0VUX0NPTkZJRzoKLSAgICAgIHsKLQlpZiAoY29weV90b191c2VyKCh2b2lkICopIGFyZywgKHZvaWQgKikgJmR0MzE1NV9zdGF0dXNbbWlub3JdLAotCQkgICAgIHNpemVvZihzdHJ1Y3QgZHQzMTU1X3N0YXR1cykpKQotCSAgICByZXR1cm4gLUVGQVVMVDsKLQlyZXR1cm4gMDsKLSAgICAgIH0KLSAgICBjYXNlIERUMzE1NV9GTFVTSDogLyogRmx1c2hlcyB0aGUgYnVmZmVycyAtLSBlbnN1cmVzIGZyZXNoIGRhdGEgKi8KLSAgICAgIHsKLQlpZiAoZHQzMTU1X3N0YXR1c1ttaW5vcl0uc3RhdGUgIT0gRFQzMTU1X1NUQVRFX0lETEUpCi0JICByZXR1cm4gLUVCVVNZOwotCXJldHVybiBkdDMxNTVfZmx1c2gobWlub3IpOwotICAgICAgfQotICAgIGNhc2UgRFQzMTU1X1NUT1A6Ci0gICAgICB7Ci0JaWYgKGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlICYgRFQzMTU1X1NUQVRFX1NUT1AgfHwKLQkgICAgZHQzMTU1X3N0YXR1c1ttaW5vcl0uZmJ1ZmZlci5zdG9wX2FjcXVpcmUpCi0JICByZXR1cm4gLUVCVVNZOwotCi0JaWYgKGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlID09IERUMzE1NV9TVEFURV9JRExFKQotCSAgcmV0dXJuIDA7Ci0KLQlxdWlja19zdG9wKG1pbm9yKTsKLQlpZiAoY29weV90b191c2VyKCh2b2lkICopIGFyZywgKHZvaWQgKikgJmR0MzE1NV9zdGF0dXNbbWlub3JdLAotCQkgICAgIHNpemVvZihzdHJ1Y3QgZHQzMTU1X3N0YXR1cykpKQotCSAgICByZXR1cm4gLUVGQVVMVDsKLQlyZXR1cm4gMDsKLSAgICAgIH0KLSAgICBjYXNlIERUMzE1NV9TVEFSVDoKLSAgICAgIHsKLQlpZiAoZHQzMTU1X3N0YXR1c1ttaW5vcl0uc3RhdGUgIT0gRFQzMTU1X1NUQVRFX0lETEUpCi0JICByZXR1cm4gLUVCVVNZOwotCi0JZHQzMTU1X3N0YXR1c1ttaW5vcl0uZmJ1ZmZlci5zdG9wX2FjcXVpcmUgPSAwOwotCWR0MzE1NV9zdGF0dXNbbWlub3JdLmZidWZmZXIuZnJhbWVfY291bnQgPSAwOwotCi0JLyogU2V0IHRoZSBNT0RFIGluIHRoZSBzdGF0dXMgLS0gd2UgZGVmYXVsdCB0byBGUkFNRSAqLwotCWlmIChkdDMxNTVfc3RhdHVzW21pbm9yXS5jb25maWcuYWNxX21vZGUgPT0gRFQzMTU1X01PREVfRklFTEQpCi0JICB7Ci0JICAgIGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlID0gRFQzMTU1X1NUQVRFX0ZMRDsKLQkgIH0KLQllbHNlCi0JICB7Ci0JICAgIGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlID0gRFQzMTU1X1NUQVRFX0ZSQU1FOwotCSAgfQotCi0JZHQzMTU1X2luaXRfaXNyKG1pbm9yKTsKLQlpZiAoY29weV90b191c2VyKCh2b2lkICopIGFyZywgKHZvaWQgKikgJmR0MzE1NV9zdGF0dXNbbWlub3JdLAotCQkgICAgICBzaXplb2Yoc3RydWN0IGR0MzE1NV9zdGF0dXMpKSkKLQkgICAgcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci0gICAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHsKLQlwcmludGsoIkRUMzE1NTogaW52YWxpZCBJT0NUTCgweCV4KVxuIixjbWQpOwotICAgICAgcHJpbnRrKCJEVDMxNTU6IFZhbGlkIGNvbW1hbmRzICgweCV4KSwgKDB4JXgpLCAoMHgleCksICgweCV4KSwgKDB4JXgpXG4iLAotCSAgICAgKHVuc2lnbmVkIGludClEVDMxNTVfR0VUX0NPTkZJRywKLQkgICAgICh1bnNpZ25lZCBpbnQpRFQzMTU1X1NFVF9DT05GSUcsCi0JICAgICBEVDMxNTVfU1RBUlQsIERUMzE1NV9TVE9QLCBEVDMxNTVfRkxVU0gpOwotCXJldHVybiAtRU5PU1lTOwotICAgICAgfQotICAgIH0KLSAgcmV0dXJuIC1FTk9TWVM7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogbW1hcCgpCi0gKgotICogb25seSBhbGxvdyB0aGUgdXNlciB0byBtbWFwIHRoZSByZWdpc3RlcnMgYW5kIGJ1ZmZlcgotICogSXQgaXMgcXVpdGUgcG9zc2libGUgdGhhdCB0aGlzIGlzIGJyb2tlbiwgc2luY2UgdGhlCi0gKiBhZGRpdGlvbiBvZiBvZiB0aGUgY2FwYWNpdHkgZm9yIHR3byBjYXJkcyEhISEhISEhCi0gKiBJdCAqbG9va3MqIGxpa2UgaXQgc2hvdWxkIHdvcmsgYnV0IHNpbmNlIEknbSBub3QKLSAqIHN1cmUgaG93IHRvIHVzZSBpdCwgSSdtIG5vdCBhY3R1YWxseSBzdXJlLiAoTkpDPyBkaXR0byBieSBTUykKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgZHQzMTU1X21tYXAgKHN0cnVjdCBmaWxlICogZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hKQotewotICAvKiB3aGljaCBkZXZpY2UgYXJlIHdlIG1tYXBwaW5nPyAqLwotICBpbnQJCQkJbWlub3IgPSBNSU5PUihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9yZGV2KTsKLSAgdW5zaWduZWQgbG9uZwlvZmZzZXQ7Ci0gIG9mZnNldCA9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKLQotICBpZiAob2Zmc2V0ID49IF9fcGEoaGlnaF9tZW1vcnkpIHx8IChmaWxlLT5mX2ZsYWdzICYgT19TWU5DKSkKLSAgICB2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPOwotCi0gIC8qIERvbid0IHRyeSB0byBzd2FwIG91dCBwaHlzaWNhbCBwYWdlcy4uICovCi0gIHZtYS0+dm1fZmxhZ3MgfD0gVk1fUkVTRVJWRUQ7Ci0KLSAgLyogdGhleSBhcmUgbWFwcGluZyB0aGUgcmVnaXN0ZXJzIG9yIHRoZSBidWZmZXIgKi8KLSAgaWYgKChvZmZzZXQgPT0gZHQzMTU1X3N0YXR1c1ttaW5vcl0ucmVnX2FkZHIgJiYKLSAgICAgICB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQgPT0gUENJX1BBR0VfU0laRSkgfHwKLSAgICAgIChvZmZzZXQgPT0gZHQzMTU1X3N0YXR1c1ttaW5vcl0ubWVtX2FkZHIgJiYKLSAgICAgICB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQgPT0gZHQzMTU1X3N0YXR1c1ttaW5vcl0ubWVtX3NpemUpKQotICAgIHsKLSAgICAgIGlmIChyZW1hcF9wZm5fcmFuZ2Uodm1hLAotCQkJdm1hLT52bV9zdGFydCwKLQkJCW9mZnNldCA+PiBQQUdFX1NISUZULAotCQkJdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAotCQkJdm1hLT52bV9wYWdlX3Byb3QpKSB7Ci0JICBwcmludGsoIkRUMzE1NTogcmVtYXBfcGFnZV9yYW5nZSgpIGZhaWxlZC5cbiIpOwotCSAgcmV0dXJuIC1FQUdBSU47Ci0JfQotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIHByaW50aygiRFQzMTU1OiBkdDMxNTVfbW1hcCgpIGJhZCBjYWxsLlxuIik7Ci0gICAgICByZXR1cm4gLUVOWElPOwotICAgIH0KLQotICByZXR1cm4gMDsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIG9wZW4oKQotICoKLSAqIE91ciBzcGVjaWFsIG9wZW4gY29kZS4KLSAqIE1PRF9JTkNfVVNFX0NPVU5UIG1ha2Ugc3VyZSB0aGF0IHRoZSBkcml2ZXIgbWVtb3J5IGlzIG5vdCBmcmVlZAotICogd2hpbGUgdGhlIGRldmljZSBpcyBpbiB1c2UuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IGR0MzE1NV9vcGVuKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlKiBmaWxlcCkKLXsKLSAgaW50IG1pbm9yID0gTUlOT1IoaW5vZGUtPmlfcmRldik7IC8qIHdoYXQgZGV2aWNlIGFyZSB3ZSBvcGVuaW5nPyAqLwotICBpZiAoZHQzMTU1X2Rldl9vcGVuW21pbm9yXSkgewotICAgIHByaW50ayAoIkRUMzE1NTogIEFscmVhZHkgb3BlbmVkIGJ5IGFub3RoZXIgcHJvY2Vzcy5cbiIpOwotICAgIHJldHVybiAtRUJVU1k7Ci0gIH0KLQotICBpZiAoZHQzMTU1X3N0YXR1c1ttaW5vcl0uZGV2aWNlX2luc3RhbGxlZD09MCkKLSAgICB7Ci0gICAgICBwcmludGsoIkRUMzE1NSBPcGVuIEVycm9yOiBObyBzdWNoIGRldmljZSBkdDMxNTUgbWlub3IgbnVtYmVyICVkXG4iLAotCSAgICAgbWlub3IpOwotICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gIGlmIChkdDMxNTVfc3RhdHVzW21pbm9yXS5zdGF0ZSAhPSBEVDMxNTVfU1RBVEVfSURMRSkgewotICAgIHByaW50ayAoIkRUMzE1NTogIE5vdCBpbiBpZGxlIHN0YXRlIChzdGF0ZSA9ICV4KVxuIiwKLQkgICAgZHQzMTU1X3N0YXR1c1ttaW5vcl0uc3RhdGUpOwotICAgIHJldHVybiAtRUJVU1k7Ci0gIH0KLQotICBwcmludGsoIkRUMzE1NTogRGV2aWNlIG9wZW5lZC5cbiIpOwotCi0gIGR0MzE1NV9kZXZfb3BlblttaW5vcl0gPSAxIDsKLQotICBkdDMxNTVfZmx1c2gobWlub3IpOwotCi0gIC8qIERpc2FibGUgQUxMIGludGVycnVwdHMgKi8KLSAgaW50X2Nzcl9yLnJlZyA9IDA7Ci0gIFdyaXRlTVJlZygoZHQzMTU1X2xiYXNlW21pbm9yXSArIElOVF9DU1IpLCBpbnRfY3NyX3IucmVnKTsKLQotICBpbml0X3dhaXRxdWV1ZV9oZWFkKCYoZHQzMTU1X3JlYWRfd2FpdF9xdWV1ZVttaW5vcl0pKTsKLQotICByZXR1cm4gMDsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGNsb3NlKCkKLSAqCi0gKiBOb3cgZGVjcmVtZW50IHRoZSB1c2UgY291bnQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBkdDMxNTVfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwKQotewotICBpbnQgbWlub3I7Ci0KLSAgbWlub3IgPSBNSU5PUihpbm9kZS0+aV9yZGV2KTsgLyogd2hpY2ggZGV2aWNlIGFyZSB3ZSBjbG9zaW5nICovCi0gIGlmICghZHQzMTU1X2Rldl9vcGVuW21pbm9yXSkKLSAgICB7Ci0gICAgICBwcmludGsoIkRUMzE1NTogYXR0ZW1wdCB0byBDTE9TRSBhIG5vdCBPUEVOIGRldmljZVxuIik7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgZHQzMTU1X2Rldl9vcGVuW21pbm9yXSA9IDA7Ci0KLSAgICAgIGlmIChkdDMxNTVfc3RhdHVzW21pbm9yXS5zdGF0ZSAhPSBEVDMxNTVfU1RBVEVfSURMRSkKLQl7Ci0JICBxdWlja19zdG9wKG1pbm9yKTsKLQl9Ci0gICAgfQotICByZXR1cm4gMDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiByZWFkKCkKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3NpemVfdCBkdDMxNTVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZXAsIGNoYXIgX191c2VyICpidWYsCi0JCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLSAgLyogd2hpY2ggZGV2aWNlIGFyZSB3ZSByZWFkaW5nIGZyb20/ICovCi0gIGludAkJbWlub3IgPSBNSU5PUihmaWxlcC0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcmRldik7Ci0gIHUzMgkJb2Zmc2V0OwotICBpbnQJCWZyYW1lX2luZGV4OwotICBzdHJ1Y3QgZnJhbWVfaW5mbwkqZnJhbWVfaW5mbzsKLQotICAvKiBUT0RPOiB0aGlzIHNob3VsZCBjaGVjayB0aGUgZXJyb3IgZmxhZyBhbmQgKi8KLSAgLyogICByZXR1cm4gYW4gZXJyb3Igb24gaGFyZHdhcmUgZmFpbHVyZXMgKi8KLSAgaWYgKGNvdW50ICE9IHNpemVvZihzdHJ1Y3QgZHQzMTU1X3JlYWQpKQotICAgIHsKLSAgICAgIHByaW50aygiRFQzMTU1IEVSUk9SIChOSkMpOiBjb3VudCBpcyBub3QgcmlnaHRcbiIpOwotICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgfQotCi0KLSAgLyogSGFjayBoZXJlIC0tIEknbSBnb2luZyB0byBhbGxvdyByZWFkaW5nIGV2ZW4gd2hlbiBpZGxlLgotICAgKiB0aGlzIGlzIHNvIHRoYXQgdGhlIGZyYW1lcyBjYW4gYmUgcmVhZCBhZnRlciBTVE9QIGhhcwotICAgKiBiZWVuIGNhbGxlZC4gIExlYXZpbmcgaXQgaGVyZSwgY29tbWVudGVkIG91dCwgYXMgYSByZW1pbmRlcgotICAgKiBmb3IgYSBzaG9ydCB3aGlsZSB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHByb2JsZW1zLgotICAgKiBOb3RlIHRoYXQgaWYgdGhlIGRyaXZlciBpcyBub3Qgb3BlbmVkIGluIG5vbl9ibG9ja2luZyBtb2RlLAotICAgKiBhbmQgdGhlIGRldmljZSBpcyBpZGxlLCB0aGVuIGl0IGNvdWxkIHNpdCBoZXJlIGZvcmV2ZXIhICovCi0KLSAgLyogIGlmIChkdDMxNTVfc3RhdHVzW21pbm9yXS5zdGF0ZSA9PSBEVDMxNTVfU1RBVEVfSURMRSkqLwotICAvKiAgICByZXR1cm4gLUVCVVNZOyovCi0KLSAgLyogbm9uLWJsb2NraW5nIHJlYWRzIHNob3VsZCByZXR1cm4gaWYgbm8gZGF0YSAqLwotICBpZiAoZmlsZXAtPmZfZmxhZ3MgJiBPX05ERUxBWSkKLSAgICB7Ci0gICAgICBpZiAoKGZyYW1lX2luZGV4ID0gZHQzMTU1X2dldF9yZWFkeV9idWZmZXIobWlub3IpKSA8IDApIHsKLQkvKnByaW50aygiZHQzMTU1OiAgbm8gYnVmZmVycyBhdmFpbGFibGUgKD8pXG4iKTsqLwotCS8qIAkJcHJpbnRxdWVzKG1pbm9yKTsgKi8KLQlyZXR1cm4gLUVBR0FJTjsKLSAgICAgIH0KLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICAvKgotICAgICAgICogc2xlZXAgdGlsbCBkYXRhIGFycml2ZXMgLCBvciB3ZSBnZXQgaW50ZXJydXB0ZWQuCi0gICAgICAgKiBOb3RlIHRoYXQgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKCkgZG9lcyBub3QgYWN0dWFsbHkKLSAgICAgICAqIHNsZWVwL3dhaXQgaWYgaXQncyBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUgdXBvbiBlbnRyeS4KLSAgICAgICAqLwotICAgICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGR0MzE1NV9yZWFkX3dhaXRfcXVldWVbbWlub3JdLAotCQkJICAgICAgIChmcmFtZV9pbmRleCA9IGR0MzE1NV9nZXRfcmVhZHlfYnVmZmVyKG1pbm9yKSkKLQkJCSAgICAgICA+PSAwKTsKLQotICAgICAgaWYgKGZyYW1lX2luZGV4IDwgMCkKLQl7Ci0JICBwcmludGsgKCJEVDMxNTU6IHJlYWQ6IGludGVycnVwdGVkXG4iKTsKLQkgIHF1aWNrX3N0b3AgKG1pbm9yKTsKLQkgIHByaW50cXVlcyhtaW5vcik7Ci0JICByZXR1cm4gLUVJTlRSOwotCX0KLSAgICB9Ci0KLSAgZnJhbWVfaW5mbyA9ICZkdDMxNTVfc3RhdHVzW21pbm9yXS5mYnVmZmVyLmZyYW1lX2luZm9bZnJhbWVfaW5kZXhdOwotCi0gIC8qIG1ha2UgdGhpcyBhbiBvZmZzZXQgKi8KLSAgb2Zmc2V0ID0gZnJhbWVfaW5mby0+YWRkciAtIGR0MzE1NV9zdGF0dXNbbWlub3JdLm1lbV9hZGRyOwotCi0gIHB1dF91c2VyKG9mZnNldCwgKHVuc2lnbmVkIGludCAqKSBidWYpOwotICBidWYgKz0gc2l6ZW9mKHUzMik7Ci0gIHB1dF91c2VyKGR0MzE1NV9zdGF0dXNbbWlub3JdLmZidWZmZXIuZnJhbWVfY291bnQsICh1bnNpZ25lZCBpbnQgKikgYnVmKTsKLSAgYnVmICs9IHNpemVvZih1MzIpOwotICBwdXRfdXNlcihkdDMxNTVfc3RhdHVzW21pbm9yXS5zdGF0ZSwgKHVuc2lnbmVkIGludCAqKSBidWYpOwotICBidWYgKz0gc2l6ZW9mKHUzMik7Ci0gIGlmIChjb3B5X3RvX3VzZXIoYnVmLCBmcmFtZV9pbmZvLCBzaXplb2YoKmZyYW1lX2luZm8pKSkKLSAgICAgIHJldHVybiAtRUZBVUxUOwotCi0gIHJldHVybiBzaXplb2Yoc3RydWN0IGR0MzE1NV9yZWFkKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBkdDMxNTVfcG9sbCAoc3RydWN0IGZpbGUgKiBmaWxwLCBwb2xsX3RhYmxlICp3YWl0KQotewotICBpbnQgbWlub3IgPSBNSU5PUihmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9yZGV2KTsKLQotICBpZiAoIWlzX3JlYWR5X2J1Zl9lbXB0eShtaW5vcikpCi0gICAgcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07Ci0KLSAgcG9sbF93YWl0IChmaWxwLCAmZHQzMTU1X3JlYWRfd2FpdF9xdWV1ZVttaW5vcl0sIHdhaXQpOwotCi0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgbG9uZwotZHQzMTU1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlpbnQgcmV0OwotCi0JbG9ja19rZXJuZWwoKTsKLQlyZXQgPSBkdDMxNTVfaW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwgY21kLCBhcmcpOwotCXVubG9ja19rZXJuZWwoKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZmlsZSBvcGVyYXRpb25zIHN1cHBvcnRlZCBieSBEVDMxNTUgZHJpdmVyCi0gKiAgbmVlZGVkIGJ5IGluaXRfbW9kdWxlCi0gKiAgcmVnaXN0ZXJfY2hyZGV2Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdDMxNTVfZm9wcyA9IHsKLQkucmVhZAkJPSBkdDMxNTVfcmVhZCwKLQkudW5sb2NrZWRfaW9jdGwJPSBkdDMxNTVfdW5sb2NrZWRfaW9jdGwsCi0JLm1tYXAJCT0gZHQzMTU1X21tYXAsCi0JLnBvbGwJCT0gZHQzMTU1X3BvbGwsCi0JLm9wZW4JCT0gZHQzMTU1X29wZW4sCi0JLnJlbGVhc2UJPSBkdDMxNTVfY2xvc2UKLX07Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBmaW5kX1BDSSgpOwotICoKLSAqIFBDSSBoYXMgYmVlbiB0b3RhbGx5IHJld29ya2VkIGluIDIuMS4uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IGZpbmRfUENJICh2b2lkKQotewotICBzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IE5VTEw7Ci0gIGludCBlcnJvciwgcGNpX2luZGV4ID0gMDsKLSAgdW5zaWduZWQgc2hvcnQgcmV2X2RldmljZTsKLSAgdW5zaWduZWQgbG9uZyBiYXNlOwotICB1bnNpZ25lZCBjaGFyIGlycTsKLQotICB3aGlsZSAoKHBjaV9kZXYgPSBwY2lfZ2V0X2RldmljZQotCSAgKERUMzE1NV9WRU5ET1JJRCwgRFQzMTU1X0RFVklDRUlELCBwY2lfZGV2KSkgIT0gTlVMTCkKLSAgICB7Ci0gICAgICBwY2lfaW5kZXggKys7Ci0KLSAgICAgIC8qIElzIGl0IHJlYWxseSB0aGVyZT8gKi8KLSAgICAgIGlmICgoZXJyb3IgPQotCSAgIHBjaV9yZWFkX2NvbmZpZ193b3JkKHBjaV9kZXYsIFBDSV9DTEFTU19ERVZJQ0UsICZyZXZfZGV2aWNlKSkpCi0JY29udGludWU7Ci0KLSAgICAgIC8qIEZvdW5kIGEgYm9hcmQgKi8KLSAgICAgIERUXzMxNTVfREVCVUdfTVNHKCJEVDMxNTU6IERldmljZSBudW1iZXIgJWQgXG4iLCBwY2lfaW5kZXgpOwotCi0gICAgICAvKiBNYWtlIHN1cmUgdGhlIGRyaXZlciB3YXMgY29tcGlsZWQgd2l0aCBlbm91Z2ggYnVmZmVycyB0byBoYW5kbGUKLQkgdGhpcyBtYW55IGJvYXJkcyAqLwotICAgICAgaWYgKHBjaV9pbmRleCA+IE1BWEJPQVJEUykgewotCXByaW50aygiRFQzMTU1OiBFUlJPUiAtIGZvdW5kICVkIGRldmljZXMsIGJ1dCBkcml2ZXIgb25seSBjb25maWd1cmVkICIKLQkgICAgICAgImZvciAlZCBkZXZpY2VzXG4iCi0JICAgICAgICJEVDMxNTU6IFBsZWFzZSBjaGFuZ2UgTUFYQk9BUkRTIGluIGR0MzE1NS5oXG4iLAotCSAgICAgICBwY2lfaW5kZXgsIE1BWEJPQVJEUyk7Ci0JZ290byBlcnI7Ci0gICAgICB9Ci0KLSAgICAgIC8qIE5vdywganVzdCBnbyBvdXQgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoaXMvdGhlc2UgZGV2aWNlKHMpIGlzL2FyZQotCSBhY3R1YWxseSBtYXBwZWQgaW50byB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2UgKi8KLSAgICAgIGlmICgoZXJyb3IgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQocGNpX2RldiwgUENJX0JBU0VfQUREUkVTU18wLAotCQkJCQkgICh1MzIgKikgJmJhc2UpKSkKLQl7Ci0JICBwcmludGsoIkRUMzE1NTogV2FzIG5vdCBhYmxlIHRvIGZpbmQgZGV2aWNlIFxuIik7Ci0JICBnb3RvIGVycjsKLQl9Ci0KLSAgICAgIERUXzMxNTVfREVCVUdfTVNHKCJEVDMxNTU6IEJhc2UgYWRkcmVzcyAwIGZvciBkZXZpY2UgaXMgJWx4IFxuIiwgYmFzZSk7Ci0gICAgICBkdDMxNTVfc3RhdHVzW3BjaV9pbmRleC0xXS5yZWdfYWRkciA9IGJhc2U7Ci0KLSAgICAgIC8qIFJlbWFwIHRoZSBiYXNlIGFkZHJlc3MgdG8gYSBsb2dpY2FsIGFkZHJlc3MgdGhyb3VnaCB3aGljaCB3ZQotICAgICAgICogY2FuIGFjY2VzcyBpdC4gKi8KLSAgICAgIGR0MzE1NV9sYmFzZVtwY2lfaW5kZXggLSAxXSA9IGlvcmVtYXAoYmFzZSxQQ0lfUEFHRV9TSVpFKTsKLSAgICAgIGR0MzE1NV9zdGF0dXNbcGNpX2luZGV4IC0gMV0ucmVnX2FkZHIgPSBiYXNlOwotICAgICAgRFRfMzE1NV9ERUJVR19NU0coIkRUMzE1NTogTmV3IGxvZ2ljYWwgYWRkcmVzcyBpcyAlcCBcbiIsCi0JCQlkdDMxNTVfbGJhc2VbcGNpX2luZGV4LTFdKTsKLSAgICAgIGlmICghZHQzMTU1X2xiYXNlW3BjaV9pbmRleC0xXSkKLQl7Ci0JICBwcmludGsoIkRUMzE1NTogVW5hYmxlIHRvIHJlbWFwIGNvbnRyb2wgcmVnaXN0ZXJzXG4iKTsKLQkgIGdvdG8gZXJyOwotCX0KLQotICAgICAgaWYgKChlcnJvciA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaV9kZXYsIFBDSV9JTlRFUlJVUFRfTElORSwgJmlycSkpKQotCXsKLQkgIHByaW50aygiRFQzMTU1OiBXYXMgbm90IGFibGUgdG8gZmluZCBkZXZpY2UgXG4iKTsKLQkgIGdvdG8gZXJyOwotCX0KLQotICAgICAgRFRfMzE1NV9ERUJVR19NU0coIkRUMzE1NTogSVJRIGlzICVkIFxuIixpcnEpOwotICAgICAgZHQzMTU1X3N0YXR1c1twY2lfaW5kZXgtMV0uaXJxID0gaXJxOwotICAgICAgLyogU2V0IGZsYWc6IGt0aCBkZXZpY2UgZm91bmQhICovCi0gICAgICBkdDMxNTVfc3RhdHVzW3BjaV9pbmRleC0xXS5kZXZpY2VfaW5zdGFsbGVkID0gMTsKLSAgICAgIHByaW50aygiRFQzMTU1OiBJbnN0YWxsaW5nIGRldmljZSAlZCB3L2lycSAlZCBhbmQgYWRkcmVzcyAlcFxuIiwKLQkgICAgIHBjaV9pbmRleCwKLQkgICAgIGR0MzE1NV9zdGF0dXNbcGNpX2luZGV4LTFdLmlycSwKLQkgICAgIGR0MzE1NV9sYmFzZVtwY2lfaW5kZXgtMV0pOwotCi0gICAgfQotICBuZGV2aWNlcyA9IHBjaV9pbmRleDsKLQotICByZXR1cm4gRFRfMzE1NV9TVUNDRVNTOwotCi1lcnI6Ci0gIHBjaV9kZXZfcHV0KHBjaV9kZXYpOwotICByZXR1cm4gRFRfMzE1NV9GQUlMVVJFOwotfQotCi11MzIgYWxsb2NhdG9yQWRkciA9IDA7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogaW5pdF9tb2R1bGUoKQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50IGluaXRfbW9kdWxlKHZvaWQpCi17Ci0gIGludCBpbmRleDsKLSAgaW50IHJjb2RlID0gMDsKLSAgY2hhciAqZGV2bmFtZVtNQVhCT0FSRFNdOwotCi0gIGRldm5hbWVbMF0gPSAiZHQzMTU1YSI7Ci0jaWYgTUFYQk9BUkRTID09IDIKLSAgZGV2bmFtZVsxXSA9ICJkdDMxNTViIjsKLSNlbmRpZgotCi0gIHByaW50aygiRFQzMTU1OiBMb2FkaW5nIG1vZHVsZS4uLlxuIik7Ci0KLSAgLyogUmVnaXN0ZXIgdGhlIGRldmljZSBkcml2ZXIgKi8KLSAgcmNvZGUgPSByZWdpc3Rlcl9jaHJkZXYoZHQzMTU1X21ham9yLCAiZHQzMTU1IiwgJmR0MzE1NV9mb3BzKTsKLSAgaWYocmNvZGUgPCAwKQotICAgIHsKLSAgICAgIHByaW50ayhLRVJOX0lORk8gIkRUMzE1NTogcmVnaXN0ZXJfY2hyZGV2IGZhaWxlZCBcbiIpOwotICAgICAgcmV0dXJuIHJjb2RlOwotICAgIH0KLQotICBpZihkdDMxNTVfbWFqb3IgPT0gMCkKLSAgICBkdDMxNTVfbWFqb3IgPSByY29kZTsgLyogZHluYW1pYyAqLwotCi0KLSAgLyogaW5pdCB0aGUgc3RhdHVzIHZhcmlhYmxlcy4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBETUEgbWVtb3J5IGlzIHRha2VuIGNhcmUgb2YgaW4gc2V0dXBfYnVmZmVycygpICovCi0gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IE1BWEJPQVJEUzsgaW5kZXgrKykKLSAgICB7Ci0gICAgICBkdDMxNTVfc3RhdHVzW2luZGV4XS5jb25maWcuYWNxX21vZGUgICA9IERUMzE1NV9NT0RFX0ZSQU1FOwotICAgICAgZHQzMTU1X3N0YXR1c1tpbmRleF0uY29uZmlnLmNvbnRpbnVvdXMgPSBEVDMxNTVfQUNROwotICAgICAgZHQzMTU1X3N0YXR1c1tpbmRleF0uY29uZmlnLmNvbHMgICAgICAgPSBEVDMxNTVfTUFYX0NPTFM7Ci0gICAgICBkdDMxNTVfc3RhdHVzW2luZGV4XS5jb25maWcucm93cyAgICAgICA9IERUMzE1NV9NQVhfUk9XUzsKLSAgICAgIGR0MzE1NV9zdGF0dXNbaW5kZXhdLnN0YXRlID0gRFQzMTU1X1NUQVRFX0lETEU7Ci0KLSAgICAgIC8qIGZpbmRfUENJKCkgd2lsbCBjaGVjayBpZiBkZXZpY2VzIGFyZSBpbnN0YWxsZWQ7ICovCi0gICAgICAvKiBmaXJzdCBhc3N1bWUgdGhleSdyZSBub3Q6ICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgZHQzMTU1X3N0YXR1c1tpbmRleF0ubWVtX2FkZHIgICAgICAgICAgPSAwOwotICAgICAgZHQzMTU1X3N0YXR1c1tpbmRleF0ubWVtX3NpemUgICAgICAgICAgPSAwOwotICAgICAgZHQzMTU1X3N0YXR1c1tpbmRleF0uc3RhdGUgICAgICAgICAgICAgPSBEVDMxNTVfU1RBVEVfSURMRTsKLSAgICAgIGR0MzE1NV9zdGF0dXNbaW5kZXhdLmRldmljZV9pbnN0YWxsZWQgID0gMDsKLSAgICB9Ci0KLSAgLyogTm93IGxldCdzIGZpbmQgdGhlIGhhcmR3YXJlLiAgZmluZF9QQ0koKSB3aWxsIHNldCBuZGV2aWNlcyB0byB0aGUKLSAgICogbnVtYmVyIG9mIGNhcmRzIGZvdW5kIGluIHRoaXMgbWFjaGluZS4gKi8KLSAgICB7Ci0gICAgICBpZiAoKHJjb2RlID0gZmluZF9QQ0koKSkgIT0gIERUXzMxNTVfU1VDQ0VTUykKLQl7Ci0JICBwcmludGsoIkRUMzE1NSBlcnJvcjogZmluZF9QQ0koKSBmYWlsZWQgdG8gZmluZCBkdDMxNTUgYm9hcmQocylcbiIpOwotCSAgdW5yZWdpc3Rlcl9jaHJkZXYoZHQzMTU1X21ham9yLCAiZHQzMTU1Iik7Ci0JICByZXR1cm4gcmNvZGU7Ci0JfQotICAgIH0KLQotICAvKiBPaywgdGltZSB0byBzZXR1cCB0aGUgZnJhbWUgYnVmZmVycyAqLwotICBpZigocmNvZGUgPSBkdDMxNTVfc2V0dXBfYnVmZmVycygmYWxsb2NhdG9yQWRkcikpIDwgMCkKLSAgICB7Ci0gICAgICBwcmludGsoIkRUMzE1NTogRXJyb3I6IHNldHRpbmcgdXAgYnVmZmVyIG5vdCBsYXJnZSBlbm91Z2guIik7Ci0gICAgICB1bnJlZ2lzdGVyX2NocmRldihkdDMxNTVfbWFqb3IsICJkdDMxNTUiKTsKLSAgICAgIHJldHVybiByY29kZTsKLSAgICB9Ci0KLSAgLyogSWYgd2UgYXJlIHRoaXMgZmFyLCB0aGVuIHRoZXJlIGlzIGVub3VnaCBSQU0gKi8KLSAgLyogZm9yIHRoZSBidWZmZXJzOiBQcmludCB0aGUgY29uZmlndXJhdGlvbi4gICAgKi8KLSAgZm9yKCBpbmRleCA9IDA7ICBpbmRleCA8IG5kZXZpY2VzOyAgaW5kZXgrKykKLSAgICB7Ci0gICAgICBwcmludGsoIkRUMzE1NTogRGV2aWNlID0gJWQ7IGFjcV9tb2RlID0gJWQ7ICIKLQkgICAgICJjb250aW51b3VzID0gJWQ7IGNvbHMgPSAlZDsgcm93cyA9ICVkO1xuIiwKLQkgICAgIGluZGV4ICwKLQkgICAgIGR0MzE1NV9zdGF0dXNbaW5kZXhdLmNvbmZpZy5hY3FfbW9kZSwKLQkgICAgIGR0MzE1NV9zdGF0dXNbaW5kZXhdLmNvbmZpZy5jb250aW51b3VzLAotCSAgICAgZHQzMTU1X3N0YXR1c1tpbmRleF0uY29uZmlnLmNvbHMsCi0JICAgICBkdDMxNTVfc3RhdHVzW2luZGV4XS5jb25maWcucm93cyk7Ci0gICAgICBwcmludGsoIkRUMzE1NTogbV9hZGRyID0gMHgleDsgbV9zaXplID0gJWxkOyAiCi0JICAgICAic3RhdGUgPSAlZDsgZGV2aWNlX2luc3RhbGxlZCA9ICVkXG4iLAotCSAgICAgZHQzMTU1X3N0YXR1c1tpbmRleF0ubWVtX2FkZHIsCi0JICAgICAobG9uZyBpbnQpZHQzMTU1X3N0YXR1c1tpbmRleF0ubWVtX3NpemUsCi0JICAgICBkdDMxNTVfc3RhdHVzW2luZGV4XS5zdGF0ZSwKLQkgICAgIGR0MzE1NV9zdGF0dXNbaW5kZXhdLmRldmljZV9pbnN0YWxsZWQpOwotICAgIH0KLQotICAvKiBEaXNhYmxlIEFMTCBpbnRlcnJ1cHRzICovCi0gIGludF9jc3Jfci5yZWcgPSAwOwotICBmb3IoIGluZGV4ID0gMDsgIGluZGV4IDwgbmRldmljZXM7ICBpbmRleCsrKQotICAgIHsKLSAgICAgIFdyaXRlTVJlZygoZHQzMTU1X2xiYXNlW2luZGV4XSArIElOVF9DU1IpLCBpbnRfY3NyX3IucmVnKTsKLSAgICAgIGlmKGR0MzE1NV9zdGF0dXNbaW5kZXhdLmRldmljZV9pbnN0YWxsZWQpCi0JewotCSAgLyoKLQkgICAqIFRoaXMgZHJpdmVyICpsb29rcyogbGlrZSBpdCBjYW4gaGFuZGxlIHNoYXJpbmcgaW50ZXJydXB0cywKLQkgICAqIGJ1dCBJIGNhbid0IGFjdHVhbGx5IHRlc3QgbXlzZWxmLiBJJ3ZlIGhhZCByZXBvcnRzIHRoYXQgaXQKLQkgICAqIERPRVMgd29yayBzbyBJJ2xsIGVuYWJsZSBpdCBmb3Igbm93LiBUaGlzIGNvbW1lbnQgd2lsbCByZW1haW4KLQkgICAqIGFzIGEgcmVtaW5kZXIgaW4gY2FzZSBhbnkgcHJvYmxlbXMgYXJpc2UuIChTUykKLQkgICAqLwotCSAgLyogaW4gb2xkZXIga2VybmVscyBmbGFncyBhcmU6IFNBX1NISVJRIHwgU0FfSU5URVJSVVBUICovCi0JICByY29kZSA9IHJlcXVlc3RfaXJxKGR0MzE1NV9zdGF0dXNbaW5kZXhdLmlycSwgKHZvaWQgKilkdDMxNTVfaXNyLAotCQkJICAgICAgIElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgZGV2bmFtZVtpbmRleF0sCi0JCQkgICAgICAgKHZvaWQqKSAmZHQzMTU1X3N0YXR1c1tpbmRleF0pOwotCSAgaWYocmNvZGUgPCAwKQotCSAgICB7Ci0JICAgICAgcHJpbnRrKCJEVDMxNTU6IG1pbm9yICVkIHJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgSVJRICVkXG4iLAotCQkgICAgIGluZGV4LCBkdDMxNTVfc3RhdHVzW2luZGV4XS5pcnEpOwotCSAgICAgIHVucmVnaXN0ZXJfY2hyZGV2KGR0MzE1NV9tYWpvciwgImR0MzE1NSIpOwotCSAgICAgIHJldHVybiByY29kZTsKLQkgICAgfQotCX0KLSAgICB9Ci0KLSAgcHJpbnRrKCJEVDMxNTU6IGZpbmlzaGVkIGxvYWRpbmdcbiIpOwotCi0gIHJldHVybiAwOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGNsZWFudXBfbW9kdWxlKHZvaWQpCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZCBjbGVhbnVwX21vZHVsZSh2b2lkKQotewotICBpbnQgaW5kZXg7Ci0KLSAgcHJpbnRrKCJEVDMxNTU6ICBjbGVhbnVwX21vZHVsZSBjYWxsZWRcbiIpOwotCi0gIC8qIHJlbW92ZWQgRE1BIGFsbG9jYXRlZCB3aXRoIHRoZSBhbGxvY2F0b3IgKi8KLSNpZmRlZiBTVEFOREFMT05FX0FMTE9DQVRPUgotICBpZiAoYWxsb2NhdG9yQWRkciAhPSAwKQotICAgIGFsbG9jYXRvcl9mcmVlX2RtYShhbGxvY2F0b3JBZGRyKTsKLSNlbHNlCi0gIGFsbG9jYXRvcl9jbGVhbnVwKCk7Ci0jZW5kaWYKLQotICB1bnJlZ2lzdGVyX2NocmRldihkdDMxNTVfbWFqb3IsICJkdDMxNTUiKTsKLQotICBmb3IoaW5kZXggPSAwOyBpbmRleCA8IG5kZXZpY2VzOyBpbmRleCsrKQotICAgIHsKLSAgICAgIGlmKGR0MzE1NV9zdGF0dXNbaW5kZXhdLmRldmljZV9pbnN0YWxsZWQgPT0gMSkKLQl7Ci0JICBwcmludGsoIkRUMzE1NTogRnJlZWluZyBpcnEgJWQgZm9yIGRldmljZSAlZFxuIiwKLQkJICBkdDMxNTVfc3RhdHVzW2luZGV4XS5pcnEsIGluZGV4KTsKLQkgIGZyZWVfaXJxKGR0MzE1NV9zdGF0dXNbaW5kZXhdLmlycSwgKHZvaWQqKSZkdDMxNTVfc3RhdHVzW2luZGV4XSk7Ci0JfQotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTVfZHJ2LmggYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9kcnYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVlNjhjMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9kcnYuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0KLUNvcHlyaWdodCAxOTk2LDIwMDIgR3JlZ29yeSBELiBIYWdlciwgQWxmcmVkIEEuIFJpenppLCBOb2FoIEouIENvd2FuLAotCQkgICAgU2NvdHQgU21lZGxleQotCi1UaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRFQzMTU1IERldmljZSBEcml2ZXIuCi0KLVRoZSBEVDMxNTUgRGV2aWNlIERyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdAotYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi1wdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKLUxpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLVRoZSBEVDMxNTUgRGV2aWNlIERyaXZlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKLXVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKLW9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi1hbG9uZyB3aXRoIHRoZSBEVDMxNTUgRGV2aWNlIERyaXZlcjsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLU1BIDAyMTExLTEzMDcgVVNBCi0qLwotCi0jaWZuZGVmIERUMzE1NV9EUlZfSU5DCi0jZGVmaW5lIERUMzE1NV9EUlZfSU5DCi0KLS8qIGtlcm5lbCBsb2dpY2FsIGFkZHJlc3Mgb2YgdGhlIGZyYW1lIGdyYWJiZXJzICovCi1leHRlcm4gdTggKmR0MzE1NV9sYmFzZVtNQVhCT0FSRFNdOwotCi0vKiBrZXJuZWwgbG9naWNhbCBhZGRyZXNzIG9mIHJhbSBidWZmZXIgKi8KLWV4dGVybiB1OCAqZHQzMTU1X2JiYXNlOwotCi0jaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLQotLyogd2FpdCBxdWV1ZSBmb3IgcmVhZHMgKi8KLWV4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCBkdDMxNTVfcmVhZF93YWl0X3F1ZXVlW01BWEJPQVJEU107Ci0jZW5kaWYKLQotLyogbnVtYmVyIG9mIGRldmljZXMgKi8KLWV4dGVybiB1MzIgbmRldmljZXM7Ci0KLWV4dGVybiBpbnQgZHQzMTU1X2Vycm5vOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvZHQzMTU1X2lvLmMgYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9pby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzkyZTcxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvZHQzMTU1X2lvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAxOTk2LDIwMDIsMjAwNSBHcmVnb3J5IEQuIEhhZ2VyLCBBbGZyZWQgQS4gUml6emksIE5vYWggSi4gQ293YW4sCi0gKgkJCSAgICBKYXNvbiBMYXBlbnRhLCBTY290dCBTbWVkbGV5Ci0gKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyLgotICoKLSAqIFRoZSBEVDMxNTUgRGV2aWNlIERyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0vKgotICogVGhpcyBmaWxlIHByb3ZpZGVzIHNvbWUgYmFzaWMgcmVnaXN0ZXIgaW8gcm91dGluZXMuICBJdCBpcyBtb2RpZmllZCBmcm9tCi0gKiBkZW1vIGNvZGUgcHJvdmlkZWQgYnkgRGF0YSBUcmFuc2xhdGlvbnMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSAiZHQzMTU1LmgiCi0jaW5jbHVkZSAiZHQzMTU1X2lvLmgiCi0jaW5jbHVkZSAiZHQzMTU1X2Rydi5oIgotCi0KLS8qKioqKiogbG9jYWwgY29waWVzIG9mIGJvYXJkJ3MgMzIgYml0IHJlZ2lzdGVycyAqKioqKiovCi11MzIgZXZlbl9kbWFfc3RhcnRfcjsJLyogIGJpdCAwIHNob3VsZCBhbHdheXMgYmUgMCAqLwotdTMyIG9kZF9kbWFfc3RhcnRfcjsJLyogICAgICAgICAgICAgICAuLiAqLwotdTMyIGV2ZW5fZG1hX3N0cmlkZV9yOwkvKiAgYml0cyAwJjEgc2hvdWxkIGFsd2F5cyBiZSAwICovCi11MzIgb2RkX2RtYV9zdHJpZGVfcjsJLyogICAgICAgICAgICAgICAuLiAqLwotdTMyIGV2ZW5fcGl4ZWxfZm10X3I7Ci11MzIgb2RkX3BpeGVsX2ZtdF9yOwotCi1GSUZPX1RSSUdHRVJfUgkJZmlmb190cmlnZ2VyX3I7Ci1YRkVSX01PREVfUgkJeGZlcl9tb2RlX3I7Ci1DU1IxX1IJCQljc3IxX3I7Ci1SRVRSWV9XQUlUX0NOVF9SCXJldHJ5X3dhaXRfY250X3I7Ci1JTlRfQ1NSX1IJCWludF9jc3JfcjsKLQotdTMyIGV2ZW5fZmxkX21hc2tfcjsKLXUzMiBvZGRfZmxkX21hc2tfcjsKLQotTUFTS19MRU5HVEhfUgkJbWFza19sZW5ndGhfcjsKLUZJRk9fRkxBR19DTlRfUgkJZmlmb19mbGFnX2NudF9yOwotSUlDX0NMS19EVVJfUgkJaWljX2Nsa19kdXJfcjsKLUlJQ19DU1IxX1IJCWlpY19jc3IxX3I7Ci1JSUNfQ1NSMl9SCQlpaWNfY3NyMl9yOwotRE1BX1VQUEVSX0xNVF9SCQlldmVuX2RtYV91cHBlcl9sbXRfcjsKLURNQV9VUFBFUl9MTVRfUgkJb2RkX2RtYV91cHBlcl9sbXRfcjsKLQotCi0KLS8qKioqKioqKiBsb2NhbCBjb3BpZXMgb2YgYm9hcmQncyA4IGJpdCBJMkMgcmVnaXN0ZXJzICoqKioqKi8KLUkyQ19DU1IyIGkyY19jc3IyOwotSTJDX0VWRU5fQ1NSIGkyY19ldmVuX2NzcjsKLUkyQ19PRERfQ1NSIGkyY19vZGRfY3NyOwotSTJDX0NPTkZJRyBpMmNfY29uZmlnOwotdTggaTJjX2R0X2lkOwotdTggaTJjX3hfY2xpcF9zdGFydDsKLXU4IGkyY195X2NsaXBfc3RhcnQ7Ci11OCBpMmNfeF9jbGlwX2VuZDsKLXU4IGkyY195X2NsaXBfZW5kOwotdTggaTJjX2FkX2FkZHI7Ci11OCBpMmNfYWRfbHV0OwotSTJDX0FEX0NNRCBpMmNfYWRfY21kOwotdTggaTJjX2RpZ19vdXQ7Ci11OCBpMmNfcG1fbHV0X2FkZHI7Ci11OCBpMmNfcG1fbHV0X2RhdGE7Ci0KLS8qCi0gKiB3YWl0X2lic3ljbHIoKQotICoKLSAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyByZWFkL3dyaXRlIHRpbWluZyBhbmQgci93IHRpbWVvdXQgZXJyb3IKLSAqLwotc3RhdGljIGludCB3YWl0X2lic3ljbHIodTggKmxwUmVnKQotewotCS8qIHdhaXQgMTAwIG1pY3Jvc2Vjb25kcyAqLwotCXVkZWxheSgxMDBMKTsKLQkvKiBfX2RlbGF5KGxvb3BzX3Blcl9zZWMvMTAwMDApOyAqLwotCi0JUmVhZE1SZWcobHBSZWcgKyBJSUNfQ1NSMiwgaWljX2NzcjJfci5yZWcpOwotCWlmIChpaWNfY3NyMl9yLmZsZC5ORVdfQ1lDTEUpIHsKLQkJLyogaWYgTkVXX0NZQ0xFIGRpZG4ndCBjbGVhciAqLwotCQkvKiBUSU1FT1VUIEVSUk9SICovCi0JCWR0MzE1NV9lcnJubyA9IERUX0VSUl9JMkNfVElNRU9VVDsKLQkJcmV0dXJuIC1FVElNRURPVVQ7Ci0JfQotCi0JcmV0dXJuIDA7CS8qIG5vIGVycm9yICovCi19Ci0KLS8qCi0gKiBXcml0ZUkyQygpCi0gKgotICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHdyaXRpbmcgdG8gOC1iaXQgRFQzMTU1IHJlZ2lzdGVycwotICoKLSAqIDFzdCBwYXJhbWV0ZXIgaXMgcG9pbnRlciB0byAzMi1iaXQgcmVnaXN0ZXIgYmFzZSBhZGRyZXNzCi0gKiAybmQgcGFyYW1ldGVyIGlzIHJlZy4gaW5kZXg7Ci0gKiAzcmQgaXMgdmFsdWUgdG8gYmUgd3JpdHRlbgotICovCi1pbnQgV3JpdGVJMkModTggKmxwUmVnLCB1X3Nob3J0IHdJcmVnSW5kZXgsIHU4IGJ5VmFsKQotewotCS8qIHJlYWQgMzIgYml0IElJQ19DU1IyIHJlZ2lzdGVyIGRhdGEgaW50byB1bmlvbiAqLwotCi0JUmVhZE1SZWcoKGxwUmVnICsgSUlDX0NTUjIpLCBpaWNfY3NyMl9yLnJlZyk7Ci0KLQkvKiBmb3Igd3JpdGUgb3BlcmF0aW9uICovCi0JaWljX2NzcjJfci5mbGQuRElSX1JEICAgICAgPSAwOwotCS8qIEkyQyBhZGRyZXNzIG9mIEkyQyByZWdpc3RlcjogKi8KLQlpaWNfY3NyMl9yLmZsZC5ESVJfQUREUiAgICA9IHdJcmVnSW5kZXg7Ci0JLyogOCBiaXQgZGF0YSB0byBiZSB3cml0dGVuIHRvIEkyQyByZWcgKi8KLQlpaWNfY3NyMl9yLmZsZC5ESVJfV1JfREFUQSA9IGJ5VmFsOwotCS8qIHdpbGwgc3RhcnQgYSBkaXJlY3QgSTJDIGN5Y2xlOiAqLwotCWlpY19jc3IyX3IuZmxkLk5FV19DWUNMRSAgID0gMTsKLQotCS8qIHhmZXIgdW5pb24gZGF0YSBpbnRvIDMyIGJpdCBJSUNfQ1NSMiByZWdpc3RlciAqLwotCVdyaXRlTVJlZygobHBSZWcgKyBJSUNfQ1NSMiksIGlpY19jc3IyX3IucmVnKTsKLQotCS8qIHdhaXQgZm9yIElJQyBjeWNsZSB0byBmaW5pc2ggKi8KLQlyZXR1cm4gd2FpdF9pYnN5Y2xyKGxwUmVnKTsKLX0KLQotLyoKLSAqIFJlYWRJMkMoKQotICoKLSAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyByZWFkaW5nIGZyb20gOC1iaXQgRFQzMTU1IHJlZ2lzdGVycwotICoKLSAqIDFzdCBwYXJhbWV0ZXIgaXMgcG9pbnRlciB0byAzMi1iaXQgcmVnaXN0ZXIgYmFzZSBhZGRyZXNzCi0gKiAybmQgcGFyYW1ldGVyIGlzIHJlZy4gaW5kZXg7Ci0gKiAzcmQgaXMgYWRycyBvZiB2YWx1ZSB0byBiZSByZWFkCi0gKi8KLWludCBSZWFkSTJDKHU4ICpscFJlZywgdV9zaG9ydCB3SXJlZ0luZGV4LCB1OCAqYnlWYWwpCi17Ci0JaW50IHdyaXRlc3RhdDsJLyogc3RhdHVzIGZvciByZXR1cm4gKi8KLQotCS8qICByZWFkIDMyIGJpdCBJSUNfQ1NSMiByZWdpc3RlciBkYXRhIGludG8gdW5pb24gKi8KLQlSZWFkTVJlZygobHBSZWcgKyBJSUNfQ1NSMiksIGlpY19jc3IyX3IucmVnKTsKLQotCS8qICBmb3IgcmVhZCBvcGVyYXRpb24gKi8KLQlpaWNfY3NyMl9yLmZsZC5ESVJfUkQgICAgID0gMTsKLQotCS8qICBJMkMgYWRkcmVzcyBvZiBJMkMgcmVnaXN0ZXI6ICovCi0JaWljX2NzcjJfci5mbGQuRElSX0FERFIgICA9IHdJcmVnSW5kZXg7Ci0KLQkvKiAgd2lsbCBzdGFydCBhIGRpcmVjdCBJMkMgY3ljbGU6ICovCi0JaWljX2NzcjJfci5mbGQuTkVXX0NZQ0xFICA9IDE7Ci0KLQkvKiAgeGZlciB1bmlvbidzIGRhdGEgaW50byAzMiBiaXQgSUlDX0NTUjIgcmVnaXN0ZXIgKi8KLQlXcml0ZU1SZWcoKGxwUmVnICsgSUlDX0NTUjIpLCBpaWNfY3NyMl9yLnJlZyk7Ci0KLQkvKiB3YWl0IGZvciBJSUMgY3ljbGUgdG8gZmluaXNoICovCi0Jd3JpdGVzdGF0ID0gd2FpdF9pYnN5Y2xyKGxwUmVnKTsKLQotCS8qIE5leHQgMiBjb21tYW5kcyByZWFkIDMyIGJpdCBJSUNfQ1NSMSByZWdpc3RlcidzIGRhdGEgaW50byB1bmlvbiAqLwotCS8qIGZpcnN0IHJlYWQgZGF0YSBpcyBpbiBJSUNfQ1NSMSAqLwotCVJlYWRNUmVnKChscFJlZyArIElJQ19DU1IxKSwgaWljX2NzcjFfci5yZWcpOwotCi0JLyogbm93IGdldCBkYXRhIHU4IG91dCBvZiByZWdpc3RlciAqLwotCSpieVZhbCA9ICh1OCkgaWljX2NzcjFfci5mbGQuUkRfREFUQTsKLQotCXJldHVybiB3cml0ZXN0YXQ7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9pby5oIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTVfaW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFhMjUxMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9pby5oCisrKyAvZGV2L251bGwKQEAgLTEsMzU4ICswLDAgQEAKLS8qCi0KLUNvcHlyaWdodCAxOTk2LDIwMDIgR3JlZ29yeSBELiBIYWdlciwgQWxmcmVkIEEuIFJpenppLCBOb2FoIEouIENvd2FuLAotCQkgICAgSmFzb24gTGFwZW50YSwgU2NvdHQgU21lZGxleQotCi1UaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRFQzMTU1IERldmljZSBEcml2ZXIuCi0KLVRoZSBEVDMxNTUgRGV2aWNlIERyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdAotYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi1wdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKLUxpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLVRoZSBEVDMxNTUgRGV2aWNlIERyaXZlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKLXVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKLW9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi1hbG9uZyB3aXRoIHRoZSBEVDMxNTUgRGV2aWNlIERyaXZlcjsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLU1BIDAyMTExLTEzMDcgVVNBCi0KLQotLS0gQ2hhbmdlcyAtLQotCi0gIERhdGUgICAgIFByb2dyYW1tZXIgIERlc2NyaXB0aW9uIG9mIGNoYW5nZXMgbWFkZQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIDI0LUp1bC0yMDAyIFNTICAgICAgIEdQTCBsaWNlbmNlLgotCi0qLwotCi0vKiBUaGlzIGNvZGUgaXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIGV4YW1wbGVzIHByb3ZpZGVkIGJ5IERhdGEgVHJhbnNsYXRpb25zLiovCi0KLSNpZm5kZWYgRFQzMTU1X0lPX0lOQwotI2RlZmluZSBEVDMxNTVfSU9fSU5DCi0KLS8qIG1hY3JvcyB0byBhY2Nlc3MgcmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgV3JpdGVNUmVnKEFkZHJlc3MsIERhdGEpCSgqKCh1MzIgKikoQWRkcmVzcykpID0gRGF0YSkKLSNkZWZpbmUgUmVhZE1SZWcoQWRkcmVzcywgRGF0YSkJCShEYXRhID0gKigodTMyICopKEFkZHJlc3MpKSkKLQotLyoqKioqKioqKioqKioqKioqIDMyIGJpdCByZWdpc3RlciBnbG9iYWxzICAqKioqKioqKioqKioqKi8KLQotLyogIG9mZnNldHMgZm9yIDMyLWJpdCBtZW1vcnkgbWFwcGVkIHJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIEVWRU5fRE1BX1NUQVJUCQkweDAwMAotI2RlZmluZSBPRERfRE1BX1NUQVJUCQkweDAwQwotI2RlZmluZSBFVkVOX0RNQV9TVFJJREUJCTB4MDE4Ci0jZGVmaW5lIE9ERF9ETUFfU1RSSURFCQkweDAyNAotI2RlZmluZSBFVkVOX1BJWEVMX0ZNVAkJMHgwMzAKLSNkZWZpbmUgT0REX1BJWEVMX0ZNVAkJMHgwMzQKLSNkZWZpbmUgRklGT19UUklHR0VSCQkweDAzOAotI2RlZmluZSBYRkVSX01PREUJCTB4MDNDCi0jZGVmaW5lIENTUjEJCQkweDA0MAotI2RlZmluZSBSRVRSWV9XQUlUX0NOVAkJMHgwNDQKLSNkZWZpbmUgSU5UX0NTUgkJCTB4MDQ4Ci0jZGVmaW5lIEVWRU5fRkxEX01BU0sJCTB4MDRDCi0jZGVmaW5lIE9ERF9GTERfTUFTSwkJMHgwNTAKLSNkZWZpbmUgTUFTS19MRU5HVEgJCTB4MDU0Ci0jZGVmaW5lIEZJRk9fRkxBR19DTlQJCTB4MDU4Ci0jZGVmaW5lIElJQ19DTEtfRFVSCQkweDA1QwotI2RlZmluZSBJSUNfQ1NSMQkJMHgwNjAKLSNkZWZpbmUgSUlDX0NTUjIJCTB4MDY0Ci0jZGVmaW5lIEVWRU5fRE1BX1VQUFJfTE1UCTB4MDhDCi0jZGVmaW5lIE9ERF9ETUFfVVBQUl9MTVQJMHgwOTAKLQotI2RlZmluZSBDTEtfRFVSX1ZBTAkJMHgwMTAxMDEwMQotCi0KLQotLyoqKioqKioqIEFzc2lnbm1lbnRzIGFuZCBUeXBlZGVmcyBmb3IgMzIgYml0IE1lbW9yeSBNYXBwZWQgUmVnaXN0ZXJzICoqKioqKioqLwotCi10eXBlZGVmIHVuaW9uIGZpZm9fdHJpZ2dlcl90YWcgewotCXUzMiAgIHJlZzsKLQlzdHJ1Y3QgewotCQl1MzIgUEFDS0VEOjY7Ci0JCXUzMiAgICAgICA6OTsKLQkJdTMyIFBMQU5FUjo3OwotCQl1MzIgICAgICAgOjk7Ci0JfSBmbGQ7Ci19IEZJRk9fVFJJR0dFUl9SOwotCi10eXBlZGVmIHVuaW9uIHhmZXJfbW9kZV90YWcgewotCXUzMiAgIHJlZzsKLQlzdHJ1Y3QgewotCQl1MzIgICAgICAgICAgICAgOjI7Ci0JCXUzMiBGSUVMRF9UT0dHTEU6MTsKLQkJdTMyICAgICAgICAgICAgIDo1OwotCQl1MzIgICAgICAgICAgICAgOjI7Ci0JCXUzMiAgICAgICAgICAgICA6MjI7Ci0JfSBmbGQ7Ci19IFhGRVJfTU9ERV9SOwotCi10eXBlZGVmIHVuaW9uIGNzcjFfdGFnIHsKLQl1MzIgICByZWc7Ci0Jc3RydWN0IHsKLQkJdTMyIENBUF9DT05UX0VWRToxOwotCQl1MzIgQ0FQX0NPTlRfT0REOjE7Ci0JCXUzMiBDQVBfU05HTF9FVkU6MTsKLQkJdTMyIENBUF9TTkdMX09ERDoxOwotCQl1MzIgRkxEX0ROX0VWRSAgOjE7Ci0JCXUzMiBGTERfRE5fT0REICA6MTsKLQkJdTMyIFNSU1QgICAgICAgIDoxOwotCQl1MzIgRklGT19FTiAgICAgOjE7Ci0JCXUzMiBGTERfQ1JQVF9FVkU6MTsKLQkJdTMyIEZMRF9DUlBUX09ERDoxOwotCQl1MzIgQUREUl9FUlJfRVZFOjE7Ci0JCXUzMiBBRERSX0VSUl9PREQ6MTsKLQkJdTMyIENSUFRfRElTICAgIDoxOwotCQl1MzIgUkFOR0VfRU4gICAgOjE7Ci0JCXUzMiAgICAgICAgICAgICA6MTY7Ci0JfSBmbGQ7Ci19IENTUjFfUjsKLQotdHlwZWRlZiB1bmlvbiByZXRyeV93YWl0X2NudF90YWcgewotCXUzMiAgIHJlZzsKLQlzdHJ1Y3QgewotCQl1MzIgUlRSWV9XQUlUX0NOVDo4OwotCQl1MzIgICAgICAgICAgICAgIDoyNDsKLQl9IGZsZDsKLX0gUkVUUllfV0FJVF9DTlRfUjsKLQotdHlwZWRlZiB1bmlvbiBpbnRfY3NyX3RhZyB7Ci0JdTMyICAgcmVnOwotCXN0cnVjdCB7Ci0JCXUzMiBGTERfRU5EX0VWRSAgIDoxOwotCQl1MzIgRkxEX0VORF9PREQgICA6MTsKLQkJdTMyIEZMRF9TVEFSVCAgICAgOjE7Ci0JCXUzMiAgICAgICAgICAgICAgIDo1OwotCQl1MzIgRkxEX0VORF9FVkVfRU46MTsKLQkJdTMyIEZMRF9FTkRfT0REX0VOOjE7Ci0JCXUzMiBGTERfU1RBUlRfRU4gIDoxOwotCQl1MzIgICAgICAgICAgICAgICA6MjE7Ci0JfSBmbGQ7Ci19IElOVF9DU1JfUjsKLQotdHlwZWRlZiB1bmlvbiBtYXNrX2xlbmd0aF90YWcgewotCXUzMiAgIHJlZzsKLQlzdHJ1Y3QgewotCQl1MzIgTUFTS19MRU5fRVZFOjU7Ci0JCXUzMiAgICAgICAgICAgICA6MTE7Ci0JCXUzMiBNQVNLX0xFTl9PREQ6NTsKLQkJdTMyICAgICAgICAgICAgIDoxMTsKLQl9IGZsZDsKLX0gTUFTS19MRU5HVEhfUjsKLQotdHlwZWRlZiB1bmlvbiBmaWZvX2ZsYWdfY250X3RhZyB7Ci0JdTMyICAgcmVnOwotCXN0cnVjdCB7Ci0JCXUzMiBBRl9DT1VOVDo3OwotCQl1MzIgICAgICAgICA6OTsKLQkJdTMyIEFFX0NPVU5UOjc7Ci0JCXUzMiAgICAgICAgIDo5OwotCX0gZmxkOwotfSBGSUZPX0ZMQUdfQ05UX1I7Ci0KLXR5cGVkZWYgdW5pb24gaWljX2Nsa19kdXIgewotCXUzMiAgIHJlZzsKLQlzdHJ1Y3QgewotCQl1MzIgUEhBU0VfMTo4OwotCQl1MzIgUEhBU0VfMjo4OwotCQl1MzIgUEhBU0VfMzo4OwotCQl1MzIgUEhBU0VfNDo4OwotCX0gZmxkOwotfSBJSUNfQ0xLX0RVUl9SOwotCi10eXBlZGVmIHVuaW9uIGlpY19jc3IxX3RhZyB7Ci0JdTMyICAgcmVnOwotCXN0cnVjdCB7Ci0JCXUzMiBBVVRPX0VOICAgICA6MTsKLQkJdTMyIEJZUEFTUyAgICAgIDoxOwotCQl1MzIgU0RBX09VVCAgICAgOjE7Ci0JCXUzMiBTQ0xfT1VUICAgICA6MTsKLQkJdTMyICAgICAgICAgICAgIDo0OwotCQl1MzIgQVVUT19BQk9SVCAgOjE7Ci0JCXUzMiBESVJFQ1RfQUJPUlQ6MTsKLQkJdTMyIFNEQV9JTiAgICAgIDoxOwotCQl1MzIgU0NMX0lOICAgICAgOjE7Ci0JCXUzMiAgICAgICAgICAgICA6NDsKLQkJdTMyIEFVVE9fQUREUiAgIDo4OwotCQl1MzIgUkRfREFUQSAgICAgOjg7Ci0JfSBmbGQ7Ci19IElJQ19DU1IxX1I7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBpaWNfY3NyMl90YWcKLSAqLwotdHlwZWRlZiB1bmlvbiBpaWNfY3NyMl90YWcgewotCXUzMiAgIHJlZzsKLQlzdHJ1Y3QgewotCQl1MzIgRElSX1dSX0RBVEEgOjg7Ci0JCXUzMiBESVJfU1VCX0FERFI6ODsKLQkJdTMyIERJUl9SRCAgICAgIDoxOwotCQl1MzIgRElSX0FERFIgICAgOjc7Ci0JCXUzMiBORVdfQ1lDTEUgICA6MTsKLQkJdTMyICAgICAgICAgICAgIDo3OwotCX0gZmxkOwotfSAgSUlDX0NTUjJfUjsKLQotLyogdXNlIGZvciBib3RoIEVWRU4gYW5kIE9ERCBETUEgVVBQRVIgTElNSVRTICovCi0KLS8qCi0gKiBkbWFfdXBwZXJfbG10X3RhZwotICovCi10eXBlZGVmIHVuaW9uIGRtYV91cHBlcl9sbXRfdGFnICAgewotCXUzMiByZWc7Ci0Jc3RydWN0IHsKLQkJdTMyIERNQV9VUFBFUl9MTVRfVkFMOjI0OwotCQl1MzIgICAgICAgICAgICAgICAgICA6ODsKLQl9IGZsZDsKLX0gRE1BX1VQUEVSX0xNVF9SOwotCi0KLS8qCi0gKiBHbG9iYWwgZGVjbGFyYXRpb25zIG9mIGxvY2FsIGNvcGllcyBvZiBib2FyZHMnIDMyIGJpdCByZWdpc3RlcnMKLSAqLwotZXh0ZXJuIHUzMiBldmVuX2RtYV9zdGFydF9yOwkJLyogIGJpdCAwIHNob3VsZCBhbHdheXMgYmUgMCAqLwotZXh0ZXJuIHUzMiBvZGRfZG1hX3N0YXJ0X3I7CQkvKiAgICAgICAgICAgICAgIC4uICAgICAgICAgICovCi1leHRlcm4gdTMyIGV2ZW5fZG1hX3N0cmlkZV9yOwkvKiAgYml0cyAwJjEgc2hvdWxkIGFsd2F5cyBiZSAwICovCi1leHRlcm4gdTMyIG9kZF9kbWFfc3RyaWRlX3I7CQkvKiAgICAgICAgICAgICAgIC4uICAgICAgICAgICAgICovCi1leHRlcm4gdTMyIGV2ZW5fcGl4ZWxfZm10X3I7Ci1leHRlcm4gdTMyIG9kZF9waXhlbF9mbXRfcjsKLQotZXh0ZXJuIEZJRk9fVFJJR0dFUl9SCQlmaWZvX3RyaWdnZXJfcjsKLWV4dGVybiBYRkVSX01PREVfUgkJeGZlcl9tb2RlX3I7Ci1leHRlcm4gQ1NSMV9SCQkJY3NyMV9yOwotZXh0ZXJuIFJFVFJZX1dBSVRfQ05UX1IJCXJldHJ5X3dhaXRfY250X3I7Ci1leHRlcm4gSU5UX0NTUl9SCQlpbnRfY3NyX3I7Ci0KLWV4dGVybiB1MzIgZXZlbl9mbGRfbWFza19yOwotZXh0ZXJuIHUzMiBvZGRfZmxkX21hc2tfcjsKLQotZXh0ZXJuIE1BU0tfTEVOR1RIX1IJCW1hc2tfbGVuZ3RoX3I7Ci1leHRlcm4gRklGT19GTEFHX0NOVF9SCQlmaWZvX2ZsYWdfY250X3I7Ci1leHRlcm4gSUlDX0NMS19EVVJfUgkJaWljX2Nsa19kdXJfcjsKLWV4dGVybiBJSUNfQ1NSMV9SCQlpaWNfY3NyMV9yOwotZXh0ZXJuIElJQ19DU1IyX1IJCWlpY19jc3IyX3I7Ci1leHRlcm4gRE1BX1VQUEVSX0xNVF9SCQlldmVuX2RtYV91cHBlcl9sbXRfcjsKLWV4dGVybiBETUFfVVBQRVJfTE1UX1IJCW9kZF9kbWFfdXBwZXJfbG10X3I7Ci0KLQotCi0vKioqKioqKioqKioqKioqKiogOCBiaXQgSTJDIHJlZ2lzdGVyIGdsb2JhbHMgICoqKioqKioqKioqLwotI2RlZmluZSBDU1IyCQkweDAxMAkvKiBpbmRpY2VzIG9mIDgtYml0IEkyQyBtYXBwZWQgcmVnJ3MqLwotI2RlZmluZSBFVkVOX0NTUgkweDAxMQotI2RlZmluZSBPRERfQ1NSCQkweDAxMgotI2RlZmluZSBDT05GSUcJCTB4MDEzCi0jZGVmaW5lIERUX0lECQkweDAxRgotI2RlZmluZSBYX0NMSVBfU1RBUlQJMHgwMjAKLSNkZWZpbmUgWV9DTElQX1NUQVJUCTB4MDIyCi0jZGVmaW5lIFhfQ0xJUF9FTkQJMHgwMjQKLSNkZWZpbmUgWV9DTElQX0VORAkweDAyNgotI2RlZmluZSBBRF9BRERSCQkweDAzMAotI2RlZmluZSBBRF9MVVQJCTB4MDMxCi0jZGVmaW5lIEFEX0NNRAkJMHgwMzIKLSNkZWZpbmUgRElHX09VVAkJMHgwNDAKLSNkZWZpbmUgUE1fTFVUX0FERFIJMHgwNTAKLSNkZWZpbmUgUE1fTFVUX0RBVEEJMHgwNTEKLQotCi0vKioqKioqKiogQXNzaWdubWVudHMgYW5kIFR5cGVkZWZzIGZvciA4IGJpdCBJMkMgUmVnaXN0ZXJzKioqKioqKioqKioqKioqKioqKiovCi0KLXR5cGVkZWYgdW5pb24gaTJjX2NzcjJfdGFnIHsKLQl1OCByZWc7Ci0Jc3RydWN0IHsKLQkJdTggQ0hST01fRklMOjE7Ci0JCXU4IFNZTkNfU05UTDoxOwotCQl1OCBIWjUwOjE7Ci0JCXU4IFNZTkNfUFJFU0VOVDoxOwotCQl1OCBCVVNZX0VWRToxOwotCQl1OCBCVVNZX09ERDoxOwotCQl1OCBESVNQX1BBU1M6MTsKLQl9IGZsZDsKLX0gSTJDX0NTUjI7Ci0KLXR5cGVkZWYgdW5pb24gaTJjX2V2ZW5fY3NyX3RhZyB7Ci0JdTggICAgcmVnOwotCXN0cnVjdCB7Ci0JCXU4IERPTkVfRVZFIDoxOwotCQl1OCBTTkdMX0VWRSA6MTsKLQkJdTggRVJST1JfRVZFOjE7Ci0JCXU4ICAgICAgICAgIDo1OwotCX0gZmxkOwotfSBJMkNfRVZFTl9DU1I7Ci0KLXR5cGVkZWYgdW5pb24gaTJjX29kZF9jc3JfdGFnIHsKLQl1OCByZWc7Ci0Jc3RydWN0IHsKLQkJdTggRE9ORV9PREQ6MTsKLQkJdTggU05HTF9PREQ6MTsKLQkJdTggRVJST1JfT0REOjE7Ci0JCXU4IDo1OwotCX0gZmxkOwotfSBJMkNfT0REX0NTUjsKLQotdHlwZWRlZiB1bmlvbiBpMmNfY29uZmlnX3RhZyB7Ci0JdTggcmVnOwotCXN0cnVjdCB7Ci0JCXU4IEFDUV9NT0RFOjI7Ci0JCXU4IEVYVF9UUklHX0VOOjE7Ci0JCXU4IEVYVF9UUklHX1BPTDoxOwotCQl1OCBIX1NDQUxFOjE7Ci0JCXU4IENMSVA6MTsKLQkJdTggUE1fTFVUX1NFTDoxOwotCQl1OCBQTV9MVVRfUEdNOjE7Ci0JfSBmbGQ7Ci19IEkyQ19DT05GSUc7Ci0KLQotdHlwZWRlZiB1bmlvbiBpMmNfYWRfY21kX3RhZyB7Ci0JLyogYml0cyBjYW4gaGF2ZSAzIGRpZmZlcmVudCBtZWFuaW5ncyBkZXBlbmRpbmcgb24gdmFsdWUgb2YgQURfQUREUiAqLwotCXU4IHJlZzsKLQkvKiBCdDI1MiBDb21tYW5kIFJlZ2lzdGVyIGlmIEFEX0FERFIgPSAwMGggKi8KLQlzdHJ1Y3QgewotCQl1OCAgICAgICAgICAgICA6MjsKLQkJdTggU1lOQ19MVkxfU0VMOjI7Ci0JCXU4IFNZTkNfQ05MX1NFTDoyOwotCQl1OCBESUdJVElaRV9DTkxfU0VMMToyOwotCQl9IGJ0MjUyX2NvbW1hbmQ7Ci0KLQkvKiBCdDI1MiBJT1VUMCByZWdpc3RlciBpZiBBRF9BRERSID0gMDFoICovCi0Jc3RydWN0IHsKLQkJdTggSU9VVF9EQVRBOjg7Ci0JfSBidDI1Ml9pb3V0MDsKLQotCS8qIEJUMjUyIElPVVQxIHJlZ2lzdGVyIGlmIEFEX0FERFIgPSAwMmggKi8KLQlzdHJ1Y3QgewotCQl1OCBJT1VUX0RBVEE6ODsKLQl9IGJ0MjUyX2lvdXQxOwotfSBJMkNfQURfQ01EOwotCi0KLS8qKioqKiBHbG9iYWwgZGVjbGFyYXRpb25zIG9mIGxvY2FsIGNvcGllcyBvZiBib2FyZHMnIDggYml0IEkyQyByZWdpc3RlcnMgKioqLwotCi1leHRlcm4gSTJDX0NTUjIJCQlpMmNfY3NyMjsKLWV4dGVybiBJMkNfRVZFTl9DU1IJCWkyY19ldmVuX2NzcjsKLWV4dGVybiBJMkNfT0REX0NTUgkJaTJjX29kZF9jc3I7Ci1leHRlcm4gSTJDX0NPTkZJRwkJaTJjX2NvbmZpZzsKLWV4dGVybiB1OAkJCWkyY19kdF9pZDsKLWV4dGVybiB1OAkJCWkyY194X2NsaXBfc3RhcnQ7Ci1leHRlcm4gdTgJCQlpMmNfeV9jbGlwX3N0YXJ0OwotZXh0ZXJuIHU4CQkJaTJjX3hfY2xpcF9lbmQ7Ci1leHRlcm4gdTgJCQlpMmNfeV9jbGlwX2VuZDsKLWV4dGVybiB1OAkJCWkyY19hZF9hZGRyOwotZXh0ZXJuIHU4CQkJaTJjX2FkX2x1dDsKLWV4dGVybiBJMkNfQURfQ01ECQlpMmNfYWRfY21kOwotZXh0ZXJuIHU4CQkJaTJjX2RpZ19vdXQ7Ci1leHRlcm4gdTgJCQlpMmNfcG1fbHV0X2FkZHI7Ci1leHRlcm4gdTgJCQlpMmNfcG1fbHV0X2RhdGE7Ci0KLS8qIEZ1bmN0aW9ucyBmb3IgR2xvYmFsIHVzZSAqLwotCi0vKiBhY2Nlc3MgOC1iaXQgSUlDIHJlZ2lzdGVycyAqLwotCi1leHRlcm4gaW50IFJlYWRJMkModTggKmxwUmVnLCB1X3Nob3J0IHdJcmVnSW5kZXgsIHU4ICpieVZhbCk7Ci1leHRlcm4gaW50IFdyaXRlSTJDKHU4ICpscFJlZywgdV9zaG9ydCB3SXJlZ0luZGV4LCB1OCBieVZhbCk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTVfaXNyLmMgYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9pc3IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNkZGM5Yy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9pc3IuYworKysgL2Rldi9udWxsCkBAIC0xLDUwOSArMCwwIEBACi0vKgotCi1Db3B5cmlnaHQgMTk5NiwyMDAyLDIwMDUgR3JlZ29yeSBELiBIYWdlciwgQWxmcmVkIEEuIFJpenppLCBOb2FoIEouIENvd2FuLAotCQkJCUphc29uIExhcGVudGEsIFNjb3R0IFNtZWRsZXksIEdyZWcgU2hhcnAKLQotVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyLgotCi1UaGUgRFQzMTU1IERldmljZSBEcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQKLWFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCi1MaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi1UaGUgRFQzMTU1IERldmljZSBEcml2ZXIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCi11c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5Ci1vZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi1HTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi1Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotYWxvbmcgd2l0aCB0aGUgRFQzMTU1IERldmljZSBEcml2ZXI7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLVNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi1NQSAwMjExMS0xMzA3IFVTQQotCi0gICBGaWxlOiBkdDMxNTVfaXNyLmMKLVB1cnBvc2U6IEJ1ZmZlciBtYW5hZ2VtZW50IHJvdXRpbmVzLCBhbmQgb3RoZXIgcm91dGluZXMgZm9yIHRoZSBJU1IKLQkJKHRoZSBhY3R1YWwgaXNyIGlzIGluIGR0MzE1NV9kcnYuYykKLQotLS0gQ2hhbmdlcyAtLQotCi0gIERhdGUgICAgICAgUHJvZ3JhbW1lciAgRGVzY3JpcHRpb24gb2YgY2hhbmdlcyBtYWRlCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgMDMtSnVsLTIwMDAgSk1MICAgICAgIG4vYQotICAwMi1BcHItMjAwMiBTUyAgICAgICAgTW9kcyB0byBtYWtlIHdvcmsgd2l0aCBzZXBhcmF0ZSBhbGxvY2F0b3IKLQkJCW1vZHVsZTsgTWVyZ2VkIEpvaG4gUm9sbCdzIG1vZHMgdG8gbWFrZSB3b3JrIHdpdGgKLQkJCW11bHRpcGxlIGJvYXJkcy4KLSAgMTAtSnVsLTIwMDIgR0NTICAgICAgIENvbXBsZXRlIHJld3JpdGUgb2Ygc2V0dXBfYnVmZmVycyB0byBkaXNhbGxvdwotCQkJYnVmZmVycyB3aGljaCBzcGFuIGEgNE1CIGJvdW5kYXJ5LgotICAyNC1KdWwtMjAwMiBTUyAgICAgICAgR1BMIGxpY2VuY2UuCi0gIDMwLUp1bC0yMDAyIE5KQyAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBidWZmZXIgbG9vcC4KLSAgMzEtSnVsLTIwMDIgTkpDICAgICAgIENvbXBsZXRlIHJld3JpdGUgb2YgYnVmZmVyIG1hbmFnZW1lbnQKLSAgMDItQXVnLTIwMDIgTkpDICAgICAgIEluY2x1ZGluZyBzbGFiLmggaW5zdGVhZCBvZiBtYWxsb2MuaCAobm8gd2FybmluZykuCi0JCQlBbHNvLCBhbGxvY2F0b3JfaW5pdCgpIG5vdyByZXR1cm5zIGFsbG9jYXRvcl9tYXgKLQkJCXNvIGNsZWFuZWQgdXAgYWxsb2NhdGVfYnVmZmVycygpIGFjY29yZGluZ2x5LgotICAwOC1BdWctMjAwNSBTUyAgICAgICAgcG9ydCB0byAyLjYga2VybmVsLgotCi0qLwotCi0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2luY2x1ZGUgImR0MzE1NS5oIgotI2luY2x1ZGUgImR0MzE1NV9kcnYuaCIKLSNpbmNsdWRlICJkdDMxNTVfaW8uaCIKLSNpbmNsdWRlICJkdDMxNTVfaXNyLmgiCi0jaW5jbHVkZSAiYWxsb2NhdG9yLmgiCi0KLSNkZWZpbmUgRk9VUl9NQiAgICAgICAgICgweDA0MDAwMDApICAvKiBDYW4ndCBETUEgYWNjcm9zcyBhIDRNQiBib3VuZGFyeSEqLwotI2RlZmluZSBVUFBFUl8xMF9CSVRTICAgKDB4M0ZGPDwyMikgIC8qIENhbid0IERNQSBhY2Nyb3NzIGEgNE1CIGJvdW5kYXJ5ISovCi0KLQotLyogUG9pbnRlciBpbnRvIGdsb2JhbCBzdHJ1Y3R1cmUgZm9yIGhhbmRsaW5nIGJ1ZmZlcnMgKi8KLXN0cnVjdCBkdDMxNTVfZmJ1ZmZlciAqZHQzMTU1X2ZidWZmZXJbTUFYQk9BUkRTXSA9IHtOVUxMCi0jaWYgTUFYQk9BUkRTID09IDIKLQkJCQkJCSAgICAgICwgTlVMTAotI2VuZGlmCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBTaW1wbGUgYXJyYXkgYmFzZWQgcXVlIHN0cnVjdAotICoKLSAqIFNvbWUgaGFuZHkgZnVuY3Rpb25zIHVzaW5nIHRoZSBidWZmZXJpbmcgc3RydWN0dXJlLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGFyZV9lbXB0eV9idWZmZXJzCi0gKiBtIGlzIG1pbm9yICMgb2YgZGV2aWNlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotYm9vbCBhcmVfZW1wdHlfYnVmZmVycyhpbnQgbSkKLXsKLSAgcmV0dXJuIGR0MzE1NV9mYnVmZmVyW21dLT5lbXB0eV9sZW47Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKgotICogcHVzaF9lbXB0eQotICogbSBpcyBtaW5vciAjIG9mIGRldmljZQotICoKLSAqIFRoaXMgaXMgc2xpZ2h0bHkgY29uZnVzaW5nLiAgVGhlIG51bWJlciBlbXB0eV9sZW4gaXMgdGhlIGxpdGVyYWwgIwotICogb2YgZW1wdHkgYnVmZmVycy4gIEFmdGVyIGNhbGxpbmcsIGVtcHR5X2xlbi0xIGlzIHRoZSBpbmRleCBpbnRvIHRoZQotICogZW1wdHkgYnVmZmVyIHN0YWNrLiAgU28sIGlmIGVtcHR5X2xlbiA9PSAxLCB0aGVyZSBpcyBvbmUgZW1wdHkgYnVmZmVyLAotICogZ2l2ZW4gYnkgZHQzMTU1X2ZidWZmZXJbbV0tPmVtcHR5X2J1ZmZlcnNbMF0uCi0gKiBlbXB0eV9idWZmZXJzIHNob3VsZCBuZXZlciBmaWxsIHVwLCB0aG91Z2ggdGhpcyBpcyBub3QgY2hlY2tlZC4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgcHVzaF9lbXB0eShpbnQgaW5kZXgsIGludCBtKQotewotICBkdDMxNTVfZmJ1ZmZlclttXS0+ZW1wdHlfYnVmZmVyc1tkdDMxNTVfZmJ1ZmZlclttXS0+ZW1wdHlfbGVuXSA9IGluZGV4OwotICBkdDMxNTVfZmJ1ZmZlclttXS0+ZW1wdHlfbGVuKys7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKgotICogcG9wX2VtcHR5KG0pCi0gKiBtIGlzIG1pbm9yICMgb2YgZGV2aWNlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQgcG9wX2VtcHR5KGludCBtKQotewotICBkdDMxNTVfZmJ1ZmZlclttXS0+ZW1wdHlfbGVuLS07Ci0gIHJldHVybiBkdDMxNTVfZmJ1ZmZlclttXS0+ZW1wdHlfYnVmZmVyc1tkdDMxNTVfZmJ1ZmZlclttXS0+ZW1wdHlfbGVuXTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGlzX3JlYWR5X2J1Zl9lbXB0eShtKQotICogbSBpcyBtaW5vciAjIG9mIGRldmljZQotICoqKioqKioqKioqKioqKioqKioqKioqKiovCi1ib29sIGlzX3JlYWR5X2J1Zl9lbXB0eShpbnQgbSkKLXsKLSAgcmV0dXJuICgoZHQzMTU1X2ZidWZmZXJbbV0tPnJlYWR5X2xlbikgPT0gMCk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBpc19yZWFkeV9idWZfZnVsbChtKQotICogbSBpcyBtaW5vciAjIG9mIGRldmljZQotICogdGhpcyBzaG91bGQgKm5ldmVyKiBiZSB0cnVlIGlmIHRoZXJlIGFyZSBhbnkgYWN0aXZlLCBsb2NrZWQgb3IgZW1wdHkKLSAqIGJ1ZmZlcnMsIHNpbmNlIGl0IGNvcnJlc3BvbmRzIHRvIG5idWZmZXJzIHJlYWR5IGJ1ZmZlcnMhIQotICogNy8zMS8wMjogdG90YWwgcmV3cml0ZS4gLS1OSkMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqLwotYm9vbCBpc19yZWFkeV9idWZfZnVsbChpbnQgbSkKLXsKLSAgcmV0dXJuIGR0MzE1NV9mYnVmZmVyW21dLT5yZWFkeV9sZW4gPT0gZHQzMTU1X2ZidWZmZXJbbV0tPm5idWZmZXJzOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIHB1c2hfcmVhZHkobSwgYnVmZmVyKQotICogbSBpcyBtaW5vciAjIG9mIGRldmljZQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgcHVzaF9yZWFkeShpbnQgbSwgaW50IGluZGV4KQotewotICBpbnQgaGVhZCA9IGR0MzE1NV9mYnVmZmVyW21dLT5yZWFkeV9oZWFkOwotCi0gIGR0MzE1NV9mYnVmZmVyW21dLT5yZWFkeV9xdWVbaGVhZF0gPSBpbmRleDsKLSAgZHQzMTU1X2ZidWZmZXJbbV0tPnJlYWR5X2hlYWQgPSAoKGhlYWQgKyAxKSAlCi0JCQkJICAgICAgKGR0MzE1NV9mYnVmZmVyW21dLT5uYnVmZmVycykpOwotICBkdDMxNTVfZmJ1ZmZlclttXS0+cmVhZHlfbGVuKys7Ci0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBnZXRfdGFpbCgpCi0gKiBtIGlzIG1pbm9yICMgb2YgZGV2aWNlCi0gKgotICogU2ltcGx5IGNvbXB0dXRlcyB0aGUgdGFpbCBnaXZlbiB0aGUgaGVhZCBhbmQgdGhlIGxlbmd0aC4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgZ2V0X3RhaWwoaW50IG0pCi17Ci0gIHJldHVybiAoZHQzMTU1X2ZidWZmZXJbbV0tPnJlYWR5X2hlYWQgLQotCSAgIGR0MzE1NV9mYnVmZmVyW21dLT5yZWFkeV9sZW4gKwotCSAgIGR0MzE1NV9mYnVmZmVyW21dLT5uYnVmZmVycyklCi0JICAoZHQzMTU1X2ZidWZmZXJbbV0tPm5idWZmZXJzKTsKLX0KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogcG9wX3JlYWR5KCkKLSAqIG0gaXMgbWlub3IgIyBvZiBkZXZpY2UKLSAqCi0gKiBUaGlzIGFzc3VtZXMgdGhhdCB0aGVyZSBpcyBhIHJlYWR5IGJ1ZmZlciByZWFkeS4uLiBzaG91bGQKLSAqIGJlIGNoZWNrZWQgKGUuZy4gd2l0aCBpc19yZWFkeV9idWZfZW1wdHkoKSAgcHJpb3IgdG8gY2FsbC4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludCBwb3BfcmVhZHkoaW50IG0pCi17Ci0gIGludCB0YWlsOwotICB0YWlsID0gZ2V0X3RhaWwobSk7Ci0gIGR0MzE1NV9mYnVmZmVyW21dLT5yZWFkeV9sZW4tLTsKLSAgcmV0dXJuIGR0MzE1NV9mYnVmZmVyW21dLT5yZWFkeV9xdWVbdGFpbF07Ci19Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBwcmludHF1ZXMKLSAqIG0gaXMgbWlub3IgIyBvZiBkZXZpY2UKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgcHJpbnRxdWVzKGludCBtKQotewotICBpbnQgaGVhZCA9IGR0MzE1NV9mYnVmZmVyW21dLT5yZWFkeV9oZWFkOwotICBpbnQgdGFpbDsKLSAgaW50IG51bSA9IGR0MzE1NV9mYnVmZmVyW21dLT5uYnVmZmVyczsKLSAgaW50IGZyYW1lX2luZGV4OwotICBpbnQgaW5kZXg7Ci0KLSAgdGFpbCA9IGdldF90YWlsKG0pOwotCi0gIHByaW50aygiXG4gUjoiKTsKLSAgICBmb3IgKGluZGV4ID0gdGFpbDsgaW5kZXggIT0gaGVhZDsgaW5kZXgrKywgaW5kZXggPSBpbmRleCAlIChudW0pKSB7Ci0JZnJhbWVfaW5kZXggPSBkdDMxNTVfZmJ1ZmZlclttXS0+cmVhZHlfcXVlW2luZGV4XTsKLQlwcmludGsoIiAlZCAiLCBmcmFtZV9pbmRleCk7Ci0gICAgfQotCi0gIHByaW50aygiXG4gRToiKTsKLSAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBkdDMxNTVfZmJ1ZmZlclttXS0+ZW1wdHlfbGVuOyBpbmRleCsrKSB7Ci0JZnJhbWVfaW5kZXggPSBkdDMxNTVfZmJ1ZmZlclttXS0+ZW1wdHlfYnVmZmVyc1tpbmRleF07Ci0JcHJpbnRrKCIgJWQgIiwgZnJhbWVfaW5kZXgpOwotICAgIH0KLQotICBmcmFtZV9pbmRleCA9IGR0MzE1NV9mYnVmZmVyW21dLT5hY3RpdmVfYnVmOwotICBwcmludGsoIlxuIEE6ICVkIiwgZnJhbWVfaW5kZXgpOwotCi0gIGZyYW1lX2luZGV4ID0gZHQzMTU1X2ZidWZmZXJbbV0tPmxvY2tlZF9idWY7Ci0gIHByaW50aygiXG4gTDogJWRcbiIsIGZyYW1lX2luZGV4KTsKLQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGFkanVzdF80TUIKLSAqCi0gKiAgSWYgYSBidWZmZXIgaW50ZXJzZWN0cyB0aGUgNE1CIGJvdW5kYXJ5LCBwdXNoCi0gKiAgdGhlIHN0YXJ0IGFkZHJlc3MgdXAgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUKLSAqICBuZXh0IDRNQiBjaHVuayAoYXNzdW1pbmcgYnVmc2l6ZSA8IDRNQikuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi11MzIgYWRqdXN0XzRNQih1MzIgYnVmX2FkZHIsIHUzMiBidWZzaXplKQotewotICAgIGlmICgoKGJ1Zl9hZGRyK2J1ZnNpemUpICYgVVBQRVJfMTBfQklUUykgIT0gKGJ1Zl9hZGRyICYgVVBQRVJfMTBfQklUUykpCi0JcmV0dXJuIChidWZfYWRkcitidWZzaXplKSAmIFVQUEVSXzEwX0JJVFM7Ci0gICAgZWxzZQotCXJldHVybiBidWZfYWRkcjsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGFsbG9jYXRlX2J1ZmZlcnMKLSAqCi0gKiAgVHJ5IHRvIGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIGFsbCByZXF1ZXN0ZWQKLSAqICBidWZmZXJzLiAgSWYgdGhlcmUgaXMgbm90IGVub3VnaCBmcmVlIHNwYWNlCi0gKiAgdHJ5IGZvciBsZXNzIG1lbW9yeS4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgYWxsb2NhdGVfYnVmZmVycyh1MzIgKmJ1Zl9hZGRyLCB1MzIqIHRvdGFsX3NpemVfa2JzLAotCQkgICAgICAgdTMyIGJ1ZnNpemUpCi17Ci0gIC8qIENvbXB1dGUgdGhlIG1pbmltdW0gYW1vdW50IG9mIG1lbW9yeSBndWFyYW50ZWVkIHRvIGhvbGQgYWxsCi0gICAgIE1BWEJVRkZFUlMgc3VjaCB0aGF0IG5vIGJ1ZmZlciBjcm9zc2VzIHRoZSA0TUIgYm91bmRhcnkuCi0gICAgIFN0b3JlIHRoaXMgdmFsdWUgaW4gdGhlIHZhcmlhYmxlICJmdWxsX3NpemUiICovCi0KLSAgdTMyIGFsbG9jYXRvcl9tYXg7Ci0gIHUzMiBidWZzX3Blcl9jaHVuayA9IChGT1VSX01CIC8gYnVmc2l6ZSk7Ci0gIHUzMiBmaWxsZWRfY2h1bmtzID0gKE1BWEJVRkZFUlMtMSkgLyBidWZzX3Blcl9jaHVuazsKLSAgdTMyIGxlZnRvdmVyX2J1ZnMgPSBNQVhCVUZGRVJTIC0gZmlsbGVkX2NodW5rcyAqIGJ1ZnNfcGVyX2NodW5rOwotCi0gIHUzMiBmdWxsX3NpemUgPSBidWZzaXplICAgICAgLyogcG9zc2libHkgdW51c2FibGUgcGFydCBvZiAxc3QgY2h1bmsgKi8KLSAgICArIGZpbGxlZF9jaHVua3MgKiBGT1VSX01CICAgLyogbWF4ICMgb2YgY29tcGxldGVseSBmaWxsZWQgNG1iIGNodW5rcyAqLwotICAgICsgbGVmdG92ZXJfYnVmcyAqIGJ1ZnNpemU7ICAvKiB0aGVzZSBidWZmcyB3aWxsIGJlIGluIGEgcGFydGx5IGZpbGxlZAotCQkJCSAgIGNodW5rIGF0IGJlZ2lubmluZyBvciBlbmQgKi8KLQotICB1MzIgZnVsbF9zaXplX2ticyA9IDEgKyAoZnVsbF9zaXplLTEpIC8gMTAyNDsKLSAgdTMyIG1pbl9zaXplX2ticyA9IDIqbmRldmljZXMqYnVmc2l6ZSAvIDEwMjQ7Ci0gIHUzMiBzaXplX2ticzsKLQotICAvKiBOb3csIHRyeSB0byBhbGxvY2F0ZSBmdWxsX3NpemUuICBJZiB0aGlzIGZhaWxzLCBrZWVwIHRyeWluZyBmb3IKLSAgICAgbGVzcyAmIGxlc3MgbWVtb3J5IHVudGlsIGl0IHN1Y2NlZWRzLiAqLwotI2lmbmRlZiBTVEFOREFMT05FX0FMTE9DQVRPUgotICAvKiBpbml0aWFsaXplIHRoZSBhbGxvY2F0b3IgICAgICAgICAgICAqLwotICBhbGxvY2F0b3JfaW5pdCgmYWxsb2NhdG9yX21heCk7Ci0jZW5kaWYKLSAgc2l6ZV9rYnMgPSBmdWxsX3NpemVfa2JzOwotICAqYnVmX2FkZHIgPSAwOwotICBwcmludGsoIkRUMzE1NTogV2Ugd291bGQgbGlrZSB0byBnZXQ6ICVkIEtCXG4iLCBmdWxsX3NpemVfa2JzKTsKLSAgcHJpbnRrKCJEVDMxNTU6IC4uLmJ1dCBuZWVkIGF0IGxlYXN0OiAlZCBLQlxuIiwgbWluX3NpemVfa2JzKTsKLSAgcHJpbnRrKCJEVDMxNTU6IC4uLnRoZSBhbGxvY2F0b3IgaGFzOiAlZCBLQlxuIiwgYWxsb2NhdG9yX21heCk7Ci0gIHNpemVfa2JzID0gKGZ1bGxfc2l6ZV9rYnMgPD0gYWxsb2NhdG9yX21heCA/IGZ1bGxfc2l6ZV9rYnMgOiBhbGxvY2F0b3JfbWF4KTsKLSAgICBpZiAoc2l6ZV9rYnMgPiBtaW5fc2l6ZV9rYnMpIHsKLQlpZiAoKCpidWZfYWRkciA9IGFsbG9jYXRvcl9hbGxvY2F0ZV9kbWEoc2l6ZV9rYnMsIEdGUF9LRVJORUwpKSAhPSAwKSB7Ci0JCXByaW50aygiRFQzMTU1OiAgTWFuYWdlZCB0byBhbGxvY2F0ZTogJWQgS0JcbiIsIHNpemVfa2JzKTsKLQkJKnRvdGFsX3NpemVfa2JzID0gc2l6ZV9rYnM7Ci0JCXJldHVybjsKLQl9Ci0gICAgfQotICAvKiBJZiB3ZSBnb3QgaGVyZSwgdGhlIGFsbG9jYXRpb24gZmFpbGVkICovCi0gIHByaW50aygiRFQzMTU1OiBBbGxvY2F0b3IgZmFpbGVkIVxuIik7Ci0gICpidWZfYWRkciA9IDA7Ci0gICp0b3RhbF9zaXplX2ticyA9IDA7Ci0gIHJldHVybjsKLQotfQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZHQzMTU1X3NldHVwX2J1ZmZlcnMKLSAqCi0gKiAgc2V0dXBfYnVmZmVycyBqdXN0IHB1dHMgdGhlIGJ1ZmZlcmluZyBzeXN0ZW0gaW50bwotICogIGEgY29uc2lzdGVudCBzdGF0ZSBiZWZvcmUgdGhlIHN0YXJ0IG9mIGludGVycnVwdHMKLSAqCi0gKiBKTUwgOiBpdCBsb29rcyBsaWtlIGFsbCB0aGUgYnVmZmVycyBuZWVkIHRvIGJlCi0gKiBjb250aW51b3VzLiBTbyBJJ20gZ29pbmcgdG8gdHJ5IGFuZCBhbGxvY2F0ZSBvbmUKLSAqIGNvbnRpbnVvdXMgYnVmZmVyLgotICoKLSAqIEdDUyA6IEZpeCBETUEgcHJvYmxlbXMgd2hlbiBidWZmZXIgc3BhbnMKLSAqIDRNQiBib3VuZGFyeS4gIEFsc28sIGFkZCBlcnJvciBjaGVja2luZy4gIFRoaXMKLSAqIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIC1FTk9NRU0gd2hlbiBub3QgZW5vdWdoIG1lbW9yeS4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXUzMiBkdDMxNTVfc2V0dXBfYnVmZmVycyh1MzIgKmFsbG9jYXRvckFkZHIpCi0KLXsKLSAgdTMyIGluZGV4OwotICB1MzIgcmFtYnVmZl9hZGRyOyAvKiBzdGFydCBvZiBhbGxvY2F0aW9uICovCi0gIHUzMiByYW1idWZmX3NpemU7IC8qIHRvdGFsIHNpemUgYWxsb2NhdGVkIHRvIGRyaXZlciAqLwotICB1MzIgcmFtYnVmZl9hY207ICAvKiBhY2N1bWxhdG9yLCBrZWVwIHRyYWNrIG9mIGhvdyBtdWNoCi0JCQkgIGlzIGxlZnQgYWZ0ZXIgYmVpbmcgc3BsaXQgdXAqLwotICB1MzIgcmFtYnVmZl9lbmQ7ICAvKiBlbmQgb2YgcmFtYnVmZiAqLwotICB1MzIgbnVtYnVmczsgICAgICAvKiBudW1iZXIgb2YgdXNlZnVsIGJ1ZmZlcnMgYWxsb2NhdGVkIChwZXIgZGV2aWNlKSAqLwotICB1MzIgYnVmc2l6ZSAgICAgID0gRFQzMTU1X01BWF9ST1dTICogRFQzMTU1X01BWF9DT0xTOwotICBpbnQgbTsgICAgICAgICAgICAgICAvKiBtaW5vciAjIG9mIGRldmljZSwgbG9vcGVkIGZvciBhbGwgZGV2cyAqLwotCi0gIC8qIHplcm8gdGhlIGZidWZmZXIgc3RhdHVzIGFuZCBhZGRyZXNzIHN0cnVjdHVyZSAqLwotICAgIGZvciAobSA9IDA7IG0gPCBuZGV2aWNlczsgbSsrKSB7Ci0JZHQzMTU1X2ZidWZmZXJbbV0gPSAmKGR0MzE1NV9zdGF0dXNbbV0uZmJ1ZmZlcik7Ci0KLSAgICAgIC8qIE1ha2Ugc3VyZSB0aGUgYnVmZmVyaW5nIHZhcmlhYmxlcyBhcmUgY29uc2lzdGVudCAqLwotICAgICAgewotCXU4ICpwdHIgPSAodTggKikgZHQzMTU1X2ZidWZmZXJbbV07Ci0JCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHNpemVvZihzdHJ1Y3QgZHQzMTU1X2ZidWZmZXIpOyBpbmRleCsrKQotCQkJKihwdHIrKykgPSAwOwotICAgICAgfQotICAgIH0KLQotICAvKiBhbGxvY2F0ZSBhIGxhcmdlIGNvbnRpZ3VvdXMgY2h1bmsgb2YgUkFNICovCi0gIGFsbG9jYXRlX2J1ZmZlcnMoJnJhbWJ1ZmZfYWRkciwgJnJhbWJ1ZmZfc2l6ZSwgYnVmc2l6ZSk7Ci0gIHByaW50aygiRFQzMTU1OiBtZW0gaW5mb1xuIik7Ci0gIHByaW50aygiICAtIHJhbWJ1Zl9hZGRyID0gMHgleFxuIiwgcmFtYnVmZl9hZGRyKTsKLSAgcHJpbnRrKCIgIC0gbGVuZ3RoIChrYikgPSAldVxuIiwgcmFtYnVmZl9zaXplKTsKLSAgICBpZiAocmFtYnVmZl9hZGRyID09IDApIHsKLQlwcmludGsoS0VSTl9JTkZPCi0JICAgICJEVDMxNTU6IEVycm9yIHNldHVwX2J1ZmZlcnMoKSBhbGxvY2F0b3IgZG1hIGZhaWxlZFxuIik7Ci0JcmV0dXJuIC1FTk9NRU07Ci0gICAgfQotICAqYWxsb2NhdG9yQWRkciA9IHJhbWJ1ZmZfYWRkcjsKLSAgcmFtYnVmZl9lbmQgPSByYW1idWZmX2FkZHIgKyAxMDI0ICogcmFtYnVmZl9zaXplOwotCi0gIC8qIGFmdGVyIGFsbG9jYXRpb24sIHdlIG5lZWQgdG8gY291bnQgaG93IG1hbnkgdXNlZnVsIGJ1ZmZlcnMgdGhlcmUKLSAgICAgYXJlIHNvIHdlIGNhbiBnaXZlIGFuIGVxdWFsIG51bWJlciB0byBlYWNoIGRldmljZSAqLwotICByYW1idWZmX2FjbSA9IHJhbWJ1ZmZfYWRkcjsKLSAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBNQVhCVUZGRVJTOyBpbmRleCsrKSB7Ci0JcmFtYnVmZl9hY20gPSBhZGp1c3RfNE1CKHJhbWJ1ZmZfYWNtLCBidWZzaXplKTsvKmF2b2lkIHNwYW5uaW5nIDRNQiBiZHJ5Ki8KLQlpZiAocmFtYnVmZl9hY20gKyBidWZzaXplID4gcmFtYnVmZl9lbmQpCi0JCWJyZWFrOwotCXJhbWJ1ZmZfYWNtICs9IGJ1ZnNpemU7Ci0gICAgfQotICAvKiBGb2xsb3dpbmcgbGluZSBpcyBPSywgd2lsbCB3YXN0ZSBidWZmZXJzIGlmIGluZGV4Ci0gICAqIG5vdCBldmVubHkgZGl2aXNpYmxlIGJ5IG5kZXZpY2VzIC1OSkMqLwotICBudW1idWZzID0gaW5kZXggLyBuZGV2aWNlczsKLSAgcHJpbnRrKCIgIC0gbnVtYnVmcyA9ICV1XG4iLCBudW1idWZzKTsKLSAgICBpZiAobnVtYnVmcyA8IDIpIHsKLQlwcmludGsoS0VSTl9JTkZPCi0JIkRUMzE1NTogRXJyb3Igc2V0dXBfYnVmZmVycygpIGNvdWxkbid0IGFsbG9jYXRlIDIgYnVmcy9ib2FyZFxuIik7Ci0JcmV0dXJuIC1FTk9NRU07Ci0gICAgfQotCi0gIC8qIG5vdyB0aGF0IHdlIGhhdmUgYm9hcmQgbWVtb3J5IHdlIHNwaXQgaXQgdXAgKi8KLSAgLyogYmV0d2VlbiB0aGUgYm9hcmRzIGFuZCB0aGUgYnVmZmVycyAgICAgICAgICAqLwotICAgIHJhbWJ1ZmZfYWNtID0gcmFtYnVmZl9hZGRyOwotICAgIGZvciAobSA9IDA7IG0gPCBuZGV2aWNlczsgbSsrKSB7Ci0JcmFtYnVmZl9hY20gPSBhZGp1c3RfNE1CKHJhbWJ1ZmZfYWNtLCBidWZzaXplKTsKLQotCS8qIFNhdmUgdGhlIHN0YXJ0IG9mIHRoaXMgYm9hcmRzIGJ1ZmZlciBzcGFjZSAoZm9yIG1tYXApLiAgKi8KLQlkdDMxNTVfc3RhdHVzW21dLm1lbV9hZGRyID0gcmFtYnVmZl9hY207Ci0KLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBudW1idWZzOyBpbmRleCsrKSB7Ci0JCXJhbWJ1ZmZfYWNtID0gYWRqdXN0XzRNQihyYW1idWZmX2FjbSwgYnVmc2l6ZSk7Ci0JCWlmIChyYW1idWZmX2FjbSArIGJ1ZnNpemUgPiByYW1idWZmX2VuZCkgewotCQkJLyogU2hvdWxkIG5ldmVyIGhhcHBlbiAqLwotCQkJcHJpbnRrKCJEVDMxNTUgUFJPR1JBTSBFUlJPUiAoR0NTKVxuIgotCQkJIkVycm9yIGRpc3RyaWJ1dGluZyBhbGxvY2F0ZWQgYnVmZmVyc1xuIik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCi0JCWR0MzE1NV9mYnVmZmVyW21dLT5mcmFtZV9pbmZvW2luZGV4XS5hZGRyID0gcmFtYnVmZl9hY207Ci0JCXB1c2hfZW1wdHkoaW5kZXgsIG0pOwotCQkvKiBwcmludGsoIiAgLSBCdWZmZXIgOiAlbHhcbiIsCi0JCSogZHQzMTU1X2ZidWZmZXJbbV0tPmZyYW1lX2luZm9baW5kZXhdLmFkZHIpOwotCQkqLwotCQlkdDMxNTVfZmJ1ZmZlclttXS0+bmJ1ZmZlcnMgKz0gMTsKLQkJcmFtYnVmZl9hY20gKz0gYnVmc2l6ZTsKLQl9Ci0KLQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgYW4gYWN0aXZlIGJ1ZmZlciB0aGVyZS4gKi8KLQlkdDMxNTVfZmJ1ZmZlclttXS0+YWN0aXZlX2J1ZiAgICA9IHBvcF9lbXB0eShtKTsKLQlkdDMxNTVfZmJ1ZmZlclttXS0+ZXZlbl9oYXBwZW5lZCA9IDA7Ci0JZHQzMTU1X2ZidWZmZXJbbV0tPmV2ZW5fc3RvcHBlZCAgPSAwOwotCi0JLyogbWFrZSBzdXJlIHRoZXJlIGlzIG5vIGxvY2tlZF9idWYgSk1MIDIvMjgvMDAgKi8KLQlkdDMxNTVfZmJ1ZmZlclttXS0+bG9ja2VkX2J1ZiA9IC0xOwotCi0JZHQzMTU1X3N0YXR1c1ttXS5tZW1fc2l6ZSA9Ci0JcmFtYnVmZl9hY20gLSBkdDMxNTVfc3RhdHVzW21dLm1lbV9hZGRyOwotCi0JLyogc2V0dXAgdGhlIHJlYWR5IHF1ZXVlICovCi0JZHQzMTU1X2ZidWZmZXJbbV0tPnJlYWR5X2hlYWQgPSAwOwotCWR0MzE1NV9mYnVmZmVyW21dLT5yZWFkeV9sZW4gPSAwOwotCXByaW50aygiQXZhaWxhYmxlIGJ1ZmZlcnMgZm9yIGRldmljZSAlZDogJWRcbiIsCi0JICAgIG0sIGR0MzE1NV9mYnVmZmVyW21dLT5uYnVmZmVycyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDE7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogaW50ZXJuYWxfcmVsZWFzZV9sb2NrZWRfYnVmZmVyCi0gKgotICogVGhlIGludGVybmFsIGZ1bmN0aW9uIGZvciByZWxlYXNpbmcgYSBsb2NrZWQgYnVmZmVyLgotICogSXQgYXNzdW1lcyBpbnRlcnJ1cHRzIGFyZSB0dXJuZWQgb2ZmLgotICoKLSAqIG0gaXMgbWlub3IgbnVtYmVyIG9mIGRldmljZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgaW50ZXJuYWxfcmVsZWFzZV9sb2NrZWRfYnVmZmVyKGludCBtKQotewotICAvKiBQb2ludGVyIGludG8gZ2xvYmFsIHN0cnVjdHVyZSBmb3IgaGFuZGxpbmcgYnVmZmVycyAqLwotICAgIGlmIChkdDMxNTVfZmJ1ZmZlclttXS0+bG9ja2VkX2J1ZiA+PSAwKSB7Ci0JcHVzaF9lbXB0eShkdDMxNTVfZmJ1ZmZlclttXS0+bG9ja2VkX2J1ZiwgbSk7Ci0JZHQzMTU1X2ZidWZmZXJbbV0tPmxvY2tlZF9idWYgPSAtMTsKLSAgICB9Ci19Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBkdDMxNTVfcmVsZWFzZV9sb2NrZWRfYnVmZmVyKCkKLSAqIG0gaXMgbWlub3IgIyBvZiBkZXZpY2UKLSAqCi0gKiBUaGUgdXNlciBmdW5jdGlvbiBvZiB0aGUgYWJvdmUuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZCBkdDMxNTVfcmVsZWFzZV9sb2NrZWRfYnVmZmVyKGludCBtKQotewotCXVuc2lnbmVkIGxvbmcgaW50IGZsYWdzOwotCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JaW50ZXJuYWxfcmVsZWFzZV9sb2NrZWRfYnVmZmVyKG0pOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGR0MzE1NV9mbHVzaCgpCi0gKiBtIGlzIG1pbm9yICMgb2YgZGV2aWNlCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50IGR0MzE1NV9mbHVzaChpbnQgbSkKLXsKLSAgaW50IGluZGV4OwotICB1bnNpZ25lZCBsb25nIGludCBmbGFnczsKLSAgbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7Ci0gIGxvY2FsX2lycV9kaXNhYmxlKCk7Ci0KLSAgaW50ZXJuYWxfcmVsZWFzZV9sb2NrZWRfYnVmZmVyKG0pOwotICBkdDMxNTVfZmJ1ZmZlclttXS0+ZW1wdHlfbGVuID0gMDsKLQotICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGR0MzE1NV9mYnVmZmVyW21dLT5uYnVmZmVyczsgaW5kZXgrKykKLQlwdXNoX2VtcHR5KGluZGV4LCAgbSk7Ci0KLSAgLyogTWFrZSBzdXJlIHRoZXJlIGlzIGFuIGFjdGl2ZSBidWZmZXIgdGhlcmUuICovCi0gIGR0MzE1NV9mYnVmZmVyW21dLT5hY3RpdmVfYnVmID0gcG9wX2VtcHR5KG0pOwotCi0gIGR0MzE1NV9mYnVmZmVyW21dLT5ldmVuX2hhcHBlbmVkID0gMDsKLSAgZHQzMTU1X2ZidWZmZXJbbV0tPmV2ZW5fc3RvcHBlZCAgPSAwOwotCi0gIC8qIHNldHVwIHRoZSByZWFkeSBxdWV1ZSAgKi8KLSAgZHQzMTU1X2ZidWZmZXJbbV0tPnJlYWR5X2hlYWQgPSAwOwotICBkdDMxNTVfZmJ1ZmZlclttXS0+cmVhZHlfbGVuID0gMDsKLQotICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZHQzMTU1X2dldF9yZWFkeV9idWZmZXIoKQotICogbSBpcyBtaW5vciAjIG9mIGRldmljZQotICoKLSAqIGdldF9yZWFkeV9idWZmZXIgd2lsbCBncmFiIHRoZSBuZXh0IGNodW5rIG9mIGRhdGEKLSAqIGlmIGl0IGlzIGFscmVhZHkgdGhlcmUsIG90aGVyd2lzZSBpdCByZXR1cm5zIDAuCi0gKiBJZiB0aGUgdXNlciBoYXMgYSBidWZmZXIgbG9ja2VkIGl0IHdpbGwgdW5sb2NrCi0gKiB0aGF0IGJ1ZmZlciBiZWZvcmUgcmV0dXJuaW5nIHRoZSBuZXcgb25lLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50IGR0MzE1NV9nZXRfcmVhZHlfYnVmZmVyKGludCBtKQotewotICBpbnQgZnJhbWVfaW5kZXg7Ci0gIHVuc2lnbmVkIGxvbmcgaW50IGZsYWdzOwotICBsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKLSAgbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQotI2lmZGVmIERFQlVHX1FVRVNfQQotICBwcmludHF1ZXMobSk7Ci0jZW5kaWYKLQotICBpbnRlcm5hbF9yZWxlYXNlX2xvY2tlZF9idWZmZXIobSk7Ci0KLSAgICBpZiAoaXNfcmVhZHlfYnVmX2VtcHR5KG0pKQotCWZyYW1lX2luZGV4ID0gLTE7Ci0gICAgZWxzZSB7Ci0JZnJhbWVfaW5kZXggPSBwb3BfcmVhZHkobSk7Ci0JZHQzMTU1X2ZidWZmZXJbbV0tPmxvY2tlZF9idWYgPSBmcmFtZV9pbmRleDsKLSAgICB9Ci0KLSNpZmRlZiBERUJVR19RVUVTX0IKLSAgcHJpbnRxdWVzKG0pOwotI2VuZGlmCi0KLSAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0gIHJldHVybiBmcmFtZV9pbmRleDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvZHQzMTU1X2lzci5oIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTVfaXNyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkNDc0Y2YuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTVfaXNyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKgotCi1Db3B5cmlnaHQgMTk5NiwyMDAyIEdyZWdvcnkgRC4gSGFnZXIsIEFsZnJlZCBBLiBSaXp6aSwgTm9haCBKLiBDb3dhbiwKLQkJICAgIEphc29uIExhcGVudGEsIFNjb3R0IFNtZWRsZXkKLQotVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyLgotCi1UaGUgRFQzMTU1IERldmljZSBEcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQKLWFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCi1MaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi1UaGUgRFQzMTU1IERldmljZSBEcml2ZXIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCi11c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5Ci1vZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi1HTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi1Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotYWxvbmcgd2l0aCB0aGUgRFQzMTU1IERldmljZSBEcml2ZXI7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLVNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi1NQSAwMjExMS0xMzA3IFVTQQotCi0KLS0tIENoYW5nZXMgLS0KLQotICBEYXRlICAgICBQcm9ncmFtbWVyICAgRGVzY3JpcHRpb24gb2YgY2hhbmdlcyBtYWRlCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgMDMtSnVsLTIwMDAgSk1MICAgICAgIG4vYQotICAyNC1KdWwtMjAwMiBTUyAgICAgICAgR1BMIGxpY2VuY2UuCi0gIDI2LU9jdC0yMDA5IFNTCVBvcnRpbmcgdG8gMi42LjMwIGtlcm5lbC4KLQotLS0gbm90ZXMgLS0KLQotKi8KLQotI2lmbmRlZiBEVDMxNTVfSVNSX0gKLSNkZWZpbmUgRFQzMTU1X0lTUl9ICi0KLWV4dGVybiBzdHJ1Y3QgZHQzMTU1X2ZidWZmZXIgKmR0MzE1NV9mYnVmZmVyW01BWEJPQVJEU107Ci0KLS8qIFVzZXIgZnVuY3Rpb25zIGZvciBidWZmZXJpbmcgKi8KLS8qIEluaXRpYWxpemUgdGhlIGJ1ZmZlcmluZyBzeXN0ZW0uICBUaGlzIHNob3VsZCAqLwotLyogYmUgY2FsbGVkIHByaW9yIHRvIGVuYWJsaW5nIGludGVycnVwdHMgKi8KLQotdTMyIGR0MzE1NV9zZXR1cF9idWZmZXJzKHUzMiAqYWxsb2NhdG9yQWRkcik7Ci0KLS8qIEdldCB0aGUgbmV4dCBmcmFtZSBvZiBkYXRhIGlmIGl0IGlzIHJlYWR5LiAgUmV0dXJucyAqLwotLyogemVybyBpZiBubyBkYXRhIGlzIHJlYWR5LiAgSWYgdGhlcmUgaXMgZGF0YSBidXQgKi8KLS8qIHRoZSB1c2VyIGhhcyBhIGxvY2tlZCBidWZmZXIsIGl0IHdpbGwgdW5sb2NrIHRoYXQgKi8KLS8qIGJ1ZmZlciBhbmQgcmV0dXJuIGl0IHRvIHRoZSBmcmVlIGxpc3QuICovCi0KLWludCBkdDMxNTVfZ2V0X3JlYWR5X2J1ZmZlcihpbnQgbWlub3IpOwotCi0vKiBSZXR1cm4gYSBsb2NrZWQgYnVmZmVyIHRvIHRoZSBmcmVlIGxpc3QgKi8KLQotdm9pZCBkdDMxNTVfcmVsZWFzZV9sb2NrZWRfYnVmZmVyKGludCBtaW5vcik7Ci0KLS8qIEZsdXNoIHRoZSBidWZmZXIgc3lzdGVtICovCi1pbnQgZHQzMTU1X2ZsdXNoKGludCBtaW5vcik7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBTaW1wbGUgYXJyYXkgYmFzZWQgcXVlIHN0cnVjdAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWJvb2wgYXJlX2VtcHR5X2J1ZmZlcnMoaW50IG1pbm9yKTsKLXZvaWQgcHVzaF9lbXB0eShpbnQgaW5kZXgsIGludCBtaW5vcik7Ci0KLWludCAgcG9wX2VtcHR5KGludCBtaW5vcik7Ci0KLWJvb2wgaXNfcmVhZHlfYnVmX2VtcHR5KGludCBtaW5vcik7Ci1ib29sIGlzX3JlYWR5X2J1Zl9mdWxsKGludCBtaW5vcik7Ci0KLXZvaWQgcHVzaF9yZWFkeShpbnQgbWlub3IsIGludCBpbmRleCk7Ci1pbnQgIHBvcF9yZWFkeShpbnQgbWlub3IpOwotCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NXY0bC9kdDMxNTV2NGwuYyBiL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTV2NGwvZHQzMTU1djRsLmMKaW5kZXggNmRjM2FmNi4uZmQ0OGIzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NXY0bC9kdDMxNTV2NGwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1djRsL2R0MzE1NXY0bC5jCkBAIC0xMDA4LDYgKzEwMDgsOCBAQAogc3RhdGljIGludCBfX2RldmluaXQKIGR0MzE1NV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CisJc3RydWN0IGRtYV9jb2hlcmVudF9tZW0gKm1lbTsKKwlkbWFfYWRkcl90IGRldl9iYXNlOwogCWludCBwYWdlcyA9IHNpemUgPj4gUEFHRV9TSElGVDsKIAlpbnQgYml0bWFwX3NpemUgPSBCSVRTX1RPX0xPTkdTKHBhZ2VzKSAqIHNpemVvZihsb25nKTsKIApAQCAtMTAxOCwyNSArMTAyMCwyOCBAQAogCWlmIChkZXYtPmRtYV9tZW0pCiAJCWdvdG8gb3V0OwogCi0JZGV2LT5kbWFfbWVtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRtYV9jb2hlcmVudF9tZW0pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRldi0+ZG1hX21lbSkKKwltZW0gPSBremFsbG9jKHNpemVvZigqbWVtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtZW0pCiAJCWdvdG8gb3V0OwotCWRldi0+ZG1hX21lbS0+Yml0bWFwID0ga3phbGxvYyhiaXRtYXBfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkZXYtPmRtYV9tZW0tPmJpdG1hcCkKKwltZW0tPnZpcnRfYmFzZSA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYsIHNpemUsICZkZXZfYmFzZSwKKwkJCQkJCQlEVDMxNTVfQ09IX0ZMQUdTKTsKKwlpZiAoIW1lbS0+dmlydF9iYXNlKQorCQlnb3RvIGVycl9hbGxvY19jb2hlcmVudDsKKwltZW0tPmJpdG1hcCA9IGt6YWxsb2MoYml0bWFwX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghbWVtLT5iaXRtYXApCiAJCWdvdG8gZXJyX2JpdG1hcDsKIAotCWRldi0+ZG1hX21lbS0+dmlydF9iYXNlID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwKLQkJCQkmZGV2LT5kbWFfbWVtLT5kZXZpY2VfYmFzZSwgRFQzMTU1X0NPSF9GTEFHUyk7Ci0JaWYgKCFkZXYtPmRtYV9tZW0tPnZpcnRfYmFzZSkKLQkJZ290byBlcnJfY29oZXJlbnQ7Ci0JZGV2LT5kbWFfbWVtLT5zaXplID0gcGFnZXM7Ci0JZGV2LT5kbWFfbWVtLT5mbGFncyA9IGZsYWdzOworCS8qIGNvaGVyZW50X2RtYV9tYXNrIGlzIGFscmVhZHkgc2V0IHRvIDMyIGJpdHMgKi8KKwltZW0tPmRldmljZV9iYXNlID0gZGV2X2Jhc2U7CisJbWVtLT5zaXplID0gcGFnZXM7CisJbWVtLT5mbGFncyA9IGZsYWdzOworCWRldi0+ZG1hX21lbSA9IG1lbTsKIAlyZXR1cm4gRE1BX01FTU9SWV9NQVA7CiAKLWVycl9jb2hlcmVudDoKLQlrZnJlZShkZXYtPmRtYV9tZW0tPmJpdG1hcCk7CiBlcnJfYml0bWFwOgotCWtmcmVlKGRldi0+ZG1hX21lbSk7CisJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCBtZW0tPnZpcnRfYmFzZSwgZGV2X2Jhc2UpOworZXJyX2FsbG9jX2NvaGVyZW50OgorCWtmcmVlKG1lbSk7CiBvdXQ6CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDk2ZjM5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvS2NvbmZpZwpAQCAtMCwwICsxLDE3IEBACitjb25maWcgRUFTWUNBUAorCXRyaXN0YXRlICJFYXN5Q0FQIFVTQiBJRCAwNWUxOjA0MDggc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYKKworCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYW4gaW50ZWdyYXRlZCBhdWRpby92aWRlbyBkcml2ZXIgZm9yIEVhc3lDQVAgY2FyZHMgd2l0aAorCSAgVVNCIElEIDA1ZTE6MDQwOC4gIEl0IHN1cHBvcnRzIHR3byBoYXJkd2FyZSB2YXJpYW50czoKKworCSAgKiAgRWFzeUNBUCBVU0IgMi4wIFZpZGVvIEFkYXB0ZXIgd2l0aCBBdWRpbywgTW9kZWwgREM2MCwKKwkgICAgIGhhdmluZyBpbnB1dCBjYWJsZXMgbGFiZWxsZWQgQ1ZCUywgUy1WSURFTywgQVVESU8oTCksIEFVRElPKFIpCisKKwkgICogIEVhc3lDQVAwMDIgNC1DaGFubmVsIFVTQiAyLjAgRFZSLCBoYXZpbmcgaW5wdXQgY2FibGVzIGxhYmVsbGVkCisJICAgICAxLCAyLCAzLCA0IGFuZCBhbiB1bmxhYmVsbGVkIGlucHV0IGNhYmxlIGZvciBhIG1pY3JvcGhvbmUuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGVhc3ljYXAKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTNiZDZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvTWFrZWZpbGUKQEAgLTAsMCArMSwxMyBAQAorCitvYmotJChDT05GSUdfRUFTWUNBUCkJKz0gZWFzeWNhcC5vCisKK2Vhc3ljYXAtb2Jqcwk6PSBlYXN5Y2FwX21haW4ubyBlYXN5Y2FwX2xvdy5vIGVhc3ljYXBfc291bmQubworZWFzeWNhcC1vYmpzCSs9IGVhc3ljYXBfaW9jdGwubyBlYXN5Y2FwX3NldHRpbmdzLm8KK2Vhc3ljYXAtb2JqcwkrPSBlYXN5Y2FwX3Rlc3RjYXJkLm8KKworRVhUUkFfQ0ZMQUdTICs9IC1XYWxsCisjIEltcG9zZSBhbGwgb3Igbm9uZSBvZiB0aGUgZm9sbG93aW5nOgorRVhUUkFfQ0ZMQUdTICs9IC1ERUFTWUNBUF9JU19WSURFT0RFVl9DTElFTlQKK0VYVFJBX0NGTEFHUyArPSAtREVBU1lDQVBfTkVFRFNfVjRMMl9ERVZJQ0VfSAorRVhUUkFfQ0ZMQUdTICs9IC1ERUFTWUNBUF9ORUVEU19WNEwyX0ZPUFMKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvUkVBRE1FIGIvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NzU0ODEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9SRUFETUUKQEAgLTAsMCArMSwxMzAgQEAKKworICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAqICAgRWFzeUNBUCBVU0IgMi4wIFZpZGVvIEFkYXB0ZXIgd2l0aCBBdWRpbywgTW9kZWwgREM2MCAgKgorICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAgICAgICAqICAgICAgICAgICAgIEVhc3lDQVAwMDIgNC1DaGFubmVsIFVTQiAyLjAgRFZSICAgICAgICAgICAgKgorICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgICAgICAgICAgTWlrZSBUaG9tYXMgIDxybXRob21hc0BzY2lvbHVzLm9yZz4KKworCisKK1NVUFBPUlRFRCBIQVJEV0FSRQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIGlzIGludGVuZGVkIGZvciB1c2Ugd2l0aCBoYXJkd2FyZSBoYXZpbmcgVVNCIElEIDA1ZTE6MDQwOC4KK1R3byBraW5kcyBvZiBFYXN5Q0FQIGhhdmUgdGhpcyBVU0IgSUQsIG5hbWVseToKKworICAgICogIEVhc3lDQVAgVVNCIDIuMCBWaWRlbyBBZGFwdGVyIHdpdGggQXVkaW8sIE1vZGVsIERDNjAsCisgICAgICAgaGF2aW5nIGlucHV0IGNhYmxlcyBsYWJlbGxlZCBDVkJTLCBTLVZJREVPLCBBVURJTyhMKSwgQVVESU8oUikKKworICAgICogIEVhc3lDQVAwMDIgNC1DaGFubmVsIFVTQiAyLjAgRFZSLCBoYXZpbmcgaW5wdXQgY2FibGVzIGxhYmVsbGVkCisgICAgICAgMSwgMiwgMywgNCBhbmQgYW4gdW5sYWJlbGxlZCBpbnB1dCBjYWJsZSBmb3IgYSBtaWNyb3Bob25lLgorCisKK0JVSUxEIE9QVElPTlMgQU5EIERFUEVOREVOQ0lFUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHRoZSBwYXJhbWV0ZXIgRUFTWUNBUF9JU19WSURFT0RFVl9DTElFTlQgaXMgdW5kZWZpbmVkIGR1cmluZyBjb21waWxhdGlvbgordGhlIGJ1aWx0IG1vZHVsZSBpcyBlbnRpcmVseSBpbmRlcGVuZGVudCBvZiB0aGUgdmlkZW9kZXYgbW9kdWxlLCBhbmQgd2hlbgordGhlIEVhc3lDQVAgaXMgcGh5c2ljYWxseSBwbHVnZ2VkIGludG8gYSBVU0IgcG9ydCB0aGUgc3BlY2lhbCBmaWxlcworL2Rldi9lYXN5Y2FwMCBhbmQgL2Rldi9lYXN5c25kMSBhcmUgY3JlYXRlZCBhcyB2aWRlbyBhbmQgc291bmQgc291cmNlcworcmVzcGVjdGl2ZWx5LgorCitJZiB0aGUgcGFyYW1ldGVyIEVBU1lDQVBfSVNfVklERU9ERVZfQ0xJRU5UIGlzIGRlZmluZWQgZHVyaW5nIGNvbXBpbGF0aW9uCit0aGUgYnVpbHQgZWFzeWNhcCBtb2R1bGUgaXMgY29uZmlndXJlZCB0byByZWdpc3RlciB3aXRoIHRoZSB2aWRlb2RldiBtb2R1bGUsCitpbiB3aGljaCBjYXNlIHRoZSBzcGVjaWFsIGZpbGVzIGNyZWF0ZWQgd2hlbiB0aGUgRWFzeUNBUCBpcyBwbHVnZ2VkIGluIGFyZQorL2Rldi92aWRlbzAgYW5kIC9kZXYvZWFzeXNuZDAuICBVc2Ugb2YgdGhlIGVhc3ljYXAgbW9kdWxlIGFzIGEgY2xpZW50IG9mCit0aGUgdmlkZW9kZXYgbW9kdWxlIGhhcyByZWNlaXZlZCB2ZXJ5IGxpdHRsZSB0ZXN0aW5nIGFzIG9mIEp1bmUgMjAxMC4KKworCitLTk9XTiBCVUlMRCBQUk9CTEVNUworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKDEpIFJlY2VudCBnY2MgdmVyc2lvbnMgbWF5IGdlbmVyYXRlIHRoZSBtZXNzYWdlOgorCisgICAgIHdhcm5pbmc6IHRoZSBmcmFtZSBzaXplIG9mIC4uLi4gYnl0ZXMgaXMgbGFyZ2VyIHRoYW4gMTAyNCBieXRlcworCitUaGlzIHdhcm5pbmcgY2FuIGJlIHN1cHByZXNzZWQgYnkgc3BlY2lmeWluZyBpbiB0aGUgTWFrZWZpbGU6CisKKyAgICAgRVhUUkFfQ0ZMQUdTICs9IC1XZnJhbWUtbGFyZ2VyLXRoYW49ODE5MgorCitidXQgaXQgd291bGQgYmUgcHJlZmVyYWJsZSB0byByZW1vdmUgdGhlIGNhdXNlIG9mIHRoZSB3YXJuaW5nLgorCisKK0tOT1dOIFJVTlRJTUUgSVNTVUVTCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoMSkgUmFuZG9tbHkgKG1heWJlIDUgdG8gMTAlIG9mIG9jY2FzaW9ucykgdGhlIGRyaXZlciBmYWlscyB0byBwcm9kdWNlIGFueQorb3V0cHV0IGF0IHN0YXJ0LXVwLiAgQ2xvc2luZyBtcGxheWVyIChvciB3aGF0ZXZlciB0aGUgdXNlciBwcm9ncmFtIGlzKSBhbmQKK3Jlc3RhcnRpbmcgaXQgcmVzdG9yZXMgbm9ybWFsIHBlcmZvcm1hbmNlIHdpdGhvdXQgYW55IG90aGVyIHJlbWVkaWFsIGFjdGlvbgorYmVpbmcgbmVjZXNzYXJ5LiAgVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyBub3Qga25vd24uCisKKygyKSBJbnRlbnRpb25hbGx5LCB0aGlzIGRyaXZlciB3aWxsIG5vdCBzdHJlYW0gbWF0ZXJpYWwgd2hpY2ggaXMgdW5hbWJpZ3VvdXNseQoraWRlbnRpZmllZCBieSB0aGUgaGFyZHdhcmUgYXMgY29weS1wcm90ZWN0ZWQuICBUaGUgdmlkZW8gb3V0cHV0IHdpbGwgZnJlZXplCit3aXRoaW4gYWJvdXQgYSBtaW51dGUgd2hlbiB0aGlzIHNpdHVhdGlvbiBhcmlzZXMuCisKKygzKSBUaGUgY29udHJvbHMgZm9yIGx1bWluYW5jZSwgY29udHJhc3QsIHNhdHVyYXRpb24sIGh1ZSBhbmQgdm9sdW1lIG1heSBub3QKK2Fsd2F5cyB3b3JrIHByb3Blcmx5LgorCisoNCkgUmVkdWNlZC1yZXNvbHV0aW9uIFMtVmlkZW8gc2VlbXMgdG8gc3VmZmVyIGZyb20gbW9pcmUgYXJ0ZWZhY3RzLiAgTm8KK2F0dGVtcHQgaGFzIHlldCBiZWVuIG1hZGUgdG8gcmVtZW1keSB0aGlzLgorCisKK1NVUFBPUlRFRCBUViBTVEFOREFSRFMgQU5EIFJFU09MVVRJT05TCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIFRWIHN0YW5kYXJkcyBhcmUgbmF0aXZlbHkgc3VwcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZSBhbmQgYXJlCit1c2FibGUgYXMgKGZvciBleGFtcGxlKSB0aGUgIm5vcm09IiBwYXJhbWV0ZXIgaW4gdGhlIG1wbGF5ZXIgY29tbWFuZDoKKworICAgIFBBTF9CR0hJTiwgICAgTlRTQ19OXzQ0MywKKyAgICBQQUxfTmMsICAgICAgIE5UU0NfTiwKKyAgICBTRUNBTSwgICAgICAgIE5UU0NfTSwgICAgICAgIE5UU0NfTV9KUCwKKyAgICBQQUxfNjAsICAgICAgIE5UU0NfNDQzLAorICAgIFBBTF9NLgorCitUaGUgYXZhaWxhYmxlIHBpY3R1cmUgc2l6ZXMgYXJlOgorCisgICAgIGF0IDI1IGZyYW1lcyBwZXIgc2Vjb25kOiAgIDcyMHg1NzYsIDcwNHg1NzYsIDY0MHg0ODAsIDM2MHgyODgsIDMyMHgyNDA7CisgICAgIGF0IDMwIGZyYW1lcyBwZXIgc2Vjb25kOiAgIDcyMHg0ODAsIDY0MHg0ODAsIDM2MHgyNDAsIDMyMHgyNDA7CisKKworV0hBVCdTIFRFU1RFRCBBTkQgV0hBVCdTIE5PVAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBpcyBrbm93biB0byB3b3JrIHdpdGggbXBsYXllciwgbWVuY29kZXIsIHR2dGltZSBhbmQgc3VmZmljaWVudGx5CityZWNlbnQgdmVyc2lvbnMgb2YgdmxjLiAgQW4gaW50ZXJmYWNlIHRvIGZmbXBlZyBpcyBpbXBsZW1lbnRlZCwgYnV0IHNlcmlvdXMKK2F1ZGlvLXZpZGVvIHN5bmNocm9uaXphdGlvbiBwcm9ibGVtcyByZW1haW4uCisKK1RoZSBkcml2ZXIgaXMgZGVzaWduZWQgdG8gc3VwcG9ydCBhbGwgdGhlIFRWIHN0YW5kYXJkcyBhY2NlcHRlZCBieSB0aGUKK2hhcmR3YXJlLCBidXQgYXMgeWV0IGl0IGhhcyBhY3R1YWxseSBiZWVuIHRlc3RlZCBvbiBvbmx5IGEgZmV3IG9mIHRoZXNlLgorCitJIGhhdmUgYmVlbiB1bmFibGUgdG8gdGVzdCBhbmQgY2FsaWJyYXRlIHRoZSBTLXZpZGVvIGlucHV0IG15c2VsZiBiZWNhdXNlIEkKK2RvIG5vdCBwb3NzZXNzIGFueSBlcXVpcG1lbnQgd2l0aCBTLXZpZGVvIG91dHB1dC4KKworVGhpcyBkcml2ZXIgZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUgVjRMMSBJT0NUTCBjb21tYW5kcywgc28gcHJvZ3JhbXMgc3VjaAorYXMgY2Ftb3JhbWEgYXJlIG5vdCBjb21wYXRpYmxlLiAgVGhlcmUgYXJlIHJlcG9ydHMgdGhhdCB0aGUgZHJpdmVyIGRvZXMKK3dvcmsgd2l0aCBzdWZmaWNpZW50bHkgcmVjZW50IChWNEwyKSB2ZXJzaW9ucyBvZiB6b25lbWluZGVyLCBidXQgSSBoYXZlIG5vdAorYXR0ZW1wdGVkIHRvIGNvbmZpcm0gdGhpcyBteXNlbGYuCisKKworVURFViBSVUxFUworLS0tLS0tLS0tLQorCitJbiBvcmRlciB0aGF0IHRoZSBzcGVjaWFsIGZpbGVzIC9kZXYvZWFzeWNhcDAgYW5kIC9kZXYvZWFzeXNuZDEgYXJlIGNyZWF0ZWQKK3dpdGggY29udmVuaWVudGx5IHJlbGF4ZWQgcGVybWlzc2lvbnMgd2hlbiB0aGUgRWFzeUNBUCBpcyBwbHVnZ2VkIGluLCBhIGZpbGUKK2lzIHByZWZlcmFibHkgdG8gYmUgcHJvdmlkZWQgaW4gZGlyZWN0b3J5IC9ldGMvdWRldi9ydWxlcy5kIHdpdGggY29udGVudDoKKworQUNUSU9OIT0iYWRkfGNoYW5nZSIsIEdPVE89ImVhc3ljYXBfcnVsZXNfZW5kIgorQVRUUlN7aWRWZW5kb3J9PT0iMDVlMSIsIEFUVFJTe2lkUHJvZHVjdH09PSIwNDA4IiwgXAorCU1PREU9IjA2NjYiLCBPV05FUj0icm9vdCIsIEdST1VQPSJyb290IgorTEFCRUw9ImVhc3ljYXBfcnVsZXNfZW5kIgorCisKK0FDS05PV0xFR0VNRU5UUyBBTkQgUkVGRVJFTkNFUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIGRyaXZlciBtYWtlcyB1c2Ugb2YgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoZSBTeW50ZWsgU2VtaWNvbiBEQy0xMTI1CitEcml2ZXIsIHByZXNlbnRseSBtYWludGFpbmVkIGF0IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvc3ludGVrZHJpdmVyLworYnkgTmljb2xhcyBWaXZpZW4uICBQYXJ0aWN1bGFybHkgdXNlZnVsIGhhcyBiZWVuIGEgcGF0Y2ggdG8gdGhlIGxhdHRlciBkcml2ZXIKK3Byb3ZpZGVkIGJ5IEl2b3IgSGV3aXR0IGluIEphbnVhcnkgMjAwOS4gIFRoZSBOVFNDIGltcGxlbWVudGF0aW9uIGlzIHRha2VuCitmcm9tIHRoZSB3b3JrIG9mIEJlbiBUcmFzay4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvZWFzeWNhcC5oIGIvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvZWFzeWNhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkODM2ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9lYXN5Y2FwLmgKQEAgLTAsMCArMSw2NDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICBlYXN5Y2FwLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgUi5NLiBUaG9tYXMgIDxybXRob21hc0BzY2lvbHVzLm9yZz4KKyAqCisgKgorICogIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGUgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBUSEUgRk9MTE9XSU5HIFBBUkFNRVRFUlMgQVJFIFVOREVGSU5FRDoKKyAqCisgKiAgICAgICAgICAgICAgICBFQVNZQ0FQX0RFQlVHCisgKiAgICAgICAgICAgICAgICBFQVNZQ0FQX0lTX1ZJREVPREVWX0NMSUVOVAorICogICAgICAgICAgICAgICAgRUFTWUNBUF9ORUVEU19VU0JWSURFT19ICisgKiAgICAgICAgICAgICAgICBFQVNZQ0FQX05FRURTX1Y0TDJfREVWSUNFX0gKKyAqICAgICAgICAgICAgICAgIEVBU1lDQVBfTkVFRFNfVjRMMl9GT1BTCisgKgorICogIElGIFJFUVVJUkVEIFRIRVkgTVVTVCBCRSBFWFRFUk5BTExZIERFRklORUQsIEZPUiBFWEFNUExFIEFTIENPTVBJTEVSCisgKiAgT1BUSU9OUy4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgKCFkZWZpbmVkKEVBU1lDQVBfSCkpCisjZGVmaW5lIEVBU1lDQVBfSAorCisjaWYgZGVmaW5lZChFQVNZQ0FQX0RFQlVHKQorI2lmICg5IDwgRUFTWUNBUF9ERUJVRykKKyNlcnJvciBEZWJ1ZyBsZXZlbHMgMCB0byA5IGFyZSBva2F5LlwKKyAgVG8gYWNoaWV2ZSBoaWdoZXIgbGV2ZWxzLCByZW1vdmUgdGhpcyB0cmFwIG1hbnVhbGx5IGZyb20gZWFzeWNhcC5oCisjZW5kaWYKKyNlbmRpZiAvKkVBU1lDQVBfREVCVUcqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBUSEVTRSBBUkUgRk9SIE1BSU5URU5BTkNFIE9OTFkgLSBOT1JNQUxMWSBVTkRFRklORUQ6CisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyN1bmRlZiAgUFJFRkVSX05UU0MKKyN1bmRlZiAgRUFTWUNBUF9URVNUQ0FSRAorI3VuZGVmICBFQVNZQ0FQX1RFU1RUT05FCisjdW5kZWYgIExPQ0tGUkFNRQorI3VuZGVmICBOT1JFQURCQUNLCisjdW5kZWYgIEFVRElPVElNRQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqCisgKiAgREVGSU5FICAgQlJJREdFUiAgIFRPIEFDVElWQVRFIFRIRSBST1VUSU5FIEZPUiBCUklER0lORyBWSURFT1RBUEUgRFJPUE9VVFMuCisgKgorICogICAgICAgICAgICAgKioqIFVOREVSIERFVkVMT1BNRU5UL1RFU1RJTkcgLSBOT1QgUkVBRFkgWUVUISoqKgorICoKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI3VuZGVmICBCUklER0VSCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2Ki8KKyNpZiBkZWZpbmVkKEVBU1lDQVBfSVNfVklERU9ERVZfQ0xJRU5UKQorI2lmICghZGVmaW5lZChfX09MRF9WSURJT0NfKSkKKyNkZWZpbmUgX19PTERfVklESU9DXworI2VuZGlmIC8qICFkZWZpbmVkKF9fT0xEX1ZJRElPQ18pICovCisKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgorCisjaWYgZGVmaW5lZChFQVNZQ0FQX05FRURTX1Y0TDJfREVWSUNFX0gpCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNlbmRpZiAvKkVBU1lDQVBfTkVFRFNfVjRMMl9ERVZJQ0VfSCovCisjZW5kaWYgLypFQVNZQ0FQX0lTX1ZJREVPREVWX0NMSUVOVCovCisvKl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eKi8KKworI2lmICghZGVmaW5lZChfX09MRF9WSURJT0NfKSkKKyNkZWZpbmUgX19PTERfVklESU9DXworI2VuZGlmIC8qICFkZWZpbmVkKF9fT0xEX1ZJRElPQ18pICovCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zb3VuZGNhcmQuaD4KKworI2lmIGRlZmluZWQoRUFTWUNBUF9ORUVEU19VU0JWSURFT19IKQorI2luY2x1ZGUgPGNvbmZpZy92aWRlby91c2J2aWRlby5oPgorI2VuZGlmIC8qRUFTWUNBUF9ORUVEU19VU0JWSURFT19IKi8KKworI2lmICghZGVmaW5lZChQQUdFX1NJWkUpKQorI2Vycm9yICJQQUdFX1NJWkUgbm90IGRlZmluZWQiCisjZW5kaWYKKworI2RlZmluZSBTVFJJTkdJWkVfQUdBSU4oeCkgI3gKKyNkZWZpbmUgU1RSSU5HSVpFKHgpIFNUUklOR0laRV9BR0FJTih4KQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgVkVORE9SLCBQUk9EVUNUOiAgU3ludGVrIFNlbWljb25kdWN0b3IgQ28uLCBMdGQKKyAqCisgKiAgICAgIEVJVEhFUiAgICAgICAgRWFzeUNBUCBVU0IgMi4wIFZpZGVvIEFkYXB0ZXIgd2l0aCBBdWRpbywgTW9kZWwgTm8uIERDNjAKKyAqICAgICAgICAgICAgICAgd2l0aCBpbnB1dCBjYWJsaW5nOiAgQVVESU8oTCksIEFVRElPKFIpLCBDVkJTLCBTLVZJREVPLgorICoKKyAqICAgICAgICAgIE9SICAgICAgICBFYXN5Q0FQIDRDSEFOTkVMIFVTQiAyLjAgRFZSLCBNb2RlbCBOby4gRWFzeUNBUDAwMgorICogICAgICAgICAgICAgICB3aXRoIGlucHV0IGNhYmxpbmc6ICBNSUNST1BIT05FLCBDVkJTMSwgQ1ZCUzIsIENWQlMzLCBDVkJTNC4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBVU0JfRUFTWUNBUF9WRU5ET1JfSUQJMHgwNWUxCisjZGVmaW5lIFVTQl9FQVNZQ0FQX1BST0RVQ1RfSUQJMHgwNDA4CisKKyNkZWZpbmUgRUFTWUNBUF9EUklWRVJfVkVSU0lPTiAiMC44LjIxIgorI2RlZmluZSBFQVNZQ0FQX0RSSVZFUl9ERVNDUklQVElPTiAiZWFzeWNhcGRjNjAiCisKKyNkZWZpbmUgVVNCX1NLRUxfTUlOT1JfQkFTRSAgICAgMTkyCisjZGVmaW5lIFZJREVPX0RFVklDRV9NQU5ZIDgKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBERUZBVUxUIExVTUlOQU5DRSwgQ09OVFJBU1QsIFNBVFVSQVRJT04gQU5EIEhVRQorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNBQV8wQV9ERUZBVUxUIDB4N0YKKyNkZWZpbmUgU0FBXzBCX0RFRkFVTFQgMHgzRgorI2RlZmluZSBTQUFfMENfREVGQVVMVCAweDJGCisjZGVmaW5lIFNBQV8wRF9ERUZBVUxUIDB4MDAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgVklERU8gU1RSRUFNSU5HIFBBUkFNRVRFUlM6CisgKiAgVVNCIDIuMCBQUk9WSURFUyBGT1IgSElHSC1CQU5EV0lEVEggRU5EUE9JTlRTIFdJVEggQU4gVVBQRVIgTElNSVQKKyAqICBPRiAzMDcyIEJZVEVTIFBFUiBNSUNST0ZSQU1FIGZvciB3TWF4UGFja2V0U2l6ZS4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBWSURFT19JU09DX0JVRkZFUl9NQU5ZIDE2CisjZGVmaW5lIFZJREVPX0lTT0NfT1JERVIgMworI2RlZmluZSBWSURFT19JU09DX0ZSQU1FU1BFUkRFU0MgKCh1bnNpZ25lZCBpbnQpIDEgPDwgVklERU9fSVNPQ19PUkRFUikKKyNkZWZpbmUgVVNCXzJfMF9NQVhQQUNLRVRTSVpFIDMwNzIKKyNpZiAoVVNCXzJfMF9NQVhQQUNLRVRTSVpFID4gUEFHRV9TSVpFKQorI2Vycm9yIHZpZGVvX2lzb2NfYnVmZmVyWy5dIHdpbGwgbm90IGJlIGJpZyBlbm91Z2gKKyNlbmRpZgorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBWSURFTyBCVUZGRVJTCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRklFTERfQlVGRkVSX1NJWkUgKDIwMyAqIFBBR0VfU0laRSkKKyNkZWZpbmUgRlJBTUVfQlVGRkVSX1NJWkUgKDQwNSAqIFBBR0VfU0laRSkKKyNkZWZpbmUgRklFTERfQlVGRkVSX01BTlkgNAorI2RlZmluZSBGUkFNRV9CVUZGRVJfTUFOWSA2CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIEFVRElPIFNUUkVBTUlORyBQQVJBTUVURVJTCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQVVESU9fSVNPQ19CVUZGRVJfTUFOWSAxNgorI2RlZmluZSBBVURJT19JU09DX09SREVSIDMKKyNkZWZpbmUgQVVESU9fSVNPQ19CVUZGRVJfU0laRSAoUEFHRV9TSVpFIDw8IEFVRElPX0lTT0NfT1JERVIpCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIEFVRElPIEJVRkZFUlMKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBBVURJT19GUkFHTUVOVF9NQU5ZIDMyCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIElUIElTIEVTU0VOVElBTCBUSEFUIEVWRU4tTlVNQkVSRUQgU1RBTkRBUkRTIEFSRSAyNSBGUkFNRVMgUEVSIFNFQ09ORCwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgT0RELU5VTUJFUkVEIFNUQU5EQVJEUyBBUkUgMzAgRlJBTUVTIFBFUiBTRUNPTkQuCisgKiAgVEhFIE5VTUJFUklORyBPRiBTVEFOREFSRFMgTVVTVCBOT1QgQkUgQ0hBTkdFRCBXSVRIT1VUIERVRSBDQVJFLiAgTk9UCisgKiAgT05MWSBNVVNUIFRIRSBQQVJBTUVURVIKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVEFOREFSRF9NQU5ZCisgKiAgQkUgQ0hBTkdFRCBUTyBDT1JSRVNQT05EIFRPIFRIRSBORVcgTlVNQkVSIE9GIFNUQU5EQVJEUywgQlVUIEFMU08gVEhFCisgKiAgTlVNQkVSSU5HIE1VU1QgUkVNQUlOIEFOIFVOQlJPS0VOIEFTQ0VORElORyBTRVFVRU5DRTogIERVTU1ZIFNUQU5EQVJEUworICogIE1BWSBORUVEIFRPIEJFIEFEREVELiAgIEFQUFJPUFJJQVRFIENIQU5HRVMgV0lMTCBBTFdBWVMgQkUgUkVRVUlSRUQgSU4KKyAqICBST1VUSU5FIGZpbGxpbl9mb3JtYXRzKCkgQU5EIFBPU1NJQkxZIEVMU0VXSEVSRS4gIEJFV0FSRS4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSAgUEFMX0JHSElOICAgICAgMAorI2RlZmluZSAgUEFMX05jICAgICAgICAgMgorI2RlZmluZSAgU0VDQU0gICAgICAgICAgNAorI2RlZmluZSAgTlRTQ19OICAgICAgICAgNgorI2RlZmluZSAgTlRTQ19OXzQ0MyAgICAgOAorI2RlZmluZSAgTlRTQ19NICAgICAgICAgMQorI2RlZmluZSAgTlRTQ180NDMgICAgICAgMworI2RlZmluZSAgTlRTQ19NX0pQICAgICAgNQorI2RlZmluZSAgUEFMXzYwICAgICAgICAgNworI2RlZmluZSAgUEFMX00gICAgICAgICAgOQorI2RlZmluZSAgU1RBTkRBUkRfTUFOWSAxMAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBFTlVNUworICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitlbnVtIHsKK0FUXzcyMHg1NzYsCitBVF83MDR4NTc2LAorQVRfNjQweDQ4MCwKK0FUXzcyMHg0ODAsCitBVF8zNjB4Mjg4LAorQVRfMzIweDI0MCwKK0FUXzM2MHgyNDAsCitSRVNPTFVUSU9OX01BTlkKK307CitlbnVtIHsKK0ZNVF9VWVZZLAorRk1UX1lVWTIsCitGTVRfUkdCMjQsCitGTVRfUkdCMzIsCitGTVRfQkdSMjQsCitGTVRfQkdSMzIsCitQSVhFTEZPUk1BVF9NQU5ZCit9OworZW51bSB7CitGSUVMRF9OT05FLAorRklFTERfSU5URVJMQUNFRCwKK0ZJRUxEX0FMVEVSTkFURSwKK0lOVEVSTEFDRV9NQU5ZCit9OworI2RlZmluZSBTRVRUSU5HU19NQU5ZCShTVEFOREFSRF9NQU5ZICogXAorCQkJUkVTT0xVVElPTl9NQU5ZICogXAorCQkJMiAqIFwKKwkJCVBJWEVMRk9STUFUX01BTlkgKiBcCisJCQlJTlRFUkxBQ0VfTUFOWSkKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgU1RSVUNUVVJFIERFRklOSVRJT05TCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0cnVjdCBkYXRhX2J1ZmZlciB7CitzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfaGVhZDsKK3ZvaWQgKnBnbzsKK3ZvaWQgKnB0bzsKK19fdTE2IGtvdW50OworfTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0cnVjdCBkYXRhX3VyYiB7CitzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfaGVhZDsKK3N0cnVjdCB1cmIgKnB1cmI7CitpbnQgaXNidWY7CitpbnQgbGVuZ3RoOworfTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0cnVjdCBlYXN5Y2FwX3N0YW5kYXJkIHsKK19fdTE2IG1hc2s7CitzdHJ1Y3QgdjRsMl9zdGFuZGFyZCB2NGwyX3N0YW5kYXJkOworfTsKK3N0cnVjdCBlYXN5Y2FwX2Zvcm1hdCB7CitfX3UxNiBtYXNrOworY2hhciBuYW1lWzEyOF07CitzdHJ1Y3QgdjRsMl9mb3JtYXQgdjRsMl9mb3JtYXQ7Cit9OworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICAgZWFzeWNhcC5pbGsgPT0gMCAgID0+ICBDVkJTK1MtVklERU8gSEFSRFdBUkUsIEFVRElPIHdNYXhQYWNrZXRTaXplPTI1NgorICogICBlYXN5Y2FwLmlsayA9PSAyICAgPT4gIENWQlMrUy1WSURFTyBIQVJEV0FSRSwgQVVESU8gd01heFBhY2tldFNpemU9OQorICogICBlYXN5Y2FwLmlsayA9PSAzICAgPT4gICAgIEZPVVItQ1ZCUyBIQVJEV0FSRSwgQVVESU8gd01heFBhY2tldFNpemU9OQorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdHJ1Y3QgZWFzeWNhcCB7Cit1bnNpZ25lZCBpbnQgYXVkaW9fcGFnZXNfcGVyX2ZyYWdtZW50OwordW5zaWduZWQgaW50IGF1ZGlvX2J5dGVzX3Blcl9mcmFnbWVudDsKK3Vuc2lnbmVkIGludCBhdWRpb19idWZmZXJfcGFnZV9tYW55OworCisjZGVmaW5lIFVQU0FNUExFCisjaWYgZGVmaW5lZChVUFNBTVBMRSkKK19fczE2IG9sZGF1ZGlvOworI2VuZGlmIC8qVVBTQU1QTEUqLworCitzdHJ1Y3QgZWFzeWNhcF9mb3JtYXQgZWFzeWNhcF9mb3JtYXRbMSArIFNFVFRJTkdTX01BTlldOworCitpbnQgaWxrOworYm9vbCBtaWNyb3Bob25lOworCisvKnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2Ki8KKyNpZiBkZWZpbmVkKEVBU1lDQVBfSVNfVklERU9ERVZfQ0xJRU5UKQorc3RydWN0IHZpZGVvX2RldmljZSAqcHZpZGVvX2RldmljZTsKKyNlbmRpZiAvKkVBU1lDQVBfSVNfVklERU9ERVZfQ0xJRU5UKi8KKy8qXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4qLworCitzdHJ1Y3QgdXNiX2RldmljZSAqcHVzYl9kZXZpY2U7CitzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqcHVzYl9pbnRlcmZhY2U7CisKK3N0cnVjdCBrcmVmIGtyZWY7CisKK3N0cnVjdCBtdXRleCBtdXRleF9tbWFwX3ZpZGVvW0ZSQU1FX0JVRkZFUl9NQU5ZXTsKK3N0cnVjdCBtdXRleCBtdXRleF90aW1ldmFsMDsKK3N0cnVjdCBtdXRleCBtdXRleF90aW1ldmFsMTsKKworaW50IHF1ZXVlZFtGUkFNRV9CVUZGRVJfTUFOWV07CitpbnQgZG9uZVtGUkFNRV9CVUZGRVJfTUFOWV07CisKK3dhaXRfcXVldWVfaGVhZF90IHdxX3ZpZGVvOword2FpdF9xdWV1ZV9oZWFkX3Qgd3FfYXVkaW87CisKK2ludCBpbnB1dDsKK2ludCBwb2xsZWQ7CitpbnQgc3RhbmRhcmRfb2Zmc2V0OworaW50IGZvcm1hdF9vZmZzZXQ7CisKK2ludCBmcHM7CitpbnQgdXNlYzsKK2ludCB0b2xlcmF0ZTsKK2ludCBtZXJpdFsxODBdOworCitzdHJ1Y3QgdGltZXZhbCB0aW1ldmFsMDsKK3N0cnVjdCB0aW1ldmFsIHRpbWV2YWwxOworc3RydWN0IHRpbWV2YWwgdGltZXZhbDI7CitzdHJ1Y3QgdGltZXZhbCB0aW1ldmFsNzsKK2xvbmcgbG9uZyBpbnQgZG5ieWR0OworCitpbnQgICAgdmlkZW9faW50ZXJmYWNlOworaW50ICAgIHZpZGVvX2FsdHNldHRpbmdfb247CitpbnQgICAgdmlkZW9fYWx0c2V0dGluZ19vZmY7CitpbnQgICAgdmlkZW9fZW5kcG9pbnRudW1iZXI7CitpbnQgICAgdmlkZW9faXNvY19tYXhmcmFtZXNpemU7CitpbnQgICAgdmlkZW9faXNvY19idWZmZXJfc2l6ZTsKK2ludCAgICB2aWRlb19pc29jX2ZyYW1lc3BlcmRlc2M7CisKK2ludCAgICB2aWRlb19pc29jX3N0cmVhbWluZzsKK2ludCAgICB2aWRlb19pc29jX3NlcXVlbmNlOworaW50ICAgIHZpZGVvX2lkbGU7CitpbnQgICAgdmlkZW9fZW9mOworaW50ICAgIHZpZGVvX2p1bms7CisKK2ludCAgICBmdWRnZTsKKworc3RydWN0IGRhdGFfYnVmZmVyIHZpZGVvX2lzb2NfYnVmZmVyW1ZJREVPX0lTT0NfQlVGRkVSX01BTlldOworc3RydWN0IGRhdGFfYnVmZmVyIFwKKwkgICAgIGZpZWxkX2J1ZmZlcltGSUVMRF9CVUZGRVJfTUFOWV1bKEZJRUxEX0JVRkZFUl9TSVpFL1BBR0VfU0laRSldOworc3RydWN0IGRhdGFfYnVmZmVyIFwKKwkgICAgIGZyYW1lX2J1ZmZlcltGUkFNRV9CVUZGRVJfTUFOWV1bKEZSQU1FX0JVRkZFUl9TSVpFL1BBR0VfU0laRSldOworCitzdHJ1Y3QgbGlzdF9oZWFkIHVyYl92aWRlb19oZWFkOworc3RydWN0IGxpc3RfaGVhZCAqcHVyYl92aWRlb19oZWFkOworCitpbnQgdm1hX21hbnk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgQlVGRkVSIElORElDQVRPUlMKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGZpZWxkX2ZpbGw7CQkvKiBGaWVsZCBidWZmZXIgYmVpbmcgZmlsbGVkIGJ5IGVhc3ljYXBfY29tcGxldGUoKS4gICovCisJCQkvKiAgIEJ1bXBlZCBvbmx5IGJ5IGVhc3ljYXBfY29tcGxldGUoKS4gICAgICAgICAgICAgICovCitpbnQgZmllbGRfcGFnZTsJCS8qIFBhZ2Ugb2YgZmllbGQgYnVmZmVyIHBhZ2UgYmVpbmcgZmlsbGVkIGJ5ICAgICAgICAgKi8KKwkJCS8qICAgZWFzeWNhcF9jb21wbGV0ZSgpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK2ludCBmaWVsZF9yZWFkOwkJLyogRmllbGQgYnVmZmVyIHRvIGJlIHJlYWQgYnkgZmllbGQyZnJhbWUoKS4gICAgICAgICAqLworCQkJLyogICBCdW1wZWQgb25seSBieSBlYXN5Y2FwX2NvbXBsZXRlKCkuICAgICAgICAgICAgICAqLworaW50IGZyYW1lX2ZpbGw7CQkvKiBGcmFtZSBidWZmZXIgYmVpbmcgZmlsbGVkIGJ5IGZpZWxkMmZyYW1lKCkuICAgICAgICovCisJCQkvKiAgIEJ1bXBlZCBvbmx5IGJ5IGVhc3ljYXBfZHFidWYoKSB3aGVuICAgICAgICAgICAgICovCisJCQkvKiAgIGZpZWxkMmZyYW1lKCkgaGFzIGNyZWF0ZWQgYSBjb21wbGV0ZSBmcmFtZS4gICAgICovCitpbnQgZnJhbWVfcmVhZDsJCS8qIEZyYW1lIGJ1ZmZlciBvZmZlcmVkIHRvIHVzZXIgYnkgRFFCVUYuICAgICAgICAgICAgKi8KKwkJCS8qICAgU2V0IG9ubHkgYnkgZWFzeWNhcF9kcWJ1ZigpIHRvIHRyYWlsIGZyYW1lX2ZpbGwuKi8KK2ludCBmcmFtZV9sb2NrOwkJLyogRmxhZyBzZXQgdG8gMSBieSBEUUJVRiBhbmQgY2xlYXJlZCBieSBRQlVGICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBJTUFHRSBQUk9QRVJUSUVTCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK19fdTMyICAgICAgICAgICAgICAgICAgIHBpeGVsZm9ybWF0OworX191MzIgICAgICAgICAgICAgICAgICAgZmllbGQ7CitpbnQgICAgICAgICAgICAgICAgICAgICB3aWR0aDsKK2ludCAgICAgICAgICAgICAgICAgICAgIGhlaWdodDsKK2ludCAgICAgICAgICAgICAgICAgICAgIGJ5dGVzcGVycGl4ZWw7Citib29sICAgICAgICAgICAgICAgICAgICBieXRlc3dhcG9yZGVyOworYm9vbCAgICAgICAgICAgICAgICAgICAgZGVjaW1hdGVwaXhlbDsKK2Jvb2wgICAgICAgICAgICAgICAgICAgIG9mZmVyZmllbGRzOworaW50ICAgICAgICAgICAgICAgICAgICAgZnJhbWVfYnVmZmVyX3VzZWQ7CitpbnQgICAgICAgICAgICAgICAgICAgICBmcmFtZV9idWZmZXJfbWFueTsKK2ludCAgICAgICAgICAgICAgICAgICAgIHZpZGVvZmllbGRhbW91bnQ7CisKK2ludCAgICAgICAgICAgICAgICAgICAgIGJyaWdodG5lc3M7CitpbnQgICAgICAgICAgICAgICAgICAgICBjb250cmFzdDsKK2ludCAgICAgICAgICAgICAgICAgICAgIHNhdHVyYXRpb247CitpbnQgICAgICAgICAgICAgICAgICAgICBodWU7CisKK2ludCBhbGxvY2F0aW9uX3ZpZGVvX3VyYjsKK2ludCBhbGxvY2F0aW9uX3ZpZGVvX3BhZ2U7CitpbnQgYWxsb2NhdGlvbl92aWRlb19zdHJ1Y3Q7CitpbnQgcmVnaXN0ZXJlZF92aWRlbzsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgU09VTkQgUFJPUEVSVElFUworICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgYXVkaW9faW50ZXJmYWNlOworaW50IGF1ZGlvX2FsdHNldHRpbmdfb247CitpbnQgYXVkaW9fYWx0c2V0dGluZ19vZmY7CitpbnQgYXVkaW9fZW5kcG9pbnRudW1iZXI7CitpbnQgYXVkaW9faXNvY19tYXhmcmFtZXNpemU7CitpbnQgYXVkaW9faXNvY19idWZmZXJfc2l6ZTsKK2ludCBhdWRpb19pc29jX2ZyYW1lc3BlcmRlc2M7CisKK2ludCBhdWRpb19pc29jX3N0cmVhbWluZzsKK2ludCBhdWRpb19pZGxlOworaW50IGF1ZGlvX2VvZjsKK2ludCB2b2x1bWU7CitpbnQgbXV0ZTsKKworc3RydWN0IGRhdGFfYnVmZmVyIGF1ZGlvX2lzb2NfYnVmZmVyW0FVRElPX0lTT0NfQlVGRkVSX01BTlldOworCitzdHJ1Y3QgbGlzdF9oZWFkIHVyYl9hdWRpb19oZWFkOworc3RydWN0IGxpc3RfaGVhZCAqcHVyYl9hdWRpb19oZWFkOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBCVUZGRVIgSU5ESUNBVE9SUworICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgYXVkaW9fZmlsbDsJCS8qIEF1ZGlvIGJ1ZmZlciBiZWluZyBmaWxsZWQgYnkgZWFzeXNuZF9jb21wbGV0ZSgpLiAgKi8KKwkJCS8qICAgQnVtcGVkIG9ubHkgYnkgZWFzeXNuZF9jb21wbGV0ZSgpLiAgICAgICAgICAgICAgKi8KK2ludCBhdWRpb19yZWFkOwkJLyogQXVkaW8gYnVmZmVyIHBhZ2UgYmVpbmcgcmVhZCBieSBlYXN5c25kX3JlYWQoKS4gICAqLworCQkJLyogICBTZXQgYnkgZWFzeXNuZF9yZWFkKCkgdG8gdHJhaWwgYXVkaW9fZmlsbCBieSAgICAqLworCQkJLyogICBvbmUgZnJhZ21lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBTT1VORCBQUk9QRVJUSUVTCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworaW50IGF1ZGlvX2J1ZmZlcl9tYW55OworCitpbnQgYWxsb2NhdGlvbl9hdWRpb191cmI7CitpbnQgYWxsb2NhdGlvbl9hdWRpb19wYWdlOworaW50IGFsbG9jYXRpb25fYXVkaW9fc3RydWN0OworaW50IHJlZ2lzdGVyZWRfYXVkaW87CisKK2xvbmcgbG9uZyBpbnQgYXVkaW9fc2FtcGxlOworbG9uZyBsb25nIGludCBhdWRpb19uaXZlYXU7Citsb25nIGxvbmcgaW50IGF1ZGlvX3NxdWFyZTsKKworc3RydWN0IGRhdGFfYnVmZmVyIGF1ZGlvX2J1ZmZlcltdOworfTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgVklERU8gRlVOQ1RJT04gUFJPVE9UWVBFUworICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkICAgICAgICAgICAgIGVhc3ljYXBfY29tcGxldGUoc3RydWN0IHVyYiAqKTsKK2ludCAgICAgICAgICAgICAgZWFzeWNhcF9vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKK2ludCAgICAgICAgICAgICAgZWFzeWNhcF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKK2ludCAgICAgICAgICAgICAgZWFzeWNhcF9pb2N0bChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgXAorCQkJCQkJdW5zaWduZWQgaW50LCAgdW5zaWduZWQgbG9uZyk7CisKKy8qdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnYqLworI2lmIGRlZmluZWQoRUFTWUNBUF9JU19WSURFT0RFVl9DTElFTlQpCitpbnQgICAgICAgICAgICAgIGVhc3ljYXBfb3Blbl9ub2lub2RlKHN0cnVjdCBmaWxlICopOworaW50ICAgICAgICAgICAgICBlYXN5Y2FwX3JlbGVhc2Vfbm9pbm9kZShzdHJ1Y3QgZmlsZSAqKTsKK2xvbmcgICAgICAgICAgICAgZWFzeWNhcF9pb2N0bF9ub2lub2RlKHN0cnVjdCBmaWxlICosIFwKKwkJCQkJCXVuc2lnbmVkIGludCwgIHVuc2lnbmVkIGxvbmcpOworaW50ICAgICAgICAgICAgICB2aWRlb2Rldl9yZWxlYXNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKik7CisjZW5kaWYgLypFQVNZQ0FQX0lTX1ZJREVPREVWX0NMSUVOVCovCisvKl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eKi8KKwordW5zaWduZWQgaW50ICAgICBlYXN5Y2FwX3BvbGwoc3RydWN0IGZpbGUgKiwgcG9sbF90YWJsZSAqKTsKK2ludCAgICAgICAgICAgICAgZWFzeWNhcF9tbWFwKHN0cnVjdCBmaWxlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKK2ludCAgICAgICAgICAgICAgZWFzeWNhcF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKiwgXAorCQkJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKik7Cit2b2lkICAgICAgICAgICAgIGVhc3ljYXBfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKik7Cit2b2lkICAgICAgICAgICAgIGVhc3ljYXBfZGVsZXRlKHN0cnVjdCBrcmVmICopOworCit2b2lkICAgICAgICAgICAgIGVhc3ljYXBfdm1hX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwordm9pZCAgICAgICAgICAgICBlYXN5Y2FwX3ZtYV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CitpbnQgICAgICAgICAgICAgIGVhc3ljYXBfdm1hX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCBzdHJ1Y3Qgdm1fZmF1bHQgKik7CitpbnQgICAgICAgICAgICAgIGVhc3ljYXBfZHFidWYoc3RydWN0IGVhc3ljYXAgKiwgaW50KTsKK2ludCAgICAgICAgICAgICAgc3VibWl0X3ZpZGVvX3VyYnMoc3RydWN0IGVhc3ljYXAgKik7CitpbnQgICAgICAgICAgICAgIGtpbGxfdmlkZW9fdXJicyhzdHJ1Y3QgZWFzeWNhcCAqKTsKK2ludCAgICAgICAgICAgICAgZmllbGQyZnJhbWUoc3RydWN0IGVhc3ljYXAgKik7CitpbnQgICAgICAgICAgICAgIHJlZGF1YihzdHJ1Y3QgZWFzeWNhcCAqLCB2b2lkICosIHZvaWQgKiwgXAorCQkJCQkJaW50LCBpbnQsIF9fdTgsIF9fdTgsIGJvb2wpOwordm9pZCAgICAgICAgICAgICBkZWJyaWVmKHN0cnVjdCBlYXN5Y2FwICopOwordm9pZCAgICAgICAgICAgICBzYXlyZWFkb25seShzdHJ1Y3QgZWFzeWNhcCAqKTsKK3ZvaWQgICAgICAgICAgICAgZWFzeWNhcF90ZXN0Y2FyZChzdHJ1Y3QgZWFzeWNhcCAqLCBpbnQpOworaW50ICAgICAgICAgICAgICBleHBsYWluX2lvY3RsKF9fdTMyKTsKK2ludCAgICAgICAgICAgICAgZXhwbGFpbl9jaWQoX191MzIpOworaW50ICAgICAgICAgICAgICBmaWxsaW5fZm9ybWF0cyh2b2lkKTsKK2ludCAgICAgICAgICAgICAgYWRqdXN0X3N0YW5kYXJkKHN0cnVjdCBlYXN5Y2FwICosIHY0bDJfc3RkX2lkKTsKK2ludCAgICAgICAgICAgICAgYWRqdXN0X2Zvcm1hdChzdHJ1Y3QgZWFzeWNhcCAqLCBfX3UzMiwgX191MzIsIF9fdTMyLCBcCisJCQkJCQkJCWludCwgYm9vbCk7CitpbnQgICAgICAgICAgICAgIGFkanVzdF9icmlnaHRuZXNzKHN0cnVjdCBlYXN5Y2FwICosIGludCk7CitpbnQgICAgICAgICAgICAgIGFkanVzdF9jb250cmFzdChzdHJ1Y3QgZWFzeWNhcCAqLCBpbnQpOworaW50ICAgICAgICAgICAgICBhZGp1c3Rfc2F0dXJhdGlvbihzdHJ1Y3QgZWFzeWNhcCAqLCBpbnQpOworaW50ICAgICAgICAgICAgICBhZGp1c3RfaHVlKHN0cnVjdCBlYXN5Y2FwICosIGludCk7CitpbnQgICAgICAgICAgICAgIGFkanVzdF92b2x1bWUoc3RydWN0IGVhc3ljYXAgKiwgaW50KTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgQVVESU8gRlVOQ1RJT04gUFJPVE9UWVBFUworICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkICAgICAgICAgICAgIGVhc3lzbmRfY29tcGxldGUoc3RydWN0IHVyYiAqKTsKK3NzaXplX3QgICAgICAgICAgZWFzeXNuZF9yZWFkKHN0cnVjdCBmaWxlICosIGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopOworaW50ICAgICAgICAgICAgICBlYXN5c25kX29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOworaW50ICAgICAgICAgICAgICBlYXN5c25kX3JlbGVhc2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOworaW50ICAgICAgICAgICAgICBlYXN5c25kX2lvY3RsKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCBcCisJCQkJCQl1bnNpZ25lZCBpbnQsICB1bnNpZ25lZCBsb25nKTsKK3Vuc2lnbmVkIGludCAgICAgZWFzeXNuZF9wb2xsKHN0cnVjdCBmaWxlICosIHBvbGxfdGFibGUgKik7Cit2b2lkICAgICAgICAgICAgIGVhc3lzbmRfZGVsZXRlKHN0cnVjdCBrcmVmICopOworaW50ICAgICAgICAgICAgICBzdWJtaXRfYXVkaW9fdXJicyhzdHJ1Y3QgZWFzeWNhcCAqKTsKK2ludCAgICAgICAgICAgICAga2lsbF9hdWRpb191cmJzKHN0cnVjdCBlYXN5Y2FwICopOwordm9pZCAgICAgICAgICAgICBlYXN5c25kX3Rlc3R0b25lKHN0cnVjdCBlYXN5Y2FwICosIGludCk7CitpbnQgICAgICAgICAgICAgIGF1ZGlvX3NldHVwKHN0cnVjdCBlYXN5Y2FwICopOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBMT1ctTEVWRUwgRlVOQ1RJT04gUFJPVE9UWVBFUworICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgICAgICAgICAgICAgIGF1ZGlvX2dhaW5nZXQoc3RydWN0IHVzYl9kZXZpY2UgKik7CitpbnQgICAgICAgICAgICAgIGF1ZGlvX2dhaW5zZXQoc3RydWN0IHVzYl9kZXZpY2UgKiwgX19zOCk7CisKK2ludCAgICAgICAgICAgICAgc2V0X2ludGVyZmFjZShzdHJ1Y3QgdXNiX2RldmljZSAqLCBfX3UxNik7CitpbnQgICAgICAgICAgICAgIHdha2V1cF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKik7CitpbnQgICAgICAgICAgICAgIGNvbmZpcm1fcmVzb2x1dGlvbihzdHJ1Y3QgdXNiX2RldmljZSAqKTsKK2ludCAgICAgICAgICAgICAgY29uZmlybV9zdHJlYW0oc3RydWN0IHVzYl9kZXZpY2UgKik7CisKK2ludCAgICAgICAgICAgICAgc2V0dXBfc3RrKHN0cnVjdCB1c2JfZGV2aWNlICopOworaW50ICAgICAgICAgICAgICBzZXR1cF9zYWEoc3RydWN0IHVzYl9kZXZpY2UgKik7CitpbnQgICAgICAgICAgICAgIHNldHVwX3Z0KHN0cnVjdCB1c2JfZGV2aWNlICopOworaW50ICAgICAgICAgICAgICBjaGVja19zdGsoc3RydWN0IHVzYl9kZXZpY2UgKik7CitpbnQgICAgICAgICAgICAgIGNoZWNrX3NhYShzdHJ1Y3QgdXNiX2RldmljZSAqKTsKK2ludCAgICAgICAgICAgICAgcmVhZHlfc2FhKHN0cnVjdCB1c2JfZGV2aWNlICopOworaW50ICAgICAgICAgICAgICBtZXJpdF9zYWEoc3RydWN0IHVzYl9kZXZpY2UgKik7CitpbnQgICAgICAgICAgICAgIGNoZWNrX3Z0KHN0cnVjdCB1c2JfZGV2aWNlICopOworaW50ICAgICAgICAgICAgICBzZWxlY3RfaW5wdXQoc3RydWN0IHVzYl9kZXZpY2UgKiwgaW50LCBpbnQpOworaW50ICAgICAgICAgICAgICBzZXRfcmVzb2x1dGlvbihzdHJ1Y3QgdXNiX2RldmljZSAqLCBcCisJCQkJCQlfX3UxNiwgX191MTYsIF9fdTE2LCBfX3UxNik7CisKK2ludCAgICAgICAgICAgICAgcmVhZF9zYWEoc3RydWN0IHVzYl9kZXZpY2UgKiwgX191MTYpOworaW50ICAgICAgICAgICAgICByZWFkX3N0ayhzdHJ1Y3QgdXNiX2RldmljZSAqLCBfX3UzMik7CitpbnQgICAgICAgICAgICAgIHdyaXRlX3NhYShzdHJ1Y3QgdXNiX2RldmljZSAqLCBfX3UxNiwgX191MTYpOworaW50ICAgICAgICAgICAgICB3YWl0X2kyYyhzdHJ1Y3QgdXNiX2RldmljZSAqKTsKK2ludCAgICAgICAgICAgICAgd3JpdGVfMDAwKHN0cnVjdCB1c2JfZGV2aWNlICosIF9fdTE2LCBfX3UxNik7CitpbnQgICAgICAgICAgICAgIHN0YXJ0XzEwMChzdHJ1Y3QgdXNiX2RldmljZSAqKTsKK2ludCAgICAgICAgICAgICAgc3RvcF8xMDAoc3RydWN0IHVzYl9kZXZpY2UgKik7CitpbnQgICAgICAgICAgICAgIHdyaXRlXzMwMChzdHJ1Y3QgdXNiX2RldmljZSAqKTsKK2ludCAgICAgICAgICAgICAgcmVhZF92dChzdHJ1Y3QgdXNiX2RldmljZSAqLCBfX3UxNik7CitpbnQgICAgICAgICAgICAgIHdyaXRlX3Z0KHN0cnVjdCB1c2JfZGV2aWNlICosIF9fdTE2LCBfX3UxNik7CisKK2ludCAgICAgICAgICAgICAgc2V0MnRvNzgoc3RydWN0IHVzYl9kZXZpY2UgKik7CitpbnQgICAgICAgICAgICAgIHNldDJ0bzkzKHN0cnVjdCB1c2JfZGV2aWNlICopOworCitpbnQgICAgICAgICAgICAgIHJlZ3NldChzdHJ1Y3QgdXNiX2RldmljZSAqLCBfX3UxNiwgX191MTYpOworaW50ICAgICAgICAgICAgICByZWdnZXQoc3RydWN0IHVzYl9kZXZpY2UgKiwgX191MTYsIHZvaWQgKik7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdHJ1Y3Qgc2lnbmVkX2Rpdl9yZXN1bHQgeworbG9uZyBsb25nIGludCBxdW90aWVudDsKK3Vuc2lnbmVkIGxvbmcgbG9uZyBpbnQgcmVtYWluZGVyOworfSBzaWduZWRfZGl2KGxvbmcgbG9uZyBpbnQsIGxvbmcgbG9uZyBpbnQpOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBNQUNST1MKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBHRVQoWCwgWSwgWikgZG8geyBcCisJaW50IHJjOyBcCisJKihaKSA9IChfX3UxNikwOyBcCisJcmMgPSByZWdnZXQoWCwgWSwgWik7IFwKKwlpZiAoMCA+IHJjKSB7IFwKKwkJSk9UKDgsICI6LSglaVxuIiwgX19MSU5FX18pOyAgcmV0dXJuKHJjKTsgXAorCX0gXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBTRVQoWCwgWSwgWikgZG8geyBcCisJaW50IHJjOyBcCisJcmMgPSByZWdzZXQoWCwgWSwgWik7IFwKKwlpZiAoMCA+IHJjKSB7IFwKKwkJSk9UKDgsICI6LSglaVxuIiwgX19MSU5FX18pOyAgcmV0dXJuKHJjKTsgXAorCX0gXAorfSB3aGlsZSAoMCkKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBTQVkoZm9ybWF0LCBhcmdzLi4uKSBkbyB7IFwKKwlwcmludGsoS0VSTl9ERUJVRyAiZWFzeWNhcDogJXM6ICIgZm9ybWF0LCBfX2Z1bmNfXywgIyNhcmdzKTsgXAorfSB3aGlsZSAoMCkKKworCisjaWYgZGVmaW5lZChFQVNZQ0FQX0RFQlVHKQorI2RlZmluZSBKT1QobiwgZm9ybWF0LCBhcmdzLi4uKSBkbyB7IFwKKwlpZiAobiA8PSBlYXN5Y2FwX2RlYnVnKSB7IFwKKwkJcHJpbnRrKEtFUk5fREVCVUcgImVhc3ljYXA6ICVzOiAiIGZvcm1hdCwgX19mdW5jX18sICMjYXJncyk7IFwKKwl9IFwKK30gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBKT1QobiwgZm9ybWF0LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZiAvKkVBU1lDQVBfREVCVUcqLworCisjZGVmaW5lIFBPVVQgSk9UKDgsICI6LShpbiBmaWxlICVzIGxpbmUgJTRpXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pCisKKyNkZWZpbmUgTUlDUk9TRUNPTkRTKFgsIFkpIFwKKwkJCSgoMTAwMDAwMCooKGxvbmcgbG9uZyBpbnQpKFgudHZfc2VjIC0gWS50dl9zZWMpKSkgKyBcCisJCQkJCShsb25nIGxvbmcgaW50KShYLnR2X3VzZWMgLSBZLnR2X3VzZWMpKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogICh1bnNpZ25lZCBjaGFyICopUCAgICAgICAgICAgcG9pbnRlciB0byBuZXh0IGJ5dGUgcGFpcgorICogICAgICAgKGxvbmcgaW50ICopWCAgICAgICAgICAgcG9pbnRlciB0byBhY2N1bXVsYXRpbmcgY291bnQKKyAqICAgICAgIChsb25nIGludCAqKVkgICAgICAgICAgIHBvaW50ZXIgdG8gYWNjdW11bGF0aW5nIHN1bQorICogIChsb25nIGxvbmcgaW50ICopWiAgICAgICAgICAgcG9pbnRlciB0byBhY2N1bXVsYXRpbmcgc3VtIG9mIHNxdWFyZXMKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU1NRVIoUCwgWCwgWSwgWikgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl1bnNpZ25lZCBjaGFyICpwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl1bnNpZ25lZCBpbnQgdTAsIHUxLCB1MjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlsb25nIGludCBzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlwID0gKHVuc2lnbmVkIGNoYXIgKikoUCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl1MCA9ICh1bnNpZ25lZCBpbnQpICgqcCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl1MSA9ICh1bnNpZ25lZCBpbnQpICgqKHAgKyAxKSk7ICAgICAgICAgICAgICAgICAgICAgIFwKKwl1MiA9ICh1bnNpZ25lZCBpbnQpICgodTEgPDwgOCkgfCB1MCk7ICAgICAgICAgICAgICAgIFwKKwlpZiAoMHg4MDAwICYgdTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJcyA9IC0obG9uZyBpbnQpKDB4N0ZGRiAmICh+dTIpKTsgICAgICAgICAgICAgXAorCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlzID0gIChsb25nIGludCkoMHg3RkZGICYgdTIpOyAgICAgICAgICAgICAgICBcCisJKigoWCkpICs9IChsb25nIGludCkgMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKigoWSkpICs9IChsb25nIGludCkgczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKigoWikpICs9ICgobG9uZyBsb25nIGludCkocykgKiAobG9uZyBsb25nIGludCkocykpOyBcCit9IHdoaWxlICgwKQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZW5kaWYgLypFQVNZQ0FQX0gqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvZWFzeWNhcF9kZWJ1Zy5oIGIvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvZWFzeWNhcF9kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMTBkN2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9lYXN5Y2FwX2RlYnVnLmgKQEAgLTAsMCArMSwyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIGVhc3ljYXBfZGVidWcuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBSLk0uIFRob21hcyAgPHJtdGhvbWFzQHNjaW9sdXMub3JnPgorICoKKyAqCisgKiAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoZSBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gaW50IGVhc3ljYXBfZGVidWc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9lYXN5Y2FwX2lvY3RsLmMgYi9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9lYXN5Y2FwX2lvY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc2YjYzZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lYXN5Y2FwL2Vhc3ljYXBfaW9jdGwuYwpAQCAtMCwwICsxLDI2ODcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIGVhc3ljYXBfaW9jdGwuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBSLk0uIFRob21hcyAgPHJtdGhvbWFzQHNjaW9sdXMub3JnPgorICoKKyAqCisgKiAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoZSBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJlYXN5Y2FwLmgiCisjaW5jbHVkZSAiZWFzeWNhcF9kZWJ1Zy5oIgorI2luY2x1ZGUgImVhc3ljYXBfc3RhbmRhcmQuaCIKKyNpbmNsdWRlICJlYXN5Y2FwX2lvY3RsLmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBVTkxFU1MgVEhFUkUgSVMgQSBQUkVNQVRVUkUgRVJST1IgUkVUVVJOIFRISVMgUk9VVElORSBVUERBVEVTIFRIRQorICogIEZPTExPV0lORzoKKyAqICAgICAgICAgIHBlYXN5Y2FwLT5zdGFuZGFyZF9vZmZzZXQKKyAqICAgICAgICAgIHBlYXN5Y2FwLT5mcHMKKyAqICAgICAgICAgIHBlYXN5Y2FwLT51c2VjCisgKiAgICAgICAgICBwZWFzeWNhcC0+dG9sZXJhdGUKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGFkanVzdF9zdGFuZGFyZChzdHJ1Y3QgZWFzeWNhcCAqcGVhc3ljYXAsIHY0bDJfc3RkX2lkIHN0ZF9pZCkKK3sKK3N0cnVjdCBlYXN5Y2FwX3N0YW5kYXJkIGNvbnN0ICpwZWFzeWNhcF9zdGFuZGFyZDsKK19fdTE2IHJlZywgc2V0OworaW50IGlyLCByYywgbmVlZDsKK3Vuc2lnbmVkIGludCBpdHdhcywgaXNub3c7CisKK2lmICgoc3RydWN0IHVzYl9kZXZpY2UgKilOVUxMID09IHBlYXN5Y2FwLT5wdXNiX2RldmljZSkgeworCVNBWSgiRVJST1I6IHBlYXN5Y2FwLT5wdXNiX2RldmljZSBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KK3BlYXN5Y2FwX3N0YW5kYXJkID0gJmVhc3ljYXBfc3RhbmRhcmRbMF07Cit3aGlsZSAoMHhGRkZGICE9IHBlYXN5Y2FwX3N0YW5kYXJkLT5tYXNrKSB7CisJaWYgKHN0ZF9pZCAmIHBlYXN5Y2FwX3N0YW5kYXJkLT52NGwyX3N0YW5kYXJkLmlkKQorCQlicmVhazsKKwlwZWFzeWNhcF9zdGFuZGFyZCsrOworfQoraWYgKDB4RkZGRiA9PSBwZWFzeWNhcF9zdGFuZGFyZC0+bWFzaykgeworCVNBWSgiRVJST1I6IDB4JTA4WD1zdGRfaWQ6IHN0YW5kYXJkIG5vdCBmb3VuZFxuIiwgXAorCQkJCQkJCSh1bnNpZ25lZCBpbnQpc3RkX2lkKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KK1NBWSgidXNlciByZXF1ZXN0cyBzdGFuZGFyZDogJXNcbiIsIFwKKwkJCSYocGVhc3ljYXBfc3RhbmRhcmQtPnY0bDJfc3RhbmRhcmQubmFtZVswXSkpOworaWYgKHBlYXN5Y2FwLT5zdGFuZGFyZF9vZmZzZXQgPT0gXAorCQkJKGludCkocGVhc3ljYXBfc3RhbmRhcmQgLSAmZWFzeWNhcF9zdGFuZGFyZFswXSkpIHsKKwlTQVkoInJlcXVlc3RlZCBzdGFuZGFyZCBhbHJlYWR5IGluIGVmZmVjdFxuIik7CisJcmV0dXJuIDA7Cit9CitwZWFzeWNhcC0+c3RhbmRhcmRfb2Zmc2V0ID0gKGludCkocGVhc3ljYXBfc3RhbmRhcmQgLSAmZWFzeWNhcF9zdGFuZGFyZFswXSk7CitwZWFzeWNhcC0+ZnBzID0gcGVhc3ljYXBfc3RhbmRhcmQtPnY0bDJfc3RhbmRhcmQuZnJhbWVwZXJpb2QuZGVub21pbmF0b3IgLyBcCisJCXBlYXN5Y2FwX3N0YW5kYXJkLT52NGwyX3N0YW5kYXJkLmZyYW1lcGVyaW9kLm51bWVyYXRvcjsKK2lmICghcGVhc3ljYXAtPmZwcykgeworCVNBWSgiTUlTVEFLRTogZnJhbWVzLXBlci1zZWNvbmQgaXMgemVyb1xuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CitKT1QoOCwgIiVpIGZyYW1lcy1wZXItc2Vjb25kXG4iLCBwZWFzeWNhcC0+ZnBzKTsKK3BlYXN5Y2FwLT51c2VjID0gMTAwMDAwMCAvICgyICogcGVhc3ljYXAtPmZwcyk7CitwZWFzeWNhcC0+dG9sZXJhdGUgPSAxMDAwICogKDI1IC8gcGVhc3ljYXAtPmZwcyk7CisKK2tpbGxfdmlkZW9fdXJicyhwZWFzeWNhcCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBTQUE3MTEzSCBEQVRBU0hFRVQgUEFHRSA0NCwgVEFCTEUgNDIKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCituZWVkID0gMDsgIGl0d2FzID0gMDsgIHJlZyA9IDB4MDA7ICBzZXQgPSAweDAwOworc3dpdGNoIChwZWFzeWNhcF9zdGFuZGFyZC0+bWFzayAmIDB4MDAwRikgeworY2FzZSBOVFNDX01fSlA6IHsKKwlyZWcgPSAweDBBOyAgc2V0ID0gMHg5NTsKKwlpciA9IHJlYWRfc2FhKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgcmVnKTsKKwlpZiAoMCA+IGlyKQorCQlTQVkoIkVSUk9SOiBjYW5ub3QgcmVhZCBTQUEgcmVnaXN0ZXIgMHglMDJYXG4iLCByZWcpOworCWVsc2UKKwkJaXR3YXMgPSAodW5zaWduZWQgaW50KWlyOworCisKKwlzZXQydG83OChwZWFzeWNhcC0+cHVzYl9kZXZpY2UpOworCisKKwlyYyA9IHdyaXRlX3NhYShwZWFzeWNhcC0+cHVzYl9kZXZpY2UsIHJlZywgc2V0KTsKKwlpZiAoMCAhPSByYykKKwkJU0FZKCJFUlJPUjogZmFpbGVkIHRvIHNldCBTQUEgcmVnaXN0ZXIgIiBcCisJCQkiMHglMDJYIHRvIDB4JTAyWCBmb3IgSlAgc3RhbmRhcmRcbiIsIHJlZywgc2V0KTsKKwllbHNlIHsKKwkJaXNub3cgPSAodW5zaWduZWQgaW50KXJlYWRfc2FhKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgcmVnKTsKKwkJaWYgKDAgPiBpcikKKwkJCUpPVCg4LCAiU0FBIHJlZ2lzdGVyIDB4JTAyWCBjaGFuZ2VkICIgXAorCQkJCSJ0byAweCUwMlhcbiIsIHJlZywgaXNub3cpOworCQllbHNlCisJCQlKT1QoOCwgIlNBQSByZWdpc3RlciAweCUwMlggY2hhbmdlZCAiIFwKKwkJCQkiZnJvbSAweCUwMlggdG8gMHglMDJYXG4iLCByZWcsIGl0d2FzLCBpc25vdyk7CisKKwkJc2V0MnRvNzgocGVhc3ljYXAtPnB1c2JfZGV2aWNlKTsKKworCX0KKworCXJlZyA9IDB4MEI7ICBzZXQgPSAweDQ4OworCWlyID0gcmVhZF9zYWEocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCByZWcpOworCWlmICgwID4gaXIpCisJCVNBWSgiRVJST1I6IGNhbm5vdCByZWFkIFNBQSByZWdpc3RlciAweCUwMlhcbiIsIHJlZyk7CisJZWxzZQorCQlpdHdhcyA9ICh1bnNpZ25lZCBpbnQpaXI7CisKKwlzZXQydG83OChwZWFzeWNhcC0+cHVzYl9kZXZpY2UpOworCisJcmMgPSB3cml0ZV9zYWEocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCByZWcsIHNldCk7CisJaWYgKDAgIT0gcmMpCisJCVNBWSgiRVJST1I6IGZhaWxlZCB0byBzZXQgU0FBIHJlZ2lzdGVyIDB4JTAyWCB0byAweCUwMlggIiBcCisJCQkJCQkiZm9yIEpQIHN0YW5kYXJkXG4iLCByZWcsIHNldCk7CisJZWxzZSB7CisJCWlzbm93ID0gKHVuc2lnbmVkIGludClyZWFkX3NhYShwZWFzeWNhcC0+cHVzYl9kZXZpY2UsIHJlZyk7CisJCWlmICgwID4gaXIpCisJCQlKT1QoOCwgIlNBQSByZWdpc3RlciAweCUwMlggY2hhbmdlZCAiIFwKKwkJCQkidG8gMHglMDJYXG4iLCByZWcsIGlzbm93KTsKKwkJZWxzZQorCQkJSk9UKDgsICJTQUEgcmVnaXN0ZXIgMHglMDJYIGNoYW5nZWQgIiBcCisJCQkJImZyb20gMHglMDJYIHRvIDB4JTAyWFxuIiwgcmVnLCBpdHdhcywgaXNub3cpOworCisJCXNldDJ0bzc4KHBlYXN5Y2FwLT5wdXNiX2RldmljZSk7CisKKwl9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgTk9URTogIE5PIGJyZWFrIEhFUkU6ICBSVU4gT04gVE8gTkVYVCBDQVNFCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworfQorY2FzZSBOVFNDX006CitjYXNlIFBBTF9CR0hJTjogeworCXJlZyA9IDB4MEU7ICBzZXQgPSAweDAxOyAgbmVlZCA9IDE7ICBicmVhazsKK30KK2Nhc2UgTlRTQ19OXzQ0MzoKK2Nhc2UgUEFMXzYwOiB7CisJcmVnID0gMHgwRTsgIHNldCA9IDB4MTE7ICBuZWVkID0gMTsgIGJyZWFrOworfQorY2FzZSBOVFNDXzQ0MzoKK2Nhc2UgUEFMX05jOiB7CisJcmVnID0gMHgwRTsgIHNldCA9IDB4MjE7ICBuZWVkID0gMTsgIGJyZWFrOworfQorY2FzZSBOVFNDX046CitjYXNlIFBBTF9NOiB7CisJcmVnID0gMHgwRTsgIHNldCA9IDB4MzE7ICBuZWVkID0gMTsgIGJyZWFrOworfQorY2FzZSBTRUNBTTogeworCXJlZyA9IDB4MEU7ICBzZXQgPSAweDUxOyAgbmVlZCA9IDE7ICBicmVhazsKK30KK2RlZmF1bHQ6CisJYnJlYWs7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2lmIChuZWVkKSB7CisJaXIgPSByZWFkX3NhYShwZWFzeWNhcC0+cHVzYl9kZXZpY2UsIHJlZyk7CisJaWYgKDAgPiBpcikKKwkJU0FZKCJFUlJPUjogZmFpbGVkIHRvIHJlYWQgU0FBIHJlZ2lzdGVyIDB4JTAyWFxuIiwgcmVnKTsKKwllbHNlCisJCWl0d2FzID0gKHVuc2lnbmVkIGludClpcjsKKworCXNldDJ0bzc4KHBlYXN5Y2FwLT5wdXNiX2RldmljZSk7CisKKwlyYyA9IHdyaXRlX3NhYShwZWFzeWNhcC0+cHVzYl9kZXZpY2UsIHJlZywgc2V0KTsKKwlpZiAoMCAhPSB3cml0ZV9zYWEocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCByZWcsIHNldCkpIHsKKwkJU0FZKCJFUlJPUjogZmFpbGVkIHRvIHNldCBTQUEgcmVnaXN0ZXIgIiBcCisJCQkiMHglMDJYIHRvIDB4JTAyWCBmb3IgdGFibGUgNDJcbiIsIHJlZywgc2V0KTsKKwl9IGVsc2UgeworCQlpc25vdyA9ICh1bnNpZ25lZCBpbnQpcmVhZF9zYWEocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCByZWcpOworCQlpZiAoMCA+IGlyKQorCQkJSk9UKDgsICJTQUEgcmVnaXN0ZXIgMHglMDJYIGNoYW5nZWQgIiBcCisJCQkJInRvIDB4JTAyWFxuIiwgcmVnLCBpc25vdyk7CisJCWVsc2UKKwkJCUpPVCg4LCAiU0FBIHJlZ2lzdGVyIDB4JTAyWCBjaGFuZ2VkICIgXAorCQkJCSJmcm9tIDB4JTAyWCB0byAweCUwMlhcbiIsIHJlZywgaXR3YXMsIGlzbm93KTsKKwl9Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgU0FBNzExM0ggREFUQVNIRUVUIFBBR0UgNDEKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCityZWcgPSAweDA4OworaXIgPSByZWFkX3NhYShwZWFzeWNhcC0+cHVzYl9kZXZpY2UsIHJlZyk7CitpZiAoMCA+IGlyKQorCVNBWSgiRVJST1I6IGZhaWxlZCB0byByZWFkIFNBQSByZWdpc3RlciAweCUwMlggIiBcCisJCQkJCQkic28gY2Fubm90IHJlc2V0XG4iLCByZWcpOworZWxzZSB7CisJaXR3YXMgPSAodW5zaWduZWQgaW50KWlyOworCWlmIChwZWFzeWNhcF9zdGFuZGFyZC0+bWFzayAmIDB4MDAwMSkKKwkJc2V0ID0gaXR3YXMgfCAweDQwIDsKKwllbHNlCisJCXNldCA9IGl0d2FzICYgfjB4NDAgOworCitzZXQydG83OChwZWFzeWNhcC0+cHVzYl9kZXZpY2UpOworCityYyAgPSB3cml0ZV9zYWEocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCByZWcsIHNldCk7CitpZiAoMCAhPSByYykKKwlTQVkoIkVSUk9SOiBmYWlsZWQgdG8gc2V0IFNBQSByZWdpc3RlciAweCUwMlggdG8gMHglMDJYXG4iLCByZWcsIHNldCk7CitlbHNlIHsKKwlpc25vdyA9ICh1bnNpZ25lZCBpbnQpcmVhZF9zYWEocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCByZWcpOworCWlmICgwID4gaXIpCisJCUpPVCg4LCAiU0FBIHJlZ2lzdGVyIDB4JTAyWCBjaGFuZ2VkIHRvIDB4JTAyWFxuIiwgcmVnLCBpc25vdyk7CisJZWxzZQorCQlKT1QoOCwgIlNBQSByZWdpc3RlciAweCUwMlggY2hhbmdlZCAiIFwKKwkJCSJmcm9tIDB4JTAyWCB0byAweCUwMlhcbiIsIHJlZywgaXR3YXMsIGlzbm93KTsKKwl9Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgU0FBNzExM0ggREFUQVNIRUVUIFBBR0UgNTEsIFRBQkxFIDU3CisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3JlZyA9IDB4NDA7CitpciA9IHJlYWRfc2FhKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgcmVnKTsKK2lmICgwID4gaXIpCisJU0FZKCJFUlJPUjogZmFpbGVkIHRvIHJlYWQgU0FBIHJlZ2lzdGVyIDB4JTAyWCAiIFwKKwkJCQkJCSJzbyBjYW5ub3QgcmVzZXRcbiIsIHJlZyk7CitlbHNlIHsKKwlpdHdhcyA9ICh1bnNpZ25lZCBpbnQpaXI7CisJaWYgKHBlYXN5Y2FwX3N0YW5kYXJkLT5tYXNrICYgMHgwMDAxKQorCQlzZXQgPSBpdHdhcyB8IDB4ODAgOworCWVsc2UKKwkJc2V0ID0gaXR3YXMgJiB+MHg4MCA7CisKK3NldDJ0bzc4KHBlYXN5Y2FwLT5wdXNiX2RldmljZSk7CisKK3JjID0gd3JpdGVfc2FhKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgcmVnLCBzZXQpOworaWYgKDAgIT0gcmMpCisJU0FZKCJFUlJPUjogZmFpbGVkIHRvIHNldCBTQUEgcmVnaXN0ZXIgMHglMDJYIHRvIDB4JTAyWFxuIiwgcmVnLCBzZXQpOworZWxzZSB7CisJaXNub3cgPSAodW5zaWduZWQgaW50KXJlYWRfc2FhKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgcmVnKTsKKwlpZiAoMCA+IGlyKQorCQlKT1QoOCwgIlNBQSByZWdpc3RlciAweCUwMlggY2hhbmdlZCB0byAweCUwMlhcbiIsIHJlZywgaXNub3cpOworCWVsc2UKKwkJSk9UKDgsICJTQUEgcmVnaXN0ZXIgMHglMDJYIGNoYW5nZWQgIiBcCisJCQkiZnJvbSAweCUwMlggdG8gMHglMDJYXG4iLCByZWcsIGl0d2FzLCBpc25vdyk7CisJfQorfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFNBQTcxMTNIIERBVEFTSEVFVCBQQUdFIDUzLCBUQUJMRSA2NgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3JlZyA9IDB4NUE7CitpciA9IHJlYWRfc2FhKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgcmVnKTsKK2lmICgwID4gaXIpCisJU0FZKCJFUlJPUjogZmFpbGVkIHRvIHJlYWQgU0FBIHJlZ2lzdGVyIDB4JTAyWCBidXQgY29udGludWluZ1xuIiwgcmVnKTsKKwlpdHdhcyA9ICh1bnNpZ25lZCBpbnQpaXI7CisJaWYgKHBlYXN5Y2FwX3N0YW5kYXJkLT5tYXNrICYgMHgwMDAxKQorCQlzZXQgPSAweDBBIDsKKwllbHNlCisJCXNldCA9IDB4MDcgOworCisJc2V0MnRvNzgocGVhc3ljYXAtPnB1c2JfZGV2aWNlKTsKKworCWlmICgwICE9IHdyaXRlX3NhYShwZWFzeWNhcC0+cHVzYl9kZXZpY2UsIHJlZywgc2V0KSkKKwkJU0FZKCJFUlJPUjogZmFpbGVkIHRvIHNldCBTQUEgcmVnaXN0ZXIgMHglMDJYIHRvIDB4JTAyWFxuIiwgXAorCQkJCQkJCQlyZWcsIHNldCk7CisJZWxzZSB7CisJCWlzbm93ID0gKHVuc2lnbmVkIGludClyZWFkX3NhYShwZWFzeWNhcC0+cHVzYl9kZXZpY2UsIHJlZyk7CisJCWlmICgwID4gaXIpCisJCQlKT1QoOCwgIlNBQSByZWdpc3RlciAweCUwMlggY2hhbmdlZCAiCisJCQkJInRvIDB4JTAyWFxuIiwgcmVnLCBpc25vdyk7CisJCWVsc2UKKwkJCUpPVCg4LCAiU0FBIHJlZ2lzdGVyIDB4JTAyWCBjaGFuZ2VkICIKKwkJCQkiZnJvbSAweCUwMlggdG8gMHglMDJYXG4iLCByZWcsIGl0d2FzLCBpc25vdyk7CisJfQorCWlmICgwICE9IGNoZWNrX3NhYShwZWFzeWNhcC0+cHVzYl9kZXZpY2UpKQorCQlTQVkoIkVSUk9SOiBjaGVja19zYWEoKSBmYWlsZWRcbiIpOworcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgVEhFIEFMR09SSVRITSBGT1IgUkVTUE9ORElORyBUTyBUSEUgVklESU9fU19GTVQgSU9DVEwgREVQRU5EUyBPTiBUSEUKKyAqICBDVVJSRU5UIFZBTFVFIE9GIHBlYXN5Y2FwLT5zdGFuZGFyZF9vZmZzZXQuCisgKiAgUFJPVklERUQgVEhFIEFSR1VNRU5UIHRyeSBJUyBmYWxzZSBBTkQgVEhFUkUgSVMgTk8gUFJFTUFUVVJFIEVSUk9SIFJFVFVSTgorICogIFRISVMgUk9VVElORSBVUERBVEVTIFRIRSBGT0xMT1dJTkc6CisgKiAgICAgICAgICBwZWFzeWNhcC0+Zm9ybWF0X29mZnNldAorICogICAgICAgICAgcGVhc3ljYXAtPnBpeGVsZm9ybWF0CisgKiAgICAgICAgICBwZWFzeWNhcC0+ZmllbGQKKyAqICAgICAgICAgIHBlYXN5Y2FwLT5oZWlnaHQKKyAqICAgICAgICAgIHBlYXN5Y2FwLT53aWR0aAorICogICAgICAgICAgcGVhc3ljYXAtPmJ5dGVzcGVycGl4ZWwKKyAqICAgICAgICAgIHBlYXN5Y2FwLT5ieXRlc3dhcG9yZGVyCisgKiAgICAgICAgICBwZWFzeWNhcC0+ZGVjaW1hdGVwaXhlbAorICogICAgICAgICAgcGVhc3ljYXAtPmZyYW1lX2J1ZmZlcl91c2VkCisgKiAgICAgICAgICBwZWFzeWNhcC0+dmlkZW9maWVsZGFtb3VudAorICogICAgICAgICAgcGVhc3ljYXAtPm9mZmVyZmllbGRzCisgKgorICogIElGIFNVQ0NFU1NGVUwgVEhFIEZVTkNUSU9OIFJFVFVSTlMgVEhFIE9GRlNFVCBJTiBlYXN5Y2FwX2Zvcm1hdFtdCisgKiAgSURFTlRJRllJTkcgVEhFIEZPUk1BVCBXSElDSCBJUyBUTyBSRVRVUk5FRCBUTyBUSEUgVVNFUi4KKyAqICBFUlJPUlMgUkVUVVJOIEEgTkVHQVRJVkUgTlVNQkVSLgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBhZGp1c3RfZm9ybWF0KHN0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcCwgXAorCV9fdTMyIHdpZHRoLCBfX3UzMiBoZWlnaHQsIF9fdTMyIHBpeGVsZm9ybWF0LCBpbnQgZmllbGQsIGJvb2wgdHJ5KQoreworc3RydWN0IGVhc3ljYXBfZm9ybWF0ICpwZWFzeWNhcF9mb3JtYXQsICpwZWFzeWNhcF9iZXN0X2Zvcm1hdDsKK19fdTE2IG1hc2s7CitzdHJ1Y3QgdXNiX2RldmljZSAqcDsKK2ludCBtaXNzLCBtdWx0aXBsaWVyLCBiZXN0OworY2hhciBiZls1XSwgKnBjOworX191MzIgdWM7CisKK2lmICgoc3RydWN0IGVhc3ljYXAgKilOVUxMID09IHBlYXN5Y2FwKSB7CisJU0FZKCJFUlJPUjogcGVhc3ljYXAgaXMgTlVMTFxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CitwID0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlOworaWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgPT0gcCkgeworCVNBWSgiRVJST1I6IHBlYXljYXAtPnB1c2JfZGV2aWNlIGlzIE5VTExcbiIpOworCXJldHVybiAtRUZBVUxUOworfQorcGMgPSAmYmZbMF07Cit1YyA9IHBpeGVsZm9ybWF0OyAgbWVtY3B5KCh2b2lkICopcGMsICh2b2lkICopKCZ1YyksIDQpOyAgYmZbNF0gPSAwOworbWFzayA9IGVhc3ljYXBfc3RhbmRhcmRbcGVhc3ljYXAtPnN0YW5kYXJkX29mZnNldF0ubWFzazsKK1NBWSgic291Z2h0OiAgICAlaXglaSwlcygweCUwOFgpLCVpPWZpZWxkLDB4JTAyWD1zdGQgbWFza1xuIiwgXAorCQkJCXdpZHRoLCBoZWlnaHQsIHBjLCBwaXhlbGZvcm1hdCwgZmllbGQsIG1hc2spOworaWYgKFY0TDJfRklFTERfQU5ZID09IGZpZWxkKSB7CisJZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJU0FZKCJwcmVmZXI6ICAgIFY0TDJfRklFTERfSU5URVJMQUNFRD1maWVsZCwgd2FzIFY0TDJfRklFTERfQU5ZXG4iKTsKK30KK3BlYXN5Y2FwX2Jlc3RfZm9ybWF0ID0gKHN0cnVjdCBlYXN5Y2FwX2Zvcm1hdCAqKU5VTEw7CitwZWFzeWNhcF9mb3JtYXQgPSAmZWFzeWNhcF9mb3JtYXRbMF07Cit3aGlsZSAoMCAhPSBwZWFzeWNhcF9mb3JtYXQtPnY0bDJfZm9ybWF0LmZtdC5waXgud2lkdGgpIHsKKwlKT1QoMTYsICIuPiAlaSAlaSAweCUwOFggJWl4JWlcbiIsIFwKKwkJcGVhc3ljYXBfZm9ybWF0LT5tYXNrICYgMHgwMSwKKwkJcGVhc3ljYXBfZm9ybWF0LT52NGwyX2Zvcm1hdC5mbXQucGl4LmZpZWxkLAorCQlwZWFzeWNhcF9mb3JtYXQtPnY0bDJfZm9ybWF0LmZtdC5waXgucGl4ZWxmb3JtYXQsCisJCXBlYXN5Y2FwX2Zvcm1hdC0+djRsMl9mb3JtYXQuZm10LnBpeC53aWR0aCwKKwkJcGVhc3ljYXBfZm9ybWF0LT52NGwyX2Zvcm1hdC5mbXQucGl4LmhlaWdodCk7CisKKwlpZiAoKChwZWFzeWNhcF9mb3JtYXQtPm1hc2sgJiAweDBGKSA9PSAobWFzayAmIDB4MEYpKSAmJiBcCisJCShwZWFzeWNhcF9mb3JtYXQtPnY0bDJfZm9ybWF0LmZtdC5waXguZmllbGQgPT0gZmllbGQpICYmIFwKKwkJKHBlYXN5Y2FwX2Zvcm1hdC0+djRsMl9mb3JtYXQuZm10LnBpeC5waXhlbGZvcm1hdCA9PSBcCisJCQkJCQkJcGl4ZWxmb3JtYXQpICYmIFwKKwkJKHBlYXN5Y2FwX2Zvcm1hdC0+djRsMl9mb3JtYXQuZm10LnBpeC53aWR0aCAgPT0gd2lkdGgpICYmIFwKKwkJKHBlYXN5Y2FwX2Zvcm1hdC0+djRsMl9mb3JtYXQuZm10LnBpeC5oZWlnaHQgPT0gaGVpZ2h0KSkgeworCQkJcGVhc3ljYXBfYmVzdF9mb3JtYXQgPSBwZWFzeWNhcF9mb3JtYXQ7CisJCQlicmVhazsKKwkJfQorCXBlYXN5Y2FwX2Zvcm1hdCsrOworfQoraWYgKDAgPT0gcGVhc3ljYXBfZm9ybWF0LT52NGwyX2Zvcm1hdC5mbXQucGl4LndpZHRoKSB7CisJU0FZKCJjYW5ub3QgZG86ICVpeCVpIHdpdGggc3RhbmRhcmQgbWFzayAweCUwMlhcbiIsIFwKKwkJCQkJCQl3aWR0aCwgaGVpZ2h0LCBtYXNrKTsKKwlwZWFzeWNhcF9mb3JtYXQgPSAmZWFzeWNhcF9mb3JtYXRbMF07ICBiZXN0ID0gLTE7CisJd2hpbGUgKDAgIT0gcGVhc3ljYXBfZm9ybWF0LT52NGwyX2Zvcm1hdC5mbXQucGl4LndpZHRoKSB7CisJCWlmICgoKHBlYXN5Y2FwX2Zvcm1hdC0+bWFzayAmIDB4MEYpID09IChtYXNrICYgMHgwRikpICYmIFwKKwkJCQkgKHBlYXN5Y2FwX2Zvcm1hdC0+djRsMl9mb3JtYXQuZm10LnBpeFwKKwkJCQkJCS5maWVsZCA9PSBmaWVsZCkgJiYgXAorCQkJCSAocGVhc3ljYXBfZm9ybWF0LT52NGwyX2Zvcm1hdC5mbXQucGl4XAorCQkJCQkJLnBpeGVsZm9ybWF0ID09IHBpeGVsZm9ybWF0KSkgeworCQkJbWlzcyA9IGFicyhwZWFzeWNhcF9mb3JtYXQtPlwKKwkJCQkJdjRsMl9mb3JtYXQuZm10LnBpeC53aWR0aCAgLSB3aWR0aCk7CisJCQlpZiAoKGJlc3QgPiBtaXNzKSB8fCAoYmVzdCA8IDApKSB7CisJCQkJYmVzdCA9IG1pc3M7CisJCQkJcGVhc3ljYXBfYmVzdF9mb3JtYXQgPSBwZWFzeWNhcF9mb3JtYXQ7CisJCQkJaWYgKCFtaXNzKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlwZWFzeWNhcF9mb3JtYXQrKzsKKwl9CisJaWYgKC0xID09IGJlc3QpIHsKKwkJU0FZKCJjYW5ub3QgZG8gJWl4Li4uIHdpdGggc3RhbmRhcmQgbWFzayAweCUwMlhcbiIsIFwKKwkJCQkJCQkJd2lkdGgsIG1hc2spOworCQlTQVkoImNhbm5vdCBkbyAuLi54JWkgd2l0aCBzdGFuZGFyZCBtYXNrIDB4JTAyWFxuIiwgXAorCQkJCQkJCQloZWlnaHQsIG1hc2spOworCQlTQVkoIiAgICAgICAgICAgJWl4JWkgdW5tYXRjaGVkXG4iLCB3aWR0aCwgaGVpZ2h0KTsKKwkJcmV0dXJuIHBlYXN5Y2FwLT5mb3JtYXRfb2Zmc2V0OworCX0KK30KK2lmICgoc3RydWN0IGVhc3ljYXBfZm9ybWF0ICopTlVMTCA9PSBwZWFzeWNhcF9iZXN0X2Zvcm1hdCkgeworCVNBWSgiTUlTVEFLRTogcGVhc3ljYXBfYmVzdF9mb3JtYXQgaXMgTlVMTCIpOworCXJldHVybiAtRUlOVkFMOworfQorcGVhc3ljYXBfZm9ybWF0ID0gcGVhc3ljYXBfYmVzdF9mb3JtYXQ7CisKKy8qLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uKi8KK2lmICh0cnVlID09IHRyeSkKKwlyZXR1cm4gKGludCkocGVhc3ljYXBfYmVzdF9mb3JtYXQgLSAmZWFzeWNhcF9mb3JtYXRbMF0pOworLyouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qLworCitpZiAoZmFsc2UgIT0gdHJ5KSB7CisJU0FZKCJNSVNUQUtFOiB0cnVlPT10cnkgd2hlcmUgaXMgc2hvdWxkIGJlIGZhbHNlXG4iKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KK1NBWSgiYWN0aW9uaW5nOiAlaXglaSAlc1xuIiwgXAorCQkJcGVhc3ljYXBfZm9ybWF0LT52NGwyX2Zvcm1hdC5mbXQucGl4LndpZHRoLCBcCisJCQlwZWFzeWNhcF9mb3JtYXQtPnY0bDJfZm9ybWF0LmZtdC5waXguaGVpZ2h0LAorCQkJJnBlYXN5Y2FwX2Zvcm1hdC0+bmFtZVswXSk7CitwZWFzeWNhcC0+aGVpZ2h0ICAgICAgICA9IHBlYXN5Y2FwX2Zvcm1hdC0+djRsMl9mb3JtYXQuZm10LnBpeC5oZWlnaHQ7CitwZWFzeWNhcC0+d2lkdGggICAgICAgICA9IHBlYXN5Y2FwX2Zvcm1hdC0+djRsMl9mb3JtYXQuZm10LnBpeC53aWR0aDsKK3BlYXN5Y2FwLT5waXhlbGZvcm1hdCAgID0gcGVhc3ljYXBfZm9ybWF0LT52NGwyX2Zvcm1hdC5mbXQucGl4LnBpeGVsZm9ybWF0OworcGVhc3ljYXAtPmZpZWxkICAgICAgICAgPSBwZWFzeWNhcF9mb3JtYXQtPnY0bDJfZm9ybWF0LmZtdC5waXguZmllbGQ7CitwZWFzeWNhcC0+Zm9ybWF0X29mZnNldCA9IChpbnQpKHBlYXN5Y2FwX2Zvcm1hdCAtICZlYXN5Y2FwX2Zvcm1hdFswXSk7CitwZWFzeWNhcC0+Ynl0ZXNwZXJwaXhlbCA9ICgweDAwRjAgJiBwZWFzeWNhcF9mb3JtYXQtPm1hc2spID4+IDQgOworaWYgKDB4MDEwMCAmIHBlYXN5Y2FwX2Zvcm1hdC0+bWFzaykKKwlwZWFzeWNhcC0+Ynl0ZXN3YXBvcmRlciA9IHRydWU7CitlbHNlCisJcGVhc3ljYXAtPmJ5dGVzd2Fwb3JkZXIgPSBmYWxzZTsKK2lmICgweDA4MDAgJiBwZWFzeWNhcF9mb3JtYXQtPm1hc2spCisJcGVhc3ljYXAtPmRlY2ltYXRlcGl4ZWwgPSB0cnVlOworZWxzZQorCXBlYXN5Y2FwLT5kZWNpbWF0ZXBpeGVsID0gZmFsc2U7CitpZiAoMHgxMDAwICYgcGVhc3ljYXBfZm9ybWF0LT5tYXNrKQorCXBlYXN5Y2FwLT5vZmZlcmZpZWxkcyA9IHRydWU7CitlbHNlCisJcGVhc3ljYXAtPm9mZmVyZmllbGRzID0gZmFsc2U7CitpZiAodHJ1ZSA9PSBwZWFzeWNhcC0+ZGVjaW1hdGVwaXhlbCkKKwltdWx0aXBsaWVyID0gMjsKK2Vsc2UKKwltdWx0aXBsaWVyID0gMTsKK3BlYXN5Y2FwLT52aWRlb2ZpZWxkYW1vdW50ID0gbXVsdGlwbGllciAqIHBlYXN5Y2FwLT53aWR0aCAqIFwKKwkJCQkJbXVsdGlwbGllciAqIHBlYXN5Y2FwLT5oZWlnaHQ7CitwZWFzeWNhcC0+ZnJhbWVfYnVmZmVyX3VzZWQgPSBwZWFzeWNhcC0+Ynl0ZXNwZXJwaXhlbCAqIFwKKwkJCQkJcGVhc3ljYXAtPndpZHRoICogcGVhc3ljYXAtPmhlaWdodDsKKworaWYgKHRydWUgPT0gcGVhc3ljYXAtPm9mZmVyZmllbGRzKSB7CisJU0FZKCJXQVJOSU5HOiAlaT1wZWFzeWNhcC0+ZmllbGQgaXMgdW50ZXN0ZWQ6ICIgXAorCQkJCSJwbGVhc2UgcmVwb3J0IHByb2JsZW1zXG4iLCBwZWFzeWNhcC0+ZmllbGQpOworCisKKy8qCisgKiAgICBGSVhNRSAtLS0tIFRISVMgSVMgVU5URVNURUQsIE1BWSBCRSAoQU5EIFBST0JBQkxZIElTKSBJTkNPUlJFQ1Q6CisgKgorICogICAgcGVhc3ljYXAtPmZyYW1lX2J1ZmZlcl91c2VkID0gcGVhc3ljYXAtPmZyYW1lX2J1ZmZlcl91c2VkIC8gMjsKKyAqCisgKiAgICBTTyBETyBOT1QgUklTSyBJVCBZRVQuCisgKgorICovCisKKworCit9CisKK2tpbGxfdmlkZW9fdXJicyhwZWFzeWNhcCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgUEFMCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2lmICgwID09ICgweDAxICYgcGVhc3ljYXBfZm9ybWF0LT5tYXNrKSkgeworCWlmICgoKDcyMCA9PSBwZWFzeWNhcF9mb3JtYXQtPnY0bDJfZm9ybWF0LmZtdC5waXgud2lkdGgpICYmIFwKKwkJCSg1NzYgPT0gXAorCQkJcGVhc3ljYXBfZm9ybWF0LT52NGwyX2Zvcm1hdC5mbXQucGl4LmhlaWdodCkpIHx8IFwKKwkJCSgoMzYwID09IFwKKwkJCXBlYXN5Y2FwX2Zvcm1hdC0+djRsMl9mb3JtYXQuZm10LnBpeC53aWR0aCkgJiYgXAorCQkJKDI4OCA9PSBcCisJCQlwZWFzeWNhcF9mb3JtYXQtPnY0bDJfZm9ybWF0LmZtdC5waXguaGVpZ2h0KSkpIHsKKwkJaWYgKDAgIT0gc2V0X3Jlc29sdXRpb24ocCwgMHgwMDAwLCAweDAwMDEsIDB4MDVBMCwgMHgwMTIxKSkgeworCQkJU0FZKCJFUlJPUjogc2V0X3Jlc29sdXRpb24oKSBmYWlsZWRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgaWYgKCg3MDQgPT0gcGVhc3ljYXBfZm9ybWF0LT52NGwyX2Zvcm1hdC5mbXQucGl4LndpZHRoKSAmJiBcCisJCQkoNTc2ID09IHBlYXN5Y2FwX2Zvcm1hdC0+djRsMl9mb3JtYXQuZm10LnBpeC5oZWlnaHQpKSB7CisJCWlmICgwICE9IHNldF9yZXNvbHV0aW9uKHAsIDB4MDAwNCwgMHgwMDAxLCAweDA1ODQsIDB4MDEyMSkpIHsKKwkJCVNBWSgiRVJST1I6IHNldF9yZXNvbHV0aW9uKCkgZmFpbGVkXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIGlmICgoKDY0MCA9PSBwZWFzeWNhcF9mb3JtYXQtPnY0bDJfZm9ybWF0LmZtdC5waXgud2lkdGgpICYmIFwKKwkJCSg0ODAgPT0gXAorCQkJcGVhc3ljYXBfZm9ybWF0LT52NGwyX2Zvcm1hdC5mbXQucGl4LmhlaWdodCkpIHx8IFwKKwkJCSgoMzIwID09IFwKKwkJCXBlYXN5Y2FwX2Zvcm1hdC0+djRsMl9mb3JtYXQuZm10LnBpeC53aWR0aCkgJiYgXAorCQkJKDI0MCA9PSBcCisJCQlwZWFzeWNhcF9mb3JtYXQtPnY0bDJfZm9ybWF0LmZtdC5waXguaGVpZ2h0KSkpIHsKKwkJaWYgKDAgIT0gc2V0X3Jlc29sdXRpb24ocCwgMHgwMDE0LCAweDAwMjAsIDB4MDUxNCwgMHgwMTEwKSkgeworCQkJU0FZKCJFUlJPUjogc2V0X3Jlc29sdXRpb24oKSBmYWlsZWRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgeworCQlTQVkoIk1JU1RBS0U6IGJhZCBmb3JtYXQsIGNhbm5vdCBzZXQgcmVzb2x1dGlvblxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgTlRTQworICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit9IGVsc2UgeworCWlmICgoKDcyMCA9PSBwZWFzeWNhcF9mb3JtYXQtPnY0bDJfZm9ybWF0LmZtdC5waXgud2lkdGgpICYmIFwKKwkJCSg0ODAgPT0gXAorCQkJcGVhc3ljYXBfZm9ybWF0LT52NGwyX2Zvcm1hdC5mbXQucGl4LmhlaWdodCkpIHx8IFwKKwkJCSgoMzYwID09IFwKKwkJCXBlYXN5Y2FwX2Zvcm1hdC0+djRsMl9mb3JtYXQuZm10LnBpeC53aWR0aCkgJiYgXAorCQkJKDI0MCA9PSBcCisJCQlwZWFzeWNhcF9mb3JtYXQtPnY0bDJfZm9ybWF0LmZtdC5waXguaGVpZ2h0KSkpIHsKKwkJaWYgKDAgIT0gc2V0X3Jlc29sdXRpb24ocCwgMHgwMDAwLCAweDAwMDMsIDB4MDVBMCwgMHgwMEYzKSkgeworCQkJU0FZKCJFUlJPUjogc2V0X3Jlc29sdXRpb24oKSBmYWlsZWRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgaWYgKCgoNjQwID09IHBlYXN5Y2FwX2Zvcm1hdC0+djRsMl9mb3JtYXQuZm10LnBpeC53aWR0aCkgJiYgXAorCQkJKDQ4MCA9PSBcCisJCQlwZWFzeWNhcF9mb3JtYXQtPnY0bDJfZm9ybWF0LmZtdC5waXguaGVpZ2h0KSkgfHwgXAorCQkJKCgzMjAgPT0gXAorCQkJcGVhc3ljYXBfZm9ybWF0LT52NGwyX2Zvcm1hdC5mbXQucGl4LndpZHRoKSAmJiBcCisJCQkoMjQwID09IFwKKwkJCXBlYXN5Y2FwX2Zvcm1hdC0+djRsMl9mb3JtYXQuZm10LnBpeC5oZWlnaHQpKSkgeworCQlpZiAoMCAhPSBzZXRfcmVzb2x1dGlvbihwLCAweDAwMTQsIDB4MDAwMywgMHgwNTE0LCAweDAwRjMpKSB7CisJCQlTQVkoIkVSUk9SOiBzZXRfcmVzb2x1dGlvbigpIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSB7CisJCVNBWSgiTUlTVEFLRTogYmFkIGZvcm1hdCwgY2Fubm90IHNldCByZXNvbHV0aW9uXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitjaGVja19zdGsocGVhc3ljYXAtPnB1c2JfZGV2aWNlKTsKKworcmV0dXJuIChpbnQpKHBlYXN5Y2FwX2Jlc3RfZm9ybWF0IC0gJmVhc3ljYXBfZm9ybWF0WzBdKTsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBhZGp1c3RfYnJpZ2h0bmVzcyhzdHJ1Y3QgZWFzeWNhcCAqcGVhc3ljYXAsIGludCB2YWx1ZSkKK3sKK3Vuc2lnbmVkIGludCBtb29kOworaW50IGkxOworCitpZiAoKHN0cnVjdCB1c2JfZGV2aWNlICopTlVMTCA9PSBwZWFzeWNhcC0+cHVzYl9kZXZpY2UpIHsKKwlTQVkoIkVSUk9SOiBwZWFzeWNhcC0+cHVzYl9kZXZpY2UgaXMgTlVMTFxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CitpMSA9IDA7Cit3aGlsZSAoMHhGRkZGRkZGRiAhPSBlYXN5Y2FwX2NvbnRyb2xbaTFdLmlkKSB7CisJaWYgKFY0TDJfQ0lEX0JSSUdIVE5FU1MgPT0gZWFzeWNhcF9jb250cm9sW2kxXS5pZCkgeworCQlpZiAoKGVhc3ljYXBfY29udHJvbFtpMV0ubWluaW11bSA+IHZhbHVlKSB8fCBcCisJCQkJCShlYXN5Y2FwX2NvbnRyb2xbaTFdLm1heGltdW0gPCB2YWx1ZSkpCisJCQl2YWx1ZSA9IGVhc3ljYXBfY29udHJvbFtpMV0uZGVmYXVsdF92YWx1ZTsKKwkJcGVhc3ljYXAtPmJyaWdodG5lc3MgPSB2YWx1ZTsKKwkJbW9vZCA9IDB4MDBGRiAmICh1bnNpZ25lZCBpbnQpcGVhc3ljYXAtPmJyaWdodG5lc3M7CisKKwkJc2V0MnRvNzgocGVhc3ljYXAtPnB1c2JfZGV2aWNlKTsKKworCQlpZiAoIXdyaXRlX3NhYShwZWFzeWNhcC0+cHVzYl9kZXZpY2UsIDB4MEEsIG1vb2QpKSB7CisJCQlTQVkoImFkanVzdGluZyBicmlnaHRuZXNzIHRvICAweCUwMlhcbiIsIG1vb2QpOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQlTQVkoIldBUk5JTkc6IGZhaWxlZCB0byBhZGp1c3QgYnJpZ2h0bmVzcyAiIFwKKwkJCQkJCQkidG8gMHglMDJYXG4iLCBtb29kKTsKKwkJCXJldHVybiAtRU5PRU5UOworCQl9CisKKwkJc2V0MnRvNzgocGVhc3ljYXAtPnB1c2JfZGV2aWNlKTsKKworCQlicmVhazsKKwl9CisJaTErKzsKK30KK1NBWSgiV0FSTklORzogZmFpbGVkIHRvIGFkanVzdCBicmlnaHRuZXNzOiBjb250cm9sIG5vdCBmb3VuZFxuIik7CityZXR1cm4gLUVOT0VOVDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBhZGp1c3RfY29udHJhc3Qoc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwLCBpbnQgdmFsdWUpCit7Cit1bnNpZ25lZCBpbnQgbW9vZDsKK2ludCBpMTsKKworaWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgPT0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlKSB7CisJU0FZKCJFUlJPUjogcGVhc3ljYXAtPnB1c2JfZGV2aWNlIGlzIE5VTExcbiIpOworCXJldHVybiAtRUZBVUxUOworfQoraTEgPSAwOword2hpbGUgKDB4RkZGRkZGRkYgIT0gZWFzeWNhcF9jb250cm9sW2kxXS5pZCkgeworCWlmIChWNEwyX0NJRF9DT05UUkFTVCA9PSBlYXN5Y2FwX2NvbnRyb2xbaTFdLmlkKSB7CisJCWlmICgoZWFzeWNhcF9jb250cm9sW2kxXS5taW5pbXVtID4gdmFsdWUpIHx8IFwKKwkJCQkJKGVhc3ljYXBfY29udHJvbFtpMV0ubWF4aW11bSA8IHZhbHVlKSkKKwkJCXZhbHVlID0gZWFzeWNhcF9jb250cm9sW2kxXS5kZWZhdWx0X3ZhbHVlOworCQlwZWFzeWNhcC0+Y29udHJhc3QgPSB2YWx1ZTsKKwkJbW9vZCA9IDB4MDBGRiAmICh1bnNpZ25lZCBpbnQpIChwZWFzeWNhcC0+Y29udHJhc3QgLSAxMjgpOworCisJCXNldDJ0bzc4KHBlYXN5Y2FwLT5wdXNiX2RldmljZSk7CisKKwkJaWYgKCF3cml0ZV9zYWEocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCAweDBCLCBtb29kKSkgeworCQkJU0FZKCJhZGp1c3RpbmcgY29udHJhc3QgdG8gIDB4JTAyWFxuIiwgbW9vZCk7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCVNBWSgiV0FSTklORzogZmFpbGVkIHRvIGFkanVzdCBjb250cmFzdCB0byAiIFwKKwkJCQkJCQkiMHglMDJYXG4iLCBtb29kKTsKKwkJCXJldHVybiAtRU5PRU5UOworCQl9CisKKwkJc2V0MnRvNzgocGVhc3ljYXAtPnB1c2JfZGV2aWNlKTsKKworCQlicmVhazsKKwl9CisJaTErKzsKK30KK1NBWSgiV0FSTklORzogZmFpbGVkIHRvIGFkanVzdCBjb250cmFzdDogY29udHJvbCBub3QgZm91bmRcbiIpOworcmV0dXJuIC1FTk9FTlQ7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgYWRqdXN0X3NhdHVyYXRpb24oc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwLCBpbnQgdmFsdWUpCit7Cit1bnNpZ25lZCBpbnQgbW9vZDsKK2ludCBpMTsKKworaWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgPT0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlKSB7CisJU0FZKCJFUlJPUjogcGVhc3ljYXAtPnB1c2JfZGV2aWNlIGlzIE5VTExcbiIpOworCXJldHVybiAtRUZBVUxUOworfQoraTEgPSAwOword2hpbGUgKDB4RkZGRkZGRkYgIT0gZWFzeWNhcF9jb250cm9sW2kxXS5pZCkgeworCWlmIChWNEwyX0NJRF9TQVRVUkFUSU9OID09IGVhc3ljYXBfY29udHJvbFtpMV0uaWQpIHsKKwkJaWYgKChlYXN5Y2FwX2NvbnRyb2xbaTFdLm1pbmltdW0gPiB2YWx1ZSkgfHwgXAorCQkJCQkoZWFzeWNhcF9jb250cm9sW2kxXS5tYXhpbXVtIDwgdmFsdWUpKQorCQkJdmFsdWUgPSBlYXN5Y2FwX2NvbnRyb2xbaTFdLmRlZmF1bHRfdmFsdWU7CisJCXBlYXN5Y2FwLT5zYXR1cmF0aW9uID0gdmFsdWU7CisJCW1vb2QgPSAweDAwRkYgJiAodW5zaWduZWQgaW50KSAocGVhc3ljYXAtPnNhdHVyYXRpb24gLSAxMjgpOworCisJCXNldDJ0bzc4KHBlYXN5Y2FwLT5wdXNiX2RldmljZSk7CisKKwkJaWYgKCF3cml0ZV9zYWEocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCAweDBDLCBtb29kKSkgeworCQkJU0FZKCJhZGp1c3Rpbmcgc2F0dXJhdGlvbiB0byAgMHglMDJYXG4iLCBtb29kKTsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJU0FZKCJXQVJOSU5HOiBmYWlsZWQgdG8gYWRqdXN0IHNhdHVyYXRpb24gdG8gIiBcCisJCQkJCQkJIjB4JTAyWFxuIiwgbW9vZCk7CisJCQlyZXR1cm4gLUVOT0VOVDsKKwkJfQorCQlicmVhazsKKworCQlzZXQydG83OChwZWFzeWNhcC0+cHVzYl9kZXZpY2UpOworCisJfQorCWkxKys7Cit9CitTQVkoIldBUk5JTkc6IGZhaWxlZCB0byBhZGp1c3Qgc2F0dXJhdGlvbjogY29udHJvbCBub3QgZm91bmRcbiIpOworcmV0dXJuIC1FTk9FTlQ7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgYWRqdXN0X2h1ZShzdHJ1Y3QgZWFzeWNhcCAqcGVhc3ljYXAsIGludCB2YWx1ZSkKK3sKK3Vuc2lnbmVkIGludCBtb29kOworaW50IGkxLCBpMjsKKworaWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgPT0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlKSB7CisJU0FZKCJFUlJPUjogcGVhc3ljYXAtPnB1c2JfZGV2aWNlIGlzIE5VTExcbiIpOworCXJldHVybiAtRUZBVUxUOworfQoraTEgPSAwOword2hpbGUgKDB4RkZGRkZGRkYgIT0gZWFzeWNhcF9jb250cm9sW2kxXS5pZCkgeworCWlmIChWNEwyX0NJRF9IVUUgPT0gZWFzeWNhcF9jb250cm9sW2kxXS5pZCkgeworCQlpZiAoKGVhc3ljYXBfY29udHJvbFtpMV0ubWluaW11bSA+IHZhbHVlKSB8fCBcCisJCQkJCShlYXN5Y2FwX2NvbnRyb2xbaTFdLm1heGltdW0gPCB2YWx1ZSkpCisJCQl2YWx1ZSA9IGVhc3ljYXBfY29udHJvbFtpMV0uZGVmYXVsdF92YWx1ZTsKKwkJcGVhc3ljYXAtPmh1ZSA9IHZhbHVlOworCQlpMiA9IHBlYXN5Y2FwLT5odWUgLSAxMjg7CisJCW1vb2QgPSAweDAwRkYgJiAoKGludCkgaTIpOworCisJCXNldDJ0bzc4KHBlYXN5Y2FwLT5wdXNiX2RldmljZSk7CisKKwkJaWYgKCF3cml0ZV9zYWEocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCAweDBELCBtb29kKSkgeworCQkJU0FZKCJhZGp1c3RpbmcgaHVlIHRvICAweCUwMlhcbiIsIG1vb2QpOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQlTQVkoIldBUk5JTkc6IGZhaWxlZCB0byBhZGp1c3QgaHVlIHRvIDB4JTAyWFxuIiwgbW9vZCk7CisJCQlyZXR1cm4gLUVOT0VOVDsKKwkJfQorCisJCXNldDJ0bzc4KHBlYXN5Y2FwLT5wdXNiX2RldmljZSk7CisKKwkJYnJlYWs7CisJfQorCWkxKys7Cit9CitTQVkoIldBUk5JTkc6IGZhaWxlZCB0byBhZGp1c3QgaHVlOiBjb250cm9sIG5vdCBmb3VuZFxuIik7CityZXR1cm4gLUVOT0VOVDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBhZGp1c3Rfdm9sdW1lKHN0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcCwgaW50IHZhbHVlKQoreworX19zOCBtb29kOworaW50IGkxOworCitpZiAoKHN0cnVjdCB1c2JfZGV2aWNlICopTlVMTCA9PSBwZWFzeWNhcC0+cHVzYl9kZXZpY2UpIHsKKwlTQVkoIkVSUk9SOiBwZWFzeWNhcC0+cHVzYl9kZXZpY2UgaXMgTlVMTFxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CitpMSA9IDA7Cit3aGlsZSAoMHhGRkZGRkZGRiAhPSBlYXN5Y2FwX2NvbnRyb2xbaTFdLmlkKSB7CisJaWYgKFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSA9PSBlYXN5Y2FwX2NvbnRyb2xbaTFdLmlkKSB7CisJCWlmICgoZWFzeWNhcF9jb250cm9sW2kxXS5taW5pbXVtID4gdmFsdWUpIHx8IFwKKwkJCShlYXN5Y2FwX2NvbnRyb2xbaTFdLm1heGltdW0gPCB2YWx1ZSkpCisJCQl2YWx1ZSA9IGVhc3ljYXBfY29udHJvbFtpMV0uZGVmYXVsdF92YWx1ZTsKKwkJcGVhc3ljYXAtPnZvbHVtZSA9IHZhbHVlOworCQltb29kID0gKDE2ID4gcGVhc3ljYXAtPnZvbHVtZSkgPyAxNiA6IFwKKwkJCSgoMzEgPCBwZWFzeWNhcC0+dm9sdW1lKSA/IDMxIDogXAorCQkJKF9fczgpIHBlYXN5Y2FwLT52b2x1bWUpOworCQlpZiAoIWF1ZGlvX2dhaW5zZXQocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCBtb29kKSkgeworCQkJU0FZKCJhZGp1c3Rpbmcgdm9sdW1lIHRvIDB4JTAxWFxuIiwgbW9vZCk7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCVNBWSgiV0FSTklORzogZmFpbGVkIHRvIGFkanVzdCB2b2x1bWUgdG8gIiBcCisJCQkJCQkJIjB4JTFYXG4iLCBtb29kKTsKKwkJCXJldHVybiAtRU5PRU5UOworCQl9CisJCWJyZWFrOworCX0KK2kxKys7Cit9CitTQVkoIldBUk5JTkc6IGZhaWxlZCB0byBhZGp1c3Qgdm9sdW1lOiBjb250cm9sIG5vdCBmb3VuZFxuIik7CityZXR1cm4gLUVOT0VOVDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgQU4gQUxURVJOQVRJVkUgTUVUSE9EIE9GIE1VVElORyBNSUdIVCBTRUVNIFRPIEJFOgorICogICAgICAgICAgICB1c2Jfc2V0X2ludGVyZmFjZShwZWFzeWNhcC0+cHVzYl9kZXZpY2UsIFwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVhc3ljYXAtPmF1ZGlvX2ludGVyZmFjZSwgXAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWFzeWNhcC0+YXVkaW9fYWx0c2V0dGluZ19vZmYpOworICogIEhPV0VWRVIsIEFGVEVSIFRISVMgQ09NTUFORCBJUyBJU1NVRUQgQUxMIFNVQlNFUVVFTlQgVVJCUyBSRUNFSVZFIFNUQVRVUworICogIC1FU0hVVERPV04uICBUSEUgSEFORExFUiBST1VUSU5FIGVhc3lzbmRfY29tcGxldGUoKSBERUNMSU5FUyBUTyBSRVNVQk1JVAorICogIFRIRSBVUkIgQU5EIFRIRSBQSVBFTElORSBDT0xMQVBTRVMgSVJSRVRSSUVWQUJMWS4gIEJFV0FSRS4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGFkanVzdF9tdXRlKHN0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcCwgaW50IHZhbHVlKQoreworaW50IGkxOworCitpZiAoKHN0cnVjdCB1c2JfZGV2aWNlICopTlVMTCA9PSBwZWFzeWNhcC0+cHVzYl9kZXZpY2UpIHsKKwlTQVkoIkVSUk9SOiBwZWFzeWNhcC0+cHVzYl9kZXZpY2UgaXMgTlVMTFxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CitpMSA9IDA7Cit3aGlsZSAoMHhGRkZGRkZGRiAhPSBlYXN5Y2FwX2NvbnRyb2xbaTFdLmlkKSB7CisJaWYgKFY0TDJfQ0lEX0FVRElPX01VVEUgPT0gZWFzeWNhcF9jb250cm9sW2kxXS5pZCkgeworCQlwZWFzeWNhcC0+bXV0ZSA9IHZhbHVlOworCQlzd2l0Y2ggKHBlYXN5Y2FwLT5tdXRlKSB7CisJCWNhc2UgMTogeworCQkJcGVhc3ljYXAtPmF1ZGlvX2lkbGUgPSAxOworCQkJcGVhc3ljYXAtPnRpbWV2YWwwLnR2X3NlYyA9IDA7CisJCQlTQVkoImFkanVzdGluZyBtdXRlOiAlaT1wZWFzeWNhcC0+YXVkaW9faWRsZVxuIiwgXAorCQkJCQkJCXBlYXN5Y2FwLT5hdWRpb19pZGxlKTsKKwkJCXJldHVybiAwOworCQl9CisJCWRlZmF1bHQ6IHsKKwkJCXBlYXN5Y2FwLT5hdWRpb19pZGxlID0gMDsKKwkJCVNBWSgiYWRqdXN0aW5nIG11dGU6ICVpPXBlYXN5Y2FwLT5hdWRpb19pZGxlXG4iLCBcCisJCQkJCQkJcGVhc3ljYXAtPmF1ZGlvX2lkbGUpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJfQorCQlicmVhazsKKwl9CisJaTErKzsKK30KK1NBWSgiV0FSTklORzogZmFpbGVkIHRvIGFkanVzdCBtdXRlOiBjb250cm9sIG5vdCBmb3VuZFxuIik7CityZXR1cm4gLUVOT0VOVDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyp2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2diovCisjaWYgZGVmaW5lZChFQVNZQ0FQX0lTX1ZJREVPREVWX0NMSUVOVCkKK2xvbmcKK2Vhc3ljYXBfaW9jdGxfbm9pbm9kZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXAorCQkJCQkJCQkJeworCXJldHVybiBlYXN5Y2FwX2lvY3RsKChzdHJ1Y3QgaW5vZGUgKilOVUxMLCBmaWxlLCBjbWQsIGFyZyk7Cit9CisjZW5kaWYgLypFQVNZQ0FQX0lTX1ZJREVPREVWX0NMSUVOVCovCisvKl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGVhc3ljYXBfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIFwKKwkJCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CitzdGF0aWMgc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwOworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlICpwOworc3RhdGljIF9fdTMyIGlzZXF1ZW5jZTsKKworcGVhc3ljYXAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CitpZiAoTlVMTCA9PSBwZWFzeWNhcCkgeworCVNBWSgiRVJST1I6ICBwZWFzeWNhcCBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gLTE7Cit9CitwID0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlOworaWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgPT0gcCkgeworCVNBWSgiRVJST1I6IHBlYXN5Y2FwLT5wdXNiX2RldmljZSBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgTU9TVCBPRiBUSEUgVkFSSUFCTEVTIERFQ0xBUkVEIHN0YXRpYyBJTiBUSEUgY2FzZXt9IEJMT0NLUyBCRUxPVyBBUkUgU08KKyAqICBERUNMQVJFRCBTSU1QTFkgVE8gQVZPSUQgQSBDT01QSUxFUiBXQVJOSU5HIE9GIFRIRSBLSU5EOgorICogIGVhc3ljYXBfaW9jdGwuYzogd2FybmluZzoKKyAqICAgICAgICAgICAgICAgICAgICAgICB0aGUgZnJhbWUgc2l6ZSBvZiAuLi4gYnl0ZXMgaXMgbGFyZ2VyIHRoYW4gMTAyNCBieXRlcworICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzd2l0Y2ggKGNtZCkgeworY2FzZSBWSURJT0NfUVVFUllDQVA6IHsKKwlzdGF0aWMgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSB2NGwyX2NhcGFiaWxpdHk7CisJc3RhdGljIGNoYXIgdmVyc2lvblsxNl0sICpwMSwgKnAyOworCXN0YXRpYyBpbnQgaSwgcmMsIGtbM107CisJc3RhdGljIGxvbmcgbG5nOworCisJSk9UKDgsICJWSURJT0NfUVVFUllDQVBcbiIpOworCisJaWYgKDE2IDw9IHN0cmxlbihFQVNZQ0FQX0RSSVZFUl9WRVJTSU9OKSkgeworCQlTQVkoIkVSUk9SOiBiYWQgZHJpdmVyIHZlcnNpb24gc3RyaW5nXG4iKTsgcmV0dXJuIC1FSU5WQUw7CisJfQorCXN0cmNweSgmdmVyc2lvblswXSwgRUFTWUNBUF9EUklWRVJfVkVSU0lPTik7CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJa1tpXSA9IDA7CisJcDIgPSAmdmVyc2lvblswXTsgIGkgPSAwOworCXdoaWxlICgqcDIpIHsKKwkJcDEgPSBwMjsKKwkJd2hpbGUgKCpwMiAmJiAoJy4nICE9ICpwMikpCisJCQlwMisrOworCQlpZiAoKnAyKQorCQkJKnAyKysgPSAwOworCQlpZiAoMyA+IGkpIHsKKwkJCXJjID0gKGludCkgc3RyaWN0X3N0cnRvbChwMSwgMTAsICZsbmcpOworCQkJaWYgKDAgIT0gcmMpIHsKKwkJCQlTQVkoIkVSUk9SOiAlaT1zdHJpY3Rfc3RydG9sKCVzLC4sLClcbiIsIFwKKwkJCQkJCQkJcmMsIHAxKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWtbaV0gPSAoaW50KWxuZzsKKwkJfQorCQlpKys7CisJfQorCisJbWVtc2V0KCZ2NGwyX2NhcGFiaWxpdHksIDAsIHNpemVvZihzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5KSk7CisJc3RybGNweSgmdjRsMl9jYXBhYmlsaXR5LmRyaXZlclswXSwgImVhc3ljYXAiLCBcCisJCQkJCXNpemVvZih2NGwyX2NhcGFiaWxpdHkuZHJpdmVyKSk7CisKKwl2NGwyX2NhcGFiaWxpdHkuY2FwYWJpbGl0aWVzID0gXAorCQkJCVY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9TVFJFQU1JTkcgfCBcCisJCQkJVjRMMl9DQVBfQVVESU8gICAgICAgICB8IFY0TDJfQ0FQX1JFQURXUklURTsKKworCXY0bDJfY2FwYWJpbGl0eS52ZXJzaW9uID0gS0VSTkVMX1ZFUlNJT04oa1swXSwga1sxXSwga1syXSk7CisJSk9UKDgsICJ2NGwyX2NhcGFiaWxpdHkudmVyc2lvbj0oJWksJWksJWkpXG4iLCBrWzBdLCBrWzFdLCBrWzJdKTsKKworCXN0cmxjcHkoJnY0bDJfY2FwYWJpbGl0eS5jYXJkWzBdLCAiRWFzeUNBUCBEQzYwIiwgXAorCQlzaXplb2YodjRsMl9jYXBhYmlsaXR5LmNhcmQpKTsKKworCWlmICh1c2JfbWFrZV9wYXRoKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgJnY0bDJfY2FwYWJpbGl0eS5idXNfaW5mb1swXSxcCisJCQkJc2l6ZW9mKHY0bDJfY2FwYWJpbGl0eS5idXNfaW5mbykpIDwgMCkgeworCQlzdHJsY3B5KCZ2NGwyX2NhcGFiaWxpdHkuYnVzX2luZm9bMF0sICJFYXN5Q0FQIGJ1c19pbmZvIiwgXAorCQkJCQlzaXplb2YodjRsMl9jYXBhYmlsaXR5LmJ1c19pbmZvKSk7CisJCUpPVCg4LCAiJXM9djRsMl9jYXBhYmlsaXR5LmJ1c19pbmZvXG4iLCBcCisJCQkJCSZ2NGwyX2NhcGFiaWxpdHkuYnVzX2luZm9bMF0pOworCX0KKwlpZiAoMCAhPSBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmdjRsMl9jYXBhYmlsaXR5LCBcCisJCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5KSkpIHsKKwkJUE9VVDsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWJyZWFrOworfQorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworY2FzZSBWSURJT0NfRU5VTUlOUFVUOiB7CisJc3RhdGljIHN0cnVjdCB2NGwyX2lucHV0IHY0bDJfaW5wdXQ7CisJc3RhdGljIF9fdTMyIGluZGV4OworCisJSk9UKDgsICJWSURJT0NfRU5VTUlOUFVUXG4iKTsKKworCWlmICgwICE9IGNvcHlfZnJvbV91c2VyKCZ2NGwyX2lucHV0LCAodm9pZCBfX3VzZXIgKilhcmcsIFwKKwkJCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX2lucHV0KSkpIHsKKwkJUE9VVDsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJaW5kZXggPSB2NGwyX2lucHV0LmluZGV4OworCW1lbXNldCgmdjRsMl9pbnB1dCwgMCwgc2l6ZW9mKHN0cnVjdCB2NGwyX2lucHV0KSk7CisKKwlzd2l0Y2ggKGluZGV4KSB7CisJY2FzZSAwOiB7CisJCXY0bDJfaW5wdXQuaW5kZXggPSBpbmRleDsKKwkJc3RyY3B5KCZ2NGwyX2lucHV0Lm5hbWVbMF0sICJDVkJTMCIpOworCQl2NGwyX2lucHV0LnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOworCQl2NGwyX2lucHV0LmF1ZGlvc2V0ID0gMHgwMTsKKwkJdjRsMl9pbnB1dC50dW5lciA9IDA7CisJCXY0bDJfaW5wdXQuc3RkID0gVjRMMl9TVERfUEFMIHwgVjRMMl9TVERfU0VDQU0gfCBcCisJCQkJVjRMMl9TVERfTlRTQyA7CisJCXY0bDJfaW5wdXQuc3RhdHVzID0gMDsKKwkJSk9UKDgsICIlaT1pbmRleDogJXNcbiIsIGluZGV4LCAmdjRsMl9pbnB1dC5uYW1lWzBdKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgMTogeworCQl2NGwyX2lucHV0LmluZGV4ID0gaW5kZXg7CisJCXN0cmNweSgmdjRsMl9pbnB1dC5uYW1lWzBdLCAiQ1ZCUzEiKTsKKwkJdjRsMl9pbnB1dC50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKKwkJdjRsMl9pbnB1dC5hdWRpb3NldCA9IDB4MDE7CisJCXY0bDJfaW5wdXQudHVuZXIgPSAwOworCQl2NGwyX2lucHV0LnN0ZCA9IFY0TDJfU1REX1BBTCB8IFY0TDJfU1REX1NFQ0FNIHwgXAorCQkJCVY0TDJfU1REX05UU0MgOworCQl2NGwyX2lucHV0LnN0YXR1cyA9IDA7CisJCUpPVCg4LCAiJWk9aW5kZXg6ICVzXG4iLCBpbmRleCwgJnY0bDJfaW5wdXQubmFtZVswXSk7CisJCWJyZWFrOworCX0KKwljYXNlIDI6IHsKKwkJdjRsMl9pbnB1dC5pbmRleCA9IGluZGV4OworCQlzdHJjcHkoJnY0bDJfaW5wdXQubmFtZVswXSwgIkNWQlMyIik7CisJCXY0bDJfaW5wdXQudHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CisJCXY0bDJfaW5wdXQuYXVkaW9zZXQgPSAweDAxOworCQl2NGwyX2lucHV0LnR1bmVyID0gMDsKKwkJdjRsMl9pbnB1dC5zdGQgPSBWNEwyX1NURF9QQUwgfCBWNEwyX1NURF9TRUNBTSB8IFwKKwkJCQlWNEwyX1NURF9OVFNDIDsKKwkJdjRsMl9pbnB1dC5zdGF0dXMgPSAwOworCQlKT1QoOCwgIiVpPWluZGV4OiAlc1xuIiwgaW5kZXgsICZ2NGwyX2lucHV0Lm5hbWVbMF0pOworCQlicmVhazsKKwl9CisJY2FzZSAzOiB7CisJCXY0bDJfaW5wdXQuaW5kZXggPSBpbmRleDsKKwkJc3RyY3B5KCZ2NGwyX2lucHV0Lm5hbWVbMF0sICJDVkJTMyIpOworCQl2NGwyX2lucHV0LnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOworCQl2NGwyX2lucHV0LmF1ZGlvc2V0ID0gMHgwMTsKKwkJdjRsMl9pbnB1dC50dW5lciA9IDA7CisJCXY0bDJfaW5wdXQuc3RkID0gVjRMMl9TVERfUEFMIHwgVjRMMl9TVERfU0VDQU0gfCBcCisJCQkJVjRMMl9TVERfTlRTQyA7CisJCXY0bDJfaW5wdXQuc3RhdHVzID0gMDsKKwkJSk9UKDgsICIlaT1pbmRleDogJXNcbiIsIGluZGV4LCAmdjRsMl9pbnB1dC5uYW1lWzBdKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgNDogeworCQl2NGwyX2lucHV0LmluZGV4ID0gaW5kZXg7CisJCXN0cmNweSgmdjRsMl9pbnB1dC5uYW1lWzBdLCAiQ1ZCUzQiKTsKKwkJdjRsMl9pbnB1dC50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKKwkJdjRsMl9pbnB1dC5hdWRpb3NldCA9IDB4MDE7CisJCXY0bDJfaW5wdXQudHVuZXIgPSAwOworCQl2NGwyX2lucHV0LnN0ZCA9IFY0TDJfU1REX1BBTCB8IFY0TDJfU1REX1NFQ0FNIHwgXAorCQkJCVY0TDJfU1REX05UU0MgOworCQl2NGwyX2lucHV0LnN0YXR1cyA9IDA7CisJCUpPVCg4LCAiJWk9aW5kZXg6ICVzXG4iLCBpbmRleCwgJnY0bDJfaW5wdXQubmFtZVswXSk7CisJCWJyZWFrOworCX0KKwljYXNlIDU6IHsKKwkJdjRsMl9pbnB1dC5pbmRleCA9IGluZGV4OworCQlzdHJjcHkoJnY0bDJfaW5wdXQubmFtZVswXSwgIlMtVklERU8iKTsKKwkJdjRsMl9pbnB1dC50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKKwkJdjRsMl9pbnB1dC5hdWRpb3NldCA9IDB4MDE7CisJCXY0bDJfaW5wdXQudHVuZXIgPSAwOworCQl2NGwyX2lucHV0LnN0ZCA9IFY0TDJfU1REX1BBTCB8IFY0TDJfU1REX1NFQ0FNIHwgXAorCQkJCVY0TDJfU1REX05UU0MgOworCQl2NGwyX2lucHV0LnN0YXR1cyA9IDA7CisJCUpPVCg4LCAiJWk9aW5kZXg6ICVzXG4iLCBpbmRleCwgJnY0bDJfaW5wdXQubmFtZVswXSk7CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OiB7CisJCUpPVCg4LCAiJWk9aW5kZXg6IGV4aGF1c3RzIGlucHV0c1xuIiwgaW5kZXgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJfQorCisJaWYgKDAgIT0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJnY0bDJfaW5wdXQsIFwKKwkJCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9pbnB1dCkpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlicmVhazsKK30KKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK2Nhc2UgVklESU9DX0dfSU5QVVQ6IHsKKwlzdGF0aWMgX191MzIgaW5kZXg7CisKKwlKT1QoOCwgIlZJRElPQ19HX0lOUFVUXG4iKTsKKwlpbmRleCA9IChfX3UzMilwZWFzeWNhcC0+aW5wdXQ7CisJSk9UKDgsICJ1c2VyIGlzIHRvbGQ6ICVpXG4iLCBpbmRleCk7CisJaWYgKDAgIT0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmluZGV4LCBzaXplb2YoX191MzIpKSkgeworCQlQT1VUOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJYnJlYWs7Cit9CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCitjYXNlIFZJRElPQ19TX0lOUFVUOgorCXsKKwlzdGF0aWMgX191MzIgaW5kZXg7CisKKwlKT1QoOCwgIlZJRElPQ19TX0lOUFVUXG4iKTsKKworCWlmICgwICE9IGNvcHlfZnJvbV91c2VyKCZpbmRleCwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YoX191MzIpKSkgeworCQlQT1VUOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlKT1QoOCwgInVzZXIgcmVxdWVzdHMgaW5wdXQgJWlcbiIsIGluZGV4KTsKKworCWlmICgoaW50KWluZGV4ID09IHBlYXN5Y2FwLT5pbnB1dCkgeworCQlTQVkoInJlcXVlc3RlZCBpbnB1dCBhbHJlYWR5IGluIGVmZmVjdFxuIik7CisJCWJyZWFrOworCX0KKworCWlmICgoMCA+IGluZGV4KSB8fCAoNSA8IGluZGV4KSkgeworCQlKT1QoOCwgIkVSUk9SOiAgYmFkIHJlcXVlc3RlZCBpbnB1dDogJWlcbiIsIGluZGV4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXBlYXN5Y2FwLT5pbnB1dCA9IChpbnQpaW5kZXg7CisKKwlzZWxlY3RfaW5wdXQocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCBwZWFzeWNhcC0+aW5wdXQsIDkpOworCisJYnJlYWs7Cit9CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCitjYXNlIFZJRElPQ19FTlVNQVVESU86IHsKKwlKT1QoOCwgIlZJRElPQ19FTlVNQVVESU9cbiIpOworCXJldHVybiAtRUlOVkFMOworfQorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworY2FzZSBWSURJT0NfRU5VTUFVRE9VVDogeworCXN0YXRpYyBzdHJ1Y3QgdjRsMl9hdWRpb291dCB2NGwyX2F1ZGlvb3V0OworCisJSk9UKDgsICJWSURJT0NfRU5VTUFVRE9VVFxuIik7CisKKwlpZiAoMCAhPSBjb3B5X2Zyb21fdXNlcigmdjRsMl9hdWRpb291dCwgKHZvaWQgX191c2VyICopYXJnLCBcCisJCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9hdWRpb291dCkpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWlmICgwICE9IHY0bDJfYXVkaW9vdXQuaW5kZXgpCisJCXJldHVybiAtRUlOVkFMOworCW1lbXNldCgmdjRsMl9hdWRpb291dCwgMCwgc2l6ZW9mKHN0cnVjdCB2NGwyX2F1ZGlvb3V0KSk7CisJdjRsMl9hdWRpb291dC5pbmRleCA9IDA7CisJc3RyY3B5KCZ2NGwyX2F1ZGlvb3V0Lm5hbWVbMF0sICJTb3VuZHRyYWNrIik7CisKKwlpZiAoMCAhPSBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmdjRsMl9hdWRpb291dCwgXAorCQkJCQlzaXplb2Yoc3RydWN0IHY0bDJfYXVkaW9vdXQpKSkgeworCQlQT1VUOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJYnJlYWs7Cit9CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCitjYXNlIFZJRElPQ19RVUVSWUNUUkw6IHsKKwlzdGF0aWMgaW50IGkxOworCXN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgdjRsMl9xdWVyeWN0cmw7CisKKwlKT1QoOCwgIlZJRElPQ19RVUVSWUNUUkxcbiIpOworCisJaWYgKDAgIT0gY29weV9mcm9tX3VzZXIoJnY0bDJfcXVlcnljdHJsLCAodm9pZCBfX3VzZXIgKilhcmcsIFwKKwkJCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCkpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWkxID0gMDsKKwl3aGlsZSAoMHhGRkZGRkZGRiAhPSBlYXN5Y2FwX2NvbnRyb2xbaTFdLmlkKSB7CisJCWlmIChlYXN5Y2FwX2NvbnRyb2xbaTFdLmlkID09IHY0bDJfcXVlcnljdHJsLmlkKSB7CisJCQlKT1QoOCwgIlZJRElPQ19RVUVSWUNUUkwgICVzPWVhc3ljYXBfY29udHJvbFslaV0iIFwKKwkJCQkiLm5hbWVcbiIsICZlYXN5Y2FwX2NvbnRyb2xbaTFdLm5hbWVbMF0sIGkxKTsKKwkJCW1lbWNweSgmdjRsMl9xdWVyeWN0cmwsICZlYXN5Y2FwX2NvbnRyb2xbaTFdLCBcCisJCQkJCQlzaXplb2Yoc3RydWN0IHY0bDJfcXVlcnljdHJsKSk7CisJCQlicmVhazsKKwkJfQorCQlpMSsrOworCX0KKwlpZiAoMHhGRkZGRkZGRiA9PSBlYXN5Y2FwX2NvbnRyb2xbaTFdLmlkKSB7CisJCUpPVCg4LCAiJWk9aW5kZXg6IGV4aGF1c3RzIGNvbnRyb2xzXG4iLCBpMSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoMCAhPSBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmdjRsMl9xdWVyeWN0cmwsIFwKKwkJCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCkpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlicmVhazsKK30KKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK2Nhc2UgVklESU9DX1FVRVJZTUVOVTogeworCUpPVCg4LCAiVklESU9DX1FVRVJZTUVOVSB1bnN1cHBvcnRlZFxuIik7CisJcmV0dXJuIC1FSU5WQUw7CisJYnJlYWs7Cit9CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCitjYXNlIFZJRElPQ19HX0NUUkw6IHsKKwlzdGF0aWMgc3RydWN0IHY0bDJfY29udHJvbCB2NGwyX2NvbnRyb2w7CisKKwlKT1QoOCwgIlZJRElPQ19HX0NUUkxcbiIpOworCisJaWYgKDAgIT0gY29weV9mcm9tX3VzZXIoJnY0bDJfY29udHJvbCwgKHZvaWQgX191c2VyICopYXJnLCBcCisJCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9jb250cm9sKSkpIHsKKwkJUE9VVDsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJc3dpdGNoICh2NGwyX2NvbnRyb2wuaWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6IHsKKwkJdjRsMl9jb250cm9sLnZhbHVlID0gcGVhc3ljYXAtPmJyaWdodG5lc3M7CisJCUpPVCg4LCAidXNlciBlbnF1aXJlcyBicmlnaHRuZXNzOiAlaVxuIiwgdjRsMl9jb250cm9sLnZhbHVlKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6IHsKKwkJdjRsMl9jb250cm9sLnZhbHVlID0gcGVhc3ljYXAtPmNvbnRyYXN0OworCQlKT1QoOCwgInVzZXIgZW5xdWlyZXMgY29udHJhc3Q6ICVpXG4iLCB2NGwyX2NvbnRyb2wudmFsdWUpOworCQlicmVhazsKKwl9CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOiB7CisJCXY0bDJfY29udHJvbC52YWx1ZSA9IHBlYXN5Y2FwLT5zYXR1cmF0aW9uOworCQlKT1QoOCwgInVzZXIgZW5xdWlyZXMgc2F0dXJhdGlvbjogJWlcbiIsIHY0bDJfY29udHJvbC52YWx1ZSk7CisJCWJyZWFrOworCX0KKwljYXNlIFY0TDJfQ0lEX0hVRTogeworCQl2NGwyX2NvbnRyb2wudmFsdWUgPSBwZWFzeWNhcC0+aHVlOworCQlKT1QoOCwgInVzZXIgZW5xdWlyZXMgaHVlOiAlaVxuIiwgdjRsMl9jb250cm9sLnZhbHVlKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOiB7CisJCXY0bDJfY29udHJvbC52YWx1ZSA9IHBlYXN5Y2FwLT52b2x1bWU7CisJCUpPVCg4LCAidXNlciBlbnF1aXJlcyB2b2x1bWU6ICVpXG4iLCB2NGwyX2NvbnRyb2wudmFsdWUpOworCQlicmVhazsKKwl9CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOiB7CisJCWlmICgxID09IHBlYXN5Y2FwLT5tdXRlKQorCQkJdjRsMl9jb250cm9sLnZhbHVlID0gdHJ1ZTsKKwkJZWxzZQorCQkJdjRsMl9jb250cm9sLnZhbHVlID0gZmFsc2U7CisJCUpPVCg4LCAidXNlciBlbnF1aXJlcyBtdXRlOiAlaVxuIiwgdjRsMl9jb250cm9sLnZhbHVlKTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6IHsKKwkJU0FZKCJFUlJPUjogdW5rbm93biBWNEwyIGNvbnRyb2w6IDB4JTA4WD1pZFxuIiwgXAorCQkJCQkJCXY0bDJfY29udHJvbC5pZCk7CisJCWV4cGxhaW5fY2lkKHY0bDJfY29udHJvbC5pZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl9CisJaWYgKDAgIT0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJnY0bDJfY29udHJvbCwgXAorCQkJCQlzaXplb2Yoc3RydWN0IHY0bDJfY29udHJvbCkpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlicmVhazsKK30KKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KKyNpZiBkZWZpbmVkKFZJRElPQ19TX0NUUkxfT0xEKQorY2FzZSBWSURJT0NfU19DVFJMX09MRDogeworCUpPVCg4LCAiVklESU9DX1NfQ1RSTF9PTEQgcmVxdWlyZWQgYXQgbGVhc3QgZm9yIHhhd3R2XG4iKTsKK30KKyNlbmRpZiAvKlZJRElPQ19TX0NUUkxfT0xEKi8KK2Nhc2UgVklESU9DX1NfQ1RSTDoKKwl7CisJc3RhdGljIHN0cnVjdCB2NGwyX2NvbnRyb2wgdjRsMl9jb250cm9sOworCisJSk9UKDgsICJWSURJT0NfU19DVFJMXG4iKTsKKworCWlmICgwICE9IGNvcHlfZnJvbV91c2VyKCZ2NGwyX2NvbnRyb2wsICh2b2lkIF9fdXNlciAqKWFyZywgXAorCQkJCQlzaXplb2Yoc3RydWN0IHY0bDJfY29udHJvbCkpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXN3aXRjaCAodjRsMl9jb250cm9sLmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOiB7CisJCUpPVCg4LCAidXNlciByZXF1ZXN0cyBicmlnaHRuZXNzICVpXG4iLCB2NGwyX2NvbnRyb2wudmFsdWUpOworCQlpZiAoMCAhPSBhZGp1c3RfYnJpZ2h0bmVzcyhwZWFzeWNhcCwgdjRsMl9jb250cm9sLnZhbHVlKSkKKwkJCTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6IHsKKwkJSk9UKDgsICJ1c2VyIHJlcXVlc3RzIGNvbnRyYXN0ICVpXG4iLCB2NGwyX2NvbnRyb2wudmFsdWUpOworCQlpZiAoMCAhPSBhZGp1c3RfY29udHJhc3QocGVhc3ljYXAsIHY0bDJfY29udHJvbC52YWx1ZSkpCisJCQk7CisJCWJyZWFrOworCX0KKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046IHsKKwkJSk9UKDgsICJ1c2VyIHJlcXVlc3RzIHNhdHVyYXRpb24gJWlcbiIsIHY0bDJfY29udHJvbC52YWx1ZSk7CisJCWlmICgwICE9IGFkanVzdF9zYXR1cmF0aW9uKHBlYXN5Y2FwLCB2NGwyX2NvbnRyb2wudmFsdWUpKQorCQkJOworCQlicmVhazsKKwl9CisJY2FzZSBWNEwyX0NJRF9IVUU6IHsKKwkJSk9UKDgsICJ1c2VyIHJlcXVlc3RzIGh1ZSAlaVxuIiwgdjRsMl9jb250cm9sLnZhbHVlKTsKKwkJaWYgKDAgIT0gYWRqdXN0X2h1ZShwZWFzeWNhcCwgdjRsMl9jb250cm9sLnZhbHVlKSkKKwkJCTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOiB7CisJCUpPVCg4LCAidXNlciByZXF1ZXN0cyB2b2x1bWUgJWlcbiIsIHY0bDJfY29udHJvbC52YWx1ZSk7CisJCWlmICgwICE9IGFkanVzdF92b2x1bWUocGVhc3ljYXAsIHY0bDJfY29udHJvbC52YWx1ZSkpCisJCQk7CisJCWJyZWFrOworCX0KKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6IHsKKwkJaW50IG11dGU7CisKKwkJSk9UKDgsICJ1c2VyIHJlcXVlc3RzIG11dGUgJWlcbiIsIHY0bDJfY29udHJvbC52YWx1ZSk7CisJCWlmICh0cnVlID09IHY0bDJfY29udHJvbC52YWx1ZSkKKwkJCW11dGUgPSAxOworCQllbHNlCisJCQltdXRlID0gMDsKKworCQlpZiAoMCAhPSBhZGp1c3RfbXV0ZShwZWFzeWNhcCwgbXV0ZSkpCisJCQlTQVkoIldBUk5JTkc6IGZhaWxlZCB0byBhZGp1c3QgbXV0ZSB0byAlaVxuIiwgbXV0ZSk7CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OiB7CisJCVNBWSgiRVJST1I6IHVua25vd24gVjRMMiBjb250cm9sOiAweCUwOFg9aWRcbiIsIFwKKwkJCQkJCQl2NGwyX2NvbnRyb2wuaWQpOworCQlleHBsYWluX2NpZCh2NGwyX2NvbnRyb2wuaWQpOworCXJldHVybiAtRUlOVkFMOworCQkJfQorCQl9CisJYnJlYWs7Cit9CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCitjYXNlIFZJRElPQ19TX0VYVF9DVFJMUzogeworCUpPVCg4LCAiVklESU9DX1NfRVhUX0NUUkxTIHVuc3VwcG9ydGVkXG4iKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK2Nhc2UgVklESU9DX0VOVU1fRk1UOiB7CisJc3RhdGljIF9fdTMyIGluZGV4OworCXN0YXRpYyBzdHJ1Y3QgdjRsMl9mbXRkZXNjIHY0bDJfZm10ZGVzYzsKKworCUpPVCg4LCAiVklESU9DX0VOVU1fRk1UXG4iKTsKKworCWlmICgwICE9IGNvcHlfZnJvbV91c2VyKCZ2NGwyX2ZtdGRlc2MsICh2b2lkIF9fdXNlciAqKWFyZywgXAorCQkJCQlzaXplb2Yoc3RydWN0IHY0bDJfZm10ZGVzYykpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWluZGV4ID0gdjRsMl9mbXRkZXNjLmluZGV4OworCW1lbXNldCgmdjRsMl9mbXRkZXNjLCAwLCBzaXplb2Yoc3RydWN0IHY0bDJfZm10ZGVzYykpOworCisJdjRsMl9mbXRkZXNjLmluZGV4ID0gaW5kZXg7CisJdjRsMl9mbXRkZXNjLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisKKwlzd2l0Y2ggKGluZGV4KSB7CisJY2FzZSAwOiB7CisJCXY0bDJfZm10ZGVzYy5mbGFncyA9IDA7CisJCXN0cmNweSgmdjRsMl9mbXRkZXNjLmRlc2NyaXB0aW9uWzBdLCAidXl2eSIpOworCQl2NGwyX2ZtdGRlc2MucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfVVlWWTsKKwkJSk9UKDgsICIlaT1pbmRleDogJXNcbiIsIGluZGV4LCAmdjRsMl9mbXRkZXNjLmRlc2NyaXB0aW9uWzBdKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgMTogeworCQl2NGwyX2ZtdGRlc2MuZmxhZ3MgPSAwOworCQlzdHJjcHkoJnY0bDJfZm10ZGVzYy5kZXNjcmlwdGlvblswXSwgInl1eTIiKTsKKwkJdjRsMl9mbXRkZXNjLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1lVWVY7CisJCUpPVCg4LCAiJWk9aW5kZXg6ICVzXG4iLCBpbmRleCwgJnY0bDJfZm10ZGVzYy5kZXNjcmlwdGlvblswXSk7CisJCWJyZWFrOworCX0KKwljYXNlIDI6IHsKKwkJdjRsMl9mbXRkZXNjLmZsYWdzID0gMDsKKwkJc3RyY3B5KCZ2NGwyX2ZtdGRlc2MuZGVzY3JpcHRpb25bMF0sICJyZ2IyNCIpOworCQl2NGwyX2ZtdGRlc2MucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfUkdCMjQ7CisJCUpPVCg4LCAiJWk9aW5kZXg6ICVzXG4iLCBpbmRleCwgJnY0bDJfZm10ZGVzYy5kZXNjcmlwdGlvblswXSk7CisJCWJyZWFrOworCX0KKwljYXNlIDM6IHsKKwkJdjRsMl9mbXRkZXNjLmZsYWdzID0gMDsKKwkJc3RyY3B5KCZ2NGwyX2ZtdGRlc2MuZGVzY3JpcHRpb25bMF0sICJyZ2IzMiIpOworCQl2NGwyX2ZtdGRlc2MucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfUkdCMzI7CisJCUpPVCg4LCAiJWk9aW5kZXg6ICVzXG4iLCBpbmRleCwgJnY0bDJfZm10ZGVzYy5kZXNjcmlwdGlvblswXSk7CisJCWJyZWFrOworCX0KKwljYXNlIDQ6IHsKKwkJdjRsMl9mbXRkZXNjLmZsYWdzID0gMDsKKwkJc3RyY3B5KCZ2NGwyX2ZtdGRlc2MuZGVzY3JpcHRpb25bMF0sICJiZ3IyNCIpOworCQl2NGwyX2ZtdGRlc2MucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfQkdSMjQ7CisJCUpPVCg4LCAiJWk9aW5kZXg6ICVzXG4iLCBpbmRleCwgJnY0bDJfZm10ZGVzYy5kZXNjcmlwdGlvblswXSk7CisJCWJyZWFrOworCX0KKwljYXNlIDU6IHsKKwkJdjRsMl9mbXRkZXNjLmZsYWdzID0gMDsKKwkJc3RyY3B5KCZ2NGwyX2ZtdGRlc2MuZGVzY3JpcHRpb25bMF0sICJiZ3IzMiIpOworCQl2NGwyX2ZtdGRlc2MucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfQkdSMzI7CisJCUpPVCg4LCAiJWk9aW5kZXg6ICVzXG4iLCBpbmRleCwgJnY0bDJfZm10ZGVzYy5kZXNjcmlwdGlvblswXSk7CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OiB7CisJCUpPVCg4LCAiJWk9aW5kZXg6IGV4aGF1c3RzIGZvcm1hdHNcbiIsIGluZGV4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCX0KKwlpZiAoMCAhPSBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmdjRsMl9mbXRkZXNjLCBcCisJCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9mbXRkZXNjKSkpIHsKKwkJUE9VVDsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWJyZWFrOworfQorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworY2FzZSBWSURJT0NfRU5VTV9GUkFNRVNJWkVTOiB7CisJSk9UKDgsICJWSURJT0NfRU5VTV9GUkFNRVNJWkVTIHVuc3VwcG9ydGVkXG4iKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KK2Nhc2UgVklESU9DX0VOVU1fRlJBTUVJTlRFUlZBTFM6IHsKKwlKT1QoOCwgIlZJRElPQ19FTlVNX0ZSQU1FX0lOVEVSVkFMUyB1bnN1cHBvcnRlZFxuIik7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCitjYXNlIFZJRElPQ19HX0ZNVDogeworCXN0YXRpYyBzdHJ1Y3QgdjRsMl9mb3JtYXQgdjRsMl9mb3JtYXQ7CisJc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdjRsMl9waXhfZm9ybWF0OworCisJSk9UKDgsICJWSURJT0NfR19GTVRcbiIpOworCisJaWYgKDAgIT0gY29weV9mcm9tX3VzZXIoJnY0bDJfZm9ybWF0LCAodm9pZCBfX3VzZXIgKilhcmcsIFwKKwkJCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX2Zvcm1hdCkpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWlmICh2NGwyX2Zvcm1hdC50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgeworCQlQT1VUOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltZW1zZXQoJnY0bDJfcGl4X2Zvcm1hdCwgMCwgc2l6ZW9mKHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQpKTsKKwl2NGwyX2Zvcm1hdC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCW1lbWNweSgmKHY0bDJfZm9ybWF0LmZtdC5waXgpLCBcCisJCQkgJihlYXN5Y2FwX2Zvcm1hdFtwZWFzeWNhcC0+Zm9ybWF0X29mZnNldF1cCisJCQkudjRsMl9mb3JtYXQuZm10LnBpeCksIHNpemVvZih2NGwyX3BpeF9mb3JtYXQpKTsKKwlKT1QoOCwgInVzZXIgaXMgdG9sZDogJXNcbiIsIFwKKwkJCSZlYXN5Y2FwX2Zvcm1hdFtwZWFzeWNhcC0+Zm9ybWF0X29mZnNldF0ubmFtZVswXSk7CisKKwlpZiAoMCAhPSBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmdjRsMl9mb3JtYXQsIFwKKwkJCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX2Zvcm1hdCkpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlicmVhazsKK30KKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK2Nhc2UgVklESU9DX1RSWV9GTVQ6CitjYXNlIFZJRElPQ19TX0ZNVDogeworCXN0YXRpYyBzdHJ1Y3QgdjRsMl9mb3JtYXQgdjRsMl9mb3JtYXQ7CisJc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdjRsMl9waXhfZm9ybWF0OworCXN0YXRpYyBib29sIHRyeTsKKwlzdGF0aWMgaW50IGJlc3RfZm9ybWF0OworCisJaWYgKFZJRElPQ19UUllfRk1UID09IGNtZCkgeworCQlKT1QoOCwgIlZJRElPQ19UUllfRk1UXG4iKTsKKwkJdHJ5ID0gdHJ1ZTsKKwl9IGVsc2UgeworCQlKT1QoOCwgIlZJRElPQ19TX0ZNVFxuIik7CisJCXRyeSA9IGZhbHNlOworCX0KKworCWlmICgwICE9IGNvcHlfZnJvbV91c2VyKCZ2NGwyX2Zvcm1hdCwgKHZvaWQgX191c2VyICopYXJnLCBcCisJCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9mb3JtYXQpKSkgeworCQlQT1VUOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwliZXN0X2Zvcm1hdCA9IGFkanVzdF9mb3JtYXQocGVhc3ljYXAsIFwKKwkJCQkJdjRsMl9mb3JtYXQuZm10LnBpeC53aWR0aCwgXAorCQkJCQl2NGwyX2Zvcm1hdC5mbXQucGl4LmhlaWdodCwgXAorCQkJCQl2NGwyX2Zvcm1hdC5mbXQucGl4LnBpeGVsZm9ybWF0LCBcCisJCQkJCXY0bDJfZm9ybWF0LmZtdC5waXguZmllbGQsIFwKKwkJCQkJdHJ5KTsKKwlpZiAoMCA+IGJlc3RfZm9ybWF0KSB7CisJCUpPVCg4LCAiV0FSTklORzogYWRqdXN0X2Zvcm1hdCgpIHJldHVybmVkICVpXG4iLCBiZXN0X2Zvcm1hdCk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKy8qLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uKi8KKwltZW1zZXQoJnY0bDJfcGl4X2Zvcm1hdCwgMCwgc2l6ZW9mKHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQpKTsKKwl2NGwyX2Zvcm1hdC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCisJbWVtY3B5KCYodjRsMl9mb3JtYXQuZm10LnBpeCksICYoZWFzeWNhcF9mb3JtYXRbYmVzdF9mb3JtYXRdXAorCQkJLnY0bDJfZm9ybWF0LmZtdC5waXgpLCBzaXplb2YodjRsMl9waXhfZm9ybWF0KSk7CisJSk9UKDgsICJ1c2VyIGlzIHRvbGQ6ICVzXG4iLCAmZWFzeWNhcF9mb3JtYXRbYmVzdF9mb3JtYXRdLm5hbWVbMF0pOworCisJaWYgKDAgIT0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJnY0bDJfZm9ybWF0LCBcCisJCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9mb3JtYXQpKSkgeworCQlQT1VUOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJYnJlYWs7Cit9CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCitjYXNlIFZJRElPQ19DUk9QQ0FQOiB7CisJc3RhdGljIHN0cnVjdCB2NGwyX2Nyb3BjYXAgdjRsMl9jcm9wY2FwOworCisJSk9UKDgsICJWSURJT0NfQ1JPUENBUFxuIik7CisKKwlpZiAoMCAhPSBjb3B5X2Zyb21fdXNlcigmdjRsMl9jcm9wY2FwLCAodm9pZCBfX3VzZXIgKilhcmcsIFwKKwkJCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX2Nyb3BjYXApKSkgeworCQlQT1VUOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlpZiAodjRsMl9jcm9wY2FwLnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlKT1QoOCwgInY0bDJfY3JvcGNhcC50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRVxuIik7CisKKwltZW1zZXQoJnY0bDJfY3JvcGNhcCwgMCwgc2l6ZW9mKHN0cnVjdCB2NGwyX2Nyb3BjYXApKTsKKwl2NGwyX2Nyb3BjYXAudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwl2NGwyX2Nyb3BjYXAuYm91bmRzLmxlZnQgICAgICA9IDA7CisJdjRsMl9jcm9wY2FwLmJvdW5kcy50b3AgICAgICAgPSAwOworCXY0bDJfY3JvcGNhcC5ib3VuZHMud2lkdGggICAgID0gcGVhc3ljYXAtPndpZHRoOworCXY0bDJfY3JvcGNhcC5ib3VuZHMuaGVpZ2h0ICAgID0gcGVhc3ljYXAtPmhlaWdodDsKKwl2NGwyX2Nyb3BjYXAuZGVmcmVjdC5sZWZ0ICAgICA9IDA7CisJdjRsMl9jcm9wY2FwLmRlZnJlY3QudG9wICAgICAgPSAwOworCXY0bDJfY3JvcGNhcC5kZWZyZWN0LndpZHRoICAgID0gcGVhc3ljYXAtPndpZHRoOworCXY0bDJfY3JvcGNhcC5kZWZyZWN0LmhlaWdodCAgID0gcGVhc3ljYXAtPmhlaWdodDsKKwl2NGwyX2Nyb3BjYXAucGl4ZWxhc3BlY3QubnVtZXJhdG9yID0gMTsKKwl2NGwyX2Nyb3BjYXAucGl4ZWxhc3BlY3QuZGVub21pbmF0b3IgPSAxOworCisJSk9UKDgsICJ1c2VyIGlzIHRvbGQ6ICVpeCVpXG4iLCBwZWFzeWNhcC0+d2lkdGgsIHBlYXN5Y2FwLT5oZWlnaHQpOworCisJaWYgKDAgIT0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJnY0bDJfY3JvcGNhcCwgXAorCQkJCQlzaXplb2Yoc3RydWN0IHY0bDJfY3JvcGNhcCkpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlicmVhazsKK30KKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK2Nhc2UgVklESU9DX0dfQ1JPUDoKK2Nhc2UgVklESU9DX1NfQ1JPUDogeworCUpPVCg4LCAiVklESU9DX0dfQ1JPUHxWSURJT0NfU19DUk9QICB1bnN1cHBvcnRlZFxuIik7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCitjYXNlIFZJRElPQ19RVUVSWVNURDogeworCUpPVCg4LCAiVklESU9DX1FVRVJZU1REOiAiIFwKKwkJCSJFYXN5Q0FQIGlzIGluY2FwYWJsZSBvZiBkZXRlY3Rpbmcgc3RhbmRhcmRcbiIpOworCXJldHVybiAtRUlOVkFMOworCWJyZWFrOworfQorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBUSEUgTUFOSVBVTEFUSU9OUyBJTlZPTFZJTkcgbGFzdDAsbGFzdDEsbGFzdDIsbGFzdDMgQ09OU1RJVFVURSBBIFdPUktBUk9VTkQKKyAqICBGT1IgV0hBVCBBUFBFQVJTIFRPIEJFIEEgQlVHIElOIDY0LUJJVCBtcGxheWVyLgorICogIE5PVCBORUVERUQsIEJVVCBIT1BFRlVMTFkgSEFSTUxFU1MsIEZPUiAzMi1CSVQgbXBsYXllci4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworY2FzZSBWSURJT0NfRU5VTVNURDogeworCXN0YXRpYyBpbnQgbGFzdDAgPSAtMSwgbGFzdDEgPSAtMSwgbGFzdDIgPSAtMSwgbGFzdDMgPSAtMTsKKwlzdGF0aWMgc3RydWN0IHY0bDJfc3RhbmRhcmQgdjRsMl9zdGFuZGFyZDsKKwlzdGF0aWMgX191MzIgaW5kZXg7CisJc3RhdGljIHN0cnVjdCBlYXN5Y2FwX3N0YW5kYXJkIGNvbnN0ICpwZWFzeWNhcF9zdGFuZGFyZDsKKworCUpPVCg4LCAiVklESU9DX0VOVU1TVERcbiIpOworCisJaWYgKDAgIT0gY29weV9mcm9tX3VzZXIoJnY0bDJfc3RhbmRhcmQsICh2b2lkIF9fdXNlciAqKWFyZywgXAorCQkJCQlzaXplb2Yoc3RydWN0IHY0bDJfc3RhbmRhcmQpKSkgeworCQlQT1VUOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaW5kZXggPSB2NGwyX3N0YW5kYXJkLmluZGV4OworCisJbGFzdDMgPSBsYXN0MjsgbGFzdDIgPSBsYXN0MTsgbGFzdDEgPSBsYXN0MDsgbGFzdDAgPSBpbmRleDsKKwlpZiAoKGluZGV4ID09IGxhc3QzKSAmJiAoaW5kZXggPT0gbGFzdDIpICYmIFwKKwkJCShpbmRleCA9PSBsYXN0MSkgJiYgKGluZGV4ID09IGxhc3QwKSkgeworCQlpbmRleCsrOworCQlsYXN0MyA9IGxhc3QyOyBsYXN0MiA9IGxhc3QxOyBsYXN0MSA9IGxhc3QwOyBsYXN0MCA9IGluZGV4OworCX0KKworCW1lbXNldCgmdjRsMl9zdGFuZGFyZCwgMCwgc2l6ZW9mKHN0cnVjdCB2NGwyX3N0YW5kYXJkKSk7CisKKwlwZWFzeWNhcF9zdGFuZGFyZCA9ICZlYXN5Y2FwX3N0YW5kYXJkWzBdOworCXdoaWxlICgweEZGRkYgIT0gcGVhc3ljYXBfc3RhbmRhcmQtPm1hc2spIHsKKwkJaWYgKChpbnQpKHBlYXN5Y2FwX3N0YW5kYXJkIC0gJmVhc3ljYXBfc3RhbmRhcmRbMF0pID09IGluZGV4KQorCQkJYnJlYWs7CisJCXBlYXN5Y2FwX3N0YW5kYXJkKys7CisJfQorCWlmICgweEZGRkYgPT0gcGVhc3ljYXBfc3RhbmRhcmQtPm1hc2spIHsKKwkJSk9UKDgsICIlaT1pbmRleDogZXhoYXVzdHMgc3RhbmRhcmRzXG4iLCBpbmRleCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlKT1QoOCwgIiVpPWluZGV4OiAlc1xuIiwgaW5kZXgsIFwKKwkJCQkmKHBlYXN5Y2FwX3N0YW5kYXJkLT52NGwyX3N0YW5kYXJkLm5hbWVbMF0pKTsKKwltZW1jcHkoJnY0bDJfc3RhbmRhcmQsICYocGVhc3ljYXBfc3RhbmRhcmQtPnY0bDJfc3RhbmRhcmQpLCBcCisJCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9zdGFuZGFyZCkpOworCisJdjRsMl9zdGFuZGFyZC5pbmRleCA9IGluZGV4OworCisJaWYgKDAgIT0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJnY0bDJfc3RhbmRhcmQsIFwKKwkJCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX3N0YW5kYXJkKSkpIHsKKwkJUE9VVDsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWJyZWFrOworfQorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworY2FzZSBWSURJT0NfR19TVEQ6IHsKKwlzdGF0aWMgdjRsMl9zdGRfaWQgc3RkX2lkOworCXN0YXRpYyBzdHJ1Y3QgZWFzeWNhcF9zdGFuZGFyZCBjb25zdCAqcGVhc3ljYXBfc3RhbmRhcmQ7CisKKwlKT1QoOCwgIlZJRElPQ19HX1NURFxuIik7CisKKwlpZiAoMCAhPSBjb3B5X2Zyb21fdXNlcigmc3RkX2lkLCAodm9pZCBfX3VzZXIgKilhcmcsIFwKKwkJCQkJCXNpemVvZih2NGwyX3N0ZF9pZCkpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXBlYXN5Y2FwX3N0YW5kYXJkID0gJmVhc3ljYXBfc3RhbmRhcmRbcGVhc3ljYXAtPnN0YW5kYXJkX29mZnNldF07CisJc3RkX2lkID0gcGVhc3ljYXBfc3RhbmRhcmQtPnY0bDJfc3RhbmRhcmQuaWQ7CisKKwlKT1QoOCwgInVzZXIgaXMgdG9sZDogJXNcbiIsIFwKKwkJCQkmcGVhc3ljYXBfc3RhbmRhcmQtPnY0bDJfc3RhbmRhcmQubmFtZVswXSk7CisKKwlpZiAoMCAhPSBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmc3RkX2lkLCBcCisJCQkJCQlzaXplb2YodjRsMl9zdGRfaWQpKSkgeworCQlQT1VUOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJYnJlYWs7Cit9CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCitjYXNlIFZJRElPQ19TX1NURDogeworCXN0YXRpYyB2NGwyX3N0ZF9pZCBzdGRfaWQ7CisJc3RhdGljIGludCByYzsKKworCUpPVCg4LCAiVklESU9DX1NfU1REXG4iKTsKKworCWlmICgwICE9IGNvcHlfZnJvbV91c2VyKCZzdGRfaWQsICh2b2lkIF9fdXNlciAqKWFyZywgXAorCQkJCQkJc2l6ZW9mKHY0bDJfc3RkX2lkKSkpIHsKKwkJUE9VVDsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmMgPSBhZGp1c3Rfc3RhbmRhcmQocGVhc3ljYXAsIHN0ZF9pZCk7CisJaWYgKDAgPiByYykgeworCQlKT1QoOCwgIldBUk5JTkc6IGFkanVzdF9zdGFuZGFyZCgpIHJldHVybmVkICVpXG4iLCByYyk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKwlicmVhazsKK30KKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK2Nhc2UgVklESU9DX1JFUUJVRlM6IHsKKwlzdGF0aWMgaW50IG5idWZmZXJzOworCXN0YXRpYyBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyB2NGwyX3JlcXVlc3RidWZmZXJzOworCisJSk9UKDgsICJWSURJT0NfUkVRQlVGU1xuIik7CisKKwlpZiAoMCAhPSBjb3B5X2Zyb21fdXNlcigmdjRsMl9yZXF1ZXN0YnVmZmVycywgKHZvaWQgX191c2VyICopYXJnLCBcCisJCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzKSkpIHsKKwkJUE9VVDsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJaWYgKHY0bDJfcmVxdWVzdGJ1ZmZlcnMudHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCWlmICh2NGwyX3JlcXVlc3RidWZmZXJzLm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwluYnVmZmVycyA9IHY0bDJfcmVxdWVzdGJ1ZmZlcnMuY291bnQ7CisJSk9UKDgsICIgICAgICAgICAgICAgICAgICAgVXNlciByZXF1ZXN0cyAlaSBidWZmZXJzIC4uLlxuIiwgbmJ1ZmZlcnMpOworCWlmIChuYnVmZmVycyA8IDIpCisJCW5idWZmZXJzID0gMjsKKwlpZiAobmJ1ZmZlcnMgPiBGUkFNRV9CVUZGRVJfTUFOWSkKKwkJbmJ1ZmZlcnMgPSBGUkFNRV9CVUZGRVJfTUFOWTsKKwlpZiAodjRsMl9yZXF1ZXN0YnVmZmVycy5jb3VudCA9PSBuYnVmZmVycykgeworCQlKT1QoOCwgIiAgICAgICAgICAgICAgICAgICAuLi4gYWdyZWUgdG8gICVpIGJ1ZmZlcnNcbiIsIFwKKwkJCQkJCQkJbmJ1ZmZlcnMpOworCX0gZWxzZSB7CisJCUpPVCg4LCAiICAgICAgICAgICAgICAgICAgLi4uIGluc2lzdCBvbiAgJWkgYnVmZmVyc1xuIiwgXAorCQkJCQkJCQluYnVmZmVycyk7CisJCXY0bDJfcmVxdWVzdGJ1ZmZlcnMuY291bnQgPSBuYnVmZmVyczsKKwl9CisJcGVhc3ljYXAtPmZyYW1lX2J1ZmZlcl9tYW55ID0gbmJ1ZmZlcnM7CisKKwlpZiAoMCAhPSBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmdjRsMl9yZXF1ZXN0YnVmZmVycywgXAorCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycykpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlicmVhazsKK30KKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK2Nhc2UgVklESU9DX1FVRVJZQlVGOiB7CisJc3RhdGljIF9fdTMyIGluZGV4OworCXN0YXRpYyBzdHJ1Y3QgdjRsMl9idWZmZXIgdjRsMl9idWZmZXI7CisKKwlKT1QoOCwgIlZJRElPQ19RVUVSWUJVRlxuIik7CisKKwlpZiAocGVhc3ljYXAtPnZpZGVvX2VvZikgeworCQlKT1QoOCwgInJldHVybmluZyAtMSBiZWNhdXNlICAlaT12aWRlb19lb2ZcbiIsIFwKKwkJCQkJCQlwZWFzeWNhcC0+dmlkZW9fZW9mKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICgwICE9IGNvcHlfZnJvbV91c2VyKCZ2NGwyX2J1ZmZlciwgKHZvaWQgX191c2VyICopYXJnLCBcCisJCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9idWZmZXIpKSkgeworCQlQT1VUOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlpZiAodjRsMl9idWZmZXIudHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCWluZGV4ID0gdjRsMl9idWZmZXIuaW5kZXg7CisJaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBwZWFzeWNhcC0+ZnJhbWVfYnVmZmVyX21hbnkpCisJCXJldHVybiAtRUlOVkFMOworCW1lbXNldCgmdjRsMl9idWZmZXIsIDAsIHNpemVvZihzdHJ1Y3QgdjRsMl9idWZmZXIpKTsKKwl2NGwyX2J1ZmZlci5pbmRleCA9IGluZGV4OworCXY0bDJfYnVmZmVyLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJdjRsMl9idWZmZXIuYnl0ZXN1c2VkID0gcGVhc3ljYXAtPmZyYW1lX2J1ZmZlcl91c2VkOworCXY0bDJfYnVmZmVyLmZsYWdzID0gVjRMMl9CVUZfRkxBR19NQVBQRUQgfCBcCisJCQkJCQlwZWFzeWNhcC0+ZG9uZVtpbmRleF0gfCBcCisJCQkJCQlwZWFzeWNhcC0+cXVldWVkW2luZGV4XTsKKwl2NGwyX2J1ZmZlci5maWVsZCA9IHBlYXN5Y2FwLT5maWVsZDsKKwl2NGwyX2J1ZmZlci5tZW1vcnkgPSBWNEwyX01FTU9SWV9NTUFQOworCXY0bDJfYnVmZmVyLm0ub2Zmc2V0ID0gaW5kZXggKiBGUkFNRV9CVUZGRVJfU0laRTsKKwl2NGwyX2J1ZmZlci5sZW5ndGggPSBGUkFNRV9CVUZGRVJfU0laRTsKKworCUpPVCgxNiwgIiAgJTEwaT1pbmRleFxuIiwgdjRsMl9idWZmZXIuaW5kZXgpOworCUpPVCgxNiwgIiAgMHglMDhYPXR5cGVcbiIsIHY0bDJfYnVmZmVyLnR5cGUpOworCUpPVCgxNiwgIiAgJTEwaT1ieXRlc3VzZWRcbiIsIHY0bDJfYnVmZmVyLmJ5dGVzdXNlZCk7CisJSk9UKDE2LCAiICAweCUwOFg9ZmxhZ3NcbiIsIHY0bDJfYnVmZmVyLmZsYWdzKTsKKwlKT1QoMTYsICIgICUxMGk9ZmllbGRcbiIsIHY0bDJfYnVmZmVyLmZpZWxkKTsKKwlKT1QoMTYsICIgICUxMGxpPXRpbWVzdGFtcC50dl91c2VjXG4iLCBcCisJCQkJCSAobG9uZyl2NGwyX2J1ZmZlci50aW1lc3RhbXAudHZfdXNlYyk7CisJSk9UKDE2LCAiICAlMTBpPXNlcXVlbmNlXG4iLCB2NGwyX2J1ZmZlci5zZXF1ZW5jZSk7CisJSk9UKDE2LCAiICAweCUwOFg9bWVtb3J5XG4iLCB2NGwyX2J1ZmZlci5tZW1vcnkpOworCUpPVCgxNiwgIiAgJTEwaT1tLm9mZnNldFxuIiwgdjRsMl9idWZmZXIubS5vZmZzZXQpOworCUpPVCgxNiwgIiAgJTEwaT1sZW5ndGhcbiIsIHY0bDJfYnVmZmVyLmxlbmd0aCk7CisKKwlpZiAoMCAhPSBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmdjRsMl9idWZmZXIsIFwKKwkJCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX2J1ZmZlcikpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlicmVhazsKK30KKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK2Nhc2UgVklESU9DX1FCVUY6IHsKKwlzdGF0aWMgc3RydWN0IHY0bDJfYnVmZmVyIHY0bDJfYnVmZmVyOworCisJSk9UKDgsICJWSURJT0NfUUJVRlxuIik7CisKKwlpZiAoMCAhPSBjb3B5X2Zyb21fdXNlcigmdjRsMl9idWZmZXIsICh2b2lkIF9fdXNlciAqKWFyZywgXAorCQkJCQlzaXplb2Yoc3RydWN0IHY0bDJfYnVmZmVyKSkpIHsKKwkJUE9VVDsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJaWYgKHY0bDJfYnVmZmVyLnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAodjRsMl9idWZmZXIubWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApCisJCXJldHVybiAtRUlOVkFMOworCWlmICh2NGwyX2J1ZmZlci5pbmRleCA8IDAgfHwgXAorCQkgKHY0bDJfYnVmZmVyLmluZGV4ID49IHBlYXN5Y2FwLT5mcmFtZV9idWZmZXJfbWFueSkpCisJCXJldHVybiAtRUlOVkFMOworCXY0bDJfYnVmZmVyLmZsYWdzID0gVjRMMl9CVUZfRkxBR19NQVBQRUQgfCBWNEwyX0JVRl9GTEFHX1FVRVVFRDsKKworCXBlYXN5Y2FwLT5kb25lW3Y0bDJfYnVmZmVyLmluZGV4XSAgID0gMDsKKwlwZWFzeWNhcC0+cXVldWVkW3Y0bDJfYnVmZmVyLmluZGV4XSA9IFY0TDJfQlVGX0ZMQUdfUVVFVUVEOworCisJaWYgKDAgIT0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJnY0bDJfYnVmZmVyLCBcCisJCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9idWZmZXIpKSkgeworCQlQT1VUOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlKT1QoOCwgIi4uLi4uICAgdXNlciBxdWV1ZWluZyBmcmFtZSBidWZmZXIgJWlcbiIsIFwKKwkJCQkJCShpbnQpdjRsMl9idWZmZXIuaW5kZXgpOworCisJcGVhc3ljYXAtPmZyYW1lX2xvY2sgPSAwOworCisJYnJlYWs7Cit9CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCitjYXNlIFZJRElPQ19EUUJVRjoKKwl7CisjaWYgZGVmaW5lZChBVURJT1RJTUUpCisJc3RhdGljIHN0cnVjdCBzaWduZWRfZGl2X3Jlc3VsdCBzZHI7CisJc3RhdGljIGxvbmcgbG9uZyBpbnQgYWJvdmUsIGJlbG93LCBkbmJ5ZHQsIGZ1ZGdlLCBzbGw7CisJc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWxsOworCXN0YXRpYyBzdHJ1Y3QgdGltZXZhbCB0aW1ldmFsMDsKKwlzdHJ1Y3QgdGltZXZhbCB0aW1ldmFsMTsKKyNlbmRpZiAvKkFVRElPVElNRSovCisJc3RhdGljIHN0cnVjdCB0aW1ldmFsIHRpbWV2YWwsIHRpbWV2YWwyOworCXN0YXRpYyBpbnQgaSwgajsKKwlzdGF0aWMgc3RydWN0IHY0bDJfYnVmZmVyIHY0bDJfYnVmZmVyOworCisJSk9UKDgsICJWSURJT0NfRFFCVUZcbiIpOworCisJaWYgKChwZWFzeWNhcC0+dmlkZW9faWRsZSkgfHwgKHBlYXN5Y2FwLT52aWRlb19lb2YpKSB7CisJCUpPVCg4LCAicmV0dXJuaW5nIC1FSU8gYmVjYXVzZSAgIiBcCisJCQkJIiVpPXZpZGVvX2lkbGUgICVpPXZpZGVvX2VvZlxuIiwgXAorCQkJCXBlYXN5Y2FwLT52aWRlb19pZGxlLCBwZWFzeWNhcC0+dmlkZW9fZW9mKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKDAgIT0gY29weV9mcm9tX3VzZXIoJnY0bDJfYnVmZmVyLCAodm9pZCBfX3VzZXIgKilhcmcsIFwKKwkJCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX2J1ZmZlcikpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWlmICh2NGwyX2J1ZmZlci50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXBlYXN5Y2FwLT52aWRlb19pc29jX3N0cmVhbWluZykgeworCQlKT1QoMTYsICJyZXR1cm5pbmcgLUVJTyBiZWNhdXNlIHZpZGVvIHVyYnMgbm90IHN0cmVhbWluZ1xuIik7CisJCXJldHVybiAtRUlPOworCX0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgSUYgVEhFIFVTRVIgSEFTIFBSRVZJT1VTTFkgQ0FMTEVEIGVhc3ljYXBfcG9sbCgpLCBBUyBERVRFUk1JTkVEIEJZIEZJTkRJTkcKKyAqICBUSEUgRkxBRyBwZWFzeWNhcC0+cG9sbGVkIFNFVCwgVEhFUkUgTVVTVCBCRSBOTyBGVVJUSEVSIFdBSVQgSEVSRS4gIElOIFRISVMKKyAqICBDQVNFLCBKVVNUIENIT09TRSBUSEUgRlJBTUUgSU5ESUNBVEVEIEJZIHBlYXN5Y2FwLT5mcmFtZV9yZWFkCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCWlmICghcGVhc3ljYXAtPnBvbGxlZCkgeworCQlpZiAoLUVJTyA9PSBlYXN5Y2FwX2RxYnVmKHBlYXN5Y2FwLCAwKSkKKwkJCXJldHVybiAtRUlPOworCX0gZWxzZSB7CisJCWlmIChwZWFzeWNhcC0+dmlkZW9fZW9mKQorCQkJcmV0dXJuIC1FSU87CisJfQorCWlmIChWNEwyX0JVRl9GTEFHX0RPTkUgIT0gcGVhc3ljYXAtPmRvbmVbcGVhc3ljYXAtPmZyYW1lX3JlYWRdKSB7CisJCVNBWSgiRVJST1I6IFY0TDJfQlVGX0ZMQUdfRE9ORSAhPSAweCUwOFhcbiIsIFwKKwkJCQkJcGVhc3ljYXAtPmRvbmVbcGVhc3ljYXAtPmZyYW1lX3JlYWRdKTsKKwl9CisJcGVhc3ljYXAtPnBvbGxlZCA9IDA7CisKKwlpZiAoIShpc2VxdWVuY2UgJSAxMCkpIHsKKwkJZm9yIChpID0gMDsgaSA8IDE3OTsgaSsrKQorCQkJcGVhc3ljYXAtPm1lcml0W2ldID0gcGVhc3ljYXAtPm1lcml0W2krMV07CisJCXBlYXN5Y2FwLT5tZXJpdFsxNzldID0gbWVyaXRfc2FhKHBlYXN5Y2FwLT5wdXNiX2RldmljZSk7CisJCWogPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgMTgwOyBpKyspCisJCQlqICs9IHBlYXN5Y2FwLT5tZXJpdFtpXTsKKwkJaWYgKDkwIDwgaikgeworCQkJU0FZKCJlYXN5Y2FwIGRyaXZlciBzaHV0dGluZyBkb3duICIgXAorCQkJCQkJCSJvbiBjb25kaXRpb24gYmx1ZVxuIik7CisJCQlwZWFzeWNhcC0+dmlkZW9fZW9mID0gMTsgcGVhc3ljYXAtPmF1ZGlvX2VvZiA9IDE7CisJCX0KKwl9CisKKwl2NGwyX2J1ZmZlci5pbmRleCA9IHBlYXN5Y2FwLT5mcmFtZV9yZWFkOworCXY0bDJfYnVmZmVyLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJdjRsMl9idWZmZXIuYnl0ZXN1c2VkID0gcGVhc3ljYXAtPmZyYW1lX2J1ZmZlcl91c2VkOworCXY0bDJfYnVmZmVyLmZsYWdzID0gVjRMMl9CVUZfRkxBR19NQVBQRUQgfCBWNEwyX0JVRl9GTEFHX0RPTkU7CisJdjRsMl9idWZmZXIuZmllbGQgPSAgcGVhc3ljYXAtPmZpZWxkOworCWlmIChWNEwyX0ZJRUxEX0FMVEVSTkFURSA9PSB2NGwyX2J1ZmZlci5maWVsZCkKKwkJdjRsMl9idWZmZXIuZmllbGQgPSBcCisJCQkJMHgwMDBGICYgKHBlYXN5Y2FwLT5cCisJCQkJZnJhbWVfYnVmZmVyW3BlYXN5Y2FwLT5mcmFtZV9yZWFkXVswXS5rb3VudCk7CisJZG9fZ2V0dGltZW9mZGF5KCZ0aW1ldmFsKTsKKwl0aW1ldmFsMiA9IHRpbWV2YWw7CisKKyNpZiBkZWZpbmVkKEFVRElPVElNRSkKKwlpZiAoIXBlYXN5Y2FwLT50aW1ldmFsMC50dl9zZWMpIHsKKwkJdGltZXZhbDAgPSB0aW1ldmFsOworCQl0aW1ldmFsMSA9IHRpbWV2YWw7CisJCXRpbWV2YWwyID0gdGltZXZhbDsKKwkJZG5ieWR0ID0gMTkyMDAwOworCisJCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJihwZWFzeWNhcC0+bXV0ZXhfdGltZXZhbDApKSkKKwkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCXBlYXN5Y2FwLT50aW1ldmFsMCA9IHRpbWV2YWwwOworCQltdXRleF91bmxvY2soJihwZWFzeWNhcC0+bXV0ZXhfdGltZXZhbDApKTsKKwl9IGVsc2UgeworCQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCYocGVhc3ljYXAtPm11dGV4X3RpbWV2YWwxKSkpCisJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCQlkbmJ5ZHQgPSBwZWFzeWNhcC0+ZG5ieWR0OworCQl0aW1ldmFsMSA9IHBlYXN5Y2FwLT50aW1ldmFsMTsKKwkJbXV0ZXhfdW5sb2NrKCYocGVhc3ljYXAtPm11dGV4X3RpbWV2YWwxKSk7CisJCWFib3ZlID0gZG5ieWR0ICogTUlDUk9TRUNPTkRTKHRpbWV2YWwsIHRpbWV2YWwxKTsKKwkJYmVsb3cgPSAxOTIwMDA7CisJCXNkciA9IHNpZ25lZF9kaXYoYWJvdmUsIGJlbG93KTsKKworCQlhYm92ZSA9IHNkci5xdW90aWVudCArIHRpbWV2YWwxLnR2X3VzZWMgLSAzNTAwMDA7CisKKwkJYmVsb3cgPSAxMDAwMDAwOworCQlzZHIgPSBzaWduZWRfZGl2KGFib3ZlLCBiZWxvdyk7CisJCXRpbWV2YWwyLnR2X3VzZWMgPSBzZHIucmVtYWluZGVyOworCQl0aW1ldmFsMi50dl9zZWMgPSB0aW1ldmFsMS50dl9zZWMgKyBzZHIucXVvdGllbnQ7CisJfQorCWlmICghKGlzZXF1ZW5jZSAlIDUwMCkpIHsKKwkJZnVkZ2UgPSAoKGxvbmcgbG9uZyBpbnQpKDEwMDAwMDApKSAqIFwKKwkJCQkoKGxvbmcgbG9uZyBpbnQpKHRpbWV2YWwudHZfc2VjIC0gXAorCQkJCQkJdGltZXZhbDIudHZfc2VjKSkgKyBcCisJCQkJKGxvbmcgbG9uZyBpbnQpKHRpbWV2YWwudHZfdXNlYyAtIFwKKwkJCQl0aW1ldmFsMi50dl91c2VjKTsKKwkJc2RyID0gc2lnbmVkX2RpdihmdWRnZSwgMTAwMCk7CisJCXNsbCA9IHNkci5xdW90aWVudDsKKwkJdWxsID0gc2RyLnJlbWFpbmRlcjsKKworCQlTQVkoIiU1bGxpLiUtM2xsaT1tcyB0aW1lc3RhbXAgZnVkZ2VcbiIsIHNsbCwgdWxsKTsKKwl9CisjZW5kaWYgLypBVURJT1RJTUUqLworCisJdjRsMl9idWZmZXIudGltZXN0YW1wID0gdGltZXZhbDI7CisJdjRsMl9idWZmZXIuc2VxdWVuY2UgPSBpc2VxdWVuY2UrKzsKKwl2NGwyX2J1ZmZlci5tZW1vcnkgPSBWNEwyX01FTU9SWV9NTUFQOworCXY0bDJfYnVmZmVyLm0ub2Zmc2V0ID0gdjRsMl9idWZmZXIuaW5kZXggKiBGUkFNRV9CVUZGRVJfU0laRTsKKwl2NGwyX2J1ZmZlci5sZW5ndGggPSBGUkFNRV9CVUZGRVJfU0laRTsKKworCUpPVCgxNiwgIiAgJTEwaT1pbmRleFxuIiwgdjRsMl9idWZmZXIuaW5kZXgpOworCUpPVCgxNiwgIiAgMHglMDhYPXR5cGVcbiIsIHY0bDJfYnVmZmVyLnR5cGUpOworCUpPVCgxNiwgIiAgJTEwaT1ieXRlc3VzZWRcbiIsIHY0bDJfYnVmZmVyLmJ5dGVzdXNlZCk7CisJSk9UKDE2LCAiICAweCUwOFg9ZmxhZ3NcbiIsIHY0bDJfYnVmZmVyLmZsYWdzKTsKKwlKT1QoMTYsICIgICUxMGk9ZmllbGRcbiIsIHY0bDJfYnVmZmVyLmZpZWxkKTsKKwlKT1QoMTYsICIgICUxMGxpPXRpbWVzdGFtcC50dl91c2VjXG4iLCBcCisJCQkJCShsb25nKXY0bDJfYnVmZmVyLnRpbWVzdGFtcC50dl91c2VjKTsKKwlKT1QoMTYsICIgICUxMGk9c2VxdWVuY2VcbiIsIHY0bDJfYnVmZmVyLnNlcXVlbmNlKTsKKwlKT1QoMTYsICIgIDB4JTA4WD1tZW1vcnlcbiIsIHY0bDJfYnVmZmVyLm1lbW9yeSk7CisJSk9UKDE2LCAiICAlMTBpPW0ub2Zmc2V0XG4iLCB2NGwyX2J1ZmZlci5tLm9mZnNldCk7CisJSk9UKDE2LCAiICAlMTBpPWxlbmd0aFxuIiwgdjRsMl9idWZmZXIubGVuZ3RoKTsKKworCWlmICgwICE9IGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZ2NGwyX2J1ZmZlciwgXAorCQkJCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX2J1ZmZlcikpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCUpPVCg4LCAiLi4uLi4gdXNlciBpcyBvZmZlcmVkIGZyYW1lIGJ1ZmZlciAlaVxuIiwgXAorCQkJCQkJCXBlYXN5Y2FwLT5mcmFtZV9yZWFkKTsKKwlwZWFzeWNhcC0+ZnJhbWVfbG9jayA9IDE7CisJaWYgKHBlYXN5Y2FwLT5mcmFtZV9yZWFkID09IHBlYXN5Y2FwLT5mcmFtZV9maWxsKSB7CisJCWlmIChwZWFzeWNhcC0+ZnJhbWVfbG9jaykgeworCQkJSk9UKDgsICJFUlJPUjogIGZpbGxpbmcgZnJhbWUgYnVmZmVyICIgXAorCQkJCQkJIndoaWxlIG9mZmVyZWQgdG8gdXNlclxuIik7CisJCX0KKwl9CisJYnJlYWs7Cit9CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIEFVRElPIFVSQlMgSEFWRSBBTFJFQURZIEJFRU4gU1VCTUlUVEVEIFdIRU4gVEhJUyBDT01NQU5EIElTIFJFQ0VJVkVEOworICogIFZJREVPIFVSQlMgSEFWRSBOT1QuCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2Nhc2UgVklESU9DX1NUUkVBTU9OOiB7CisJc3RhdGljIGludCBpOworCisJSk9UKDgsICJWSURJT0NfU1RSRUFNT05cbiIpOworCisJaXNlcXVlbmNlID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMTgwOyBpKyspCisJCXBlYXN5Y2FwLT5tZXJpdFtpXSA9IDA7CisJaWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgPT0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlKSB7CisJCVNBWSgiRVJST1I6IHBlYXN5Y2FwLT5wdXNiX2RldmljZSBpcyBOVUxMXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCXN1Ym1pdF92aWRlb191cmJzKHBlYXN5Y2FwKTsKKwlwZWFzeWNhcC0+dmlkZW9faWRsZSA9IDA7CisJcGVhc3ljYXAtPmF1ZGlvX2lkbGUgPSAwOworCXBlYXN5Y2FwLT52aWRlb19lb2YgPSAwOworCXBlYXN5Y2FwLT5hdWRpb19lb2YgPSAwOworCWJyZWFrOworfQorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworY2FzZSBWSURJT0NfU1RSRUFNT0ZGOiB7CisJSk9UKDgsICJWSURJT0NfU1RSRUFNT0ZGXG4iKTsKKworCWlmICgoc3RydWN0IHVzYl9kZXZpY2UgKilOVUxMID09IHBlYXN5Y2FwLT5wdXNiX2RldmljZSkgeworCQlTQVkoIkVSUk9SOiBwZWFzeWNhcC0+cHVzYl9kZXZpY2UgaXMgTlVMTFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXBlYXN5Y2FwLT52aWRlb19pZGxlID0gMTsKKwlwZWFzeWNhcC0+YXVkaW9faWRsZSA9IDE7ICBwZWFzeWNhcC0+dGltZXZhbDAudHZfc2VjID0gMDsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgSUYgVEhFIFdBSVQgUVVFVUVTIEFSRSBOT1QgQ0xFQVJFRCBJTiBSRVNQT05TRSBUTyBUSEUgU1RSRUFNT0ZGIENPTU1BTkQKKyAqICBUSEUgVVNFUlNQQUNFIFBST0dSQU0sIEUuRy4gbXBsYXllciwgTUFZIEhBTkcgT04gRVhJVC4gICBCRVdBUkUuCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlKT1QoOCwgImNhbGxpbmcgd2FrZV91cCBvbiB3cV92aWRlbyBhbmQgd3FfYXVkaW9cbiIpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmKHBlYXN5Y2FwLT53cV92aWRlbykpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmKHBlYXN5Y2FwLT53cV9hdWRpbykpOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCWJyZWFrOworfQorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworY2FzZSBWSURJT0NfR19QQVJNOiB7CisJc3RhdGljIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gdjRsMl9zdHJlYW1wYXJtOworCisJSk9UKDgsICJWSURJT0NfR19QQVJNXG4iKTsKKworCWlmICgwICE9IGNvcHlfZnJvbV91c2VyKCZ2NGwyX3N0cmVhbXBhcm0sICh2b2lkIF9fdXNlciAqKWFyZywgXAorCQkJCQlzaXplb2Yoc3RydWN0IHY0bDJfc3RyZWFtcGFybSkpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWlmICh2NGwyX3N0cmVhbXBhcm0udHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJUE9VVDsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXY0bDJfc3RyZWFtcGFybS5wYXJtLmNhcHR1cmUuY2FwYWJpbGl0eSA9IDA7CisJdjRsMl9zdHJlYW1wYXJtLnBhcm0uY2FwdHVyZS5jYXB0dXJlbW9kZSA9IDA7CisJdjRsMl9zdHJlYW1wYXJtLnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUubnVtZXJhdG9yID0gMTsKKwl2NGwyX3N0cmVhbXBhcm0ucGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZS5kZW5vbWluYXRvciA9IDMwOworCXY0bDJfc3RyZWFtcGFybS5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnMgPSBwZWFzeWNhcC0+ZnJhbWVfYnVmZmVyX21hbnk7CisJdjRsMl9zdHJlYW1wYXJtLnBhcm0uY2FwdHVyZS5leHRlbmRlZG1vZGUgPSAwOworCWlmICgwICE9IGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZ2NGwyX3N0cmVhbXBhcm0sIFwKKwkJCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0pKSkgeworCQlQT1VUOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJYnJlYWs7Cit9CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCitjYXNlIFZJRElPQ19TX1BBUk06IHsKKwlKT1QoOCwgIlZJRElPQ19TX1BBUk0gdW5zdXBwb3J0ZWRcbiIpOworCXJldHVybiAtRUlOVkFMOworfQorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworY2FzZSBWSURJT0NfR19BVURJTzogeworCUpPVCg4LCAiVklESU9DX0dfQVVESU8gdW5zdXBwb3J0ZWRcbiIpOworCXJldHVybiAtRUlOVkFMOworfQorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworY2FzZSBWSURJT0NfU19BVURJTzogeworCUpPVCg4LCAiVklESU9DX1NfQVVESU8gdW5zdXBwb3J0ZWRcbiIpOworCXJldHVybiAtRUlOVkFMOworfQorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworY2FzZSBWSURJT0NfU19UVU5FUjogeworCUpPVCg4LCAiVklESU9DX1NfVFVORVIgdW5zdXBwb3J0ZWRcbiIpOworCXJldHVybiAtRUlOVkFMOworfQorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworY2FzZSBWSURJT0NfR19GQlVGOgorY2FzZSBWSURJT0NfU19GQlVGOgorY2FzZSBWSURJT0NfT1ZFUkxBWTogeworCUpPVCg4LCAiVklESU9DX0dfRkJVRnxWSURJT0NfU19GQlVGfFZJRElPQ19PVkVSTEFZIHVuc3VwcG9ydGVkXG4iKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK2Nhc2UgVklESU9DX0dfVFVORVI6IHsKKwlKT1QoOCwgIlZJRElPQ19HX1RVTkVSIHVuc3VwcG9ydGVkXG4iKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KK2Nhc2UgVklESU9DX0dfRlJFUVVFTkNZOgorY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6IHsKKwlKT1QoOCwgIlZJRElPQ19HX0ZSRVFVRU5DWXxWSURJT0NfU19GUkVRVUVOQ1kgdW5zdXBwb3J0ZWRcbiIpOworCXJldHVybiAtRUlOVkFMOworfQorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworZGVmYXVsdDogeworCUpPVCg4LCAiRVJST1I6IHVucmVjb2duaXplZCBWNEwyIElPQ1RMIGNvbW1hbmQ6IDB4JTA4WFxuIiwgY21kKTsKKwlleHBsYWluX2lvY3RsKGNtZCk7CisJUE9VVDsKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorfQorcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnYqLworI2lmIGRlZmluZWQoRUFTWUNBUF9JU19WSURFT0RFVl9DTElFTlQpCitsb25nCitlYXN5c25kX2lvY3RsX25vaW5vZGUoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXJldHVybiBlYXN5c25kX2lvY3RsKChzdHJ1Y3QgaW5vZGUgKilOVUxMLCBmaWxlLCBjbWQsIGFyZyk7Cit9CisjZW5kaWYgLypFQVNZQ0FQX0lTX1ZJREVPREVWX0NMSUVOVCovCisvKl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGVhc3lzbmRfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIFwKKwkJCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CitzdHJ1Y3QgZWFzeWNhcCAqcGVhc3ljYXA7CitzdHJ1Y3QgdXNiX2RldmljZSAqcDsKKworcGVhc3ljYXAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CitpZiAoTlVMTCA9PSBwZWFzeWNhcCkgeworCVNBWSgiRVJST1I6ICBwZWFzeWNhcCBpcyBOVUxMLlxuIik7CisJcmV0dXJuIC0xOworfQorcCA9IHBlYXN5Y2FwLT5wdXNiX2RldmljZTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N3aXRjaCAoY21kKSB7CitjYXNlIFNORENUTF9EU1BfR0VUQ0FQUzogeworCWludCBjYXBzOworCUpPVCg4LCAiU05EQ1RMX0RTUF9HRVRDQVBTXG4iKTsKKworI2lmIGRlZmluZWQoVVBTQU1QTEUpCisJaWYgKHRydWUgPT0gcGVhc3ljYXAtPm1pY3JvcGhvbmUpCisJCWNhcHMgPSAweDA0NDAwMDAwOworCWVsc2UKKwkJY2FwcyA9IDB4MDQ0MDAwMDA7CisjZWxzZQorCWlmICh0cnVlID09IHBlYXN5Y2FwLT5taWNyb3Bob25lKQorCQljYXBzID0gMHgwMjQwMDAwMDsKKwllbHNlCisJCWNhcHMgPSAweDA0NDAwMDAwOworI2VuZGlmIC8qVVBTQU1QTEUqLworCisJaWYgKDAgIT0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmNhcHMsIHNpemVvZihpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnJlYWs7Cit9CitjYXNlIFNORENUTF9EU1BfR0VURk1UUzogeworCWludCBpbmNvbWluZzsKKwlKT1QoOCwgIlNORENUTF9EU1BfR0VURk1UU1xuIik7CisKKyNpZiBkZWZpbmVkKFVQU0FNUExFKQorCWlmICh0cnVlID09IHBlYXN5Y2FwLT5taWNyb3Bob25lKQorCQlpbmNvbWluZyA9IEFGTVRfUzE2X0xFOworCWVsc2UKKwkJaW5jb21pbmcgPSBBRk1UX1MxNl9MRTsKKyNlbHNlCisJaWYgKHRydWUgPT0gcGVhc3ljYXAtPm1pY3JvcGhvbmUpCisJCWluY29taW5nID0gQUZNVF9TMTZfTEU7CisJZWxzZQorCQlpbmNvbWluZyA9IEFGTVRfUzE2X0xFOworI2VuZGlmIC8qVVBTQU1QTEUqLworCisJaWYgKDAgIT0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmluY29taW5nLCBzaXplb2YoaW50KSkpCisJCXJldHVybiAtRUZBVUxUOworCWJyZWFrOworfQorY2FzZSBTTkRDVExfRFNQX1NFVEZNVDogeworCWludCBpbmNvbWluZywgb3V0Z29pbmc7CisJSk9UKDgsICJTTkRDVExfRFNQX1NFVEZNVFxuIik7CisJaWYgKDAgIT0gY29weV9mcm9tX3VzZXIoJmluY29taW5nLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJSk9UKDgsICIuLi4uLi4uLi4uLiAlaT1pbmNvbWluZ1xuIiwgaW5jb21pbmcpOworCisjaWYgZGVmaW5lZChVUFNBTVBMRSkKKwlpZiAodHJ1ZSA9PSBwZWFzeWNhcC0+bWljcm9waG9uZSkKKwkJb3V0Z29pbmcgPSBBRk1UX1MxNl9MRTsKKwllbHNlCisJCW91dGdvaW5nID0gQUZNVF9TMTZfTEU7CisjZWxzZQorCWlmICh0cnVlID09IHBlYXN5Y2FwLT5taWNyb3Bob25lKQorCQlvdXRnb2luZyA9IEFGTVRfUzE2X0xFOworCWVsc2UKKwkJb3V0Z29pbmcgPSBBRk1UX1MxNl9MRTsKKyNlbmRpZiAvKlVQU0FNUExFKi8KKworCWlmIChpbmNvbWluZyAhPSBvdXRnb2luZykgeworCQlKT1QoOCwgIi4uLi4uLi4uLi4uICVpPW91dGdvaW5nXG4iLCBvdXRnb2luZyk7CisJCUpPVCg4LCAiICAgICAgICBjZi4gJWk9QUZNVF9TMTZfTEVcbiIsIEFGTVRfUzE2X0xFKTsKKwkJSk9UKDgsICIgICAgICAgIGNmLiAlaT1BRk1UX1U4XG4iLCBBRk1UX1U4KTsKKwkJaWYgKDAgIT0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJm91dGdvaW5nLCBcCisJCQkJCQkJCXNpemVvZihpbnQpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gLUVJTlZBTCA7CisJfQorCWJyZWFrOworfQorY2FzZSBTTkRDVExfRFNQX1NURVJFTzogeworCWludCBpbmNvbWluZzsKKwlKT1QoOCwgIlNORENUTF9EU1BfU1RFUkVPXG4iKTsKKwlpZiAoMCAhPSBjb3B5X2Zyb21fdXNlcigmaW5jb21pbmcsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlKT1QoOCwgIi4uLi4uLi4uLi4uICVpPWluY29taW5nXG4iLCBpbmNvbWluZyk7CisKKyNpZiBkZWZpbmVkKFVQU0FNUExFKQorCWlmICh0cnVlID09IHBlYXN5Y2FwLT5taWNyb3Bob25lKQorCQlpbmNvbWluZyA9IDE7CisJZWxzZQorCQlpbmNvbWluZyA9IDE7CisjZWxzZQorCWlmICh0cnVlID09IHBlYXN5Y2FwLT5taWNyb3Bob25lKQorCQlpbmNvbWluZyA9IDA7CisJZWxzZQorCQlpbmNvbWluZyA9IDE7CisjZW5kaWYgLypVUFNBTVBMRSovCisKKwlpZiAoMCAhPSBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmaW5jb21pbmcsIHNpemVvZihpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnJlYWs7Cit9CitjYXNlIFNORENUTF9EU1BfU1BFRUQ6IHsKKwlpbnQgaW5jb21pbmc7CisJSk9UKDgsICJTTkRDVExfRFNQX1NQRUVEXG4iKTsKKwlpZiAoMCAhPSBjb3B5X2Zyb21fdXNlcigmaW5jb21pbmcsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlKT1QoOCwgIi4uLi4uLi4uLi4uICVpPWluY29taW5nXG4iLCBpbmNvbWluZyk7CisKKyNpZiBkZWZpbmVkKFVQU0FNUExFKQorCWlmICh0cnVlID09IHBlYXN5Y2FwLT5taWNyb3Bob25lKQorCQlpbmNvbWluZyA9IDMyMDAwOworCWVsc2UKKwkJaW5jb21pbmcgPSA0ODAwMDsKKyNlbHNlCisJaWYgKHRydWUgPT0gcGVhc3ljYXAtPm1pY3JvcGhvbmUpCisJCWluY29taW5nID0gODAwMDsKKwllbHNlCisJCWluY29taW5nID0gNDgwMDA7CisjZW5kaWYgLypVUFNBTVBMRSovCisKKwlpZiAoMCAhPSBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmaW5jb21pbmcsIHNpemVvZihpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnJlYWs7Cit9CitjYXNlIFNORENUTF9EU1BfR0VUVFJJR0dFUjogeworCWludCBpbmNvbWluZzsKKwlKT1QoOCwgIlNORENUTF9EU1BfR0VUVFJJR0dFUlxuIik7CisJaWYgKDAgIT0gY29weV9mcm9tX3VzZXIoJmluY29taW5nLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJSk9UKDgsICIuLi4uLi4uLi4uLiAlaT1pbmNvbWluZ1xuIiwgaW5jb21pbmcpOworCisJaW5jb21pbmcgPSBQQ01fRU5BQkxFX0lOUFVUOworCWlmICgwICE9IGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZpbmNvbWluZywgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlicmVhazsKK30KK2Nhc2UgU05EQ1RMX0RTUF9TRVRUUklHR0VSOiB7CisJaW50IGluY29taW5nOworCUpPVCg4LCAiU05EQ1RMX0RTUF9TRVRUUklHR0VSXG4iKTsKKwlpZiAoMCAhPSBjb3B5X2Zyb21fdXNlcigmaW5jb21pbmcsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlKT1QoOCwgIi4uLi4uLi4uLi4uICVpPWluY29taW5nXG4iLCBpbmNvbWluZyk7CisJSk9UKDgsICIuLi4uLi4uLi4uLiBjZiAweCV4PVBDTV9FTkFCTEVfSU5QVVQgIiBcCisJCQkJIjB4JXg9UENNX0VOQUJMRV9PVVRQVVRcbiIsIFwKKwkJCQkJUENNX0VOQUJMRV9JTlBVVCwgUENNX0VOQUJMRV9PVVRQVVQpOworCTsKKwk7CisJOworCTsKKwlicmVhazsKK30KK2Nhc2UgU05EQ1RMX0RTUF9HRVRCTEtTSVpFOiB7CisJaW50IGluY29taW5nOworCUpPVCg4LCAiU05EQ1RMX0RTUF9HRVRCTEtTSVpFXG4iKTsKKwlpZiAoMCAhPSBjb3B5X2Zyb21fdXNlcigmaW5jb21pbmcsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlKT1QoOCwgIi4uLi4uLi4uLi4uICVpPWluY29taW5nXG4iLCBpbmNvbWluZyk7CisJaW5jb21pbmcgPSBwZWFzeWNhcC0+YXVkaW9fYnl0ZXNfcGVyX2ZyYWdtZW50OworCWlmICgwICE9IGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZpbmNvbWluZywgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlicmVhazsKK30KK2Nhc2UgU05EQ1RMX0RTUF9HRVRJU1BBQ0U6IHsKKwlzdHJ1Y3QgYXVkaW9fYnVmX2luZm8gYXVkaW9fYnVmX2luZm87CisKKwlKT1QoOCwgIlNORENUTF9EU1BfR0VUSVNQQUNFXG4iKTsKKworCWF1ZGlvX2J1Zl9pbmZvLmJ5dGVzICAgICAgPSBwZWFzeWNhcC0+YXVkaW9fYnl0ZXNfcGVyX2ZyYWdtZW50OworCWF1ZGlvX2J1Zl9pbmZvLmZyYWdtZW50cyAgPSAxOworCWF1ZGlvX2J1Zl9pbmZvLmZyYWdzaXplICAgPSAwOworCWF1ZGlvX2J1Zl9pbmZvLmZyYWdzdG90YWwgPSAwOworCisJaWYgKDAgIT0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmF1ZGlvX2J1Zl9pbmZvLCBcCisJCQkJCQkJCXNpemVvZihpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnJlYWs7Cit9CitkZWZhdWx0OiB7CisJSk9UKDgsICJFUlJPUjogdW5yZWNvZ25pemVkIERTUCBJT0NUTCBjb21tYW5kOiAweCUwOFhcbiIsIGNtZCk7CisJUE9VVDsKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorfQorcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZXhwbGFpbl9pb2N0bChfX3UzMiB3b3QpCit7CitpbnQgazsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgVEhFIERBVEEgRk9SIFRIRSBBUlJBWSBtZXNzIEJFTE9XIFdFUkUgQ09OU1RSVUNURUQgQlkgUlVOTklORyBUSEUgRk9MTE9XSU5HCisgKiAgU0hFTEwgU0NSSVBUOgorICogICMKKyAqICBjYXQgL3Vzci9zcmMvbGludXgtaGVhZGVycy1gdW5hbWUgLXJgL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmggfCBcCisgKiAgICAgZ3JlcCAiXiNkZWZpbmUgVklESU9DXyIgLSB8IGdyZXAgLXYgIl9PTEQiIC0gfCBcCisgKiAgICAgc2VkIC1lICJzLF9JTy4qJCwsO3AiIHwgc2VkIC1lICJOO3MsXG4sLCAiIHwgXAorICogICAgIHNlZCAtZSAicy9eI2RlZmluZSAvICB7LztzLyNkZWZpbmUgLywgXCIvO3MvJC9cIn0sLyIgfCBcCisgKiAgICAgc2VkIC1lICJzLAksLGc7cywgLCxnIiA+aW9jdGwudG1wCisgKiAgZWNobyAiezB4RkZGRkZGRkYsXCJcIn0iID4+aW9jdGwudG1wCisgKiAgZXhpdCAwCisgKiAgIworICogQU5EIFJFSU5TVEFUSU5HIFRIRSBFWENJU0VEICJfT0xEIiBDQVNFUyBXRVJFIExBVEVSIE1BTlVBTExZLgorICoKKyAqIFRIRSBEQVRBIEZPUiBUSEUgQVJSQVkgbWVzczEgQkVMT1cgV0VSRSBDT05TVFJVQ1RFRCBCWSBSVU5OSU5HIFRIRSBGT0xMT1dJTkcKKyAqIFNIRUxMIFNDUklQVDoKKyAqICBjYXQgL3Vzci9zcmMvbGludXgtaGVhZGVycy1gdW5hbWUgLXJgL2luY2x1ZGUvbGludXgvdmlkZW9kZXYuaCB8IFwKKyAqICAgICBncmVwICJeI2RlZmluZSBWSURJT0MiIC0gfCBncmVwIC12ICJfT0xEIiAtIHwgXAorICogICAgIHNlZCAtZSAicyxfSU8uKiQsLDtwIiB8IHNlZCAtZSAiTjtzLFxuLCwgIiB8IFwKKyAqICAgICBzZWQgLWUgInMvXiNkZWZpbmUgLyAgey87cy8jZGVmaW5lIC8sIFwiLztzLyQvXCJ9LC8iIHwgXAorICogICAgIHNlZCAtZSAicywgICAsLGc7cywgLCxnIiA+aW9jdGwudG1wCisgKiAgZWNobyAiezB4RkZGRkZGRkYsXCJcIn0iID4+aW9jdGwudG1wCisgKiAgZXhpdCAwCisgKiAgIworICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgc3RydWN0IG1lc3MgeworCV9fdTMyIGNvbW1hbmQ7CisJY2hhciAgbmFtZVs2NF07Cit9IG1lc3NbXSA9IHsKKyNpZiBkZWZpbmVkKFZJRElPQ19RVUVSWUNBUCkKK3tWSURJT0NfUVVFUllDQVAsICJWSURJT0NfUVVFUllDQVAifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX1JFU0VSVkVEKQore1ZJRElPQ19SRVNFUlZFRCwgIlZJRElPQ19SRVNFUlZFRCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfRU5VTV9GTVQpCit7VklESU9DX0VOVU1fRk1ULCAiVklESU9DX0VOVU1fRk1UIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19HX0ZNVCkKK3tWSURJT0NfR19GTVQsICJWSURJT0NfR19GTVQifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX1NfRk1UKQore1ZJRElPQ19TX0ZNVCwgIlZJRElPQ19TX0ZNVCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfUkVRQlVGUykKK3tWSURJT0NfUkVRQlVGUywgIlZJRElPQ19SRVFCVUZTIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19RVUVSWUJVRikKK3tWSURJT0NfUVVFUllCVUYsICJWSURJT0NfUVVFUllCVUYifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX0dfRkJVRikKK3tWSURJT0NfR19GQlVGLCAiVklESU9DX0dfRkJVRiJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfU19GQlVGKQore1ZJRElPQ19TX0ZCVUYsICJWSURJT0NfU19GQlVGIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19PVkVSTEFZKQore1ZJRElPQ19PVkVSTEFZLCAiVklESU9DX09WRVJMQVkifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX1FCVUYpCit7VklESU9DX1FCVUYsICJWSURJT0NfUUJVRiJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfRFFCVUYpCit7VklESU9DX0RRQlVGLCAiVklESU9DX0RRQlVGIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19TVFJFQU1PTikKK3tWSURJT0NfU1RSRUFNT04sICJWSURJT0NfU1RSRUFNT04ifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX1NUUkVBTU9GRikKK3tWSURJT0NfU1RSRUFNT0ZGLCAiVklESU9DX1NUUkVBTU9GRiJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfR19QQVJNKQore1ZJRElPQ19HX1BBUk0sICJWSURJT0NfR19QQVJNIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19TX1BBUk0pCit7VklESU9DX1NfUEFSTSwgIlZJRElPQ19TX1BBUk0ifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX0dfU1REKQore1ZJRElPQ19HX1NURCwgIlZJRElPQ19HX1NURCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfU19TVEQpCit7VklESU9DX1NfU1RELCAiVklESU9DX1NfU1REIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19FTlVNU1REKQore1ZJRElPQ19FTlVNU1RELCAiVklESU9DX0VOVU1TVEQifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX0VOVU1JTlBVVCkKK3tWSURJT0NfRU5VTUlOUFVULCAiVklESU9DX0VOVU1JTlBVVCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfR19DVFJMKQore1ZJRElPQ19HX0NUUkwsICJWSURJT0NfR19DVFJMIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19TX0NUUkwpCit7VklESU9DX1NfQ1RSTCwgIlZJRElPQ19TX0NUUkwifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX0dfVFVORVIpCit7VklESU9DX0dfVFVORVIsICJWSURJT0NfR19UVU5FUiJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfU19UVU5FUikKK3tWSURJT0NfU19UVU5FUiwgIlZJRElPQ19TX1RVTkVSIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19HX0FVRElPKQore1ZJRElPQ19HX0FVRElPLCAiVklESU9DX0dfQVVESU8ifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX1NfQVVESU8pCit7VklESU9DX1NfQVVESU8sICJWSURJT0NfU19BVURJTyJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfUVVFUllDVFJMKQore1ZJRElPQ19RVUVSWUNUUkwsICJWSURJT0NfUVVFUllDVFJMIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19RVUVSWU1FTlUpCit7VklESU9DX1FVRVJZTUVOVSwgIlZJRElPQ19RVUVSWU1FTlUifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX0dfSU5QVVQpCit7VklESU9DX0dfSU5QVVQsICJWSURJT0NfR19JTlBVVCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfU19JTlBVVCkKK3tWSURJT0NfU19JTlBVVCwgIlZJRElPQ19TX0lOUFVUIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19HX09VVFBVVCkKK3tWSURJT0NfR19PVVRQVVQsICJWSURJT0NfR19PVVRQVVQifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX1NfT1VUUFVUKQore1ZJRElPQ19TX09VVFBVVCwgIlZJRElPQ19TX09VVFBVVCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfRU5VTU9VVFBVVCkKK3tWSURJT0NfRU5VTU9VVFBVVCwgIlZJRElPQ19FTlVNT1VUUFVUIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19HX0FVRE9VVCkKK3tWSURJT0NfR19BVURPVVQsICJWSURJT0NfR19BVURPVVQifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX1NfQVVET1VUKQore1ZJRElPQ19TX0FVRE9VVCwgIlZJRElPQ19TX0FVRE9VVCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfR19NT0RVTEFUT1IpCit7VklESU9DX0dfTU9EVUxBVE9SLCAiVklESU9DX0dfTU9EVUxBVE9SIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19TX01PRFVMQVRPUikKK3tWSURJT0NfU19NT0RVTEFUT1IsICJWSURJT0NfU19NT0RVTEFUT1IifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX0dfRlJFUVVFTkNZKQore1ZJRElPQ19HX0ZSRVFVRU5DWSwgIlZJRElPQ19HX0ZSRVFVRU5DWSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfU19GUkVRVUVOQ1kpCit7VklESU9DX1NfRlJFUVVFTkNZLCAiVklESU9DX1NfRlJFUVVFTkNZIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19DUk9QQ0FQKQore1ZJRElPQ19DUk9QQ0FQLCAiVklESU9DX0NST1BDQVAifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX0dfQ1JPUCkKK3tWSURJT0NfR19DUk9QLCAiVklESU9DX0dfQ1JPUCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfU19DUk9QKQore1ZJRElPQ19TX0NST1AsICJWSURJT0NfU19DUk9QIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19HX0pQRUdDT01QKQore1ZJRElPQ19HX0pQRUdDT01QLCAiVklESU9DX0dfSlBFR0NPTVAifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX1NfSlBFR0NPTVApCit7VklESU9DX1NfSlBFR0NPTVAsICJWSURJT0NfU19KUEVHQ09NUCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfUVVFUllTVEQpCit7VklESU9DX1FVRVJZU1RELCAiVklESU9DX1FVRVJZU1REIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19UUllfRk1UKQore1ZJRElPQ19UUllfRk1ULCAiVklESU9DX1RSWV9GTVQifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX0VOVU1BVURJTykKK3tWSURJT0NfRU5VTUFVRElPLCAiVklESU9DX0VOVU1BVURJTyJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfRU5VTUFVRE9VVCkKK3tWSURJT0NfRU5VTUFVRE9VVCwgIlZJRElPQ19FTlVNQVVET1VUIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19HX1BSSU9SSVRZKQore1ZJRElPQ19HX1BSSU9SSVRZLCAiVklESU9DX0dfUFJJT1JJVFkifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX1NfUFJJT1JJVFkpCit7VklESU9DX1NfUFJJT1JJVFksICJWSURJT0NfU19QUklPUklUWSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfR19TTElDRURfVkJJX0NBUCkKK3tWSURJT0NfR19TTElDRURfVkJJX0NBUCwgIlZJRElPQ19HX1NMSUNFRF9WQklfQ0FQIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19MT0dfU1RBVFVTKQore1ZJRElPQ19MT0dfU1RBVFVTLCAiVklESU9DX0xPR19TVEFUVVMifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX0dfRVhUX0NUUkxTKQore1ZJRElPQ19HX0VYVF9DVFJMUywgIlZJRElPQ19HX0VYVF9DVFJMUyJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfU19FWFRfQ1RSTFMpCit7VklESU9DX1NfRVhUX0NUUkxTLCAiVklESU9DX1NfRVhUX0NUUkxTIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19UUllfRVhUX0NUUkxTKQore1ZJRElPQ19UUllfRVhUX0NUUkxTLCAiVklESU9DX1RSWV9FWFRfQ1RSTFMifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX0VOVU1fRlJBTUVTSVpFUykKK3tWSURJT0NfRU5VTV9GUkFNRVNJWkVTLCAiVklESU9DX0VOVU1fRlJBTUVTSVpFUyJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfRU5VTV9GUkFNRUlOVEVSVkFMUykKK3tWSURJT0NfRU5VTV9GUkFNRUlOVEVSVkFMUywgIlZJRElPQ19FTlVNX0ZSQU1FSU5URVJWQUxTIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19HX0VOQ19JTkRFWCkKK3tWSURJT0NfR19FTkNfSU5ERVgsICJWSURJT0NfR19FTkNfSU5ERVgifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX0VOQ09ERVJfQ01EKQore1ZJRElPQ19FTkNPREVSX0NNRCwgIlZJRElPQ19FTkNPREVSX0NNRCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfVFJZX0VOQ09ERVJfQ01EKQore1ZJRElPQ19UUllfRU5DT0RFUl9DTUQsICJWSURJT0NfVFJZX0VOQ09ERVJfQ01EIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19HX0NISVBfSURFTlQpCit7VklESU9DX0dfQ0hJUF9JREVOVCwgIlZJRElPQ19HX0NISVBfSURFTlQifSwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChWSURJT0NfT1ZFUkxBWV9PTEQpCit7VklESU9DX09WRVJMQVlfT0xELCAiVklESU9DX09WRVJMQVlfT0xEIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19TX1BBUk1fT0xEKQore1ZJRElPQ19TX1BBUk1fT0xELCAiVklESU9DX1NfUEFSTV9PTEQifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX1NfQ1RSTF9PTEQpCit7VklESU9DX1NfQ1RSTF9PTEQsICJWSURJT0NfU19DVFJMX09MRCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfR19BVURJT19PTEQpCit7VklESU9DX0dfQVVESU9fT0xELCAiVklESU9DX0dfQVVESU9fT0xEIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19HX0FVRE9VVF9PTEQpCit7VklESU9DX0dfQVVET1VUX09MRCwgIlZJRElPQ19HX0FVRE9VVF9PTEQifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX0NST1BDQVBfT0xEKQore1ZJRElPQ19DUk9QQ0FQX09MRCwgIlZJRElPQ19DUk9QQ0FQX09MRCJ9LAorI2VuZGlmCit7MHhGRkZGRkZGRiwgIiJ9Cit9OworCitzdGF0aWMgc3RydWN0IG1lc3MgbWVzczFbXSA9IFwKK3sKKyNpZiBkZWZpbmVkKFZJRElPQ0dDQVApCit7VklESU9DR0NBUCwgIlZJRElPQ0dDQVAifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DR0NIQU4pCit7VklESU9DR0NIQU4sICJWSURJT0NHQ0hBTiJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NTQ0hBTikKK3tWSURJT0NTQ0hBTiwgIlZJRElPQ1NDSEFOIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ0dUVU5FUikKK3tWSURJT0NHVFVORVIsICJWSURJT0NHVFVORVIifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DU1RVTkVSKQore1ZJRElPQ1NUVU5FUiwgIlZJRElPQ1NUVU5FUiJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NHUElDVCkKK3tWSURJT0NHUElDVCwgIlZJRElPQ0dQSUNUIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ1NQSUNUKQore1ZJRElPQ1NQSUNULCAiVklESU9DU1BJQ1QifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DQ0FQVFVSRSkKK3tWSURJT0NDQVBUVVJFLCAiVklESU9DQ0FQVFVSRSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NHV0lOKQore1ZJRElPQ0dXSU4sICJWSURJT0NHV0lOIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ1NXSU4pCit7VklESU9DU1dJTiwgIlZJRElPQ1NXSU4ifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DR0ZCVUYpCit7VklESU9DR0ZCVUYsICJWSURJT0NHRkJVRiJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NTRkJVRikKK3tWSURJT0NTRkJVRiwgIlZJRElPQ1NGQlVGIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ0tFWSkKK3tWSURJT0NLRVksICJWSURJT0NLRVkifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DR0ZSRVEpCit7VklESU9DR0ZSRVEsICJWSURJT0NHRlJFUSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NTRlJFUSkKK3tWSURJT0NTRlJFUSwgIlZJRElPQ1NGUkVRIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ0dBVURJTykKK3tWSURJT0NHQVVESU8sICJWSURJT0NHQVVESU8ifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DU0FVRElPKQore1ZJRElPQ1NBVURJTywgIlZJRElPQ1NBVURJTyJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NTWU5DKQore1ZJRElPQ1NZTkMsICJWSURJT0NTWU5DIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ01DQVBUVVJFKQore1ZJRElPQ01DQVBUVVJFLCAiVklESU9DTUNBUFRVUkUifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DR01CVUYpCit7VklESU9DR01CVUYsICJWSURJT0NHTUJVRiJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NHVU5JVCkKK3tWSURJT0NHVU5JVCwgIlZJRElPQ0dVTklUIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ0dDQVBUVVJFKQore1ZJRElPQ0dDQVBUVVJFLCAiVklESU9DR0NBUFRVUkUifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DU0NBUFRVUkUpCit7VklESU9DU0NBUFRVUkUsICJWSURJT0NTQ0FQVFVSRSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NTUExBWU1PREUpCit7VklESU9DU1BMQVlNT0RFLCAiVklESU9DU1BMQVlNT0RFIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ1NXUklURU1PREUpCit7VklESU9DU1dSSVRFTU9ERSwgIlZJRElPQ1NXUklURU1PREUifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DR1BMQVlJTkZPKQore1ZJRElPQ0dQTEFZSU5GTywgIlZJRElPQ0dQTEFZSU5GTyJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NTTUlDUk9DT0RFKQore1ZJRElPQ1NNSUNST0NPREUsICJWSURJT0NTTUlDUk9DT0RFIn0sCisjZW5kaWYKK3sweEZGRkZGRkZGLCAiIn0KK307CisKK2sgPSAwOword2hpbGUgKG1lc3Nba10ubmFtZVswXSkgeworCWlmICh3b3QgPT0gbWVzc1trXS5jb21tYW5kKSB7CisJCUpPVCg4LCAiaW9jdGwgMHglMDhYIGlzICVzXG4iLCBcCisJCQkJCW1lc3Nba10uY29tbWFuZCwgJm1lc3Nba10ubmFtZVswXSk7CisJCXJldHVybiAwOworCX0KKwlrKys7Cit9CitKT1QoOCwgImlvY3RsIDB4JTA4WCBpcyBub3QgaW4gdmlkZW9kZXYyLmhcbiIsIHdvdCk7CisKK2sgPSAwOword2hpbGUgKG1lc3MxW2tdLm5hbWVbMF0pIHsKKwlpZiAod290ID09IG1lc3MxW2tdLmNvbW1hbmQpIHsKKwkJSk9UKDgsICJpb2N0bCAweCUwOFggaXMgJXMgKFY0TDEpXG4iLCBcCisJCQkJCW1lc3MxW2tdLmNvbW1hbmQsICZtZXNzMVtrXS5uYW1lWzBdKTsKKwkJcmV0dXJuIDA7CisJfQorCWsrKzsKK30KK0pPVCg4LCAiaW9jdGwgMHglMDhYIGlzIG5vdCBpbiB2aWRlb2Rldi5oXG4iLCB3b3QpOworcmV0dXJuIC0xOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGV4cGxhaW5fY2lkKF9fdTMyIHdvdCkKK3sKK2ludCBrOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBUSEUgREFUQSBGT1IgVEhFIEFSUkFZIG1lc3MgQkVMT1cgV0VSRSBDT05TVFJVQ1RFRCBCWSBSVU5OSU5HIFRIRSBGT0xMT1dJTkcKKyAqICBTSEVMTCBTQ1JJUFQ6CisgKiAgIworICogIGNhdCAvdXNyL3NyYy9saW51eC1oZWFkZXJzLWB1bmFtZSAtcmAvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaCB8IFwKKyAqICAgICBncmVwICJeI2RlZmluZSBWNEwyX0NJRF8iIHwgIFwKKyAqICAgICBzZWQgLWUgInMsKC4qJCwsO3AiIHwgc2VkIC1lICJOO3MsXG4sLCAiIHwgXAorICogICAgIHNlZCAtZSAicy9eI2RlZmluZSAvICB7LztzLyNkZWZpbmUgLywgXCIvO3MvJC9cIn0sLyIgfCBcCisgKiAgICAgc2VkIC1lICJzLAksLGc7cywgLCxnIiB8IGdyZXAgLXYgIl9CQVNFIiB8IGdyZXAgLXYgIk1QRUciID5jaWQudG1wCisgKiAgZWNobyAiezB4RkZGRkZGRkYsXCJcIn0iID4+Y2lkLnRtcAorICogIGV4aXQgMAorICogICMKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHN0cnVjdCBtZXNzCit7CitfX3UzMiBjb21tYW5kOworY2hhciAgbmFtZVs2NF07Cit9IG1lc3NbXSA9IHsKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX1VTRVJfQ0xBU1MpCit7VjRMMl9DSURfVVNFUl9DTEFTUywgIlY0TDJfQ0lEX1VTRVJfQ0xBU1MifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfQlJJR0hUTkVTUykKK3tWNEwyX0NJRF9CUklHSFRORVNTLCAiVjRMMl9DSURfQlJJR0hUTkVTUyJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9DT05UUkFTVCkKK3tWNEwyX0NJRF9DT05UUkFTVCwgIlY0TDJfQ0lEX0NPTlRSQVNUIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX1NBVFVSQVRJT04pCit7VjRMMl9DSURfU0FUVVJBVElPTiwgIlY0TDJfQ0lEX1NBVFVSQVRJT04ifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfSFVFKQore1Y0TDJfQ0lEX0hVRSwgIlY0TDJfQ0lEX0hVRSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9BVURJT19WT0xVTUUpCit7VjRMMl9DSURfQVVESU9fVk9MVU1FLCAiVjRMMl9DSURfQVVESU9fVk9MVU1FIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0UpCit7VjRMMl9DSURfQVVESU9fQkFMQU5DRSwgIlY0TDJfQ0lEX0FVRElPX0JBTEFOQ0UifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfQVVESU9fQkFTUykKK3tWNEwyX0NJRF9BVURJT19CQVNTLCAiVjRMMl9DSURfQVVESU9fQkFTUyJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9BVURJT19UUkVCTEUpCit7VjRMMl9DSURfQVVESU9fVFJFQkxFLCAiVjRMMl9DSURfQVVESU9fVFJFQkxFIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX0FVRElPX01VVEUpCit7VjRMMl9DSURfQVVESU9fTVVURSwgIlY0TDJfQ0lEX0FVRElPX01VVEUifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfQVVESU9fTE9VRE5FU1MpCit7VjRMMl9DSURfQVVESU9fTE9VRE5FU1MsICJWNEwyX0NJRF9BVURJT19MT1VETkVTUyJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9CTEFDS19MRVZFTCkKK3tWNEwyX0NJRF9CTEFDS19MRVZFTCwgIlY0TDJfQ0lEX0JMQUNLX0xFVkVMIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRSkKK3tWNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0UsICJWNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0UifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfRE9fV0hJVEVfQkFMQU5DRSkKK3tWNEwyX0NJRF9ET19XSElURV9CQUxBTkNFLCAiVjRMMl9DSURfRE9fV0hJVEVfQkFMQU5DRSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9SRURfQkFMQU5DRSkKK3tWNEwyX0NJRF9SRURfQkFMQU5DRSwgIlY0TDJfQ0lEX1JFRF9CQUxBTkNFIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX0JMVUVfQkFMQU5DRSkKK3tWNEwyX0NJRF9CTFVFX0JBTEFOQ0UsICJWNEwyX0NJRF9CTFVFX0JBTEFOQ0UifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfR0FNTUEpCit7VjRMMl9DSURfR0FNTUEsICJWNEwyX0NJRF9HQU1NQSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9XSElURU5FU1MpCit7VjRMMl9DSURfV0hJVEVORVNTLCAiVjRMMl9DSURfV0hJVEVORVNTIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX0VYUE9TVVJFKQore1Y0TDJfQ0lEX0VYUE9TVVJFLCAiVjRMMl9DSURfRVhQT1NVUkUifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfQVVUT0dBSU4pCit7VjRMMl9DSURfQVVUT0dBSU4sICJWNEwyX0NJRF9BVVRPR0FJTiJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9HQUlOKQore1Y0TDJfQ0lEX0dBSU4sICJWNEwyX0NJRF9HQUlOIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX0hGTElQKQore1Y0TDJfQ0lEX0hGTElQLCAiVjRMMl9DSURfSEZMSVAifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfVkZMSVApCit7VjRMMl9DSURfVkZMSVAsICJWNEwyX0NJRF9WRkxJUCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9IQ0VOVEVSKQore1Y0TDJfQ0lEX0hDRU5URVIsICJWNEwyX0NJRF9IQ0VOVEVSIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX1ZDRU5URVIpCit7VjRMMl9DSURfVkNFTlRFUiwgIlY0TDJfQ0lEX1ZDRU5URVIifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1kpCit7VjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1ksICJWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9IVUVfQVVUTykKK3tWNEwyX0NJRF9IVUVfQVVUTywgIlY0TDJfQ0lEX0hVRV9BVVRPIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX1dISVRFX0JBTEFOQ0VfVEVNUEVSQVRVUkUpCit7VjRMMl9DSURfV0hJVEVfQkFMQU5DRV9URU1QRVJBVFVSRSwgIlY0TDJfQ0lEX1dISVRFX0JBTEFOQ0VfVEVNUEVSQVRVUkUifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfU0hBUlBORVNTKQore1Y0TDJfQ0lEX1NIQVJQTkVTUywgIlY0TDJfQ0lEX1NIQVJQTkVTUyJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9CQUNLTElHSFRfQ09NUEVOU0FUSU9OKQore1Y0TDJfQ0lEX0JBQ0tMSUdIVF9DT01QRU5TQVRJT04sICJWNEwyX0NJRF9CQUNLTElHSFRfQ09NUEVOU0FUSU9OIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX0NIUk9NQV9BR0MpCit7VjRMMl9DSURfQ0hST01BX0FHQywgIlY0TDJfQ0lEX0NIUk9NQV9BR0MifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfQ09MT1JfS0lMTEVSKQore1Y0TDJfQ0lEX0NPTE9SX0tJTExFUiwgIlY0TDJfQ0lEX0NPTE9SX0tJTExFUiJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9MQVNUUDEpCit7VjRMMl9DSURfTEFTVFAxLCAiVjRMMl9DSURfTEFTVFAxIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX0NBTUVSQV9DTEFTUykKK3tWNEwyX0NJRF9DQU1FUkFfQ0xBU1MsICJWNEwyX0NJRF9DQU1FUkFfQ0xBU1MifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfRVhQT1NVUkVfQVVUTykKK3tWNEwyX0NJRF9FWFBPU1VSRV9BVVRPLCAiVjRMMl9DSURfRVhQT1NVUkVfQVVUTyJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9FWFBPU1VSRV9BQlNPTFVURSkKK3tWNEwyX0NJRF9FWFBPU1VSRV9BQlNPTFVURSwgIlY0TDJfQ0lEX0VYUE9TVVJFX0FCU09MVVRFIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX0VYUE9TVVJFX0FVVE9fUFJJT1JJVFkpCit7VjRMMl9DSURfRVhQT1NVUkVfQVVUT19QUklPUklUWSwgIlY0TDJfQ0lEX0VYUE9TVVJFX0FVVE9fUFJJT1JJVFkifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfUEFOX1JFTEFUSVZFKQore1Y0TDJfQ0lEX1BBTl9SRUxBVElWRSwgIlY0TDJfQ0lEX1BBTl9SRUxBVElWRSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9USUxUX1JFTEFUSVZFKQore1Y0TDJfQ0lEX1RJTFRfUkVMQVRJVkUsICJWNEwyX0NJRF9USUxUX1JFTEFUSVZFIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX1BBTl9SRVNFVCkKK3tWNEwyX0NJRF9QQU5fUkVTRVQsICJWNEwyX0NJRF9QQU5fUkVTRVQifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfVElMVF9SRVNFVCkKK3tWNEwyX0NJRF9USUxUX1JFU0VULCAiVjRMMl9DSURfVElMVF9SRVNFVCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9QQU5fQUJTT0xVVEUpCit7VjRMMl9DSURfUEFOX0FCU09MVVRFLCAiVjRMMl9DSURfUEFOX0FCU09MVVRFIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX1RJTFRfQUJTT0xVVEUpCit7VjRMMl9DSURfVElMVF9BQlNPTFVURSwgIlY0TDJfQ0lEX1RJTFRfQUJTT0xVVEUifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfRk9DVVNfQUJTT0xVVEUpCit7VjRMMl9DSURfRk9DVVNfQUJTT0xVVEUsICJWNEwyX0NJRF9GT0NVU19BQlNPTFVURSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9GT0NVU19SRUxBVElWRSkKK3tWNEwyX0NJRF9GT0NVU19SRUxBVElWRSwgIlY0TDJfQ0lEX0ZPQ1VTX1JFTEFUSVZFIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX0ZPQ1VTX0FVVE8pCit7VjRMMl9DSURfRk9DVVNfQVVUTywgIlY0TDJfQ0lEX0ZPQ1VTX0FVVE8ifSwKKyNlbmRpZgorezB4RkZGRkZGRkYsICIifQorfTsKKworayA9IDA7Cit3aGlsZSAobWVzc1trXS5uYW1lWzBdKSB7CisJaWYgKHdvdCA9PSBtZXNzW2tdLmNvbW1hbmQpIHsKKwkJSk9UKDgsICJpb2N0bCAweCUwOFggaXMgJXNcbiIsIFwKKwkJCQkJbWVzc1trXS5jb21tYW5kLCAmbWVzc1trXS5uYW1lWzBdKTsKKwkJcmV0dXJuIDA7CisJfQorCWsrKzsKK30KK0pPVCg4LCAiY2lkIDB4JTA4WCBpcyBub3QgaW4gdmlkZW9kZXYyLmhcbiIsIHdvdCk7CityZXR1cm4gLTE7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9lYXN5Y2FwX2lvY3RsLmggYi9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9lYXN5Y2FwX2lvY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEwY2Q2MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lYXN5Y2FwL2Vhc3ljYXBfaW9jdGwuaApAQCAtMCwwICsxLDI4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgZWFzeWNhcF9pb2N0bC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIFIuTS4gVGhvbWFzICA8cm10aG9tYXNAc2Npb2x1cy5vcmc+CisgKgorICoKKyAqICBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhlIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBzdHJ1Y3QgZWFzeWNhcF9mb3JtYXQgZWFzeWNhcF9mb3JtYXRbXTsKK2V4dGVybiBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgZWFzeWNhcF9jb250cm9sW107CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9lYXN5Y2FwX2xvdy5jIGIvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvZWFzeWNhcF9sb3cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDFmYzRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvZWFzeWNhcF9sb3cuYwpAQCAtMCwwICsxLDEwNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIGVhc3ljYXBfbG93LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIFIuTS4gVGhvbWFzICA8cm10aG9tYXNAc2Npb2x1cy5vcmc+CisgKgorICoKKyAqICBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhlIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAgQUNLTk9XTEVHRU1FTlRTIEFORCBSRUZFUkVOQ0VTCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgVGhpcyBkcml2ZXIgbWFrZXMgdXNlIG9mIHJlZ2lzdGVyIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGUgU3ludGVrCisgKiAgU2VtaWNvbiBEQy0xMTI1IGRyaXZlciBob3N0ZWQgYXQKKyAqICAgICAgICAgICAgICAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9zeW50ZWtkcml2ZXIvLgorICogIFBhcnRpY3VsYXJseSB1c2VmdWwgaGFzIGJlZW4gYSBwYXRjaCB0byB0aGUgbGF0dGVyIGRyaXZlciBwcm92aWRlZCBieQorICogIEl2b3IgSGV3aXR0IGluIEphbnVhcnkgMjAwOS4gIFRoZSBOVFNDIGltcGxlbWVudGF0aW9uIGlzIHRha2VuIGZyb20gdGhlCisgKiAgd29yayBvZiBCZW4gVHJhc2suCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJlYXN5Y2FwX2RlYnVnLmgiCisjaW5jbHVkZSAiZWFzeWNhcC5oIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2NvbnN0IHN0cnVjdCBzdGsxMTYwY29uZmlnIHsgaW50IHJlZzsgaW50IHNldDsgfSBzdGsxMTYwY29uZmlnWzI1Nl0gPSB7CisJezB4MDAwLCAweDAwOTh9LAorCXsweDAwMiwgMHgwMDkzfSwKKworCXsweDAwMSwgMHgwMDAzfSwKKwl7MHgwMDMsIDB4MDA4MH0sCisJezB4MDBELCAweDAwMDB9LAorCXsweDAwRiwgMHgwMDAyfSwKKwl7MHgwMTgsIDB4MDAxMH0sCisJezB4MDE5LCAweDAwMDB9LAorCXsweDAxQSwgMHgwMDE0fSwKKwl7MHgwMUIsIDB4MDAwRX0sCisJezB4MDFDLCAweDAwNDZ9LAorCisJezB4MTAwLCAweDAwMzN9LAorCXsweDEwMywgMHgwMDAwfSwKKwl7MHgxMDQsIDB4MDAwMH0sCisJezB4MTA1LCAweDAwMDB9LAorCXsweDEwNiwgMHgwMDAwfSwKKworI2lmIGRlZmluZWQoUFJFRkVSX05UU0MpCisKKyN1bmRlZiAgT0xETUFSR0lOCisjaWYgZGVmaW5lZChPTERNQVJHSU4pCisJezB4MTEwLCAweDAwMDh9LAorI2Vsc2UKKwl7MHgxMTAsIDB4MDAxNH0sCisjZW5kaWYgLypPTERNQVJHSU4qLworCisJezB4MTExLCAweDAwMDB9LAorCXsweDExMiwgMHgwMDAzfSwKKwl7MHgxMTMsIDB4MDAwMH0sCisKKyNpZiBkZWZpbmVkKE9MRE1BUkdJTikKKwl7MHgxMTQsIDB4MDUwOH0sCisjZWxzZQorCXsweDExNCwgMHgwNTE0fSwKKyNlbmRpZiAvKk9MRE1BUkdJTiovCisKKwl7MHgxMTUsIDB4MDAwNX0sCisJezB4MTE2LCAweDAwRjN9LAorCXsweDExNywgMHgwMDAwfSwKKworI2Vsc2UgLyogISBQUkVGRVJfTlRTQyovCisKKyNpZiBkZWZpbmVkKE9MRE1BUkdJTikKKwl7MHgxMTAsIDB4MDAwOH0sCisjZWxzZQorCXsweDExMCwgMHgwMDE0fSwKKyNlbmRpZiAvKk9MRE1BUkdJTiovCisKKwl7MHgxMTEsIDB4MDAwMH0sCisJezB4MTEyLCAweDAwMjB9LAorCXsweDExMywgMHgwMDAwfSwKKworI2lmIGRlZmluZWQoT0xETUFSR0lOKQorCXsweDExNCwgMHgwNTA4fSwKKyNlbHNlCisJezB4MTE0LCAweDA1MTR9LAorI2VuZGlmIC8qT0xETUFSR0lOKi8KKworCXsweDExNSwgMHgwMDA1fSwKKwl7MHgxMTYsIDB4MDExMH0sCisJezB4MTE3LCAweDAwMDF9LAorCisjZW5kaWYgLyogISBQUkVGRVJfTlRTQyovCisKKwl7MHgyMDIsIDB4MDAwRn0sCisJezB4MjAzLCAweDAwNEF9LAorCXsweDJGRiwgMHgwMDAwfSwKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwl7MHhGRkYsIDB4RkZGRn0KKwl9OworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitjb25zdCBzdHJ1Y3Qgc2FhNzExM2NvbmZpZyB7IGludCByZWc7IGludCBzZXQ7IH0gc2FhNzExM2NvbmZpZ1syNTZdID0geworCXsweDAxLCAweDA4fSwKKwl7MHgwMiwgMHg4MH0sCisJezB4MDMsIDB4MzN9LAorCXsweDA0LCAweDAwfSwKKwl7MHgwNSwgMHgwMH0sCisJezB4MDYsIDB4RTl9LAorCXsweDA3LCAweDBEfSwKKyNpZiBkZWZpbmVkKFBSRUZFUl9OVFNDKQorCXsweDA4LCAweDc4fSwKKyNlbHNlCisJezB4MDgsIDB4Mzh9LAorI2VuZGlmIC8qICEgUFJFRkVSX05UU0MqLworCXsweDA5LCAweDAwfSwKKwl7MHgwQSwgU0FBXzBBX0RFRkFVTFR9LAorCXsweDBCLCBTQUFfMEJfREVGQVVMVH0sCisJezB4MEMsIFNBQV8wQ19ERUZBVUxUfSwKKwl7MHgwRCwgU0FBXzBEX0RFRkFVTFR9LAorCXsweDBFLCAweDAxfSwKKwl7MHgwRiwgMHgzNn0sCisJezB4MTAsIDB4MDB9LAorCXsweDExLCAweDBDfSwKKwl7MHgxMiwgMHhFN30sCisJezB4MTMsIDB4MDB9LAorCXsweDE1LCAweDAwfSwKKwl7MHgxNiwgMHgwMH0sCisjaWYgZGVmaW5lZChQUkVGRVJfTlRTQykKKwl7MHg0MCwgMHg4Mn0sCisjZWxzZQorCXsweDQwLCAweDAyfSwKKyNlbmRpZiAvKiAhIFBSRUZFUl9OVFNDKi8KKwl7MHg0MSwgMHhGRn0sCisJezB4NDIsIDB4RkZ9LAorCXsweDQzLCAweEZGfSwKKwl7MHg0NCwgMHhGRn0sCisJezB4NDUsIDB4RkZ9LAorCXsweDQ2LCAweEZGfSwKKwl7MHg0NywgMHhGRn0sCisJezB4NDgsIDB4RkZ9LAorCXsweDQ5LCAweEZGfSwKKwl7MHg0QSwgMHhGRn0sCisJezB4NEIsIDB4RkZ9LAorCXsweDRDLCAweEZGfSwKKwl7MHg0RCwgMHhGRn0sCisJezB4NEUsIDB4RkZ9LAorCXsweDRGLCAweEZGfSwKKwl7MHg1MCwgMHhGRn0sCisJezB4NTEsIDB4RkZ9LAorCXsweDUyLCAweEZGfSwKKwl7MHg1MywgMHhGRn0sCisJezB4NTQsIDB4RkZ9LAorCXsweDU1LCAweEZGfSwKKwl7MHg1NiwgMHhGRn0sCisJezB4NTcsIDB4RkZ9LAorCXsweDU4LCAweDQwfSwKKwl7MHg1OSwgMHg1NH0sCisjaWYgZGVmaW5lZChQUkVGRVJfTlRTQykKKwl7MHg1QSwgMHgwQX0sCisjZWxzZQorCXsweDVBLCAweDA3fSwKKyNlbmRpZiAvKiAhIFBSRUZFUl9OVFNDKi8KKwl7MHg1QiwgMHg4M30sCisJezB4RkYsIDB4RkZ9CisJfTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludAorY29uZmlybV9yZXNvbHV0aW9uKHN0cnVjdCB1c2JfZGV2aWNlICpwKQoreworX191OCBnZXQwLCBnZXQxLCBnZXQyLCBnZXQzLCBnZXQ0LCBnZXQ1LCBnZXQ2LCBnZXQ3OworR0VUKHAsIDB4MDExMCwgJmdldDApOworR0VUKHAsIDB4MDExMSwgJmdldDEpOworR0VUKHAsIDB4MDExMiwgJmdldDIpOworR0VUKHAsIDB4MDExMywgJmdldDMpOworR0VUKHAsIDB4MDExNCwgJmdldDQpOworR0VUKHAsIDB4MDExNSwgJmdldDUpOworR0VUKHAsIDB4MDExNiwgJmdldDYpOworR0VUKHAsIDB4MDExNywgJmdldDcpOworSk9UKDgsICAiMHglMDNYLCAweCUwM1gsICIgXAorCSIweCUwM1gsIDB4JTAzWCwgIiBcCisJIjB4JTAzWCwgMHglMDNYLCAiIFwKKwkiMHglMDNYLCAweCUwM1hcbiIsIFwKKwlnZXQwLCBnZXQxLCBnZXQyLCBnZXQzLCBnZXQ0LCBnZXQ1LCBnZXQ2LCBnZXQ3KTsKK0pPVCg4LCAgIi4uLi5jZiBQQUxfNzIweDUyNjogIiBcCisJIjB4JTAzWCwgMHglMDNYLCAiIFwKKwkiMHglMDNYLCAweCUwM1gsICIgXAorCSIweCUwM1gsIDB4JTAzWCwgIiBcCisJIjB4JTAzWCwgMHglMDNYXG4iLCBcCisJMHgwMDAsIDB4MDAwLCAweDAwMSwgMHgwMDAsIDB4NUEwLCAweDAwNSwgMHgxMjEsIDB4MDAxKTsKK0pPVCg4LCAgIi4uLi5jZiBQQUxfNzA0eDUyNjogIiBcCisJIjB4JTAzWCwgMHglMDNYLCAiIFwKKwkiMHglMDNYLCAweCUwM1gsICIgXAorCSIweCUwM1gsIDB4JTAzWCwgIiBcCisJIjB4JTAzWCwgMHglMDNYXG4iLCBcCisJMHgwMDQsIDB4MDAwLCAweDAwMSwgMHgwMDAsIDB4NTg0LCAweDAwNSwgMHgxMjEsIDB4MDAxKTsKK0pPVCg4LCAgIi4uLi5jZiBWR0FfNjQweDQ4MDogIiBcCisJIjB4JTAzWCwgMHglMDNYLCAiIFwKKwkiMHglMDNYLCAweCUwM1gsICIgXAorCSIweCUwM1gsIDB4JTAzWCwgIiBcCisJIjB4JTAzWCwgMHglMDNYXG4iLCBcCisJMHgwMDgsIDB4MDAwLCAweDAyMCwgMHgwMDAsIDB4NTA4LCAweDAwNSwgMHgxMTAsIDB4MDAxKTsKK3JldHVybiAwOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQKK2NvbmZpcm1fc3RyZWFtKHN0cnVjdCB1c2JfZGV2aWNlICpwKQoreworX191MTYgZ2V0MjsKK19fdTggaWdvdDsKKworR0VUKHAsIDB4MDEwMCwgJmlnb3QpOyAgZ2V0MiA9IDB4ODAgJiBpZ290OworaWYgKDB4ODAgPT0gZ2V0MikKKwlKT1QoOCwgImNvbmZpcm1fc3RyZWFtOiAgT0tcbiIpOworZWxzZQorCUpPVCg4LCAiY29uZmlybV9zdHJlYW06ICBTVFVDS1xuIik7CityZXR1cm4gMDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50CitzZXR1cF9zdGsoc3RydWN0IHVzYl9kZXZpY2UgKnApCit7CitpbnQgaTA7CisKK2kwID0gMDsKK3doaWxlICgweEZGRiAhPSBzdGsxMTYwY29uZmlnW2kwXS5yZWcpIHsKKwlTRVQocCwgc3RrMTE2MGNvbmZpZ1tpMF0ucmVnLCBzdGsxMTYwY29uZmlnW2kwXS5zZXQpOworCWkwKys7CisJfQorCit3cml0ZV8zMDAocCk7CisKK3JldHVybiAwOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQKK3NldHVwX3NhYShzdHJ1Y3QgdXNiX2RldmljZSAqcCkKK3sKK2ludCBpMCwgaXI7CisKKworc2V0MnRvNzgocCk7CisKKworaTAgPSAwOword2hpbGUgKDB4RkYgIT0gc2FhNzExM2NvbmZpZ1tpMF0ucmVnKSB7CisJaXIgPSB3cml0ZV9zYWEocCwgc2FhNzExM2NvbmZpZ1tpMF0ucmVnLCBzYWE3MTEzY29uZmlnW2kwXS5zZXQpOworCWkwKys7CisJfQorcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludAord3JpdGVfMDAwKHN0cnVjdCB1c2JfZGV2aWNlICpwLCBfX3UxNiBzZXQyLCBfX3UxNiBzZXQwKQoreworX191OCBpZ290MCwgaWdvdDI7CisKK0dFVChwLCAweDAwMDIsICZpZ290Mik7CitHRVQocCwgMHgwMDAwLCAmaWdvdDApOworU0VUKHAsIDB4MDAwMiwgc2V0Mik7CitTRVQocCwgMHgwMDAwLCBzZXQwKTsKK3JldHVybiAwOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQKK3dyaXRlX3NhYShzdHJ1Y3QgdXNiX2RldmljZSAqcCwgX191MTYgcmVnMCwgX191MTYgc2V0MCkKK3sKK1NFVChwLCAweDIwMCwgMHgwMCk7CitTRVQocCwgMHgyMDQsIHJlZzApOworU0VUKHAsIDB4MjA1LCBzZXQwKTsKK1NFVChwLCAweDIwMCwgMHgwMSk7CityZXR1cm4gd2FpdF9pMmMocCk7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBSRUdJU1RFUiA1MDA6ICBTRVRUSU5HIFZBTFVFIFRPIDB4MDA4QiBSRUFEUyBGUk9NIFZUMTYxMkEgKD8pCisgKiAgUkVHSVNURVIgNTAwOiAgU0VUVElORyBWQUxVRSBUTyAweDAwOEMgV1JJVEVTIFRPICBWVDE2MTJBCisgKiAgUkVHSVNURVIgNTAyOiAgTEVBU1QgU0lHTklGSUNBTlQgQllURSBPRiBWQUxVRSBUTyBTRVQKKyAqICBSRUdJU1RFUiA1MDM6ICBNT1NUIFNJR05JRklDQU5UIEJZVEUgT0YgVkFMVUUgVE8gU0VUCisgKiAgUkVHSVNURVIgNTA0OiAgVEFSR0VUIEFERFJFU1MgT04gVlQxNjEyQQorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludAord3JpdGVfdnQoc3RydWN0IHVzYl9kZXZpY2UgKnAsIF9fdTE2IHJlZzAsIF9fdTE2IHNldDApCit7CitfX3U4IGlnb3Q7CitfX3UxNiBnb3Q1MDIsIGdvdDUwMzsKK19fdTE2IHNldDUwMiwgc2V0NTAzOworCitTRVQocCwgMHgwNTA0LCByZWcwKTsKK1NFVChwLCAweDA1MDAsIDB4MDA4Qik7CisKK0dFVChwLCAweDA1MDIsICZpZ290KTsgIGdvdDUwMiA9ICgweEZGICYgaWdvdCk7CitHRVQocCwgMHgwNTAzLCAmaWdvdCk7ICBnb3Q1MDMgPSAoMHhGRiAmIGlnb3QpOworCitKT1QoMTYsICJ3cml0ZV92dCguLCAweCUwNFgsIDB4JTA0WCk6IHdhcyAweCUwNFhcbiIsIFwKKwkJCQkJcmVnMCwgc2V0MCwgKChnb3Q1MDMgPDwgOCkgfCBnb3Q1MDIpKTsKKworc2V0NTAyID0gICgweDAwRkYgJiBzZXQwKTsKK3NldDUwMyA9ICgoMHhGRjAwICYgc2V0MCkgPj4gOCk7CisKK1NFVChwLCAweDA1MDQsIHJlZzApOworU0VUKHAsIDB4MDUwMiwgc2V0NTAyKTsKK1NFVChwLCAweDA1MDMsIHNldDUwMyk7CitTRVQocCwgMHgwNTAwLCAweDAwOEMpOworCityZXR1cm4gMDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFJFR0lTVEVSIDUwMDogIFNFVFRJTkcgVkFMVUUgVE8gMHgwMDhCIFJFQURTIEZST00gVlQxNjEyQSAoPykKKyAqICBSRUdJU1RFUiA1MDA6ICBTRVRUSU5HIFZBTFVFIFRPIDB4MDA4QyBXUklURVMgVE8gIFZUMTYxMkEKKyAqICBSRUdJU1RFUiA1MDI6ICBMRUFTVCBTSUdOSUZJQ0FOVCBCWVRFIE9GIFZBTFVFIFRPIEdFVAorICogIFJFR0lTVEVSIDUwMzogIE1PU1QgU0lHTklGSUNBTlQgQllURSBPRiBWQUxVRSBUTyBHRVQKKyAqICBSRUdJU1RFUiA1MDQ6ICBUQVJHRVQgQUREUkVTUyBPTiBWVDE2MTJBCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CityZWFkX3Z0KHN0cnVjdCB1c2JfZGV2aWNlICpwLCBfX3UxNiByZWcwKQoreworX191OCBpZ290OworX191MTYgZ290NTAyLCBnb3Q1MDM7CisKK1NFVChwLCAweDA1MDQsIHJlZzApOworU0VUKHAsIDB4MDUwMCwgMHgwMDhCKTsKKworR0VUKHAsIDB4MDUwMiwgJmlnb3QpOyAgZ290NTAyID0gKDB4RkYgJiBpZ290KTsKK0dFVChwLCAweDA1MDMsICZpZ290KTsgIGdvdDUwMyA9ICgweEZGICYgaWdvdCk7CisKK0pPVCgxNiwgInJlYWRfdnQoLiwgMHglMDRYKTogaGFzIDB4JTA0WFxuIiwgcmVnMCwgKChnb3Q1MDMgPDwgOCkgfCBnb3Q1MDIpKTsKKworcmV0dXJuIChnb3Q1MDMgPDwgOCkgfCBnb3Q1MDI7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBUSEVTRSBBUFBFQVIgVE8gSEFWRSBOTyBFRkZFQ1QgT04gRUlUSEVSIFZJREVPIE9SIEFVRElPLgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludAord3JpdGVfMzAwKHN0cnVjdCB1c2JfZGV2aWNlICpwKQoreworU0VUKHAsIDB4MzAwLCAweDAwMTIpOworU0VUKHAsIDB4MzUwLCAweDAwMkQpOworU0VUKHAsIDB4MzUxLCAweDAwMDEpOworU0VUKHAsIDB4MzUyLCAweDAwMDApOworU0VUKHAsIDB4MzUzLCAweDAwMDApOworU0VUKHAsIDB4MzAwLCAweDAwODApOworcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBOT1RFOiBUSEUgRk9MTE9XSU5HIElTIE5PVCBDSEVDS0VEOgorICogIFJFR0lTVEVSIDB4MEYsIFdISUNIIElTIElOVk9MVkVEIElOIENIUk9NSU5BTkNFIEFVVE9NQVRJQyBHQUlOIENPTlRST0wuCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CitjaGVja19zYWEoc3RydWN0IHVzYl9kZXZpY2UgKnApCit7CitpbnQgaTAsIGlyLCByYzsKK2kwID0gMDsKKworcmMgPSAwOword2hpbGUgKDB4RkYgIT0gc2FhNzExM2NvbmZpZ1tpMF0ucmVnKSB7CisJaWYgKDB4MEYgPT0gc2FhNzExM2NvbmZpZ1tpMF0ucmVnKSB7CisJCWkwKys7IGNvbnRpbnVlOworCX0KKworCWlyID0gcmVhZF9zYWEocCwgc2FhNzExM2NvbmZpZ1tpMF0ucmVnKTsKKwlpZiAoaXIgIT0gc2FhNzExM2NvbmZpZ1tpMF0uc2V0KSB7CisJCVNBWSgiU0FBIHJlZ2lzdGVyIDB4JTAyWCBoYXMgMHglMDJYLCBleHBlY3RlZCAweCUwMlhcbiIsIFwKKwkJCXNhYTcxMTNjb25maWdbaTBdLnJlZywgaXIsIHNhYTcxMTNjb25maWdbaTBdLnNldCk7CisJCXJjLS07CisJfQorCWkwKys7Cit9CitpZiAoLTggPiByYykKKwlyZXR1cm4gcmM7CitlbHNlCisJcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludAorbWVyaXRfc2FhKHN0cnVjdCB1c2JfZGV2aWNlICpwKQoreworaW50IHJjOworCityYyA9IHJlYWRfc2FhKHAsIDB4MUYpOworaWYgKCgwID4gcmMpIHx8ICgweDAyICYgcmMpKQorCXJldHVybiAxIDsKK2Vsc2UKKwlyZXR1cm4gMDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50CityZWFkeV9zYWEoc3RydWN0IHVzYl9kZXZpY2UgKnApCit7CitpbnQgaiwgcmM7CitzdGF0aWMgaW50IG1heCA9IDEwOworCitqID0gMDsKK3doaWxlIChtYXggPiBqKSB7CisJcmMgPSByZWFkX3NhYShwLCAweDFGKTsKKwlpZiAoMCA8PSByYykgeworCQlpZiAoKDEgPT0gKDB4MDEgJiByYykpJiYoMCA9PSAoMHg0MCAmIHJjKSkpCisJCQlicmVhazsKKwl9CisJbXNsZWVwKDEwMCk7ICBqKys7Cit9CitpZiAobWF4ID09IGopCisJcmV0dXJuIC0xOworZWxzZSB7CisJaWYgKDB4MjAgJiByYykKKwkJSk9UKDgsICJoYXJkd2FyZSBkZXRlY3RzIDYwIEh6XG4iKTsKKwllbHNlCisJCUpPVCg4LCAiaGFyZHdhcmUgZGV0ZWN0cyA1MCBIelxuIik7CisJaWYgKDB4ODAgJiByYykKKwkJSk9UKDgsICJoYXJkd2FyZSBkZXRlY3RzIGludGVybGFjaW5nXG4iKTsKKwllbHNlCisJCUpPVCg4LCAiaGFyZHdhcmUgZGV0ZWN0cyBubyBpbnRlcmxhY2luZ1xuIik7Cit9CityZXR1cm4gMDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIE5PVEU6IFRIRSBGT0xMT1dJTkcgQVJFIE5PVCBDSEVDS0VEOgorICogIFJFR0lTVEVSUyAweDAwMCwgMHgwMDI6ICBGVU5DVElPTkFMSVRZIElTIE5PVCBLTk9XTgorICogIFJFR0lTVEVSICAweDEwMDogIEFDQ0VQVCBBTFNPICgweDgwIHwgc3RrMTE2MGNvbmZpZ1suXS5zZXQpCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CitjaGVja19zdGsoc3RydWN0IHVzYl9kZXZpY2UgKnApCit7CitpbnQgaTAsIGlyOworaTAgPSAwOword2hpbGUgKDB4RkZGICE9IHN0azExNjBjb25maWdbaTBdLnJlZykgeworCWlmICgweDAwMCA9PSBzdGsxMTYwY29uZmlnW2kwXS5yZWcpIHsKKwkJaTArKzsgY29udGludWU7CisJfQorCWlmICgweDAwMiA9PSBzdGsxMTYwY29uZmlnW2kwXS5yZWcpIHsKKwkJaTArKzsgY29udGludWU7CisJfQorCisJaXIgPSByZWFkX3N0ayhwLCBzdGsxMTYwY29uZmlnW2kwXS5yZWcpOworCisJaWYgKDB4MTAwID09IHN0azExNjBjb25maWdbaTBdLnJlZykgeworCQlpZiAoKGlyICE9ICgweEZGICYgc3RrMTE2MGNvbmZpZ1tpMF0uc2V0KSkgJiYgXAorCQkJKGlyICE9ICgweDgwIHwgKDB4RkYgJiBzdGsxMTYwY29uZmlnW2kwXS5zZXQpKSkgJiYgXAorCQkJCSgweEZGRkYgIT0gc3RrMTE2MGNvbmZpZ1tpMF0uc2V0KSkgeworCQkJU0FZKCJTVEsgcmVnaXN0ZXIgMHglMDNYIGhhcyAweCUwMlgsICIgXAorCQkJCQkiZXhwZWN0ZWQgMHglMDJYXG4iLCBcCisJCQkJCXN0azExNjBjb25maWdbaTBdLnJlZywgaXIsIFwKKwkJCQkJc3RrMTE2MGNvbmZpZ1tpMF0uc2V0KTsKKwkJCX0KKwkJaTArKzsgY29udGludWU7CisJCX0KKworCWlmICgoaXIgIT0gKDB4RkYgJiBzdGsxMTYwY29uZmlnW2kwXS5zZXQpKSAmJiBcCisJCQkoMHhGRkZGICE9IHN0azExNjBjb25maWdbaTBdLnNldCkpIHsKKwkJU0FZKCJTVEsgcmVnaXN0ZXIgMHglMDNYIGhhcyAweCUwMlgsICIgXAorCQkJCQkiZXhwZWN0ZWQgMHglMDJYXG4iLCBcCisJCQkJCXN0azExNjBjb25maWdbaTBdLnJlZywgaXIsIFwKKwkJCQkJc3RrMTE2MGNvbmZpZ1tpMF0uc2V0KTsKKwkJfQorCWkwKys7CisJfQorcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludAorcmVhZF9zYWEoc3RydWN0IHVzYl9kZXZpY2UgKnAsIF9fdTE2IHJlZzApCit7CitfX3U4IGlnb3Q7CisKK1NFVChwLCAweDIwOCwgcmVnMCk7CitTRVQocCwgMHgyMDAsIDB4MjApOworaWYgKDAgIT0gd2FpdF9pMmMocCkpCisJcmV0dXJuIC0xOworaWdvdCA9IDA7CitHRVQocCwgMHgwMjA5LCAmaWdvdCk7CityZXR1cm4gaWdvdDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50CityZWFkX3N0ayhzdHJ1Y3QgdXNiX2RldmljZSAqcCwgX191MzIgcmVnMCkKK3sKK19fdTggaWdvdDsKKworaWdvdCA9IDA7CitHRVQocCwgcmVnMCwgJmlnb3QpOworcmV0dXJuIGlnb3Q7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogICAgSEFSRFdBUkUgICAgVVNFUlNQQUNFIElOUFVUIE5VTUJFUiAgIFBIWVNJQ0FMIElOUFVUICAgRFJJVkVSIGlucHV0IFZBTFVFCisgKgorICogIENWQlMrUy1WSURFTyAgICAgICAgICAgMCBvciAxICAgICAgICAgICAgICBDVkJTICAgICAgICAgICAgICAgICAxCisgKiAgIEZPVVItQ1ZCUyAgICAgICAgICAgICAwIG9yIDEgICAgICAgICAgICAgIENWQlMxICAgICAgICAgICAgICAgIDEKKyAqICAgRk9VUi1DVkJTICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgQ1ZCUzIgICAgICAgICAgICAgICAgMgorICogICBGT1VSLUNWQlMgICAgICAgICAgICAgICAgMyAgICAgICAgICAgICAgICBDVkJTMyAgICAgICAgICAgICAgICAzCisgKiAgIEZPVVItQ1ZCUyAgICAgICAgICAgICAgICA0ICAgICAgICAgICAgICAgIENWQlM0ICAgICAgICAgICAgICAgIDQKKyAqICBDVkJTK1MtVklERU8gICAgICAgICAgICAgIDUgICAgICAgICAgICAgICBTLVZJREVPICAgICAgICAgICAgICAgNQorICoKKyAqICBXSEVOIDU9PWlucHV0IFRIRSBBUkdVTUVOVCBtb2RlIE1VU1QgQUxTTyBCRSBTVVBQTElFRDoKKyAqCisgKiAgICAgbW9kZSAgNyAgID0+IEdBSU4gVE8gQkUgU0VUIEVYUExJQ0lUTFkgVVNJTkcgUkVHSVNURVIgMHgwNSAoVU5URVNURUQpCisgKiAgICAgbW9kZSAgOSAgID0+IFVTRSBBVVRPTUFUSUMgR0FJTiBDT05UUk9MIChERUZBVUxUKQorICoKKyovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQKK3NlbGVjdF9pbnB1dChzdHJ1Y3QgdXNiX2RldmljZSAqcCwgaW50IGlucHV0LCBpbnQgbW9kZSkKK3sKKworc3RvcF8xMDAocCk7CisKK21zbGVlcCgyMCk7Citzd2l0Y2ggKGlucHV0KSB7CitjYXNlIDA6CitjYXNlIDE6IHsKKwlTRVQocCwgMHgwMDAwLCAweDAwOTgpOyBicmVhazsKK30KK2Nhc2UgMjogeworCVNFVChwLCAweDAwMDAsIDB4MDA5MCk7IGJyZWFrOworfQorY2FzZSAzOiB7CisJU0VUKHAsIDB4MDAwMCwgMHgwMDg4KTsgYnJlYWs7Cit9CitjYXNlIDQ6IHsKKwlTRVQocCwgMHgwMDAwLCAweDAwODApOyBicmVhazsKK30KK2Nhc2UgNTogeworCWlmICg5ICE9IG1vZGUpCisJCW1vZGUgPSA3OworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgNzoKKwkJeworCQlpZiAoMCAhPSB3cml0ZV9zYWEocCwgMHgwMiwgMHg4NykpIHsKKwkJCVNBWSgiRVJST1I6IGZhaWxlZCB0byBzZXQgU0FBICIgXAorCQkJCSJyZWdpc3RlciAweDAyIGZvciBpbnB1dCAiIFwKKwkJCQkiJWlcbiIsIGlucHV0KTsKKwkJfQorCQlpZiAoMCAhPSB3cml0ZV9zYWEocCwgMHgwNSwgMHhGRikpIHsKKwkJCVNBWSgiRVJST1I6IGZhaWxlZCB0byBzZXQgU0FBICIgXAorCQkJCSJyZWdpc3RlciAweDA1IGZvciBpbnB1dCAiIFwKKwkJCQkiJWlcbiIsIGlucHV0KTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSA5OgorCQl7CisJCWlmICgwICE9IHdyaXRlX3NhYShwLCAweDAyLCAweDg5KSkgeworCQkJU0FZKCJFUlJPUjogZmFpbGVkIHRvIHNldCBTQUEgIiBcCisJCQkJInJlZ2lzdGVyIDB4MDIgZm9yIGlucHV0ICIgXAorCQkJCSIlaVxuIiwgaW5wdXQpOworCQl9CisJCWlmICgwICE9IHdyaXRlX3NhYShwLCAweDA1LCAweDAwKSkgeworCQkJU0FZKCJFUlJPUjogZmFpbGVkIHRvIHNldCBTQUEgIiBcCisJCQkJInJlZ2lzdGVyIDB4MDUgZm9yIGlucHV0ICIgXAorCQkJCSIlaVxuIiwgaW5wdXQpOworCQl9CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQl7CisJCVNBWSgiTUlTVEFLRTogIGJhZCBtb2RlOiAlaVxuIiwgbW9kZSk7CisJCXJldHVybiAtMTsKKwkJfQorCX0KKwlpZiAoMCAhPSB3cml0ZV9zYWEocCwgMHgwNCwgMHgwMCkpIHsKKwkJU0FZKCJFUlJPUjogZmFpbGVkIHRvIHNldCBTQUEgcmVnaXN0ZXIgMHgwNCAiIFwKKwkJCQkJImZvciBpbnB1dCAlaVxuIiwgaW5wdXQpOworCX0KKwlpZiAoMCAhPSB3cml0ZV9zYWEocCwgMHgwOSwgMHg4MCkpIHsKKwkJU0FZKCJFUlJPUjogZmFpbGVkIHRvIHNldCBTQUEgcmVnaXN0ZXIgMHgwOSAiIFwKKwkJCQkJImZvciBpbnB1dCAlaVxuIiwgaW5wdXQpOworCX0KKwlicmVhazsKK30KK2RlZmF1bHQ6CisJeworCVNBWSgiRVJST1I6ICBiYWQgaW5wdXQ6ICVpXG4iLCBpbnB1dCk7CisJcmV0dXJuIC0xOworfQorfQorbXNsZWVwKDIwKTsKK1NFVChwLCAweDAwMDIsIDB4MDA5Myk7Cittc2xlZXAoMjApOworCitzdGFydF8xMDAocCk7CisKK3JldHVybiAwOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQKK3NldF9yZXNvbHV0aW9uKHN0cnVjdCB1c2JfZGV2aWNlICpwLCBcCisJCQkJX191MTYgc2V0MCwgX191MTYgc2V0MSwgX191MTYgc2V0MiwgX191MTYgc2V0MykKK3sKK19fdTE2IHUweDAxMTEsIHUweDAxMTMsIHUweDAxMTUsIHUweDAxMTc7CisKK3UweDAxMTEgPSAoKDB4RkYwMCAmIHNldDApID4+IDgpOwordTB4MDExMyA9ICgoMHhGRjAwICYgc2V0MSkgPj4gOCk7Cit1MHgwMTE1ID0gKCgweEZGMDAgJiBzZXQyKSA+PiA4KTsKK3UweDAxMTcgPSAoKDB4RkYwMCAmIHNldDMpID4+IDgpOworCitTRVQocCwgMHgwMTEwLCAoMHgwMEZGICYgc2V0MCkpOworU0VUKHAsIDB4MDExMSwgdTB4MDExMSk7CitTRVQocCwgMHgwMTEyLCAoMHgwMEZGICYgc2V0MSkpOworU0VUKHAsIDB4MDExMywgdTB4MDExMyk7CitTRVQocCwgMHgwMTE0LCAoMHgwMEZGICYgc2V0MikpOworU0VUKHAsIDB4MDExNSwgdTB4MDExNSk7CitTRVQocCwgMHgwMTE2LCAoMHgwMEZGICYgc2V0MykpOworU0VUKHAsIDB4MDExNywgdTB4MDExNyk7CisKK3JldHVybiAwOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQKK3N0YXJ0XzEwMChzdHJ1Y3QgdXNiX2RldmljZSAqcCkKK3sKK19fdTE2IGdldDA7CitfX3U4IGlnb3Q7CisKK0dFVChwLCAweDAxMDAsICZpZ290KTsgIGdldDAgPSBpZ290OworbXNsZWVwKDB4MWY0KTsKK1NFVChwLCAweDAxMDAsICgweDgwIHwgZ2V0MCkpOworbXNsZWVwKDB4MWY0KTsKK3JldHVybiAwOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQKK3N0b3BfMTAwKHN0cnVjdCB1c2JfZGV2aWNlICpwKQoreworX191MTYgZ2V0MDsKK19fdTggaWdvdDsKKworR0VUKHAsIDB4MDEwMCwgJmlnb3QpOyAgZ2V0MCA9IGlnb3Q7Cittc2xlZXAoMHgxZjQpOworU0VUKHAsIDB4MDEwMCwgKDB4N0YgJiBnZXQwKSk7Cittc2xlZXAoMHgxZjQpOworcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBGVU5DVElPTiB3YWl0X2kyYygpIFJFVFVSTlMgMCBPTiBTVUNDRVNTCisqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQKK3dhaXRfaTJjKHN0cnVjdCB1c2JfZGV2aWNlICpwKQoreworX191MTYgZ2V0MDsKK19fdTggaWdvdDsKK2NvbnN0IGludCBtYXggPSA0OworaW50IGs7CisKK2ZvciAoayA9IDA7ICBrIDwgbWF4OyAgaysrKSB7CisJR0VUKHAsIDB4MDIwMSwgJmlnb3QpOyAgZ2V0MCA9IGlnb3Q7CisJc3dpdGNoIChnZXQwKSB7CisJY2FzZSAweDA0OgorCWNhc2UgMHgwMTogeworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSAweDAwOiB7CisJCW1zbGVlcCgxMCk7CisJCWNvbnRpbnVlOworCX0KKwlkZWZhdWx0OiB7CisJCXJldHVybiBnZXQwIC0gMTsKKwl9CisJfQorfQorcmV0dXJuIC0xOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQKK3JlZ3NldChzdHJ1Y3QgdXNiX2RldmljZSAqcHVzYl9kZXZpY2UsIF9fdTE2IGluZGV4LCBfX3UxNiB2YWx1ZSkKK3sKK19fdTE2IGlnb3Q7CitpbnQgcmMwLCByYzE7CisKK2lmICghcHVzYl9kZXZpY2UpCisJcmV0dXJuIC1FRkFVTFQ7CisKK3JjMSA9IDA7ICBpZ290ID0gMDsKK3JjMCA9IHVzYl9jb250cm9sX21zZyhwdXNiX2RldmljZSwgdXNiX3NuZGN0cmxwaXBlKHB1c2JfZGV2aWNlLCAwKSwgXAorCQkoX191OCkweDAxLCBcCisJCShfX3U4KShVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UpLCBcCisJCShfX3UxNil2YWx1ZSwgXAorCQkoX191MTYpaW5kZXgsIFwKKwkJKHZvaWQgKilOVUxMLCBcCisJCShfX3UxNikwLCBcCisJCShpbnQpNTAwKTsKKworI2lmIGRlZmluZWQoTk9SRUFEQkFDSykKKyMKKyNlbHNlCityYzEgPSB1c2JfY29udHJvbF9tc2cocHVzYl9kZXZpY2UsIHVzYl9yY3ZjdHJscGlwZShwdXNiX2RldmljZSwgMCksIFwKKwkJKF9fdTgpMHgwMCwgXAorCQkoX191OCkoVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UpLCBcCisJCShfX3UxNikweDAwLCBcCisJCShfX3UxNilpbmRleCwgXAorCQkodm9pZCAqKSZpZ290LCBcCisJCShfX3UxNilzaXplb2YoX191MTYpLCBcCisJCShpbnQpNTAwMDApOworaWdvdCA9IDB4RkYgJiBpZ290Oworc3dpdGNoIChpbmRleCkgeworY2FzZSAweDAwMDoKK2Nhc2UgMHg1MDA6CitjYXNlIDB4NTAyOgorY2FzZSAweDUwMzoKK2Nhc2UgMHg1MDQ6CitjYXNlIDB4NTA2OgorY2FzZSAweDUwNzogeworCWJyZWFrOworfQorY2FzZSAweDIwNDoKK2Nhc2UgMHgyMDU6CitjYXNlIDB4MzUwOgorY2FzZSAweDM1MTogeworCWlmICgwICE9IGlnb3QpIHsKKwkJSk9UKDgsICJ1bmV4cGVjdGVkIDB4JTAyWCBmb3IgU1RLIHJlZ2lzdGVyIDB4JTAzWFxuIiwgXAorCQkJCQkJCQlpZ290LCBpbmRleCk7CisJfQorYnJlYWs7Cit9CitjYXNlIDB4MTE0OgorY2FzZSAweDExNjogeworCWlmICgoMHhGRiAmIHZhbHVlKSAhPSBpZ290KSB7CisJCUpPVCg4LCAidW5leHBlY3RlZCAweCUwMlggIT0gMHglMDJYICIgXAorCQkJCQkJImZvciBTVEsgcmVnaXN0ZXIgMHglMDNYXG4iLCBcCisJCQkJCQlpZ290LCB2YWx1ZSwgaW5kZXgpOworCX0KK2JyZWFrOworfQorY2FzZSAweDIwMDogeworCWlmICgwID09IGlnb3QpCisJCWJyZWFrOworfQorZGVmYXVsdDogeworCWlmICh2YWx1ZSAhPSBpZ290KSB7CisJCUpPVCg4LCAidW5leHBlY3RlZCAweCUwMlggIT0gMHglMDJYICIgXAorCQkJCQkiZm9yIFNUSyByZWdpc3RlciAweCUwM1hcbiIsIFwKKwkJCQkJaWdvdCwgdmFsdWUsIGluZGV4KTsKKwl9CiticmVhazsKK30KK30KKyNlbmRpZiAvKiAhIE5PUkVBREJBQ0sqLworCityZXR1cm4gKDAgPiByYzApID8gcmMwIDogcmMxOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50CityZWdnZXQoc3RydWN0IHVzYl9kZXZpY2UgKnB1c2JfZGV2aWNlLCBfX3UxNiBpbmRleCwgdm9pZCAqcHZvaWQpCit7CitpbnQgaXI7CisKK2lmICghcHVzYl9kZXZpY2UpCisJcmV0dXJuIC1FRkFVTFQ7CisKK2lyID0gdXNiX2NvbnRyb2xfbXNnKHB1c2JfZGV2aWNlLCB1c2JfcmN2Y3RybHBpcGUocHVzYl9kZXZpY2UsIDApLCBcCisJCShfX3U4KTB4MDAsIFwKKwkJKF9fdTgpKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFKSwgXAorCQkoX191MTYpMHgwMCwgXAorCQkoX191MTYpaW5kZXgsIFwKKwkJKHZvaWQgKilwdm9pZCwgXAorCQlzaXplb2YoX191OCksIFwKKwkJKGludCk1MDAwMCk7CityZXR1cm4gMHhGRiAmIGlyOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50Cit3YWtldXBfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICpwdXNiX2RldmljZSkKK3sKK3JldHVybiB1c2JfY29udHJvbF9tc2cocHVzYl9kZXZpY2UsIHVzYl9zbmRjdHJscGlwZShwdXNiX2RldmljZSwgMCksIFwKKwkJKF9fdTgpVVNCX1JFUV9TRVRfRkVBVFVSRSwgXAorCQkoX191OCkoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9TVEFOREFSRCB8IFVTQl9SRUNJUF9ERVZJQ0UpLCBcCisJCVVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCwgXAorCQkoX191MTYpMCwgXAorCQkodm9pZCAqKSBOVUxMLCBcCisJCShfX3UxNikwLCBcCisJCShpbnQpNTAwMDApOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTVBPUlRBTlQ6CisgKiAgVEhFIE1FU1NBR0UgT0YgVFlQRSAoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UpCisgKiAgQ0FVU0VTIE1VVElORyBJRiBUSEUgVkFMVUUgMHgwMTAwIElTIFNFTlQuCisgKiAgVE8gRU5BQkxFIEFVRElPICBUSEUgVkFMVUUgMHgwMjAwIE1VU1QgQkUgU0VOVC4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CithdWRpb19zZXR1cChzdHJ1Y3QgZWFzeWNhcCAqcGVhc3ljYXApCit7CitzdHJ1Y3QgdXNiX2RldmljZSAqcHVzYl9kZXZpY2U7CitzdGF0aWMgX191OCByZXF1ZXN0ID0gMHgwMTsKK3N0YXRpYyBfX3U4IHJlcXVlc3R0eXBlID0gXAorCQkoX191OCkoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UpOworCitzdGF0aWMgX191MTYgdmFsdWVfdW5tdXRlID0gMHgwMjAwOworc3RhdGljIF9fdTE2IGluZGV4ID0gMHgwMzAxOworCitzdGF0aWMgdW5zaWduZWQgY2hhciBidWZmZXJbMV07CitzdGF0aWMgX191MTYgbGVuZ3RoID0gMTsKK2ludCByYywgaWQxLCBpZDI7CisKK2lmIChOVUxMID09IHBlYXN5Y2FwKQorCXJldHVybiAtRUZBVUxUOworCitwdXNiX2RldmljZSA9IHBlYXN5Y2FwLT5wdXNiX2RldmljZTsKK2lmIChOVUxMID09IHB1c2JfZGV2aWNlKQorCXJldHVybiAtRUZBVUxUOworCitKT1QoOCwgIiUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWFxuIiwJXAorCQkJcmVxdWVzdHR5cGUsIHJlcXVlc3QsCQlcCisJCQkoMHgwMEZGICYgdmFsdWVfdW5tdXRlKSwJXAorCQkJKDB4RkYwMCAmIHZhbHVlX3VubXV0ZSkgPj4gOCwJXAorCQkJKDB4MDBGRiAmIGluZGV4KSwJCVwKKwkJCSgweEZGMDAgJiBpbmRleCkgPj4gOCwJCVwKKwkJCSgweDAwRkYgJiBsZW5ndGgpLAkJXAorCQkJKDB4RkYwMCAmIGxlbmd0aCkgPj4gOCk7CisKK2J1ZmZlclswXSA9IDB4MDE7CisKK3JjID0gdXNiX2NvbnRyb2xfbXNnKHB1c2JfZGV2aWNlLCB1c2Jfc25kY3RybHBpcGUocHVzYl9kZXZpY2UsIDApLAlcCisJCQkoX191OClyZXF1ZXN0LAkJCQkJXAorCQkJKF9fdTgpcmVxdWVzdHR5cGUsCQkJCVwKKwkJCShfX3UxNil2YWx1ZV91bm11dGUsCQkJCVwKKwkJCShfX3UxNilpbmRleCwJCQkJCVwKKwkJCSh2b2lkICopJmJ1ZmZlclswXSwJCQkJXAorCQkJKF9fdTE2KWxlbmd0aCwJCQkJCVwKKwkJCShpbnQpNTAwMDApOworCitKT1QoOCwgIjB4JTAyWD1idWZmZXJcbiIsICooKF9fdTggKikgJmJ1ZmZlclswXSkpOworaWYgKHJjICE9IChpbnQpbGVuZ3RoKQorCVNBWSgiRVJST1I6IHVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlaVxuIiwgcmMpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgUkVHSVNURVIgNTAwOiAgU0VUVElORyBWQUxVRSBUTyAweDAwOTQgUkVTRVRTIEFVRElPIENPTkZJR1VSQVRJT04gPz8/CisgKiAgUkVHSVNURVIgNTA2OiAgQU5BTE9HVUUgQVVESU8gQVRURU5UVUFUT1IgPz8/CisgKiAgICAgICAgICAgICAgICAgRk9SIFRIRSBDVkJTK1MtVklERU8gSEFSRFdBUkU6CisgKiAgICAgICAgICAgICAgICAgICAgU0VUVElORyBWQUxVRSBUTyAweDAwMDAgR0lWRVMgUVVJRVQgU09VTkQuCisgKiAgICAgICAgICAgICAgICAgICAgVEhFIFVQUEVSIEJZVEUgU0VFTVMgVE8gSEFWRSBOTyBFRkZFQ1QuCisgKiAgICAgICAgICAgICAgICAgRk9SIFRIRSBGT1VSLUNWQlMgSEFSRFdBUkU6CisgKiAgICAgICAgICAgICAgICAgICAgU0VUVElORyBWQUxVRSBUTyAweDAwMDAgU0VFTVMgVE8gSEFWRSBOTyBFRkZFQ1QuCisgKiAgUkVHSVNURVIgNTA3OiAgQU5BTE9HVUUgQVVESU8gUFJFQU1QTElGSUVSIE9OL09GRiA/Pz8KKyAqICAgICAgICAgICAgICAgICBGT1IgVEhFIENWQlMtUy1WSURFTyBIQVJEV0FSRToKKyAqICAgICAgICAgICAgICAgICAgICBTRVRUSU5HIFZBTFVFIFRPIDB4MDAwMSBHSVZFUyBWRVJZIExPVUQsIERJU1RPUlRFRCBTT1VORC4KKyAqICAgICAgICAgICAgICAgICAgICBUSEUgVVBQRVIgQllURSBTRUVNUyBUTyBIQVZFIE5PIEVGRkVDVC4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK1NFVChwdXNiX2RldmljZSwgMHgwNTAwLCAweDAwOTQpOworCitTRVQocHVzYl9kZXZpY2UsIDB4MDUwMCwgMHgwMDhDKTsKKworU0VUKHB1c2JfZGV2aWNlLCAweDA1MDYsIDB4MDAwMSk7CitTRVQocHVzYl9kZXZpY2UsIDB4MDUwNywgMHgwMDAwKTsKKworaWQxID0gcmVhZF92dChwdXNiX2RldmljZSwgMHgwMDdDKTsKK2lkMiA9IHJlYWRfdnQocHVzYl9kZXZpY2UsIDB4MDA3RSk7CitTQVkoIjB4JTA0WDoweCUwNFggaXMgYXVkaW8gdmVuZG9yIGlkXG4iLCBpZDEsIGlkMik7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisqICAgU0VMRUNUIEFVRElPIFNPVVJDRSAiTElORSBJTiIgQU5EIFNFVCBERUZBVUxUIEdBSU4gVE8gMCBkQi4KKyoKKyogICBUSEVTRSBDT01NQU5EUyBTRUVNIFRPIEJFIEFDQ0VQVEVEIChUSE9VR0ggUE9TU0lCTFkgSUdOT1JFRCkgRVZFTiBXSEVOCisqICAgVEhFUkUgSVMgTk8gU0VQQVJBVEUgQVVESU8gQ0hJUCBQUkVTRU5ULgorKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKword3JpdGVfdnQocHVzYl9kZXZpY2UsIDB4MDAwMiwgMHg4MDAwKTsKK3dyaXRlX3Z0KHB1c2JfZGV2aWNlLCAweDAwMUMsIDB4ODAwMCk7CisKK3dyaXRlX3Z0KHB1c2JfZGV2aWNlLCAweDAwMEUsIDB4MDAwMCk7Cit3cml0ZV92dChwdXNiX2RldmljZSwgMHgwMDEwLCAweDAwMDApOword3JpdGVfdnQocHVzYl9kZXZpY2UsIDB4MDAxMiwgMHg4MDAwKTsKK3dyaXRlX3Z0KHB1c2JfZGV2aWNlLCAweDAwMTYsIDB4MDAwMCk7CisKK3dyaXRlX3Z0KHB1c2JfZGV2aWNlLCAweDAwMUEsIDB4MDQwNCk7Cit3cml0ZV92dChwdXNiX2RldmljZSwgMHgwMDAyLCAweDAwMDApOword3JpdGVfdnQocHVzYl9kZXZpY2UsIDB4MDAxQywgMHgwMDAwKTsKKworY2hlY2tfdnQocHVzYl9kZXZpY2UpOworCityZXR1cm4gMDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludAorY2hlY2tfdnQoc3RydWN0IHVzYl9kZXZpY2UgKnB1c2JfZGV2aWNlKQoreworaW50IGlnb3Q7CisKK2lnb3QgPSByZWFkX3Z0KHB1c2JfZGV2aWNlLCAweDAwMDIpOworaWYgKDAgPiBpZ290KQorCVNBWSgiRVJST1I6IGZhaWxlZCB0byByZWFkIFZUMTYxMkEgcmVnaXN0ZXIgMHgwMlxuIik7CitpZiAoMHg4MDAwICYgaWdvdCkKKwlTQVkoInJlZ2lzdGVyIDB4JTAyWCBtdXRlZFxuIiwgMHgwMik7CisKK2lnb3QgPSByZWFkX3Z0KHB1c2JfZGV2aWNlLCAweDAwMEUpOworaWYgKDAgPiBpZ290KQorCVNBWSgiRVJST1I6IGZhaWxlZCB0byByZWFkIFZUMTYxMkEgcmVnaXN0ZXIgMHgwRVxuIik7CitpZiAoMHg4MDAwICYgaWdvdCkKKwlTQVkoInJlZ2lzdGVyIDB4JTAyWCBtdXRlZFxuIiwgMHgwRSk7CisKK2lnb3QgPSByZWFkX3Z0KHB1c2JfZGV2aWNlLCAweDAwMTApOworaWYgKDAgPiBpZ290KQorCVNBWSgiRVJST1I6IGZhaWxlZCB0byByZWFkIFZUMTYxMkEgcmVnaXN0ZXIgMHgxMFxuIik7CitpZiAoMHg4MDAwICYgaWdvdCkKKwlTQVkoInJlZ2lzdGVyIDB4JTAyWCBtdXRlZFxuIiwgMHgxMCk7CisKK2lnb3QgPSByZWFkX3Z0KHB1c2JfZGV2aWNlLCAweDAwMTIpOworaWYgKDAgPiBpZ290KQorCVNBWSgiRVJST1I6IGZhaWxlZCB0byByZWFkIFZUMTYxMkEgcmVnaXN0ZXIgMHgxMlxuIik7CitpZiAoMHg4MDAwICYgaWdvdCkKKwlTQVkoInJlZ2lzdGVyIDB4JTAyWCBtdXRlZFxuIiwgMHgxMik7CisKK2lnb3QgPSByZWFkX3Z0KHB1c2JfZGV2aWNlLCAweDAwMTYpOworaWYgKDAgPiBpZ290KQorCVNBWSgiRVJST1I6IGZhaWxlZCB0byByZWFkIFZUMTYxMkEgcmVnaXN0ZXIgMHgxNlxuIik7CitpZiAoMHg4MDAwICYgaWdvdCkKKwlTQVkoInJlZ2lzdGVyIDB4JTAyWCBtdXRlZFxuIiwgMHgxNik7CisKK2lnb3QgPSByZWFkX3Z0KHB1c2JfZGV2aWNlLCAweDAwMUEpOworaWYgKDAgPiBpZ290KQorCVNBWSgiRVJST1I6IGZhaWxlZCB0byByZWFkIFZUMTYxMkEgcmVnaXN0ZXIgMHgxQVxuIik7CitpZiAoMHg4MDAwICYgaWdvdCkKKwlTQVkoInJlZ2lzdGVyIDB4JTAyWCBtdXRlZFxuIiwgMHgxQSk7CisKK2lnb3QgPSByZWFkX3Z0KHB1c2JfZGV2aWNlLCAweDAwMUMpOworaWYgKDAgPiBpZ290KQorCVNBWSgiRVJST1I6IGZhaWxlZCB0byByZWFkIFZUMTYxMkEgcmVnaXN0ZXIgMHgxQ1xuIik7CitpZiAoMHg4MDAwICYgaWdvdCkKKwlTQVkoInJlZ2lzdGVyIDB4JTAyWCBtdXRlZFxuIiwgMHgxQyk7CisKK3JldHVybiAwOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBOT1RFOiAgVEhJUyBET0VTIElOQ1JFQVNFIFRIRSBWT0xVTUUgRFJBTUFUSUNBTExZOgorICogICAgICAgICBhdWRpb19nYWluc2V0KHB1c2JfZGV2aWNlLCAweDAwMEYpOworICoKKyAqICBJRiAxNjxsb3VkPDMxIFZUMTYyMUEgUkVHSVNURVIgMHgxQyBJUyBTRVQgRk9SIFBPU0lUSVZFIEdBSU4uCisgKiAgSUYgbG91ZDw9MTYgVlQxNjIxQSBSRUdJU1RFUiAweDFDIElTIFNFVCBGT1IgWkVSTyBHQUlOLgorICogIFRIRVJFIElTIE5FVkVSIEFOWSAoQURESVRJT05BTCkgQVRURU5VQVRJT04uCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludAorYXVkaW9fZ2FpbnNldChzdHJ1Y3QgdXNiX2RldmljZSAqcHVzYl9kZXZpY2UsIF9fczggbG91ZCkKK3sKK2ludCBpZ290OworX191OCB1ODsKK19fdTE2IG11dGU7CisKK2lmICgxNiA+IGxvdWQpCisJbG91ZCA9IDE2OwordTggPSAweDAwMEYgJiAoX191OCkobG91ZCAtIDE2KTsKKword3JpdGVfdnQocHVzYl9kZXZpY2UsIDB4MDAwMiwgMHg4MDAwKTsKKworaWdvdCA9IHJlYWRfdnQocHVzYl9kZXZpY2UsIDB4MDAxQyk7CitpZiAoMCA+IGlnb3QpIHsKKwlTQVkoIkVSUk9SOiBmYWlsZWQgdG8gcmVhZCBWVDE2MTJBIHJlZ2lzdGVyIDB4MUNcbiIpOworCW11dGUgPSAweDAwMDA7Cit9IGVsc2UKKwltdXRlID0gMHg4MDAwICYgKCh1bnNpZ25lZCBpbnQpaWdvdCk7CisKK0pPVCg4LCAiMHglMDRYPShtdXRlfHU4fCh1ODw8OCkpXG4iLCBtdXRlIHwgdTggfCAodTggPDwgOCkpOworCit3cml0ZV92dChwdXNiX2RldmljZSwgMHgwMDFDLCAweDgwMDApOword3JpdGVfdnQocHVzYl9kZXZpY2UsIDB4MDAxQywgKG11dGUgfCB1OCB8ICh1OCA8PCA4KSkpOword3JpdGVfdnQocHVzYl9kZXZpY2UsIDB4MDAwMiwgMHgwMDAwKTsKKworcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQKK2F1ZGlvX2dhaW5nZXQoc3RydWN0IHVzYl9kZXZpY2UgKnB1c2JfZGV2aWNlKQoreworaW50IGlnb3Q7CisKK2lnb3QgPSByZWFkX3Z0KHB1c2JfZGV2aWNlLCAweDAwMUMpOworaWYgKDAgPiBpZ290KQorCVNBWSgiRVJST1I6IGZhaWxlZCB0byByZWFkIFZUMTYxMkEgcmVnaXN0ZXIgMHgxQ1xuIik7CityZXR1cm4gaWdvdDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludAorc2V0MnRvNzgoc3RydWN0IHVzYl9kZXZpY2UgKnApCit7CitpbnQgaXI7CisKK21zbGVlcCgyMCk7CitpciA9IHJlZ3NldChwLCAweDAwMDIsIDB4MDA3OCk7CitpZiAoMCA+IGlyKQorCVNBWSgiRVJST1I6IGZhaWxlZCB0byBzZXQgcmVnaXN0ZXIgMHgwMDAyIHRvIDB4MDA3OFxuIik7Cittc2xlZXAoMjApOworcmV0dXJuIGlyOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50CitzZXQydG85MyhzdHJ1Y3QgdXNiX2RldmljZSAqcCkKK3sKK2ludCBpcjsKKworbXNsZWVwKDIwKTsKK2lyID0gcmVnc2V0KHAsIDB4MDAwMiwgMHgwMDkzKTsKK2lmICgwID4gaXIpCisJU0FZKCJFUlJPUjogZmFpbGVkIHRvIHNldCByZWdpc3RlciAweDAwMDIgdG8gMHgwMDc4XG4iKTsKK21zbGVlcCgyMCk7CityZXR1cm4gaXI7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9lYXN5Y2FwX21haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy9lYXN5Y2FwL2Vhc3ljYXBfbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YzE5NGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9lYXN5Y2FwX21haW4uYwpAQCAtMCwwICsxLDQzNTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIGVhc3ljYXBfbWFpbi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIFZpZGVvIGRyaXZlciBmb3IgRWFzeUNBUCBVU0IyLjAgVmlkZW8gQ2FwdHVyZSBEZXZpY2UgREM2MCAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBSLk0uIFRob21hcyA8cm10aG9tYXNAc2Npb2x1cy5vcmc+CisgKgorICoKKyAqICBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhlIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImVhc3ljYXAuaCIKKyNpbmNsdWRlICJlYXN5Y2FwX3N0YW5kYXJkLmgiCisKK2ludCBlYXN5Y2FwX2RlYnVnOworbW9kdWxlX3BhcmFtKGVhc3ljYXBfZGVidWcsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFBBUkFNRVRFUlMgQVBQTElDQUJMRSBUTyBFTlRJUkUgRFJJVkVSLCBJLkUuIEJPVEggVklERU8gQU5EIEFVRElPCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0cnVjdCB1c2JfZGV2aWNlX2lkIGVhc3ljYXBfdXNiX2RldmljZV9pZF90YWJsZVtdID0geworeyBVU0JfREVWSUNFKFVTQl9FQVNZQ0FQX1ZFTkRPUl9JRCwgVVNCX0VBU1lDQVBfUFJPRFVDVF9JRCkgfSwKK3sgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBlYXN5Y2FwX3VzYl9kZXZpY2VfaWRfdGFibGUpOworc3RydWN0IHVzYl9kcml2ZXIgZWFzeWNhcF91c2JfZHJpdmVyID0geworLm5hbWUgPSAiZWFzeWNhcCIsCisuaWRfdGFibGUgPSBlYXN5Y2FwX3VzYl9kZXZpY2VfaWRfdGFibGUsCisucHJvYmUgPSBlYXN5Y2FwX3VzYl9wcm9iZSwKKy5kaXNjb25uZWN0ID0gZWFzeWNhcF91c2JfZGlzY29ubmVjdCwKK307CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFBBUkFNRVRFUlMgVVNFRCBXSEVOIFJFR0lTVEVSSU5HIFRIRSBWSURFTyBJTlRFUkZBQ0UKKyAqCisgKiAgTk9URTogU09NRSBLRVJORUxTIElHTk9SRSB1c2JfY2xhc3NfZHJpdmVyLm1pbm9yX2Jhc2UsIEFTIE1FTlRJT05FRCBCWQorICogICAgICAgIENPUkJFVCBFVCBBTC4gIkxJTlVYIERFVklDRSBEUklWRVJTIiwgM3JkIEVESVRJT04sIFBBR0UgMjUzLgorICogICAgICAgIFRISVMgSVMgVEhFIENBU0UgRk9SIE9wZW5TVVNFLgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVhc3ljYXBfZm9wcyA9IHsKKy5vd25lciA9ICAgVEhJU19NT0RVTEUsCisub3BlbiA9ICAgIGVhc3ljYXBfb3BlbiwKKy5yZWxlYXNlID0gZWFzeWNhcF9yZWxlYXNlLAorLmlvY3RsID0gICBlYXN5Y2FwX2lvY3RsLAorLnBvbGwgPSAgICBlYXN5Y2FwX3BvbGwsCisubW1hcCA9ICAgIGVhc3ljYXBfbW1hcCwKKy5sbHNlZWsgPSAgbm9fbGxzZWVrLAorfTsKK3N0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBlYXN5Y2FwX3ZtX29wcyA9IHsKKy5vcGVuICA9IGVhc3ljYXBfdm1hX29wZW4sCisuY2xvc2UgPSBlYXN5Y2FwX3ZtYV9jbG9zZSwKKy5mYXVsdCA9IGVhc3ljYXBfdm1hX2ZhdWx0LAorfTsKK3N0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIGVhc3ljYXBfY2xhc3MgPSB7CisubmFtZSA9ICJ1c2IvZWFzeWNhcCVkIiwKKy5mb3BzID0gJmVhc3ljYXBfZm9wcywKKy5taW5vcl9iYXNlID0gVVNCX1NLRUxfTUlOT1JfQkFTRSwKK307CisKKy8qdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnYqLworI2lmIGRlZmluZWQoRUFTWUNBUF9JU19WSURFT0RFVl9DTElFTlQpCisjaWYgZGVmaW5lZChFQVNZQ0FQX05FRURTX1Y0TDJfRk9QUykKK2NvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2NGwyX2ZvcHMgPSB7Cisub3duZXIgPSAgIFRISVNfTU9EVUxFLAorLm9wZW4gPSAgICBlYXN5Y2FwX29wZW5fbm9pbm9kZSwKKy5yZWxlYXNlID0gZWFzeWNhcF9yZWxlYXNlX25vaW5vZGUsCisuaW9jdGwgPSAgIGVhc3ljYXBfaW9jdGxfbm9pbm9kZSwKKy5wb2xsID0gICAgZWFzeWNhcF9wb2xsLAorLm1tYXAgPSAgICBlYXN5Y2FwX21tYXAsCit9OworI2VuZGlmIC8qRUFTWUNBUF9ORUVEU19WNEwyX0ZPUFMqLworaW50IHZpZGVvX2RldmljZV9tYW55IC8qPTAqLzsKK3N0cnVjdCB2aWRlb19kZXZpY2UgKnB2aWRlb19hcnJheVtWSURFT19ERVZJQ0VfTUFOWV0sICpwdmlkZW9fZGV2aWNlOworI2VuZGlmIC8qRUFTWUNBUF9JU19WSURFT0RFVl9DTElFTlQqLworLypeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXiovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBQQVJBTUVURVJTIFVTRUQgV0hFTiBSRUdJU1RFUklORyBUSEUgQVVESU8gSU5URVJGQUNFCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlYXN5c25kX2ZvcHMgPSB7Cisub3duZXIgPSAgIFRISVNfTU9EVUxFLAorLm9wZW4gPSAgICBlYXN5c25kX29wZW4sCisucmVsZWFzZSA9IGVhc3lzbmRfcmVsZWFzZSwKKy5pb2N0bCA9ICAgZWFzeXNuZF9pb2N0bCwKKy5yZWFkID0gICAgZWFzeXNuZF9yZWFkLAorLmxsc2VlayA9ICBub19sbHNlZWssCit9Oworc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgZWFzeXNuZF9jbGFzcyA9IHsKKy5uYW1lID0gInVzYi9lYXN5c25kJWQiLAorLmZvcHMgPSAmZWFzeXNuZF9mb3BzLAorLm1pbm9yX2Jhc2UgPSBVU0JfU0tFTF9NSU5PUl9CQVNFLAorfTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIElUIElTIE5PVCBBUFBST1BSSUFURSBGT1IgZWFzeWNhcF9vcGVuKCkgVE8gU1VCTUlUIFRIRSBWSURFTyBVUkJTIEhFUkUsCisgKiAgQkVDQVVTRSBUSEVSRSBXSUxMIEFMV0FZUyBCRSBTVUJTRVFVRU5UIE5FR09USUFUSU9OIE9GIFRWIFNUQU5EQVJEIEFORAorICogIEZPUk1BVCBCWSBJT0NUTCBBTkQgSVQgSVMgSU5BRFZJU0FCTEUgVE8gSEFWRSBUSEUgVVJCUyBSVU5OSU5HIFdISUxFCisgKiAgUkVHSVNURVJTIE9GIFRIRSBTQTcxMTNIIEFSRSBCRUlORyBNQU5JUFVMQVRFRC4KKyAqCisgKiAgVEhFIFNVQk1JU1NJT04gT0YgVklERU8gVVJCUyBJUyBUSEVSRUZPUkUgREVMQVlFRCBVTlRJTCBUSEUgSU9DVEwgQ09NTUFORAorICogIFNUUkVBTU9OIElTIFJFQ0VJVkVELgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnYqLworI2lmIGRlZmluZWQoRUFTWUNBUF9JU19WSURFT0RFVl9DTElFTlQpCitpbnQKK2Vhc3ljYXBfb3Blbl9ub2lub2RlKHN0cnVjdCBmaWxlICpmaWxlKQoreworcmV0dXJuIGVhc3ljYXBfb3Blbigoc3RydWN0IGlub2RlICopTlVMTCwgZmlsZSk7Cit9CisjZW5kaWYgLypFQVNZQ0FQX0lTX1ZJREVPREVWX0NMSUVOVCovCisvKl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eKi8KK2ludAorZWFzeWNhcF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworI2lmICghZGVmaW5lZChFQVNZQ0FQX0lTX1ZJREVPREVWX0NMSUVOVCkpCitzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqcHVzYl9pbnRlcmZhY2U7CisjZW5kaWYgLypFQVNZQ0FQX0lTX1ZJREVPREVWX0NMSUVOVCovCitzdHJ1Y3QgdXNiX2RldmljZSAqcDsKK3N0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcDsKK2ludCBpLCBrLCBtLCByYzsKKworSk9UKDQsICJcbiIpOworU0FZKCI9PT09PT09PT09T1BFTj09PT09PT09PVxuIik7CisKK3BlYXN5Y2FwID0gKHN0cnVjdCBlYXN5Y2FwICopTlVMTDsKKyNpZiAoIWRlZmluZWQoRUFTWUNBUF9JU19WSURFT0RFVl9DTElFTlQpKQoraWYgKChzdHJ1Y3QgaW5vZGUgKilOVUxMID09IGlub2RlKSB7CisJU0FZKCJFUlJPUjogaW5vZGUgaXMgTlVMTC5cbiIpOworCXJldHVybiAtRUZBVUxUOworfQorcHVzYl9pbnRlcmZhY2UgPSB1c2JfZmluZF9pbnRlcmZhY2UoJmVhc3ljYXBfdXNiX2RyaXZlciwgaW1pbm9yKGlub2RlKSk7CitpZiAoIXB1c2JfaW50ZXJmYWNlKSB7CisJU0FZKCJFUlJPUjogcHVzYl9pbnRlcmZhY2UgaXMgTlVMTC5cbiIpOworCXJldHVybiAtRUZBVUxUOworfQorcGVhc3ljYXAgPSB1c2JfZ2V0X2ludGZkYXRhKHB1c2JfaW50ZXJmYWNlKTsKKy8qdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnYqLworI2Vsc2UKK2ZvciAoaSA9IDA7ICBpIDwgdmlkZW9fZGV2aWNlX21hbnk7ICBpKyspIHsKKwlwdmlkZW9fZGV2aWNlID0gcHZpZGVvX2FycmF5W2ldOworCWlmICgoc3RydWN0IHZpZGVvX2RldmljZSAqKU5VTEwgIT0gcHZpZGVvX2RldmljZSkgeworCQlwZWFzeWNhcCA9IChzdHJ1Y3QgZWFzeWNhcCAqKXZpZGVvX2dldF9kcnZkYXRhKHB2aWRlb19kZXZpY2UpOworCQlicmVhazsKKwl9Cit9CisvKl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eKi8KKyNlbmRpZiAvKkVBU1lDQVBfSVNfVklERU9ERVZfQ0xJRU5UKi8KK2lmICgoc3RydWN0IGVhc3ljYXAgKilOVUxMID09IHBlYXN5Y2FwKSB7CisJU0FZKCJNSVNUQUtFOiBwZWFzeWNhcCBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KK2ZpbGUtPnByaXZhdGVfZGF0YSA9IHBlYXN5Y2FwOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBJTklUSUFMSVpBVElPTgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitKT1QoNCwgInN0YXJ0aW5nIGluaXRpYWxpemF0aW9uXG4iKTsKKworZm9yIChrID0gMDsgIGsgPCBGUkFNRV9CVUZGRVJfTUFOWTsgIGsrKykgeworCWZvciAobSA9IDA7ICBtIDwgRlJBTUVfQlVGRkVSX1NJWkUvUEFHRV9TSVpFOyAgbSsrKQorCQltZW1zZXQocGVhc3ljYXAtPmZyYW1lX2J1ZmZlcltrXVttXS5wZ28sIDAsIFBBR0VfU0laRSk7Cit9CitwID0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlOworaWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgPT0gcCkgeworCVNBWSgiRVJST1I6IHBlYXN5Y2FwLT5wdXNiX2RldmljZSBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30gZWxzZSB7CisJSk9UKDE2LCAiMHglMDhsWD1wZWFzeWNhcC0+cHVzYl9kZXZpY2VcbiIsIFwKKwkJCQkJKGxvbmcgaW50KXBlYXN5Y2FwLT5wdXNiX2RldmljZSk7Cit9CityYyA9IHdha2V1cF9kZXZpY2UocGVhc3ljYXAtPnB1c2JfZGV2aWNlKTsKK2lmICgwID09IHJjKQorCUpPVCg4LCAid2FrZXVwX2RldmljZSgpIE9LXG4iKTsKK2Vsc2UgeworCVNBWSgiRVJST1I6IHdha2V1cF9kZXZpY2UoKSByZXR1cm5lZCAlaVxuIiwgcmMpOworCXJldHVybiAtRUZBVUxUOworfQorcmMgPSBzZXR1cF9zdGsocCk7ICBwZWFzeWNhcC0+aW5wdXQgPSAwOworaWYgKDAgPT0gcmMpCisJSk9UKDgsICJzZXR1cF9zdGsoKSBPS1xuIik7CitlbHNlIHsKKwlTQVkoIkVSUk9SOiBzZXR1cF9zdGsoKSByZXR1cm5lZCAlaVxuIiwgcmMpOworCXJldHVybiAtRUZBVUxUOworfQorcmMgPSBzZXR1cF9zYWEocCk7CitpZiAoMCA9PSByYykKKwlKT1QoOCwgInNldHVwX3NhYSgpIE9LXG4iKTsKK2Vsc2UgeworCVNBWSgiRVJST1I6IHNldHVwX3NhYSgpIHJldHVybmVkICVpXG4iLCByYyk7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CityYyA9IGNoZWNrX3NhYShwKTsKK2lmICgwID09IHJjKQorCUpPVCg4LCAiY2hlY2tfc2FhKCkgT0tcbiIpOworZWxzZSBpZiAoLTggPCByYykKKwlTQVkoImNoZWNrX3NhYSgpIHJldHVybmVkICVpXG4iLCByYyk7CitlbHNlIHsKKwlTQVkoIkVSUk9SOiBjaGVja19zYWEoKSByZXR1cm5lZCAlaVxuIiwgcmMpOworCXJldHVybiAtRUZBVUxUOworfQorcGVhc3ljYXAtPnN0YW5kYXJkX29mZnNldCA9IC0xOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmIGRlZmluZWQoUFJFRkVSX05UU0MpCisKK3JjID0gYWRqdXN0X3N0YW5kYXJkKHBlYXN5Y2FwLCBWNEwyX1NURF9OVFNDX00pOworaWYgKDAgPT0gcmMpCisJSk9UKDgsICJhZGp1c3Rfc3RhbmRhcmQoLixOVFNDX00pIE9LXG4iKTsKK2Vsc2UgeworCVNBWSgiRVJST1I6IGFkanVzdF9zdGFuZGFyZCguLE5UU0NfTSkgcmV0dXJuZWQgJWlcbiIsIHJjKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KK3JjID0gYWRqdXN0X2Zvcm1hdChwZWFzeWNhcCwgNjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9VWVZZLCBWNEwyX0ZJRUxEX05PTkUsIFwKKwkJCQkJCQkJCWZhbHNlKTsKK2lmICgwIDw9IHJjKQorCUpPVCg4LCAiYWRqdXN0X2Zvcm1hdCguLDY0MCw0ODAsVVlWWSkgT0tcbiIpOworZWxzZSB7CisJU0FZKCJFUlJPUjogYWRqdXN0X2Zvcm1hdCguLDY0MCw0ODAsVVlWWSkgcmV0dXJuZWQgJWlcbiIsIHJjKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KKworI2Vsc2UKKworcmMgPSBhZGp1c3Rfc3RhbmRhcmQocGVhc3ljYXAsIFwKKwkJKFY0TDJfU1REX1BBTF9CIHwgVjRMMl9TVERfUEFMX0cgfCBWNEwyX1NURF9QQUxfSCB8IFwKKwkJVjRMMl9TVERfUEFMX0kgfCBWNEwyX1NURF9QQUxfTikpOworaWYgKDAgPT0gcmMpCisJSk9UKDgsICJhZGp1c3Rfc3RhbmRhcmQoLixQQUxfQkdISU4pIE9LXG4iKTsKK2Vsc2UgeworCVNBWSgiRVJST1I6IGFkanVzdF9zdGFuZGFyZCguLFBBTF9CR0hJTikgcmV0dXJuZWQgJWlcbiIsIHJjKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KK3JjID0gYWRqdXN0X2Zvcm1hdChwZWFzeWNhcCwgNjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9VWVZZLCBWNEwyX0ZJRUxEX05PTkUsIFwKKwkJCQkJCQkJCWZhbHNlKTsKK2lmICgwIDw9IHJjKQorCUpPVCg4LCAiYWRqdXN0X2Zvcm1hdCguLDY0MCw0ODAsdXl2eSxmYWxzZSkgT0tcbiIpOworZWxzZSB7CisJU0FZKCJFUlJPUjogYWRqdXN0X2Zvcm1hdCguLDY0MCw0ODAsdXl2eSxmYWxzZSkgcmV0dXJuZWQgJWlcbiIsIHJjKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KKworI2VuZGlmIC8qICFQUkVGRVJfTlRTQyovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCityYyA9IGFkanVzdF9icmlnaHRuZXNzKHBlYXN5Y2FwLCAtODE5Mik7CitpZiAoMCAhPSByYykgeworCVNBWSgiRVJST1I6IGFkanVzdF9icmlnaHRuZXNzKGRlZmF1bHQpIHJldHVybmVkICVpXG4iLCByYyk7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CityYyA9IGFkanVzdF9jb250cmFzdChwZWFzeWNhcCwgLTgxOTIpOworaWYgKDAgIT0gcmMpIHsKKwlTQVkoIkVSUk9SOiBhZGp1c3RfY29udHJhc3QoZGVmYXVsdCkgcmV0dXJuZWQgJWlcbiIsIHJjKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KK3JjID0gYWRqdXN0X3NhdHVyYXRpb24ocGVhc3ljYXAsIC04MTkyKTsKK2lmICgwICE9IHJjKSB7CisJU0FZKCJFUlJPUjogYWRqdXN0X3NhdHVyYXRpb24oZGVmYXVsdCkgcmV0dXJuZWQgJWlcbiIsIHJjKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KK3JjID0gYWRqdXN0X2h1ZShwZWFzeWNhcCwgLTgxOTIpOworaWYgKDAgIT0gcmMpIHsKKwlTQVkoIkVSUk9SOiBhZGp1c3RfaHVlKGRlZmF1bHQpIHJldHVybmVkICVpXG4iLCByYyk7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCityYyA9IHVzYl9zZXRfaW50ZXJmYWNlKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgcGVhc3ljYXAtPnZpZGVvX2ludGVyZmFjZSwgXAorCQkJCQkJcGVhc3ljYXAtPnZpZGVvX2FsdHNldHRpbmdfb24pOworaWYgKDAgPT0gcmMpCisJSk9UKDgsICJ1c2Jfc2V0X2ludGVyZmFjZSguLCVpLCVpKSBPS1xuIiwgcGVhc3ljYXAtPnZpZGVvX2ludGVyZmFjZSwgXAorCQkJCQkJcGVhc3ljYXAtPnZpZGVvX2FsdHNldHRpbmdfb24pOworZWxzZSB7CisJU0FZKCJFUlJPUjogdXNiX3NldF9pbnRlcmZhY2UoKSByZXR1cm5lZCAlaVxuIiwgcmMpOworCXJldHVybiAtRUZBVUxUOworfQorcmMgPSBzdGFydF8xMDAocCk7CitpZiAoMCA9PSByYykKKwlKT1QoOCwgInN0YXJ0XzEwMCgpIE9LXG4iKTsKK2Vsc2UgeworCVNBWSgiRVJST1I6IHN0YXJ0XzEwMCgpIHJldHVybmVkICVpXG4iLCByYyk7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CitwZWFzeWNhcC0+dmlkZW9faXNvY19zZXF1ZW5jZSA9IFZJREVPX0lTT0NfQlVGRkVSX01BTlkgLSAxOworcGVhc3ljYXAtPnZpZGVvX2lkbGUgPSAwOworcGVhc3ljYXAtPnZpZGVvX2p1bmsgPSAwOworZm9yIChpID0gMDsgaSA8IDE4MDsgaSsrKQorCXBlYXN5Y2FwLT5tZXJpdFtpXSA9IDA7CitwZWFzeWNhcC0+dmlkZW9fZW9mID0gMDsKK3BlYXN5Y2FwLT5hdWRpb19lb2YgPSAwOworCitkb19nZXR0aW1lb2ZkYXkoJnBlYXN5Y2FwLT50aW1ldmFsNyk7CisKK3BlYXN5Y2FwLT5mdWRnZSA9IDA7CisKK0pPVCg0LCAiZmluaXNoZWQgaW5pdGlhbGl6YXRpb25cbiIpOworcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQKK3N1Ym1pdF92aWRlb191cmJzKHN0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcCkKK3sKK3N0cnVjdCBkYXRhX3VyYiAqcGRhdGFfdXJiOworc3RydWN0IHVyYiAqcHVyYjsKK3N0cnVjdCBsaXN0X2hlYWQgKnBsaXN0X2hlYWQ7CitpbnQgaiwgaXNiYWQsIG0sIHJjOworaW50IGlzYnVmOworCitpZiAoKHN0cnVjdCBsaXN0X2hlYWQgKilOVUxMID09IHBlYXN5Y2FwLT5wdXJiX3ZpZGVvX2hlYWQpIHsKKwlTQVkoIkVSUk9SOiBwZWFzeWNhcC0+dXJiX3ZpZGVvX2hlYWQgdW5pbml0aWFsaXplZFxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CitpZiAoKHN0cnVjdCB1c2JfZGV2aWNlICopTlVMTCA9PSBwZWFzeWNhcC0+cHVzYl9kZXZpY2UpIHsKKwlTQVkoIkVSUk9SOiBwZWFzeWNhcC0+cHVzYl9kZXZpY2UgaXMgTlVMTFxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CitpZiAoIXBlYXN5Y2FwLT52aWRlb19pc29jX3N0cmVhbWluZykgeworCisKKworCisKKworCisKKwlKT1QoNCwgInN1Ym1pc3Npb24gb2YgYWxsIHZpZGVvIHVyYnNcbiIpOworCWlmICgwICE9IHJlYWR5X3NhYShwZWFzeWNhcC0+cHVzYl9kZXZpY2UpKSB7CisJCVNBWSgiRVJST1I6IG5vdCByZWFkeSB0byBjYXB0dXJlIGFmdGVyIHdhaXRpbmcgIiBcCisJCQkJCQkJIm9uZSBzZWNvbmRcbiIpOworCQlTQVkoIi4uLi4uICBjb250aW51aW5nIGFueXdheVxuIik7CisJfQorCWlzYmFkID0gMDsgIG0gPSAwOworCWxpc3RfZm9yX2VhY2gocGxpc3RfaGVhZCwgKHBlYXN5Y2FwLT5wdXJiX3ZpZGVvX2hlYWQpKSB7CisJCXBkYXRhX3VyYiA9IGxpc3RfZW50cnkocGxpc3RfaGVhZCwgc3RydWN0IGRhdGFfdXJiLCBsaXN0X2hlYWQpOworCQlpZiAoTlVMTCAhPSBwZGF0YV91cmIpIHsKKwkJCXB1cmIgPSBwZGF0YV91cmItPnB1cmI7CisJCQlpZiAoTlVMTCAhPSBwdXJiKSB7CisJCQkJaXNidWYgPSBwZGF0YV91cmItPmlzYnVmOworCQkJCXB1cmItPmludGVydmFsID0gMTsKKwkJCQlwdXJiLT5kZXYgPSBwZWFzeWNhcC0+cHVzYl9kZXZpY2U7CisJCQkJcHVyYi0+cGlwZSA9IFwKKwkJCQkJdXNiX3Jjdmlzb2NwaXBlKHBlYXN5Y2FwLT5wdXNiX2RldmljZSxcCisJCQkJCXBlYXN5Y2FwLT52aWRlb19lbmRwb2ludG51bWJlcik7CisJCQkJcHVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCQkJcHVyYi0+dHJhbnNmZXJfYnVmZmVyID0gXAorCQkJCQlwZWFzeWNhcC0+dmlkZW9faXNvY19idWZmZXJbaXNidWZdLnBnbzsKKwkJCQlwdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gXAorCQkJCQlwZWFzeWNhcC0+dmlkZW9faXNvY19idWZmZXJfc2l6ZTsKKwkJCQlwdXJiLT5jb21wbGV0ZSA9IGVhc3ljYXBfY29tcGxldGU7CisJCQkJcHVyYi0+Y29udGV4dCA9IHBlYXN5Y2FwOworCQkJCXB1cmItPnN0YXJ0X2ZyYW1lID0gMDsKKwkJCQlwdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IFwKKwkJCQkJcGVhc3ljYXAtPnZpZGVvX2lzb2NfZnJhbWVzcGVyZGVzYzsKKworCQkJCWZvciAoaiA9IDA7ICBqIDwgcGVhc3ljYXAtPlwKKwkJCQkJdmlkZW9faXNvY19mcmFtZXNwZXJkZXNjOyBqKyspIHsKKwkJCQkJCXB1cmItPmlzb19mcmFtZV9kZXNjW2pdLlwKKwkJCQkJCW9mZnNldCA9IGogKiBcCisJCQkJCQlwZWFzeWNhcC0+XAorCQkJCQkJdmlkZW9faXNvY19tYXhmcmFtZXNpemU7CisJCQkJCQlwdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5cCisJCQkJCQlsZW5ndGggPSBwZWFzeWNhcC0+XAorCQkJCQkJdmlkZW9faXNvY19tYXhmcmFtZXNpemU7CisJCQkJCX0KKworCQkJCXJjID0gdXNiX3N1Ym1pdF91cmIocHVyYiwgR0ZQX0tFUk5FTCk7CisJCQkJaWYgKDAgIT0gcmMpIHsKKwkJCQkJaXNiYWQrKzsKKwkJCQkJU0FZKCJFUlJPUjogdXNiX3N1Ym1pdF91cmIoKSBmYWlsZWQgIiBcCisJCQkJCQkJImZvciB1cmIgd2l0aCByYzpcbiIpOworCQkJCQlzd2l0Y2ggKHJjKSB7CisJCQkJCWNhc2UgLUVOT01FTTogeworCQkJCQkJU0FZKCJFTk9NRU1cbiIpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAtRU5PREVWOiB7CisJCQkJCQlTQVkoIkVOT0RFVlxuIik7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIC1FTlhJTzogeworCQkJCQkJU0FZKCJFTlhJT1xuIik7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIC1FSU5WQUw6IHsKKwkJCQkJCVNBWSgiRUlOVkFMXG4iKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgLUVBR0FJTjogeworCQkJCQkJU0FZKCJFQUdBSU5cbiIpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAtRUZCSUc6IHsKKwkJCQkJCVNBWSgiRUZCSUdcbiIpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAtRVBJUEU6IHsKKwkJCQkJCVNBWSgiRVBJUEVcbiIpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAtRU1TR1NJWkU6IHsKKwkJCQkJCVNBWSgiRU1TR1NJWkVcbiIpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJU0FZKCJ1bmtub3duIGVycm9yIGNvZGUgJWlcbiIsXAorCQkJCQkJCQkJIHJjKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQltKys7CisJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWlzYmFkKys7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkgaXNiYWQrKzsKKwkJCX0KKwkJfQorCWlmIChpc2JhZCkgeworCQlKT1QoNCwgImF0dGVtcHRpbmcgY2xlYW51cCBpbnN0ZWFkIG9mIHN1Ym1pdHRpbmdcbiIpOworCQlsaXN0X2Zvcl9lYWNoKHBsaXN0X2hlYWQsIChwZWFzeWNhcC0+cHVyYl92aWRlb19oZWFkKSkgeworCQkJcGRhdGFfdXJiID0gbGlzdF9lbnRyeShwbGlzdF9oZWFkLCBzdHJ1Y3QgZGF0YV91cmIsIFwKKwkJCQkJCQkJbGlzdF9oZWFkKTsKKwkJCWlmIChOVUxMICE9IHBkYXRhX3VyYikgeworCQkJCXB1cmIgPSBwZGF0YV91cmItPnB1cmI7CisJCQkJaWYgKE5VTEwgIT0gcHVyYikKKwkJCQkJdXNiX2tpbGxfdXJiKHB1cmIpOworCQkJfQorCQl9CisJCXBlYXN5Y2FwLT52aWRlb19pc29jX3N0cmVhbWluZyA9IDA7CisJfSBlbHNlIHsKKwkJcGVhc3ljYXAtPnZpZGVvX2lzb2Nfc3RyZWFtaW5nID0gMTsKKwkJSk9UKDQsICJzdWJtaXR0ZWQgJWkgdmlkZW8gdXJic1xuIiwgbSk7CisJfQorCisKKworCisKKworfSBlbHNlIHsKKwlKT1QoNCwgImFscmVhZHkgc3RyZWFtaW5nIHZpZGVvIHVyYnNcbiIpOworfQorcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQKK2tpbGxfdmlkZW9fdXJicyhzdHJ1Y3QgZWFzeWNhcCAqcGVhc3ljYXApCit7CitpbnQgbTsKK3N0cnVjdCBsaXN0X2hlYWQgKnBsaXN0X2hlYWQ7CitzdHJ1Y3QgZGF0YV91cmIgKnBkYXRhX3VyYjsKKworaWYgKChzdHJ1Y3QgZWFzeWNhcCAqKU5VTEwgPT0gcGVhc3ljYXApIHsKKwlTQVkoIkVSUk9SOiBwZWFzeWNhcCBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KK2lmIChwZWFzeWNhcC0+dmlkZW9faXNvY19zdHJlYW1pbmcpIHsKKworCisKKwlpZiAoKHN0cnVjdCBsaXN0X2hlYWQgKilOVUxMICE9IHBlYXN5Y2FwLT5wdXJiX3ZpZGVvX2hlYWQpIHsKKwkJcGVhc3ljYXAtPnZpZGVvX2lzb2Nfc3RyZWFtaW5nID0gMDsKKwkJSk9UKDQsICJraWxsaW5nIHZpZGVvIHVyYnNcbiIpOworCQltID0gMDsKKwkJbGlzdF9mb3JfZWFjaChwbGlzdF9oZWFkLCAocGVhc3ljYXAtPnB1cmJfdmlkZW9faGVhZCkpIHsKKwkJCXBkYXRhX3VyYiA9IGxpc3RfZW50cnkocGxpc3RfaGVhZCwgc3RydWN0IGRhdGFfdXJiLCBcCisJCQkJCQkJCWxpc3RfaGVhZCk7CisJCQlpZiAoKHN0cnVjdCBkYXRhX3VyYiAqKU5VTEwgIT0gcGRhdGFfdXJiKSB7CisJCQkJaWYgKChzdHJ1Y3QgdXJiICopTlVMTCAhPSBwZGF0YV91cmItPnB1cmIpIHsKKwkJCQkJdXNiX2tpbGxfdXJiKHBkYXRhX3VyYi0+cHVyYik7CisJCQkJCW0rKzsKKwkJCQl9CisJCQl9CisJCX0KKwkJSk9UKDQsICIlaSB2aWRlbyB1cmJzIGtpbGxlZFxuIiwgbSk7CisJfSBlbHNlIHsKKwkJU0FZKCJFUlJPUjogcGVhc3ljYXAtPnB1cmJfdmlkZW9faGVhZCBpcyBOVUxMXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorfSBlbHNlIHsKKwlKT1QoOCwgIiVpPXZpZGVvX2lzb2Nfc3RyZWFtaW5nLCBubyB2aWRlbyB1cmJzIGtpbGxlZFxuIiwgXAorCQkJCQlwZWFzeWNhcC0+dmlkZW9faXNvY19zdHJlYW1pbmcpOworfQorcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnYqLworI2lmIGRlZmluZWQoRUFTWUNBUF9JU19WSURFT0RFVl9DTElFTlQpCitpbnQKK2Vhc3ljYXBfcmVsZWFzZV9ub2lub2RlKHN0cnVjdCBmaWxlICpmaWxlKQoreworcmV0dXJuIGVhc3ljYXBfcmVsZWFzZSgoc3RydWN0IGlub2RlICopTlVMTCwgZmlsZSk7Cit9CisjZW5kaWYgLypFQVNZQ0FQX0lTX1ZJREVPREVWX0NMSUVOVCovCisvKl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CitlYXN5Y2FwX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisjaWYgKCFkZWZpbmVkKEVBU1lDQVBfSVNfVklERU9ERVZfQ0xJRU5UKSkKK3N0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcDsKKworSk9UKDQsICJcbiIpOworCitwZWFzeWNhcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKK2lmIChOVUxMID09IHBlYXN5Y2FwKSB7CisJU0FZKCJFUlJPUjogIHBlYXN5Y2FwIGlzIE5VTEwuXG4iKTsKKwlTQVkoImVuZGluZyB1bnN1Y2Nlc3NmdWxseVxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CitpZiAoMCAhPSBraWxsX3ZpZGVvX3VyYnMocGVhc3ljYXApKSB7CisJU0FZKCJFUlJPUjoga2lsbF92aWRlb191cmJzKCkgZmFpbGVkXG4iKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KK0pPVCg0LCAiZW5kaW5nIHN1Y2Nlc3NmdWxseVxuIik7CisvKnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2Ki8KKyNlbHNlCisjCisvKl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eKi8KKyNlbmRpZiAvKkVBU1lDQVBfSVNfVklERU9ERVZfQ0xJRU5UKi8KKworcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnYqLworI2lmIGRlZmluZWQoRUFTWUNBUF9JU19WSURFT0RFVl9DTElFTlQpCitpbnQKK3ZpZGVvZGV2X3JlbGVhc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqcHZkKQoreworc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwOworaW50IGksIGosIGs7CisKK0pPVCg0LCAiXG4iKTsKKworayA9IDA7Citmb3IgKGkgPSAwOyAgaSA8IHZpZGVvX2RldmljZV9tYW55OyAgaSsrKSB7CisJcHZpZGVvX2RldmljZSA9IHB2aWRlb19hcnJheVtpXTsKKwlpZiAoKHN0cnVjdCB2aWRlb19kZXZpY2UgKilOVUxMICE9IHB2aWRlb19kZXZpY2UpIHsKKwkJaWYgKHB2ZC0+bWlub3IgPT0gcHZpZGVvX2RldmljZS0+bWlub3IpIHsKKwkJCXBlYXN5Y2FwID0gKHN0cnVjdCBlYXN5Y2FwICopXAorCQkJCQl2aWRlb19nZXRfZHJ2ZGF0YShwdmlkZW9fZGV2aWNlKTsKKwkJCWlmICgoc3RydWN0IGVhc3ljYXAgKilOVUxMID09IHBlYXN5Y2FwKSB7CisJCQkJU0FZKCJFUlJPUjogIHBlYXN5Y2FwIGlzIE5VTExcbiIpOworCQkJCVNBWSgiZW5kaW5nIHVuc3VjY2Vzc2Z1bGx5XG4iKTsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKwkJCWlmICgwICE9IGtpbGxfdmlkZW9fdXJicyhwZWFzeWNhcCkpIHsKKwkJCQlTQVkoIkVSUk9SOiBraWxsX3ZpZGVvX3VyYnMoKSBmYWlsZWRcbiIpOworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQkJSk9UKDQsICJmcmVlaW5nIHZpZGVvX2RldmljZSBzdHJ1Y3R1cmU6ICIgXAorCQkJCQkJCSIvZGV2L3ZpZGVvJWlcbiIsIGkpOworCQkJa2ZyZWUoKHZvaWQgKilwdmlkZW9fZGV2aWNlKTsKKwkJCWZvciAoaiA9IGk7ICBqIDwgKFZJREVPX0RFVklDRV9NQU5ZIC0gMSk7ICBqKyspCisJCQkJcHZpZGVvX2FycmF5W2pdID0gcHZpZGVvX2FycmF5W2ogKyAxXTsKKwkJCXZpZGVvX2RldmljZV9tYW55LS07ICBrKys7CisJCQlicmVhazsKKwkJfQorCX0KK30KK2lmICghaykgeworCVNBWSgiRVJST1I6IGxvc3QgdmlkZW9fZGV2aWNlIHN0cnVjdHVyZSBmb3IgJWk9bWlub3JcbiIsIHB2ZC0+bWlub3IpOworCVNBWSgiY2Fubm90IGZyZWU6IG1heSBjYXVzZSBtZW1vcnkgbGVha1xuIik7CisJU0FZKCJlbmRpbmcgdW5zdWNjZXNzZnVsbHlcbiIpOworCXJldHVybiAtRUZBVUxUOworfQorCitKT1QoNCwgImVuZGluZyBzdWNjZXNzZnVsbHlcbiIpOworcmV0dXJuIDA7Cit9CisjZW5kaWYgLypFQVNZQ0FQX0lTX1ZJREVPREVWX0NMSUVOVCovCisvKl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFRISVMgRlVOQ1RJT04gSVMgQ0FMTEVEIEZST00gV0lUSElOIGVhc3ljYXBfdXNiX2Rpc2Nvbm5lY3QoKS4KKyAqICBCWSBUSElTIFNUQUdFIFRIRSBERVZJQ0UgSEFTIEFMUkVBRFkgQkVFTiBQSFlTSUNBTExZIFVOUExVR0dFRC4KKyAqICBwZWFzeWNhcC0+cHVzYl9kZXZpY2UgSVMgTk8gTE9OR0VSIFZBTElEIEFORCBTSE9VTEQgSEFWRSBCRUVOIFNFVCBUTyBOVUxMLgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkCitlYXN5Y2FwX2RlbGV0ZShzdHJ1Y3Qga3JlZiAqcGtyZWYpCit7CitpbnQgaywgbSwgbG9zdDsKK2ludCBhbGxvY2F0aW9uX3ZpZGVvX3VyYiwgYWxsb2NhdGlvbl92aWRlb19wYWdlLCBhbGxvY2F0aW9uX3ZpZGVvX3N0cnVjdDsKK2ludCBhbGxvY2F0aW9uX2F1ZGlvX3VyYiwgYWxsb2NhdGlvbl9hdWRpb19wYWdlLCBhbGxvY2F0aW9uX2F1ZGlvX3N0cnVjdDsKK2ludCByZWdpc3RlcmVkX3ZpZGVvLCByZWdpc3RlcmVkX2F1ZGlvOworc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwOworc3RydWN0IGRhdGFfdXJiICpwZGF0YV91cmI7CitzdHJ1Y3QgbGlzdF9oZWFkICpwbGlzdF9oZWFkLCAqcGxpc3RfbmV4dDsKKworSk9UKDQsICJcbiIpOworCitwZWFzeWNhcCA9IGNvbnRhaW5lcl9vZihwa3JlZiwgc3RydWN0IGVhc3ljYXAsIGtyZWYpOworaWYgKChzdHJ1Y3QgZWFzeWNhcCAqKU5VTEwgPT0gcGVhc3ljYXApIHsKKwlTQVkoIkVSUk9SOiBwZWFzeWNhcCBpcyBOVUxMOiBjYW5ub3QgcGVyZm9ybSBkZWxldGlvbnNcbiIpOworCXJldHVybjsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgRlJFRSBWSURFTy4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaWYgKChzdHJ1Y3QgbGlzdF9oZWFkICopTlVMTCAhPSBwZWFzeWNhcC0+cHVyYl92aWRlb19oZWFkKSB7CisJSk9UKDQsICJmcmVlaW5nIHZpZGVvIHVyYnNcbiIpOworCW0gPSAwOworCWxpc3RfZm9yX2VhY2gocGxpc3RfaGVhZCwgKHBlYXN5Y2FwLT5wdXJiX3ZpZGVvX2hlYWQpKSB7CisJCXBkYXRhX3VyYiA9IGxpc3RfZW50cnkocGxpc3RfaGVhZCwgc3RydWN0IGRhdGFfdXJiLCBsaXN0X2hlYWQpOworCQlpZiAoTlVMTCA9PSBwZGF0YV91cmIpCisJCQlKT1QoNCwgIkVSUk9SOiBwZGF0YV91cmIgaXMgTlVMTFxuIik7CisJCWVsc2UgeworCQkJaWYgKChzdHJ1Y3QgdXJiICopTlVMTCAhPSBwZGF0YV91cmItPnB1cmIpIHsKKwkJCQl1c2JfZnJlZV91cmIocGRhdGFfdXJiLT5wdXJiKTsKKwkJCQlwZGF0YV91cmItPnB1cmIgPSAoc3RydWN0IHVyYiAqKU5VTEw7CisJCQkJcGVhc3ljYXAtPmFsbG9jYXRpb25fdmlkZW9fdXJiIC09IDE7CisJCQkJbSsrOworCQkJfQorCQl9CisJfQorCisJSk9UKDQsICIlaSB2aWRlbyB1cmJzIGZyZWVkXG4iLCBtKTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlKT1QoNCwgImZyZWVpbmcgdmlkZW8gZGF0YV91cmIgc3RydWN0dXJlcy5cbiIpOworCW0gPSAwOworCWxpc3RfZm9yX2VhY2hfc2FmZShwbGlzdF9oZWFkLCBwbGlzdF9uZXh0LCBwZWFzeWNhcC0+cHVyYl92aWRlb19oZWFkKSB7CisJCXBkYXRhX3VyYiA9IGxpc3RfZW50cnkocGxpc3RfaGVhZCwgc3RydWN0IGRhdGFfdXJiLCBsaXN0X2hlYWQpOworCQlpZiAoKHN0cnVjdCBkYXRhX3VyYiAqKU5VTEwgIT0gcGRhdGFfdXJiKSB7CisJCQlrZnJlZShwZGF0YV91cmIpOyAgcGRhdGFfdXJiID0gKHN0cnVjdCBkYXRhX3VyYiAqKU5VTEw7CisJCQlwZWFzeWNhcC0+YWxsb2NhdGlvbl92aWRlb19zdHJ1Y3QgLT0gXAorCQkJCQkJc2l6ZW9mKHN0cnVjdCBkYXRhX3VyYik7CisJCQltKys7CisJCX0KKwl9CisJSk9UKDQsICIlaSB2aWRlbyBkYXRhX3VyYiBzdHJ1Y3R1cmVzIGZyZWVkXG4iLCBtKTsKKwlKT1QoNCwgInNldHRpbmcgcGVhc3ljYXAtPnB1cmJfdmlkZW9faGVhZD1OVUxMXG4iKTsKKwlwZWFzeWNhcC0+cHVyYl92aWRlb19oZWFkID0gKHN0cnVjdCBsaXN0X2hlYWQgKilOVUxMOworCX0gZWxzZSB7CitKT1QoNCwgInBlYXN5Y2FwLT5wdXJiX3ZpZGVvX2hlYWQgaXMgTlVMTFxuIik7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitKT1QoNCwgImZyZWVpbmcgdmlkZW8gaXNvYyBidWZmZXJzLlxuIik7CittID0gMDsKK2ZvciAoayA9IDA7ICBrIDwgVklERU9fSVNPQ19CVUZGRVJfTUFOWTsgIGsrKykgeworCWlmICgodm9pZCAqKU5VTEwgIT0gcGVhc3ljYXAtPnZpZGVvX2lzb2NfYnVmZmVyW2tdLnBnbykgeworCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKVwKKwkJCQkocGVhc3ljYXAtPnZpZGVvX2lzb2NfYnVmZmVyW2tdLnBnbyksIFwKKwkJCQlWSURFT19JU09DX09SREVSKTsKKwkJcGVhc3ljYXAtPnZpZGVvX2lzb2NfYnVmZmVyW2tdLnBnbyA9ICh2b2lkICopTlVMTDsKKwkJcGVhc3ljYXAtPmFsbG9jYXRpb25fdmlkZW9fcGFnZSAtPSBcCisJCQkJKCh1bnNpZ25lZCBpbnQpKDB4MDEgPDwgVklERU9fSVNPQ19PUkRFUikpOworCQltKys7CisJfQorfQorSk9UKDQsICJpc29jIHZpZGVvIGJ1ZmZlcnMgZnJlZWQ6ICVpIHBhZ2VzXG4iLCBtICogKDB4MDEgPDwgVklERU9fSVNPQ19PUkRFUikpOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworSk9UKDQsICJmcmVlaW5nIHZpZGVvIGZpZWxkIGJ1ZmZlcnMuXG4iKTsKK2xvc3QgPSAwOworZm9yIChrID0gMDsgIGsgPCBGSUVMRF9CVUZGRVJfTUFOWTsgIGsrKykgeworCWZvciAobSA9IDA7ICBtIDwgRklFTERfQlVGRkVSX1NJWkUvUEFHRV9TSVpFOyAgbSsrKSB7CisJCWlmICgodm9pZCAqKU5VTEwgIT0gcGVhc3ljYXAtPmZpZWxkX2J1ZmZlcltrXVttXS5wZ28pIHsKKwkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylcCisJCQkJCShwZWFzeWNhcC0+ZmllbGRfYnVmZmVyW2tdW21dLnBnbykpOworCQkJcGVhc3ljYXAtPmZpZWxkX2J1ZmZlcltrXVttXS5wZ28gPSAodm9pZCAqKU5VTEw7CisJCQlwZWFzeWNhcC0+YWxsb2NhdGlvbl92aWRlb19wYWdlIC09IDE7CisJCQlsb3N0Kys7CisJCX0KKwl9Cit9CitKT1QoNCwgInZpZGVvIGZpZWxkIGJ1ZmZlcnMgZnJlZWQ6ICVpIHBhZ2VzXG4iLCBsb3N0KTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK0pPVCg0LCAiZnJlZWluZyB2aWRlbyBmcmFtZSBidWZmZXJzLlxuIik7Citsb3N0ID0gMDsKK2ZvciAoayA9IDA7ICBrIDwgRlJBTUVfQlVGRkVSX01BTlk7ICBrKyspIHsKKwlmb3IgKG0gPSAwOyAgbSA8IEZSQU1FX0JVRkZFUl9TSVpFL1BBR0VfU0laRTsgIG0rKykgeworCQlpZiAoKHZvaWQgKilOVUxMICE9IHBlYXN5Y2FwLT5mcmFtZV9idWZmZXJba11bbV0ucGdvKSB7CisJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpXAorCQkJCQkocGVhc3ljYXAtPmZyYW1lX2J1ZmZlcltrXVttXS5wZ28pKTsKKwkJCXBlYXN5Y2FwLT5mcmFtZV9idWZmZXJba11bbV0ucGdvID0gKHZvaWQgKilOVUxMOworCQkJcGVhc3ljYXAtPmFsbG9jYXRpb25fdmlkZW9fcGFnZSAtPSAxOworCQkJbG9zdCsrOworCQl9CisJfQorfQorSk9UKDQsICJ2aWRlbyBmcmFtZSBidWZmZXJzIGZyZWVkOiAlaSBwYWdlc1xuIiwgbG9zdCk7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIEZSRUUgQVVESU8uCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2lmICgoc3RydWN0IGxpc3RfaGVhZCAqKU5VTEwgIT0gcGVhc3ljYXAtPnB1cmJfYXVkaW9faGVhZCkgeworCUpPVCg0LCAiZnJlZWluZyBhdWRpbyB1cmJzXG4iKTsKKwltID0gMDsKKwlsaXN0X2Zvcl9lYWNoKHBsaXN0X2hlYWQsIChwZWFzeWNhcC0+cHVyYl9hdWRpb19oZWFkKSkgeworCQlwZGF0YV91cmIgPSBsaXN0X2VudHJ5KHBsaXN0X2hlYWQsIHN0cnVjdCBkYXRhX3VyYiwgbGlzdF9oZWFkKTsKKwkJaWYgKE5VTEwgPT0gcGRhdGFfdXJiKQorCQkJSk9UKDQsICJFUlJPUjogcGRhdGFfdXJiIGlzIE5VTExcbiIpOworCQllbHNlIHsKKwkJCWlmICgoc3RydWN0IHVyYiAqKU5VTEwgIT0gcGRhdGFfdXJiLT5wdXJiKSB7CisJCQkJdXNiX2ZyZWVfdXJiKHBkYXRhX3VyYi0+cHVyYik7CisJCQkJcGRhdGFfdXJiLT5wdXJiID0gKHN0cnVjdCB1cmIgKilOVUxMOworCQkJCXBlYXN5Y2FwLT5hbGxvY2F0aW9uX2F1ZGlvX3VyYiAtPSAxOworCQkJCW0rKzsKKwkJCX0KKwkJfQorCX0KKwlKT1QoNCwgIiVpIGF1ZGlvIHVyYnMgZnJlZWRcbiIsIG0pOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCUpPVCg0LCAiZnJlZWluZyBhdWRpbyBkYXRhX3VyYiBzdHJ1Y3R1cmVzLlxuIik7CisJbSA9IDA7CisJbGlzdF9mb3JfZWFjaF9zYWZlKHBsaXN0X2hlYWQsIHBsaXN0X25leHQsIHBlYXN5Y2FwLT5wdXJiX2F1ZGlvX2hlYWQpIHsKKwkJcGRhdGFfdXJiID0gbGlzdF9lbnRyeShwbGlzdF9oZWFkLCBzdHJ1Y3QgZGF0YV91cmIsIGxpc3RfaGVhZCk7CisJCWlmICgoc3RydWN0IGRhdGFfdXJiICopTlVMTCAhPSBwZGF0YV91cmIpIHsKKwkJCWtmcmVlKHBkYXRhX3VyYik7ICBwZGF0YV91cmIgPSAoc3RydWN0IGRhdGFfdXJiICopTlVMTDsKKwkJCXBlYXN5Y2FwLT5hbGxvY2F0aW9uX2F1ZGlvX3N0cnVjdCAtPSBcCisJCQkJCQlzaXplb2Yoc3RydWN0IGRhdGFfdXJiKTsKKwkJCW0rKzsKKwkJfQorCX0KK0pPVCg0LCAiJWkgYXVkaW8gZGF0YV91cmIgc3RydWN0dXJlcyBmcmVlZFxuIiwgbSk7CitKT1QoNCwgInNldHRpbmcgcGVhc3ljYXAtPnB1cmJfYXVkaW9faGVhZD1OVUxMXG4iKTsKK3BlYXN5Y2FwLT5wdXJiX2F1ZGlvX2hlYWQgPSAoc3RydWN0IGxpc3RfaGVhZCAqKU5VTEw7Cit9IGVsc2UgeworSk9UKDQsICJwZWFzeWNhcC0+cHVyYl9hdWRpb19oZWFkIGlzIE5VTExcbiIpOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworSk9UKDQsICJmcmVlaW5nIGF1ZGlvIGlzb2MgYnVmZmVycy5cbiIpOworbSA9IDA7Citmb3IgKGsgPSAwOyAgayA8IEFVRElPX0lTT0NfQlVGRkVSX01BTlk7ICBrKyspIHsKKwlpZiAoKHZvaWQgKilOVUxMICE9IHBlYXN5Y2FwLT5hdWRpb19pc29jX2J1ZmZlcltrXS5wZ28pIHsKKwkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylcCisJCQkJKHBlYXN5Y2FwLT5hdWRpb19pc29jX2J1ZmZlcltrXS5wZ28pLCBcCisJCQkJQVVESU9fSVNPQ19PUkRFUik7CisJCXBlYXN5Y2FwLT5hdWRpb19pc29jX2J1ZmZlcltrXS5wZ28gPSAodm9pZCAqKU5VTEw7CisJCXBlYXN5Y2FwLT5hbGxvY2F0aW9uX2F1ZGlvX3BhZ2UgLT0gXAorCQkJCSgodW5zaWduZWQgaW50KSgweDAxIDw8IEFVRElPX0lTT0NfT1JERVIpKTsKKwkJbSsrOworCX0KK30KK0pPVCg0LCAiZWFzeXNuZF9kZWxldGUoKTogaXNvYyBhdWRpbyBidWZmZXJzIGZyZWVkOiAlaSBwYWdlc1xuIiwgXAorCQkJCQltICogKDB4MDEgPDwgQVVESU9fSVNPQ19PUkRFUikpOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworSk9UKDQsICJmcmVlaW5nIGF1ZGlvIGJ1ZmZlcnMuXG4iKTsKK2xvc3QgPSAwOworZm9yIChrID0gMDsgIGsgPCBwZWFzeWNhcC0+YXVkaW9fYnVmZmVyX3BhZ2VfbWFueTsgIGsrKykgeworCWlmICgodm9pZCAqKU5VTEwgIT0gcGVhc3ljYXAtPmF1ZGlvX2J1ZmZlcltrXS5wZ28pIHsKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKShwZWFzeWNhcC0+YXVkaW9fYnVmZmVyW2tdLnBnbykpOworCQlwZWFzeWNhcC0+YXVkaW9fYnVmZmVyW2tdLnBnbyA9ICh2b2lkICopTlVMTDsKKwkJcGVhc3ljYXAtPmFsbG9jYXRpb25fYXVkaW9fcGFnZSAtPSAxOworCQlsb3N0Kys7CisJfQorfQorSk9UKDQsICJlYXN5c25kX2RlbGV0ZSgpOiBhdWRpbyBidWZmZXJzIGZyZWVkOiAlaSBwYWdlc1xuIiwgbG9zdCk7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitKT1QoNCwgImZyZWVpbmcgZWFzeWNhcCBzdHJ1Y3R1cmUuXG4iKTsKK2FsbG9jYXRpb25fdmlkZW9fdXJiICAgID0gcGVhc3ljYXAtPmFsbG9jYXRpb25fdmlkZW9fdXJiOworYWxsb2NhdGlvbl92aWRlb19wYWdlICAgPSBwZWFzeWNhcC0+YWxsb2NhdGlvbl92aWRlb19wYWdlOworYWxsb2NhdGlvbl92aWRlb19zdHJ1Y3QgPSBwZWFzeWNhcC0+YWxsb2NhdGlvbl92aWRlb19zdHJ1Y3Q7CityZWdpc3RlcmVkX3ZpZGVvICAgICAgICA9IHBlYXN5Y2FwLT5yZWdpc3RlcmVkX3ZpZGVvOworYWxsb2NhdGlvbl9hdWRpb191cmIgICAgPSBwZWFzeWNhcC0+YWxsb2NhdGlvbl9hdWRpb191cmI7CithbGxvY2F0aW9uX2F1ZGlvX3BhZ2UgICA9IHBlYXN5Y2FwLT5hbGxvY2F0aW9uX2F1ZGlvX3BhZ2U7CithbGxvY2F0aW9uX2F1ZGlvX3N0cnVjdCA9IHBlYXN5Y2FwLT5hbGxvY2F0aW9uX2F1ZGlvX3N0cnVjdDsKK3JlZ2lzdGVyZWRfYXVkaW8gICAgICAgID0gcGVhc3ljYXAtPnJlZ2lzdGVyZWRfYXVkaW87CittID0gMDsKK2lmICgoc3RydWN0IGVhc3ljYXAgKilOVUxMICE9IHBlYXN5Y2FwKSB7CisJa2ZyZWUocGVhc3ljYXApOyAgcGVhc3ljYXAgPSAoc3RydWN0IGVhc3ljYXAgKilOVUxMOworCWFsbG9jYXRpb25fdmlkZW9fc3RydWN0IC09IHNpemVvZihzdHJ1Y3QgZWFzeWNhcCk7CisJbSsrOworfQorSk9UKDQsICIlaSBlYXN5Y2FwIHN0cnVjdHVyZSBmcmVlZFxuIiwgbSk7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK1NBWSgiJThpPSB2aWRlbyB1cmJzICAgICBhZnRlciBhbGwgZGVsZXRpb25zXG4iLCBhbGxvY2F0aW9uX3ZpZGVvX3VyYik7CitTQVkoIiU4aT0gdmlkZW8gcGFnZXMgICAgYWZ0ZXIgYWxsIGRlbGV0aW9uc1xuIiwgYWxsb2NhdGlvbl92aWRlb19wYWdlKTsKK1NBWSgiJThpPSB2aWRlbyBzdHJ1Y3RzICBhZnRlciBhbGwgZGVsZXRpb25zXG4iLCBhbGxvY2F0aW9uX3ZpZGVvX3N0cnVjdCk7CitTQVkoIiU4aT0gdmlkZW8gZGV2aWNlcyAgYWZ0ZXIgYWxsIGRlbGV0aW9uc1xuIiwgcmVnaXN0ZXJlZF92aWRlbyk7CitTQVkoIiU4aT0gYXVkaW8gdXJicyAgICAgYWZ0ZXIgYWxsIGRlbGV0aW9uc1xuIiwgYWxsb2NhdGlvbl9hdWRpb191cmIpOworU0FZKCIlOGk9IGF1ZGlvIHBhZ2VzICAgIGFmdGVyIGFsbCBkZWxldGlvbnNcbiIsIGFsbG9jYXRpb25fYXVkaW9fcGFnZSk7CitTQVkoIiU4aT0gYXVkaW8gc3RydWN0cyAgYWZ0ZXIgYWxsIGRlbGV0aW9uc1xuIiwgYWxsb2NhdGlvbl9hdWRpb19zdHJ1Y3QpOworU0FZKCIlOGk9IGF1ZGlvIGRldmljZXMgIGFmdGVyIGFsbCBkZWxldGlvbnNcbiIsIHJlZ2lzdGVyZWRfYXVkaW8pOworCitKT1QoNCwgImVuZGluZy5cbiIpOworcmV0dXJuOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordW5zaWduZWQgaW50IGVhc3ljYXBfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKK3sKK3N0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcDsKKworSk9UKDgsICJcbiIpOworCitpZiAoTlVMTCA9PSAoKHBvbGxfdGFibGUgKil3YWl0KSkKKwlKT1QoOCwgIldBUk5JTkc6ICBwb2xsIHRhYmxlIHBvaW50ZXIgaXMgTlVMTCAuLi4gY29udGludWluZ1xuIik7CitpZiAoTlVMTCA9PSAoKHN0cnVjdCBmaWxlICopZmlsZSkpIHsKKwlTQVkoIkVSUk9SOiAgZmlsZSBwb2ludGVyIGlzIE5VTExcbiIpOworCXJldHVybiAtRUZBVUxUOworfQorcGVhc3ljYXAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CitpZiAoTlVMTCA9PSBwZWFzeWNhcCkgeworCVNBWSgiRVJST1I6ICBwZWFzeWNhcCBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KK3BlYXN5Y2FwLT5wb2xsZWQgPSAxOworCitpZiAoMCA9PSBlYXN5Y2FwX2RxYnVmKHBlYXN5Y2FwLCAwKSkKKwlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKK2Vsc2UKKwlyZXR1cm4gUE9MTEVSUjsKKworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBJRiBtb2RlIElTIE5PTlpFUk8gVEhJUyBST1VUSU5FIFJFVFVSTlMgLUVBR0FJTiBSQVRIRVIgVEhBTiBCTE9DS0lORy4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CitlYXN5Y2FwX2RxYnVmKHN0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcCwgaW50IG1vZGUpCit7CitpbnQgbWlzcywgcmM7CisKK0pPVCg4LCAiXG4iKTsKKworaWYgKE5VTEwgPT0gcGVhc3ljYXApIHsKKwlTQVkoIkVSUk9SOiAgcGVhc3ljYXAgaXMgTlVMTFxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFdBSVQgRk9SIEZJRUxEIDAKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworbWlzcyA9IDA7CitpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCYocGVhc3ljYXAtPm11dGV4X21tYXBfdmlkZW9bMF0pKSkKKwlyZXR1cm4gLUVSRVNUQVJUU1lTOword2hpbGUgKChwZWFzeWNhcC0+ZmllbGRfcmVhZCA9PSBwZWFzeWNhcC0+ZmllbGRfZmlsbCkgfHwgXAorCQkJCSgwICE9ICgweEZGMDAgJiBwZWFzeWNhcC0+ZmllbGRfYnVmZmVyXAorCQkJCQlbcGVhc3ljYXAtPmZpZWxkX3JlYWRdWzBdLmtvdW50KSkgfHwgXAorCQkJCSgwICE9ICgweDAwRkYgJiBwZWFzeWNhcC0+ZmllbGRfYnVmZmVyXAorCQkJCQlbcGVhc3ljYXAtPmZpZWxkX3JlYWRdWzBdLmtvdW50KSkpIHsKKwltdXRleF91bmxvY2soJihwZWFzeWNhcC0+bXV0ZXhfbW1hcF92aWRlb1swXSkpOworCisJaWYgKG1vZGUpCisJCXJldHVybiAtRUFHQUlOOworCisJSk9UKDgsICJmaXJzdCB3YWl0ICBvbiB3cV92aWRlbywgIiBcCisJCQkJIiVpPWZpZWxkX3JlYWQgICVpPWZpZWxkX2ZpbGxcbiIsIFwKKwkJCQlwZWFzeWNhcC0+ZmllbGRfcmVhZCwgcGVhc3ljYXAtPmZpZWxkX2ZpbGwpOworCisJbXNsZWVwKDEpOworCWlmICgwICE9ICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocGVhc3ljYXAtPndxX3ZpZGVvLCBcCisJCQkocGVhc3ljYXAtPnZpZGVvX2lkbGUgfHwgcGVhc3ljYXAtPnZpZGVvX2VvZiAgfHwgXAorCQkJKChwZWFzeWNhcC0+ZmllbGRfcmVhZCAhPSBwZWFzeWNhcC0+ZmllbGRfZmlsbCkgJiYgXAorCQkJCSgwID09ICgweEZGMDAgJiBwZWFzeWNhcC0+ZmllbGRfYnVmZmVyXAorCQkJCQlbcGVhc3ljYXAtPmZpZWxkX3JlYWRdWzBdLmtvdW50KSkgJiYgXAorCQkJCSgwID09ICgweDAwRkYgJiBwZWFzeWNhcC0+ZmllbGRfYnVmZmVyXAorCQkJCQlbcGVhc3ljYXAtPmZpZWxkX3JlYWRdWzBdLmtvdW50KSkpKSkpKXsKKwkJU0FZKCJhYm9ydGVkIGJ5IHNpZ25hbFxuIik7CisJCXJldHVybiAtRUlPOworCQl9CisJaWYgKHBlYXN5Y2FwLT52aWRlb19pZGxlKSB7CisJCUpPVCg4LCAiJWk9cGVhc3ljYXAtPnZpZGVvX2lkbGVcbiIsIHBlYXN5Y2FwLT52aWRlb19pZGxlKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlmIChwZWFzeWNhcC0+dmlkZW9fZW9mKSB7CisJCUpPVCg4LCAiJWk9cGVhc3ljYXAtPnZpZGVvX2VvZlxuIiwgcGVhc3ljYXAtPnZpZGVvX2VvZik7CisJCWRlYnJpZWYocGVhc3ljYXApOworCQlraWxsX3ZpZGVvX3VyYnMocGVhc3ljYXApOworCQlyZXR1cm4gLUVJTzsKKwl9CittaXNzKys7CitpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCYocGVhc3ljYXAtPm11dGV4X21tYXBfdmlkZW9bMF0pKSkKKwlyZXR1cm4gLUVSRVNUQVJUU1lTOworfQorbXV0ZXhfdW5sb2NrKCYocGVhc3ljYXAtPm11dGV4X21tYXBfdmlkZW9bMF0pKTsKK0pPVCg4LCAiZmlyc3QgYXdha2VuaW5nIG9uIHdxX3ZpZGVvIGFmdGVyICVpIHdhaXRzXG4iLCBtaXNzKTsKKworcmMgPSBmaWVsZDJmcmFtZShwZWFzeWNhcCk7CitpZiAoMCAhPSByYykKKwlTQVkoIkVSUk9SOiBmaWVsZDJmcmFtZSgpIHJldHVybmVkICVpXG4iLCByYyk7CisKK2lmICh0cnVlID09IHBlYXN5Y2FwLT5vZmZlcmZpZWxkcykgeworCXBlYXN5Y2FwLT5mcmFtZV9yZWFkID0gcGVhc3ljYXAtPmZyYW1lX2ZpbGw7CisJKHBlYXN5Y2FwLT5mcmFtZV9maWxsKSsrOworCWlmIChwZWFzeWNhcC0+ZnJhbWVfYnVmZmVyX21hbnkgPD0gcGVhc3ljYXAtPmZyYW1lX2ZpbGwpCisJCXBlYXN5Y2FwLT5mcmFtZV9maWxsID0gMDsKKworCWlmICgweDAxICYgZWFzeWNhcF9zdGFuZGFyZFtwZWFzeWNhcC0+c3RhbmRhcmRfb2Zmc2V0XS5tYXNrKSB7CisJCXBlYXN5Y2FwLT5mcmFtZV9idWZmZXJbcGVhc3ljYXAtPmZyYW1lX3JlYWRdWzBdLmtvdW50ID0gXAorCQkJCQkJCVY0TDJfRklFTERfQk9UVE9NOworCX0gZWxzZSB7CisJCXBlYXN5Y2FwLT5mcmFtZV9idWZmZXJbcGVhc3ljYXAtPmZyYW1lX3JlYWRdWzBdLmtvdW50ID0gXAorCQkJCQkJCVY0TDJfRklFTERfVE9QOworCX0KK0pPVCg4LCAic2V0dGluZzogICAgJWk9cGVhc3ljYXAtPmZyYW1lX3JlYWRcbiIsIHBlYXN5Y2FwLT5mcmFtZV9yZWFkKTsKK0pPVCg4LCAiYnVtcGVkIHRvOiAgJWk9cGVhc3ljYXAtPmZyYW1lX2ZpbGxcbiIsIHBlYXN5Y2FwLT5mcmFtZV9maWxsKTsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgV0FJVCBGT1IgRklFTEQgMQorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCittaXNzID0gMDsKK2lmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJihwZWFzeWNhcC0+bXV0ZXhfbW1hcF92aWRlb1swXSkpKQorCXJldHVybiAtRVJFU1RBUlRTWVM7Cit3aGlsZSAoKHBlYXN5Y2FwLT5maWVsZF9yZWFkID09IHBlYXN5Y2FwLT5maWVsZF9maWxsKSB8fCBcCisJCQkJKDAgIT0gKDB4RkYwMCAmIHBlYXN5Y2FwLT5maWVsZF9idWZmZXJcCisJCQkJCVtwZWFzeWNhcC0+ZmllbGRfcmVhZF1bMF0ua291bnQpKSB8fCBcCisJCQkJKDAgPT0gKDB4MDBGRiAmIHBlYXN5Y2FwLT5maWVsZF9idWZmZXJcCisJCQkJCVtwZWFzeWNhcC0+ZmllbGRfcmVhZF1bMF0ua291bnQpKSkgeworCW11dGV4X3VubG9jaygmKHBlYXN5Y2FwLT5tdXRleF9tbWFwX3ZpZGVvWzBdKSk7CisKKwlpZiAobW9kZSkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlKT1QoOCwgInNlY29uZCB3YWl0IG9uIHdxX3ZpZGVvLCAiIFwKKwkJCQkiJWk9ZmllbGRfcmVhZCAgJWk9ZmllbGRfZmlsbFxuIiwgXAorCQkJCXBlYXN5Y2FwLT5maWVsZF9yZWFkLCBwZWFzeWNhcC0+ZmllbGRfZmlsbCk7CisJbXNsZWVwKDEpOworCWlmICgwICE9ICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocGVhc3ljYXAtPndxX3ZpZGVvLCBcCisJCQkocGVhc3ljYXAtPnZpZGVvX2lkbGUgfHwgcGVhc3ljYXAtPnZpZGVvX2VvZiAgfHwgXAorCQkJKChwZWFzeWNhcC0+ZmllbGRfcmVhZCAhPSBwZWFzeWNhcC0+ZmllbGRfZmlsbCkgJiYgXAorCQkJCSgwID09ICgweEZGMDAgJiBwZWFzeWNhcC0+ZmllbGRfYnVmZmVyXAorCQkJCQlbcGVhc3ljYXAtPmZpZWxkX3JlYWRdWzBdLmtvdW50KSkgJiYgXAorCQkJCSgwICE9ICgweDAwRkYgJiBwZWFzeWNhcC0+ZmllbGRfYnVmZmVyXAorCQkJCQlbcGVhc3ljYXAtPmZpZWxkX3JlYWRdWzBdLmtvdW50KSkpKSkpKXsKKwkJU0FZKCJhYm9ydGVkIGJ5IHNpZ25hbFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAocGVhc3ljYXAtPnZpZGVvX2lkbGUpIHsKKwkJSk9UKDgsICIlaT1wZWFzeWNhcC0+dmlkZW9faWRsZVxuIiwgcGVhc3ljYXAtPnZpZGVvX2lkbGUpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJaWYgKHBlYXN5Y2FwLT52aWRlb19lb2YpIHsKKwkJSk9UKDgsICIlaT1wZWFzeWNhcC0+dmlkZW9fZW9mXG4iLCBwZWFzeWNhcC0+dmlkZW9fZW9mKTsKKwkJZGVicmllZihwZWFzeWNhcCk7CisJCWtpbGxfdmlkZW9fdXJicyhwZWFzeWNhcCk7CisJCXJldHVybiAtRUlPOworCX0KK21pc3MrKzsKK2lmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJihwZWFzeWNhcC0+bXV0ZXhfbW1hcF92aWRlb1swXSkpKQorCXJldHVybiAtRVJFU1RBUlRTWVM7Cit9CittdXRleF91bmxvY2soJihwZWFzeWNhcC0+bXV0ZXhfbW1hcF92aWRlb1swXSkpOworSk9UKDgsICJzZWNvbmQgYXdha2VuaW5nIG9uIHdxX3ZpZGVvIGFmdGVyICVpIHdhaXRzXG4iLCBtaXNzKTsKKworcmMgPSBmaWVsZDJmcmFtZShwZWFzeWNhcCk7CitpZiAoMCAhPSByYykKKwlTQVkoIkVSUk9SOiBmaWVsZDJmcmFtZSgpIHJldHVybmVkICVpXG4iLCByYyk7CisKK3BlYXN5Y2FwLT5mcmFtZV9yZWFkID0gcGVhc3ljYXAtPmZyYW1lX2ZpbGw7CitwZWFzeWNhcC0+cXVldWVkW3BlYXN5Y2FwLT5mcmFtZV9yZWFkXSA9IDA7CitwZWFzeWNhcC0+ZG9uZVtwZWFzeWNhcC0+ZnJhbWVfcmVhZF0gICA9IFY0TDJfQlVGX0ZMQUdfRE9ORTsKKworKHBlYXN5Y2FwLT5mcmFtZV9maWxsKSsrOworaWYgKHBlYXN5Y2FwLT5mcmFtZV9idWZmZXJfbWFueSA8PSBwZWFzeWNhcC0+ZnJhbWVfZmlsbCkKKwlwZWFzeWNhcC0+ZnJhbWVfZmlsbCA9IDA7CisKK2lmICgweDAxICYgZWFzeWNhcF9zdGFuZGFyZFtwZWFzeWNhcC0+c3RhbmRhcmRfb2Zmc2V0XS5tYXNrKSB7CisJcGVhc3ljYXAtPmZyYW1lX2J1ZmZlcltwZWFzeWNhcC0+ZnJhbWVfcmVhZF1bMF0ua291bnQgPSBcCisJCQkJCQkJVjRMMl9GSUVMRF9UT1A7Cit9IGVsc2UgeworCXBlYXN5Y2FwLT5mcmFtZV9idWZmZXJbcGVhc3ljYXAtPmZyYW1lX3JlYWRdWzBdLmtvdW50ID0gXAorCQkJCQkJCVY0TDJfRklFTERfQk9UVE9NOworfQorCitKT1QoOCwgInNldHRpbmc6ICAgICVpPXBlYXN5Y2FwLT5mcmFtZV9yZWFkXG4iLCBwZWFzeWNhcC0+ZnJhbWVfcmVhZCk7CitKT1QoOCwgImJ1bXBlZCB0bzogICVpPXBlYXN5Y2FwLT5mcmFtZV9maWxsXG4iLCBwZWFzeWNhcC0+ZnJhbWVfZmlsbCk7CisKK3JldHVybiAwOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBCWSBERUZJTklUSU9OLCBvZGQgSVMgdHJ1ZSAgRk9SIFRIRSBGSUVMRCBPQ0NVUFlJTkcgTElORVMgMSwzLDUsLi4uLDQ3OQorICogICAgICAgICAgICAgICAgIG9kZCBJUyBmYWxzZSBGT1IgVEhFIEZJRUxEIE9DQ1VQWUlORyBMSU5FUyAwLDIsNCwuLi4sNDc4CisgKgorICogIFdIRU4gQk9PTEVBTiBQQVJBTUVURVIgZGVjaW1hdGVwaXhlbCBJUyB0cnVlLCBPTkxZIFRIRSBGSUVMRCBGT1IgV0hJQ0gKKyAqICBvZGQ9PWZhbHNlIElTIFRSQU5TRkVSUkVEIFRPIFRIRSBGUkFNRSBCVUZGRVIuCisgKgorICogIFRIRSBCT09MRUFOIFBBUkFNRVRFUiBvZmZlcmZpZWxkcyBJUyB0cnVlIE9OTFkgV0hFTiBUSEUgVVNFUiBQUk9HUkFNCisgKiAgQ0hPT1NFUyBUSEUgT1BUSU9OIFY0TDJfRklFTERfQUxURVJOQVRFLiAgTk8gVVNFUlNQQUNFIFBST0dSQU0gVEVTVEVECisgKiAgVE8gREFURSBIQVMgRE9ORSBUSElTLiAgQlVHUyBBUkUgTElLRUxZLgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQKK2ZpZWxkMmZyYW1lKHN0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcCkKK3sKK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCB0aW1ldmFsMDsKK3N0cnVjdCB0aW1ldmFsIHRpbWV2YWw7Citsb25nIGxvbmcgaW50IGFib3ZlLCBiZWxvdzsKK19fdTMyIHJlbWFpbmRlcjsKK3N0cnVjdCBzaWduZWRfZGl2X3Jlc3VsdCBzZHI7CisKK3ZvaWQgKnBleCwgKnBhZDsKK2ludCBrZXgsIGthZCwgbWV4LCBtYWQsIHJleCwgcmFkLCByYWQyOworaW50IGMyLCBjMywgdzIsIHczLCBjeiwgd3o7CitpbnQgcmMsIGJ5dGVzcGVycGl4ZWwsIG11bHRpcGxpZXIsIG11Y2gsIG1vcmUsIG92ZXIsIHJ1bXAsIGNhY2hlczsKK19fdTggbWFzaywgbWFyZ2luOworYm9vbCBvZGQsIGlzdXksIGRlY2ltYXRlcGl4ZWwsIG9mZmVyZmllbGRzOworCitKT1QoOCwgIj09PT09ICBwYXJpdHkgJWksIGZpZWxkIGJ1ZmZlciAlaSAtLT4gZnJhbWUgYnVmZmVyICVpXG4iLCBcCisJCQlwZWFzeWNhcC0+ZmllbGRfYnVmZmVyW3BlYXN5Y2FwLT5maWVsZF9yZWFkXVswXS5rb3VudCxcCisJCQlwZWFzeWNhcC0+ZmllbGRfcmVhZCwgcGVhc3ljYXAtPmZyYW1lX2ZpbGwpOworSk9UKDgsICI9PT09PSAgJWk9Ynl0ZXNwZXJwaXhlbFxuIiwgcGVhc3ljYXAtPmJ5dGVzcGVycGl4ZWwpOworaWYgKHRydWUgPT0gcGVhc3ljYXAtPm9mZmVyZmllbGRzKQorCUpPVCg4LCAiPT09PT0gb2ZmZXJmaWVsZHNcbiIpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFJFSkVDVCBPUiBDTEVBTiBCQUQgRklFTERTCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2lmIChwZWFzeWNhcC0+ZmllbGRfcmVhZCA9PSBwZWFzeWNhcC0+ZmllbGRfZmlsbCkgeworCVNBWSgiRVJST1I6IG9uIGVudHJ5LCBzdGlsbCBmaWxsaW5nIGZpZWxkIGJ1ZmZlciAlaVxuIiwgXAorCQkJCQkJCXBlYXN5Y2FwLT5maWVsZF9yZWFkKTsKKwlyZXR1cm4gMDsKK30KKyNpZiBkZWZpbmVkKEVBU1lDQVBfVEVTVENBUkQpCitlYXN5Y2FwX3Rlc3RjYXJkKHBlYXN5Y2FwLCBwZWFzeWNhcC0+ZmllbGRfcmVhZCk7CisjZWxzZQoraWYgKDAgIT0gKDB4MDQwMCAmIHBlYXN5Y2FwLT5maWVsZF9idWZmZXJbcGVhc3ljYXAtPmZpZWxkX3JlYWRdWzBdLmtvdW50KSkKKwllYXN5Y2FwX3Rlc3RjYXJkKHBlYXN5Y2FwLCBwZWFzeWNhcC0+ZmllbGRfcmVhZCk7CisjZW5kaWYgLypFQVNZQ0FQX1RFU1RDQVJEKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworb2ZmZXJmaWVsZHMgPSBwZWFzeWNhcC0+b2ZmZXJmaWVsZHM7CitieXRlc3BlcnBpeGVsID0gcGVhc3ljYXAtPmJ5dGVzcGVycGl4ZWw7CitkZWNpbWF0ZXBpeGVsID0gcGVhc3ljYXAtPmRlY2ltYXRlcGl4ZWw7CisKK2lmICgoMiAhPSBieXRlc3BlcnBpeGVsKSAmJiBcCisJCQkoMyAhPSBieXRlc3BlcnBpeGVsKSAmJiBcCisJCQkoNCAhPSBieXRlc3BlcnBpeGVsKSkgeworCVNBWSgiTUlTVEFLRTogJWk9Ynl0ZXNwZXJwaXhlbFxuIiwgYnl0ZXNwZXJwaXhlbCk7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CitpZiAodHJ1ZSA9PSBkZWNpbWF0ZXBpeGVsKQorCW11bHRpcGxpZXIgPSAyOworZWxzZQorCW11bHRpcGxpZXIgPSAxOworCit3MiA9IDIgKiBtdWx0aXBsaWVyICogKHBlYXN5Y2FwLT53aWR0aCk7Cit3MyA9IGJ5dGVzcGVycGl4ZWwgKiBcCisJCW11bHRpcGxpZXIgKiBcCisJCShwZWFzeWNhcC0+d2lkdGgpOword3ogPSBtdWx0aXBsaWVyICogXAorCQkocGVhc3ljYXAtPmhlaWdodCkgKiBcCisJCW11bHRpcGxpZXIgKiBcCisJCShwZWFzeWNhcC0+d2lkdGgpOworCitrZXggPSBwZWFzeWNhcC0+ZmllbGRfcmVhZDsgIG1leCA9IDA7CitrYWQgPSBwZWFzeWNhcC0+ZnJhbWVfZmlsbDsgIG1hZCA9IDA7CisKK3BleCA9IHBlYXN5Y2FwLT5maWVsZF9idWZmZXJba2V4XVswXS5wZ287ICByZXggPSBQQUdFX1NJWkU7CitwYWQgPSBwZWFzeWNhcC0+ZnJhbWVfYnVmZmVyW2thZF1bMF0ucGdvOyAgcmFkID0gUEFHRV9TSVpFOworaWYgKHBlYXN5Y2FwLT5maWVsZF9idWZmZXJba2V4XVswXS5rb3VudCkKKwlvZGQgPSB0cnVlOworZWxzZQorCW9kZCA9IGZhbHNlOworCitpZiAoKHRydWUgPT0gb2RkKSAmJiAoZmFsc2UgPT0gb2ZmZXJmaWVsZHMpICYmKGZhbHNlID09IGRlY2ltYXRlcGl4ZWwpKSB7CisJSk9UKDgsICIgIGluaXRpYWwgc2tpcHBpbmcgICAgJTRpICAgICAgICAgIGJ5dGVzIHAuJTRpXG4iLCBcCisJCQkJCQkJdzMvbXVsdGlwbGllciwgbWFkKTsKKwlwYWQgKz0gKHczIC8gbXVsdGlwbGllcik7ICByYWQgLT0gKHczIC8gbXVsdGlwbGllcik7Cit9Citpc3V5ID0gdHJ1ZTsKK21hc2sgPSAwOyAgcnVtcCA9IDA7ICBjYWNoZXMgPSAwOworCitjeiA9IDA7Cit3aGlsZSAoY3ogPCB3eikgeworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJLyoKKwkqKiAgUFJPQ0VTUyBPTkUgTElORSBPRiBGUkFNRSBBVCBGVUxMIFJFU09MVVRJT046CisJKiogIFJFQUQgICB3MiAgIEJZVEVTIEZST00gRklFTEQgQlVGRkVSLAorCSoqICBXUklURSAgdzMgICBCWVRFUyBUTyBGUkFNRSBCVUZGRVIKKwkqKi8KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCWlmIChmYWxzZSA9PSBkZWNpbWF0ZXBpeGVsKSB7CisJCW92ZXIgPSB3MjsKKwkJZG8geworCQkJbXVjaCA9IG92ZXI7ICBtb3JlID0gMDsgIG1hcmdpbiA9IDA7ICBtYXNrID0gMHgwMDsKKwkJCWlmIChyZXggPCBtdWNoKQorCQkJCW11Y2ggPSByZXg7CisJCQlydW1wID0gMDsKKworCQkJaWYgKG11Y2ggJSAyKSB7CisJCQkJU0FZKCJNSVNUQUtFOiBtdWNoIGlzIG9kZFxuIik7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisKKwkJCW1vcmUgPSAoYnl0ZXNwZXJwaXhlbCAqIFwKKwkJCQkJbXVjaCkgLyAyOworLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworCQkJaWYgKDEgPCBieXRlc3BlcnBpeGVsKSB7CisJCQkJaWYgKChyYWQgKiBcCisJCQkJCTIpIDwgKG11Y2ggKiBcCisJCQkJCQlieXRlc3BlcnBpeGVsKSkgeworCQkJCQkvKgorCQkJCQkqKiAgIElOSlVESUNJT1VTIEFMVEVSQVRJT04gT0YgVEhJUworCQkJCQkqKiAgIEJMT0NLIFdJTEwgQ0FVU0UgQlJFQUtBR0UuCisJCQkJCSoqICAgQkVXQVJFLgorCQkJCQkqKi8KKwkJCQkJcmFkMiA9IHJhZCArIGJ5dGVzcGVycGl4ZWwgLSAxOworCQkJCQltdWNoID0gKCgoKDIgKiBcCisJCQkJCQlyYWQyKS9ieXRlc3BlcnBpeGVsKS8yKSAqIDIpOworCQkJCQlydW1wID0gKChieXRlc3BlcnBpeGVsICogXAorCQkJCQkJCW11Y2gpIC8gMikgLSByYWQ7CisJCQkJCW1vcmUgPSByYWQ7CisJCQkJCX0KKwkJCQltYXNrID0gKF9fdTgpcnVtcDsKKwkJCQltYXJnaW4gPSAwOworCQkJCWlmIChtdWNoID09IHJleCkgeworCQkJCQltYXNrIHw9IDB4MDQ7CisJCQkJCWlmICgobWV4ICsgMSkgPCBGSUVMRF9CVUZGRVJfU0laRS8gXAorCQkJCQkJCQlQQUdFX1NJWkUpIHsKKwkJCQkJCW1hcmdpbiA9ICooKF9fdTggKikocGVhc3ljYXAtPlwKKwkJCQkJCQlmaWVsZF9idWZmZXJcCisJCQkJCQkJW2tleF1bbWV4ICsgMV0ucGdvKSk7CisJCQkJCX0gZWxzZQorCQkJCQkJbWFzayB8PSAweDA4OworCQkJCX0KKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KKwkJCX0gZWxzZSB7CisJCQkJU0FZKCJNSVNUQUtFOiAlaT1ieXRlc3BlcnBpeGVsXG4iLCBcCisJCQkJCQlieXRlc3BlcnBpeGVsKTsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KKwkJCWlmIChydW1wKQorCQkJCWNhY2hlcysrOworCisJCQlyYyA9IHJlZGF1YihwZWFzeWNhcCwgcGFkLCBwZXgsIG11Y2gsIG1vcmUsIFwKKwkJCQkJCQltYXNrLCBtYXJnaW4sIGlzdXkpOworCQkJaWYgKDAgPiByYykgeworCQkJCVNBWSgiRVJST1I6IHJlZGF1YigpIGZhaWxlZFxuIik7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisJCQlpZiAobXVjaCAlIDQpIHsKKwkJCQlpZiAoaXN1eSkKKwkJCQkJaXN1eSA9IGZhbHNlOworCQkJCWVsc2UKKwkJCQkJaXN1eSA9IHRydWU7CisJCQl9CisJCQlvdmVyIC09IG11Y2g7ICAgY3ogKz0gbXVjaDsKKwkJCXBleCAgKz0gbXVjaDsgIHJleCAtPSBtdWNoOworCQkJaWYgKCFyZXgpIHsKKwkJCQltZXgrKzsKKwkJCQlwZXggPSBwZWFzeWNhcC0+ZmllbGRfYnVmZmVyW2tleF1bbWV4XS5wZ287CisJCQkJcmV4ID0gUEFHRV9TSVpFOworCQkJfQorCQkJcGFkICArPSBtb3JlOworCQkJcmFkIC09IG1vcmU7CisJCQlpZiAoIXJhZCkgeworCQkJCW1hZCsrOworCQkJCXBhZCA9IHBlYXN5Y2FwLT5mcmFtZV9idWZmZXJba2FkXVttYWRdLnBnbzsKKwkJCQlyYWQgPSBQQUdFX1NJWkU7CisJCQkJaWYgKHJ1bXApIHsKKwkJCQkJcGFkICs9IHJ1bXA7CisJCQkJCXJhZCAtPSBydW1wOworCQkJCX0KKwkJCX0KKwkJfSB3aGlsZSAob3Zlcik7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFNLSVAgIHczIEJZVEVTIElOIFRBUkdFVCBGUkFNRSBCVUZGRVIsCisgKiAgVU5MRVNTIElUIElTIFRIRSBMQVNUIExJTkUgT0YgQU4gT0REIEZSQU1FCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJaWYgKCgoZmFsc2UgPT0gb2RkKSB8fCAoY3ogIT0gd3opKSYmKGZhbHNlID09IG9mZmVyZmllbGRzKSkgeworCQkJb3ZlciA9IHczOworCQkJZG8geworCQkJCWlmICghcmFkKSB7CisJCQkJCW1hZCsrOworCQkJCQlwYWQgPSBwZWFzeWNhcC0+ZnJhbWVfYnVmZmVyXAorCQkJCQkJW2thZF1bbWFkXS5wZ287CisJCQkJCXJhZCA9IFBBR0VfU0laRTsKKwkJCQl9CisJCQkJbW9yZSA9IG92ZXI7CisJCQkJaWYgKHJhZCA8IG1vcmUpCisJCQkJCW1vcmUgPSByYWQ7CisJCQkJb3ZlciAtPSBtb3JlOworCQkJCXBhZCAgKz0gbW9yZTsKKwkJCQlyYWQgIC09IG1vcmU7CisJCQl9IHdoaWxlIChvdmVyKTsKKwkJfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBQUk9DRVNTIE9ORSBMSU5FIE9GIEZSQU1FIEFUIFJFRFVDRUQgUkVTT0xVVElPTjoKKyAqICBPTkxZIElGIGZhbHNlPT1vZGQsCisgKiAgUkVBRCAgIHcyICAgQllURVMgRlJPTSBGSUVMRCBCVUZGRVIsCisgKiAgV1JJVEUgIHczIC8gMiAgQllURVMgVE8gRlJBTUUgQlVGRkVSCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwl9IGVsc2UgaWYgKGZhbHNlID09IG9kZCkgeworCQlvdmVyID0gdzI7CisJCWRvIHsKKwkJCW11Y2ggPSBvdmVyOyAgbW9yZSA9IDA7ICBtYXJnaW4gPSAwOyAgbWFzayA9IDB4MDA7CisJCQlpZiAocmV4IDwgbXVjaCkKKwkJCQltdWNoID0gcmV4OworCQkJcnVtcCA9IDA7CisKKwkJCWlmIChtdWNoICUgMikgeworCQkJCVNBWSgiTUlTVEFLRTogbXVjaCBpcyBvZGRcbiIpOworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCisJCQltb3JlID0gKGJ5dGVzcGVycGl4ZWwgKiBcCisJCQkJCW11Y2gpIC8gNDsKKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KKwkJCWlmICgxIDwgYnl0ZXNwZXJwaXhlbCkgeworCQkJCWlmICgocmFkICogNCkgPCAobXVjaCAqIFwKKwkJCQkJCWJ5dGVzcGVycGl4ZWwpKSB7CisJCQkJCS8qCisJCQkJCSoqICAgSU5KVURJQ0lPVVMgQUxURVJBVElPTiBPRiBUSElTCisJCQkJCSoqICAgQkxPQ0sgV0lMTCBDQVVTRSBCUkVBS0FHRS4KKwkJCQkJKiogICBCRVdBUkUuCisJCQkJCSoqLworCQkJCQlyYWQyID0gcmFkICsgYnl0ZXNwZXJwaXhlbCAtIDE7CisJCQkJCW11Y2ggPSAoKCgoMiAqIHJhZDIpL2J5dGVzcGVycGl4ZWwpLzIpXAorCQkJCQkJCQkJKiA0KTsKKwkJCQkJcnVtcCA9ICgoYnl0ZXNwZXJwaXhlbCAqIFwKKwkJCQkJCQltdWNoKSAvIDQpIC0gcmFkOworCQkJCQltb3JlID0gcmFkOworCQkJCQl9CisJCQkJbWFzayA9IChfX3U4KXJ1bXA7CisJCQkJbWFyZ2luID0gMDsKKwkJCQlpZiAobXVjaCA9PSByZXgpIHsKKwkJCQkJbWFzayB8PSAweDA0OworCQkJCQlpZiAoKG1leCArIDEpIDwgRklFTERfQlVGRkVSX1NJWkUvIFwKKwkJCQkJCQkJUEFHRV9TSVpFKSB7CisJCQkJCQltYXJnaW4gPSAqKChfX3U4ICopKHBlYXN5Y2FwLT5cCisJCQkJCQkJZmllbGRfYnVmZmVyXAorCQkJCQkJCVtrZXhdW21leCArIDFdLnBnbykpOworCQkJCQkJfQorCQkJCQllbHNlCisJCQkJCQltYXNrIHw9IDB4MDg7CisJCQkJCX0KKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KKwkJCQl9IGVsc2UgeworCQkJCQlTQVkoIk1JU1RBS0U6ICVpPWJ5dGVzcGVycGl4ZWxcbiIsIFwKKwkJCQkJCWJ5dGVzcGVycGl4ZWwpOworCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQl9CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCisJCQlpZiAocnVtcCkKKwkJCQljYWNoZXMrKzsKKworCQkJcmMgPSByZWRhdWIocGVhc3ljYXAsIHBhZCwgcGV4LCBtdWNoLCBtb3JlLCBcCisJCQkJCQkJbWFzaywgbWFyZ2luLCBpc3V5KTsKKwkJCWlmICgwID4gcmMpIHsKKwkJCQlTQVkoIkVSUk9SOiByZWRhdWIoKSBmYWlsZWRcbiIpOworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQkJb3ZlciAtPSBtdWNoOyAgIGN6ICs9IG11Y2g7CisJCQlwZXggICs9IG11Y2g7ICByZXggLT0gbXVjaDsKKwkJCWlmICghcmV4KSB7CisJCQkJbWV4Kys7CisJCQkJcGV4ID0gcGVhc3ljYXAtPmZpZWxkX2J1ZmZlcltrZXhdW21leF0ucGdvOworCQkJCXJleCA9IFBBR0VfU0laRTsKKwkJCX0KKwkJCXBhZCAgKz0gbW9yZTsKKwkJCXJhZCAtPSBtb3JlOworCQkJaWYgKCFyYWQpIHsKKwkJCQltYWQrKzsKKwkJCQlwYWQgPSBwZWFzeWNhcC0+ZnJhbWVfYnVmZmVyW2thZF1bbWFkXS5wZ287CisJCQkJcmFkID0gUEFHRV9TSVpFOworCQkJCWlmIChydW1wKSB7CisJCQkJCXBhZCArPSBydW1wOworCQkJCQlyYWQgLT0gcnVtcDsKKwkJCQl9CisJCQl9CisJCX0gd2hpbGUgKG92ZXIpOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBPVEhFUldJU0UgSlVTVAorICogIFJFQUQgICB3MiAgIEJZVEVTIEZST00gRklFTEQgQlVGRkVSIEFORCBESVNDQVJEIFRIRU0KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCX0gZWxzZSB7CisJCW92ZXIgPSB3MjsKKwkJZG8geworCQkJaWYgKCFyZXgpIHsKKwkJCQltZXgrKzsKKwkJCQlwZXggPSBwZWFzeWNhcC0+ZmllbGRfYnVmZmVyW2tleF1bbWV4XS5wZ287CisJCQkJcmV4ID0gUEFHRV9TSVpFOworCQkJfQorCQkJbXVjaCA9IG92ZXI7CisJCQlpZiAocmV4IDwgbXVjaCkKKwkJCQltdWNoID0gcmV4OworCQkJb3ZlciAtPSBtdWNoOworCQkJY3ogKz0gbXVjaDsKKwkJCXBleCAgKz0gbXVjaDsKKwkJCXJleCAtPSBtdWNoOworCQl9IHdoaWxlIChvdmVyKTsKKwl9Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFNBTklUWSBDSEVDS1MKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworYzIgPSAobWV4ICsgMSkqUEFHRV9TSVpFIC0gcmV4OworaWYgKGN6ICE9IGMyKQorCVNBWSgiRVJST1I6IGRpc2NyZXBhbmN5ICVpIGluIGJ5dGVzIHJlYWRcbiIsIGMyIC0gY3opOworYzMgPSAobWFkICsgMSkqUEFHRV9TSVpFIC0gcmFkOworCitpZiAoZmFsc2UgPT0gZGVjaW1hdGVwaXhlbCkgeworCWlmIChieXRlc3BlcnBpeGVsICogXAorCQljeiAhPSBjMykgXAorCQlTQVkoIkVSUk9SOiBkaXNjcmVwYW5jeSAlaSBpbiBieXRlcyB3cml0dGVuXG4iLCBcCisJCQkJCQljMyAtIChieXRlc3BlcnBpeGVsICogXAorCQkJCQkJCQkJY3opKTsKK30gZWxzZSB7CisJaWYgKGZhbHNlID09IG9kZCkgeworCQlpZiAoYnl0ZXNwZXJwaXhlbCAqIFwKKwkJCWN6ICE9ICg0ICogYzMpKQorCQkJU0FZKCJFUlJPUjogZGlzY3JlcGFuY3kgJWkgaW4gYnl0ZXMgd3JpdHRlblxuIiwgXAorCQkJCQkJKDIqYzMpLShieXRlc3BlcnBpeGVsICogXAorCQkJCQkJCQkJY3opKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgwICE9IGMzKQorCQkJCVNBWSgiRVJST1I6IGRpc2NyZXBhbmN5ICVpICIgXAorCQkJCQkJImluIGJ5dGVzIHdyaXR0ZW5cbiIsIGMzKTsKKwkJfQorfQoraWYgKHJ1bXApCisJU0FZKCJFUlJPUjogdW5kaXNjaGFyZ2VkIGNhY2hlIGF0IGVuZCBvZiBsaW5lIGluIGZyYW1lIGJ1ZmZlclxuIik7CisKK0pPVCg4LCAiPT09PT0gZmllbGQyZnJhbWUoKTogJWkgYnl0ZXMgLS0+ICVpIGJ5dGVzIChpbmNsIHNraXApXG4iLCBjMiwgYzMpOworSk9UKDgsICI9PT09PSBmaWVsZDJmcmFtZSgpOiAlaT1tYWQgICVpPXJhZFxuIiwgbWFkLCByYWQpOworCitpZiAodHJ1ZSA9PSBvZGQpCisJSk9UKDgsICIrKysrKyBmaWVsZDJmcmFtZSgpOiAgZnJhbWUgYnVmZmVyICVpIGlzIGZ1bGxcbiIsIGthZCk7CisKK2lmIChwZWFzeWNhcC0+ZmllbGRfcmVhZCA9PSBwZWFzeWNhcC0+ZmllbGRfZmlsbCkKKwlTQVkoIldBUk5JTkc6IG9uIGV4aXQsIGZpbGxpbmcgZmllbGQgYnVmZmVyICVpXG4iLCBcCisJCQkJCQkJcGVhc3ljYXAtPmZpZWxkX3JlYWQpOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBDQUxDVUxBVEUgVklERU8gU1RSRUFNSU5HIFJBVEUKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworZG9fZ2V0dGltZW9mZGF5KCZ0aW1ldmFsKTsKK2lmICh0aW1ldmFsMC50dl9zZWMpIHsKKwliZWxvdyA9ICgobG9uZyBsb25nIGludCkoMTAwMDAwMCkpICogXAorCQkoKGxvbmcgbG9uZyBpbnQpKHRpbWV2YWwudHZfc2VjICAtIHRpbWV2YWwwLnR2X3NlYykpICsgXAorCQkJIChsb25nIGxvbmcgaW50KSh0aW1ldmFsLnR2X3VzZWMgLSB0aW1ldmFsMC50dl91c2VjKTsKKwlhYm92ZSA9IChsb25nIGxvbmcgaW50KTEwMDAwMDA7CisKKwlzZHIgPSBzaWduZWRfZGl2KGFib3ZlLCBiZWxvdyk7CisJYWJvdmUgPSBzZHIucXVvdGllbnQ7CisJcmVtYWluZGVyID0gKF9fdTMyKXNkci5yZW1haW5kZXI7CisKKwlKT1QoOCwgInZpZGVvIHN0cmVhbWluZyBhdCAlM2xsaS4lMDNpIGZpZWxkcyBwZXIgc2Vjb25kXG4iLCBhYm92ZSwgXAorCQkJCQkJCShyZW1haW5kZXIvMTAwMCkpOworfQordGltZXZhbDAgPSB0aW1ldmFsOworCitpZiAoY2FjaGVzKQorCUpPVCg4LCAiJWk9Y2FjaGVzXG4iLCBjYWNoZXMpOworcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3Qgc2lnbmVkX2Rpdl9yZXN1bHQKK3NpZ25lZF9kaXYobG9uZyBsb25nIGludCBhYm92ZSwgbG9uZyBsb25nIGludCBiZWxvdykKK3sKK3N0cnVjdCBzaWduZWRfZGl2X3Jlc3VsdCBzZHI7CisKK2lmICgoKDAgPD0gYWJvdmUpICYmICgwIDw9IGJlbG93KSkgfHwgKCgwICA+IGFib3ZlKSAmJiAoMCAgPiBiZWxvdykpKSB7CisJc2RyLnJlbWFpbmRlciA9ICh1bnNpZ25lZCBsb25nIGxvbmcgaW50KSBkb19kaXYoYWJvdmUsIGJlbG93KTsKKwlzZHIucXVvdGllbnQgID0gKGxvbmcgbG9uZyBpbnQpIGFib3ZlOworfSBlbHNlIHsKKwlpZiAoMCA+IGFib3ZlKQorCQlhYm92ZSA9IC1hYm92ZTsKKwlpZiAoMCA+IGJlbG93KQorCQliZWxvdyA9IC1iZWxvdzsKKwlzZHIucmVtYWluZGVyID0gKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpIGRvX2RpdihhYm92ZSwgYmVsb3cpOworCXNkci5xdW90aWVudCAgPSAtKChsb25nIGxvbmcgaW50KSBhYm92ZSk7Cit9CityZXR1cm4gc2RyOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBERUNJTUFUSU9OIEFORCBDT0xPVVJTUEFDRSBDT05WRVJTSU9OLgorICoKKyAqICBUSElTIFJPVVRJTkUgUkVRVUlSRVMgVEhBVCBBTEwgVEhFIERBVEEgVE8gQkUgUkVBRCBSRVNJREVTIE9OIE9ORSBQQUdFCisgKiAgQU5EIFRIQVQgQUxMIFRIRSBEQVRBIFRPIEJFIFdSSVRURU4gUkVTSURFUyBPTiBPTkUgKERJRkZFUkVOVCkgUEFHRS4KKyAqICBUSEUgQ0FMTElORyBST1VUSU5FIE1VU1QgRU5TVVJFIFRIQVQgVEhJUyBSRVFVSVJFTUVOVCBJUyBNRVQsIEFORCBNVVNUCisgKiAgQUxTTyBFTlNVUkUgVEhBVCBtdWNoIElTIEVWRU4uCisgKgorICogIG11Y2ggQllURVMgQVJFIFJFQUQsIEFUIExFQVNUIChieXRlc3BlcnBpeGVsICogbXVjaCkvMiBCWVRFUyBBUkUgV1JJVFRFTgorICogIElGIFRIRVJFIElTIE5PIERFQ0lNQVRJT04sIEhBTEYgVEhJUyBBTU9VTlQgSUYgVEhFUkUgSVMgREVDSU1BVElPTi4KKyAqCisgKiAgbWFzayBJUyBaRVJPIFdIRU4gTk8gU1BFQ0lBTCBCRUhBVklPVVIgUkVRVUlSRUQuIE9USEVSV0lTRSBJVCBJUyBTRVQgVEhVUzoKKyAqICAgICAweDAzICYgbWFzayA9ICBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byBjYWNoZSBpbnN0ZWFkIG9mIHRvCisgKiAgICAgICAgICAgICAgICAgICAgZnJhbWUgYnVmZmVyCisgKiAgICAgMHgwNCAmIG1hc2sgPT4gdXNlIGFyZ3VtZW50IG1hcmdpbiB0byBzZXQgdGhlIGNocm9taW5hbmNlIGZvciBsYXN0IHBpeGVsCisgKiAgICAgMHgwOCAmIG1hc2sgPT4gZG8gbm90IHNldCB0aGUgY2hyb21pbmFuY2UgZm9yIGxhc3QgcGl4ZWwKKyAqCisgKiAgWVVWIHRvIFJHQiBDT05WRVJTSU9OIElTIChPUiBTSE9VTEQgQkUpIElUVS1SIEJUIDYwMS4KKyAqCisgKiAgVEhFUkUgSVMgQSBMT1QgT0YgQ09ERSBSRVBFVElUSU9OIElOIFRISVMgUk9VVElORSBJTiBPUkRFUiBUTyBBVk9JRAorICogIElORUZGSUNJRU5UIFNXSVRDSElORyBJTlNJREUgSU5ORVIgTE9PUFMuICBSRUFSUkFOR0lORyBUSEUgTE9HSUMgVE8KKyAqICBSRURVQ0UgQ09ERSBMRU5HVEggV0lMTCBHRU5FUkFMTFkgSU1QQUlSIFJVTlRJTUUgUEVSRk9STUFOQ0UuICBCRVdBUkUuCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludAorcmVkYXViKHN0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcCwgdm9pZCAqcGFkLCB2b2lkICpwZXgsIGludCBtdWNoLCBpbnQgbW9yZSwgXAorCQkJCQlfX3U4IG1hc2ssIF9fdTggbWFyZ2luLCBib29sIGlzdXkpCit7CitzdGF0aWMgX19zMzIgYXlbMjU2XSwgYnVbMjU2XSwgcnZbMjU2XSwgZ3VbMjU2XSwgZ3ZbMjU2XTsKK3N0YXRpYyBfX3U4IGNhY2hlWzhdLCAqcGNhY2hlOworX191OCByLCBnLCBiLCB5LCB1LCB2LCBjLCAqcDIsICpwMywgKnB6LCAqcHI7CitpbnQgIGJ5dGVzcGVycGl4ZWw7Citib29sIGJ5dGVzd2Fwb3JkZXIsIGRlY2ltYXRlcGl4ZWwsIGxhc3Q7CitpbnQgaiwgcnVtcDsKK19fczMyIHMzMjsKKworaWYgKG11Y2ggJSAyKSB7CisJU0FZKCJNSVNUQUtFOiBtdWNoIGlzIG9kZFxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CitieXRlc3BlcnBpeGVsID0gcGVhc3ljYXAtPmJ5dGVzcGVycGl4ZWw7CitieXRlc3dhcG9yZGVyID0gcGVhc3ljYXAtPmJ5dGVzd2Fwb3JkZXI7CitkZWNpbWF0ZXBpeGVsID0gcGVhc3ljYXAtPmRlY2ltYXRlcGl4ZWw7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2lmICghYnVbMjU1XSkgeworCWZvciAoaiA9IDA7IGogPCAxMTI7IGorKykgeworCQlzMzIgPSAoMHhGRjAwICYgKDQ1MyAqIGopKSA+PiA4OworCQlidVtqICsgMTI4XSA9ICBzMzI7IGJ1WzEyNyAtIGpdID0gLXMzMjsKKwkJczMyID0gKDB4RkYwMCAmICgzNTkgKiBqKSkgPj4gODsKKwkJcnZbaiArIDEyOF0gPSAgczMyOyBydlsxMjcgLSBqXSA9IC1zMzI7CisJCXMzMiA9ICgweEZGMDAgJiAoODggKiBqKSkgPj4gODsKKwkJZ3VbaiArIDEyOF0gPSAgczMyOyBndVsxMjcgLSBqXSA9IC1zMzI7CisJCXMzMiA9ICgweEZGMDAgJiAoMTgzICogaikpID4+IDg7CisJCWd2W2ogKyAxMjhdID0gIHMzMjsgZ3ZbMTI3IC0gal0gPSAtczMyOworCX0KKwlmb3IgKGogPSAwOyBqIDwgMTY7IGorKykgeworCQlidVtqXSA9IGJ1WzE2XTsgcnZbal0gPSBydlsxNl07CisJCWd1W2pdID0gZ3VbMTZdOyBndltqXSA9IGd2WzE2XTsKKwl9CisJZm9yIChqID0gMjQwOyBqIDwgMjU2OyBqKyspIHsKKwkJYnVbal0gPSBidVsyMzldOyBydltqXSA9IHJ2WzIzOV07CisJCWd1W2pdID0gZ3VbMjM5XTsgZ3Zbal0gPSBndlsyMzldOworCX0KKwlmb3IgKGogPSAgMTY7IGogPCAyMzY7IGorKykKKwkJYXlbal0gPSBqOworCWZvciAoaiA9ICAgMDsgaiA8ICAxNjsgaisrKQorCQlheVtqXSA9IGF5WzE2XTsKKwlmb3IgKGogPSAyMzY7IGogPCAyNTY7IGorKykKKwkJYXlbal0gPSBheVsyMzVdOworCUpPVCg4LCAibG9va3VwIHRhYmxlcyBhcmUgcHJlcGFyZWRcbiIpOworfQoraWYgKChfX3U4ICopTlVMTCA9PSBwY2FjaGUpCisJcGNhY2hlID0gJmNhY2hlWzBdOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBUUkFOU0ZFUiBDT05URU5UUyBPRiBDQUNIRSBUTyBUSEUgRlJBTUUgQlVGRkVSCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2lmICghcGNhY2hlKSB7CisJU0FZKCJNSVNUQUtFOiBwY2FjaGUgaXMgTlVMTFxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CisKK2lmIChwY2FjaGUgIT0gJmNhY2hlWzBdKQorCUpPVCgxNiwgImNhY2hlIGhhcyAlaSBieXRlc1xuIiwgKGludCkocGNhY2hlIC0gJmNhY2hlWzBdKSk7CitwMiA9ICZjYWNoZVswXTsKK3AzID0gKF9fdTggKilwYWQgLSAoaW50KShwY2FjaGUgLSAmY2FjaGVbMF0pOword2hpbGUgKHAyIDwgcGNhY2hlKSB7CisJKnAzKysgPSAqcDI7ICBwMisrOworfQorcGNhY2hlID0gJmNhY2hlWzBdOworaWYgKHAzICE9IHBhZCkgeworCVNBWSgiTUlTVEFLRTogcG9pbnRlciBtaXNhbGlnbm1lbnRcbiIpOworCXJldHVybiAtRUZBVUxUOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworcnVtcCA9IChpbnQpKDB4MDMgJiBtYXNrKTsKK3UgPSAwOyB2ID0gMDsKK3AyID0gKF9fdTggKilwZXg7ICBweiA9IHAyICsgbXVjaDsgIHByID0gcDMgKyBtb3JlOyAgbGFzdCA9IGZhbHNlOworcDIrKzsKKworaWYgKHRydWUgPT0gaXN1eSkKKwl1ID0gKihwMiAtIDEpOworZWxzZQorCXYgPSAqKHAyIC0gMSk7CisKK2lmIChydW1wKQorCUpPVCgxNiwgIiU0aT1tdWNoICAlNGk9bW9yZSAgJWk9cnVtcFxuIiwgbXVjaCwgbW9yZSwgcnVtcCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N3aXRjaCAoYnl0ZXNwZXJwaXhlbCkgeworY2FzZSAyOiB7CisJaWYgKGZhbHNlID09IGRlY2ltYXRlcGl4ZWwpIHsKKwkJbWVtY3B5KHBhZCwgcGV4LCAoc2l6ZV90KW11Y2gpOworCQlpZiAoZmFsc2UgPT0gYnl0ZXN3YXBvcmRlcikKKwkJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCS8qCisJCQkqKiAgVVlWWQorCQkJKi8KKwkJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCXJldHVybiAwOworCQllbHNlIHsKKwkJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCS8qCisJCQkqKiAgWVVZVgorCQkJKi8KKwkJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCXAzID0gKF9fdTggKilwYWQ7ICBweiA9IHAzICsgbXVjaDsKKwkJCXdoaWxlICAocHogPiBwMykgeworCQkJCWMgPSAqcDM7CisJCQkJKnAzID0gKihwMyArIDEpOworCQkJCSoocDMgKyAxKSA9IGM7CisJCQkJcDMgKz0gMjsKKwkJCX0KKwkJCXJldHVybiAwOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGZhbHNlID09IGJ5dGVzd2Fwb3JkZXIpIHsKKwkJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCS8qCisJCQkqKiAgVVlWWSBERUNJTUFURUQKKwkJCSovCisJCQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJCQlwMiA9IChfX3U4ICopcGV4OyAgcDMgPSAoX191OCAqKXBhZDsgIHB6ID0gcDIgKyBtdWNoOworCQkJd2hpbGUgKHB6ID4gcDIpIHsKKwkJCQkqcDMgPSAqcDI7CisJCQkJKihwMyArIDEpID0gKihwMiArIDEpOworCQkJCSoocDMgKyAyKSA9ICoocDIgKyAyKTsKKwkJCQkqKHAzICsgMykgPSAqKHAyICsgMyk7CisJCQkJcDMgKz0gNDsgIHAyICs9IDg7CisJCQl9CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCS8qCisJCQkqKiAgWVVZViBERUNJTUFURUQKKwkJCSoqLworCQkJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCQkJcDIgPSAoX191OCAqKXBleDsgIHAzID0gKF9fdTggKilwYWQ7ICBweiA9IHAyICsgbXVjaDsKKwkJCXdoaWxlIChweiA+IHAyKSB7CisJCQkJKnAzID0gKihwMiArIDEpOworCQkJCSoocDMgKyAxKSA9ICpwMjsKKwkJCQkqKHAzICsgMikgPSAqKHAyICsgMyk7CisJCQkJKihwMyArIDMpID0gKihwMiArIDIpOworCQkJCXAzICs9IDQ7ICBwMiArPSA4OworCQkJfQorCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJYnJlYWs7CisJfQorY2FzZSAzOgorCXsKKwlpZiAoZmFsc2UgPT0gZGVjaW1hdGVwaXhlbCkgeworCQlpZiAoZmFsc2UgPT0gYnl0ZXN3YXBvcmRlcikgeworCQkJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCQkJLyoKKwkJCSoqICBSR0IKKwkJCSoqLworCQkJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCQkJd2hpbGUgKHB6ID4gcDIpIHsKKwkJCQlpZiAocHIgPD0gKHAzICsgYnl0ZXNwZXJwaXhlbCkpCisJCQkJCWxhc3QgPSB0cnVlOworCQkJCWVsc2UKKwkJCQkJbGFzdCA9IGZhbHNlOworCQkJCXkgPSAqcDI7CisJCQkJaWYgKCh0cnVlID09IGxhc3QpICYmICgweDBDICYgbWFzaykpIHsKKwkJCQkJaWYgKDB4MDQgJiBtYXNrKSB7CisJCQkJCQlpZiAodHJ1ZSA9PSBpc3V5KQorCQkJCQkJCXYgPSBtYXJnaW47CisJCQkJCQllbHNlCisJCQkJCQkJdSA9IG1hcmdpbjsKKwkJCQkJfSBlbHNlCisJCQkJCQlpZiAoMHgwOCAmIG1hc2spCisJCQkJCQkJOworCQkJCX0gZWxzZSB7CisJCQkJCWlmICh0cnVlID09IGlzdXkpCisJCQkJCQl2ID0gKihwMiArIDEpOworCQkJCQllbHNlCisJCQkJCQl1ID0gKihwMiArIDEpOworCQkJCX0KKworCQkJCXMzMiA9IGF5WyhpbnQpeV0gKyBydlsoaW50KXZdOworCQkJCXIgPSAoMjU1IDwgczMyKSA/IDI1NSA6ICgoMCA+IHMzMikgPyBcCisJCQkJCQkJMCA6IChfX3U4KXMzMik7CisJCQkJczMyID0gYXlbKGludCl5XSAtIGd1WyhpbnQpdV0gLSBndlsoaW50KXZdOworCQkJCWcgPSAoMjU1IDwgczMyKSA/IDI1NSA6ICgoMCA+IHMzMikgPyBcCisJCQkJCQkJMCA6IChfX3U4KXMzMik7CisJCQkJczMyID0gYXlbKGludCl5XSArIGJ1WyhpbnQpdV07CisJCQkJYiA9ICgyNTUgPCBzMzIpID8gMjU1IDogKCgwID4gczMyKSA/IFwKKwkJCQkJCQkwIDogKF9fdTgpczMyKTsKKworCQkJCWlmICgodHJ1ZSA9PSBsYXN0KSAmJiBydW1wKSB7CisJCQkJCXBjYWNoZSA9ICZjYWNoZVswXTsKKwkJCQkJc3dpdGNoIChieXRlc3BlcnBpeGVsIC0gcnVtcCkgeworCQkJCQljYXNlIDE6IHsKKwkJCQkJCSpwMyA9IHI7CisJCQkJCQkqcGNhY2hlKysgPSBnOworCQkJCQkJKnBjYWNoZSsrID0gYjsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMjogeworCQkJCQkJKnAzID0gcjsKKwkJCQkJCSoocDMgKyAxKSA9IGc7CisJCQkJCQkqcGNhY2hlKysgPSBiOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJU0FZKCJNSVNUQUtFOiAlaT1ydW1wXG4iLCBcCisJCQkJCQkJYnl0ZXNwZXJwaXhlbCAtIHJ1bXApOworCQkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJCX0KKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCSpwMyA9IHI7CisJCQkJCSoocDMgKyAxKSA9IGc7CisJCQkJCSoocDMgKyAyKSA9IGI7CisJCQkJfQorCQkJCXAyICs9IDI7CisJCQkJaWYgKHRydWUgPT0gaXN1eSkKKwkJCQkJaXN1eSA9IGZhbHNlOworCQkJCWVsc2UKKwkJCQkJaXN1eSA9IHRydWU7CisJCQkJcDMgKz0gYnl0ZXNwZXJwaXhlbDsKKwkJCX0KKwkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCQkJLyoKKwkJCSoqICBCR1IKKwkJCSovCisJCQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJCQl3aGlsZSAocHogPiBwMikgeworCQkJCWlmIChwciA8PSAocDMgKyBieXRlc3BlcnBpeGVsKSkKKwkJCQkJbGFzdCA9IHRydWU7CisJCQkJZWxzZQorCQkJCQlsYXN0ID0gZmFsc2U7CisJCQkJeSA9ICpwMjsKKwkJCQlpZiAoKHRydWUgPT0gbGFzdCkgJiYgKDB4MEMgJiBtYXNrKSkgeworCQkJCQlpZiAoMHgwNCAmIG1hc2spIHsKKwkJCQkJCWlmICh0cnVlID09IGlzdXkpCisJCQkJCQkJdiA9IG1hcmdpbjsKKwkJCQkJCWVsc2UKKwkJCQkJCQl1ID0gbWFyZ2luOworCQkJCQl9CisJCQkJZWxzZQorCQkJCQlpZiAoMHgwOCAmIG1hc2spCisJCQkJCQk7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHRydWUgPT0gaXN1eSkKKwkJCQkJCXYgPSAqKHAyICsgMSk7CisJCQkJCWVsc2UKKwkJCQkJCXUgPSAqKHAyICsgMSk7CisJCQkJfQorCisJCQkJczMyID0gYXlbKGludCl5XSArIHJ2WyhpbnQpdl07CisJCQkJciA9ICgyNTUgPCBzMzIpID8gMjU1IDogKCgwID4gczMyKSA/IFwKKwkJCQkJCQkJMCA6IChfX3U4KXMzMik7CisJCQkJczMyID0gYXlbKGludCl5XSAtIGd1WyhpbnQpdV0gLSBndlsoaW50KXZdOworCQkJCWcgPSAoMjU1IDwgczMyKSA/IDI1NSA6ICgoMCA+IHMzMikgPyBcCisJCQkJCQkJCTAgOiAoX191OClzMzIpOworCQkJCXMzMiA9IGF5WyhpbnQpeV0gKyBidVsoaW50KXVdOworCQkJCWIgPSAoMjU1IDwgczMyKSA/IDI1NSA6ICgoMCA+IHMzMikgPyBcCisJCQkJCQkJCTAgOiAoX191OClzMzIpOworCisJCQkJaWYgKCh0cnVlID09IGxhc3QpICYmIHJ1bXApIHsKKwkJCQkJcGNhY2hlID0gJmNhY2hlWzBdOworCQkJCQlzd2l0Y2ggKGJ5dGVzcGVycGl4ZWwgLSBydW1wKSB7CisJCQkJCWNhc2UgMTogeworCQkJCQkJKnAzID0gYjsKKwkJCQkJCSpwY2FjaGUrKyA9IGc7CisJCQkJCQkqcGNhY2hlKysgPSByOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAyOiB7CisJCQkJCQkqcDMgPSBiOworCQkJCQkJKihwMyArIDEpID0gZzsKKwkJCQkJCSpwY2FjaGUrKyA9IHI7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlkZWZhdWx0OiB7CisJCQkJCQlTQVkoIk1JU1RBS0U6ICVpPXJ1bXBcbiIsIFwKKwkJCQkJCQlieXRlc3BlcnBpeGVsIC0gcnVtcCk7CisJCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQkJfQorCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJKnAzID0gYjsKKwkJCQkJKihwMyArIDEpID0gZzsKKwkJCQkJKihwMyArIDIpID0gcjsKKwkJCQkJfQorCQkJCXAyICs9IDI7CisJCQkJaWYgKHRydWUgPT0gaXN1eSkKKwkJCQkJaXN1eSA9IGZhbHNlOworCQkJCWVsc2UKKwkJCQkJaXN1eSA9IHRydWU7CisJCQkJcDMgKz0gYnl0ZXNwZXJwaXhlbDsKKwkJCQl9CisJCQl9CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCWlmIChmYWxzZSA9PSBieXRlc3dhcG9yZGVyKSB7CisJCQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJCQkvKgorCQkJKiogIFJHQiBERUNJTUFURUQKKwkJCSovCisJCQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJCQl3aGlsZSAocHogPiBwMikgeworCQkJCWlmIChwciA8PSAocDMgKyBieXRlc3BlcnBpeGVsKSkKKwkJCQkJbGFzdCA9IHRydWU7CisJCQkJZWxzZQorCQkJCQlsYXN0ID0gZmFsc2U7CisJCQkJeSA9ICpwMjsKKwkJCQlpZiAoKHRydWUgPT0gbGFzdCkgJiYgKDB4MEMgJiBtYXNrKSkgeworCQkJCQlpZiAoMHgwNCAmIG1hc2spIHsKKwkJCQkJCWlmICh0cnVlID09IGlzdXkpCisJCQkJCQkJdiA9IG1hcmdpbjsKKwkJCQkJCWVsc2UKKwkJCQkJCQl1ID0gbWFyZ2luOworCQkJCQl9IGVsc2UKKwkJCQkJCWlmICgweDA4ICYgbWFzaykKKwkJCQkJCQk7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHRydWUgPT0gaXN1eSkKKwkJCQkJCXYgPSAqKHAyICsgMSk7CisJCQkJCWVsc2UKKwkJCQkJCXUgPSAqKHAyICsgMSk7CisJCQkJfQorCisJCQkJaWYgKHRydWUgPT0gaXN1eSkgeworCQkJCQlzMzIgPSBheVsoaW50KXldICsgcnZbKGludCl2XTsKKwkJCQkJciA9ICgyNTUgPCBzMzIpID8gMjU1IDogKCgwID4gczMyKSA/IFwKKwkJCQkJCQkJMCA6IChfX3U4KXMzMik7CisJCQkJCXMzMiA9IGF5WyhpbnQpeV0gLSBndVsoaW50KXVdIC0gXAorCQkJCQkJCQlndlsoaW50KXZdOworCQkJCQlnID0gKDI1NSA8IHMzMikgPyAyNTUgOiAoKDAgPiBzMzIpID8gXAorCQkJCQkJCQkwIDogKF9fdTgpczMyKTsKKwkJCQkJczMyID0gYXlbKGludCl5XSArIGJ1WyhpbnQpdV07CisJCQkJCWIgPSAoMjU1IDwgczMyKSA/IDI1NSA6ICgoMCA+IHMzMikgPyBcCisJCQkJCQkJCTAgOiAoX191OClzMzIpOworCisJCQkJCWlmICgodHJ1ZSA9PSBsYXN0KSAmJiBydW1wKSB7CisJCQkJCQlwY2FjaGUgPSAmY2FjaGVbMF07CisJCQkJCQlzd2l0Y2ggKGJ5dGVzcGVycGl4ZWwgLSBydW1wKSB7CisJCQkJCQljYXNlIDE6IHsKKwkJCQkJCQkqcDMgPSByOworCQkJCQkJCSpwY2FjaGUrKyA9IGc7CisJCQkJCQkJKnBjYWNoZSsrID0gYjsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJCWNhc2UgMjogeworCQkJCQkJCSpwMyA9IHI7CisJCQkJCQkJKihwMyArIDEpID0gZzsKKwkJCQkJCQkqcGNhY2hlKysgPSBiOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJZGVmYXVsdDogeworCQkJCQkJCVNBWSgiTUlTVEFLRTogIiBcCisJCQkJCQkJIiVpPXJ1bXBcbiIsIFwKKwkJCQkJCQlieXRlc3BlcnBpeGVsIC0gcnVtcCk7CisJCQkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCQkJCQkqcDMgPSByOworCQkJCQkJKihwMyArIDEpID0gZzsKKwkJCQkJCSoocDMgKyAyKSA9IGI7CisJCQkJCX0KKwkJCQkJaXN1eSA9IGZhbHNlOworCQkJCQlwMyArPSBieXRlc3BlcnBpeGVsOworCQkJCX0gZWxzZSB7CisJCQkJCWlzdXkgPSB0cnVlOworCQkJCX0KKwkJCQlwMiArPSAyOworCQkJfQorCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJCQkvKgorCQkJICogIEJHUiBERUNJTUFURUQKKwkJCSAqLworCQkJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCQkJd2hpbGUgKHB6ID4gcDIpIHsKKwkJCQlpZiAocHIgPD0gKHAzICsgYnl0ZXNwZXJwaXhlbCkpCisJCQkJCWxhc3QgPSB0cnVlOworCQkJCWVsc2UKKwkJCQkJbGFzdCA9IGZhbHNlOworCQkJCXkgPSAqcDI7CisJCQkJaWYgKCh0cnVlID09IGxhc3QpICYmICgweDBDICYgbWFzaykpIHsKKwkJCQkJaWYgKDB4MDQgJiBtYXNrKSB7CisJCQkJCQlpZiAodHJ1ZSA9PSBpc3V5KQorCQkJCQkJCXYgPSBtYXJnaW47CisJCQkJCQllbHNlCisJCQkJCQkJdSA9IG1hcmdpbjsKKwkJCQkJfSBlbHNlCisJCQkJCQlpZiAoMHgwOCAmIG1hc2spCisJCQkJCQkJOworCQkJCX0gZWxzZSB7CisJCQkJCWlmICh0cnVlID09IGlzdXkpCisJCQkJCQl2ID0gKihwMiArIDEpOworCQkJCQllbHNlCisJCQkJCQl1ID0gKihwMiArIDEpOworCQkJCX0KKworCQkJCWlmICh0cnVlID09IGlzdXkpIHsKKworCQkJCQlzMzIgPSBheVsoaW50KXldICsgcnZbKGludCl2XTsKKwkJCQkJciA9ICgyNTUgPCBzMzIpID8gMjU1IDogKCgwID4gczMyKSA/IFwKKwkJCQkJCQkJMCA6IChfX3U4KXMzMik7CisJCQkJCXMzMiA9IGF5WyhpbnQpeV0gLSBndVsoaW50KXVdIC0gXAorCQkJCQkJCQlndlsoaW50KXZdOworCQkJCQlnID0gKDI1NSA8IHMzMikgPyAyNTUgOiAoKDAgPiBzMzIpID8gXAorCQkJCQkJCQkwIDogKF9fdTgpczMyKTsKKwkJCQkJczMyID0gYXlbKGludCl5XSArIGJ1WyhpbnQpdV07CisJCQkJCWIgPSAoMjU1IDwgczMyKSA/IDI1NSA6ICgoMCA+IHMzMikgPyBcCisJCQkJCQkJCTAgOiAoX191OClzMzIpOworCisJCQkJCWlmICgodHJ1ZSA9PSBsYXN0KSAmJiBydW1wKSB7CisJCQkJCQlwY2FjaGUgPSAmY2FjaGVbMF07CisJCQkJCQlzd2l0Y2ggKGJ5dGVzcGVycGl4ZWwgLSBydW1wKSB7CisJCQkJCQljYXNlIDE6IHsKKwkJCQkJCQkqcDMgPSBiOworCQkJCQkJCSpwY2FjaGUrKyA9IGc7CisJCQkJCQkJKnBjYWNoZSsrID0gcjsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJCWNhc2UgMjogeworCQkJCQkJCSpwMyA9IGI7CisJCQkJCQkJKihwMyArIDEpID0gZzsKKwkJCQkJCQkqcGNhY2hlKysgPSByOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJZGVmYXVsdDogeworCQkJCQkJCVNBWSgiTUlTVEFLRTogIiBcCisJCQkJCQkJIiVpPXJ1bXBcbiIsIFwKKwkJCQkJCQlieXRlc3BlcnBpeGVsIC0gcnVtcCk7CisJCQkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCQkJCQkqcDMgPSBiOworCQkJCQkJKihwMyArIDEpID0gZzsKKwkJCQkJCSoocDMgKyAyKSA9IHI7CisJCQkJCQl9CisJCQkJCWlzdXkgPSBmYWxzZTsKKwkJCQkJcDMgKz0gYnl0ZXNwZXJwaXhlbDsKKwkJCQkJfQorCQkJCWVsc2UKKwkJCQkJaXN1eSA9IHRydWU7CisJCQkJcDIgKz0gMjsKKwkJCQl9CisJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCWJyZWFrOworCX0KK2Nhc2UgNDoKKwl7CisJaWYgKGZhbHNlID09IGRlY2ltYXRlcGl4ZWwpIHsKKwkJaWYgKGZhbHNlID09IGJ5dGVzd2Fwb3JkZXIpIHsKKwkJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCS8qCisJCQkqKiAgUkdCQQorCQkJKi8KKwkJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCXdoaWxlIChweiA+IHAyKSB7CisJCQkJaWYgKHByIDw9IChwMyArIGJ5dGVzcGVycGl4ZWwpKQorCQkJCQlsYXN0ID0gdHJ1ZTsKKwkJCQllbHNlCisJCQkJCWxhc3QgPSBmYWxzZTsKKwkJCQl5ID0gKnAyOworCQkJCWlmICgodHJ1ZSA9PSBsYXN0KSAmJiAoMHgwQyAmIG1hc2spKSB7CisJCQkJCWlmICgweDA0ICYgbWFzaykgeworCQkJCQkJaWYgKHRydWUgPT0gaXN1eSkKKwkJCQkJCQl2ID0gbWFyZ2luOworCQkJCQkJZWxzZQorCQkJCQkJCXUgPSBtYXJnaW47CisJCQkJCX0gZWxzZQorCQkJCQkJIGlmICgweDA4ICYgbWFzaykKKwkJCQkJCQk7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHRydWUgPT0gaXN1eSkKKwkJCQkJCXYgPSAqKHAyICsgMSk7CisJCQkJCWVsc2UKKwkJCQkJCXUgPSAqKHAyICsgMSk7CisJCQkJfQorCisJCQkJczMyID0gYXlbKGludCl5XSArIHJ2WyhpbnQpdl07CisJCQkJciA9ICgyNTUgPCBzMzIpID8gMjU1IDogKCgwID4gczMyKSA/IFwKKwkJCQkJCQkJMCA6IChfX3U4KXMzMik7CisJCQkJczMyID0gYXlbKGludCl5XSAtIGd1WyhpbnQpdV0gLSBndlsoaW50KXZdOworCQkJCWcgPSAoMjU1IDwgczMyKSA/IDI1NSA6ICgoMCA+IHMzMikgPyBcCisJCQkJCQkJCTAgOiAoX191OClzMzIpOworCQkJCXMzMiA9IGF5WyhpbnQpeV0gKyBidVsoaW50KXVdOworCQkJCWIgPSAoMjU1IDwgczMyKSA/IDI1NSA6ICgoMCA+IHMzMikgPyBcCisJCQkJCQkJCTAgOiAoX191OClzMzIpOworCisJCQkJaWYgKCh0cnVlID09IGxhc3QpICYmIHJ1bXApIHsKKwkJCQkJcGNhY2hlID0gJmNhY2hlWzBdOworCQkJCQlzd2l0Y2ggKGJ5dGVzcGVycGl4ZWwgLSBydW1wKSB7CisJCQkJCWNhc2UgMTogeworCQkJCQkJKnAzID0gcjsKKwkJCQkJCSpwY2FjaGUrKyA9IGc7CisJCQkJCQkqcGNhY2hlKysgPSBiOworCQkJCQkJKnBjYWNoZSsrID0gMDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMjogeworCQkJCQkJKnAzID0gcjsKKwkJCQkJCSoocDMgKyAxKSA9IGc7CisJCQkJCQkqcGNhY2hlKysgPSBiOworCQkJCQkJKnBjYWNoZSsrID0gMDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMzogeworCQkJCQkJKnAzID0gcjsKKwkJCQkJCSoocDMgKyAxKSA9IGc7CisJCQkJCQkqKHAzICsgMikgPSBiOworCQkJCQkJKnBjYWNoZSsrID0gMDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWRlZmF1bHQ6IHsKKwkJCQkJCVNBWSgiTUlTVEFLRTogJWk9cnVtcFxuIiwgXAorCQkJCQkJCWJ5dGVzcGVycGl4ZWwgLSBydW1wKTsKKwkJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCQl9CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQkqcDMgPSByOworCQkJCQkqKHAzICsgMSkgPSBnOworCQkJCQkqKHAzICsgMikgPSBiOworCQkJCQkqKHAzICsgMykgPSAwOworCQkJCX0KKwkJCQlwMiArPSAyOworCQkJCWlmICh0cnVlID09IGlzdXkpCisJCQkJCWlzdXkgPSBmYWxzZTsKKwkJCQllbHNlCisJCQkJCWlzdXkgPSB0cnVlOworCQkJCXAzICs9IGJ5dGVzcGVycGl4ZWw7CisJCQl9CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCS8qCisJCQkqKiAgQkdSQQorCQkJKi8KKwkJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCXdoaWxlIChweiA+IHAyKSB7CisJCQkJaWYgKHByIDw9IChwMyArIGJ5dGVzcGVycGl4ZWwpKQorCQkJCQlsYXN0ID0gdHJ1ZTsKKwkJCQllbHNlCisJCQkJCWxhc3QgPSBmYWxzZTsKKwkJCQl5ID0gKnAyOworCQkJCWlmICgodHJ1ZSA9PSBsYXN0KSAmJiAoMHgwQyAmIG1hc2spKSB7CisJCQkJCWlmICgweDA0ICYgbWFzaykgeworCQkJCQkJaWYgKHRydWUgPT0gaXN1eSkKKwkJCQkJCQl2ID0gbWFyZ2luOworCQkJCQkJZWxzZQorCQkJCQkJCXUgPSBtYXJnaW47CisJCQkJCX0gZWxzZQorCQkJCQkJIGlmICgweDA4ICYgbWFzaykKKwkJCQkJCQk7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHRydWUgPT0gaXN1eSkKKwkJCQkJCXYgPSAqKHAyICsgMSk7CisJCQkJCWVsc2UKKwkJCQkJCXUgPSAqKHAyICsgMSk7CisJCQkJfQorCisJCQkJczMyID0gYXlbKGludCl5XSArIHJ2WyhpbnQpdl07CisJCQkJciA9ICgyNTUgPCBzMzIpID8gMjU1IDogKCgwID4gczMyKSA/IFwKKwkJCQkJCQkJMCA6IChfX3U4KXMzMik7CisJCQkJczMyID0gYXlbKGludCl5XSAtIGd1WyhpbnQpdV0gLSBndlsoaW50KXZdOworCQkJCWcgPSAoMjU1IDwgczMyKSA/IDI1NSA6ICgoMCA+IHMzMikgPyBcCisJCQkJCQkJCTAgOiAoX191OClzMzIpOworCQkJCXMzMiA9IGF5WyhpbnQpeV0gKyBidVsoaW50KXVdOworCQkJCWIgPSAoMjU1IDwgczMyKSA/IDI1NSA6ICgoMCA+IHMzMikgPyBcCisJCQkJCQkJCTAgOiAoX191OClzMzIpOworCisJCQkJaWYgKCh0cnVlID09IGxhc3QpICYmIHJ1bXApIHsKKwkJCQkJcGNhY2hlID0gJmNhY2hlWzBdOworCQkJCQlzd2l0Y2ggKGJ5dGVzcGVycGl4ZWwgLSBydW1wKSB7CisJCQkJCWNhc2UgMTogeworCQkJCQkJKnAzID0gYjsKKwkJCQkJCSpwY2FjaGUrKyA9IGc7CisJCQkJCQkqcGNhY2hlKysgPSByOworCQkJCQkJKnBjYWNoZSsrID0gMDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMjogeworCQkJCQkJKnAzID0gYjsKKwkJCQkJCSoocDMgKyAxKSA9IGc7CisJCQkJCQkqcGNhY2hlKysgPSByOworCQkJCQkJKnBjYWNoZSsrID0gMDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMzogeworCQkJCQkJKnAzID0gYjsKKwkJCQkJCSoocDMgKyAxKSA9IGc7CisJCQkJCQkqKHAzICsgMikgPSByOworCQkJCQkJKnBjYWNoZSsrID0gMDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWRlZmF1bHQ6IHsKKwkJCQkJCVNBWSgiTUlTVEFLRTogJWk9cnVtcFxuIiwgXAorCQkJCQkJCWJ5dGVzcGVycGl4ZWwgLSBydW1wKTsKKwkJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCQl9CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQkqcDMgPSBiOworCQkJCQkqKHAzICsgMSkgPSBnOworCQkJCQkqKHAzICsgMikgPSByOworCQkJCQkqKHAzICsgMykgPSAwOworCQkJCX0KKwkJCQlwMiArPSAyOworCQkJCWlmICh0cnVlID09IGlzdXkpCisJCQkJCWlzdXkgPSBmYWxzZTsKKwkJCQllbHNlCisJCQkJCWlzdXkgPSB0cnVlOworCQkJCXAzICs9IGJ5dGVzcGVycGl4ZWw7CisJCQl9CisJCX0KKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJaWYgKGZhbHNlID09IGJ5dGVzd2Fwb3JkZXIpIHsKKwkJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCS8qCisJCQkqKiAgUkdCQSBERUNJTUFURUQKKwkJCSovCisJCQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJCQl3aGlsZSAocHogPiBwMikgeworCQkJCWlmIChwciA8PSAocDMgKyBieXRlc3BlcnBpeGVsKSkKKwkJCQkJbGFzdCA9IHRydWU7CisJCQkJZWxzZQorCQkJCQlsYXN0ID0gZmFsc2U7CisJCQkJeSA9ICpwMjsKKwkJCQlpZiAoKHRydWUgPT0gbGFzdCkgJiYgKDB4MEMgJiBtYXNrKSkgeworCQkJCQlpZiAoMHgwNCAmIG1hc2spIHsKKwkJCQkJCWlmICh0cnVlID09IGlzdXkpCisJCQkJCQkJdiA9IG1hcmdpbjsKKwkJCQkJCWVsc2UKKwkJCQkJCQl1ID0gbWFyZ2luOworCQkJCQl9IGVsc2UKKwkJCQkJCWlmICgweDA4ICYgbWFzaykKKwkJCQkJCQk7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHRydWUgPT0gaXN1eSkKKwkJCQkJCXYgPSAqKHAyICsgMSk7CisJCQkJCWVsc2UKKwkJCQkJCXUgPSAqKHAyICsgMSk7CisJCQkJfQorCisJCQkJaWYgKHRydWUgPT0gaXN1eSkgeworCisJCQkJCXMzMiA9IGF5WyhpbnQpeV0gKyBydlsoaW50KXZdOworCQkJCQlyID0gKDI1NSA8IHMzMikgPyAyNTUgOiAoKDAgPiBzMzIpID8gXAorCQkJCQkJCQkwIDogKF9fdTgpczMyKTsKKwkJCQkJczMyID0gYXlbKGludCl5XSAtIGd1WyhpbnQpdV0gLSBcCisJCQkJCQkJCWd2WyhpbnQpdl07CisJCQkJCWcgPSAoMjU1IDwgczMyKSA/IDI1NSA6ICgoMCA+IHMzMikgPyBcCisJCQkJCQkJCTAgOiAoX191OClzMzIpOworCQkJCQlzMzIgPSBheVsoaW50KXldICsgYnVbKGludCl1XTsKKwkJCQkJYiA9ICgyNTUgPCBzMzIpID8gMjU1IDogKCgwID4gczMyKSA/IFwKKwkJCQkJCQkJMCA6IChfX3U4KXMzMik7CisKKwkJCQkJaWYgKCh0cnVlID09IGxhc3QpICYmIHJ1bXApIHsKKwkJCQkJCXBjYWNoZSA9ICZjYWNoZVswXTsKKwkJCQkJCXN3aXRjaCAoYnl0ZXNwZXJwaXhlbCAtIHJ1bXApIHsKKwkJCQkJCWNhc2UgMTogeworCQkJCQkJCSpwMyA9IHI7CisJCQkJCQkJKnBjYWNoZSsrID0gZzsKKwkJCQkJCQkqcGNhY2hlKysgPSBiOworCQkJCQkJCSpwY2FjaGUrKyA9IDA7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQljYXNlIDI6IHsKKwkJCQkJCQkqcDMgPSByOworCQkJCQkJCSoocDMgKyAxKSA9IGc7CisJCQkJCQkJKnBjYWNoZSsrID0gYjsKKwkJCQkJCQkqcGNhY2hlKysgPSAwOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJY2FzZSAzOiB7CisJCQkJCQkJKnAzID0gcjsKKwkJCQkJCQkqKHAzICsgMSkgPSBnOworCQkJCQkJCSoocDMgKyAyKSA9IGI7CisJCQkJCQkJKnBjYWNoZSsrID0gMDsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJCWRlZmF1bHQ6IHsKKwkJCQkJCQlTQVkoIk1JU1RBS0U6ICIgXAorCQkJCQkJCSIlaT1ydW1wXG4iLCBcCisJCQkJCQkJYnl0ZXNwZXJwaXhlbCAtIFwKKwkJCQkJCQlydW1wKTsKKwkJCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCQkJCQkqcDMgPSByOworCQkJCQkJKihwMyArIDEpID0gZzsKKwkJCQkJCSoocDMgKyAyKSA9IGI7CisJCQkJCQkqKHAzICsgMykgPSAwOworCQkJCQkJfQorCQkJCQlpc3V5ID0gZmFsc2U7CisJCQkJCXAzICs9IGJ5dGVzcGVycGl4ZWw7CisJCQkJfSBlbHNlCisJCQkJCWlzdXkgPSB0cnVlOworCQkJCXAyICs9IDI7CisJCQl9CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCS8qCisJCQkqKiAgQkdSQSBERUNJTUFURUQKKwkJCSovCisJCQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJCQl3aGlsZSAocHogPiBwMikgeworCQkJCWlmIChwciA8PSAocDMgKyBieXRlc3BlcnBpeGVsKSkKKwkJCQkJbGFzdCA9IHRydWU7CisJCQkJZWxzZQorCQkJCQlsYXN0ID0gZmFsc2U7CisJCQkJeSA9ICpwMjsKKwkJCQlpZiAoKHRydWUgPT0gbGFzdCkgJiYgKDB4MEMgJiBtYXNrKSkgeworCQkJCQlpZiAoMHgwNCAmIG1hc2spIHsKKwkJCQkJCWlmICh0cnVlID09IGlzdXkpCisJCQkJCQkJdiA9IG1hcmdpbjsKKwkJCQkJCWVsc2UKKwkJCQkJCQl1ID0gbWFyZ2luOworCQkJCQl9IGVsc2UKKwkJCQkJCWlmICgweDA4ICYgbWFzaykKKwkJCQkJCQk7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHRydWUgPT0gaXN1eSkKKwkJCQkJCXYgPSAqKHAyICsgMSk7CisJCQkJCWVsc2UKKwkJCQkJCXUgPSAqKHAyICsgMSk7CisJCQkJfQorCisJCQkJaWYgKHRydWUgPT0gaXN1eSkgeworCQkJCQlzMzIgPSBheVsoaW50KXldICsgcnZbKGludCl2XTsKKwkJCQkJciA9ICgyNTUgPCBzMzIpID8gMjU1IDogKCgwID4gczMyKSA/IFwKKwkJCQkJCQkJMCA6IChfX3U4KXMzMik7CisJCQkJCXMzMiA9IGF5WyhpbnQpeV0gLSBndVsoaW50KXVdIC0gXAorCQkJCQkJCQlndlsoaW50KXZdOworCQkJCQlnID0gKDI1NSA8IHMzMikgPyAyNTUgOiAoKDAgPiBzMzIpID8gXAorCQkJCQkJCQkwIDogKF9fdTgpczMyKTsKKwkJCQkJczMyID0gYXlbKGludCl5XSArIGJ1WyhpbnQpdV07CisJCQkJCWIgPSAoMjU1IDwgczMyKSA/IDI1NSA6ICgoMCA+IHMzMikgPyBcCisJCQkJCQkJCTAgOiAoX191OClzMzIpOworCisJCQkJCWlmICgodHJ1ZSA9PSBsYXN0KSAmJiBydW1wKSB7CisJCQkJCQlwY2FjaGUgPSAmY2FjaGVbMF07CisJCQkJCQlzd2l0Y2ggKGJ5dGVzcGVycGl4ZWwgLSBydW1wKSB7CisJCQkJCQljYXNlIDE6IHsKKwkJCQkJCQkqcDMgPSBiOworCQkJCQkJCSpwY2FjaGUrKyA9IGc7CisJCQkJCQkJKnBjYWNoZSsrID0gcjsKKwkJCQkJCQkqcGNhY2hlKysgPSAwOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJY2FzZSAyOiB7CisJCQkJCQkJKnAzID0gYjsKKwkJCQkJCQkqKHAzICsgMSkgPSBnOworCQkJCQkJCSpwY2FjaGUrKyA9IHI7CisJCQkJCQkJKnBjYWNoZSsrID0gMDsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJCWNhc2UgMzogeworCQkJCQkJCSpwMyA9IGI7CisJCQkJCQkJKihwMyArIDEpID0gZzsKKwkJCQkJCQkqKHAzICsgMikgPSByOworCQkJCQkJCSpwY2FjaGUrKyA9IDA7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQlkZWZhdWx0OiB7CisJCQkJCQkJU0FZKCJNSVNUQUtFOiAiIFwKKwkJCQkJCQkiJWk9cnVtcFxuIiwgXAorCQkJCQkJCWJ5dGVzcGVycGl4ZWwgLSBydW1wKTsKKwkJCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJCQkJCSpwMyA9IGI7CisJCQkJCQkqKHAzICsgMSkgPSBnOworCQkJCQkJKihwMyArIDIpID0gcjsKKwkJCQkJCSoocDMgKyAzKSA9IDA7CisJCQkJCX0KKwkJCQkJaXN1eSA9IGZhbHNlOworCQkJCQlwMyArPSBieXRlc3BlcnBpeGVsOworCQkJCX0gZWxzZQorCQkJCQlpc3V5ID0gdHJ1ZTsKKwkJCQkJcDIgKz0gMjsKKwkJCQl9CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwlicmVhazsKKwl9CitkZWZhdWx0OiB7CisJU0FZKCJNSVNUQUtFOiAlaT1ieXRlc3BlcnBpeGVsXG4iLCBieXRlc3BlcnBpeGVsKTsKKwlyZXR1cm4gLUVGQVVMVDsKKwl9Cit9CityZXR1cm4gMDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQKK2RlYnJpZWYoc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwKQoreworaWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgIT0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlKSB7CisJY2hlY2tfc3RrKHBlYXN5Y2FwLT5wdXNiX2RldmljZSk7CisJY2hlY2tfc2FhKHBlYXN5Y2FwLT5wdXNiX2RldmljZSk7CisJc2F5cmVhZG9ubHkocGVhc3ljYXApOworCVNBWSgiJWk9cGVhc3ljYXAtPmZpZWxkX2ZpbGxcbiIsIHBlYXN5Y2FwLT5maWVsZF9maWxsKTsKKwlTQVkoIiVpPXBlYXN5Y2FwLT5maWVsZF9yZWFkXG4iLCBwZWFzeWNhcC0+ZmllbGRfcmVhZCk7CisJU0FZKCIlaT1wZWFzeWNhcC0+ZnJhbWVfZmlsbFxuIiwgcGVhc3ljYXAtPmZyYW1lX2ZpbGwpOworCVNBWSgiJWk9cGVhc3ljYXAtPmZyYW1lX3JlYWRcbiIsIHBlYXN5Y2FwLT5mcmFtZV9yZWFkKTsKK30KK3JldHVybjsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQKK3NheXJlYWRvbmx5KHN0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcCkKK3sKK3N0YXRpYyBpbnQgZG9uZTsKK2ludCBnb3QwMCwgZ290MUYsIGdvdDYwLCBnb3Q2MSwgZ290NjI7CisKK2lmICgoIWRvbmUpICYmICgoc3RydWN0IHVzYl9kZXZpY2UgKilOVUxMICE9IHBlYXN5Y2FwLT5wdXNiX2RldmljZSkpIHsKKwlkb25lID0gMTsKKwlnb3QwMCA9IHJlYWRfc2FhKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgMHgwMCk7CisJZ290MUYgPSByZWFkX3NhYShwZWFzeWNhcC0+cHVzYl9kZXZpY2UsIDB4MUYpOworCWdvdDYwID0gcmVhZF9zYWEocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCAweDYwKTsKKwlnb3Q2MSA9IHJlYWRfc2FhKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgMHg2MSk7CisJZ290NjIgPSByZWFkX3NhYShwZWFzeWNhcC0+cHVzYl9kZXZpY2UsIDB4NjIpOworCVNBWSgiMHglMDJYPXJlZzB4MDAgIDB4JTAyWD1yZWcweDFGXG4iLCBnb3QwMCwgZ290MUYpOworCVNBWSgiMHglMDJYPXJlZzB4NjAgIDB4JTAyWD1yZWcweDYxICAweCUwMlg9cmVnMHg2MlxuIiwgXAorCQkJCQkJCWdvdDYwLCBnb3Q2MSwgZ290NjIpOworfQorcmV0dXJuOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBTRUUgQ09SQkVUIEVUIEFMLiAiTElOVVggREVWSUNFIERSSVZFUlMiLCAzcmQgRURJVElPTiwgUEFHRVMgNDMwLTQzNAorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgZWFzeWNhcF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnB2bWEpCit7CisKK0pPVCg4LCAiXG4iKTsKKworcHZtYS0+dm1fb3BzID0gJmVhc3ljYXBfdm1fb3BzOworcHZtYS0+dm1fZmxhZ3MgfD0gVk1fUkVTRVJWRUQ7CitpZiAoTlVMTCAhPSBmaWxlKQorCXB2bWEtPnZtX3ByaXZhdGVfZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKK2Vhc3ljYXBfdm1hX29wZW4ocHZtYSk7CityZXR1cm4gMDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQKK2Vhc3ljYXBfdm1hX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwdm1hKQoreworc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwOworCitwZWFzeWNhcCA9IHB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKK2lmIChOVUxMICE9IHBlYXN5Y2FwKQorCXBlYXN5Y2FwLT52bWFfbWFueSsrOworCitKT1QoOCwgIiVpPXBlYXN5Y2FwLT52bWFfbWFueVxuIiwgcGVhc3ljYXAtPnZtYV9tYW55KTsKKworcmV0dXJuOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZAorZWFzeWNhcF92bWFfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwdm1hKQoreworc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwOworCitwZWFzeWNhcCA9IHB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKK2lmIChOVUxMICE9IHBlYXN5Y2FwKSB7CisJcGVhc3ljYXAtPnZtYV9tYW55LS07CisJSk9UKDgsICIlaT1wZWFzeWNhcC0+dm1hX21hbnlcbiIsIHBlYXN5Y2FwLT52bWFfbWFueSk7Cit9CityZXR1cm47Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQKK2Vhc3ljYXBfdm1hX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHZtYSwgc3RydWN0IHZtX2ZhdWx0ICpwdm1mKQoreworaW50IGssIG0sIHJldGNvZGU7Cit2b2lkICpwYnVmOworc3RydWN0IHBhZ2UgKnBhZ2U7CitzdHJ1Y3QgZWFzeWNhcCAqcGVhc3ljYXA7CisKK3JldGNvZGUgPSBWTV9GQVVMVF9OT1BBR0U7CitwYnVmID0gKHZvaWQgKilOVUxMOworcGFnZSA9IChzdHJ1Y3QgcGFnZSAqKU5VTEw7CisKK2lmIChOVUxMID09IHB2bWEpIHsKKwlTQVkoInB2bWEgaXMgTlVMTFxuIik7CisJcmV0dXJuIHJldGNvZGU7Cit9CitpZiAoTlVMTCA9PSBwdm1mKSB7CisJU0FZKCJwdm1mIGlzIE5VTExcbiIpOworCXJldHVybiByZXRjb2RlOworfQorCitrID0gKHB2bWYtPnBnb2ZmKSAvIChGUkFNRV9CVUZGRVJfU0laRS9QQUdFX1NJWkUpOworbSA9IChwdm1mLT5wZ29mZikgJSAoRlJBTUVfQlVGRkVSX1NJWkUvUEFHRV9TSVpFKTsKKworaWYgKCFtKQorCUpPVCg0LCAiJTRpPWssICU0aT1tXG4iLCBrLCBtKTsKK2Vsc2UKKwlKT1QoMTYsICIlNGk9aywgJTRpPW1cbiIsIGssIG0pOworCitpZiAoKDAgPiBrKSB8fCAoRlJBTUVfQlVGRkVSX01BTlkgPD0gaykpIHsKKwlTQVkoIkVSUk9SOiBidWZmZXIgaW5kZXggJWkgb3V0IG9mIHJhbmdlXG4iLCBrKTsKKwlyZXR1cm4gcmV0Y29kZTsKK30KK2lmICgoMCA+IG0pIHx8IChGUkFNRV9CVUZGRVJfU0laRS9QQUdFX1NJWkUgPD0gbSkpIHsKKwlTQVkoIkVSUk9SOiBwYWdlIG51bWJlciAgJWkgb3V0IG9mIHJhbmdlXG4iLCBtKTsKKwlyZXR1cm4gcmV0Y29kZTsKK30KK3BlYXN5Y2FwID0gcHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworaWYgKE5VTEwgPT0gcGVhc3ljYXApIHsKKwlTQVkoIkVSUk9SOiBwZWFzeWNhcCBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gcmV0Y29kZTsKK30KK211dGV4X2xvY2soJihwZWFzeWNhcC0+bXV0ZXhfbW1hcF92aWRlb1swXSkpOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworcGJ1ZiA9IHBlYXN5Y2FwLT5mcmFtZV9idWZmZXJba11bbV0ucGdvOworaWYgKE5VTEwgPT0gcGJ1ZikgeworCVNBWSgiRVJST1I6ICBwYnVmIGlzIE5VTExcbiIpOworCWdvdG8gZmluaXNoOworfQorcGFnZSA9IHZpcnRfdG9fcGFnZShwYnVmKTsKK2lmIChOVUxMID09IHBhZ2UpIHsKKwlTQVkoIkVSUk9SOiAgcGFnZSBpcyBOVUxMXG4iKTsKKwlnb3RvIGZpbmlzaDsKK30KK2dldF9wYWdlKHBhZ2UpOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworZmluaXNoOgorbXV0ZXhfdW5sb2NrKCYocGVhc3ljYXAtPm11dGV4X21tYXBfdmlkZW9bMF0pKTsKK2lmIChOVUxMID09IHBhZ2UpIHsKKwlTQVkoIkVSUk9SOiAgcGFnZSBpcyBOVUxMIGFmdGVyIGdldF9wYWdlKHBhZ2UpXG4iKTsKK30gZWxzZSB7CisJcHZtZi0+cGFnZSA9IHBhZ2U7CisJcmV0Y29kZSA9IFZNX0ZBVUxUX01JTk9SOworfQorcmV0dXJuIHJldGNvZGU7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIE9OIENPTVBMRVRJT04gT0YgQSBWSURFTyBVUkIgSVRTIERBVEEgSVMgQ09QSUVEIFRPIFRIRSBGSUVMRCBCVUZGRVJTCisgKiAgUFJPVklERUQgcGVhc3ljYXAtPnZpZGVvX2lkbGUgSVMgWkVSMC4gIFJFR0FSRExFU1MgT0YgVEhJUyBCRUlORyBUUlVFLAorICogIElUIElTIFJFU1VCTUlUVEVEIFBST1ZJREVEIHBlYXN5Y2FwLT52aWRlb19pc29jX3N0cmVhbWluZyBJUyBOT1QgWkVSTy4KKyAqCisgKiAgVEhJUyBGVU5DVElPTiBJUyBBTiBJTlRFUlJVUFQgU0VSVklDRSBST1VUSU5FIEFORCBNVVNUIE5PVCBTTEVFUC4KKyAqCisgKiAgSU5GT1JNQVRJT04gQUJPVVQgVEhFIFZBTElESVRZIE9GIFRIRSBDT05URU5UUyBPRiBUSEUgRklFTEQgQlVGRkVSIEFSRQorICogIFNUT1JFRCBJTiBUSEUgVFdPLUJZVEUgU1RBVFVTIFBBUkFNRVRFUgorICogICAgICAgIHBlYXN5Y2FwLT5maWVsZF9idWZmZXJbcGVhc3ljYXAtPmZpZWxkX2ZpbGxdWzBdLmtvdW50CisgKiAgTk9USUNFIFRIQVQgVEhFIElORk9STUFUSU9OIElTIFNUT1JFRCBPTkxZIFdJVEggUEFHRSAwIE9GIFRIRSBGSUVMRCBCVUZGRVIuCisgKgorICogIFRIRSBMT1dFUiBCWVRFIENPTlRBSU5TIFRIRSBGSUVMRCBQQVJJVFkgQllURSBGVVJOSVNIRUQgQlkgVEhFIFNBQTcxMTNICisgKiAgQ0hJUC4KKyAqCisgKiAgVEhFIFVQUEVSIEJZVEUgSVMgWkVSTyBJRiBOTyBQUk9CTEVNUywgT1RIRVJXSVNFOgorICogICAgICAwICE9IChrb3VudCAmIDB4ODAwMCkgICA9PiBBVCBMRUFTVCBPTkUgVVJCIENPTVBMRVRFRCBXSVRIIEVSUk9SUworICogICAgICAwICE9IChrb3VudCAmIDB4NDAwMCkgICA9PiBCVUZGRVIgSEFTIFRPTyBNVUNIIERBVEEKKyAqICAgICAgMCAhPSAoa291bnQgJiAweDIwMDApICAgPT4gQlVGRkVSIEhBUyBOT1QgRU5PVUdIIERBVEEKKyAqICAgICAgMCAhPSAoa291bnQgJiAweDA0MDApICAgPT4gRklFTEQgV0FTIFNVQk1JVFRFRCBCWSBCUklER0VSIFJPVVRJTkUKKyAqICAgICAgMCAhPSAoa291bnQgJiAweDAyMDApICAgPT4gRklFTEQgQlVGRkVSIE5PVCBZRVQgQ0hFQ0tFRAorICogICAgICAwICE9IChrb3VudCAmIDB4MDEwMCkgICA9PiBCVUZGRVIgSEFTIFRXTyBFWFRSQSBCWVRFUyAtIFdIWT8KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZAorZWFzeWNhcF9jb21wbGV0ZShzdHJ1Y3QgdXJiICpwdXJiKQoreworc3RhdGljIGludCBtdDsKK3N0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcDsKK3N0cnVjdCBkYXRhX2J1ZmZlciAqcGZpZWxkX2J1ZmZlcjsKK2NoYXIgZXJyYnVmWzE2XTsKK2ludCBpLCBtb3JlLCBtdWNoLCBsZWFwLCByYywgbGFzdDsKK2ludCB2aWRlb2ZpZWxkYW1vdW50OwordW5zaWduZWQgaW50IG92ZXJyaWRlOworaW50IGZyYW1lc3RhdHVzLCBmcmFtZWxlbmd0aCwgZnJhbWVhY3R1YWwsIGZyYW1lb2Zmc2V0OworX191OCAqcHU7CisjaWYgZGVmaW5lZChCUklER0VSKQorc3RydWN0IHRpbWV2YWwgdGltZXZhbDsKK2xvbmcgbG9uZyB1c2VjOworI2VuZGlmIC8qQlJJREdFUiovCisKK2lmIChOVUxMID09IHB1cmIpIHsKKwlTQVkoIkVSUk9SOiBlYXN5Y2FwX2NvbXBsZXRlKCk6IHB1cmIgaXMgTlVMTFxuIik7CisJcmV0dXJuOworfQorcGVhc3ljYXAgPSBwdXJiLT5jb250ZXh0OworaWYgKE5VTEwgPT0gcGVhc3ljYXApIHsKKwlTQVkoIkVSUk9SOiBlYXN5Y2FwX2NvbXBsZXRlKCk6IHBlYXN5Y2FwIGlzIE5VTExcbiIpOworCXJldHVybjsKK30KKworaWYgKHBlYXN5Y2FwLT52aWRlb19lb2YpCisJcmV0dXJuOworCitmb3IgKGkgPSAwOyBpIDwgVklERU9fSVNPQ19CVUZGRVJfTUFOWTsgaSsrKQorCWlmIChwdXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gcGVhc3ljYXAtPnZpZGVvX2lzb2NfYnVmZmVyW2ldLnBnbykKKwkJYnJlYWs7CitKT1QoMTYsICIlMmk9dXJiXG4iLCBpKTsKK2xhc3QgPSBwZWFzeWNhcC0+dmlkZW9faXNvY19zZXF1ZW5jZTsKK2lmICgoKChWSURFT19JU09DX0JVRkZFUl9NQU5ZIC0gMSkgPT0gbGFzdCkgJiYgXAorCQkJCQkJKDAgIT0gaSkpIHx8IFwKKwkoKChWSURFT19JU09DX0JVRkZFUl9NQU5ZIC0gMSkgIT0gbGFzdCkgJiYgXAorCQkJCQkJKChsYXN0ICsgMSkgIT0gaSkpKSB7CisJU0FZKCJFUlJPUjogb3V0LW9mLW9yZGVyIHVyYnMgJWksJWkgLi4uIGNvbnRpbnVpbmdcbiIsIGxhc3QsIGkpOworfQorcGVhc3ljYXAtPnZpZGVvX2lzb2Nfc2VxdWVuY2UgPSBpOworCitpZiAocGVhc3ljYXAtPnZpZGVvX2lkbGUpIHsKKwlKT1QoMTYsICIlaT12aWRlb19pZGxlICAlaT12aWRlb19pc29jX3N0cmVhbWluZ1xuIiwgXAorCQkJcGVhc3ljYXAtPnZpZGVvX2lkbGUsIHBlYXN5Y2FwLT52aWRlb19pc29jX3N0cmVhbWluZyk7CisJaWYgKHBlYXN5Y2FwLT52aWRlb19pc29jX3N0cmVhbWluZykgeworCQlyYyA9IHVzYl9zdWJtaXRfdXJiKHB1cmIsIEdGUF9BVE9NSUMpOworCQlpZiAoMCAhPSByYykgeworCQkJU0FZKCJFUlJPUjogd2hpbGUgJWk9dmlkZW9faWRsZSwgIiBcCisJCQkJCSJ1c2Jfc3VibWl0X3VyYigpIGZhaWxlZCB3aXRoIHJjOlxuIiwgXAorCQkJCQkJCXBlYXN5Y2FwLT52aWRlb19pZGxlKTsKKwkJCXN3aXRjaCAocmMpIHsKKwkJCWNhc2UgLUVOT01FTTogeworCQkJCVNBWSgiRU5PTUVNXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVOT0RFVjogeworCQkJCVNBWSgiRU5PREVWXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVOWElPOiB7CisJCQkJU0FZKCJFTlhJT1xuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQljYXNlIC1FSU5WQUw6IHsKKwkJCQlTQVkoIkVJTlZBTFxuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQljYXNlIC1FQUdBSU46IHsKKwkJCQlTQVkoIkVBR0FJTlxuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQljYXNlIC1FRkJJRzogeworCQkJCVNBWSgiRUZCSUdcbiIpOworCQkJCWJyZWFrOworCQkJfQorCQkJY2FzZSAtRVBJUEU6IHsKKwkJCQlTQVkoIkVQSVBFXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVNU0dTSVpFOiB7CisJCQkJU0FZKCJFTVNHU0laRVxuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQljYXNlIC1FTk9TUEM6IHsKKwkJCQlTQVkoIkVOT1NQQ1xuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQlkZWZhdWx0OiB7CisJCQkJU0FZKCIweCUwOFhcbiIsIHJjKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCX0KKwkJfQorCX0KK3JldHVybjsKK30KK292ZXJyaWRlID0gMDsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2lmIChGSUVMRF9CVUZGRVJfTUFOWSA8PSBwZWFzeWNhcC0+ZmllbGRfZmlsbCkgeworCVNBWSgiRVJST1I6IGJhZCBwZWFzeWNhcC0+ZmllbGRfZmlsbFxuIik7CisJcmV0dXJuOworfQoraWYgKHB1cmItPnN0YXR1cykgeworCWlmICgoLUVTSFVURE9XTiA9PSBwdXJiLT5zdGF0dXMpIHx8ICgtRU5PRU5UID09IHB1cmItPnN0YXR1cykpIHsKKwkJSk9UKDgsICJ1cmIgc3RhdHVzIC1FU0hVVERPV04gb3IgLUVOT0VOVFxuIik7CisJCXJldHVybjsKKwl9CisKKwkocGVhc3ljYXAtPmZpZWxkX2J1ZmZlcltwZWFzeWNhcC0+ZmllbGRfZmlsbF1bMF0ua291bnQpIHw9IDB4ODAwMCA7CisJU0FZKCJFUlJPUjogYmFkIHVyYiBzdGF0dXM6XG4iKTsKKwlzd2l0Y2ggKHB1cmItPnN0YXR1cykgeworCWNhc2UgLUVJTlBST0dSRVNTOiB7CisJCVNBWSgiLUVJTlBST0dSRVNTXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVOT1NSOiB7CisJCVNBWSgiLUVOT1NSXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVQSVBFOiB7CisJCVNBWSgiLUVQSVBFXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVPVkVSRkxPVzogeworCQlTQVkoIi1FT1ZFUkZMT1dcbiIpOyBicmVhazsKKwl9CisJY2FzZSAtRVBST1RPOiB7CisJCVNBWSgiLUVQUk9UT1xuIik7IGJyZWFrOworCX0KKwljYXNlIC1FSUxTRVE6IHsKKwkJU0FZKCItRUlMU0VRXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVUSU1FRE9VVDogeworCQlTQVkoIi1FVElNRURPVVRcbiIpOyBicmVhazsKKwl9CisJY2FzZSAtRU1TR1NJWkU6IHsKKwkJU0FZKCItRU1TR1NJWkVcbiIpOyBicmVhazsKKwl9CisJY2FzZSAtRU9QTk9UU1VQUDogeworCQlTQVkoIi1FT1BOT1RTVVBQXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVQRk5PU1VQUE9SVDogeworCQlTQVkoIi1FUEZOT1NVUFBPUlRcbiIpOyBicmVhazsKKwl9CisJY2FzZSAtRUFGTk9TVVBQT1JUOiB7CisJCVNBWSgiLUVBRk5PU1VQUE9SVFxuIik7IGJyZWFrOworCX0KKwljYXNlIC1FQUREUklOVVNFOiB7CisJCVNBWSgiLUVBRERSSU5VU0VcbiIpOyBicmVhazsKKwl9CisJY2FzZSAtRUFERFJOT1RBVkFJTDogeworCQlTQVkoIi1FQUREUk5PVEFWQUlMXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVOT0JVRlM6IHsKKwkJU0FZKCItRU5PQlVGU1xuIik7IGJyZWFrOworCX0KKwljYXNlIC1FSVNDT05OOiB7CisJCVNBWSgiLUVJU0NPTk5cbiIpOyBicmVhazsKKwl9CisJY2FzZSAtRU5PVENPTk46IHsKKwkJU0FZKCItRU5PVENPTk5cbiIpOyBicmVhazsKKwl9CisJY2FzZSAtRVNIVVRET1dOOiB7CisJCVNBWSgiLUVTSFVURE9XTlxuIik7IGJyZWFrOworCX0KKwljYXNlIC1FTk9FTlQ6IHsKKwkJU0FZKCItRU5PRU5UXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVDT05OUkVTRVQ6IHsKKwkJU0FZKCItRUNPTk5SRVNFVFxuIik7IGJyZWFrOworCX0KKwljYXNlIC1FTk9TUEM6IHsKKwkJU0FZKCJFTk9TUENcbiIpOyBicmVhazsKKwl9CisJZGVmYXVsdDogeworCQlTQVkoInVua25vd24gZXJyb3IgY29kZSAweCUwOFhcbiIsIHB1cmItPnN0YXR1cyk7IGJyZWFrOworCX0KKwl9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit9IGVsc2UgeworCWZvciAoaSA9IDA7ICBpIDwgcHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCQlpZiAoMCAhPSBwdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpIHsKKwkJCShwZWFzeWNhcC0+ZmllbGRfYnVmZmVyXAorCQkJCVtwZWFzeWNhcC0+ZmllbGRfZmlsbF1bMF0ua291bnQpIHw9IDB4ODAwMCA7CisJCQlzd2l0Y2ggKHB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cykgeworCQkJY2FzZSAgMDogeworCQkJCXN0cmNweSgmZXJyYnVmWzBdLCAiT0siKTsgYnJlYWs7CisJCQl9CisJCQljYXNlIC1FTk9FTlQ6IHsKKwkJCQlzdHJjcHkoJmVycmJ1ZlswXSwgIi1FTk9FTlQiKTsgYnJlYWs7CisJCQl9CisJCQljYXNlIC1FSU5QUk9HUkVTUzogeworCQkJCXN0cmNweSgmZXJyYnVmWzBdLCAiLUVJTlBST0dSRVNTIik7IGJyZWFrOworCQkJfQorCQkJY2FzZSAtRVBST1RPOiB7CisJCQkJc3RyY3B5KCZlcnJidWZbMF0sICItRVBST1RPIik7IGJyZWFrOworCQkJfQorCQkJY2FzZSAtRUlMU0VROiB7CisJCQkJc3RyY3B5KCZlcnJidWZbMF0sICItRUlMU0VRIik7IGJyZWFrOworCQkJfQorCQkJY2FzZSAtRVRJTUU6IHsKKwkJCQlzdHJjcHkoJmVycmJ1ZlswXSwgIi1FVElNRSIpOyBicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVUSU1FRE9VVDogeworCQkJCXN0cmNweSgmZXJyYnVmWzBdLCAiLUVUSU1FRE9VVCIpOyBicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVQSVBFOiB7CisJCQkJc3RyY3B5KCZlcnJidWZbMF0sICItRVBJUEUiKTsgYnJlYWs7CisJCQl9CisJCQljYXNlIC1FQ09NTTogeworCQkJCXN0cmNweSgmZXJyYnVmWzBdLCAiLUVDT01NIik7IGJyZWFrOworCQkJfQorCQkJY2FzZSAtRU5PU1I6IHsKKwkJCQlzdHJjcHkoJmVycmJ1ZlswXSwgIi1FTk9TUiIpOyBicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVPVkVSRkxPVzogeworCQkJCXN0cmNweSgmZXJyYnVmWzBdLCAiLUVPVkVSRkxPVyIpOyBicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVSRU1PVEVJTzogeworCQkJCXN0cmNweSgmZXJyYnVmWzBdLCAiLUVSRU1PVEVJTyIpOyBicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVOT0RFVjogeworCQkJCXN0cmNweSgmZXJyYnVmWzBdLCAiLUVOT0RFViIpOyBicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVYREVWOiB7CisJCQkJc3RyY3B5KCZlcnJidWZbMF0sICItRVhERVYiKTsgYnJlYWs7CisJCQl9CisJCQljYXNlIC1FSU5WQUw6IHsKKwkJCQlzdHJjcHkoJmVycmJ1ZlswXSwgIi1FSU5WQUwiKTsgYnJlYWs7CisJCQl9CisJCQljYXNlIC1FQ09OTlJFU0VUOiB7CisJCQkJc3RyY3B5KCZlcnJidWZbMF0sICItRUNPTk5SRVNFVCIpOyBicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVOT1NQQzogeworCQkJCVNBWSgiRU5PU1BDXG4iKTsgYnJlYWs7CisJCQl9CisJCQljYXNlIC1FU0hVVERPV046IHsKKwkJCQlzdHJjcHkoJmVycmJ1ZlswXSwgIi1FU0hVVERPV04iKTsgYnJlYWs7CisJCQl9CisJCQlkZWZhdWx0OiB7CisJCQkJc3RyY3B5KCZlcnJidWZbMF0sICJ1bmtub3duIGVycm9yIik7IGJyZWFrOworCQkJfQorCQkJfQorCQl9CisJCWZyYW1lc3RhdHVzID0gcHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzOworCQlmcmFtZWxlbmd0aCA9IHB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aDsKKwkJZnJhbWVhY3R1YWwgPSBwdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoOworCQlmcmFtZW9mZnNldCA9IHB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKKworCQlKT1QoMTYsICJmcmFtZVslMmldOiIgXAorCQkJCSIlNGk9c3RhdHVzICIgIFwKKwkJCQkiJTRpPWFjdHVhbCAiICBcCisJCQkJIiU0aT1sZW5ndGggIiAgXAorCQkJCSIlNWk9b2Zmc2V0XG4iLCBcCisJCQlpLCBmcmFtZXN0YXR1cywgZnJhbWVhY3R1YWwsIGZyYW1lbGVuZ3RoLCBmcmFtZW9mZnNldCk7CisJCWlmICghcHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKSB7CisJCQltb3JlID0gcHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aDsKKwkJCXBmaWVsZF9idWZmZXIgPSAmcGVhc3ljYXAtPmZpZWxkX2J1ZmZlclwKKwkJCQkgIFtwZWFzeWNhcC0+ZmllbGRfZmlsbF1bcGVhc3ljYXAtPmZpZWxkX3BhZ2VdOworCQkJdmlkZW9maWVsZGFtb3VudCA9IChwZWFzeWNhcC0+ZmllbGRfcGFnZSAqIFwKKwkJCQlQQUdFX1NJWkUpICsgXAorCQkJCShpbnQpKHBmaWVsZF9idWZmZXItPnB0byAtIHBmaWVsZF9idWZmZXItPnBnbyk7CisJCWlmICg0ID09IG1vcmUpCisJCQltdCsrOworCQlpZiAoNCA8IG1vcmUpIHsKKwkJCWlmIChtdCkgeworCQkJCUpPVCg4LCAiJTRpIGVtcHR5IHZpZGVvIHVyYiBmcmFtZXNcbiIsIG10KTsKKwkJCQltdCA9IDA7CisJCQl9CisJCQlpZiAoRklFTERfQlVGRkVSX01BTlkgPD0gcGVhc3ljYXAtPmZpZWxkX2ZpbGwpIHsKKwkJCQlTQVkoIkVSUk9SOiBiYWQgcGVhc3ljYXAtPmZpZWxkX2ZpbGxcbiIpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWlmIChGSUVMRF9CVUZGRVJfU0laRS9QQUdFX1NJWkUgPD0gXAorCQkJCQkJCXBlYXN5Y2FwLT5maWVsZF9wYWdlKSB7CisJCQkJU0FZKCJFUlJPUjogYmFkIHBlYXN5Y2FwLT5maWVsZF9wYWdlXG4iKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlwZmllbGRfYnVmZmVyID0gJnBlYXN5Y2FwLT5maWVsZF9idWZmZXJcCisJCQkJW3BlYXN5Y2FwLT5maWVsZF9maWxsXVtwZWFzeWNhcC0+ZmllbGRfcGFnZV07CisJCQlwdSA9IChfX3U4ICopKHB1cmItPnRyYW5zZmVyX2J1ZmZlciArIFwKKwkJCQkJcHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0KTsKKwkJCWlmICgweDgwICYgKnB1KQorCQkJCWxlYXAgPSA4OworCQkJZWxzZQorCQkJCWxlYXAgPSA0OworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIEVJR0hULUJZVEUgRU5ELU9GLVZJREVPRklFTEQgTUFSS0VSLgorICogIE5PVEU6ICBBIFNVQ0NFU1NJT04gT0YgVVJCIEZSQU1FUyBGT0xMT1dJTkcgVEhJUyBBUkUgRU1QVFksCisgKiAgICAgICAgIENPUlJFU1BPTkRJTkcgVE8gVEhFIEZJRUxEIEZMWUJBQ0sgKFZFUlRJQ0FMIEJMQU5LSU5HKSBQRVJJT0QuCisgKgorICogIFBST1ZJREVEIFRIRSBGSUVMRCBCVUZGRVIgQ09OVEFJTlMgR09PRCBEQVRBIEFTIElORElDQVRFRCBCWSBBIFpFUk8gVVBQRVIKKyAqICBCWVRFIE9GCisgKiAgICAgICAgcGVhc3ljYXAtPmZpZWxkX2J1ZmZlcltwZWFzeWNhcC0+ZmllbGRfZmlsbF1bMF0ua291bnQKKyAqICBUSEUgQ09OVEVOVFMgT0YgVEhFIEZJRUxEIEJVRkZFUiBBUkUgT0ZGRVJFRCBUTyBkcWJ1ZigpLCBmaWVsZF9yZWFkIElTCisgKiAgVVBEQVRFRCBBTkQgZmllbGRfZmlsbCBJUyBCVU1QRUQuICBJRiBUSEUgRklFTEQgQlVGRkVSIENPTlRBSU5TIEJBRCBEQVRBCisgKiAgTk9USElORyBJUyBPRkZFUkVEIFRPIGRxYnVmKCkuCisgKgorICogIFRIRSBERUNJU0lPTiBPTiBXSEVUSEVSIFRIRSBQQVJJVFkgT0YgVEhFIE9GRkVSRUQgRklFTEQgQlVGRkVSIElTIFJJR0hUCisgKiAgUkVTVFMgV0lUSCBkcWJ1ZigpLgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJCQlpZiAoKDggPT0gbW9yZSkgfHwgb3ZlcnJpZGUpIHsKKwkJCQlpZiAodmlkZW9maWVsZGFtb3VudCA+IFwKKwkJCQkJCXBlYXN5Y2FwLT52aWRlb2ZpZWxkYW1vdW50KSB7CisJCQkJCWlmICgyID09IHZpZGVvZmllbGRhbW91bnQgLSBcCisJCQkJCQkJcGVhc3ljYXAtPlwKKwkJCQkJCQl2aWRlb2ZpZWxkYW1vdW50KQorCQkJCQkJKHBlYXN5Y2FwLT5maWVsZF9idWZmZXJcCisJCQkJCQlbcGVhc3ljYXAtPmZpZWxkX2ZpbGxdXAorCQkJCQkJCVswXS5rb3VudCkgfD0gMHgwMTAwOworCQkJCQllbHNlCisJCQkJCQkocGVhc3ljYXAtPmZpZWxkX2J1ZmZlclwKKwkJCQkJCVtwZWFzeWNhcC0+ZmllbGRfZmlsbF1cCisJCQkJCQkJWzBdLmtvdW50KSB8PSAweDQwMDA7CisJCQkJCX0gZWxzZSBpZiAodmlkZW9maWVsZGFtb3VudCA8IFwKKwkJCQkJCQlwZWFzeWNhcC0+XAorCQkJCQkJCXZpZGVvZmllbGRhbW91bnQpIHsKKwkJCQkJCShwZWFzeWNhcC0+ZmllbGRfYnVmZmVyXAorCQkJCQkJW3BlYXN5Y2FwLT5maWVsZF9maWxsXVwKKwkJCQkJCQlbMF0ua291bnQpIHw9IDB4MjAwMDsKKwkJCQkJfQorCQkJCWlmICghKDB4RkYwMCAmIHBlYXN5Y2FwLT5maWVsZF9idWZmZXJcCisJCQkJCQlbcGVhc3ljYXAtPmZpZWxkX2ZpbGxdXAorCQkJCQkJWzBdLmtvdW50KSkgeworCQkJCQkocGVhc3ljYXAtPnZpZGVvX2p1bmspLS07CisJCQkJCWlmICgtMTYgPiBwZWFzeWNhcC0+dmlkZW9fanVuaykKKwkJCQkJCXBlYXN5Y2FwLT52aWRlb19qdW5rID0gLTE2OworCQkJCQlwZWFzeWNhcC0+ZmllbGRfcmVhZCA9IFwKKwkJCQkJCQkocGVhc3ljYXAtPlwKKwkJCQkJCQkJZmllbGRfZmlsbCkrKzsKKworCQkJCQlpZiAoRklFTERfQlVGRkVSX01BTlkgPD0gXAorCQkJCQkJcGVhc3ljYXAtPmZpZWxkX2ZpbGwpCisJCQkJCQlwZWFzeWNhcC0+ZmllbGRfZmlsbCA9IDA7CisJCQkJCXBlYXN5Y2FwLT5maWVsZF9wYWdlID0gMDsKKwkJCQkJcGZpZWxkX2J1ZmZlciA9ICZwZWFzeWNhcC0+XAorCQkJCQkJZmllbGRfYnVmZmVyXAorCQkJCQkJW3BlYXN5Y2FwLT5maWVsZF9maWxsXVwKKwkJCQkJCVtwZWFzeWNhcC0+ZmllbGRfcGFnZV07CisJCQkJCXBmaWVsZF9idWZmZXItPnB0byA9IFwKKwkJCQkJCQlwZmllbGRfYnVmZmVyLT5wZ287CisKKwkJCQkJSk9UKDgsICJidW1wZWQgdG86ICVpPXBlYXN5Y2FwLT4iIFwKKwkJCQkJCSJmaWVsZF9maWxsICAlaT1wYXJpdHlcbiIsIFwKKwkJCQkJCXBlYXN5Y2FwLT5maWVsZF9maWxsLCBcCisJCQkJCQkweDAwRkYgJiBwZmllbGRfYnVmZmVyLT5rb3VudCk7CisJCQkJCUpPVCg4LCAiZmllbGQgYnVmZmVyICVpIGhhcyAlaSAiIFwKKwkJCQkJCSJieXRlcyBmaXQgdG8gYmUgcmVhZFxuIiwgXAorCQkJCQkJcGVhc3ljYXAtPmZpZWxkX3JlYWQsIFwKKwkJCQkJCXZpZGVvZmllbGRhbW91bnQpOworCQkJCQlKT1QoOCwgIndha2V1cCBjYWxsIHRvIHdxX3ZpZGVvLCAiIFwKKwkJCQkJCSIlaT1maWVsZF9yZWFkICVpPWZpZWxkX2ZpbGwgIlwKKwkJCQkJCSIlaT1wYXJpdHlcbiIsIFwKKwkJCQkJCXBlYXN5Y2FwLT5maWVsZF9yZWFkLCBcCisJCQkJCQlwZWFzeWNhcC0+ZmllbGRfZmlsbCwgXAorCQkJCQkJMHgwMEZGICYgcGVhc3ljYXAtPlwKKwkJCQkJCWZpZWxkX2J1ZmZlcltwZWFzeWNhcC0+XAorCQkJCQkJZmllbGRfcmVhZF1bMF0ua291bnQpOworCQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJihwZWFzeWNhcC0+XAorCQkJCQkJCQl3cV92aWRlbykpOworCQkJCQlkb19nZXR0aW1lb2ZkYXkoJnBlYXN5Y2FwLT50aW1ldmFsNyk7CisJCQkJCX0gZWxzZSB7CisJCQkJCXBlYXN5Y2FwLT52aWRlb19qdW5rKys7CisJCQkJCUpPVCg4LCAiZmllbGQgYnVmZmVyICVpIGhhZCAlaSAiIFwKKwkJCQkJCSJieXRlcywgbm93IGRpc2NhcmRlZFxuIiwgXAorCQkJCQkJcGVhc3ljYXAtPmZpZWxkX2ZpbGwsIFwKKwkJCQkJCXZpZGVvZmllbGRhbW91bnQpOworCisJCQkJCShwZWFzeWNhcC0+ZmllbGRfZmlsbCkrKzsKKworCQkJCQlpZiAoRklFTERfQlVGRkVSX01BTlkgPD0gXAorCQkJCQkJCXBlYXN5Y2FwLT5maWVsZF9maWxsKQorCQkJCQkJcGVhc3ljYXAtPmZpZWxkX2ZpbGwgPSAwOworCQkJCQlwZWFzeWNhcC0+ZmllbGRfcGFnZSA9IDA7CisJCQkJCXBmaWVsZF9idWZmZXIgPSBcCisJCQkJCQkmcGVhc3ljYXAtPmZpZWxkX2J1ZmZlclwKKwkJCQkJCVtwZWFzeWNhcC0+ZmllbGRfZmlsbF1cCisJCQkJCQlbcGVhc3ljYXAtPmZpZWxkX3BhZ2VdOworCQkJCQlwZmllbGRfYnVmZmVyLT5wdG8gPSBcCisJCQkJCQkJcGZpZWxkX2J1ZmZlci0+cGdvOworCisJCQkJCUpPVCg4LCAiYnVtcGVkIHRvOiAlaT1wZWFzeWNhcC0+IiBcCisJCQkJCQkiZmllbGRfZmlsbCAgJWk9cGFyaXR5XG4iLCBcCisJCQkJCQlwZWFzeWNhcC0+ZmllbGRfZmlsbCwgXAorCQkJCQkJMHgwMEZGICYgcGZpZWxkX2J1ZmZlci0+a291bnQpOworCQkJCX0KKwkJCQlpZiAoOCA9PSBtb3JlKSB7CisJCQkJCUpPVCg4LCAiZW5kLW9mLWZpZWxkOiByZWNlaXZlZCAiIFwKKwkJCQkJCSJwYXJpdHkgYnl0ZSAweCUwMlhcbiIsIFwKKwkJCQkJCSgweEZGICYgKnB1KSk7CisJCQkJCWlmICgweDQwICYgKnB1KQorCQkJCQkJcGZpZWxkX2J1ZmZlci0+a291bnQgPSAweDAwMDA7CisJCQkJCWVsc2UKKwkJCQkJCXBmaWVsZF9idWZmZXItPmtvdW50ID0gMHgwMDAxOworCQkJCQlKT1QoOCwgImVuZC1vZi1maWVsZDogMHglMDJYPWtvdW50XG4iLFwKKwkJCQkJCTB4RkYgJiBwZmllbGRfYnVmZmVyLT5rb3VudCk7CisJCQkJfQorCQkJfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBDT1BZIG1vcmUgQllURVMgRlJPTSBJU09DIEJVRkZFUiBUTyBGSUVMRCBCVUZGRVIKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCQkJcHUgKz0gbGVhcDsKKwkJCW1vcmUgLT0gbGVhcDsKKworCQkJaWYgKEZJRUxEX0JVRkZFUl9NQU5ZIDw9IHBlYXN5Y2FwLT5maWVsZF9maWxsKSB7CisJCQkJU0FZKCJFUlJPUjogYmFkIHBlYXN5Y2FwLT5maWVsZF9maWxsXG4iKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlpZiAoRklFTERfQlVGRkVSX1NJWkUvUEFHRV9TSVpFIDw9IFwKKwkJCQkJCQlwZWFzeWNhcC0+ZmllbGRfcGFnZSkgeworCQkJCVNBWSgiRVJST1I6IGJhZCBwZWFzeWNhcC0+ZmllbGRfcGFnZVxuIik7CisJCQkJcmV0dXJuOworCQkJfQorCQkJcGZpZWxkX2J1ZmZlciA9ICZwZWFzeWNhcC0+ZmllbGRfYnVmZmVyXAorCQkJCVtwZWFzeWNhcC0+ZmllbGRfZmlsbF1bcGVhc3ljYXAtPmZpZWxkX3BhZ2VdOworCQkJd2hpbGUgKG1vcmUpIHsKKwkJCQlwZmllbGRfYnVmZmVyID0gJnBlYXN5Y2FwLT5maWVsZF9idWZmZXJcCisJCQkJCQlbcGVhc3ljYXAtPmZpZWxkX2ZpbGxdXAorCQkJCQkJW3BlYXN5Y2FwLT5maWVsZF9wYWdlXTsKKwkJCQlpZiAoUEFHRV9TSVpFIDwgKHBmaWVsZF9idWZmZXItPnB0byAtIFwKKwkJCQkJCQlwZmllbGRfYnVmZmVyLT5wZ28pKSB7CisJCQkJCVNBWSgiRVJST1I6IGJhZCBwZmllbGRfYnVmZmVyLT5wdG9cbiIpOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJCWlmIChQQUdFX1NJWkUgPT0gKHBmaWVsZF9idWZmZXItPnB0byAtIFwKKwkJCQkJCQlwZmllbGRfYnVmZmVyLT5wZ28pKSB7CisJCQkJCShwZWFzeWNhcC0+ZmllbGRfcGFnZSkrKzsKKwkJCQkJaWYgKEZJRUxEX0JVRkZFUl9TSVpFL1BBR0VfU0laRSA8PSBcCisJCQkJCQkJcGVhc3ljYXAtPmZpZWxkX3BhZ2UpIHsKKwkJCQkJCUpPVCgxNiwgIndyYXBwaW5nIHBlYXN5Y2FwLT4iIFwKKwkJCQkJCQkiZmllbGRfcGFnZVxuIik7CisJCQkJCQlwZWFzeWNhcC0+ZmllbGRfcGFnZSA9IDA7CisJCQkJCX0KKwkJCQkJcGZpZWxkX2J1ZmZlciA9ICZwZWFzeWNhcC0+XAorCQkJCQkJCWZpZWxkX2J1ZmZlclwKKwkJCQkJCQlbcGVhc3ljYXAtPmZpZWxkX2ZpbGxdXAorCQkJCQkJCVtwZWFzeWNhcC0+ZmllbGRfcGFnZV07CisJCQkJCXBmaWVsZF9idWZmZXItPnB0byA9IFwKKwkJCQkJCQlwZmllbGRfYnVmZmVyLT5wZ287CisJCQkJfQorCisJCQkJbXVjaCA9IFBBR0VfU0laRSAtIChpbnQpKHBmaWVsZF9idWZmZXItPnB0byAtIFwKKwkJCQkJCQlwZmllbGRfYnVmZmVyLT5wZ28pOworCisJCQkJaWYgKG11Y2ggPiBtb3JlKQorCQkJCQltdWNoID0gbW9yZTsKKwkJCQltZW1jcHkocGZpZWxkX2J1ZmZlci0+cHRvLCBwdSwgbXVjaCk7CisJCQkJcHUgKz0gbXVjaDsKKwkJCQkocGZpZWxkX2J1ZmZlci0+cHRvKSArPSBtdWNoOworCQkJCW1vcmUgLT0gbXVjaDsKKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICoKKyAqCisgKiAgICAgICAgICAgICAqKiogVU5ERVIgREVWRUxPUE1FTlQvVEVTVElORyAtIE5PVCBSRUFEWSBZRVQhICoqKgorICoKKyAqCisgKgorICogIFZJREVPVEFQRVMgTUFZIEhBVkUgQkVFTiBNQU5VQUxMWSBQQVVTRUQgQU5EIFJFU1RBUlRFRCBEVVJJTkcgUkVDT1JESU5HLgorICogIFRISVMgQ0FVU0VTIExPU1MgT0YgU1lOQywgQ09ORlVTSU5HIERPV05TVFJFQU0gVVNFUlNQQUNFIFBST0dSQU1TIFdISUNICisgKiAgTUFZIElOVEVSUFJFVCBUSEUgSU5URVJSVVBUSU9OIEFTIEEgU1lNUFRPTSBPRiBMQVRFTkNZLiAgVE8gT1ZFUkNPTUUgVEhJUworICogIFRIRSBEUklWRVIgQlJJREdFUyBUSEUgSElBVFVTIEJZIFNFTkRJTkcgRFVNTVkgVklERU8gRlJBTUVTIEFUIFJPVUdITFkKKyAqICBUSEUgUklHSFQgVElNRSBJTlRFUlZBTFMgSU4gVEhFIEhPUEUgT0YgUEVSU1VBRElORyBUSEUgRE9XTlNUUkVBTSBVU0VSU1BBQ0UKKyAqICBQUk9HUkFNIFRPIFJFU1VNRSBOT1JNQUwgU0VSVklDRSBXSEVOIFRIRSBJTlRFUlJVUFRJT04gSVMgT1ZFUi4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmIGRlZmluZWQoQlJJREdFUikKK2RvX2dldHRpbWVvZmRheSgmdGltZXZhbCk7CitpZiAocGVhc3ljYXAtPnRpbWV2YWw3LnR2X3NlYykgeworCXVzZWMgPSAxMDAwMDAwKih0aW1ldmFsLnR2X3NlYyAgLSBwZWFzeWNhcC0+dGltZXZhbDcudHZfc2VjKSArIFwKKwkJCSh0aW1ldmFsLnR2X3VzZWMgLSBwZWFzeWNhcC0+dGltZXZhbDcudHZfdXNlYyk7CisJaWYgKHVzZWMgPiAocGVhc3ljYXAtPnVzZWMgKyBwZWFzeWNhcC0+dG9sZXJhdGUpKSB7CisJCUpPVCg4LCAiYnJpZGdpbmcgaGlhdHVzXG4iKTsKKwkJcGVhc3ljYXAtPnZpZGVvX2p1bmsgPSAwOworCQlwZWFzeWNhcC0+ZmllbGRfYnVmZmVyW3BlYXN5Y2FwLT5maWVsZF9maWxsXVswXS5rb3VudCB8PSAweDA0MDA7CisKKwkJcGVhc3ljYXAtPmZpZWxkX3JlYWQgPSAocGVhc3ljYXAtPmZpZWxkX2ZpbGwpKys7CisKKwkJaWYgKEZJRUxEX0JVRkZFUl9NQU5ZIDw9IHBlYXN5Y2FwLT5maWVsZF9maWxsKSBcCisJCQkJCQlwZWFzeWNhcC0+ZmllbGRfZmlsbCA9IDA7CisJCXBlYXN5Y2FwLT5maWVsZF9wYWdlID0gMDsKKwkJcGZpZWxkX2J1ZmZlciA9ICZwZWFzeWNhcC0+ZmllbGRfYnVmZmVyXAorCQkJCVtwZWFzeWNhcC0+ZmllbGRfZmlsbF1bcGVhc3ljYXAtPmZpZWxkX3BhZ2VdOworCQlwZmllbGRfYnVmZmVyLT5wdG8gPSBwZmllbGRfYnVmZmVyLT5wZ287CisKKwkJSk9UKDgsICJidW1wZWQgdG86ICVpPXBlYXN5Y2FwLT5maWVsZF9maWxsICAlaT1wYXJpdHlcbiIsIFwKKwkJCXBlYXN5Y2FwLT5maWVsZF9maWxsLCAweDAwRkYgJiBwZmllbGRfYnVmZmVyLT5rb3VudCk7CisJCUpPVCg4LCAiZmllbGQgYnVmZmVyICVpIGhhcyAlaSBieXRlcyB0byBiZSBvdmVyd3JpdHRlblxuIiwgXAorCQkJcGVhc3ljYXAtPmZpZWxkX3JlYWQsIHZpZGVvZmllbGRhbW91bnQpOworCQlKT1QoOCwgIndha2V1cCBjYWxsIHRvIHdxX3ZpZGVvLCAiIFwKKwkJCSIlaT1maWVsZF9yZWFkICVpPWZpZWxkX2ZpbGwgJWk9cGFyaXR5XG4iLCBcCisJCQlwZWFzeWNhcC0+ZmllbGRfcmVhZCwgcGVhc3ljYXAtPmZpZWxkX2ZpbGwsIFwKKwkJCTB4MDBGRiAmIFwKKwkJCXBlYXN5Y2FwLT5maWVsZF9idWZmZXJbcGVhc3ljYXAtPmZpZWxkX3JlYWRdWzBdLmtvdW50KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCYocGVhc3ljYXAtPndxX3ZpZGVvKSk7CisJCWRvX2dldHRpbWVvZmRheSgmcGVhc3ljYXAtPnRpbWV2YWw3KTsKKwl9Cit9CisjZW5kaWYgLypCUklER0VSKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgUkVTVUJNSVQgVEhJUyBVUkIsIFVOTEVTUyBBIFNFVkVSRSBQRVJTSVNURU5UIEVSUk9SIENPTkRJVElPTiBFWElTVFMuCisgKgorICogIElGIFRIRSBXQUlUIFFVRVVFUyBBUkUgTk9UIENMRUFSRUQgSU4gUkVTUE9OU0UgVE8gQU4gRVJST1IgQ09ORElUSU9OCisgKiAgVEhFIFVTRVJTUEFDRSBQUk9HUkFNLCBFLkcuIG1wbGF5ZXIsIE1BWSBIQU5HIE9OIEVYSVQuICAgQkVXQVJFLgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpZiAoVklERU9fSVNPQ19CVUZGRVJfTUFOWSA8PSBwZWFzeWNhcC0+dmlkZW9fanVuaykgeworCVNBWSgiZWFzeWNhcCBkcml2ZXIgc2h1dHRpbmcgZG93biBvbiBjb25kaXRpb24gZ3JlZW5cbiIpOworCXBlYXN5Y2FwLT52aWRlb19lb2YgPSAxOworCXBlYXN5Y2FwLT5hdWRpb19lb2YgPSAxOworCXBlYXN5Y2FwLT52aWRlb19qdW5rID0gLVZJREVPX0lTT0NfQlVGRkVSX01BTlk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCYocGVhc3ljYXAtPndxX3ZpZGVvKSk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCYocGVhc3ljYXAtPndxX2F1ZGlvKSk7CisJcmV0dXJuOworfQoraWYgKHBlYXN5Y2FwLT52aWRlb19pc29jX3N0cmVhbWluZykgeworCXJjID0gdXNiX3N1Ym1pdF91cmIocHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKDAgIT0gcmMpIHsKKwkJU0FZKCJFUlJPUjogd2hpbGUgJWk9dmlkZW9faWRsZSwgdXNiX3N1Ym1pdF91cmIoKSBmYWlsZWQgIiBcCisJCQkJCSJ3aXRoIHJjOlxuIiwgcGVhc3ljYXAtPnZpZGVvX2lkbGUpOworCQlzd2l0Y2ggKHJjKSB7CisJCWNhc2UgLUVOT01FTTogeworCQkJU0FZKCJFTk9NRU1cbiIpOyBicmVhazsKKwkJfQorCQljYXNlIC1FTk9ERVY6IHsKKwkJCVNBWSgiRU5PREVWXG4iKTsgYnJlYWs7CisJCX0KKwkJY2FzZSAtRU5YSU86IHsKKwkJCVNBWSgiRU5YSU9cbiIpOyBicmVhazsKKwkJfQorCQljYXNlIC1FSU5WQUw6IHsKKwkJCVNBWSgiRUlOVkFMXG4iKTsgYnJlYWs7CisJCX0KKwkJY2FzZSAtRUFHQUlOOiB7CisJCQlTQVkoIkVBR0FJTlxuIik7IGJyZWFrOworCQl9CisJCWNhc2UgLUVGQklHOiB7CisJCQlTQVkoIkVGQklHXG4iKTsgYnJlYWs7CisJCX0KKwkJY2FzZSAtRVBJUEU6IHsKKwkJCVNBWSgiRVBJUEVcbiIpOyBicmVhazsKKwkJfQorCQljYXNlIC1FTVNHU0laRTogeworCQkJU0FZKCJFTVNHU0laRVxuIik7ICBicmVhazsKKwkJfQorCQljYXNlIC1FTk9TUEM6IHsKKwkJCVNBWSgiRU5PU1BDXG4iKTsgYnJlYWs7CisJCX0KKwkJZGVmYXVsdDogeworCQkJU0FZKCIweCUwOFhcbiIsIHJjKTsgYnJlYWs7CisJCX0KKwkJfQorCX0KK30KK3JldHVybjsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklYTUUKKyAqCisgKgorICogIFRISVMgRlVOQ1RJT04gQVNTVU1FUyBUSEFULCBPTiBFQUNIIEFORCBFVkVSWSBPQ0NBU0lPTiBUSEFUIFRIRSBERVZJQ0UgSVMKKyAqICBQSFlTSUNBTExZIFBMVUdHRUQgSU4sIElOVEVSRkFDRSAwIElTIFBST0JFRCBGSVJTVC4KKyAqICBJRiBUSElTIElTIE5PVCBUUlVFLCBUSEVSRSBJUyBUSEUgUE9TU0lCSUxJVFkgT0YgQU4gT29wcy4KKyAqCisgKiAgVEhJUyBIQVMgTkVWRVIgQkVFTiBBIFBST0JMRU0gSU4gUFJBQ1RJQ0UsIEJVVCBTT01FVEhJTkcgU0VFTVMgV1JPTkcgSEVSRS4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CitlYXN5Y2FwX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqcHVzYl9pbnRlcmZhY2UsIFwKKwkJCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKK3N0cnVjdCB1c2JfZGV2aWNlICpwdXNiX2RldmljZSwgKnB1c2JfZGV2aWNlMTsKK3N0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKnB1c2JfaG9zdF9pbnRlcmZhY2U7CitzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKnBlcGQ7CitzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICpwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yOworc3RydWN0IHVzYl9pbnRlcmZhY2VfYXNzb2NfZGVzY3JpcHRvciAqcHVzYl9pbnRlcmZhY2VfYXNzb2NfZGVzY3JpcHRvcjsKK3N0cnVjdCB1cmIgKnB1cmI7CitzdGF0aWMgc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwIC8qPU5VTEwqLzsKK3N0cnVjdCBkYXRhX3VyYiAqcGRhdGFfdXJiOworc2l6ZV90IHdNYXhQYWNrZXRTaXplOworaW50IElTT0N3TWF4UGFja2V0U2l6ZTsKK2ludCBCVUxLd01heFBhY2tldFNpemU7CitpbnQgSU5Ud01heFBhY2tldFNpemU7CitpbnQgQ1RSTHdNYXhQYWNrZXRTaXplOworX191OCBiRW5kcG9pbnRBZGRyZXNzOworX191OCBJU09DYkVuZHBvaW50QWRkcmVzczsKK19fdTggSU5UYkVuZHBvaW50QWRkcmVzczsKK2ludCBpc2luLCBpLCBqLCBrLCBtOworX191OCBiSW50ZXJmYWNlTnVtYmVyOworX191OCBiSW50ZXJmYWNlQ2xhc3M7CitfX3U4IGJJbnRlcmZhY2VTdWJDbGFzczsKK3ZvaWQgKnBidWY7CitpbnQgb2thbHRbOF0sIGlzb2thbHQ7CitpbnQgb2tlcG5bOF0sIGlzb2tlcG47CitpbnQgb2ttcHNbOF0sIGlzb2ttcHM7CitpbnQgbWF4cGFja2V0c2l6ZTsKK2ludCByYzsKKworSk9UKDQsICJcbiIpOworCitpZiAoKHN0cnVjdCB1c2JfaW50ZXJmYWNlICopTlVMTCA9PSBwdXNiX2ludGVyZmFjZSkgeworCVNBWSgiRVJST1I6IHB1c2JfaW50ZXJmYWNlIGlzIE5VTExcbiIpOworCXJldHVybiAtRUZBVUxUOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBHRVQgUE9JTlRFUiBUTyBTVFJVQ1RVUkUgdXNiX2RldmljZQorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitwdXNiX2RldmljZTEgPSBjb250YWluZXJfb2YocHVzYl9pbnRlcmZhY2UtPmRldi5wYXJlbnQsIFwKKwkJCQkJCXN0cnVjdCB1c2JfZGV2aWNlLCBkZXYpOworaWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgPT0gcHVzYl9kZXZpY2UxKSB7CisJU0FZKCJFUlJPUjogcHVzYl9kZXZpY2UxIGlzIE5VTExcbiIpOworCXJldHVybiAtRUZBVUxUOworfQorcHVzYl9kZXZpY2UgPSB1c2JfZ2V0X2RldihwdXNiX2RldmljZTEpOworaWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgPT0gcHVzYl9kZXZpY2UpIHsKKwlTQVkoIkVSUk9SOiBwdXNiX2RldmljZSBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KK2lmICgodW5zaWduZWQgbG9uZyBpbnQpcHVzYl9kZXZpY2UxICE9ICh1bnNpZ25lZCBsb25nIGludClwdXNiX2RldmljZSkgeworCUpPVCg0LCAiRVJST1I6IHB1c2JfZGV2aWNlMSAhPSBwdXNiX2RldmljZVxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CisKK0pPVCg0LCAiYk51bUNvbmZpZ3VyYXRpb25zPSVpXG4iLCBwdXNiX2RldmljZS0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitwdXNiX2hvc3RfaW50ZXJmYWNlID0gcHVzYl9pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nOworaWYgKE5VTEwgPT0gcHVzYl9ob3N0X2ludGVyZmFjZSkgeworCVNBWSgiRVJST1I6IHB1c2JfaG9zdF9pbnRlcmZhY2UgaXMgTlVMTFxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CitwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yID0gJihwdXNiX2hvc3RfaW50ZXJmYWNlLT5kZXNjKTsKK2lmIChOVUxMID09IHB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IpIHsKKwlTQVkoIkVSUk9SOiBwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIGlzIE5VTExcbiIpOworCXJldHVybiAtRUZBVUxUOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBHRVQgUFJPUEVSVElFUyBPRiBQUk9CRUQgSU5URVJGQUNFCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2JJbnRlcmZhY2VOdW1iZXIgPSBwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yLT5iSW50ZXJmYWNlTnVtYmVyOworYkludGVyZmFjZUNsYXNzID0gcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvci0+YkludGVyZmFjZUNsYXNzOworYkludGVyZmFjZVN1YkNsYXNzID0gcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvci0+YkludGVyZmFjZVN1YkNsYXNzOworCitKT1QoNCwgImludGZbJWldOiBwdXNiX2ludGVyZmFjZS0+bnVtX2FsdHNldHRpbmc9JWlcbiIsIFwKKwkJCWJJbnRlcmZhY2VOdW1iZXIsIHB1c2JfaW50ZXJmYWNlLT5udW1fYWx0c2V0dGluZyk7CitKT1QoNCwgImludGZbJWldOiBwdXNiX2ludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmcgLSAiIFwKKwkJCSJwdXNiX2ludGVyZmFjZS0+YWx0c2V0dGluZz0lbGlcbiIsIGJJbnRlcmZhY2VOdW1iZXIsIFwKKwkJCShsb25nIGludCkocHVzYl9pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nIC0gXAorCQkJCQkJcHVzYl9pbnRlcmZhY2UtPmFsdHNldHRpbmcpKTsKK3N3aXRjaCAoYkludGVyZmFjZUNsYXNzKSB7CitjYXNlIFVTQl9DTEFTU19BVURJTzogeworCUpPVCg0LCAiaW50ZlslaV06IGJJbnRlcmZhY2VDbGFzcz0weCUwMlg9VVNCX0NMQVNTX0FVRElPXG4iLCBcCisJCQkJYkludGVyZmFjZU51bWJlciwgYkludGVyZmFjZUNsYXNzKTsgYnJlYWs7CisJfQorY2FzZSBVU0JfQ0xBU1NfVklERU86IHsKKwlKT1QoNCwgImludGZbJWldOiBiSW50ZXJmYWNlQ2xhc3M9MHglMDJYPVVTQl9DTEFTU19WSURFT1xuIiwgXAorCQkJCWJJbnRlcmZhY2VOdW1iZXIsIGJJbnRlcmZhY2VDbGFzcyk7IGJyZWFrOworCX0KK2Nhc2UgVVNCX0NMQVNTX1ZFTkRPUl9TUEVDOiB7CisJSk9UKDQsICJpbnRmWyVpXTogYkludGVyZmFjZUNsYXNzPTB4JTAyWD1VU0JfQ0xBU1NfVkVORE9SX1NQRUNcbiIsIFwKKwkJCQliSW50ZXJmYWNlTnVtYmVyLCBiSW50ZXJmYWNlQ2xhc3MpOyBicmVhazsKKwl9CitkZWZhdWx0OgorCWJyZWFrOworfQorc3dpdGNoIChiSW50ZXJmYWNlU3ViQ2xhc3MpIHsKK2Nhc2UgMHgwMTogeworCUpPVCg0LCAiaW50ZlslaV06IGJJbnRlcmZhY2VTdWJDbGFzcz0weCUwMlg9QVVESU9DT05UUk9MXG4iLCBcCisJCQliSW50ZXJmYWNlTnVtYmVyLCBiSW50ZXJmYWNlU3ViQ2xhc3MpOyBicmVhazsKK30KK2Nhc2UgMHgwMjogeworCUpPVCg0LCAiaW50ZlslaV06IGJJbnRlcmZhY2VTdWJDbGFzcz0weCUwMlg9QVVESU9TVFJFQU1JTkdcbiIsIFwKKwkJCWJJbnRlcmZhY2VOdW1iZXIsIGJJbnRlcmZhY2VTdWJDbGFzcyk7IGJyZWFrOworfQorY2FzZSAweDAzOiB7CisJSk9UKDQsICJpbnRmWyVpXTogYkludGVyZmFjZVN1YkNsYXNzPTB4JTAyWD1NSURJU1RSRUFNSU5HXG4iLCBcCisJCQliSW50ZXJmYWNlTnVtYmVyLCBiSW50ZXJmYWNlU3ViQ2xhc3MpOyBicmVhazsKK30KK2RlZmF1bHQ6CisJYnJlYWs7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitwdXNiX2ludGVyZmFjZV9hc3NvY19kZXNjcmlwdG9yID0gcHVzYl9pbnRlcmZhY2UtPmludGZfYXNzb2M7CitpZiAoTlVMTCAhPSBwdXNiX2ludGVyZmFjZV9hc3NvY19kZXNjcmlwdG9yKSB7CisJSk9UKDQsICJpbnRmWyVpXTogYkZpcnN0SW50ZXJmYWNlPTB4JTAyWCAgYkludGVyZmFjZUNvdW50PTB4JTAyWFxuIiwgXAorCQkJYkludGVyZmFjZU51bWJlciwgXAorCQkJcHVzYl9pbnRlcmZhY2VfYXNzb2NfZGVzY3JpcHRvci0+YkZpcnN0SW50ZXJmYWNlLCBcCisJCQlwdXNiX2ludGVyZmFjZV9hc3NvY19kZXNjcmlwdG9yLT5iSW50ZXJmYWNlQ291bnQpOworfSBlbHNlIHsKK0pPVCg0LCAiaW50ZlslaV06IHB1c2JfaW50ZXJmYWNlX2Fzc29jX2Rlc2NyaXB0b3IgaXMgTlVMTFxuIiwgXAorCQkJCQkJCWJJbnRlcmZhY2VOdW1iZXIpOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBBIE5FVyBzdHJ1Y3QgZWFzeWNhcCBJUyBBTFdBWVMgQUxMT0NBVEVEIFdIRU4gSU5URVJGQUNFIDAgSVMgUFJPQkVELgorICogIElUIElTIE5PVCBQT1NTSUJMRSBIRVJFIFRPIEZSRUUgQU5ZIEVYSVNUSU5HIHN0cnVjdCBlYXN5Y2FwLiAgVEhJUworICogIFNIT1VMRCBIQVZFIEJFRU4gRE9ORSBCWSBlYXN5Y2FwX2RlbGV0ZSgpIFdIRU4gVEhFIERFVklDRSBXQVMgUEhZU0lDQUxMWQorICogIFVOUExVR0dFRC4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaWYgKDAgPT0gYkludGVyZmFjZU51bWJlcikgeworCXBlYXN5Y2FwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGVhc3ljYXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoTlVMTCA9PSBwZWFzeWNhcCkgeworCQlTQVkoIkVSUk9SOiBDb3VsZCBub3QgYWxsb2NhdGUgcGVhc3ljYXBcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9IGVsc2UgeworCQlwZWFzeWNhcC0+YWxsb2NhdGlvbl92aWRlb19zdHJ1Y3QgPSBzaXplb2Yoc3RydWN0IGVhc3ljYXApOworCQlwZWFzeWNhcC0+YWxsb2NhdGlvbl92aWRlb19wYWdlID0gMDsKKwkJcGVhc3ljYXAtPmFsbG9jYXRpb25fdmlkZW9fdXJiID0gMDsKKwkJcGVhc3ljYXAtPmFsbG9jYXRpb25fYXVkaW9fc3RydWN0ID0gMDsKKwkJcGVhc3ljYXAtPmFsbG9jYXRpb25fYXVkaW9fcGFnZSA9IDA7CisJCXBlYXN5Y2FwLT5hbGxvY2F0aW9uX2F1ZGlvX3VyYiA9IDA7CisJfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBJTklUSUFMSVpFIFRIRSBORVcgZWFzeWNhcCBTVFJVQ1RVUkUuCisgKiAgTk8gUEFSQU1FVEVSUyBBUkUgU1BFQ0lGSUVEIEhFUkUgUkVRVUlSSU5HIFRIRSBTRVRUSU5HIE9GIFJFR0lTVEVSUy4KKyAqICBUSEFUIElTIERPTkUgRklSU1QgQlkgZWFzeWNhcF9vcGVuKCkgQU5EIExBVEVSIEJZIGVhc3ljYXBfaW9jdGwoKS4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCXBlYXN5Y2FwLT5wdXNiX2RldmljZSA9IHB1c2JfZGV2aWNlOworCXBlYXN5Y2FwLT5wdXNiX2ludGVyZmFjZSA9IHB1c2JfaW50ZXJmYWNlOworCisJa3JlZl9pbml0KCZwZWFzeWNhcC0+a3JlZik7CisJSk9UKDgsICJpbnRmWyVpXTogYWZ0ZXIga3JlZl9pbml0KC4uLl92aWRlbykgIiBcCisJCQkiJWk9cGVhc3ljYXAtPmtyZWYucmVmY291bnQuY291bnRlclxuIiwgXAorCQkJYkludGVyZmFjZU51bWJlciwgcGVhc3ljYXAtPmtyZWYucmVmY291bnQuY291bnRlcik7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCYocGVhc3ljYXAtPndxX3ZpZGVvKSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmKHBlYXN5Y2FwLT53cV9hdWRpbykpOworCisJbXV0ZXhfaW5pdCgmKHBlYXN5Y2FwLT5tdXRleF90aW1ldmFsMCkpOworCW11dGV4X2luaXQoJihwZWFzeWNhcC0+bXV0ZXhfdGltZXZhbDEpKTsKKworCWZvciAoayA9IDA7IGsgPCBGUkFNRV9CVUZGRVJfTUFOWTsgaysrKQorCQltdXRleF9pbml0KCYocGVhc3ljYXAtPm11dGV4X21tYXBfdmlkZW9ba10pKTsKKworCXBlYXN5Y2FwLT5pbGsgPSAwOworCXBlYXN5Y2FwLT5taWNyb3Bob25lID0gZmFsc2U7CisKKwlwZWFzeWNhcC0+dmlkZW9faW50ZXJmYWNlID0gLTE7CisJcGVhc3ljYXAtPnZpZGVvX2FsdHNldHRpbmdfb24gPSAtMTsKKwlwZWFzeWNhcC0+dmlkZW9fYWx0c2V0dGluZ19vZmYgPSAtMTsKKwlwZWFzeWNhcC0+dmlkZW9fZW5kcG9pbnRudW1iZXIgPSAtMTsKKwlwZWFzeWNhcC0+dmlkZW9faXNvY19tYXhmcmFtZXNpemUgPSAtMTsKKwlwZWFzeWNhcC0+dmlkZW9faXNvY19idWZmZXJfc2l6ZSA9IC0xOworCisJcGVhc3ljYXAtPmF1ZGlvX2ludGVyZmFjZSA9IC0xOworCXBlYXN5Y2FwLT5hdWRpb19hbHRzZXR0aW5nX29uID0gLTE7CisJcGVhc3ljYXAtPmF1ZGlvX2FsdHNldHRpbmdfb2ZmID0gLTE7CisJcGVhc3ljYXAtPmF1ZGlvX2VuZHBvaW50bnVtYmVyID0gLTE7CisJcGVhc3ljYXAtPmF1ZGlvX2lzb2NfbWF4ZnJhbWVzaXplID0gLTE7CisJcGVhc3ljYXAtPmF1ZGlvX2lzb2NfYnVmZmVyX3NpemUgPSAtMTsKKworCXBlYXN5Y2FwLT5mcmFtZV9idWZmZXJfbWFueSA9IEZSQU1FX0JVRkZFUl9NQU5ZOworCisJaWYgKChzdHJ1Y3QgbXV0ZXggKilOVUxMID09ICYocGVhc3ljYXAtPm11dGV4X21tYXBfdmlkZW9bMF0pKSB7CisJCVNBWSgiRVJST1I6ICYocGVhc3ljYXAtPm11dGV4X21tYXBfdmlkZW9bJWldKSBpcyBOVUxMXG4iLCAwKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBEWU5BTUlDQUxMWSBGSUxMIElOIFRIRSBBVkFJTEFCTEUgRk9STUFUUy4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCXJjID0gZmlsbGluX2Zvcm1hdHMoKTsKKwlpZiAoMCA+IHJjKSB7CisJCVNBWSgiRVJST1I6IGZpbGxpbl9mb3JtYXRzKCkgcmV0dXJuZWQgJWlcbiIsIHJjKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCUpPVCg0LCAiJWkgZm9ybWF0cyBhdmFpbGFibGVcbiIsIHJjKTsKKwl9IGVsc2UgeworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCQlpZiAoKHN0cnVjdCBlYXN5Y2FwICopTlVMTCA9PSBwZWFzeWNhcCkgeworCQkJU0FZKCJFUlJPUjogcGVhc3ljYXAgaXMgTlVMTCAiIFwKKwkJCQkJIndoZW4gcHJvYmluZyBpbnRlcmZhY2UgJWlcbiIsIFwKKwkJCQkJCQliSW50ZXJmYWNlTnVtYmVyKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisKKwlKT1QoOCwgImtyZWZfZ2V0KCkgd2l0aCAlaT1wZWFzeWNhcC0+a3JlZi5yZWZjb3VudC5jb3VudGVyXG4iLCBcCisJCQkJCShpbnQpcGVhc3ljYXAtPmtyZWYucmVmY291bnQuY291bnRlcik7CisJa3JlZl9nZXQoJnBlYXN5Y2FwLT5rcmVmKTsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2lmICgoVVNCX0NMQVNTX1ZJREVPID09IGJJbnRlcmZhY2VDbGFzcykgfHwgXAorCShVU0JfQ0xBU1NfVkVORE9SX1NQRUMgPT0gYkludGVyZmFjZUNsYXNzKSkgeworCWlmICgtMSA9PSBwZWFzeWNhcC0+dmlkZW9faW50ZXJmYWNlKSB7CisJCXBlYXN5Y2FwLT52aWRlb19pbnRlcmZhY2UgPSBiSW50ZXJmYWNlTnVtYmVyOworCQlKT1QoNCwgInNldHRpbmcgcGVhc3ljYXAtPnZpZGVvX2ludGVyZmFjZT0laVxuIiwgXAorCQkJCQkJcGVhc3ljYXAtPnZpZGVvX2ludGVyZmFjZSk7CisJfSBlbHNlIHsKKwkJaWYgKHBlYXN5Y2FwLT52aWRlb19pbnRlcmZhY2UgIT0gYkludGVyZmFjZU51bWJlcikgeworCQkJU0FZKCJFUlJPUjogYXR0ZW1wdGluZyB0byByZXNldCAiIFwKKwkJCQkJInBlYXN5Y2FwLT52aWRlb19pbnRlcmZhY2VcbiIpOworCQkJU0FZKCIuLi4uLi4gY29udGludWluZyB3aXRoICIgXAorCQkJCQkiJWk9cGVhc3ljYXAtPnZpZGVvX2ludGVyZmFjZVxuIiwgXAorCQkJCQlwZWFzeWNhcC0+dmlkZW9faW50ZXJmYWNlKTsKKwkJfQorCX0KK30gZWxzZSBpZiAoKFVTQl9DTEFTU19BVURJTyA9PSBiSW50ZXJmYWNlQ2xhc3MpICYmIFwKKwkJCQkJCSgweDAyID09IGJJbnRlcmZhY2VTdWJDbGFzcykpIHsKKwlpZiAoLTEgPT0gcGVhc3ljYXAtPmF1ZGlvX2ludGVyZmFjZSkgeworCQlwZWFzeWNhcC0+YXVkaW9faW50ZXJmYWNlID0gYkludGVyZmFjZU51bWJlcjsKKwkJSk9UKDQsICJzZXR0aW5nIHBlYXN5Y2FwLT5hdWRpb19pbnRlcmZhY2U9JWlcbiIsIFwKKwkJCQkJCSBwZWFzeWNhcC0+YXVkaW9faW50ZXJmYWNlKTsKKwl9IGVsc2UgeworCQlpZiAocGVhc3ljYXAtPmF1ZGlvX2ludGVyZmFjZSAhPSBiSW50ZXJmYWNlTnVtYmVyKSB7CisJCQlTQVkoIkVSUk9SOiBhdHRlbXB0aW5nIHRvIHJlc2V0ICIgXAorCQkJCQkicGVhc3ljYXAtPmF1ZGlvX2ludGVyZmFjZVxuIik7CisJCQlTQVkoIi4uLi4uLiBjb250aW51aW5nIHdpdGggIiBcCisJCQkJCSIlaT1wZWFzeWNhcC0+YXVkaW9faW50ZXJmYWNlXG4iLCBcCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19pbnRlcmZhY2UpOworCQl9CisJfQorfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBJTlZFU1RJR0FURSBBTEwgQUxUU0VUVElOR1MuCisgKiAgRE9ORSBJTiBERVRBSUwgQkVDQVVTRSBVU0IgREVWSUNFIDA1ZTE6MDQwOCBIQVMgRElTUEFSQVRFIElOQ0FSTkFUSU9OUy4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaXNva2FsdCA9IDA7Citpc29rZXBuID0gMDsKK2lzb2ttcHMgPSAwOworCitmb3IgKGkgPSAwOyBpIDwgcHVzYl9pbnRlcmZhY2UtPm51bV9hbHRzZXR0aW5nOyBpKyspIHsKKwlwdXNiX2hvc3RfaW50ZXJmYWNlID0gJihwdXNiX2ludGVyZmFjZS0+YWx0c2V0dGluZ1tpXSk7CisJaWYgKChzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICopTlVMTCA9PSBwdXNiX2hvc3RfaW50ZXJmYWNlKSB7CisJCVNBWSgiRVJST1I6IHB1c2JfaG9zdF9pbnRlcmZhY2UgaXMgTlVMTFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yID0gJihwdXNiX2hvc3RfaW50ZXJmYWNlLT5kZXNjKTsKKwlpZiAoKHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgKilOVUxMID09IFwKKwkJCQkJCXB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IpIHsKKwkJU0FZKCJFUlJPUjogcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciBpcyBOVUxMXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJSk9UKDQsICJpbnRmWyVpXWFsdFslaV06IGRlc2MuYkRlc2NyaXB0b3JUeXBlPTB4JTAyWFxuIiwgXAorCWJJbnRlcmZhY2VOdW1iZXIsIGksIHB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3ItPmJEZXNjcmlwdG9yVHlwZSk7CisJSk9UKDQsICJpbnRmWyVpXWFsdFslaV06IGRlc2MuYkludGVyZmFjZU51bWJlcj0weCUwMlhcbiIsIFwKKwliSW50ZXJmYWNlTnVtYmVyLCBpLCBwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yLT5iSW50ZXJmYWNlTnVtYmVyKTsKKwlKT1QoNCwgImludGZbJWldYWx0WyVpXTogZGVzYy5iQWx0ZXJuYXRlU2V0dGluZz0weCUwMlhcbiIsIFwKKwliSW50ZXJmYWNlTnVtYmVyLCBpLCBwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yLT5iQWx0ZXJuYXRlU2V0dGluZyk7CisJSk9UKDQsICJpbnRmWyVpXWFsdFslaV06IGRlc2MuYk51bUVuZHBvaW50cz0weCUwMlhcbiIsIFwKKwliSW50ZXJmYWNlTnVtYmVyLCBpLCBwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yLT5iTnVtRW5kcG9pbnRzKTsKKwlKT1QoNCwgImludGZbJWldYWx0WyVpXTogZGVzYy5iSW50ZXJmYWNlQ2xhc3M9MHglMDJYXG4iLCBcCisJYkludGVyZmFjZU51bWJlciwgaSwgcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvci0+YkludGVyZmFjZUNsYXNzKTsKKwlKT1QoNCwgImludGZbJWldYWx0WyVpXTogZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3M9MHglMDJYXG4iLCBcCisJYkludGVyZmFjZU51bWJlciwgaSwgcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvci0+YkludGVyZmFjZVN1YkNsYXNzKTsKKwlKT1QoNCwgImludGZbJWldYWx0WyVpXTogZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2w9MHglMDJYXG4iLCBcCisJYkludGVyZmFjZU51bWJlciwgaSwgcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvci0+YkludGVyZmFjZVByb3RvY29sKTsKKwlKT1QoNCwgImludGZbJWldYWx0WyVpXTogZGVzYy5pSW50ZXJmYWNlPTB4JTAyWFxuIiwgXAorCWJJbnRlcmZhY2VOdW1iZXIsIGksIHB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3ItPmlJbnRlcmZhY2UpOworCisJSVNPQ3dNYXhQYWNrZXRTaXplID0gLTE7CisJQlVMS3dNYXhQYWNrZXRTaXplID0gLTE7CisJSU5Ud01heFBhY2tldFNpemUgPSAtMTsKKwlDVFJMd01heFBhY2tldFNpemUgPSAtMTsKKwlJU09DYkVuZHBvaW50QWRkcmVzcyA9IDA7CisJSU5UYkVuZHBvaW50QWRkcmVzcyA9IDA7CisKKwlpZiAoMCA9PSBwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yLT5iTnVtRW5kcG9pbnRzKQorCQkJCUpPVCg0LCAiaW50ZlslaV1hbHRbJWldIGhhcyBubyBlbmRwb2ludHNcbiIsIFwKKwkJCQkJCQliSW50ZXJmYWNlTnVtYmVyLCBpKTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlmb3IgKGogPSAwOyBqIDwgcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvci0+Yk51bUVuZHBvaW50czsgaisrKSB7CisJCXBlcGQgPSAmKHB1c2JfaG9zdF9pbnRlcmZhY2UtPmVuZHBvaW50W2pdLmRlc2MpOworCQlpZiAoKHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqKU5VTEwgPT0gcGVwZCkgeworCQkJU0FZKCJFUlJPUjogIHBlcGQgaXMgTlVMTC5cbiIpOworCQkJU0FZKCIuLi4uLi4gc2tpcHBpbmdcbiIpOworCQkJY29udGludWU7CisJCX0KKwkJd01heFBhY2tldFNpemUgPSBsZTE2X3RvX2NwdShwZXBkLT53TWF4UGFja2V0U2l6ZSk7CisJCWJFbmRwb2ludEFkZHJlc3MgPSBwZXBkLT5iRW5kcG9pbnRBZGRyZXNzOworCisJCUpPVCg0LCAiaW50ZlslaV1hbHRbJWldZW5kWyVpXTogYkVuZHBvaW50QWRkcmVzcz0weCVYXG4iLCBcCisJCQkJYkludGVyZmFjZU51bWJlciwgaSwgaiwgXAorCQkJCXBlcGQtPmJFbmRwb2ludEFkZHJlc3MpOworCQlKT1QoNCwgImludGZbJWldYWx0WyVpXWVuZFslaV06IGJtQXR0cmlidXRlcz0weCVYXG4iLCBcCisJCQkJYkludGVyZmFjZU51bWJlciwgaSwgaiwgXAorCQkJCXBlcGQtPmJtQXR0cmlidXRlcyk7CisJCUpPVCg0LCAiaW50ZlslaV1hbHRbJWldZW5kWyVpXTogd01heFBhY2tldFNpemU9JWlcbiIsIFwKKwkJCQliSW50ZXJmYWNlTnVtYmVyLCBpLCBqLCBcCisJCQkJcGVwZC0+d01heFBhY2tldFNpemUpOworCQlKT1QoNCwgImludGZbJWldYWx0WyVpXWVuZFslaV06IGJJbnRlcnZhbD0laVxuIiwKKwkJCQliSW50ZXJmYWNlTnVtYmVyLCBpLCBqLCBcCisJCQkJcGVwZC0+YkludGVydmFsKTsKKworCQlpZiAocGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pIHsKKwkJCUpPVCg0LCAiaW50ZlslaV1hbHRbJWldZW5kWyVpXSBpcyBhbiAgSU4gIGVuZHBvaW50XG4iLFwKKwkJCQkJCWJJbnRlcmZhY2VOdW1iZXIsIGksIGopOworCQkJaXNpbiA9IDE7CisJCX0gZWxzZSB7CisJCQlKT1QoNCwgImludGZbJWldYWx0WyVpXWVuZFslaV0gaXMgYW4gIE9VVCBlbmRwb2ludFxuIixcCisJCQkJCQliSW50ZXJmYWNlTnVtYmVyLCBpLCBqKTsKKwkJCVNBWSgiRVJST1I6IE9VVCBlbmRwb2ludCB1bmV4cGVjdGVkXG4iKTsKKwkJCVNBWSgiLi4uLi4uIGNvbnRpbnVpbmdcbiIpOworCQkJaXNpbiA9IDA7CisJCX0KKwkJaWYgKChwZXBkLT5ibUF0dHJpYnV0ZXMgJiBcCisJCQkJVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09IFwKKwkJCQlVU0JfRU5EUE9JTlRfWEZFUl9JU09DKSB7CisJCQlKT1QoNCwgImludGZbJWldYWx0WyVpXWVuZFslaV0gaXMgYW4gSVNPQyBlbmRwb2ludFxuIixcCisJCQkJCQliSW50ZXJmYWNlTnVtYmVyLCBpLCBqKTsKKwkJCWlmIChpc2luKSB7CisJCQkJc3dpdGNoIChiSW50ZXJmYWNlQ2xhc3MpIHsKKwkJCQljYXNlIFVTQl9DTEFTU19WSURFTzoKKwkJCQljYXNlIFVTQl9DTEFTU19WRU5ET1JfU1BFQzogeworCQkJCQlpZiAoIXBlYXN5Y2FwKSB7CisJCQkJCQlTQVkoIk1JU1RBS0U6ICIgXAorCQkJCQkJCSJwZWFzeWNhcCBpcyBOVUxMXG4iKTsKKwkJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCQl9CisJCQkJCWlmIChwZXBkLT53TWF4UGFja2V0U2l6ZSkgeworCQkJCQkJaWYgKDggPiBpc29rYWx0KSB7CisJCQkJCQkJb2thbHRbaXNva2FsdF0gPSBpOworCQkJCQkJCUpPVCg0LFwKKwkJCQkJCQkiJWk9b2thbHRbJWldXG4iLCBcCisJCQkJCQkJb2thbHRbaXNva2FsdF0sIFwKKwkJCQkJCQlpc29rYWx0KTsKKwkJCQkJCQlpc29rYWx0Kys7CisJCQkJCQl9CisJCQkJCQlpZiAoOCA+IGlzb2tlcG4pIHsKKwkJCQkJCQlva2Vwbltpc29rZXBuXSA9IFwKKwkJCQkJCQlwZXBkLT5cCisJCQkJCQkJYkVuZHBvaW50QWRkcmVzcyAmIFwKKwkJCQkJCQkweDBGOworCQkJCQkJCUpPVCg0LFwKKwkJCQkJCQkiJWk9b2tlcG5bJWldXG4iLCBcCisJCQkJCQkJb2tlcG5baXNva2Vwbl0sIFwKKwkJCQkJCQlpc29rZXBuKTsKKwkJCQkJCQlpc29rZXBuKys7CisJCQkJCQl9CisJCQkJCQlpZiAoOCA+IGlzb2ttcHMpIHsKKwkJCQkJCQlva21wc1tpc29rbXBzXSA9IFwKKwkJCQkJCQlsZTE2X3RvX2NwdShwZXBkLT5cCisJCQkJCQkJd01heFBhY2tldFNpemUpOworCQkJCQkJCUpPVCg0LFwKKwkJCQkJCQkiJWk9b2ttcHNbJWldXG4iLCBcCisJCQkJCQkJb2ttcHNbaXNva21wc10sIFwKKwkJCQkJCQlpc29rbXBzKTsKKwkJCQkJCQlpc29rbXBzKys7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCQkJCQlpZiAoLTEgPT0gcGVhc3ljYXAtPlwKKwkJCQkJCQl2aWRlb19hbHRzZXR0aW5nX29mZikgeworCQkJCQkJCXBlYXN5Y2FwLT5cCisJCQkJCQkJdmlkZW9fYWx0c2V0dGluZ19vZmYgPVwKKwkJCQkJCQkJCSBpOworCQkJCQkJCUpPVCg0LCAiJWk9dmlkZW9fIiBcCisJCQkJCQkJImFsdHNldHRpbmdfb2ZmICIgXAorCQkJCQkJCQkiPD09PT1cbiIsIFwKKwkJCQkJCQlwZWFzeWNhcC0+XAorCQkJCQkJCXZpZGVvX2FsdHNldHRpbmdfb2ZmKTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJU0FZKCJFUlJPUjogcGVhc3ljYXAiIFwKKwkJCQkJCQkiLT52aWRlb19hbHRzZXR0aW5nXyIgXAorCQkJCQkJCSJvZmYgYWxyZWFkeSBzZXRcbiIpOworCQkJCQkJCVNBWSgiLi4uLi4uICIgXAorCQkJCQkJCSJjb250aW51aW5nIHdpdGggIiBcCisJCQkJCQkJIiVpPXBlYXN5Y2FwLT52aWRlb18iIFwKKwkJCQkJCQkiYWx0c2V0dGluZ19vZmZcbiIsIFwKKwkJCQkJCQlwZWFzeWNhcC0+XAorCQkJCQkJCXZpZGVvX2FsdHNldHRpbmdfb2ZmKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9CisJCQkJY2FzZSBVU0JfQ0xBU1NfQVVESU86IHsKKwkJCQkJaWYgKDB4MDIgIT0gYkludGVyZmFjZVN1YkNsYXNzKQorCQkJCQkJYnJlYWs7CisJCQkJCWlmICghcGVhc3ljYXApIHsKKwkJCQkJCVNBWSgiTUlTVEFLRTogIiBcCisJCQkJCQkicGVhc3ljYXAgaXMgTlVMTFxuIik7CisJCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQkJfQorCQkJCQlpZiAocGVwZC0+d01heFBhY2tldFNpemUpIHsKKwkJCQkJCWlmICg4ID4gaXNva2FsdCkgeworCQkJCQkJCW9rYWx0W2lzb2thbHRdID0gaSA7CisJCQkJCQkJSk9UKDQsXAorCQkJCQkJCSIlaT1va2FsdFslaV1cbiIsIFwKKwkJCQkJCQlva2FsdFtpc29rYWx0XSwgXAorCQkJCQkJCWlzb2thbHQpOworCQkJCQkJCWlzb2thbHQrKzsKKwkJCQkJCX0KKwkJCQkJCWlmICg4ID4gaXNva2VwbikgeworCQkJCQkJCW9rZXBuW2lzb2tlcG5dID0gXAorCQkJCQkJCXBlcGQtPlwKKwkJCQkJCQliRW5kcG9pbnRBZGRyZXNzICYgXAorCQkJCQkJCTB4MEY7CisJCQkJCQkJSk9UKDQsXAorCQkJCQkJCSIlaT1va2VwblslaV1cbiIsIFwKKwkJCQkJCQlva2Vwbltpc29rZXBuXSwgXAorCQkJCQkJCWlzb2tlcG4pOworCQkJCQkJCWlzb2tlcG4rKzsKKwkJCQkJCX0KKwkJCQkJCWlmICg4ID4gaXNva21wcykgeworCQkJCQkJCW9rbXBzW2lzb2ttcHNdID0gXAorCQkJCQkJCWxlMTZfdG9fY3B1KHBlcGQtPlwKKwkJCQkJCQl3TWF4UGFja2V0U2l6ZSk7CisJCQkJCQkJSk9UKDQsXAorCQkJCQkJCSIlaT1va21wc1slaV1cbiIsXAorCQkJCQkJCW9rbXBzW2lzb2ttcHNdLCBcCisJCQkJCQkJaXNva21wcyk7CisJCQkJCQkJaXNva21wcysrOworCQkJCQkJfQorCQkJCQl9IGVsc2UgeworCQkJCQkJaWYgKC0xID09IHBlYXN5Y2FwLT5cCisJCQkJCQkJYXVkaW9fYWx0c2V0dGluZ19vZmYpIHsKKwkJCQkJCQlwZWFzeWNhcC0+XAorCQkJCQkJCWF1ZGlvX2FsdHNldHRpbmdfb2ZmID1cCisJCQkJCQkJCQkgaTsKKwkJCQkJCQlKT1QoNCwgIiVpPWF1ZGlvXyIgXAorCQkJCQkJCSJhbHRzZXR0aW5nX29mZiAiIFwKKwkJCQkJCQkiPD09PT1cbiIsIFwKKwkJCQkJCQlwZWFzeWNhcC0+XAorCQkJCQkJCWF1ZGlvX2FsdHNldHRpbmdfb2ZmKTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJU0FZKCJFUlJPUjogcGVhc3ljYXAiIFwKKwkJCQkJCQkiLT5hdWRpb19hbHRzZXR0aW5nXyIgXAorCQkJCQkJCSJvZmYgYWxyZWFkeSBzZXRcbiIpOworCQkJCQkJCVNBWSgiLi4uLi4uICIgXAorCQkJCQkJCSJjb250aW51aW5nIHdpdGggIiBcCisJCQkJCQkJIiVpPXBlYXN5Y2FwLT5cCisJCQkJCQkJYXVkaW9fYWx0c2V0dGluZ18iIFwKKwkJCQkJCQkib2ZmXG4iLAorCQkJCQkJCXBlYXN5Y2FwLT5cCisJCQkJCQkJYXVkaW9fYWx0c2V0dGluZ19vZmYpOworCQkJCQkJfQorCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJfQorCQkJCWRlZmF1bHQ6CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmICgocGVwZC0+Ym1BdHRyaWJ1dGVzICYgXAorCQkJCQkJVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09XAorCQkJCQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSykgeworCQkJSk9UKDQsICJpbnRmWyVpXWFsdFslaV1lbmRbJWldIGlzIGEgIEJVTEsgZW5kcG9pbnRcbiIsXAorCQkJCQkJYkludGVyZmFjZU51bWJlciwgaSwgaik7CisJCX0gZWxzZSBpZiAoKHBlcGQtPmJtQXR0cmlidXRlcyAmIFwKKwkJCQkJCVVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PVwKKwkJCQkJCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCkgeworCQkJSk9UKDQsICJpbnRmWyVpXWFsdFslaV1lbmRbJWldIGlzIGFuICBJTlQgZW5kcG9pbnRcbiIsXAorCQkJCQkJYkludGVyZmFjZU51bWJlciwgaSwgaik7CisJCX0gZWxzZSB7CisJCQlKT1QoNCwgImludGZbJWldYWx0WyVpXWVuZFslaV0gaXMgYSAgQ1RSTCBlbmRwb2ludFxuIixcCisJCQkJCQliSW50ZXJmYWNlTnVtYmVyLCBpLCBqKTsKKwkJfQorCQlpZiAoMCA9PSBwZXBkLT53TWF4UGFja2V0U2l6ZSkgeworCQkJSk9UKDQsICJpbnRmWyVpXWFsdFslaV1lbmRbJWldICIgXAorCQkJCQkJImhhcyB6ZXJvIHBhY2tldCBzaXplXG4iLCBcCisJCQkJCQliSW50ZXJmYWNlTnVtYmVyLCBpLCBqKTsKKwkJfQorCX0KK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgUEVSRk9STSBJTklUSUFMSVpBVElPTiBPRiBUSEUgUFJPQkVEIElOVEVSRkFDRQorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitKT1QoNCwgImluaXRpYWxpemF0aW9uIGJlZ2lucyBmb3IgaW50ZXJmYWNlICVpXG4iLCBcCisJCQkJcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvci0+YkludGVyZmFjZU51bWJlcik7Citzd2l0Y2ggKGJJbnRlcmZhY2VOdW1iZXIpIHsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgSU5URVJGQUNFIDAgSVMgVEhFIFZJREVPIElOVEVSRkFDRQorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitjYXNlIDA6IHsKKwlpZiAoIXBlYXN5Y2FwKSB7CisJCVNBWSgiTUlTVEFLRTogcGVhc3ljYXAgaXMgTlVMTFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAoIWlzb2thbHQpIHsKKwkJU0FZKCJFUlJPUjogIG5vIHZpYWJsZSB2aWRlb19hbHRzZXR0aW5nX29uXG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfSBlbHNlIHsKKwkJcGVhc3ljYXAtPnZpZGVvX2FsdHNldHRpbmdfb24gPSBva2FsdFtpc29rYWx0IC0gMV07CisJCUpPVCg0LCAiJWk9dmlkZW9fYWx0c2V0dGluZ19vbiA8PT09PVxuIiwgXAorCQkJCQlwZWFzeWNhcC0+dmlkZW9fYWx0c2V0dGluZ19vbik7CisJfQorCWlmICghaXNva2VwbikgeworCQlTQVkoIkVSUk9SOiAgbm8gdmlhYmxlIHZpZGVvX2VuZHBvaW50bnVtYmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfSBlbHNlIHsKKwkJcGVhc3ljYXAtPnZpZGVvX2VuZHBvaW50bnVtYmVyID0gb2tlcG5baXNva2VwbiAtIDFdOworCQlKT1QoNCwgIiVpPXZpZGVvX2VuZHBvaW50bnVtYmVyXG4iLCBcCisJCQkJCXBlYXN5Y2FwLT52aWRlb19lbmRwb2ludG51bWJlcik7CisJCX0KKwlpZiAoIWlzb2ttcHMpIHsKKwkJU0FZKCJFUlJPUjogIG5vIHZpYWJsZSB2aWRlb19tYXhwYWNrZXRzaXplXG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIERFQ0lERSBUSEUgVklERU8gU1RSRUFNSU5HIFBBUkFNRVRFUlMKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCX0gZWxzZSB7CisJCW1heHBhY2tldHNpemUgPSBva21wc1tpc29rbXBzIC0gMV0gLSAxMDI0OworCQlpZiAoVVNCXzJfMF9NQVhQQUNLRVRTSVpFID4gbWF4cGFja2V0c2l6ZSkgeworCQkJcGVhc3ljYXAtPnZpZGVvX2lzb2NfbWF4ZnJhbWVzaXplID0gbWF4cGFja2V0c2l6ZTsKKwkJfSBlbHNlIHsKKwkJCXBlYXN5Y2FwLT52aWRlb19pc29jX21heGZyYW1lc2l6ZSA9IFwKKwkJCQkJCQlVU0JfMl8wX01BWFBBQ0tFVFNJWkU7CisJCX0KKwkJSk9UKDQsICIlaT12aWRlb19pc29jX21heGZyYW1lc2l6ZVxuIiwgXAorCQkJCQlwZWFzeWNhcC0+dmlkZW9faXNvY19tYXhmcmFtZXNpemUpOworCQlpZiAoMCA+PSBwZWFzeWNhcC0+dmlkZW9faXNvY19tYXhmcmFtZXNpemUpIHsKKwkJCVNBWSgiRVJST1I6ICBiYWQgdmlkZW9faXNvY19tYXhmcmFtZXNpemVcbiIpOworCQkJcmV0dXJuIC1FTk9FTlQ7CisJCX0KKwkJcGVhc3ljYXAtPnZpZGVvX2lzb2NfZnJhbWVzcGVyZGVzYyA9IFZJREVPX0lTT0NfRlJBTUVTUEVSREVTQzsKKwkJSk9UKDQsICIlaT12aWRlb19pc29jX2ZyYW1lc3BlcmRlc2NcbiIsIFwKKwkJCQkJcGVhc3ljYXAtPnZpZGVvX2lzb2NfZnJhbWVzcGVyZGVzYyk7CisJCWlmICgwID49IHBlYXN5Y2FwLT52aWRlb19pc29jX2ZyYW1lc3BlcmRlc2MpIHsKKwkJCVNBWSgiRVJST1I6ICBiYWQgdmlkZW9faXNvY19mcmFtZXNwZXJkZXNjXG4iKTsKKwkJCXJldHVybiAtRU5PRU5UOworCQl9CisJCXBlYXN5Y2FwLT52aWRlb19pc29jX2J1ZmZlcl9zaXplID0gXAorCQkJCQlwZWFzeWNhcC0+dmlkZW9faXNvY19tYXhmcmFtZXNpemUgKiBcCisJCQkJCXBlYXN5Y2FwLT52aWRlb19pc29jX2ZyYW1lc3BlcmRlc2M7CisJCUpPVCg0LCAiJWk9dmlkZW9faXNvY19idWZmZXJfc2l6ZVxuIiwgXAorCQkJCQlwZWFzeWNhcC0+dmlkZW9faXNvY19idWZmZXJfc2l6ZSk7CisJCWlmICgoUEFHRV9TSVpFIDw8IFZJREVPX0lTT0NfT1JERVIpIDwgXAorCQkJCQlwZWFzeWNhcC0+dmlkZW9faXNvY19idWZmZXJfc2l6ZSkgeworCQkJU0FZKCJNSVNUQUtFOiAiIFwKKwkJCQkicGVhc3ljYXAtPnZpZGVvX2lzb2NfYnVmZmVyX3NpemUgdG9vIGJpZ1xuIik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCX0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlpZiAoLTEgPT0gcGVhc3ljYXAtPnZpZGVvX2ludGVyZmFjZSkgeworCQlTQVkoIk1JU1RBS0U6ICB2aWRlb19pbnRlcmZhY2UgaXMgdW5zZXRcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKC0xID09IHBlYXN5Y2FwLT52aWRlb19hbHRzZXR0aW5nX29uKSB7CisJCVNBWSgiTUlTVEFLRTogIHZpZGVvX2FsdHNldHRpbmdfb24gaXMgdW5zZXRcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKC0xID09IHBlYXN5Y2FwLT52aWRlb19hbHRzZXR0aW5nX29mZikgeworCQlTQVkoIk1JU1RBS0U6ICB2aWRlb19pbnRlcmZhY2Vfb2ZmIGlzIHVuc2V0XG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWlmICgtMSA9PSBwZWFzeWNhcC0+dmlkZW9fZW5kcG9pbnRudW1iZXIpIHsKKwkJU0FZKCJNSVNUQUtFOiAgdmlkZW9fZW5kcG9pbnRudW1iZXIgaXMgdW5zZXRcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKC0xID09IHBlYXN5Y2FwLT52aWRlb19pc29jX21heGZyYW1lc2l6ZSkgeworCQlTQVkoIk1JU1RBS0U6ICB2aWRlb19pc29jX21heGZyYW1lc2l6ZSBpcyB1bnNldFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAoLTEgPT0gcGVhc3ljYXAtPnZpZGVvX2lzb2NfYnVmZmVyX3NpemUpIHsKKwkJU0FZKCJNSVNUQUtFOiAgdmlkZW9faXNvY19idWZmZXJfc2l6ZSBpcyB1bnNldFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgQUxMT0NBVEUgTUVNT1JZIEZPUiBWSURFTyBCVUZGRVJTLiAgTElTVFMgTVVTVCBCRSBJTklUSUFMSVpFRCBGSVJTVC4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCUlOSVRfTElTVF9IRUFEKCYocGVhc3ljYXAtPnVyYl92aWRlb19oZWFkKSk7CisJcGVhc3ljYXAtPnB1cmJfdmlkZW9faGVhZCA9ICYocGVhc3ljYXAtPnVyYl92aWRlb19oZWFkKTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlKT1QoNCwgImFsbG9jYXRpbmcgJWkgZnJhbWUgYnVmZmVycyBvZiBzaXplICVsaVxuIiwgIFwKKwkJCUZSQU1FX0JVRkZFUl9NQU5ZLCAobG9uZyBpbnQpRlJBTUVfQlVGRkVSX1NJWkUpOworCUpPVCg0LCAiLi4uLiBlYWNoIHNjYXR0ZXJlZCBvdmVyICVsaSBwYWdlc1xuIiwgXAorCQkJCQkJRlJBTUVfQlVGRkVSX1NJWkUvUEFHRV9TSVpFKTsKKworCWZvciAoayA9IDA7ICBrIDwgRlJBTUVfQlVGRkVSX01BTlk7ICBrKyspIHsKKwkJZm9yIChtID0gMDsgIG0gPCBGUkFNRV9CVUZGRVJfU0laRS9QQUdFX1NJWkU7ICBtKyspIHsKKwkJCWlmICgodm9pZCAqKU5VTEwgIT0gcGVhc3ljYXAtPmZyYW1lX2J1ZmZlcltrXVttXS5wZ28pCisJCQkJU0FZKCJhdHRlbXB0aW5nIHRvIHJlYWxsb2NhdGUgZnJhbWUgIiBcCisJCQkJCQkJCSIgYnVmZmVyc1xuIik7CisJCQllbHNlIHsKKwkJCQlwYnVmID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCQkJaWYgKCh2b2lkICopTlVMTCA9PSBwYnVmKSB7CisJCQkJCVNBWSgiRVJST1I6IENvdWxkIG5vdCBhbGxvY2F0ZSBmcmFtZSAiXAorCQkJCQkJImJ1ZmZlciAlaSBwYWdlICVpXG4iLCBrLCBtKTsKKwkJCQkJcmV0dXJuIC1FTk9NRU07CisJCQkJfSBlbHNlCisJCQkJCXBlYXN5Y2FwLT5hbGxvY2F0aW9uX3ZpZGVvX3BhZ2UgKz0gMTsKKwkJCQlwZWFzeWNhcC0+ZnJhbWVfYnVmZmVyW2tdW21dLnBnbyA9IHBidWY7CisJCQl9CisJCQlwZWFzeWNhcC0+ZnJhbWVfYnVmZmVyW2tdW21dLnB0byA9IFwKKwkJCQkJcGVhc3ljYXAtPmZyYW1lX2J1ZmZlcltrXVttXS5wZ287CisJCX0KKwl9CisKKwlwZWFzeWNhcC0+ZnJhbWVfZmlsbCA9IDA7CisJcGVhc3ljYXAtPmZyYW1lX3JlYWQgPSAwOworCUpPVCg0LCAiYWxsb2NhdGlvbiBvZiBmcmFtZSBidWZmZXJzIGRvbmU6ICAlaSBwYWdlc1xuIiwgayAqIFwKKwkJCQkJCQkJbSk7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJSk9UKDQsICJhbGxvY2F0aW5nICVpIGZpZWxkIGJ1ZmZlcnMgb2Ygc2l6ZSAlbGlcbiIsICBcCisJCQlGSUVMRF9CVUZGRVJfTUFOWSwgKGxvbmcgaW50KUZJRUxEX0JVRkZFUl9TSVpFKTsKKwlKT1QoNCwgIi4uLi4gZWFjaCBzY2F0dGVyZWQgb3ZlciAlbGkgcGFnZXNcbiIsIFwKKwkJCQkJRklFTERfQlVGRkVSX1NJWkUvUEFHRV9TSVpFKTsKKworCWZvciAoayA9IDA7ICBrIDwgRklFTERfQlVGRkVSX01BTlk7ICBrKyspIHsKKwkJZm9yIChtID0gMDsgIG0gPCBGSUVMRF9CVUZGRVJfU0laRS9QQUdFX1NJWkU7ICBtKyspIHsKKwkJCWlmICgodm9pZCAqKU5VTEwgIT0gcGVhc3ljYXAtPmZpZWxkX2J1ZmZlcltrXVttXS5wZ28pIHsKKwkJCQlTQVkoIkVSUk9SOiBhdHRlbXB0aW5nIHRvIHJlYWxsb2NhdGUgIiBcCisJCQkJCQkJImZpZWxkIGJ1ZmZlcnNcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlwYnVmID0gKHZvaWQgKikgX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCQkJCWlmICgodm9pZCAqKU5VTEwgPT0gcGJ1ZikgeworCQkJCQlTQVkoIkVSUk9SOiBDb3VsZCBub3QgYWxsb2NhdGUgZmllbGQiIFwKKwkJCQkJCSIgYnVmZmVyICVpIHBhZ2UgJWlcbiIsIGssIG0pOworCQkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCQkJfQorCQkJCWVsc2UKKwkJCQkJcGVhc3ljYXAtPmFsbG9jYXRpb25fdmlkZW9fcGFnZSArPSAxOworCQkJCXBlYXN5Y2FwLT5maWVsZF9idWZmZXJba11bbV0ucGdvID0gcGJ1ZjsKKwkJCQl9CisJCQlwZWFzeWNhcC0+ZmllbGRfYnVmZmVyW2tdW21dLnB0byA9IFwKKwkJCQkJcGVhc3ljYXAtPmZpZWxkX2J1ZmZlcltrXVttXS5wZ287CisJCX0KKwkJcGVhc3ljYXAtPmZpZWxkX2J1ZmZlcltrXVswXS5rb3VudCA9IDB4MDIwMDsKKwl9CisJcGVhc3ljYXAtPmZpZWxkX2ZpbGwgPSAwOworCXBlYXN5Y2FwLT5maWVsZF9wYWdlID0gMDsKKwlwZWFzeWNhcC0+ZmllbGRfcmVhZCA9IDA7CisJSk9UKDQsICJhbGxvY2F0aW9uIG9mIGZpZWxkIGJ1ZmZlcnMgZG9uZTogICVpIHBhZ2VzXG4iLCBrICogXAorCQkJCQkJCQltKTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlKT1QoNCwgImFsbG9jYXRpbmcgJWkgaXNvYyB2aWRlbyBidWZmZXJzIG9mIHNpemUgJWlcbiIsICBcCisJCQkJCVZJREVPX0lTT0NfQlVGRkVSX01BTlksIFwKKwkJCQkJcGVhc3ljYXAtPnZpZGVvX2lzb2NfYnVmZmVyX3NpemUpOworCUpPVCg0LCAiLi4uLiBlYWNoIG9jY3VweWluZyBjb250aWd1b3VzIG1lbW9yeSBwYWdlc1xuIik7CisKKwlmb3IgKGsgPSAwOyAgayA8IFZJREVPX0lTT0NfQlVGRkVSX01BTlk7IGsrKykgeworCQlwYnVmID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIFZJREVPX0lTT0NfT1JERVIpOworCQlpZiAoTlVMTCA9PSBwYnVmKSB7CisJCQlTQVkoIkVSUk9SOiBDb3VsZCBub3QgYWxsb2NhdGUgaXNvYyB2aWRlbyBidWZmZXIgIiBcCisJCQkJCQkJCSIlaVxuIiwgayk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfSBlbHNlCisJCQlwZWFzeWNhcC0+YWxsb2NhdGlvbl92aWRlb19wYWdlICs9IFwKKwkJCQkoKHVuc2lnbmVkIGludCkoMHgwMSA8PCBWSURFT19JU09DX09SREVSKSk7CisKKwkJcGVhc3ljYXAtPnZpZGVvX2lzb2NfYnVmZmVyW2tdLnBnbyA9IHBidWY7CisJCXBlYXN5Y2FwLT52aWRlb19pc29jX2J1ZmZlcltrXS5wdG8gPSBwYnVmICsgXAorCQkJCQlwZWFzeWNhcC0+dmlkZW9faXNvY19idWZmZXJfc2l6ZTsKKwkJcGVhc3ljYXAtPnZpZGVvX2lzb2NfYnVmZmVyW2tdLmtvdW50ID0gazsKKwl9CisJSk9UKDQsICJhbGxvY2F0aW9uIG9mIGlzb2MgdmlkZW8gYnVmZmVycyBkb25lOiAlaSBwYWdlc1xuIiwgXAorCQkJCQlrICogKDB4MDEgPDwgVklERU9fSVNPQ19PUkRFUikpOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBBTExPQ0FURSBBTkQgSU5JVElBTElaRSBNVUxUSVBMRSBzdHJ1Y3QgdXJiIC4uLgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJSk9UKDQsICJhbGxvY2F0aW5nICVpIHN0cnVjdCB1cmIuXG4iLCBWSURFT19JU09DX0JVRkZFUl9NQU5ZKTsKKwlKT1QoNCwgInVzaW5nICVpPXBlYXN5Y2FwLT52aWRlb19pc29jX2ZyYW1lc3BlcmRlc2NcbiIsIFwKKwkJCQkJcGVhc3ljYXAtPnZpZGVvX2lzb2NfZnJhbWVzcGVyZGVzYyk7CisJSk9UKDQsICJ1c2luZyAlaT1wZWFzeWNhcC0+dmlkZW9faXNvY19tYXhmcmFtZXNpemVcbiIsIFwKKwkJCQkJcGVhc3ljYXAtPnZpZGVvX2lzb2NfbWF4ZnJhbWVzaXplKTsKKwlKT1QoNCwgInVzaW5nICVpPXBlYXN5Y2FwLT52aWRlb19pc29jX2J1ZmZlcl9zaXplbiIsIFwKKwkJCQkJcGVhc3ljYXAtPnZpZGVvX2lzb2NfYnVmZmVyX3NpemUpOworCisJZm9yIChrID0gMDsgIGsgPCBWSURFT19JU09DX0JVRkZFUl9NQU5ZOyBrKyspIHsKKwkJcHVyYiA9IHVzYl9hbGxvY191cmIocGVhc3ljYXAtPnZpZGVvX2lzb2NfZnJhbWVzcGVyZGVzYywgXAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKE5VTEwgPT0gcHVyYikgeworCQkJU0FZKCJFUlJPUjogdXNiX2FsbG9jX3VyYiByZXR1cm5lZCBOVUxMIGZvciBidWZmZXIgIiBcCisJCQkJCQkJCSIlaVxuIiwgayk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfSBlbHNlCisJCQlwZWFzeWNhcC0+YWxsb2NhdGlvbl92aWRlb191cmIgKz0gMTsKKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KKwkJcGRhdGFfdXJiID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRhdGFfdXJiKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChOVUxMID09IHBkYXRhX3VyYikgeworCQkJU0FZKCJFUlJPUjogQ291bGQgbm90IGFsbG9jYXRlIHN0cnVjdCBkYXRhX3VyYi5cbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0gZWxzZQorCQkJcGVhc3ljYXAtPmFsbG9jYXRpb25fdmlkZW9fc3RydWN0ICs9IFwKKwkJCQkJCXNpemVvZihzdHJ1Y3QgZGF0YV91cmIpOworCisJCXBkYXRhX3VyYi0+cHVyYiA9IHB1cmI7CisJCXBkYXRhX3VyYi0+aXNidWYgPSBrOworCQlwZGF0YV91cmItPmxlbmd0aCA9IDA7CisJCWxpc3RfYWRkX3RhaWwoJihwZGF0YV91cmItPmxpc3RfaGVhZCksIFwKKwkJCQkJCXBlYXN5Y2FwLT5wdXJiX3ZpZGVvX2hlYWQpOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICAuLi4gQU5EIElOSVRJQUxJWkUgVEhFTQorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJCWlmICghaykgeworCQkJSk9UKDQsICJpbml0aWFsaXppbmcgdmlkZW8gdXJicyB0aHVzOlxuIik7CisJCQlKT1QoNCwgIiAgcHVyYi0+aW50ZXJ2YWwgPSAxO1xuIik7CisJCQlKT1QoNCwgIiAgcHVyYi0+ZGV2ID0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlO1xuIik7CisJCQlKT1QoNCwgIiAgcHVyYi0+cGlwZSA9IHVzYl9yY3Zpc29jcGlwZSIgXAorCQkJCQkiKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwlaSk7XG4iLCBcCisJCQkJCXBlYXN5Y2FwLT52aWRlb19lbmRwb2ludG51bWJlcik7CisJCQlKT1QoNCwgIiAgcHVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7XG4iKTsKKwkJCUpPVCg0LCAiICBwdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBwZWFzeWNhcC0+IiBcCisJCQkJCSJ2aWRlb19pc29jX2J1ZmZlclsuXS5wZ287XG4iKTsKKwkJCUpPVCg0LCAiICBwdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gJWk7XG4iLCBcCisJCQkJCXBlYXN5Y2FwLT52aWRlb19pc29jX2J1ZmZlcl9zaXplKTsKKwkJCUpPVCg0LCAiICBwdXJiLT5jb21wbGV0ZSA9IGVhc3ljYXBfY29tcGxldGU7XG4iKTsKKwkJCUpPVCg0LCAiICBwdXJiLT5jb250ZXh0ID0gcGVhc3ljYXA7XG4iKTsKKwkJCUpPVCg0LCAiICBwdXJiLT5zdGFydF9mcmFtZSA9IDA7XG4iKTsKKwkJCUpPVCg0LCAiICBwdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9ICVpO1xuIiwgXAorCQkJCQlwZWFzeWNhcC0+dmlkZW9faXNvY19mcmFtZXNwZXJkZXNjKTsKKwkJCUpPVCg0LCAiICBmb3IgKGogPSAwOyBqIDwgJWk7IGorKylcbiIsIFwKKwkJCQkJcGVhc3ljYXAtPnZpZGVvX2lzb2NfZnJhbWVzcGVyZGVzYyk7CisJCQlKT1QoNCwgIiAgICB7XG4iKTsKKwkJCUpPVCg0LCAiICAgIHB1cmItPmlzb19mcmFtZV9kZXNjW2pdLm9mZnNldCA9IGoqJWk7XG4iLFwKKwkJCQkJcGVhc3ljYXAtPnZpZGVvX2lzb2NfbWF4ZnJhbWVzaXplKTsKKwkJCUpPVCg0LCAiICAgIHB1cmItPmlzb19mcmFtZV9kZXNjW2pdLmxlbmd0aCA9ICVpO1xuIiwgXAorCQkJCQlwZWFzeWNhcC0+dmlkZW9faXNvY19tYXhmcmFtZXNpemUpOworCQkJSk9UKDQsICIgICAgfVxuIik7CisJCX0KKworCQlwdXJiLT5pbnRlcnZhbCA9IDE7CisJCXB1cmItPmRldiA9IHBlYXN5Y2FwLT5wdXNiX2RldmljZTsKKwkJcHVyYi0+cGlwZSA9IHVzYl9yY3Zpc29jcGlwZShwZWFzeWNhcC0+cHVzYl9kZXZpY2UsIFwKKwkJCQkJcGVhc3ljYXAtPnZpZGVvX2VuZHBvaW50bnVtYmVyKTsKKwkJcHVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCXB1cmItPnRyYW5zZmVyX2J1ZmZlciA9IHBlYXN5Y2FwLT52aWRlb19pc29jX2J1ZmZlcltrXS5wZ287CisJCXB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBcCisJCQkJCXBlYXN5Y2FwLT52aWRlb19pc29jX2J1ZmZlcl9zaXplOworCQlwdXJiLT5jb21wbGV0ZSA9IGVhc3ljYXBfY29tcGxldGU7CisJCXB1cmItPmNvbnRleHQgPSBwZWFzeWNhcDsKKwkJcHVyYi0+c3RhcnRfZnJhbWUgPSAwOworCQlwdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IHBlYXN5Y2FwLT52aWRlb19pc29jX2ZyYW1lc3BlcmRlc2M7CisJCWZvciAoaiA9IDA7ICBqIDwgcGVhc3ljYXAtPnZpZGVvX2lzb2NfZnJhbWVzcGVyZGVzYzsgaisrKSB7CisJCQlwdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5vZmZzZXQgPSBqICogXAorCQkJCQlwZWFzeWNhcC0+dmlkZW9faXNvY19tYXhmcmFtZXNpemU7CisJCQlwdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5sZW5ndGggPSBcCisJCQkJCXBlYXN5Y2FwLT52aWRlb19pc29jX21heGZyYW1lc2l6ZTsKKwkJfQorCX0KKwlKT1QoNCwgImFsbG9jYXRpb24gb2YgJWkgc3RydWN0IHVyYiBkb25lLlxuIiwgayk7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgU0FWRSBQT0lOVEVSIHBlYXN5Y2FwIElOIFRISVMgSU5URVJGQUNFLgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwl1c2Jfc2V0X2ludGZkYXRhKHB1c2JfaW50ZXJmYWNlLCBwZWFzeWNhcCk7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgVEhFIFZJREVPIERFVklDRSBDQU4gQkUgUkVHSVNURVJFRCBOT1csIEFTIElUIElTIFJFQURZLgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZiAoIWRlZmluZWQoRUFTWUNBUF9JU19WSURFT0RFVl9DTElFTlQpKQorCWlmICgwICE9ICh1c2JfcmVnaXN0ZXJfZGV2KHB1c2JfaW50ZXJmYWNlLCAmZWFzeWNhcF9jbGFzcykpKSB7CisJCWVycigiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlIik7CisJCXVzYl9zZXRfaW50ZmRhdGEocHVzYl9pbnRlcmZhY2UsIE5VTEwpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9IGVsc2UKKwkJKHBlYXN5Y2FwLT5yZWdpc3RlcmVkX3ZpZGVvKSsrOworCVNBWSgiZWFzeWNhcCBhdHRhY2hlZCB0byBtaW5vciAjJWRcbiIsIHB1c2JfaW50ZXJmYWNlLT5taW5vcik7CisJYnJlYWs7CisvKnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2Ki8KKyNlbHNlCisJcHZpZGVvX2RldmljZSA9IChzdHJ1Y3QgdmlkZW9fZGV2aWNlICopXAorCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHZpZGVvX2RldmljZSksIEdGUF9LRVJORUwpOworCWlmICgoc3RydWN0IHZpZGVvX2RldmljZSAqKU5VTEwgPT0gcHZpZGVvX2RldmljZSkgeworCQlTQVkoIkVSUk9SOiBDb3VsZCBub3QgYWxsb2NhdGUgc3RydWN0dXJlIHZpZGVvX2RldmljZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlpZiAoVklERU9fREVWSUNFX01BTlkgPD0gdmlkZW9fZGV2aWNlX21hbnkpIHsKKwkJU0FZKCJFUlJPUjogVG9vIG1hbnkgL2Rldi92aWRlb3NcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcHZpZGVvX2FycmF5W3ZpZGVvX2RldmljZV9tYW55XSA9IHB2aWRlb19kZXZpY2U7ICB2aWRlb19kZXZpY2VfbWFueSsrOworCisJc3RyY3B5KCZwdmlkZW9fZGV2aWNlLT5uYW1lWzBdLCAiZWFzeWNhcGRjNjAiKTsKKyNpZiBkZWZpbmVkKEVBU1lDQVBfTkVFRFNfVjRMMl9GT1BTKQorCXB2aWRlb19kZXZpY2UtPmZvcHMgPSAmdjRsMl9mb3BzOworI2Vsc2UKKwlwdmlkZW9fZGV2aWNlLT5mb3BzID0gJmVhc3ljYXBfZm9wczsKKyNlbmRpZiAvKkVBU1lDQVBfTkVFRFNfVjRMMl9GT1BTKi8KKwlwdmlkZW9fZGV2aWNlLT5taW5vciA9IC0xOworCXB2aWRlb19kZXZpY2UtPnJlbGVhc2UgPSAodm9pZCAqKSgmdmlkZW9kZXZfcmVsZWFzZSk7CisKKwl2aWRlb19zZXRfZHJ2ZGF0YShwdmlkZW9fZGV2aWNlLCAodm9pZCAqKXBlYXN5Y2FwKTsKKworCXJjID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHB2aWRlb19kZXZpY2UsIFZGTF9UWVBFX0dSQUJCRVIsIC0xKTsKKwlpZiAoMCAhPSByYykgeworCQllcnIoIk5vdCBhYmxlIHRvIHJlZ2lzdGVyIHdpdGggdmlkZW9kZXYiKTsKKwkJdmlkZW9kZXZfcmVsZWFzZShwdmlkZW9fZGV2aWNlKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfSBlbHNlIHsKKwkJcGVhc3ljYXAtPnB2aWRlb19kZXZpY2UgPSBwdmlkZW9fZGV2aWNlOworCQkocGVhc3ljYXAtPnJlZ2lzdGVyZWRfdmlkZW8pKys7CisJCUpPVCg0LCAicmVnaXN0ZXJlZCB3aXRoIHZpZGVvZGV2OiAlaT1taW5vclxuIiwgXAorCQkJCQkJCXB2aWRlb19kZXZpY2UtPm1pbm9yKTsKKwl9CisvKl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eKi8KKyNlbmRpZiAvKkVBU1lDQVBfSVNfVklERU9ERVZfQ0xJRU5UKi8KKwlicmVhazsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBJTlRFUkZBQ0UgMSBJUyBUSEUgQVVESU8gQ09OVFJPTCBJTlRFUkZBQ0UKKyAqICBJTlRFUkZBQ0UgMiBJUyBUSEUgQVVESU8gU1RSRUFNSU5HIElOVEVSRkFDRQorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2Nhc2UgMTogeworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFNBVkUgUE9JTlRFUiBwZWFzeWNhcCBJTiBJTlRFUkZBQ0UgMQorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwl1c2Jfc2V0X2ludGZkYXRhKHB1c2JfaW50ZXJmYWNlLCBwZWFzeWNhcCk7CisJSk9UKDQsICJubyBpbml0aWFsaXphdGlvbiByZXF1aXJlZCBmb3IgaW50ZXJmYWNlICVpXG4iLCBcCisJCQkJcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvci0+YkludGVyZmFjZU51bWJlcik7CisJYnJlYWs7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2Nhc2UgMjogeworCWlmICghcGVhc3ljYXApIHsKKwkJU0FZKCJNSVNUQUtFOiBwZWFzeWNhcCBpcyBOVUxMXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWlmICghaXNva2FsdCkgeworCQlTQVkoIkVSUk9SOiAgbm8gdmlhYmxlIGF1ZGlvX2FsdHNldHRpbmdfb25cbiIpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9IGVsc2UgeworCQlwZWFzeWNhcC0+YXVkaW9fYWx0c2V0dGluZ19vbiA9IG9rYWx0W2lzb2thbHQgLSAxXTsKKwkJSk9UKDQsICIlaT1hdWRpb19hbHRzZXR0aW5nX29uIDw9PT09XG4iLCBcCisJCQkJCQlwZWFzeWNhcC0+YXVkaW9fYWx0c2V0dGluZ19vbik7CisJfQorCWlmICghaXNva2VwbikgeworCQlTQVkoIkVSUk9SOiAgbm8gdmlhYmxlIGF1ZGlvX2VuZHBvaW50bnVtYmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfSBlbHNlIHsKKwkJcGVhc3ljYXAtPmF1ZGlvX2VuZHBvaW50bnVtYmVyID0gb2tlcG5baXNva2VwbiAtIDFdOworCQlKT1QoNCwgIiVpPWF1ZGlvX2VuZHBvaW50bnVtYmVyXG4iLCBcCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19lbmRwb2ludG51bWJlcik7CisJfQorCWlmICghaXNva21wcykgeworCQlTQVkoIkVSUk9SOiAgbm8gdmlhYmxlIGF1ZGlvX21heHBhY2tldHNpemVcbiIpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9IGVsc2UgeworCQlwZWFzeWNhcC0+YXVkaW9faXNvY19tYXhmcmFtZXNpemUgPSBva21wc1tpc29rbXBzIC0gMV07CisJCUpPVCg0LCAiJWk9YXVkaW9faXNvY19tYXhmcmFtZXNpemVcbiIsIFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX2lzb2NfbWF4ZnJhbWVzaXplKTsKKwkJaWYgKDAgPj0gcGVhc3ljYXAtPmF1ZGlvX2lzb2NfbWF4ZnJhbWVzaXplKSB7CisJCQlTQVkoIkVSUk9SOiAgYmFkIGF1ZGlvX2lzb2NfbWF4ZnJhbWVzaXplXG4iKTsKKwkJCXJldHVybiAtRU5PRU5UOworCQl9CisJCWlmICg5ID09IHBlYXN5Y2FwLT5hdWRpb19pc29jX21heGZyYW1lc2l6ZSkgeworCQkJcGVhc3ljYXAtPmlsayB8PSAweDAyOworCQkJU0FZKCJoYXJkd2FyZSBpcyBGT1VSLUNWQlNcbiIpOworCQkJcGVhc3ljYXAtPm1pY3JvcGhvbmUgPSB0cnVlOworCQkJcGVhc3ljYXAtPmF1ZGlvX3BhZ2VzX3Blcl9mcmFnbWVudCA9IDQ7CisJCX0gZWxzZSBpZiAoMjU2ID09IHBlYXN5Y2FwLT5hdWRpb19pc29jX21heGZyYW1lc2l6ZSkgeworCQkJcGVhc3ljYXAtPmlsayAmPSB+MHgwMjsKKwkJCVNBWSgiaGFyZHdhcmUgaXMgQ1ZCUytTLVZJREVPXG4iKTsKKwkJCXBlYXN5Y2FwLT5taWNyb3Bob25lID0gZmFsc2U7CisJCQlwZWFzeWNhcC0+YXVkaW9fcGFnZXNfcGVyX2ZyYWdtZW50ID0gNDsKKwkJfSBlbHNlIHsKKwkJCVNBWSgiaGFyZHdhcmUgaXMgdW5pZGVudGlmaWVkOlxuIik7CisJCQlTQVkoIiVpPWF1ZGlvX2lzb2NfbWF4ZnJhbWVzaXplXG4iLCBcCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19pc29jX21heGZyYW1lc2l6ZSk7CisJCQlyZXR1cm4gLUVOT0VOVDsKKwkJfQorCisJCXBlYXN5Y2FwLT5hdWRpb19ieXRlc19wZXJfZnJhZ21lbnQgPSBcCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19wYWdlc19wZXJfZnJhZ21lbnQgKiBcCisJCQkJCQkJCVBBR0VfU0laRSA7CisJCXBlYXN5Y2FwLT5hdWRpb19idWZmZXJfcGFnZV9tYW55ID0gKEFVRElPX0ZSQUdNRU5UX01BTlkgKiBcCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19wYWdlc19wZXJfZnJhZ21lbnQpOworCisJCUpPVCg0LCAiJTZpPUFVRElPX0ZSQUdNRU5UX01BTllcbiIsIEFVRElPX0ZSQUdNRU5UX01BTlkpOworCQlKT1QoNCwgIiU2aT1hdWRpb19wYWdlc19wZXJfZnJhZ21lbnRcbiIsIFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX3BhZ2VzX3Blcl9mcmFnbWVudCk7CisJCUpPVCg0LCAiJTZpPWF1ZGlvX2J5dGVzX3Blcl9mcmFnbWVudFxuIiwgXAorCQkJCQlwZWFzeWNhcC0+YXVkaW9fYnl0ZXNfcGVyX2ZyYWdtZW50KTsKKwkJSk9UKDQsICIlNmk9YXVkaW9fYnVmZmVyX3BhZ2VfbWFueVxuIiwgXAorCQkJCQlwZWFzeWNhcC0+YXVkaW9fYnVmZmVyX3BhZ2VfbWFueSk7CisKKwkJcGVhc3ljYXAtPmF1ZGlvX2lzb2NfZnJhbWVzcGVyZGVzYyA9IDEyODsKKworCQlKT1QoNCwgIiVpPWF1ZGlvX2lzb2NfZnJhbWVzcGVyZGVzY1xuIiwgXAorCQkJCQlwZWFzeWNhcC0+YXVkaW9faXNvY19mcmFtZXNwZXJkZXNjKTsKKwkJaWYgKDAgPj0gcGVhc3ljYXAtPmF1ZGlvX2lzb2NfZnJhbWVzcGVyZGVzYykgeworCQkJU0FZKCJFUlJPUjogIGJhZCBhdWRpb19pc29jX2ZyYW1lc3BlcmRlc2NcbiIpOworCQkJcmV0dXJuIC1FTk9FTlQ7CisJCX0KKworCQlwZWFzeWNhcC0+YXVkaW9faXNvY19idWZmZXJfc2l6ZSA9IFwKKwkJCQlwZWFzeWNhcC0+YXVkaW9faXNvY19tYXhmcmFtZXNpemUgKiBcCisJCQkJcGVhc3ljYXAtPmF1ZGlvX2lzb2NfZnJhbWVzcGVyZGVzYzsKKwkJSk9UKDQsICIlaT1hdWRpb19pc29jX2J1ZmZlcl9zaXplXG4iLCBcCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19pc29jX2J1ZmZlcl9zaXplKTsKKwkJaWYgKEFVRElPX0lTT0NfQlVGRkVSX1NJWkUgPCBcCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19pc29jX2J1ZmZlcl9zaXplKSB7CisJCQlTQVkoIk1JU1RBS0U6ICBhdWRpb19pc29jX2J1ZmZlcl9zaXplIGJpZ2dlciAiCisJCQkidGhhbiAlbGk9QVVESU9fSVNPQ19CVUZGRVJfU0laRVxuIiwgXAorCQkJCQkJQVVESU9fSVNPQ19CVUZGRVJfU0laRSk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCX0KKworCWlmICgtMSA9PSBwZWFzeWNhcC0+YXVkaW9faW50ZXJmYWNlKSB7CisJCVNBWSgiTUlTVEFLRTogIGF1ZGlvX2ludGVyZmFjZSBpcyB1bnNldFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAoLTEgPT0gcGVhc3ljYXAtPmF1ZGlvX2FsdHNldHRpbmdfb24pIHsKKwkJU0FZKCJNSVNUQUtFOiAgYXVkaW9fYWx0c2V0dGluZ19vbiBpcyB1bnNldFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAoLTEgPT0gcGVhc3ljYXAtPmF1ZGlvX2FsdHNldHRpbmdfb2ZmKSB7CisJCVNBWSgiTUlTVEFLRTogIGF1ZGlvX2ludGVyZmFjZV9vZmYgaXMgdW5zZXRcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKC0xID09IHBlYXN5Y2FwLT5hdWRpb19lbmRwb2ludG51bWJlcikgeworCQlTQVkoIk1JU1RBS0U6ICBhdWRpb19lbmRwb2ludG51bWJlciBpcyB1bnNldFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAoLTEgPT0gcGVhc3ljYXAtPmF1ZGlvX2lzb2NfbWF4ZnJhbWVzaXplKSB7CisJCVNBWSgiTUlTVEFLRTogIGF1ZGlvX2lzb2NfbWF4ZnJhbWVzaXplIGlzIHVuc2V0XG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWlmICgtMSA9PSBwZWFzeWNhcC0+YXVkaW9faXNvY19idWZmZXJfc2l6ZSkgeworCQlTQVkoIk1JU1RBS0U6ICBhdWRpb19pc29jX2J1ZmZlcl9zaXplIGlzIHVuc2V0XG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBBTExPQ0FURSBNRU1PUlkgRk9SIEFVRElPIEJVRkZFUlMuICBMSVNUUyBNVVNUIEJFIElOSVRJQUxJWkVEIEZJUlNULgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJSU5JVF9MSVNUX0hFQUQoJihwZWFzeWNhcC0+dXJiX2F1ZGlvX2hlYWQpKTsKKwlwZWFzeWNhcC0+cHVyYl9hdWRpb19oZWFkID0gJihwZWFzeWNhcC0+dXJiX2F1ZGlvX2hlYWQpOworCisJSk9UKDQsICJhbGxvY2F0aW5nIGFuIGF1ZGlvIGJ1ZmZlclxuIik7CisJSk9UKDQsICIuLi4uIHNjYXR0ZXJlZCBvdmVyICVpIHBhZ2VzXG4iLCBcCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19idWZmZXJfcGFnZV9tYW55KTsKKworCWZvciAoayA9IDA7ICBrIDwgcGVhc3ljYXAtPmF1ZGlvX2J1ZmZlcl9wYWdlX21hbnk7ICBrKyspIHsKKwkJaWYgKCh2b2lkICopTlVMTCAhPSBwZWFzeWNhcC0+YXVkaW9fYnVmZmVyW2tdLnBnbykgeworCQkJU0FZKCJFUlJPUjogYXR0ZW1wdGluZyB0byByZWFsbG9jYXRlIGF1ZGlvIGJ1ZmZlcnNcbiIpOworCQl9IGVsc2UgeworCQkJcGJ1ZiA9ICh2b2lkICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwkJCWlmICgodm9pZCAqKU5VTEwgPT0gcGJ1ZikgeworCQkJCVNBWSgiRVJST1I6IENvdWxkIG5vdCBhbGxvY2F0ZSBhdWRpbyAiIFwKKwkJCQkJCQkiYnVmZmVyIHBhZ2UgJWlcbiIsIGspOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfSBlbHNlCisJCQkJcGVhc3ljYXAtPmFsbG9jYXRpb25fYXVkaW9fcGFnZSArPSAxOworCisJCQlwZWFzeWNhcC0+YXVkaW9fYnVmZmVyW2tdLnBnbyA9IHBidWY7CisJCX0KKwkJcGVhc3ljYXAtPmF1ZGlvX2J1ZmZlcltrXS5wdG8gPSBwZWFzeWNhcC0+YXVkaW9fYnVmZmVyW2tdLnBnbzsKKwl9CisKKwlwZWFzeWNhcC0+YXVkaW9fZmlsbCA9IDA7CisJcGVhc3ljYXAtPmF1ZGlvX3JlYWQgPSAwOworCUpPVCg0LCAiYWxsb2NhdGlvbiBvZiBhdWRpbyBidWZmZXIgZG9uZTogICVpIHBhZ2VzXG4iLCBrKTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlKT1QoNCwgImFsbG9jYXRpbmcgJWkgaXNvYyBhdWRpbyBidWZmZXJzIG9mIHNpemUgJWlcbiIsICBcCisJCUFVRElPX0lTT0NfQlVGRkVSX01BTlksIHBlYXN5Y2FwLT5hdWRpb19pc29jX2J1ZmZlcl9zaXplKTsKKwlKT1QoNCwgIi4uLi4gZWFjaCBvY2N1cHlpbmcgY29udGlndW91cyBtZW1vcnkgcGFnZXNcbiIpOworCisJZm9yIChrID0gMDsgIGsgPCBBVURJT19JU09DX0JVRkZFUl9NQU5ZOyAgaysrKSB7CisJCXBidWYgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgQVVESU9fSVNPQ19PUkRFUik7CisJCWlmIChOVUxMID09IHBidWYpIHsKKwkJCVNBWSgiRVJST1I6IENvdWxkIG5vdCBhbGxvY2F0ZSBpc29jIGF1ZGlvIGJ1ZmZlciAiIFwKKwkJCQkJCQkiJWlcbiIsIGspOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0gZWxzZQorCQkJcGVhc3ljYXAtPmFsbG9jYXRpb25fYXVkaW9fcGFnZSArPSBcCisJCQkJKCh1bnNpZ25lZCBpbnQpKDB4MDEgPDwgQVVESU9fSVNPQ19PUkRFUikpOworCisJCXBlYXN5Y2FwLT5hdWRpb19pc29jX2J1ZmZlcltrXS5wZ28gPSBwYnVmOworCQlwZWFzeWNhcC0+YXVkaW9faXNvY19idWZmZXJba10ucHRvID0gcGJ1ZiArIFwKKwkJcGVhc3ljYXAtPmF1ZGlvX2lzb2NfYnVmZmVyX3NpemU7CisJCXBlYXN5Y2FwLT5hdWRpb19pc29jX2J1ZmZlcltrXS5rb3VudCA9IGs7CisJfQorCUpPVCg0LCAiYWxsb2NhdGlvbiBvZiBpc29jIGF1ZGlvIGJ1ZmZlcnMgZG9uZS5cbiIpOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBBTExPQ0FURSBBTkQgSU5JVElBTElaRSBNVUxUSVBMRSBzdHJ1Y3QgdXJiIC4uLgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJSk9UKDQsICJhbGxvY2F0aW5nICVpIHN0cnVjdCB1cmIuXG4iLCBBVURJT19JU09DX0JVRkZFUl9NQU5ZKTsKKwlKT1QoNCwgInVzaW5nICVpPXBlYXN5Y2FwLT5hdWRpb19pc29jX2ZyYW1lc3BlcmRlc2NcbiIsIFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX2lzb2NfZnJhbWVzcGVyZGVzYyk7CisJSk9UKDQsICJ1c2luZyAlaT1wZWFzeWNhcC0+YXVkaW9faXNvY19tYXhmcmFtZXNpemVcbiIsIFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX2lzb2NfbWF4ZnJhbWVzaXplKTsKKwlKT1QoNCwgInVzaW5nICVpPXBlYXN5Y2FwLT5hdWRpb19pc29jX2J1ZmZlcl9zaXplXG4iLCBcCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19pc29jX2J1ZmZlcl9zaXplKTsKKworCWZvciAoayA9IDA7ICBrIDwgQVVESU9fSVNPQ19CVUZGRVJfTUFOWTsgaysrKSB7CisJCXB1cmIgPSB1c2JfYWxsb2NfdXJiKHBlYXN5Y2FwLT5hdWRpb19pc29jX2ZyYW1lc3BlcmRlc2MsIFwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmIChOVUxMID09IHB1cmIpIHsKKwkJCVNBWSgiRVJST1I6IHVzYl9hbGxvY191cmIgcmV0dXJuZWQgTlVMTCBmb3IgYnVmZmVyICIgXAorCQkJCQkJCSIlaVxuIiwgayk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfSBlbHNlCisJCQlwZWFzeWNhcC0+YWxsb2NhdGlvbl9hdWRpb191cmIgKz0gMSA7CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCisJCXBkYXRhX3VyYiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYXRhX3VyYiksIEdGUF9LRVJORUwpOworCQlpZiAoTlVMTCA9PSBwZGF0YV91cmIpIHsKKwkJCVNBWSgiRVJST1I6IENvdWxkIG5vdCBhbGxvY2F0ZSBzdHJ1Y3QgZGF0YV91cmIuXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9IGVsc2UKKwkJCXBlYXN5Y2FwLT5hbGxvY2F0aW9uX2F1ZGlvX3N0cnVjdCArPSBcCisJCQkJCQlzaXplb2Yoc3RydWN0IGRhdGFfdXJiKTsKKworCQlwZGF0YV91cmItPnB1cmIgPSBwdXJiOworCQlwZGF0YV91cmItPmlzYnVmID0gazsKKwkJcGRhdGFfdXJiLT5sZW5ndGggPSAwOworCQlsaXN0X2FkZF90YWlsKCYocGRhdGFfdXJiLT5saXN0X2hlYWQpLCBcCisJCQkJCQlwZWFzeWNhcC0+cHVyYl9hdWRpb19oZWFkKTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgLi4uIEFORCBJTklUSUFMSVpFIFRIRU0KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCQlpZiAoIWspIHsKKwkJCUpPVCg0LCAiaW5pdGlhbGl6aW5nIGF1ZGlvIHVyYnMgdGh1czpcbiIpOworCQkJSk9UKDQsICIgIHB1cmItPmludGVydmFsID0gMTtcbiIpOworCQkJSk9UKDQsICIgIHB1cmItPmRldiA9IHBlYXN5Y2FwLT5wdXNiX2RldmljZTtcbiIpOworCQkJSk9UKDQsICIgIHB1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUocGVhc3ljYXAtPiIgXAorCQkJCQkicHVzYl9kZXZpY2UsJWkpO1xuIiwgXAorCQkJCQlwZWFzeWNhcC0+YXVkaW9fZW5kcG9pbnRudW1iZXIpOworCQkJSk9UKDQsICIgIHB1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQO1xuIik7CisJCQlKT1QoNCwgIiAgcHVyYi0+dHJhbnNmZXJfYnVmZmVyID0gIiBcCisJCQkJInBlYXN5Y2FwLT5hdWRpb19pc29jX2J1ZmZlclsuXS5wZ287XG4iKTsKKwkJCUpPVCg0LCAiICBwdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gJWk7XG4iLCBcCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19pc29jX2J1ZmZlcl9zaXplKTsKKwkJCUpPVCg0LCAiICBwdXJiLT5jb21wbGV0ZSA9IGVhc3lzbmRfY29tcGxldGU7XG4iKTsKKwkJCUpPVCg0LCAiICBwdXJiLT5jb250ZXh0ID0gcGVhc3ljYXA7XG4iKTsKKwkJCUpPVCg0LCAiICBwdXJiLT5zdGFydF9mcmFtZSA9IDA7XG4iKTsKKwkJCUpPVCg0LCAiICBwdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9ICVpO1xuIiwgXAorCQkJCQlwZWFzeWNhcC0+YXVkaW9faXNvY19mcmFtZXNwZXJkZXNjKTsKKwkJCUpPVCg0LCAiICBmb3IgKGogPSAwOyBqIDwgJWk7IGorKylcbiIsIFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX2lzb2NfZnJhbWVzcGVyZGVzYyk7CisJCQlKT1QoNCwgIiAgICB7XG4iKTsKKwkJCUpPVCg0LCAiICAgIHB1cmItPmlzb19mcmFtZV9kZXNjW2pdLm9mZnNldCA9IGoqJWk7XG4iLFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX2lzb2NfbWF4ZnJhbWVzaXplKTsKKwkJCUpPVCg0LCAiICAgIHB1cmItPmlzb19mcmFtZV9kZXNjW2pdLmxlbmd0aCA9ICVpO1xuIiwgXAorCQkJCQlwZWFzeWNhcC0+YXVkaW9faXNvY19tYXhmcmFtZXNpemUpOworCQkJSk9UKDQsICIgICAgfVxuIik7CisJCQl9CisKKwkJcHVyYi0+aW50ZXJ2YWwgPSAxOworCQlwdXJiLT5kZXYgPSBwZWFzeWNhcC0+cHVzYl9kZXZpY2U7CisJCXB1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCBcCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19lbmRwb2ludG51bWJlcik7CisJCXB1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOworCQlwdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBwZWFzeWNhcC0+YXVkaW9faXNvY19idWZmZXJba10ucGdvOworCQlwdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gXAorCQkJCQlwZWFzeWNhcC0+YXVkaW9faXNvY19idWZmZXJfc2l6ZTsKKwkJcHVyYi0+Y29tcGxldGUgPSBlYXN5c25kX2NvbXBsZXRlOworCQlwdXJiLT5jb250ZXh0ID0gcGVhc3ljYXA7CisJCXB1cmItPnN0YXJ0X2ZyYW1lID0gMDsKKwkJcHVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBwZWFzeWNhcC0+YXVkaW9faXNvY19mcmFtZXNwZXJkZXNjOworCQlmb3IgKGogPSAwOyAgaiA8IHBlYXN5Y2FwLT5hdWRpb19pc29jX2ZyYW1lc3BlcmRlc2M7IGorKykgeworCQkJcHVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ub2Zmc2V0ID0gaiAqIFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX2lzb2NfbWF4ZnJhbWVzaXplOworCQkJcHVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ubGVuZ3RoID0gXAorCQkJCQlwZWFzeWNhcC0+YXVkaW9faXNvY19tYXhmcmFtZXNpemU7CisJCX0KKwl9CisJSk9UKDQsICJhbGxvY2F0aW9uIG9mICVpIHN0cnVjdCB1cmIgZG9uZS5cbiIsIGspOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBTQVZFIFBPSU5URVIgcGVhc3ljYXAgSU4gVEhJUyBJTlRFUkZBQ0UuCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwl1c2Jfc2V0X2ludGZkYXRhKHB1c2JfaW50ZXJmYWNlLCBwZWFzeWNhcCk7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFRIRSBBVURJTyBERVZJQ0UgQ0FOIEJFIFJFR0lTVEVSRUQgTk9XLCBBUyBJVCBJUyBSRUFEWS4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCXJjID0gdXNiX3JlZ2lzdGVyX2RldihwdXNiX2ludGVyZmFjZSwgJmVhc3lzbmRfY2xhc3MpOworCWlmICgwICE9IHJjKSB7CisJCWVycigiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLiIpOworCQl1c2Jfc2V0X2ludGZkYXRhKHB1c2JfaW50ZXJmYWNlLCBOVUxMKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfSBlbHNlCisJCShwZWFzeWNhcC0+cmVnaXN0ZXJlZF9hdWRpbykrKzsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgTEVUIFRIRSBVU0VSIEtOT1cgV0hBVCBOT0RFIFRIRSBBVURJTyBERVZJQ0UgSVMgQVRUQUNIRUQgVE8uCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlTQVkoImVhc3lzbmQgYXR0YWNoZWQgdG8gbWlub3IgIyVkXG4iLCBwdXNiX2ludGVyZmFjZS0+bWlub3IpOworCWJyZWFrOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBJTlRFUkZBQ0VTIE9USEVSIFRIQU4gMCwgMSBBTkQgMiBBUkUgVU5FWFBFQ1RFRAorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitkZWZhdWx0OiB7CisJSk9UKDQsICJFUlJPUjogdW5leHBlY3RlZCBpbnRlcmZhY2UgJWlcbiIsIGJJbnRlcmZhY2VOdW1iZXIpOworCXJldHVybiAtRUlOVkFMOworfQorfQorSk9UKDQsICJlbmRzIHN1Y2Nlc3NmdWxseSBmb3IgaW50ZXJmYWNlICVpXG4iLCBcCisJCQkJcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvci0+YkludGVyZmFjZU51bWJlcik7CityZXR1cm4gMDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgV0hFTiBUSElTIEZVTkNUSU9OIElTIENBTExFRCBUSEUgREVWSUNFIEhBUyBBTFJFQURZIEJFRU4gUEhZU0lDQUxMWQorICogIFVOUExVR0dFRC4KKyAqICBIRU5DRSBwZWFzeWNhcC0+cHVzYl9kZXZpY2UgSVMgTk8gTE9OR0VSIFZBTElEIEFORCBNVVNUIEJFIFNFVCBUTyBOVUxMLgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkCitlYXN5Y2FwX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICpwdXNiX2ludGVyZmFjZSkKK3sKK3N0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKnB1c2JfaG9zdF9pbnRlcmZhY2U7CitzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICpwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yOworX191OCBiSW50ZXJmYWNlTnVtYmVyOworc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwOworCitzdHJ1Y3QgbGlzdF9oZWFkICpwbGlzdF9oZWFkOworc3RydWN0IGRhdGFfdXJiICpwZGF0YV91cmI7CitpbnQgbWlub3IsIG07CisKK0pPVCg0LCAiXG4iKTsKKworaWYgKChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqKU5VTEwgPT0gcHVzYl9pbnRlcmZhY2UpIHsKKwlKT1QoNCwgIkVSUk9SOiBwdXNiX2ludGVyZmFjZSBpcyBOVUxMXG4iKTsKKwlyZXR1cm47Cit9CitwdXNiX2hvc3RfaW50ZXJmYWNlID0gcHVzYl9pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nOworaWYgKChzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICopTlVMTCA9PSBwdXNiX2hvc3RfaW50ZXJmYWNlKSB7CisJSk9UKDQsICJFUlJPUjogcHVzYl9ob3N0X2ludGVyZmFjZSBpcyBOVUxMXG4iKTsKKwlyZXR1cm47Cit9CitwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yID0gJihwdXNiX2hvc3RfaW50ZXJmYWNlLT5kZXNjKTsKK2lmICgoc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqKU5VTEwgPT0gcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvcikgeworCUpPVCg0LCAiRVJST1I6IHB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgaXMgTlVMTFxuIik7CisJcmV0dXJuOworfQorYkludGVyZmFjZU51bWJlciA9IHB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3ItPmJJbnRlcmZhY2VOdW1iZXI7CittaW5vciA9IHB1c2JfaW50ZXJmYWNlLT5taW5vcjsKK0pPVCg0LCAiaW50ZlslaV06IG1pbm9yPSVpXG4iLCBiSW50ZXJmYWNlTnVtYmVyLCBtaW5vcik7CisKK3BlYXN5Y2FwID0gdXNiX2dldF9pbnRmZGF0YShwdXNiX2ludGVyZmFjZSk7CitpZiAoKHN0cnVjdCBlYXN5Y2FwICopTlVMTCA9PSBwZWFzeWNhcCkKKwlTQVkoIkVSUk9SOiBwZWFzeWNhcCBpcyBOVUxMXG4iKTsKK2Vsc2UgeworCXBlYXN5Y2FwLT5wdXNiX2RldmljZSA9IChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEw7CisJc3dpdGNoIChiSW50ZXJmYWNlTnVtYmVyKSB7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJY2FzZSAwOiB7CisJCWlmICgoc3RydWN0IGxpc3RfaGVhZCAqKU5VTEwgIT0gcGVhc3ljYXAtPnB1cmJfdmlkZW9faGVhZCkgeworCQkJSk9UKDQsICJraWxsaW5nIHZpZGVvIHVyYnNcbiIpOworCQkJbSA9IDA7CisJCQlsaXN0X2Zvcl9lYWNoKHBsaXN0X2hlYWQsIChwZWFzeWNhcC0+cHVyYl92aWRlb19oZWFkKSkKKwkJCQl7CisJCQkJcGRhdGFfdXJiID0gbGlzdF9lbnRyeShwbGlzdF9oZWFkLCBcCisJCQkJCQlzdHJ1Y3QgZGF0YV91cmIsIGxpc3RfaGVhZCk7CisJCQkJaWYgKChzdHJ1Y3QgZGF0YV91cmIgKilOVUxMICE9IHBkYXRhX3VyYikgeworCQkJCQlpZiAoKHN0cnVjdCB1cmIgKilOVUxMICE9IFwKKwkJCQkJCQlwZGF0YV91cmItPnB1cmIpIHsKKwkJCQkJCXVzYl9raWxsX3VyYihwZGF0YV91cmItPnB1cmIpOworCQkJCQkJbSsrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJSk9UKDQsICIlaSB2aWRlbyB1cmJzIGtpbGxlZFxuIiwgbSk7CisJCX0gZWxzZQorCQkJU0FZKCJFUlJPUjogcGVhc3ljYXAtPnB1cmJfdmlkZW9faGVhZCBpcyBOVUxMXG4iKTsKKwkJYnJlYWs7CisJfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCWNhc2UgMjogeworCQlpZiAoKHN0cnVjdCBsaXN0X2hlYWQgKilOVUxMICE9IHBlYXN5Y2FwLT5wdXJiX2F1ZGlvX2hlYWQpIHsKKwkJCUpPVCg0LCAia2lsbGluZyBhdWRpbyB1cmJzXG4iKTsKKwkJCW0gPSAwOworCQkJbGlzdF9mb3JfZWFjaChwbGlzdF9oZWFkLCBcCisJCQkJCQkocGVhc3ljYXAtPnB1cmJfYXVkaW9faGVhZCkpIHsKKwkJCQlwZGF0YV91cmIgPSBsaXN0X2VudHJ5KHBsaXN0X2hlYWQsIFwKKwkJCQkJCXN0cnVjdCBkYXRhX3VyYiwgbGlzdF9oZWFkKTsKKwkJCQlpZiAoKHN0cnVjdCBkYXRhX3VyYiAqKU5VTEwgIT0gcGRhdGFfdXJiKSB7CisJCQkJCWlmICgoc3RydWN0IHVyYiAqKU5VTEwgIT0gXAorCQkJCQkJCXBkYXRhX3VyYi0+cHVyYikgeworCQkJCQkJdXNiX2tpbGxfdXJiKHBkYXRhX3VyYi0+cHVyYik7CisJCQkJCQltKys7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlKT1QoNCwgIiVpIGF1ZGlvIHVyYnMga2lsbGVkXG4iLCBtKTsKKwkJfSBlbHNlCisJCQlTQVkoIkVSUk9SOiBwZWFzeWNhcC0+cHVyYl9hdWRpb19oZWFkIGlzIE5VTExcbiIpOworCQlicmVhazsKKwl9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIERFUkVHSVNURVIKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzd2l0Y2ggKGJJbnRlcmZhY2VOdW1iZXIpIHsKK2Nhc2UgMDogeworI2lmICghZGVmaW5lZChFQVNZQ0FQX0lTX1ZJREVPREVWX0NMSUVOVCkpCisJaWYgKChzdHJ1Y3QgZWFzeWNhcCAqKU5VTEwgPT0gcGVhc3ljYXApIHsKKwkJU0FZKCJFUlJPUjogcGVhc3ljYXAgaGFzIGJlY29tZSBOVUxMXG4iKTsKKwl9IGVsc2UgeworCQlsb2NrX2tlcm5lbCgpOworCQl1c2JfZGVyZWdpc3Rlcl9kZXYocHVzYl9pbnRlcmZhY2UsICZlYXN5Y2FwX2NsYXNzKTsKKwkJKHBlYXN5Y2FwLT5yZWdpc3RlcmVkX3ZpZGVvKS0tOworCisJCUpPVCg0LCAiaW50ZlslaV06IHVzYl9kZXJlZ2lzdGVyX2RldigpXG4iLCBiSW50ZXJmYWNlTnVtYmVyKTsKKwkJdW5sb2NrX2tlcm5lbCgpOworCQlTQVkoImVhc3ljYXAgZGV0YWNoZWQgZnJvbSBtaW5vciAjJWRcbiIsIG1pbm9yKTsKKwl9CisvKnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2Ki8KKyNlbHNlCisJaWYgKChzdHJ1Y3QgZWFzeWNhcCAqKU5VTEwgPT0gcGVhc3ljYXApCisJCVNBWSgiRVJST1I6IHBlYXN5Y2FwIGhhcyBiZWNvbWUgTlVMTFxuIik7CisJZWxzZSB7CisJCWxvY2tfa2VybmVsKCk7CisJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHBlYXN5Y2FwLT5wdmlkZW9fZGV2aWNlKTsKKwkJKHBlYXN5Y2FwLT5yZWdpc3RlcmVkX3ZpZGVvKS0tOworCQl1bmxvY2tfa2VybmVsKCk7CisJCUpPVCg0LCAidW5yZWdpc3RlcmVkIHdpdGggdmlkZW9kZXY6ICVpPW1pbm9yXG4iLCBcCisJCQkJCQkJcHZpZGVvX2RldmljZS0+bWlub3IpOworCX0KKy8qXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4qLworI2VuZGlmIC8qRUFTWUNBUF9JU19WSURFT0RFVl9DTElFTlQqLworCWJyZWFrOworfQorY2FzZSAyOiB7CisJbG9ja19rZXJuZWwoKTsKKworCXVzYl9kZXJlZ2lzdGVyX2RldihwdXNiX2ludGVyZmFjZSwgJmVhc3lzbmRfY2xhc3MpOworCWlmICgoc3RydWN0IGVhc3ljYXAgKilOVUxMICE9IHBlYXN5Y2FwKQorCQkocGVhc3ljYXAtPnJlZ2lzdGVyZWRfYXVkaW8pLS07CisKKwlKT1QoNCwgImludGZbJWldOiB1c2JfZGVyZWdpc3Rlcl9kZXYoKVxuIiwgYkludGVyZmFjZU51bWJlcik7CisJdW5sb2NrX2tlcm5lbCgpOworCisJU0FZKCJlYXN5c25kIGRldGFjaGVkIGZyb20gbWlub3IgIyVkXG4iLCBtaW5vcik7CisJYnJlYWs7Cit9CitkZWZhdWx0OgorCWJyZWFrOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBDQUxMIGVhc3ljYXBfZGVsZXRlKCkgSUYgTk8gUkVNQUlOSU5HIFJFRkVSRU5DRVMgVE8gcGVhc3ljYXAKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaWYgKChzdHJ1Y3QgZWFzeWNhcCAqKU5VTEwgPT0gcGVhc3ljYXApIHsKKwlTQVkoIkVSUk9SOiBwZWFzeWNhcCBoYXMgYmVjb21lIE5VTExcbiIpOworCVNBWSgiY2Fubm90IGNhbGwga3JlZl9wdXQoKVxuIik7CisJU0FZKCJlbmRpbmcgdW5zdWNjZXNzZnVsbHk6IG1heSBjYXVzZSBtZW1vcnkgbGVha1xuIik7CisJcmV0dXJuOworfQoraWYgKCFwZWFzeWNhcC0+a3JlZi5yZWZjb3VudC5jb3VudGVyKSB7CisJU0FZKCJFUlJPUjogcGVhc3ljYXAtPmtyZWYucmVmY291bnQuY291bnRlciBpcyB6ZXJvICIgXAorCQkJCQkJInNvIGNhbm5vdCBjYWxsIGtyZWZfcHV0KClcbiIpOworCVNBWSgiZW5kaW5nIHVuc3VjY2Vzc2Z1bGx5OiBtYXkgY2F1c2UgbWVtb3J5IGxlYWtcbiIpOworCXJldHVybjsKK30KK0pPVCg0LCAiaW50ZlslaV06IGtyZWZfcHV0KCkgd2l0aCAlaT1wZWFzeWNhcC0+a3JlZi5yZWZjb3VudC5jb3VudGVyXG4iLCBcCisJCWJJbnRlcmZhY2VOdW1iZXIsIChpbnQpcGVhc3ljYXAtPmtyZWYucmVmY291bnQuY291bnRlcik7CitrcmVmX3B1dCgmcGVhc3ljYXAtPmtyZWYsIGVhc3ljYXBfZGVsZXRlKTsKK0pPVCg0LCAiaW50ZlslaV06IGtyZWZfcHV0KCkgZG9uZS5cbiIsIGJJbnRlcmZhY2VOdW1iZXIpOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitKT1QoNCwgImVuZHNcbiIpOworcmV0dXJuOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IF9faW5pdAorZWFzeWNhcF9tb2R1bGVfaW5pdCh2b2lkKQoreworaW50IHJlc3VsdDsKKworU0FZKCI9PT09PT09PWVhc3ljYXA9PT09PT09XG4iKTsKK0pPVCg0LCAiYmVnaW5zLiAgJWk9ZGVidWdcbiIsIGVhc3ljYXBfZGVidWcpOworU0FZKCJ2ZXJzaW9uOiAiIEVBU1lDQVBfRFJJVkVSX1ZFUlNJT04gIlxuIik7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFJFR0lTVEVSIFRISVMgRFJJVkVSIFdJVEggVEhFIFVTQiBTVUJTWVRFTS4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworSk9UKDQsICJyZWdpc3RlcmluZyBkcml2ZXIgZWFzeWNhcFxuIik7CisKK3Jlc3VsdCA9IHVzYl9yZWdpc3RlcigmZWFzeWNhcF91c2JfZHJpdmVyKTsKK2lmICgwICE9IHJlc3VsdCkKKwlTQVkoIkVSUk9SOiAgdXNiX3JlZ2lzdGVyIHJldHVybmVkICVpXG4iLCByZXN1bHQpOworCitKT1QoNCwgImVuZHNcbiIpOworcmV0dXJuIHJlc3VsdDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgX19leGl0CitlYXN5Y2FwX21vZHVsZV9leGl0KHZvaWQpCit7CitKT1QoNCwgImJlZ2luc1xuIik7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgREVSRUdJU1RFUiBUSElTIERSSVZFUiBXSVRIIFRIRSBVU0IgU1VCU1lURU0uCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3VzYl9kZXJlZ2lzdGVyKCZlYXN5Y2FwX3VzYl9kcml2ZXIpOworCitKT1QoNCwgImVuZHNcbiIpOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCittb2R1bGVfaW5pdChlYXN5Y2FwX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KGVhc3ljYXBfbW9kdWxlX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJSLk0uIFRob21hcyA8cm10aG9tYXNAc2Npb2x1cy5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oRUFTWUNBUF9EUklWRVJfREVTQ1JJUFRJT04pOworTU9EVUxFX1ZFUlNJT04oRUFTWUNBUF9EUklWRVJfVkVSU0lPTik7CisjaWYgZGVmaW5lZChFQVNZQ0FQX0RFQlVHKQorTU9EVUxFX1BBUk1fREVTQyhlYXN5Y2FwX2RlYnVnLCAiZGVidWc6IDAgKGRlZmF1bHQpLCAxLCAyLC4uLiIpOworI2VuZGlmIC8qRUFTWUNBUF9ERUJVRyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9lYXN5Y2FwX3NldHRpbmdzLmMgYi9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9lYXN5Y2FwX3NldHRpbmdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhkOTQwNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lYXN5Y2FwL2Vhc3ljYXBfc2V0dGluZ3MuYwpAQCAtMCwwICsxLDQ4OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgZWFzeWNhcF9zZXR0aW5ncy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIFIuTS4gVGhvbWFzICA8cm10aG9tYXNAc2Npb2x1cy5vcmc+CisgKgorICoKKyAqICBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhlIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImVhc3ljYXAuaCIKKyNpbmNsdWRlICJlYXN5Y2FwX2RlYnVnLmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgVEhFIExFQVNUIFNJR05JRklDQU5UIEJJVCBPRiBlYXN5Y2FwX3N0YW5kYXJkLm1hc2sgSEFTIE1FQU5JTkc6CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAwID0+IDI1IGZwcworICogICAgICAgICAgICAgICAgICAgICAgICAgMSA9PiAzMCBmcHMKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworY29uc3Qgc3RydWN0IGVhc3ljYXBfc3RhbmRhcmQgZWFzeWNhcF9zdGFuZGFyZFtdID0geworeworLm1hc2sgPSAweDAwMEYgJiBQQUxfQkdISU4gLAorLnY0bDJfc3RhbmRhcmQgPSB7CisJLmluZGV4ID0gUEFMX0JHSElOLAorCS5pZCA9IChWNEwyX1NURF9QQUxfQiB8IFY0TDJfU1REX1BBTF9HIHwgVjRMMl9TVERfUEFMX0ggfCBcCisJCQkJCVY0TDJfU1REX1BBTF9JIHwgVjRMMl9TVERfUEFMX04pLAorCS5uYW1lID0gIlBBTF9CR0hJTiIsCisJLmZyYW1lcGVyaW9kID0gezEsIDI1fSwKKwkuZnJhbWVsaW5lcyA9IDYyNSwKKwkucmVzZXJ2ZWQgPSB7MCwgMCwgMCwgMH0KKwl9Cit9LAorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworeworLm1hc2sgPSAweDAwMEYgJiBOVFNDX05fNDQzICwKKy52NGwyX3N0YW5kYXJkID0geworCS5pbmRleCA9IE5UU0NfTl80NDMsCisJLmlkID0gVjRMMl9TVERfVU5LTk9XTiwKKwkubmFtZSA9ICJOVFNDX05fNDQzIiwKKwkuZnJhbWVwZXJpb2QgPSB7MSwgMjV9LAorCS5mcmFtZWxpbmVzID0gNDgwLAorCS5yZXNlcnZlZCA9IHswLCAwLCAwLCAwfQorfQorfSwKKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK3sKKy5tYXNrID0gMHgwMDBGICYgUEFMX05jICwKKy52NGwyX3N0YW5kYXJkID0geworCS5pbmRleCA9IFBBTF9OYywKKwkuaWQgPSBWNEwyX1NURF9QQUxfTmMsCisJLm5hbWUgPSAiUEFMX05jIiwKKwkuZnJhbWVwZXJpb2QgPSB7MSwgMjV9LAorCS5mcmFtZWxpbmVzID0gNjI1LAorCS5yZXNlcnZlZCA9IHswLCAwLCAwLCAwfQorfQorfSwKKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK3sKKy5tYXNrID0gMHgwMDBGICYgTlRTQ19OICwKKy52NGwyX3N0YW5kYXJkID0geworCS5pbmRleCA9IE5UU0NfTiwKKwkuaWQgPSBWNEwyX1NURF9VTktOT1dOLAorCS5uYW1lID0gIk5UU0NfTiIsCisJLmZyYW1lcGVyaW9kID0gezEsIDI1fSwKKwkuZnJhbWVsaW5lcyA9IDUyNSwKKwkucmVzZXJ2ZWQgPSB7MCwgMCwgMCwgMH0KK30KK30sCisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCit7CisubWFzayA9IDB4MDAwRiAmIFNFQ0FNICwKKy52NGwyX3N0YW5kYXJkID0geworCS5pbmRleCA9IFNFQ0FNLAorCS5pZCA9IFY0TDJfU1REX1NFQ0FNLAorCS5uYW1lID0gIlNFQ0FNIiwKKwkuZnJhbWVwZXJpb2QgPSB7MSwgMjV9LAorCS5mcmFtZWxpbmVzID0gNjI1LAorCS5yZXNlcnZlZCA9IHswLCAwLCAwLCAwfQorfQorfSwKKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK3sKKy5tYXNrID0gMHgwMDBGICYgTlRTQ19NICwKKy52NGwyX3N0YW5kYXJkID0geworCS5pbmRleCA9IE5UU0NfTSwKKwkuaWQgPSBWNEwyX1NURF9OVFNDX00sCisJLm5hbWUgPSAiTlRTQ19NIiwKKwkuZnJhbWVwZXJpb2QgPSB7MSwgMzB9LAorCS5mcmFtZWxpbmVzID0gNTI1LAorCS5yZXNlcnZlZCA9IHswLCAwLCAwLCAwfQorfQorfSwKKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK3sKKy5tYXNrID0gMHgwMDBGICYgTlRTQ19NX0pQICwKKy52NGwyX3N0YW5kYXJkID0geworCS5pbmRleCA9IE5UU0NfTV9KUCwKKwkuaWQgPSBWNEwyX1NURF9OVFNDX01fSlAsCisJLm5hbWUgPSAiTlRTQ19NX0pQIiwKKwkuZnJhbWVwZXJpb2QgPSB7MSwgMzB9LAorCS5mcmFtZWxpbmVzID0gNTI1LAorCS5yZXNlcnZlZCA9IHswLCAwLCAwLCAwfQorfQorfSwKKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK3sKKy5tYXNrID0gMHgwMDBGICYgUEFMXzYwICwKKy52NGwyX3N0YW5kYXJkID0geworCS5pbmRleCA9IFBBTF82MCwKKwkuaWQgPSBWNEwyX1NURF9QQUxfNjAsCisJLm5hbWUgPSAiUEFMXzYwIiwKKwkuZnJhbWVwZXJpb2QgPSB7MSwgMzB9LAorCS5mcmFtZWxpbmVzID0gNTI1LAorCS5yZXNlcnZlZCA9IHswLCAwLCAwLCAwfQorfQorfSwKKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK3sKKy5tYXNrID0gMHgwMDBGICYgTlRTQ180NDMgLAorLnY0bDJfc3RhbmRhcmQgPSB7CisJLmluZGV4ID0gTlRTQ180NDMsCisJLmlkID0gVjRMMl9TVERfTlRTQ180NDMsCisJLm5hbWUgPSAiTlRTQ180NDMiLAorCS5mcmFtZXBlcmlvZCA9IHsxLCAzMH0sCisJLmZyYW1lbGluZXMgPSA1MjUsCisJLnJlc2VydmVkID0gezAsIDAsIDAsIDB9Cit9Cit9LAorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworeworLm1hc2sgPSAweDAwMEYgJiBQQUxfTSAsCisudjRsMl9zdGFuZGFyZCA9IHsKKwkuaW5kZXggPSBQQUxfTSwKKwkuaWQgPSBWNEwyX1NURF9QQUxfTSwKKwkubmFtZSA9ICJQQUxfTSIsCisJLmZyYW1lcGVyaW9kID0gezEsIDMwfSwKKwkuZnJhbWVsaW5lcyA9IDUyNSwKKwkucmVzZXJ2ZWQgPSB7MCwgMCwgMCwgMH0KK30KK30sCisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCit7CisubWFzayA9IDB4RkZGRgorfQorfTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgVEhFIDE2LUJJVCBlYXN5Y2FwX2Zvcm1hdC5tYXNrIEhBUyBNRUFOSU5HOgorICogICAgKGxlYXN0IHNpZ25pZmljYW50KSBCSVQgIDA6ICAgICAwID0+IFBBTCwgMjUgRlBTOyAgIDEgPT4gTlRTQywgMzAgRlBTCisgKiAgICAgICAgICAgICAgICAgICAgICAgIEJJVFMgMS0zOiAgIFJFU0VSVkVEIEZPUiBESUZGRVJFTlRJQVRJTkcgU1RBTkRBUkRTCisgKiAgICAgICAgICAgICAgICAgICAgICAgIEJJVFMgNC03OiAgIE5VTUJFUiBPRiBCWVRFUyBQRVIgUElYRUwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgQklUICA4OiAgICAgMCA9PiBOQVRJVkUgQllURSBPUkRFUjsgIDEgPT4gU1dBUFBFRAorICogICAgICAgICAgICAgICAgICAgICAgICBCSVRTIDktMTA6ICBSRVNFUlZFRCBGT1IgT1RIRVIgQllURSBQRVJNVVRBVElPTlMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgQklUIDExOiAgICAgMCA9PiBVTkRFQ0lNQVRFRDsgIDEgPT4gREVDSU1BVEVECisgKiAgICAgICAgICAgICAgICAgICAgICAgIEJJVCAxMjogICAgIDAgPT4gT0ZGRVIgRlJBTUVTOyAxID0+IE9GRkVSIEZJRUxEUworICogICAgIChtb3N0IHNpZ25pZmljYW50KSBCSVRTIDEzLTE1OiBSRVNFUlZFRCBGT1IgT1RIRVIgRklFTEQgT1JERVIgT1BUSU9OUworICogIElUIEZPTExPV1MgVEhBVDoKKyAqICAgICBieXRlc3BlcnBpeGVsIElTICAgICAgICAgKCgweDAwRjAgJiBlYXN5Y2FwX2Zvcm1hdC5tYXNrKSA+PiA0KQorICogICAgIGJ5dGVzd2Fwb3JkZXIgSVMgdHJ1ZSBJRiAoMCAhPSAoMHgwMTAwICYgZWFzeWNhcF9mb3JtYXQubWFzaykpCisgKgorICogICAgIGRlY2ltYXRlcGl4ZWwgSVMgdHJ1ZSBJRiAoMCAhPSAoMHgwODAwICYgZWFzeWNhcF9mb3JtYXQubWFzaykpCisgKgorICogICAgICAgb2ZmZXJmaWVsZHMgSVMgdHJ1ZSBJRiAoMCAhPSAoMHgxMDAwICYgZWFzeWNhcF9mb3JtYXQubWFzaykpCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RydWN0IGVhc3ljYXBfZm9ybWF0IGVhc3ljYXBfZm9ybWF0WzEgKyBTRVRUSU5HU19NQU5ZXTsKKworaW50CitmaWxsaW5fZm9ybWF0cyh2b2lkKQoreworaW50IGksIGosIGssIG0sIG47CitfX3UzMiB3aWR0aCwgaGVpZ2h0LCBwaXhlbGZvcm1hdCwgYnl0ZXNwZXJsaW5lLCBzaXplaW1hZ2U7CitfX3UzMiBmaWVsZCwgY29sb3JzcGFjZTsKK19fdTE2IG1hc2sxLCBtYXNrMiwgbWFzazMsIG1hc2s0OworY2hhciBuYW1lMVszMl0sIG5hbWUyWzMyXSwgbmFtZTNbMzJdLCBuYW1lNFszMl07CisKK2ZvciAoaSA9IDAsIG4gPSAwOyBpIDwgU1RBTkRBUkRfTUFOWTsgaSsrKSB7CisJbWFzazEgPSAweDAwMDA7CisJc3dpdGNoIChpKSB7CisJY2FzZSBQQUxfQkdISU46IHsKKwkJbWFzazEgPSBQQUxfQkdISU47CisJCXN0cmNweSgmbmFtZTFbMF0sICJQQUxfQkdISU4iKTsKKwkJY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV80NzBfU1lTVEVNX0JHOworCQlicmVhazsKKwl9CisJY2FzZSBTRUNBTTogeworCQltYXNrMSA9IFNFQ0FNOworCQlzdHJjcHkoJm5hbWUxWzBdLCAiU0VDQU0iKTsKKwkJY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV80NzBfU1lTVEVNX0JHOworCQlicmVhazsKKwl9CisJY2FzZSBQQUxfTmM6IHsKKwkJbWFzazEgPSBQQUxfTmM7CisJCXN0cmNweSgmbmFtZTFbMF0sICJQQUxfTmMiKTsKKwkJY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV80NzBfU1lTVEVNX0JHOworCQlicmVhazsKKwl9CisJY2FzZSBQQUxfNjA6IHsKKwkJbWFzazEgPSBQQUxfNjA7CisJCXN0cmNweSgmbmFtZTFbMF0sICJQQUxfNjAiKTsKKwkJY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV80NzBfU1lTVEVNX0JHOworCQlicmVhazsKKwl9CisJY2FzZSBQQUxfTTogeworCQltYXNrMSA9IFBBTF9NOworCQlzdHJjcHkoJm5hbWUxWzBdLCAiUEFMX00iKTsKKwkJY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV80NzBfU1lTVEVNX0JHOworCQlicmVhazsKKwl9CisJY2FzZSBOVFNDX006IHsKKwkJbWFzazEgPSBOVFNDX007CisJCXN0cmNweSgmbmFtZTFbMF0sICJOVFNDX00iKTsKKwkJY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV80NzBfU1lTVEVNX007CisJCWJyZWFrOworCX0KKwljYXNlIE5UU0NfNDQzOiB7CisJCW1hc2sxID0gTlRTQ180NDM7CisJCXN0cmNweSgmbmFtZTFbMF0sICJOVFNDXzQ0MyIpOworCQljb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFXzQ3MF9TWVNURU1fTTsKKwkJYnJlYWs7CisJfQorCWNhc2UgTlRTQ19NX0pQOiB7CisJCW1hc2sxID0gTlRTQ19NX0pQOworCQlzdHJjcHkoJm5hbWUxWzBdLCAiTlRTQ19NX0pQIik7CisJCWNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfNDcwX1NZU1RFTV9NOworCQlicmVhazsKKwl9CisJY2FzZSBOVFNDX046IHsKKwkJbWFzazEgPSBOVFNDX007CisJCXN0cmNweSgmbmFtZTFbMF0sICJOVFNDX04iKTsKKwkJY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV80NzBfU1lTVEVNX007CisJCWJyZWFrOworCX0KKwljYXNlIE5UU0NfTl80NDM6IHsKKwkJbWFzazEgPSBOVFNDX05fNDQzOworCQlzdHJjcHkoJm5hbWUxWzBdLCAiTlRTQ19OXzQ0MyIpOworCQljb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFXzQ3MF9TWVNURU1fTTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisKKwlmb3IgKGogPSAwOyBqIDwgUkVTT0xVVElPTl9NQU5ZOyBqKyspIHsKKwkJbWFzazIgPSAweDAwMDA7CisJCXN3aXRjaCAoaikgeworCQljYXNlIEFUXzcyMHg1NzY6IHsKKwkJCWlmICgweDEgJiBtYXNrMSkKKwkJCQljb250aW51ZTsKKwkJCXN0cmNweSgmbmFtZTJbMF0sICJfQVRfNzIweDU3NiIpOworCQkJd2lkdGggPSA3MjA7IGhlaWdodCA9IDU3NjsgYnJlYWs7CisJCX0KKwkJY2FzZSBBVF83MDR4NTc2OiB7CisJCQlpZiAoMHgxICYgbWFzazEpCisJCQkJY29udGludWU7CisJCQlzdHJjcHkoJm5hbWUyWzBdLCAiX0FUXzcwNHg1NzYiKTsKKwkJCXdpZHRoID0gNzA0OyBoZWlnaHQgPSA1NzY7IGJyZWFrOworCQl9CisJCWNhc2UgQVRfNjQweDQ4MDogeworCQkJc3RyY3B5KCZuYW1lMlswXSwgIl9BVF82NDB4NDgwIik7CisJCQl3aWR0aCA9IDY0MDsgaGVpZ2h0ID0gNDgwOyBicmVhazsKKwkJfQorCQljYXNlIEFUXzcyMHg0ODA6IHsKKwkJCWlmICghKDB4MSAmIG1hc2sxKSkKKwkJCQljb250aW51ZTsKKwkJCXN0cmNweSgmbmFtZTJbMF0sICJfQVRfNzIweDQ4MCIpOworCQkJd2lkdGggPSA3MjA7IGhlaWdodCA9IDQ4MDsgYnJlYWs7CisJCX0KKwkJY2FzZSBBVF8zNjB4Mjg4OiB7CisJCQlpZiAoMHgxICYgbWFzazEpCisJCQkJY29udGludWU7CisJCQlzdHJjcHkoJm5hbWUyWzBdLCAiX0FUXzM2MHgyODgiKTsKKwkJCXdpZHRoID0gMzYwOyBoZWlnaHQgPSAyODg7IG1hc2syID0gMHgwODAwOyBicmVhazsKKwkJfQorCQljYXNlIEFUXzMyMHgyNDA6IHsKKwkJCXN0cmNweSgmbmFtZTJbMF0sICJfQVRfMzIweDI0MCIpOworCQkJd2lkdGggPSAzMjA7IGhlaWdodCA9IDI0MDsgbWFzazIgPSAweDA4MDA7IGJyZWFrOworCQl9CisJCWNhc2UgQVRfMzYweDI0MDogeworCQkJaWYgKCEoMHgxICYgbWFzazEpKQorCQkJCWNvbnRpbnVlOworCQkJc3RyY3B5KCZuYW1lMlswXSwgIl9BVF8zNjB4MjQwIik7CisJCQl3aWR0aCA9IDM2MDsgaGVpZ2h0ID0gMjQwOyBtYXNrMiA9IDB4MDgwMDsgYnJlYWs7CisJCX0KKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtMjsKKwkJfQorCisJCWZvciAoayA9IDA7IGsgPCBQSVhFTEZPUk1BVF9NQU5ZOyBrKyspIHsKKwkJCW1hc2szID0gMHgwMDAwOworCQkJc3dpdGNoIChrKSB7CisJCQljYXNlIEZNVF9VWVZZOiB7CisJCQkJc3RyY3B5KCZuYW1lM1swXSwgIl8iIFNUUklOR0laRShGTVRfVVlWWSkpOworCQkJCXBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1VZVlk7CisJCQkJbWFzazMgfD0gKDB4MDIgPDwgNCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQljYXNlIEZNVF9ZVVkyOiB7CisJCQkJc3RyY3B5KCZuYW1lM1swXSwgIl8iIFNUUklOR0laRShGTVRfWVVZMikpOworCQkJCXBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1lVWVY7CisJCQkJbWFzazMgfD0gKDB4MDIgPDwgNCk7CisJCQkJbWFzazMgfD0gMHgwMTAwOworCQkJCWJyZWFrOworCQkJfQorCQkJY2FzZSBGTVRfUkdCMjQ6IHsKKwkJCQlzdHJjcHkoJm5hbWUzWzBdLCAiXyIgU1RSSU5HSVpFKEZNVF9SR0IyNCkpOworCQkJCXBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1JHQjI0OworCQkJCW1hc2szIHw9ICgweDAzIDw8IDQpOworCQkJCWJyZWFrOworCQkJfQorCQkJY2FzZSBGTVRfUkdCMzI6IHsKKwkJCQlzdHJjcHkoJm5hbWUzWzBdLCAiXyIgU1RSSU5HSVpFKEZNVF9SR0IzMikpOworCQkJCXBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1JHQjMyOworCQkJCW1hc2szIHw9ICgweDA0IDw8IDQpOworCQkJCWJyZWFrOworCQkJfQorCQkJY2FzZSBGTVRfQkdSMjQ6IHsKKwkJCQlzdHJjcHkoJm5hbWUzWzBdLCAiXyIgU1RSSU5HSVpFKEZNVF9CR1IyNCkpOworCQkJCXBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX0JHUjI0OworCQkJCW1hc2szIHw9ICgweDAzIDw8IDQpOworCQkJCW1hc2szIHw9IDB4MDEwMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNhc2UgRk1UX0JHUjMyOiB7CisJCQkJc3RyY3B5KCZuYW1lM1swXSwgIl8iIFNUUklOR0laRShGTVRfQkdSMzIpKTsKKwkJCQlwaXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9CR1IzMjsKKwkJCQltYXNrMyB8PSAoMHgwNCA8PCA0KTsKKwkJCQltYXNrMyB8PSAweDAxMDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQlkZWZhdWx0OgorCQkJCXJldHVybiAtMzsKKwkJCX0KKwkJCWJ5dGVzcGVybGluZSA9IHdpZHRoICogKChtYXNrMyAmIDB4MDBGMCkgPj4gNCk7CisJCQlzaXplaW1hZ2UgPSAgYnl0ZXNwZXJsaW5lICogaGVpZ2h0OworCisJCQlmb3IgKG0gPSAwOyBtIDwgSU5URVJMQUNFX01BTlk7IG0rKykgeworCQkJCW1hc2s0ID0gMHgwMDAwOworCQkJCXN3aXRjaCAobSkgeworCQkJCWNhc2UgRklFTERfTk9ORTogeworCQkJCQlzdHJjcHkoJm5hbWU0WzBdLCAiLW4iKTsKKwkJCQkJZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQljYXNlIEZJRUxEX0lOVEVSTEFDRUQ6IHsKKwkJCQkJc3RyY3B5KCZuYW1lNFswXSwgIi1pIik7CisJCQkJCWZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJY2FzZSBGSUVMRF9BTFRFUk5BVEU6IHsKKwkJCQkJc3RyY3B5KCZuYW1lNFswXSwgIi1hIik7CisJCQkJCW1hc2s0IHw9IDB4MTAwMDsKKwkJCQkJZmllbGQgPSBWNEwyX0ZJRUxEX0FMVEVSTkFURTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWRlZmF1bHQ6CisJCQkJCXJldHVybiAtNDsKKwkJCQl9CisJCQkJaWYgKFNFVFRJTkdTX01BTlkgPD0gbikKKwkJCQkJcmV0dXJuIC01OworCQkJCXN0cmNweSgmZWFzeWNhcF9mb3JtYXRbbl0ubmFtZVswXSwgJm5hbWUxWzBdKTsKKwkJCQlzdHJjYXQoJmVhc3ljYXBfZm9ybWF0W25dLm5hbWVbMF0sICZuYW1lMlswXSk7CisJCQkJc3RyY2F0KCZlYXN5Y2FwX2Zvcm1hdFtuXS5uYW1lWzBdLCAmbmFtZTNbMF0pOworCQkJCXN0cmNhdCgmZWFzeWNhcF9mb3JtYXRbbl0ubmFtZVswXSwgJm5hbWU0WzBdKTsKKwkJCQllYXN5Y2FwX2Zvcm1hdFtuXS5tYXNrID0gXAorCQkJCQkJbWFzazEgfCBtYXNrMiB8IG1hc2szIHwgbWFzazQ7CisJCQkJZWFzeWNhcF9mb3JtYXRbbl0udjRsMl9mb3JtYXRcCisJCQkJCS50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQkJCWVhc3ljYXBfZm9ybWF0W25dLnY0bDJfZm9ybWF0XAorCQkJCQkuZm10LnBpeC53aWR0aCA9IHdpZHRoOworCQkJCWVhc3ljYXBfZm9ybWF0W25dLnY0bDJfZm9ybWF0XAorCQkJCQkuZm10LnBpeC5oZWlnaHQgPSBoZWlnaHQ7CisJCQkJZWFzeWNhcF9mb3JtYXRbbl0udjRsMl9mb3JtYXRcCisJCQkJCS5mbXQucGl4LnBpeGVsZm9ybWF0ID0gcGl4ZWxmb3JtYXQ7CisJCQkJZWFzeWNhcF9mb3JtYXRbbl0udjRsMl9mb3JtYXRcCisJCQkJCS5mbXQucGl4LmZpZWxkID0gZmllbGQ7CisJCQkJZWFzeWNhcF9mb3JtYXRbbl0udjRsMl9mb3JtYXRcCisJCQkJCS5mbXQucGl4LmJ5dGVzcGVybGluZSA9IGJ5dGVzcGVybGluZTsKKwkJCQllYXN5Y2FwX2Zvcm1hdFtuXS52NGwyX2Zvcm1hdFwKKwkJCQkJLmZtdC5waXguc2l6ZWltYWdlID0gc2l6ZWltYWdlOworCQkJCWVhc3ljYXBfZm9ybWF0W25dLnY0bDJfZm9ybWF0XAorCQkJCQkuZm10LnBpeC5jb2xvcnNwYWNlID0gY29sb3JzcGFjZTsKKwkJCQllYXN5Y2FwX2Zvcm1hdFtuXS52NGwyX2Zvcm1hdFwKKwkJCQkJLmZtdC5waXgucHJpdiA9IDA7CisJCQkJbisrOworCQkJfQorCQl9CisJfQorfQoraWYgKCgxICsgU0VUVElOR1NfTUFOWSkgPD0gbikKKwlyZXR1cm4gLTY7CitlYXN5Y2FwX2Zvcm1hdFtuXS5tYXNrID0gMHhGRkZGOworcmV0dXJuIG47Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgZWFzeWNhcF9jb250cm9sW10gPSBcCisge3sKKy5pZCAgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCisudHlwZSAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorLm5hbWUgICAgID0gIkJyaWdodG5lc3MiLAorLm1pbmltdW0gID0gMCwKKy5tYXhpbXVtICA9IDI1NSwKKy5zdGVwICAgICA9ICAxLAorLmRlZmF1bHRfdmFsdWUgPSBTQUFfMEFfREVGQVVMVCwKKy5mbGFncyAgICA9IDAsCisucmVzZXJ2ZWQgPSB7MCwgMH0KK30sCisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCit7CisuaWQgICAgICAgPSBWNEwyX0NJRF9DT05UUkFTVCwKKy50eXBlICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisubmFtZSAgICAgPSAiQ29udHJhc3QiLAorLm1pbmltdW0gID0gMCwKKy5tYXhpbXVtICA9IDI1NSwKKy5zdGVwICAgICA9ICAgMSwKKy5kZWZhdWx0X3ZhbHVlID0gU0FBXzBCX0RFRkFVTFQgKyAxMjgsCisuZmxhZ3MgICAgPSAwLAorLnJlc2VydmVkID0gezAsIDB9Cit9LAorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworeworLmlkICAgICAgID0gVjRMMl9DSURfU0FUVVJBVElPTiwKKy50eXBlICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisubmFtZSAgICAgPSAiU2F0dXJhdGlvbiIsCisubWluaW11bSAgPSAwLAorLm1heGltdW0gID0gMjU1LAorLnN0ZXAgICAgID0gICAxLAorLmRlZmF1bHRfdmFsdWUgPSBTQUFfMENfREVGQVVMVCArIDEyOCwKKy5mbGFncyAgICA9IDAsCisucmVzZXJ2ZWQgPSB7MCwgMH0KK30sCisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCit7CisuaWQgICAgICAgPSBWNEwyX0NJRF9IVUUsCisudHlwZSAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorLm5hbWUgICAgID0gIkh1ZSIsCisubWluaW11bSAgPSAwLAorLm1heGltdW0gID0gMjU1LAorLnN0ZXAgICAgID0gICAxLAorLmRlZmF1bHRfdmFsdWUgPSBTQUFfMERfREVGQVVMVCArIDEyOCwKKy5mbGFncyAgICA9IDAsCisucmVzZXJ2ZWQgPSB7MCwgMH0KK30sCisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCit7CisuaWQgICAgICAgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCisudHlwZSAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorLm5hbWUgICAgID0gIlZvbHVtZSIsCisubWluaW11bSAgPSAwLAorLm1heGltdW0gID0gMzEsCisuc3RlcCAgICAgPSAgIDEsCisuZGVmYXVsdF92YWx1ZSA9IDE2LAorLmZsYWdzICAgID0gMCwKKy5yZXNlcnZlZCA9IHswLCAwfQorfSwKKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK3sKKy5pZCAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCisudHlwZSAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorLm5hbWUgICAgID0gIk11dGUiLAorLmRlZmF1bHRfdmFsdWUgPSB0cnVlLAorLmZsYWdzICAgID0gMCwKKy5yZXNlcnZlZCA9IHswLCAwfQorfSwKKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK3sKKy5pZCA9IDB4RkZGRkZGRkYKK30KKyB9OworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvZWFzeWNhcF9zb3VuZC5jIGIvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvZWFzeWNhcF9zb3VuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNTYyYmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9lYXN5Y2FwX3NvdW5kLmMKQEAgLTAsMCArMSwxMDQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICBlYXN5Y2FwX3NvdW5kLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICBBdWRpbyBkcml2ZXIgZm9yIEVhc3lDQVAgVVNCMi4wIFZpZGVvIENhcHR1cmUgRGV2aWNlIERDNjAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgUi5NLiBUaG9tYXMgIDxybXRob21hc0BzY2lvbHVzLm9yZz4KKyAqCisgKgorICogIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGUgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZWFzeWNhcC5oIgorI2luY2x1ZGUgImVhc3ljYXBfZGVidWcuaCIKKyNpbmNsdWRlICJlYXN5Y2FwX3NvdW5kLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgT04gQ09NUExFVElPTiBPRiBBTiBBVURJTyBVUkIgSVRTIERBVEEgSVMgQ09QSUVEIFRPIFRIRSBBVURJTyBCVUZGRVJTCisgKiAgUFJPVklERUQgcGVhc3ljYXAtPmF1ZGlvX2lkbGUgSVMgWkVSMC4gIFJFR0FSRExFU1MgT0YgVEhJUyBCRUlORyBUUlVFLAorICogIElUIElTIFJFU1VCTUlUVEVEIFBST1ZJREVEIHBlYXN5Y2FwLT5hdWRpb19pc29jX3N0cmVhbWluZyBJUyBOT1QgWkVSTy4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZAorZWFzeXNuZF9jb21wbGV0ZShzdHJ1Y3QgdXJiICpwdXJiKQoreworc3RhdGljIGludCBtdDsKK3N0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcDsKK3N0cnVjdCBkYXRhX2J1ZmZlciAqcGF1ZGlvX2J1ZmZlcjsKK2NoYXIgZXJyYnVmWzE2XTsKK19fdTggKnAxLCAqcDI7CitfX3MxNiBzMTY7CitpbnQgaSwgaiwgbW9yZSwgbXVjaCwgbGVhcCwgcmM7CisjaWYgZGVmaW5lZChVUFNBTVBMRSkKK2ludCBrOworX19zMTYgb2xkYXVkaW8sIG5ld2F1ZGlvLCBkZWx0YTsKKyNlbmRpZiAvKlVQU0FNUExFKi8KKworSk9UKDE2LCAiXG4iKTsKKworaWYgKE5VTEwgPT0gcHVyYikgeworCVNBWSgiRVJST1I6IHB1cmIgaXMgTlVMTFxuIik7CisJcmV0dXJuOworfQorcGVhc3ljYXAgPSBwdXJiLT5jb250ZXh0OworaWYgKE5VTEwgPT0gcGVhc3ljYXApIHsKKwlTQVkoIkVSUk9SOiBwZWFzeWNhcCBpcyBOVUxMXG4iKTsKKwlyZXR1cm47Cit9CittdWNoID0gMDsKKworCitpZiAocGVhc3ljYXAtPmF1ZGlvX2lkbGUpIHsKKwlKT1QoMTYsICIlaT1hdWRpb19pZGxlICAlaT1hdWRpb19pc29jX3N0cmVhbWluZ1xuIiwgXAorCQkJcGVhc3ljYXAtPmF1ZGlvX2lkbGUsIHBlYXN5Y2FwLT5hdWRpb19pc29jX3N0cmVhbWluZyk7CisJaWYgKHBlYXN5Y2FwLT5hdWRpb19pc29jX3N0cmVhbWluZykgeworCQlyYyA9IHVzYl9zdWJtaXRfdXJiKHB1cmIsIEdGUF9BVE9NSUMpOworCQlpZiAoMCAhPSByYykgeworCQkJU0FZKCJFUlJPUjogd2hpbGUgJWk9YXVkaW9faWRsZSwgIiBcCisJCQkJCSJ1c2Jfc3VibWl0X3VyYigpIGZhaWxlZCB3aXRoIHJjOlxuIiwgXAorCQkJCQkJCXBlYXN5Y2FwLT5hdWRpb19pZGxlKTsKKwkJCXN3aXRjaCAocmMpIHsKKwkJCWNhc2UgLUVOT01FTTogeworCQkJCVNBWSgiRU5PTUVNXG4iKTsgICAgYnJlYWs7CisJCQl9CisJCQljYXNlIC1FTk9ERVY6IHsKKwkJCQlTQVkoIkVOT0RFVlxuIik7ICAgIGJyZWFrOworCQkJfQorCQkJY2FzZSAtRU5YSU86IHsKKwkJCQlTQVkoIkVOWElPXG4iKTsgICAgIGJyZWFrOworCQkJfQorCQkJY2FzZSAtRUlOVkFMOiB7CisJCQkJU0FZKCJFSU5WQUxcbiIpOyAgICBicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVBR0FJTjogeworCQkJCVNBWSgiRUFHQUlOXG4iKTsgICAgYnJlYWs7CisJCQl9CisJCQljYXNlIC1FRkJJRzogeworCQkJCVNBWSgiRUZCSUdcbiIpOyAgICAgYnJlYWs7CisJCQl9CisJCQljYXNlIC1FUElQRTogeworCQkJCVNBWSgiRVBJUEVcbiIpOyAgICAgYnJlYWs7CisJCQl9CisJCQljYXNlIC1FTVNHU0laRTogeworCQkJCVNBWSgiRU1TR1NJWkVcbiIpOyAgYnJlYWs7CisJCQl9CisJCQljYXNlIC1FTk9TUEM6IHsKKwkJCQlTQVkoIkVOT1NQQ1xuIik7ICBicmVhazsKKwkJCX0KKwkJCWRlZmF1bHQ6IHsKKwkJCQlTQVkoIjB4JTA4WFxuIiwgcmMpOyBicmVhazsKKwkJCX0KKwkJCX0KKwkJfQorCX0KK3JldHVybjsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2lmIChwdXJiLT5zdGF0dXMpIHsKKwlpZiAoLUVTSFVURE9XTiA9PSBwdXJiLT5zdGF0dXMpIHsKKwkJSk9UKDE2LCAiaW1tZWRpYXRlIHJldHVybiBiZWNhdXNlIC1FU0hVVERPV049cHVyYi0+c3RhdHVzXG4iKTsKKwkJcmV0dXJuOworCX0KKwlTQVkoIkVSUk9SOiBub24temVybyB1cmIgc3RhdHVzOlxuIik7CisJc3dpdGNoIChwdXJiLT5zdGF0dXMpIHsKKwljYXNlIC1FSU5QUk9HUkVTUzogeworCQlTQVkoIi1FSU5QUk9HUkVTU1xuIik7IGJyZWFrOworCX0KKwljYXNlIC1FTk9TUjogeworCQlTQVkoIi1FTk9TUlxuIik7IGJyZWFrOworCX0KKwljYXNlIC1FUElQRTogeworCQlTQVkoIi1FUElQRVxuIik7IGJyZWFrOworCX0KKwljYXNlIC1FT1ZFUkZMT1c6IHsKKwkJU0FZKCItRU9WRVJGTE9XXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVQUk9UTzogeworCQlTQVkoIi1FUFJPVE9cbiIpOyBicmVhazsKKwl9CisJY2FzZSAtRUlMU0VROiB7CisJCVNBWSgiLUVJTFNFUVxuIik7IGJyZWFrOworCX0KKwljYXNlIC1FVElNRURPVVQ6IHsKKwkJU0FZKCItRVRJTUVET1VUXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVNU0dTSVpFOiB7CisJCVNBWSgiLUVNU0dTSVpFXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVPUE5PVFNVUFA6IHsKKwkJU0FZKCItRU9QTk9UU1VQUFxuIik7IGJyZWFrOworCX0KKwljYXNlIC1FUEZOT1NVUFBPUlQ6IHsKKwkJU0FZKCItRVBGTk9TVVBQT1JUXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVBRk5PU1VQUE9SVDogeworCQlTQVkoIi1FQUZOT1NVUFBPUlRcbiIpOyBicmVhazsKKwl9CisJY2FzZSAtRUFERFJJTlVTRTogeworCQlTQVkoIi1FQUREUklOVVNFXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVBRERSTk9UQVZBSUw6IHsKKwkJU0FZKCItRUFERFJOT1RBVkFJTFxuIik7IGJyZWFrOworCX0KKwljYXNlIC1FTk9CVUZTOiB7CisJCVNBWSgiLUVOT0JVRlNcbiIpOyBicmVhazsKKwl9CisJY2FzZSAtRUlTQ09OTjogeworCQlTQVkoIi1FSVNDT05OXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVOT1RDT05OOiB7CisJCVNBWSgiLUVOT1RDT05OXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVTSFVURE9XTjogeworCQlTQVkoIi1FU0hVVERPV05cbiIpOyBicmVhazsKKwl9CisJY2FzZSAtRU5PRU5UOiB7CisJCVNBWSgiLUVOT0VOVFxuIik7IGJyZWFrOworCX0KKwljYXNlIC1FQ09OTlJFU0VUOiB7CisJCVNBWSgiLUVDT05OUkVTRVRcbiIpOyBicmVhazsKKwl9CisJY2FzZSAtRU5PU1BDOiB7CisJCVNBWSgiRU5PU1BDXG4iKTsgIGJyZWFrOworCX0KKwlkZWZhdWx0OiB7CisJCVNBWSgidW5rbm93biBlcnJvciBjb2RlIDB4JTA4WFxuIiwgcHVyYi0+c3RhdHVzKTsgYnJlYWs7CisJfQorCX0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgUkVTVUJNSVQgVEhJUyBVUkIgQUZURVIgQU4gRVJST1IKKyAqCisgKiAgKFRISVMgSVMgRFVQTElDQVRFIENPREUgVE8gUkVEVUNFIElOREVOVEFUSU9OIE9GIFRIRSBOTy1FUlJPUiBQQVRIKQorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJaWYgKHBlYXN5Y2FwLT5hdWRpb19pc29jX3N0cmVhbWluZykgeworCQlyYyA9IHVzYl9zdWJtaXRfdXJiKHB1cmIsIEdGUF9BVE9NSUMpOworCQlpZiAoMCAhPSByYykgeworCQkJU0FZKCJFUlJPUjogd2hpbGUgJWk9YXVkaW9faWRsZSwgdXNiX3N1Ym1pdF91cmIoKSAiCisJCQkJImZhaWxlZCB3aXRoIHJjOlxuIiwgcGVhc3ljYXAtPmF1ZGlvX2lkbGUpOworCQkJc3dpdGNoIChyYykgeworCQkJY2FzZSAtRU5PTUVNOiB7CisJCQkJU0FZKCJFTk9NRU1cbiIpOyAgICBicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVOT0RFVjogeworCQkJCVNBWSgiRU5PREVWXG4iKTsgICAgYnJlYWs7CisJCQl9CisJCQljYXNlIC1FTlhJTzogeworCQkJCVNBWSgiRU5YSU9cbiIpOyAgICAgYnJlYWs7CisJCQl9CisJCQljYXNlIC1FSU5WQUw6IHsKKwkJCQlTQVkoIkVJTlZBTFxuIik7ICAgIGJyZWFrOworCQkJfQorCQkJY2FzZSAtRUFHQUlOOiB7CisJCQkJU0FZKCJFQUdBSU5cbiIpOyAgICBicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVGQklHOiB7CisJCQkJU0FZKCJFRkJJR1xuIik7ICAgICBicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVQSVBFOiB7CisJCQkJU0FZKCJFUElQRVxuIik7ICAgICBicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVNU0dTSVpFOiB7CisJCQkJU0FZKCJFTVNHU0laRVxuIik7ICBicmVhazsKKwkJCX0KKwkJCWRlZmF1bHQ6IHsKKwkJCQlTQVkoIjB4JTA4WFxuIiwgcmMpOyBicmVhazsKKwkJCX0KKwkJCX0KKwkJfQorCX0KKwlyZXR1cm47Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFBST0NFRUQgSEVSRSBXSEVOIE5PIEVSUk9SCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZiBkZWZpbmVkKFVQU0FNUExFKQorb2xkYXVkaW8gPSBwZWFzeWNhcC0+b2xkYXVkaW87CisjZW5kaWYgLypVUFNBTVBMRSovCisKK2ZvciAoaSA9IDA7ICBpIDwgcHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCXN3aXRjaCAocHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKSB7CisJY2FzZSAgMDogeworCQlzdHJjcHkoJmVycmJ1ZlswXSwgIk9LIik7IGJyZWFrOworCX0KKwljYXNlIC1FTk9FTlQ6IHsKKwkJc3RyY3B5KCZlcnJidWZbMF0sICItRU5PRU5UIik7IGJyZWFrOworCX0KKwljYXNlIC1FSU5QUk9HUkVTUzogeworCQlzdHJjcHkoJmVycmJ1ZlswXSwgIi1FSU5QUk9HUkVTUyIpOyBicmVhazsKKwl9CisJY2FzZSAtRVBST1RPOiB7CisJCXN0cmNweSgmZXJyYnVmWzBdLCAiLUVQUk9UTyIpOyBicmVhazsKKwl9CisJY2FzZSAtRUlMU0VROiB7CisJCXN0cmNweSgmZXJyYnVmWzBdLCAiLUVJTFNFUSIpOyBicmVhazsKKwl9CisJY2FzZSAtRVRJTUU6IHsKKwkJc3RyY3B5KCZlcnJidWZbMF0sICItRVRJTUUiKTsgYnJlYWs7CisJfQorCWNhc2UgLUVUSU1FRE9VVDogeworCQlzdHJjcHkoJmVycmJ1ZlswXSwgIi1FVElNRURPVVQiKTsgYnJlYWs7CisJfQorCWNhc2UgLUVQSVBFOiB7CisJCXN0cmNweSgmZXJyYnVmWzBdLCAiLUVQSVBFIik7IGJyZWFrOworCX0KKwljYXNlIC1FQ09NTTogeworCQlzdHJjcHkoJmVycmJ1ZlswXSwgIi1FQ09NTSIpOyBicmVhazsKKwl9CisJY2FzZSAtRU5PU1I6IHsKKwkJc3RyY3B5KCZlcnJidWZbMF0sICItRU5PU1IiKTsgYnJlYWs7CisJfQorCWNhc2UgLUVPVkVSRkxPVzogeworCQlzdHJjcHkoJmVycmJ1ZlswXSwgIi1FT1ZFUkZMT1ciKTsgYnJlYWs7CisJfQorCWNhc2UgLUVSRU1PVEVJTzogeworCQlzdHJjcHkoJmVycmJ1ZlswXSwgIi1FUkVNT1RFSU8iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVOT0RFVjogeworCQlzdHJjcHkoJmVycmJ1ZlswXSwgIi1FTk9ERVYiKTsgYnJlYWs7CisJfQorCWNhc2UgLUVYREVWOiB7CisJCXN0cmNweSgmZXJyYnVmWzBdLCAiLUVYREVWIik7IGJyZWFrOworCX0KKwljYXNlIC1FSU5WQUw6IHsKKwkJc3RyY3B5KCZlcnJidWZbMF0sICItRUlOVkFMIik7IGJyZWFrOworCX0KKwljYXNlIC1FQ09OTlJFU0VUOiB7CisJCXN0cmNweSgmZXJyYnVmWzBdLCAiLUVDT05OUkVTRVQiKTsgYnJlYWs7CisJfQorCWNhc2UgLUVOT1NQQzogeworCQlzdHJjcHkoJmVycmJ1ZlswXSwgIi1FTk9TUEMiKTsgYnJlYWs7CisJfQorCWNhc2UgLUVTSFVURE9XTjogeworCQlzdHJjcHkoJmVycmJ1ZlswXSwgIi1FU0hVVERPV04iKTsgYnJlYWs7CisJfQorCWRlZmF1bHQ6IHsKKwkJc3RyY3B5KCZlcnJidWZbMF0sICJVTktOT1dOIik7IGJyZWFrOworCX0KKwl9CisJaWYgKCghcHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKSAmJiAwKSB7CisJCUpPVCgxNiwgImZyYW1lWyUyaV06ICVpPXN0YXR1c3s9JTE2c30gICIgIFwKKwkJCQkJCSIlNWk9YWN0dWFsICAiICBcCisJCQkJCQkiJTVpPWxlbmd0aCAgIiAgXAorCQkJCQkJIiUzaT1vZmZzZXRcbiIsIFwKKwkJCQlpLCBwdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMsICZlcnJidWZbMF0sCisJCQkJcHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCwKKwkJCQlwdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGgsCisJCQkJcHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0KTsKKwl9CisJaWYgKCFwdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpIHsKKwkJbW9yZSA9IHB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGg7CisKKyNpZiBkZWZpbmVkKFRFU1RUT05FKQorCQlpZiAoIW1vcmUpCisJCQltb3JlID0gcHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoOworI2VuZGlmCisKKwkJaWYgKCFtb3JlKQorCQkJbXQrKzsKKwkJZWxzZSB7CisJCQlpZiAobXQpIHsKKwkJCQlKT1QoMTYsICIlNGkgZW1wdHkgYXVkaW8gdXJiIGZyYW1lc1xuIiwgbXQpOworCQkJCW10ID0gMDsKKwkJCX0KKworCQkJcDEgPSAoX191OCAqKShwdXJiLT50cmFuc2Zlcl9idWZmZXIgKyBcCisJCQkJCXB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCk7CisKKwkJCWxlYXAgPSAwOworCQkJcDEgKz0gbGVhcDsKKwkJCW1vcmUgLT0gbGVhcDsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgQ09QWSBtb3JlIEJZVEVTIEZST00gSVNPQyBCVUZGRVIgVE8gQVVESU8gQlVGRkVSLAorICogIENPTlZFUlRJTkcgOC1CSVQgTU9OTyBUTyAxNi1CSVQgU0lHTkVEIExJVFRMRS1FTkRJQU4gU0FNUExFUyBJRiBORUNFU1NBUlkKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCQkJd2hpbGUgKG1vcmUpIHsKKwkJCQlpZiAoMCA+IG1vcmUpIHsKKwkJCQkJU0FZKCJlYXN5c25kX2NvbXBsZXRlOiBNSVNUQUtFOiAiIFwKKwkJCQkJCQkibW9yZSBpcyBuZWdhdGl2ZVxuIik7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQkJaWYgKHBlYXN5Y2FwLT5hdWRpb19idWZmZXJfcGFnZV9tYW55IDw9IFwKKwkJCQkJCQlwZWFzeWNhcC0+YXVkaW9fZmlsbCkgeworCQkJCQlTQVkoIkVSUk9SOiBiYWQgIiBcCisJCQkJCQkicGVhc3ljYXAtPmF1ZGlvX2ZpbGxcbiIpOworCQkJCQlyZXR1cm47CisJCQkJfQorCisJCQkJcGF1ZGlvX2J1ZmZlciA9ICZwZWFzeWNhcC0+YXVkaW9fYnVmZmVyXAorCQkJCQkJCVtwZWFzeWNhcC0+YXVkaW9fZmlsbF07CisJCQkJaWYgKFBBR0VfU0laRSA8IChwYXVkaW9fYnVmZmVyLT5wdG8gLSBcCisJCQkJCQlwYXVkaW9fYnVmZmVyLT5wZ28pKSB7CisJCQkJCVNBWSgiRVJST1I6IGJhZCBwYXVkaW9fYnVmZmVyLT5wdG9cbiIpOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJCWlmIChQQUdFX1NJWkUgPT0gKHBhdWRpb19idWZmZXItPnB0byAtIFwKKwkJCQkJCQlwYXVkaW9fYnVmZmVyLT5wZ28pKSB7CisKKyNpZiBkZWZpbmVkKFRFU1RUT05FKQorCQkJCQllYXN5c25kX3Rlc3R0b25lKHBlYXN5Y2FwLCBcCisJCQkJCQkJcGVhc3ljYXAtPmF1ZGlvX2ZpbGwpOworI2VuZGlmIC8qVEVTVFRPTkUqLworCisJCQkJCXBhdWRpb19idWZmZXItPnB0byA9IFwKKwkJCQkJCQlwYXVkaW9fYnVmZmVyLT5wZ287CisJCQkJCShwZWFzeWNhcC0+YXVkaW9fZmlsbCkrKzsKKwkJCQkJaWYgKHBlYXN5Y2FwLT5cCisJCQkJCQlhdWRpb19idWZmZXJfcGFnZV9tYW55IDw9IFwKKwkJCQkJCQlwZWFzeWNhcC0+YXVkaW9fZmlsbCkKKwkJCQkJCXBlYXN5Y2FwLT5hdWRpb19maWxsID0gMDsKKworCQkJCQlKT1QoMTIsICJidW1wZWQgcGVhc3ljYXAtPiIgXAorCQkJCQkJCSJhdWRpb19maWxsIHRvICVpXG4iLCBcCisJCQkJCQkJcGVhc3ljYXAtPmF1ZGlvX2ZpbGwpOworCisJCQkJCXBhdWRpb19idWZmZXIgPSAmcGVhc3ljYXAtPlwKKwkJCQkJCQlhdWRpb19idWZmZXJcCisJCQkJCQkJW3BlYXN5Y2FwLT5hdWRpb19maWxsXTsKKwkJCQkJcGF1ZGlvX2J1ZmZlci0+cHRvID0gXAorCQkJCQkJCXBhdWRpb19idWZmZXItPnBnbzsKKworCQkJCQlpZiAoIShwZWFzeWNhcC0+YXVkaW9fZmlsbCAlIFwKKwkJCQkJCXBlYXN5Y2FwLT5cCisJCQkJCQlhdWRpb19wYWdlc19wZXJfZnJhZ21lbnQpKSB7CisJCQkJCQlKT1QoMTIsICJ3YWtldXAgY2FsbCBvbiB3cV8iIFwKKwkJCQkJCSJhdWRpbywgJWk9ZnJhZyByZWFkaW5nICAlaSIgXAorCQkJCQkJIj1mcmFnbWVudCBmaWxsXG4iLCBcCisJCQkJCQkocGVhc3ljYXAtPmF1ZGlvX3JlYWQgLyBcCisJCQkJCQlwZWFzeWNhcC0+XAorCQkJCQkJYXVkaW9fcGFnZXNfcGVyX2ZyYWdtZW50KSwgXAorCQkJCQkJKHBlYXN5Y2FwLT5hdWRpb19maWxsIC8gXAorCQkJCQkJcGVhc3ljYXAtPlwKKwkJCQkJCWF1ZGlvX3BhZ2VzX3Blcl9mcmFnbWVudCkpOworCQkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlXAorCQkJCQkJKCYocGVhc3ljYXAtPndxX2F1ZGlvKSk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQltdWNoID0gUEFHRV9TSVpFIC0gKGludCkocGF1ZGlvX2J1ZmZlci0+cHRvIC1cCisJCQkJCQkJIHBhdWRpb19idWZmZXItPnBnbyk7CisKKwkJCQlpZiAoZmFsc2UgPT0gcGVhc3ljYXAtPm1pY3JvcGhvbmUpIHsKKwkJCQkJaWYgKG11Y2ggPiBtb3JlKQorCQkJCQkJbXVjaCA9IG1vcmU7CisKKwkJCQkJbWVtY3B5KHBhdWRpb19idWZmZXItPnB0bywgcDEsIG11Y2gpOworCQkJCQlwMSArPSBtdWNoOworCQkJCQltb3JlIC09IG11Y2g7CisJCQkJfSBlbHNlIHsKKyNpZiBkZWZpbmVkKFVQU0FNUExFKQorCQkJCQlpZiAobXVjaCAlIDE2KQorCQkJCQkJSk9UKDgsICJNSVNUQUtFPyBtdWNoIiBcCisJCQkJCQkiIGlzIG5vdCBkaXZpc2libGUgYnkgMTZcbiIpOworCQkJCQlpZiAobXVjaCA+ICgxNiAqIFwKKwkJCQkJCQltb3JlKSkKKwkJCQkJCW11Y2ggPSAxNiAqIFwKKwkJCQkJCQltb3JlOworCQkJCQlwMiA9IChfX3U4ICopcGF1ZGlvX2J1ZmZlci0+cHRvOworCisJCQkJCWZvciAoaiA9IDA7ICBqIDwgKG11Y2gvMTYpOyAgaisrKSB7CisJCQkJCQluZXdhdWRpbyA9ICAoKGludCkgKnAxKSAtIDEyODsKKwkJCQkJCW5ld2F1ZGlvID0gMTI4ICogXAorCQkJCQkJCQluZXdhdWRpbzsKKworCQkJCQkJZGVsdGEgPSAobmV3YXVkaW8gLSBvbGRhdWRpbykgXAorCQkJCQkJCQkJLyA0OworCQkJCQkJczE2ID0gb2xkYXVkaW8gKyBkZWx0YTsKKworCQkJCQkJZm9yIChrID0gMDsgIGsgPCA0OyAgaysrKSB7CisJCQkJCQkJKnAyID0gKDB4MDBGRiAmIHMxNik7CisJCQkJCQkJKihwMiArIDEpID0gKDB4RkYwMCAmIFwKKwkJCQkJCQkJczE2KSA+PiA4OworCQkJCQkJCXAyICs9IDI7CisJCQkJCQkJKnAyID0gKDB4MDBGRiAmIHMxNik7CisJCQkJCQkJKihwMiArIDEpID0gKDB4RkYwMCAmIFwKKwkJCQkJCQkJczE2KSA+PiA4OworCQkJCQkJCXAyICs9IDI7CisKKwkJCQkJCQlzMTYgKz0gZGVsdGE7CisJCQkJCQl9CisJCQkJCQlwMSsrOworCQkJCQkJbW9yZS0tOworCQkJCQkJb2xkYXVkaW8gPSBzMTY7CisJCQkJCX0KKyNlbHNlCisJCQkJCWlmIChtdWNoID4gKDIgKiBtb3JlKSkKKwkJCQkJCW11Y2ggPSAyICogbW9yZTsKKwkJCQkJcDIgPSAoX191OCAqKXBhdWRpb19idWZmZXItPnB0bzsKKworCQkJCQlmb3IgKGogPSAwOyAgaiA8IChtdWNoIC8gMik7ICBqKyspIHsKKwkJCQkJCXMxNiA9ICAoKGludCkgKnAxKSAtIDEyODsKKwkJCQkJCXMxNiA9IDEyOCAqIFwKKwkJCQkJCQkJczE2OworCQkJCQkJKnAyID0gKDB4MDBGRiAmIHMxNik7CisJCQkJCQkqKHAyICsgMSkgPSAoMHhGRjAwICYgczE2KSA+PiBcCisJCQkJCQkJCQk4OworCQkJCQkJcDErKzsgIHAyICs9IDI7CisJCQkJCQltb3JlLS07CisJCQkJCX0KKyNlbmRpZiAvKlVQU0FNUExFKi8KKwkJCQl9CisJCQkJKHBhdWRpb19idWZmZXItPnB0bykgKz0gbXVjaDsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCUpPVCgxMiwgImRpc2NhcmRpbmcgYXVkaW8gc2FtcGxlcyBiZWNhdXNlICIgXAorCQkJIiVpPXB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1c1xuIiwgXAorCQkJCXB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyk7CisJfQorCisjaWYgZGVmaW5lZChVUFNBTVBMRSkKK3BlYXN5Y2FwLT5vbGRhdWRpbyA9IG9sZGF1ZGlvOworI2VuZGlmIC8qVVBTQU1QTEUqLworCit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFJFU1VCTUlUIFRISVMgVVJCIEFGVEVSIE5PIEVSUk9SCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2lmIChwZWFzeWNhcC0+YXVkaW9faXNvY19zdHJlYW1pbmcpIHsKKwlyYyA9IHVzYl9zdWJtaXRfdXJiKHB1cmIsIEdGUF9BVE9NSUMpOworCWlmICgwICE9IHJjKSB7CisJCVNBWSgiRVJST1I6IHdoaWxlICVpPWF1ZGlvX2lkbGUsIHVzYl9zdWJtaXRfdXJiKCkgZmFpbGVkICIgXAorCQkJCQkid2l0aCByYzpcbiIsIHBlYXN5Y2FwLT5hdWRpb19pZGxlKTsKKwkJc3dpdGNoIChyYykgeworCQljYXNlIC1FTk9NRU06IHsKKwkJCVNBWSgiRU5PTUVNXG4iKTsgICAgYnJlYWs7CisJCX0KKwkJY2FzZSAtRU5PREVWOiB7CisJCQlTQVkoIkVOT0RFVlxuIik7ICAgIGJyZWFrOworCQl9CisJCWNhc2UgLUVOWElPOiB7CisJCQlTQVkoIkVOWElPXG4iKTsgICAgIGJyZWFrOworCQl9CisJCWNhc2UgLUVJTlZBTDogeworCQkJU0FZKCJFSU5WQUxcbiIpOyAgICBicmVhazsKKwkJfQorCQljYXNlIC1FQUdBSU46IHsKKwkJCVNBWSgiRUFHQUlOXG4iKTsgICAgYnJlYWs7CisJCX0KKwkJY2FzZSAtRUZCSUc6IHsKKwkJCVNBWSgiRUZCSUdcbiIpOyAgICAgYnJlYWs7CisJCX0KKwkJY2FzZSAtRVBJUEU6IHsKKwkJCVNBWSgiRVBJUEVcbiIpOyAgICAgYnJlYWs7CisJCX0KKwkJY2FzZSAtRU1TR1NJWkU6IHsKKwkJCVNBWSgiRU1TR1NJWkVcbiIpOyAgYnJlYWs7CisJCX0KKwkJY2FzZSAtRU5PU1BDOiB7CisJCQlTQVkoIkVOT1NQQ1xuIik7ICBicmVhazsKKwkJfQorCQlkZWZhdWx0OiB7CisJCQlTQVkoIjB4JTA4WFxuIiwgcmMpOyBicmVhazsKKwkJfQorCQl9CisJfQorfQorcmV0dXJuOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBUSEUgQVVESU8gVVJCUyBBUkUgU1VCTUlUVEVEIEFUIFRISVMgRUFSTFkgU1RBR0UgU08gVEhBVCBJVCBJUyBQT1NTSUJMRSBUTworICogIFNUUkVBTSBGUk9NIC9kZXYvZWFzeXNuZDEgV0lUSCBTSU1QTEUgUFJPR1JBTVMgU1VDSCBBUyBjYXQgV0hJQ0ggRE8gTk9UCisgKiAgSEFWRSBBTiBJT0NUTCBJTlRFUkZBQ0UuICBUSEUgVklERU8gVVJCUywgQlkgQ09OVFJBU1QsIE1VU1QgQkUgU1VCTUlUVEVECisgKiAgTVVDSCBMQVRFUjogU0VFIENPTU1FTlRTIElOIEZJTEUgZWFzeWNhcF9tYWluLmMuCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludAorZWFzeXNuZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworc3RydWN0IHVzYl9pbnRlcmZhY2UgKnB1c2JfaW50ZXJmYWNlOworc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwOworaW50IHN1Ym1pbm9yLCByYzsKKworSk9UKDQsICJiZWdpbnMuXG4iKTsKKworc3VibWlub3IgPSBpbWlub3IoaW5vZGUpOworCitwdXNiX2ludGVyZmFjZSA9IHVzYl9maW5kX2ludGVyZmFjZSgmZWFzeWNhcF91c2JfZHJpdmVyLCBzdWJtaW5vcik7CitpZiAoTlVMTCA9PSBwdXNiX2ludGVyZmFjZSkgeworCVNBWSgiRVJST1I6IHB1c2JfaW50ZXJmYWNlIGlzIE5VTExcbiIpOworCVNBWSgiZW5kaW5nIHVuc3VjY2Vzc2Z1bGx5XG4iKTsKKwlyZXR1cm4gLTE7Cit9CitwZWFzeWNhcCA9IHVzYl9nZXRfaW50ZmRhdGEocHVzYl9pbnRlcmZhY2UpOworaWYgKE5VTEwgPT0gcGVhc3ljYXApIHsKKwlTQVkoIkVSUk9SOiBwZWFzeWNhcCBpcyBOVUxMXG4iKTsKKwlTQVkoImVuZGluZyB1bnN1Y2Nlc3NmdWxseVxuIik7CisJcmV0dXJuIC0xOworfQorCitmaWxlLT5wcml2YXRlX2RhdGEgPSBwZWFzeWNhcDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBJTklUSUFMSVpBVElPTi4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworSk9UKDQsICJzdGFydGluZyBpbml0aWFsaXphdGlvblxuIik7CisKK2lmICgoc3RydWN0IHVzYl9kZXZpY2UgKilOVUxMID09IHBlYXN5Y2FwLT5wdXNiX2RldmljZSkgeworCVNBWSgiRVJST1I6IHBlYXN5Y2FwLT5wdXNiX2RldmljZSBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30gZWxzZSB7CisJSk9UKDE2LCAiMHglMDhsWD1wZWFzeWNhcC0+cHVzYl9kZXZpY2VcbiIsIFwKKwkJCQkJKGxvbmcgaW50KXBlYXN5Y2FwLT5wdXNiX2RldmljZSk7Cit9CisKK3JjID0gYXVkaW9fc2V0dXAocGVhc3ljYXApOworaWYgKDAgPD0gcmMpCisJSk9UKDgsICJhdWRpb19zZXR1cCgpIHJldHVybmVkICVpXG4iLCByYyk7CitlbHNlCisJSk9UKDgsICJlYXN5c25kIG9wZW4oKTogRVJST1I6IGF1ZGlvX3NldHVwKCkgcmV0dXJuZWQgJWlcbiIsIHJjKTsKKworaWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgPT0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlKSB7CisJU0FZKCJFUlJPUjogcGVhc3ljYXAtPnB1c2JfZGV2aWNlIGhhcyBiZWNvbWUgTlVMTFxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CityYyA9IGFkanVzdF92b2x1bWUocGVhc3ljYXAsIC04MTkyKTsKK2lmICgwICE9IHJjKSB7CisJU0FZKCJFUlJPUjogYWRqdXN0X3ZvbHVtZShkZWZhdWx0KSByZXR1cm5lZCAlaVxuIiwgcmMpOworCXJldHVybiAtRUZBVUxUOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgPT0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlKSB7CisJU0FZKCJFUlJPUjogcGVhc3ljYXAtPnB1c2JfZGV2aWNlIGhhcyBiZWNvbWUgTlVMTFxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CityYyA9IHVzYl9zZXRfaW50ZXJmYWNlKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgcGVhc3ljYXAtPmF1ZGlvX2ludGVyZmFjZSwgXAorCQkJCQlwZWFzeWNhcC0+YXVkaW9fYWx0c2V0dGluZ19vbik7CitKT1QoOCwgInVzYl9zZXRfaW50ZXJmYWNlKC4sJWksJWkpIHJldHVybmVkICVpXG4iLCBwZWFzeWNhcC0+YXVkaW9faW50ZXJmYWNlLCBcCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19hbHRzZXR0aW5nX29uLCByYyk7CisKK2lmICgoc3RydWN0IHVzYl9kZXZpY2UgKilOVUxMID09IHBlYXN5Y2FwLT5wdXNiX2RldmljZSkgeworCVNBWSgiRVJST1I6IHBlYXN5Y2FwLT5wdXNiX2RldmljZSBoYXMgYmVjb21lIE5VTExcbiIpOworCXJldHVybiAtRUZBVUxUOworfQorcmMgPSB3YWtldXBfZGV2aWNlKHBlYXN5Y2FwLT5wdXNiX2RldmljZSk7CitpZiAoMCA9PSByYykKKwlKT1QoOCwgIndha2V1cF9kZXZpY2UoKSByZXR1cm5lZCAlaVxuIiwgcmMpOworZWxzZQorCUpPVCg4LCAiZWFzeXNuZCBvcGVuKCk6IEVSUk9SOiB3YWtldXBfZGV2aWNlKCkgcmV0dXJuZWQgJWlcbiIsIHJjKTsKKworaWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgPT0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlKSB7CisJU0FZKCJFUlJPUjogcGVhc3ljYXAtPnB1c2JfZGV2aWNlIGhhcyBiZWNvbWUgTlVMTFxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CitzdWJtaXRfYXVkaW9fdXJicyhwZWFzeWNhcCk7CitwZWFzeWNhcC0+YXVkaW9faWRsZSA9IDA7CisKK3BlYXN5Y2FwLT50aW1ldmFsMS50dl9zZWMgID0gMDsKK3BlYXN5Y2FwLT50aW1ldmFsMS50dl91c2VjID0gMDsKKworSk9UKDQsICJmaW5pc2hlZCBpbml0aWFsaXphdGlvblxuIik7CityZXR1cm4gMDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludAorZWFzeXNuZF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwOworCitKT1QoNCwgImJlZ2luc1xuIik7CisKK3BlYXN5Y2FwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworaWYgKE5VTEwgPT0gcGVhc3ljYXApIHsKKwlTQVkoIkVSUk9SOiAgcGVhc3ljYXAgaXMgTlVMTC5cbiIpOworCXJldHVybiAtRUZBVUxUOworfQoraWYgKDAgIT0ga2lsbF9hdWRpb191cmJzKHBlYXN5Y2FwKSkgeworCVNBWSgiRVJST1I6IGtpbGxfYXVkaW9fdXJicygpIGZhaWxlZFxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CitKT1QoNCwgImVuZGluZyBzdWNjZXNzZnVsbHlcbiIpOworcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzc2l6ZV90CitlYXN5c25kX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpwdXNlcnNwYWNlYnVmZmVyLCBcCisJCQkJCQlzaXplX3Qga291bnQsIGxvZmZfdCAqcG9mZikKK3sKK3N0cnVjdCB0aW1ldmFsIHRpbWV2YWw7CitzdGF0aWMgc3RydWN0IHRpbWV2YWwgdGltZXZhbDE7CitzdGF0aWMgbG9uZyBsb25nIGludCBhdWRpb19ieXRlcywgYWJvdmUsIGJlbG93LCBtZWFuOworc3RydWN0IHNpZ25lZF9kaXZfcmVzdWx0IHNkcjsKK3Vuc2lnbmVkIGNoYXIgKnAwOworbG9uZyBpbnQga291bnQxLCBtb3JlLCByYywgbDAsIGxtOworaW50IGZyYWdtZW50Oworc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwOworc3RydWN0IGRhdGFfYnVmZmVyICpwZGF0YV9idWZmZXI7CitzaXplX3Qgc3pyZXQ7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgRE8gQSBCTE9DS0lORyBSRUFEIFRPIFRSQU5TRkVSIERBVEEgVE8gVVNFUiBTUEFDRS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKiogIE4uQi4gIElGIFRISVMgRlVOQ1RJT04gUkVUVVJOUyAwLCBOT1RISU5HIElTIFNFRU4gSU4gVVNFUiBTUEFDRS4gKioqKioqCisgKioqKiogICAgICAgIFRISVMgQ09ORElUSU9OIFNJR05JRklFUyBFTkQtT0YtRklMRS4gICAgICAgICAgICAgICAgICAgICAgKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworSk9UKDgsICI9PT09PSBlYXN5c25kX3JlYWQoKToga291bnQ9JWksICpwb2ZmPSVpXG4iLCAoaW50KWtvdW50LCAoaW50KSgqcG9mZikpOworCitwZWFzeWNhcCA9IChzdHJ1Y3QgZWFzeWNhcCAqKShmaWxlLT5wcml2YXRlX2RhdGEpOworaWYgKE5VTEwgPT0gcGVhc3ljYXApIHsKKwlTQVkoIkVSUk9SIGluIGVhc3lzbmRfcmVhZCgpOiBwZWFzeWNhcCBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2lmICgoMCA+IHBlYXN5Y2FwLT5hdWRpb19yZWFkKSB8fCBcCisJCShwZWFzeWNhcC0+YXVkaW9fYnVmZmVyX3BhZ2VfbWFueSA8PSBwZWFzeWNhcC0+YXVkaW9fcmVhZCkpIHsKKwlTQVkoIkVSUk9SOiBwZWFzeWNhcC0+YXVkaW9fcmVhZCBvdXQgb2YgcmFuZ2VcbiIpOworCXJldHVybiAtRUZBVUxUOworfQorcGRhdGFfYnVmZmVyID0gJnBlYXN5Y2FwLT5hdWRpb19idWZmZXJbcGVhc3ljYXAtPmF1ZGlvX3JlYWRdOworaWYgKChzdHJ1Y3QgZGF0YV9idWZmZXIgKilOVUxMID09IHBkYXRhX2J1ZmZlcikgeworCVNBWSgiRVJST1I6IHBkYXRhX2J1ZmZlciBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KK0pPVCgxMiwgImJlZm9yZSB3YWl0LCAlaT1mcmFnIHJlYWQgICVpPWZyYWcgZmlsbFxuIiwgXAorCQkocGVhc3ljYXAtPmF1ZGlvX3JlYWQgLyBwZWFzeWNhcC0+YXVkaW9fcGFnZXNfcGVyX2ZyYWdtZW50KSwgXAorCQkocGVhc3ljYXAtPmF1ZGlvX2ZpbGwgLyBwZWFzeWNhcC0+YXVkaW9fcGFnZXNfcGVyX2ZyYWdtZW50KSk7CitmcmFnbWVudCA9IChwZWFzeWNhcC0+YXVkaW9fcmVhZCAvIHBlYXN5Y2FwLT5hdWRpb19wYWdlc19wZXJfZnJhZ21lbnQpOword2hpbGUgKChmcmFnbWVudCA9PSAocGVhc3ljYXAtPmF1ZGlvX2ZpbGwgLyBcCisJCQkJcGVhc3ljYXAtPmF1ZGlvX3BhZ2VzX3Blcl9mcmFnbWVudCkpIHx8IFwKKwkJKDAgPT0gKFBBR0VfU0laRSAtIChwZGF0YV9idWZmZXItPnB0byAtIHBkYXRhX2J1ZmZlci0+cGdvKSkpKSB7CisJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCUpPVCgxNiwgInJldHVybmluZyAtRUFHQUlOIGFzIGluc3RydWN0ZWRcbiIpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisJcmMgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocGVhc3ljYXAtPndxX2F1ZGlvLCBcCisJCShwZWFzeWNhcC0+YXVkaW9faWRsZSAgfHwgcGVhc3ljYXAtPmF1ZGlvX2VvZiAgIHx8IFwKKwkJKChmcmFnbWVudCAhPSAocGVhc3ljYXAtPmF1ZGlvX2ZpbGwgLyBcCisJCQkJcGVhc3ljYXAtPmF1ZGlvX3BhZ2VzX3Blcl9mcmFnbWVudCkpICYmIFwKKwkJKDAgPCAoUEFHRV9TSVpFIC0gKHBkYXRhX2J1ZmZlci0+cHRvIC0gcGRhdGFfYnVmZmVyLT5wZ28pKSkpKSk7CisJaWYgKDAgIT0gcmMpIHsKKwkJU0FZKCJhYm9ydGVkIGJ5IHNpZ25hbFxuIik7CisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJfQorCWlmIChwZWFzeWNhcC0+YXVkaW9fZW9mKSB7CisJCUpPVCg4LCAicmV0dXJuaW5nIDAgYmVjYXVzZSAgJWk9YXVkaW9fZW9mXG4iLCBcCisJCQkJCQkJcGVhc3ljYXAtPmF1ZGlvX2VvZik7CisJCWtpbGxfYXVkaW9fdXJicyhwZWFzeWNhcCk7CisJCW1zbGVlcCg1MDApOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKHBlYXN5Y2FwLT5hdWRpb19pZGxlKSB7CisJCUpPVCgxNiwgInJldHVybmluZyAwIGJlY2F1c2UgICVpPWF1ZGlvX2lkbGVcbiIsIFwKKwkJCQkJCQlwZWFzeWNhcC0+YXVkaW9faWRsZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXBlYXN5Y2FwLT5hdWRpb19pc29jX3N0cmVhbWluZykgeworCQlKT1QoMTYsICJyZXR1cm5pbmcgMCBiZWNhdXNlIGF1ZGlvIHVyYnMgbm90IHN0cmVhbWluZ1xuIik7CisJCXJldHVybiAwOworCX0KK30KK0pPVCgxMiwgImFmdGVyICB3YWl0LCAlaT1mcmFnIHJlYWQgICVpPWZyYWcgZmlsbFxuIiwgXAorCQkocGVhc3ljYXAtPmF1ZGlvX3JlYWQgLyBwZWFzeWNhcC0+YXVkaW9fcGFnZXNfcGVyX2ZyYWdtZW50KSwgXAorCQkocGVhc3ljYXAtPmF1ZGlvX2ZpbGwgLyBwZWFzeWNhcC0+YXVkaW9fcGFnZXNfcGVyX2ZyYWdtZW50KSk7CitzenJldCA9IChzaXplX3QpMDsKK3doaWxlIChmcmFnbWVudCA9PSAocGVhc3ljYXAtPmF1ZGlvX3JlYWQgLyBcCisJCQkJcGVhc3ljYXAtPmF1ZGlvX3BhZ2VzX3Blcl9mcmFnbWVudCkpIHsKKwlpZiAoTlVMTCA9PSBwZGF0YV9idWZmZXItPnBnbykgeworCQlTQVkoIkVSUk9SOiBwZGF0YV9idWZmZXItPnBnbyBpcyBOVUxMXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWlmIChOVUxMID09IHBkYXRhX2J1ZmZlci0+cHRvKSB7CisJCVNBWSgiRVJST1I6IHBkYXRhX2J1ZmZlci0+cHRvIGlzIE5VTExcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJa291bnQxID0gUEFHRV9TSVpFIC0gKHBkYXRhX2J1ZmZlci0+cHRvIC0gcGRhdGFfYnVmZmVyLT5wZ28pOworCWlmICgwID4ga291bnQxKSB7CisJCVNBWSgiZWFzeXNuZF9yZWFkOiBNSVNUQUtFOiBrb3VudDEgaXMgbmVnYXRpdmVcbiIpOworCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KKwlpZiAoIWtvdW50MSkgeworCQkocGVhc3ljYXAtPmF1ZGlvX3JlYWQpKys7CisJCWlmIChwZWFzeWNhcC0+YXVkaW9fYnVmZmVyX3BhZ2VfbWFueSA8PSBwZWFzeWNhcC0+YXVkaW9fcmVhZCkKKwkJCXBlYXN5Y2FwLT5hdWRpb19yZWFkID0gMDsKKwkJSk9UKDEyLCAiYnVtcGVkIHBlYXN5Y2FwLT5hdWRpb19yZWFkIHRvICVpXG4iLCBcCisJCQkJCQlwZWFzeWNhcC0+YXVkaW9fcmVhZCk7CisKKwkJaWYgKGZyYWdtZW50ICE9IChwZWFzeWNhcC0+YXVkaW9fcmVhZCAvIFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX3BhZ2VzX3Blcl9mcmFnbWVudCkpCisJCQlicmVhazsKKworCQlpZiAoKDAgPiBwZWFzeWNhcC0+YXVkaW9fcmVhZCkgfHwgXAorCQkJKHBlYXN5Y2FwLT5hdWRpb19idWZmZXJfcGFnZV9tYW55IDw9IFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX3JlYWQpKSB7CisJCQlTQVkoIkVSUk9SOiBwZWFzeWNhcC0+YXVkaW9fcmVhZCBvdXQgb2YgcmFuZ2VcbiIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJcGRhdGFfYnVmZmVyID0gJnBlYXN5Y2FwLT5hdWRpb19idWZmZXJbcGVhc3ljYXAtPmF1ZGlvX3JlYWRdOworCQlpZiAoKHN0cnVjdCBkYXRhX2J1ZmZlciAqKU5VTEwgPT0gcGRhdGFfYnVmZmVyKSB7CisJCQlTQVkoIkVSUk9SOiBwZGF0YV9idWZmZXIgaXMgTlVMTFxuIik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQlpZiAoTlVMTCA9PSBwZGF0YV9idWZmZXItPnBnbykgeworCQkJU0FZKCJFUlJPUjogcGRhdGFfYnVmZmVyLT5wZ28gaXMgTlVMTFxuIik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQlpZiAoTlVMTCA9PSBwZGF0YV9idWZmZXItPnB0bykgeworCQkJU0FZKCJFUlJPUjogcGRhdGFfYnVmZmVyLT5wdG8gaXMgTlVMTFxuIik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQlrb3VudDEgPSBQQUdFX1NJWkUgLSAocGRhdGFfYnVmZmVyLT5wdG8gLSBwZGF0YV9idWZmZXItPnBnbyk7CisJfQorCUpPVCgxMiwgInJlYWR5ICB0byBzZW5kICVsaSBieXRlc1xuIiwgKGxvbmcgaW50KSBrb3VudDEpOworCUpPVCgxMiwgInN0aWxsICB0byBzZW5kICVsaSBieXRlc1xuIiwgKGxvbmcgaW50KSBrb3VudCk7CisJbW9yZSA9IGtvdW50MTsKKwlpZiAobW9yZSA+IGtvdW50KQorCQltb3JlID0ga291bnQ7CisJSk9UKDEyLCAiYWdyZWVkIHRvIHNlbmQgJWxpIGJ5dGVzIGZyb20gcGFnZSAlaVxuIiwgXAorCQkJCQkJbW9yZSwgcGVhc3ljYXAtPmF1ZGlvX3JlYWQpOworCWlmICghbW9yZSkKKwkJYnJlYWs7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgQUNDVU1VTEFURSBEWU5BTUlDLVJBTkdFIElORk9STUFUSU9OCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlwMCA9ICh1bnNpZ25lZCBjaGFyICopcGRhdGFfYnVmZmVyLT5wZ287ICBsMCA9IDA7ICBsbSA9IG1vcmUvMjsKKwl3aGlsZSAobDAgPCBsbSkgeworCQlTVU1NRVIocDAsICZwZWFzeWNhcC0+YXVkaW9fc2FtcGxlLCAmcGVhc3ljYXAtPmF1ZGlvX25pdmVhdSwgXAorCQkJCSZwZWFzeWNhcC0+YXVkaW9fc3F1YXJlKTsgIGwwKys7ICBwMCArPSAyOworCX0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlyYyA9IGNvcHlfdG9fdXNlcihwdXNlcnNwYWNlYnVmZmVyLCBwZGF0YV9idWZmZXItPnB0bywgbW9yZSk7CisJaWYgKDAgIT0gcmMpIHsKKwkJU0FZKCJFUlJPUjogY29weV90b191c2VyKCkgcmV0dXJuZWQgJWxpXG4iLCByYyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwkqcG9mZiArPSAobG9mZl90KW1vcmU7CisJc3pyZXQgKz0gKHNpemVfdCltb3JlOworCXBkYXRhX2J1ZmZlci0+cHRvICs9IG1vcmU7CisJcHVzZXJzcGFjZWJ1ZmZlciArPSBtb3JlOworCWtvdW50IC09IChzaXplX3QpbW9yZTsKK30KK0pPVCgxMiwgImFmdGVyICByZWFkLCAlaT1mcmFnIHJlYWQgICVpPWZyYWcgZmlsbFxuIiwgXAorCQkocGVhc3ljYXAtPmF1ZGlvX3JlYWQgLyBwZWFzeWNhcC0+YXVkaW9fcGFnZXNfcGVyX2ZyYWdtZW50KSwgXAorCQkocGVhc3ljYXAtPmF1ZGlvX2ZpbGwgLyBwZWFzeWNhcC0+YXVkaW9fcGFnZXNfcGVyX2ZyYWdtZW50KSk7CitpZiAoa291bnQgPCAwKSB7CisJU0FZKCJNSVNUQUtFOiAgJWxpPWtvdW50ICAlbGk9c3pyZXRcbiIsIFwKKwkJCQkJKGxvbmcgaW50KWtvdW50LCAobG9uZyBpbnQpc3pyZXQpOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBDQUxDVUxBVEUgRFlOQU1JQyBSQU5HRSBGT1IgKFZBUE9VUldBUkUpIEFVVE9NQVRJQyBWT0xVTUUgQ09OVFJPTAorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpZiAocGVhc3ljYXAtPmF1ZGlvX3NhbXBsZSkgeworCWJlbG93ID0gcGVhc3ljYXAtPmF1ZGlvX3NhbXBsZTsKKwlhYm92ZSA9IHBlYXN5Y2FwLT5hdWRpb19zcXVhcmU7CisJc2RyID0gc2lnbmVkX2RpdihhYm92ZSwgYmVsb3cpOworCWFib3ZlID0gc2RyLnF1b3RpZW50OworCW1lYW4gPSBwZWFzeWNhcC0+YXVkaW9fbml2ZWF1OworCXNkciA9IHNpZ25lZF9kaXYobWVhbiwgcGVhc3ljYXAtPmF1ZGlvX3NhbXBsZSk7CisKKwlKT1QoOCwgIiU4bGxpPW1lYW4gICU4bGxpPW1lYW5zcXVhcmUgYWZ0ZXIgJWxsaSBzYW1wbGVzLCA9PlxuIiwgXAorCQkJCXNkci5xdW90aWVudCwgYWJvdmUsIHBlYXN5Y2FwLT5hdWRpb19zYW1wbGUpOworCisJc2RyID0gc2lnbmVkX2RpdihhYm92ZSwgMzI3NjgpOworCUpPVCg4LCAiYXVkaW8gZHluYW1pYyByYW5nZSBpcyByb3VnaGx5ICVsbGlcbiIsIHNkci5xdW90aWVudCk7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFVQREFURSBUSEUgQVVESU8gQ0xPQ0sKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworZG9fZ2V0dGltZW9mZGF5KCZ0aW1ldmFsKTsKK2lmICghcGVhc3ljYXAtPnRpbWV2YWwxLnR2X3NlYykgeworCWF1ZGlvX2J5dGVzID0gMDsKKwl0aW1ldmFsMSA9IHRpbWV2YWw7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCYocGVhc3ljYXAtPm11dGV4X3RpbWV2YWwxKSkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJcGVhc3ljYXAtPnRpbWV2YWwxID0gdGltZXZhbDE7CisJbXV0ZXhfdW5sb2NrKCYocGVhc3ljYXAtPm11dGV4X3RpbWV2YWwxKSk7CisJc2RyLnF1b3RpZW50ID0gMTkyMDAwOworfSBlbHNlIHsKKwlhdWRpb19ieXRlcyArPSAobG9uZyBsb25nIGludCkgc3pyZXQ7CisJYmVsb3cgPSAoKGxvbmcgbG9uZyBpbnQpKDEwMDAwMDApKSAqIFwKKwkJKChsb25nIGxvbmcgaW50KSh0aW1ldmFsLnR2X3NlYyAgLSB0aW1ldmFsMS50dl9zZWMpKSArIFwKKwkJKGxvbmcgbG9uZyBpbnQpKHRpbWV2YWwudHZfdXNlYyAtIHRpbWV2YWwxLnR2X3VzZWMpOworCWFib3ZlID0gMTAwMDAwMCAqICgobG9uZyBsb25nIGludCkgYXVkaW9fYnl0ZXMpOworCisJaWYgKGJlbG93KQorCQlzZHIgPSBzaWduZWRfZGl2KGFib3ZlLCBiZWxvdyk7CisJZWxzZQorCQlzZHIucXVvdGllbnQgPSAxOTIwMDA7Cit9CitKT1QoOCwgImF1ZGlvIHN0cmVhbWluZyBhdCAlbGxpIGJ5dGVzL3NlY29uZFxuIiwgc2RyLnF1b3RpZW50KTsKK2lmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJihwZWFzeWNhcC0+bXV0ZXhfdGltZXZhbDEpKSkKKwlyZXR1cm4gLUVSRVNUQVJUU1lTOworcGVhc3ljYXAtPmRuYnlkdCA9IHNkci5xdW90aWVudDsKK211dGV4X3VubG9jaygmKHBlYXN5Y2FwLT5tdXRleF90aW1ldmFsMSkpOworCitKT1QoOCwgInJldHVybmluZyAlbGlcbiIsIChsb25nIGludClzenJldCk7CityZXR1cm4gc3pyZXQ7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFNVQk1JVCBBTEwgQVVESU8gVVJCUy4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CitzdWJtaXRfYXVkaW9fdXJicyhzdHJ1Y3QgZWFzeWNhcCAqcGVhc3ljYXApCit7CitzdHJ1Y3QgZGF0YV91cmIgKnBkYXRhX3VyYjsKK3N0cnVjdCB1cmIgKnB1cmI7CitzdHJ1Y3QgbGlzdF9oZWFkICpwbGlzdF9oZWFkOworaW50IGosIGlzYmFkLCBtLCByYzsKK2ludCBpc2J1ZjsKKworaWYgKChzdHJ1Y3QgbGlzdF9oZWFkICopTlVMTCA9PSBwZWFzeWNhcC0+cHVyYl9hdWRpb19oZWFkKSB7CisJU0FZKCJFUlJPUjogcGVhc3ljYXAtPnVyYl9hdWRpb19oZWFkIHVuaW5pdGlhbGl6ZWRcbiIpOworCXJldHVybiAtRUZBVUxUOworfQoraWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgPT0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlKSB7CisJU0FZKCJFUlJPUjogcGVhc3ljYXAtPnB1c2JfZGV2aWNlIGlzIE5VTExcbiIpOworCXJldHVybiAtRUZBVUxUOworfQoraWYgKCFwZWFzeWNhcC0+YXVkaW9faXNvY19zdHJlYW1pbmcpIHsKKwlKT1QoNCwgImluaXRpYWwgc3VibWlzc2lvbiBvZiBhbGwgYXVkaW8gdXJic1xuIik7CisJcmMgPSB1c2Jfc2V0X2ludGVyZmFjZShwZWFzeWNhcC0+cHVzYl9kZXZpY2UsCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19pbnRlcmZhY2UsIFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX2FsdHNldHRpbmdfb24pOworCUpPVCg4LCAidXNiX3NldF9pbnRlcmZhY2UoLiwlaSwlaSkgcmV0dXJuZWQgJWlcbiIsIFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX2ludGVyZmFjZSwgXAorCQkJCQlwZWFzeWNhcC0+YXVkaW9fYWx0c2V0dGluZ19vbiwgcmMpOworCisJaXNiYWQgPSAwOyAgbSA9IDA7CisJbGlzdF9mb3JfZWFjaChwbGlzdF9oZWFkLCAocGVhc3ljYXAtPnB1cmJfYXVkaW9faGVhZCkpIHsKKwkJcGRhdGFfdXJiID0gbGlzdF9lbnRyeShwbGlzdF9oZWFkLCBzdHJ1Y3QgZGF0YV91cmIsIGxpc3RfaGVhZCk7CisJCWlmIChOVUxMICE9IHBkYXRhX3VyYikgeworCQkJcHVyYiA9IHBkYXRhX3VyYi0+cHVyYjsKKwkJCWlmIChOVUxMICE9IHB1cmIpIHsKKwkJCQlpc2J1ZiA9IHBkYXRhX3VyYi0+aXNidWY7CisKKwkJCQlwdXJiLT5pbnRlcnZhbCA9IDE7CisJCQkJcHVyYi0+ZGV2ID0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlOworCQkJCXB1cmItPnBpcGUgPSBcCisJCQkJCXVzYl9yY3Zpc29jcGlwZShwZWFzeWNhcC0+cHVzYl9kZXZpY2UsXAorCQkJCQlwZWFzeWNhcC0+YXVkaW9fZW5kcG9pbnRudW1iZXIpOworCQkJCXB1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOworCQkJCXB1cmItPnRyYW5zZmVyX2J1ZmZlciA9IFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX2lzb2NfYnVmZmVyW2lzYnVmXS5wZ287CisJCQkJcHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX2lzb2NfYnVmZmVyX3NpemU7CisJCQkJcHVyYi0+Y29tcGxldGUgPSBlYXN5c25kX2NvbXBsZXRlOworCQkJCXB1cmItPmNvbnRleHQgPSBwZWFzeWNhcDsKKwkJCQlwdXJiLT5zdGFydF9mcmFtZSA9IDA7CisJCQkJcHVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBcCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19pc29jX2ZyYW1lc3BlcmRlc2M7CisJCQkJZm9yIChqID0gMDsgIGogPCBwZWFzeWNhcC0+XAorCQkJCQkJYXVkaW9faXNvY19mcmFtZXNwZXJkZXNjOyBcCisJCQkJCQkJCQlqKyspIHsKKwkJCQkJcHVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ub2Zmc2V0ID0gaiAqIFwKKwkJCQkJCXBlYXN5Y2FwLT5cCisJCQkJCQlhdWRpb19pc29jX21heGZyYW1lc2l6ZTsKKwkJCQkJcHVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ubGVuZ3RoID0gXAorCQkJCQkJcGVhc3ljYXAtPlwKKwkJCQkJCWF1ZGlvX2lzb2NfbWF4ZnJhbWVzaXplOworCQkJCX0KKworCQkJCXJjID0gdXNiX3N1Ym1pdF91cmIocHVyYiwgR0ZQX0tFUk5FTCk7CisJCQkJaWYgKDAgIT0gcmMpIHsKKwkJCQkJaXNiYWQrKzsKKwkJCQkJU0FZKCJFUlJPUjogdXNiX3N1Ym1pdF91cmIoKSBmYWlsZWQiIFwKKwkJCQkJCQkiIGZvciB1cmIgd2l0aCByYzpcbiIpOworCQkJCQlzd2l0Y2ggKHJjKSB7CisJCQkJCWNhc2UgLUVOT01FTTogeworCQkJCQkJU0FZKCJFTk9NRU1cbiIpOyBicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIC1FTk9ERVY6IHsKKwkJCQkJCVNBWSgiRU5PREVWXG4iKTsgYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAtRU5YSU86IHsKKwkJCQkJCVNBWSgiRU5YSU9cbiIpOyBicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIC1FSU5WQUw6IHsKKwkJCQkJCVNBWSgiRUlOVkFMXG4iKTsgYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAtRUFHQUlOOiB7CisJCQkJCQlTQVkoIkVBR0FJTlxuIik7IGJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgLUVGQklHOiB7CisJCQkJCQlTQVkoIkVGQklHXG4iKTsgYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAtRVBJUEU6IHsKKwkJCQkJCVNBWSgiRVBJUEVcbiIpOyBicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIC1FTVNHU0laRTogeworCQkJCQkJU0FZKCJFTVNHU0laRVxuIik7IGJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgLUVOT1NQQzogeworCQkJCQkJU0FZKCJFTk9TUENcbiIpOyBicmVhazsKKwkJCQkJfQorCQkJCQlkZWZhdWx0OiB7CisJCQkJCQlTQVkoInVua25vd24gZXJyb3IgY29kZSAlaVxuIixcCisJCQkJCQkJCSByYyk7IGJyZWFrOworCQkJCQl9CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQkgbSsrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaXNiYWQrKzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlzYmFkKys7CisJCX0KKwl9CisJaWYgKGlzYmFkKSB7CisJCUpPVCg0LCAiYXR0ZW1wdGluZyBjbGVhbnVwIGluc3RlYWQgb2Ygc3VibWl0dGluZ1xuIik7CisJCWxpc3RfZm9yX2VhY2gocGxpc3RfaGVhZCwgKHBlYXN5Y2FwLT5wdXJiX2F1ZGlvX2hlYWQpKSB7CisJCQlwZGF0YV91cmIgPSBsaXN0X2VudHJ5KHBsaXN0X2hlYWQsIHN0cnVjdCBkYXRhX3VyYiwgXAorCQkJCQkJCQlsaXN0X2hlYWQpOworCQkJaWYgKE5VTEwgIT0gcGRhdGFfdXJiKSB7CisJCQkJcHVyYiA9IHBkYXRhX3VyYi0+cHVyYjsKKwkJCQlpZiAoTlVMTCAhPSBwdXJiKQorCQkJCQl1c2Jfa2lsbF91cmIocHVyYik7CisJCQl9CisJCX0KKwkJcGVhc3ljYXAtPmF1ZGlvX2lzb2Nfc3RyZWFtaW5nID0gMDsKKwl9IGVsc2UgeworCQlwZWFzeWNhcC0+YXVkaW9faXNvY19zdHJlYW1pbmcgPSAxOworCQlKT1QoNCwgInN1Ym1pdHRlZCAlaSBhdWRpbyB1cmJzXG4iLCBtKTsKKwl9Cit9IGVsc2UKKwlKT1QoNCwgImFscmVhZHkgc3RyZWFtaW5nIGF1ZGlvIHVyYnNcbiIpOworCityZXR1cm4gMDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgS0lMTCBBTEwgQVVESU8gVVJCUy4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CitraWxsX2F1ZGlvX3VyYnMoc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwKQoreworaW50IG07CitzdHJ1Y3QgbGlzdF9oZWFkICpwbGlzdF9oZWFkOworc3RydWN0IGRhdGFfdXJiICpwZGF0YV91cmI7CisKK2lmIChwZWFzeWNhcC0+YXVkaW9faXNvY19zdHJlYW1pbmcpIHsKKwlpZiAoKHN0cnVjdCBsaXN0X2hlYWQgKilOVUxMICE9IHBlYXN5Y2FwLT5wdXJiX2F1ZGlvX2hlYWQpIHsKKwkJcGVhc3ljYXAtPmF1ZGlvX2lzb2Nfc3RyZWFtaW5nID0gMDsKKwkJSk9UKDQsICJraWxsaW5nIGF1ZGlvIHVyYnNcbiIpOworCQltID0gMDsKKwkJbGlzdF9mb3JfZWFjaChwbGlzdF9oZWFkLCAocGVhc3ljYXAtPnB1cmJfYXVkaW9faGVhZCkpIHsKKwkJCXBkYXRhX3VyYiA9IGxpc3RfZW50cnkocGxpc3RfaGVhZCwgc3RydWN0IGRhdGFfdXJiLAorCQkJCQkJCQlsaXN0X2hlYWQpOworCQkJaWYgKChzdHJ1Y3QgZGF0YV91cmIgKilOVUxMICE9IHBkYXRhX3VyYikgeworCQkJCWlmICgoc3RydWN0IHVyYiAqKU5VTEwgIT0gcGRhdGFfdXJiLT5wdXJiKSB7CisJCQkJCXVzYl9raWxsX3VyYihwZGF0YV91cmItPnB1cmIpOworCQkJCQltKys7CisJCQkJfQorCQkJfQorCQl9CisJCUpPVCg0LCAiJWkgYXVkaW8gdXJicyBraWxsZWRcbiIsIG0pOworCX0gZWxzZSB7CisJCVNBWSgiRVJST1I6IHBlYXN5Y2FwLT5wdXJiX2F1ZGlvX2hlYWQgaXMgTlVMTFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KK30gZWxzZSB7CisJSk9UKDgsICIlaT1hdWRpb19pc29jX3N0cmVhbWluZywgbm8gYXVkaW8gdXJicyBraWxsZWRcbiIsIFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX2lzb2Nfc3RyZWFtaW5nKTsKK30KK3JldHVybiAwOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvZWFzeWNhcF9zb3VuZC5oIGIvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvZWFzeWNhcF9zb3VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MTI3MzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9lYXN5Y2FwX3NvdW5kLmgKQEAgLTAsMCArMSwyOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIGVhc3ljYXBfc291bmQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBSLk0uIFRob21hcyAgPHJtdGhvbWFzQHNjaW9sdXMub3JnPgorICoKKyAqCisgKiAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoZSBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwOworZXh0ZXJuIHN0cnVjdCB1c2JfZHJpdmVyIGVhc3ljYXBfdXNiX2RyaXZlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lYXN5Y2FwL2Vhc3ljYXBfc3RhbmRhcmQuaCBiL2RyaXZlcnMvc3RhZ2luZy9lYXN5Y2FwL2Vhc3ljYXBfc3RhbmRhcmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWRjOGQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvZWFzeWNhcF9zdGFuZGFyZC5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICBlYXN5Y2FwX3N0YW5kYXJkLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgUi5NLiBUaG9tYXMgIDxybXRob21hc0BzY2lvbHVzLm9yZz4KKyAqCisgKgorICogIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGUgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIHN0cnVjdCBlYXN5Y2FwX3N0YW5kYXJkIGVhc3ljYXBfc3RhbmRhcmRbXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lYXN5Y2FwL2Vhc3ljYXBfdGVzdGNhcmQuYyBiL2RyaXZlcnMvc3RhZ2luZy9lYXN5Y2FwL2Vhc3ljYXBfdGVzdGNhcmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzJjZTI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvZWFzeWNhcF90ZXN0Y2FyZC5jCkBAIC0wLDAgKzEsMzkyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICBlYXN5Y2FwX3Rlc3RjYXJkLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgUi5NLiBUaG9tYXMgIDxybXRob21hc0BzY2lvbHVzLm9yZz4KKyAqCisgKgorICogIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGUgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZWFzeWNhcC5oIgorI2luY2x1ZGUgImVhc3ljYXBfZGVidWcuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBURVNUQ0FSRF9CWVRFU1BFUkxJTkUgKDIgKiAxNDQwKQordm9pZAorZWFzeWNhcF90ZXN0Y2FyZChzdHJ1Y3QgZWFzeWNhcCAqcGVhc3ljYXAsIGludCBmaWVsZF9maWxsKQoreworaW50IHRvdGFsOworaW50IHksIHUsIHYsIHIsIGcsIGI7Cit1bnNpZ25lZCBjaGFyIHV5dnlbNF07CisKK2ludCBpMSwgbGluZSwgaywgbSwgbiwgbW9yZSwgbXVjaCwgYmFyd2lkdGg7Cit1bnNpZ25lZCBjaGFyIGJmYmFyW1RFU1RDQVJEX0JZVEVTUEVSTElORSAvIDhdLCAqcDEsICpwMjsKK3N0cnVjdCBkYXRhX2J1ZmZlciAqcGZpZWxkX2J1ZmZlcjsKKworSk9UKDgsICIlaT1maWVsZF9maWxsXG4iLCBmaWVsZF9maWxsKTsKKworaWYgKChURVNUQ0FSRF9CWVRFU1BFUkxJTkUgLyAyKSA8IHBlYXN5Y2FwLT53aWR0aCkgeworCVNBWSgiRVJST1I6IGltYWdlIGlzIHRvbyB3aWRlXG4iKTsKKwlyZXR1cm47Cit9CitpZiAocGVhc3ljYXAtPndpZHRoICUgMTYpIHsKKwlTQVkoIkVSUk9SOiBpbmRpdmlzaWJsZSBpbWFnZSB3aWR0aFxuIik7CisJcmV0dXJuOworfQorCit0b3RhbCA9IDA7CitiYXJ3aWR0aCA9ICgyICogcGVhc3ljYXAtPndpZHRoKSAvIDg7CisKK2sgPSBmaWVsZF9maWxsOworbSA9IDA7CituID0gMDsKKworZm9yIChsaW5lID0gMDsgIGxpbmUgPCAocGVhc3ljYXAtPmhlaWdodCAvIDIpOyAgbGluZSsrKSB7CisJZm9yIChpMSA9IDA7ICBpMSA8IDg7ICBpMSsrKSB7CisJCXIgPSAoaTEgKiAyNTYpLzg7CisJCWcgPSAoaTEgKiAyNTYpLzg7CisJCWIgPSAoaTEgKiAyNTYpLzg7CisKKwkJeSA9ICAyOTkqci8xMDAwICsgNTg3KmcvMTAwMCArIDExNCpiLzEwMDAgOworCQl1ID0gLTE0NypyLzEwMDAgLSAyODkqZy8xMDAwICsgNDM2KmIvMTAwMCA7ICB1ID0gdSArIDEyODsKKwkJdiA9ICA2MTUqci8xMDAwIC0gNTE1KmcvMTAwMCAtIDEwMCpiLzEwMDAgOyAgdiA9IHYgKyAxMjg7CisKKwkJdXl2eVswXSA9ICAweEZGICYgdSA7CisJCXV5dnlbMV0gPSAgMHhGRiAmIHkgOworCQl1eXZ5WzJdID0gIDB4RkYgJiB2IDsKKwkJdXl2eVszXSA9ICAweEZGICYgeSA7CisKKwkJcDEgPSAmYmZiYXJbMF07CisJCXdoaWxlIChwMSA8ICZiZmJhcltiYXJ3aWR0aF0pIHsKKwkJCSpwMSsrID0gdXl2eVswXSA7CisJCQkqcDErKyA9IHV5dnlbMV0gOworCQkJKnAxKysgPSB1eXZ5WzJdIDsKKwkJCSpwMSsrID0gdXl2eVszXSA7CisJCQl0b3RhbCArPSA0OworCQkJfQorCisJCXAxID0gJmJmYmFyWzBdOworCQltb3JlID0gYmFyd2lkdGg7CisKKwkJd2hpbGUgKG1vcmUpIHsKKwkJCWlmICgoRklFTERfQlVGRkVSX1NJWkUvUEFHRV9TSVpFKSA8PSBtKSB7CisJCQkJU0FZKCJFUlJPUjogIGJhZCBtIHJlYWNoZWRcbiIpOworCQkJCXJldHVybjsKKwkJCX0KKwkJaWYgKFBBR0VfU0laRSA8IG4pIHsKKwkJCVNBWSgiRVJST1I6ICBiYWQgbiByZWFjaGVkXG4iKTsgcmV0dXJuOworCQl9CisKKwkJaWYgKDAgPiBtb3JlKSB7CisJCQlTQVkoIkVSUk9SOiAgaW50ZXJuYWwgZmF1bHRcbiIpOworCQkJcmV0dXJuOworCQl9CisKKwkJbXVjaCA9IFBBR0VfU0laRSAtIG47CisJCWlmIChtdWNoID4gbW9yZSkKKwkJCW11Y2ggPSBtb3JlOworCQlwZmllbGRfYnVmZmVyID0gJnBlYXN5Y2FwLT5maWVsZF9idWZmZXJba11bbV07CisJCXAyID0gcGZpZWxkX2J1ZmZlci0+cGdvICsgbjsKKwkJbWVtY3B5KHAyLCBwMSwgbXVjaCk7CisKKwkJcDEgKz0gbXVjaDsKKwkJbiArPSBtdWNoOworCQltb3JlIC09IG11Y2g7CisJCWlmIChQQUdFX1NJWkUgPT0gbikgeworCQkJbSsrOworCQkJbiA9IDA7CisJCQl9CisJCX0KKwl9Cit9CisKK0pPVCg4LCAiJWk9dG90YWxcbiIsIHRvdGFsKTsKK2lmICh0b3RhbCAhPSBwZWFzeWNhcC0+d2lkdGggKiBwZWFzeWNhcC0+aGVpZ2h0KQorCVNBWSgiRVJST1I6IHdyb25nIG51bWJlciBvZiBieXRlcyB3cml0dGVuOiAgJWlcbiIsIHRvdGFsKTsKK3JldHVybjsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKEVBU1lDQVBfVEVTVFRPTkUpCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUSEUgdG9uZXNbXSBBUlJBWSBCRUxPVyBJUyBUSEUgT1VUUFVUIE9GIFRISVMgUFJPR1JBTSwKK0NPTVBJTEVEIGdjYyAtbyBwcm9nIC1sbSBwcm9nLmMKKy0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPG1hdGguaD4KKworaW50IG1haW4odm9pZCk7CitpbnQKK21haW4odm9pZCkKK3sKK2ludCBpMSwgaTIsIGxhc3Q7Citkb3VibGUgZDEsIGQyOworCitsYXN0ID0gMTAyNCAtIDE7CitkMSA9IDEwLjAqMy4xNDE1OTI2NS8xMDI0LjA7CitwcmludGYoImludCB0b25lc1syMDQ4XSA9XG57XG4iKTsKK2ZvciAoaTEgPSAwOyAgaTEgPD0gbGFzdDsgIGkxKyspCisJeworCWQyID0gKChkb3VibGUpaTEpICogZDE7CisJaTIgPSAoaW50KSgxNjM4NC4wKnNpbihkMikpOworCisJaWYgKGxhc3QgIT0gaTEpCisJCXsKKwkJcHJpbnRmKCIlNmksICIsIGkyKTsgIHByaW50ZigiJTZpLCAiLCBpMik7CisJCWlmICghKChpMSArIDEpJTUpKSBwcmludGYoIlxuIik7CisJCX0KKwllbHNlCisJCXsKKwkJcHJpbnRmKCIlNmksICIsIGkyKTsgIHByaW50ZigiJTZpXG59O1xuIiwgaTIpOworCQl9CisJfQorcmV0dXJuKDApOworfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHRvbmVzWzIwNDhdID0geworICAgICAwLCAgICAgMCwgICA1MDIsICAgNTAyLCAgMTAwNCwgIDEwMDQsICAxNTA1LCAgMTUwNSwgIDIwMDUsICAyMDA1LAorICAyNTAzLCAgMjUwMywgIDI5OTgsICAyOTk4LCAgMzQ5MSwgIDM0OTEsICAzOTgwLCAgMzk4MCwgIDQ0NjYsICA0NDY2LAorICA0OTQ4LCAgNDk0OCwgIDU0MjQsICA1NDI0LCAgNTg5NiwgIDU4OTYsICA2MzYyLCAgNjM2MiwgIDY4MjIsICA2ODIyLAorICA3Mjc2LCAgNzI3NiwgIDc3MjMsICA3NzIzLCAgODE2MiwgIDgxNjIsICA4NTk0LCAgODU5NCwgIDkwMTgsICA5MDE4LAorICA5NDM0LCAgOTQzNCwgIDk4NDAsICA5ODQwLCAxMDIzNywgMTAyMzcsIDEwNjI1LCAxMDYyNSwgMTEwMDIsIDExMDAyLAorIDExMzcwLCAxMTM3MCwgMTE3MjYsIDExNzI2LCAxMjA3MiwgMTIwNzIsIDEyNDA2LCAxMjQwNiwgMTI3MjgsIDEyNzI4LAorIDEzMDM4LCAxMzAzOCwgMTMzMzcsIDEzMzM3LCAxMzYyMiwgMTM2MjIsIDEzODk1LCAxMzg5NSwgMTQxNTUsIDE0MTU1LAorIDE0NDAxLCAxNDQwMSwgMTQ2MzQsIDE0NjM0LCAxNDg1MywgMTQ4NTMsIDE1MDU4LCAxNTA1OCwgMTUyNDksIDE1MjQ5LAorIDE1NDI2LCAxNTQyNiwgMTU1ODgsIDE1NTg4LCAxNTczNSwgMTU3MzUsIDE1ODY4LCAxNTg2OCwgMTU5ODUsIDE1OTg1LAorIDE2MDg4LCAxNjA4OCwgMTYxNzUsIDE2MTc1LCAxNjI0OCwgMTYyNDgsIDE2MzA1LCAxNjMwNSwgMTYzNDYsIDE2MzQ2LAorIDE2MzcyLCAxNjM3MiwgMTYzODMsIDE2MzgzLCAxNjM3OSwgMTYzNzksIDE2MzU5LCAxNjM1OSwgMTYzMjMsIDE2MzIzLAorIDE2MjcyLCAxNjI3MiwgMTYyMDYsIDE2MjA2LCAxNjEyNSwgMTYxMjUsIDE2MDI4LCAxNjAyOCwgMTU5MTcsIDE1OTE3LAorIDE1NzkwLCAxNTc5MCwgMTU2NDksIDE1NjQ5LCAxNTQ5MiwgMTU0OTIsIDE1MzIyLCAxNTMyMiwgMTUxMzYsIDE1MTM2LAorIDE0OTM3LCAxNDkzNywgMTQ3MjMsIDE0NzIzLCAxNDQ5NiwgMTQ0OTYsIDE0MjU1LCAxNDI1NSwgMTQwMDEsIDE0MDAxLAorIDEzNzMzLCAxMzczMywgMTM0NTIsIDEzNDUyLCAxMzE1OSwgMTMxNTksIDEyODU0LCAxMjg1NCwgMTI1MzYsIDEyNTM2LAorIDEyMjA3LCAxMjIwNywgMTE4NjYsIDExODY2LCAxMTUxMywgMTE1MTMsIDExMTUwLCAxMTE1MCwgMTA3NzcsIDEwNzc3LAorIDEwMzkzLCAxMDM5MywgMTAwMDAsIDEwMDAwLCAgOTU5NywgIDk1OTcsICA5MTg1LCAgOTE4NSwgIDg3NjUsICA4NzY1LAorICA4MzM2LCAgODMzNiwgIDc5MDAsICA3OTAwLCAgNzQ1NiwgIDc0NTYsICA3MDA1LCAgNzAwNSwgIDY1NDcsICA2NTQ3LAorICA2MDgzLCAgNjA4MywgIDU2MTQsICA1NjE0LCAgNTEzOSwgIDUxMzksICA0NjU5LCAgNDY1OSwgIDQxNzUsICA0MTc1LAorICAzNjg3LCAgMzY4NywgIDMxOTYsICAzMTk2LCAgMjcwMSwgIDI3MDEsICAyMjA0LCAgMjIwNCwgIDE3MDUsICAxNzA1LAorICAxMjA1LCAgMTIwNSwgICA3MDMsICAgNzAzLCAgIDIwMSwgICAyMDEsICAtMzAxLCAgLTMwMSwgIC04MDMsICAtODAzLAorIC0xMzA1LCAtMTMwNSwgLTE4MDUsIC0xODA1LCAtMjMwNCwgLTIzMDQsIC0yODAxLCAtMjgwMSwgLTMyOTQsIC0zMjk0LAorIC0zNzg1LCAtMzc4NSwgLTQyNzIsIC00MjcyLCAtNDc1NiwgLTQ3NTYsIC01MjM0LCAtNTIzNCwgLTU3MDgsIC01NzA4LAorIC02MTc2LCAtNjE3NiwgLTY2MzksIC02NjM5LCAtNzA5NSwgLTcwOTUsIC03NTQ1LCAtNzU0NSwgLTc5ODgsIC03OTg4LAorIC04NDIzLCAtODQyMywgLTg4NTAsIC04ODUwLCAtOTI2OCwgLTkyNjgsIC05Njc5LCAtOTY3OSwgLTEwMDc5LCAtMTAwNzksCistMTA0NzEsIC0xMDQ3MSwgLTEwODUzLCAtMTA4NTMsIC0xMTIyNCwgLTExMjI0LCAtMTE1ODUsIC0xMTU4NSwgLTExOTM1LCAtMTE5MzUsCistMTIyNzMsIC0xMjI3MywgLTEyNjAwLCAtMTI2MDAsIC0xMjkxNiwgLTEyOTE2LCAtMTMyMTksIC0xMzIxOSwgLTEzNTEwLCAtMTM1MTAsCistMTM3ODgsIC0xMzc4OCwgLTE0MDUzLCAtMTQwNTMsIC0xNDMwNCwgLTE0MzA0LCAtMTQ1NDMsIC0xNDU0MywgLTE0NzY3LCAtMTQ3NjcsCistMTQ5NzgsIC0xNDk3OCwgLTE1MTc1LCAtMTUxNzUsIC0xNTM1NywgLTE1MzU3LCAtMTU1MjUsIC0xNTUyNSwgLTE1Njc4LCAtMTU2NzgsCistMTU4MTcsIC0xNTgxNywgLTE1OTQwLCAtMTU5NDAsIC0xNjA0OSwgLTE2MDQ5LCAtMTYxNDIsIC0xNjE0MiwgLTE2MjIxLCAtMTYyMjEsCistMTYyODQsIC0xNjI4NCwgLTE2MzMxLCAtMTYzMzEsIC0xNjM2NCwgLTE2MzY0LCAtMTYzODEsIC0xNjM4MSwgLTE2MzgyLCAtMTYzODIsCistMTYzNjgsIC0xNjM2OCwgLTE2MzM5LCAtMTYzMzksIC0xNjI5NCwgLTE2Mjk0LCAtMTYyMzQsIC0xNjIzNCwgLTE2MTU5LCAtMTYxNTksCistMTYwNjksIC0xNjA2OSwgLTE1OTYzLCAtMTU5NjMsIC0xNTg0MiwgLTE1ODQyLCAtMTU3MDcsIC0xNTcwNywgLTE1NTU3LCAtMTU1NTcsCistMTUzOTIsIC0xNTM5MiwgLTE1MjEyLCAtMTUyMTIsIC0xNTAxOCwgLTE1MDE4LCAtMTQ4MTAsIC0xNDgxMCwgLTE0NTg5LCAtMTQ1ODksCistMTQzNTMsIC0xNDM1MywgLTE0MTA0LCAtMTQxMDQsIC0xMzg0MiwgLTEzODQyLCAtMTM1NjYsIC0xMzU2NiwgLTEzMjc4LCAtMTMyNzgsCistMTI5NzcsIC0xMjk3NywgLTEyNjY1LCAtMTI2NjUsIC0xMjM0MCwgLTEyMzQwLCAtMTIwMDMsIC0xMjAwMywgLTExNjU2LCAtMTE2NTYsCistMTEyOTcsIC0xMTI5NywgLTEwOTI4LCAtMTA5MjgsIC0xMDU0OCwgLTEwNTQ4LCAtMTAxNTksIC0xMDE1OSwgLTk3NTksIC05NzU5LAorIC05MzUxLCAtOTM1MSwgLTg5MzQsIC04OTM0LCAtODUwOSwgLTg1MDksIC04MDc1LCAtODA3NSwgLTc2MzQsIC03NjM0LAorIC03MTg2LCAtNzE4NiwgLTY3MzEsIC02NzMxLCAtNjI2OSwgLTYyNjksIC01ODAyLCAtNTgwMiwgLTUzMjksIC01MzI5LAorIC00ODUyLCAtNDg1MiwgLTQzNjksIC00MzY5LCAtMzg4MywgLTM4ODMsIC0zMzkzLCAtMzM5MywgLTI5MDAsIC0yOTAwLAorIC0yNDA0LCAtMjQwNCwgLTE5MDUsIC0xOTA1LCAtMTQwNSwgLTE0MDUsICAtOTA0LCAgLTkwNCwgIC00MDIsICAtNDAyLAorICAgMTAwLCAgIDEwMCwgICA2MDMsICAgNjAzLCAgMTEwNSwgIDExMDUsICAxNjA1LCAgMTYwNSwgIDIxMDUsICAyMTA1LAorICAyNjAyLCAgMjYwMiwgIDMwOTcsICAzMDk3LCAgMzU4OSwgIDM1ODksICA0MDc4LCAgNDA3OCwgIDQ1NjMsICA0NTYzLAorICA1MDQzLCAgNTA0MywgIDU1MTksICA1NTE5LCAgNTk5MCwgIDU5OTAsICA2NDU1LCAgNjQ1NSwgIDY5MTQsICA2OTE0LAorICA3MzY2LCAgNzM2NiwgIDc4MTEsICA3ODExLCAgODI0OSwgIDgyNDksICA4NjgwLCAgODY4MCwgIDkxMDIsICA5MTAyLAorICA5NTE2LCAgOTUxNiwgIDk5MjAsICA5OTIwLCAxMDMxNSwgMTAzMTUsIDEwNzAxLCAxMDcwMSwgMTEwNzcsIDExMDc3LAorIDExNDQyLCAxMTQ0MiwgMTE3OTYsIDExNzk2LCAxMjEzOSwgMTIxMzksIDEyNDcxLCAxMjQ3MSwgMTI3OTEsIDEyNzkxLAorIDEzMDk5LCAxMzA5OSwgMTMzOTUsIDEzMzk1LCAxMzY3OCwgMTM2NzgsIDEzOTQ4LCAxMzk0OCwgMTQyMDUsIDE0MjA1LAorIDE0NDQ5LCAxNDQ0OSwgMTQ2NzksIDE0Njc5LCAxNDg5NSwgMTQ4OTUsIDE1MDk4LCAxNTA5OCwgMTUyODYsIDE1Mjg2LAorIDE1NDU5LCAxNTQ1OSwgMTU2MTgsIDE1NjE4LCAxNTc2MywgMTU3NjMsIDE1ODkyLCAxNTg5MiwgMTYwMDcsIDE2MDA3LAorIDE2MTA3LCAxNjEwNywgMTYxOTEsIDE2MTkxLCAxNjI2MCwgMTYyNjAsIDE2MzE0LCAxNjMxNCwgMTYzNTMsIDE2MzUzLAorIDE2Mzc2LCAxNjM3NiwgMTYzODQsIDE2Mzg0LCAxNjM3NiwgMTYzNzYsIDE2MzUzLCAxNjM1MywgMTYzMTQsIDE2MzE0LAorIDE2MjYwLCAxNjI2MCwgMTYxOTEsIDE2MTkxLCAxNjEwNywgMTYxMDcsIDE2MDA3LCAxNjAwNywgMTU4OTIsIDE1ODkyLAorIDE1NzYzLCAxNTc2MywgMTU2MTgsIDE1NjE4LCAxNTQ1OSwgMTU0NTksIDE1Mjg2LCAxNTI4NiwgMTUwOTgsIDE1MDk4LAorIDE0ODk1LCAxNDg5NSwgMTQ2NzksIDE0Njc5LCAxNDQ0OSwgMTQ0NDksIDE0MjA1LCAxNDIwNSwgMTM5NDgsIDEzOTQ4LAorIDEzNjc4LCAxMzY3OCwgMTMzOTUsIDEzMzk1LCAxMzA5OSwgMTMwOTksIDEyNzkxLCAxMjc5MSwgMTI0NzEsIDEyNDcxLAorIDEyMTM5LCAxMjEzOSwgMTE3OTYsIDExNzk2LCAxMTQ0MiwgMTE0NDIsIDExMDc3LCAxMTA3NywgMTA3MDEsIDEwNzAxLAorIDEwMzE1LCAxMDMxNSwgIDk5MjAsICA5OTIwLCAgOTUxNiwgIDk1MTYsICA5MTAyLCAgOTEwMiwgIDg2ODAsICA4NjgwLAorICA4MjQ5LCAgODI0OSwgIDc4MTEsICA3ODExLCAgNzM2NiwgIDczNjYsICA2OTE0LCAgNjkxNCwgIDY0NTUsICA2NDU1LAorICA1OTkwLCAgNTk5MCwgIDU1MTksICA1NTE5LCAgNTA0MywgIDUwNDMsICA0NTYzLCAgNDU2MywgIDQwNzgsICA0MDc4LAorICAzNTg5LCAgMzU4OSwgIDMwOTcsICAzMDk3LCAgMjYwMiwgIDI2MDIsICAyMTA1LCAgMjEwNSwgIDE2MDUsICAxNjA1LAorICAxMTA1LCAgMTEwNSwgICA2MDMsICAgNjAzLCAgIDEwMCwgICAxMDAsICAtNDAyLCAgLTQwMiwgIC05MDQsICAtOTA0LAorIC0xNDA1LCAtMTQwNSwgLTE5MDUsIC0xOTA1LCAtMjQwNCwgLTI0MDQsIC0yOTAwLCAtMjkwMCwgLTMzOTMsIC0zMzkzLAorIC0zODgzLCAtMzg4MywgLTQzNjksIC00MzY5LCAtNDg1MiwgLTQ4NTIsIC01MzI5LCAtNTMyOSwgLTU4MDIsIC01ODAyLAorIC02MjY5LCAtNjI2OSwgLTY3MzEsIC02NzMxLCAtNzE4NiwgLTcxODYsIC03NjM0LCAtNzYzNCwgLTgwNzUsIC04MDc1LAorIC04NTA5LCAtODUwOSwgLTg5MzQsIC04OTM0LCAtOTM1MSwgLTkzNTEsIC05NzU5LCAtOTc1OSwgLTEwMTU5LCAtMTAxNTksCistMTA1NDgsIC0xMDU0OCwgLTEwOTI4LCAtMTA5MjgsIC0xMTI5NywgLTExMjk3LCAtMTE2NTYsIC0xMTY1NiwgLTEyMDAzLCAtMTIwMDMsCistMTIzNDAsIC0xMjM0MCwgLTEyNjY1LCAtMTI2NjUsIC0xMjk3NywgLTEyOTc3LCAtMTMyNzgsIC0xMzI3OCwgLTEzNTY2LCAtMTM1NjYsCistMTM4NDIsIC0xMzg0MiwgLTE0MTA0LCAtMTQxMDQsIC0xNDM1MywgLTE0MzUzLCAtMTQ1ODksIC0xNDU4OSwgLTE0ODEwLCAtMTQ4MTAsCistMTUwMTgsIC0xNTAxOCwgLTE1MjEyLCAtMTUyMTIsIC0xNTM5MiwgLTE1MzkyLCAtMTU1NTcsIC0xNTU1NywgLTE1NzA3LCAtMTU3MDcsCistMTU4NDIsIC0xNTg0MiwgLTE1OTYzLCAtMTU5NjMsIC0xNjA2OSwgLTE2MDY5LCAtMTYxNTksIC0xNjE1OSwgLTE2MjM0LCAtMTYyMzQsCistMTYyOTQsIC0xNjI5NCwgLTE2MzM5LCAtMTYzMzksIC0xNjM2OCwgLTE2MzY4LCAtMTYzODIsIC0xNjM4MiwgLTE2MzgxLCAtMTYzODEsCistMTYzNjQsIC0xNjM2NCwgLTE2MzMxLCAtMTYzMzEsIC0xNjI4NCwgLTE2Mjg0LCAtMTYyMjEsIC0xNjIyMSwgLTE2MTQyLCAtMTYxNDIsCistMTYwNDksIC0xNjA0OSwgLTE1OTQwLCAtMTU5NDAsIC0xNTgxNywgLTE1ODE3LCAtMTU2NzgsIC0xNTY3OCwgLTE1NTI1LCAtMTU1MjUsCistMTUzNTcsIC0xNTM1NywgLTE1MTc1LCAtMTUxNzUsIC0xNDk3OCwgLTE0OTc4LCAtMTQ3NjcsIC0xNDc2NywgLTE0NTQzLCAtMTQ1NDMsCistMTQzMDQsIC0xNDMwNCwgLTE0MDUzLCAtMTQwNTMsIC0xMzc4OCwgLTEzNzg4LCAtMTM1MTAsIC0xMzUxMCwgLTEzMjE5LCAtMTMyMTksCistMTI5MTYsIC0xMjkxNiwgLTEyNjAwLCAtMTI2MDAsIC0xMjI3MywgLTEyMjczLCAtMTE5MzUsIC0xMTkzNSwgLTExNTg1LCAtMTE1ODUsCistMTEyMjQsIC0xMTIyNCwgLTEwODUzLCAtMTA4NTMsIC0xMDQ3MSwgLTEwNDcxLCAtMTAwNzksIC0xMDA3OSwgLTk2NzksIC05Njc5LAorIC05MjY4LCAtOTI2OCwgLTg4NTAsIC04ODUwLCAtODQyMywgLTg0MjMsIC03OTg4LCAtNzk4OCwgLTc1NDUsIC03NTQ1LAorIC03MDk1LCAtNzA5NSwgLTY2MzksIC02NjM5LCAtNjE3NiwgLTYxNzYsIC01NzA4LCAtNTcwOCwgLTUyMzQsIC01MjM0LAorIC00NzU2LCAtNDc1NiwgLTQyNzIsIC00MjcyLCAtMzc4NSwgLTM3ODUsIC0zMjk0LCAtMzI5NCwgLTI4MDEsIC0yODAxLAorIC0yMzA0LCAtMjMwNCwgLTE4MDUsIC0xODA1LCAtMTMwNSwgLTEzMDUsICAtODAzLCAgLTgwMywgIC0zMDEsICAtMzAxLAorICAgMjAxLCAgIDIwMSwgICA3MDMsICAgNzAzLCAgMTIwNSwgIDEyMDUsICAxNzA1LCAgMTcwNSwgIDIyMDQsICAyMjA0LAorICAyNzAxLCAgMjcwMSwgIDMxOTYsICAzMTk2LCAgMzY4NywgIDM2ODcsICA0MTc1LCAgNDE3NSwgIDQ2NTksICA0NjU5LAorICA1MTM5LCAgNTEzOSwgIDU2MTQsICA1NjE0LCAgNjA4MywgIDYwODMsICA2NTQ3LCAgNjU0NywgIDcwMDUsICA3MDA1LAorICA3NDU2LCAgNzQ1NiwgIDc5MDAsICA3OTAwLCAgODMzNiwgIDgzMzYsICA4NzY1LCAgODc2NSwgIDkxODUsICA5MTg1LAorICA5NTk3LCAgOTU5NywgMTAwMDAsIDEwMDAwLCAxMDM5MywgMTAzOTMsIDEwNzc3LCAxMDc3NywgMTExNTAsIDExMTUwLAorIDExNTEzLCAxMTUxMywgMTE4NjYsIDExODY2LCAxMjIwNywgMTIyMDcsIDEyNTM2LCAxMjUzNiwgMTI4NTQsIDEyODU0LAorIDEzMTU5LCAxMzE1OSwgMTM0NTIsIDEzNDUyLCAxMzczMywgMTM3MzMsIDE0MDAxLCAxNDAwMSwgMTQyNTUsIDE0MjU1LAorIDE0NDk2LCAxNDQ5NiwgMTQ3MjMsIDE0NzIzLCAxNDkzNywgMTQ5MzcsIDE1MTM2LCAxNTEzNiwgMTUzMjIsIDE1MzIyLAorIDE1NDkyLCAxNTQ5MiwgMTU2NDksIDE1NjQ5LCAxNTc5MCwgMTU3OTAsIDE1OTE3LCAxNTkxNywgMTYwMjgsIDE2MDI4LAorIDE2MTI1LCAxNjEyNSwgMTYyMDYsIDE2MjA2LCAxNjI3MiwgMTYyNzIsIDE2MzIzLCAxNjMyMywgMTYzNTksIDE2MzU5LAorIDE2Mzc5LCAxNjM3OSwgMTYzODMsIDE2MzgzLCAxNjM3MiwgMTYzNzIsIDE2MzQ2LCAxNjM0NiwgMTYzMDUsIDE2MzA1LAorIDE2MjQ4LCAxNjI0OCwgMTYxNzUsIDE2MTc1LCAxNjA4OCwgMTYwODgsIDE1OTg1LCAxNTk4NSwgMTU4NjgsIDE1ODY4LAorIDE1NzM1LCAxNTczNSwgMTU1ODgsIDE1NTg4LCAxNTQyNiwgMTU0MjYsIDE1MjQ5LCAxNTI0OSwgMTUwNTgsIDE1MDU4LAorIDE0ODUzLCAxNDg1MywgMTQ2MzQsIDE0NjM0LCAxNDQwMSwgMTQ0MDEsIDE0MTU1LCAxNDE1NSwgMTM4OTUsIDEzODk1LAorIDEzNjIyLCAxMzYyMiwgMTMzMzcsIDEzMzM3LCAxMzAzOCwgMTMwMzgsIDEyNzI4LCAxMjcyOCwgMTI0MDYsIDEyNDA2LAorIDEyMDcyLCAxMjA3MiwgMTE3MjYsIDExNzI2LCAxMTM3MCwgMTEzNzAsIDExMDAyLCAxMTAwMiwgMTA2MjUsIDEwNjI1LAorIDEwMjM3LCAxMDIzNywgIDk4NDAsICA5ODQwLCAgOTQzNCwgIDk0MzQsICA5MDE4LCAgOTAxOCwgIDg1OTQsICA4NTk0LAorICA4MTYyLCAgODE2MiwgIDc3MjMsICA3NzIzLCAgNzI3NiwgIDcyNzYsICA2ODIyLCAgNjgyMiwgIDYzNjIsICA2MzYyLAorICA1ODk2LCAgNTg5NiwgIDU0MjQsICA1NDI0LCAgNDk0OCwgIDQ5NDgsICA0NDY2LCAgNDQ2NiwgIDM5ODAsICAzOTgwLAorICAzNDkxLCAgMzQ5MSwgIDI5OTgsICAyOTk4LCAgMjUwMywgIDI1MDMsICAyMDA1LCAgMjAwNSwgIDE1MDUsICAxNTA1LAorICAxMDA0LCAgMTAwNCwgICA1MDIsICAgNTAyLCAgICAgMCwgICAgIDAsICAtNTAyLCAgLTUwMiwgLTEwMDQsIC0xMDA0LAorIC0xNTA1LCAtMTUwNSwgLTIwMDUsIC0yMDA1LCAtMjUwMywgLTI1MDMsIC0yOTk4LCAtMjk5OCwgLTM0OTEsIC0zNDkxLAorIC0zOTgwLCAtMzk4MCwgLTQ0NjYsIC00NDY2LCAtNDk0OCwgLTQ5NDgsIC01NDI0LCAtNTQyNCwgLTU4OTYsIC01ODk2LAorIC02MzYyLCAtNjM2MiwgLTY4MjIsIC02ODIyLCAtNzI3NiwgLTcyNzYsIC03NzIzLCAtNzcyMywgLTgxNjIsIC04MTYyLAorIC04NTk0LCAtODU5NCwgLTkwMTgsIC05MDE4LCAtOTQzNCwgLTk0MzQsIC05ODQwLCAtOTg0MCwgLTEwMjM3LCAtMTAyMzcsCistMTA2MjUsIC0xMDYyNSwgLTExMDAyLCAtMTEwMDIsIC0xMTM3MCwgLTExMzcwLCAtMTE3MjYsIC0xMTcyNiwgLTEyMDcyLCAtMTIwNzIsCistMTI0MDYsIC0xMjQwNiwgLTEyNzI4LCAtMTI3MjgsIC0xMzAzOCwgLTEzMDM4LCAtMTMzMzcsIC0xMzMzNywgLTEzNjIyLCAtMTM2MjIsCistMTM4OTUsIC0xMzg5NSwgLTE0MTU1LCAtMTQxNTUsIC0xNDQwMSwgLTE0NDAxLCAtMTQ2MzQsIC0xNDYzNCwgLTE0ODUzLCAtMTQ4NTMsCistMTUwNTgsIC0xNTA1OCwgLTE1MjQ5LCAtMTUyNDksIC0xNTQyNiwgLTE1NDI2LCAtMTU1ODgsIC0xNTU4OCwgLTE1NzM1LCAtMTU3MzUsCistMTU4NjgsIC0xNTg2OCwgLTE1OTg1LCAtMTU5ODUsIC0xNjA4OCwgLTE2MDg4LCAtMTYxNzUsIC0xNjE3NSwgLTE2MjQ4LCAtMTYyNDgsCistMTYzMDUsIC0xNjMwNSwgLTE2MzQ2LCAtMTYzNDYsIC0xNjM3MiwgLTE2MzcyLCAtMTYzODMsIC0xNjM4MywgLTE2Mzc5LCAtMTYzNzksCistMTYzNTksIC0xNjM1OSwgLTE2MzIzLCAtMTYzMjMsIC0xNjI3MiwgLTE2MjcyLCAtMTYyMDYsIC0xNjIwNiwgLTE2MTI1LCAtMTYxMjUsCistMTYwMjgsIC0xNjAyOCwgLTE1OTE3LCAtMTU5MTcsIC0xNTc5MCwgLTE1NzkwLCAtMTU2NDksIC0xNTY0OSwgLTE1NDkyLCAtMTU0OTIsCistMTUzMjIsIC0xNTMyMiwgLTE1MTM2LCAtMTUxMzYsIC0xNDkzNywgLTE0OTM3LCAtMTQ3MjMsIC0xNDcyMywgLTE0NDk2LCAtMTQ0OTYsCistMTQyNTUsIC0xNDI1NSwgLTE0MDAxLCAtMTQwMDEsIC0xMzczMywgLTEzNzMzLCAtMTM0NTIsIC0xMzQ1MiwgLTEzMTU5LCAtMTMxNTksCistMTI4NTQsIC0xMjg1NCwgLTEyNTM2LCAtMTI1MzYsIC0xMjIwNywgLTEyMjA3LCAtMTE4NjYsIC0xMTg2NiwgLTExNTEzLCAtMTE1MTMsCistMTExNTAsIC0xMTE1MCwgLTEwNzc3LCAtMTA3NzcsIC0xMDM5MywgLTEwMzkzLCAtMTAwMDAsIC0xMDAwMCwgLTk1OTcsIC05NTk3LAorIC05MTg1LCAtOTE4NSwgLTg3NjUsIC04NzY1LCAtODMzNiwgLTgzMzYsIC03OTAwLCAtNzkwMCwgLTc0NTYsIC03NDU2LAorIC03MDA1LCAtNzAwNSwgLTY1NDcsIC02NTQ3LCAtNjA4MywgLTYwODMsIC01NjE0LCAtNTYxNCwgLTUxMzksIC01MTM5LAorIC00NjU5LCAtNDY1OSwgLTQxNzUsIC00MTc1LCAtMzY4NywgLTM2ODcsIC0zMTk2LCAtMzE5NiwgLTI3MDEsIC0yNzAxLAorIC0yMjA0LCAtMjIwNCwgLTE3MDUsIC0xNzA1LCAtMTIwNSwgLTEyMDUsICAtNzAzLCAgLTcwMywgIC0yMDEsICAtMjAxLAorICAgMzAxLCAgIDMwMSwgICA4MDMsICAgODAzLCAgMTMwNSwgIDEzMDUsICAxODA1LCAgMTgwNSwgIDIzMDQsICAyMzA0LAorICAyODAxLCAgMjgwMSwgIDMyOTQsICAzMjk0LCAgMzc4NSwgIDM3ODUsICA0MjcyLCAgNDI3MiwgIDQ3NTYsICA0NzU2LAorICA1MjM0LCAgNTIzNCwgIDU3MDgsICA1NzA4LCAgNjE3NiwgIDYxNzYsICA2NjM5LCAgNjYzOSwgIDcwOTUsICA3MDk1LAorICA3NTQ1LCAgNzU0NSwgIDc5ODgsICA3OTg4LCAgODQyMywgIDg0MjMsICA4ODUwLCAgODg1MCwgIDkyNjgsICA5MjY4LAorICA5Njc5LCAgOTY3OSwgMTAwNzksIDEwMDc5LCAxMDQ3MSwgMTA0NzEsIDEwODUzLCAxMDg1MywgMTEyMjQsIDExMjI0LAorIDExNTg1LCAxMTU4NSwgMTE5MzUsIDExOTM1LCAxMjI3MywgMTIyNzMsIDEyNjAwLCAxMjYwMCwgMTI5MTYsIDEyOTE2LAorIDEzMjE5LCAxMzIxOSwgMTM1MTAsIDEzNTEwLCAxMzc4OCwgMTM3ODgsIDE0MDUzLCAxNDA1MywgMTQzMDQsIDE0MzA0LAorIDE0NTQzLCAxNDU0MywgMTQ3NjcsIDE0NzY3LCAxNDk3OCwgMTQ5NzgsIDE1MTc1LCAxNTE3NSwgMTUzNTcsIDE1MzU3LAorIDE1NTI1LCAxNTUyNSwgMTU2NzgsIDE1Njc4LCAxNTgxNywgMTU4MTcsIDE1OTQwLCAxNTk0MCwgMTYwNDksIDE2MDQ5LAorIDE2MTQyLCAxNjE0MiwgMTYyMjEsIDE2MjIxLCAxNjI4NCwgMTYyODQsIDE2MzMxLCAxNjMzMSwgMTYzNjQsIDE2MzY0LAorIDE2MzgxLCAxNjM4MSwgMTYzODIsIDE2MzgyLCAxNjM2OCwgMTYzNjgsIDE2MzM5LCAxNjMzOSwgMTYyOTQsIDE2Mjk0LAorIDE2MjM0LCAxNjIzNCwgMTYxNTksIDE2MTU5LCAxNjA2OSwgMTYwNjksIDE1OTYzLCAxNTk2MywgMTU4NDIsIDE1ODQyLAorIDE1NzA3LCAxNTcwNywgMTU1NTcsIDE1NTU3LCAxNTM5MiwgMTUzOTIsIDE1MjEyLCAxNTIxMiwgMTUwMTgsIDE1MDE4LAorIDE0ODEwLCAxNDgxMCwgMTQ1ODksIDE0NTg5LCAxNDM1MywgMTQzNTMsIDE0MTA0LCAxNDEwNCwgMTM4NDIsIDEzODQyLAorIDEzNTY2LCAxMzU2NiwgMTMyNzgsIDEzMjc4LCAxMjk3NywgMTI5NzcsIDEyNjY1LCAxMjY2NSwgMTIzNDAsIDEyMzQwLAorIDEyMDAzLCAxMjAwMywgMTE2NTYsIDExNjU2LCAxMTI5NywgMTEyOTcsIDEwOTI4LCAxMDkyOCwgMTA1NDgsIDEwNTQ4LAorIDEwMTU5LCAxMDE1OSwgIDk3NTksICA5NzU5LCAgOTM1MSwgIDkzNTEsICA4OTM0LCAgODkzNCwgIDg1MDksICA4NTA5LAorICA4MDc1LCAgODA3NSwgIDc2MzQsICA3NjM0LCAgNzE4NiwgIDcxODYsICA2NzMxLCAgNjczMSwgIDYyNjksICA2MjY5LAorICA1ODAyLCAgNTgwMiwgIDUzMjksICA1MzI5LCAgNDg1MiwgIDQ4NTIsICA0MzY5LCAgNDM2OSwgIDM4ODMsICAzODgzLAorICAzMzkzLCAgMzM5MywgIDI5MDAsICAyOTAwLCAgMjQwNCwgIDI0MDQsICAxOTA1LCAgMTkwNSwgIDE0MDUsICAxNDA1LAorICAgOTA0LCAgIDkwNCwgICA0MDIsICAgNDAyLCAgLTEwMCwgIC0xMDAsICAtNjAzLCAgLTYwMywgLTExMDUsIC0xMTA1LAorIC0xNjA1LCAtMTYwNSwgLTIxMDUsIC0yMTA1LCAtMjYwMiwgLTI2MDIsIC0zMDk3LCAtMzA5NywgLTM1ODksIC0zNTg5LAorIC00MDc4LCAtNDA3OCwgLTQ1NjMsIC00NTYzLCAtNTA0MywgLTUwNDMsIC01NTE5LCAtNTUxOSwgLTU5OTAsIC01OTkwLAorIC02NDU1LCAtNjQ1NSwgLTY5MTQsIC02OTE0LCAtNzM2NiwgLTczNjYsIC03ODExLCAtNzgxMSwgLTgyNDksIC04MjQ5LAorIC04NjgwLCAtODY4MCwgLTkxMDIsIC05MTAyLCAtOTUxNiwgLTk1MTYsIC05OTIwLCAtOTkyMCwgLTEwMzE1LCAtMTAzMTUsCistMTA3MDEsIC0xMDcwMSwgLTExMDc3LCAtMTEwNzcsIC0xMTQ0MiwgLTExNDQyLCAtMTE3OTYsIC0xMTc5NiwgLTEyMTM5LCAtMTIxMzksCistMTI0NzEsIC0xMjQ3MSwgLTEyNzkxLCAtMTI3OTEsIC0xMzA5OSwgLTEzMDk5LCAtMTMzOTUsIC0xMzM5NSwgLTEzNjc4LCAtMTM2NzgsCistMTM5NDgsIC0xMzk0OCwgLTE0MjA1LCAtMTQyMDUsIC0xNDQ0OSwgLTE0NDQ5LCAtMTQ2NzksIC0xNDY3OSwgLTE0ODk1LCAtMTQ4OTUsCistMTUwOTgsIC0xNTA5OCwgLTE1Mjg2LCAtMTUyODYsIC0xNTQ1OSwgLTE1NDU5LCAtMTU2MTgsIC0xNTYxOCwgLTE1NzYzLCAtMTU3NjMsCistMTU4OTIsIC0xNTg5MiwgLTE2MDA3LCAtMTYwMDcsIC0xNjEwNywgLTE2MTA3LCAtMTYxOTEsIC0xNjE5MSwgLTE2MjYwLCAtMTYyNjAsCistMTYzMTQsIC0xNjMxNCwgLTE2MzUzLCAtMTYzNTMsIC0xNjM3NiwgLTE2Mzc2LCAtMTYzODMsIC0xNjM4MywgLTE2Mzc2LCAtMTYzNzYsCistMTYzNTMsIC0xNjM1MywgLTE2MzE0LCAtMTYzMTQsIC0xNjI2MCwgLTE2MjYwLCAtMTYxOTEsIC0xNjE5MSwgLTE2MTA3LCAtMTYxMDcsCistMTYwMDcsIC0xNjAwNywgLTE1ODkyLCAtMTU4OTIsIC0xNTc2MywgLTE1NzYzLCAtMTU2MTgsIC0xNTYxOCwgLTE1NDU5LCAtMTU0NTksCistMTUyODYsIC0xNTI4NiwgLTE1MDk4LCAtMTUwOTgsIC0xNDg5NSwgLTE0ODk1LCAtMTQ2NzksIC0xNDY3OSwgLTE0NDQ5LCAtMTQ0NDksCistMTQyMDUsIC0xNDIwNSwgLTEzOTQ4LCAtMTM5NDgsIC0xMzY3OCwgLTEzNjc4LCAtMTMzOTUsIC0xMzM5NSwgLTEzMDk5LCAtMTMwOTksCistMTI3OTEsIC0xMjc5MSwgLTEyNDcxLCAtMTI0NzEsIC0xMjEzOSwgLTEyMTM5LCAtMTE3OTYsIC0xMTc5NiwgLTExNDQyLCAtMTE0NDIsCistMTEwNzcsIC0xMTA3NywgLTEwNzAxLCAtMTA3MDEsIC0xMDMxNSwgLTEwMzE1LCAtOTkyMCwgLTk5MjAsIC05NTE2LCAtOTUxNiwKKyAtOTEwMiwgLTkxMDIsIC04NjgwLCAtODY4MCwgLTgyNDksIC04MjQ5LCAtNzgxMSwgLTc4MTEsIC03MzY2LCAtNzM2NiwKKyAtNjkxNCwgLTY5MTQsIC02NDU1LCAtNjQ1NSwgLTU5OTAsIC01OTkwLCAtNTUxOSwgLTU1MTksIC01MDQzLCAtNTA0MywKKyAtNDU2MywgLTQ1NjMsIC00MDc4LCAtNDA3OCwgLTM1ODksIC0zNTg5LCAtMzA5NywgLTMwOTcsIC0yNjAyLCAtMjYwMiwKKyAtMjEwNSwgLTIxMDUsIC0xNjA1LCAtMTYwNSwgLTExMDUsIC0xMTA1LCAgLTYwMywgIC02MDMsICAtMTAwLCAgLTEwMCwKKyAgIDQwMiwgICA0MDIsICAgOTA0LCAgIDkwNCwgIDE0MDUsICAxNDA1LCAgMTkwNSwgIDE5MDUsICAyNDA0LCAgMjQwNCwKKyAgMjkwMCwgIDI5MDAsICAzMzkzLCAgMzM5MywgIDM4ODMsICAzODgzLCAgNDM2OSwgIDQzNjksICA0ODUyLCAgNDg1MiwKKyAgNTMyOSwgIDUzMjksICA1ODAyLCAgNTgwMiwgIDYyNjksICA2MjY5LCAgNjczMSwgIDY3MzEsICA3MTg2LCAgNzE4NiwKKyAgNzYzNCwgIDc2MzQsICA4MDc1LCAgODA3NSwgIDg1MDksICA4NTA5LCAgODkzNCwgIDg5MzQsICA5MzUxLCAgOTM1MSwKKyAgOTc1OSwgIDk3NTksIDEwMTU5LCAxMDE1OSwgMTA1NDgsIDEwNTQ4LCAxMDkyOCwgMTA5MjgsIDExMjk3LCAxMTI5NywKKyAxMTY1NiwgMTE2NTYsIDEyMDAzLCAxMjAwMywgMTIzNDAsIDEyMzQwLCAxMjY2NSwgMTI2NjUsIDEyOTc3LCAxMjk3NywKKyAxMzI3OCwgMTMyNzgsIDEzNTY2LCAxMzU2NiwgMTM4NDIsIDEzODQyLCAxNDEwNCwgMTQxMDQsIDE0MzUzLCAxNDM1MywKKyAxNDU4OSwgMTQ1ODksIDE0ODEwLCAxNDgxMCwgMTUwMTgsIDE1MDE4LCAxNTIxMiwgMTUyMTIsIDE1MzkyLCAxNTM5MiwKKyAxNTU1NywgMTU1NTcsIDE1NzA3LCAxNTcwNywgMTU4NDIsIDE1ODQyLCAxNTk2MywgMTU5NjMsIDE2MDY5LCAxNjA2OSwKKyAxNjE1OSwgMTYxNTksIDE2MjM0LCAxNjIzNCwgMTYyOTQsIDE2Mjk0LCAxNjMzOSwgMTYzMzksIDE2MzY4LCAxNjM2OCwKKyAxNjM4MiwgMTYzODIsIDE2MzgxLCAxNjM4MSwgMTYzNjQsIDE2MzY0LCAxNjMzMSwgMTYzMzEsIDE2Mjg0LCAxNjI4NCwKKyAxNjIyMSwgMTYyMjEsIDE2MTQyLCAxNjE0MiwgMTYwNDksIDE2MDQ5LCAxNTk0MCwgMTU5NDAsIDE1ODE3LCAxNTgxNywKKyAxNTY3OCwgMTU2NzgsIDE1NTI1LCAxNTUyNSwgMTUzNTcsIDE1MzU3LCAxNTE3NSwgMTUxNzUsIDE0OTc4LCAxNDk3OCwKKyAxNDc2NywgMTQ3NjcsIDE0NTQzLCAxNDU0MywgMTQzMDQsIDE0MzA0LCAxNDA1MywgMTQwNTMsIDEzNzg4LCAxMzc4OCwKKyAxMzUxMCwgMTM1MTAsIDEzMjE5LCAxMzIxOSwgMTI5MTYsIDEyOTE2LCAxMjYwMCwgMTI2MDAsIDEyMjczLCAxMjI3MywKKyAxMTkzNSwgMTE5MzUsIDExNTg1LCAxMTU4NSwgMTEyMjQsIDExMjI0LCAxMDg1MywgMTA4NTMsIDEwNDcxLCAxMDQ3MSwKKyAxMDA3OSwgMTAwNzksICA5Njc5LCAgOTY3OSwgIDkyNjgsICA5MjY4LCAgODg1MCwgIDg4NTAsICA4NDIzLCAgODQyMywKKyAgNzk4OCwgIDc5ODgsICA3NTQ1LCAgNzU0NSwgIDcwOTUsICA3MDk1LCAgNjYzOSwgIDY2MzksICA2MTc2LCAgNjE3NiwKKyAgNTcwOCwgIDU3MDgsICA1MjM0LCAgNTIzNCwgIDQ3NTYsICA0NzU2LCAgNDI3MiwgIDQyNzIsICAzNzg1LCAgMzc4NSwKKyAgMzI5NCwgIDMyOTQsICAyODAxLCAgMjgwMSwgIDIzMDQsICAyMzA0LCAgMTgwNSwgIDE4MDUsICAxMzA1LCAgMTMwNSwKKyAgIDgwMywgICA4MDMsICAgMzAxLCAgIDMwMSwgIC0yMDEsICAtMjAxLCAgLTcwMywgIC03MDMsIC0xMjA1LCAtMTIwNSwKKyAtMTcwNSwgLTE3MDUsIC0yMjA0LCAtMjIwNCwgLTI3MDEsIC0yNzAxLCAtMzE5NiwgLTMxOTYsIC0zNjg3LCAtMzY4NywKKyAtNDE3NSwgLTQxNzUsIC00NjU5LCAtNDY1OSwgLTUxMzksIC01MTM5LCAtNTYxNCwgLTU2MTQsIC02MDgzLCAtNjA4MywKKyAtNjU0NywgLTY1NDcsIC03MDA1LCAtNzAwNSwgLTc0NTYsIC03NDU2LCAtNzkwMCwgLTc5MDAsIC04MzM2LCAtODMzNiwKKyAtODc2NSwgLTg3NjUsIC05MTg1LCAtOTE4NSwgLTk1OTcsIC05NTk3LCAtMTAwMDAsIC0xMDAwMCwgLTEwMzkzLCAtMTAzOTMsCistMTA3NzcsIC0xMDc3NywgLTExMTUwLCAtMTExNTAsIC0xMTUxMywgLTExNTEzLCAtMTE4NjYsIC0xMTg2NiwgLTEyMjA3LCAtMTIyMDcsCistMTI1MzYsIC0xMjUzNiwgLTEyODU0LCAtMTI4NTQsIC0xMzE1OSwgLTEzMTU5LCAtMTM0NTIsIC0xMzQ1MiwgLTEzNzMzLCAtMTM3MzMsCistMTQwMDEsIC0xNDAwMSwgLTE0MjU1LCAtMTQyNTUsIC0xNDQ5NiwgLTE0NDk2LCAtMTQ3MjMsIC0xNDcyMywgLTE0OTM3LCAtMTQ5MzcsCistMTUxMzYsIC0xNTEzNiwgLTE1MzIyLCAtMTUzMjIsIC0xNTQ5MiwgLTE1NDkyLCAtMTU2NDksIC0xNTY0OSwgLTE1NzkwLCAtMTU3OTAsCistMTU5MTcsIC0xNTkxNywgLTE2MDI4LCAtMTYwMjgsIC0xNjEyNSwgLTE2MTI1LCAtMTYyMDYsIC0xNjIwNiwgLTE2MjcyLCAtMTYyNzIsCistMTYzMjMsIC0xNjMyMywgLTE2MzU5LCAtMTYzNTksIC0xNjM3OSwgLTE2Mzc5LCAtMTYzODMsIC0xNjM4MywgLTE2MzcyLCAtMTYzNzIsCistMTYzNDYsIC0xNjM0NiwgLTE2MzA1LCAtMTYzMDUsIC0xNjI0OCwgLTE2MjQ4LCAtMTYxNzUsIC0xNjE3NSwgLTE2MDg4LCAtMTYwODgsCistMTU5ODUsIC0xNTk4NSwgLTE1ODY4LCAtMTU4NjgsIC0xNTczNSwgLTE1NzM1LCAtMTU1ODgsIC0xNTU4OCwgLTE1NDI2LCAtMTU0MjYsCistMTUyNDksIC0xNTI0OSwgLTE1MDU4LCAtMTUwNTgsIC0xNDg1MywgLTE0ODUzLCAtMTQ2MzQsIC0xNDYzNCwgLTE0NDAxLCAtMTQ0MDEsCistMTQxNTUsIC0xNDE1NSwgLTEzODk1LCAtMTM4OTUsIC0xMzYyMiwgLTEzNjIyLCAtMTMzMzcsIC0xMzMzNywgLTEzMDM4LCAtMTMwMzgsCistMTI3MjgsIC0xMjcyOCwgLTEyNDA2LCAtMTI0MDYsIC0xMjA3MiwgLTEyMDcyLCAtMTE3MjYsIC0xMTcyNiwgLTExMzcwLCAtMTEzNzAsCistMTEwMDIsIC0xMTAwMiwgLTEwNjI1LCAtMTA2MjUsIC0xMDIzNywgLTEwMjM3LCAtOTg0MCwgLTk4NDAsIC05NDM0LCAtOTQzNCwKKyAtOTAxOCwgLTkwMTgsIC04NTk0LCAtODU5NCwgLTgxNjIsIC04MTYyLCAtNzcyMywgLTc3MjMsIC03Mjc2LCAtNzI3NiwKKyAtNjgyMiwgLTY4MjIsIC02MzYyLCAtNjM2MiwgLTU4OTYsIC01ODk2LCAtNTQyNCwgLTU0MjQsIC00OTQ4LCAtNDk0OCwKKyAtNDQ2NiwgLTQ0NjYsIC0zOTgwLCAtMzk4MCwgLTM0OTEsIC0zNDkxLCAtMjk5OCwgLTI5OTgsIC0yNTAzLCAtMjUwMywKKyAtMjAwNSwgLTIwMDUsIC0xNTA1LCAtMTUwNSwgLTEwMDQsIC0xMDA0LCAgLTUwMiwgIC01MDIKK307CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkCitlYXN5c25kX3Rlc3R0b25lKHN0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcCwgaW50IGF1ZGlvX2ZpbGwpCit7CitpbnQgaTE7Cit1bnNpZ25lZCBjaGFyICpwMjsKK3N0cnVjdCBkYXRhX2J1ZmZlciAqcGF1ZGlvX2J1ZmZlcjsKKworSk9UKDgsICIlaT1hdWRpb19maWxsXG4iLCBhdWRpb19maWxsKTsKKworcGF1ZGlvX2J1ZmZlciA9ICZwZWFzeWNhcC0+YXVkaW9fYnVmZmVyW2F1ZGlvX2ZpbGxdOworCitwMiA9ICh1bnNpZ25lZCBjaGFyICopKHBhdWRpb19idWZmZXItPnBnbyk7Citmb3IgKGkxID0gMDsgIGkxIDwgUEFHRV9TSVpFOyAgaTEgKz0gNCwgcDIgKz0gNCkgeworCSpwMiAgICAgICA9ICh1bnNpZ25lZCBjaGFyKSAoMHgwMEZGICYgdG9uZXNbaTEvMl0pOworCSoocDIgKyAxKSA9ICh1bnNpZ25lZCBjaGFyKSgoMHhGRjAwICYgdG9uZXNbaTEvMl0pID4+IDgpOworCSoocDIgKyAyKSA9ICh1bnNpZ25lZCBjaGFyKSAoMHgwMEZGICYgdG9uZXNbaTEvMiArIDFdKTsKKwkqKHAyICsgMykgPSAodW5zaWduZWQgY2hhcikoKDB4RkYwMCAmIHRvbmVzW2kxLzIgKyAxXSkgPj4gOCk7CisJfQorcmV0dXJuOworfQorI2VuZGlmIC8qRUFTWUNBUF9URVNUVE9ORSovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9waHkuYyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BoeS5jCmluZGV4IGE2ZDlmMjkuLjIxYzVlZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BoeS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BoeS5jCkBAIC03NjAsNyArNzYwLDggQEAKIAkJCWlmIChldGRldi0+bGlua3NwZWVkID09IFRSVUVQSFlfU1BFRURfMTBNQlBTKSB7CiAJCQkJLyogTk9URSAtIElzIHRoZXJlIGEgd2F5IHRvIHF1ZXJ5IHRoaXMgd2l0aG91dAogCQkJCSAqIFRydWVQSFk/Ci0JCQkJICogJiYgVFJVX1F1ZXJ5Q29yZVR5cGUoZXRkZXYtPmhUcnVlUGh5LCAwKSA9PSBFTUlfVFJVRVBIWV9BMTNPKSB7CisJCQkJICogJiYgVFJVX1F1ZXJ5Q29yZVR5cGUoZXRkZXYtPmhUcnVlUGh5LCAwKSA9PQorCQkJCSAqIEVNSV9UUlVFUEhZX0ExM08pIHsKIAkJCQkgKi8KIAkJCQl1MTYgUmVnaXN0ZXIxODsKIApAQCAtNzc4LDcgKzc3OSw3IEBACiAJCQkgKiBpbiB0aGUgTGlua0RldGVjdGlvbkRQQykuCiAJCQkgKi8KIAkJCWlmICghKGV0ZGV2LT5GbGFncyAmIGZNUF9BREFQVEVSX0xJTktfREVURUNUSU9OKSB8fAotCQkJICAoZXRkZXYtPk1lZGlhU3RhdGUgPT0gTkVUSUZfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QpKSB7CisJCQkgKGV0ZGV2LT5NZWRpYVN0YXRlID09IE5FVElGX1NUQVRVU19NRURJQV9ESVNDT05ORUNUKSkgewogCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZldGRldi0+TG9jaywgZmxhZ3MpOwogCQkJCWV0ZGV2LT5NZWRpYVN0YXRlID0KIAkJCQkgICAgTkVUSUZfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1Q7CkBAIC04MzYsNyArODM3LDggQEAKIAkJCQkvKgogCQkJCSAqIE5PVEUgLSBJcyB0aGVyZSBhIHdheSB0byBxdWVyeSB0aGlzIHdpdGhvdXQKIAkJCQkgKiBUcnVlUEhZPwotCQkJCSAqICYmIFRSVV9RdWVyeUNvcmVUeXBlKGV0ZGV2LT5oVHJ1ZVBoeSwgMCk9PSBFTUlfVFJVRVBIWV9BMTNPKSB7CisJCQkJICogJiYgVFJVX1F1ZXJ5Q29yZVR5cGUoZXRkZXYtPmhUcnVlUGh5LCAwKT09CisJCQkJICogRU1JX1RSVUVQSFlfQTEzTykgewogCQkJCSAqLwogCQkJCXUxNiBSZWdpc3RlcjE4OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9odi9LY29uZmlnCmluZGV4IDk3NDgwZjUuLjc0NTVjODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9LY29uZmlnCkBAIC0xNyw3ICsxNyw3IEBACiAKIGNvbmZpZyBIWVBFUlZfQkxPQ0sKIAl0cmlzdGF0ZSAiTWljcm9zb2Z0IEh5cGVyLVYgdmlydHVhbCBibG9jayBkcml2ZXIiCi0JZGVwZW5kcyBvbiBCTE9DSyAmJiBTQ1NJICYmIExCREFGCisJZGVwZW5kcyBvbiBCTE9DSyAmJiBTQ1NJICYmIChMQkRBRiB8fCA2NEJJVCkKIAlkZWZhdWx0IEhZUEVSVgogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBlbmFibGUgdGhlIEh5cGVyLVYgdmlydHVhbCBibG9jayBkcml2ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvaHYvTWFrZWZpbGUKaW5kZXggMTg2NmY4MC4uYjYzNTE1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLW9iai0kKENPTkZJR19IWVBFUlYpCQkrPSBodl92bWJ1cy5vCitvYmotJChDT05GSUdfSFlQRVJWKQkJKz0gaHZfdm1idXMubyBodl90aW1lc291cmNlLm8KIG9iai0kKENPTkZJR19IWVBFUlZfU1RPUkFHRSkJKz0gaHZfc3RvcnZzYy5vCiBvYmotJChDT05GSUdfSFlQRVJWX0JMT0NLKQkrPSBodl9ibGt2c2Mubwogb2JqLSQoQ09ORklHX0hZUEVSVl9ORVQpCSs9IGh2X25ldHZzYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvYmxrdnNjLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvYmxrdnNjLmMKaW5kZXggMGRhZWJjNC4uOTI5MjM4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2MuYwpAQCAtNDAsMTUgKzQwLDExIEBACiAJc3RydWN0IHN0b3J2c2NfZGV2aWNlX2luZm8gKmRldmljZUluZm87CiAJaW50IHJldCA9IDA7CiAKLQlEUFJJTlRfRU5URVIoQkxLVlNDKTsKLQogCWRldmljZUluZm8gPSAoc3RydWN0IHN0b3J2c2NfZGV2aWNlX2luZm8gKilBZGRpdGlvbmFsSW5mbzsKIAogCXJldCA9IFN0b3JWc2NPbkRldmljZUFkZChEZXZpY2UsIEFkZGl0aW9uYWxJbmZvKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJRFBSSU5UX0VYSVQoQkxLVlNDKTsKKwlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7Ci0JfQogCiAJLyoKIAkgKiBXZSBuZWVkIHRvIHVzZSB0aGUgZGV2aWNlIGluc3RhbmNlIGd1aWQgdG8gc2V0IHRoZSBwYXRoIGFuZCB0YXJnZXQKQEAgLTYzLDggKzU5LDYgQEAKIAlkZXZpY2VJbmZvLT5UYXJnZXRJZCA9IERldmljZS0+ZGV2aWNlSW5zdGFuY2UuZGF0YVs1XSA8PCA4IHwKIAkJCSAgICAgICBEZXZpY2UtPmRldmljZUluc3RhbmNlLmRhdGFbNF07CiAKLQlEUFJJTlRfRVhJVChCTEtWU0MpOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNzMsOCArNjcsNiBAQAogCXN0cnVjdCBzdG9ydnNjX2RyaXZlcl9vYmplY3QgKnN0b3JEcml2ZXI7CiAJaW50IHJldCA9IDA7CiAKLQlEUFJJTlRfRU5URVIoQkxLVlNDKTsKLQogCXN0b3JEcml2ZXIgPSAoc3RydWN0IHN0b3J2c2NfZHJpdmVyX29iamVjdCAqKURyaXZlcjsKIAogCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgYXQgbGVhc3QgMiBwYWdlcyBzaW5jZSAxIHBhZ2UgaXMgdXNlZCBmb3IgY29udHJvbCAqLwpAQCAtMTA2LDcgKzk4LDUgQEAKIAlzdG9yRHJpdmVyLT5CYXNlLk9uQ2xlYW51cCA9IFN0b3JWc2NPbkNsZWFudXA7CiAJc3RvckRyaXZlci0+T25JT1JlcXVlc3QJPSBTdG9yVnNjT25JT1JlcXVlc3Q7CiAKLQlEUFJJTlRfRVhJVChCTEtWU0MpOwotCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvYmxrdnNjX2Rydi5jCmluZGV4IDYxYmQwYmUuLmY3ZWEyYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzY19kcnYuYwpAQCAtMTc1LDggKzE3NSw2IEBACiAJc3RydWN0IGRyaXZlcl9jb250ZXh0ICpkcnZfY3R4ID0gJmdfYmxrdnNjX2Rydi5kcnZfY3R4OwogCWludCByZXQ7CiAKLQlEUFJJTlRfRU5URVIoQkxLVlNDX0RSVik7Ci0KIAl2bWJ1c19nZXRfaW50ZXJmYWNlKCZzdG9ydnNjX2Rydl9vYmotPkJhc2UuVm1idXNDaGFubmVsSW50ZXJmYWNlKTsKIAogCXN0b3J2c2NfZHJ2X29iai0+UmluZ0J1ZmZlclNpemUgPSBibGt2c2NfcmluZ2J1ZmZlcl9zaXplOwpAQCAtMTk1LDggKzE5Myw2IEBACiAJLyogVGhlIGRyaXZlciBiZWxvbmdzIHRvIHZtYnVzICovCiAJcmV0ID0gdm1idXNfY2hpbGRfZHJpdmVyX3JlZ2lzdGVyKGRydl9jdHgpOwogCi0JRFBSSU5UX0VYSVQoQkxLVlNDX0RSVik7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMTQsOCArMjEwLDYgQEAKIAlzdHJ1Y3QgZGV2aWNlICpjdXJyZW50X2RldjsKIAlpbnQgcmV0OwogCi0JRFBSSU5UX0VOVEVSKEJMS1ZTQ19EUlYpOwotCiAJd2hpbGUgKDEpIHsKIAkJY3VycmVudF9kZXYgPSBOVUxMOwogCkBAIC0yNDEsOCArMjM1LDYgQEAKIAogCXZtYnVzX2NoaWxkX2RyaXZlcl91bnJlZ2lzdGVyKGRydl9jdHgpOwogCi0JRFBSSU5UX0VYSVQoQkxLVlNDX0RSVik7Ci0KIAlyZXR1cm47CiB9CiAKQEAgLTI2OCw4ICsyNjAsNiBAQAogCXN0YXRpYyBpbnQgaWRlMF9yZWdpc3RlcmVkOwogCXN0YXRpYyBpbnQgaWRlMV9yZWdpc3RlcmVkOwogCi0JRFBSSU5UX0VOVEVSKEJMS1ZTQ19EUlYpOwotCiAJRFBSSU5UX0RCRyhCTEtWU0NfRFJWLCAiYmxrdnNjX3Byb2JlIC0gZW50ZXIiKTsKIAogCWlmICghc3RvcnZzY19kcnZfb2JqLT5CYXNlLk9uRGV2aWNlQWRkKSB7CkBAIC00MTMsOCArNDAzLDYgQEAKIAkJYmxrZGV2ID0gTlVMTDsKIAl9CiAKLQlEUFJJTlRfRVhJVChCTEtWU0NfRFJWKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTc1MSwxNCArNzM5LDEwIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCi0JRFBSSU5UX0VOVEVSKEJMS1ZTQ19EUlYpOwotCiAJRFBSSU5UX0RCRyhCTEtWU0NfRFJWLCAiYmxrdnNjX3JlbW92ZSgpXG4iKTsKIAotCWlmICghc3RvcnZzY19kcnZfb2JqLT5CYXNlLk9uRGV2aWNlUmVtb3ZlKSB7Ci0JCURQUklOVF9FWElUKEJMS1ZTQ19EUlYpOworCWlmICghc3RvcnZzY19kcnZfb2JqLT5CYXNlLk9uRGV2aWNlUmVtb3ZlKQogCQlyZXR1cm4gLTE7Ci0JfQogCiAJLyoKIAkgKiBDYWxsIHRvIHRoZSB2c2MgZHJpdmVyIHRvIGxldCBpdCBrbm93IHRoYXQgdGhlIGRldmljZSBpcyBiZWluZwpAQCAtODAyLDggKzc4Niw2IEBACiAKIAlrZnJlZShibGtkZXYpOwogCi0JRFBSSU5UX0VYSVQoQkxLVlNDX0RSVik7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNDkyLDIyICsxNDc0LDE2IEBACiAKIAlCVUlMRF9CVUdfT04oc2l6ZW9mKHNlY3Rvcl90KSAhPSA4KTsKIAotCURQUklOVF9FTlRFUihCTEtWU0NfRFJWKTsKLQogCURQUklOVF9JTkZPKEJMS1ZTQ19EUlYsICJCbGt2c2MgaW5pdGlhbGl6aW5nLi4uLiIpOwogCiAJcmV0ID0gYmxrdnNjX2Rydl9pbml0KEJsa1ZzY0luaXRpYWxpemUpOwogCi0JRFBSSU5UX0VYSVQoQkxLVlNDX0RSVik7Ci0KIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYmxrdnNjX2V4aXQodm9pZCkKIHsKLQlEUFJJTlRfRU5URVIoQkxLVlNDX0RSVik7CiAJYmxrdnNjX2Rydl9leGl0KCk7Ci0JRFBSSU5UX0VOVEVSKEJMS1ZTQ19EUlYpOwogfQogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvY2hhbm5lbC5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L2NoYW5uZWwuYwppbmRleCBmMDQ3YzVhLi5mZWNlMzBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvY2hhbm5lbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9jaGFubmVsLmMKQEAgLTc0LDggKzc0LDYgQEAKIHsKIAlzdHJ1Y3QgaHZfbW9uaXRvcl9wYWdlICptb25pdG9yUGFnZTsKIAotCURQUklOVF9FTlRFUihWTUJVUyk7Ci0KIAlpZiAoQ2hhbm5lbC0+T2ZmZXJNc2cuTW9uaXRvckFsbG9jYXRlZCkgewogCQkvKiBFYWNoIHUzMiByZXByZXNlbnRzIDMyIGNoYW5uZWxzICovCiAJCXNldF9iaXQoQ2hhbm5lbC0+T2ZmZXJNc2cuQ2hpbGRSZWxJZCAmIDMxLApAQCAtOTIsOCArOTAsNiBAQAogCX0gZWxzZSB7CiAJCVZtYnVzU2V0RXZlbnQoQ2hhbm5lbC0+T2ZmZXJNc2cuQ2hpbGRSZWxJZCk7CiAJfQotCi0JRFBSSU5UX0VYSVQoVk1CVVMpOwogfQogCiAjaWYgMApAQCAtMTAxLDggKzk3LDYgQEAKIHsKIAlzdHJ1Y3QgaHZfbW9uaXRvcl9wYWdlICptb25pdG9yUGFnZTsKIAotCURQUklOVF9FTlRFUihWTUJVUyk7Ci0KIAlpZiAoQ2hhbm5lbC0+T2ZmZXJNc2cuTW9uaXRvckFsbG9jYXRlZCkgewogCQkvKiBFYWNoIHUzMiByZXByZXNlbnRzIDMyIGNoYW5uZWxzICovCiAJCWNsZWFyX2JpdChDaGFubmVsLT5PZmZlck1zZy5DaGlsZFJlbElkICYgMzEsCkBAIC0xMTcsOCArMTExLDYgQEAKIAkJCSAgKHVuc2lnbmVkIGxvbmcgKikmbW9uaXRvclBhZ2UtPlRyaWdnZXJHcm91cAogCQkJCQlbQ2hhbm5lbC0+TW9uaXRvckdyb3VwXS5QZW5kaW5nKTsKIAl9Ci0KLQlEUFJJTlRfRVhJVChWTUJVUyk7CiB9CiAKICNlbmRpZgpAQCAtMTgwLDggKzE3Miw2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0LCBlcnIgPSAwOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKLQogCS8qIEFsaWduZWQgdG8gcGFnZSBzaXplICovCiAJLyogQVNTRVJUKCEoU2VuZFJpbmdCdWZmZXJTaXplICYgKFBBR0VfU0laRSAtIDEpKSk7ICovCiAJLyogQVNTRVJUKCEoUmVjdlJpbmdCdWZmZXJTaXplICYgKFBBR0VfU0laRSAtIDEpKSk7ICovCkBAIC0zMDUsOSArMjk1LDYgQEAKIAogCWtmcmVlKG9wZW5JbmZvLT5XYWl0RXZlbnQpOwogCWtmcmVlKG9wZW5JbmZvKTsKLQotCURQUklOVF9FWElUKFZNQlVTKTsKLQogCXJldHVybiAwOwogCiBlcnJvcm91dDoKQEAgLTQ2NSw2ICs0NTIsOCBAQAogCQkJICBzaXplb2Yoc3RydWN0IHZtYnVzX2NoYW5uZWxfZ3BhZGxfaGVhZGVyKSArCiAJCQkgIHNpemVvZihzdHJ1Y3QgZ3BhX3JhbmdlKSArIHBhZ2VDb3VudCAqIHNpemVvZih1NjQpOwogCQltc2dIZWFkZXIgPSBremFsbG9jKG1zZ1NpemUsIEdGUF9LRVJORUwpOworCQlpZiAobXNnSGVhZGVyID09IE5VTEwpCisJCQlnb3RvIG5vbWVtOwogCQltc2dIZWFkZXItPk1lc3NhZ2VTaXplID0gbXNnU2l6ZTsKIAogCQlncGFIZWFkZXIgPSAoc3RydWN0IHZtYnVzX2NoYW5uZWxfZ3BhZGxfaGVhZGVyICopbXNnSGVhZGVyLT5Nc2c7CkBAIC01MDksOCArNDk4LDYgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKLQogCW5leHRHcGFkbEhhbmRsZSA9IGF0b21pY19yZWFkKCZnVm1idXNDb25uZWN0aW9uLk5leHRHcGFkbEhhbmRsZSk7CiAJYXRvbWljX2luYygmZ1ZtYnVzQ29ubmVjdGlvbi5OZXh0R3BhZGxIYW5kbGUpOwogCkBAIC01OTIsOSArNTc5LDYgQEAKIAogCWtmcmVlKG1zZ0luZm8tPldhaXRFdmVudCk7CiAJa2ZyZWUobXNnSW5mbyk7Ci0KLQlEUFJJTlRfRVhJVChWTUJVUyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC02MDgsOCArNTkyLDYgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVMpOwotCiAJLyogQVNTRVJUKEdwYWRsSGFuZGxlICE9IDApOyAqLwogCiAJaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCppbmZvKSArCkBAIC02NTAsOSArNjMyLDYgQEAKIAogCWtmcmVlKGluZm8tPldhaXRFdmVudCk7CiAJa2ZyZWUoaW5mbyk7Ci0KLQlEUFJJTlRfRVhJVChWTUJVUyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC02NjYsOCArNjQ1LDYgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVMpOwotCiAJLyogU3RvcCBjYWxsYmFjayBhbmQgY2FuY2VsIHRoZSB0aW1lciBhc2FwICovCiAJQ2hhbm5lbC0+T25DaGFubmVsQ2FsbGJhY2sgPSBOVUxMOwogCWRlbF90aW1lcl9zeW5jKCZDaGFubmVsLT5wb2xsX3RpbWVyKTsKQEAgLTcyMCw4ICs2OTcsNiBAQAogCiAJCUZyZWVWbWJ1c0NoYW5uZWwoQ2hhbm5lbCk7CiAJfQotCi0JRFBSSU5UX0VYSVQoVk1CVVMpOwogfQogCiAvKioKQEAgLTc0OSw3ICs3MjQsNiBAQAogCXU2NCBhbGlnbmVkRGF0YSA9IDA7CiAJaW50IHJldDsKIAotCURQUklOVF9FTlRFUihWTUJVUyk7CiAJRFBSSU5UX0RCRyhWTUJVUywgImNoYW5uZWwgJXAgYnVmZmVyICVwIGxlbiAlZCIsCiAJCSAgIENoYW5uZWwsIEJ1ZmZlciwgQnVmZmVyTGVuKTsKIApAQCAtNzc2LDggKzc1MCw2IEBACiAJaWYgKHJldCA9PSAwICYmICFHZXRSaW5nQnVmZmVySW50ZXJydXB0TWFzaygmQ2hhbm5lbC0+T3V0Ym91bmQpKQogCQlWbWJ1c0NoYW5uZWxTZXRFdmVudChDaGFubmVsKTsKIAotCURQUklOVF9FWElUKFZNQlVTKTsKLQogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKFZtYnVzQ2hhbm5lbFNlbmRQYWNrZXQpOwpAQCAtODAwLDggKzc3Miw2IEBACiAJc3RydWN0IHNjYXR0ZXJsaXN0IGJ1ZmZlckxpc3RbM107CiAJdTY0IGFsaWduZWREYXRhID0gMDsKIAotCURQUklOVF9FTlRFUihWTUJVUyk7Ci0KIAlpZiAoUGFnZUNvdW50ID4gTUFYX1BBR0VfQlVGRkVSX0NPVU5UKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtODQ0LDggKzgxNCw2IEBACiAJaWYgKHJldCA9PSAwICYmICFHZXRSaW5nQnVmZmVySW50ZXJydXB0TWFzaygmQ2hhbm5lbC0+T3V0Ym91bmQpKQogCQlWbWJ1c0NoYW5uZWxTZXRFdmVudChDaGFubmVsKTsKIAotCURQUklOVF9FWElUKFZNQlVTKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTg2Nyw4ICs4MzUsNiBAQAogCXUzMiBQZm5Db3VudCA9IE5VTV9QQUdFU19TUEFOTkVEKE11bHRpUGFnZUJ1ZmZlci0+T2Zmc2V0LAogCQkJCQkgTXVsdGlQYWdlQnVmZmVyLT5MZW5ndGgpOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKLQogCUR1bXBWbWJ1c0NoYW5uZWwoQ2hhbm5lbCk7CiAKIAlEUFJJTlRfREJHKFZNQlVTLCAiZGF0YSBidWZmZXIgLSBvZmZzZXQgJXUgbGVuICV1IHBmbiBjb3VudCAldSIsCkBAIC05MTQsOCArODgwLDYgQEAKIAlpZiAocmV0ID09IDAgJiYgIUdldFJpbmdCdWZmZXJJbnRlcnJ1cHRNYXNrKCZDaGFubmVsLT5PdXRib3VuZCkpCiAJCVZtYnVzQ2hhbm5lbFNldEV2ZW50KENoYW5uZWwpOwogCi0JRFBSSU5UX0VYSVQoVk1CVVMpOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtOTQyLDggKzkwNiw2IEBACiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKLQogCSpCdWZmZXJBY3R1YWxMZW4gPSAwOwogCSpSZXF1ZXN0SWQgPSAwOwogCkBAIC05NTUsNyArOTE3LDYgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmQ2hhbm5lbC0+aW5ib3VuZF9sb2NrLCBmbGFncyk7CiAKIAkJLyogRFBSSU5UX0RCRyhWTUJVUywgIm5vdGhpbmcgdG8gcmVhZCEhIik7ICovCi0JCURQUklOVF9FWElUKFZNQlVTKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC05NzcsOCArOTM4LDYgQEAKIAogCQlEUFJJTlRfRVJSKFZNQlVTLCAiYnVmZmVyIHRvbyBzbWFsbCAtIGdvdCAlZCBuZWVkcyAlZCIsCiAJCQkgICBCdWZmZXJMZW4sIHVzZXJMZW4pOwotCQlEUFJJTlRfRVhJVChWTUJVUyk7Ci0KIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtOTkwLDggKzk0OSw2IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZDaGFubmVsLT5pbmJvdW5kX2xvY2ssIGZsYWdzKTsKIAotCURQUklOVF9FWElUKFZNQlVTKTsKLQogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChWbWJ1c0NoYW5uZWxSZWN2UGFja2V0KTsKQEAgLTEwMDksOCArOTY2LDYgQEAKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVMpOwotCiAJKkJ1ZmZlckFjdHVhbExlbiA9IDA7CiAJKlJlcXVlc3RJZCA9IDA7CiAKQEAgLTEwMjIsNyArOTc3LDYgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmQ2hhbm5lbC0+aW5ib3VuZF9sb2NrLCBmbGFncyk7CiAKIAkJLyogRFBSSU5UX0RCRyhWTUJVUywgIm5vdGhpbmcgdG8gcmVhZCEhIik7ICovCi0JCURQUklOVF9FWElUKFZNQlVTKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xMDQzLDcgKzk5Nyw2IEBACiAKIAkJRFBSSU5UX0VSUihWTUJVUywgImJ1ZmZlciB0b28gc21hbGwgLSBuZWVkZWQgJWQgYnl0ZXMgYnV0ICIKIAkJCSAgICJnb3Qgc3BhY2UgZm9yIG9ubHkgJWQgYnl0ZXMiLCBwYWNrZXRMZW4sIEJ1ZmZlckxlbik7Ci0JCURQUklOVF9FWElUKFZNQlVTKTsKIAkJcmV0dXJuIC0yOwogCX0KIApAQCAtMTA1Myw5ICsxMDA2LDYgQEAKIAlyZXQgPSBSaW5nQnVmZmVyUmVhZCgmQ2hhbm5lbC0+SW5ib3VuZCwgQnVmZmVyLCBwYWNrZXRMZW4sIDApOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmQ2hhbm5lbC0+aW5ib3VuZF9sb2NrLCBmbGFncyk7Ci0KLQlEUFJJTlRfRVhJVChWTUJVUyk7Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L2NoYW5uZWxfbWdtdC5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L2NoYW5uZWxfbWdtdC5jCmluZGV4IDEyZGI1NTUuLjZjY2Y1MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9jaGFubmVsX21nbXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvY2hhbm5lbF9tZ210LmMKQEAgLTI2NywxNSArMjY3LDExIEBACiB7CiAJc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwgPSBjb250ZXh0OwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKLQogCURQUklOVF9EQkcoVk1CVVMsICJyZWxlYXNpbmcgY2hhbm5lbCAoJXApIiwgY2hhbm5lbCk7CiAJZGVzdHJveV93b3JrcXVldWUoY2hhbm5lbC0+Q29udHJvbFdRKTsKIAlEUFJJTlRfREJHKFZNQlVTLCAiY2hhbm5lbCByZWxlYXNlZCAoJXApIiwgY2hhbm5lbCk7CiAKIAlrZnJlZShjaGFubmVsKTsKLQotCURQUklOVF9FWElUKFZNQlVTKTsKIH0KIAogLyoKQEAgLTMyNiw4ICszMjIsNiBAQAogCWludCBjbnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCURQUklOVF9FTlRFUihWTUJVUyk7Ci0KIAkvKiBNYWtlIHN1cmUgdGhpcyBpcyBhIG5ldyBvZmZlciAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZnVm1idXNDb25uZWN0aW9uLmNoYW5uZWxfbG9jaywgZmxhZ3MpOwogCkBAIC0zNTMsNyArMzQ3LDYgQEAKIAkJRFBSSU5UX0RCRyhWTUJVUywgIklnbm9yaW5nIGR1cGxpY2F0ZSBvZmZlciBmb3IgcmVsaWQgKCVkKSIsCiAJCQkgICBuZXdDaGFubmVsLT5PZmZlck1zZy5DaGlsZFJlbElkKTsKIAkJRnJlZVZtYnVzQ2hhbm5lbChuZXdDaGFubmVsKTsKLQkJRFBSSU5UX0VYSVQoVk1CVVMpOwogCQlyZXR1cm47CiAJfQogCkBAIC00MTAsNyArNDAzLDYgQEAKIAkJCX0KIAkJfQogCX0KLQlEUFJJTlRfRVhJVChWTUJVUyk7CiB9CiAKIC8qCkBAIC00MjAsOSArNDEyLDcgQEAKIHsKIAlzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCA9IGNvbnRleHQ7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVMpOwogCVZtYnVzQ2hpbGREZXZpY2VSZW1vdmUoY2hhbm5lbC0+RGV2aWNlT2JqZWN0KTsKLQlEUFJJTlRfRVhJVChWTUJVUyk7CiB9CiAKIC8qCkBAIC00NDEsOCArNDMxLDYgQEAKIAlpbnQgaTsKIAlpbnQgZlN1cHBvcnRlZCA9IDA7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVMpOwotCiAJb2ZmZXIgPSAoc3RydWN0IHZtYnVzX2NoYW5uZWxfb2ZmZXJfY2hhbm5lbCAqKWhkcjsKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTV9ERVZJQ0VfQ0xBU1NFU19TVVBQT1JURUQ7IGkrKykgewogCQlpZiAobWVtY21wKCZvZmZlci0+T2ZmZXIuSW50ZXJmYWNlVHlwZSwKQEAgLTQ1NSw3ICs0NDMsNiBAQAogCWlmICghZlN1cHBvcnRlZCkgewogCQlEUFJJTlRfREJHKFZNQlVTLCAiSWdub3JpbmcgY2hhbm5lbCBvZmZlciBub3RpZmljYXRpb24gZm9yICIKIAkJCSAgICJjaGlsZCByZWxpZCAlZCIsIG9mZmVyLT5DaGlsZFJlbElkKTsKLQkJRFBSSU5UX0VYSVQoVk1CVVMpOwogCQlyZXR1cm47CiAJfQogCkBAIC01MDQsOCArNDkxLDYgQEAKIAkvKiBUT0RPOiBNYWtlIHN1cmUgdGhlIG9mZmVyIGNvbWVzIGZyb20gb3VyIHBhcmVudCBwYXJ0aXRpb24gKi8KIAlvc2Rfc2NoZWR1bGVfY2FsbGJhY2sobmV3Q2hhbm5lbC0+Q29udHJvbFdRLCBWbWJ1c0NoYW5uZWxQcm9jZXNzT2ZmZXIsCiAJCQkgICAgICBuZXdDaGFubmVsKTsKLQotCURQUklOVF9FWElUKFZNQlVTKTsKIH0KIAogLyoKQEAgLTUxOCw4ICs1MDMsNiBAQAogCXN0cnVjdCB2bWJ1c19jaGFubmVsX3Jlc2NpbmRfb2ZmZXIgKnJlc2NpbmQ7CiAJc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWw7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVMpOwotCiAJcmVzY2luZCA9IChzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9yZXNjaW5kX29mZmVyICopaGRyOwogCWNoYW5uZWwgPSBHZXRDaGFubmVsRnJvbVJlbElkKHJlc2NpbmQtPkNoaWxkUmVsSWQpOwogCWlmIChjaGFubmVsID09IE5VTEwpIHsKQEAgLTUzMSw4ICs1MTQsNiBAQAogCW9zZF9zY2hlZHVsZV9jYWxsYmFjayhjaGFubmVsLT5Db250cm9sV1EsCiAJCQkgICAgICBWbWJ1c0NoYW5uZWxQcm9jZXNzUmVzY2luZE9mZmVyLAogCQkJICAgICAgY2hhbm5lbCk7Ci0KLQlEUFJJTlRfRVhJVChWTUJVUyk7CiB9CiAKIC8qCkBAIC01NDMsOCArNTI0LDYgQEAKIHN0YXRpYyB2b2lkIFZtYnVzQ2hhbm5lbE9uT2ZmZXJzRGVsaXZlcmVkKAogCQkJc3RydWN0IHZtYnVzX2NoYW5uZWxfbWVzc2FnZV9oZWFkZXIgKmhkcikKIHsKLQlEUFJJTlRfRU5URVIoVk1CVVMpOwotCURQUklOVF9FWElUKFZNQlVTKTsKIH0KIAogLyoKQEAgLTU2Myw4ICs1NDIsNiBAQAogCXN0cnVjdCB2bWJ1c19jaGFubmVsX29wZW5fY2hhbm5lbCAqb3Blbk1zZzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKLQogCXJlc3VsdCA9IChzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9vcGVuX3Jlc3VsdCAqKWhkcjsKIAlEUFJJTlRfREJHKFZNQlVTLCAidm1idXMgb3BlbiByZXN1bHQgLSAlZCIsIHJlc3VsdC0+U3RhdHVzKTsKIApAQCAtNTkxLDggKzU2OCw2IEBACiAJCX0KIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ1ZtYnVzQ29ubmVjdGlvbi5jaGFubmVsbXNnX2xvY2ssIGZsYWdzKTsKLQotCURQUklOVF9FWElUKFZNQlVTKTsKIH0KIAogLyoKQEAgLTYxMSw4ICs1ODYsNiBAQAogCXN0cnVjdCB2bWJ1c19jaGFubmVsX2dwYWRsX2hlYWRlciAqZ3BhZGxIZWFkZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCURQUklOVF9FTlRFUihWTUJVUyk7Ci0KIAlncGFkbENyZWF0ZWQgPSAoc3RydWN0IHZtYnVzX2NoYW5uZWxfZ3BhZGxfY3JlYXRlZCAqKWhkcjsKIAlEUFJJTlRfREJHKFZNQlVTLCAidm1idXMgZ3BhZGwgY3JlYXRlZCByZXN1bHQgLSAlZCIsCiAJCSAgIGdwYWRsQ3JlYXRlZC0+Q3JlYXRpb25TdGF0dXMpOwpAQCAtNjQzLDggKzYxNiw2IEBACiAJCX0KIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ1ZtYnVzQ29ubmVjdGlvbi5jaGFubmVsbXNnX2xvY2ssIGZsYWdzKTsKLQotCURQUklOVF9FWElUKFZNQlVTKTsKIH0KIAogLyoKQEAgLTY2NCw4ICs2MzUsNiBAQAogCXN0cnVjdCB2bWJ1c19jaGFubmVsX2dwYWRsX3RlYXJkb3duICpncGFkbFRlYXJkb3duOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVMpOwotCiAJZ3BhZGxUb3JuZG93biA9IChzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9ncGFkbF90b3JuZG93biAqKWhkcjsKIAogCS8qCkBAIC02OTEsOCArNjYwLDYgQEAKIAkJfQogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnVm1idXNDb25uZWN0aW9uLmNoYW5uZWxtc2dfbG9jaywgZmxhZ3MpOwotCi0JRFBSSU5UX0VYSVQoVk1CVVMpOwogfQogCiAvKgpAQCAtNzEyLDggKzY3OSw2IEBACiAJc3RydWN0IHZtYnVzX2NoYW5uZWxfdmVyc2lvbl9yZXNwb25zZSAqdmVyc2lvblJlc3BvbnNlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVMpOwotCiAJdmVyc2lvblJlc3BvbnNlID0gKHN0cnVjdCB2bWJ1c19jaGFubmVsX3ZlcnNpb25fcmVzcG9uc2UgKiloZHI7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmdWbWJ1c0Nvbm5lY3Rpb24uY2hhbm5lbG1zZ19sb2NrLCBmbGFncyk7CiAKQEAgLTczMiw4ICs2OTcsNiBAQAogCQl9CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdWbWJ1c0Nvbm5lY3Rpb24uY2hhbm5lbG1zZ19sb2NrLCBmbGFncyk7Ci0KLQlEUFJJTlRfRVhJVChWTUJVUyk7CiB9CiAKIC8qIENoYW5uZWwgbWVzc2FnZSBkaXNwYXRjaCB0YWJsZSAqLwpAQCAtNzY5LDggKzczMiw2IEBACiAJc3RydWN0IHZtYnVzX2NoYW5uZWxfbWVzc2FnZV9oZWFkZXIgKmhkcjsKIAlpbnQgc2l6ZTsKIAotCURQUklOVF9FTlRFUihWTUJVUyk7Ci0KIAloZHIgPSAoc3RydWN0IHZtYnVzX2NoYW5uZWxfbWVzc2FnZV9oZWFkZXIgKiltc2ctPnUuUGF5bG9hZDsKIAlzaXplID0gbXNnLT5IZWFkZXIuUGF5bG9hZFNpemU7CiAKQEAgLTc5NCw3ICs3NTUsNiBAQAogCiAJLyogRnJlZSB0aGUgbXNnIHRoYXQgd2FzIGFsbG9jYXRlZCBpbiBWbWJ1c09uTXNnRFBDKCkgKi8KIAlrZnJlZShtc2cpOwotCURQUklOVF9FWElUKFZNQlVTKTsKIH0KIAogLyoKQEAgLTgwNiw4ICs3NjYsNiBAQAogCXN0cnVjdCB2bWJ1c19jaGFubmVsX21zZ2luZm8gKm1zZ0luZm87CiAJaW50IHJldDsKIAotCURQUklOVF9FTlRFUihWTUJVUyk7Ci0KIAltc2dJbmZvID0ga21hbGxvYyhzaXplb2YoKm1zZ0luZm8pICsKIAkJCSAgc2l6ZW9mKHN0cnVjdCB2bWJ1c19jaGFubmVsX21lc3NhZ2VfaGVhZGVyKSwKIAkJCSAgR0ZQX0tFUk5FTCk7CkBAIC04NTMsNyArODExLDYgQEAKIAkJa2ZyZWUobXNnSW5mbyk7CiAJfQogCi0JRFBSSU5UX0VYSVQoVk1CVVMpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9jaGFubmVsX21nbXQuaCBiL2RyaXZlcnMvc3RhZ2luZy9odi9jaGFubmVsX21nbXQuaAppbmRleCA1OTA4YjgxLi5mOTY5MjY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvY2hhbm5lbF9tZ210LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L2NoYW5uZWxfbWdtdC5oCkBAIC0yNDcsOCArMjQ3LDggQEAKIAkvKiBBbGxvY2F0ZWQgbWVtb3J5IGZvciByaW5nIGJ1ZmZlciAqLwogCXZvaWQgKlJpbmdCdWZmZXJQYWdlczsKIAl1MzIgUmluZ0J1ZmZlclBhZ2VDb3VudDsKLQlSSU5HX0JVRkZFUl9JTkZPIE91dGJvdW5kOwkvKiBzZW5kIHRvIHBhcmVudCAqLwotCVJJTkdfQlVGRkVSX0lORk8gSW5ib3VuZDsJLyogcmVjZWl2ZSBmcm9tIHBhcmVudCAqLworCXN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvIE91dGJvdW5kOwkvKiBzZW5kIHRvIHBhcmVudCAqLworCXN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvIEluYm91bmQ7CS8qIHJlY2VpdmUgZnJvbSBwYXJlbnQgKi8KIAlzcGlubG9ja190IGluYm91bmRfbG9jazsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqQ29udHJvbFdROwogCkBAIC0yNzIsOCArMjcyLDggQEAKIAl1MzIgQ2xpZW50TW9uaXRvckxhdGVuY3k7CiAJdTMyIENsaWVudE1vbml0b3JDb25uZWN0aW9uSWQ7CiAKLQlSSU5HX0JVRkZFUl9ERUJVR19JTkZPIEluYm91bmQ7Ci0JUklOR19CVUZGRVJfREVCVUdfSU5GTyBPdXRib3VuZDsKKwlzdHJ1Y3QgaHZfcmluZ19idWZmZXJfZGVidWdfaW5mbyBJbmJvdW5kOworCXN0cnVjdCBodl9yaW5nX2J1ZmZlcl9kZWJ1Z19pbmZvIE91dGJvdW5kOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9jb25uZWN0aW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvY29ubmVjdGlvbi5jCmluZGV4IGU4ODI0ZGEuLjFmNGQ2NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9jb25uZWN0aW9uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L2Nvbm5lY3Rpb24uYwpAQCAtNDQsOCArNDQsNiBAQAogCXN0cnVjdCB2bWJ1c19jaGFubmVsX2luaXRpYXRlX2NvbnRhY3QgKm1zZzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKLQogCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IGNvbm5lY3Rpbmcgb3IgY29ubmVjdGVkICovCiAJaWYgKGdWbWJ1c0Nvbm5lY3Rpb24uQ29ubmVjdFN0YXRlICE9IERpc2Nvbm5lY3RlZCkKIAkJcmV0dXJuIC0xOwpAQCAtMTU1LDggKzE1Myw2IEBACiAKIAlrZnJlZShtc2dJbmZvLT5XYWl0RXZlbnQpOwogCWtmcmVlKG1zZ0luZm8pOwotCURQUklOVF9FWElUKFZNQlVTKTsKLQogCXJldHVybiAwOwogCiBDbGVhbnVwOgpAQCAtMTgwLDggKzE3Niw2IEBACiAJCWtmcmVlKG1zZ0luZm8pOwogCX0KIAotCURQUklOVF9FWElUKFZNQlVTKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE5Myw4ICsxODcsNiBAQAogCWludCByZXQgPSAwOwogCXN0cnVjdCB2bWJ1c19jaGFubmVsX21lc3NhZ2VfaGVhZGVyICptc2c7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVMpOwotCiAJLyogTWFrZSBzdXJlIHdlIGFyZSBjb25uZWN0ZWQgKi8KIAlpZiAoZ1ZtYnVzQ29ubmVjdGlvbi5Db25uZWN0U3RhdGUgIT0gQ29ubmVjdGVkKQogCQlyZXR1cm4gLTE7CkBAIC0yMjEsNyArMjEzLDYgQEAKIAogQ2xlYW51cDoKIAlrZnJlZShtc2cpOwotCURQUklOVF9FWElUKFZNQlVTKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yODUsOCArMjc2LDYgQEAKIAlpbnQgcmVsaWQ7CiAJdTMyICpyZWN2SW50ZXJydXB0UGFnZSA9IGdWbWJ1c0Nvbm5lY3Rpb24uUmVjdkludGVycnVwdFBhZ2U7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVMpOwotCiAJLyogQ2hlY2sgZXZlbnRzICovCiAJaWYgKHJlY3ZJbnRlcnJ1cHRQYWdlKSB7CiAJCWZvciAoZHdvcmQgPSAwOyBkd29yZCA8IG1heGR3b3JkOyBkd29yZCsrKSB7CkBAIC0zMTAsOCArMjk5LDYgQEAKIAkJCX0KIAkJIH0KIAl9Ci0JRFBSSU5UX0VYSVQoVk1CVVMpOwotCiAJcmV0dXJuOwogfQogCkBAIC0zMzIsMTggKzMxOSwxMCBAQAogICovCiBpbnQgVm1idXNTZXRFdmVudCh1MzIgY2hpbGRSZWxJZCkKIHsKLQlpbnQgcmV0ID0gMDsKLQotCURQUklOVF9FTlRFUihWTUJVUyk7Ci0KIAkvKiBFYWNoIHUzMiByZXByZXNlbnRzIDMyIGNoYW5uZWxzICovCiAJc2V0X2JpdChjaGlsZFJlbElkICYgMzEsCiAJCSh1bnNpZ25lZCBsb25nICopZ1ZtYnVzQ29ubmVjdGlvbi5TZW5kSW50ZXJydXB0UGFnZSArCiAJCShjaGlsZFJlbElkID4+IDUpKTsKIAotCXJldCA9IEh2U2lnbmFsRXZlbnQoKTsKLQotCURQUklOVF9FWElUKFZNQlVTKTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIEh2U2lnbmFsRXZlbnQoKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9odi5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L2h2LmMKaW5kZXggNmM3N2U2NC4uODZiMWRkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L2h2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L2h2LmMKQEAgLTE5Miw4ICsxOTIsNiBAQAogCXVuaW9uIGh2X3g2NF9tc3JfaHlwZXJjYWxsX2NvbnRlbnRzIGh5cGVyY2FsbE1zcjsKIAl2b2lkICp2aXJ0QWRkciA9IE5VTEw7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVMpOwotCiAJbWVtc2V0KGdIdkNvbnRleHQuc3luSUNFdmVudFBhZ2UsIDAsIHNpemVvZih2b2lkICopICogTUFYX05VTV9DUFVTKTsKIAltZW1zZXQoZ0h2Q29udGV4dC5zeW5JQ01lc3NhZ2VQYWdlLCAwLCBzaXplb2Yodm9pZCAqKSAqIE1BWF9OVU1fQ1BVUyk7CiAKQEAgLTI3NSw4ICsyNzMsNiBAQAogCWdIdkNvbnRleHQuU2lnbmFsRXZlbnRQYXJhbS0+RmxhZ051bWJlciA9IDA7CiAJZ0h2Q29udGV4dC5TaWduYWxFdmVudFBhcmFtLT5Sc3ZkWiA9IDA7CiAKLQlEUFJJTlRfRVhJVChWTUJVUyk7Ci0KIAlyZXR1cm4gcmV0OwogCiBDbGVhbnVwOgpAQCAtMjg5LDggKzI4NSw2IEBACiAJCXZmcmVlKHZpcnRBZGRyKTsKIAl9CiAJcmV0ID0gLTE7Ci0JRFBSSU5UX0VYSVQoVk1CVVMpOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzAzLDggKzI5Nyw2IEBACiB7CiAJdW5pb24gaHZfeDY0X21zcl9oeXBlcmNhbGxfY29udGVudHMgaHlwZXJjYWxsTXNyOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKLQogCWtmcmVlKGdIdkNvbnRleHQuU2lnbmFsRXZlbnRCdWZmZXIpOwogCWdIdkNvbnRleHQuU2lnbmFsRXZlbnRCdWZmZXIgPSBOVUxMOwogCWdIdkNvbnRleHQuU2lnbmFsRXZlbnRQYXJhbSA9IE5VTEw7CkBAIC0zMTUsOCArMzA3LDYgQEAKIAkJdmZyZWUoZ0h2Q29udGV4dC5IeXBlcmNhbGxQYWdlKTsKIAkJZ0h2Q29udGV4dC5IeXBlcmNhbGxQYWdlID0gTlVMTDsKIAl9Ci0KLQlEUFJJTlRfRVhJVChWTUJVUyk7CiB9CiAKIC8qCkBAIC0zOTIsMTIgKzM4Miw4IEBACiAJdTMyIGlycVZlY3RvciA9ICooKHUzMiAqKShpcnFhcmcpKTsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKLQotCWlmICghZ0h2Q29udGV4dC5IeXBlcmNhbGxQYWdlKSB7Ci0JCURQUklOVF9FWElUKFZNQlVTKTsKKwlpZiAoIWdIdkNvbnRleHQuSHlwZXJjYWxsUGFnZSkKIAkJcmV0dXJuOwotCX0KIAogCS8qIENoZWNrIHRoZSB2ZXJzaW9uICovCiAJcmRtc3JsKEhWX1g2NF9NU1JfU1ZFUlNJT04sIHZlcnNpb24pOwpAQCAtNDY0LDkgKzQ1MCw2IEBACiAJd3Jtc3JsKEhWX1g2NF9NU1JfU0NPTlRST0wsIHNjdHJsLkFzVUlOVDY0KTsKIAogCWdIdkNvbnRleHQuU3luSUNJbml0aWFsaXplZCA9IHRydWU7Ci0KLQlEUFJJTlRfRVhJVChWTUJVUyk7Ci0KIAlyZXR1cm47CiAKIENsZWFudXA6CkBAIC00NzUsOCArNDU4LDYgQEAKIAogCWlmIChnSHZDb250ZXh0LnN5bklDTWVzc2FnZVBhZ2VbY3B1XSkKIAkJb3NkX1BhZ2VGcmVlKGdIdkNvbnRleHQuc3luSUNNZXNzYWdlUGFnZVtjcHVdLCAxKTsKLQotCURQUklOVF9FWElUKFZNQlVTKTsKIAlyZXR1cm47CiB9CiAKQEAgLTQ5MCwxMiArNDcxLDggQEAKIAl1bmlvbiBodl9zeW5pY19zaWVmcCBzaWVmcDsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKLQotCWlmICghZ0h2Q29udGV4dC5TeW5JQ0luaXRpYWxpemVkKSB7Ci0JCURQUklOVF9FWElUKFZNQlVTKTsKKwlpZiAoIWdIdkNvbnRleHQuU3luSUNJbml0aWFsaXplZCkKIAkJcmV0dXJuOwotCX0KIAogCXJkbXNybChIVl9YNjRfTVNSX1NJTlQwICsgVk1CVVNfTUVTU0FHRV9TSU5ULCBzaGFyZWRTaW50LkFzVUlOVDY0KTsKIApAQCAtNTE5LDYgKzQ5Niw0IEBACiAKIAlvc2RfUGFnZUZyZWUoZ0h2Q29udGV4dC5zeW5JQ01lc3NhZ2VQYWdlW2NwdV0sIDEpOwogCW9zZF9QYWdlRnJlZShnSHZDb250ZXh0LnN5bklDRXZlbnRQYWdlW2NwdV0sIDEpOwotCi0JRFBSSU5UX0VYSVQoVk1CVVMpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L2h2X3RpbWVzb3VyY2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9odl90aW1lc291cmNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdlZTUzMzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvaHZfdGltZXNvdXJjZS5jCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQSBjbG9ja3NvdXJjZSBmb3IgTGludXggcnVubmluZyBvbiBIeXBlclYuCisgKgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgTm92ZWxsLCBJbmMuCisgKiBBdXRob3IgOiBLLiBZLiBTcmluaXZhc2FuIDxrc3Jpbml2YXNhbkBub3ZlbGwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQorICogZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KKyNpbmNsdWRlIDxhc20vaHlwZXJ2Lmg+CisjaW5jbHVkZSA8YXNtL21zaHlwZXJ2Lmg+CisjaW5jbHVkZSA8YXNtL2h5cGVydmlzb3IuaD4KKworI2RlZmluZSBIVl9DTE9DS19TSElGVAkyMgorCitzdGF0aWMgY3ljbGVfdCByZWFkX2h2X2Nsb2NrKHN0cnVjdCBjbG9ja3NvdXJjZSAqYXJnKQoreworCWN5Y2xlX3QgY3VycmVudF90aWNrOworCS8qCisJICogUmVhZCB0aGUgcGFydGl0aW9uIGNvdW50ZXIgdG8gZ2V0IHRoZSBjdXJyZW50IHRpY2sgY291bnQuIFRoaXMgY291bnQKKwkgKiBpcyBzZXQgdG8gMCB3aGVuIHRoZSBwYXJ0aXRpb24gaXMgY3JlYXRlZCBhbmQgaXMgaW5jcmVtZW50ZWQgaW4KKwkgKiAxMDAgbmFub3NlY29uZCB1bml0cy4KKwkgKi8KKwlyZG1zcmwoSFZfWDY0X01TUl9USU1FX1JFRl9DT1VOVCwgY3VycmVudF90aWNrKTsKKwlyZXR1cm4gY3VycmVudF90aWNrOworfQorCitzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIGh5cGVydl9jcyA9IHsKKwkubmFtZSAgICAgICAgICAgPSAiaHlwZXJ2X2Nsb2Nrc291cmNlIiwKKwkucmF0aW5nICAgICAgICAgPSA0MDAsIC8qIHVzZSB0aGlzIHdoZW4gcnVubmluZyBvbiBIeXBlcnYqLworCS5yZWFkICAgICAgICAgICA9IHJlYWRfaHZfY2xvY2ssCisJLm1hc2sgICAgICAgICAgID0gQ0xPQ0tTT1VSQ0VfTUFTSyg2NCksCisJLyoKKwkgKiBUaGUgdGltZSByZWYgY291bnRlciBpbiBIeXBlclYgaXMgaW4gMTAwbnMgdW5pdHMuCisJICogVGhlIGRlZmluaXRpb24gb2YgbXVsdCBpczoKKwkgKiBtdWx0LzJec2hpZnQgPSBucy9jeWMgPSAxMDAKKwkgKiBtdWx0ID0gKDEwMCA8PCBzaGlmdCkKKwkgKi8KKwkubXVsdCAgICAgICAgICAgPSAoMTAwIDw8IEhWX0NMT0NLX1NISUZUKSwKKwkuc2hpZnQgICAgICAgICAgPSBIVl9DTE9DS19TSElGVCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2luaXRjb25zdAoraHZfdGltZXNvdXJjZV9kbWlfdGFibGVbXSBfX21heWJlX3VudXNlZCAgPSB7CisJeworCQkuaWRlbnQgPSAiSHlwZXItViIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiTWljcm9zb2Z0IENvcnBvcmF0aW9uIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlZpcnR1YWwgTWFjaGluZSIpLAorCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiVmlydHVhbCBNYWNoaW5lIiksCisJCX0sCisJfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShkbWksIGh2X3RpbWVzb3VyY2VfZG1pX3RhYmxlKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9faW5pdGNvbnN0Citodl90aW1lc291cmNlX3BjaV90YWJsZVtdIF9fbWF5YmVfdW51c2VkID0geworCXsgUENJX0RFVklDRSgweDE0MTQsIDB4NTM1MykgfSwgLyogVkdBIGNvbXBhdGlibGUgY29udHJvbGxlciAqLworCXsgMCB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGh2X3RpbWVzb3VyY2VfcGNpX3RhYmxlKTsKKworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X2h2X2Nsb2Nrc291cmNlKHZvaWQpCit7CisJaWYgKCh4ODZfaHlwZXIgIT0gJng4Nl9oeXBlcl9tc19oeXBlcnYpIHx8CisJCSEobXNfaHlwZXJ2LmZlYXR1cmVzICYgSFZfWDY0X01TUl9USU1FX1JFRl9DT1VOVF9BVkFJTEFCTEUpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghZG1pX2NoZWNrX3N5c3RlbShodl90aW1lc291cmNlX2RtaV90YWJsZSkpCisJCXJldHVybiAtRU5PREVWOworCisJcHJpbnRrKEtFUk5fSU5GTyAiUmVnaXN0ZXJpbmcgSHlwZXJWIGNsb2NrIHNvdXJjZVxuIik7CisJcmV0dXJuIGNsb2Nrc291cmNlX3JlZ2lzdGVyKCZoeXBlcnZfY3MpOworfQorCittb2R1bGVfaW5pdChpbml0X2h2X2Nsb2Nrc291cmNlKTsKK01PRFVMRV9ERVNDUklQVElPTigiSHlwZXJWIGJhc2VkIGNsb2Nrc291cmNlIik7CitNT0RVTEVfQVVUSE9SKCJLLiBZLiBTcmluaXZhc2FuIDxrc3Jpbml2YXNhbkBub3ZlbGwuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L2h2X3V0aWxzLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvaHZfdXRpbHMuYwppbmRleCAyYWRjOWI0Li42ZWI3OWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvaHZfdXRpbHMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvaHZfdXRpbHMuYwpAQCAtNTIsOCArNTIsNiBAQAogCXN0cnVjdCBpY21zZ19oZHIgKmljbXNnaGRycDsKIAlzdHJ1Y3QgaWNtc2dfbmVnb3RpYXRlICpuZWdvcCA9IE5VTEw7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVMpOwotCiAJYnVmbGVuID0gUEFHRV9TSVpFOwogCWJ1ZiA9IGttYWxsb2MoYnVmbGVuLCBHRlBfQVRPTUlDKTsKIApAQCAtMTAyLDggKzEwMCw2IEBACiAKIAlrZnJlZShidWYpOwogCi0JRFBSSU5UX0VYSVQoVk1CVVMpOwotCiAJaWYgKGV4ZWN1dGVfc2h1dGRvd24gPT0gdHJ1ZSkKIAkJb3JkZXJseV9wb3dlcm9mZihmYWxzZSk7CiB9CkBAIC0xNjAsOCArMTU2LDYgQEAKIAlzdHJ1Y3QgaWNtc2dfaGRyICppY21zZ2hkcnA7CiAJc3RydWN0IGljdGltZXN5bmNfZGF0YSAqdGltZWRhdGFwOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKLQogCWJ1ZmxlbiA9IFBBR0VfU0laRTsKIAlidWYgPSBrbWFsbG9jKGJ1ZmxlbiwgR0ZQX0FUT01JQyk7CiAKQEAgLTE5Miw4ICsxODYsNiBAQAogCX0KIAogCWtmcmVlKGJ1Zik7Ci0KLQlEUFJJTlRfRVhJVChWTUJVUyk7CiB9CiAKIC8qCkBAIC0yMTAsOCArMjAyLDYgQEAKIAlzdHJ1Y3QgaWNtc2dfaGRyICppY21zZ2hkcnA7CiAJc3RydWN0IGhlYXJ0YmVhdF9tc2dfZGF0YSAqaGVhcnRiZWF0X21zZzsKIAotCURQUklOVF9FTlRFUihWTUJVUyk7Ci0KIAlidWZsZW4gPSBQQUdFX1NJWkU7CiAJYnVmID0ga21hbGxvYyhidWZsZW4sIEdGUF9BVE9NSUMpOwogCkBAIC0yNDksOCArMjM5LDYgQEAKIAl9CiAKIAlrZnJlZShidWYpOwotCi0JRFBSSU5UX0VYSVQoVk1CVVMpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19pbml0Y29uc3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9sb2dnaW5nLmggYi9kcml2ZXJzL3N0YWdpbmcvaHYvbG9nZ2luZy5oCmluZGV4IGFkNGNmY2YuLjIwZDRkMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9sb2dnaW5nLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L2xvZ2dpbmcuaApAQCAtOTIsMjEgKzkyLDQgQEAKIAkJICAgICAgIF9fZnVuY19fLCAjIyBhcmdzKTtcCiAJfSB3aGlsZSAoMCkKIAotI2lmZGVmIERFQlVHCi0jZGVmaW5lIERQUklOVF9FTlRFUihtb2QpIGRvIHtcCi0JaWYgKChtb2QgJiAoSElXT1JEKHZtYnVzX2xvZ2xldmVsKSkpICYmIFwKLQkgICAgKERFQlVHX0xWTF9FTlRFUkVYSVQgPD0gTE9XT1JEKHZtYnVzX2xvZ2xldmVsKSkpCVwKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlsiI21vZCJdOiAlcygpIGVudGVyXG4iLCBfX2Z1bmNfXyk7XAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRFBSSU5UX0VYSVQobW9kKSBkbyB7XAotCWlmICgobW9kICYgKEhJV09SRCh2bWJ1c19sb2dsZXZlbCkpKSAmJiBcCi0JICAgIChERUJVR19MVkxfRU5URVJFWElUIDw9IExPV09SRCh2bWJ1c19sb2dsZXZlbCkpKQlcCi0JCXByaW50ayhLRVJOX0RFQlVHICJbIiNtb2QiXTogJXMoKSBleGl0XG4iLCBfX2Z1bmNfXyk7XAotCX0gd2hpbGUgKDApCi0jZWxzZQotI2RlZmluZSBEUFJJTlRfRU5URVIobW9kKQotI2RlZmluZSBEUFJJTlRfRVhJVChtb2QpCi0jZW5kaWYKLQogI2VuZGlmIC8qIF9MT0dHSU5HX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjLmMKaW5kZXggYmExNTA1OS4uMWQyZWJiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2MuYwpAQCAtMTc0LDggKzE3NCw2IEBACiB7CiAJc3RydWN0IG5ldHZzY19kcml2ZXIgKmRyaXZlciA9IChzdHJ1Y3QgbmV0dnNjX2RyaXZlciAqKWRydjsKIAotCURQUklOVF9FTlRFUihORVRWU0MpOwotCiAJRFBSSU5UX0RCRyhORVRWU0MsICJzaXplb2Yoc3RydWN0IGh2X25ldHZzY19wYWNrZXQpPSV6ZCwgIgogCQkgICAic2l6ZW9mKHN0cnVjdCBudnNwX21lc3NhZ2UpPSV6ZCwgIgogCQkgICAic2l6ZW9mKHN0cnVjdCB2bXRyYW5zZmVyX3BhZ2VfcGFja2V0X2hlYWRlcik9JXpkIiwKQEAgLTIwMiw5ICsyMDAsNiBAQAogCWRyaXZlci0+T25TZW5kCQkJPSBOZXRWc2NPblNlbmQ7CiAKIAlSbmRpc0ZpbHRlckluaXQoZHJpdmVyKTsKLQotCURQUklOVF9FWElUKE5FVFZTQyk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjE0LDEzICsyMDksMTAgQEAKIAlzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0RGV2aWNlOwogCXN0cnVjdCBudnNwX21lc3NhZ2UgKmluaXRQYWNrZXQ7CiAKLQlEUFJJTlRfRU5URVIoTkVUVlNDKTsKLQogCW5ldERldmljZSA9IEdldE91dGJvdW5kTmV0RGV2aWNlKERldmljZSk7CiAJaWYgKCFuZXREZXZpY2UpIHsKIAkJRFBSSU5UX0VSUihORVRWU0MsICJ1bmFibGUgdG8gZ2V0IG5ldCBkZXZpY2UuLi4iCiAJCQkgICAiZGV2aWNlIGJlaW5nIGRlc3Ryb3llZD8iKTsKLQkJRFBSSU5UX0VYSVQoTkVUVlNDKTsKIAkJcmV0dXJuIC0xOwogCX0KIAkvKiBBU1NFUlQobmV0RGV2aWNlLT5SZWNlaXZlQnVmZmVyU2l6ZSA+IDApOyAqLwpAQCAtMzM1LDcgKzMyNyw2IEBACiAKIEV4aXQ6CiAJUHV0TmV0RGV2aWNlKERldmljZSk7Ci0JRFBSSU5UX0VYSVQoTkVUVlNDKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNDUsMTMgKzMzNiwxMCBAQAogCXN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXREZXZpY2U7CiAJc3RydWN0IG52c3BfbWVzc2FnZSAqaW5pdFBhY2tldDsKIAotCURQUklOVF9FTlRFUihORVRWU0MpOwotCiAJbmV0RGV2aWNlID0gR2V0T3V0Ym91bmROZXREZXZpY2UoRGV2aWNlKTsKIAlpZiAoIW5ldERldmljZSkgewogCQlEUFJJTlRfRVJSKE5FVFZTQywgInVuYWJsZSB0byBnZXQgbmV0IGRldmljZS4uLiIKIAkJCSAgICJkZXZpY2UgYmVpbmcgZGVzdHJveWVkPyIpOwotCQlEUFJJTlRfRVhJVChORVRWU0MpOwogCQlyZXR1cm4gLTE7CiAJfQogCWlmIChuZXREZXZpY2UtPlNlbmRCdWZmZXJTaXplIDw9IDApIHsKQEAgLTQzNCw3ICs0MjIsNiBAQAogCiBFeGl0OgogCVB1dE5ldERldmljZShEZXZpY2UpOwotCURQUklOVF9FWElUKE5FVFZTQyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDQzLDggKzQzMCw2IEBACiAJc3RydWN0IG52c3BfbWVzc2FnZSAqcmV2b2tlUGFja2V0OwogCWludCByZXQgPSAwOwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQyk7Ci0KIAkvKgogCSAqIElmIHdlIGdvdCBhIHNlY3Rpb24gY291bnQsIGl0IG1lYW5zIHdlIHJlY2VpdmVkIGEKIAkgKiBTZW5kUmVjZWl2ZUJ1ZmZlckNvbXBsZXRlIG1zZyAoaWUgc2VudApAQCAtNDc1LDcgKzQ2MCw2IEBACiAJCWlmIChyZXQgIT0gMCkgewogCQkJRFBSSU5UX0VSUihORVRWU0MsICJ1bmFibGUgdG8gc2VuZCByZXZva2UgcmVjZWl2ZSAiCiAJCQkJICAgImJ1ZmZlciB0byBuZXR2c3AiKTsKLQkJCURQUklOVF9FWElUKE5FVFZTQyk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAl9CkBAIC00OTIsNyArNDc2LDYgQEAKIAkJaWYgKHJldCAhPSAwKSB7CiAJCQlEUFJJTlRfRVJSKE5FVFZTQywKIAkJCQkgICAidW5hYmxlIHRvIHRlYXJkb3duIHJlY2VpdmUgYnVmZmVyJ3MgZ3BhZGwiKTsKLQkJCURQUklOVF9FWElUKE5FVFZTQyk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJTmV0RGV2aWNlLT5SZWNlaXZlQnVmZmVyR3BhZGxIYW5kbGUgPSAwOwpAQCAtNTEzLDggKzQ5Niw2IEBACiAJCU5ldERldmljZS0+UmVjZWl2ZVNlY3Rpb25zID0gTlVMTDsKIAl9CiAKLQlEUFJJTlRfRVhJVChORVRWU0MpOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTIzLDggKzUwNCw2IEBACiAJc3RydWN0IG52c3BfbWVzc2FnZSAqcmV2b2tlUGFja2V0OwogCWludCByZXQgPSAwOwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQyk7Ci0KIAkvKgogCSAqIElmIHdlIGdvdCBhIHNlY3Rpb24gY291bnQsIGl0IG1lYW5zIHdlIHJlY2VpdmVkIGEKIAkgKiAgU2VuZFJlY2VpdmVCdWZmZXJDb21wbGV0ZSBtc2cgKGllIHNlbnQKQEAgLTU1NCw3ICs1MzMsNiBAQAogCQlpZiAocmV0ICE9IDApIHsKIAkJCURQUklOVF9FUlIoTkVUVlNDLCAidW5hYmxlIHRvIHNlbmQgcmV2b2tlIHNlbmQgYnVmZmVyICIKIAkJCQkgICAidG8gbmV0dnNwIik7Ci0JCQlEUFJJTlRfRVhJVChORVRWU0MpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJfQpAQCAtNTcyLDcgKzU1MCw2IEBACiAJCWlmIChyZXQgIT0gMCkgewogCQkJRFBSSU5UX0VSUihORVRWU0MsICJ1bmFibGUgdG8gdGVhcmRvd24gc2VuZCBidWZmZXIncyAiCiAJCQkJICAgImdwYWRsIik7Ci0JCQlEUFJJTlRfRVhJVChORVRWU0MpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJCU5ldERldmljZS0+U2VuZEJ1ZmZlckdwYWRsSGFuZGxlID0gMDsKQEAgLTU4Nyw4ICs1NjQsNiBAQAogCQlOZXREZXZpY2UtPlNlbmRCdWZmZXIgPSBOVUxMOwogCX0KIAotCURQUklOVF9FWElUKE5FVFZTQyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC02MDAsMTMgKzU3NSwxMCBAQAogCXN0cnVjdCBudnNwX21lc3NhZ2UgKmluaXRQYWNrZXQ7CiAJaW50IG5kaXNWZXJzaW9uOwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQyk7Ci0KIAluZXREZXZpY2UgPSBHZXRPdXRib3VuZE5ldERldmljZShEZXZpY2UpOwogCWlmICghbmV0RGV2aWNlKSB7CiAJCURQUklOVF9FUlIoTkVUVlNDLCAidW5hYmxlIHRvIGdldCBuZXQgZGV2aWNlLi4uIgogCQkJICAgImRldmljZSBiZWluZyBkZXN0cm95ZWQ/Iik7Ci0JCURQUklOVF9FWElUKE5FVFZTQyk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTY5NiwxOCArNjY4LDEzIEBACiAKIENsZWFudXA6CiAJUHV0TmV0RGV2aWNlKERldmljZSk7Ci0JRFBSSU5UX0VYSVQoTkVUVlNDKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBOZXRWc2NEaXNjb25uZWN0RnJvbVZzcChzdHJ1Y3QgbmV0dnNjX2RldmljZSAqTmV0RGV2aWNlKQogewotCURQUklOVF9FTlRFUihORVRWU0MpOwotCiAJTmV0VnNjRGVzdHJveVJlY2VpdmVCdWZmZXIoTmV0RGV2aWNlKTsKIAlOZXRWc2NEZXN0cm95U2VuZEJ1ZmZlcihOZXREZXZpY2UpOwotCi0JRFBSSU5UX0VYSVQoTkVUVlNDKTsKIH0KIAogLyoKQEAgLTcyMiw4ICs2ODksNiBAQAogCXN0cnVjdCBuZXR2c2NfZHJpdmVyICpuZXREcml2ZXIgPQogCQkJCShzdHJ1Y3QgbmV0dnNjX2RyaXZlciAqKURldmljZS0+RHJpdmVyOwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQyk7Ci0KIAluZXREZXZpY2UgPSBBbGxvY05ldERldmljZShEZXZpY2UpOwogCWlmICghbmV0RGV2aWNlKSB7CiAJCXJldCA9IC0xOwpAQCAtNzg3LDcgKzc1Miw2IEBACiAJRFBSSU5UX0lORk8oTkVUVlNDLCAiKioqIE5ldFZTQyBjaGFubmVsIGhhbmRzaGFrZSByZXN1bHQgLSAlZCAqKioiLAogCQkgICAgcmV0KTsKIAotCURQUklOVF9FWElUKE5FVFZTQyk7CiAJcmV0dXJuIHJldDsKIAogQ2xvc2U6CkBAIC04MTIsNyArNzc2LDYgQEAKIAkJRnJlZU5ldERldmljZShuZXREZXZpY2UpOwogCX0KIAotCURQUklOVF9FWElUKE5FVFZTQyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtODI0LDggKzc4Nyw2IEBACiAJc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldERldmljZTsKIAlzdHJ1Y3QgaHZfbmV0dnNjX3BhY2tldCAqbmV0dnNjUGFja2V0LCAqcG9zOwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQyk7Ci0KIAlEUFJJTlRfSU5GTyhORVRWU0MsICJEaXNhYmxpbmcgb3V0Ym91bmQgdHJhZmZpYyBvbiBuZXQgZGV2aWNlICglcCkuLi4iLAogCQkgICAgRGV2aWNlLT5FeHRlbnNpb24pOwogCkBAIC04NjgsOCArODI5LDYgQEAKIAogCWtmcmVlKG5ldERldmljZS0+Q2hhbm5lbEluaXRFdmVudCk7CiAJRnJlZU5ldERldmljZShuZXREZXZpY2UpOwotCi0JRFBSSU5UX0VYSVQoTkVUVlNDKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODc4LDggKzgzNyw2IEBACiAgKi8KIHN0YXRpYyB2b2lkIE5ldFZzY09uQ2xlYW51cChzdHJ1Y3QgaHZfZHJpdmVyICpkcnYpCiB7Ci0JRFBSSU5UX0VOVEVSKE5FVFZTQyk7Ci0JRFBSSU5UX0VYSVQoTkVUVlNDKTsKIH0KIAogc3RhdGljIHZvaWQgTmV0VnNjT25TZW5kQ29tcGxldGlvbihzdHJ1Y3QgaHZfZGV2aWNlICpEZXZpY2UsCkBAIC04ODksMTMgKzg0NiwxMCBAQAogCXN0cnVjdCBudnNwX21lc3NhZ2UgKm52c3BQYWNrZXQ7CiAJc3RydWN0IGh2X25ldHZzY19wYWNrZXQgKm52c2NQYWNrZXQ7CiAKLQlEUFJJTlRfRU5URVIoTkVUVlNDKTsKLQogCW5ldERldmljZSA9IEdldEluYm91bmROZXREZXZpY2UoRGV2aWNlKTsKIAlpZiAoIW5ldERldmljZSkgewogCQlEUFJJTlRfRVJSKE5FVFZTQywgInVuYWJsZSB0byBnZXQgbmV0IGRldmljZS4uLiIKIAkJCSAgICJkZXZpY2UgYmVpbmcgZGVzdHJveWVkPyIpOwotCQlEUFJJTlRfRVhJVChORVRWU0MpOwogCQlyZXR1cm47CiAJfQogCkBAIC05MjksNyArODgzLDYgQEAKIAl9CiAKIAlQdXROZXREZXZpY2UoRGV2aWNlKTsKLQlEUFJJTlRfRVhJVChORVRWU0MpOwogfQogCiBzdGF0aWMgaW50IE5ldFZzY09uU2VuZChzdHJ1Y3QgaHZfZGV2aWNlICpEZXZpY2UsCkBAIC05NDAsMTMgKzg5MywxMCBAQAogCiAJc3RydWN0IG52c3BfbWVzc2FnZSBzZW5kTWVzc2FnZTsKIAotCURQUklOVF9FTlRFUihORVRWU0MpOwotCiAJbmV0RGV2aWNlID0gR2V0T3V0Ym91bmROZXREZXZpY2UoRGV2aWNlKTsKIAlpZiAoIW5ldERldmljZSkgewogCQlEUFJJTlRfRVJSKE5FVFZTQywgIm5ldCBkZXZpY2UgKCVwKSBzaHV0dGluZyBkb3duLi4uIgogCQkJICAgImlnbm9yaW5nIG91dGJvdW5kIHBhY2tldHMiLCBuZXREZXZpY2UpOwotCQlEUFJJTlRfRVhJVChORVRWU0MpOwogCQlyZXR1cm4gLTI7CiAJfQogCkBAIC05ODYsOCArOTM2LDYgQEAKIAogCWF0b21pY19pbmMoJm5ldERldmljZS0+TnVtT3V0c3RhbmRpbmdTZW5kcyk7CiAJUHV0TmV0RGV2aWNlKERldmljZSk7Ci0KLQlEUFJJTlRfRVhJVChORVRWU0MpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEwMDcsMTMgKzk1NSwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJTElTVF9IRUFEKGxpc3RIZWFkKTsKIAotCURQUklOVF9FTlRFUihORVRWU0MpOwotCiAJbmV0RGV2aWNlID0gR2V0SW5ib3VuZE5ldERldmljZShEZXZpY2UpOwogCWlmICghbmV0RGV2aWNlKSB7CiAJCURQUklOVF9FUlIoTkVUVlNDLCAidW5hYmxlIHRvIGdldCBuZXQgZGV2aWNlLi4uIgogCQkJICAgImRldmljZSBiZWluZyBkZXN0cm95ZWQ/Iik7Ci0JCURQUklOVF9FWElUKE5FVFZTQyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTExODksNyArMTEzNCw2IEBACiAJLyogQVNTRVJUKGxpc3RfZW1wdHkoJmxpc3RIZWFkKSk7ICovCiAKIAlQdXROZXREZXZpY2UoRGV2aWNlKTsKLQlEUFJJTlRfRVhJVChORVRWU0MpOwogfQogCiBzdGF0aWMgdm9pZCBOZXRWc2NTZW5kUmVjZWl2ZUNvbXBsZXRpb24oc3RydWN0IGh2X2RldmljZSAqRGV2aWNlLApAQCAtMTI0OCw4ICsxMTkyLDYgQEAKIAlib29sIGZTZW5kUmVjZWl2ZUNvbXAgPSBmYWxzZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQyk7Ci0KIAkvKiBBU1NFUlQocGFja2V0LT5YZmVyUGFnZVBhY2tldCk7ICovCiAKIAkvKgpAQCAtMTI2MSw3ICsxMjAzLDYgQEAKIAlpZiAoIW5ldERldmljZSkgewogCQlEUFJJTlRfRVJSKE5FVFZTQywgInVuYWJsZSB0byBnZXQgbmV0IGRldmljZS4uLiIKIAkJCSAgICJkZXZpY2UgYmVpbmcgZGVzdHJveWVkPyIpOwotCQlEUFJJTlRfRVhJVChORVRWU0MpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMjkyLDcgKzEyMzMsNiBAQAogCQlOZXRWc2NTZW5kUmVjZWl2ZUNvbXBsZXRpb24oZGV2aWNlLCB0cmFuc2FjdGlvbklkKTsKIAogCVB1dE5ldERldmljZShkZXZpY2UpOwotCURQUklOVF9FWElUKE5FVFZTQyk7CiB9CiAKIHN0YXRpYyB2b2lkIE5ldFZzY09uQ2hhbm5lbENhbGxiYWNrKHZvaWQgKkNvbnRleHQpCkBAIC0xMzA3LDkgKzEyNDcsNiBAQAogCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKIAlpbnQgYnVmZmVybGVuID0gTkVUVlNDX1BBQ0tFVF9TSVpFOwogCi0KLQlEUFJJTlRfRU5URVIoTkVUVlNDKTsKLQogCS8qIEFTU0VSVChkZXZpY2UpOyAqLwogCiAJcGFja2V0ID0ga3phbGxvYyhORVRWU0NfUEFDS0VUX1NJWkUgKiBzaXplb2YodW5zaWduZWQgY2hhciksCkBAIC0xMzIyLDcgKzEyNTksNiBAQAogCWlmICghbmV0RGV2aWNlKSB7CiAJCURQUklOVF9FUlIoTkVUVlNDLCAibmV0IGRldmljZSAoJXApIHNodXR0aW5nIGRvd24uLi4iCiAJCQkgICAiaWdub3JpbmcgaW5ib3VuZCBwYWNrZXRzIiwgbmV0RGV2aWNlKTsKLQkJRFBSSU5UX0VYSVQoTkVUVlNDKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xMzg2LDcgKzEzMjIsNiBAQAogCX0gd2hpbGUgKDEpOwogCiAJUHV0TmV0RGV2aWNlKGRldmljZSk7Ci0JRFBSSU5UX0VYSVQoTkVUVlNDKTsKIG91dDoKIAlrZnJlZShidWZmZXIpOwogCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2NfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjX2Rydi5jCmluZGV4IDU1Yjk5MzI5Li41NmUxMTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjX2Rydi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2NfZHJ2LmMKQEAgLTc2LDggKzc2LDYgQEAKIAlzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2Vfb2JqID0gJm5ldF9kZXZpY2VfY3R4LT5kZXZpY2VfY3R4LT5kZXZpY2Vfb2JqOwogCWludCByZXQgPSAwOwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQ19EUlYpOwotCiAJaWYgKG5ldGlmX2NhcnJpZXJfb2sobmV0KSkgewogCQkvKiBPcGVuIHVwIHRoZSBkZXZpY2UgKi8KIAkJcmV0ID0gUm5kaXNGaWx0ZXJPbk9wZW4oZGV2aWNlX29iaik7CkBAIC05Miw3ICs5MCw2IEBACiAJCURQUklOVF9FUlIoTkVUVlNDX0RSViwgInVuYWJsZSB0byBvcGVuIGRldmljZS4uLmxpbmsgaXMgZG93bi4iKTsKIAl9CiAKLQlEUFJJTlRfRVhJVChORVRWU0NfRFJWKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMDIsMTYgKzk5LDEyIEBACiAJc3RydWN0IGh2X2RldmljZSAqZGV2aWNlX29iaiA9ICZuZXRfZGV2aWNlX2N0eC0+ZGV2aWNlX2N0eC0+ZGV2aWNlX29iajsKIAlpbnQgcmV0OwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQ19EUlYpOwotCiAJbmV0aWZfc3RvcF9xdWV1ZShuZXQpOwogCiAJcmV0ID0gUm5kaXNGaWx0ZXJPbkNsb3NlKGRldmljZV9vYmopOwogCWlmIChyZXQgIT0gMCkKIAkJRFBSSU5UX0VSUihORVRWU0NfRFJWLCAidW5hYmxlIHRvIGNsb3NlIGRldmljZSAocmV0ICVkKS4iLCByZXQpOwogCi0JRFBSSU5UX0VYSVQoTkVUVlNDX0RSVik7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMjEsOCArMTE0LDYgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopCiAJCSh1bnNpZ25lZCBsb25nKXBhY2tldC0+Q29tcGxldGlvbi5TZW5kLlNlbmRDb21wbGV0aW9uVGlkOwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQ19EUlYpOwotCiAJa2ZyZWUocGFja2V0KTsKIAogCWlmIChza2IpIHsKQEAgLTEzNSw4ICsxMjYsNiBAQAogCQlpZiAoKG5ldF9kZXZpY2VfY3R4LT5hdmFpbCArPSBudW1fcGFnZXMpID49IFBBQ0tFVF9QQUdFU19ISVdBVEVSKQogIAkJCW5ldGlmX3dha2VfcXVldWUobmV0KTsKIAl9Ci0KLQlEUFJJTlRfRVhJVChORVRWU0NfRFJWKTsKIH0KIAogc3RhdGljIGludCBuZXR2c2Nfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQpAQCAtMTUxLDggKzE0MCw2IEBACiAJaW50IHJldDsKIAl1bnNpZ25lZCBpbnQgaSwgbnVtX3BhZ2VzOwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQ19EUlYpOwotCiAJRFBSSU5UX0RCRyhORVRWU0NfRFJWLCAieG1pdCBwYWNrZXQgLSBsZW4gJWQgZGF0YV9sZW4gJWQiLAogCQkgICBza2ItPmxlbiwgc2tiLT5kYXRhX2xlbik7CiAKQEAgLTIyNSw3ICsyMTIsNiBAQAogCQluZXR2c2NfeG1pdF9jb21wbGV0aW9uKHBhY2tldCk7CiAJfQogCi0JRFBSSU5UX0VYSVQoTkVUVlNDX0RSVik7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIApAQCAtMjM4LDggKzIyNCw2IEBACiAJc3RydWN0IHZtX2RldmljZSAqZGV2aWNlX2N0eCA9IHRvX3ZtX2RldmljZShkZXZpY2Vfb2JqKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ID0gZGV2X2dldF9kcnZkYXRhKCZkZXZpY2VfY3R4LT5kZXZpY2UpOwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQ19EUlYpOwotCiAJaWYgKCFuZXQpIHsKIAkJRFBSSU5UX0VSUihORVRWU0NfRFJWLCAiZ290IGxpbmsgc3RhdHVzIGJ1dCBuZXQgZGV2aWNlICIKIAkJCQkibm90IGluaXRpYWxpemVkIHlldCIpOwpAQCAtMjUzLDcgKzIzNyw2IEBACiAJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldCk7CiAJCW5ldGlmX3N0b3BfcXVldWUobmV0KTsKIAl9Ci0JRFBSSU5UX0VYSVQoTkVUVlNDX0RSVik7CiB9CiAKIC8qCkBAIC0yNzAsOCArMjUzLDYgQEAKIAlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQ19EUlYpOwotCiAJaWYgKCFuZXQpIHsKIAkJRFBSSU5UX0VSUihORVRWU0NfRFJWLCAiZ290IHJlY2VpdmUgY2FsbGJhY2sgYnV0IG5ldCBkZXZpY2UgIgogCQkJCSJub3QgaW5pdGlhbGl6ZWQgeWV0Iik7CkBAIC0zMjMsOCArMzA0LDYgQEAKIAlEUFJJTlRfREJHKE5FVFZTQ19EUlYsICIjIG9mIHJlY3ZzICVsdSB0b3RhbCBzaXplICVsdSIsCiAJCSAgIG5ldC0+c3RhdHMucnhfcGFja2V0cywgbmV0LT5zdGF0cy5yeF9ieXRlcyk7CiAKLQlEUFJJTlRfRVhJVChORVRWU0NfRFJWKTsKLQogCXJldHVybiAwOwogfQogCkBAIC0zNjQsOCArMzQzLDYgQEAKIAlzdHJ1Y3QgbmV0dnNjX2RldmljZV9pbmZvIGRldmljZV9pbmZvOwogCWludCByZXQ7CiAKLQlEUFJJTlRfRU5URVIoTkVUVlNDX0RSVik7Ci0KIAlpZiAoIW5ldF9kcnZfb2JqLT5CYXNlLk9uRGV2aWNlQWRkKQogCQlyZXR1cm4gLTE7CiAKQEAgLTQyMiw3ICszOTksNiBAQAogCQlmcmVlX25ldGRldihuZXQpOwogCX0KIAotCURQUklOVF9FWElUKE5FVFZTQ19EUlYpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTQzOCwxOCArNDE0LDEzIEBACiAJc3RydWN0IGh2X2RldmljZSAqZGV2aWNlX29iaiA9ICZkZXZpY2VfY3R4LT5kZXZpY2Vfb2JqOwogCWludCByZXQ7CiAKLQlEUFJJTlRfRU5URVIoTkVUVlNDX0RSVik7Ci0KIAlpZiAobmV0ID09IE5VTEwpIHsKIAkJRFBSSU5UX0lORk8oTkVUVlNDLCAibm8gbmV0IGRldmljZSB0byByZW1vdmUiKTsKLQkJRFBSSU5UX0VYSVQoTkVUVlNDX0RSVik7CiAJCXJldHVybiAwOwogCX0KIAotCWlmICghbmV0X2Rydl9vYmotPkJhc2UuT25EZXZpY2VSZW1vdmUpIHsKLQkJRFBSSU5UX0VYSVQoTkVUVlNDX0RSVik7CisJaWYgKCFuZXRfZHJ2X29iai0+QmFzZS5PbkRldmljZVJlbW92ZSkKIAkJcmV0dXJuIC0xOwotCX0KIAogCS8qIFN0b3Agb3V0Ym91bmQgYXNhcCAqLwogCW5ldGlmX3N0b3BfcXVldWUobmV0KTsKQEAgLTQ2OCw3ICs0MzksNiBAQAogCX0KIAogCWZyZWVfbmV0ZGV2KG5ldCk7Ci0JRFBSSU5UX0VYSVQoTkVUVlNDX0RSVik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDg4LDggKzQ1OCw2IEBACiAJc3RydWN0IGRldmljZSAqY3VycmVudF9kZXY7CiAJaW50IHJldDsKIAotCURQUklOVF9FTlRFUihORVRWU0NfRFJWKTsKLQogCXdoaWxlICgxKSB7CiAJCWN1cnJlbnRfZGV2ID0gTlVMTDsKIApAQCAtNTE1LDggKzQ4Myw2IEBACiAKIAl2bWJ1c19jaGlsZF9kcml2ZXJfdW5yZWdpc3RlcihkcnZfY3R4KTsKIAotCURQUklOVF9FWElUKE5FVFZTQ19EUlYpOwotCiAJcmV0dXJuOwogfQogCkBAIC01MjYsOCArNDkyLDYgQEAKIAlzdHJ1Y3QgZHJpdmVyX2NvbnRleHQgKmRydl9jdHggPSAmZ19uZXR2c2NfZHJ2LmRydl9jdHg7CiAJaW50IHJldDsKIAotCURQUklOVF9FTlRFUihORVRWU0NfRFJWKTsKLQogCXZtYnVzX2dldF9pbnRlcmZhY2UoJm5ldF9kcnZfb2JqLT5CYXNlLlZtYnVzQ2hhbm5lbEludGVyZmFjZSk7CiAKIAluZXRfZHJ2X29iai0+UmluZ0J1ZmZlclNpemUgPSByaW5nX3NpemUgKiBQQUdFX1NJWkU7CkBAIC01NDcsOCArNTExLDYgQEAKIAkvKiBUaGUgZHJpdmVyIGJlbG9uZ3MgdG8gdm1idXMgKi8KIAlyZXQgPSB2bWJ1c19jaGlsZF9kcml2ZXJfcmVnaXN0ZXIoZHJ2X2N0eCk7CiAKLQlEUFJJTlRfRVhJVChORVRWU0NfRFJWKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTU2OCwyNiArNTMwLDE3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG5ldHZzY19pbml0KHZvaWQpCiB7Ci0JaW50IHJldDsKLQotCURQUklOVF9FTlRFUihORVRWU0NfRFJWKTsKIAlEUFJJTlRfSU5GTyhORVRWU0NfRFJWLCAiTmV0dnNjIGluaXRpYWxpemluZy4uLi4iKTsKIAogCWlmICghZG1pX2NoZWNrX3N5c3RlbShodl9uZXR2c2NfZG1pX3RhYmxlKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXQgPSBuZXR2c2NfZHJ2X2luaXQoTmV0VnNjSW5pdGlhbGl6ZSk7Ci0KLQlEUFJJTlRfRVhJVChORVRWU0NfRFJWKTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIG5ldHZzY19kcnZfaW5pdChOZXRWc2NJbml0aWFsaXplKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG5ldHZzY19leGl0KHZvaWQpCiB7Ci0JRFBSSU5UX0VOVEVSKE5FVFZTQ19EUlYpOwogCW5ldHZzY19kcnZfZXhpdCgpOwotCURQUklOVF9FWElUKE5FVFZTQ19EUlYpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19pbml0Y29uc3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9yaW5nX2J1ZmZlci5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L3JpbmdfYnVmZmVyLmMKaW5kZXggYWUyYTEwZS4uMTdiYzc2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L3JpbmdfYnVmZmVyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L3JpbmdfYnVmZmVyLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogLS0qLwogc3RhdGljIGlubGluZSB2b2lkCi1HZXRSaW5nQnVmZmVyQXZhaWxCeXRlcyhSSU5HX0JVRkZFUl9JTkZPICpyYmksIHUzMiAqcmVhZCwgdTMyICp3cml0ZSkKK0dldFJpbmdCdWZmZXJBdmFpbEJ5dGVzKHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpyYmksIHUzMiAqcmVhZCwgdTMyICp3cml0ZSkKIHsKIAl1MzIgcmVhZF9sb2MsIHdyaXRlX2xvYzsKIApAQCAtNjgsNyArNjgsNyBAQAogCiAtLSovCiBzdGF0aWMgaW5saW5lIHUzMgotR2V0TmV4dFdyaXRlTG9jYXRpb24oUklOR19CVUZGRVJfSU5GTyAqUmluZ0luZm8pCitHZXROZXh0V3JpdGVMb2NhdGlvbihzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqUmluZ0luZm8pCiB7CiAJdTMyIG5leHQgPSBSaW5nSW5mby0+UmluZ0J1ZmZlci0+V3JpdGVJbmRleDsKIApAQCAtODcsNyArODcsOCBAQAogCiAtLSovCiBzdGF0aWMgaW5saW5lIHZvaWQKLVNldE5leHRXcml0ZUxvY2F0aW9uKFJJTkdfQlVGRkVSX0lORk8gKlJpbmdJbmZvLCB1MzIgTmV4dFdyaXRlTG9jYXRpb24pCitTZXROZXh0V3JpdGVMb2NhdGlvbihzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqUmluZ0luZm8sCisJCSAgICAgdTMyIE5leHRXcml0ZUxvY2F0aW9uKQogewogCVJpbmdJbmZvLT5SaW5nQnVmZmVyLT5Xcml0ZUluZGV4ID0gTmV4dFdyaXRlTG9jYXRpb247CiB9CkBAIC0xMDIsNyArMTAzLDcgQEAKIAogLS0qLwogc3RhdGljIGlubGluZSB1MzIKLUdldE5leHRSZWFkTG9jYXRpb24oUklOR19CVUZGRVJfSU5GTyAqUmluZ0luZm8pCitHZXROZXh0UmVhZExvY2F0aW9uKHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpSaW5nSW5mbykKIHsKIAl1MzIgbmV4dCA9IFJpbmdJbmZvLT5SaW5nQnVmZmVyLT5SZWFkSW5kZXg7CiAKQEAgLTEyMiw3ICsxMjMsNyBAQAogCiAtLSovCiBzdGF0aWMgaW5saW5lIHUzMgotR2V0TmV4dFJlYWRMb2NhdGlvbldpdGhPZmZzZXQoUklOR19CVUZGRVJfSU5GTyAqUmluZ0luZm8sIHUzMiBPZmZzZXQpCitHZXROZXh0UmVhZExvY2F0aW9uV2l0aE9mZnNldChzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqUmluZ0luZm8sIHUzMiBPZmZzZXQpCiB7CiAJdTMyIG5leHQgPSBSaW5nSW5mby0+UmluZ0J1ZmZlci0+UmVhZEluZGV4OwogCkBAIC0xNDMsNyArMTQ0LDcgQEAKIAogLS0qLwogc3RhdGljIGlubGluZSB2b2lkCi1TZXROZXh0UmVhZExvY2F0aW9uKFJJTkdfQlVGRkVSX0lORk8gKlJpbmdJbmZvLCB1MzIgTmV4dFJlYWRMb2NhdGlvbikKK1NldE5leHRSZWFkTG9jYXRpb24oc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKlJpbmdJbmZvLCB1MzIgTmV4dFJlYWRMb2NhdGlvbikKIHsKIAlSaW5nSW5mby0+UmluZ0J1ZmZlci0+UmVhZEluZGV4ID0gTmV4dFJlYWRMb2NhdGlvbjsKIH0KQEAgLTE1OSw3ICsxNjAsNyBAQAogCiAtLSovCiBzdGF0aWMgaW5saW5lIHZvaWQgKgotR2V0UmluZ0J1ZmZlcihSSU5HX0JVRkZFUl9JTkZPICpSaW5nSW5mbykKK0dldFJpbmdCdWZmZXIoc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKlJpbmdJbmZvKQogewogCXJldHVybiAodm9pZCAqKVJpbmdJbmZvLT5SaW5nQnVmZmVyLT5CdWZmZXI7CiB9CkBAIC0xNzUsNyArMTc2LDcgQEAKIAogLS0qLwogc3RhdGljIGlubGluZSB1MzIKLUdldFJpbmdCdWZmZXJTaXplKFJJTkdfQlVGRkVSX0lORk8gKlJpbmdJbmZvKQorR2V0UmluZ0J1ZmZlclNpemUoc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKlJpbmdJbmZvKQogewogCXJldHVybiBSaW5nSW5mby0+UmluZ0RhdGFTaXplOwogfQpAQCAtMTkwLDcgKzE5MSw3IEBACiAKIC0tKi8KIHN0YXRpYyBpbmxpbmUgdTY0Ci1HZXRSaW5nQnVmZmVySW5kaWNlcyhSSU5HX0JVRkZFUl9JTkZPICpSaW5nSW5mbykKK0dldFJpbmdCdWZmZXJJbmRpY2VzKHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpSaW5nSW5mbykKIHsKIAlyZXR1cm4gKCh1NjQpUmluZ0luZm8tPlJpbmdCdWZmZXItPldyaXRlSW5kZXggPDwgMzIpCiAJfHwgUmluZ0luZm8tPlJpbmdCdWZmZXItPlJlYWRJbmRleDsKQEAgLTIwNiw3ICsyMDcsNyBAQAogCUR1bXAgb3V0IHRvIGNvbnNvbGUgdGhlIHJpbmcgYnVmZmVyIGluZm8KIAogLS0qLwotdm9pZCBEdW1wUmluZ0luZm8oUklOR19CVUZGRVJfSU5GTyAqUmluZ0luZm8sIGNoYXIgKlByZWZpeCkKK3ZvaWQgRHVtcFJpbmdJbmZvKHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpSaW5nSW5mbywgY2hhciAqUHJlZml4KQogewogCXUzMiBieXRlc0F2YWlsVG9Xcml0ZTsKIAl1MzIgYnl0ZXNBdmFpbFRvUmVhZDsKQEAgLTIzMywxNCArMjM0LDE0IEBACiAKIHN0YXRpYyB1MzIKIENvcHlUb1JpbmdCdWZmZXIoCi0JUklOR19CVUZGRVJfSU5GTwkqUmluZ0luZm8sCisJc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8JKlJpbmdJbmZvLAogCXUzMgkJCQlTdGFydFdyaXRlT2Zmc2V0LAogCXZvaWQJCQkJKlNyYywKIAl1MzIJCQkJU3JjTGVuKTsKIAogc3RhdGljIHUzMgogQ29weUZyb21SaW5nQnVmZmVyKAotCVJJTkdfQlVGRkVSX0lORk8JKlJpbmdJbmZvLAorCXN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvCSpSaW5nSW5mbywKIAl2b2lkCQkJCSpEZXN0LAogCXUzMgkJCQlEZXN0TGVuLAogCXUzMgkJCQlTdGFydFJlYWRPZmZzZXQpOwpAQCAtMjU2LDggKzI1Nyw4IEBACiAJR2V0IHZhcmlvdXMgZGVidWcgbWV0cmljcyBmb3IgdGhlIHNwZWNpZmllZCByaW5nIGJ1ZmZlcgogCiAtLSovCi12b2lkIFJpbmdCdWZmZXJHZXREZWJ1Z0luZm8oUklOR19CVUZGRVJfSU5GTyAqUmluZ0luZm8sCi0JCQkgICAgUklOR19CVUZGRVJfREVCVUdfSU5GTyAqRGVidWdJbmZvKQordm9pZCBSaW5nQnVmZmVyR2V0RGVidWdJbmZvKHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpSaW5nSW5mbywKKwkJCSAgICBzdHJ1Y3QgaHZfcmluZ19idWZmZXJfZGVidWdfaW5mbyAqZGVidWdfaW5mbykKIHsKIAl1MzIgYnl0ZXNBdmFpbFRvV3JpdGU7CiAJdTMyIGJ5dGVzQXZhaWxUb1JlYWQ7CkBAIC0yNjcsMTEgKzI2OCwxMSBAQAogCQkJCQkmYnl0ZXNBdmFpbFRvUmVhZCwKIAkJCQkJJmJ5dGVzQXZhaWxUb1dyaXRlKTsKIAotCQlEZWJ1Z0luZm8tPkJ5dGVzQXZhaWxUb1JlYWQgPSBieXRlc0F2YWlsVG9SZWFkOwotCQlEZWJ1Z0luZm8tPkJ5dGVzQXZhaWxUb1dyaXRlID0gYnl0ZXNBdmFpbFRvV3JpdGU7Ci0JCURlYnVnSW5mby0+Q3VycmVudFJlYWRJbmRleCA9IFJpbmdJbmZvLT5SaW5nQnVmZmVyLT5SZWFkSW5kZXg7Ci0JCURlYnVnSW5mby0+Q3VycmVudFdyaXRlSW5kZXggPSBSaW5nSW5mby0+UmluZ0J1ZmZlci0+V3JpdGVJbmRleDsKLQkJRGVidWdJbmZvLT5DdXJyZW50SW50ZXJydXB0TWFzayA9IFJpbmdJbmZvLT5SaW5nQnVmZmVyLT5JbnRlcnJ1cHRNYXNrOworCQlkZWJ1Z19pbmZvLT5CeXRlc0F2YWlsVG9SZWFkID0gYnl0ZXNBdmFpbFRvUmVhZDsKKwkJZGVidWdfaW5mby0+Qnl0ZXNBdmFpbFRvV3JpdGUgPSBieXRlc0F2YWlsVG9Xcml0ZTsKKwkJZGVidWdfaW5mby0+Q3VycmVudFJlYWRJbmRleCA9IFJpbmdJbmZvLT5SaW5nQnVmZmVyLT5SZWFkSW5kZXg7CisJCWRlYnVnX2luZm8tPkN1cnJlbnRXcml0ZUluZGV4ID0gUmluZ0luZm8tPlJpbmdCdWZmZXItPldyaXRlSW5kZXg7CisJCWRlYnVnX2luZm8tPkN1cnJlbnRJbnRlcnJ1cHRNYXNrID0gUmluZ0luZm8tPlJpbmdCdWZmZXItPkludGVycnVwdE1hc2s7CiAJfQogfQogCkBAIC0yODUsNyArMjg2LDcgQEAKIAlHZXQgdGhlIGludGVycnVwdCBtYXNrIGZvciB0aGUgc3BlY2lmaWVkIHJpbmcgYnVmZmVyCiAKIC0tKi8KLXUzMiBHZXRSaW5nQnVmZmVySW50ZXJydXB0TWFzayhSSU5HX0JVRkZFUl9JTkZPICpyYmkpCit1MzIgR2V0UmluZ0J1ZmZlckludGVycnVwdE1hc2soc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKnJiaSkKIHsKIAlyZXR1cm4gcmJpLT5SaW5nQnVmZmVyLT5JbnRlcnJ1cHRNYXNrOwogfQpAQCAtMjk5LDE4ICszMDAsMTggQEAKIAlJbml0aWFsaXplIHRoZSByaW5nIGJ1ZmZlcgogCiAtLSovCi1pbnQgUmluZ0J1ZmZlckluaXQoUklOR19CVUZGRVJfSU5GTyAqUmluZ0luZm8sIHZvaWQgKkJ1ZmZlciwgdTMyIEJ1ZmZlckxlbikKK2ludCBSaW5nQnVmZmVySW5pdChzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqUmluZ0luZm8sIHZvaWQgKkJ1ZmZlciwgdTMyIEJ1ZmZlckxlbikKIHsKLQlpZiAoc2l6ZW9mKFJJTkdfQlVGRkVSKSAhPSBQQUdFX1NJWkUpCisJaWYgKHNpemVvZihzdHJ1Y3QgaHZfcmluZ19idWZmZXIpICE9IFBBR0VfU0laRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltZW1zZXQoUmluZ0luZm8sIDAsIHNpemVvZihSSU5HX0JVRkZFUl9JTkZPKSk7CisJbWVtc2V0KFJpbmdJbmZvLCAwLCBzaXplb2Yoc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8pKTsKIAotCVJpbmdJbmZvLT5SaW5nQnVmZmVyID0gKFJJTkdfQlVGRkVSICopQnVmZmVyOworCVJpbmdJbmZvLT5SaW5nQnVmZmVyID0gKHN0cnVjdCBodl9yaW5nX2J1ZmZlciAqKUJ1ZmZlcjsKIAlSaW5nSW5mby0+UmluZ0J1ZmZlci0+UmVhZEluZGV4ID0gUmluZ0luZm8tPlJpbmdCdWZmZXItPldyaXRlSW5kZXggPSAwOwogCiAJUmluZ0luZm8tPlJpbmdTaXplID0gQnVmZmVyTGVuOwotCVJpbmdJbmZvLT5SaW5nRGF0YVNpemUgPSBCdWZmZXJMZW4gLSBzaXplb2YoUklOR19CVUZGRVIpOworCVJpbmdJbmZvLT5SaW5nRGF0YVNpemUgPSBCdWZmZXJMZW4gLSBzaXplb2Yoc3RydWN0IGh2X3JpbmdfYnVmZmVyKTsKIAogCXNwaW5fbG9ja19pbml0KCZSaW5nSW5mby0+cmluZ19sb2NrKTsKIApAQCAtMzI2LDcgKzMyNyw3IEBACiAJQ2xlYW51cCB0aGUgcmluZyBidWZmZXIKIAogLS0qLwotdm9pZCBSaW5nQnVmZmVyQ2xlYW51cChSSU5HX0JVRkZFUl9JTkZPICpSaW5nSW5mbykKK3ZvaWQgUmluZ0J1ZmZlckNsZWFudXAoc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKlJpbmdJbmZvKQogewogfQogCkBAIC0zMzksNyArMzQwLDcgQEAKIAlXcml0ZSB0byB0aGUgcmluZyBidWZmZXIKIAogLS0qLwotaW50IFJpbmdCdWZmZXJXcml0ZShSSU5HX0JVRkZFUl9JTkZPICpPdXRSaW5nSW5mbywKK2ludCBSaW5nQnVmZmVyV3JpdGUoc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKk91dFJpbmdJbmZvLAogCQkgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsIHUzMiBzZ2NvdW50KQogewogCWludCBpID0gMDsKQEAgLTM1Miw4ICszNTMsNiBAQAogCXU2NCBwcmV2SW5kaWNlcyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCURQUklOVF9FTlRFUihWTUJVUyk7Ci0KIAlmb3JfZWFjaF9zZyhzZ2xpc3QsIHNnLCBzZ2NvdW50LCBpKQogCXsKIAkJdG90YWxCeXRlc1RvV3JpdGUgKz0gc2ctPmxlbmd0aDsKQEAgLTM4Miw5ICszODEsNiBAQAogCQkJYnl0ZUF2YWlsVG9Xcml0ZSk7CiAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmT3V0UmluZ0luZm8tPnJpbmdfbG9jaywgZmxhZ3MpOwotCi0JCURQUklOVF9FWElUKFZNQlVTKTsKLQogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC00MTYsOSArNDEyLDYgQEAKIAkvKiBEdW1wUmluZ0luZm8oT3V0UmluZ0luZm8sICJBRlRFUiAiKTsgKi8KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJk91dFJpbmdJbmZvLT5yaW5nX2xvY2ssIGZsYWdzKTsKLQotCURQUklOVF9FWElUKFZNQlVTKTsKLQogCXJldHVybiAwOwogfQogCkBAIC00MzIsNyArNDI1LDcgQEAKIAlSZWFkIHdpdGhvdXQgYWR2YW5jaW5nIHRoZSByZWFkIGluZGV4CiAKIC0tKi8KLWludCBSaW5nQnVmZmVyUGVlayhSSU5HX0JVRkZFUl9JTkZPICpJblJpbmdJbmZvLCB2b2lkICpCdWZmZXIsIHUzMiBCdWZmZXJMZW4pCitpbnQgUmluZ0J1ZmZlclBlZWsoc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKkluUmluZ0luZm8sIHZvaWQgKkJ1ZmZlciwgdTMyIEJ1ZmZlckxlbikKIHsKIAl1MzIgYnl0ZXNBdmFpbFRvV3JpdGU7CiAJdTMyIGJ5dGVzQXZhaWxUb1JlYWQ7CkBAIC00ODEsNyArNDc0LDcgQEAKIAlSZWFkIGFuZCBhZHZhbmNlIHRoZSByZWFkIGluZGV4CiAKIC0tKi8KLWludCBSaW5nQnVmZmVyUmVhZChSSU5HX0JVRkZFUl9JTkZPICpJblJpbmdJbmZvLCB2b2lkICpCdWZmZXIsCitpbnQgUmluZ0J1ZmZlclJlYWQoc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKkluUmluZ0luZm8sIHZvaWQgKkJ1ZmZlciwKIAkJICAgdTMyIEJ1ZmZlckxlbiwgdTMyIE9mZnNldCkKIHsKIAl1MzIgYnl0ZXNBdmFpbFRvV3JpdGU7CkBAIC01NTYsNyArNTQ5LDcgQEAKIC0tKi8KIHN0YXRpYyB1MzIKIENvcHlUb1JpbmdCdWZmZXIoCi0JUklOR19CVUZGRVJfSU5GTwkqUmluZ0luZm8sCisJc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8JKlJpbmdJbmZvLAogCXUzMgkJCQlTdGFydFdyaXRlT2Zmc2V0LAogCXZvaWQJCQkJKlNyYywKIAl1MzIJCQkJU3JjTGVuKQpAQCAtNTk0LDcgKzU4Nyw3IEBACiAtLSovCiBzdGF0aWMgdTMyCiBDb3B5RnJvbVJpbmdCdWZmZXIoCi0JUklOR19CVUZGRVJfSU5GTwkqUmluZ0luZm8sCisJc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8JKlJpbmdJbmZvLAogCXZvaWQJCQkJKkRlc3QsCiAJdTMyCQkJCURlc3RMZW4sCiAJdTMyCQkJCVN0YXJ0UmVhZE9mZnNldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9yaW5nX2J1ZmZlci5oIGIvZHJpdmVycy9zdGFnaW5nL2h2L3JpbmdfYnVmZmVyLmgKaW5kZXggNjIwMjE1Ny4uYTdmMTcxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L3JpbmdfYnVmZmVyLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L3JpbmdfYnVmZmVyLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAKLXR5cGVkZWYgc3RydWN0IF9SSU5HX0JVRkZFUiB7CitzdHJ1Y3QgaHZfcmluZ19idWZmZXIgewogCS8qIE9mZnNldCBpbiBieXRlcyBmcm9tIHRoZSBzdGFydCBvZiByaW5nIGRhdGEgYmVsb3cgKi8KIAl2b2xhdGlsZSB1MzIgV3JpdGVJbmRleDsKIApAQCAtNTEsNTEgKzUxLDUyIEBACiAJICogISEhIERPIE5PVCBwbGFjZSBhbnkgZmllbGRzIGJlbG93IHRoaXMgISEhCiAJICovCiAJdTggQnVmZmVyWzBdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBSSU5HX0JVRkZFUjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IF9SSU5HX0JVRkZFUl9JTkZPIHsKLQlSSU5HX0JVRkZFUiAqUmluZ0J1ZmZlcjsKK3N0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvIHsKKwlzdHJ1Y3QgaHZfcmluZ19idWZmZXIgKlJpbmdCdWZmZXI7CiAJdTMyIFJpbmdTaXplOwkJCS8qIEluY2x1ZGUgdGhlIHNoYXJlZCBoZWFkZXIgKi8KIAlzcGlubG9ja190IHJpbmdfbG9jazsKIAogCXUzMiBSaW5nRGF0YVNpemU7CQkvKiA8IHJpbmdTaXplICovCiAJdTMyIFJpbmdEYXRhU3RhcnRPZmZzZXQ7Cit9OwogCi19IFJJTkdfQlVGRkVSX0lORk87Ci0KLXR5cGVkZWYgc3RydWN0IF9SSU5HX0JVRkZFUl9ERUJVR19JTkZPIHsKK3N0cnVjdCBodl9yaW5nX2J1ZmZlcl9kZWJ1Z19pbmZvIHsKIAl1MzIgQ3VycmVudEludGVycnVwdE1hc2s7CiAJdTMyIEN1cnJlbnRSZWFkSW5kZXg7CiAJdTMyIEN1cnJlbnRXcml0ZUluZGV4OwogCXUzMiBCeXRlc0F2YWlsVG9SZWFkOwogCXUzMiBCeXRlc0F2YWlsVG9Xcml0ZTsKLX0gUklOR19CVUZGRVJfREVCVUdfSU5GTzsKK307CiAKIAogCiAvKiBJbnRlcmZhY2UgKi8KIAogCi1pbnQgUmluZ0J1ZmZlckluaXQoUklOR19CVUZGRVJfSU5GTyAqUmluZ0luZm8sIHZvaWQgKkJ1ZmZlciwgdTMyIEJ1ZmZlckxlbik7CitpbnQgUmluZ0J1ZmZlckluaXQoc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKlJpbmdJbmZvLCB2b2lkICpCdWZmZXIsCisJCSAgIHUzMiBCdWZmZXJMZW4pOwogCi12b2lkIFJpbmdCdWZmZXJDbGVhbnVwKFJJTkdfQlVGRkVSX0lORk8gKlJpbmdJbmZvKTsKK3ZvaWQgUmluZ0J1ZmZlckNsZWFudXAoc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKlJpbmdJbmZvKTsKIAotaW50IFJpbmdCdWZmZXJXcml0ZShSSU5HX0JVRkZFUl9JTkZPICpSaW5nSW5mbywKK2ludCBSaW5nQnVmZmVyV3JpdGUoc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKlJpbmdJbmZvLAogCQkgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCiAJCSAgICB1MzIgc2djb3VudCk7CiAKLWludCBSaW5nQnVmZmVyUGVlayhSSU5HX0JVRkZFUl9JTkZPICpSaW5nSW5mbywgdm9pZCAqQnVmZmVyLCB1MzIgQnVmZmVyTGVuKTsKK2ludCBSaW5nQnVmZmVyUGVlayhzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqUmluZ0luZm8sIHZvaWQgKkJ1ZmZlciwKKwkJICAgdTMyIEJ1ZmZlckxlbik7CiAKLWludCBSaW5nQnVmZmVyUmVhZChSSU5HX0JVRkZFUl9JTkZPICpSaW5nSW5mbywKK2ludCBSaW5nQnVmZmVyUmVhZChzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqUmluZ0luZm8sCiAJCSAgIHZvaWQgKkJ1ZmZlciwKIAkJICAgdTMyIEJ1ZmZlckxlbiwKIAkJICAgdTMyIE9mZnNldCk7CiAKLXUzMiBHZXRSaW5nQnVmZmVySW50ZXJydXB0TWFzayhSSU5HX0JVRkZFUl9JTkZPICpSaW5nSW5mbyk7Cit1MzIgR2V0UmluZ0J1ZmZlckludGVycnVwdE1hc2soc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKlJpbmdJbmZvKTsKIAotdm9pZCBEdW1wUmluZ0luZm8oUklOR19CVUZGRVJfSU5GTyAqUmluZ0luZm8sIGNoYXIgKlByZWZpeCk7Cit2b2lkIER1bXBSaW5nSW5mbyhzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqUmluZ0luZm8sIGNoYXIgKlByZWZpeCk7CiAKLXZvaWQgUmluZ0J1ZmZlckdldERlYnVnSW5mbyhSSU5HX0JVRkZFUl9JTkZPICpSaW5nSW5mbywKLQkJCSAgICBSSU5HX0JVRkZFUl9ERUJVR19JTkZPICpEZWJ1Z0luZm8pOwordm9pZCBSaW5nQnVmZmVyR2V0RGVidWdJbmZvKHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpSaW5nSW5mbywKKwkJCSAgICBzdHJ1Y3QgaHZfcmluZ19idWZmZXJfZGVidWdfaW5mbyAqZGVidWdfaW5mbyk7CiAKICNlbmRpZiAvKiBfUklOR19CVUZGRVJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9ybmRpc19maWx0ZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9ybmRpc19maWx0ZXIuYwppbmRleCA1ZWRmMDg1My4uZmEyMTQxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L3JuZGlzX2ZpbHRlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9ybmRpc19maWx0ZXIuYwpAQCAtMjQ0LDggKzI0NCw2IEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgaHZfbmV0dnNjX3BhY2tldCAqcGFja2V0OwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQyk7Ci0KIAkvKiBTZXR1cCB0aGUgcGFja2V0IHRvIHNlbmQgaXQgKi8KIAlwYWNrZXQgPSAmUmVxdWVzdC0+UGFja2V0OwogCkBAIC0yNjUsNyArMjYzLDYgQEAKIAlwYWNrZXQtPkNvbXBsZXRpb24uU2VuZC5TZW5kQ29tcGxldGlvblRpZCA9ICh1bnNpZ25lZCBsb25nKURldmljZTsKIAogCXJldCA9IGdSbmRpc0ZpbHRlci5Jbm5lckRyaXZlci5PblNlbmQoRGV2aWNlLT5OZXREZXZpY2UtPkRldmljZSwgcGFja2V0KTsKLQlEUFJJTlRfRVhJVChORVRWU0MpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI3Niw4ICsyNzMsNiBAQAogCWJvb2wgZm91bmQgPSBmYWxzZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQyk7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmRGV2aWNlLT5yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcXVlc3QsICZEZXZpY2UtPlJlcXVlc3RMaXN0LCBMaXN0RW50cnkpIHsKIAkJLyoKQEAgLTMyNSw4ICszMjAsNiBAQAogCQkJICAgUmVzcG9uc2UtPk1lc3NhZ2UuSW5pdGlhbGl6ZUNvbXBsZXRlLlJlcXVlc3RJZCwKIAkJCSAgIFJlc3BvbnNlLT5OZGlzTWVzc2FnZVR5cGUpOwogCX0KLQotCURQUklOVF9FWElUKE5FVFZTQyk7CiB9CiAKIHN0YXRpYyB2b2lkIFJuZGlzRmlsdGVyUmVjZWl2ZUluZGljYXRlU3RhdHVzKHN0cnVjdCBybmRpc19kZXZpY2UgKkRldmljZSwKQEAgLTM1Myw4ICszNDYsNiBAQAogCXN0cnVjdCBybmRpc19wYWNrZXQgKnJuZGlzUGFja2V0OwogCXUzMiBkYXRhT2Zmc2V0OwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQyk7Ci0KIAkvKiBlbXB0eSBldGhlcm5ldCBmcmFtZSA/PyAqLwogCS8qIEFTU0VSVChQYWNrZXQtPlBhZ2VCdWZmZXJzWzBdLkxlbmd0aCA+ICovCiAJLyogCVJORElTX01FU1NBR0VfU0laRShzdHJ1Y3Qgcm5kaXNfcGFja2V0KSk7ICovCkBAIC0zNzcsOCArMzY4LDYgQEAKIAogCWdSbmRpc0ZpbHRlci5Jbm5lckRyaXZlci5PblJlY2VpdmVDYWxsYmFjayhEZXZpY2UtPk5ldERldmljZS0+RGV2aWNlLAogCQkJCQkJICAgUGFja2V0KTsKLQotCURQUklOVF9FWElUKE5FVFZTQyk7CiB9CiAKIHN0YXRpYyBpbnQgUm5kaXNGaWx0ZXJPblJlY2VpdmUoc3RydWN0IGh2X2RldmljZSAqRGV2aWNlLApAQCAtMzg5LDggKzM3OCw2IEBACiAJc3RydWN0IHJuZGlzX21lc3NhZ2Ugcm5kaXNNZXNzYWdlOwogCXN0cnVjdCBybmRpc19tZXNzYWdlICpybmRpc0hlYWRlcjsKIAotCURQUklOVF9FTlRFUihORVRWU0MpOwotCiAJaWYgKCFuZXREZXZpY2UpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0zOTgsNyArMzg1LDYgQEAKIAlpZiAoIW5ldERldmljZS0+RXh0ZW5zaW9uKSB7CiAJCURQUklOVF9FUlIoTkVUVlNDLCAiZ290IHJuZGlzIG1lc3NhZ2UgYnV0IG5vIHJuZGlzIGRldmljZS4uLiIKIAkJCSAgImRyb3BwaW5nIHRoaXMgbWVzc2FnZSEiKTsKLQkJRFBSSU5UX0VYSVQoTkVUVlNDKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtNDA2LDcgKzM5Miw2IEBACiAJaWYgKHJuZGlzRGV2aWNlLT5TdGF0ZSA9PSBSTkRJU19ERVZfVU5JTklUSUFMSVpFRCkgewogCQlEUFJJTlRfRVJSKE5FVFZTQywgImdvdCBybmRpcyBtZXNzYWdlIGJ1dCBybmRpcyBkZXZpY2UgIgogCQkJICAgInVuaW5pdGlhbGl6ZWQuLi5kcm9wcGluZyB0aGlzIG1lc3NhZ2UhIik7Ci0JCURQUklOVF9FWElUKE5FVFZTQyk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTQzMSw3ICs0MTYsNiBAQAogCQkJICAgImJ5dGVzIGdvdCAldSkuLi5kcm9wcGluZyB0aGlzIG1lc3NhZ2UhIiwKIAkJCSAgIHJuZGlzSGVhZGVyLT5NZXNzYWdlTGVuZ3RoLAogCQkJICAgUGFja2V0LT5Ub3RhbERhdGFCdWZmZXJMZW5ndGgpOwotCQlEUFJJTlRfRVhJVChORVRWU0MpOwogCQlyZXR1cm4gLTE7CiAJfQogI2VuZGlmCkBAIC00NzksNyArNDYzLDYgQEAKIAkJYnJlYWs7CiAJfQogCi0JRFBSSU5UX0VYSVQoTkVUVlNDKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDkyLDggKzQ3NSw2IEBACiAJc3RydWN0IHJuZGlzX3F1ZXJ5X2NvbXBsZXRlICpxdWVyeUNvbXBsZXRlOwogCWludCByZXQgPSAwOwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQyk7Ci0KIAlpZiAoIVJlc3VsdCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTUzNiw3ICs1MTcsNiBAQAogQ2xlYW51cDoKIAlpZiAocmVxdWVzdCkKIAkJUHV0Um5kaXNSZXF1ZXN0KERldmljZSwgcmVxdWVzdCk7Ci0JRFBSSU5UX0VYSVQoTkVUVlNDKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC01NjgsOCArNTQ4LDYgQEAKIAl1MzIgc3RhdHVzOwogCWludCByZXQ7CiAKLQlEUFJJTlRfRU5URVIoTkVUVlNDKTsKLQogCS8qIEFTU0VSVChSTkRJU19NRVNTQUdFX1NJWkUoc3RydWN0IHJuZGlzX3NldF9yZXF1ZXN0KSArIHNpemVvZih1MzIpIDw9ICovCiAJLyogCXNpemVvZihzdHJ1Y3Qgcm5kaXNfbWVzc2FnZSkpOyAqLwogCkBAIC02MTQsMTUgKzU5MiwxMSBAQAogCWlmIChyZXF1ZXN0KQogCQlQdXRSbmRpc1JlcXVlc3QoRGV2aWNlLCByZXF1ZXN0KTsKIEV4aXQ6Ci0JRFBSSU5UX0VYSVQoTkVUVlNDKTsKLQogCXJldHVybiByZXQ7CiB9CiAKIGludCBSbmRpc0ZpbHRlckluaXQoc3RydWN0IG5ldHZzY19kcml2ZXIgKkRyaXZlcikKIHsKLQlEUFJJTlRfRU5URVIoTkVUVlNDKTsKLQogCURQUklOVF9EQkcoTkVUVlNDLCAic2l6ZW9mKHN0cnVjdCBybmRpc19maWx0ZXJfcGFja2V0KSA9PSAlemQiLAogCQkgICBzaXplb2Yoc3RydWN0IHJuZGlzX2ZpbHRlcl9wYWNrZXQpKTsKIApAQCAtNjU4LDggKzYzMiw2IEBACiAJLyogRHJpdmVyLT5RdWVyeUxpbmtTdGF0dXMgPSBSbmRpc0ZpbHRlclF1ZXJ5RGV2aWNlTGlua1N0YXR1czsgKi8KIAlEcml2ZXItPk9uUmVjZWl2ZUNhbGxiYWNrID0gUm5kaXNGaWx0ZXJPblJlY2VpdmU7CiAKLQlEUFJJTlRfRVhJVChORVRWU0MpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY3MSw4ICs2NDMsNiBAQAogCXUzMiBzdGF0dXM7CiAJaW50IHJldDsKIAotCURQUklOVF9FTlRFUihORVRWU0MpOwotCiAJcmVxdWVzdCA9IEdldFJuZGlzUmVxdWVzdChEZXZpY2UsIFJFTU9URV9ORElTX0lOSVRJQUxJWkVfTVNHLAogCQkJUk5ESVNfTUVTU0FHRV9TSVpFKHN0cnVjdCBybmRpc19pbml0aWFsaXplX3JlcXVlc3QpKTsKIAlpZiAoIXJlcXVlc3QpIHsKQEAgLTcxMCw3ICs2ODAsNiBAQAogQ2xlYW51cDoKIAlpZiAocmVxdWVzdCkKIAkJUHV0Um5kaXNSZXF1ZXN0KERldmljZSwgcmVxdWVzdCk7Ci0JRFBSSU5UX0VYSVQoTkVUVlNDKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC03MjAsOCArNjg5LDYgQEAKIAlzdHJ1Y3Qgcm5kaXNfcmVxdWVzdCAqcmVxdWVzdDsKIAlzdHJ1Y3Qgcm5kaXNfaGFsdF9yZXF1ZXN0ICpoYWx0OwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQyk7Ci0KIAkvKiBBdHRlbXB0IHRvIGRvIGEgcm5kaXMgZGV2aWNlIGhhbHQgKi8KIAlyZXF1ZXN0ID0gR2V0Um5kaXNSZXF1ZXN0KERldmljZSwgUkVNT1RFX05ESVNfSEFMVF9NU0csCiAJCQkJUk5ESVNfTUVTU0FHRV9TSVpFKHN0cnVjdCBybmRpc19oYWx0X3JlcXVlc3QpKTsKQEAgLTc0MCw3ICs3MDcsNiBAQAogQ2xlYW51cDoKIAlpZiAocmVxdWVzdCkKIAkJUHV0Um5kaXNSZXF1ZXN0KERldmljZSwgcmVxdWVzdCk7Ci0JRFBSSU5UX0VYSVQoTkVUVlNDKTsKIAlyZXR1cm47CiB9CiAKQEAgLTc0OCw4ICs3MTQsNiBAQAogewogCWludCByZXQ7CiAKLQlEUFJJTlRfRU5URVIoTkVUVlNDKTsKLQogCWlmIChEZXZpY2UtPlN0YXRlICE9IFJORElTX0RFVl9JTklUSUFMSVpFRCkKIAkJcmV0dXJuIDA7CiAKQEAgLTc2MCw3ICs3MjQsNiBAQAogCWlmIChyZXQgPT0gMCkKIAkJRGV2aWNlLT5TdGF0ZSA9IFJORElTX0RFVl9EQVRBSU5JVElBTElaRUQ7CiAKLQlEUFJJTlRfRVhJVChORVRWU0MpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTc2OCw4ICs3MzEsNiBAQAogewogCWludCByZXQ7CiAKLQlEUFJJTlRfRU5URVIoTkVUVlNDKTsKLQogCWlmIChEZXZpY2UtPlN0YXRlICE9IFJORElTX0RFVl9EQVRBSU5JVElBTElaRUQpCiAJCXJldHVybiAwOwogCkBAIC03NzcsOCArNzM4LDYgQEAKIAlpZiAocmV0ID09IDApCiAJCURldmljZS0+U3RhdGUgPSBSTkRJU19ERVZfSU5JVElBTElaRUQ7CiAKLQlEUFJJTlRfRVhJVChORVRWU0MpOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNzkwLDEzICs3NDksOSBAQAogCXN0cnVjdCBybmRpc19kZXZpY2UgKnJuZGlzRGV2aWNlOwogCXN0cnVjdCBuZXR2c2NfZGV2aWNlX2luZm8gKmRldmljZUluZm8gPSBBZGRpdGlvbmFsSW5mbzsKIAotCURQUklOVF9FTlRFUihORVRWU0MpOwotCiAJcm5kaXNEZXZpY2UgPSBHZXRSbmRpc0RldmljZSgpOwotCWlmICghcm5kaXNEZXZpY2UpIHsKLQkJRFBSSU5UX0VYSVQoTkVUVlNDKTsKKwlpZiAoIXJuZGlzRGV2aWNlKQogCQlyZXR1cm4gLTE7Ci0JfQogCiAJRFBSSU5UX0RCRyhORVRWU0MsICJybmRpcyBkZXZpY2Ugb2JqZWN0IGFsbG9jYXRlZCAtICVwIiwgcm5kaXNEZXZpY2UpOwogCkBAIC04MDgsNyArNzYzLDYgQEAKIAlyZXQgPSBnUm5kaXNGaWx0ZXIuSW5uZXJEcml2ZXIuQmFzZS5PbkRldmljZUFkZChEZXZpY2UsIEFkZGl0aW9uYWxJbmZvKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJa2ZyZWUocm5kaXNEZXZpY2UpOwotCQlEUFJJTlRfRVhJVChORVRWU0MpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtODQ5LDggKzgwMyw2IEBACiAJRFBSSU5UX0lORk8oTkVUVlNDLCAiRGV2aWNlIDB4JXAgbGluayBzdGF0ZSAlcyIsIHJuZGlzRGV2aWNlLAogCQkgICAgKChkZXZpY2VJbmZvLT5MaW5rU3RhdGUpID8gKCJkb3duIikgOiAoInVwIikpKTsKIAotCURQUklOVF9FWElUKE5FVFZTQyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC04NTksOCArODExLDYgQEAKIAlzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0RGV2aWNlID0gRGV2aWNlLT5FeHRlbnNpb247CiAJc3RydWN0IHJuZGlzX2RldmljZSAqcm5kaXNEZXZpY2UgPSBuZXREZXZpY2UtPkV4dGVuc2lvbjsKIAotCURQUklOVF9FTlRFUihORVRWU0MpOwotCiAJLyogSGFsdCBhbmQgcmVsZWFzZSB0aGUgcm5kaXMgZGV2aWNlICovCiAJUm5kaXNGaWx0ZXJIYWx0RGV2aWNlKHJuZGlzRGV2aWNlKTsKIApAQCAtODcwLDUwICs4MjAsMzEgQEAKIAkvKiBQYXNzIGNvbnRyb2wgdG8gaW5uZXIgZHJpdmVyIHRvIHJlbW92ZSB0aGUgZGV2aWNlICovCiAJZ1JuZGlzRmlsdGVyLklubmVyRHJpdmVyLkJhc2UuT25EZXZpY2VSZW1vdmUoRGV2aWNlKTsKIAotCURQUklOVF9FWElUKE5FVFZTQyk7Ci0KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgUm5kaXNGaWx0ZXJPbkNsZWFudXAoc3RydWN0IGh2X2RyaXZlciAqRHJpdmVyKQogewotCURQUklOVF9FTlRFUihORVRWU0MpOwotCi0JRFBSSU5UX0VYSVQoTkVUVlNDKTsKIH0KIAogaW50IFJuZGlzRmlsdGVyT25PcGVuKHN0cnVjdCBodl9kZXZpY2UgKkRldmljZSkKIHsKLQlpbnQgcmV0OwogCXN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXREZXZpY2UgPSBEZXZpY2UtPkV4dGVuc2lvbjsKIAotCURQUklOVF9FTlRFUihORVRWU0MpOwotCiAJaWYgKCFuZXREZXZpY2UpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0ID0gUm5kaXNGaWx0ZXJPcGVuRGV2aWNlKG5ldERldmljZS0+RXh0ZW5zaW9uKTsKLQotCURQUklOVF9FWElUKE5FVFZTQyk7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBSbmRpc0ZpbHRlck9wZW5EZXZpY2UobmV0RGV2aWNlLT5FeHRlbnNpb24pOwogfQogCiBpbnQgUm5kaXNGaWx0ZXJPbkNsb3NlKHN0cnVjdCBodl9kZXZpY2UgKkRldmljZSkKIHsKLQlpbnQgcmV0OwogCXN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXREZXZpY2UgPSBEZXZpY2UtPkV4dGVuc2lvbjsKIAotCURQUklOVF9FTlRFUihORVRWU0MpOwotCiAJaWYgKCFuZXREZXZpY2UpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0ID0gUm5kaXNGaWx0ZXJDbG9zZURldmljZShuZXREZXZpY2UtPkV4dGVuc2lvbik7Ci0KLQlEUFJJTlRfRVhJVChORVRWU0MpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gUm5kaXNGaWx0ZXJDbG9zZURldmljZShuZXREZXZpY2UtPkV4dGVuc2lvbik7CiB9CiAKIHN0YXRpYyBpbnQgUm5kaXNGaWx0ZXJPblNlbmQoc3RydWN0IGh2X2RldmljZSAqRGV2aWNlLApAQCAtOTI1LDggKzg1Niw2IEBACiAJc3RydWN0IHJuZGlzX3BhY2tldCAqcm5kaXNQYWNrZXQ7CiAJdTMyIHJuZGlzTWVzc2FnZVNpemU7CiAKLQlEUFJJTlRfRU5URVIoTkVUVlNDKTsKLQogCS8qIEFkZCB0aGUgcm5kaXMgaGVhZGVyICovCiAJZmlsdGVyUGFja2V0ID0gKHN0cnVjdCBybmRpc19maWx0ZXJfcGFja2V0ICopUGFja2V0LT5FeHRlbnNpb247CiAJLyogQVNTRVJUKGZpbHRlclBhY2tldCk7ICovCkBAIC05NzEsOCArOTAwLDYgQEAKIAkJCQlmaWx0ZXJQYWNrZXQtPkNvbXBsZXRpb25Db250ZXh0OwogCX0KIAotCURQUklOVF9FWElUKE5FVFZTQyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC05ODAsMTkgKzkwNywxMiBAQAogewogCXN0cnVjdCBybmRpc19maWx0ZXJfcGFja2V0ICpmaWx0ZXJQYWNrZXQgPSBDb250ZXh0OwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQyk7Ci0KIAkvKiBQYXNzIGl0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGhhbmRsZXIgKi8KIAlmaWx0ZXJQYWNrZXQtPk9uQ29tcGxldGlvbihmaWx0ZXJQYWNrZXQtPkNvbXBsZXRpb25Db250ZXh0KTsKLQotCURQUklOVF9FWElUKE5FVFZTQyk7CiB9CiAKIAogc3RhdGljIHZvaWQgUm5kaXNGaWx0ZXJPblNlbmRSZXF1ZXN0Q29tcGxldGlvbih2b2lkICpDb250ZXh0KQogewotCURQUklOVF9FTlRFUihORVRWU0MpOwotCiAJLyogTm9vcCAqLwotCURQUklOVF9FWElUKE5FVFZTQyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvc3RvcnZzYy5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L3N0b3J2c2MuYwppbmRleCAyN2EyNzZlLi42YmQyZmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvc3RvcnZzYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9zdG9ydnNjLmMKQEAgLTE4Niw3ICsxODYsNiBAQAogCWlmICghc3RvckRldmljZSkgewogCQlEUFJJTlRfRVJSKFNUT1JWU0MsICJ1bmFibGUgdG8gZ2V0IHN0b3IgZGV2aWNlLi4uIgogCQkJICAgImRldmljZSBiZWluZyBkZXN0cm95ZWQ/Iik7Ci0JCURQUklOVF9FWElUKFNUT1JWU0MpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0zNDQsOCArMzQzLDYgQEAKIAlyZXF1ZXN0LT5XYWl0RXZlbnQgPSBOVUxMOwogbm9tZW06CiAJUHV0U3RvckRldmljZShEZXZpY2UpOwotCi0JRFBSSU5UX0VYSVQoU1RPUlZTQyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzU2LDEzICszNTMsMTAgQEAKIAlzdHJ1Y3QgaHZfc3RvcnZzY19yZXF1ZXN0ICpyZXF1ZXN0OwogCXN0cnVjdCBzdG9ydnNjX2RldmljZSAqc3RvckRldmljZTsKIAotCURQUklOVF9FTlRFUihTVE9SVlNDKTsKLQogCXN0b3JEZXZpY2UgPSBNdXN0R2V0U3RvckRldmljZShEZXZpY2UpOwogCWlmICghc3RvckRldmljZSkgewogCQlEUFJJTlRfRVJSKFNUT1JWU0MsICJ1bmFibGUgdG8gZ2V0IHN0b3IgZGV2aWNlLi4uIgogCQkJICAgImRldmljZSBiZWluZyBkZXN0cm95ZWQ/Iik7Ci0JCURQUklOVF9FWElUKFNUT1JWU0MpOwogCQlyZXR1cm47CiAJfQogCkBAIC00MTQsOCArNDA4LDYgQEAKIAlhdG9taWNfZGVjKCZzdG9yRGV2aWNlLT5OdW1PdXRzdGFuZGluZ1JlcXVlc3RzKTsKIAogCVB1dFN0b3JEZXZpY2UoRGV2aWNlKTsKLQotCURQUklOVF9FWElUKFNUT1JWU0MpOwogfQogCiBzdGF0aWMgdm9pZCBTdG9yVnNjT25SZWNlaXZlKHN0cnVjdCBodl9kZXZpY2UgKkRldmljZSwKQEAgLTQ0OSwxNSArNDQxLDEyIEBACiAJc3RydWN0IHN0b3J2c2NfcmVxdWVzdF9leHRlbnNpb24gKnJlcXVlc3Q7CiAJaW50IHJldDsKIAotCURQUklOVF9FTlRFUihTVE9SVlNDKTsKLQogCS8qIEFTU0VSVChkZXZpY2UpOyAqLwogCiAJc3RvckRldmljZSA9IE11c3RHZXRTdG9yRGV2aWNlKGRldmljZSk7CiAJaWYgKCFzdG9yRGV2aWNlKSB7CiAJCURQUklOVF9FUlIoU1RPUlZTQywgInVuYWJsZSB0byBnZXQgc3RvciBkZXZpY2UuLi4iCiAJCQkgICAiZGV2aWNlIGJlaW5nIGRlc3Ryb3llZD8iKTsKLQkJRFBSSU5UX0VYSVQoU1RPUlZTQyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTUwMSw4ICs0OTAsNiBAQAogCX0gd2hpbGUgKDEpOwogCiAJUHV0U3RvckRldmljZShkZXZpY2UpOwotCi0JRFBSSU5UX0VYSVQoU1RPUlZTQyk7CiAJcmV0dXJuOwogfQogCkBAIC01NDcsOCArNTM0LDYgQEAKIAlzdHJ1Y3Qgc3RvcnZzY19kZXZpY2VfaW5mbyAqZGV2aWNlSW5mbzsKIAlpbnQgcmV0ID0gMDsKIAotCURQUklOVF9FTlRFUihTVE9SVlNDKTsKLQogCWRldmljZUluZm8gPSAoc3RydWN0IHN0b3J2c2NfZGV2aWNlX2luZm8gKilBZGRpdGlvbmFsSW5mbzsKIAlzdG9yRGV2aWNlID0gQWxsb2NTdG9yRGV2aWNlKERldmljZSk7CiAJaWYgKCFzdG9yRGV2aWNlKSB7CkBAIC01ODQsOCArNTY5LDYgQEAKIAkJICAgc3RvckRldmljZS0+VGFyZ2V0SWQpOwogCiBDbGVhbnVwOgotCURQUklOVF9FWElUKFNUT1JWU0MpOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTk2LDggKzU3OSw2IEBACiB7CiAJc3RydWN0IHN0b3J2c2NfZGV2aWNlICpzdG9yRGV2aWNlOwogCi0JRFBSSU5UX0VOVEVSKFNUT1JWU0MpOwotCiAJRFBSSU5UX0lORk8oU1RPUlZTQywgImRpc2FibGluZyBzdG9yYWdlIGRldmljZSAoJXApLi4uIiwKIAkJICAgIERldmljZS0+RXh0ZW5zaW9uKTsKIApAQCAtNjI1LDggKzYwNiw2IEBACiAJRGV2aWNlLT5Ecml2ZXItPlZtYnVzQ2hhbm5lbEludGVyZmFjZS5DbG9zZShEZXZpY2UpOwogCiAJRnJlZVN0b3JEZXZpY2Uoc3RvckRldmljZSk7Ci0KLQlEUFJJTlRfRVhJVChTVE9SVlNDKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjM3LDE1ICs2MTYsMTIgQEAKIAlzdHJ1Y3QgdnN0b3JfcGFja2V0ICp2c3RvclBhY2tldDsKIAlpbnQgcmV0OwogCi0JRFBSSU5UX0VOVEVSKFNUT1JWU0MpOwotCiAJRFBSSU5UX0lORk8oU1RPUlZTQywgInJlc2V0dGluZyBob3N0IGFkYXB0ZXIuLi4iKTsKIAogCXN0b3JEZXZpY2UgPSBHZXRTdG9yRGV2aWNlKERldmljZSk7CiAJaWYgKCFzdG9yRGV2aWNlKSB7CiAJCURQUklOVF9FUlIoU1RPUlZTQywgInVuYWJsZSB0byBnZXQgc3RvciBkZXZpY2UuLi4iCiAJCQkgICAiZGV2aWNlIGJlaW5nIGRlc3Ryb3llZD8iKTsKLQkJRFBSSU5UX0VYSVQoU1RPUlZTQyk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTY4Nyw3ICs2NjMsNiBAQAogCiBDbGVhbnVwOgogCVB1dFN0b3JEZXZpY2UoRGV2aWNlKTsKLQlEUFJJTlRfRVhJVChTVE9SVlNDKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC03MDIsOCArNjc3LDYgQEAKIAlzdHJ1Y3QgdnN0b3JfcGFja2V0ICp2c3RvclBhY2tldDsKIAlpbnQgcmV0ID0gMDsKIAotCURQUklOVF9FTlRFUihTVE9SVlNDKTsKLQogCXJlcXVlc3RFeHRlbnNpb24gPQogCQkoc3RydWN0IHN0b3J2c2NfcmVxdWVzdF9leHRlbnNpb24gKilSZXF1ZXN0LT5FeHRlbnNpb247CiAJdnN0b3JQYWNrZXQgPSAmcmVxdWVzdEV4dGVuc2lvbi0+VlN0b3JQYWNrZXQ7CkBAIC03MjAsNyArNjkzLDYgQEAKIAlpZiAoIXN0b3JEZXZpY2UpIHsKIAkJRFBSSU5UX0VSUihTVE9SVlNDLCAidW5hYmxlIHRvIGdldCBzdG9yIGRldmljZS4uLiIKIAkJCSAgICJkZXZpY2UgYmVpbmcgZGVzdHJveWVkPyIpOwotCQlEUFJJTlRfRVhJVChTVE9SVlNDKTsKIAkJcmV0dXJuIC0yOwogCX0KIApAQCAtNzg2LDggKzc1OCw2IEBACiAJYXRvbWljX2luYygmc3RvckRldmljZS0+TnVtT3V0c3RhbmRpbmdSZXF1ZXN0cyk7CiAKIAlQdXRTdG9yRGV2aWNlKERldmljZSk7Ci0KLQlEUFJJTlRfRVhJVChTVE9SVlNDKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC03OTYsOCArNzY2LDYgQEAKICAqLwogc3RhdGljIHZvaWQgU3RvclZzY09uQ2xlYW51cChzdHJ1Y3QgaHZfZHJpdmVyICpEcml2ZXIpCiB7Ci0JRFBSSU5UX0VOVEVSKFNUT1JWU0MpOwotCURQUklOVF9FWElUKFNUT1JWU0MpOwogfQogCiAvKgpAQCAtODA3LDggKzc3NSw2IEBACiB7CiAJc3RydWN0IHN0b3J2c2NfZHJpdmVyX29iamVjdCAqc3RvckRyaXZlcjsKIAotCURQUklOVF9FTlRFUihTVE9SVlNDKTsKLQogCXN0b3JEcml2ZXIgPSAoc3RydWN0IHN0b3J2c2NfZHJpdmVyX29iamVjdCAqKURyaXZlcjsKIAogCURQUklOVF9EQkcoU1RPUlZTQywgInNpemVvZihTVE9SVlNDX1JFUVVFU1QpPSV6ZCAiCkBAIC04NTIsNyArODE4LDUgQEAKIAogCXN0b3JEcml2ZXItPk9uSU9SZXF1ZXN0CQk9IFN0b3JWc2NPbklPUmVxdWVzdDsKIAotCURQUklOVF9FWElUKFNUT1JWU0MpOwotCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvc3RvcnZzY19kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9zdG9ydnNjX2Rydi5jCmluZGV4IGQyMmUzNWYuLjA3NWI2MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9zdG9ydnNjX2Rydi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9zdG9ydnNjX2Rydi5jCkBAIC0xNDEsOCArMTQxLDYgQEAKIAlzdHJ1Y3Qgc3RvcnZzY19kcml2ZXJfb2JqZWN0ICpzdG9ydnNjX2Rydl9vYmogPSAmZ19zdG9ydnNjX2Rydi5kcnZfb2JqOwogCXN0cnVjdCBkcml2ZXJfY29udGV4dCAqZHJ2X2N0eCA9ICZnX3N0b3J2c2NfZHJ2LmRydl9jdHg7CiAKLQlEUFJJTlRfRU5URVIoU1RPUlZTQ19EUlYpOwotCiAJdm1idXNfZ2V0X2ludGVyZmFjZSgmc3RvcnZzY19kcnZfb2JqLT5CYXNlLlZtYnVzQ2hhbm5lbEludGVyZmFjZSk7CiAKIAlzdG9ydnNjX2Rydl9vYmotPlJpbmdCdWZmZXJTaXplID0gc3RvcnZzY19yaW5nYnVmZmVyX3NpemU7CkBAIC0xNzUsOCArMTczLDYgQEAKIAkvKiBUaGUgZHJpdmVyIGJlbG9uZ3MgdG8gdm1idXMgKi8KIAlyZXQgPSB2bWJ1c19jaGlsZF9kcml2ZXJfcmVnaXN0ZXIoZHJ2X2N0eCk7CiAKLQlEUFJJTlRfRVhJVChTVE9SVlNDX0RSVik7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xOTQsOCArMTkwLDYgQEAKIAlzdHJ1Y3QgZGV2aWNlICpjdXJyZW50X2RldiA9IE5VTEw7CiAJaW50IHJldDsKIAotCURQUklOVF9FTlRFUihTVE9SVlNDX0RSVik7Ci0KIAl3aGlsZSAoMSkgewogCQljdXJyZW50X2RldiA9IE5VTEw7CiAKQEAgLTIxOSw5ICsyMTMsNiBAQAogCQlzdG9ydnNjX2Rydl9vYmotPkJhc2UuT25DbGVhbnVwKCZzdG9ydnNjX2Rydl9vYmotPkJhc2UpOwogCiAJdm1idXNfY2hpbGRfZHJpdmVyX3VucmVnaXN0ZXIoZHJ2X2N0eCk7Ci0KLQlEUFJJTlRfRVhJVChTVE9SVlNDX0RSVik7Ci0KIAlyZXR1cm47CiB9CiAKQEAgLTI0Myw4ICsyMzQsNiBAQAogCXN0cnVjdCBob3N0X2RldmljZV9jb250ZXh0ICpob3N0X2RldmljZV9jdHg7CiAJc3RydWN0IHN0b3J2c2NfZGV2aWNlX2luZm8gZGV2aWNlX2luZm87CiAKLQlEUFJJTlRfRU5URVIoU1RPUlZTQ19EUlYpOwotCiAJaWYgKCFzdG9ydnNjX2Rydl9vYmotPkJhc2UuT25EZXZpY2VBZGQpCiAJCXJldHVybiAtMTsKIApAQCAtMjcxLDggKzI2MCw2IEBACiAKIAlpZiAoIWhvc3RfZGV2aWNlX2N0eC0+cmVxdWVzdF9wb29sKSB7CiAJCXNjc2lfaG9zdF9wdXQoaG9zdCk7Ci0JCURQUklOVF9FWElUKFNUT1JWU0NfRFJWKTsKLQogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTI4NCw4ICsyNzEsNiBAQAogCQlEUFJJTlRfRVJSKFNUT1JWU0NfRFJWLCAidW5hYmxlIHRvIGFkZCBzY3NpIHZzYyBkZXZpY2UiKTsKIAkJa21lbV9jYWNoZV9kZXN0cm95KGhvc3RfZGV2aWNlX2N0eC0+cmVxdWVzdF9wb29sKTsKIAkJc2NzaV9ob3N0X3B1dChob3N0KTsKLQkJRFBSSU5UX0VYSVQoU1RPUlZTQ19EUlYpOwotCiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTMwOSwxNSArMjk0LDEwIEBACiAKIAkJa21lbV9jYWNoZV9kZXN0cm95KGhvc3RfZGV2aWNlX2N0eC0+cmVxdWVzdF9wb29sKTsKIAkJc2NzaV9ob3N0X3B1dChob3N0KTsKLQkJRFBSSU5UX0VYSVQoU1RPUlZTQ19EUlYpOwotCiAJCXJldHVybiAtMTsKIAl9CiAKIAlzY3NpX3NjYW5faG9zdChob3N0KTsKLQotCURQUklOVF9FWElUKFNUT1JWU0NfRFJWKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM0MCwxMiArMzIwLDggQEAKIAkJCShzdHJ1Y3QgaG9zdF9kZXZpY2VfY29udGV4dCAqKWhvc3QtPmhvc3RkYXRhOwogCiAKLQlEUFJJTlRfRU5URVIoU1RPUlZTQ19EUlYpOwotCi0JaWYgKCFzdG9ydnNjX2Rydl9vYmotPkJhc2UuT25EZXZpY2VSZW1vdmUpIHsKLQkJRFBSSU5UX0VYSVQoU1RPUlZTQ19EUlYpOworCWlmICghc3RvcnZzY19kcnZfb2JqLT5CYXNlLk9uRGV2aWNlUmVtb3ZlKQogCQlyZXR1cm4gLTE7Ci0JfQogCiAJLyoKIAkgKiBDYWxsIHRvIHRoZSB2c2MgZHJpdmVyIHRvIGxldCBpdCBrbm93IHRoYXQgdGhlIGRldmljZSBpcyBiZWluZwpAQCAtMzY4LDkgKzM0NCw2IEBACiAKIAlEUFJJTlRfSU5GTyhTVE9SVlNDLCAicmVsZWFzaW5nIGhvc3QgYWRhcHRlciAoJXApLi4uIiwgaG9zdCk7CiAJc2NzaV9ob3N0X3B1dChob3N0KTsKLQotCURQUklOVF9FWElUKFNUT1JWU0NfRFJWKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM5Myw4ICszNjYsNiBAQAogCS8qICAgICAgICAodW5zaWduZWQgbG9uZyljbWRfcmVxdWVzdCk7ICovCiAJLyogQVNTRVJUKHNjbW5kLT5zY3NpX2RvbmUpOyAqLwogCi0JRFBSSU5UX0VOVEVSKFNUT1JWU0NfRFJWKTsKLQogCWlmIChjbWRfcmVxdWVzdC0+Ym91bmNlX3NnbF9jb3VudCkgewogCQkvKiB1c2luZyBib3VuY2UgYnVmZmVyICovCiAJCS8qIHByaW50aygiY29weV9mcm9tX2JvdW5jZV9idWZmZXJcbiIpOyAqLwpAQCAtNDI3LDggKzM5OCw2IEBACiAJc2NzaV9kb25lX2ZuKHNjbW5kKTsKIAogCWttZW1fY2FjaGVfZnJlZShob3N0X2RldmljZV9jdHgtPnJlcXVlc3RfcG9vbCwgY21kX3JlcXVlc3QpOwotCi0JRFBSSU5UX0VYSVQoU1RPUlZTQ19EUlYpOwogfQogCiBzdGF0aWMgaW50IGRvX2JvdW5jZV9idWZmZXIoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsIHVuc2lnbmVkIGludCBzZ19jb3VudCkKQEAgLTY0Nyw4ICs2MTYsNiBAQAogCWludCBpOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsOwogCi0JRFBSSU5UX0VOVEVSKFNUT1JWU0NfRFJWKTsKLQogCURQUklOVF9EQkcoU1RPUlZTQ19EUlYsICJzY21uZCAlcCBkaXIgJWQsIHVzZV9zZyAlZCBidWYgJXAgbGVuICVkICIKIAkJICAgInF1ZXVlIGRlcHRoICVkIHRhZ2dlZCAlZCIsIHNjbW5kLCBzY21uZC0+c2NfZGF0YV9kaXJlY3Rpb24sCiAJCSAgIHNjc2lfc2dfY291bnQoc2NtbmQpLCBzY3NpX3NnbGlzdChzY21uZCksCkBAIC04MTIsOCArNzc5LDYgQEAKIAkJcmV0ID0gU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZOwogCX0KIAotCURQUklOVF9FWElUKFNUT1JWU0NfRFJWKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTg3MywyMyArODM4LDE3IEBACiAJCShzdHJ1Y3QgaG9zdF9kZXZpY2VfY29udGV4dCAqKXNjbW5kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCB2bV9kZXZpY2UgKmRldmljZV9jdHggPSBob3N0X2RldmljZV9jdHgtPmRldmljZV9jdHg7CiAKLQlEUFJJTlRfRU5URVIoU1RPUlZTQ19EUlYpOwotCiAJRFBSSU5UX0lORk8oU1RPUlZTQ19EUlYsICJzZGV2ICglcCkgZGV2IG9iaiAoJXApIC0gaG9zdCByZXNldHRpbmcuLi4iLAogCQkgICAgc2NtbmQtPmRldmljZSwgJmRldmljZV9jdHgtPmRldmljZV9vYmopOwogCiAJLyogSW52b2tlcyB0aGUgdnNjIHRvIHJlc2V0IHRoZSBob3N0L2J1cyAqLwogCXJldCA9IFN0b3JWc2NPbkhvc3RSZXNldCgmZGV2aWNlX2N0eC0+ZGV2aWNlX29iaik7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCURQUklOVF9FWElUKFNUT1JWU0NfRFJWKTsKKwlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7Ci0JfQogCiAJRFBSSU5UX0lORk8oU1RPUlZTQ19EUlYsICJzZGV2ICglcCkgZGV2IG9iaiAoJXApIC0gaG9zdCByZXNldGVkIiwKIAkJICAgIHNjbW5kLT5kZXZpY2UsICZkZXZpY2VfY3R4LT5kZXZpY2Vfb2JqKTsKIAotCURQUklOVF9FWElUKFNUT1JWU0NfRFJWKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTk3NywxOCArOTM2LDE0IEBACiB7CiAJaW50IHJldDsKIAotCURQUklOVF9FTlRFUihTVE9SVlNDX0RSVik7CiAJRFBSSU5UX0lORk8oU1RPUlZTQ19EUlYsICJTdG9ydnNjIGluaXRpYWxpemluZy4uLi4iKTsKIAlyZXQgPSBzdG9ydnNjX2Rydl9pbml0KFN0b3JWc2NJbml0aWFsaXplKTsKLQlEUFJJTlRfRVhJVChTVE9SVlNDX0RSVik7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHN0b3J2c2NfZXhpdCh2b2lkKQogewotCURQUklOVF9FTlRFUihTVE9SVlNDX0RSVik7CiAJc3RvcnZzY19kcnZfZXhpdCgpOwotCURQUklOVF9FTlRFUihTVE9SVlNDX0RSVik7CiB9CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1cy5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzLmMKaW5kZXggMDA3NTQzYi4uY2ExZTE4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzLmMKQEAgLTU3LDkgKzU3LDcgQEAKICAqLwogc3RhdGljIHZvaWQgVm1idXNHZXRDaGFubmVsT2ZmZXJzKHZvaWQpCiB7Ci0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKIAlWbWJ1c0NoYW5uZWxSZXF1ZXN0T2ZmZXJzKCk7Ci0JRFBSSU5UX0VYSVQoVk1CVVMpOwogfQogCiAvKgpAQCAtMTIwLDggKzExOCw2IEBACiAJdTMyICppcnF2ZWN0b3IgPSBBZGRpdGlvbmFsSW5mbzsKIAlpbnQgcmV0OwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKLQogCWdEZXZpY2UgPSBkZXY7CiAKIAltZW1jcHkoJmdEZXZpY2UtPmRldmljZVR5cGUsICZnVm1idXNEZXZpY2VUeXBlLCBzaXplb2Yoc3RydWN0IGh2X2d1aWQpKTsKQEAgLTEzNiw4ICsxMzIsNiBAQAogCXJldCA9IFZtYnVzQ29ubmVjdCgpOwogCiAJLyogVm1idXNTZW5kRXZlbnQoZGV2aWNlLT5sb2NhbFBvcnRJZCsxKTsgKi8KLQlEUFJJTlRfRVhJVChWTUJVUyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNDgsMTIgKzE0Miw5IEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVMpOwogCVZtYnVzQ2hhbm5lbFJlbGVhc2VVbmF0dGFjaGVkQ2hhbm5lbHMoKTsKIAlWbWJ1c0Rpc2Nvbm5lY3QoKTsKIAlvbl9lYWNoX2NwdShIdlN5bmljQ2xlYW51cCwgTlVMTCwgMSk7Ci0JRFBSSU5UX0VYSVQoVk1CVVMpOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTY0LDkgKzE1NSw3IEBACiB7CiAJLyogc3RydWN0IHZtYnVzX2RyaXZlciAqZHJpdmVyID0gKHN0cnVjdCB2bWJ1c19kcml2ZXIgKilkcnY7ICovCiAKLQlEUFJJTlRfRU5URVIoVk1CVVMpOwogCUh2Q2xlYW51cCgpOwotCURQUklOVF9FWElUKFZNQlVTKTsKIH0KIAogLyoKQEAgLTIzOSw4ICsyMjgsNiBAQAogCXBhZ2VfYWRkciA9IGdIdkNvbnRleHQuc3luSUNNZXNzYWdlUGFnZVtjcHVdOwogCW1zZyA9IChzdHJ1Y3QgaHZfbWVzc2FnZSAqKXBhZ2VfYWRkciArIFZNQlVTX01FU1NBR0VfU0lOVDsKIAotCURQUklOVF9FTlRFUihWTUJVUyk7Ci0KIAkvKiBDaGVjayBpZiB0aGVyZSBhcmUgYWN0dWFsIG1zZ3MgdG8gYmUgcHJvY2VzcyAqLwogCWlmIChtc2ctPkhlYWRlci5NZXNzYWdlVHlwZSAhPSBIdk1lc3NhZ2VUeXBlTm9uZSkgewogCQlEUFJJTlRfREJHKFZNQlVTLCAicmVjZWl2ZWQgbXNnIHR5cGUgJWQgc2l6ZSAlZCIsCkBAIC0yNTksNyArMjQ2LDYgQEAKIAkJcmV0IHw9IDB4MjsKIAl9CiAKLQlEUFJJTlRfRVhJVChWTUJVUyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjcxLDggKzI1Nyw2IEBACiAJc3RydWN0IHZtYnVzX2RyaXZlciAqZHJpdmVyID0gKHN0cnVjdCB2bWJ1c19kcml2ZXIgKilkcnY7CiAJaW50IHJldDsKIAotCURQUklOVF9FTlRFUihWTUJVUyk7Ci0KIAlEUFJJTlRfSU5GTyhWTUJVUywgIisrKysrKysgSFYgRHJpdmVyIHZlcnNpb24gPSAlcyArKysrKysrIiwKIAkJICAgIEhWX0RSVl9WRVJTSU9OKTsKIAlEUFJJTlRfSU5GTyhWTUJVUywgIisrKysrKysgVm1idXMgc3VwcG9ydGVkIHZlcnNpb24gPSAlZCArKysrKysrIiwKQEAgLTMwNSw3ICsyODksNSBAQAogCQkJCXJldCk7CiAJZ0RyaXZlciA9IGRydjsKIAotCURQUklOVF9FWElUKFZNQlVTKTsKLQogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXNfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXNfZHJ2LmMKaW5kZXggMjJjODBlYy4uMDkyZjAyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX2Rydi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1c19kcnYuYwpAQCAtMjU0LDggKzI1NCw2IEBACiAJaW50IHJldDsKIAl1bnNpZ25lZCBpbnQgdmVjdG9yOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTX0RSVik7Ci0KIAkvKgogCSAqIFNldCB0aGlzIHVwIHRvIGFsbG93IGxvd2VyIGxheWVyIHRvIGNhbGxiYWNrIHRvIGFkZC9yZW1vdmUgY2hpbGQKIAkgKiBkZXZpY2VzIG9uIHRoZSBidXMKQEAgLTM2MCw4ICszNTgsNiBAQAogCXdhaXRfZm9yX2NvbXBsZXRpb24oJmh2X2NoYW5uZWxfcmVhZHkpOwogCiBjbGVhbnVwOgotCURQUklOVF9FWElUKFZNQlVTX0RSVik7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNzcsOCArMzczLDYgQEAKIAogCXN0cnVjdCB2bV9kZXZpY2UgKmRldl9jdHggPSAmZ192bWJ1c19kcnYuZGV2aWNlX2N0eDsKIAotCURQUklOVF9FTlRFUihWTUJVU19EUlYpOwotCiAJLyogUmVtb3ZlIHRoZSByb290IGRldmljZSAqLwogCWlmICh2bWJ1c19kcnZfb2JqLT5CYXNlLk9uRGV2aWNlUmVtb3ZlKQogCQl2bWJ1c19kcnZfb2JqLT5CYXNlLk9uRGV2aWNlUmVtb3ZlKCZkZXZfY3R4LT5kZXZpY2Vfb2JqKTsKQEAgLTM5NSwxMCArMzg5LDYgQEAKIAogCXRhc2tsZXRfa2lsbCgmdm1idXNfZHJ2X2N0eC0+bXNnX2RwYyk7CiAJdGFza2xldF9raWxsKCZ2bWJ1c19kcnZfY3R4LT5ldmVudF9kcGMpOwotCi0JRFBSSU5UX0VYSVQoVk1CVVNfRFJWKTsKLQotCXJldHVybjsKIH0KIAogCkBAIC00MTksOCArNDA5LDYgQEAKIAlzdHJ1Y3Qgdm1idXNfZHJpdmVyICp2bWJ1c19kcnZfb2JqID0gJmdfdm1idXNfZHJ2LmRydl9vYmo7CiAJaW50IHJldDsKIAotCURQUklOVF9FTlRFUihWTUJVU19EUlYpOwotCiAJRFBSSU5UX0lORk8oVk1CVVNfRFJWLCAiY2hpbGQgZHJpdmVyICglcCkgcmVnaXN0ZXJpbmcgLSBuYW1lICVzIiwKIAkJICAgIGRyaXZlcl9jdHgsIGRyaXZlcl9jdHgtPmRyaXZlci5uYW1lKTsKIApAQCAtNDMxLDggKzQxOSw2IEBACiAKIAl2bWJ1c19kcnZfb2JqLT5HZXRDaGFubmVsT2ZmZXJzKCk7CiAKLQlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwotCiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wodm1idXNfY2hpbGRfZHJpdmVyX3JlZ2lzdGVyKTsKQEAgLTQ1MCwxNiArNDM2LDEyIEBACiAgKi8KIHZvaWQgdm1idXNfY2hpbGRfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGRyaXZlcl9jb250ZXh0ICpkcml2ZXJfY3R4KQogewotCURQUklOVF9FTlRFUihWTUJVU19EUlYpOwotCiAJRFBSSU5UX0lORk8oVk1CVVNfRFJWLCAiY2hpbGQgZHJpdmVyICglcCkgdW5yZWdpc3RlcmluZyAtIG5hbWUgJXMiLAogCQkgICAgZHJpdmVyX2N0eCwgZHJpdmVyX2N0eC0+ZHJpdmVyLm5hbWUpOwogCiAJZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9jdHgtPmRyaXZlcik7CiAKIAlkcml2ZXJfY3R4LT5kcml2ZXIuYnVzID0gTlVMTDsKLQotCURQUklOVF9FWElUKFZNQlVTX0RSVik7CiB9CiBFWFBPUlRfU1lNQk9MKHZtYnVzX2NoaWxkX2RyaXZlcl91bnJlZ2lzdGVyKTsKIApAQCAtNTA2LDE1ICs0ODgsMTEgQEAKIAlzdHJ1Y3Qgdm1fZGV2aWNlICpjaGlsZF9kZXZpY2VfY3R4OwogCXN0cnVjdCBodl9kZXZpY2UgKmNoaWxkX2RldmljZV9vYmo7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVNfRFJWKTsKLQogCS8qIEFsbG9jYXRlIHRoZSBuZXcgY2hpbGQgZGV2aWNlICovCiAJY2hpbGRfZGV2aWNlX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2bV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNoaWxkX2RldmljZV9jdHgpIHsKIAkJRFBSSU5UX0VSUihWTUJVU19EUlYsCiAJCQkidW5hYmxlIHRvIGFsbG9jYXRlIGRldmljZV9jb250ZXh0IGZvciBjaGlsZCBkZXZpY2UiKTsKLQkJRFBSSU5UX0VYSVQoVk1CVVNfRFJWKTsKLQogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTU0Niw4ICs1MjQsNiBAQAogCW1lbWNweSgmY2hpbGRfZGV2aWNlX2N0eC0+Y2xhc3NfaWQsIHR5cGUsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOwogCW1lbWNweSgmY2hpbGRfZGV2aWNlX2N0eC0+ZGV2aWNlX2lkLCBpbnN0YW5jZSwgc2l6ZW9mKHN0cnVjdCBodl9ndWlkKSk7CiAKLQlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwotCiAJcmV0dXJuIGNoaWxkX2RldmljZV9vYmo7CiB9CiAKQEAgLTU2NCw4ICs1NDAsNiBAQAogCQkJCXRvX3ZtX2RldmljZShjaGlsZF9kZXZpY2Vfb2JqKTsKIAlzdGF0aWMgYXRvbWljX3QgZGV2aWNlX251bSA9IEFUT01JQ19JTklUKDApOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTX0RSVik7Ci0KIAlEUFJJTlRfREJHKFZNQlVTX0RSViwgImNoaWxkIGRldmljZSAoJXApIHJlZ2lzdGVyaW5nIiwKIAkJICAgY2hpbGRfZGV2aWNlX2N0eCk7CiAKQEAgLTU5NCw4ICs1NjgsNiBAQAogCQlEUFJJTlRfSU5GTyhWTUJVU19EUlYsICJjaGlsZCBkZXZpY2UgKCVwKSByZWdpc3RlcmVkIiwKIAkJCSAgICAmY2hpbGRfZGV2aWNlX2N0eC0+ZGV2aWNlKTsKIAotCURQUklOVF9FWElUKFZNQlVTX0RSVik7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC02MDcsOCArNTc5LDYgQEAKIHsKIAlzdHJ1Y3Qgdm1fZGV2aWNlICpkZXZpY2VfY3R4ID0gdG9fdm1fZGV2aWNlKGRldmljZV9vYmopOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTX0RSVik7Ci0KIAlEUFJJTlRfSU5GTyhWTUJVU19EUlYsICJ1bnJlZ2lzdGVyaW5nIGNoaWxkIGRldmljZSAoJXApIiwKIAkJICAgICZkZXZpY2VfY3R4LT5kZXZpY2UpOwogCkBAIC02MjAsOCArNTkwLDYgQEAKIAogCURQUklOVF9JTkZPKFZNQlVTX0RSViwgImNoaWxkIGRldmljZSAoJXApIHVucmVnaXN0ZXJlZCIsCiAJCSAgICAmZGV2aWNlX2N0eC0+ZGV2aWNlKTsKLQotCURQUklOVF9FWElUKFZNQlVTX0RSVik7CiB9CiAKIC8qCkBAIC02MjksOSArNTk3LDYgQEAKICAqLwogc3RhdGljIHZvaWQgdm1idXNfY2hpbGRfZGV2aWNlX2Rlc3Ryb3koc3RydWN0IGh2X2RldmljZSAqZGV2aWNlX29iaikKIHsKLQlEUFJJTlRfRU5URVIoVk1CVVNfRFJWKTsKLQotCURQUklOVF9FWElUKFZNQlVTX0RSVik7CiB9CiAKIC8qCkBAIC02NDYsOCArNjExLDYgQEAKIAlzdHJ1Y3Qgdm1fZGV2aWNlICpkZXZpY2VfY3R4ID0gZGV2aWNlX3RvX3ZtX2RldmljZShkZXZpY2UpOwogCWludCByZXQ7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVNfRFJWKTsKLQogCURQUklOVF9JTkZPKFZNQlVTX0RSViwgImdlbmVyYXRpbmcgdWV2ZW50IC0gVk1CVVNfREVWSUNFX0NMQVNTX0dVSUQ9eyIKIAkJICAgICIlMDJ4JTAyeCUwMnglMDJ4LSUwMnglMDJ4LSUwMnglMDJ4LSIKIAkJICAgICIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeH0iLApAQCAtNzA4LDggKzY3MSw2IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCURQUklOVF9FWElUKFZNQlVTX0RSVik7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNzIyLDggKzY4Myw2IEBACiAJc3RydWN0IGRyaXZlcl9jb250ZXh0ICpkcml2ZXJfY3R4ID0gZHJpdmVyX3RvX2RyaXZlcl9jb250ZXh0KGRyaXZlcik7CiAJc3RydWN0IHZtX2RldmljZSAqZGV2aWNlX2N0eCA9IGRldmljZV90b192bV9kZXZpY2UoZGV2aWNlKTsKIAotCURQUklOVF9FTlRFUihWTUJVU19EUlYpOwotCiAJLyogV2UgZm91bmQgb3VyIGRyaXZlciA/ICovCiAJaWYgKG1lbWNtcCgmZGV2aWNlX2N0eC0+Y2xhc3NfaWQsICZkcml2ZXJfY3R4LT5jbGFzc19pZCwKIAkJICAgc2l6ZW9mKHN0cnVjdCBodl9ndWlkKSkgPT0gMCkgewpAQCAtNzQyLDkgKzcwMSw2IEBACiAKIAkJbWF0Y2ggPSAxOwogCX0KLQotCURQUklOVF9FWElUKFZNQlVTX0RSVik7Ci0KIAlyZXR1cm4gbWF0Y2g7CiB9CiAKQEAgLTc1OSw4ICs3MTUsNiBAQAogewogCXN0cnVjdCB2bV9kZXZpY2UgKmRldmljZV9jdHggPSAoc3RydWN0IHZtX2RldmljZSAqKWNvbnRleHQ7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVNfRFJWKTsKLQogCS8qCiAJICogS2ljayBvZmYgdGhlIHByb2Nlc3Mgb2YgdW5yZWdpc3RlcmluZyB0aGUgZGV2aWNlLgogCSAqIFRoaXMgd2lsbCBjYWxsIHZtYnVzX3JlbW92ZSgpIGFuZCBldmVudHVhbGx5IHZtYnVzX2RldmljZV9yZWxlYXNlKCkKQEAgLTc2OCw3ICs3MjIsNiBAQAogCWRldmljZV91bnJlZ2lzdGVyKCZkZXZpY2VfY3R4LT5kZXZpY2UpOwogCiAJLyogcHV0X2RldmljZSgmZGV2aWNlX2N0eC0+ZGV2aWNlKTsgKi8KLQlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwogfQogCiAvKgpAQCAtNzgyLDggKzczNSw2IEBACiAJc3RydWN0IHZtX2RldmljZSAqZGV2aWNlX2N0eCA9CiAJCQlkZXZpY2VfdG9fdm1fZGV2aWNlKGNoaWxkX2RldmljZSk7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVNfRFJWKTsKLQogCS8qIExldCB0aGUgc3BlY2lmaWMgb3Blbi1zb3VyY2UgZHJpdmVyIGhhbmRsZXMgdGhlIHByb2JlIGlmIGl0IGNhbiAqLwogCWlmIChkcml2ZXJfY3R4LT5wcm9iZSkgewogCQlyZXQgPSBkZXZpY2VfY3R4LT5wcm9iZV9lcnJvciA9IGRyaXZlcl9jdHgtPnByb2JlKGNoaWxkX2RldmljZSk7CkBAIC04MDIsOCArNzUzLDYgQEAKIAkJCSAgIGNoaWxkX2RldmljZS0+ZHJpdmVyLT5uYW1lKTsKIAkJcmV0ID0gLTE7CiAJfQotCi0JRFBSSU5UX0VYSVQoVk1CVVNfRFJWKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC04MTUsMTUgKzc2NCwxMiBAQAogCWludCByZXQ7CiAJc3RydWN0IGRyaXZlcl9jb250ZXh0ICpkcml2ZXJfY3R4OwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTX0RSVik7Ci0KIAkvKiBTcGVjaWFsIGNhc2Ugcm9vdCBidXMgZGV2aWNlICovCiAJaWYgKGNoaWxkX2RldmljZS0+cGFyZW50ID09IE5VTEwpIHsKIAkJLyoKIAkJICogTm8tb3Agc2luY2UgaXQgaXMgc3RhdGljYWxseSBkZWZpbmVkIGFuZCBoYW5kbGUgaW4KIAkJICogdm1idXNfYnVzX2V4aXQoKQogCQkgKi8KLQkJRFBSSU5UX0VYSVQoVk1CVVNfRFJWKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC04NDQsOCArNzkwLDYgQEAKIAkJfQogCX0KIAotCURQUklOVF9FWElUKFZNQlVTX0RSVik7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtODU2LDIzICs4MDAsMTggQEAKIHsKIAlzdHJ1Y3QgZHJpdmVyX2NvbnRleHQgKmRyaXZlcl9jdHg7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVNfRFJWKTsKLQogCS8qIFNwZWNpYWwgY2FzZSByb290IGJ1cyBkZXZpY2UgKi8KIAlpZiAoY2hpbGRfZGV2aWNlLT5wYXJlbnQgPT0gTlVMTCkgewogCQkvKgogCQkgKiBOby1vcCBzaW5jZSBpdCBpcyBzdGF0aWNhbGx5IGRlZmluZWQgYW5kIGhhbmRsZSBpbgogCQkgKiB2bWJ1c19idXNfZXhpdCgpCiAJCSAqLwotCQlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwogCQlyZXR1cm47CiAJfQogCiAJLyogVGhlIGRldmljZSBtYXkgbm90IGJlIGF0dGFjaGVkIHlldCAqLwotCWlmICghY2hpbGRfZGV2aWNlLT5kcml2ZXIpIHsKLQkJRFBSSU5UX0VYSVQoVk1CVVNfRFJWKTsKKwlpZiAoIWNoaWxkX2RldmljZS0+ZHJpdmVyKQogCQlyZXR1cm47Ci0JfQogCiAJZHJpdmVyX2N0eCA9IGRyaXZlcl90b19kcml2ZXJfY29udGV4dChjaGlsZF9kZXZpY2UtPmRyaXZlcik7CiAKQEAgLTg4MCw4ICs4MTksNiBAQAogCWlmIChkcml2ZXJfY3R4LT5zaHV0ZG93bikKIAkJZHJpdmVyX2N0eC0+c2h1dGRvd24oY2hpbGRfZGV2aWNlKTsKIAotCURQUklOVF9FWElUKFZNQlVTX0RSVik7Ci0KIAlyZXR1cm47CiB9CiAKQEAgLTg5MCwxMyArODI3LDExIEBACiAgKi8KIHN0YXRpYyB2b2lkIHZtYnVzX2J1c19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKLQlEUFJJTlRfRU5URVIoVk1CVVNfRFJWKTsKIAkvKiBGSVhNRSAqLwogCS8qIEVtcHR5IHJlbGVhc2UgZnVuY3Rpb25zIGFyZSBhIGJ1Zywgb3IgYSBtYWpvciBzaWduCiAJICogb2YgYSBwcm9ibGVtIGRlc2lnbiwgdGhpcyBNVVNUIEJFIEZJWEVEISAqLwogCWRldl9lcnIoZGV2aWNlLCAiJXMgbmVlZHMgdG8gYmUgZml4ZWQhXG4iLCBfX2Z1bmNfXyk7CiAJV0FSTl9PTigxKTsKLQlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwogfQogCiAvKgpAQCAtOTA2LDE1ICs4NDEsMTAgQEAKIHsKIAlzdHJ1Y3Qgdm1fZGV2aWNlICpkZXZpY2VfY3R4ID0gZGV2aWNlX3RvX3ZtX2RldmljZShkZXZpY2UpOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTX0RSVik7Ci0KIAkvKiB2bWJ1c19jaGlsZF9kZXZpY2VfZGVzdHJveSgmZGV2aWNlX2N0eC0+ZGV2aWNlX29iaik7ICovCiAJa2ZyZWUoZGV2aWNlX2N0eCk7CiAKIAkvKiAhIURPIE5PVCBSRUZFUkVOQ0UgZGV2aWNlX2N0eCBhbnltb3JlIGF0IHRoaXMgcG9pbnQhISAqLwotCURQUklOVF9FWElUKFZNQlVTX0RSVik7Ci0KLQlyZXR1cm47CiB9CiAKIC8qCkBAIC05MjQsMTQgKzg1NCwxMCBAQAogewogCXN0cnVjdCB2bWJ1c19kcml2ZXIgKnZtYnVzX2Rydl9vYmogPSAoc3RydWN0IHZtYnVzX2RyaXZlciAqKWRhdGE7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVNfRFJWKTsKLQogCS8qIEFTU0VSVCh2bWJ1c19kcnZfb2JqLT5Pbk1zZ0RwYyAhPSBOVUxMKTsgKi8KIAogCS8qIENhbGwgdG8gYnVzIGRyaXZlciB0byBoYW5kbGUgaW50ZXJydXB0ICovCiAJdm1idXNfZHJ2X29iai0+T25Nc2dEcGMoJnZtYnVzX2Rydl9vYmotPkJhc2UpOwotCi0JRFBSSU5UX0VYSVQoVk1CVVNfRFJWKTsKIH0KIAogLyoKQEAgLTk0MSwxNCArODY3LDEwIEBACiB7CiAJc3RydWN0IHZtYnVzX2RyaXZlciAqdm1idXNfZHJ2X29iaiA9IChzdHJ1Y3Qgdm1idXNfZHJpdmVyICopZGF0YTsKIAotCURQUklOVF9FTlRFUihWTUJVU19EUlYpOwotCiAJLyogQVNTRVJUKHZtYnVzX2Rydl9vYmotPk9uRXZlbnREcGMgIT0gTlVMTCk7ICovCiAKIAkvKiBDYWxsIHRvIGJ1cyBkcml2ZXIgdG8gaGFuZGxlIGludGVycnVwdCAqLwogCXZtYnVzX2Rydl9vYmotPk9uRXZlbnREcGMoJnZtYnVzX2Rydl9vYmotPkJhc2UpOwotCi0JRFBSSU5UX0VYSVQoVk1CVVNfRFJWKTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IHZtYnVzX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCkBAIC05NTYsOCArODc4LDYgQEAKIAlzdHJ1Y3Qgdm1idXNfZHJpdmVyICp2bWJ1c19kcml2ZXJfb2JqID0gJmdfdm1idXNfZHJ2LmRydl9vYmo7CiAJaW50IHJldDsKIAotCURQUklOVF9FTlRFUihWTUJVU19EUlYpOwotCiAJLyogQVNTRVJUKHZtYnVzX2RyaXZlcl9vYmotPk9uSXNyICE9IE5VTEwpOyAqLwogCiAJLyogQ2FsbCB0byBidXMgZHJpdmVyIHRvIGhhbmRsZSBpbnRlcnJ1cHQgKi8KQEAgLTk3MSwxMCArODkxLDggQEAKIAkJaWYgKHRlc3RfYml0KDEsICh1bnNpZ25lZCBsb25nICopJnJldCkpCiAJCQl0YXNrbGV0X3NjaGVkdWxlKCZnX3ZtYnVzX2Rydi5ldmVudF9kcGMpOwogCi0JCURQUklOVF9FWElUKFZNQlVTX0RSVik7CiAJCXJldHVybiBJUlFfSEFORExFRDsKIAl9IGVsc2UgewotCQlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwogCQlyZXR1cm4gSVJRX05PTkU7CiAJfQogfQpAQCAtOTk0LDEwICs5MTIsNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB2bWJ1c19pbml0KHZvaWQpCiB7Ci0JaW50IHJldCA9IDA7Ci0KLQlEUFJJTlRfRU5URVIoVk1CVVNfRFJWKTsKLQogCURQUklOVF9JTkZPKFZNQlVTX0RSViwKIAkJIlZtYnVzIGluaXRpYWxpemluZy4uLi4gY3VycmVudCBsb2cgbGV2ZWwgMHgleCAoJXgsJXgpIiwKIAkJdm1idXNfbG9nbGV2ZWwsIEhJV09SRCh2bWJ1c19sb2dsZXZlbCksIExPV09SRCh2bWJ1c19sb2dsZXZlbCkpOwpAQCAtMTAwNiwyMCArOTIwLDEzIEBACiAJaWYgKCFkbWlfY2hlY2tfc3lzdGVtKG1pY3Jvc29mdF9odl9kbWlfdGFibGUpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldCA9IHZtYnVzX2J1c19pbml0KFZtYnVzSW5pdGlhbGl6ZSk7Ci0KLQlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIHZtYnVzX2J1c19pbml0KFZtYnVzSW5pdGlhbGl6ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB2bWJ1c19leGl0KHZvaWQpCiB7Ci0JRFBSSU5UX0VOVEVSKFZNQlVTX0RSVik7Ci0KIAl2bWJ1c19idXNfZXhpdCgpOwogCS8qIFRvZG86IGl0IGlzIHVzZWQgZm9yIGxvZ2xldmVsLCB0byBiZSBwb3J0ZWQgdG8gbmV3IGtlcm5lbC4gKi8KLQlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwotCXJldHVybjsKIH0KIAogLyoKQEAgLTEwMjgsNyArOTM1LDcgQEAKICAqIGluc3RhbGxlZCBhbmQvb3IgY29uZmlndXJlZC4gIFdlIGRvbid0IGRvIGFueXRoaW5nIGVsc2Ugd2l0aCB0aGUgdGFibGUsIGJ1dAogICogaXQgbmVlZHMgdG8gYmUgcHJlc2VudC4KICAqLwotY29uc3Qgc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1pY3Jvc29mdF9odl9wY2lfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtaWNyb3NvZnRfaHZfcGNpX3RhYmxlW10gPSB7CiAJeyBQQ0lfREVWSUNFKDB4MTQxNCwgMHg1MzUzKSB9LAkvKiBWR0EgY29tcGF0aWJsZSBjb250cm9sbGVyICovCiAJeyAwIH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL0RvY3VtZW50YXRpb24vb3ZlcnZpZXcudHh0IGIvZHJpdmVycy9zdGFnaW5nL2lpby9Eb2N1bWVudGF0aW9uL292ZXJ2aWV3LnR4dAppbmRleCBlMzlkZmMxLi5jYzZlY2FkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL0RvY3VtZW50YXRpb24vb3ZlcnZpZXcudHh0CisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vRG9jdW1lbnRhdGlvbi9vdmVydmlldy50eHQKQEAgLTQ0LDcgKzQ0LDcgQEAKIGFwcGxpY2F0aW9ucyBpdCBpdCB1c2VmdWwgdG8gYmUgYWJsZSB0byBjYXB0dXJlIGRhdGEgYmFzZWQgb24gc29tZQogZXh0ZXJuYWwgc2lnbmFsICh0cmlnZ2VyKS4gIFRoZXNlIHRyaWdnZXJzIG1pZ2h0IGJlIGEgZGF0YSByZWFkeQogc2lnbmFsLCBhIGdwaW8gbGluZSBjb25uZWN0ZWQgdG8gc29tZSBleHRlcm5hbCBzeXN0ZW0gb3IgYW4gb24KLXByb2Nlc3NvciBwZXJpb2RpYyBpbnRlcnJ1cHQuICBBIHNpbmdsZSB0cmlnZ2VyIG1hbnkgaW5pdGlhbGl6ZSBkYXRhCitwcm9jZXNzb3IgcGVyaW9kaWMgaW50ZXJydXB0LiAgQSBzaW5nbGUgdHJpZ2dlciBtYXkgaW5pdGlhbGl6ZSBkYXRhCiBjYXB0dXJlIG9yIHJlYWRpbmcgZnJvbSBhIG51bWJlciBvZiBzZW5zb3JzLiAgVGhlc2UgdHJpZ2dlcnMgYXJlCiB1c2VkIGluIGlpbyB0byBmaWxsIHNvZnR3YXJlIHJpbmcgYnVmZmVycyBhY3RpbmcgaW4gYSB2ZXJ5IHNpbWlsYXIKIGZhc2hpb24gdG8gdGhlIGhhcmR3YXJlIGJ1ZmZlcnMgZGVzY3JpYmVkIGFib3ZlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2lpby9LY29uZmlnCmluZGV4IGIwZTYyNDQuLmVkNDg4MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL0tjb25maWcKQEAgLTIxLDYgKzIxLDcgQEAKIGlmIElJT19SSU5HX0JVRkZFUgogCiBjb25maWcgSUlPX1NXX1JJTkcKKyAgICAgICBzZWxlY3QgSUlPX1RSSUdHRVIKIAl0cmlzdGF0ZSAiSW5kdXN0cmlhbCBJL08gbG9jayBmcmVlIHNvZnR3YXJlIHJpbmciCiAJaGVscAogCSAgRXhhbXBsZSBzb2Z0d2FyZSByaW5nIGJ1ZmZlciBpbXBsZW1lbnRhdGlvbi4gIFRoZSBkZXNpZ24gYWltCkBAIC00NCw2ICs0NSw3IEBACiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvaWlvL2xpZ2h0L0tjb25maWciCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9paW8vbWFnbmV0b21ldGVyL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyL0tjb25maWciCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL01ha2VmaWxlCmluZGV4IDM1MDJiMzkuLmU5MDk2NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9NYWtlZmlsZQpAQCAtMTQsNSArMTQsNSBAQAogb2JqLXkgKz0gZ3lyby8KIG9iai15ICs9IGltdS8KIG9iai15ICs9IGxpZ2h0LwotCi1vYmoteSArPSB0cmlnZ2VyLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK29iai15ICs9IHRyaWdnZXIvCitvYmoteSArPSBtYWduZXRvbWV0ZXIvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvaWlvL1RPRE8KaW5kZXggMTVkYTBjMi4uODk4Y2JhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vVE9ETwpAQCAtNjYsNCArNjYsNCBAQAogMikgU29tZSBkZXZpY2UgcmVxdWlyZSBpbmR2aWR1YWwgZG9jcy4KIAogQ29udGFjdDogSm9uYXRoYW4gQ2FtZXJvbiA8amljMjNAY2FtLmFjLnVrPi4KLU1haWxpbmcgbGlzdDogTEtNTC4KK01haWxpbmcgbGlzdDogbGludXgtaWlvQHZnZXIua2VybmVsLm9yZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9LY29uZmlnCmluZGV4IGI0ZTU3ZDEuLjU5MjZjMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL0tjb25maWcKQEAgLTQsMjkgKzQsMjkgQEAKIGNvbW1lbnQgIkFjY2VsZXJvbWV0ZXJzIgogCiBjb25maWcgQURJUzE2MjA5Ci0gICAgICAgdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIEFESVMxNjIwOSBEdWFsLUF4aXMgRGlnaXRhbCBJbmNsaW5vbWV0ZXIgYW5kIEFjY2VsZXJvbWV0ZXIiCi0gICAgICAgZGVwZW5kcyBvbiBTUEkKLSAgICAgICBzZWxlY3QgSUlPX1RSSUdHRVIgaWYgSUlPX1JJTkdfQlVGRkVSCi0gICAgICAgc2VsZWN0IElJT19TV19SSU5HIGlmIElJT19SSU5HX0JVRkZFUgotICAgICAgIGhlbHAKLSAgICAgICAgIFNheSB5ZXMgaGVyZSB0byBidWlsZCBzdXBwb3J0IGZvciBBbmFsb2cgRGV2aWNlcyBhZGlzMTYyMDkgZHVhbC1heGlzIGRpZ2l0YWwgaW5jbGlub21ldGVyCi0JIGFuZCBhY2NlbGVyb21ldGVyLgorCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBBRElTMTYyMDkgRHVhbC1BeGlzIERpZ2l0YWwgSW5jbGlub21ldGVyIGFuZCBBY2NlbGVyb21ldGVyIgorCWRlcGVuZHMgb24gU1BJCisJc2VsZWN0IElJT19UUklHR0VSIGlmIElJT19SSU5HX0JVRkZFUgorCXNlbGVjdCBJSU9fU1dfUklORyBpZiBJSU9fUklOR19CVUZGRVIKKwloZWxwCisJICBTYXkgeWVzIGhlcmUgdG8gYnVpbGQgc3VwcG9ydCBmb3IgQW5hbG9nIERldmljZXMgYWRpczE2MjA5IGR1YWwtYXhpcyBkaWdpdGFsIGluY2xpbm9tZXRlcgorCSAgYW5kIGFjY2VsZXJvbWV0ZXIuCiAKIGNvbmZpZyBBRElTMTYyMjAKLSAgICAgICB0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQURJUzE2MjIwIFByb2dyYW1tYWJsZSBEaWdpdGFsIFZpYnJhdGlvbiBTZW5zb3IgZHJpdmVyIgotICAgICAgIGRlcGVuZHMgb24gU1BJCi0gICAgICAgaGVscAotICAgICAgICAgU2F5IHllcyBoZXJlIHRvIGJ1aWxkIHN1cHBvcnQgZm9yIEFuYWxvZyBEZXZpY2VzIGFkaXMxNjIyMCBwcm9ncmFtbWFibGUKLSAgICAgICAgIGRpZ2l0YWwgdmlicmF0aW9uIHNlbnNvci4KKwl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQURJUzE2MjIwIFByb2dyYW1tYWJsZSBEaWdpdGFsIFZpYnJhdGlvbiBTZW5zb3IiCisJZGVwZW5kcyBvbiBTUEkKKwloZWxwCisJICBTYXkgeWVzIGhlcmUgdG8gYnVpbGQgc3VwcG9ydCBmb3IgQW5hbG9nIERldmljZXMgYWRpczE2MjIwIHByb2dyYW1tYWJsZQorCSAgZGlnaXRhbCB2aWJyYXRpb24gc2Vuc29yLgogCiBjb25maWcgQURJUzE2MjQwCi0gICAgICAgdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIEFESVMxNjI0MCBQcm9ncmFtbWFibGUgSW1wYWN0IFNlbnNvciBhbmQgUmVjb3JkZXIiCi0gICAgICAgZGVwZW5kcyBvbiBTUEkKLSAgICAgICBzZWxlY3QgSUlPX1RSSUdHRVIgaWYgSUlPX1JJTkdfQlVGRkVSCi0gICAgICAgc2VsZWN0IElJT19TV19SSU5HIGlmIElJT19SSU5HX0JVRkZFUgotICAgICAgIGhlbHAKLSAgICAgICAgIFNheSB5ZXMgaGVyZSB0byBidWlsZCBzdXBwb3J0IGZvciBBbmFsb2cgRGV2aWNlcyBhZGlzMTYyNDAgcHJvZ3JhbW1hYmxlCi0JIGltcGFjdCBTZW5zb3IgYW5kIHJlY29yZGVyLgorCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBBRElTMTYyNDAgUHJvZ3JhbW1hYmxlIEltcGFjdCBTZW5zb3IgYW5kIFJlY29yZGVyIgorCWRlcGVuZHMgb24gU1BJCisJc2VsZWN0IElJT19UUklHR0VSIGlmIElJT19SSU5HX0JVRkZFUgorCXNlbGVjdCBJSU9fU1dfUklORyBpZiBJSU9fUklOR19CVUZGRVIKKwloZWxwCisJICBTYXkgeWVzIGhlcmUgdG8gYnVpbGQgc3VwcG9ydCBmb3IgQW5hbG9nIERldmljZXMgYWRpczE2MjQwIHByb2dyYW1tYWJsZQorCSAgaW1wYWN0IFNlbnNvciBhbmQgcmVjb3JkZXIuCiAKIGNvbmZpZyBLWFNEOQogCXRyaXN0YXRlICJLaW9uaXggS1hTRDkgQWNjZWxlcm9tZXRlciBEcml2ZXIiCkBAIC00Niw5ICs0Niw5IEBACiAJICBhbmQgYW4gZXZlbnQgaW50ZXJmYWNlIHZpYSBhIGNoYXJhY3RlciBkZXZpY2UuCiAKIGNvbmZpZyBTQ0EzMDAwCi0gICAgICAgZGVwZW5kcyBvbiBJSU9fUklOR19CVUZGRVIKLSAgICAgICBkZXBlbmRzIG9uIFNQSQotICAgICAgIHRyaXN0YXRlICJWVEkgU0NBMzAwMCBzZXJpZXMgYWNjZWxlcm9tZXRlcnMiCi0gICAgICAgaGVscAotICAgICAgICAgU2F5IHllcyBoZXJlIHRvIGJ1aWxkIHN1cHBvcnQgZm9yIHRoZSBWVEkgU0NBMzAwMCBzZXJpZXMgb2YgU1BJCi0JIGFjY2VsZXJvbWV0ZXJzLiBUaGVzZSBkZXZpY2VzIHVzZSBhIGhhcmR3YXJlIHJpbmcgYnVmZmVyLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKwlkZXBlbmRzIG9uIElJT19SSU5HX0JVRkZFUgorCWRlcGVuZHMgb24gU1BJCisJdHJpc3RhdGUgIlZUSSBTQ0EzMDAwIHNlcmllcyBhY2NlbGVyb21ldGVycyIKKwloZWxwCisJICBTYXkgeWVzIGhlcmUgdG8gYnVpbGQgc3VwcG9ydCBmb3IgdGhlIFZUSSBTQ0EzMDAwIHNlcmllcyBvZiBTUEkKKwkgIGFjY2VsZXJvbWV0ZXJzLiBUaGVzZSBkZXZpY2VzIHVzZSBhIGhhcmR3YXJlIHJpbmcgYnVmZmVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvTWFrZWZpbGUKaW5kZXggYzM0YjEzNi4uZmY4NDcwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL01ha2VmaWxlCkBAIC0xLDYgKzEsNyBAQAogIwogIyBNYWtlZmlsZSBmb3IgaW5kdXN0cmlhbCBJL08gYWNjZWxlcm9tZXRlciBkcml2ZXJzCiAjCisKIGFkaXMxNjIwOS15ICAgICAgICAgICAgIDo9IGFkaXMxNjIwOV9jb3JlLm8KIGFkaXMxNjIwOS0kKENPTkZJR19JSU9fUklOR19CVUZGRVIpICs9IGFkaXMxNjIwOV9yaW5nLm8gYWRpczE2MjA5X3RyaWdnZXIubwogb2JqLSQoQ09ORklHX0FESVMxNjIwOSkgKz0gYWRpczE2MjA5Lm8KQEAgLTE5LDQgKzIwLDQgQEAKIG9iai0kKENPTkZJR19MSVMzTDAyRFEpCSs9IGxpczNsMDJkcS5vCiAKIHNjYTMwMDAteQkJOj0gc2NhMzAwMF9jb3JlLm8gc2NhMzAwMF9yaW5nLm8KLW9iai0kKENPTkZJR19TQ0EzMDAwKQkrPSBzY2EzMDAwLm8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitvYmotJChDT05GSUdfU0NBMzAwMCkJKz0gc2NhMzAwMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwOS5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDkuaAppbmRleCA4NzdmZDJhLi40ZTk3NTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwOS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA5LmgKQEAgLTEwNSw4ICsxMDUsNiBAQAogICogc3RydWN0IGFkaXMxNjIwOV9zdGF0ZSAtIGRldmljZSBpbnN0YW5jZSBzcGVjaWZpYyBkYXRhCiAgKiBAdXM6CQkJYWN0dWFsIHNwaV9kZXZpY2UKICAqIEB3b3JrX3RyaWdnZXJfdG9fcmluZzogYmggZm9yIHRyaWdnZXJlZCBldmVudCBoYW5kbGluZwotICogQHdvcmtfY29udF90aHJlc2g6IENMRUFOCi0gKiBAaW50ZXI6CQl1c2VkIHRvIGNoZWNrIGlmIG5ldyBpbnRlcnJ1cHQgaGFzIGJlZW4gdHJpZ2dlcmVkCiAgKiBAbGFzdF90aW1lc3RhbXA6CXBhc3NpbmcgdGltZXN0YW1wIGZyb20gdGggdG8gYmggb2YgaW50ZXJydXB0IGhhbmRsZXIKICAqIEBpbmRpb19kZXY6CQlpbmR1c3RyaWFsIEkvTyBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAdHJpZzoJCWRhdGEgcmVhZHkgdHJpZ2dlciByZWdpc3RlcmVkIHdpdGggaWlvCkBAIC0xMTcsNyArMTE1LDYgQEAKIHN0cnVjdCBhZGlzMTYyMDlfc3RhdGUgewogCXN0cnVjdCBzcGlfZGV2aWNlCQkqdXM7CiAJc3RydWN0IHdvcmtfc3RydWN0CQl3b3JrX3RyaWdnZXJfdG9fcmluZzsKLQlzdHJ1Y3QgaWlvX3dvcmtfY29udAkJd29ya19jb250X3RocmVzaDsKIAlzNjQJCQkJbGFzdF90aW1lc3RhbXA7CiAJc3RydWN0IGlpb19kZXYJCQkqaW5kaW9fZGV2OwogCXN0cnVjdCBpaW9fdHJpZ2dlcgkJKnRyaWc7CkBAIC0xMjksMTYgKzEyNiwxNSBAQAogaW50IGFkaXMxNjIwOV9zZXRfaXJxKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBlbmFibGUpOwogCiAjaWZkZWYgQ09ORklHX0lJT19SSU5HX0JVRkZFUgotZW51bSBhZGlzMTYyMDlfc2NhbiB7Ci0JQURJUzE2MjA5X1NDQU5fU1VQUExZLAotCUFESVMxNjIwOV9TQ0FOX0FDQ19YLAotCUFESVMxNjIwOV9TQ0FOX0FDQ19ZLAotCUFESVMxNjIwOV9TQ0FOX0FVWF9BREMsCi0JQURJUzE2MjA5X1NDQU5fVEVNUCwKLQlBRElTMTYyMDlfU0NBTl9JTkNMSV9YLAotCUFESVMxNjIwOV9TQ0FOX0lOQ0xJX1ksCi0JQURJUzE2MjA5X1NDQU5fUk9ULAotfTsKKworI2RlZmluZSBBRElTMTYyMDlfU0NBTl9TVVBQTFkJMAorI2RlZmluZSBBRElTMTYyMDlfU0NBTl9BQ0NfWAkxCisjZGVmaW5lIEFESVMxNjIwOV9TQ0FOX0FDQ19ZCTIKKyNkZWZpbmUgQURJUzE2MjA5X1NDQU5fQVVYX0FEQwkzCisjZGVmaW5lIEFESVMxNjIwOV9TQ0FOX1RFTVAJNAorI2RlZmluZSBBRElTMTYyMDlfU0NBTl9JTkNMSV9YCTUKKyNkZWZpbmUgQURJUzE2MjA5X1NDQU5fSU5DTElfWQk2CisjZGVmaW5lIEFESVMxNjIwOV9TQ0FOX1JPVAk3CiAKIHZvaWQgYWRpczE2MjA5X3JlbW92ZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogaW50IGFkaXMxNjIwOV9wcm9iZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwpAQCAtMTUwLDggKzE0Niw2IEBACiBpbnQgYWRpczE2MjA5X2NvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogdm9pZCBhZGlzMTYyMDlfdW5jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKIAotaW50IGFkaXMxNjIwOV9pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyk7Ci12b2lkIGFkaXMxNjIwOV91bmluaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKTsKICNlbHNlIC8qIENPTkZJR19JSU9fUklOR19CVUZGRVIgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIGFkaXMxNjIwOV9yZW1vdmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQpAQCAtMTgwLDE0ICsxNzQsNSBAQAogewogfQogCi1zdGF0aWMgaW5saW5lIGludCBhZGlzMTYyMDlfaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGlzMTYyMDlfdW5pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKLXsKLX0KLQogI2VuZGlmIC8qIENPTkZJR19JSU9fUklOR19CVUZGRVIgKi8KICNlbmRpZiAvKiBTUElfQURJUzE2MjA5X0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwOV9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwOV9jb3JlLmMKaW5kZXggYWMzNzVjNS4uNmM2OTIzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDlfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA5X2NvcmUuYwpAQCAtMTQsMTIgKzE0LDEzIEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCiAjaW5jbHVkZSAiLi4vaWlvLmgiCiAjaW5jbHVkZSAiLi4vc3lzZnMuaCIKKyNpbmNsdWRlICIuLi9yaW5nX2dlbmVyaWMuaCIKICNpbmNsdWRlICJhY2NlbC5oIgogI2luY2x1ZGUgImluY2xpbm9tZXRlci5oIgogI2luY2x1ZGUgIi4uL2d5cm8vZ3lyby5oIgpAQCAtNzYsMTEgKzc3LDEzIEBACiAJCQkuYml0c19wZXJfd29yZCA9IDgsCiAJCQkubGVuID0gMiwKIAkJCS5jc19jaGFuZ2UgPSAxLAorCQkJLmRlbGF5X3VzZWNzID0gMzAsCiAJCX0sIHsKIAkJCS50eF9idWYgPSBzdC0+dHggKyAyLAogCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAogCQkJLmxlbiA9IDIsCiAJCQkuY3NfY2hhbmdlID0gMSwKKwkJCS5kZWxheV91c2VjcyA9IDMwLAogCQl9LAogCX07CiAKQEAgLTEyMCwxMyArMTIzLDEzIEBACiAJCQkuYml0c19wZXJfd29yZCA9IDgsCiAJCQkubGVuID0gMiwKIAkJCS5jc19jaGFuZ2UgPSAxLAotCQkJLmRlbGF5X3VzZWNzID0gMjAsCisJCQkuZGVsYXlfdXNlY3MgPSAzMCwKIAkJfSwgewogCQkJLnJ4X2J1ZiA9IHN0LT5yeCwKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAogCQkJLmNzX2NoYW5nZSA9IDEsCi0JCQkuZGVsYXlfdXNlY3MgPSAyMCwKKwkJCS5kZWxheV91c2VjcyA9IDMwLAogCQl9LAogCX07CiAKQEAgLTUxOCw3ICs1MjEsNyBAQAogCQlnb3RvIGVycm9yX3VucmVnX3JpbmdfZnVuY3M7CiAJcmVnZG9uZSA9IDE7CiAKLQlyZXQgPSBhZGlzMTYyMDlfaW5pdGlhbGl6ZV9yaW5nKHN0LT5pbmRpb19kZXYtPnJpbmcpOworCXJldCA9IGlpb19yaW5nX2J1ZmZlcl9yZWdpc3RlcihzdC0+aW5kaW9fZGV2LT5yaW5nLCAwKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIHJpbmdcbiIpOwogCQlnb3RvIGVycm9yX3VucmVnX3JpbmdfZnVuY3M7CkBAIC01NTAsNyArNTUzLDcgQEAKIAlpZiAoc3BpLT5pcnEpCiAJCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKHN0LT5pbmRpb19kZXYsIDApOwogZXJyb3JfdW5pbml0aWFsaXplX3Jpbmc6Ci0JYWRpczE2MjA5X3VuaW5pdGlhbGl6ZV9yaW5nKHN0LT5pbmRpb19kZXYtPnJpbmcpOworCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKHN0LT5pbmRpb19kZXYtPnJpbmcpOwogZXJyb3JfdW5yZWdfcmluZ19mdW5jczoKIAlhZGlzMTYyMDlfdW5jb25maWd1cmVfcmluZyhzdC0+aW5kaW9fZGV2KTsKIGVycm9yX2ZyZWVfZGV2OgpAQCAtNTc5LDcgKzU4Miw3IEBACiAJaWYgKHNwaS0+aXJxKQogCQlpaW9fdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShpbmRpb19kZXYsIDApOwogCi0JYWRpczE2MjA5X3VuaW5pdGlhbGl6ZV9yaW5nKGluZGlvX2Rldi0+cmluZyk7CisJaWlvX3JpbmdfYnVmZmVyX3VucmVnaXN0ZXIoaW5kaW9fZGV2LT5yaW5nKTsKIAlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoaW5kaW9fZGV2KTsKIAlhZGlzMTYyMDlfdW5jb25maWd1cmVfcmluZyhpbmRpb19kZXYpOwogCWtmcmVlKHN0LT50eCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwOV9yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwOV9yaW5nLmMKaW5kZXggNTMzZTI4NS4uMjVmZGU2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDlfcmluZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA5X3JpbmcuYwpAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCkBAIC0xNiwxNiArMTcsNiBAQAogI2luY2x1ZGUgIi4uL3RyaWdnZXIuaCIKICNpbmNsdWRlICJhZGlzMTYyMDkuaCIKIAotLyoqCi0gKiBjb21iaW5lXzhfdG9fMTYoKSB1dGlsaXR5IGZ1bmN0aW9uIHRvIG11bmdlIHRvIHU4cyBpbnRvIHUxNgotICoqLwotc3RhdGljIGlubGluZSB1MTYgY29tYmluZV84X3RvXzE2KHU4IGxvd2VyLCB1OCB1cHBlcikKLXsKLQl1MTYgX2xvd2VyID0gbG93ZXI7Ci0JdTE2IF91cHBlciA9IHVwcGVyOwotCXJldHVybiBfbG93ZXIgfCAoX3VwcGVyIDw8IDgpOwotfQotCiBzdGF0aWMgSUlPX1NDQU5fRUxfQyhzdXBwbHksIEFESVMxNjIwOV9TQ0FOX1NVUFBMWSwgSUlPX1VOU0lHTkVEKDE0KSwKIAkJICAgICBBRElTMTYyMDlfU1VQUExZX09VVCwgTlVMTCk7CiBzdGF0aWMgSUlPX1NDQU5fRUxfQyhhY2NlbF94LCBBRElTMTYyMDlfU0NBTl9BQ0NfWCwgSUlPX1NJR05FRCgxNCksCkBAIC02NywxMCArNTgsMTAgQEAKICAqIGFkaXMxNjIwOV9wb2xsX2Z1bmNfdGgoKSB0b3AgaGFsZiBpbnRlcnJ1cHQgaGFuZGxlciBjYWxsZWQgYnkgdHJpZ2dlcgogICogQHByaXZhdGVfZGF0YToJaWlvX2RldgogICoqLwotc3RhdGljIHZvaWQgYWRpczE2MjA5X3BvbGxfZnVuY190aChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQorc3RhdGljIHZvaWQgYWRpczE2MjA5X3BvbGxfZnVuY190aChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LCBzNjQgdGltZSkKIHsKIAlzdHJ1Y3QgYWRpczE2MjA5X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKLQlzdC0+bGFzdF90aW1lc3RhbXAgPSBpbmRpb19kZXYtPnRyaWctPnRpbWVzdGFtcDsKKwlzdC0+bGFzdF90aW1lc3RhbXAgPSB0aW1lOwogCXNjaGVkdWxlX3dvcmsoJnN0LT53b3JrX3RyaWdnZXJfdG9fcmluZyk7CiB9CiAKQEAgLTEzOCwxMCArMTI5LDkgQEAKIAogCWlmIChzdC0+aW5kaW9fZGV2LT5zY2FuX2NvdW50KQogCQlpZiAoYWRpczE2MjA5X3JlYWRfcmluZ19kYXRhKCZzdC0+aW5kaW9fZGV2LT5kZXYsIHN0LT5yeCkgPj0gMCkKLQkJCWZvciAoOyBpIDwgc3QtPmluZGlvX2Rldi0+c2Nhbl9jb3VudDsgaSsrKSB7Ci0JCQkJZGF0YVtpXSA9IGNvbWJpbmVfOF90b18xNihzdC0+cnhbaSoyKzFdLAotCQkJCQkJCSAgc3QtPnJ4W2kqMl0pOwotCQkJfQorCQkJZm9yICg7IGkgPCBzdC0+aW5kaW9fZGV2LT5zY2FuX2NvdW50OyBpKyspCisJCQkJZGF0YVtpXSA9IGJlMTZfdG9fY3B1cCgKKwkJCQkJKF9fYmUxNiAqKSYoc3QtPnJ4W2kqMl0pKTsKIAogCS8qIEd1YXJhbnRlZWQgdG8gYmUgYWxpZ25lZCB3aXRoIDggYnl0ZSBib3VuZGFyeSAqLwogCWlmIChzdC0+aW5kaW9fZGV2LT5zY2FuX3RpbWVzdGFtcCkKQEAgLTE1Nyw1MCArMTQ3LDYgQEAKIAlyZXR1cm47CiB9CiAKLS8qIGluIHRoZXNlIGNpcmN1bXN0YW5jZXMgaXMgaXQgYmV0dGVyIHRvIGdvIHdpdGggdW5hbGlnbmVkIHBhY2tpbmcgYW5kCi0gKiBkZWFsIHdpdGggdGhlIGNvc3Q/Ki8KLXN0YXRpYyBpbnQgYWRpczE2MjA5X2RhdGFfcmR5X3JpbmdfcHJlZW5hYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCi17Ci0Jc2l6ZV90IHNpemU7Ci0JZGV2X2RiZygmaW5kaW9fZGV2LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOwotCS8qIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2NhbiBlbGVtZW50cyBlbmFibGVkLCBpZiBub3QgZmFpbCovCi0JaWYgKCEoaW5kaW9fZGV2LT5zY2FuX2NvdW50IHx8IGluZGlvX2Rldi0+c2Nhbl90aW1lc3RhbXApKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChpbmRpb19kZXYtPnJpbmctPmFjY2Vzcy5zZXRfYnBkKSB7Ci0JCWlmIChpbmRpb19kZXYtPnNjYW5fdGltZXN0YW1wKQotCQkJaWYgKGluZGlvX2Rldi0+c2Nhbl9jb3VudCkKLQkJCQkvKiBUaW1lc3RhbXAgKGFsaWduZWQgdG8gczY0KSBhbmQgZGF0YSAqLwotCQkJCXNpemUgPSAoKChpbmRpb19kZXYtPnNjYW5fY291bnQgKiBzaXplb2YoczE2KSkKLQkJCQkJICsgc2l6ZW9mKHM2NCkgLSAxKQotCQkJCQkmIH4oc2l6ZW9mKHM2NCkgLSAxKSkKLQkJCQkJKyBzaXplb2YoczY0KTsKLQkJCWVsc2UgLyogVGltZXN0YW1wIG9ubHkgICovCi0JCQkJc2l6ZSA9IHNpemVvZihzNjQpOwotCQllbHNlIC8qIERhdGEgb25seSAqLwotCQkJc2l6ZSA9IGluZGlvX2Rldi0+c2Nhbl9jb3VudCpzaXplb2YoczE2KTsKLQkJaW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3Muc2V0X2JwZChpbmRpb19kZXYtPnJpbmcsIHNpemUpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFkaXMxNjIwOV9kYXRhX3JkeV9yaW5nX3Bvc3RlbmFibGUoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKLXsKLQlyZXR1cm4gaW5kaW9fZGV2LT50cmlnCi0JCT8gaWlvX3RyaWdnZXJfYXR0YWNoX3BvbGxfZnVuYyhpbmRpb19kZXYtPnRyaWcsCi0JCQkJCSAgICAgICBpbmRpb19kZXYtPnBvbGxmdW5jKQotCQk6IDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWRpczE2MjA5X2RhdGFfcmR5X3JpbmdfcHJlZGlzYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotCXJldHVybiBpbmRpb19kZXYtPnRyaWcKLQkJPyBpaW9fdHJpZ2dlcl9kZXR0YWNoX3BvbGxfZnVuYyhpbmRpb19kZXYtPnRyaWcsCi0JCQkJCQlpbmRpb19kZXYtPnBvbGxmdW5jKQotCQk6IDA7Ci19Ci0KIHZvaWQgYWRpczE2MjA5X3VuY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlrZnJlZShpbmRpb19kZXYtPnBvbGxmdW5jKTsKQEAgLTIzNSwxOCArMTgxLDE2IEBACiAJaW5kaW9fZGV2LT5yaW5nID0gcmluZzsKIAkvKiBFZmZlY3RpdmVseSBzZWxlY3QgdGhlIHJpbmcgYnVmZmVyIGltcGxlbWVudGF0aW9uICovCiAJaWlvX3Jpbmdfc3dfcmVnaXN0ZXJfZnVuY3MoJnJpbmctPmFjY2Vzcyk7Ci0JcmluZy0+cHJlZW5hYmxlID0gJmFkaXMxNjIwOV9kYXRhX3JkeV9yaW5nX3ByZWVuYWJsZTsKLQlyaW5nLT5wb3N0ZW5hYmxlID0gJmFkaXMxNjIwOV9kYXRhX3JkeV9yaW5nX3Bvc3RlbmFibGU7Ci0JcmluZy0+cHJlZGlzYWJsZSA9ICZhZGlzMTYyMDlfZGF0YV9yZHlfcmluZ19wcmVkaXNhYmxlOworCXJpbmctPmJwZSA9IDI7CisJcmluZy0+cHJlZW5hYmxlID0gJmlpb19zd19yaW5nX3ByZWVuYWJsZTsKKwlyaW5nLT5wb3N0ZW5hYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wb3N0ZW5hYmxlOworCXJpbmctPnByZWRpc2FibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3ByZWRpc2FibGU7CiAJcmluZy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAotCWluZGlvX2Rldi0+cG9sbGZ1bmMgPSBremFsbG9jKHNpemVvZigqaW5kaW9fZGV2LT5wb2xsZnVuYyksIEdGUF9LRVJORUwpOwotCWlmIChpbmRpb19kZXYtPnBvbGxmdW5jID09IE5VTEwpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9paW9fc3dfcmJfZnJlZTs7Ci0JfQotCWluZGlvX2Rldi0+cG9sbGZ1bmMtPnBvbGxfZnVuY19tYWluID0gJmFkaXMxNjIwOV9wb2xsX2Z1bmNfdGg7Ci0JaW5kaW9fZGV2LT5wb2xsZnVuYy0+cHJpdmF0ZV9kYXRhID0gaW5kaW9fZGV2OworCXJldCA9IGlpb19hbGxvY19wb2xsZnVuYyhpbmRpb19kZXYsIE5VTEwsICZhZGlzMTYyMDlfcG9sbF9mdW5jX3RoKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX2lpb19zd19yYl9mcmVlOworCiAJaW5kaW9fZGV2LT5tb2RlcyB8PSBJTkRJT19SSU5HX1RSSUdHRVJFRDsKIAlyZXR1cm4gMDsKIApAQCAtMjU0LDEzICsxOTgsMyBAQAogCWlpb19zd19yYl9mcmVlKGluZGlvX2Rldi0+cmluZyk7CiAJcmV0dXJuIHJldDsKIH0KLQotaW50IGFkaXMxNjIwOV9pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKLXsKLQlyZXR1cm4gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyKHJpbmcsIDApOwotfQotCi12b2lkIGFkaXMxNjIwOV91bmluaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKQotewotCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKHJpbmcpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDlfdHJpZ2dlci5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDlfdHJpZ2dlci5jCmluZGV4IDRhMDUwN2MuLjE0ODdlZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA5X3RyaWdnZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwOV90cmlnZ2VyLmMKQEAgLTIzLDggKzIzLDcgQEAKIAlzdHJ1Y3QgYWRpczE2MjA5X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoZGV2X2luZm8pOwogCXN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZyA9IHN0LT50cmlnOwogCi0JdHJpZy0+dGltZXN0YW1wID0gdGltZXN0YW1wOwotCWlpb190cmlnZ2VyX3BvbGwodHJpZyk7CisJaWlvX3RyaWdnZXJfcG9sbCh0cmlnLCB0aW1lc3RhbXApOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtODMsMTQgKzgyLDEzIEBACiAJc3RydWN0IGFkaXMxNjIwOV9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwogCiAJc3QtPnRyaWcgPSBpaW9fYWxsb2NhdGVfdHJpZ2dlcigpOwotCXN0LT50cmlnLT5uYW1lID0ga21hbGxvYyhJSU9fVFJJR0dFUl9OQU1FX0xFTkdUSCwgR0ZQX0tFUk5FTCk7CisJc3QtPnRyaWctPm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwKKwkJCQkgICAiYWRpczE2MjA5LWRldiVkIiwKKwkJCQkgICBpbmRpb19kZXYtPmlkKTsKIAlpZiAoIXN0LT50cmlnLT5uYW1lKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfZnJlZV90cmlnOwogCX0KLQlzbnByaW50ZigoY2hhciAqKXN0LT50cmlnLT5uYW1lLAotCQkgSUlPX1RSSUdHRVJfTkFNRV9MRU5HVEgsCi0JCSAiYWRpczE2MjA5LWRldiVkIiwgaW5kaW9fZGV2LT5pZCk7CiAJc3QtPnRyaWctPmRldi5wYXJlbnQgPSAmc3QtPnVzLT5kZXY7CiAJc3QtPnRyaWctPm93bmVyID0gVEhJU19NT0RVTEU7CiAJc3QtPnRyaWctPnByaXZhdGVfZGF0YSA9IHN0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMjAuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjIwLmgKaW5kZXggMmFiZjQ4NS4uNzAxMzMxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMjAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIyMC5oCkBAIC0xMjcsNyArMTI3LDYgQEAKICAqIHN0cnVjdCBhZGlzMTYyMjBfc3RhdGUgLSBkZXZpY2UgaW5zdGFuY2Ugc3BlY2lmaWMgZGF0YQogICogQHVzOgkJCWFjdHVhbCBzcGlfZGV2aWNlCiAgKiBAd29ya190cmlnZ2VyX3RvX3Jpbmc6IGJoIGZvciB0cmlnZ2VyZWQgZXZlbnQgaGFuZGxpbmcKLSAqIEB3b3JrX2NvbnRfdGhyZXNoOiBDTEVBTgogICogQGludGVyOgkJdXNlZCB0byBjaGVjayBpZiBuZXcgaW50ZXJydXB0IGhhcyBiZWVuIHRyaWdnZXJlZAogICogQGxhc3RfdGltZXN0YW1wOglwYXNzaW5nIHRpbWVzdGFtcCBmcm9tIHRoIHRvIGJoIG9mIGludGVycnVwdCBoYW5kbGVyCiAgKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMjBfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMjBfY29yZS5jCmluZGV4IDZkZTQzOWYuLmJiN2Q3NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjIwX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIyMF9jb3JlLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKQEAgLTcyLDEzICs3MiwxMyBAQAogCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAogCQkJLmxlbiA9IDIsCiAJCQkuY3NfY2hhbmdlID0gMSwKLQkJCS5kZWxheV91c2VjcyA9IDI1LAorCQkJLmRlbGF5X3VzZWNzID0gMzUsCiAJCX0sIHsKIAkJCS50eF9idWYgPSBzdC0+dHggKyAyLAogCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAogCQkJLmxlbiA9IDIsCiAJCQkuY3NfY2hhbmdlID0gMSwKLQkJCS5kZWxheV91c2VjcyA9IDI1LAorCQkJLmRlbGF5X3VzZWNzID0gMzUsCiAJCX0sCiAJfTsKIApAQCAtMTE4LDEzICsxMTgsMTMgQEAKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAogCQkJLmNzX2NoYW5nZSA9IDEsCi0JCQkuZGVsYXlfdXNlY3MgPSAyNSwKKwkJCS5kZWxheV91c2VjcyA9IDM1LAogCQl9LCB7CiAJCQkucnhfYnVmID0gc3QtPnJ4LAogCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAogCQkJLmxlbiA9IDIsCiAJCQkuY3NfY2hhbmdlID0gMSwKLQkJCS5kZWxheV91c2VjcyA9IDI1LAorCQkJLmRlbGF5X3VzZWNzID0gMzUsCiAJCX0sCiAJfTsKIApAQCAtMjkxLDkgKzI5MSw5IEBACiAJaWYgKHN0YXR1cyAmIEFESVMxNjIyMF9ESUFHX1NUQVRfRkxBU0hfVVBUKQogCQlkZXZfZXJyKGRldiwgIkZsYXNoIHVwZGF0ZSBmYWlsZWRcbiIpOwogCWlmIChzdGF0dXMgJiBBRElTMTYyMjBfRElBR19TVEFUX1BPV0VSX0hJR0gpCi0JCWRldl9lcnIoZGV2LCAiUG93ZXIgc3VwcGx5IGFib3ZlIDUuMjVWXG4iKTsKKwkJZGV2X2VycihkZXYsICJQb3dlciBzdXBwbHkgYWJvdmUgMy42MjVWXG4iKTsKIAlpZiAoc3RhdHVzICYgQURJUzE2MjIwX0RJQUdfU1RBVF9QT1dFUl9MT1cpCi0JCWRldl9lcnIoZGV2LCAiUG93ZXIgc3VwcGx5IGJlbG93IDQuNzVWXG4iKTsKKwkJZGV2X2VycihkZXYsICJQb3dlciBzdXBwbHkgYmVsb3cgMy4xNVZcbiIpOwogCiBlcnJvcl9yZXQ6CiAJcmV0dXJuIHJldDsKQEAgLTQxNCw3ICs0MTQsNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHNzaXplX3QgYWRpczE2MjIwX2FjY2VsX2Jpbl9yZWFkKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorc3RhdGljIHNzaXplX3QgYWRpczE2MjIwX2FjY2VsX2Jpbl9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJCQkJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJCWNoYXIgKmJ1ZiwKIAkJCQkJbG9mZl90IG9mZiwKQEAgLTQzOCw3ICs0MzgsNyBAQAogCS5zaXplID0gQURJUzE2MjIwX0NBUFRVUkVfU0laRSwKIH07CiAKLXN0YXRpYyBzc2l6ZV90IGFkaXMxNjIyMF9hZGMxX2Jpbl9yZWFkKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorc3RhdGljIHNzaXplX3QgYWRpczE2MjIwX2FkYzFfYmluX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkJCXN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLAogCQkJCWNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwKIAkJCQlzaXplX3QgY291bnQpCkBAIC00NjEsNyArNDYxLDcgQEAKIAkuc2l6ZSA9IEFESVMxNjIyMF9DQVBUVVJFX1NJWkUsCiB9OwogCi1zdGF0aWMgc3NpemVfdCBhZGlzMTYyMjBfYWRjMl9iaW5fcmVhZChzdHJ1Y3Qga29iamVjdCAqa29iaiwKK3N0YXRpYyBzc2l6ZV90IGFkaXMxNjIyMF9hZGMyX2Jpbl9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJCQlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQljaGFyICpidWYsIGxvZmZfdCBvZmYsCiAJCQkJc2l6ZV90IGNvdW50KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyNDAuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjQwLmgKaW5kZXggZGNmZjQzYy4uNTFhODA3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyNDAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjI0MC5oCkBAIC0xMjcsNyArMTI3LDYgQEAKICAqIHN0cnVjdCBhZGlzMTYyNDBfc3RhdGUgLSBkZXZpY2UgaW5zdGFuY2Ugc3BlY2lmaWMgZGF0YQogICogQHVzOgkJCWFjdHVhbCBzcGlfZGV2aWNlCiAgKiBAd29ya190cmlnZ2VyX3RvX3Jpbmc6IGJoIGZvciB0cmlnZ2VyZWQgZXZlbnQgaGFuZGxpbmcKLSAqIEB3b3JrX2NvbnRfdGhyZXNoOiBDTEVBTgogICogQGludGVyOgkJdXNlZCB0byBjaGVjayBpZiBuZXcgaW50ZXJydXB0IGhhcyBiZWVuIHRyaWdnZXJlZAogICogQGxhc3RfdGltZXN0YW1wOglwYXNzaW5nIHRpbWVzdGFtcCBmcm9tIHRoIHRvIGJoIG9mIGludGVycnVwdCBoYW5kbGVyCiAgKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQpAQCAtMTM5LDcgKzEzOCw2IEBACiBzdHJ1Y3QgYWRpczE2MjQwX3N0YXRlIHsKIAlzdHJ1Y3Qgc3BpX2RldmljZQkJKnVzOwogCXN0cnVjdCB3b3JrX3N0cnVjdAkJd29ya190cmlnZ2VyX3RvX3Jpbmc7Ci0Jc3RydWN0IGlpb193b3JrX2NvbnQJCXdvcmtfY29udF90aHJlc2g7CiAJczY0CQkJCWxhc3RfdGltZXN0YW1wOwogCXN0cnVjdCBpaW9fZGV2CQkJKmluZGlvX2RldjsKIAlzdHJ1Y3QgaWlvX3RyaWdnZXIJCSp0cmlnOwpAQCAtMTU1LDE0ICsxNTMsMTIgQEAKICAqIGZpbGxpbmcuIFRoaXMgbWF5IGNoYW5nZSEKICAqLwogCi1lbnVtIGFkaXMxNjI0MF9zY2FuIHsKLQlBRElTMTYyNDBfU0NBTl9TVVBQTFksCi0JQURJUzE2MjQwX1NDQU5fQUNDX1gsCi0JQURJUzE2MjQwX1NDQU5fQUNDX1ksCi0JQURJUzE2MjQwX1NDQU5fQUNDX1osCi0JQURJUzE2MjQwX1NDQU5fQVVYX0FEQywKLQlBRElTMTYyNDBfU0NBTl9URU1QLAotfTsKKyNkZWZpbmUgQURJUzE2MjQwX1NDQU5fU1VQUExZCTAKKyNkZWZpbmUgQURJUzE2MjQwX1NDQU5fQUNDX1gJMQorI2RlZmluZSBBRElTMTYyNDBfU0NBTl9BQ0NfWQkyCisjZGVmaW5lIEFESVMxNjI0MF9TQ0FOX0FDQ19aCTMKKyNkZWZpbmUgQURJUzE2MjQwX1NDQU5fQVVYX0FEQwk0CisjZGVmaW5lIEFESVMxNjI0MF9TQ0FOX1RFTVAJNQogCiB2b2lkIGFkaXMxNjI0MF9yZW1vdmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKIGludCBhZGlzMTYyNDBfcHJvYmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKQEAgLTE3NSw4ICsxNzEsNiBAQAogaW50IGFkaXMxNjI0MF9jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKIHZvaWQgYWRpczE2MjQwX3VuY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CiAKLWludCBhZGlzMTYyNDBfaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpOwotdm9pZCBhZGlzMTYyNDBfdW5pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyk7CiAjZWxzZSAvKiBDT05GSUdfSUlPX1JJTkdfQlVGRkVSICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGlzMTYyNDBfcmVtb3ZlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKQEAgLTIwNSwxNCArMTk5LDUgQEAKIHsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYWRpczE2MjQwX2luaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRpczE2MjQwX3VuaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpCi17Ci19Ci0KICNlbmRpZiAvKiBDT05GSUdfSUlPX1JJTkdfQlVGRkVSICovCiAjZW5kaWYgLyogU1BJX0FESVMxNjI0MF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyNDBfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyNDBfY29yZS5jCmluZGV4IDU0ZmQ2ZDcuLjNlOTUzMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjQwX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjI0MF9jb3JlLmMKQEAgLTE0LDEyICsxNCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLQorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAogI2luY2x1ZGUgIi4uL2lpby5oIgogI2luY2x1ZGUgIi4uL3N5c2ZzLmgiCisjaW5jbHVkZSAiLi4vcmluZ19nZW5lcmljLmgiCiAjaW5jbHVkZSAiYWNjZWwuaCIKICNpbmNsdWRlICIuLi9hZGMvYWRjLmgiCiAKQEAgLTc0LDEzICs3NSwxMyBAQAogCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAogCQkJLmxlbiA9IDIsCiAJCQkuY3NfY2hhbmdlID0gMSwKLQkJCS5kZWxheV91c2VjcyA9IDI1LAorCQkJLmRlbGF5X3VzZWNzID0gMzUsCiAJCX0sIHsKIAkJCS50eF9idWYgPSBzdC0+dHggKyAyLAogCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAogCQkJLmxlbiA9IDIsCiAJCQkuY3NfY2hhbmdlID0gMSwKLQkJCS5kZWxheV91c2VjcyA9IDI1LAorCQkJLmRlbGF5X3VzZWNzID0gMzUsCiAJCX0sCiAJfTsKIApAQCAtMTIwLDEzICsxMjEsMTMgQEAKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAogCQkJLmNzX2NoYW5nZSA9IDEsCi0JCQkuZGVsYXlfdXNlY3MgPSAyNSwKKwkJCS5kZWxheV91c2VjcyA9IDM1LAogCQl9LCB7CiAJCQkucnhfYnVmID0gc3QtPnJ4LAogCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAogCQkJLmxlbiA9IDIsCiAJCQkuY3NfY2hhbmdlID0gMSwKLQkJCS5kZWxheV91c2VjcyA9IDI1LAorCQkJLmRlbGF5X3VzZWNzID0gMzUsCiAJCX0sCiAJfTsKIApAQCAtNTAyLDcgKzUwMyw3IEBACiAJCWdvdG8gZXJyb3JfdW5yZWdfcmluZ19mdW5jczsKIAlyZWdkb25lID0gMTsKIAotCXJldCA9IGFkaXMxNjI0MF9pbml0aWFsaXplX3Jpbmcoc3QtPmluZGlvX2Rldi0+cmluZyk7CisJcmV0ID0gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyKHN0LT5pbmRpb19kZXYtPnJpbmcsIDApOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcmluZ1xuIik7CiAJCWdvdG8gZXJyb3JfdW5yZWdfcmluZ19mdW5jczsKQEAgLTUzNCw3ICs1MzUsNyBAQAogCWlmIChzcGktPmlycSkKIAkJaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoc3QtPmluZGlvX2RldiwgMCk7CiBlcnJvcl91bmluaXRpYWxpemVfcmluZzoKLQlhZGlzMTYyNDBfdW5pbml0aWFsaXplX3Jpbmcoc3QtPmluZGlvX2Rldi0+cmluZyk7CisJaWlvX3JpbmdfYnVmZmVyX3VucmVnaXN0ZXIoc3QtPmluZGlvX2Rldi0+cmluZyk7CiBlcnJvcl91bnJlZ19yaW5nX2Z1bmNzOgogCWFkaXMxNjI0MF91bmNvbmZpZ3VyZV9yaW5nKHN0LT5pbmRpb19kZXYpOwogZXJyb3JfZnJlZV9kZXY6CkBAIC01NjMsNyArNTY0LDcgQEAKIAlpZiAoc3BpLT5pcnEpCiAJCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKGluZGlvX2RldiwgMCk7CiAKLQlhZGlzMTYyNDBfdW5pbml0aWFsaXplX3JpbmcoaW5kaW9fZGV2LT5yaW5nKTsKKwlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihpbmRpb19kZXYtPnJpbmcpOwogCWlpb19kZXZpY2VfdW5yZWdpc3RlcihpbmRpb19kZXYpOwogCWFkaXMxNjI0MF91bmNvbmZpZ3VyZV9yaW5nKGluZGlvX2Rldik7CiAJa2ZyZWUoc3QtPnR4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjQwX3JpbmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjQwX3JpbmcuYwppbmRleCAyNmI2NzdiLi5jZDY5YTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjI0MF9yaW5nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyNDBfcmluZy5jCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKQEAgLTE2LDE2ICsxNyw2IEBACiAjaW5jbHVkZSAiLi4vdHJpZ2dlci5oIgogI2luY2x1ZGUgImFkaXMxNjI0MC5oIgogCi0vKioKLSAqIGNvbWJpbmVfOF90b18xNigpIHV0aWxpdHkgZnVuY3Rpb24gdG8gbXVuZ2UgdG8gdThzIGludG8gdTE2Ci0gKiovCi1zdGF0aWMgaW5saW5lIHUxNiBjb21iaW5lXzhfdG9fMTYodTggbG93ZXIsIHU4IHVwcGVyKQotewotCXUxNiBfbG93ZXIgPSBsb3dlcjsKLQl1MTYgX3VwcGVyID0gdXBwZXI7Ci0JcmV0dXJuIF9sb3dlciB8IChfdXBwZXIgPDwgOCk7Ci19Ci0KIHN0YXRpYyBJSU9fU0NBTl9FTF9DKHN1cHBseSwgQURJUzE2MjQwX1NDQU5fU1VQUExZLCBJSU9fVU5TSUdORUQoMTApLAogCQlBRElTMTYyNDBfU1VQUExZX09VVCwgTlVMTCk7CiBzdGF0aWMgSUlPX1NDQU5fRUxfQyhhY2NlbF94LCBBRElTMTYyNDBfU0NBTl9BQ0NfWCwgSUlPX1NJR05FRCgxMCksCkBAIC02MSwxMCArNTIsMTAgQEAKICAqIGFkaXMxNjI0MF9wb2xsX2Z1bmNfdGgoKSB0b3AgaGFsZiBpbnRlcnJ1cHQgaGFuZGxlciBjYWxsZWQgYnkgdHJpZ2dlcgogICogQHByaXZhdGVfZGF0YToJaWlvX2RldgogICoqLwotc3RhdGljIHZvaWQgYWRpczE2MjQwX3BvbGxfZnVuY190aChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQorc3RhdGljIHZvaWQgYWRpczE2MjQwX3BvbGxfZnVuY190aChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LCBzNjQgdGltZSkKIHsKIAlzdHJ1Y3QgYWRpczE2MjQwX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKLQlzdC0+bGFzdF90aW1lc3RhbXAgPSBpbmRpb19kZXYtPnRyaWctPnRpbWVzdGFtcDsKKwlzdC0+bGFzdF90aW1lc3RhbXAgPSB0aW1lOwogCXNjaGVkdWxlX3dvcmsoJnN0LT53b3JrX3RyaWdnZXJfdG9fcmluZyk7CiB9CiAKQEAgLTEzMCwxMCArMTIxLDkgQEAKIAogCWlmIChzdC0+aW5kaW9fZGV2LT5zY2FuX2NvdW50KQogCQlpZiAoYWRpczE2MjQwX3JlYWRfcmluZ19kYXRhKCZzdC0+aW5kaW9fZGV2LT5kZXYsIHN0LT5yeCkgPj0gMCkKLQkJCWZvciAoOyBpIDwgc3QtPmluZGlvX2Rldi0+c2Nhbl9jb3VudDsgaSsrKSB7Ci0JCQkJZGF0YVtpXSA9IGNvbWJpbmVfOF90b18xNihzdC0+cnhbaSoyKzFdLAotCQkJCQkJc3QtPnJ4W2kqMl0pOwotCQkJfQorCQkJZm9yICg7IGkgPCBzdC0+aW5kaW9fZGV2LT5zY2FuX2NvdW50OyBpKyspCisJCQkJZGF0YVtpXSA9IGJlMTZfdG9fY3B1cCgKKwkJCQkJKF9fYmUxNiAqKSYoc3QtPnJ4W2kqMl0pKTsKIAogCS8qIEd1YXJhbnRlZWQgdG8gYmUgYWxpZ25lZCB3aXRoIDggYnl0ZSBib3VuZGFyeSAqLwogCWlmIChzdC0+aW5kaW9fZGV2LT5zY2FuX3RpbWVzdGFtcCkKQEAgLTE0OSw0OCArMTM5LDYgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBpbnQgYWRpczE2MjQwX2RhdGFfcmR5X3JpbmdfcHJlZW5hYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCi17Ci0Jc2l6ZV90IHNpemU7Ci0JZGV2X2RiZygmaW5kaW9fZGV2LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOwotCS8qIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2NhbiBlbGVtZW50cyBlbmFibGVkLCBpZiBub3QgZmFpbCovCi0JaWYgKCEoaW5kaW9fZGV2LT5zY2FuX2NvdW50IHx8IGluZGlvX2Rldi0+c2Nhbl90aW1lc3RhbXApKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChpbmRpb19kZXYtPnJpbmctPmFjY2Vzcy5zZXRfYnBkKSB7Ci0JCWlmIChpbmRpb19kZXYtPnNjYW5fdGltZXN0YW1wKQotCQkJaWYgKGluZGlvX2Rldi0+c2Nhbl9jb3VudCkKLQkJCQkvKiBUaW1lc3RhbXAgKGFsaWduZWQgc2l6ZW9mKHM2NCkgYW5kIGRhdGEgKi8KLQkJCQlzaXplID0gKCgoaW5kaW9fZGV2LT5zY2FuX2NvdW50ICogc2l6ZW9mKHMxNikpCi0JCQkJCSArIHNpemVvZihzNjQpIC0gMSkKLQkJCQkJJiB+KHNpemVvZihzNjQpIC0gMSkpCi0JCQkJCSsgc2l6ZW9mKHM2NCk7Ci0JCQllbHNlIC8qIFRpbWVzdGFtcCBvbmx5ICAqLwotCQkJCXNpemUgPSBzaXplb2YoczY0KTsKLQkJZWxzZSAvKiBEYXRhIG9ubHkgKi8KLQkJCXNpemUgPSBpbmRpb19kZXYtPnNjYW5fY291bnQqc2l6ZW9mKHMxNik7Ci0JCWluZGlvX2Rldi0+cmluZy0+YWNjZXNzLnNldF9icGQoaW5kaW9fZGV2LT5yaW5nLCBzaXplKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZGlzMTYyNDBfZGF0YV9yZHlfcmluZ19wb3N0ZW5hYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCi17Ci0JcmV0dXJuIGluZGlvX2Rldi0+dHJpZwotCQk/IGlpb190cmlnZ2VyX2F0dGFjaF9wb2xsX2Z1bmMoaW5kaW9fZGV2LT50cmlnLAotCQkJCWluZGlvX2Rldi0+cG9sbGZ1bmMpCi0JCTogMDsKLX0KLQotc3RhdGljIGludCBhZGlzMTYyNDBfZGF0YV9yZHlfcmluZ19wcmVkaXNhYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCi17Ci0JcmV0dXJuIGluZGlvX2Rldi0+dHJpZwotCQk/IGlpb190cmlnZ2VyX2RldHRhY2hfcG9sbF9mdW5jKGluZGlvX2Rldi0+dHJpZywKLQkJCQlpbmRpb19kZXYtPnBvbGxmdW5jKQotCQk6IDA7Ci19Ci0KIHZvaWQgYWRpczE2MjQwX3VuY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlrZnJlZShpbmRpb19kZXYtPnBvbGxmdW5jKTsKQEAgLTIyMywxOCArMTcxLDE2IEBACiAJaW5kaW9fZGV2LT5yaW5nID0gcmluZzsKIAkvKiBFZmZlY3RpdmVseSBzZWxlY3QgdGhlIHJpbmcgYnVmZmVyIGltcGxlbWVudGF0aW9uICovCiAJaWlvX3Jpbmdfc3dfcmVnaXN0ZXJfZnVuY3MoJnJpbmctPmFjY2Vzcyk7Ci0JcmluZy0+cHJlZW5hYmxlID0gJmFkaXMxNjI0MF9kYXRhX3JkeV9yaW5nX3ByZWVuYWJsZTsKLQlyaW5nLT5wb3N0ZW5hYmxlID0gJmFkaXMxNjI0MF9kYXRhX3JkeV9yaW5nX3Bvc3RlbmFibGU7Ci0JcmluZy0+cHJlZGlzYWJsZSA9ICZhZGlzMTYyNDBfZGF0YV9yZHlfcmluZ19wcmVkaXNhYmxlOworCXJpbmctPmJwZSA9IDI7CisJcmluZy0+cHJlZW5hYmxlID0gJmlpb19zd19yaW5nX3ByZWVuYWJsZTsKKwlyaW5nLT5wb3N0ZW5hYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wb3N0ZW5hYmxlOworCXJpbmctPnByZWRpc2FibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3ByZWRpc2FibGU7CiAJcmluZy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAotCWluZGlvX2Rldi0+cG9sbGZ1bmMgPSBremFsbG9jKHNpemVvZigqaW5kaW9fZGV2LT5wb2xsZnVuYyksIEdGUF9LRVJORUwpOwotCWlmIChpbmRpb19kZXYtPnBvbGxmdW5jID09IE5VTEwpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9paW9fc3dfcmJfZnJlZTs7Ci0JfQotCWluZGlvX2Rldi0+cG9sbGZ1bmMtPnBvbGxfZnVuY19tYWluID0gJmFkaXMxNjI0MF9wb2xsX2Z1bmNfdGg7Ci0JaW5kaW9fZGV2LT5wb2xsZnVuYy0+cHJpdmF0ZV9kYXRhID0gaW5kaW9fZGV2OworCXJldCA9IGlpb19hbGxvY19wb2xsZnVuYyhpbmRpb19kZXYsIE5VTEwsICZhZGlzMTYyNDBfcG9sbF9mdW5jX3RoKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX2lpb19zd19yYl9mcmVlOworCiAJaW5kaW9fZGV2LT5tb2RlcyB8PSBJTkRJT19SSU5HX1RSSUdHRVJFRDsKIAlyZXR1cm4gMDsKIApAQCAtMjQzLDEyICsxODksMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBhZGlzMTYyNDBfaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpCi17Ci0JcmV0dXJuIGlpb19yaW5nX2J1ZmZlcl9yZWdpc3RlcihyaW5nLCAwKTsKLX0KLQotdm9pZCBhZGlzMTYyNDBfdW5pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKLXsKLQlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihyaW5nKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjQwX3RyaWdnZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjQwX3RyaWdnZXIuYwppbmRleCBkZjEzMTJlLi4yYmE3MWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjI0MF90cmlnZ2VyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyNDBfdHJpZ2dlci5jCkBAIC0yMyw4ICsyMyw3IEBACiAJc3RydWN0IGFkaXMxNjI0MF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGRldl9pbmZvKTsKIAlzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcgPSBzdC0+dHJpZzsKIAotCXRyaWctPnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKLQlpaW9fdHJpZ2dlcl9wb2xsKHRyaWcpOworCWlpb190cmlnZ2VyX3BvbGwodHJpZywgdGltZXN0YW1wKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTgzLDE0ICs4MiwxMyBAQAogCXN0cnVjdCBhZGlzMTYyNDBfc3RhdGUgKnN0ID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKIAogCXN0LT50cmlnID0gaWlvX2FsbG9jYXRlX3RyaWdnZXIoKTsKLQlzdC0+dHJpZy0+bmFtZSA9IGttYWxsb2MoSUlPX1RSSUdHRVJfTkFNRV9MRU5HVEgsIEdGUF9LRVJORUwpOworCXN0LT50cmlnLT5uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsCisJCQkJICAgImFkaXMxNjI0MC1kZXYlZCIsCisJCQkJICAgaW5kaW9fZGV2LT5pZCk7CiAJaWYgKCFzdC0+dHJpZy0+bmFtZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX2ZyZWVfdHJpZzsKIAl9Ci0Jc25wcmludGYoKGNoYXIgKilzdC0+dHJpZy0+bmFtZSwKLQkJIElJT19UUklHR0VSX05BTUVfTEVOR1RILAotCQkgImFkaXMxNjI0MC1kZXYlZCIsIGluZGlvX2Rldi0+aWQpOwogCXN0LT50cmlnLT5kZXYucGFyZW50ID0gJnN0LT51cy0+ZGV2OwogCXN0LT50cmlnLT5vd25lciA9IFRISVNfTU9EVUxFOwogCXN0LT50cmlnLT5wcml2YXRlX2RhdGEgPSBzdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwva3hzZDkuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwva3hzZDkuYwppbmRleCBhZTdmZmUxLi43OWY1Nzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2t4c2Q5LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9reHNkOS5jCkBAIC0xNiwxNyArMTYsMTEgQEAKICAqCQloZWF2aWx5IG9wdGltaXplZCByaW5nIGJ1ZmZlciBhY2Nlc3MgZnVuY3Rpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgotI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogCiAjaW5jbHVkZSAiLi4vaWlvLmgiCiAjaW5jbHVkZSAiLi4vc3lzZnMuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvbGlzM2wwMmRxLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2xpczNsMDJkcS5oCmluZGV4IGU3NmE5NzkuLjZlNzMwNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvbGlzM2wwMmRxLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9saXMzbDAyZHEuaApAQCAtMTQ4LDMwICsxNDgsMzEgQEAKICNkZWZpbmUgTElTM0wwMkRRX01BWF9SWCAxMgogLyoqCiAgKiBzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlIC0gZGV2aWNlIGluc3RhbmNlIHNwZWNpZmljIGRhdGEKKyAqIEBoZWxwZXI6CQlkYXRhIGFuZCBmdW5jIHBvaW50ZXIgYWxsb3dpbmcgZ2VuZXJpYyBmdW5jdGlvbnMKICAqIEB1czoJCQlhY3R1YWwgc3BpX2RldmljZQotICogQHdvcmtfdHJpZ2dlcl90b19yaW5nOiBiaCBmb3IgdHJpZ2dlcmVkIGV2ZW50IGhhbmRsaW5nCi0gKiBAd29ya19jb250X3RocmVzaDogQ0xFQU4KKyAqIEB3b3JrX3RocmVzaDoJYmggZm9yIHRocmVzaG9sZCBldmVudHMKKyAqIEB0aHJlc2hfdGltZXN0YW1wOgl0aW1lc3RhbXAgZm9yIHRocmVzaG9sZCBpbnRlcnJ1cHRzLgogICogQGludGVyOgkJdXNlZCB0byBjaGVjayBpZiBuZXcgaW50ZXJydXB0IGhhcyBiZWVuIHRyaWdnZXJlZAotICogQGxhc3RfdGltZXN0YW1wOglwYXNzaW5nIHRpbWVzdGFtcCBmcm9tIHRoIHRvIGJoIG9mIGludGVycnVwdCBoYW5kbGVyCi0gKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQogICogQHRyaWc6CQlkYXRhIHJlYWR5IHRyaWdnZXIgcmVnaXN0ZXJlZCB3aXRoIGlpbwogICogQHR4OgkJCXRyYW5zbWl0IGJ1ZmZlcgogICogQHJ4OgkJCXJlY2lldmUgYnVmZmVyCiAgKiBAYnVmX2xvY2s6CQltdXRleCB0byBwcm90ZWN0IHR4IGFuZCByeAogICoqLwogc3RydWN0IGxpczNsMDJkcV9zdGF0ZSB7CisJc3RydWN0IGlpb19zd19yaW5nX2hlbHBlcl9zdGF0ZQloZWxwOwogCXN0cnVjdCBzcGlfZGV2aWNlCQkqdXM7Ci0Jc3RydWN0IHdvcmtfc3RydWN0CQl3b3JrX3RyaWdnZXJfdG9fcmluZzsKLQlzdHJ1Y3QgaWlvX3dvcmtfY29udAkJd29ya19jb250X3RocmVzaDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCXdvcmtfdGhyZXNoOworCXM2NAkJCQl0aHJlc2hfdGltZXN0YW1wOwogCWJvb2wJCQkJaW50ZXI7Ci0JczY0CQkJCWxhc3RfdGltZXN0YW1wOwotCXN0cnVjdCBpaW9fZGV2CQkJKmluZGlvX2RldjsKIAlzdHJ1Y3QgaWlvX3RyaWdnZXIJCSp0cmlnOwogCXU4CQkJCSp0eDsKIAl1OAkJCQkqcng7CiAJc3RydWN0IG11dGV4CQkJYnVmX2xvY2s7CiB9OwogCisjZGVmaW5lIGxpczNsMDJkcV9oX3RvX3MoX2gpCQkJCVwKKwljb250YWluZXJfb2YoX2gsIHN0cnVjdCBsaXMzbDAyZHFfc3RhdGUsIGhlbHApCisKIGludCBsaXMzbDAyZHFfc3BpX3JlYWRfcmVnXzgoc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgICB1OCByZWdfYWRkcmVzcywKIAkJCSAgICAgdTggKnZhbCk7CkBAIC0xOTUsMTUgKzE5NiwxNSBAQAogaW50IGxpczNsMDJkcV9jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKIHZvaWQgbGlzM2wwMmRxX3VuY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CiAKLWludCBsaXMzbDAyZHFfaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpOwotdm9pZCBsaXMzbDAyZHFfdW5pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyk7CiAjZWxzZSAvKiBDT05GSUdfSUlPX1JJTkdfQlVGRkVSICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBsaXMzbDAyZHFfcmVtb3ZlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldikge307CitzdGF0aWMgaW5saW5lIHZvaWQgbGlzM2wwMmRxX3JlbW92ZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCit7Cit9CiBzdGF0aWMgaW5saW5lIGludCBsaXMzbDAyZHFfcHJvYmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogewogCXJldHVybiAwOwotfTsKK30KIAogc3RhdGljIGlubGluZSBzc2l6ZV90CiBsaXMzbDAyZHFfcmVhZF9hY2NlbF9mcm9tX3Jpbmcoc3RydWN0IGRldmljZSAqZGV2LApAQCAtMjExLDE4ICsyMTIsMTQgQEAKIAkJCSAgICAgICBjaGFyICpidWYpCiB7CiAJcmV0dXJuIDA7Ci19OworfQogCiBzdGF0aWMgaW50IGxpczNsMDJkcV9jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogewogCXJldHVybiAwOwotfTsKK30KIHN0YXRpYyBpbmxpbmUgdm9pZCBsaXMzbDAyZHFfdW5jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQote307Ci1zdGF0aWMgaW5saW5lIGludCBsaXMzbDAyZHFfaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpCiB7Ci0JcmV0dXJuIDA7Ci19Owotc3RhdGljIGlubGluZSB2b2lkIGxpczNsMDJkcV91bmluaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKSB7fTsKK30KICNlbmRpZiAvKiBDT05GSUdfSUlPX1JJTkdfQlVGRkVSICovCiAjZW5kaWYgLyogU1BJX0xJUzNMMDJEUV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9saXMzbDAyZHFfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9saXMzbDAyZHFfY29yZS5jCmluZGV4IDZiNTU3N2QuLjBlZTkzMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvbGlzM2wwMmRxX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2xpczNsMDJkcV9jb3JlLmMKQEAgLTI3LDYgKzI3LDkgQEAKIAogI2luY2x1ZGUgIi4uL2lpby5oIgogI2luY2x1ZGUgIi4uL3N5c2ZzLmgiCisjaW5jbHVkZSAiLi4vcmluZ19nZW5lcmljLmgiCisjaW5jbHVkZSAiLi4vcmluZ19zdy5oIgorCiAjaW5jbHVkZSAiYWNjZWwuaCIKIAogI2luY2x1ZGUgImxpczNsMDJkcS5oIgpAQCAtNDcsNyArNTAsOSBAQAogCWludCByZXQ7CiAJc3RydWN0IHNwaV9tZXNzYWdlIG1zZzsKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisJc3RydWN0IGlpb19zd19yaW5nX2hlbHBlcl9zdGF0ZSAqaCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKKwlzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdCA9IGxpczNsMDJkcV9oX3RvX3MoaCk7CisKIAlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXIgPSB7CiAJCS50eF9idWYgPSBzdC0+dHgsCiAJCS5yeF9idWYgPSBzdC0+cngsCkBAIC04Miw3ICs4Nyw5IEBACiAJaW50IHJldDsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOwogCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKKwlzdHJ1Y3QgaWlvX3N3X3JpbmdfaGVscGVyX3N0YXRlICpoCisJCT0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOworCXN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgKnN0ID0gbGlzM2wwMmRxX2hfdG9fcyhoKTsKIAlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXIgPSB7CiAJCS50eF9idWYgPSBzdC0+dHgsCiAJCS5iaXRzX3Blcl93b3JkID0gOCwKQEAgLTk2LDcgKzEwMyw3IEBACiAKIAlzcGlfbWVzc2FnZV9pbml0KCZtc2cpOwogCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4ZmVyLCAmbXNnKTsKLQlyZXQgPSAgc3BpX3N5bmMoc3QtPnVzLCAmbXNnKTsKKwlyZXQgPSBzcGlfc3luYyhzdC0+dXMsICZtc2cpOwogCW11dGV4X3VubG9jaygmc3QtPmJ1Zl9sb2NrKTsKIAogCXJldHVybiByZXQ7CkBAIC0xMTYsNyArMTIzLDkgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7CiAJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOworCXN0cnVjdCBpaW9fc3dfcmluZ19oZWxwZXJfc3RhdGUgKmgKKwkJPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisJc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3QgPSBsaXMzbDAyZHFfaF90b19zKGgpOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlcnNbXSA9IHsgewogCQkJLnR4X2J1ZiA9IHN0LT50eCwKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKQEAgLTE1OCw3ICsxNjcsOSBAQAogewogCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7CiAJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOworCXN0cnVjdCBpaW9fc3dfcmluZ19oZWxwZXJfc3RhdGUgKmgKKwkJPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisJc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3QgPSBsaXMzbDAyZHFfaF90b19zKGgpOwogCWludCByZXQ7CiAJc3RydWN0IHNwaV90cmFuc2ZlciB4ZmVyc1tdID0geyB7CiAJCQkudHhfYnVmID0gc3QtPnR4LApAQCAtNDExLDcgKzQyMiw3IEBACiAKIAl2YWwgPSBMSVMzTDAyRFFfREVGQVVMVF9DVFJMMTsKIAkvKiBXcml0ZSBzdWl0YWJsZSBkZWZhdWx0cyB0byBjdHJsMSAqLwotCXJldCA9IGxpczNsMDJkcV9zcGlfd3JpdGVfcmVnXzgoJnN0LT5pbmRpb19kZXYtPmRldiwKKwlyZXQgPSBsaXMzbDAyZHFfc3BpX3dyaXRlX3JlZ184KCZzdC0+aGVscC5pbmRpb19kZXYtPmRldiwKIAkJCQkJTElTM0wwMkRRX1JFR19DVFJMXzFfQUREUiwKIAkJCQkJJnZhbCk7CiAJaWYgKHJldCkgewpAQCAtNDE5LDcgKzQzMCw3IEBACiAJCWdvdG8gZXJyX3JldDsKIAl9CiAJLyogUmVwZWF0IGFzIHNvbWV0aW1lcyBkb2Vzbid0IHdvcmsgZmlyc3QgdGltZT8qLwotCXJldCA9IGxpczNsMDJkcV9zcGlfd3JpdGVfcmVnXzgoJnN0LT5pbmRpb19kZXYtPmRldiwKKwlyZXQgPSBsaXMzbDAyZHFfc3BpX3dyaXRlX3JlZ184KCZzdC0+aGVscC5pbmRpb19kZXYtPmRldiwKIAkJCQkJTElTM0wwMkRRX1JFR19DVFJMXzFfQUREUiwKIAkJCQkJJnZhbCk7CiAJaWYgKHJldCkgewpAQCAtNDI5LDE3ICs0NDAsMTcgQEAKIAogCS8qIFJlYWQgYmFjayB0byBjaGVjayB0aGlzIGhhcyB3b3JrZWQgYWN0cyBhcyBsb29zZSB0ZXN0IG9mIGNvcnJlY3QKIAkgKiBjaGlwICovCi0JcmV0ID0gbGlzM2wwMmRxX3NwaV9yZWFkX3JlZ184KCZzdC0+aW5kaW9fZGV2LT5kZXYsCisJcmV0ID0gbGlzM2wwMmRxX3NwaV9yZWFkX3JlZ184KCZzdC0+aGVscC5pbmRpb19kZXYtPmRldiwKIAkJCQkgICAgICAgTElTM0wwMkRRX1JFR19DVFJMXzFfQUREUiwKIAkJCQkgICAgICAgJnZhbHRlc3QpOwogCWlmIChyZXQgfHwgKHZhbHRlc3QgIT0gdmFsKSkgewotCQlkZXZfZXJyKCZzdC0+aW5kaW9fZGV2LT5kZXYsICJkZXZpY2Ugbm90IHBsYXlpbmcgYmFsbCIpOworCQlkZXZfZXJyKCZzdC0+aGVscC5pbmRpb19kZXYtPmRldiwgImRldmljZSBub3QgcGxheWluZyBiYWxsIik7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3JldDsKIAl9CiAKIAl2YWwgPSBMSVMzTDAyRFFfREVGQVVMVF9DVFJMMjsKLQlyZXQgPSBsaXMzbDAyZHFfc3BpX3dyaXRlX3JlZ184KCZzdC0+aW5kaW9fZGV2LT5kZXYsCisJcmV0ID0gbGlzM2wwMmRxX3NwaV93cml0ZV9yZWdfOCgmc3QtPmhlbHAuaW5kaW9fZGV2LT5kZXYsCiAJCQkJCUxJUzNMMDJEUV9SRUdfQ1RSTF8yX0FERFIsCiAJCQkJCSZ2YWwpOwogCWlmIChyZXQpIHsKQEAgLTQ0OCw3ICs0NTksNyBAQAogCX0KIAogCXZhbCA9IExJUzNMMDJEUV9SRUdfV0FLRV9VUF9DRkdfTEFUQ0hfU1JDOwotCXJldCA9IGxpczNsMDJkcV9zcGlfd3JpdGVfcmVnXzgoJnN0LT5pbmRpb19kZXYtPmRldiwKKwlyZXQgPSBsaXMzbDAyZHFfc3BpX3dyaXRlX3JlZ184KCZzdC0+aGVscC5pbmRpb19kZXYtPmRldiwKIAkJCQkJTElTM0wwMkRRX1JFR19XQUtFX1VQX0NGR19BRERSLAogCQkJCQkmdmFsKTsKIAlpZiAocmV0KQpAQCAtNTI0LDggKzUzNSw3IEBACiAJCQkJICAgICAgIExJUzNMMDJEUV9SRUdfV0FLRV9VUF9DRkdfQUREUiwKIAkJCQkgICAgICAgKHU4ICopJnZhbCk7CiAKLQlyZXR1cm4gcmV0ID8gcmV0IDogc3ByaW50ZihidWYsICIlZFxuIiwKLQkJCQkgICAodmFsICYgdGhpc19hdHRyLT5tYXNrKSA/IDEgOiAwKTs7CisJcmV0dXJuIHJldCA/IHJldCA6IHNwcmludGYoYnVmLCAiJWRcbiIsICEhKHZhbCAmIHRoaXNfYXR0ci0+bWFzaykpOwogfQogCiBzdGF0aWMgc3NpemVfdCBsaXMzbDAyZHFfd3JpdGVfaW50ZXJydXB0X2NvbmZpZyhzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC01OTUsMTYgKzYwNSwxOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgbGlzM2wwMmRxX3RocmVzaF9oYW5kbGVyX3RoKHN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbywKK3N0YXRpYyBpbnQgbGlzM2wwMmRxX3RocmVzaF9oYW5kbGVyX3RoKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCiAJCQkJICAgICAgIGludCBpbmRleCwKIAkJCQkgICAgICAgczY0IHRpbWVzdGFtcCwKIAkJCQkgICAgICAgaW50IG5vX3Rlc3QpCiB7Ci0Jc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3QgPSBkZXZfaW5mby0+ZGV2X2RhdGE7CisJc3RydWN0IGlpb19zd19yaW5nX2hlbHBlcl9zdGF0ZSAqaAorCQk9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKKwlzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdCA9IGxpczNsMDJkcV9oX3RvX3MoaCk7CiAKIAkvKiBTdGFzaCB0aGUgdGltZXN0YW1wIHNvbWV3aGVyZSBjb252ZW5pZW50IGZvciB0aGUgYmggKi8KLQlzdC0+bGFzdF90aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0Jc2NoZWR1bGVfd29yaygmc3QtPndvcmtfY29udF90aHJlc2gud3MpOworCXN0LT50aHJlc2hfdGltZXN0YW1wID0gdGltZXN0YW1wOworCXNjaGVkdWxlX3dvcmsoJnN0LT53b3JrX3RocmVzaCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTYxNSw0OCArNjI3LDQ5IEBACiAgKi8KIHN0YXRpYyB2b2lkIGxpczNsMDJkcV90aHJlc2hfaGFuZGxlcl9iaF9ub19jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmtfcykKIHsKLQlzdHJ1Y3QgaWlvX3dvcmtfY29udCAqd2MKLQkJPSBjb250YWluZXJfb2Yod29ya19zLCBzdHJ1Y3QgaWlvX3dvcmtfY29udCwgd3MpOwotCXN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgKnN0ID0gd2MtPnN0OworICAgICAgIHN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgKnN0CisJICAgICAgID0gY29udGFpbmVyX29mKHdvcmtfcywKKwkJICAgICAgIHN0cnVjdCBsaXMzbDAyZHFfc3RhdGUsIHdvcmtfdGhyZXNoKTsKKwogCXU4IHQ7CiAKLQlsaXMzbDAyZHFfc3BpX3JlYWRfcmVnXzgoJnN0LT5pbmRpb19kZXYtPmRldiwKKwlsaXMzbDAyZHFfc3BpX3JlYWRfcmVnXzgoJnN0LT5oZWxwLmluZGlvX2Rldi0+ZGV2LAogCQkJCSBMSVMzTDAyRFFfUkVHX1dBS0VfVVBfU1JDX0FERFIsCiAJCQkJICZ0KTsKIAogCWlmICh0ICYgTElTM0wwMkRRX1JFR19XQUtFX1VQX1NSQ19JTlRFUlJVUFRfWl9ISUdIKQotCQlpaW9fcHVzaF9ldmVudChzdC0+aW5kaW9fZGV2LCAwLAorCQlpaW9fcHVzaF9ldmVudChzdC0+aGVscC5pbmRpb19kZXYsIDAsCiAJCQkgICAgICAgSUlPX0VWRU5UX0NPREVfQUNDRUxfWl9ISUdILAotCQkJICAgICAgIHN0LT5sYXN0X3RpbWVzdGFtcCk7CisJCQkgICAgICAgc3QtPnRocmVzaF90aW1lc3RhbXApOwogCiAJaWYgKHQgJiBMSVMzTDAyRFFfUkVHX1dBS0VfVVBfU1JDX0lOVEVSUlVQVF9aX0xPVykKLQkJaWlvX3B1c2hfZXZlbnQoc3QtPmluZGlvX2RldiwgMCwKKwkJaWlvX3B1c2hfZXZlbnQoc3QtPmhlbHAuaW5kaW9fZGV2LCAwLAogCQkJICAgICAgIElJT19FVkVOVF9DT0RFX0FDQ0VMX1pfTE9XLAotCQkJICAgICAgIHN0LT5sYXN0X3RpbWVzdGFtcCk7CisJCQkgICAgICAgc3QtPnRocmVzaF90aW1lc3RhbXApOwogCiAJaWYgKHQgJiBMSVMzTDAyRFFfUkVHX1dBS0VfVVBfU1JDX0lOVEVSUlVQVF9ZX0hJR0gpCi0JCWlpb19wdXNoX2V2ZW50KHN0LT5pbmRpb19kZXYsIDAsCisJCWlpb19wdXNoX2V2ZW50KHN0LT5oZWxwLmluZGlvX2RldiwgMCwKIAkJCSAgICAgICBJSU9fRVZFTlRfQ09ERV9BQ0NFTF9ZX0hJR0gsCi0JCQkgICAgICAgc3QtPmxhc3RfdGltZXN0YW1wKTsKKwkJCSAgICAgICBzdC0+dGhyZXNoX3RpbWVzdGFtcCk7CiAKIAlpZiAodCAmIExJUzNMMDJEUV9SRUdfV0FLRV9VUF9TUkNfSU5URVJSVVBUX1lfTE9XKQotCQlpaW9fcHVzaF9ldmVudChzdC0+aW5kaW9fZGV2LCAwLAorCQlpaW9fcHVzaF9ldmVudChzdC0+aGVscC5pbmRpb19kZXYsIDAsCiAJCQkgICAgICAgSUlPX0VWRU5UX0NPREVfQUNDRUxfWV9MT1csCi0JCQkgICAgICAgc3QtPmxhc3RfdGltZXN0YW1wKTsKKwkJCSAgICAgICBzdC0+dGhyZXNoX3RpbWVzdGFtcCk7CiAKIAlpZiAodCAmIExJUzNMMDJEUV9SRUdfV0FLRV9VUF9TUkNfSU5URVJSVVBUX1hfSElHSCkKLQkJaWlvX3B1c2hfZXZlbnQoc3QtPmluZGlvX2RldiwgMCwKKwkJaWlvX3B1c2hfZXZlbnQoc3QtPmhlbHAuaW5kaW9fZGV2LCAwLAogCQkJICAgICAgIElJT19FVkVOVF9DT0RFX0FDQ0VMX1hfSElHSCwKLQkJCSAgICAgICBzdC0+bGFzdF90aW1lc3RhbXApOworCQkJICAgICAgIHN0LT50aHJlc2hfdGltZXN0YW1wKTsKIAogCWlmICh0ICYgTElTM0wwMkRRX1JFR19XQUtFX1VQX1NSQ19JTlRFUlJVUFRfWF9MT1cpCi0JCWlpb19wdXNoX2V2ZW50KHN0LT5pbmRpb19kZXYsIDAsCisJCWlpb19wdXNoX2V2ZW50KHN0LT5oZWxwLmluZGlvX2RldiwgMCwKIAkJCSAgICAgICBJSU9fRVZFTlRfQ09ERV9BQ0NFTF9YX0xPVywKLQkJCSAgICAgICBzdC0+bGFzdF90aW1lc3RhbXApOworCQkJICAgICAgIHN0LT50aHJlc2hfdGltZXN0YW1wKTsKIAkvKiByZWVuYWJsZSB0aGUgaXJxICovCiAJZW5hYmxlX2lycShzdC0+dXMtPmlycSk7CiAJLyogQWNrIGFuZCBhbGxvdyBmb3IgbmV3IGludGVycnVwdHMgKi8KLQlsaXMzbDAyZHFfc3BpX3JlYWRfcmVnXzgoJnN0LT5pbmRpb19kZXYtPmRldiwKKwlsaXMzbDAyZHFfc3BpX3JlYWRfcmVnXzgoJnN0LT5oZWxwLmluZGlvX2Rldi0+ZGV2LAogCQkJCSBMSVMzTDAyRFFfUkVHX1dBS0VfVVBfQUNLX0FERFIsCiAJCQkJICZ0KTsKIApAQCAtNzUwLDYgKzc2Myw3IEBACiAJCXJldCA9ICAtRU5PTUVNOwogCQlnb3RvIGVycm9yX3JldDsKIAl9CisJSU5JVF9XT1JLKCZzdC0+d29ya190aHJlc2gsIGxpczNsMDJkcV90aHJlc2hfaGFuZGxlcl9iaF9ub19jaGVjayk7CiAJLyogdGhpcyBpcyBvbmx5IHVzZWQgdG9yIHJlbW92YWwgcHVycG9zZXMgKi8KIAlzcGlfc2V0X2RydmRhdGEoc3BpLCBzdCk7CiAKQEAgLTc2Nyw1NiArNzgxLDQ2IEBACiAJc3QtPnVzID0gc3BpOwogCW11dGV4X2luaXQoJnN0LT5idWZfbG9jayk7CiAJLyogc2V0dXAgdGhlIGluZHVzdHJpYWxpbyBkcml2ZXIgYWxsb2NhdGVkIGVsZW1lbnRzICovCi0Jc3QtPmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoc3QtPmluZGlvX2RldiA9PSBOVUxMKSB7CisJc3QtPmhlbHAuaW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgpOworCWlmIChzdC0+aGVscC5pbmRpb19kZXYgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX2ZyZWVfdHg7CiAJfQogCi0Jc3QtPmluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZzcGktPmRldjsKLQlzdC0+aW5kaW9fZGV2LT5udW1faW50ZXJydXB0X2xpbmVzID0gMTsKLQlzdC0+aW5kaW9fZGV2LT5ldmVudF9hdHRycyA9ICZsaXMzbDAyZHFfZXZlbnRfYXR0cmlidXRlX2dyb3VwOwotCXN0LT5pbmRpb19kZXYtPmF0dHJzID0gJmxpczNsMDJkcV9hdHRyaWJ1dGVfZ3JvdXA7Ci0Jc3QtPmluZGlvX2Rldi0+ZGV2X2RhdGEgPSAodm9pZCAqKShzdCk7Ci0Jc3QtPmluZGlvX2Rldi0+ZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFOwotCXN0LT5pbmRpb19kZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7CisJc3QtPmhlbHAuaW5kaW9fZGV2LT5kZXYucGFyZW50ID0gJnNwaS0+ZGV2OworCXN0LT5oZWxwLmluZGlvX2Rldi0+bnVtX2ludGVycnVwdF9saW5lcyA9IDE7CisJc3QtPmhlbHAuaW5kaW9fZGV2LT5ldmVudF9hdHRycyA9ICZsaXMzbDAyZHFfZXZlbnRfYXR0cmlidXRlX2dyb3VwOworCXN0LT5oZWxwLmluZGlvX2Rldi0+YXR0cnMgPSAmbGlzM2wwMmRxX2F0dHJpYnV0ZV9ncm91cDsKKwlzdC0+aGVscC5pbmRpb19kZXYtPmRldl9kYXRhID0gKHZvaWQgKikoJnN0LT5oZWxwKTsKKwlzdC0+aGVscC5pbmRpb19kZXYtPmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRTsKKwlzdC0+aGVscC5pbmRpb19kZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7CiAKLQlyZXQgPSBsaXMzbDAyZHFfY29uZmlndXJlX3Jpbmcoc3QtPmluZGlvX2Rldik7CisJcmV0ID0gbGlzM2wwMmRxX2NvbmZpZ3VyZV9yaW5nKHN0LT5oZWxwLmluZGlvX2Rldik7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9mcmVlX2RldjsKIAotCXJldCA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoc3QtPmluZGlvX2Rldik7CisJcmV0ID0gaWlvX2RldmljZV9yZWdpc3RlcihzdC0+aGVscC5pbmRpb19kZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfdW5yZWdfcmluZ19mdW5jczsKIAlyZWdkb25lID0gMTsKIAotCXJldCA9IGxpczNsMDJkcV9pbml0aWFsaXplX3Jpbmcoc3QtPmluZGlvX2Rldi0+cmluZyk7CisJcmV0ID0gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyKHN0LT5oZWxwLmluZGlvX2Rldi0+cmluZywgMCk7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBpbml0aWFsaXplIHRoZSByaW5nXG4iKTsKIAkJZ290byBlcnJvcl91bnJlZ19yaW5nX2Z1bmNzOwogCX0KIAogCWlmIChzcGktPmlycSAmJiBncGlvX2lzX3ZhbGlkKGlycV90b19ncGlvKHNwaS0+aXJxKSkgPiAwKSB7Ci0JCS8qIFRoaXMgaXMgYSBsaXR0bGUgdW51c3VhbCwgaW4gdGhhdCB0aGUgZGV2aWNlIHNlZW1zCi0JCSAgIHRvIG5lZWQgYSBmdWxsIHJlYWQgb2YgdGhlIGludGVycnVwdCBzb3VyY2UgcmVnIGJlZm9yZQotCQkgICB0aGUgaW50ZXJydXB0IHdpbGwgcmVzZXQuCi0JCSAgIEhlbmNlIHRoZSB0d28gaGFuZGxlcnMgYXJlIHRoZSBzYW1lICovCi0JCWlpb19pbml0X3dvcmtfY29udCgmc3QtPndvcmtfY29udF90aHJlc2gsCi0JCQkJICAgbGlzM2wwMmRxX3RocmVzaF9oYW5kbGVyX2JoX25vX2NoZWNrLAotCQkJCSAgIGxpczNsMDJkcV90aHJlc2hfaGFuZGxlcl9iaF9ub19jaGVjaywKLQkJCQkgICBMSVMzTDAyRFFfUkVHX1dBS0VfVVBfU1JDX0FERFIsCi0JCQkJICAgMCwKLQkJCQkgICBzdCk7CiAJCXN0LT5pbnRlciA9IDA7CiAJCXJldCA9IGlpb19yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShzcGktPmlycSwKLQkJCQkJCSAgc3QtPmluZGlvX2RldiwKKwkJCQkJCSAgc3QtPmhlbHAuaW5kaW9fZGV2LAogCQkJCQkJICAwLAogCQkJCQkJICBJUlFGX1RSSUdHRVJfUklTSU5HLAogCQkJCQkJICAibGlzM2wwMmRxIik7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycm9yX3VuaW5pdGlhbGl6ZV9yaW5nOwogCi0JCXJldCA9IGxpczNsMDJkcV9wcm9iZV90cmlnZ2VyKHN0LT5pbmRpb19kZXYpOworCQlyZXQgPSBsaXMzbDAyZHFfcHJvYmVfdHJpZ2dlcihzdC0+aGVscC5pbmRpb19kZXYpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJvcl91bnJlZ2lzdGVyX2xpbmU7CiAJfQpAQCAtODI4LDIwICs4MzIsMjAgQEAKIAlyZXR1cm4gMDsKIAogZXJyb3JfcmVtb3ZlX3RyaWdnZXI6Ci0JaWYgKHN0LT5pbmRpb19kZXYtPm1vZGVzICYgSU5ESU9fUklOR19UUklHR0VSRUQpCi0JCWxpczNsMDJkcV9yZW1vdmVfdHJpZ2dlcihzdC0+aW5kaW9fZGV2KTsKKwlpZiAoc3QtPmhlbHAuaW5kaW9fZGV2LT5tb2RlcyAmIElORElPX1JJTkdfVFJJR0dFUkVEKQorCQlsaXMzbDAyZHFfcmVtb3ZlX3RyaWdnZXIoc3QtPmhlbHAuaW5kaW9fZGV2KTsKIGVycm9yX3VucmVnaXN0ZXJfbGluZToKLQlpZiAoc3QtPmluZGlvX2Rldi0+bW9kZXMgJiBJTkRJT19SSU5HX1RSSUdHRVJFRCkKLQkJaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoc3QtPmluZGlvX2RldiwgMCk7CisJaWYgKHN0LT5oZWxwLmluZGlvX2Rldi0+bW9kZXMgJiBJTkRJT19SSU5HX1RSSUdHRVJFRCkKKwkJaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoc3QtPmhlbHAuaW5kaW9fZGV2LCAwKTsKIGVycm9yX3VuaW5pdGlhbGl6ZV9yaW5nOgotCWxpczNsMDJkcV91bmluaXRpYWxpemVfcmluZyhzdC0+aW5kaW9fZGV2LT5yaW5nKTsKKwlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihzdC0+aGVscC5pbmRpb19kZXYtPnJpbmcpOwogZXJyb3JfdW5yZWdfcmluZ19mdW5jczoKLQlsaXMzbDAyZHFfdW5jb25maWd1cmVfcmluZyhzdC0+aW5kaW9fZGV2KTsKKwlsaXMzbDAyZHFfdW5jb25maWd1cmVfcmluZyhzdC0+aGVscC5pbmRpb19kZXYpOwogZXJyb3JfZnJlZV9kZXY6CiAJaWYgKHJlZ2RvbmUpCi0JCWlpb19kZXZpY2VfdW5yZWdpc3RlcihzdC0+aW5kaW9fZGV2KTsKKwkJaWlvX2RldmljZV91bnJlZ2lzdGVyKHN0LT5oZWxwLmluZGlvX2Rldik7CiAJZWxzZQotCQlpaW9fZnJlZV9kZXZpY2Uoc3QtPmluZGlvX2Rldik7CisJCWlpb19mcmVlX2RldmljZShzdC0+aGVscC5pbmRpb19kZXYpOwogZXJyb3JfZnJlZV90eDoKIAlrZnJlZShzdC0+dHgpOwogZXJyb3JfZnJlZV9yeDoKQEAgLTg1Niw3ICs4NjAsOSBAQAogc3RhdGljIGludCBsaXMzbDAyZHFfc3RvcF9kZXZpY2Uoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlpbnQgcmV0OwotCXN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgKnN0ID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3QgaWlvX3N3X3JpbmdfaGVscGVyX3N0YXRlICpoCisJCT0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOworCXN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgKnN0ID0gbGlzM2wwMmRxX2hfdG9fcyhoKTsKIAl1OCB2YWwgPSAwOwogCiAJbXV0ZXhfbG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CkBAIC04ODMsNyArODg5LDcgQEAKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgKnN0ID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHN0LT5pbmRpb19kZXY7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHN0LT5oZWxwLmluZGlvX2RldjsKIAogCXJldCA9IGxpczNsMDJkcV9zdG9wX2RldmljZShpbmRpb19kZXYpOwogCWlmIChyZXQpCkBAIC04OTUsNyArOTAxLDcgQEAKIAlpZiAoc3BpLT5pcnEgJiYgZ3Bpb19pc192YWxpZChpcnFfdG9fZ3BpbyhzcGktPmlycSkpID4gMCkKIAkJaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoaW5kaW9fZGV2LCAwKTsKIAotCWxpczNsMDJkcV91bmluaXRpYWxpemVfcmluZyhpbmRpb19kZXYtPnJpbmcpOworCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKGluZGlvX2Rldi0+cmluZyk7CiAJbGlzM2wwMmRxX3VuY29uZmlndXJlX3JpbmcoaW5kaW9fZGV2KTsKIAlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoaW5kaW9fZGV2KTsKIAlrZnJlZShzdC0+dHgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9saXMzbDAyZHFfcmluZy5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9saXMzbDAyZHFfcmluZy5jCmluZGV4IGU0ZTIwMmUuLmE5NjBhOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvbGlzM2wwMmRxX3JpbmcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2xpczNsMDJkcV9yaW5nLmMKQEAgLTEwMywxMyArMTAzLDE1IEBACiAgKiBsaXMzbDAyZHFfcG9sbF9mdW5jX3RoKCkgdG9wIGhhbGYgaW50ZXJydXB0IGhhbmRsZXIgY2FsbGVkIGJ5IHRyaWdnZXIKICAqIEBwcml2YXRlX2RhdGE6CWlpb19kZXYKICAqKi8KLXN0YXRpYyB2b2lkIGxpczNsMDJkcV9wb2xsX2Z1bmNfdGgoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKK3N0YXRpYyB2b2lkIGxpczNsMDJkcV9wb2xsX2Z1bmNfdGgoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwgczY0IHRpbWUpCiB7Ci0gIHN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOwotCXN0LT5sYXN0X3RpbWVzdGFtcCA9IGluZGlvX2Rldi0+dHJpZy0+dGltZXN0YW1wOwotCXNjaGVkdWxlX3dvcmsoJnN0LT53b3JrX3RyaWdnZXJfdG9fcmluZyk7Ci0JLyogSW5kaWNhdGUgdGhhdCB0aGlzIGludGVycnVwdCBpcyBiZWluZyBoYW5kbGVkICovCisJc3RydWN0IGlpb19zd19yaW5nX2hlbHBlcl9zdGF0ZSAqaAorCQk9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKKwlzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdCA9IGxpczNsMDJkcV9oX3RvX3MoaCk7CisJLyogaW4gdGhpcyBjYXNlIHdlIG5lZWQgdG8gc2xpZ2h0bHkgZXh0ZW5kIHRoZSBoZWxwZXIgZnVuY3Rpb24gKi8KKwlpaW9fc3dfcG9sbF9mdW5jX3RoKGluZGlvX2RldiwgdGltZSk7CiAKKwkvKiBJbmRpY2F0ZSB0aGF0IHRoaXMgaW50ZXJydXB0IGlzIGJlaW5nIGhhbmRsZWQgKi8KIAkvKiBUZWNobmljYWxseSB0aGlzIGlzIHRyaWdnZXIgcmVsYXRlZCwgYnV0IHdpdGhvdXQgdGhpcwogCSAqIGhhbmRsZXIgcnVubmluZyB0aGVyZSBpcyBjdXJyZW50bHkgbm93IHdheSBmb3IgdGhlIGludGVycnVwdAogCSAqIHRvIGNsZWFyLgpAQCAtMTIwLDE2ICsxMjIsMTYgQEAKIC8qKgogICogbGlzM2wwMmRxX2RhdGFfcmR5X3RyaWdfcG9sbCgpIHRoZSBldmVudCBoYW5kbGVyIGZvciB0aGUgZGF0YSByZHkgdHJpZwogICoqLwotc3RhdGljIGludCBsaXMzbDAyZHFfZGF0YV9yZHlfdHJpZ19wb2xsKHN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbywKK3N0YXRpYyBpbnQgbGlzM2wwMmRxX2RhdGFfcmR5X3RyaWdfcG9sbChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAogCQkJCSAgICAgICBpbnQgaW5kZXgsCiAJCQkJICAgICAgIHM2NCB0aW1lc3RhbXAsCiAJCQkJICAgICAgIGludCBub190ZXN0KQogewotCXN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7Ci0Jc3RydWN0IGlpb190cmlnZ2VyICp0cmlnID0gc3QtPnRyaWc7CisJc3RydWN0IGlpb19zd19yaW5nX2hlbHBlcl9zdGF0ZSAqaAorCQk9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKKwlzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdCA9IGxpczNsMDJkcV9oX3RvX3MoaCk7CiAKLQl0cmlnLT50aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0JaWlvX3RyaWdnZXJfcG9sbCh0cmlnKTsKKwlpaW9fdHJpZ2dlcl9wb2xsKHN0LT50cmlnLCB0aW1lc3RhbXApOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMjEzLDcgKzIxNSw3IEBACiAJc3RydWN0IHNwaV9tZXNzYWdlIG1zZzsKIAlpbnQgcmV0LCBpLCBqID0gMDsKIAotCXhmZXJzID0ga3phbGxvYygoc3QtPmluZGlvX2Rldi0+c2Nhbl9jb3VudCkgKiAyCisJeGZlcnMgPSBremFsbG9jKChzdC0+aGVscC5pbmRpb19kZXYtPnNjYW5fY291bnQpICogMgogCQkJKiBzaXplb2YoKnhmZXJzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF4ZmVycykKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMjEsNyArMjIzLDcgQEAKIAltdXRleF9sb2NrKCZzdC0+YnVmX2xvY2spOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVhZF9hbGxfdHhfYXJyYXkpLzQ7IGkrKykgewotCQlpZiAoc3QtPmluZGlvX2Rldi0+c2Nhbl9tYXNrICYgKDEgPDwgaSkpIHsKKwkJaWYgKHN0LT5oZWxwLmluZGlvX2Rldi0+c2Nhbl9tYXNrICYgKDEgPDwgaSkpIHsKIAkJCS8qIGxvd2VyIGJ5dGUgKi8KIAkJCXhmZXJzW2pdLnR4X2J1ZiA9IHN0LT50eCArIDIqajsKIAkJCXN0LT50eFsyKmpdID0gcmVhZF9hbGxfdHhfYXJyYXlbaSo0XTsKQEAgLTI0OSw3ICsyNTEsNyBAQAogCSAqIHZhbHVlcyBpbiBhbHRlcm5hdGUgYnl0ZXMKIAkgKi8KIAlzcGlfbWVzc2FnZV9pbml0KCZtc2cpOwotCWZvciAoaiA9IDA7IGogPCBzdC0+aW5kaW9fZGV2LT5zY2FuX2NvdW50ICogMjsgaisrKQorCWZvciAoaiA9IDA7IGogPCBzdC0+aGVscC5pbmRpb19kZXYtPnNjYW5fY291bnQgKiAyOyBqKyspCiAJCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4ZmVyc1tqXSwgJm1zZyk7CiAKIAlyZXQgPSBzcGlfc3luYyhzdC0+dXMsICZtc2cpOwpAQCAtMjU5LDEwMiArMjYxLDM3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotCi0vKiBXaGlsc3QgdGhpcyBtYWtlcyBhIGxvdCBvZiBjYWxscyB0byBpaW9fc3dfcmluZyBmdW5jdGlvbnMgLSBpdCBpcyB0byBkZXZpY2UKLSAqIHNwZWNpZmljIHRvIGJlIHJvbGxlZCBpbnRvIHRoZSBjb3JlLgotICovCiBzdGF0aWMgdm9pZCBsaXMzbDAyZHFfdHJpZ2dlcl9iaF90b19yaW5nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29ya19zKQogewotCXN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgKnN0Ci0JCT0gY29udGFpbmVyX29mKHdvcmtfcywgc3RydWN0IGxpczNsMDJkcV9zdGF0ZSwKLQkJCSAgICAgICB3b3JrX3RyaWdnZXJfdG9fcmluZyk7CisJc3RydWN0IGlpb19zd19yaW5nX2hlbHBlcl9zdGF0ZSAqaAorCQk9IGNvbnRhaW5lcl9vZih3b3JrX3MsIHN0cnVjdCBpaW9fc3dfcmluZ19oZWxwZXJfc3RhdGUsCisJCQl3b3JrX3RyaWdnZXJfdG9fcmluZyk7CisJc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3QgPSBsaXMzbDAyZHFfaF90b19zKGgpOwogCi0JdTggKnJ4X2FycmF5OwotCWludCBpID0gMDsKLQl1MTYgKmRhdGE7Ci0Jc2l6ZV90IGRhdGFzaXplID0gc3QtPmluZGlvX2RldgotCQktPnJpbmctPmFjY2Vzcy5nZXRfYnBkKHN0LT5pbmRpb19kZXYtPnJpbmcpOwotCi0JZGF0YSA9IGttYWxsb2MoZGF0YXNpemUgLCBHRlBfS0VSTkVMKTsKLQlpZiAoZGF0YSA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoJnN0LT51cy0+ZGV2LCAibWVtb3J5IGFsbG9jIGZhaWxlZCBpbiByaW5nIGJoIik7Ci0JCXJldHVybjsKLQl9Ci0JLyogRHVlIHRvIGludGVybGVhdmVkIG5hdHVyZSBvZiB0cmFuc21pc3Npb24gdGhpcyBidWZmZXIgbXVzdCBiZQotCSAqIHR3aWNlIHRoZSBudW1iZXIgb2YgYnl0ZXMsIG9yIDQgdGltZXMgdGhlIG51bWJlciBvZiBjaGFubmVscwotCSAqLwotCXJ4X2FycmF5ID0ga21hbGxvYyg0ICogKHN0LT5pbmRpb19kZXYtPnNjYW5fY291bnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAocnhfYXJyYXkgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZzdC0+dXMtPmRldiwgIm1lbW9yeSBhbGxvYyBmYWlsZWQgaW4gcmluZyBiaCIpOwotCQlrZnJlZShkYXRhKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIHdoaWxzdCB0cmlnZ2VyIHNwZWNpZmljLCBpZiB0aGlzIHJlYWQgZG9lcyBudG8gb2NjdXIgdGhlIGRhdGEKLQkgICByZWFkeSBpbnRlcnJ1cHQgd2lsbCBub3QgYmUgY2xlYXJlZC4gIE5lZWQgdG8gYWRkIGEgbWVjaGFuaXNtCi0JICAgdG8gcHJvdmlkZSBhIGR1bW15IHJlYWQgZnVuY3Rpb24gaWYgdGhpcyBpcyBub3QgdHJpZ2dlcmluZyBvbgotCSAgIHRoZSBkYXRhIHJlYWR5IGZ1bmN0aW9uIGJ1dCBzb21ldGhpbmcgZWxzZSBpcy4KLQkqLwogCXN0LT5pbnRlciA9IDA7CisJaWlvX3N3X3RyaWdnZXJfYmhfdG9fcmluZyh3b3JrX3MpOworfQogCi0JaWYgKHN0LT5pbmRpb19kZXYtPnNjYW5fY291bnQpCi0JCWlmIChsaXMzbDAyZHFfcmVhZF9hbGwoc3QsIHJ4X2FycmF5KSA+PSAwKQotCQkJZm9yICg7IGkgPCBzdC0+aW5kaW9fZGV2LT5zY2FuX2NvdW50OyBpKyspCi0JCQkJZGF0YVtpXSA9IGNvbWJpbmVfOF90b18xNihyeF9hcnJheVtpKjQrMV0sCi0JCQkJCQkJICByeF9hcnJheVtpKjQrM10pOwotCS8qIEd1YXJhbnRlZWQgdG8gYmUgYWxpZ25lZCB3aXRoIDggYnl0ZSBib3VuZGFyeSAqLwotCWlmIChzdC0+aW5kaW9fZGV2LT5zY2FuX3RpbWVzdGFtcCkKLQkJKigoczY0ICopKGRhdGEgKyAoKGkgKyAzKS80KSo0KSkgPSBzdC0+bGFzdF90aW1lc3RhbXA7CitzdGF0aWMgaW50IGxpczNsMDJkcV9nZXRfcmluZ19lbGVtZW50KHN0cnVjdCBpaW9fc3dfcmluZ19oZWxwZXJfc3RhdGUgKmgsCisJCQkJdTggKmJ1ZikKK3sKKwlpbnQgcmV0LCBpOworCXU4ICpyeF9hcnJheSA7CisJczE2ICpkYXRhID0gKHMxNiAqKWJ1ZjsKIAotCXN0LT5pbmRpb19kZXYtPnJpbmctPmFjY2Vzcy5zdG9yZV90byhzdC0+aW5kaW9fZGV2LT5yaW5nLAotCQkJCQkgICAgKHU4ICopZGF0YSwKLQkJCQkJICAgIHN0LT5sYXN0X3RpbWVzdGFtcCk7Ci0KLQlpaW9fdHJpZ2dlcl9ub3RpZnlfZG9uZShzdC0+aW5kaW9fZGV2LT50cmlnKTsKKwlyeF9hcnJheSA9IGt6YWxsb2MoNCAqIChoLT5pbmRpb19kZXYtPnNjYW5fY291bnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAocnhfYXJyYXkgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0ID0gbGlzM2wwMmRxX3JlYWRfYWxsKGxpczNsMDJkcV9oX3RvX3MoaCksIHJ4X2FycmF5KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlmb3IgKGkgPSAwOyBpIDwgaC0+aW5kaW9fZGV2LT5zY2FuX2NvdW50OyBpKyspCisJCWRhdGFbaV0gPSBjb21iaW5lXzhfdG9fMTYocnhfYXJyYXlbaSo0KzFdLAorCQkJCQlyeF9hcnJheVtpKjQrM10pOwogCWtmcmVlKHJ4X2FycmF5KTsKLQlrZnJlZShkYXRhKTsKIAotCXJldHVybjsKKwlyZXR1cm4gaSpzaXplb2YoZGF0YVswXSk7CiB9Ci0vKiBpbiB0aGVzZSBjaXJjdW1zdGFuY2VzIGlzIGl0IGJldHRlciB0byBnbyB3aXRoIHVuYWxpZ25lZCBwYWNraW5nIGFuZAotICogZGVhbCB3aXRoIHRoZSBjb3N0PyovCi1zdGF0aWMgaW50IGxpczNsMDJkcV9kYXRhX3JkeV9yaW5nX3ByZWVuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotCXNpemVfdCBzaXplOwotCS8qIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2NhbiBlbGVtZW50cyBlbmFibGVkLCBpZiBub3QgZmFpbCovCi0JaWYgKCEoaW5kaW9fZGV2LT5zY2FuX2NvdW50IHx8IGluZGlvX2Rldi0+c2Nhbl90aW1lc3RhbXApKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChpbmRpb19kZXYtPnJpbmctPmFjY2Vzcy5zZXRfYnBkKSB7Ci0JCWlmIChpbmRpb19kZXYtPnNjYW5fdGltZXN0YW1wKQotCQkJaWYgKGluZGlvX2Rldi0+c2Nhbl9jb3VudCkgLyogVGltZXN0YW1wIGFuZCBkYXRhICovCi0JCQkJc2l6ZSA9IDIqc2l6ZW9mKHM2NCk7Ci0JCQllbHNlIC8qIFRpbWVzdGFtcCBvbmx5ICAqLwotCQkJCXNpemUgPSBzaXplb2YoczY0KTsKLQkJZWxzZSAvKiBEYXRhIG9ubHkgKi8KLQkJCXNpemUgPSBpbmRpb19kZXYtPnNjYW5fY291bnQqc2l6ZW9mKHMxNik7Ci0JCWluZGlvX2Rldi0+cmluZy0+YWNjZXNzLnNldF9icGQoaW5kaW9fZGV2LT5yaW5nLCBzaXplKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBsaXMzbDAyZHFfZGF0YV9yZHlfcmluZ19wb3N0ZW5hYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCi17Ci0JcmV0dXJuIGluZGlvX2Rldi0+dHJpZwotCQk/IGlpb190cmlnZ2VyX2F0dGFjaF9wb2xsX2Z1bmMoaW5kaW9fZGV2LT50cmlnLAotCQkJCQkgICAgICAgaW5kaW9fZGV2LT5wb2xsZnVuYykKLQkJOiAwOwotfQotCi1zdGF0aWMgaW50IGxpczNsMDJkcV9kYXRhX3JkeV9yaW5nX3ByZWRpc2FibGUoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKLXsKLQlyZXR1cm4gaW5kaW9fZGV2LT50cmlnCi0JCT8gaWlvX3RyaWdnZXJfZGV0dGFjaF9wb2xsX2Z1bmMoaW5kaW9fZGV2LT50cmlnLAotCQkJCQkJaW5kaW9fZGV2LT5wb2xsZnVuYykKLQkJOiAwOwotfQotCiAKIC8qIENhbGxlciByZXNwb25zaWJsZSBmb3IgbG9ja2luZyBhcyBuZWNlc3NhcnkuICovCiBzdGF0aWMgaW50CkBAIC00MjcsNyArMzY0LDcgQEAKIAlzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdCA9IHRyaWctPnByaXZhdGVfZGF0YTsKIAlpbnQgcmV0ID0gMDsKIAl1OCB0OwotCV9fbGlzM2wwMmRxX3dyaXRlX2RhdGFfcmVhZHlfY29uZmlnKCZzdC0+aW5kaW9fZGV2LT5kZXYsCisJX19saXMzbDAyZHFfd3JpdGVfZGF0YV9yZWFkeV9jb25maWcoJnN0LT5oZWxwLmluZGlvX2Rldi0+ZGV2LAogCQkJCQkgICAgJmlpb19ldmVudF9kYXRhX3JkeV90cmlnLAogCQkJCQkgICAgc3RhdGUpOwogCWlmIChzdGF0ZSA9PSBmYWxzZSkgewpAQCAtNDM3LDcgKzM3NCw3IEBACiAJCS8qIENsZWFyIGFueSBvdXRzdGFuZGluZyByZWFkeSBldmVudHMgKi8KIAkJcmV0ID0gbGlzM2wwMmRxX3JlYWRfYWxsKHN0LCBOVUxMKTsKIAl9Ci0JbGlzM2wwMmRxX3NwaV9yZWFkX3JlZ184KCZzdC0+aW5kaW9fZGV2LT5kZXYsCisJbGlzM2wwMmRxX3NwaV9yZWFkX3JlZ184KCZzdC0+aGVscC5pbmRpb19kZXYtPmRldiwKIAkJCQkgTElTM0wwMkRRX1JFR19XQUtFX1VQX1NSQ19BRERSLAogCQkJCSAmdCk7CiAJcmV0dXJuIHJldDsKQEAgLTQ5NSwxNCArNDMyLDE0IEBACiAJaWYgKCFzdGF0ZS0+dHJpZykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlzdGF0ZS0+dHJpZy0+bmFtZSA9IGttYWxsb2MoSUlPX1RSSUdHRVJfTkFNRV9MRU5HVEgsIEdGUF9LRVJORUwpOworCXN0YXRlLT50cmlnLT5uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsCisJCQkJICAgICAgImxpczNsMDJkcS1kZXYlZCIsCisJCQkJICAgICAgaW5kaW9fZGV2LT5pZCk7CiAJaWYgKCFzdGF0ZS0+dHJpZy0+bmFtZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX2ZyZWVfdHJpZzsKIAl9Ci0Jc25wcmludGYoKGNoYXIgKilzdGF0ZS0+dHJpZy0+bmFtZSwKLQkJIElJT19UUklHR0VSX05BTUVfTEVOR1RILAotCQkgImxpczNsMDJkcS1kZXYlZCIsIGluZGlvX2Rldi0+aWQpOworCiAJc3RhdGUtPnRyaWctPmRldi5wYXJlbnQgPSAmc3RhdGUtPnVzLT5kZXY7CiAJc3RhdGUtPnRyaWctPm93bmVyID0gVEhJU19NT0RVTEU7CiAJc3RhdGUtPnRyaWctPnByaXZhdGVfZGF0YSA9IHN0YXRlOwpAQCAtNTQwLDEyICs0NzcsMTIgQEAKIAogaW50IGxpczNsMDJkcV9jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogewotCWludCByZXQgPSAwOwotCXN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgKnN0ID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKLQlzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nOwotCUlOSVRfV09SSygmc3QtPndvcmtfdHJpZ2dlcl90b19yaW5nLCBsaXMzbDAyZHFfdHJpZ2dlcl9iaF90b19yaW5nKTsKLQkvKiBTZXQgZGVmYXVsdCBzY2FuIG1vZGUgKi8KKwlpbnQgcmV0OworCXN0cnVjdCBpaW9fc3dfcmluZ19oZWxwZXJfc3RhdGUgKmggPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CiAKKwlJTklUX1dPUksoJmgtPndvcmtfdHJpZ2dlcl90b19yaW5nLCBsaXMzbDAyZHFfdHJpZ2dlcl9iaF90b19yaW5nKTsKKwkvKiBTZXQgZGVmYXVsdCBzY2FuIG1vZGUgKi8KKwloLT5nZXRfcmluZ19lbGVtZW50ID0gJmxpczNsMDJkcV9nZXRfcmluZ19lbGVtZW50OwogCWlpb19zY2FuX21hc2tfc2V0KGluZGlvX2RldiwgaWlvX3NjYW5fZWxfYWNjZWxfeC5udW1iZXIpOwogCWlpb19zY2FuX21hc2tfc2V0KGluZGlvX2RldiwgaWlvX3NjYW5fZWxfYWNjZWxfeS5udW1iZXIpOwogCWlpb19zY2FuX21hc2tfc2V0KGluZGlvX2RldiwgaWlvX3NjYW5fZWxfYWNjZWxfei5udW1iZXIpOwpAQCAtNTUzLDI2ICs0OTAsMjEgQEAKIAogCWluZGlvX2Rldi0+c2Nhbl9lbF9hdHRycyA9ICZsaXMzbDAyZHFfc2Nhbl9lbF9ncm91cDsKIAotCXJpbmcgPSBpaW9fc3dfcmJfYWxsb2NhdGUoaW5kaW9fZGV2KTsKLQlpZiAoIXJpbmcpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JaW5kaW9fZGV2LT5yaW5nID0gcmluZzsKLQkvKiBFZmZlY3RpdmVseSBzZWxlY3QgdGhlIHJpbmcgYnVmZmVyIGltcGxlbWVudGF0aW9uICovCi0JaWlvX3Jpbmdfc3dfcmVnaXN0ZXJfZnVuY3MoJnJpbmctPmFjY2Vzcyk7Ci0JcmluZy0+cHJlZW5hYmxlID0gJmxpczNsMDJkcV9kYXRhX3JkeV9yaW5nX3ByZWVuYWJsZTsKLQlyaW5nLT5wb3N0ZW5hYmxlID0gJmxpczNsMDJkcV9kYXRhX3JkeV9yaW5nX3Bvc3RlbmFibGU7Ci0JcmluZy0+cHJlZGlzYWJsZSA9ICZsaXMzbDAyZHFfZGF0YV9yZHlfcmluZ19wcmVkaXNhYmxlOwotCXJpbmctPm93bmVyID0gVEhJU19NT0RVTEU7CisJaW5kaW9fZGV2LT5yaW5nID0gaWlvX3N3X3JiX2FsbG9jYXRlKGluZGlvX2Rldik7CisJaWYgKCFpbmRpb19kZXYtPnJpbmcpCisJCXJldHVybiAtRU5PTUVNOwogCi0JaW5kaW9fZGV2LT5wb2xsZnVuYyA9IGt6YWxsb2Moc2l6ZW9mKCppbmRpb19kZXYtPnBvbGxmdW5jKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGluZGlvX2Rldi0+cG9sbGZ1bmMgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOworCS8qIEVmZmVjdGl2ZWx5IHNlbGVjdCB0aGUgcmluZyBidWZmZXIgaW1wbGVtZW50YXRpb24gKi8KKwlpaW9fcmluZ19zd19yZWdpc3Rlcl9mdW5jcygmaW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3MpOworCWluZGlvX2Rldi0+cmluZy0+YnBlID0gMjsKKwlpbmRpb19kZXYtPnJpbmctPnByZWVuYWJsZSA9ICZpaW9fc3dfcmluZ19wcmVlbmFibGU7CisJaW5kaW9fZGV2LT5yaW5nLT5wb3N0ZW5hYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wb3N0ZW5hYmxlOworCWluZGlvX2Rldi0+cmluZy0+cHJlZGlzYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcHJlZGlzYWJsZTsKKwlpbmRpb19kZXYtPnJpbmctPm93bmVyID0gVEhJU19NT0RVTEU7CisKKwlyZXQgPSBpaW9fYWxsb2NfcG9sbGZ1bmMoaW5kaW9fZGV2LCBOVUxMLCAmbGlzM2wwMmRxX3BvbGxfZnVuY190aCk7CisJaWYgKHJldCkKIAkJZ290byBlcnJvcl9paW9fc3dfcmJfZnJlZTs7Ci0JfQotCWluZGlvX2Rldi0+cG9sbGZ1bmMtPnBvbGxfZnVuY19tYWluID0gJmxpczNsMDJkcV9wb2xsX2Z1bmNfdGg7Ci0JaW5kaW9fZGV2LT5wb2xsZnVuYy0+cHJpdmF0ZV9kYXRhID0gaW5kaW9fZGV2OwogCWluZGlvX2Rldi0+bW9kZXMgfD0gSU5ESU9fUklOR19UUklHR0VSRUQ7CiAJcmV0dXJuIDA7CiAKQEAgLTU4MCwyMyArNTEyLDMgQEAKIAlpaW9fc3dfcmJfZnJlZShpbmRpb19kZXYtPnJpbmcpOwogCXJldHVybiByZXQ7CiB9Ci0KLWludCBsaXMzbDAyZHFfaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpCi17Ci0JcmV0dXJuIGlpb19yaW5nX2J1ZmZlcl9yZWdpc3RlcihyaW5nLCAwKTsKLX0KLQotdm9pZCBsaXMzbDAyZHFfdW5pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKLXsKLQlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihyaW5nKTsKLX0KLQotaW50IGxpczNsMDJkcV9zZXRfcmluZ19sZW5ndGgoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwgaW50IGxlbmd0aCkKLXsKLQkvKiBTZXQgc2Vuc2libGUgZGVmYXVsdHMgZm9yIHRoZSByaW5nIGJ1ZmZlciAqLwotCWlmIChpbmRpb19kZXYtPnJpbmctPmFjY2Vzcy5zZXRfbGVuZ3RoKQotCQlyZXR1cm4gaW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3Muc2V0X2xlbmd0aChpbmRpb19kZXYtPnJpbmcsIDUwMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9zY2EzMDAwLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL3NjYTMwMDAuaAppbmRleCBlNTMyMTk5Li4wOWQ5NDcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL3NjYTMwMDAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL3NjYTMwMDAuaApAQCAtMjQyLDcgKzI0Miw3IEBACiAJdmFsIHw9ICh2YWwgJiAoMSA8PCAxMikpID8gMHhFMDAwIDogMDsKIAogCXJldHVybiB2YWw7Ci19OworfQogCiBzdGF0aWMgaW5saW5lIGludCBzY2EzMDAwXzEzYml0X2NvbnZlcnQodWludDhfdCBtc2IsIHVpbnQ4X3QgbHNiKQogewpAQCAtMjUzLDcgKzI1Myw3IEBACiAJdmFsIHw9ICh2YWwgJiAoMSA8PCAxMikpID8gMHhFMDAwIDogMDsKIAogCXJldHVybiB2YWw7Ci19OworfQogCiAKICNpZmRlZiBDT05GSUdfSUlPX1JJTkdfQlVGRkVSCkBAIC0yODYsMTUgKzI4NiwxOSBAQAogdm9pZCBzY2EzMDAwX3JpbmdfaW50X3Byb2Nlc3ModTggdmFsLCBzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKTsKIAogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBzY2EzMDAwX3JlZ2lzdGVyX3JpbmdfZnVuY3Moc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldikge307CitzdGF0aWMgaW5saW5lIHZvaWQgc2NhMzAwMF9yZWdpc3Rlcl9yaW5nX2Z1bmNzKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCit7Cit9CiAKIHN0YXRpYyBpbmxpbmUKIGludCBzY2EzMDAwX3JlZ2lzdGVyX3JpbmdfYWNjZXNzX2FuZF9pbml0KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7CiAJcmV0dXJuIDA7Ci19OworfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2NhMzAwMF9yaW5nX2ludF9wcm9jZXNzKHU4IHZhbCwgdm9pZCAqcmluZykge307CitzdGF0aWMgaW5saW5lIHZvaWQgc2NhMzAwMF9yaW5nX2ludF9wcm9jZXNzKHU4IHZhbCwgdm9pZCAqcmluZykKK3sKK30KIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvc2NhMzAwMF9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL3NjYTMwMDBfY29yZS5jCmluZGV4IGQ0ZjgyYzM5Li5iNzhiNmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL3NjYTMwMDBfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvc2NhMzAwMF9jb3JlLmMKQEAgLTM4Nyw3ICszODcsNyBAQAogCWNhc2UgU0NBMzAwMF9PUF9NT0RFX0JZUEFTUzoKIAkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiLCAxIC0gYnlwYXNzIG1vZGUiKTsKIAkJYnJlYWs7Ci0JfTsKKwl9CiAJc3dpdGNoIChzdC0+aW5mby0+b3B0aW9uX21vZGVfMikgewogCWNhc2UgU0NBMzAwMF9PUF9NT0RFX1dJREU6CiAJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiwgMiAtIHdpZGUgbW9kZSIpOwpAQCAtNDMzLDcgKzQzMyw3IEBACiAJCWNhc2UgU0NBMzAwMF9PUF9NT0RFX0JZUEFTUzoKIAkJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIjEgLSBieXBhc3MgbW9kZVxuIik7CiAJCQlicmVhazsKLQkJfTsKKwkJfQogCQlicmVhazsKIAljYXNlIFNDQTMwMDBfTUVBU19NT0RFX09QXzI6CiAJCXN3aXRjaCAoc3QtPmluZm8tPm9wdGlvbl9tb2RlXzIpIHsKQEAgLTQ0Miw3ICs0NDIsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7Ci0JfTsKKwl9CiAKIGVycm9yX3JldDoKIAltdXRleF91bmxvY2soJnN0LT5sb2NrKTsKQEAgLTU1OSw3ICs1NTksNyBAQAogCQkJICAgICAgIHN0LT5pbmZvLT5vcHRpb25fbW9kZV8yX2ZyZXEvMiwKIAkJCSAgICAgICBzdC0+aW5mby0+b3B0aW9uX21vZGVfMl9mcmVxLzQpOwogCQlicmVhazsKLQl9OworCX0KIAlrZnJlZShyeCk7CiAJcmV0dXJuIGxlbjsKIGVycm9yX3JldDoKQEAgLTU5MCw3ICs1OTAsNyBAQAogCWNhc2UgU0NBMzAwMF9NRUFTX01PREVfT1BfMjoKIAkJKmJhc2VfZnJlcSA9IGluZm8tPm9wdGlvbl9tb2RlXzJfZnJlcTsKIAkJYnJlYWs7Ci0JfTsKKwl9CiAJa2ZyZWUocngpOwogZXJyb3JfcmV0OgogCXJldHVybiByZXQ7CkBAIC02MjcsOCArNjI3LDggQEAKIAkJY2FzZSAweDAyOgogCQkJbGVuID0gc3ByaW50ZihidWYsICIlZFxuIiwgYmFzZV9mcmVxLzQpOwogCQkJYnJlYWs7Ci0JfTsKLQkJCWtmcmVlKHJ4KTsKKwl9CisJa2ZyZWUocngpOwogCXJldHVybiBsZW47CiBlcnJvcl9yZXRfbXV0OgogCW11dGV4X3VubG9jaygmc3QtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9NYWtlZmlsZQppbmRleCAxOGM5Mzc2Li42ODg1MTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLQorIwogIyBNYWtlZmlsZSBmb3IgaW5kdXN0cmlhbCBJL08gQURDIGRyaXZlcnMKICMKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWRjLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZGMuaAppbmRleCAwNGViMTZmLi43ODQxZTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZGMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZGMuaApAQCAtMjYsMyArMjYsNiBAQAogCQkJICAgICAgX3Nob3csCQkJCQlcCiAJCQkgICAgICBOVUxMLAkJCQkJXAogCQkJICAgICAgX2FkZHIpCisKKyNkZWZpbmUgSUlPX0VWRU5UX0NPREVfSU5fSElHSF9USFJFU0goYSkgKElJT19FVkVOVF9DT0RFX0FEQ19CQVNFICArIGEpCisjZGVmaW5lIElJT19FVkVOVF9DT0RFX0lOX0xPV19USFJFU0goYSkgKElJT19FVkVOVF9DT0RFX0FEQ19CQVNFICArIGEgKyAzMikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL21heDEzNjMuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL21heDEzNjMuaAppbmRleCA3MmNmMzY3Li44ZjBmZTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9tYXgxMzYzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvbWF4MTM2My5oCkBAIC0zMiwxNCArMzIsNiBAQAogCiAvKiBTcGVjaWZpYyB0byB0aGUgbWF4MTM2MyAqLwogI2RlZmluZSBNQVgxMzYzX01PTl9SRVNFVF9DSEFOKGEpICgxIDw8ICgoYSkgKyA0KSkKLSNkZWZpbmUgTUFYMTM2M19NT05fQ09OVl9SQVRFXzEzM2tzcHMJCTAKLSNkZWZpbmUgTUFYMTM2M19NT05fQ09OVl9SQVRFXzY2XzVrc3BzCQkweDAyCi0jZGVmaW5lIE1BWDEzNjNfTU9OX0NPTlZfUkFURV8zM18za3NwcwkJMHgwNAotI2RlZmluZSBNQVgxMzYzX01PTl9DT05WX1JBVEVfMTZfNmtzcHMJCTB4MDYKLSNkZWZpbmUgTUFYMTM2M19NT05fQ09OVl9SQVRFXzhfM2tzcHMJCTB4MDgKLSNkZWZpbmUgTUFYMTM2M19NT05fQ09OVl9SQVRFXzRfMmtzcHMJCTB4MEEKLSNkZWZpbmUgTUFYMTM2M19NT05fQ09OVl9SQVRFXzJfMGtzcHMJCTB4MEMKLSNkZWZpbmUgTUFYMTM2M19NT05fQ09OVl9SQVRFXzFfMGtzcHMJCTB4MEUKICNkZWZpbmUgTUFYMTM2M19NT05fSU5UX0VOQUJMRQkJCTB4MDEKIAogLyogZGVmaW5lZCBmb3IgcmVhZGFiaWxpdHkgcmVhc29ucyAqLwpAQCAtNjcsOSArNTksOCBAQAogCiAvKioKICAqIHN0cnVjdCBtYXgxMzYzX21vZGUgLSBzY2FuIG1vZGUgaW5mb3JtYXRpb24KLSAqIEBuYW1lOglOYW1lIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHNjYW4gbW9kZS4KICAqIEBjb25mOglUaGUgY29ycmVzcG9uZGluZyB2YWx1ZSBvZiB0aGUgY29uZmlndXJhdGlvbiByZWdpc3RlcgotICogQG51bXZhbHM6CVRoZSBudW1iZXIgb2YgdmFsdWVzIHJldHVybmVkIGJ5IGEgc2luZ2xlIHNjYW4KKyAqIEBtb2RlbWFzazoJQml0IG1hc2sgY29ycmVzcG9uZGluZyB0byBjaGFubmVscyBlbmFibGVkIGluIHRoaXMgbW9kZQogICovCiBzdHJ1Y3QgbWF4MTM2M19tb2RlIHsKIAlpbnQ4X3QJCWNvbmY7CkBAIC0xMjIsMTUgKzExMyw2IEBACiAJCQkubW9kZW1hc2sgPSBfbWFzawkJCQlcCiB9CiAKLS8qIE5vdCBjdXJyZW50bHkgaGFuZGxlZCAqLwotI2RlZmluZSBNQVgxMzYzX01PREVfTU9OSVRPUiB7CQkJCQlcCi0JCS5uYW1lID0gIm1vbml0b3IiLAkJCQlcCi0JCQkuY29uZiA9IE1BWDEzNjNfQ0hBTk5FTF9TRUwoMykJCVwKLQkJCXwgTUFYMTM2M19DT05GSUdfU0NBTl9NT05JVE9SX01PREUJXAotCQkJfCBNQVgxMzYzX0NPTkZJR19TRSwJCQlcCi0JCQkubnVtdmFscyA9IDEwLAkJCQlcCi0JCX0KLQogLyogVGhpcyBtYXkgc2VlbSBhbiBvdmVybHkgbG9uZyB3aW5kZWQgd2F5IHRvIGRvIHRoaXMsIGJ1dCBhdCBsZWFzdCBpdCBtYWtlcwogICogY2xlYXIgd2hhdCBhbGwgdGhlIHZhcmlvdXMgb3B0aW9ucyBhY3R1YWxseSBkby4gQWx0ZXJuYXRpdmUgc3VnZ2VzdGlvbnMKICAqIHRoYXQgZG9uJ3QgcmVxdWlyZSB1c2VyIHRvIGhhdmUgaW50aW1hdGUga25vd2xlZGdlIG9mIHRoZSBjaGlwIHdlbGNvbWVkLgpAQCAtMTQ3LDcgKzEyOSw3IEBACiAJbWF4MTM2M19pbjFtaW4wLCBtYXgxMzYzX2luM21pbjIsCiAJbWF4MTM2M19pbjVtaW40LCBtYXgxMzYzX2luN21pbjYsCiAJbWF4MTM2M19pbjltaW44LCBtYXgxMzYzX2luMTFtaW4xMCwKLQl9OworfTsKIAogLyogVGhpcyBtdXN0IGJlIG1haW50YWluZWQgYWxvbmcgc2lkZSB0aGUgbWF4MTM2M19tb2RlX3RhYmxlIGluIG1heDEzNjNfY29yZSAqLwogZW51bSBtYXgxMzYzX21vZGVzIHsKQEAgLTE3OSw3ICsxNjEsNiBAQAogICogQGRlZmF1bHRfbW9kZToJdGhlIHNjYW4gbW9kZSBpbiB3aGljaCB0aGUgY2hpcCBzdGFydHMgdXAKICAqLwogc3RydWN0IG1heDEzNjNfY2hpcF9pbmZvIHsKLQljb25zdCBjaGFyCQkJKm5hbWU7CiAJdTgJCQkJbnVtX2lucHV0czsKIAl1OAkJCQliaXRzOwogCXUxNgkJCQlpbnRfdnJlZl9tdjsKQEAgLTE5MSw3ICsxNzIsNiBAQAogCXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAJCSpzY2FuX2F0dHJzOwogfTsKIAotCiAvKioKICAqIHN0cnVjdCBtYXgxMzYzX3N0YXRlIC0gZHJpdmVyIGluc3RhbmNlIHNwZWNpZmljIGRhdGEKICAqIEBpbmRpb19kZXY6CQl0aGUgaW5kdXN0cmlhbCBJL08gZGV2aWNlCkBAIC0yMDQsMTIgKzE4NCwyMCBAQAogICogQHBvbGxfd29yazoJCWJvdHRvbSBoYWxmIG9mIHBvbGxpbmcgaW50ZXJydXB0IGhhbmRsZXIKICAqIEBwcm90ZWN0X3Jpbmc6CXVzZWQgdG8gZW5zdXJlIG9ubHkgb25lIHBvbGxpbmcgYmggcnVubmluZyBhdCBhIHRpbWUKICAqIEByZWc6CQlzdXBwbHkgcmVndWxhdG9yCisgKiBAbW9uaXRvcl9vbjoJCXdoZXRoZXIgbW9uaXRvciBtb2RlIGlzIGVuYWJsZWQKKyAqIEBtb25pdG9yX3NwZWVkOglwYXJhbWV0ZXIgY29ycmVzcG9uZGluZyB0byBkZXZpY2UgbW9uaXRvciBzcGVlZCBzZXR0aW5nCisgKiBAbWFza19oaWdoOgkJYml0bWFzayBmb3IgZW5hYmxlZCBoaWdoIHRocmVzaG9sZHMKKyAqIEBtYXNrX2xvdzoJCWJpdG1hc2sgZm9yIGVuYWJsZWQgbG93IHRocmVzaG9sZHMKKyAqIEB0aHJlc2hfaGlnaDoJaGlnaCB0aHJlc2hvbGQgdmFsdWVzCisgKiBAdGhyZXNoX2xvdzoJCWxvdyB0aHJlc2hvbGQgdmFsdWVzCisgKiBAbGFzdF90aW1lc3RhbXA6CXRpbWVzdGFtcCBvZiBsYXN0IGV2ZW50IGludGVycnVwdAorICogQHRocmVzaF93b3JrOgliaCB3b3JrIHN0cnVjdHVyZSBmb3IgZXZlbnQgaGFuZGxpbmcKICAqLwogc3RydWN0IG1heDEzNjNfc3RhdGUgewogCXN0cnVjdCBpaW9fZGV2CQkJKmluZGlvX2RldjsKIAlzdHJ1Y3QgaTJjX2NsaWVudAkJKmNsaWVudDsKLQljaGFyCQkJCXNldHVwYnl0ZTsKLQljaGFyCQkJCWNvbmZpZ2J5dGU7CisJdTgJCQkJc2V0dXBieXRlOworCXU4CQkJCWNvbmZpZ2J5dGU7CiAJY29uc3Qgc3RydWN0IG1heDEzNjNfY2hpcF9pbmZvCSpjaGlwX2luZm87CiAJY29uc3Qgc3RydWN0IG1heDEzNjNfbW9kZQkqY3VycmVudF9tb2RlOwogCXUzMgkJCQlyZXF1ZXN0ZWRtYXNrOwpAQCAtMjE3LDYgKzIwNSwxOCBAQAogCWF0b21pY190CQkJcHJvdGVjdF9yaW5nOwogCXN0cnVjdCBpaW9fdHJpZ2dlcgkJKnRyaWc7CiAJc3RydWN0IHJlZ3VsYXRvcgkJKnJlZzsKKworCS8qIFVzaW5nIG1vbml0b3IgbW9kZXMgYW5kIGJ1ZmZlciBhdCB0aGUgc2FtZSB0aW1lIGlzCisJICAgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgKi8KKwlib29sCQkJCW1vbml0b3Jfb247CisJdW5zaWduZWQgaW50CQkJbW9uaXRvcl9zcGVlZDozOworCXU4CQkJCW1hc2tfaGlnaDsKKwl1OAkJCQltYXNrX2xvdzsKKwkvKiA0eCB1bmlwb2xhciBmaXJzdCB0aGVuIHRoZSBmb3VycyBiaXBvbGFyIG9uZXMgKi8KKwlzMTYJCQkJdGhyZXNoX2hpZ2hbOF07CisJczE2CQkJCXRocmVzaF9sb3dbOF07CisJczY0CQkJCWxhc3RfdGltZXN0YW1wOworCXN0cnVjdCB3b3JrX3N0cnVjdAkJdGhyZXNoX3dvcms7CiB9OwogCiBjb25zdCBzdHJ1Y3QgbWF4MTM2M19tb2RlCkBAIC0yMzAsMzIgKzIzMCwyMSBAQAogaW50IG1heDEzNjNfcmVnaXN0ZXJfcmluZ19mdW5jc19hbmRfaW5pdChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKIHZvaWQgbWF4MTM2M19yaW5nX2NsZWFudXAoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CiAKLWludCBtYXgxMzYzX2luaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKTsKLXZvaWQgbWF4MTM2M191bmluaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKTsKLQogI2Vsc2UgLyogQ09ORklHX01BWDEzNjNfUklOR19CVUZGRVIgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIG1heDEzNjNfdW5pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKLXsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1heDEzNjNfaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpCi17Ci0JcmV0dXJuIDA7Ci19OwotCiBpbnQgbWF4MTM2M19zaW5nbGVfY2hhbm5lbF9mcm9tX3JpbmcobG9uZyBtYXNrLCBzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QpCiB7CiAJcmV0dXJuIC1FSU5WQUw7Ci19OwotCit9CiAKIHN0YXRpYyBpbmxpbmUgaW50CiBtYXgxMzYzX3JlZ2lzdGVyX3JpbmdfZnVuY3NfYW5kX2luaXQoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlyZXR1cm4gMDsKLX07Cit9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtYXgxMzYzX3JpbmdfY2xlYW51cChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KSB7fTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXgxMzYzX3JpbmdfY2xlYW51cChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQoreworfQogI2VuZGlmIC8qIENPTkZJR19NQVgxMzYzX1JJTkdfQlVGRkVSICovCiAjZW5kaWYgLyogX01BWDEzNjNfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL21heDEzNjNfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvbWF4MTM2M19jb3JlLmMKaW5kZXggOTA1Zjg1Ni4uNjQzNWU1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvbWF4MTM2M19jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvbWF4MTM2M19jb3JlLmMKQEAgLTE4LDIxICsxOCwxOSBAQAogICAqCiAgICogTm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZC4KICAgKgotICAqIC0gTW9uaXRvciBpbnRlcnJydXB0IGdlbmVyYXRpb24uCiAgICogLSBDb250cm9sIG9mIGludGVybmFsIHJlZmVyZW5jZS4KICAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9ydGMuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKICNpbmNsdWRlICIuLi9paW8uaCIKICNpbmNsdWRlICIuLi9zeXNmcy5oIgpAQCAtNDgsNyArNDYsNyBAQAogCUlJT19TQ0FOX0VMX0MoaW4jI251bWJlciwgbnVtYmVyLCBJSU9fVU5TSUdORUQoMTYpLCAwLCBOVUxMKTsKICNkZWZpbmUgTUFYMTM2M19TQ0FOX0VMX0QocCwgbiwgbnVtYmVyKQkJCQkJXAogCUlJT19TQ0FOX05BTUVEX0VMX0MoaW4jI3AjI20jI2luIyNuLCBpbiMjcC1pbiMjbiwJCVwKLQkJCW51bWJlciwgSUlPX1NJR05FRCgxNiksIDAgLCBOVUxMKTsKKwkJCW51bWJlciwgSUlPX1NJR05FRCgxNiksIDAsIE5VTEwpOwogCiBzdGF0aWMgTUFYMTM2M19TQ0FOX0VMKDApOwogc3RhdGljIE1BWDEzNjNfU0NBTl9FTCgxKTsKQEAgLTE0OCw3ICsxNDYsNyBAQAogCQkJICAgICAgbWFzaykpCiAJCQkJcmV0dXJuICZtYXgxMzYzX21vZGVfdGFibGVbY2ktPm1vZGVfbGlzdFtpXV07CiAJcmV0dXJuIE5VTEw7Ci19OworfQogCiBzdGF0aWMgc3NpemVfdCBtYXgxMzYzX3Nob3dfcHJlY2lzaW9uKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTE2Nyw3ICsxNjUsNyBAQAogCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgZDIpCiB7CiAJaW50IHJldDsKLQl1OCAqdHhfYnVmID0ga21hbGxvYygyICwgR0ZQX0tFUk5FTCk7CisJdTggKnR4X2J1ZiA9IGttYWxsb2MoMiwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIXR4X2J1ZikKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMDYsNiArMjA0LDE2IEBACiAJbG9uZyBtYXNrOwogCiAJbXV0ZXhfbG9jaygmZGV2X2luZm8tPm1sb2NrKTsKKwkvKgorCSAqIElmIG1vbml0b3IgbW9kZSBpcyBlbmFibGVkLCB0aGUgbWV0aG9kIGZvciByZWFkaW5nIGEgc2luZ2xlCisJICogY2hhbm5lbCB3aWxsIGhhdmUgdG8gYmUgcmF0aGVyIGRpZmZlcmVudCBhbmQgaGFzIG5vdCB5ZXQKKwkgKiBiZWVuIGltcGxlbWVudGVkLgorCSAqLworCWlmIChzdC0+bW9uaXRvcl9vbikgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyb3JfcmV0OworCX0KKwogCS8qIElmIHJpbmcgYnVmZmVyIGNhcHR1cmUgaXMgb2NjdXJpbmcsIHF1ZXJ5IHRoZSBidWZmZXIgKi8KIAlpZiAoaWlvX3JpbmdfZW5hYmxlZChkZXZfaW5mbykpIHsKIAkJbWFzayA9IG1heDEzNjNfbW9kZV90YWJsZVt0aGlzX2F0dHItPmFkZHJlc3NdLm1vZGVtYXNrOwpAQCAtMzA1LDcgKzMxMyw3IEBACiB7CiAJc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IG1heDEzNjNfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHN0LT5jaGlwX2luZm8tPm5hbWUpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBzdC0+Y2xpZW50LT5uYW1lKTsKIH0KIAogc3RhdGljIElJT19ERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBtYXgxMzYzX3Nob3dfbmFtZSwgTlVMTCwgMCk7CkBAIC01NTIsOCArNTYwLDcgQEAKIAogLyogbWF4MTM2MyBhbmQgbWF4MTM2OCB0ZXN0ZWQgLSByZXN0IGZyb20gZGF0YSBzaGVldCAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBtYXgxMzYzX2NoaXBfaW5mbyBtYXgxMzYzX2NoaXBfaW5mb190YmxbXSA9IHsKLQl7Ci0JCS5uYW1lID0gIm1heDEzNjEiLAorCVttYXgxMzYxXSA9IHsKIAkJLm51bV9pbnB1dHMgPSA0LAogCQkuYml0cyA9IDEwLAogCQkuaW50X3ZyZWZfbXYgPSAyMDQ4LApAQCAtNTYzLDggKzU3MCw4IEBACiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvMywKIAkJLmRldl9hdHRycyA9ICZtYXgxMzYzX2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMzYzX3NjYW5fZWxfZ3JvdXAsCi0JfSwgewotCQkubmFtZSA9ICJtYXgxMzYyIiwKKwl9LAorCVttYXgxMzYyXSA9IHsKIAkJLm51bV9pbnB1dHMgPSA0LAogCQkuYml0cyA9IDEwLAogCQkuaW50X3ZyZWZfbXYgPSA0MDk2LApAQCAtNTc0LDggKzU4MSw4IEBACiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvMywKIAkJLmRldl9hdHRycyA9ICZtYXgxMzYzX2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMzYzX3NjYW5fZWxfZ3JvdXAsCi0JfSwgewotCQkubmFtZSA9ICJtYXgxMzYzIiwKKwl9LAorCVttYXgxMzYzXSA9IHsKIAkJLm51bV9pbnB1dHMgPSA0LAogCQkuYml0cyA9IDEyLAogCQkuaW50X3ZyZWZfbXYgPSAyMDQ4LApAQCAtNTg1LDggKzU5Miw4IEBACiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvMywKIAkJLmRldl9hdHRycyA9ICZtYXgxMzYzX2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMzYzX3NjYW5fZWxfZ3JvdXAsCi0JfSwgewotCQkubmFtZSA9ICJtYXgxMzY0IiwKKwl9LAorCVttYXgxMzY0XSA9IHsKIAkJLm51bV9pbnB1dHMgPSA0LAogCQkuYml0cyA9IDEyLAogCQkuaW50X3ZyZWZfbXYgPSA0MDk2LApAQCAtNTk2LDggKzYwMyw4IEBACiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvMywKIAkJLmRldl9hdHRycyA9ICZtYXgxMzYzX2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMzYzX3NjYW5fZWxfZ3JvdXAsCi0JfSwgewotCQkubmFtZSA9ICJtYXgxMDM2IiwKKwl9LAorCVttYXgxMDM2XSA9IHsKIAkJLm51bV9pbnB1dHMgPSA0LAogCQkuYml0cyA9IDgsCiAJCS5pbnRfdnJlZl9tdiA9IDQwOTYsCkBAIC02MDYsOCArNjEzLDggQEAKIAkJLmRlZmF1bHRfbW9kZSA9IHMwdG8zLAogCQkuZGV2X2F0dHJzID0gJm1heDEzNjNfZGV2X2F0dHJfZ3JvdXAsCiAJCS5zY2FuX2F0dHJzID0gJm1heDEzNjNfc2Nhbl9lbF9ncm91cCwKLQl9LCB7Ci0JCS5uYW1lID0gIm1heDEwMzciLAorCX0sCisJW21heDEwMzddID0gewogCQkubnVtX2lucHV0cyA9IDQsCiAJCS5iaXRzID0gOCwKIAkJLmludF92cmVmX212ID0gMjA0OCwKQEAgLTYxNiw4ICs2MjMsOCBAQAogCQkuZGVmYXVsdF9tb2RlID0gczB0bzMsCiAJCS5kZXZfYXR0cnMgPSAmbWF4MTM2M19kZXZfYXR0cl9ncm91cCwKIAkJLnNjYW5fYXR0cnMgPSAmbWF4MTM2M19zY2FuX2VsX2dyb3VwLAotCX0sIHsKLQkJLm5hbWUgPSAibWF4MTAzOCIsCisJfSwKKwlbbWF4MTAzOF0gPSB7CiAJCS5udW1faW5wdXRzID0gMTIsCiAJCS5iaXRzID0gOCwKIAkJLmludF92cmVmX212ID0gNDA5NiwKQEAgLTYyNiw4ICs2MzMsOCBAQAogCQkuZGVmYXVsdF9tb2RlID0gczB0bzExLAogCQkuZGV2X2F0dHJzID0gJm1heDEyMzhfZGV2X2F0dHJfZ3JvdXAsCiAJCS5zY2FuX2F0dHJzID0gJm1heDEyMzhfc2Nhbl9lbF9ncm91cCwKLQl9LCB7Ci0JCS5uYW1lID0gIm1heDEwMzkiLAorCX0sCisJW21heDEwMzldID0gewogCQkubnVtX2lucHV0cyA9IDEyLAogCQkuYml0cyA9IDgsCiAJCS5pbnRfdnJlZl9tdiA9IDIwNDgsCkBAIC02MzYsOCArNjQzLDggQEAKIAkJLmRlZmF1bHRfbW9kZSA9IHMwdG8xMSwKIAkJLmRldl9hdHRycyA9ICZtYXgxMjM4X2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMjM4X3NjYW5fZWxfZ3JvdXAsCi0JfSwgewotCQkubmFtZSA9ICJtYXgxMTM2IiwKKwl9LAorCVttYXgxMTM2XSA9IHsKIAkJLm51bV9pbnB1dHMgPSA0LAogCQkuYml0cyA9IDEwLAogCQkuaW50X3ZyZWZfbXYgPSA0MDk2LApAQCAtNjQ2LDggKzY1Myw4IEBACiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvMywKIAkJLmRldl9hdHRycyA9ICZtYXgxMzYzX2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMzYzX3NjYW5fZWxfZ3JvdXAsCi0JfSwgewotCQkubmFtZSA9ICJtYXgxMTM3IiwKKwl9LAorCVttYXgxMTM3XSA9IHsKIAkJLm51bV9pbnB1dHMgPSA0LAogCQkuYml0cyA9IDEwLAogCQkuaW50X3ZyZWZfbXYgPSAyMDQ4LApAQCAtNjU2LDggKzY2Myw4IEBACiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvMywKIAkJLmRldl9hdHRycyA9ICZtYXgxMzYzX2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMzYzX3NjYW5fZWxfZ3JvdXAsCi0JfSwgewotCQkubmFtZSA9ICJtYXgxMTM4IiwKKwl9LAorCVttYXgxMTM4XSA9IHsKIAkJLm51bV9pbnB1dHMgPSAxMiwKIAkJLmJpdHMgPSAxMCwKIAkJLmludF92cmVmX212ID0gNDA5NiwKQEAgLTY2Niw4ICs2NzMsOCBAQAogCQkuZGVmYXVsdF9tb2RlID0gczB0bzExLAogCQkuZGV2X2F0dHJzID0gJm1heDEyMzhfZGV2X2F0dHJfZ3JvdXAsCiAJCS5zY2FuX2F0dHJzID0gJm1heDEyMzhfc2Nhbl9lbF9ncm91cCwKLQl9LCB7Ci0JCS5uYW1lID0gIm1heDExMzkiLAorCX0sCisJW21heDExMzldID0gewogCQkubnVtX2lucHV0cyA9IDEyLAogCQkuYml0cyA9IDEwLAogCQkuaW50X3ZyZWZfbXYgPSAyMDQ4LApAQCAtNjc2LDggKzY4Myw4IEBACiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvMTEsCiAJCS5kZXZfYXR0cnMgPSAmbWF4MTIzOF9kZXZfYXR0cl9ncm91cCwKIAkJLnNjYW5fYXR0cnMgPSAmbWF4MTIzOF9zY2FuX2VsX2dyb3VwLAotCX0sIHsKLQkJLm5hbWUgPSAibWF4MTIzNiIsCisJfSwKKwlbbWF4MTIzNl0gPSB7CiAJCS5udW1faW5wdXRzID0gNCwKIAkJLmJpdHMgPSAxMiwKIAkJLmludF92cmVmX212ID0gNDA5NiwKQEAgLTY4Niw4ICs2OTMsOCBAQAogCQkuZGVmYXVsdF9tb2RlID0gczB0bzMsCiAJCS5kZXZfYXR0cnMgPSAmbWF4MTM2M19kZXZfYXR0cl9ncm91cCwKIAkJLnNjYW5fYXR0cnMgPSAmbWF4MTM2M19zY2FuX2VsX2dyb3VwLAotCX0sIHsKLQkJLm5hbWUgPSAibWF4MTIzNyIsCisJfSwKKwlbbWF4MTIzN10gPSB7CiAJCS5udW1faW5wdXRzID0gNCwKIAkJLmJpdHMgPSAxMiwKIAkJLmludF92cmVmX212ID0gMjA0OCwKQEAgLTY5Niw4ICs3MDMsOCBAQAogCQkuZGVmYXVsdF9tb2RlID0gczB0bzMsCiAJCS5kZXZfYXR0cnMgPSAmbWF4MTM2M19kZXZfYXR0cl9ncm91cCwKIAkJLnNjYW5fYXR0cnMgPSAmbWF4MTM2M19zY2FuX2VsX2dyb3VwLAotCX0sIHsKLQkJLm5hbWUgPSAibWF4MTIzOCIsCisJfSwKKwlbbWF4MTIzOF0gPSB7CiAJCS5udW1faW5wdXRzID0gMTIsCiAJCS5iaXRzID0gMTIsCiAJCS5pbnRfdnJlZl9tdiA9IDQwOTYsCkBAIC03MDYsOCArNzEzLDggQEAKIAkJLmRlZmF1bHRfbW9kZSA9IHMwdG8xMSwKIAkJLmRldl9hdHRycyA9ICZtYXgxMjM4X2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMjM4X3NjYW5fZWxfZ3JvdXAsCi0JfSwgewotCQkubmFtZSA9ICJtYXgxMjM5IiwKKwl9LAorCVttYXgxMjM5XSA9IHsKIAkJLm51bV9pbnB1dHMgPSAxMiwKIAkJLmJpdHMgPSAxMiwKIAkJLmludF92cmVmX212ID0gMjA0OCwKQEAgLTcxNiw4ICs3MjMsOCBAQAogCQkuZGVmYXVsdF9tb2RlID0gczB0bzExLAogCQkuZGV2X2F0dHJzID0gJm1heDEyMzhfZGV2X2F0dHJfZ3JvdXAsCiAJCS5zY2FuX2F0dHJzID0gJm1heDEyMzhfc2Nhbl9lbF9ncm91cCwKLQl9LCB7Ci0JCS5uYW1lID0gIm1heDExNjAwIiwKKwl9LAorCVttYXgxMTYwMF0gPSB7CiAJCS5udW1faW5wdXRzID0gNCwKIAkJLmJpdHMgPSA4LAogCQkuaW50X3ZyZWZfbXYgPSA0MDk2LApAQCAtNzI2LDggKzczMyw4IEBACiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvMywKIAkJLmRldl9hdHRycyA9ICZtYXgxMzYzX2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMzYzX3NjYW5fZWxfZ3JvdXAsCi0JfSwgewotCQkubmFtZSA9ICJtYXgxMTYwMSIsCisJfSwKKwlbbWF4MTE2MDFdID0gewogCQkubnVtX2lucHV0cyA9IDQsCiAJCS5iaXRzID0gOCwKIAkJLmludF92cmVmX212ID0gMjA0OCwKQEAgLTczNiw4ICs3NDMsOCBAQAogCQkuZGVmYXVsdF9tb2RlID0gczB0bzMsCiAJCS5kZXZfYXR0cnMgPSAmbWF4MTM2M19kZXZfYXR0cl9ncm91cCwKIAkJLnNjYW5fYXR0cnMgPSAmbWF4MTM2M19zY2FuX2VsX2dyb3VwLAotCX0sIHsKLQkJLm5hbWUgPSAibWF4MTE2MDIiLAorCX0sCisJW21heDExNjAyXSA9IHsKIAkJLm51bV9pbnB1dHMgPSA4LAogCQkuYml0cyA9IDgsCiAJCS5pbnRfdnJlZl9tdiA9IDQwOTYsCkBAIC03NDYsOCArNzUzLDggQEAKIAkJLmRlZmF1bHRfbW9kZSA9IHMwdG83LAogCQkuZGV2X2F0dHJzID0gJm1heDExNjA4X2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMTYwOF9zY2FuX2VsX2dyb3VwLAotCX0sIHsKLQkJLm5hbWUgPSAibWF4MTE2MDMiLAorCX0sCisJW21heDExNjAzXSA9IHsKIAkJLm51bV9pbnB1dHMgPSA4LAogCQkuYml0cyA9IDgsCiAJCS5pbnRfdnJlZl9tdiA9IDIwNDgsCkBAIC03NTYsOCArNzYzLDggQEAKIAkJLmRlZmF1bHRfbW9kZSA9IHMwdG83LAogCQkuZGV2X2F0dHJzID0gJm1heDExNjA4X2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMTYwOF9zY2FuX2VsX2dyb3VwLAotCX0sIHsKLQkJLm5hbWUgPSAibWF4MTE2MDQiLAorCX0sCisJW21heDExNjA0XSA9IHsKIAkJLm51bV9pbnB1dHMgPSAxMiwKIAkJLmJpdHMgPSA4LAogCQkuaW50X3ZyZWZfbXYgPSA0MDk4LApAQCAtNzY2LDggKzc3Myw4IEBACiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvMTEsCiAJCS5kZXZfYXR0cnMgPSAmbWF4MTIzOF9kZXZfYXR0cl9ncm91cCwKIAkJLnNjYW5fYXR0cnMgPSAmbWF4MTIzOF9zY2FuX2VsX2dyb3VwLAotCX0sIHsKLQkJLm5hbWUgPSAibWF4MTE2MDUiLAorCX0sCisJW21heDExNjA1XSA9IHsKIAkJLm51bV9pbnB1dHMgPSAxMiwKIAkJLmJpdHMgPSA4LAogCQkuaW50X3ZyZWZfbXYgPSAyMDQ4LApAQCAtNzc2LDggKzc4Myw4IEBACiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvMTEsCiAJCS5kZXZfYXR0cnMgPSAmbWF4MTIzOF9kZXZfYXR0cl9ncm91cCwKIAkJLnNjYW5fYXR0cnMgPSAmbWF4MTIzOF9zY2FuX2VsX2dyb3VwLAotCX0sIHsKLQkJLm5hbWUgPSAibWF4MTE2MDYiLAorCX0sCisJW21heDExNjA2XSA9IHsKIAkJLm51bV9pbnB1dHMgPSA0LAogCQkuYml0cyA9IDEwLAogCQkuaW50X3ZyZWZfbXYgPSA0MDk2LApAQCAtNzg2LDggKzc5Myw4IEBACiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvMywKIAkJLmRldl9hdHRycyA9ICZtYXgxMzYzX2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMzYzX3NjYW5fZWxfZ3JvdXAsCi0JfSwgewotCQkubmFtZSA9ICJtYXgxMTYwNyIsCisJfSwKKwlbbWF4MTE2MDddID0gewogCQkubnVtX2lucHV0cyA9IDQsCiAJCS5iaXRzID0gMTAsCiAJCS5pbnRfdnJlZl9tdiA9IDIwNDgsCkBAIC03OTYsOCArODAzLDggQEAKIAkJLmRlZmF1bHRfbW9kZSA9IHMwdG8zLAogCQkuZGV2X2F0dHJzID0gJm1heDEzNjNfZGV2X2F0dHJfZ3JvdXAsCiAJCS5zY2FuX2F0dHJzID0gJm1heDEzNjNfc2Nhbl9lbF9ncm91cCwKLQl9LCB7Ci0JCS5uYW1lID0gIm1heDExNjA4IiwKKwl9LAorCVttYXgxMTYwOF0gPSB7CiAJCS5udW1faW5wdXRzID0gOCwKIAkJLmJpdHMgPSAxMCwKIAkJLmludF92cmVmX212ID0gNDA5NiwKQEAgLTgwNiw4ICs4MTMsOCBAQAogCQkuZGVmYXVsdF9tb2RlID0gczB0bzcsCiAJCS5kZXZfYXR0cnMgPSAmbWF4MTE2MDhfZGV2X2F0dHJfZ3JvdXAsCiAJCS5zY2FuX2F0dHJzID0gJm1heDExNjA4X3NjYW5fZWxfZ3JvdXAsCi0JfSwgewotCQkubmFtZSA9ICJtYXgxMTYwOSIsCisJfSwKKwlbbWF4MTE2MDldID0gewogCQkubnVtX2lucHV0cyA9IDgsCiAJCS5iaXRzID0gMTAsCiAJCS5pbnRfdnJlZl9tdiA9IDIwNDgsCkBAIC04MTYsOCArODIzLDggQEAKIAkJLmRlZmF1bHRfbW9kZSA9IHMwdG83LAogCQkuZGV2X2F0dHJzID0gJm1heDExNjA4X2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMTYwOF9zY2FuX2VsX2dyb3VwLAotCX0sIHsKLQkJLm5hbWUgPSAibWF4MTE2MTAiLAorCX0sCisJW21heDExNjEwXSA9IHsKIAkJLm51bV9pbnB1dHMgPSAxMiwKIAkJLmJpdHMgPSAxMCwKIAkJLmludF92cmVmX212ID0gNDA5OCwKQEAgLTgyNiw4ICs4MzMsOCBAQAogCQkuZGVmYXVsdF9tb2RlID0gczB0bzExLAogCQkuZGV2X2F0dHJzID0gJm1heDEyMzhfZGV2X2F0dHJfZ3JvdXAsCiAJCS5zY2FuX2F0dHJzID0gJm1heDEyMzhfc2Nhbl9lbF9ncm91cCwKLQl9LCB7Ci0JCS5uYW1lID0gIm1heDExNjExIiwKKwl9LAorCVttYXgxMTYxMV0gPSB7CiAJCS5udW1faW5wdXRzID0gMTIsCiAJCS5iaXRzID0gMTAsCiAJCS5pbnRfdnJlZl9tdiA9IDIwNDgsCkBAIC04MzYsOCArODQzLDggQEAKIAkJLmRlZmF1bHRfbW9kZSA9IHMwdG8xMSwKIAkJLmRldl9hdHRycyA9ICZtYXgxMjM4X2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMjM4X3NjYW5fZWxfZ3JvdXAsCi0JfSwgewotCQkubmFtZSA9ICJtYXgxMTYxMiIsCisJfSwKKwlbbWF4MTE2MTJdID0gewogCQkubnVtX2lucHV0cyA9IDQsCiAJCS5iaXRzID0gMTIsCiAJCS5pbnRfdnJlZl9tdiA9IDQwOTYsCkBAIC04NDYsOCArODUzLDggQEAKIAkJLmRlZmF1bHRfbW9kZSA9IHMwdG8zLAogCQkuZGV2X2F0dHJzID0gJm1heDEzNjNfZGV2X2F0dHJfZ3JvdXAsCiAJCS5zY2FuX2F0dHJzID0gJm1heDEzNjNfc2Nhbl9lbF9ncm91cCwKLQl9LCB7Ci0JCS5uYW1lID0gIm1heDExNjEzIiwKKwl9LAorCVttYXgxMTYxM10gPSB7CiAJCS5udW1faW5wdXRzID0gNCwKIAkJLmJpdHMgPSAxMiwKIAkJLmludF92cmVmX212ID0gMjA0OCwKQEAgLTg1Niw4ICs4NjMsOCBAQAogCQkuZGVmYXVsdF9tb2RlID0gczB0bzMsCiAJCS5kZXZfYXR0cnMgPSAmbWF4MTM2M19kZXZfYXR0cl9ncm91cCwKIAkJLnNjYW5fYXR0cnMgPSAmbWF4MTM2M19zY2FuX2VsX2dyb3VwLAotCX0sIHsKLQkJLm5hbWUgPSAibWF4MTE2MTQiLAorCX0sCisJW21heDExNjE0XSA9IHsKIAkJLm51bV9pbnB1dHMgPSA4LAogCQkuYml0cyA9IDEyLAogCQkuaW50X3ZyZWZfbXYgPSA0MDk2LApAQCAtODY2LDggKzg3Myw4IEBACiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvNywKIAkJLmRldl9hdHRycyA9ICZtYXgxMTYwOF9kZXZfYXR0cl9ncm91cCwKIAkJLnNjYW5fYXR0cnMgPSAmbWF4MTE2MDhfc2Nhbl9lbF9ncm91cCwKLQl9LCB7Ci0JCS5uYW1lID0gIm1heDExNjE1IiwKKwl9LAorCVttYXgxMTYxNV0gPSB7CiAJCS5udW1faW5wdXRzID0gOCwKIAkJLmJpdHMgPSAxMiwKIAkJLmludF92cmVmX212ID0gMjA0OCwKQEAgLTg3Niw4ICs4ODMsOCBAQAogCQkuZGVmYXVsdF9tb2RlID0gczB0bzcsCiAJCS5kZXZfYXR0cnMgPSAmbWF4MTE2MDhfZGV2X2F0dHJfZ3JvdXAsCiAJCS5zY2FuX2F0dHJzID0gJm1heDExNjA4X3NjYW5fZWxfZ3JvdXAsCi0JfSwgewotCQkubmFtZSA9ICJtYXgxMTYxNiIsCisJfSwKKwlbbWF4MTE2MTZdID0gewogCQkubnVtX2lucHV0cyA9IDEyLAogCQkuYml0cyA9IDEyLAogCQkuaW50X3ZyZWZfbXYgPSA0MDk4LApAQCAtODg2LDggKzg5Myw4IEBACiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvMTEsCiAJCS5kZXZfYXR0cnMgPSAmbWF4MTIzOF9kZXZfYXR0cl9ncm91cCwKIAkJLnNjYW5fYXR0cnMgPSAmbWF4MTIzOF9zY2FuX2VsX2dyb3VwLAotCX0sIHsKLQkJLm5hbWUgPSAibWF4MTE2MTciLAorCX0sCisJW21heDExNjE3XSA9IHsKIAkJLm51bV9pbnB1dHMgPSAxMiwKIAkJLmJpdHMgPSAxMiwKIAkJLmludF92cmVmX212ID0gMjA0OCwKQEAgLTg5OSw2ICs5MDYsNjY4IEBACiAJfQogfTsKIAorc3RhdGljIGNvbnN0IGludCBtYXgxMzYzX21vbml0b3Jfc3BlZWRzW10gPSB7IDEzMzAwMCwgNjY1MDAwLCAzMzMwMCwgMTY2MDAsCisJCQkJCSAgICAgIDgzMDAsIDQyMDAsIDIwMDAsIDEwMDAgfTsKKworc3RhdGljIHNzaXplX3QgbWF4MTM2M19tb25pdG9yX3Nob3dfZnJlcShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljaGFyICpidWYpCit7CisJc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1heDEzNjNfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIG1heDEzNjNfbW9uaXRvcl9zcGVlZHNbc3QtPm1vbml0b3Jfc3BlZWRdKTsKK30KKworc3RhdGljIHNzaXplX3QgbWF4MTM2M19tb25pdG9yX3N0b3JlX2ZyZXEoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY29uc3QgY2hhciAqYnVmLAorCQkJCQlzaXplX3QgbGVuKQoreworCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtYXgxMzYzX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoZGV2X2luZm8pOworCWludCBpLCByZXQ7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWF4MTM2M19tb25pdG9yX3NwZWVkcyk7IGkrKykKKwkJaWYgKHZhbCA9PSBtYXgxMzYzX21vbml0b3Jfc3BlZWRzW2ldKSB7CisJCQlmb3VuZCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCWlmICghZm91bmQpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmZGV2X2luZm8tPm1sb2NrKTsKKwlzdC0+bW9uaXRvcl9zcGVlZCA9IGk7CisJbXV0ZXhfdW5sb2NrKCZkZXZfaW5mby0+bWxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBJSU9fREVWX0FUVFJfU0FNUF9GUkVRKFNfSVJVR08gfCBTX0lXVVNSLAorCQkJbWF4MTM2M19tb25pdG9yX3Nob3dfZnJlcSwKKwkJCW1heDEzNjNfbW9uaXRvcl9zdG9yZV9mcmVxKTsKKworc3RhdGljIElJT19DT05TVF9BVFRSKHNhbXBsaW5nX2ZyZXF1ZW5jeV9hdmFpbGFibGUsCisJCSIxMzMwMDAgNjY1MDAwIDMzMzAwIDE2NjAwIDgzMDAgNDIwMCAyMDAwIDEwMDAiKTsKKworc3RhdGljIHNzaXplX3QgbWF4MTM2M19zaG93X3RocmVzaChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY2hhciAqYnVmLAorCQkJCWJvb2wgaGlnaCkKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGRldl9pbmZvKTsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CisKKwlpZiAoaGlnaCkKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsCisJCQlzdC0+dGhyZXNoX2hpZ2hbdGhpc19hdHRyLT5hZGRyZXNzXSk7CisJZWxzZQorCQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwKKwkJCXN0LT50aHJlc2hfbG93W3RoaXNfYXR0ci0+YWRkcmVzcyAmIDB4N10pOworfQorCitzdGF0aWMgc3NpemVfdCBtYXgxMzYzX3Nob3dfdGhyZXNoX2xvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY2hhciAqYnVmKQoreworCXJldHVybiBtYXgxMzYzX3Nob3dfdGhyZXNoKGRldiwgYXR0ciwgYnVmLCBmYWxzZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1heDEzNjNfc2hvd190aHJlc2hfaGlnaChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljaGFyICpidWYpCit7CisJcmV0dXJuIG1heDEzNjNfc2hvd190aHJlc2goZGV2LCBhdHRyLCBidWYsIHRydWUpOworfQorCitzdGF0aWMgc3NpemVfdCBtYXgxMzYzX3N0b3JlX3RocmVzaF91bnNpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljb25zdCBjaGFyICpidWYsCisJCQkJCXNpemVfdCBsZW4sCisJCQkJCWJvb2wgaGlnaCkKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGRldl9pbmZvKTsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IHJldDsKKworCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChyZXQpCisJCXJldHVybiAtRUlOVkFMOworCXN3aXRjaCAoc3QtPmNoaXBfaW5mby0+Yml0cykgeworCWNhc2UgMTA6CisJCWlmICh2YWwgPiAweDNGRikKKwkJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIDEyOgorCQlpZiAodmFsID4gMHhGRkYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChoaWdoKSB7CisJY2FzZSAxOgorCQlzdC0+dGhyZXNoX2hpZ2hbdGhpc19hdHRyLT5hZGRyZXNzXSA9IHZhbDsKKwkJYnJlYWs7CisJY2FzZSAwOgorCQlzdC0+dGhyZXNoX2xvd1t0aGlzX2F0dHItPmFkZHJlc3MgJiAweDddID0gdmFsOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3NpemVfdCBtYXgxMzYzX3N0b3JlX3RocmVzaF9oaWdoX3Vuc2lnbmVkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkJY29uc3QgY2hhciAqYnVmLAorCQkJCQkJc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gbWF4MTM2M19zdG9yZV90aHJlc2hfdW5zaWduZWQoZGV2LCBhdHRyLCBidWYsIGxlbiwgdHJ1ZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1heDEzNjNfc3RvcmVfdGhyZXNoX2xvd191bnNpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJCWNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQkJCXNpemVfdCBsZW4pCit7CisJcmV0dXJuIG1heDEzNjNfc3RvcmVfdGhyZXNoX3Vuc2lnbmVkKGRldiwgYXR0ciwgYnVmLCBsZW4sIGZhbHNlKTsKK30KKworc3RhdGljIHNzaXplX3QgbWF4MTM2M19zdG9yZV90aHJlc2hfc2lnbmVkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQkJc2l6ZV90IGxlbiwKKwkJCQkJYm9vbCBoaWdoKQoreworCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtYXgxMzYzX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoZGV2X2luZm8pOworCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKKwlsb25nIHZhbDsKKwlpbnQgcmV0OworCisJcmV0ID0gc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzd2l0Y2ggKHN0LT5jaGlwX2luZm8tPmJpdHMpIHsKKwljYXNlIDEwOgorCQlpZiAodmFsIDwgLTUxMiB8fCB2YWwgPiA1MTEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSAxMjoKKwkJaWYgKHZhbCA8IC0yMDQ4IHx8IHZhbCA+IDIwNDcpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChoaWdoKSB7CisJY2FzZSAxOgorCQlzdC0+dGhyZXNoX2hpZ2hbdGhpc19hdHRyLT5hZGRyZXNzXSA9IHZhbDsKKwkJYnJlYWs7CisJY2FzZSAwOgorCQlzdC0+dGhyZXNoX2xvd1t0aGlzX2F0dHItPmFkZHJlc3MgJiAweDddID0gdmFsOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3NpemVfdCBtYXgxMzYzX3N0b3JlX3RocmVzaF9oaWdoX3NpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJCWNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQkJCXNpemVfdCBsZW4pCit7CisJcmV0dXJuIG1heDEzNjNfc3RvcmVfdGhyZXNoX3NpZ25lZChkZXYsIGF0dHIsIGJ1ZiwgbGVuLCB0cnVlKTsKK30KKworc3RhdGljIHNzaXplX3QgbWF4MTM2M19zdG9yZV90aHJlc2hfbG93X3NpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJCWNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQkJCXNpemVfdCBsZW4pCit7CisJcmV0dXJuIG1heDEzNjNfc3RvcmVfdGhyZXNoX3NpZ25lZChkZXYsIGF0dHIsIGJ1ZiwgbGVuLCBmYWxzZSk7Cit9CisKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW4wX3RocmVzaF9oaWdoX3ZhbHVlLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJbWF4MTM2M19zaG93X3RocmVzaF9oaWdoLAorCQltYXgxMzYzX3N0b3JlX3RocmVzaF9oaWdoX3Vuc2lnbmVkLCAwKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW4wX3RocmVzaF9sb3dfdmFsdWUsIFNfSVJVR08gfCBTX0lXVVNSLAorCQltYXgxMzYzX3Nob3dfdGhyZXNoX2xvdywKKwkJbWF4MTM2M19zdG9yZV90aHJlc2hfbG93X3Vuc2lnbmVkLCAwKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW4xX3RocmVzaF9oaWdoX3ZhbHVlLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJbWF4MTM2M19zaG93X3RocmVzaF9oaWdoLAorCQltYXgxMzYzX3N0b3JlX3RocmVzaF9oaWdoX3Vuc2lnbmVkLCAxKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW4xX3RocmVzaF9sb3dfdmFsdWUsIFNfSVJVR08gfCBTX0lXVVNSLAorCQltYXgxMzYzX3Nob3dfdGhyZXNoX2xvdywKKwkJbWF4MTM2M19zdG9yZV90aHJlc2hfbG93X3Vuc2lnbmVkLCAxKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW4yX3RocmVzaF9oaWdoX3ZhbHVlLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJbWF4MTM2M19zaG93X3RocmVzaF9oaWdoLAorCQltYXgxMzYzX3N0b3JlX3RocmVzaF9oaWdoX3Vuc2lnbmVkLCAyKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW4yX3RocmVzaF9sb3dfdmFsdWUsIFNfSVJVR08gfCBTX0lXVVNSLAorCQltYXgxMzYzX3Nob3dfdGhyZXNoX2xvdywKKwkJbWF4MTM2M19zdG9yZV90aHJlc2hfbG93X3Vuc2lnbmVkLCAyKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW4zX3RocmVzaF9oaWdoX3ZhbHVlLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJbWF4MTM2M19zaG93X3RocmVzaF9oaWdoLAorCQltYXgxMzYzX3N0b3JlX3RocmVzaF9oaWdoX3Vuc2lnbmVkLCAzKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW4zX3RocmVzaF9sb3dfdmFsdWUsIFNfSVJVR08gfCBTX0lXVVNSLAorCQltYXgxMzYzX3Nob3dfdGhyZXNoX2xvdywKKwkJbWF4MTM2M19zdG9yZV90aHJlc2hfbG93X3Vuc2lnbmVkLCAzKTsKKworc3RhdGljIElJT19ERVZJQ0VfQVRUUl9OQU1FRChpbjBtaW4xX3RocmVzaF9oaWdoX3ZhbHVlLAorCQkJaW4wLWluMV90aHJlc2hfaGlnaF92YWx1ZSwKKwkJCVNfSVJVR08gfCBTX0lXVVNSLCBtYXgxMzYzX3Nob3dfdGhyZXNoX2hpZ2gsCisJCQltYXgxMzYzX3N0b3JlX3RocmVzaF9oaWdoX3NpZ25lZCwgNCk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSX05BTUVEKGluMG1pbjFfdGhyZXNoX2xvd192YWx1ZSwKKwkJCWluMC1pbjFfdGhyZXNoX2xvd192YWx1ZSwKKwkJCVNfSVJVR08gfCBTX0lXVVNSLCBtYXgxMzYzX3Nob3dfdGhyZXNoX2xvdywKKwkJCW1heDEzNjNfc3RvcmVfdGhyZXNoX2xvd19zaWduZWQsIDQpOworc3RhdGljIElJT19ERVZJQ0VfQVRUUl9OQU1FRChpbjJtaW4zX3RocmVzaF9oaWdoX3ZhbHVlLAorCQkJaW4yLWluM190aHJlc2hfaGlnaF92YWx1ZSwKKwkJCVNfSVJVR08gfCBTX0lXVVNSLCBtYXgxMzYzX3Nob3dfdGhyZXNoX2hpZ2gsCisJCQltYXgxMzYzX3N0b3JlX3RocmVzaF9oaWdoX3NpZ25lZCwgNSk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSX05BTUVEKGluMm1pbjNfdGhyZXNoX2xvd192YWx1ZSwKKwkJCWluMi1pbjNfdGhyZXNoX2xvd192YWx1ZSwKKwkJCVNfSVJVR08gfCBTX0lXVVNSLCBtYXgxMzYzX3Nob3dfdGhyZXNoX2xvdywKKwkJCW1heDEzNjNfc3RvcmVfdGhyZXNoX2xvd19zaWduZWQsIDUpOworc3RhdGljIElJT19ERVZJQ0VfQVRUUl9OQU1FRChpbjFtaW4wX3RocmVzaF9oaWdoX3ZhbHVlLAorCQkJaW4xLWluMF90aHJlc2hfaGlnaF92YWx1ZSwKKwkJCVNfSVJVR08gfCBTX0lXVVNSLCBtYXgxMzYzX3Nob3dfdGhyZXNoX2hpZ2gsCisJCQltYXgxMzYzX3N0b3JlX3RocmVzaF9oaWdoX3NpZ25lZCwgNik7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSX05BTUVEKGluMW1pbjBfdGhyZXNoX2xvd192YWx1ZSwKKwkJCWluMS1pbjBfdGhyZXNoX2xvd192YWx1ZSwKKwkJCVNfSVJVR08gfCBTX0lXVVNSLCBtYXgxMzYzX3Nob3dfdGhyZXNoX2xvdywKKwkJCW1heDEzNjNfc3RvcmVfdGhyZXNoX2xvd19zaWduZWQsIDYpOworc3RhdGljIElJT19ERVZJQ0VfQVRUUl9OQU1FRChpbjNtaW4yX3RocmVzaF9oaWdoX3ZhbHVlLAorCQkJaW4zLWluMl90aHJlc2hfaGlnaF92YWx1ZSwKKwkJCVNfSVJVR08gfCBTX0lXVVNSLCBtYXgxMzYzX3Nob3dfdGhyZXNoX2hpZ2gsCisJCQltYXgxMzYzX3N0b3JlX3RocmVzaF9oaWdoX3NpZ25lZCwgNyk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSX05BTUVEKGluM21pbjJfdGhyZXNoX2xvd192YWx1ZSwKKwkJCWluMy1pbjJfdGhyZXNoX2xvd192YWx1ZSwKKwkJCVNfSVJVR08gfCBTX0lXVVNSLCBtYXgxMzYzX3Nob3dfdGhyZXNoX2xvdywKKwkJCW1heDEzNjNfc3RvcmVfdGhyZXNoX2xvd19zaWduZWQsIDcpOworCitzdGF0aWMgaW50IG1heDEzNjNfaW50X3RoKHN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbywKKwkJCWludCBpbmRleCwKKwkJCXM2NCB0aW1lc3RhbXAsCisJCQlpbnQgbm90X3Rlc3QpCit7CisJc3RydWN0IG1heDEzNjNfc3RhdGUgKnN0ID0gZGV2X2luZm8tPmRldl9kYXRhOworCisJc3QtPmxhc3RfdGltZXN0YW1wID0gdGltZXN0YW1wOworCXNjaGVkdWxlX3dvcmsoJnN0LT50aHJlc2hfd29yayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1heDEzNjNfdGhyZXNoX2hhbmRsZXJfYmgoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrX3MpCit7CisJc3RydWN0IG1heDEzNjNfc3RhdGUgKnN0ID0gY29udGFpbmVyX29mKHdvcmtfcywgc3RydWN0IG1heDEzNjNfc3RhdGUsCisJCQkJCQl0aHJlc2hfd29yayk7CisJdTggcng7CisJdTggdHhbMl0gPSB7IHN0LT5zZXR1cGJ5dGUsCisJCSAgICAgTUFYMTM2M19NT05fSU5UX0VOQUJMRSB8IChzdC0+bW9uaXRvcl9zcGVlZCA8PCAxKSB8IDB4RjAgfTsKKworCWkyY19tYXN0ZXJfcmVjdihzdC0+Y2xpZW50LCAmcngsIDEpOworCWlmIChyeCAmICgxIDw8IDApKQorCQlpaW9fcHVzaF9ldmVudChzdC0+aW5kaW9fZGV2LCAwLAorCQkJSUlPX0VWRU5UX0NPREVfSU5fTE9XX1RIUkVTSCgzKSwKKwkJCXN0LT5sYXN0X3RpbWVzdGFtcCk7CisJaWYgKHJ4ICYgKDEgPDwgMSkpCisJCWlpb19wdXNoX2V2ZW50KHN0LT5pbmRpb19kZXYsIDAsCisJCQlJSU9fRVZFTlRfQ09ERV9JTl9ISUdIX1RIUkVTSCgzKSwKKwkJCXN0LT5sYXN0X3RpbWVzdGFtcCk7CisJaWYgKHJ4ICYgKDEgPDwgMikpCisJCWlpb19wdXNoX2V2ZW50KHN0LT5pbmRpb19kZXYsIDAsCisJCQlJSU9fRVZFTlRfQ09ERV9JTl9MT1dfVEhSRVNIKDIpLAorCQkJc3QtPmxhc3RfdGltZXN0YW1wKTsKKwlpZiAocnggJiAoMSA8PCAzKSkKKwkJaWlvX3B1c2hfZXZlbnQoc3QtPmluZGlvX2RldiwgMCwKKwkJCUlJT19FVkVOVF9DT0RFX0lOX0hJR0hfVEhSRVNIKDIpLAorCQkJc3QtPmxhc3RfdGltZXN0YW1wKTsKKwlpZiAocnggJiAoMSA8PCA0KSkKKwkJaWlvX3B1c2hfZXZlbnQoc3QtPmluZGlvX2RldiwgMCwKKwkJCUlJT19FVkVOVF9DT0RFX0lOX0xPV19USFJFU0goMSksCisJCQlzdC0+bGFzdF90aW1lc3RhbXApOworCWlmIChyeCAmICgxIDw8IDUpKQorCQlpaW9fcHVzaF9ldmVudChzdC0+aW5kaW9fZGV2LCAwLAorCQkJSUlPX0VWRU5UX0NPREVfSU5fSElHSF9USFJFU0goMSksCisJCQlzdC0+bGFzdF90aW1lc3RhbXApOworCWlmIChyeCAmICgxIDw8IDYpKQorCQlpaW9fcHVzaF9ldmVudChzdC0+aW5kaW9fZGV2LCAwLAorCQkJSUlPX0VWRU5UX0NPREVfSU5fTE9XX1RIUkVTSCgwKSwKKwkJCXN0LT5sYXN0X3RpbWVzdGFtcCk7CisJaWYgKHJ4ICYgKDEgPDwgNykpCisJCWlpb19wdXNoX2V2ZW50KHN0LT5pbmRpb19kZXYsIDAsCisJCQlJSU9fRVZFTlRfQ09ERV9JTl9ISUdIX1RIUkVTSCgwKSwKKwkJCXN0LT5sYXN0X3RpbWVzdGFtcCk7CisJZW5hYmxlX2lycShzdC0+Y2xpZW50LT5pcnEpOworCWkyY19tYXN0ZXJfc2VuZChzdC0+Y2xpZW50LCB0eCwgMik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1heDEzNjNfcmVhZF9pbnRlcnJ1cHRfY29uZmlnKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGRldl9pbmZvKTsKKwlzdHJ1Y3QgaWlvX2V2ZW50X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19ldmVudF9hdHRyKGF0dHIpOworCWludCB2YWw7CisKKwltdXRleF9sb2NrKCZkZXZfaW5mby0+bWxvY2spOworCWlmICh0aGlzX2F0dHItPm1hc2sgJiAweDgpCisJCXZhbCA9ICgxIDw8ICh0aGlzX2F0dHItPm1hc2sgJiAweDcpKSAmIHN0LT5tYXNrX2xvdzsKKwllbHNlCisJCXZhbCA9ICgxIDw8IHRoaXNfYXR0ci0+bWFzaykgJiBzdC0+bWFza19oaWdoOworCW11dGV4X3VubG9jaygmZGV2X2luZm8tPm1sb2NrKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAhIXZhbCk7Cit9CisKK3N0YXRpYyBpbnQgbWF4MTM2M19tb25pdG9yX21vZGVfdXBkYXRlKHN0cnVjdCBtYXgxMzYzX3N0YXRlICpzdCwgaW50IGVuYWJsZWQpCit7CisJdTggKnR4X2J1ZjsKKwlpbnQgcmV0LCBpID0gMywgajsKKwl1bnNpZ25lZCBsb25nIG51bWVsZW1lbnRzOworCWludCBsZW47CisJbG9uZyBtb2RlbWFzazsKKworCWlmICghZW5hYmxlZCkgeworCQkvKiB0cmFuc2l0aW9uIHRvIHJpbmcgY2FwdHVyZSBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCAqLworCQlzdC0+c2V0dXBieXRlICY9IH5NQVgxMzYzX1NFVFVQX01PTklUT1JfU0VUVVA7CisJCXN0LT5jb25maWdieXRlICY9IH5NQVgxMzYzX1NDQU5fTUFTSzsKKwkJc3QtPm1vbml0b3Jfb24gPSBmYWxzZTsKKwkJcmV0dXJuIG1heDEzNjNfd3JpdGVfYmFzaWNfY29uZmlnKHN0LT5jbGllbnQsCisJCQkJCQlzdC0+c2V0dXBieXRlLAorCQkJCQkJc3QtPmNvbmZpZ2J5dGUpOworCX0KKworCS8qIEVuc3VyZSB3ZSBhcmUgaW4gdGhlIHJlbGV2YW50IG1vZGUgKi8KKwlzdC0+c2V0dXBieXRlIHw9IE1BWDEzNjNfU0VUVVBfTU9OSVRPUl9TRVRVUDsKKwlzdC0+Y29uZmlnYnl0ZSAmPSB+KE1BWDEzNjNfQ0hBTk5FTF9TRUxfTUFTSworCQkJICAgIHwgTUFYMTM2M19TQ0FOX01BU0sKKwkJCXwgTUFYMTM2M19TRV9ERV9NQVNLKTsKKwlzdC0+Y29uZmlnYnl0ZSB8PSBNQVgxMzYzX0NPTkZJR19TQ0FOX01PTklUT1JfTU9ERTsKKwlpZiAoKHN0LT5tYXNrX2xvdyB8IHN0LT5tYXNrX2hpZ2gpICYgMHgwRikgeworCQlzdC0+Y29uZmlnYnl0ZSB8PSBtYXgxMzYzX21vZGVfdGFibGVbczB0bzNdLmNvbmY7CisJCW1vZGVtYXNrID0gbWF4MTM2M19tb2RlX3RhYmxlW3MwdG8zXS5tb2RlbWFzazsKKwl9IGVsc2UgaWYgKChzdC0+bWFza19sb3cgfCBzdC0+bWFza19oaWdoKSAmIDB4MzApIHsKKwkJc3QtPmNvbmZpZ2J5dGUgfD0gbWF4MTM2M19tb2RlX3RhYmxlW2QwbTF0bzJtM10uY29uZjsKKwkJbW9kZW1hc2sgPSBtYXgxMzYzX21vZGVfdGFibGVbZDBtMXRvMm0zXS5tb2RlbWFzazsKKwl9IGVsc2UgeworCQlzdC0+Y29uZmlnYnl0ZSB8PSBtYXgxMzYzX21vZGVfdGFibGVbZDFtMHRvM20yXS5jb25mOworCQltb2RlbWFzayA9IG1heDEzNjNfbW9kZV90YWJsZVtkMW0wdG8zbTJdLm1vZGVtYXNrOworCX0KKwludW1lbGVtZW50cyA9IGh3ZWlnaHRfbG9uZyhtb2RlbWFzayk7CisJbGVuID0gMyAqIG51bWVsZW1lbnRzICsgMzsKKwl0eF9idWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0eF9idWYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcl9yZXQ7CisJfQorCXR4X2J1ZlswXSA9IHN0LT5jb25maWdieXRlOworCXR4X2J1ZlsxXSA9IHN0LT5zZXR1cGJ5dGU7CisJdHhfYnVmWzJdID0gKHN0LT5tb25pdG9yX3NwZWVkIDw8IDEpOworCisJLyoKKwkgKiBTbyB3ZSBuZWVkIHRvIGRvIHlldCBhbm90aGVyIGJpdCBvZiBuZWZhcmlvdXMgc2NhbiBtb2RlCisJICogc2V0dXAgdG8gbWF0Y2ggd2hhdCB3ZSBuZWVkLgorCSAqLworCWZvciAoaiA9IDA7IGogPCA4OyBqKyspCisJCWlmIChtb2RlbWFzayAmICgxIDw8IGopKSB7CisJCQkvKiBFc3RhYmxpc2ggdGhlIG1vZGUgaXMgaW4gdGhlIHNjYW4gKi8KKwkJCWlmIChzdC0+bWFza19sb3cgJiAoMSA8PCBqKSkgeworCQkJCXR4X2J1ZltpXSA9IChzdC0+dGhyZXNoX2xvd1tqXSA+PiA0KSAmIDB4RkY7CisJCQkJdHhfYnVmW2kgKyAxXSA9IChzdC0+dGhyZXNoX2xvd1tqXSA8PCA0KSAmIDB4RjA7CisJCQl9IGVsc2UgaWYgKGogPCA0KSB7CisJCQkJdHhfYnVmW2ldID0gMDsKKwkJCQl0eF9idWZbaSArIDFdID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJdHhfYnVmW2ldID0gMHg4MDsKKwkJCQl0eF9idWZbaSArIDFdID0gMDsKKwkJCX0KKwkJCWlmIChzdC0+bWFza19oaWdoICYgKDEgPDwgaikpIHsKKwkJCQl0eF9idWZbaSArIDFdIHw9CisJCQkJCShzdC0+dGhyZXNoX2hpZ2hbal0gPj4gOCkgJiAweDBGOworCQkJCXR4X2J1ZltpICsgMl0gPSBzdC0+dGhyZXNoX2hpZ2hbal0gJiAweEZGOworCQkJfSBlbHNlIGlmIChqIDwgNCkgeworCQkJCXR4X2J1ZltpICsgMV0gfD0gMHgwRjsKKwkJCQl0eF9idWZbaSArIDJdID0gMHhGRjsKKwkJCX0gZWxzZSB7CisJCQkJdHhfYnVmW2kgKyAxXSB8PSAweDA3OworCQkJCXR4X2J1ZltpICsgMl0gPSAweEZGOworCQkJfQorCQkJaSArPSAzOworCQl9CisKKworCXJldCA9IGkyY19tYXN0ZXJfc2VuZChzdC0+Y2xpZW50LCB0eF9idWYsIGxlbik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfcmV0OworCWlmIChyZXQgIT0gbGVuKSB7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXJyb3JfcmV0OworCX0KKworCS8qCisJICogTm93IHRoYXQgd2UgaG9wZWZ1bGx5IGhhdmUgc2Vuc2libGUgdGhyZXNob2xkcyBpbiBwbGFjZSBpdCBpcworCSAqIHRpbWUgdG8gdHVybiB0aGUgaW50ZXJydXB0cyBvbi4KKwkgKiBJdCBpcyB1bmNsZWFyIGZyb20gdGhlIGRhdGEgc2hlZXQgaWYgdGhpcyBzaG91bGQgYmUgbmVjZXNzYXJ5CisJICogKGkuZS4gd2hldGhlciBtb25pdG9yIG1vZGUgc2V0dXAgaXMgYXRvbWljKSBidXQgaXQgYXBwZWFycyB0bworCSAqIGJlIGluIHByYWN0aWNlLgorCSAqLworCXR4X2J1ZlswXSA9IHN0LT5zZXR1cGJ5dGU7CisJdHhfYnVmWzFdID0gTUFYMTM2M19NT05fSU5UX0VOQUJMRSB8IChzdC0+bW9uaXRvcl9zcGVlZCA8PCAxKSB8IDB4RjA7CisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKHN0LT5jbGllbnQsIHR4X2J1ZiwgMik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfcmV0OworCWlmIChyZXQgIT0gMikgeworCQlyZXQgPSAtRUlPOworCQlnb3RvIGVycm9yX3JldDsKKwl9CisJcmV0ID0gMDsKKwlzdC0+bW9uaXRvcl9vbiA9IHRydWU7CitlcnJvcl9yZXQ6CisKKwlrZnJlZSh0eF9idWYpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRvIGtlZXAgdGhpcyBtYW5hZ2FibGUgd2UgYWx3YXlzIHVzZSBvbmUgb2YgMyBzY2FuIG1vZGVzLgorICogU2NhbiAwLi4uMywgMC0xLDItMyBhbmQgMS0wLDMtMgorICovCitzdGF0aWMgaW5saW5lIGludCBfX21heDEzNjNfY2hlY2tfZXZlbnRfbWFzayhpbnQgdGhpc21hc2ssIGludCBjaGVja21hc2spCit7CisJaW50IHJldCA9IDA7CisJLyogSXMgaXQgdW5pcG9sYXIgKi8KKwlpZiAodGhpc21hc2sgPCA0KSB7CisJCWlmIChjaGVja21hc2sgJiB+MHgwRikgeworCQkJcmV0ID0gLUVCVVNZOworCQkJZ290byBlcnJvcl9yZXQ7CisJCX0KKwl9IGVsc2UgaWYgKHRoaXNtYXNrIDwgNikgeworCQlpZiAoY2hlY2ttYXNrICYgfjB4MzApIHsKKwkJCXJldCA9IC1FQlVTWTsKKwkJCWdvdG8gZXJyb3JfcmV0OworCQl9CisJfSBlbHNlIGlmIChjaGVja21hc2sgJiB+MHhDMCkKKwkJcmV0ID0gLUVCVVNZOworZXJyb3JfcmV0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1heDEzNjNfd3JpdGVfaW50ZXJydXB0X2NvbmZpZyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljb25zdCBjaGFyICpidWYsCisJCQkJCXNpemVfdCBsZW4pCit7CisJc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1heDEzNjNfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7CisJc3RydWN0IGlpb19ldmVudF9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZXZlbnRfYXR0cihhdHRyKTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgcmV0OworCXUxNiB1bmlmaWVkbWFzazsKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVJTlZBTDsKKwltdXRleF9sb2NrKCZzdC0+aW5kaW9fZGV2LT5tbG9jayk7CisJdW5pZmllZG1hc2sgPSBzdC0+bWFza19sb3cgfCBzdC0+bWFza19oaWdoOworCWlmICh0aGlzX2F0dHItPm1hc2sgJiAweDA4KSB7CisJCS8qIElmIHdlIGFyZSBkaXNhYmxpbmcgbm8gbmVlZCB0byB0ZXN0ICovCisJCWlmICh2YWwgPT0gMCkKKwkJCXN0LT5tYXNrX2xvdyAmPSB+KDEgPDwgKHRoaXNfYXR0ci0+bWFzayAmIDB4NykpOworCQllbHNlIHsKKwkJCXJldCA9IF9fbWF4MTM2M19jaGVja19ldmVudF9tYXNrKHRoaXNfYXR0ci0+bWFzayAmIDB4NywKKwkJCQkJCQl1bmlmaWVkbWFzayk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyb3JfcmV0OworCQkJc3QtPm1hc2tfbG93IHw9ICgxIDw8ICh0aGlzX2F0dHItPm1hc2sgJiAweDcpKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICh2YWwgPT0gMCkKKwkJCXN0LT5tYXNrX2hpZ2ggJj0gfigxIDw8ICh0aGlzX2F0dHItPm1hc2spKTsKKwkJZWxzZSB7CisJCQlyZXQgPSBfX21heDEzNjNfY2hlY2tfZXZlbnRfbWFzayh0aGlzX2F0dHItPm1hc2ssCisJCQkJCQkJdW5pZmllZG1hc2spOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGVycm9yX3JldDsKKwkJCXN0LT5tYXNrX2hpZ2ggfD0gKDEgPDwgdGhpc19hdHRyLT5tYXNrKTsKKwkJfQorCX0KKwlpZiAoc3QtPm1vbml0b3Jfb24gJiYgIXN0LT5tYXNrX2hpZ2ggJiYgIXN0LT5tYXNrX2xvdykKKwkJaWlvX3JlbW92ZV9ldmVudF9mcm9tX2xpc3QodGhpc19hdHRyLT5saXN0ZWwsCisJCQkJCSZkZXZfaW5mby0+aW50ZXJydXB0c1swXS0+ZXZfbGlzdCk7CisJaWYgKCFzdC0+bW9uaXRvcl9vbiAmJiB2YWwpCisJCWlpb19hZGRfZXZlbnRfdG9fbGlzdCh0aGlzX2F0dHItPmxpc3RlbCwKKwkJCQkmZGV2X2luZm8tPmludGVycnVwdHNbMF0tPmV2X2xpc3QpOworCisJbWF4MTM2M19tb25pdG9yX21vZGVfdXBkYXRlKHN0LCAhIShzdC0+bWFza19oaWdoIHwgc3QtPm1hc2tfbG93KSk7CitlcnJvcl9yZXQ6CisJbXV0ZXhfdW5sb2NrKCZzdC0+aW5kaW9fZGV2LT5tbG9jayk7CisKKwlyZXR1cm4gbGVuOworfQorCitJSU9fRVZFTlRfU0gobWF4MTM2M190aHJlc2gsIG1heDEzNjNfaW50X3RoKTsKKworI2RlZmluZSBNQVgxMzYzX0hJR0hfVEhSRVNIKGEpIGEKKyNkZWZpbmUgTUFYMTM2M19MT1dfVEhSRVNIKGEpIChhIHwgMHg4KQorCitJSU9fRVZFTlRfQVRUUl9TSChpbjBfdGhyZXNoX2hpZ2hfZW4sCisJCWlpb19ldmVudF9tYXgxMzYzX3RocmVzaCwKKwkJbWF4MTM2M19yZWFkX2ludGVycnVwdF9jb25maWcsCisJCW1heDEzNjNfd3JpdGVfaW50ZXJydXB0X2NvbmZpZywKKwkJTUFYMTM2M19ISUdIX1RIUkVTSCgwKSk7CisKK0lJT19FVkVOVF9BVFRSX1NIKGluMF90aHJlc2hfbG93X2VuLAorCQlpaW9fZXZlbnRfbWF4MTM2M190aHJlc2gsCisJCW1heDEzNjNfcmVhZF9pbnRlcnJ1cHRfY29uZmlnLAorCQltYXgxMzYzX3dyaXRlX2ludGVycnVwdF9jb25maWcsCisJCU1BWDEzNjNfTE9XX1RIUkVTSCgwKSk7CisKK0lJT19FVkVOVF9BVFRSX1NIKGluMV90aHJlc2hfaGlnaF9lbiwKKwkJaWlvX2V2ZW50X21heDEzNjNfdGhyZXNoLAorCQltYXgxMzYzX3JlYWRfaW50ZXJydXB0X2NvbmZpZywKKwkJbWF4MTM2M193cml0ZV9pbnRlcnJ1cHRfY29uZmlnLAorCQlNQVgxMzYzX0hJR0hfVEhSRVNIKDEpKTsKKworSUlPX0VWRU5UX0FUVFJfU0goaW4xX3RocmVzaF9sb3dfZW4sCisJCWlpb19ldmVudF9tYXgxMzYzX3RocmVzaCwKKwkJbWF4MTM2M19yZWFkX2ludGVycnVwdF9jb25maWcsCisJCW1heDEzNjNfd3JpdGVfaW50ZXJydXB0X2NvbmZpZywKKwkJTUFYMTM2M19MT1dfVEhSRVNIKDEpKTsKKworSUlPX0VWRU5UX0FUVFJfU0goaW4yX3RocmVzaF9oaWdoX2VuLAorCQlpaW9fZXZlbnRfbWF4MTM2M190aHJlc2gsCisJCW1heDEzNjNfcmVhZF9pbnRlcnJ1cHRfY29uZmlnLAorCQltYXgxMzYzX3dyaXRlX2ludGVycnVwdF9jb25maWcsCisJCU1BWDEzNjNfSElHSF9USFJFU0goMikpOworCitJSU9fRVZFTlRfQVRUUl9TSChpbjJfdGhyZXNoX2xvd19lbiwKKwkJaWlvX2V2ZW50X21heDEzNjNfdGhyZXNoLAorCQltYXgxMzYzX3JlYWRfaW50ZXJydXB0X2NvbmZpZywKKwkJbWF4MTM2M193cml0ZV9pbnRlcnJ1cHRfY29uZmlnLAorCQlNQVgxMzYzX0xPV19USFJFU0goMikpOworCitJSU9fRVZFTlRfQVRUUl9TSChpbjNfdGhyZXNoX2hpZ2hfZW4sCisJCWlpb19ldmVudF9tYXgxMzYzX3RocmVzaCwKKwkJbWF4MTM2M19yZWFkX2ludGVycnVwdF9jb25maWcsCisJCW1heDEzNjNfd3JpdGVfaW50ZXJydXB0X2NvbmZpZywKKwkJTUFYMTM2M19ISUdIX1RIUkVTSCgzKSk7CisKK0lJT19FVkVOVF9BVFRSX1NIKGluM190aHJlc2hfbG93X2VuLAorCQlpaW9fZXZlbnRfbWF4MTM2M190aHJlc2gsCisJCW1heDEzNjNfcmVhZF9pbnRlcnJ1cHRfY29uZmlnLAorCQltYXgxMzYzX3dyaXRlX2ludGVycnVwdF9jb25maWcsCisJCU1BWDEzNjNfTE9XX1RIUkVTSCgzKSk7CisKK0lJT19FVkVOVF9BVFRSX05BTUVEX1NIKGluMG1pbjFfdGhyZXNoX2hpZ2hfZW4sCisJCQlpbjAtaW4xX3RocmVzaF9oaWdoX2VuLAorCQkJaWlvX2V2ZW50X21heDEzNjNfdGhyZXNoLAorCQkJbWF4MTM2M19yZWFkX2ludGVycnVwdF9jb25maWcsCisJCQltYXgxMzYzX3dyaXRlX2ludGVycnVwdF9jb25maWcsCisJCQlNQVgxMzYzX0hJR0hfVEhSRVNIKDQpKTsKKworSUlPX0VWRU5UX0FUVFJfTkFNRURfU0goaW4wbWluMV90aHJlc2hfbG93X2VuLAorCQkJaW4wLWluMV90aHJlc2hfbG93X2VuLAorCQkJaWlvX2V2ZW50X21heDEzNjNfdGhyZXNoLAorCQkJbWF4MTM2M19yZWFkX2ludGVycnVwdF9jb25maWcsCisJCQltYXgxMzYzX3dyaXRlX2ludGVycnVwdF9jb25maWcsCisJCQlNQVgxMzYzX0xPV19USFJFU0goNCkpOworCitJSU9fRVZFTlRfQVRUUl9OQU1FRF9TSChpbjNtaW4yX3RocmVzaF9oaWdoX2VuLAorCQkJaW4zLWluMl90aHJlc2hfaGlnaF9lbiwKKwkJCWlpb19ldmVudF9tYXgxMzYzX3RocmVzaCwKKwkJCW1heDEzNjNfcmVhZF9pbnRlcnJ1cHRfY29uZmlnLAorCQkJbWF4MTM2M193cml0ZV9pbnRlcnJ1cHRfY29uZmlnLAorCQkJTUFYMTM2M19ISUdIX1RIUkVTSCg1KSk7CisKK0lJT19FVkVOVF9BVFRSX05BTUVEX1NIKGluM21pbjJfdGhyZXNoX2xvd19lbiwKKwkJCWluMy1pbjJfdGhyZXNoX2xvd19lbiwKKwkJCWlpb19ldmVudF9tYXgxMzYzX3RocmVzaCwKKwkJCW1heDEzNjNfcmVhZF9pbnRlcnJ1cHRfY29uZmlnLAorCQkJbWF4MTM2M193cml0ZV9pbnRlcnJ1cHRfY29uZmlnLAorCQkJTUFYMTM2M19MT1dfVEhSRVNIKDUpKTsKKworSUlPX0VWRU5UX0FUVFJfTkFNRURfU0goaW4xbWluMF90aHJlc2hfaGlnaF9lbiwKKwkJCWluMS1pbjBfdGhyZXNoX2hpZ2hfZW4sCisJCQlpaW9fZXZlbnRfbWF4MTM2M190aHJlc2gsCisJCQltYXgxMzYzX3JlYWRfaW50ZXJydXB0X2NvbmZpZywKKwkJCW1heDEzNjNfd3JpdGVfaW50ZXJydXB0X2NvbmZpZywKKwkJCU1BWDEzNjNfSElHSF9USFJFU0goNikpOworCitJSU9fRVZFTlRfQVRUUl9OQU1FRF9TSChpbjFtaW4wX3RocmVzaF9sb3dfZW4sCisJCQlpbjEtaW4wX3RocmVzaF9sb3dfZW4sCisJCQlpaW9fZXZlbnRfbWF4MTM2M190aHJlc2gsCisJCQltYXgxMzYzX3JlYWRfaW50ZXJydXB0X2NvbmZpZywKKwkJCW1heDEzNjNfd3JpdGVfaW50ZXJydXB0X2NvbmZpZywKKwkJCU1BWDEzNjNfTE9XX1RIUkVTSCg2KSk7CisKK0lJT19FVkVOVF9BVFRSX05BTUVEX1NIKGluMm1pbjNfdGhyZXNoX2hpZ2hfZW4sCisJCQlpbjItaW4zX3RocmVzaF9oaWdoX2VuLAorCQkJaWlvX2V2ZW50X21heDEzNjNfdGhyZXNoLAorCQkJbWF4MTM2M19yZWFkX2ludGVycnVwdF9jb25maWcsCisJCQltYXgxMzYzX3dyaXRlX2ludGVycnVwdF9jb25maWcsCisJCQlNQVgxMzYzX0hJR0hfVEhSRVNIKDcpKTsKKworSUlPX0VWRU5UX0FUVFJfTkFNRURfU0goaW4ybWluM190aHJlc2hfbG93X2VuLAorCQkJaW4yLWluM190aHJlc2hfbG93X2VuLAorCQkJaWlvX2V2ZW50X21heDEzNjNfdGhyZXNoLAorCQkJbWF4MTM2M19yZWFkX2ludGVycnVwdF9jb25maWcsCisJCQltYXgxMzYzX3dyaXRlX2ludGVycnVwdF9jb25maWcsCisJCQlNQVgxMzYzX0xPV19USFJFU0goNykpOworCisvKgorICogQXMgd2l0aCBzY2FuX2VsZW1lbnRzLCBvbmx5IGNlcnRhaW4gc2V0cyBvZiB0aGVzZSBjYW4KKyAqIGJlIGNvbWJpbmVkLgorICovCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbWF4MTM2M19ldmVudF9hdHRyaWJ1dGVzW10gPSB7CisJJmlpb19kZXZfYXR0cl9pbjBfdGhyZXNoX2hpZ2hfdmFsdWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2luMF90aHJlc2hfbG93X3ZhbHVlLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbjFfdGhyZXNoX2hpZ2hfdmFsdWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2luMV90aHJlc2hfbG93X3ZhbHVlLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbjJfdGhyZXNoX2hpZ2hfdmFsdWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2luMl90aHJlc2hfbG93X3ZhbHVlLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbjNfdGhyZXNoX2hpZ2hfdmFsdWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2luM190aHJlc2hfbG93X3ZhbHVlLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbjBtaW4xX3RocmVzaF9oaWdoX3ZhbHVlLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbjBtaW4xX3RocmVzaF9sb3dfdmFsdWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2luMm1pbjNfdGhyZXNoX2hpZ2hfdmFsdWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2luMm1pbjNfdGhyZXNoX2xvd192YWx1ZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfaW4xbWluMF90aHJlc2hfaGlnaF92YWx1ZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfaW4xbWluMF90aHJlc2hfbG93X3ZhbHVlLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbjNtaW4yX3RocmVzaF9oaWdoX3ZhbHVlLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbjNtaW4yX3RocmVzaF9sb3dfdmFsdWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX3NhbXBsaW5nX2ZyZXF1ZW5jeS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fY29uc3RfYXR0cl9zYW1wbGluZ19mcmVxdWVuY3lfYXZhaWxhYmxlLmRldl9hdHRyLmF0dHIsCisJJmlpb19ldmVudF9hdHRyX2luMF90aHJlc2hfaGlnaF9lbi5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZXZlbnRfYXR0cl9pbjBfdGhyZXNoX2xvd19lbi5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZXZlbnRfYXR0cl9pbjFfdGhyZXNoX2hpZ2hfZW4uZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2V2ZW50X2F0dHJfaW4xX3RocmVzaF9sb3dfZW4uZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2V2ZW50X2F0dHJfaW4yX3RocmVzaF9oaWdoX2VuLmRldl9hdHRyLmF0dHIsCisJJmlpb19ldmVudF9hdHRyX2luMl90aHJlc2hfbG93X2VuLmRldl9hdHRyLmF0dHIsCisJJmlpb19ldmVudF9hdHRyX2luM190aHJlc2hfaGlnaF9lbi5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZXZlbnRfYXR0cl9pbjNfdGhyZXNoX2xvd19lbi5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZXZlbnRfYXR0cl9pbjBtaW4xX3RocmVzaF9oaWdoX2VuLmRldl9hdHRyLmF0dHIsCisJJmlpb19ldmVudF9hdHRyX2luMG1pbjFfdGhyZXNoX2xvd19lbi5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZXZlbnRfYXR0cl9pbjNtaW4yX3RocmVzaF9oaWdoX2VuLmRldl9hdHRyLmF0dHIsCisJJmlpb19ldmVudF9hdHRyX2luM21pbjJfdGhyZXNoX2xvd19lbi5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZXZlbnRfYXR0cl9pbjFtaW4wX3RocmVzaF9oaWdoX2VuLmRldl9hdHRyLmF0dHIsCisJJmlpb19ldmVudF9hdHRyX2luMW1pbjBfdGhyZXNoX2xvd19lbi5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZXZlbnRfYXR0cl9pbjJtaW4zX3RocmVzaF9oaWdoX2VuLmRldl9hdHRyLmF0dHIsCisJJmlpb19ldmVudF9hdHRyX2luMm1pbjNfdGhyZXNoX2xvd19lbi5kZXZfYXR0ci5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBtYXgxMzYzX2V2ZW50X2F0dHJpYnV0ZV9ncm91cCA9IHsKKwkuYXR0cnMgPSBtYXgxMzYzX2V2ZW50X2F0dHJpYnV0ZXMsCit9OworCiBzdGF0aWMgaW50IG1heDEzNjNfaW5pdGlhbF9zZXR1cChzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QpCiB7CiAJc3QtPnNldHVwYnl0ZSA9IE1BWDEzNjNfU0VUVVBfQUlOM19JU19BSU4zX1JFRl9JU19WREQKQEAgLTkzMCwxOSArMTU5OSw3IEBACiAKIAlhdG9taWNfc2V0KCZzdC0+cHJvdGVjdF9yaW5nLCAwKTsKIAotCS8qIEZpbmQgdGhlIGNoaXAgbW9kZWwgc3BlY2lmaWMgZGF0YSAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1heDEzNjNfY2hpcF9pbmZvX3RibCk7IGkrKykKLQkJaWYgKCFzdHJjbXAobWF4MTM2M19jaGlwX2luZm9fdGJsW2ldLm5hbWUsIGlkLT5uYW1lKSkgewotCQkJc3QtPmNoaXBfaW5mbyA9ICZtYXgxMzYzX2NoaXBfaW5mb190YmxbaV07Ci0JCQlicmVhazsKLQkJfTsKLQkvKiBVbnN1cHBvcnRlZCBjaGlwICovCi0JaWYgKCFzdC0+Y2hpcF9pbmZvKSB7Ci0JCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXMgaXMgbm90IHN1cHBvcnRlZFxuIiwgaWQtPm5hbWUpOwotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGVycm9yX2ZyZWVfc3Q7Ci0JfQotCisJc3QtPmNoaXBfaW5mbyA9ICZtYXgxMzYzX2NoaXBfaW5mb190YmxbaWQtPmRyaXZlcl9kYXRhXTsKIAlzdC0+cmVnID0gcmVndWxhdG9yX2dldCgmY2xpZW50LT5kZXYsICJ2Y2MiKTsKIAlpZiAoIUlTX0VSUihzdC0+cmVnKSkgewogCQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHN0LT5yZWcpOwpAQCAtOTc4LDYgKzE2MzUsMTEgQEAKIAlzdC0+aW5kaW9fZGV2LT5kZXZfZGF0YSA9ICh2b2lkICopKHN0KTsKIAlzdC0+aW5kaW9fZGV2LT5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEU7CiAJc3QtPmluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKKwlpZiAoc3QtPmNoaXBfaW5mby0+bW9uaXRvcl9tb2RlICYmIGNsaWVudC0+aXJxKSB7CisJCXN0LT5pbmRpb19kZXYtPm51bV9pbnRlcnJ1cHRfbGluZXMgPSAxOworCQlzdC0+aW5kaW9fZGV2LT5ldmVudF9hdHRycworCQkJPSAmbWF4MTM2M19ldmVudF9hdHRyaWJ1dGVfZ3JvdXA7CisJfQogCiAJcmV0ID0gbWF4MTM2M19pbml0aWFsX3NldHVwKHN0KTsKIAlpZiAocmV0KQpAQCAtOTkxLDEwICsxNjUzLDI1IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9jbGVhbnVwX3Jpbmc7CiAJcmVnZG9uZSA9IDE7Ci0JcmV0ID0gbWF4MTM2M19pbml0aWFsaXplX3Jpbmcoc3QtPmluZGlvX2Rldi0+cmluZyk7CisJcmV0ID0gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyKHN0LT5pbmRpb19kZXYtPnJpbmcsIDApOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfY2xlYW51cF9yaW5nOworCisJaWYgKHN0LT5jaGlwX2luZm8tPm1vbml0b3JfbW9kZSAmJiBjbGllbnQtPmlycSkgeworCQlyZXQgPSBpaW9fcmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoY2xpZW50LT5pcnEsCisJCQkJCQlzdC0+aW5kaW9fZGV2LAorCQkJCQkJMCwKKwkJCQkJCUlSUUZfVFJJR0dFUl9SSVNJTkcsCisJCQkJCQljbGllbnQtPm5hbWUpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcl91bmluaXRfcmluZzsKKworCQlJTklUX1dPUksoJnN0LT50aHJlc2hfd29yaywgbWF4MTM2M190aHJlc2hfaGFuZGxlcl9iaCk7CisJfQorCiAJcmV0dXJuIDA7CitlcnJvcl91bmluaXRfcmluZzoKKwlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihzdC0+aW5kaW9fZGV2LT5yaW5nKTsKIGVycm9yX2NsZWFudXBfcmluZzoKIAltYXgxMzYzX3JpbmdfY2xlYW51cChzdC0+aW5kaW9fZGV2KTsKIGVycm9yX2ZyZWVfYXZhaWxhYmxlX3NjYW5fbWFza3M6CkBAIC0xMDEwLDcgKzE2ODcsNiBAQAogZXJyb3JfcHV0X3JlZzoKIAlpZiAoIUlTX0VSUihzdC0+cmVnKSkKIAkJcmVndWxhdG9yX3B1dChzdC0+cmVnKTsKLWVycm9yX2ZyZWVfc3Q6CiAJa2ZyZWUoc3QpOwogCiBlcnJvcl9yZXQ6CkBAIC0xMDIxLDcgKzE2OTcsMTAgQEAKIHsKIAlzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gc3QtPmluZGlvX2RldjsKLQltYXgxMzYzX3VuaW5pdGlhbGl6ZV9yaW5nKGluZGlvX2Rldi0+cmluZyk7CisKKwlpZiAoc3QtPmNoaXBfaW5mby0+bW9uaXRvcl9tb2RlICYmIGNsaWVudC0+aXJxKQorCQlpaW9fdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShzdC0+aW5kaW9fZGV2LCAwKTsKKwlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihpbmRpb19kZXYtPnJpbmcpOwogCW1heDEzNjNfcmluZ19jbGVhbnVwKGluZGlvX2Rldik7CiAJa2ZyZWUoc3QtPmluZGlvX2Rldi0+YXZhaWxhYmxlX3NjYW5fbWFza3MpOwogCWlpb19kZXZpY2VfdW5yZWdpc3RlcihpbmRpb19kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvbWF4MTM2M19yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9tYXgxMzYzX3JpbmcuYwppbmRleCA1NjY4OGRjLi43ODZiMTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9tYXgxMzYzX3JpbmcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9tYXgxMzYzX3JpbmcuYwpAQCAtNjgsNyArNjgsNyBAQAogfQogCiAvKioKLSAqIG1heDEzNjNfcmluZ19wcmVlbmFibGUoKSBzZXR1cCB0aGUgcGFyYW1ldGVycyBvZiB0aGUgcmluZyBiZWZvcmUgZW5hYmxpbmcKKyAqIG1heDEzNjNfcmluZ19wcmVlbmFibGUoKSAtIHNldHVwIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSByaW5nIGJlZm9yZSBlbmFibGluZwogICoKICAqIFRoZSBjb21wbGV4IG5hdHVyZSBvZiB0aGUgc2V0dGluZyBvZiB0aGUgbnViZXIgb2YgYnl0ZXMgcGVyIGRhdHVtIGlzIGR1ZQogICogdG8gdGhpcyBkcml2ZXIgY3VycmVudGx5IGVuc3VyaW5nIHRoYXQgdGhlIHRpbWVzdGFtcCBpcyBzdG9yZWQgYXQgYW4gOApAQCAtMTA1LDQ0ICsxMDUsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoqCi0gKiBtYXgxMzYzX3JpbmdfcG9zdGVuYWJsZSgpIHR5cGljYWwgcmluZyBwb3N0IGVuYWJsZQotICoKLSAqIE9ubHkgbm90IG1vdmVkIGludG8gdGhlIGNvcmUgZm9yIHRoZSBoYXJkd2FyZSByaW5nIGJ1ZmZlciBjYXNlcwotICogdGhhdCBhcmUgbW9yZSBzb3BoaXN0aWNhdGVkLgotICoqLwotc3RhdGljIGludCBtYXgxMzYzX3JpbmdfcG9zdGVuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotCWlmIChpbmRpb19kZXYtPnRyaWcgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIGlpb190cmlnZ2VyX2F0dGFjaF9wb2xsX2Z1bmMoaW5kaW9fZGV2LT50cmlnLAotCQkJCQkgICAgaW5kaW9fZGV2LT5wb2xsZnVuYyk7Ci19CiAKIC8qKgotICogbWF4MTM2M19yaW5nX3ByZWRpc2FibGUoKSBydW5zIGp1c3QgcHJpb3IgdG8gcmluZyBidWZmZXIgYmVpbmcgZGlzYWJsZWQKLSAqCi0gKiBUeXBpY2FsIHByZWRpc2FibGUgZnVuY3Rpb24gd2hpY2ggZW5zdXJlcyB0aGF0IG5vIHRyaWdnZXIgZXZlbnRzIGNhbgotICogb2NjdXIgYmVmb3JlIHdlIGRpc2FibGUgdGhlIHJpbmcgYnVmZmVyIChhbmQgaGVuY2Ugd291bGQgaGF2ZSBubyBpZGVhCi0gKiB3aGF0IHRvIGRvIHdpdGggdGhlbSkKLSAqKi8KLXN0YXRpYyBpbnQgbWF4MTM2M19yaW5nX3ByZWRpc2FibGUoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKLXsKLQlpZiAoaW5kaW9fZGV2LT50cmlnKQotCQlyZXR1cm4gaWlvX3RyaWdnZXJfZGV0dGFjaF9wb2xsX2Z1bmMoaW5kaW9fZGV2LT50cmlnLAotCQkJCQkJICAgICBpbmRpb19kZXYtPnBvbGxmdW5jKTsKLQllbHNlCi0JCXJldHVybiAwOwotfQotCi0vKioKLSAqIG1heDEzNjNfcG9sbF9mdW5jX3RoKCkgdGggb2YgdHJpZ2dlciBsYXVuY2hlZCBwb2xsaW5nIHRvIHJpbmcgYnVmZmVyCisgKiBtYXgxMzYzX3BvbGxfZnVuY190aCgpIC0gdGggb2YgdHJpZ2dlciBsYXVuY2hlZCBwb2xsaW5nIHRvIHJpbmcgYnVmZmVyCiAgKgogICogQXMgc2FtcGxpbmcgb25seSBvY2N1cnMgb24gaTJjIGNvbW1zIG9jY3VyaW5nLCBsZWF2ZSB0aW1lc3RhbXBpbmcgdW50aWwKICAqIHRoZW4uICBTb21lIHRyaWdnZXJzIHdpbGwgZ2VuZXJhdGUgdGhlaXIgb3duIHRpbWUgc3RhbXAuICBDdXJyZW50bHkKICAqIHRoZXJlIGlzIG5vIHdheSBvZiBub3RpZnlpbmcgdGhlbSB3aGVuIG5vIG9uZSBjYXJlcy4KICAqKi8KLXN0YXRpYyB2b2lkIG1heDEzNjNfcG9sbF9mdW5jX3RoKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCitzdGF0aWMgdm9pZCBtYXgxMzYzX3BvbGxfZnVuY190aChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LCBzNjQgdGltZSkKIHsKIAlzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwogCkBAIC0xNTEsNyArMTIyLDcgQEAKIAlyZXR1cm47CiB9CiAvKioKLSAqIG1heDEzNjNfcG9sbF9iaF90b19yaW5nKCkgYmggb2YgdHJpZ2dlciBsYXVuY2hlZCBwb2xsaW5nIHRvIHJpbmcgYnVmZmVyCisgKiBtYXgxMzYzX3BvbGxfYmhfdG9fcmluZygpIC0gYmggb2YgdHJpZ2dlciBsYXVuY2hlZCBwb2xsaW5nIHRvIHJpbmcgYnVmZmVyCiAgKiBAd29ya19zOgl0aGUgd29yayBzdHJ1Y3QgdGhyb3VnaCB3aGljaCB0aGlzIHdhcyBzY2hlZHVsZWQKICAqCiAgKiBDdXJyZW50bHkgdGhlcmUgaXMgbm8gb3B0aW9uIGluIHRoaXMgZHJpdmVyIHRvIGRpc2FibGUgdGhlIHNhdmluZyBvZgpAQCAtMjIzLDE5ICsxOTQsMTQgQEAKIAl9CiAJLyogRWZmZWN0aXZlbHkgc2VsZWN0IHRoZSByaW5nIGJ1ZmZlciBpbXBsZW1lbnRhdGlvbiAqLwogCWlpb19yaW5nX3N3X3JlZ2lzdGVyX2Z1bmNzKCZzdC0+aW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3MpOwotCWluZGlvX2Rldi0+cG9sbGZ1bmMgPSBremFsbG9jKHNpemVvZigqaW5kaW9fZGV2LT5wb2xsZnVuYyksIEdGUF9LRVJORUwpOwotCWlmIChpbmRpb19kZXYtPnBvbGxmdW5jID09IE5VTEwpIHsKLQkJcmV0ID0gLUVOT01FTTsKKwlyZXQgPSBpaW9fYWxsb2NfcG9sbGZ1bmMoaW5kaW9fZGV2LCBOVUxMLCAmbWF4MTM2M19wb2xsX2Z1bmNfdGgpOworCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfZGVhbGxvY2F0ZV9zd19yYjsKLQl9Ci0JLyogQ29uZmlndXJlIHRoZSBwb2xsaW5nIGZ1bmN0aW9uIGNhbGxlZCBvbiB0cmlnZ2VyIGludGVycnVwdHMgKi8KLQlpbmRpb19kZXYtPnBvbGxmdW5jLT5wb2xsX2Z1bmNfbWFpbiA9ICZtYXgxMzYzX3BvbGxfZnVuY190aDsKLQlpbmRpb19kZXYtPnBvbGxmdW5jLT5wcml2YXRlX2RhdGEgPSBpbmRpb19kZXY7CiAKIAkvKiBSaW5nIGJ1ZmZlciBmdW5jdGlvbnMgLSBoZXJlIHRyaWdnZXIgc2V0dXAgcmVsYXRlZCAqLwotCWluZGlvX2Rldi0+cmluZy0+cG9zdGVuYWJsZSA9ICZtYXgxMzYzX3JpbmdfcG9zdGVuYWJsZTsKKwlpbmRpb19kZXYtPnJpbmctPnBvc3RlbmFibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3Bvc3RlbmFibGU7CiAJaW5kaW9fZGV2LT5yaW5nLT5wcmVlbmFibGUgPSAmbWF4MTM2M19yaW5nX3ByZWVuYWJsZTsKLQlpbmRpb19kZXYtPnJpbmctPnByZWRpc2FibGUgPSAmbWF4MTM2M19yaW5nX3ByZWRpc2FibGU7CisJaW5kaW9fZGV2LT5yaW5nLT5wcmVkaXNhYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wcmVkaXNhYmxlOwogCUlOSVRfV09SSygmc3QtPnBvbGxfd29yaywgJm1heDEzNjNfcG9sbF9iaF90b19yaW5nKTsKIAogCS8qIEZsYWcgdGhhdCBwb2xsZWQgcmluZyBidWZmZXJpbmcgaXMgcG9zc2libGUgKi8KQEAgLTI1OCwxMyArMjI0LDMgQEAKIAlrZnJlZShpbmRpb19kZXYtPnBvbGxmdW5jKTsKIAlpaW9fc3dfcmJfZnJlZShpbmRpb19kZXYtPnJpbmcpOwogfQotCi12b2lkIG1heDEzNjNfdW5pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKLXsKLQlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihyaW5nKTsKLX07Ci0KLWludCBtYXgxMzYzX2luaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKQotewotCXJldHVybiBpaW9fcmluZ19idWZmZXJfcmVnaXN0ZXIocmluZywgMCk7Ci19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9jaHJkZXYuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vY2hyZGV2LmgKaW5kZXggM2Y5NmY4Ni4uZmQyM2JkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9jaHJkZXYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2NocmRldi5oCkBAIC03Myw4ICs3Myw2IEBACiAgKiBAZGV0X2V2ZW50czoJCWxpc3Qgb2YgZGV0ZWN0ZWQgZXZlbnRzCiAgKiBAbWF4X2V2ZW50czoJCW1heGltdW0gbnVtYmVyIG9mIGV2ZW50cyBiZWZvcmUgbmV3IG9uZXMgYXJlIGRyb3BwZWQKICAqIEBjdXJyZW50X2V2ZW50czoJbnVtYmVyIG9mIGV2ZW50cyBpbiBkZXRlY3RlZCBsaXN0Ci0gKiBAaWQ6CQkJaW5kZW50aWZpZXIgdG8gYWxsb3cgdGhlIGV2ZW50IGludGVyZmFjZSB0byBrbm93IHdoaWNoCi0gKgkJCXBoeXNpY2FsIGxpbmUgaXQgY29ycmVzcG9uZHMgdG8KICAqIEBhdHRyOgkJdGhpcyBjaHJkZXYncyBtaW5vciBudW1iZXIgc3lzZnMgYXR0cmlidXRlCiAgKiBAb3duZXI6CQllbnN1cmUgdGhlIGRyaXZlciBtb2R1bGUgb3ducyB0aGUgZmlsZSwgbm90IGlpbwogICogQHByaXZhdGU6CQlkcml2ZXIgc3BlY2lmaWMgZGF0YQpAQCAtOTAsNyArODgsNiBAQAogCXN0cnVjdCBpaW9fZGV0ZWN0ZWRfZXZlbnRfbGlzdAkJZGV0X2V2ZW50czsKIAlpbnQJCQkJCW1heF9ldmVudHM7CiAJaW50CQkJCQljdXJyZW50X2V2ZW50czsKLQlpbnQJCQkJCWlkOwogCXN0cnVjdCBpaW9fY2hyZGV2X21pbm9yX2F0dHIJCWF0dHI7CiAJc3RydWN0IG1vZHVsZQkJCQkqb3duZXI7CiAJdm9pZAkJCQkJKnByaXZhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vTWFrZWZpbGUKaW5kZXggNmQyYzU0Ny4uYjVmMGRjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLQorIwogIyBNYWtlZmlsZSBmb3IgZGlnaXRhbCBneXJvc2NvcGUgc2Vuc29yIGRyaXZlcnMKICMKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MC5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MC5oCmluZGV4IGYxOWVmYjQuLjgxMjQ0MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9hZGlzMTYyNjAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWRpczE2MjYwLmgKQEAgLTg1LDcgKzg1LDYgQEAKICAqIHN0cnVjdCBhZGlzMTYyNjBfc3RhdGUgLSBkZXZpY2UgaW5zdGFuY2Ugc3BlY2lmaWMgZGF0YQogICogQHVzOgkJCWFjdHVhbCBzcGlfZGV2aWNlCiAgKiBAd29ya190cmlnZ2VyX3RvX3Jpbmc6IGJoIGZvciB0cmlnZ2VyZWQgZXZlbnQgaGFuZGxpbmcKLSAqIEB3b3JrX2NvbnRfdGhyZXNoOiBDTEVBTgogICogQGludGVyOgkJdXNlZCB0byBjaGVjayBpZiBuZXcgaW50ZXJydXB0IGhhcyBiZWVuIHRyaWdnZXJlZAogICogQGxhc3RfdGltZXN0YW1wOglwYXNzaW5nIHRpbWVzdGFtcCBmcm9tIHRoIHRvIGJoIG9mIGludGVycnVwdCBoYW5kbGVyCiAgKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQpAQCAtOTcsNyArOTYsNiBAQAogc3RydWN0IGFkaXMxNjI2MF9zdGF0ZSB7CiAJc3RydWN0IHNwaV9kZXZpY2UJCSp1czsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCXdvcmtfdHJpZ2dlcl90b19yaW5nOwotCXN0cnVjdCBpaW9fd29ya19jb250CQl3b3JrX2NvbnRfdGhyZXNoOwogCXM2NAkJCQlsYXN0X3RpbWVzdGFtcDsKIAlzdHJ1Y3QgaWlvX2RldgkJCSppbmRpb19kZXY7CiAJc3RydWN0IGlpb190cmlnZ2VyCQkqdHJpZzsKQEAgLTExMywxMyArMTExLDExIEBACiAgKiBmaWxsaW5nLiBUaGlzIG1heSBjaGFuZ2UhCiAgKi8KIAotZW51bSBhZGlzMTYyNjBfc2NhbiB7Ci0JQURJUzE2MjYwX1NDQU5fU1VQUExZLAotCUFESVMxNjI2MF9TQ0FOX0dZUk8sCi0JQURJUzE2MjYwX1NDQU5fQVVYX0FEQywKLQlBRElTMTYyNjBfU0NBTl9URU1QLAotCUFESVMxNjI2MF9TQ0FOX0FOR0wsCi19OworI2RlZmluZSBBRElTMTYyNjBfU0NBTl9TVVBQTFkJMAorI2RlZmluZSBBRElTMTYyNjBfU0NBTl9HWVJPCTEKKyNkZWZpbmUgQURJUzE2MjYwX1NDQU5fQVVYX0FEQwkyCisjZGVmaW5lIEFESVMxNjI2MF9TQ0FOX1RFTVAJMworI2RlZmluZSBBRElTMTYyNjBfU0NBTl9BTkdMCTQKIAogdm9pZCBhZGlzMTYyNjBfcmVtb3ZlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CiBpbnQgYWRpczE2MjYwX3Byb2JlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CkBAIC0xMzIsOCArMTI4LDYgQEAKIGludCBhZGlzMTYyNjBfY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CiB2b2lkIGFkaXMxNjI2MF91bmNvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogCi1pbnQgYWRpczE2MjYwX2luaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKTsKLXZvaWQgYWRpczE2MjYwX3VuaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpOwogI2Vsc2UgLyogQ09ORklHX0lJT19SSU5HX0JVRkZFUiAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWRpczE2MjYwX3JlbW92ZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCkBAIC0xNjIsMTQgKzE1Niw1IEBACiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGFkaXMxNjI2MF9pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkaXMxNjI2MF91bmluaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKQotewotfQotCiAjZW5kaWYgLyogQ09ORklHX0lJT19SSU5HX0JVRkZFUiAqLwogI2VuZGlmIC8qIFNQSV9BRElTMTYyNjBfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9hZGlzMTYyNjBfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MF9jb3JlLmMKaW5kZXggYzkzZjRkNS4uMTM0ZGZhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MF9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MF9jb3JlLmMKQEAgLTE0LDEyICsxNCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLQorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAogI2luY2x1ZGUgIi4uL2lpby5oIgogI2luY2x1ZGUgIi4uL3N5c2ZzLmgiCisjaW5jbHVkZSAiLi4vcmluZ19nZW5lcmljLmgiCiAjaW5jbHVkZSAiLi4vYWRjL2FkYy5oIgogI2luY2x1ZGUgImd5cm8uaCIKIApAQCAtNTU1LDggKzU1Niw3IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl91bnJlZ19yaW5nX2Z1bmNzOwogCXJlZ2RvbmUgPSAxOwotCi0JcmV0ID0gYWRpczE2MjYwX2luaXRpYWxpemVfcmluZyhzdC0+aW5kaW9fZGV2LT5yaW5nKTsKKwlyZXQgPSBpaW9fcmluZ19idWZmZXJfcmVnaXN0ZXIoc3QtPmluZGlvX2Rldi0+cmluZywgMCk7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBpbml0aWFsaXplIHRoZSByaW5nXG4iKTsKIAkJZ290byBlcnJvcl91bnJlZ19yaW5nX2Z1bmNzOwpAQCAtNTg4LDcgKzU4OCw3IEBACiAJaWYgKHNwaS0+aXJxKQogCQlpaW9fdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShzdC0+aW5kaW9fZGV2LCAwKTsKIGVycm9yX3VuaW5pdGlhbGl6ZV9yaW5nOgotCWFkaXMxNjI2MF91bmluaXRpYWxpemVfcmluZyhzdC0+aW5kaW9fZGV2LT5yaW5nKTsKKwlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihzdC0+aW5kaW9fZGV2LT5yaW5nKTsKIGVycm9yX3VucmVnX3JpbmdfZnVuY3M6CiAJYWRpczE2MjYwX3VuY29uZmlndXJlX3Jpbmcoc3QtPmluZGlvX2Rldik7CiBlcnJvcl9mcmVlX2RldjoKQEAgLTYyMiwxNSArNjIyLDEzIEBACiAJaWYgKHNwaS0+aXJxKQogCQlpaW9fdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShpbmRpb19kZXYsIDApOwogCi0JYWRpczE2MjYwX3VuaW5pdGlhbGl6ZV9yaW5nKGluZGlvX2Rldi0+cmluZyk7CisJaWlvX3JpbmdfYnVmZmVyX3VucmVnaXN0ZXIoc3QtPmluZGlvX2Rldi0+cmluZyk7CiAJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CiAJYWRpczE2MjYwX3VuY29uZmlndXJlX3JpbmcoaW5kaW9fZGV2KTsKIAlrZnJlZShzdC0+dHgpOwogCWtmcmVlKHN0LT5yeCk7CiAJa2ZyZWUoc3QpOwogCi0JcmV0dXJuIDA7Ci0KIGVycl9yZXQ6CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9hZGlzMTYyNjBfcmluZy5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MF9yaW5nLmMKaW5kZXggNGM0MzkwYy4uOWVmN2Y5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MF9yaW5nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MF9yaW5nLmMKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIApAQCAtMTYsMTYgKzE3LDYgQEAKICNpbmNsdWRlICIuLi90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiYWRpczE2MjYwLmgiCiAKLS8qKgotICogY29tYmluZV84X3RvXzE2KCkgdXRpbGl0eSBmdW5jdGlvbiB0byBtdW5nZSB0byB1OHMgaW50byB1MTYKLSAqKi8KLXN0YXRpYyBpbmxpbmUgdTE2IGNvbWJpbmVfOF90b18xNih1OCBsb3dlciwgdTggdXBwZXIpCi17Ci0JdTE2IF9sb3dlciA9IGxvd2VyOwotCXUxNiBfdXBwZXIgPSB1cHBlcjsKLQlyZXR1cm4gX2xvd2VyIHwgKF91cHBlciA8PCA4KTsKLX0KLQogc3RhdGljIElJT19TQ0FOX0VMX0Moc3VwcGx5LCBBRElTMTYyNjBfU0NBTl9TVVBQTFksIElJT19VTlNJR05FRCgxMiksCiAJCUFESVMxNjI2MF9TVVBQTFlfT1VULCBOVUxMKTsKIHN0YXRpYyBJSU9fU0NBTl9FTF9DKGd5cm8sIEFESVMxNjI2MF9TQ0FOX0dZUk8sIElJT19TSUdORUQoMTQpLApAQCAtNTgsMTAgKzQ5LDEwIEBACiAgKiBhZGlzMTYyNjBfcG9sbF9mdW5jX3RoKCkgdG9wIGhhbGYgaW50ZXJydXB0IGhhbmRsZXIgY2FsbGVkIGJ5IHRyaWdnZXIKICAqIEBwcml2YXRlX2RhdGE6CWlpb19kZXYKICAqKi8KLXN0YXRpYyB2b2lkIGFkaXMxNjI2MF9wb2xsX2Z1bmNfdGgoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKK3N0YXRpYyB2b2lkIGFkaXMxNjI2MF9wb2xsX2Z1bmNfdGgoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwgczY0IHRpbWUpCiB7CiAJc3RydWN0IGFkaXMxNjI2MF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7Ci0Jc3QtPmxhc3RfdGltZXN0YW1wID0gaW5kaW9fZGV2LT50cmlnLT50aW1lc3RhbXA7CisJc3QtPmxhc3RfdGltZXN0YW1wID0gdGltZTsKIAlzY2hlZHVsZV93b3JrKCZzdC0+d29ya190cmlnZ2VyX3RvX3JpbmcpOwogfQogCkBAIC0xMzMsMTAgKzEyNCw5IEBACiAKIAlpZiAoc3QtPmluZGlvX2Rldi0+c2Nhbl9jb3VudCkKIAkJaWYgKGFkaXMxNjI2MF9yZWFkX3JpbmdfZGF0YSgmc3QtPmluZGlvX2Rldi0+ZGV2LCBzdC0+cngpID49IDApCi0JCQlmb3IgKDsgaSA8IHN0LT5pbmRpb19kZXYtPnNjYW5fY291bnQ7IGkrKykgewotCQkJCWRhdGFbaV0gPSBjb21iaW5lXzhfdG9fMTYoc3QtPnJ4W2kqMisxXSwKLQkJCQkJCXN0LT5yeFtpKjJdKTsKLQkJCX0KKwkJCWZvciAoOyBpIDwgc3QtPmluZGlvX2Rldi0+c2Nhbl9jb3VudDsgaSsrKQorCQkJCWRhdGFbaV0gPSBiZTE2X3RvX2NwdXAoCisJCQkJCShfX2JlMTYgKikmKHN0LT5yeFtpKjJdKSk7CiAKIAkvKiBHdWFyYW50ZWVkIHRvIGJlIGFsaWduZWQgd2l0aCA4IGJ5dGUgYm91bmRhcnkgKi8KIAlpZiAoc3QtPmluZGlvX2Rldi0+c2Nhbl90aW1lc3RhbXApCkBAIC0xNTIsNDggKzE0Miw2IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IGFkaXMxNjI2MF9kYXRhX3JkeV9yaW5nX3ByZWVuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotCXNpemVfdCBzaXplOwotCWRldl9kYmcoJmluZGlvX2Rldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQkvKiBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHNjYW4gZWxlbWVudHMgZW5hYmxlZCwgaWYgbm90IGZhaWwqLwotCWlmICghKGluZGlvX2Rldi0+c2Nhbl9jb3VudCB8fCBpbmRpb19kZXYtPnNjYW5fdGltZXN0YW1wKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoaW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3Muc2V0X2JwZCkgewotCQlpZiAoaW5kaW9fZGV2LT5zY2FuX3RpbWVzdGFtcCkKLQkJCWlmIChpbmRpb19kZXYtPnNjYW5fY291bnQpCi0JCQkJLyogVGltZXN0YW1wIChhbGlnbmVkIHM2NCkgYW5kIGRhdGEgKi8KLQkJCQlzaXplID0gKCgoaW5kaW9fZGV2LT5zY2FuX2NvdW50ICogc2l6ZW9mKHMxNikpCi0JCQkJCQkrIHNpemVvZihzNjQpIC0gMSkKLQkJCQkJJiB+KHNpemVvZihzNjQpIC0gMSkpCi0JCQkJCSsgc2l6ZW9mKHM2NCk7Ci0JCQllbHNlIC8qIFRpbWVzdGFtcCBvbmx5ICAqLwotCQkJCXNpemUgPSBzaXplb2YoczY0KTsKLQkJZWxzZSAvKiBEYXRhIG9ubHkgKi8KLQkJCXNpemUgPSBpbmRpb19kZXYtPnNjYW5fY291bnQqc2l6ZW9mKHMxNik7Ci0JCWluZGlvX2Rldi0+cmluZy0+YWNjZXNzLnNldF9icGQoaW5kaW9fZGV2LT5yaW5nLCBzaXplKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZGlzMTYyNjBfZGF0YV9yZHlfcmluZ19wb3N0ZW5hYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCi17Ci0JcmV0dXJuIGluZGlvX2Rldi0+dHJpZwotCQk/IGlpb190cmlnZ2VyX2F0dGFjaF9wb2xsX2Z1bmMoaW5kaW9fZGV2LT50cmlnLAotCQkJCWluZGlvX2Rldi0+cG9sbGZ1bmMpCi0JCTogMDsKLX0KLQotc3RhdGljIGludCBhZGlzMTYyNjBfZGF0YV9yZHlfcmluZ19wcmVkaXNhYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCi17Ci0JcmV0dXJuIGluZGlvX2Rldi0+dHJpZwotCQk/IGlpb190cmlnZ2VyX2RldHRhY2hfcG9sbF9mdW5jKGluZGlvX2Rldi0+dHJpZywKLQkJCQlpbmRpb19kZXYtPnBvbGxmdW5jKQotCQk6IDA7Ci19Ci0KIHZvaWQgYWRpczE2MjYwX3VuY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlrZnJlZShpbmRpb19kZXYtPnBvbGxmdW5jKTsKQEAgLTIyNSwxOCArMTczLDE2IEBACiAJaW5kaW9fZGV2LT5yaW5nID0gcmluZzsKIAkvKiBFZmZlY3RpdmVseSBzZWxlY3QgdGhlIHJpbmcgYnVmZmVyIGltcGxlbWVudGF0aW9uICovCiAJaWlvX3Jpbmdfc3dfcmVnaXN0ZXJfZnVuY3MoJnJpbmctPmFjY2Vzcyk7Ci0JcmluZy0+cHJlZW5hYmxlID0gJmFkaXMxNjI2MF9kYXRhX3JkeV9yaW5nX3ByZWVuYWJsZTsKLQlyaW5nLT5wb3N0ZW5hYmxlID0gJmFkaXMxNjI2MF9kYXRhX3JkeV9yaW5nX3Bvc3RlbmFibGU7Ci0JcmluZy0+cHJlZGlzYWJsZSA9ICZhZGlzMTYyNjBfZGF0YV9yZHlfcmluZ19wcmVkaXNhYmxlOworCXJpbmctPmJwZSA9IDI7CisJcmluZy0+cHJlZW5hYmxlID0gJmlpb19zd19yaW5nX3ByZWVuYWJsZTsKKwlyaW5nLT5wb3N0ZW5hYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wb3N0ZW5hYmxlOworCXJpbmctPnByZWRpc2FibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3ByZWRpc2FibGU7CiAJcmluZy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAotCWluZGlvX2Rldi0+cG9sbGZ1bmMgPSBremFsbG9jKHNpemVvZigqaW5kaW9fZGV2LT5wb2xsZnVuYyksIEdGUF9LRVJORUwpOwotCWlmIChpbmRpb19kZXYtPnBvbGxmdW5jID09IE5VTEwpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9paW9fc3dfcmJfZnJlZTs7Ci0JfQotCWluZGlvX2Rldi0+cG9sbGZ1bmMtPnBvbGxfZnVuY19tYWluID0gJmFkaXMxNjI2MF9wb2xsX2Z1bmNfdGg7Ci0JaW5kaW9fZGV2LT5wb2xsZnVuYy0+cHJpdmF0ZV9kYXRhID0gaW5kaW9fZGV2OworCXJldCA9IGlpb19hbGxvY19wb2xsZnVuYyhpbmRpb19kZXYsIE5VTEwsICZhZGlzMTYyNjBfcG9sbF9mdW5jX3RoKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX2lpb19zd19yYl9mcmVlOworCiAJaW5kaW9fZGV2LT5tb2RlcyB8PSBJTkRJT19SSU5HX1RSSUdHRVJFRDsKIAlyZXR1cm4gMDsKIApAQCAtMjQ0LDEzICsxOTAsMyBAQAogCWlpb19zd19yYl9mcmVlKGluZGlvX2Rldi0+cmluZyk7CiAJcmV0dXJuIHJldDsKIH0KLQotaW50IGFkaXMxNjI2MF9pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKLXsKLQlyZXR1cm4gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyKHJpbmcsIDApOwotfQotCi12b2lkIGFkaXMxNjI2MF91bmluaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKQotewotCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKHJpbmcpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MF90cmlnZ2VyLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWRpczE2MjYwX3RyaWdnZXIuYwppbmRleCBiM2M1NjU5Li5kZTAxNTM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWRpczE2MjYwX3RyaWdnZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWRpczE2MjYwX3RyaWdnZXIuYwpAQCAtMjMsOCArMjMsNyBAQAogCXN0cnVjdCBhZGlzMTYyNjBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7CiAJc3RydWN0IGlpb190cmlnZ2VyICp0cmlnID0gc3QtPnRyaWc7CiAKLQl0cmlnLT50aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0JaWlvX3RyaWdnZXJfcG9sbCh0cmlnKTsKKwlpaW9fdHJpZ2dlcl9wb2xsKHRyaWcsIHRpbWVzdGFtcCk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC04MywxNCArODIsMTMgQEAKIAlzdHJ1Y3QgYWRpczE2MjYwX3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CiAKIAlzdC0+dHJpZyA9IGlpb19hbGxvY2F0ZV90cmlnZ2VyKCk7Ci0Jc3QtPnRyaWctPm5hbWUgPSBrbWFsbG9jKElJT19UUklHR0VSX05BTUVfTEVOR1RILCBHRlBfS0VSTkVMKTsKKwlzdC0+dHJpZy0+bmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLAorCQkJCSAgICJhZGlzMTYyNjAtZGV2JWQiLAorCQkJCSAgIGluZGlvX2Rldi0+aWQpOwogCWlmICghc3QtPnRyaWctPm5hbWUpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9mcmVlX3RyaWc7CiAJfQotCXNucHJpbnRmKChjaGFyICopc3QtPnRyaWctPm5hbWUsCi0JCSBJSU9fVFJJR0dFUl9OQU1FX0xFTkdUSCwKLQkJICJhZGlzMTYyNjAtZGV2JWQiLCBpbmRpb19kZXYtPmlkKTsKIAlzdC0+dHJpZy0+ZGV2LnBhcmVudCA9ICZzdC0+dXMtPmRldjsKIAlzdC0+dHJpZy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlzdC0+dHJpZy0+cHJpdmF0ZV9kYXRhID0gc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2lpby5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9paW8uaAppbmRleCBmY2VlNDdjLi45ZDBjYTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2lpby5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaWlvLmgKQEAgLTE2LDkgKzE2LDcgQEAKICNpbmNsdWRlICJjaHJkZXYuaCIKIAogLyogSUlPIFRPRE8gTElTVCAqLwotLyogU3RhdGljIGRldmljZSBzcGVjaWZpYyBlbGVtZW50cyAoY29udmVyc2lvbiBmYWN0b3JzIGV0YykKLSAqIHNob3VsZCBiZSBleHBvcnRlZCB2aWEgc3lzZnMKLSAqCisvKgogICogUHJvdmlkZSBtZWFucyBvZiBhZGp1c3RpbmcgdGltZXIgYWNjdXJhY3kuCiAgKiBDdXJyZW50bHkgYXNzdW1lcyBuYW5vIHNlY29uZHMuCiAgKi8KQEAgLTI4NCw0OSArMjgyLDYgQEAKIAkJICBzNjQgdGltZXN0YW1wKTsKIAogLyoqCi0gKiBzdHJ1Y3QgaWlvX3dvcmtfY29udCAtIGNvbnRhaW5lciBmb3Igd2hlbiBzaW5nbGV0b24gaGFuZGxlciBjYXNlIG1hdHRlcnMKLSAqIEB3czoJCQlbREVWSUNFXSB3b3JrX3N0cnVjdCB3aGVuIG5vdCBvbmx5IHBvc3NpYmxlIGV2ZW50Ci0gKiBAd3Nfbm9jaGVjazoJCVtERVZJQ0VdIHdvcmtfc3RydWN0IHdoZW4gb25seSBwb3NzaWJsZSBldmVudAotICogQGFkZHJlc3M6CQlbREVWSUNFXSBhc3NvY2lhdGVkIHJlZ2lzdGVyIGFkZHJlc3MKLSAqIEBtYXNrOgkJW0RFVklDRV0gYXNzb2NpYXRlZCBtYXNrIGZvciBpZGVudGlmeWluZyBldmVudCBzb3VyY2UKLSAqIEBzdDoJCQlbREVWSUNFXSBkZXZpY2Ugc3BlY2lmaWMgc3RhdGUgaW5mb3JtYXRpb24KLSAqKi8KLXN0cnVjdCBpaW9fd29ya19jb250IHsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd3M7Ci0Jc3RydWN0IHdvcmtfc3RydWN0CXdzX25vY2hlY2s7Ci0JaW50CQkJYWRkcmVzczsKLQlpbnQJCQltYXNrOwotCXZvaWQJCQkqc3Q7Ci19OwotCi0jZGVmaW5lIHRvX2lpb193b3JrX2NvbnRfY2hlY2soX3dzKQkJCVwKLQljb250YWluZXJfb2YoX3dzLCBzdHJ1Y3QgaWlvX3dvcmtfY29udCwgd3MpCi0KLSNkZWZpbmUgdG9faWlvX3dvcmtfY29udF9ub19jaGVjayhfd3MpCQkJCVwKLQljb250YWluZXJfb2YoX3dzLCBzdHJ1Y3QgaWlvX3dvcmtfY29udCwgd3Nfbm9jaGVjaykKLQotLyoqCi0gKiBpaW9faW5pdF93b3JrX2NvbnQoKSAtIGludGlpYWxpemUgdGhlIGVsZW1lbnRzIG9mIGEgd29yayBjb250YWluZXIKLSAqIEBjb250OiB0aGUgd29yayBjb250YWluZXIKLSAqIEBfY2hlY2tmdW5jOiBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgaW50IHNvdXJjZXMKLSAqIEBfbm9jaGVja2Z1bmM6IGZ1bmN0aW9uIGZvciB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIGludCBzb3VyY2UKLSAqIEBfYWRkOiBkcml2ZXIgZGVwZW5kZW50LCB0eXBpY2FsbHkgYSByZWdpc3RlciBhZGRyZXNzCi0gKiBAX21hc2s6IGRyaXZlciBkZXBlbmRlbnQsIHR5cGljYWxseSBhIGJpdCBtYXNrIGZvciBhIHJlZ2lzdGVyCi0gKiBAX3N0OiBkcml2ZXIgZGVwZW5kZW50LCB0eXBpY2FsbHkgcG9pbnRlciB0byBhIGRldmljZSBzdGF0ZSBzdHJ1Y3R1cmUKLSAqKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotaWlvX2luaXRfd29ya19jb250KHN0cnVjdCBpaW9fd29ya19jb250ICpjb250LAotCQkgICB2b2lkICgqX2NoZWNrZnVuYykoc3RydWN0IHdvcmtfc3RydWN0ICopLAotCQkgICB2b2lkICgqX25vY2hlY2tmdW5jKShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKiksCi0JCSAgIGludCBfYWRkLCBpbnQgX21hc2ssIHZvaWQgKl9zdCkKLXsKLQlJTklUX1dPUksoJihjb250KS0+d3MsIF9jaGVja2Z1bmMpOwotCUlOSVRfV09SSygmKGNvbnQpLT53c19ub2NoZWNrLCBfbm9jaGVja2Z1bmMpOwotCWNvbnQtPmFkZHJlc3MgPSBfYWRkOwotCWNvbnQtPm1hc2sgPSBfbWFzazsKLQljb250LT5zdCA9IF9zdDsKLX0KLS8qKgogICogX19paW9fcHVzaF9ldmVudCgpIC0gdHJpZXMgdG8gYWRkIGFuIGV2ZW50IHRvIHRoZSBsaXN0IGFzc29jaWF0ZWQgd2l0aCBhIGNocmRldgogICogQGV2X2ludDoJCXRoZSBldmVudCBpbnRlcmZhY2UgdG8gd2hpY2ggd2UgYXJlIHB1c2hpbmcgdGhlIGV2ZW50CiAgKiBAZXZfY29kZToJCXRoZSBvdXRnb2luZyBldmVudCBjb2RlCkBAIC00MjgsNyArMzgzLDkgQEAKICAqKi8KIHZvaWQgaWlvX2dldCh2b2lkKTsKIAotLyogUmluZyBidWZmZXIgcmVsYXRlZCAqLworLyoqCisgKiBpaW9fZGV2aWNlX2dldF9jaHJkZXZfbWlub3IoKSAtIGdldCBhbiB1bnVzZWQgbWlub3IgbnVtYmVyCisgKiovCiBpbnQgaWlvX2RldmljZV9nZXRfY2hyZGV2X21pbm9yKHZvaWQpOwogdm9pZCBpaW9fZGV2aWNlX2ZyZWVfY2hyZGV2X21pbm9yKGludCB2YWwpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvS2NvbmZpZwppbmRleCA2MzA4ZDZmLi4zMWE2MjMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L0tjb25maWcKQEAgLTYsOSArNiw4IEBACiBjb25maWcgQURJUzE2MzAwCiAJdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIEFESVMxNjMwMCBJTVUgU1BJIGRyaXZlciIKIAlkZXBlbmRzIG9uIFNQSQotCXNlbGVjdCBJSU9fU1dfUklORwotCXNlbGVjdCBJSU9fUklOR19CVUZGRVIKLQlzZWxlY3QgSUlPX1RSSUdHRVIKKwlzZWxlY3QgSUlPX1NXX1JJTkcgaWYgSUlPX1JJTkdfQlVGRkVSCisJc2VsZWN0IElJT19UUklHR0VSIGlmIElJT19SSU5HX0JVRkZFUgogCWhlbHAKIAkgIFNheSB5ZXMgaGVyZSB0byBidWlsZCBzdXBwb3J0IGZvciBBbmFsb2cgRGV2aWNlcyBhZGlzMTYzMDAgZm91ciBkZWdyZWVzCiAJICBvZiBmcmVlZG9tIGluZXJ0aWFsIHNlbnNvci4KQEAgLTI0LDEwICsyMyw5IEBACiAKIGNvbmZpZyBBRElTMTY0MDAKIAl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQURJUzE2NDAwLzUgSU1VIFNQSSBkcml2ZXIiCi0gCWRlcGVuZHMgb24gU1BJCi0Jc2VsZWN0IElJT19TV19SSU5HCi0Jc2VsZWN0IElJT19SSU5HX0JVRkZFUgotCXNlbGVjdCBJSU9fVFJJR0dFUgotIAloZWxwCi0gCSAgU2F5IHllcyBoZXJlIHRvIGJ1aWxkIHN1cHBvcnQgZm9yIEFuYWxvZyBEZXZpY2VzIGFkaXMxNjQwMC81IHRyaWF4aWFsCi0gCSAgaW5lcnRpYWwgc2Vuc29yIHdpdGggTWFnbmV0b21ldGVyLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKwlkZXBlbmRzIG9uIFNQSQorCXNlbGVjdCBJSU9fU1dfUklORyBpZiBJSU9fUklOR19CVUZGRVIKKwlzZWxlY3QgSUlPX1RSSUdHRVIgaWYgSUlPX1JJTkdfQlVGRkVSCisJaGVscAorCSAgU2F5IHllcyBoZXJlIHRvIGJ1aWxkIHN1cHBvcnQgZm9yIEFuYWxvZyBEZXZpY2VzIGFkaXMxNjQwMC81IHRyaWF4aWFsCisJICBpbmVydGlhbCBzZW5zb3Igd2l0aCBNYWduZXRvbWV0ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L01ha2VmaWxlCmluZGV4IDMxZGY3MzUuLmYzYjQ1MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L01ha2VmaWxlCkBAIC0xLDYgKzEsNyBAQAogIwogIyBNYWtlZmlsZSBmb3IgSW5lcnRpYWwgTWVhc3VyZW1lbnQgVW5pdHMKICMKKwogYWRpczE2MzAwLXkgICAgICAgICAgICAgOj0gYWRpczE2MzAwX2NvcmUubwogYWRpczE2MzAwLSQoQ09ORklHX0lJT19SSU5HX0JVRkZFUikgKz0gYWRpczE2MzAwX3JpbmcubyBhZGlzMTYzMDBfdHJpZ2dlci5vCiBvYmotJChDT05GSUdfQURJUzE2MzAwKSArPSBhZGlzMTYzMDAubwpAQCAtMTEsNCArMTIsNCBAQAogCiBhZGlzMTY0MDAteSAgICAgICAgICAgICA6PSBhZGlzMTY0MDBfY29yZS5vCiBhZGlzMTY0MDAtJChDT05GSUdfSUlPX1JJTkdfQlVGRkVSKSArPSBhZGlzMTY0MDBfcmluZy5vIGFkaXMxNjQwMF90cmlnZ2VyLm8KLW9iai0kKENPTkZJR19BRElTMTY0MDApICs9IGFkaXMxNjQwMC5vClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorb2JqLSQoQ09ORklHX0FESVMxNjQwMCkgKz0gYWRpczE2NDAwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjMwMC5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzAwLmgKaW5kZXggMWM3ZWE1Yy4uMWYyNWQ2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzAwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzAwLmgKQEAgLTk0LDcgKzk0LDYgQEAKICAqIHN0cnVjdCBhZGlzMTYzMDBfc3RhdGUgLSBkZXZpY2UgaW5zdGFuY2Ugc3BlY2lmaWMgZGF0YQogICogQHVzOgkJCWFjdHVhbCBzcGlfZGV2aWNlCiAgKiBAd29ya190cmlnZ2VyX3RvX3Jpbmc6IGJoIGZvciB0cmlnZ2VyZWQgZXZlbnQgaGFuZGxpbmcKLSAqIEB3b3JrX2NvbnRfdGhyZXNoOiBDTEVBTgogICogQGludGVyOgkJdXNlZCB0byBjaGVjayBpZiBuZXcgaW50ZXJydXB0IGhhcyBiZWVuIHRyaWdnZXJlZAogICogQGxhc3RfdGltZXN0YW1wOglwYXNzaW5nIHRpbWVzdGFtcCBmcm9tIHRoIHRvIGJoIG9mIGludGVycnVwdCBoYW5kbGVyCiAgKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQpAQCAtMTA2LDcgKzEwNSw2IEBACiBzdHJ1Y3QgYWRpczE2MzAwX3N0YXRlIHsKIAlzdHJ1Y3Qgc3BpX2RldmljZQkJKnVzOwogCXN0cnVjdCB3b3JrX3N0cnVjdAkJd29ya190cmlnZ2VyX3RvX3Jpbmc7Ci0Jc3RydWN0IGlpb193b3JrX2NvbnQJCXdvcmtfY29udF90aHJlc2g7CiAJczY0CQkJCWxhc3RfdGltZXN0YW1wOwogCXN0cnVjdCBpaW9fZGV2CQkJKmluZGlvX2RldjsKIAlzdHJ1Y3QgaWlvX3RyaWdnZXIJCSp0cmlnOwpAQCAtMTE1LDMwICsxMTMsMjIgQEAKIAlzdHJ1Y3QgbXV0ZXgJCQlidWZfbG9jazsKIH07CiAKLWludCBhZGlzMTYzMDBfc3BpX3JlYWRfYnVyc3Qoc3RydWN0IGRldmljZSAqZGV2LCB1OCAqcngpOwotCiBpbnQgYWRpczE2MzAwX3NldF9pcnEoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGVuYWJsZSk7CiAKLWludCBhZGlzMTYzMDBfcmVzZXQoc3RydWN0IGRldmljZSAqZGV2KTsKLQotaW50IGFkaXMxNjMwMF9jaGVja19zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2KTsKLQogI2lmZGVmIENPTkZJR19JSU9fUklOR19CVUZGRVIKIC8qIEF0IHRoZSBtb21lbnQgdHJpZ2dlcnMgYXJlIG9ubHkgdXNlZCBmb3IgcmluZyBidWZmZXIKICAqIGZpbGxpbmcuIFRoaXMgbWF5IGNoYW5nZSEKICAqLwogCi1lbnVtIGFkaXMxNjMwMF9zY2FuIHsKLQlBRElTMTYzMDBfU0NBTl9TVVBQTFksCi0JQURJUzE2MzAwX1NDQU5fR1lST19YLAotCUFESVMxNjMwMF9TQ0FOX0FDQ19YLAotCUFESVMxNjMwMF9TQ0FOX0FDQ19ZLAotCUFESVMxNjMwMF9TQ0FOX0FDQ19aLAotCUFESVMxNjMwMF9TQ0FOX1RFTVAsCi0JQURJUzE2MzAwX1NDQU5fQURDXzAsCi0JQURJUzE2MzAwX1NDQU5fSU5DTElfWCwKLQlBRElTMTYzMDBfU0NBTl9JTkNMSV9ZLAotfTsKKyNkZWZpbmUgQURJUzE2MzAwX1NDQU5fU1VQUExZCTAKKyNkZWZpbmUgQURJUzE2MzAwX1NDQU5fR1lST19YCTEKKyNkZWZpbmUgQURJUzE2MzAwX1NDQU5fQUNDX1gJMgorI2RlZmluZSBBRElTMTYzMDBfU0NBTl9BQ0NfWQkzCisjZGVmaW5lIEFESVMxNjMwMF9TQ0FOX0FDQ19aCTQKKyNkZWZpbmUgQURJUzE2MzAwX1NDQU5fVEVNUAk1CisjZGVmaW5lIEFESVMxNjMwMF9TQ0FOX0FEQ18wCTYKKyNkZWZpbmUgQURJUzE2MzAwX1NDQU5fSU5DTElfWAk3CisjZGVmaW5lIEFESVMxNjMwMF9TQ0FOX0lOQ0xJX1kJOAogCiB2b2lkIGFkaXMxNjMwMF9yZW1vdmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKIGludCBhZGlzMTYzMDBfcHJvYmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjMwMF9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzMDBfY29yZS5jCmluZGV4IDVhN2U1ZWYuLmYxOTUwZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjMwMF9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzAwX2NvcmUuYwpAQCAtMTQsMTIgKzE0LDEzIEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCiAjaW5jbHVkZSAiLi4vaWlvLmgiCiAjaW5jbHVkZSAiLi4vc3lzZnMuaCIKKyNpbmNsdWRlICIuLi9yaW5nX2dlbmVyaWMuaCIKICNpbmNsdWRlICIuLi9hY2NlbC9hY2NlbC5oIgogI2luY2x1ZGUgIi4uL2FjY2VsL2luY2xpbm9tZXRlci5oIgogI2luY2x1ZGUgIi4uL2d5cm8vZ3lyby5oIgpAQCAtMjksMTAgKzMwLDcgQEAKIAogI2RlZmluZSBEUklWRVJfTkFNRQkJImFkaXMxNjMwMCIKIAotLyogQXQgdGhlIG1vbWVudCB0aGUgc3BpIGZyYW1ld29yayBkb2Vzbid0IGFsbG93IGdsb2JhbCBzZXR0aW5nIG9mIGNzX2NoYW5nZS4KLSAqIEl0J3MgaW4gdGhlIGxpa2VseSB0byBiZSBhZGRlZCBjb21tZW50IGF0IHRoZSB0b3Agb2Ygc3BpLmguCi0gKiBUaGlzIG1lYW5zIHRoYXQgdXNlIGNhbm5vdCBiZSBtYWRlIG9mIHNwaV93cml0ZSBldGMuCi0gKi8KK3N0YXRpYyBpbnQgYWRpczE2MzAwX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiAvKioKICAqIGFkaXMxNjMwMF9zcGlfd3JpdGVfcmVnXzgoKSAtIHdyaXRlIHNpbmdsZSBieXRlIHRvIGEgcmVnaXN0ZXIKQEAgLTc5LDExICs3NywxMyBAQAogCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAogCQkJLmxlbiA9IDIsCiAJCQkuY3NfY2hhbmdlID0gMSwKKwkJCS5kZWxheV91c2VjcyA9IDc1LAogCQl9LCB7CiAJCQkudHhfYnVmID0gc3QtPnR4ICsgMiwKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAogCQkJLmNzX2NoYW5nZSA9IDEsCisJCQkuZGVsYXlfdXNlY3MgPSA3NSwKIAkJfSwKIAl9OwogCkBAIC0xMjIsMTIgKzEyMiwxNCBAQAogCQkJLnR4X2J1ZiA9IHN0LT50eCwKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAotCQkJLmNzX2NoYW5nZSA9IDAsCisJCQkuY3NfY2hhbmdlID0gMSwKKwkJCS5kZWxheV91c2VjcyA9IDc1LAogCQl9LCB7CiAJCQkucnhfYnVmID0gc3QtPnJ4LAogCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAogCQkJLmxlbiA9IDIsCi0JCQkuY3NfY2hhbmdlID0gMCwKKwkJCS5jc19jaGFuZ2UgPSAxLAorCQkJLmRlbGF5X3VzZWNzID0gNzUsCiAJCX0sCiAJfTsKIApAQCAtMTU0LDU0ICsxNTYsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qKgotICogYWRpczE2MzAwX3NwaV9yZWFkX2J1cnN0KCkgLSByZWFkIGFsbCBkYXRhIHJlZ2lzdGVycwotICogQGRldjogZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBjaGlsZCBvZiBhY3R1YWwgZGV2aWNlIChpaW9fZGV2IG9yIGlpb190cmlnKQotICogQHJ4OiBzb21ld2hlcmUgdG8gcGFzcyBiYWNrIHRoZSB2YWx1ZSByZWFkIChtaW4gc2l6ZSBpcyAyNCBieXRlcykKLSAqKi8KLWludCBhZGlzMTYzMDBfc3BpX3JlYWRfYnVyc3Qoc3RydWN0IGRldmljZSAqZGV2LCB1OCAqcngpCi17Ci0Jc3RydWN0IHNwaV9tZXNzYWdlIG1zZzsKLQlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGFkaXMxNjMwMF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7Ci0JdTMyIG9sZF9zcGVlZF9oeiA9IHN0LT51cy0+bWF4X3NwZWVkX2h6OwotCWludCByZXQ7Ci0KLQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXJzW10gPSB7Ci0JCXsKLQkJCS50eF9idWYgPSBzdC0+dHgsCi0JCQkuYml0c19wZXJfd29yZCA9IDgsCi0JCQkubGVuID0gMiwKLQkJCS5jc19jaGFuZ2UgPSAwLAotCQl9LCB7Ci0JCQkucnhfYnVmID0gcngsCi0JCQkuYml0c19wZXJfd29yZCA9IDgsCi0JCQkubGVuID0gMTgsCi0JCQkuY3NfY2hhbmdlID0gMCwKLQkJfSwKLQl9OwotCi0JbXV0ZXhfbG9jaygmc3QtPmJ1Zl9sb2NrKTsKLQlzdC0+dHhbMF0gPSBBRElTMTYzMDBfUkVBRF9SRUcoQURJUzE2MzAwX0dMT0JfQ01EKTsKLQlzdC0+dHhbMV0gPSAwOwotCi0Jc3BpX21lc3NhZ2VfaW5pdCgmbXNnKTsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlcnNbMF0sICZtc2cpOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4ZmVyc1sxXSwgJm1zZyk7Ci0KLQlzdC0+dXMtPm1heF9zcGVlZF9oeiA9IG1pbihBRElTMTYzMDBfU1BJX0JVUlNULCBvbGRfc3BlZWRfaHopOwotCXNwaV9zZXR1cChzdC0+dXMpOwotCi0JcmV0ID0gc3BpX3N5bmMoc3QtPnVzLCAmbXNnKTsKLQlpZiAocmV0KQotCQlkZXZfZXJyKCZzdC0+dXMtPmRldiwgInByb2JsZW0gd2hlbiBidXJzdCByZWFkaW5nIik7Ci0KLQlzdC0+dXMtPm1heF9zcGVlZF9oeiA9IG9sZF9zcGVlZF9oejsKLQlzcGlfc2V0dXAoc3QtPnVzKTsKLQltdXRleF91bmxvY2soJnN0LT5idWZfbG9jayk7Ci0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIHNzaXplX3QgYWRpczE2MzAwX3NwaV9yZWFkX3NpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQljaGFyICpidWYsCkBAIC0yNDAsNiArMTk0LDI0IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHZhbCAmIDB4MEZGRik7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IGFkaXMxNjMwMF9yZWFkXzE0Yml0X3Vuc2lnbmVkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZikKK3sKKwlpbnQgcmV0OworCXUxNiB2YWwgPSAwOworCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKKworCXJldCA9IGFkaXMxNjMwMF9zcGlfcmVhZF9yZWdfMTYoZGV2LCB0aGlzX2F0dHItPmFkZHJlc3MsICZ2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAodmFsICYgQURJUzE2MzAwX0VSUk9SX0FDVElWRSkKKwkJYWRpczE2MzAwX2NoZWNrX3N0YXR1cyhkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHZhbCAmIDB4M0ZGRik7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGFkaXMxNjMwMF9yZWFkXzE0Yml0X3NpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQljaGFyICpidWYpCkBAIC0zNTYsNiArMzI4LDE4IEBACiAJcmV0dXJuIHJldCA/IHJldCA6IGxlbjsKIH0KIAorc3RhdGljIGludCBhZGlzMTYzMDBfcmVzZXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQ7CisJcmV0ID0gYWRpczE2MzAwX3NwaV93cml0ZV9yZWdfOChkZXYsCisJCQlBRElTMTYzMDBfR0xPQl9DTUQsCisJCQlBRElTMTYzMDBfR0xPQl9DTURfU1dfUkVTRVQpOworCWlmIChyZXQpCisJCWRldl9lcnIoZGV2LCAicHJvYmxlbSByZXNldHRpbmcgZGV2aWNlIik7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgc3NpemVfdCBhZGlzMTYzMDBfd3JpdGVfcmVzZXQoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQpAQCAtMzcxLDggKzM1NSw2IEBACiAJcmV0dXJuIC0xOwogfQogCi0KLQogaW50IGFkaXMxNjMwMF9zZXRfaXJxKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBlbmFibGUpCiB7CiAJaW50IHJldDsKQEAgLTM5NiwxOCArMzc4LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgYWRpczE2MzAwX3Jlc2V0KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgcmV0OwotCXJldCA9IGFkaXMxNjMwMF9zcGlfd3JpdGVfcmVnXzgoZGV2LAotCQkJQURJUzE2MzAwX0dMT0JfQ01ELAotCQkJQURJUzE2MzAwX0dMT0JfQ01EX1NXX1JFU0VUKTsKLQlpZiAocmV0KQotCQlkZXZfZXJyKGRldiwgInByb2JsZW0gcmVzZXR0aW5nIGRldmljZSIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQogLyogUG93ZXIgZG93biB0aGUgZGV2aWNlICovCiBzdGF0aWMgaW50IGFkaXMxNjMwMF9zdG9wX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC00MjEsNyArMzkxLDI0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGFkaXMxNjMwMF9jaGVja19zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhZGlzMTYzMDBfc2VsZl90ZXN0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCXJldCA9IGFkaXMxNjMwMF9zcGlfd3JpdGVfcmVnXzE2KGRldiwKKwkJCUFESVMxNjMwMF9NU0NfQ1RSTCwKKwkJCUFESVMxNjMwMF9NU0NfQ1RSTF9NRU1fVEVTVCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgInByb2JsZW0gc3RhcnRpbmcgc2VsZiB0ZXN0Iik7CisJCWdvdG8gZXJyX3JldDsKKwl9CisKKwlhZGlzMTYzMDBfY2hlY2tfc3RhdHVzKGRldik7CisKK2Vycl9yZXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZGlzMTYzMDBfY2hlY2tfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAl1MTYgc3RhdHVzOwogCWludCByZXQ7CkBAIC00ODMsNiArNDcwLDExIEBACiAJfQogCiAJLyogRG8gc2VsZiB0ZXN0ICovCisJcmV0ID0gYWRpczE2MzAwX3NlbGZfdGVzdChkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJzZWxmIHRlc3QgZmFpbHVyZSIpOworCQlnb3RvIGVycl9yZXQ7CisJfQogCiAJLyogUmVhZCBzdGF0dXMgcmVnaXN0ZXIgdG8gY2hlY2sgdGhlIHJlc3VsdCAqLwogCXJldCA9IGFkaXMxNjMwMF9jaGVja19zdGF0dXMoZGV2KTsKQEAgLTUyNiw3ICs1MTgsNyBAQAogCQlhZGlzMTYzMDBfd3JpdGVfMTZiaXQsCiAJCUFESVMxNjMwMF9aQUNDTF9PRkYpOwogCi1zdGF0aWMgSUlPX0RFVl9BVFRSX0lOX05BTUVEX1JBVyhzdXBwbHksIGFkaXMxNjMwMF9yZWFkXzE0Yml0X3NpZ25lZCwKK3N0YXRpYyBJSU9fREVWX0FUVFJfSU5fTkFNRURfUkFXKHN1cHBseSwgYWRpczE2MzAwX3JlYWRfMTRiaXRfdW5zaWduZWQsCiAJCQkgICBBRElTMTYzMDBfU1VQUExZX09VVCk7CiBzdGF0aWMgSUlPX0NPTlNUX0FUVFIoaW5fc3VwcGx5X3NjYWxlLCAiMC4wMDI0MiIpOwogCkBAIC01NDgsNyArNTQwLDcgQEAKIAkJQURJUzE2MzAwX1lJTkNMSV9PVVQpOwogc3RhdGljIElJT19DT05TVF9BVFRSKGluY2xpX3NjYWxlLCAiMC4wNDQgZCIpOwogCi1zdGF0aWMgSUlPX0RFVl9BVFRSX1RFTVBfUkFXKGFkaXMxNjMwMF9yZWFkXzEyYml0X3NpZ25lZCk7CitzdGF0aWMgSUlPX0RFVl9BVFRSX1RFTVBfUkFXKGFkaXMxNjMwMF9yZWFkXzEyYml0X3Vuc2lnbmVkKTsKIHN0YXRpYyBJSU9fQ09OU1RfQVRUUih0ZW1wX29mZnNldCwgIjE5OC4xNiBLIik7CiBzdGF0aWMgSUlPX0NPTlNUX0FUVFIodGVtcF9zY2FsZSwgIjAuMTQgSyIpOwogCkBAIC02NTMsMjEgKzY0NSwxMyBAQAogCQlnb3RvIGVycm9yX3VucmVnX3JpbmdfZnVuY3M7CiAJcmVnZG9uZSA9IDE7CiAKLQlyZXQgPSBhZGlzMTYzMDBfaW5pdGlhbGl6ZV9yaW5nKHN0LT5pbmRpb19kZXYtPnJpbmcpOworCXJldCA9IGlpb19yaW5nX2J1ZmZlcl9yZWdpc3RlcihzdC0+aW5kaW9fZGV2LT5yaW5nLCAwKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIHJpbmdcbiIpOwogCQlnb3RvIGVycm9yX3VucmVnX3JpbmdfZnVuY3M7CiAJfQogCi0JaWYgKHNwaS0+aXJxICYmIGdwaW9faXNfdmFsaWQoaXJxX3RvX2dwaW8oc3BpLT5pcnEpKSA+IDApIHsKLSNpZiAwIC8qIGZpeG1lOiBoZXJlIHdlIHNob3VsZCBzdXBwb3J0ICovCi0JCWlpb19pbml0X3dvcmtfY29udCgmc3QtPndvcmtfY29udF90aHJlc2gsCi0JCQkJTlVMTCwKLQkJCQlhZGlzMTYzMDBfdGhyZXNoX2hhbmRsZXJfYmhfbm9fY2hlY2ssCi0JCQkJMCwKLQkJCQkwLAotCQkJCXN0KTsKLSNlbmRpZgorCWlmIChzcGktPmlycSkgewogCQlyZXQgPSBpaW9fcmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoc3BpLT5pcnEsCiAJCQkJc3QtPmluZGlvX2RldiwKIAkJCQkwLApAQCAtNjg4LDEzICs2NzIsMTIgQEAKIAlyZXR1cm4gMDsKIAogZXJyb3JfcmVtb3ZlX3RyaWdnZXI6Ci0JaWYgKHN0LT5pbmRpb19kZXYtPm1vZGVzICYgSU5ESU9fUklOR19UUklHR0VSRUQpCi0JCWFkaXMxNjMwMF9yZW1vdmVfdHJpZ2dlcihzdC0+aW5kaW9fZGV2KTsKKwlhZGlzMTYzMDBfcmVtb3ZlX3RyaWdnZXIoc3QtPmluZGlvX2Rldik7CiBlcnJvcl91bnJlZ2lzdGVyX2xpbmU6Ci0JaWYgKHN0LT5pbmRpb19kZXYtPm1vZGVzICYgSU5ESU9fUklOR19UUklHR0VSRUQpCisJaWYgKHNwaS0+aXJxKQogCQlpaW9fdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShzdC0+aW5kaW9fZGV2LCAwKTsKIGVycm9yX3VuaW5pdGlhbGl6ZV9yaW5nOgotCWFkaXMxNjMwMF91bmluaXRpYWxpemVfcmluZyhzdC0+aW5kaW9fZGV2LT5yaW5nKTsKKwlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihzdC0+aW5kaW9fZGV2LT5yaW5nKTsKIGVycm9yX3VucmVnX3JpbmdfZnVuY3M6CiAJYWRpczE2MzAwX3VuY29uZmlndXJlX3Jpbmcoc3QtPmluZGlvX2Rldik7CiBlcnJvcl9mcmVlX2RldjoKQEAgLTcxMiw3ICs2OTUsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qIGZpeG1lLCBjb25maXJtIG9yZGVyaW5nIGluIHRoaXMgZnVuY3Rpb24gKi8KIHN0YXRpYyBpbnQgYWRpczE2MzAwX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCWludCByZXQ7CkBAIC03MjYsMTIgKzcwOCwxMiBAQAogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKIAlhZGlzMTYzMDBfcmVtb3ZlX3RyaWdnZXIoaW5kaW9fZGV2KTsKLQlpZiAoc3BpLT5pcnEgJiYgZ3Bpb19pc192YWxpZChpcnFfdG9fZ3BpbyhzcGktPmlycSkpID4gMCkKKwlpZiAoc3BpLT5pcnEpCiAJCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKGluZGlvX2RldiwgMCk7CiAKLQlhZGlzMTYzMDBfdW5pbml0aWFsaXplX3JpbmcoaW5kaW9fZGV2LT5yaW5nKTsKLQlhZGlzMTYzMDBfdW5jb25maWd1cmVfcmluZyhpbmRpb19kZXYpOworCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKGluZGlvX2Rldi0+cmluZyk7CiAJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CisJYWRpczE2MzAwX3VuY29uZmlndXJlX3JpbmcoaW5kaW9fZGV2KTsKIAlrZnJlZShzdC0+dHgpOwogCWtmcmVlKHN0LT5yeCk7CiAJa2ZyZWUoc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzAwX3JpbmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjMwMF9yaW5nLmMKaW5kZXggNzZjZjhhNi4uZmM5MzE2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzAwX3JpbmcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzMDBfcmluZy5jCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKQEAgLTE2LDE3ICsxNyw3IEBACiAjaW5jbHVkZSAiLi4vdHJpZ2dlci5oIgogI2luY2x1ZGUgImFkaXMxNjMwMC5oIgogCi0vKioKLSAqIGNvbWJpbmVfOF90b18xNigpIHV0aWxpdHkgZnVuY3Rpb24gdG8gbXVuZ2UgdG8gdThzIGludG8gdTE2Ci0gKiovCi1zdGF0aWMgaW5saW5lIHUxNiBjb21iaW5lXzhfdG9fMTYodTggbG93ZXIsIHU4IHVwcGVyKQotewotCXUxNiBfbG93ZXIgPSBsb3dlcjsKLQl1MTYgX3VwcGVyID0gdXBwZXI7Ci0JcmV0dXJuIF9sb3dlciB8IChfdXBwZXIgPDwgOCk7Ci19Ci0KLXN0YXRpYyBJSU9fU0NBTl9FTF9DKHN1cHBseSwgQURJUzE2MzAwX1NDQU5fU1VQUExZLCBJSU9fU0lHTkVEKDE0KSwKK3N0YXRpYyBJSU9fU0NBTl9FTF9DKHN1cHBseSwgQURJUzE2MzAwX1NDQU5fU1VQUExZLCBJSU9fVU5TSUdORUQoMTQpLAogCQkgICAgIEFESVMxNjMwMF9TVVBQTFlfT1VULCBOVUxMKTsKIAogc3RhdGljIElJT19TQ0FOX0VMX0MoZ3lyb194LCBBRElTMTYzMDBfU0NBTl9HWVJPX1gsIElJT19TSUdORUQoMTQpLApAQCAtMzksOSArMzAsOSBAQAogc3RhdGljIElJT19TQ0FOX0VMX0MoYWNjZWxfeiwgQURJUzE2MzAwX1NDQU5fQUNDX1osIElJT19TSUdORUQoMTQpLAogCQkgICAgIEFESVMxNjMwMF9aQUNDTF9PVVQsIE5VTEwpOwogCi1zdGF0aWMgSUlPX1NDQU5fRUxfQyh0ZW1wLCBBRElTMTYzMDBfU0NBTl9URU1QLCBJSU9fU0lHTkVEKDEyKSwKK3N0YXRpYyBJSU9fU0NBTl9FTF9DKHRlbXAsIEFESVMxNjMwMF9TQ0FOX1RFTVAsIElJT19VTlNJR05FRCgxMiksCiAJCSAgICAgQURJUzE2MzAwX1RFTVBfT1VULCBOVUxMKTsKLXN0YXRpYyBJSU9fU0NBTl9FTF9DKGFkY18wLCBBRElTMTYzMDBfU0NBTl9BRENfMCwgSUlPX1NJR05FRCgxMiksCitzdGF0aWMgSUlPX1NDQU5fRUxfQyhhZGNfMCwgQURJUzE2MzAwX1NDQU5fQURDXzAsIElJT19VTlNJR05FRCgxMiksCiAJCSAgICAgQURJUzE2MzAwX0FVWF9BREMsIE5VTEwpOwogCiBzdGF0aWMgSUlPX1NDQU5fRUxfQyhpbmNsaV94LCBBRElTMTYzMDBfU0NBTl9JTkNMSV9YLCBJSU9fU0lHTkVEKDEyKSwKQEAgLTc0LDEwICs2NSwxMCBAQAogICogYWRpczE2MzAwX3BvbGxfZnVuY190aCgpIHRvcCBoYWxmIGludGVycnVwdCBoYW5kbGVyIGNhbGxlZCBieSB0cmlnZ2VyCiAgKiBAcHJpdmF0ZV9kYXRhOglpaW9fZGV2CiAgKiovCi1zdGF0aWMgdm9pZCBhZGlzMTYzMDBfcG9sbF9mdW5jX3RoKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCitzdGF0aWMgdm9pZCBhZGlzMTYzMDBfcG9sbF9mdW5jX3RoKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsIHM2NCB0aW1lKQogewogCXN0cnVjdCBhZGlzMTYzMDBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOwotCXN0LT5sYXN0X3RpbWVzdGFtcCA9IGluZGlvX2Rldi0+dHJpZy0+dGltZXN0YW1wOworCXN0LT5sYXN0X3RpbWVzdGFtcCA9IHRpbWU7CiAJc2NoZWR1bGVfd29yaygmc3QtPndvcmtfdHJpZ2dlcl90b19yaW5nKTsKIAkvKiBJbmRpY2F0ZSB0aGF0IHRoaXMgaW50ZXJydXB0IGlzIGJlaW5nIGhhbmRsZWQgKi8KIApAQCAtODcsNiArNzgsNTQgQEAKIAkgKi8KIH0KIAorLyoqCisgKiBhZGlzMTYzMDBfc3BpX3JlYWRfYnVyc3QoKSAtIHJlYWQgYWxsIGRhdGEgcmVnaXN0ZXJzCisgKiBAZGV2OiBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGNoaWxkIG9mIGFjdHVhbCBkZXZpY2UgKGlpb19kZXYgb3IgaWlvX3RyaWcpCisgKiBAcng6IHNvbWV3aGVyZSB0byBwYXNzIGJhY2sgdGhlIHZhbHVlIHJlYWQgKG1pbiBzaXplIGlzIDI0IGJ5dGVzKQorICoqLworc3RhdGljIGludCBhZGlzMTYzMDBfc3BpX3JlYWRfYnVyc3Qoc3RydWN0IGRldmljZSAqZGV2LCB1OCAqcngpCit7CisJc3RydWN0IHNwaV9tZXNzYWdlIG1zZzsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGFkaXMxNjMwMF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisJdTMyIG9sZF9zcGVlZF9oeiA9IHN0LT51cy0+bWF4X3NwZWVkX2h6OworCWludCByZXQ7CisKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXJzW10gPSB7CisJCXsKKwkJCS50eF9idWYgPSBzdC0+dHgsCisJCQkuYml0c19wZXJfd29yZCA9IDgsCisJCQkubGVuID0gMiwKKwkJCS5jc19jaGFuZ2UgPSAwLAorCQl9LCB7CisJCQkucnhfYnVmID0gcngsCisJCQkuYml0c19wZXJfd29yZCA9IDgsCisJCQkubGVuID0gMTgsCisJCQkuY3NfY2hhbmdlID0gMCwKKwkJfSwKKwl9OworCisJbXV0ZXhfbG9jaygmc3QtPmJ1Zl9sb2NrKTsKKwlzdC0+dHhbMF0gPSBBRElTMTYzMDBfUkVBRF9SRUcoQURJUzE2MzAwX0dMT0JfQ01EKTsKKwlzdC0+dHhbMV0gPSAwOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbXNnKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlcnNbMF0sICZtc2cpOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4ZmVyc1sxXSwgJm1zZyk7CisKKwlzdC0+dXMtPm1heF9zcGVlZF9oeiA9IEFESVMxNjMwMF9TUElfQlVSU1Q7CisJc3BpX3NldHVwKHN0LT51cyk7CisKKwlyZXQgPSBzcGlfc3luYyhzdC0+dXMsICZtc2cpOworCWlmIChyZXQpCisJCWRldl9lcnIoJnN0LT51cy0+ZGV2LCAicHJvYmxlbSB3aGVuIGJ1cnN0IHJlYWRpbmciKTsKKworCXN0LT51cy0+bWF4X3NwZWVkX2h6ID0gb2xkX3NwZWVkX2h6OworCXNwaV9zZXR1cChzdC0+dXMpOworCW11dGV4X3VubG9jaygmc3QtPmJ1Zl9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCiAvKiBXaGlsc3QgdGhpcyBtYWtlcyBhIGxvdCBvZiBjYWxscyB0byBpaW9fc3dfcmluZyBmdW5jdGlvbnMgLSBpdCBpcyB0byBkZXZpY2UKICAqIHNwZWNpZmljIHRvIGJlIHJvbGxlZCBpbnRvIHRoZSBjb3JlLgogICovCkBAIC0xMDksMTAgKzE0OCw5IEBACiAKIAlpZiAoc3QtPmluZGlvX2Rldi0+c2Nhbl9jb3VudCkKIAkJaWYgKGFkaXMxNjMwMF9zcGlfcmVhZF9idXJzdCgmc3QtPmluZGlvX2Rldi0+ZGV2LCBzdC0+cngpID49IDApCi0JCQlmb3IgKDsgaSA8IHN0LT5pbmRpb19kZXYtPnNjYW5fY291bnQ7IGkrKykgewotCQkJCWRhdGFbaV0gPSBjb21iaW5lXzhfdG9fMTYoc3QtPnJ4W2kqMisxXSwKLQkJCQkJCQkgIHN0LT5yeFtpKjJdKTsKLQkJCX0KKwkJCWZvciAoOyBpIDwgc3QtPmluZGlvX2Rldi0+c2Nhbl9jb3VudDsgaSsrKQorCQkJCWRhdGFbaV0gPSBiZTE2X3RvX2NwdXAoCisJCQkJCShfX2JlMTYgKikmKHN0LT5yeFtpKjJdKSk7CiAKIAkvKiBHdWFyYW50ZWVkIHRvIGJlIGFsaWduZWQgd2l0aCA4IGJ5dGUgYm91bmRhcnkgKi8KIAlpZiAoc3QtPmluZGlvX2Rldi0+c2Nhbl90aW1lc3RhbXApCkBAIC0xMjcsNDUgKzE2NSw2IEBACiAKIAlyZXR1cm47CiB9Ci0vKiBpbiB0aGVzZSBjaXJjdW1zdGFuY2VzIGlzIGl0IGJldHRlciB0byBnbyB3aXRoIHVuYWxpZ25lZCBwYWNraW5nIGFuZAotICogZGVhbCB3aXRoIHRoZSBjb3N0PyovCi1zdGF0aWMgaW50IGFkaXMxNjMwMF9kYXRhX3JkeV9yaW5nX3ByZWVuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotCXNpemVfdCBzaXplOwotCWRldl9kYmcoJmluZGlvX2Rldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQkvKiBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHNjYW4gZWxlbWVudHMgZW5hYmxlZCwgaWYgbm90IGZhaWwqLwotCWlmICghKGluZGlvX2Rldi0+c2Nhbl9jb3VudCB8fCBpbmRpb19kZXYtPnNjYW5fdGltZXN0YW1wKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoaW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3Muc2V0X2JwZCkgewotCQlpZiAoaW5kaW9fZGV2LT5zY2FuX3RpbWVzdGFtcCkKLQkJCWlmIChpbmRpb19kZXYtPnNjYW5fY291bnQpIC8qIFRpbWVzdGFtcCBhbmQgZGF0YSAqLwotCQkJCXNpemUgPSA0KnNpemVvZihzNjQpOwotCQkJZWxzZSAvKiBUaW1lc3RhbXAgb25seSAgKi8KLQkJCQlzaXplID0gc2l6ZW9mKHM2NCk7Ci0JCWVsc2UgLyogRGF0YSBvbmx5ICovCi0JCQlzaXplID0gaW5kaW9fZGV2LT5zY2FuX2NvdW50KnNpemVvZihzMTYpOwotCQlpbmRpb19kZXYtPnJpbmctPmFjY2Vzcy5zZXRfYnBkKGluZGlvX2Rldi0+cmluZywgc2l6ZSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWRpczE2MzAwX2RhdGFfcmR5X3JpbmdfcG9zdGVuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotCXJldHVybiBpbmRpb19kZXYtPnRyaWcKLQkJPyBpaW9fdHJpZ2dlcl9hdHRhY2hfcG9sbF9mdW5jKGluZGlvX2Rldi0+dHJpZywKLQkJCQkJICAgICAgIGluZGlvX2Rldi0+cG9sbGZ1bmMpCi0JCTogMDsKLX0KLQotc3RhdGljIGludCBhZGlzMTYzMDBfZGF0YV9yZHlfcmluZ19wcmVkaXNhYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCi17Ci0JcmV0dXJuIGluZGlvX2Rldi0+dHJpZwotCQk/IGlpb190cmlnZ2VyX2RldHRhY2hfcG9sbF9mdW5jKGluZGlvX2Rldi0+dHJpZywKLQkJCQkJCWluZGlvX2Rldi0+cG9sbGZ1bmMpCi0JCTogMDsKLX0KIAogdm9pZCBhZGlzMTYzMDBfdW5jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogewpAQCAtMjAyLDE4ICsyMDEsMTYgQEAKIAlpbmRpb19kZXYtPnJpbmcgPSByaW5nOwogCS8qIEVmZmVjdGl2ZWx5IHNlbGVjdCB0aGUgcmluZyBidWZmZXIgaW1wbGVtZW50YXRpb24gKi8KIAlpaW9fcmluZ19zd19yZWdpc3Rlcl9mdW5jcygmcmluZy0+YWNjZXNzKTsKLQlyaW5nLT5wcmVlbmFibGUgPSAmYWRpczE2MzAwX2RhdGFfcmR5X3JpbmdfcHJlZW5hYmxlOwotCXJpbmctPnBvc3RlbmFibGUgPSAmYWRpczE2MzAwX2RhdGFfcmR5X3JpbmdfcG9zdGVuYWJsZTsKLQlyaW5nLT5wcmVkaXNhYmxlID0gJmFkaXMxNjMwMF9kYXRhX3JkeV9yaW5nX3ByZWRpc2FibGU7CisJcmluZy0+YnBlID0gMjsKKwlyaW5nLT5wcmVlbmFibGUgPSAmaWlvX3N3X3JpbmdfcHJlZW5hYmxlOworCXJpbmctPnBvc3RlbmFibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3Bvc3RlbmFibGU7CisJcmluZy0+cHJlZGlzYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcHJlZGlzYWJsZTsKIAlyaW5nLT5vd25lciA9IFRISVNfTU9EVUxFOwogCi0JaW5kaW9fZGV2LT5wb2xsZnVuYyA9IGt6YWxsb2Moc2l6ZW9mKCppbmRpb19kZXYtPnBvbGxmdW5jKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGluZGlvX2Rldi0+cG9sbGZ1bmMgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX2lpb19zd19yYl9mcmVlOzsKLQl9Ci0JaW5kaW9fZGV2LT5wb2xsZnVuYy0+cG9sbF9mdW5jX21haW4gPSAmYWRpczE2MzAwX3BvbGxfZnVuY190aDsKLQlpbmRpb19kZXYtPnBvbGxmdW5jLT5wcml2YXRlX2RhdGEgPSBpbmRpb19kZXY7CisJcmV0ID0gaWlvX2FsbG9jX3BvbGxmdW5jKGluZGlvX2RldiwgTlVMTCwgJmFkaXMxNjMwMF9wb2xsX2Z1bmNfdGgpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfaWlvX3N3X3JiX2ZyZWU7CisKIAlpbmRpb19kZXYtPm1vZGVzIHw9IElORElPX1JJTkdfVFJJR0dFUkVEOwogCXJldHVybiAwOwogCkBAIC0yMjIsMTIgKzIxOSwzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGFkaXMxNjMwMF9pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKLXsKLQlyZXR1cm4gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyKHJpbmcsIDApOwotfQotCi12b2lkIGFkaXMxNjMwMF91bmluaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKQotewotCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKHJpbmcpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzAwX3RyaWdnZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjMwMF90cmlnZ2VyLmMKaW5kZXggNTRlZGIyMGIuLjY0MDM2Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjMwMF90cmlnZ2VyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzAwX3RyaWdnZXIuYwpAQCAtMjMsOCArMjMsNyBAQAogCXN0cnVjdCBhZGlzMTYzMDBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7CiAJc3RydWN0IGlpb190cmlnZ2VyICp0cmlnID0gc3QtPnRyaWc7CiAKLQl0cmlnLT50aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0JaWlvX3RyaWdnZXJfcG9sbCh0cmlnKTsKKwlpaW9fdHJpZ2dlcl9wb2xsKHRyaWcsIHRpbWVzdGFtcCk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC04NiwxNCArODUsMTMgQEAKIAlzdHJ1Y3QgYWRpczE2MzAwX3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CiAKIAlzdC0+dHJpZyA9IGlpb19hbGxvY2F0ZV90cmlnZ2VyKCk7Ci0Jc3QtPnRyaWctPm5hbWUgPSBrbWFsbG9jKElJT19UUklHR0VSX05BTUVfTEVOR1RILCBHRlBfS0VSTkVMKTsKKwlzdC0+dHJpZy0+bmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLAorCQkJCSAgICJhZGlzMTYzMDAtZGV2JWQiLAorCQkJCSAgIGluZGlvX2Rldi0+aWQpOwogCWlmICghc3QtPnRyaWctPm5hbWUpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9mcmVlX3RyaWc7CiAJfQotCXNucHJpbnRmKChjaGFyICopc3QtPnRyaWctPm5hbWUsCi0JCSBJSU9fVFJJR0dFUl9OQU1FX0xFTkdUSCwKLQkJICJhZGlzMTYzMDAtZGV2JWQiLCBpbmRpb19kZXYtPmlkKTsKIAlzdC0+dHJpZy0+ZGV2LnBhcmVudCA9ICZzdC0+dXMtPmRldjsKIAlzdC0+dHJpZy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlzdC0+dHJpZy0+cHJpdmF0ZV9kYXRhID0gc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzNTAuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjM1MC5oCmluZGV4IDMzNGIxOGEuLmIwMDAwMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjM1MC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjM1MC5oCkBAIC0xMDAsNyArMTAwLDYgQEAKICAqIHN0cnVjdCBhZGlzMTYzNTBfc3RhdGUgLSBkZXZpY2UgaW5zdGFuY2Ugc3BlY2lmaWMgZGF0YQogICogQHVzOgkJCWFjdHVhbCBzcGlfZGV2aWNlCiAgKiBAd29ya190cmlnZ2VyX3RvX3Jpbmc6IGJoIGZvciB0cmlnZ2VyZWQgZXZlbnQgaGFuZGxpbmcKLSAqIEB3b3JrX2NvbnRfdGhyZXNoOiBDTEVBTgogICogQGludGVyOgkJdXNlZCB0byBjaGVjayBpZiBuZXcgaW50ZXJydXB0IGhhcyBiZWVuIHRyaWdnZXJlZAogICogQGxhc3RfdGltZXN0YW1wOglwYXNzaW5nIHRpbWVzdGFtcCBmcm9tIHRoIHRvIGJoIG9mIGludGVycnVwdCBoYW5kbGVyCiAgKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQpAQCAtMTEyLDcgKzExMSw2IEBACiBzdHJ1Y3QgYWRpczE2MzUwX3N0YXRlIHsKIAlzdHJ1Y3Qgc3BpX2RldmljZQkJKnVzOwogCXN0cnVjdCB3b3JrX3N0cnVjdAkJd29ya190cmlnZ2VyX3RvX3Jpbmc7Ci0Jc3RydWN0IGlpb193b3JrX2NvbnQJCXdvcmtfY29udF9kYXRhX3JkeTsKIAlzNjQJCQkJbGFzdF90aW1lc3RhbXA7CiAJc3RydWN0IGlpb19kZXYJCQkqaW5kaW9fZGV2OwogCXN0cnVjdCBpaW9fdHJpZ2dlcgkJKnRyaWc7CkBAIC0xMjUsMTkgKzEyMywxNyBAQAogCiAjaWZkZWYgQ09ORklHX0lJT19SSU5HX0JVRkZFUgogCi1lbnVtIGFkaXMxNjM1MF9zY2FuIHsKLQlBRElTMTYzNTBfU0NBTl9TVVBQTFksCi0JQURJUzE2MzUwX1NDQU5fR1lST19YLAotCUFESVMxNjM1MF9TQ0FOX0dZUk9fWSwKLQlBRElTMTYzNTBfU0NBTl9HWVJPX1osCi0JQURJUzE2MzUwX1NDQU5fQUNDX1gsCi0JQURJUzE2MzUwX1NDQU5fQUNDX1ksCi0JQURJUzE2MzUwX1NDQU5fQUNDX1osCi0JQURJUzE2MzUwX1NDQU5fVEVNUF9YLAotCUFESVMxNjM1MF9TQ0FOX1RFTVBfWSwKLQlBRElTMTYzNTBfU0NBTl9URU1QX1osCi0JQURJUzE2MzUwX1NDQU5fQURDXzAKLX07CisjZGVmaW5lIEFESVMxNjM1MF9TQ0FOX1NVUFBMWQkwCisjZGVmaW5lIEFESVMxNjM1MF9TQ0FOX0dZUk9fWAkxCisjZGVmaW5lIEFESVMxNjM1MF9TQ0FOX0dZUk9fWQkyCisjZGVmaW5lIEFESVMxNjM1MF9TQ0FOX0dZUk9fWgkzCisjZGVmaW5lIEFESVMxNjM1MF9TQ0FOX0FDQ19YCTQKKyNkZWZpbmUgQURJUzE2MzUwX1NDQU5fQUNDX1kJNQorI2RlZmluZSBBRElTMTYzNTBfU0NBTl9BQ0NfWgk2CisjZGVmaW5lIEFESVMxNjM1MF9TQ0FOX1RFTVBfWAk3CisjZGVmaW5lIEFESVMxNjM1MF9TQ0FOX1RFTVBfWQk4CisjZGVmaW5lIEFESVMxNjM1MF9TQ0FOX1RFTVBfWgk5CisjZGVmaW5lIEFESVMxNjM1MF9TQ0FOX0FEQ18wCTEwCiAKIHZvaWQgYWRpczE2MzUwX3JlbW92ZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogaW50IGFkaXMxNjM1MF9wcm9iZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwpAQCAtMTUwLDggKzE0Niw2IEBACiBpbnQgYWRpczE2MzUwX2NvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogdm9pZCBhZGlzMTYzNTBfdW5jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKIAotaW50IGFkaXMxNjM1MF9pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyk7Ci12b2lkIGFkaXMxNjM1MF91bmluaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKTsKICNlbHNlIC8qIENPTkZJR19JSU9fUklOR19CVUZGRVIgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIGFkaXMxNjM1MF9yZW1vdmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQpAQCAtMTcxLDcgKzE2NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWRpczE2MzUwX2NvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCitzdGF0aWMgaW5saW5lIGludCBhZGlzMTYzNTBfY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTE3OSwxNSArMTczLDUgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGlzMTYzNTBfdW5jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogewogfQotCi1zdGF0aWMgaW5saW5lIGludCBhZGlzMTYzNTBfaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGlzMTYzNTBfdW5pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKLXsKLX0KLQogI2VuZGlmIC8qIENPTkZJR19JSU9fUklOR19CVUZGRVIgKi8KICNlbmRpZiAvKiBTUElfQURJUzE2MzUwX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzNTBfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzUwX2NvcmUuYwppbmRleCAwZWRkZTczLi4xNTc1YjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzNTBfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjM1MF9jb3JlLmMKQEAgLTE0LDEyICsxNCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLQorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAogI2luY2x1ZGUgIi4uL2lpby5oIgogI2luY2x1ZGUgIi4uL3N5c2ZzLmgiCisjaW5jbHVkZSAiLi4vcmluZ19nZW5lcmljLmgiCiAjaW5jbHVkZSAiLi4vYWNjZWwvYWNjZWwuaCIKICNpbmNsdWRlICIuLi9hZGMvYWRjLmgiCiAjaW5jbHVkZSAiLi4vZ3lyby9neXJvLmgiCkBAIC03NSwxMyArNzYsMTMgQEAKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAogCQkJLmNzX2NoYW5nZSA9IDEsCi0JCQkuZGVsYXlfdXNlY3MgPSAyNSwKKwkJCS5kZWxheV91c2VjcyA9IDM1LAogCQl9LCB7CiAJCQkudHhfYnVmID0gc3QtPnR4ICsgMiwKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAogCQkJLmNzX2NoYW5nZSA9IDEsCi0JCQkuZGVsYXlfdXNlY3MgPSAyNSwKKwkJCS5kZWxheV91c2VjcyA9IDM1LAogCQl9LAogCX07CiAKQEAgLTEyMSwxMyArMTIyLDEzIEBACiAJCQkuYml0c19wZXJfd29yZCA9IDgsCiAJCQkubGVuID0gMiwKIAkJCS5jc19jaGFuZ2UgPSAxLAotCQkJLmRlbGF5X3VzZWNzID0gMjUsCisJCQkuZGVsYXlfdXNlY3MgPSAzNSwKIAkJfSwgewogCQkJLnJ4X2J1ZiA9IHN0LT5yeCwKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAogCQkJLmNzX2NoYW5nZSA9IDEsCi0JCQkuZGVsYXlfdXNlY3MgPSAyNSwKKwkJCS5kZWxheV91c2VjcyA9IDM1LAogCQl9LAogCX07CiAKQEAgLTYxOSw3ICs2MjAsNyBAQAogCQlnb3RvIGVycm9yX3VucmVnX3JpbmdfZnVuY3M7CiAJcmVnZG9uZSA9IDE7CiAKLQlyZXQgPSBhZGlzMTYzNTBfaW5pdGlhbGl6ZV9yaW5nKHN0LT5pbmRpb19kZXYtPnJpbmcpOworCXJldCA9IGlpb19yaW5nX2J1ZmZlcl9yZWdpc3RlcihzdC0+aW5kaW9fZGV2LT5yaW5nLCAwKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIHJpbmdcbiIpOwogCQlnb3RvIGVycm9yX3VucmVnX3JpbmdfZnVuY3M7CkBAIC02NTEsNyArNjUyLDcgQEAKIAlpZiAoc3BpLT5pcnEpCiAJCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKHN0LT5pbmRpb19kZXYsIDApOwogZXJyb3JfdW5pbml0aWFsaXplX3Jpbmc6Ci0JYWRpczE2MzUwX3VuaW5pdGlhbGl6ZV9yaW5nKHN0LT5pbmRpb19kZXYtPnJpbmcpOworCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKHN0LT5pbmRpb19kZXYtPnJpbmcpOwogZXJyb3JfdW5yZWdfcmluZ19mdW5jczoKIAlhZGlzMTYzNTBfdW5jb25maWd1cmVfcmluZyhzdC0+aW5kaW9fZGV2KTsKIGVycm9yX2ZyZWVfZGV2OgpAQCAtNjg1LDcgKzY4Niw3IEBACiAJaWYgKHNwaS0+aXJxKQogCQlpaW9fdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShpbmRpb19kZXYsIDApOwogCi0JYWRpczE2MzUwX3VuaW5pdGlhbGl6ZV9yaW5nKGluZGlvX2Rldi0+cmluZyk7CisJaWlvX3JpbmdfYnVmZmVyX3VucmVnaXN0ZXIoaW5kaW9fZGV2LT5yaW5nKTsKIAlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoaW5kaW9fZGV2KTsKIAlhZGlzMTYzNTBfdW5jb25maWd1cmVfcmluZyhpbmRpb19kZXYpOwogCWtmcmVlKHN0LT50eCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzNTBfcmluZy5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzUwX3JpbmcuYwppbmRleCA1ZTk3MTZlLi5lMDUzZTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzNTBfcmluZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjM1MF9yaW5nLmMKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIApAQCAtMTYsMTYgKzE3LDYgQEAKICNpbmNsdWRlICIuLi90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiYWRpczE2MzUwLmgiCiAKLS8qKgotICogY29tYmluZV84X3RvXzE2KCkgdXRpbGl0eSBmdW5jdGlvbiB0byBtdW5nZSB0byB1OHMgaW50byB1MTYKLSAqKi8KLXN0YXRpYyBpbmxpbmUgdTE2IGNvbWJpbmVfOF90b18xNih1OCBsb3dlciwgdTggdXBwZXIpCi17Ci0JdTE2IF9sb3dlciA9IGxvd2VyOwotCXUxNiBfdXBwZXIgPSB1cHBlcjsKLQlyZXR1cm4gX2xvd2VyIHwgKF91cHBlciA8PCA4KTsKLX0KLQogc3RhdGljIElJT19TQ0FOX0VMX0Moc3VwcGx5LCBBRElTMTYzNTBfU0NBTl9TVVBQTFksIElJT19VTlNJR05FRCgxMiksCiAJCUFESVMxNjM1MF9TVVBQTFlfT1VULCBOVUxMKTsKIApAQCAtODAsMTAgKzcxLDEwIEBACiAgKiBhZGlzMTYzNTBfcG9sbF9mdW5jX3RoKCkgdG9wIGhhbGYgaW50ZXJydXB0IGhhbmRsZXIgY2FsbGVkIGJ5IHRyaWdnZXIKICAqIEBwcml2YXRlX2RhdGE6CWlpb19kZXYKICAqKi8KLXN0YXRpYyB2b2lkIGFkaXMxNjM1MF9wb2xsX2Z1bmNfdGgoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKK3N0YXRpYyB2b2lkIGFkaXMxNjM1MF9wb2xsX2Z1bmNfdGgoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwgczY0IHRpbWUpCiB7CiAJc3RydWN0IGFkaXMxNjM1MF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7Ci0Jc3QtPmxhc3RfdGltZXN0YW1wID0gaW5kaW9fZGV2LT50cmlnLT50aW1lc3RhbXA7CisJc3QtPmxhc3RfdGltZXN0YW1wID0gdGltZTsKIAlzY2hlZHVsZV93b3JrKCZzdC0+d29ya190cmlnZ2VyX3RvX3JpbmcpOwogfQogCkBAIC0xNTcsMTAgKzE0OCw5IEBACiAKIAlpZiAoc3QtPmluZGlvX2Rldi0+c2Nhbl9jb3VudCkKIAkJaWYgKGFkaXMxNjM1MF9zcGlfcmVhZF9idXJzdCgmc3QtPmluZGlvX2Rldi0+ZGV2LCBzdC0+cngpID49IDApCi0JCQlmb3IgKDsgaSA8IHN0LT5pbmRpb19kZXYtPnNjYW5fY291bnQ7IGkrKykgewotCQkJCWRhdGFbaV0gPSBjb21iaW5lXzhfdG9fMTYoc3QtPnJ4W2kqMisxXSwKLQkJCQkJCQkgIHN0LT5yeFtpKjJdKTsKLQkJCX0KKwkJCWZvciAoOyBpIDwgc3QtPmluZGlvX2Rldi0+c2Nhbl9jb3VudDsgaSsrKQorCQkJCWRhdGFbaV0gPSBiZTE2X3RvX2NwdXAoCisJCQkJCShfX2JlMTYgKikmKHN0LT5yeFtpKjJdKSk7CiAKIAkvKiBHdWFyYW50ZWVkIHRvIGJlIGFsaWduZWQgd2l0aCA4IGJ5dGUgYm91bmRhcnkgKi8KIAlpZiAoc3QtPmluZGlvX2Rldi0+c2Nhbl90aW1lc3RhbXApCkBAIC0xNzYsNDggKzE2Niw2IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IGFkaXMxNjM1MF9kYXRhX3JkeV9yaW5nX3ByZWVuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotCXNpemVfdCBzaXplOwotCWRldl9kYmcoJmluZGlvX2Rldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQkvKiBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHNjYW4gZWxlbWVudHMgZW5hYmxlZCwgaWYgbm90IGZhaWwqLwotCWlmICghKGluZGlvX2Rldi0+c2Nhbl9jb3VudCB8fCBpbmRpb19kZXYtPnNjYW5fdGltZXN0YW1wKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoaW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3Muc2V0X2JwZCkgewotCQlpZiAoaW5kaW9fZGV2LT5zY2FuX3RpbWVzdGFtcCkKLQkJCWlmIChpbmRpb19kZXYtPnNjYW5fY291bnQpCi0JCQkJLyogVGltZXN0YW1wIChhbGlnbmVkIHNpemVvZihzNjQpIGFuZCBkYXRhICovCi0JCQkJc2l6ZSA9ICgoKGluZGlvX2Rldi0+c2Nhbl9jb3VudCAqIHNpemVvZihzMTYpKQotCQkJCQkJKyBzaXplb2YoczY0KSAtIDEpCi0JCQkJCSYgfihzaXplb2YoczY0KSAtIDEpKQotCQkJCQkrIHNpemVvZihzNjQpOwotCQkJZWxzZSAvKiBUaW1lc3RhbXAgb25seSAgKi8KLQkJCQlzaXplID0gc2l6ZW9mKHM2NCk7Ci0JCWVsc2UgLyogRGF0YSBvbmx5ICovCi0JCQlzaXplID0gaW5kaW9fZGV2LT5zY2FuX2NvdW50KnNpemVvZihzMTYpOwotCQlpbmRpb19kZXYtPnJpbmctPmFjY2Vzcy5zZXRfYnBkKGluZGlvX2Rldi0+cmluZywgc2l6ZSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWRpczE2MzUwX2RhdGFfcmR5X3JpbmdfcG9zdGVuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotCXJldHVybiBpbmRpb19kZXYtPnRyaWcKLQkJPyBpaW9fdHJpZ2dlcl9hdHRhY2hfcG9sbF9mdW5jKGluZGlvX2Rldi0+dHJpZywKLQkJCQkJICAgICAgIGluZGlvX2Rldi0+cG9sbGZ1bmMpCi0JCTogMDsKLX0KLQotc3RhdGljIGludCBhZGlzMTYzNTBfZGF0YV9yZHlfcmluZ19wcmVkaXNhYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCi17Ci0JcmV0dXJuIGluZGlvX2Rldi0+dHJpZwotCQk/IGlpb190cmlnZ2VyX2RldHRhY2hfcG9sbF9mdW5jKGluZGlvX2Rldi0+dHJpZywKLQkJCQkJCWluZGlvX2Rldi0+cG9sbGZ1bmMpCi0JCTogMDsKLX0KLQogdm9pZCBhZGlzMTYzNTBfdW5jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogewogCWtmcmVlKGluZGlvX2Rldi0+cG9sbGZ1bmMpOwpAQCAtMjU1LDE4ICsyMDMsMTYgQEAKIAlpbmRpb19kZXYtPnJpbmcgPSByaW5nOwogCS8qIEVmZmVjdGl2ZWx5IHNlbGVjdCB0aGUgcmluZyBidWZmZXIgaW1wbGVtZW50YXRpb24gKi8KIAlpaW9fcmluZ19zd19yZWdpc3Rlcl9mdW5jcygmcmluZy0+YWNjZXNzKTsKLQlyaW5nLT5wcmVlbmFibGUgPSAmYWRpczE2MzUwX2RhdGFfcmR5X3JpbmdfcHJlZW5hYmxlOwotCXJpbmctPnBvc3RlbmFibGUgPSAmYWRpczE2MzUwX2RhdGFfcmR5X3JpbmdfcG9zdGVuYWJsZTsKLQlyaW5nLT5wcmVkaXNhYmxlID0gJmFkaXMxNjM1MF9kYXRhX3JkeV9yaW5nX3ByZWRpc2FibGU7CisJcmluZy0+YnBlID0gMjsKKwlyaW5nLT5wcmVlbmFibGUgPSAmaWlvX3N3X3JpbmdfcHJlZW5hYmxlOworCXJpbmctPnBvc3RlbmFibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3Bvc3RlbmFibGU7CisJcmluZy0+cHJlZGlzYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcHJlZGlzYWJsZTsKIAlyaW5nLT5vd25lciA9IFRISVNfTU9EVUxFOwogCi0JaW5kaW9fZGV2LT5wb2xsZnVuYyA9IGt6YWxsb2Moc2l6ZW9mKCppbmRpb19kZXYtPnBvbGxmdW5jKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGluZGlvX2Rldi0+cG9sbGZ1bmMgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX2lpb19zd19yYl9mcmVlOzsKLQl9Ci0JaW5kaW9fZGV2LT5wb2xsZnVuYy0+cG9sbF9mdW5jX21haW4gPSAmYWRpczE2MzUwX3BvbGxfZnVuY190aDsKLQlpbmRpb19kZXYtPnBvbGxmdW5jLT5wcml2YXRlX2RhdGEgPSBpbmRpb19kZXY7CisJcmV0ID0gaWlvX2FsbG9jX3BvbGxmdW5jKGluZGlvX2RldiwgTlVMTCwgJmFkaXMxNjM1MF9wb2xsX2Z1bmNfdGgpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfaWlvX3N3X3JiX2ZyZWU7CisKIAlpbmRpb19kZXYtPm1vZGVzIHw9IElORElPX1JJTkdfVFJJR0dFUkVEOwogCXJldHVybiAwOwogCkBAIC0yNzUsMTIgKzIyMSwzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGFkaXMxNjM1MF9pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKLXsKLQlyZXR1cm4gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyKHJpbmcsIDApOwotfQotCi12b2lkIGFkaXMxNjM1MF91bmluaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKQotewotCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKHJpbmcpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzUwX3RyaWdnZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjM1MF90cmlnZ2VyLmMKaW5kZXggMWZmYTc1ZC4uNzZlZGNjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzUwX3RyaWdnZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzNTBfdHJpZ2dlci5jCkBAIC0yMyw4ICsyMyw3IEBACiAJc3RydWN0IGFkaXMxNjM1MF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGRldl9pbmZvKTsKIAlzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcgPSBzdC0+dHJpZzsKIAotCXRyaWctPnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKLQlpaW9fdHJpZ2dlcl9wb2xsKHRyaWcpOworCWlpb190cmlnZ2VyX3BvbGwodHJpZywgdGltZXN0YW1wKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTg2LDE0ICs4NSwxMyBAQAogCXN0cnVjdCBhZGlzMTYzNTBfc3RhdGUgKnN0ID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKIAogCXN0LT50cmlnID0gaWlvX2FsbG9jYXRlX3RyaWdnZXIoKTsKLQlzdC0+dHJpZy0+bmFtZSA9IGttYWxsb2MoSUlPX1RSSUdHRVJfTkFNRV9MRU5HVEgsIEdGUF9LRVJORUwpOworCXN0LT50cmlnLT5uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsCisJCQkJICAgImFkaXMxNjM1MC1kZXYlZCIsCisJCQkJICAgaW5kaW9fZGV2LT5pZCk7CiAJaWYgKCFzdC0+dHJpZy0+bmFtZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX2ZyZWVfdHJpZzsKIAl9Ci0Jc25wcmludGYoKGNoYXIgKilzdC0+dHJpZy0+bmFtZSwKLQkJIElJT19UUklHR0VSX05BTUVfTEVOR1RILAotCQkgImFkaXMxNjM1MC1kZXYlZCIsIGluZGlvX2Rldi0+aWQpOwogCXN0LT50cmlnLT5kZXYucGFyZW50ID0gJnN0LT51cy0+ZGV2OwogCXN0LT50cmlnLT5vd25lciA9IFRISVNfTU9EVUxFOwogCXN0LT50cmlnLT5wcml2YXRlX2RhdGEgPSBzdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMC5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwLmgKaW5kZXggNWE2OWE3YS4uNmZmMzNlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwLmgKQEAgLTEyNiw3ICsxMjYsNiBAQAogICogc3RydWN0IGFkaXMxNjQwMF9zdGF0ZSAtIGRldmljZSBpbnN0YW5jZSBzcGVjaWZpYyBkYXRhCiAgKiBAdXM6CQkJYWN0dWFsIHNwaV9kZXZpY2UKICAqIEB3b3JrX3RyaWdnZXJfdG9fcmluZzogYmggZm9yIHRyaWdnZXJlZCBldmVudCBoYW5kbGluZwotICogQHdvcmtfY29udF90aHJlc2g6IENMRUFOCiAgKiBAaW50ZXI6CQl1c2VkIHRvIGNoZWNrIGlmIG5ldyBpbnRlcnJ1cHQgaGFzIGJlZW4gdHJpZ2dlcmVkCiAgKiBAbGFzdF90aW1lc3RhbXA6CXBhc3NpbmcgdGltZXN0YW1wIGZyb20gdGggdG8gYmggb2YgaW50ZXJydXB0IGhhbmRsZXIKICAqIEBpbmRpb19kZXY6CQlpbmR1c3RyaWFsIEkvTyBkZXZpY2Ugc3RydWN0dXJlCkBAIC0xMzgsNyArMTM3LDYgQEAKIHN0cnVjdCBhZGlzMTY0MDBfc3RhdGUgewogCXN0cnVjdCBzcGlfZGV2aWNlCQkqdXM7CiAJc3RydWN0IHdvcmtfc3RydWN0CQl3b3JrX3RyaWdnZXJfdG9fcmluZzsKLQlzdHJ1Y3QgaWlvX3dvcmtfY29udAkJd29ya19jb250X3RocmVzaDsKIAlzNjQJCQkJbGFzdF90aW1lc3RhbXA7CiAJc3RydWN0IGlpb19kZXYJCQkqaW5kaW9fZGV2OwogCXN0cnVjdCBpaW9fdHJpZ2dlcgkJKnRyaWc7CkBAIC0xNDcsMzMgKzE0NSwyNSBAQAogCXN0cnVjdCBtdXRleAkJCWJ1Zl9sb2NrOwogfTsKIAotaW50IGFkaXMxNjQwMF9zcGlfcmVhZF9idXJzdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU4ICpyeCk7Ci0KIGludCBhZGlzMTY0MDBfc2V0X2lycShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxlKTsKIAotaW50IGFkaXMxNjQwMF9yZXNldChzdHJ1Y3QgZGV2aWNlICpkZXYpOwotCi1pbnQgYWRpczE2NDAwX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYpOwotCiAjaWZkZWYgQ09ORklHX0lJT19SSU5HX0JVRkZFUgogLyogQXQgdGhlIG1vbWVudCB0cmlnZ2VycyBhcmUgb25seSB1c2VkIGZvciByaW5nIGJ1ZmZlcgogICogZmlsbGluZy4gVGhpcyBtYXkgY2hhbmdlIQogICovCiAKLWVudW0gYWRpczE2NDAwX3NjYW4gewotCUFESVMxNjQwMF9TQ0FOX1NVUFBMWSwKLQlBRElTMTY0MDBfU0NBTl9HWVJPX1gsCi0JQURJUzE2NDAwX1NDQU5fR1lST19ZLAotCUFESVMxNjQwMF9TQ0FOX0dZUk9fWiwKLQlBRElTMTY0MDBfU0NBTl9BQ0NfWCwKLQlBRElTMTY0MDBfU0NBTl9BQ0NfWSwKLQlBRElTMTY0MDBfU0NBTl9BQ0NfWiwKLQlBRElTMTY0MDBfU0NBTl9NQUdOX1gsCi0JQURJUzE2NDAwX1NDQU5fTUFHTl9ZLAotCUFESVMxNjQwMF9TQ0FOX01BR05fWiwKLQlBRElTMTY0MDBfU0NBTl9URU1QLAotCUFESVMxNjQwMF9TQ0FOX0FEQ18wCi19OworI2RlZmluZSBBRElTMTY0MDBfU0NBTl9TVVBQTFkJMAorI2RlZmluZSBBRElTMTY0MDBfU0NBTl9HWVJPX1gJMQorI2RlZmluZSBBRElTMTY0MDBfU0NBTl9HWVJPX1kJMgorI2RlZmluZSBBRElTMTY0MDBfU0NBTl9HWVJPX1oJMworI2RlZmluZSBBRElTMTY0MDBfU0NBTl9BQ0NfWAk0CisjZGVmaW5lIEFESVMxNjQwMF9TQ0FOX0FDQ19ZCTUKKyNkZWZpbmUgQURJUzE2NDAwX1NDQU5fQUNDX1oJNgorI2RlZmluZSBBRElTMTY0MDBfU0NBTl9NQUdOX1gJNworI2RlZmluZSBBRElTMTY0MDBfU0NBTl9NQUdOX1kJOAorI2RlZmluZSBBRElTMTY0MDBfU0NBTl9NQUdOX1oJOQorI2RlZmluZSBBRElTMTY0MDBfU0NBTl9URU1QCTEwCisjZGVmaW5lIEFESVMxNjQwMF9TQ0FOX0FEQ18wCTExCiAKIHZvaWQgYWRpczE2NDAwX3JlbW92ZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogaW50IGFkaXMxNjQwMF9wcm9iZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwpAQCAtMTg2LDggKzE3Niw2IEBACiBpbnQgYWRpczE2NDAwX2NvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogdm9pZCBhZGlzMTY0MDBfdW5jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKIAotaW50IGFkaXMxNjQwMF9pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyk7Ci12b2lkIGFkaXMxNjQwMF91bmluaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKTsKICNlbHNlIC8qIENPTkZJR19JSU9fUklOR19CVUZGRVIgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIGFkaXMxNjQwMF9yZW1vdmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQpAQCAtMjE2LDE0ICsyMDQsNSBAQAogewogfQogCi1zdGF0aWMgaW5saW5lIGludCBhZGlzMTY0MDBfaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGlzMTY0MDBfdW5pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKLXsKLX0KLQogI2VuZGlmIC8qIENPTkZJR19JSU9fUklOR19CVUZGRVIgKi8KICNlbmRpZiAvKiBTUElfQURJUzE2NDAwX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDBfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwX2NvcmUuYwppbmRleCBlNjllMmNlLi42MDEzZmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDBfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMF9jb3JlLmMKQEAgLTIxLDEyICsyMSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLQorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAogI2luY2x1ZGUgIi4uL2lpby5oIgogI2luY2x1ZGUgIi4uL3N5c2ZzLmgiCisjaW5jbHVkZSAiLi4vcmluZ19nZW5lcmljLmgiCiAjaW5jbHVkZSAiLi4vYWNjZWwvYWNjZWwuaCIKICNpbmNsdWRlICIuLi9hZGMvYWRjLmgiCiAjaW5jbHVkZSAiLi4vZ3lyby9neXJvLmgiCkBAIC0zNiw2ICszNyw4IEBACiAKICNkZWZpbmUgRFJJVkVSX05BTUUJCSJhZGlzMTY0MDAiCiAKK3N0YXRpYyBpbnQgYWRpczE2NDAwX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYpOworCiAvKiBBdCB0aGUgbW9tZW50IHRoZSBzcGkgZnJhbWV3b3JrIGRvZXNuJ3QgYWxsb3cgZ2xvYmFsIHNldHRpbmcgb2YgY3NfY2hhbmdlLgogICogSXQncyBpbiB0aGUgbGlrZWx5IHRvIGJlIGFkZGVkIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiBzcGkuaC4KICAqIFRoaXMgbWVhbnMgdGhhdCB1c2UgY2Fubm90IGJlIG1hZGUgb2Ygc3BpX3dyaXRlIGV0Yy4KQEAgLTE2MSw1NCArMTY0LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKioKLSAqIGFkaXMxNjQwMF9zcGlfcmVhZF9idXJzdCgpIC0gcmVhZCBhbGwgZGF0YSByZWdpc3RlcnMKLSAqIEBkZXY6IGRldmljZSBhc3NvY2lhdGVkIHdpdGggY2hpbGQgb2YgYWN0dWFsIGRldmljZSAoaWlvX2RldiBvciBpaW9fdHJpZykKLSAqIEByeDogc29tZXdoZXJlIHRvIHBhc3MgYmFjayB0aGUgdmFsdWUgcmVhZCAobWluIHNpemUgaXMgMjQgYnl0ZXMpCi0gKiovCi1pbnQgYWRpczE2NDAwX3NwaV9yZWFkX2J1cnN0KHN0cnVjdCBkZXZpY2UgKmRldiwgdTggKnJ4KQotewotCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBhZGlzMTY0MDBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOwotCXUzMiBvbGRfc3BlZWRfaHogPSBzdC0+dXMtPm1heF9zcGVlZF9oejsKLQlpbnQgcmV0OwotCi0Jc3RydWN0IHNwaV90cmFuc2ZlciB4ZmVyc1tdID0gewotCQl7Ci0JCQkudHhfYnVmID0gc3QtPnR4LAotCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAotCQkJLmxlbiA9IDIsCi0JCQkuY3NfY2hhbmdlID0gMCwKLQkJfSwgewotCQkJLnJ4X2J1ZiA9IHJ4LAotCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAotCQkJLmxlbiA9IDI0LAotCQkJLmNzX2NoYW5nZSA9IDEsCi0JCX0sCi0JfTsKLQotCW11dGV4X2xvY2soJnN0LT5idWZfbG9jayk7Ci0Jc3QtPnR4WzBdID0gQURJUzE2NDAwX1JFQURfUkVHKEFESVMxNjQwMF9HTE9CX0NNRCk7Ci0Jc3QtPnR4WzFdID0gMDsKLQotCXNwaV9tZXNzYWdlX2luaXQoJm1zZyk7Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnhmZXJzWzBdLCAmbXNnKTsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlcnNbMV0sICZtc2cpOwotCi0Jc3QtPnVzLT5tYXhfc3BlZWRfaHogPSBtaW4oQURJUzE2NDAwX1NQSV9CVVJTVCwgb2xkX3NwZWVkX2h6KTsKLQlzcGlfc2V0dXAoc3QtPnVzKTsKLQotCXJldCA9IHNwaV9zeW5jKHN0LT51cywgJm1zZyk7Ci0JaWYgKHJldCkKLQkJZGV2X2Vycigmc3QtPnVzLT5kZXYsICJwcm9ibGVtIHdoZW4gYnVyc3QgcmVhZGluZyIpOwotCi0Jc3QtPnVzLT5tYXhfc3BlZWRfaHogPSBvbGRfc3BlZWRfaHo7Ci0Jc3BpX3NldHVwKHN0LT51cyk7Ci0JbXV0ZXhfdW5sb2NrKCZzdC0+YnVmX2xvY2spOwotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IGFkaXMxNjQwMF9zcGlfcmVhZF9zaWduZWQoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJY2hhciAqYnVmLApAQCAtMjc3LDcgKzIzMiw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotCiBzdGF0aWMgc3NpemVfdCBhZGlzMTY0MDBfd3JpdGVfMTZiaXQoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJY29uc3QgY2hhciAqYnVmLApAQCAtMzQ5LDYgKzMwMywxOCBAQAogCXJldHVybiByZXQgPyByZXQgOiBsZW47CiB9CiAKK3N0YXRpYyBpbnQgYWRpczE2NDAwX3Jlc2V0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCXJldCA9IGFkaXMxNjQwMF9zcGlfd3JpdGVfcmVnXzgoZGV2LAorCQkJQURJUzE2NDAwX0dMT0JfQ01ELAorCQkJQURJUzE2NDAwX0dMT0JfQ01EX1NXX1JFU0VUKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKGRldiwgInByb2JsZW0gcmVzZXR0aW5nIGRldmljZSIpOworCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHNzaXplX3QgYWRpczE2NDAwX3dyaXRlX3Jlc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKQEAgLTM2NCw4ICszMzAsNiBAQAogCXJldHVybiAtMTsKIH0KIAotCi0KIGludCBhZGlzMTY0MDBfc2V0X2lycShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxlKQogewogCWludCByZXQ7CkBAIC0zODgsMTggKzM1Miw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGFkaXMxNjQwMF9yZXNldChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IHJldDsKLQlyZXQgPSBhZGlzMTY0MDBfc3BpX3dyaXRlX3JlZ184KGRldiwKLQkJCUFESVMxNjQwMF9HTE9CX0NNRCwKLQkJCUFESVMxNjQwMF9HTE9CX0NNRF9TV19SRVNFVCk7Ci0JaWYgKHJldCkKLQkJZGV2X2VycihkZXYsICJwcm9ibGVtIHJlc2V0dGluZyBkZXZpY2UiKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIC8qIFBvd2VyIGRvd24gdGhlIGRldmljZSAqLwogc3RhdGljIGludCBhZGlzMTY0MDBfc3RvcF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtNDMwLDcgKzM4Miw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGFkaXMxNjQwMF9jaGVja19zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhZGlzMTY0MDBfY2hlY2tfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAl1MTYgc3RhdHVzOwogCWludCByZXQ7CkBAIC00OTYsNiArNDQ4LDExIEBACiAJfQogCiAJLyogRG8gc2VsZiB0ZXN0ICovCisJcmV0ID0gYWRpczE2NDAwX3NlbGZfdGVzdChkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJzZWxmIHRlc3QgZmFpbHVyZSIpOworCQlnb3RvIGVycl9yZXQ7CisJfQogCiAJLyogUmVhZCBzdGF0dXMgcmVnaXN0ZXIgdG8gY2hlY2sgdGhlIHJlc3VsdCAqLwogCXJldCA9IGFkaXMxNjQwMF9jaGVja19zdGF0dXMoZGV2KTsKQEAgLTY4NSwyMSArNjQyLDEzIEBACiAJCWdvdG8gZXJyb3JfdW5yZWdfcmluZ19mdW5jczsKIAlyZWdkb25lID0gMTsKIAotCXJldCA9IGFkaXMxNjQwMF9pbml0aWFsaXplX3Jpbmcoc3QtPmluZGlvX2Rldi0+cmluZyk7CisJcmV0ID0gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyKHN0LT5pbmRpb19kZXYtPnJpbmcsIDApOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcmluZ1xuIik7CiAJCWdvdG8gZXJyb3JfdW5yZWdfcmluZ19mdW5jczsKIAl9CiAKIAlpZiAoc3BpLT5pcnEgJiYgZ3Bpb19pc192YWxpZChpcnFfdG9fZ3BpbyhzcGktPmlycSkpID4gMCkgewotI2lmIDAgLyogZml4bWU6IGhlcmUgd2Ugc2hvdWxkIHN1cHBvcnQgKi8KLQkJaWlvX2luaXRfd29ya19jb250KCZzdC0+d29ya19jb250X3RocmVzaCwKLQkJCQlOVUxMLAotCQkJCWFkaXMxNjQwMF90aHJlc2hfaGFuZGxlcl9iaF9ub19jaGVjaywKLQkJCQkwLAotCQkJCTAsCi0JCQkJc3QpOwotI2VuZGlmCiAJCXJldCA9IGlpb19yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShzcGktPmlycSwKIAkJCQlzdC0+aW5kaW9fZGV2LAogCQkJCTAsCkBAIC03MjYsNyArNjc1LDcgQEAKIAlpZiAoc3QtPmluZGlvX2Rldi0+bW9kZXMgJiBJTkRJT19SSU5HX1RSSUdHRVJFRCkKIAkJaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoc3QtPmluZGlvX2RldiwgMCk7CiBlcnJvcl91bmluaXRpYWxpemVfcmluZzoKLQlhZGlzMTY0MDBfdW5pbml0aWFsaXplX3Jpbmcoc3QtPmluZGlvX2Rldi0+cmluZyk7CisJaWlvX3JpbmdfYnVmZmVyX3VucmVnaXN0ZXIoc3QtPmluZGlvX2Rldi0+cmluZyk7CiBlcnJvcl91bnJlZ19yaW5nX2Z1bmNzOgogCWFkaXMxNjQwMF91bmNvbmZpZ3VyZV9yaW5nKHN0LT5pbmRpb19kZXYpOwogZXJyb3JfZnJlZV9kZXY6CkBAIC03NjEsNyArNzEwLDcgQEAKIAlpZiAoc3BpLT5pcnEgJiYgZ3Bpb19pc192YWxpZChpcnFfdG9fZ3BpbyhzcGktPmlycSkpID4gMCkKIAkJaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoaW5kaW9fZGV2LCAwKTsKIAotCWFkaXMxNjQwMF91bmluaXRpYWxpemVfcmluZyhpbmRpb19kZXYtPnJpbmcpOworCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKHN0LT5pbmRpb19kZXYtPnJpbmcpOwogCWFkaXMxNjQwMF91bmNvbmZpZ3VyZV9yaW5nKGluZGlvX2Rldik7CiAJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CiAJa2ZyZWUoc3QtPnR4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMF9yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDBfcmluZy5jCmluZGV4IDU1MjliMzIuLjk0OWRiNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMF9yaW5nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwX3JpbmcuYwpAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCkBAIC0xNiwxNiArMTcsNiBAQAogI2luY2x1ZGUgIi4uL3RyaWdnZXIuaCIKICNpbmNsdWRlICJhZGlzMTY0MDAuaCIKIAotLyoqCi0gKiBjb21iaW5lXzhfdG9fMTYoKSB1dGlsaXR5IGZ1bmN0aW9uIHRvIG11bmdlIHRvIHU4cyBpbnRvIHUxNgotICoqLwotc3RhdGljIGlubGluZSB1MTYgY29tYmluZV84X3RvXzE2KHU4IGxvd2VyLCB1OCB1cHBlcikKLXsKLQl1MTYgX2xvd2VyID0gbG93ZXI7Ci0JdTE2IF91cHBlciA9IHVwcGVyOwotCXJldHVybiBfbG93ZXIgfCAoX3VwcGVyIDw8IDgpOwotfQotCiBzdGF0aWMgSUlPX1NDQU5fRUxfQyhzdXBwbHksIEFESVMxNjQwMF9TQ0FOX1NVUFBMWSwgSUlPX1NJR05FRCgxNCksCiAJCSAgICAgQURJUzE2NDAwX1NVUFBMWV9PVVQsIE5VTEwpOwogCkBAIC04MywxMCArNzQsMTAgQEAKICAqIGFkaXMxNjQwMF9wb2xsX2Z1bmNfdGgoKSB0b3AgaGFsZiBpbnRlcnJ1cHQgaGFuZGxlciBjYWxsZWQgYnkgdHJpZ2dlcgogICogQHByaXZhdGVfZGF0YToJaWlvX2RldgogICoqLwotc3RhdGljIHZvaWQgYWRpczE2NDAwX3BvbGxfZnVuY190aChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQorc3RhdGljIHZvaWQgYWRpczE2NDAwX3BvbGxfZnVuY190aChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LCBzNjQgdGltZSkKIHsKIAlzdHJ1Y3QgYWRpczE2NDAwX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKLQlzdC0+bGFzdF90aW1lc3RhbXAgPSBpbmRpb19kZXYtPnRyaWctPnRpbWVzdGFtcDsKKwlzdC0+bGFzdF90aW1lc3RhbXAgPSB0aW1lOwogCXNjaGVkdWxlX3dvcmsoJnN0LT53b3JrX3RyaWdnZXJfdG9fcmluZyk7CiAJLyogSW5kaWNhdGUgdGhhdCB0aGlzIGludGVycnVwdCBpcyBiZWluZyBoYW5kbGVkICovCiAKQEAgLTk2LDYgKzg3LDU0IEBACiAJICovCiB9CiAKKy8qKgorICogYWRpczE2NDAwX3NwaV9yZWFkX2J1cnN0KCkgLSByZWFkIGFsbCBkYXRhIHJlZ2lzdGVycworICogQGRldjogZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBjaGlsZCBvZiBhY3R1YWwgZGV2aWNlIChpaW9fZGV2IG9yIGlpb190cmlnKQorICogQHJ4OiBzb21ld2hlcmUgdG8gcGFzcyBiYWNrIHRoZSB2YWx1ZSByZWFkIChtaW4gc2l6ZSBpcyAyNCBieXRlcykKKyAqKi8KK3N0YXRpYyBpbnQgYWRpczE2NDAwX3NwaV9yZWFkX2J1cnN0KHN0cnVjdCBkZXZpY2UgKmRldiwgdTggKnJ4KQoreworCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBhZGlzMTY0MDBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOworCXUzMiBvbGRfc3BlZWRfaHogPSBzdC0+dXMtPm1heF9zcGVlZF9oejsKKwlpbnQgcmV0OworCisJc3RydWN0IHNwaV90cmFuc2ZlciB4ZmVyc1tdID0geworCQl7CisJCQkudHhfYnVmID0gc3QtPnR4LAorCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAorCQkJLmxlbiA9IDIsCisJCQkuY3NfY2hhbmdlID0gMCwKKwkJfSwgeworCQkJLnJ4X2J1ZiA9IHJ4LAorCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAorCQkJLmxlbiA9IDI0LAorCQkJLmNzX2NoYW5nZSA9IDEsCisJCX0sCisJfTsKKworCW11dGV4X2xvY2soJnN0LT5idWZfbG9jayk7CisJc3QtPnR4WzBdID0gQURJUzE2NDAwX1JFQURfUkVHKEFESVMxNjQwMF9HTE9CX0NNRCk7CisJc3QtPnR4WzFdID0gMDsKKworCXNwaV9tZXNzYWdlX2luaXQoJm1zZyk7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnhmZXJzWzBdLCAmbXNnKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlcnNbMV0sICZtc2cpOworCisJc3QtPnVzLT5tYXhfc3BlZWRfaHogPSBtaW4oQURJUzE2NDAwX1NQSV9CVVJTVCwgb2xkX3NwZWVkX2h6KTsKKwlzcGlfc2V0dXAoc3QtPnVzKTsKKworCXJldCA9IHNwaV9zeW5jKHN0LT51cywgJm1zZyk7CisJaWYgKHJldCkKKwkJZGV2X2Vycigmc3QtPnVzLT5kZXYsICJwcm9ibGVtIHdoZW4gYnVyc3QgcmVhZGluZyIpOworCisJc3QtPnVzLT5tYXhfc3BlZWRfaHogPSBvbGRfc3BlZWRfaHo7CisJc3BpX3NldHVwKHN0LT51cyk7CisJbXV0ZXhfdW5sb2NrKCZzdC0+YnVmX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKIC8qIFdoaWxzdCB0aGlzIG1ha2VzIGEgbG90IG9mIGNhbGxzIHRvIGlpb19zd19yaW5nIGZ1bmN0aW9ucyAtIGl0IGlzIHRvIGRldmljZQogICogc3BlY2lmaWMgdG8gYmUgcm9sbGVkIGludG8gdGhlIGNvcmUuCiAgKi8KQEAgLTExOCwxMCArMTU3LDkgQEAKIAogCWlmIChzdC0+aW5kaW9fZGV2LT5zY2FuX2NvdW50KQogCQlpZiAoYWRpczE2NDAwX3NwaV9yZWFkX2J1cnN0KCZzdC0+aW5kaW9fZGV2LT5kZXYsIHN0LT5yeCkgPj0gMCkKLQkJCWZvciAoOyBpIDwgc3QtPmluZGlvX2Rldi0+c2Nhbl9jb3VudDsgaSsrKSB7Ci0JCQkJZGF0YVtpXSA9IGNvbWJpbmVfOF90b18xNihzdC0+cnhbaSoyKzFdLAotCQkJCQkJCSAgc3QtPnJ4W2kqMl0pOwotCQkJfQorCQkJZm9yICg7IGkgPCBzdC0+aW5kaW9fZGV2LT5zY2FuX2NvdW50OyBpKyspCisJCQkJZGF0YVtpXQk9IGJlMTZfdG9fY3B1cCgKKwkJCQkJKF9fYmUxNiAqKSYoc3QtPnJ4W2kqMl0pKTsKIAogCS8qIEd1YXJhbnRlZWQgdG8gYmUgYWxpZ25lZCB3aXRoIDggYnl0ZSBib3VuZGFyeSAqLwogCWlmIChzdC0+aW5kaW9fZGV2LT5zY2FuX3RpbWVzdGFtcCkKQEAgLTEzNiw0NSArMTc0LDYgQEAKIAogCXJldHVybjsKIH0KLS8qIGluIHRoZXNlIGNpcmN1bXN0YW5jZXMgaXMgaXQgYmV0dGVyIHRvIGdvIHdpdGggdW5hbGlnbmVkIHBhY2tpbmcgYW5kCi0gKiBkZWFsIHdpdGggdGhlIGNvc3Q/Ki8KLXN0YXRpYyBpbnQgYWRpczE2NDAwX2RhdGFfcmR5X3JpbmdfcHJlZW5hYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCi17Ci0Jc2l6ZV90IHNpemU7Ci0JZGV2X2RiZygmaW5kaW9fZGV2LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOwotCS8qIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2NhbiBlbGVtZW50cyBlbmFibGVkLCBpZiBub3QgZmFpbCovCi0JaWYgKCEoaW5kaW9fZGV2LT5zY2FuX2NvdW50IHx8IGluZGlvX2Rldi0+c2Nhbl90aW1lc3RhbXApKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChpbmRpb19kZXYtPnJpbmctPmFjY2Vzcy5zZXRfYnBkKSB7Ci0JCWlmIChpbmRpb19kZXYtPnNjYW5fdGltZXN0YW1wKQotCQkJaWYgKGluZGlvX2Rldi0+c2Nhbl9jb3VudCkgLyogVGltZXN0YW1wIGFuZCBkYXRhICovCi0JCQkJc2l6ZSA9IDYqc2l6ZW9mKHM2NCk7Ci0JCQllbHNlIC8qIFRpbWVzdGFtcCBvbmx5ICAqLwotCQkJCXNpemUgPSBzaXplb2YoczY0KTsKLQkJZWxzZSAvKiBEYXRhIG9ubHkgKi8KLQkJCXNpemUgPSBpbmRpb19kZXYtPnNjYW5fY291bnQqc2l6ZW9mKHMxNik7Ci0JCWluZGlvX2Rldi0+cmluZy0+YWNjZXNzLnNldF9icGQoaW5kaW9fZGV2LT5yaW5nLCBzaXplKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZGlzMTY0MDBfZGF0YV9yZHlfcmluZ19wb3N0ZW5hYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCi17Ci0JcmV0dXJuIGluZGlvX2Rldi0+dHJpZwotCQk/IGlpb190cmlnZ2VyX2F0dGFjaF9wb2xsX2Z1bmMoaW5kaW9fZGV2LT50cmlnLAotCQkJCQkgICAgICAgaW5kaW9fZGV2LT5wb2xsZnVuYykKLQkJOiAwOwotfQotCi1zdGF0aWMgaW50IGFkaXMxNjQwMF9kYXRhX3JkeV9yaW5nX3ByZWRpc2FibGUoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKLXsKLQlyZXR1cm4gaW5kaW9fZGV2LT50cmlnCi0JCT8gaWlvX3RyaWdnZXJfZGV0dGFjaF9wb2xsX2Z1bmMoaW5kaW9fZGV2LT50cmlnLAotCQkJCQkJaW5kaW9fZGV2LT5wb2xsZnVuYykKLQkJOiAwOwotfQogCiB2b2lkIGFkaXMxNjQwMF91bmNvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7CkBAIC0yMTQsMTggKzIxMywxNiBAQAogCWluZGlvX2Rldi0+cmluZyA9IHJpbmc7CiAJLyogRWZmZWN0aXZlbHkgc2VsZWN0IHRoZSByaW5nIGJ1ZmZlciBpbXBsZW1lbnRhdGlvbiAqLwogCWlpb19yaW5nX3N3X3JlZ2lzdGVyX2Z1bmNzKCZyaW5nLT5hY2Nlc3MpOwotCXJpbmctPnByZWVuYWJsZSA9ICZhZGlzMTY0MDBfZGF0YV9yZHlfcmluZ19wcmVlbmFibGU7Ci0JcmluZy0+cG9zdGVuYWJsZSA9ICZhZGlzMTY0MDBfZGF0YV9yZHlfcmluZ19wb3N0ZW5hYmxlOwotCXJpbmctPnByZWRpc2FibGUgPSAmYWRpczE2NDAwX2RhdGFfcmR5X3JpbmdfcHJlZGlzYWJsZTsKKwlyaW5nLT5icGUgPSAyOworCXJpbmctPnByZWVuYWJsZSA9ICZpaW9fc3dfcmluZ19wcmVlbmFibGU7CisJcmluZy0+cG9zdGVuYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcG9zdGVuYWJsZTsKKwlyaW5nLT5wcmVkaXNhYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wcmVkaXNhYmxlOwogCXJpbmctPm93bmVyID0gVEhJU19NT0RVTEU7CiAKLQlpbmRpb19kZXYtPnBvbGxmdW5jID0ga3phbGxvYyhzaXplb2YoKmluZGlvX2Rldi0+cG9sbGZ1bmMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoaW5kaW9fZGV2LT5wb2xsZnVuYyA9PSBOVUxMKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3JfaWlvX3N3X3JiX2ZyZWU7OwotCX0KLQlpbmRpb19kZXYtPnBvbGxmdW5jLT5wb2xsX2Z1bmNfbWFpbiA9ICZhZGlzMTY0MDBfcG9sbF9mdW5jX3RoOwotCWluZGlvX2Rldi0+cG9sbGZ1bmMtPnByaXZhdGVfZGF0YSA9IGluZGlvX2RldjsKKwlyZXQgPSBpaW9fYWxsb2NfcG9sbGZ1bmMoaW5kaW9fZGV2LCBOVUxMLCAmYWRpczE2NDAwX3BvbGxfZnVuY190aCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcl9paW9fc3dfcmJfZnJlZTsKKwogCWluZGlvX2Rldi0+bW9kZXMgfD0gSU5ESU9fUklOR19UUklHR0VSRUQ7CiAJcmV0dXJuIDA7CiAKQEAgLTIzMywxMyArMjMwLDMgQEAKIAlpaW9fc3dfcmJfZnJlZShpbmRpb19kZXYtPnJpbmcpOwogCXJldHVybiByZXQ7CiB9Ci0KLWludCBhZGlzMTY0MDBfaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpCi17Ci0JcmV0dXJuIGlpb19yaW5nX2J1ZmZlcl9yZWdpc3RlcihyaW5nLCAwKTsKLX0KLQotdm9pZCBhZGlzMTY0MDBfdW5pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKLXsKLQlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihyaW5nKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMF90cmlnZ2VyLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDBfdHJpZ2dlci5jCmluZGV4IDNiMzI1MGEuLmFhZmU2MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMF90cmlnZ2VyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwX3RyaWdnZXIuYwpAQCAtMjMsOCArMjMsNyBAQAogCXN0cnVjdCBhZGlzMTY0MDBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7CiAJc3RydWN0IGlpb190cmlnZ2VyICp0cmlnID0gc3QtPnRyaWc7CiAKLQl0cmlnLT50aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0JaWlvX3RyaWdnZXJfcG9sbCh0cmlnKTsKKwlpaW9fdHJpZ2dlcl9wb2xsKHRyaWcsIHRpbWVzdGFtcCk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC04NiwxNCArODUsMTMgQEAKIAlzdHJ1Y3QgYWRpczE2NDAwX3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CiAKIAlzdC0+dHJpZyA9IGlpb19hbGxvY2F0ZV90cmlnZ2VyKCk7Ci0Jc3QtPnRyaWctPm5hbWUgPSBrbWFsbG9jKElJT19UUklHR0VSX05BTUVfTEVOR1RILCBHRlBfS0VSTkVMKTsKKwlzdC0+dHJpZy0+bmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLAorCQkJCSAgICJhZGlzMTY0MDAtZGV2JWQiLAorCQkJCSAgIGluZGlvX2Rldi0+aWQpOwogCWlmICghc3QtPnRyaWctPm5hbWUpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9mcmVlX3RyaWc7CiAJfQotCXNucHJpbnRmKChjaGFyICopc3QtPnRyaWctPm5hbWUsCi0JCSBJSU9fVFJJR0dFUl9OQU1FX0xFTkdUSCwKLQkJICJhZGlzMTY0MDAtZGV2JWQiLCBpbmRpb19kZXYtPmlkKTsKIAlzdC0+dHJpZy0+ZGV2LnBhcmVudCA9ICZzdC0+dXMtPmRldjsKIAlzdC0+dHJpZy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlzdC0+dHJpZy0+cHJpdmF0ZV9kYXRhID0gc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMKaW5kZXggMDEwMzA2OC4uZGQ0ZDg3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYwpAQCAtMzAsOSArMzAsNiBAQAogCiAvKiBJRFIgdG8gYXNzaWduIGVhY2ggcmVnaXN0ZXJlZCBkZXZpY2UgYSB1bmlxdWUgaWQqLwogc3RhdGljIERFRklORV9JRFIoaWlvX2lkcik7Ci0KLS8qIElEUiBmb3IgZ2VuZXJhbCBldmVudCBpZGVudGlmaWVycyAqLwotc3RhdGljIERFRklORV9JRFIoaWlvX2V2ZW50X2lkcik7CiAvKiBJRFIgdG8gYWxsb2NhdGUgY2hhcmFjdGVyIGRldmljZSBtaW5vciBudW1iZXJzICovCiBzdGF0aWMgREVGSU5FX0lEUihpaW9fY2hyZGV2X2lkcik7CiAvKiBMb2NrIHVzZWQgdG8gcHJvdGVjdCBib3RoIG9mIHRoZSBhYm92ZSAqLwpAQCAtNjU0LDE2ICs2NTEsMTEgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBkZXZfaW5mby0+bnVtX2ludGVycnVwdF9saW5lczsgaSsrKSB7CiAJCWRldl9pbmZvLT5ldmVudF9pbnRlcmZhY2VzW2ldLm93bmVyID0gZGV2X2luZm8tPmRyaXZlcl9tb2R1bGU7Ci0JCXJldCA9IGlpb19nZXRfbmV3X2lkcl92YWwoJmlpb19ldmVudF9pZHIpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gZXJyb3JfZnJlZV9zZXR1cF9ldl9pbnRzOwotCQllbHNlCi0JCQlkZXZfaW5mby0+ZXZlbnRfaW50ZXJmYWNlc1tpXS5pZCA9IHJldDsKIAogCQlzbnByaW50ZihkZXZfaW5mby0+ZXZlbnRfaW50ZXJmYWNlc1tpXS5fbmFtZSwgMjAsCiAJCQkgIiVzOmV2ZW50JWQiLAogCQkJIGRldl9uYW1lKCZkZXZfaW5mby0+ZGV2KSwKLQkJCSBkZXZfaW5mby0+ZXZlbnRfaW50ZXJmYWNlc1tpXS5pZCk7CisJCQkgaSk7CiAKIAkJcmV0ID0gaWlvX3NldHVwX2V2X2ludCgmZGV2X2luZm8tPmV2ZW50X2ludGVyZmFjZXNbaV0sCiAJCQkJICAgICAgIChjb25zdCBjaGFyICopKGRldl9pbmZvCkBAIC02NzQsOCArNjY2LDYgQEAKIAkJaWYgKHJldCkgewogCQkJZGV2X2VycigmZGV2X2luZm8tPmRldiwKIAkJCQkiQ291bGQgbm90IGdldCBjaHJkZXYgaW50ZXJmYWNlXG4iKTsKLQkJCWlpb19mcmVlX2lkcl92YWwoJmlpb19ldmVudF9pZHIsCi0JCQkJCSBkZXZfaW5mby0+ZXZlbnRfaW50ZXJmYWNlc1tpXS5pZCk7CiAJCQlnb3RvIGVycm9yX2ZyZWVfc2V0dXBfZXZfaW50czsKIAkJfQogCkBAIC03MTEsMTEgKzcwMSw4IEBACiAJCQkJICAgLT5ldmVudF9pbnRlcmZhY2VzW2pdLmRldi5rb2JqLAogCQkJCSAgICZkZXZfaW5mby0+ZXZlbnRfYXR0cnNbal0pOwogZXJyb3JfZnJlZV9zZXR1cF9ldl9pbnRzOgotCWZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKLQkJaWlvX2ZyZWVfaWRyX3ZhbCgmaWlvX2V2ZW50X2lkciwKLQkJCQkgZGV2X2luZm8tPmV2ZW50X2ludGVyZmFjZXNbal0uaWQpOworCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCiAJCWlpb19mcmVlX2V2X2ludCgmZGV2X2luZm8tPmV2ZW50X2ludGVyZmFjZXNbal0pOwotCX0KIAlrZnJlZShkZXZfaW5mby0+aW50ZXJydXB0cyk7CiBlcnJvcl9mcmVlX2V2ZW50X2ludGVyZmFjZXM6CiAJa2ZyZWUoZGV2X2luZm8tPmV2ZW50X2ludGVyZmFjZXMpOwpAQCAtNzM1LDExICs3MjIsOCBAQAogCQkJCSAgIC0+ZXZlbnRfaW50ZXJmYWNlc1tpXS5kZXYua29iaiwKIAkJCQkgICAmZGV2X2luZm8tPmV2ZW50X2F0dHJzW2ldKTsKIAotCWZvciAoaSA9IDA7IGkgPCBkZXZfaW5mby0+bnVtX2ludGVycnVwdF9saW5lczsgaSsrKSB7Ci0JCWlpb19mcmVlX2lkcl92YWwoJmlpb19ldmVudF9pZHIsCi0JCQkJIGRldl9pbmZvLT5ldmVudF9pbnRlcmZhY2VzW2ldLmlkKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2X2luZm8tPm51bV9pbnRlcnJ1cHRfbGluZXM7IGkrKykKIAkJaWlvX2ZyZWVfZXZfaW50KCZkZXZfaW5mby0+ZXZlbnRfaW50ZXJmYWNlc1tpXSk7Ci0JfQogCWtmcmVlKGRldl9pbmZvLT5pbnRlcnJ1cHRzKTsKIAlrZnJlZShkZXZfaW5mby0+ZXZlbnRfaW50ZXJmYWNlcyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1yaW5nLmMKaW5kZXggYWRhMTU5Yi4uNmFiNTc4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tcmluZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLXJpbmcuYwpAQCAtMTQ5LDEyICsxNDksMTAgQEAKIHsKIAlpbnQgcmV0OwogCi0JYnVmLT5ldl9pbnQuaWQgPSBpZDsKLQogCXNucHJpbnRmKGJ1Zi0+ZXZfaW50Ll9uYW1lLCBzaXplb2YoYnVmLT5ldl9pbnQuX25hbWUpLAogCQkgIiVzOmV2ZW50JWQiLAogCQkgZGV2X25hbWUoJmJ1Zi0+ZGV2KSwKLQkJIGJ1Zi0+ZXZfaW50LmlkKTsKKwkJIGlkKTsKIAlyZXQgPSBpaW9fc2V0dXBfZXZfaW50KCYoYnVmLT5ldl9pbnQpLAogCQkJICAgICAgIGJ1Zi0+ZXZfaW50Ll9uYW1lLAogCQkJICAgICAgIG93bmVyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tdHJpZ2dlci5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tdHJpZ2dlci5jCmluZGV4IDU2ODJlNjEuLjU3ZGQ5MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLXRyaWdnZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby10cmlnZ2VyLmMKQEAgLTMxLDcgKzMxLDYgQEAKICAqIEFueSBvdGhlciBzdWdnZXN0aW9ucz8KICAqLwogCi0KIHN0YXRpYyBERUZJTkVfSURSKGlpb190cmlnZ2VyX2lkcik7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlpb190cmlnZ2VyX2lkcl9sb2NrKTsKIApAQCAtMTczLDcgKzE3Miw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGlpb190cmlnZ2VyX2ZpbmRfYnlfbmFtZSk7CiAKLXZvaWQgaWlvX3RyaWdnZXJfcG9sbChzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcpCit2b2lkIGlpb190cmlnZ2VyX3BvbGwoc3RydWN0IGlpb190cmlnZ2VyICp0cmlnLCBzNjQgdGltZSkKIHsKIAlzdHJ1Y3QgaWlvX3BvbGxfZnVuYyAqcGZfY3Vyc29yOwogCkBAIC0xODUsNyArMTg0LDggQEAKIAl9CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwZl9jdXJzb3IsICZ0cmlnLT5wb2xsZnVuY19saXN0LCBsaXN0KSB7CiAJCWlmIChwZl9jdXJzb3ItPnBvbGxfZnVuY19tYWluKSB7Ci0JCQlwZl9jdXJzb3ItPnBvbGxfZnVuY19tYWluKHBmX2N1cnNvci0+cHJpdmF0ZV9kYXRhKTsKKwkJCXBmX2N1cnNvci0+cG9sbF9mdW5jX21haW4ocGZfY3Vyc29yLT5wcml2YXRlX2RhdGEsCisJCQkJCQkgIHRpbWUpOwogCQkJdHJpZy0+dXNlX2NvdW50Kys7CiAJCX0KIAl9CkBAIC0xOTgsOCArMTk4LDcgQEAKIAlpZiAodHJpZy0+dXNlX2NvdW50ID09IDAgJiYgdHJpZy0+dHJ5X3JlZW5hYmxlKQogCQlpZiAodHJpZy0+dHJ5X3JlZW5hYmxlKHRyaWcpKSB7CiAJCQkvKiBNaXNzZWQgYW5kIGludGVycnVwdCBzbyBsYXVuY2ggbmV3IHBvbGwgbm93ICovCi0JCQl0cmlnLT50aW1lc3RhbXAgPSAwOwotCQkJaWlvX3RyaWdnZXJfcG9sbCh0cmlnKTsKKwkJCWlpb190cmlnZ2VyX3BvbGwodHJpZywgMCk7CiAJCX0KIH0KIEVYUE9SVF9TWU1CT0woaWlvX3RyaWdnZXJfbm90aWZ5X2RvbmUpOwpAQCAtMjg0LDcgKzI4Myw3IEBACiBFWFBPUlRfU1lNQk9MKGlpb190cmlnZ2VyX2RldHRhY2hfcG9sbF9mdW5jKTsKIAogLyoqCi0gKiBpaW9fdHJpZ2dlcl9yZWFkX2N1cnJyZW50KCkgdHJpZ2dlciBjb25zdW1lciBzeXNmcyBxdWVyeSB3aGljaCB0cmlnZ2VyCisgKiBpaW9fdHJpZ2dlcl9yZWFkX2N1cnJyZW50KCkgLSB0cmlnZ2VyIGNvbnN1bWVyIHN5c2ZzIHF1ZXJ5IHdoaWNoIHRyaWdnZXIKICAqCiAgKiBGb3IgdHJpZ2dlciBjb25zdW1lcnMgdGhlIGN1cnJlbnRfdHJpZ2dlciBpbnRlcmZhY2UgYWxsb3dzIHRoZSB0cmlnZ2VyCiAgKiB1c2VkIGJ5IHRoZSBkZXZpY2UgdG8gYmUgcXVlcmllZC4KQEAgLTI5NiwxMCArMjk1LDkgQEAKIAlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgbGVuID0gMDsKIAlpZiAoZGV2X2luZm8tPnRyaWcpCi0JCWxlbiA9IHNucHJpbnRmKGJ1ZiwKLQkJCSAgICAgICBJSU9fVFJJR0dFUl9OQU1FX0xFTkdUSCwKLQkJCSAgICAgICAiJXNcbiIsCi0JCQkgICAgICAgZGV2X2luZm8tPnRyaWctPm5hbWUpOworCQlsZW4gPSBzcHJpbnRmKGJ1ZiwKKwkJCSAgICAgICIlc1xuIiwKKwkJCSAgICAgIGRldl9pbmZvLT50cmlnLT5uYW1lKTsKIAlyZXR1cm4gbGVuOwogfQogCkBAIC0zMjQsOCArMzIyLDYgQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZkZXZfaW5mby0+bWxvY2spOwogCi0JbGVuID0gbGVuIDwgSUlPX1RSSUdHRVJfTkFNRV9MRU5HVEggPyBsZW4gOiBJSU9fVFJJR0dFUl9OQU1FX0xFTkdUSDsKLQogCWRldl9pbmZvLT50cmlnID0gaWlvX3RyaWdnZXJfZmluZF9ieV9uYW1lKGJ1ZiwgbGVuKTsKIAlpZiAob2xkdHJpZyAmJiBkZXZfaW5mby0+dHJpZyAhPSBvbGR0cmlnKQogCQlpaW9fcHV0X3RyaWdnZXIob2xkdHJpZyk7CkBAIC00MDIsMyArMzk4LDM0IEBACiB9CiBFWFBPUlRfU1lNQk9MKGlpb19kZXZpY2VfdW5yZWdpc3Rlcl90cmlnZ2VyX2NvbnN1bWVyKTsKIAoraW50IGlpb19hbGxvY19wb2xsZnVuYyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkgICAgICAgdm9pZCAoKmltbWVkaWF0ZSkoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiksCisJCSAgICAgICB2b2lkICgqbWFpbikoc3RydWN0IGlpb19kZXYgKnByaXZhdGVfZGF0YSwgczY0IHRpbWUpKQoreworCWluZGlvX2Rldi0+cG9sbGZ1bmMgPSBremFsbG9jKHNpemVvZigqaW5kaW9fZGV2LT5wb2xsZnVuYyksIEdGUF9LRVJORUwpOworCWlmIChpbmRpb19kZXYtPnBvbGxmdW5jID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCWluZGlvX2Rldi0+cG9sbGZ1bmMtPnBvbGxfZnVuY19pbW1lZGlhdGUgPSBpbW1lZGlhdGU7CisJaW5kaW9fZGV2LT5wb2xsZnVuYy0+cG9sbF9mdW5jX21haW4gPSBtYWluOworCWluZGlvX2Rldi0+cG9sbGZ1bmMtPnByaXZhdGVfZGF0YSA9IGluZGlvX2RldjsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woaWlvX2FsbG9jX3BvbGxmdW5jKTsKKworaW50IGlpb190cmlnZ2VyZWRfcmluZ19wb3N0ZW5hYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCit7CisJcmV0dXJuIGluZGlvX2Rldi0+dHJpZworCQk/IGlpb190cmlnZ2VyX2F0dGFjaF9wb2xsX2Z1bmMoaW5kaW9fZGV2LT50cmlnLAorCQkJCQkgICAgICAgaW5kaW9fZGV2LT5wb2xsZnVuYykKKwkJOiAwOworfQorRVhQT1JUX1NZTUJPTChpaW9fdHJpZ2dlcmVkX3JpbmdfcG9zdGVuYWJsZSk7CisKK2ludCBpaW9fdHJpZ2dlcmVkX3JpbmdfcHJlZGlzYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQoreworCXJldHVybiBpbmRpb19kZXYtPnRyaWcKKwkJPyBpaW9fdHJpZ2dlcl9kZXR0YWNoX3BvbGxfZnVuYyhpbmRpb19kZXYtPnRyaWcsCisJCQkJCQlpbmRpb19kZXYtPnBvbGxmdW5jKQorCQk6IDA7Cit9CitFWFBPUlRfU1lNQk9MKGlpb190cmlnZ2VyZWRfcmluZ19wcmVkaXNhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvS2NvbmZpZwppbmRleCA4MGNiNmU1Li4zZGRjNDc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2xpZ2h0L0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC9LY29uZmlnCkBAIC0xMiw0ICsxMiwzIEBACiAKIAkgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSB3aWxsIGJlIGNhbGxlZCB0c2wyNTYzLgotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2xpZ2h0L2xpZ2h0LmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2xpZ2h0L2xpZ2h0LmgKaW5kZXggZjAwZjgyNy4uZTRlMWUyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC9saWdodC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvbGlnaHQuaApAQCAtMiwxMSArMiw2IEBACiAKIC8qIExpZ2h0IHRvIGRpZ2l0YWwgc2Vuc29yIGF0dHJpYnV0ZXMgKi8KIAotI2RlZmluZSBJSU9fREVWX0FUVFJfTElHSFRfSU5GUkFSRUQoX251bSwgX3Nob3csIF9hZGRyKQkJCVwKLQlJSU9fREVWSUNFX0FUVFIobGlnaHRfaW5mcmFyZWQjI19udW0sIFNfSVJVR08sIF9zaG93LCBOVUxMLCBfYWRkcikKKyNkZWZpbmUgSUlPX0VWRU5UX0NPREVfTElHSFRfVEhSRVNIIElJT19FVkVOVF9DT0RFX0xJR0hUX0JBU0UKIAotI2RlZmluZSBJSU9fREVWX0FUVFJfTElHSFRfQlJPQUQoX251bSwgX3Nob3csIF9hZGRyKQkJCVwKLQlJSU9fREVWSUNFX0FUVFIobGlnaHRfYnJvYWRzcGVjdHJ1bSMjX251bSwgU19JUlVHTywgX3Nob3csIE5VTEwsIF9hZGRyKQogCi0jZGVmaW5lIElJT19ERVZfQVRUUl9MSUdIVF9WSVNJQkxFKF9udW0sIF9zaG93LCBfYWRkcikJCQlcCi0JSUlPX0RFVklDRV9BVFRSKGxpZ2h0X3Zpc2libGUjI19udW0sIFNfSVJVR08sIF9zaG93LCBOVUxMLCBfYWRkcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvdHNsMjU2My5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC90c2wyNTYzLmMKaW5kZXggZTRiMGE1ZS4uOThmOGI3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC90c2wyNTYzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC90c2wyNTYzLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTExNywxNSArMTE4LDE3IEBACiAJc3RydWN0IGlpb19kZXYJCSppbmRpb19kZXY7CiAJc3RydWN0IGRlbGF5ZWRfd29yawlwb3dlcm9mZl93b3JrOwogCisJc3RydWN0IHdvcmtfc3RydWN0CXdvcmtfdGhyZXNoOworCXM2NAkJCWV2ZW50X3RpbWVzdGFtcDsKIAkvKiBSZW1lbWJlciBzdGF0ZSBmb3Igc3VzcGVuZCBhbmQgcmVzdW1lIGZ1bmN0aW9ucyAqLwogCXBtX21lc3NhZ2VfdAkJc3RhdGU7CiAKIAlzdHJ1Y3QgdHNsMjU2M19nYWlubGV2ZWxfY29lZmYgKmdhaW5sZXZlbDsKIAotCS8qIFRocmVzaG9sZHMgYXJlIGluIGx1eCAqLwogCXUxNgkJCWxvd190aHJlczsKIAl1MTYJCQloaWdoX3RocmVzOwogCXU4CQkJaW50cjsKKwlib29sCQkJaW50X2VuYWJsZWQ7CiAKIAkvKiBDYWxpYnJhdGlvbiBjb2VmZmljaWVudHMgKi8KIAl1MzIJCQljYWxpYjA7CkBAIC0xODksMTcgKzE5MiwyOSBAQAogCiBzdGF0aWMgaW50IHRzbDI1NjNfY29uZmlndXJlKHN0cnVjdCB0c2wyNTYzX2NoaXAgKmNoaXApCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGNoaXAtPmNsaWVudDsKIAlpbnQgcmV0OwogCi0JcmV0ID0gdHNsMjU2M193cml0ZShjbGllbnQsIFRTTDI1NjNfUkVHX1RJTUlORywKKwlyZXQgPSB0c2wyNTYzX3dyaXRlKGNoaXAtPmNsaWVudCwgVFNMMjU2M19SRUdfVElNSU5HLAogCQkJY2hpcC0+Z2FpbmxldmVsLT5nYWludGltZSk7CiAJaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQlyZXQgPSB0c2wyNTYzX3dyaXRlKGNsaWVudCwgVFNMMjU2M19SRUdfSU5ULCBjaGlwLT5pbnRyKTsKLQotb3V0OgorCQlnb3RvIGVycm9yX3JldDsKKwlyZXQgPSB0c2wyNTYzX3dyaXRlKGNoaXAtPmNsaWVudCwgVFNMMjU2M19SRUdfSElHSExPVywKKwkJCWNoaXAtPmhpZ2hfdGhyZXMgJiAweEZGKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX3JldDsKKwlyZXQgPSB0c2wyNTYzX3dyaXRlKGNoaXAtPmNsaWVudCwgVFNMMjU2M19SRUdfSElHSEhJR0gsCisJCQkoY2hpcC0+aGlnaF90aHJlcyA+PiA4KSAmIDB4RkYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfcmV0OworCXJldCA9IHRzbDI1NjNfd3JpdGUoY2hpcC0+Y2xpZW50LCBUU0wyNTYzX1JFR19MT1dMT1csCisJCQljaGlwLT5sb3dfdGhyZXMgJiAweEZGKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX3JldDsKKwlyZXQgPSB0c2wyNTYzX3dyaXRlKGNoaXAtPmNsaWVudCwgVFNMMjU2M19SRUdfTE9XSElHSCwKKwkJCShjaGlwLT5sb3dfdGhyZXMgPj4gOCkgJiAweEZGKTsKKy8qIEludGVycnVwdCByZWdpc3RlciBpcyBhdXRvbWF0aWNhbGx5IHdyaXR0ZW4gYW55d2F5IGlmIGl0IGlzIHJlbGV2YW50CisgICBzbyBpcyBub3QgaGVyZSAqLworZXJyb3JfcmV0OgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMyMywyMSArMzM4LDIzIEBACiAJaWYgKGNoaXAtPnN0YXRlLmV2ZW50ICE9IFBNX0VWRU5UX09OKQogCQlnb3RvIG91dDsKIAotCWNhbmNlbF9kZWxheWVkX3dvcmsoJmNoaXAtPnBvd2Vyb2ZmX3dvcmspOworCWlmICghY2hpcC0+aW50X2VuYWJsZWQpIHsKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmY2hpcC0+cG93ZXJvZmZfd29yayk7CiAKLQlpZiAoIXRzbDI1NjNfZ2V0X3Bvd2VyKGNoaXApKSB7Ci0JCXJldCA9IHRzbDI1NjNfc2V0X3Bvd2VyKGNoaXAsIDEpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0JCXJldCA9IHRzbDI1NjNfY29uZmlndXJlKGNoaXApOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0JCXRzbDI1NjNfd2FpdF9hZGMoY2hpcCk7CisJCWlmICghdHNsMjU2M19nZXRfcG93ZXIoY2hpcCkpIHsKKwkJCXJldCA9IHRzbDI1NjNfc2V0X3Bvd2VyKGNoaXAsIDEpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIG91dDsKKwkJCXJldCA9IHRzbDI1NjNfY29uZmlndXJlKGNoaXApOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIG91dDsKKwkJCXRzbDI1NjNfd2FpdF9hZGMoY2hpcCk7CisJCX0KIAl9CiAKIAl3aGlsZSAocmV0cnkpIHsKIAkJcmV0ID0gdHNsMjU2M19yZWFkKGNsaWVudCwKLQkJCQkgICBUU0wyNTYzX1JFR19EQVRBMExPVyB8IFRTTDI1NjNfQ0xFQVJJTlQsCisJCQkJICAgVFNMMjU2M19SRUdfREFUQTBMT1csCiAJCQkJICAgYnVmMCwgc2l6ZW9mKGJ1ZjApKTsKIAkJaWYgKHJldCAhPSBzaXplb2YoYnVmMCkpCiAJCQlnb3RvIG91dDsKQEAgLTM1Niw3ICszNzMsOCBAQAogCWNoaXAtPmRhdGEwID0gbm9ybWFsaXplX2FkYyhhZGMwLCBjaGlwLT5nYWlubGV2ZWwtPmdhaW50aW1lKTsKIAljaGlwLT5kYXRhMSA9IG5vcm1hbGl6ZV9hZGMoYWRjMSwgY2hpcC0+Z2FpbmxldmVsLT5nYWludGltZSk7CiAKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNoaXAtPnBvd2Vyb2ZmX3dvcmssIDUgKiBIWik7CisJaWYgKCFjaGlwLT5pbnRfZW5hYmxlZCkKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjaGlwLT5wb3dlcm9mZl93b3JrLCA1ICogSFopOwogCiAJcmV0ID0gMDsKIG91dDoKQEAgLTQ0OSwxMSArNDY3LDEyIEBACiAvKiAgICAgICAgICAgICAgICAgICAgICBTeXNmcyBpbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgc3NpemVfdCB0c2wyNTYzX2FkYzBfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCitzdGF0aWMgc3NpemVfdCB0c2wyNTYzX2FkY19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CiAJaW50IHJldDsKIAogCW11dGV4X2xvY2soJmNoaXAtPmxvY2spOwpAQCAtNDYyLDI2ICs0ODEsMTQgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCXJldCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGNoaXAtPmRhdGEwKTsKLW91dDoKLQltdXRleF91bmxvY2soJmNoaXAtPmxvY2spOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHRzbDI1NjNfYWRjMV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7Ci0KLQlyZXQgPSB0c2wyNTYzX2dldF9hZGMoY2hpcCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQlyZXQgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBjaGlwLT5kYXRhMSk7CisJc3dpdGNoICh0aGlzX2F0dHItPmFkZHJlc3MpIHsKKwljYXNlIDA6CisJCXJldCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGNoaXAtPmRhdGEwKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZXQgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBjaGlwLT5kYXRhMSk7CisJCWJyZWFrOworCX0KIG91dDoKIAltdXRleF91bmxvY2soJmNoaXAtPmxvY2spOwogCXJldHVybiByZXQ7CkBAIC01MjcsMzcgKzUzNCwzNiBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBjYWxpYl90b19zeXNmcyhjYWxpYikpOwogfQogCi1zdGF0aWMgc3NpemVfdCB0c2wyNTYzX2NhbGliMF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgdHNsMjU2M19jYWxpYl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CiAJaW50IHJldDsKIAogCW11dGV4X2xvY2soJmNoaXAtPmxvY2spOwotCXJldCA9IGZvcm1hdF9jYWxpYihidWYsIFBBR0VfU0laRSwgY2hpcC0+Y2FsaWIwKTsKKwlzd2l0Y2ggKHRoaXNfYXR0ci0+YWRkcmVzcykgeworCWNhc2UgMDoKKwkJcmV0ID0gZm9ybWF0X2NhbGliKGJ1ZiwgUEFHRV9TSVpFLCBjaGlwLT5jYWxpYjApOworCQlicmVhazsKKwljYXNlIDE6CisJCXJldCA9IGZvcm1hdF9jYWxpYihidWYsIFBBR0VfU0laRSwgY2hpcC0+Y2FsaWIxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT0RFVjsKKwl9CiAJbXV0ZXhfdW5sb2NrKCZjaGlwLT5sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3NpemVfdCB0c2wyNTYzX2NhbGliMV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgdHNsMjU2M19jYWxpYl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7Ci0JcmV0ID0gZm9ybWF0X2NhbGliKGJ1ZiwgUEFHRV9TSVpFLCBjaGlwLT5jYWxpYjEpOwotCW11dGV4X3VubG9jaygmY2hpcC0+bG9jayk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBkb19jYWxpYl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwKLQkJCSAgaW50IGNoKQotewotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CiAJaW50IHZhbHVlOwogCXUzMiBjYWxpYjsKIApAQCAtNTY2LDM3ICs1NzIsMjcgQEAKIAogCWNhbGliID0gY2FsaWJfZnJvbV9zeXNmcyh2YWx1ZSk7CiAKLQlpZiAoY2gpCi0JCWNoaXAtPmNhbGliMSA9IGNhbGliOwotCWVsc2UKKwlzd2l0Y2ggKHRoaXNfYXR0ci0+YWRkcmVzcykgeworCWNhc2UgMDoKIAkJY2hpcC0+Y2FsaWIwID0gY2FsaWI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJY2hpcC0+Y2FsaWIxID0gY2FsaWI7CisJCWJyZWFrOworCX0KIAogCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHRzbDI1NjNfY2FsaWIwX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlyZXR1cm4gZG9fY2FsaWJfc3RvcmUoZGV2LCBidWYsIGxlbiwgMCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHRzbDI1NjNfY2FsaWIxX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlyZXR1cm4gZG9fY2FsaWJfc3RvcmUoZGV2LCBidWYsIGxlbiwgMSk7Ci19Ci0KLS8qIEFtaXRYWFhYOiBDb252ZXJ0IHRvIElJT19ERVZfQVRUUl9MSUdIVCogYXMgaW4gdHNsMjU2MQotICogb25jZSBJIHVuZGVyc3RhbmQgd2hhdCB0aGV5IG1lYW4gKi8KLXN0YXRpYyBERVZJQ0VfQVRUUihhZGMwLCBTX0lSVUdPLCB0c2wyNTYzX2FkYzBfc2hvdywgTlVMTCk7Ci1zdGF0aWMgREVWSUNFX0FUVFIoYWRjMSwgU19JUlVHTywgdHNsMjU2M19hZGMxX3Nob3csIE5VTEwpOworc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbnRlbnNpdHlfYm90aF9yYXcsIFNfSVJVR08sCisJCXRzbDI1NjNfYWRjX3Nob3csIE5VTEwsIDApOworc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbnRlbnNpdHlfaXJfcmF3LCBTX0lSVUdPLAorCQl0c2wyNTYzX2FkY19zaG93LCBOVUxMLCAxKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihpbGx1bWluYW5jZTBfaW5wdXQsIFNfSVJVR08sIHRzbDI1NjNfbHV4X3Nob3csIE5VTEwpOwotc3RhdGljIERFVklDRV9BVFRSKGNhbGliMCwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgIHRzbDI1NjNfY2FsaWIwX3Nob3csIHRzbDI1NjNfY2FsaWIwX3N0b3JlKTsKLXN0YXRpYyBERVZJQ0VfQVRUUihjYWxpYjEsIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICB0c2wyNTYzX2NhbGliMV9zaG93LCB0c2wyNTYzX2NhbGliMV9zdG9yZSk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKGludGVuc2l0eV9ib3RoX2NhbGliZ2FpbiwgU19JUlVHTyB8IFNfSVdVU1IsCisJCXRzbDI1NjNfY2FsaWJfc2hvdywgdHNsMjU2M19jYWxpYl9zdG9yZSwgMCk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKGludGVuc2l0eV9pcl9jYWxpYmdhaW4sIFNfSVJVR08gfCBTX0lXVVNSLAorCQl0c2wyNTYzX2NhbGliX3Nob3csIHRzbDI1NjNfY2FsaWJfc3RvcmUsIDEpOwogCiBzdGF0aWMgc3NpemVfdCB0c2wyNTYzX3Nob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC02MTAsMTEgKzYwNiwxMSBAQAogc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHRzbDI1NjNfc2hvd19uYW1lLCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnRzbDI1NjNfYXR0cmlidXRlc1tdID0gewotCSZkZXZfYXR0cl9hZGMwLmF0dHIsCi0JJmRldl9hdHRyX2FkYzEuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2ludGVuc2l0eV9ib3RoX3Jhdy5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfaW50ZW5zaXR5X2lyX3Jhdy5kZXZfYXR0ci5hdHRyLAogCSZkZXZfYXR0cl9pbGx1bWluYW5jZTBfaW5wdXQuYXR0ciwKLQkmZGV2X2F0dHJfY2FsaWIwLmF0dHIsCi0JJmRldl9hdHRyX2NhbGliMS5hdHRyLAorCSZpaW9fZGV2X2F0dHJfaW50ZW5zaXR5X2JvdGhfY2FsaWJnYWluLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbnRlbnNpdHlfaXJfY2FsaWJnYWluLmRldl9hdHRyLmF0dHIsCiAJJmRldl9hdHRyX25hbWUuYXR0ciwKIAlOVUxMCiB9OwpAQCAtNjIzLDYgKzYxOSwxOTIgQEAKIAkuYXR0cnMgPSB0c2wyNTYzX2F0dHJpYnV0ZXMsCiB9OwogCitzdGF0aWMgc3NpemVfdCB0c2wyNTYzX3JlYWRfdGhyZXNoKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CisJdTE2IHZhbCA9IDA7CisJc3dpdGNoICh0aGlzX2F0dHItPmFkZHJlc3MpIHsKKwljYXNlIFRTTDI1NjNfUkVHX0hJR0hMT1c6CisJCXZhbCA9IGNoaXAtPmhpZ2hfdGhyZXM7CisJCWJyZWFrOworCWNhc2UgVFNMMjU2M19SRUdfTE9XTE9XOgorCQl2YWwgPSBjaGlwLT5sb3dfdGhyZXM7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgdmFsKTsKK30KKworc3RhdGljIHNzaXplX3QgdHNsMjU2M193cml0ZV90aHJlc2goc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQlzaXplX3QgbGVuKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IHJldDsKKworCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7CisJcmV0ID0gdHNsMjU2M193cml0ZShjaGlwLT5jbGllbnQsIHRoaXNfYXR0ci0+YWRkcmVzcywgdmFsICYgMHhGRik7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcl9yZXQ7CisJcmV0ID0gdHNsMjU2M193cml0ZShjaGlwLT5jbGllbnQsIHRoaXNfYXR0ci0+YWRkcmVzcyArIDEsCisJCQkodmFsID4+IDgpICYgMHhGRik7CisJc3dpdGNoICh0aGlzX2F0dHItPmFkZHJlc3MpIHsKKwljYXNlIFRTTDI1NjNfUkVHX0hJR0hMT1c6CisJCWNoaXAtPmhpZ2hfdGhyZXMgPSB2YWw7CisJCWJyZWFrOworCWNhc2UgVFNMMjU2M19SRUdfTE9XTE9XOgorCQljaGlwLT5sb3dfdGhyZXMgPSB2YWw7CisJCWJyZWFrOworCX0KKworZXJyb3JfcmV0OgorCW11dGV4X3VubG9jaygmY2hpcC0+bG9jayk7CisKKwlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IGxlbjsKK30KKworc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbnRlbnNpdHlfYm90aF90aHJlc2hfaGlnaF92YWx1ZSwKKwkJU19JUlVHTyB8IFNfSVdVU1IsCisJCXRzbDI1NjNfcmVhZF90aHJlc2gsCisJCXRzbDI1NjNfd3JpdGVfdGhyZXNoLAorCQlUU0wyNTYzX1JFR19ISUdITE9XKTsKKworc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbnRlbnNpdHlfYm90aF90aHJlc2hfbG93X3ZhbHVlLAorCQlTX0lSVUdPIHwgU19JV1VTUiwKKwkJdHNsMjU2M19yZWFkX3RocmVzaCwKKwkJdHNsMjU2M193cml0ZV90aHJlc2gsCisJCVRTTDI1NjNfUkVHX0xPV0xPVyk7CisKK3N0YXRpYyBpbnQgdHNsMjU2M19pbnRfdGgoc3RydWN0IGlpb19kZXYgKmRldl9pbmZvLAorCQkJaW50IGluZGV4LAorCQkJczY0IHRpbWVzdGFtcCwKKwkJCWludCBub3RfdGVzdCkKK3sKKwlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gZGV2X2luZm8tPmRldl9kYXRhOworCisJY2hpcC0+ZXZlbnRfdGltZXN0YW1wID0gdGltZXN0YW1wOworCXNjaGVkdWxlX3dvcmsoJmNoaXAtPndvcmtfdGhyZXNoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0c2wyNTYzX2ludF9iaChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmtfcykKK3sKKwlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwCisJCT0gY29udGFpbmVyX29mKHdvcmtfcywKKwkJCXN0cnVjdCB0c2wyNTYzX2NoaXAsIHdvcmtfdGhyZXNoKTsKKwl1OCBjbWQgPSBUU0wyNTYzX0NNRCB8IFRTTDI1NjNfQ0xFQVJJTlQ7CisKKwlpaW9fcHVzaF9ldmVudChjaGlwLT5pbmRpb19kZXYsIDAsCisJCUlJT19FVkVOVF9DT0RFX0xJR0hUX0JBU0UsCisJCWNoaXAtPmV2ZW50X3RpbWVzdGFtcCk7CisKKwkvKiByZWVuYWJsZV9pcnEgKi8KKwllbmFibGVfaXJxKGNoaXAtPmNsaWVudC0+aXJxKTsKKwkvKiBjbGVhciB0aGUgaW50ZXJydXB0IGFuZCBwdXNoIHRoZSBldmVudCAqLworCWkyY19tYXN0ZXJfc2VuZChjaGlwLT5jbGllbnQsICZjbWQsIHNpemVvZihjbWQpKTsKKworfQorCitzdGF0aWMgc3NpemVfdCB0c2wyNTYzX3dyaXRlX2ludGVycnVwdF9jb25maWcoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY29uc3QgY2hhciAqYnVmLAorCQkJCQlzaXplX3QgbGVuKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3QgaWlvX2V2ZW50X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19ldmVudF9hdHRyKGF0dHIpOworCWludCBpbnB1dCwgcmV0ID0gMDsKKworCXJldCA9IHNzY2FuZihidWYsICIlZCIsICZpbnB1dCk7CisJaWYgKHJldCAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltdXRleF9sb2NrKCZjaGlwLT5sb2NrKTsKKwlpZiAoaW5wdXQgJiYgIShjaGlwLT5pbnRyICYgMHgzMCkpIHsKKwkJaWlvX2FkZF9ldmVudF90b19saXN0KHRoaXNfYXR0ci0+bGlzdGVsLAorCQkJCSZpbmRpb19kZXYtPmludGVycnVwdHNbMF0tPmV2X2xpc3QpOworCQljaGlwLT5pbnRyICY9IH4weDMwOworCQljaGlwLT5pbnRyIHw9IDB4MTA7CisJCS8qIGVuc3VyZSB0aGUgY2hpcCBpcyBhY3R1YWxseSBvbiAqLworCQljYW5jZWxfZGVsYXllZF93b3JrKCZjaGlwLT5wb3dlcm9mZl93b3JrKTsKKwkJaWYgKCF0c2wyNTYzX2dldF9wb3dlcihjaGlwKSkgeworCQkJcmV0ID0gdHNsMjU2M19zZXRfcG93ZXIoY2hpcCwgMSk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gb3V0OworCQkJcmV0ID0gdHNsMjU2M19jb25maWd1cmUoY2hpcCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gb3V0OworCQl9CisJCXJldCA9IHRzbDI1NjNfd3JpdGUoY2hpcC0+Y2xpZW50LCBUU0wyNTYzX1JFR19JTlQsIGNoaXAtPmludHIpOworCQljaGlwLT5pbnRfZW5hYmxlZCA9IHRydWU7CisJfQorCisJaWYgKCFpbnB1dCAmJiAoY2hpcC0+aW50ciAmIDB4MzApKSB7CisJCWNoaXAtPmludHIgfD0gfjB4MzA7CisJCXJldCA9IHRzbDI1NjNfd3JpdGUoY2hpcC0+Y2xpZW50LCBUU0wyNTYzX1JFR19JTlQsIGNoaXAtPmludHIpOworCQlpaW9fcmVtb3ZlX2V2ZW50X2Zyb21fbGlzdCh0aGlzX2F0dHItPmxpc3RlbCwKKwkJCQkJJmluZGlvX2Rldi0+aW50ZXJydXB0c1swXS0+ZXZfbGlzdCk7CisJCWNoaXAtPmludF9lbmFibGVkID0gZmFsc2U7CisJCS8qIG5vdyB0aGUgaW50ZXJydXB0IGlzIG5vdCBlbmFibGVkLCB3ZSBjYW4gZ28gdG8gc2xlZXAgKi8KKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjaGlwLT5wb3dlcm9mZl93b3JrLCA1ICogSFopOworCX0KK291dDoKKwltdXRleF91bmxvY2soJmNoaXAtPmxvY2spOworCisJcmV0dXJuIChyZXQgPCAwKSA/IHJldCA6IGxlbjsKK30KKworc3RhdGljIHNzaXplX3QgdHNsMjU2M19yZWFkX2ludGVycnVwdF9jb25maWcoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwlpbnQgcmV0OworCXU4IHJ4YnVmOworCXNzaXplX3QgbGVuOworCisJbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7CisJcmV0ID0gdHNsMjU2M19yZWFkKGNoaXAtPmNsaWVudCwKKwkJCVRTTDI1NjNfUkVHX0lOVCwKKwkJCSZyeGJ1ZiwKKwkJCXNpemVvZihyeGJ1ZikpOworCW11dGV4X3VubG9jaygmY2hpcC0+bG9jayk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfcmV0OworCWxlbiA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsICEhKHJ4YnVmICYgMHgzMCkpOworZXJyb3JfcmV0OgorCisJcmV0dXJuIChyZXQgPCAwKSA/IHJldCA6IGxlbjsKK30KKworSUlPX0VWRU5UX0FUVFIoaW50ZW5zaXR5X2JvdGhfdGhyZXNoX2JvdGhfZW4sCisJdHNsMjU2M19yZWFkX2ludGVycnVwdF9jb25maWcsCisJdHNsMjU2M193cml0ZV9pbnRlcnJ1cHRfY29uZmlnLAorCTAsCisJdHNsMjU2M19pbnRfdGgpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqdHNsMjU2M19ldmVudF9hdHRyaWJ1dGVzW10gPSB7CisJJmlpb19ldmVudF9hdHRyX2ludGVuc2l0eV9ib3RoX3RocmVzaF9ib3RoX2VuLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbnRlbnNpdHlfYm90aF90aHJlc2hfaGlnaF92YWx1ZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfaW50ZW5zaXR5X2JvdGhfdGhyZXNoX2xvd192YWx1ZS5kZXZfYXR0ci5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB0c2wyNTYzX2V2ZW50X2F0dHJpYnV0ZV9ncm91cCA9IHsKKwkuYXR0cnMgPSB0c2wyNTYzX2V2ZW50X2F0dHJpYnV0ZXMsCit9OworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qICAgICAgICAgICAgICAgICAgICAgIFByb2JlLCBBdHRhY2gsIFJlbW92ZSAgICAgICAgICAgICAgICAgICAqLwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC02NDEsNiArODIzLDcgQEAKIAlpZiAoIWNoaXApCiAJCXJldHVybiAtRU5PTUVNOwogCisJSU5JVF9XT1JLKCZjaGlwLT53b3JrX3RocmVzaCwgdHNsMjU2M19pbnRfYmgpOwogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGNoaXApOwogCWNoaXAtPmNsaWVudCA9IGNsaWVudDsKIApAQCAtNjc5LDE4ICs4NjIsMzYgQEAKIAljaGlwLT5pbmRpb19kZXYtPmRldl9kYXRhID0gKHZvaWQgKikoY2hpcCk7CiAJY2hpcC0+aW5kaW9fZGV2LT5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEU7CiAJY2hpcC0+aW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOworCWlmIChjbGllbnQtPmlycSkgeworCQljaGlwLT5pbmRpb19kZXYtPm51bV9pbnRlcnJ1cHRfbGluZXMgPSAxOworCQljaGlwLT5pbmRpb19kZXYtPmV2ZW50X2F0dHJzCisJCQk9ICZ0c2wyNTYzX2V2ZW50X2F0dHJpYnV0ZV9ncm91cDsKKwl9CiAJcmV0ID0gaWlvX2RldmljZV9yZWdpc3RlcihjaGlwLT5pbmRpb19kZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbDE7CiAKKwlpZiAoY2xpZW50LT5pcnEpIHsKKwkJcmV0ID0gaWlvX3JlZ2lzdGVyX2ludGVycnVwdF9saW5lKGNsaWVudC0+aXJxLAorCQkJCQkJY2hpcC0+aW5kaW9fZGV2LAorCQkJCQkJMCwKKwkJCQkJCUlSUUZfVFJJR0dFUl9SSVNJTkcsCisJCQkJCQljbGllbnQtPm5hbWUpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsMjsKKwl9CiAJZXJyID0gdHNsMjU2M19jb25maWd1cmUoY2hpcCk7CiAJaWYgKGVycikKLQkJZ290byBmYWlsMjsKKwkJZ290byBmYWlsMzsKIAogCUlOSVRfREVMQVlFRF9XT1JLKCZjaGlwLT5wb3dlcm9mZl93b3JrLCB0c2wyNTYzX3Bvd2Vyb2ZmX3dvcmspOworCS8qIFRoZSBpbnRlcnJ1cHQgY2Fubm90IHlldCBiZSBlbmFibGVkIHNvIHRoaXMgaXMgZmluZSB3aXRob3V0IGxvY2sgKi8KIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNoaXAtPnBvd2Vyb2ZmX3dvcmssIDUgKiBIWik7CiAKIAlyZXR1cm4gMDsKK2ZhaWwzOgorCWlmIChjbGllbnQtPmlycSkKKwkJaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoY2hpcC0+aW5kaW9fZGV2LCAwKTsKIGZhaWwyOgogCWlpb19kZXZpY2VfdW5yZWdpc3RlcihjaGlwLT5pbmRpb19kZXYpOwogZmFpbDE6CkBAIC03MDEsNyArOTAyLDE1IEBACiBzdGF0aWMgaW50IHRzbDI1NjNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IHRzbDI1NjNfY2hpcCAqY2hpcCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCisJaWYgKCFjaGlwLT5pbnRfZW5hYmxlZCkKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmY2hpcC0+cG93ZXJvZmZfd29yayk7CisJLyogRW5zdXJlIHRoYXQgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgLSB0aGVuIGZsdXNoIGFueSBib3R0b20gaGFsdmVzICovCisJY2hpcC0+aW50ciB8PSB+MHgzMDsKKwl0c2wyNTYzX3dyaXRlKGNoaXAtPmNsaWVudCwgVFNMMjU2M19SRUdfSU5ULCBjaGlwLT5pbnRyKTsKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCXRzbDI1NjNfc2V0X3Bvd2VyKGNoaXAsIDApOworCWlmIChjbGllbnQtPmlycSkKKwkJaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoY2hpcC0+aW5kaW9fZGV2LCAwKTsKIAlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoY2hpcC0+aW5kaW9fZGV2KTsKIAogCWtmcmVlKGNoaXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9tYWduZXRvbWV0ZXIvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbWFnbmV0b21ldGVyL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAxNDQ1MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbWFnbmV0b21ldGVyL0tjb25maWcKQEAgLTAsMCArMSwxNSBAQAorIworIyBNYWduZXRvbWV0ZXIgc2Vuc29ycworIworY29tbWVudCAiTWFnbmV0b21ldGVyIHNlbnNvcnMiCisKK2NvbmZpZyBTRU5TT1JTX0hNQzU4NDMKKwl0cmlzdGF0ZSAiSG9uZXl3ZWxsIEhNQzU4NDMgMy1BeGlzIE1hZ25ldG9tZXRlciIKKwlkZXBlbmRzIG9uIEkyQworCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gYWRkIHN1cHBvcnQgZm9yIHRoZSBIb25leXdlbGwgSE1DIDU4NDMgMy1BeGlzCisJICBNYWduZXRvbWV0ZXIgKGRpZ2l0YWwgY29tcGFzcykuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGhtYzU4NDMKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9tYWduZXRvbWV0ZXIvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL21hZ25ldG9tZXRlci9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWJmYjJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9tYWduZXRvbWV0ZXIvTWFrZWZpbGUKQEAgLTAsMCArMSw1IEBACisjCisjIE1ha2VmaWxlIGZvciBpbmR1c3RyaWFsIEkvTyBNYWduZXRvbWV0ZXIgc2Vuc29ycworIworCitvYmotJChDT05GSUdfU0VOU09SU19ITUM1ODQzKQkrPSBobWM1ODQzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbWFnbmV0b21ldGVyL2htYzU4NDMuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbWFnbmV0b21ldGVyL2htYzU4NDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmY2YzZmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9tYWduZXRvbWV0ZXIvaG1jNTg0My5jCkBAIC0wLDAgKzEsNjI0IEBACisvKiAgQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzCisgICAgQXV0aG9yOiBTaHViaHJhanlvdGkgRGF0dGEgPHNodWJocmFqeW90aUB0aS5jb20+CisgICAgQWNrbm93bGVkZ2VtZW50OiBKb25hdGhhbiBDYW1lcm9uIDxqaWMyM0BjYW0uYWMudWs+IGZvciB2YWx1YWJsZSBpbnB1dHMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSAiLi4vaWlvLmgiCisjaW5jbHVkZSAiLi4vc3lzZnMuaCIKKyNpbmNsdWRlICJtYWduZXQuaCIKKworI2RlZmluZSBITUM1ODQzX0kyQ19BRERSRVNTCQkJMHgxRQorCisjZGVmaW5lIEhNQzU4NDNfQ09ORklHX1JFR19BCQkJMHgwMAorI2RlZmluZSBITUM1ODQzX0NPTkZJR19SRUdfQgkJCTB4MDEKKyNkZWZpbmUgSE1DNTg0M19NT0RFX1JFRwkJCTB4MDIKKyNkZWZpbmUgSE1DNTg0M19EQVRBX09VVF9YX01TQl9SRUcJCTB4MDMKKyNkZWZpbmUgSE1DNTg0M19EQVRBX09VVF9YX0xTQl9SRUcJCTB4MDQKKyNkZWZpbmUgSE1DNTg0M19EQVRBX09VVF9ZX01TQl9SRUcJCTB4MDUKKyNkZWZpbmUgSE1DNTg0M19EQVRBX09VVF9ZX0xTQl9SRUcJCTB4MDYKKyNkZWZpbmUgSE1DNTg0M19EQVRBX09VVF9aX01TQl9SRUcJCTB4MDcKKyNkZWZpbmUgSE1DNTg0M19EQVRBX09VVF9aX0xTQl9SRUcJCTB4MDgKKyNkZWZpbmUgSE1DNTg0M19TVEFUVVNfUkVHCQkJMHgwOQorI2RlZmluZSBITUM1ODQzX0lEX1JFR19BCQkJMHgwQQorI2RlZmluZSBITUM1ODQzX0lEX1JFR19CCQkJMHgwQgorI2RlZmluZSBITUM1ODQzX0lEX1JFR19DCQkJMHgwQworCisjZGVmaW5lIEhNQzU4NDNfSURfUkVHX0xFTkdUSAkJCTB4MDMKKyNkZWZpbmUgSE1DNTg0M19JRF9TVFJJTkcJCQkiSDQzIgorCisvKgorICogUmFuZ2Ugc2V0dGluZ3MgaW4gICgrLSlHYQorICogKi8KKyNkZWZpbmUgUkFOR0VfR0FJTl9PRkZTRVQJCQkweDA1CisKKyNkZWZpbmUJUkFOR0VfMF83CQkJCTB4MDAKKyNkZWZpbmUJUkFOR0VfMV8wCQkJCTB4MDEgLyogZGVmYXVsdCAqLworI2RlZmluZQlSQU5HRV8xXzUJCQkJMHgwMgorI2RlZmluZQlSQU5HRV8yXzAJCQkJMHgwMworI2RlZmluZQlSQU5HRV8zXzIJCQkJMHgwNAorI2RlZmluZQlSQU5HRV8zXzgJCQkJMHgwNQorI2RlZmluZQlSQU5HRV80XzUJCQkJMHgwNgorI2RlZmluZQlSQU5HRV82XzUJCQkJMHgwNyAvKiBOb3QgcmVjb21tZW5kZWQgKi8KKworLyoKKyAqIERldmljZSBzdGF0dXMKKyAqLworI2RlZmluZQlEQVRBX1JFQURZICAJCQkJMHgwMQorI2RlZmluZQlEQVRBX09VVFBVVF9MT0NLICAJCQkweDAyCisjZGVmaW5lCVZPTFRBR0VfUkVHVUxBVE9SX0VOQUJMRUQgIAkJMHgwNAorCisvKgorICogTW9kZSByZWdpc3RlciBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUJTU9ERV9DT05WRVJTSU9OX0NPTlRJTlVPVVMJCTB4MDAKKyNkZWZpbmUJTU9ERV9DT05WRVJTSU9OX1NJTkdMRQkJCTB4MDEKKyNkZWZpbmUJTU9ERV9JRExFCQkJCTB4MDIKKyNkZWZpbmUJTU9ERV9TTEVFUAkJCQkweDAzCisKKy8qIE1pbmltdW0gRGF0YSBPdXRwdXQgUmF0ZSBpbiAxLzEwIEh6ICAqLworI2RlZmluZSBSQVRFX09GRlNFVAkJCQkweDAyCisjZGVmaW5lIFJBVEVfQklUTUFTSwkJCQkweDFDCisjZGVmaW5lCVJBVEVfNQkJCQkJMHgwMAorI2RlZmluZQlSQVRFXzEwCQkJCQkweDAxCisjZGVmaW5lCVJBVEVfMjAJCQkJCTB4MDIKKyNkZWZpbmUJUkFURV81MAkJCQkJMHgwMworI2RlZmluZQlSQVRFXzEwMAkJCQkweDA0CisjZGVmaW5lCVJBVEVfMjAwCQkJCTB4MDUKKyNkZWZpbmUJUkFURV81MDAJCQkJMHgwNgorI2RlZmluZQlSQVRFX05PVF9VU0VECQkJCTB4MDcKKworLyoKKyAqIERldmljZSBDb25maWd1dHJhdGlvbgorICovCisjZGVmaW5lCUNPTkZfTk9STUFMICAJCQkJMHgwMAorI2RlZmluZQlDT05GX1BPU0lUSVZFX0JJQVMJCQkweDAxCisjZGVmaW5lCUNPTkZfTkVHQVRJVkVfQklBUwkJCTB4MDIKKyNkZWZpbmUJQ09ORl9OT1RfVVNFRAkJCQkweDAzCisjZGVmaW5lCU1FQVNfQ09ORl9NQVNLCQkJCTB4MDMKKworc3RhdGljIGNvbnN0IGludCByZWd2YWxfdG9fY291bnRzX3Blcl9tZ1tdID0geworCTE2MjAsCisJMTMwMCwKKwk5NzAsCisJNzgwLAorCTUzMCwKKwk0NjAsCisJMzkwLAorCTI4MAorfTsKK3N0YXRpYyBjb25zdCBpbnQgcmVndmFsX3RvX2lucHV0X2ZpZWxkX21nW10gPSB7CisJNzAwLAorCTEwMDAsCisJMTUwMCwKKwkyMDAwLAorCTMyMDAsCisJMzgwMCwKKwk0NTAwLAorCTY1MDAKK307CitzdGF0aWMgY29uc3QgY2hhciAqcmVndmFsX3RvX3NhbXBfZnJlcVtdID0geworCSIwLjUiLAorCSIxIiwKKwkiMiIsCisJIjUiLAorCSIxMCIsCisJIjIwIiwKKwkiNTAiLAorfTsKKworLyogQWRkcmVzc2VzIHRvIHNjYW46IDB4MUUgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEhNQzU4NDNfSTJDX0FERFJFU1MsCisJCQkJCQkJSTJDX0NMSUVOVF9FTkQgfTsKKworLyogRWFjaCBjbGllbnQgaGFzIHRoaXMgYWRkaXRpb25hbCBkYXRhICovCitzdHJ1Y3QgaG1jNTg0M19kYXRhIHsKKwlzdHJ1Y3QgaWlvX2RldgkqaW5kaW9fZGV2OworCXN0cnVjdCBtdXRleCBsb2NrOworCXU4CQlyYXRlOworCXU4CQltZWFzX2NvbmY7CisJdTgJCW9wZXJhdGluZ19tb2RlOworCXU4CQlyYW5nZTsKK307CisKK3N0YXRpYyB2b2lkIGhtYzU4NDNfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CisKK3N0YXRpYyBzMzIgaG1jNTg0M19jb25maWd1cmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgICAgICAgdTggb3BlcmF0aW5nX21vZGUpCit7CisJLyogVGhlIGxvd2VyIHR3byBiaXRzIGNvbnRhaW4gdGhlIGN1cnJlbnQgY29udmVyc2lvbiBtb2RlICovCisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQlITUM1ODQzX01PREVfUkVHLAorCQkJCQkob3BlcmF0aW5nX21vZGUgJiAweDAzKSk7Cit9CisKKy8qIFJldHVybiB0aGUgbWVhc3VyZW1lbnQgdmFsdWUgZnJvbSB0aGUgIHNwZWNpZmllZCBjaGFubmVsICovCitzdGF0aWMgc3NpemVfdCBobWM1ODQzX3JlYWRfbWVhc3VyZW1lbnQoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpbmRpb19kZXYtPmRldi5wYXJlbnQpOworCXMxNiBjb29yZGluYXRlX3ZhbDsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CisJc3RydWN0IGhtYzU4NDNfZGF0YSAqZGF0YSA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CisJczMyIHJlc3VsdDsKKworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOworCisJcmVzdWx0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgSE1DNTg0M19TVEFUVVNfUkVHKTsKKwl3aGlsZSAoIShyZXN1bHQgJiBEQVRBX1JFQURZKSkKKwkJcmVzdWx0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgSE1DNTg0M19TVEFUVVNfUkVHKTsKKworCXJlc3VsdCA9IGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIHRoaXNfYXR0ci0+YWRkcmVzcyk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljb29yZGluYXRlX3ZhbAk9IChzMTYpc3dhYjE2KCh1MTYpcmVzdWx0KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgY29vcmRpbmF0ZV92YWwpOworfQorc3RhdGljIElJT19ERVZfQVRUUl9NQUdOX1goaG1jNTg0M19yZWFkX21lYXN1cmVtZW50LAorCQlITUM1ODQzX0RBVEFfT1VUX1hfTVNCX1JFRyk7CitzdGF0aWMgSUlPX0RFVl9BVFRSX01BR05fWShobWM1ODQzX3JlYWRfbWVhc3VyZW1lbnQsCisJCUhNQzU4NDNfREFUQV9PVVRfWV9NU0JfUkVHKTsKK3N0YXRpYyBJSU9fREVWX0FUVFJfTUFHTl9aKGhtYzU4NDNfcmVhZF9tZWFzdXJlbWVudCwKKwkJSE1DNTg0M19EQVRBX09VVF9aX01TQl9SRUcpOworCisvKgorICogRnJvbSB0aGUgZGF0YXNoZWV0CisgKiAwIC0gQ29udGludW91cy1Db252ZXJzaW9uIE1vZGU6IEluIGNvbnRpbnVvdXMtY29udmVyc2lvbiBtb2RlLCB0aGUKKyAqIGRldmljZSBjb250aW51b3VzbHkgcGVyZm9ybXMgY29udmVyc2lvbnMgYW4gcGxhY2VzIHRoZSByZXN1bHQgaW4gdGhlCisgKiBkYXRhIHJlZ2lzdGVyLgorICoKKyAqIDEgLSBTaW5nbGUtQ29udmVyc2lvbiBNb2RlIDogZGV2aWNlIHBlcmZvcm1zIGEgc2luZ2xlIG1lYXN1cmVtZW50LAorICogIHNldHMgUkRZIGhpZ2ggYW5kIHJldHVybmVkIHRvIHNsZWVwIG1vZGUKKyAqCisgKiAyIC0gSWRsZSBNb2RlIDogIERldmljZSBpcyBwbGFjZWQgaW4gaWRsZSBtb2RlLgorICoKKyAqIDMgLSBTbGVlcCBNb2RlLiBEZXZpY2UgaXMgcGxhY2VkIGluIHNsZWVwIG1vZGUuCisgKgorICovCitzdGF0aWMgc3NpemVfdCBobWM1ODQzX3Nob3dfb3BlcmF0aW5nX21vZGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaG1jNTg0M19kYXRhICpkYXRhID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+b3BlcmF0aW5nX21vZGUpOworfQorCitzdGF0aWMgc3NpemVfdCBobWM1ODQzX3NldF9vcGVyYXRpbmdfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY29uc3QgY2hhciAqYnVmLAorCQkJCXNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaW5kaW9fZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgaG1jNTg0M19kYXRhICpkYXRhID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CisJdW5zaWduZWQgbG9uZyBvcGVyYXRpbmdfbW9kZSA9IDA7CisJczMyIHN0YXR1czsKKwlpbnQgZXJyb3I7CisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJZXJyb3IgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmb3BlcmF0aW5nX21vZGUpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCWRldl9kYmcoZGV2LCAic2V0IENvbnZlcnNpb24gbW9kZSB0byAlbHVcbiIsIG9wZXJhdGluZ19tb2RlKTsKKwlpZiAob3BlcmF0aW5nX21vZGUgPiBNT0RFX1NMRUVQKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdGF0dXMgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgdGhpc19hdHRyLT5hZGRyZXNzLAorCQkJCQlvcGVyYXRpbmdfbW9kZSk7CisJaWYgKHN0YXR1cykgeworCQljb3VudCA9IC1FSU5WQUw7CisJCWdvdG8gZXhpdDsKKwl9CisJZGF0YS0+b3BlcmF0aW5nX21vZGUgPSBvcGVyYXRpbmdfbW9kZTsKKworZXhpdDoKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIob3BlcmF0aW5nX21vZGUsCisJCQlTX0lXVVNSIHwgU19JUlVHTywKKwkJCWhtYzU4NDNfc2hvd19vcGVyYXRpbmdfbW9kZSwKKwkJCWhtYzU4NDNfc2V0X29wZXJhdGluZ19tb2RlLAorCQkJSE1DNTg0M19NT0RFX1JFRyk7CisKKy8qCisgKiBBUEkgZm9yIHNldHRpbmcgdGhlIG1lYXN1cmVtZW50IGNvbmZpZ3VyYXRpb24gdG8KKyAqIE5vcm1hbCwgUG9zaXRpdmUgYmlhcyBhbmQgTmVnYXRpdmUgYmlhcworICogRnJvbSB0aGUgZGF0YXNoZWV0CisgKgorICogTm9ybWFsIG1lYXN1cmVtZW50IGNvbmZpZ3VyYXRpb24gKGRlZmF1bHQpOiBJbiBub3JtYWwgbWVhc3VyZW1lbnQKKyAqIGNvbmZpZ3VyYXRpb24gdGhlIGRldmljZSBmb2xsb3dzIG5vcm1hbCBtZWFzdXJlbWVudCBmbG93LiBQaW5zIEJQIGFuZCBCTgorICogYXJlIGxlZnQgZmxvYXRpbmcgYW5kIGhpZ2ggaW1wZWRhbmNlLgorICoKKyAqIFBvc2l0aXZlIGJpYXMgY29uZmlndXJhdGlvbjogSW4gcG9zaXRpdmUgYmlhcyBjb25maWd1cmF0aW9uLCBhIHBvc2l0aXZlCisgKiBjdXJyZW50IGlzIGZvcmNlZCBhY3Jvc3MgdGhlIHJlc2lzdGl2ZSBsb2FkIG9uIHBpbnMgQlAgYW5kIEJOLgorICoKKyAqIE5lZ2F0aXZlIGJpYXMgY29uZmlndXJhdGlvbi4gSW4gbmVnYXRpdmUgYmlhcyBjb25maWd1cmF0aW9uLCBhIG5lZ2F0aXZlCisgKiBjdXJyZW50IGlzIGZvcmNlZCBhY3Jvc3MgdGhlIHJlc2lzdGl2ZSBsb2FkIG9uIHBpbnMgQlAgYW5kIEJOLgorICoKKyAqLworc3RhdGljIHMzMiBobWM1ODQzX3NldF9tZWFzX2NvbmYoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgICAgICB1OCBtZWFzX2NvbmYpCit7CisJc3RydWN0IGhtYzU4NDNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXU4IHJlZ192YWw7CisJcmVnX3ZhbCA9IChtZWFzX2NvbmYgJiBNRUFTX0NPTkZfTUFTSykgfCAgKGRhdGEtPnJhdGUgPDwgUkFURV9PRkZTRVQpOworCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgSE1DNTg0M19DT05GSUdfUkVHX0EsIHJlZ192YWwpOworfQorCitzdGF0aWMgc3NpemVfdCBobWM1ODQzX3Nob3dfbWVhc3VyZW1lbnRfY29uZmlndXJhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGhtYzU4NDNfZGF0YSAqZGF0YSA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPm1lYXNfY29uZik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGhtYzU4NDNfc2V0X21lYXN1cmVtZW50X2NvbmZpZ3VyYXRpb24oc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCQljb25zdCBjaGFyICpidWYsCisJCQkJCQlzaXplX3QgY291bnQpCit7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGluZGlvX2Rldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IGhtYzU4NDNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXVuc2lnbmVkIGxvbmcgbWVhc19jb25mID0gMDsKKwlpbnQgZXJyb3IgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmbWVhc19jb25mKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKKworCWRldl9kYmcoZGV2LCAic2V0IG1vZGUgdG8gJWx1XG4iLCBtZWFzX2NvbmYpOworCWlmIChobWM1ODQzX3NldF9tZWFzX2NvbmYoY2xpZW50LCBtZWFzX2NvbmYpKSB7CisJCWNvdW50ID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKwlkYXRhLT5tZWFzX2NvbmYgPSBtZWFzX2NvbmY7CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKG1lYXNfY29uZiwKKwkJCVNfSVdVU1IgfCBTX0lSVUdPLAorCQkJaG1jNTg0M19zaG93X21lYXN1cmVtZW50X2NvbmZpZ3VyYXRpb24sCisJCQlobWM1ODQzX3NldF9tZWFzdXJlbWVudF9jb25maWd1cmF0aW9uLAorCQkJMCk7CisKKy8qCisgKiBGcm9tIERhdGFzaGVldAorICogVGhlIHRhYmxlIHNob3dzIHRoZSBtaW5pbXVtIGRhdGEgb3V0cHV0CisgKiBWYWx1ZQl8IE1pbmltdW0gZGF0YSBvdXRwdXQgcmF0ZShIeikKKyAqIDAJCXwgMC41CisgKiAxCQl8IDEKKyAqIDIJCXwgMgorICogMwkJfCA1CisgKiA0CQl8IDEwIChkZWZhdWx0KQorICogNQkJfCAyMAorICogNgkJfCA1MAorICogNwkJfCBOb3QgdXNlZAorICovCitzdGF0aWMgSUlPX0NPTlNUX0FUVFJfQVZBSUxfU0FNUF9GUkVRKCIwLjUgMSAyIDUgMTAgMjAgNTAiKTsKKworc3RhdGljIHMzMiBobWM1ODQzX3NldF9yYXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJdTggcmF0ZSkKK3sKKwlzdHJ1Y3QgaG1jNTg0M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdTggcmVnX3ZhbDsKKworCXJlZ192YWwgPSAoZGF0YS0+bWVhc19jb25mKSB8ICAocmF0ZSA8PCBSQVRFX09GRlNFVCk7CisJaWYgKHJhdGUgPj0gUkFURV9OT1RfVVNFRCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCSJUaGlzIGRhdGEgb3V0cHV0IHJhdGUgaXMgbm90IHN1cHBvcnRlZCBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBITUM1ODQzX0NPTkZJR19SRUdfQSwgcmVnX3ZhbCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9zYW1wbGluZ19mcmVxdWVuY3koc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaW5kaW9fZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgaG1jNTg0M19kYXRhICpkYXRhID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHJhdGUgPSAwOworCisJaWYgKHN0cm5jbXAoYnVmLCAiMC41IiAsIDMpID09IDApCisJCXJhdGUgPSBSQVRFXzU7CisJZWxzZSBpZiAoc3RybmNtcChidWYsICIxIiAsIDEpID09IDApCisJCXJhdGUgPSBSQVRFXzEwOworCWVsc2UgaWYgKHN0cm5jbXAoYnVmLCAiMiIsIDEpID09IDApCisJCXJhdGUgPSBSQVRFXzIwOworCWVsc2UgaWYgKHN0cm5jbXAoYnVmLCAiNSIsIDEpID09IDApCisJCXJhdGUgPSBSQVRFXzUwOworCWVsc2UgaWYgKHN0cm5jbXAoYnVmLCAiMTAiLCAyKSA9PSAwKQorCQlyYXRlID0gUkFURV8xMDA7CisJZWxzZSBpZiAoc3RybmNtcChidWYsICIyMCIgLCAyKSA9PSAwKQorCQlyYXRlID0gUkFURV8yMDA7CisJZWxzZSBpZiAoc3RybmNtcChidWYsICI1MCIgLCAyKSA9PSAwKQorCQlyYXRlID0gUkFURV81MDA7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOworCWRldl9kYmcoZGV2LCAic2V0IHJhdGUgdG8gJWx1XG4iLCByYXRlKTsKKwlpZiAoaG1jNTg0M19zZXRfcmF0ZShjbGllbnQsIHJhdGUpKSB7CisJCWNvdW50ID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKwlkYXRhLT5yYXRlID0gcmF0ZTsKKworZXhpdDoKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19zYW1wbGluZ19mcmVxdWVuY3koc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaW5kaW9fZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CisJdTMyIHJhdGU7CisKKwlyYXRlID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgIHRoaXNfYXR0ci0+YWRkcmVzcyk7CisJaWYgKHJhdGUgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyYXRlID0gKHJhdGUgJiBSQVRFX0JJVE1BU0spID4+IFJBVEVfT0ZGU0VUOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCByZWd2YWxfdG9fc2FtcF9mcmVxW3JhdGVdKTsKK30KK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoc2FtcGxpbmdfZnJlcXVlbmN5LAorCQkJU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3NhbXBsaW5nX2ZyZXF1ZW5jeSwKKwkJCXNldF9zYW1wbGluZ19mcmVxdWVuY3ksCisJCQlITUM1ODQzX0NPTkZJR19SRUdfQSk7CisKKy8qCisgKiBGcm9tIERhdGFzaGVldAorICoJTm9taW5hbCBnYWluIHNldHRpbmdzCisgKiBWYWx1ZQl8IFNlbnNvciBJbnB1dCBGaWVsZCBSYW5nZShHYSkJfCBHYWluKGNvdW50cy8gbWlsbGktZ2F1c3MpCisgKjAJCXwoKy0pMC43CQkJfDE2MjAKKyAqMQkJfCgrLSkxLjAJCQl8MTMwMAorICoyCQl8KCstKTEuNQkJCXw5NzAKKyAqMwkJfCgrLSkyLjAJCQl8NzgwCisgKjQJCXwoKy0pMy4yCQkJfDUzMAorICo1CQl8KCstKTMuOAkJCXw0NjAKKyAqNgkJfCgrLSk0LjUJCQl8MzkwCisgKjcJCXwoKy0pNi41CQkJfDI4MAorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3JhbmdlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljaGFyICpidWYpCit7CisJdTggcmFuZ2U7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBobWM1ODQzX2RhdGEgKmRhdGEgPSBpbmRpb19kZXYtPmRldl9kYXRhOworCisJcmFuZ2UgPSBkYXRhLT5yYW5nZTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcmVndmFsX3RvX2lucHV0X2ZpZWxkX21nW3JhbmdlXSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9yYW5nZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNvbnN0IGNoYXIgKmJ1ZiwKKwkJCXNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaW5kaW9fZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CisJc3RydWN0IGhtYzU4NDNfZGF0YSAqZGF0YSA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CisJdW5zaWduZWQgbG9uZyByYW5nZSA9IDA7CisJaW50IGVycm9yOworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOworCWVycm9yID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnJhbmdlKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKwlkZXZfZGJnKGRldiwgInNldCByYW5nZSB0byAlbHVcbiIsIHJhbmdlKTsKKworCWlmIChyYW5nZSA+IFJBTkdFXzZfNSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkYXRhLT5yYW5nZSA9IHJhbmdlOworCXJhbmdlID0gcmFuZ2UgPDwgUkFOR0VfR0FJTl9PRkZTRVQ7CisJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCB0aGlzX2F0dHItPmFkZHJlc3MsIHJhbmdlKSkKKwkJY291bnQgPSAtRUlOVkFMOworCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKKwlyZXR1cm4gY291bnQ7CisKK30KK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIobWFnbl9yYW5nZSwKKwkJCVNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19yYW5nZSwKKwkJCXNldF9yYW5nZSwKKwkJCUhNQzU4NDNfQ09ORklHX1JFR19CKTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19nYWluKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaG1jNTg0M19kYXRhICpkYXRhID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcmVndmFsX3RvX2NvdW50c19wZXJfbWdbZGF0YS0+cmFuZ2VdKTsKK30KK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIobWFnbl9nYWluLAorCQkJU19JUlVHTywKKwkJCXNob3dfZ2FpbiwKKwkJCU5VTEwgLCAwKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmhtYzU4NDNfYXR0cmlidXRlc1tdID0geworCSZpaW9fZGV2X2F0dHJfbWVhc19jb25mLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9vcGVyYXRpbmdfbW9kZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfc2FtcGxpbmdfZnJlcXVlbmN5LmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9tYWduX3JhbmdlLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9tYWduX2dhaW4uZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX21hZ25feF9yYXcuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX21hZ25feV9yYXcuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX21hZ25fel9yYXcuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2NvbnN0X2F0dHJfYXZhaWxhYmxlX3NhbXBsaW5nX2ZyZXF1ZW5jeS5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGhtYzU4NDNfZ3JvdXAgPSB7CisJLmF0dHJzID0gaG1jNTg0M19hdHRyaWJ1dGVzLAorfTsKKworc3RhdGljIGludCBobWM1ODQzX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCit7CisJdW5zaWduZWQgY2hhciBpZF9zdHJbSE1DNTg0M19JRF9SRUdfTEVOR1RIXTsKKworCWlmIChjbGllbnQtPmFkZHIgIT0gSE1DNTg0M19JMkNfQUREUkVTUykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCBITUM1ODQzX0lEX1JFR19BLAorCQkJCUhNQzU4NDNfSURfUkVHX0xFTkdUSCwgaWRfc3RyKQorCQkJIT0gSE1DNTg0M19JRF9SRUdfTEVOR1RIKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICgwICE9IHN0cm5jbXAoaWRfc3RyLCBITUM1ODQzX0lEX1NUUklORywgSE1DNTg0M19JRF9SRUdfTEVOR1RIKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gMDsKK30KKworLyogQ2FsbGVkIHdoZW4gd2UgaGF2ZSBmb3VuZCBhIG5ldyBITUM1ODQzLiAqLworc3RhdGljIHZvaWQgaG1jNTg0M19pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBobWM1ODQzX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlobWM1ODQzX3NldF9tZWFzX2NvbmYoY2xpZW50LCBkYXRhLT5tZWFzX2NvbmYpOworCWhtYzU4NDNfc2V0X3JhdGUoY2xpZW50LCBkYXRhLT5yYXRlKTsKKwlobWM1ODQzX2NvbmZpZ3VyZShjbGllbnQsIGRhdGEtPm9wZXJhdGluZ19tb2RlKTsKKwlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgSE1DNTg0M19DT05GSUdfUkVHX0IsIGRhdGEtPnJhbmdlKTsKKwltdXRleF9pbml0KCZkYXRhLT5sb2NrKTsKKwlwcl9pbmZvKCJITUM1ODQzIGluaXRpYWxpemVkXG4iKTsKK30KKworc3RhdGljIGludCBobWM1ODQzX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBobWM1ODQzX2RhdGEgKmRhdGE7CisJaW50IGVyciA9IDA7CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhtYzU4NDNfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogZGVmYXVsdCBzZXR0aW5ncyBhdCBwcm9iZSAqLworCisJZGF0YS0+bWVhc19jb25mID0gQ09ORl9OT1JNQUw7CisJZGF0YS0+cmFuZ2UgPSBSQU5HRV8xXzA7CisJZGF0YS0+b3BlcmF0aW5nX21vZGUgPSBNT0RFX0NPTlZFUlNJT05fQ09OVElOVU9VUzsKKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhdGEpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgSE1DNTg0MyBjaGlwICovCisJaG1jNTg0M19pbml0X2NsaWVudChjbGllbnQpOworCisJZGF0YS0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgpOworCWlmICghZGF0YS0+aW5kaW9fZGV2KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXhpdF9mcmVlMTsKKwl9CisJZGF0YS0+aW5kaW9fZGV2LT5hdHRycyA9ICZobWM1ODQzX2dyb3VwOworCWRhdGEtPmluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZjbGllbnQtPmRldjsKKwlkYXRhLT5pbmRpb19kZXYtPmRldl9kYXRhID0gKHZvaWQgKikoZGF0YSk7CisJZGF0YS0+aW5kaW9fZGV2LT5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEU7CisJZGF0YS0+aW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOworCWVyciA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoZGF0YS0+aW5kaW9fZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfZnJlZTI7CisJcmV0dXJuIDA7CitleGl0X2ZyZWUyOgorCWlpb19mcmVlX2RldmljZShkYXRhLT5pbmRpb19kZXYpOworZXhpdF9mcmVlMToKKwlrZnJlZShkYXRhKTsKK2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBobWM1ODQzX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBobWM1ODQzX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwkgLyogIHNsZWVwIG1vZGUgdG8gc2F2ZSBwb3dlciAqLworCWhtYzU4NDNfY29uZmlndXJlKGNsaWVudCwgTU9ERV9TTEVFUCk7CisJaWlvX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmluZGlvX2Rldik7CisJa2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhtYzU4NDNfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBwbV9tZXNzYWdlX3QgbWVzZykKK3sKKwlobWM1ODQzX2NvbmZpZ3VyZShjbGllbnQsIE1PREVfU0xFRVApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhtYzU4NDNfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGhtYzU4NDNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWhtYzU4NDNfY29uZmlndXJlKGNsaWVudCwgZGF0YS0+b3BlcmF0aW5nX21vZGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgaG1jNTg0M19pZFtdID0geworCXsgImhtYzU4NDMiLCAwIH0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaG1jNTg0M19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiaG1jNTg0MyIsCisJfSwKKwkuaWRfdGFibGUJPSBobWM1ODQzX2lkLAorCS5wcm9iZQkJPSBobWM1ODQzX3Byb2JlLAorCS5yZW1vdmUJCT0gaG1jNTg0M19yZW1vdmUsCisJLmRldGVjdAkJPSBobWM1ODQzX2RldGVjdCwKKwkuYWRkcmVzc19saXN0CT0gbm9ybWFsX2kyYywKKwkuc3VzcGVuZAk9IGhtYzU4NDNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGhtYzU4NDNfcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaG1jNTg0M19pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZobWM1ODQzX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBobWM1ODQzX2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmaG1jNTg0M19kcml2ZXIpOworfQorCitNT0RVTEVfQVVUSE9SKCJTaHViaHJhanlvdGkgRGF0dGEgPHNodWJocmFqeW90aUB0aS5jb20iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSE1DNTg0MyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX2luaXQoaG1jNTg0M19pbml0KTsKK21vZHVsZV9leGl0KGhtYzU4NDNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL3JpbmdfZ2VuZXJpYy5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9yaW5nX2dlbmVyaWMuaAppbmRleCAwZTQ0Mzc1Li5hODcyZDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL3JpbmdfZ2VuZXJpYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vcmluZ19nZW5lcmljLmgKQEAgLTExLDYgKzExLDggQEAKICNkZWZpbmUgX0lJT19SSU5HX0dFTkVSSUNfSF8KICNpbmNsdWRlICJpaW8uaCIKIAorI2lmZGVmIENPTkZJR19JSU9fUklOR19CVUZGRVIKKwogc3RydWN0IGlpb19oYW5kbGVyOwogc3RydWN0IGlpb19yaW5nX2J1ZmZlcjsKIHN0cnVjdCBpaW9fZGV2OwpAQCAtOTgsNiArMTAwLDcgQEAKICAqIEBhY2Nlc3NfaWQ6CQlkZXZpY2UgaWQgbnVtYmVyCiAgKiBAbGVuZ3RoOgkJW0RFVklDRV0gbnVtYmVyIG9mIGRhdHVtcyBpbiByaW5nCiAgKiBAYnBkOgkJW0RFVklDRV0gc2l6ZSBvZiBpbmRpdmlkdWFsIGRhdHVtIGluY2x1ZGluZyB0aW1lc3RhbXAKKyAqIEBicGU6CQlbREVWSUNFXSBzaXplIG9mIGluZGl2aWR1YWwgY2hhbm5lbCB2YWx1ZQogICogQGxvb3Bjb3VudDoJCVtJTlRFUk5dIG51bWJlciBvZiB0aW1lcyB0aGUgcmluZyBoYXMgbG9vcGVkCiAgKiBAYWNjZXNzX2hhbmRsZXI6CVtJTlRFUk5dIGNocmRldiBhY2Nlc3MgaGFuZGxpbmcKICAqIEBldl9pbnQ6CQlbSU5URVJOXSBjaHJkZXYgaW50ZXJmYWNlIGZvciB0aGUgZXZlbnQgY2hyZGV2CkBAIC0xMTksNiArMTIyLDcgQEAKIAlpbnQJCQkJYWNjZXNzX2lkOwogCWludAkJCQlsZW5ndGg7CiAJaW50CQkJCWJwZDsKKwlpbnQJCQkJYnBlOwogCWludAkJCQlsb29wY291bnQ7CiAJc3RydWN0IGlpb19oYW5kbGVyCQlhY2Nlc3NfaGFuZGxlcjsKIAlzdHJ1Y3QgaWlvX2V2ZW50X2ludGVyZmFjZQlldl9pbnQ7CkBAIC0yMTMsNyArMjE3LDcgQEAKICAqIEBfbGFiZWw6CWluZGVudGlmaWNhdGlvbiB2YXJpYWJsZSB1c2VkIGJ5IGRyaXZlcnMuICBPZnRlbiBhIHJlZyBhZGRyZXNzLgogICogQF9jb250cm9sZnVuYzogZnVuY3Rpb24gdXNlZCB0byBub3RpZnkgaGFyZHdhcmUgb2Ygd2hldGhlciBzdGF0ZSBjaGFuZ2VzCiAgKiovCi0jZGVmaW5lIElJT19TQ0FOX0VMX0MoX25hbWUsIF9udW1iZXIsIF9iaXRzLCBfbGFiZWwsIF9jb250cm9sZnVuYykJXAorI2RlZmluZSBfX0lJT19TQ0FOX0VMX0MoX25hbWUsIF9udW1iZXIsIF9iaXRzLCBfbGFiZWwsIF9jb250cm9sZnVuYykJXAogCXN0cnVjdCBpaW9fc2Nhbl9lbCBpaW9fc2Nhbl9lbF8jI19uYW1lID0gewkJCVwKIAkJLmRldl9hdHRyID0gX19BVFRSKF9udW1iZXIjI18jI19uYW1lIyNfZW4sCQlcCiAJCQkJICAgU19JUlVHTyB8IFNfSVdVU1IsCQkJXApAQCAtMjI1LDcgKzIyOSwxMCBAQAogCQkuc2V0X3N0YXRlID0gX2NvbnRyb2xmdW5jLAkJCQlcCiAJfQogCi0jZGVmaW5lIElJT19TQ0FOX05BTUVEX0VMX0MoX25hbWUsIF9zdHJpbmcsIF9udW1iZXIsIF9iaXRzLCBfbGFiZWwsIF9jZikgXAorI2RlZmluZSBJSU9fU0NBTl9FTF9DKF9uYW1lLCBfbnVtYmVyLCBfYml0cywgX2xhYmVsLCBfY29udHJvbGZ1bmMpCVwKKwlfX0lJT19TQ0FOX0VMX0MoX25hbWUsIF9udW1iZXIsIF9iaXRzLCBfbGFiZWwsIF9jb250cm9sZnVuYykKKworI2RlZmluZSBfX0lJT19TQ0FOX05BTUVEX0VMX0MoX25hbWUsIF9zdHJpbmcsIF9udW1iZXIsIF9iaXRzLCBfbGFiZWwsIF9jZikgXAogCXN0cnVjdCBpaW9fc2Nhbl9lbCBpaW9fc2Nhbl9lbF8jI19uYW1lID0gewkJCVwKIAkJLmRldl9hdHRyID0gX19BVFRSKF9udW1iZXIjI18jI19zdHJpbmcjI19lbiwJCVwKIAkJCQkgICBTX0lSVUdPIHwgU19JV1VTUiwJCQlcCkBAIC0yMzYsNyArMjQzLDggQEAKIAkJLmxhYmVsID0gX2xhYmVsLAkJCQkJXAogCQkuc2V0X3N0YXRlID0gX2NmLAkJCQkJXAogCX0KLQorI2RlZmluZSBJSU9fU0NBTl9OQU1FRF9FTF9DKF9uYW1lLCBfc3RyaW5nLCBfbnVtYmVyLCBfYml0cywgX2xhYmVsLCBfY2YpIFwKKwlfX0lJT19TQ0FOX05BTUVEX0VMX0MoX25hbWUsIF9zdHJpbmcsIF9udW1iZXIsIF9iaXRzLCBfbGFiZWwsIF9jZikKIC8qKgogICogSUlPX1NDQU5fRUxfVElNRVNUQU1QIC0gZGVjbGFyZSBhIHNwZWNpYWwgc2NhbiBlbGVtZW50IGZvciB0aW1lc3RhbXBzCiAgKgpAQCAtMjg3LDUgKzI5NSwxNCBAQAogI2RlZmluZSBJSU9fUklOR19FTkFCTEVfQVRUUiBERVZJQ0VfQVRUUihyaW5nX2VuYWJsZSwgU19JUlVHTyB8IFNfSVdVU1IsIFwKIAkJCQkJIGlpb19zaG93X3JpbmdfZW5hYmxlLAkJXAogCQkJCQkgaWlvX3N0b3JlX3JpbmdfZW5hYmxlKQorI2Vsc2UgLyogQ09ORklHX0lJT19SSU5HX0JVRkZFUiAqLworc3RhdGljIGlubGluZSBpbnQgaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcsIGludCBpZCkKK3sKKwlyZXR1cm4gMDsKK307CitzdGF0aWMgaW5saW5lIHZvaWQgaWlvX3JpbmdfYnVmZmVyX3VucmVnaXN0ZXIoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKK3t9OworCisjZW5kaWYgLyogQ09ORklHX0lJT19SSU5HX0JVRkZFUiAqLwogCiAjZW5kaWYgLyogX0lJT19SSU5HX0dFTkVSSUNfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vcmluZ19zdy5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9yaW5nX3N3LmMKaW5kZXggMjk0MjcyZC4uZTJmMDFjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9yaW5nX3N3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9yaW5nX3N3LmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlICJyaW5nX3N3LmgiCisjaW5jbHVkZSAidHJpZ2dlci5oIgogCiBzdGF0aWMgaW5saW5lIGludCBfX2lpb19hbGxvY2F0ZV9zd19yaW5nX2J1ZmZlcihzdHJ1Y3QgaWlvX3N3X3JpbmdfYnVmZmVyICpyaW5nLAogCQkJCQkJaW50IGJ5dGVzX3Blcl9kYXR1bSwgaW50IGxlbmd0aCkKQEAgLTQzMSw1ICs0MzIsNzMgQEAKIAkJaWlvX3B1dF9yaW5nX2J1ZmZlcihyKTsKIH0KIEVYUE9SVF9TWU1CT0woaWlvX3N3X3JiX2ZyZWUpOworCitpbnQgaWlvX3N3X3JpbmdfcHJlZW5hYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCit7CisJc2l6ZV90IHNpemU7CisJZGV2X2RiZygmaW5kaW9fZGV2LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCS8qIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2NhbiBlbGVtZW50cyBlbmFibGVkLCBpZiBub3QgZmFpbCovCisJaWYgKCEoaW5kaW9fZGV2LT5zY2FuX2NvdW50IHx8IGluZGlvX2Rldi0+c2Nhbl90aW1lc3RhbXApKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoaW5kaW9fZGV2LT5zY2FuX3RpbWVzdGFtcCkKKwkJaWYgKGluZGlvX2Rldi0+c2Nhbl9jb3VudCkKKwkJCS8qIFRpbWVzdGFtcCAoYWxpZ25lZCB0byBzNjQpIGFuZCBkYXRhICovCisJCQlzaXplID0gKCgoaW5kaW9fZGV2LT5zY2FuX2NvdW50ICogaW5kaW9fZGV2LT5yaW5nLT5icGUpCisJCQkJCSsgc2l6ZW9mKHM2NCkgLSAxKQorCQkJCSYgfihzaXplb2YoczY0KSAtIDEpKQorCQkJCSsgc2l6ZW9mKHM2NCk7CisJCWVsc2UgLyogVGltZXN0YW1wIG9ubHkgICovCisJCQlzaXplID0gc2l6ZW9mKHM2NCk7CisJZWxzZSAvKiBEYXRhIG9ubHkgKi8KKwkJc2l6ZSA9IGluZGlvX2Rldi0+c2Nhbl9jb3VudCAqIGluZGlvX2Rldi0+cmluZy0+YnBlOworCWluZGlvX2Rldi0+cmluZy0+YWNjZXNzLnNldF9icGQoaW5kaW9fZGV2LT5yaW5nLCBzaXplKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChpaW9fc3dfcmluZ19wcmVlbmFibGUpOworCit2b2lkIGlpb19zd190cmlnZ2VyX2JoX3RvX3Jpbmcoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrX3MpCit7CisJc3RydWN0IGlpb19zd19yaW5nX2hlbHBlcl9zdGF0ZSAqc3QKKwkJPSBjb250YWluZXJfb2Yod29ya19zLCBzdHJ1Y3QgaWlvX3N3X3JpbmdfaGVscGVyX3N0YXRlLAorCQkJd29ya190cmlnZ2VyX3RvX3JpbmcpOworCWludCBsZW4gPSAwOworCXNpemVfdCBkYXRhc2l6ZSA9IHN0LT5pbmRpb19kZXYKKwkJLT5yaW5nLT5hY2Nlc3MuZ2V0X2JwZChzdC0+aW5kaW9fZGV2LT5yaW5nKTsKKwljaGFyICpkYXRhID0ga21hbGxvYyhkYXRhc2l6ZSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoZGF0YSA9PSBOVUxMKSB7CisJCWRldl9lcnIoc3QtPmluZGlvX2Rldi0+ZGV2LnBhcmVudCwKKwkJCSJtZW1vcnkgYWxsb2MgZmFpbGVkIGluIHJpbmcgYmgiKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChzdC0+aW5kaW9fZGV2LT5zY2FuX2NvdW50KQorCQlsZW4gPSBzdC0+Z2V0X3JpbmdfZWxlbWVudChzdCwgZGF0YSk7CisKKwkgIC8qIEd1YXJhbnRlZWQgdG8gYmUgYWxpZ25lZCB3aXRoIDggYnl0ZSBib3VuZGFyeSAqLworCWlmIChzdC0+aW5kaW9fZGV2LT5zY2FuX3RpbWVzdGFtcCkKKwkJKihzNjQgKikoKChwaHlzX2FkZHJfdClkYXRhICsgbGVuCisJCQkJKyBzaXplb2YoczY0KSAtIDEpICYgfihzaXplb2YoczY0KSAtIDEpKQorCQkJPSBzdC0+bGFzdF90aW1lc3RhbXA7CisJICBzdC0+aW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3Muc3RvcmVfdG8oc3QtPmluZGlvX2Rldi0+cmluZywKKwkJCQkJKHU4ICopZGF0YSwKKwkJCXN0LT5sYXN0X3RpbWVzdGFtcCk7CisKKwlpaW9fdHJpZ2dlcl9ub3RpZnlfZG9uZShzdC0+aW5kaW9fZGV2LT50cmlnKTsKKwlrZnJlZShkYXRhKTsKKworCXJldHVybjsKK30KK0VYUE9SVF9TWU1CT0woaWlvX3N3X3RyaWdnZXJfYmhfdG9fcmluZyk7CisKK3ZvaWQgaWlvX3N3X3BvbGxfZnVuY190aChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LCBzNjQgdGltZSkKK3sJc3RydWN0IGlpb19zd19yaW5nX2hlbHBlcl9zdGF0ZSAqaAorCQk9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKKwloLT5sYXN0X3RpbWVzdGFtcCA9IHRpbWU7CisJc2NoZWR1bGVfd29yaygmaC0+d29ya190cmlnZ2VyX3RvX3JpbmcpOworfQorRVhQT1JUX1NZTUJPTChpaW9fc3dfcG9sbF9mdW5jX3RoKTsKKwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJbmR1c3RyaWFsaW8gSS9PIHNvZnR3YXJlIHJpbmcgYnVmZmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL3Jpbmdfc3cuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vcmluZ19zdy5oCmluZGV4IGZkNjc3ZjAuLjYxZjFlZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vcmluZ19zdy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vcmluZ19zdy5oCkBAIC0yMDcsMTAgKzIwNywyMSBAQAogc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqaWlvX3N3X3JiX2FsbG9jYXRlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogdm9pZCBpaW9fc3dfcmJfZnJlZShzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKTsKIAoraW50IGlpb19zd19yaW5nX3ByZWVuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKIAorc3RydWN0IGlpb19zd19yaW5nX2hlbHBlcl9zdGF0ZSB7CisJc3RydWN0IHdvcmtfc3RydWN0CQl3b3JrX3RyaWdnZXJfdG9fcmluZzsKKwlzdHJ1Y3QgaWlvX2RldgkJCSppbmRpb19kZXY7CisJaW50ICgqZ2V0X3JpbmdfZWxlbWVudCkoc3RydWN0IGlpb19zd19yaW5nX2hlbHBlcl9zdGF0ZSAqc3QsIHU4ICpidWYpOworCXM2NAkJCQlsYXN0X3RpbWVzdGFtcDsKK307CisKK3ZvaWQgaWlvX3N3X3BvbGxfZnVuY190aChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LCBzNjQgdGltZSk7Cit2b2lkIGlpb19zd190cmlnZ2VyX2JoX3RvX3Jpbmcoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrX3MpOwogCiAjZWxzZSAvKiBDT05GSUdfSUlPX1JJTkdfQlVGRkVSKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpaW9fcmluZ19zd19yZWdpc3Rlcl9mdW5jcyhzdHJ1Y3QgaWlvX3JpbmdfYWNjZXNzX2Z1bmNzICpyYSkKLXt9Oworc3RydWN0IGlpb19zd19yaW5nX2hlbHBlcl9zdGF0ZSB7CisJc3RydWN0IGlpb19kZXYJCQkqaW5kaW9fZGV2OworfTsKICNlbmRpZiAvKiAhQ09ORklHX0lJT19SSU5HX0JVRkZFUiAqLwogI2VuZGlmIC8qIF9JSU9fUklOR19TV19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9zeXNmcy5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9zeXNmcy5oCmluZGV4IGFmY2Y1YWIuLjYwODM0MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vc3lzZnMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3N5c2ZzLmgKQEAgLTI4NCw2ICsyODQsMTQgQEAKIAkgICAgLm1hc2sgPSBfbWFzaywJCQkJCQlcCiAJICAgIC5saXN0ZWwgPSAmX2V2X2xpc3QgfTsKIAorI2RlZmluZSBJSU9fRVZFTlRfQVRUUl9OQU1FRF9TSChfdm5hbWUsIF9uYW1lLCBfZXZfbGlzdCwgX3Nob3csIF9zdG9yZSwgX21hc2spIFwKKwlzdGF0aWMgc3RydWN0IGlpb19ldmVudF9hdHRyCQkJCQlcCisJaWlvX2V2ZW50X2F0dHJfIyNfdm5hbWUJCQkJCQlcCisJPSB7IC5kZXZfYXR0ciA9IF9fQVRUUihfbmFtZSwgU19JUlVHTyB8IFNfSVdVU1IsCQlcCisJCQkgICAgICAgX3Nob3csIF9zdG9yZSksCQkJCVwKKwkgICAgLm1hc2sgPSBfbWFzaywJCQkJCQlcCisJICAgIC5saXN0ZWwgPSAmX2V2X2xpc3QgfTsKKwogLyoqCiAgKiBJSU9fRVZFTlRfQVRUUiAtIG5vbi1zaGFyZWQgZXZlbnQgYXR0cmlidXRlCiAgKiBAX25hbWU6IGV2ZW50IG5hbWUKQEAgLTI5MywxMCArMzAxLDcgQEAKICAqIEBfaGFuZGxlcjogaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQKICAqKi8KICNkZWZpbmUgSUlPX0VWRU5UX0FUVFIoX25hbWUsIF9zaG93LCBfc3RvcmUsIF9tYXNrLCBfaGFuZGxlcikJCVwKLQlzdGF0aWMgc3RydWN0IGlpb19ldmVudF9oYW5kbGVyX2xpc3QJCQkJXAotCWlpb19ldmVudF8jI19uYW1lID0gewkJCQkJCVwKLQkJLmhhbmRsZXIgPSBfaGFuZGxlciwJCQkJCVwKLQl9OwkJCQkJCQkJXAorCUlJT19FVkVOVF9TSChfbmFtZSwgX2hhbmRsZXIpOwkJCQkJXAogCXN0YXRpYyBzdHJ1Y3QJCQkJCQkJXAogCWlpb19ldmVudF9hdHRyCQkJCQkJCVwKIAlpaW9fZXZlbnRfYXR0cl8jI19uYW1lCQkJCQkJXApAQCAtMzI0LDYgKzMyOSw3IEBACiAjZGVmaW5lIElJT19FVkVOVF9DT0RFX0dZUk9fQkFTRQk0MDAKICNkZWZpbmUgSUlPX0VWRU5UX0NPREVfQURDX0JBU0UJCTUwMAogI2RlZmluZSBJSU9fRVZFTlRfQ09ERV9NSVNDX0JBU0UJNjAwCisjZGVmaW5lIElJT19FVkVOVF9DT0RFX0xJR0hUX0JBU0UJNzAwCiAKICNkZWZpbmUgSUlPX0VWRU5UX0NPREVfREVWSUNFX1NQRUNJRklDCTEwMDAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3RyaWdnZXIuaAppbmRleCA3ODRlN2I2Li40Njk5NTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL3RyaWdnZXIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3RyaWdnZXIuaApAQCAtOCwxMCArOCw2IEBACiAgKi8KICNpZm5kZWYgX0lJT19UUklHR0VSX0hfCiAjZGVmaW5lIF9JSU9fVFJJR0dFUl9IXwotI2RlZmluZSBJSU9fVFJJR0dFUl9OQU1FX0xFTkdUSCAyMAotI2RlZmluZSBJSU9fVFJJR0dFUl9JRF9QUkVGSVggImlpbzp0cmlnZ2VyIgotI2RlZmluZSBJSU9fVFJJR0dFUl9JRF9GT1JNQVQgSUlPX1RSSUdHRVJfSURfUFJFRklYICIlZCIKLQogCiAvKioKICAqIHN0cnVjdCBpaW9fdHJpZ2dlciAtIGluZHVzdHJpYWwgSS9PIHRyaWdnZXIgZGV2aWNlCkBAIC0yNSw3ICsyMSw2IEBACiAgKiBAcG9sbGZ1bmNfbGlzdF9sb2NrOglbSU5URVJOXSBwcm90ZWN0aW9uIG9mIHRoZSBwb2xsaW5nIGZ1bmN0aW9uIGxpc3QKICAqIEBwb2xsZnVuY19saXN0OglbSU5URVJOXSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBydW4gb24gdHJpZ2dlci4KICAqIEBjb250cm9sX2F0dHJzOglbRFJJVkVSXSBzeXNmcyBhdHRyaWJ1dGVzIHJlbGV2YW50IHRvIHRyaWdnZXIgdHlwZQotICogQHRpbWVzdGFtcDoJCVtJTlRFUk5dIHRpbWVzdGFtcCB1c2VzZCBieSBzb21lIHRyaWdzIChlLmcuIGRhdGFyZHkpCiAgKiBAb3duZXI6CQlbRFJJVkVSXSB1c2VkIHRvIG1vbml0b3IgdXNhZ2UgY291bnQgb2YgdGhlIHRyaWdnZXIuCiAgKiBAdXNlX2NvdW50OgkJdXNlIGNvdW50IGZvciB0aGUgdHJpZ2dlcgogICogQHNldF90cmlnZ2VyX3N0YXRlOglbRFJJVkVSXSBzd2l0Y2ggb24vb2ZmIHRoZSB0cmlnZ2VyIG9uIGRlbWFuZApAQCAtNDMsNyArMzgsNiBAQAogCXNwaW5sb2NrX3QJCQlwb2xsZnVuY19saXN0X2xvY2s7CiAJc3RydWN0IGxpc3RfaGVhZAkJcG9sbGZ1bmNfbGlzdDsKIAljb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwCSpjb250cm9sX2F0dHJzOwotCXM2NAkJCQl0aW1lc3RhbXA7CiAJc3RydWN0IG1vZHVsZQkJCSpvd25lcjsKIAlpbnQgdXNlX2NvdW50OwogCkBAIC0xMjQsNyArMTE4LDcgQEAKICAqCiAgKiBUeXBpY2FsbHkgY2FsbGVkIGluIHJlbGV2YW50IGhhcmR3YXJlIGludGVycnVwdCBoYW5kbGVyLgogICoqLwotdm9pZCBpaW9fdHJpZ2dlcl9wb2xsKHN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZyk7Cit2b2lkIGlpb190cmlnZ2VyX3BvbGwoc3RydWN0IGlpb190cmlnZ2VyICp0cmlnLCBzNjQgdGltZSk7CiB2b2lkIGlpb190cmlnZ2VyX25vdGlmeV9kb25lKHN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZyk7CiAKIC8qKgpAQCAtMTQ4LDEzICsxNDIsMjcgQEAKIAlzdHJ1Y3QJCQkJbGlzdF9oZWFkIGxpc3Q7CiAJdm9pZAkJCQkqcHJpdmF0ZV9kYXRhOwogCXZvaWQgKCpwb2xsX2Z1bmNfaW1tZWRpYXRlKShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKLQl2b2lkICgqcG9sbF9mdW5jX21haW4pKHN0cnVjdCBpaW9fZGV2ICAqcHJpdmF0ZV9kYXRhKTsKKwl2b2lkICgqcG9sbF9mdW5jX21haW4pKHN0cnVjdCBpaW9fZGV2ICpwcml2YXRlX2RhdGEsIHM2NCB0aW1lKTsKIAogfTsKIAoraW50IGlpb19hbGxvY19wb2xsZnVuYyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkgICAgICAgdm9pZCAoKmltbWVkaWF0ZSkoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiksCisJCSAgICAgICB2b2lkICgqbWFpbikoc3RydWN0IGlpb19kZXYgKnByaXZhdGVfZGF0YSwgczY0IHRpbWUpKTsKKworLyoKKyAqIFR3byBmdW5jdGlvbnMgZm9yIGNvbW1vbiBjYXNlIHdoZXJlIGFsbCB0aGF0IGhhcHBlbnMgaXMgYSBwb2xsZnVuYworICogaXMgYXR0YWNoZWQgYW5kIGRldGFjaGVkIGZvcm0gYSB0cmlnZ2VyCisgKi8KK2ludCBpaW9fdHJpZ2dlcmVkX3JpbmdfcG9zdGVuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKK2ludCBpaW9fdHJpZ2dlcmVkX3JpbmdfcHJlZGlzYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKKwogc3RydWN0IGlpb190cmlnZ2VyICppaW9fYWxsb2NhdGVfdHJpZ2dlcih2b2lkKTsKIAogdm9pZCBpaW9fZnJlZV90cmlnZ2VyKHN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZyk7CiAKIAorc3RydWN0IGlpb19zaW1wbGVfdHJpZ2dlciB7CisJc3RydWN0IGlpb190cmlnZ2VyIHRyaWc7Cit9OwogI2VuZGlmIC8qIF9JSU9fVFJJR0dFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyL01ha2VmaWxlCmluZGV4IGU1Zjk2ZDIuLjEwYWVjYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vdHJpZ2dlci9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3RyaWdnZXIvTWFrZWZpbGUKQEAgLTEsNSArMSw2IEBACiAjCiAjIE1ha2VmaWxlIGZvciB0cmlnZ2VycyBub3QgYXNzb2NpYXRlZCB3aXRoIGlpby1kZXZpY2VzCiAjCisKIG9iai0kKENPTkZJR19JSU9fUEVSSU9ESUNfUlRDX1RSSUdHRVIpICs9IGlpby10cmlnLXBlcmlvZGljLXJ0Yy5vCi1vYmotJChDT05GSUdfSUlPX0dQSU9fVFJJR0dFUikgKz0gaWlvLXRyaWctZ3Bpby5vClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorb2JqLSQoQ09ORklHX0lJT19HUElPX1RSSUdHRVIpICs9IGlpby10cmlnLWdwaW8ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyL2lpby10cmlnLWdwaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vdHJpZ2dlci9paW8tdHJpZy1ncGlvLmMKaW5kZXggMWRhMjg1ZC4uZjkzY2M5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyL2lpby10cmlnLWdwaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3RyaWdnZXIvaWlvLXRyaWctZ3Bpby5jCkBAIC00Miw3ICs0Miw4IEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBpaW9fZ3Bpb190cmlnZ2VyX3BvbGwoaW50IGlycSwgdm9pZCAqcHJpdmF0ZSkKIHsKLQlpaW9fdHJpZ2dlcl9wb2xsKHByaXZhdGUpOworCS8qIFRpbWVzdGFtcCBub3QgY3VycmVudGx5IHByb3ZpZGVkICovCisJaWlvX3RyaWdnZXJfcG9sbChwcml2YXRlLCAwKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTkzLDE2ICs5NCwxMSBAQAogCQkJdHJpZy0+cHJpdmF0ZV9kYXRhID0gdHJpZ19pbmZvOwogCQkJdHJpZ19pbmZvLT5pcnEgPSBpcnE7CiAJCQl0cmlnLT5vd25lciA9IFRISVNfTU9EVUxFOwotCQkJdHJpZy0+bmFtZSA9IGttYWxsb2MoSUlPX1RSSUdHRVJfTkFNRV9MRU5HVEgsCi0JCQkJCUdGUF9LRVJORUwpOwotCQkJaWYgKCF0cmlnLT5uYW1lKSB7CisJCQl0cmlnLT5uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJpcnF0cmlnJWQiLCBpcnEpOworCQkJaWYgKHRyaWctPm5hbWUgPT0gTlVMTCkgewogCQkJCXJldCA9IC1FTk9NRU07CiAJCQkJZ290byBlcnJvcl9mcmVlX3RyaWdfaW5mbzsKIAkJCX0KLQkJCXNucHJpbnRmKChjaGFyICopdHJpZy0+bmFtZSwKLQkJCQkgSUlPX1RSSUdHRVJfTkFNRV9MRU5HVEgsCi0JCQkJICJpcnF0cmlnJWQiLCBpcnEpOwotCiAJCQlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGlpb19ncGlvX3RyaWdnZXJfcG9sbCwKIAkJCQkJICBpcnFmbGFncywgdHJpZy0+bmFtZSwgdHJpZyk7CiAJCQlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL3RyaWdnZXIvaWlvLXRyaWctcGVyaW9kaWMtcnRjLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3RyaWdnZXIvaWlvLXRyaWctcGVyaW9kaWMtcnRjLmMKaW5kZXggNGVlM2FlMS4uYjBiNTJmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyL2lpby10cmlnLXBlcmlvZGljLXJ0Yy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vdHJpZ2dlci9paW8tdHJpZy1wZXJpb2RpYy1ydGMuYwpAQCAtMjUsNyArMjUsNiBAQAogc3RydWN0IGlpb19wcnRjX3RyaWdnZXJfaW5mbyB7CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKIAlpbnQgZnJlcXVlbmN5OwotCWNoYXIgKm5hbWU7CiAJc3RydWN0IHJ0Y190YXNrIHRhc2s7CiB9OwogCkBAIC03OCw4ICs3Nyw3IEBACiAJCQkJCSAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaWlvX3BydGNfdHJpZ2dlcl9pbmZvICp0cmlnX2luZm8gPSB0cmlnLT5wcml2YXRlX2RhdGE7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHRyaWdfaW5mby0+bmFtZSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHRyaWctPm5hbWUpOwogfQogCiBzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywKQEAgLTEwMCw3ICs5OCw4IEBACiAKIHN0YXRpYyB2b2lkIGlpb19wcnRjX3RyaWdnZXJfcG9sbCh2b2lkICpwcml2YXRlX2RhdGEpCiB7Ci0JaWlvX3RyaWdnZXJfcG9sbChwcml2YXRlX2RhdGEpOworCS8qIFRpbWVzdGFtcCBpcyBub3QgcHJvdmlkZWQgY3VycmVudGx5ICovCisJaWlvX3RyaWdnZXJfcG9sbChwcml2YXRlX2RhdGEsIDApOwogfQogCiBzdGF0aWMgaW50IGlpb190cmlnX3BlcmlvZGljX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCkBAIC0xMjksMTYgKzEyOCwxMiBAQAogCQl0cmlnLT5wcml2YXRlX2RhdGEgPSB0cmlnX2luZm87CiAJCXRyaWctPm93bmVyID0gVEhJU19NT0RVTEU7CiAJCXRyaWctPnNldF90cmlnZ2VyX3N0YXRlID0gJmlpb190cmlnX3BlcmlvZGljX3J0Y19zZXRfc3RhdGU7Ci0JCXRyaWctPm5hbWUgPSBrbWFsbG9jKElJT19UUklHR0VSX05BTUVfTEVOR1RILCBHRlBfS0VSTkVMKTsKKwkJdHJpZy0+bmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAicGVyaW9kaWMlcyIsIHBkYXRhW2ldKTsKIAkJaWYgKHRyaWctPm5hbWUgPT0gTlVMTCkgewogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gZXJyb3JfZnJlZV90cmlnX2luZm87CiAJCX0KLQkJc25wcmludGYoKGNoYXIgKil0cmlnLT5uYW1lLAotCQkJIElJT19UUklHR0VSX05BTUVfTEVOR1RILAotCQkJICJwZXJpb2RpYyVzIiwKLQkJCSBwZGF0YVtpXSk7Ci0JCXRyaWdfaW5mby0+bmFtZSA9IChjaGFyICopdHJpZy0+bmFtZTsKKwogCQkvKiBSVEMgYWNjZXNzICovCiAJCXRyaWdfaW5mby0+cnRjCiAJCQk9IHJ0Y19jbGFzc19vcGVuKHBkYXRhW2ldKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L0tjb25maWcKaW5kZXggNzg1MmQ0YS4uYmMxZmZiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L0tjb25maWcKQEAgLTIsNiArMiw3IEBACiAJdHJpc3RhdGUgIkxpbmU2IFVTQiBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCICYmIFNORAogCXNlbGVjdCBTTkRfUkFXTUlESQorCXNlbGVjdCBTTkRfUENNCiAJaGVscAogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIGd1aXRhciBhbXAsIGNhYiwgYW5kIGVmZmVjdHMgbW9kZWxsZXIKIAkgIFBPRHh0IFBybyBieSBMaW5lNiAoYW5kIHNpbWlsYXIgZGV2aWNlcyksIHN1cHBvcnRpbmcgdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvZHJpdmVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvZHJpdmVyLmMKaW5kZXggMWQ1YTQ3My4uMjdiOTg2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2RyaXZlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9kcml2ZXIuYwpAQCAtNjc5LDggKzY3OSwxMCBAQAogCXVzYl9nZXRfZGV2KHVzYmRldik7CiAKIAkvKiB3ZSBkb24ndCBoYW5kbGUgbXVsdGlwbGUgY29uZmlndXJhdGlvbnMgKi8KLQlpZiAodXNiZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKQotCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAodXNiZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX3B1dDsKKwl9CiAKIAkvKiBjaGVjayB2ZW5kb3IgYW5kIHByb2R1Y3QgaWQgKi8KIAlmb3IgKGRldnR5cGUgPSBBUlJBWV9TSVpFKGxpbmU2X2lkX3RhYmxlKSAtIDE7IGRldnR5cGUtLTspIHsKQEAgLTY5MiwxNiArNjk0LDIwIEBACiAJCQlicmVhazsKIAl9CiAKLQlpZiAoZGV2dHlwZSA8IDApCi0JCXJldHVybiAtRU5PREVWOworCWlmIChkZXZ0eXBlIDwgMCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9wdXQ7CisJfQogCiAJLyogZmluZCBmcmVlIHNsb3QgaW4gZGV2aWNlIHRhYmxlOiAqLwogCWZvciAoZGV2bnVtID0gMDsgZGV2bnVtIDwgTElORTZfTUFYX0RFVklDRVM7ICsrZGV2bnVtKQogCQlpZiAobGluZTZfZGV2aWNlc1tkZXZudW1dID09IE5VTEwpCiAJCQlicmVhazsKIAotCWlmIChkZXZudW0gPT0gTElORTZfTUFYX0RFVklDRVMpCi0JCXJldHVybiAtRU5PREVWOworCWlmIChkZXZudW0gPT0gTElORTZfTUFYX0RFVklDRVMpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJfcHV0OworCX0KIAogCS8qIGluaXRpYWxpemUgZGV2aWNlIGluZm86ICovCiAJcHJvcGVydGllcyA9ICZsaW5lNl9wcm9wZXJ0aWVzX3RhYmxlW2RldnR5cGVdOwpAQCAtNzYyLDEzICs3NjgsMTQgQEAKIAogCWRlZmF1bHQ6CiAJCU1JU1NJTkdfQ0FTRTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX3B1dDsKIAl9CiAKIAlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZSh1c2JkZXYsIGludGVyZmFjZV9udW1iZXIsIGFsdGVybmF0ZSk7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJzZXRfaW50ZXJmYWNlIGZhaWxlZFxuIik7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyX3B1dDsKIAl9CiAKIAkvKiBpbml0aWFsaXplIGRldmljZSBkYXRhIGJhc2VkIG9uIHByb2R1Y3QgaWQ6ICovCkBAIC04MTUsNyArODIyLDggQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVOT0RFVjsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIGVycl9wdXQ7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTgyNywxOSArODM1LDIyIEBACiAKIAlkZWZhdWx0OgogCQlNSVNTSU5HX0NBU0U7Ci0JCXJldHVybiAtRU5PREVWOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9wdXQ7CiAJfQogCiAJaWYgKHNpemUgPT0gMCkgewogCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsICJkcml2ZXIgYnVnOiBpbnRlcmZhY2UgZGF0YSBzaXplIG5vdCBzZXRcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJfcHV0OwogCX0KIAogCWxpbmU2ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAogCWlmIChsaW5lNiA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9wdXQ7CiAJfQogCiAJLyogc3RvcmUgYmFzaWMgZGF0YTogKi8KQEAgLTg3NSwxNiArODg2LDE2IEBACiAKIAkJaWYgKGxpbmU2LT5idWZmZXJfbGlzdGVuID09IE5VTEwpIHsKIAkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7Ci0JCQlsaW5lNl9kZXN0cnVjdChpbnRlcmZhY2UpOwotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBlcnJfZGVzdHJ1Y3Q7CiAJCX0KIAogCQlsaW5lNi0+YnVmZmVyX21lc3NhZ2UgPSBrbWFsbG9jKExJTkU2X01FU1NBR0VfTUFYTEVOLCBHRlBfS0VSTkVMKTsKIAogCQlpZiAobGluZTYtPmJ1ZmZlcl9tZXNzYWdlID09IE5VTEwpIHsKIAkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7Ci0JCQlsaW5lNl9kZXN0cnVjdChpbnRlcmZhY2UpOwotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBlcnJfZGVzdHJ1Y3Q7CiAJCX0KIAogCQlsaW5lNi0+dXJiX2xpc3RlbiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CkBAIC04OTIsMTUgKzkwMywxNSBAQAogCQlpZiAobGluZTYtPnVyYl9saXN0ZW4gPT0gTlVMTCkgewogCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKIAkJCWxpbmU2X2Rlc3RydWN0KGludGVyZmFjZSk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9kZXN0cnVjdDsKIAkJfQogCiAJCXJldCA9IGxpbmU2X3N0YXJ0X2xpc3RlbihsaW5lNik7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWRcbiIsCiAJCQkJX19mdW5jX18pOwotCQkJbGluZTZfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKLQkJCXJldHVybiByZXQ7CisJCQlnb3RvIGVycl9kZXN0cnVjdDsKIAkJfQogCX0KIApAQCAtOTUyLDIyICs5NjMsMjUgQEAKIAkJcmV0ID0gLUVOT0RFVjsKIAl9CiAKLQlpZiAocmV0IDwgMCkgewotCQlsaW5lNl9kZXN0cnVjdChpbnRlcmZhY2UpOwotCQlyZXR1cm4gcmV0OwotCX0KKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfZGVzdHJ1Y3Q7CiAKIAlyZXQgPSBzeXNmc19jcmVhdGVfbGluaygmaW50ZXJmYWNlLT5kZXYua29iaiwgJnVzYmRldi0+ZGV2LmtvYmosCiAJCQkJInVzYl9kZXZpY2UiKTsKLQlpZiAocmV0IDwgMCkgewotCQlsaW5lNl9kZXN0cnVjdChpbnRlcmZhY2UpOwotCQlyZXR1cm4gcmV0OwotCX0KKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfZGVzdHJ1Y3Q7CiAKIAlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJMaW5lNiAlcyBub3cgYXR0YWNoZWRcbiIsCiAJCSBsaW5lNi0+cHJvcGVydGllcy0+bmFtZSk7CiAJbGluZTZfZGV2aWNlc1tkZXZudW1dID0gbGluZTY7CiAJbGluZTZfbGlzdF9kZXZpY2VzKCk7CisJcmV0dXJuIDA7CisKK2Vycl9kZXN0cnVjdDoKKwlsaW5lNl9kZXN0cnVjdChpbnRlcmZhY2UpOworZXJyX3B1dDoKKwl1c2JfcHV0X2ludGYoaW50ZXJmYWNlKTsKKwl1c2JfcHV0X2Rldih1c2JkZXYpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saXJjL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2OGMyYWRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvS2NvbmZpZwpAQCAtMCwwICsxLDExMCBAQAorIworIyBMSVJDIGRyaXZlcihzKSBjb25maWd1cmF0aW9uCisjCittZW51Y29uZmlnIExJUkNfU1RBR0lORworCWJvb2wgIkxpbnV4IEluZnJhcmVkIFJlbW90ZSBDb250cm9sIElSIHJlY2VpdmVyL3RyYW5zbWl0dGVyIGRyaXZlcnMiCisJaGVscAorCSAgU2F5IFkgaGVyZSwgYW5kIGFsbCBzdXBwb3J0ZWQgTGludXggSW5mcmFyZWQgUmVtb3RlIENvbnRyb2wgSVIgYW5kCisJICBSRiByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIgZHJpdmVycyB3aWxsIGJlIGRpc3BsYXllZC4gV2hlbiBwYWlyZWQKKwkgIHdpdGggYSByZW1vdGUgY29udHJvbCBhbmQgdGhlIGxpcmMgZGFlbW9uLCB0aGUgcmVjZWl2ZXIgZHJpdmVycworCSAgYWxsb3cgY29udHJvbCBvZiB5b3VyIExpbnV4IHN5c3RlbSB2aWEgcmVtb3RlIGNvbnRyb2wuCisKK2lmIExJUkNfU1RBR0lORworCitjb25maWcgTElSQ19CVDgyOQorICAgICAgICB0cmlzdGF0ZSAiQlQ4MjkgYmFzZWQgaGFyZHdhcmUiCisJZGVwZW5kcyBvbiBMSVJDX1NUQUdJTkcKKwloZWxwCisJICBEcml2ZXIgZm9yIHRoZSBJUiBpbnRlcmZhY2Ugb24gQlQ4MjktYmFzZWQgaGFyZHdhcmUKKworY29uZmlnIExJUkNfRU5FMDEwMAorCXRyaXN0YXRlICJFTkUgS0IzOTI0L0VORTAxMDAgQ0lSIFBvcnQgUmVjaWV2ZXIiCisJZGVwZW5kcyBvbiBMSVJDX1NUQUdJTkcKKwloZWxwCisJICBUaGlzIGlzIGEgZHJpdmVyIGZvciBDSVIgcG9ydCBoYW5kbGVkIGJ5IEVORSBLQjM5MjQgZW1iZWRkZWQKKwkgIGNvbnRyb2xsZXIgZm91bmQgb24gc29tZSBub3RlYm9va3MuCisJICBJdCBhcHBlYXJzIG9uIFBOUCBsaXN0IGFzIEVORTAxMDAuCisKK2NvbmZpZyBMSVJDX0kyQworCXRyaXN0YXRlICJJMkMgQmFzZWQgSVIgUmVjZWl2ZXJzIgorCWRlcGVuZHMgb24gTElSQ19TVEFHSU5HCisJaGVscAorCSAgRHJpdmVyIGZvciBJMkMtYmFzZWQgSVIgcmVjZWl2ZXJzLCBzdWNoIGFzIHRob3NlIGNvbW1vbmx5CisJICBmb3VuZCBvbmJvYXJkIEhhdXBwYXVnZSBQVlItMTUwLzI1MC8zNTAgdmlkZW8gY2FwdHVyZSBjYXJkcworCitjb25maWcgTElSQ19JR09SUExVR1VTQgorCXRyaXN0YXRlICJJZ29yIENlc2tvJ3MgVVNCIElSIFJlY2VpdmVyIgorCWRlcGVuZHMgb24gTElSQ19TVEFHSU5HICYmIFVTQgorCWhlbHAKKwkgIERyaXZlciBmb3IgSWdvciBDZXNrbydzIFVTQiBJUiBSZWNlaXZlcgorCitjb25maWcgTElSQ19JTU9OCisJdHJpc3RhdGUgIkxlZ2FjeSBTb3VuZEdyYXBoIGlNT04gUmVjZWl2ZXIgYW5kIERpc3BsYXkiCisJZGVwZW5kcyBvbiBMSVJDX1NUQUdJTkcKKwloZWxwCisJICBEcml2ZXIgZm9yIHRoZSBvcmlnaW5hbCBTb3VuZEdyYXBoIGlNT04gSVIgUmVjZWl2ZXIgYW5kIERpc3BsYXkKKworCSAgQ3VycmVudCBnZW5lcmF0aW9uIGlNT04gZGV2aWNlcyB1c2UgdGhlIGlucHV0IGxheWVyIGltb24gZHJpdmVyLgorCitjb25maWcgTElSQ19JVDg3CisJdHJpc3RhdGUgIklURSBJVDg3WFggQ0lSIFBvcnQgUmVjZWl2ZXIiCisJZGVwZW5kcyBvbiBMSVJDX1NUQUdJTkcKKwloZWxwCisJICBEcml2ZXIgZm9yIHRoZSBJVEUgSVQ4N3h4IElSIFJlY2VpdmVyCisKK2NvbmZpZyBMSVJDX0lURTg3MDkKKwl0cmlzdGF0ZSAiSVRFODcwOSBDSVIgUG9ydCBSZWNlaXZlciIKKwlkZXBlbmRzIG9uIExJUkNfU1RBR0lORyAmJiBQTlAKKwloZWxwCisJICBEcml2ZXIgZm9yIHRoZSBJVEU4NzA5IElSIFJlY2VpdmVyCisKK2NvbmZpZyBMSVJDX1BBUkFMTEVMCisJdHJpc3RhdGUgIkhvbWVicmV3IFBhcmFsbGVsIFBvcnQgUmVjZWl2ZXIiCisJZGVwZW5kcyBvbiBMSVJDX1NUQUdJTkcgJiYgIVNNUAorCWhlbHAKKwkgIERyaXZlciBmb3IgSG9tZWJyZXcgUGFyYWxsZWwgUG9ydCBSZWNlaXZlcnMKKworY29uZmlnIExJUkNfU0FTRU0KKwl0cmlzdGF0ZSAiU2FzZW0gVVNCIElSIFJlbW90ZSIKKwlkZXBlbmRzIG9uIExJUkNfU1RBR0lORworCWhlbHAKKwkgIERyaXZlciBmb3IgdGhlIFNhc2VtIE9uQWlyIFJlbW9jb24tViBvciBEaWduIEhWNSBIVFBDIElSL1ZGRCBNb2R1bGUKKworY29uZmlnIExJUkNfU0VSSUFMCisJdHJpc3RhdGUgIkhvbWVicmV3IFNlcmlhbCBQb3J0IFJlY2VpdmVyIgorCWRlcGVuZHMgb24gTElSQ19TVEFHSU5HCisJaGVscAorCSAgRHJpdmVyIGZvciBIb21lYnJldyBTZXJpYWwgUG9ydCBSZWNlaXZlcnMKKworY29uZmlnIExJUkNfU0VSSUFMX1RSQU5TTUlUVEVSCisJYm9vbCAiU2VyaWFsIFBvcnQgVHJhbnNtaXR0ZXIiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBMSVJDX1NFUklBTAorCWhlbHAKKwkgIFNlcmlhbCBQb3J0IFRyYW5zbWl0dGVyIHN1cHBvcnQKKworY29uZmlnIExJUkNfU0lSCisJdHJpc3RhdGUgIkJ1aWx0LWluIFNJUiBJckRBIHBvcnQiCisJZGVwZW5kcyBvbiBMSVJDX1NUQUdJTkcKKwloZWxwCisJICBEcml2ZXIgZm9yIHRoZSBTSVIgSXJEQSBwb3J0CisKK2NvbmZpZyBMSVJDX1NUUkVBTVpBUAorCXRyaXN0YXRlICJTdHJlYW16YXAgUEMgUmVjZWl2ZXIiCisJZGVwZW5kcyBvbiBMSVJDX1NUQUdJTkcKKwloZWxwCisJICBEcml2ZXIgZm9yIHRoZSBTdHJlYW16YXAgUEMgUmVjZWl2ZXIKKworY29uZmlnIExJUkNfVFRVU0JJUgorCXRyaXN0YXRlICJUZWNobm90cmVuZCBVU0IgSVIgUmVjZWl2ZXIiCisJZGVwZW5kcyBvbiBMSVJDX1NUQUdJTkcgJiYgVVNCCisJaGVscAorCSAgRHJpdmVyIGZvciB0aGUgVGVjaG5vdHJlbmQgVVNCIElSIFJlY2VpdmVyCisKK2NvbmZpZyBMSVJDX1pJTE9HCisJdHJpc3RhdGUgIlppbG9nL0hhdXBwYXVnZSBJUiBUcmFuc21pdHRlciIKKwlkZXBlbmRzIG9uIExJUkNfU1RBR0lORworCWhlbHAKKwkgIERyaXZlciBmb3IgdGhlIFppbG9nL0hhdXBwYXVnZSBJUiBUcmFuc21pdHRlciwgZm91bmQgb24KKwkgIFBWUi0xNTAvNTAwLCBIVlItMTIwMC8xMjUwLzE3MDAvMTgwMCwgSEQtUFZSIGFuZCBvdGhlciBjYXJkcworZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saXJjL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAxOTE4MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL01ha2VmaWxlCkBAIC0wLDAgKzEsMTkgQEAKKyMgTWFrZWZpbGUgZm9yIHRoZSBsaXJjIGRyaXZlcnMuCisjCisKKyMgRWFjaCBjb25maWd1cmF0aW9uIG9wdGlvbiBlbmFibGVzIGEgbGlzdCBvZiBmaWxlcy4KKworb2JqLSQoQ09ORklHX0xJUkNfQlQ4MjkpCSs9IGxpcmNfYnQ4Mjkubworb2JqLSQoQ09ORklHX0xJUkNfRU5FMDEwMCkJKz0gbGlyY19lbmUwMTAwLm8KK29iai0kKENPTkZJR19MSVJDX0kyQykJCSs9IGxpcmNfaTJjLm8KK29iai0kKENPTkZJR19MSVJDX0lHT1JQTFVHVVNCKQkrPSBsaXJjX2lnb3JwbHVndXNiLm8KK29iai0kKENPTkZJR19MSVJDX0lNT04pCQkrPSBsaXJjX2ltb24ubworb2JqLSQoQ09ORklHX0xJUkNfSVQ4NykJCSs9IGxpcmNfaXQ4Ny5vCitvYmotJChDT05GSUdfTElSQ19JVEU4NzA5KQkrPSBsaXJjX2l0ZTg3MDkubworb2JqLSQoQ09ORklHX0xJUkNfUEFSQUxMRUwpCSs9IGxpcmNfcGFyYWxsZWwubworb2JqLSQoQ09ORklHX0xJUkNfU0FTRU0pCSs9IGxpcmNfc2FzZW0ubworb2JqLSQoQ09ORklHX0xJUkNfU0VSSUFMKQkrPSBsaXJjX3NlcmlhbC5vCitvYmotJChDT05GSUdfTElSQ19TSVIpCQkrPSBsaXJjX3Npci5vCitvYmotJChDT05GSUdfTElSQ19TVFJFQU1aQVApCSs9IGxpcmNfc3RyZWFtemFwLm8KK29iai0kKENPTkZJR19MSVJDX1RUVVNCSVIpCSs9IGxpcmNfdHR1c2Jpci5vCitvYmotJChDT05GSUdfTElSQ19aSUxPRykJKz0gbGlyY196aWxvZy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmNiNTkzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvVE9ETwpAQCAtMCwwICsxLDggQEAKKy0gQWxsIGRyaXZlcnMgc2hvdWxkIGVpdGhlciBiZSBwb3J0ZWQgdG8gaXItY29yZSwgb3IgZHJvcHBlZCBlbnRpcmVseQorICAoc2VlIGRyaXZlcnMvbWVkaWEvSVIvbWNldXNiLmMgdnMuIGxpcmNfbWNldXNiLmMgaW4gbGlyYyBjdnMgZm9yIGFuCisgIGV4YW1wbGUgb2YgYSBwcmV2aW91c2x5IGNvbXBsZXRlZCBwb3J0KS4KKworUGxlYXNlIHNlbmQgcGF0Y2hlcyB0bzoKK0phcm9kIFdpbHNvbiA8amFyb2RAd2lsc29uZXQuY29tPgorR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvVE9ETy5saXJjX2kyYyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL1RPRE8ubGlyY19pMmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYwYTZmZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL1RPRE8ubGlyY19pMmMKQEAgLTAsMCArMSwzIEBACitsaXJjX2kyYyBwcm92aWRlcyBzdXBwb3J0IGZvciBzb21lIGRyaXZlcnMgdGhhdCBoYXZlIGFscmVhZHkgYSBSQworZHJpdmVyIHVuZGVyIGRyaXZlcnMvbWVkaWEvdmlkZW8uIEl0IHNob3VsZCBiZSBpbnRlZ3JhdGVkIGludG8gdGhvc2UKK2RyaXZlcnMsIGluIHNwZWNpYWwgd2l0aCBkcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfYnQ4MjkuYyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfYnQ4MjkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzg4MTAyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19idDgyOS5jCkBAIC0wLDAgKzEsMzgzIEBACisvKgorICogUmVtb3RlIGNvbnRyb2wgZHJpdmVyIGZvciB0aGUgVFYtY2FyZCBiYXNlZCBvbiBidDgyOQorICoKKyAqICBieSBMZW9uaWQgRnJvZW5jaGVua28gPGxmcm9lbkBnYWxpbGVvLmNvLmlsPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxtZWRpYS9saXJjX2Rldi5oPgorCitzdGF0aWMgaW50IHBvbGxfbWFpbih2b2lkKTsKK3N0YXRpYyBpbnQgYXRpcl9pbml0X3N0YXJ0KHZvaWQpOworCitzdGF0aWMgdm9pZCB3cml0ZV9pbmRleCh1bnNpZ25lZCBjaGFyIGluZGV4LCB1bnNpZ25lZCBpbnQgdmFsdWUpOworc3RhdGljIHVuc2lnbmVkIGludCByZWFkX2luZGV4KHVuc2lnbmVkIGNoYXIgaW5kZXgpOworCitzdGF0aWMgdm9pZCBkb19pMmNfc3RhcnQodm9pZCk7CitzdGF0aWMgdm9pZCBkb19pMmNfc3RvcCh2b2lkKTsKKworc3RhdGljIHZvaWQgc2VlbXNfd3JfYnl0ZSh1bnNpZ25lZCBjaGFyIGFsKTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHNlZW1zX3JkX2J5dGUodm9pZCk7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmVhZF9pbmRleCh1bnNpZ25lZCBjaGFyIGFsKTsKK3N0YXRpYyB2b2lkIHdyaXRlX2luZGV4KHVuc2lnbmVkIGNoYXIgYWgsIHVuc2lnbmVkIGludCBlZHgpOworCitzdGF0aWMgdm9pZCBjeWNsZV9kZWxheShpbnQgY3ljbGUpOworCitzdGF0aWMgdm9pZCBkb19zZXRfYml0cyh1bnNpZ25lZCBjaGFyIGJsKTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGRvX2dldF9iaXRzKHZvaWQpOworCisjZGVmaW5lIERBVEFfUENJX09GRiAweDdGRkMwMAorI2RlZmluZSBXQUlUX0NZQ0xFICAgMjAKKworI2RlZmluZSBEUklWRVJfTkFNRSAibGlyY19idDgyOSIKKworc3RhdGljIGludCBkZWJ1ZzsKKyNkZWZpbmUgZHByaW50ayhmbXQsIGFyZ3MuLi4pCQkJCQkJIFwKKwlkbyB7CQkJCQkJCQkgXAorCQlpZiAoZGVidWcpCQkJCQkJIFwKKwkJCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6ICJmbXQsICMjIGFyZ3MpOyBcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIGludCBhdGlyX21pbm9yOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGNpX2FkZHJfcGh5czsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpwY2lfYWRkcl9saW47CisKK3N0YXRpYyBzdHJ1Y3QgbGlyY19kcml2ZXIgYXRpcl9kcml2ZXI7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqZG9fcGNpX3Byb2JlKHZvaWQpCit7CisJc3RydWN0IHBjaV9kZXYgKm15X2RldjsKKwlteV9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FUSSwKKwkJCQlQQ0lfREVWSUNFX0lEX0FUSV8yNjRWVCwgTlVMTCk7CisJaWYgKG15X2RldikgeworCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUgIjogVXNpbmcgZGV2aWNlOiAlc1xuIiwKKwkJICAgICAgIHBjaV9uYW1lKG15X2RldikpOworCQlwY2lfYWRkcl9waHlzID0gMDsKKwkJaWYgKG15X2Rldi0+cmVzb3VyY2VbMF0uZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgeworCQkJcGNpX2FkZHJfcGh5cyA9IG15X2Rldi0+cmVzb3VyY2VbMF0uc3RhcnQ7CisJCQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6IG1lbW9yeSBhdCAweCUwOFhcbiIsCisJCQkgICAgICAgKHVuc2lnbmVkIGludClwY2lfYWRkcl9waHlzKTsKKwkJfQorCQlpZiAocGNpX2FkZHJfcGh5cyA9PSAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUgIjogbm8gbWVtb3J5IHJlc291cmNlID9cbiIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUgIjogcGNpX3Byb2JlIGZhaWxlZFxuIik7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gbXlfZGV2OworfQorCitzdGF0aWMgaW50IGF0aXJfYWRkX3RvX2J1Zih2b2lkICpkYXRhLCBzdHJ1Y3QgbGlyY19idWZmZXIgKmJ1ZikKK3sKKwl1bnNpZ25lZCBjaGFyIGtleTsKKwlpbnQgc3RhdHVzOworCXN0YXR1cyA9IHBvbGxfbWFpbigpOworCWtleSA9IChzdGF0dXMgPj4gOCkgJiAweEZGOworCWlmIChzdGF0dXMgJiAweEZGKSB7CisJCWRwcmludGsoInJlYWRpbmcga2V5ICUwMlhcbiIsIGtleSk7CisJCWxpcmNfYnVmZmVyX3dyaXRlKGJ1ZiwgJmtleSk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVOT0RBVEE7Cit9CisKK3N0YXRpYyBpbnQgYXRpcl9zZXRfdXNlX2luYyh2b2lkICpkYXRhKQoreworCWRwcmludGsoImRyaXZlciBpcyBvcGVuZWRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhdGlyX3NldF91c2VfZGVjKHZvaWQgKmRhdGEpCit7CisJZHByaW50aygiZHJpdmVyIGlzIGNsb3NlZFxuIik7Cit9CisKK2ludCBpbml0X21vZHVsZSh2b2lkKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCisJcGRldiA9IGRvX3BjaV9wcm9iZSgpOworCWlmIChwZGV2ID09IE5VTEwpCisJCXJldHVybiAxOworCisJaWYgKCFhdGlyX2luaXRfc3RhcnQoKSkKKwkJcmV0dXJuIDE7CisKKwlzdHJjcHkoYXRpcl9kcml2ZXIubmFtZSwgIkFUSVIiKTsKKwlhdGlyX2RyaXZlci5taW5vciAgICAgICA9IC0xOworCWF0aXJfZHJpdmVyLmNvZGVfbGVuZ3RoID0gODsKKwlhdGlyX2RyaXZlci5zYW1wbGVfcmF0ZSA9IDEwOworCWF0aXJfZHJpdmVyLmRhdGEgICAgICAgID0gMDsKKwlhdGlyX2RyaXZlci5hZGRfdG9fYnVmICA9IGF0aXJfYWRkX3RvX2J1ZjsKKwlhdGlyX2RyaXZlci5zZXRfdXNlX2luYyA9IGF0aXJfc2V0X3VzZV9pbmM7CisJYXRpcl9kcml2ZXIuc2V0X3VzZV9kZWMgPSBhdGlyX3NldF91c2VfZGVjOworCWF0aXJfZHJpdmVyLmRldiAgICAgICAgID0gJnBkZXYtPmRldjsKKwlhdGlyX2RyaXZlci5vd25lciAgICAgICA9IFRISVNfTU9EVUxFOworCisJYXRpcl9taW5vciA9IGxpcmNfcmVnaXN0ZXJfZHJpdmVyKCZhdGlyX2RyaXZlcik7CisJaWYgKGF0aXJfbWlub3IgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUklWRVJfTkFNRSAiOiBmYWlsZWQgdG8gcmVnaXN0ZXIgZHJpdmVyIVxuIik7CisJCXJldHVybiBhdGlyX21pbm9yOworCX0KKwlkcHJpbnRrKCJkcml2ZXIgaXMgcmVnaXN0ZXJlZCBvbiBtaW5vciAlZFxuIiwgYXRpcl9taW5vcik7CisKKwlyZXR1cm4gMDsKK30KKworCit2b2lkIGNsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJbGlyY191bnJlZ2lzdGVyX2RyaXZlcihhdGlyX21pbm9yKTsKK30KKworCitzdGF0aWMgaW50IGF0aXJfaW5pdF9zdGFydCh2b2lkKQoreworCXBjaV9hZGRyX2xpbiA9IGlvcmVtYXAocGNpX2FkZHJfcGh5cyArIERBVEFfUENJX09GRiwgMHg0MDApOworCWlmIChwY2lfYWRkcl9saW4gPT0gMCkgeworCQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6IHBjaSBtZW0gbXVzdCBiZSBtYXBwZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGN5Y2xlX2RlbGF5KGludCBjeWNsZSkKK3sKKwl1ZGVsYXkoV0FJVF9DWUNMRSpjeWNsZSk7Cit9CisKKworc3RhdGljIGludCBwb2xsX21haW4oKQoreworCXVuc2lnbmVkIGNoYXIgc3RhdHVzX2hpZ2gsIHN0YXR1c19sb3c7CisKKwlkb19pMmNfc3RhcnQoKTsKKworCXNlZW1zX3dyX2J5dGUoMHhBQSk7CisJc2VlbXNfd3JfYnl0ZSgweDAxKTsKKworCWRvX2kyY19zdGFydCgpOworCisJc2VlbXNfd3JfYnl0ZSgweEFCKTsKKworCXN0YXR1c19sb3cgPSBzZWVtc19yZF9ieXRlKCk7CisJc3RhdHVzX2hpZ2ggPSBzZWVtc19yZF9ieXRlKCk7CisKKwlkb19pMmNfc3RvcCgpOworCisJcmV0dXJuIChzdGF0dXNfaGlnaCA8PCA4KSB8IHN0YXR1c19sb3c7Cit9CisKK3N0YXRpYyB2b2lkIGRvX2kyY19zdGFydCh2b2lkKQoreworCWRvX3NldF9iaXRzKDMpOworCWN5Y2xlX2RlbGF5KDQpOworCisJZG9fc2V0X2JpdHMoMSk7CisJY3ljbGVfZGVsYXkoNyk7CisKKwlkb19zZXRfYml0cygwKTsKKwljeWNsZV9kZWxheSgyKTsKK30KKworc3RhdGljIHZvaWQgZG9faTJjX3N0b3Aodm9pZCkKK3sKKwl1bnNpZ25lZCBjaGFyIGJpdHM7CisJYml0cyA9ICBkb19nZXRfYml0cygpICYgMHhGRDsKKwlkb19zZXRfYml0cyhiaXRzKTsKKwljeWNsZV9kZWxheSgxKTsKKworCWJpdHMgfD0gMTsKKwlkb19zZXRfYml0cyhiaXRzKTsKKwljeWNsZV9kZWxheSgyKTsKKworCWJpdHMgfD0gMjsKKwlkb19zZXRfYml0cyhiaXRzKTsKKwliaXRzID0gMzsKKwlkb19zZXRfYml0cyhiaXRzKTsKKwljeWNsZV9kZWxheSgyKTsKK30KKworc3RhdGljIHZvaWQgc2VlbXNfd3JfYnl0ZSh1bnNpZ25lZCBjaGFyIHZhbHVlKQoreworCWludCBpOworCXVuc2lnbmVkIGNoYXIgcmVnOworCisJcmVnID0gZG9fZ2V0X2JpdHMoKTsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWlmICh2YWx1ZSAmIDB4ODApCisJCQlyZWcgfD0gMHgwMjsKKwkJZWxzZQorCQkJcmVnICY9IDB4RkQ7CisKKwkJZG9fc2V0X2JpdHMocmVnKTsKKwkJY3ljbGVfZGVsYXkoMSk7CisKKwkJcmVnIHw9IDE7CisJCWRvX3NldF9iaXRzKHJlZyk7CisJCWN5Y2xlX2RlbGF5KDEpOworCisJCXJlZyAmPSAweEZFOworCQlkb19zZXRfYml0cyhyZWcpOworCQljeWNsZV9kZWxheSgxKTsKKwkJdmFsdWUgPDw9IDE7CisJfQorCWN5Y2xlX2RlbGF5KDIpOworCisJcmVnIHw9IDI7CisJZG9fc2V0X2JpdHMocmVnKTsKKworCXJlZyB8PSAxOworCWRvX3NldF9iaXRzKHJlZyk7CisKKwljeWNsZV9kZWxheSgxKTsKKwlkb19nZXRfYml0cygpOworCisJcmVnICY9IDB4RkU7CisJZG9fc2V0X2JpdHMocmVnKTsKKwljeWNsZV9kZWxheSgzKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgc2VlbXNfcmRfYnl0ZSh2b2lkKQoreworCWludCBpOworCWludCByZF9ieXRlOworCXVuc2lnbmVkIGNoYXIgYml0c18yLCBiaXRzXzE7CisKKwliaXRzXzEgPSBkb19nZXRfYml0cygpIHwgMjsKKwlkb19zZXRfYml0cyhiaXRzXzEpOworCisJcmRfYnl0ZSA9IDA7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQliaXRzXzEgJj0gMHhGRTsKKwkJZG9fc2V0X2JpdHMoYml0c18xKTsKKwkJY3ljbGVfZGVsYXkoMik7CisKKwkJYml0c18xIHw9IDE7CisJCWRvX3NldF9iaXRzKGJpdHNfMSk7CisJCWN5Y2xlX2RlbGF5KDEpOworCisJCWJpdHNfMiA9IGRvX2dldF9iaXRzKCk7CisJCWlmIChiaXRzXzIgJiAyKQorCQkJcmRfYnl0ZSB8PSAxOworCisJCXJkX2J5dGUgPDw9IDE7CisJfQorCisJYml0c18xID0gMDsKKwlpZiAoYml0c18yID09IDApCisJCWJpdHNfMSB8PSAyOworCisJZG9fc2V0X2JpdHMoYml0c18xKTsKKwljeWNsZV9kZWxheSgyKTsKKworCWJpdHNfMSB8PSAxOworCWRvX3NldF9iaXRzKGJpdHNfMSk7CisJY3ljbGVfZGVsYXkoMyk7CisKKwliaXRzXzEgJj0gMHhGRTsKKwlkb19zZXRfYml0cyhiaXRzXzEpOworCWN5Y2xlX2RlbGF5KDIpOworCisJcmRfYnl0ZSA+Pj0gMTsKKwlyZF9ieXRlICY9IDB4RkY7CisJcmV0dXJuIHJkX2J5dGU7Cit9CisKK3N0YXRpYyB2b2lkIGRvX3NldF9iaXRzKHVuc2lnbmVkIGNoYXIgbmV3X2JpdHMpCit7CisJaW50IHJlZ192YWw7CisJcmVnX3ZhbCA9IHJlYWRfaW5kZXgoMHgzNCk7CisJaWYgKG5ld19iaXRzICYgMikgeworCQlyZWdfdmFsICY9IDB4RkZGRkZGREY7CisJCXJlZ192YWwgfD0gMTsKKwl9IGVsc2UgeworCQlyZWdfdmFsICY9IDB4RkZGRkZGRkU7CisJCXJlZ192YWwgfD0gMHgyMDsKKwl9CisJcmVnX3ZhbCB8PSAweDEwOworCXdyaXRlX2luZGV4KDB4MzQsIHJlZ192YWwpOworCisJcmVnX3ZhbCA9IHJlYWRfaW5kZXgoMHgzMSk7CisJaWYgKG5ld19iaXRzICYgMSkKKwkJcmVnX3ZhbCB8PSAweDEwMDAwMDA7CisJZWxzZQorCQlyZWdfdmFsICY9IDB4RkVGRkZGRkY7CisKKwlyZWdfdmFsIHw9IDB4ODAwMDAwMDsKKwl3cml0ZV9pbmRleCgweDMxLCByZWdfdmFsKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgZG9fZ2V0X2JpdHModm9pZCkKK3sKKwl1bnNpZ25lZCBjaGFyIGJpdHM7CisJaW50IHJlZ192YWw7CisKKwlyZWdfdmFsID0gcmVhZF9pbmRleCgweDM0KTsKKwlyZWdfdmFsIHw9IDB4MTA7CisJcmVnX3ZhbCAmPSAweEZGRkZGRkRGOworCXdyaXRlX2luZGV4KDB4MzQsIHJlZ192YWwpOworCisJcmVnX3ZhbCA9IHJlYWRfaW5kZXgoMHgzNCk7CisJYml0cyA9IDA7CisJaWYgKHJlZ192YWwgJiA4KQorCQliaXRzIHw9IDI7CisJZWxzZQorCQliaXRzICY9IDB4RkQ7CisKKwlyZWdfdmFsID0gcmVhZF9pbmRleCgweDMxKTsKKwlpZiAocmVnX3ZhbCAmIDB4MTAwMDAwMCkKKwkJYml0cyB8PSAxOworCWVsc2UKKwkJYml0cyAmPSAweEZFOworCisJcmV0dXJuIGJpdHM7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmVhZF9pbmRleCh1bnNpZ25lZCBjaGFyIGluZGV4KQoreworCXVuc2lnbmVkIGNoYXIgKmFkZHI7CisJdW5zaWduZWQgaW50IHZhbHVlOworCS8qICBhZGRyID0gcGNpX2FkZHJfbGluICsgREFUQV9QQ0lfT0ZGICsgKChpbmRleCAmIDB4RkYpIDw8IDIpOyAqLworCWFkZHIgPSBwY2lfYWRkcl9saW4gKyAoKGluZGV4ICYgMHhGRikgPDwgMik7CisJdmFsdWUgPSByZWFkbChhZGRyKTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2luZGV4KHVuc2lnbmVkIGNoYXIgaW5kZXgsIHVuc2lnbmVkIGludCByZWdfdmFsKQoreworCXVuc2lnbmVkIGNoYXIgKmFkZHI7CisJYWRkciA9IHBjaV9hZGRyX2xpbiArICgoaW5kZXggJiAweEZGKSA8PCAyKTsKKwl3cml0ZWwocmVnX3ZhbCwgYWRkcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIkZyb2VuY2hlbmtvIExlb25pZCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJUiByZW1vdGUgZHJpdmVyIGZvciBidDgyOSBiYXNlZCBUViBjYXJkcyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19lbmUwMTAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX2VuZTAxMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTUyYzUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19lbmUwMTAwLmMKQEAgLTAsMCArMSw2NDYgQEAKKy8qCisgKiBkcml2ZXIgZm9yIEVORSBLQjM5MjYgQi9DL0QgQ0lSIChhbHNvIGtub3duIGFzIEVORTAxMDApCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltIExldml0c2t5IDxtYXhpbWxldml0c2t5QGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgKiBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcG5wLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgImxpcmNfZW5lMDEwMC5oIgorCitzdGF0aWMgaW50IHNhbXBsZV9wZXJpb2QgPSA3NTsKK3N0YXRpYyBpbnQgZW5hYmxlX2lkbGUgPSAxOworc3RhdGljIGludCBlbmFibGVfbGVhcm5pbmc7CisKK3N0YXRpYyB2b2lkIGVuZV9zZXRfaWRsZShzdHJ1Y3QgZW5lX2RldmljZSAqZGV2LCBpbnQgaWRsZSk7CitzdGF0aWMgdm9pZCBlbmVfc2V0X2lucHV0cyhzdHJ1Y3QgZW5lX2RldmljZSAqZGV2LCBpbnQgZW5hYmxlKTsKKworLyogcmVhZCBhIGhhcmR3YXJlIHJlZ2lzdGVyICovCitzdGF0aWMgdTggZW5lX2h3X3JlYWRfcmVnKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYsIHUxNiByZWcpCit7CisJb3V0YihyZWcgPj4gOCwgZGV2LT5od19pbyArIEVORV9BRERSX0hJKTsKKwlvdXRiKHJlZyAmIDB4RkYsIGRldi0+aHdfaW8gKyBFTkVfQUREUl9MTyk7CisJcmV0dXJuIGluYihkZXYtPmh3X2lvICsgRU5FX0lPKTsKK30KKworLyogd3JpdGUgYSBoYXJkd2FyZSByZWdpc3RlciAqLworc3RhdGljIHZvaWQgZW5lX2h3X3dyaXRlX3JlZyhzdHJ1Y3QgZW5lX2RldmljZSAqZGV2LCB1MTYgcmVnLCB1OCB2YWx1ZSkKK3sKKwlvdXRiKHJlZyA+PiA4LCBkZXYtPmh3X2lvICsgRU5FX0FERFJfSEkpOworCW91dGIocmVnICYgMHhGRiwgZGV2LT5od19pbyArIEVORV9BRERSX0xPKTsKKwlvdXRiKHZhbHVlLCBkZXYtPmh3X2lvICsgRU5FX0lPKTsKK30KKworLyogY2hhbmdlIHNwZWNpZmljIGJpdHMgaW4gaGFyZHdhcmUgcmVnaXN0ZXIgKi8KK3N0YXRpYyB2b2lkIGVuZV9od193cml0ZV9yZWdfbWFzayhzdHJ1Y3QgZW5lX2RldmljZSAqZGV2LAorCQkJCSAgdTE2IHJlZywgdTggdmFsdWUsIHU4IG1hc2spCit7CisJdTggcmVndmFsdWU7CisKKwlvdXRiKHJlZyA+PiA4LCBkZXYtPmh3X2lvICsgRU5FX0FERFJfSEkpOworCW91dGIocmVnICYgMHhGRiwgZGV2LT5od19pbyArIEVORV9BRERSX0xPKTsKKworCXJlZ3ZhbHVlID0gaW5iKGRldi0+aHdfaW8gKyBFTkVfSU8pICYgfm1hc2s7CisJcmVndmFsdWUgfD0gKHZhbHVlICYgbWFzayk7CisJb3V0YihyZWd2YWx1ZSwgZGV2LT5od19pbyArIEVORV9JTyk7Cit9CisKKy8qIHJlYWQgaXJxIHN0YXR1cyBhbmQgYWNrIGl0ICovCitzdGF0aWMgaW50IGVuZV9od19pcnFfc3RhdHVzKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYsIGludCAqYnVmZmVyX3BvaW50ZXIpCit7CisJdTggaXJxX3N0YXR1czsKKwl1OCBmd19mbGFnczEsIGZ3X2ZsYWdzMjsKKworCWZ3X2ZsYWdzMiA9IGVuZV9od19yZWFkX3JlZyhkZXYsIEVORV9GVzIpOworCisJaWYgKGJ1ZmZlcl9wb2ludGVyKQorCQkqYnVmZmVyX3BvaW50ZXIgPSA0ICogKGZ3X2ZsYWdzMiAmIEVORV9GVzJfQlVGX0hJR0gpOworCisJaWYgKGRldi0+aHdfcmV2aXNpb24gPCBFTkVfSFdfQykgeworCQlpcnFfc3RhdHVzID0gZW5lX2h3X3JlYWRfcmVnKGRldiwgRU5FQl9JUlFfU1RBVFVTKTsKKworCQlpZiAoIShpcnFfc3RhdHVzICYgRU5FQl9JUlFfU1RBVFVTX0lSKSkKKwkJCXJldHVybiAwOworCQllbmVfaHdfd3JpdGVfcmVnKGRldiwgRU5FQl9JUlFfU1RBVFVTLAorCQkJCSBpcnFfc3RhdHVzICYgfkVORUJfSVJRX1NUQVRVU19JUik7CisKKwkJLyogcmV2IEIgc3VwcG9ydCBvbmx5IHJlY2lldmluZyAqLworCQlyZXR1cm4gRU5FX0lSUV9SWDsKKwl9CisKKwlpcnFfc3RhdHVzID0gZW5lX2h3X3JlYWRfcmVnKGRldiwgRU5FQ19JUlEpOworCisJaWYgKCEoaXJxX3N0YXR1cyAmIEVORUNfSVJRX1NUQVRVUykpCisJCXJldHVybiAwOworCisJLyogb3JpZ2luYWwgZHJpdmVyIGRvZXMgdGhhdCB0d2ljZSAtIGEgd29ya2Fyb3VuZCA/ICovCisJZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORUNfSVJRLCBpcnFfc3RhdHVzICYgfkVORUNfSVJRX1NUQVRVUyk7CisJZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORUNfSVJRLCBpcnFfc3RhdHVzICYgfkVORUNfSVJRX1NUQVRVUyk7CisKKwkvKiBjbGVhciB1bmtub3duIGZsYWcgaW4gRjhGOSAqLworCWlmIChmd19mbGFnczIgJiBFTkVfRlcyX0lSUV9DTFIpCisJCWVuZV9od193cml0ZV9yZWcoZGV2LCBFTkVfRlcyLCBmd19mbGFnczIgJiB+RU5FX0ZXMl9JUlFfQ0xSKTsKKworCS8qIGNoZWNrIGlmIHRoaXMgaXMgYSBUWCBpbnRlcnJ1cHQgKi8KKwlmd19mbGFnczEgPSBlbmVfaHdfcmVhZF9yZWcoZGV2LCBFTkVfRlcxKTsKKworCWlmIChmd19mbGFnczEgJiBFTkVfRlcxX1RYSVJRKSB7CisJCWVuZV9od193cml0ZV9yZWcoZGV2LCBFTkVfRlcxLCBmd19mbGFnczEgJiB+RU5FX0ZXMV9UWElSUSk7CisJCXJldHVybiBFTkVfSVJRX1RYOworCX0gZWxzZQorCQlyZXR1cm4gRU5FX0lSUV9SWDsKK30KKworc3RhdGljIGludCBlbmVfaHdfZGV0ZWN0KHN0cnVjdCBlbmVfZGV2aWNlICpkZXYpCit7CisJdTggY2hpcF9tYWpvciwgY2hpcF9taW5vcjsKKwl1OCBod19yZXZpc2lvbiwgb2xkX3ZlcjsKKwl1OCB0bXA7CisJdTggZndfY2FwYWJpbGl0aWVzOworCisJdG1wID0gZW5lX2h3X3JlYWRfcmVnKGRldiwgRU5FX0hXX1VOSyk7CisJZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORV9IV19VTkssIHRtcCAmIH5FTkVfSFdfVU5LX0NMUik7CisKKwljaGlwX21ham9yID0gZW5lX2h3X3JlYWRfcmVnKGRldiwgRU5FX0hXX1ZFUl9NQUpPUik7CisJY2hpcF9taW5vciA9IGVuZV9od19yZWFkX3JlZyhkZXYsIEVORV9IV19WRVJfTUlOT1IpOworCisJZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORV9IV19VTkssIHRtcCk7CisJaHdfcmV2aXNpb24gPSBlbmVfaHdfcmVhZF9yZWcoZGV2LCBFTkVfSFdfVkVSU0lPTik7CisJb2xkX3ZlciA9IGVuZV9od19yZWFkX3JlZyhkZXYsIEVORV9IV19WRVJfT0xEKTsKKworCWlmIChod19yZXZpc2lvbiA9PSAweEZGKSB7CisKKwkJZW5lX3ByaW50ayhLRVJOX1dBUk5JTkcsICJkZXZpY2Ugc2VlbXMgdG8gYmUgZGlzYWJsZWRcbiIpOworCQllbmVfcHJpbnRrKEtFUk5fV0FSTklORywKKwkJCSJzZW5kIGEgbWFpbCB0byBsaXJjLWxpc3RAbGlzdHMuc291cmNlZm9yZ2UubmV0XG4iKTsKKwkJZW5lX3ByaW50ayhLRVJOX1dBUk5JTkcsICJwbGVhc2UgYXR0YWNoIG91dHB1dCBvZiBhY3BpZHVtcFxuIik7CisKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGNoaXBfbWFqb3IgPT0gMHgzMykgeworCQllbmVfcHJpbnRrKEtFUk5fV0FSTklORywgImNoaXBzIDB4MzN4eCBhcmVuJ3Qgc3VwcG9ydGVkIHlldFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChjaGlwX21ham9yID09IDB4MzkgJiYgY2hpcF9taW5vciA9PSAweDI2ICYmIGh3X3JldmlzaW9uID09IDB4QzApIHsKKwkJZGV2LT5od19yZXZpc2lvbiA9IEVORV9IV19DOworCQllbmVfcHJpbnRrKEtFUk5fV0FSTklORywKKwkJICAgICAgICJLQjM5MjZDIGRldGVjdGVkLCBkcml2ZXIgc3VwcG9ydCBpcyBub3QgY29tcGxldGUhXG4iKTsKKworCX0gZWxzZSBpZiAob2xkX3ZlciA9PSAweDI0ICYmIGh3X3JldmlzaW9uID09IDB4QzApIHsKKwkJZGV2LT5od19yZXZpc2lvbiA9IEVORV9IV19COworCQllbmVfcHJpbnRrKEtFUk5fTk9USUNFLCAiS0IzOTI2QiBkZXRlY3RlZFxuIik7CisJfSBlbHNlIHsKKwkJZGV2LT5od19yZXZpc2lvbiA9IEVORV9IV19EOworCQllbmVfcHJpbnRrKEtFUk5fV0FSTklORywKKwkJCSJ1bmtub3duIEVORSBjaGlwIGRldGVjdGVkLCBhc3N1bWluZyBLQjM5MjZEXG4iKTsKKwkJZW5lX3ByaW50ayhLRVJOX1dBUk5JTkcsICJkcml2ZXIgc3VwcG9ydCBpbmNvbXBsZXRlIik7CisKKwl9CisKKwllbmVfcHJpbnRrKEtFUk5fREVCVUcsICJjaGlwIGlzIDB4JTAyeCUwMnggLSAweCUwMngsIDB4JTAyeFxuIiwKKwkJY2hpcF9tYWpvciwgY2hpcF9taW5vciwgb2xkX3ZlciwgaHdfcmV2aXNpb24pOworCisKKwkvKiBkZXRlY3QgZmVhdHVyZXMgaGFyZHdhcmUgc3VwcG9ydHMgKi8KKworCWlmIChkZXYtPmh3X3JldmlzaW9uIDwgRU5FX0hXX0MpCisJCXJldHVybiAwOworCisJZndfY2FwYWJpbGl0aWVzID0gZW5lX2h3X3JlYWRfcmVnKGRldiwgRU5FX0ZXMik7CisKKwlkZXYtPmh3X2dwaW80MF9sZWFybmluZyA9IGZ3X2NhcGFiaWxpdGllcyAmIEVORV9GVzJfR1A0MF9BU19MRUFSTjsKKwlkZXYtPmh3X2xlYXJuaW5nX2FuZF90eF9jYXBhYmxlID0gZndfY2FwYWJpbGl0aWVzICYgRU5FX0ZXMl9MRUFSTklORzsKKworCWRldi0+aHdfZmFuX2FzX25vcm1hbF9pbnB1dCA9IGRldi0+aHdfbGVhcm5pbmdfYW5kX3R4X2NhcGFibGUgJiYKKwkgICAgZndfY2FwYWJpbGl0aWVzICYgRU5FX0ZXMl9GQU5fQVNfTlJNTF9JTjsKKworCWVuZV9wcmludGsoS0VSTl9OT1RJQ0UsICJoYXJkd2FyZSBmZWF0dXJlczpcbiIpOworCWVuZV9wcmludGsoS0VSTl9OT1RJQ0UsCisJCSJsZWFybmluZyBhbmQgdHggJXMsIGdwaW80MF9sZWFybiAlcywgZmFuX2luICVzXG4iLAorCSAgICAgICBkZXYtPmh3X2xlYXJuaW5nX2FuZF90eF9jYXBhYmxlID8gIm9uIiA6ICJvZmYiLAorCSAgICAgICBkZXYtPmh3X2dwaW80MF9sZWFybmluZyA/ICJvbiIgOiAib2ZmIiwKKwkgICAgICAgZGV2LT5od19mYW5fYXNfbm9ybWFsX2lucHV0ID8gIm9uIiA6ICJvZmYiKTsKKworCWlmICghZGV2LT5od19sZWFybmluZ19hbmRfdHhfY2FwYWJsZSAmJiBlbmFibGVfbGVhcm5pbmcpCisJCWVuYWJsZV9sZWFybmluZyA9IDA7CisKKwlpZiAoZGV2LT5od19sZWFybmluZ19hbmRfdHhfY2FwYWJsZSkgeworCQllbmVfcHJpbnRrKEtFUk5fV0FSTklORywKKwkJIkRldmljZSBzdXBwb3J0cyB0cmFuc21pdHRpbmcsIGJ1dCB0aGUgZHJpdmVyIGRvZXNuJ3RcbiIpOworCQllbmVfcHJpbnRrKEtFUk5fV0FSTklORywKKwkJImR1ZSB0byBsYWNrIG9mIGhhcmR3YXJlIHRvIHRlc3QgYWdhaW5zdC5cbiIpOworCQllbmVfcHJpbnRrKEtFUk5fV0FSTklORywKKwkJIlNlbmQgYSBtYWlsIHRvOiBsaXJjLWxpc3RAbGlzdHMuc291cmNlZm9yZ2UubmV0XG4iKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uICovCitzdGF0aWMgaW50IGVuZV9od19pbml0KHZvaWQgKmRhdGEpCit7CisJdTggcmVnX3ZhbHVlOworCXN0cnVjdCBlbmVfZGV2aWNlICpkZXYgPSAoc3RydWN0IGVuZV9kZXZpY2UgKilkYXRhOworCWRldi0+aW5fdXNlID0gMTsKKworCWlmIChkZXYtPmh3X3JldmlzaW9uIDwgRU5FX0hXX0MpIHsKKwkJZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORUJfSVJRLCBkZXYtPmlycSA8PCAxKTsKKwkJZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORUJfSVJRX1VOSzEsIDB4MDEpOworCX0gZWxzZSB7CisJCXJlZ192YWx1ZSA9IGVuZV9od19yZWFkX3JlZyhkZXYsIEVORUNfSVJRKSAmIDB4RjA7CisJCXJlZ192YWx1ZSB8PSBFTkVDX0lSUV9VTktfRU47CisJCXJlZ192YWx1ZSAmPSB+RU5FQ19JUlFfU1RBVFVTOworCQlyZWdfdmFsdWUgfD0gKGRldi0+aXJxICYgRU5FQ19JUlFfTUFTSyk7CisJCWVuZV9od193cml0ZV9yZWcoZGV2LCBFTkVDX0lSUSwgcmVnX3ZhbHVlKTsKKwkJZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORV9UWF9VTksxLCAweDYzKTsKKwl9CisKKwllbmVfaHdfd3JpdGVfcmVnKGRldiwgRU5FX0NJUl9DT05GMiwgMHgwMCk7CisJZW5lX3NldF9pbnB1dHMoZGV2LCBlbmFibGVfbGVhcm5pbmcpOworCisJLyogc2V0IHNhbXBsaW5nIHBlcmlvZCAqLworCWVuZV9od193cml0ZV9yZWcoZGV2LCBFTkVfQ0lSX1NBTVBMRV9QRVJJT0QsIHNhbXBsZV9wZXJpb2QpOworCisJLyogYWNrIGFueSBwZW5kaW5nIGlycXMgLSBqdXN0IGluIGNhc2UgKi8KKwllbmVfaHdfaXJxX3N0YXR1cyhkZXYsIE5VTEwpOworCisJLyogZW50ZXIgaWRsZSBtb2RlICovCisJZW5lX3NldF9pZGxlKGRldiwgMSk7CisKKwkvKiBlbmFibGUgZmlybXdhcmUgYml0cyAqLworCWVuZV9od193cml0ZV9yZWdfbWFzayhkZXYsIEVORV9GVzEsCisJCQkgICAgICBFTkVfRlcxX0VOQUJMRSB8IEVORV9GVzFfSVJRLAorCQkJICAgICAgRU5FX0ZXMV9FTkFCTEUgfCBFTkVfRlcxX0lSUSk7CisJLyogY2xlYXIgc3RhdHMgKi8KKwlkZXYtPnNhbXBsZSA9IDA7CisJcmV0dXJuIDA7Cit9CisKKy8qIHRoaXMgZW5hYmxlcyBncGlvNDAgc2lnbmFsLCB1c2VkIGlmIGNvbm5lY3RlZCB0byB3aWRlIGJhbmQgaW5wdXQqLworc3RhdGljIHZvaWQgZW5lX2VuYWJsZV9ncGlvNDAoc3RydWN0IGVuZV9kZXZpY2UgKmRldiwgaW50IGVuYWJsZSkKK3sKKwllbmVfaHdfd3JpdGVfcmVnX21hc2soZGV2LCBFTkVfQ0lSX0NPTkYxLCBlbmFibGUgPworCQkJICAgICAgMCA6IEVORV9DSVJfQ09ORjJfR1BJTzQwRElTLAorCQkJICAgICAgRU5FX0NJUl9DT05GMl9HUElPNDBESVMpOworfQorCisvKiB0aGlzIGVuYWJsZXMgdGhlIGNsYXNzaWMgc2FtcGxlciAqLworc3RhdGljIHZvaWQgZW5lX2VuYWJsZV9ub3JtYWxfcmVjaWV2ZShzdHJ1Y3QgZW5lX2RldmljZSAqZGV2LCBpbnQgZW5hYmxlKQoreworCWVuZV9od193cml0ZV9yZWcoZGV2LCBFTkVfQ0lSX0NPTkYxLCBlbmFibGUgPyBFTkVfQ0lSX0NPTkYxX0FEQ19PTiA6IDApOworfQorCisvKiB0aGlzIGVuYWJsZXMgcmVjaWV2ZSB2aWEgZmFuIGlucHV0ICovCitzdGF0aWMgdm9pZCBlbmVfZW5hYmxlX2Zhbl9yZWNpZXZlKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYsIGludCBlbmFibGUpCit7CisJaWYgKCFlbmFibGUpCisJCWVuZV9od193cml0ZV9yZWcoZGV2LCBFTkVfRkFOX0FTX0lOMSwgMCk7CisJZWxzZSB7CisJCWVuZV9od193cml0ZV9yZWcoZGV2LCBFTkVfRkFOX0FTX0lOMSwgRU5FX0ZBTl9BU19JTjFfRU4pOworCQllbmVfaHdfd3JpdGVfcmVnKGRldiwgRU5FX0ZBTl9BU19JTjIsIEVORV9GQU5fQVNfSU4yX0VOKTsKKwl9CisJZGV2LT5mYW5faW5wdXRfaW51c2UgPSBlbmFibGU7Cit9CisKKy8qIGRldGVybWluZSB3aGljaCBpbnB1dCB0byB1c2UqLworc3RhdGljIHZvaWQgZW5lX3NldF9pbnB1dHMoc3RydWN0IGVuZV9kZXZpY2UgKmRldiwgaW50IGxlYXJuaW5nX2VuYWJsZSkKK3sKKwllbmVfZW5hYmxlX25vcm1hbF9yZWNpZXZlKGRldiwgMSk7CisKKwkvKiBvbGQgaGFyZHdhcmUgZG9lc24ndCBzdXBwb3J0IGxlYXJuaW5nIG1vZGUgZm9yIHN1cmUgKi8KKwlpZiAoZGV2LT5od19yZXZpc2lvbiA8PSBFTkVfSFdfQikKKwkJcmV0dXJuOworCisJLyogcmVjaWV2ZXIgbm90IGxlYXJuaW5nIGNhcGFibGUsIHN0aWxsIHNldCBncGlvNDAgY29ycmVjdGx5ICovCisJaWYgKCFkZXYtPmh3X2xlYXJuaW5nX2FuZF90eF9jYXBhYmxlKSB7CisJCWVuZV9lbmFibGVfZ3BpbzQwKGRldiwgIWRldi0+aHdfZ3BpbzQwX2xlYXJuaW5nKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGVuYWJsZSBsZWFybmluZyBtb2RlICovCisJaWYgKGxlYXJuaW5nX2VuYWJsZSkgeworCQllbmVfZW5hYmxlX2dwaW80MChkZXYsIGRldi0+aHdfZ3BpbzQwX2xlYXJuaW5nKTsKKworCQkvKiBmYW4gaW5wdXQgaXMgbm90IHVzZWQgZm9yIGxlYXJuaW5nICovCisJCWlmIChkZXYtPmh3X2Zhbl9hc19ub3JtYWxfaW5wdXQpCisJCQllbmVfZW5hYmxlX2Zhbl9yZWNpZXZlKGRldiwgMCk7CisKKwkvKiBkaXNhYmxlIGxlYXJuaW5nIG1vZGUgKi8KKwl9IGVsc2UgeworCQlpZiAoZGV2LT5od19mYW5fYXNfbm9ybWFsX2lucHV0KSB7CisJCQllbmVfZW5hYmxlX2Zhbl9yZWNpZXZlKGRldiwgMSk7CisJCQllbmVfZW5hYmxlX25vcm1hbF9yZWNpZXZlKGRldiwgMCk7CisJCX0gZWxzZQorCQkJZW5lX2VuYWJsZV9ncGlvNDAoZGV2LCAhZGV2LT5od19ncGlvNDBfbGVhcm5pbmcpOworCX0KKworCS8qIHNldCBmZXcgYWRkaXRpb25hbCBzZXR0aW5ncyBmb3IgdGhpcyBtb2RlICovCisJZW5lX2h3X3dyaXRlX3JlZ19tYXNrKGRldiwgRU5FX0NJUl9DT05GMSwgbGVhcm5pbmdfZW5hYmxlID8KKwkJCSAgICAgIEVORV9DSVJfQ09ORjFfTEVBUk4xIDogMCwgRU5FX0NJUl9DT05GMV9MRUFSTjEpOworCisJZW5lX2h3X3dyaXRlX3JlZ19tYXNrKGRldiwgRU5FX0NJUl9DT05GMiwgbGVhcm5pbmdfZW5hYmxlID8KKwkJCSAgICAgIEVORV9DSVJfQ09ORjJfTEVBUk4yIDogMCwgRU5FX0NJUl9DT05GMl9MRUFSTjIpOworfQorCisvKiBkZWluaXRpYWxpemF0aW9uICovCitzdGF0aWMgdm9pZCBlbmVfaHdfZGVpbml0KHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGVuZV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZW5lX2RldmljZSAqKWRhdGE7CisKKwkvKiBkaXNhYmxlIHNhbXBsZXJzICovCisJZW5lX2VuYWJsZV9ub3JtYWxfcmVjaWV2ZShkZXYsIDApOworCisJaWYgKGRldi0+aHdfZmFuX2FzX25vcm1hbF9pbnB1dCkKKwkJZW5lX2VuYWJsZV9mYW5fcmVjaWV2ZShkZXYsIDApOworCisJLyogZGlzYWJsZSBoYXJkd2FyZSBJUlEgYW5kIGZpcm13YXJlIGZsYWcgKi8KKwllbmVfaHdfd3JpdGVfcmVnX21hc2soZGV2LCBFTkVfRlcxLCAwLCBFTkVfRlcxX0VOQUJMRSB8IEVORV9GVzFfSVJRKTsKKworCWVuZV9zZXRfaWRsZShkZXYsIDEpOworCWRldi0+aW5fdXNlID0gMDsKK30KKworLyogIHNlbmRzIGN1cnJlbnQgc2FtcGxlIHRvIHVzZXJzcGFjZSAqLworc3RhdGljIHZvaWQgc2VuZF9zYW1wbGUoc3RydWN0IGVuZV9kZXZpY2UgKmRldikKK3sKKwlpbnQgdmFsdWUgPSBhYnMoZGV2LT5zYW1wbGUpICYgUFVMU0VfTUFTSzsKKworCWlmIChkZXYtPnNhbXBsZSA+IDApCisJCXZhbHVlIHw9IFBVTFNFX0JJVDsKKworCWlmICghbGlyY19idWZmZXJfZnVsbChkZXYtPmxpcmNfZHJpdmVyLT5yYnVmKSkgeworCQlsaXJjX2J1ZmZlcl93cml0ZShkZXYtPmxpcmNfZHJpdmVyLT5yYnVmLCAodm9pZCAqKSZ2YWx1ZSk7CisJCXdha2VfdXAoJmRldi0+bGlyY19kcml2ZXItPnJidWYtPndhaXRfcG9sbCk7CisJfQorCWRldi0+c2FtcGxlID0gMDsKK30KKworLyogIHRoaXMgdXBkYXRlcyBjdXJyZW50IHNhbXBsZSAqLworc3RhdGljIHZvaWQgdXBkYXRlX3NhbXBsZShzdHJ1Y3QgZW5lX2RldmljZSAqZGV2LCBpbnQgc2FtcGxlKQoreworCWlmICghZGV2LT5zYW1wbGUpCisJCWRldi0+c2FtcGxlID0gc2FtcGxlOworCWVsc2UgaWYgKHNhbWVfc2lnbihkZXYtPnNhbXBsZSwgc2FtcGxlKSkKKwkJZGV2LT5zYW1wbGUgKz0gc2FtcGxlOworCWVsc2UgeworCQlzZW5kX3NhbXBsZShkZXYpOworCQlkZXYtPnNhbXBsZSA9IHNhbXBsZTsKKwl9Cit9CisKKy8qIGVuYWJsZSBvciBkaXNhYmxlIGlkbGUgbW9kZSAqLworc3RhdGljIHZvaWQgZW5lX3NldF9pZGxlKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYsIGludCBpZGxlKQoreworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwlpbnQgZGlzYWJsZSA9IGlkbGUgJiYgZW5hYmxlX2lkbGUgJiYgKGRldi0+aHdfcmV2aXNpb24gPCBFTkVfSFdfQyk7CisKKwllbmVfaHdfd3JpdGVfcmVnX21hc2soZGV2LCBFTkVfQ0lSX1NBTVBMRV9QRVJJT0QsCisJCQkgICAgICBkaXNhYmxlID8gMCA6IEVORV9DSVJfU0FNUExFX09WRVJGTE9XLAorCQkJICAgICAgRU5FX0NJUl9TQU1QTEVfT1ZFUkZMT1cpOworCWRldi0+aWRsZSA9IGlkbGU7CisKKwkvKiByZW1lbWJlciB3aGVuIHdlIGhhdmUgZW50ZXJlZCB0aGUgaWRsZSBtb2RlICovCisJaWYgKGlkbGUpIHsKKwkJZG9fZ2V0dGltZW9mZGF5KCZkZXYtPmdhcF9zdGFydCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBzZW5kIHRoZSBnYXAgYmV0d2VlbiBrZXlwcmVzc2VzIG5vdyAqLworCWRvX2dldHRpbWVvZmRheSgmbm93KTsKKworCWlmIChub3cudHZfc2VjIC0gZGV2LT5nYXBfc3RhcnQudHZfc2VjID4gMTYpCisJCWRldi0+c2FtcGxlID0gc3BhY2UoUFVMU0VfTUFTSyk7CisJZWxzZQorCQlkZXYtPnNhbXBsZSA9IGRldi0+c2FtcGxlICsKKwkJICAgIHNwYWNlKDEwMDAwMDB1bGwgKiAobm93LnR2X3NlYyAtIGRldi0+Z2FwX3N0YXJ0LnR2X3NlYykpCisJCSAgICArIHNwYWNlKG5vdy50dl91c2VjIC0gZGV2LT5nYXBfc3RhcnQudHZfdXNlYyk7CisKKwlpZiAoYWJzKGRldi0+c2FtcGxlKSA+IFBVTFNFX01BU0spCisJCWRldi0+c2FtcGxlID0gc3BhY2UoUFVMU0VfTUFTSyk7CisJc2VuZF9zYW1wbGUoZGV2KTsKK30KKworLyogaW50ZXJydXB0IGhhbmRsZXIgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBlbmVfaHdfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJdTE2IGh3X3ZhbHVlOworCWludCBpLCBod19zYW1wbGU7CisJaW50IHNwYWNlOworCWludCBidWZmZXJfcG9pbnRlcjsKKwlpbnQgaXJxX3N0YXR1czsKKworCXN0cnVjdCBlbmVfZGV2aWNlICpkZXYgPSAoc3RydWN0IGVuZV9kZXZpY2UgKilkYXRhOworCWlycV9zdGF0dXMgPSBlbmVfaHdfaXJxX3N0YXR1cyhkZXYsICZidWZmZXJfcG9pbnRlcik7CisKKwlpZiAoIWlycV9zdGF0dXMpCisJCXJldHVybiBJUlFfTk9ORTsKKworCS8qIFRPRE86IG9ubHkgUlggZm9yIG5vdyAqLworCWlmIChpcnFfc3RhdHVzID09IEVORV9JUlFfVFgpCisJCXJldHVybiBJUlFfSEFORExFRDsKKworCWZvciAoaSA9IDA7IGkgPCBFTkVfU0FNUExFU19TSVpFOyBpKyspIHsKKworCQlod192YWx1ZSA9IGVuZV9od19yZWFkX3JlZyhkZXYsCisJCQkJRU5FX1NBTVBMRV9CVUZGRVIgKyBidWZmZXJfcG9pbnRlciArIGkpOworCisJCWlmIChkZXYtPmZhbl9pbnB1dF9pbnVzZSkgeworCQkJLyogcmVhZCBoaWdoIHBhcnQgb2YgdGhlIHNhbXBsZSAqLworCQkJaHdfdmFsdWUgfD0gZW5lX2h3X3JlYWRfcmVnKGRldiwKKwkJCSAgICBFTkVfU0FNUExFX0JVRkZFUl9GQU4gKyBidWZmZXJfcG9pbnRlciArIGkpIDw8IDg7CisKKwkJCS8qIHRlc3QgZm9yIF9zcGFjZV8gYml0ICovCisJCQlzcGFjZSA9ICEoaHdfdmFsdWUgJiBFTkVfRkFOX1NNUExfUFVMU19NU0spOworCisJCQkvKiBjbGVhciBzcGFjZSBiaXQsIGFuZCBvdGhlciB1bnVzZWQgYml0cyAqLworCQkJaHdfdmFsdWUgJj0gRU5FX0ZBTl9WQUxVRV9NQVNLOworCQkJaHdfc2FtcGxlID0gaHdfdmFsdWUgKiBFTkVfU0FNUExFX1BFUklPRF9GQU47CisKKwkJfSBlbHNlIHsKKwkJCXNwYWNlID0gaHdfdmFsdWUgJiBFTkVfU0FNUExFX1NQQ19NQVNLOworCQkJaHdfdmFsdWUgJj0gRU5FX1NBTVBMRV9WQUxVRV9NQVNLOworCQkJaHdfc2FtcGxlID0gaHdfdmFsdWUgKiBzYW1wbGVfcGVyaW9kOworCQl9CisKKwkJLyogbm8gbW9yZSBkYXRhICovCisJCWlmICghKGh3X3ZhbHVlKSkKKwkJCWJyZWFrOworCisJCWlmIChzcGFjZSkKKwkJCWh3X3NhbXBsZSAqPSAtMTsKKworCQkvKiBvdmVyZmxvdyBzYW1wbGUgcmVjaWV2ZWQsIGhhbmRsZSBpdCAqLworCisJCWlmICghZGV2LT5mYW5faW5wdXRfaW51c2UgJiYgaHdfdmFsdWUgPT0gRU5FX1NBTVBMRV9PVkVSRkxPVykgeworCisJCQlpZiAoZGV2LT5pZGxlKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoZGV2LT5zYW1wbGUgPiAwIHx8IGFicyhkZXYtPnNhbXBsZSkgPD0gRU5FX01BWEdBUCkKKwkJCQl1cGRhdGVfc2FtcGxlKGRldiwgaHdfc2FtcGxlKTsKKwkJCWVsc2UKKwkJCQllbmVfc2V0X2lkbGUoZGV2LCAxKTsKKworCQkJY29udGludWU7CisJCX0KKworCQkvKiBub3JtYWwgZmlyc3Qgc2FtcGxlIHJlY2lldmVkICovCisJCWlmICghZGV2LT5mYW5faW5wdXRfaW51c2UgJiYgZGV2LT5pZGxlKSB7CisJCQllbmVfc2V0X2lkbGUoZGV2LCAwKTsKKworCQkJLyogZGlzY2FyZCBmaXJzdCByZWNpZXZlZCB2YWx1ZSwgaXRzIHJhbmRvbQorCQkJICAgc2luY2UgaXRzIHRoZSB0aW1lIHNpZ25hbCB3YXMgb2ZmIGJlZm9yZQorCQkJICAgZmlyc3QgcHVsc2UgaWYgaWRsZSBtb2RlIGlzIGVuYWJsZWQsIEhXCisJCQkgICBkb2VzIHRoYXQgZm9yIHVzICovCisKKwkJCWlmICghZW5hYmxlX2lkbGUpCisJCQkJY29udGludWU7CisJCX0KKwkJdXBkYXRlX3NhbXBsZShkZXYsIGh3X3NhbXBsZSk7CisJCXNlbmRfc2FtcGxlKGRldik7CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBlbmVfcHJvYmUoc3RydWN0IHBucF9kZXYgKnBucF9kZXYsCisJCSAgICAgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgZW5lX2RldmljZSAqZGV2OworCXN0cnVjdCBsaXJjX2RyaXZlciAqbGlyY19kcml2ZXI7CisJaW50IGVycm9yID0gLUVOT01FTTsKKworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBlbmVfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWRldikKKwkJZ290byBlcnIxOworCisJZGV2LT5wbnBfZGV2ID0gcG5wX2RldjsKKwlwbnBfc2V0X2RydmRhdGEocG5wX2RldiwgZGV2KTsKKworCisJLyogcHJlcGFyZSBsaXJjIGludGVyZmFjZSAqLworCWVycm9yID0gLUVOT01FTTsKKwlsaXJjX2RyaXZlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsaXJjX2RyaXZlciksIEdGUF9LRVJORUwpOworCisJaWYgKCFsaXJjX2RyaXZlcikKKwkJZ290byBlcnIyOworCisJZGV2LT5saXJjX2RyaXZlciA9IGxpcmNfZHJpdmVyOworCisJc3RyY3B5KGxpcmNfZHJpdmVyLT5uYW1lLCBFTkVfRFJJVkVSX05BTUUpOworCWxpcmNfZHJpdmVyLT5taW5vciA9IC0xOworCWxpcmNfZHJpdmVyLT5jb2RlX2xlbmd0aCA9IHNpemVvZihpbnQpICogODsKKwlsaXJjX2RyaXZlci0+ZmVhdHVyZXMgPSBMSVJDX0NBTl9SRUNfTU9ERTI7CisJbGlyY19kcml2ZXItPmRhdGEgPSBkZXY7CisJbGlyY19kcml2ZXItPnNldF91c2VfaW5jID0gZW5lX2h3X2luaXQ7CisJbGlyY19kcml2ZXItPnNldF91c2VfZGVjID0gZW5lX2h3X2RlaW5pdDsKKwlsaXJjX2RyaXZlci0+ZGV2ID0gJnBucF9kZXYtPmRldjsKKwlsaXJjX2RyaXZlci0+b3duZXIgPSBUSElTX01PRFVMRTsKKworCWxpcmNfZHJpdmVyLT5yYnVmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxpcmNfYnVmZmVyKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWxpcmNfZHJpdmVyLT5yYnVmKQorCQlnb3RvIGVycjM7CisKKwlpZiAobGlyY19idWZmZXJfaW5pdChsaXJjX2RyaXZlci0+cmJ1Ziwgc2l6ZW9mKGludCksIHNpemVvZihpbnQpICogMjU2KSkKKwkJZ290byBlcnI0OworCisJZXJyb3IgPSAtRU5PREVWOworCWlmIChsaXJjX3JlZ2lzdGVyX2RyaXZlcihsaXJjX2RyaXZlcikpCisJCWdvdG8gZXJyNTsKKworCS8qIHZhbGlkYXRlIHJlc291cmNlcyAqLworCWlmICghcG5wX3BvcnRfdmFsaWQocG5wX2RldiwgMCkgfHwKKwkgICAgcG5wX3BvcnRfbGVuKHBucF9kZXYsIDApIDwgRU5FX01BWF9JTykKKwkJZ290byBlcnI2OworCisJaWYgKCFwbnBfaXJxX3ZhbGlkKHBucF9kZXYsIDApKQorCQlnb3RvIGVycjY7CisKKwlkZXYtPmh3X2lvID0gcG5wX3BvcnRfc3RhcnQocG5wX2RldiwgMCk7CisJZGV2LT5pcnEgPSBwbnBfaXJxKHBucF9kZXYsIDApOworCisJLyogY2xhaW0gdGhlIHJlc291cmNlcyAqLworCWVycm9yID0gLUVCVVNZOworCWlmICghcmVxdWVzdF9yZWdpb24oZGV2LT5od19pbywgRU5FX01BWF9JTywgRU5FX0RSSVZFUl9OQU1FKSkKKwkJZ290byBlcnI2OworCisJaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBlbmVfaHdfaXJxLAorCQkJSVJRRl9TSEFSRUQsIEVORV9EUklWRVJfTkFNRSwgKHZvaWQgKilkZXYpKQorCQlnb3RvIGVycjc7CisKKwkvKiBkZXRlY3QgaGFyZHdhcmUgdmVyc2lvbiBhbmQgZmVhdHVyZXMgKi8KKwllcnJvciA9IGVuZV9od19kZXRlY3QoZGV2KTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXJyODsKKworCWVuZV9wcmludGsoS0VSTl9OT1RJQ0UsICJkcml2ZXIgaGFzIGJlZW4gc3VjY2VzZnVsbHkgbG9hZGVkXG4iKTsKKwlyZXR1cm4gMDsKKworZXJyODoKKwlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKK2Vycjc6CisJcmVsZWFzZV9yZWdpb24oZGV2LT5od19pbywgRU5FX01BWF9JTyk7CitlcnI2OgorCWxpcmNfdW5yZWdpc3Rlcl9kcml2ZXIobGlyY19kcml2ZXItPm1pbm9yKTsKK2VycjU6CisJbGlyY19idWZmZXJfZnJlZShsaXJjX2RyaXZlci0+cmJ1Zik7CitlcnI0OgorCWtmcmVlKGxpcmNfZHJpdmVyLT5yYnVmKTsKK2VycjM6CisJa2ZyZWUobGlyY19kcml2ZXIpOworZXJyMjoKKwlrZnJlZShkZXYpOworZXJyMToKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkIGVuZV9yZW1vdmUoc3RydWN0IHBucF9kZXYgKnBucF9kZXYpCit7CisJc3RydWN0IGVuZV9kZXZpY2UgKmRldiA9IHBucF9nZXRfZHJ2ZGF0YShwbnBfZGV2KTsKKwllbmVfaHdfZGVpbml0KGRldik7CisJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJcmVsZWFzZV9yZWdpb24oZGV2LT5od19pbywgRU5FX01BWF9JTyk7CisJbGlyY191bnJlZ2lzdGVyX2RyaXZlcihkZXYtPmxpcmNfZHJpdmVyLT5taW5vcik7CisJbGlyY19idWZmZXJfZnJlZShkZXYtPmxpcmNfZHJpdmVyLT5yYnVmKTsKKwlrZnJlZShkZXYtPmxpcmNfZHJpdmVyKTsKKwlrZnJlZShkZXYpOworfQorCisjaWZkZWYgQ09ORklHX1BNCisKKy8qIFRPRE86IG1ha2UgJ3dha2Ugb24gSVInIGNvbmZpZ3VyYWJsZSBhbmQgYWRkIC5zaHV0ZG93biAqLworLyogY3VycmVudGx5IGltcG9zc2libGUgZHVlIHRvIGxhY2sgb2Yga2VybmVsIHN1cHBvcnQgKi8KKworc3RhdGljIGludCBlbmVfc3VzcGVuZChzdHJ1Y3QgcG5wX2RldiAqcG5wX2RldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBlbmVfZGV2aWNlICpkZXYgPSBwbnBfZ2V0X2RydmRhdGEocG5wX2Rldik7CisJZW5lX2h3X3dyaXRlX3JlZ19tYXNrKGRldiwgRU5FX0ZXMSwgRU5FX0ZXMV9XQUtFLCBFTkVfRlcxX1dBS0UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVuZV9yZXN1bWUoc3RydWN0IHBucF9kZXYgKnBucF9kZXYpCit7CisJc3RydWN0IGVuZV9kZXZpY2UgKmRldiA9IHBucF9nZXRfZHJ2ZGF0YShwbnBfZGV2KTsKKwlpZiAoZGV2LT5pbl91c2UpCisJCWVuZV9od19pbml0KGRldik7CisKKwllbmVfaHdfd3JpdGVfcmVnX21hc2soZGV2LCBFTkVfRlcxLCAwLCBFTkVfRlcxX1dBS0UpOworCXJldHVybiAwOworfQorCisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkIGVuZV9pZHNbXSA9IHsKKwl7LmlkID0gIkVORTAxMDAiLH0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IHBucF9kcml2ZXIgZW5lX2RyaXZlciA9IHsKKwkubmFtZSA9IEVORV9EUklWRVJfTkFNRSwKKwkuaWRfdGFibGUgPSBlbmVfaWRzLAorCS5mbGFncyA9IFBOUF9EUklWRVJfUkVTX0RPX05PVF9DSEFOR0UsCisKKwkucHJvYmUgPSBlbmVfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGVuZV9yZW1vdmUpLAorCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBlbmVfc3VzcGVuZCwKKwkucmVzdW1lID0gZW5lX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBfX2luaXQgZW5lX2luaXQodm9pZCkKK3sKKwlpZiAoc2FtcGxlX3BlcmlvZCA8IDUpIHsKKwkJZW5lX3ByaW50ayhLRVJOX0VSUiwgInNhbXBsZSBwZXJpb2QgbXVzdCBiZSBhdFxuIik7CisJCWVuZV9wcmludGsoS0VSTl9FUlIsICJsZWFzdCA1IHVzLCAoYXQgbGVhc3QgMzAgcmVjb21tZW5kZWQpXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiBwbnBfcmVnaXN0ZXJfZHJpdmVyKCZlbmVfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgZW5lX2V4aXQodm9pZCkKK3sKKwlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIoJmVuZV9kcml2ZXIpOworfQorCittb2R1bGVfcGFyYW0oc2FtcGxlX3BlcmlvZCwgaW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0Moc2FtcGxlX3BlcmlvZCwgIkhhcmR3YXJlIHNhbXBsZSBwZXJpb2QgKDc1IHVzIGRlZmF1bHQpIik7CisKK21vZHVsZV9wYXJhbShlbmFibGVfaWRsZSwgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhlbmFibGVfaWRsZSwKKwkiRW5hYmxlcyB0dXJuaW5nIG9mZiBzaWduYWwgc2FtcGxpbmcgYWZ0ZXIgbG9uZyBpbmFjdGl2aXR5IHRpbWU7ICIKKwkiaWYgZGlzYWJsZWQgbWlnaHQgaGVscCBkZXRlY3RpbmcgaW5wdXQgc2lnbmFsIChkZWZhdWx0OiBlbmFibGVkKSIpOworCittb2R1bGVfcGFyYW0oZW5hYmxlX2xlYXJuaW5nLCBib29sLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlX2xlYXJuaW5nLCAiVXNlIHdpZGUgYmFuZCAobGVhcm5pbmcpIHJlY2lldmVyIik7CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocG5wLCBlbmVfaWRzKTsKK01PRFVMRV9ERVNDUklQVElPTgorICAgICgiTElSQyBkcml2ZXIgZm9yIEtCMzkyNkIvS0IzOTI2Qy9LQjM5MjZEIChha2EgRU5FMDEwMCkgQ0lSIHBvcnQiKTsKK01PRFVMRV9BVVRIT1IoIk1heGltIExldml0c2t5Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KGVuZV9pbml0KTsKK21vZHVsZV9leGl0KGVuZV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfZW5lMDEwMC5oIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19lbmUwMTAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc2YjY5MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfZW5lMDEwMC5oCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogZHJpdmVyIGZvciBFTkUgS0IzOTI2IEIvQy9EIENJUiAoYWxzbyBrbm93biBhcyBFTkUwMTAwKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbSBMZXZpdHNreSA8bWF4aW1sZXZpdHNreUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICogVVNBCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL2xpcmMuaD4KKyNpbmNsdWRlIDxtZWRpYS9saXJjX2Rldi5oPgorCisvKiBoYXJkd2FyZSBhZGRyZXNzICovCisjZGVmaW5lIEVORV9TVEFUVVMJCTAJIC8qIGhhcmR3YXJlIHN0YXR1cyAtIHVudXNlZCAqLworI2RlZmluZSBFTkVfQUREUl9ISQkJMQkgLyogaGkgYnl0ZSBvZiByZWdpc3RlciBhZGRyZXNzICovCisjZGVmaW5lIEVORV9BRERSX0xPCQkyCSAvKiBsb3cgYnl0ZSBvZiByZWdpc3RlciBhZGRyZXNzICovCisjZGVmaW5lIEVORV9JTwkJCTMJIC8qIHJlYWQvd3JpdGUgd2luZG93ICovCisjZGVmaW5lIEVORV9NQVhfSU8JCTQKKworLyogOCBieXRlcyBvZiBzYW1wbGVzLCBkaXZpZGVkIGluIDIgaGFsZnMqLworI2RlZmluZSBFTkVfU0FNUExFX0JVRkZFUgkweEY4RjAJIC8qIHJlZ3VsYXIgc2FtcGxlIGJ1ZmZlciAqLworI2RlZmluZSBFTkVfU0FNUExFX1NQQ19NQVNLCSgxIDw8IDcpIC8qIHNhbXBsZSBpcyBzcGFjZSAqLworI2RlZmluZSBFTkVfU0FNUExFX1ZBTFVFX01BU0sJMHg3RgorI2RlZmluZSBFTkVfU0FNUExFX09WRVJGTE9XCTB4N0YKKyNkZWZpbmUgRU5FX1NBTVBMRVNfU0laRQk0CisKKy8qIGZhbiBpbnB1dCBzYW1wbGUgYnVmZmVyICovCisjZGVmaW5lIEVORV9TQU1QTEVfQlVGRkVSX0ZBTgkweEY4RkIJIC8qIHRoaXMgYnVmZmVyIGhvbGRzIGhpZ2ggYnl0ZSBvZiAqLworCQkJCQkgLyogZWFjaCBzYW1wbGUgb2Ygbm9ybWFsIGJ1ZmZlciAqLworCisjZGVmaW5lIEVORV9GQU5fU01QTF9QVUxTX01TSwkweDgwMDAJIC8qIHRoaXMgYml0IG9mIGNvbWJpbmVkIHNhbXBsZSAqLworCQkJCQkgLyogaWYgc2V0LCBzYXlzIHRoYXQgc2FtcGxlIGlzIHB1bHNlICovCisjZGVmaW5lIEVORV9GQU5fVkFMVUVfTUFTSwkweDBGRkYgICAvKiBtYXNrIGZvciB2YWxpZCBiaXRzIG9mIHRoZSB2YWx1ZSAqLworCisvKiBmaXJzdCBmaXJtd2FyZSByZWdpc3RlciAqLworI2RlZmluZSBFTkVfRlcxCQkJMHhGOEY4CisjZGVmaW5lCUVORV9GVzFfRU5BQkxFCQkoMSA8PCAwKSAvKiBlbmFibGUgZncgcHJvY2Vzc2luZyAqLworI2RlZmluZSBFTkVfRlcxX1RYSVJRCQkoMSA8PCAxKSAvKiBUWCBpbnRlcnJ1cHQgcGVuZGluZyAqLworI2RlZmluZSBFTkVfRlcxX1dBS0UJCSgxIDw8IDYpIC8qIGVuYWJsZSB3YWtlIGZyb20gUzMgKi8KKyNkZWZpbmUgRU5FX0ZXMV9JUlEJCSgxIDw8IDcpIC8qIGVuYWJsZSBpbnRlcnJ1cHQgKi8KKworLyogc2Vjb25kIGZpcm13YXJlIHJlZ2lzdGVyICovCisjZGVmaW5lIEVORV9GVzIJCQkweEY4RjkKKyNkZWZpbmUgRU5FX0ZXMl9CVUZfSElHSAkoMSA8PCAwKSAvKiB3aGljaCBoYWxmIG9mIHRoZSBidWZmZXIgdG8gcmVhZCAqLworI2RlZmluZSBFTkVfRlcyX0lSUV9DTFIJCSgxIDw8IDIpIC8qIGNsZWFyIHRoaXMgb24gSVJRICovCisjZGVmaW5lIEVORV9GVzJfR1A0MF9BU19MRUFSTgkoMSA8PCA0KSAvKiBub3JtYWwgaW5wdXQgaXMgdXNlZCBhcyAqLworCQkJCQkgLyogbGVhcm5pbmcgaW5wdXQgKi8KKyNkZWZpbmUgRU5FX0ZXMl9GQU5fQVNfTlJNTF9JTgkoMSA8PCA2KSAvKiBmYW4gaXMgdXNlZCBhcyBub3JtYWwgaW5wdXQgKi8KKyNkZWZpbmUgRU5FX0ZXMl9MRUFSTklORwkoMSA8PCA3KSAvKiBoYXJkd2FyZSBzdXBwb3J0cyBsZWFybmluZyBhbmQgVFggKi8KKworLyogZmFuIGFzIGlucHV0IHNldHRpbmdzIC0gb25seSBpZiBsZWFybmluZyBjYXBhYmxlICovCisjZGVmaW5lIEVORV9GQU5fQVNfSU4xCQkweEZFMzAgICAvKiBmYW4gaW5pdCByZWcgMSAqLworI2RlZmluZSBFTkVfRkFOX0FTX0lOMV9FTgkweENECisjZGVmaW5lIEVORV9GQU5fQVNfSU4yCQkweEZFMzEgICAvKiBmYW4gaW5pdCByZWcgMiAqLworI2RlZmluZSBFTkVfRkFOX0FTX0lOMl9FTgkweDAzCisjZGVmaW5lIEVORV9TQU1QTEVfUEVSSU9EX0ZBTiAgIDYxCSAvKiBmYW4gaW5wdXQgaGFzIGZpeGVkIHNhbXBsZSBwZXJpb2QgKi8KKworLyogSVJRIHJlZ2lzdGVycyBibG9jayAoZm9yIHJldmlzaW9uIEIpICovCisjZGVmaW5lIEVORUJfSVJRCQkweEZEMDkJIC8qIElSUSBudW1iZXIgKi8KKyNkZWZpbmUgRU5FQl9JUlFfVU5LMQkJMHhGRDE3CSAvKiB1bmtub3duIHNldHRpbmcgPSAxICovCisjZGVmaW5lIEVORUJfSVJRX1NUQVRVUwkJMHhGRDgwCSAvKiBpcnEgc3RhdHVzICovCisjZGVmaW5lIEVORUJfSVJRX1NUQVRVU19JUgkoMSA8PCA1KSAvKiBJUiBpcnEgKi8KKworLyogSVJRIHJlZ2lzdGVycyBibG9jayAoZm9yIHJldmlzaW9uIEMsRCkgKi8KKyNkZWZpbmUgRU5FQ19JUlEJCTB4RkU5QgkgLyogbmV3IGlycSBzZXR0aW5ncyByZWdpc3RlciAqLworI2RlZmluZSBFTkVDX0lSUV9NQVNLCQkweDBGCSAvKiBpcnEgbnVtYmVyIG1hc2sgKi8KKyNkZWZpbmUgRU5FQ19JUlFfVU5LX0VOCQkoMSA8PCA0KSAvKiBhbHdheXMgZW5hYmxlZCAqLworI2RlZmluZSBFTkVDX0lSUV9TVEFUVVMJCSgxIDw8IDUpIC8qIGlycSBzdGF0dXMgYW5kIEFDSyAqLworCisvKiBDSVIgYmxvY2sgc2V0dGluZ3MgKi8KKyNkZWZpbmUgRU5FX0NJUl9DT05GMQkJMHhGRUMwCisjZGVmaW5lIEVORV9DSVJfQ09ORjFfQURDX09OCTB4NwkgLyogcmVjaWV2ZXIgb24gZ3BpbzQwIGVuYWJsZWQgKi8KKyNkZWZpbmUgRU5FX0NJUl9DT05GMV9MRUFSTjEJKDEgPDwgMykgLyogZW5hYmxlZCBvbiBsZWFybmluZyBtb2RlICovCisjZGVmaW5lIEVORV9DSVJfQ09ORjFfVFhfT04JMHgzMAkgLyogZW5hYmxlZCBvbiB0cmFuc21pdCAqLworI2RlZmluZSBFTkVfQ0lSX0NPTkYxX1RYX0NBUlIJKDEgPDwgNykgLyogc2VuZCBUWCBjYXJyaWVyIG9yIG5vdCAqLworCisjZGVmaW5lIEVORV9DSVJfQ09ORjIJCTB4RkVDMQkgLyogdW5rbm93biBzZXR0aW5nID0gMCAqLworI2RlZmluZSBFTkVfQ0lSX0NPTkYyX0xFQVJOMgkoMSA8PCA0KSAvKiBzZXQgb24gZW5hYmxlIGxlYXJuaW5nICovCisjZGVmaW5lIEVORV9DSVJfQ09ORjJfR1BJTzQwRElTCSgxIDw8IDUpIC8qIGRpc2FibGUgbm9ybWFsIGlucHV0IHZpYSBncGlvNDAgKi8KKworI2RlZmluZSBFTkVfQ0lSX1NBTVBMRV9QRVJJT0QJMHhGRUM4CSAvKiBzYW1wbGUgcGVyaW9kIGluIHVzICovCisjZGVmaW5lIEVORV9DSVJfU0FNUExFX09WRVJGTE9XCSgxIDw8IDcpIC8qIGludGVycnVwdCBvbiBvdmVyZmxvd3MgaWYgc2V0ICovCisKKworLyogdHJhbnNtaXR0ZXIgLSBub3QgaW1wbGVtZW50ZWQgeWV0ICovCisvKiBLQjM5MjZDIGFuZCBoaWdoZXIgKi8KKy8qIHRyYW5zbWlzc2lvbiBpcyB2ZXJ5IHNpbWlsaWFyIHRvIHJlY2lldmluZywgYSBieXRlIGlzIHdyaXR0ZW4gdG8gKi8KKy8qIEVORV9UWF9JTlBVVCwgaW4gc2FtZSBtYW5uZXIgYXMgaXQgaXMgcmVhZCBmcm9tIHNhbXBsZSBidWZmZXIgKi8KKy8qIHNhbXBsZSBwZXJpb2QgaXMgZml4ZWQqLworCisKKy8qIHRyYW5zbWl0dGVyIHBvcnRzICovCisjZGVmaW5lIEVORV9UWF9QT1JUMQkJMHhGQzAxCSAvKiB0aGlzIGVuYWJsZXMgb25lIG9yIGJvdGggKi8KKyNkZWZpbmUgRU5FX1RYX1BPUlQxX0VOCQkoMSA8PCA1KSAvKiBUWCBwb3J0cyAqLworI2RlZmluZSBFTkVfVFhfUE9SVDIJCTB4RkMwOAorI2RlZmluZSBFTkVfVFhfUE9SVDJfRU4JCSgxIDw8IDEpCisKKyNkZWZpbmUgRU5FX1RYX0lOUFVUCQkweEZFQzkJIC8qIG5leHQgYnl0ZSB0byB0cmFuc21pdCAqLworI2RlZmluZSBFTkVfVFhfU1BDX01BU0sJCSgxIDw8IDcpIC8qIFRyYW5zbWl0dGVkIHNhbXBsZSBpcyBzcGFjZSAqLworI2RlZmluZSBFTkVfVFhfVU5LMQkJMHhGRUNCCSAvKiBzZXQgdG8gMHg2MyAqLworI2RlZmluZSBFTkVfVFhfU01QTF9QRVJJT0QJNTAJIC8qIHRyYW5zbWl0IHNhbXBsZSBwZXJpb2QgKi8KKworCisjZGVmaW5lIEVORV9UWF9DQVJSSUVSCQkweEZFQ0UJIC8qIFRYIGNhcnJpZXIgKiAyIChraHopICovCisjZGVmaW5lIEVORV9UWF9DQVJSSUVSX1VOS0JJVAkweDgwCSAvKiBUaGlzIGJpdCBzZXQgb24gdHJhbnNtaXQgKi8KKyNkZWZpbmUgRU5FX1RYX0NBUlJJRVJfTE9XCTB4RkVDRgkgLyogVFggY2FycmllciAvIDIgKi8KKworLyogSGFyZHdhcmUgdmVyc2lvbnMgKi8KKyNkZWZpbmUgRU5FX0hXX1ZFUlNJT04JCTB4RkYwMAkgLyogaGFyZHdhcmUgcmV2aXNpb24gKi8KKyNkZWZpbmUgRU5FX0hXX1VOSwkJMHhGRjFECisjZGVmaW5lIEVORV9IV19VTktfQ0xSCQkoMSA8PCAyKQorI2RlZmluZSBFTkVfSFdfVkVSX01BSk9SCTB4RkYxRQkgLyogY2hpcCB2ZXJzaW9uICovCisjZGVmaW5lIEVORV9IV19WRVJfTUlOT1IJMHhGRjFGCisjZGVmaW5lIEVORV9IV19WRVJfT0xECQkweEZEMDAKKworI2RlZmluZSBzYW1lX3NpZ24oYSwgYikgKCgoKGEpID4gMCkgJiYgKGIpID4gMCkgfHwgKChhKSA8IDAgJiYgKGIpIDwgMCkpCisKKyNkZWZpbmUgRU5FX0RSSVZFUl9OQU1FCQkiZW5lY2lyIgorI2RlZmluZSBFTkVfTUFYR0FQCQkyNTAwMDAJIC8qIHRoaXMgaXMgYW1vdW50IG9mIHRpbWUgd2Ugd2FpdAorCQkJCQkgYmVmb3JlIHR1cm5pbmcgdGhlIHNhbXBsZXIsIGNob3NlbgorCQkJCQkgYXJiaXRyeSAqLworCisjZGVmaW5lIHNwYWNlKGxlbikJICAgICAgICgtKGxlbikpCSAvKiBhZGQgYSBzcGFjZSAqLworCisvKiBzb2Z0d2FyZSBkZWZpbmVzICovCisjZGVmaW5lIEVORV9JUlFfUlgJCTEKKyNkZWZpbmUgRU5FX0lSUV9UWAkJMgorCisjZGVmaW5lICBFTkVfSFdfQgkJMQkvKiAzOTI2QiAqLworI2RlZmluZSAgRU5FX0hXX0MJCTIJLyogMzkyNkMgKi8KKyNkZWZpbmUgIEVORV9IV19ECQkzCS8qIDM5MjZEICovCisKKyNkZWZpbmUgZW5lX3ByaW50ayhsZXZlbCwgdGV4dCwgLi4uKSBcCisJcHJpbnRrKGxldmVsIEVORV9EUklWRVJfTkFNRSAiOiAiIHRleHQsICMjIF9fVkFfQVJHU19fKQorCitzdHJ1Y3QgZW5lX2RldmljZSB7CisJc3RydWN0IHBucF9kZXYgKnBucF9kZXY7CisJc3RydWN0IGxpcmNfZHJpdmVyICpsaXJjX2RyaXZlcjsKKworCS8qIGh3IHNldHRpbmdzICovCisJdW5zaWduZWQgbG9uZyBod19pbzsKKwlpbnQgaXJxOworCisJaW50IGh3X3JldmlzaW9uOwkJCS8qIGhhcmR3YXJlIHJldmlzaW9uICovCisJaW50IGh3X2xlYXJuaW5nX2FuZF90eF9jYXBhYmxlOwkJLyogbGVhcm5pbmcgY2FwYWJsZSAqLworCWludCBod19ncGlvNDBfbGVhcm5pbmc7CQkJLyogZ3BpbzQwIGlzIGxlYXJuaW5nICovCisJaW50IGh3X2Zhbl9hc19ub3JtYWxfaW5wdXQ7CS8qIGZhbiBpbnB1dCBpcyB1c2VkIGFzIHJlZ3VsYXIgaW5wdXQgKi8KKworCS8qIGRldmljZSBkYXRhICovCisJaW50IGlkbGU7CisJaW50IGZhbl9pbnB1dF9pbnVzZTsKKworCWludCBzYW1wbGU7CisJaW50IGluX3VzZTsKKworCXN0cnVjdCB0aW1ldmFsIGdhcF9zdGFydDsKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX2kyYy5jIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGYyYzBlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19pMmMuYwpAQCAtMCwwICsxLDUzNiBAQAorLyoKKyAqIGxpcmNfaTJjLmMKKyAqCisgKiBpMmMgSVIgZHJpdmVyIGZvciB0aGUgb25ib2FyZCBJUiBwb3J0IG9uIG1hbnkgVFYgdHVuZXIgY2FyZHMsIGluY2x1ZGluZzoKKyAqICAtRmxhdm9ycyBvZiB0aGUgSGF1cHBhdWdlIFBWUi0xNTAvMjUwLzM1MAorICogIC1IYXVwcGF1Z2UgSFZSLTEzMDAKKyAqICAtUGl4ZWxWaWV3IChCVDg3OFArVy9GTSkKKyAqICAtS05DIE9ORSBUViBTdGF0aW9uL0FudWJpcyBUeXBob29uIFRWaWV3IFR1bmVyCisgKiAgLUFzdXMgVFYtQm94IGFuZCBDcmVhdGl2ZS9WaXNpb25UZWsgQnJlYWtPdXQtQm94CisgKiAgLUxlYWR0ZWsgV2luZmFzdCBQVlIyMDAwCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwIEdlcmQgS25vcnIgPGtyYXhlbEBnb2xkYmFjaC5pbi1iZXJsaW4uZGU+CisgKiBtb2RpZmllZCBmb3IgUGl4ZWxWaWV3IChCVDg3OFArVy9GTSkgYnkKKyAqICAgICAgTWljaGFsIEtvY2hhbm93aWN6IDxta29jaGFub0BwbGQub3JnLnBsPgorICogICAgICBDaHJpc3RvcGggQmFydGVsbXVzIDxsaXJjQGJhcnRlbG11cy5kZT4KKyAqIG1vZGlmaWVkIGZvciBLTkMgT05FIFRWIFN0YXRpb24vQW51YmlzIFR5cGhvb24gVFZpZXcgVHVuZXIgYnkKKyAqICAgICAgVWxyaWNoIE11ZWxsZXIgPHVscmljaC5tdWVsbGVyNDJAd2ViLmRlPgorICogbW9kaWZpZWQgZm9yIEFzdXMgVFYtQm94IGFuZCBDcmVhdGl2ZS9WaXNpb25UZWsgQnJlYWtPdXQtQm94IGJ5CisgKiAgICAgIFN0ZWZhbiBKYWhuIDxzdGVmYW5AbGtjYy5vcmc+CisgKiBtb2RpZmllZCBmb3IgaW5jbHVzaW9uIGludG8ga2VybmVsIHNvdXJjZXMgYnkKKyAqICAgICAgSmVyb21lIEJyb2NrIDxqYnJvY2tAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogbW9kaWZpZWQgZm9yIExlYWR0ZWsgV2luZmFzdCBQVlIyMDAwIGJ5CisgKiAgICAgIFRob21hcyBSZWl0bWF5ciAodHJlaXRtYXlyQHlhaG9vLmNvbSkKKyAqIG1vZGlmaWVkIGZvciBIYXVwcGF1Z2UgSFZSLTEzMDAgYnkKKyAqICAgICAgSmFuIEZyZXkgKGpmcmV5QGdteC5kZSkKKyAqCisgKiBwYXJ0cyBhcmUgY3V0JnBhc3RlZCBmcm9tIHRoZSBvbGQgbGlyY19oYXVwLmMgZHJpdmVyCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KKworI2luY2x1ZGUgPG1lZGlhL2xpcmNfZGV2Lmg+CisKK3N0cnVjdCBJUiB7CisJc3RydWN0IGxpcmNfZHJpdmVyIGw7CisJc3RydWN0IGkyY19jbGllbnQgIGM7CisJaW50IG5leHRrZXk7CisJdW5zaWduZWQgY2hhciBiWzNdOworCXVuc2lnbmVkIGNoYXIgYml0czsKKwl1bnNpZ25lZCBjaGFyIGZsYWc7Cit9OworCisjZGVmaW5lIERFVklDRV9OQU1FICJsaXJjX2kyYyIKKworLyogbW9kdWxlIHBhcmFtZXRlcnMgKi8KK3N0YXRpYyBpbnQgZGVidWc7CS8qIGRlYnVnIG91dHB1dCAqLworc3RhdGljIGludCBtaW5vciA9IC0xOwkvKiBtaW5vciBudW1iZXIgKi8KKworI2RlZmluZSBkcHJpbnRrKGZtdCwgYXJncy4uLikJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAoZGVidWcpCQkJCQkJXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgREVWSUNFX05BTUUgIjogIiBmbXQsCQlcCisJCQkgICAgICAgIyMgYXJncyk7CQkJCVwKKwl9IHdoaWxlICgwKQorCitzdGF0aWMgaW50IHJldmVyc2UoaW50IGRhdGEsIGludCBiaXRzKQoreworCWludCBpOworCWludCBjOworCisJZm9yIChjID0gMCwgaSA9IDA7IGkgPCBiaXRzOyBpKyspCisJCWMgfD0gKChkYXRhICYgKDE8PGkpKSA/IDEgOiAwKSA8PCAoYml0cy0xLWkpOworCisJcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBpbnQgYWRkX3RvX2J1Zl9hZGFwKHZvaWQgKmRhdGEsIHN0cnVjdCBsaXJjX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBJUiAqaXIgPSBkYXRhOworCXVuc2lnbmVkIGNoYXIga2V5YnVmWzRdOworCisJa2V5YnVmWzBdID0gMHgwMDsKKwlpMmNfbWFzdGVyX3NlbmQoJmlyLT5jLCBrZXlidWYsIDEpOworCS8qIHBvbGwgSVIgY2hpcCAqLworCWlmIChpMmNfbWFzdGVyX3JlY3YoJmlyLT5jLCBrZXlidWYsIHNpemVvZihrZXlidWYpKSAhPSBzaXplb2Yoa2V5YnVmKSkgeworCQlkcHJpbnRrKCJyZWFkIGVycm9yXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZHByaW50aygia2V5ICgweCUwMnglMDJ4JTAyeCUwMngpXG4iLAorCQlrZXlidWZbMF0sIGtleWJ1ZlsxXSwga2V5YnVmWzJdLCBrZXlidWZbM10pOworCisJLyoga2V5IHByZXNzZWQgPyAqLworCWlmIChrZXlidWZbMl0gPT0gMHhmZikKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJLyogcmVtb3ZlIHJlcGVhdCBiaXQgKi8KKwlrZXlidWZbMl0gJj0gMHg3ZjsKKwlrZXlidWZbM10gfD0gMHg4MDsKKworCWxpcmNfYnVmZmVyX3dyaXRlKGJ1Ziwga2V5YnVmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZGRfdG9fYnVmX3BjZjg1NzQodm9pZCAqZGF0YSwgc3RydWN0IGxpcmNfYnVmZmVyICpidWYpCit7CisJc3RydWN0IElSICppciA9IGRhdGE7CisJaW50IHJjOworCXVuc2lnbmVkIGNoYXIgYWxsLCBtYXNrOworCXVuc2lnbmVkIGNoYXIga2V5OworCisJLyogY29tcHV0ZSBhbGwgdmFsaWQgYml0cyAoa2V5IGNvZGUgKyBwcmVzc2VkL3JlbGVhc2UgZmxhZykgKi8KKwlhbGwgPSBpci0+Yml0cyB8IGlyLT5mbGFnOworCisJLyogc2F2ZSBJUiB3cml0YWJsZSBtYXNrIGJpdHMgKi8KKwltYXNrID0gaTJjX3NtYnVzX3JlYWRfYnl0ZSgmaXItPmMpICYgfmFsbDsKKworCS8qIHNlbmQgYml0IG1hc2sgKi8KKwlyYyA9IGkyY19zbWJ1c193cml0ZV9ieXRlKCZpci0+YywgKDB4ZmYgJiBhbGwpIHwgbWFzayk7CisKKwkvKiByZWNlaXZlIHNjYW4gY29kZSAqLworCXJjID0gaTJjX3NtYnVzX3JlYWRfYnl0ZSgmaXItPmMpOworCisJaWYgKHJjID09IC0xKSB7CisJCWRwcmludGsoIiVzIHJlYWQgZXJyb3JcbiIsIGlyLT5jLm5hbWUpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBkcm9wIGR1cGxpY2F0ZSBwb2xscyAqLworCWlmIChpci0+YlswXSA9PSAocmMgJiBhbGwpKQorCQlyZXR1cm4gLUVOT0RBVEE7CisKKwlpci0+YlswXSA9IHJjICYgYWxsOworCisJZHByaW50aygiJXMga2V5IDB4JTAyWCAlc1xuIiwgaXItPmMubmFtZSwgcmMgJiBpci0+Yml0cywKKwkJKHJjICYgaXItPmZsYWcpID8gInJlbGVhc2VkIiA6ICJwcmVzc2VkIik7CisKKwkvKiBpZ25vcmUgcmVsZWFzZWQgYnV0dG9ucyAqLworCWlmIChyYyAmIGlyLT5mbGFnKQorCQlyZXR1cm4gLUVOT0RBVEE7CisKKwkvKiBzZXQgdmFsaWQga2V5IGNvZGUgKi8KKwlrZXkgID0gcmMgJiBpci0+Yml0czsKKwlsaXJjX2J1ZmZlcl93cml0ZShidWYsICZrZXkpOworCXJldHVybiAwOworfQorCisvKiBjb21tb24gZm9yIEhhdXBwYXVnZSBJUiByZWNlaXZlcnMgKi8KK3N0YXRpYyBpbnQgYWRkX3RvX2J1Zl9oYXVwX2NvbW1vbih2b2lkICpkYXRhLCBzdHJ1Y3QgbGlyY19idWZmZXIgKmJ1ZiwKKwkJdW5zaWduZWQgY2hhciAqa2V5YnVmLCBpbnQgc2l6ZSwgaW50IG9mZnNldCkKK3sKKwlzdHJ1Y3QgSVIgKmlyID0gZGF0YTsKKwlfX3UxNiBjb2RlOworCXVuc2lnbmVkIGNoYXIgY29kZXNbMl07CisJaW50IHJldDsKKworCS8qIHBvbGwgSVIgY2hpcCAqLworCXJldCA9IGkyY19tYXN0ZXJfcmVjdigmaXItPmMsIGtleWJ1Ziwgc2l6ZSk7CisJaWYgKHJldCA9PSBzaXplKSB7CisJCWlyLT5iWzBdID0ga2V5YnVmW29mZnNldF07CisJCWlyLT5iWzFdID0ga2V5YnVmW29mZnNldCsxXTsKKwkJaXItPmJbMl0gPSBrZXlidWZbb2Zmc2V0KzJdOworCQlpZiAoaXItPmJbMF0gIT0gMHgwMCAmJiBpci0+YlsxXSAhPSAweDAwKQorCQkJZHByaW50aygia2V5ICgweCUwMngvMHglMDJ4KVxuIiwgaXItPmJbMF0sIGlyLT5iWzFdKTsKKwl9IGVsc2UgeworCQlkcHJpbnRrKCJyZWFkIGVycm9yIChyZXQ9JWQpXG4iLCByZXQpOworCQkvKiBrZWVwIGxhc3Qgc3VjY2Vzc2Z1bCByZWFkIGJ1ZmZlciAqLworCX0KKworCS8qIGtleSBwcmVzc2VkID8gKi8KKwlpZiAoKGlyLT5iWzBdICYgMHg4MCkgPT0gMCkKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJLyogbG9vayB3aGF0IHdlIGhhdmUgKi8KKwljb2RlID0gKCgoX191MTYpaXItPmJbMF0mMHg3Zik8PDYpIHwgKGlyLT5iWzFdPj4yKTsKKworCWNvZGVzWzBdID0gKGNvZGUgPj4gOCkgJiAweGZmOworCWNvZGVzWzFdID0gY29kZSAmIDB4ZmY7CisKKwkvKiByZXR1cm4gaXQgKi8KKwlkcHJpbnRrKCJzZW5kaW5nIGNvZGUgMHglMDJ4JTAyeCB0byBsaXJjXG4iLCBjb2Rlc1swXSwgY29kZXNbMV0pOworCWxpcmNfYnVmZmVyX3dyaXRlKGJ1ZiwgY29kZXMpOworCXJldHVybiAwOworfQorCisvKiBzcGVjaWZpYyBmb3IgdGhlIEhhdXBwYXVnZSBQVlIxNTAgSVIgcmVjZWl2ZXIgKi8KK3N0YXRpYyBpbnQgYWRkX3RvX2J1Zl9oYXVwX3B2cjE1MCh2b2lkICpkYXRhLCBzdHJ1Y3QgbGlyY19idWZmZXIgKmJ1ZikKK3sKKwl1bnNpZ25lZCBjaGFyIGtleWJ1Zls2XTsKKwkvKiBmZXRjaCA2IGJ5dGVzLCBmaXJzdCByZWxldmFudCBpcyBhdCBvZmZzZXQgMyAqLworCXJldHVybiBhZGRfdG9fYnVmX2hhdXBfY29tbW9uKGRhdGEsIGJ1Ziwga2V5YnVmLCA2LCAzKTsKK30KKworLyogdXNlZCBmb3IgYWxsIEhhdXBwYXVnZSBJUiByZWNlaXZlcnMgYnV0IHRoZSBQVlIxNTAgKi8KK3N0YXRpYyBpbnQgYWRkX3RvX2J1Zl9oYXVwKHZvaWQgKmRhdGEsIHN0cnVjdCBsaXJjX2J1ZmZlciAqYnVmKQoreworCXVuc2lnbmVkIGNoYXIga2V5YnVmWzNdOworCS8qIGZldGNoIDMgYnl0ZXMsIGZpcnN0IHJlbGV2YW50IGlzIGF0IG9mZnNldCAwICovCisJcmV0dXJuIGFkZF90b19idWZfaGF1cF9jb21tb24oZGF0YSwgYnVmLCBrZXlidWYsIDMsIDApOworfQorCisKK3N0YXRpYyBpbnQgYWRkX3RvX2J1Zl9wdnIyMDAwKHZvaWQgKmRhdGEsIHN0cnVjdCBsaXJjX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBJUiAqaXIgPSBkYXRhOworCXVuc2lnbmVkIGNoYXIga2V5OworCXMzMiBmbGFnczsKKwlzMzIgY29kZTsKKworCS8qIHBvbGwgSVIgY2hpcCAqLworCWZsYWdzID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKCZpci0+YywgMHgxMCk7CisJaWYgKC0xID09IGZsYWdzKSB7CisJCWRwcmludGsoInJlYWQgZXJyb3JcbiIpOworCQlyZXR1cm4gLUVOT0RBVEE7CisJfQorCS8qIGtleSBwcmVzc2VkID8gKi8KKwlpZiAoMCA9PSAoZmxhZ3MgJiAweDgwKSkKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJLyogcmVhZCBhY3R1YWwga2V5IGNvZGUgKi8KKwljb2RlID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKCZpci0+YywgMHgwMCk7CisJaWYgKC0xID09IGNvZGUpIHsKKwkJZHByaW50aygicmVhZCBlcnJvclxuIik7CisJCXJldHVybiAtRU5PREFUQTsKKwl9CisKKwlrZXkgPSBjb2RlICYgMHhGRjsKKworCWRwcmludGsoIklSIEtleS9GbGFnczogKDB4JTAyeC8weCUwMngpXG4iLCBrZXksIGZsYWdzICYgMHhGRik7CisKKwkvKiByZXR1cm4gaXQgKi8KKwlsaXJjX2J1ZmZlcl93cml0ZShidWYsICZrZXkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF90b19idWZfcGl4ZWx2aWV3KHZvaWQgKmRhdGEsIHN0cnVjdCBsaXJjX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBJUiAqaXIgPSBkYXRhOworCXVuc2lnbmVkIGNoYXIga2V5OworCisJLyogcG9sbCBJUiBjaGlwICovCisJaWYgKDEgIT0gaTJjX21hc3Rlcl9yZWN2KCZpci0+YywgJmtleSwgMSkpIHsKKwkJZHByaW50aygicmVhZCBlcnJvclxuIik7CisJCXJldHVybiAtMTsKKwl9CisJZHByaW50aygia2V5ICUwMnhcbiIsIGtleSk7CisKKwkvKiByZXR1cm4gaXQgKi8KKwlsaXJjX2J1ZmZlcl93cml0ZShidWYsICZrZXkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF90b19idWZfcHY5NTEodm9pZCAqZGF0YSwgc3RydWN0IGxpcmNfYnVmZmVyICpidWYpCit7CisJc3RydWN0IElSICppciA9IGRhdGE7CisJdW5zaWduZWQgY2hhciBrZXk7CisJdW5zaWduZWQgY2hhciBjb2Rlc1s0XTsKKworCS8qIHBvbGwgSVIgY2hpcCAqLworCWlmICgxICE9IGkyY19tYXN0ZXJfcmVjdigmaXItPmMsICZrZXksIDEpKSB7CisJCWRwcmludGsoInJlYWQgZXJyb3JcbiIpOworCQlyZXR1cm4gLUVOT0RBVEE7CisJfQorCS8qIGlnbm9yZSAweGFhICovCisJaWYgKGtleSA9PSAweGFhKQorCQlyZXR1cm4gLUVOT0RBVEE7CisJZHByaW50aygia2V5ICUwMnhcbiIsIGtleSk7CisKKwljb2Rlc1swXSA9IDB4NjE7CisJY29kZXNbMV0gPSAweEQ2OworCWNvZGVzWzJdID0gcmV2ZXJzZShrZXksIDgpOworCWNvZGVzWzNdID0gKH5jb2Rlc1syXSkmMHhmZjsKKworCWxpcmNfYnVmZmVyX3dyaXRlKGJ1ZiwgY29kZXMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF90b19idWZfa25jMSh2b2lkICpkYXRhLCBzdHJ1Y3QgbGlyY19idWZmZXIgKmJ1ZikKK3sKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBsYXN0X2tleSA9IDB4RkY7CisJc3RydWN0IElSICppciA9IGRhdGE7CisJdW5zaWduZWQgY2hhciBrZXk7CisKKwkvKiBwb2xsIElSIGNoaXAgKi8KKwlpZiAoMSAhPSBpMmNfbWFzdGVyX3JlY3YoJmlyLT5jLCAma2V5LCAxKSkgeworCQlkcHJpbnRrKCJyZWFkIGVycm9yXG4iKTsKKwkJcmV0dXJuIC1FTk9EQVRBOworCX0KKworCS8qCisJICogaXQgc2VlbXMgdGhhdCAweEZFIGluZGljYXRlcyB0aGF0IGEgYnV0dG9uIGlzIHN0aWxsIGhlbGQKKwkgKiBkb3duLCB3aGlsZSAweEZGIGluZGljYXRlcyB0aGF0IG5vIGJ1dHRvbiBpcyBoZWxkCisJICogZG93bi4gMHhGRSBzZXF1ZW5jZXMgYXJlIHNvbWV0aW1lcyBpbnRlcnJ1cHRlZCBieSAweEZGCisJICovCisKKwlkcHJpbnRrKCJrZXkgJTAyeFxuIiwga2V5KTsKKworCWlmIChrZXkgPT0gMHhGRikKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJaWYgKGtleSA9PSAweEZFKQorCQlrZXkgPSBsYXN0X2tleTsKKworCWxhc3Rfa2V5ID0ga2V5OworCWxpcmNfYnVmZmVyX3dyaXRlKGJ1ZiwgJmtleSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRfdXNlX2luYyh2b2lkICpkYXRhKQoreworCXN0cnVjdCBJUiAqaXIgPSBkYXRhOworCisJZHByaW50aygiJXMgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBsb2NrIGJ0dHYgaW4gbWVtb3J5IHdoaWxlIC9kZXYvbGlyYyBpcyBpbiB1c2UgICovCisJaTJjX3VzZV9jbGllbnQoJmlyLT5jKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfdXNlX2RlYyh2b2lkICpkYXRhKQoreworCXN0cnVjdCBJUiAqaXIgPSBkYXRhOworCisJZHByaW50aygiJXMgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwlpMmNfcmVsZWFzZV9jbGllbnQoJmlyLT5jKTsKK30KKworc3RhdGljIHN0cnVjdCBsaXJjX2RyaXZlciBsaXJjX3RlbXBsYXRlID0geworCS5uYW1lCQk9ICJsaXJjX2kyYyIsCisJLnNldF91c2VfaW5jCT0gc2V0X3VzZV9pbmMsCisJLnNldF91c2VfZGVjCT0gc2V0X3VzZV9kZWMsCisJLmRldgkJPSBOVUxMLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgaXJfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyBpbnQgaXJfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOworc3RhdGljIGludCBpcl9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBpcl9yZWNlaXZlcl9pZFtdID0geworCS8qIEdlbmVyaWMgZW50cnkgZm9yIGFueSBJUiByZWNlaXZlciAqLworCXsgImlyX3ZpZGVvIiwgMCB9LAorCS8qIElSIGRldmljZSBzcGVjaWZpYyBlbnRyaWVzIGNvdWxkIGJlIGFkZGVkIGhlcmUgKi8KKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gImkyYyBpciBkcml2ZXIiLAorCX0sCisJLnByb2JlCQk9IGlyX3Byb2JlLAorCS5yZW1vdmUJCT0gaXJfcmVtb3ZlLAorCS5pZF90YWJsZQk9IGlyX3JlY2VpdmVyX2lkLAorCS5jb21tYW5kCT0gaXJfY29tbWFuZCwKK307CisKK3N0YXRpYyB2b2lkIHBjZl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgSVIgKmlyKQoreworCWludCByZXQxLCByZXQyLCByZXQzLCByZXQ0OworCisJcmV0MSA9IGkyY19zbWJ1c193cml0ZV9ieXRlKGNsaWVudCwgMHhmZik7CisJcmV0MiA9IGkyY19zbWJ1c19yZWFkX2J5dGUoY2xpZW50KTsKKwlyZXQzID0gaTJjX3NtYnVzX3dyaXRlX2J5dGUoY2xpZW50LCAweDAwKTsKKwlyZXQ0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZShjbGllbnQpOworCisJLyogaW4gdGhlIEFzdXMgVFYtQm94OiBiaXQgMS0wICovCisJaWYgKCgocmV0MiAmIDB4MDMpID09IDB4MDMpICYmICgocmV0NCAmIDB4MDMpID09IDB4MDApKSB7CisJCWlyLT5iaXRzID0gKHVuc2lnbmVkIGNoYXIpIH4weDA3OworCQlpci0+ZmxhZyA9IDB4MDQ7CisJLyogaW4gdGhlIENyZWF0aXZlL1Zpc2lvblRlayBCcmVha091dC1Cb3g6IGJpdCA3LTYgKi8KKwl9IGVsc2UgaWYgKCgocmV0MiAmIDB4YzApID09IDB4YzApICYmICgocmV0NCAmIDB4YzApID09IDB4MDApKSB7CisJCWlyLT5iaXRzID0gKHVuc2lnbmVkIGNoYXIpIH4weGUwOworCQlpci0+ZmxhZyA9IDB4MjA7CisJfQorCisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IGlyX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgSVIgKmlyOworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IGNsaWVudC0+YWRhcHRlcjsKKwl1bnNpZ25lZCBzaG9ydCBhZGRyID0gY2xpZW50LT5hZGRyOworCWludCByZXR2YWw7CisKKwlpciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBJUiksIEdGUF9LRVJORUwpOworCWlmICghaXIpCisJCXJldHVybiAtRU5PTUVNOworCW1lbWNweSgmaXItPmwsICZsaXJjX3RlbXBsYXRlLCBzaXplb2Yoc3RydWN0IGxpcmNfZHJpdmVyKSk7CisJbWVtY3B5KCZpci0+YywgY2xpZW50LCBzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpKTsKKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGlyKTsKKwlpci0+bC5kYXRhICAgID0gaXI7CisJaXItPmwubWlub3IgICA9IG1pbm9yOworCWlyLT5sLnNhbXBsZV9yYXRlID0gMTA7CisJaXItPmwuZGV2ICAgICA9ICZpci0+Yy5kZXY7CisJaXItPm5leHRrZXkgICA9IC0xOworCisJc3dpdGNoIChhZGRyKSB7CisJY2FzZSAweDY0OgorCQlzdHJsY3B5KGlyLT5jLm5hbWUsICJQaXhlbHZpZXcgSVIiLCBJMkNfTkFNRV9TSVpFKTsKKwkJaXItPmwuY29kZV9sZW5ndGggPSA4OworCQlpci0+bC5hZGRfdG9fYnVmID0gYWRkX3RvX2J1Zl9waXhlbHZpZXc7CisJCWJyZWFrOworCWNhc2UgMHg0YjoKKwkJc3RybGNweShpci0+Yy5uYW1lLCAiUFY5NTEgSVIiLCBJMkNfTkFNRV9TSVpFKTsKKwkJaXItPmwuY29kZV9sZW5ndGggPSAzMjsKKwkJaXItPmwuYWRkX3RvX2J1ZiA9IGFkZF90b19idWZfcHY5NTE7CisJCWJyZWFrOworCWNhc2UgMHg3MToKKwkJaWYgKGFkYXAtPmlkID09IEkyQ19IV19CX0NYMjM4OHgpCisJCQlzdHJsY3B5KGlyLT5jLm5hbWUsICJIYXVwcGF1Z2UgSFZSMTMwMCIsIEkyQ19OQU1FX1NJWkUpOworCQllbHNlIC8qIGJ0OHh4IG9yIGN4MjM0MXggKi8KKwkJCS8qCisJCQkgKiBUaGUgUFZSMTUwIElSIHJlY2VpdmVyIHVzZXMgdGhlIHNhbWUgcHJvdG9jb2wgYXMKKwkJCSAqIG90aGVyIEhhdXBwYXVnZSBjYXJkcywgYnV0IHRoZSBkYXRhIGZsb3cgaXMKKwkJCSAqIGRpZmZlcmVudCwgc28gd2UgbmVlZCB0byBkZWFsIHdpdGggaXQgYnkgaXRzIG93bi4KKwkJCSAqLworCQkJc3RybGNweShpci0+Yy5uYW1lLCAiSGF1cHBhdWdlIFBWUjE1MCIsIEkyQ19OQU1FX1NJWkUpOworCQlpci0+bC5jb2RlX2xlbmd0aCA9IDEzOworCQlpci0+bC5hZGRfdG9fYnVmID0gYWRkX3RvX2J1Zl9oYXVwX3B2cjE1MDsKKwkJYnJlYWs7CisJY2FzZSAweDZiOgorCQlzdHJsY3B5KGlyLT5jLm5hbWUsICJBZGFwdGVjIElSIiwgSTJDX05BTUVfU0laRSk7CisJCWlyLT5sLmNvZGVfbGVuZ3RoID0gMzI7CisJCWlyLT5sLmFkZF90b19idWYgPSBhZGRfdG9fYnVmX2FkYXA7CisJCWJyZWFrOworCWNhc2UgMHgxODoKKwljYXNlIDB4MWE6CisJCWlmIChhZGFwLT5pZCA9PSBJMkNfSFdfQl9DWDIzODh4KSB7CisJCQlzdHJsY3B5KGlyLT5jLm5hbWUsICJMZWFkdGVrIElSIiwgSTJDX05BTUVfU0laRSk7CisJCQlpci0+bC5jb2RlX2xlbmd0aCA9IDg7CisJCQlpci0+bC5hZGRfdG9fYnVmID0gYWRkX3RvX2J1Zl9wdnIyMDAwOworCQl9IGVsc2UgeyAvKiBidDh4eCBvciBjeDIzNDF4ICovCisJCQlzdHJsY3B5KGlyLT5jLm5hbWUsICJIYXVwcGF1Z2UgSVIiLCBJMkNfTkFNRV9TSVpFKTsKKwkJCWlyLT5sLmNvZGVfbGVuZ3RoID0gMTM7CisJCQlpci0+bC5hZGRfdG9fYnVmID0gYWRkX3RvX2J1Zl9oYXVwOworCQl9CisJCWJyZWFrOworCWNhc2UgMHgzMDoKKwkJc3RybGNweShpci0+Yy5uYW1lLCAiS05DIE9ORSBJUiIsIEkyQ19OQU1FX1NJWkUpOworCQlpci0+bC5jb2RlX2xlbmd0aCA9IDg7CisJCWlyLT5sLmFkZF90b19idWYgPSBhZGRfdG9fYnVmX2tuYzE7CisJCWJyZWFrOworCWNhc2UgMHgyMToKKwljYXNlIDB4MjM6CisJCXBjZl9wcm9iZShjbGllbnQsIGlyKTsKKwkJc3RybGNweShpci0+Yy5uYW1lLCAiVFYtQm94IElSIiwgSTJDX05BTUVfU0laRSk7CisJCWlyLT5sLmNvZGVfbGVuZ3RoID0gODsKKwkJaXItPmwuYWRkX3RvX2J1ZiA9IGFkZF90b19idWZfcGNmODU3NDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogc2hvdWxkbid0IGhhcHBlbiAqLworCQlwcmludGsoImxpcmNfaTJjOiBIdWg/IHVua25vd24gaTJjIGFkZHJlc3MgKDB4JTAyeCk/XG4iLCBhZGRyKTsKKwkJa2ZyZWUoaXIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcHJpbnRrKEtFUk5fSU5GTyAibGlyY19pMmM6IGNoaXAgMHgleCBmb3VuZCBAIDB4JTAyeCAoJXMpXG4iLAorCSAgICAgICBhZGFwLT5pZCwgYWRkciwgaXItPmMubmFtZSk7CisKKwlyZXR2YWwgPSBsaXJjX3JlZ2lzdGVyX2RyaXZlcigmaXItPmwpOworCisJaWYgKHJldHZhbCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJsaXJjX2kyYzogZmFpbGVkIHRvIHJlZ2lzdGVyIGRyaXZlciFcbiIpOworCQlrZnJlZShpcik7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJaXItPmwubWlub3IgPSByZXR2YWw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcl9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgSVIgKmlyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwkvKiB1bnJlZ2lzdGVyIGRldmljZSAqLworCWxpcmNfdW5yZWdpc3Rlcl9kcml2ZXIoaXItPmwubWlub3IpOworCisJLyogZnJlZSBtZW1vcnkgKi8KKwlrZnJlZShpcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXJfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJLyogbm90aGluZyAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBsaXJjX2kyY19pbml0KHZvaWQpCit7CisJaTJjX2FkZF9kcml2ZXIoJmRyaXZlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBsaXJjX2kyY19leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJmRyaXZlcik7Cit9CisKK01PRFVMRV9ERVNDUklQVElPTigiSW5mcmFyZWQgcmVjZWl2ZXIgZHJpdmVyIGZvciBIYXVwcGF1Z2UgYW5kICIKKwkJICAgIlBpeGVsdmlldyBjYXJkcyAoaTJjIHN0YWNrKSIpOworTU9EVUxFX0FVVEhPUigiR2VyZCBLbm9yciwgTWljaGFsIEtvY2hhbm93aWN6LCBDaHJpc3RvcGggQmFydGVsbXVzLCAiCisJICAgICAgIlVscmljaCBNdWVsbGVyLCBTdGVmYW4gSmFobiwgSmVyb21lIEJyb2NrIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShtaW5vciwgaW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MobWlub3IsICJQcmVmZXJyZWQgbWlub3IgZGV2aWNlIG51bWJlciIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgZGVidWdnaW5nIG1lc3NhZ2VzIik7CisKK21vZHVsZV9pbml0KGxpcmNfaTJjX2luaXQpOworbW9kdWxlX2V4aXQobGlyY19pMmNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX2lnb3JwbHVndXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX2lnb3JwbHVndXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNlNjAwZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfaWdvcnBsdWd1c2IuYwpAQCAtMCwwICsxLDU1NSBAQAorLyoKKyAqIGxpcmNfaWdvcnBsdWd1c2IgLSBVU0IgcmVtb3RlIHN1cHBvcnQgZm9yIExJUkMKKyAqCisgKiBTdXBwb3J0cyB0aGUgc3RhbmRhcmQgaG9tZWJyZXcgSWdvclBsdWdVU0IgcmVjZWl2ZXIgd2l0aCBJZ29yJ3MgZmlybXdhcmUuCisgKiBTZWUgaHR0cDovL3d3dy5jZXNrby5ob3N0LnNrL0lnb3JQbHVnVVNCL0lnb3JQbHVnLVVTQiUyMChBVlIpX2VuZy5odG0KKyAqCisgKiBUaGUgZGV2aWNlIGNhbiBvbmx5IHJlY29yZCBidXJzdHMgb2YgdXAgdG8gMzYgcHVsc2VzL3NwYWNlcy4KKyAqIFdvcmtzIGZpbmUgd2l0aCBSQzUuIExvbmdlciBjb21tYW5kcyBsZWFkIHRvIGRldmljZSBidWZmZXIgb3ZlcnJ1bi4KKyAqIChNYXliZSBhIGJldHRlciBmaXJtd2FyZSBvciBhIG1pY3JvY29udHJvbGxlciB3aXRoIG1vcmUgcmFtIGNhbiBoZWxwPykKKyAqCisgKiBWZXJzaW9uIDAuMSAgW2JldGEgc3RhdHVzXQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBKYW4gTS4gSG9jaHN0ZWluCisgKgk8aG9jaHN0ZWluQGFsZ28uaW5mb3JtYXRpay50dS1kYXJtc3RhZHQuZGU+CisgKgorICogVGhpcyBkcml2ZXIgd2FzIGRlcml2ZWQgZnJvbToKKyAqICAgUGF1bCBNaWxsZXIgPHBtaWxsZXI5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqICAgICAgImxpcmNfYXRpdXNiIiBtb2R1bGUKKyAqICAgVmxhZGltaXIgRGVyZ2FjaGV2IDx2b2xvZHlhQG1pbnNwcmluZy5jb20+J3MgMjAwMgorICogICAgICAiVVNCIEFUSSBSZW1vdGUgc3VwcG9ydCIgKGlucHV0IGRldmljZSkKKyAqICAgQWRyaWFuIERld2h1cnN0IDxzYWlsb3ItbGtAc2FpbG9yZnJhZy5uZXQ+J3MgMjAwMgorICogICAgICAiVVNCIFN0cmVhbVphcCByZW1vdGUgZHJpdmVyIiAoTElSQykKKyAqICAgQXJ0dXIgTGlwb3dza2kgPGFsaXBvd3NraUBra2kubmV0LnBsPidzIDIwMDIKKyAqICAgICAgImxpcmNfZGV2IiBhbmQgImxpcmNfZ3BpbyIgTElSQyBtb2R1bGVzCisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisKKyNpbmNsdWRlIDxtZWRpYS9saXJjLmg+CisjaW5jbHVkZSA8bWVkaWEvbGlyY19kZXYuaD4KKworCisvKiBtb2R1bGUgaWRlbnRpZmljYXRpb24gKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCSIwLjEiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IJCVwKKwkiSmFuIE0uIEhvY2hzdGVpbiA8aG9jaHN0ZWluQGFsZ28uaW5mb3JtYXRpay50dS1kYXJtc3RhZHQuZGU+IgorI2RlZmluZSBEUklWRVJfREVTQwkJIlVTQiByZW1vdGUgZHJpdmVyIGZvciBMSVJDIgorI2RlZmluZSBEUklWRVJfTkFNRQkJImxpcmNfaWdvcnBsdWd1c2IiCisKKy8qIGRlYnVnZ2luZyBzdXBwb3J0ICovCisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworc3RhdGljIGludCBkZWJ1ZyA9IDE7CisjZWxzZQorc3RhdGljIGludCBkZWJ1ZzsKKyNlbmRpZgorCisjZGVmaW5lIGRwcmludGsoZm10LCBhcmdzLi4uKQkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQlpZiAoZGVidWcpCQkJCQlcCisJCQlwcmludGsoS0VSTl9ERUJVRyBmbXQsICMjIGFyZ3MpOwlcCisJfSB3aGlsZSAoMCkKKworLyogT25lIG1vZGUyIHB1bHNlL3NwYWNlIGhhcyA0IGJ5dGVzLiAqLworI2RlZmluZSBDT0RFX0xFTkdUSAkgICAgIHNpemVvZihpbnQpCisKKy8qIElnb3IncyBmaXJtd2FyZSBjYW5ub3QgcmVjb3JkIGJ1cnN0cyBsb25nZXIgdGhhbiAzNi4gKi8KKyNkZWZpbmUgREVWSUNFX0JVRkxFTgkgICAzNgorCisvKgorICogSGVhZGVyIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRldmljZSdzIGJ1ZmZlcjoKKyAqCXVuc2lnbmVkIGNoYXIgZGF0YV9sZW5ndGgKKyAqCXVuc2lnbmVkIGNoYXIgZGF0YV9zdGFydCAgICAoIT0wIG1lYW5zIHJpbmctYnVmZmVyIG92ZXJydW4pCisgKgl1bnNpZ25lZCBjaGFyIGNvdW50ZXIgICAgICAgKGluY3JlbWVudGVkIGJ5IGVhY2ggYnVyc3QpCisgKi8KKyNkZWZpbmUgREVWSUNFX0hFQURFUkxFTgkzCisKKy8qIFRoaXMgaXMgZm9yIHRoZSBnYXAgKi8KKyNkZWZpbmUgQURESVRJT05BTF9MSVJDX0JZVEVTICAgMgorCisvKiB0aW1lcyB0byBwb2xsIHBlciBzZWNvbmQgKi8KKyNkZWZpbmUgU0FNUExFX1JBVEUJICAgICAxMDAKK3N0YXRpYyBpbnQgc2FtcGxlX3JhdGUgPSBTQU1QTEVfUkFURTsKKworCisvKioqKiBJZ29yJ3MgVVNCIFJlcXVlc3QgQ29kZXMgKi8KKworI2RlZmluZSBTRVRfSU5GUkFCVUZGRVJfRU1QVFkgICAxCisvKioKKyAqIFBhcmFtczogbm9uZQorICogQW5zd2VyOiBlbXB0eQorICovCisKKyNkZWZpbmUgR0VUX0lORlJBQ09ERQkgICAyCisvKioKKyAqIFBhcmFtczoKKyAqICAgd1ZhbHVlOiBvZmZzZXQgdG8gYmVnaW4gcmVhZGluZyBpbmZyYSBidWZmZXIKKyAqCisgKiBBbnN3ZXI6IGluZnJhIGRhdGEKKyAqLworCisjZGVmaW5lIFNFVF9EQVRBUE9SVF9ESVJFQ1RJT04gIDMKKy8qKgorICogUGFyYW1zOgorICogICB3VmFsdWU6IChieXRlKSAxIGJpdCBmb3IgZWFjaCBkYXRhIHBvcnQgcGluICgwPWluLCAxPW91dCkKKyAqCisgKiBBbnN3ZXI6IGVtcHR5CisgKi8KKworI2RlZmluZSBHRVRfREFUQVBPUlRfRElSRUNUSU9OICA0CisvKioKKyAqIFBhcmFtczogbm9uZQorICoKKyAqIEFuc3dlcjogKGJ5dGUpIDEgYml0IGZvciBlYWNoIGRhdGEgcG9ydCBwaW4gKDA9aW4sIDE9b3V0KQorICovCisKKyNkZWZpbmUgU0VUX09VVF9EQVRBUE9SVAk1CisvKioKKyAqIFBhcmFtczoKKyAqICAgd1ZhbHVlOiBieXRlIHRvIHdyaXRlIHRvIG91dHB1dCBkYXRhIHBvcnQKKyAqCisgKiBBbnN3ZXI6IGVtcHR5CisgKi8KKworI2RlZmluZSBHRVRfT1VUX0RBVEFQT1JUCTYKKy8qKgorICogUGFyYW1zOiBub25lCisgKgorICogQW5zd2VyOiBsZWFzdCBzaWduaWZpY2FudCAzIGJpdHMgcmVhZCBmcm9tIG91dHB1dCBkYXRhIHBvcnQKKyAqLworCisjZGVmaW5lIEdFVF9JTl9EQVRBUE9SVAkgNworLyoqCisgKiBQYXJhbXM6IG5vbmUKKyAqCisgKiBBbnN3ZXI6IGxlYXN0IHNpZ25pZmljYW50IDMgYml0cyByZWFkIGZyb20gaW5wdXQgZGF0YSBwb3J0CisgKi8KKworI2RlZmluZSBSRUFEX0VFUFJPTQkgICAgIDgKKy8qKgorICogUGFyYW1zOgorICogICB3VmFsdWU6IG9mZnNldCB0byBiZWdpbiByZWFkaW5nIEVFUFJPTQorICoKKyAqIEFuc3dlcjogRUVQUk9NIGJ5dGVzCisgKi8KKworI2RlZmluZSBXUklURV9FRVBST00JICAgIDkKKy8qKgorICogUGFyYW1zOgorICogICB3VmFsdWU6IG9mZnNldCB0byBFRVBST00gYnl0ZQorICogICB3SW5kZXg6IGJ5dGUgdG8gd3JpdGUKKyAqCisgKiBBbnN3ZXI6IGVtcHR5CisgKi8KKworI2RlZmluZSBTRU5EX1JTMjMyCSAgICAgIDEwCisvKioKKyAqIFBhcmFtczoKKyAqICAgd1ZhbHVlOiBieXRlIHRvIHNlbmQKKyAqCisgKiBBbnN3ZXI6IGVtcHR5CisgKi8KKworI2RlZmluZSBSRUNWX1JTMjMyCSAgICAgIDExCisvKioKKyAqIFBhcmFtczogbm9uZQorICoKKyAqIEFuc3dlcjogYnl0ZSByZWNlaXZlZAorICovCisKKyNkZWZpbmUgU0VUX1JTMjMyX0JBVUQJICAxMgorLyoqCisgKiBQYXJhbXM6CisgKiAgIHdWYWx1ZTogYnl0ZSB0byB3cml0ZSB0byBVQVJUIGJpdCByYXRlIHJlZ2lzdGVyIChVQlJSKQorICoKKyAqIEFuc3dlcjogZW1wdHkKKyAqLworCisjZGVmaW5lIEdFVF9SUzIzMl9CQVVECSAgMTMKKy8qKgorICogUGFyYW1zOiBub25lCisgKgorICogQW5zd2VyOiBieXRlIHJlYWQgZnJvbSBVQVJUIGJpdCByYXRlIHJlZ2lzdGVyIChVQlJSKQorICovCisKKworLyogZGF0YSBzdHJ1Y3R1cmUgZm9yIGVhY2ggdXNiIHJlbW90ZSAqLworc3RydWN0IGlnb3JwbHVnIHsKKworCS8qIHVzYiAqLworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CisJc3RydWN0IHVyYiAqdXJiX2luOworCWludCBkZXZudW07CisKKwl1bnNpZ25lZCBjaGFyICpidWZfaW47CisJdW5zaWduZWQgaW50IGxlbl9pbjsKKwlpbnQgaW5fc3BhY2U7CisJc3RydWN0IHRpbWV2YWwgbGFzdF90aW1lOworCisJZG1hX2FkZHJfdCBkbWFfaW47CisKKwkvKiBsaXJjICovCisJc3RydWN0IGxpcmNfZHJpdmVyICpkOworCisJLyogaGFuZGxlIHNlbmRpbmcgKGluaXQgc3RyaW5ncykgKi8KKwlpbnQgc2VuZF9mbGFnczsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X291dDsKK307CisKK3N0YXRpYyBpbnQgdW5yZWdpc3Rlcl9mcm9tX2xpcmMoc3RydWN0IGlnb3JwbHVnICppcikKK3sKKwlzdHJ1Y3QgbGlyY19kcml2ZXIgKmQgPSBpci0+ZDsKKwlpbnQgZGV2bnVtOworCisJaWYgKCFpci0+ZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXZudW0gPSBpci0+ZGV2bnVtOworCWRwcmludGsoRFJJVkVSX05BTUUgIlslZF06IHVucmVnaXN0ZXIgZnJvbSBsaXJjIGNhbGxlZFxuIiwgZGV2bnVtKTsKKworCWxpcmNfdW5yZWdpc3Rlcl9kcml2ZXIoZC0+bWlub3IpOworCisJcHJpbnRrKERSSVZFUl9OQU1FICJbJWRdOiB1c2IgcmVtb3RlIGRpc2Nvbm5lY3RlZFxuIiwgZGV2bnVtKTsKKworCWtmcmVlKGQpOworCWlyLT5kID0gTlVMTDsKKwlrZnJlZShpcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3VzZV9pbmModm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaWdvcnBsdWcgKmlyID0gZGF0YTsKKworCWlmICghaXIpIHsKKwkJcHJpbnRrKERSSVZFUl9OQU1FICJbP106IHNldF91c2VfaW5jIGNhbGxlZCB3aXRoIG5vIGNvbnRleHRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZHByaW50ayhEUklWRVJfTkFNRSAiWyVkXTogc2V0IHVzZSBpbmNcbiIsIGlyLT5kZXZudW0pOworCisJaWYgKCFpci0+dXNiZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfdXNlX2RlYyh2b2lkICpkYXRhKQoreworCXN0cnVjdCBpZ29ycGx1ZyAqaXIgPSBkYXRhOworCisJaWYgKCFpcikgeworCQlwcmludGsoRFJJVkVSX05BTUUgIls/XTogc2V0X3VzZV9kZWMgY2FsbGVkIHdpdGggbm8gY29udGV4dFxuIik7CisJCXJldHVybjsKKwl9CisJZHByaW50ayhEUklWRVJfTkFNRSAiWyVkXTogc2V0IHVzZSBkZWNcbiIsIGlyLT5kZXZudW0pOworfQorCisKKy8qKgorICogQ2FsbGVkIGluIHVzZXIgY29udGV4dC4KKyAqIHJldHVybiAwIGlmIGRhdGEgd2FzIGFkZGVkIHRvIHRoZSBidWZmZXIgYW5kCisgKiAtRU5PREFUQSBpZiBub25lIHdhcyBhdmFpbGFibGUuIFRoaXMgc2hvdWxkIGFkZCBzb21lIG51bWJlciBvZiBiaXRzCisgKiBldmVubHkgZGl2aXNpYmxlIGJ5IGNvZGVfbGVuZ3RoIHRvIHRoZSBidWZmZXIKKyAqLworc3RhdGljIGludCB1c2JfcmVtb3RlX3BvbGwodm9pZCAqZGF0YSwgc3RydWN0IGxpcmNfYnVmZmVyICpidWYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaWdvcnBsdWcgKmlyID0gKHN0cnVjdCBpZ29ycGx1ZyAqKWRhdGE7CisKKwlpZiAoIWlyLT51c2JkZXYpICAvKiBIYXMgdGhlIGRldmljZSBiZWVuIHJlbW92ZWQ/ICovCisJCXJldHVybiAtRU5PREVWOworCisJbWVtc2V0KGlyLT5idWZfaW4sIDAsIGlyLT5sZW5faW4pOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKAorCSAgICAgIGlyLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZShpci0+dXNiZGV2LCAwKSwKKwkgICAgICBHRVRfSU5GUkFDT0RFLCBVU0JfVFlQRV9WRU5ET1J8VVNCX0RJUl9JTiwKKwkgICAgICAwLyogb2Zmc2V0ICovLCAvKnVudXNlZCovMCwKKwkgICAgICBpci0+YnVmX2luLCBpci0+bGVuX2luLAorCSAgICAgIC8qdGltZW91dCovSFogKiBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJaWYgKHJldCA+IDApIHsKKwkJaW50IGkgPSBERVZJQ0VfSEVBREVSTEVOOworCQlpbnQgY29kZSwgdGltZWRpZmY7CisJCXN0cnVjdCB0aW1ldmFsIG5vdzsKKworCQlpZiAocmV0IDw9IDEpICAvKiBBQ0sgcGFja2V0IGhhcyAxIGJ5dGUgLS0+IGlnbm9yZSAqLworCQkJcmV0dXJuIC1FTk9EQVRBOworCisJCWRwcmludGsoRFJJVkVSX05BTUUgIjogR290ICVkIGJ5dGVzLiBIZWFkZXI6ICUwMnggJTAyeCAlMDJ4XG4iLAorCQkJcmV0LCBpci0+YnVmX2luWzBdLCBpci0+YnVmX2luWzFdLCBpci0+YnVmX2luWzJdKTsKKworCQlpZiAoaXItPmJ1Zl9pblsyXSAhPSAwKSB7CisJCQlwcmludGsoRFJJVkVSX05BTUUgIlslZF06IERldmljZSBidWZmZXIgb3ZlcnJ1bi5cbiIsCisJCQkJaXItPmRldm51bSk7CisJCQkvKiBzdGFydCBhdCBlYXJsaWVzdCBieXRlICovCisJCQlpID0gREVWSUNFX0hFQURFUkxFTiArIGlyLT5idWZfaW5bMl07CisJCQkvKiB3aGVyZSBhcmUgd2Ugbm93PyBzcGFjZSwgZ2FwIG9yIHB1bHNlPyAqLworCQl9CisKKwkJZG9fZ2V0dGltZW9mZGF5KCZub3cpOworCQl0aW1lZGlmZiA9IG5vdy50dl9zZWMgLSBpci0+bGFzdF90aW1lLnR2X3NlYzsKKwkJaWYgKHRpbWVkaWZmICsgMSA+IFBVTFNFX01BU0sgLyAxMDAwMDAwKQorCQkJdGltZWRpZmYgPSBQVUxTRV9NQVNLOworCQllbHNlIHsKKwkJCXRpbWVkaWZmICo9IDEwMDAwMDA7CisJCQl0aW1lZGlmZiArPSBub3cudHZfdXNlYyAtIGlyLT5sYXN0X3RpbWUudHZfdXNlYzsKKwkJfQorCQlpci0+bGFzdF90aW1lLnR2X3NlYyA9IG5vdy50dl9zZWM7CisJCWlyLT5sYXN0X3RpbWUudHZfdXNlYyA9IG5vdy50dl91c2VjOworCisJCS8qIGNyZWF0ZSBsZWFkaW5nIGdhcCAgKi8KKwkJY29kZSA9IHRpbWVkaWZmOworCQlsaXJjX2J1ZmZlcl93cml0ZShidWYsICh1bnNpZ25lZCBjaGFyICopJmNvZGUpOworCQlpci0+aW5fc3BhY2UgPSAxOyAgIC8qIG5leHQgY29tZXMgYSBwdWxzZSAqLworCisJCS8qIE1PREUyOiBwdWxzZS9zcGFjZSAoUFVMU0VfQklUKSBpbiAxdXMgdW5pdHMgKi8KKworCQl3aGlsZSAoaSA8IHJldCkgeworCQkJLyogMSBJZ29yLXRpY2sgPSA4NS4zMzMzMzMgdXMgKi8KKwkJCWNvZGUgPSAodW5zaWduZWQgaW50KWlyLT5idWZfaW5baV0gKiA4NQorCQkJCSsgKHVuc2lnbmVkIGludClpci0+YnVmX2luW2ldIC8gMzsKKwkJCWlmIChpci0+aW5fc3BhY2UpCisJCQkJY29kZSB8PSBQVUxTRV9CSVQ7CisJCQlsaXJjX2J1ZmZlcl93cml0ZShidWYsICh1bnNpZ25lZCBjaGFyICopJmNvZGUpOworCQkJLyogMSBjaHVuayA9IENPREVfTEVOR1RIIGJ5dGVzICovCisJCQlpci0+aW5fc3BhY2UgXj0gMTsKKwkJCSsraTsKKwkJfQorCisJCXJldCA9IHVzYl9jb250cm9sX21zZygKKwkJICAgICAgaXItPnVzYmRldiwgdXNiX3JjdmN0cmxwaXBlKGlyLT51c2JkZXYsIDApLAorCQkgICAgICBTRVRfSU5GUkFCVUZGRVJfRU1QVFksIFVTQl9UWVBFX1ZFTkRPUnxVU0JfRElSX0lOLAorCQkgICAgICAvKnVudXNlZCovMCwgLyp1bnVzZWQqLzAsCisJCSAgICAgIC8qZHVtbXkqL2lyLT5idWZfaW4sIC8qZHVtbXkqL2lyLT5sZW5faW4sCisJCSAgICAgIC8qdGltZW91dCovSFogKiBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJCWlmIChyZXQgPCAwKQorCQkJcHJpbnRrKERSSVZFUl9OQU1FICJbJWRdOiBTRVRfSU5GUkFCVUZGRVJfRU1QVFk6ICIKKwkJCSAgICAgICAiZXJyb3IgJWRcbiIsIGlyLT5kZXZudW0sIHJldCk7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAocmV0IDwgMCkKKwkJcHJpbnRrKERSSVZFUl9OQU1FICJbJWRdOiBHRVRfSU5GUkFDT0RFOiBlcnJvciAlZFxuIiwKKwkJCWlyLT5kZXZudW0sIHJldCk7CisKKwlyZXR1cm4gLUVOT0RBVEE7Cit9CisKKworCitzdGF0aWMgaW50IHVzYl9yZW1vdGVfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBOVUxMOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlkZXNjID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwX2N0bDI7CisJc3RydWN0IGlnb3JwbHVnICppciA9IE5VTEw7CisJc3RydWN0IGxpcmNfZHJpdmVyICpkcml2ZXIgPSBOVUxMOworCWludCBkZXZudW0sIHBpcGUsIG1heHA7CisJaW50IG1pbm9yID0gMDsKKwljaGFyIGJ1Zls2M10sIG5hbWVbMTI4XSA9ICIiOworCWludCBtZW1fZmFpbHVyZSA9IDA7CisJaW50IHJldDsKKworCWRwcmludGsoRFJJVkVSX05BTUUgIjogdXNiIHByb2JlIGNhbGxlZC5cbiIpOworCisJZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKworCWlkZXNjID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisKKwlpZiAoaWRlc2MtPmRlc2MuYk51bUVuZHBvaW50cyAhPSAxKQorCQlyZXR1cm4gLUVOT0RFVjsKKwllcF9jdGwyID0gaWRlc2MtPmVuZHBvaW50OworCWlmICgoKGVwX2N0bDItPmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykKKwkgICAgIT0gVVNCX0RJUl9JTikKKwkgICAgfHwgKGVwX2N0bDItPmRlc2MuYm1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCisJICAgICE9IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpCisJCXJldHVybiAtRU5PREVWOworCXBpcGUgPSB1c2JfcmN2Y3RybHBpcGUoZGV2LCBlcF9jdGwyLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MpOworCWRldm51bSA9IGRldi0+ZGV2bnVtOworCW1heHAgPSB1c2JfbWF4cGFja2V0KGRldiwgcGlwZSwgdXNiX3BpcGVvdXQocGlwZSkpOworCisJZHByaW50ayhEUklWRVJfTkFNRSAiWyVkXTogYnl0ZXNfaW5fa2V5PSVsdSBtYXhwPSVkXG4iLAorCQlkZXZudW0sIENPREVfTEVOR1RILCBtYXhwKTsKKworCisJbWVtX2ZhaWx1cmUgPSAwOworCWlyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlnb3JwbHVnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpcikgeworCQltZW1fZmFpbHVyZSA9IDE7CisJCWdvdG8gbWVtX2ZhaWx1cmVfc3dpdGNoOworCX0KKwlkcml2ZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbGlyY19kcml2ZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRyaXZlcikgeworCQltZW1fZmFpbHVyZSA9IDI7CisJCWdvdG8gbWVtX2ZhaWx1cmVfc3dpdGNoOworCX0KKworCWlyLT5idWZfaW4gPSB1c2JfYWxsb2NfY29oZXJlbnQoZGV2LAorCQkJICAgICAgREVWSUNFX0JVRkxFTitERVZJQ0VfSEVBREVSTEVOLAorCQkJICAgICAgR0ZQX0FUT01JQywgJmlyLT5kbWFfaW4pOworCWlmICghaXItPmJ1Zl9pbikgeworCQltZW1fZmFpbHVyZSA9IDM7CisJCWdvdG8gbWVtX2ZhaWx1cmVfc3dpdGNoOworCX0KKworCXN0cmNweShkcml2ZXItPm5hbWUsIERSSVZFUl9OQU1FICIgIik7CisJZHJpdmVyLT5taW5vciA9IC0xOworCWRyaXZlci0+Y29kZV9sZW5ndGggPSBDT0RFX0xFTkdUSCAqIDg7IC8qIGluIGJpdHMgKi8KKwlkcml2ZXItPmZlYXR1cmVzID0gTElSQ19DQU5fUkVDX01PREUyOworCWRyaXZlci0+ZGF0YSA9IGlyOworCWRyaXZlci0+Y2h1bmtfc2l6ZSA9IENPREVfTEVOR1RIOworCWRyaXZlci0+YnVmZmVyX3NpemUgPSBERVZJQ0VfQlVGTEVOICsgQURESVRJT05BTF9MSVJDX0JZVEVTOworCWRyaXZlci0+c2V0X3VzZV9pbmMgPSAmc2V0X3VzZV9pbmM7CisJZHJpdmVyLT5zZXRfdXNlX2RlYyA9ICZzZXRfdXNlX2RlYzsKKwlkcml2ZXItPnNhbXBsZV9yYXRlID0gc2FtcGxlX3JhdGU7ICAgIC8qIHBlciBzZWNvbmQgKi8KKwlkcml2ZXItPmFkZF90b19idWYgPSAmdXNiX3JlbW90ZV9wb2xsOworCWRyaXZlci0+ZGV2ID0gJmludGYtPmRldjsKKwlkcml2ZXItPm93bmVyID0gVEhJU19NT0RVTEU7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpci0+d2FpdF9vdXQpOworCisJbWlub3IgPSBsaXJjX3JlZ2lzdGVyX2RyaXZlcihkcml2ZXIpOworCWlmIChtaW5vciA8IDApCisJCW1lbV9mYWlsdXJlID0gOTsKKworbWVtX2ZhaWx1cmVfc3dpdGNoOgorCisJc3dpdGNoIChtZW1fZmFpbHVyZSkgeworCWNhc2UgOToKKwkJdXNiX2ZyZWVfY29oZXJlbnQoZGV2LCBERVZJQ0VfQlVGTEVOK0RFVklDRV9IRUFERVJMRU4sCisJCQlpci0+YnVmX2luLCBpci0+ZG1hX2luKTsKKwljYXNlIDM6CisJCWtmcmVlKGRyaXZlcik7CisJY2FzZSAyOgorCQlrZnJlZShpcik7CisJY2FzZSAxOgorCQlwcmludGsoRFJJVkVSX05BTUUgIlslZF06IG91dCBvZiBtZW1vcnkgKGNvZGU9JWQpXG4iLAorCQkJZGV2bnVtLCBtZW1fZmFpbHVyZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRyaXZlci0+bWlub3IgPSBtaW5vcjsKKwlpci0+ZCA9IGRyaXZlcjsKKwlpci0+ZGV2bnVtID0gZGV2bnVtOworCWlyLT51c2JkZXYgPSBkZXY7CisJaXItPmxlbl9pbiA9IERFVklDRV9CVUZMRU4rREVWSUNFX0hFQURFUkxFTjsKKwlpci0+aW5fc3BhY2UgPSAxOyAvKiBGaXJzdCBtb2RlMiBldmVudCBpcyBhIHNwYWNlLiAqLworCWRvX2dldHRpbWVvZmRheSgmaXItPmxhc3RfdGltZSk7CisKKwlpZiAoZGV2LT5kZXNjcmlwdG9yLmlNYW51ZmFjdHVyZXIKKwkgICAgJiYgdXNiX3N0cmluZyhkZXYsIGRldi0+ZGVzY3JpcHRvci5pTWFudWZhY3R1cmVyLAorCQkJICBidWYsIHNpemVvZihidWYpKSA+IDApCisJCXN0cmxjcHkobmFtZSwgYnVmLCBzaXplb2YobmFtZSkpOworCWlmIChkZXYtPmRlc2NyaXB0b3IuaVByb2R1Y3QKKwkgICAgJiYgdXNiX3N0cmluZyhkZXYsIGRldi0+ZGVzY3JpcHRvci5pUHJvZHVjdCwgYnVmLCBzaXplb2YoYnVmKSkgPiAwKQorCQlzbnByaW50ZihuYW1lICsgc3RybGVuKG5hbWUpLCBzaXplb2YobmFtZSkgLSBzdHJsZW4obmFtZSksCisJCQkgIiAlcyIsIGJ1Zik7CisJcHJpbnRrKERSSVZFUl9OQU1FICJbJWRdOiAlcyBvbiB1c2IlZDolZFxuIiwgZGV2bnVtLCBuYW1lLAorCSAgICAgICBkZXYtPmJ1cy0+YnVzbnVtLCBkZXZudW0pOworCisJLyogY2xlYXIgZGV2aWNlIGJ1ZmZlciAqLworCXJldCA9IHVzYl9jb250cm9sX21zZyhpci0+dXNiZGV2LCB1c2JfcmN2Y3RybHBpcGUoaXItPnVzYmRldiwgMCksCisJCVNFVF9JTkZSQUJVRkZFUl9FTVBUWSwgVVNCX1RZUEVfVkVORE9SfFVTQl9ESVJfSU4sCisJCS8qdW51c2VkKi8wLCAvKnVudXNlZCovMCwKKwkJLypkdW1teSovaXItPmJ1Zl9pbiwgLypkdW1teSovaXItPmxlbl9pbiwKKwkJLyp0aW1lb3V0Ki9IWiAqIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKERSSVZFUl9OQU1FICJbJWRdOiBTRVRfSU5GUkFCVUZGRVJfRU1QVFk6IGVycm9yICVkXG4iLAorCQkJZGV2bnVtLCByZXQpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBpcik7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgdXNiX3JlbW90ZV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCBpZ29ycGx1ZyAqaXIgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisKKwlpZiAoIWlyIHx8ICFpci0+ZCkKKwkJcmV0dXJuOworCisJaXItPnVzYmRldiA9IE5VTEw7CisJd2FrZV91cF9hbGwoJmlyLT53YWl0X291dCk7CisKKwl1c2JfZnJlZV9jb2hlcmVudChkZXYsIGlyLT5sZW5faW4sIGlyLT5idWZfaW4sIGlyLT5kbWFfaW4pOworCisJdW5yZWdpc3Rlcl9mcm9tX2xpcmMoaXIpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX3JlbW90ZV9pZF90YWJsZVtdID0geworCS8qIElnb3IgUGx1ZyBVU0IgKEF0bWVsJ3MgTWFudWZhY3QuIElEKSAqLworCXsgVVNCX0RFVklDRSgweDAzZWIsIDB4MDAwMikgfSwKKworCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNiX3JlbW90ZV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJRFJJVkVSX05BTUUsCisJLnByb2JlID0JdXNiX3JlbW90ZV9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9yZW1vdGVfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQl1c2JfcmVtb3RlX2lkX3RhYmxlCit9OworCitzdGF0aWMgaW50IF9faW5pdCB1c2JfcmVtb3RlX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCXByaW50ayhLRVJOX0lORk8gIlxuIgorCSAgICAgICBEUklWRVJfTkFNRSAiOiAiIERSSVZFUl9ERVNDICIgdiIgRFJJVkVSX1ZFUlNJT04gIlxuIik7CisJcHJpbnRrKERSSVZFUl9OQU1FICI6ICIgRFJJVkVSX0FVVEhPUiAiXG4iKTsKKwlkcHJpbnRrKERSSVZFUl9OQU1FICI6IGRlYnVnIG1vZGUgZW5hYmxlZFxuIik7CisKKwlpID0gdXNiX3JlZ2lzdGVyKCZ1c2JfcmVtb3RlX2RyaXZlcik7CisJaWYgKGkgPCAwKSB7CisJCXByaW50ayhEUklWRVJfTkFNRSAiOiB1c2IgcmVnaXN0ZXIgZmFpbGVkLCByZXN1bHQgPSAlZFxuIiwgaSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3JlbW90ZV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnVzYl9yZW1vdGVfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodXNiX3JlbW90ZV9pbml0KTsKK21vZHVsZV9leGl0KHVzYl9yZW1vdGVfZXhpdCk7CisKKyNpbmNsdWRlIDxsaW51eC92ZXJtYWdpYy5oPgorTU9EVUxFX0lORk8odmVybWFnaWMsIFZFUk1BR0lDX1NUUklORyk7CisKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHVzYl9yZW1vdGVfaWRfdGFibGUpOworCittb2R1bGVfcGFyYW0oc2FtcGxlX3JhdGUsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhzYW1wbGVfcmF0ZSwgIlNhbXBsaW5nIHJhdGUgaW4gSHogKGRlZmF1bHQ6IDEwMCkiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19pbW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX2ltb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjQ5MzI1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19pbW9uLmMKQEAgLTAsMCArMSwxMDU4IEBACisvKgorICogICBsaXJjX2ltb24uYzogIExJUkMvVkZEL0xDRCBkcml2ZXIgZm9yIFNvdW5kR3JhcGggaU1PTiBJUi9WRkQvTENECisgKgkJICAgaW5jbHVkaW5nIHRoZSBpTU9OIFBBRCBtb2RlbAorICoKKyAqICAgQ29weXJpZ2h0KEMpIDIwMDQgIFZlbmt5IFJhanUoZGV2QHZlbmt5LndzKQorICogICBDb3B5cmlnaHQoQykgMjAwOSAgSmFyb2QgV2lsc29uIDxqYXJvZEB3aWxzb25ldC5jb20+CisgKgorICogICBsaXJjX2ltb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSA8bWVkaWEvbGlyYy5oPgorI2luY2x1ZGUgPG1lZGlhL2xpcmNfZGV2Lmg+CisKKworI2RlZmluZSBNT0RfQVVUSE9SCSJWZW5reSBSYWp1IDxkZXZAdmVua3kud3M+IgorI2RlZmluZSBNT0RfREVTQwkiRHJpdmVyIGZvciBTb3VuZEdyYXBoIGlNT04gTXVsdGlNZWRpYSBJUi9EaXNwbGF5IgorI2RlZmluZSBNT0RfTkFNRQkibGlyY19pbW9uIgorI2RlZmluZSBNT0RfVkVSU0lPTgkiMC44IgorCisjZGVmaW5lIERJU1BMQVlfTUlOT1JfQkFTRQkxNDQKKyNkZWZpbmUgREVWSUNFX05BTUUJImxjZCVkIgorCisjZGVmaW5lIEJVRl9DSFVOS19TSVpFCTQKKyNkZWZpbmUgQlVGX1NJWkUJMTI4CisKKyNkZWZpbmUgQklUX0RVUkFUSU9OCTI1MAkvKiBlYWNoIGJpdCByZWNlaXZlZCBpcyAyNTB1cyAqLworCisvKioqIFAgUiBPIFQgTyBUIFkgUCBFIFMgKioqLworCisvKiBVU0IgQ2FsbGJhY2sgcHJvdG90eXBlcyAqLworc3RhdGljIGludCBpbW9uX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCSAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgdm9pZCBpbW9uX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CitzdGF0aWMgdm9pZCB1c2JfcnhfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyB2b2lkIHVzYl90eF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOworCisvKiBzdXNwZW5kL3Jlc3VtZSBzdXBwb3J0ICovCitzdGF0aWMgaW50IGltb25fcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKK3N0YXRpYyBpbnQgaW1vbl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSk7CisKKy8qIERpc3BsYXkgZmlsZV9vcGVyYXRpb25zIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgZGlzcGxheV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBpbnQgZGlzcGxheV9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CisKKy8qIFZGRCB3cml0ZSBvcGVyYXRpb24gKi8KK3N0YXRpYyBzc2l6ZV90IHZmZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmLAorCQkJIHNpemVfdCBuX2J5dGVzLCBsb2ZmX3QgKnBvcyk7CisKKy8qIExJUkMgZHJpdmVyIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgaXJfb3Blbih2b2lkICpkYXRhKTsKK3N0YXRpYyB2b2lkIGlyX2Nsb3NlKHZvaWQgKmRhdGEpOworCisvKiBEcml2ZXIgaW5pdC9leGl0IHByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgX19pbml0IGltb25faW5pdCh2b2lkKTsKK3N0YXRpYyB2b2lkIF9fZXhpdCBpbW9uX2V4aXQodm9pZCk7CisKKy8qKiogRyBMIE8gQiBBIEwgUyAqKiovCisjZGVmaW5lIElNT05fREFUQV9CVUZfU1oJMzUKKworc3RydWN0IGltb25fY29udGV4dCB7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKKwkvKiBOZXdlciBkZXZpY2VzIGhhdmUgdHdvIGludGVyZmFjZXMgKi8KKwlpbnQgZGlzcGxheTsJCQkvKiBub3QgYWxsIGNvbnRyb2xsZXJzIGRvICovCisJaW50IGRpc3BsYXlfaXNvcGVuOwkJLyogZGlzcGxheSBwb3J0IGhhcyBiZWVuIG9wZW5lZCAqLworCWludCBpcl9pc29wZW47CQkJLyogSVIgcG9ydCBvcGVuCSovCisJaW50IGRldl9wcmVzZW50OwkJLyogVVNCIGRldmljZSBwcmVzZW5jZSAqLworCXN0cnVjdCBtdXRleCBjdHhfbG9jazsJCS8qIHRvIGxvY2sgdGhpcyBvYmplY3QgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCByZW1vdmVfb2s7CS8qIEZvciB1bmV4cGVjdGVkIFVTQiBkaXNjb25uZWN0cyAqLworCisJaW50IHZmZF9wcm90b182cDsJCS8qIHNvbWUgVkZEIHJlcXVpcmUgYSA2dGggcGFja2V0ICovCisKKwlzdHJ1Y3QgbGlyY19kcml2ZXIgKmRyaXZlcjsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKnJ4X2VuZHBvaW50OworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqdHhfZW5kcG9pbnQ7CisJc3RydWN0IHVyYiAqcnhfdXJiOworCXN0cnVjdCB1cmIgKnR4X3VyYjsKKwl1bnNpZ25lZCBjaGFyIHVzYl9yeF9idWZbOF07CisJdW5zaWduZWQgY2hhciB1c2JfdHhfYnVmWzhdOworCisJc3RydWN0IHJ4X2RhdGEgeworCQlpbnQgY291bnQ7CQkvKiBsZW5ndGggb2YgMCBvciAxIHNlcXVlbmNlICovCisJCWludCBwcmV2X2JpdDsJCS8qIGxvZ2ljIGxldmVsIG9mIHNlcXVlbmNlICovCisJCWludCBpbml0aWFsX3NwYWNlOwkvKiBpbml0aWFsIHNwYWNlIGZsYWcgKi8KKwl9IHJ4OworCisJc3RydWN0IHR4X3QgeworCQl1bnNpZ25lZCBjaGFyIGRhdGFfYnVmW0lNT05fREFUQV9CVUZfU1pdOyAvKiB1c2VyIGRhdGEgYnVmZmVyICovCisJCXN0cnVjdCBjb21wbGV0aW9uIGZpbmlzaGVkOwkvKiB3YWl0IGZvciB3cml0ZSB0byBmaW5pc2ggKi8KKwkJYXRvbWljX3QgYnVzeTsJCQkvKiB3cml0ZSBpbiBwcm9ncmVzcyAqLworCQlpbnQgc3RhdHVzOwkJCS8qIHN0YXR1cyBvZiB0eCBjb21wbGV0aW9uICovCisJfSB0eDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRpc3BsYXlfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gJmRpc3BsYXlfb3BlbiwKKwkud3JpdGUJCT0gJnZmZF93cml0ZSwKKwkucmVsZWFzZQk9ICZkaXNwbGF5X2Nsb3NlCit9OworCisvKgorICogVVNCIERldmljZSBJRCBmb3IgaU1PTiBVU0IgQ29udHJvbCBCb2FyZHMKKyAqCisgKiBUaGUgV2luZG93cyBkcml2ZXJzIGNvbnRhaW4gNiBkaWZmZXJlbnQgaW5mIGZpbGVzLCBtb3JlIG9yIGxlc3Mgb25lIGZvcgorICogZWFjaCBuZXcgZGV2aWNlIHVudGlsIHRoZSAweDAwMzQtMHgwMDQ2IGRldmljZXMsIHdoaWNoIGFsbCB1c2UgdGhlIHNhbWUKKyAqIGRyaXZlci4gU29tZSBvZiB0aGUgZGV2aWNlcyBpbiB0aGUgMzQtNDYgcmFuZ2UgaGF2ZW4ndCBiZWVuIGRlZmluaXRpdmVseQorICogaWRlbnRpZmllZCB5ZXQuIEVhcmx5IGRldmljZXMgaGF2ZSBlaXRoZXIgYSBUcmlHZW0gQ29tcHV0ZXIsIEluYy4gb3IgYQorICogU2Ftc3VuZyB2ZW5kb3IgSUQgKDB4MGFhOCBhbmQgMHgwNGU4IHJlc3BlY3RpdmVseSksIHdoaWxlIGFsbCBsYXRlcgorICogZGV2aWNlcyB1c2UgdGhlIFNvdW5kR3JhcGggdmVuZG9yIElEICgweDE1YzIpLgorICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaW1vbl91c2JfaWRfdGFibGVbXSA9IHsKKwkvKiBUcmlHZW0gaU1PTiAoSVIgb25seSkgLS0gVEdfaU1PTi5pbmYgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwYWE4LCAweDgwMDEpIH0sCisKKwkvKiBTb3VuZEdyYXBoIGlNT04gKElSIG9ubHkpIC0tIHNnX2ltb24uaW5mICovCisJeyBVU0JfREVWSUNFKDB4MDRlOCwgMHhmZjMwKSB9LAorCisJLyogU291bmRHcmFwaCBpTU9OIFZGRCAoSVIgJiBWRkQpIC0tIGlNT05fVkZELmluZiAqLworCXsgVVNCX0RFVklDRSgweDBhYTgsIDB4ZmZkYSkgfSwKKworCS8qIFNvdW5kR3JhcGggaU1PTiBTUyAoSVIgJiBWRkQpIC0tIGlNT05fU1MuaW5mICovCisJeyBVU0JfREVWSUNFKDB4MTVjMiwgMHhmZmRhKSB9LAorCisJe30KK307CisKKy8qIFNvbWUgaU1PTiBWRkQgbW9kZWxzIHJlcXVpcmVzIGEgNnRoIHBhY2tldCBmb3IgVkZEIHdyaXRlcyAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHZmZF9wcm90b182cF9saXN0W10gPSB7CisJeyBVU0JfREVWSUNFKDB4MTVjMiwgMHhmZmRhKSB9LAorCXt9Cit9OworCisvKiBTb21lIGlNT04gZGV2aWNlcyBoYXZlIG5vIGxjZC92ZmQsIGRvbid0IHNldCBvbmUgdXAgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpcl9vbmx5X2xpc3RbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoMHgwYWE4LCAweDgwMDEpIH0sCisJeyBVU0JfREVWSUNFKDB4MDRlOCwgMHhmZjMwKSB9LAorCXt9Cit9OworCisvKiBVU0IgRGV2aWNlIGRhdGEgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBpbW9uX2RyaXZlciA9IHsKKwkubmFtZQkJPSBNT0RfTkFNRSwKKwkucHJvYmUJCT0gaW1vbl9wcm9iZSwKKwkuZGlzY29ubmVjdAk9IGltb25fZGlzY29ubmVjdCwKKwkuc3VzcGVuZAk9IGltb25fc3VzcGVuZCwKKwkucmVzdW1lCQk9IGltb25fcmVzdW1lLAorCS5pZF90YWJsZQk9IGltb25fdXNiX2lkX3RhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIGltb25fY2xhc3MgPSB7CisJLm5hbWUJCT0gREVWSUNFX05BTUUsCisJLmZvcHMJCT0gJmRpc3BsYXlfZm9wcywKKwkubWlub3JfYmFzZQk9IERJU1BMQVlfTUlOT1JfQkFTRSwKK307CisKKy8qIHRvIHByZXZlbnQgcmFjZXMgYmV0d2VlbiBvcGVuKCkgYW5kIGRpc2Nvbm5lY3QoKSwgcHJvYmluZywgZXRjICovCitzdGF0aWMgREVGSU5FX01VVEVYKGRyaXZlcl9sb2NrKTsKKworc3RhdGljIGludCBkZWJ1ZzsKKworLyoqKiAgTSBPIEQgVSBMIEUgICBDIE8gRCBFICoqKi8KKworTU9EVUxFX0FVVEhPUihNT0RfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihNT0RfREVTQyk7CitNT0RVTEVfVkVSU0lPTihNT0RfVkVSU0lPTik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaW1vbl91c2JfaWRfdGFibGUpOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBtZXNzYWdlczogMD1ubywgMT15ZXMoZGVmYXVsdDogbm8pIik7CisKK3N0YXRpYyB2b2lkIGZyZWVfaW1vbl9jb250ZXh0KHN0cnVjdCBpbW9uX2NvbnRleHQgKmNvbnRleHQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC0+ZHJpdmVyLT5kZXY7CisJdXNiX2ZyZWVfdXJiKGNvbnRleHQtPnR4X3VyYik7CisJdXNiX2ZyZWVfdXJiKGNvbnRleHQtPnJ4X3VyYik7CisJbGlyY19idWZmZXJfZnJlZShjb250ZXh0LT5kcml2ZXItPnJidWYpOworCWtmcmVlKGNvbnRleHQtPmRyaXZlci0+cmJ1Zik7CisJa2ZyZWUoY29udGV4dC0+ZHJpdmVyKTsKKwlrZnJlZShjb250ZXh0KTsKKworCWRldl9kYmcoZGV2LCAiJXM6IGlNT04gY29udGV4dCBmcmVlZFxuIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgdm9pZCBkZXJlZ2lzdGVyX2Zyb21fbGlyYyhzdHJ1Y3QgaW1vbl9jb250ZXh0ICpjb250ZXh0KQoreworCWludCByZXR2YWw7CisJaW50IG1pbm9yID0gY29udGV4dC0+ZHJpdmVyLT5taW5vcjsKKworCXJldHZhbCA9IGxpcmNfdW5yZWdpc3Rlcl9kcml2ZXIobWlub3IpOworCWlmIChyZXR2YWwpCisJCWVycigiJXM6IHVuYWJsZSB0byBkZXJlZ2lzdGVyIGZyb20gbGlyYyglZCkiLAorCQkJX19mdW5jX18sIHJldHZhbCk7CisJZWxzZQorCQlwcmludGsoS0VSTl9JTkZPIE1PRF9OQU1FICI6IERlcmVnaXN0ZXJlZCBpTU9OIGRyaXZlciAiCisJCSAgICAgICAiKG1pbm9yOiVkKVxuIiwgbWlub3IpOworCit9CisKKy8qKgorICogQ2FsbGVkIHdoZW4gdGhlIERpc3BsYXkgZGV2aWNlIChlLmcuIC9kZXYvbGNkMCkKKyAqIGlzIG9wZW5lZCBieSB0aGUgYXBwbGljYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgZGlzcGxheV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJc3RydWN0IGltb25fY29udGV4dCAqY29udGV4dCA9IE5VTEw7CisJaW50IHN1Ym1pbm9yOworCWludCByZXR2YWwgPSAwOworCisJLyogcHJldmVudCByYWNlcyB3aXRoIGRpc2Nvbm5lY3QgKi8KKwltdXRleF9sb2NrKCZkcml2ZXJfbG9jayk7CisKKwlzdWJtaW5vciA9IGltaW5vcihpbm9kZSk7CisJaW50ZXJmYWNlID0gdXNiX2ZpbmRfaW50ZXJmYWNlKCZpbW9uX2RyaXZlciwgc3VibWlub3IpOworCWlmICghaW50ZXJmYWNlKSB7CisJCWVycigiJXM6IGNvdWxkIG5vdCBmaW5kIGludGVyZmFjZSBmb3IgbWlub3IgJWQiLAorCQkgICAgX19mdW5jX18sIHN1Ym1pbm9yKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBleGl0OworCX0KKwljb250ZXh0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCisJaWYgKCFjb250ZXh0KSB7CisJCWVycigiJXM6IG5vIGNvbnRleHQgZm91bmQgZm9yIG1pbm9yICVkIiwKKwkJCQkJX19mdW5jX18sIHN1Ym1pbm9yKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBleGl0OworCX0KKworCW11dGV4X2xvY2soJmNvbnRleHQtPmN0eF9sb2NrKTsKKworCWlmICghY29udGV4dC0+ZGlzcGxheSkgeworCQllcnIoIiVzOiBkaXNwbGF5IG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlIiwgX19mdW5jX18pOworCQlyZXR2YWwgPSAtRU5PREVWOworCX0gZWxzZSBpZiAoY29udGV4dC0+ZGlzcGxheV9pc29wZW4pIHsKKwkJZXJyKCIlczogZGlzcGxheSBwb3J0IGlzIGFscmVhZHkgb3BlbiIsIF9fZnVuY19fKTsKKwkJcmV0dmFsID0gLUVCVVNZOworCX0gZWxzZSB7CisJCWNvbnRleHQtPmRpc3BsYXlfaXNvcGVuID0gMTsKKwkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gY29udGV4dDsKKwkJZGV2X2luZm8oY29udGV4dC0+ZHJpdmVyLT5kZXYsICJkaXNwbGF5IHBvcnQgb3BlbmVkXG4iKTsKKwl9CisKKwltdXRleF91bmxvY2soJmNvbnRleHQtPmN0eF9sb2NrKTsKKworZXhpdDoKKwltdXRleF91bmxvY2soJmRyaXZlcl9sb2NrKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioKKyAqIENhbGxlZCB3aGVuIHRoZSBkaXNwbGF5IGRldmljZSAoZS5nLiAvZGV2L2xjZDApCisgKiBpcyBjbG9zZWQgYnkgdGhlIGFwcGxpY2F0aW9uLgorICovCitzdGF0aWMgaW50IGRpc3BsYXlfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGltb25fY29udGV4dCAqY29udGV4dCA9IE5VTEw7CisJaW50IHJldHZhbCA9IDA7CisKKwljb250ZXh0ID0gKHN0cnVjdCBpbW9uX2NvbnRleHQgKilmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoIWNvbnRleHQpIHsKKwkJZXJyKCIlczogbm8gY29udGV4dCBmb3IgZGV2aWNlIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwltdXRleF9sb2NrKCZjb250ZXh0LT5jdHhfbG9jayk7CisKKwlpZiAoIWNvbnRleHQtPmRpc3BsYXkpIHsKKwkJZXJyKCIlczogZGlzcGxheSBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZSIsIF9fZnVuY19fKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwl9IGVsc2UgaWYgKCFjb250ZXh0LT5kaXNwbGF5X2lzb3BlbikgeworCQllcnIoIiVzOiBkaXNwbGF5IGlzIG5vdCBvcGVuIiwgX19mdW5jX18pOworCQlyZXR2YWwgPSAtRUlPOworCX0gZWxzZSB7CisJCWNvbnRleHQtPmRpc3BsYXlfaXNvcGVuID0gMDsKKwkJZGV2X2luZm8oY29udGV4dC0+ZHJpdmVyLT5kZXYsICJkaXNwbGF5IHBvcnQgY2xvc2VkXG4iKTsKKwkJaWYgKCFjb250ZXh0LT5kZXZfcHJlc2VudCAmJiAhY29udGV4dC0+aXJfaXNvcGVuKSB7CisJCQkvKgorCQkJICogRGV2aWNlIGRpc2Nvbm5lY3RlZCBiZWZvcmUgY2xvc2UgYW5kIElSIHBvcnQgaXMgbm90CisJCQkgKiBvcGVuLiBJZiBJUiBwb3J0IGlzIG9wZW4sIGNvbnRleHQgd2lsbCBiZSBkZWxldGVkIGJ5CisJCQkgKiBpcl9jbG9zZS4KKwkJCSAqLworCQkJbXV0ZXhfdW5sb2NrKCZjb250ZXh0LT5jdHhfbG9jayk7CisJCQlmcmVlX2ltb25fY29udGV4dChjb250ZXh0KTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwl9CisKKwltdXRleF91bmxvY2soJmNvbnRleHQtPmN0eF9sb2NrKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioKKyAqIFNlbmRzIGEgcGFja2V0IHRvIHRoZSBkZXZpY2UgLS0gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZAorICogd2l0aCBjb250ZXh0LT5jdHhfbG9jayBoZWxkLgorICovCitzdGF0aWMgaW50IHNlbmRfcGFja2V0KHN0cnVjdCBpbW9uX2NvbnRleHQgKmNvbnRleHQpCit7CisJdW5zaWduZWQgaW50IHBpcGU7CisJaW50IGludGVydmFsID0gMDsKKwlpbnQgcmV0dmFsID0gMDsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjb250cm9sX3JlcSA9IE5VTEw7CisKKwkvKiBDaGVjayBpZiB3ZSBuZWVkIHRvIHVzZSBjb250cm9sIG9yIGludGVycnVwdCB1cmIgKi8KKwlwaXBlID0gdXNiX3NuZGludHBpcGUoY29udGV4dC0+dXNiZGV2LAorCQkJICAgICAgY29udGV4dC0+dHhfZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpOworCWludGVydmFsID0gY29udGV4dC0+dHhfZW5kcG9pbnQtPmJJbnRlcnZhbDsKKworCXVzYl9maWxsX2ludF91cmIoY29udGV4dC0+dHhfdXJiLCBjb250ZXh0LT51c2JkZXYsIHBpcGUsCisJCQkgY29udGV4dC0+dXNiX3R4X2J1ZiwKKwkJCSBzaXplb2YoY29udGV4dC0+dXNiX3R4X2J1ZiksCisJCQkgdXNiX3R4X2NhbGxiYWNrLCBjb250ZXh0LCBpbnRlcnZhbCk7CisKKwljb250ZXh0LT50eF91cmItPmFjdHVhbF9sZW5ndGggPSAwOworCisJaW5pdF9jb21wbGV0aW9uKCZjb250ZXh0LT50eC5maW5pc2hlZCk7CisJYXRvbWljX3NldCgmKGNvbnRleHQtPnR4LmJ1c3kpLCAxKTsKKworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKGNvbnRleHQtPnR4X3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldHZhbCkgeworCQlhdG9taWNfc2V0KCYoY29udGV4dC0+dHguYnVzeSksIDApOworCQllcnIoIiVzOiBlcnJvciBzdWJtaXR0aW5nIHVyYiglZCkiLCBfX2Z1bmNfXywgcmV0dmFsKTsKKwl9IGVsc2UgeworCQkvKiBXYWl0IGZvciB0cmFuc21pc3Npb24gdG8gY29tcGxldGUgKG9yIGFib3J0KSAqLworCQltdXRleF91bmxvY2soJmNvbnRleHQtPmN0eF9sb2NrKTsKKwkJcmV0dmFsID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKAorCQkJCSZjb250ZXh0LT50eC5maW5pc2hlZCk7CisJCWlmIChyZXR2YWwpCisJCQllcnIoIiVzOiB0YXNrIGludGVycnVwdGVkIiwgX19mdW5jX18pOworCQltdXRleF9sb2NrKCZjb250ZXh0LT5jdHhfbG9jayk7CisKKwkJcmV0dmFsID0gY29udGV4dC0+dHguc3RhdHVzOworCQlpZiAocmV0dmFsKQorCQkJZXJyKCIlczogcGFja2V0IHR4IGZhaWxlZCAoJWQpIiwgX19mdW5jX18sIHJldHZhbCk7CisJfQorCisJa2ZyZWUoY29udHJvbF9yZXEpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisgKiBXcml0ZXMgZGF0YSB0byB0aGUgVkZELiAgVGhlIGlNT04gVkZEIGlzIDJ4MTYgY2hhcmFjdGVycworICogYW5kIHJlcXVpcmVzIGRhdGEgaW4gNSBjb25zZWN1dGl2ZSBVU0IgaW50ZXJydXB0IHBhY2tldHMsCisgKiBlYWNoIHBhY2tldCBidXQgdGhlIGxhc3QgY2FycnlpbmcgNyBieXRlcy4KKyAqCisgKiBJIGRvbid0IGtub3cgaWYgdGhlIFZGRCBib2FyZCBzdXBwb3J0cyBmZWF0dXJlcyBzdWNoIGFzCisgKiBzY3JvbGxpbmcsIGNsZWFyaW5nIHJvd3MsIGJsYW5raW5nLCBldGMuIHNvIGF0CisgKiB0aGUgY2FsbGVyIG11c3QgcHJvdmlkZSBhIGZ1bGwgc2NyZWVuIG9mIGRhdGEuICBJZiBmZXdlcgorICogdGhhbiAzMiBieXRlcyBhcmUgcHJvdmlkZWQgc3BhY2VzIHdpbGwgYmUgYXBwZW5kZWQgdG8KKyAqIGdlbmVyYXRlIGEgZnVsbCBzY3JlZW4uCisgKi8KK3N0YXRpYyBzc2l6ZV90IHZmZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmLAorCQkJIHNpemVfdCBuX2J5dGVzLCBsb2ZmX3QgKnBvcykKK3sKKwlpbnQgaTsKKwlpbnQgb2Zmc2V0OworCWludCBzZXE7CisJaW50IHJldHZhbCA9IDA7CisJc3RydWN0IGltb25fY29udGV4dCAqY29udGV4dDsKKwljb25zdCB1bnNpZ25lZCBjaGFyIHZmZF9wYWNrZXQ2W10gPSB7CisJCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkYsIDB4RkYgfTsKKwlpbnQgKmRhdGFfYnVmOworCisJY29udGV4dCA9IChzdHJ1Y3QgaW1vbl9jb250ZXh0ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCWlmICghY29udGV4dCkgeworCQllcnIoIiVzOiBubyBjb250ZXh0IGZvciBkZXZpY2UiLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCW11dGV4X2xvY2soJmNvbnRleHQtPmN0eF9sb2NrKTsKKworCWlmICghY29udGV4dC0+ZGV2X3ByZXNlbnQpIHsKKwkJZXJyKCIlczogbm8gaU1PTiBkZXZpY2UgcHJlc2VudCIsIF9fZnVuY19fKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBleGl0OworCX0KKworCWlmIChuX2J5dGVzIDw9IDAgfHwgbl9ieXRlcyA+IElNT05fREFUQV9CVUZfU1ogLSAzKSB7CisJCWVycigiJXM6IGludmFsaWQgcGF5bG9hZCBzaXplIiwgX19mdW5jX18pOworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGF0YV9idWYgPSBtZW1kdXBfdXNlcihidWYsIG5fYnl0ZXMpOworCWlmIChJU19FUlIoZGF0YV9idWYpKSB7CisJCXJldHZhbCA9IFBUUl9FUlIoZGF0YV9idWYpOworCQlnb3RvIGV4aXQ7CisJfQorCisJbWVtY3B5KGNvbnRleHQtPnR4LmRhdGFfYnVmLCBkYXRhX2J1Ziwgbl9ieXRlcyk7CisKKwkvKiBQYWQgd2l0aCBzcGFjZXMgKi8KKwlmb3IgKGkgPSBuX2J5dGVzOyBpIDwgSU1PTl9EQVRBX0JVRl9TWiAtIDM7ICsraSkKKwkJY29udGV4dC0+dHguZGF0YV9idWZbaV0gPSAnICc7CisKKwlmb3IgKGkgPSBJTU9OX0RBVEFfQlVGX1NaIC0gMzsgaSA8IElNT05fREFUQV9CVUZfU1o7ICsraSkKKwkJY29udGV4dC0+dHguZGF0YV9idWZbaV0gPSAweEZGOworCisJb2Zmc2V0ID0gMDsKKwlzZXEgPSAwOworCisJZG8geworCQltZW1jcHkoY29udGV4dC0+dXNiX3R4X2J1ZiwgY29udGV4dC0+dHguZGF0YV9idWYgKyBvZmZzZXQsIDcpOworCQljb250ZXh0LT51c2JfdHhfYnVmWzddID0gKHVuc2lnbmVkIGNoYXIpIHNlcTsKKworCQlyZXR2YWwgPSBzZW5kX3BhY2tldChjb250ZXh0KTsKKwkJaWYgKHJldHZhbCkgeworCQkJZXJyKCIlczogc2VuZCBwYWNrZXQgZmFpbGVkIGZvciBwYWNrZXQgIyVkIiwKKwkJCQkJX19mdW5jX18sIHNlcS8yKTsKKwkJCWdvdG8gZXhpdDsKKwkJfSBlbHNlIHsKKwkJCXNlcSArPSAyOworCQkJb2Zmc2V0ICs9IDc7CisJCX0KKworCX0gd2hpbGUgKG9mZnNldCA8IElNT05fREFUQV9CVUZfU1opOworCisJaWYgKGNvbnRleHQtPnZmZF9wcm90b182cCkgeworCQkvKiBTZW5kIHBhY2tldCAjNiAqLworCQltZW1jcHkoY29udGV4dC0+dXNiX3R4X2J1ZiwgJnZmZF9wYWNrZXQ2LCBzaXplb2YodmZkX3BhY2tldDYpKTsKKwkJY29udGV4dC0+dXNiX3R4X2J1Zls3XSA9ICh1bnNpZ25lZCBjaGFyKSBzZXE7CisJCXJldHZhbCA9IHNlbmRfcGFja2V0KGNvbnRleHQpOworCQlpZiAocmV0dmFsKQorCQkJZXJyKCIlczogc2VuZCBwYWNrZXQgZmFpbGVkIGZvciBwYWNrZXQgIyVkIiwKKwkJCQkJX19mdW5jX18sIHNlcS8yKTsKKwl9CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZjb250ZXh0LT5jdHhfbG9jayk7CisKKwlyZXR1cm4gKCFyZXR2YWwpID8gbl9ieXRlcyA6IHJldHZhbDsKK30KKworLyoqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgVVNCIGNvcmUgQVBJOiB0cmFuc21pdCBkYXRhCisgKi8KK3N0YXRpYyB2b2lkIHVzYl90eF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGltb25fY29udGV4dCAqY29udGV4dDsKKworCWlmICghdXJiKQorCQlyZXR1cm47CisJY29udGV4dCA9IChzdHJ1Y3QgaW1vbl9jb250ZXh0ICopdXJiLT5jb250ZXh0OworCWlmICghY29udGV4dCkKKwkJcmV0dXJuOworCisJY29udGV4dC0+dHguc3RhdHVzID0gdXJiLT5zdGF0dXM7CisKKwkvKiBub3RpZnkgd2FpdGVycyB0aGF0IHdyaXRlIGhhcyBmaW5pc2hlZCAqLworCWF0b21pY19zZXQoJmNvbnRleHQtPnR4LmJ1c3ksIDApOworCWNvbXBsZXRlKCZjb250ZXh0LT50eC5maW5pc2hlZCk7CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogQ2FsbGVkIGJ5IGxpcmNfZGV2IHdoZW4gdGhlIGFwcGxpY2F0aW9uIG9wZW5zIC9kZXYvbGlyYworICovCitzdGF0aWMgaW50IGlyX29wZW4odm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0dmFsID0gMDsKKwlzdHJ1Y3QgaW1vbl9jb250ZXh0ICpjb250ZXh0OworCisJLyogcHJldmVudCByYWNlcyB3aXRoIGRpc2Nvbm5lY3QgKi8KKwltdXRleF9sb2NrKCZkcml2ZXJfbG9jayk7CisKKwljb250ZXh0ID0gKHN0cnVjdCBpbW9uX2NvbnRleHQgKilkYXRhOworCisJLyogaW5pdGlhbCBJUiBwcm90b2NvbCBkZWNvZGUgdmFyaWFibGVzICovCisJY29udGV4dC0+cnguY291bnQgPSAwOworCWNvbnRleHQtPnJ4LmluaXRpYWxfc3BhY2UgPSAxOworCWNvbnRleHQtPnJ4LnByZXZfYml0ID0gMDsKKworCWNvbnRleHQtPmlyX2lzb3BlbiA9IDE7CisJZGV2X2luZm8oY29udGV4dC0+ZHJpdmVyLT5kZXYsICJJUiBwb3J0IG9wZW5lZFxuIik7CisKKwltdXRleF91bmxvY2soJmRyaXZlcl9sb2NrKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioKKyAqIENhbGxlZCBieSBsaXJjX2RldiB3aGVuIHRoZSBhcHBsaWNhdGlvbiBjbG9zZXMgL2Rldi9saXJjCisgKi8KK3N0YXRpYyB2b2lkIGlyX2Nsb3NlKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGltb25fY29udGV4dCAqY29udGV4dDsKKworCWNvbnRleHQgPSAoc3RydWN0IGltb25fY29udGV4dCAqKWRhdGE7CisJaWYgKCFjb250ZXh0KSB7CisJCWVycigiJXM6IG5vIGNvbnRleHQgZm9yIGRldmljZSIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCW11dGV4X2xvY2soJmNvbnRleHQtPmN0eF9sb2NrKTsKKworCWNvbnRleHQtPmlyX2lzb3BlbiA9IDA7CisJZGV2X2luZm8oY29udGV4dC0+ZHJpdmVyLT5kZXYsICJJUiBwb3J0IGNsb3NlZFxuIik7CisKKwlpZiAoIWNvbnRleHQtPmRldl9wcmVzZW50KSB7CisJCS8qCisJCSAqIERldmljZSBkaXNjb25uZWN0ZWQgd2hpbGUgSVIgcG9ydCB3YXMgc3RpbGwgb3Blbi4gRHJpdmVyCisJCSAqIHdhcyBub3QgZGVyZWdpc3RlcmVkIGF0IGRpc2Nvbm5lY3QgdGltZSwgc28gZG8gaXQgbm93LgorCQkgKi8KKwkJZGVyZWdpc3Rlcl9mcm9tX2xpcmMoY29udGV4dCk7CisKKwkJaWYgKCFjb250ZXh0LT5kaXNwbGF5X2lzb3BlbikgeworCQkJbXV0ZXhfdW5sb2NrKCZjb250ZXh0LT5jdHhfbG9jayk7CisJCQlmcmVlX2ltb25fY29udGV4dChjb250ZXh0KTsKKwkJCXJldHVybjsKKwkJfQorCQkvKgorCQkgKiBJZiBkaXNwbGF5IHBvcnQgaXMgb3BlbiwgY29udGV4dCB3aWxsIGJlIGRlbGV0ZWQgYnkKKwkJICogZGlzcGxheV9jbG9zZQorCQkgKi8KKwl9CisKKwltdXRleF91bmxvY2soJmNvbnRleHQtPmN0eF9sb2NrKTsKKwlyZXR1cm47Cit9CisKKy8qKgorICogQ29udmVydCBiaXQgY291bnQgdG8gdGltZSBkdXJhdGlvbiAoaW4gdXMpIGFuZCBzdWJtaXQKKyAqIHRoZSB2YWx1ZSB0byBsaXJjX2Rldi4KKyAqLworc3RhdGljIHZvaWQgc3VibWl0X2RhdGEoc3RydWN0IGltb25fY29udGV4dCAqY29udGV4dCkKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1Zls0XTsKKwlpbnQgdmFsdWUgPSBjb250ZXh0LT5yeC5jb3VudDsKKwlpbnQgaTsKKworCWRldl9kYmcoY29udGV4dC0+ZHJpdmVyLT5kZXYsICJzdWJtaXR0aW5nIGRhdGEgdG8gTElSQ1xuIik7CisKKwl2YWx1ZSAqPSBCSVRfRFVSQVRJT047CisJdmFsdWUgJj0gUFVMU0VfTUFTSzsKKwlpZiAoY29udGV4dC0+cngucHJldl9iaXQpCisJCXZhbHVlIHw9IFBVTFNFX0JJVDsKKworCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpCisJCWJ1ZltpXSA9IHZhbHVlPj4oaSo4KTsKKworCWxpcmNfYnVmZmVyX3dyaXRlKGNvbnRleHQtPmRyaXZlci0+cmJ1ZiwgYnVmKTsKKwl3YWtlX3VwKCZjb250ZXh0LT5kcml2ZXItPnJidWYtPndhaXRfcG9sbCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIGludCB0djJpbnQoY29uc3Qgc3RydWN0IHRpbWV2YWwgKmEsIGNvbnN0IHN0cnVjdCB0aW1ldmFsICpiKQoreworCWludCB1c2VjcyA9IDA7CisJaW50IHNlYyAgID0gMDsKKworCWlmIChiLT50dl91c2VjID4gYS0+dHZfdXNlYykgeworCQl1c2VjcyA9IDEwMDAwMDA7CisJCXNlYy0tOworCX0KKworCXVzZWNzICs9IGEtPnR2X3VzZWMgLSBiLT50dl91c2VjOworCisJc2VjICs9IGEtPnR2X3NlYyAtIGItPnR2X3NlYzsKKwlzZWMgKj0gMTAwMDsKKwl1c2VjcyAvPSAxMDAwOworCXNlYyArPSB1c2VjczsKKworCWlmIChzZWMgPCAwKQorCQlzZWMgPSAxMDAwOworCisJcmV0dXJuIHNlYzsKK30KKworLyoqCisgKiBQcm9jZXNzIHRoZSBpbmNvbWluZyBwYWNrZXQKKyAqLworc3RhdGljIHZvaWQgaW1vbl9pbmNvbWluZ19wYWNrZXQoc3RydWN0IGltb25fY29udGV4dCAqY29udGV4dCwKKwkJCQkgc3RydWN0IHVyYiAqdXJiLCBpbnQgaW50ZikKK3sKKwlpbnQgbGVuID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRleHQtPmRyaXZlci0+ZGV2OworCWludCBvY3RldCwgYml0OworCXVuc2lnbmVkIGNoYXIgbWFzazsKKwlpbnQgaSwgY2h1bmtfbnVtOworCisJLyoKKwkgKiBqdXN0IGJhaWwgb3V0IGlmIG5vIGxpc3RlbmluZyBJUiBjbGllbnQKKwkgKi8KKwlpZiAoIWNvbnRleHQtPmlyX2lzb3BlbikKKwkJcmV0dXJuOworCisJaWYgKGxlbiAhPSA4KSB7CisJCWRldl93YXJuKGRldiwgImltb24gJXM6IGludmFsaWQgaW5jb21pbmcgcGFja2V0ICIKKwkJCSAic2l6ZSAobGVuID0gJWQsIGludGYlZClcbiIsIF9fZnVuY19fLCBsZW4sIGludGYpOworCQlyZXR1cm47CisJfQorCisJaWYgKGRlYnVnKSB7CisJCXByaW50ayhLRVJOX0lORk8gInJhdyBwYWNrZXQ6ICIpOworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpCisJCQlwcmludGsoIiUwMnggIiwgYnVmW2ldKTsKKwkJcHJpbnRrKCJcbiIpOworCX0KKworCS8qCisJICogVHJhbnNsYXRlIHJlY2VpdmVkIGRhdGEgdG8gcHVsc2UgYW5kIHNwYWNlIGxlbmd0aHMuCisJICogUmVjZWl2ZWQgZGF0YSBpcyBhY3RpdmUgbG93LCBpLmUuIHB1bHNlcyBhcmUgMCBhbmQKKwkgKiBzcGFjZXMgYXJlIDEuCisJICoKKwkgKiBNeSBvcmlnaW5hbCBhbGdvcml0aG0gd2FzIGVzc2VudGlhbGx5IHNpbWlsYXIgdG8KKwkgKiBDaGFuZ3dvbyBSeXUncyB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCBoZSBzd2l0Y2hlZAorCSAqIHRoZSBpbmNvbWluZyBiaXRzIHRvIGFjdGl2ZSBoaWdoIGFuZCBhbHNvIGZlZCBhbgorCSAqIGluaXRpYWwgc3BhY2UgdG8gTElSQyBhdCB0aGUgc3RhcnQgb2YgYSBuZXcgc2VxdWVuY2UKKwkgKiBpZiB0aGUgcHJldmlvdXMgYml0IHdhcyBhIHB1bHNlLgorCSAqCisJICogSSd2ZSBkZWNpZGVkIHRvIGFkb3B0IGhpcyBhbGdvcml0aG0uCisJICovCisKKwlpZiAoYnVmWzddID09IDEgJiYgY29udGV4dC0+cnguaW5pdGlhbF9zcGFjZSkgeworCQkvKiBMSVJDIHJlcXVpcmVzIGEgbGVhZGluZyBzcGFjZSAqLworCQljb250ZXh0LT5yeC5wcmV2X2JpdCA9IDA7CisJCWNvbnRleHQtPnJ4LmNvdW50ID0gNDsKKwkJc3VibWl0X2RhdGEoY29udGV4dCk7CisJCWNvbnRleHQtPnJ4LmNvdW50ID0gMDsKKwl9CisKKwlmb3IgKG9jdGV0ID0gMDsgb2N0ZXQgPCA1OyArK29jdGV0KSB7CisJCW1hc2sgPSAweDgwOworCQlmb3IgKGJpdCA9IDA7IGJpdCA8IDg7ICsrYml0KSB7CisJCQlpbnQgY3Vycl9iaXQgPSAhKGJ1ZltvY3RldF0gJiBtYXNrKTsKKwkJCWlmIChjdXJyX2JpdCAhPSBjb250ZXh0LT5yeC5wcmV2X2JpdCkgeworCQkJCWlmIChjb250ZXh0LT5yeC5jb3VudCkgeworCQkJCQlzdWJtaXRfZGF0YShjb250ZXh0KTsKKwkJCQkJY29udGV4dC0+cnguY291bnQgPSAwOworCQkJCX0KKwkJCQljb250ZXh0LT5yeC5wcmV2X2JpdCA9IGN1cnJfYml0OworCQkJfQorCQkJKytjb250ZXh0LT5yeC5jb3VudDsKKwkJCW1hc2sgPj49IDE7CisJCX0KKwl9CisKKwlpZiAoY2h1bmtfbnVtID09IDEwKSB7CisJCWlmIChjb250ZXh0LT5yeC5jb3VudCkgeworCQkJc3VibWl0X2RhdGEoY29udGV4dCk7CisJCQljb250ZXh0LT5yeC5jb3VudCA9IDA7CisJCX0KKwkJY29udGV4dC0+cnguaW5pdGlhbF9zcGFjZSA9IGNvbnRleHQtPnJ4LnByZXZfYml0OworCX0KK30KKworLyoqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgVVNCIGNvcmUgQVBJOiByZWNlaXZlIGRhdGEKKyAqLworc3RhdGljIHZvaWQgdXNiX3J4X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgaW1vbl9jb250ZXh0ICpjb250ZXh0OworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwlpbnQgbGVuOworCWludCBpbnRmbnVtID0gMDsKKworCWlmICghdXJiKQorCQlyZXR1cm47CisKKwljb250ZXh0ID0gKHN0cnVjdCBpbW9uX2NvbnRleHQgKil1cmItPmNvbnRleHQ7CisJaWYgKCFjb250ZXh0KQorCQlyZXR1cm47CisKKwlidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlsZW4gPSB1cmItPmFjdHVhbF9sZW5ndGg7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAtRU5PRU5UOgkJLyogdXNiY29yZSB1bmxpbmsgc3VjY2Vzc2Z1bCEgKi8KKwkJcmV0dXJuOworCisJY2FzZSAwOgorCQlpbW9uX2luY29taW5nX3BhY2tldChjb250ZXh0LCB1cmIsIGludGZudW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRldl93YXJuKGNvbnRleHQtPmRyaXZlci0+ZGV2LCAiaW1vbiAlczogc3RhdHVzKCVkKTogaWdub3JlZFxuIiwKKwkJCSBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOworCQlicmVhazsKKwl9CisKKwl1c2Jfc3VibWl0X3VyYihjb250ZXh0LT5yeF91cmIsIEdGUF9BVE9NSUMpOworCisJcmV0dXJuOworfQorCisvKioKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBVU0IgY29yZSBBUEk6IFByb2JlCisgKi8KK3N0YXRpYyBpbnQgaW1vbl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiA9IE5VTEw7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYyA9IE5VTEw7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpyeF9lbmRwb2ludCA9IE5VTEw7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICp0eF9lbmRwb2ludCA9IE5VTEw7CisJc3RydWN0IHVyYiAqcnhfdXJiID0gTlVMTDsKKwlzdHJ1Y3QgdXJiICp0eF91cmIgPSBOVUxMOworCXN0cnVjdCBsaXJjX2RyaXZlciAqZHJpdmVyID0gTlVMTDsKKwlzdHJ1Y3QgbGlyY19idWZmZXIgKnJidWYgPSBOVUxMOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpbnRlcmZhY2UtPmRldjsKKwlpbnQgaWZudW07CisJaW50IGxpcmNfbWlub3IgPSAwOworCWludCBudW1fZW5kcHRzOworCWludCByZXR2YWwgPSAwOworCWludCBkaXNwbGF5X2VwX2ZvdW5kID0gMDsKKwlpbnQgaXJfZXBfZm91bmQgPSAwOworCWludCBhbGxvY19zdGF0dXMgPSAwOworCWludCB2ZmRfcHJvdG9fNnAgPSAwOworCWludCBjb2RlX2xlbmd0aDsKKwlzdHJ1Y3QgaW1vbl9jb250ZXh0ICpjb250ZXh0ID0gTlVMTDsKKwlpbnQgaTsKKwl1MTYgdmVuZG9yLCBwcm9kdWN0OworCisJY29udGV4dCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpbW9uX2NvbnRleHQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvbnRleHQpIHsKKwkJZXJyKCIlczoga3phbGxvYyBmYWlsZWQgZm9yIGNvbnRleHQiLCBfX2Z1bmNfXyk7CisJCWFsbG9jX3N0YXR1cyA9IDE7CisJCWdvdG8gYWxsb2Nfc3RhdHVzX3N3aXRjaDsKKwl9CisKKwkvKgorCSAqIFRyeSB0byBhdXRvLWRldGVjdCB0aGUgdHlwZSBvZiBkaXNwbGF5IGlmIHRoZSB1c2VyIGhhc24ndCBzZXQKKwkgKiBpdCBieSBoYW5kIHZpYSB0aGUgZGlzcGxheV90eXBlIG1vZHBhcmFtLiBEZWZhdWx0IGlzIFZGRC4KKwkgKi8KKwlpZiAodXNiX21hdGNoX2lkKGludGVyZmFjZSwgaXJfb25seV9saXN0KSkKKwkJY29udGV4dC0+ZGlzcGxheSA9IDA7CisJZWxzZQorCQljb250ZXh0LT5kaXNwbGF5ID0gMTsKKworCWNvZGVfbGVuZ3RoID0gQlVGX0NIVU5LX1NJWkUgKiA4OworCisJdXNiZGV2ICAgICA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7CisJaWZhY2VfZGVzYyA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7CisJbnVtX2VuZHB0cyA9IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsKKwlpZm51bSAgICAgID0gaWZhY2VfZGVzYy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworCXZlbmRvciAgICAgPSBsZTE2X3RvX2NwdSh1c2JkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOworCXByb2R1Y3QgICAgPSBsZTE2X3RvX2NwdSh1c2JkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKworCWRldl9kYmcoZGV2LCAiJXM6IGZvdW5kIGlNT04gZGV2aWNlICglMDR4OiUwNHgsIGludGYlZClcbiIsCisJCV9fZnVuY19fLCB2ZW5kb3IsIHByb2R1Y3QsIGlmbnVtKTsKKworCS8qIHByZXZlbnQgcmFjZXMgcHJvYmluZyBkZXZpY2VzIHcvbXVsdGlwbGUgaW50ZXJmYWNlcyAqLworCW11dGV4X2xvY2soJmRyaXZlcl9sb2NrKTsKKworCS8qCisJICogU2NhbiB0aGUgZW5kcG9pbnQgbGlzdCBhbmQgc2V0OgorCSAqCWZpcnN0IGlucHV0IGVuZHBvaW50ID0gSVIgZW5kcG9pbnQKKwkgKglmaXJzdCBvdXRwdXQgZW5kcG9pbnQgPSBkaXNwbGF5IGVuZHBvaW50CisJICovCisJZm9yIChpID0gMDsgaSA8IG51bV9lbmRwdHMgJiYgIShpcl9lcF9mb3VuZCAmJiBkaXNwbGF5X2VwX2ZvdW5kKTsgKytpKSB7CisJCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXA7CisJCWludCBlcF9kaXI7CisJCWludCBlcF90eXBlOworCQllcCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjOworCQllcF9kaXIgPSBlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSzsKKwkJZXBfdHlwZSA9IGVwLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSzsKKworCQlpZiAoIWlyX2VwX2ZvdW5kICYmCisJCQllcF9kaXIgPT0gVVNCX0RJUl9JTiAmJgorCQkJZXBfdHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpIHsKKworCQkJcnhfZW5kcG9pbnQgPSBlcDsKKwkJCWlyX2VwX2ZvdW5kID0gMTsKKwkJCWRldl9kYmcoZGV2LCAiJXM6IGZvdW5kIElSIGVuZHBvaW50XG4iLCBfX2Z1bmNfXyk7CisKKwkJfSBlbHNlIGlmICghZGlzcGxheV9lcF9mb3VuZCAmJiBlcF9kaXIgPT0gVVNCX0RJUl9PVVQgJiYKKwkJCSAgIGVwX3R5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UKSB7CisJCQl0eF9lbmRwb2ludCA9IGVwOworCQkJZGlzcGxheV9lcF9mb3VuZCA9IDE7CisJCQlkZXZfZGJnKGRldiwgIiVzOiBmb3VuZCBkaXNwbGF5IGVuZHBvaW50XG4iLCBfX2Z1bmNfXyk7CisJCX0KKwl9CisKKwkvKgorCSAqIFNvbWUgaU1PTiByZWNlaXZlcnMgaGF2ZSBubyBkaXNwbGF5LiBVbmZvcnR1bmF0ZWx5LCBpdCBzZWVtcworCSAqIHRoYXQgU291bmRHcmFwaCByZWN5Y2xlcyBkZXZpY2UgSURzIGJldHdlZW4gZGV2aWNlcyBib3RoIHdpdGgKKwkgKiBhbmQgd2l0aG91dC4uLiA6XAorCSAqLworCWlmIChjb250ZXh0LT5kaXNwbGF5ID09IDApIHsKKwkJZGlzcGxheV9lcF9mb3VuZCA9IDA7CisJCWRldl9kYmcoZGV2LCAiJXM6IGRldmljZSBoYXMgbm8gZGlzcGxheVxuIiwgX19mdW5jX18pOworCX0KKworCS8qIElucHV0IGVuZHBvaW50IGlzIG1hbmRhdG9yeSAqLworCWlmICghaXJfZXBfZm91bmQpIHsKKwkJZXJyKCIlczogbm8gdmFsaWQgaW5wdXQgKElSKSBlbmRwb2ludCBmb3VuZC4iLCBfX2Z1bmNfXyk7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWFsbG9jX3N0YXR1cyA9IDI7CisJCWdvdG8gYWxsb2Nfc3RhdHVzX3N3aXRjaDsKKwl9CisKKwkvKiBEZXRlcm1pbmUgaWYgZGlzcGxheSByZXF1aXJlcyA2IHBhY2tldHMgKi8KKwlpZiAoZGlzcGxheV9lcF9mb3VuZCkgeworCQlpZiAodXNiX21hdGNoX2lkKGludGVyZmFjZSwgdmZkX3Byb3RvXzZwX2xpc3QpKQorCQkJdmZkX3Byb3RvXzZwID0gMTsKKworCQlkZXZfZGJnKGRldiwgIiVzOiB2ZmRfcHJvdG9fNnA6ICVkXG4iLAorCQkJX19mdW5jX18sIHZmZF9wcm90b182cCk7CisJfQorCisJZHJpdmVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxpcmNfZHJpdmVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkcml2ZXIpIHsKKwkJZXJyKCIlczoga3phbGxvYyBmYWlsZWQgZm9yIGxpcmNfZHJpdmVyIiwgX19mdW5jX18pOworCQlhbGxvY19zdGF0dXMgPSAyOworCQlnb3RvIGFsbG9jX3N0YXR1c19zd2l0Y2g7CisJfQorCXJidWYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGlyY19idWZmZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJidWYpIHsKKwkJZXJyKCIlczoga21hbGxvYyBmYWlsZWQgZm9yIGxpcmNfYnVmZmVyIiwgX19mdW5jX18pOworCQlhbGxvY19zdGF0dXMgPSAzOworCQlnb3RvIGFsbG9jX3N0YXR1c19zd2l0Y2g7CisJfQorCWlmIChsaXJjX2J1ZmZlcl9pbml0KHJidWYsIEJVRl9DSFVOS19TSVpFLCBCVUZfU0laRSkpIHsKKwkJZXJyKCIlczogbGlyY19idWZmZXJfaW5pdCBmYWlsZWQiLCBfX2Z1bmNfXyk7CisJCWFsbG9jX3N0YXR1cyA9IDQ7CisJCWdvdG8gYWxsb2Nfc3RhdHVzX3N3aXRjaDsKKwl9CisJcnhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJ4X3VyYikgeworCQllcnIoIiVzOiB1c2JfYWxsb2NfdXJiIGZhaWxlZCBmb3IgSVIgdXJiIiwgX19mdW5jX18pOworCQlhbGxvY19zdGF0dXMgPSA1OworCQlnb3RvIGFsbG9jX3N0YXR1c19zd2l0Y2g7CisJfQorCXR4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0eF91cmIpIHsKKwkJZXJyKCIlczogdXNiX2FsbG9jX3VyYiBmYWlsZWQgZm9yIGRpc3BsYXkgdXJiIiwKKwkJICAgIF9fZnVuY19fKTsKKwkJYWxsb2Nfc3RhdHVzID0gNjsKKwkJZ290byBhbGxvY19zdGF0dXNfc3dpdGNoOworCX0KKworCW11dGV4X2luaXQoJmNvbnRleHQtPmN0eF9sb2NrKTsKKwljb250ZXh0LT52ZmRfcHJvdG9fNnAgPSB2ZmRfcHJvdG9fNnA7CisKKwlzdHJjcHkoZHJpdmVyLT5uYW1lLCBNT0RfTkFNRSk7CisJZHJpdmVyLT5taW5vciA9IC0xOworCWRyaXZlci0+Y29kZV9sZW5ndGggPSBzaXplb2YoaW50KSAqIDg7CisJZHJpdmVyLT5zYW1wbGVfcmF0ZSA9IDA7CisJZHJpdmVyLT5mZWF0dXJlcyA9IExJUkNfQ0FOX1JFQ19NT0RFMjsKKwlkcml2ZXItPmRhdGEgPSBjb250ZXh0OworCWRyaXZlci0+cmJ1ZiA9IHJidWY7CisJZHJpdmVyLT5zZXRfdXNlX2luYyA9IGlyX29wZW47CisJZHJpdmVyLT5zZXRfdXNlX2RlYyA9IGlyX2Nsb3NlOworCWRyaXZlci0+ZGV2ID0gJmludGVyZmFjZS0+ZGV2OworCWRyaXZlci0+b3duZXIgPSBUSElTX01PRFVMRTsKKworCW11dGV4X2xvY2soJmNvbnRleHQtPmN0eF9sb2NrKTsKKworCWNvbnRleHQtPmRyaXZlciA9IGRyaXZlcjsKKwkvKiBzdGFydCBvdXQgaW4ga2V5Ym9hcmQgbW9kZSAqLworCisJbGlyY19taW5vciA9IGxpcmNfcmVnaXN0ZXJfZHJpdmVyKGRyaXZlcik7CisJaWYgKGxpcmNfbWlub3IgPCAwKSB7CisJCWVycigiJXM6IGxpcmNfcmVnaXN0ZXJfZHJpdmVyIGZhaWxlZCIsIF9fZnVuY19fKTsKKwkJYWxsb2Nfc3RhdHVzID0gNzsKKwkJZ290byBhbGxvY19zdGF0dXNfc3dpdGNoOworCX0gZWxzZQorCQlkZXZfaW5mbyhkZXYsICJSZWdpc3RlcmVkIGlNT04gZHJpdmVyICIKKwkJCSAiKGxpcmMgbWlub3I6ICVkKVxuIiwgbGlyY19taW5vcik7CisKKwkvKiBOZWVkZWQgd2hpbGUgdW5yZWdpc3RlcmluZyEgKi8KKwlkcml2ZXItPm1pbm9yID0gbGlyY19taW5vcjsKKworCWNvbnRleHQtPnVzYmRldiA9IHVzYmRldjsKKwljb250ZXh0LT5kZXZfcHJlc2VudCA9IDE7CisJY29udGV4dC0+cnhfZW5kcG9pbnQgPSByeF9lbmRwb2ludDsKKwljb250ZXh0LT5yeF91cmIgPSByeF91cmI7CisKKwkvKgorCSAqIHR4IGlzIHVzZWQgdG8gc2VuZCBjaGFyYWN0ZXJzIHRvIGxjZC92ZmQsIGFzc29jaWF0ZSBSRgorCSAqIHJlbW90ZXMsIHNldCBJUiBwcm90b2NvbCwgYW5kIG1heWJlIG1vcmUuLi4KKwkgKi8KKwljb250ZXh0LT50eF9lbmRwb2ludCA9IHR4X2VuZHBvaW50OworCWNvbnRleHQtPnR4X3VyYiA9IHR4X3VyYjsKKworCWlmIChkaXNwbGF5X2VwX2ZvdW5kKQorCQljb250ZXh0LT5kaXNwbGF5ID0gMTsKKworCXVzYl9maWxsX2ludF91cmIoY29udGV4dC0+cnhfdXJiLCBjb250ZXh0LT51c2JkZXYsCisJCXVzYl9yY3ZpbnRwaXBlKGNvbnRleHQtPnVzYmRldiwKKwkJCWNvbnRleHQtPnJ4X2VuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJY29udGV4dC0+dXNiX3J4X2J1Ziwgc2l6ZW9mKGNvbnRleHQtPnVzYl9yeF9idWYpLAorCQl1c2JfcnhfY2FsbGJhY2ssIGNvbnRleHQsCisJCWNvbnRleHQtPnJ4X2VuZHBvaW50LT5iSW50ZXJ2YWwpOworCisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIoY29udGV4dC0+cnhfdXJiLCBHRlBfS0VSTkVMKTsKKworCWlmIChyZXR2YWwpIHsKKwkJZXJyKCIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkIGZvciBpbnRmMCAoJWQpIiwKKwkJICAgIF9fZnVuY19fLCByZXR2YWwpOworCQltdXRleF91bmxvY2soJmNvbnRleHQtPmN0eF9sb2NrKTsKKwkJZ290byBleGl0OworCX0KKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBjb250ZXh0KTsKKworCWlmIChjb250ZXh0LT5kaXNwbGF5ICYmIGlmbnVtID09IDApIHsKKwkJZGV2X2RiZyhkZXYsICIlczogUmVnaXN0ZXJpbmcgaU1PTiBkaXNwbGF5IHdpdGggc3lzZnNcbiIsCisJCQlfX2Z1bmNfXyk7CisKKwkJaWYgKHVzYl9yZWdpc3Rlcl9kZXYoaW50ZXJmYWNlLCAmaW1vbl9jbGFzcykpIHsKKwkJCS8qIE5vdCBhIGZhdGFsIGVycm9yLCBzbyBpZ25vcmUgKi8KKwkJCWRldl9pbmZvKGRldiwgIiVzOiBjb3VsZCBub3QgZ2V0IGEgbWlub3IgbnVtYmVyIGZvciAiCisJCQkJICJkaXNwbGF5XG4iLCBfX2Z1bmNfXyk7CisJCX0KKwl9CisKKwlkZXZfaW5mbyhkZXYsICJpTU9OIGRldmljZSAoJTA0eDolMDR4LCBpbnRmJWQpIG9uICIKKwkJICJ1c2I8JWQ6JWQ+IGluaXRpYWxpemVkXG4iLCB2ZW5kb3IsIHByb2R1Y3QsIGlmbnVtLAorCQkgdXNiZGV2LT5idXMtPmJ1c251bSwgdXNiZGV2LT5kZXZudW0pOworCithbGxvY19zdGF0dXNfc3dpdGNoOgorCW11dGV4X3VubG9jaygmY29udGV4dC0+Y3R4X2xvY2spOworCisJc3dpdGNoIChhbGxvY19zdGF0dXMpIHsKKwljYXNlIDc6CisJCXVzYl9mcmVlX3VyYih0eF91cmIpOworCWNhc2UgNjoKKwkJdXNiX2ZyZWVfdXJiKHJ4X3VyYik7CisJY2FzZSA1OgorCQlpZiAocmJ1ZikKKwkJCWxpcmNfYnVmZmVyX2ZyZWUocmJ1Zik7CisJY2FzZSA0OgorCQlrZnJlZShyYnVmKTsKKwljYXNlIDM6CisJCWtmcmVlKGRyaXZlcik7CisJY2FzZSAyOgorCQlrZnJlZShjb250ZXh0KTsKKwkJY29udGV4dCA9IE5VTEw7CisJY2FzZSAxOgorCQlpZiAocmV0dmFsICE9IC1FTk9ERVYpCisJCQlyZXR2YWwgPSAtRU5PTUVNOworCQlicmVhazsKKwljYXNlIDA6CisJCXJldHZhbCA9IDA7CisJfQorCitleGl0OgorCW11dGV4X3VubG9jaygmZHJpdmVyX2xvY2spOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgVVNCIGNvcmUgQVBJOiBkaXNjb25uZWN0CisgKi8KK3N0YXRpYyB2b2lkIGltb25fZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCBpbW9uX2NvbnRleHQgKmNvbnRleHQ7CisJaW50IGlmbnVtOworCisJLyogcHJldmVudCByYWNlcyB3aXRoIGlyX29wZW4oKS9kaXNwbGF5X29wZW4oKSAqLworCW11dGV4X2xvY2soJmRyaXZlcl9sb2NrKTsKKworCWNvbnRleHQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJaWZudW0gPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisKKwltdXRleF9sb2NrKCZjb250ZXh0LT5jdHhfbG9jayk7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisKKwkvKiBBYm9ydCBvbmdvaW5nIHdyaXRlICovCisJaWYgKGF0b21pY19yZWFkKCZjb250ZXh0LT50eC5idXN5KSkgeworCQl1c2Jfa2lsbF91cmIoY29udGV4dC0+dHhfdXJiKTsKKwkJY29tcGxldGVfYWxsKCZjb250ZXh0LT50eC5maW5pc2hlZCk7CisJfQorCisJY29udGV4dC0+ZGV2X3ByZXNlbnQgPSAwOworCXVzYl9raWxsX3VyYihjb250ZXh0LT5yeF91cmIpOworCWlmIChjb250ZXh0LT5kaXNwbGF5KQorCQl1c2JfZGVyZWdpc3Rlcl9kZXYoaW50ZXJmYWNlLCAmaW1vbl9jbGFzcyk7CisKKwlpZiAoIWNvbnRleHQtPmlyX2lzb3BlbiAmJiAhY29udGV4dC0+ZGV2X3ByZXNlbnQpIHsKKwkJZGVyZWdpc3Rlcl9mcm9tX2xpcmMoY29udGV4dCk7CisJCW11dGV4X3VubG9jaygmY29udGV4dC0+Y3R4X2xvY2spOworCQlpZiAoIWNvbnRleHQtPmRpc3BsYXlfaXNvcGVuKQorCQkJZnJlZV9pbW9uX2NvbnRleHQoY29udGV4dCk7CisJfSBlbHNlCisJCW11dGV4X3VubG9jaygmY29udGV4dC0+Y3R4X2xvY2spOworCisJbXV0ZXhfdW5sb2NrKCZkcml2ZXJfbG9jayk7CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogaU1PTiBkZXZpY2UgKGludGYlZCkgZGlzY29ubmVjdGVkXG4iLAorCSAgICAgICBfX2Z1bmNfXywgaWZudW0pOworfQorCitzdGF0aWMgaW50IGltb25fc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJc3RydWN0IGltb25fY29udGV4dCAqY29udGV4dCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwl1c2Jfa2lsbF91cmIoY29udGV4dC0+cnhfdXJiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGltb25fcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCWludCByYyA9IDA7CisJc3RydWN0IGltb25fY29udGV4dCAqY29udGV4dCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwl1c2JfZmlsbF9pbnRfdXJiKGNvbnRleHQtPnJ4X3VyYiwgY29udGV4dC0+dXNiZGV2LAorCQl1c2JfcmN2aW50cGlwZShjb250ZXh0LT51c2JkZXYsCisJCQljb250ZXh0LT5yeF9lbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCisJCWNvbnRleHQtPnVzYl9yeF9idWYsIHNpemVvZihjb250ZXh0LT51c2JfcnhfYnVmKSwKKwkJdXNiX3J4X2NhbGxiYWNrLCBjb250ZXh0LAorCQljb250ZXh0LT5yeF9lbmRwb2ludC0+YkludGVydmFsKTsKKworCXJjID0gdXNiX3N1Ym1pdF91cmIoY29udGV4dC0+cnhfdXJiLCBHRlBfQVRPTUlDKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBfX2luaXQgaW1vbl9pbml0KHZvaWQpCit7CisJaW50IHJjOworCisJcHJpbnRrKEtFUk5fSU5GTyBNT0RfTkFNRSAiOiAiIE1PRF9ERVNDICIsIHYiIE1PRF9WRVJTSU9OICJcbiIpOworCisJcmMgPSB1c2JfcmVnaXN0ZXIoJmltb25fZHJpdmVyKTsKKwlpZiAocmMpIHsKKwkJZXJyKCIlczogdXNiIHJlZ2lzdGVyIGZhaWxlZCglZCkiLCBfX2Z1bmNfXywgcmMpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGltb25fZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZpbW9uX2RyaXZlcik7CisJcHJpbnRrKEtFUk5fSU5GTyBNT0RfTkFNRSAiOiBtb2R1bGUgcmVtb3ZlZC4gR29vZGJ5ZSFcbiIpOworfQorCittb2R1bGVfaW5pdChpbW9uX2luaXQpOworbW9kdWxlX2V4aXQoaW1vbl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfaXQ4Ny5jIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19pdDg3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlmMzY5NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfaXQ4Ny5jCkBAIC0wLDAgKzEsMTAxOSBAQAorLyoKKyAqIExJUkMgZHJpdmVyIGZvciBJVEUgSVQ4NzEyL0lUODcwNSBDSVIgcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBIYW5zLUd1bnRlciBMdXRrZSBVcGh1ZXMgPGhnX2x1QHdlYi5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICogVVNBCisgKgorICogSVRFIElUODcwNSBhbmQgSVQ4NzEyKG5vdCB0ZXN0ZWQpIGFuZCBJVDg3MjAgQ0lSLXBvcnQgc3VwcG9ydCBmb3IgbGlyYyBiYXNlZAorICogdmlhIGN1dCBhbmQgcGFzdGUgZnJvbSBsaXJjX3Npci5jIChDKSAyMDAwIE1pbGFuIFBpa3VsYQorICoKKyAqIEF0dGVudGlvbjogU2VuZG1vZGUgb25seSB0ZXN0ZWQgd2l0aCBkZWJ1Z2dpbmcgbG9ncworICoKKyAqIDIwMDEvMDIvMjcgQ2hyaXN0b3BoIEJhcnRlbG11cyA8bGlyY0BiYXJ0ZWxtdXMuZGU+IDoKKyAqICAgcmVpbXBsZW1lbnRlZCByZWFkIGZ1bmN0aW9uCisgKiAyMDA1LzA2LzA1IEFuZHJldyBDYWxraW4gaW1wbGVtZW50ZWQgc3VwcG9ydCBmb3IgQXN1cyBEaWdpbWF0cml4LAorICogICBiYXNlZCBvbiB3b3JrIG9mIHRoZSBmb2xsb3dpbmcgbWVtYmVyIG9mIHRoZSBPdXRlcnRyYWNrIERpZ2ltYXRyaXgKKyAqICAgRm9ydW06IEFydDEwMyA8cl90YXlAaG90bWFpbC5jb20+CisgKiAyMDA5LzEyLzI0IEphbWVzIEVkd2FyZHMgPGppbWJvLWxpcmNAZWR3YXJkc2NsYW4ubmV0PiBpbXBsZW1ldGVkIHN1cHBvcnQKKyAqICAgZm9yIElURTg3MDQvSVRFODcxOCwgb24gbXkgbWFjaGluZSwgdGhlIERTRFQgcmVwb3J0cyA4NzA0LCBidXQgdGhlCisgKiAgIGNoaXAgaWRlbnRpZmllcyBhcyAxOC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KKworI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvcG5wLmg+CisKKyNpbmNsdWRlIDxtZWRpYS9saXJjLmg+CisjaW5jbHVkZSA8bWVkaWEvbGlyY19kZXYuaD4KKworI2luY2x1ZGUgImxpcmNfaXQ4Ny5oIgorCisjaWZkZWYgTElSQ19JVDg3X0RJR0lNQVRSSVgKK3N0YXRpYyBpbnQgZGlnaW1hdHJpeCA9IDE7CitzdGF0aWMgaW50IGl0ODdfZnJlcSA9IDM2OyAvKiBrSHogKi8KK3N0YXRpYyBpbnQgaXJxID0gOTsKKyNlbHNlCitzdGF0aWMgaW50IGRpZ2ltYXRyaXg7CitzdGF0aWMgaW50IGl0ODdfZnJlcSA9IDM4OyAvKiBrSHogKi8KK3N0YXRpYyBpbnQgaXJxID0gSVQ4N19DSVJfREVGQVVMVF9JUlE7CisjZW5kaWYKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgaXQ4N19iaXRzX2luX2J5dGVfb3V0Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgaXQ4N19zZW5kX2NvdW50ZXI7CitzdGF0aWMgdW5zaWduZWQgY2hhciBpdDg3X1JYRU5fbWFzayA9IElUODdfQ0lSX1JDUl9SWEVOOworCisjZGVmaW5lIFJCVUZfTEVOIDEwMjQKKworI2RlZmluZSBMSVJDX0RSSVZFUl9OQU1FICJsaXJjX2l0ODciCisKKy8qIHRpbWVvdXQgZm9yIHNlcXVlbmNlcyBpbiBqaWZmaWVzICg9NS8xMDBzKSAqLworLyogbXVzdCBiZSBsb25nZXIgdGhhbiBUSU1FX0NPTlNUICovCisjZGVmaW5lIElUODdfVElNRU9VVAkoSFoqNS8xMDApCisKKy8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCitzdGF0aWMgaW50IGRlYnVnOworI2RlZmluZSBkcHJpbnRrKGZtdCwgYXJncy4uLikJCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJaWYgKGRlYnVnKQkJCQkJXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgTElSQ19EUklWRVJfTkFNRSAiOiAiCVwKKwkJCSAgICAgICBmbXQsICMjIGFyZ3MpOwkJCVwKKwl9IHdoaWxlICgwKQorCitzdGF0aWMgaW50IGlvID0gSVQ4N19DSVJfREVGQVVMVF9JT0JBU0U7CisvKiByZWNlaXZlciBkZW1vZHVsYXRvciBkZWZhdWx0OiBvZmYgKi8KK3N0YXRpYyBpbnQgaXQ4N19lbmFibGVfZGVtb2R1bGF0b3I7CisKK3N0YXRpYyBpbnQgdGltZXJfZW5hYmxlZDsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGltZXJfbG9jayk7CitzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgdGltZXJsaXN0OworLyogdGltZSBvZiBsYXN0IHNpZ25hbCBjaGFuZ2UgZGV0ZWN0ZWQgKi8KK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCBsYXN0X3R2ID0gezAsIDB9OworLyogdGltZSBvZiBsYXN0IFVBUlQgZGF0YSByZWFkeSBpbnRlcnJ1cHQgKi8KK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCBsYXN0X2ludHJfdHYgPSB7MCwgMH07CitzdGF0aWMgaW50IGxhc3RfdmFsdWU7CisKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChsaXJjX3JlYWRfcXVldWUpOworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGhhcmR3YXJlX2xvY2spOworc3RhdGljIERFRklORV9TUElOTE9DSyhkZXZfbG9jayk7CisKK3N0YXRpYyBpbnQgcnhfYnVmW1JCVUZfTEVOXTsKK3Vuc2lnbmVkIGludCByeF90YWlsLCByeF9oZWFkOworCitzdGF0aWMgc3RydWN0IHBucF9kcml2ZXIgaXQ4N19wbnBfZHJpdmVyOworCisvKiBTRUNUSU9OOiBQcm90b3R5cGVzICovCisKKy8qIENvbW11bmljYXRpb24gd2l0aCB1c2VyLXNwYWNlICovCitzdGF0aWMgaW50IGxpcmNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50IGxpcmNfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIHVuc2lnbmVkIGludCBsaXJjX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpOworc3RhdGljIHNzaXplX3QgbGlyY19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsCisJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOworc3RhdGljIHNzaXplX3QgbGlyY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmLAorCQkJICBzaXplX3QgbiwgbG9mZl90ICpwb3MpOworc3RhdGljIGxvbmcgbGlyY19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyB2b2lkIGFkZF9yZWFkX3F1ZXVlKGludCBmbGFnLCB1bnNpZ25lZCBsb25nIHZhbCk7CitzdGF0aWMgaW50IGluaXRfY2hyZGV2KHZvaWQpOworc3RhdGljIHZvaWQgZHJvcF9jaHJkZXYodm9pZCk7CisvKiBIYXJkd2FyZSAqLworc3RhdGljIGlycXJldHVybl90IGl0ODdfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CitzdGF0aWMgdm9pZCBzZW5kX3NwYWNlKHVuc2lnbmVkIGxvbmcgbGVuKTsKK3N0YXRpYyB2b2lkIHNlbmRfcHVsc2UodW5zaWduZWQgbG9uZyBsZW4pOworc3RhdGljIHZvaWQgaW5pdF9zZW5kKHZvaWQpOworc3RhdGljIHZvaWQgdGVybWluYXRlX3NlbmQodW5zaWduZWQgbG9uZyBsZW4pOworc3RhdGljIGludCBpbml0X2hhcmR3YXJlKHZvaWQpOworc3RhdGljIHZvaWQgZHJvcF9oYXJkd2FyZSh2b2lkKTsKKy8qIEluaXRpYWxpc2F0aW9uICovCitzdGF0aWMgaW50IGluaXRfcG9ydCh2b2lkKTsKK3N0YXRpYyB2b2lkIGRyb3BfcG9ydCh2b2lkKTsKKworCisvKiBTRUNUSU9OOiBDb21tdW5pY2F0aW9uIHdpdGggdXNlci1zcGFjZSAqLworCitzdGF0aWMgaW50IGxpcmNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzcGluX2xvY2soJmRldl9sb2NrKTsKKwlpZiAobW9kdWxlX3JlZmNvdW50KFRISVNfTU9EVUxFKSkgeworCQlzcGluX3VubG9jaygmZGV2X2xvY2spOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlzcGluX3VubG9jaygmZGV2X2xvY2spOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgbGlyY19jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdW5zaWduZWQgaW50IGxpcmNfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwlwb2xsX3dhaXQoZmlsZSwgJmxpcmNfcmVhZF9xdWV1ZSwgd2FpdCk7CisJaWYgKHJ4X2hlYWQgIT0gcnhfdGFpbCkKKwkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHNzaXplX3QgbGlyY19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsCisJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJaW50IG4gPSAwOworCWludCByZXR2YWwgPSAwOworCisJd2hpbGUgKG4gPCBjb3VudCkgeworCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0sgJiYgcnhfaGVhZCA9PSByeF90YWlsKSB7CisJCQlyZXR2YWwgPSAtRUFHQUlOOworCQkJYnJlYWs7CisJCX0KKwkJcmV0dmFsID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGxpcmNfcmVhZF9xdWV1ZSwKKwkJCQkJCSAgcnhfaGVhZCAhPSByeF90YWlsKTsKKwkJaWYgKHJldHZhbCkKKwkJCWJyZWFrOworCisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgKikgYnVmICsgbiwgKHZvaWQgKikgKHJ4X2J1ZiArIHJ4X2hlYWQpLAorCQkJCSBzaXplb2YoaW50KSkpIHsKKwkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCQlyeF9oZWFkID0gKHJ4X2hlYWQgKyAxKSAmIChSQlVGX0xFTiAtIDEpOworCQluICs9IHNpemVvZihpbnQpOworCX0KKwlpZiAobikKKwkJcmV0dXJuIG47CisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgc3NpemVfdCBsaXJjX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpidWYsCisJCQkgIHNpemVfdCBuLCBsb2ZmX3QgKnBvcykKK3sKKwlpbnQgaSA9IDA7CisJaW50ICp0eF9idWY7CisKKwlpZiAobiAlIHNpemVvZihpbnQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwl0eF9idWYgPSBtZW1kdXBfdXNlcihidWYsIG4pOworCWlmIChJU19FUlIodHhfYnVmKSkKKwkJcmV0dXJuIFBUUl9FUlIodHhfYnVmKTsKKwluIC89IHNpemVvZihpbnQpOworCWluaXRfc2VuZCgpOworCXdoaWxlICgxKSB7CisJCWlmIChpID49IG4pCisJCQlicmVhazsKKwkJaWYgKHR4X2J1ZltpXSkKKwkJCXNlbmRfcHVsc2UodHhfYnVmW2ldKTsKKwkJaSsrOworCQlpZiAoaSA+PSBuKQorCQkJYnJlYWs7CisJCWlmICh0eF9idWZbaV0pCisJCQlzZW5kX3NwYWNlKHR4X2J1ZltpXSk7CisJCWkrKzsKKwl9CisJdGVybWluYXRlX3NlbmQodHhfYnVmW2kgLSAxXSk7CisJcmV0dXJuIG47Cit9CisKKworc3RhdGljIGxvbmcgbGlyY19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCByZXR2YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgdmFsdWUgPSAwOworCXVuc2lnbmVkIGludCBpdmFsdWU7CisJdW5zaWduZWQgbG9uZyBod19mbGFnczsKKworCWlmIChjbWQgPT0gTElSQ19HRVRfRkVBVFVSRVMpCisJCXZhbHVlID0gTElSQ19DQU5fU0VORF9QVUxTRSB8CisJCQlMSVJDX0NBTl9TRVRfU0VORF9DQVJSSUVSIHwKKwkJCUxJUkNfQ0FOX1JFQ19NT0RFMjsKKwllbHNlIGlmIChjbWQgPT0gTElSQ19HRVRfU0VORF9NT0RFKQorCQl2YWx1ZSA9IExJUkNfTU9ERV9QVUxTRTsKKwllbHNlIGlmIChjbWQgPT0gTElSQ19HRVRfUkVDX01PREUpCisJCXZhbHVlID0gTElSQ19NT0RFX01PREUyOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIExJUkNfR0VUX0ZFQVRVUkVTOgorCWNhc2UgTElSQ19HRVRfU0VORF9NT0RFOgorCWNhc2UgTElSQ19HRVRfUkVDX01PREU6CisJCXJldHZhbCA9IHB1dF91c2VyKHZhbHVlLCAodW5zaWduZWQgbG9uZyAqKSBhcmcpOworCQlicmVhazsKKworCWNhc2UgTElSQ19TRVRfU0VORF9NT0RFOgorCWNhc2UgTElSQ19TRVRfUkVDX01PREU6CisJCXJldHZhbCA9IGdldF91c2VyKHZhbHVlLCAodW5zaWduZWQgbG9uZyAqKSBhcmcpOworCQlicmVhazsKKworCWNhc2UgTElSQ19TRVRfU0VORF9DQVJSSUVSOgorCQlyZXR2YWwgPSBnZXRfdXNlcihpdmFsdWUsICh1bnNpZ25lZCBpbnQgKikgYXJnKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJCWl2YWx1ZSAvPSAxMDAwOworCQlpZiAoaXZhbHVlID4gSVQ4N19DSVJfRlJFUV9NQVggfHwKKwkJICAgIGl2YWx1ZSA8IElUODdfQ0lSX0ZSRVFfTUlOKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaXQ4N19mcmVxID0gaXZhbHVlOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZoYXJkd2FyZV9sb2NrLCBod19mbGFncyk7CisJCW91dGIoKChpbmIoaW8gKyBJVDg3X0NJUl9UQ1IyKSAmIElUODdfQ0lSX1RDUjJfVFhNUFcpIHwKKwkJICAgICAgKGl0ODdfZnJlcSAtIElUODdfQ0lSX0ZSRVFfTUlOKSA8PCAzKSwKKwkJICAgICAgaW8gKyBJVDg3X0NJUl9UQ1IyKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGFyZHdhcmVfbG9jaywgaHdfZmxhZ3MpOworCQlkcHJpbnRrKCJkZW1vZHVsYXRpb24gZnJlcXVlbmN5OiAlZCBrSHpcbiIsIGl0ODdfZnJlcSk7CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR2YWwgPSAtRUlOVkFMOworCX0KKworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAoY21kID09IExJUkNfU0VUX1JFQ19NT0RFKSB7CisJCWlmICh2YWx1ZSAhPSBMSVJDX01PREVfTU9ERTIpCisJCQlyZXR2YWwgPSAtRU5PU1lTOworCX0gZWxzZSBpZiAoY21kID09IExJUkNfU0VUX1NFTkRfTU9ERSkgeworCQlpZiAodmFsdWUgIT0gTElSQ19NT0RFX1BVTFNFKQorCQkJcmV0dmFsID0gLUVOT1NZUzsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgYWRkX3JlYWRfcXVldWUoaW50IGZsYWcsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGludCBuZXdfcnhfdGFpbDsKKwlpbnQgbmV3dmFsOworCisJZHByaW50aygiYWRkIGZsYWcgJWQgd2l0aCB2YWwgJWx1XG4iLCBmbGFnLCB2YWwpOworCisJbmV3dmFsID0gdmFsICYgUFVMU0VfTUFTSzsKKworCS8qCisJICogc3RhdGlzdGljYWxseSwgcHVsc2VzIGFyZSB+VElNRV9DT05TVC8yIHRvbyBsb25nLiB3ZSBjb3VsZAorCSAqIG1heWJlIG1ha2UgdGhpcyBtb3JlIGV4YWN0LCBidXQgdGhpcyBpcyBnb29kIGVub3VnaAorCSAqLworCWlmIChmbGFnKSB7CisJCS8qIHB1bHNlICovCisJCWlmIChuZXd2YWwgPiBUSU1FX0NPTlNUIC8gMikKKwkJCW5ld3ZhbCAtPSBUSU1FX0NPTlNUIC8gMjsKKwkJZWxzZSAvKiBzaG91bGQgbm90IGV2ZXIgaGFwcGVuICovCisJCQluZXd2YWwgPSAxOworCQluZXd2YWwgfD0gUFVMU0VfQklUOworCX0gZWxzZQorCQluZXd2YWwgKz0gVElNRV9DT05TVCAvIDI7CisJbmV3X3J4X3RhaWwgPSAocnhfdGFpbCArIDEpICYgKFJCVUZfTEVOIC0gMSk7CisJaWYgKG5ld19yeF90YWlsID09IHJ4X2hlYWQpIHsKKwkJZHByaW50aygiQnVmZmVyIG92ZXJydW4uXG4iKTsKKwkJcmV0dXJuOworCX0KKwlyeF9idWZbcnhfdGFpbF0gPSBuZXd2YWw7CisJcnhfdGFpbCA9IG5ld19yeF90YWlsOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmbGlyY19yZWFkX3F1ZXVlKTsKK30KKworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsaXJjX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5yZWFkCQk9IGxpcmNfcmVhZCwKKwkud3JpdGUJCT0gbGlyY193cml0ZSwKKwkucG9sbAkJPSBsaXJjX3BvbGwsCisJLnVubG9ja2VkX2lvY3RsCT0gbGlyY19pb2N0bCwKKwkub3BlbgkJPSBsaXJjX29wZW4sCisJLnJlbGVhc2UJPSBsaXJjX2Nsb3NlLAorfTsKKworc3RhdGljIGludCBzZXRfdXNlX2luYyh2b2lkICpkYXRhKQoreworICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfdXNlX2RlYyh2b2lkICpkYXRhKQoreworfQorCitzdGF0aWMgc3RydWN0IGxpcmNfZHJpdmVyIGRyaXZlciA9IHsKKyAgICAgICAubmFtZQkJPSBMSVJDX0RSSVZFUl9OQU1FLAorICAgICAgIC5taW5vcgkJPSAtMSwKKyAgICAgICAuY29kZV9sZW5ndGgJPSAxLAorICAgICAgIC5zYW1wbGVfcmF0ZQk9IDAsCisgICAgICAgLmRhdGEJCT0gTlVMTCwKKyAgICAgICAuYWRkX3RvX2J1Zgk9IE5VTEwsCisgICAgICAgLnNldF91c2VfaW5jCT0gc2V0X3VzZV9pbmMsCisgICAgICAgLnNldF91c2VfZGVjCT0gc2V0X3VzZV9kZWMsCisgICAgICAgLmZvcHMJCT0gJmxpcmNfZm9wcywKKyAgICAgICAuZGV2CQk9IE5VTEwsCisgICAgICAgLm93bmVyCQk9IFRISVNfTU9EVUxFLAorfTsKKworCisjaWZkZWYgTU9EVUxFCitzdGF0aWMgaW50IGluaXRfY2hyZGV2KHZvaWQpCit7CisJZHJpdmVyLm1pbm9yID0gbGlyY19yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisKKwlpZiAoZHJpdmVyLm1pbm9yIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgTElSQ19EUklWRVJfTkFNRSAiOiBpbml0X2NocmRldigpIGZhaWxlZC5cbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgZHJvcF9jaHJkZXYodm9pZCkKK3sKKwlsaXJjX3VucmVnaXN0ZXJfZHJpdmVyKGRyaXZlci5taW5vcik7Cit9CisjZW5kaWYKKworCisvKiBTRUNUSU9OOiBIYXJkd2FyZSAqLworc3RhdGljIGxvbmcgZGVsdGEoc3RydWN0IHRpbWV2YWwgKnR2MSwgc3RydWN0IHRpbWV2YWwgKnR2MikKK3sKKwl1bnNpZ25lZCBsb25nIGRlbHR2OworCisJZGVsdHYgPSB0djItPnR2X3NlYyAtIHR2MS0+dHZfc2VjOworCWlmIChkZWx0diA+IDE1KQorCQlkZWx0diA9IDB4RkZGRkZGOworCWVsc2UKKwkJZGVsdHYgPSBkZWx0dioxMDAwMDAwICsgdHYyLT50dl91c2VjIC0gdHYxLT50dl91c2VjOworCXJldHVybiBkZWx0djsKK30KKworc3RhdGljIHZvaWQgaXQ4N190aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogYXZvaWQgaW50ZXJmZXJlbmNlIHdpdGggaW50ZXJydXB0ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVyX2xvY2ssIGZsYWdzKTsKKworCWlmIChkaWdpbWF0cml4KSB7CisJCS8qIFdlIGhhdmUgdGltZWQgb3V0LiBEaXNhYmxlIHRoZSBSWCBtZWNoYW5pc20uICovCisKKwkJb3V0YigoaW5iKGlvICsgSVQ4N19DSVJfUkNSKSAmIH5JVDg3X0NJUl9SQ1JfUlhFTikgfAorCQkgICAgIElUODdfQ0lSX1JDUl9SWEFDVCwgaW8gKyBJVDg3X0NJUl9SQ1IpOworCQlpZiAoaXQ4N19SWEVOX21hc2spCisJCQlvdXRiKGluYihpbyArIElUODdfQ0lSX1JDUikgfCBJVDg3X0NJUl9SQ1JfUlhFTiwKKwkJCSAgICAgaW8gKyBJVDg3X0NJUl9SQ1IpOworCQlkcHJpbnRrKCIgVElNRU9VVFxuIik7CisJCXRpbWVyX2VuYWJsZWQgPSAwOworCisJCS8qIGZpZm8gY2xlYXIgKi8KKwkJb3V0YihpbmIoaW8gKyBJVDg3X0NJUl9UQ1IxKSB8IElUODdfQ0lSX1RDUjFfRklGT0NMUiwKKwkJICAgICBpbytJVDg3X0NJUl9UQ1IxKTsKKworCX0gZWxzZSB7CisJCS8qCisJCSAqIGlmIGxhc3QgcmVjZWl2ZWQgc2lnbmFsIHdhcyBhIHB1bHNlLCBidXQgcmVjZWl2aW5nIHN0b3BwZWQKKwkJICogd2l0aGluIHRoZSA5IGJpdCBmcmFtZSwgd2UgbmVlZCB0byBmaW5pc2ggdGhpcyBwdWxzZSBhbmQKKwkJICogc2ltdWxhdGUgYSBzaWduYWwgY2hhbmdlIHRvIGZyb20gcHVsc2UgdG8gc3BhY2UuIE90aGVyd2lzZQorCQkgKiB1cHBlciBsYXllcnMgd2lsbCByZWNlaXZlIHR3byBzZXF1ZW5jZXMgbmV4dCB0aW1lLgorCQkgKi8KKworCQlpZiAobGFzdF92YWx1ZSkgeworCQkJdW5zaWduZWQgbG9uZyBwdWxzZV9lbmQ7CisKKwkJCS8qIGRldGVybWluZSAndmlydHVhbCcgcHVsc2UgZW5kOiAqLworCQkJcHVsc2VfZW5kID0gZGVsdGEoJmxhc3RfdHYsICZsYXN0X2ludHJfdHYpOworCQkJZHByaW50aygidGltZW91dCBhZGQgJWQgZm9yICVsdSB1c2VjXG4iLAorCQkJCWxhc3RfdmFsdWUsIHB1bHNlX2VuZCk7CisJCQlhZGRfcmVhZF9xdWV1ZShsYXN0X3ZhbHVlLCBwdWxzZV9lbmQpOworCQkJbGFzdF92YWx1ZSA9IDA7CisJCQlsYXN0X3R2ID0gbGFzdF9pbnRyX3R2OworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpbWVyX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGl0ODdfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwl1bnNpZ25lZCBjaGFyIGRhdGE7CisJc3RydWN0IHRpbWV2YWwgY3Vycl90djsKKwlzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWx0djsKKwl1bnNpZ25lZCBsb25nIGRlbHRpbnRydHY7CisJdW5zaWduZWQgbG9uZyBmbGFncywgaHdfZmxhZ3M7CisJaW50IGlpciwgbHNyOworCWludCBmaWZvID0gMDsKKwlzdGF0aWMgY2hhciBsYXN0Yml0OworCWNoYXIgYml0OworCisJLyogQml0IGR1cmF0aW9uIGluIG1pY3Jvc2Vjb25kcyAqLworCWNvbnN0IHVuc2lnbmVkIGxvbmcgYml0X2R1cmF0aW9uID0gMTAwMDAwMHVsIC8KKwkJKDExNTIwMCAvIElUODdfQ0lSX0JBVURSQVRFX0RJVklTT1IpOworCisKKwlpaXIgPSBpbmIoaW8gKyBJVDg3X0NJUl9JSVIpOworCisJc3dpdGNoIChpaXIgJiBJVDg3X0NJUl9JSVJfSUlEKSB7CisJY2FzZSAweDQ6CisJY2FzZSAweDY6CisJCWxzciA9IGluYihpbyArIElUODdfQ0lSX1JTUikgJiAoSVQ4N19DSVJfUlNSX1JYRlRPIHwKKwkJCQkJCUlUODdfQ0lSX1JTUl9SWEZCQyk7CisJCWZpZm8gPSBsc3IgJiBJVDg3X0NJUl9SU1JfUlhGQkM7CisJCWRwcmludGsoImlpcjogMHgleCBmaWZvOiAweCV4XG4iLCBpaXIsIGxzcik7CisKKwkJLyogYXZvaWQgaW50ZXJmZXJlbmNlIHdpdGggdGltZXIgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVyX2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmhhcmR3YXJlX2xvY2ssIGh3X2ZsYWdzKTsKKwkJaWYgKGRpZ2ltYXRyaXgpIHsKKwkJCXN0YXRpYyB1bnNpZ25lZCBsb25nIGFjY19wdWxzZTsKKwkJCXN0YXRpYyB1bnNpZ25lZCBsb25nIGFjY19zcGFjZTsKKworCQkJZG8geworCQkJCWRhdGEgPSBpbmIoaW8gKyBJVDg3X0NJUl9EUik7CisJCQkJZGF0YSA9IH5kYXRhOworCQkJCWZpZm8tLTsKKwkJCQlpZiAoZGF0YSAhPSAweDAwKSB7CisJCQkJCWlmICh0aW1lcl9lbmFibGVkKQorCQkJCQkJZGVsX3RpbWVyKCZ0aW1lcmxpc3QpOworCQkJCQkvKgorCQkJCQkgKiBzdGFydCB0aW1lciBmb3IgZW5kIG9mCisJCQkJCSAqIHNlcXVlbmNlIGRldGVjdGlvbgorCQkJCQkgKi8KKwkJCQkJdGltZXJsaXN0LmV4cGlyZXMgPSBqaWZmaWVzICsKKwkJCQkJCQkgICAgSVQ4N19USU1FT1VUOworCQkJCQlhZGRfdGltZXIoJnRpbWVybGlzdCk7CisJCQkJCXRpbWVyX2VuYWJsZWQgPSAxOworCQkJCX0KKwkJCQkvKiBMb29wIHRocm91Z2ggKi8KKwkJCQlmb3IgKGJpdCA9IDA7IGJpdCA8IDg7ICsrYml0KSB7CisJCQkJCWlmICgoZGF0YSA+PiBiaXQpICYgMSkgeworCQkJCQkJKythY2NfcHVsc2U7CisJCQkJCQlpZiAobGFzdGJpdCA9PSAwKSB7CisJCQkJCQkJYWRkX3JlYWRfcXVldWUoMCwKKwkJCQkJCQkJYWNjX3NwYWNlICoKKwkJCQkJCQkJIGJpdF9kdXJhdGlvbik7CisJCQkJCQkJYWNjX3NwYWNlID0gMDsKKwkJCQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJCQkJCSsrYWNjX3NwYWNlOworCQkJCQkJaWYgKGxhc3RiaXQgPT0gMSkgeworCQkJCQkJCWFkZF9yZWFkX3F1ZXVlKDEsCisJCQkJCQkJCWFjY19wdWxzZSAqCisJCQkJCQkJCSBiaXRfZHVyYXRpb24pOworCQkJCQkJCWFjY19wdWxzZSA9IDA7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJbGFzdGJpdCA9IChkYXRhID4+IGJpdCkgJiAxOworCQkJCX0KKworCQkJfSB3aGlsZSAoZmlmbyAhPSAwKTsKKwkJfSBlbHNlIHsgLyogTm9ybWFsIE9wZXJhdGlvbiAqLworCQkJZG8geworCQkJCWRlbF90aW1lcigmdGltZXJsaXN0KTsKKwkJCQlkYXRhID0gaW5iKGlvICsgSVQ4N19DSVJfRFIpOworCisJCQkJZHByaW50aygiZGF0YT0lMDJ4XG4iLCBkYXRhKTsKKwkJCQlkb19nZXR0aW1lb2ZkYXkoJmN1cnJfdHYpOworCQkJCWRlbHR2ID0gZGVsdGEoJmxhc3RfdHYsICZjdXJyX3R2KTsKKwkJCQlkZWx0aW50cnR2ID0gZGVsdGEoJmxhc3RfaW50cl90diwgJmN1cnJfdHYpOworCisJCQkJZHByaW50aygidCAlbHUgLCBkICVkXG4iLAorCQkJCQlkZWx0aW50cnR2LCAoaW50KWRhdGEpOworCisJCQkJLyoKKwkJCQkgKiBpZiBub3RoaW5nIGNhbWUgaW4gbGFzdCAyIGN5Y2xlcywKKwkJCQkgKiBpdCB3YXMgZ2FwCisJCQkJICovCisJCQkJaWYgKGRlbHRpbnRydHYgPiBUSU1FX0NPTlNUICogMikgeworCQkJCQlpZiAobGFzdF92YWx1ZSkgeworCQkJCQkJZHByaW50aygiR0FQXG4iKTsKKworCQkJCQkJLyogc2ltdWxhdGUgc2lnbmFsIGNoYW5nZSAqLworCQkJCQkJYWRkX3JlYWRfcXVldWUobGFzdF92YWx1ZSwKKwkJCQkJCQkgICAgICAgZGVsdHYgLQorCQkJCQkJCSAgICAgICBkZWx0aW50cnR2KTsKKwkJCQkJCWxhc3RfdmFsdWUgPSAwOworCQkJCQkJbGFzdF90di50dl9zZWMgPQorCQkJCQkJCWxhc3RfaW50cl90di50dl9zZWM7CisJCQkJCQlsYXN0X3R2LnR2X3VzZWMgPQorCQkJCQkJCWxhc3RfaW50cl90di50dl91c2VjOworCQkJCQkJZGVsdHYgPSBkZWx0aW50cnR2OworCQkJCQl9CisJCQkJfQorCQkJCWRhdGEgPSAxOworCQkJCWlmIChkYXRhIF4gbGFzdF92YWx1ZSkgeworCQkJCQkvKgorCQkJCQkgKiBkZWx0aW50cnR2ID4gMipUSU1FX0NPTlNULAorCQkJCQkgKiByZW1lbWJlciA/IHRoZSBvdGhlciBjYXNlIGlzCisJCQkJCSAqIHRpbWVvdXQKKwkJCQkJICovCisJCQkJCWFkZF9yZWFkX3F1ZXVlKGxhc3RfdmFsdWUsCisJCQkJCQkgICAgICAgZGVsdHYtVElNRV9DT05TVCk7CisJCQkJCWxhc3RfdmFsdWUgPSBkYXRhOworCQkJCQlsYXN0X3R2ID0gY3Vycl90djsKKwkJCQkJaWYgKGxhc3RfdHYudHZfdXNlYyA+PSBUSU1FX0NPTlNUKQorCQkJCQkJbGFzdF90di50dl91c2VjIC09IFRJTUVfQ09OU1Q7CisJCQkJCWVsc2UgeworCQkJCQkJbGFzdF90di50dl9zZWMtLTsKKwkJCQkJCWxhc3RfdHYudHZfdXNlYyArPSAxMDAwMDAwIC0KKwkJCQkJCQlUSU1FX0NPTlNUOworCQkJCQl9CisJCQkJfQorCQkJCWxhc3RfaW50cl90diA9IGN1cnJfdHY7CisJCQkJaWYgKGRhdGEpIHsKKwkJCQkJLyoKKwkJCQkJICogc3RhcnQgdGltZXIgZm9yIGVuZCBvZgorCQkJCQkgKiBzZXF1ZW5jZSBkZXRlY3Rpb24KKwkJCQkJICovCisJCQkJCXRpbWVybGlzdC5leHBpcmVzID0KKwkJCQkJCWppZmZpZXMgKyBJVDg3X1RJTUVPVVQ7CisJCQkJCWFkZF90aW1lcigmdGltZXJsaXN0KTsKKwkJCQl9CisJCQkJb3V0YigoaW5iKGlvICsgSVQ4N19DSVJfUkNSKSAmCisJCQkJICAgICB+SVQ4N19DSVJfUkNSX1JYRU4pIHwKKwkJCQkgICAgIElUODdfQ0lSX1JDUl9SWEFDVCwKKwkJCQkgICAgIGlvICsgSVQ4N19DSVJfUkNSKTsKKwkJCQlpZiAoaXQ4N19SWEVOX21hc2spCisJCQkJCW91dGIoaW5iKGlvICsgSVQ4N19DSVJfUkNSKSB8CisJCQkJCSAgICAgSVQ4N19DSVJfUkNSX1JYRU4sCisJCQkJCSAgICAgaW8gKyBJVDg3X0NJUl9SQ1IpOworCQkJCWZpZm8tLTsKKwkJCX0gd2hpbGUgKGZpZm8gIT0gMCk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGFyZHdhcmVfbG9jaywgaHdfZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lcl9sb2NrLCBmbGFncyk7CisKKwkJcmV0dXJuIElSUV9SRVRWQUwoSVJRX0hBTkRMRUQpOworCisJZGVmYXVsdDoKKwkJLyogbm90IG91ciBpcnEgKi8KKwkJZHByaW50aygidW5rbm93biBJUlEgKHNob3VsZG4ndCBoYXBwZW4pICEhXG4iKTsKKwkJcmV0dXJuIElSUV9SRVRWQUwoSVJRX05PTkUpOworCX0KK30KKworCitzdGF0aWMgdm9pZCBzZW5kX2l0ODcodW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgc3RpbWUsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgc2VuZF9ieXRlLCB1bnNpZ25lZCBpbnQgY291bnRfYml0cykKK3sKKwlsb25nIGNvdW50ID0gbGVuIC8gc3RpbWU7CisJbG9uZyB0aW1lX2xlZnQgPSAwOworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGJ5dGVfb3V0OworCXVuc2lnbmVkIGxvbmcgaHdfZmxhZ3M7CisKKwlkcHJpbnRrKCIlczogbGVuPSVsZCwgc2I9JWRcbiIsIF9fZnVuY19fLCBsZW4sIHNlbmRfYnl0ZSk7CisKKwl0aW1lX2xlZnQgPSAobG9uZylsZW4gLSAobG9uZyljb3VudCAqIChsb25nKXN0aW1lOworCWNvdW50ICs9ICgoMiAqIHRpbWVfbGVmdCkgLyBzdGltZSk7CisJd2hpbGUgKGNvdW50KSB7CisJCWxvbmcgaSA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBjb3VudF9iaXRzOyBpKyspIHsKKwkJCWJ5dGVfb3V0ID0gKGJ5dGVfb3V0IDw8IDEpIHwgKHNlbmRfYnl0ZSAmIDEpOworCQkJaXQ4N19iaXRzX2luX2J5dGVfb3V0Kys7CisJCX0KKwkJaWYgKGl0ODdfYml0c19pbl9ieXRlX291dCA9PSA4KSB7CisJCQlkcHJpbnRrKCJvdXQ9MHgleCwgdHNyX3R4ZmJjOiAweCV4XG4iLAorCQkJCWJ5dGVfb3V0LAorCQkJCWluYihpbyArIElUODdfQ0lSX1RTUikgJgorCQkJCUlUODdfQ0lSX1RTUl9UWEZCQyk7CisKKwkJCXdoaWxlICgoaW5iKGlvICsgSVQ4N19DSVJfVFNSKSAmCisJCQkJSVQ4N19DSVJfVFNSX1RYRkJDKSA+PSBJVDg3X0NJUl9GSUZPX1NJWkUpCisJCQkJOworCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaGFyZHdhcmVfbG9jaywgaHdfZmxhZ3MpOworCQkJb3V0YihieXRlX291dCwgaW8gKyBJVDg3X0NJUl9EUik7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYXJkd2FyZV9sb2NrLCBod19mbGFncyk7CisKKwkJCWl0ODdfYml0c19pbl9ieXRlX291dCA9IDA7CisJCQlpdDg3X3NlbmRfY291bnRlcisrOworCQkJYnl0ZV9vdXQgPSAwOworCQl9CisJCWNvdW50LS07CisJfQorfQorCisKKy8qVE9ETzogbWF5YmUgZXhjaGFuZ2Ugc3BhY2UgYW5kIHB1bHNlIGJlY2F1c2UgaXQ4NzA1IG9ubHkgbW9kdWxhdGVzIDAtYml0cyAqLworCitzdGF0aWMgdm9pZCBzZW5kX3NwYWNlKHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXNlbmRfaXQ4NyhsZW4sIFRJTUVfQ09OU1QsIElUODdfQ0lSX1NQQUNFLCBJVDg3X0NJUl9CQVVEUkFURV9ESVZJU09SKTsKK30KKworc3RhdGljIHZvaWQgc2VuZF9wdWxzZSh1bnNpZ25lZCBsb25nIGxlbikKK3sKKwlzZW5kX2l0ODcobGVuLCBUSU1FX0NPTlNULCBJVDg3X0NJUl9QVUxTRSwgSVQ4N19DSVJfQkFVRFJBVEVfRElWSVNPUik7Cit9CisKKworc3RhdGljIHZvaWQgaW5pdF9zZW5kKCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKKwkvKiBSWEVOPTA6IHJlY2VpdmVyIGRpc2FibGUgKi8KKwlpdDg3X1JYRU5fbWFzayA9IDA7CisJb3V0YihpbmIoaW8gKyBJVDg3X0NJUl9SQ1IpICYgfklUODdfQ0lSX1JDUl9SWEVOLAorCSAgICAgaW8gKyBJVDg3X0NJUl9SQ1IpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKKwlpdDg3X2JpdHNfaW5fYnl0ZV9vdXQgPSAwOworCWl0ODdfc2VuZF9jb3VudGVyID0gMDsKK30KKworCitzdGF0aWMgdm9pZCB0ZXJtaW5hdGVfc2VuZCh1bnNpZ25lZCBsb25nIGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgbGFzdCA9IDA7CisKKwlsYXN0ID0gaXQ4N19zZW5kX2NvdW50ZXI7CisJLyogbWFrZSBzdXJlIGFsbCBuZWNlc3NhcnkgZGF0YSBoYXMgYmVlbiBzZW50ICovCisJd2hpbGUgKGxhc3QgPT0gaXQ4N19zZW5kX2NvdW50ZXIpCisJCXNlbmRfc3BhY2UobGVuKTsKKwkvKiB3YWl0IHVudGlsIGFsbCBkYXRhIHNlbnQgKi8KKwl3aGlsZSAoKGluYihpbyArIElUODdfQ0lSX1RTUikgJiBJVDg3X0NJUl9UU1JfVFhGQkMpICE9IDApCisJCTsKKwkvKiB0aGVuIHJlLWVuYWJsZSByZWNlaXZlciAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZoYXJkd2FyZV9sb2NrLCBmbGFncyk7CisJaXQ4N19SWEVOX21hc2sgPSBJVDg3X0NJUl9SQ1JfUlhFTjsKKwlvdXRiKGluYihpbyArIElUODdfQ0lSX1JDUikgfCBJVDg3X0NJUl9SQ1JfUlhFTiwKKwkgICAgIGlvICsgSVQ4N19DSVJfUkNSKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYXJkd2FyZV9sb2NrLCBmbGFncyk7Cit9CisKKworc3RhdGljIGludCBpbml0X2hhcmR3YXJlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBjaGFyIGl0ODdfcmNyID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZoYXJkd2FyZV9sb2NrLCBmbGFncyk7CisJLyogaW5pdCBjaXItcG9ydCAqLworCS8qIGVuYWJsZSByL3ctYWNjZXNzIHRvIEJhdWRyYXRlLVJlZ2lzdGVyICovCisJb3V0YihJVDg3X0NJUl9JRVJfQlIsIGlvICsgSVQ4N19DSVJfSUVSKTsKKwlvdXRiKElUODdfQ0lSX0JBVURSQVRFX0RJVklTT1IgJSAweDEwMCwgaW8rSVQ4N19DSVJfQkRMUik7CisJb3V0YihJVDg3X0NJUl9CQVVEUkFURV9ESVZJU09SIC8gMHgxMDAsIGlvK0lUODdfQ0lSX0JESFIpOworCS8qIEJhdWRyYXRlIFJlZ2lzdGVyIG9mZiwgZGVmaW5lIElSUXM6IElucHV0IG9ubHkgKi8KKwlpZiAoZGlnaW1hdHJpeCkgeworCQlvdXRiKElUODdfQ0lSX0lFUl9JRUMgfCBJVDg3X0NJUl9JRVJfUkZPSUUsIGlvICsgSVQ4N19DSVJfSUVSKTsKKwkJLyogUlg6IEhDRlM9MCwgUlhEQ1IgPSAwMDFiICgzMyw3NS4uMzgsMjUga0h6KSwgUlhFTj0xICovCisJfSBlbHNlIHsKKwkJb3V0YihJVDg3X0NJUl9JRVJfSUVDIHwgSVQ4N19DSVJfSUVSX1JEQUlFLCBpbyArIElUODdfQ0lSX0lFUik7CisJCS8qIFJYOiBIQ0ZTPTAsIFJYRENSID0gMDAxYiAoMzUsNi4uNDAsMyBrSHopLCBSWEVOPTEgKi8KKwl9CisJaXQ4N19yY3IgPSAoSVQ4N19DSVJfUkNSX1JYRU4gJiBpdDg3X1JYRU5fbWFzaykgfCAweDE7CisJaWYgKGl0ODdfZW5hYmxlX2RlbW9kdWxhdG9yKQorCQlpdDg3X3JjciB8PSBJVDg3X0NJUl9SQ1JfUlhFTkQ7CisJb3V0YihpdDg3X3JjciwgaW8gKyBJVDg3X0NJUl9SQ1IpOworCWlmIChkaWdpbWF0cml4KSB7CisJCS8qIFNldCBGSUZPIGRlcHRoIHRvIDEgYnl0ZSwgYW5kIGRpc2FibGUgVFggKi8KKwkJb3V0YihpbmIoaW8gKyBJVDg3X0NJUl9UQ1IxKSB8ICAweDAwLAorCQkgICAgIGlvICsgSVQ4N19DSVJfVENSMSk7CisKKwkJLyoKKwkJICogVFg6IGl0ODdfZnJlcSAoMzZrSHopLCAncmVzZXJ2ZWQnIHNlbnNpdGl2aXR5CisJCSAqIHNldHRpbmcgKDB4MDApCisJCSAqLworCQlvdXRiKCgoaXQ4N19mcmVxIC0gSVQ4N19DSVJfRlJFUV9NSU4pIDw8IDMpIHwgMHgwMCwKKwkJICAgICBpbyArIElUODdfQ0lSX1RDUjIpOworCX0gZWxzZSB7CisJCS8qIFRYOiAzOGtIeiwgMTMsM3VzIChwdWxzZS13aWR0aCkgKi8KKwkJb3V0YigoKGl0ODdfZnJlcSAtIElUODdfQ0lSX0ZSRVFfTUlOKSA8PCAzKSB8IDB4MDYsCisJCSAgICAgaW8gKyBJVDg3X0NJUl9UQ1IyKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGFyZHdhcmVfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIGRyb3BfaGFyZHdhcmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKKwlkaXNhYmxlX2lycShpcnEpOworCS8qIHJlY2VpdmVyIGRpc2FibGUgKi8KKwlpdDg3X1JYRU5fbWFzayA9IDA7CisJb3V0YigweDEsIGlvICsgSVQ4N19DSVJfUkNSKTsKKwkvKiB0dXJuIG9mZiBpcnFzICovCisJb3V0YigwLCBpbyArIElUODdfQ0lSX0lFUik7CisJLyogZmlmbyBjbGVhciAqLworCW91dGIoSVQ4N19DSVJfVENSMV9GSUZPQ0xSLCBpbytJVDg3X0NJUl9UQ1IxKTsKKwkvKiByZXNldCAqLworCW91dGIoSVQ4N19DSVJfSUVSX1JFU0VULCBpbytJVDg3X0NJUl9JRVIpOworCWVuYWJsZV9pcnEoaXJxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYXJkd2FyZV9sb2NrLCBmbGFncyk7Cit9CisKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgaXQ4N19yZWFkKHVuc2lnbmVkIGNoYXIgcG9ydCkKK3sKKwlvdXRiKHBvcnQsIElUODdfQURSUE9SVCk7CisJcmV0dXJuIGluYihJVDg3X0RBVEFQT1JUKTsKK30KKworCitzdGF0aWMgdm9pZCBpdDg3X3dyaXRlKHVuc2lnbmVkIGNoYXIgcG9ydCwgdW5zaWduZWQgY2hhciBkYXRhKQoreworCW91dGIocG9ydCwgSVQ4N19BRFJQT1JUKTsKKwlvdXRiKGRhdGEsIElUODdfREFUQVBPUlQpOworfQorCisKKy8qIFNFQ1RJT046IEluaXRpYWxpc2F0aW9uICovCisKK3N0YXRpYyBpbnQgaW5pdF9wb3J0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBod19mbGFnczsKKwlpbnQgcmV0dmFsID0gMDsKKworCXVuc2lnbmVkIGNoYXIgaW5pdF9ieXRlc1s0XSA9IElUODdfSU5JVDsKKwl1bnNpZ25lZCBjaGFyIGl0ODdfY2hpcGlkID0gMDsKKwl1bnNpZ25lZCBjaGFyIGxkbiA9IDA7CisJdW5zaWduZWQgaW50ICBpdDg3X2lvID0gMDsKKwl1bnNpZ25lZCBpbnQgIGl0ODdfaXJxID0gMDsKKworCS8qIEVudGVyIE1CIFBuUCBNb2RlICovCisJb3V0Yihpbml0X2J5dGVzWzBdLCBJVDg3X0FEUlBPUlQpOworCW91dGIoaW5pdF9ieXRlc1sxXSwgSVQ4N19BRFJQT1JUKTsKKwlvdXRiKGluaXRfYnl0ZXNbMl0sIElUODdfQURSUE9SVCk7CisJb3V0Yihpbml0X2J5dGVzWzNdLCBJVDg3X0FEUlBPUlQpOworCisJLyogODcxMiBvciA4NzA1ID8gKi8KKwlpdDg3X2NoaXBpZCA9IGl0ODdfcmVhZChJVDg3X0NISVBfSUQxKTsKKwlpZiAoaXQ4N19jaGlwaWQgIT0gMHg4NykgeworCQlyZXR2YWwgPSAtRU5YSU87CisJCXJldHVybiByZXR2YWw7CisJfQorCWl0ODdfY2hpcGlkID0gaXQ4N19yZWFkKElUODdfQ0hJUF9JRDIpOworCWlmICgoaXQ4N19jaGlwaWQgIT0gMHgwNSkgJiYKKwkJKGl0ODdfY2hpcGlkICE9IDB4MTIpICYmCisJCShpdDg3X2NoaXBpZCAhPSAweDE4KSAmJgorCQkoaXQ4N19jaGlwaWQgIT0gMHgyMCkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBMSVJDX0RSSVZFUl9OQU1FCisJCSAgICAgICAiOiBubyBJVDg3MDQvMDUvMTIvMTgvMjAgZm91bmQgKGNsYWltZWQgSVQ4NyUwMngpLCAiCisJCSAgICAgICAiZXhpdGluZy4uXG4iLCBpdDg3X2NoaXBpZCk7CisJCXJldHZhbCA9IC1FTlhJTzsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJcHJpbnRrKEtFUk5fSU5GTyBMSVJDX0RSSVZFUl9OQU1FCisJICAgICAgICI6IGZvdW5kIElUODclMDJ4LlxuIiwKKwkgICAgICAgaXQ4N19jaGlwaWQpOworCisJLyogZ2V0IEkvTy1Qb3J0IGFuZCBJUlEgKi8KKwlpZiAoaXQ4N19jaGlwaWQgPT0gMHgxMiB8fCBpdDg3X2NoaXBpZCA9PSAweDE4KQorCQlsZG4gPSBJVDg3MTJfQ0lSX0xETjsKKwllbHNlCisJCWxkbiA9IElUODcwNV9DSVJfTEROOworCWl0ODdfd3JpdGUoSVQ4N19MRE4sIGxkbik7CisKKwlpdDg3X2lvID0gaXQ4N19yZWFkKElUODdfQ0lSX0JBU0VfTVNCKSAqIDI1NiArCisJCSAgaXQ4N19yZWFkKElUODdfQ0lSX0JBU0VfTFNCKTsKKwlpZiAoaXQ4N19pbyA9PSAwKSB7CisJCWlmIChpbyA9PSAwKQorCQkJaW8gPSBJVDg3X0NJUl9ERUZBVUxUX0lPQkFTRTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBMSVJDX0RSSVZFUl9OQU1FCisJCSAgICAgICAiOiBzZXQgZGVmYXVsdCBpbyAweCV4XG4iLAorCQkgICAgICAgaW8pOworCQlpdDg3X3dyaXRlKElUODdfQ0lSX0JBU0VfTVNCLCBpbyAvIDB4MTAwKTsKKwkJaXQ4N193cml0ZShJVDg3X0NJUl9CQVNFX0xTQiwgaW8gJSAweDEwMCk7CisJfSBlbHNlCisJCWlvID0gaXQ4N19pbzsKKworCWl0ODdfaXJxID0gaXQ4N19yZWFkKElUODdfQ0lSX0lSUSk7CisJaWYgKGRpZ2ltYXRyaXggfHwgaXQ4N19pcnEgPT0gMCkgeworCQlpZiAoaXJxID09IDApCisJCQlpcnEgPSBJVDg3X0NJUl9ERUZBVUxUX0lSUTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBMSVJDX0RSSVZFUl9OQU1FCisJCSAgICAgICAiOiBzZXQgZGVmYXVsdCBpcnEgMHgleFxuIiwKKwkJICAgICAgIGlycSk7CisJCWl0ODdfd3JpdGUoSVQ4N19DSVJfSVJRLCBpcnEpOworCX0gZWxzZQorCQlpcnEgPSBpdDg3X2lycTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZoYXJkd2FyZV9sb2NrLCBod19mbGFncyk7CisJLyogcmVzZXQgKi8KKwlvdXRiKElUODdfQ0lSX0lFUl9SRVNFVCwgaW8rSVQ4N19DSVJfSUVSKTsKKwkvKiBmaWZvIGNsZWFyICovCisJb3V0YihJVDg3X0NJUl9UQ1IxX0ZJRk9DTFIgfAorCSAgICAgLyoJICAgICBJVDg3X0NJUl9UQ1IxX0lMRSB8ICovCisJICAgICBJVDg3X0NJUl9UQ1IxX1RYUkxFIHwKKwkgICAgIElUODdfQ0lSX1RDUjFfVFhFTkRGLCBpbytJVDg3X0NJUl9UQ1IxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYXJkd2FyZV9sb2NrLCBod19mbGFncyk7CisKKwkvKiBnZXQgSS9PIHBvcnQgYWNjZXNzIGFuZCBJUlEgbGluZSAqLworCWlmIChyZXF1ZXN0X3JlZ2lvbihpbywgOCwgTElSQ19EUklWRVJfTkFNRSkgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgTElSQ19EUklWRVJfTkFNRQorCQkgICAgICAgIjogaS9vIHBvcnQgMHglLjR4IGFscmVhZHkgaW4gdXNlLlxuIiwgaW8pOworCQkvKiBMZWF2aW5nIE1CIFBuUCBNb2RlICovCisJCWl0ODdfd3JpdGUoSVQ4N19DRkdDVFJMLCAweDIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIGFjdGl2YXRlIENJUi1EZXZpY2UgKi8KKwlpdDg3X3dyaXRlKElUODdfQ0lSX0FDVCwgMHgxKTsKKworCS8qIExlYXZpbmcgTUIgUG5QIE1vZGUgKi8KKwlpdDg3X3dyaXRlKElUODdfQ0ZHQ1RSTCwgMHgyKTsKKworCXJldHZhbCA9IHJlcXVlc3RfaXJxKGlycSwgaXQ4N19pbnRlcnJ1cHQsIDAgLypJUlFGX0RJU0FCTEVEKi8sCisJCQkgICAgIExJUkNfRFJJVkVSX05BTUUsIE5VTEwpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMSVJDX0RSSVZFUl9OQU1FCisJCSAgICAgICAiOiBJUlEgJWQgYWxyZWFkeSBpbiB1c2UuXG4iLAorCQkgICAgICAgaXJxKTsKKwkJcmVsZWFzZV9yZWdpb24oaW8sIDgpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCXByaW50ayhLRVJOX0lORk8gTElSQ19EUklWRVJfTkFNRQorCSAgICAgICAiOiBJL08gcG9ydCAweCUuNHgsIElSUSAlZC5cbiIsIGlvLCBpcnEpOworCisJaW5pdF90aW1lcigmdGltZXJsaXN0KTsKKwl0aW1lcmxpc3QuZnVuY3Rpb24gPSBpdDg3X3RpbWVvdXQ7CisJdGltZXJsaXN0LmRhdGEgPSAweGFiYWRjYWZlOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgZHJvcF9wb3J0KHZvaWQpCit7CisjaWYgMAorCXVuc2lnbmVkIGNoYXIgaW5pdF9ieXRlc1s0XSA9IElUODdfSU5JVDsKKworCS8qIEVudGVyIE1CIFBuUCBNb2RlICovCisJb3V0Yihpbml0X2J5dGVzWzBdLCBJVDg3X0FEUlBPUlQpOworCW91dGIoaW5pdF9ieXRlc1sxXSwgSVQ4N19BRFJQT1JUKTsKKwlvdXRiKGluaXRfYnl0ZXNbMl0sIElUODdfQURSUE9SVCk7CisJb3V0Yihpbml0X2J5dGVzWzNdLCBJVDg3X0FEUlBPUlQpOworCisJLyogZGVhY3RpdmF0ZSBDSVItRGV2aWNlICovCisJaXQ4N193cml0ZShJVDg3X0NJUl9BQ1QsIDB4MCk7CisKKwkvKiBMZWF2aW5nIE1CIFBuUCBNb2RlICovCisJaXQ4N193cml0ZShJVDg3X0NGR0NUUkwsIDB4Mik7CisjZW5kaWYKKworCWRlbF90aW1lcl9zeW5jKCZ0aW1lcmxpc3QpOworCWZyZWVfaXJxKGlycSwgTlVMTCk7CisJcmVsZWFzZV9yZWdpb24oaW8sIDgpOworfQorCisKK3N0YXRpYyBpbnQgaW5pdF9saXJjX2l0ODcodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmbGlyY19yZWFkX3F1ZXVlKTsKKwlyZXR2YWwgPSBpbml0X3BvcnQoKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKwlpbml0X2hhcmR3YXJlKCk7CisJcHJpbnRrKEtFUk5fSU5GTyBMSVJDX0RSSVZFUl9OQU1FICI6IEluc3RhbGxlZC5cbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGl0ODdfcHJvYmUoc3RydWN0IHBucF9kZXYgKnBucF9kZXYsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkICpkZXZfaWQpCit7CisJaW50IHJldHZhbDsKKworCWRyaXZlci5kZXYgPSAmcG5wX2Rldi0+ZGV2OworCisJcmV0dmFsID0gaW5pdF9jaHJkZXYoKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXJldHZhbCA9IGluaXRfbGlyY19pdDg3KCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBpbml0X2xpcmNfaXQ4N19mYWlsZWQ7CisKKwlyZXR1cm4gMDsKKworaW5pdF9saXJjX2l0ODdfZmFpbGVkOgorCWRyb3BfY2hyZGV2KCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IF9faW5pdCBsaXJjX2l0ODdfaW5pdCh2b2lkKQoreworCXJldHVybiBwbnBfcmVnaXN0ZXJfZHJpdmVyKCZpdDg3X3BucF9kcml2ZXIpOworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBsaXJjX2l0ODdfZXhpdCh2b2lkKQoreworCWRyb3BfaGFyZHdhcmUoKTsKKwlkcm9wX2NocmRldigpOworCWRyb3BfcG9ydCgpOworCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmaXQ4N19wbnBfZHJpdmVyKTsKKwlwcmludGsoS0VSTl9JTkZPIExJUkNfRFJJVkVSX05BTUUgIjogVW5pbnN0YWxsZWQuXG4iKTsKK30KKworLyogU0VDVElPTjogUE5QIGZvciBJVEU4NzA0LzE4ICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCBwbnBfZGV2X3RhYmxlW10gPSB7CisJeyJJVEU4NzA0IiwgMH0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocG5wLCBwbnBfZGV2X3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBwbnBfZHJpdmVyIGl0ODdfcG5wX2RyaXZlciA9IHsKKwkubmFtZSAgICAgICAgICAgPSBMSVJDX0RSSVZFUl9OQU1FLAorCS5pZF90YWJsZSAgICAgICA9IHBucF9kZXZfdGFibGUsCisJLnByb2JlCQk9IGl0ODdfcHJvYmUsCit9OworCittb2R1bGVfaW5pdChsaXJjX2l0ODdfaW5pdCk7Cittb2R1bGVfZXhpdChsaXJjX2l0ODdfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiTElSQyBkcml2ZXIgZm9yIElURSBJVDg3MDQvMDUvMTIvMTgvMjAgQ0lSIHBvcnQiKTsKK01PRFVMRV9BVVRIT1IoIkhhbnMtR3VudGVyIEx1dGtlIFVwaHVlcyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oaW8sIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGJhc2UgYWRkcmVzcyAoZGVmYXVsdDogMHgzMTApIik7CisKK21vZHVsZV9wYXJhbShpcnEsIGludCwgU19JUlVHTyk7CisjaWZkZWYgTElSQ19JVDg3X0RJR0lNQVRSSVgKK01PRFVMRV9QQVJNX0RFU0MoaXJxLCAiSW50ZXJydXB0ICgxLDMtMTIpIChkZWZhdWx0OiA5KSIpOworI2Vsc2UKK01PRFVMRV9QQVJNX0RFU0MoaXJxLCAiSW50ZXJydXB0ICgxLDMtMTIpIChkZWZhdWx0OiA3KSIpOworI2VuZGlmCisKK21vZHVsZV9wYXJhbShpdDg3X2VuYWJsZV9kZW1vZHVsYXRvciwgYm9vbCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGl0ODdfZW5hYmxlX2RlbW9kdWxhdG9yLAorCQkgIlJlY2VpdmVyIGRlbW9kdWxhdG9yIGVuYWJsZS9kaXNhYmxlICgxLzApLCBkZWZhdWx0OiAwIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMiKTsKKworbW9kdWxlX3BhcmFtKGRpZ2ltYXRyaXgsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKKyNpZmRlZiBMSVJDX0lUODdfRElHSU1BVFJJWAorTU9EVUxFX1BBUk1fREVTQyhkaWdpbWF0cml4LAorCSJBc3VzIERpZ2ltYXRyaXggaXQ4NyBjb21wYXQuIGVuYWJsZS9kaXNhYmxlICgxLzApLCBkZWZhdWx0OiAxIik7CisjZWxzZQorTU9EVUxFX1BBUk1fREVTQyhkaWdpbWF0cml4LAorCSJBc3VzIERpZ2ltYXRyaXggaXQ4NyBjb21wYXQuIGVuYWJsZS9kaXNhYmxlICgxLzApLCBkZWZhdWx0OiAwIik7CisjZW5kaWYKKworCittb2R1bGVfcGFyYW0oaXQ4N19mcmVxLCBpbnQsIFNfSVJVR08pOworI2lmZGVmIExJUkNfSVQ4N19ESUdJTUFUUklYCitNT0RVTEVfUEFSTV9ERVNDKGl0ODdfZnJlcSwKKyAgICAiQ2FycmllciBkZW1vZHVsYXRvciBmcmVxdWVuY3kgKGtIeiksIChkZWZhdWx0OiAzNikiKTsKKyNlbHNlCitNT0RVTEVfUEFSTV9ERVNDKGl0ODdfZnJlcSwKKyAgICAiQ2FycmllciBkZW1vZHVsYXRvciBmcmVxdWVuY3kgKGtIeiksIChkZWZhdWx0OiAzOCkiKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19pdDg3LmggYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX2l0ODcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjAyMWM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19pdDg3LmgKQEAgLTAsMCArMSwxMTYgQEAKKy8qIGxpcmNfaXQ4Ny5oICovCisvKiBTRUNUSU9OOiBEZWZpbml0aW9ucyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIElURSBJVDg3eHggKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBiYXNlZCBvbiB0aGUgZm9sbG93aW5nIGRvY3VtZW50YXRpb24gZnJvbSBJVEU6CisgICBhKSBJVDg3MTJGIFByZWxpbWluYXJ5IENJUiBQcm9ncmFtbWluZyBHdWlkZSBWMC4xCisgICBiKSBJVDg3MDVGIFNpbXBsZSBMUEMgSS9PIFByZWxpbWluYXJ5IFNwZWNpZmljYXRpb24gVjAuMworICAgYykgSVQ4NzEyRiBFQy1MUEMgSS9PIFByZWxpbWluYXJ5IFNwZWNpZmljYXRpb24gVjAuNQorKi8KKworLyogSVQ4NzEyLzA1IFBvcnRzOiAqLworI2RlZmluZSBJVDg3X0FEUlBPUlQgICAgICAweDJlCisjZGVmaW5lIElUODdfREFUQVBPUlQgICAgIDB4MmYKKyNkZWZpbmUgSVQ4N19JTklUICAgICAgICAgezB4ODcsIDB4MDEsIDB4NTUsIDB4NTV9CisKKy8qIGFsdGVybmF0ZSBQb3J0czogKi8KKy8qCisjZGVmaW5lIElUODdfQURSUE9SVCAgICAgIDB4NGUKKyNkZWZpbmUgSVQ4N19EQVRBUE9SVCAgICAgMHg0ZgorI2RlZmluZSBJVDg3X0lOSVQgICAgICAgICB7MHg4NywgMHgwMSwgMHg1NSwgMHhhYX0KKyAqLworCisvKiBJVDg3MTIvMDUgUmVnaXN0ZXJzICovCisjZGVmaW5lIElUODdfQ0ZHQ1RSTCAgICAgIDB4MgorI2RlZmluZSBJVDg3X0xETiAgICAgICAgICAweDcKKyNkZWZpbmUgSVQ4N19DSElQX0lEMSAgICAgMHgyMAorI2RlZmluZSBJVDg3X0NISVBfSUQyICAgICAweDIxCisjZGVmaW5lIElUODdfQ0ZHX1ZFUlNJT04gIDB4MjIKKyNkZWZpbmUgSVQ4N19TV1NVU1BFTkQgICAgMHgyMworCisjZGVmaW5lIElUODcxMl9DSVJfTEROICAgIDB4YQorI2RlZmluZSBJVDg3MDVfQ0lSX0xETiAgICAweDcKKworLyogQ0lSIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzOiAqLworI2RlZmluZSBJVDg3X0NJUl9BQ1QgICAgICAweDMwCisjZGVmaW5lIElUODdfQ0lSX0JBU0VfTVNCIDB4NjAKKyNkZWZpbmUgSVQ4N19DSVJfQkFTRV9MU0IgMHg2MQorI2RlZmluZSBJVDg3X0NJUl9JUlEgICAgICAweDcwCisjZGVmaW5lIElUODdfQ0lSX0NPTkZJRyAgIDB4ZjAKKworLyogTGlzdCBvZiBJVDg3X0NJUiByZWdpc3RlcnM6IG9mZnNldCB0byBCYXNlQWRkciAqLworI2RlZmluZSBJVDg3X0NJUl9EUiAgIDAKKyNkZWZpbmUgSVQ4N19DSVJfSUVSICAxCisjZGVmaW5lIElUODdfQ0lSX1JDUiAgMgorI2RlZmluZSBJVDg3X0NJUl9UQ1IxIDMKKyNkZWZpbmUgSVQ4N19DSVJfVENSMiA0CisjZGVmaW5lIElUODdfQ0lSX1RTUiAgNQorI2RlZmluZSBJVDg3X0NJUl9SU1IgIDYKKyNkZWZpbmUgSVQ4N19DSVJfQkRMUiA1CisjZGVmaW5lIElUODdfQ0lSX0JESFIgNgorI2RlZmluZSBJVDg3X0NJUl9JSVIgIDcKKworLyogQml0IERlZmluaXRpb24gKi8KKy8qIElFUjogKi8KKyNkZWZpbmUgSVQ4N19DSVJfSUVSX1RNX0VOICAgMHg4MAorI2RlZmluZSBJVDg3X0NJUl9JRVJfUkVTRVZFRCAweDQwCisjZGVmaW5lIElUODdfQ0lSX0lFUl9SRVNFVCAgIDB4MjAKKyNkZWZpbmUgSVQ4N19DSVJfSUVSX0JSICAgICAgMHgxMAorI2RlZmluZSBJVDg3X0NJUl9JRVJfSUVDICAgICAweDgKKyNkZWZpbmUgSVQ4N19DSVJfSUVSX1JGT0lFICAgMHg0CisjZGVmaW5lIElUODdfQ0lSX0lFUl9SREFJRSAgIDB4MgorI2RlZmluZSBJVDg3X0NJUl9JRVJfVExETElFICAweDEKKworLyogUkNSOiAqLworI2RlZmluZSBJVDg3X0NJUl9SQ1JfUkRXT1MgIDB4ODAKKyNkZWZpbmUgSVQ4N19DSVJfUkNSX0hDRlMgICAweDQwCisjZGVmaW5lIElUODdfQ0lSX1JDUl9SWEVOICAgMHgyMAorI2RlZmluZSBJVDg3X0NJUl9SQ1JfUlhFTkQgIDB4MTAKKyNkZWZpbmUgSVQ4N19DSVJfUkNSX1JYQUNUICAweDgKKyNkZWZpbmUgSVQ4N19DSVJfUkNSX1JYRENSICAweDcKKworLyogVENSMTogKi8KKyNkZWZpbmUgSVQ4N19DSVJfVENSMV9GSUZPQ0xSIDB4ODAKKyNkZWZpbmUgSVQ4N19DSVJfVENSMV9JTEUgICAgIDB4NDAKKyNkZWZpbmUgSVQ4N19DSVJfVENSMV9GSUZPVEwgIDB4MzAKKyNkZWZpbmUgSVQ4N19DSVJfVENSMV9UWFJMRSAgIDB4OAorI2RlZmluZSBJVDg3X0NJUl9UQ1IxX1RYRU5ERiAgMHg0CisjZGVmaW5lIElUODdfQ0lSX1RDUjFfVFhNUE0gICAweDMKKworLyogVENSMjogKi8KKyNkZWZpbmUgSVQ4N19DSVJfVENSMl9DRlEgICAweGY4CisjZGVmaW5lIElUODdfQ0lSX1RDUjJfVFhNUFcgMHg3CisKKy8qIFRTUjogKi8KKyNkZWZpbmUgSVQ4N19DSVJfVFNSX1JFU0VSVkVEIDB4YzAKKyNkZWZpbmUgSVQ4N19DSVJfVFNSX1RYRkJDICAgIDB4M2YKKworLyogUlNSOiAqLworI2RlZmluZSBJVDg3X0NJUl9SU1JfUlhGVE8gICAgMHg4MAorI2RlZmluZSBJVDg3X0NJUl9SU1JfUkVTRVJWRUQgMHg0MAorI2RlZmluZSBJVDg3X0NJUl9SU1JfUlhGQkMgICAgMHgzZgorCisvKiBJSVI6ICovCisjZGVmaW5lIElUODdfQ0lSX0lJUl9SRVNFUlZFRCAweGY4CisjZGVmaW5lIElUODdfQ0lSX0lJUl9JSUQgICAgICAweDYKKyNkZWZpbmUgSVQ4N19DSVJfSUlSX0lJUCAgICAgIDB4MQorCisvKiBUTTogKi8KKyNkZWZpbmUgSVQ4N19DSVJfVE1fSUxfU0VMICAgIDB4ODAKKyNkZWZpbmUgSVQ4N19DSVJfVE1fUkVTRVJWRUQgIDB4NDAKKyNkZWZpbmUgSVQ4N19DSVJfVE1fVE1fUkVHICAgIDB4M2YKKworI2RlZmluZSBJVDg3X0NJUl9GSUZPX1NJWkUgMzIKKworLyogQmF1ZHJhdGVkaXZpc29yIGZvciBJVDg3OiBwb3dlciBvZiAyOiBvbmx5IDEsMiw0IG9yIDgpICovCisjZGVmaW5lIElUODdfQ0lSX0JBVURSQVRFX0RJVklTT1IgMHgxCisjZGVmaW5lIElUODdfQ0lSX0RFRkFVTFRfSU9CQVNFIDB4MzEwCisjZGVmaW5lIElUODdfQ0lSX0RFRkFVTFRfSVJRICAgIDB4NworI2RlZmluZSBJVDg3X0NJUl9TUEFDRSAweDAwCisjZGVmaW5lIElUODdfQ0lSX1BVTFNFIDB4ZmYKKyNkZWZpbmUgSVQ4N19DSVJfRlJFUV9NSU4gMjcKKyNkZWZpbmUgSVQ4N19DSVJfRlJFUV9NQVggNTgKKyNkZWZpbmUgVElNRV9DT05TVCAoSVQ4N19DSVJfQkFVRFJBVEVfRElWSVNPUiAqIDgwMDAwMDB1bCAvIDExNTIwMHVsKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIElURSBJVDg3eHggKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19pdGU4NzA5LmMgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX2l0ZTg3MDkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzUyZjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19pdGU4NzA5LmMKQEAgLTAsMCArMSw1NDIgQEAKKy8qCisgKiBMSVJDIGRyaXZlciBmb3IgSVRFODcwOSBDSVIgcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBHcsOpZ29yeSBMYXJkacOocmUgPHNwbWYyMDA0LWxpcmNAeWFob28uZnI+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICogVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWVkaWEvbGlyYy5oPgorI2luY2x1ZGUgPG1lZGlhL2xpcmNfZGV2Lmg+CisKKyNkZWZpbmUgTElSQ19EUklWRVJfTkFNRSAibGlyY19pdGU4NzA5IgorCisjZGVmaW5lIEJVRl9DSFVOS19TSVpFCXNpemVvZihpbnQpCisjZGVmaW5lIEJVRl9TSVpFCSgxMjgqQlVGX0NIVU5LX1NJWkUpCisKKy8qCisgKiBUaGUgSVRFODcwOSBkZXZpY2Ugc2VlbXMgdG8gYmUgdGhlIGNvbWJpbmF0aW9uIG9mIElUODUxMiBzdXBlcklPIGNoaXAgYW5kCisgKiBhIHNwZWNpZmljIGZpcm13YXJlIHJ1bm5pbmcgb24gdGhlIElUODUxMidzIGVtYmVkZGVkIG1pY3JvLWNvbnRyb2xsZXIuCisgKiBJbiBhZGRpdGlvbiBvZiB0aGUgZW1iZWRkZWQgbWljcm8tY29udHJvbGxlciwgdGhlIElUODUxMiBjaGlwIGNvbnRhaW5zIGEKKyAqIENJUiBtb2R1bGUgYW5kIHNldmVyYWwgb3RoZXIgbW9kdWxlcy4gQSBmZXcgbW9kdWxlcyBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZQorICogYnkgdGhlIGhvc3QgQ1BVLCBidXQgbW9zdCBvZiB0aGVtIGFyZSBvbmx5IGFjY2Vzc2libGUgYnkgdGhlCisgKiBtaWNyby1jb250cm9sbGVyLiBUaGUgQ0lSIG1vZHVsZSBpcyBvbmx5IGFjY2Vzc2libGUgYnkgdGhlIG1pY3JvLWNvbnRyb2xsZXIuCisgKiBUaGUgYmF0dGVyeS1iYWNrZWQgU1JBTSBtb2R1bGUgaXMgYWNjZXNzaWJsZSBieSB0aGUgaG9zdCBDUFUgYW5kIHRoZQorICogbWljcm8tY29udHJvbGxlci4gU28gb25lIG9mIHRoZSBNQydzIGZpcm13YXJlIHJvbGUgaXMgdG8gYWN0IGFzIGEgYnJpZGdlCisgKiBiZXR3ZWVuIHRoZSBob3N0IENQVSBhbmQgdGhlIENJUiBtb2R1bGUuIFRoZSBmaXJtd2FyZSBpbXBsZW1lbnRzIGEga2luZCBvZgorICogY29tbXVuaWNhdGlvbiBwcm90b2NvbCB1c2luZyB0aGUgU1JBTSBtb2R1bGUgYXMgYSBzaGFyZWQgbWVtb3J5LiBUaGUgSVQ4NTEyCisgKiBzcGVjaWZpY2F0aW9uIGlzIHB1YmxpY2x5IGF2YWlsYWJsZSBvbiBJVEUncyB3ZWIgc2l0ZSwgYnV0IHRoZSBjb21tdW5pY2F0aW9uCisgKiBwcm90b2NvbCBpcyBub3QsIHNvIGl0IHdhcyByZXZlcnNlLWVuZ2luZWVyZWQuCisgKi8KKworLyogSVRFODcwOSBSZWdpc3RlcnMgYWRkcmVzc2VzIGFuZCB2YWx1ZXMgKHJldmVyc2UtZW5naW5lZXJlZCkgKi8KKyNkZWZpbmUgSVRFODcwOV9NT0RFCQkweDFhCisjZGVmaW5lIElURTg3MDlfUkVHX0FEUgkJMHgxYgorI2RlZmluZSBJVEU4NzA5X1JFR19WQUwJCTB4MWMKKyNkZWZpbmUgSVRFODcwOV9JSVIJCTB4MWUgIC8qIEludGVycnVwdCBpZGVudGlmaWNhdGlvbiByZWdpc3RlciAqLworI2RlZmluZSBJVEU4NzA5X1JGU1IJCTB4MWYgIC8qIFJlY2VpdmVyIEZJRk8gc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIElURTg3MDlfRklGT19TVEFSVAkweDIwCisKKyNkZWZpbmUgSVRFODcwOV9NT0RFX1JFQURZCTBYMDAKKyNkZWZpbmUgSVRFODcwOV9NT0RFX1dSSVRFCTBYMDEKKyNkZWZpbmUgSVRFODcwOV9NT0RFX1JFQUQJMFgwMgorI2RlZmluZSBJVEU4NzA5X0lJUl9SREFJCTB4MDIgIC8qIFJlY2VpdmVyIGRhdGEgYXZhaWxhYmxlIGludGVycnVwdCAqLworI2RlZmluZSBJVEU4NzA5X0lJUl9SRk9JCTB4MDQgIC8qIFJlY2VpdmVyIEZJRk8gb3ZlcnJ1biBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVRFODcwOV9SRlNSX01BU0sJMHgzZiAgLyogRklGTyBieXRlIGNvdW50IG1hc2sgKi8KKworLyoKKyAqIElUODUxMiBDSVItbW9kdWxlIHJlZ2lzdGVycyBhZGRyZXNzZXMgYW5kIHZhbHVlcworICogKGZyb20gSVQ4NTEyIEUvRiBzcGVjaWZpY2F0aW9uIHYwLjQuMSkKKyAqLworI2RlZmluZSBJVDg1MTJfUkVHX01TVENSCTB4MDEgIC8qIE1hc3RlciBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIElUODUxMl9SRUdfSUVSCQkweDAyICAvKiBJbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyICovCisjZGVmaW5lIElUODUxMl9SRUdfQ0ZSCQkweDA0ICAvKiBDYXJyaWVyIGZyZXF1ZW5jeSByZWdpc3RlciAqLworI2RlZmluZSBJVDg1MTJfUkVHX1JDUgkJMHgwNSAgLyogUmVjZWl2ZSBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIElUODUxMl9SRUdfQkRMUgkJMHgwOCAgLyogQmF1ZCByYXRlIGRpdmlzb3IgbG93IGJ5dGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSVQ4NTEyX1JFR19CREhSCQkweDA5ICAvKiBCYXVkIHJhdGUgZGl2aXNvciBoaWdoIGJ5dGUgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBJVDg1MTJfTVNUQ1JfUkVTRVQJMHgwMSAgLyogUmVzZXQgcmVnaXN0ZXJzIHRvIGRlZmF1bHQgdmFsdWUgKi8KKyNkZWZpbmUgSVQ4NTEyX01TVENSX0ZJRk9DTFIJMHgwMiAgLyogQ2xlYXIgRklGTyAqLworI2RlZmluZSBJVDg1MTJfTVNUQ1JfRklGT1RMXzcJMHgwNCAgLyogRklGTyB0aHJlc2hvbGQgbGV2ZWwgOiA3ICovCisjZGVmaW5lIElUODUxMl9NU1RDUl9GSUZPVExfMjUJMHgwYyAgLyogRklGTyB0aHJlc2hvbGQgbGV2ZWwgOiAyNSAqLworI2RlZmluZSBJVDg1MTJfSUVSX1JEQUlFCTB4MDIgIC8qIEVuYWJsZSBkYXRhIGludGVycnVwdCByZXF1ZXN0ICovCisjZGVmaW5lIElUODUxMl9JRVJfUkZPSUUJMHgwNCAgLyogRW5hYmxlIEZJRk8gb3ZlcnJ1biBpbnRlcnJ1cHQgcmVxICovCisjZGVmaW5lIElUODUxMl9JRVJfSUVDCQkweDgwICAvKiBFbmFibGUgaW50ZXJydXB0IHJlcXVlc3QgKi8KKyNkZWZpbmUgSVQ4NTEyX0NGUl9DRl8zNktIWgkweDA5ICAvKiBDYXJyaWVyIGZyZXEgOiBsb3cgc3BlZWQsIDM2a0h6ICovCisjZGVmaW5lIElUODUxMl9SQ1JfUlhEQ1JfMQkweDAxICAvKiBEZW1vZHVsYXRpb24gY2FycmllciByYW5nZSA6IDEgKi8KKyNkZWZpbmUgSVQ4NTEyX1JDUl9SWEFDVAkweDA4ICAvKiBSZWNlaXZlciBhY3RpdmUgKi8KKyNkZWZpbmUgSVQ4NTEyX1JDUl9SWEVOCQkweDgwICAvKiBSZWNlaXZlciBlbmFibGUgKi8KKyNkZWZpbmUgSVQ4NTEyX0JEUl82CQk2ICAgICAvKiBCYXVkIHJhdGUgZGl2aXNvciA6IDYgKi8KKworLyogQWN0dWFsIHZhbHVlcyB1c2VkIGJ5IHRoaXMgZHJpdmVyICovCisjZGVmaW5lIENGR19GSUZPVEwJSVQ4NTEyX01TVENSX0ZJRk9UTF8yNQorI2RlZmluZSBDRkdfQ1JfRlJFUQlJVDg1MTJfQ0ZSX0NGXzM2S0haCisjZGVmaW5lIENGR19EQ1IJCUlUODUxMl9SQ1JfUlhEQ1JfMQorI2RlZmluZSBDRkdfQkRSCQlJVDg1MTJfQkRSXzYKKyNkZWZpbmUgQ0ZHX1RJTUVPVVQJMTAwMDAwIC8qIFJlYXJtIGludGVycnVwdCB3aGVuIGEgc3BhY2UgaXMgPiAxMDAgbXMgKi8KKworc3RhdGljIGludCBkZWJ1ZzsKKworc3RydWN0IGl0ZTg3MDlfZGV2aWNlIHsKKwlpbnQgdXNlX2NvdW50OworCWludCBpbzsKKwlpbnQgaXJxOworCXNwaW5sb2NrX3QgaGFyZHdhcmVfbG9jazsKKwl1bnNpZ25lZCBsb25nIGxvbmcgYWNjX3B1bHNlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBhY2Nfc3BhY2U7CisJY2hhciBsYXN0Yml0OworCXN0cnVjdCB0aW1ldmFsIGxhc3RfdHY7CisJc3RydWN0IGxpcmNfZHJpdmVyIGRyaXZlcjsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGFza2xldDsKKwljaGFyIGZvcmNlX3JlYXJtOworCWNoYXIgcmVhcm1lZDsKKwljaGFyIGRldmljZV9idXN5OworfTsKKworI2RlZmluZSBkcHJpbnRrKGZtdCwgYXJncy4uLikJCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJaWYgKGRlYnVnKQkJCQkJXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgTElSQ19EUklWRVJfTkFNRSAiOiAiCVwKKwkJCQlmbXQsICMjIGFyZ3MpOwkJCVwKKwl9IHdoaWxlICgwKQorCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGl0ZTg3MDlfcmVhZChzdHJ1Y3QgaXRlODcwOV9kZXZpY2UgKmRldiwKKwkJCQkJdW5zaWduZWQgY2hhciBwb3J0KQoreworCW91dGIocG9ydCwgZGV2LT5pbyk7CisJcmV0dXJuIGluYihkZXYtPmlvKzEpOworfQorCitzdGF0aWMgdm9pZCBpdGU4NzA5X3dyaXRlKHN0cnVjdCBpdGU4NzA5X2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIHBvcnQsCisJCQkJdW5zaWduZWQgY2hhciBkYXRhKQoreworCW91dGIocG9ydCwgZGV2LT5pbyk7CisJb3V0YihkYXRhLCBkZXYtPmlvKzEpOworfQorCitzdGF0aWMgdm9pZCBpdGU4NzA5X3dhaXRfZGV2aWNlKHN0cnVjdCBpdGU4NzA5X2RldmljZSAqZGV2KQoreworCWludCBpID0gMDsKKwkvKgorCSAqIGxvb3AgdW50aWwgZGV2aWNlIHRlbGxzIGl0J3MgcmVhZHkgdG8gY29udGludWUKKwkgKiBpdGVyYXRpb25zIGNvdW50IGlzIHVzdWFsbHkgfjc1MCBidXQgY2FuIHNvbWV0aW1lcyBhY2hpZXZlIDEzMDAwCisJICovCisJZm9yIChpID0gMDsgaSA8IDE1MDAwOyBpKyspIHsKKwkJdWRlbGF5KDIpOworCQlpZiAoaXRlODcwOV9yZWFkKGRldiwgSVRFODcwOV9NT0RFKSA9PSBJVEU4NzA5X01PREVfUkVBRFkpCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGl0ZTg3MDlfd3JpdGVfcmVnaXN0ZXIoc3RydWN0IGl0ZTg3MDlfZGV2aWNlICpkZXYsCisJCQkJdW5zaWduZWQgY2hhciByZWdfYWRyLCB1bnNpZ25lZCBjaGFyIHJlZ192YWx1ZSkKK3sKKwlpdGU4NzA5X3dhaXRfZGV2aWNlKGRldik7CisKKwlpdGU4NzA5X3dyaXRlKGRldiwgSVRFODcwOV9SRUdfVkFMLCByZWdfdmFsdWUpOworCWl0ZTg3MDlfd3JpdGUoZGV2LCBJVEU4NzA5X1JFR19BRFIsIHJlZ19hZHIpOworCWl0ZTg3MDlfd3JpdGUoZGV2LCBJVEU4NzA5X01PREUsIElURTg3MDlfTU9ERV9XUklURSk7Cit9CisKK3N0YXRpYyB2b2lkIGl0ZTg3MDlfaW5pdF9oYXJkd2FyZShzdHJ1Y3QgaXRlODcwOV9kZXZpY2UgKmRldikKK3sKKwlzcGluX2xvY2tfaXJxKCZkZXYtPmhhcmR3YXJlX2xvY2spOworCWRldi0+ZGV2aWNlX2J1c3kgPSAxOworCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5oYXJkd2FyZV9sb2NrKTsKKworCWl0ZTg3MDlfd3JpdGVfcmVnaXN0ZXIoZGV2LCBJVDg1MTJfUkVHX0JESFIsIChDRkdfQkRSID4+IDgpICYgMHhmZik7CisJaXRlODcwOV93cml0ZV9yZWdpc3RlcihkZXYsIElUODUxMl9SRUdfQkRMUiwgQ0ZHX0JEUiAmIDB4ZmYpOworCWl0ZTg3MDlfd3JpdGVfcmVnaXN0ZXIoZGV2LCBJVDg1MTJfUkVHX0NGUiwgQ0ZHX0NSX0ZSRVEpOworCWl0ZTg3MDlfd3JpdGVfcmVnaXN0ZXIoZGV2LCBJVDg1MTJfUkVHX0lFUiwKKwkJCUlUODUxMl9JRVJfSUVDIHwgSVQ4NTEyX0lFUl9SRk9JRSB8IElUODUxMl9JRVJfUkRBSUUpOworCWl0ZTg3MDlfd3JpdGVfcmVnaXN0ZXIoZGV2LCBJVDg1MTJfUkVHX1JDUiwgQ0ZHX0RDUik7CisJaXRlODcwOV93cml0ZV9yZWdpc3RlcihkZXYsIElUODUxMl9SRUdfTVNUQ1IsCisJCQkJCUNGR19GSUZPVEwgfCBJVDg1MTJfTVNUQ1JfRklGT0NMUik7CisJaXRlODcwOV93cml0ZV9yZWdpc3RlcihkZXYsIElUODUxMl9SRUdfUkNSLAorCQkJCUlUODUxMl9SQ1JfUlhFTiB8IElUODUxMl9SQ1JfUlhBQ1QgfCBDRkdfRENSKTsKKworCXNwaW5fbG9ja19pcnEoJmRldi0+aGFyZHdhcmVfbG9jayk7CisJZGV2LT5kZXZpY2VfYnVzeSA9IDA7CisJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPmhhcmR3YXJlX2xvY2spOworCisJdGFza2xldF9lbmFibGUoJmRldi0+dGFza2xldCk7Cit9CisKK3N0YXRpYyB2b2lkIGl0ZTg3MDlfZHJvcF9oYXJkd2FyZShzdHJ1Y3QgaXRlODcwOV9kZXZpY2UgKmRldikKK3sKKwl0YXNrbGV0X2Rpc2FibGUoJmRldi0+dGFza2xldCk7CisKKwlzcGluX2xvY2tfaXJxKCZkZXYtPmhhcmR3YXJlX2xvY2spOworCWRldi0+ZGV2aWNlX2J1c3kgPSAxOworCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5oYXJkd2FyZV9sb2NrKTsKKworCWl0ZTg3MDlfd3JpdGVfcmVnaXN0ZXIoZGV2LCBJVDg1MTJfUkVHX1JDUiwgMCk7CisJaXRlODcwOV93cml0ZV9yZWdpc3RlcihkZXYsIElUODUxMl9SRUdfTVNUQ1IsCisJCQkJSVQ4NTEyX01TVENSX1JFU0VUIHwgSVQ4NTEyX01TVENSX0ZJRk9DTFIpOworCisJc3Bpbl9sb2NrX2lycSgmZGV2LT5oYXJkd2FyZV9sb2NrKTsKKwlkZXYtPmRldmljZV9idXN5ID0gMDsKKwlzcGluX3VubG9ja19pcnEoJmRldi0+aGFyZHdhcmVfbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgaXRlODcwOV9zZXRfdXNlX2luYyh2b2lkICpkYXRhKQoreworCXN0cnVjdCBpdGU4NzA5X2RldmljZSAqZGV2OworCWRldiA9IGRhdGE7CisJaWYgKGRldi0+dXNlX2NvdW50ID09IDApCisJCWl0ZTg3MDlfaW5pdF9oYXJkd2FyZShkZXYpOworCWRldi0+dXNlX2NvdW50Kys7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGl0ZTg3MDlfc2V0X3VzZV9kZWModm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXRlODcwOV9kZXZpY2UgKmRldjsKKwlkZXYgPSBkYXRhOworCWRldi0+dXNlX2NvdW50LS07CisJaWYgKGRldi0+dXNlX2NvdW50ID09IDApCisJCWl0ZTg3MDlfZHJvcF9oYXJkd2FyZShkZXYpOworfQorCitzdGF0aWMgdm9pZCBpdGU4NzA5X2FkZF9yZWFkX3F1ZXVlKHN0cnVjdCBpdGU4NzA5X2RldmljZSAqZGV2LCBpbnQgZmxhZywKKwkJCQkJdW5zaWduZWQgbG9uZyBsb25nIHZhbCkKK3sKKwlpbnQgdmFsdWU7CisKKwlkcHJpbnRrKCJhZGQgYSAlbGx1IHVzZWMgJXNcbiIsIHZhbCwgZmxhZyA/ICJwdWxzZSIgOiAic3BhY2UiKTsKKworCXZhbHVlID0gKHZhbCA+IFBVTFNFX01BU0spID8gUFVMU0VfTUFTSyA6IHZhbDsKKwlpZiAoZmxhZykKKwkJdmFsdWUgfD0gUFVMU0VfQklUOworCisJaWYgKCFsaXJjX2J1ZmZlcl9mdWxsKGRldi0+ZHJpdmVyLnJidWYpKSB7CisJCWxpcmNfYnVmZmVyX3dyaXRlKGRldi0+ZHJpdmVyLnJidWYsICh2b2lkICopICZ2YWx1ZSk7CisJCXdha2VfdXAoJmRldi0+ZHJpdmVyLnJidWYtPndhaXRfcG9sbCk7CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaXRlODcwOV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXVuc2lnbmVkIGNoYXIgZGF0YTsKKwlpbnQgaWlyLCByZnNyLCBpOworCWludCBmaWZvID0gMDsKKwljaGFyIGJpdDsKKwlzdHJ1Y3QgdGltZXZhbCBjdXJyX3R2OworCisJLyogQml0IGR1cmF0aW9uIGluIG1pY3Jvc2Vjb25kcyAqLworCWNvbnN0IHVuc2lnbmVkIGxvbmcgYml0X2R1cmF0aW9uID0gMTAwMDAwMHVsIC8gKDExNTIwMCAvIENGR19CRFIpOworCisJc3RydWN0IGl0ZTg3MDlfZGV2aWNlICpkZXY7CisJZGV2ID0gZGV2X2lkOworCisJLyoKKwkgKiBJZiBkZXZpY2UgaXMgYnVzeSwgd2Ugc2ltcGx5IGRpc2NhcmQgZGF0YSBiZWNhdXNlIHdlIGFyZSBpbiBvbmUgb2YKKwkgKiB0aGVzZSB0d28gY2FzZXMgOiBzaHV0dGluZyBkb3duIG9yIHJlYXJtaW5nIHRoZSBkZXZpY2UsIHNvIHRoaXMKKwkgKiBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgYW5kIHRoaXMgYXZvaWRzIHdhaXRpbmcgdG9vIGxvbmcgaW4gSVJRIGN0eAorCSAqLworCXNwaW5fbG9jaygmZGV2LT5oYXJkd2FyZV9sb2NrKTsKKwlpZiAoZGV2LT5kZXZpY2VfYnVzeSkgeworCQlzcGluX3VubG9jaygmZGV2LT5oYXJkd2FyZV9sb2NrKTsKKwkJcmV0dXJuIElSUV9SRVRWQUwoSVJRX0hBTkRMRUQpOworCX0KKworCWlpciA9IGl0ZTg3MDlfcmVhZChkZXYsIElURTg3MDlfSUlSKTsKKworCXN3aXRjaCAoaWlyKSB7CisJY2FzZSBJVEU4NzA5X0lJUl9SRk9JOgorCQlkcHJpbnRrKCJmaWZvIG92ZXJydW4sIHNjaGVkdWxpbmcgZm9yY2VkIHJlYXJtIGp1c3QgaW4gY2FzZVxuIik7CisJCWRldi0+Zm9yY2VfcmVhcm0gPSAxOworCQl0YXNrbGV0X3NjaGVkdWxlKCZkZXYtPnRhc2tsZXQpOworCQlzcGluX3VubG9jaygmZGV2LT5oYXJkd2FyZV9sb2NrKTsKKwkJcmV0dXJuIElSUV9SRVRWQUwoSVJRX0hBTkRMRUQpOworCisJY2FzZSBJVEU4NzA5X0lJUl9SREFJOgorCQlyZnNyID0gaXRlODcwOV9yZWFkKGRldiwgSVRFODcwOV9SRlNSKTsKKwkJZmlmbyA9IHJmc3IgJiBJVEU4NzA5X1JGU1JfTUFTSzsKKwkJaWYgKGZpZm8gPiAzMikKKwkJCWZpZm8gPSAzMjsKKwkJZHByaW50aygiaWlyOiAweCV4IHJmc3I6IDB4JXggZmlmbzogJWRcbiIsIGlpciwgcmZzciwgZmlmbyk7CisKKwkJaWYgKGRldi0+cmVhcm1lZCkgeworCQkJZG9fZ2V0dGltZW9mZGF5KCZjdXJyX3R2KTsKKwkJCWRldi0+YWNjX3NwYWNlICs9IDEwMDAwMDB1bGwKKwkJCQkqIChjdXJyX3R2LnR2X3NlYyAtIGRldi0+bGFzdF90di50dl9zZWMpCisJCQkJKyAoY3Vycl90di50dl91c2VjIC0gZGV2LT5sYXN0X3R2LnR2X3VzZWMpOworCQkJZGV2LT5yZWFybWVkID0gMDsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgZmlmbzsgaSsrKSB7CisJCQlkYXRhID0gaXRlODcwOV9yZWFkKGRldiwgaStJVEU4NzA5X0ZJRk9fU1RBUlQpOworCQkJZGF0YSA9IH5kYXRhOworCQkJLyogTG9vcCB0aHJvdWdoICovCisJCQlmb3IgKGJpdCA9IDA7IGJpdCA8IDg7ICsrYml0KSB7CisJCQkJaWYgKChkYXRhID4+IGJpdCkgJiAxKSB7CisJCQkJCWRldi0+YWNjX3B1bHNlICs9IGJpdF9kdXJhdGlvbjsKKwkJCQkJaWYgKGRldi0+bGFzdGJpdCA9PSAwKSB7CisJCQkJCQlpdGU4NzA5X2FkZF9yZWFkX3F1ZXVlKGRldiwgMCwKKwkJCQkJCQlkZXYtPmFjY19zcGFjZSk7CisJCQkJCQlkZXYtPmFjY19zcGFjZSA9IDA7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlkZXYtPmFjY19zcGFjZSArPSBiaXRfZHVyYXRpb247CisJCQkJCWlmIChkZXYtPmxhc3RiaXQgPT0gMSkgeworCQkJCQkJaXRlODcwOV9hZGRfcmVhZF9xdWV1ZShkZXYsIDEsCisJCQkJCQkJZGV2LT5hY2NfcHVsc2UpOworCQkJCQkJZGV2LT5hY2NfcHVsc2UgPSAwOworCQkJCQl9CisJCQkJfQorCQkJCWRldi0+bGFzdGJpdCA9IChkYXRhID4+IGJpdCkgJiAxOworCQkJfQorCQl9CisJCWl0ZTg3MDlfd3JpdGUoZGV2LCBJVEU4NzA5X1JGU1IsIDApOworCisJCWlmIChkZXYtPmFjY19zcGFjZSA+IENGR19USU1FT1VUKSB7CisJCQlkcHJpbnRrKCJzY2hlZHVsaW5nIHJlYXJtIElSUVxuIik7CisJCQlkb19nZXR0aW1lb2ZkYXkoJmRldi0+bGFzdF90dik7CisJCQlkZXYtPmZvcmNlX3JlYXJtID0gMDsKKwkJCXRhc2tsZXRfc2NoZWR1bGUoJmRldi0+dGFza2xldCk7CisJCX0KKworCQlzcGluX3VubG9jaygmZGV2LT5oYXJkd2FyZV9sb2NrKTsKKwkJcmV0dXJuIElSUV9SRVRWQUwoSVJRX0hBTkRMRUQpOworCisJZGVmYXVsdDoKKwkJLyogbm90IG91ciBpcnEgKi8KKwkJZHByaW50aygidW5rbm93biBJUlEgKHNob3VsZG4ndCBoYXBwZW4pICEhXG4iKTsKKwkJc3Bpbl91bmxvY2soJmRldi0+aGFyZHdhcmVfbG9jayk7CisJCXJldHVybiBJUlFfUkVUVkFMKElSUV9OT05FKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGl0ZTg3MDlfcmVhcm1faXJxKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgaXRlODcwOV9kZXZpY2UgKmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWRldiA9IChzdHJ1Y3QgaXRlODcwOV9kZXZpY2UgKikgZGF0YTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKKwlkZXYtPmRldmljZV9idXN5ID0gMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKKworCWlmIChkZXYtPmZvcmNlX3JlYXJtIHx8IGRldi0+YWNjX3NwYWNlID4gQ0ZHX1RJTUVPVVQpIHsKKwkJZHByaW50aygicmVhcm1pbmcgSVJRXG4iKTsKKwkJaXRlODcwOV93cml0ZV9yZWdpc3RlcihkZXYsIElUODUxMl9SRUdfUkNSLAorCQkJCQkJSVQ4NTEyX1JDUl9SWEFDVCB8IENGR19EQ1IpOworCQlpdGU4NzA5X3dyaXRlX3JlZ2lzdGVyKGRldiwgSVQ4NTEyX1JFR19NU1RDUiwKKwkJCQkJQ0ZHX0ZJRk9UTCB8IElUODUxMl9NU1RDUl9GSUZPQ0xSKTsKKwkJaXRlODcwOV93cml0ZV9yZWdpc3RlcihkZXYsIElUODUxMl9SRUdfUkNSLAorCQkJCUlUODUxMl9SQ1JfUlhFTiB8IElUODUxMl9SQ1JfUlhBQ1QgfCBDRkdfRENSKTsKKwkJaWYgKCFkZXYtPmZvcmNlX3JlYXJtKQorCQkJZGV2LT5yZWFybWVkID0gMTsKKwkJZGV2LT5mb3JjZV9yZWFybSA9IDA7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOworCWRldi0+ZGV2aWNlX2J1c3kgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGl0ZTg3MDlfY2xlYW51cChzdHJ1Y3QgaXRlODcwOV9kZXZpY2UgKmRldiwgaW50IHN0YWdlLCBpbnQgZXJybm8sCisJCQkJY2hhciAqbXNnKQoreworCWlmIChtc2cgIT0gTlVMTCkKKwkJcHJpbnRrKEtFUk5fRVJSIExJUkNfRFJJVkVSX05BTUUgIjogJXNcbiIsIG1zZyk7CisKKwlzd2l0Y2ggKHN0YWdlKSB7CisJY2FzZSA2OgorCQlpZiAoZGV2LT51c2VfY291bnQgPiAwKQorCQkJaXRlODcwOV9kcm9wX2hhcmR3YXJlKGRldik7CisJY2FzZSA1OgorCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwljYXNlIDQ6CisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW8sIDIpOworCWNhc2UgMzoKKwkJbGlyY191bnJlZ2lzdGVyX2RyaXZlcihkZXYtPmRyaXZlci5taW5vcik7CisJY2FzZSAyOgorCQlsaXJjX2J1ZmZlcl9mcmVlKGRldi0+ZHJpdmVyLnJidWYpOworCQlrZnJlZShkZXYtPmRyaXZlci5yYnVmKTsKKwljYXNlIDE6CisJCWtmcmVlKGRldik7CisJY2FzZSAwOgorCQk7CisJfQorCisJcmV0dXJuIGVycm5vOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBpdGU4NzA5X3BucF9wcm9iZShzdHJ1Y3QgcG5wX2RldiAqZGV2LAorCQkJCQljb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBsaXJjX2RyaXZlciAqZHJpdmVyOworCXN0cnVjdCBpdGU4NzA5X2RldmljZSAqaXRlODcwOV9kZXY7CisJaW50IHJldDsKKworCS8qIENoZWNrIHJlc291cmNlcyB2YWxpZGl0eSAqLworCWlmICghcG5wX2lycV92YWxpZChkZXYsIDApKQorCQlyZXR1cm4gaXRlODcwOV9jbGVhbnVwKE5VTEwsIDAsIC1FTk9ERVYsICJpbnZhbGlkIElSUSIpOworCWlmICghcG5wX3BvcnRfdmFsaWQoZGV2LCAyKSkKKwkJcmV0dXJuIGl0ZTg3MDlfY2xlYW51cChOVUxMLCAwLCAtRU5PREVWLCAiaW52YWxpZCBJTyBwb3J0Iik7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGRldmljZSBzdHJ1Y3QgKi8KKwlpdGU4NzA5X2RldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpdGU4NzA5X2RldmljZSksIEdGUF9LRVJORUwpOworCWlmIChpdGU4NzA5X2RldiA9PSBOVUxMKQorCQlyZXR1cm4gaXRlODcwOV9jbGVhbnVwKE5VTEwsIDAsIC1FTk9NRU0sICJremFsbG9jIGZhaWxlZCIpOworCXBucF9zZXRfZHJ2ZGF0YShkZXYsIGl0ZTg3MDlfZGV2KTsKKworCS8qIEluaXRpYWxpemUgZGV2aWNlIHN0cnVjdCAqLworCWl0ZTg3MDlfZGV2LT51c2VfY291bnQgPSAwOworCWl0ZTg3MDlfZGV2LT5pcnEgPSBwbnBfaXJxKGRldiwgMCk7CisJaXRlODcwOV9kZXYtPmlvID0gcG5wX3BvcnRfc3RhcnQoZGV2LCAyKTsKKwlpdGU4NzA5X2Rldi0+aGFyZHdhcmVfbG9jayA9CisJCV9fU1BJTl9MT0NLX1VOTE9DS0VEKGl0ZTg3MDlfZGV2LT5oYXJkd2FyZV9sb2NrKTsKKwlpdGU4NzA5X2Rldi0+YWNjX3B1bHNlID0gMDsKKwlpdGU4NzA5X2Rldi0+YWNjX3NwYWNlID0gMDsKKwlpdGU4NzA5X2Rldi0+bGFzdGJpdCA9IDA7CisJZG9fZ2V0dGltZW9mZGF5KCZpdGU4NzA5X2Rldi0+bGFzdF90dik7CisJdGFza2xldF9pbml0KCZpdGU4NzA5X2Rldi0+dGFza2xldCwgaXRlODcwOV9yZWFybV9pcnEsCisJCQkJCQkJKGxvbmcpIGl0ZTg3MDlfZGV2KTsKKwlpdGU4NzA5X2Rldi0+Zm9yY2VfcmVhcm0gPSAwOworCWl0ZTg3MDlfZGV2LT5yZWFybWVkID0gMDsKKwlpdGU4NzA5X2Rldi0+ZGV2aWNlX2J1c3kgPSAwOworCisJLyogSW5pdGlhbGl6ZSBkcml2ZXIgc3RydWN0ICovCisJZHJpdmVyID0gJml0ZTg3MDlfZGV2LT5kcml2ZXI7CisJc3RyY3B5KGRyaXZlci0+bmFtZSwgTElSQ19EUklWRVJfTkFNRSk7CisJZHJpdmVyLT5taW5vciA9IC0xOworCWRyaXZlci0+Y29kZV9sZW5ndGggPSBzaXplb2YoaW50KSAqIDg7CisJZHJpdmVyLT5zYW1wbGVfcmF0ZSA9IDA7CisJZHJpdmVyLT5mZWF0dXJlcyA9IExJUkNfQ0FOX1JFQ19NT0RFMjsKKwlkcml2ZXItPmRhdGEgPSBpdGU4NzA5X2RldjsKKwlkcml2ZXItPmFkZF90b19idWYgPSBOVUxMOworCWRyaXZlci0+c2V0X3VzZV9pbmMgPSBpdGU4NzA5X3NldF91c2VfaW5jOworCWRyaXZlci0+c2V0X3VzZV9kZWMgPSBpdGU4NzA5X3NldF91c2VfZGVjOworCWRyaXZlci0+ZGV2ID0gJmRldi0+ZGV2OworCWRyaXZlci0+b3duZXIgPSBUSElTX01PRFVMRTsKKworCS8qIEluaXRpYWxpemUgTElSQyBidWZmZXIgKi8KKwlkcml2ZXItPnJidWYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGlyY19idWZmZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRyaXZlci0+cmJ1ZikKKwkJcmV0dXJuIGl0ZTg3MDlfY2xlYW51cChpdGU4NzA5X2RldiwgMSwgLUVOT01FTSwKKwkJCQkgICAgICAgImNhbid0IGFsbG9jYXRlIGxpcmNfYnVmZmVyIik7CisJaWYgKGxpcmNfYnVmZmVyX2luaXQoZHJpdmVyLT5yYnVmLCBCVUZfQ0hVTktfU0laRSwgQlVGX1NJWkUpKQorCQlyZXR1cm4gaXRlODcwOV9jbGVhbnVwKGl0ZTg3MDlfZGV2LCAxLCAtRU5PTUVNLAorCQkJCSAgICAgICAibGlyY19idWZmZXJfaW5pdCgpIGZhaWxlZCIpOworCisJLyogUmVnaXN0ZXIgTElSQyBkcml2ZXIgKi8KKwlyZXQgPSBsaXJjX3JlZ2lzdGVyX2RyaXZlcihkcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gaXRlODcwOV9jbGVhbnVwKGl0ZTg3MDlfZGV2LCAyLCByZXQsCisJCQkJCSJsaXJjX3JlZ2lzdGVyX2RyaXZlcigpIGZhaWxlZCIpOworCisJLyogUmVzZXJ2ZSBJL08gcG9ydCBhY2Nlc3MgKi8KKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGl0ZTg3MDlfZGV2LT5pbywgMiwgTElSQ19EUklWRVJfTkFNRSkpCisJCXJldHVybiBpdGU4NzA5X2NsZWFudXAoaXRlODcwOV9kZXYsIDMsIC1FQlVTWSwKKwkJCQkJCSJpL28gcG9ydCBhbHJlYWR5IGluIHVzZSIpOworCisJLyogUmVzZXJ2ZSBJUlEgbGluZSAqLworCXJldCA9IHJlcXVlc3RfaXJxKGl0ZTg3MDlfZGV2LT5pcnEsIGl0ZTg3MDlfaW50ZXJydXB0LCAwLAorCQkJCQlMSVJDX0RSSVZFUl9OQU1FLCBpdGU4NzA5X2Rldik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiBpdGU4NzA5X2NsZWFudXAoaXRlODcwOV9kZXYsIDQsIHJldCwKKwkJCQkJCSJJUlEgYWxyZWFkeSBpbiB1c2UiKTsKKworCS8qIEluaXRpYWxpemUgaGFyZHdhcmUgKi8KKwlpdGU4NzA5X2Ryb3BfaGFyZHdhcmUoaXRlODcwOV9kZXYpOyAvKiBTaHV0ZG93biBodyB1bnRpbCBmaXJzdCB1c2UgKi8KKworCXByaW50ayhLRVJOX0lORk8gTElSQ19EUklWRVJfTkFNRSAiOiBkZXZpY2UgZm91bmQgOiBpcnE9JWQgaW89MHgleFxuIiwKKwkJCQkJaXRlODcwOV9kZXYtPmlycSwgaXRlODcwOV9kZXYtPmlvKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgaXRlODcwOV9wbnBfcmVtb3ZlKHN0cnVjdCBwbnBfZGV2ICpkZXYpCit7CisJc3RydWN0IGl0ZTg3MDlfZGV2aWNlICppdGU4NzA5X2RldjsKKwlpdGU4NzA5X2RldiA9IHBucF9nZXRfZHJ2ZGF0YShkZXYpOworCisJaXRlODcwOV9jbGVhbnVwKGl0ZTg3MDlfZGV2LCA2LCAwLCBOVUxMKTsKKworCXByaW50ayhLRVJOX0lORk8gTElSQ19EUklWRVJfTkFNRSAiOiBkZXZpY2UgcmVtb3ZlZFxuIik7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgaXRlODcwOV9wbnBfc3VzcGVuZChzdHJ1Y3QgcG5wX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGl0ZTg3MDlfZGV2aWNlICppdGU4NzA5X2RldjsKKwlpdGU4NzA5X2RldiA9IHBucF9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGl0ZTg3MDlfZGV2LT51c2VfY291bnQgPiAwKQorCQlpdGU4NzA5X2Ryb3BfaGFyZHdhcmUoaXRlODcwOV9kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXRlODcwOV9wbnBfcmVzdW1lKHN0cnVjdCBwbnBfZGV2ICpkZXYpCit7CisJc3RydWN0IGl0ZTg3MDlfZGV2aWNlICppdGU4NzA5X2RldjsKKwlpdGU4NzA5X2RldiA9IHBucF9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGl0ZTg3MDlfZGV2LT51c2VfY291bnQgPiAwKQorCQlpdGU4NzA5X2luaXRfaGFyZHdhcmUoaXRlODcwOV9kZXYpOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBpdGU4NzA5X3BucF9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgaXRlODcwOV9wbnBfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgcG5wX2Rldl90YWJsZVtdID0geworCXsiSVRFODcwOSIsIDB9LAorCXt9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBucCwgcG5wX2Rldl90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgcG5wX2RyaXZlciBpdGU4NzA5X3BucF9kcml2ZXIgPSB7CisJLm5hbWUgICAgICAgICAgID0gTElSQ19EUklWRVJfTkFNRSwKKwkucHJvYmUgICAgICAgICAgPSBpdGU4NzA5X3BucF9wcm9iZSwKKwkucmVtb3ZlICAgICAgICAgPSBfX2RldmV4aXRfcChpdGU4NzA5X3BucF9yZW1vdmUpLAorCS5zdXNwZW5kICAgICAgICA9IGl0ZTg3MDlfcG5wX3N1c3BlbmQsCisJLnJlc3VtZSAgICAgICAgID0gaXRlODcwOV9wbnBfcmVzdW1lLAorCS5pZF90YWJsZSAgICAgICA9IHBucF9kZXZfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpdGU4NzA5X2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIHBucF9yZWdpc3Rlcl9kcml2ZXIoJml0ZTg3MDlfcG5wX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChpdGU4NzA5X2luaXRfbW9kdWxlKTsKKworc3RhdGljIHZvaWQgX19leGl0IGl0ZTg3MDlfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIoJml0ZTg3MDlfcG5wX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChpdGU4NzA5X2NsZWFudXBfbW9kdWxlKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJMSVJDIGRyaXZlciBmb3IgSVRFODcwOSBDSVIgcG9ydCIpOworTU9EVUxFX0FVVEhPUigiR3LDqWdvcnkgTGFyZGnDqHJlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfcGFyYWxsZWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfcGFyYWxsZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWViZDA3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19wYXJhbGxlbC5jCkBAIC0wLDAgKzEsNzA1IEBACisvKgorICogbGlyY19wYXJhbGxlbC5jCisgKgorICogbGlyY19wYXJhbGxlbCAtIGRldmljZSBkcml2ZXIgZm9yIGluZnJhLXJlZCBzaWduYWwgcmVjZWl2aW5nIGFuZAorICogICAgICAgICAgICAgICAgIHRyYW5zbWl0dGluZyB1bml0IGJ1aWx0IGJ5IHRoZSBhdXRob3IKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggQ2hyaXN0b3BoIEJhcnRlbG11cyA8bGlyY0BiYXJ0ZWxtdXMuZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKy8qKiogSW5jbHVkZXMgKioqLworCisjaWZkZWYgQ09ORklHX1NNUAorI2Vycm9yICItLS0gU29ycnksIHRoaXMgZHJpdmVyIGlzIG5vdCBTTVAgc2FmZS4gLS0tIgorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCisjaW5jbHVkZSA8bWVkaWEvbGlyYy5oPgorI2luY2x1ZGUgPG1lZGlhL2xpcmNfZGV2Lmg+CisKKyNpbmNsdWRlICJsaXJjX3BhcmFsbGVsLmgiCisKKyNkZWZpbmUgTElSQ19EUklWRVJfTkFNRSAibGlyY19wYXJhbGxlbCIKKworI2lmbmRlZiBMSVJDX0lSUQorI2RlZmluZSBMSVJDX0lSUSA3CisjZW5kaWYKKyNpZm5kZWYgTElSQ19QT1JUCisjZGVmaW5lIExJUkNfUE9SVCAweDM3OAorI2VuZGlmCisjaWZuZGVmIExJUkNfVElNRVIKKyNkZWZpbmUgTElSQ19USU1FUiA2NTUzNgorI2VuZGlmCisKKy8qKiogR2xvYmFsIFZhcmlhYmxlcyAqKiovCisKK3N0YXRpYyBpbnQgZGVidWc7CitzdGF0aWMgaW50IGNoZWNrX3BzZWxlY2Q7CisKK3Vuc2lnbmVkIGludCBpcnEgPSBMSVJDX0lSUTsKK3Vuc2lnbmVkIGludCBpbyA9IExJUkNfUE9SVDsKKyNpZmRlZiBMSVJDX1RJTUVSCit1bnNpZ25lZCBpbnQgdGltZXI7Cit1bnNpZ25lZCBpbnQgZGVmYXVsdF90aW1lciA9IExJUkNfVElNRVI7CisjZW5kaWYKKworI2RlZmluZSBSQlVGX1NJWkUgKDI1NikgLyogdGhpcyBtdXN0IGJlIGEgcG93ZXIgb2YgMiBsYXJnZXIgdGhhbiAxICovCisKK3N0YXRpYyBpbnQgcmJ1ZltSQlVGX1NJWkVdOworCitERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChsaXJjX3dhaXQpOworCit1bnNpZ25lZCBpbnQgcnB0cjsKK3Vuc2lnbmVkIGludCB3cHRyOwordW5zaWduZWQgaW50IGxvc3RfaXJxczsKK2ludCBpc19vcGVuOworCitzdHJ1Y3QgcGFycG9ydCAqcHBvcnQ7CitzdHJ1Y3QgcGFyZGV2aWNlICpwcGRldmljZTsKK2ludCBpc19jbGFpbWVkOworCit1bnNpZ25lZCBpbnQgdHhfbWFzayA9IDE7CisKKy8qKiogSW50ZXJuYWwgRnVuY3Rpb25zICoqKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBpbihpbnQgb2Zmc2V0KQoreworCXN3aXRjaCAob2Zmc2V0KSB7CisJY2FzZSBMSVJDX0xQX0JBU0U6CisJCXJldHVybiBwYXJwb3J0X3JlYWRfZGF0YShwcG9ydCk7CisJY2FzZSBMSVJDX0xQX1NUQVRVUzoKKwkJcmV0dXJuIHBhcnBvcnRfcmVhZF9zdGF0dXMocHBvcnQpOworCWNhc2UgTElSQ19MUF9DT05UUk9MOgorCQlyZXR1cm4gcGFycG9ydF9yZWFkX2NvbnRyb2wocHBvcnQpOworCX0KKwlyZXR1cm4gMDsgLyogbWFrZSBjb21waWxlciBoYXBweSAqLworfQorCitzdGF0aWMgdm9pZCBvdXQoaW50IG9mZnNldCwgaW50IHZhbHVlKQoreworCXN3aXRjaCAob2Zmc2V0KSB7CisJY2FzZSBMSVJDX0xQX0JBU0U6CisJCXBhcnBvcnRfd3JpdGVfZGF0YShwcG9ydCwgdmFsdWUpOworCQlicmVhazsKKwljYXNlIExJUkNfTFBfQ09OVFJPTDoKKwkJcGFycG9ydF93cml0ZV9jb250cm9sKHBwb3J0LCB2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgTElSQ19MUF9TVEFUVVM6CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBhdHRlbXB0IHRvIHdyaXRlIHRvIHN0YXR1cyByZWdpc3RlclxuIiwKKwkJICAgICAgIExJUkNfRFJJVkVSX05BTUUpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGlyY19nZXRfdGltZXIodm9pZCkKK3sKKwlyZXR1cm4gaW4oTElSQ19QT1JUX1RJTUVSKSAmIExJUkNfUE9SVF9USU1FUl9CSVQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGlyY19nZXRfc2lnbmFsKHZvaWQpCit7CisJcmV0dXJuIGluKExJUkNfUE9SVF9TSUdOQUwpICYgTElSQ19QT1JUX1NJR05BTF9CSVQ7Cit9CisKK3N0YXRpYyB2b2lkIGxpcmNfb24odm9pZCkKK3sKKwlvdXQoTElSQ19QT1JUX0RBVEEsIHR4X21hc2spOworfQorCitzdGF0aWMgdm9pZCBsaXJjX29mZih2b2lkKQoreworCW91dChMSVJDX1BPUlRfREFUQSwgMCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9saXJjX3RpbWVyKHZvaWQpCit7CisJc3RydWN0IHRpbWV2YWwgdHYsIG5vdzsKKwl1bnNpZ25lZCBpbnQgbGV2ZWwsIG5ld2xldmVsLCB0aW1lZWxhcHNlZCwgbmV3dGltZXI7CisJaW50IGNvdW50ID0gMDsKKworCWRvX2dldHRpbWVvZmRheSgmdHYpOworCXR2LnR2X3NlYysrOyAgICAgICAgICAgICAgICAgICAgIC8qIHdhaXQgbWF4LiAxIHNlYy4gKi8KKwlsZXZlbCA9IGxpcmNfZ2V0X3RpbWVyKCk7CisJZG8geworCQluZXdsZXZlbCA9IGxpcmNfZ2V0X3RpbWVyKCk7CisJCWlmIChsZXZlbCA9PSAwICYmIG5ld2xldmVsICE9IDApCisJCQljb3VudCsrOworCQlsZXZlbCA9IG5ld2xldmVsOworCQlkb19nZXR0aW1lb2ZkYXkoJm5vdyk7CisJfSB3aGlsZSAoY291bnQgPCAxMDAwICYmIChub3cudHZfc2VjIDwgdHYudHZfc2VjCisJCQkgICAgIHx8IChub3cudHZfc2VjID09IHR2LnR2X3NlYworCQkJCSAmJiBub3cudHZfdXNlYyA8IHR2LnR2X3VzZWMpKSk7CisKKwl0aW1lZWxhcHNlZCA9ICgobm93LnR2X3NlYyArIDEgLSB0di50dl9zZWMpKjEwMDAwMDAKKwkJICAgICArIChub3cudHZfdXNlYyAtIHR2LnR2X3VzZWMpKTsKKwlpZiAoY291bnQgPj0gMTAwMCAmJiB0aW1lZWxhcHNlZCA+IDApIHsKKwkJaWYgKGRlZmF1bHRfdGltZXIgPT0gMCkgeworCQkJLyogYXV0b2RldGVjdCB0aW1lciAqLworCQkJbmV3dGltZXIgPSAoMTAwMDAwMCpjb3VudCkvdGltZWVsYXBzZWQ7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogJXUgSHogdGltZXIgZGV0ZWN0ZWRcbiIsCisJCQkgICAgICAgTElSQ19EUklWRVJfTkFNRSwgbmV3dGltZXIpOworCQkJcmV0dXJuIG5ld3RpbWVyOworCQl9ICBlbHNlIHsKKwkJCW5ld3RpbWVyID0gKDEwMDAwMDAqY291bnQpL3RpbWVlbGFwc2VkOworCQkJaWYgKGFicyhuZXd0aW1lciAtIGRlZmF1bHRfdGltZXIpID4gZGVmYXVsdF90aW1lci8xMCkgeworCQkJCS8qIGJhZCB0aW1lciAqLworCQkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IGJhZCB0aW1lcjogJXUgSHpcbiIsCisJCQkJICAgICAgIExJUkNfRFJJVkVSX05BTUUsIG5ld3RpbWVyKTsKKwkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiB1c2luZyBkZWZhdWx0IHRpbWVyOiAiCisJCQkJICAgICAgICIldSBIelxuIiwKKwkJCQkgICAgICAgTElSQ19EUklWRVJfTkFNRSwgZGVmYXVsdF90aW1lcik7CisJCQkJcmV0dXJuIGRlZmF1bHRfdGltZXI7CisJCQl9IGVsc2UgeworCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiAldSBIeiB0aW1lciBkZXRlY3RlZFxuIiwKKwkJCQkgICAgICAgTElSQ19EUklWRVJfTkFNRSwgbmV3dGltZXIpOworCQkJCXJldHVybiBuZXd0aW1lcjsgLyogdXNlIGRldGVjdGVkIHZhbHVlICovCisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBubyB0aW1lciBkZXRlY3RlZFxuIiwgTElSQ19EUklWRVJfTkFNRSk7CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludCBsaXJjX2NsYWltKHZvaWQpCit7CisJaWYgKHBhcnBvcnRfY2xhaW0ocHBkZXZpY2UpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGNvdWxkIG5vdCBjbGFpbSBwb3J0XG4iLAorCQkgICAgICAgTElSQ19EUklWRVJfTkFNRSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB3YWl0aW5nIGZvciBwb3J0IGJlY29taW5nIGF2YWlsYWJsZSIKKwkJICAgICAgICJcbiIsIExJUkNfRFJJVkVSX05BTUUpOworCQlpZiAocGFycG9ydF9jbGFpbV9vcl9ibG9jayhwcGRldmljZSkgPCAwKSB7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBjb3VsZCBub3QgY2xhaW0gcG9ydCwgZ2l2aW5nIgorCQkJICAgICAgICIgdXBcbiIsIExJUkNfRFJJVkVSX05BTUUpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJb3V0KExJUkNfTFBfQ09OVFJPTCwgTFBfUFNFTEVDUHxMUF9QSU5JVFApOworCWlzX2NsYWltZWQgPSAxOworCXJldHVybiAxOworfQorCisvKioqIGludGVycnVwdCBoYW5kbGVyICoqKi8KKworc3RhdGljIHZvaWQgcmJ1Zl93cml0ZShpbnQgc2lnbmFsKQoreworCXVuc2lnbmVkIGludCBud3B0cjsKKworCW53cHRyID0gKHdwdHIgKyAxKSAmIChSQlVGX1NJWkUgLSAxKTsKKwlpZiAobndwdHIgPT0gcnB0cikgeworCQkvKiBubyBuZXcgc2lnbmFscyB3aWxsIGJlIGFjY2VwdGVkICovCisJCWxvc3RfaXJxcysrOworCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBidWZmZXIgb3ZlcnJ1blxuIiwgTElSQ19EUklWRVJfTkFNRSk7CisJCXJldHVybjsKKwl9CisJcmJ1Zlt3cHRyXSA9IHNpZ25hbDsKKwl3cHRyID0gbndwdHI7Cit9CisKK3N0YXRpYyB2b2lkIGlycV9oYW5kbGVyKHZvaWQgKmJsYWgpCit7CisJc3RydWN0IHRpbWV2YWwgdHY7CisJc3RhdGljIHN0cnVjdCB0aW1ldmFsIGxhc3R0djsKKwlzdGF0aWMgaW50IGluaXQ7CisJbG9uZyBzaWduYWw7CisJaW50IGRhdGE7CisJdW5zaWduZWQgaW50IGxldmVsLCBuZXdsZXZlbDsKKwl1bnNpZ25lZCBpbnQgdGltZW91dDsKKworCWlmICghbW9kdWxlX3JlZmNvdW50KFRISVNfTU9EVUxFKSkKKwkJcmV0dXJuOworCisJaWYgKCFpc19jbGFpbWVkKQorCQlyZXR1cm47CisKKyNpZiAwCisJLyogZGlzYWJsZSBpbnRlcnJ1cHQgKi8KKwkgIGRpc2FibGVfaXJxKGlycSk7CisJICBvdXQoTElSQ19QT1JUX0lSUSwgaW4oTElSQ19QT1JUX0lSUSkgJiAofkxQX1BJTlRFTikpOworI2VuZGlmCisJaWYgKGNoZWNrX3BzZWxlY2QgJiYgKGluKDEpICYgTFBfUFNFTEVDRCkpCisJCXJldHVybjsKKworI2lmZGVmIExJUkNfVElNRVIKKwlpZiAoaW5pdCkgeworCQlkb19nZXR0aW1lb2ZkYXkoJnR2KTsKKworCQlzaWduYWwgPSB0di50dl9zZWMgLSBsYXN0dHYudHZfc2VjOworCQlpZiAoc2lnbmFsID4gMTUpCisJCQkvKiByZWFsbHkgbG9uZyB0aW1lICovCisJCQlkYXRhID0gUFVMU0VfTUFTSzsKKwkJZWxzZQorCQkJZGF0YSA9IChpbnQpIChzaWduYWwqMTAwMDAwMCArCisJCQkJCSB0di50dl91c2VjIC0gbGFzdHR2LnR2X3VzZWMgKworCQkJCQkgTElSQ19TRkg1MDZfREVMQVkpOworCisJCXJidWZfd3JpdGUoZGF0YSk7IC8qIHNwYWNlICovCisJfSBlbHNlIHsKKwkJaWYgKHRpbWVyID09IDApIHsKKwkJCS8qCisJCQkgKiB3YWtlIHVwOyB3ZSdsbCBsb3NlIHRoaXMgc2lnbmFsLCBidXQgaXQgd2lsbCBiZQorCQkJICogZ2FyYmFnZSBpZiB0aGUgZGV2aWNlIGlzIHR1cm5lZCBvbiBhbnl3YXkKKwkJCSAqLworCQkJdGltZXIgPSBpbml0X2xpcmNfdGltZXIoKTsKKwkJCS8qIGVuYWJsZV9pcnEoaXJxKTsgKi8KKwkJCXJldHVybjsKKwkJfQorCQlpbml0ID0gMTsKKwl9CisKKwl0aW1lb3V0ID0gdGltZXIvMTA7CS8qIHRpbWVvdXQgYWZ0ZXIgMS8xMCBzZWMuICovCisJc2lnbmFsID0gMTsKKwlsZXZlbCA9IGxpcmNfZ2V0X3RpbWVyKCk7CisJZG8geworCQluZXdsZXZlbCA9IGxpcmNfZ2V0X3RpbWVyKCk7CisJCWlmIChsZXZlbCA9PSAwICYmIG5ld2xldmVsICE9IDApCisJCQlzaWduYWwrKzsKKwkJbGV2ZWwgPSBuZXdsZXZlbDsKKworCQkvKiBnaXZpbmcgdXAgKi8KKwkJaWYgKHNpZ25hbCA+IHRpbWVvdXQKKwkJICAgIHx8IChjaGVja19wc2VsZWNkICYmIChpbigxKSAmIExQX1BTRUxFQ0QpKSkgeworCQkJc2lnbmFsID0gMDsKKwkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IHRpbWVvdXRcbiIsIExJUkNfRFJJVkVSX05BTUUpOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlIChsaXJjX2dldF9zaWduYWwoKSk7CisKKwlpZiAoc2lnbmFsICE9IDApIHsKKwkJLyogYWp1c3QgdmFsdWUgdG8gdXNlY3MgKi8KKwkJdW5zaWduZWQgbG9uZyBsb25nIGhlbHBlcjsKKworCQloZWxwZXIgPSAoKHVuc2lnbmVkIGxvbmcgbG9uZykgc2lnbmFsKSoxMDAwMDAwOworCQlkb19kaXYoaGVscGVyLCB0aW1lcik7CisJCXNpZ25hbCA9IChsb25nKSBoZWxwZXI7CisKKwkJaWYgKHNpZ25hbCA+IExJUkNfU0ZINTA2X0RFTEFZKQorCQkJZGF0YSA9IHNpZ25hbCAtIExJUkNfU0ZINTA2X0RFTEFZOworCQllbHNlCisJCQlkYXRhID0gMTsKKwkJcmJ1Zl93cml0ZShQVUxTRV9CSVR8ZGF0YSk7IC8qIHB1bHNlICovCisJfQorCWRvX2dldHRpbWVvZmRheSgmbGFzdHR2KTsKKyNlbHNlCisJLyogYWRkIHlvdXIgY29kZSBoZXJlICovCisjZW5kaWYKKworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmbGlyY193YWl0KTsKKworCS8qIGVuYWJsZSBpbnRlcnJ1cHQgKi8KKwkvKgorCSAgZW5hYmxlX2lycShpcnEpOworCSAgb3V0KExJUkNfUE9SVF9JUlEsIGluKExJUkNfUE9SVF9JUlEpfExQX1BJTlRFTik7CisJKi8KK30KKworLyoqKiBmaWxlIG9wZXJhdGlvbnMgKioqLworCitzdGF0aWMgbG9mZl90IGxpcmNfbHNlZWsoc3RydWN0IGZpbGUgKmZpbGVwLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZykKK3sKKwlyZXR1cm4gLUVTUElQRTsKK30KKworc3RhdGljIHNzaXplX3QgbGlyY19yZWFkKHN0cnVjdCBmaWxlICpmaWxlcCwgY2hhciAqYnVmLCBzaXplX3QgbiwgbG9mZl90ICpwcG9zKQoreworCWludCByZXN1bHQgPSAwOworCWludCBjb3VudCA9IDA7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisKKwlpZiAobiAlIHNpemVvZihpbnQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWFkZF93YWl0X3F1ZXVlKCZsaXJjX3dhaXQsICZ3YWl0KTsKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCXdoaWxlIChjb3VudCA8IG4pIHsKKwkJaWYgKHJwdHIgIT0gd3B0cikgeworCQkJaWYgKGNvcHlfdG9fdXNlcihidWYrY291bnQsIChjaGFyICopICZyYnVmW3JwdHJdLAorCQkJCQkgc2l6ZW9mKGludCkpKSB7CisJCQkJcmVzdWx0ID0gLUVGQVVMVDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXJwdHIgPSAocnB0ciArIDEpICYgKFJCVUZfU0laRSAtIDEpOworCQkJY291bnQgKz0gc2l6ZW9mKGludCk7CisJCX0gZWxzZSB7CisJCQlpZiAoZmlsZXAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQkJcmVzdWx0ID0gLUVBR0FJTjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCXJlc3VsdCA9IC1FUkVTVEFSVFNZUzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXNjaGVkdWxlKCk7CisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQl9CisJfQorCXJlbW92ZV93YWl0X3F1ZXVlKCZsaXJjX3dhaXQsICZ3YWl0KTsKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCXJldHVybiBjb3VudCA/IGNvdW50IDogcmVzdWx0OworfQorCitzdGF0aWMgc3NpemVfdCBsaXJjX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlcCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbiwKKwkJCSAgbG9mZl90ICpwcG9zKQoreworCWludCBjb3VudDsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgbGV2ZWwsIG5ld2xldmVsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNvdW50dGltZXI7CisJaW50ICp3YnVmOworCisJaWYgKCFpc19jbGFpbWVkKQorCQlyZXR1cm4gLUVCVVNZOworCisJY291bnQgPSBuIC8gc2l6ZW9mKGludCk7CisKKwlpZiAobiAlIHNpemVvZihpbnQpIHx8IGNvdW50ICUgMiA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdidWYgPSBtZW1kdXBfdXNlcihidWYsIG4pOworCWlmIChJU19FUlIod2J1ZikpCisJCXJldHVybiBQVFJfRVJSKHdidWYpOworCisjaWZkZWYgTElSQ19USU1FUgorCWlmICh0aW1lciA9PSAwKSB7CisJCS8qIHRyeSBhZ2FpbiBpZiBkZXZpY2UgaXMgcmVhZHkgKi8KKwkJdGltZXIgPSBpbml0X2xpcmNfdGltZXIoKTsKKwkJaWYgKHRpbWVyID09IDApCisJCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBhZGp1c3QgdmFsdWVzIGZyb20gdXNlY3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIGxvbmcgaGVscGVyOworCisJCWhlbHBlciA9ICgodW5zaWduZWQgbG9uZyBsb25nKSB3YnVmW2ldKSp0aW1lcjsKKwkJZG9fZGl2KGhlbHBlciwgMTAwMDAwMCk7CisJCXdidWZbaV0gPSAoaW50KSBoZWxwZXI7CisJfQorCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWkgPSAwOworCXdoaWxlIChpIDwgY291bnQpIHsKKwkJbGV2ZWwgPSBsaXJjX2dldF90aW1lcigpOworCQljb3VudHRpbWVyID0gMDsKKwkJbGlyY19vbigpOworCQlkbyB7CisJCQluZXdsZXZlbCA9IGxpcmNfZ2V0X3RpbWVyKCk7CisJCQlpZiAobGV2ZWwgPT0gMCAmJiBuZXdsZXZlbCAhPSAwKQorCQkJCWNvdW50dGltZXIrKzsKKwkJCWxldmVsID0gbmV3bGV2ZWw7CisJCQlpZiAoY2hlY2tfcHNlbGVjZCAmJiAoaW4oMSkgJiBMUF9QU0VMRUNEKSkgeworCQkJCWxpcmNfb2ZmKCk7CisJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQl9IHdoaWxlIChjb3VudHRpbWVyIDwgd2J1ZltpXSk7CisJCWkrKzsKKworCQlsaXJjX29mZigpOworCQlpZiAoaSA9PSBjb3VudCkKKwkJCWJyZWFrOworCQljb3VudHRpbWVyID0gMDsKKwkJZG8geworCQkJbmV3bGV2ZWwgPSBsaXJjX2dldF90aW1lcigpOworCQkJaWYgKGxldmVsID09IDAgJiYgbmV3bGV2ZWwgIT0gMCkKKwkJCQljb3VudHRpbWVyKys7CisJCQlsZXZlbCA9IG5ld2xldmVsOworCQkJaWYgKGNoZWNrX3BzZWxlY2QgJiYgKGluKDEpICYgTFBfUFNFTEVDRCkpIHsKKwkJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCX0gd2hpbGUgKGNvdW50dGltZXIgPCB3YnVmW2ldKTsKKwkJaSsrOworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisjZWxzZQorCS8qIHBsYWNlIGNvZGUgdGhhdCBoYW5kbGVzIHdyaXRlIHdpdGhvdXQgZXh0ZXJuYWwgdGltZXIgaGVyZSAqLworI2VuZGlmCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGlyY19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXBvbGxfd2FpdChmaWxlLCAmbGlyY193YWl0LCB3YWl0KTsKKwlpZiAocnB0ciAhPSB3cHRyKQorCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGxvbmcgbGlyY19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCByZXN1bHQ7CisJdW5zaWduZWQgbG9uZyBmZWF0dXJlcyA9IExJUkNfQ0FOX1NFVF9UUkFOU01JVFRFUl9NQVNLIHwKKwkJCQkgTElSQ19DQU5fU0VORF9QVUxTRSB8IExJUkNfQ0FOX1JFQ19NT0RFMjsKKwl1bnNpZ25lZCBsb25nIG1vZGU7CisJdW5zaWduZWQgaW50IGl2YWx1ZTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBMSVJDX0dFVF9GRUFUVVJFUzoKKwkJcmVzdWx0ID0gcHV0X3VzZXIoZmVhdHVyZXMsICh1bnNpZ25lZCBsb25nICopIGFyZyk7CisJCWlmIChyZXN1bHQpCisJCQlyZXR1cm4gcmVzdWx0OworCQlicmVhazsKKwljYXNlIExJUkNfR0VUX1NFTkRfTU9ERToKKwkJcmVzdWx0ID0gcHV0X3VzZXIoTElSQ19NT0RFX1BVTFNFLCAodW5zaWduZWQgbG9uZyAqKSBhcmcpOworCQlpZiAocmVzdWx0KQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJYnJlYWs7CisJY2FzZSBMSVJDX0dFVF9SRUNfTU9ERToKKwkJcmVzdWx0ID0gcHV0X3VzZXIoTElSQ19NT0RFX01PREUyLCAodW5zaWduZWQgbG9uZyAqKSBhcmcpOworCQlpZiAocmVzdWx0KQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJYnJlYWs7CisJY2FzZSBMSVJDX1NFVF9TRU5EX01PREU6CisJCXJlc3VsdCA9IGdldF91c2VyKG1vZGUsICh1bnNpZ25lZCBsb25nICopIGFyZyk7CisJCWlmIChyZXN1bHQpCisJCQlyZXR1cm4gcmVzdWx0OworCQlpZiAobW9kZSAhPSBMSVJDX01PREVfUFVMU0UpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSBMSVJDX1NFVF9SRUNfTU9ERToKKwkJcmVzdWx0ID0gZ2V0X3VzZXIobW9kZSwgKHVuc2lnbmVkIGxvbmcgKikgYXJnKTsKKwkJaWYgKHJlc3VsdCkKKwkJCXJldHVybiByZXN1bHQ7CisJCWlmIChtb2RlICE9IExJUkNfTU9ERV9NT0RFMikKKwkJCXJldHVybiAtRU5PU1lTOworCQlicmVhazsKKwljYXNlIExJUkNfU0VUX1RSQU5TTUlUVEVSX01BU0s6CisJCXJlc3VsdCA9IGdldF91c2VyKGl2YWx1ZSwgKHVuc2lnbmVkIGludCAqKSBhcmcpOworCQlpZiAocmVzdWx0KQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJaWYgKChpdmFsdWUgJiBMSVJDX1BBUkFMTEVMX1RSQU5TTUlUVEVSX01BU0spICE9IGl2YWx1ZSkKKwkJCXJldHVybiBMSVJDX1BBUkFMTEVMX01BWF9UUkFOU01JVFRFUlM7CisJCXR4X21hc2sgPSBpdmFsdWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxpcmNfb3BlbihzdHJ1Y3QgaW5vZGUgKm5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcCkKK3sKKwlpZiAobW9kdWxlX3JlZmNvdW50KFRISVNfTU9EVUxFKSB8fCAhbGlyY19jbGFpbSgpKQorCQlyZXR1cm4gLUVCVVNZOworCisJcGFycG9ydF9lbmFibGVfaXJxKHBwb3J0KTsKKworCS8qIGluaXQgcmVhZCBwdHIgKi8KKwlycHRyID0gMDsKKwl3cHRyID0gMDsKKwlsb3N0X2lycXMgPSAwOworCisJaXNfb3BlbiA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGlyY19jbG9zZShzdHJ1Y3QgaW5vZGUgKm5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcCkKK3sKKwlpZiAoaXNfY2xhaW1lZCkgeworCQlpc19jbGFpbWVkID0gMDsKKwkJcGFycG9ydF9yZWxlYXNlKHBwZGV2aWNlKTsKKwl9CisJaXNfb3BlbiA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxpcmNfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmxsc2VlawkJPSBsaXJjX2xzZWVrLAorCS5yZWFkCQk9IGxpcmNfcmVhZCwKKwkud3JpdGUJCT0gbGlyY193cml0ZSwKKwkucG9sbAkJPSBsaXJjX3BvbGwsCisJLnVubG9ja2VkX2lvY3RsCT0gbGlyY19pb2N0bCwKKwkub3BlbgkJPSBsaXJjX29wZW4sCisJLnJlbGVhc2UJPSBsaXJjX2Nsb3NlCit9OworCitzdGF0aWMgaW50IHNldF91c2VfaW5jKHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF91c2VfZGVjKHZvaWQgKmRhdGEpCit7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGlyY19kcml2ZXIgZHJpdmVyID0geworICAgICAgIC5uYW1lCQk9IExJUkNfRFJJVkVSX05BTUUsCisgICAgICAgLm1pbm9yCQk9IC0xLAorICAgICAgIC5jb2RlX2xlbmd0aAk9IDEsCisgICAgICAgLnNhbXBsZV9yYXRlCT0gMCwKKyAgICAgICAuZGF0YQkJPSBOVUxMLAorICAgICAgIC5hZGRfdG9fYnVmCT0gTlVMTCwKKyAgICAgICAuc2V0X3VzZV9pbmMJPSBzZXRfdXNlX2luYywKKyAgICAgICAuc2V0X3VzZV9kZWMJPSBzZXRfdXNlX2RlYywKKyAgICAgICAuZm9wcwkJPSAmbGlyY19mb3BzLAorICAgICAgIC5kZXYJCT0gTlVMTCwKKyAgICAgICAub3duZXIJCT0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IHBmKHZvaWQgKmhhbmRsZSk7CitzdGF0aWMgdm9pZCBrZih2b2lkICpoYW5kbGUpOworCitzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgcG9sbF90aW1lcjsKK3N0YXRpYyB2b2lkIHBvbGxfc3RhdGUodW5zaWduZWQgbG9uZyBpZ25vcmVkKTsKKworc3RhdGljIHZvaWQgcG9sbF9zdGF0ZSh1bnNpZ25lZCBsb25nIGlnbm9yZWQpCit7CisJcHJpbnRrKEtFUk5fTk9USUNFICIlczogdGltZVxuIiwKKwkgICAgICAgTElSQ19EUklWRVJfTkFNRSk7CisJZGVsX3RpbWVyKCZwb2xsX3RpbWVyKTsKKwlpZiAoaXNfY2xhaW1lZCkKKwkJcmV0dXJuOworCWtmKE5VTEwpOworCWlmICghaXNfY2xhaW1lZCkgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBjb3VsZCBub3QgY2xhaW0gcG9ydCwgZ2l2aW5nIHVwXG4iLAorCQkgICAgICAgTElSQ19EUklWRVJfTkFNRSk7CisJCWluaXRfdGltZXIoJnBvbGxfdGltZXIpOworCQlwb2xsX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFo7CisJCXBvbGxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWN1cnJlbnQ7CisJCXBvbGxfdGltZXIuZnVuY3Rpb24gPSBwb2xsX3N0YXRlOworCQlhZGRfdGltZXIoJnBvbGxfdGltZXIpOworCX0KK30KKworc3RhdGljIGludCBwZih2b2lkICpoYW5kbGUpCit7CisJcGFycG9ydF9kaXNhYmxlX2lycShwcG9ydCk7CisJaXNfY2xhaW1lZCA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGtmKHZvaWQgKmhhbmRsZSkKK3sKKwlpZiAoIWlzX29wZW4pCisJCXJldHVybjsKKwlpZiAoIWxpcmNfY2xhaW0oKSkKKwkJcmV0dXJuOworCXBhcnBvcnRfZW5hYmxlX2lycShwcG9ydCk7CisJbGlyY19vZmYoKTsKKwkvKiB0aGlzIGlzIGEgYml0IGFubm95aW5nIHdoZW4geW91IGFjdHVhbGx5IHByaW50Li4uKi8KKwkvKgorCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWNsYWltZWQgcG9ydFxuIiwgTElSQ19EUklWRVJfTkFNRSk7CisJKi8KK30KKworLyoqKiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gYW5kIGNsZWFudXAgKioqLworCitzdGF0aWMgaW50IF9faW5pdCBsaXJjX3BhcmFsbGVsX2luaXQodm9pZCkKK3sKKwlwcG9ydCA9IHBhcnBvcnRfZmluZF9iYXNlKGlvKTsKKwlpZiAocHBvcnQgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBubyBwb3J0IGF0ICV4IGZvdW5kXG4iLAorCQkgICAgICAgTElSQ19EUklWRVJfTkFNRSwgaW8pOworCQlyZXR1cm4gLUVOWElPOworCX0KKwlwcGRldmljZSA9IHBhcnBvcnRfcmVnaXN0ZXJfZGV2aWNlKHBwb3J0LCBMSVJDX0RSSVZFUl9OQU1FLAorCQkJCQkgICBwZiwga2YsIGlycV9oYW5kbGVyLCAwLCBOVUxMKTsKKwlwYXJwb3J0X3B1dF9wb3J0KHBwb3J0KTsKKwlpZiAocHBkZXZpY2UgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBwYXJwb3J0X3JlZ2lzdGVyX2RldmljZSgpIGZhaWxlZFxuIiwKKwkJICAgICAgIExJUkNfRFJJVkVSX05BTUUpOworCQlyZXR1cm4gLUVOWElPOworCX0KKwlpZiAocGFycG9ydF9jbGFpbShwcGRldmljZSkgIT0gMCkKKwkJZ290byBza2lwX2luaXQ7CisJaXNfY2xhaW1lZCA9IDE7CisJb3V0KExJUkNfTFBfQ09OVFJPTCwgTFBfUFNFTEVDUHxMUF9QSU5JVFApOworCisjaWZkZWYgTElSQ19USU1FUgorCWlmIChkZWJ1ZykKKwkJb3V0KExJUkNfUE9SVF9EQVRBLCB0eF9tYXNrKTsKKworCXRpbWVyID0gaW5pdF9saXJjX3RpbWVyKCk7CisKKyNpZiAwCS8qIGNvbnRpbnVlIGV2ZW4gaWYgZGV2aWNlIGlzIG9mZmxpbmUgKi8KKwlpZiAodGltZXIgPT0gMCkgeworCQlpc19jbGFpbWVkID0gMDsKKwkJcGFycG9ydF9yZWxlYXNlKHBwb3J0KTsKKwkJcGFycG9ydF91bnJlZ2lzdGVyX2RldmljZShwcGRldmljZSk7CisJCXJldHVybiAtRUlPOworCX0KKworI2VuZGlmCisJaWYgKGRlYnVnKQorCQlvdXQoTElSQ19QT1JUX0RBVEEsIDApOworI2VuZGlmCisKKwlpc19jbGFpbWVkID0gMDsKKwlwYXJwb3J0X3JlbGVhc2UocHBkZXZpY2UpOworIHNraXBfaW5pdDoKKwlkcml2ZXIubWlub3IgPSBsaXJjX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlpZiAoZHJpdmVyLm1pbm9yIDwgMCkgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiByZWdpc3Rlcl9jaHJkZXYoKSBmYWlsZWRcbiIsCisJCSAgICAgICBMSVJDX0RSSVZFUl9OQU1FKTsKKwkJcGFycG9ydF91bnJlZ2lzdGVyX2RldmljZShwcGRldmljZSk7CisJCXJldHVybiAtRUlPOworCX0KKwlwcmludGsoS0VSTl9JTkZPICIlczogaW5zdGFsbGVkIHVzaW5nIHBvcnQgMHglMDR4IGlycSAlZFxuIiwKKwkgICAgICAgTElSQ19EUklWRVJfTkFNRSwgaW8sIGlycSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBsaXJjX3BhcmFsbGVsX2V4aXQodm9pZCkKK3sKKwlwYXJwb3J0X3VucmVnaXN0ZXJfZGV2aWNlKHBwZGV2aWNlKTsKKwlsaXJjX3VucmVnaXN0ZXJfZHJpdmVyKGRyaXZlci5taW5vcik7Cit9CisKK21vZHVsZV9pbml0KGxpcmNfcGFyYWxsZWxfaW5pdCk7Cittb2R1bGVfZXhpdChsaXJjX3BhcmFsbGVsX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkluZnJhcmVkIHJlY2VpdmVyIGRyaXZlciBmb3IgcGFyYWxsZWwgcG9ydHMuIik7CitNT0RVTEVfQVVUSE9SKCJDaHJpc3RvcGggQmFydGVsbXVzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShpbywgaW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBiYXNlICgweDNiYywgMHgzNzggb3IgMHgyNzgpIik7CisKK21vZHVsZV9wYXJhbShpcnEsIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGlycSwgIkludGVycnVwdCAoNyBvciA1KSIpOworCittb2R1bGVfcGFyYW0odHhfbWFzaywgaW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0ModHhfbWF4aywgIlRyYW5zbWl0dGVyIG1hc2sgKGRlZmF1bHQ6IDB4MDEpIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMiKTsKKworbW9kdWxlX3BhcmFtKGNoZWNrX3BzZWxlY2QsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJDaGVjayBmb3IgcHJpbnRlciAoZGVmYXVsdDogMCkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfcGFyYWxsZWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfcGFyYWxsZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmVkNmFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19wYXJhbGxlbC5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGxpcmNfcGFyYWxsZWwuaCAqLworCisjaWZuZGVmIF9MSVJDX1BBUkFMTEVMX0gKKyNkZWZpbmUgX0xJUkNfUEFSQUxMRUxfSAorCisjaW5jbHVkZSA8bGludXgvbHAuaD4KKworI2RlZmluZSBMSVJDX1BPUlRfTEVOIDMKKworI2RlZmluZSBMSVJDX0xQX0JBU0UgICAgMAorI2RlZmluZSBMSVJDX0xQX1NUQVRVUyAgMQorI2RlZmluZSBMSVJDX0xQX0NPTlRST0wgMgorCisjZGVmaW5lIExJUkNfUE9SVF9EQVRBICAgICAgICAgICBMSVJDX0xQX0JBU0UgICAgLyogYmFzZSAqLworI2RlZmluZSBMSVJDX1BPUlRfVElNRVIgICAgICAgIExJUkNfTFBfU1RBVFVTICAgIC8qIHN0YXR1cyBwb3J0ICovCisjZGVmaW5lIExJUkNfUE9SVF9USU1FUl9CSVQgICAgICAgICAgTFBfUEJVU1kgICAgLyogYnVzeSBzaWduYWwgKi8KKyNkZWZpbmUgTElSQ19QT1JUX1NJR05BTCAgICAgICBMSVJDX0xQX1NUQVRVUyAgICAvKiBzdGF0dXMgcG9ydCAqLworI2RlZmluZSBMSVJDX1BPUlRfU0lHTkFMX0JJVCAgICAgICAgICBMUF9QQUNLICAgIC8qIGFjayBzaWduYWwgKi8KKyNkZWZpbmUgTElSQ19QT1JUX0lSUSAgICAgICAgIExJUkNfTFBfQ09OVFJPTCAgICAvKiBjb250cm9sIHBvcnQgKi8KKworI2RlZmluZSBMSVJDX1NGSDUwNl9ERUxBWSAwICAgICAgICAgICAgIC8qIGRlbGF5IHRfcGhsIGluIHVzZWNzICovCisKKyNkZWZpbmUgTElSQ19QQVJBTExFTF9NQVhfVFJBTlNNSVRURVJTIDgKKyNkZWZpbmUgTElSQ19QQVJBTExFTF9UUkFOU01JVFRFUl9NQVNLICgoMTw8TElSQ19QQVJBTExFTF9NQVhfVFJBTlNNSVRURVJTKSAtIDEpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19zYXNlbS5jIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19zYXNlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMTY2YzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3Nhc2VtLmMKQEAgLTAsMCArMSw5MzMgQEAKKy8qCisgKiBsaXJjX3Nhc2VtLmMgLSBVU0IgcmVtb3RlIHN1cHBvcnQgZm9yIExJUkMKKyAqIFZlcnNpb24gMC41CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgT2xpdmVyIFN0YWJlbCA8b2xpdmVyLnN0YWJlbEBnbXguZGU+CisgKgkJCSBUaW0gRGF2aWVzIDx0aW1Ab3BlbnN5c3RlbXMubmV0LmF1PgorICoKKyAqIFRoaXMgZHJpdmVyIHdhcyBkZXJpdmVkIGZyb206CisgKiAgIFZlbmt5IFJhanUgPGRldkB2ZW5reS53cz4KKyAqICAgICAgImxpcmNfaW1vbiAtICJMSVJDL1ZGRCBkcml2ZXIgZm9yIEFoYW5peC9Tb3VuZGdyYXBoIElNT04gSVIvVkZEIgorICogICBQYXVsIE1pbGxlciA8cG1pbGxlcjlAdXNlcnMuc291cmNlZm9yZ2UubmV0PidzIDIwMDMtMjAwNAorICogICAgICAibGlyY19hdGl1c2IgLSBVU0IgcmVtb3RlIHN1cHBvcnQgZm9yIExJUkMiCisgKiAgIEN1bHZlciBDb25zdWx0aW5nIFNlcnZpY2VzIDxoZW5yeUBjdWxjb24uY29tPidzIDIwMDMKKyAqICAgICAgIlNhc2VtIE9uQWlyIFZGRC9JUiBVU0IgZHJpdmVyIgorICoKKyAqCisgKiBOT1RFIC0gVGhlIExDRHByb2MgaU1vbiBkcml2ZXIgc2hvdWxkIHdvcmsgd2l0aCB0aGlzIG1vZHVsZS4gIE1vcmUgaW5mbyBhdAorICoJaHR0cDovL3d3dy5mcm9nc3Rvcm0uaW5mby9zYXNlbQorICovCisKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2luY2x1ZGUgPG1lZGlhL2xpcmMuaD4KKyNpbmNsdWRlIDxtZWRpYS9saXJjX2Rldi5oPgorCisKKyNkZWZpbmUgTU9EX0FVVEhPUgkiT2xpdmVyIFN0YWJlbCA8b2xpdmVyLnN0YWJlbEBnbXguZGU+LCAiIFwKKwkJCSJUaW0gRGF2aWVzIDx0aW1Ab3BlbnN5c3RlbXMubmV0LmF1PiIKKyNkZWZpbmUgTU9EX0RFU0MJIlVTQiBEcml2ZXIgZm9yIFNhc2VtIFJlbW90ZSBDb250cm9sbGVyIFYxLjEiCisjZGVmaW5lIE1PRF9OQU1FCSJsaXJjX3Nhc2VtIgorI2RlZmluZSBNT0RfVkVSU0lPTgkiMC41IgorCisjZGVmaW5lIFZGRF9NSU5PUl9CQVNFCTE0NAkvKiBTYW1lIGFzIExDRCAqLworI2RlZmluZSBERVZJQ0VfTkFNRQkibGNkJWQiCisKKyNkZWZpbmUgQlVGX0NIVU5LX1NJWkUJOAorI2RlZmluZSBCVUZfU0laRQkxMjgKKworI2RlZmluZSBJT0NUTF9MQ0RfQ09OVFJBU1QgMQorCisvKioqIFAgUiBPIFQgTyBUIFkgUCBFIFMgKioqLworCisvKiBVU0IgQ2FsbGJhY2sgcHJvdG90eXBlcyAqLworc3RhdGljIGludCBzYXNlbV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyB2b2lkIHNhc2VtX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CitzdGF0aWMgdm9pZCB1c2JfcnhfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyB2b2lkIHVzYl90eF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOworCisvKiBWRkQgZmlsZV9vcGVyYXRpb25zIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgdmZkX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIGxvbmcgdmZkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyBpbnQgdmZkX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBzc2l6ZV90IHZmZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmLAorCQkJCXNpemVfdCBuX2J5dGVzLCBsb2ZmX3QgKnBvcyk7CisKKy8qIExJUkMgZHJpdmVyIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgaXJfb3Blbih2b2lkICpkYXRhKTsKK3N0YXRpYyB2b2lkIGlyX2Nsb3NlKHZvaWQgKmRhdGEpOworCisvKiBEcml2ZXIgaW5pdC9leGl0IHByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgX19pbml0IHNhc2VtX2luaXQodm9pZCk7CitzdGF0aWMgdm9pZCBfX2V4aXQgc2FzZW1fZXhpdCh2b2lkKTsKKworLyoqKiBHIEwgTyBCIEEgTCBTICoqKi8KKyNkZWZpbmUgU0FTRU1fREFUQV9CVUZfU1oJMzIKKworc3RydWN0IHNhc2VtX2NvbnRleHQgeworCisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKwlpbnQgdmZkX2lzb3BlbjsJCQkvKiBWRkQgcG9ydCBoYXMgYmVlbiBvcGVuZWQgICAgICAgKi8KKwl1bnNpZ25lZCBpbnQgdmZkX2NvbnRyYXN0OwkvKiBWRkQgY29udHJhc3QJCSAgICovCisJaW50IGlyX2lzb3BlbjsJCQkvKiBJUiBwb3J0IGhhcyBiZWVuIG9wZW5lZAkqLworCWludCBkZXZfcHJlc2VudDsJCS8qIFVTQiBkZXZpY2UgcHJlc2VuY2UJICAgICovCisJc3RydWN0IG11dGV4IGN0eF9sb2NrOwkJLyogdG8gbG9jayB0aGlzIG9iamVjdAkgICAgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCByZW1vdmVfb2s7CS8qIEZvciB1bmV4cGVjdGVkIFVTQiBkaXNjb25uZWN0cyAqLworCisJc3RydWN0IGxpcmNfZHJpdmVyICpkcml2ZXI7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpyeF9lbmRwb2ludDsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKnR4X2VuZHBvaW50OworCXN0cnVjdCB1cmIgKnJ4X3VyYjsKKwlzdHJ1Y3QgdXJiICp0eF91cmI7CisJdW5zaWduZWQgY2hhciB1c2JfcnhfYnVmWzhdOworCXVuc2lnbmVkIGNoYXIgdXNiX3R4X2J1Zls4XTsKKworCXN0cnVjdCB0eF90IHsKKwkJdW5zaWduZWQgY2hhciBkYXRhX2J1ZltTQVNFTV9EQVRBX0JVRl9TWl07IC8qIHVzZXIgZGF0YSBidWZmZXIgKi8KKwkJc3RydWN0IGNvbXBsZXRpb24gZmluaXNoZWQ7ICAvKiB3YWl0IGZvciB3cml0ZSB0byBmaW5pc2ggICovCisJCWF0b21pY190IGJ1c3k7CQkgICAgIC8qIHdyaXRlIGluIHByb2dyZXNzCSAqLworCQlpbnQgc3RhdHVzOwkJICAgICAvKiBzdGF0dXMgb2YgdHggY29tcGxldGlvbiAgICovCisJfSB0eDsKKworCS8qIGZvciBkZWFsaW5nIHdpdGggcmVwZWF0IGNvZGVzICh3aXNoIHRoZXJlIHdhcyBhIHRvZ2dsZSBiaXQhKSAqLworCXN0cnVjdCB0aW1ldmFsIHByZXNzdGltZTsKKwljaGFyIGxhc3Rjb2RlWzhdOworCWludCBjb2Rlc2F2ZWQ7Cit9OworCisvKiBWRkQgZmlsZSBvcGVyYXRpb25zICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2ZmRfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gJnZmZF9vcGVuLAorCS53cml0ZQkJPSAmdmZkX3dyaXRlLAorCS51bmxvY2tlZF9pb2N0bAk9ICZ2ZmRfaW9jdGwsCisJLnJlbGVhc2UJPSAmdmZkX2Nsb3NlLAorfTsKKworLyogVVNCIERldmljZSBJRCBmb3IgU2FzZW0gVVNCIENvbnRyb2wgQm9hcmQgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzYXNlbV91c2JfaWRfdGFibGVbXSA9IHsKKwkvKiBTYXNlbSBVU0IgQ29udHJvbCBCb2FyZCAqLworCXsgVVNCX0RFVklDRSgweDExYmEsIDB4MDEwMSkgfSwKKwkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworCXt9Cit9OworCisvKiBVU0IgRGV2aWNlIGRhdGEgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzYXNlbV9kcml2ZXIgPSB7CisJLm5hbWUJCT0gTU9EX05BTUUsCisJLnByb2JlCQk9IHNhc2VtX3Byb2JlLAorCS5kaXNjb25uZWN0CT0gc2FzZW1fZGlzY29ubmVjdCwKKwkuaWRfdGFibGUJPSBzYXNlbV91c2JfaWRfdGFibGUsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgc2FzZW1fY2xhc3MgPSB7CisJLm5hbWUJCT0gREVWSUNFX05BTUUsCisJLmZvcHMJCT0gJnZmZF9mb3BzLAorCS5taW5vcl9iYXNlCT0gVkZEX01JTk9SX0JBU0UsCit9OworCisvKiB0byBwcmV2ZW50IHJhY2VzIGJldHdlZW4gb3BlbigpIGFuZCBkaXNjb25uZWN0KCkgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgoZGlzY29ubmVjdF9sb2NrKTsKKworc3RhdGljIGludCBkZWJ1ZzsKKworCisvKioqIE0gTyBEIFUgTCBFICAgQyBPIEQgRSAqKiovCisKK01PRFVMRV9BVVRIT1IoTU9EX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oTU9EX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBtZXNzYWdlczogMD1ubywgMT15ZXMgKGRlZmF1bHQ6IG5vKSIpOworCitzdGF0aWMgdm9pZCBkZWxldGVfY29udGV4dChzdHJ1Y3Qgc2FzZW1fY29udGV4dCAqY29udGV4dCkKK3sKKwl1c2JfZnJlZV91cmIoY29udGV4dC0+dHhfdXJiKTsgIC8qIFZGRCAqLworCXVzYl9mcmVlX3VyYihjb250ZXh0LT5yeF91cmIpOyAgLyogSVIgKi8KKwlsaXJjX2J1ZmZlcl9mcmVlKGNvbnRleHQtPmRyaXZlci0+cmJ1Zik7CisJa2ZyZWUoY29udGV4dC0+ZHJpdmVyLT5yYnVmKTsKKwlrZnJlZShjb250ZXh0LT5kcml2ZXIpOworCWtmcmVlKGNvbnRleHQpOworCisJaWYgKGRlYnVnKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogY29udGV4dCBkZWxldGVkXG4iLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyB2b2lkIGRlcmVnaXN0ZXJfZnJvbV9saXJjKHN0cnVjdCBzYXNlbV9jb250ZXh0ICpjb250ZXh0KQoreworCWludCByZXR2YWw7CisJaW50IG1pbm9yID0gY29udGV4dC0+ZHJpdmVyLT5taW5vcjsKKworCXJldHZhbCA9IGxpcmNfdW5yZWdpc3Rlcl9kcml2ZXIobWlub3IpOworCWlmIChyZXR2YWwpCisJCWVycigiJXM6IHVuYWJsZSB0byBkZXJlZ2lzdGVyIGZyb20gbGlyYyAoJWQpIiwKKwkJCV9fZnVuY19fLCByZXR2YWwpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRGVyZWdpc3RlcmVkIFNhc2VtIGRyaXZlciAobWlub3I6JWQpXG4iLAorCQkgICAgICAgbWlub3IpOworCit9CisKKy8qKgorICogQ2FsbGVkIHdoZW4gdGhlIFZGRCBkZXZpY2UgKGUuZy4gL2Rldi91c2IvbGNkKQorICogaXMgb3BlbmVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KKyAqLworc3RhdGljIGludCB2ZmRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXN0cnVjdCBzYXNlbV9jb250ZXh0ICpjb250ZXh0ID0gTlVMTDsKKwlpbnQgc3VibWlub3I7CisJaW50IHJldHZhbCA9IDA7CisKKwkvKiBwcmV2ZW50IHJhY2VzIHdpdGggZGlzY29ubmVjdCAqLworCW11dGV4X2xvY2soJmRpc2Nvbm5lY3RfbG9jayk7CisKKwlzdWJtaW5vciA9IGltaW5vcihpbm9kZSk7CisJaW50ZXJmYWNlID0gdXNiX2ZpbmRfaW50ZXJmYWNlKCZzYXNlbV9kcml2ZXIsIHN1Ym1pbm9yKTsKKwlpZiAoIWludGVyZmFjZSkgeworCQllcnIoIiVzOiBjb3VsZCBub3QgZmluZCBpbnRlcmZhY2UgZm9yIG1pbm9yICVkIiwKKwkJICAgIF9fZnVuY19fLCBzdWJtaW5vcik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdDsKKwl9CisJY29udGV4dCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKworCWlmICghY29udGV4dCkgeworCQllcnIoIiVzOiBubyBjb250ZXh0IGZvdW5kIGZvciBtaW5vciAlZCIsCisJCQkJCV9fZnVuY19fLCBzdWJtaW5vcik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltdXRleF9sb2NrKCZjb250ZXh0LT5jdHhfbG9jayk7CisKKwlpZiAoY29udGV4dC0+dmZkX2lzb3BlbikgeworCQllcnIoIiVzOiBWRkQgcG9ydCBpcyBhbHJlYWR5IG9wZW4iLCBfX2Z1bmNfXyk7CisJCXJldHZhbCA9IC1FQlVTWTsKKwl9IGVsc2UgeworCQljb250ZXh0LT52ZmRfaXNvcGVuID0gMTsKKwkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gY29udGV4dDsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVkZEIHBvcnQgb3BlbmVkXG4iKTsKKwl9CisKKwltdXRleF91bmxvY2soJmNvbnRleHQtPmN0eF9sb2NrKTsKKworZXhpdDoKKwltdXRleF91bmxvY2soJmRpc2Nvbm5lY3RfbG9jayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisgKiBDYWxsZWQgd2hlbiB0aGUgVkZEIGRldmljZSAoZS5nLiAvZGV2L3VzYi9sY2QpCisgKiBpcyBjbG9zZWQgYnkgdGhlIGFwcGxpY2F0aW9uLgorICovCitzdGF0aWMgbG9uZyB2ZmRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHNhc2VtX2NvbnRleHQgKmNvbnRleHQgPSBOVUxMOworCisJY29udGV4dCA9IChzdHJ1Y3Qgc2FzZW1fY29udGV4dCAqKSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoIWNvbnRleHQpIHsKKwkJZXJyKCIlczogbm8gY29udGV4dCBmb3IgZGV2aWNlIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwltdXRleF9sb2NrKCZjb250ZXh0LT5jdHhfbG9jayk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgSU9DVExfTENEX0NPTlRSQVNUOgorCQlpZiAoYXJnID4gMTAwMCkKKwkJCWFyZyA9IDEwMDA7CisJCWNvbnRleHQtPnZmZF9jb250cmFzdCA9ICh1bnNpZ25lZCBpbnQpYXJnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9JTkZPICJVbmtub3duIElPQ1RMIGNvbW1hbmRcbiIpOworCQltdXRleF91bmxvY2soJmNvbnRleHQtPmN0eF9sb2NrKTsKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsgIC8qIG5vdCBzdXBwb3J0ZWQgKi8KKwl9CisKKwltdXRleF91bmxvY2soJmNvbnRleHQtPmN0eF9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBDYWxsZWQgd2hlbiB0aGUgVkZEIGRldmljZSAoZS5nLiAvZGV2L3VzYi9sY2QpCisgKiBpcyBjbG9zZWQgYnkgdGhlIGFwcGxpY2F0aW9uLgorICovCitzdGF0aWMgaW50IHZmZF9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgc2FzZW1fY29udGV4dCAqY29udGV4dCA9IE5VTEw7CisJaW50IHJldHZhbCA9IDA7CisKKwljb250ZXh0ID0gKHN0cnVjdCBzYXNlbV9jb250ZXh0ICopIGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWlmICghY29udGV4dCkgeworCQllcnIoIiVzOiBubyBjb250ZXh0IGZvciBkZXZpY2UiLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCW11dGV4X2xvY2soJmNvbnRleHQtPmN0eF9sb2NrKTsKKworCWlmICghY29udGV4dC0+dmZkX2lzb3BlbikgeworCQllcnIoIiVzOiBWRkQgaXMgbm90IG9wZW4iLCBfX2Z1bmNfXyk7CisJCXJldHZhbCA9IC1FSU87CisJfSBlbHNlIHsKKwkJY29udGV4dC0+dmZkX2lzb3BlbiA9IDA7CisJCXByaW50ayhLRVJOX0lORk8gIlZGRCBwb3J0IGNsb3NlZFxuIik7CisJCWlmICghY29udGV4dC0+ZGV2X3ByZXNlbnQgJiYgIWNvbnRleHQtPmlyX2lzb3BlbikgeworCisJCQkvKiBEZXZpY2UgZGlzY29ubmVjdGVkIGJlZm9yZSBjbG9zZSBhbmQgSVIgcG9ydCBpcworCQkJICogbm90IG9wZW4uIElmIElSIHBvcnQgaXMgb3BlbiwgY29udGV4dCB3aWxsIGJlCisJCQkgKiBkZWxldGVkIGJ5IGlyX2Nsb3NlLiAqLworCQkJbXV0ZXhfdW5sb2NrKCZjb250ZXh0LT5jdHhfbG9jayk7CisJCQlkZWxldGVfY29udGV4dChjb250ZXh0KTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwl9CisKKwltdXRleF91bmxvY2soJmNvbnRleHQtPmN0eF9sb2NrKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioKKyAqIFNlbmRzIGEgcGFja2V0IHRvIHRoZSBWRkQuCisgKi8KK3N0YXRpYyBpbnQgc2VuZF9wYWNrZXQoc3RydWN0IHNhc2VtX2NvbnRleHQgKmNvbnRleHQpCit7CisJdW5zaWduZWQgaW50IHBpcGU7CisJaW50IGludGVydmFsID0gMDsKKwlpbnQgcmV0dmFsID0gMDsKKworCXBpcGUgPSB1c2Jfc25kaW50cGlwZShjb250ZXh0LT5kZXYsCisJCQljb250ZXh0LT50eF9lbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyk7CisJaW50ZXJ2YWwgPSBjb250ZXh0LT50eF9lbmRwb2ludC0+YkludGVydmFsOworCisJdXNiX2ZpbGxfaW50X3VyYihjb250ZXh0LT50eF91cmIsIGNvbnRleHQtPmRldiwgcGlwZSwKKwkJY29udGV4dC0+dXNiX3R4X2J1Ziwgc2l6ZW9mKGNvbnRleHQtPnVzYl90eF9idWYpLAorCQl1c2JfdHhfY2FsbGJhY2ssIGNvbnRleHQsIGludGVydmFsKTsKKworCWNvbnRleHQtPnR4X3VyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisKKwlpbml0X2NvbXBsZXRpb24oJmNvbnRleHQtPnR4LmZpbmlzaGVkKTsKKwlhdG9taWNfc2V0KCYoY29udGV4dC0+dHguYnVzeSksIDEpOworCisJcmV0dmFsID0gIHVzYl9zdWJtaXRfdXJiKGNvbnRleHQtPnR4X3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldHZhbCkgeworCQlhdG9taWNfc2V0KCYoY29udGV4dC0+dHguYnVzeSksIDApOworCQllcnIoIiVzOiBlcnJvciBzdWJtaXR0aW5nIHVyYiAoJWQpIiwgX19mdW5jX18sIHJldHZhbCk7CisJfSBlbHNlIHsKKwkJLyogV2FpdCBmb3IgdHJhbnNtaXNzaW9uIHRvIGNvbXBsZXRlIChvciBhYm9ydCkgKi8KKwkJbXV0ZXhfdW5sb2NrKCZjb250ZXh0LT5jdHhfbG9jayk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmNvbnRleHQtPnR4LmZpbmlzaGVkKTsKKwkJbXV0ZXhfbG9jaygmY29udGV4dC0+Y3R4X2xvY2spOworCisJCXJldHZhbCA9IGNvbnRleHQtPnR4LnN0YXR1czsKKwkJaWYgKHJldHZhbCkKKwkJCWVycigiJXM6IHBhY2tldCB0eCBmYWlsZWQgKCVkKSIsIF9fZnVuY19fLCByZXR2YWwpOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qKgorICogV3JpdGVzIGRhdGEgdG8gdGhlIFZGRC4gIFRoZSBTYXNlbSBWRkQgaXMgMngxNiBjaGFyYWN0ZXJzCisgKiBhbmQgcmVxdWlyZXMgZGF0YSBpbiA5IGNvbnNlY3V0aXZlIFVTQiBpbnRlcnJ1cHQgcGFja2V0cywKKyAqIGVhY2ggcGFja2V0IGNhcnJ5aW5nIDggYnl0ZXMuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHZmZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmLAorCQkJCXNpemVfdCBuX2J5dGVzLCBsb2ZmX3QgKnBvcykKK3sKKwlpbnQgaTsKKwlpbnQgcmV0dmFsID0gMDsKKwlzdHJ1Y3Qgc2FzZW1fY29udGV4dCAqY29udGV4dDsKKwlpbnQgKmRhdGFfYnVmOworCisJY29udGV4dCA9IChzdHJ1Y3Qgc2FzZW1fY29udGV4dCAqKSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaWYgKCFjb250ZXh0KSB7CisJCWVycigiJXM6IG5vIGNvbnRleHQgZm9yIGRldmljZSIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJbXV0ZXhfbG9jaygmY29udGV4dC0+Y3R4X2xvY2spOworCisJaWYgKCFjb250ZXh0LT5kZXZfcHJlc2VudCkgeworCQllcnIoIiVzOiBubyBTYXNlbSBkZXZpY2UgcHJlc2VudCIsIF9fZnVuY19fKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBleGl0OworCX0KKworCWlmIChuX2J5dGVzIDw9IDAgfHwgbl9ieXRlcyA+IFNBU0VNX0RBVEFfQlVGX1NaKSB7CisJCWVycigiJXM6IGludmFsaWQgcGF5bG9hZCBzaXplIiwgX19mdW5jX18pOworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGF0YV9idWYgPSBtZW1kdXBfdXNlcihidWYsIG5fYnl0ZXMpOworCWlmIChQVFJfRVJSKGRhdGFfYnVmKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGF0YV9idWYpOworCisJbWVtY3B5KGNvbnRleHQtPnR4LmRhdGFfYnVmLCBkYXRhX2J1Ziwgbl9ieXRlcyk7CisKKwkvKiBQYWQgd2l0aCBzcGFjZXMgKi8KKwlmb3IgKGkgPSBuX2J5dGVzOyBpIDwgU0FTRU1fREFUQV9CVUZfU1o7ICsraSkKKwkJY29udGV4dC0+dHguZGF0YV9idWZbaV0gPSAnICc7CisKKwkvKiBOaW5lIDggYnl0ZSBwYWNrZXRzIHRvIGJlIHNlbnQgKi8KKwkvKiBOT1RFOiAiXHgwN1x4MDFcMFwwXDBcMFwwXDAiIG9yICJceDBjXDBcMFwwXDBcMFwwXDAiCisJICogICAgICAgd2lsbCBjbGVhciB0aGUgVkZEICovCisJZm9yIChpID0gMDsgaSA8IDk7IGkrKykgeworCQlzd2l0Y2ggKGkpIHsKKwkJY2FzZSAwOgorCQkJbWVtY3B5KGNvbnRleHQtPnVzYl90eF9idWYsICJceDA3XDBcMFwwXDBcMFwwXDAiLCA4KTsKKwkJCWNvbnRleHQtPnVzYl90eF9idWZbMV0gPSAoY29udGV4dC0+dmZkX2NvbnRyYXN0KSA/CisJCQkJKDB4MkIgLSAoY29udGV4dC0+dmZkX2NvbnRyYXN0IC0gMSkgLyAyNTApCisJCQkJOiAweDJCOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCW1lbWNweShjb250ZXh0LT51c2JfdHhfYnVmLCAiXHgwOVx4MDFcMFwwXDBcMFwwXDAiLCA4KTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQltZW1jcHkoY29udGV4dC0+dXNiX3R4X2J1ZiwgIlx4MGJceDAxXDBcMFwwXDBcMFwwIiwgOCk7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJbWVtY3B5KGNvbnRleHQtPnVzYl90eF9idWYsIGNvbnRleHQtPnR4LmRhdGFfYnVmLCA4KTsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQltZW1jcHkoY29udGV4dC0+dXNiX3R4X2J1ZiwKKwkJCSAgICAgICBjb250ZXh0LT50eC5kYXRhX2J1ZiArIDgsIDgpOworCQkJYnJlYWs7CisJCWNhc2UgNToKKwkJCW1lbWNweShjb250ZXh0LT51c2JfdHhfYnVmLCAiXHgwOVx4MDFcMFwwXDBcMFwwXDAiLCA4KTsKKwkJCWJyZWFrOworCQljYXNlIDY6CisJCQltZW1jcHkoY29udGV4dC0+dXNiX3R4X2J1ZiwgIlx4MGJceDAyXDBcMFwwXDBcMFwwIiwgOCk7CisJCQlicmVhazsKKwkJY2FzZSA3OgorCQkJbWVtY3B5KGNvbnRleHQtPnVzYl90eF9idWYsCisJCQkgICAgICAgY29udGV4dC0+dHguZGF0YV9idWYgKyAxNiwgOCk7CisJCQlicmVhazsKKwkJY2FzZSA4OgorCQkJbWVtY3B5KGNvbnRleHQtPnVzYl90eF9idWYsCisJCQkgICAgICAgY29udGV4dC0+dHguZGF0YV9idWYgKyAyNCwgOCk7CisJCQlicmVhazsKKwkJfQorCQlyZXR2YWwgPSBzZW5kX3BhY2tldChjb250ZXh0KTsKKwkJaWYgKHJldHZhbCkgeworCisJCQllcnIoIiVzOiBzZW5kIHBhY2tldCBmYWlsZWQgZm9yIHBhY2tldCAjJWQiLAorCQkJCQlfX2Z1bmNfXywgaSk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwl9CitleGl0OgorCisJbXV0ZXhfdW5sb2NrKCZjb250ZXh0LT5jdHhfbG9jayk7CisKKwlyZXR1cm4gKCFyZXR2YWwpID8gbl9ieXRlcyA6IHJldHZhbDsKK30KKworLyoqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgVVNCIGNvcmUgQVBJOiB0cmFuc21pdCBkYXRhCisgKi8KK3N0YXRpYyB2b2lkIHVzYl90eF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHNhc2VtX2NvbnRleHQgKmNvbnRleHQ7CisKKwlpZiAoIXVyYikKKwkJcmV0dXJuOworCWNvbnRleHQgPSAoc3RydWN0IHNhc2VtX2NvbnRleHQgKikgdXJiLT5jb250ZXh0OworCWlmICghY29udGV4dCkKKwkJcmV0dXJuOworCisJY29udGV4dC0+dHguc3RhdHVzID0gdXJiLT5zdGF0dXM7CisKKwkvKiBub3RpZnkgd2FpdGVycyB0aGF0IHdyaXRlIGhhcyBmaW5pc2hlZCAqLworCWF0b21pY19zZXQoJmNvbnRleHQtPnR4LmJ1c3ksIDApOworCWNvbXBsZXRlKCZjb250ZXh0LT50eC5maW5pc2hlZCk7CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogQ2FsbGVkIGJ5IGxpcmNfZGV2IHdoZW4gdGhlIGFwcGxpY2F0aW9uIG9wZW5zIC9kZXYvbGlyYworICovCitzdGF0aWMgaW50IGlyX29wZW4odm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0dmFsID0gMDsKKwlzdHJ1Y3Qgc2FzZW1fY29udGV4dCAqY29udGV4dDsKKworCS8qIHByZXZlbnQgcmFjZXMgd2l0aCBkaXNjb25uZWN0ICovCisJbXV0ZXhfbG9jaygmZGlzY29ubmVjdF9sb2NrKTsKKworCWNvbnRleHQgPSAoc3RydWN0IHNhc2VtX2NvbnRleHQgKikgZGF0YTsKKworCW11dGV4X2xvY2soJmNvbnRleHQtPmN0eF9sb2NrKTsKKworCWlmIChjb250ZXh0LT5pcl9pc29wZW4pIHsKKwkJZXJyKCIlczogSVIgcG9ydCBpcyBhbHJlYWR5IG9wZW4iLCBfX2Z1bmNfXyk7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBleGl0OworCX0KKworCXVzYl9maWxsX2ludF91cmIoY29udGV4dC0+cnhfdXJiLCBjb250ZXh0LT5kZXYsCisJCXVzYl9yY3ZpbnRwaXBlKGNvbnRleHQtPmRldiwKKwkJCQljb250ZXh0LT5yeF9lbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCisJCWNvbnRleHQtPnVzYl9yeF9idWYsIHNpemVvZihjb250ZXh0LT51c2JfcnhfYnVmKSwKKwkJdXNiX3J4X2NhbGxiYWNrLCBjb250ZXh0LCBjb250ZXh0LT5yeF9lbmRwb2ludC0+YkludGVydmFsKTsKKworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKGNvbnRleHQtPnJ4X3VyYiwgR0ZQX0tFUk5FTCk7CisKKwlpZiAocmV0dmFsKQorCQllcnIoIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgZm9yIGlyX29wZW4gKCVkKSIsCisJCSAgICBfX2Z1bmNfXywgcmV0dmFsKTsKKwllbHNlIHsKKwkJY29udGV4dC0+aXJfaXNvcGVuID0gMTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiSVIgcG9ydCBvcGVuZWRcbiIpOworCX0KKworZXhpdDoKKwltdXRleF91bmxvY2soJmNvbnRleHQtPmN0eF9sb2NrKTsKKworCW11dGV4X3VubG9jaygmZGlzY29ubmVjdF9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBDYWxsZWQgYnkgbGlyY19kZXYgd2hlbiB0aGUgYXBwbGljYXRpb24gY2xvc2VzIC9kZXYvbGlyYworICovCitzdGF0aWMgdm9pZCBpcl9jbG9zZSh2b2lkICpkYXRhKQoreworCXN0cnVjdCBzYXNlbV9jb250ZXh0ICpjb250ZXh0OworCisJY29udGV4dCA9IChzdHJ1Y3Qgc2FzZW1fY29udGV4dCAqKWRhdGE7CisJaWYgKCFjb250ZXh0KSB7CisJCWVycigiJXM6IG5vIGNvbnRleHQgZm9yIGRldmljZSIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCW11dGV4X2xvY2soJmNvbnRleHQtPmN0eF9sb2NrKTsKKworCXVzYl9raWxsX3VyYihjb250ZXh0LT5yeF91cmIpOworCWNvbnRleHQtPmlyX2lzb3BlbiA9IDA7CisJcHJpbnRrKEtFUk5fSU5GTyAiSVIgcG9ydCBjbG9zZWRcbiIpOworCisJaWYgKCFjb250ZXh0LT5kZXZfcHJlc2VudCkgeworCisJCS8qCisJCSAqIERldmljZSBkaXNjb25uZWN0ZWQgd2hpbGUgSVIgcG9ydCB3YXMKKwkJICogc3RpbGwgb3Blbi4gRHJpdmVyIHdhcyBub3QgZGVyZWdpc3RlcmVkCisJCSAqIGF0IGRpc2Nvbm5lY3QgdGltZSwgc28gZG8gaXQgbm93LgorCQkgKi8KKwkJZGVyZWdpc3Rlcl9mcm9tX2xpcmMoY29udGV4dCk7CisKKwkJaWYgKCFjb250ZXh0LT52ZmRfaXNvcGVuKSB7CisKKwkJCW11dGV4X3VubG9jaygmY29udGV4dC0+Y3R4X2xvY2spOworCQkJZGVsZXRlX2NvbnRleHQoY29udGV4dCk7CisJCQlyZXR1cm47CisJCX0KKwkJLyogSWYgVkZEIHBvcnQgaXMgb3BlbiwgY29udGV4dCB3aWxsIGJlIGRlbGV0ZWQgYnkgdmZkX2Nsb3NlICovCisJfQorCisJbXV0ZXhfdW5sb2NrKCZjb250ZXh0LT5jdHhfbG9jayk7CisJcmV0dXJuOworfQorCisvKioKKyAqIFByb2Nlc3MgdGhlIGluY29taW5nIHBhY2tldAorICovCitzdGF0aWMgdm9pZCBpbmNvbWluZ19wYWNrZXQoc3RydWN0IHNhc2VtX2NvbnRleHQgKmNvbnRleHQsCisJCQkJICAgc3RydWN0IHVyYiAqdXJiKQoreworCWludCBsZW4gPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJdW5zaWduZWQgY2hhciAqYnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJbG9uZyBtczsKKwlzdHJ1Y3QgdGltZXZhbCB0djsKKworCWlmIChsZW4gIT0gOCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogaW52YWxpZCBpbmNvbWluZyBwYWNrZXQgc2l6ZSAoJWQpXG4iLAorCQkgICAgIF9fZnVuY19fLCBsZW4pOworCQlyZXR1cm47CisJfQorCisjaWZkZWYgREVCVUcKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQorCQlwcmludGsoS0VSTl9JTkZPICIlMDJ4ICIsIGJ1ZltpXSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKKyNlbmRpZgorCisJLyoKKwkgKiBMaXJjIGNvdWxkIGRlYWwgd2l0aCB0aGUgcmVwZWF0IGNvZGUsIGJ1dCB3ZSByZWFsbHkgbmVlZCB0byBibG9jayBpdAorCSAqIGlmIGl0IGFycml2ZXMgdG9vIGxhdGUuICBPdGhlcndpc2Ugd2UgY291bGQgcmVwZWF0IHRoZSB3cm9uZyBjb2RlLgorCSAqLworCisJLyogZ2V0IHRoZSB0aW1lIHNpbmNlIHRoZSBsYXN0IGJ1dHRvbiBwcmVzcyAqLworCWRvX2dldHRpbWVvZmRheSgmdHYpOworCW1zID0gKHR2LnR2X3NlYyAtIGNvbnRleHQtPnByZXNzdGltZS50dl9zZWMpICogMTAwMCArCisJICAgICAodHYudHZfdXNlYyAtIGNvbnRleHQtPnByZXNzdGltZS50dl91c2VjKSAvIDEwMDA7CisKKwlpZiAobWVtY21wKGJ1ZiwgIlx4MDhcMFwwXDBcMFwwXDBcMCIsIDgpID09IDApIHsKKwkJLyoKKwkJICogdGhlIHJlcGVhdCBjb2RlIGlzIGJlaW5nIHNlbnQsIHNvIHdlIGNvcHkKKwkJICogdGhlIG9sZCBjb2RlIHRvIExJUkMKKwkJICovCisKKwkJLyoKKwkJICogTk9URTogT25seSBpZiB0aGUgbGFzdCBjb2RlIHdhcyBsZXNzIHRoYW4gMjUwbXMgYWdvCisJCSAqIC0gbm8gb25lIHNob3VsZCBiZSBhYmxlIHRvIHB1c2ggYW5vdGhlciAodW5kZXRlY3RlZCkgYnV0dG9uCisJCSAqICAgaW4gdGhhdCB0aW1lIGFuZCB0aGVuIGdldCBhIGZhbHNlIHJlcGVhdCBvZiB0aGUgcHJldmlvdXMKKwkJICogICBwcmVzcyBidXQgaXQgaXMgbG9uZyBlbm91Z2ggZm9yIGEgZ2VudWluZSByZXBlYXQKKwkJICovCisJCWlmICgobXMgPCAyNTApICYmIChjb250ZXh0LT5jb2Rlc2F2ZWQgIT0gMCkpIHsKKwkJCW1lbWNweShidWYsICZjb250ZXh0LT5sYXN0Y29kZSwgOCk7CisJCQljb250ZXh0LT5wcmVzc3RpbWUudHZfc2VjID0gdHYudHZfc2VjOworCQkJY29udGV4dC0+cHJlc3N0aW1lLnR2X3VzZWMgPSB0di50dl91c2VjOworCQl9CisJfSBlbHNlIHsKKwkJLyogc2F2ZSB0aGUgY3VycmVudCB2YWxpZCBjb2RlIGZvciByZXBlYXRzICovCisJCW1lbWNweSgmY29udGV4dC0+bGFzdGNvZGUsIGJ1ZiwgOCk7CisJCS8qCisJCSAqIHNldCBmbGFnIHRvIHNpZ25hbCBhIHZhbGlkIGNvZGUgd2FzIHNhdmU7CisJCSAqIGp1c3QgZm9yIHNhZmV0eSByZWFzb25zCisJCSAqLworCQljb250ZXh0LT5jb2Rlc2F2ZWQgPSAxOworCQljb250ZXh0LT5wcmVzc3RpbWUudHZfc2VjID0gdHYudHZfc2VjOworCQljb250ZXh0LT5wcmVzc3RpbWUudHZfdXNlYyA9IHR2LnR2X3VzZWM7CisJfQorCisJbGlyY19idWZmZXJfd3JpdGUoY29udGV4dC0+ZHJpdmVyLT5yYnVmLCBidWYpOworCXdha2VfdXAoJmNvbnRleHQtPmRyaXZlci0+cmJ1Zi0+d2FpdF9wb2xsKTsKK30KKworLyoqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgVVNCIGNvcmUgQVBJOiByZWNlaXZlIGRhdGEKKyAqLworc3RhdGljIHZvaWQgdXNiX3J4X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3Qgc2FzZW1fY29udGV4dCAqY29udGV4dDsKKworCWlmICghdXJiKQorCQlyZXR1cm47CisJY29udGV4dCA9IChzdHJ1Y3Qgc2FzZW1fY29udGV4dCAqKSB1cmItPmNvbnRleHQ7CisJaWYgKCFjb250ZXh0KQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisKKwljYXNlIC1FTk9FTlQ6CQkvKiB1c2Jjb3JlIHVubGluayBzdWNjZXNzZnVsISAqLworCQlyZXR1cm47CisKKwljYXNlIDA6CisJCWlmIChjb250ZXh0LT5pcl9pc29wZW4pCisJCQlpbmNvbWluZ19wYWNrZXQoY29udGV4dCwgdXJiKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogc3RhdHVzICglZCk6IGlnbm9yZWQiLAorCQkJIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7CisJCWJyZWFrOworCX0KKworCXVzYl9zdWJtaXRfdXJiKGNvbnRleHQtPnJ4X3VyYiwgR0ZQX0FUT01JQyk7CisJcmV0dXJuOworfQorCisKKworLyoqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgVVNCIGNvcmUgQVBJOiBQcm9iZQorICovCitzdGF0aWMgaW50IHNhc2VtX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IE5VTEw7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYyA9IE5VTEw7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpyeF9lbmRwb2ludCA9IE5VTEw7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICp0eF9lbmRwb2ludCA9IE5VTEw7CisJc3RydWN0IHVyYiAqcnhfdXJiID0gTlVMTDsKKwlzdHJ1Y3QgdXJiICp0eF91cmIgPSBOVUxMOworCXN0cnVjdCBsaXJjX2RyaXZlciAqZHJpdmVyID0gTlVMTDsKKwlzdHJ1Y3QgbGlyY19idWZmZXIgKnJidWYgPSBOVUxMOworCWludCBsaXJjX21pbm9yID0gMDsKKwlpbnQgbnVtX2VuZHBvaW50czsKKwlpbnQgcmV0dmFsID0gMDsKKwlpbnQgdmZkX2VwX2ZvdW5kOworCWludCBpcl9lcF9mb3VuZDsKKwlpbnQgYWxsb2Nfc3RhdHVzOworCXN0cnVjdCBzYXNlbV9jb250ZXh0ICpjb250ZXh0ID0gTlVMTDsKKwlpbnQgaTsKKworCXByaW50ayhLRVJOX0lORk8gIiVzOiBmb3VuZCBTYXNlbSBkZXZpY2VcbiIsIF9fZnVuY19fKTsKKworCisJZGV2ID0gdXNiX2dldF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpKTsKKwlpZmFjZV9kZXNjID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKKwludW1fZW5kcG9pbnRzID0gaWZhY2VfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOworCisJLyoKKwkgKiBTY2FuIHRoZSBlbmRwb2ludCBsaXN0IGFuZCBzZXQ6CisJICoJZmlyc3QgaW5wdXQgZW5kcG9pbnQgPSBJUiBlbmRwb2ludAorCSAqCWZpcnN0IG91dHB1dCBlbmRwb2ludCA9IFZGRCBlbmRwb2ludAorCSAqLworCisJaXJfZXBfZm91bmQgPSAwOworCXZmZF9lcF9mb3VuZCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2VuZHBvaW50cyAmJiAhKGlyX2VwX2ZvdW5kICYmIHZmZF9lcF9mb3VuZCk7ICsraSkgeworCisJCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXA7CisJCWludCBlcF9kaXI7CisJCWludCBlcF90eXBlOworCQllcCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludCBbaV0uZGVzYzsKKwkJZXBfZGlyID0gZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0s7CisJCWVwX3R5cGUgPSBlcC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0s7CisKKwkJaWYgKCFpcl9lcF9mb3VuZCAmJgorCQkJZXBfZGlyID09IFVTQl9ESVJfSU4gJiYKKwkJCWVwX3R5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UKSB7CisKKwkJCXJ4X2VuZHBvaW50ID0gZXA7CisJCQlpcl9lcF9mb3VuZCA9IDE7CisJCQlpZiAoZGVidWcpCisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGZvdW5kIElSIGVuZHBvaW50XG4iLAorCQkJCSAgICAgICBfX2Z1bmNfXyk7CisKKwkJfSBlbHNlIGlmICghdmZkX2VwX2ZvdW5kICYmCisJCQllcF9kaXIgPT0gVVNCX0RJUl9PVVQgJiYKKwkJCWVwX3R5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UKSB7CisKKwkJCXR4X2VuZHBvaW50ID0gZXA7CisJCQl2ZmRfZXBfZm91bmQgPSAxOworCQkJaWYgKGRlYnVnKQorCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBmb3VuZCBWRkQgZW5kcG9pbnRcbiIsCisJCQkJICAgICAgIF9fZnVuY19fKTsKKwkJfQorCX0KKworCS8qIElucHV0IGVuZHBvaW50IGlzIG1hbmRhdG9yeSAqLworCWlmICghaXJfZXBfZm91bmQpIHsKKworCQllcnIoIiVzOiBubyB2YWxpZCBpbnB1dCAoSVIpIGVuZHBvaW50IGZvdW5kLiIsIF9fZnVuY19fKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBleGl0OworCX0KKworCWlmICghdmZkX2VwX2ZvdW5kKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogbm8gdmFsaWQgb3V0cHV0IChWRkQpIGVuZHBvaW50IGZvdW5kLlxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKworCisJLyogQWxsb2NhdGUgbWVtb3J5ICovCisJYWxsb2Nfc3RhdHVzID0gMDsKKworCWNvbnRleHQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FzZW1fY29udGV4dCksIEdGUF9LRVJORUwpOworCWlmICghY29udGV4dCkgeworCQllcnIoIiVzOiBremFsbG9jIGZhaWxlZCBmb3IgY29udGV4dCIsIF9fZnVuY19fKTsKKwkJYWxsb2Nfc3RhdHVzID0gMTsKKwkJZ290byBhbGxvY19zdGF0dXNfc3dpdGNoOworCX0KKwlkcml2ZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbGlyY19kcml2ZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRyaXZlcikgeworCQllcnIoIiVzOiBremFsbG9jIGZhaWxlZCBmb3IgbGlyY19kcml2ZXIiLCBfX2Z1bmNfXyk7CisJCWFsbG9jX3N0YXR1cyA9IDI7CisJCWdvdG8gYWxsb2Nfc3RhdHVzX3N3aXRjaDsKKwl9CisJcmJ1ZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBsaXJjX2J1ZmZlciksIEdGUF9LRVJORUwpOworCWlmICghcmJ1ZikgeworCQllcnIoIiVzOiBrbWFsbG9jIGZhaWxlZCBmb3IgbGlyY19idWZmZXIiLCBfX2Z1bmNfXyk7CisJCWFsbG9jX3N0YXR1cyA9IDM7CisJCWdvdG8gYWxsb2Nfc3RhdHVzX3N3aXRjaDsKKwl9CisJaWYgKGxpcmNfYnVmZmVyX2luaXQocmJ1ZiwgQlVGX0NIVU5LX1NJWkUsIEJVRl9TSVpFKSkgeworCQllcnIoIiVzOiBsaXJjX2J1ZmZlcl9pbml0IGZhaWxlZCIsIF9fZnVuY19fKTsKKwkJYWxsb2Nfc3RhdHVzID0gNDsKKwkJZ290byBhbGxvY19zdGF0dXNfc3dpdGNoOworCX0KKwlyeF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghcnhfdXJiKSB7CisJCWVycigiJXM6IHVzYl9hbGxvY191cmIgZmFpbGVkIGZvciBJUiB1cmIiLCBfX2Z1bmNfXyk7CisJCWFsbG9jX3N0YXR1cyA9IDU7CisJCWdvdG8gYWxsb2Nfc3RhdHVzX3N3aXRjaDsKKwl9CisJaWYgKHZmZF9lcF9mb3VuZCkgeworCQl0eF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQlpZiAoIXR4X3VyYikgeworCQkJZXJyKCIlczogdXNiX2FsbG9jX3VyYiBmYWlsZWQgZm9yIFZGRCB1cmIiLAorCQkJICAgIF9fZnVuY19fKTsKKwkJCWFsbG9jX3N0YXR1cyA9IDY7CisJCQlnb3RvIGFsbG9jX3N0YXR1c19zd2l0Y2g7CisJCX0KKwl9CisKKwltdXRleF9pbml0KCZjb250ZXh0LT5jdHhfbG9jayk7CisKKwlzdHJjcHkoZHJpdmVyLT5uYW1lLCBNT0RfTkFNRSk7CisJZHJpdmVyLT5taW5vciA9IC0xOworCWRyaXZlci0+Y29kZV9sZW5ndGggPSA2NDsKKwlkcml2ZXItPnNhbXBsZV9yYXRlID0gMDsKKwlkcml2ZXItPmZlYXR1cmVzID0gTElSQ19DQU5fUkVDX0xJUkNDT0RFOworCWRyaXZlci0+ZGF0YSA9IGNvbnRleHQ7CisJZHJpdmVyLT5yYnVmID0gcmJ1ZjsKKwlkcml2ZXItPnNldF91c2VfaW5jID0gaXJfb3BlbjsKKwlkcml2ZXItPnNldF91c2VfZGVjID0gaXJfY2xvc2U7CisJZHJpdmVyLT5kZXYgICA9ICZpbnRlcmZhY2UtPmRldjsKKwlkcml2ZXItPm93bmVyID0gVEhJU19NT0RVTEU7CisKKwltdXRleF9sb2NrKCZjb250ZXh0LT5jdHhfbG9jayk7CisKKwlsaXJjX21pbm9yID0gbGlyY19yZWdpc3Rlcl9kcml2ZXIoZHJpdmVyKTsKKwlpZiAobGlyY19taW5vciA8IDApIHsKKwkJZXJyKCIlczogbGlyY19yZWdpc3Rlcl9kcml2ZXIgZmFpbGVkIiwgX19mdW5jX18pOworCQlhbGxvY19zdGF0dXMgPSA3OworCQltdXRleF91bmxvY2soJmNvbnRleHQtPmN0eF9sb2NrKTsKKwl9IGVsc2UKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlZ2lzdGVyZWQgU2FzZW0gZHJpdmVyIChtaW5vcjolZClcbiIsCisJCQlfX2Z1bmNfXywgbGlyY19taW5vcik7CisKK2FsbG9jX3N0YXR1c19zd2l0Y2g6CisKKwlzd2l0Y2ggKGFsbG9jX3N0YXR1cykgeworCisJY2FzZSA3OgorCQlpZiAodmZkX2VwX2ZvdW5kKQorCQkJdXNiX2ZyZWVfdXJiKHR4X3VyYik7CisJY2FzZSA2OgorCQl1c2JfZnJlZV91cmIocnhfdXJiKTsKKwljYXNlIDU6CisJCWxpcmNfYnVmZmVyX2ZyZWUocmJ1Zik7CisJY2FzZSA0OgorCQlrZnJlZShyYnVmKTsKKwljYXNlIDM6CisJCWtmcmVlKGRyaXZlcik7CisJY2FzZSAyOgorCQlrZnJlZShjb250ZXh0KTsKKwkJY29udGV4dCA9IE5VTEw7CisJY2FzZSAxOgorCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogTmVlZGVkIHdoaWxlIHVucmVnaXN0ZXJpbmchICovCisJZHJpdmVyLT5taW5vciA9IGxpcmNfbWlub3I7CisKKwljb250ZXh0LT5kZXYgPSBkZXY7CisJY29udGV4dC0+ZGV2X3ByZXNlbnQgPSAxOworCWNvbnRleHQtPnJ4X2VuZHBvaW50ID0gcnhfZW5kcG9pbnQ7CisJY29udGV4dC0+cnhfdXJiID0gcnhfdXJiOworCWlmICh2ZmRfZXBfZm91bmQpIHsKKwkJY29udGV4dC0+dHhfZW5kcG9pbnQgPSB0eF9lbmRwb2ludDsKKwkJY29udGV4dC0+dHhfdXJiID0gdHhfdXJiOworCQljb250ZXh0LT52ZmRfY29udHJhc3QgPSAxMDAwOyAgIC8qIHJhbmdlIDAgLSAxMDAwICovCisJfQorCWNvbnRleHQtPmRyaXZlciA9IGRyaXZlcjsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBjb250ZXh0KTsKKworCWlmICh2ZmRfZXBfZm91bmQpIHsKKworCQlpZiAoZGVidWcpCisJCQlwcmludGsoS0VSTl9JTkZPICJSZWdpc3RlcmluZyBWRkQgd2l0aCBzeXNmc1xuIik7CisJCWlmICh1c2JfcmVnaXN0ZXJfZGV2KGludGVyZmFjZSwgJnNhc2VtX2NsYXNzKSkKKwkJCS8qIE5vdCBhIGZhdGFsIGVycm9yLCBzbyBpZ25vcmUgKi8KKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjb3VsZCBub3QgZ2V0IGEgbWlub3IgbnVtYmVyICIKKwkJCSAgICAgICAiZm9yIFZGRFxuIiwgX19mdW5jX18pOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIiVzOiBTYXNlbSBkZXZpY2Ugb24gdXNiPCVkOiVkPiBpbml0aWFsaXplZFxuIiwKKwkJCV9fZnVuY19fLCBkZXYtPmJ1cy0+YnVzbnVtLCBkZXYtPmRldm51bSk7CisKKwltdXRleF91bmxvY2soJmNvbnRleHQtPmN0eF9sb2NrKTsKK2V4aXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgVVNCIGNvcmUgQVBJOiBkaXNvbm5lY3QKKyAqLworc3RhdGljIHZvaWQgc2FzZW1fZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCBzYXNlbV9jb250ZXh0ICpjb250ZXh0OworCisJLyogcHJldmVudCByYWNlcyB3aXRoIGlyX29wZW4oKS92ZmRfb3BlbigpICovCisJbXV0ZXhfbG9jaygmZGlzY29ubmVjdF9sb2NrKTsKKworCWNvbnRleHQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJbXV0ZXhfbG9jaygmY29udGV4dC0+Y3R4X2xvY2spOworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNhc2VtIGRldmljZSBkaXNjb25uZWN0ZWRcbiIsIF9fZnVuY19fKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKwljb250ZXh0LT5kZXZfcHJlc2VudCA9IDA7CisKKwkvKiBTdG9wIHJlY2VwdGlvbiAqLworCXVzYl9raWxsX3VyYihjb250ZXh0LT5yeF91cmIpOworCisJLyogQWJvcnQgb25nb2luZyB3cml0ZSAqLworCWlmIChhdG9taWNfcmVhZCgmY29udGV4dC0+dHguYnVzeSkpIHsKKworCQl1c2Jfa2lsbF91cmIoY29udGV4dC0+dHhfdXJiKTsKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmY29udGV4dC0+dHguZmluaXNoZWQpOworCX0KKworCS8qIERlLXJlZ2lzdGVyIGZyb20gbGlyY19kZXYgaWYgSVIgcG9ydCBpcyBub3Qgb3BlbiAqLworCWlmICghY29udGV4dC0+aXJfaXNvcGVuKQorCQlkZXJlZ2lzdGVyX2Zyb21fbGlyYyhjb250ZXh0KTsKKworCXVzYl9kZXJlZ2lzdGVyX2RldihpbnRlcmZhY2UsICZzYXNlbV9jbGFzcyk7CisKKwltdXRleF91bmxvY2soJmNvbnRleHQtPmN0eF9sb2NrKTsKKworCWlmICghY29udGV4dC0+aXJfaXNvcGVuICYmICFjb250ZXh0LT52ZmRfaXNvcGVuKQorCQlkZWxldGVfY29udGV4dChjb250ZXh0KTsKKworCW11dGV4X3VubG9jaygmZGlzY29ubmVjdF9sb2NrKTsKK30KKworc3RhdGljIGludCBfX2luaXQgc2FzZW1faW5pdCh2b2lkKQoreworCWludCByYzsKKworCXByaW50ayhLRVJOX0lORk8gTU9EX0RFU0MgIiwgdiIgTU9EX1ZFUlNJT04gIlxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyBNT0RfQVVUSE9SICJcbiIpOworCisJcmMgPSB1c2JfcmVnaXN0ZXIoJnNhc2VtX2RyaXZlcik7CisJaWYgKHJjIDwgMCkgeworCQllcnIoIiVzOiB1c2IgcmVnaXN0ZXIgZmFpbGVkICglZCkiLCBfX2Z1bmNfXywgcmMpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzYXNlbV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNhc2VtX2RyaXZlcik7CisJcHJpbnRrKEtFUk5fSU5GTyAibW9kdWxlIHJlbW92ZWQuIEdvb2RieWUhXG4iKTsKK30KKworCittb2R1bGVfaW5pdChzYXNlbV9pbml0KTsKK21vZHVsZV9leGl0KHNhc2VtX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19zZXJpYWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfc2VyaWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ1NmY4ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfc2VyaWFsLmMKQEAgLTAsMCArMSwxMzEzIEBACisvKgorICogbGlyY19zZXJpYWwuYworICoKKyAqIGxpcmNfc2VyaWFsIC0gRGV2aWNlIGRyaXZlciB0aGF0IHJlY29yZHMgcHVsc2UtIGFuZCBwYXVzZS1sZW5ndGhzCisgKgkgICAgICAgKHNwYWNlLWxlbmd0aHMpIGJldHdlZW4gRERDRCBldmVudCBvbiBhIHNlcmlhbCBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5Niw5NyBSYWxwaCBNZXR6bGVyIDxyamttQHRocC51bmkta29lbG4uZGU+CisgKiBDb3B5cmlnaHQgKEMpIDE5OTggVHJlbnQgUGllcGhvIDx4eXp6eUB1Lndhc2hpbmd0b24uZWR1PgorICogQ29weXJpZ2h0IChDKSAxOTk4IEJlbiBQZmFmZiA8YmxwQGdudS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgQ2hyaXN0b3BoIEJhcnRlbG11cyA8bGlyY0BiYXJ0ZWxtdXMuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQW5kcmVpIFRhbmFzIDxhbmRyZWlAdGFuYXMuY2E+IChzdXNwZW5kL3Jlc3VtZSBzdXBwb3J0KQorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKy8qCisgKiBTdGV2ZSdzIGNoYW5nZXMgdG8gaW1wcm92ZSB0cmFuc21pc3Npb24gZmlkZWxpdHk6CisgKiAgIC0gZm9yIHN5c3RlbXMgd2l0aCB0aGUgcmR0c2MgaW5zdHJ1Y3Rpb24gYW5kIHRoZSBjbG9jayBjb3VudGVyLCBhCisgKiAgICAgc2VuZF9wdWxlIHRoYXQgdGltZXMgdGhlIHB1bHNlcyBkaXJlY3RseSB1c2luZyB0aGUgY291bnRlci4KKyAqICAgICBUaGlzIG1lYW5zIHRoYXQgdGhlIExJUkNfU0VSSUFMX1RSQU5TTUlUVEVSX0xBVEVOQ1kgZnVkZ2UgaXMKKyAqICAgICBub3QgbmVlZGVkLiBNZWFzdXJlbWVudCBzaG93cyB2ZXJ5IHN0YWJsZSB3YXZlZm9ybSwgZXZlbiB3aGVyZQorICogICAgIFBDSSBhY3Rpdml0eSBzbG93cyB0aGUgYWNjZXNzIHRvIHRoZSBVQVJULCB3aGljaCB0cmlwcyB1cCBvdGhlcgorICogICAgIHZlcnNpb25zLgorICogICAtIEZvciBvdGhlciBzeXN0ZW0sIG5vbi1pbnRlZ2VyLW1pY3Jvc2Vjb25kIHB1bHNlL3NwYWNlIGxlbmd0aHMsCisgKiAgICAgZG9uZSB1c2luZyBmaXhlZCBwb2ludCBiaW5hcnkuIFNvLCBtdWNoIG1vcmUgYWNjdXJhdGUgY2FycmllcgorICogICAgIGZyZXF1ZW5jeS4KKyAqICAgLSBmaW5lIHR1bmVkIHRyYW5zbWl0dGVyIGxhdGVuY3ksIHRha2luZyBhZHZhbnRhZ2Ugb2YgZnJhY3Rpb25hbAorICogICAgIG1pY3Jvc2Vjb25kcyBpbiBwcmV2aW91cyBjaGFuZ2UKKyAqICAgLSBGaXhlZCBidWcgaW4gdGhlIHdheSB0cmFuc21pdHRlciBsYXRlbmN5IHdhcyBhY2NvdW50ZWQgZm9yIGJ5CisgKiAgICAgdHVuaW5nIHRoZSBwdWxzZSBsZW5ndGhzIGRvd24gLSB0aGUgc2VuZF9wdWxzZSByb3V0aW5lIGlnbm9yZWQKKyAqICAgICB0aGlzIG92ZXJoZWFkIGFzIGl0IHRpbWVkIHRoZSBvdmVyYWxsIHB1bHNlIGxlbmd0aCAtIHNvIHRoZQorICogICAgIHB1bHNlIGZyZXF1ZW5jeSB3YXMgcmlnaHQgYnV0IG92ZXJhbGwgcHVsc2UgbGVuZ3RoIHdhcyB0b28KKyAqICAgICBsb25nLiBGaXhlZCBieSBhY2NvdW50aW5nIGZvciBsYXRlbmN5IG9uIGVhY2ggcHVsc2Uvc3BhY2UKKyAqICAgICBpdGVyYXRpb24uCisgKgorICogU3RldmUgRGF2aWVzIDxzdGV2ZUBkYXZpZXNmYW0ub3JnPiAgSnVseSAyMDAxCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2lmZGVmIENPTkZJR19MSVJDX1NFUklBTF9OU0xVMgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2VuZGlmCisvKiBGcm9tIEludGVsIElYUDQyWCBEZXZlbG9wZXIncyBNYW51YWwgKCMyNTI0ODAtMDA1KTogKi8KKy8qIGZ0cDovL2Rvd25sb2FkLmludGVsLmNvbS9kZXNpZ24vbmV0d29yay9tYW51YWxzLzI1MjQ4MDA1LnBkZiAqLworI2RlZmluZSBVQVJUX0lFX0lYUDQyWF9VVUUgICAweDQwIC8qIElYUDQyWCBVQVJUIFVuaXQgZW5hYmxlICovCisjZGVmaW5lIFVBUlRfSUVfSVhQNDJYX1JUT0lFIDB4MTAgLyogSVhQNDJYIFJlY2VpdmVyIERhdGEgVGltZW91dCBpbnQuZW5hYmxlICovCisKKyNpbmNsdWRlIDxtZWRpYS9saXJjLmg+CisjaW5jbHVkZSA8bWVkaWEvbGlyY19kZXYuaD4KKworI2RlZmluZSBMSVJDX0RSSVZFUl9OQU1FICJsaXJjX3NlcmlhbCIKKworc3RydWN0IGxpcmNfc2VyaWFsIHsKKwlpbnQgc2lnbmFsX3BpbjsKKwlpbnQgc2lnbmFsX3Bpbl9jaGFuZ2U7CisJdTggb247CisJdTggb2ZmOworCWxvbmcgKCpzZW5kX3B1bHNlKSh1bnNpZ25lZCBsb25nIGxlbmd0aCk7CisJdm9pZCAoKnNlbmRfc3BhY2UpKGxvbmcgbGVuZ3RoKTsKKwlpbnQgZmVhdHVyZXM7CisJc3BpbmxvY2tfdCBsb2NrOworfTsKKworI2RlZmluZSBMSVJDX0hPTUVCUkVXCQkwCisjZGVmaW5lIExJUkNfSVJERU8JCTEKKyNkZWZpbmUgTElSQ19JUkRFT19SRU1PVEUJMgorI2RlZmluZSBMSVJDX0FOSU1BWAkJMworI2RlZmluZSBMSVJDX0lHT1IJCTQKKyNkZWZpbmUgTElSQ19OU0xVMgkJNQorCisvKioqIG1vZHVsZSBwYXJhbWV0ZXJzICoqKi8KK3N0YXRpYyBpbnQgdHlwZTsKK3N0YXRpYyBpbnQgaW87CitzdGF0aWMgaW50IGlycTsKK3N0YXRpYyBpbnQgaW9tbWFwOworc3RhdGljIGludCBpb3NoaWZ0Oworc3RhdGljIGludCBzb2Z0Y2FycmllciA9IDE7CitzdGF0aWMgaW50IHNoYXJlX2lycTsKK3N0YXRpYyBpbnQgZGVidWc7CitzdGF0aWMgaW50IHNlbnNlID0gLTE7CS8qIC0xID0gYXV0bywgMCA9IGFjdGl2ZSBoaWdoLCAxID0gYWN0aXZlIGxvdyAqLworc3RhdGljIGludCB0eHNlbnNlOwkvKiAwID0gYWN0aXZlIGhpZ2gsIDEgPSBhY3RpdmUgbG93ICovCisKKyNkZWZpbmUgZHByaW50ayhmbXQsIGFyZ3MuLi4pCQkJCQlcCisJZG8gewkJCQkJCQlcCisJCWlmIChkZWJ1ZykJCQkJCVwKKwkJCXByaW50ayhLRVJOX0RFQlVHIExJUkNfRFJJVkVSX05BTUUgIjogIglcCisJCQkgICAgICAgZm10LCAjIyBhcmdzKTsJCQlcCisJfSB3aGlsZSAoMCkKKworLyogZm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KK3N0YXRpYyBsb25nIHNlbmRfcHVsc2VfaXJkZW8odW5zaWduZWQgbG9uZyBsZW5ndGgpOworc3RhdGljIGxvbmcgc2VuZF9wdWxzZV9ob21lYnJldyh1bnNpZ25lZCBsb25nIGxlbmd0aCk7CitzdGF0aWMgdm9pZCBzZW5kX3NwYWNlX2lyZGVvKGxvbmcgbGVuZ3RoKTsKK3N0YXRpYyB2b2lkIHNlbmRfc3BhY2VfaG9tZWJyZXcobG9uZyBsZW5ndGgpOworCitzdGF0aWMgc3RydWN0IGxpcmNfc2VyaWFsIGhhcmR3YXJlW10gPSB7CisJW0xJUkNfSE9NRUJSRVddID0geworCQkuc2lnbmFsX3BpbiAgICAgICAgPSBVQVJUX01TUl9EQ0QsCisJCS5zaWduYWxfcGluX2NoYW5nZSA9IFVBUlRfTVNSX0REQ0QsCisJCS5vbiAgPSAoVUFSVF9NQ1JfUlRTIHwgVUFSVF9NQ1JfT1VUMiB8IFVBUlRfTUNSX0RUUiksCisJCS5vZmYgPSAoVUFSVF9NQ1JfUlRTIHwgVUFSVF9NQ1JfT1VUMiksCisJCS5zZW5kX3B1bHNlID0gc2VuZF9wdWxzZV9ob21lYnJldywKKwkJLnNlbmRfc3BhY2UgPSBzZW5kX3NwYWNlX2hvbWVicmV3LAorI2lmZGVmIENPTkZJR19MSVJDX1NFUklBTF9UUkFOU01JVFRFUgorCQkuZmVhdHVyZXMgICAgPSAoTElSQ19DQU5fU0VUX1NFTkRfRFVUWV9DWUNMRSB8CisJCQkJTElSQ19DQU5fU0VUX1NFTkRfQ0FSUklFUiB8CisJCQkJTElSQ19DQU5fU0VORF9QVUxTRSB8IExJUkNfQ0FOX1JFQ19NT0RFMikKKyNlbHNlCisJCS5mZWF0dXJlcyAgICA9IExJUkNfQ0FOX1JFQ19NT0RFMgorI2VuZGlmCisJfSwKKworCVtMSVJDX0lSREVPXSA9IHsKKwkJLnNpZ25hbF9waW4gICAgICAgID0gVUFSVF9NU1JfRFNSLAorCQkuc2lnbmFsX3Bpbl9jaGFuZ2UgPSBVQVJUX01TUl9ERFNSLAorCQkub24gID0gVUFSVF9NQ1JfT1VUMiwKKwkJLm9mZiA9IChVQVJUX01DUl9SVFMgfCBVQVJUX01DUl9EVFIgfCBVQVJUX01DUl9PVVQyKSwKKwkJLnNlbmRfcHVsc2UgID0gc2VuZF9wdWxzZV9pcmRlbywKKwkJLnNlbmRfc3BhY2UgID0gc2VuZF9zcGFjZV9pcmRlbywKKwkJLmZlYXR1cmVzICAgID0gKExJUkNfQ0FOX1NFVF9TRU5EX0RVVFlfQ1lDTEUgfAorCQkJCUxJUkNfQ0FOX1NFTkRfUFVMU0UgfCBMSVJDX0NBTl9SRUNfTU9ERTIpCisJfSwKKworCVtMSVJDX0lSREVPX1JFTU9URV0gPSB7CisJCS5zaWduYWxfcGluICAgICAgICA9IFVBUlRfTVNSX0RTUiwKKwkJLnNpZ25hbF9waW5fY2hhbmdlID0gVUFSVF9NU1JfRERTUiwKKwkJLm9uICA9IChVQVJUX01DUl9SVFMgfCBVQVJUX01DUl9EVFIgfCBVQVJUX01DUl9PVVQyKSwKKwkJLm9mZiA9IChVQVJUX01DUl9SVFMgfCBVQVJUX01DUl9EVFIgfCBVQVJUX01DUl9PVVQyKSwKKwkJLnNlbmRfcHVsc2UgID0gc2VuZF9wdWxzZV9pcmRlbywKKwkJLnNlbmRfc3BhY2UgID0gc2VuZF9zcGFjZV9pcmRlbywKKwkJLmZlYXR1cmVzICAgID0gKExJUkNfQ0FOX1NFVF9TRU5EX0RVVFlfQ1lDTEUgfAorCQkJCUxJUkNfQ0FOX1NFTkRfUFVMU0UgfCBMSVJDX0NBTl9SRUNfTU9ERTIpCisJfSwKKworCVtMSVJDX0FOSU1BWF0gPSB7CisJCS5zaWduYWxfcGluICAgICAgICA9IFVBUlRfTVNSX0RDRCwKKwkJLnNpZ25hbF9waW5fY2hhbmdlID0gVUFSVF9NU1JfRERDRCwKKwkJLm9uICA9IDAsCisJCS5vZmYgPSAoVUFSVF9NQ1JfUlRTIHwgVUFSVF9NQ1JfRFRSIHwgVUFSVF9NQ1JfT1VUMiksCisJCS5zZW5kX3B1bHNlID0gTlVMTCwKKwkJLnNlbmRfc3BhY2UgPSBOVUxMLAorCQkuZmVhdHVyZXMgICA9IExJUkNfQ0FOX1JFQ19NT0RFMgorCX0sCisKKwlbTElSQ19JR09SXSA9IHsKKwkJLnNpZ25hbF9waW4gICAgICAgID0gVUFSVF9NU1JfRFNSLAorCQkuc2lnbmFsX3Bpbl9jaGFuZ2UgPSBVQVJUX01TUl9ERFNSLAorCQkub24gID0gKFVBUlRfTUNSX1JUUyB8IFVBUlRfTUNSX09VVDIgfCBVQVJUX01DUl9EVFIpLAorCQkub2ZmID0gKFVBUlRfTUNSX1JUUyB8IFVBUlRfTUNSX09VVDIpLAorCQkuc2VuZF9wdWxzZSA9IHNlbmRfcHVsc2VfaG9tZWJyZXcsCisJCS5zZW5kX3NwYWNlID0gc2VuZF9zcGFjZV9ob21lYnJldywKKyNpZmRlZiBDT05GSUdfTElSQ19TRVJJQUxfVFJBTlNNSVRURVIKKwkJLmZlYXR1cmVzICAgID0gKExJUkNfQ0FOX1NFVF9TRU5EX0RVVFlfQ1lDTEUgfAorCQkJCUxJUkNfQ0FOX1NFVF9TRU5EX0NBUlJJRVIgfAorCQkJCUxJUkNfQ0FOX1NFTkRfUFVMU0UgfCBMSVJDX0NBTl9SRUNfTU9ERTIpCisjZWxzZQorCQkuZmVhdHVyZXMgICAgPSBMSVJDX0NBTl9SRUNfTU9ERTIKKyNlbmRpZgorCX0sCisKKyNpZmRlZiBDT05GSUdfTElSQ19TRVJJQUxfTlNMVTIKKwkvKgorCSAqIE1vZGlmaWVkIExpbmtzeXMgTmV0d29yayBTdG9yYWdlIExpbmsgVVNCIDIuMCAoTlNMVTIpOgorCSAqIFdlIHJlY2VpdmUgb24gQ1RTIG9mIHRoZSAybmQgc2VyaWFsIHBvcnQgKFIxNDIsTEhTKSwgd2UKKwkgKiB0cmFuc21pdCB3aXRoIGEgSVIgZGlvZGUgYmV0d2VlbiBHUElPWzFdIChncmVlbiBzdGF0dXMgTEVEKSwKKwkgKiBhbmQgZ3JvdW5kIChNYXR0aGlhcyBHb2VibCA8bWF0dGhpYXMuZ29lYmxAZ29lYmwubmV0PikuCisJICogU2VlIGFsc28gaHR0cDovL3d3dy5uc2x1Mi1saW51eC5vcmcgZm9yIHRoaXMgZGV2aWNlCisJICovCisJW0xJUkNfTlNMVTJdID0geworCQkuc2lnbmFsX3BpbiAgICAgICAgPSBVQVJUX01TUl9DVFMsCisJCS5zaWduYWxfcGluX2NoYW5nZSA9IFVBUlRfTVNSX0RDVFMsCisJCS5vbiAgPSAoVUFSVF9NQ1JfUlRTIHwgVUFSVF9NQ1JfT1VUMiB8IFVBUlRfTUNSX0RUUiksCisJCS5vZmYgPSAoVUFSVF9NQ1JfUlRTIHwgVUFSVF9NQ1JfT1VUMiksCisJCS5zZW5kX3B1bHNlID0gc2VuZF9wdWxzZV9ob21lYnJldywKKwkJLnNlbmRfc3BhY2UgPSBzZW5kX3NwYWNlX2hvbWVicmV3LAorI2lmZGVmIENPTkZJR19MSVJDX1NFUklBTF9UUkFOU01JVFRFUgorCQkuZmVhdHVyZXMgICAgPSAoTElSQ19DQU5fU0VUX1NFTkRfRFVUWV9DWUNMRSB8CisJCQkJTElSQ19DQU5fU0VUX1NFTkRfQ0FSUklFUiB8CisJCQkJTElSQ19DQU5fU0VORF9QVUxTRSB8IExJUkNfQ0FOX1JFQ19NT0RFMikKKyNlbHNlCisJCS5mZWF0dXJlcyAgICA9IExJUkNfQ0FOX1JFQ19NT0RFMgorI2VuZGlmCisJfSwKKyNlbmRpZgorCit9OworCisjZGVmaW5lIFJTX0lTUl9QQVNTX0xJTUlUIDI1NgorCisvKgorICogQSBsb25nIHB1bHNlIGNvZGUgZnJvbSBhIHJlbW90ZSBtaWdodCB0YWtlIHVwIHRvIDMwMCBieXRlcy4gIFRoZQorICogZGFlbW9uIHNob3VsZCByZWFkIHRoZSBieXRlcyBhcyBzb29uIGFzIHRoZXkgYXJlIGdlbmVyYXRlZCwgc28gdGFrZQorICogdGhlIG51bWJlciBvZiBrZXlzIHlvdSB0aGluayB5b3UgY2FuIHB1c2ggYmVmb3JlIHRoZSBkYWVtb24gcnVucworICogYW5kIG11bHRpcGx5IGJ5IDMwMC4gIFRoZSBkcml2ZXIgd2lsbCB3YXJuIHlvdSBpZiB5b3Ugb3ZlcnJ1biB0aGlzCisgKiBidWZmZXIuICBJZiB5b3UgaGF2ZSBhIHNsb3cgY29tcHV0ZXIgb3Igbm9uLWJ1c21hc3RlcmluZyBJREUgZGlza3MsCisgKiBtYXliZSB5b3Ugd2lsbCBuZWVkIHRvIGluY3JlYXNlIHRoaXMuCisgKi8KKworLyogVGhpcyBNVVNUIGJlIGEgcG93ZXIgb2YgdHdvISAgSXQgaGFzIHRvIGJlIGxhcmdlciB0aGFuIDEgYXMgd2VsbC4gKi8KKworI2RlZmluZSBSQlVGX0xFTiAyNTYKKworc3RhdGljIHN0cnVjdCB0aW1ldmFsIGxhc3R0diA9IHswLCAwfTsKKworc3RhdGljIHN0cnVjdCBsaXJjX2J1ZmZlciByYnVmOworCitzdGF0aWMgdW5zaWduZWQgaW50IGZyZXEgPSAzODAwMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZHV0eV9jeWNsZSA9IDUwOworCisvKiBJbml0aWFsaXplZCBpbiBpbml0X3RpbWluZ19wYXJhbXMoKSAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGVyaW9kOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcHVsc2Vfd2lkdGg7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBzcGFjZV93aWR0aDsKKworI2lmIGRlZmluZWQoX19pMzg2X18pCisvKgorICogRnJvbToKKyAqIExpbnV4IEkvTyBwb3J0IHByb2dyYW1taW5nIG1pbmktSE9XVE8KKyAqIEF1dGhvcjogUmlrdSBTYWlra29uZW4gPFJpa3UuU2Fpa2tvbmVuQGh1dC5maT4KKyAqIHYsIDI4IERlY2VtYmVyIDE5OTcKKyAqCisgKiBbLi4uXQorICogQWN0dWFsbHksIGEgcG9ydCBJL08gaW5zdHJ1Y3Rpb24gb24gbW9zdCBwb3J0cyBpbiB0aGUgMC0weDNmZiByYW5nZQorICogdGFrZXMgYWxtb3N0IGV4YWN0bHkgMSBtaWNyb3NlY29uZCwgc28gaWYgeW91J3JlLCBmb3IgZXhhbXBsZSwgdXNpbmcKKyAqIHRoZSBwYXJhbGxlbCBwb3J0IGRpcmVjdGx5LCBqdXN0IGRvIGFkZGl0aW9uYWwgaW5iKClzIGZyb20gdGhhdCBwb3J0CisgKiB0byBkZWxheS4KKyAqIFsuLi5dCisgKi8KKy8qIHRyYW5zbWl0dGVyIGxhdGVuY3kgMS41NjI1dXMgMHgxLjkwIC0gdGhpcyBmaWd1cmUgYXJyaXZlZCBhdCBmcm9tCisgKiBjb21tZW50IGFib3ZlIHBsdXMgdHJpbW1pbmcgdG8gbWF0Y2ggYWN0dWFsIG1lYXN1cmVkIGZyZXF1ZW5jeS4KKyAqIFRoaXMgd2lsbCBiZSBzZW5zaXRpdmUgdG8gY3B1IHNwZWVkLCB0aG91Z2ggaG9wZWZ1bGx5IG1vc3Qgb2YgdGhlIDEuNXVzCisgKiBpcyBzcGVudCBpbiB0aGUgdWFydCBhY2Nlc3MuICBTdGlsbCAtIGZvciByZWZlcmVuY2UgdGVzdCBtYWNoaW5lIHdhcyBhCisgKiAxLjEzR0h6IEF0aGxvbiBzeXN0ZW0gLSBTdGV2ZQorICovCisKKy8qCisgKiBjaGFuZ2VkIGZyb20gNDAwIHRvIDQ1MCBhcyB0aGlzIHdvcmtzIGJldHRlciBvbiBzbG93ZXIgbWFjaGluZXM7CisgKiBmYXN0ZXIgbWFjaGluZXMgd2lsbCB1c2UgdGhlIHJkdHNjIGNvZGUgYW55d2F5CisgKi8KKyNkZWZpbmUgTElSQ19TRVJJQUxfVFJBTlNNSVRURVJfTEFURU5DWSA0NTAKKworI2Vsc2UKKworLyogZG9lcyBhbnlib2R5IGhhdmUgaW5mb3JtYXRpb24gb24gb3RoZXIgcGxhdGZvcm1zID8gKi8KKy8qIDI1NiA9IDE8PDggKi8KKyNkZWZpbmUgTElSQ19TRVJJQUxfVFJBTlNNSVRURVJfTEFURU5DWSAyNTYKKworI2VuZGlmICAvKiBfX2kzODZfXyAqLworLyoKKyAqIEZJWE1FOiBzaG91bGQgd2UgYmUgdXNpbmcgaHJ0aW1lcnMgaW5zdGVhZCBvZiB0aGlzCisgKiBMSVJDX1NFUklBTF9UUkFOU01JVFRFUl9MQVRFTkNZIG5vbnNlbnNlPworICovCisKKy8qIGZldGNoIHNlcmlhbCBpbnB1dCBwYWNrZXQgKDEgYnl0ZSkgZnJvbSByZWdpc3RlciBvZmZzZXQgKi8KK3N0YXRpYyB1OCBzaW5wKGludCBvZmZzZXQpCit7CisJaWYgKGlvbW1hcCAhPSAwKQorCQkvKiB0aGUgcmVnaXN0ZXIgaXMgbWVtb3J5LW1hcHBlZCAqLworCQlvZmZzZXQgPDw9IGlvc2hpZnQ7CisKKwlyZXR1cm4gaW5iKGlvICsgb2Zmc2V0KTsKK30KKworLyogd3JpdGUgc2VyaWFsIG91dHB1dCBwYWNrZXQgKDEgYnl0ZSkgb2YgdmFsdWUgdG8gcmVnaXN0ZXIgb2Zmc2V0ICovCitzdGF0aWMgdm9pZCBzb3V0cChpbnQgb2Zmc2V0LCB1OCB2YWx1ZSkKK3sKKwlpZiAoaW9tbWFwICE9IDApCisJCS8qIHRoZSByZWdpc3RlciBpcyBtZW1vcnktbWFwcGVkICovCisJCW9mZnNldCA8PD0gaW9zaGlmdDsKKworCW91dGIodmFsdWUsIGlvICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgb24odm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfTElSQ19TRVJJQUxfTlNMVTIKKwkvKgorCSAqIE9uIE5TTFUyLCB3ZSBwdXQgdGhlIHRyYW5zbWl0IGRpb2RlIGJldHdlZW4gdGhlIG91dHB1dCBvZiB0aGUgZ3JlZW4KKwkgKiBzdGF0dXMgTEVEIGFuZCBncm91bmQKKwkgKi8KKwlpZiAodHlwZSA9PSBMSVJDX05TTFUyKSB7CisJCWdwaW9fbGluZV9zZXQoTlNMVTJfTEVEX0dSTiwgSVhQNFhYX0dQSU9fTE9XKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCWlmICh0eHNlbnNlKQorCQlzb3V0cChVQVJUX01DUiwgaGFyZHdhcmVbdHlwZV0ub2ZmKTsKKwllbHNlCisJCXNvdXRwKFVBUlRfTUNSLCBoYXJkd2FyZVt0eXBlXS5vbik7Cit9CisKK3N0YXRpYyB2b2lkIG9mZih2b2lkKQoreworI2lmZGVmIENPTkZJR19MSVJDX1NFUklBTF9OU0xVMgorCWlmICh0eXBlID09IExJUkNfTlNMVTIpIHsKKwkJZ3Bpb19saW5lX3NldChOU0xVMl9MRURfR1JOLCBJWFA0WFhfR1BJT19ISUdIKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCWlmICh0eHNlbnNlKQorCQlzb3V0cChVQVJUX01DUiwgaGFyZHdhcmVbdHlwZV0ub24pOworCWVsc2UKKwkJc291dHAoVUFSVF9NQ1IsIGhhcmR3YXJlW3R5cGVdLm9mZik7Cit9CisKKyNpZm5kZWYgTUFYX1VERUxBWV9NUworI2RlZmluZSBNQVhfVURFTEFZX1VTIDUwMDAKKyNlbHNlCisjZGVmaW5lIE1BWF9VREVMQVlfVVMgKE1BWF9VREVMQVlfTVMqMTAwMCkKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBzYWZlX3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKQoreworCXdoaWxlICh1c2VjcyA+IE1BWF9VREVMQVlfVVMpIHsKKwkJdWRlbGF5KE1BWF9VREVMQVlfVVMpOworCQl1c2VjcyAtPSBNQVhfVURFTEFZX1VTOworCX0KKwl1ZGVsYXkodXNlY3MpOworfQorCisjaWZkZWYgVVNFX1JEVFNDCisvKgorICogVGhpcyBpcyBhbiBvdmVyZmxvdy9wcmVjaXNpb24ganVnZ2xlLCBjb21wbGljYXRlZCBpbiB0aGF0IHdlIGNhbid0CisgKiBkbyBsb25nIGxvbmcgZGl2aWRlIGluIHRoZSBrZXJuZWwKKyAqLworCisvKgorICogV2hlbiB3ZSB1c2UgdGhlIHJkdHNjIGluc3RydWN0aW9uIHRvIG1lYXN1cmUgY2xvY2tzLCB3ZSBrZWVwIHRoZQorICogcHVsc2UgYW5kIHNwYWNlIHdpZHRocyBhcyBjbG9jayBjeWNsZXMuICBBcyB0aGlzIGlzIENQVSBzcGVlZAorICogZGVwZW5kZW50LCB0aGUgd2lkdGhzIG11c3QgYmUgY2FsY3VsYXRlZCBpbiBpbml0X3BvcnQgYW5kIGlvY3RsCisgKiB0aW1lCisgKi8KKworLyogU28gc2VuZF9wdWxzZSBjYW4gcXVpY2tseSBjb252ZXJ0IG1pY3Jvc2Vjb25kcyB0byBjbG9ja3MgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNvbnZfdXNfdG9fY2xvY2tzOworCitzdGF0aWMgaW50IGluaXRfdGltaW5nX3BhcmFtcyh1bnNpZ25lZCBpbnQgbmV3X2R1dHlfY3ljbGUsCisJCXVuc2lnbmVkIGludCBuZXdfZnJlcSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgbG9vcHNfcGVyX3NlYywgd29yazsKKworCWR1dHlfY3ljbGUgPSBuZXdfZHV0eV9jeWNsZTsKKwlmcmVxID0gbmV3X2ZyZXE7CisKKwlsb29wc19wZXJfc2VjID0gY3VycmVudF9jcHVfZGF0YS5sb29wc19wZXJfamlmZnk7CisJbG9vcHNfcGVyX3NlYyAqPSBIWjsKKworCS8qIEhvdyBtYW55IGNsb2NrcyBpbiBhIG1pY3Jvc2Vjb25kPywgYXZvaWRpbmcgbG9uZyBsb25nIGRpdmlkZSAqLworCXdvcmsgPSBsb29wc19wZXJfc2VjOworCXdvcmsgKj0gNDI5NTsgIC8qIDQyOTUgPSAyXjMyIC8gMWU2ICovCisJY29udl91c190b19jbG9ja3MgPSAod29yayA+PiAzMik7CisKKwkvKgorCSAqIENhcnJpZXIgcGVyaW9kIGluIGNsb2NrcywgYXBwcm9hY2ggZ29vZCB1cCB0byAzMkdIeiBjbG9jaywKKwkgKiBnZXRzIGNhcnJpZXIgZnJlcXVlbmN5IHdpdGhpbiA4SHoKKwkgKi8KKwlwZXJpb2QgPSBsb29wc19wZXJfc2VjID4+IDM7CisJcGVyaW9kIC89IChmcmVxID4+IDMpOworCisJLyogRGVyaXZlIHB1bHNlIGFuZCBzcGFjZSBmcm9tIHRoZSBwZXJpb2QgKi8KKwlwdWxzZV93aWR0aCA9IHBlcmlvZCAqIGR1dHlfY3ljbGUgLyAxMDA7CisJc3BhY2Vfd2lkdGggPSBwZXJpb2QgLSBwdWxzZV93aWR0aDsKKwlkcHJpbnRrKCJpbiBpbml0X3RpbWluZ19wYXJhbXMsIGZyZXE9JWQsIGR1dHlfY3ljbGU9JWQsICIKKwkJImNsay9qaWZmeT0lbGQsIHB1bHNlPSVsZCwgc3BhY2U9JWxkLCAiCisJCSJjb252X3VzX3RvX2Nsb2Nrcz0lbGRcbiIsCisJCWZyZXEsIGR1dHlfY3ljbGUsIGN1cnJlbnRfY3B1X2RhdGEubG9vcHNfcGVyX2ppZmZ5LAorCQlwdWxzZV93aWR0aCwgc3BhY2Vfd2lkdGgsIGNvbnZfdXNfdG9fY2xvY2tzKTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlIC8qICEgVVNFX1JEVFNDICovCitzdGF0aWMgaW50IGluaXRfdGltaW5nX3BhcmFtcyh1bnNpZ25lZCBpbnQgbmV3X2R1dHlfY3ljbGUsCisJCXVuc2lnbmVkIGludCBuZXdfZnJlcSkKK3sKKy8qCisgKiBwZXJpb2QsIHB1bHNlL3NwYWNlIHdpZHRoIGFyZSBrZXB0IHdpdGggOCBiaW5hcnkgcGxhY2VzIC0KKyAqIElFIG11bHRpcGxpZWQgYnkgMjU2LgorICovCisJaWYgKDI1NiAqIDEwMDAwMDBMIC8gbmV3X2ZyZXEgKiBuZXdfZHV0eV9jeWNsZSAvIDEwMCA8PQorCSAgICBMSVJDX1NFUklBTF9UUkFOU01JVFRFUl9MQVRFTkNZKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoMjU2ICogMTAwMDAwMEwgLyBuZXdfZnJlcSAqICgxMDAgLSBuZXdfZHV0eV9jeWNsZSkgLyAxMDAgPD0KKwkgICAgTElSQ19TRVJJQUxfVFJBTlNNSVRURVJfTEFURU5DWSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZHV0eV9jeWNsZSA9IG5ld19kdXR5X2N5Y2xlOworCWZyZXEgPSBuZXdfZnJlcTsKKwlwZXJpb2QgPSAyNTYgKiAxMDAwMDAwTCAvIGZyZXE7CisJcHVsc2Vfd2lkdGggPSBwZXJpb2QgKiBkdXR5X2N5Y2xlIC8gMTAwOworCXNwYWNlX3dpZHRoID0gcGVyaW9kIC0gcHVsc2Vfd2lkdGg7CisJZHByaW50aygiaW4gaW5pdF90aW1pbmdfcGFyYW1zLCBmcmVxPSVkIHB1bHNlPSVsZCwgIgorCQkic3BhY2U9JWxkXG4iLCBmcmVxLCBwdWxzZV93aWR0aCwgc3BhY2Vfd2lkdGgpOworCXJldHVybiAwOworfQorI2VuZGlmIC8qIFVTRV9SRFRTQyAqLworCisKKy8qIHJldHVybiB2YWx1ZTogc3BhY2UgbGVuZ3RoIGRlbHRhICovCisKK3N0YXRpYyBsb25nIHNlbmRfcHVsc2VfaXJkZW8odW5zaWduZWQgbG9uZyBsZW5ndGgpCit7CisJbG9uZyByYXdiaXRzLCByZXQ7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciBvdXRwdXQ7CisJdW5zaWduZWQgY2hhciBjaHVuaywgc2hpZnRlZDsKKworCS8qIGhvdyBtYW55IGJpdHMgaGF2ZSB0byBiZSBzZW50ID8gKi8KKwlyYXdiaXRzID0gbGVuZ3RoICogMTE1MiAvIDEwMDAwOworCWlmIChkdXR5X2N5Y2xlID4gNTApCisJCWNodW5rID0gMzsKKwllbHNlCisJCWNodW5rID0gMTsKKwlmb3IgKGkgPSAwLCBvdXRwdXQgPSAweDdmOyByYXdiaXRzID4gMDsgcmF3Yml0cyAtPSAzKSB7CisJCXNoaWZ0ZWQgPSBjaHVuayA8PCAoaSAqIDMpOworCQlzaGlmdGVkID4+PSAxOworCQlvdXRwdXQgJj0gKH5zaGlmdGVkKTsKKwkJaSsrOworCQlpZiAoaSA9PSAzKSB7CisJCQlzb3V0cChVQVJUX1RYLCBvdXRwdXQpOworCQkJd2hpbGUgKCEoc2lucChVQVJUX0xTUikgJiBVQVJUX0xTUl9USFJFKSkKKwkJCQk7CisJCQlvdXRwdXQgPSAweDdmOworCQkJaSA9IDA7CisJCX0KKwl9CisJaWYgKGkgIT0gMCkgeworCQlzb3V0cChVQVJUX1RYLCBvdXRwdXQpOworCQl3aGlsZSAoIShzaW5wKFVBUlRfTFNSKSAmIFVBUlRfTFNSX1RFTVQpKQorCQkJOworCX0KKworCWlmIChpID09IDApCisJCXJldCA9ICgtcmF3Yml0cykgKiAxMDAwMCAvIDExNTI7CisJZWxzZQorCQlyZXQgPSAoMyAtIGkpICogMyAqIDEwMDAwIC8gMTE1MiArICgtcmF3Yml0cykgKiAxMDAwMCAvIDExNTI7CisKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgVVNFX1JEVFNDCisvKiBWZXJzaW9uIHRoYXQgdXNlcyBQZW50aXVtIHJkdHNjIGluc3RydWN0aW9uIHRvIG1lYXN1cmUgY2xvY2tzICovCisKKy8qCisgKiBUaGlzIHZlcnNpb24gZG9lcyBzdWItbWljcm9zZWNvbmQgdGltaW5nIHVzaW5nIHJkdHNjIGluc3RydWN0aW9uLAorICogYW5kIGRvZXMgYXdheSB3aXRoIHRoZSBmdWRnZWQgTElSQ19TRVJJQUxfVFJBTlNNSVRURVJfTEFURU5DWQorICogSW1wbGljaXRseSBpNTg2IGFyY2hpdGVjdHVyZS4uLiAgLSBTdGV2ZQorICovCisKK3N0YXRpYyBsb25nIHNlbmRfcHVsc2VfaG9tZWJyZXdfc29mdGNhcnJpZXIodW5zaWduZWQgbG9uZyBsZW5ndGgpCit7CisJaW50IGZsYWc7CisJdW5zaWduZWQgbG9uZyB0YXJnZXQsIHN0YXJ0LCBub3c7CisKKwkvKiBHZXQgZ29pbmcgcXVpY2sgYXMgd2UgY2FuICovCisJcmR0c2NsKHN0YXJ0KTsKKwlvbigpOworCS8qIENvbnZlcnQgbGVuZ3RoIGZyb20gbWljcm9zZWNvbmRzIHRvIGNsb2NrcyAqLworCWxlbmd0aCAqPSBjb252X3VzX3RvX2Nsb2NrczsKKwkvKiBBbmQgbG9vcCB0aWxsIHRpbWUgaXMgdXAgLSBmbGlwcGluZyBhdCByaWdodCBpbnRlcnZhbHMgKi8KKwlub3cgPSBzdGFydDsKKwl0YXJnZXQgPSBwdWxzZV93aWR0aDsKKwlmbGFnID0gMTsKKwkvKgorCSAqIEZJWE1FOiBUaGlzIGxvb2tzIGxpa2UgYSBoYXJkIGJ1c3kgd2FpdCwgd2l0aG91dCBldmVuIGFuIG9jY2FzaW9uYWwsCisJICogcG9saXRlLCBjcHVfcmVsYXgoKSBjYWxsLiAgVGhlcmUncyBnb3QgdG8gYmUgYSBiZXR0ZXIgd2F5PworCSAqCisJICogVGhlIGkyYyBjb2RlIGhhcyB0aGUgcmVzdWx0IG9mIGEgbG90IG9mIGJpdC1iYW5naW5nIHdvcmssIEkgd29uZGVyIGlmCisJICogdGhlcmUncyBzb21ldGhpbmcgdGhlcmUgd2hpY2ggY291bGQgYmUgaGVscGZ1bCBoZXJlLgorCSAqLworCXdoaWxlICgobm93IC0gc3RhcnQpIDwgbGVuZ3RoKSB7CisJCS8qIERlbGF5IHRpbGwgZmxpcCB0aW1lICovCisJCWRvIHsKKwkJCXJkdHNjbChub3cpOworCQl9IHdoaWxlICgobm93IC0gc3RhcnQpIDwgdGFyZ2V0KTsKKworCQkvKiBmbGlwICovCisJCWlmIChmbGFnKSB7CisJCQlyZHRzY2wobm93KTsKKwkJCW9mZigpOworCQkJdGFyZ2V0ICs9IHNwYWNlX3dpZHRoOworCQl9IGVsc2UgeworCQkJcmR0c2NsKG5vdyk7IG9uKCk7CisJCQl0YXJnZXQgKz0gcHVsc2Vfd2lkdGg7CisJCX0KKwkJZmxhZyA9ICFmbGFnOworCX0KKwlyZHRzY2wobm93KTsKKwlyZXR1cm4gKChub3cgLSBzdGFydCkgLSBsZW5ndGgpIC8gY29udl91c190b19jbG9ja3M7Cit9CisjZWxzZSAvKiAhIFVTRV9SRFRTQyAqLworLyogVmVyc2lvbiB1c2luZyB1ZGVsYXkoKSAqLworCisvKgorICogaGVyZSB3ZSB1c2UgZml4ZWQgcG9pbnQgYXJpdGhtZXRpYywgd2l0aCA4CisgKiBmcmFjdGlvbmFsIGJpdHMuICB0aGF0IGdldHMgdXMgd2l0aGluIDAuMSUgb3Igc28gb2YgdGhlIHJpZ2h0IGF2ZXJhZ2UKKyAqIGZyZXF1ZW5jeSwgYWxiZWl0IHdpdGggc29tZSBqaXR0ZXIgaW4gcHVsc2UgbGVuZ3RoIC0gU3RldmUKKyAqLworCisvKiBUbyBtYXRjaCA4IGZyYWN0aW9uYWwgYml0cyB1c2VkIGZvciBwdWxzZS9zcGFjZSBsZW5ndGggKi8KKworc3RhdGljIGxvbmcgc2VuZF9wdWxzZV9ob21lYnJld19zb2Z0Y2Fycmllcih1bnNpZ25lZCBsb25nIGxlbmd0aCkKK3sKKwlpbnQgZmxhZzsKKwl1bnNpZ25lZCBsb25nIGFjdHVhbCwgdGFyZ2V0LCBkOworCWxlbmd0aCA8PD0gODsKKworCWFjdHVhbCA9IDA7IHRhcmdldCA9IDA7IGZsYWcgPSAwOworCXdoaWxlIChhY3R1YWwgPCBsZW5ndGgpIHsKKwkJaWYgKGZsYWcpIHsKKwkJCW9mZigpOworCQkJdGFyZ2V0ICs9IHNwYWNlX3dpZHRoOworCQl9IGVsc2UgeworCQkJb24oKTsKKwkJCXRhcmdldCArPSBwdWxzZV93aWR0aDsKKwkJfQorCQlkID0gKHRhcmdldCAtIGFjdHVhbCAtCisJCSAgICAgTElSQ19TRVJJQUxfVFJBTlNNSVRURVJfTEFURU5DWSArIDEyOCkgPj4gODsKKwkJLyoKKwkJICogTm90ZSAtIHdlJ3ZlIGNoZWNrZWQgaW4gaW9jdGwgdGhhdCB0aGUgcHVsc2Uvc3BhY2UKKwkJICogd2lkdGhzIGFyZSBiaWcgZW5vdWdoIHNvIHRoYXQgZCBpcyA+IDAKKwkJICovCisJCXVkZWxheShkKTsKKwkJYWN0dWFsICs9IChkIDw8IDgpICsgTElSQ19TRVJJQUxfVFJBTlNNSVRURVJfTEFURU5DWTsKKwkJZmxhZyA9ICFmbGFnOworCX0KKwlyZXR1cm4gKGFjdHVhbC1sZW5ndGgpID4+IDg7Cit9CisjZW5kaWYgLyogVVNFX1JEVFNDICovCisKK3N0YXRpYyBsb25nIHNlbmRfcHVsc2VfaG9tZWJyZXcodW5zaWduZWQgbG9uZyBsZW5ndGgpCit7CisJaWYgKGxlbmd0aCA8PSAwKQorCQlyZXR1cm4gMDsKKworCWlmIChzb2Z0Y2FycmllcikKKwkJcmV0dXJuIHNlbmRfcHVsc2VfaG9tZWJyZXdfc29mdGNhcnJpZXIobGVuZ3RoKTsKKwllbHNlIHsKKwkJb24oKTsKKwkJc2FmZV91ZGVsYXkobGVuZ3RoKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZW5kX3NwYWNlX2lyZGVvKGxvbmcgbGVuZ3RoKQoreworCWlmIChsZW5ndGggPD0gMCkKKwkJcmV0dXJuOworCisJc2FmZV91ZGVsYXkobGVuZ3RoKTsKK30KKworc3RhdGljIHZvaWQgc2VuZF9zcGFjZV9ob21lYnJldyhsb25nIGxlbmd0aCkKK3sKKwlvZmYoKTsKKwlpZiAobGVuZ3RoIDw9IDApCisJCXJldHVybjsKKwlzYWZlX3VkZWxheShsZW5ndGgpOworfQorCitzdGF0aWMgdm9pZCByYndyaXRlKGludCBsKQoreworCWlmIChsaXJjX2J1ZmZlcl9mdWxsKCZyYnVmKSkgeworCQkvKiBubyBuZXcgc2lnbmFscyB3aWxsIGJlIGFjY2VwdGVkICovCisJCWRwcmludGsoIkJ1ZmZlciBvdmVycnVuXG4iKTsKKwkJcmV0dXJuOworCX0KKwlsaXJjX2J1ZmZlcl93cml0ZSgmcmJ1ZiwgKHZvaWQgKikmbCk7Cit9CisKK3N0YXRpYyB2b2lkIGZyYndyaXRlKGludCBsKQoreworCS8qIHNpbXBsZSBub2lzZSBmaWx0ZXIgKi8KKwlzdGF0aWMgaW50IHB1bHNlLCBzcGFjZTsKKwlzdGF0aWMgdW5zaWduZWQgaW50IHB0cjsKKworCWlmIChwdHIgPiAwICYmIChsICYgUFVMU0VfQklUKSkgeworCQlwdWxzZSArPSBsICYgUFVMU0VfTUFTSzsKKwkJaWYgKHB1bHNlID4gMjUwKSB7CisJCQlyYndyaXRlKHNwYWNlKTsKKwkJCXJid3JpdGUocHVsc2UgfCBQVUxTRV9CSVQpOworCQkJcHRyID0gMDsKKwkJCXB1bHNlID0gMDsKKwkJfQorCQlyZXR1cm47CisJfQorCWlmICghKGwgJiBQVUxTRV9CSVQpKSB7CisJCWlmIChwdHIgPT0gMCkgeworCQkJaWYgKGwgPiAyMDAwMCkgeworCQkJCXNwYWNlID0gbDsKKwkJCQlwdHIrKzsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAobCA+IDIwMDAwKSB7CisJCQkJc3BhY2UgKz0gcHVsc2U7CisJCQkJaWYgKHNwYWNlID4gUFVMU0VfTUFTSykKKwkJCQkJc3BhY2UgPSBQVUxTRV9NQVNLOworCQkJCXNwYWNlICs9IGw7CisJCQkJaWYgKHNwYWNlID4gUFVMU0VfTUFTSykKKwkJCQkJc3BhY2UgPSBQVUxTRV9NQVNLOworCQkJCXB1bHNlID0gMDsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlyYndyaXRlKHNwYWNlKTsKKwkJCXJid3JpdGUocHVsc2UgfCBQVUxTRV9CSVQpOworCQkJcHRyID0gMDsKKwkJCXB1bHNlID0gMDsKKwkJfQorCX0KKwlyYndyaXRlKGwpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaXJxX2hhbmRsZXIoaW50IGksIHZvaWQgKmJsYWgpCit7CisJc3RydWN0IHRpbWV2YWwgdHY7CisJaW50IGNvdW50ZXIsIGRjZDsKKwl1OCBzdGF0dXM7CisJbG9uZyBkZWx0djsKKwlpbnQgZGF0YTsKKwlzdGF0aWMgaW50IGxhc3RfZGNkID0gLTE7CisKKwlpZiAoKHNpbnAoVUFSVF9JSVIpICYgVUFSVF9JSVJfTk9fSU5UKSkgeworCQkvKiBub3Qgb3VyIGludGVycnVwdCAqLworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJY291bnRlciA9IDA7CisJZG8geworCQljb3VudGVyKys7CisJCXN0YXR1cyA9IHNpbnAoVUFSVF9NU1IpOworCQlpZiAoY291bnRlciA+IFJTX0lTUl9QQVNTX0xJTUlUKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIExJUkNfRFJJVkVSX05BTUUgIjogQUlFRUVFOiAiCisJCQkgICAgICAgIldlJ3JlIGNhdWdodCFcbiIpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKChzdGF0dXMgJiBoYXJkd2FyZVt0eXBlXS5zaWduYWxfcGluX2NoYW5nZSkKKwkJICAgICYmIHNlbnNlICE9IC0xKSB7CisJCQkvKiBnZXQgY3VycmVudCB0aW1lICovCisJCQlkb19nZXR0aW1lb2ZkYXkoJnR2KTsKKworCQkJLyogTmV3IG1vZGUsIHdyaXR0ZW4gYnkgVHJlbnQgUGllcGhvCisJCQkgICA8eHl6enlAdS53YXNoaW5ndG9uLmVkdT4uICovCisKKwkJCS8qCisJCQkgKiBUaGUgb2xkIGZvcm1hdCB3YXMgbm90IHZlcnkgcG9ydGFibGUuCisJCQkgKiBXZSBub3cgdXNlIGFuIGludCB0byBwYXNzIHB1bHNlcworCQkJICogYW5kIHNwYWNlcyB0byB1c2VyIHNwYWNlLgorCQkJICoKKwkJCSAqIElmIFBVTFNFX0JJVCBpcyBzZXQgYSBwdWxzZSBoYXMgYmVlbgorCQkJICogcmVjZWl2ZWQsIG90aGVyd2lzZSBhIHNwYWNlIGhhcyBiZWVuCisJCQkgKiByZWNlaXZlZC4gIFRoZSBkcml2ZXIgbmVlZHMgdG8ga25vdyBpZiB5b3VyCisJCQkgKiByZWNlaXZlciBpcyBhY3RpdmUgaGlnaCBvciBhY3RpdmUgbG93LCBvcgorCQkJICogdGhlIHNwYWNlL3B1bHNlIHNlbnNlIGNvdWxkIGJlCisJCQkgKiBpbnZlcnRlZC4gVGhlIGJpdHMgZGVub3RlZCBieSBQVUxTRV9NQVNLIGFyZQorCQkJICogdGhlIGxlbmd0aCBpbiBtaWNyb3NlY29uZHMuIExlbmd0aHMgZ3JlYXRlcgorCQkJICogdGhhbiBvciBlcXVhbCB0byAxNiBzZWNvbmRzIGFyZSBjbGFtcGVkIHRvCisJCQkgKiBQVUxTRV9NQVNLLiAgQWxsIG90aGVyIGJpdHMgYXJlIHVudXNlZC4KKwkJCSAqIFRoaXMgaXMgYSBtdWNoIHNpbXBsZXIgaW50ZXJmYWNlIGZvciB1c2VyCisJCQkgKiBwcm9ncmFtcywgYXMgd2VsbCBhcyBlbGltaW5hdGluZyAib3V0IG9mCisJCQkgKiBwaGFzZSIgZXJyb3JzIHdpdGggc3BhY2UvcHVsc2UKKwkJCSAqIGF1dG9kZXRlY3Rpb24uCisJCQkgKi8KKworCQkJLyogY2FsYyB0aW1lIHNpbmNlIGxhc3QgaW50ZXJydXB0IGluIG1pY3Jvc2Vjb25kcyAqLworCQkJZGNkID0gKHN0YXR1cyAmIGhhcmR3YXJlW3R5cGVdLnNpZ25hbF9waW4pID8gMSA6IDA7CisKKwkJCWlmIChkY2QgPT0gbGFzdF9kY2QpIHsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HIExJUkNfRFJJVkVSX05BTUUKKwkJCQkiOiBpZ25vcmluZyBzcGlrZTogJWQgJWQgJWx4ICVseCAlbHggJWx4XG4iLAorCQkJCWRjZCwgc2Vuc2UsCisJCQkJdHYudHZfc2VjLCBsYXN0dHYudHZfc2VjLAorCQkJCXR2LnR2X3VzZWMsIGxhc3R0di50dl91c2VjKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJZGVsdHYgPSB0di50dl9zZWMtbGFzdHR2LnR2X3NlYzsKKwkJCWlmICh0di50dl9zZWMgPCBsYXN0dHYudHZfc2VjIHx8CisJCQkgICAgKHR2LnR2X3NlYyA9PSBsYXN0dHYudHZfc2VjICYmCisJCQkgICAgIHR2LnR2X3VzZWMgPCBsYXN0dHYudHZfdXNlYykpIHsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HIExJUkNfRFJJVkVSX05BTUUKKwkJCQkgICAgICAgIjogQUlFRUVFOiB5b3VyIGNsb2NrIGp1c3QganVtcGVkICIKKwkJCQkgICAgICAgImJhY2t3YXJkc1xuIik7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyBMSVJDX0RSSVZFUl9OQU1FCisJCQkJICAgICAgICI6ICVkICVkICVseCAlbHggJWx4ICVseFxuIiwKKwkJCQkgICAgICAgZGNkLCBzZW5zZSwKKwkJCQkgICAgICAgdHYudHZfc2VjLCBsYXN0dHYudHZfc2VjLAorCQkJCSAgICAgICB0di50dl91c2VjLCBsYXN0dHYudHZfdXNlYyk7CisJCQkJZGF0YSA9IFBVTFNFX01BU0s7CisJCQl9IGVsc2UgaWYgKGRlbHR2ID4gMTUpIHsKKwkJCQlkYXRhID0gUFVMU0VfTUFTSzsgLyogcmVhbGx5IGxvbmcgdGltZSAqLworCQkJCWlmICghKGRjZF5zZW5zZSkpIHsKKwkJCQkJLyogc2FuaXR5IGNoZWNrICovCisJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgTElSQ19EUklWRVJfTkFNRQorCQkJCQkgICAgICAgIjogQUlFRUVFOiAiCisJCQkJCSAgICAgICAiJWQgJWQgJWx4ICVseCAlbHggJWx4XG4iLAorCQkJCQkgICAgICAgZGNkLCBzZW5zZSwKKwkJCQkJICAgICAgIHR2LnR2X3NlYywgbGFzdHR2LnR2X3NlYywKKwkJCQkJICAgICAgIHR2LnR2X3VzZWMsIGxhc3R0di50dl91c2VjKTsKKwkJCQkJLyoKKwkJCQkJICogZGV0ZWN0aW5nIHB1bHNlIHdoaWxlIHRoaXMKKwkJCQkJICogTVVTVCBiZSBhIHNwYWNlIQorCQkJCQkgKi8KKwkJCQkJc2Vuc2UgPSBzZW5zZSA/IDAgOiAxOworCQkJCX0KKwkJCX0gZWxzZQorCQkJCWRhdGEgPSAoaW50KSAoZGVsdHYqMTAwMDAwMCArCisJCQkJCSAgICAgICB0di50dl91c2VjIC0KKwkJCQkJICAgICAgIGxhc3R0di50dl91c2VjKTsKKwkJCWZyYndyaXRlKGRjZF5zZW5zZSA/IGRhdGEgOiAoZGF0YXxQVUxTRV9CSVQpKTsKKwkJCWxhc3R0diA9IHR2OworCQkJbGFzdF9kY2QgPSBkY2Q7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnJidWYud2FpdF9wb2xsKTsKKwkJfQorCX0gd2hpbGUgKCEoc2lucChVQVJUX0lJUikgJiBVQVJUX0lJUl9OT19JTlQpKTsgLyogc3RpbGwgcGVuZGluZyA/ICovCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisKK3N0YXRpYyBpbnQgaGFyZHdhcmVfaW5pdF9wb3J0KHZvaWQpCit7CisJdTggc2NyYXRjaCwgc2NyYXRjaDIsIHNjcmF0Y2gzOworCisJLyoKKwkgKiBUaGlzIGlzIGEgc2ltcGxlIHBvcnQgZXhpc3RlbmNlIHRlc3QsIGJvcnJvd2VkIGZyb20gdGhlIGF1dG9jb25maWcKKwkgKiBmdW5jdGlvbiBpbiBkcml2ZXJzL3NlcmlhbC84MjUwLmMKKwkgKi8KKwlzY3JhdGNoID0gc2lucChVQVJUX0lFUik7CisJc291dHAoVUFSVF9JRVIsIDApOworI2lmZGVmIF9faTM4Nl9fCisJb3V0YigweGZmLCAweDA4MCk7CisjZW5kaWYKKwlzY3JhdGNoMiA9IHNpbnAoVUFSVF9JRVIpICYgMHgwZjsKKwlzb3V0cChVQVJUX0lFUiwgMHgwZik7CisjaWZkZWYgX19pMzg2X18KKwlvdXRiKDB4MDAsIDB4MDgwKTsKKyNlbmRpZgorCXNjcmF0Y2gzID0gc2lucChVQVJUX0lFUikgJiAweDBmOworCXNvdXRwKFVBUlRfSUVSLCBzY3JhdGNoKTsKKwlpZiAoc2NyYXRjaDIgIT0gMCB8fCBzY3JhdGNoMyAhPSAweDBmKSB7CisJCS8qIHdlIGZhaWwsIHRoZXJlJ3Mgbm90aGluZyBoZXJlICovCisJCXByaW50ayhLRVJOX0VSUiBMSVJDX0RSSVZFUl9OQU1FICI6IHBvcnQgZXhpc3RlbmNlIHRlc3QgIgorCQkgICAgICAgImZhaWxlZCwgY2Fubm90IGNvbnRpbnVlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisKKworCS8qIFNldCBETEFCIDAuICovCisJc291dHAoVUFSVF9MQ1IsIHNpbnAoVUFSVF9MQ1IpICYgKH5VQVJUX0xDUl9ETEFCKSk7CisKKwkvKiBGaXJzdCBvZiBhbGwsIGRpc2FibGUgYWxsIGludGVycnVwdHMgKi8KKwlzb3V0cChVQVJUX0lFUiwgc2lucChVQVJUX0lFUikgJgorCSAgICAgICh+KFVBUlRfSUVSX01TSXxVQVJUX0lFUl9STFNJfFVBUlRfSUVSX1RIUkl8VUFSVF9JRVJfUkRJKSkpOworCisJLyogQ2xlYXIgcmVnaXN0ZXJzLiAqLworCXNpbnAoVUFSVF9MU1IpOworCXNpbnAoVUFSVF9SWCk7CisJc2lucChVQVJUX0lJUik7CisJc2lucChVQVJUX01TUik7CisKKyNpZmRlZiBDT05GSUdfTElSQ19TRVJJQUxfTlNMVTIKKwlpZiAodHlwZSA9PSBMSVJDX05TTFUyKSB7CisJCS8qIFNldHVwIE5TTFUyIFVBUlQgKi8KKworCQkvKiBFbmFibGUgVUFSVCAqLworCQlzb3V0cChVQVJUX0lFUiwgc2lucChVQVJUX0lFUikgfCBVQVJUX0lFX0lYUDQyWF9VVUUpOworCQkvKiBEaXNhYmxlIFJlY2VpdmVyIGRhdGEgVGltZSBvdXQgaW50ZXJydXB0ICovCisJCXNvdXRwKFVBUlRfSUVSLCBzaW5wKFVBUlRfSUVSKSAmIH5VQVJUX0lFX0lYUDQyWF9SVE9JRSk7CisJCS8qIHNldCBvdXQyID0gaW50ZXJydXB0IHVubWFzazsgb2ZmKCkgZG9lc24ndCBzZXQgTUNSCisJCSAgIG9uIE5TTFUyICovCisJCXNvdXRwKFVBUlRfTUNSLCBVQVJUX01DUl9SVFN8VUFSVF9NQ1JfT1VUMik7CisJfQorI2VuZGlmCisKKwkvKiBTZXQgbGluZSBmb3IgcG93ZXIgc291cmNlICovCisJb2ZmKCk7CisKKwkvKiBDbGVhciByZWdpc3RlcnMgYWdhaW4gdG8gYmUgc3VyZS4gKi8KKwlzaW5wKFVBUlRfTFNSKTsKKwlzaW5wKFVBUlRfUlgpOworCXNpbnAoVUFSVF9JSVIpOworCXNpbnAoVUFSVF9NU1IpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBMSVJDX0lSREVPOgorCWNhc2UgTElSQ19JUkRFT19SRU1PVEU6CisJCS8qIHNldHVwIHBvcnQgdG8gN04xIEAgMTE1MjAwIEJhdWQgKi8KKwkJLyogN04xK3N0YXJ0ID0gOSBiaXRzIGF0IDExNTIwMCB+IDMgYml0cyBhdCAzOGtIeiAqLworCisJCS8qIFNldCBETEFCIDEuICovCisJCXNvdXRwKFVBUlRfTENSLCBzaW5wKFVBUlRfTENSKSB8IFVBUlRfTENSX0RMQUIpOworCQkvKiBTZXQgZGl2aXNvciB0byAxID0+IDExNTIwMCBCYXVkICovCisJCXNvdXRwKFVBUlRfRExNLCAwKTsKKwkJc291dHAoVUFSVF9ETEwsIDEpOworCQkvKiBTZXQgRExBQiAwICsgIDdOMSAqLworCQlzb3V0cChVQVJUX0xDUiwgVUFSVF9MQ1JfV0xFTjcpOworCQkvKiBUSFIgaW50ZXJydXB0IGFscmVhZHkgZGlzYWJsZWQgYXQgdGhpcyBwb2ludCAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbml0X3BvcnQodm9pZCkKK3sKKwlpbnQgaSwgbmxvdywgbmhpZ2g7CisKKwkvKiBSZXNlcnZlIGlvIHJlZ2lvbi4gKi8KKwkvKgorCSAqIEZ1dHVyZSBNTUFQLURldmVsb3BlcnM6IEF0dGVudGlvbiEKKwkgKiBGb3IgbWVtb3J5IG1hcHBlZCBJL08geW91ICptaWdodCogbmVlZCB0byB1c2UgaW9yZW1hcCgpIGZpcnN0LAorCSAqIGZvciB0aGUgTlNMVTIgaXQncyBkb25lIGluIGJvb3QgY29kZS4KKwkgKi8KKwlpZiAoKChpb21tYXAgIT0gMCkKKwkgICAgICYmIChyZXF1ZXN0X21lbV9yZWdpb24oaW9tbWFwLCA4IDw8IGlvc2hpZnQsCisJCQkJICAgIExJUkNfRFJJVkVSX05BTUUpID09IE5VTEwpKQorCSAgIHx8ICgoaW9tbWFwID09IDApCisJICAgICAgICYmIChyZXF1ZXN0X3JlZ2lvbihpbywgOCwgTElSQ19EUklWRVJfTkFNRSkgPT0gTlVMTCkpKSB7CisJCXByaW50ayhLRVJOX0VSUiAgTElSQ19EUklWRVJfTkFNRQorCQkgICAgICAgIjogcG9ydCAlMDR4IGFscmVhZHkgaW4gdXNlXG4iLCBpbyk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgTElSQ19EUklWRVJfTkFNRQorCQkgICAgICAgIjogdXNlICdzZXRzZXJpYWwgL2Rldi90dHlTWCB1YXJ0IG5vbmUnXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBMSVJDX0RSSVZFUl9OQU1FCisJCSAgICAgICAiOiBvciBjb21waWxlIHRoZSBzZXJpYWwgcG9ydCBkcml2ZXIgYXMgbW9kdWxlIGFuZFxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgTElSQ19EUklWRVJfTkFNRQorCQkgICAgICAgIjogbWFrZSBzdXJlIHRoaXMgbW9kdWxlIGlzIGxvYWRlZCBmaXJzdFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKGhhcmR3YXJlX2luaXRfcG9ydCgpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBJbml0aWFsaXplIHB1bHNlL3NwYWNlIHdpZHRocyAqLworCWluaXRfdGltaW5nX3BhcmFtcyhkdXR5X2N5Y2xlLCBmcmVxKTsKKworCS8qIElmIHBpbiBpcyBoaWdoLCB0aGVuIHRoaXMgbXVzdCBiZSBhbiBhY3RpdmUgbG93IHJlY2VpdmVyLiAqLworCWlmIChzZW5zZSA9PSAtMSkgeworCQkvKiB3YWl0IDEvMiBzZWMgZm9yIHRoZSBwb3dlciBzdXBwbHkgKi8KKwkJbXNsZWVwKDUwMCk7CisKKwkJLyoKKwkJICogcHJvYmUgOSB0aW1lcyBldmVyeSAwLjA0cywgY29sbGVjdCAidm90ZXMiIGZvcgorCQkgKiBhY3RpdmUgaGlnaC9sb3cKKwkJICovCisJCW5sb3cgPSAwOworCQluaGlnaCA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspIHsKKwkJCWlmIChzaW5wKFVBUlRfTVNSKSAmIGhhcmR3YXJlW3R5cGVdLnNpZ25hbF9waW4pCisJCQkJbmxvdysrOworCQkJZWxzZQorCQkJCW5oaWdoKys7CisJCQltc2xlZXAoNDApOworCQl9CisJCXNlbnNlID0gKG5sb3cgPj0gbmhpZ2ggPyAxIDogMCk7CisJCXByaW50ayhLRVJOX0lORk8gTElSQ19EUklWRVJfTkFNRSAgIjogYXV0by1kZXRlY3RlZCBhY3RpdmUgIgorCQkgICAgICAgIiVzIHJlY2VpdmVyXG4iLCBzZW5zZSA/ICJsb3ciIDogImhpZ2giKTsKKwl9IGVsc2UKKwkJcHJpbnRrKEtFUk5fSU5GTyBMSVJDX0RSSVZFUl9OQU1FICAiOiBNYW51YWxseSB1c2luZyBhY3RpdmUgIgorCQkgICAgICAgIiVzIHJlY2VpdmVyXG4iLCBzZW5zZSA/ICJsb3ciIDogImhpZ2giKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldF91c2VfaW5jKHZvaWQgKmRhdGEpCit7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogaW5pdGlhbGl6ZSB0aW1lc3RhbXAgKi8KKwlkb19nZXR0aW1lb2ZkYXkoJmxhc3R0dik7CisKKwlyZXN1bHQgPSByZXF1ZXN0X2lycShpcnEsIGlycV9oYW5kbGVyLAorCQkJICAgICBJUlFGX0RJU0FCTEVEIHwgKHNoYXJlX2lycSA/IElSUUZfU0hBUkVEIDogMCksCisJCQkgICAgIExJUkNfRFJJVkVSX05BTUUsICh2b2lkICopJmhhcmR3YXJlKTsKKworCXN3aXRjaCAocmVzdWx0KSB7CisJY2FzZSAtRUJVU1k6CisJCXByaW50ayhLRVJOX0VSUiBMSVJDX0RSSVZFUl9OQU1FICI6IElSUSAlZCBidXN5XG4iLCBpcnEpOworCQlyZXR1cm4gLUVCVVNZOworCWNhc2UgLUVJTlZBTDoKKwkJcHJpbnRrKEtFUk5fRVJSIExJUkNfRFJJVkVSX05BTUUKKwkJICAgICAgICI6IEJhZCBpcnEgbnVtYmVyIG9yIGhhbmRsZXJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwlkZWZhdWx0OgorCQlkcHJpbnRrKCJJbnRlcnJ1cHQgJWQsIHBvcnQgJTA0eCBvYnRhaW5lZFxuIiwgaXJxLCBpbyk7CisJCWJyZWFrOworCX07CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaGFyZHdhcmVbdHlwZV0ubG9jaywgZmxhZ3MpOworCisJLyogU2V0IERMQUIgMC4gKi8KKwlzb3V0cChVQVJUX0xDUiwgc2lucChVQVJUX0xDUikgJiAoflVBUlRfTENSX0RMQUIpKTsKKworCXNvdXRwKFVBUlRfSUVSLCBzaW5wKFVBUlRfSUVSKXxVQVJUX0lFUl9NU0kpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGFyZHdhcmVbdHlwZV0ubG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF91c2VfZGVjKHZvaWQgKmRhdGEpCit7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaGFyZHdhcmVbdHlwZV0ubG9jaywgZmxhZ3MpOworCisJLyogU2V0IERMQUIgMC4gKi8KKwlzb3V0cChVQVJUX0xDUiwgc2lucChVQVJUX0xDUikgJiAoflVBUlRfTENSX0RMQUIpKTsKKworCS8qIEZpcnN0IG9mIGFsbCwgZGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLworCXNvdXRwKFVBUlRfSUVSLCBzaW5wKFVBUlRfSUVSKSAmCisJICAgICAgKH4oVUFSVF9JRVJfTVNJfFVBUlRfSUVSX1JMU0l8VUFSVF9JRVJfVEhSSXxVQVJUX0lFUl9SREkpKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGFyZHdhcmVbdHlwZV0ubG9jaywgZmxhZ3MpOworCisJZnJlZV9pcnEoaXJxLCAodm9pZCAqKSZoYXJkd2FyZSk7CisKKwlkcHJpbnRrKCJmcmVlZCBJUlEgJWRcbiIsIGlycSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGxpcmNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCSBzaXplX3QgbiwgbG9mZl90ICpwcG9zKQoreworCWludCBpLCBjb3VudDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWxvbmcgZGVsdGEgPSAwOworCWludCAqd2J1ZjsKKworCWlmICghKGhhcmR3YXJlW3R5cGVdLmZlYXR1cmVzICYgTElSQ19DQU5fU0VORF9QVUxTRSkpCisJCXJldHVybiAtRUJBREY7CisKKwljb3VudCA9IG4gLyBzaXplb2YoaW50KTsKKwlpZiAobiAlIHNpemVvZihpbnQpIHx8IGNvdW50ICUgMiA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwl3YnVmID0gbWVtZHVwX3VzZXIoYnVmLCBuKTsKKwlpZiAoUFRSX0VSUih3YnVmKSkKKwkJcmV0dXJuIFBUUl9FUlIod2J1Zik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmhhcmR3YXJlW3R5cGVdLmxvY2ssIGZsYWdzKTsKKwlpZiAodHlwZSA9PSBMSVJDX0lSREVPKSB7CisJCS8qIERUUiwgUlRTIGRvd24gKi8KKwkJb24oKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJaWYgKGklMikKKwkJCWhhcmR3YXJlW3R5cGVdLnNlbmRfc3BhY2Uod2J1ZltpXSAtIGRlbHRhKTsKKwkJZWxzZQorCQkJZGVsdGEgPSBoYXJkd2FyZVt0eXBlXS5zZW5kX3B1bHNlKHdidWZbaV0pOworCX0KKwlvZmYoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYXJkd2FyZVt0eXBlXS5sb2NrLCBmbGFncyk7CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBsb25nIGxpcmNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJdW5zaWduZWQgaW50IGl2YWx1ZTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBMSVJDX0dFVF9TRU5EX01PREU6CisJCWlmICghKGhhcmR3YXJlW3R5cGVdLmZlYXR1cmVzJkxJUkNfQ0FOX1NFTkRfTUFTSykpCisJCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCisJCXJlc3VsdCA9IHB1dF91c2VyKExJUkNfU0VORDJNT0RFCisJCQkJICAoaGFyZHdhcmVbdHlwZV0uZmVhdHVyZXMmTElSQ19DQU5fU0VORF9NQVNLKSwKKwkJCQkgICh1bnNpZ25lZCBsb25nICopIGFyZyk7CisJCWlmIChyZXN1bHQpCisJCQlyZXR1cm4gcmVzdWx0OworCQlicmVhazsKKworCWNhc2UgTElSQ19TRVRfU0VORF9NT0RFOgorCQlpZiAoIShoYXJkd2FyZVt0eXBlXS5mZWF0dXJlcyZMSVJDX0NBTl9TRU5EX01BU0spKQorCQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKworCQlyZXN1bHQgPSBnZXRfdXNlcih2YWx1ZSwgKHVuc2lnbmVkIGxvbmcgKikgYXJnKTsKKwkJaWYgKHJlc3VsdCkKKwkJCXJldHVybiByZXN1bHQ7CisJCS8qIG9ubHkgTElSQ19NT0RFX1BVTFNFIHN1cHBvcnRlZCAqLworCQlpZiAodmFsdWUgIT0gTElSQ19NT0RFX1BVTFNFKQorCQkJcmV0dXJuIC1FTk9TWVM7CisJCWJyZWFrOworCisJY2FzZSBMSVJDX0dFVF9MRU5HVEg6CisJCXJldHVybiAtRU5PU1lTOworCQlicmVhazsKKworCWNhc2UgTElSQ19TRVRfU0VORF9EVVRZX0NZQ0xFOgorCQlkcHJpbnRrKCJTRVRfU0VORF9EVVRZX0NZQ0xFXG4iKTsKKwkJaWYgKCEoaGFyZHdhcmVbdHlwZV0uZmVhdHVyZXMmTElSQ19DQU5fU0VUX1NFTkRfRFVUWV9DWUNMRSkpCisJCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCisJCXJlc3VsdCA9IGdldF91c2VyKGl2YWx1ZSwgKHVuc2lnbmVkIGludCAqKSBhcmcpOworCQlpZiAocmVzdWx0KQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJaWYgKGl2YWx1ZSA8PSAwIHx8IGl2YWx1ZSA+IDEwMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gaW5pdF90aW1pbmdfcGFyYW1zKGl2YWx1ZSwgZnJlcSk7CisJCWJyZWFrOworCisJY2FzZSBMSVJDX1NFVF9TRU5EX0NBUlJJRVI6CisJCWRwcmludGsoIlNFVF9TRU5EX0NBUlJJRVJcbiIpOworCQlpZiAoIShoYXJkd2FyZVt0eXBlXS5mZWF0dXJlcyZMSVJDX0NBTl9TRVRfU0VORF9DQVJSSUVSKSkKKwkJCXJldHVybiAtRU5PSU9DVExDTUQ7CisKKwkJcmVzdWx0ID0gZ2V0X3VzZXIoaXZhbHVlLCAodW5zaWduZWQgaW50ICopIGFyZyk7CisJCWlmIChyZXN1bHQpCisJCQlyZXR1cm4gcmVzdWx0OworCQlpZiAoaXZhbHVlID4gNTAwMDAwIHx8IGl2YWx1ZSA8IDIwMDAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBpbml0X3RpbWluZ19wYXJhbXMoZHV0eV9jeWNsZSwgaXZhbHVlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gbGlyY19kZXZfZm9wX2lvY3RsKGZpbGVwLCBjbWQsIGFyZyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsaXJjX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS53cml0ZQkJPSBsaXJjX3dyaXRlLAorCS51bmxvY2tlZF9pb2N0bAk9IGxpcmNfaW9jdGwsCisJLnJlYWQJCT0gbGlyY19kZXZfZm9wX3JlYWQsCisJLnBvbGwJCT0gbGlyY19kZXZfZm9wX3BvbGwsCisJLm9wZW4JCT0gbGlyY19kZXZfZm9wX29wZW4sCisJLnJlbGVhc2UJPSBsaXJjX2Rldl9mb3BfY2xvc2UsCit9OworCitzdGF0aWMgc3RydWN0IGxpcmNfZHJpdmVyIGRyaXZlciA9IHsKKwkubmFtZQkJPSBMSVJDX0RSSVZFUl9OQU1FLAorCS5taW5vcgkJPSAtMSwKKwkuY29kZV9sZW5ndGgJPSAxLAorCS5zYW1wbGVfcmF0ZQk9IDAsCisJLmRhdGEJCT0gTlVMTCwKKwkuYWRkX3RvX2J1Zgk9IE5VTEwsCisJLnJidWYJCT0gJnJidWYsCisJLnNldF91c2VfaW5jCT0gc2V0X3VzZV9pbmMsCisJLnNldF91c2VfZGVjCT0gc2V0X3VzZV9kZWMsCisJLmZvcHMJCT0gJmxpcmNfZm9wcywKKwkuZGV2CQk9IE5VTEwsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmxpcmNfc2VyaWFsX2RldjsKKworc3RhdGljIGludCBfX2RldmluaXQgbGlyY19zZXJpYWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBsaXJjX3NlcmlhbF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxpcmNfc2VyaWFsX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAorCQkJICAgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwkvKiBTZXQgRExBQiAwLiAqLworCXNvdXRwKFVBUlRfTENSLCBzaW5wKFVBUlRfTENSKSAmICh+VUFSVF9MQ1JfRExBQikpOworCisJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLworCXNvdXRwKFVBUlRfSUVSLCBzaW5wKFVBUlRfSUVSKSAmCisJICAgICAgKH4oVUFSVF9JRVJfTVNJfFVBUlRfSUVSX1JMU0l8VUFSVF9JRVJfVEhSSXxVQVJUX0lFUl9SREkpKSk7CisKKwkvKiBDbGVhciByZWdpc3RlcnMuICovCisJc2lucChVQVJUX0xTUik7CisJc2lucChVQVJUX1JYKTsKKwlzaW5wKFVBUlRfSUlSKTsKKwlzaW5wKFVBUlRfTVNSKTsKKworCXJldHVybiAwOworfQorCisvKiB0d2lzdHkgbWF6ZS4uLiBuZWVkIGEgZm9yd2FyZC1kZWNsYXJhdGlvbiBoZXJlLi4uICovCitzdGF0aWMgdm9pZCBsaXJjX3NlcmlhbF9leGl0KHZvaWQpOworCitzdGF0aWMgaW50IGxpcmNfc2VyaWFsX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChoYXJkd2FyZV9pbml0X3BvcnQoKSA8IDApIHsKKwkJbGlyY19zZXJpYWxfZXhpdCgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaGFyZHdhcmVbdHlwZV0ubG9jaywgZmxhZ3MpOworCS8qIEVuYWJsZSBJbnRlcnJ1cHQgKi8KKwlkb19nZXR0aW1lb2ZkYXkoJmxhc3R0dik7CisJc291dHAoVUFSVF9JRVIsIHNpbnAoVUFSVF9JRVIpfFVBUlRfSUVSX01TSSk7CisJb2ZmKCk7CisKKwlsaXJjX2J1ZmZlcl9jbGVhcigmcmJ1Zik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYXJkd2FyZVt0eXBlXS5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbGlyY19zZXJpYWxfZHJpdmVyID0geworCS5wcm9iZQkJPSBsaXJjX3NlcmlhbF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGxpcmNfc2VyaWFsX3JlbW92ZSksCisJLnN1c3BlbmQJPSBsaXJjX3NlcmlhbF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gbGlyY19zZXJpYWxfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJsaXJjX3NlcmlhbCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBsaXJjX3NlcmlhbF9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdDsKKworCS8qIEluaXQgcmVhZCBidWZmZXIuICovCisJcmVzdWx0ID0gbGlyY19idWZmZXJfaW5pdCgmcmJ1Ziwgc2l6ZW9mKGludCksIFJCVUZfTEVOKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXN1bHQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmxpcmNfc2VyaWFsX2RyaXZlcik7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoImxpcmMgcmVnaXN0ZXIgcmV0dXJuZWQgJWRcbiIsIHJlc3VsdCk7CisJCWdvdG8gZXhpdF9idWZmZXJfZnJlZTsKKwl9CisKKwlsaXJjX3NlcmlhbF9kZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoImxpcmNfc2VyaWFsIiwgMCk7CisJaWYgKCFsaXJjX3NlcmlhbF9kZXYpIHsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwkJZ290byBleGl0X2RyaXZlcl91bnJlZ2lzdGVyOworCX0KKworCXJlc3VsdCA9IHBsYXRmb3JtX2RldmljZV9hZGQobGlyY19zZXJpYWxfZGV2KTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIGV4aXRfZGV2aWNlX3B1dDsKKworCXJldHVybiAwOworCitleGl0X2RldmljZV9wdXQ6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChsaXJjX3NlcmlhbF9kZXYpOworZXhpdF9kcml2ZXJfdW5yZWdpc3RlcjoKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbGlyY19zZXJpYWxfZHJpdmVyKTsKK2V4aXRfYnVmZmVyX2ZyZWU6CisJbGlyY19idWZmZXJfZnJlZSgmcmJ1Zik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgbGlyY19zZXJpYWxfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGxpcmNfc2VyaWFsX2Rldik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmxpcmNfc2VyaWFsX2RyaXZlcik7CisJbGlyY19idWZmZXJfZnJlZSgmcmJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGxpcmNfc2VyaWFsX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IGxpcmNfc2VyaWFsX2luaXQoKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBMSVJDX0hPTUVCUkVXOgorCWNhc2UgTElSQ19JUkRFTzoKKwljYXNlIExJUkNfSVJERU9fUkVNT1RFOgorCWNhc2UgTElSQ19BTklNQVg6CisJY2FzZSBMSVJDX0lHT1I6CisJCS8qIGlmIG5vdGhpbmcgc3BlY2lmaWVkLCB1c2UgdHR5UzAvY29tMSBhbmQgaXJxIDQgKi8KKwkJaW8gPSBpbyA/IGlvIDogMHgzZjg7CisJCWlycSA9IGlycSA/IGlycSA6IDQ7CisJCWJyZWFrOworI2lmZGVmIENPTkZJR19MSVJDX1NFUklBTF9OU0xVMgorCWNhc2UgTElSQ19OU0xVMjoKKwkJaW8gPSBpbyA/IGlvIDogSVJRX0lYUDRYWF9VQVJUMjsKKwkJaXJxID0gaXJxID8gaXJxIDogKElYUDRYWF9VQVJUMl9CQVNFX1ZJUlQgKyBSRUdfT0ZGU0VUKTsKKwkJaW9tbWFwID0gaW9tbWFwID8gaW9tbWFwIDogSVhQNFhYX1VBUlQyX0JBU0VfUEhZUzsKKwkJaW9zaGlmdCA9IGlvc2hpZnQgPyBpb3NoaWZ0IDogMjsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSAtRUlOVkFMOworCQlnb3RvIGV4aXRfc2VyaWFsX2V4aXQ7CisJfQorCWlmICghc29mdGNhcnJpZXIpIHsKKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgTElSQ19IT01FQlJFVzoKKwkJY2FzZSBMSVJDX0lHT1I6CisjaWZkZWYgQ09ORklHX0xJUkNfU0VSSUFMX05TTFUyCisJCWNhc2UgTElSQ19OU0xVMjoKKyNlbmRpZgorCQkJaGFyZHdhcmVbdHlwZV0uZmVhdHVyZXMgJj0KKwkJCQl+KExJUkNfQ0FOX1NFVF9TRU5EX0RVVFlfQ1lDTEV8CisJCQkJICBMSVJDX0NBTl9TRVRfU0VORF9DQVJSSUVSKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmVzdWx0ID0gaW5pdF9wb3J0KCk7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZXhpdF9zZXJpYWxfZXhpdDsKKwlkcml2ZXIuZmVhdHVyZXMgPSBoYXJkd2FyZVt0eXBlXS5mZWF0dXJlczsKKwlkcml2ZXIuZGV2ID0gJmxpcmNfc2VyaWFsX2Rldi0+ZGV2OworCWRyaXZlci5taW5vciA9IGxpcmNfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCWlmIChkcml2ZXIubWlub3IgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAgTElSQ19EUklWRVJfTkFNRQorCQkgICAgICAgIjogcmVnaXN0ZXJfY2hyZGV2IGZhaWxlZCFcbiIpOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGV4aXRfcmVsZWFzZTsKKwl9CisJcmV0dXJuIDA7CitleGl0X3JlbGVhc2U6CisJcmVsZWFzZV9yZWdpb24oaW8sIDgpOworZXhpdF9zZXJpYWxfZXhpdDoKKwlsaXJjX3NlcmlhbF9leGl0KCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGxpcmNfc2VyaWFsX2V4aXRfbW9kdWxlKHZvaWQpCit7CisJbGlyY19zZXJpYWxfZXhpdCgpOworCWlmIChpb21tYXAgIT0gMCkKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKGlvbW1hcCwgOCA8PCBpb3NoaWZ0KTsKKwllbHNlCisJCXJlbGVhc2VfcmVnaW9uKGlvLCA4KTsKKwlsaXJjX3VucmVnaXN0ZXJfZHJpdmVyKGRyaXZlci5taW5vcik7CisJZHByaW50aygiY2xlYW5lZCB1cCBtb2R1bGVcbiIpOworfQorCisKK21vZHVsZV9pbml0KGxpcmNfc2VyaWFsX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGxpcmNfc2VyaWFsX2V4aXRfbW9kdWxlKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJJbmZyYS1yZWQgcmVjZWl2ZXIgZHJpdmVyIGZvciBzZXJpYWwgcG9ydHMuIik7CitNT0RVTEVfQVVUSE9SKCJSYWxwaCBNZXR6bGVyLCBUcmVudCBQaWVwaG8sIEJlbiBQZmFmZiwgIgorCSAgICAgICJDaHJpc3RvcGggQmFydGVsbXVzLCBBbmRyZWkgVGFuYXMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKHR5cGUsIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHR5cGUsICJIYXJkd2FyZSB0eXBlICgwID0gaG9tZS1icmV3LCAxID0gSVJkZW8sIgorCQkgIiAyID0gSVJkZW8gUmVtb3RlLCAzID0gQW5pbWFYLCA0ID0gSWdvclBsdWcsIgorCQkgIiA1ID0gTlNMVTIgUlg6Q1RTMi9UWDpHcmVlbkxFRCkiKTsKKworbW9kdWxlX3BhcmFtKGlvLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIGJhc2UgKDB4M2Y4IG9yIDB4MmY4KSIpOworCisvKiBzb21lIGFyY2hpdGVjdHVyZXMgKGUuZy4gaW50ZWwgeHNjYWxlKSBoYXZlIG1lbW9yeSBtYXBwZWQgcmVnaXN0ZXJzICovCittb2R1bGVfcGFyYW0oaW9tbWFwLCBib29sLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoaW9tbWFwLCAicGh5c2ljYWwgYmFzZSBmb3IgbWVtb3J5IG1hcHBlZCBJL08iCisJCSIgKDAgPSBubyBtZW1vcnkgbWFwcGVkIGlvKSIpOworCisvKgorICogc29tZSBhcmNoaXRlY3R1cmVzIChlLmcuIGludGVsIHhzY2FsZSkgYWxpZ24gdGhlIDhiaXQgc2VyaWFsIHJlZ2lzdGVycworICogb24gMzJiaXQgd29yZCBib3VuZGFyaWVzLgorICogU2VlIGxpbnV4LWtlcm5lbC9zZXJpYWwvODI1MC5jIHNlcmlhbF9pbigpL291dCgpCisgKi8KK21vZHVsZV9wYXJhbShpb3NoaWZ0LCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpb3NoaWZ0LCAic2hpZnQgSS9PIHJlZ2lzdGVyIG9mZnNldCAoMCA9IG5vIHNoaWZ0KSIpOworCittb2R1bGVfcGFyYW0oaXJxLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpcnEsICJJbnRlcnJ1cHQgKDQgb3IgMykiKTsKKworbW9kdWxlX3BhcmFtKHNoYXJlX2lycSwgYm9vbCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHNoYXJlX2lycSwgIlNoYXJlIGludGVycnVwdHMgKDAgPSBvZmYsIDEgPSBvbikiKTsKKworbW9kdWxlX3BhcmFtKHNlbnNlLCBib29sLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0Moc2Vuc2UsICJPdmVycmlkZSBhdXRvZGV0ZWN0aW9uIG9mIElSIHJlY2VpdmVyIGNpcmN1aXQiCisJCSAiICgwID0gYWN0aXZlIGhpZ2gsIDEgPSBhY3RpdmUgbG93ICkiKTsKKworI2lmZGVmIENPTkZJR19MSVJDX1NFUklBTF9UUkFOU01JVFRFUgorbW9kdWxlX3BhcmFtKHR4c2Vuc2UsIGJvb2wsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyh0eHNlbnNlLCAiU2Vuc2Ugb2YgdHJhbnNtaXR0ZXIgY2lyY3VpdCIKKwkJICIgKDAgPSBhY3RpdmUgaGlnaCwgMSA9IGFjdGl2ZSBsb3cgKSIpOworI2VuZGlmCisKK21vZHVsZV9wYXJhbShzb2Z0Y2FycmllciwgYm9vbCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHNvZnRjYXJyaWVyLCAiU29mdHdhcmUgY2FycmllciAoMCA9IG9mZiwgMSA9IG9uLCBkZWZhdWx0IG9uKSIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgZGVidWdnaW5nIG1lc3NhZ2VzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3Npci5jIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19zaXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjA4ZmE3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19zaXIuYwpAQCAtMCwwICsxLDEyODIgQEAKKy8qCisgKiBMSVJDIFNJUiBkcml2ZXIsIChDKSAyMDAwIE1pbGFuIFBpa3VsYSA8d3d3QGZvcm5heC5zaz4KKyAqCisgKiBsaXJjX3NpciAtIERldmljZSBkcml2ZXIgZm9yIHVzZSB3aXRoIFNJUiAoc2VyaWFsIGluZnJhIHJlZCkKKyAqIG1vZGUgb2YgSXJEQSBvbiBtYW55IG5vdGVib29rcy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKgorICogMjAwMC8wOS8xNiBGcmFuayBQcnp5Ynlsc2tpIDxtYWlsQGZyYW5rcHJ6eWJ5bHNraS5kZT4gOgorICogIGFkZGVkIHRpbWVvdXQgYW5kIHJlbGF4ZWQgcHVsc2UgZGV0ZWN0aW9uLCByZW1vdmVkIGdhcCBidWcKKyAqCisgKiAyMDAwLzEyLzE1IENocmlzdG9waCBCYXJ0ZWxtdXMgPGxpcmNAYmFydGVsbXVzLmRlPiA6CisgKiAgIGFkZGVkIHN1cHBvcnQgZm9yIFRla3JhbSBJcm1hdGUgMjEwIChzZW5kaW5nIGRvZXMgbm90IHdvcmsgeWV0LAorICogICBraW5kIG9mIGRpc2FwcG9pbnRpbmcgdGhhdCBub2JvZHkgd2FzIGFibGUgdG8gaW1wbGVtZW50IHRoYXQKKyAqICAgYmVmb3JlKSwKKyAqICAgbWFqb3IgY2xlYW4tdXAKKyAqCisgKiAyMDAxLzAyLzI3IENocmlzdG9waCBCYXJ0ZWxtdXMgPGxpcmNAYmFydGVsbXVzLmRlPiA6CisgKiAgIGFkZGVkIHN1cHBvcnQgZm9yIFN0cm9uZ0FSTSBTQTExMDAgZW1iZWRkZWQgbWljcm9wcm9jZXNzb3IKKyAqICAgcGFydHMgY3V0J24ncGFzdGVkIGZyb20gc2ExMTAwX2lyLmMgKEMpIDIwMDAgUnVzc2VsbCBLaW5nCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KKyNpZmRlZiBMSVJDX09OX1NBMTEwMAorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2lmZGVmIENPTkZJR19TQTExMDBfQ09MTElFCisjaW5jbHVkZSA8YXNtL2FyY2gvdGMzNTE0My5oPgorI2luY2x1ZGUgPGFzbS91Y2IxMjAwLmg+CisjZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKworI2luY2x1ZGUgPG1lZGlhL2xpcmMuaD4KKyNpbmNsdWRlIDxtZWRpYS9saXJjX2Rldi5oPgorCisvKiBTRUNUSU9OOiBEZWZpbml0aW9ucyAqLworCisvKioqIFRla3JhbSBkb25nbGUgKioqLworI2lmZGVmIExJUkNfU0lSX1RFS1JBTQorLyogc3RvbGVuIGZyb20ga2VybmVsIHNvdXJjZSAqLworLyogZGVmaW5pdGlvbnMgZm9yIFRla3JhbSBkb25nbGUgKi8KKyNkZWZpbmUgVEVLUkFNXzExNTIwMCAweDAwCisjZGVmaW5lIFRFS1JBTV81NzYwMCAgMHgwMQorI2RlZmluZSBURUtSQU1fMzg0MDAgIDB4MDIKKyNkZWZpbmUgVEVLUkFNXzE5MjAwICAweDAzCisjZGVmaW5lIFRFS1JBTV85NjAwICAgMHgwNAorI2RlZmluZSBURUtSQU1fMjQwMCAgIDB4MDgKKworI2RlZmluZSBURUtSQU1fUFcgMHgxMCAvKiBQdWxzZSBzZWxlY3QgYml0ICovCisKKy8qIDEwYml0ICogMXMvMTE1MjAwYml0IGluIG1pbGxpc2Vjb25kcyA9IDg3bXMqLworI2RlZmluZSBUSU1FX0NPTlNUICgxMDAwMDAwMHVsLzExNTIwMHVsKQorCisjZW5kaWYKKworI2lmZGVmIExJUkNfU0lSX0FDVElTWVNfQUNUMjAwTAorc3RhdGljIHZvaWQgaW5pdF9hY3QyMDAodm9pZCk7CisjZWxpZiBkZWZpbmVkKExJUkNfU0lSX0FDVElTWVNfQUNUMjIwTCkKK3N0YXRpYyB2b2lkIGluaXRfYWN0MjIwKHZvaWQpOworI2VuZGlmCisKKy8qKiogU0ExMTAwICoqKi8KKyNpZmRlZiBMSVJDX09OX1NBMTEwMAorc3RydWN0IHNhMTEwMF9zZXIyX3JlZ2lzdGVycyB7CisJLyogSFNTUCBjb250cm9sIHJlZ2lzdGVyICovCisJdW5zaWduZWQgY2hhciBoc2NyMDsKKwkvKiBVQVJUIHJlZ2lzdGVycyAqLworCXVuc2lnbmVkIGNoYXIgdXRjcjA7CisJdW5zaWduZWQgY2hhciB1dGNyMTsKKwl1bnNpZ25lZCBjaGFyIHV0Y3IyOworCXVuc2lnbmVkIGNoYXIgdXRjcjM7CisJdW5zaWduZWQgY2hhciB1dGNyNDsKKwl1bnNpZ25lZCBjaGFyIHV0ZHI7CisJdW5zaWduZWQgY2hhciB1dHNyMDsKKwl1bnNpZ25lZCBjaGFyIHV0c3IxOworfSBzcjsKKworc3RhdGljIGludCBpcnEgPSBJUlFfU2VyMklDUDsKKworI2RlZmluZSBMSVJDX09OX1NBMTEwMF9UUkFOU01JVFRFUl9MQVRFTkNZIDAKKworLyogcHVsc2Uvc3BhY2UgcmF0aW8gb2YgNTAvNTAgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHB1bHNlX3dpZHRoID0gKDEzLUxJUkNfT05fU0ExMTAwX1RSQU5TTUlUVEVSX0xBVEVOQ1kpOworLyogMTAwMDAwMC9mcmVxLXB1bHNlX3dpZHRoICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzcGFjZV93aWR0aCA9ICgxMy1MSVJDX09OX1NBMTEwMF9UUkFOU01JVFRFUl9MQVRFTkNZKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZnJlcSA9IDM4MDAwOyAgICAgIC8qIG1vZHVsYXRpb24gZnJlcXVlbmN5ICovCitzdGF0aWMgdW5zaWduZWQgaW50IGR1dHlfY3ljbGUgPSA1MDsgICAvKiBkdXR5IGN5Y2xlIG9mIDUwJSAqLworCisjZW5kaWYKKworI2RlZmluZSBSQlVGX0xFTiAxMDI0CisjZGVmaW5lIFdCVUZfTEVOIDEwMjQKKworI2RlZmluZSBMSVJDX0RSSVZFUl9OQU1FICJsaXJjX3NpciIKKworI2RlZmluZSBQVUxTRSAnWycKKworI2lmbmRlZiBMSVJDX1NJUl9URUtSQU0KKy8qIDliaXQgKiAxcy8xMTUyMDBiaXQgaW4gbWlsbGkgc2Vjb25kcyA9IDc4LjEyNW1zKi8KKyNkZWZpbmUgVElNRV9DT05TVCAoOTAwMDAwMHVsLzExNTIwMHVsKQorI2VuZGlmCisKKworLyogdGltZW91dCBmb3Igc2VxdWVuY2VzIGluIGppZmZpZXMgKD01LzEwMHMpLCBtdXN0IGJlIGxvbmdlciB0aGFuIFRJTUVfQ09OU1QgKi8KKyNkZWZpbmUgU0lSX1RJTUVPVVQJKEhaKjUvMTAwKQorCisjaWZuZGVmIExJUkNfT05fU0ExMTAwCisjaWZuZGVmIExJUkNfSVJRCisjZGVmaW5lIExJUkNfSVJRIDQKKyNlbmRpZgorI2lmbmRlZiBMSVJDX1BPUlQKKy8qIGZvciBleHRlcm5hbCBkb25nbGVzLCBkZWZhdWx0IHRvIGNvbTEgKi8KKyNpZiBkZWZpbmVkKExJUkNfU0lSX0FDVElTWVNfQUNUMjAwTCkgfHwgXAorICAgIGRlZmluZWQoTElSQ19TSVJfQUNUSVNZU19BQ1QyMjBMKSB8fCBcCisgICAgZGVmaW5lZChMSVJDX1NJUl9URUtSQU0pCisjZGVmaW5lIExJUkNfUE9SVCAweDNmOAorI2Vsc2UKKy8qIG9uYm9hcmQgc2lyIHBvcnRzIGFyZSB0eXBpY2FsbHkgY29tMyAqLworI2RlZmluZSBMSVJDX1BPUlQgMHgzZTgKKyNlbmRpZgorI2VuZGlmCisKK3N0YXRpYyBpbnQgaW8gPSBMSVJDX1BPUlQ7CitzdGF0aWMgaW50IGlycSA9IExJUkNfSVJROworc3RhdGljIGludCB0aHJlc2hvbGQgPSAzOworI2VuZGlmCisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGltZXJfbG9jayk7CitzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgdGltZXJsaXN0OworLyogdGltZSBvZiBsYXN0IHNpZ25hbCBjaGFuZ2UgZGV0ZWN0ZWQgKi8KK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCBsYXN0X3R2ID0gezAsIDB9OworLyogdGltZSBvZiBsYXN0IFVBUlQgZGF0YSByZWFkeSBpbnRlcnJ1cHQgKi8KK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCBsYXN0X2ludHJfdHYgPSB7MCwgMH07CitzdGF0aWMgaW50IGxhc3RfdmFsdWU7CisKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChsaXJjX3JlYWRfcXVldWUpOworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGhhcmR3YXJlX2xvY2spOworCitzdGF0aWMgaW50IHJ4X2J1ZltSQlVGX0xFTl07CitzdGF0aWMgdW5zaWduZWQgaW50IHJ4X3RhaWwsIHJ4X2hlYWQ7CisKK3N0YXRpYyBpbnQgZGVidWc7CisjZGVmaW5lIGRwcmludGsoZm10LCBhcmdzLi4uKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmIChkZWJ1ZykJCQkJCQlcCisJCQlwcmludGsoS0VSTl9ERUJVRyBMSVJDX0RSSVZFUl9OQU1FICI6ICIJCVwKKwkJCQlmbXQsICMjIGFyZ3MpOwkJCQlcCisJfSB3aGlsZSAoMCkKKworLyogU0VDVElPTjogUHJvdG90eXBlcyAqLworCisvKiBDb21tdW5pY2F0aW9uIHdpdGggdXNlci1zcGFjZSAqLworc3RhdGljIHVuc2lnbmVkIGludCBsaXJjX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpOworc3RhdGljIHNzaXplX3QgbGlyY19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwKKwkJbG9mZl90ICpwcG9zKTsKK3N0YXRpYyBzc2l6ZV90IGxpcmNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4sCisJCWxvZmZfdCAqcG9zKTsKK3N0YXRpYyBsb25nIGxpcmNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgdm9pZCBhZGRfcmVhZF9xdWV1ZShpbnQgZmxhZywgdW5zaWduZWQgbG9uZyB2YWwpOworc3RhdGljIGludCBpbml0X2NocmRldih2b2lkKTsKK3N0YXRpYyB2b2lkIGRyb3BfY2hyZGV2KHZvaWQpOworLyogSGFyZHdhcmUgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBzaXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CitzdGF0aWMgdm9pZCBzZW5kX3NwYWNlKHVuc2lnbmVkIGxvbmcgbGVuKTsKK3N0YXRpYyB2b2lkIHNlbmRfcHVsc2UodW5zaWduZWQgbG9uZyBsZW4pOworc3RhdGljIGludCBpbml0X2hhcmR3YXJlKHZvaWQpOworc3RhdGljIHZvaWQgZHJvcF9oYXJkd2FyZSh2b2lkKTsKKy8qIEluaXRpYWxpc2F0aW9uICovCitzdGF0aWMgaW50IGluaXRfcG9ydCh2b2lkKTsKK3N0YXRpYyB2b2lkIGRyb3BfcG9ydCh2b2lkKTsKKworI2lmZGVmIExJUkNfT05fU0ExMTAwCitzdGF0aWMgdm9pZCBvbih2b2lkKQoreworCVBQU1IgfD0gUFBDX1RYRDI7Cit9CisKK3N0YXRpYyB2b2lkIG9mZih2b2lkKQoreworCVBQU1IgJj0gflBQQ19UWEQyOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNpbnAoaW50IG9mZnNldCkKK3sKKwlyZXR1cm4gaW5iKGlvICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNvdXRwKGludCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlvdXRiKHZhbHVlLCBpbyArIG9mZnNldCk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBNQVhfVURFTEFZX01TCisjZGVmaW5lIE1BWF9VREVMQVlfVVMgNTAwMAorI2Vsc2UKKyNkZWZpbmUgTUFYX1VERUxBWV9VUyAoTUFYX1VERUxBWV9NUyoxMDAwKQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHNhZmVfdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MpCit7CisJd2hpbGUgKHVzZWNzID4gTUFYX1VERUxBWV9VUykgeworCQl1ZGVsYXkoTUFYX1VERUxBWV9VUyk7CisJCXVzZWNzIC09IE1BWF9VREVMQVlfVVM7CisJfQorCXVkZWxheSh1c2Vjcyk7Cit9CisKKy8qIFNFQ1RJT046IENvbW11bmljYXRpb24gd2l0aCB1c2VyLXNwYWNlICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGlyY19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXBvbGxfd2FpdChmaWxlLCAmbGlyY19yZWFkX3F1ZXVlLCB3YWl0KTsKKwlpZiAocnhfaGVhZCAhPSByeF90YWlsKQorCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgbGlyY19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwKKwkJbG9mZl90ICpwcG9zKQoreworCWludCBuID0gMDsKKwlpbnQgcmV0dmFsID0gMDsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKworCWlmIChjb3VudCAlIHNpemVvZihpbnQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWFkZF93YWl0X3F1ZXVlKCZsaXJjX3JlYWRfcXVldWUsICZ3YWl0KTsKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCXdoaWxlIChuIDwgY291bnQpIHsKKwkJaWYgKHJ4X2hlYWQgIT0gcnhfdGFpbCkgeworCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCAqKSBidWYgKyBuLAorCQkJCQkodm9pZCAqKSAocnhfYnVmICsgcnhfaGVhZCksCisJCQkJCXNpemVvZihpbnQpKSkgeworCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQkJYnJlYWs7CisJCQl9CisJCQlyeF9oZWFkID0gKHJ4X2hlYWQgKyAxKSAmIChSQlVGX0xFTiAtIDEpOworCQkJbiArPSBzaXplb2YoaW50KTsKKwkJfSBlbHNlIHsKKwkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJCXJldHZhbCA9IC1FQUdBSU47CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQlyZXR2YWwgPSAtRVJFU1RBUlRTWVM7CisJCQkJYnJlYWs7CisJCQl9CisJCQlzY2hlZHVsZSgpOworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJfQorCX0KKwlyZW1vdmVfd2FpdF9xdWV1ZSgmbGlyY19yZWFkX3F1ZXVlLCAmd2FpdCk7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwlyZXR1cm4gbiA/IG4gOiByZXR2YWw7Cit9CitzdGF0aWMgc3NpemVfdCBsaXJjX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuLAorCQkJCWxvZmZfdCAqcG9zKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGksIGNvdW50OworCWludCAqdHhfYnVmOworCisJY291bnQgPSBuIC8gc2l6ZW9mKGludCk7CisJaWYgKG4gJSBzaXplb2YoaW50KSB8fCBjb3VudCAlIDIgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJdHhfYnVmID0gbWVtZHVwX3VzZXIoYnVmLCBuKTsKKwlpZiAoSVNfRVJSKHR4X2J1ZikpCisJCXJldHVybiBQVFJfRVJSKHR4X2J1Zik7CisJaSA9IDA7CisjaWZkZWYgTElSQ19PTl9TQTExMDAKKwkvKiBkaXNhYmxlIHJlY2VpdmVyICovCisJU2VyMlVUQ1IzID0gMDsKKyNlbmRpZgorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl3aGlsZSAoMSkgeworCQlpZiAoaSA+PSBjb3VudCkKKwkJCWJyZWFrOworCQlpZiAodHhfYnVmW2ldKQorCQkJc2VuZF9wdWxzZSh0eF9idWZbaV0pOworCQlpKys7CisJCWlmIChpID49IGNvdW50KQorCQkJYnJlYWs7CisJCWlmICh0eF9idWZbaV0pCisJCQlzZW5kX3NwYWNlKHR4X2J1ZltpXSk7CisJCWkrKzsKKwl9CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworI2lmZGVmIExJUkNfT05fU0ExMTAwCisJb2ZmKCk7CisJdWRlbGF5KDEwMDApOyAvKiB3YWl0IDFtcyBmb3IgSVIgZGlvZGUgdG8gcmVjb3ZlciAqLworCVNlcjJVVENSMyA9IDA7CisJLyogY2xlYXIgc3RhdHVzIHJlZ2lzdGVyIHRvIHByZXZlbnQgdW53YW50ZWQgaW50ZXJydXB0cyAqLworCVNlcjJVVFNSMCAmPSAoVVRTUjBfUklEIHwgVVRTUjBfUkJCIHwgVVRTUjBfUkVCKTsKKwkvKiBlbmFibGUgcmVjZWl2ZXIgKi8KKwlTZXIyVVRDUjMgPSBVVENSM19SWEV8VVRDUjNfUklFOworI2VuZGlmCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgbG9uZyBsaXJjX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IHJldHZhbCA9IDA7CisJdW5zaWduZWQgbG9uZyB2YWx1ZSA9IDA7CisjaWZkZWYgTElSQ19PTl9TQTExMDAKKwl1bnNpZ25lZCBpbnQgaXZhbHVlOworCisJaWYgKGNtZCA9PSBMSVJDX0dFVF9GRUFUVVJFUykKKwkJdmFsdWUgPSBMSVJDX0NBTl9TRU5EX1BVTFNFIHwKKwkJCUxJUkNfQ0FOX1NFVF9TRU5EX0RVVFlfQ1lDTEUgfAorCQkJTElSQ19DQU5fU0VUX1NFTkRfQ0FSUklFUiB8CisJCQlMSVJDX0NBTl9SRUNfTU9ERTI7CisJZWxzZSBpZiAoY21kID09IExJUkNfR0VUX1NFTkRfTU9ERSkKKwkJdmFsdWUgPSBMSVJDX01PREVfUFVMU0U7CisJZWxzZSBpZiAoY21kID09IExJUkNfR0VUX1JFQ19NT0RFKQorCQl2YWx1ZSA9IExJUkNfTU9ERV9NT0RFMjsKKyNlbHNlCisJaWYgKGNtZCA9PSBMSVJDX0dFVF9GRUFUVVJFUykKKwkJdmFsdWUgPSBMSVJDX0NBTl9TRU5EX1BVTFNFIHwgTElSQ19DQU5fUkVDX01PREUyOworCWVsc2UgaWYgKGNtZCA9PSBMSVJDX0dFVF9TRU5EX01PREUpCisJCXZhbHVlID0gTElSQ19NT0RFX1BVTFNFOworCWVsc2UgaWYgKGNtZCA9PSBMSVJDX0dFVF9SRUNfTU9ERSkKKwkJdmFsdWUgPSBMSVJDX01PREVfTU9ERTI7CisjZW5kaWYKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBMSVJDX0dFVF9GRUFUVVJFUzoKKwljYXNlIExJUkNfR0VUX1NFTkRfTU9ERToKKwljYXNlIExJUkNfR0VUX1JFQ19NT0RFOgorCQlyZXR2YWwgPSBwdXRfdXNlcih2YWx1ZSwgKHVuc2lnbmVkIGxvbmcgKikgYXJnKTsKKwkJYnJlYWs7CisKKwljYXNlIExJUkNfU0VUX1NFTkRfTU9ERToKKwljYXNlIExJUkNfU0VUX1JFQ19NT0RFOgorCQlyZXR2YWwgPSBnZXRfdXNlcih2YWx1ZSwgKHVuc2lnbmVkIGxvbmcgKikgYXJnKTsKKwkJYnJlYWs7CisjaWZkZWYgTElSQ19PTl9TQTExMDAKKwljYXNlIExJUkNfU0VUX1NFTkRfRFVUWV9DWUNMRToKKwkJcmV0dmFsID0gZ2V0X3VzZXIoaXZhbHVlLCAodW5zaWduZWQgaW50ICopIGFyZyk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCQlpZiAoaXZhbHVlIDw9IDAgfHwgaXZhbHVlID4gMTAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCS8qIChpdmFsdWUvMTAwKSooMTAwMDAwMC9mcmVxKSAqLworCQlkdXR5X2N5Y2xlID0gaXZhbHVlOworCQlwdWxzZV93aWR0aCA9ICh1bnNpZ25lZCBsb25nKSBkdXR5X2N5Y2xlKjEwMDAwL2ZyZXE7CisJCXNwYWNlX3dpZHRoID0gKHVuc2lnbmVkIGxvbmcpIDEwMDAwMDBML2ZyZXEtcHVsc2Vfd2lkdGg7CisJCWlmIChwdWxzZV93aWR0aCA+PSBMSVJDX09OX1NBMTEwMF9UUkFOU01JVFRFUl9MQVRFTkNZKQorCQkJcHVsc2Vfd2lkdGggLT0gTElSQ19PTl9TQTExMDBfVFJBTlNNSVRURVJfTEFURU5DWTsKKwkJaWYgKHNwYWNlX3dpZHRoID49IExJUkNfT05fU0ExMTAwX1RSQU5TTUlUVEVSX0xBVEVOQ1kpCisJCQlzcGFjZV93aWR0aCAtPSBMSVJDX09OX1NBMTEwMF9UUkFOU01JVFRFUl9MQVRFTkNZOworCQlicmVhazsKKwljYXNlIExJUkNfU0VUX1NFTkRfQ0FSUklFUjoKKwkJcmV0dmFsID0gZ2V0X3VzZXIoaXZhbHVlLCAodW5zaWduZWQgaW50ICopIGFyZyk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCQlpZiAoaXZhbHVlID4gNTAwMDAwIHx8IGl2YWx1ZSA8IDIwMDAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWZyZXEgPSBpdmFsdWU7CisJCXB1bHNlX3dpZHRoID0gKHVuc2lnbmVkIGxvbmcpIGR1dHlfY3ljbGUqMTAwMDAvZnJlcTsKKwkJc3BhY2Vfd2lkdGggPSAodW5zaWduZWQgbG9uZykgMTAwMDAwMEwvZnJlcS1wdWxzZV93aWR0aDsKKwkJaWYgKHB1bHNlX3dpZHRoID49IExJUkNfT05fU0ExMTAwX1RSQU5TTUlUVEVSX0xBVEVOQ1kpCisJCQlwdWxzZV93aWR0aCAtPSBMSVJDX09OX1NBMTEwMF9UUkFOU01JVFRFUl9MQVRFTkNZOworCQlpZiAoc3BhY2Vfd2lkdGggPj0gTElSQ19PTl9TQTExMDBfVFJBTlNNSVRURVJfTEFURU5DWSkKKwkJCXNwYWNlX3dpZHRoIC09IExJUkNfT05fU0ExMTAwX1RSQU5TTUlUVEVSX0xBVEVOQ1k7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJcmV0dmFsID0gLUVOT0lPQ1RMQ01EOworCisJfQorCisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlpZiAoY21kID09IExJUkNfU0VUX1JFQ19NT0RFKSB7CisJCWlmICh2YWx1ZSAhPSBMSVJDX01PREVfTU9ERTIpCisJCQlyZXR2YWwgPSAtRU5PU1lTOworCX0gZWxzZSBpZiAoY21kID09IExJUkNfU0VUX1NFTkRfTU9ERSkgeworCQlpZiAodmFsdWUgIT0gTElSQ19NT0RFX1BVTFNFKQorCQkJcmV0dmFsID0gLUVOT1NZUzsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBhZGRfcmVhZF9xdWV1ZShpbnQgZmxhZywgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJdW5zaWduZWQgaW50IG5ld19yeF90YWlsOworCWludCBuZXd2YWw7CisKKwlkcHJpbnRrKCJhZGQgZmxhZyAlZCB3aXRoIHZhbCAlbHVcbiIsIGZsYWcsIHZhbCk7CisKKwluZXd2YWwgPSB2YWwgJiBQVUxTRV9NQVNLOworCisJLyoKKwkgKiBzdGF0aXN0aWNhbGx5LCBwdWxzZXMgYXJlIH5USU1FX0NPTlNULzIgdG9vIGxvbmcuIHdlIGNvdWxkCisJICogbWF5YmUgbWFrZSB0aGlzIG1vcmUgZXhhY3QsIGJ1dCB0aGlzIGlzIGdvb2QgZW5vdWdoCisJICovCisJaWYgKGZsYWcpIHsKKwkJLyogcHVsc2UgKi8KKwkJaWYgKG5ld3ZhbCA+IFRJTUVfQ09OU1QvMikKKwkJCW5ld3ZhbCAtPSBUSU1FX0NPTlNULzI7CisJCWVsc2UgLyogc2hvdWxkIG5vdCBldmVyIGhhcHBlbiAqLworCQkJbmV3dmFsID0gMTsKKwkJbmV3dmFsIHw9IFBVTFNFX0JJVDsKKwl9IGVsc2UgeworCQluZXd2YWwgKz0gVElNRV9DT05TVC8yOworCX0KKwluZXdfcnhfdGFpbCA9IChyeF90YWlsICsgMSkgJiAoUkJVRl9MRU4gLSAxKTsKKwlpZiAobmV3X3J4X3RhaWwgPT0gcnhfaGVhZCkgeworCQlkcHJpbnRrKCJCdWZmZXIgb3ZlcnJ1bi5cbiIpOworCQlyZXR1cm47CisJfQorCXJ4X2J1ZltyeF90YWlsXSA9IG5ld3ZhbDsKKwlyeF90YWlsID0gbmV3X3J4X3RhaWw7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZsaXJjX3JlYWRfcXVldWUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsaXJjX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5yZWFkCQk9IGxpcmNfcmVhZCwKKwkud3JpdGUJCT0gbGlyY193cml0ZSwKKwkucG9sbAkJPSBsaXJjX3BvbGwsCisJLnVubG9ja2VkX2lvY3RsCT0gbGlyY19pb2N0bCwKKwkub3BlbgkJPSBsaXJjX2Rldl9mb3Bfb3BlbiwKKwkucmVsZWFzZQk9IGxpcmNfZGV2X2ZvcF9jbG9zZSwKK307CisKK3N0YXRpYyBpbnQgc2V0X3VzZV9pbmModm9pZCAqZGF0YSkKK3sKKyAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0X3VzZV9kZWModm9pZCAqZGF0YSkKK3sKK30KKworc3RhdGljIHN0cnVjdCBsaXJjX2RyaXZlciBkcml2ZXIgPSB7CisgICAgICAgLm5hbWUJCT0gTElSQ19EUklWRVJfTkFNRSwKKyAgICAgICAubWlub3IJCT0gLTEsCisgICAgICAgLmNvZGVfbGVuZ3RoCT0gMSwKKyAgICAgICAuc2FtcGxlX3JhdGUJPSAwLAorICAgICAgIC5kYXRhCQk9IE5VTEwsCisgICAgICAgLmFkZF90b19idWYJPSBOVUxMLAorICAgICAgIC5zZXRfdXNlX2luYwk9IHNldF91c2VfaW5jLAorICAgICAgIC5zZXRfdXNlX2RlYwk9IHNldF91c2VfZGVjLAorICAgICAgIC5mb3BzCQk9ICZsaXJjX2ZvcHMsCisgICAgICAgLmRldgkJPSBOVUxMLAorICAgICAgIC5vd25lcgkJPSBUSElTX01PRFVMRSwKK307CisKKworc3RhdGljIGludCBpbml0X2NocmRldih2b2lkKQoreworCWRyaXZlci5taW5vciA9IGxpcmNfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCWlmIChkcml2ZXIubWlub3IgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMSVJDX0RSSVZFUl9OQU1FICI6IGluaXRfY2hyZGV2KCkgZmFpbGVkLlxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHJvcF9jaHJkZXYodm9pZCkKK3sKKwlsaXJjX3VucmVnaXN0ZXJfZHJpdmVyKGRyaXZlci5taW5vcik7Cit9CisKKy8qIFNFQ1RJT046IEhhcmR3YXJlICovCitzdGF0aWMgbG9uZyBkZWx0YShzdHJ1Y3QgdGltZXZhbCAqdHYxLCBzdHJ1Y3QgdGltZXZhbCAqdHYyKQoreworCXVuc2lnbmVkIGxvbmcgZGVsdHY7CisKKwlkZWx0diA9IHR2Mi0+dHZfc2VjIC0gdHYxLT50dl9zZWM7CisJaWYgKGRlbHR2ID4gMTUpCisJCWRlbHR2ID0gMHhGRkZGRkY7CisJZWxzZQorCQlkZWx0diA9IGRlbHR2KjEwMDAwMDAgKworCQkJdHYyLT50dl91c2VjIC0KKwkJCXR2MS0+dHZfdXNlYzsKKwlyZXR1cm4gZGVsdHY7Cit9CisKK3N0YXRpYyB2b2lkIHNpcl90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwkvKgorCSAqIGlmIGxhc3QgcmVjZWl2ZWQgc2lnbmFsIHdhcyBhIHB1bHNlLCBidXQgcmVjZWl2aW5nIHN0b3BwZWQKKwkgKiB3aXRoaW4gdGhlIDkgYml0IGZyYW1lLCB3ZSBuZWVkIHRvIGZpbmlzaCB0aGlzIHB1bHNlIGFuZAorCSAqIHNpbXVsYXRlIGEgc2lnbmFsIGNoYW5nZSB0byBmcm9tIHB1bHNlIHRvIHNwYWNlLiBPdGhlcndpc2UKKwkgKiB1cHBlciBsYXllcnMgd2lsbCByZWNlaXZlIHR3byBzZXF1ZW5jZXMgbmV4dCB0aW1lLgorCSAqLworCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHB1bHNlX2VuZDsKKworCS8qIGF2b2lkIGludGVyZmVyZW5jZSB3aXRoIGludGVycnVwdCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZ0aW1lcl9sb2NrLCBmbGFncyk7CisJaWYgKGxhc3RfdmFsdWUpIHsKKyNpZm5kZWYgTElSQ19PTl9TQTExMDAKKwkJLyogY2xlYXIgdW5yZWFkIGJpdHMgaW4gVUFSVCBhbmQgcmVzdGFydCAqLworCQlvdXRiKFVBUlRfRkNSX0NMRUFSX1JDVlIsIGlvICsgVUFSVF9GQ1IpOworI2VuZGlmCisJCS8qIGRldGVybWluZSAndmlydHVhbCcgcHVsc2UgZW5kOiAqLworCQlwdWxzZV9lbmQgPSBkZWx0YSgmbGFzdF90diwgJmxhc3RfaW50cl90dik7CisJCWRwcmludGsoInRpbWVvdXQgYWRkICVkIGZvciAlbHUgdXNlY1xuIiwgbGFzdF92YWx1ZSwgcHVsc2VfZW5kKTsKKwkJYWRkX3JlYWRfcXVldWUobGFzdF92YWx1ZSwgcHVsc2VfZW5kKTsKKwkJbGFzdF92YWx1ZSA9IDA7CisJCWxhc3RfdHYgPSBsYXN0X2ludHJfdHY7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpbWVyX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlycXJldHVybl90IHNpcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXVuc2lnbmVkIGNoYXIgZGF0YTsKKwlzdHJ1Y3QgdGltZXZhbCBjdXJyX3R2OworCXN0YXRpYyB1bnNpZ25lZCBsb25nIGRlbHR2OworI2lmZGVmIExJUkNfT05fU0ExMTAwCisJaW50IHN0YXR1czsKKwlzdGF0aWMgaW50IG47CisKKwlzdGF0dXMgPSBTZXIyVVRTUjA7CisJLyoKKwkgKiBEZWFsIHdpdGggYW55IHJlY2VpdmUgZXJyb3JzIGZpcnN0LiAgVGhlIGJ5dGVzIGluIGVycm9yIG1heSBiZQorCSAqIHRoZSBvbmx5IGJ5dGVzIGluIHRoZSByZWNlaXZlIEZJRk8sIHNvIHdlIGRvIHRoaXMgZmlyc3QuCisJICovCisJd2hpbGUgKHN0YXR1cyAmIFVUU1IwX0VJRikgeworCQlpbnQgYnN0YXQ7CisKKwkJaWYgKGRlYnVnKSB7CisJCQlkcHJpbnRrKCJFSUZcbiIpOworCQkJYnN0YXQgPSBTZXIyVVRTUjE7CisKKwkJCWlmIChic3RhdCAmIFVUU1IxX0ZSRSkKKwkJCQlkcHJpbnRrKCJmcmFtZSBlcnJvclxuIik7CisJCQlpZiAoYnN0YXQgJiBVVFNSMV9ST1IpCisJCQkJZHByaW50aygicmVjZWl2ZSBmaWZvIG92ZXJydW5cbiIpOworCQkJaWYgKGJzdGF0ICYgVVRTUjFfUFJFKQorCQkJCWRwcmludGsoInBhcml0eSBlcnJvclxuIik7CisJCX0KKworCQlic3RhdCA9IFNlcjJVVERSOworCQluKys7CisJCXN0YXR1cyA9IFNlcjJVVFNSMDsKKwl9CisKKwlpZiAoc3RhdHVzICYgKFVUU1IwX1JGUyB8IFVUU1IwX1JJRCkpIHsKKwkJZG9fZ2V0dGltZW9mZGF5KCZjdXJyX3R2KTsKKwkJZGVsdHYgPSBkZWx0YSgmbGFzdF90diwgJmN1cnJfdHYpOworCQlkbyB7CisJCQlkYXRhID0gU2VyMlVURFI7CisJCQlkcHJpbnRrKCIlZCBkYXRhOiAldVxuIiwgbiwgKHVuc2lnbmVkIGludCkgZGF0YSk7CisJCQluKys7CisJCX0gd2hpbGUgKHN0YXR1cyAmIFVUU1IwX1JJRCAmJiAvKiBkbyBub3QgZW1wdHkgZmlmbyBpbiBvcmRlciB0bworCQkJCQkJKiBnZXQgVVRTUjBfUklEIGluIGFueSBjYXNlICovCisJCSAgICAgIFNlcjJVVFNSMSAmIFVUU1IxX1JORSk7IC8qIGRhdGEgcmVhZHkgKi8KKworCQlpZiAoc3RhdHVzJlVUU1IwX1JJRCkgeworCQkJYWRkX3JlYWRfcXVldWUoMCAsIGRlbHR2IC0gbiAqIFRJTUVfQ09OU1QpOyAvKnNwYWNlKi8KKwkJCWFkZF9yZWFkX3F1ZXVlKDEsIG4gKiBUSU1FX0NPTlNUKTsgLypwdWxzZSovCisJCQluID0gMDsKKwkJCWxhc3RfdHYgPSBjdXJyX3R2OworCQl9CisJfQorCisJaWYgKHN0YXR1cyAmIFVUU1IwX1RGUykKKwkJcHJpbnRrKEtFUk5fRVJSICJ0cmFuc21pdCBmaWZvIG5vdCBmdWxsLCBzaG91bGRuJ3QgaGFwcGVuXG4iKTsKKworCS8qIFdlIG11c3QgY2xlYXIgY2VydGFpbiBiaXRzLiAqLworCXN0YXR1cyAmPSAoVVRTUjBfUklEIHwgVVRTUjBfUkJCIHwgVVRTUjBfUkVCKTsKKwlpZiAoc3RhdHVzKQorCQlTZXIyVVRTUjAgPSBzdGF0dXM7CisjZWxzZQorCXVuc2lnbmVkIGxvbmcgZGVsdGludHJ0djsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpaXIsIGxzcjsKKworCXdoaWxlICgoaWlyID0gaW5iKGlvICsgVUFSVF9JSVIpICYgVUFSVF9JSVJfSUQpKSB7CisJCXN3aXRjaCAoaWlyJlVBUlRfSUlSX0lEKSB7IC8qIEZJWE1FIHRvdG8gdHJlYmEgcHJlcmllZGl0ICovCisJCWNhc2UgVUFSVF9JSVJfTVNJOgorCQkJKHZvaWQpIGluYihpbyArIFVBUlRfTVNSKTsKKwkJCWJyZWFrOworCQljYXNlIFVBUlRfSUlSX1JMU0k6CisJCQkodm9pZCkgaW5iKGlvICsgVUFSVF9MU1IpOworCQkJYnJlYWs7CisJCWNhc2UgVUFSVF9JSVJfVEhSSToKKyNpZiAwCisJCQlpZiAobHNyICYgVUFSVF9MU1JfVEhSRSkgLyogRklGTyBpcyBlbXB0eSAqLworCQkJCW91dGIoZGF0YSwgaW8gKyBVQVJUX1RYKQorI2VuZGlmCisJCQlicmVhazsKKwkJY2FzZSBVQVJUX0lJUl9SREk6CisJCQkvKiBhdm9pZCBpbnRlcmZlcmVuY2Ugd2l0aCB0aW1lciAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVyX2xvY2ssIGZsYWdzKTsKKwkJCWRvIHsKKwkJCQlkZWxfdGltZXIoJnRpbWVybGlzdCk7CisJCQkJZGF0YSA9IGluYihpbyArIFVBUlRfUlgpOworCQkJCWRvX2dldHRpbWVvZmRheSgmY3Vycl90dik7CisJCQkJZGVsdHYgPSBkZWx0YSgmbGFzdF90diwgJmN1cnJfdHYpOworCQkJCWRlbHRpbnRydHYgPSBkZWx0YSgmbGFzdF9pbnRyX3R2LCAmY3Vycl90dik7CisJCQkJZHByaW50aygidCAlbHUsIGQgJWRcbiIsIGRlbHRpbnRydHYsIChpbnQpZGF0YSk7CisJCQkJLyoKKwkJCQkgKiBpZiBub3RoaW5nIGNhbWUgaW4gbGFzdCBYIGN5Y2xlcywKKwkJCQkgKiBpdCB3YXMgZ2FwCisJCQkJICovCisJCQkJaWYgKGRlbHRpbnRydHYgPiBUSU1FX0NPTlNUICogdGhyZXNob2xkKSB7CisJCQkJCWlmIChsYXN0X3ZhbHVlKSB7CisJCQkJCQlkcHJpbnRrKCJHQVBcbiIpOworCQkJCQkJLyogc2ltdWxhdGUgc2lnbmFsIGNoYW5nZSAqLworCQkJCQkJYWRkX3JlYWRfcXVldWUobGFzdF92YWx1ZSwKKwkJCQkJCQkgICAgICAgZGVsdHYgLQorCQkJCQkJCSAgICAgICBkZWx0aW50cnR2KTsKKwkJCQkJCWxhc3RfdmFsdWUgPSAwOworCQkJCQkJbGFzdF90di50dl9zZWMgPQorCQkJCQkJCWxhc3RfaW50cl90di50dl9zZWM7CisJCQkJCQlsYXN0X3R2LnR2X3VzZWMgPQorCQkJCQkJCWxhc3RfaW50cl90di50dl91c2VjOworCQkJCQkJZGVsdHYgPSBkZWx0aW50cnR2OworCQkJCQl9CisJCQkJfQorCQkJCWRhdGEgPSAxOworCQkJCWlmIChkYXRhIF4gbGFzdF92YWx1ZSkgeworCQkJCQkvKgorCQkJCQkgKiBkZWx0aW50cnR2ID4gMipUSU1FX0NPTlNULCByZW1lbWJlcj8KKwkJCQkJICogdGhlIG90aGVyIGNhc2UgaXMgdGltZW91dAorCQkJCQkgKi8KKwkJCQkJYWRkX3JlYWRfcXVldWUobGFzdF92YWx1ZSwKKwkJCQkJCSAgICAgICBkZWx0di1USU1FX0NPTlNUKTsKKwkJCQkJbGFzdF92YWx1ZSA9IGRhdGE7CisJCQkJCWxhc3RfdHYgPSBjdXJyX3R2OworCQkJCQlpZiAobGFzdF90di50dl91c2VjID49IFRJTUVfQ09OU1QpIHsKKwkJCQkJCWxhc3RfdHYudHZfdXNlYyAtPSBUSU1FX0NPTlNUOworCQkJCQl9IGVsc2UgeworCQkJCQkJbGFzdF90di50dl9zZWMtLTsKKwkJCQkJCWxhc3RfdHYudHZfdXNlYyArPSAxMDAwMDAwIC0KKwkJCQkJCQlUSU1FX0NPTlNUOworCQkJCQl9CisJCQkJfQorCQkJCWxhc3RfaW50cl90diA9IGN1cnJfdHY7CisJCQkJaWYgKGRhdGEpIHsKKwkJCQkJLyoKKwkJCQkJICogc3RhcnQgdGltZXIgZm9yIGVuZCBvZgorCQkJCQkgKiBzZXF1ZW5jZSBkZXRlY3Rpb24KKwkJCQkJICovCisJCQkJCXRpbWVybGlzdC5leHBpcmVzID0gamlmZmllcyArCisJCQkJCQkJCVNJUl9USU1FT1VUOworCQkJCQlhZGRfdGltZXIoJnRpbWVybGlzdCk7CisJCQkJfQorCisJCQkJbHNyID0gaW5iKGlvICsgVUFSVF9MU1IpOworCQkJfSB3aGlsZSAobHNyICYgVUFSVF9MU1JfRFIpOyAvKiBkYXRhIHJlYWR5ICovCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lcl9sb2NrLCBmbGFncyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorI2VuZGlmCisJcmV0dXJuIElSUV9SRVRWQUwoSVJRX0hBTkRMRUQpOworfQorCisjaWZkZWYgTElSQ19PTl9TQTExMDAKK3N0YXRpYyB2b2lkIHNlbmRfcHVsc2UodW5zaWduZWQgbG9uZyBsZW5ndGgpCit7CisJdW5zaWduZWQgbG9uZyBrLCBkZWxheTsKKwlpbnQgZmxhZzsKKworCWlmIChsZW5ndGggPT0gMCkKKwkJcmV0dXJuOworCS8qCisJICogdGhpcyB3b24ndCBnaXZlIHVzIHRoZSBjYXJyaWVyIGZyZXF1ZW5jeSB3ZSByZWFsbHkgd2FudAorCSAqIGR1ZSB0byBpbnRlZ2VyIGFyaXRobWV0aWMsIGJ1dCB3ZSBjYW4gYWNjZXB0IHRoaXMgaW5hY2N1cmFjeQorCSAqLworCisJZm9yIChrID0gZmxhZyA9IDA7IGsgPCBsZW5ndGg7IGsgKz0gZGVsYXksIGZsYWcgPSAhZmxhZykgeworCQlpZiAoZmxhZykgeworCQkJb2ZmKCk7CisJCQlkZWxheSA9IHNwYWNlX3dpZHRoOworCQl9IGVsc2UgeworCQkJb24oKTsKKwkJCWRlbGF5ID0gcHVsc2Vfd2lkdGg7CisJCX0KKwkJc2FmZV91ZGVsYXkoZGVsYXkpOworCX0KKwlvZmYoKTsKK30KKworc3RhdGljIHZvaWQgc2VuZF9zcGFjZSh1bnNpZ25lZCBsb25nIGxlbmd0aCkKK3sKKwlpZiAobGVuZ3RoID09IDApCisJCXJldHVybjsKKwlvZmYoKTsKKwlzYWZlX3VkZWxheShsZW5ndGgpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIHNlbmRfc3BhY2UodW5zaWduZWQgbG9uZyBsZW4pCit7CisJc2FmZV91ZGVsYXkobGVuKTsKK30KKworc3RhdGljIHZvaWQgc2VuZF9wdWxzZSh1bnNpZ25lZCBsb25nIGxlbikKK3sKKwlsb25nIGJ5dGVzX291dCA9IGxlbiAvIFRJTUVfQ09OU1Q7CisJbG9uZyB0aW1lX2xlZnQ7CisKKwl0aW1lX2xlZnQgPSAobG9uZylsZW4gLSAobG9uZylieXRlc19vdXQgKiAobG9uZylUSU1FX0NPTlNUOworCWlmIChieXRlc19vdXQgPT0gMCkgeworCQlieXRlc19vdXQrKzsKKwkJdGltZV9sZWZ0ID0gMDsKKwl9CisJd2hpbGUgKGJ5dGVzX291dC0tKSB7CisJCW91dGIoUFVMU0UsIGlvICsgVUFSVF9UWCk7CisJCS8qIEZJWE1FIHRyZWJhIHNlcmlvem5lIGNha2FuaWUgeiBjaGFyL3NlcmlhbC5jICovCisJCXdoaWxlICghKGluYihpbyArIFVBUlRfTFNSKSAmIFVBUlRfTFNSX1RIUkUpKQorCQkJOworCX0KKyNpZiAwCisJaWYgKHRpbWVfbGVmdCA+IDApCisJCXNhZmVfdWRlbGF5KHRpbWVfbGVmdCk7CisjZW5kaWYKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NBMTEwMF9DT0xMSUUKK3N0YXRpYyBpbnQgc2ExMTAwX2lyZGFfc2V0X3Bvd2VyX2NvbGxpZShpbnQgc3RhdGUpCit7CisJaWYgKHN0YXRlKSB7CisJCS8qCisJCSAqICAwIC0gb2ZmCisJCSAqICAxIC0gc2hvcnQgcmFuZ2UsIGxvd2VzdCBwb3dlcgorCQkgKiAgMiAtIG1lZGl1bSByYW5nZSwgbWVkaXVtIHBvd2VyCisJCSAqICAzIC0gbWF4aW11bSByYW5nZSwgaGlnaCBwb3dlcgorCQkgKi8KKwkJdWNiMTIwMF9zZXRfaW9fZGlyZWN0aW9uKFRDMzUxNDNfR1BJT19JUl9PTiwKKwkJCQkJIFRDMzUxNDNfSU9ESVJfT1VUUFVUKTsKKwkJdWNiMTIwMF9zZXRfaW8oVEMzNTE0M19HUElPX0lSX09OLCBUQzM1MTQzX0lPREFUX0xPVyk7CisJCXVkZWxheSgxMDApOworCX0gZWxzZSB7CisJCS8qIE9GRiAqLworCQl1Y2IxMjAwX3NldF9pb19kaXJlY3Rpb24oVEMzNTE0M19HUElPX0lSX09OLAorCQkJCQkgVEMzNTE0M19JT0RJUl9PVVRQVVQpOworCQl1Y2IxMjAwX3NldF9pbyhUQzM1MTQzX0dQSU9fSVJfT04sIFRDMzUxNDNfSU9EQVRfSElHSCk7CisJfQorCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgaW5pdF9oYXJkd2FyZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaGFyZHdhcmVfbG9jaywgZmxhZ3MpOworCS8qIHJlc2V0IFVBUlQgKi8KKyNpZmRlZiBMSVJDX09OX1NBMTEwMAorI2lmZGVmIENPTkZJR19TQTExMDBfQklUU1kKKwlpZiAobWFjaGluZV9pc19iaXRzeSgpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIlBvd2VyIG9uIElSIG1vZHVsZVxuIik7CisJCXNldF9iaXRzeV9lZ3BpbyhFR1BJT19CSVRTWV9JUl9PTik7CisJfQorI2VuZGlmCisjaWZkZWYgQ09ORklHX1NBMTEwMF9DT0xMSUUKKwlzYTExMDBfaXJkYV9zZXRfcG93ZXJfY29sbGllKDMpOwkvKiBwb3dlciBvbiAqLworI2VuZGlmCisJc3IuaHNjcjAgPSBTZXIySFNDUjA7CisKKwlzci51dGNyMCA9IFNlcjJVVENSMDsKKwlzci51dGNyMSA9IFNlcjJVVENSMTsKKwlzci51dGNyMiA9IFNlcjJVVENSMjsKKwlzci51dGNyMyA9IFNlcjJVVENSMzsKKwlzci51dGNyNCA9IFNlcjJVVENSNDsKKworCXNyLnV0ZHIgPSBTZXIyVVREUjsKKwlzci51dHNyMCA9IFNlcjJVVFNSMDsKKwlzci51dHNyMSA9IFNlcjJVVFNSMTsKKworCS8qIGNvbmZpZ3VyZSBHUElPICovCisJLyogb3V0cHV0ICovCisJUFBEUiB8PSBQUENfVFhEMjsKKwlQU0RSIHw9IFBQQ19UWEQyOworCS8qIHNldCBvdXRwdXQgdG8gMCAqLworCW9mZigpOworCisJLyogRW5hYmxlIEhQLVNJUiBtb2R1bGF0aW9uLCBhbmQgZW5zdXJlIHRoYXQgdGhlIHBvcnQgaXMgZGlzYWJsZWQuICovCisJU2VyMlVUQ1IzID0gMDsKKwlTZXIySFNDUjAgPSBzci5oc2NyMCAmICh+SFNDUjBfSFNTUCk7CisKKwkvKiBjbGVhciBzdGF0dXMgcmVnaXN0ZXIgdG8gcHJldmVudCB1bndhbnRlZCBpbnRlcnJ1cHRzICovCisJU2VyMlVUU1IwICY9IChVVFNSMF9SSUQgfCBVVFNSMF9SQkIgfCBVVFNSMF9SRUIpOworCisJLyogN04xICovCisJU2VyMlVUQ1IwID0gVVRDUjBfMVN0cEJpdHxVVENSMF83Qml0RGF0YTsKKwkvKiAxMTUyMDAgKi8KKwlTZXIyVVRDUjEgPSAwOworCVNlcjJVVENSMiA9IDE7CisJLyogdXNlIEhQU0lSLCAxLjYgdXNlYyBwdWxzZXMgKi8KKwlTZXIyVVRDUjQgPSBVVENSNF9IUFNJUnxVVENSNF9aMV82dXM7CisKKwkvKiBlbmFibGUgcmVjZWl2ZXIsIHJlY2VpdmUgZmlmbyBpbnRlcnJ1cHQgKi8KKwlTZXIyVVRDUjMgPSBVVENSM19SWEV8VVRDUjNfUklFOworCisJLyogY2xlYXIgc3RhdHVzIHJlZ2lzdGVyIHRvIHByZXZlbnQgdW53YW50ZWQgaW50ZXJydXB0cyAqLworCVNlcjJVVFNSMCAmPSAoVVRTUjBfUklEIHwgVVRTUjBfUkJCIHwgVVRTUjBfUkVCKTsKKworI2VsaWYgZGVmaW5lZChMSVJDX1NJUl9URUtSQU0pCisJLyogZGlzYWJsZSBGSUZPICovCisJc291dHAoVUFSVF9GQ1IsCisJICAgICAgVUFSVF9GQ1JfQ0xFQVJfUkNWUnwKKwkgICAgICBVQVJUX0ZDUl9DTEVBUl9YTUlUfAorCSAgICAgIFVBUlRfRkNSX1RSSUdHRVJfMSk7CisKKwkvKiBTZXQgRExBQiAwLiAqLworCXNvdXRwKFVBUlRfTENSLCBzaW5wKFVBUlRfTENSKSAmICh+VUFSVF9MQ1JfRExBQikpOworCisJLyogRmlyc3Qgb2YgYWxsLCBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCisJc291dHAoVUFSVF9JRVIsIHNpbnAoVUFSVF9JRVIpICYKKwkgICAgICAofihVQVJUX0lFUl9NU0l8VUFSVF9JRVJfUkxTSXxVQVJUX0lFUl9USFJJfFVBUlRfSUVSX1JESSkpKTsKKworCS8qIFNldCBETEFCIDEuICovCisJc291dHAoVUFSVF9MQ1IsIHNpbnAoVUFSVF9MQ1IpIHwgVUFSVF9MQ1JfRExBQik7CisKKwkvKiBTZXQgZGl2aXNvciB0byAxMiA9PiA5NjAwIEJhdWQgKi8KKwlzb3V0cChVQVJUX0RMTSwgMCk7CisJc291dHAoVUFSVF9ETEwsIDEyKTsKKworCS8qIFNldCBETEFCIDAuICovCisJc291dHAoVUFSVF9MQ1IsIHNpbnAoVUFSVF9MQ1IpICYgKH5VQVJUX0xDUl9ETEFCKSk7CisKKwkvKiBwb3dlciBzdXBwbHkgKi8KKwlzb3V0cChVQVJUX01DUiwgVUFSVF9NQ1JfUlRTfFVBUlRfTUNSX0RUUnxVQVJUX01DUl9PVVQyKTsKKwlzYWZlX3VkZWxheSg1MCoxMDAwKTsKKworCS8qIC1EVFIgbG93IC0+IHJlc2V0IFBJQyAqLworCXNvdXRwKFVBUlRfTUNSLCBVQVJUX01DUl9SVFN8VUFSVF9NQ1JfT1VUMik7CisJdWRlbGF5KDEqMTAwMCk7CisKKwlzb3V0cChVQVJUX01DUiwgVUFSVF9NQ1JfUlRTfFVBUlRfTUNSX0RUUnxVQVJUX01DUl9PVVQyKTsKKwl1ZGVsYXkoMTAwKTsKKworCisJLyogLVJUUyBsb3cgLT4gc2VuZCBjb250cm9sIGJ5dGUgKi8KKwlzb3V0cChVQVJUX01DUiwgVUFSVF9NQ1JfRFRSfFVBUlRfTUNSX09VVDIpOworCXVkZWxheSg3KTsKKwlzb3V0cChVQVJUX1RYLCBURUtSQU1fMTE1MjAwfFRFS1JBTV9QVyk7CisKKwkvKiBvbmUgYnl0ZSB0YWtlcyB+MTA0MiB1c2VjIHRvIHRyYW5zbWl0IGF0IDk2MDAsOE4xICovCisJdWRlbGF5KDE1MDApOworCisJLyogYmFjayB0byBub3JtYWwgb3BlcmF0aW9uICovCisJc291dHAoVUFSVF9NQ1IsIFVBUlRfTUNSX1JUU3xVQVJUX01DUl9EVFJ8VUFSVF9NQ1JfT1VUMik7CisJdWRlbGF5KDUwKTsKKworCXVkZWxheSgxNTAwKTsKKworCS8qIHJlYWQgcHJldmlvdXMgY29udHJvbCBieXRlICovCisJcHJpbnRrKEtFUk5fSU5GTyBMSVJDX0RSSVZFUl9OQU1FCisJICAgICAgICI6IDB4JTAyeFxuIiwgc2lucChVQVJUX1JYKSk7CisKKwkvKiBTZXQgRExBQiAxLiAqLworCXNvdXRwKFVBUlRfTENSLCBzaW5wKFVBUlRfTENSKSB8IFVBUlRfTENSX0RMQUIpOworCisJLyogU2V0IGRpdmlzb3IgdG8gMSA9PiAxMTUyMDAgQmF1ZCAqLworCXNvdXRwKFVBUlRfRExNLCAwKTsKKwlzb3V0cChVQVJUX0RMTCwgMSk7CisKKwkvKiBTZXQgRExBQiAwLCA4IEJpdCAqLworCXNvdXRwKFVBUlRfTENSLCBVQVJUX0xDUl9XTEVOOCk7CisJLyogZW5hYmxlIGludGVycnVwdHMgKi8KKwlzb3V0cChVQVJUX0lFUiwgc2lucChVQVJUX0lFUil8VUFSVF9JRVJfUkRJKTsKKyNlbHNlCisJb3V0YigwLCBpbyArIFVBUlRfTUNSKTsKKwlvdXRiKDAsIGlvICsgVUFSVF9JRVIpOworCS8qIGluaXQgVUFSVCAqLworCS8qIHNldCBETEFCLCBzcGVlZCA9IDExNTIwMCAqLworCW91dGIoVUFSVF9MQ1JfRExBQiB8IFVBUlRfTENSX1dMRU43LCBpbyArIFVBUlRfTENSKTsKKwlvdXRiKDEsIGlvICsgVUFSVF9ETEwpOyBvdXRiKDAsIGlvICsgVUFSVF9ETE0pOworCS8qIDdOMStzdGFydCA9IDkgYml0cyBhdCAxMTUyMDAgfiAzIGJpdHMgYXQgNDQwMDAgKi8KKwlvdXRiKFVBUlRfTENSX1dMRU43LCBpbyArIFVBUlRfTENSKTsKKwkvKiBGSUZPIG9wZXJhdGlvbiAqLworCW91dGIoVUFSVF9GQ1JfRU5BQkxFX0ZJRk8sIGlvICsgVUFSVF9GQ1IpOworCS8qIGludGVycnVwdHMgKi8KKwkvKiBvdXRiKFVBUlRfSUVSX1JMU0l8VUFSVF9JRVJfUkRJfFVBUlRfSUVSX1RIUkksIGlvICsgVUFSVF9JRVIpOyAqLworCW91dGIoVUFSVF9JRVJfUkRJLCBpbyArIFVBUlRfSUVSKTsKKwkvKiB0dXJuIG9uIFVBUlQgKi8KKwlvdXRiKFVBUlRfTUNSX0RUUnxVQVJUX01DUl9SVFN8VUFSVF9NQ1JfT1VUMiwgaW8gKyBVQVJUX01DUik7CisjaWZkZWYgTElSQ19TSVJfQUNUSVNZU19BQ1QyMDBMCisJaW5pdF9hY3QyMDAoKTsKKyNlbGlmIGRlZmluZWQoTElSQ19TSVJfQUNUSVNZU19BQ1QyMjBMKQorCWluaXRfYWN0MjIwKCk7CisjZW5kaWYKKyNlbmRpZgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHJvcF9oYXJkd2FyZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaGFyZHdhcmVfbG9jaywgZmxhZ3MpOworCisjaWZkZWYgTElSQ19PTl9TQTExMDAKKwlTZXIyVVRDUjMgPSAwOworCisJU2VyMlVUQ1IwID0gc3IudXRjcjA7CisJU2VyMlVUQ1IxID0gc3IudXRjcjE7CisJU2VyMlVUQ1IyID0gc3IudXRjcjI7CisJU2VyMlVUQ1I0ID0gc3IudXRjcjQ7CisJU2VyMlVUQ1IzID0gc3IudXRjcjM7CisKKwlTZXIySFNDUjAgPSBzci5oc2NyMDsKKyNpZmRlZiBDT05GSUdfU0ExMTAwX0JJVFNZCisJaWYgKG1hY2hpbmVfaXNfYml0c3koKSkKKwkJY2xyX2JpdHN5X2VncGlvKEVHUElPX0JJVFNZX0lSX09OKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TQTExMDBfQ09MTElFCisJc2ExMTAwX2lyZGFfc2V0X3Bvd2VyX2NvbGxpZSgwKTsJLyogcG93ZXIgb2ZmICovCisjZW5kaWYKKyNlbHNlCisJLyogdHVybiBvZmYgaW50ZXJydXB0cyAqLworCW91dGIoMCwgaW8gKyBVQVJUX0lFUik7CisjZW5kaWYKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYXJkd2FyZV9sb2NrLCBmbGFncyk7Cit9CisKKy8qIFNFQ1RJT046IEluaXRpYWxpc2F0aW9uICovCisKK3N0YXRpYyBpbnQgaW5pdF9wb3J0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCS8qIGdldCBJL08gcG9ydCBhY2Nlc3MgYW5kIElSUSBsaW5lICovCisjaWZuZGVmIExJUkNfT05fU0ExMTAwCisJaWYgKHJlcXVlc3RfcmVnaW9uKGlvLCA4LCBMSVJDX0RSSVZFUl9OQU1FKSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiBMSVJDX0RSSVZFUl9OQU1FCisJCSAgICAgICAiOiBpL28gcG9ydCAweCUuNHggYWxyZWFkeSBpbiB1c2UuXG4iLCBpbyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorI2VuZGlmCisJcmV0dmFsID0gcmVxdWVzdF9pcnEoaXJxLCBzaXJfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELAorCQkJICAgICBMSVJDX0RSSVZFUl9OQU1FLCBOVUxMKTsKKwlpZiAocmV0dmFsIDwgMCkgeworIyAgICAgICAgICAgICAgIGlmbmRlZiBMSVJDX09OX1NBMTEwMAorCQlyZWxlYXNlX3JlZ2lvbihpbywgOCk7CisjICAgICAgICAgICAgICAgZW5kaWYKKwkJcHJpbnRrKEtFUk5fRVJSIExJUkNfRFJJVkVSX05BTUUKKwkJCSI6IElSUSAlZCBhbHJlYWR5IGluIHVzZS5cbiIsCisJCQlpcnEpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKyNpZm5kZWYgTElSQ19PTl9TQTExMDAKKwlwcmludGsoS0VSTl9JTkZPIExJUkNfRFJJVkVSX05BTUUKKwkJIjogSS9PIHBvcnQgMHglLjR4LCBJUlEgJWQuXG4iLAorCQlpbywgaXJxKTsKKyNlbmRpZgorCisJaW5pdF90aW1lcigmdGltZXJsaXN0KTsKKwl0aW1lcmxpc3QuZnVuY3Rpb24gPSBzaXJfdGltZW91dDsKKwl0aW1lcmxpc3QuZGF0YSA9IDB4YWJhZGNhZmU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHJvcF9wb3J0KHZvaWQpCit7CisJZnJlZV9pcnEoaXJxLCBOVUxMKTsKKwlkZWxfdGltZXJfc3luYygmdGltZXJsaXN0KTsKKyNpZm5kZWYgTElSQ19PTl9TQTExMDAKKwlyZWxlYXNlX3JlZ2lvbihpbywgOCk7CisjZW5kaWYKK30KKworI2lmZGVmIExJUkNfU0lSX0FDVElTWVNfQUNUMjAwTAorLyogQ3J5c3RhbC9DaXJydXMgQ1M4MTMwIElSIHRyYW5zY2VpdmVyLCB1c2VkIGluIEFjdGlzeXMgQWN0MjAwTCBkb25nbGUgKi8KKy8qIHNvbWUgY29kZSBib3Jyb3dlZCBmcm9tIExpbnV4IElSREEgZHJpdmVyICovCisKKy8qIFJlZ2lzdGVyIDA6IENvbnRyb2wgcmVnaXN0ZXIgIzEgKi8KKyNkZWZpbmUgQUNUMjAwTF9SRUcwICAgIDB4MDAKKyNkZWZpbmUgQUNUMjAwTF9UWEVOICAgIDB4MDEgLyogRW5hYmxlIHRyYW5zbWl0dGVyICovCisjZGVmaW5lIEFDVDIwMExfUlhFTiAgICAweDAyIC8qIEVuYWJsZSByZWNlaXZlciAqLworI2RlZmluZSBBQ1QyMDBMX0VDSE8gICAgMHgwOCAvKiBFY2hvIGNvbnRyb2wgY2hhcnMgKi8KKworLyogUmVnaXN0ZXIgMTogQ29udHJvbCByZWdpc3RlciAjMiAqLworI2RlZmluZSBBQ1QyMDBMX1JFRzEgICAgMHgxMAorI2RlZmluZSBBQ1QyMDBMX0xPREIgICAgMHgwMSAvKiBMb2FkIG5ldyBiYXVkIHJhdGUgY291bnQgdmFsdWUgKi8KKyNkZWZpbmUgQUNUMjAwTF9XSURFICAgIDB4MDQgLyogRXhwYW5kIHRoZSBtYXhpbXVtIGFsbG93YWJsZSBwdWxzZSAqLworCisvKiBSZWdpc3RlciAzOiBUcmFuc21pdCBtb2RlIHJlZ2lzdGVyICMyICovCisjZGVmaW5lIEFDVDIwMExfUkVHMyAgICAweDMwCisjZGVmaW5lIEFDVDIwMExfQjAgICAgICAweDAxIC8qIERhdGFCaXRzLCAwPTYsIDE9NywgMj04LCAzPTkoOFApICAqLworI2RlZmluZSBBQ1QyMDBMX0IxICAgICAgMHgwMiAvKiBEYXRhQml0cywgMD02LCAxPTcsIDI9OCwgMz05KDhQKSAgKi8KKyNkZWZpbmUgQUNUMjAwTF9DSFNZICAgIDB4MDQgLyogU3RhcnRCaXQgU3luY2VkIDA9Yml0dGltZSwgMT1zdGFydGJpdCAqLworCisvKiBSZWdpc3RlciA0OiBPdXRwdXQgUG93ZXIgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQUNUMjAwTF9SRUc0ICAgIDB4NDAKKyNkZWZpbmUgQUNUMjAwTF9PUDAgICAgIDB4MDEgLyogRW5hYmxlIExFRDFDIG91dHB1dCAqLworI2RlZmluZSBBQ1QyMDBMX09QMSAgICAgMHgwMiAvKiBFbmFibGUgTEVEMkMgb3V0cHV0ICovCisjZGVmaW5lIEFDVDIwMExfQkxLUiAgICAweDA0CisKKy8qIFJlZ2lzdGVyIDU6IFJlY2VpdmUgTW9kZSByZWdpc3RlciAqLworI2RlZmluZSBBQ1QyMDBMX1JFRzUgICAgMHg1MAorI2RlZmluZSBBQ1QyMDBMX1JXSURMICAgMHgwMSAvKiBmaXhlZCAxLjZ1cyBwdWxzZSBtb2RlICovCisgICAgLyouLiBvdGhlciB2YXJpb3VzIElSREEgYml0IG1vZGVzLCBhbmQgVFYgcmVtb3RlIG1vZGVzLi4qLworCisvKiBSZWdpc3RlciA2OiBSZWNlaXZlIFNlbnNpdGl2aXR5IHJlZ2lzdGVyICMxICovCisjZGVmaW5lIEFDVDIwMExfUkVHNiAgICAweDYwCisjZGVmaW5lIEFDVDIwMExfUlMwICAgICAweDAxIC8qIHJlY2VpdmUgdGhyZXNob2xkIGJpdCAwICovCisjZGVmaW5lIEFDVDIwMExfUlMxICAgICAweDAyIC8qIHJlY2VpdmUgdGhyZXNob2xkIGJpdCAxICovCisKKy8qIFJlZ2lzdGVyIDc6IFJlY2VpdmUgU2Vuc2l0aXZpdHkgcmVnaXN0ZXIgIzIgKi8KKyNkZWZpbmUgQUNUMjAwTF9SRUc3ICAgIDB4NzAKKyNkZWZpbmUgQUNUMjAwTF9FTlBPUyAgIDB4MDQgLyogSWdub3JlIHRoZSBmYWxsaW5nIGVkZ2UgKi8KKworLyogUmVnaXN0ZXIgOCw5OiBCYXVkIFJhdGUgRGl2aWRlciByZWdpc3RlciAjMSwjMiAqLworI2RlZmluZSBBQ1QyMDBMX1JFRzggICAgMHg4MAorI2RlZmluZSBBQ1QyMDBMX1JFRzkgICAgMHg5MAorCisjZGVmaW5lIEFDVDIwMExfMjQwMCAgICAweDVmCisjZGVmaW5lIEFDVDIwMExfOTYwMCAgICAweDE3CisjZGVmaW5lIEFDVDIwMExfMTkyMDAgICAweDBiCisjZGVmaW5lIEFDVDIwMExfMzg0MDAgICAweDA1CisjZGVmaW5lIEFDVDIwMExfNTc2MDAgICAweDAzCisjZGVmaW5lIEFDVDIwMExfMTE1MjAwICAweDAxCisKKy8qIFJlZ2lzdGVyIDEzOiBDb250cm9sIHJlZ2lzdGVyICMzICovCisjZGVmaW5lIEFDVDIwMExfUkVHMTMgICAweGQwCisjZGVmaW5lIEFDVDIwMExfU0hEVyAgICAweDAxIC8qIEVuYWJsZSBhY2Nlc3MgdG8gc2hhZG93IHJlZ2lzdGVycyAqLworCisvKiBSZWdpc3RlciAxNTogU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIEFDVDIwMExfUkVHMTUgICAweGYwCisKKy8qIFJlZ2lzdGVyIDIxOiBDb250cm9sIHJlZ2lzdGVyICM0ICovCisjZGVmaW5lIEFDVDIwMExfUkVHMjEgICAweDUwCisjZGVmaW5lIEFDVDIwMExfRVhDSyAgICAweDAyIC8qIERpc2FibGUgY2xvY2sgb3V0cHV0IGRyaXZlciAqLworI2RlZmluZSBBQ1QyMDBMX09TQ0wgICAgMHgwNCAvKiBvc2NpbGxhdG9yIGluIGxvdyBwb3dlciwgbWVkaXVtIGFjY3VyYWN5IG1vZGUgKi8KKworc3RhdGljIHZvaWQgaW5pdF9hY3QyMDAodm9pZCkKK3sKKwlpbnQgaTsKKwlfX3U4IGNvbnRyb2xbXSA9IHsKKwkJQUNUMjAwTF9SRUcxNSwKKwkJQUNUMjAwTF9SRUcxMyB8IEFDVDIwMExfU0hEVywKKwkJQUNUMjAwTF9SRUcyMSB8IEFDVDIwMExfRVhDSyB8IEFDVDIwMExfT1NDTCwKKwkJQUNUMjAwTF9SRUcxMywKKwkJQUNUMjAwTF9SRUc3ICB8IEFDVDIwMExfRU5QT1MsCisJCUFDVDIwMExfUkVHNiAgfCBBQ1QyMDBMX1JTMCAgfCBBQ1QyMDBMX1JTMSwKKwkJQUNUMjAwTF9SRUc1ICB8IEFDVDIwMExfUldJREwsCisJCUFDVDIwMExfUkVHNCAgfCBBQ1QyMDBMX09QMCAgfCBBQ1QyMDBMX09QMSB8IEFDVDIwMExfQkxLUiwKKwkJQUNUMjAwTF9SRUczICB8IEFDVDIwMExfQjAsCisJCUFDVDIwMExfUkVHMCAgfCBBQ1QyMDBMX1RYRU4gfCBBQ1QyMDBMX1JYRU4sCisJCUFDVDIwMExfUkVHOCB8ICAoQUNUMjAwTF8xMTUyMDAgICAgICAgJiAweDBmKSwKKwkJQUNUMjAwTF9SRUc5IHwgKChBQ1QyMDBMXzExNTIwMCA+PiA0KSAmIDB4MGYpLAorCQlBQ1QyMDBMX1JFRzEgfCBBQ1QyMDBMX0xPREIgfCBBQ1QyMDBMX1dJREUKKwl9OworCisJLyogU2V0IERMQUIgMS4gKi8KKwlzb3V0cChVQVJUX0xDUiwgVUFSVF9MQ1JfRExBQiB8IFVBUlRfTENSX1dMRU44KTsKKworCS8qIFNldCBkaXZpc29yIHRvIDEyID0+IDk2MDAgQmF1ZCAqLworCXNvdXRwKFVBUlRfRExNLCAwKTsKKwlzb3V0cChVQVJUX0RMTCwgMTIpOworCisJLyogU2V0IERMQUIgMC4gKi8KKwlzb3V0cChVQVJUX0xDUiwgVUFSVF9MQ1JfV0xFTjgpOworCS8qIFNldCBkaXZpc29yIHRvIDEyID0+IDk2MDAgQmF1ZCAqLworCisJLyogcG93ZXIgc3VwcGx5ICovCisJc291dHAoVUFSVF9NQ1IsIFVBUlRfTUNSX1JUU3xVQVJUX01DUl9EVFJ8VUFSVF9NQ1JfT1VUMik7CisJZm9yIChpID0gMDsgaSA8IDUwOyBpKyspCisJCXNhZmVfdWRlbGF5KDEwMDApOworCisJCS8qIFJlc2V0IHRoZSBkb25nbGUgOiBzZXQgUlRTIGxvdyBmb3IgMjUgbXMgKi8KKwlzb3V0cChVQVJUX01DUiwgVUFSVF9NQ1JfRFRSfFVBUlRfTUNSX09VVDIpOworCWZvciAoaSA9IDA7IGkgPCAyNTsgaSsrKQorCQl1ZGVsYXkoMTAwMCk7CisKKwlzb3V0cChVQVJUX01DUiwgVUFSVF9NQ1JfUlRTfFVBUlRfTUNSX0RUUnxVQVJUX01DUl9PVVQyKTsKKwl1ZGVsYXkoMTAwKTsKKworCS8qIENsZWFyIERUUiBhbmQgc2V0IFJUUyB0byBlbnRlciBjb21tYW5kIG1vZGUgKi8KKwlzb3V0cChVQVJUX01DUiwgVUFSVF9NQ1JfUlRTfFVBUlRfTUNSX09VVDIpOworCXVkZWxheSg3KTsKKworCS8qIHNlbmQgb3V0IHRoZSBjb250cm9sIHJlZ2lzdGVyIHNldHRpbmdzIGZvciAxMTVLIDdOMSBTSVIgb3BlcmF0aW9uICovCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihjb250cm9sKTsgaSsrKSB7CisJCXNvdXRwKFVBUlRfVFgsIGNvbnRyb2xbaV0pOworCQkvKiBvbmUgYnl0ZSB0YWtlcyB+MTA0MiB1c2VjIHRvIHRyYW5zbWl0IGF0IDk2MDAsOE4xICovCisJCXVkZWxheSgxNTAwKTsKKwl9CisKKwkvKiBiYWNrIHRvIG5vcm1hbCBvcGVyYXRpb24gKi8KKwlzb3V0cChVQVJUX01DUiwgVUFSVF9NQ1JfUlRTfFVBUlRfTUNSX0RUUnxVQVJUX01DUl9PVVQyKTsKKwl1ZGVsYXkoNTApOworCisJdWRlbGF5KDE1MDApOworCXNvdXRwKFVBUlRfTENSLCBzaW5wKFVBUlRfTENSKSB8IFVBUlRfTENSX0RMQUIpOworCisJLyogU2V0IERMQUIgMS4gKi8KKwlzb3V0cChVQVJUX0xDUiwgVUFSVF9MQ1JfRExBQiB8IFVBUlRfTENSX1dMRU43KTsKKworCS8qIFNldCBkaXZpc29yIHRvIDEgPT4gMTE1MjAwIEJhdWQgKi8KKwlzb3V0cChVQVJUX0RMTSwgMCk7CisJc291dHAoVUFSVF9ETEwsIDEpOworCisJLyogU2V0IERMQUIgMC4gKi8KKwlzb3V0cChVQVJUX0xDUiwgc2lucChVQVJUX0xDUikgJiAoflVBUlRfTENSX0RMQUIpKTsKKworCS8qIFNldCBETEFCIDAsIDcgQml0ICovCisJc291dHAoVUFSVF9MQ1IsIFVBUlRfTENSX1dMRU43KTsKKworCS8qIGVuYWJsZSBpbnRlcnJ1cHRzICovCisJc291dHAoVUFSVF9JRVIsIHNpbnAoVUFSVF9JRVIpfFVBUlRfSUVSX1JESSk7Cit9CisjZW5kaWYKKworI2lmZGVmIExJUkNfU0lSX0FDVElTWVNfQUNUMjIwTAorLyoKKyAqIERlcml2ZWQgZnJvbSBsaW51eCBJckRBIGRyaXZlciAobmV0L2lyZGEvYWN0aXN5cy5jKQorICogRHJvcCBtZSBhIG1haWwgZm9yIGFueSBraW5kIG9mIGNvbW1lbnQ6IG1heHhAc3BhY2Vib3l6Lm5ldAorICovCisKK3ZvaWQgaW5pdF9hY3QyMjAodm9pZCkKK3sKKwlpbnQgaTsKKworCS8qIERMQUIgMSAqLworCXNvdXRwKFVBUlRfTENSLCBVQVJUX0xDUl9ETEFCfFVBUlRfTENSX1dMRU43KTsKKworCS8qIDk2MDAgYmF1ZCAqLworCXNvdXRwKFVBUlRfRExNLCAwKTsKKwlzb3V0cChVQVJUX0RMTCwgMTIpOworCisJLyogRExBQiAwICovCisJc291dHAoVUFSVF9MQ1IsIFVBUlRfTENSX1dMRU43KTsKKworCS8qIHJlc2V0IHRoZSBkb25nbGUsIHNldCBEVFIgbG93IGZvciAxMHVzICovCisJc291dHAoVUFSVF9NQ1IsIFVBUlRfTUNSX1JUU3xVQVJUX01DUl9PVVQyKTsKKwl1ZGVsYXkoMTApOworCisJLyogYmFjayB0byBub3JtYWwgKHN0aWxsIDk2MDApICovCisJc291dHAoVUFSVF9NQ1IsIFVBUlRfTUNSX0RUUnxVQVJUX01DUl9SVFN8VUFSVF9NQ1JfT1VUMik7CisKKwkvKgorCSAqIHNlbmQgUlRTIHB1bHNlcyB1bnRpbCB3ZSByZWFjaCAxMTUyMDAKKwkgKiBpIGhvcGUgdGhpcyBpcyByZWFsbHkgdGhlIHNhbWUgZm9yIGFjdDIyMGwvYWN0MjIwbCsKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXVkZWxheSgxMCk7CisJCS8qIHNldCBSVFMgbG93IGZvciAxMCB1cyAqLworCQlzb3V0cChVQVJUX01DUiwgVUFSVF9NQ1JfRFRSfFVBUlRfTUNSX09VVDIpOworCQl1ZGVsYXkoMTApOworCQkvKiBzZXQgUlRTIGhpZ2ggZm9yIDEwIHVzICovCisJCXNvdXRwKFVBUlRfTUNSLCBVQVJUX01DUl9SVFN8VUFSVF9NQ1JfRFRSfFVBUlRfTUNSX09VVDIpOworCX0KKworCS8qIGJhY2sgdG8gbm9ybWFsIG9wZXJhdGlvbiAqLworCXVkZWxheSgxNTAwKTsgLyogYmV0dGVyIHNhZmUgdGhhbiBzb3JyeSA7KSAqLworCisJLyogU2V0IERMQUIgMS4gKi8KKwlzb3V0cChVQVJUX0xDUiwgVUFSVF9MQ1JfRExBQiB8IFVBUlRfTENSX1dMRU43KTsKKworCS8qIFNldCBkaXZpc29yIHRvIDEgPT4gMTE1MjAwIEJhdWQgKi8KKwlzb3V0cChVQVJUX0RMTSwgMCk7CisJc291dHAoVUFSVF9ETEwsIDEpOworCisJLyogU2V0IERMQUIgMCwgNyBCaXQgKi8KKwkvKiBUaGUgZG9uZ2xlIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGFueSBwcm9ibGVtcyB3aXRoIG9wZXJhdGlvbiBhdCA3TjEgKi8KKwlzb3V0cChVQVJUX0xDUiwgVUFSVF9MQ1JfV0xFTjcpOworCisJLyogZW5hYmxlIGludGVycnVwdHMgKi8KKwlzb3V0cChVQVJUX0lFUiwgVUFSVF9JRVJfUkRJKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGluaXRfbGlyY19zaXIodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmbGlyY19yZWFkX3F1ZXVlKTsKKwlyZXR2YWwgPSBpbml0X3BvcnQoKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKwlpbml0X2hhcmR3YXJlKCk7CisJcHJpbnRrKEtFUk5fSU5GTyBMSVJDX0RSSVZFUl9OQU1FCisJCSI6IEluc3RhbGxlZC5cbiIpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgX19pbml0IGxpcmNfc2lyX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gaW5pdF9jaHJkZXYoKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKwlyZXR2YWwgPSBpbml0X2xpcmNfc2lyKCk7CisJaWYgKHJldHZhbCkgeworCQlkcm9wX2NocmRldigpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGxpcmNfc2lyX2V4aXQodm9pZCkKK3sKKwlkcm9wX2hhcmR3YXJlKCk7CisJZHJvcF9jaHJkZXYoKTsKKwlkcm9wX3BvcnQoKTsKKwlwcmludGsoS0VSTl9JTkZPIExJUkNfRFJJVkVSX05BTUUgIjogVW5pbnN0YWxsZWQuXG4iKTsKK30KKworbW9kdWxlX2luaXQobGlyY19zaXJfaW5pdCk7Cittb2R1bGVfZXhpdChsaXJjX3Npcl9leGl0KTsKKworI2lmZGVmIExJUkNfU0lSX1RFS1JBTQorTU9EVUxFX0RFU0NSSVBUSU9OKCJJbmZyYXJlZCByZWNlaXZlciBkcml2ZXIgZm9yIFRla3JhbSBJcm1hdGUgMjEwIik7CitNT0RVTEVfQVVUSE9SKCJDaHJpc3RvcGggQmFydGVsbXVzIik7CisjZWxpZiBkZWZpbmVkKExJUkNfT05fU0ExMTAwKQorTU9EVUxFX0RFU0NSSVBUSU9OKCJMSVJDIGRyaXZlciBmb3IgU3Ryb25nQVJNIFNBMTEwMCBlbWJlZGRlZCBtaWNyb3Byb2Nlc3NvciIpOworTU9EVUxFX0FVVEhPUigiQ2hyaXN0b3BoIEJhcnRlbG11cyIpOworI2VsaWYgZGVmaW5lZChMSVJDX1NJUl9BQ1RJU1lTX0FDVDIwMEwpCitNT0RVTEVfREVTQ1JJUFRJT04oIkxJUkMgZHJpdmVyIGZvciBBY3Rpc3lzIEFjdDIwMEwiKTsKK01PRFVMRV9BVVRIT1IoIkthcmwgQm9uZ2VycyIpOworI2VsaWYgZGVmaW5lZChMSVJDX1NJUl9BQ1RJU1lTX0FDVDIyMEwpCitNT0RVTEVfREVTQ1JJUFRJT04oIkxJUkMgZHJpdmVyIGZvciBBY3Rpc3lzIEFjdDIyMEwoKykiKTsKK01PRFVMRV9BVVRIT1IoIkphbiBSb2VtaXNjaCIpOworI2Vsc2UKK01PRFVMRV9ERVNDUklQVElPTigiSW5mcmFyZWQgcmVjZWl2ZXIgZHJpdmVyIGZvciBTSVIgdHlwZSBzZXJpYWwgcG9ydHMiKTsKK01PRFVMRV9BVVRIT1IoIk1pbGFuIFBpa3VsYSIpOworI2VuZGlmCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNpZmRlZiBMSVJDX09OX1NBMTEwMAorbW9kdWxlX3BhcmFtKGlycSwgaW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoaXJxLCAiSW50ZXJydXB0ICgxNikiKTsKKyNlbHNlCittb2R1bGVfcGFyYW0oaW8sIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3MgYmFzZSAoMHgzZjggb3IgMHgyZjgpIik7CisKK21vZHVsZV9wYXJhbShpcnEsIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGlycSwgIkludGVycnVwdCAoNCBvciAzKSIpOworCittb2R1bGVfcGFyYW0odGhyZXNob2xkLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyh0aHJlc2hvbGQsICJzcGFjZSBkZXRlY3Rpb24gdGhyZXNob2xkICgzKSIpOworI2VuZGlmCisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfc3RyZWFtemFwLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3N0cmVhbXphcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMDljMTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3N0cmVhbXphcC5jCkBAIC0wLDAgKzEsODIxIEBACisvKgorICogU3RyZWFtemFwIFJlbW90ZSBDb250cm9sIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBDaHJpc3RvcGggQmFydGVsbXVzIDxsaXJjQGJhcnRlbG11cy5kZT4KKyAqCisgKiBUaGlzIGRyaXZlciB3YXMgYmFzZWQgb24gdGhlIHdvcmsgb2YgR3JlZyBXaWNraGFtIGFuZCBBZHJpYW4KKyAqIERld2h1cnN0LiBJdCB3YXMgc3Vic3RhbnRpYWxseSByZXdyaXR0ZW4gdG8gc3VwcG9ydCBjb3JyZWN0IHNpZ25hbAorICogZ2FwcyBhbmQgbm93IG1haW50YWlucyBhIGRlbGF5IGJ1ZmZlciwgd2hpY2ggaXMgdXNlZCB0byBwcmVzZW50CisgKiBjb25zaXN0ZW50IHRpbWluZyBiZWhhdmlvdXIgdG8gdXNlciBzcGFjZSBhcHBsaWNhdGlvbnMuIFdpdGhvdXQgdGhlCisgKiBkZWxheSBidWZmZXIgYW4gdWdseSBoYWNrIHdvdWxkIGJlIHJlcXVpcmVkIGluIGxpcmNkLCB3aGljaCBjYW4KKyAqIGNhdXNlIHNsdWdnaXNoIHNpZ25hbCBkZWNvZGluZyBpbiBjZXJ0YWluIHNpdHVhdGlvbnMuCisgKgorICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlIFVTQiBza2VsZXRvbiBkcml2ZXIgcGFja2FnZWQgd2l0aCB0aGUKKyAqIGtlcm5lbDsgY29weXJpZ2h0IChDKSAyMDAxLTIwMDMgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2luY2x1ZGUgPG1lZGlhL2xpcmMuaD4KKyNpbmNsdWRlIDxtZWRpYS9saXJjX2Rldi5oPgorCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCSIxLjI4IgorI2RlZmluZSBEUklWRVJfTkFNRQkibGlyY19zdHJlYW16YXAiCisjZGVmaW5lIERSSVZFUl9ERVNDCSJTdHJlYW16YXAgUmVtb3RlIENvbnRyb2wgZHJpdmVyIgorCitzdGF0aWMgaW50IGRlYnVnOworCisjZGVmaW5lIFVTQl9TVFJFQU1aQVBfVkVORE9SX0lECQkweDBlOWMKKyNkZWZpbmUgVVNCX1NUUkVBTVpBUF9QUk9EVUNUX0lECTB4MDAwMAorCisvKiBVc2Ugb3VyIG93biBkYmcgbWFjcm8gKi8KKyNkZWZpbmUgZHByaW50ayhmbXQsIGFyZ3MuLi4pCQkJCQlcCisJZG8gewkJCQkJCQlcCisJCWlmIChkZWJ1ZykJCQkJCVwKKwkJCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICJbJWRdOiAiCVwKKwkJCSAgICAgICBmbXQgIlxuIiwgIyMgYXJncyk7CQlcCisJfSB3aGlsZSAoMCkKKworLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHN0cmVhbXphcF90YWJsZVtdID0geworCS8qIFN0cmVhbXphcCBSZW1vdGUgQ29udHJvbCAqLworCXsgVVNCX0RFVklDRShVU0JfU1RSRUFNWkFQX1ZFTkRPUl9JRCwgVVNCX1NUUkVBTVpBUF9QUk9EVUNUX0lEKSB9LAorCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCisJeyB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgc3RyZWFtemFwX3RhYmxlKTsKKworI2RlZmluZSBTVFJFQU1aQVBfUFVMU0VfTUFTSyAweGYwCisjZGVmaW5lIFNUUkVBTVpBUF9TUEFDRV9NQVNLIDB4MGYKKyNkZWZpbmUgU1RSRUFNWkFQX1RJTUVPVVQgICAgMHhmZgorI2RlZmluZSBTVFJFQU1aQVBfUkVTT0xVVElPTiAyNTYKKworLyogbnVtYmVyIG9mIHNhbXBsZXMgYnVmZmVyZWQgKi8KKyNkZWZpbmUgU1RSRUFNWkFQX0JVRl9MRU4gMTI4CisKK2VudW0gU3RyZWFtemFwRGVjb2RlclN0YXRlIHsKKwlQdWxzZVNwYWNlLAorCUZ1bGxQdWxzZSwKKwlGdWxsU3BhY2UsCisJSWdub3JlUHVsc2UKK307CisKKy8qIFN0cnVjdHVyZSB0byBob2xkIGFsbCBvZiBvdXIgZGV2aWNlIHNwZWNpZmljIHN0dWZmCisgKgorICogc29tZSByZW1hcmtzIHJlZ2FyZGluZyBsb2NraW5nOgorICogdGhlb3JldGljYWxseSB0aGlzIHN0cnVjdCBjYW4gYmUgYWNjZXNzZWQgZnJvbSB0aHJlZSB0aHJlYWRzOgorICoKKyAqIC0gZnJvbSBsaXJjX2RldiB0aHJvdWdoIHNldF91c2VfaW5jL3NldF91c2VfZGVjCisgKgorICogLSBmcm9tIHRoZSBVU0IgbGF5ZXIgdGhyb3VoIHByb2JlL2Rpc2Nvbm5lY3QvaXJxCisgKgorICogICBDYXJlZnVsIHBsYWNlbWVudCBvZiBsaXJjX3JlZ2lzdGVyX2RyaXZlci9saXJjX3VucmVnaXN0ZXJfZHJpdmVyCisgKiAgIGNhbGxzIHdpbGwgcHJldmVudCBjb25mbGljdHMuIGxpcmNfZGV2IG1ha2VzIHN1cmUgdGhhdAorICogICBzZXRfdXNlX2luYy9zZXRfdXNlX2RlYyBhcmUgbm90IGJlaW5nIGV4ZWN1dGVkIGFuZCB3aWxsIG5vdCBiZQorICogICBjYWxsZWQgYWZ0ZXIgbGlyY191bnJlZ2lzdGVyX2RyaXZlciByZXR1cm5zLgorICoKKyAqIC0gYnkgdGhlIHRpbWVyIGNhbGxiYWNrCisgKgorICogICBUaGUgdGltZXIgaXMgb25seSBydW5uaW5nIHdoZW4gdGhlIGRldmljZSBpcyBjb25uZWN0ZWQgYW5kIHRoZQorICogICBMSVJDIGRldmljZSBpcyBvcGVuLiBNYWtpbmcgc3VyZSB0aGUgdGltZXIgaXMgZGVsZXRlZCBieQorICogICBzZXRfdXNlX2RlYyB3aWxsIG1ha2UgY29uZmxpY3RzIGltcG9zc2libGUuCisgKi8KK3N0cnVjdCB1c2Jfc3RyZWFtemFwIHsKKworCS8qIHVzYiAqLworCS8qIHNhdmUgb2ZmIHRoZSB1c2IgZGV2aWNlIHBvaW50ZXIgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsKKwkvKiB0aGUgaW50ZXJmYWNlIGZvciB0aGlzIGRldmljZSAqLworCXN0cnVjdCB1c2JfaW50ZXJmYWNlCSppbnRlcmZhY2U7CisKKwkvKiBidWZmZXIgJiBkbWEgKi8KKwl1bnNpZ25lZCBjaGFyCQkqYnVmX2luOworCWRtYV9hZGRyX3QJCWRtYV9pbjsKKwl1bnNpZ25lZCBpbnQJCWJ1Zl9pbl9sZW47CisKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCisJLyogSVJRICovCisJc3RydWN0IHVyYgkJKnVyYl9pbjsKKworCS8qIGxpcmMgKi8KKwlzdHJ1Y3QgbGlyY19kcml2ZXIJKmRyaXZlcjsKKwlzdHJ1Y3QgbGlyY19idWZmZXIJKmRlbGF5X2J1ZjsKKworCS8qIHRpbWVyIHVzZWQgdG8gc3VwcG9ydCBkZWxheSBidWZmZXJpbmcgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdAlkZWxheV90aW1lcjsKKwlpbnQJCQl0aW1lcl9ydW5uaW5nOworCXNwaW5sb2NrX3QJCXRpbWVyX2xvY2s7CisKKwkvKiB0cmFja3Mgd2hldGhlciB3ZSBhcmUgY3VycmVudGx5IHJlY2VpdmluZyBzb21lIHNpZ25hbCAqLworCWludAkJCWlkbGU7CisJLyogc3VtIG9mIHNpZ25hbCBsZW5ndGhzIHJlY2VpdmVkIHNpbmNlIHNpZ25hbCBzdGFydCAqLworCXVuc2lnbmVkIGxvbmcJCXN1bTsKKwkvKiBzdGFydCB0aW1lIG9mIHNpZ25hbDsgbmVjZXNzYXJ5IGZvciBnYXAgdHJhY2tpbmcgKi8KKwlzdHJ1Y3QgdGltZXZhbAkJc2lnbmFsX2xhc3Q7CisJc3RydWN0IHRpbWV2YWwJCXNpZ25hbF9zdGFydDsKKwllbnVtIFN0cmVhbXphcERlY29kZXJTdGF0ZSBkZWNvZGVyX3N0YXRlOworCXN0cnVjdCB0aW1lcl9saXN0CWZsdXNoX3RpbWVyOworCWludAkJCWZsdXNoOworCWludAkJCWluX3VzZTsKKwlpbnQJCQl0aW1lb3V0X2VuYWJsZWQ7Cit9OworCisKKy8qIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgc3RyZWFtemFwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIHZvaWQgc3RyZWFtemFwX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CitzdGF0aWMgdm9pZCB1c2Jfc3RyZWFtemFwX2lycShzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIGludCBzdHJlYW16YXBfdXNlX2luYyh2b2lkICpkYXRhKTsKK3N0YXRpYyB2b2lkIHN0cmVhbXphcF91c2VfZGVjKHZvaWQgKmRhdGEpOworc3RhdGljIGxvbmcgc3RyZWFtemFwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgaW50IHN0cmVhbXphcF9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSk7CitzdGF0aWMgaW50IHN0cmVhbXphcF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworCisvKiB1c2Igc3BlY2lmaWMgb2JqZWN0IG5lZWRlZCB0byByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSB1c2Igc3Vic3lzdGVtICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzdHJlYW16YXBfZHJpdmVyID0geworCS5uYW1lID0JCURSSVZFUl9OQU1FLAorCS5wcm9iZSA9CXN0cmVhbXphcF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXN0cmVhbXphcF9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0Jc3RyZWFtemFwX3N1c3BlbmQsCisJLnJlc3VtZSA9CXN0cmVhbXphcF9yZXN1bWUsCisJLmlkX3RhYmxlID0Jc3RyZWFtemFwX3RhYmxlLAorfTsKKworc3RhdGljIHZvaWQgc3RvcF90aW1lcihzdHJ1Y3QgdXNiX3N0cmVhbXphcCAqc3opCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzei0+dGltZXJfbG9jaywgZmxhZ3MpOworCWlmIChzei0+dGltZXJfcnVubmluZykgeworCQlzei0+dGltZXJfcnVubmluZyA9IDA7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN6LT50aW1lcl9sb2NrLCBmbGFncyk7CisJCWRlbF90aW1lcl9zeW5jKCZzei0+ZGVsYXlfdGltZXIpOworCX0gZWxzZSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN6LT50aW1lcl9sb2NrLCBmbGFncyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBmbHVzaF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB1c2Jfc3RyZWFtemFwICpzeiA9IChzdHJ1Y3QgdXNiX3N0cmVhbXphcCAqKSBhcmc7CisKKwkvKiBmaW5hbGx5IHN0YXJ0IGFjY2VwdGluZyBkYXRhICovCisJc3otPmZsdXNoID0gMDsKK30KK3N0YXRpYyB2b2lkIGRlbGF5X3RpbWVvdXQodW5zaWduZWQgbG9uZyBhcmcpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkvKiBkZWxpdmVyIGRhdGEgZXZlcnkgMTAgbXMgKi8KKwlzdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1lcl9pbmMgPQorCQkoMTAwMDAvKDEwMDAwMDAvSFopKSA9PSAwID8gMSA6ICgxMDAwMC8oMTAwMDAwMC9IWikpOworCXN0cnVjdCB1c2Jfc3RyZWFtemFwICpzeiA9IChzdHJ1Y3QgdXNiX3N0cmVhbXphcCAqKSBhcmc7CisJaW50IGRhdGE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3otPnRpbWVyX2xvY2ssIGZsYWdzKTsKKworCWlmICghbGlyY19idWZmZXJfZW1wdHkoc3otPmRlbGF5X2J1ZikgJiYKKwkgICAgIWxpcmNfYnVmZmVyX2Z1bGwoc3otPmRyaXZlci0+cmJ1ZikpIHsKKwkJbGlyY19idWZmZXJfcmVhZChzei0+ZGVsYXlfYnVmLCAodW5zaWduZWQgY2hhciAqKSAmZGF0YSk7CisJCWxpcmNfYnVmZmVyX3dyaXRlKHN6LT5kcml2ZXItPnJidWYsICh1bnNpZ25lZCBjaGFyICopICZkYXRhKTsKKwl9CisJaWYgKCFsaXJjX2J1ZmZlcl9lbXB0eShzei0+ZGVsYXlfYnVmKSkgeworCQl3aGlsZSAobGlyY19idWZmZXJfYXZhaWxhYmxlKHN6LT5kZWxheV9idWYpIDwKKwkJICAgICAgIFNUUkVBTVpBUF9CVUZfTEVOIC8gMiAmJgorCQkgICAgICAgIWxpcmNfYnVmZmVyX2Z1bGwoc3otPmRyaXZlci0+cmJ1ZikpIHsKKwkJCWxpcmNfYnVmZmVyX3JlYWQoc3otPmRlbGF5X2J1ZiwKKwkJCQkJICAgKHVuc2lnbmVkIGNoYXIgKikgJmRhdGEpOworCQkJbGlyY19idWZmZXJfd3JpdGUoc3otPmRyaXZlci0+cmJ1ZiwKKwkJCQkJICAgICh1bnNpZ25lZCBjaGFyICopICZkYXRhKTsKKwkJfQorCQlpZiAoc3otPnRpbWVyX3J1bm5pbmcpIHsKKwkJCXN6LT5kZWxheV90aW1lci5leHBpcmVzID0gamlmZmllcyArIHRpbWVyX2luYzsKKwkJCWFkZF90aW1lcigmc3otPmRlbGF5X3RpbWVyKTsKKwkJfQorCX0gZWxzZSB7CisJCXN6LT50aW1lcl9ydW5uaW5nID0gMDsKKwl9CisKKwlpZiAoIWxpcmNfYnVmZmVyX2VtcHR5KHN6LT5kcml2ZXItPnJidWYpKQorCQl3YWtlX3VwKCZzei0+ZHJpdmVyLT5yYnVmLT53YWl0X3BvbGwpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3otPnRpbWVyX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgZmx1c2hfZGVsYXlfYnVmZmVyKHN0cnVjdCB1c2Jfc3RyZWFtemFwICpzeikKK3sKKwlpbnQgZGF0YTsKKwlpbnQgZW1wdHkgPSAxOworCisJd2hpbGUgKCFsaXJjX2J1ZmZlcl9lbXB0eShzei0+ZGVsYXlfYnVmKSkgeworCQllbXB0eSA9IDA7CisJCWxpcmNfYnVmZmVyX3JlYWQoc3otPmRlbGF5X2J1ZiwgKHVuc2lnbmVkIGNoYXIgKikgJmRhdGEpOworCQlpZiAoIWxpcmNfYnVmZmVyX2Z1bGwoc3otPmRyaXZlci0+cmJ1ZikpIHsKKwkJCWxpcmNfYnVmZmVyX3dyaXRlKHN6LT5kcml2ZXItPnJidWYsCisJCQkJCSAgICAodW5zaWduZWQgY2hhciAqKSAmZGF0YSk7CisJCX0gZWxzZSB7CisJCQlkcHJpbnRrKCJidWZmZXIgb3ZlcmZsb3ciLCBzei0+ZHJpdmVyLT5taW5vcik7CisJCX0KKwl9CisJaWYgKCFlbXB0eSkKKwkJd2FrZV91cCgmc3otPmRyaXZlci0+cmJ1Zi0+d2FpdF9wb2xsKTsKK30KKworc3RhdGljIHZvaWQgcHVzaChzdHJ1Y3QgdXNiX3N0cmVhbXphcCAqc3osIHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzei0+dGltZXJfbG9jaywgZmxhZ3MpOworCWlmIChsaXJjX2J1ZmZlcl9mdWxsKHN6LT5kZWxheV9idWYpKSB7CisJCWludCByZWFkX2RhdGE7CisKKwkJbGlyY19idWZmZXJfcmVhZChzei0+ZGVsYXlfYnVmLAorCQkJCSAgICh1bnNpZ25lZCBjaGFyICopICZyZWFkX2RhdGEpOworCQlpZiAoIWxpcmNfYnVmZmVyX2Z1bGwoc3otPmRyaXZlci0+cmJ1ZikpIHsKKwkJCWxpcmNfYnVmZmVyX3dyaXRlKHN6LT5kcml2ZXItPnJidWYsCisJCQkJCSAgICAodW5zaWduZWQgY2hhciAqKSAmcmVhZF9kYXRhKTsKKwkJfSBlbHNlIHsKKwkJCWRwcmludGsoImJ1ZmZlciBvdmVyZmxvdyIsIHN6LT5kcml2ZXItPm1pbm9yKTsKKwkJfQorCX0KKworCWxpcmNfYnVmZmVyX3dyaXRlKHN6LT5kZWxheV9idWYsIGRhdGEpOworCisJaWYgKCFzei0+dGltZXJfcnVubmluZykgeworCQlzei0+ZGVsYXlfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWi8xMDsKKwkJYWRkX3RpbWVyKCZzei0+ZGVsYXlfdGltZXIpOworCQlzei0+dGltZXJfcnVubmluZyA9IDE7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3otPnRpbWVyX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgcHVzaF9mdWxsX3B1bHNlKHN0cnVjdCB1c2Jfc3RyZWFtemFwICpzeiwKKwkJCSAgICB1bnNpZ25lZCBjaGFyIHZhbHVlKQoreworCWludCBwdWxzZTsKKworCWlmIChzei0+aWRsZSkgeworCQlsb25nIGRlbHR2OworCQlpbnQgdG1wOworCisJCXN6LT5zaWduYWxfbGFzdCA9IHN6LT5zaWduYWxfc3RhcnQ7CisJCWRvX2dldHRpbWVvZmRheSgmc3otPnNpZ25hbF9zdGFydCk7CisKKwkJZGVsdHYgPSBzei0+c2lnbmFsX3N0YXJ0LnR2X3NlYy1zei0+c2lnbmFsX2xhc3QudHZfc2VjOworCQlpZiAoZGVsdHYgPiAxNSkgeworCQkJLyogcmVhbGx5IGxvbmcgdGltZSAqLworCQkJdG1wID0gTElSQ19TUEFDRShMSVJDX1ZBTFVFX01BU0spOworCQl9IGVsc2UgeworCQkJdG1wID0gKGludCkgKGRlbHR2KjEwMDAwMDArCisJCQkJCXN6LT5zaWduYWxfc3RhcnQudHZfdXNlYyAtCisJCQkJCXN6LT5zaWduYWxfbGFzdC50dl91c2VjKTsKKwkJCXRtcCAtPSBzei0+c3VtOworCQkJdG1wID0gTElSQ19TUEFDRSh0bXApOworCQl9CisJCWRwcmludGsoImxzICV1Iiwgc3otPmRyaXZlci0+bWlub3IsIHRtcCk7CisJCXB1c2goc3osIChjaGFyICopJnRtcCk7CisKKwkJc3otPmlkbGUgPSAwOworCQlzei0+c3VtID0gMDsKKwl9CisKKwlwdWxzZSA9ICgoaW50KSB2YWx1ZSkgKiBTVFJFQU1aQVBfUkVTT0xVVElPTjsKKwlwdWxzZSArPSBTVFJFQU1aQVBfUkVTT0xVVElPTiAvIDI7CisJc3otPnN1bSArPSBwdWxzZTsKKwlwdWxzZSA9IExJUkNfUFVMU0UocHVsc2UpOworCisJZHByaW50aygicCAldSIsIHN6LT5kcml2ZXItPm1pbm9yLCBwdWxzZSAmIFBVTFNFX01BU0spOworCXB1c2goc3osIChjaGFyICopJnB1bHNlKTsKK30KKworc3RhdGljIHZvaWQgcHVzaF9oYWxmX3B1bHNlKHN0cnVjdCB1c2Jfc3RyZWFtemFwICpzeiwKKwkJCSAgICB1bnNpZ25lZCBjaGFyIHZhbHVlKQoreworCXB1c2hfZnVsbF9wdWxzZShzeiwgKHZhbHVlICYgU1RSRUFNWkFQX1BVTFNFX01BU0spPj40KTsKK30KKworc3RhdGljIHZvaWQgcHVzaF9mdWxsX3NwYWNlKHN0cnVjdCB1c2Jfc3RyZWFtemFwICpzeiwKKwkJCSAgICB1bnNpZ25lZCBjaGFyIHZhbHVlKQoreworCWludCBzcGFjZTsKKworCXNwYWNlID0gKChpbnQpIHZhbHVlKSpTVFJFQU1aQVBfUkVTT0xVVElPTjsKKwlzcGFjZSArPSBTVFJFQU1aQVBfUkVTT0xVVElPTi8yOworCXN6LT5zdW0gKz0gc3BhY2U7CisJc3BhY2UgPSBMSVJDX1NQQUNFKHNwYWNlKTsKKwlkcHJpbnRrKCJzICV1Iiwgc3otPmRyaXZlci0+bWlub3IsIHNwYWNlKTsKKwlwdXNoKHN6LCAoY2hhciAqKSZzcGFjZSk7Cit9CisKK3N0YXRpYyB2b2lkIHB1c2hfaGFsZl9zcGFjZShzdHJ1Y3QgdXNiX3N0cmVhbXphcCAqc3osCisJCQkgICAgdW5zaWduZWQgY2hhciB2YWx1ZSkKK3sKKwlwdXNoX2Z1bGxfc3BhY2Uoc3osIHZhbHVlICYgU1RSRUFNWkFQX1NQQUNFX01BU0spOworfQorCisvKioKKyAqIHVzYl9zdHJlYW16YXBfaXJxIC0gSVJRIGhhbmRsZXIKKyAqCisgKiBUaGlzIHByb2NlZHVyZSBpcyBpbnZva2VkIG9uIHJlY2VwdGlvbiBvZiBkYXRhIGZyb20KKyAqIHRoZSB1c2IgcmVtb3RlLgorICovCitzdGF0aWMgdm9pZCB1c2Jfc3RyZWFtemFwX2lycShzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVzYl9zdHJlYW16YXAgKnN6OworCWludAkJbGVuOworCXVuc2lnbmVkIGludAlpID0gMDsKKworCWlmICghdXJiKQorCQlyZXR1cm47CisKKwlzeiA9IHVyYi0+Y29udGV4dDsKKwlsZW4gPSB1cmItPmFjdHVhbF9sZW5ndGg7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKgorCQkgKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cC4KKwkJICogc3ogbWlnaHQgYWxyZWFkeSBiZSBpbnZhbGlkIGF0IHRoaXMgcG9pbnQKKwkJICovCisJCWRwcmludGsoInVyYiBzdGF0dXM6ICVkIiwgLTEsIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWRwcmludGsoInJlY2VpdmVkICVkIiwgc3otPmRyaXZlci0+bWlub3IsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJaWYgKCFzei0+Zmx1c2gpIHsKKwkJZm9yIChpID0gMDsgaSA8IHVyYi0+YWN0dWFsX2xlbmd0aDsgaSsrKSB7CisJCQlkcHJpbnRrKCIlZDogJXgiLCBzei0+ZHJpdmVyLT5taW5vciwKKwkJCQlpLCAodW5zaWduZWQgY2hhcikgc3otPmJ1Zl9pbltpXSk7CisJCQlzd2l0Y2ggKHN6LT5kZWNvZGVyX3N0YXRlKSB7CisJCQljYXNlIFB1bHNlU3BhY2U6CisJCQkJaWYgKChzei0+YnVmX2luW2ldJlNUUkVBTVpBUF9QVUxTRV9NQVNLKSA9PQorCQkJCSAgICBTVFJFQU1aQVBfUFVMU0VfTUFTSykgeworCQkJCQlzei0+ZGVjb2Rlcl9zdGF0ZSA9IEZ1bGxQdWxzZTsKKwkJCQkJY29udGludWU7CisJCQkJfSBlbHNlIGlmICgoc3otPmJ1Zl9pbltpXSZTVFJFQU1aQVBfU1BBQ0VfTUFTSykKKwkJCQkJICAgPT0gU1RSRUFNWkFQX1NQQUNFX01BU0spIHsKKwkJCQkJcHVzaF9oYWxmX3B1bHNlKHN6LCBzei0+YnVmX2luW2ldKTsKKwkJCQkJc3otPmRlY29kZXJfc3RhdGUgPSBGdWxsU3BhY2U7CisJCQkJCWNvbnRpbnVlOworCQkJCX0gZWxzZSB7CisJCQkJCXB1c2hfaGFsZl9wdWxzZShzeiwgc3otPmJ1Zl9pbltpXSk7CisJCQkJCXB1c2hfaGFsZl9zcGFjZShzeiwgc3otPmJ1Zl9pbltpXSk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBGdWxsUHVsc2U6CisJCQkJcHVzaF9mdWxsX3B1bHNlKHN6LCBzei0+YnVmX2luW2ldKTsKKwkJCQlzei0+ZGVjb2Rlcl9zdGF0ZSA9IElnbm9yZVB1bHNlOworCQkJCWJyZWFrOworCQkJY2FzZSBGdWxsU3BhY2U6CisJCQkJaWYgKHN6LT5idWZfaW5baV0gPT0gU1RSRUFNWkFQX1RJTUVPVVQpIHsKKwkJCQkJc3otPmlkbGUgPSAxOworCQkJCQlzdG9wX3RpbWVyKHN6KTsKKwkJCQkJaWYgKHN6LT50aW1lb3V0X2VuYWJsZWQpIHsKKwkJCQkJCWludCB0aW1lb3V0ID0KKwkJCQkJCQlMSVJDX1RJTUVPVVQKKwkJCQkJCQkoU1RSRUFNWkFQX1RJTUVPVVQgKgorCQkJCQkJCVNUUkVBTVpBUF9SRVNPTFVUSU9OKTsKKwkJCQkJCXB1c2goc3osIChjaGFyICopJnRpbWVvdXQpOworCQkJCQl9CisJCQkJCWZsdXNoX2RlbGF5X2J1ZmZlcihzeik7CisJCQkJfSBlbHNlCisJCQkJCXB1c2hfZnVsbF9zcGFjZShzeiwgc3otPmJ1Zl9pbltpXSk7CisJCQkJc3otPmRlY29kZXJfc3RhdGUgPSBQdWxzZVNwYWNlOworCQkJCWJyZWFrOworCQkJY2FzZSBJZ25vcmVQdWxzZToKKwkJCQlpZiAoKHN6LT5idWZfaW5baV0mU1RSRUFNWkFQX1NQQUNFX01BU0spID09CisJCQkJICAgIFNUUkVBTVpBUF9TUEFDRV9NQVNLKSB7CisJCQkJCXN6LT5kZWNvZGVyX3N0YXRlID0gRnVsbFNwYWNlOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJcHVzaF9oYWxmX3NwYWNlKHN6LCBzei0+YnVmX2luW2ldKTsKKwkJCQlzei0+ZGVjb2Rlcl9zdGF0ZSA9IFB1bHNlU3BhY2U7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwl1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzdHJlYW16YXBfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnVubG9ja2VkX2lvY3RsCT0gc3RyZWFtemFwX2lvY3RsLAorCS5yZWFkCQk9IGxpcmNfZGV2X2ZvcF9yZWFkLAorCS53cml0ZQkJPSBsaXJjX2Rldl9mb3Bfd3JpdGUsCisJLnBvbGwJCT0gbGlyY19kZXZfZm9wX3BvbGwsCisJLm9wZW4JCT0gbGlyY19kZXZfZm9wX29wZW4sCisJLnJlbGVhc2UJPSBsaXJjX2Rldl9mb3BfY2xvc2UsCit9OworCisKKy8qKgorICoJc3RyZWFtemFwX3Byb2JlCisgKgorICoJQ2FsbGVkIGJ5IHVzYi1jb3JlIHRvIGFzc29jaWF0ZWQgd2l0aCBhIGNhbmRpZGF0ZSBkZXZpY2UKKyAqCU9uIGFueSBmYWlsdXJlIHRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIEVSUk9SCisgKglPbiBzdWNjZXNzIHJldHVybiAwCisgKi8KK3N0YXRpYyBpbnQgc3RyZWFtemFwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfaG9zdDsKKwlzdHJ1Y3QgdXNiX3N0cmVhbXphcCAqc3o7CisJc3RydWN0IGxpcmNfZHJpdmVyICpkcml2ZXI7CisJc3RydWN0IGxpcmNfYnVmZmVyICpsaXJjX2J1ZjsKKwlzdHJ1Y3QgbGlyY19idWZmZXIgKmRlbGF5X2J1ZjsKKwljaGFyIGJ1Zls2M10sIG5hbWVbMTI4XSA9ICIiOworCWludCByZXR2YWwgPSAtRU5PTUVNOworCWludCBtaW5vciA9IDA7CisKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgZGV2aWNlIGRyaXZlciBzcGVjaWZpYyBkYXRhICovCisJc3ogPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX3N0cmVhbXphcCksIEdGUF9LRVJORUwpOworCWlmIChzeiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXN6LT51ZGV2ID0gdWRldjsKKwlzei0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworCisJLyogQ2hlY2sgdG8gZW5zdXJlIGVuZHBvaW50IGluZm9ybWF0aW9uIG1hdGNoZXMgcmVxdWlyZW1lbnRzICovCisJaWZhY2VfaG9zdCA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7CisKKwlpZiAoaWZhY2VfaG9zdC0+ZGVzYy5iTnVtRW5kcG9pbnRzICE9IDEpIHsKKwkJZXJyKCIlczogVW5leHBlY3RlZCBkZXNjLmJOdW1FbmRwb2ludHMgKCVkKSIsIF9fZnVuY19fLAorCQkgICAgaWZhY2VfaG9zdC0+ZGVzYy5iTnVtRW5kcG9pbnRzKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBmcmVlX3N6OworCX0KKworCXN6LT5lbmRwb2ludCA9ICYoaWZhY2VfaG9zdC0+ZW5kcG9pbnRbMF0uZGVzYyk7CisJaWYgKChzei0+ZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spCisJICAgICE9IFVTQl9ESVJfSU4pIHsKKwkJZXJyKCIlczogZW5kcG9pbnQgZG9lc24ndCBtYXRjaCBpbnB1dCBkZXZpY2UgMDIlMDJ4IiwKKwkJICAgIF9fZnVuY19fLCBzei0+ZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGZyZWVfc3o7CisJfQorCisJaWYgKChzei0+ZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQorCSAgICAhPSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpIHsKKwkJZXJyKCIlczogZW5kcG9pbnQgYXR0cmlidXRlcyBkb24ndCBtYXRjaCB4ZmVyIDAyJTAyeCIsCisJCSAgICBfX2Z1bmNfXywgc3otPmVuZHBvaW50LT5ibUF0dHJpYnV0ZXMpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGZyZWVfc3o7CisJfQorCisJaWYgKHN6LT5lbmRwb2ludC0+d01heFBhY2tldFNpemUgPT0gMCkgeworCQllcnIoIiVzOiBlbmRwb2ludCBtZXNzYWdlIHNpemU9PTA/ICIsIF9fZnVuY19fKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBmcmVlX3N6OworCX0KKworCS8qIEFsbG9jYXRlIHRoZSBVU0IgYnVmZmVyIGFuZCBJUlEgVVJCICovCisKKwlzei0+YnVmX2luX2xlbiA9IHN6LT5lbmRwb2ludC0+d01heFBhY2tldFNpemU7CisJc3otPmJ1Zl9pbiA9IHVzYl9hbGxvY19jb2hlcmVudChzei0+dWRldiwgc3otPmJ1Zl9pbl9sZW4sCisJCQkJICAgICAgR0ZQX0FUT01JQywgJnN6LT5kbWFfaW4pOworCWlmIChzei0+YnVmX2luID09IE5VTEwpCisJCWdvdG8gZnJlZV9zejsKKworCXN6LT51cmJfaW4gPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmIChzei0+dXJiX2luID09IE5VTEwpCisJCWdvdG8gZnJlZV9zejsKKworCS8qIENvbm5lY3QgdGhpcyBkZXZpY2UgdG8gdGhlIExJUkMgc3ViLXN5c3RlbSAqLworCWRyaXZlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsaXJjX2RyaXZlciksIEdGUF9LRVJORUwpOworCWlmICghZHJpdmVyKQorCQlnb3RvIGZyZWVfc3o7CisKKwlsaXJjX2J1ZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBsaXJjX2J1ZmZlciksIEdGUF9LRVJORUwpOworCWlmICghbGlyY19idWYpCisJCWdvdG8gZnJlZV9kcml2ZXI7CisJaWYgKGxpcmNfYnVmZmVyX2luaXQobGlyY19idWYsIHNpemVvZihpbnQpLCBTVFJFQU1aQVBfQlVGX0xFTikpCisJCWdvdG8ga2ZyZWVfbGlyY19idWY7CisKKwlkZWxheV9idWYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGlyY19idWZmZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRlbGF5X2J1ZikKKwkJZ290byBmcmVlX2xpcmNfYnVmOworCWlmIChsaXJjX2J1ZmZlcl9pbml0KGRlbGF5X2J1Ziwgc2l6ZW9mKGludCksIFNUUkVBTVpBUF9CVUZfTEVOKSkKKwkJZ290byBrZnJlZV9kZWxheV9idWY7CisKKwlzei0+ZHJpdmVyID0gZHJpdmVyOworCXN0cmNweShzei0+ZHJpdmVyLT5uYW1lLCBEUklWRVJfTkFNRSk7CisJc3otPmRyaXZlci0+bWlub3IgPSAtMTsKKwlzei0+ZHJpdmVyLT5zYW1wbGVfcmF0ZSA9IDA7CisJc3otPmRyaXZlci0+Y29kZV9sZW5ndGggPSBzaXplb2YoaW50KSAqIDg7CisJc3otPmRyaXZlci0+ZmVhdHVyZXMgPSBMSVJDX0NBTl9SRUNfTU9ERTIgfAorCQlMSVJDX0NBTl9HRVRfUkVDX1JFU09MVVRJT04gfAorCQlMSVJDX0NBTl9TRVRfUkVDX1RJTUVPVVQ7CisJc3otPmRyaXZlci0+ZGF0YSA9IHN6OworCXN6LT5kcml2ZXItPm1pbl90aW1lb3V0ID0gU1RSRUFNWkFQX1RJTUVPVVQgKiBTVFJFQU1aQVBfUkVTT0xVVElPTjsKKwlzei0+ZHJpdmVyLT5tYXhfdGltZW91dCA9IFNUUkVBTVpBUF9USU1FT1VUICogU1RSRUFNWkFQX1JFU09MVVRJT047CisJc3otPmRyaXZlci0+cmJ1ZiA9IGxpcmNfYnVmOworCXN6LT5kZWxheV9idWYgPSBkZWxheV9idWY7CisJc3otPmRyaXZlci0+c2V0X3VzZV9pbmMgPSAmc3RyZWFtemFwX3VzZV9pbmM7CisJc3otPmRyaXZlci0+c2V0X3VzZV9kZWMgPSAmc3RyZWFtemFwX3VzZV9kZWM7CisJc3otPmRyaXZlci0+Zm9wcyA9ICZzdHJlYW16YXBfZm9wczsKKwlzei0+ZHJpdmVyLT5kZXYgPSAmaW50ZXJmYWNlLT5kZXY7CisJc3otPmRyaXZlci0+b3duZXIgPSBUSElTX01PRFVMRTsKKworCXN6LT5pZGxlID0gMTsKKwlzei0+ZGVjb2Rlcl9zdGF0ZSA9IFB1bHNlU3BhY2U7CisJaW5pdF90aW1lcigmc3otPmRlbGF5X3RpbWVyKTsKKwlzei0+ZGVsYXlfdGltZXIuZnVuY3Rpb24gPSBkZWxheV90aW1lb3V0OworCXN6LT5kZWxheV90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHN6OworCXN6LT50aW1lcl9ydW5uaW5nID0gMDsKKwlzcGluX2xvY2tfaW5pdCgmc3otPnRpbWVyX2xvY2spOworCisJaW5pdF90aW1lcigmc3otPmZsdXNoX3RpbWVyKTsKKwlzei0+Zmx1c2hfdGltZXIuZnVuY3Rpb24gPSBmbHVzaF90aW1lb3V0OworCXN6LT5mbHVzaF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHN6OworCS8qIENvbXBsZXRlIGZpbmFsIGluaXRpYWxpc2F0aW9ucyAqLworCisJdXNiX2ZpbGxfaW50X3VyYihzei0+dXJiX2luLCB1ZGV2LAorCQl1c2JfcmN2aW50cGlwZSh1ZGV2LCBzei0+ZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAorCQlzei0+YnVmX2luLCBzei0+YnVmX2luX2xlbiwgdXNiX3N0cmVhbXphcF9pcnEsIHN6LAorCQlzei0+ZW5kcG9pbnQtPmJJbnRlcnZhbCk7CisJc3otPnVyYl9pbi0+dHJhbnNmZXJfZG1hID0gc3otPmRtYV9pbjsKKwlzei0+dXJiX2luLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKworCWlmICh1ZGV2LT5kZXNjcmlwdG9yLmlNYW51ZmFjdHVyZXIKKwkgICAgJiYgdXNiX3N0cmluZyh1ZGV2LCB1ZGV2LT5kZXNjcmlwdG9yLmlNYW51ZmFjdHVyZXIsCisJCQkgIGJ1Ziwgc2l6ZW9mKGJ1ZikpID4gMCkKKwkJc3RybGNweShuYW1lLCBidWYsIHNpemVvZihuYW1lKSk7CisKKwlpZiAodWRldi0+ZGVzY3JpcHRvci5pUHJvZHVjdAorCSAgICAmJiB1c2Jfc3RyaW5nKHVkZXYsIHVkZXYtPmRlc2NyaXB0b3IuaVByb2R1Y3QsCisJCQkgIGJ1Ziwgc2l6ZW9mKGJ1ZikpID4gMCkKKwkJc25wcmludGYobmFtZSArIHN0cmxlbihuYW1lKSwgc2l6ZW9mKG5hbWUpIC0gc3RybGVuKG5hbWUpLAorCQkJICIgJXMiLCBidWYpOworCisJbWlub3IgPSBsaXJjX3JlZ2lzdGVyX2RyaXZlcihkcml2ZXIpOworCisJaWYgKG1pbm9yIDwgMCkKKwkJZ290byBmcmVlX2RlbGF5X2J1ZjsKKworCXN6LT5kcml2ZXItPm1pbm9yID0gbWlub3I7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgc3opOworCisJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiWyVkXTogJXMgb24gdXNiJWQ6JWQgYXR0YWNoZWRcbiIsCisJICAgICAgIHN6LT5kcml2ZXItPm1pbm9yLCBuYW1lLAorCSAgICAgICB1ZGV2LT5idXMtPmJ1c251bSwgc3otPnVkZXYtPmRldm51bSk7CisKKwlyZXR1cm4gMDsKKworZnJlZV9kZWxheV9idWY6CisJbGlyY19idWZmZXJfZnJlZShzei0+ZGVsYXlfYnVmKTsKK2tmcmVlX2RlbGF5X2J1ZjoKKwlrZnJlZShkZWxheV9idWYpOworZnJlZV9saXJjX2J1ZjoKKwlsaXJjX2J1ZmZlcl9mcmVlKHN6LT5kcml2ZXItPnJidWYpOwora2ZyZWVfbGlyY19idWY6CisJa2ZyZWUobGlyY19idWYpOworZnJlZV9kcml2ZXI6CisJa2ZyZWUoZHJpdmVyKTsKK2ZyZWVfc3o6CisJaWYgKHJldHZhbCA9PSAtRU5PTUVNKQorCQllcnIoIk91dCBvZiBtZW1vcnkiKTsKKworCWlmIChzeikgeworCQl1c2JfZnJlZV91cmIoc3otPnVyYl9pbik7CisJCXVzYl9mcmVlX2NvaGVyZW50KHVkZXYsIHN6LT5idWZfaW5fbGVuLCBzei0+YnVmX2luLCBzei0+ZG1hX2luKTsKKwkJa2ZyZWUoc3opOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgc3RyZWFtemFwX3VzZV9pbmModm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgdXNiX3N0cmVhbXphcCAqc3ogPSBkYXRhOworCisJaWYgKCFzeikgeworCQlkcHJpbnRrKCIlcyBjYWxsZWQgd2l0aCBubyBjb250ZXh0IiwgLTEsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRwcmludGsoInNldCB1c2UgaW5jIiwgc3otPmRyaXZlci0+bWlub3IpOworCisJbGlyY19idWZmZXJfY2xlYXIoc3otPmRyaXZlci0+cmJ1Zik7CisJbGlyY19idWZmZXJfY2xlYXIoc3otPmRlbGF5X2J1Zik7CisKKwlzei0+Zmx1c2hfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWjsKKwlzei0+Zmx1c2ggPSAxOworCWFkZF90aW1lcigmc3otPmZsdXNoX3RpbWVyKTsKKworCXN6LT51cmJfaW4tPmRldiA9IHN6LT51ZGV2OworCWlmICh1c2Jfc3VibWl0X3VyYihzei0+dXJiX2luLCBHRlBfQVRPTUlDKSkgeworCQlkcHJpbnRrKCJvcGVuIHJlc3VsdCA9IC1FSU8gZXJyb3Igc3VibWl0dGluZyB1cmIiLAorCQkJc3otPmRyaXZlci0+bWlub3IpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJc3otPmluX3VzZSsrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN0cmVhbXphcF91c2VfZGVjKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHVzYl9zdHJlYW16YXAgKnN6ID0gZGF0YTsKKworCWlmICghc3opIHsKKwkJZHByaW50aygiJXMgY2FsbGVkIHdpdGggbm8gY29udGV4dCIsIC0xLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisJZHByaW50aygic2V0IHVzZSBkZWMiLCBzei0+ZHJpdmVyLT5taW5vcik7CisKKwlpZiAoc3otPmZsdXNoKSB7CisJCXN6LT5mbHVzaCA9IDA7CisJCWRlbF90aW1lcl9zeW5jKCZzei0+Zmx1c2hfdGltZXIpOworCX0KKworCXVzYl9raWxsX3VyYihzei0+dXJiX2luKTsKKworCXN0b3BfdGltZXIoc3opOworCisJc3otPmluX3VzZS0tOworfQorCitzdGF0aWMgbG9uZyBzdHJlYW16YXBfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCByZXN1bHQgPSAwOworCWludCB2YWw7CisJc3RydWN0IHVzYl9zdHJlYW16YXAgKnN6ID0gbGlyY19nZXRfcGRhdGEoZmlsZXApOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIExJUkNfR0VUX1JFQ19SRVNPTFVUSU9OOgorCQlyZXN1bHQgPSBwdXRfdXNlcihTVFJFQU1aQVBfUkVTT0xVVElPTiwgKHVuc2lnbmVkIGludCAqKSBhcmcpOworCQlicmVhazsKKwljYXNlIExJUkNfU0VUX1JFQ19USU1FT1VUOgorCQlyZXN1bHQgPSBnZXRfdXNlcih2YWwsIChpbnQgKilhcmcpOworCQlpZiAocmVzdWx0ID09IDApIHsKKwkJCWlmICh2YWwgPT0gU1RSRUFNWkFQX1RJTUVPVVQgKiBTVFJFQU1aQVBfUkVTT0xVVElPTikKKwkJCQlzei0+dGltZW91dF9lbmFibGVkID0gMTsKKwkJCWVsc2UgaWYgKHZhbCA9PSAwKQorCQkJCXN6LT50aW1lb3V0X2VuYWJsZWQgPSAwOworCQkJZWxzZQorCQkJCXJlc3VsdCA9IC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGxpcmNfZGV2X2ZvcF9pb2N0bChmaWxlcCwgY21kLCBhcmcpOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIHN0cmVhbXphcF9kaXNjb25uZWN0CisgKgorICogQ2FsbGVkIGJ5IHRoZSB1c2IgY29yZSB3aGVuIHRoZSBkZXZpY2UgaXMgcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0uCisgKgorICogVGhpcyByb3V0aW5lIGd1YXJhbnRlZXMgdGhhdCB0aGUgZHJpdmVyIHdpbGwgbm90IHN1Ym1pdCBhbnkgbW9yZSB1cmJzCisgKiBieSBjbGVhcmluZyBkZXYtPnVkZXYuICBJdCBpcyBhbHNvIHN1cHBvc2VkIHRvIHRlcm1pbmF0ZSBhbnkgY3VycmVudGx5CisgKiBhY3RpdmUgdXJicy4gIFVuZm9ydHVuYXRlbHksIHVzYl9idWxrX21zZygpLCB1c2VkIGluIHN0cmVhbXphcF9yZWFkKCksCisgKiBkb2VzIG5vdCBwcm92aWRlIGFueSB3YXkgdG8gZG8gdGhpcy4KKyAqLworc3RhdGljIHZvaWQgc3RyZWFtemFwX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX3N0cmVhbXphcCAqc3o7CisJaW50IGVycm51bTsKKwlpbnQgbWlub3I7CisKKwlzeiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKworCS8qIHVucmVnaXN0ZXIgZnJvbSB0aGUgTElSQyBzdWItc3lzdGVtICovCisKKwllcnJudW0gPSBsaXJjX3VucmVnaXN0ZXJfZHJpdmVyKHN6LT5kcml2ZXItPm1pbm9yKTsKKwlpZiAoZXJybnVtICE9IDApCisJCWRwcmludGsoImVycm9yIGluIGxpcmNfdW5yZWdpc3RlcjogKHJldHVybmVkICVkKSIsCisJCQlzei0+ZHJpdmVyLT5taW5vciwgZXJybnVtKTsKKworCWxpcmNfYnVmZmVyX2ZyZWUoc3otPmRlbGF5X2J1Zik7CisJbGlyY19idWZmZXJfZnJlZShzei0+ZHJpdmVyLT5yYnVmKTsKKworCS8qIHVucmVnaXN0ZXIgZnJvbSB0aGUgVVNCIHN1Yi1zeXN0ZW0gKi8KKworCXVzYl9mcmVlX3VyYihzei0+dXJiX2luKTsKKworCXVzYl9mcmVlX2NvaGVyZW50KHN6LT51ZGV2LCBzei0+YnVmX2luX2xlbiwgc3otPmJ1Zl9pbiwgc3otPmRtYV9pbik7CisKKwltaW5vciA9IHN6LT5kcml2ZXItPm1pbm9yOworCWtmcmVlKHN6LT5kcml2ZXItPnJidWYpOworCWtmcmVlKHN6LT5kcml2ZXIpOworCWtmcmVlKHN6LT5kZWxheV9idWYpOworCWtmcmVlKHN6KTsKKworCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIlslZF06IGRpc2Nvbm5lY3RlZFxuIiwgbWlub3IpOworfQorCitzdGF0aWMgaW50IHN0cmVhbXphcF9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3sKKwlzdHJ1Y3QgdXNiX3N0cmVhbXphcCAqc3ogPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiWyVkXTogc3VzcGVuZFxuIiwgc3otPmRyaXZlci0+bWlub3IpOworCWlmIChzei0+aW5fdXNlKSB7CisJCWlmIChzei0+Zmx1c2gpIHsKKwkJCXN6LT5mbHVzaCA9IDA7CisJCQlkZWxfdGltZXJfc3luYygmc3otPmZsdXNoX3RpbWVyKTsKKwkJfQorCisJCXN0b3BfdGltZXIoc3opOworCisJCXVzYl9raWxsX3VyYihzei0+dXJiX2luKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RyZWFtemFwX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX3N0cmVhbXphcCAqc3ogPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJbGlyY19idWZmZXJfY2xlYXIoc3otPmRyaXZlci0+cmJ1Zik7CisJbGlyY19idWZmZXJfY2xlYXIoc3otPmRlbGF5X2J1Zik7CisKKwlpZiAoc3otPmluX3VzZSkgeworCQlzei0+Zmx1c2hfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWjsKKwkJc3otPmZsdXNoID0gMTsKKwkJYWRkX3RpbWVyKCZzei0+Zmx1c2hfdGltZXIpOworCisJCXN6LT51cmJfaW4tPmRldiA9IHN6LT51ZGV2OworCQlpZiAodXNiX3N1Ym1pdF91cmIoc3otPnVyYl9pbiwgR0ZQX0FUT01JQykpIHsKKwkJCWRwcmludGsoIm9wZW4gcmVzdWx0ID0gLUVJTyBlcnJvciBzdWJtaXR0aW5nIHVyYiIsCisJCQkJc3otPmRyaXZlci0+bWlub3IpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJdXNiX3N0cmVhbXphcF9pbml0CisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHVzYl9zdHJlYW16YXBfaW5pdCh2b2lkKQoreworCWludCByZXN1bHQ7CisKKwkvKiByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCisJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZzdHJlYW16YXBfZHJpdmVyKTsKKworCWlmIChyZXN1bHQpIHsKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLAorCQkgICAgcmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICIgIiBEUklWRVJfVkVSU0lPTiAiIHJlZ2lzdGVyZWRcbiIpOworCXJldHVybiAwOworfQorCisvKioKKyAqCXVzYl9zdHJlYW16YXBfZXhpdAorICovCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3N0cmVhbXphcF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnN0cmVhbXphcF9kcml2ZXIpOworfQorCisKK21vZHVsZV9pbml0KHVzYl9zdHJlYW16YXBfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2Jfc3RyZWFtemFwX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJDaHJpc3RvcGggQmFydGVsbXVzLCBHcmVnIFdpY2toYW0sIEFkcmlhbiBEZXdodXJzdCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIGRlYnVnZ2luZyBtZXNzYWdlcyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY190dHVzYmlyLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3R0dXNiaXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzQ1YWI5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY190dHVzYmlyLmMKQEAgLTAsMCArMSwzOTYgQEAKKy8qCisgKiBsaXJjX3R0dXNiaXIuYworICoKKyAqIGxpcmNfdHR1c2JpciAtIExJUkMgZGV2aWNlIGRyaXZlciBmb3IgdGhlIFRlY2hub1RyZW5kIFVTQiBJUiBSZWNlaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBTdGVmYW4gTWFjaGVyIDxzdF9tYWtlci1saXJjQHlhaG9vLmRlPgorICoKKyAqIFRoaXMgTElSQyBkcml2ZXIgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBUZWNobm9UcmVuZCBVU0IgSVIgUmVjZWl2ZXIuCisgKiBUaGUgcmVjZWl2ZXIgZGVsaXZlcnMgdGhlIElSIHNpZ25hbCBhcyByYXcgc2FtcGxlZCB0cnVlL2ZhbHNlIGRhdGEgaW4KKyAqIGlzb2Nocm9ub3VzIFVTQiBwYWNrZXRzIGVhY2ggb2Ygc2l6ZSAxMjggYnl0ZS4KKyAqIEN1cnJlbnRseSB0aGUgZHJpdmVyIHJlZHVjZXMgdGhlIHNhbXBsaW5nIHJhdGUgYnkgZmFjdG9yIG9mIDggYXMgdGhpcworICogaXMgc3RpbGwgbW9yZSB0aGFuIGVub3VnaCB0byBkZWNvZGUgUkMtNSAtIG90aGVycyBzaG91bGQgYmUgYW5hbHl6ZWQuCisgKiBCdXQgdGhlIGRyaXZlciBkb2VzIG5vdCByZWx5IG9uIFJDLTUgaXQgc2hvdWxkIGJlIGFibGUgdG8gZGVjb2RlIGV2ZXJ5CisgKiBJUiBzaWduYWwgdGhhdCBpcyBub3QgdG9vIGZhc3QuCisgKi8KKworLyoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSA8bWVkaWEvbGlyYy5oPgorI2luY2x1ZGUgPG1lZGlhL2xpcmNfZGV2Lmg+CisKK01PRFVMRV9ERVNDUklQVElPTigiVGVjaG5vVHJlbmQgVVNCIElSIGRldmljZSBkcml2ZXIgZm9yIExJUkMiKTsKK01PRFVMRV9BVVRIT1IoIlN0ZWZhbiBNYWNoZXIgKHN0X21ha2VyLWxpcmNAeWFob28uZGUpIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qICNkZWZpbmUgREVCVUcgKi8KKyNpZmRlZiBERUJVRworI2RlZmluZSBEUFJJTlRLIHByaW50aworI2Vsc2UKKyNkZWZpbmUgRFBSSU5USyhfeF8sIGEuLi4pCisjZW5kaWYKKworLyogZnVuY3Rpb24gZGVjbGFyYXRpb25zICovCitzdGF0aWMgaW50IHByb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIHZvaWQgZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CitzdGF0aWMgdm9pZCB1cmJfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyBpbnQgc2V0X3VzZV9pbmModm9pZCAqZGF0YSk7CitzdGF0aWMgdm9pZCBzZXRfdXNlX2RlYyh2b2lkICpkYXRhKTsKKworc3RhdGljIGludCBudW1fdXJicyA9IDI7Cittb2R1bGVfcGFyYW0obnVtX3VyYnMsIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKG51bV91cmJzLAorCQkgIk51bWJlciBvZiBVUkJzIGluIHF1ZXVlLiBUcnkgdG8gaW5jcmVhc2UgdG8gNCBpbiBjYXNlICIKKwkJICJvZiBwcm9ibGVtcyAoZGVmYXVsdDogMjsgbWluaW11bTogMikiKTsKKworLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV9pZF90YWJsZVtdID0geworCS8qIFRlY2hub1RyZW5kIFVTQiBJUiBSZWNlaXZlciAqLworCXsgVVNCX0RFVklDRSgweDBCNDgsIDB4MjAwMykgfSwKKwkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfaWRfdGFibGUpOworCisvKiBVU0IgZHJpdmVyIGRlZmluaXRpb24gKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2JfZHJpdmVyID0geworCS5uYW1lID0gIlRUVVNCSVIiLAorCS5pZF90YWJsZSA9ICYoZGV2aWNlX2lkX3RhYmxlWzBdKSwKKwkucHJvYmUgPSBwcm9iZSwKKwkuZGlzY29ubmVjdCA9IGRpc2Nvbm5lY3QsCit9OworCisvKiBVU0IgZGV2aWNlIGRlZmluaXRpb24gKi8KK3N0cnVjdCB0dHVzYmlyX2RldmljZSB7CisJc3RydWN0IHVzYl9kcml2ZXIgKnVzYl9kcml2ZXI7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZjsKKwlzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciBjbGFzc19kcml2ZXI7CisJdW5zaWduZWQgaW50IGlmbnVtOyAvKiBJbnRlcmZhY2UgbnVtYmVyIHRvIHVzZSAqLworCXVuc2lnbmVkIGludCBhbHRfc2V0dGluZzsgLyogYWx0ZXJuYXRlIHNldHRpbmcgdG8gdXNlICovCisJdW5zaWduZWQgaW50IGVuZHBvaW50OyAvKiBFbmRwb2ludCB0byB1c2UgKi8KKwlzdHJ1Y3QgdXJiICoqdXJiOyAvKiBudW1fdXJiIFVSQiBwb2ludGVycyovCisJY2hhciAqKmJ1ZmZlcjsgLyogMTI4IGJ5dGUgYnVmZmVyIGZvciBlYWNoIFVSQiAqLworCXN0cnVjdCBsaXJjX2J1ZmZlciByYnVmOyAvKiBCdWZmZXIgdG93YXJkcyBMSVJDICovCisJc3RydWN0IGxpcmNfZHJpdmVyIGRyaXZlcjsKKwlpbnQgbWlub3I7CisJaW50IGxhc3RfcHVsc2U7IC8qIHJlbWVtYmVycyBpZiBsYXN0IHJlY2VpdmVkIGJ5dGUgd2FzIHB1bHNlIG9yIHNwYWNlICovCisJaW50IGxhc3RfbnVtOyAvKiByZW1lbWJlcnMgaG93IG1hbnkgbGFzdCBieXRlcyBhcHBlYXJlZCAqLworCWludCBvcGVuZWQ7Cit9OworCisvKioqIExJUkMgc3BlY2lmaWMgZnVuY3Rpb25zICoqKi8KK3N0YXRpYyBpbnQgc2V0X3VzZV9pbmModm9pZCAqZGF0YSkKK3sKKwlpbnQgaSwgcmV0dmFsOworCXN0cnVjdCB0dHVzYmlyX2RldmljZSAqdHR1c2JpciA9IGRhdGE7CisKKwlEUFJJTlRLKCJTZW5kaW5nIGZpcnN0IFVSQnNcbiIpOworCS8qIEBUT0RPIERvIEkgbmVlZCB0byBjaGVjayBpZiBJIGFtIGFscmVhZHkgb3BlbmVkICovCisJdHR1c2Jpci0+b3BlbmVkID0gMTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fdXJiczsgaSsrKSB7CisJCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHR0dXNiaXItPnVyYltpXSwgR0ZQX0tFUk5FTCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCBvbiB1cmIgJWQiLAorCQkJICAgIF9fZnVuY19fLCBpKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF91c2VfZGVjKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHR0dXNiaXJfZGV2aWNlICp0dHVzYmlyID0gZGF0YTsKKworCURQUklOVEsoIkRldmljZSBjbG9zZWRcbiIpOworCisJdHR1c2Jpci0+b3BlbmVkID0gMDsKK30KKworLyoqKiBVU0Igc3BlY2lmaWMgZnVuY3Rpb25zICoqKi8KKworLyoKKyAqIFRoaXMgbWFwcGluZyB0YWJsZSBpcyB1c2VkIHRvIGRvIGEgdmVyeSBzaW1wbGUgZmlsdGVyaW5nIG9mIHRoZQorICogaW5wdXQgc2lnbmFsLgorICogRm9yIGEgdmFsdWUgd2l0aCBhdCBsZWFzdCA0IGJpdHMgc2V0IGl0IHJldHVybnMgMHhGRiBvdGhlcndpc2UKKyAqIDB4MDAuICBGb3IgZmFzdGVyIElSIHNpZ25hbHMgdGhpcyBjYW4gbm90IGJlIHVzZWQuIEJ1dCBmb3IgUkMtNSB3ZQorICogc3RpbGwgaGF2ZSBhYm91dCAxNCBzYW1wbGVzIHBlciBwdWxzZS9zcGFjZSwgaS5lLiB3ZSBzYW1wbGUgd2l0aCAxNAorICogdGltZXMgaGlnaGVyIGZyZXF1ZW5jeSB0aGFuIHRoZSBzaWduYWwgZnJlcXVlbmN5CisgKi8KK2NvbnN0IHVuc2lnbmVkIGNoYXIgbWFwX3RhYmxlW10gPSB7CisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwKKwkweDAwLCAweDAwLCAweDAwLCAweEZGLCAweDAwLCAweEZGLCAweEZGLCAweEZGLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZGLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkYsIDB4RkYsIDB4RkYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwKKwkweDAwLCAweDAwLCAweDAwLCAweEZGLCAweDAwLCAweEZGLCAweEZGLCAweEZGLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkYsIDB4RkYsIDB4RkYsCisJMHgwMCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwKKwkweDAwLCAweDAwLCAweDAwLCAweEZGLCAweDAwLCAweEZGLCAweEZGLCAweEZGLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGRiwgMHhGRiwgMHhGRiwKKwkweDAwLCAweDAwLCAweDAwLCAweEZGLCAweDAwLCAweEZGLCAweEZGLCAweEZGLAorCTB4MDAsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwKKwkweDAwLCAweDAwLCAweDAwLCAweEZGLCAweDAwLCAweEZGLCAweEZGLCAweEZGLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkYsIDB4RkYsIDB4RkYsCisJMHgwMCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKKwkweDAwLCAweDAwLCAweDAwLCAweEZGLCAweDAwLCAweEZGLCAweEZGLCAweEZGLAorCTB4MDAsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCisJMHgwMCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKKwkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGCit9OworCitzdGF0aWMgdm9pZCB1cmJfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB0dHVzYmlyX2RldmljZSAqdHR1c2JpcjsKKwl1bnNpZ25lZCBjaGFyICpidWY7CisJaW50IGk7CisJaW50IGw7CisKKwl0dHVzYmlyID0gdXJiLT5jb250ZXh0OworCisJaWYgKCF0dHVzYmlyLT5vcGVuZWQpCisJCXJldHVybjsKKworCWJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspIHsKKwkJLyogSGVyZSB3ZSBkbyB0aGUgZmlsdGVyaW5nIGFuZCBzb21lIGtpbmQgb2YgZG93biBzYW1wbGluZyAqLworCQlidWZbaV0gPSB+bWFwX3RhYmxlW2J1ZltpXV07CisJCWlmICh0dHVzYmlyLT5sYXN0X3B1bHNlID09IGJ1ZltpXSkgeworCQkJaWYgKHR0dXNiaXItPmxhc3RfbnVtIDwgUFVMU0VfTUFTSy82MykKKwkJCQl0dHVzYmlyLT5sYXN0X251bSsrOworCQkvKgorCQkgKiBlbHNlIHdlIGFyZSBpbiBhIGlkbGUgcGVyaW9kIGFuZCBkbyBub3QgbmVlZCB0bworCQkgKiBpbmNyZW1lbnQgYW55IGxvbmdlcgorCQkgKi8KKwkJfSBlbHNlIHsKKwkJCWwgPSB0dHVzYmlyLT5sYXN0X251bSAqIDYyOyAvKiBhYm91dCA2MiA9IHVzL2J5dGUgKi8KKwkJCWlmICh0dHVzYmlyLT5sYXN0X3B1bHNlKSAvKiBwdWxzZSBvciBzcGFjZT8gKi8KKwkJCQlsIHw9IFBVTFNFX0JJVDsKKwkJCWlmICghbGlyY19idWZmZXJfZnVsbCgmdHR1c2Jpci0+cmJ1ZikpIHsKKwkJCQlsaXJjX2J1ZmZlcl93cml0ZSgmdHR1c2Jpci0+cmJ1ZiwgKHZvaWQgKikmbCk7CisJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHVzYmlyLT5yYnVmLndhaXRfcG9sbCk7CisJCQl9CisJCQl0dHVzYmlyLT5sYXN0X251bSA9IDA7CisJCQl0dHVzYmlyLT5sYXN0X3B1bHNlID0gYnVmW2ldOworCQl9CisJfQorCXVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7IC8qIGtlZXAgZGF0YSByb2xsaW5nIDotKSAqLworfQorCisvKgorICogQ2FsbGVkIHdoZW5ldmVyIHRoZSBVU0Igc3Vic3lzdGVtIHRoaW5rcyB3ZSBjb3VsZCBiZSB0aGUgcmlnaHQgZHJpdmVyCisgKiB0byBoYW5kbGUgdGhpcyBkZXZpY2UKKyAqLworc3RhdGljIGludCBwcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCWludCBhbHRfc2V0LCBlbmRwOworCWludCBmb3VuZCA9IDA7CisJaW50IGksIGo7CisJaW50IHN0cnVjdF9zaXplOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmhvc3RfaW50ZXJmOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgKmludGVyZl9kZXNjOworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqaG9zdF9lbmRwb2ludDsKKwlzdHJ1Y3QgdHR1c2Jpcl9kZXZpY2UgKnR0dXNiaXI7CisKKwlEUFJJTlRLKCJNb2R1bGUgdHR1c2JpciBwcm9iZVxuIik7CisKKwkvKiBUbyByZWR1Y2UgbWVtb3J5IGZyYWdtZW50YXRpb24gd2UgdXNlIG9ubHkgb25lIGFsbG9jYXRpb24gKi8KKwlzdHJ1Y3Rfc2l6ZSA9ICBzaXplb2Yoc3RydWN0IHR0dXNiaXJfZGV2aWNlKSArCisJCShzaXplb2Yoc3RydWN0IHVyYiAqKSAqIG51bV91cmJzKSArCisJCShzaXplb2YoY2hhciAqKSAqIG51bV91cmJzKSArCisJCShudW1fdXJicyAqIDEyOCk7CisJdHR1c2JpciA9IGt6YWxsb2Moc3RydWN0X3NpemUsIEdGUF9LRVJORUwpOworCWlmICghdHR1c2JpcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0dHVzYmlyLT51cmIgPSAoc3RydWN0IHVyYiAqKikoKGNoYXIgKil0dHVzYmlyICsKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IHR0dXNiaXJfZGV2aWNlKSk7CisJdHR1c2Jpci0+YnVmZmVyID0gKGNoYXIgKiopKChjaGFyICopdHR1c2Jpci0+dXJiICsKKwkJCQkgICAoc2l6ZW9mKHN0cnVjdCB1cmIgKikgKiBudW1fdXJicykpOworCWZvciAoaSA9IDA7IGkgPCBudW1fdXJiczsgaSsrKQorCQl0dHVzYmlyLT5idWZmZXJbaV0gPSAoY2hhciAqKXR0dXNiaXItPmJ1ZmZlciArCisJCQkoc2l6ZW9mKGNoYXIgKikqbnVtX3VyYnMpICsgKGkgKiAxMjgpOworCisJdHR1c2Jpci0+dXNiX2RyaXZlciA9ICZ1c2JfZHJpdmVyOworCXR0dXNiaXItPmFsdF9zZXR0aW5nID0gLTE7CisJLyogQFRPRE8gY2hlY2sgaWYgZXJyb3IgY2FuIGJlIHJldHVybmVkICovCisJdHR1c2Jpci0+dWRldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZikpOworCXR0dXNiaXItPmludGVyZiA9IGludGY7CisJdHR1c2Jpci0+bGFzdF9wdWxzZSA9IDB4MDA7CisJdHR1c2Jpci0+bGFzdF9udW0gPSAwOworCisJLyoKKwkgKiBOb3cgbG9vayBmb3IgaW50ZXJmYWNlIHNldHRpbmcgd2UgY2FuIGhhbmRsZQorCSAqIFdlIGFyZSBzZWFyY2hpbmcgZm9yIHRoZSBhbHQgc2V0dGluZyB3aGVyZSBlbmQgcG9pbnQKKwkgKiAweDgyIGhhcyBtYXggcGFja2V0IHNpemUgMTYKKwkgKi8KKwlmb3IgKGFsdF9zZXQgPSAwOyBhbHRfc2V0IDwgaW50Zi0+bnVtX2FsdHNldHRpbmcgJiYgIWZvdW5kOyBhbHRfc2V0KyspIHsKKwkJaG9zdF9pbnRlcmYgPSAmaW50Zi0+YWx0c2V0dGluZ1thbHRfc2V0XTsKKwkJaW50ZXJmX2Rlc2MgPSAmaG9zdF9pbnRlcmYtPmRlc2M7CisJCWZvciAoZW5kcCA9IDA7IGVuZHAgPCBpbnRlcmZfZGVzYy0+Yk51bUVuZHBvaW50czsgZW5kcCsrKSB7CisJCQlob3N0X2VuZHBvaW50ID0gJmhvc3RfaW50ZXJmLT5lbmRwb2ludFtlbmRwXTsKKwkJCWlmICgoaG9zdF9lbmRwb2ludC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzID09IDB4ODIpICYmCisJCQkgICAgKGhvc3RfZW5kcG9pbnQtPmRlc2Mud01heFBhY2tldFNpemUgPT0gMHgxMCkpIHsKKwkJCQl0dHVzYmlyLT5hbHRfc2V0dGluZyA9IGFsdF9zZXQ7CisJCQkJdHR1c2Jpci0+ZW5kcG9pbnQgPSBlbmRwOworCQkJCWZvdW5kID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlpZiAodHR1c2Jpci0+YWx0X3NldHRpbmcgIT0gLTEpCisJCURQUklOVEsoImFsdCBzZXR0aW5nOiAlZFxuIiwgdHR1c2Jpci0+YWx0X3NldHRpbmcpOworCWVsc2UgeworCQllcnIoIkNvdWxkIG5vdCBmaW5kIGFsdGVybmF0ZSBzZXR0aW5nXG4iKTsKKwkJa2ZyZWUodHR1c2Jpcik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIE9LIGxldHMgc2V0dXAgdGhpcyBpbnRlcmZhY2Ugc2V0dGluZyAqLworCXVzYl9zZXRfaW50ZXJmYWNlKHR0dXNiaXItPnVkZXYsIDAsIHR0dXNiaXItPmFsdF9zZXR0aW5nKTsKKworCS8qIFN0b3JlIGRldmljZSBpbmZvIGluIGludGVyZmFjZSBzdHJ1Y3R1cmUgKi8KKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHR0dXNiaXIpOworCisJLyogUmVnaXN0ZXIgYXMgYSBMSVJDIGRyaXZlciAqLworCWlmIChsaXJjX2J1ZmZlcl9pbml0KCZ0dHVzYmlyLT5yYnVmLCBzaXplb2YoaW50KSwgMjU2KSA8IDApIHsKKwkJZXJyKCJDb3VsZCBub3QgZ2V0IG1lbW9yeSBmb3IgTElSQyBkYXRhIGJ1ZmZlclxuIik7CisJCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJCWtmcmVlKHR0dXNiaXIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJc3RyY3B5KHR0dXNiaXItPmRyaXZlci5uYW1lLCAiVFRVU0JJUiIpOworCXR0dXNiaXItPmRyaXZlci5taW5vciA9IC0xOworCXR0dXNiaXItPmRyaXZlci5jb2RlX2xlbmd0aCA9IDE7CisJdHR1c2Jpci0+ZHJpdmVyLnNhbXBsZV9yYXRlID0gMDsKKwl0dHVzYmlyLT5kcml2ZXIuZGF0YSA9IHR0dXNiaXI7CisJdHR1c2Jpci0+ZHJpdmVyLmFkZF90b19idWYgPSBOVUxMOworCXR0dXNiaXItPmRyaXZlci5yYnVmID0gJnR0dXNiaXItPnJidWY7CisJdHR1c2Jpci0+ZHJpdmVyLnNldF91c2VfaW5jID0gc2V0X3VzZV9pbmM7CisJdHR1c2Jpci0+ZHJpdmVyLnNldF91c2VfZGVjID0gc2V0X3VzZV9kZWM7CisJdHR1c2Jpci0+ZHJpdmVyLmRldiA9ICZpbnRmLT5kZXY7CisJdHR1c2Jpci0+ZHJpdmVyLm93bmVyID0gVEhJU19NT0RVTEU7CisJdHR1c2Jpci0+ZHJpdmVyLmZlYXR1cmVzID0gTElSQ19DQU5fUkVDX01PREUyOworCXR0dXNiaXItPm1pbm9yID0gbGlyY19yZWdpc3Rlcl9kcml2ZXIoJnR0dXNiaXItPmRyaXZlcik7CisJaWYgKHR0dXNiaXItPm1pbm9yIDwgMCkgeworCQllcnIoIkVycm9yIHJlZ2lzdGVyaW5nIGFzIExJUkMgZHJpdmVyXG4iKTsKKwkJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwkJbGlyY19idWZmZXJfZnJlZSgmdHR1c2Jpci0+cmJ1Zik7CisJCWtmcmVlKHR0dXNiaXIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBBbGxvY2F0ZSBhbmQgc2V0dXAgdGhlIFVSQiB0aGF0IHdlIHdpbGwgdXNlIHRvIHRhbGsgdG8gdGhlIGRldmljZSAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fdXJiczsgaSsrKSB7CisJCXR0dXNiaXItPnVyYltpXSA9IHVzYl9hbGxvY191cmIoOCwgR0ZQX0tFUk5FTCk7CisJCWlmICghdHR1c2Jpci0+dXJiW2ldKSB7CisJCQllcnIoIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBVUkJcbiIpOworCQkJZm9yIChqID0gaSAtIDE7IGogPj0gMDsgai0tKQorCQkJCWtmcmVlKHR0dXNiaXItPnVyYltqXSk7CisJCQlsaXJjX2J1ZmZlcl9mcmVlKCZ0dHVzYmlyLT5yYnVmKTsKKwkJCWxpcmNfdW5yZWdpc3Rlcl9kcml2ZXIodHR1c2Jpci0+bWlub3IpOworCQkJa2ZyZWUodHR1c2Jpcik7CisJCQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJdHR1c2Jpci0+dXJiW2ldLT5kZXYgPSB0dHVzYmlyLT51ZGV2OworCQl0dHVzYmlyLT51cmJbaV0tPmNvbnRleHQgPSB0dHVzYmlyOworCQl0dHVzYmlyLT51cmJbaV0tPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUodHR1c2Jpci0+dWRldiwKKwkJCQkJCQl0dHVzYmlyLT5lbmRwb2ludCk7CisJCXR0dXNiaXItPnVyYltpXS0+aW50ZXJ2YWwgPSAxOworCQl0dHVzYmlyLT51cmJbaV0tPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOworCQl0dHVzYmlyLT51cmJbaV0tPnRyYW5zZmVyX2J1ZmZlciA9ICZ0dHVzYmlyLT5idWZmZXJbaV1bMF07CisJCXR0dXNiaXItPnVyYltpXS0+Y29tcGxldGUgPSB1cmJfY29tcGxldGU7CisJCXR0dXNiaXItPnVyYltpXS0+bnVtYmVyX29mX3BhY2tldHMgPSA4OworCQl0dHVzYmlyLT51cmJbaV0tPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAxMjg7CisJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspIHsKKwkJCXR0dXNiaXItPnVyYltpXS0+aXNvX2ZyYW1lX2Rlc2Nbal0ub2Zmc2V0ID0gaioxNjsKKwkJCXR0dXNiaXItPnVyYltpXS0+aXNvX2ZyYW1lX2Rlc2Nbal0ubGVuZ3RoID0gMTY7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQ2FsbGVkIHdoZW4gdGhlIGRyaXZlciBpcyB1bmxvYWRlZCBvciB0aGUgZGV2aWNlIGlzIHVucGx1Z2dlZAorICovCitzdGF0aWMgdm9pZCBkaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCWludCBpOworCXN0cnVjdCB0dHVzYmlyX2RldmljZSAqdHR1c2JpcjsKKworCURQUklOVEsoIk1vZHVsZSB0dHVzYmlyIGRpc2Nvbm5lY3RcbiIpOworCisJdHR1c2JpciA9IChzdHJ1Y3QgdHR1c2Jpcl9kZXZpY2UgKikgdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCWxpcmNfdW5yZWdpc3Rlcl9kcml2ZXIodHR1c2Jpci0+bWlub3IpOworCURQUklOVEsoInVucmVnaXN0ZXJlZFxuIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3VyYnM7IGkrKykgeworCQl1c2Jfa2lsbF91cmIodHR1c2Jpci0+dXJiW2ldKTsKKwkJdXNiX2ZyZWVfdXJiKHR0dXNiaXItPnVyYltpXSk7CisJfQorCURQUklOVEsoIlVSQnMga2lsbGVkXG4iKTsKKwlsaXJjX2J1ZmZlcl9mcmVlKCZ0dHVzYmlyLT5yYnVmKTsKKwlrZnJlZSh0dHVzYmlyKTsKK30KKworc3RhdGljIGludCB0dHVzYmlyX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJlc3VsdDsKKworCURQUklOVEsoS0VSTl9ERUJVRyAiTW9kdWxlIHR0dXNiaXIgaW5pdFxuIik7CisKKwkvKiByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCisJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZ1c2JfZHJpdmVyKTsKKwlpZiAocmVzdWx0KQorCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgdHR1c2Jpcl9leGl0X21vZHVsZSh2b2lkKQoreworCXByaW50ayhLRVJOX0RFQlVHICJNb2R1bGUgdHR1c2JpciBleGl0XG4iKTsKKwl1c2JfZGVyZWdpc3RlcigmdXNiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHR0dXNiaXJfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQodHR1c2Jpcl9leGl0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3ppbG9nLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3ppbG9nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAwY2FhYjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3ppbG9nLmMKQEAgLTAsMCArMSwxMzg3IEBACisvKgorICogaTJjIElSIGxpcmMgZHJpdmVyIGZvciBkZXZpY2VzIHdpdGggemlsb2cgSVIgcHJvY2Vzc29ycworICoKKyAqIENvcHlyaWdodCAoYykgMjAwMCBHZXJkIEtub3JyIDxrcmF4ZWxAZ29sZGJhY2guaW4tYmVybGluLmRlPgorICogbW9kaWZpZWQgZm9yIFBpeGVsVmlldyAoQlQ4NzhQK1cvRk0pIGJ5CisgKiAgICAgIE1pY2hhbCBLb2NoYW5vd2ljeiA8bWtvY2hhbm9AcGxkLm9yZy5wbD4KKyAqICAgICAgQ2hyaXN0b3BoIEJhcnRlbG11cyA8bGlyY0BiYXJ0ZWxtdXMuZGU+CisgKiBtb2RpZmllZCBmb3IgS05DIE9ORSBUViBTdGF0aW9uL0FudWJpcyBUeXBob29uIFRWaWV3IFR1bmVyIGJ5CisgKiAgICAgIFVscmljaCBNdWVsbGVyIDx1bHJpY2gubXVlbGxlcjQyQHdlYi5kZT4KKyAqIG1vZGlmaWVkIGZvciBBc3VzIFRWLUJveCBhbmQgQ3JlYXRpdmUvVmlzaW9uVGVrIEJyZWFrT3V0LUJveCBieQorICogICAgICBTdGVmYW4gSmFobiA8c3RlZmFuQGxrY2Mub3JnPgorICogbW9kaWZpZWQgZm9yIGluY2x1c2lvbiBpbnRvIGtlcm5lbCBzb3VyY2VzIGJ5CisgKiAgICAgIEplcm9tZSBCcm9jayA8amJyb2NrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqIG1vZGlmaWVkIGZvciBMZWFkdGVrIFdpbmZhc3QgUFZSMjAwMCBieQorICogICAgICBUaG9tYXMgUmVpdG1heXIgKHRyZWl0bWF5ckB5YWhvby5jb20pCisgKiBtb2RpZmllZCBmb3IgSGF1cHBhdWdlIFBWUi0xNTAgSVIgVFggZGV2aWNlIGJ5CisgKiAgICAgIE1hcmsgV2VhdmVyIDxtYXJrQG5wc2wuY28udWs+CisgKiBjaGFuZ2VkIG5hbWUgZnJvbSBsaXJjX3B2cjE1MCB0byBsaXJjX3ppbG9nLCB3b3JrcyBvbiBtb3JlIHRoYW4gcHZyLTE1MAorICoJSmFyb2QgV2lsc29uIDxqYXJvZEByZWRoYXQuY29tPgorICoKKyAqIHBhcnRzIGFyZSBjdXQmcGFzdGVkIGZyb20gdGhlIGxpcmNfaTJjLmMgZHJpdmVyCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisKKyNpbmNsdWRlIDxtZWRpYS9saXJjX2Rldi5oPgorI2luY2x1ZGUgPG1lZGlhL2xpcmMuaD4KKworc3RydWN0IElSIHsKKwlzdHJ1Y3QgbGlyY19kcml2ZXIgbDsKKworCS8qIERldmljZSBpbmZvICovCisJc3RydWN0IG11dGV4IGlyX2xvY2s7CisJaW50IG9wZW47CisKKwkvKiBSWCBkZXZpY2UgKi8KKwlzdHJ1Y3QgaTJjX2NsaWVudCBjX3J4OworCWludCBoYXZlX3J4OworCisJLyogUlggZGV2aWNlIGJ1ZmZlciAmIGxvY2sgKi8KKwlzdHJ1Y3QgbGlyY19idWZmZXIgYnVmOworCXN0cnVjdCBtdXRleCBidWZfbG9jazsKKworCS8qIFJYIHBvbGxpbmcgdGhyZWFkIGRhdGEgKi8KKwlzdHJ1Y3QgY29tcGxldGlvbiAqdF9ub3RpZnk7CisJc3RydWN0IGNvbXBsZXRpb24gKnRfbm90aWZ5MjsKKwlpbnQgc2h1dGRvd247CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCisJLyogUlggcmVhZCBkYXRhICovCisJdW5zaWduZWQgY2hhciBiWzNdOworCisJLyogVFggZGV2aWNlICovCisJc3RydWN0IGkyY19jbGllbnQgY190eDsKKwlpbnQgbmVlZF9ib290OworCWludCBoYXZlX3R4OworfTsKKworLyogTWlub3IgLT4gZGF0YSBtYXBwaW5nICovCitzdGF0aWMgc3RydWN0IElSICppcl9kZXZpY2VzW01BWF9JUkNUTF9ERVZJQ0VTXTsKKworLyogQmxvY2sgc2l6ZSBmb3IgSVIgdHJhbnNtaXR0ZXIgKi8KKyNkZWZpbmUgVFhfQkxPQ0tfU0laRQk5OQorCisvKiBIYXVwcGF1Z2UgSVIgdHJhbnNtaXR0ZXIgZGF0YSAqLworc3RydWN0IHR4X2RhdGFfc3RydWN0IHsKKwkvKiBCb290IGJsb2NrICovCisJdW5zaWduZWQgY2hhciAqYm9vdF9kYXRhOworCisJLyogU3RhcnQgb2YgYmluYXJ5IGRhdGEgYmxvY2sgKi8KKwl1bnNpZ25lZCBjaGFyICpkYXRhcDsKKworCS8qIEVuZCBvZiBiaW5hcnkgZGF0YSBibG9jayAqLworCXVuc2lnbmVkIGNoYXIgKmVuZHA7CisKKwkvKiBOdW1iZXIgb2YgaW5zdGFsbGVkIGNvZGVzZXRzICovCisJdW5zaWduZWQgaW50IG51bV9jb2RlX3NldHM7CisKKwkvKiBQb2ludGVycyB0byBjb2Rlc2V0cyAqLworCXVuc2lnbmVkIGNoYXIgKipjb2RlX3NldHM7CisKKwkvKiBHbG9iYWwgZml4ZWQgZGF0YSB0ZW1wbGF0ZSAqLworCWludCBmaXhlZFtUWF9CTE9DS19TSVpFXTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHhfZGF0YV9zdHJ1Y3QgKnR4X2RhdGE7CitzdGF0aWMgc3RydWN0IG11dGV4IHR4X2RhdGFfbG9jazsKKworI2RlZmluZSB6aWxvZ19ub3RpZnkocywgYXJncy4uLikgcHJpbnRrKEtFUk5fTk9USUNFIEtCVUlMRF9NT0ROQU1FICI6ICIgcywgXAorCQkJCQkjIyBhcmdzKQorI2RlZmluZSB6aWxvZ19lcnJvcihzLCBhcmdzLi4uKSBwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUgIjogIiBzLCAjIyBhcmdzKQorCisjZGVmaW5lIFpJTE9HX0hBVVBQQVVHRV9JUl9SWF9OQU1FICJaaWxvZy9IYXVwcGF1Z2UgSVIgUlgiCisjZGVmaW5lIFpJTE9HX0hBVVBQQVVHRV9JUl9UWF9OQU1FICJaaWxvZy9IYXVwcGF1Z2UgSVIgVFgiCisKKy8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCitzdGF0aWMgaW50IGRlYnVnOwkvKiBkZWJ1ZyBvdXRwdXQgKi8KK3N0YXRpYyBpbnQgZGlzYWJsZV9yeDsJLyogZGlzYWJsZSBSWCBkZXZpY2UgKi8KK3N0YXRpYyBpbnQgZGlzYWJsZV90eDsJLyogZGlzYWJsZSBUWCBkZXZpY2UgKi8KK3N0YXRpYyBpbnQgbWlub3IgPSAtMTsJLyogbWlub3IgbnVtYmVyICovCisKKyNkZWZpbmUgZHByaW50ayhmbXQsIGFyZ3MuLi4pCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKGRlYnVnKQkJCQkJCVwKKwkJCXByaW50ayhLRVJOX0RFQlVHIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10LAlcCisJCQkJICMjIGFyZ3MpOwkJCQlcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIGludCBhZGRfdG9fYnVmKHN0cnVjdCBJUiAqaXIpCit7CisJX191MTYgY29kZTsKKwl1bnNpZ25lZCBjaGFyIGNvZGVzWzJdOworCXVuc2lnbmVkIGNoYXIga2V5YnVmWzZdOworCWludCBnb3RfZGF0YSA9IDA7CisJaW50IHJldDsKKwlpbnQgZmFpbHVyZXMgPSAwOworCXVuc2lnbmVkIGNoYXIgc2VuZGJ1ZlsxXSA9IHsgMCB9OworCisJaWYgKGxpcmNfYnVmZmVyX2Z1bGwoJmlyLT5idWYpKSB7CisJCWRwcmludGsoImJ1ZmZlciBvdmVyZmxvd1xuIik7CisJCXJldHVybiAtRU9WRVJGTE9XOworCX0KKworCS8qCisJICogc2VydmljZSB0aGUgZGV2aWNlIGFzIGxvbmcgYXMgaXQgaXMgcmV0dXJuaW5nCisJICogZGF0YSBhbmQgd2UgaGF2ZSBzcGFjZQorCSAqLworCWRvIHsKKwkJLyoKKwkJICogTG9jayBpMmMgYnVzIGZvciB0aGUgZHVyYXRpb24uICBSWC9UWCBjaGlwcyBpbnRlcmZlcmUgc28KKwkJICogdGhpcyBpcyB3b3J0aCBpdAorCQkgKi8KKwkJbXV0ZXhfbG9jaygmaXItPmlyX2xvY2spOworCisJCS8qCisJCSAqIFNlbmQgcmFuZG9tICJwb2xsIGNvbW1hbmQiICg/KSAgV2luZG93cyBkcml2ZXIgZG9lcyB0aGlzCisJCSAqIGFuZCBpdCBpcyBhIGdvb2QgcG9pbnQgdG8gZGV0ZWN0IGNoaXAgZmFpbHVyZS4KKwkJICovCisJCXJldCA9IGkyY19tYXN0ZXJfc2VuZCgmaXItPmNfcngsIHNlbmRidWYsIDEpOworCQlpZiAocmV0ICE9IDEpIHsKKwkJCXppbG9nX2Vycm9yKCJpMmNfbWFzdGVyX3NlbmQgZmFpbGVkIHdpdGggJWRcbiIsCXJldCk7CisJCQlpZiAoZmFpbHVyZXMgPj0gMykgeworCQkJCW11dGV4X3VubG9jaygmaXItPmlyX2xvY2spOworCQkJCXppbG9nX2Vycm9yKCJ1bmFibGUgdG8gcmVhZCBmcm9tIHRoZSBJUiBjaGlwICIKKwkJCQkJICAgICJhZnRlciAzIHJlc2V0cywgZ2l2aW5nIHVwXG4iKTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCisJCQkvKiBMb29rcyBsaWtlIHRoZSBjaGlwIGNyYXNoZWQsIHJlc2V0IGl0ICovCisJCQl6aWxvZ19lcnJvcigicG9sbGluZyB0aGUgSVIgcmVjZWl2ZXIgY2hpcCBmYWlsZWQsICIKKwkJCQkgICAgInRyeWluZyByZXNldFxuIik7CisKKwkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJCXNjaGVkdWxlX3RpbWVvdXQoKDEwMCAqIEhaICsgOTk5KSAvIDEwMDApOworCQkJaXItPm5lZWRfYm9vdCA9IDE7CisKKwkJCSsrZmFpbHVyZXM7CisJCQltdXRleF91bmxvY2soJmlyLT5pcl9sb2NrKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcmV0ID0gaTJjX21hc3Rlcl9yZWN2KCZpci0+Y19yeCwga2V5YnVmLCBzaXplb2Yoa2V5YnVmKSk7CisJCW11dGV4X3VubG9jaygmaXItPmlyX2xvY2spOworCQlpZiAocmV0ICE9IHNpemVvZihrZXlidWYpKSB7CisJCQl6aWxvZ19lcnJvcigiaTJjX21hc3Rlcl9yZWN2IGZhaWxlZCB3aXRoICVkIC0tICIKKwkJCQkgICAgImtlZXBpbmcgbGFzdCByZWFkIGJ1ZmZlclxuIiwgcmV0KTsKKwkJfSBlbHNlIHsKKwkJCWlyLT5iWzBdID0ga2V5YnVmWzNdOworCQkJaXItPmJbMV0gPSBrZXlidWZbNF07CisJCQlpci0+YlsyXSA9IGtleWJ1Zls1XTsKKwkJCWRwcmludGsoImtleSAoMHglMDJ4LzB4JTAyeClcbiIsIGlyLT5iWzBdLCBpci0+YlsxXSk7CisJCX0KKworCQkvKiBrZXkgcHJlc3NlZCA/ICovCisjaWZkZWYgSTJDX0hXX0JfSERQVlIKKwkJaWYgKGlyLT5jX3J4LmFkYXB0ZXItPmlkID09IEkyQ19IV19CX0hEUFZSKSB7CisJCQlpZiAoZ290X2RhdGEgJiYgKGtleWJ1ZlswXSA9PSAweDgwKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWVsc2UgaWYgKGdvdF9kYXRhICYmIChrZXlidWZbMF0gPT0gMHgwMCkpCisJCQkJcmV0dXJuIC1FTk9EQVRBOworCQl9IGVsc2UgaWYgKChpci0+YlswXSAmIDB4ODApID09IDApCisjZWxzZQorCQlpZiAoKGlyLT5iWzBdICYgMHg4MCkgPT0gMCkKKyNlbmRpZgorCQkJcmV0dXJuIGdvdF9kYXRhID8gMCA6IC1FTk9EQVRBOworCisJCS8qIGxvb2sgd2hhdCB3ZSBoYXZlICovCisJCWNvZGUgPSAoKChfX3UxNilpci0+YlswXSAmIDB4N2YpIDw8IDYpIHwgKGlyLT5iWzFdID4+IDIpOworCisJCWNvZGVzWzBdID0gKGNvZGUgPj4gOCkgJiAweGZmOworCQljb2Rlc1sxXSA9IGNvZGUgJiAweGZmOworCisJCS8qIHJldHVybiBpdCAqLworCQlsaXJjX2J1ZmZlcl93cml0ZSgmaXItPmJ1ZiwgY29kZXMpOworCQkrK2dvdF9kYXRhOworCX0gd2hpbGUgKCFsaXJjX2J1ZmZlcl9mdWxsKCZpci0+YnVmKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE1haW4gZnVuY3Rpb24gb2YgdGhlIHBvbGxpbmcgdGhyZWFkIC0tIGZyb20gbGlyY19kZXYuCisgKiBXZSBkb24ndCBmaXQgdGhlIExJUkMgbW9kZWwgYXQgYWxsIGFueW1vcmUuICBUaGlzIGlzIGhvcnJpYmxlLCBidXQKKyAqIGJhc2ljYWxseSB3ZSBoYXZlIGEgc2luZ2xlIFJYL1RYIGRldmljZSB3aXRoIGEgbmFzdHkgZmFpbHVyZSBtb2RlCisgKiB0aGF0IG5lZWRzIHRvIGJlIGFjY291bnRlZCBmb3IgYWNyb3NzIHRoZSBwYWlyLiAgbGlyYyBsZXRzIHVzIHByb3ZpZGUKKyAqIGZvcHMsIGJ1dCBwcmV2ZW50cyB1cyBmcm9tIHVzaW5nIHRoZSBpbnRlcm5hbCBwb2xsaW5nLCBldGMuIGlmIHdlIGRvCisgKiBzby4gIEhlbmNlIHRoZSByZXBsaWNhdGlvbi4gIE1pZ2h0IGJlIG5lYXRlciB0byBleHRlbmQgdGhlIExJUkMgbW9kZWwKKyAqIHRvIGFjY291bnQgZm9yIHRoaXMgYnV0IEknZCB0aGluayBpdCdzIGEgdmVyeSBzcGVjaWFsIGNhc2Ugb2Ygc2VyaW91c2x5CisgKiBtZXNzZWQgdXAgaGFyZHdhcmUuCisgKi8KK3N0YXRpYyBpbnQgbGlyY190aHJlYWQodm9pZCAqYXJnKQoreworCXN0cnVjdCBJUiAqaXIgPSBhcmc7CisKKwlpZiAoaXItPnRfbm90aWZ5ICE9IE5VTEwpCisJCWNvbXBsZXRlKGlyLT50X25vdGlmeSk7CisKKwlkcHJpbnRrKCJwb2xsIHRocmVhZCBzdGFydGVkXG4iKTsKKworCWRvIHsKKwkJaWYgKGlyLT5vcGVuKSB7CisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCisJCQkvKgorCQkJICogVGhpcyBpcyB+MTEzKjIgKyAyNCArIGppdHRlciAoMipyZXBlYXQgZ2FwICsKKwkJCSAqIGNvZGUgbGVuZ3RoKS4gIFdlIHVzZSB0aGlzIGludGVydmFsIGFzIHRoZSBjaGlwCisJCQkgKiByZXNldHMgZXZlcnkgdGltZSB5b3UgcG9sbCBpdCAoYmFkISkuICBUaGlzIGlzCisJCQkgKiB0aGVyZWZvcmUganVzdCBzdWZmaWNpZW50IHRvIGNhdGNoIGFsbCBvZiB0aGUKKwkJCSAqIGJ1dHRvbiBwcmVzc2VzLiAgSXQgbWFrZXMgdGhlIHJlbW90ZSBtdWNoIG1vcmUKKwkJCSAqIHJlc3BvbnNpdmUuICBZb3UgY2FuIHNlZSB0aGUgZGlmZmVyZW5jZSBieQorCQkJICogcnVubmluZyBpcncgYW5kIGhvbGRpbmcgZG93biBhIGJ1dHRvbi4gIFdpdGgKKwkJCSAqIDEwMG1zLCB0aGUgb2xkIHBvbGxpbmcgaW50ZXJ2YWwsIHlvdSdsbCBub3RpY2UKKwkJCSAqIGJyZWFrcyBpbiB0aGUgcmVwZWF0IHNlcXVlbmNlIGNvcnJlc3BvbmRpbmcgdG8KKwkJCSAqIGxvc3Qga2V5cHJlc3Nlcy4KKwkJCSAqLworCQkJc2NoZWR1bGVfdGltZW91dCgoMjYwICogSFopIC8gMTAwMCk7CisJCQlpZiAoaXItPnNodXRkb3duKQorCQkJCWJyZWFrOworCQkJaWYgKCFhZGRfdG9fYnVmKGlyKSkKKwkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmlyLT5idWYud2FpdF9wb2xsKTsKKwkJfSBlbHNlIHsKKwkJCS8qIGlmIGRldmljZSBub3Qgb3BlbmVkIHNvIHdlIGNhbiBzbGVlcCBoYWxmIGEgc2Vjb25kICovCisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJc2NoZWR1bGVfdGltZW91dChIWi8yKTsKKwkJfQorCX0gd2hpbGUgKCFpci0+c2h1dGRvd24pOworCisJaWYgKGlyLT50X25vdGlmeTIgIT0gTlVMTCkKKwkJd2FpdF9mb3JfY29tcGxldGlvbihpci0+dF9ub3RpZnkyKTsKKworCWlyLT50YXNrID0gTlVMTDsKKwlpZiAoaXItPnRfbm90aWZ5ICE9IE5VTEwpCisJCWNvbXBsZXRlKGlyLT50X25vdGlmeSk7CisKKwlkcHJpbnRrKCJwb2xsIHRocmVhZCBlbmRlZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3VzZV9pbmModm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgSVIgKmlyID0gZGF0YTsKKworCWlmIChpci0+bC5vd25lciA9PSBOVUxMIHx8IHRyeV9tb2R1bGVfZ2V0KGlyLT5sLm93bmVyKSA9PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIGxvY2sgYnR0diBpbiBtZW1vcnkgd2hpbGUgL2Rldi9saXJjIGlzIGluIHVzZSAgKi8KKwkvKgorCSAqIHRoaXMgaXMgY29tcGxldGVseSBicm9rZW4gY29kZS4gbGlyY191bnJlZ2lzdGVyX2RyaXZlcigpCisJICogbXVzdCBiZSBwb3NzaWJsZSBldmVuIHdoZW4gdGhlIGRldmljZSBpcyBvcGVuCisJICovCisJaWYgKGlyLT5jX3J4LmFkZHIpCisJCWkyY191c2VfY2xpZW50KCZpci0+Y19yeCk7CisJaWYgKGlyLT5jX3R4LmFkZHIpCisJCWkyY191c2VfY2xpZW50KCZpci0+Y190eCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0X3VzZV9kZWModm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgSVIgKmlyID0gZGF0YTsKKworCWlmIChpci0+Y19yeC5hZGRyKQorCQlpMmNfcmVsZWFzZV9jbGllbnQoJmlyLT5jX3J4KTsKKwlpZiAoaXItPmNfdHguYWRkcikKKwkJaTJjX3JlbGVhc2VfY2xpZW50KCZpci0+Y190eCk7CisJaWYgKGlyLT5sLm93bmVyICE9IE5VTEwpCisJCW1vZHVsZV9wdXQoaXItPmwub3duZXIpOworfQorCisvKiBzYWZlIHJlYWQgb2YgYSB1aW50MzIgKGFsd2F5cyBuZXR3b3JrIGJ5dGUgb3JkZXIpICovCitzdGF0aWMgaW50IHJlYWRfdWludDMyKHVuc2lnbmVkIGNoYXIgKipkYXRhLAorCQkJCSAgICAgdW5zaWduZWQgY2hhciAqZW5kcCwgdW5zaWduZWQgaW50ICp2YWwpCit7CisJaWYgKCpkYXRhICsgNCA+IGVuZHApCisJCXJldHVybiAwOworCSp2YWwgPSAoKCpkYXRhKVswXSA8PCAyNCkgfCAoKCpkYXRhKVsxXSA8PCAxNikgfAorCSAgICAgICAoKCpkYXRhKVsyXSA8PCA4KSB8ICgqZGF0YSlbM107CisJKmRhdGEgKz0gNDsKKwlyZXR1cm4gMTsKK30KKworLyogc2FmZSByZWFkIG9mIGEgdWludDggKi8KK3N0YXRpYyBpbnQgcmVhZF91aW50OCh1bnNpZ25lZCBjaGFyICoqZGF0YSwKKwkJCQkgICAgdW5zaWduZWQgY2hhciAqZW5kcCwgdW5zaWduZWQgY2hhciAqdmFsKQoreworCWlmICgqZGF0YSArIDEgPiBlbmRwKQorCQlyZXR1cm4gMDsKKwkqdmFsID0gKigoKmRhdGEpKyspOworCXJldHVybiAxOworfQorCisvKiBzYWZlIHNraXBwaW5nIG9mIE4gYnl0ZXMgKi8KK3N0YXRpYyBpbnQgc2tpcCh1bnNpZ25lZCBjaGFyICoqZGF0YSwKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKmVuZHAsIHVuc2lnbmVkIGludCBkaXN0YW5jZSkKK3sKKwlpZiAoKmRhdGEgKyBkaXN0YW5jZSA+IGVuZHApCisJCXJldHVybiAwOworCSpkYXRhICs9IGRpc3RhbmNlOworCXJldHVybiAxOworfQorCisvKiBkZWNvbXByZXNzIGtleSBkYXRhIGludG8gdGhlIGdpdmVuIGJ1ZmZlciAqLworc3RhdGljIGludCBnZXRfa2V5X2RhdGEodW5zaWduZWQgY2hhciAqYnVmLAorCQkJICAgICB1bnNpZ25lZCBpbnQgY29kZXNldCwgdW5zaWduZWQgaW50IGtleSkKK3sKKwl1bnNpZ25lZCBjaGFyICpkYXRhLCAqZW5kcCwgKmRpZmZzLCAqa2V5X2Jsb2NrOworCXVuc2lnbmVkIGNoYXIga2V5cywgbmRpZmZzLCBpZDsKKwl1bnNpZ25lZCBpbnQgYmFzZSwgbGltLCBwb3MsIGk7CisKKwkvKiBCaW5hcnkgc2VhcmNoIGZvciB0aGUgY29kZXNldCAqLworCWZvciAoYmFzZSA9IDAsIGxpbSA9IHR4X2RhdGEtPm51bV9jb2RlX3NldHM7IGxpbTsgbGltID4+PSAxKSB7CisJCXBvcyA9IGJhc2UgKyAobGltID4+IDEpOworCQlkYXRhID0gdHhfZGF0YS0+Y29kZV9zZXRzW3Bvc107CisKKwkJaWYgKCFyZWFkX3VpbnQzMigmZGF0YSwgdHhfZGF0YS0+ZW5kcCwgJmkpKQorCQkJZ290byBjb3JydXB0OworCisJCWlmIChpID09IGNvZGVzZXQpCisJCQlicmVhazsKKwkJZWxzZSBpZiAoY29kZXNldCA+IGkpIHsKKwkJCWJhc2UgPSBwb3MgKyAxOworCQkJLS1saW07CisJCX0KKwl9CisJLyogTm90IGZvdW5kPyAqLworCWlmICghbGltKQorCQlyZXR1cm4gLUVQUk9UTzsKKworCS8qIFNldCBlbmQgb2YgZGF0YSBibG9jayAqLworCWVuZHAgPSBwb3MgPCB0eF9kYXRhLT5udW1fY29kZV9zZXRzIC0gMSA/CisJCXR4X2RhdGEtPmNvZGVfc2V0c1twb3MgKyAxXSA6IHR4X2RhdGEtPmVuZHA7CisKKwkvKiBSZWFkIHRoZSBibG9jayBoZWFkZXIgKi8KKwlpZiAoIXJlYWRfdWludDgoJmRhdGEsIGVuZHAsICZrZXlzKSB8fAorCSAgICAhcmVhZF91aW50OCgmZGF0YSwgZW5kcCwgJm5kaWZmcykgfHwKKwkgICAgbmRpZmZzID4gVFhfQkxPQ0tfU0laRSB8fCBrZXlzID09IDApCisJCWdvdG8gY29ycnVwdDsKKworCS8qIFNhdmUgZGlmZnMgJiBza2lwICovCisJZGlmZnMgPSBkYXRhOworCWlmICghc2tpcCgmZGF0YSwgZW5kcCwgbmRpZmZzKSkKKwkJZ290byBjb3JydXB0OworCisJLyogUmVhZCB0aGUgaWQgb2YgdGhlIGZpcnN0IGtleSAqLworCWlmICghcmVhZF91aW50OCgmZGF0YSwgZW5kcCwgJmlkKSkKKwkJZ290byBjb3JydXB0OworCisJLyogVW5wYWNrIHRoZSBmaXJzdCBrZXkncyBkYXRhICovCisJZm9yIChpID0gMDsgaSA8IFRYX0JMT0NLX1NJWkU7ICsraSkgeworCQlpZiAodHhfZGF0YS0+Zml4ZWRbaV0gPT0gLTEpIHsKKwkJCWlmICghcmVhZF91aW50OCgmZGF0YSwgZW5kcCwgJmJ1ZltpXSkpCisJCQkJZ290byBjb3JydXB0OworCQl9IGVsc2UgeworCQkJYnVmW2ldID0gKHVuc2lnbmVkIGNoYXIpdHhfZGF0YS0+Zml4ZWRbaV07CisJCX0KKwl9CisKKwkvKiBFYXJseSBvdXQga2V5IGZvdW5kL25vdCBmb3VuZCAqLworCWlmIChrZXkgPT0gaWQpCisJCXJldHVybiAwOworCWlmIChrZXlzID09IDEpCisJCXJldHVybiAtRVBST1RPOworCisJLyogU2FuaXR5IGNoZWNrICovCisJa2V5X2Jsb2NrID0gZGF0YTsKKwlpZiAoIXNraXAoJmRhdGEsIGVuZHAsIChrZXlzIC0gMSkgKiAobmRpZmZzICsgMSkpKQorCQlnb3RvIGNvcnJ1cHQ7CisKKwkvKiBCaW5hcnkgc2VhcmNoIGZvciB0aGUga2V5ICovCisJZm9yIChiYXNlID0gMCwgbGltID0ga2V5cyAtIDE7IGxpbTsgbGltID4+PSAxKSB7CisJCS8qIFNlZWsgdG8gYmxvY2sgKi8KKwkJdW5zaWduZWQgY2hhciAqa2V5X2RhdGE7CisJCXBvcyA9IGJhc2UgKyAobGltID4+IDEpOworCQlrZXlfZGF0YSA9IGtleV9ibG9jayArIChuZGlmZnMgKyAxKSAqIHBvczsKKworCQlpZiAoKmtleV9kYXRhID09IGtleSkgeworCQkJLyogc2tpcCBrZXkgaWQgKi8KKwkJCSsra2V5X2RhdGE7CisKKwkJCS8qIGZvdW5kLCBzbyB1bnBhY2sgdGhlIGRpZmZzICovCisJCQlmb3IgKGkgPSAwOyBpIDwgbmRpZmZzOyArK2kpIHsKKwkJCQl1bnNpZ25lZCBjaGFyIHZhbDsKKwkJCQlpZiAoIXJlYWRfdWludDgoJmtleV9kYXRhLCBlbmRwLCAmdmFsKSB8fAorCQkJCSAgICBkaWZmc1tpXSA+PSBUWF9CTE9DS19TSVpFKQorCQkJCQlnb3RvIGNvcnJ1cHQ7CisJCQkJYnVmW2RpZmZzW2ldXSA9IHZhbDsKKwkJCX0KKworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSBpZiAoa2V5ID4gKmtleV9kYXRhKSB7CisJCQliYXNlID0gcG9zICsgMTsKKwkJCS0tbGltOworCQl9CisJfQorCS8qIEtleSBub3QgZm91bmQgKi8KKwlyZXR1cm4gLUVQUk9UTzsKKworY29ycnVwdDoKKwl6aWxvZ19lcnJvcigiZmlybXdhcmUgaXMgY29ycnVwdFxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CisKKy8qIHNlbmQgYSBibG9jayBvZiBkYXRhIHRvIHRoZSBJUiBUWCBkZXZpY2UgKi8KK3N0YXRpYyBpbnQgc2VuZF9kYXRhX2Jsb2NrKHN0cnVjdCBJUiAqaXIsIHVuc2lnbmVkIGNoYXIgKmRhdGFfYmxvY2spCit7CisJaW50IGksIGosIHJldDsKKwl1bnNpZ25lZCBjaGFyIGJ1Zls1XTsKKworCWZvciAoaSA9IDA7IGkgPCBUWF9CTE9DS19TSVpFOykgeworCQlpbnQgdG9zZW5kID0gVFhfQkxPQ0tfU0laRSAtIGk7CisJCWlmICh0b3NlbmQgPiA0KQorCQkJdG9zZW5kID0gNDsKKwkJYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpKGkgKyAxKTsKKwkJZm9yIChqID0gMDsgaiA8IHRvc2VuZDsgKytqKQorCQkJYnVmWzEgKyBqXSA9IGRhdGFfYmxvY2tbaSArIGpdOworCQlkcHJpbnRrKCIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMngiLAorCQkJYnVmWzBdLCBidWZbMV0sIGJ1ZlsyXSwgYnVmWzNdLCBidWZbNF0pOworCQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoJmlyLT5jX3R4LCBidWYsIHRvc2VuZCArIDEpOworCQlpZiAocmV0ICE9IHRvc2VuZCArIDEpIHsKKwkJCXppbG9nX2Vycm9yKCJpMmNfbWFzdGVyX3NlbmQgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IC1FRkFVTFQ7CisJCX0KKwkJaSArPSB0b3NlbmQ7CisJfQorCXJldHVybiAwOworfQorCisvKiBzZW5kIGJvb3QgZGF0YSB0byB0aGUgSVIgVFggZGV2aWNlICovCitzdGF0aWMgaW50IHNlbmRfYm9vdF9kYXRhKHN0cnVjdCBJUiAqaXIpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBjaGFyIGJ1Zls0XTsKKworCS8qIHNlbmQgdGhlIGJvb3QgYmxvY2sgKi8KKwlyZXQgPSBzZW5kX2RhdGFfYmxvY2soaXIsIHR4X2RhdGEtPmJvb3RfZGF0YSk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJLyoga2ljayBpdCBvZmY/ICovCisJYnVmWzBdID0gMHgwMDsKKwlidWZbMV0gPSAweDIwOworCXJldCA9IGkyY19tYXN0ZXJfc2VuZCgmaXItPmNfdHgsIGJ1ZiwgMik7CisJaWYgKHJldCAhPSAyKSB7CisJCXppbG9nX2Vycm9yKCJpMmNfbWFzdGVyX3NlbmQgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQgPCAwID8gcmV0IDogLUVGQVVMVDsKKwl9CisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKCZpci0+Y190eCwgYnVmLCAxKTsKKwlpZiAocmV0ICE9IDEpIHsKKwkJemlsb2dfZXJyb3IoImkyY19tYXN0ZXJfc2VuZCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAtRUZBVUxUOworCX0KKworCS8qIEhlcmUgY29tZXMgdGhlIGZpcm13YXJlIHZlcnNpb24uLi4gKGhvcGVmdWxseSkgKi8KKwlyZXQgPSBpMmNfbWFzdGVyX3JlY3YoJmlyLT5jX3R4LCBidWYsIDQpOworCWlmIChyZXQgIT0gNCkgeworCQl6aWxvZ19lcnJvcigiaTJjX21hc3Rlcl9yZWN2IGZhaWxlZCB3aXRoICVkXG4iLCByZXQpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGJ1ZlswXSAhPSAweDgwKSB7CisJCXppbG9nX2Vycm9yKCJ1bmV4cGVjdGVkIElSIFRYIHJlc3BvbnNlOiAlMDJ4XG4iLCBidWZbMF0pOworCQlyZXR1cm4gMDsKKwl9CisJemlsb2dfbm90aWZ5KCJaaWxvZy9IYXVwcGF1Z2UgSVIgYmxhc3RlciBmaXJtd2FyZSB2ZXJzaW9uICIKKwkJICAgICAiJWQuJWQuJWQgbG9hZGVkXG4iLCBidWZbMV0sIGJ1ZlsyXSwgYnVmWzNdKTsKKworCXJldHVybiAwOworfQorCisvKiB1bmxvYWQgImZpcm13YXJlIiwgbG9jayBoZWxkICovCitzdGF0aWMgdm9pZCBmd191bmxvYWRfbG9ja2VkKHZvaWQpCit7CisJaWYgKHR4X2RhdGEpIHsKKwkJaWYgKHR4X2RhdGEtPmNvZGVfc2V0cykKKwkJCXZmcmVlKHR4X2RhdGEtPmNvZGVfc2V0cyk7CisKKwkJaWYgKHR4X2RhdGEtPmRhdGFwKQorCQkJdmZyZWUodHhfZGF0YS0+ZGF0YXApOworCisJCXZmcmVlKHR4X2RhdGEpOworCQl0eF9kYXRhID0gTlVMTDsKKwkJZHByaW50aygic3VjY2Vzc2Z1bGx5IHVubG9hZGVkIElSIGJsYXN0ZXIgZmlybXdhcmVcbiIpOworCX0KK30KKworLyogdW5sb2FkICJmaXJtd2FyZSIgZm9yIHRoZSBJUiBUWCBkZXZpY2UgKi8KK3N0YXRpYyB2b2lkIGZ3X3VubG9hZCh2b2lkKQoreworCW11dGV4X2xvY2soJnR4X2RhdGFfbG9jayk7CisJZndfdW5sb2FkX2xvY2tlZCgpOworCW11dGV4X3VubG9jaygmdHhfZGF0YV9sb2NrKTsKK30KKworLyogbG9hZCAiZmlybXdhcmUiIGZvciB0aGUgSVIgVFggZGV2aWNlICovCitzdGF0aWMgaW50IGZ3X2xvYWQoc3RydWN0IElSICppcikKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGNoYXIgKmRhdGEsIHZlcnNpb24sIG51bV9nbG9iYWxfZml4ZWQ7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKKworCS8qIEFscmVhZHkgbG9hZGVkPyAqLworCW11dGV4X2xvY2soJnR4X2RhdGFfbG9jayk7CisJaWYgKHR4X2RhdGEpIHsKKwkJcmV0ID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogUmVxdWVzdCBjb2Rlc2V0IGRhdGEgZmlsZSAqLworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCAiaGF1cC1pci1ibGFzdGVyLmJpbiIsICZpci0+Y190eC5kZXYpOworCWlmIChyZXQgIT0gMCkgeworCQl6aWxvZ19lcnJvcigiZmlybXdhcmUgaGF1cC1pci1ibGFzdGVyLmJpbiBub3QgYXZhaWxhYmxlICIKKwkJCSAgICAiKCVkKVxuIiwgcmV0KTsKKwkJcmV0ID0gcmV0IDwgMCA/IHJldCA6IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKwlkcHJpbnRrKCJmaXJtd2FyZSBvZiBzaXplICV6dSBsb2FkZWRcbiIsIGZ3X2VudHJ5LT5zaXplKTsKKworCS8qIFBhcnNlIHRoZSBmaWxlICovCisJdHhfZGF0YSA9IHZtYWxsb2Moc2l6ZW9mKCp0eF9kYXRhKSk7CisJaWYgKHR4X2RhdGEgPT0gTlVMTCkgeworCQl6aWxvZ19lcnJvcigib3V0IG9mIG1lbW9yeVxuIik7CisJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJdHhfZGF0YS0+Y29kZV9zZXRzID0gTlVMTDsKKworCS8qIENvcHkgdGhlIGRhdGEgc28gaG90cGx1ZyBkb2Vzbid0IGdldCBjb25mdXNlZCBhbmQgdGltZW91dCAqLworCXR4X2RhdGEtPmRhdGFwID0gdm1hbGxvYyhmd19lbnRyeS0+c2l6ZSk7CisJaWYgKHR4X2RhdGEtPmRhdGFwID09IE5VTEwpIHsKKwkJemlsb2dfZXJyb3IoIm91dCBvZiBtZW1vcnlcbiIpOworCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKwkJdmZyZWUodHhfZGF0YSk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwltZW1jcHkodHhfZGF0YS0+ZGF0YXAsIGZ3X2VudHJ5LT5kYXRhLCBmd19lbnRyeS0+c2l6ZSk7CisJdHhfZGF0YS0+ZW5kcCA9IHR4X2RhdGEtPmRhdGFwICsgZndfZW50cnktPnNpemU7CisJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7IGZ3X2VudHJ5ID0gTlVMTDsKKworCS8qIENoZWNrIHZlcnNpb24gKi8KKwlkYXRhID0gdHhfZGF0YS0+ZGF0YXA7CisJaWYgKCFyZWFkX3VpbnQ4KCZkYXRhLCB0eF9kYXRhLT5lbmRwLCAmdmVyc2lvbikpCisJCWdvdG8gY29ycnVwdDsKKwlpZiAodmVyc2lvbiAhPSAxKSB7CisJCXppbG9nX2Vycm9yKCJ1bnN1cHBvcnRlZCBjb2RlIHNldCBmaWxlIHZlcnNpb24gKCV1LCBleHBlY3RlZCIKKwkJCSAgICAiMSkgLS0gcGxlYXNlIHVwZ3JhZGUgdG8gYSBuZXdlciBkcml2ZXIiLAorCQkJICAgIHZlcnNpb24pOworCQlmd191bmxvYWRfbG9ja2VkKCk7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFNhdmUgYm9vdCBibG9jayBmb3IgbGF0ZXIgKi8KKwl0eF9kYXRhLT5ib290X2RhdGEgPSBkYXRhOworCWlmICghc2tpcCgmZGF0YSwgdHhfZGF0YS0+ZW5kcCwgVFhfQkxPQ0tfU0laRSkpCisJCWdvdG8gY29ycnVwdDsKKworCWlmICghcmVhZF91aW50MzIoJmRhdGEsIHR4X2RhdGEtPmVuZHAsCisJCQkgICAgICAmdHhfZGF0YS0+bnVtX2NvZGVfc2V0cykpCisJCWdvdG8gY29ycnVwdDsKKworCWRwcmludGsoIiV1IElSIGJsYXN0ZXIgY29kZXNldHMgbG9hZGVkXG4iLCB0eF9kYXRhLT5udW1fY29kZV9zZXRzKTsKKworCXR4X2RhdGEtPmNvZGVfc2V0cyA9IHZtYWxsb2MoCisJCXR4X2RhdGEtPm51bV9jb2RlX3NldHMgKiBzaXplb2YoY2hhciAqKSk7CisJaWYgKHR4X2RhdGEtPmNvZGVfc2V0cyA9PSBOVUxMKSB7CisJCWZ3X3VubG9hZF9sb2NrZWQoKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFRYX0JMT0NLX1NJWkU7ICsraSkKKwkJdHhfZGF0YS0+Zml4ZWRbaV0gPSAtMTsKKworCS8qIFJlYWQgZ2xvYmFsIGZpeGVkIGRhdGEgdGVtcGxhdGUgKi8KKwlpZiAoIXJlYWRfdWludDgoJmRhdGEsIHR4X2RhdGEtPmVuZHAsICZudW1fZ2xvYmFsX2ZpeGVkKSB8fAorCSAgICBudW1fZ2xvYmFsX2ZpeGVkID4gVFhfQkxPQ0tfU0laRSkKKwkJZ290byBjb3JydXB0OworCWZvciAoaSA9IDA7IGkgPCBudW1fZ2xvYmFsX2ZpeGVkOyArK2kpIHsKKwkJdW5zaWduZWQgY2hhciBwb3MsIHZhbDsKKwkJaWYgKCFyZWFkX3VpbnQ4KCZkYXRhLCB0eF9kYXRhLT5lbmRwLCAmcG9zKSB8fAorCQkgICAgIXJlYWRfdWludDgoJmRhdGEsIHR4X2RhdGEtPmVuZHAsICZ2YWwpIHx8CisJCSAgICBwb3MgPj0gVFhfQkxPQ0tfU0laRSkKKwkJCWdvdG8gY29ycnVwdDsKKwkJdHhfZGF0YS0+Zml4ZWRbcG9zXSA9IChpbnQpdmFsOworCX0KKworCS8qIEZpbGNoIG91dCB0aGUgcG9zaXRpb24gb2YgZWFjaCBjb2RlIHNldCAqLworCWZvciAoaSA9IDA7IGkgPCB0eF9kYXRhLT5udW1fY29kZV9zZXRzOyArK2kpIHsKKwkJdW5zaWduZWQgaW50IGlkOworCQl1bnNpZ25lZCBjaGFyIGtleXM7CisJCXVuc2lnbmVkIGNoYXIgbmRpZmZzOworCisJCS8qIFNhdmUgdGhlIGNvZGVzZXQgcG9zaXRpb24gKi8KKwkJdHhfZGF0YS0+Y29kZV9zZXRzW2ldID0gZGF0YTsKKworCQkvKiBSZWFkIGhlYWRlciAqLworCQlpZiAoIXJlYWRfdWludDMyKCZkYXRhLCB0eF9kYXRhLT5lbmRwLCAmaWQpIHx8CisJCSAgICAhcmVhZF91aW50OCgmZGF0YSwgdHhfZGF0YS0+ZW5kcCwgJmtleXMpIHx8CisJCSAgICAhcmVhZF91aW50OCgmZGF0YSwgdHhfZGF0YS0+ZW5kcCwgJm5kaWZmcykgfHwKKwkJICAgIG5kaWZmcyA+IFRYX0JMT0NLX1NJWkUgfHwga2V5cyA9PSAwKQorCQkJZ290byBjb3JydXB0OworCisJCS8qIHNraXAgZGlmZiBwb3NpdGlvbnMgKi8KKwkJaWYgKCFza2lwKCZkYXRhLCB0eF9kYXRhLT5lbmRwLCBuZGlmZnMpKQorCQkJZ290byBjb3JydXB0OworCisJCS8qCisJCSAqIEFmdGVyIHRoZSBkaWZmcyB3ZSBoYXZlIHRoZSBmaXJzdCBrZXkgaWQgKyBkYXRhIC0KKwkJICogZ2xvYmFsIGZpeGVkCisJCSAqLworCQlpZiAoIXNraXAoJmRhdGEsIHR4X2RhdGEtPmVuZHAsCisJCQkgICAgICAgMSArIFRYX0JMT0NLX1NJWkUgLSBudW1fZ2xvYmFsX2ZpeGVkKSkKKwkJCWdvdG8gY29ycnVwdDsKKworCQkvKiBUaGVuIHdlIGhhdmUga2V5cy0xIGJsb2NrcyBvZiBrZXkgaWQrZGlmZnMgKi8KKwkJaWYgKCFza2lwKCZkYXRhLCB0eF9kYXRhLT5lbmRwLAorCQkJICAgICAgIChuZGlmZnMgKyAxKSAqIChrZXlzIC0gMSkpKQorCQkJZ290byBjb3JydXB0OworCX0KKwlyZXQgPSAwOworCWdvdG8gb3V0OworCitjb3JydXB0OgorCXppbG9nX2Vycm9yKCJmaXJtd2FyZSBpcyBjb3JydXB0XG4iKTsKKwlmd191bmxvYWRfbG9ja2VkKCk7CisJcmV0ID0gLUVGQVVMVDsKKworb3V0OgorCW11dGV4X3VubG9jaygmdHhfZGF0YV9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBpbml0aWFsaXNlIHRoZSBJUiBUWCBkZXZpY2UgKi8KK3N0YXRpYyBpbnQgdHhfaW5pdChzdHJ1Y3QgSVIgKmlyKQoreworCWludCByZXQ7CisKKwkvKiBMb2FkICdmaXJtd2FyZScgKi8KKwlyZXQgPSBmd19sb2FkKGlyKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBTZW5kIGJvb3QgYmxvY2sgKi8KKwlyZXQgPSBzZW5kX2Jvb3RfZGF0YShpcik7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCWlyLT5uZWVkX2Jvb3QgPSAwOworCisJLyogTG9va3MgZ29vZCAqLworCXJldHVybiAwOworfQorCisvKiBkbyBub3RoaW5nIHN0dWIgdG8gbWFrZSBMSVJDIGhhcHB5ICovCitzdGF0aWMgbG9mZl90IGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlcCwgbG9mZl90IG9mZnNldCwgaW50IG9yaWcpCit7CisJcmV0dXJuIC1FU1BJUEU7Cit9CisKKy8qIGNvcGllZCBmcm9tIGxpcmNfZGV2ICovCitzdGF0aWMgc3NpemVfdCByZWFkKHN0cnVjdCBmaWxlICpmaWxlcCwgY2hhciAqb3V0YnVmLCBzaXplX3QgbiwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBJUiAqaXIgPSAoc3RydWN0IElSICopZmlsZXAtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBjaGFyIGJ1Zltpci0+YnVmLmNodW5rX3NpemVdOworCWludCByZXQgPSAwLCB3cml0dGVuID0gMDsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKworCWRwcmludGsoInJlYWQgY2FsbGVkXG4iKTsKKwlpZiAoaXItPmNfcnguYWRkciA9PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmlyLT5idWZfbG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlpZiAobiAlIGlyLT5idWYuY2h1bmtfc2l6ZSkgeworCQlkcHJpbnRrKCJyZWFkIHJlc3VsdCA9IC1FSU5WQUxcbiIpOworCQltdXRleF91bmxvY2soJmlyLT5idWZfbG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogd2UgYWRkIG91cnNlbHZlcyB0byB0aGUgdGFzayBxdWV1ZSBiZWZvcmUgYnVmZmVyIGNoZWNrCisJICogdG8gYXZvaWQgbG9zaW5nIHNjYW4gY29kZSAoaW4gY2FzZSB3aGVuIHF1ZXVlIGlzIGF3YWtlbiBzb21ld2hlcmUKKwkgKiBiZXR3ZWVuIHdoaWxlIGNvbmRpdGlvbiBjaGVja2luZyBhbmQgc2NoZWR1bGluZykKKwkgKi8KKwlhZGRfd2FpdF9xdWV1ZSgmaXItPmJ1Zi53YWl0X3BvbGwsICZ3YWl0KTsKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCisJLyoKKwkgKiB3aGlsZSB3ZSBkaWRuJ3QgcHJvdmlkZSAnbGVuZ3RoJyBieXRlcywgZGV2aWNlIGlzIG9wZW5lZCBpbiBibG9ja2luZworCSAqIG1vZGUgYW5kICdjb3B5X3RvX3VzZXInIGlzIGhhcHB5LCB3YWl0IGZvciBkYXRhLgorCSAqLworCXdoaWxlICh3cml0dGVuIDwgbiAmJiByZXQgPT0gMCkgeworCQlpZiAobGlyY19idWZmZXJfZW1wdHkoJmlyLT5idWYpKSB7CisJCQkvKgorCQkJICogQWNjb3JkaW5nIHRvIHRoZSByZWFkKDIpIG1hbiBwYWdlLCAnd3JpdHRlbicgY2FuIGJlCisJCQkgKiByZXR1cm5lZCBhcyBsZXNzIHRoYW4gJ24nLCBpbnN0ZWFkIG9mIGJsb2NraW5nCisJCQkgKiBhZ2FpbiwgcmV0dXJuaW5nIC1FV09VTERCTE9DSywgb3IgcmV0dXJuaW5nCisJCQkgKiAtRVJFU1RBUlRTWVMKKwkJCSAqLworCQkJaWYgKHdyaXR0ZW4pCisJCQkJYnJlYWs7CisJCQlpZiAoZmlsZXAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQkJcmV0ID0gLUVXT1VMREJMT0NLOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJcmV0ID0gLUVSRVNUQVJUU1lTOworCQkJCWJyZWFrOworCQkJfQorCQkJc2NoZWR1bGUoKTsKKwkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCX0gZWxzZSB7CisJCQlsaXJjX2J1ZmZlcl9yZWFkKCZpci0+YnVmLCBidWYpOworCQkJcmV0ID0gY29weV90b191c2VyKCh2b2lkICopb3V0YnVmK3dyaXR0ZW4sIGJ1ZiwKKwkJCQkJICAgaXItPmJ1Zi5jaHVua19zaXplKTsKKwkJCXdyaXR0ZW4gKz0gaXItPmJ1Zi5jaHVua19zaXplOworCQl9CisJfQorCisJcmVtb3ZlX3dhaXRfcXVldWUoJmlyLT5idWYud2FpdF9wb2xsLCAmd2FpdCk7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwltdXRleF91bmxvY2soJmlyLT5idWZfbG9jayk7CisKKwlkcHJpbnRrKCJyZWFkIHJlc3VsdCA9ICVzICglZClcbiIsCisJCXJldCA/ICItRUZBVUxUIiA6ICJPSyIsIHJldCk7CisKKwlyZXR1cm4gcmV0ID8gcmV0IDogd3JpdHRlbjsKK30KKworLyogc2VuZCBhIGtleXByZXNzIHRvIHRoZSBJUiBUWCBkZXZpY2UgKi8KK3N0YXRpYyBpbnQgc2VuZF9jb2RlKHN0cnVjdCBJUiAqaXIsIHVuc2lnbmVkIGludCBjb2RlLCB1bnNpZ25lZCBpbnQga2V5KQoreworCXVuc2lnbmVkIGNoYXIgZGF0YV9ibG9ja1tUWF9CTE9DS19TSVpFXTsKKwl1bnNpZ25lZCBjaGFyIGJ1ZlsyXTsKKwlpbnQgaSwgcmV0OworCisJLyogR2V0IGRhdGEgZm9yIHRoZSBjb2Rlc2V0L2tleSAqLworCXJldCA9IGdldF9rZXlfZGF0YShkYXRhX2Jsb2NrLCBjb2RlLCBrZXkpOworCisJaWYgKHJldCA9PSAtRVBST1RPKSB7CisJCXppbG9nX2Vycm9yKCJmYWlsZWQgdG8gZ2V0IGRhdGEgZm9yIGNvZGUgJXUsIGtleSAldSAtLSBjaGVjayAiCisJCQkgICAgImxpcmNkLmNvbmYgZW50cmllc1xuIiwgY29kZSwga2V5KTsKKwkJcmV0dXJuIHJldDsKKwl9IGVsc2UgaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJLyogU2VuZCB0aGUgZGF0YSBibG9jayAqLworCXJldCA9IHNlbmRfZGF0YV9ibG9jayhpciwgZGF0YV9ibG9jayk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJLyogU2VuZCBkYXRhIGJsb2NrIGxlbmd0aD8gKi8KKwlidWZbMF0gPSAweDAwOworCWJ1ZlsxXSA9IDB4NDA7CisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKCZpci0+Y190eCwgYnVmLCAyKTsKKwlpZiAocmV0ICE9IDIpIHsKKwkJemlsb2dfZXJyb3IoImkyY19tYXN0ZXJfc2VuZCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAtRUZBVUxUOworCX0KKwlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoJmlyLT5jX3R4LCBidWYsIDEpOworCWlmIChyZXQgIT0gMSkgeworCQl6aWxvZ19lcnJvcigiaTJjX21hc3Rlcl9zZW5kIGZhaWxlZCB3aXRoICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IC1FRkFVTFQ7CisJfQorCisJLyogU2VuZCBmaW5pc2hlZCBkb3dubG9hZD8gKi8KKwlyZXQgPSBpMmNfbWFzdGVyX3JlY3YoJmlyLT5jX3R4LCBidWYsIDEpOworCWlmIChyZXQgIT0gMSkgeworCQl6aWxvZ19lcnJvcigiaTJjX21hc3Rlcl9yZWN2IGZhaWxlZCB3aXRoICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IC1FRkFVTFQ7CisJfQorCWlmIChidWZbMF0gIT0gMHhBMCkgeworCQl6aWxvZ19lcnJvcigidW5leHBlY3RlZCBJUiBUWCByZXNwb25zZSAjMTogJTAyeFxuIiwKKwkJCWJ1ZlswXSk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCS8qIFNlbmQgcHJlcGFyZSBjb21tYW5kPyAqLworCWJ1ZlswXSA9IDB4MDA7CisJYnVmWzFdID0gMHg4MDsKKwlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoJmlyLT5jX3R4LCBidWYsIDIpOworCWlmIChyZXQgIT0gMikgeworCQl6aWxvZ19lcnJvcigiaTJjX21hc3Rlcl9zZW5kIGZhaWxlZCB3aXRoICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IC1FRkFVTFQ7CisJfQorCisjaWZkZWYgSTJDX0hXX0JfSERQVlIKKwkvKgorCSAqIFRoZSBzbGVlcCBiaXRzIGFyZW4ndCBuZWNlc3Nhcnkgb24gdGhlIEhEIFBWUiwgYW5kIGluIGZhY3QsIHRoZQorCSAqIGxhc3QgaTJjX21hc3Rlcl9yZWN2IGFsd2F5cyBmYWlscyB3aXRoIGEgLTUsIHNvIGZvciBub3csIHdlJ3JlCisJICogZ29pbmcgdG8gc2tpcCB0aGlzIHdob2xlIG1lc3MgYW5kIHNheSB3ZSdyZSBkb25lIG9uIHRoZSBIRCBQVlIKKwkgKi8KKwlpZiAoaXItPmNfcnguYWRhcHRlci0+aWQgPT0gSTJDX0hXX0JfSERQVlIpCisJCWdvdG8gZG9uZTsKKyNlbmRpZgorCisJLyoKKwkgKiBUaGlzIGJpdCBOQUtzIHVudGlsIHRoZSBkZXZpY2UgaXMgcmVhZHksIHNvIHdlIHJldHJ5IGl0CisJICogc2xlZXBpbmcgYSBiaXQgZWFjaCB0aW1lLiAgVGhpcyBzZWVtcyB0byBiZSB3aGF0IHRoZSB3aW5kb3dzCisJICogZHJpdmVyIGRvZXMsIGFwcHJveGltYXRlbHkuCisJICogVHJ5IGZvciB1cCB0byAxcy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjA7ICsraSkgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCXNjaGVkdWxlX3RpbWVvdXQoKDUwICogSFogKyA5OTkpIC8gMTAwMCk7CisJCXJldCA9IGkyY19tYXN0ZXJfc2VuZCgmaXItPmNfdHgsIGJ1ZiwgMSk7CisJCWlmIChyZXQgPT0gMSkKKwkJCWJyZWFrOworCQlkcHJpbnRrKCJOQUsgZXhwZWN0ZWQ6IGkyY19tYXN0ZXJfc2VuZCAiCisJCQkiZmFpbGVkIHdpdGggJWQgKHRyeSAlZClcbiIsIHJldCwgaSsxKTsKKwl9CisJaWYgKHJldCAhPSAxKSB7CisJCXppbG9nX2Vycm9yKCJJUiBUWCBjaGlwIG5ldmVyIGdvdCByZWFkeTogbGFzdCBpMmNfbWFzdGVyX3NlbmQgIgorCQkJICAgICJmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAtRUZBVUxUOworCX0KKworCS8qIFNlZW1zIHRvIGJlIGFuICdvaycgcmVzcG9uc2UgKi8KKwlpID0gaTJjX21hc3Rlcl9yZWN2KCZpci0+Y190eCwgYnVmLCAxKTsKKwlpZiAoaSAhPSAxKSB7CisJCXppbG9nX2Vycm9yKCJpMmNfbWFzdGVyX3JlY3YgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAoYnVmWzBdICE9IDB4ODApIHsKKwkJemlsb2dfZXJyb3IoInVuZXhwZWN0ZWQgSVIgVFggcmVzcG9uc2UgIzI6ICUwMnhcbiIsIGJ1ZlswXSk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworZG9uZToKKwkvKiBPaCBnb29kLCBpdCB3b3JrZWQgKi8KKwlkcHJpbnRrKCJzZW50IGNvZGUgJXUsIGtleSAldVxuIiwgY29kZSwga2V5KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdyaXRlIGEgY29kZSB0byB0aGUgZGV2aWNlLiAgV2UgdGFrZSBpbiBhIDMyLWJpdCBudW1iZXIgKGFuIGludCkgYW5kIHRoZW4KKyAqIGRlY29kZSB0aGlzIHRvIGEgY29kZXNldC9rZXkgaW5kZXguICBUaGUga2V5IGRhdGEgaXMgdGhlbiBkZWNvbXByZXNzZWQgYW5kCisgKiBzZW50IHRvIHRoZSBkZXZpY2UuICBXZSBoYXZlIGEgc3BpbiBsb2NrIGFzIHBlciBpMmMgZG9jdW1lbnRhdGlvbiB0byBwcmV2ZW50CisgKiBtdWx0aXBsZSBjb25jdXJyZW50IHNlbmRzIHdoaWNoIHdvdWxkIHByb2JhYmx5IGNhdXNlIHRoZSBkZXZpY2UgdG8gZXhwbG9kZS4KKyAqLworc3RhdGljIHNzaXplX3Qgd3JpdGUoc3RydWN0IGZpbGUgKmZpbGVwLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuLAorCQkJICBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IElSICppciA9IChzdHJ1Y3QgSVIgKilmaWxlcC0+cHJpdmF0ZV9kYXRhOworCXNpemVfdCBpOworCWludCBmYWlsdXJlcyA9IDA7CisKKwlpZiAoaXItPmNfdHguYWRkciA9PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIFZhbGlkYXRlIHVzZXIgcGFyYW1ldGVycyAqLworCWlmIChuICUgc2l6ZW9mKGludCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogTG9jayBpMmMgYnVzIGZvciB0aGUgZHVyYXRpb24gKi8KKwltdXRleF9sb2NrKCZpci0+aXJfbG9jayk7CisKKwkvKiBTZW5kIGVhY2gga2V5cHJlc3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbjspIHsKKwkJaW50IHJldCA9IDA7CisJCWludCBjb21tYW5kOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmY29tbWFuZCwgYnVmICsgaSwgc2l6ZW9mKGNvbW1hbmQpKSkgeworCQkJbXV0ZXhfdW5sb2NrKCZpci0+aXJfbG9jayk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCisJCS8qIFNlbmQgYm9vdCBkYXRhIGZpcnN0IGlmIHJlcXVpcmVkICovCisJCWlmIChpci0+bmVlZF9ib290ID09IDEpIHsKKwkJCXJldCA9IHNlbmRfYm9vdF9kYXRhKGlyKTsKKwkJCWlmIChyZXQgPT0gMCkKKwkJCQlpci0+bmVlZF9ib290ID0gMDsKKwkJfQorCisJCS8qIFNlbmQgdGhlIGNvZGUgKi8KKwkJaWYgKHJldCA9PSAwKSB7CisJCQlyZXQgPSBzZW5kX2NvZGUoaXIsICh1bnNpZ25lZCljb21tYW5kID4+IDE2LAorCQkJCQkgICAgKHVuc2lnbmVkKWNvbW1hbmQgJiAweEZGRkYpOworCQkJaWYgKHJldCA9PSAtRVBST1RPKSB7CisJCQkJbXV0ZXhfdW5sb2NrKCZpci0+aXJfbG9jayk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIEhtbSwgYSBmYWlsdXJlLiAgSWYgd2UndmUgaGFkIGEgZmV3IHRoZW4gZ2l2ZSB1cCwgb3RoZXJ3aXNlCisJCSAqIHRyeSBhIHJlc2V0CisJCSAqLworCQlpZiAocmV0ICE9IDApIHsKKwkJCS8qIExvb2tzIGxpa2UgdGhlIGNoaXAgY3Jhc2hlZCwgcmVzZXQgaXQgKi8KKwkJCXppbG9nX2Vycm9yKCJzZW5kaW5nIHRvIHRoZSBJUiB0cmFuc21pdHRlciBjaGlwICIKKwkJCQkgICAgImZhaWxlZCwgdHJ5aW5nIHJlc2V0XG4iKTsKKworCQkJaWYgKGZhaWx1cmVzID49IDMpIHsKKwkJCQl6aWxvZ19lcnJvcigidW5hYmxlIHRvIHNlbmQgdG8gdGhlIElSIGNoaXAgIgorCQkJCQkgICAgImFmdGVyIDMgcmVzZXRzLCBnaXZpbmcgdXBcbiIpOworCQkJCW11dGV4X3VubG9jaygmaXItPmlyX2xvY2spOworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCQlzY2hlZHVsZV90aW1lb3V0KCgxMDAgKiBIWiArIDk5OSkgLyAxMDAwKTsKKwkJCWlyLT5uZWVkX2Jvb3QgPSAxOworCQkJKytmYWlsdXJlczsKKwkJfSBlbHNlCisJCQlpICs9IHNpemVvZihpbnQpOworCX0KKworCS8qIFJlbGVhc2UgaTJjIGJ1cyAqLworCW11dGV4X3VubG9jaygmaXItPmlyX2xvY2spOworCisJLyogQWxsIGxvb2tzIGdvb2QgKi8KKwlyZXR1cm4gbjsKK30KKworLyogY29waWVkIGZyb20gbGlyY19kZXYgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IElSICppciA9IChzdHJ1Y3QgSVIgKilmaWxlcC0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCByZXQ7CisKKwlkcHJpbnRrKCJwb2xsIGNhbGxlZFxuIik7CisJaWYgKGlyLT5jX3J4LmFkZHIgPT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZpci0+YnVmX2xvY2spOworCisJcG9sbF93YWl0KGZpbGVwLCAmaXItPmJ1Zi53YWl0X3BvbGwsIHdhaXQpOworCisJZHByaW50aygicG9sbCByZXN1bHQgPSAlc1xuIiwKKwkJbGlyY19idWZmZXJfZW1wdHkoJmlyLT5idWYpID8gIjAiIDogIlBPTExJTnxQT0xMUkROT1JNIik7CisKKwlyZXQgPSBsaXJjX2J1ZmZlcl9lbXB0eSgmaXItPmJ1ZikgPyAwIDogKFBPTExJTnxQT0xMUkROT1JNKTsKKworCW11dGV4X3VubG9jaygmaXItPmJ1Zl9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgbG9uZyBpb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBJUiAqaXIgPSAoc3RydWN0IElSICopZmlsZXAtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgbW9kZSwgZmVhdHVyZXMgPSAwOworCisJaWYgKGlyLT5jX3J4LmFkZHIgIT0gMCkKKwkJZmVhdHVyZXMgfD0gTElSQ19DQU5fUkVDX0xJUkNDT0RFOworCWlmIChpci0+Y190eC5hZGRyICE9IDApCisJCWZlYXR1cmVzIHw9IExJUkNfQ0FOX1NFTkRfUFVMU0U7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgTElSQ19HRVRfTEVOR1RIOgorCQlyZXN1bHQgPSBwdXRfdXNlcigodW5zaWduZWQgbG9uZykxMywKKwkJCQkgICh1bnNpZ25lZCBsb25nICopYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBMSVJDX0dFVF9GRUFUVVJFUzoKKwkJcmVzdWx0ID0gcHV0X3VzZXIoZmVhdHVyZXMsICh1bnNpZ25lZCBsb25nICopIGFyZyk7CisJCWJyZWFrOworCWNhc2UgTElSQ19HRVRfUkVDX01PREU6CisJCWlmICghKGZlYXR1cmVzJkxJUkNfQ0FOX1JFQ19NQVNLKSkKKwkJCXJldHVybiAtRU5PU1lTOworCisJCXJlc3VsdCA9IHB1dF91c2VyKExJUkNfUkVDMk1PREUKKwkJCQkgIChmZWF0dXJlcyZMSVJDX0NBTl9SRUNfTUFTSyksCisJCQkJICAodW5zaWduZWQgbG9uZyAqKWFyZyk7CisJCWJyZWFrOworCWNhc2UgTElSQ19TRVRfUkVDX01PREU6CisJCWlmICghKGZlYXR1cmVzJkxJUkNfQ0FOX1JFQ19NQVNLKSkKKwkJCXJldHVybiAtRU5PU1lTOworCisJCXJlc3VsdCA9IGdldF91c2VyKG1vZGUsICh1bnNpZ25lZCBsb25nICopYXJnKTsKKwkJaWYgKCFyZXN1bHQgJiYgIShMSVJDX01PREUyUkVDKG1vZGUpICYgZmVhdHVyZXMpKQorCQkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSBMSVJDX0dFVF9TRU5EX01PREU6CisJCWlmICghKGZlYXR1cmVzJkxJUkNfQ0FOX1NFTkRfTUFTSykpCisJCQlyZXR1cm4gLUVOT1NZUzsKKworCQlyZXN1bHQgPSBwdXRfdXNlcihMSVJDX01PREVfUFVMU0UsICh1bnNpZ25lZCBsb25nICopIGFyZyk7CisJCWJyZWFrOworCWNhc2UgTElSQ19TRVRfU0VORF9NT0RFOgorCQlpZiAoIShmZWF0dXJlcyZMSVJDX0NBTl9TRU5EX01BU0spKQorCQkJcmV0dXJuIC1FTk9TWVM7CisKKwkJcmVzdWx0ID0gZ2V0X3VzZXIobW9kZSwgKHVuc2lnbmVkIGxvbmcgKikgYXJnKTsKKwkJaWYgKCFyZXN1bHQgJiYgbW9kZSAhPSBMSVJDX01PREVfUFVMU0UpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBPcGVuIHRoZSBJUiBkZXZpY2UuICBHZXQgaG9sZCBvZiBvdXIgSVIgc3RydWN0dXJlIGFuZAorICogc3Rhc2ggaXQgaW4gcHJpdmF0ZV9kYXRhIGZvciB0aGUgZmlsZQorICovCitzdGF0aWMgaW50IG9wZW4oc3RydWN0IGlub2RlICpub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApCit7CisJc3RydWN0IElSICppcjsKKwlpbnQgcmV0OworCisJLyogZmluZCBvdXIgSVIgc3RydWN0ICovCisJdW5zaWduZWQgbWlub3IgPSBNSU5PUihub2RlLT5pX3JkZXYpOworCWlmIChtaW5vciA+PSBNQVhfSVJDVExfREVWSUNFUykgeworCQlkcHJpbnRrKCJtaW5vciAlZDogb3BlbiByZXN1bHQgPSAtRU5PREVWXG4iLAorCQkJbWlub3IpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaXIgPSBpcl9kZXZpY2VzW21pbm9yXTsKKworCS8qIGluY3JlbWVudCBpbiB1c2UgY291bnQgKi8KKwltdXRleF9sb2NrKCZpci0+aXJfbG9jayk7CisJKytpci0+b3BlbjsKKwlyZXQgPSBzZXRfdXNlX2luYyhpcik7CisJaWYgKHJldCAhPSAwKSB7CisJCS0taXItPm9wZW47CisJCW11dGV4X3VubG9jaygmaXItPmlyX2xvY2spOworCQlyZXR1cm4gcmV0OworCX0KKwltdXRleF91bmxvY2soJmlyLT5pcl9sb2NrKTsKKworCS8qIHN0YXNoIG91ciBJUiBzdHJ1Y3QgKi8KKwlmaWxlcC0+cHJpdmF0ZV9kYXRhID0gaXI7CisKKwlyZXR1cm4gMDsKK30KKworLyogQ2xvc2UgdGhlIElSIGRldmljZSAqLworc3RhdGljIGludCBjbG9zZShzdHJ1Y3QgaW5vZGUgKm5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcCkKK3sKKwkvKiBmaW5kIG91ciBJUiBzdHJ1Y3QgKi8KKwlzdHJ1Y3QgSVIgKmlyID0gKHN0cnVjdCBJUiAqKWZpbGVwLT5wcml2YXRlX2RhdGE7CisJaWYgKGlyID09IE5VTEwpIHsKKwkJemlsb2dfZXJyb3IoImNsb3NlOiBubyBwcml2YXRlX2RhdGEgYXR0YWNoZWQgdG8gdGhlIGZpbGUhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogZGVjcmVtZW50IGluIHVzZSBjb3VudCAqLworCW11dGV4X2xvY2soJmlyLT5pcl9sb2NrKTsKKwktLWlyLT5vcGVuOworCXNldF91c2VfZGVjKGlyKTsKKwltdXRleF91bmxvY2soJmlyLT5pcl9sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGxpcmNfZHJpdmVyIGxpcmNfdGVtcGxhdGUgPSB7CisJLm5hbWUJCT0gImxpcmNfemlsb2ciLAorCS5zZXRfdXNlX2luYwk9IHNldF91c2VfaW5jLAorCS5zZXRfdXNlX2RlYwk9IHNldF91c2VfZGVjLAorCS5vd25lcgkJPSBUSElTX01PRFVMRQorfTsKKworc3RhdGljIGludCBpcl9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CitzdGF0aWMgaW50IGlyX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgaW50IGlyX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGlyX3RyYW5zY2VpdmVyX2lkW10gPSB7CisJLyogR2VuZXJpYyBlbnRyeSBmb3IgYW55IElSIHRyYW5zY2VpdmVyICovCisJeyAiaXJfdmlkZW8iLCAwIH0sCisJLyogSVIgZGV2aWNlIHNwZWNpZmljIGVudHJpZXMgc2hvdWxkIGJlIGFkZGVkIGhlcmUgKi8KKwl7ICJpcl90eF96OGYwODExX2hhdXAiLCAwIH0sCisJeyAiaXJfcnhfejhmMDgxMV9oYXVwIiwgMCB9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAiWmlsb2cvSGF1cHBhdWdlIGkyYyBJUiIsCisJfSwKKwkucHJvYmUJCT0gaXJfcHJvYmUsCisJLnJlbW92ZQkJPSBpcl9yZW1vdmUsCisJLmNvbW1hbmQJPSBpcl9jb21tYW5kLAorCS5pZF90YWJsZQk9IGlyX3RyYW5zY2VpdmVyX2lkLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGlyY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkubGxzZWVrCQk9IGxzZWVrLAorCS5yZWFkCQk9IHJlYWQsCisJLndyaXRlCQk9IHdyaXRlLAorCS5wb2xsCQk9IHBvbGwsCisJLnVubG9ja2VkX2lvY3RsCT0gaW9jdGwsCisJLm9wZW4JCT0gb3BlbiwKKwkucmVsZWFzZQk9IGNsb3NlCit9OworCitzdGF0aWMgaW50IGlyX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBJUiAqaXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCW11dGV4X2xvY2soJmlyLT5pcl9sb2NrKTsKKworCWlmIChpci0+aGF2ZV9yeCB8fCBpci0+aGF2ZV90eCkgeworCQlERUNMQVJFX0NPTVBMRVRJT04odG4pOworCQlERUNMQVJFX0NPTVBMRVRJT04odG4yKTsKKworCQkvKiBlbmQgdXAgcG9sbGluZyB0aHJlYWQgKi8KKwkJaWYgKGlyLT50YXNrICYmICFJU19FUlIoaXItPnRhc2spKSB7CisJCQlpci0+dF9ub3RpZnkgPSAmdG47CisJCQlpci0+dF9ub3RpZnkyID0gJnRuMjsKKwkJCWlyLT5zaHV0ZG93biA9IDE7CisJCQl3YWtlX3VwX3Byb2Nlc3MoaXItPnRhc2spOworCQkJY29tcGxldGUoJnRuMik7CisJCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ0bik7CisJCQlpci0+dF9ub3RpZnkgPSBOVUxMOworCQkJaXItPnRfbm90aWZ5MiA9IE5VTEw7CisJCX0KKworCX0gZWxzZSB7CisJCW11dGV4X3VubG9jaygmaXItPmlyX2xvY2spOworCQl6aWxvZ19lcnJvcigiJXM6IGRldGFjaGVkIGZyb20gc29tZXRoaW5nIHdlIGRpZG4ndCAiCisJCQkgICAgImF0dGFjaCB0b1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiB1bnJlZ2lzdGVyIGxpcmMgZHJpdmVyICovCisJaWYgKGlyLT5sLm1pbm9yID49IDAgJiYgaXItPmwubWlub3IgPCBNQVhfSVJDVExfREVWSUNFUykgeworCQlsaXJjX3VucmVnaXN0ZXJfZHJpdmVyKGlyLT5sLm1pbm9yKTsKKwkJaXJfZGV2aWNlc1tpci0+bC5taW5vcl0gPSBOVUxMOworCX0KKworCS8qIGZyZWUgbWVtb3J5ICovCisJbGlyY19idWZmZXJfZnJlZSgmaXItPmJ1Zik7CisJbXV0ZXhfdW5sb2NrKCZpci0+aXJfbG9jayk7CisJa2ZyZWUoaXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXJfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBJUiAqaXIgPSBOVUxMOworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IGNsaWVudC0+YWRhcHRlcjsKKwljaGFyIGJ1ZjsKKwlpbnQgcmV0OworCWludCBoYXZlX3J4ID0gMCwgaGF2ZV90eCA9IDA7CisKKwlkcHJpbnRrKCIlczogYWRhcHRlciBpZD0weCV4LCBjbGllbnQgYWRkcj0weCUwMnhcbiIsCisJCV9fZnVuY19fLCBhZGFwLT5pZCwgY2xpZW50LT5hZGRyKTsKKworCS8qCisJICogVGhlIGV4dGVybmFsIElSIHJlY2VpdmVyIGlzIGF0IGkyYyBhZGRyZXNzIDB4NzEuCisJICogVGhlIElSIHRyYW5zbWl0dGVyIGlzIGF0IDB4NzAuCisJICovCisJY2xpZW50LT5hZGRyID0gMHg3MDsKKworCWlmICghZGlzYWJsZV90eCkgeworCQlpZiAoaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgJmJ1ZiwgMSkgPT0gMSkKKwkJCWhhdmVfdHggPSAxOworCQlkcHJpbnRrKCJwcm9iZSAweDcwIEAgJXM6ICVzXG4iLAorCQkJYWRhcC0+bmFtZSwgaGF2ZV90eCA/ICJzdWNjZXNzIiA6ICJmYWlsZWQiKTsKKwl9CisKKwlpZiAoIWRpc2FibGVfcngpIHsKKwkJY2xpZW50LT5hZGRyID0gMHg3MTsKKwkJaWYgKGkyY19tYXN0ZXJfcmVjdihjbGllbnQsICZidWYsIDEpID09IDEpCisJCQloYXZlX3J4ID0gMTsKKwkJZHByaW50aygicHJvYmUgMHg3MSBAICVzOiAlc1xuIiwKKwkJCWFkYXAtPm5hbWUsIGhhdmVfcnggPyAic3VjY2VzcyIgOiAiZmFpbGVkIik7CisJfQorCisJaWYgKCEoaGF2ZV9yeCB8fCBoYXZlX3R4KSkgeworCQl6aWxvZ19lcnJvcigiJXM6IG5vIGRldmljZXMgZm91bmRcbiIsIGFkYXAtPm5hbWUpOworCQlnb3RvIG91dF9ub2RldjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJsaXJjX3ppbG9nOiBjaGlwIGZvdW5kIHdpdGggJXNcbiIsCisJCWhhdmVfcnggJiYgaGF2ZV90eCA/ICJSWCBhbmQgVFgiIDoKKwkJCWhhdmVfcnggPyAiUlggb25seSIgOiAiVFggb25seSIpOworCisJaXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgSVIpLCBHRlBfS0VSTkVMKTsKKworCWlmICghaXIpCisJCWdvdG8gb3V0X25vbWVtOworCisJcmV0ID0gbGlyY19idWZmZXJfaW5pdCgmaXItPmJ1ZiwgMiwgQlVGTEVOIC8gMik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfbm9tZW07CisKKwltdXRleF9pbml0KCZpci0+aXJfbG9jayk7CisJbXV0ZXhfaW5pdCgmaXItPmJ1Zl9sb2NrKTsKKwlpci0+bmVlZF9ib290ID0gMTsKKworCW1lbWNweSgmaXItPmwsICZsaXJjX3RlbXBsYXRlLCBzaXplb2Yoc3RydWN0IGxpcmNfZHJpdmVyKSk7CisJaXItPmwubWlub3IgPSAtMTsKKworCS8qIEkyQyBhdHRhY2ggdG8gZGV2aWNlICovCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgaXIpOworCisJLyogaW5pdGlhbGlzZSBSWCBkZXZpY2UgKi8KKwlpZiAoaGF2ZV9yeCkgeworCQlERUNMQVJFX0NPTVBMRVRJT04odG4pOworCQltZW1jcHkoJmlyLT5jX3J4LCBjbGllbnQsIHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCkpOworCisJCWlyLT5jX3J4LmFkZHIgPSAweDcxOworCQlzdHJsY3B5KGlyLT5jX3J4Lm5hbWUsIFpJTE9HX0hBVVBQQVVHRV9JUl9SWF9OQU1FLAorCQkJSTJDX05BTUVfU0laRSk7CisKKwkJLyogdHJ5IHRvIGZpcmUgdXAgcG9sbGluZyB0aHJlYWQgKi8KKwkJaXItPnRfbm90aWZ5ID0gJnRuOworCQlpci0+dGFzayA9IGt0aHJlYWRfcnVuKGxpcmNfdGhyZWFkLCBpciwgImxpcmNfemlsb2ciKTsKKwkJaWYgKElTX0VSUihpci0+dGFzaykpIHsKKwkJCXJldCA9IFBUUl9FUlIoaXItPnRhc2spOworCQkJemlsb2dfZXJyb3IoImxpcmNfcmVnaXN0ZXJfZHJpdmVyOiBjYW5ub3QgcnVuICIKKwkJCQkgICAgInBvbGwgdGhyZWFkICVkXG4iLCByZXQpOworCQkJZ290byBlcnI7CisJCX0KKwkJd2FpdF9mb3JfY29tcGxldGlvbigmdG4pOworCQlpci0+dF9ub3RpZnkgPSBOVUxMOworCQlpci0+aGF2ZV9yeCA9IDE7CisJfQorCisJLyogaW5pdGlhbGlzZSBUWCBkZXZpY2UgKi8KKwlpZiAoaGF2ZV90eCkgeworCQltZW1jcHkoJmlyLT5jX3R4LCBjbGllbnQsIHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCkpOworCQlpci0+Y190eC5hZGRyID0gMHg3MDsKKwkJc3RybGNweShpci0+Y190eC5uYW1lLCBaSUxPR19IQVVQUEFVR0VfSVJfVFhfTkFNRSwKKwkJCUkyQ19OQU1FX1NJWkUpOworCQlpci0+aGF2ZV90eCA9IDE7CisJfQorCisJLyogc2V0IGxpcmNfZGV2IHN0dWZmICovCisJaXItPmwuY29kZV9sZW5ndGggPSAxMzsKKwlpci0+bC5yYnVmCSAgPSAmaXItPmJ1ZjsKKwlpci0+bC5mb3BzCSAgPSAmbGlyY19mb3BzOworCWlyLT5sLmRhdGEJICA9IGlyOworCWlyLT5sLm1pbm9yICAgICAgID0gbWlub3I7CisJaXItPmwuZGV2ICAgICAgICAgPSAmYWRhcC0+ZGV2OworCWlyLT5sLnNhbXBsZV9yYXRlID0gMDsKKworCS8qIHJlZ2lzdGVyIHdpdGggbGlyYyAqLworCWlyLT5sLm1pbm9yID0gbGlyY19yZWdpc3Rlcl9kcml2ZXIoJmlyLT5sKTsKKwlpZiAoaXItPmwubWlub3IgPCAwIHx8IGlyLT5sLm1pbm9yID49IE1BWF9JUkNUTF9ERVZJQ0VTKSB7CisJCXppbG9nX2Vycm9yKCJpcl9hdHRhY2g6IFwibWlub3JcIiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgJWQgIgorCQkJICAgICIoJWQpIVxuIiwgTUFYX0lSQ1RMX0RFVklDRVMtMSwgaXItPmwubWlub3IpOworCQlyZXQgPSAtRUJBRFJRQzsKKwkJZ290byBlcnI7CisJfQorCisJLyogc3RvcmUgdGhpcyBmb3IgZ2V0dGluZyBiYWNrIGluIG9wZW4oKSBsYXRlciBvbiAqLworCWlyX2RldmljZXNbaXItPmwubWlub3JdID0gaXI7CisKKwkvKgorCSAqIGlmIHdlIGhhdmUgdGhlIHR4IGRldmljZSwgbG9hZCB0aGUgJ2Zpcm13YXJlJy4gIFdlIGRvIHRoaXMKKwkgKiBhZnRlciByZWdpc3RlcmluZyB3aXRoIGxpcmMgYXMgb3RoZXJ3aXNlIGhvdHBsdWcgc2VlbXMgdG8gdGFrZQorCSAqIDEwcyB0byBjcmVhdGUgdGhlIGxpcmMgZGV2aWNlLgorCSAqLworCWlmIChoYXZlX3R4KSB7CisJCS8qIFNwZWNpYWwgVFggaW5pdCAqLworCQlyZXQgPSB0eF9pbml0KGlyKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZ290byBlcnI7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwkvKiB1bmRvIGV2ZXJ5dGhpbmcsIGhvcGVmdWxseS4uLiAqLworCWlmIChpci0+Y19yeC5hZGRyKQorCQlpcl9yZW1vdmUoJmlyLT5jX3J4KTsKKwlpZiAoaXItPmNfdHguYWRkcikKKwkJaXJfcmVtb3ZlKCZpci0+Y190eCk7CisJcmV0dXJuIHJldDsKKworb3V0X25vZGV2OgorCXppbG9nX2Vycm9yKCJubyBkZXZpY2UgZm91bmRcbiIpOworCXJldHVybiAtRU5PREVWOworCitvdXRfbm9tZW06CisJemlsb2dfZXJyb3IoIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOworCWtmcmVlKGlyKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIGludCBpcl9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwkvKiBub3RoaW5nICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHppbG9nX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJemlsb2dfbm90aWZ5KCJaaWxvZy9IYXVwcGF1Z2UgSVIgZHJpdmVyIGluaXRpYWxpemluZ1xuIik7CisKKwltdXRleF9pbml0KCZ0eF9kYXRhX2xvY2spOworCisJcmVxdWVzdF9tb2R1bGUoImZpcm13YXJlX2NsYXNzIik7CisKKwlyZXQgPSBpMmNfYWRkX2RyaXZlcigmZHJpdmVyKTsKKwlpZiAocmV0KQorCQl6aWxvZ19lcnJvcigiaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKKwllbHNlCisJCXppbG9nX25vdGlmeSgiaW5pdGlhbGl6YXRpb24gY29tcGxldGVcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHppbG9nX2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmZHJpdmVyKTsKKwkvKiBpZiBsb2FkZWQgKi8KKwlmd191bmxvYWQoKTsKKwl6aWxvZ19ub3RpZnkoIlppbG9nL0hhdXBwYXVnZSBJUiBkcml2ZXIgdW5sb2FkZWRcbiIpOworfQorCittb2R1bGVfaW5pdCh6aWxvZ19pbml0KTsKK21vZHVsZV9leGl0KHppbG9nX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlppbG9nL0hhdXBwYXVnZSBpbmZyYXJlZCB0cmFuc21pdHRlciBkcml2ZXIgKGkyYyBzdGFjaykiKTsKK01PRFVMRV9BVVRIT1IoIkdlcmQgS25vcnIsIE1pY2hhbCBLb2NoYW5vd2ljeiwgQ2hyaXN0b3BoIEJhcnRlbG11cywgIgorCSAgICAgICJVbHJpY2ggTXVlbGxlciwgU3RlZmFuIEphaG4sIEplcm9tZSBCcm9jaywgTWFyayBXZWF2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKy8qIGZvciBjb21wYXQgd2l0aCBvbGQgbmFtZSwgd2hpY2ggaXNuJ3QgYWxsIHRoYXQgYWNjdXJhdGUgYW55bW9yZSAqLworTU9EVUxFX0FMSUFTKCJsaXJjX3B2cjE1MCIpOworCittb2R1bGVfcGFyYW0obWlub3IsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG1pbm9yLCAiUHJlZmVycmVkIG1pbm9yIGRldmljZSBudW1iZXIiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgZGVidWdnaW5nIG1lc3NhZ2VzIik7CisKK21vZHVsZV9wYXJhbShkaXNhYmxlX3J4LCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9yeCwgIkRpc2FibGUgdGhlIElSIHJlY2VpdmVyIGRldmljZSIpOworCittb2R1bGVfcGFyYW0oZGlzYWJsZV90eCwgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfdHgsICJEaXNhYmxlIHRoZSBJUiB0cmFuc21pdHRlciBkZXZpY2UiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZW1yYXIvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9tZW1yYXIvVE9ETwppbmRleCAwMDg3NDQ3Li40MzVlMDliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL1RPRE8KKysrIGIvZHJpdmVycy9zdGFnaW5nL21lbXJhci9UT0RPCkBAIC0xLDcgKzEsNyBAQAogUkFSIEhhbmRsZXIgKG1lbXJhcikgRHJpdmVyIFRPRE8gSXRlbXMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLU1haW50YWluZXI6IE9zc2FtYSBPdGhtYW4gPG9zc2FtYS5vdGhtYW5AaW50ZWwuY29tPgorTWFpbnRhaW5lcjogRXVnZW5lIEVwc2h0ZXluIDxldWdlbmUuZXBzaHRleW5AaW50ZWwuY29tPgogCiBtZW1yYXIuaAogLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZW1yYXIvbWVtcmFyLWFiaSBiL2RyaXZlcnMvc3RhZ2luZy9tZW1yYXIvbWVtcmFyLWFiaQppbmRleCA5OGE2YmIxLi5jMjNmYzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL21lbXJhci1hYmkKKysrIGIvZHJpdmVycy9zdGFnaW5nL21lbXJhci9tZW1yYXItYWJpCkBAIC0xLDcgKzEsNyBAQAogV2hhdDoJCS9kZXYvbWVtcmFyCiBEYXRlOgkJTWFyY2ggMjAxMAotS2VybmVsVmVyc2lvbjoJS2VybmVsIHZlcnNpb24gdGhpcyBmZWF0dXJlIGZpcnN0IHNob3dlZCB1cCBpbi4KLUNvbnRhY3Q6CU9zc2FtYSBPdGhtYW4gPG9zc2FtYS5vdGhtYW5AaW50ZWwuY29tPgorS2VybmVsVmVyc2lvbjoJMi42LjM0CitDb250YWN0OglFdWdlbmUgRXBzaHRleW4gPGV1Z2VuZS5lcHNodGV5bkBpbnRlbC5jb20+CiBEZXNjcmlwdGlvbjoJVGhlIEludGVsIE1vb3Jlc3Rvd24gUmVzdHJpY3RlZCBBY2Nlc3MgUmVnaW9uIChSQVIpCiAJCUhhbmRsZXIgZHJpdmVyIGV4cG9zZXMgYW4gaW9jdGwoKSBiYXNlZCBpbnRlcmZhY2UgdGhhdAogCQlhbGxvd3MgYSB1c2VyIHRvIHJlc2VydmUgYW5kIHJlbGVhc2UgYmxvY2tzIG9mIFJBUgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lbXJhci9tZW1yYXJfaGFuZGxlci5jIGIvZHJpdmVycy9zdGFnaW5nL21lbXJhci9tZW1yYXJfaGFuZGxlci5jCmluZGV4IGVmYTdmZDYuLmE5OGIzZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZW1yYXIvbWVtcmFyX2hhbmRsZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL21lbXJhcl9oYW5kbGVyLmMKQEAgLTQ3LDggKzQ3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlICIuLi9yYXJfcmVnaXN0ZXIvcmFyX3JlZ2lzdGVyLmgiCisjaW5jbHVkZSA8bGludXgvcmFyX3JlZ2lzdGVyLmg+CiAKICNpbmNsdWRlICJtZW1yYXIuaCIKICNpbmNsdWRlICJtZW1yYXJfYWxsb2NhdG9yLmgiCkBAIC0yNzksMTkgKzI3OCwxMCBAQAogCUJVR19PTighbWVtcmFyX2lzX3ZhbGlkX3Jhcl90eXBlKHJhcm51bSkpOwogCUJVR19PTihyYXItPmFsbG9jYXRlZCk7CiAKLQltdXRleF9pbml0KCZyYXItPmxvY2spOwotCi0JLyoKLQkgKiBJbml0aWFsaXplIHRoZSBwcm9jZXNzIHRhYmxlIGJlZm9yZSB3ZSByZWFjaCBhbnkKLQkgKiBjb2RlIHRoYXQgZXhpdCBvbiBmYWlsdXJlIHNpbmNlIHRoZSBmaW5hbGl6YXRpb24KLQkgKiBjb2RlIHJlcXVpcmVzIGFuIGluaXRpYWxpemVkIGxpc3QuCi0JICovCi0JSU5JVF9MSVNUX0hFQUQoJnJhci0+YnVmZmVycy5saXN0KTsKLQogCWlmIChyYXJfZ2V0X2FkZHJlc3MocmFybnVtLCAmbG93LCAmaGlnaCkgIT0gMCkKIAkJLyogTm8gUkFSIGlzIGF2YWlsYWJsZS4gKi8KIAkJcmV0dXJuIC1FTk9ERVY7Ci0JCisKIAlpZiAobG93ID09IDAgfHwgaGlnaCA9PSAwKSB7CiAJCXJhci0+YmFzZSAgICAgID0gMDsKIAkJcmFyLT5sZW5ndGggICAgPSAwOwpAQCAtMzExLDcgKzMwMSw4IEBACiAJLyogQ2xhaW0gUkFSIG1lbW9yeSBhcyBvdXIgb3duLiAqLwogCWlmIChyZXF1ZXN0X21lbV9yZWdpb24obG93LCByYXItPmxlbmd0aCwgZGV2bmFtZSkgPT0gTlVMTCkgewogCQlyYXItPmxlbmd0aCA9IDA7Ci0JCXByX2VycigiJXM6IFVuYWJsZSB0byBjbGFpbSBSQVJbJWRdIG1lbW9yeS5cbiIsIGRldm5hbWUsIHJhcm51bSk7CisJCXByX2VycigiJXM6IFVuYWJsZSB0byBjbGFpbSBSQVJbJWRdIG1lbW9yeS5cbiIsCisJCSAgICAgICBkZXZuYW1lLCByYXJudW0pOwogCQlwcl9lcnIoIiVzOiBSQVJbJWRdIGRpc2FibGVkLlxuIiwgZGV2bmFtZSwgcmFybnVtKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CkBAIC0zNDcsNyArMzM4LDcgQEAKIAl9CiAKIAlwcl9pbmZvKCIlczogQlJBUlslZF0gYnVzIGFkZHJlc3MgcmFuZ2UgPSBbMHglbHgsIDB4JWx4XVxuIiwKLQkJCWRldm5hbWUsIHJhcm51bSwgKHVuc2lnbmVkIGxvbmcpIGxvdywgKHVuc2lnbmVkIGxvbmcpIGhpZ2gpOworCQlkZXZuYW1lLCByYXJudW0sICh1bnNpZ25lZCBsb25nKSBsb3csICh1bnNpZ25lZCBsb25nKSBoaWdoKTsKIAogCXByX2luZm8oIiVzOiBCUkFSWyVkXSBzaXplID0gJXp1IEtpQlxuIiwKIAkJCWRldm5hbWUsIHJhcm51bSwgcmFyLT5hbGxvY2F0b3ItPmNhcGFjaXR5IC8gMTAyNCk7CkBAIC01MzEsNyArNTIyLDcgQEAKIHsKIAlzdHJ1Y3QgbWVtcmFyX2FsbG9jYXRvciAqYWxsb2NhdG9yOwogCi0gCWlmICghbWVtcmFyX2lzX3ZhbGlkX3Jhcl90eXBlKHItPnR5cGUpKQorCWlmICghbWVtcmFyX2lzX3ZhbGlkX3Jhcl90eXBlKHItPnR5cGUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghbWVtcmFyc1tyLT50eXBlXS5hbGxvY2F0ZWQpCkBAIC05NDAsOSArOTMxLDI4IEBACiBzdGF0aWMgaW50IF9faW5pdCBtZW1yYXJfaW5pdCh2b2lkKQogewogCWludCBlcnI7CisJaW50IGk7CiAKIAlwcmludGsoYmFubmVyKTsKIAorCS8qCisJICogU29tZSBkZWxheWVkIGluaXRpYWxpemF0aW9uIGlzIHBlcmZvcm1lZCBpbiB0aGlzIGRyaXZlci4KKwkgKiBNYWtlIHN1cmUgcmVzb3VyY2VzIHRoYXQgYXJlIHVzZWQgZHVyaW5nIGRyaXZlciBjbGVhbi11cAorCSAqIChlLmcuIGR1cmluZyBkcml2ZXIncyByZWxlYXNlKCkgZnVuY3Rpb24pIGFyZSBmdWxseQorCSAqIGluaXRpYWxpemVkIGJlZm9yZSBmaXJzdCB1c2UuICBUaGlzIGlzIHBhcnRpY3VsYXJseQorCSAqIGltcG9ydGFudCBmb3IgdGhlIGNhc2Ugd2hlbiB0aGUgZGVsYXllZCBpbml0aWFsaXphdGlvbgorCSAqIGlzbid0IGNvbXBsZXRlZCwgbGVhdmluZyBiZWhpbmQgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQKKwkgKiBkcml2ZXIuCisJICoKKwkgKiBTdWNoIGEgc2NlbmFyaW8gY2FuIG9jY3VyIHdoZW4gUkFSIGlzIG5vdCBhdmFpbGFibGUgb24gdGhlCisJICogcGxhdGZvcm0sIGFuZCB0aGUgZHJpdmVyIGlzIHJlbGVhc2UoKWQuCisJICovCisJZm9yIChpID0gMDsgaSAhPSBBUlJBWV9TSVpFKG1lbXJhcnMpOyArK2kpIHsKKwkJc3RydWN0IG1lbXJhcl9yYXJfaW5mbyAqIGNvbnN0IHJhciA9ICZtZW1yYXJzW2ldOworCQltdXRleF9pbml0KCZyYXItPmxvY2spOworCQlJTklUX0xJU1RfSEVBRCgmcmFyLT5idWZmZXJzLmxpc3QpOworCX0KKwogCWVyciA9IG1pc2NfcmVnaXN0ZXIoJm1lbXJhcl9taXNjZGV2KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21zbS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL21zbS9LY29uZmlnCmluZGV4IGM1NzAzOWYuLmM1MzA5ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tc20vS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvbXNtL0tjb25maWcKQEAgLTQ2LDIxICs0NiwxMSBAQAogCXNlbGVjdCBGQl9NU01fTENEQ19QQU5FTAogCWRlZmF1bHQgbgogCi1jb25maWcgRkJfTVNNX0xDRENfU1QxX1dYR0EKLQlib29sCi0Jc2VsZWN0IEZCX01TTV9MQ0RDX1BBTkVMCi0JZGVmYXVsdCBuCi0KIGNvbmZpZyBGQl9NU01fTENEQ19TVDE1X1dYR0EKICAgICAgICAgYm9vbAogICAgICAgICBzZWxlY3QgRkJfTVNNX0xDRENfUEFORUwKICAgICAgICAgZGVmYXVsdCBuCiAKLWNvbmZpZyBGQl9NU01fTENEQ19XWEdBCi0JYm9vbAotCXNlbGVjdCBGQl9NU01fTENEQ19QQU5FTAotCWRlZmF1bHQgbgotCiBjaG9pY2UKIAlwcm9tcHQgIkxDRCBQYW5lbCIKIAlkZWZhdWx0IEZCX01TTV9MQ0RDX1NUMTVfUEFORUwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tc20vTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvbXNtL01ha2VmaWxlCmluZGV4IDk4YTBjZTEuLmJiMzYwNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tc20vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL21zbS9NYWtlZmlsZQpAQCAtNjEsMTQgKzYxLDEyIEBACiBvYmoteSArPSBtZGRpX3Rvc2hpYmEubwogb2JqLXkgKz0gbWRkaV90b3NoaWJhX3ZnYS5vCiBvYmoteSArPSBtZGRpX3Rvc2hpYmFfd3ZnYV9wdC5vCi1vYmoteSArPSBtZGRpX3Rvc2hpYmFfd3ZnYS5vCiBvYmoteSArPSBtZGRpX3NoYXJwLm8KIGVsc2UKIG9iai0kKENPTkZJR19GQl9NU01fTURESV9QUklTTV9XVkdBKSArPSBtZGRpX3ByaXNtLm8KIG9iai0kKENPTkZJR19GQl9NU01fTURESV9UT1NISUJBX0NPTU1PTikgKz0gbWRkaV90b3NoaWJhLm8KIG9iai0kKENPTkZJR19GQl9NU01fTURESV9UT1NISUJBX0NPTU1PTl9WR0EpICs9IG1kZGlfdG9zaGliYV92Z2Eubwogb2JqLSQoQ09ORklHX0ZCX01TTV9NRERJX1RPU0hJQkFfV1ZHQV9QT1JUUkFJVCkgKz0gbWRkaV90b3NoaWJhX3d2Z2FfcHQubwotb2JqLSQoQ09ORklHX0ZCX01TTV9NRERJX1RPU0hJQkFfV1ZHQSkgKz0gbWRkaV90b3NoaWJhX3d2Z2Eubwogb2JqLSQoQ09ORklHX0ZCX01TTV9NRERJX1NIQVJQX1FWR0FfMTI4eDEyOCkgKz0gbWRkaV9zaGFycC5vCiBlbmRpZgogCkBAIC03NiwxMSArNzQsOCBAQAogb2JqLSQoQ09ORklHX0ZCX01TTV9MQ0RDX1BSSVNNX1dWR0EpICs9IGxjZGNfcHJpc20ubwogb2JqLSQoQ09ORklHX0ZCX01TTV9MQ0RDX0VYVEVSTkFMX1dYR0EpICs9IGxjZGNfZXh0ZXJuYWwubwogb2JqLSQoQ09ORklHX0ZCX01TTV9MQ0RDX0dPUkRPTl9WR0EpICs9IGxjZGNfZ29yZG9uLm8KLW9iai0kKENPTkZJR19GQl9NU01fTENEQ19XWEdBKSArPSBsY2RjX3d4Z2Eubwogb2JqLSQoQ09ORklHX0ZCX01TTV9MQ0RDX1RPU0hJQkFfV1ZHQV9QVCkgKz0gbGNkY190b3NoaWJhX3d2Z2FfcHQubwogb2JqLSQoQ09ORklHX0ZCX01TTV9MQ0RDX1NIQVJQX1dWR0FfUFQpICs9IGxjZGNfc2hhcnBfd3ZnYV9wdC5vCi1vYmotJChDT05GSUdfRkJfTVNNX0xDRENfR1JBUEVGUlVJVF9WR0EpICs9IGxjZGNfZ3JhcGVmcnVpdC5vCi1vYmotJChDT05GSUdfRkJfTVNNX0xDRENfU1QxX1dYR0EpICs9IGxjZGNfc3QxX3d4Z2Eubwogb2JqLSQoQ09ORklHX0ZCX01TTV9MQ0RDX1NUMTVfV1hHQSkgKz0gbGNkY19zdDE1Lm8KIG9iai0kKENPTkZJR19GQl9NU01fSERNSV9TSUlfRVhURVJOQUxfNzIwUCkgKz0gaGRtaV9zaWk5MDIyLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21zbS9sY2RjX2dyYXBlZnJ1aXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9tc20vbGNkY19ncmFwZWZydWl0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyODQ2NDkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21zbS9sY2RjX2dyYXBlZnJ1aXQuYworKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgMjAwOSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAibXNtX2ZiLmgiCi0KLSNpZmRlZiBDT05GSUdfRkJfTVNNX1RSWV9NRERJX0NBVENIX0xDRENfUFJJU00KLSNpbmNsdWRlICJtZGRpaG9zdGkuaCIKLSNlbmRpZgotCi1zdGF0aWMgaW50IF9faW5pdCBsY2RjX2dyYXBlZnJ1aXRfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0Jc3RydWN0IG1zbV9wYW5lbF9pbmZvIHBpbmZvOwotCi0jaWZkZWYgQ09ORklHX0ZCX01TTV9UUllfTURESV9DQVRDSF9MQ0RDX1BSSVNNCi0JaWYgKG1zbV9mYl9kZXRlY3RfY2xpZW50KCJsY2RjX2dyYXBlZnJ1aXRfdmdhIikpCi0JCXJldHVybiAwOwotI2VuZGlmCi0KLQlwaW5mby54cmVzID0gMTAyNDsKLQlwaW5mby55cmVzID0gNjAwOwotCXBpbmZvLnR5cGUgPSBMQ0RDX1BBTkVMOwotCXBpbmZvLnBkZXN0ID0gRElTUExBWV8xOwotCXBpbmZvLndhaXRfY3ljbGUgPSAwOwotCXBpbmZvLmJwcCA9IDE4OwotCXBpbmZvLmZiX251bSA9IDI7Ci0JcGluZm8uY2xrX3JhdGUgPSA0MDAwMDAwMDsKLQotCXBpbmZvLmxjZGMuaF9iYWNrX3BvcmNoID0gODg7Ci0JcGluZm8ubGNkYy5oX2Zyb250X3BvcmNoID0gNDA7Ci0JcGluZm8ubGNkYy5oX3B1bHNlX3dpZHRoID0gMTI4OwotCXBpbmZvLmxjZGMudl9iYWNrX3BvcmNoID0gMjM7Ci0JcGluZm8ubGNkYy52X2Zyb250X3BvcmNoID0gMTsKLQlwaW5mby5sY2RjLnZfcHVsc2Vfd2lkdGggPSA0OwotCXBpbmZvLmxjZGMuYm9yZGVyX2NsciA9IDA7CS8qIGJsayAqLwotCXBpbmZvLmxjZGMudW5kZXJmbG93X2NsciA9IDB4ZmY7CS8qIGJsdWUgKi8KLQlwaW5mby5sY2RjLmhzeW5jX3NrZXcgPSAwOwotCi0JcmV0ID0gbGNkY19kZXZpY2VfcmVnaXN0ZXIoJnBpbmZvKTsKLQlpZiAocmV0KQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgZGV2aWNlIVxuIiwgX19mdW5jX18pOwotCi0JcmV0dXJuIHJldDsKLX0KLQotbW9kdWxlX2luaXQobGNkY19ncmFwZWZydWl0X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21zbS9sY2RjX3N0MV93eGdhLmMgYi9kcml2ZXJzL3N0YWdpbmcvbXNtL2xjZGNfc3QxX3d4Z2EuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM3NjAwMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbXNtL2xjZGNfc3QxX3d4Z2EuYworKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgMjAwOSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAibXNtX2ZiLmgiCi0KLXN0YXRpYyBpbnQgX19pbml0IGxjZGNfc3QxX3d4Z2FfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0Jc3RydWN0IG1zbV9wYW5lbF9pbmZvIHBpbmZvOwotCi0JaWYgKG1zbV9mYl9kZXRlY3RfY2xpZW50KCJsY2RjX3N0MV93eGdhIikpCi0JCXJldHVybiAwOwotCi0JcGluZm8ueHJlcyA9IDEyODA7Ci0JcGluZm8ueXJlcyA9IDcyMDsKLQlwaW5mby50eXBlID0gTENEQ19QQU5FTDsKLQlwaW5mby5wZGVzdCA9IERJU1BMQVlfMTsKLQlwaW5mby53YWl0X2N5Y2xlID0gMDsKLQlwaW5mby5icHAgPSAxODsKLQlwaW5mby5mYl9udW0gPSAyOwotCXBpbmZvLmNsa19yYXRlID0gNzQyNTAwMDA7Ci0KLQlwaW5mby5sY2RjLmhfYmFja19wb3JjaCA9IDEyNDsKLQlwaW5mby5sY2RjLmhfZnJvbnRfcG9yY2ggPSAxMTA7Ci0JcGluZm8ubGNkYy5oX3B1bHNlX3dpZHRoID0gMTM2OwotCXBpbmZvLmxjZGMudl9iYWNrX3BvcmNoID0gMTk7Ci0JcGluZm8ubGNkYy52X2Zyb250X3BvcmNoID0gNTsKLQlwaW5mby5sY2RjLnZfcHVsc2Vfd2lkdGggPSA2OwotCXBpbmZvLmxjZGMuYm9yZGVyX2NsciA9IDA7CS8qIGJsayAqLwotCXBpbmZvLmxjZGMudW5kZXJmbG93X2NsciA9IDB4ZmY7CS8qIGJsdWUgKi8KLQlwaW5mby5sY2RjLmhzeW5jX3NrZXcgPSAwOwotCi0JcmV0ID0gbGNkY19kZXZpY2VfcmVnaXN0ZXIoJnBpbmZvKTsKLQlpZiAocmV0KQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgZGV2aWNlIVxuIiwgX19mdW5jX18pOwotCi0JcmV0dXJuIHJldDsKLX0KLQotbW9kdWxlX2luaXQobGNkY19zdDFfd3hnYV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tc20vbGNkY193eGdhLmMgYi9kcml2ZXJzL3N0YWdpbmcvbXNtL2xjZGNfd3hnYS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDJjOTJjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tc20vbGNkY193eGdhLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMDksIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgIm1zbV9mYi5oIgotCi1zdGF0aWMgaW50IF9faW5pdCBsY2RjX3d4Z2FfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0Jc3RydWN0IG1zbV9wYW5lbF9pbmZvIHBpbmZvOwotCi0jaWZkZWYgQ09ORklHX0ZCX01TTV9NRERJX0FVVE9fREVURUNUCi0JaWYgKG1zbV9mYl9kZXRlY3RfY2xpZW50KCJsY2RjX3d4Z2EiKSkKLQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQotCXBpbmZvLnhyZXMgPSAxMjgwOwotCXBpbmZvLnlyZXMgPSA3MjA7Ci0JcGluZm8udHlwZSA9IExDRENfUEFORUw7Ci0JcGluZm8ucGRlc3QgPSBESVNQTEFZXzE7Ci0JcGluZm8ud2FpdF9jeWNsZSA9IDA7Ci0JcGluZm8uYnBwID0gMjQ7Ci0JcGluZm8uZmJfbnVtID0gMjsKLQlwaW5mby5jbGtfcmF0ZSA9IDc0MjUwMDAwOwotCi0JcGluZm8ubGNkYy5oX2JhY2tfcG9yY2ggPSAxMjQ7Ci0JcGluZm8ubGNkYy5oX2Zyb250X3BvcmNoID0gMTEwOwotCXBpbmZvLmxjZGMuaF9wdWxzZV93aWR0aCA9IDEzNjsKLQlwaW5mby5sY2RjLnZfYmFja19wb3JjaCA9IDE5OwotCXBpbmZvLmxjZGMudl9mcm9udF9wb3JjaCA9IDU7Ci0JcGluZm8ubGNkYy52X3B1bHNlX3dpZHRoID0gNjsKLQlwaW5mby5sY2RjLmJvcmRlcl9jbHIgPSAwOwkvKiBibGsgKi8KLQlwaW5mby5sY2RjLnVuZGVyZmxvd19jbHIgPSAweGZmOwkvKiBibHVlICovCi0JcGluZm8ubGNkYy5oc3luY19za2V3ID0gMDsKLQotCXJldCA9IGxjZGNfZGV2aWNlX3JlZ2lzdGVyKCZwaW5mbyk7Ci0JaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlZ2lzdGVyIGRldmljZSFcbiIsIF9fZnVuY19fKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLW1vZHVsZV9pbml0KGxjZGNfd3hnYV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tc20vbWRkaV90b3NoaWJhX3d2Z2EuYyBiL2RyaXZlcnMvc3RhZ2luZy9tc20vbWRkaV90b3NoaWJhX3d2Z2EuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU3YjBmMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbXNtL21kZGlfdG9zaGliYV93dmdhLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMDksIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgIm1zbV9mYi5oIgotI2luY2x1ZGUgIm1kZGlob3N0LmgiCi0jaW5jbHVkZSAibWRkaV90b3NoaWJhLmgiCi0KLXN0YXRpYyBpbnQgX19pbml0IG1kZGlfdG9zaGliYV93dmdhX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBtc21fcGFuZWxfaW5mbyBwaW5mbzsKLQotI2lmZGVmIENPTkZJR19GQl9NU01fTURESV9BVVRPX0RFVEVDVAotCWlmIChtc21fZmJfZGV0ZWN0X2NsaWVudCgibWRkaV90b3NoaWJhX3d2Z2EiKSkKLQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQotCXBpbmZvLnhyZXMgPSA4MDA7Ci0JcGluZm8ueXJlcyA9IDQ4MDsKLQlwaW5mby5wZGVzdCA9IERJU1BMQVlfMjsKLQlwaW5mby50eXBlID0gTURESV9QQU5FTDsKLQlwaW5mby5tZGRpLnZkb3BrdCA9IE1ERElfREVGQVVMVF9QUklNX1BJWF9BVFRSOwotCXBpbmZvLndhaXRfY3ljbGUgPSAwOwotCXBpbmZvLmJwcCA9IDE4OwotCXBpbmZvLmxjZC52c3luY19lbmFibGUgPSBUUlVFOwotCXBpbmZvLmxjZC5yZWZ4MTAwID0gNjExODsKLQlwaW5mby5sY2Qudl9iYWNrX3BvcmNoID0gNjsKLQlwaW5mby5sY2Qudl9mcm9udF9wb3JjaCA9IDA7Ci0JcGluZm8ubGNkLnZfcHVsc2Vfd2lkdGggPSAwOwotCXBpbmZvLmxjZC5od192c3luY19tb2RlID0gRkFMU0U7Ci0JcGluZm8ubGNkLnZzeW5jX25vdGlmaWVyX3BlcmlvZCA9ICgxICogSFopOwotCXBpbmZvLmJsX21heCA9IDQ7Ci0JcGluZm8uYmxfbWluID0gMTsKLQlwaW5mby5jbGtfcmF0ZSA9IDE5MjAwMDAwMDsKLQlwaW5mby5jbGtfbWluID0gIDE5MDAwMDAwMDsKLQlwaW5mby5jbGtfbWF4ID0gIDIwMDAwMDAwMDsKLQlwaW5mby5mYl9udW0gPSAyOwotCi0JcmV0ID0gbWRkaV90b3NoaWJhX2RldmljZV9yZWdpc3RlcigmcGluZm8sIFRPU0hJQkFfVkdBX1BSSU0sCi0JCQkJCSAgIExDRF9UT1NISUJBXzJQNF9XVkdBKTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWdpc3RlciBkZXZpY2UhXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotbW9kdWxlX2luaXQobWRkaV90b3NoaWJhX3d2Z2FfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbXNtL21kZGlob3N0LmggYi9kcml2ZXJzL3N0YWdpbmcvbXNtL21kZGlob3N0LmgKaW5kZXggMjBiODE3OC4uYzQ2ZjI0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21zbS9tZGRpaG9zdC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tc20vbWRkaWhvc3QuaApAQCAtNDQsOCArNDQsNiBAQAogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSAibXNtX2ZiX3BhbmVsLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tc20vbWRwNF9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL3N0YWdpbmcvbXNtL21kcDRfZGVidWdmcy5jCmluZGV4IDg0NGQ0NjcuLjM2OTU0ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tc20vbWRwNF9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21zbS9tZHA0X2RlYnVnZnMuYwpAQCAtNjMsMTMgKzYzLDYgQEAKIAkJCSIlbGx4XG4iKTsKIAogCi1zdGF0aWMgaW50IG1kcDRfZGVidWdmc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCS8qIG5vbi1zZWVrYWJsZSAqLwotCWZpbGUtPmZfbW9kZSAmPSB+KEZNT0RFX0xTRUVLIHwgRk1PREVfUFJFQUQgfCBGTU9ERV9QV1JJVEUpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IG1kcDRfZGVidWdmc19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXJldHVybiAwOwpAQCAtMTQ0LDEwICsxMzcsMTEgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWRwNF9kZWJ1Z2ZzX2ZvcHMgPSB7Ci0JLm9wZW4gPSBtZHA0X2RlYnVnZnNfb3BlbiwKKwkub3BlbiA9IG5vbnNlZWthYmxlX29wZW4sCiAJLnJlbGVhc2UgPSBtZHA0X2RlYnVnZnNfcmVsZWFzZSwKIAkucmVhZCA9IG1kcDRfZGVidWdmc19yZWFkLAogCS53cml0ZSA9IG1kcDRfZGVidWdmc193cml0ZSwKKwkubGxzZWVrID0gbm9fbGxzZWVrLAogfTsKIAogaW50IG1kcDRfZGVidWdmc19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbXNtL21kcDRfb3ZlcmxheS5jIGIvZHJpdmVycy9zdGFnaW5nL21zbS9tZHA0X292ZXJsYXkuYwppbmRleCAzMDRiYjgyLi5kZTI4NGMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbXNtL21kcDRfb3ZlcmxheS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tc20vbWRwNF9vdmVybGF5LmMKQEAgLTg3NCw4ICs4NzQsOCBAQAogCQlpZiAocGlwZS0+cGlwZV9uZHggPT0gMCkgewogCQkJcGlwZS0+cGlwZV9uZHggPSBpICsgMTsJLyogc3RhcnQgZnJvbSAxICovCiAJCQlpbml0X2NvbXBsZXRpb24oJnBpcGUtPmNvbXApOwotCXByaW50ayhLRVJOX0lORk8gIm1kcDRfb3ZlcmxheV9waXBlX2FsbG9jOiBwaXBlPSV4IG5keD0lZFxuIiwKLQkJCQkJKGludClwaXBlLCBwaXBlLT5waXBlX25keCk7CisJcHJpbnRrKEtFUk5fSU5GTyAibWRwNF9vdmVybGF5X3BpcGVfYWxsb2M6IHBpcGU9JXAgbmR4PSVkXG4iLAorCQkJCQlwaXBlLCBwaXBlLT5waXBlX25keCk7CiAJCQlyZXR1cm4gcGlwZTsKIAkJfQogCQlwaXBlKys7CkBAIC04ODcsOCArODg3LDggQEAKIAogdm9pZCBtZHA0X292ZXJsYXlfcGlwZV9mcmVlKHN0cnVjdCBtZHA0X292ZXJsYXlfcGlwZSAqcGlwZSkKIHsKLQlwcmludGsoS0VSTl9JTkZPICJtZHA0X292ZXJsYXlfcGlwZV9mcmVlOiBwaXBlPSV4IG5keD0lZFxuIiwKLQkJCQkJKGludClwaXBlLCBwaXBlLT5waXBlX25keCk7CisJcHJpbnRrKEtFUk5fSU5GTyAibWRwNF9vdmVybGF5X3BpcGVfZnJlZTogcGlwZT0lcCBuZHg9JWRcbiIsCisJCQkJCXBpcGUsIHBpcGUtPnBpcGVfbmR4KTsKIAltZW1zZXQocGlwZSwgMCwgc2l6ZW9mKCpwaXBlKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tc20vbXNtX2ZiX2RlZi5oIGIvZHJpdmVycy9zdGFnaW5nL21zbS9tc21fZmJfZGVmLmgKaW5kZXggNmRlNDQwOS4uYzVmOWU5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21zbS9tc21fZmJfZGVmLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL21zbS9tc21fZmJfZGVmLmgKQEAgLTUwLDE1ICs1MCwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSAibGludXgvcHJvY19mcy5oIgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbXNtL3N0YWdpbmctZGV2aWNlcy5jIGIvZHJpdmVycy9zdGFnaW5nL21zbS9zdGFnaW5nLWRldmljZXMuYwppbmRleCAwZjhlYzNlLi44NjFmMzMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbXNtL3N0YWdpbmctZGV2aWNlcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tc20vc3RhZ2luZy1kZXZpY2VzLmMKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlICJtc21fbWRwLmgiCiAjaW5jbHVkZSAibWVtb3J5X2xsLmgiCiAvLyNpbmNsdWRlICJhbmRyb2lkX3BtZW0uaCIKLSNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAKICNpZmRlZiBDT05GSUdfTVNNX1NPQ19SRVZfQQogI2RlZmluZSBNU01fU01JX0JBU0UgMHhFMDAwMDAwMApAQCAtMTE1LDE3ICsxMTQsNyBAQAogCX0gZWxzZSBpZiAoKG1hY2hpbmVfaXNfcXNkOHg1MF9zdXJmKCkgfHwgbWFjaGluZV9pc19xc2Q4eDUwYV9zdXJmKCkpCiAJCQkmJiAhc3RyY21wKG5hbWUsICJsY2RjX2V4dGVybmFsIikpCiAJCXJldCA9IDA7Ci0JZWxzZSBpZiAoMCAvKm1hY2hpbmVfaXNfcXNkOHg1MF9ncmFwZWZydWl0KCkgKi8pIHsKLQkJaWYgKCFzdHJjbXAobmFtZSwgImxjZGNfZ3JhcGVmcnVpdF92Z2EiKSkKLQkJCXJldCA9IDA7Ci0JCWVsc2UKLQkJCXJldCA9IC1FTk9ERVY7Ci0JfSBlbHNlIGlmIChtYWNoaW5lX2lzX3FzZDh4NTBfc3QxKCkpIHsKLQkJaWYgKCFzdHJjbXAobmFtZSwgImxjZGNfc3QxX3d4Z2EiKSkKLQkJCXJldCA9IDA7Ci0JCWVsc2UKLQkJCXJldCA9IC1FTk9ERVY7Ci0JfSBlbHNlIGlmIChtYWNoaW5lX2lzX3FzZDh4NTBhX3N0MV81KCkpIHsKKwllbHNlIGlmIChtYWNoaW5lX2lzX3FzZDh4NTBhX3N0MV81KCkpIHsKIAkJaWYgKCFzdHJjbXAobmFtZSwgImxjZGNfc3QxNSIpIHx8CiAJCSAgICAhc3RyY21wKG5hbWUsICJoZG1pX3NpaTkwMjIiKSkKIAkJCXJldCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtY21kLXF1ZXVlLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtY21kLXF1ZXVlLmMKaW5kZXggOTc2MjI3Yi4uZTk4MDlkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LWNtZC1xdWV1ZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vY3ZteC1jbWQtcXVldWUuYwpAQCAtMTQwLDIxICsxNDAsMjEgQEAKIAlpZiAocXN0YXRlLT5iYXNlX3B0cl9kaXYxMjgpIHsKIAkJaWYgKG1heF9kZXB0aCAhPSAoaW50KXFzdGF0ZS0+bWF4X2RlcHRoKSB7CiAJCQljdm14X2RwcmludGYoIkVSUk9SOiBjdm14X2NtZF9xdWV1ZV9pbml0aWFsaXplOiAiCi0JCQkJIlF1ZXVlIGFscmVhZHkgaW5pdGFsaXplZCB3aXRoIGRpZmZlcmVudCAiCisJCQkJIlF1ZXVlIGFscmVhZHkgaW5pdGlhbGl6ZWQgd2l0aCBkaWZmZXJlbnQgIgogCQkJCSJtYXhfZGVwdGggKCVkKS5cbiIsCiAJCQkgICAgIChpbnQpcXN0YXRlLT5tYXhfZGVwdGgpOwogCQkJcmV0dXJuIENWTVhfQ01EX1FVRVVFX0lOVkFMSURfUEFSQU07CiAJCX0KIAkJaWYgKGZwYV9wb29sICE9IHFzdGF0ZS0+ZnBhX3Bvb2wpIHsKIAkJCWN2bXhfZHByaW50ZigiRVJST1I6IGN2bXhfY21kX3F1ZXVlX2luaXRpYWxpemU6ICIKLQkJCQkiUXVldWUgYWxyZWFkeSBpbml0YWxpemVkIHdpdGggZGlmZmVyZW50ICIKKwkJCQkiUXVldWUgYWxyZWFkeSBpbml0aWFsaXplZCB3aXRoIGRpZmZlcmVudCAiCiAJCQkJIkZQQSBwb29sICgldSkuXG4iLAogCQkJICAgICBxc3RhdGUtPmZwYV9wb29sKTsKIAkJCXJldHVybiBDVk1YX0NNRF9RVUVVRV9JTlZBTElEX1BBUkFNOwogCQl9CiAJCWlmICgocG9vbF9zaXplID4+IDMpIC0gMSAhPSBxc3RhdGUtPnBvb2xfc2l6ZV9tMSkgewogCQkJY3ZteF9kcHJpbnRmKCJFUlJPUjogY3ZteF9jbWRfcXVldWVfaW5pdGlhbGl6ZTogIgotCQkJCSJRdWV1ZSBhbHJlYWR5IGluaXRhbGl6ZWQgd2l0aCBkaWZmZXJlbnQgIgorCQkJCSJRdWV1ZSBhbHJlYWR5IGluaXRpYWxpemVkIHdpdGggZGlmZmVyZW50ICIKIAkJCQkiRlBBIHBvb2wgc2l6ZSAoJXUpLlxuIiwKIAkJCSAgICAgKHFzdGF0ZS0+cG9vbF9zaXplX20xICsgMSkgPDwgMyk7CiAJCQlyZXR1cm4gQ1ZNWF9DTURfUVVFVUVfSU5WQUxJRF9QQVJBTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vY3ZteC1mYXUuaCBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vY3ZteC1mYXUuaAppbmRleCAyOWJkY2U2Li5hNjkzOWZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtZmF1LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LWZhdS5oCkBAIC0yOTksNyArMjk5LDcgQEAKIC8qKgogICogQnVpbGRzIEkvTyBkYXRhIGZvciBhc3luYyBvcGVyYXRpb25zCiAgKgotICogQHNjcmFkZHI6IFNjcmF0Y2ggcGFkIGJ5dGUgYWRkcmVzIHRvIHdyaXRlIHRvLiAgTXVzdCBiZSA4IGJ5dGUgYWxpZ25lZAorICogQHNjcmFkZHI6IFNjcmF0Y2ggcGFkIGJ5dGUgYWRkcmVzcyB0byB3cml0ZSB0by4gIE11c3QgYmUgOCBieXRlIGFsaWduZWQKICAqIEB2YWx1ZTogICBTaWduZWQgdmFsdWUgdG8gYWRkLgogICogICAgICAgICAgICAgICAgTm90ZTogV2hlbiBwZXJmb3JtaW5nIDMyIGFuZCA2NCBiaXQgYWNjZXNzLCBvbmx5IHRoZSBsb3cKICAqICAgICAgICAgICAgICAgIDIyIGJpdHMgYXJlIGF2YWlsYWJsZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5jIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1tZGlvLmMKaW5kZXggN2UwYmU4ZC4uMTBhODJlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1tZGlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1tZGlvLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCWlmICghcHJpdi0+cGh5ZGV2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBwaHlfbWlpX2lvY3RsKHByaXYtPnBoeWRldiwgaWZfbWlpKHJxKSwgY21kKTsKKwlyZXR1cm4gcGh5X21paV9pb2N0bChwcml2LT5waHlkZXYsIHJxLCBjbWQpOwogfQogCiBzdGF0aWMgdm9pZCBjdm1fb2N0X2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXNwaS5jIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1zcGkuYwppbmRleCBiNThiODk3Li45NzA4MjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXNwaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtc3BpLmMKQEAgLTI5NCw2ICsyOTQsOCBAQAogCWlmIChudW1iZXJfc3BpX3BvcnRzID09IDApIHsKIAkJciA9IHJlcXVlc3RfaXJxKE9DVEVPTl9JUlFfUk1MLCBjdm1fb2N0X3NwaV9ybWxfaW50ZXJydXB0LAogCQkJCUlSUUZfU0hBUkVELCAiU1BJIiwgJm51bWJlcl9zcGlfcG9ydHMpOworCQlpZiAocikKKwkJCXJldHVybiByOwogCX0KIAludW1iZXJfc3BpX3BvcnRzKys7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jdHhyeC5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2N0eHJ4LmMKaW5kZXggYTEyNzE5NjIuLjEzNTE2N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jdHhyeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jdHhyeC5jCkBAIC0zMTE3LDcgKzMxMTcsNyBAQAogCiAgICAgaW5kZXggPSAoc3JjWzJdK3VwKSAmIChaTV9GSUxURVJfVEFCTEVfUk9XLTEpOwogCi0gICAgLyogVEJEIDogZmlsdGVyIGZyYW1lIHdpdGggc291cmNlIGFkZHJlc3MgPT0gb3duIE1BQyBhZHJlc3MgKi8KKyAgICAvKiBUQkQgOiBmaWx0ZXIgZnJhbWUgd2l0aCBzb3VyY2UgYWRkcmVzcyA9PSBvd24gTUFDIGFkZHJlc3MgKi8KICAgICBpZiAoKHdkLT5tYWNBZGRyWzBdID09IHNyY1swXSkgJiYgKHdkLT5tYWNBZGRyWzFdID09IHNyY1sxXSkKICAgICAgICAgICAgICYmICh3ZC0+bWFjQWRkclsyXSA9PSBzcmNbMl0pKQogICAgIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9UT0RPCmluZGV4IDRjYWYwMjYuLjZmZWE5NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL1RPRE8KKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvVE9ETwpAQCAtMiwxNSArMiw3IEBACiByZWFsbHkgaGF2ZSBwZW9wbGUgaGVscCB0aGVtIG91dCBvbiB0aGUgImNsZWFuIiBhcjkxNzAgZHJpdmVyIHRoYXQgY2FuCiBiZSBmb3VuZCBhdCB0aGUgbGludXgtd2lyZWxlc3MgZGV2ZWxvcGVyIHNpdGUuCiAKLUJ1dCwgaWYgeW91IHdpc2ggdG8gY2xlYW4gdXAgdGhpcyBkcml2ZXIgaW5zdGVhZCwgaGVyZSdzIGEgc2hvcnQgbGlzdCBvZgotdGhpbmdzIHRoYXQgbmVlZCB0byBiZSBkb25lIHRvIGdldCBpdCBpbnRvIGEgbW9yZSBtZXJnYWJsZSBzaGFwZToKLQotVE9ETzoKLQktIGNoZWNrcGF0Y2gucGwgY2xlYW51cHMKLQktIHNwYXJzZSBjbGVhbnVwcwotCS0gcG9ydCB0byBpbi1rZXJuZWwgODAyMTEgc3RhY2sKLQktIHJldmlldyBieSB0aGUgd2lyZWxlc3MgZGV2ZWxvcGVyIGNvbW11bml0eQotCi1QbGVhc2Ugc2VuZCBhbnkgcGF0Y2hlcyB0byBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiBhbmQKLUx1aXMgUm9kcmlndWV6IDxMdWlzLlJvZHJpZ3VlekBBdGhlcm9zLmNvbT4gYW5kIHRoZQotb3R1cy1kZXZlbEBsaXN0cy5tYWR3aWZpLXByb2plY3Qub3JnIG1haWxpbmcgbGlzdC4KK1RoaXMgZHJpdmVyIGlzIHVubWFpbnRhaW5lZCBhbmQgaXRzIG9ubHkgcHVycG9zZSBpcyBhcyBhCitzb3VyY2Ugb2YgZG9jdW1lbnRhdGlvbiBmb3IgZGV2ZWxvcGVycyB3b3JraW5nIG9uIGFyOTE3MCBhbmQgY2FybDkxNzAuCitPbmNlIGNhcmw5MTcwIGdldHMgMTFuIHN1cHBvcnQgYW5kIG1lcmdlZCB1cHN0cmVhbSB0aGVuIHRoaXMgZHJpdmVyCitjYW4gYmUgcmVtb3ZlZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2FwZGJnLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9hcGRiZy5jCmluZGV4IGI1OTAyOGUuLjA5NDE1YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2FwZGJnLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvYXBkYmcuYwpAQCAtOTAsMjggKzkwLDYgQEAKIAogI2VuZGlmCiAKLXN0YXRpYyBjaGFyIGhleChjaGFyIHYpCi17Ci0JaWYgKGlzZGlnaXQodikpCi0JCXJldHVybiB2IC0gJzAnOwotCWVsc2UgaWYgKGlzeGRpZ2l0KHYpKQotCQlyZXR1cm4gdG9sb3dlcih2KSAtICdhJyArIDEwOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGFzY3RvaGV4KGNoYXIgKnN0cikKLXsKLQl1bnNpZ25lZCBjaGFyIHZhbHVlOwotCi0JdmFsdWUgPSBoZXgoKnN0cikgJiAweDBmOwotCXZhbHVlID0gdmFsdWUgPDwgNDsKLQlzdHIrKzsKLQl2YWx1ZSB8PSBoZXgoKnN0cikgJiAweDBmOwotCi0JcmV0dXJuIHZhbHVlOwotfQotCiBjaGFyICpwcmduYW1lOwogCiBpbnQgc2V0X2lvY3RsKGludCBzb2NrLCBzdHJ1Y3QgaWZyZXEgKnJlcSkKQEAgLTE4MCw3ICsxNTgsNyBAQAogCWlmIChhcmdjIDwgMykgewogCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiB1c2FnZSBpcyBcIiVzIDxpZm5hbWU+IDxvcGVyYXRpb24+IgogCQkJCSJbPGFkZHJlc3M+XSBbPHZhbHVlPl1cIlxuIiwgcHJnbmFtZSwgcHJnbmFtZSk7Ci0JCWZwcmludGYoc3RkZXJyLCAidmFsaWQgb3BlcmF0aW9uIDogcmVhZCwgd3JpdGUsIG1lbSwgcmVnLCBcbiIpOworCQlmcHJpbnRmKHN0ZGVyciwgInZhbGlkIG9wZXJhdGlvbiA6IHJlYWQsIHdyaXRlLCBtZW0sIHJlZyxcbiIpOwogCQlmcHJpbnRmKHN0ZGVyciwgIgkJOiB0eGQsIHJ4ZCwgcm1lbSwgd21lbVxuIik7CiAJCWZwcmludGYoc3RkZXJyLCAiCQk6IGRtYXQsIHJlZ3QsIHRlc3RcbiIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBhbmkuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocGFuaS5jCmluZGV4IGY1M2U0ODMuLjliOTQyMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocGFuaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocGFuaS5jCkBAIC03Miw3ICs3Miw2IEBACiAKIHZvaWQgemZIcEFuaUF0dGFjaCh6ZGV2X3QgKmRldikKIHsKLSNkZWZpbmUgTihhKSAgICAgKHNpemVvZihhKSAvIHNpemVvZihhWzBdKSkKICAgICB1MzJfdCBpOwogICAgIHN0cnVjdCB6c0hwUHJpdiAqSHBQcml2OwogCkBAIC0xMjUsNyArMTI0LDYgQEAKICAgICBIcFByaXYtPnN0YXRzLmFzdF9ub2Rlc3RhdHMubnNfYXZnYnJzc2kgPSBaTV9SU1NJX0RVTU1ZX01BUktFUjsKICAgICBIcFByaXYtPnN0YXRzLmFzdF9ub2Rlc3RhdHMubnNfYXZncnNzaSA9IFpNX1JTU0lfRFVNTVlfTUFSS0VSOwogICAgIEhwUHJpdi0+c3RhdHMuYXN0X25vZGVzdGF0cy5uc19hdmd0eHJzc2kgPSBaTV9SU1NJX0RVTU1ZX01BUktFUjsKLSN1bmRlZiBOCiB9CiAKIC8qCkBAIC0xMzMsNyArMTMxLDYgQEAKICAqLwogdThfdCB6ZkhwQW5pQ29udHJvbCh6ZGV2X3QgKmRldiwgWk1fSEFMX0FOSV9DTUQgY21kLCBpbnQgcGFyYW0pCiB7Ci0jZGVmaW5lIE4oYSkgKHNpemVvZihhKS9zaXplb2YoYVswXSkpCiAgICAgdHlwZWRlZiBzMzJfdCBUQUJMRVtdOwogICAgIHN0cnVjdCB6c0hwUHJpdiAqSHBQcml2OwogICAgIHN0cnVjdCB6c0FuaVN0YXRlICphbmlTdGF0ZTsKQEAgLTE0OCw5ICsxNDUsOSBAQAogICAgIHsKICAgICAgICAgdTMyX3QgbGV2ZWwgPSBwYXJhbTsKIAotICAgICAgICBpZiAobGV2ZWwgPj0gTihIcFByaXYtPnRvdGFsU2l6ZURlc2lyZWQpKSB7CisgICAgICAgIGlmIChsZXZlbCA+PSBBUlJBWV9TSVpFKEhwUHJpdi0+dG90YWxTaXplRGVzaXJlZCkpIHsKICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJsZXZlbCBvdXQgb2YgcmFuZ2UsIGRlc2lyZWQgbGV2ZWwgOiAiLCBsZXZlbCk7Ci0gICAgICAgICAgem1fZGVidWdfbXNnMSgibWF4IGxldmVsIDogIiwgTihIcFByaXYtPnRvdGFsU2l6ZURlc2lyZWQpKTsKKyAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJtYXggbGV2ZWwgOiAiLCBBUlJBWV9TSVpFKEhwUHJpdi0+dG90YWxTaXplRGVzaXJlZCkpOwogICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICAgfQogCkBAIC0yNjAsMTAgKzI1NywxMCBAQAogICAgICAgICBjb25zdCBUQUJMRSBmaXJzdGVwID0geyAwLCA0LCA4IH07CiAgICAgICAgIHUzMl90IGxldmVsID0gcGFyYW07CiAKLSAgICAgICAgaWYgKGxldmVsID49IE4oZmlyc3RlcCkpCisgICAgICAgIGlmIChsZXZlbCA+PSBBUlJBWV9TSVpFKGZpcnN0ZXApKQogICAgICAgICB7CiAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJsZXZlbCBvdXQgb2YgcmFuZ2UsIGRlc2lyZWQgbGV2ZWwgOiAiLCBsZXZlbCk7Ci0gICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJtYXggbGV2ZWwgOiAiLCBOKGZpcnN0ZXApKTsKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzEoIm1heCBsZXZlbCA6ICIsIEFSUkFZX1NJWkUoZmlyc3RlcCkpOwogICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgICB9CiAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgQVJfUEhZX0ZJTkRfU0lHLApAQCAtMjgzLDEwICsyODAsMTAgQEAKICAgICAgICAgY29uc3QgVEFCTEUgY3ljcHdyVGhyMSA9IHsgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCwgMTYgfTsKICAgICAgICAgdTMyX3QgbGV2ZWwgPSBwYXJhbTsKIAotICAgICAgICBpZiAobGV2ZWwgPj0gTihjeWNwd3JUaHIxKSkKKyAgICAgICAgaWYgKGxldmVsID49IEFSUkFZX1NJWkUoY3ljcHdyVGhyMSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHptX2RlYnVnX21zZzEoImxldmVsIG91dCBvZiByYW5nZSwgZGVzaXJlZCBsZXZlbCA6ICIsIGxldmVsKTsKLSAgICAgICAgICAgIHptX2RlYnVnX21zZzEoIm1heCBsZXZlbCA6ICIsIE4oY3ljcHdyVGhyMSkpOworICAgICAgICAgICAgem1fZGVidWdfbXNnMSgibWF4IGxldmVsIDogIiwgQVJSQVlfU0laRShjeWNwd3JUaHIxKSk7CiAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgIH0KICAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBBUl9QSFlfVElNSU5HNSwKQEAgLTMzNSw3ICszMzIsNiBAQAogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogICAgIHJldHVybiBUUlVFOwotI3VuZGVmICBOCiB9CiAKIHZvaWQgemZIcEFuaVJlc3RhcnQoemRldl90KiBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBtYWluLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBtYWluLmMKaW5kZXggNWY0MTJlMC4uNmQyZDM1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwbWFpbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocG1haW4uYwpAQCAtNDMwLDcgKzQzMCw3IEBACiAgICAgICogUmVnaXN0ZXIgc2V0dGluZyBieSBtb2RlCiAgICAgICovCiAKLSAgICBlbnRyaWVzID0gc2l6ZW9mKGFyNTQxNk1vZGVzKSAvIHNpemVvZigqYXI1NDE2TW9kZXMpOworICAgIGVudHJpZXMgPSBBUlJBWV9TSVpFKGFyNTQxNk1vZGVzKTsKICAgICB6bV9tc2cxX3NjYW4oWk1fTFZfMiwgIk1vZGVzIHJlZ2lzdGVyIHNldHRpbmcgZW50cmllcz0iLCBlbnRyaWVzKTsKICAgICBmb3IgKGk9MDsgaTxlbnRyaWVzOyBpKyspCiAgICAgewpAQCAtNDk2LDcgKzQ5Niw3IEBACiAgICAgLyoKICAgICAgKiBDb21tb24gUmVnaXN0ZXIgc2V0dGluZwogICAgICAqLwotICAgIGVudHJpZXMgPSBzaXplb2YoYXI1NDE2Q29tbW9uKSAvIHNpemVvZigqYXI1NDE2Q29tbW9uKTsKKyAgICBlbnRyaWVzID0gQVJSQVlfU0laRShhcjU0MTZDb21tb24pOwogICAgIGZvciAoaT0wOyBpPGVudHJpZXM7IGkrKykKICAgICB7CiAgICAgICAgIHJlZ193cml0ZShhcjU0MTZDb21tb25baV1bMF0sIGFyNTQxNkNvbW1vbltpXVsxXSk7CkBAIC01MDYsNyArNTA2LDcgQEAKICAgICAvKgogICAgICAqIFJGIEdhaW4gc2V0dGluZyBieSBmcmVxSW5kZXgKICAgICAgKi8KLSAgICBlbnRyaWVzID0gc2l6ZW9mKGFyNTQxNkJCX1JmR2FpbikgLyBzaXplb2YoKmFyNTQxNkJCX1JmR2Fpbik7CisgICAgZW50cmllcyA9IEFSUkFZX1NJWkUoYXI1NDE2QkJfUmZHYWluKTsKICAgICBmb3IgKGk9MDsgaTxlbnRyaWVzOyBpKyspCiAgICAgewogICAgICAgICByZWdfd3JpdGUoYXI1NDE2QkJfUmZHYWluW2ldWzBdLCBhcjU0MTZCQl9SZkdhaW5baV1bZnJlcUluZGV4XSk7CkBAIC05NjMsNyArOTYzLDYgQEAKIC8qIEJhbmsgMCAxIDIgMyA1IDYgNyAqLwogdm9pZCB6ZlNldFJmUmVncyh6ZGV2X3QqIGRldiwgdTMyX3QgZnJlcXVlbmN5KQogewotICAgIHUxNl90IGVudHJpZXM7CiAgICAgdTE2X3QgZnJlcUluZGV4ID0gMDsKICAgICB1MTZfdCBpOwogCkBAIC05ODQsMzMgKzk4MywyOCBAQAogICAgIH0KIAogI2lmIDEKLSAgICBlbnRyaWVzID0gc2l6ZW9mKG90dXNCYW5rKSAvIHNpemVvZigqb3R1c0JhbmspOwotICAgIGZvciAoaT0wOyBpPGVudHJpZXM7IGkrKykKKyAgICBmb3IgKGk9MDsgaTxBUlJBWV9TSVpFKG90dXNCYW5rKTsgaSsrKQogICAgIHsKICAgICAgICAgcmVnX3dyaXRlKG90dXNCYW5rW2ldWzBdLCBvdHVzQmFua1tpXVtmcmVxSW5kZXhdKTsKICAgICB9CiAjZWxzZQogICAgIC8qIEJhbmswICovCi0gICAgZW50cmllcyA9IHNpemVvZihhcjU0MTZCYW5rMCkgLyBzaXplb2YoKmFyNTQxNkJhbmswKTsKLSAgICBmb3IgKGk9MDsgaTxlbnRyaWVzOyBpKyspCisgICAgZm9yIChpPTA7IGk8QVJSQVlfU0laRShhcjU0MTZCYW5rMCk7IGkrKykKICAgICB7CiAgICAgICAgIHJlZ193cml0ZShhcjU0MTZCYW5rMFtpXVswXSwgYXI1NDE2QmFuazBbaV1bMV0pOwogICAgIH0KICAgICAvKiBCYW5rMSAqLwotICAgIGVudHJpZXMgPSBzaXplb2YoYXI1NDE2QmFuazEpIC8gc2l6ZW9mKCphcjU0MTZCYW5rMSk7Ci0gICAgZm9yIChpPTA7IGk8ZW50cmllczsgaSsrKQorICAgIGZvciAoaT0wOyBpPEFSUkFZX1NJWkUoYXI1NDE2QmFuazEpOyBpKyspCiAgICAgewogICAgICAgICByZWdfd3JpdGUoYXI1NDE2QmFuazFbaV1bMF0sIGFyNTQxNkJhbmsxW2ldWzFdKTsKICAgICB9CiAgICAgLyogQmFuazIgKi8KLSAgICBlbnRyaWVzID0gc2l6ZW9mKGFyNTQxNkJhbmsyKSAvIHNpemVvZigqYXI1NDE2QmFuazIpOwotICAgIGZvciAoaT0wOyBpPGVudHJpZXM7IGkrKykKKyAgICBmb3IgKGk9MDsgaTxBUlJBWV9TSVpFKGFyNTQxNkJhbmsyKTsgaSsrKQogICAgIHsKICAgICAgICAgcmVnX3dyaXRlKGFyNTQxNkJhbmsyW2ldWzBdLCBhcjU0MTZCYW5rMltpXVsxXSk7CiAgICAgfQogICAgIC8qIEJhbmszICovCi0gICAgZW50cmllcyA9IHNpemVvZihhcjU0MTZCYW5rMykgLyBzaXplb2YoKmFyNTQxNkJhbmszKTsKLSAgICBmb3IgKGk9MDsgaTxlbnRyaWVzOyBpKyspCisgICAgZm9yIChpPTA7IGk8QVJSQVlfU0laRShhcjU0MTZCYW5rMyk7IGkrKykKICAgICB7CiAgICAgICAgIHJlZ193cml0ZShhcjU0MTZCYW5rM1tpXVswXSwgYXI1NDE2QmFuazNbaV1bZnJlcUluZGV4XSk7CiAgICAgfQpAQCAtMTAxOCwxNCArMTAxMiwxMiBAQAogICAgIHJlZ193cml0ZSAoMHg5OGIwLCAgMHgwMDAwMDAxMyk7CiAgICAgcmVnX3dyaXRlICgweDk4ZTQsICAweDAwMDAwMDAyKTsKICAgICAvKiBCYW5rNiAqLwotICAgIGVudHJpZXMgPSBzaXplb2YoYXI1NDE2QmFuazYpIC8gc2l6ZW9mKCphcjU0MTZCYW5rNik7Ci0gICAgZm9yIChpPTA7IGk8ZW50cmllczsgaSsrKQorICAgIGZvciAoaT0wOyBpPEFSUkFZX1NJWkUoYXI1NDE2QmFuazYpOyBpKyspCiAgICAgewogICAgICAgICByZWdfd3JpdGUoYXI1NDE2QmFuazZbaV1bMF0sIGFyNTQxNkJhbms2W2ldW2ZyZXFJbmRleF0pOwogICAgIH0KICAgICAvKiBCYW5rNyAqLwotICAgIGVudHJpZXMgPSBzaXplb2YoYXI1NDE2QmFuazcpIC8gc2l6ZW9mKCphcjU0MTZCYW5rNyk7Ci0gICAgZm9yIChpPTA7IGk8ZW50cmllczsgaSsrKQorICAgIGZvciAoaT0wOyBpPEFSUkFZX1NJWkUoYXI1NDE2QmFuazcpOyBpKyspCiAgICAgewogICAgICAgICByZWdfd3JpdGUoYXI1NDE2QmFuazdbaV1bMF0sIGFyNTQxNkJhbms3W2ldWzFdKTsKICAgICB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHByZWcuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocHJlZy5jCmluZGV4IGRhM2I3NzQuLjliMDQ2NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocHJlZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocHJlZy5jCkBAIC0yOSw5ICsyOSw2IEBACiAjaW5jbHVkZSAiaHByZWcuaCIKICNpbmNsdWRlICJocHVzYi5oIgogCi0vKiB1c2VkIHRocm91Z2hvdXQgdGhpcyBmaWxlLi4uICovCi0jZGVmaW5lCU4oYSkJKHNpemVvZihhKSAvIHNpemVvZihhWzBdKSkKLQogI2RlZmluZSBIQUxfTU9ERV8xMUFfVFVSQk8JSEFMX01PREVfMTA4QQogI2RlZmluZSBIQUxfTU9ERV8xMUdfVFVSQk8JSEFMX01PREVfMTA4RwogCkBAIC0xNTU3LDcgKzE1NTQsNyBAQAogCXU2NF90IGZsYWdzID0gTk9fUkVROwogCVJFR19ETU5fUEFJUl9NQVBQSU5HICpyZWdQYWlyID0gTlVMTDsKIAotCWZvciAoaSA9IDAsIGZvdW5kID0gMDsgKGkgPCBOKHJlZ0RvbWFpblBhaXJzKSkgJiYgKCFmb3VuZCk7IGkrKykgeworCWZvciAoaSA9IDAsIGZvdW5kID0gMDsgKGkgPCBBUlJBWV9TSVpFKHJlZ0RvbWFpblBhaXJzKSkgJiYgKCFmb3VuZCk7IGkrKykgewogCQlpZiAocmVnRG9tYWluUGFpcnNbaV0ucmVnRG1uRW51bSA9PSByZWdpb25Db2RlKSB7CiAJCQlyZWdQYWlyID0gJnJlZ0RvbWFpblBhaXJzW2ldOwogCQkJZm91bmQgPSAxOwpAQCAtMTU4MSw3ICsxNTc4LDcgQEAKIAkgKiB1bml0YXJ5IHJlZyBkb21haW4gb2YgdGhlIHBhaXIKIAkgKi8KIAotCWZvciAoaSA9IDAgOyBpIDwgTihyZWdEb21haW5zKSA7IGkrKykgeworCWZvciAoaSA9IDAgOyBpIDwgQVJSQVlfU0laRShyZWdEb21haW5zKSA7IGkrKykgewogCQlpZiAocmVnRG9tYWluc1tpXS5yZWdEbW5FbnVtID09IHJlZ0RtbikgewogCQkJaWYgKHJkICE9IE5VTEwpIHsKIAkJCQkJemZNZW1vcnlDb3B5KCh1OF90ICopcmQsICh1OF90ICopJnJlZ0RvbWFpbnNbaV0sCkBAIC0xNjUzLDcgKzE2NTAsNyBAQAogCiAJem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKIAotCWZvciAoY20gPSBtb2RlczsgY20gPCAmbW9kZXNbTihtb2RlcyldOyBjbSsrKSB7CisJZm9yIChjbSA9IG1vZGVzOyBjbSA8ICZtb2Rlc1tBUlJBWV9TSVpFKG1vZGVzKV07IGNtKyspIHsKIAkJdTE2X3QgYzsKIAkJdTY0X3QgKmNoYW5uZWxCTSA9IE5VTEw7CiAJCVJFR19ET01BSU4gKnJkID0gTlVMTDsKQEAgLTE4NDYsNyArMTg0Myw3IEBACiAKIAl6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOwogCi0JZm9yIChpID0gMDsgaSA8IE4oYWxsQ291bnRyaWVzKTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWxsQ291bnRyaWVzKTsgaSsrKSB7CiAJCWlmIChDb3VudHJ5Q29kZSA9PSBhbGxDb3VudHJpZXNbaV0uY291bnRyeUNvZGUpIHsKIAkJCVJlZ0RvbWFpbiA9IGFsbENvdW50cmllc1tpXS5yZWdEbW5FbnVtOwogCkBAIC0xODgxLDcgKzE4NzgsNyBAQAogCQlzdHJMZW4gPSAzOyAqLwogCX0KIAkvKiB6bV9kZWJ1Z19tc2dfcygiRGVzaXJlZCBpc28gbmFtZSA9ICIsIGlzb05hbWUpOyAqLwotCWZvciAoaSA9IDA7IGkgPCBOKGFsbENvdW50cmllcyk7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFsbENvdW50cmllcyk7IGkrKykgewogCQkvKiB6bV9kZWJ1Z19tc2dfcygiQ3VycmVudCBpc28gbmFtZSA9ICIsIGFsbENvdW50cmllc1tpXS5pc29OYW1lKTsgKi8KIAkJaWYgKHpmTWVtb3J5SXNFcXVhbCgodThfdCAqKWFsbENvdW50cmllc1tpXS5pc29OYW1lLCAodThfdCAqKSZjb3VudHJ5SW5mb1syXSwgbGVuZ3RoLTEpKSB7CiAJCQkvKiBEYmdQcmludCgiU2V0IGN1cnJlbnQgaXNvIG5hbWUgPSAlc1xuIiwgYWxsQ291bnRyaWVzW2ldLmlzb05hbWUpOyAqLwpAQCAtMTkzNyw3ICsxOTM0LDcgQEAKIHsKIAl1MTZfdCBpOwogCi0JZm9yIChpID0gMDsgaSA8IE4oYWxsQ291bnRyaWVzKTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWxsQ291bnRyaWVzKTsgaSsrKSB7CiAJCWlmIChhbGxDb3VudHJpZXNbaV0ucmVnRG1uRW51bSA9PSByZWdpb25Db2RlKQogCQkJcmV0dXJuIGFsbENvdW50cmllc1tpXS5pc29OYW1lOwogCX0KQEAgLTE5NTMsNyArMTk1MCw3IEBACiAJLyogaWYgbm8gbWF0Y2hpbmcgaXRlbSwgcmV0dXJuIGRlZmF1bHQgKi8KIAlyZWdpb25Db2RlID0gREVGX1JFR0RNTjsKIAotCWZvciAoaSA9IDA7IGkgPCBOKGFsbENvdW50cmllcyk7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFsbENvdW50cmllcyk7IGkrKykgewogCQlpZiAoemZNZW1vcnlJc0VxdWFsKCh1OF90ICopYWxsQ291bnRyaWVzW2ldLmlzb05hbWUsIGNvdW50cnlJc29OYW1lLCAyKSkgewogCQkJcmVnaW9uQ29kZSA9IGFsbENvdW50cmllc1tpXS5yZWdEbW5FbnVtOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2lvY3RsLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9pb2N0bC5jCmluZGV4IGE0OGM4ZTQuLmRjMzA2NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2lvY3RsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaW9jdGwuYwpAQCAtNjMsOCArNjMsNyBAQAogCiBleHRlcm4gdTE2X3QgemZMbnhHZXRWYXBJZCh6ZGV2X3QgKmRldik7CiAKLXN0YXRpYyBjb25zdCB1MzJfdCBjaGFubmVsX2ZyZXF1ZW5jeV8xMUFbXSA9Ci17CitzdGF0aWMgY29uc3QgdTMyX3QgY2hhbm5lbF9mcmVxdWVuY3lfMTFBW10gPSB7CiAJLyogRXZlbiBlbGVtZW50IGZvciBDaGFubmVsIE51bWJlciwgT2RkIGZvciBGcmVxdWVuY3kgKi8KIAkzNiwgNTE4MCwKIAk0MCwgNTIwMCwKQEAgLTUwNyw3ICs1MDYsNyBAQAogewogCS8qIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsgKi8KIAotCXN0cmNweSh3cnEtPm5hbWUsICJJRUVFIDgwMi4xMS1NSU1PIik7CisJc3RyY3B5KHdycS0+bmFtZSwgIklFRUUgODAyLjExYWJnbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzYxLDcgKzEzNjAsNyBAQAogfQogCiAvKmludCB1c2JkcnZ3ZXh0X3NldHBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0qCQkgICAJIHZvaWQgKncsIGNoYXIgKmV4dHJhKQorKgkJCQl2b2lkICp3LCBjaGFyICpleHRyYSkKICp7CiAqCXN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IGRldi0+bWxfcHJpdjsKICoJc3RydWN0IGllZWU4MDIxMWNvbSAqaWMgPSB2YXAtPml2X2ljOwpAQCAtMjI2MSwxMCArMjI2MCwxMCBAQAogCQlwcmludGsoS0VSTl9FUlIgIndkLT5hcC53cGFMZW4gOiAlIGRcbiIsIGxlbik7CiAKIAkJLyogRFVNUCBXUEEgSUUgKi8KLQkJZm9yKGlpID0gMDsgaWkgPCBsZW47KSB7CisJCWZvciAoaWkgPSAwOyBpaSA8IGxlbjspIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiMHglMDJ4ICIsIHdwYWllW2lpXSk7CiAKLQkJCWlmKCgrK2lpICUgMTYpID09IDApCisJCQlpZiAoKCsraWkgJSAxNikgPT0gMCkKIAkJCQlwcmludGsoS0VSTl9FUlIgIlxuIik7CiAJCX0KIAkJcHJpbnRrKEtFUk5fRVJSICJcbiIpOwpAQCAtMjMwOSwxMSArMjMwOCwxMCBAQAogCS8qIEdldCB0aGUgQVAgSWQgKi8KIAlhcElkID0gemZMbnhHZXRWYXBJZChkZXYpOwogCi0JaWYgKGFwSWQgPT0gMHhmZmZmKSB7CisJaWYgKGFwSWQgPT0gMHhmZmZmKQogCQlhcElkID0gMDsKLQl9IGVsc2UgeworCWVsc2UKIAkJYXBJZCA9IGFwSWQgKyAxOwotCX0KIAogCXN3aXRjaCAoemRwYXJtLT5jbWQpIHsKIAljYXNlIFpNX0NNRF9DRU5DX1NFVENFTkM6CkBAIC0yMzM0LDE1ICsyMzMyLDE1IEBACiAKIAkJcHJpbnRrKEtFUk5fRVJSICJLZXkgSW5kZXggOiAlIGRcbiIsIHpkcGFybS0+dS5jcnlwdC5rZXlpZCk7CiAJCXByaW50ayhLRVJOX0VSUiAiRW5jcnlwdGlvbiBrZXkgPSAiKTsKLQkJZm9yIChpaSA9IDA7IGlpIDwgMTY7IGlpKyspIHsKKwkJZm9yIChpaSA9IDA7IGlpIDwgMTY7IGlpKyspCiAJCQlwcmludGsoS0VSTl9FUlIgIjB4JTAyeCAiLCB6ZHBhcm0tPnUuY3J5cHQua2V5W2lpXSk7Ci0JCX0KKwogCQlwcmludGsoS0VSTl9FUlIgIlxuIik7CiAKIAkJcHJpbnRrKEtFUk5fRVJSICJNSUMga2V5ID0gIik7Ci0JCWZvcihpaSA9IDE2OyBpaSA8IFpNX0NFTkNfS0VZX1NJWkU7IGlpKyspIHsKKwkJZm9yIChpaSA9IDE2OyBpaSA8IFpNX0NFTkNfS0VZX1NJWkU7IGlpKyspCiAJCQlwcmludGsoS0VSTl9FUlIgIjB4JTAyeCAiLCB6ZHBhcm0tPnUuY3J5cHQua2V5W2lpXSk7Ci0JCX0KKwogCQlwcmludGsoS0VSTl9FUlIgIlxuIik7CiAKIAkJLyogU2V0IHVwIGtleSBpbmZvcm1hdGlvbiAqLwpAQCAtMjQyNCw3ICsyNDIyLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBTSU9DU0lXUlRTOgogCQllcnIgPSB1c2JkcnZfaW9jdGxfc2V0cnRzKGRldiwgJndycS0+dS5ydHMpOwotCQlpZiAoISBlcnIpCisJCWlmICghZXJyKQogCQkJY2hhbmdlZCA9IDE7CiAJCWJyZWFrOwogCS8qIHNldF9hdXRoICovCkBAIC0yNTgyLDggKzI1ODAsNyBAQAogCQkJCQkJCVpNX0FVVEhfTU9ERV9XUEEpOwogCQkJCQl9IGVsc2UgaWYgKChtYWNwLT5zdXBJZVsxN10gPT0gMHhmKSAmJgogCQkJCQkJKG1hY3AtPnN1cEllWzE4XSA9PSAweGFjKSAmJgotCQkJCQkJKG1hY3AtPnN1cEllWzE5XSA9PSAweDIpKQotCQkJCQl7CisJCQkJCQkobWFjcC0+c3VwSWVbMTldID09IDB4MikpIHsKIAkJCQkJCXByaW50ayhLRVJOX0VSUgogCQkJCSJ3ZC0+c3RhLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQTJQU0tcbiIpOwogCQkJCS8qIHdkLT5zdGEuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBMlBTSzsgKi8KQEAgLTI1OTIsOCArMjU4OSw3IEBACiAJCQkJWk1fQVVUSF9NT0RFX1dQQTJQU0spOwogCQkJfSBlbHNlIGlmICgobWFjcC0+c3VwSWVbMTddID09IDB4ZikgJiYKIAkJCQkobWFjcC0+c3VwSWVbMThdID09IDB4YWMpICYmCi0JCQkJKG1hY3AtPnN1cEllWzE5XSA9PSAweDEpKQotCQkJCXsKKwkJCQkobWFjcC0+c3VwSWVbMTldID09IDB4MSkpIHsKIAkJCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJIndkLT5zdGEuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBMlxuIik7CiAJCQkJLyogd2QtPnN0YS5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEEyOyAqLwpAQCAtMjYxOCw3ICsyNjE0LDcgQEAKIAkJCQl6ZmlXbGFuU2V0V2VwU3RhdHVzKGRldiwgWk1fRU5DUllQVElPTl9BRVMpOwogCQkJCX0KIAkJCX0KLQkJCS8vV1BBMiBvciBXUEEyUFNLCisJCQkvKldQQTIgb3IgV1BBMlBTSyovCiAJCQlpZiAoKG1hY3AtPnN1cEllWzE3XSA9PSAweGYpIHx8CiAJCQkJKG1hY3AtPnN1cEllWzE4XSA9PSAweGFjKSkgewogCQkJCWlmIChtYWNwLT5zdXBJZVsxM10gPT0gMHgyKSB7CkBAIC0yNjU2LDcgKzI2NTIsNyBAQAogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJIioqKioqKioqKioqKioqKipaRF9QQVJBTV9DT1VOVEVSTUVBU1VSRVMgOiAiKTsKIAotCQkJaWYoYXJnKSB7CisJCQlpZiAoYXJnKSB7CiAJCQkJLyogICAgbUNvdW50ZXJNZWFzdXJlU3RhdGU9MTsgKi8KIAkJCQlwcmludGsoS0VSTl9FUlIgImVuYWJsZVxuIik7CiAJCQl9IGVsc2UgewpAQCAtMjY2NywyMCArMjY2MywxOCBAQAogCQlpZiAob3AgPT0gWkRfUEFSQU1fRFJPUFVORU5DUllQVEVEKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIlpEX1BBUkFNX0RST1BVTkVOQ1JZUFRFRCA6ICIpOwogCi0JCQlpZihhcmcpIHsKKwkJCWlmIChhcmcpCiAJCQkJcHJpbnRrKEtFUk5fRVJSICJlbmFibGVcbiIpOwotCQkJfSBlbHNlIHsKKwkJCWVsc2UKIAkJCQlwcmludGsoS0VSTl9FUlIgImRpc2FibGVcbiIpOwotCQkJfQogCQl9CiAJCWlmIChvcCA9PSBaRF9QQVJBTV9BVVRIX0FMR1MpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiWkRfUEFSQU1fQVVUSF9BTEdTIDogIik7CiAKLQkJCWlmIChhcmcgPT0gMCkgeworCQkJaWYgKGFyZyA9PSAwKQogCQkJCXByaW50ayhLRVJOX0VSUiAiT1BFTl9TWVNURU1cbiIpOwotCQkJfSBlbHNlIHsKKwkJCWVsc2UKIAkJCQlwcmludGsoS0VSTl9FUlIgIlNIQVJFRF9LRVlcbiIpOwotCQkJfQogCQl9CiAJCWlmIChvcCA9PSBaRF9QQVJBTV9XUFNfRklMVEVSKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIlpEX1BBUkFNX1dQU19GSUxURVIgOiAiKTsKQEAgLTI3MDUsMTEgKzI2OTksMTAgQEAKIAkJLyogR2V0IHRoZSBBUCBJZCAqLwogCQlhcElkID0gemZMbnhHZXRWYXBJZChkZXYpOwogCi0JCWlmIChhcElkID09IDB4ZmZmZikgeworCQlpZiAoYXBJZCA9PSAweGZmZmYpCiAJCQlhcElkID0gMDsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJYXBJZCA9IGFwSWQgKyAxOwotCQl9CiAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZyZXFfd3BhaWUsIGlmci0+aWZyX2RhdGEsCiAJCQkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExcmVxX3dwYWllKSkpIHsKQEAgLTI3MjEsMTAgKzI3MTQsMTAgQEAKIAkJCWZvciAoaiA9IDA7IGogPCBJRUVFODAyMTFfQUREUl9MRU47IGorKykgewogCQkJCWlmIChtYWNwLT5zdGF3cGFpZVtpXS53cGFfbWFjYWRkcltqXSAhPQogCQkJCQkJcmVxX3dwYWllLndwYV9tYWNhZGRyW2pdKQotCQkJCWJyZWFrOworCQkJCQlicmVhazsKIAkJCX0KIAkJCWlmIChqID09IDYpCi0JCQlicmVhazsKKwkJCQlicmVhazsKIAkJfQogCiAJCWlmIChpIDwgWk1fT0FMX01BWF9TVEFfU1VQUE9SVCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvd3JhcF9zZWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3dyYXBfc2VjLmMKaW5kZXggMGIyMzhlOS4uMWZiYTdhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL290dXMvd3JhcF9zZWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy93cmFwX3NlYy5jCkBAIC0zNiw3ICszNiw3IEBACiB1MTZfdCB6ZkxueENlbmNBc29jTm90aWZ5KHpkZXZfdCAqZGV2LCB1MTZfdCAqbWFjQWRkciwgdThfdCAqYm9keSwKIAkJCQl1MTZfdCBib2R5U2l6ZSwgdTE2X3QgcG9ydCkKIHsKLQlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSAoc3RydWN0IHVzYmRydl9wcml2YXRlICopZGV2LT5wcml2OworCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+cHJpdjsKIAlzdHJ1Y3QgenlkYXNfY2VuY19zdGFfaW5mbyBjZW5jX2luZm87CiAJLyogc3RydWN0IHNvY2sgKm5ldGxpbmtfc2s7CSovCiAJdThfdCBpZV9sZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy93cmFwX3VzYi5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvd3JhcF91c2IuYwppbmRleCA5MzQ1OWNhLi45ZjA0MDQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy93cmFwX3VzYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3dyYXBfdXNiLmMKQEAgLTEwNCw2ICsxMDQsMTEgQEAKIAogCWlmIChzaXplID4gMCkgewogCQlidWYgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCQlpZiAoYnVmID09IE5VTEwpIHsKKwkJCXByX2VycigiemZ3VXNiU3VibWl0Q29udHJvbCgpIGZhaWxlZCwgIgorCQkJCSAgImttYWxsb2MoKSByZXR1cm5lZCBOVUxMXG4iKTsKKwkJCXJldHVybiAxOworCQl9CiAJCW1lbWNweShidWYsICh1OF90ICopZGF0YSwgc2l6ZSk7CiAJfSBlbHNlCiAJCWJ1ZiA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy93d3JhcC5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvd3dyYXAuYwppbmRleCBiMDJlYjQyLi5mY2QzZGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy93d3JhcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3d3cmFwLmMKQEAgLTI5LDI0ICsyOSwyNCBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgogCi1leHRlcm4gdm9pZCB6ZmlSZWN2ODAyMTEoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCBzdHJ1Y3QgenNBZGRpdGlvbkluZm8qIGFkZEluZm8pOwotZXh0ZXJuIHZvaWQgemZDb3JlUmVjdih6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHN0cnVjdCB6c0FkZGl0aW9uSW5mbyogYWRkSW5mbyk7Ci1leHRlcm4gdm9pZCB6ZklkbENoa1JzcCh6ZGV2X3QqIGRldiwgdTMyX3QqIHJzcCwgdTE2X3QgcnNwTGVuKTsKLWV4dGVybiB2b2lkIHpmSWRsUnNwKHpkZXZfdCogZGV2LCB1MzJfdCAqcnNwLCB1MTZfdCByc3BMZW4pOworZXh0ZXJuIHZvaWQgemZpUmVjdjgwMjExKHpkZXZfdCAqZGV2LCB6YnVmX3QgKmJ1Ziwgc3RydWN0IHpzQWRkaXRpb25JbmZvICphZGRJbmZvKTsKK2V4dGVybiB2b2lkIHpmQ29yZVJlY3YoemRldl90ICpkZXYsIHpidWZfdCAqYnVmLCBzdHJ1Y3QgenNBZGRpdGlvbkluZm8gKmFkZEluZm8pOworZXh0ZXJuIHZvaWQgemZJZGxDaGtSc3AoemRldl90ICpkZXYsIHUzMl90ICpyc3AsIHUxNl90IHJzcExlbik7CitleHRlcm4gdm9pZCB6ZklkbFJzcCh6ZGV2X3QgKmRldiwgdTMyX3QgKnJzcCwgdTE2X3QgcnNwTGVuKTsKIAogCiAKLS8vZXh0ZXJuIHN0cnVjdCB6c1dkc1N0cnVjdCB3ZHNbWk1fV0RTX1BPUlRfTlVNQkVSXTsKKy8qZXh0ZXJuIHN0cnVjdCB6c1dkc1N0cnVjdCB3ZHNbWk1fV0RTX1BPUlRfTlVNQkVSXTsqLwogZXh0ZXJuIHN0cnVjdCB6c1ZhcFN0cnVjdCB2YXBbWk1fVkFQX1BPUlRfTlVNQkVSXTsKIAotdTMyX3QgemZMbnhVc2JTdWJtaXRUeERhdGEoemRldl90KiBkZXYpOwotdTMyX3QgemZMbnhVc2JJbih6ZGV2X3QqIGRldiwgdXJiX3QgKnVyYiwgemJ1Zl90ICpidWYpOwordTMyX3QgemZMbnhVc2JTdWJtaXRUeERhdGEoemRldl90ICpkZXYpOwordTMyX3QgemZMbnhVc2JJbih6ZGV2X3QgKmRldiwgdXJiX3QgKnVyYiwgemJ1Zl90ICpidWYpOwogdTMyX3QgemZMbnhTdWJtaXRSZWdJblVyYih6ZGV2X3QgKmRldik7CiB1MzJfdCB6ZkxueFVzYlN1Ym1pdEJ1bGtVcmIodXJiX3QgKnVyYiwgc3RydWN0IHVzYl9kZXZpY2UgKnVzYiwgdTE2X3QgZXBudW0sIHUxNl90IGRpcmVjdGlvbiwKLSAgICAgICAgdm9pZCAqdHJhbnNmZXJfYnVmZmVyLCBpbnQgYnVmZmVyX2xlbmd0aCwgdXNiX2NvbXBsZXRlX3QgY29tcGxldGUsIHZvaWQgKmNvbnRleHQpOworCXZvaWQgKnRyYW5zZmVyX2J1ZmZlciwgaW50IGJ1ZmZlcl9sZW5ndGgsIHVzYl9jb21wbGV0ZV90IGNvbXBsZXRlLCB2b2lkICpjb250ZXh0KTsKIHUzMl90IHpmTG54VXNiU3VibWl0SW50VXJiKHVyYl90ICp1cmIsIHN0cnVjdCB1c2JfZGV2aWNlICp1c2IsIHUxNl90IGVwbnVtLCB1MTZfdCBkaXJlY3Rpb24sCi0gICAgICAgIHZvaWQgKnRyYW5zZmVyX2J1ZmZlciwgaW50IGJ1ZmZlcl9sZW5ndGgsIHVzYl9jb21wbGV0ZV90IGNvbXBsZXRlLCB2b2lkICpjb250ZXh0LAotICAgICAgICB1MzJfdCBpbnRlcnZhbCk7CisJdm9pZCAqdHJhbnNmZXJfYnVmZmVyLCBpbnQgYnVmZmVyX2xlbmd0aCwgdXNiX2NvbXBsZXRlX3QgY29tcGxldGUsIHZvaWQgKmNvbnRleHQsCisJdTMyX3QgaW50ZXJ2YWwpOwogCiB1MTZfdCB6ZkxueEdldEZyZWVUeFVyYih6ZGV2X3QgKmRldikKIHsKQEAgLTU2LDIyICs1NiwxOSBAQAogCiAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOwogCi0gICAgLy9pZHggPSAoKG1hY3AtPlR4VXJiVGFpbCArIDEpICYgKFpNX01BWF9UWF9VUkJfTlVNIC0gMSkpOworICAgIC8qaWR4ID0gKChtYWNwLT5UeFVyYlRhaWwgKyAxKSAmIChaTV9NQVhfVFhfVVJCX05VTSAtIDEpKTsqLwogCi0gICAgLy9pZiAoaWR4ICE9IG1hY3AtPlR4VXJiSGVhZCkKLSAgICBpZiAobWFjcC0+VHhVcmJDbnQgIT0gMCkKLSAgICB7Ci0gICAgICAgIGlkeCA9IG1hY3AtPlR4VXJiVGFpbDsKLSAgICAgICAgbWFjcC0+VHhVcmJUYWlsID0gKChtYWNwLT5UeFVyYlRhaWwgKyAxKSAmIChaTV9NQVhfVFhfVVJCX05VTSAtIDEpKTsKLSAgICAgICAgbWFjcC0+VHhVcmJDbnQtLTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgLy9wcmludGsoS0VSTl9FUlIgIm1hY3AtPlR4VXJiQ250OiAlZFxuIiwgbWFjcC0+VHhVcmJDbnQpOwotICAgICAgICBpZHggPSAweGZmZmY7Ci0gICAgfQorICAgIC8qaWYgKGlkeCAhPSBtYWNwLT5UeFVyYkhlYWQpKi8KKyAgICBpZiAobWFjcC0+VHhVcmJDbnQgIT0gMCkgeworCWlkeCA9IG1hY3AtPlR4VXJiVGFpbDsKKwltYWNwLT5UeFVyYlRhaWwgPSAoKG1hY3AtPlR4VXJiVGFpbCArIDEpICYgKFpNX01BWF9UWF9VUkJfTlVNIC0gMSkpOworCW1hY3AtPlR4VXJiQ250LS07CisJfSBlbHNlIHsKKwkvKnByaW50ayhLRVJOX0VSUiAibWFjcC0+VHhVcmJDbnQ6ICVkXG4iLCBtYWNwLT5UeFVyYkNudCk7Ki8KKwlpZHggPSAweGZmZmY7CisJfQogCi0gICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjcC0+Y3NfbG9jaywgaXJxRmxhZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjcC0+Y3NfbG9jaywgaXJxRmxhZyk7CiAgICAgcmV0dXJuIGlkeDsKIH0KIApAQCAtODUsMTYgKzgyLDEzIEBACiAKICAgICBpZHggPSAoKG1hY3AtPlR4VXJiSGVhZCArIDEpICYgKFpNX01BWF9UWF9VUkJfTlVNIC0gMSkpOwogCi0gICAgLy9pZiAoaWR4ICE9IG1hY3AtPlR4VXJiVGFpbCkKLSAgICBpZiAobWFjcC0+VHhVcmJDbnQgPCBaTV9NQVhfVFhfVVJCX05VTSkKLSAgICB7Ci0gICAgICAgIG1hY3AtPlR4VXJiSGVhZCA9IGlkeDsKLSAgICAgICAgbWFjcC0+VHhVcmJDbnQrKzsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcHJpbnRrKCJVc2JUeFVyYlEgaW5jb25zaXN0ZW50OiBUeFVyYkhlYWQ6ICVkLCBUeFVyYlRhaWw6ICVkXG4iLAotICAgICAgICAgICAgICAgIG1hY3AtPlR4VXJiSGVhZCwgbWFjcC0+VHhVcmJUYWlsKTsKKyAgICAvKmlmIChpZHggIT0gbWFjcC0+VHhVcmJUYWlsKSovCisgICAgaWYgKG1hY3AtPlR4VXJiQ250IDwgWk1fTUFYX1RYX1VSQl9OVU0pIHsKKwltYWNwLT5UeFVyYkhlYWQgPSBpZHg7CisJbWFjcC0+VHhVcmJDbnQrKzsKKyAgICB9IGVsc2UgeworCXByaW50aygiVXNiVHhVcmJRIGluY29uc2lzdGVudDogVHhVcmJIZWFkOiAlZCwgVHhVcmJUYWlsOiAlZFxuIiwKKwltYWNwLT5UeFVyYkhlYWQsIG1hY3AtPlR4VXJiVGFpbCk7CiAgICAgfQogCiAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjcC0+Y3NfbG9jaywgaXJxRmxhZyk7CkBAIC0xMjUsMjQgKzExOSwyMCBAQAogCiAgICAgaWR4ID0gKChtYWNwLT5UeEJ1ZkhlYWQrMSkgJiAoWk1fTUFYX1RYX0JVRl9OVU0gLSAxKSk7CiAKLSAgICAvL2lmIChpZHggIT0gbWFjcC0+VHhCdWZUYWlsKQotICAgIGlmIChtYWNwLT5UeEJ1ZkNudCA+IDApCi0gICAgewotICAgICAgICAvL3ByaW50aygiQ1dZIC0gemZ3R2V0VXNiVHhCdWZmZXIgLG1hY3AtPlR4QnVmQ250ID0gJWRcbiIsIG1hY3AtPlR4QnVmQ250KTsKLSAgICAgICAgVHhRID0gKFVzYlR4UV90ICopJihtYWNwLT5Vc2JUeEJ1ZlFbbWFjcC0+VHhCdWZIZWFkXSk7Ci0gICAgICAgIG1hY3AtPlR4QnVmSGVhZCA9ICgobWFjcC0+VHhCdWZIZWFkKzEpICYgKFpNX01BWF9UWF9CVUZfTlVNIC0gMSkpOwotICAgICAgICBtYWNwLT5UeEJ1ZkNudC0tOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAobWFjcC0+VHhCdWZIZWFkICE9IG1hY3AtPlR4QnVmVGFpbCkKLSAgICAgICAgewotICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ6ZndHZXRVc2JUeEJ1ZiBVc2JUeEJ1ZlEgaW5jb25zaXN0ZW50OiBUeEJ1ZkhlYWQ6ICVkLCBUeEJ1ZlRhaWw6ICVkXG4iLAotICAgICAgICAgICAgICAgICAgICBtYWNwLT5UeEJ1ZkhlYWQsIG1hY3AtPlR4QnVmVGFpbCk7Ci0gICAgICAgIH0KKyAgICAvKmlmIChpZHggIT0gbWFjcC0+VHhCdWZUYWlsKSovCisgICAgaWYgKG1hY3AtPlR4QnVmQ250ID4gMCkgeworCS8qcHJpbnRrKCJDV1kgLSB6ZndHZXRVc2JUeEJ1ZmZlciAsbWFjcC0+VHhCdWZDbnQgPSAlZFxuIiwgbWFjcC0+VHhCdWZDbnQpOyovCisJVHhRID0gKFVzYlR4UV90ICopJihtYWNwLT5Vc2JUeEJ1ZlFbbWFjcC0+VHhCdWZIZWFkXSk7CisJbWFjcC0+VHhCdWZIZWFkID0gKChtYWNwLT5UeEJ1ZkhlYWQrMSkgJiAoWk1fTUFYX1RYX0JVRl9OVU0gLSAxKSk7CisJbWFjcC0+VHhCdWZDbnQtLTsKKwl9IGVsc2UgeworCWlmIChtYWNwLT5UeEJ1ZkhlYWQgIT0gbWFjcC0+VHhCdWZUYWlsKSB7CisJCXByaW50ayhLRVJOX0VSUiAiemZ3R2V0VXNiVHhCdWYgVXNiVHhCdWZRIGluY29uc2lzdGVudDogVHhCdWZIZWFkOiAlZCwgVHhCdWZUYWlsOiAlZFxuIiwKKwkJbWFjcC0+VHhCdWZIZWFkLCBtYWNwLT5UeEJ1ZlRhaWwpOworCX0KIAotICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWNwLT5jc19sb2NrLCBpcnFGbGFnKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjcC0+Y3NfbG9jaywgaXJxRmxhZyk7CisJcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjcC0+Y3NfbG9jaywgaXJxRmxhZyk7CkBAIC0xNTAsOCArMTQwLDggQEAKIH0KIAogdTE2X3QgemZMbnhQdXRVc2JUeEJ1ZmZlcih6ZGV2X3QgKmRldiwgdThfdCAqaGRyLCB1MTZfdCBoZHJsZW4sCi0gICAgICAgIHU4X3QgKnNuYXAsIHUxNl90IHNuYXBMZW4sIHU4X3QgKnRhaWwsIHUxNl90IHRhaWxMZW4sCi0gICAgICAgIHpidWZfdCAqYnVmLCB1MTZfdCBvZmZzZXQpCisJdThfdCAqc25hcCwgdTE2X3Qgc25hcExlbiwgdThfdCAqdGFpbCwgdTE2X3QgdGFpbExlbiwKKwl6YnVmX3QgKmJ1ZiwgdTE2X3Qgb2Zmc2V0KQogewogICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKICAgICB1MTZfdCBpZHg7CkBAIC0xNjMsMzIgKzE1MywyOSBAQAogICAgIGlkeCA9ICgobWFjcC0+VHhCdWZUYWlsKzEpICYgKFpNX01BWF9UWF9CVUZfTlVNIC0gMSkpOwogCiAgICAgLyogRm9yIFR4IGRlYnVnICovCi0gICAgLy96bV9hc3NlcnQobWFjcC0+VHhCdWZDbnQgPj0gMCk7IC8vIGRlbGV0ZWQgYmVjYXVzZSBvZiBhbHdheXMgdHJ1ZQorICAgIC8qem1fYXNzZXJ0KG1hY3AtPlR4QnVmQ250ID49IDApOyAvLyBkZWxldGVkIGJlY2F1c2Ugb2YgYWx3YXlzIHRydWUqLwogCi0gICAgLy9pZiAoaWR4ICE9IG1hY3AtPlR4QnVmSGVhZCkKLSAgICBpZiAobWFjcC0+VHhCdWZDbnQgPCBaTV9NQVhfVFhfQlVGX05VTSkKLSAgICB7Ci0gICAgICAgIC8vcHJpbnRrKCJDV1kgLSB6ZndQdXRVc2JUeEJ1ZmZlciAsbWFjcC0+VHhCdWZDbnQgPSAlZFxuIiwgbWFjcC0+VHhCdWZDbnQpOwotICAgICAgICBUeFEgPSAoVXNiVHhRX3QgKikmKG1hY3AtPlVzYlR4QnVmUVttYWNwLT5UeEJ1ZlRhaWxdKTsKLSAgICAgICAgbWVtY3B5KFR4US0+aGRyLCBoZHIsIGhkcmxlbik7Ci0gICAgICAgIFR4US0+aGRybGVuID0gaGRybGVuOwotICAgICAgICBtZW1jcHkoVHhRLT5zbmFwLCBzbmFwLCBzbmFwTGVuKTsKLSAgICAgICAgVHhRLT5zbmFwTGVuID0gc25hcExlbjsKLSAgICAgICAgbWVtY3B5KFR4US0+dGFpbCwgdGFpbCwgdGFpbExlbik7Ci0gICAgICAgIFR4US0+dGFpbExlbiA9IHRhaWxMZW47Ci0gICAgICAgIFR4US0+YnVmID0gYnVmOwotICAgICAgICBUeFEtPm9mZnNldCA9IG9mZnNldDsKKyAgICAvKmlmIChpZHggIT0gbWFjcC0+VHhCdWZIZWFkKSovCisgICAgaWYgKG1hY3AtPlR4QnVmQ250IDwgWk1fTUFYX1RYX0JVRl9OVU0pIHsKKwkvKnByaW50aygiQ1dZIC0gemZ3UHV0VXNiVHhCdWZmZXIgLG1hY3AtPlR4QnVmQ250ID0gJWRcbiIsIG1hY3AtPlR4QnVmQ250KTsqLworCVR4USA9IChVc2JUeFFfdCAqKSYobWFjcC0+VXNiVHhCdWZRW21hY3AtPlR4QnVmVGFpbF0pOworCW1lbWNweShUeFEtPmhkciwgaGRyLCBoZHJsZW4pOworCVR4US0+aGRybGVuID0gaGRybGVuOworCW1lbWNweShUeFEtPnNuYXAsIHNuYXAsIHNuYXBMZW4pOworCVR4US0+c25hcExlbiA9IHNuYXBMZW47CisJbWVtY3B5KFR4US0+dGFpbCwgdGFpbCwgdGFpbExlbik7CisJVHhRLT50YWlsTGVuID0gdGFpbExlbjsKKwlUeFEtPmJ1ZiA9IGJ1ZjsKKwlUeFEtPm9mZnNldCA9IG9mZnNldDsKIAotICAgICAgICBtYWNwLT5UeEJ1ZlRhaWwgPSAoKG1hY3AtPlR4QnVmVGFpbCsxKSAmIChaTV9NQVhfVFhfQlVGX05VTSAtIDEpKTsKLSAgICAgICAgbWFjcC0+VHhCdWZDbnQrKzsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ6ZkxueFB1dFVzYlR4QnVmZmVyIFVzYlR4QnVmUSBpbmNvbnNpc3RlbnQ6IFR4QnVmSGVhZDogJWQsIFR4QnVmVGFpbDogJWQsIFR4QnVmQ250OiAlZFxuIiwKLSAgICAgICAgICAgIG1hY3AtPlR4QnVmSGVhZCwgbWFjcC0+VHhCdWZUYWlsLCBtYWNwLT5UeEJ1ZkNudCk7Ci0gICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOwotICAgICAgICByZXR1cm4gMHhmZmZmOwotICAgIH0KKwltYWNwLT5UeEJ1ZlRhaWwgPSAoKG1hY3AtPlR4QnVmVGFpbCsxKSAmIChaTV9NQVhfVFhfQlVGX05VTSAtIDEpKTsKKwltYWNwLT5UeEJ1ZkNudCsrOworCX0gZWxzZSB7CisJcHJpbnRrKEtFUk5fRVJSICJ6ZkxueFB1dFVzYlR4QnVmZmVyIFVzYlR4QnVmUSBpbmNvbnNpc3RlbnQ6IFR4QnVmSGVhZDogJWQsIFR4QnVmVGFpbDogJWQsIFR4QnVmQ250OiAlZFxuIiwKKwkJbWFjcC0+VHhCdWZIZWFkLCBtYWNwLT5UeEJ1ZlRhaWwsIG1hY3AtPlR4QnVmQ250KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWNwLT5jc19sb2NrLCBpcnFGbGFnKTsKKwlyZXR1cm4gMHhmZmZmOworCX0KIAogICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOwogICAgIHJldHVybiAwOwpAQCAtMTk3LDI4ICsxODQsMjUgQEAKIHpidWZfdCAqemZMbnhHZXRVc2JSeEJ1ZmZlcih6ZGV2X3QgKmRldikKIHsKICAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7Ci0gICAgLy91MTZfdCBpZHg7CisgICAgLyp1MTZfdCBpZHg7Ki8KICAgICB6YnVmX3QgKmJ1ZjsKICAgICB1bnNpZ25lZCBsb25nIGlycUZsYWc7CiAKICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmbWFjcC0+Y3NfbG9jaywgaXJxRmxhZyk7CiAKLSAgICAvL2lkeCA9ICgobWFjcC0+UnhCdWZIZWFkKzEpICYgKFpNX01BWF9SWF9VUkJfTlVNIC0gMSkpOworICAgIC8qaWR4ID0gKChtYWNwLT5SeEJ1ZkhlYWQrMSkgJiAoWk1fTUFYX1JYX1VSQl9OVU0gLSAxKSk7Ki8KIAotICAgIC8vaWYgKGlkeCAhPSBtYWNwLT5SeEJ1ZlRhaWwpCi0gICAgaWYgKG1hY3AtPlJ4QnVmQ250ICE9IDApCi0gICAgewotICAgICAgICBidWYgPSBtYWNwLT5Vc2JSeEJ1ZlFbbWFjcC0+UnhCdWZIZWFkXTsKLSAgICAgICAgbWFjcC0+UnhCdWZIZWFkID0gKChtYWNwLT5SeEJ1ZkhlYWQrMSkgJiAoWk1fTUFYX1JYX1VSQl9OVU0gLSAxKSk7Ci0gICAgICAgIG1hY3AtPlJ4QnVmQ250LS07Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHByaW50aygiUnhCdWZRIGluY29uc2lzdGVudDogUnhCdWZIZWFkOiAlZCwgUnhCdWZUYWlsOiAlZFxuIiwKLSAgICAgICAgICAgICAgICBtYWNwLT5SeEJ1ZkhlYWQsIG1hY3AtPlJ4QnVmVGFpbCk7Ci0gICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgLyppZiAoaWR4ICE9IG1hY3AtPlJ4QnVmVGFpbCkqLworICAgIGlmIChtYWNwLT5SeEJ1ZkNudCAhPSAwKSB7CisJYnVmID0gbWFjcC0+VXNiUnhCdWZRW21hY3AtPlJ4QnVmSGVhZF07CisJbWFjcC0+UnhCdWZIZWFkID0gKChtYWNwLT5SeEJ1ZkhlYWQrMSkgJiAoWk1fTUFYX1JYX1VSQl9OVU0gLSAxKSk7CisJbWFjcC0+UnhCdWZDbnQtLTsKKyAgICB9IGVsc2UgeworCXByaW50aygiUnhCdWZRIGluY29uc2lzdGVudDogUnhCdWZIZWFkOiAlZCwgUnhCdWZUYWlsOiAlZFxuIiwKKwkJbWFjcC0+UnhCdWZIZWFkLCBtYWNwLT5SeEJ1ZlRhaWwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOworCXJldHVybiBOVUxMOworCX0KIAogICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOwogICAgIHJldHVybiBidWY7CkBAIC0yMzQsNjEgKzIxOCw1NiBAQAogCiAgICAgaWR4ID0gKChtYWNwLT5SeEJ1ZlRhaWwrMSkgJiAoWk1fTUFYX1JYX1VSQl9OVU0gLSAxKSk7CiAKLSAgICAvL2lmIChpZHggIT0gbWFjcC0+UnhCdWZIZWFkKQotICAgIGlmIChtYWNwLT5SeEJ1ZkNudCAhPSBaTV9NQVhfUlhfVVJCX05VTSkKLSAgICB7Ci0gICAgICAgIG1hY3AtPlVzYlJ4QnVmUVttYWNwLT5SeEJ1ZlRhaWxdID0gYnVmOwotICAgICAgICBtYWNwLT5SeEJ1ZlRhaWwgPSBpZHg7Ci0gICAgICAgIG1hY3AtPlJ4QnVmQ250Kys7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHByaW50aygiUnhCdWZRIGluY29uc2lzdGVudDogUnhCdWZIZWFkOiAlZCwgUnhCdWZUYWlsOiAlZFxuIiwKLSAgICAgICAgICAgICAgICBtYWNwLT5SeEJ1ZkhlYWQsIG1hY3AtPlJ4QnVmVGFpbCk7Ci0gICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOwotICAgICAgICByZXR1cm4gMHhmZmZmOwotICAgIH0KKyAgICAvKmlmIChpZHggIT0gbWFjcC0+UnhCdWZIZWFkKSovCisgICAgaWYgKG1hY3AtPlJ4QnVmQ250ICE9IFpNX01BWF9SWF9VUkJfTlVNKSB7CisJbWFjcC0+VXNiUnhCdWZRW21hY3AtPlJ4QnVmVGFpbF0gPSBidWY7CisJbWFjcC0+UnhCdWZUYWlsID0gaWR4OworCW1hY3AtPlJ4QnVmQ250Kys7CisgICAgfSBlbHNlIHsKKwlwcmludGsoIlJ4QnVmUSBpbmNvbnNpc3RlbnQ6IFJ4QnVmSGVhZDogJWQsIFJ4QnVmVGFpbDogJWRcbiIsCisJCW1hY3AtPlJ4QnVmSGVhZCwgbWFjcC0+UnhCdWZUYWlsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWNwLT5jc19sb2NrLCBpcnFGbGFnKTsKKwlyZXR1cm4gMHhmZmZmOworCX0KIAotICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOwotICAgIHJldHVybiAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOworCXJldHVybiAwOwogfQogCiB2b2lkIHpmTG54VXNiRGF0YU91dF9jYWxsYmFjayh1cmJfdCAqdXJiKQogewotICAgIHpkZXZfdCogZGV2ID0gdXJiLT5jb250ZXh0OwotICAgIC8vVXNiVHhRX3QgKlR4RGF0YTsKKyAgICB6ZGV2X3QgKmRldiA9IHVyYi0+Y29udGV4dDsKKyAgICAvKlVzYlR4UV90ICpUeERhdGE7Ki8KIAogICAgIC8qIEdpdmUgdGhlIHVyYiBiYWNrICovCiAgICAgemZMbnhQdXRUeFVyYihkZXYpOwogCiAgICAgLyogQ2hlY2sgd2hldGhlciB0aGVyZSBpcyBhbnkgcGVuZGluZyBidWZmZXIgbmVlZGVkICovCiAgICAgLyogdG8gYmUgc2VudCAqLwotICAgIGlmICh6ZkxueENoZWNrVHhCdWZmZXJDbnQoZGV2KSAhPSAwKQotICAgIHsKLSAgICAgICAgLy9UeERhdGEgPSB6ZndHZXRVc2JUeEJ1ZmZlcihkZXYpOwotCi0gICAgICAgIC8vaWYgKFR4RGF0YSA9PSBOVUxMKQotICAgICAgICAvL3sKLSAgICAgICAgLy8gICAgcHJpbnRrKCJHZXQgYSBOVUxMIGJ1ZmZlciBmcm9tIHpmd0dldFVzYlR4QnVmZmVyXG4iKTsKLSAgICAgICAgLy8gICAgcmV0dXJuOwotICAgICAgICAvL30KLSAgICAgICAgLy9lbHNlCi0gICAgICAgIC8vewotICAgICAgICAgICAgemZMbnhVc2JTdWJtaXRUeERhdGEoZGV2KTsKLSAgICAgICAgLy99CisgICAgaWYgKHpmTG54Q2hlY2tUeEJ1ZmZlckNudChkZXYpICE9IDApIHsKKwkvKlR4RGF0YSA9IHpmd0dldFVzYlR4QnVmZmVyKGRldik7CisJLy9pZiAoVHhEYXRhID09IE5VTEwpCisJLy97CisJLy8gICAgcHJpbnRrKCJHZXQgYSBOVUxMIGJ1ZmZlciBmcm9tIHpmd0dldFVzYlR4QnVmZmVyXG4iKTsKKwkvLyAgICByZXR1cm47CisJLy99CisJLy9lbHNlCisJLy97CisJCXpmTG54VXNiU3VibWl0VHhEYXRhKGRldik7CisJLy99Ki8KICAgICB9CiB9CiAKIHZvaWQgemZMbnhVc2JEYXRhSW5fY2FsbGJhY2sodXJiX3QgKnVyYikKIHsKLSAgICB6ZGV2X3QqIGRldiA9IHVyYi0+Y29udGV4dDsKKyAgICB6ZGV2X3QgKmRldiA9IHVyYi0+Y29udGV4dDsKICAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CiAgICAgemJ1Zl90ICpidWY7CiAgICAgemJ1Zl90ICpuZXdfYnVmOwogICAgIGludCBzdGF0dXM7CiAKICNpZiBaTV9VU0JfU1RSRUFNX01PREUgPT0gMQotICAgIHN0YXRpYyBpbnQgcmVtYWluX2xlbiA9IDAsIGNoZWNrX3BhZCA9IDAsIGNoZWNrX2xlbiA9IDA7CisgICAgc3RhdGljIGludCByZW1haW5fbGVuLCBjaGVja19wYWQsIGNoZWNrX2xlbjsKICAgICBpbnQgaW5kZXggPSAwOwogICAgIGludCBjaGtfaWR4OwogICAgIHUxNl90IHBrdF9sZW47CkBAIC0yOTksNDcgKzI3OCw0NSBAQAogI2VuZGlmCiAKICAgICAvKiBDaGVjayBzdGF0dXMgZm9yIFVSQiAqLwotICAgIGlmICh1cmItPnN0YXR1cyAhPSAwKXsKLSAgICAgICAgcHJpbnRrKCJ6ZkxueFVzYkRhdGFJbl9jYWxsYmFjaygpIDogc3RhdHVzPTB4JXhcbiIsIHVyYi0+c3RhdHVzKTsKLSAgICAgICAgaWYgKCh1cmItPnN0YXR1cyAhPSAtRU5PRU5UKSAmJiAodXJiLT5zdGF0dXMgIT0gLUVDT05OUkVTRVQpCi0gICAgICAgICAgICAmJiAodXJiLT5zdGF0dXMgIT0gLUVTSFVURE9XTikpCi0gICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAodXJiLT5zdGF0dXMgPT0gLUVQSVBFKXsKLSAgICAgICAgICAgICAgICAgICAgLy9wcmludGsoS0VSTl9FUlIgIm5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogLUVQSVBFIik7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IC0xOwotICAgICAgICAgICAgICAgIH0KKyAgICBpZiAodXJiLT5zdGF0dXMgIT0gMCkgeworCXByaW50aygiemZMbnhVc2JEYXRhSW5fY2FsbGJhY2soKSA6IHN0YXR1cz0weCV4XG4iLCB1cmItPnN0YXR1cyk7CisJaWYgKCh1cmItPnN0YXR1cyAhPSAtRU5PRU5UKSAmJiAodXJiLT5zdGF0dXMgIT0gLUVDT05OUkVTRVQpCisJCSYmICh1cmItPnN0YXR1cyAhPSAtRVNIVVRET1dOKSkgeworCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVQSVBFKSB7CisJCQkvKnByaW50ayhLRVJOX0VSUiAibm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAtRVBJUEUiKTsqLworCQkJc3RhdHVzID0gLTE7CisJCX0KIAotICAgICAgICAgICAgICAgIGlmICh1cmItPnN0YXR1cyA9PSAtRVBST1RPKXsKLSAgICAgICAgICAgICAgICAgICAgLy9wcmludGsoS0VSTl9FUlIgIm5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogLUVQUk9UTyIpOwotICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAtMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkJaWYgKHVyYi0+c3RhdHVzID09IC1FUFJPVE8pIHsKKwkJCS8qcHJpbnRrKEtFUk5fRVJSICJub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6IC1FUFJPVE8iKTsqLworCQkJc3RhdHVzID0gLTE7CisJCX0KKwl9CiAKLSAgICAgICAgLy9wcmludGsoS0VSTl9FUlIgInVyYi0+c3RhdHVzOiAweCUwOHhcbiIsIHVyYi0+c3RhdHVzKTsKKwkvKnByaW50ayhLRVJOX0VSUiAidXJiLT5zdGF0dXM6IDB4JTA4eFxuIiwgdXJiLT5zdGF0dXMpOyovCiAKLSAgICAgICAgLyogRGVxdWV1ZSBza2IgYnVmZmVyICovCi0gICAgICAgIGJ1ZiA9IHpmTG54R2V0VXNiUnhCdWZmZXIoZGV2KTsKLSAgICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoYnVmKTsKLSAgICAgICAgI2lmIDAKLSAgICAgICAgLyogRW5xdWV1ZSBza2IgYnVmZmVyICovCi0gICAgICAgIHpmTG54UHV0VXNiUnhCdWZmZXIoZGV2LCBidWYpOworCS8qIERlcXVldWUgc2tiIGJ1ZmZlciAqLworCWJ1ZiA9IHpmTG54R2V0VXNiUnhCdWZmZXIoZGV2KTsKKwlkZXZfa2ZyZWVfc2tiX2FueShidWYpOworCSNpZiAwCisJLyogRW5xdWV1ZSBza2IgYnVmZmVyICovCisJemZMbnhQdXRVc2JSeEJ1ZmZlcihkZXYsIGJ1Zik7CiAKLSAgICAgICAgLyogU3VibWl0IGEgUnggdXJiICovCi0gICAgICAgIHpmTG54VXNiSW4oZGV2LCB1cmIsIGJ1Zik7Ci0gICAgICAgICNlbmRpZgotICAgICAgICByZXR1cm47Ci0gICAgfQorCS8qIFN1Ym1pdCBhIFJ4IHVyYiAqLworCXpmTG54VXNiSW4oZGV2LCB1cmIsIGJ1Zik7CisJI2VuZGlmCisJcmV0dXJuOworCX0KIAotICAgIGlmICh1cmItPmFjdHVhbF9sZW5ndGggPT0gMCkKLSAgICB7Ci0gICAgICAgIHByaW50ayhLRVJOX0VSUiAiR2V0IGFuIFVSQiB3aG9zZSBsZW5ndGggaXMgemVybyIpOwotICAgICAgICBzdGF0dXMgPSAtMTsKKyAgICBpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID09IDApIHsKKwlwcmludGsoS0VSTl9FUlIgIkdldCBhbiBVUkIgd2hvc2UgbGVuZ3RoIGlzIHplcm8iKTsKKwlzdGF0dXMgPSAtMTsKICAgICB9CiAKICAgICAvKiBEZXF1ZXVlIHNrYiBidWZmZXIgKi8KICAgICBidWYgPSB6ZkxueEdldFVzYlJ4QnVmZmVyKGRldik7CiAKLSAgICAvL3pmd0J1ZlNldFNpemUoZGV2LCBidWYsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisgICAgLyp6ZndCdWZTZXRTaXplKGRldiwgYnVmLCB1cmItPmFjdHVhbF9sZW5ndGgpOyovCiAjaWZkZWYgTkVUX1NLQlVGRl9EQVRBX1VTRVNfT0ZGU0VUCiAgICAgYnVmLT50YWlsID0gMDsKICAgICBidWYtPmxlbiA9IDA7CkBAIC0zNTMsMTM0ICszMzAsMTIyIEBACiAgICAgc2tiX3B1dChidWYsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAKICNpZiBaTV9VU0JfU1RSRUFNX01PREUgPT0gMQotICAgIGlmIChyZW1haW5fbGVuICE9IDApCi0gICAgewotICAgICAgICB6YnVmX3QgKnJlbWFpbl9idWYgPSBtYWNwLT5yZWFtaW5fYnVmOworICAgIGlmIChyZW1haW5fbGVuICE9IDApIHsKKwl6YnVmX3QgKnJlbWFpbl9idWYgPSBtYWNwLT5yZWFtaW5fYnVmOwogCi0gICAgICAgIGluZGV4ID0gcmVtYWluX2xlbjsKLSAgICAgICAgcmVtYWluX2xlbiAtPSBjaGVja19wYWQ7CisJaW5kZXggPSByZW1haW5fbGVuOworCXJlbWFpbl9sZW4gLT0gY2hlY2tfcGFkOwogCi0gICAgICAgIC8qICBDb3B5IGRhdGEgKi8KLSAgICAgICAgbWVtY3B5KCYocmVtYWluX2J1Zi0+ZGF0YVtjaGVja19sZW5dKSwgYnVmLT5kYXRhLCByZW1haW5fbGVuKTsKLSAgICAgICAgY2hlY2tfbGVuICs9IHJlbWFpbl9sZW47Ci0gICAgICAgIHJlbWFpbl9sZW4gPSAwOworCS8qICBDb3B5IGRhdGEgKi8KKwltZW1jcHkoJihyZW1haW5fYnVmLT5kYXRhW2NoZWNrX2xlbl0pLCBidWYtPmRhdGEsIHJlbWFpbl9sZW4pOworCWNoZWNrX2xlbiArPSByZW1haW5fbGVuOworCXJlbWFpbl9sZW4gPSAwOwogCi0gICAgICAgIHJ4QnVmUG9vbFtyeEJ1ZlBvb2xJbmRleCsrXSA9IHJlbWFpbl9idWY7CisJcnhCdWZQb29sW3J4QnVmUG9vbEluZGV4KytdID0gcmVtYWluX2J1ZjsKICAgICB9CiAKLSAgICB3aGlsZShpbmRleCA8IHVyYi0+YWN0dWFsX2xlbmd0aCkKLSAgICB7Ci0gICAgICAgIHBrdF9sZW4gPSBidWYtPmRhdGFbaW5kZXhdICsgKGJ1Zi0+ZGF0YVtpbmRleCsxXSA8PCA4KTsKLSAgICAgICAgcGt0X3RhZyA9IGJ1Zi0+ZGF0YVtpbmRleCsyXSArIChidWYtPmRhdGFbaW5kZXgrM10gPDwgOCk7CisgICAgd2hpbGUgKGluZGV4IDwgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJcGt0X2xlbiA9IGJ1Zi0+ZGF0YVtpbmRleF0gKyAoYnVmLT5kYXRhW2luZGV4KzFdIDw8IDgpOworCXBrdF90YWcgPSBidWYtPmRhdGFbaW5kZXgrMl0gKyAoYnVmLT5kYXRhW2luZGV4KzNdIDw8IDgpOwogCi0gICAgICAgIGlmIChwa3RfdGFnID09IDB4NGUwMCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHBhZF9sZW47CisJaWYgKHBrdF90YWcgPT0gMHg0ZTAwKSB7CisJCWludCBwYWRfbGVuOwogCi0gICAgICAgICAgICAvL3ByaW50aygiR2V0IGEgcGFja2V0LCBpbmRleDogJWQsIHBrdF9sZW46IDB4JTA0eFxuIiwgaW5kZXgsIHBrdF9sZW4pOwotICAgICAgICAgICAgI2lmIDAKLSAgICAgICAgICAgIC8qIER1bXAgZGF0YSAqLwotICAgICAgICAgICAgZm9yIChpaSA9IGluZGV4OyBpaSA8IHBrdF9sZW4rNDspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKCIlMDJ4ICIsIChidWYtPmRhdGFbaWldICYgMHhmZikpOworCQkvKnByaW50aygiR2V0IGEgcGFja2V0LCBpbmRleDogJWQsIHBrdF9sZW46IDB4JTA0eFxuIiwgaW5kZXgsIHBrdF9sZW4pOyovCisJCSNpZiAwCisJCS8qIER1bXAgZGF0YSAqLworCQlmb3IgKGlpID0gaW5kZXg7IGlpIDwgcGt0X2xlbis0OykgeworCQkJcHJpbnRrKCIlMDJ4ICIsIChidWYtPmRhdGFbaWldICYgMHhmZikpOwogCi0gICAgICAgICAgICAgICAgaWYgKCgrK2lpICUgMTYpID09IDApCi0gICAgICAgICAgICAgICAgICAgIHByaW50aygiXG4iKTsKLSAgICAgICAgICAgIH0KKwkJCWlmICgoKytpaSAlIDE2KSA9PSAwKQorCQkJcHJpbnRrKCJcbiIpOworCQkJfQogCi0gICAgICAgICAgICBwcmludGsoIlxuIik7Ci0gICAgICAgICAgICAjZW5kaWYKKwkJCXByaW50aygiXG4iKTsKKwkJI2VuZGlmCiAKLSAgICAgICAgICAgIHBhZF9sZW4gPSA0IC0gKHBrdF9sZW4gJiAweDMpOworCQlwYWRfbGVuID0gNCAtIChwa3RfbGVuICYgMHgzKTsKIAotICAgICAgICAgICAgaWYocGFkX2xlbiA9PSA0KQotICAgICAgICAgICAgICAgIHBhZF9sZW4gPSAwOworCQlpZiAocGFkX2xlbiA9PSA0KQorCQlwYWRfbGVuID0gMDsKIAotICAgICAgICAgICAgY2hrX2lkeCA9IGluZGV4OwotICAgICAgICAgICAgaW5kZXggPSBpbmRleCArIDQgKyBwa3RfbGVuICsgcGFkX2xlbjsKKwkJY2hrX2lkeCA9IGluZGV4OworCQlpbmRleCA9IGluZGV4ICsgNCArIHBrdF9sZW4gKyBwYWRfbGVuOwogCi0gICAgICAgICAgICBpZiAoaW5kZXggPiBaTV9NQVhfUlhfQlVGRkVSX1NJWkUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVtYWluX2xlbiA9IGluZGV4IC0gWk1fTUFYX1JYX0JVRkZFUl9TSVpFOyAvLyAtIHBhZF9sZW47Ci0gICAgICAgICAgICAgICAgY2hlY2tfbGVuID0gWk1fTUFYX1JYX0JVRkZFUl9TSVpFIC0gY2hrX2lkeCAtIDQ7Ci0gICAgICAgICAgICAgICAgY2hlY2tfcGFkID0gcGFkX2xlbjsKKwkJaWYgKGluZGV4ID4gWk1fTUFYX1JYX0JVRkZFUl9TSVpFKSB7CisJCQlyZW1haW5fbGVuID0gaW5kZXggLSBaTV9NQVhfUlhfQlVGRkVSX1NJWkU7IC8qIC0gcGFkX2xlbjsqLworCQkJY2hlY2tfbGVuID0gWk1fTUFYX1JYX0JVRkZFUl9TSVpFIC0gY2hrX2lkeCAtIDQ7CisJCQljaGVja19wYWQgPSBwYWRfbGVuOwogCi0gICAgICAgICAgICAgICAgLyogQWxsb2NhdGUgYSBza2IgYnVmZmVyICovCi0gICAgICAgICAgICAgICAgLy9uZXdfYnVmID0gemZ3QnVmQWxsb2NhdGUoZGV2LCBaTV9NQVhfUlhfQlVGRkVSX1NJWkUpOwotICAgICAgICAgICAgICAgIG5ld19idWYgPSBkZXZfYWxsb2Nfc2tiKFpNX01BWF9SWF9CVUZGRVJfU0laRSk7CisJCQkvKiBBbGxvY2F0ZSBhIHNrYiBidWZmZXIgKi8KKwkJCS8qbmV3X2J1ZiA9IHpmd0J1ZkFsbG9jYXRlKGRldiwgWk1fTUFYX1JYX0JVRkZFUl9TSVpFKTsqLworCQkJbmV3X2J1ZiA9IGRldl9hbGxvY19za2IoWk1fTUFYX1JYX0JVRkZFUl9TSVpFKTsKIAotICAgICAgICAgICAgICAgIC8qIFNldCBza2IgYnVmZmVyIGxlbmd0aCAqLwotICAgICAgICAgICAgI2lmZGVmIE5FVF9TS0JVRkZfREFUQV9VU0VTX09GRlNFVAotICAgICAgICAgICAgICAgIG5ld19idWYtPnRhaWwgPSAwOwotICAgICAgICAgICAgICAgIG5ld19idWYtPmxlbiA9IDA7Ci0gICAgICAgICAgICAjZWxzZQotICAgICAgICAgICAgICAgIG5ld19idWYtPnRhaWwgPSBuZXdfYnVmLT5kYXRhOwotICAgICAgICAgICAgICAgIG5ld19idWYtPmxlbiA9IDA7Ci0gICAgICAgICAgICAjZW5kaWYKKwkJCS8qIFNldCBza2IgYnVmZmVyIGxlbmd0aCAqLworCQkJI2lmZGVmIE5FVF9TS0JVRkZfREFUQV9VU0VTX09GRlNFVAorCQkJbmV3X2J1Zi0+dGFpbCA9IDA7CisJCQluZXdfYnVmLT5sZW4gPSAwOworCQkJI2Vsc2UKKwkJCW5ld19idWYtPnRhaWwgPSBuZXdfYnVmLT5kYXRhOworCQkJbmV3X2J1Zi0+bGVuID0gMDsKKwkJCSNlbmRpZgogCi0gICAgICAgICAgICAgICAgc2tiX3B1dChuZXdfYnVmLCBwa3RfbGVuKTsKKwkJCXNrYl9wdXQobmV3X2J1ZiwgcGt0X2xlbik7CiAKLSAgICAgICAgICAgICAgICAvKiBDb3B5IHRoZSBidWZmZXIgKi8KLSAgICAgICAgICAgICAgICBtZW1jcHkobmV3X2J1Zi0+ZGF0YSwgJihidWYtPmRhdGFbY2hrX2lkeCs0XSksIGNoZWNrX2xlbik7CisJCQkvKiBDb3B5IHRoZSBidWZmZXIgKi8KKwkJCW1lbWNweShuZXdfYnVmLT5kYXRhLCAmKGJ1Zi0+ZGF0YVtjaGtfaWR4KzRdKSwgY2hlY2tfbGVuKTsKIAotICAgICAgICAgICAgICAgIC8qIFJlY29yZCB0aGUgYnVmZmVyIHBvaW50ZXIgKi8KLSAgICAgICAgICAgICAgICBtYWNwLT5yZWFtaW5fYnVmID0gbmV3X2J1ZjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgI2lmZGVmIFpNX0RPTlRfQ09QWV9SWF9CVUZGRVIKLSAgICAgICAgICAgICAgICBpZiAocnhCdWZQb29sSW5kZXggPT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG5ld19idWYgPSBza2JfY2xvbmUoYnVmLCBHRlBfQVRPTUlDKTsKKwkJCS8qIFJlY29yZCB0aGUgYnVmZmVyIHBvaW50ZXIgKi8KKwkJCW1hY3AtPnJlYW1pbl9idWYgPSBuZXdfYnVmOworCQl9IGVsc2UgIHsKKwkJCSNpZmRlZiBaTV9ET05UX0NPUFlfUlhfQlVGRkVSCisJCQlpZiAocnhCdWZQb29sSW5kZXggPT0gMCkgeworCQkJCW5ld19idWYgPSBza2JfY2xvbmUoYnVmLCBHRlBfQVRPTUlDKTsKIAotICAgICAgICAgICAgICAgICAgICBuZXdfYnVmLT5kYXRhID0gJihidWYtPmRhdGFbY2hrX2lkeCs0XSk7Ci0gICAgICAgICAgICAgICAgICAgIG5ld19idWYtPmxlbiA9IHBrdF9sZW47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICNlbmRpZgotICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIGEgc2tiIGJ1ZmZlciAqLwotICAgICAgICAgICAgICAgIG5ld19idWYgPSBkZXZfYWxsb2Nfc2tiKFpNX01BWF9SWF9CVUZGRVJfU0laRSk7CisJCQkJbmV3X2J1Zi0+ZGF0YSA9ICYoYnVmLT5kYXRhW2Noa19pZHgrNF0pOworCQkJCW5ld19idWYtPmxlbiA9IHBrdF9sZW47CisJCQl9IGVsc2UgIHsKKwkJCQkjZW5kaWYKKwkJCQkvKiBBbGxvY2F0ZSBhIHNrYiBidWZmZXIgKi8KKwkJCQluZXdfYnVmID0gZGV2X2FsbG9jX3NrYihaTV9NQVhfUlhfQlVGRkVSX1NJWkUpOwogCi0gICAgICAgICAgICAgICAgLyogU2V0IHNrYiBidWZmZXIgbGVuZ3RoICovCi0gICAgICAgICAgICAjaWZkZWYgTkVUX1NLQlVGRl9EQVRBX1VTRVNfT0ZGU0VUCi0gICAgICAgICAgICAgICAgbmV3X2J1Zi0+dGFpbCA9IDA7Ci0gICAgICAgICAgICAgICAgbmV3X2J1Zi0+bGVuID0gMDsKLSAgICAgICAgICAgICNlbHNlCi0gICAgICAgICAgICAgICAgbmV3X2J1Zi0+dGFpbCA9IG5ld19idWYtPmRhdGE7Ci0gICAgICAgICAgICAgICAgbmV3X2J1Zi0+bGVuID0gMDsKLSAgICAgICAgICAgICNlbmRpZgorCQkJCS8qIFNldCBza2IgYnVmZmVyIGxlbmd0aCAqLworCQkJCSNpZmRlZiBORVRfU0tCVUZGX0RBVEFfVVNFU19PRkZTRVQKKwkJCQluZXdfYnVmLT50YWlsID0gMDsKKwkJCQluZXdfYnVmLT5sZW4gPSAwOworCQkJCSNlbHNlCisJCQkJbmV3X2J1Zi0+dGFpbCA9IG5ld19idWYtPmRhdGE7CisJCQkJbmV3X2J1Zi0+bGVuID0gMDsKKwkJCQkjZW5kaWYKIAotICAgICAgICAgICAgICAgIHNrYl9wdXQobmV3X2J1ZiwgcGt0X2xlbik7CisJCQkJc2tiX3B1dChuZXdfYnVmLCBwa3RfbGVuKTsKIAotICAgICAgICAgICAgICAgIC8qIENvcHkgdGhlIGJ1ZmZlciAqLwotICAgICAgICAgICAgICAgIG1lbWNweShuZXdfYnVmLT5kYXRhLCAmKGJ1Zi0+ZGF0YVtjaGtfaWR4KzRdKSwgcGt0X2xlbik7CisJCQkJLyogQ29weSB0aGUgYnVmZmVyICovCisJCQkJbWVtY3B5KG5ld19idWYtPmRhdGEsICYoYnVmLT5kYXRhW2Noa19pZHgrNF0pLCBwa3RfbGVuKTsKIAotICAgICAgICAjaWZkZWYgWk1fRE9OVF9DT1BZX1JYX0JVRkZFUgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgI2VuZGlmCi0gICAgICAgICAgICAgICAgcnhCdWZQb29sW3J4QnVmUG9vbEluZGV4KytdID0gbmV3X2J1ZjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgZmluZCB0YWcsIHBrdF9sZW46IDB4JTA0eCwgdGFnOiAweCUwNHhcbiIsIHBrdF9sZW4sIHBrdF90YWcpOworCQkJCSNpZmRlZiBaTV9ET05UX0NPUFlfUlhfQlVGRkVSCisJCQkJfQorCQkJI2VuZGlmCisJCQlyeEJ1ZlBvb2xbcnhCdWZQb29sSW5kZXgrK10gPSBuZXdfYnVmOworCQkJfQorCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBmaW5kIHRhZywgcGt0X2xlbjogMHglMDR4LCB0YWc6IDB4JTA0eFxuIiwgcGt0X2xlbiwgcGt0X3RhZyk7CiAKLSAgICAgICAgICAgIC8qIEZyZWUgYnVmZmVyICovCi0gICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShidWYpOworCQkJLyogRnJlZSBidWZmZXIgKi8KKwkJCWRldl9rZnJlZV9za2JfYW55KGJ1Zik7CiAKLSAgICAgICAgICAgIC8qIEFsbG9jYXRlIGEgc2tiIGJ1ZmZlciAqLwotICAgICAgICAgICAgbmV3X2J1ZiA9IGRldl9hbGxvY19za2IoWk1fTUFYX1JYX0JVRkZFUl9TSVpFKTsKKwkJCS8qIEFsbG9jYXRlIGEgc2tiIGJ1ZmZlciAqLworCQkJbmV3X2J1ZiA9IGRldl9hbGxvY19za2IoWk1fTUFYX1JYX0JVRkZFUl9TSVpFKTsKIAotICAgICAgICAgICAgLyogRW5xdWV1ZSBza2IgYnVmZmVyICovCi0gICAgICAgICAgICB6ZkxueFB1dFVzYlJ4QnVmZmVyKGRldiwgbmV3X2J1Zik7CisJCQkvKiBFbnF1ZXVlIHNrYiBidWZmZXIgKi8KKwkJCXpmTG54UHV0VXNiUnhCdWZmZXIoZGV2LCBuZXdfYnVmKTsKIAotICAgICAgICAgICAgLyogU3VibWl0IGEgUnggdXJiICovCi0gICAgICAgICAgICB6ZkxueFVzYkluKGRldiwgdXJiLCBuZXdfYnVmKTsKKwkJCS8qIFN1Ym1pdCBhIFJ4IHVyYiAqLworCQkJemZMbnhVc2JJbihkZXYsIHVyYiwgbmV3X2J1Zik7CiAKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKwkJCXJldHVybjsKKwkJCX0KKwkJfQogCiAgICAgLyogRnJlZSBidWZmZXIgKi8KICAgICBkZXZfa2ZyZWVfc2tiX2FueShidWYpOwpAQCAtNDk2LDkgKzQ2MSw4IEBACiAgICAgemZMbnhVc2JJbihkZXYsIHVyYiwgbmV3X2J1Zik7CiAKICNpZiBaTV9VU0JfU1RSRUFNX01PREUgPT0gMQotICAgIGZvcihpaSA9IDA7IGlpIDwgcnhCdWZQb29sSW5kZXg7IGlpKyspCi0gICAgewotICAgICAgICBtYWNwLT51c2JDYkZ1bmN0aW9ucy56ZmNiVXNiUmVjdihkZXYsIHJ4QnVmUG9vbFtpaV0pOworICAgIGZvciAoaWkgPSAwOyBpaSA8IHJ4QnVmUG9vbEluZGV4OyBpaSsrKSB7CisJbWFjcC0+dXNiQ2JGdW5jdGlvbnMuemZjYlVzYlJlY3YoZGV2LCByeEJ1ZlBvb2xbaWldKTsKICAgICB9CiAjZWxzZQogICAgIC8qIHBhc3MgZGF0YSB0byB1cHBlciBsYXllciAqLwpAQCAtNTA4LDUxICs0NzIsNDggQEAKIAogdm9pZCB6ZkxueFVzYlJlZ091dF9jYWxsYmFjayh1cmJfdCAqdXJiKQogewotICAgIC8vZGV2X3QqIGRldiA9IHVyYi0+Y29udGV4dDsKKyAgICAvKmRldl90KiBkZXYgPSB1cmItPmNvbnRleHQ7Ki8KIAotICAgIC8vcHJpbnRrKEtFUk5fRVJSICJ6ZndVc2JSZWdPdXRfY2FsbGJhY2tcbiIpOworCS8qcHJpbnRrKEtFUk5fRVJSICJ6ZndVc2JSZWdPdXRfY2FsbGJhY2tcbiIpOyovCiB9CiAKIHZvaWQgemZMbnhVc2JSZWdJbl9jYWxsYmFjayh1cmJfdCAqdXJiKQogewotICAgIHpkZXZfdCogZGV2ID0gdXJiLT5jb250ZXh0OworICAgIHpkZXZfdCAqZGV2ID0gdXJiLT5jb250ZXh0OwogICAgIHUzMl90IHJzcFs2NC80XTsKICAgICBpbnQgc3RhdHVzOwogICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKIAogICAgIC8qIENoZWNrIHN0YXR1cyBmb3IgVVJCICovCi0gICAgaWYgKHVyYi0+c3RhdHVzICE9IDApewotICAgICAgICBwcmludGsoInpmTG54VXNiUmVnSW5fY2FsbGJhY2soKSA6IHN0YXR1cz0weCV4XG4iLCB1cmItPnN0YXR1cyk7Ci0gICAgICAgIGlmICgodXJiLT5zdGF0dXMgIT0gLUVOT0VOVCkgJiYgKHVyYi0+c3RhdHVzICE9IC1FQ09OTlJFU0VUKQotICAgICAgICAgICAgJiYgKHVyYi0+c3RhdHVzICE9IC1FU0hVVERPV04pKQotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHVyYi0+c3RhdHVzID09IC1FUElQRSl7Ci0gICAgICAgICAgICAgICAgICAgIC8vcHJpbnRrKEtFUk5fRVJSICJub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6IC1FUElQRSIpOwotICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAtMTsKLSAgICAgICAgICAgICAgICB9CisgICAgaWYgKHVyYi0+c3RhdHVzICE9IDApIHsKKwlwcmludGsoInpmTG54VXNiUmVnSW5fY2FsbGJhY2soKSA6IHN0YXR1cz0weCV4XG4iLCB1cmItPnN0YXR1cyk7CisJaWYgKCh1cmItPnN0YXR1cyAhPSAtRU5PRU5UKSAmJiAodXJiLT5zdGF0dXMgIT0gLUVDT05OUkVTRVQpICYmICh1cmItPnN0YXR1cyAhPSAtRVNIVVRET1dOKSkgeworCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVQSVBFKSB7CisJCQkvKnByaW50ayhLRVJOX0VSUiAibm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAtRVBJUEUiKTsqLworCQkJc3RhdHVzID0gLTE7CisJCX0KIAotICAgICAgICAgICAgICAgIGlmICh1cmItPnN0YXR1cyA9PSAtRVBST1RPKXsKLSAgICAgICAgICAgICAgICAgICAgLy9wcmludGsoS0VSTl9FUlIgIm5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogLUVQUk9UTyIpOwotICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAtMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkJaWYgKHVyYi0+c3RhdHVzID09IC1FUFJPVE8pIHsKKwkJCS8qcHJpbnRrKEtFUk5fRVJSICJub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6IC1FUFJPVE8iKTsqLworCQkJc3RhdHVzID0gLTE7CisJCX0KKwl9CiAKLSAgICAgICAgLy9wcmludGsoS0VSTl9FUlIgInVyYi0+c3RhdHVzOiAweCUwOHhcbiIsIHVyYi0+c3RhdHVzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKwkvKnByaW50ayhLRVJOX0VSUiAidXJiLT5zdGF0dXM6IDB4JTA4eFxuIiwgdXJiLT5zdGF0dXMpOyovCisJcmV0dXJuOworCX0KIAotICAgIGlmICh1cmItPmFjdHVhbF9sZW5ndGggPT0gMCkKLSAgICB7Ci0gICAgICAgIHByaW50ayhLRVJOX0VSUiAiR2V0IGFuIFVSQiB3aG9zZSBsZW5ndGggaXMgemVybyIpOwotICAgICAgICBzdGF0dXMgPSAtMTsKKyAgICBpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID09IDApIHsKKwlwcmludGsoS0VSTl9FUlIgIkdldCBhbiBVUkIgd2hvc2UgbGVuZ3RoIGlzIHplcm8iKTsKKwlzdGF0dXMgPSAtMTsKICAgICB9CiAKICAgICAvKiBDb3B5IGRhdGEgaW50byByZXNwb25lIGJ1ZmZlciAqLwogICAgIG1lbWNweShyc3AsIG1hY3AtPnJlZ1VzYlJlYWRCdWYsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAKICAgICAvKiBOb3RpZnkgdG8gdXBwZXIgbGF5ZXIgKi8KLSAgICAvL3pmSWRsQ2hrUnNwKGRldiwgcnNwLCAodTE2X3QpdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLSAgICAvL3pmaVVzYlJlZ0luKGRldiwgcnNwLCAodTE2X3QpdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKyAgICAvKnpmSWRsQ2hrUnNwKGRldiwgcnNwLCAodTE2X3QpdXJiLT5hY3R1YWxfbGVuZ3RoKTsqLworICAgIC8qemZpVXNiUmVnSW4oZGV2LCByc3AsICh1MTZfdCl1cmItPmFjdHVhbF9sZW5ndGgpOyovCiAgICAgbWFjcC0+dXNiQ2JGdW5jdGlvbnMuemZjYlVzYlJlZ0luKGRldiwgcnNwLCAodTE2X3QpdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAogICAgIC8qIElzc3VlIGFub3RoZXIgVVNCIElOIFVSQiAqLwpAQCAtNTY0LDIyICs1MjUsMjIgQEAKICAgICB1MzJfdCByZXQ7CiAgICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwogCi0gICAgLyogU3VibWl0IGEgcnggdXJiICovCisgICAgLyogU3VibWl0IGEgcnggdXJiCiAgICAgLy9yZXQgPSB6ZkxueFVzYlN1Ym1pdEJ1bGtVcmIobWFjcC0+UmVnSW5VcmIsIG1hY3AtPnVkZXYsCiAgICAgLy8gICAgICAgIFVTQl9SRUdfSU5fUElQRSwgVVNCX0RJUl9JTiwgbWFjcC0+cmVnVXNiUmVhZEJ1ZiwKICAgICAvLyAgICAgICAgWk1fVVNCX1JFR19NQVhfQlVGX1NJWkUsIHpmTG54VXNiUmVnSW5fY2FsbGJhY2ssIGRldik7CiAgICAgLy9DV1lhbmcoLSkKICAgICAvL2lmIChyZXQgIT0gMCkKLSAgICAvLyAgICBwcmludGsoInpmd1VzYlN1Ym1pdEJ1bGtVcmIgZmFpbCwgc3RhdHVzOiAweCUwOHhcbiIsIChpbnQpcmV0KTsKKyAgICAvLyAgICBwcmludGsoInpmd1VzYlN1Ym1pdEJ1bGtVcmIgZmFpbCwgc3RhdHVzOiAweCUwOHhcbiIsIChpbnQpcmV0KTsqLwogCiAgICAgcmV0ID0gemZMbnhVc2JTdWJtaXRJbnRVcmIobWFjcC0+UmVnSW5VcmIsIG1hY3AtPnVkZXYsCi0gICAgICAgICAgICBVU0JfUkVHX0lOX1BJUEUsIFVTQl9ESVJfSU4sIG1hY3AtPnJlZ1VzYlJlYWRCdWYsCi0gICAgICAgICAgICBaTV9VU0JfUkVHX01BWF9CVUZfU0laRSwgemZMbnhVc2JSZWdJbl9jYWxsYmFjaywgZGV2LCAxKTsKKwlVU0JfUkVHX0lOX1BJUEUsIFVTQl9ESVJfSU4sIG1hY3AtPnJlZ1VzYlJlYWRCdWYsCisJWk1fVVNCX1JFR19NQVhfQlVGX1NJWkUsIHpmTG54VXNiUmVnSW5fY2FsbGJhY2ssIGRldiwgMSk7CiAKICAgICByZXR1cm4gcmV0OwogfQogCi11MzJfdCB6ZkxueFVzYlN1Ym1pdFR4RGF0YSh6ZGV2X3QqIGRldikKK3UzMl90IHpmTG54VXNiU3VibWl0VHhEYXRhKHpkZXZfdCAqZGV2KQogewogICAgIHUzMl90IGk7CiAgICAgdTMyX3QgcmV0OwpAQCAtNjAwLDM5ICs1NjEsMzMgQEAKICAgICBmcmVlVHhVcmIgPSB6ZkxueEdldEZyZWVUeFVyYihkZXYpOwogCiAgICAgLyogSWYgdGhlcmUgaXMgbm8gYW55IGZyZWUgVHggVXJiICovCi0gICAgaWYgKGZyZWVUeFVyYiA9PSAweGZmZmYpCi0gICAgewotICAgICAgICAvL3ByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgZ2V0IGZyZWUgVHggVXJiXG4iKTsKLSAgICAgICAgLy9wcmludGsoIkNXWSAtIENhbid0IGdldCBmcmVlIFR4IFVyYlxuIik7Ci0gICAgICAgIHJldHVybiAweGZmZmY7CisgICAgaWYgKGZyZWVUeFVyYiA9PSAweGZmZmYpIHsKKwkvKnByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgZ2V0IGZyZWUgVHggVXJiXG4iKTsKKwkvL3ByaW50aygiQ1dZIC0gQ2FuJ3QgZ2V0IGZyZWUgVHggVXJiXG4iKTsqLworCXJldHVybiAweGZmZmY7CiAgICAgfQogCiAjaWYgWk1fVVNCX1RYX1NUUkVBTV9NT0RFID09IDEKICAgICB1c2JUeEFnZ0NudCA9IHpmTG54Q2hlY2tUeEJ1ZmZlckNudChkZXYpOwogCi0gICAgaWYgKHVzYlR4QWdnQ250ID49IFpNX01BWF9UWF9BR0dSRUdBVEVfTlVNKQotICAgIHsKLSAgICAgICB1c2JUeEFnZ0NudCA9IFpNX01BWF9UWF9BR0dSRUdBVEVfTlVNOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgIHVzYlR4QWdnQ250ID0gMTsKKyAgICBpZiAodXNiVHhBZ2dDbnQgPj0gWk1fTUFYX1RYX0FHR1JFR0FURV9OVU0pIHsKKwl1c2JUeEFnZ0NudCA9IFpNX01BWF9UWF9BR0dSRUdBVEVfTlVNOworICAgIH0gZWxzZSB7CisJdXNiVHhBZ2dDbnQgPSAxOwogICAgIH0KIAotICAgIC8vcHJpbnRrKCJ1c2JUeEFnZ0NudDogJWRcbiIsIHVzYlR4QWdnQ250KTsKKyAgICAvKnByaW50aygidXNiVHhBZ2dDbnQ6ICVkXG4iLCB1c2JUeEFnZ0NudCk7Ki8KICNlbmRpZgogCiAjaWYgWk1fVVNCX1RYX1NUUkVBTV9NT0RFID09IDEKLSAgICBmb3IoaWkgPSAwOyBpaSA8IHVzYlR4QWdnQ250OyBpaSsrKQotICAgIHsKKyAgICBmb3IgKGlpID0gMDsgaWkgPCB1c2JUeEFnZ0NudDsgaWkrKykgewogI2VuZGlmCiAgICAgLyogRGVxdWV1ZSB0aGUgcGFja2V0IGZyb20gVXNiVHhCdWZRICovCiAgICAgVHhEYXRhID0gemZMbnhHZXRVc2JUeEJ1ZmZlcihkZXYpOwotICAgIGlmIChUeERhdGEgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIC8qIEdpdmUgdGhlIHVyYiBiYWNrICovCi0gICAgICAgIHpmTG54UHV0VHhVcmIoZGV2KTsKLSAgICAgICAgcmV0dXJuIDB4ZmZmZjsKKyAgICBpZiAoVHhEYXRhID09IE5VTEwpIHsKKwkvKiBHaXZlIHRoZSB1cmIgYmFjayAqLworCXpmTG54UHV0VHhVcmIoZGV2KTsKKwlyZXR1cm4gMHhmZmZmOwogICAgIH0KIAogICAgIC8qIFBvaW50IHRvIHRoZSBmcmVlVHhVcmIgYnVmZmVyICovCkBAIC02NDQsMTE0ICs1OTksMTAzIEBACiAKICAgICAvKiBBZGQgdGhlIHBhY2tldCBsZW5ndGggYW5kIHRhZyBpbmZvcm1hdGlvbiAqLwogICAgICpwVXNiVHhIZHIrKyA9IFR4RGF0YS0+aGRybGVuICsgVHhEYXRhLT5zbmFwTGVuICsKLSAgICAgICAgICAgICAoVHhEYXRhLT5idWYtPmxlbiAtIFR4RGF0YS0+b2Zmc2V0KSArICBUeERhdGEtPnRhaWxMZW47CisJKFR4RGF0YS0+YnVmLT5sZW4gLSBUeERhdGEtPm9mZnNldCkgKyAgVHhEYXRhLT50YWlsTGVuOwogCiAgICAgKnBVc2JUeEhkcisrID0gMHg2OTdlOwogCiAgICAgcHVUeEJ1ZiArPSA0OwotI2VuZGlmIC8vICNpZmRlZiBaTV9VU0JfVFhfU1RSRUFNX01PREUKKyNlbmRpZiAvKiAjaWZkZWYgWk1fVVNCX1RYX1NUUkVBTV9NT0RFKi8KIAogICAgIC8qIENvcHkgV0xBTiBoZWFkZXIgYW5kIHBhY2tldCBidWZmZXIgaW50byBVU0IgYnVmZmVyICovCi0gICAgZm9yKGkgPSAwOyBpIDwgVHhEYXRhLT5oZHJsZW47IGkrKykKLSAgICB7Ci0gICAgICAgICpwdVR4QnVmKysgPSBUeERhdGEtPmhkcltpXTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgVHhEYXRhLT5oZHJsZW47IGkrKykgeworCSpwdVR4QnVmKysgPSBUeERhdGEtPmhkcltpXTsKICAgICB9CiAKICAgICAvKiBDb3B5IFNOQVAgaGVhZGVyICovCi0gICAgZm9yKGkgPSAwOyBpIDwgVHhEYXRhLT5zbmFwTGVuOyBpKyspCi0gICAgewotICAgICAgICAqcHVUeEJ1ZisrID0gVHhEYXRhLT5zbmFwW2ldOworICAgIGZvciAoaSA9IDA7IGkgPCBUeERhdGEtPnNuYXBMZW47IGkrKykgeworCSpwdVR4QnVmKysgPSBUeERhdGEtPnNuYXBbaV07CiAgICAgfQogCiAgICAgLyogQ29weSBwYWNrZXQgYnVmZmVyICovCi0gICAgZm9yKGkgPSAwOyBpIDwgVHhEYXRhLT5idWYtPmxlbiAtIFR4RGF0YS0+b2Zmc2V0OyBpKyspCi0gICAgewotICAgIAkvLypwdVR4QnVmKysgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgVHhEYXRhLT5idWYsIGkpOwotICAgIAkqcHVUeEJ1ZisrID0gKih1OF90KikoKHU4X3QqKVR4RGF0YS0+YnVmLT5kYXRhK2krVHhEYXRhLT5vZmZzZXQpOworICAgIGZvciAoaSA9IDA7IGkgPCBUeERhdGEtPmJ1Zi0+bGVuIC0gVHhEYXRhLT5vZmZzZXQ7IGkrKykgeworCS8qcHVUeEJ1ZisrID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIFR4RGF0YS0+YnVmLCBpKTsqLworCSpwdVR4QnVmKysgPSAqKHU4X3QgKikoKHU4X3QgKilUeERhdGEtPmJ1Zi0+ZGF0YStpK1R4RGF0YS0+b2Zmc2V0KTsKICAgICB9CiAKICAgICAvKiBDb3B5IHRhaWwgKi8KLSAgICBmb3IoaSA9IDA7IGkgPCBUeERhdGEtPnRhaWxMZW47IGkrKykKLSAgICB7Ci0gICAgICAgICpwdVR4QnVmKysgPSBUeERhdGEtPnRhaWxbaV07CisgICAgZm9yIChpID0gMDsgaSA8IFR4RGF0YS0+dGFpbExlbjsgaSsrKSB7CisJKnB1VHhCdWYrKyA9IFR4RGF0YS0+dGFpbFtpXTsKICAgICB9CiAKICAgICBsZW4gPSBUeERhdGEtPmhkcmxlbitUeERhdGEtPnNuYXBMZW4rVHhEYXRhLT5idWYtPmxlbitUeERhdGEtPnRhaWxMZW4tVHhEYXRhLT5vZmZzZXQ7CiAKICAgICAjaWYgMAotICAgIGlmIChUeERhdGEtPmhkcmxlbiAhPSAwKQotICAgIHsKLSAgICAgICAgcHVUeEJ1ZiA9IG1hY3AtPnR4VXNiQnVmW2ZyZWVUeFVyYl07Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgcHJpbnRrKCIlMDJ4ICIsIHB1VHhCdWZbaV0pOwotICAgICAgICAgICAgaWYgKGkgJSAxNiA9PSAxNSkKLSAgICAgICAgICAgICAgICBwcmludGsoIlxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnRrKCJcbiIpOwotICAgIH0KKyAgICBpZiAoVHhEYXRhLT5oZHJsZW4gIT0gMCkgeworCXB1VHhCdWYgPSBtYWNwLT50eFVzYkJ1ZltmcmVlVHhVcmJdOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlwcmludGsoIiUwMnggIiwgcHVUeEJ1ZltpXSk7CisJCWlmIChpICUgMTYgPT0gMTUpCisJCXByaW50aygiXG4iKTsKKwkJfQorCQlwcmludGsoIlxuIik7CisJfQogICAgICNlbmRpZgogICAgICNpZiAwCiAgICAgLyogRm9yIGRlYnVnIHB1cnBvc2UgKi8KLSAgICBpZihUeERhdGEtPmhkcls5XSAmIDB4NDApCi0gICAgewotICAgICAgICBpbnQgaTsKLSAgICAgICAgdTE2X3QgY3RybExlbiA9IFR4RGF0YS0+aGRyWzBdICsgKFR4RGF0YS0+aGRyWzFdIDw8IDgpOworICAgIGlmIChUeERhdGEtPmhkcls5XSAmIDB4NDApIHsKKwlpbnQgaTsKKwl1MTZfdCBjdHJsTGVuID0gVHhEYXRhLT5oZHJbMF0gKyAoVHhEYXRhLT5oZHJbMV0gPDwgOCk7CiAKLSAgICAgICAgaWYgKGN0cmxMZW4gIT0gbGVuICsgNCkKLSAgICAgICAgewotICAgICAgICAvKiBEdW1wIGNvbnRyb2wgc2V0dGluZyAqLwotICAgICAgICBmb3IoaSA9IDA7IGkgPCA4OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiMHglMDJ4ICIsIFR4RGF0YS0+aGRyW2ldKTsKLSAgICAgICAgfQotICAgICAgICBwcmludGsoS0VSTl9FUlIgIlxuIik7CisJaWYgKGN0cmxMZW4gIT0gbGVuICsgNCkgeworCS8qIER1bXAgY29udHJvbCBzZXR0aW5nICovCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlwcmludGsoS0VSTl9FUlIgIjB4JTAyeCAiLCBUeERhdGEtPmhkcltpXSk7CisJfQorCXByaW50ayhLRVJOX0VSUiAiXG4iKTsKIAotICAgICAgICBwcmludGsoS0VSTl9FUlIgImN0ckxlbjogJWQsIGhkckxlbjogJWQsIHNuYXBMZW46ICVkXG4iLCBjdHJsTGVuLCBUeERhdGEtPmhkcmxlbiwgVHhEYXRhLT5zbmFwTGVuKTsKLSAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJidWZMZW46ICVkLCB0YWlsTGVuOiAlZCwgbGVuOiAlZFxuIiwgVHhEYXRhLT5idWYtPmxlbiwgVHhEYXRhLT50YWlsTGVuLCBsZW4pOwotICAgICAgICB9CisJcHJpbnRrKEtFUk5fRVJSICJjdHJMZW46ICVkLCBoZHJMZW46ICVkLCBzbmFwTGVuOiAlZFxuIiwgY3RybExlbiwgVHhEYXRhLT5oZHJsZW4sIFR4RGF0YS0+c25hcExlbik7CisJcHJpbnRrKEtFUk5fRVJSICJidWZMZW46ICVkLCB0YWlsTGVuOiAlZCwgbGVuOiAlZFxuIiwgVHhEYXRhLT5idWYtPmxlbiwgVHhEYXRhLT50YWlsTGVuLCBsZW4pOworCX0KICAgICB9CiAgICAgI2VuZGlmCiAKICNpZiBaTV9VU0JfVFhfU1RSRUFNX01PREUgPT0gMQotICAgIC8vIEFkZCB0aGUgTGVuZ3RoIGFuZCBUYWcKKyAgICAvKiBBZGQgdGhlIExlbmd0aCBhbmQgVGFnKi8KICAgICBsZW4gKz0gNDsKIAotICAgIC8vcHJpbnRrKCIlZCBwYWNrZXQsIGxlbmd0aDogJWRcbiIsIGlpKzEsIGxlbik7CisgICAgLypwcmludGsoIiVkIHBhY2tldCwgbGVuZ3RoOiAlZFxuIiwgaWkrMSwgbGVuKTsqLwogCi0gICAgaWYgKGlpIDwgKFpNX01BWF9UWF9BR0dSRUdBVEVfTlVNLTEpKQotICAgIHsKLSAgICAgICAgLyogUGFkIHRoZSBidWZmZXIgdG8gZmlybXdhcmUgZGVzY3JpcHRvciBib3VuZGFyeSAqLwotICAgICAgICBvZmZzZXQgKz0gKCgobGVuLTEpIC8gNCkgKyAxKSAqIDQ7CisgICAgaWYgKGlpIDwgKFpNX01BWF9UWF9BR0dSRUdBVEVfTlVNLTEpKSB7CisJLyogUGFkIHRoZSBidWZmZXIgdG8gZmlybXdhcmUgZGVzY3JpcHRvciBib3VuZGFyeSAqLworCW9mZnNldCArPSAoKChsZW4tMSkgLyA0KSArIDEpICogNDsKICAgICB9CiAKLSAgICBpZiAoaWkgPT0gKFpNX01BWF9UWF9BR0dSRUdBVEVfTlVNLTEpKQotICAgIHsKLSAgICAgICAgbGVuICs9IG9mZnNldDsKKyAgICBpZiAoaWkgPT0gKFpNX01BWF9UWF9BR0dSRUdBVEVfTlVNLTEpKSB7CisJbGVuICs9IG9mZnNldDsKICAgICB9CiAKICAgICBUeFFQb29sW2lpXSA9IFR4RGF0YTsKIAotICAgIC8vRGJnUHJpbnQoIiVkIHBhY2tldCwgb2Zmc2V0OiAlZFxuIiwgaWkrMSwgcFVzYlR4VHJhbnNmZXItPm9mZnNldCk7CisgICAgLypEYmdQcmludCgiJWQgcGFja2V0LCBvZmZzZXQ6ICVkXG4iLCBpaSsxLCBwVXNiVHhUcmFuc2Zlci0+b2Zmc2V0KTsqLwogCiAgICAgLyogZnJlZSBwYWNrZXQgKi8KLSAgICAvL3pmQnVmRnJlZShkZXYsIHR4RGF0YS0+YnVmKTsKKyAgICAvKnpmQnVmRnJlZShkZXYsIHR4RGF0YS0+YnVmKTsqLwogICAgIH0KICNlbmRpZgotICAgIC8vcHJpbnRrKCJDV1kgLSBjYWxsIHpmd1VzYlN1Ym1pdEJ1bGtVcmIoKSwgbGVuID0gMHglZFxuIiwgbGVuKTsKKyAgICAvKnByaW50aygiQ1dZIC0gY2FsbCB6ZndVc2JTdWJtaXRCdWxrVXJiKCksIGxlbiA9IDB4JWRcbiIsIGxlbik7Ki8KICAgICAvKiBTdWJtaXQgYSB0eCB1cmIgKi8KICAgICByZXQgPSB6ZkxueFVzYlN1Ym1pdEJ1bGtVcmIobWFjcC0+V2xhblR4RGF0YVVyYltmcmVlVHhVcmJdLCBtYWNwLT51ZGV2LAotICAgICAgICAgICAgVVNCX1dMQU5fVFhfUElQRSwgVVNCX0RJUl9PVVQsIG1hY3AtPnR4VXNiQnVmW2ZyZWVUeFVyYl0sCi0gICAgICAgICAgICBsZW4sIHpmTG54VXNiRGF0YU91dF9jYWxsYmFjaywgZGV2KTsKLSAgICAvL0NXWWFuZygtKQorCVVTQl9XTEFOX1RYX1BJUEUsIFVTQl9ESVJfT1VULCBtYWNwLT50eFVzYkJ1ZltmcmVlVHhVcmJdLAorCWxlbiwgemZMbnhVc2JEYXRhT3V0X2NhbGxiYWNrLCBkZXYpOworICAgIC8qQ1dZYW5nKC0pCiAgICAgLy9pZiAocmV0ICE9IDApCi0gICAgLy8gICAgcHJpbnRrKCJ6ZndVc2JTdWJtaXRCdWxrVXJiIGZhaWwsIHN0YXR1czogMHglMDh4XG4iLCAoaW50KXJldCk7CisgICAgLy8gICAgcHJpbnRrKCJ6ZndVc2JTdWJtaXRCdWxrVXJiIGZhaWwsIHN0YXR1czogMHglMDh4XG4iLCAoaW50KXJldCk7Ki8KIAogICAgIC8qIGZyZWUgcGFja2V0ICovCi0gICAgLy9kZXZfa2ZyZWVfc2tiX2FueShUeERhdGEtPmJ1Zik7CisgICAgLypkZXZfa2ZyZWVfc2tiX2FueShUeERhdGEtPmJ1Zik7Ki8KICNpZiBaTV9VU0JfVFhfU1RSRUFNX01PREUgPT0gMQotICAgIGZvcihpaSA9IDA7IGlpIDwgdXNiVHhBZ2dDbnQ7IGlpKyspCi0gICAgICAgIG1hY3AtPnVzYkNiRnVuY3Rpb25zLnpmY2JVc2JPdXRDb21wbGV0ZShkZXYsIFR4UVBvb2xbaWldLT5idWYsIDEsIFR4UVBvb2xbaWldLT5oZHIpOworICAgIGZvciAoaWkgPSAwOyBpaSA8IHVzYlR4QWdnQ250OyBpaSsrKQorCW1hY3AtPnVzYkNiRnVuY3Rpb25zLnpmY2JVc2JPdXRDb21wbGV0ZShkZXYsIFR4UVBvb2xbaWldLT5idWYsIDEsIFR4UVBvb2xbaWldLT5oZHIpOwogI2Vsc2UKICAgICBtYWNwLT51c2JDYkZ1bmN0aW9ucy56ZmNiVXNiT3V0Q29tcGxldGUoZGV2LCBUeERhdGEtPmJ1ZiwgMSwgVHhEYXRhLT5oZHIpOwogI2VuZGlmCkBAIC03NjEsMjMgKzcwNSwyMyBAQAogCiAKIAotdTMyX3QgemZMbnhVc2JJbih6ZGV2X3QqIGRldiwgdXJiX3QgKnVyYiwgemJ1Zl90ICpidWYpCit1MzJfdCB6ZkxueFVzYkluKHpkZXZfdCAqZGV2LCB1cmJfdCAqdXJiLCB6YnVmX3QgKmJ1ZikKIHsKICAgICB1MzJfdCByZXQ7CiAgICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwogCiAgICAgLyogU3VibWl0IGEgcnggdXJiICovCiAgICAgcmV0ID0gemZMbnhVc2JTdWJtaXRCdWxrVXJiKHVyYiwgbWFjcC0+dWRldiwgVVNCX1dMQU5fUlhfUElQRSwKLSAgICAgICAgICAgIFVTQl9ESVJfSU4sIGJ1Zi0+ZGF0YSwgWk1fTUFYX1JYX0JVRkZFUl9TSVpFLAotICAgICAgICAgICAgemZMbnhVc2JEYXRhSW5fY2FsbGJhY2ssIGRldik7Ci0gICAgLy9DV1lhbmcoLSkKKwlVU0JfRElSX0lOLCBidWYtPmRhdGEsIFpNX01BWF9SWF9CVUZGRVJfU0laRSwKKwl6ZkxueFVzYkRhdGFJbl9jYWxsYmFjaywgZGV2KTsKKyAgICAvKkNXWWFuZygtKQogICAgIC8vaWYgKHJldCAhPSAwKQotICAgIC8vICAgIHByaW50aygiemZ3VXNiU3VibWl0QnVsa1VyYiBmYWlsLCBzdGF0dXM6IDB4JTA4eFxuIiwgKGludClyZXQpOworICAgIC8vICAgIHByaW50aygiemZ3VXNiU3VibWl0QnVsa1VyYiBmYWlsLCBzdGF0dXM6IDB4JTA4eFxuIiwgKGludClyZXQpOyovCiAKICAgICByZXR1cm4gcmV0OwogfQogCi11MzJfdCB6ZkxueFVzYldyaXRlUmVnKHpkZXZfdCogZGV2LCB1MzJfdCogY21kLCB1MTZfdCBjbWRMZW4pCit1MzJfdCB6ZkxueFVzYldyaXRlUmVnKHpkZXZfdCAqZGV2LCB1MzJfdCAqY21kLCB1MTZfdCBjbWRMZW4pCiB7CiAgICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwogICAgIHUzMl90IHJldDsKQEAgLTc4NSw3ICs3MjksNyBAQAogI2lmZGVmIFpNX0NPTkZJR19CSUdfRU5ESUFOCiAgICAgaW50IGlpID0gMDsKIAotICAgIGZvcihpaT0wOyBpaTwoY21kTGVuPj4yKTsgaWkrKykKKyAgICBmb3IgKGlpID0gMDsgaWkgPCAoY21kTGVuPj4yKTsgaWkrKykKIAljbWRbaWldID0gY3B1X3RvX2xlMzIoY21kW2lpXSk7CiAjZW5kaWYKIApAQCAtNzk0LDM5ICs3MzgsMzggQEAKICAgICAvKiBJc3N1ZSBhbiBVU0IgT3V0IHRyYW5zZmVyICovCiAgICAgLyogU3VibWl0IGEgdHggdXJiICovCiAgICAgcmV0ID0gemZMbnhVc2JTdWJtaXRJbnRVcmIobWFjcC0+UmVnT3V0VXJiLCBtYWNwLT51ZGV2LAotICAgICAgICAgICAgVVNCX1JFR19PVVRfUElQRSwgVVNCX0RJUl9PVVQsIG1hY3AtPnJlZ1VzYldyaXRlQnVmLAotICAgICAgICAgICAgY21kTGVuLCB6ZkxueFVzYlJlZ091dF9jYWxsYmFjaywgZGV2LCAxKTsKKwlVU0JfUkVHX09VVF9QSVBFLCBVU0JfRElSX09VVCwgbWFjcC0+cmVnVXNiV3JpdGVCdWYsCisJY21kTGVuLCB6ZkxueFVzYlJlZ091dF9jYWxsYmFjaywgZGV2LCAxKTsKIAogICAgIHJldHVybiByZXQ7CiB9CiAKIAotdTMyX3QgemZMbnhVc2JPdXQoemRldl90KiBkZXYsIHU4X3QgKmhkciwgdTE2X3QgaGRybGVuLCB1OF90ICpzbmFwLCB1MTZfdCBzbmFwTGVuLAotICAgICAgICB1OF90ICp0YWlsLCB1MTZfdCB0YWlsTGVuLCB6YnVmX3QgKmJ1ZiwgdTE2X3Qgb2Zmc2V0KQordTMyX3QgemZMbnhVc2JPdXQoemRldl90ICpkZXYsIHU4X3QgKmhkciwgdTE2X3QgaGRybGVuLCB1OF90ICpzbmFwLCB1MTZfdCBzbmFwTGVuLAorCXU4X3QgKnRhaWwsIHUxNl90IHRhaWxMZW4sIHpidWZfdCAqYnVmLCB1MTZfdCBvZmZzZXQpCiB7CiAgICAgdTMyX3QgcmV0OwogICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKIAogICAgIC8qIENoZWNrIGxlbmd0aCBvZiB0YWlsIGJ1ZmZlciAqLwotICAgIC8vem1fYXNzZXJ0KCh0YWlsTGVuIDw9IDE2KSk7CisgICAgLyp6bV9hc3NlcnQoKHRhaWxMZW4gPD0gMTYpKTsqLwogCiAgICAgLyogRW5xdWV1ZSB0aGUgcGFja2V0IGludG8gVXNiVHhCdWZRICovCi0gICAgaWYgKHpmTG54UHV0VXNiVHhCdWZmZXIoZGV2LCBoZHIsIGhkcmxlbiwgc25hcCwgc25hcExlbiwgdGFpbCwgdGFpbExlbiwgYnVmLCBvZmZzZXQpID09IDB4ZmZmZikKLSAgICB7Ci0gICAgICAgIC8qIGZyZWUgcGFja2V0ICovCi0gICAgICAgIC8vcHJpbnRrKCJDV1kgLSB6ZndQdXRVc2JUeEJ1ZmZlciBFcnJvciwgZnJlZSBwYWNrZXRcbiIpOwotICAgICAgICAvL2Rldl9rZnJlZV9za2JfYW55KGJ1Zik7Ci0gICAgICAgIG1hY3AtPnVzYkNiRnVuY3Rpb25zLnpmY2JVc2JPdXRDb21wbGV0ZShkZXYsIGJ1ZiwgMCwgaGRyKTsKLSAgICAgICAgcmV0dXJuIDB4ZmZmZjsKLSAgICB9CisgICAgaWYgKHpmTG54UHV0VXNiVHhCdWZmZXIoZGV2LCBoZHIsIGhkcmxlbiwgc25hcCwgc25hcExlbiwgdGFpbCwgdGFpbExlbiwgYnVmLCBvZmZzZXQpID09IDB4ZmZmZikgeworCS8qIGZyZWUgcGFja2V0ICovCisJLypwcmludGsoIkNXWSAtIHpmd1B1dFVzYlR4QnVmZmVyIEVycm9yLCBmcmVlIHBhY2tldFxuIik7CisJLy9kZXZfa2ZyZWVfc2tiX2FueShidWYpOyovCisJbWFjcC0+dXNiQ2JGdW5jdGlvbnMuemZjYlVzYk91dENvbXBsZXRlKGRldiwgYnVmLCAwLCBoZHIpOworCXJldHVybiAweGZmZmY7CisJfQogCi0gICAgLy9yZXR1cm4gMDsKLSAgICAvL3ByaW50aygiQ1dZIC0gY2FsbCB6ZndVc2JTdWJtaXRUeERhdGEoKVxuIik7CisgICAgLypyZXR1cm4gMDsKKyAgICAvL3ByaW50aygiQ1dZIC0gY2FsbCB6ZndVc2JTdWJtaXRUeERhdGEoKVxuIik7Ki8KICAgICByZXQgPSB6ZkxueFVzYlN1Ym1pdFR4RGF0YShkZXYpOwogICAgIHJldHVybiByZXQ7CiB9CiAKLXZvaWQgemZMbnhJbml0VXNiVHhRKHpkZXZfdCogZGV2KQordm9pZCB6ZkxueEluaXRVc2JUeFEoemRldl90ICpkZXYpCiB7CiAgICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwogCkBAIC04NDIsNyArNzg1LDcgQEAKICAgICBtYWNwLT5UeFVyYkNudCA9IFpNX01BWF9UWF9VUkJfTlVNOwogfQogCi12b2lkIHpmTG54SW5pdFVzYlJ4USh6ZGV2X3QqIGRldikKK3ZvaWQgemZMbnhJbml0VXNiUnhRKHpkZXZfdCAqZGV2KQogewogICAgIHUxNl90IGk7CiAgICAgemJ1Zl90ICpidWY7CkBAIC04NTMsNzYgKzc5Niw2NSBAQAogCiAgICAgbWFjcC0+UnhCdWZIZWFkID0gMDsKIAotICAgIGZvciAoaSA9IDA7IGkgPCBaTV9NQVhfUlhfVVJCX05VTTsgaSsrKQotICAgIHsKLSAgICAgICAgLy9idWYgPSB6ZndCdWZBbGxvY2F0ZShkZXYsIFpNX01BWF9SWF9CVUZGRVJfU0laRSk7Ci0gICAgICAgIGJ1ZiA9IGRldl9hbGxvY19za2IoWk1fTUFYX1JYX0JVRkZFUl9TSVpFKTsKLSAgICAgICAgbWFjcC0+VXNiUnhCdWZRW2ldID0gYnVmOwotICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgWk1fTUFYX1JYX1VSQl9OVU07IGkrKykgeworCS8qYnVmID0gemZ3QnVmQWxsb2NhdGUoZGV2LCBaTV9NQVhfUlhfQlVGRkVSX1NJWkUpOyovCisJYnVmID0gZGV2X2FsbG9jX3NrYihaTV9NQVhfUlhfQlVGRkVSX1NJWkUpOworCW1hY3AtPlVzYlJ4QnVmUVtpXSA9IGJ1ZjsKKwl9CiAKLSAgICAvL21hY3AtPlJ4QnVmVGFpbCA9IFpNX01BWF9SWF9VUkJfTlVNIC0gMTsKKyAgICAvKm1hY3AtPlJ4QnVmVGFpbCA9IFpNX01BWF9SWF9VUkJfTlVNIC0gMTsqLwogICAgIG1hY3AtPlJ4QnVmVGFpbCA9IDA7CiAKICAgICAvKiBTdWJtaXQgYWxsIFJ4IHVyYnMgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgWk1fTUFYX1JYX1VSQl9OVU07IGkrKykKLSAgICB7Ci0gICAgICAgIHpmTG54UHV0VXNiUnhCdWZmZXIoZGV2LCBtYWNwLT5Vc2JSeEJ1ZlFbaV0pOwotICAgICAgICB6ZkxueFVzYkluKGRldiwgbWFjcC0+V2xhblJ4RGF0YVVyYltpXSwgbWFjcC0+VXNiUnhCdWZRW2ldKTsKLSAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IFpNX01BWF9SWF9VUkJfTlVNOyBpKyspIHsKKwl6ZkxueFB1dFVzYlJ4QnVmZmVyKGRldiwgbWFjcC0+VXNiUnhCdWZRW2ldKTsKKwl6ZkxueFVzYkluKGRldiwgbWFjcC0+V2xhblJ4RGF0YVVyYltpXSwgbWFjcC0+VXNiUnhCdWZRW2ldKTsKKwl9CiB9CiAKIAogCiB1MzJfdCB6ZkxueFVzYlN1Ym1pdEJ1bGtVcmIodXJiX3QgKnVyYiwgc3RydWN0IHVzYl9kZXZpY2UgKnVzYiwgdTE2X3QgZXBudW0sIHUxNl90IGRpcmVjdGlvbiwKLSAgICAgICAgdm9pZCAqdHJhbnNmZXJfYnVmZmVyLCBpbnQgYnVmZmVyX2xlbmd0aCwgdXNiX2NvbXBsZXRlX3QgY29tcGxldGUsIHZvaWQgKmNvbnRleHQpCisJdm9pZCAqdHJhbnNmZXJfYnVmZmVyLCBpbnQgYnVmZmVyX2xlbmd0aCwgdXNiX2NvbXBsZXRlX3QgY29tcGxldGUsIHZvaWQgKmNvbnRleHQpCiB7CiAgICAgdTMyX3QgcmV0OwogCi0gICAgaWYoZGlyZWN0aW9uID09IFVTQl9ESVJfT1VUKQotICAgIHsKLSAgICAgICAgdXNiX2ZpbGxfYnVsa191cmIodXJiLCB1c2IsIHVzYl9zbmRidWxrcGlwZSh1c2IsIGVwbnVtKSwKLSAgICAgICAgICAgICAgICB0cmFuc2Zlcl9idWZmZXIsIGJ1ZmZlcl9sZW5ndGgsIGNvbXBsZXRlLCBjb250ZXh0KTsKKyAgICBpZiAoZGlyZWN0aW9uID09IFVTQl9ESVJfT1VUKSB7CisJdXNiX2ZpbGxfYnVsa191cmIodXJiLCB1c2IsIHVzYl9zbmRidWxrcGlwZSh1c2IsIGVwbnVtKSwKKwkJdHJhbnNmZXJfYnVmZmVyLCBidWZmZXJfbGVuZ3RoLCBjb21wbGV0ZSwgY29udGV4dCk7CiAKLSAgICAgICAgdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfWkVST19QQUNLRVQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHVzYl9maWxsX2J1bGtfdXJiKHVyYiwgdXNiLCB1c2JfcmN2YnVsa3BpcGUodXNiLCBlcG51bSksCi0gICAgICAgICAgICAgICAgdHJhbnNmZXJfYnVmZmVyLCBidWZmZXJfbGVuZ3RoLCBjb21wbGV0ZSwgY29udGV4dCk7CisJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfWkVST19QQUNLRVQ7CisgICAgfSBlbHNlIHsKKwl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHVzYiwgdXNiX3JjdmJ1bGtwaXBlKHVzYiwgZXBudW0pLAorCQl0cmFuc2Zlcl9idWZmZXIsIGJ1ZmZlcl9sZW5ndGgsIGNvbXBsZXRlLCBjb250ZXh0KTsKICAgICB9CiAKLSAgICBpZiAoZXBudW0gPT0gNCkKLSAgICB7Ci0gICAgICAgIGlmICh1cmItPmhjcHJpdikKLSAgICAgICAgewotICAgICAgICAgICAgLy9wcmludGsoIkNXWSAtIHVyYi0+aGNwcml2IHNldCBieSB1bmtub3duIHJlYXNvbiwgcmVzZXQgaXRcbiIpOwotICAgICAgICAgICAgLy91cmItPmhjcHJpdiA9IDA7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKGVwbnVtID09IDQpIHsKKwlpZiAodXJiLT5oY3ByaXYpIHsKKwkJLypwcmludGsoIkNXWSAtIHVyYi0+aGNwcml2IHNldCBieSB1bmtub3duIHJlYXNvbiwgcmVzZXQgaXRcbiIpOworCQkvL3VyYi0+aGNwcml2ID0gMDsqLworCQl9CisJfQogCiAgICAgcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLSAgICBpZiAoKGVwbnVtID09IDQpICYgKHJldCAhPSAwKSkKLSAgICB7Ci0gICAgICAgIC8vcHJpbnRrKCJDV1kgLSByZXQgPSAleFxuIiwgcmV0KTsKKyAgICBpZiAoKGVwbnVtID09IDQpICYgKHJldCAhPSAwKSkgeworCS8qcHJpbnRrKCJDV1kgLSByZXQgPSAleFxuIiwgcmV0KTsqLwogICAgIH0KICAgICByZXR1cm4gcmV0OwogfQogCiB1MzJfdCB6ZkxueFVzYlN1Ym1pdEludFVyYih1cmJfdCAqdXJiLCBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiLCB1MTZfdCBlcG51bSwgdTE2X3QgZGlyZWN0aW9uLAotICAgICAgICB2b2lkICp0cmFuc2Zlcl9idWZmZXIsIGludCBidWZmZXJfbGVuZ3RoLCB1c2JfY29tcGxldGVfdCBjb21wbGV0ZSwgdm9pZCAqY29udGV4dCwKLSAgICAgICAgdTMyX3QgaW50ZXJ2YWwpCisJdm9pZCAqdHJhbnNmZXJfYnVmZmVyLCBpbnQgYnVmZmVyX2xlbmd0aCwgdXNiX2NvbXBsZXRlX3QgY29tcGxldGUsIHZvaWQgKmNvbnRleHQsCisJdTMyX3QgaW50ZXJ2YWwpCiB7CiAgICAgdTMyX3QgcmV0OwogCi0gICAgaWYoZGlyZWN0aW9uID09IFVTQl9ESVJfT1VUKQotICAgIHsKLSAgICAgICAgdXNiX2ZpbGxfaW50X3VyYih1cmIsIHVzYiwgdXNiX3NuZGJ1bGtwaXBlKHVzYiwgZXBudW0pLAotICAgICAgICAgICAgICAgIHRyYW5zZmVyX2J1ZmZlciwgYnVmZmVyX2xlbmd0aCwgY29tcGxldGUsIGNvbnRleHQsIGludGVydmFsKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgdXNiX2ZpbGxfaW50X3VyYih1cmIsIHVzYiwgdXNiX3JjdmJ1bGtwaXBlKHVzYiwgZXBudW0pLAotICAgICAgICAgICAgICAgIHRyYW5zZmVyX2J1ZmZlciwgYnVmZmVyX2xlbmd0aCwgY29tcGxldGUsIGNvbnRleHQsIGludGVydmFsKTsKKyAgICBpZiAoZGlyZWN0aW9uID09IFVTQl9ESVJfT1VUKSB7CisJdXNiX2ZpbGxfaW50X3VyYih1cmIsIHVzYiwgdXNiX3NuZGJ1bGtwaXBlKHVzYiwgZXBudW0pLAorCQl0cmFuc2Zlcl9idWZmZXIsIGJ1ZmZlcl9sZW5ndGgsIGNvbXBsZXRlLCBjb250ZXh0LCBpbnRlcnZhbCk7CisgICAgfSBlbHNlIHsKKwl1c2JfZmlsbF9pbnRfdXJiKHVyYiwgdXNiLCB1c2JfcmN2YnVsa3BpcGUodXNiLCBlcG51bSksCisJdHJhbnNmZXJfYnVmZmVyLCBidWZmZXJfbGVuZ3RoLCBjb21wbGV0ZSwgY29udGV4dCwgaW50ZXJ2YWwpOwogICAgIH0KIAogICAgIHJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CkBAIC05NDYsNTEgKzg3OCw0OCBAQAogCXNpemUgPSBOTE1TR19TUEFDRShsZW4pOwogCXNrYiA9IGFsbG9jX3NrYihzaXplLCBHRlBfQVRPTUlDKTsKIAotCWlmKHNrYiA9PSBOVUxMKQotCXsKKwlpZiAoc2tiID09IE5VTEwpIHsKIAkJcHJpbnRrKCJkZXZfYWxsb2Nfc2tiIGZhaWx1cmUgXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCW9sZF90YWlsID0gc2tiLT50YWlsOwogCi0JLyrM7tC0yv2+3bGoz+C52NDFz6IqLworCS8qICovCiAJbmxoID0gTkxNU0dfUFVUKHNrYiwgMCwgMCwgV0FJX0tfTVNHLCBzaXplLXNpemVvZigqbmxoKSk7CiAJcG9zID0gTkxNU0dfREFUQShubGgpOwogCi0JLyq0q8rktb3Tw7unv9W85LXEyv2+3SovCisJLyogKi8KIAltZW1jcHkocG9zLCBtc2csICBsZW4pOwotCS8qvMbL476tuf3X1r3attTG5LrztcTK/b7dyrW8yrOktsgqLworCS8qICovCiAJbmxoLT5ubG1zZ19sZW4gPSBza2ItPnRhaWwgLSBvbGRfdGFpbDsKIAlORVRMSU5LX0NCKHNrYikuZHN0X2dyb3VwID0gQ09NTVRZUEVfR1JPVVA7CiAJbmV0bGlua19icm9hZGNhc3QobmV0bGlua19zaywgc2tiLCAwLCBDT01NVFlQRV9HUk9VUCwgR0ZQX0FUT01JQyk7CiAJcmV0ID0gMDsKIG91dDoKIAlyZXR1cm4gcmV0Owotbmxtc2dfZmFpbHVyZTogLypOTE1TR19QVVQgyqew3KOs1PKzt8/6zNe909fWu7q05iovCitubG1zZ19mYWlsdXJlOiAvKiAqLwogCWtmcmVlX3NrYihza2IpOwogCWdvdG8gb3V0OwogCiAjdW5kZWYgQ09NTVRZUEVfR1JPVVAKICN1bmRlZiBXQUlfS19NU0cKIH0KLSNlbmRpZiAvL1pNX0VOQUJMRV9DRU5DCisjZW5kaWYgLypaTV9FTkFCTEVfQ0VOQyovCiAKIC8qIFNpbXBseSByZXR1cm4gMHhmZmZmIGlmIFZBUCBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkICovCi11MTZfdCB6ZkxueEdldFZhcElkKHpkZXZfdCogZGV2KQordTE2X3QgemZMbnhHZXRWYXBJZCh6ZGV2X3QgKmRldikKIHsKICAgICB1MTZfdCBpOwogCi0gICAgZm9yIChpPTA7IGk8Wk1fVkFQX1BPUlRfTlVNQkVSOyBpKyspCi0gICAgewotICAgICAgICBpZiAodmFwW2ldLmRldiA9PSBkZXYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiAweGZmZmY7CisgICAgZm9yIChpID0gMDsgaSA8IFpNX1ZBUF9QT1JUX05VTUJFUjsgaSsrKSB7CisJaWYgKHZhcFtpXS5kZXYgPT0gZGV2KSB7CisJCXJldHVybiBpOworCQl9CisJfQorCXJldHVybiAweGZmZmY7CiB9CiAKLXUzMl90IHpmd1JlYWRSZWcoemRldl90KiBkZXYsIHUzMl90IG9mZnNldCkKK3UzMl90IHpmd1JlYWRSZWcoemRldl90ICpkZXYsIHUzMl90IG9mZnNldCkKIHsKICAgICByZXR1cm4gMDsKIH0KQEAgLTEwMTIsMjUgKzk0MSwyMyBAQAogdm9pZCBrZXZlbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9Ci0gICAgICAgICAgICAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYmRydl9wcml2YXRlLCBrZXZlbnQpOwotICAgIHpkZXZfdCAqZGV2ID0gbWFjcC0+ZGV2aWNlOworCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUsIGtldmVudCk7CisJemRldl90ICpkZXYgPSBtYWNwLT5kZXZpY2U7CiAKLSAgICBpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAodm9pZCAqKSZzbXBfa2V2ZW50X0xvY2spKQotICAgIHsKLSAgICAgICAgLy9zY2hlZHVsZV93b3JrKCZtYWNwLT5rZXZlbnQpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgKHZvaWQgKikmc21wX2tldmVudF9Mb2NrKSkgeworCS8qc2NoZWR1bGVfd29yaygmbWFjcC0+a2V2ZW50KTsqLworCXJldHVybjsKICAgICB9CiAKICAgICBkb3duKCZtYWNwLT5pb2N0bF9zZW0pOwogCi0gICAgaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChLRVZFTlRfV0FUQ0hET0csICZtYWNwLT5rZXZlbnRfZmxhZ3MpKQotICAgIHsKKyAgICBpZiAodGVzdF9hbmRfY2xlYXJfYml0KEtFVkVOVF9XQVRDSERPRywgJm1hY3AtPmtldmVudF9mbGFncykpIHsKICAgICBleHRlcm4gdTE2X3QgemZIcFN0YXJ0UmVjdih6ZGV2X3QgKmRldik7Ci0gICAgICAgIC8vemZpSHdXYXRjaERvZ1JlaW5pdChkZXYpOwotICAgICAgICBwcmludGsoKCJcbiAqKioqKioqKioqKiogSHcgd2F0Y2hEb2cgb2NjdXIhISAqKioqKioqKioqKioqKiBcbiIpKTsKLSAgICAgICAgemZpV2xhblN1c3BlbmQoZGV2KTsKLSAgICAgICAgemZpV2xhblJlc3VtZShkZXYsMCk7Ci0gICAgICAgIHpmSHBTdGFydFJlY3YoZGV2KTsKKwkvKnpmaUh3V2F0Y2hEb2dSZWluaXQoZGV2KTsqLworCXByaW50aygoIlxuICoqKioqKioqKioqKiBIdyB3YXRjaERvZyBvY2N1ciEhICoqKioqKioqKioqKioqIFxuIikpOworCXpmaVdsYW5TdXNwZW5kKGRldik7CisJemZpV2xhblJlc3VtZShkZXYgLCAwKTsKKwl6ZkhwU3RhcnRSZWN2KGRldik7CiAgICAgfQogCiAgICAgY2xlYXJfYml0KDAsICh2b2lkICopJnNtcF9rZXZlbnRfTG9jayk7CkBAIC0xMDgzLDQxICsxMDEwLDM4IEBACiB7CiAgICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwogCi0gICAgaWYgKG1hY3AgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHByaW50aygibWFjcCBpcyBOVUxMXG4iKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChtYWNwID09IE5VTEwpIHsKKwlwcmludGsoIm1hY3AgaXMgTlVMTFxuIik7CisJcmV0dXJuOwogICAgIH0KIAotICAgIGlmICgwICYmIG1hY3AtPmtldmVudF9yZWFkeSAhPSAxKQotICAgIHsKLSAgICAgICAgcHJpbnRrKCJLZXZlbnQgbm90IHJlYWR5XG4iKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmICgwICYmIG1hY3AtPmtldmVudF9yZWFkeSAhPSAxKSB7CisJcHJpbnRrKCJLZXZlbnQgbm90IHJlYWR5XG4iKTsKKwlyZXR1cm47CiAgICAgfQogCiAgICAgc2V0X2JpdChmbGFnLCAmbWFjcC0+a2V2ZW50X2ZsYWdzKTsKIAotICAgIGlmICghc2NoZWR1bGVfd29yaygmbWFjcC0+a2V2ZW50KSkKLSAgICB7Ci0gICAgICAgIC8vRmFpbHMgaXMgTm9ybWFsCi0gICAgICAgIC8vcHJpbnRrKEtFUk5fRVJSICJzY2hlZHVsZV90YXNrIGZhaWxlZCwgZmxhZyA9ICV4XG4iLCBmbGFnKTsKLSAgICB9CisgICAgaWYgKCFzY2hlZHVsZV93b3JrKCZtYWNwLT5rZXZlbnQpKSB7CisJLypGYWlscyBpcyBOb3JtYWwKKwkvL3ByaW50ayhLRVJOX0VSUiAic2NoZWR1bGVfdGFzayBmYWlsZWQsIGZsYWcgPSAleFxuIiwgZmxhZyk7Ki8KKwl9CiB9CiAKIC8qIE5vdGlmeSB3cmFwcGVyIHRvZG8gcmVkb3dubG9hZCBmaXJtd2FyZSBhbmQgcmVpbml0IHByb2NlZHVyZSB3aGVuICovCiAvKiBoYXJkd2FyZSB3YXRjaGRvZyBvY2N1ciA6IHpmaUh3V2F0Y2hEb2dSZWluaXQoKSAqLwotdm9pZCB6ZkxueFdhdGNoRG9nTm90aWZ5KHpkZXZfdCogZGV2KQordm9pZCB6ZkxueFdhdGNoRG9nTm90aWZ5KHpkZXZfdCAqZGV2KQogewogICAgIHpmTG54U2lnbmFsVGhyZWFkKGRldiwgS0VWRU5UX1dBVENIRE9HKTsKIH0KIAogLyogUXVlcnkgRHVyYW50aW9uIG9mIEFjdGl2ZSBTY2FuICovCi12b2lkIHpmd0dldEFjdGl2ZVNjYW5EdXIoemRldl90KiBkZXYsIHU4X3QqIER1cikKK3ZvaWQgemZ3R2V0QWN0aXZlU2NhbkR1cih6ZGV2X3QgKmRldiwgdThfdCAqRHVyKQogewotICAgICpEdXIgPSAzMDsgLy8gZGVmYXVsdCAzMCBtcworICAgICpEdXIgPSAzMDsgLyogZGVmYXVsdCAzMCBtcyovCiB9CiAKLXZvaWQgemZ3R2V0U2hvd1plcm9MZW5ndGhTU0lEKHpkZXZfdCogZGV2LCB1OF90KiBEdXIpCit2b2lkIHpmd0dldFNob3daZXJvTGVuZ3RoU1NJRCh6ZGV2X3QgKmRldiwgdThfdCAqRHVyKQogewogICAgICpEdXIgPSAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvemR1c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3pkdXNiLmMKaW5kZXggMmM3OTlhMi4uNDAxNGI3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL290dXMvemR1c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy96ZHVzYi5jCkBAIC00OCw3ICs0OCw3IEBACiAvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgemQxMjIxX2lkc1tdID0gewogCXsgVVNCX0RFVklDRShWRU5ET1JfQVRIUiwgUFJPRFVDVF9BUjkxNzApIH0sCi0gICAgICAgIHsgVVNCX0RFVklDRShWRU5ET1JfRExJTkssIFBST0RVQ1RfRFdBMTYwQSkgfSwKKwl7IFVTQl9ERVZJQ0UoVkVORE9SX0RMSU5LLCBQUk9EVUNUX0RXQTE2MEEpIH0sCiAJeyBVU0JfREVWSUNFKFZFTkRPUl9ORVRHRUFSLCBQUk9EVUNUX1dOREEzMTAwKSB9LAogCXsgVVNCX0RFVklDRShWRU5ET1JfTkVUR0VBUiwgUFJPRFVDVF9XTjExMXYyKSB9LAogCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KQEAgLTYwLDkgKzYwLDkgQEAKIGV4dGVybiBpbnQgdXNiZHJ2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHU4X3QgemZMbnhDbGVhclN0cnVjdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IHpmV2RzQ2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1leHRlcm4gaW50IHpmVW5yZWdpc3Rlcldkc0RldihzdHJ1Y3QgbmV0X2RldmljZSogcGFyZW50RGV2LCB1MTZfdCB3ZHNJZCk7CitleHRlcm4gaW50IHpmVW5yZWdpc3Rlcldkc0RldihzdHJ1Y3QgbmV0X2RldmljZSAqcGFyZW50RGV2LCB1MTZfdCB3ZHNJZCk7CiBleHRlcm4gaW50IHpmTG54VmFwQ2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1leHRlcm4gaW50IHpmTG54VW5yZWdpc3RlclZhcERldihzdHJ1Y3QgbmV0X2RldmljZSogcGFyZW50RGV2LCB1MTZfdCB2YXBJZCk7CitleHRlcm4gaW50IHpmTG54VW5yZWdpc3RlclZhcERldihzdHJ1Y3QgbmV0X2RldmljZSAqcGFyZW50RGV2LCB1MTZfdCB2YXBJZCk7CiAKIC8qIFdEUyAqLwogZXh0ZXJuIHN0cnVjdCB6c1dkc1N0cnVjdCB3ZHNbWk1fV0RTX1BPUlRfTlVNQkVSXTsKQEAgLTczLDE0OCArNzMsMTM1IEBACiBzdGF0aWMgaW50IHpmTG54UHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKIAljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7Ci0gICAgc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOwogCi0gICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCA9IE5VTEw7Ci0gICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gTlVMTDsKLSAgICBpbnQgdmVuZG9yX2lkLCBwcm9kdWN0X2lkOwotICAgIGludCByZXN1bHQgPSAwOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXQgPSBOVUxMOworCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IE5VTEw7CisJaW50IHZlbmRvcl9pZCwgcHJvZHVjdF9pZDsKKwlpbnQgcmVzdWx0ID0gMDsKIAotICAgIHVzYl9nZXRfZGV2KGRldik7CisJdXNiX2dldF9kZXYoZGV2KTsKIAotICAgIHZlbmRvcl9pZCA9IGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcjsKLSAgICBwcm9kdWN0X2lkID0gZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdDsKKwl2ZW5kb3JfaWQgPSBkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3I7CisJcHJvZHVjdF9pZCA9IGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3Q7CiAKLSNpZmRlZiBITUFDX0RFQlVHCi0gICAgcHJpbnRrKEtFUk5fTk9USUNFICJ2ZW5kb3JfaWQgPSAlMDR4XG4iLCB2ZW5kb3JfaWQpOwotICAgIHByaW50ayhLRVJOX05PVElDRSAicHJvZHVjdF9pZCA9ICUwNHhcbiIsIHByb2R1Y3RfaWQpOworCSNpZmRlZiBITUFDX0RFQlVHCisJCXByaW50ayhLRVJOX05PVElDRSAidmVuZG9yX2lkID0gJTA0eFxuIiwgdmVuZG9yX2lkKTsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJwcm9kdWN0X2lkID0gJTA0eFxuIiwgcHJvZHVjdF9pZCk7CiAKLSAgICBpZiAoZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKLSAgICAgICAgcHJpbnRrKEtFUk5fTk9USUNFICJVU0IgMi4wIEhvc3RcbiIpOwotICAgIGVsc2UKLSAgICAgICAgcHJpbnRrKEtFUk5fTk9USUNFICJVU0IgMS4xIEhvc3RcbiIpOwotI2VuZGlmCisJaWYgKGRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCisJCXByaW50ayhLRVJOX05PVElDRSAiVVNCIDIuMCBIb3N0XG4iKTsKKwllbHNlCisJCXByaW50ayhLRVJOX05PVElDRSAiVVNCIDEuMSBIb3N0XG4iKTsKKwkjZW5kaWYKIAotICAgIG1hY3AgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKLSAgICBpZiAoIW1hY3ApCi0gICAgewotICAgICAgICBwcmludGsoS0VSTl9FUlIgIm91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBkZXZpY2Ugc3RydWN0dXJlXG4iKTsKLSAgICAgICAgcmVzdWx0ID0gLUVOT01FTTsKLSAgICAgICAgZ290byBmYWlsOwotICAgIH0KKwltYWNwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVzYmRydl9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYWNwKSB7CisJCXByaW50ayhLRVJOX0VSUiAib3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGRldmljZSBzdHJ1Y3R1cmVcbiIpOworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQogCi0gICAgbmV0ID0gYWxsb2NfZXRoZXJkZXYoMCk7CisJbmV0ID0gYWxsb2NfZXRoZXJkZXYoMCk7CiAKLSAgICBpZiAobmV0ID09IE5VTEwpCi0gICAgewotICAgICAgICBwcmludGsoS0VSTl9FUlIgInpmTG54UHJvYmU6IE5vdCBhYmxlIHRvIGFsbG9jIGV0aGVyZGV2IHN0cnVjdFxuIik7Ci0gICAgICAgIHJlc3VsdCA9IC1FTk9NRU07Ci0gICAgICAgIGdvdG8gZmFpbDE7Ci0gICAgfQorCWlmIChuZXQgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgInpmTG54UHJvYmU6IE5vdCBhYmxlIHRvIGFsbG9jIGV0aGVyZGV2IHN0cnVjdFxuIik7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDE7CisJfQogCi0gICAgc3RyY3B5KG5ldC0+bmFtZSwgImF0aCVkIik7CisJc3RyY3B5KG5ldC0+bmFtZSwgImF0aCVkIik7CiAKLSAgICBuZXQtPm1sX3ByaXYgPSBtYWNwOyAgIC8va2VybmVsIDIuNgotICAgIG1hY3AtPnVkZXYgPSBkZXY7Ci0gICAgbWFjcC0+ZGV2aWNlID0gbmV0OworCW5ldC0+bWxfcHJpdiA9IG1hY3A7ICAgLyoga2VybmVsIDIuNiAqLworCW1hY3AtPnVkZXYgPSBkZXY7CisJbWFjcC0+ZGV2aWNlID0gbmV0OwogCi0gICAgLyogc2V0IHVwIHRoZSBlbmRwb2ludCBpbmZvcm1hdGlvbiAqLwotICAgIC8qIGNoZWNrIG91dCB0aGUgZW5kcG9pbnRzICovCi0gICAgbWFjcC0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworCS8qIHNldCB1cCB0aGUgZW5kcG9pbnQgaW5mb3JtYXRpb24gKi8KKwkvKiBjaGVjayBvdXQgdGhlIGVuZHBvaW50cyAqLworCW1hY3AtPmludGVyZmFjZSA9IGludGVyZmFjZTsKIAotICAgIC8vaW5pdF93YWl0cXVldWVfaGVhZCgmbWFjcC0+cmVnU2V0X3dhaXQpOwotICAgIC8vaW5pdF93YWl0cXVldWVfaGVhZCgmbWFjcC0+aW9yd1JzcF93YWl0KTsKLSAgICAvL2luaXRfd2FpdHF1ZXVlX2hlYWQoJm1hY3AtPnRlcm1fd2FpdCk7CisJLyogaW5pdF93YWl0cXVldWVfaGVhZCgmbWFjcC0+cmVnU2V0X3dhaXQpOyAqLworCS8qIGluaXRfd2FpdHF1ZXVlX2hlYWQoJm1hY3AtPmlvcndSc3Bfd2FpdCk7ICovCisJLyogaW5pdF93YWl0cXVldWVfaGVhZCgmbWFjcC0+dGVybV93YWl0KTsgKi8KIAotICAgIGlmICghemZMbnhBbGxvY0FsbFVyYnMobWFjcCkpCi0gICAgewotICAgICAgICByZXN1bHQgPSAtRU5PTUVNOwotICAgICAgICBnb3RvIGZhaWwyOwotICAgIH0KKwlpZiAoIXpmTG54QWxsb2NBbGxVcmJzKG1hY3ApKSB7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDI7CisJfQogCi0gICAgaWYgKCF6ZkxueEluaXRTZXR1cChuZXQsIG1hY3ApKQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gLUVJTzsKLSAgICAgICAgZ290byBmYWlsMzsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIG1hY3ApOwotICAgICAgICBTRVRfTkVUREVWX0RFVihuZXQsICZpbnRlcmZhY2UtPmRldik7CisJaWYgKCF6ZkxueEluaXRTZXR1cChuZXQsIG1hY3ApKSB7CisJCXJlc3VsdCA9IC1FSU87CisJCWdvdG8gZmFpbDM7CisJfSBlbHNlIHsKKwkJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIG1hY3ApOworCQlTRVRfTkVUREVWX0RFVihuZXQsICZpbnRlcmZhY2UtPmRldik7CiAKLSAgICAgICAgaWYgKHJlZ2lzdGVyX25ldGRldihuZXQpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKLSAgICAgICAgICAgIGdvdG8gZmFpbDM7Ci0gICAgICAgIH0KLSAgICB9CisJCWlmIChyZWdpc3Rlcl9uZXRkZXYobmV0KSAhPSAwKSB7CisJCQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisJCQlnb3RvIGZhaWwzOworCQl9CisJfQogCi0gICAgbmV0aWZfY2Fycmllcl9vZmYobmV0KTsKLSAgICBnb3RvIGRvbmU7Ci0KKwluZXRpZl9jYXJyaWVyX29mZihuZXQpOworCSAgICBnb3RvIGRvbmU7CiBmYWlsMzoKLSAgICB6ZkxueEZyZWVBbGxVcmJzKG1hY3ApOworCXpmTG54RnJlZUFsbFVyYnMobWFjcCk7CiBmYWlsMjoKLSAgICBmcmVlX25ldGRldihuZXQpOyAgLy9rZXJuZWwgMi42CisJZnJlZV9uZXRkZXYobmV0KTsgIC8qIGtlcm5lbCAyLjYgKi8KIGZhaWwxOgotICAgIGtmcmVlKG1hY3ApOwotCisJa2ZyZWUobWFjcCk7CiBmYWlsOgotICAgIHVzYl9wdXRfZGV2KGRldik7Ci0gICAgbWFjcCA9IE5VTEw7Ci0KKwl1c2JfcHV0X2RldihkZXYpOworCW1hY3AgPSBOVUxMOwogZG9uZToKLSAgICByZXR1cm4gcmVzdWx0OworCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyB2b2lkIHpmTG54RGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQogewotICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IChzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKikgdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IChzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKikgdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOwogCi0gICAgcHJpbnRrKEtFUk5fREVCVUcgInpmTG54RGlzY29ubmVjdFxuIik7CisJcHJpbnRrKEtFUk5fREVCVUcgInpmTG54RGlzY29ubmVjdFxuIik7CiAKLSAgICBpZiAoIW1hY3ApCi0gICAgewotICAgICAgICBwcmludGsoS0VSTl9FUlIgInVucmVnaXN0ZXJpbmcgbm9uLWV4aXN0YW50IGRldmljZVxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisJaWYgKCFtYWNwKSB7CisJCXByaW50ayhLRVJOX0VSUiAidW5yZWdpc3RlcmluZyBub24tZXhpc3RhbnQgZGV2aWNlXG4iKTsKKwkJcmV0dXJuOworCX0KIAotICAgIGlmIChtYWNwLT5kcml2ZXJfaXNvbGF0ZWQpCi0gICAgewotICAgICAgICBpZiAobWFjcC0+ZGV2aWNlLT5mbGFncyAmIElGRl9VUCkKLSAgICAgICAgICAgIHVzYmRydl9jbG9zZShtYWNwLT5kZXZpY2UpOwotICAgIH0KKwlpZiAobWFjcC0+ZHJpdmVyX2lzb2xhdGVkKQorCQlpZiAobWFjcC0+ZGV2aWNlLT5mbGFncyAmIElGRl9VUCkKKwkJCXVzYmRydl9jbG9zZShtYWNwLT5kZXZpY2UpOwogCi0jaWYgMAotICAgIC8qIENsb3NlIFdEUyAqLwotICAgIC8vemZXZHNDbG9zZSh3ZHNbMF0uZGV2KTsKLSAgICAvKiBVbnJlZ2lzdGVyIFdEUyAqLwotICAgIC8vemZVbnJlZ2lzdGVyV2RzRGV2KG1hY3AtPmRldmljZSwgMCk7CisJI2lmIDAKKwkJLyogQ2xvc2UgV0RTICovCisJCS8qIHpmV2RzQ2xvc2Uod2RzWzBdLmRldik7ICovCisJCS8qIFVucmVnaXN0ZXIgV0RTICovCisJCS8qIHpmVW5yZWdpc3Rlcldkc0RldihtYWNwLT5kZXZpY2UsIDApOyAqLwogCi0gICAgLyogQ2xvc2UgVkFQICovCi0gICAgemZMbnhWYXBDbG9zZSh2YXBbMF0uZGV2KTsKLSAgICAvKiBVbnJlZ2lzdGVyIFZBUCAqLwotICAgIHpmTG54VW5yZWdpc3RlclZhcERldihtYWNwLT5kZXZpY2UsIDApOwotI2VuZGlmCisJCS8qIENsb3NlIFZBUCAqLworCQl6ZkxueFZhcENsb3NlKHZhcFswXS5kZXYpOworCQkvKiBVbnJlZ2lzdGVyIFZBUCAqLworCQl6ZkxueFVucmVnaXN0ZXJWYXBEZXYobWFjcC0+ZGV2aWNlLCAwKTsKKwkjZW5kaWYKIAotICAgIHpmTG54Q2xlYXJTdHJ1Y3RzKG1hY3AtPmRldmljZSk7CisJemZMbnhDbGVhclN0cnVjdHMobWFjcC0+ZGV2aWNlKTsKIAotICAgIHVucmVnaXN0ZXJfbmV0ZGV2KG1hY3AtPmRldmljZSk7CisJdW5yZWdpc3Rlcl9uZXRkZXYobWFjcC0+ZGV2aWNlKTsKIAotICAgIHVzYl9wdXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7CisJdXNiX3B1dF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpKTsKIAotICAgIC8vcHJpbnRrKEtFUk5fRVJSICIzLiB6ZkxueFVubGlua0FsbFVyYnNcbiIpOwotICAgIC8vemZMbnhVbmxpbmtBbGxVcmJzKG1hY3ApOworCS8qIHByaW50ayhLRVJOX0VSUiAiMy4gemZMbnhVbmxpbmtBbGxVcmJzXG4iKTsgKi8KKwkvKiB6ZkxueFVubGlua0FsbFVyYnMobWFjcCk7ICovCiAKLSAgICAvKiBGcmVlIG5ldHdvcmsgaW50ZXJmYWNlICovCi0gICAgZnJlZV9uZXRkZXYobWFjcC0+ZGV2aWNlKTsKKwkvKiBGcmVlIG5ldHdvcmsgaW50ZXJmYWNlICovCisJZnJlZV9uZXRkZXYobWFjcC0+ZGV2aWNlKTsKIAotICAgIHpmTG54RnJlZUFsbFVyYnMobWFjcCk7Ci0gICAgLy96ZkxueENsZWFyU3RydWN0cyhtYWNwLT5kZXZpY2UpOwotICAgIGtmcmVlKG1hY3ApOwotICAgIG1hY3AgPSBOVUxMOworCXpmTG54RnJlZUFsbFVyYnMobWFjcCk7CisJLyogemZMbnhDbGVhclN0cnVjdHMobWFjcC0+ZGV2aWNlKTsgKi8KKwlrZnJlZShtYWNwKTsKKwltYWNwID0gTlVMTDsKIAotICAgIHVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB6ZDEyMjFfZHJpdmVyID0gewpAQCAtMjI2LDEzICsyMTMsMTMgQEAKIAogaW50IF9faW5pdCB6ZkxueElpbml0KHZvaWQpCiB7Ci0gICAgcHJpbnRrKEtFUk5fTk9USUNFICIlcyAtIHZlcnNpb24gJXNcbiIsICBEUklWRVJfTkFNRSwgVkVSU0lPTklEKTsKLSAgICByZXR1cm4gdXNiX3JlZ2lzdGVyKCZ6ZDEyMjFfZHJpdmVyKTsKKwlwcmludGsoS0VSTl9OT1RJQ0UgIiVzIC0gdmVyc2lvbiAlc1xuIiwgIERSSVZFUl9OQU1FLCBWRVJTSU9OSUQpOworCXJldHVybiB1c2JfcmVnaXN0ZXIoJnpkMTIyMV9kcml2ZXIpOwogfQogCiB2b2lkIF9fZXhpdCB6ZkxueEV4aXQodm9pZCkKIHsKLSAgICB1c2JfZGVyZWdpc3RlcigmemQxMjIxX2RyaXZlcik7CisJdXNiX2RlcmVnaXN0ZXIoJnpkMTIyMV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdCh6ZkxueElpbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jIGIvZHJpdmVycy9zdGFnaW5nL3BhbmVsL3BhbmVsLmMKaW5kZXggOWNhMGU5ZS4uMzIyMTgxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3BhbmVsL3BhbmVsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BhbmVsL3BhbmVsLmMKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KQEAgLTY4LDExICs2OSwxNiBAQAogI2RlZmluZSBMQ0RfTUFYQllURVMJCTI1NgkvKiBtYXggYnVyc3Qgd3JpdGUgKi8KIAogI2RlZmluZSBLRVlQQURfQlVGRkVSCQk2NAotI2RlZmluZSBJTlBVVF9QT0xMX1RJTUUJCShIWi81MCkJLyogcG9sbCB0aGUga2V5Ym9hcmQgdGhpcyBldmVyeSBzZWNvbmQgKi8KLSNkZWZpbmUgS0VZUEFEX1JFUF9TVEFSVAkoMTApCS8qIGEga2V5IHN0YXJ0cyB0byByZXBlYXQgYWZ0ZXIgdGhpcyB0aW1lcyBJTlBVVF9QT0xMX1RJTUUgKi8KLSNkZWZpbmUgS0VZUEFEX1JFUF9ERUxBWQkoMikJLyogYSBrZXkgcmVwZWF0cyB0aGlzIHRpbWVzIElOUFVUX1BPTExfVElNRSAqLwogCi0jZGVmaW5lIEZMQVNIX0xJR0hUX1RFTVBPCSgyMDApCS8qIGtlZXAgdGhlIGxpZ2h0IG9uIHRoaXMgdGltZXMgSU5QVVRfUE9MTF9USU1FIGZvciBlYWNoIGZsYXNoICovCisvKiBwb2xsIHRoZSBrZXlib2FyZCB0aGlzIGV2ZXJ5IHNlY29uZCAqLworI2RlZmluZSBJTlBVVF9QT0xMX1RJTUUJCShIWi81MCkKKy8qIGEga2V5IHN0YXJ0cyB0byByZXBlYXQgYWZ0ZXIgdGhpcyB0aW1lcyBJTlBVVF9QT0xMX1RJTUUgKi8KKyNkZWZpbmUgS0VZUEFEX1JFUF9TVEFSVAkoMTApCisvKiBhIGtleSByZXBlYXRzIHRoaXMgdGltZXMgSU5QVVRfUE9MTF9USU1FICovCisjZGVmaW5lIEtFWVBBRF9SRVBfREVMQVkJKDIpCisKKy8qIGtlZXAgdGhlIGxpZ2h0IG9uIHRoaXMgdGltZXMgSU5QVVRfUE9MTF9USU1FIGZvciBlYWNoIGZsYXNoICovCisjZGVmaW5lIEZMQVNIX0xJR0hUX1RFTVBPCSgyMDApCiAKIC8qIGNvbnZlcnRzIGFuIHJfc3RyKCkgaW5wdXQgdG8gYW4gYWN0aXZlIGhpZ2gsIGJpdHMgc3RyaW5nIDogMDAwQkFPU0UgKi8KICNkZWZpbmUgUE5MX1BJTlBVVChhKQkJKCgoKHVuc2lnbmVkIGNoYXIpKGEpKSBeIDB4N0YpID4+IDMpCkBAIC04NCw3ICs5MCw4IEBACiAjZGVmaW5lIFBOTF9QRVJST1JQCQkweDA4CS8qIGRpcmVjdCBpbnB1dCwgYWN0aXZlIGxvdyAqLwogCiAjZGVmaW5lIFBOTF9QQklESVIJCTB4MjAJLyogYmktZGlyZWN0aW9uYWwgcG9ydHMgKi8KLSNkZWZpbmUgUE5MX1BJTlRFTgkJMHgxMAkvKiBoaWdoIHRvIHJlYWQgZGF0YSBpbiBvci1lZCB3aXRoIGRhdGEgb3V0ICovCisvKiBoaWdoIHRvIHJlYWQgZGF0YSBpbiBvci1lZCB3aXRoIGRhdGEgb3V0ICovCisjZGVmaW5lIFBOTF9QSU5URU4JCTB4MTAKICNkZWZpbmUgUE5MX1BTRUxFQ1AJCTB4MDgJLyogaW52ZXJ0ZWQgb3V0cHV0LCBhY3RpdmUgbG93ICovCiAjZGVmaW5lIFBOTF9QSU5JVFAJCTB4MDQJLyogZGlyZWN0IG91dHB1dCwgYWN0aXZlIGxvdyAqLwogI2RlZmluZSBQTkxfUEFVVE9MRgkJMHgwMgkvKiBpbnZlcnRlZCBvdXRwdXQsIGFjdGl2ZSBsb3cgKi8KQEAgLTEyMyw3ICsxMzAsNyBAQAogI2RlZmluZSBMQ0RfRkxBR19OCQkweDAwNDAJLyogMi1yb3dzIG1vZGUgKi8KICNkZWZpbmUgTENEX0ZMQUdfTAkJMHgwMDgwCS8qIGJhY2tsaWdodCBlbmFibGVkICovCiAKLSNkZWZpbmUgTENEX0VTQ0FQRV9MRU4JCTI0CS8qIDI0IGNoYXJzIG1heCBmb3IgYW4gTENEIGVzY2FwZSBjb21tYW5kICovCisjZGVmaW5lIExDRF9FU0NBUEVfTEVOCQkyNAkvKiBtYXggY2hhcnMgZm9yIExDRCBlc2NhcGUgY29tbWFuZCAqLwogI2RlZmluZSBMQ0RfRVNDQVBFX0NIQVIJMjcJLyogdXNlIGNoYXIgMjcgZm9yIGVzY2FwZSBjb21tYW5kICovCiAKIC8qIG1hY3JvcyB0byBzaW1wbGlmeSB1c2Ugb2YgdGhlIHBhcmFsbGVsIHBvcnQgKi8KQEAgLTEzNCw4ICsxNDEsMTAgQEAKICNkZWZpbmUgd19kdHIoeCwgeSkgICAgIGRvIHsgcGFycG9ydF93cml0ZV9kYXRhKCh4KS0+cG9ydCwgKHkpKTsgfSB3aGlsZSAoMCkKIAogLyogdGhpcyBkZWZpbmVzIHdoaWNoIGJpdHMgYXJlIHRvIGJlIHVzZWQgYW5kIHdoaWNoIG9uZXMgdG8gYmUgaWdub3JlZCAqLwotc3RhdGljIF9fdTggc2Nhbl9tYXNrX287CS8qIGxvZ2ljYWwgb3Igb2YgdGhlIG91dHB1dCBiaXRzIGludm9sdmVkIGluIHRoZSBzY2FuIG1hdHJpeCAqLwotc3RhdGljIF9fdTggc2Nhbl9tYXNrX2k7CS8qIGxvZ2ljYWwgb3Igb2YgdGhlIGlucHV0IGJpdHMgaW52b2x2ZWQgaW4gdGhlIHNjYW4gbWF0cml4ICovCisvKiBsb2dpY2FsIG9yIG9mIHRoZSBvdXRwdXQgYml0cyBpbnZvbHZlZCBpbiB0aGUgc2NhbiBtYXRyaXggKi8KK3N0YXRpYyBfX3U4IHNjYW5fbWFza19vOworLyogbG9naWNhbCBvciBvZiB0aGUgaW5wdXQgYml0cyBpbnZvbHZlZCBpbiB0aGUgc2NhbiBtYXRyaXggKi8KK3N0YXRpYyBfX3U4IHNjYW5fbWFza19pOwogCiB0eXBlZGVmIF9fdTY0IHBtYXNrX3Q7CiAKQEAgLTE2MSwxNCArMTcwLDE0IEBACiAJX191OCByaXNlX3RpbWVyLCBmYWxsX3RpbWVyLCBoaWdoX3RpbWVyOwogCiAJdW5pb24gewotCQlzdHJ1Y3QgewkvKiB0aGlzIHN0cnVjdHVyZSBpcyB2YWxpZCB3aGVuIHR5cGUgPT0gSU5QVVRfVFlQRV9TVEQgKi8KKwkJc3RydWN0IHsJLyogdmFsaWQgd2hlbiB0eXBlID09IElOUFVUX1RZUEVfU1REICovCiAJCQl2b2lkICgqcHJlc3NfZmN0KSAoaW50KTsKIAkJCXZvaWQgKCpyZWxlYXNlX2ZjdCkgKGludCk7CiAJCQlpbnQgcHJlc3NfZGF0YTsKIAkJCWludCByZWxlYXNlX2RhdGE7CiAJCX0gc3RkOwotCQlzdHJ1Y3QgewkvKiB0aGlzIHN0cnVjdHVyZSBpcyB2YWxpZCB3aGVuIHR5cGUgPT0gSU5QVVRfVFlQRV9LQkQgKi8KLQkJCS8qIHN0cmluZ3MgY2FuIGJlIGZ1bGwtbGVuZ3RoIChpZS4gbm9uIG51bGwtdGVybWluYXRlZCkgKi8KKwkJc3RydWN0IHsJLyogdmFsaWQgd2hlbiB0eXBlID09IElOUFVUX1RZUEVfS0JEICovCisJCQkvKiBzdHJpbmdzIGNhbiBiZSBub24gbnVsbC10ZXJtaW5hdGVkICovCiAJCQljaGFyIHByZXNzX3N0cltzaXplb2Yodm9pZCAqKSArIHNpemVvZihpbnQpXTsKIAkJCWNoYXIgcmVwZWF0X3N0cltzaXplb2Yodm9pZCAqKSArIHNpemVvZihpbnQpXTsKIAkJCWNoYXIgcmVsZWFzZV9zdHJbc2l6ZW9mKHZvaWQgKikgKyBzaXplb2YoaW50KV07CkBAIC0xODgsMTEgKzE5NywxNyBAQAogICogMDAwMDAwMDAwMDAwMDAwMDAwMEJBUFNFQkFQU0VCQVBTRUJBUFNFQkFQU0VCQVBTRUJBUFNFQkFQU0VCQVBTRQogICogPC0tLS0tdW51c2VkLS0tLS0tPjxnbmQ+PGQwNz48ZDA2PjxkMDU+PGQwND48ZDAzPjxkMDI+PGQwMT48ZDAwPgogICovCi1zdGF0aWMgcG1hc2tfdCBwaHlzX3JlYWQ7CS8qIHdoYXQgaGFzIGp1c3QgYmVlbiByZWFkIGZyb20gdGhlIEkvTyBwb3J0cyAqLwotc3RhdGljIHBtYXNrX3QgcGh5c19yZWFkX3ByZXY7CS8qIHByZXZpb3VzIHBoeXNfcmVhZCAqLwotc3RhdGljIHBtYXNrX3QgcGh5c19jdXJyOwkvKiBzdGFiaWxpemVkIHBoeXNfcmVhZCAocGh5c19yZWFkfHBoeXNfcmVhZF9wcmV2KSAqLwotc3RhdGljIHBtYXNrX3QgcGh5c19wcmV2OwkvKiBwcmV2aW91cyBwaHlzX2N1cnIgKi8KLXN0YXRpYyBjaGFyIGlucHV0c19zdGFibGU7CS8qIDAgbWVhbnMgdGhhdCBhdCBsZWFzdCBvbmUgbG9naWNhbCBzaWduYWwgbmVlZHMgYmUgY29tcHV0ZWQgKi8KKworLyogd2hhdCBoYXMganVzdCBiZWVuIHJlYWQgZnJvbSB0aGUgSS9PIHBvcnRzICovCitzdGF0aWMgcG1hc2tfdCBwaHlzX3JlYWQ7CisvKiBwcmV2aW91cyBwaHlzX3JlYWQgKi8KK3N0YXRpYyBwbWFza190IHBoeXNfcmVhZF9wcmV2OworLyogc3RhYmlsaXplZCBwaHlzX3JlYWQgKHBoeXNfcmVhZHxwaHlzX3JlYWRfcHJldikgKi8KK3N0YXRpYyBwbWFza190IHBoeXNfY3VycjsKKy8qIHByZXZpb3VzIHBoeXNfY3VyciAqLworc3RhdGljIHBtYXNrX3QgcGh5c19wcmV2OworLyogMCBtZWFucyB0aGF0IGF0IGxlYXN0IG9uZSBsb2dpY2FsIHNpZ25hbCBuZWVkcyBiZSBjb21wdXRlZCAqLworc3RhdGljIGNoYXIgaW5wdXRzX3N0YWJsZTsKIAogLyogdGhlc2UgdmFyaWFibGVzIGFyZSBzcGVjaWZpYyB0byB0aGUga2V5cGFkICovCiBzdGF0aWMgY2hhciBrZXlwYWRfYnVmZmVyW0tFWVBBRF9CVUZGRVJdOwpAQCAtMjAyLDExICsyMTcsMTcgQEAKIHN0YXRpYyB3YWl0X3F1ZXVlX2hlYWRfdCBrZXlwYWRfcmVhZF93YWl0OwogCiAvKiBsY2Qtc3BlY2lmaWMgdmFyaWFibGVzICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBpbnQgbGNkX2ZsYWdzOwkvKiBjb250YWlucyB0aGUgTENEIGNvbmZpZyBzdGF0ZSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50IGxjZF9hZGRyX3g7CS8qIGNvbnRhaW5zIHRoZSBMQ0QgWCBvZmZzZXQgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGludCBsY2RfYWRkcl95OwkvKiBjb250YWlucyB0aGUgTENEIFkgb2Zmc2V0ICovCi1zdGF0aWMgY2hhciBsY2RfZXNjYXBlW0xDRF9FU0NBUEVfTEVOICsgMV07CS8qIGN1cnJlbnQgZXNjYXBlIHNlcXVlbmNlLCAwIHRlcm1pbmF0ZWQgKi8KLXN0YXRpYyBpbnQgbGNkX2VzY2FwZV9sZW4gPSAtMTsJLyogbm90IGluIGVzY2FwZSBzdGF0ZS4gPj0wID0gZXNjYXBlIGNtZCBsZW4gKi8KKworLyogY29udGFpbnMgdGhlIExDRCBjb25maWcgc3RhdGUgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGludCBsY2RfZmxhZ3M7CisvKiBjb250YWlucyB0aGUgTENEIFggb2Zmc2V0ICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpbnQgbGNkX2FkZHJfeDsKKy8qIGNvbnRhaW5zIHRoZSBMQ0QgWSBvZmZzZXQgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGludCBsY2RfYWRkcl95OworLyogY3VycmVudCBlc2NhcGUgc2VxdWVuY2UsIDAgdGVybWluYXRlZCAqLworc3RhdGljIGNoYXIgbGNkX2VzY2FwZVtMQ0RfRVNDQVBFX0xFTiArIDFdOworLyogbm90IGluIGVzY2FwZSBzdGF0ZS4gPj0wID0gZXNjYXBlIGNtZCBsZW4gKi8KK3N0YXRpYyBpbnQgbGNkX2VzY2FwZV9sZW4gPSAtMTsKIAogLyoKICAqIEJpdCBtYXNrcyB0byBjb252ZXJ0IExDRCBzaWduYWxzIHRvIHBhcmFsbGVsIHBvcnQgb3V0cHV0cy4KQEAgLTQzNiwxMSArNDU3LDEzIEBACiBzdGF0aWMgaW50IGxjZF90eXBlID0gLTE7CiBtb2R1bGVfcGFyYW0obGNkX3R5cGUsIGludCwgMDAwMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGxjZF90eXBlLAotCQkgIkxDRCB0eXBlOiAwPW5vbmUsIDE9b2xkIC8vLCAyPXNlcmlhbCBrczAwNzQsIDM9aGFudHJvbml4IC8vLCA0PW5leGNvbSAvLywgNT1jb21waWxlZC1pbiIpOworCQkgIkxDRCB0eXBlOiAwPW5vbmUsIDE9b2xkIC8vLCAyPXNlcmlhbCBrczAwNzQsICIKKwkJICIzPWhhbnRyb25peCAvLywgND1uZXhjb20gLy8sIDU9Y29tcGlsZWQtaW4iKTsKIAogc3RhdGljIGludCBsY2RfcHJvdG8gPSAtMTsKIG1vZHVsZV9wYXJhbShsY2RfcHJvdG8sIGludCwgMDAwMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGxjZF9wcm90bywgIkxDRCBjb21tdW5pY2F0aW9uOiAwPXBhcmFsbGVsICgvLyksIDE9c2VyaWFsLCIKK01PRFVMRV9QQVJNX0RFU0MobGNkX3Byb3RvLAorCQkiTENEIGNvbW11bmljYXRpb246IDA9cGFyYWxsZWwgKC8vKSwgMT1zZXJpYWwsIgogCQkiMj1USSBMQ0QgSW50ZXJmYWNlIik7CiAKIHN0YXRpYyBpbnQgbGNkX2NoYXJzZXQgPSAtMTsKQEAgLTQ1MCwxMiArNDczLDE0IEBACiBzdGF0aWMgaW50IGtleXBhZF90eXBlID0gLTE7CiBtb2R1bGVfcGFyYW0oa2V5cGFkX3R5cGUsIGludCwgMDAwMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGtleXBhZF90eXBlLAotCQkgIktleXBhZCB0eXBlOiAwPW5vbmUsIDE9b2xkIDYga2V5cywgMj1uZXcgNisxIGtleXMsIDM9bmV4Y29tIDQga2V5cyIpOworCQkgIktleXBhZCB0eXBlOiAwPW5vbmUsIDE9b2xkIDYga2V5cywgMj1uZXcgNisxIGtleXMsICIKKwkJICIzPW5leGNvbSA0IGtleXMiKTsKIAogc3RhdGljIGludCBwcm9maWxlID0gREVGQVVMVF9QUk9GSUxFOwogbW9kdWxlX3BhcmFtKHByb2ZpbGUsIGludCwgMDAwMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHByb2ZpbGUsCi0JCSAiMT0xNngyIG9sZCBrcDsgMj1zZXJpYWwgMTZ4MiwgbmV3IGtwOyAzPTE2eDIgaGFudHJvbml4OyA0PTE2eDIgbmV4Y29tOyBkZWZhdWx0PTQweDIsIG9sZCBrcCIpOworCQkgIjE9MTZ4MiBvbGQga3A7IDI9c2VyaWFsIDE2eDIsIG5ldyBrcDsgMz0xNngyIGhhbnRyb25peDsgIgorCQkgIjQ9MTZ4MiBuZXhjb207IGRlZmF1bHQ9NDB4Miwgb2xkIGtwIik7CiAKIC8qCiAgKiBUaGVzZSBhcmUgdGhlIHBhcmFsbGVsIHBvcnQgcGlucyB0aGUgTENEIGNvbnRyb2wgc2lnbmFscyBhcmUgY29ubmVjdGVkIHRvLgpAQCAtNDY5LDMyICs0OTQsMzggQEAKIHN0YXRpYyBpbnQgbGNkX2VfcGluICA9IFBJTl9OT1RfU0VUOwogbW9kdWxlX3BhcmFtKGxjZF9lX3BpbiwgaW50LCAwMDAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobGNkX2VfcGluLAotCQkgIiMgb2YgdGhlIC8vIHBvcnQgcGluIGNvbm5lY3RlZCB0byBMQ0QgJ0UnIHNpZ25hbCwgd2l0aCBwb2xhcml0eSAoLTE3Li4xNykiKTsKKwkJICIjIG9mIHRoZSAvLyBwb3J0IHBpbiBjb25uZWN0ZWQgdG8gTENEICdFJyBzaWduYWwsICIKKwkJICJ3aXRoIHBvbGFyaXR5ICgtMTcuLjE3KSIpOwogCiBzdGF0aWMgaW50IGxjZF9yc19waW4gPSBQSU5fTk9UX1NFVDsKIG1vZHVsZV9wYXJhbShsY2RfcnNfcGluLCBpbnQsIDAwMDApOwogTU9EVUxFX1BBUk1fREVTQyhsY2RfcnNfcGluLAotCQkgIiMgb2YgdGhlIC8vIHBvcnQgcGluIGNvbm5lY3RlZCB0byBMQ0QgJ1JTJyBzaWduYWwsIHdpdGggcG9sYXJpdHkgKC0xNy4uMTcpIik7CisJCSAiIyBvZiB0aGUgLy8gcG9ydCBwaW4gY29ubmVjdGVkIHRvIExDRCAnUlMnIHNpZ25hbCwgIgorCQkgIndpdGggcG9sYXJpdHkgKC0xNy4uMTcpIik7CiAKIHN0YXRpYyBpbnQgbGNkX3J3X3BpbiA9IFBJTl9OT1RfU0VUOwogbW9kdWxlX3BhcmFtKGxjZF9yd19waW4sIGludCwgMDAwMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGxjZF9yd19waW4sCi0JCSAiIyBvZiB0aGUgLy8gcG9ydCBwaW4gY29ubmVjdGVkIHRvIExDRCAnUlcnIHNpZ25hbCwgd2l0aCBwb2xhcml0eSAoLTE3Li4xNykiKTsKKwkJICIjIG9mIHRoZSAvLyBwb3J0IHBpbiBjb25uZWN0ZWQgdG8gTENEICdSVycgc2lnbmFsLCAiCisJCSAid2l0aCBwb2xhcml0eSAoLTE3Li4xNykiKTsKIAogc3RhdGljIGludCBsY2RfYmxfcGluID0gUElOX05PVF9TRVQ7CiBtb2R1bGVfcGFyYW0obGNkX2JsX3BpbiwgaW50LCAwMDAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobGNkX2JsX3BpbiwKLQkJICIjIG9mIHRoZSAvLyBwb3J0IHBpbiBjb25uZWN0ZWQgdG8gTENEIGJhY2tsaWdodCwgd2l0aCBwb2xhcml0eSAoLTE3Li4xNykiKTsKKwkJICIjIG9mIHRoZSAvLyBwb3J0IHBpbiBjb25uZWN0ZWQgdG8gTENEIGJhY2tsaWdodCwgIgorCQkgIndpdGggcG9sYXJpdHkgKC0xNy4uMTcpIik7CiAKIHN0YXRpYyBpbnQgbGNkX2RhX3BpbiA9IFBJTl9OT1RfU0VUOwogbW9kdWxlX3BhcmFtKGxjZF9kYV9waW4sIGludCwgMDAwMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGxjZF9kYV9waW4sCi0JCSAiIyBvZiB0aGUgLy8gcG9ydCBwaW4gY29ubmVjdGVkIHRvIHNlcmlhbCBMQ0QgJ1NEQScgc2lnbmFsLCB3aXRoIHBvbGFyaXR5ICgtMTcuLjE3KSIpOworCQkgIiMgb2YgdGhlIC8vIHBvcnQgcGluIGNvbm5lY3RlZCB0byBzZXJpYWwgTENEICdTREEnICIKKwkJICJzaWduYWwsIHdpdGggcG9sYXJpdHkgKC0xNy4uMTcpIik7CiAKIHN0YXRpYyBpbnQgbGNkX2NsX3BpbiA9IFBJTl9OT1RfU0VUOwogbW9kdWxlX3BhcmFtKGxjZF9jbF9waW4sIGludCwgMDAwMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGxjZF9jbF9waW4sCi0JCSAiIyBvZiB0aGUgLy8gcG9ydCBwaW4gY29ubmVjdGVkIHRvIHNlcmlhbCBMQ0QgJ1NDTCcgc2lnbmFsLCB3aXRoIHBvbGFyaXR5ICgtMTcuLjE3KSIpOworCQkgIiMgb2YgdGhlIC8vIHBvcnQgcGluIGNvbm5lY3RlZCB0byBzZXJpYWwgTENEICdTQ0wnICIKKwkJICJzaWduYWwsIHdpdGggcG9sYXJpdHkgKC0xNy4uMTcpIik7CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyICpsY2RfY2hhcl9jb252OwogCkBAIC01NzIsMTIgKzYwMywxMiBAQAogCiAvKiBGSVhNRTogdGhpcyBzaG91bGQgYmUgY29udmVydGVkIHRvIGEgYml0IGFycmF5IGNvbnRhaW5pbmcgc2lnbmFscyBzdGF0ZXMgKi8KIHN0YXRpYyBzdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIgZTsJLyogcGFyYWxsZWwgTENEIEUgICAoZGF0YSBsYXRjaCBvbiBmYWxsaW5nIGVkZ2UpICovCi0JdW5zaWduZWQgY2hhciByczsJLyogcGFyYWxsZWwgTENEIFJTICAoMCA9IGNtZCwgMSA9IGRhdGEpICovCi0JdW5zaWduZWQgY2hhciBydzsJLyogcGFyYWxsZWwgTENEIFIvVyAoMCA9IFcsIDEgPSBSKSAqLwotCXVuc2lnbmVkIGNoYXIgYmw7CS8qIHBhcmFsbGVsIExDRCBiYWNrbGlnaHQgKDAgPSBvZmYsIDEgPSBvbikgKi8KLQl1bnNpZ25lZCBjaGFyIGNsOwkvKiBzZXJpYWwgTENEIGNsb2NrIChsYXRjaCBvbiByaXNpbmcgZWRnZSkgKi8KLQl1bnNpZ25lZCBjaGFyIGRhOwkvKiBzZXJpYWwgTENEIGRhdGEgKi8KKwl1bnNpZ25lZCBjaGFyIGU7ICAvKiBwYXJhbGxlbCBMQ0QgRSAoZGF0YSBsYXRjaCBvbiBmYWxsaW5nIGVkZ2UpICovCisJdW5zaWduZWQgY2hhciByczsgLyogcGFyYWxsZWwgTENEIFJTICAoMCA9IGNtZCwgMSA9IGRhdGEpICovCisJdW5zaWduZWQgY2hhciBydzsgLyogcGFyYWxsZWwgTENEIFIvVyAoMCA9IFcsIDEgPSBSKSAqLworCXVuc2lnbmVkIGNoYXIgYmw7IC8qIHBhcmFsbGVsIExDRCBiYWNrbGlnaHQgKDAgPSBvZmYsIDEgPSBvbikgKi8KKwl1bnNpZ25lZCBjaGFyIGNsOyAvKiBzZXJpYWwgTENEIGNsb2NrIChsYXRjaCBvbiByaXNpbmcgZWRnZSkgKi8KKwl1bnNpZ25lZCBjaGFyIGRhOyAvKiBzZXJpYWwgTENEIGRhdGEgKi8KIH0gYml0czsKIAogc3RhdGljIHZvaWQgaW5pdF9zY2FuX3RpbWVyKHZvaWQpOwpAQCAtNjY2LDcgKzY5Nyw3IEBACiAJCWNfYml0ID0gUE5MX1BBVVRPTEY7CiAJCWludiA9ICFpbnY7CiAJCWJyZWFrOwotCWNhc2UgUElOX0lOSVRQOgkvKiBpbml0LCBkaXJlY3QgKi8KKwljYXNlIFBJTl9JTklUUDoJCS8qIGluaXQsIGRpcmVjdCAqLwogCQljX2JpdCA9IFBOTF9QSU5JVFA7CiAJCWJyZWFrOwogCWNhc2UgUElOX1NFTEVDUDoJLyogc2VsZWN0X2luLCBpbnZlcnRlZCAqLwpAQCAtNjk4LDIzICs3MjksMjMgQEAKIAl9CiB9CiAKLS8qIHNlbmQgYSBzZXJpYWwgYnl0ZSB0byB0aGUgTENEIHBhbmVsLiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBsb2NraW5nIGlmIG5lZWRlZC4gKi8KKy8qIHNlbmQgYSBzZXJpYWwgYnl0ZSB0byB0aGUgTENEIHBhbmVsLiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBsb2NraW5nCisgICBpZiBuZWVkZWQuICovCiBzdGF0aWMgdm9pZCBsY2Rfc2VuZF9zZXJpYWwoaW50IGJ5dGUpCiB7CiAJaW50IGJpdDsKIAogCS8qIHRoZSBkYXRhIGJpdCBpcyBzZXQgb24gRDAsIGFuZCB0aGUgY2xvY2sgb24gU1RST0JFLgotCSAqIExDRCByZWFkcyBEMCBvbiBTVFJPQkUncyByaXNpbmcgZWRnZS4KLQkgKi8KKwkgKiBMQ0QgcmVhZHMgRDAgb24gU1RST0JFJ3MgcmlzaW5nIGVkZ2UuICovCiAJZm9yIChiaXQgPSAwOyBiaXQgPCA4OyBiaXQrKykgewogCQliaXRzLmNsID0gQklUX0NMUjsJLyogQ0xLIGxvdyAqLwogCQlwYW5lbF9zZXRfYml0cygpOwogCQliaXRzLmRhID0gYnl0ZSAmIDE7CiAJCXBhbmVsX3NldF9iaXRzKCk7Ci0JCXVkZWxheSgyKTsJLyogbWFpbnRhaW4gdGhlIGRhdGEgZHVyaW5nIDIgdXMgYmVmb3JlIENMSyB1cCAqLworCQl1ZGVsYXkoMik7ICAvKiBtYWludGFpbiB0aGUgZGF0YSBkdXJpbmcgMiB1cyBiZWZvcmUgQ0xLIHVwICovCiAJCWJpdHMuY2wgPSBCSVRfU0VUOwkvKiBDTEsgaGlnaCAqLwogCQlwYW5lbF9zZXRfYml0cygpOwotCQl1ZGVsYXkoMSk7CS8qIG1haW50YWluIHRoZSBzdHJvYmUgZHVyaW5nIDEgdXMgKi8KKwkJdWRlbGF5KDEpOyAgLyogbWFpbnRhaW4gdGhlIHN0cm9iZSBkdXJpbmcgMSB1cyAqLwogCQlieXRlID4+PSAxOwogCX0KIH0KQEAgLTc2MCwxOSArNzkxLDE5IEBACiAJc3Bpbl9sb2NrKCZwcHJ0X2xvY2spOwogCS8qIHByZXNlbnQgdGhlIGRhdGEgdG8gdGhlIGRhdGEgcG9ydCAqLwogCXdfZHRyKHBwcnQsIGNtZCk7Ci0JdWRlbGF5KDIwKTsJCS8qIG1haW50YWluIHRoZSBkYXRhIGR1cmluZyAyMCB1cyBiZWZvcmUgdGhlIHN0cm9iZSAqLworCXVkZWxheSgyMCk7CS8qIG1haW50YWluIHRoZSBkYXRhIGR1cmluZyAyMCB1cyBiZWZvcmUgdGhlIHN0cm9iZSAqLwogCiAJYml0cy5lID0gQklUX1NFVDsKIAliaXRzLnJzID0gQklUX0NMUjsKIAliaXRzLnJ3ID0gQklUX0NMUjsKIAlzZXRfY3RybF9iaXRzKCk7CiAKLQl1ZGVsYXkoNDApOwkJLyogbWFpbnRhaW4gdGhlIHN0cm9iZSBkdXJpbmcgNDAgdXMgKi8KKwl1ZGVsYXkoNDApOwkvKiBtYWludGFpbiB0aGUgc3Ryb2JlIGR1cmluZyA0MCB1cyAqLwogCiAJYml0cy5lID0gQklUX0NMUjsKIAlzZXRfY3RybF9iaXRzKCk7CiAKLQl1ZGVsYXkoMTIwKTsJCS8qIHRoZSBzaG9ydGVzdCBjb21tYW5kIHRha2VzIGF0IGxlYXN0IDEyMCB1cyAqLworCXVkZWxheSgxMjApOwkvKiB0aGUgc2hvcnRlc3QgY29tbWFuZCB0YWtlcyBhdCBsZWFzdCAxMjAgdXMgKi8KIAlzcGluX3VubG9jaygmcHBydF9sb2NrKTsKIH0KIApAQCAtNzgyLDE5ICs4MTMsMTkgQEAKIAlzcGluX2xvY2soJnBwcnRfbG9jayk7CiAJLyogcHJlc2VudCB0aGUgZGF0YSB0byB0aGUgZGF0YSBwb3J0ICovCiAJd19kdHIocHBydCwgZGF0YSk7Ci0JdWRlbGF5KDIwKTsJCS8qIG1haW50YWluIHRoZSBkYXRhIGR1cmluZyAyMCB1cyBiZWZvcmUgdGhlIHN0cm9iZSAqLworCXVkZWxheSgyMCk7CS8qIG1haW50YWluIHRoZSBkYXRhIGR1cmluZyAyMCB1cyBiZWZvcmUgdGhlIHN0cm9iZSAqLwogCiAJYml0cy5lID0gQklUX1NFVDsKIAliaXRzLnJzID0gQklUX1NFVDsKIAliaXRzLnJ3ID0gQklUX0NMUjsKIAlzZXRfY3RybF9iaXRzKCk7CiAKLQl1ZGVsYXkoNDApOwkJLyogbWFpbnRhaW4gdGhlIHN0cm9iZSBkdXJpbmcgNDAgdXMgKi8KKwl1ZGVsYXkoNDApOwkvKiBtYWludGFpbiB0aGUgc3Ryb2JlIGR1cmluZyA0MCB1cyAqLwogCiAJYml0cy5lID0gQklUX0NMUjsKIAlzZXRfY3RybF9iaXRzKCk7CiAKLQl1ZGVsYXkoNDUpOwkJLyogdGhlIHNob3J0ZXN0IGRhdGEgdGFrZXMgYXQgbGVhc3QgNDUgdXMgKi8KKwl1ZGVsYXkoNDUpOwkvKiB0aGUgc2hvcnRlc3QgZGF0YSB0YWtlcyBhdCBsZWFzdCA0NSB1cyAqLwogCXNwaW5fdW5sb2NrKCZwcHJ0X2xvY2spOwogfQogCkBAIC04MjIsNyArODUzLDggQEAKIHsKIAlsY2Rfd3JpdGVfY21kKDB4ODAJLyogc2V0IEREUkFNIGFkZHJlc3MgKi8KIAkJICAgICAgfCAobGNkX2FkZHJfeSA/IGxjZF9od2lkdGggOiAwKQotCQkgICAgICAvKiB3ZSBmb3JjZSB0aGUgY3Vyc29yIHRvIHN0YXkgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSBpZiBpdCB3YW50cyB0byBnbyBmYXJ0aGVyICovCisJCSAgICAgIC8qIHdlIGZvcmNlIHRoZSBjdXJzb3IgdG8gc3RheSBhdCB0aGUgZW5kIG9mIHRoZQorCQkJIGxpbmUgaWYgaXQgd2FudHMgdG8gZ28gZmFydGhlciAqLwogCQkgICAgICB8ICgobGNkX2FkZHJfeCA8IGxjZF9id2lkdGgpID8gbGNkX2FkZHJfeCAmCiAJCQkgKGxjZF9od2lkdGggLSAxKSA6IGxjZF9id2lkdGggLSAxKSk7CiB9CkBAIC04NzEsMTkgKzkwMywyMyBAQAogCWZvciAocG9zID0gMDsgcG9zIDwgbGNkX2hlaWdodCAqIGxjZF9od2lkdGg7IHBvcysrKSB7CiAJCS8qIHByZXNlbnQgdGhlIGRhdGEgdG8gdGhlIGRhdGEgcG9ydCAqLwogCQl3X2R0cihwcHJ0LCAnICcpOwotCQl1ZGVsYXkoMjApOwkvKiBtYWludGFpbiB0aGUgZGF0YSBkdXJpbmcgMjAgdXMgYmVmb3JlIHRoZSBzdHJvYmUgKi8KKworCQkvKiBtYWludGFpbiB0aGUgZGF0YSBkdXJpbmcgMjAgdXMgYmVmb3JlIHRoZSBzdHJvYmUgKi8KKwkJdWRlbGF5KDIwKTsKIAogCQliaXRzLmUgPSBCSVRfU0VUOwogCQliaXRzLnJzID0gQklUX1NFVDsKIAkJYml0cy5ydyA9IEJJVF9DTFI7CiAJCXNldF9jdHJsX2JpdHMoKTsKIAotCQl1ZGVsYXkoNDApOwkvKiBtYWludGFpbiB0aGUgc3Ryb2JlIGR1cmluZyA0MCB1cyAqLworCQkvKiBtYWludGFpbiB0aGUgc3Ryb2JlIGR1cmluZyA0MCB1cyAqLworCQl1ZGVsYXkoNDApOwogCiAJCWJpdHMuZSA9IEJJVF9DTFI7CiAJCXNldF9jdHJsX2JpdHMoKTsKIAotCQl1ZGVsYXkoNDUpOwkvKiB0aGUgc2hvcnRlc3QgZGF0YSB0YWtlcyBhdCBsZWFzdCA0NSB1cyAqLworCQkvKiB0aGUgc2hvcnRlc3QgZGF0YSB0YWtlcyBhdCBsZWFzdCA0NSB1cyAqLworCQl1ZGVsYXkoNDUpOwogCX0KIAlzcGluX3VubG9jaygmcHBydF9sb2NrKTsKIApAQCAtOTU0LDcgKzk5MCw4IEBACiAKIAlsb25nX3NsZWVwKDEwKTsKIAotCWxjZF93cml0ZV9jbWQoMHgwNik7CS8qIGVudHJ5IG1vZGUgc2V0IDogaW5jcmVtZW50LCBjdXJzb3Igc2hpZnRpbmcgKi8KKwkvKiBlbnRyeSBtb2RlIHNldCA6IGluY3JlbWVudCwgY3Vyc29yIHNoaWZ0aW5nICovCisJbGNkX3dyaXRlX2NtZCgweDA2KTsKIAogCWxjZF9jbGVhcl9kaXNwbGF5KCk7CiB9CkBAIC05NjYsMzE3ICsxMDAzLDMzNiBAQAogICoKICAqLwogCitzdGF0aWMgaW5saW5lIGludCBoYW5kbGVfbGNkX3NwZWNpYWxfY29kZSh2b2lkKQoreworCS8qIExDRCBzcGVjaWFsIGNvZGVzICovCisKKwlpbnQgcHJvY2Vzc2VkID0gMDsKKworCWNoYXIgKmVzYyA9IGxjZF9lc2NhcGUgKyAyOworCWludCBvbGRmbGFncyA9IGxjZF9mbGFnczsKKworCS8qIGNoZWNrIGZvciBkaXNwbGF5IG1vZGUgZmxhZ3MgKi8KKwlzd2l0Y2ggKCplc2MpIHsKKwljYXNlICdEJzoJLyogRGlzcGxheSBPTiAqLworCQlsY2RfZmxhZ3MgfD0gTENEX0ZMQUdfRDsKKwkJcHJvY2Vzc2VkID0gMTsKKwkJYnJlYWs7CisJY2FzZSAnZCc6CS8qIERpc3BsYXkgT0ZGICovCisJCWxjZF9mbGFncyAmPSB+TENEX0ZMQUdfRDsKKwkJcHJvY2Vzc2VkID0gMTsKKwkJYnJlYWs7CisJY2FzZSAnQyc6CS8qIEN1cnNvciBPTiAqLworCQlsY2RfZmxhZ3MgfD0gTENEX0ZMQUdfQzsKKwkJcHJvY2Vzc2VkID0gMTsKKwkJYnJlYWs7CisJY2FzZSAnYyc6CS8qIEN1cnNvciBPRkYgKi8KKwkJbGNkX2ZsYWdzICY9IH5MQ0RfRkxBR19DOworCQlwcm9jZXNzZWQgPSAxOworCQlicmVhazsKKwljYXNlICdCJzoJLyogQmxpbmsgT04gKi8KKwkJbGNkX2ZsYWdzIHw9IExDRF9GTEFHX0I7CisJCXByb2Nlc3NlZCA9IDE7CisJCWJyZWFrOworCWNhc2UgJ2InOgkvKiBCbGluayBPRkYgKi8KKwkJbGNkX2ZsYWdzICY9IH5MQ0RfRkxBR19COworCQlwcm9jZXNzZWQgPSAxOworCQlicmVhazsKKwljYXNlICcrJzoJLyogQmFjayBsaWdodCBPTiAqLworCQlsY2RfZmxhZ3MgfD0gTENEX0ZMQUdfTDsKKwkJcHJvY2Vzc2VkID0gMTsKKwkJYnJlYWs7CisJY2FzZSAnLSc6CS8qIEJhY2sgbGlnaHQgT0ZGICovCisJCWxjZF9mbGFncyAmPSB+TENEX0ZMQUdfTDsKKwkJcHJvY2Vzc2VkID0gMTsKKwkJYnJlYWs7CisJY2FzZSAnKic6CisJCS8qIGZsYXNoIGJhY2sgbGlnaHQgdXNpbmcgdGhlIGtleXBhZCB0aW1lciAqLworCQlpZiAoc2Nhbl90aW1lci5mdW5jdGlvbiAhPSBOVUxMKSB7CisJCQlpZiAobGlnaHRfdGVtcG8gPT0gMCAmJiAoKGxjZF9mbGFncyAmIExDRF9GTEFHX0wpID09IDApKQorCQkJCWxjZF9iYWNrbGlnaHQoMSk7CisJCQlsaWdodF90ZW1wbyA9IEZMQVNIX0xJR0hUX1RFTVBPOworCQl9CisJCXByb2Nlc3NlZCA9IDE7CisJCWJyZWFrOworCWNhc2UgJ2YnOgkvKiBTbWFsbCBGb250ICovCisJCWxjZF9mbGFncyAmPSB+TENEX0ZMQUdfRjsKKwkJcHJvY2Vzc2VkID0gMTsKKwkJYnJlYWs7CisJY2FzZSAnRic6CS8qIExhcmdlIEZvbnQgKi8KKwkJbGNkX2ZsYWdzIHw9IExDRF9GTEFHX0Y7CisJCXByb2Nlc3NlZCA9IDE7CisJCWJyZWFrOworCWNhc2UgJ24nOgkvKiBPbmUgTGluZSAqLworCQlsY2RfZmxhZ3MgJj0gfkxDRF9GTEFHX047CisJCXByb2Nlc3NlZCA9IDE7CisJCWJyZWFrOworCWNhc2UgJ04nOgkvKiBUd28gTGluZXMgKi8KKwkJbGNkX2ZsYWdzIHw9IExDRF9GTEFHX047CisJCWJyZWFrOworCWNhc2UgJ2wnOgkvKiBTaGlmdCBDdXJzb3IgTGVmdCAqLworCQlpZiAobGNkX2FkZHJfeCA+IDApIHsKKwkJCS8qIGJhY2sgb25lIGNoYXIgaWYgbm90IGF0IGVuZCBvZiBsaW5lICovCisJCQlpZiAobGNkX2FkZHJfeCA8IGxjZF9id2lkdGgpCisJCQkJbGNkX3dyaXRlX2NtZCgweDEwKTsKKwkJCWxjZF9hZGRyX3gtLTsKKwkJfQorCQlwcm9jZXNzZWQgPSAxOworCQlicmVhazsKKwljYXNlICdyJzoJLyogc2hpZnQgY3Vyc29yIHJpZ2h0ICovCisJCWlmIChsY2RfYWRkcl94IDwgbGNkX3dpZHRoKSB7CisJCQkvKiBhbGxvdyB0aGUgY3Vyc29yIHRvIHBhc3MgdGhlIGVuZCBvZiB0aGUgbGluZSAqLworCQkJaWYgKGxjZF9hZGRyX3ggPAorCQkJICAgIChsY2RfYndpZHRoIC0gMSkpCisJCQkJbGNkX3dyaXRlX2NtZCgweDE0KTsKKwkJCWxjZF9hZGRyX3grKzsKKwkJfQorCQlwcm9jZXNzZWQgPSAxOworCQlicmVhazsKKwljYXNlICdMJzoJLyogc2hpZnQgZGlzcGxheSBsZWZ0ICovCisJCWxjZF9sZWZ0X3NoaWZ0Kys7CisJCWxjZF93cml0ZV9jbWQoMHgxOCk7CisJCXByb2Nlc3NlZCA9IDE7CisJCWJyZWFrOworCWNhc2UgJ1InOgkvKiBzaGlmdCBkaXNwbGF5IHJpZ2h0ICovCisJCWxjZF9sZWZ0X3NoaWZ0LS07CisJCWxjZF93cml0ZV9jbWQoMHgxQyk7CisJCXByb2Nlc3NlZCA9IDE7CisJCWJyZWFrOworCWNhc2UgJ2snOiB7CS8qIGtpbGwgZW5kIG9mIGxpbmUgKi8KKwkJaW50IHg7CisJCWZvciAoeCA9IGxjZF9hZGRyX3g7IHggPCBsY2RfYndpZHRoOyB4KyspCisJCQlsY2Rfd3JpdGVfZGF0YSgnICcpOworCisJCS8qIHJlc3RvcmUgY3Vyc29yIHBvc2l0aW9uICovCisJCWxjZF9nb3RveHkoKTsKKwkJcHJvY2Vzc2VkID0gMTsKKwkJYnJlYWs7CisJfQorCWNhc2UgJ0knOgkvKiByZWluaXRpYWxpemUgZGlzcGxheSAqLworCQlsY2RfaW5pdF9kaXNwbGF5KCk7CisJCWxjZF9sZWZ0X3NoaWZ0ID0gMDsKKwkJcHJvY2Vzc2VkID0gMTsKKwkJYnJlYWs7CisJY2FzZSAnRyc6IHsKKwkJLyogR2VuZXJhdG9yIDogTEdjeHh4eHguLi54eDsgbXVzdCBoYXZlIDxjPiBiZXR3ZWVuICcwJworCQkgKiBhbmQgJzcnLCByZXByZXNlbnRpbmcgdGhlIG51bWVyaWNhbCBBU0NJSSBjb2RlIG9mIHRoZQorCQkgKiByZWRlZmluZWQgY2hhcmFjdGVyLCBhbmQgPHh4Li4ueHg+IGEgc2VxdWVuY2Ugb2YgMTYKKwkJICogaGV4IGRpZ2l0cyByZXByZXNlbnRpbmcgOCBieXRlcyBmb3IgZWFjaCBjaGFyYWN0ZXIuCisJCSAqIE1vc3QgTENEcyB3aWxsIG9ubHkgdXNlIDUgbG93ZXIgYml0cyBvZiB0aGUgNyBmaXJzdAorCQkgKiBieXRlcy4KKwkJICovCisKKwkJdW5zaWduZWQgY2hhciBjZ2J5dGVzWzhdOworCQl1bnNpZ25lZCBjaGFyIGNnYWRkcjsKKwkJaW50IGNnb2Zmc2V0OworCQlpbnQgc2hpZnQ7CisJCWNoYXIgdmFsdWU7CisJCWludCBhZGRyOworCisJCWlmIChzdHJjaHIoZXNjLCAnOycpID09IE5VTEwpCisJCQlicmVhazsKKworCQllc2MrKzsKKworCQljZ2FkZHIgPSAqKGVzYysrKSAtICcwJzsKKwkJaWYgKGNnYWRkciA+IDcpIHsKKwkJCXByb2Nlc3NlZCA9IDE7CisJCQlicmVhazsKKwkJfQorCisJCWNnb2Zmc2V0ID0gMDsKKwkJc2hpZnQgPSAwOworCQl2YWx1ZSA9IDA7CisJCXdoaWxlICgqZXNjICYmIGNnb2Zmc2V0IDwgOCkgeworCQkJc2hpZnQgXj0gNDsKKwkJCWlmICgqZXNjID49ICcwJyAmJiAqZXNjIDw9ICc5JykKKwkJCQl2YWx1ZSB8PSAoKmVzYyAtICcwJykgPDwgc2hpZnQ7CisJCQllbHNlIGlmICgqZXNjID49ICdBJyAmJiAqZXNjIDw9ICdaJykKKwkJCQl2YWx1ZSB8PSAoKmVzYyAtICdBJyArIDEwKSA8PCBzaGlmdDsKKwkJCWVsc2UgaWYgKCplc2MgPj0gJ2EnICYmICplc2MgPD0gJ3onKQorCQkJCXZhbHVlIHw9ICgqZXNjIC0gJ2EnICsgMTApIDw8IHNoaWZ0OworCQkJZWxzZSB7CisJCQkJZXNjKys7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChzaGlmdCA9PSAwKSB7CisJCQkJY2dieXRlc1tjZ29mZnNldCsrXSA9IHZhbHVlOworCQkJCXZhbHVlID0gMDsKKwkJCX0KKworCQkJZXNjKys7CisJCX0KKworCQlsY2Rfd3JpdGVfY21kKDB4NDAgfCAoY2dhZGRyICogOCkpOworCQlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgY2dvZmZzZXQ7IGFkZHIrKykKKwkJCWxjZF93cml0ZV9kYXRhKGNnYnl0ZXNbYWRkcl0pOworCisJCS8qIGVuc3VyZXMgdGhhdCB3ZSBzdG9wIHdyaXRpbmcgdG8gQ0dSQU0gKi8KKwkJbGNkX2dvdG94eSgpOworCQlwcm9jZXNzZWQgPSAxOworCQlicmVhazsKKwl9CisJY2FzZSAneCc6CS8qIGdvdG94eSA6IEx4WFhYW3lZWVldOyAqLworCWNhc2UgJ3knOgkvKiBnb3RveHkgOiBMeVlZWVt4WFhYXTsgKi8KKwkJaWYgKHN0cmNocihlc2MsICc7JykgPT0gTlVMTCkKKwkJCWJyZWFrOworCisJCXdoaWxlICgqZXNjKSB7CisJCQljaGFyICplbmRwOworCisJCQlpZiAoKmVzYyA9PSAneCcpIHsKKwkJCQllc2MrKzsKKwkJCQlsY2RfYWRkcl94ID0gc2ltcGxlX3N0cnRvdWwoZXNjLCAmZW5kcCwgMTApOworCQkJCWVzYyA9IGVuZHA7CisJCQl9IGVsc2UgaWYgKCplc2MgPT0gJ3knKSB7CisJCQkJZXNjKys7CisJCQkJbGNkX2FkZHJfeSA9IHNpbXBsZV9zdHJ0b3VsKGVzYywgJmVuZHAsIDEwKTsKKwkJCQllc2MgPSBlbmRwOworCQkJfSBlbHNlCisJCQkJYnJlYWs7CisJCX0KKworCQlsY2RfZ290b3h5KCk7CisJCXByb2Nlc3NlZCA9IDE7CisJCWJyZWFrOworCX0KKworCS8qIENoZWNrIHdldGhlciBvbmUgZmxhZyB3YXMgY2hhbmdlZCAqLworCWlmIChvbGRmbGFncyAhPSBsY2RfZmxhZ3MpIHsKKwkJLyogY2hlY2sgd2hldGhlciBvbmUgb2YgQixDLEQgZmxhZ3Mgd2VyZSBjaGFuZ2VkICovCisJCWlmICgob2xkZmxhZ3MgXiBsY2RfZmxhZ3MpICYKKwkJICAgIChMQ0RfRkxBR19CIHwgTENEX0ZMQUdfQyB8IExDRF9GTEFHX0QpKQorCQkJLyogc2V0IGRpc3BsYXkgbW9kZSAqLworCQkJbGNkX3dyaXRlX2NtZCgweDA4CisJCQkJICAgICAgfCAoKGxjZF9mbGFncyAmIExDRF9GTEFHX0QpID8gNCA6IDApCisJCQkJICAgICAgfCAoKGxjZF9mbGFncyAmIExDRF9GTEFHX0MpID8gMiA6IDApCisJCQkJICAgICAgfCAoKGxjZF9mbGFncyAmIExDRF9GTEFHX0IpID8gMSA6IDApKTsKKwkJLyogY2hlY2sgd2hldGhlciBvbmUgb2YgRixOIGZsYWdzIHdhcyBjaGFuZ2VkICovCisJCWVsc2UgaWYgKChvbGRmbGFncyBeIGxjZF9mbGFncykgJiAoTENEX0ZMQUdfRiB8IExDRF9GTEFHX04pKQorCQkJbGNkX3dyaXRlX2NtZCgweDMwCisJCQkJICAgICAgfCAoKGxjZF9mbGFncyAmIExDRF9GTEFHX0YpID8gNCA6IDApCisJCQkJICAgICAgfCAoKGxjZF9mbGFncyAmIExDRF9GTEFHX04pID8gOCA6IDApKTsKKwkJLyogY2hlY2sgd2V0aGVyIEwgZmxhZyB3YXMgY2hhbmdlZCAqLworCQllbHNlIGlmICgob2xkZmxhZ3MgXiBsY2RfZmxhZ3MpICYgKExDRF9GTEFHX0wpKSB7CisJCQlpZiAobGNkX2ZsYWdzICYgKExDRF9GTEFHX0wpKQorCQkJCWxjZF9iYWNrbGlnaHQoMSk7CisJCQllbHNlIGlmIChsaWdodF90ZW1wbyA9PSAwKQorCQkJCS8qIHN3aXRjaCBvZmYgdGhlIGxpZ2h0IG9ubHkgd2hlbiB0aGUgdGVtcG8KKwkJCQkgICBsaWdodGluZyBpcyBnb25lICovCisJCQkJbGNkX2JhY2tsaWdodCgwKTsKKwkJfQorCX0KKworCXJldHVybiBwcm9jZXNzZWQ7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGxjZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCiAJY29uc3QgY2hhciAqdG1wID0gYnVmOwogCWNoYXIgYzsKIAogCWZvciAoOyBjb3VudC0tID4gMDsgKHBwb3MgPyAoKnBwb3MpKysgOiAwKSwgKyt0bXApIHsKIAkJaWYgKCFpbl9pbnRlcnJ1cHQoKSAmJiAoKChjb3VudCArIDEpICYgMHgxZikgPT0gMCkpCi0JCQlzY2hlZHVsZSgpOwkvKiBsZXQncyBiZSBhIGxpdHRsZSBuaWNlIHdpdGggb3RoZXIgcHJvY2Vzc2VzIHRoYXQgbmVlZCBzb21lIENQVSAqLworCQkJLyogbGV0J3MgYmUgYSBsaXR0bGUgbmljZSB3aXRoIG90aGVyIHByb2Nlc3NlcworCQkJICAgdGhhdCBuZWVkIHNvbWUgQ1BVICovCisJCQlzY2hlZHVsZSgpOwogCiAJCWlmIChwcG9zID09IE5VTEwgJiYgZmlsZSA9PSBOVUxMKQotCQkJYyA9ICp0bXA7CS8qIGxldCdzIG5vdCB1c2UgZ2V0X3VzZXIoKSBmcm9tIHRoZSBrZXJuZWwgISAqLworCQkJLyogbGV0J3Mgbm90IHVzZSBnZXRfdXNlcigpIGZyb20gdGhlIGtlcm5lbCAhICovCisJCQljID0gKnRtcDsKIAkJZWxzZSBpZiAoZ2V0X3VzZXIoYywgdG1wKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCiAJCS8qIGZpcnN0LCB3ZSdsbCB0ZXN0IGlmIHdlJ3JlIGluIGVzY2FwZSBtb2RlICovCi0JCWlmICgoYyAhPSAnXG4nKSAmJiBsY2RfZXNjYXBlX2xlbiA+PSAwKSB7CS8qIHllcywgbGV0J3MgYWRkIHRoaXMgY2hhciB0byB0aGUgYnVmZmVyICovCisJCWlmICgoYyAhPSAnXG4nKSAmJiBsY2RfZXNjYXBlX2xlbiA+PSAwKSB7CisJCQkvKiB5ZXMsIGxldCdzIGFkZCB0aGlzIGNoYXIgdG8gdGhlIGJ1ZmZlciAqLwogCQkJbGNkX2VzY2FwZVtsY2RfZXNjYXBlX2xlbisrXSA9IGM7CiAJCQlsY2RfZXNjYXBlW2xjZF9lc2NhcGVfbGVuXSA9IDA7CiAJCX0gZWxzZSB7Ci0JCQlsY2RfZXNjYXBlX2xlbiA9IC0xOwkvKiBhYm9ydHMgYW55IHByZXZpb3VzIGVzY2FwZSBzZXF1ZW5jZSAqLworCQkJLyogYWJvcnRzIGFueSBwcmV2aW91cyBlc2NhcGUgc2VxdWVuY2UgKi8KKwkJCWxjZF9lc2NhcGVfbGVuID0gLTE7CiAKIAkJCXN3aXRjaCAoYykgewotCQkJY2FzZSBMQ0RfRVNDQVBFX0NIQVI6CS8qIHN0YXJ0IG9mIGFuIGVzY2FwZSBzZXF1ZW5jZSAqLworCQkJY2FzZSBMQ0RfRVNDQVBFX0NIQVI6CisJCQkJLyogc3RhcnQgb2YgYW4gZXNjYXBlIHNlcXVlbmNlICovCiAJCQkJbGNkX2VzY2FwZV9sZW4gPSAwOwogCQkJCWxjZF9lc2NhcGVbbGNkX2VzY2FwZV9sZW5dID0gMDsKIAkJCQlicmVhazsKLQkJCWNhc2UgJ1xiJzoJLyogZ28gYmFjayBvbmUgY2hhciBhbmQgY2xlYXIgaXQgKi8KKwkJCWNhc2UgJ1xiJzoKKwkJCQkvKiBnbyBiYWNrIG9uZSBjaGFyIGFuZCBjbGVhciBpdCAqLwogCQkJCWlmIChsY2RfYWRkcl94ID4gMCkgewotCQkJCQlpZiAobGNkX2FkZHJfeCA8IGxjZF9id2lkdGgpCS8qIGNoZWNrIGlmIHdlJ3JlIG5vdCBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lICovCi0JCQkJCQlsY2Rfd3JpdGVfY21kKDB4MTApOwkvKiBiYWNrIG9uZSBjaGFyICovCisJCQkJCS8qIGNoZWNrIGlmIHdlJ3JlIG5vdCBhdCB0aGUKKwkJCQkJICAgZW5kIG9mIHRoZSBsaW5lICovCisJCQkJCWlmIChsY2RfYWRkcl94IDwgbGNkX2J3aWR0aCkKKwkJCQkJCS8qIGJhY2sgb25lIGNoYXIgKi8KKwkJCQkJCWxjZF93cml0ZV9jbWQoMHgxMCk7CiAJCQkJCWxjZF9hZGRyX3gtLTsKIAkJCQl9Ci0JCQkJbGNkX3dyaXRlX2RhdGEoJyAnKTsJLyogcmVwbGFjZSB3aXRoIGEgc3BhY2UgKi8KLQkJCQlsY2Rfd3JpdGVfY21kKDB4MTApOwkvKiBiYWNrIG9uZSBjaGFyIGFnYWluICovCisJCQkJLyogcmVwbGFjZSB3aXRoIGEgc3BhY2UgKi8KKwkJCQlsY2Rfd3JpdGVfZGF0YSgnICcpOworCQkJCS8qIGJhY2sgb25lIGNoYXIgYWdhaW4gKi8KKwkJCQlsY2Rfd3JpdGVfY21kKDB4MTApOwogCQkJCWJyZWFrOwotCQkJY2FzZSAnXDAxNCc6CS8qIHF1aWNrbHkgY2xlYXIgdGhlIGRpc3BsYXkgKi8KKwkJCWNhc2UgJ1wwMTQnOgorCQkJCS8qIHF1aWNrbHkgY2xlYXIgdGhlIGRpc3BsYXkgKi8KIAkJCQlsY2RfY2xlYXJfZmFzdCgpOwogCQkJCWJyZWFrOwotCQkJY2FzZSAnXG4nOgkvKiBmbHVzaCB0aGUgcmVtYWluZGVyIG9mIHRoZSBjdXJyZW50IGxpbmUgYW5kIGdvIHRvIHRoZQotCQkJCQkgICBiZWdpbm5pbmcgb2YgdGhlIG5leHQgbGluZSAqLworCQkJY2FzZSAnXG4nOgorCQkJCS8qIGZsdXNoIHRoZSByZW1haW5kZXIgb2YgdGhlIGN1cnJlbnQgbGluZSBhbmQKKwkJCQkgICBnbyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGxpbmUgKi8KIAkJCQlmb3IgKDsgbGNkX2FkZHJfeCA8IGxjZF9id2lkdGg7IGxjZF9hZGRyX3grKykKIAkJCQkJbGNkX3dyaXRlX2RhdGEoJyAnKTsKIAkJCQlsY2RfYWRkcl94ID0gMDsKIAkJCQlsY2RfYWRkcl95ID0gKGxjZF9hZGRyX3kgKyAxKSAlIGxjZF9oZWlnaHQ7CiAJCQkJbGNkX2dvdG94eSgpOwogCQkJCWJyZWFrOwotCQkJY2FzZSAnXHInOgkvKiBnbyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1lIGxpbmUgKi8KKwkJCWNhc2UgJ1xyJzoKKwkJCQkvKiBnbyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1lIGxpbmUgKi8KIAkJCQlsY2RfYWRkcl94ID0gMDsKIAkJCQlsY2RfZ290b3h5KCk7CiAJCQkJYnJlYWs7Ci0JCQljYXNlICdcdCc6CS8qIHByaW50IGEgc3BhY2UgaW5zdGVhZCBvZiB0aGUgdGFiICovCisJCQljYXNlICdcdCc6CisJCQkJLyogcHJpbnQgYSBzcGFjZSBpbnN0ZWFkIG9mIHRoZSB0YWIgKi8KIAkJCQlsY2RfcHJpbnQoJyAnKTsKIAkJCQlicmVhazsKLQkJCWRlZmF1bHQ6CS8qIHNpbXBseSBwcmludCB0aGlzIGNoYXIgKi8KKwkJCWRlZmF1bHQ6CisJCQkJLyogc2ltcGx5IHByaW50IHRoaXMgY2hhciAqLwogCQkJCWxjZF9wcmludChjKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQogCiAJCS8qIG5vdyB3ZSdsbCBzZWUgaWYgd2UncmUgaW4gYW4gZXNjYXBlIG1vZGUgYW5kIGlmIHRoZSBjdXJyZW50Ci0JCSAgIGVzY2FwZSBzZXF1ZW5jZSBjYW4gYmUgdW5kZXJzdG9vZC4KLQkJICovCi0JCWlmIChsY2RfZXNjYXBlX2xlbiA+PSAyKSB7CS8qIG1pbmltYWwgbGVuZ3RoIGZvciBhbiBlc2NhcGUgY29tbWFuZCAqLwotCQkJaW50IHByb2Nlc3NlZCA9IDA7CS8qIDEgbWVhbnMgdGhlIGNvbW1hbmQgaGFzIGJlZW4gcHJvY2Vzc2VkICovCisJCSAgIGVzY2FwZSBzZXF1ZW5jZSBjYW4gYmUgdW5kZXJzdG9vZC4gKi8KKwkJaWYgKGxjZF9lc2NhcGVfbGVuID49IDIpIHsKKwkJCWludCBwcm9jZXNzZWQgPSAwOwogCi0JCQlpZiAoIXN0cmNtcChsY2RfZXNjYXBlLCAiWzJKIikpIHsJLyogQ2xlYXIgdGhlIGRpc3BsYXkgKi8KLQkJCQlsY2RfY2xlYXJfZmFzdCgpOwkvKiBjbGVhciBkaXNwbGF5ICovCisJCQlpZiAoIXN0cmNtcChsY2RfZXNjYXBlLCAiWzJKIikpIHsKKwkJCQkvKiBjbGVhciB0aGUgZGlzcGxheSAqLworCQkJCWxjZF9jbGVhcl9mYXN0KCk7CiAJCQkJcHJvY2Vzc2VkID0gMTsKLQkJCX0gZWxzZSBpZiAoIXN0cmNtcChsY2RfZXNjYXBlLCAiW0giKSkgewkvKiBDdXJzb3IgdG8gaG9tZSAqLworCQkJfSBlbHNlIGlmICghc3RyY21wKGxjZF9lc2NhcGUsICJbSCIpKSB7CisJCQkJLyogY3Vyc29yIHRvIGhvbWUgKi8KIAkJCQlsY2RfYWRkcl94ID0gbGNkX2FkZHJfeSA9IDA7CiAJCQkJbGNkX2dvdG94eSgpOwogCQkJCXByb2Nlc3NlZCA9IDE7CiAJCQl9CiAJCQkvKiBjb2RlcyBzdGFydGluZyB3aXRoIF5bW0wgKi8KIAkJCWVsc2UgaWYgKChsY2RfZXNjYXBlX2xlbiA+PSAzKSAmJgotCQkJCSAobGNkX2VzY2FwZVswXSA9PSAnWycpICYmIChsY2RfZXNjYXBlWzFdID09ICdMJykpIHsJLyogTENEIHNwZWNpYWwgY29kZXMgKi8KLQotCQkJCWNoYXIgKmVzYyA9IGxjZF9lc2NhcGUgKyAyOwotCQkJCWludCBvbGRmbGFncyA9IGxjZF9mbGFnczsKLQotCQkJCS8qIGNoZWNrIGZvciBkaXNwbGF5IG1vZGUgZmxhZ3MgKi8KLQkJCQlzd2l0Y2ggKCplc2MpIHsKLQkJCQljYXNlICdEJzoJLyogRGlzcGxheSBPTiAqLwotCQkJCQlsY2RfZmxhZ3MgfD0gTENEX0ZMQUdfRDsKLQkJCQkJcHJvY2Vzc2VkID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnZCc6CS8qIERpc3BsYXkgT0ZGICovCi0JCQkJCWxjZF9mbGFncyAmPSB+TENEX0ZMQUdfRDsKLQkJCQkJcHJvY2Vzc2VkID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnQyc6CS8qIEN1cnNvciBPTiAqLwotCQkJCQlsY2RfZmxhZ3MgfD0gTENEX0ZMQUdfQzsKLQkJCQkJcHJvY2Vzc2VkID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnYyc6CS8qIEN1cnNvciBPRkYgKi8KLQkJCQkJbGNkX2ZsYWdzICY9IH5MQ0RfRkxBR19DOwotCQkJCQlwcm9jZXNzZWQgPSAxOwotCQkJCQlicmVhazsKLQkJCQljYXNlICdCJzoJLyogQmxpbmsgT04gKi8KLQkJCQkJbGNkX2ZsYWdzIHw9IExDRF9GTEFHX0I7Ci0JCQkJCXByb2Nlc3NlZCA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgJ2InOgkvKiBCbGluayBPRkYgKi8KLQkJCQkJbGNkX2ZsYWdzICY9IH5MQ0RfRkxBR19COwotCQkJCQlwcm9jZXNzZWQgPSAxOwotCQkJCQlicmVhazsKLQkJCQljYXNlICcrJzoJLyogQmFjayBsaWdodCBPTiAqLwotCQkJCQlsY2RfZmxhZ3MgfD0gTENEX0ZMQUdfTDsKLQkJCQkJcHJvY2Vzc2VkID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnLSc6CS8qIEJhY2sgbGlnaHQgT0ZGICovCi0JCQkJCWxjZF9mbGFncyAmPSB+TENEX0ZMQUdfTDsKLQkJCQkJcHJvY2Vzc2VkID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnKic6CS8qIGZsYXNoIGJhY2sgbGlnaHQgdXNpbmcgdGhlIGtleXBhZCB0aW1lciAqLwotCQkJCQlpZiAoc2Nhbl90aW1lci5mdW5jdGlvbiAhPSBOVUxMKSB7Ci0JCQkJCQlpZiAobGlnaHRfdGVtcG8gPT0gMAotCQkJCQkJICAgICYmICgobGNkX2ZsYWdzICYgTENEX0ZMQUdfTCkKLQkJCQkJCQk9PSAwKSkKLQkJCQkJCQlsY2RfYmFja2xpZ2h0KDEpOwotCQkJCQkJbGlnaHRfdGVtcG8gPSBGTEFTSF9MSUdIVF9URU1QTzsKLQkJCQkJfQotCQkJCQlwcm9jZXNzZWQgPSAxOwotCQkJCQlicmVhazsKLQkJCQljYXNlICdmJzoJLyogU21hbGwgRm9udCAqLwotCQkJCQlsY2RfZmxhZ3MgJj0gfkxDRF9GTEFHX0Y7Ci0JCQkJCXByb2Nlc3NlZCA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgJ0YnOgkvKiBMYXJnZSBGb250ICovCi0JCQkJCWxjZF9mbGFncyB8PSBMQ0RfRkxBR19GOwotCQkJCQlwcm9jZXNzZWQgPSAxOwotCQkJCQlicmVhazsKLQkJCQljYXNlICduJzoJLyogT25lIExpbmUgKi8KLQkJCQkJbGNkX2ZsYWdzICY9IH5MQ0RfRkxBR19OOwotCQkJCQlwcm9jZXNzZWQgPSAxOwotCQkJCQlicmVhazsKLQkJCQljYXNlICdOJzoJLyogVHdvIExpbmVzICovCi0JCQkJCWxjZF9mbGFncyB8PSBMQ0RfRkxBR19OOwotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgJ2wnOgkvKiBTaGlmdCBDdXJzb3IgTGVmdCAqLwotCQkJCQlpZiAobGNkX2FkZHJfeCA+IDApIHsKLQkJCQkJCWlmIChsY2RfYWRkcl94IDwgbGNkX2J3aWR0aCkKLQkJCQkJCQlsY2Rfd3JpdGVfY21kKDB4MTApOwkvKiBiYWNrIG9uZSBjaGFyIGlmIG5vdCBhdCBlbmQgb2YgbGluZSAqLwotCQkJCQkJbGNkX2FkZHJfeC0tOwotCQkJCQl9Ci0JCQkJCXByb2Nlc3NlZCA9IDE7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSAncic6CS8qIHNoaWZ0IGN1cnNvciByaWdodCAqLwotCQkJCQlpZiAobGNkX2FkZHJfeCA8IGxjZF93aWR0aCkgewotCQkJCQkJaWYgKGxjZF9hZGRyX3ggPCAobGNkX2J3aWR0aCAtIDEpKQotCQkJCQkJCWxjZF93cml0ZV9jbWQoMHgxNCk7CS8qIGFsbG93IHRoZSBjdXJzb3IgdG8gcGFzcyB0aGUgZW5kIG9mIHRoZSBsaW5lICovCi0JCQkJCQlsY2RfYWRkcl94Kys7Ci0JCQkJCX0KLQkJCQkJcHJvY2Vzc2VkID0gMTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlICdMJzoJLyogc2hpZnQgZGlzcGxheSBsZWZ0ICovCi0JCQkJCWxjZF9sZWZ0X3NoaWZ0Kys7Ci0JCQkJCWxjZF93cml0ZV9jbWQoMHgxOCk7Ci0JCQkJCXByb2Nlc3NlZCA9IDE7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSAnUic6CS8qIHNoaWZ0IGRpc3BsYXkgcmlnaHQgKi8KLQkJCQkJbGNkX2xlZnRfc2hpZnQtLTsKLQkJCQkJbGNkX3dyaXRlX2NtZCgweDFDKTsKLQkJCQkJcHJvY2Vzc2VkID0gMTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlICdrJzp7CS8qIGtpbGwgZW5kIG9mIGxpbmUgKi8KLQkJCQkJCWludCB4OwotCQkJCQkJZm9yICh4ID0gbGNkX2FkZHJfeDsgeCA8IGxjZF9id2lkdGg7IHgrKykKLQkJCQkJCQlsY2Rfd3JpdGVfZGF0YSgnICcpOwotCQkJCQkJbGNkX2dvdG94eSgpOwkvKiByZXN0b3JlIGN1cnNvciBwb3NpdGlvbiAqLwotCQkJCQkJcHJvY2Vzc2VkID0gMTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJY2FzZSAnSSc6CS8qIHJlaW5pdGlhbGl6ZSBkaXNwbGF5ICovCi0JCQkJCWxjZF9pbml0X2Rpc3BsYXkoKTsKLQkJCQkJbGNkX2xlZnRfc2hpZnQgPSAwOwotCQkJCQlwcm9jZXNzZWQgPSAxOwotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgJ0cnOgkvKiBHZW5lcmF0b3IgOiBMR2N4eHh4eC4uLnh4OyAqLyAgewotCQkJCQkJLyogbXVzdCBoYXZlIDxjPiBiZXR3ZWVuICcwJyBhbmQgJzcnLCByZXByZXNlbnRpbmcgdGhlIG51bWVyaWNhbAotCQkJCQkJICogQVNDSUkgY29kZSBvZiB0aGUgcmVkZWZpbmVkIGNoYXJhY3RlciwgYW5kIDx4eC4uLnh4PiBhIHNlcXVlbmNlCi0JCQkJCQkgKiBvZiAxNiBoZXggZGlnaXRzIHJlcHJlc2VudGluZyA4IGJ5dGVzIGZvciBlYWNoIGNoYXJhY3Rlci4gTW9zdAotCQkJCQkJICogTENEcyB3aWxsIG9ubHkgdXNlIDUgbG93ZXIgYml0cyBvZiB0aGUgNyBmaXJzdCBieXRlcy4KLQkJCQkJCSAqLwotCi0JCQkJCQl1bnNpZ25lZCBjaGFyIGNnYnl0ZXNbOF07Ci0JCQkJCQl1bnNpZ25lZCBjaGFyIGNnYWRkcjsKLQkJCQkJCWludCBjZ29mZnNldDsKLQkJCQkJCWludCBzaGlmdDsKLQkJCQkJCWNoYXIgdmFsdWU7Ci0JCQkJCQlpbnQgYWRkcjsKLQotCQkJCQkJaWYgKHN0cmNocihlc2MsICc7JykgPT0gTlVMTCkKLQkJCQkJCQlicmVhazsKLQotCQkJCQkJZXNjKys7Ci0KLQkJCQkJCWNnYWRkciA9ICooZXNjKyspIC0gJzAnOwotCQkJCQkJaWYgKGNnYWRkciA+IDcpIHsKLQkJCQkJCQlwcm9jZXNzZWQgPSAxOwotCQkJCQkJCWJyZWFrOwotCQkJCQkJfQotCi0JCQkJCQljZ29mZnNldCA9IDA7Ci0JCQkJCQlzaGlmdCA9IDA7Ci0JCQkJCQl2YWx1ZSA9IDA7Ci0JCQkJCQl3aGlsZSAoKmVzYyAmJiBjZ29mZnNldCA8IDgpIHsKLQkJCQkJCQlzaGlmdCBePSA0OwotCQkJCQkJCWlmICgqZXNjID49ICcwJyAmJiAqZXNjIDw9ICc5JykKLQkJCQkJCQkJdmFsdWUgfD0gKCplc2MgLSAnMCcpIDw8IHNoaWZ0OwotCQkJCQkJCWVsc2UgaWYgKCplc2MgPj0gJ0EnICYmICplc2MgPD0gJ1onKQotCQkJCQkJCQl2YWx1ZSB8PSAoKmVzYyAtICdBJyArIDEwKSA8PCBzaGlmdDsKLQkJCQkJCQllbHNlIGlmICgqZXNjID49ICdhJyAmJiAqZXNjIDw9ICd6JykKLQkJCQkJCQkJdmFsdWUgfD0gKCplc2MgLSAnYScgKyAxMCkgPDwgc2hpZnQ7Ci0JCQkJCQkJZWxzZSB7Ci0JCQkJCQkJCWVzYysrOwotCQkJCQkJCQljb250aW51ZTsKLQkJCQkJCQl9Ci0KLQkJCQkJCQlpZiAoc2hpZnQgPT0gMCkgewotCQkJCQkJCQljZ2J5dGVzW2Nnb2Zmc2V0KytdID0gdmFsdWU7Ci0JCQkJCQkJCXZhbHVlID0gMDsKLQkJCQkJCQl9Ci0KLQkJCQkJCQllc2MrKzsKLQkJCQkJCX0KLQotCQkJCQkJbGNkX3dyaXRlX2NtZCgweDQwIHwgKGNnYWRkciAqIDgpKTsKLQkJCQkJCWZvciAoYWRkciA9IDA7IGFkZHIgPCBjZ29mZnNldDsgYWRkcisrKQotCQkJCQkJCWxjZF93cml0ZV9kYXRhKGNnYnl0ZXNbYWRkcl0pOwotCi0JCQkJCQlsY2RfZ290b3h5KCk7CS8qIGVuc3VyZXMgdGhhdCB3ZSBzdG9wIHdyaXRpbmcgdG8gQ0dSQU0gKi8KLQkJCQkJCXByb2Nlc3NlZCA9IDE7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCWNhc2UgJ3gnOgkvKiBnb3RveHkgOiBMeFhYWFt5WVlZXTsgKi8KLQkJCQljYXNlICd5JzoJLyogZ290b3h5IDogTHlZWVlbeFhYWF07ICovCi0JCQkJCWlmIChzdHJjaHIoZXNjLCAnOycpID09IE5VTEwpCi0JCQkJCQlicmVhazsKLQotCQkJCQl3aGlsZSAoKmVzYykgewotCQkJCQkJaWYgKCplc2MgPT0gJ3gnKSB7Ci0JCQkJCQkJZXNjKys7Ci0JCQkJCQkJbGNkX2FkZHJfeCA9IDA7Ci0JCQkJCQkJd2hpbGUgKGlzZGlnaXQoKmVzYykpIHsKLQkJCQkJCQkJbGNkX2FkZHJfeCA9Ci0JCQkJCQkJCSAgICBsY2RfYWRkcl94ICoKLQkJCQkJCQkJICAgIDEwICsgKCplc2MgLQotCQkJCQkJCQkJICAnMCcpOwotCQkJCQkJCQllc2MrKzsKLQkJCQkJCQl9Ci0JCQkJCQl9IGVsc2UgaWYgKCplc2MgPT0gJ3knKSB7Ci0JCQkJCQkJZXNjKys7Ci0JCQkJCQkJbGNkX2FkZHJfeSA9IDA7Ci0JCQkJCQkJd2hpbGUgKGlzZGlnaXQoKmVzYykpIHsKLQkJCQkJCQkJbGNkX2FkZHJfeSA9Ci0JCQkJCQkJCSAgICBsY2RfYWRkcl95ICoKLQkJCQkJCQkJICAgIDEwICsgKCplc2MgLQotCQkJCQkJCQkJICAnMCcpOwotCQkJCQkJCQllc2MrKzsKLQkJCQkJCQl9Ci0JCQkJCQl9IGVsc2UKLQkJCQkJCQlicmVhazsKLQkJCQkJfQotCi0JCQkJCWxjZF9nb3RveHkoKTsKLQkJCQkJcHJvY2Vzc2VkID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQkvKiBlbmQgb2Ygc3dpdGNoICovCi0KLQkJCQkvKiBDaGVjayB3ZXRoZXIgb25lIGZsYWcgd2FzIGNoYW5nZWQgKi8KLQkJCQlpZiAob2xkZmxhZ3MgIT0gbGNkX2ZsYWdzKSB7Ci0JCQkJCS8qIGNoZWNrIHdldGhlciBvbmUgb2YgQixDLEQgZmxhZ3Mgd2FzIGNoYW5nZWQgKi8KLQkJCQkJaWYgKChvbGRmbGFncyBeIGxjZF9mbGFncykgJgotCQkJCQkgICAgKExDRF9GTEFHX0IgfCBMQ0RfRkxBR19DIHwgTENEX0ZMQUdfRCkpCi0JCQkJCQkvKiBzZXQgZGlzcGxheSBtb2RlICovCi0JCQkJCQlsY2Rfd3JpdGVfY21kKDB4MDggfAotCQkJCQkJCSAgICAgICgobGNkX2ZsYWdzICYgTENEX0ZMQUdfRCkgPyA0IDogMCkgfAotCQkJCQkJCSAgICAgICgobGNkX2ZsYWdzICYgTENEX0ZMQUdfQykgPyAyIDogMCkgfAotCQkJCQkJCSAgICAgICgobGNkX2ZsYWdzICYgTENEX0ZMQUdfQikgPyAxIDogMCkpOwotCQkJCQkvKiBjaGVjayB3ZXRoZXIgb25lIG9mIEYsTiBmbGFncyB3YXMgY2hhbmdlZCAqLwotCQkJCQllbHNlIGlmICgob2xkZmxhZ3MgXiBsY2RfZmxhZ3MpICYKLQkJCQkJCSAoTENEX0ZMQUdfRiB8IExDRF9GTEFHX04pKQotCQkJCQkJbGNkX3dyaXRlX2NtZCgweDMwIHwKLQkJCQkJCQkgICAgICAoKGxjZF9mbGFncyAmIExDRF9GTEFHX0YpID8gNCA6IDApIHwKLQkJCQkJCQkgICAgICAoKGxjZF9mbGFncyAmIExDRF9GTEFHX04pID8gOCA6IDApKTsKLQkJCQkJLyogY2hlY2sgd2V0aGVyIEwgZmxhZyB3YXMgY2hhbmdlZCAqLwotCQkJCQllbHNlIGlmICgob2xkZmxhZ3MgXiBsY2RfZmxhZ3MpICYKLQkJCQkJCSAoTENEX0ZMQUdfTCkpIHsKLQkJCQkJCWlmIChsY2RfZmxhZ3MgJiAoTENEX0ZMQUdfTCkpCi0JCQkJCQkJbGNkX2JhY2tsaWdodCgxKTsKLQkJCQkJCWVsc2UgaWYgKGxpZ2h0X3RlbXBvID09IDApCS8qIHN3aXRjaCBvZmYgdGhlIGxpZ2h0IG9ubHkgd2hlbiB0aGUgdGVtcG8gbGlnaHRpbmcgaXMgZ29uZSAqLwotCQkJCQkJCWxjZF9iYWNrbGlnaHQoMCk7Ci0JCQkJCX0KLQkJCQl9CisJCQkJIChsY2RfZXNjYXBlWzBdID09ICdbJykgJiYKKwkJCQkgKGxjZF9lc2NhcGVbMV0gPT0gJ0wnKSkgeworCQkJCXByb2Nlc3NlZCA9IGhhbmRsZV9sY2Rfc3BlY2lhbF9jb2RlKCk7CiAJCQl9CiAKIAkJCS8qIExDRCBzcGVjaWFsIGVzY2FwZSBjb2RlcyAqLwotCQkJLyogZmx1c2ggdGhlIGVzY2FwZSBzZXF1ZW5jZSBpZiBpdCdzIGJlZW4gcHJvY2Vzc2VkIG9yIGlmIGl0IGlzCi0JCQkgICBnZXR0aW5nIHRvbyBsb25nLiAqLworCQkJLyogZmx1c2ggdGhlIGVzY2FwZSBzZXF1ZW5jZSBpZiBpdCdzIGJlZW4gcHJvY2Vzc2VkCisJCQkgICBvciBpZiBpdCBpcyBnZXR0aW5nIHRvbyBsb25nLiAqLwogCQkJaWYgKHByb2Nlc3NlZCB8fCAobGNkX2VzY2FwZV9sZW4gPj0gTENEX0VTQ0FQRV9MRU4pKQogCQkJCWxjZF9lc2NhcGVfbGVuID0gLTE7Ci0JCX0JCS8qIGVzY2FwZSBjb2RlcyAqLworCQl9IC8qIGVzY2FwZSBjb2RlcyAqLwogCX0KIAogCXJldHVybiB0bXAgLSBidWY7CkBAIC0xMjk1LDcgKzEzNTEsNyBAQAogCQlsY2RfbXVzdF9jbGVhciA9IDA7CiAJfQogCWxjZF9vcGVuX2NudCsrOwotCXJldHVybiAwOworCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKIH0KIAogc3RhdGljIGludCBsY2RfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTEzMDQsMTAgKzEzNjAsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGNkX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsY2RfZm9wcyA9IHsKIAkud3JpdGUgICA9IGxjZF93cml0ZSwKIAkub3BlbiAgICA9IGxjZF9vcGVuLAogCS5yZWxlYXNlID0gbGNkX3JlbGVhc2UsCisJLmxsc2VlayAgPSBub19sbHNlZWssCiB9OwogCiBzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgbGNkX2RldiA9IHsKQEAgLTEzMjcsNyArMTM4NCw4IEBACiB2b2lkIGxjZF9pbml0KHZvaWQpCiB7CiAJc3dpdGNoIChsY2RfdHlwZSkgewotCWNhc2UgTENEX1RZUEVfT0xEOgkvKiBwYXJhbGxlbCBtb2RlLCA4IGJpdHMgKi8KKwljYXNlIExDRF9UWVBFX09MRDoKKwkJLyogcGFyYWxsZWwgbW9kZSwgOCBiaXRzICovCiAJCWlmIChsY2RfcHJvdG8gPCAwKQogCQkJbGNkX3Byb3RvID0gTENEX1BST1RPX1BBUkFMTEVMOwogCQlpZiAobGNkX2NoYXJzZXQgPCAwKQpAQCAtMTM0Niw3ICsxNDA0LDggQEAKIAkJaWYgKGxjZF9oZWlnaHQgPCAwKQogCQkJbGNkX2hlaWdodCA9IDI7CiAJCWJyZWFrOwotCWNhc2UgTENEX1RZUEVfS1MwMDc0OgkvKiBzZXJpYWwgbW9kZSwga3MwMDc0ICovCisJY2FzZSBMQ0RfVFlQRV9LUzAwNzQ6CisJCS8qIHNlcmlhbCBtb2RlLCBrczAwNzQgKi8KIAkJaWYgKGxjZF9wcm90byA8IDApCiAJCQlsY2RfcHJvdG8gPSBMQ0RfUFJPVE9fU0VSSUFMOwogCQlpZiAobGNkX2NoYXJzZXQgPCAwKQpAQCAtMTM2Nyw3ICsxNDI2LDggQEAKIAkJaWYgKGxjZF9oZWlnaHQgPCAwKQogCQkJbGNkX2hlaWdodCA9IDI7CiAJCWJyZWFrOwotCWNhc2UgTENEX1RZUEVfTkVYQ09NOgkvKiBwYXJhbGxlbCBtb2RlLCA4IGJpdHMsIGdlbmVyaWMgKi8KKwljYXNlIExDRF9UWVBFX05FWENPTToKKwkJLyogcGFyYWxsZWwgbW9kZSwgOCBiaXRzLCBnZW5lcmljICovCiAJCWlmIChsY2RfcHJvdG8gPCAwKQogCQkJbGNkX3Byb3RvID0gTENEX1BST1RPX1BBUkFMTEVMOwogCQlpZiAobGNkX2NoYXJzZXQgPCAwKQpAQCAtMTM4OCwxNCArMTQ0OCwxNiBAQAogCQlpZiAobGNkX2hlaWdodCA8IDApCiAJCQlsY2RfaGVpZ2h0ID0gMjsKIAkJYnJlYWs7Ci0JY2FzZSBMQ0RfVFlQRV9DVVNUT006CS8qIGN1c3RvbWVyLWRlZmluZWQgKi8KKwljYXNlIExDRF9UWVBFX0NVU1RPTToKKwkJLyogY3VzdG9tZXItZGVmaW5lZCAqLwogCQlpZiAobGNkX3Byb3RvIDwgMCkKIAkJCWxjZF9wcm90byA9IERFRkFVTFRfTENEX1BST1RPOwogCQlpZiAobGNkX2NoYXJzZXQgPCAwKQogCQkJbGNkX2NoYXJzZXQgPSBERUZBVUxUX0xDRF9DSEFSU0VUOwogCQkvKiBkZWZhdWx0IGdlb21ldHJ5IHdpbGwgYmUgc2V0IGxhdGVyICovCiAJCWJyZWFrOwotCWNhc2UgTENEX1RZUEVfSEFOVFJPTklYOgkvKiBwYXJhbGxlbCBtb2RlLCA4IGJpdHMsIGhhbnRyb25peC1saWtlICovCisJY2FzZSBMQ0RfVFlQRV9IQU5UUk9OSVg6CisJCS8qIHBhcmFsbGVsIG1vZGUsIDggYml0cywgaGFudHJvbml4LWxpa2UgKi8KIAlkZWZhdWx0OgogCQlpZiAobGNkX3Byb3RvIDwgMCkKIAkJCWxjZF9wcm90byA9IExDRF9QUk9UT19QQVJBTExFTDsKQEAgLTE0OTYsOCArMTU1OCw3IEBACiAKIAkvKiBiZWZvcmUgdGhpcyBsaW5lLCB3ZSBtdXN0IE5PVCBzZW5kIGFueXRoaW5nIHRvIHRoZSBkaXNwbGF5LgogCSAqIFNpbmNlIGxjZF9pbml0X2Rpc3BsYXkoKSBuZWVkcyB0byB3cml0ZSBkYXRhLCB3ZSBoYXZlIHRvCi0JICogZW5hYmxlIG1hcmsgdGhlIExDRCBpbml0aWFsaXplZCBqdXN0IGJlZm9yZS4KLQkgKi8KKwkgKiBlbmFibGUgbWFyayB0aGUgTENEIGluaXRpYWxpemVkIGp1c3QgYmVmb3JlLiAqLwogCWxjZF9pbml0aWFsaXplZCA9IDE7CiAJbGNkX2luaXRfZGlzcGxheSgpOwogCkBAIC0xNTExLDcgKzE1NzIsOCBAQAogCQkJUEFORUxfVkVSU0lPTik7CiAjZW5kaWYKIAlsY2RfYWRkcl94ID0gbGNkX2FkZHJfeSA9IDA7Ci0JbGNkX211c3RfY2xlYXIgPSAxOwkvKiBjbGVhciB0aGUgZGlzcGxheSBvbiB0aGUgbmV4dCBkZXZpY2Ugb3BlbmluZyAqLworCS8qIGNsZWFyIHRoZSBkaXNwbGF5IG9uIHRoZSBuZXh0IGRldmljZSBvcGVuaW5nICovCisJbGNkX211c3RfY2xlYXIgPSAxOwogCWxjZF9nb3RveHkoKTsKIH0KIApAQCAtMTUzNSw3ICsxNTk3LDggQEAKIAkJCXJldHVybiAtRUlOVFI7CiAJfQogCi0JZm9yICg7IGNvdW50LS0gPiAwICYmIChrZXlwYWRfYnVmbGVuID4gMCk7ICsraSwgKyt0bXAsIC0ta2V5cGFkX2J1ZmxlbikgeworCWZvciAoOyBjb3VudC0tID4gMCAmJiAoa2V5cGFkX2J1ZmxlbiA+IDApOworCSAgICAgKytpLCArK3RtcCwgLS1rZXlwYWRfYnVmbGVuKSB7CiAJCXB1dF91c2VyKGtleXBhZF9idWZmZXJba2V5cGFkX3N0YXJ0XSwgdG1wKTsKIAkJa2V5cGFkX3N0YXJ0ID0gKGtleXBhZF9zdGFydCArIDEpICUgS0VZUEFEX0JVRkZFUjsKIAl9CkBAIC0xNTY0LDcgKzE2MjcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBrZXlwYWRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGtleXBhZF9mb3BzID0gewogCS5yZWFkICAgID0ga2V5cGFkX3JlYWQsCQkvKiByZWFkICovCiAJLm9wZW4gICAgPSBrZXlwYWRfb3BlbiwJCS8qIG9wZW4gKi8KIAkucmVsZWFzZSA9IGtleXBhZF9yZWxlYXNlLAkvKiBjbG9zZSAqLwpAQCAtMTU5MSwxNCArMTY1NCwxNSBAQAogCX0KIH0KIAotLyogdGhpcyBmdW5jdGlvbiBzY2FucyBhbGwgdGhlIGJpdHMgaW52b2x2aW5nIGF0IGxlYXN0IG9uZSBsb2dpY2FsIHNpZ25hbCwgYW5kIHB1dHMgdGhlCi0gKiByZXN1bHRzIGluIHRoZSBiaXRmaWVsZCAicGh5c19yZWFkIiAob25lIGJpdCBwZXIgZXN0YWJsaXNoZWQgY29udGFjdCksIGFuZCBzZXRzCi0gKiAicGh5c19yZWFkX3ByZXYiIHRvICJwaHlzX3JlYWQiLgorLyogdGhpcyBmdW5jdGlvbiBzY2FucyBhbGwgdGhlIGJpdHMgaW52b2x2aW5nIGF0IGxlYXN0IG9uZSBsb2dpY2FsIHNpZ25hbCwKKyAqIGFuZCBwdXRzIHRoZSByZXN1bHRzIGluIHRoZSBiaXRmaWVsZCAicGh5c19yZWFkIiAob25lIGJpdCBwZXIgZXN0YWJsaXNoZWQKKyAqIGNvbnRhY3QpLCBhbmQgc2V0cyAicGh5c19yZWFkX3ByZXYiIHRvICJwaHlzX3JlYWQiLgogICoKLSAqIE5vdGU6IHRvIGRlYm91bmNlIGlucHV0IHNpZ25hbHMsIHdlIHdpbGwgb25seSBjb25zaWRlciBhcyBzd2l0Y2hlZCBhIHNpZ25hbCB3aGljaCBpcwotICogc3RhYmxlIGFjcm9zcyAyIG1lYXN1cmVzLiBTaWduYWxzIHdoaWNoIGFyZSBkaWZmZXJlbnQgYmV0d2VlbiB0d28gcmVhZHMgd2lsbCBiZSBrZXB0Ci0gKiBhcyB0aGV5IHByZXZpb3VzbHkgd2VyZSBpbiB0aGVpciBsb2dpY2FsIGZvcm0gKHBoeXNfcHJldikuIEEgc2lnbmFsIHdoaWNoIGhhcyBqdXN0Ci0gKiBzd2l0Y2hlZCB3aWxsIGhhdmUgYSAxIGluIChwaHlzX3JlYWQgXiBwaHlzX3JlYWRfcHJldikuCisgKiBOb3RlOiB0byBkZWJvdW5jZSBpbnB1dCBzaWduYWxzLCB3ZSB3aWxsIG9ubHkgY29uc2lkZXIgYXMgc3dpdGNoZWQgYSBzaWduYWwKKyAqIHdoaWNoIGlzIHN0YWJsZSBhY3Jvc3MgMiBtZWFzdXJlcy4gU2lnbmFscyB3aGljaCBhcmUgZGlmZmVyZW50IGJldHdlZW4gdHdvCisgKiByZWFkcyB3aWxsIGJlIGtlcHQgYXMgdGhleSBwcmV2aW91c2x5IHdlcmUgaW4gdGhlaXIgbG9naWNhbCBmb3JtIChwaHlzX3ByZXYpLgorICogQSBzaWduYWwgd2hpY2ggaGFzIGp1c3Qgc3dpdGNoZWQgd2lsbCBoYXZlIGEgMSBpbgorICogKHBoeXNfcmVhZCBeIHBoeXNfcmVhZF9wcmV2KS4KICAqLwogc3RhdGljIHZvaWQgcGh5c19zY2FuX2NvbnRhY3RzKHZvaWQpCiB7CkBAIC0xNjExLDIxICsxNjc1LDMwIEBACiAJcGh5c19yZWFkX3ByZXYgPSBwaHlzX3JlYWQ7CiAJcGh5c19yZWFkID0gMDsJCS8qIGZsdXNoIGFsbCBzaWduYWxzICovCiAKLQlvbGR2YWwgPSByX2R0cihwcHJ0KSB8IHNjYW5fbWFza19vOwkvKiBrZWVwIHRyYWNrIG9mIG9sZCB2YWx1ZSwgd2l0aCBhbGwgb3V0cHV0cyBkaXNhYmxlZCAqLwotCXdfZHRyKHBwcnQsIG9sZHZhbCAmIH5zY2FuX21hc2tfbyk7CS8qIGFjdGl2YXRlIGFsbCBrZXlib2FyZCBvdXRwdXRzIChhY3RpdmUgbG93KSAqLwotCWJpdG1hc2sgPSBQTkxfUElOUFVUKHJfc3RyKHBwcnQpKSAmIHNjYW5fbWFza19pOwkvKiB3aWxsIGhhdmUgYSAxIGZvciBlYWNoIGJpdCBzZXQgdG8gZ25kICovCi0Jd19kdHIocHBydCwgb2xkdmFsKTsJLyogZGlzYWJsZSBhbGwgbWF0cml4IHNpZ25hbHMgKi8KKwkvKiBrZWVwIHRyYWNrIG9mIG9sZCB2YWx1ZSwgd2l0aCBhbGwgb3V0cHV0cyBkaXNhYmxlZCAqLworCW9sZHZhbCA9IHJfZHRyKHBwcnQpIHwgc2Nhbl9tYXNrX287CisJLyogYWN0aXZhdGUgYWxsIGtleWJvYXJkIG91dHB1dHMgKGFjdGl2ZSBsb3cpICovCisJd19kdHIocHBydCwgb2xkdmFsICYgfnNjYW5fbWFza19vKTsKKworCS8qIHdpbGwgaGF2ZSBhIDEgZm9yIGVhY2ggYml0IHNldCB0byBnbmQgKi8KKwliaXRtYXNrID0gUE5MX1BJTlBVVChyX3N0cihwcHJ0KSkgJiBzY2FuX21hc2tfaTsKKwkvKiBkaXNhYmxlIGFsbCBtYXRyaXggc2lnbmFscyAqLworCXdfZHRyKHBwcnQsIG9sZHZhbCk7CiAKIAkvKiBub3cgdGhhdCBhbGwgb3V0cHV0cyBhcmUgY2xlYXJlZCwgdGhlIG9ubHkgYWN0aXZlIGlucHV0IGJpdHMgYXJlCiAJICogZGlyZWN0bHkgY29ubmVjdGVkIHRvIHRoZSBncm91bmQKIAkgKi8KLQlnbmRtYXNrID0gUE5MX1BJTlBVVChyX3N0cihwcHJ0KSkgJiBzY2FuX21hc2tfaTsJLyogMSBmb3IgZWFjaCBncm91bmRlZCBpbnB1dCAqLwogCi0JcGh5c19yZWFkIHw9IChwbWFza190KSBnbmRtYXNrIDw8IDQwOwkvKiBncm91bmRlZCBpbnB1dHMgYXJlIHNpZ25hbHMgNDAtNDQgKi8KKwkvKiAxIGZvciBlYWNoIGdyb3VuZGVkIGlucHV0ICovCisJZ25kbWFzayA9IFBOTF9QSU5QVVQocl9zdHIocHBydCkpICYgc2Nhbl9tYXNrX2k7CisKKwkvKiBncm91bmRlZCBpbnB1dHMgYXJlIHNpZ25hbHMgNDAtNDQgKi8KKwlwaHlzX3JlYWQgfD0gKHBtYXNrX3QpIGduZG1hc2sgPDwgNDA7CiAKIAlpZiAoYml0bWFzayAhPSBnbmRtYXNrKSB7Ci0JCS8qIHNpbmNlIGNsZWFyaW5nIHRoZSBvdXRwdXRzIGNoYW5nZWQgc29tZSBpbnB1dHMsIHdlIGtub3cgdGhhdCBzb21lCi0JCSAqIGlucHV0IHNpZ25hbHMgYXJlIGN1cnJlbnRseSB0aWVkIHRvIHNvbWUgb3V0cHV0cy4gU28gd2UnbGwgc2NhbiB0aGVtLgorCQkvKiBzaW5jZSBjbGVhcmluZyB0aGUgb3V0cHV0cyBjaGFuZ2VkIHNvbWUgaW5wdXRzLCB3ZSBrbm93CisJCSAqIHRoYXQgc29tZSBpbnB1dCBzaWduYWxzIGFyZSBjdXJyZW50bHkgdGllZCB0byBzb21lIG91dHB1dHMuCisJCSAqIFNvIHdlJ2xsIHNjYW4gdGhlbS4KIAkJICovCiAJCWZvciAoYml0ID0gMDsgYml0IDwgODsgYml0KyspIHsKIAkJCWJpdHZhbCA9IDEgPDwgYml0OwpAQCAtMTYzOSwxMSArMTcxMiwxMjcgQEAKIAkJfQogCQl3X2R0cihwcHJ0LCBvbGR2YWwpOwkvKiBkaXNhYmxlIGFsbCBvdXRwdXRzICovCiAJfQotCS8qIHRoaXMgaXMgZWFzeTogdXNlIG9sZCBiaXRzIHdoZW4gdGhleSBhcmUgZmxhcHBpbmcsIHVzZSBuZXcgb25lcyB3aGVuIHN0YWJsZSAqLwotCXBoeXNfY3VyciA9Ci0JICAgIChwaHlzX3ByZXYgJiAocGh5c19yZWFkIF4gcGh5c19yZWFkX3ByZXYpKSB8IChwaHlzX3JlYWQgJgotCQkJCQkJCSAgfihwaHlzX3JlYWQgXgotCQkJCQkJCSAgICBwaHlzX3JlYWRfcHJldikpOworCS8qIHRoaXMgaXMgZWFzeTogdXNlIG9sZCBiaXRzIHdoZW4gdGhleSBhcmUgZmxhcHBpbmcsCisJICogdXNlIG5ldyBvbmVzIHdoZW4gc3RhYmxlICovCisJcGh5c19jdXJyID0gKHBoeXNfcHJldiAmIChwaHlzX3JlYWQgXiBwaHlzX3JlYWRfcHJldikpIHwKKwkJICAgIChwaHlzX3JlYWQgJiB+KHBoeXNfcmVhZCBeIHBoeXNfcmVhZF9wcmV2KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlucHV0X3N0YXRlX2hpZ2goc3RydWN0IGxvZ2ljYWxfaW5wdXQgKmlucHV0KQoreworI2lmIDAKKwkvKiBGSVhNRToKKwkgKiB0aGlzIGlzIGFuIGludmFsaWQgdGVzdC4gSXQgdHJpZXMgdG8gY2F0Y2gKKwkgKiB0cmFuc2l0aW9ucyBmcm9tIHNpbmdsZS1rZXkgdG8gbXVsdGlwbGUta2V5LCBidXQKKwkgKiBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50IHRoZSBjb250YWN0cyBwb2xhcml0eS4KKwkgKiBUaGUgb25seSBzb2x1dGlvbiB0byB0aGUgcHJvYmxlbSBpcyB0byBwYXJzZSBrZXlzCisJICogZnJvbSB0aGUgbW9zdCBjb21wbGV4IHRvIHRoZSBzaW1wbGVzdCBjb21iaW5hdGlvbnMsCisJICogYW5kIG1hcmsgdGhlbSBhcyAnY2F1Z2h0JyBvbmNlIGEgY29tYmluYXRpb24KKwkgKiBtYXRjaGVzLCB0aGVuIHVubWF0Y2ggaXQgZm9yIGFsbCBvdGhlciBvbmVzLgorCSAqLworCisJLyogdHJ5IHRvIGNhdGNoIGRhbmdlcm91cyB0cmFuc2l0aW9ucyBjYXNlcyA6CisJICogc29tZW9uZSBhZGRzIGEgYml0LCBzbyB0aGlzIHNpZ25hbCB3YXMgYSBmYWxzZQorCSAqIHBvc2l0aXZlIHJlc3VsdGluZyBmcm9tIGEgdHJhbnNpdGlvbi4gV2Ugc2hvdWxkCisJICogaW52YWxpZGF0ZSB0aGUgc2lnbmFsIGltbWVkaWF0ZWx5IGFuZCBub3QgY2FsbCB0aGUKKwkgKiByZWxlYXNlIGZ1bmN0aW9uLgorCSAqIGVnOiAwIC0ocHJlc3MgQSktPiBBIC0ocHJlc3MgQiktPiBBQiA6IGRvbid0IG1hdGNoIEEncyByZWxlYXNlLgorCSAqLworCWlmICgoKHBoeXNfcHJldiAmIGlucHV0LT5tYXNrKSA9PSBpbnB1dC0+dmFsdWUpCisJICAgICYmICgocGh5c19jdXJyICYgaW5wdXQtPm1hc2spID4gaW5wdXQtPnZhbHVlKSkgeworCQlpbnB1dC0+c3RhdGUgPSBJTlBVVF9TVF9MT1c7IC8qIGludmFsaWRhdGUgKi8KKwkJcmV0dXJuIDE7CisJfQorI2VuZGlmCisKKwlpZiAoKHBoeXNfY3VyciAmIGlucHV0LT5tYXNrKSA9PSBpbnB1dC0+dmFsdWUpIHsKKwkJaWYgKChpbnB1dC0+dHlwZSA9PSBJTlBVVF9UWVBFX1NURCkgJiYKKwkJICAgIChpbnB1dC0+aGlnaF90aW1lciA9PSAwKSkgeworCQkJaW5wdXQtPmhpZ2hfdGltZXIrKzsKKwkJCWlmIChpbnB1dC0+dS5zdGQucHJlc3NfZmN0ICE9IE5VTEwpCisJCQkJaW5wdXQtPnUuc3RkLnByZXNzX2ZjdChpbnB1dC0+dS5zdGQucHJlc3NfZGF0YSk7CisJCX0gZWxzZSBpZiAoaW5wdXQtPnR5cGUgPT0gSU5QVVRfVFlQRV9LQkQpIHsKKwkJCS8qIHdpbGwgdHVybiBvbiB0aGUgbGlnaHQgKi8KKwkJCWtleXByZXNzZWQgPSAxOworCisJCQlpZiAoaW5wdXQtPmhpZ2hfdGltZXIgPT0gMCkgeworCQkJCWNoYXIgKnByZXNzX3N0ciA9IGlucHV0LT51LmtiZC5wcmVzc19zdHI7CisJCQkJaWYgKHByZXNzX3N0clswXSkKKwkJCQkJa2V5cGFkX3NlbmRfa2V5KHByZXNzX3N0ciwKKwkJCQkJCQlzaXplb2YocHJlc3Nfc3RyKSk7CisJCQl9CisKKwkJCWlmIChpbnB1dC0+dS5rYmQucmVwZWF0X3N0clswXSkgeworCQkJCWNoYXIgKnJlcGVhdF9zdHIgPSBpbnB1dC0+dS5rYmQucmVwZWF0X3N0cjsKKwkJCQlpZiAoaW5wdXQtPmhpZ2hfdGltZXIgPj0gS0VZUEFEX1JFUF9TVEFSVCkgeworCQkJCQlpbnB1dC0+aGlnaF90aW1lciAtPSBLRVlQQURfUkVQX0RFTEFZOworCQkJCQlrZXlwYWRfc2VuZF9rZXkocmVwZWF0X3N0ciwKKwkJCQkJCQlzaXplb2YocmVwZWF0X3N0cikpOworCQkJCX0KKwkJCQkvKiB3ZSB3aWxsIG5lZWQgdG8gY29tZSBiYWNrIGhlcmUgc29vbiAqLworCQkJCWlucHV0c19zdGFibGUgPSAwOworCQkJfQorCisJCQlpZiAoaW5wdXQtPmhpZ2hfdGltZXIgPCAyNTUpCisJCQkJaW5wdXQtPmhpZ2hfdGltZXIrKzsKKwkJfQorCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQkvKiBlbHNlIHNpZ25hbCBmYWxsaW5nIGRvd24uIExldCdzIGZhbGwgdGhyb3VnaC4gKi8KKwkJaW5wdXQtPnN0YXRlID0gSU5QVVRfU1RfRkFMTElORzsKKwkJaW5wdXQtPmZhbGxfdGltZXIgPSAwOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlucHV0X3N0YXRlX2ZhbGxpbmcoc3RydWN0IGxvZ2ljYWxfaW5wdXQgKmlucHV0KQoreworI2lmIDAKKwkvKiBGSVhNRSAhISEgc2FtZSBjb21tZW50IGFzIGluIGlucHV0X3N0YXRlX2hpZ2ggKi8KKwlpZiAoKChwaHlzX3ByZXYgJiBpbnB1dC0+bWFzaykgPT0gaW5wdXQtPnZhbHVlKQorCSAgICAmJiAoKHBoeXNfY3VyciAmIGlucHV0LT5tYXNrKSA+IGlucHV0LT52YWx1ZSkpIHsKKwkJaW5wdXQtPnN0YXRlID0gSU5QVVRfU1RfTE9XOwkvKiBpbnZhbGlkYXRlICovCisJCXJldHVybjsKKwl9CisjZW5kaWYKKworCWlmICgocGh5c19jdXJyICYgaW5wdXQtPm1hc2spID09IGlucHV0LT52YWx1ZSkgeworCQlpZiAoaW5wdXQtPnR5cGUgPT0gSU5QVVRfVFlQRV9LQkQpIHsKKwkJCS8qIHdpbGwgdHVybiBvbiB0aGUgbGlnaHQgKi8KKwkJCWtleXByZXNzZWQgPSAxOworCisJCQlpZiAoaW5wdXQtPnUua2JkLnJlcGVhdF9zdHJbMF0pIHsKKwkJCQljaGFyICpyZXBlYXRfc3RyID0gaW5wdXQtPnUua2JkLnJlcGVhdF9zdHI7CisJCQkJaWYgKGlucHV0LT5oaWdoX3RpbWVyID49IEtFWVBBRF9SRVBfU1RBUlQpCisJCQkJCWlucHV0LT5oaWdoX3RpbWVyIC09IEtFWVBBRF9SRVBfREVMQVk7CisJCQkJCWtleXBhZF9zZW5kX2tleShyZXBlYXRfc3RyLAorCQkJCQkJCXNpemVvZihyZXBlYXRfc3RyKSk7CisJCQkJLyogd2Ugd2lsbCBuZWVkIHRvIGNvbWUgYmFjayBoZXJlIHNvb24gKi8KKwkJCQlpbnB1dHNfc3RhYmxlID0gMDsKKwkJCX0KKworCQkJaWYgKGlucHV0LT5oaWdoX3RpbWVyIDwgMjU1KQorCQkJCWlucHV0LT5oaWdoX3RpbWVyKys7CisJCX0KKwkJaW5wdXQtPnN0YXRlID0gSU5QVVRfU1RfSElHSDsKKwl9IGVsc2UgaWYgKGlucHV0LT5mYWxsX3RpbWVyID49IGlucHV0LT5mYWxsX3RpbWUpIHsKKwkJLyogY2FsbCByZWxlYXNlIGV2ZW50ICovCisJCWlmIChpbnB1dC0+dHlwZSA9PSBJTlBVVF9UWVBFX1NURCkgeworCQkJdm9pZCAoKnJlbGVhc2VfZmN0KShpbnQpID0gaW5wdXQtPnUuc3RkLnJlbGVhc2VfZmN0OworCQkJaWYgKHJlbGVhc2VfZmN0ICE9IE5VTEwpCisJCQkJcmVsZWFzZV9mY3QoaW5wdXQtPnUuc3RkLnJlbGVhc2VfZGF0YSk7CisJCX0gZWxzZSBpZiAoaW5wdXQtPnR5cGUgPT0gSU5QVVRfVFlQRV9LQkQpIHsKKwkJCWNoYXIgKnJlbGVhc2Vfc3RyID0gaW5wdXQtPnUua2JkLnJlbGVhc2Vfc3RyOworCQkJaWYgKHJlbGVhc2Vfc3RyWzBdKQorCQkJCWtleXBhZF9zZW5kX2tleShyZWxlYXNlX3N0ciwKKwkJCQkJCXNpemVvZihyZWxlYXNlX3N0cikpOworCQl9CisKKwkJaW5wdXQtPnN0YXRlID0gSU5QVVRfU1RfTE9XOworCX0gZWxzZSB7CisJCWlucHV0LT5mYWxsX3RpbWVyKys7CisJCWlucHV0c19zdGFibGUgPSAwOworCX0KIH0KIAogc3RhdGljIHZvaWQgcGFuZWxfcHJvY2Vzc19pbnB1dHModm9pZCkKQEAgLTE2NjYsMTAgKzE4NTUsMTIgQEAKIAkJY2FzZSBJTlBVVF9TVF9MT1c6CiAJCQlpZiAoKHBoeXNfY3VyciAmIGlucHV0LT5tYXNrKSAhPSBpbnB1dC0+dmFsdWUpCiAJCQkJYnJlYWs7Ci0JCQkvKiBpZiBhbGwgbmVlZGVkIG9uZXMgd2VyZSBhbHJlYWR5IHNldCBwcmV2aW91c2x5LCB0aGlzIG1lYW5zIHRoYXQKLQkJCSAqIHRoaXMgbG9naWNhbCBzaWduYWwgaGFzIGJlZW4gYWN0aXZhdGVkIGJ5IHRoZSByZWxlYXNpbmcgb2YKLQkJCSAqIGFub3RoZXIgY29tYmluZWQgc2lnbmFsLCBzbyB3ZSBkb24ndCB3YW50IHRvIG1hdGNoLgotCQkJICogZWc6IEFCIC0ocmVsZWFzZSBCKS0+IEEgLShyZWxlYXNlIEEpLT4gMCA6IGRvbid0IG1hdGNoIEEuCisJCQkvKiBpZiBhbGwgbmVlZGVkIG9uZXMgd2VyZSBhbHJlYWR5IHNldCBwcmV2aW91c2x5LAorCQkJICogdGhpcyBtZWFucyB0aGF0IHRoaXMgbG9naWNhbCBzaWduYWwgaGFzIGJlZW4KKwkJCSAqIGFjdGl2YXRlZCBieSB0aGUgcmVsZWFzaW5nIG9mIGFub3RoZXIgY29tYmluZWQKKwkJCSAqIHNpZ25hbCwgc28gd2UgZG9uJ3Qgd2FudCB0byBtYXRjaC4KKwkJCSAqIGVnOiBBQiAtKHJlbGVhc2UgQiktPiBBIC0ocmVsZWFzZSBBKS0+IDAgOgorCQkJICogICAgIGRvbid0IG1hdGNoIEEuCiAJCQkgKi8KIAkJCWlmICgocGh5c19wcmV2ICYgaW5wdXQtPm1hc2spID09IGlucHV0LT52YWx1ZSkKIAkJCQlicmVhazsKQEAgLTE2OTAsMTIyICsxODgxLDExIEBACiAJCQlpbnB1dC0+c3RhdGUgPSBJTlBVVF9TVF9ISUdIOwogCQkJLyogbm8gYnJlYWsgaGVyZSwgZmFsbCB0aHJvdWdoICovCiAJCWNhc2UgSU5QVVRfU1RfSElHSDoKLSNpZiAwCi0JCQkvKiBGSVhNRToKLQkJCSAqIHRoaXMgaXMgYW4gaW52YWxpZCB0ZXN0LiBJdCB0cmllcyB0byBjYXRjaCB0cmFuc2l0aW9ucyBmcm9tIHNpbmdsZS1rZXkKLQkJCSAqIHRvIG11bHRpcGxlLWtleSwgYnV0IGRvZXNuJ3QgdGFrZSBpbnRvIGFjY291bnQgdGhlIGNvbnRhY3RzIHBvbGFyaXR5LgotCQkJICogVGhlIG9ubHkgc29sdXRpb24gdG8gdGhlIHByb2JsZW0gaXMgdG8gcGFyc2Uga2V5cyBmcm9tIHRoZSBtb3N0IGNvbXBsZXgKLQkJCSAqIHRvIHRoZSBzaW1wbGVzdCBjb21iaW5hdGlvbnMsIGFuZCBtYXJrIHRoZW0gYXMgJ2NhdWdodCcgb25jZSBhIGNvbWJpbmF0aW9uCi0JCQkgKiBtYXRjaGVzLCB0aGVuIHVubWF0Y2ggaXQgZm9yIGFsbCBvdGhlciBvbmVzLgotCQkJICovCi0KLQkJCS8qIHRyeSB0byBjYXRjaCBkYW5nZXJvdXMgdHJhbnNpdGlvbnMgY2FzZXMgOgotCQkJICogc29tZW9uZSBhZGRzIGEgYml0LCBzbyB0aGlzIHNpZ25hbCB3YXMgYSBmYWxzZQotCQkJICogcG9zaXRpdmUgcmVzdWx0aW5nIGZyb20gYSB0cmFuc2l0aW9uLiBXZSBzaG91bGQgaW52YWxpZGF0ZQotCQkJICogdGhlIHNpZ25hbCBpbW1lZGlhdGVseSBhbmQgbm90IGNhbGwgdGhlIHJlbGVhc2UgZnVuY3Rpb24uCi0JCQkgKiBlZzogMCAtKHByZXNzIEEpLT4gQSAtKHByZXNzIEIpLT4gQUIgOiBkb24ndCBtYXRjaCBBJ3MgcmVsZWFzZS4KLQkJCSAqLwotCQkJaWYgKCgocGh5c19wcmV2ICYgaW5wdXQtPm1hc2spID09IGlucHV0LT52YWx1ZSkKLQkJCSAgICAmJiAoKHBoeXNfY3VyciAmIGlucHV0LT5tYXNrKSA+IGlucHV0LT52YWx1ZSkpIHsKLQkJCQlpbnB1dC0+c3RhdGUgPSBJTlBVVF9TVF9MT1c7CS8qIGludmFsaWRhdGUgKi8KKwkJCWlmIChpbnB1dF9zdGF0ZV9oaWdoKGlucHV0KSkKIAkJCQlicmVhazsKLQkJCX0KLSNlbmRpZgotCi0JCQlpZiAoKHBoeXNfY3VyciAmIGlucHV0LT5tYXNrKSA9PSBpbnB1dC0+dmFsdWUpIHsKLQkJCQlpZiAoKGlucHV0LT50eXBlID09IElOUFVUX1RZUEVfU1REKQotCQkJCSAgICAmJiAoaW5wdXQtPmhpZ2hfdGltZXIgPT0gMCkpIHsKLQkJCQkJaW5wdXQtPmhpZ2hfdGltZXIrKzsKLQkJCQkJaWYgKGlucHV0LT51LnN0ZC5wcmVzc19mY3QgIT0gTlVMTCkKLQkJCQkJCWlucHV0LT51LnN0ZC5wcmVzc19mY3QoaW5wdXQtPnUuCi0JCQkJCQkJCSAgICAgICBzdGQuCi0JCQkJCQkJCSAgICAgICBwcmVzc19kYXRhKTsKLQkJCQl9IGVsc2UgaWYgKGlucHV0LT50eXBlID09IElOUFVUX1RZUEVfS0JEKSB7Ci0JCQkJCWtleXByZXNzZWQgPSAxOwkvKiB3aWxsIHR1cm4gb24gdGhlIGxpZ2h0ICovCi0KLQkJCQkJaWYgKGlucHV0LT5oaWdoX3RpbWVyID09IDApIHsKLQkJCQkJCWlmIChpbnB1dC0+dS5rYmQucHJlc3Nfc3RyWzBdKQotCQkJCQkJCWtleXBhZF9zZW5kX2tleShpbnB1dC0+Ci0JCQkJCQkJCQl1LmtiZC4KLQkJCQkJCQkJCXByZXNzX3N0ciwKLQkJCQkJCQkJCXNpemVvZgotCQkJCQkJCQkJKGlucHV0LT4KLQkJCQkJCQkJCSB1LmtiZC4KLQkJCQkJCQkJCSBwcmVzc19zdHIpKTsKLQkJCQkJfQotCi0JCQkJCWlmIChpbnB1dC0+dS5rYmQucmVwZWF0X3N0clswXSkgewotCQkJCQkJaWYgKGlucHV0LT5oaWdoX3RpbWVyID49Ci0JCQkJCQkgICAgS0VZUEFEX1JFUF9TVEFSVCkgewotCQkJCQkJCWlucHV0LT5oaWdoX3RpbWVyIC09Ci0JCQkJCQkJICAgIEtFWVBBRF9SRVBfREVMQVk7Ci0JCQkJCQkJa2V5cGFkX3NlbmRfa2V5KGlucHV0LT4KLQkJCQkJCQkJCXUua2JkLgotCQkJCQkJCQkJcmVwZWF0X3N0ciwKLQkJCQkJCQkJCXNpemVvZgotCQkJCQkJCQkJKGlucHV0LT4KLQkJCQkJCQkJCSB1LmtiZC4KLQkJCQkJCQkJCSByZXBlYXRfc3RyKSk7Ci0JCQkJCQl9Ci0JCQkJCQlpbnB1dHNfc3RhYmxlID0gMDsJLyogd2Ugd2lsbCBuZWVkIHRvIGNvbWUgYmFjayBoZXJlIHNvb24gKi8KLQkJCQkJfQotCi0JCQkJCWlmIChpbnB1dC0+aGlnaF90aW1lciA8IDI1NSkKLQkJCQkJCWlucHV0LT5oaWdoX3RpbWVyKys7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBlbHNlIHNpZ25hbCBmYWxsaW5nIGRvd24uIExldCdzIGZhbGwgdGhyb3VnaC4gKi8KLQkJCQlpbnB1dC0+c3RhdGUgPSBJTlBVVF9TVF9GQUxMSU5HOwotCQkJCWlucHV0LT5mYWxsX3RpbWVyID0gMDsKLQkJCX0KIAkJCS8qIG5vIGJyZWFrIGhlcmUsIGZhbGwgdGhyb3VnaCAqLwogCQljYXNlIElOUFVUX1NUX0ZBTExJTkc6Ci0jaWYgMAotCQkJLyogRklYTUUgISEhIHNhbWUgY29tbWVudCBhcyBhYm92ZSAqLwotCQkJaWYgKCgocGh5c19wcmV2ICYgaW5wdXQtPm1hc2spID09IGlucHV0LT52YWx1ZSkKLQkJCSAgICAmJiAoKHBoeXNfY3VyciAmIGlucHV0LT5tYXNrKSA+IGlucHV0LT52YWx1ZSkpIHsKLQkJCQlpbnB1dC0+c3RhdGUgPSBJTlBVVF9TVF9MT1c7CS8qIGludmFsaWRhdGUgKi8KLQkJCQlicmVhazsKLQkJCX0KLSNlbmRpZgotCi0JCQlpZiAoKHBoeXNfY3VyciAmIGlucHV0LT5tYXNrKSA9PSBpbnB1dC0+dmFsdWUpIHsKLQkJCQlpZiAoaW5wdXQtPnR5cGUgPT0gSU5QVVRfVFlQRV9LQkQpIHsKLQkJCQkJa2V5cHJlc3NlZCA9IDE7CS8qIHdpbGwgdHVybiBvbiB0aGUgbGlnaHQgKi8KLQotCQkJCQlpZiAoaW5wdXQtPnUua2JkLnJlcGVhdF9zdHJbMF0pIHsKLQkJCQkJCWlmIChpbnB1dC0+aGlnaF90aW1lciA+PSBLRVlQQURfUkVQX1NUQVJUKQotCQkJCQkJCWlucHV0LT5oaWdoX3RpbWVyIC09IEtFWVBBRF9SRVBfREVMQVk7Ci0JCQkJCQlrZXlwYWRfc2VuZF9rZXkoaW5wdXQtPnUua2JkLnJlcGVhdF9zdHIsCi0JCQkJCQkJCXNpemVvZihpbnB1dC0+dS5rYmQucmVwZWF0X3N0cikpOwotCQkJCQkJaW5wdXRzX3N0YWJsZSA9IDA7CS8qIHdlIHdpbGwgbmVlZCB0byBjb21lIGJhY2sgaGVyZSBzb29uICovCi0JCQkJCX0KLQotCQkJCQlpZiAoaW5wdXQtPmhpZ2hfdGltZXIgPCAyNTUpCi0JCQkJCQlpbnB1dC0+aGlnaF90aW1lcisrOwotCQkJCX0KLQkJCQlpbnB1dC0+c3RhdGUgPSBJTlBVVF9TVF9ISUdIOwotCQkJCWJyZWFrOwotCQkJfSBlbHNlIGlmIChpbnB1dC0+ZmFsbF90aW1lciA+PSBpbnB1dC0+ZmFsbF90aW1lKSB7Ci0JCQkJLyogY2FsbCByZWxlYXNlIGV2ZW50ICovCi0JCQkJaWYgKGlucHV0LT50eXBlID09IElOUFVUX1RZUEVfU1REKSB7Ci0JCQkJCWlmIChpbnB1dC0+dS5zdGQucmVsZWFzZV9mY3QgIT0gTlVMTCkKLQkJCQkJCWlucHV0LT51LnN0ZC5yZWxlYXNlX2ZjdChpbnB1dC0+dS5zdGQucmVsZWFzZV9kYXRhKTsKLQotCQkJCX0gZWxzZSBpZiAoaW5wdXQtPnR5cGUgPT0gSU5QVVRfVFlQRV9LQkQpIHsKLQkJCQkJaWYgKGlucHV0LT51LmtiZC5yZWxlYXNlX3N0clswXSkKLQkJCQkJCWtleXBhZF9zZW5kX2tleShpbnB1dC0+dS5rYmQucmVsZWFzZV9zdHIsCi0JCQkJCQkJCXNpemVvZihpbnB1dC0+dS5rYmQucmVsZWFzZV9zdHIpKTsKLQkJCQl9Ci0KLQkJCQlpbnB1dC0+c3RhdGUgPSBJTlBVVF9TVF9MT1c7Ci0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UgewotCQkJCWlucHV0LT5mYWxsX3RpbWVyKys7Ci0JCQkJaW5wdXRzX3N0YWJsZSA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQlpbnB1dF9zdGF0ZV9mYWxsaW5nKGlucHV0KTsKIAkJfQogCX0KIH0KQEAgLTE4MTUsNyArMTg5NSw5IEBACiAJaWYgKGtleXBhZF9lbmFibGVkICYmIGtleXBhZF9pbml0aWFsaXplZCkgewogCQlpZiAoc3Bpbl90cnlsb2NrKCZwcHJ0X2xvY2spKSB7CiAJCQlwaHlzX3NjYW5fY29udGFjdHMoKTsKLQkJCXNwaW5fdW5sb2NrKCZwcHJ0X2xvY2spOwkvKiBubyBuZWVkIGZvciB0aGUgcGFycG9ydCBhbnltb3JlICovCisKKwkJCS8qIG5vIG5lZWQgZm9yIHRoZSBwYXJwb3J0IGFueW1vcmUgKi8KKwkJCXNwaW5fdW5sb2NrKCZwcHJ0X2xvY2spOwogCQl9CiAKIAkJaWYgKCFpbnB1dHNfc3RhYmxlIHx8IHBoeXNfY3VyciAhPSBwaHlzX3ByZXYpCkBAIC0xODUwLDggKzE5MzIsOCBAQAogfQogCiAvKiBjb252ZXJ0cyBhIG5hbWUgb2YgdGhlIGZvcm0gIih7QmJBYVBwU3NFZX17MDEyMzQ1NjctfSkqIiB0byBhIHNlcmllcyBvZiBiaXRzLgotICogaWYgPG9tYXNrPiBvciA8aW1hc2s+IGFyZSBub24tbnVsbCwgdGhleSB3aWxsIGJlIG9yJ2VkIHdpdGggdGhlIGJpdHMgY29ycmVzcG9uZGluZwotICogdG8gb3V0IGFuZCBpbiBiaXRzIHJlc3BlY3RpdmVseS4KKyAqIGlmIDxvbWFzaz4gb3IgPGltYXNrPiBhcmUgbm9uLW51bGwsIHRoZXkgd2lsbCBiZSBvcidlZCB3aXRoIHRoZSBiaXRzCisgKiBjb3JyZXNwb25kaW5nIHRvIG91dCBhbmQgaW4gYml0cyByZXNwZWN0aXZlbHkuCiAgKiByZXR1cm5zIDEgaWYgb2ssIDAgaWYgZXJyb3IgKGluIHdoaWNoIGNhc2UsIG5vdGhpbmcgaXMgd3JpdHRlbikuCiAgKi8KIHN0YXRpYyBpbnQgaW5wdXRfbmFtZTJtYXNrKGNoYXIgKm5hbWUsIHBtYXNrX3QgKm1hc2ssIHBtYXNrX3QgKnZhbHVlLApAQCAtMTg2NCw3ICsxOTQ2LDggQEAKIAlvbSA9IGltID0gbSA9IHYgPSAwVUxMOwogCXdoaWxlICgqbmFtZSkgewogCQlpbnQgaW4sIG91dCwgYml0LCBuZWc7Ci0JCWZvciAoaW4gPSAwOyAoaW4gPCBzaXplb2Yoc2lndGFiKSkgJiYgKHNpZ3RhYltpbl0gIT0gKm5hbWUpOyBpbisrKQorCQlmb3IgKGluID0gMDsgKGluIDwgc2l6ZW9mKHNpZ3RhYikpICYmCisJCQkgICAgIChzaWd0YWJbaW5dICE9ICpuYW1lKTsgaW4rKykKIAkJCTsKIAkJaWYgKGluID49IHNpemVvZihzaWd0YWIpKQogCQkJcmV0dXJuIDA7CS8qIGlucHV0IG5hbWUgbm90IGZvdW5kICovCkBAIC0xOTEyLDggKzE5OTUsMTAgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCWlmICghaW5wdXRfbmFtZTJtYXNrKG5hbWUsICZrZXktPm1hc2ssICZrZXktPnZhbHVlLCAmc2Nhbl9tYXNrX2ksCi0JCQkgICAgICZzY2FuX21hc2tfbykpCisJCQkgICAgICZzY2FuX21hc2tfbykpIHsKKwkJa2ZyZWUoa2V5KTsKIAkJcmV0dXJuIE5VTEw7CisJfQogCiAJa2V5LT50eXBlID0gSU5QVVRfVFlQRV9LQkQ7CiAJa2V5LT5zdGF0ZSA9IElOUFVUX1NUX0xPVzsKQEAgLTE5MzYsNyArMjAyMSw4IEBACiAvKiB0cmllcyB0byBiaW5kIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIHNpZ25hbCBuYW1lIDxuYW1lPi4gVGhlIGZ1bmN0aW9uCiAgKiA8cHJlc3NfZmN0PiB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSA8cHJlc3NfZGF0YT4gYXJnIHdoZW4gdGhlIHNpZ25hbCBpcwogICogYWN0aXZhdGVkLCBhbmQgc28gb24gZm9yIDxyZWxlYXNlX2ZjdD4vPHJlbGVhc2VfZGF0YT4KLSAqIFJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIG5ldyBzaWduYWwgaWYgb2ssIE5VTEwgaWYgdGhlIHNpZ25hbCBjb3VsZCBub3QgYmUgYm91bmQuCisgKiBSZXR1cm5zIHRoZSBwb2ludGVyIHRvIHRoZSBuZXcgc2lnbmFsIGlmIG9rLCBOVUxMIGlmIHRoZSBzaWduYWwgY291bGQgbm90CisgKiBiZSBib3VuZC4KICAqLwogc3RhdGljIHN0cnVjdCBsb2dpY2FsX2lucHV0ICpwYW5lbF9iaW5kX2NhbGxiYWNrKGNoYXIgKm5hbWUsCiAJCQkJCQkgdm9pZCAoKnByZXNzX2ZjdCkgKGludCksCkBAIC0yMDI4LDMzICsyMTE0LDUyIEBACiAKIAlpZiAocHBydCkgewogCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJwYW5lbF9hdHRhY2goKTogcG9ydC0+bnVtYmVyPSVkIHBhcnBvcnQ9JWQsIGFscmVhZHkgcmVnaXN0ZXJlZCAhXG4iLAorCQkgICAgICAgInBhbmVsX2F0dGFjaCgpOiBwb3J0LT5udW1iZXI9JWQgcGFycG9ydD0lZCwgIgorCQkgICAgICAgImFscmVhZHkgcmVnaXN0ZXJlZCAhXG4iLAogCQkgICAgICAgcG9ydC0+bnVtYmVyLCBwYXJwb3J0KTsKIAkJcmV0dXJuOwogCX0KIAotCXBwcnQgPSBwYXJwb3J0X3JlZ2lzdGVyX2RldmljZShwb3J0LCAicGFuZWwiLCBOVUxMLCBOVUxMLAkvKiBwZiwga2YgKi8KKwlwcHJ0ID0gcGFycG9ydF9yZWdpc3Rlcl9kZXZpY2UocG9ydCwgInBhbmVsIiwgTlVMTCwgTlVMTCwgIC8qIHBmLCBrZiAqLwogCQkJCSAgICAgICBOVUxMLAogCQkJCSAgICAgICAvKlBBUlBPUlRfREVWX0VYQ0wgKi8KIAkJCQkgICAgICAgMCwgKHZvaWQgKikmcHBydCk7Ci0KLQlpZiAocGFycG9ydF9jbGFpbShwcHJ0KSkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJQYW5lbDogY291bGQgbm90IGNsYWltIGFjY2VzcyB0byBwYXJwb3J0JWQuIEFib3J0aW5nLlxuIiwKLQkJICAgICAgIHBhcnBvcnQpOworCWlmIChwcHJ0ID09IE5VTEwpIHsKKwkJcHJfZXJyKCJwYW5lbF9hdHRhY2goKTogcG9ydC0+bnVtYmVyPSVkIHBhcnBvcnQ9JWQsICIKKwkJICAgICAgICJwYXJwb3J0X3JlZ2lzdGVyX2RldmljZSgpIGZhaWxlZFxuIiwKKwkJICAgICAgIHBvcnQtPm51bWJlciwgcGFycG9ydCk7CiAJCXJldHVybjsKIAl9CiAKLQkvKiBtdXN0IGluaXQgTENEIGZpcnN0LCBqdXN0IGluIGNhc2UgYW4gSVJRIGZyb20gdGhlIGtleXBhZCBpcyBnZW5lcmF0ZWQgYXQga2V5cGFkIGluaXQgKi8KKwlpZiAocGFycG9ydF9jbGFpbShwcHJ0KSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJQYW5lbDogY291bGQgbm90IGNsYWltIGFjY2VzcyB0byBwYXJwb3J0JWQuICIKKwkJICAgICAgICJBYm9ydGluZy5cbiIsIHBhcnBvcnQpOworCQlnb3RvIGVycl91bnJlZ19kZXZpY2U7CisJfQorCisJLyogbXVzdCBpbml0IExDRCBmaXJzdCwganVzdCBpbiBjYXNlIGFuIElSUSBmcm9tIHRoZSBrZXlwYWQgaXMKKwkgKiBnZW5lcmF0ZWQgYXQga2V5cGFkIGluaXQKKwkgKi8KIAlpZiAobGNkX2VuYWJsZWQpIHsKIAkJbGNkX2luaXQoKTsKLQkJbWlzY19yZWdpc3RlcigmbGNkX2Rldik7CisJCWlmIChtaXNjX3JlZ2lzdGVyKCZsY2RfZGV2KSkKKwkJCWdvdG8gZXJyX3VucmVnX2RldmljZTsKIAl9CiAKIAlpZiAoa2V5cGFkX2VuYWJsZWQpIHsKIAkJa2V5cGFkX2luaXQoKTsKLQkJbWlzY19yZWdpc3Rlcigma2V5cGFkX2Rldik7CisJCWlmIChtaXNjX3JlZ2lzdGVyKCZrZXlwYWRfZGV2KSkKKwkJCWdvdG8gZXJyX2xjZF91bnJlZzsKIAl9CisJcmV0dXJuOworCitlcnJfbGNkX3VucmVnOgorCWlmIChsY2RfZW5hYmxlZCkKKwkJbWlzY19kZXJlZ2lzdGVyKCZsY2RfZGV2KTsKK2Vycl91bnJlZ19kZXZpY2U6CisJcGFycG9ydF91bnJlZ2lzdGVyX2RldmljZShwcHJ0KTsKKwlwcHJ0ID0gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgcGFuZWxfZGV0YWNoKHN0cnVjdCBwYXJwb3J0ICpwb3J0KQpAQCAtMjA2NCw3ICsyMTY5LDggQEAKIAogCWlmICghcHBydCkgewogCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJwYW5lbF9kZXRhY2goKTogcG9ydC0+bnVtYmVyPSVkIHBhcnBvcnQ9JWQsIG5vdGhpbmcgdG8gdW5yZWdpc3Rlci5cbiIsCisJCSAgICAgICAicGFuZWxfZGV0YWNoKCk6IHBvcnQtPm51bWJlcj0lZCBwYXJwb3J0PSVkLCAiCisJCSAgICAgICAibm90aGluZyB0byB1bnJlZ2lzdGVyLlxuIiwKIAkJICAgICAgIHBvcnQtPm51bWJlciwgcGFycG9ydCk7CiAJCXJldHVybjsKIAl9CkBAIC0yMTA1LDEzICsyMjExLDE1IEBACiAKIAkvKiB0YWtlIGNhcmUgb2YgYW4gZXZlbnR1YWwgcHJvZmlsZSAqLwogCXN3aXRjaCAocHJvZmlsZSkgewotCWNhc2UgUEFORUxfUFJPRklMRV9DVVNUT006CS8qIGN1c3RvbSBwcm9maWxlICovCisJY2FzZSBQQU5FTF9QUk9GSUxFX0NVU1RPTToKKwkJLyogY3VzdG9tIHByb2ZpbGUgKi8KIAkJaWYgKGtleXBhZF90eXBlIDwgMCkKIAkJCWtleXBhZF90eXBlID0gREVGQVVMVF9LRVlQQUQ7CiAJCWlmIChsY2RfdHlwZSA8IDApCiAJCQlsY2RfdHlwZSA9IERFRkFVTFRfTENEOwogCQlicmVhazsKLQljYXNlIFBBTkVMX1BST0ZJTEVfT0xEOgkvKiA4IGJpdHMsIDIqMTYsIG9sZCBrZXlwYWQgKi8KKwljYXNlIFBBTkVMX1BST0ZJTEVfT0xEOgorCQkvKiA4IGJpdHMsIDIqMTYsIG9sZCBrZXlwYWQgKi8KIAkJaWYgKGtleXBhZF90eXBlIDwgMCkKIAkJCWtleXBhZF90eXBlID0gS0VZUEFEX1RZUEVfT0xEOwogCQlpZiAobGNkX3R5cGUgPCAwKQpAQCAtMjEyMSwyNSArMjIyOSwyOSBAQAogCQlpZiAobGNkX2h3aWR0aCA8IDApCiAJCQlsY2RfaHdpZHRoID0gMTY7CiAJCWJyZWFrOwotCWNhc2UgUEFORUxfUFJPRklMRV9ORVc6CS8qIHNlcmlhbCwgMioxNiwgbmV3IGtleXBhZCAqLworCWNhc2UgUEFORUxfUFJPRklMRV9ORVc6CisJCS8qIHNlcmlhbCwgMioxNiwgbmV3IGtleXBhZCAqLwogCQlpZiAoa2V5cGFkX3R5cGUgPCAwKQogCQkJa2V5cGFkX3R5cGUgPSBLRVlQQURfVFlQRV9ORVc7CiAJCWlmIChsY2RfdHlwZSA8IDApCiAJCQlsY2RfdHlwZSA9IExDRF9UWVBFX0tTMDA3NDsKIAkJYnJlYWs7Ci0JY2FzZSBQQU5FTF9QUk9GSUxFX0hBTlRST05JWDoJLyogOCBiaXRzLCAyKjE2IGhhbnRyb25peC1saWtlLCBubyBrZXlwYWQgKi8KKwljYXNlIFBBTkVMX1BST0ZJTEVfSEFOVFJPTklYOgorCQkvKiA4IGJpdHMsIDIqMTYgaGFudHJvbml4LWxpa2UsIG5vIGtleXBhZCAqLwogCQlpZiAoa2V5cGFkX3R5cGUgPCAwKQogCQkJa2V5cGFkX3R5cGUgPSBLRVlQQURfVFlQRV9OT05FOwogCQlpZiAobGNkX3R5cGUgPCAwKQogCQkJbGNkX3R5cGUgPSBMQ0RfVFlQRV9IQU5UUk9OSVg7CiAJCWJyZWFrOwotCWNhc2UgUEFORUxfUFJPRklMRV9ORVhDT006CS8qIGdlbmVyaWMgOCBiaXRzLCAyKjE2LCBuZXhjb20ga2V5cGFkLCBlZy4gTmV4Y29tLiAqLworCWNhc2UgUEFORUxfUFJPRklMRV9ORVhDT006CisJCS8qIGdlbmVyaWMgOCBiaXRzLCAyKjE2LCBuZXhjb20ga2V5cGFkLCBlZy4gTmV4Y29tLiAqLwogCQlpZiAoa2V5cGFkX3R5cGUgPCAwKQogCQkJa2V5cGFkX3R5cGUgPSBLRVlQQURfVFlQRV9ORVhDT007CiAJCWlmIChsY2RfdHlwZSA8IDApCiAJCQlsY2RfdHlwZSA9IExDRF9UWVBFX05FWENPTTsKIAkJYnJlYWs7Ci0JY2FzZSBQQU5FTF9QUk9GSUxFX0xBUkdFOgkvKiA4IGJpdHMsIDIqNDAsIG9sZCBrZXlwYWQgKi8KKwljYXNlIFBBTkVMX1BST0ZJTEVfTEFSR0U6CisJCS8qIDggYml0cywgMio0MCwgb2xkIGtleXBhZCAqLwogCQlpZiAoa2V5cGFkX3R5cGUgPCAwKQogCQkJa2V5cGFkX3R5cGUgPSBLRVlQQURfVFlQRV9PTEQ7CiAJCWlmIChsY2RfdHlwZSA8IDApCkBAIC0yMTc5LDYgKzIyOTEsNyBAQAogCQlpZiAocHBydCkgewogCQkJcGFycG9ydF9yZWxlYXNlKHBwcnQpOwogCQkJcGFycG9ydF91bnJlZ2lzdGVyX2RldmljZShwcHJ0KTsKKwkJCXBwcnQgPSBOVUxMOwogCQl9CiAJCXBhcnBvcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJnBhbmVsX2RyaXZlcik7CiAJCXByaW50ayhLRVJOX0VSUiAiUGFuZWwgZHJpdmVyIHZlcnNpb24gIiBQQU5FTF9WRVJTSU9OCkBAIC0yMTk1LDcgKzIzMDgsOCBAQAogCWVsc2UKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUGFuZWwgZHJpdmVyIHZlcnNpb24gIiBQQU5FTF9WRVJTSU9OCiAJCSAgICAgICAiIG5vdCB5ZXQgcmVnaXN0ZXJlZFxuIik7Ci0JLyogdGVsbHMgdmFyaW91cyBzdWJzeXN0ZW1zIGFib3V0IHRoZSBmYWN0IHRoYXQgaW5pdGlhbGl6YXRpb24gaXMgZmluaXNoZWQgKi8KKwkvKiB0ZWxscyB2YXJpb3VzIHN1YnN5c3RlbXMgYWJvdXQgdGhlIGZhY3QgdGhhdCBpbml0aWFsaXphdGlvbgorCSAgIGlzIGZpbmlzaGVkICovCiAJaW5pdF9pbl9wcm9ncmVzcyA9IDA7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMjI4LDYgKzIzNDIsNyBAQAogCQkvKiBUT0RPOiBmcmVlIGFsbCBpbnB1dCBzaWduYWxzICovCiAJCXBhcnBvcnRfcmVsZWFzZShwcHJ0KTsKIAkJcGFycG9ydF91bnJlZ2lzdGVyX2RldmljZShwcHJ0KTsKKwkJcHBydCA9IE5VTEw7CiAJfQogCXBhcnBvcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJnBhbmVsX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvaW5vZGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9pbm9kZS5jCmluZGV4IDY0M2I0MTMuLmJjMWM2MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9pbm9kZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9pbm9kZS5jCkBAIC04MTUsNyArODE1LDcgQEAKIH0KIAogLyoKLSAqIFNtYWxsIGFkZHJlcyBzcGFjZSBvcGVyYXRpb25zIGZvciBQT0hNRUxGUy4KKyAqIFNtYWxsIGFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucyBmb3IgUE9ITUVMRlMuCiAgKi8KIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgcG9obWVsZnNfYW9wcyA9IHsKIAkucmVhZHBhZ2UJCT0gcG9obWVsZnNfcmVhZHBhZ2UsCkBAIC04NDcsNyArODQ3LDcgQEAKIH0KIAogLyoKLSAqIC0+YWxsb2NfaW5vZGUoKSBjYWxsYmFjay4gQWxsb2NhdGVzIGlub2RlIGFuZCBpbml0aWxpemVzIHByaXZhdGUgZGF0YS4KKyAqIC0+YWxsb2NfaW5vZGUoKSBjYWxsYmFjay4gQWxsb2NhdGVzIGlub2RlIGFuZCBpbml0aWFsaXplcyBwcml2YXRlIGRhdGEuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKnBvaG1lbGZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CkBAIC0xMjY2LDcgKzEyNjYsNyBAQAogewogCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0Ioc2IpOwogCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGk7Ci0JdW5zaWduZWQgaW50IGNvdW50OworCXVuc2lnbmVkIGludCBjb3VudCA9IDA7CiAJdW5zaWduZWQgaW50IGluX2Ryb3BfbGlzdCA9IDA7CiAJc3RydWN0IGlub2RlICppbm9kZSwgKnRtcDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3F1YXRlY2hfdXNiMi9xdWF0ZWNoX3VzYjIuYyBiL2RyaXZlcnMvc3RhZ2luZy9xdWF0ZWNoX3VzYjIvcXVhdGVjaF91c2IyLmMKaW5kZXggZWNkNzMxMy4uOTgzOGVhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3F1YXRlY2hfdXNiMi9xdWF0ZWNoX3VzYjIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcXVhdGVjaF91c2IyL3F1YXRlY2hfdXNiMi5jCkBAIC0yNTgsOCArMjU4LDYgQEAKIHN0YXRpYyBpbnQgcXQyX2JveF9zZXRfcmVnaXN0ZXIoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKIAkJdW5zaWduZWQgc2hvcnQgVWFydF9OdW1iZXIsIHVuc2lnbmVkIHNob3J0IFJlZ2lzdGVyX051bSwKIAkJdW5zaWduZWQgc2hvcnQgVmFsdWUpOwotc3RhdGljIGludCBxdDJfYm94X2ZsdXNoKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsICB1bnNpZ25lZCBjaGFyIHVhcnRfbnVtYmVyLAotCQl1bnNpZ25lZCBzaG9ydCByY3Zfb3JfeG1pdCk7CiBzdGF0aWMgaW50IHF0Ml9ib3hzZXR1YXJ0KHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHVuc2lnbmVkIHNob3J0IFVhcnRfTnVtYmVyLAogCQl1bnNpZ25lZCBzaG9ydCBkZWZhdWx0X2Rpdmlzb3IsIHVuc2lnbmVkIGNoYXIgZGVmYXVsdF9MQ1IpOwogc3RhdGljIGludCBxdDJfYm94c2V0aHdfZmxvd2N0bChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLApAQCAtNjQ1LDkgKzY0Myw2IEBACiAJLyogZ2V0IHRoZSBkZXZpY2UgcHJpdmF0ZSBkYXRhICovCiAJcG9ydF9leHRyYSA9IHF0Ml9nZXRfcG9ydF9wcml2YXRlKHBvcnQpOyAvKiBwb3J0IHByaXZhdGUgZGF0YSAqLwogCi0JLyogd2UgZG9uJ3QgbmVlZCB0byBmb3JjZSBmbHVzaCB0aG91Z2ggdGhlIGhhcmR3YXJlLCBzbyB3ZSBza2lwIHVzaW5nCi0JICogcXQyX2JveF9mbHVzaCgpIGhlcmUgKi8KLQogCS8qIHdlIGNhbiBub3cgKGFuZCBvbmx5IG5vdykgc3RvcCByZWFkaW5nIGRhdGEgKi8KIAlwb3J0X2V4dHJhLT5jbG9zZV9wZW5kaW5nID0gdHJ1ZTsKIAlkYmcoIiVzKCk6IHBvcnRfZXh0cmEtPmNsb3NlX3BlbmRpbmcgPSB0cnVlIiwgX19mdW5jX18pOwpAQCAtMTg0MSwyNCArMTgzNiw2IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCi0vKiogQGJyaWVmIFJlcXVlc3QgdGhlIFR4IG9yIFJ4IGJ1ZmZlcnMgb24gdGhlIFVTQiBzaWRlIGJlIGZsdXNoZWQKLSAqCi0gKiBUeCBmbHVzaDogV2hlbiBhbGwgdGhlIGN1cnJlbnRseSBidWZmZXJlZCBkYXRhIGhhcyBiZWVuIHNlbnQsIHNlbmQgYW4gZXNjYXBlCi0gKiBzZXF1ZW5jZSBiYWNrIHVwIHRoZSBkYXRhIHN0cmVhbSB0byB1cwotICogUnggZmx1c2g6IGFkZCBhIGZsYWcgaW4gdGhlIGRhdGEgc3RyZWFtIG5vdyBzbyB3ZSBrbm93IHdoZW4gaXQncyBtYWRlIGl0J3MKLSAqIHdheSB1cCB0byB1cy4KLSAqLwotc3RhdGljIGludCBxdDJfYm94X2ZsdXNoKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsICB1bnNpZ25lZCBjaGFyIHVhcnRfbnVtYmVyLAotCQkgICAgdW5zaWduZWQgc2hvcnQgcmN2X29yX3htaXQpCi17Ci0JaW50IHJlc3VsdDsKLQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCi0JCVFUMl9GTFVTSF9ERVZJQ0UsIDB4NDAsIHJjdl9vcl94bWl0LCB1YXJ0X251bWJlciwgTlVMTCwgMCwKLQkJMzAwKTsKLQlyZXR1cm4gcmVzdWx0OwotfQotCiAvKiogcXQyX2JveHNldHVhcnQgLSBJc3N1ZSBhIFNFVF9VQVJUIHZlbmRvci1zcGNpZmljIHJlcXVlc3Qgb24gdGhlIGRlZmF1bHQKICAqIGNvbnRyb2wgcGlwZS4gSWYgc3VjY2Vzc2Z1bCBzZXRzIGJhdWQgcmF0ZSBkaXZpc29yIGFuZCBMQ1IgdmFsdWUuCiAgKi8KQEAgLTE4NzMsNiArMTg1MCw3IEBACiAJCQlRVDJfR0VUX1NFVF9VQVJULCAweDQwLCBkZWZhdWx0X2Rpdmlzb3IsIFVhcnROdW1hbmRMQ1IsCiAJCQlOVUxMLCAwLCAzMDApOwogfQorCiAvKiogcXQyX2JveHNldGh3X2Zsb3djdGwgLSBUdXJuIGhhcmR3YXJlIChSVFMvQ1RTKSBmbG93IGNvbnRyb2wgb24gYW5kIG9mZiBmb3IKICAqIGEgaGFyZHdhcmUgVUFSVC4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3F1aWNrc3RhcnQvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9xdWlja3N0YXJ0L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJlYTQ4NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9xdWlja3N0YXJ0L0tjb25maWcKQEAgLTAsMCArMSwxMCBAQAorY29uZmlnIEFDUElfUVVJQ0tTVEFSVAorCXRyaXN0YXRlICJBQ1BJIFF1aWNrc3RhcnQga2V5IGRyaXZlciIKKwlkZXBlbmRzIG9uIEFDUEkgJiYgSU5QVVQKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgcGxhdGZvcm0gdGhhdCBzdXBwb3J0cyB0aGUgQUNQSQorCSAgcXVpY2tzdGFydCBrZXkgcHJvdG9jb2wuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZQorCSAgY2FsbGVkIHF1aWNrc3RhcnQuCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9xdWlja3N0YXJ0L01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3F1aWNrc3RhcnQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkwZTBlNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9xdWlja3N0YXJ0L01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai0kKENPTkZJR19BQ1BJX1FVSUNLU1RBUlQpCQkrPSBxdWlja3N0YXJ0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9xdWlja3N0YXJ0L3F1aWNrc3RhcnQuYyBiL2RyaXZlcnMvc3RhZ2luZy9xdWlja3N0YXJ0L3F1aWNrc3RhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjEyMjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3F1aWNrc3RhcnQvcXVpY2tzdGFydC5jCkBAIC0wLDAgKzEsNDc0IEBACisvKgorICogIHF1aWNrc3RhcnQuYyAtIEFDUEkgRGlyZWN0IEFwcCBMYXVuY2ggZHJpdmVyCisgKgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBBbmdlbG8gQXJyaWZhbm8gPG1pa25peEBnbWFpbC5jb20+CisgKgorICogIEluZm9ybWF0aW9uIGdhdGhlcmVkIGZyb20gZGlzYXNzZWJsZWQgZHNkdCBhbmQgZnJvbSBoZXJlOgorICogICJodHRwOi8vZG93bmxvYWQubWljcm9zb2Z0LmNvbS9kb3dubG9hZC85L2MvNS8KKyAqICA5YzViMjE2Ny04MDE3LTRiYWUtOWZkZS1kNTk5YmFjODE4NGEvRGlyQXBwTGF1bmNoX1Zpc3RhLmRvYyIKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2RlZmluZSBRVUlDS1NUQVJUX1ZFUlNJT04gIjEuMDMiCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisKK01PRFVMRV9BVVRIT1IoIkFuZ2VsbyBBcnJpZmFubyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBQ1BJIERpcmVjdCBBcHAgTGF1bmNoIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisjZGVmaW5lIFFVSUNLU1RBUlRfQUNQSV9ERVZJQ0VfTkFNRSAgICJxdWlja3N0YXJ0IgorI2RlZmluZSBRVUlDS1NUQVJUX0FDUElfQ0xBU1MgICAgICAgICAicXVpY2tzdGFydCIKKyNkZWZpbmUgUVVJQ0tTVEFSVF9BQ1BJX0hJRCAgICAgICAgICAgIlBOUDBDMzIiCisKKyNkZWZpbmUgUVVJQ0tTVEFSVF9QRl9EUklWRVJfTkFNRSAgICAgInF1aWNrc3RhcnQiCisjZGVmaW5lIFFVSUNLU1RBUlRfUEZfREVWSUNFX05BTUUgICAgICJxdWlja3N0YXJ0IgorI2RlZmluZSBRVUlDS1NUQVJUX1BGX0RFVkFUVFJfTkFNRSAgICAicHJlc3NlZF9idXR0b24iCisKKyNkZWZpbmUgUVVJQ0tTVEFSVF9NQVhfQlROX05BTUVfTEVOICAgMTYKKworLyogVGhlcmUgd2lsbCBiZSB0d28gZXZlbnRzOgorCSAqIDB4MDIgLSBBIGhvdCBidXR0b24gd2FzIHByZXNzZWQgd2hpbGUgZGV2aWNlIHdhcyBvZmYvc2xlZXBpbmcuCisJICogMHg4MCAtIEEgaG90IGJ1dHRvbiB3YXMgcHJlc3NlZCB3aGlsZSBkZXZpY2Ugd2FzIHVwLiAqLworI2RlZmluZSBRVUlDS1NUQVJUX0VWRU5UX1dBS0UgICAgICAgICAweDAyCisjZGVmaW5lIFFVSUNLU1RBUlRfRVZFTlRfUlVOVElNRSAgICAgIDB4ODAKKworc3RydWN0IHF1aWNrc3RhcnRfYnRuIHsKKwljaGFyICpuYW1lOworCXVuc2lnbmVkIGludCBpZDsKKwlzdHJ1Y3QgcXVpY2tzdGFydF9idG4gKm5leHQ7Cit9OworCitzdGF0aWMgc3RydWN0IHF1aWNrc3RhcnRfZHJpdmVyX2RhdGEgeworCXN0cnVjdCBxdWlja3N0YXJ0X2J0biAqYnRuX2xzdDsKKwlzdHJ1Y3QgcXVpY2tzdGFydF9idG4gKnByZXNzZWQ7Cit9IHF1aWNrc3RhcnRfZGF0YTsKKworLyogQUNQSSBkcml2ZXIgU3RydWN0cyAqLworc3RydWN0IHF1aWNrc3RhcnRfYWNwaSB7CisJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2U7CisJc3RydWN0IHF1aWNrc3RhcnRfYnRuICpidG47Cit9Oworc3RhdGljIGludCBxdWlja3N0YXJ0X2FjcGlfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKK3N0YXRpYyBpbnQgcXVpY2tzdGFydF9hY3BpX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpOworc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCAgcXVpY2tzdGFydF9kZXZpY2VfaWRzW10gPSB7CisJe1FVSUNLU1RBUlRfQUNQSV9ISUQsIDB9LAorCXsiIiwgMH0sCit9OworCitzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIHF1aWNrc3RhcnRfYWNwaV9kcml2ZXIgPSB7CisJLm5hbWUgPSAicXVpY2tzdGFydCIsCisJLmNsYXNzID0gUVVJQ0tTVEFSVF9BQ1BJX0NMQVNTLAorCS5pZHMgPSBxdWlja3N0YXJ0X2RldmljZV9pZHMsCisJLm9wcyA9IHsKKwkJCS5hZGQgPSBxdWlja3N0YXJ0X2FjcGlfYWRkLAorCQkJLnJlbW92ZSA9IHF1aWNrc3RhcnRfYWNwaV9yZW1vdmUsCisJCX0sCit9OworCisvKiBJbnB1dCBkZXZpY2Ugc3RydWN0cyAqLworc3RydWN0IGlucHV0X2RldiAqcXVpY2tzdGFydF9pbnB1dDsKKworLyogUGxhdGZvcm0gZHJpdmVyIHN0cnVjdHMgKi8KK3N0YXRpYyBzc2l6ZV90IGJ1dHRvbnNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljaGFyICpidWYpOworc3RhdGljIHNzaXplX3QgcHJlc3NlZF9idXR0b25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljaGFyICpidWYpOworc3RhdGljIHNzaXplX3QgcHJlc3NlZF9idXR0b25fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQkJIHNpemVfdCBjb3VudCk7CitzdGF0aWMgREVWSUNFX0FUVFIocHJlc3NlZF9idXR0b24sIDA2NjYsIHByZXNzZWRfYnV0dG9uX3Nob3csCisJCQkJCSBwcmVzc2VkX2J1dHRvbl9zdG9yZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoYnV0dG9ucywgMDQ0NCwgYnV0dG9uc19zaG93LCBOVUxMKTsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZl9kZXZpY2U7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwZl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBRVUlDS1NUQVJUX1BGX0RSSVZFUl9OQU1FLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9Cit9OworCisvKgorICogUGxhdGZvcm0gZHJpdmVyIGZ1bmN0aW9ucworICovCitzdGF0aWMgc3NpemVfdCBidXR0b25zX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSBjaGFyICpidWYpCit7CisJaW50IGNvdW50ID0gMDsKKwlzdHJ1Y3QgcXVpY2tzdGFydF9idG4gKnB0ciA9IHF1aWNrc3RhcnRfZGF0YS5idG5fbHN0OworCisJaWYgKCFwdHIpCisJCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIm5vbmUiKTsKKworCXdoaWxlIChwdHIgJiYgKGNvdW50IDwgUEFHRV9TSVpFKSkgeworCQlpZiAocHRyLT5uYW1lKSB7CisJCQljb3VudCArPSBzbnByaW50ZihidWYgKyBjb3VudCwKKwkJCQkJUEFHRV9TSVpFIC0gY291bnQsCisJCQkJCSIlZFx0JXNcbiIsIHB0ci0+aWQsIHB0ci0+bmFtZSk7CisJCX0KKwkJcHRyID0gcHRyLT5uZXh0OworCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgcHJlc3NlZF9idXR0b25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljaGFyICpidWYpCit7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsCisJCShxdWlja3N0YXJ0X2RhdGEucHJlc3NlZD9xdWlja3N0YXJ0X2RhdGEucHJlc3NlZC0+bmFtZToibm9uZSIpKTsKK30KKworCitzdGF0aWMgc3NpemVfdCBwcmVzc2VkX2J1dHRvbl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWlmIChjb3VudCA8IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHN0cm5jYXNlY21wKGJ1ZiwgIm5vbmUiLCA0KSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXF1aWNrc3RhcnRfZGF0YS5wcmVzc2VkID0gTlVMTDsKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qIEhvdHN0YXJ0IEhlbHBlciBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQgcXVpY2tzdGFydF9idG5sc3RfYWRkKHN0cnVjdCBxdWlja3N0YXJ0X2J0biAqKmRhdGEpCit7CisJc3RydWN0IHF1aWNrc3RhcnRfYnRuICoqcHRyID0gJnF1aWNrc3RhcnRfZGF0YS5idG5fbHN0OworCisJd2hpbGUgKCpwdHIpCisJCXB0ciA9ICYoKCpwdHIpLT5uZXh0KTsKKworCSpwdHIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcXVpY2tzdGFydF9idG4pLCBHRlBfS0VSTkVMKTsKKwlpZiAoISpwdHIpIHsKKwkJKmRhdGEgPSBOVUxMOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJKmRhdGEgPSAqcHRyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHF1aWNrc3RhcnRfYnRubHN0X2RlbChzdHJ1Y3QgcXVpY2tzdGFydF9idG4gKmRhdGEpCit7CisJc3RydWN0IHF1aWNrc3RhcnRfYnRuICoqcHRyID0gJnF1aWNrc3RhcnRfZGF0YS5idG5fbHN0OworCisJaWYgKCFkYXRhKQorCQlyZXR1cm47CisKKwl3aGlsZSAoKnB0cikgeworCQlpZiAoKnB0ciA9PSBkYXRhKSB7CisJCQkqcHRyID0gKCpwdHIpLT5uZXh0OworCQkJa2ZyZWUoZGF0YSk7CisJCQlyZXR1cm47CisJCX0KKwkJcHRyID0gJigoKnB0ciktPm5leHQpOworCX0KKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgcXVpY2tzdGFydF9idG5sc3RfZnJlZSh2b2lkKQoreworCXN0cnVjdCBxdWlja3N0YXJ0X2J0biAqcHRyID0gcXVpY2tzdGFydF9kYXRhLmJ0bl9sc3Q7CisJc3RydWN0IHF1aWNrc3RhcnRfYnRuICpscHRyID0gTlVMTDsKKworCXdoaWxlIChwdHIpIHsKKwkJbHB0ciA9IHB0cjsKKwkJcHRyID0gcHRyLT5uZXh0OworCQlrZnJlZShscHRyLT5uYW1lKTsKKwkJa2ZyZWUobHB0cik7CisJfQorCisJcmV0dXJuOworfQorCisvKiBBQ1BJIERyaXZlciBmdW5jdGlvbnMgKi8KK3N0YXRpYyB2b2lkIHF1aWNrc3RhcnRfYWNwaV9ub3RpZnkoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHF1aWNrc3RhcnRfYWNwaSAqcXVpY2tzdGFydCA9IGRhdGE7CisKKwlpZiAoIXF1aWNrc3RhcnQpCisJCXJldHVybjsKKworCWlmIChldmVudCA9PSBRVUlDS1NUQVJUX0VWRU5UX1dBS0UpCisJCXF1aWNrc3RhcnRfZGF0YS5wcmVzc2VkID0gcXVpY2tzdGFydC0+YnRuOworCWVsc2UgaWYgKGV2ZW50ID09IFFVSUNLU1RBUlRfRVZFTlRfUlVOVElNRSkgeworCQlpbnB1dF9yZXBvcnRfa2V5KHF1aWNrc3RhcnRfaW5wdXQsIHF1aWNrc3RhcnQtPmJ0bi0+aWQsIDEpOworCQlpbnB1dF9zeW5jKHF1aWNrc3RhcnRfaW5wdXQpOworCQlpbnB1dF9yZXBvcnRfa2V5KHF1aWNrc3RhcnRfaW5wdXQsIHF1aWNrc3RhcnQtPmJ0bi0+aWQsIDApOworCQlpbnB1dF9zeW5jKHF1aWNrc3RhcnRfaW5wdXQpOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHF1aWNrc3RhcnRfYWNwaV9naGlkKHN0cnVjdCBxdWlja3N0YXJ0X2FjcGkgKnF1aWNrc3RhcnQpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CisJdWludDMyX3QgdXNhZ2VpZCA9IDA7CisKKwlpZiAoIXF1aWNrc3RhcnQpCisJCXJldHVybjsKKworCS8qIFRoaXMgcmV0dXJucyBhIGJ1ZmZlciB0ZWxsaW5nIHRoZSBidXR0b24gdXNhZ2UgSUQsCisJICogYW5kIHRyaWdnZXJzIHBlbmRpbmcgbm90aWZ5IGV2ZW50cyAoVGhlIG9uZXMgYmVmb3JlIGJvb3RpbmcpLiAqLworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KHF1aWNrc3RhcnQtPmRldmljZS0+aGFuZGxlLAorCQkJCQkiR0hJRCIsIE5VTEwsICZidWZmZXIpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSB8fCAhYnVmZmVyLnBvaW50ZXIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJxdWlja3N0YXJ0OiAlcyBHSElEIG1ldGhvZCBmYWlsZWQuXG4iLAorCQkgICAgICAgcXVpY2tzdGFydC0+YnRuLT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChidWZmZXIubGVuZ3RoIDwgOCkKKwkJcmV0dXJuOworCisJLyogPDxUaGUgR0hJRCBtZXRob2QgY2FuIHJldHVybiBhIEJZVEUsIFdPUkQsIG9yIERXT1JELgorCSAqIFRoZSB2YWx1ZSBtdXN0IGJlIGVuY29kZWQgaW4gbGl0dGxlLWVuZGlhbiBieXRlCisJICogb3JkZXIgKGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgZmlyc3QpLj4+ICovCisJdXNhZ2VpZCA9ICooKHVpbnQzMl90ICopKGJ1ZmZlci5wb2ludGVyICsgKGJ1ZmZlci5sZW5ndGggLSA4KSkpOworCXF1aWNrc3RhcnQtPmJ0bi0+aWQgPSB1c2FnZWlkOworCisJa2ZyZWUoYnVmZmVyLnBvaW50ZXIpOworfQorCitzdGF0aWMgaW50IHF1aWNrc3RhcnRfYWNwaV9jb25maWcoc3RydWN0IHF1aWNrc3RhcnRfYWNwaSAqcXVpY2tzdGFydCwgY2hhciAqYmlkKQoreworCWludCBsZW4gPSBzdHJsZW4oYmlkKTsKKwlpbnQgcmV0OworCisJLyogQWRkIGJ1dHRvbiB0byBsaXN0ICovCisJcmV0ID0gcXVpY2tzdGFydF9idG5sc3RfYWRkKCZxdWlja3N0YXJ0LT5idG4pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlxdWlja3N0YXJ0LT5idG4tPm5hbWUgPSBremFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOworCWlmICghcXVpY2tzdGFydC0+YnRuLT5uYW1lKSB7CisJCXF1aWNrc3RhcnRfYnRubHN0X2ZyZWUoKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXN0cmNweShxdWlja3N0YXJ0LT5idG4tPm5hbWUsIGJpZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxdWlja3N0YXJ0X2FjcGlfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQoreworCWludCByZXQgPSAwOworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOworCXN0cnVjdCBxdWlja3N0YXJ0X2FjcGkgKnF1aWNrc3RhcnQgPSBOVUxMOworCisJaWYgKCFkZXZpY2UpCisJCXJldHVybiAtRUlOVkFMOworCisJcXVpY2tzdGFydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBxdWlja3N0YXJ0X2FjcGkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXF1aWNrc3RhcnQpCisJCXJldHVybiAtRU5PTUVNOworCisJcXVpY2tzdGFydC0+ZGV2aWNlID0gZGV2aWNlOworCXN0cmNweShhY3BpX2RldmljZV9uYW1lKGRldmljZSksIFFVSUNLU1RBUlRfQUNQSV9ERVZJQ0VfTkFNRSk7CisJc3RyY3B5KGFjcGlfZGV2aWNlX2NsYXNzKGRldmljZSksIFFVSUNLU1RBUlRfQUNQSV9DTEFTUyk7CisJZGV2aWNlLT5kcml2ZXJfZGF0YSA9IHF1aWNrc3RhcnQ7CisKKwkvKiBBZGQgYnV0dG9uIHRvIGxpc3QgYW5kIGluaXRpYWxpemUgc29tZSBzdHVmZiAqLworCXJldCA9IHF1aWNrc3RhcnRfYWNwaV9jb25maWcocXVpY2tzdGFydCwgYWNwaV9kZXZpY2VfYmlkKGRldmljZSkpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbF9jb25maWc7CisKKwlzdGF0dXMgPSBhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoZGV2aWNlLT5oYW5kbGUsCisJCQkJCQlBQ1BJX0FMTF9OT1RJRlksCisJCQkJCQlxdWlja3N0YXJ0X2FjcGlfbm90aWZ5LAorCQkJCQkJcXVpY2tzdGFydCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXByaW50ayhLRVJOX0VSUiAicXVpY2tzdGFydDogTm90aWZ5IGhhbmRsZXIgaW5zdGFsbCBlcnJvclxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF9pbnN0YWxsbm90aWZ5OworCX0KKworCXF1aWNrc3RhcnRfYWNwaV9naGlkKHF1aWNrc3RhcnQpOworCisJcmV0dXJuIDA7CisKK2ZhaWxfaW5zdGFsbG5vdGlmeToKKwlxdWlja3N0YXJ0X2J0bmxzdF9kZWwocXVpY2tzdGFydC0+YnRuKTsKKworZmFpbF9jb25maWc6CisKKwlrZnJlZShxdWlja3N0YXJ0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcXVpY2tzdGFydF9hY3BpX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgcXVpY2tzdGFydF9hY3BpICpxdWlja3N0YXJ0ID0gTlVMTDsKKworCWlmICghZGV2aWNlIHx8ICFhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcXVpY2tzdGFydCA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKKworCXN0YXR1cyA9IGFjcGlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKGRldmljZS0+aGFuZGxlLAorCQkJCQkJIEFDUElfQUxMX05PVElGWSwKKwkJCQkJICAgIHF1aWNrc3RhcnRfYWNwaV9ub3RpZnkpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJxdWlja3N0YXJ0OiBFcnJvciByZW1vdmluZyBub3RpZnkgaGFuZGxlclxuIik7CisKKworCWtmcmVlKHF1aWNrc3RhcnQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIE1vZHVsZSBmdW5jdGlvbnMgKi8KKworc3RhdGljIHZvaWQgcXVpY2tzdGFydF9leGl0KHZvaWQpCit7CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UocXVpY2tzdGFydF9pbnB1dCk7CisJaW5wdXRfZnJlZV9kZXZpY2UocXVpY2tzdGFydF9pbnB1dCk7CisKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBmX2RldmljZS0+ZGV2LCAmZGV2X2F0dHJfcHJlc3NlZF9idXR0b24pOworCWRldmljZV9yZW1vdmVfZmlsZSgmcGZfZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9idXR0b25zKTsKKworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBmX2RldmljZSk7CisKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGZfZHJpdmVyKTsKKworCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZxdWlja3N0YXJ0X2FjcGlfZHJpdmVyKTsKKworCXF1aWNrc3RhcnRfYnRubHN0X2ZyZWUoKTsKKworCXJldHVybjsKK30KKworc3RhdGljIGludCBfX2luaXQgcXVpY2tzdGFydF9pbml0X2lucHV0KHZvaWQpCit7CisJc3RydWN0IHF1aWNrc3RhcnRfYnRuICoqcHRyID0gJnF1aWNrc3RhcnRfZGF0YS5idG5fbHN0OworCWludCBjb3VudDsKKworCXF1aWNrc3RhcnRfaW5wdXQgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKworCWlmICghcXVpY2tzdGFydF9pbnB1dCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlxdWlja3N0YXJ0X2lucHV0LT5uYW1lID0gIlF1aWNrc3RhcnQgQUNQSSBCdXR0b25zIjsKKwlxdWlja3N0YXJ0X2lucHV0LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7CisKKwl3aGlsZSAoKnB0cikgeworCQljb3VudCsrOworCQlzZXRfYml0KEVWX0tFWSwgcXVpY2tzdGFydF9pbnB1dC0+ZXZiaXQpOworCQlzZXRfYml0KCgqcHRyKS0+aWQsIHF1aWNrc3RhcnRfaW5wdXQtPmtleWJpdCk7CisJCXB0ciA9ICYoKCpwdHIpLT5uZXh0KTsKKwl9CisKKwlyZXR1cm4gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHF1aWNrc3RhcnRfaW5wdXQpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBxdWlja3N0YXJ0X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IDA7CisKKwkvKiBBQ1BJIENoZWNrICovCisJaWYgKGFjcGlfZGlzYWJsZWQpCisJCXJldHVybiAtRU5PREVWOworCisJLyogQUNQSSBkcml2ZXIgcmVnaXN0ZXIgKi8KKwlzdGF0dXMgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJnF1aWNrc3RhcnRfYWNwaV9kcml2ZXIpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIElmIGV4aXN0aW5nIGJ1cyB3aXRoIG5vIGRldmljZXMgKi8KKwlpZiAoIXF1aWNrc3RhcnRfZGF0YS5idG5fbHN0KSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF9wZmRydl9yZWc7CisJfQorCisJLyogUGxhdGZvcm0gZHJpdmVyIHJlZ2lzdGVyICovCisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwZl9kcml2ZXIpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbF9wZmRydl9yZWc7CisKKwkvKiBQbGF0Zm9ybSBkZXZpY2UgcmVnaXN0ZXIgKi8KKwlwZl9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoUVVJQ0tTVEFSVF9QRl9ERVZJQ0VfTkFNRSwgLTEpOworCWlmICghcGZfZGV2aWNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9wZmRldl9hbGxvYzsKKwl9CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZl9kZXZpY2UpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbF9wZmRldl9hZGQ7CisKKwkvKiBDcmVhdGUgZGV2aWNlIHN5c2ZzIGZpbGUgKi8KKwlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBmX2RldmljZS0+ZGV2LCAmZGV2X2F0dHJfcHJlc3NlZF9idXR0b24pOworCWlmIChyZXQpCisJCWdvdG8gZmFpbF9kZXZfZmlsZTsKKworCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmcGZfZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9idXR0b25zKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxfZGV2X2ZpbGUyOworCisKKwkvKiBJbnB1dCBkZXZpY2UgKi8KKwlyZXQgPSBxdWlja3N0YXJ0X2luaXRfaW5wdXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxfaW5wdXQ7CisKKwlwcmludGsoS0VSTl9JTkZPICJxdWlja3N0YXJ0OiBBQ1BJIERpcmVjdCBBcHAgTGF1bmNoIHZlciAlc1xuIiwKKwkJCQkJCVFVSUNLU1RBUlRfVkVSU0lPTik7CisKKwlyZXR1cm4gMDsKK2ZhaWxfaW5wdXQ6CisJZGV2aWNlX3JlbW92ZV9maWxlKCZwZl9kZXZpY2UtPmRldiwgJmRldl9hdHRyX2J1dHRvbnMpOworCitmYWlsX2Rldl9maWxlMjoKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBmX2RldmljZS0+ZGV2LCAmZGV2X2F0dHJfcHJlc3NlZF9idXR0b24pOworCitmYWlsX2Rldl9maWxlOgorCXBsYXRmb3JtX2RldmljZV9kZWwocGZfZGV2aWNlKTsKKworZmFpbF9wZmRldl9hZGQ6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChwZl9kZXZpY2UpOworCitmYWlsX3BmZGV2X2FsbG9jOgorCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwZl9kcml2ZXIpOworCitmYWlsX3BmZHJ2X3JlZzoKKwlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmcXVpY2tzdGFydF9hY3BpX2RyaXZlcik7CisKKwlyZXR1cm4gcmV0OworfQorCittb2R1bGVfaW5pdChxdWlja3N0YXJ0X2luaXQpOworbW9kdWxlX2V4aXQocXVpY2tzdGFydF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyN2IzYzYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi1jb25maWcgUkFNWlNXQVAKLQl0cmlzdGF0ZSAiQ29tcHJlc3NlZCBpbi1tZW1vcnkgc3dhcCBkZXZpY2UgKHJhbXpzd2FwKSIKLQlkZXBlbmRzIG9uIFNXQVAKLQlzZWxlY3QgTFpPX0NPTVBSRVNTCi0Jc2VsZWN0IExaT19ERUNPTVBSRVNTCi0JZGVmYXVsdCBuCi0JaGVscAotCSAgQ3JlYXRlcyB2aXJ0dWFsIGJsb2NrIGRldmljZXMgd2hpY2ggY2FuIChvbmx5KSBiZSB1c2VkIGFzIHN3YXAKLQkgIGRpc2tzLiBQYWdlcyBzd2FwcGVkIHRvIHRoZXNlIGRpc2tzIGFyZSBjb21wcmVzc2VkIGFuZCBzdG9yZWQgaW4KLQkgIG1lbW9yeSBpdHNlbGYuCi0KLQkgIFNlZSByYW16c3dhcC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0JICBQcm9qZWN0IGhvbWU6IGh0dHA6Ly9jb21wY2FjaGUuZ29vZ2xlY29kZS5jb20vCi0KLWNvbmZpZyBSQU1aU1dBUF9TVEFUUwotCWJvb2wgIkVuYWJsZSByYW16c3dhcCBzdGF0cyIKLQlkZXBlbmRzIG9uIFJBTVpTV0FQCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgRW5hYmxlIHN0YXRpc3RpY3MgY29sbGVjdGlvbiBmb3IgcmFtenN3YXAuIFRoaXMgYWRkcyBvbmx5IGEgbWluaW1hbAotCSAgb3ZlcmhlYWQuIEluIHVuc3VyZSwgc2F5IFkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwN2Q3ZGMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1yYW16c3dhcC1vYmpzCTo9CXJhbXpzd2FwX2Rydi5vIHh2bWFsbG9jLm8KLQotb2JqLSQoQ09ORklHX1JBTVpTV0FQKQkrPQlyYW16c3dhcC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvcmFtenN3YXAudHh0IGIvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3JhbXpzd2FwLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY5NGFjZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvcmFtenN3YXAudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotcmFtenN3YXA6IENvbXByZXNzZWQgUkFNIGJhc2VkIHN3YXAgZGV2aWNlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVByb2plY3QgaG9tZTogaHR0cDovL2NvbXBjYWNoZS5nb29nbGVjb2RlLmNvbS8KLQotKiBJbnRyb2R1Y3Rpb24KLQotVGhlIHJhbXpzd2FwIG1vZHVsZSBjcmVhdGVzIFJBTSBiYXNlZCBibG9jayBkZXZpY2VzIHdoaWNoIGNhbiAob25seSkgYmUgdXNlZCBhcwotc3dhcCBkaXNrcy4gUGFnZXMgc3dhcHBlZCB0byB0aGVzZSBkZXZpY2VzIGFyZSBjb21wcmVzc2VkIGFuZCBzdG9yZWQgaW4gbWVtb3J5Ci1pdHNlbGYuIFNlZSBwcm9qZWN0IGhvbWUgZm9yIHVzZSBjYXNlcywgcGVyZm9ybWFuY2UgbnVtYmVycyBhbmQgYSBsb3QgbW9yZS4KLQotSW5kaXZpZHVhbCByYW16c3dhcCBkZXZpY2VzIGFyZSBjb25maWd1cmVkIGFuZCBpbml0aWFsaXplZCB1c2luZyByenNjb250cm9sCi11c2Vyc3BhY2UgdXRpbGl0eSBhcyBzaG93biBpbiBleGFtcGxlcyBiZWxvdy4gU2VlIHJ6c2NvbnRyb2wgbWFuIHBhZ2UgZm9yIG1vcmUKLWRldGFpbHMuCi0KLSogVXNhZ2UKLQotRm9sbG93aW5nIHNob3dzIGEgdHlwaWNhbCBzZXF1ZW5jZSBvZiBzdGVwcyBmb3IgdXNpbmcgcmFtenN3YXAuCi0KLTEpIExvYWQgTW9kdWxlczoKLQltb2Rwcm9iZSByYW16c3dhcCBudW1fZGV2aWNlcz00Ci0JVGhpcyBjcmVhdGVzIDQgKHVuaW5pdGlhbGl6ZWQpIGRldmljZXM6IC9kZXYvcmFtenN3YXB7MCwxLDIsM30KLQkobnVtX2RldmljZXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsLiBEZWZhdWx0OiAxKQotCi0yKSBJbml0aWFsaXplOgotCVVzZSByenNjb250cm9sIHV0aWxpdHkgdG8gY29uZmlndXJlIGFuZCBpbml0aWFsaXplIGluZGl2aWR1YWwKLQlyYW16c3dhcCBkZXZpY2VzLiBFeGFtcGxlOgotCXJ6c2NvbnRyb2wgL2Rldi9yYW16c3dhcDIgLS1pbml0ICMgdXNlcyBkZWZhdWx0IHZhbHVlIG9mIGRpc2tzaXplX2tiCi0KLQkqU2VlIHJ6c2NvbnRyb2wgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscyBhbmQgZXhhbXBsZXMqCi0KLTMpIEFjdGl2YXRlOgotCXN3YXBvbiAvZGV2L3JhbXpzd2FwMiAjIG9yIGFueSBvdGhlciBpbml0aWFsaXplZCByYW16c3dhcCBkZXZpY2UKLQotNCkgU3RhdHM6Ci0JcnpzY29udHJvbCAvZGV2L3JhbXpzd2FwMiAtLXN0YXRzCi0KLTUpIERlYWN0aXZhdGU6Ci0Jc3dhcG9mZiAvZGV2L3JhbXpzd2FwMgotCi02KSBSZXNldDoKLQlyenNjb250cm9sIC9kZXYvcmFtenN3YXAyIC0tcmVzZXQKLQkoVGhpcyBmcmVlcyBhbGwgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoaXMgZGV2aWNlKS4KLQotCi1QbGVhc2UgcmVwb3J0IGFueSBwcm9ibGVtcyBhdDoKLSAtIE1haWxpbmcgbGlzdDogbGludXgtbW0tY2MgYXQgbGFwdG9wIGRvdCBvcmcKLSAtIElzc3VlIHRyYWNrZXI6IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jb21wY2FjaGUvaXNzdWVzL2xpc3QKLQotTml0aW4gR3VwdGEKLW5ndXB0YUB2ZmxhcmUub3JnCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvcmFtenN3YXBfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvcmFtenN3YXBfZHJ2LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxNGJmOTEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3JhbXpzd2FwX2Rydi5jCisrKyAvZGV2L251bGwKQEAgLTEsODM3ICswLDAgQEAKLS8qCi0gKiBDb21wcmVzc2VkIFJBTSBiYXNlZCBzd2FwIGRldmljZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCAgTml0aW4gR3VwdGEKLSAqCi0gKiBUaGlzIGNvZGUgaXMgcmVsZWFzZWQgdXNpbmcgYSBkdWFsIGxpY2Vuc2Ugc3RyYXRlZ3k6IEJTRC9HUEwKLSAqIFlvdSBjYW4gY2hvb3NlIHRoZSBsaWNlbmNlIHRoYXQgYmV0dGVyIGZpdHMgeW91ciByZXF1aXJlbWVudHMuCi0gKgotICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIDMtY2xhdXNlIEJTRCBMaWNlbnNlCi0gKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjAKLSAqCi0gKiBQcm9qZWN0IGhvbWU6IGh0dHA6Ly9jb21wY2FjaGUuZ29vZ2xlY29kZS5jb20KLSAqLwotCi0jZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJyYW16c3dhcCIKLSNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KLSNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2x6by5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zd2Fwb3BzLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotCi0jaW5jbHVkZSAicmFtenN3YXBfZHJ2LmgiCi0KLS8qIEdsb2JhbHMgKi8KLXN0YXRpYyBpbnQgcmFtenN3YXBfbWFqb3I7Ci1zdGF0aWMgc3RydWN0IHJhbXpzd2FwICpkZXZpY2VzOwotCi0vKiBNb2R1bGUgcGFyYW1zIChkb2N1bWVudGF0aW9uIGF0IGVuZCkgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbnVtX2RldmljZXM7Ci0KLXN0YXRpYyBpbnQgcnpzX3Rlc3RfZmxhZyhzdHJ1Y3QgcmFtenN3YXAgKnJ6cywgdTMyIGluZGV4LAotCQkJZW51bSByenNfcGFnZWZsYWdzIGZsYWcpCi17Ci0JcmV0dXJuIHJ6cy0+dGFibGVbaW5kZXhdLmZsYWdzICYgQklUKGZsYWcpOwotfQotCi1zdGF0aWMgdm9pZCByenNfc2V0X2ZsYWcoc3RydWN0IHJhbXpzd2FwICpyenMsIHUzMiBpbmRleCwKLQkJCWVudW0gcnpzX3BhZ2VmbGFncyBmbGFnKQotewotCXJ6cy0+dGFibGVbaW5kZXhdLmZsYWdzIHw9IEJJVChmbGFnKTsKLX0KLQotc3RhdGljIHZvaWQgcnpzX2NsZWFyX2ZsYWcoc3RydWN0IHJhbXpzd2FwICpyenMsIHUzMiBpbmRleCwKLQkJCWVudW0gcnpzX3BhZ2VmbGFncyBmbGFnKQotewotCXJ6cy0+dGFibGVbaW5kZXhdLmZsYWdzICY9IH5CSVQoZmxhZyk7Ci19Ci0KLXN0YXRpYyBpbnQgcGFnZV96ZXJvX2ZpbGxlZCh2b2lkICpwdHIpCi17Ci0JdW5zaWduZWQgaW50IHBvczsKLQl1bnNpZ25lZCBsb25nICpwYWdlOwotCi0JcGFnZSA9ICh1bnNpZ25lZCBsb25nICopcHRyOwotCi0JZm9yIChwb3MgPSAwOyBwb3MgIT0gUEFHRV9TSVpFIC8gc2l6ZW9mKCpwYWdlKTsgcG9zKyspIHsKLQkJaWYgKHBhZ2VbcG9zXSkKLQkJCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdm9pZCByYW16c3dhcF9zZXRfZGlza3NpemUoc3RydWN0IHJhbXpzd2FwICpyenMsIHNpemVfdCB0b3RhbHJhbV9ieXRlcykKLXsKLQlpZiAoIXJ6cy0+ZGlza3NpemUpIHsKLQkJcHJfaW5mbygKLQkJImRpc2sgc2l6ZSBub3QgcHJvdmlkZWQuIFlvdSBjYW4gdXNlIGRpc2tzaXplX2tiIG1vZHVsZSAiCi0JCSJwYXJhbSB0byBzcGVjaWZ5IHNpemUuXG5Vc2luZyBkZWZhdWx0OiAoJXUlJSBvZiBSQU0pLlxuIiwKLQkJZGVmYXVsdF9kaXNrc2l6ZV9wZXJjX3JhbQotCQkpOwotCQlyenMtPmRpc2tzaXplID0gZGVmYXVsdF9kaXNrc2l6ZV9wZXJjX3JhbSAqCi0JCQkJCSh0b3RhbHJhbV9ieXRlcyAvIDEwMCk7Ci0JfQotCi0JaWYgKHJ6cy0+ZGlza3NpemUgPiAyICogKHRvdGFscmFtX2J5dGVzKSkgewotCQlwcl9pbmZvKAotCQkiVGhlcmUgaXMgbGl0dGxlIHBvaW50IGNyZWF0aW5nIGEgcmFtenN3YXAgb2YgZ3JlYXRlciB0aGFuICIKLQkJInR3aWNlIHRoZSBzaXplIG9mIG1lbW9yeSBzaW5jZSB3ZSBleHBlY3QgYSAyOjEgY29tcHJlc3Npb24gIgotCQkicmF0aW8uIE5vdGUgdGhhdCByYW16c3dhcCB1c2VzIGFib3V0IDAuMSUlIG9mIHRoZSBzaXplIG9mICIKLQkJInRoZSBzd2FwIGRldmljZSB3aGVuIG5vdCBpbiB1c2Ugc28gYSBodWdlIHJhbXpzd2FwIGlzICIKLQkJIndhc3RlZnVsLlxuIgotCQkiXHRNZW1vcnkgU2l6ZTogJXp1IGtCXG4iCi0JCSJcdFNpemUgeW91IHNlbGVjdGVkOiAlenUga0JcbiIKLQkJIkNvbnRpbnVpbmcgYW55d2F5IC4uLlxuIiwKLQkJdG90YWxyYW1fYnl0ZXMgPj4gMTAsIHJ6cy0+ZGlza3NpemUKLQkJKTsKLQl9Ci0KLQlyenMtPmRpc2tzaXplICY9IFBBR0VfTUFTSzsKLX0KLQotLyoKLSAqIFN3YXAgaGVhZGVyICgxc3QgcGFnZSBvZiBzd2FwIGRldmljZSkgY29udGFpbnMgaW5mb3JtYXRpb24KLSAqIGFib3V0IGEgc3dhcCBmaWxlL3BhcnRpdGlvbi4gUHJlcGFyZSBzdWNoIGEgaGVhZGVyIGZvciB0aGUKLSAqIGdpdmVuIHJhbXpzd2FwIGRldmljZSBzbyB0aGF0IHN3YXBvbiBjYW4gaWRlbnRpZnkgaXQgYXMgYQotICogc3dhcCBwYXJ0aXRpb24uCi0gKi8KLXN0YXRpYyB2b2lkIHNldHVwX3N3YXBfaGVhZGVyKHN0cnVjdCByYW16c3dhcCAqcnpzLCB1bmlvbiBzd2FwX2hlYWRlciAqcykKLXsKLQlzLT5pbmZvLnZlcnNpb24gPSAxOwotCXMtPmluZm8ubGFzdF9wYWdlID0gKHJ6cy0+ZGlza3NpemUgPj4gUEFHRV9TSElGVCkgLSAxOwotCXMtPmluZm8ubnJfYmFkcGFnZXMgPSAwOwotCW1lbWNweShzLT5tYWdpYy5tYWdpYywgIlNXQVBTUEFDRTIiLCAxMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJhbXpzd2FwX2lvY3RsX2dldF9zdGF0cyhzdHJ1Y3QgcmFtenN3YXAgKnJ6cywKLQkJCXN0cnVjdCByYW16c3dhcF9pb2N0bF9zdGF0cyAqcykKLXsKLQlzLT5kaXNrc2l6ZSA9IHJ6cy0+ZGlza3NpemU7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19SQU1aU1dBUF9TVEFUUykKLQl7Ci0Jc3RydWN0IHJhbXpzd2FwX3N0YXRzICpycyA9ICZyenMtPnN0YXRzOwotCXNpemVfdCBzdWNjX3dyaXRlcywgbWVtX3VzZWQ7Ci0JdW5zaWduZWQgaW50IGdvb2RfY29tcHJlc3NfcGVyYyA9IDAsIG5vX2NvbXByZXNzX3BlcmMgPSAwOwotCi0JbWVtX3VzZWQgPSB4dl9nZXRfdG90YWxfc2l6ZV9ieXRlcyhyenMtPm1lbV9wb29sKQotCQkJKyAocnMtPnBhZ2VzX2V4cGFuZCA8PCBQQUdFX1NISUZUKTsKLQlzdWNjX3dyaXRlcyA9IHJ6c19zdGF0NjRfcmVhZChyenMsICZycy0+bnVtX3dyaXRlcykgLQotCQkJcnpzX3N0YXQ2NF9yZWFkKHJ6cywgJnJzLT5mYWlsZWRfd3JpdGVzKTsKLQotCWlmIChzdWNjX3dyaXRlcyAmJiBycy0+cGFnZXNfc3RvcmVkKSB7Ci0JCWdvb2RfY29tcHJlc3NfcGVyYyA9IHJzLT5nb29kX2NvbXByZXNzICogMTAwCi0JCQkJCS8gcnMtPnBhZ2VzX3N0b3JlZDsKLQkJbm9fY29tcHJlc3NfcGVyYyA9IHJzLT5wYWdlc19leHBhbmQgKiAxMDAKLQkJCQkJLyBycy0+cGFnZXNfc3RvcmVkOwotCX0KLQotCXMtPm51bV9yZWFkcyA9IHJ6c19zdGF0NjRfcmVhZChyenMsICZycy0+bnVtX3JlYWRzKTsKLQlzLT5udW1fd3JpdGVzID0gcnpzX3N0YXQ2NF9yZWFkKHJ6cywgJnJzLT5udW1fd3JpdGVzKTsKLQlzLT5mYWlsZWRfcmVhZHMgPSByenNfc3RhdDY0X3JlYWQocnpzLCAmcnMtPmZhaWxlZF9yZWFkcyk7Ci0Jcy0+ZmFpbGVkX3dyaXRlcyA9IHJ6c19zdGF0NjRfcmVhZChyenMsICZycy0+ZmFpbGVkX3dyaXRlcyk7Ci0Jcy0+aW52YWxpZF9pbyA9IHJ6c19zdGF0NjRfcmVhZChyenMsICZycy0+aW52YWxpZF9pbyk7Ci0Jcy0+bm90aWZ5X2ZyZWUgPSByenNfc3RhdDY0X3JlYWQocnpzLCAmcnMtPm5vdGlmeV9mcmVlKTsKLQlzLT5wYWdlc196ZXJvID0gcnMtPnBhZ2VzX3plcm87Ci0KLQlzLT5nb29kX2NvbXByZXNzX3BjdCA9IGdvb2RfY29tcHJlc3NfcGVyYzsKLQlzLT5wYWdlc19leHBhbmRfcGN0ID0gbm9fY29tcHJlc3NfcGVyYzsKLQotCXMtPnBhZ2VzX3N0b3JlZCA9IHJzLT5wYWdlc19zdG9yZWQ7Ci0Jcy0+cGFnZXNfdXNlZCA9IG1lbV91c2VkID4+IFBBR0VfU0hJRlQ7Ci0Jcy0+b3JpZ19kYXRhX3NpemUgPSBycy0+cGFnZXNfc3RvcmVkIDw8IFBBR0VfU0hJRlQ7Ci0Jcy0+Y29tcHJfZGF0YV9zaXplID0gcnMtPmNvbXByX3NpemU7Ci0Jcy0+bWVtX3VzZWRfdG90YWwgPSBtZW1fdXNlZDsKLQl9Ci0jZW5kaWYgLyogQ09ORklHX1JBTVpTV0FQX1NUQVRTICovCi19Ci0KLXN0YXRpYyB2b2lkIHJhbXpzd2FwX2ZyZWVfcGFnZShzdHJ1Y3QgcmFtenN3YXAgKnJ6cywgc2l6ZV90IGluZGV4KQotewotCXUzMiBjbGVuOwotCXZvaWQgKm9iajsKLQotCXN0cnVjdCBwYWdlICpwYWdlID0gcnpzLT50YWJsZVtpbmRleF0ucGFnZTsKLQl1MzIgb2Zmc2V0ID0gcnpzLT50YWJsZVtpbmRleF0ub2Zmc2V0OwotCi0JaWYgKHVubGlrZWx5KCFwYWdlKSkgewotCQkvKgotCQkgKiBObyBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciB6ZXJvIGZpbGxlZCBwYWdlcy4KLQkJICogU2ltcGx5IGNsZWFyIHplcm8gcGFnZSBmbGFnLgotCQkgKi8KLQkJaWYgKHJ6c190ZXN0X2ZsYWcocnpzLCBpbmRleCwgUlpTX1pFUk8pKSB7Ci0JCQlyenNfY2xlYXJfZmxhZyhyenMsIGluZGV4LCBSWlNfWkVSTyk7Ci0JCQlyenNfc3RhdF9kZWMoJnJ6cy0+c3RhdHMucGFnZXNfemVybyk7Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQotCWlmICh1bmxpa2VseShyenNfdGVzdF9mbGFnKHJ6cywgaW5kZXgsIFJaU19VTkNPTVBSRVNTRUQpKSkgewotCQljbGVuID0gUEFHRV9TSVpFOwotCQlfX2ZyZWVfcGFnZShwYWdlKTsKLQkJcnpzX2NsZWFyX2ZsYWcocnpzLCBpbmRleCwgUlpTX1VOQ09NUFJFU1NFRCk7Ci0JCXJ6c19zdGF0X2RlYygmcnpzLT5zdGF0cy5wYWdlc19leHBhbmQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlvYmogPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCkgKyBvZmZzZXQ7Ci0JY2xlbiA9IHh2X2dldF9vYmplY3Rfc2l6ZShvYmopIC0gc2l6ZW9mKHN0cnVjdCB6b2JqX2hlYWRlcik7Ci0Ja3VubWFwX2F0b21pYyhvYmosIEtNX1VTRVIwKTsKLQotCXh2X2ZyZWUocnpzLT5tZW1fcG9vbCwgcGFnZSwgb2Zmc2V0KTsKLQlpZiAoY2xlbiA8PSBQQUdFX1NJWkUgLyAyKQotCQlyenNfc3RhdF9kZWMoJnJ6cy0+c3RhdHMuZ29vZF9jb21wcmVzcyk7Ci0KLW91dDoKLQlyenMtPnN0YXRzLmNvbXByX3NpemUgLT0gY2xlbjsKLQlyenNfc3RhdF9kZWMoJnJ6cy0+c3RhdHMucGFnZXNfc3RvcmVkKTsKLQotCXJ6cy0+dGFibGVbaW5kZXhdLnBhZ2UgPSBOVUxMOwotCXJ6cy0+dGFibGVbaW5kZXhdLm9mZnNldCA9IDA7Ci19Ci0KLXN0YXRpYyBpbnQgaGFuZGxlX3plcm9fcGFnZShzdHJ1Y3QgYmlvICpiaW8pCi17Ci0Jdm9pZCAqdXNlcl9tZW07Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UgPSBiaW8tPmJpX2lvX3ZlY1swXS5idl9wYWdlOwotCi0JdXNlcl9tZW0gPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7Ci0JbWVtc2V0KHVzZXJfbWVtLCAwLCBQQUdFX1NJWkUpOwotCWt1bm1hcF9hdG9taWModXNlcl9tZW0sIEtNX1VTRVIwKTsKLQotCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwotCi0Jc2V0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKTsKLQliaW9fZW5kaW8oYmlvLCAwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBoYW5kbGVfdW5jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHJhbXpzd2FwICpyenMsIHN0cnVjdCBiaW8gKmJpbykKLXsKLQl1MzIgaW5kZXg7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JdW5zaWduZWQgY2hhciAqdXNlcl9tZW0sICpjbWVtOwotCi0JcGFnZSA9IGJpby0+YmlfaW9fdmVjWzBdLmJ2X3BhZ2U7Ci0JaW5kZXggPSBiaW8tPmJpX3NlY3RvciA+PiBTRUNUT1JTX1BFUl9QQUdFX1NISUZUOwotCi0JdXNlcl9tZW0gPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7Ci0JY21lbSA9IGttYXBfYXRvbWljKHJ6cy0+dGFibGVbaW5kZXhdLnBhZ2UsIEtNX1VTRVIxKSArCi0JCQlyenMtPnRhYmxlW2luZGV4XS5vZmZzZXQ7Ci0KLQltZW1jcHkodXNlcl9tZW0sIGNtZW0sIFBBR0VfU0laRSk7Ci0Ja3VubWFwX2F0b21pYyh1c2VyX21lbSwgS01fVVNFUjApOwotCWt1bm1hcF9hdG9taWMoY21lbSwgS01fVVNFUjEpOwotCi0JZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7Ci0KLQlzZXRfYml0KEJJT19VUFRPREFURSwgJmJpby0+YmlfZmxhZ3MpOwotCWJpb19lbmRpbyhiaW8sIDApOwotCXJldHVybiAwOwotfQotCi0vKgotICogQ2FsbGVkIHdoZW4gcmVxdWVzdCBwYWdlIGlzIG5vdCBwcmVzZW50IGluIHJhbXpzd2FwLgotICogVGhpcyBpcyBhbiBhdHRlbXB0IHRvIHJlYWQgYmVmb3JlIGFueSBwcmV2aW91cyB3cml0ZQotICogdG8gdGhpcyBsb2NhdGlvbiAtIHRoaXMgaGFwcGVucyBkdWUgdG8gcmVhZGFoZWFkIHdoZW4KLSAqIHN3YXAgZGV2aWNlIGlzIHJlYWQgZnJvbSB1c2VyLXNwYWNlIChlLmcuIGR1cmluZyBzd2Fwb24pCi0gKi8KLXN0YXRpYyBpbnQgaGFuZGxlX3JhbXpzd2FwX2ZhdWx0KHN0cnVjdCByYW16c3dhcCAqcnpzLCBzdHJ1Y3QgYmlvICpiaW8pCi17Ci0JcHJfZGVidWcoIlJlYWQgYmVmb3JlIHdyaXRlIG9uIHN3YXAgZGV2aWNlOiAiCi0JCSJzZWN0b3I9JWx1LCBzaXplPSV1LCBvZmZzZXQ9JXVcbiIsCi0JCSh1bG9uZykoYmlvLT5iaV9zZWN0b3IpLCBiaW8tPmJpX3NpemUsCi0JCWJpby0+YmlfaW9fdmVjWzBdLmJ2X29mZnNldCk7Ci0KLQkvKiBEbyBub3RoaW5nLiBKdXN0IHJldHVybiBzdWNjZXNzICovCi0Jc2V0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKTsKLQliaW9fZW5kaW8oYmlvLCAwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCByYW16c3dhcF9yZWFkKHN0cnVjdCByYW16c3dhcCAqcnpzLCBzdHJ1Y3QgYmlvICpiaW8pCi17Ci0JaW50IHJldDsKLQl1MzIgaW5kZXg7Ci0Jc2l6ZV90IGNsZW47Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0Jc3RydWN0IHpvYmpfaGVhZGVyICp6aGVhZGVyOwotCXVuc2lnbmVkIGNoYXIgKnVzZXJfbWVtLCAqY21lbTsKLQotCXJ6c19zdGF0NjRfaW5jKHJ6cywgJnJ6cy0+c3RhdHMubnVtX3JlYWRzKTsKLQotCXBhZ2UgPSBiaW8tPmJpX2lvX3ZlY1swXS5idl9wYWdlOwotCWluZGV4ID0gYmlvLT5iaV9zZWN0b3IgPj4gU0VDVE9SU19QRVJfUEFHRV9TSElGVDsKLQotCWlmIChyenNfdGVzdF9mbGFnKHJ6cywgaW5kZXgsIFJaU19aRVJPKSkKLQkJcmV0dXJuIGhhbmRsZV96ZXJvX3BhZ2UoYmlvKTsKLQotCS8qIFJlcXVlc3RlZCBwYWdlIGlzIG5vdCBwcmVzZW50IGluIGNvbXByZXNzZWQgYXJlYSAqLwotCWlmICghcnpzLT50YWJsZVtpbmRleF0ucGFnZSkKLQkJcmV0dXJuIGhhbmRsZV9yYW16c3dhcF9mYXVsdChyenMsIGJpbyk7Ci0KLQkvKiBQYWdlIGlzIHN0b3JlZCB1bmNvbXByZXNzZWQgc2luY2UgaXQncyBpbmNvbXByZXNzaWJsZSAqLwotCWlmICh1bmxpa2VseShyenNfdGVzdF9mbGFnKHJ6cywgaW5kZXgsIFJaU19VTkNPTVBSRVNTRUQpKSkKLQkJcmV0dXJuIGhhbmRsZV91bmNvbXByZXNzZWRfcGFnZShyenMsIGJpbyk7Ci0KLQl1c2VyX21lbSA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKLQljbGVuID0gUEFHRV9TSVpFOwotCi0JY21lbSA9IGttYXBfYXRvbWljKHJ6cy0+dGFibGVbaW5kZXhdLnBhZ2UsIEtNX1VTRVIxKSArCi0JCQlyenMtPnRhYmxlW2luZGV4XS5vZmZzZXQ7Ci0KLQlyZXQgPSBsem8xeF9kZWNvbXByZXNzX3NhZmUoCi0JCWNtZW0gKyBzaXplb2YoKnpoZWFkZXIpLAotCQl4dl9nZXRfb2JqZWN0X3NpemUoY21lbSkgLSBzaXplb2YoKnpoZWFkZXIpLAotCQl1c2VyX21lbSwgJmNsZW4pOwotCi0Ja3VubWFwX2F0b21pYyh1c2VyX21lbSwgS01fVVNFUjApOwotCWt1bm1hcF9hdG9taWMoY21lbSwgS01fVVNFUjEpOwotCi0JLyogc2hvdWxkIE5FVkVSIGhhcHBlbiAqLwotCWlmICh1bmxpa2VseShyZXQgIT0gTFpPX0VfT0spKSB7Ci0JCXByX2VycigiRGVjb21wcmVzc2lvbiBmYWlsZWQhIGVycj0lZCwgcGFnZT0ldVxuIiwKLQkJCXJldCwgaW5kZXgpOwotCQlyenNfc3RhdDY0X2luYyhyenMsICZyenMtPnN0YXRzLmZhaWxlZF9yZWFkcyk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwotCi0Jc2V0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKTsKLQliaW9fZW5kaW8oYmlvLCAwKTsKLQlyZXR1cm4gMDsKLQotb3V0OgotCWJpb19pb19lcnJvcihiaW8pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJhbXpzd2FwX3dyaXRlKHN0cnVjdCByYW16c3dhcCAqcnpzLCBzdHJ1Y3QgYmlvICpiaW8pCi17Ci0JaW50IHJldDsKLQl1MzIgb2Zmc2V0LCBpbmRleDsKLQlzaXplX3QgY2xlbjsKLQlzdHJ1Y3Qgem9ial9oZWFkZXIgKnpoZWFkZXI7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UsICpwYWdlX3N0b3JlOwotCXVuc2lnbmVkIGNoYXIgKnVzZXJfbWVtLCAqY21lbSwgKnNyYzsKLQotCXJ6c19zdGF0NjRfaW5jKHJ6cywgJnJ6cy0+c3RhdHMubnVtX3dyaXRlcyk7Ci0KLQlwYWdlID0gYmlvLT5iaV9pb192ZWNbMF0uYnZfcGFnZTsKLQlpbmRleCA9IGJpby0+Ymlfc2VjdG9yID4+IFNFQ1RPUlNfUEVSX1BBR0VfU0hJRlQ7Ci0KLQlzcmMgPSByenMtPmNvbXByZXNzX2J1ZmZlcjsKLQotCW11dGV4X2xvY2soJnJ6cy0+bG9jayk7Ci0KLQl1c2VyX21lbSA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKLQlpZiAocGFnZV96ZXJvX2ZpbGxlZCh1c2VyX21lbSkpIHsKLQkJa3VubWFwX2F0b21pYyh1c2VyX21lbSwgS01fVVNFUjApOwotCQltdXRleF91bmxvY2soJnJ6cy0+bG9jayk7Ci0JCXJ6c19zdGF0X2luYygmcnpzLT5zdGF0cy5wYWdlc196ZXJvKTsKLQkJcnpzX3NldF9mbGFnKHJ6cywgaW5kZXgsIFJaU19aRVJPKTsKLQotCQlzZXRfYml0KEJJT19VUFRPREFURSwgJmJpby0+YmlfZmxhZ3MpOwotCQliaW9fZW5kaW8oYmlvLCAwKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0ID0gbHpvMXhfMV9jb21wcmVzcyh1c2VyX21lbSwgUEFHRV9TSVpFLCBzcmMsICZjbGVuLAotCQkJCXJ6cy0+Y29tcHJlc3Nfd29ya21lbSk7Ci0KLQlrdW5tYXBfYXRvbWljKHVzZXJfbWVtLCBLTV9VU0VSMCk7Ci0KLQlpZiAodW5saWtlbHkocmV0ICE9IExaT19FX09LKSkgewotCQltdXRleF91bmxvY2soJnJ6cy0+bG9jayk7Ci0JCXByX2VycigiQ29tcHJlc3Npb24gZmFpbGVkISBlcnI9JWRcbiIsIHJldCk7Ci0JCXJ6c19zdGF0NjRfaW5jKHJ6cywgJnJ6cy0+c3RhdHMuZmFpbGVkX3dyaXRlcyk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qCi0JICogUGFnZSBpcyBpbmNvbXByZXNzaWJsZS4gU3RvcmUgaXQgYXMtaXMgKHVuY29tcHJlc3NlZCkKLQkgKiBzaW5jZSB3ZSBkbyBub3Qgd2FudCB0byByZXR1cm4gdG9vIG1hbnkgc3dhcCB3cml0ZQotCSAqIGVycm9ycyB3aGljaCBoYXMgc2lkZSBlZmZlY3Qgb2YgaGFuZ2luZyB0aGUgc3lzdGVtLgotCSAqLwotCWlmICh1bmxpa2VseShjbGVuID4gbWF4X3pwYWdlX3NpemUpKSB7Ci0JCWNsZW4gPSBQQUdFX1NJWkU7Ci0JCXBhZ2Vfc3RvcmUgPSBhbGxvY19wYWdlKEdGUF9OT0lPIHwgX19HRlBfSElHSE1FTSk7Ci0JCWlmICh1bmxpa2VseSghcGFnZV9zdG9yZSkpIHsKLQkJCW11dGV4X3VubG9jaygmcnpzLT5sb2NrKTsKLQkJCXByX2luZm8oIkVycm9yIGFsbG9jYXRpbmcgbWVtb3J5IGZvciBpbmNvbXByZXNzaWJsZSAiCi0JCQkJInBhZ2U6ICV1XG4iLCBpbmRleCk7Ci0JCQlyenNfc3RhdDY0X2luYyhyenMsICZyenMtPnN0YXRzLmZhaWxlZF93cml0ZXMpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlvZmZzZXQgPSAwOwotCQlyenNfc2V0X2ZsYWcocnpzLCBpbmRleCwgUlpTX1VOQ09NUFJFU1NFRCk7Ci0JCXJ6c19zdGF0X2luYygmcnpzLT5zdGF0cy5wYWdlc19leHBhbmQpOwotCQlyenMtPnRhYmxlW2luZGV4XS5wYWdlID0gcGFnZV9zdG9yZTsKLQkJc3JjID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwotCQlnb3RvIG1lbXN0b3JlOwotCX0KLQotCWlmICh4dl9tYWxsb2MocnpzLT5tZW1fcG9vbCwgY2xlbiArIHNpemVvZigqemhlYWRlciksCi0JCQkmcnpzLT50YWJsZVtpbmRleF0ucGFnZSwgJm9mZnNldCwKLQkJCUdGUF9OT0lPIHwgX19HRlBfSElHSE1FTSkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZyenMtPmxvY2spOwotCQlwcl9pbmZvKCJFcnJvciBhbGxvY2F0aW5nIG1lbW9yeSBmb3IgY29tcHJlc3NlZCAiCi0JCQkicGFnZTogJXUsIHNpemU9JXp1XG4iLCBpbmRleCwgY2xlbik7Ci0JCXJ6c19zdGF0NjRfaW5jKHJ6cywgJnJ6cy0+c3RhdHMuZmFpbGVkX3dyaXRlcyk7Ci0JCWdvdG8gb3V0OwotCX0KLQotbWVtc3RvcmU6Ci0JcnpzLT50YWJsZVtpbmRleF0ub2Zmc2V0ID0gb2Zmc2V0OwotCi0JY21lbSA9IGttYXBfYXRvbWljKHJ6cy0+dGFibGVbaW5kZXhdLnBhZ2UsIEtNX1VTRVIxKSArCi0JCQlyenMtPnRhYmxlW2luZGV4XS5vZmZzZXQ7Ci0KLSNpZiAwCi0JLyogQmFjay1yZWZlcmVuY2UgbmVlZGVkIGZvciBtZW1vcnkgZGVmcmFnbWVudGF0aW9uICovCi0JaWYgKCFyenNfdGVzdF9mbGFnKHJ6cywgaW5kZXgsIFJaU19VTkNPTVBSRVNTRUQpKSB7Ci0JCXpoZWFkZXIgPSAoc3RydWN0IHpvYmpfaGVhZGVyICopY21lbTsKLQkJemhlYWRlci0+dGFibGVfaWR4ID0gaW5kZXg7Ci0JCWNtZW0gKz0gc2l6ZW9mKCp6aGVhZGVyKTsKLQl9Ci0jZW5kaWYKLQotCW1lbWNweShjbWVtLCBzcmMsIGNsZW4pOwotCi0Ja3VubWFwX2F0b21pYyhjbWVtLCBLTV9VU0VSMSk7Ci0JaWYgKHVubGlrZWx5KHJ6c190ZXN0X2ZsYWcocnpzLCBpbmRleCwgUlpTX1VOQ09NUFJFU1NFRCkpKQotCQlrdW5tYXBfYXRvbWljKHNyYywgS01fVVNFUjApOwotCi0JLyogVXBkYXRlIHN0YXRzICovCi0JcnpzLT5zdGF0cy5jb21wcl9zaXplICs9IGNsZW47Ci0JcnpzX3N0YXRfaW5jKCZyenMtPnN0YXRzLnBhZ2VzX3N0b3JlZCk7Ci0JaWYgKGNsZW4gPD0gUEFHRV9TSVpFIC8gMikKLQkJcnpzX3N0YXRfaW5jKCZyenMtPnN0YXRzLmdvb2RfY29tcHJlc3MpOwotCi0JbXV0ZXhfdW5sb2NrKCZyenMtPmxvY2spOwotCi0Jc2V0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKTsKLQliaW9fZW5kaW8oYmlvLCAwKTsKLQlyZXR1cm4gMDsKLQotb3V0OgotCWJpb19pb19lcnJvcihiaW8pOwotCXJldHVybiAwOwotfQotCi0vKgotICogQ2hlY2sgaWYgcmVxdWVzdCBpcyB3aXRoaW4gYm91bmRzIGFuZCBwYWdlIGFsaWduZWQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHZhbGlkX3N3YXBfcmVxdWVzdChzdHJ1Y3QgcmFtenN3YXAgKnJ6cywgc3RydWN0IGJpbyAqYmlvKQotewotCWlmICh1bmxpa2VseSgKLQkJKGJpby0+Ymlfc2VjdG9yID49IChyenMtPmRpc2tzaXplID4+IFNFQ1RPUl9TSElGVCkpIHx8Ci0JCShiaW8tPmJpX3NlY3RvciAmIChTRUNUT1JTX1BFUl9QQUdFIC0gMSkpIHx8Ci0JCShiaW8tPmJpX3ZjbnQgIT0gMSkgfHwKLQkJKGJpby0+Ymlfc2l6ZSAhPSBQQUdFX1NJWkUpIHx8Ci0JCShiaW8tPmJpX2lvX3ZlY1swXS5idl9vZmZzZXQgIT0gMCkpKSB7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogc3dhcCByZXF1ZXN0IGlzIHZhbGlkICovCi0JcmV0dXJuIDE7Ci19Ci0KLS8qCi0gKiBIYW5kbGVyIGZ1bmN0aW9uIGZvciBhbGwgcmFtenN3YXAgSS9PIHJlcXVlc3RzLgotICovCi1zdGF0aWMgaW50IHJhbXpzd2FwX21ha2VfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcXVldWUsIHN0cnVjdCBiaW8gKmJpbykKLXsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgcmFtenN3YXAgKnJ6cyA9IHF1ZXVlLT5xdWV1ZWRhdGE7Ci0KLQlpZiAodW5saWtlbHkoIXJ6cy0+aW5pdF9kb25lKSkgewotCQliaW9faW9fZXJyb3IoYmlvKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKCF2YWxpZF9zd2FwX3JlcXVlc3QocnpzLCBiaW8pKSB7Ci0JCXJ6c19zdGF0NjRfaW5jKHJ6cywgJnJ6cy0+c3RhdHMuaW52YWxpZF9pbyk7Ci0JCWJpb19pb19lcnJvcihiaW8pOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzd2l0Y2ggKGJpb19kYXRhX2RpcihiaW8pKSB7Ci0JY2FzZSBSRUFEOgotCQlyZXQgPSByYW16c3dhcF9yZWFkKHJ6cywgYmlvKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFdSSVRFOgotCQlyZXQgPSByYW16c3dhcF93cml0ZShyenMsIGJpbyk7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlc2V0X2RldmljZShzdHJ1Y3QgcmFtenN3YXAgKnJ6cykKLXsKLQlzaXplX3QgaW5kZXg7Ci0KLQkvKiBEbyBub3QgYWNjZXB0IGFueSBuZXcgSS9PIHJlcXVlc3QgKi8KLQlyenMtPmluaXRfZG9uZSA9IDA7Ci0KLQkvKiBGcmVlIHZhcmlvdXMgcGVyLWRldmljZSBidWZmZXJzICovCi0Ja2ZyZWUocnpzLT5jb21wcmVzc193b3JrbWVtKTsKLQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXJ6cy0+Y29tcHJlc3NfYnVmZmVyLCAxKTsKLQotCXJ6cy0+Y29tcHJlc3Nfd29ya21lbSA9IE5VTEw7Ci0JcnpzLT5jb21wcmVzc19idWZmZXIgPSBOVUxMOwotCi0JLyogRnJlZSBhbGwgcGFnZXMgdGhhdCBhcmUgc3RpbGwgaW4gdGhpcyByYW16c3dhcCBkZXZpY2UgKi8KLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCByenMtPmRpc2tzaXplID4+IFBBR0VfU0hJRlQ7IGluZGV4KyspIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JCXUxNiBvZmZzZXQ7Ci0KLQkJcGFnZSA9IHJ6cy0+dGFibGVbaW5kZXhdLnBhZ2U7Ci0JCW9mZnNldCA9IHJ6cy0+dGFibGVbaW5kZXhdLm9mZnNldDsKLQotCQlpZiAoIXBhZ2UpCi0JCQljb250aW51ZTsKLQotCQlpZiAodW5saWtlbHkocnpzX3Rlc3RfZmxhZyhyenMsIGluZGV4LCBSWlNfVU5DT01QUkVTU0VEKSkpCi0JCQlfX2ZyZWVfcGFnZShwYWdlKTsKLQkJZWxzZQotCQkJeHZfZnJlZShyenMtPm1lbV9wb29sLCBwYWdlLCBvZmZzZXQpOwotCX0KLQotCXZmcmVlKHJ6cy0+dGFibGUpOwotCXJ6cy0+dGFibGUgPSBOVUxMOwotCi0JeHZfZGVzdHJveV9wb29sKHJ6cy0+bWVtX3Bvb2wpOwotCXJ6cy0+bWVtX3Bvb2wgPSBOVUxMOwotCi0JLyogUmVzZXQgc3RhdHMgKi8KLQltZW1zZXQoJnJ6cy0+c3RhdHMsIDAsIHNpemVvZihyenMtPnN0YXRzKSk7Ci0KLQlyenMtPmRpc2tzaXplID0gMDsKLX0KLQotc3RhdGljIGludCByYW16c3dhcF9pb2N0bF9pbml0X2RldmljZShzdHJ1Y3QgcmFtenN3YXAgKnJ6cykKLXsKLQlpbnQgcmV0OwotCXNpemVfdCBudW1fcGFnZXM7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JdW5pb24gc3dhcF9oZWFkZXIgKnN3YXBfaGVhZGVyOwotCi0JaWYgKHJ6cy0+aW5pdF9kb25lKSB7Ci0JCXByX2luZm8oIkRldmljZSBhbHJlYWR5IGluaXRpYWxpemVkIVxuIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JcmFtenN3YXBfc2V0X2Rpc2tzaXplKHJ6cywgdG90YWxyYW1fcGFnZXMgPDwgUEFHRV9TSElGVCk7Ci0KLQlyenMtPmNvbXByZXNzX3dvcmttZW0gPSBremFsbG9jKExaTzFYX01FTV9DT01QUkVTUywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyenMtPmNvbXByZXNzX3dvcmttZW0pIHsKLQkJcHJfZXJyKCJFcnJvciBhbGxvY2F0aW5nIGNvbXByZXNzb3Igd29ya2luZyBtZW1vcnkhXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBmYWlsOwotCX0KLQotCXJ6cy0+Y29tcHJlc3NfYnVmZmVyID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2VzKF9fR0ZQX1pFUk8sIDEpOwotCWlmICghcnpzLT5jb21wcmVzc19idWZmZXIpIHsKLQkJcHJfZXJyKCJFcnJvciBhbGxvY2F0aW5nIGNvbXByZXNzb3IgYnVmZmVyIHNwYWNlXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBmYWlsOwotCX0KLQotCW51bV9wYWdlcyA9IHJ6cy0+ZGlza3NpemUgPj4gUEFHRV9TSElGVDsKLQlyenMtPnRhYmxlID0gdm1hbGxvYyhudW1fcGFnZXMgKiBzaXplb2YoKnJ6cy0+dGFibGUpKTsKLQlpZiAoIXJ6cy0+dGFibGUpIHsKLQkJcHJfZXJyKCJFcnJvciBhbGxvY2F0aW5nIHJhbXpzd2FwIGFkZHJlc3MgdGFibGVcbiIpOwotCQkvKiBUbyBwcmV2ZW50IGFjY2Vzc2luZyB0YWJsZSBlbnRyaWVzIGR1cmluZyBjbGVhbnVwICovCi0JCXJ6cy0+ZGlza3NpemUgPSAwOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWw7Ci0JfQotCW1lbXNldChyenMtPnRhYmxlLCAwLCBudW1fcGFnZXMgKiBzaXplb2YoKnJ6cy0+dGFibGUpKTsKLQotCXBhZ2UgPSBhbGxvY19wYWdlKF9fR0ZQX1pFUk8pOwotCWlmICghcGFnZSkgewotCQlwcl9lcnIoIkVycm9yIGFsbG9jYXRpbmcgc3dhcCBoZWFkZXIgcGFnZVxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZmFpbDsKLQl9Ci0JcnpzLT50YWJsZVswXS5wYWdlID0gcGFnZTsKLQlyenNfc2V0X2ZsYWcocnpzLCAwLCBSWlNfVU5DT01QUkVTU0VEKTsKLQotCXN3YXBfaGVhZGVyID0ga21hcChwYWdlKTsKLQlzZXR1cF9zd2FwX2hlYWRlcihyenMsIHN3YXBfaGVhZGVyKTsKLQlrdW5tYXAocGFnZSk7Ci0KLQlzZXRfY2FwYWNpdHkocnpzLT5kaXNrLCByenMtPmRpc2tzaXplID4+IFNFQ1RPUl9TSElGVCk7Ci0KLQkvKiByYW16c3dhcCBkZXZpY2VzIHNvcnQgb2YgcmVzZW1ibGVzIG5vbi1yb3RhdGlvbmFsIGRpc2tzICovCi0JcXVldWVfZmxhZ19zZXRfdW5sb2NrZWQoUVVFVUVfRkxBR19OT05ST1QsIHJ6cy0+ZGlzay0+cXVldWUpOwotCi0JcnpzLT5tZW1fcG9vbCA9IHh2X2NyZWF0ZV9wb29sKCk7Ci0JaWYgKCFyenMtPm1lbV9wb29sKSB7Ci0JCXByX2VycigiRXJyb3IgY3JlYXRpbmcgbWVtb3J5IHBvb2xcbiIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWw7Ci0JfQotCi0JcnpzLT5pbml0X2RvbmUgPSAxOwotCi0JcHJfZGVidWcoIkluaXRpYWxpemF0aW9uIGRvbmUhXG4iKTsKLQlyZXR1cm4gMDsKLQotZmFpbDoKLQlyZXNldF9kZXZpY2UocnpzKTsKLQotCXByX2VycigiSW5pdGlhbGl6YXRpb24gZmFpbGVkOiBlcnI9JWRcbiIsIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCByYW16c3dhcF9pb2N0bF9yZXNldF9kZXZpY2Uoc3RydWN0IHJhbXpzd2FwICpyenMpCi17Ci0JaWYgKHJ6cy0+aW5pdF9kb25lKQotCQlyZXNldF9kZXZpY2UocnpzKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJhbXpzd2FwX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKLQkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCWludCByZXQgPSAwOwotCXNpemVfdCBkaXNrc2l6ZV9rYjsKLQotCXN0cnVjdCByYW16c3dhcCAqcnpzID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFJaU0lPX1NFVF9ESVNLU0laRV9LQjoKLQkJaWYgKHJ6cy0+aW5pdF9kb25lKSB7Ci0JCQlyZXQgPSAtRUJVU1k7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlpZiAoY29weV9mcm9tX3VzZXIoJmRpc2tzaXplX2tiLCAodm9pZCAqKWFyZywKLQkJCQkJCV9JT0NfU0laRShjbWQpKSkgewotCQkJcmV0ID0gLUVGQVVMVDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCXJ6cy0+ZGlza3NpemUgPSBkaXNrc2l6ZV9rYiA8PCAxMDsKLQkJcHJfaW5mbygiRGlzayBzaXplIHNldCB0byAlenUga0JcbiIsIGRpc2tzaXplX2tiKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFJaU0lPX0dFVF9TVEFUUzoKLQl7Ci0JCXN0cnVjdCByYW16c3dhcF9pb2N0bF9zdGF0cyAqc3RhdHM7Ci0JCWlmICghcnpzLT5pbml0X2RvbmUpIHsKLQkJCXJldCA9IC1FTk9UVFk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlzdGF0cyA9IGt6YWxsb2Moc2l6ZW9mKCpzdGF0cyksIEdGUF9LRVJORUwpOwotCQlpZiAoIXN0YXRzKSB7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJcmFtenN3YXBfaW9jdGxfZ2V0X3N0YXRzKHJ6cywgc3RhdHMpOwotCQlpZiAoY29weV90b191c2VyKCh2b2lkICopYXJnLCBzdGF0cywgc2l6ZW9mKCpzdGF0cykpKSB7Ci0JCQlrZnJlZShzdGF0cyk7Ci0JCQlyZXQgPSAtRUZBVUxUOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJa2ZyZWUoc3RhdHMpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBSWlNJT19JTklUOgotCQlyZXQgPSByYW16c3dhcF9pb2N0bF9pbml0X2RldmljZShyenMpOwotCQlicmVhazsKLQotCWNhc2UgUlpTSU9fUkVTRVQ6Ci0JCS8qIERvIG5vdCByZXNldCBhbiBhY3RpdmUgZGV2aWNlISAqLwotCQlpZiAoYmRldi0+YmRfaG9sZGVycykgewotCQkJcmV0ID0gLUVCVVNZOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQkvKiBNYWtlIHN1cmUgYWxsIHBlbmRpbmcgSS9PIGlzIGZpbmlzaGVkICovCi0JCWlmIChiZGV2KQotCQkJZnN5bmNfYmRldihiZGV2KTsKLQotCQlyZXQgPSByYW16c3dhcF9pb2N0bF9yZXNldF9kZXZpY2UocnpzKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlwcl9pbmZvKCJJbnZhbGlkIGlvY3RsICV1XG4iLCBjbWQpOwotCQlyZXQgPSAtRU5PVFRZOwotCX0KLQotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQgcmFtenN3YXBfc2xvdF9mcmVlX25vdGlmeShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCB1bnNpZ25lZCBsb25nIGluZGV4KQotewotCXN0cnVjdCByYW16c3dhcCAqcnpzOwotCi0JcnpzID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwotCXJhbXpzd2FwX2ZyZWVfcGFnZShyenMsIGluZGV4KTsKLQlyenNfc3RhdDY0X2luYyhyenMsICZyenMtPnN0YXRzLm5vdGlmeV9mcmVlKTsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyByYW16c3dhcF9kZXZvcHMgPSB7Ci0JLmlvY3RsID0gcmFtenN3YXBfaW9jdGwsCi0JLnN3YXBfc2xvdF9mcmVlX25vdGlmeSA9IHJhbXpzd2FwX3Nsb3RfZnJlZV9ub3RpZnksCi0JLm93bmVyID0gVEhJU19NT0RVTEUKLX07Ci0KLXN0YXRpYyBpbnQgY3JlYXRlX2RldmljZShzdHJ1Y3QgcmFtenN3YXAgKnJ6cywgaW50IGRldmljZV9pZCkKLXsKLQlpbnQgcmV0ID0gMDsKLQotCW11dGV4X2luaXQoJnJ6cy0+bG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnJ6cy0+c3RhdDY0X2xvY2spOwotCi0JcnpzLT5xdWV1ZSA9IGJsa19hbGxvY19xdWV1ZShHRlBfS0VSTkVMKTsKLQlpZiAoIXJ6cy0+cXVldWUpIHsKLQkJcHJfZXJyKCJFcnJvciBhbGxvY2F0aW5nIGRpc2sgcXVldWUgZm9yIGRldmljZSAlZFxuIiwKLQkJCWRldmljZV9pZCk7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCWJsa19xdWV1ZV9tYWtlX3JlcXVlc3QocnpzLT5xdWV1ZSwgcmFtenN3YXBfbWFrZV9yZXF1ZXN0KTsKLQlyenMtPnF1ZXVlLT5xdWV1ZWRhdGEgPSByenM7Ci0KLQkgLyogZ2VuZGlzayBzdHJ1Y3R1cmUgKi8KLQlyenMtPmRpc2sgPSBhbGxvY19kaXNrKDEpOwotCWlmICghcnpzLT5kaXNrKSB7Ci0JCWJsa19jbGVhbnVwX3F1ZXVlKHJ6cy0+cXVldWUpOwotCQlwcl93YXJuaW5nKCJFcnJvciBhbGxvY2F0aW5nIGRpc2sgc3RydWN0dXJlIGZvciBkZXZpY2UgJWRcbiIsCi0JCQlkZXZpY2VfaWQpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyenMtPmRpc2stPm1ham9yID0gcmFtenN3YXBfbWFqb3I7Ci0JcnpzLT5kaXNrLT5maXJzdF9taW5vciA9IGRldmljZV9pZDsKLQlyenMtPmRpc2stPmZvcHMgPSAmcmFtenN3YXBfZGV2b3BzOwotCXJ6cy0+ZGlzay0+cXVldWUgPSByenMtPnF1ZXVlOwotCXJ6cy0+ZGlzay0+cHJpdmF0ZV9kYXRhID0gcnpzOwotCXNucHJpbnRmKHJ6cy0+ZGlzay0+ZGlza19uYW1lLCAxNiwgInJhbXpzd2FwJWQiLCBkZXZpY2VfaWQpOwotCi0JLyogQWN0dWFsIGNhcGFjaXR5IHNldCB1c2luZyBSWlNJT19TRVRfRElTS1NJWkVfS0IgaW9jdGwgKi8KLQlzZXRfY2FwYWNpdHkocnpzLT5kaXNrLCAwKTsKLQotCWJsa19xdWV1ZV9waHlzaWNhbF9ibG9ja19zaXplKHJ6cy0+ZGlzay0+cXVldWUsIFBBR0VfU0laRSk7Ci0JYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShyenMtPmRpc2stPnF1ZXVlLCBQQUdFX1NJWkUpOwotCi0JYWRkX2Rpc2socnpzLT5kaXNrKTsKLQotCXJ6cy0+aW5pdF9kb25lID0gMDsKLQotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlc3Ryb3lfZGV2aWNlKHN0cnVjdCByYW16c3dhcCAqcnpzKQotewotCWlmIChyenMtPmRpc2spIHsKLQkJZGVsX2dlbmRpc2socnpzLT5kaXNrKTsKLQkJcHV0X2Rpc2socnpzLT5kaXNrKTsKLQl9Ci0KLQlpZiAocnpzLT5xdWV1ZSkKLQkJYmxrX2NsZWFudXBfcXVldWUocnpzLT5xdWV1ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IHJhbXpzd2FwX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0LCBkZXZfaWQ7Ci0KLQlpZiAobnVtX2RldmljZXMgPiBtYXhfbnVtX2RldmljZXMpIHsKLQkJcHJfd2FybmluZygiSW52YWxpZCB2YWx1ZSBmb3IgbnVtX2RldmljZXM6ICV1XG4iLAotCQkJCW51bV9kZXZpY2VzKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmFtenN3YXBfbWFqb3IgPSByZWdpc3Rlcl9ibGtkZXYoMCwgInJhbXpzd2FwIik7Ci0JaWYgKHJhbXpzd2FwX21ham9yIDw9IDApIHsKLQkJcHJfd2FybmluZygiVW5hYmxlIHRvIGdldCBtYWpvciBudW1iZXJcbiIpOwotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICghbnVtX2RldmljZXMpIHsKLQkJcHJfaW5mbygibnVtX2RldmljZXMgbm90IHNwZWNpZmllZC4gVXNpbmcgZGVmYXVsdDogMVxuIik7Ci0JCW51bV9kZXZpY2VzID0gMTsKLQl9Ci0KLQkvKiBBbGxvY2F0ZSB0aGUgZGV2aWNlIGFycmF5IGFuZCBpbml0aWFsaXplIGVhY2ggb25lICovCi0JcHJfaW5mbygiQ3JlYXRpbmcgJXUgZGV2aWNlcyAuLi5cbiIsIG51bV9kZXZpY2VzKTsKLQlkZXZpY2VzID0ga3phbGxvYyhudW1fZGV2aWNlcyAqIHNpemVvZihzdHJ1Y3QgcmFtenN3YXApLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRldmljZXMpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byB1bnJlZ2lzdGVyOwotCX0KLQotCWZvciAoZGV2X2lkID0gMDsgZGV2X2lkIDwgbnVtX2RldmljZXM7IGRldl9pZCsrKSB7Ci0JCXJldCA9IGNyZWF0ZV9kZXZpY2UoJmRldmljZXNbZGV2X2lkXSwgZGV2X2lkKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZnJlZV9kZXZpY2VzOwotCX0KLQotCXJldHVybiAwOwotCi1mcmVlX2RldmljZXM6Ci0Jd2hpbGUgKGRldl9pZCkKLQkJZGVzdHJveV9kZXZpY2UoJmRldmljZXNbLS1kZXZfaWRdKTsKLXVucmVnaXN0ZXI6Ci0JdW5yZWdpc3Rlcl9ibGtkZXYocmFtenN3YXBfbWFqb3IsICJyYW16c3dhcCIpOwotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCByYW16c3dhcF9leGl0KHZvaWQpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IHJhbXpzd2FwICpyenM7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2RldmljZXM7IGkrKykgewotCQlyenMgPSAmZGV2aWNlc1tpXTsKLQotCQlkZXN0cm95X2RldmljZShyenMpOwotCQlpZiAocnpzLT5pbml0X2RvbmUpCi0JCQlyZXNldF9kZXZpY2UocnpzKTsKLQl9Ci0KLQl1bnJlZ2lzdGVyX2Jsa2RldihyYW16c3dhcF9tYWpvciwgInJhbXpzd2FwIik7Ci0KLQlrZnJlZShkZXZpY2VzKTsKLQlwcl9kZWJ1ZygiQ2xlYW51cCBkb25lIVxuIik7Ci19Ci0KLW1vZHVsZV9wYXJhbShudW1fZGV2aWNlcywgdWludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG51bV9kZXZpY2VzLCAiTnVtYmVyIG9mIHJhbXpzd2FwIGRldmljZXMiKTsKLQotbW9kdWxlX2luaXQocmFtenN3YXBfaW5pdCk7Ci1tb2R1bGVfZXhpdChyYW16c3dhcF9leGl0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwotTU9EVUxFX0FVVEhPUigiTml0aW4gR3VwdGEgPG5ndXB0YUB2ZmxhcmUub3JnPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21wcmVzc2VkIFJBTSBCYXNlZCBTd2FwIERldmljZSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3JhbXpzd2FwX2Rydi5oIGIvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3JhbXpzd2FwX2Rydi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2MzMDQyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9yYW16c3dhcF9kcnYuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vKgotICogQ29tcHJlc3NlZCBSQU0gYmFzZWQgc3dhcCBkZXZpY2UKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAgIE5pdGluIEd1cHRhCi0gKgotICogVGhpcyBjb2RlIGlzIHJlbGVhc2VkIHVzaW5nIGEgZHVhbCBsaWNlbnNlIHN0cmF0ZWd5OiBCU0QvR1BMCi0gKiBZb3UgY2FuIGNob29zZSB0aGUgbGljZW5jZSB0aGF0IGJldHRlciBmaXRzIHlvdXIgcmVxdWlyZW1lbnRzLgotICoKLSAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiAzLWNsYXVzZSBCU0QgTGljZW5zZQotICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4wCi0gKgotICogUHJvamVjdCBob21lOiBodHRwOi8vY29tcGNhY2hlLmdvb2dsZWNvZGUuY29tCi0gKi8KLQotI2lmbmRlZiBfUkFNWlNXQVBfRFJWX0hfCi0jZGVmaW5lIF9SQU1aU1dBUF9EUlZfSF8KLQotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLQotI2luY2x1ZGUgInJhbXpzd2FwX2lvY3RsLmgiCi0jaW5jbHVkZSAieHZtYWxsb2MuaCIKLQotLyoKLSAqIFNvbWUgYXJiaXRyYXJ5IHZhbHVlLiBUaGlzIGlzIGp1c3QgdG8gY2F0Y2gKLSAqIGludmFsaWQgdmFsdWUgZm9yIG51bV9kZXZpY2VzIG1vZHVsZSBwYXJhbWV0ZXIuCi0gKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhfbnVtX2RldmljZXMgPSAzMjsKLQotLyoKLSAqIFN0b3JlZCBhdCBiZWdpbm5pbmcgb2YgZWFjaCBjb21wcmVzc2VkIG9iamVjdC4KLSAqCi0gKiBJdCBzdG9yZXMgYmFjay1yZWZlcmVuY2UgdG8gdGFibGUgZW50cnkgd2hpY2ggcG9pbnRzIHRvIHRoaXMKLSAqIG9iamVjdC4gVGhpcyBpcyByZXF1aXJlZCB0byBzdXBwb3J0IG1lbW9yeSBkZWZyYWdtZW50YXRpb24uCi0gKi8KLXN0cnVjdCB6b2JqX2hlYWRlciB7Ci0jaWYgMAotCXUzMiB0YWJsZV9pZHg7Ci0jZW5kaWYKLX07Ci0KLS8qLS0gQ29uZmlndXJhYmxlIHBhcmFtZXRlcnMgKi8KLQotLyogRGVmYXVsdCByYW16c3dhcCBkaXNrIHNpemU6IDI1JSBvZiB0b3RhbCBSQU0gKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0X2Rpc2tzaXplX3BlcmNfcmFtID0gMjU7Ci0KLS8qCi0gKiBQYWdlcyB0aGF0IGNvbXByZXNzIHRvIHNpemUgZ3JlYXRlciB0aGFuIHRoaXMgYXJlIHN0b3JlZAotICogdW5jb21wcmVzc2VkIGluIG1lbW9yeS4KLSAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heF96cGFnZV9zaXplID0gUEFHRV9TSVpFIC8gNCAqIDM7Ci0KLS8qCi0gKiBOT1RFOiBtYXhfenBhZ2Vfc2l6ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0bzoKLSAqICAgWFZfTUFYX0FMTE9DX1NJWkUgLSBzaXplb2Yoc3RydWN0IHpvYmpfaGVhZGVyKQotICogb3RoZXJ3aXNlLCB4dl9tYWxsb2MoKSB3b3VsZCBhbHdheXMgcmV0dXJuIGZhaWx1cmUuCi0gKi8KLQotLyotLSBFbmQgb2YgY29uZmlndXJhYmxlIHBhcmFtcyAqLwotCi0jZGVmaW5lIFNFQ1RPUl9TSElGVAkJOQotI2RlZmluZSBTRUNUT1JfU0laRQkJKDEgPDwgU0VDVE9SX1NISUZUKQotI2RlZmluZSBTRUNUT1JTX1BFUl9QQUdFX1NISUZUCShQQUdFX1NISUZUIC0gU0VDVE9SX1NISUZUKQotI2RlZmluZSBTRUNUT1JTX1BFUl9QQUdFCSgxIDw8IFNFQ1RPUlNfUEVSX1BBR0VfU0hJRlQpCi0KLS8qIEZsYWdzIGZvciByYW16c3dhcCBwYWdlcyAodGFibGVbcGFnZV9ub10uZmxhZ3MpICovCi1lbnVtIHJ6c19wYWdlZmxhZ3MgewotCS8qIFBhZ2UgaXMgc3RvcmVkIHVuY29tcHJlc3NlZCAqLwotCVJaU19VTkNPTVBSRVNTRUQsCi0KLQkvKiBQYWdlIGNvbnNpc3RzIGVudGlyZWx5IG9mIHplcm9zICovCi0JUlpTX1pFUk8sCi0KLQlfX05SX1JaU19QQUdFRkxBR1MsCi19OwotCi0vKi0tIERhdGEgc3RydWN0dXJlcyAqLwotCi0vKgotICogQWxsb2NhdGVkIGZvciBlYWNoIHN3YXAgc2xvdCwgaW5kZXhlZCBieSBwYWdlIG5vLgotICogVGhlc2UgdGFibGUgZW50cmllcyBtdXN0IGZpdCBleGFjdGx5IGluIGEgcGFnZS4KLSAqLwotc3RydWN0IHRhYmxlIHsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQl1MTYgb2Zmc2V0OwotCXU4IGNvdW50OwkvKiBvYmplY3QgcmVmIGNvdW50IChub3QgeWV0IHVzZWQpICovCi0JdTggZmxhZ3M7Ci19IF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKTsKLQotc3RydWN0IHJhbXpzd2FwX3N0YXRzIHsKLQkvKiBiYXNpYyBzdGF0cyAqLwotCXNpemVfdCBjb21wcl9zaXplOwkvKiBjb21wcmVzc2VkIHNpemUgb2YgcGFnZXMgc3RvcmVkIC0KLQkJCQkgKiBuZWVkZWQgdG8gZW5mb3JjZSBtZW1saW1pdCAqLwotCS8qIG1vcmUgc3RhdHMgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19SQU1aU1dBUF9TVEFUUykKLQl1NjQgbnVtX3JlYWRzOwkJLyogZmFpbGVkICsgc3VjY2Vzc2Z1bCAqLwotCXU2NCBudW1fd3JpdGVzOwkJLyogLS1kby0tICovCi0JdTY0IGZhaWxlZF9yZWFkczsJLyogc2hvdWxkIE5FVkVSISBoYXBwZW4gKi8KLQl1NjQgZmFpbGVkX3dyaXRlczsJLyogY2FuIGhhcHBlbiB3aGVuIG1lbW9yeSBpcyB0b28gbG93ICovCi0JdTY0IGludmFsaWRfaW87CQkvKiBub24tc3dhcCBJL08gcmVxdWVzdHMgKi8KLQl1NjQgbm90aWZ5X2ZyZWU7CS8qIG5vLiBvZiBzd2FwIHNsb3QgZnJlZSBub3RpZmljYXRpb25zICovCi0JdTMyIHBhZ2VzX3plcm87CQkvKiBuby4gb2YgemVybyBmaWxsZWQgcGFnZXMgKi8KLQl1MzIgcGFnZXNfc3RvcmVkOwkvKiBuby4gb2YgcGFnZXMgY3VycmVudGx5IHN0b3JlZCAqLwotCXUzMiBnb29kX2NvbXByZXNzOwkvKiAlIG9mIHBhZ2VzIHdpdGggY29tcHJlc3Npb24gcmF0aW88PTUwJSAqLwotCXUzMiBwYWdlc19leHBhbmQ7CS8qICUgb2YgaW5jb21wcmVzc2libGUgcGFnZXMgKi8KLSNlbmRpZgotfTsKLQotc3RydWN0IHJhbXpzd2FwIHsKLQlzdHJ1Y3QgeHZfcG9vbCAqbWVtX3Bvb2w7Ci0Jdm9pZCAqY29tcHJlc3Nfd29ya21lbTsKLQl2b2lkICpjb21wcmVzc19idWZmZXI7Ci0Jc3RydWN0IHRhYmxlICp0YWJsZTsKLQlzcGlubG9ja190IHN0YXQ2NF9sb2NrOwkvKiBwcm90ZWN0IDY0LWJpdCBzdGF0cyAqLwotCXN0cnVjdCBtdXRleCBsb2NrOwotCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxdWV1ZTsKLQlzdHJ1Y3QgZ2VuZGlzayAqZGlzazsKLQlpbnQgaW5pdF9kb25lOwotCS8qCi0JICogVGhpcyBpcyBsaW1pdCBvbiBhbW91bnQgb2YgKnVuY29tcHJlc3NlZCogd29ydGggb2YgZGF0YQotCSAqIHdlIGNhbiBob2xkLiBXaGVuIGJhY2tpbmcgc3dhcCBkZXZpY2UgaXMgcHJvdmlkZWQsIGl0IGlzCi0JICogc2V0IGVxdWFsIHRvIGRldmljZSBzaXplLgotCSAqLwotCXNpemVfdCBkaXNrc2l6ZTsJLyogYnl0ZXMgKi8KLQotCXN0cnVjdCByYW16c3dhcF9zdGF0cyBzdGF0czsKLX07Ci0KLS8qLS0gKi8KLQotLyogRGVidWdnaW5nIGFuZCBTdGF0cyAqLwotI2lmIGRlZmluZWQoQ09ORklHX1JBTVpTV0FQX1NUQVRTKQotc3RhdGljIHZvaWQgcnpzX3N0YXRfaW5jKHUzMiAqdikKLXsKLQkqdiA9ICp2ICsgMTsKLX0KLQotc3RhdGljIHZvaWQgcnpzX3N0YXRfZGVjKHUzMiAqdikKLXsKLQkqdiA9ICp2IC0gMTsKLX0KLQotc3RhdGljIHZvaWQgcnpzX3N0YXQ2NF9pbmMoc3RydWN0IHJhbXpzd2FwICpyenMsIHU2NCAqdikKLXsKLQlzcGluX2xvY2soJnJ6cy0+c3RhdDY0X2xvY2spOwotCSp2ID0gKnYgKyAxOwotCXNwaW5fdW5sb2NrKCZyenMtPnN0YXQ2NF9sb2NrKTsKLX0KLQotc3RhdGljIHU2NCByenNfc3RhdDY0X3JlYWQoc3RydWN0IHJhbXpzd2FwICpyenMsIHU2NCAqdikKLXsKLQl1NjQgdmFsOwotCi0Jc3Bpbl9sb2NrKCZyenMtPnN0YXQ2NF9sb2NrKTsKLQl2YWwgPSAqdjsKLQlzcGluX3VubG9jaygmcnpzLT5zdGF0NjRfbG9jayk7Ci0KLQlyZXR1cm4gdmFsOwotfQotI2Vsc2UKLSNkZWZpbmUgcnpzX3N0YXRfaW5jKHYpCi0jZGVmaW5lIHJ6c19zdGF0X2RlYyh2KQotI2RlZmluZSByenNfc3RhdDY0X2luYyhyLCB2KQotI2RlZmluZSByenNfc3RhdDY0X3JlYWQociwgdikKLSNlbmRpZiAvKiBDT05GSUdfUkFNWlNXQVBfU1RBVFMgKi8KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvcmFtenN3YXBfaW9jdGwuaCBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9yYW16c3dhcF9pb2N0bC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjk0YmNiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9yYW16c3dhcF9pb2N0bC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIENvbXByZXNzZWQgUkFNIGJhc2VkIHN3YXAgZGV2aWNlCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwICBOaXRpbiBHdXB0YQotICoKLSAqIFRoaXMgY29kZSBpcyByZWxlYXNlZCB1c2luZyBhIGR1YWwgbGljZW5zZSBzdHJhdGVneTogQlNEL0dQTAotICogWW91IGNhbiBjaG9vc2UgdGhlIGxpY2VuY2UgdGhhdCBiZXR0ZXIgZml0cyB5b3VyIHJlcXVpcmVtZW50cy4KLSAqCi0gKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgMy1jbGF1c2UgQlNEIExpY2Vuc2UKLSAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMAotICoKLSAqIFByb2plY3QgaG9tZTogaHR0cDovL2NvbXBjYWNoZS5nb29nbGVjb2RlLmNvbQotICovCi0KLSNpZm5kZWYgX1JBTVpTV0FQX0lPQ1RMX0hfCi0jZGVmaW5lIF9SQU1aU1dBUF9JT0NUTF9IXwotCi1zdHJ1Y3QgcmFtenN3YXBfaW9jdGxfc3RhdHMgewotCXU2NCBkaXNrc2l6ZTsJCS8qIHVzZXIgc3BlY2lmaWVkIG9yIGVxdWFsIHRvIGJhY2tpbmcgc3dhcAotCQkJCSAqIHNpemUgKGlmIHByZXNlbnQpICovCi0JdTY0IG51bV9yZWFkczsJCS8qIGZhaWxlZCArIHN1Y2Nlc3NmdWwgKi8KLQl1NjQgbnVtX3dyaXRlczsJCS8qIC0tZG8tLSAqLwotCXU2NCBmYWlsZWRfcmVhZHM7CS8qIHNob3VsZCBORVZFUiEgaGFwcGVuICovCi0JdTY0IGZhaWxlZF93cml0ZXM7CS8qIGNhbiBoYXBwZW4gd2hlbiBtZW1vcnkgaXMgdG9vIGxvdyAqLwotCXU2NCBpbnZhbGlkX2lvOwkJLyogbm9uLXN3YXAgSS9PIHJlcXVlc3RzICovCi0JdTY0IG5vdGlmeV9mcmVlOwkvKiBuby4gb2Ygc3dhcCBzbG90IGZyZWUgbm90aWZpY2F0aW9ucyAqLwotCXUzMiBwYWdlc196ZXJvOwkJLyogbm8uIG9mIHplcm8gZmlsbGVkIHBhZ2VzICovCi0JdTMyIGdvb2RfY29tcHJlc3NfcGN0OwkvKiBuby4gb2YgcGFnZXMgd2l0aCBjb21wcmVzc2lvbiByYXRpbzw9NTAlICovCi0JdTMyIHBhZ2VzX2V4cGFuZF9wY3Q7CS8qIG5vLiBvZiBpbmNvbXByZXNzaWJsZSBwYWdlcyAqLwotCXUzMiBwYWdlc19zdG9yZWQ7Ci0JdTMyIHBhZ2VzX3VzZWQ7Ci0JdTY0IG9yaWdfZGF0YV9zaXplOwotCXU2NCBjb21wcl9kYXRhX3NpemU7Ci0JdTY0IG1lbV91c2VkX3RvdGFsOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkLCBhbGlnbmVkKDQpKSk7Ci0KLSNkZWZpbmUgUlpTSU9fU0VUX0RJU0tTSVpFX0tCCV9JT1coJ3onLCAwLCBzaXplX3QpCi0jZGVmaW5lIFJaU0lPX0dFVF9TVEFUUwkJX0lPUigneicsIDEsIHN0cnVjdCByYW16c3dhcF9pb2N0bF9zdGF0cykKLSNkZWZpbmUgUlpTSU9fSU5JVAkJX0lPKCd6JywgMikKLSNkZWZpbmUgUlpTSU9fUkVTRVQJCV9JTygneicsIDMpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Jhcl9yZWdpc3Rlci9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3Jhcl9yZWdpc3Rlci9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWMyNzczLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9yYXJfcmVnaXN0ZXIvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLSMKLSMgUkFSIGRldmljZSBjb25maWd1cmF0aW9uCi0jCi0KLW1lbnUgIlJBUiBSZWdpc3RlciBEcml2ZXIiCi0jCi0jCVJlc3RyaWN0ZWQgQWNjZXNzIFJlZ2lzdGVyIE1hbmFnZXIKLSMKLWNvbmZpZyBSQVJfUkVHSVNURVIKLQl0cmlzdGF0ZSAiUmVzdHJpY3RlZCBBY2Nlc3MgUmVnaW9uIFJlZ2lzdGVyIERyaXZlciIKLQlkZXBlbmRzIG9uIFBDSQotCWRlZmF1bHQgbgotCS0tLWhlbHAtLS0KLQkgIFRoaXMgZHJpdmVyIGFsbG93cyBvdGhlciBrZXJuZWwgZHJpdmVycyBhY2Nlc3MgdG8gdGhlCi0JICBjb250ZW50cyBvZiB0aGUgcmVzdHJpY3RlZCBhY2Nlc3MgcmVnaW9uIGNvbnRyb2wgcmVnaXN0ZXJzLgotCi0JICBUaGUgcmVzdHJpY3RlZCBhY2Nlc3MgcmVnaW9uIGNvbnRyb2wgcmVnaXN0ZXJzCi0JICAocmFyX3JlZ2lzdGVycykgYXJlIHVzZWQgdG8gcGFzcyBhZGRyZXNzIGFuZAotCSAgbG9ja2luZyBpbmZvcm1hdGlvbiBvbiByZXN0cmljdGVkIGFjY2VzcyByZWdpb25zCi0JICB0byBvdGhlciBkcml2ZXJzIHRoYXQgdXNlIHJlc3RyaWN0ZWQgYWNjZXNzIHJlZ2lvbnMuCi0KLQkgIFRoZSByZXN0cmljdGVkIGFjY2VzcyByZWdpb25zIGFyZSByZWdpb25zIG9mIG1lbW9yeQotCSAgb24gdGhlIEludGVsIE1JRCBQbGF0Zm9ybSB0aGF0IGFyZSBub3QgYWNjZXNzaWJsZSB0bwotCSAgdGhlIHg4NiBwcm9jZXNzb3IsIGJ1dCBhcmUgYWNjZXNzaWJsZSB0byBkZWRpY2F0ZWQKLQkgIHByb2Nlc3NvcnMgb24gYm9hcmQgcGVyaXBoZXJhbCBkZXZpY2VzLgotCi0JICBUaGUgcHVycG9zZSBvZiB0aGUgcmVzdHJpY3RlZCBhY2Nlc3MgcmVnaW9ucyBpcyB0bwotCSAgcHJvdGVjdCBzZW5zaXRpdmUgZGF0YSBmcm9tIGNvbXByb21pc2UgYnkgdW5hdXRob3JpemVkCi0JICBwcm9ncmFtcyBydW5uaW5nIG9uIHRoZSB4ODYgcHJvY2Vzc29yLgotZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Jhcl9yZWdpc3Rlci9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9yYXJfcmVnaXN0ZXIvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1OTU0Y2MuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Jhcl9yZWdpc3Rlci9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotRVhUUkFfQ0ZMQUdTICs9IC1ETElUVExFX19FTkRJQU4KLW9iai0kKENPTkZJR19SQVJfUkVHSVNURVIpICs9IHJhcl9yZWdpc3Rlci5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFyX3JlZ2lzdGVyL3Jhcl9yZWdpc3Rlci5jIGIvZHJpdmVycy9zdGFnaW5nL3Jhcl9yZWdpc3Rlci9yYXJfcmVnaXN0ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE4NTAzZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcmFyX3JlZ2lzdGVyL3Jhcl9yZWdpc3Rlci5jCisrKyAvZGV2L251bGwKQEAgLTEsNjc1ICswLDAgQEAKLS8qCi0gKiAgcmFyX3JlZ2lzdGVyLmMgLSBBbiBJbnRlbCBSZXN0cmljdGVkIEFjY2VzcyBSZWdpb24gcmVnaXN0ZXIgZHJpdmVyCi0gKgotICogIENvcHlyaWdodChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKLSAqICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCi0gKiAgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAyMDA5MTIwNCBNYXJrIEFsbHluIDxtYXJrLmEuYWxseW5AaW50ZWwuY29tPgotICoJICAgICBPc3NhbWEgT3RobWFuIDxvc3NhbWEub3RobWFuQGludGVsLmNvbT4KLSAqCUNsZWFudXAgcGVyIGZlZWRiYWNrIGZyb20gQWxhbiBDb3ggYW5kIEFyamFuIFZhbiBEZSBWZW4KLSAqCi0gKiAgMjAwOTA4MDYgT3NzYW1hIE90aG1hbiA8b3NzYW1hLm90aG1hbkBpbnRlbC5jb20+Ci0gKiAgICAgIFJldHVybiB6ZXJvIGhpZ2ggYWRkcmVzcyBpZiB1cHBlciAyMiBiaXRzIGlzIHplcm8uCi0gKiAgICAgIENsZWFuZWQgdXAgY2hlY2twYXRjaCBlcnJvcnMuCi0gKiAgICAgIENsYXJpZmllZCB0aGF0IGRyaXZlciBpcyBkZWFsaW5nIHdpdGggYnVzIGFkZHJlc3Nlcy4KLSAqCi0gKiAgMjAwOTA3MDIgT3NzYW1hIE90aG1hbiA8b3NzYW1hLm90aG1hbkBpbnRlbC5jb20+Ci0gKiAgICAgIFJlbW92ZWQgdW5uZWNlc3NhcnkgaW5jbHVkZSBkaXJlY3RpdmVzCi0gKiAgICAgIENsZWFuZWQgdXAgc3BpbmxvY2tzLgotICogICAgICBDbGVhbmVkIHVwIGxvZ2dpbmcuCi0gKiAgICAgIEltcHJvdmVkIGludmFsaWQgcGFyYW1ldGVyIGNoZWNrcy4KLSAqICAgICAgRml4ZWQgYW5kIHNpbXBsaWZpZWQgUkFSIGFkZHJlc3MgcmV0cmlldmFsIGFuZCBSQVIgbG9ja2luZwotICogICAgICBjb2RlLgotICoKLSAqICAyMDA5MDYyNiBNYXJrIEFsbHluIDxtYXJrLmEuYWxseW5AaW50ZWwuY29tPgotICogICAgICBJbml0aWFsIHB1Ymxpc2gKLSAqLwotCi0jZGVmaW5lIERFQlVHIDEKLQotI2luY2x1ZGUgInJhcl9yZWdpc3Rlci5oIgotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLQotLyogPT09IExpbmNyb2Z0IE1lc3NhZ2UgQnVzIEludGVyZmFjZSA9PT0gKi8KLSNkZWZpbmUgTE5DX01DUl9PRkZTRVQJCTB4RDAJLyogTWVzc2FnZSBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIExOQ19NRFJfT0ZGU0VUCQkweEQ0CS8qIE1lc3NhZ2UgRGF0YSBSZWdpc3RlciAqLwotCi0vKiBNZXNzYWdlIE9wY29kZXMgKi8KLSNkZWZpbmUgTE5DX01FU1NBR0VfUkVBRF9PUENPREUJMHhEMAotI2RlZmluZSBMTkNfTUVTU0FHRV9XUklURV9PUENPREUgMHhFMAotCi0vKiBNZXNzYWdlIFdyaXRlIEJ5dGUgRW5hYmxlcyAqLwotI2RlZmluZSBMTkNfTUVTU0FHRV9CWVRFX1dSSVRFX0VOQUJMRVMJMHhGCi0KLS8qIEItdW5pdCBQb3J0ICovCi0jZGVmaW5lIExOQ19CVU5JVF9QT1JUCTB4MwotCi0vKiA9PT0gTGluY3JvZnQgQi1Vbml0IFJlZ2lzdGVycyAtIFByb2dyYW1tZWQgYnkgSUEzMiBmaXJtd2FyZSA9PT0gKi8KLSNkZWZpbmUgTE5DX0JSQVIwTAkweDEwCi0jZGVmaW5lIExOQ19CUkFSMEgJMHgxMQotI2RlZmluZSBMTkNfQlJBUjFMCTB4MTIKLSNkZWZpbmUgTE5DX0JSQVIxSAkweDEzCi0vKiBSZXNlcnZlZCBmb3IgU2VQICovCi0jZGVmaW5lIExOQ19CUkFSMkwJMHgxNAotI2RlZmluZSBMTkNfQlJBUjJICTB4MTUKLQotLyogTW9vcmVzdG93biBzdXBwb3J0cyB0aHJlZSByZXN0cmljdGVkIGFjY2VzcyByZWdpb25zLiAqLwotI2RlZmluZSBNUlNUX05VTV9SQVIgMwotCi0vKiBSQVIgQnVzIEFkZHJlc3MgUmFuZ2UgKi8KLXN0cnVjdCByYXJfYWRkciB7Ci0JZG1hX2FkZHJfdCBsb3c7Ci0JZG1hX2FkZHJfdCBoaWdoOwotfTsKLQotLyoKLSAqCVdlIGNyZWF0ZSBvbmUgb2YgdGhlc2UgZm9yIGVhY2ggUkFSCi0gKi8KLXN0cnVjdCBjbGllbnQgewotCWludCAoKmNhbGxiYWNrKSh1bnNpZ25lZCBsb25nIGRhdGEpOwotCXVuc2lnbmVkIGxvbmcgZHJpdmVyX3ByaXY7Ci0JYm9vbCBidXN5OwotfTsKLQotc3RhdGljIERFRklORV9NVVRFWChyYXJfbXV0ZXgpOwotc3RhdGljIERFRklORV9NVVRFWChsbmNfcmVnX211dGV4KTsKLQotLyoKLSAqCU9uZSBwZXIgUkFSIGRldmljZSAoY3VycmVudGx5IG9ubHkgb25lIGRldmljZSkKLSAqLwotc3RydWN0IHJhcl9kZXZpY2UgewotCXN0cnVjdCByYXJfYWRkciByYXJfYWRkcltNUlNUX05VTV9SQVJdOwotCXN0cnVjdCBwY2lfZGV2ICpyYXJfZGV2OwotCWJvb2wgcmVnaXN0ZXJlZDsKLQlib29sIGFsbG9jYXRlZDsKLQlzdHJ1Y3QgY2xpZW50IGNsaWVudFtNUlNUX05VTV9SQVJdOwotfTsKLQotLyogQ3VycmVudCBwbGF0Zm9ybXMgaGF2ZSBvbmx5IG9uZSByYXJfZGV2aWNlIGZvciAzIHJhciByZWdpb25zICovCi1zdGF0aWMgc3RydWN0IHJhcl9kZXZpY2UgbXlfcmFyX2RldmljZTsKLQotLyoKLSAqCUFic3RyYWN0IG91dCBtdWx0aXBsZSBkZXZpY2Ugc3VwcG9ydC4gQ3VycmVudCBwbGF0Zm9ybXMgb25seQotICoJaGF2ZSBhIHNpbmdsZSBSQVIgZGV2aWNlLgotICovCi0KLS8qKgotICoJYWxsb2NfcmFyX2RldmljZQktCXJldHVybiBhIG5ldyBSQVIgc3RydWN0dXJlCi0gKgotICoJUmV0dXJuIGEgbmV3IChidXQgbm90IHlldCByZWFkeSkgUkFSIGRldmljZSBvYmplY3QKLSAqLwotc3RhdGljIHN0cnVjdCByYXJfZGV2aWNlICphbGxvY19yYXJfZGV2aWNlKHZvaWQpCi17Ci0JaWYgKG15X3Jhcl9kZXZpY2UuYWxsb2NhdGVkKQotCQlyZXR1cm4gTlVMTDsKLQlteV9yYXJfZGV2aWNlLmFsbG9jYXRlZCA9IDE7Ci0JcmV0dXJuICZteV9yYXJfZGV2aWNlOwotfQotCi0vKioKLSAqCWZyZWVfcmFyX2RldmljZQkJLQlmcmVlIGEgUkFSIG9iamVjdAotICoJQHJhcjogdGhlIFJBUiBkZXZpY2UgYmVpbmcgZnJlZWQKLSAqCi0gKglSZWxlYXNlIGEgUkFSIG9iamVjdCBhbmQgYW55IGF0dGFjaGVkIHJlc291cmNlcwotICovCi1zdGF0aWMgdm9pZCBmcmVlX3Jhcl9kZXZpY2Uoc3RydWN0IHJhcl9kZXZpY2UgKnJhcikKLXsKLQlwY2lfZGV2X3B1dChyYXItPnJhcl9kZXYpOwotCXJhci0+YWxsb2NhdGVkID0gMDsKLX0KLQotLyoqCi0gKglfcmFyX3RvX2RldmljZQkJLQlyZXR1cm4gdGhlIGRldmljZSBoYW5kbGluZyB0aGlzIFJBUgotICoJQHJhcjogUkFSIG51bWJlcgotICoJQG9mZjogcmV0dXJuZWQgb2Zmc2V0Ci0gKgotICoJSW50ZXJuYWwgaGVscGVyIGZvciBsb29raW5nIHVwIFJBUiBkZXZpY2VzLiBUaGlzIGFuZCBhbGxvYyBhcmUgdGhlCi0gKgl0d28gZnVuY3Rpb25zIHRoYXQgbmVlZCB0b3VjaGluZyB0byBnbyB0byBtdWx0aXBsZSBSQVIgZGV2aWNlcy4KLSAqLwotc3RhdGljIHN0cnVjdCByYXJfZGV2aWNlICpfcmFyX3RvX2RldmljZShpbnQgcmFyLCBpbnQgKm9mZikKLXsKLQlpZiAocmFyID49IDAgJiYgcmFyIDw9IDMpIHsKLQkJKm9mZiA9IHJhcjsKLQkJcmV0dXJuICZteV9yYXJfZGV2aWNlOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotCi0vKioKLSAqCXJhcl90b19kZXZpY2UJCS0JcmV0dXJuIHRoZSBkZXZpY2UgaGFuZGxpbmcgdGhpcyBSQVIKLSAqCUByYXI6IFJBUiBudW1iZXIKLSAqCUBvZmY6IHJldHVybmVkIG9mZnNldAotICoKLSAqCVJldHVybiB0aGUgZGV2aWNlIHRoaXMgUkFSIG1hcHMgdG8gaWYgb25lIGlzIHByZXNlbnQsIG90aGVyd2lzZQotICoJcmV0dXJucyBOVUxMLiBSZXBvcnRzIHRoZSBvZmZzZXQgcmVsYXRpdmUgdG8gdGhlIGJhc2Ugb2YgdGhpcwotICoJUkFSIGRldmljZSBpbiBvZmYuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcmFyX2RldmljZSAqcmFyX3RvX2RldmljZShpbnQgcmFyLCBpbnQgKm9mZikKLXsKLQlzdHJ1Y3QgcmFyX2RldmljZSAqcmFyX2RldiA9IF9yYXJfdG9fZGV2aWNlKHJhciwgb2ZmKTsKLQlpZiAocmFyX2RldiA9PSBOVUxMIHx8ICFyYXJfZGV2LT5yZWdpc3RlcmVkKQotCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gcmFyX2RldjsKLX0KLQotLyoqCi0gKglyYXJfdG9fY2xpZW50CQktCXJldHVybiB0aGUgY2xpZW50IGhhbmRsaW5nIHRoaXMgUkFSCi0gKglAcmFyOiBSQVIgbnVtYmVyCi0gKgotICoJUmV0dXJuIHRoZSBjbGllbnQgdGhpcyBSQVIgbWFwcyB0byBpZiBhIG1hcHBpbmcgaXMga25vd24sIG90aGVyd2lzZQotICoJcmV0dXJucyBOVUxMLgotICovCi1zdGF0aWMgc3RydWN0IGNsaWVudCAqcmFyX3RvX2NsaWVudChpbnQgcmFyKQotewotCWludCBpZHg7Ci0Jc3RydWN0IHJhcl9kZXZpY2UgKnIgPSBfcmFyX3RvX2RldmljZShyYXIsICZpZHgpOwotCWlmIChyICE9IE5VTEwpCi0JCXJldHVybiAmci0+Y2xpZW50W2lkeF07Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qKgotICoJcmFyX3JlYWRfYWRkcgkJLQlyZXRyaWV2ZSBhIFJBUiBtYXBwaW5nCi0gKglAcGRldjogUENJIGRldmljZSBmb3IgdGhlIFJBUgotICoJQG9mZnNldDogb2Zmc2V0IGZvciBtZXNzYWdlCi0gKglAYWRkcjogcmV0dXJuZWQgYWRkcmVzcwotICoKLSAqCVJlYWRzIHRoZSBhZGRyZXNzIG9mIGEgZ2l2ZW4gUkFSIHJlZ2lzdGVyLiBSZXR1cm5zIDAgb24gc3VjY2VzcwotICoJb3IgYW4gZXJyb3IgY29kZSBvbiBmYWlsdXJlLgotICovCi1zdGF0aWMgaW50IHJhcl9yZWFkX2FkZHIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBvZmZzZXQsIGRtYV9hZGRyX3QgKmFkZHIpCi17Ci0JLyoKLQkgKiA9PT09PT09PSBUaGUgTGluY3JvZnQgTWVzc2FnZSBCdXMgSW50ZXJmYWNlID09PT09PT09Ci0JICogTGluY3JvZnQgcmVnaXN0ZXJzIG1heSBiZSBvYnRhaW5lZCB2aWEgUENJIGZyb20KLQkgKiB0aGUgaG9zdCBicmlkZ2UgdXNpbmcgdGhlIExpbmNyb2Z0IE1lc3NhZ2UgQnVzCi0JICogSW50ZXJmYWNlLiAgVGhhdCBtZXNzYWdlIGJ1cyBpbnRlcmZhY2UgaXMgZ2VuZXJhbGx5Ci0JICogY29tcHJpc2VkIG9mIHR3byByZWdpc3RlcnM6IGEgY29udHJvbCByZWdpc3RlciAoTUNSLCAweERPKQotCSAqIGFuZCBhIGRhdGEgcmVnaXN0ZXIgKE1EUiwgMHhENCkuCi0JICoKLQkgKiBUaGUgTUNSIChtZXNzYWdlIGNvbnRyb2wgcmVnaXN0ZXIpIGZvcm1hdCBpcyB0aGUgZm9sbG93aW5nOgotCSAqICAgMS4gIFszMToyNF06IE9wY29kZQotCSAqICAgMi4gIFsyMzoxNl06IFBvcnQKLQkgKiAgIDMuICBbMTU6OF06IFJlZ2lzdGVyIE9mZnNldAotCSAqICAgNC4gIFs3OjRdOiBCeXRlIEVuYWJsZXMgKHVzZSAweEYgdG8gc2V0IGFsbCBvZiB0aGVzZSBiaXRzCi0JICogICAgICAgICAgICAgIHRvIDEpCi0JICogICA1LiAgWzM6MF06IHJlc2VydmVkCi0JICoKLQkgKiAgUmVhZCAoMHhEMCkgYW5kIHdyaXRlICgweEUwKSBvcGNvZGVzIGFyZSB3cml0dGVuIHRvIHRoZQotCSAqICBjb250cm9sIHJlZ2lzdGVyIHdoZW4gcmVhZGluZyBhbmQgd3JpdGluZyB0byBMaW5jcm9mdAotCSAqICByZWdpc3RlcnMsIHJlc3BlY3RpdmVseS4KLQkgKgotCSAqICBXZSdyZSBpbnRlcmVzdGVkIGluIHJlZ2lzdGVycyBmb3VuZCBpbiB0aGUgTGluY3JvZnQKLQkgKiAgQi11bml0LiAgVGhlIEItdW5pdCBwb3J0IGlzIDB4My4KLQkgKgotCSAqICBUaGUgc2l4IEItdW5pdCBSQVIgcmVnaXN0ZXIgb2Zmc2V0cyB3ZSB1c2UgYXJlIGxpc3RlZAotCSAqICBlYXJsaWVyIGluIHRoaXMgZmlsZS4KLQkgKgotCSAqICBMYXN0bHkgd3JpdGluZyB0byB0aGUgTUNSIHJlZ2lzdGVyIHJlcXVpcmVzIHRoZSAiQnl0ZQotCSAqICBlbmFibGVzIiBiaXRzIHRvIGJlIHNldCB0byAxLiAgVGhpcyBtYXkgYmUgYWNoaWV2ZWQgYnkKLQkgKiAgd3JpdGluZyAweEYgYXQgYml0IDQuCi0JICoKLQkgKiBUaGUgTURSIChtZXNzYWdlIGRhdGEgcmVnaXN0ZXIpIGZvcm1hdCBpcyB0aGUgZm9sbG93aW5nOgotCSAqICAgMS4gWzMxOjBdOiBSZWFkL1dyaXRlIERhdGEKLQkgKgotCSAqICBEYXRhIGJlaW5nIHJlYWQgZnJvbSB0aGlzIHJlZ2lzdGVyIGlzIG9ubHkgYXZhaWxhYmxlIGFmdGVyCi0JICogIHdyaXRpbmcgdGhlIGFwcHJvcHJpYXRlIGNvbnRyb2wgbWVzc2FnZSB0byB0aGUgTUNSCi0JICogIHJlZ2lzdGVyLgotCSAqCi0JICogIERhdGEgYmVpbmcgd3JpdHRlbiB0byB0aGlzIHJlZ2lzdGVyIG11c3QgYmUgd3JpdHRlbiBiZWZvcmUKLQkgKiAgd3JpdGluZyB0aGUgYXBwcm9wcmlhdGUgY29udHJvbCBtZXNzYWdlIHRvIHRoZSBNQ1IKLQkgKiAgcmVnaXN0ZXIuCi0JKi8KLQotCWludCByZXN1bHQ7Ci0JdTMyIGFkZHIzMjsKLQotCS8qIENvbnN0cnVjdCBjb250cm9sIG1lc3NhZ2UgKi8KLQl1MzIgY29uc3QgbWVzc2FnZSA9Ci0JCSAoTE5DX01FU1NBR0VfUkVBRF9PUENPREUgPDwgMjQpCi0JCSB8IChMTkNfQlVOSVRfUE9SVCA8PCAxNikKLQkJIHwgKG9mZnNldCA8PCA4KQotCQkgfCAoTE5DX01FU1NBR0VfQllURV9XUklURV9FTkFCTEVTIDw8IDQpOwotCi0JZGV2X2RiZygmcGRldi0+ZGV2LCAiT2Zmc2V0IGZvciAnZ2V0JyBMTkMgTVNHIGlzICV4XG4iLCBvZmZzZXQpOwotCi0JLyoKLQkqIFdlIHN5bmNocm9uaXplIGFjY2VzcyB0byB0aGUgTGluY3JvZnQgTUNSIGFuZCBNRFIgcmVnaXN0ZXJzCi0JKiB1bnRpbCBCT1RIIHRoZSBjb21tYW5kIGlzIGlzc3VlZCB0aHJvdWdoIHRoZSBNQ1IgcmVnaXN0ZXIKLQkqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgTURSIHJlZ2lzdGVyLgotCSogT3RoZXJ3aXNlIGEgcmFjZSBjb25kaXRpb24gd291bGQgZXhpc3QgYmV0d2VlbiBhY2Nlc3NlcyB0bwotCSogYm90aCByZWdpc3RlcnMuCi0JKi8KLQotCW11dGV4X2xvY2soJmxuY19yZWdfbXV0ZXgpOwotCi0JLyogU2VuZCB0aGUgY29udHJvbCBtZXNzYWdlICovCi0JcmVzdWx0ID0gcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBMTkNfTUNSX09GRlNFVCwgbWVzc2FnZSk7Ci0JaWYgKCFyZXN1bHQpIHsKLQkJLyogUmVhZCBiYWNrIHRoZSBhZGRyZXNzIGFzIGEgMzJiaXQgdmFsdWUgKi8KLQkJcmVzdWx0ID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIExOQ19NRFJfT0ZGU0VULCAmYWRkcjMyKTsKLQkJKmFkZHIgPSAoZG1hX2FkZHJfdClhZGRyMzI7Ci0JfQotCW11dGV4X3VubG9jaygmbG5jX3JlZ19tdXRleCk7Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKglyYXJfc2V0X2FkZHIJCS0JU2V0IGEgUkFSIG1hcHBpbmcKLSAqCUBwZGV2OiBQQ0kgZGV2aWNlIGZvciB0aGUgUkFSCi0gKglAb2Zmc2V0OiBvZmZzZXQgZm9yIG1lc3NhZ2UKLSAqCUBhZGRyOiBhZGRyZXNzIHRvIHNldAotICoKLSAqCVNldHMgdGhlIGFkZHJlc3Mgb2YgYSBnaXZlbiBSQVIgcmVnaXN0ZXIuIFJldHVybnMgMCBvbiBzdWNjZXNzCi0gKglvciBhbiBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCi0gKi8KLXN0YXRpYyBpbnQgcmFyX3NldF9hZGRyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCWludCBvZmZzZXQsCi0JZG1hX2FkZHJfdCBhZGRyKQotewotCS8qCi0JKiBEYXRhIGJlaW5nIHdyaXR0ZW4gdG8gdGhpcyByZWdpc3RlciBtdXN0IGJlIHdyaXR0ZW4gYmVmb3JlCi0JKiB3cml0aW5nIHRoZSBhcHByb3ByaWF0ZSBjb250cm9sIG1lc3NhZ2UgdG8gdGhlIE1DUgotCSogcmVnaXN0ZXIuCi0JKiBTZWUgcmFyX2dldF9hZGRycygpIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZQotCSogbWVzc2FnZSBidXMgaW50ZXJmYWNlIGJlaW5nIHVzZWQgaGVyZS4KLQkqLwotCi0JaW50IHJlc3VsdDsKLQotCS8qIENvbnN0cnVjdCBjb250cm9sIG1lc3NhZ2UgKi8KLQl1MzIgY29uc3QgbWVzc2FnZSA9IChMTkNfTUVTU0FHRV9XUklURV9PUENPREUgPDwgMjQpCi0JCXwgKExOQ19CVU5JVF9QT1JUIDw8IDE2KQotCQl8IChvZmZzZXQgPDwgOCkKLQkJfCAoTE5DX01FU1NBR0VfQllURV9XUklURV9FTkFCTEVTIDw8IDQpOwotCi0JLyoKLQkqIFdlIHN5bmNocm9uaXplIGFjY2VzcyB0byB0aGUgTGluY3JvZnQgTUNSIGFuZCBNRFIgcmVnaXN0ZXJzCi0JKiB1bnRpbCBCT1RIIHRoZSBjb21tYW5kIGlzIGlzc3VlZCB0aHJvdWdoIHRoZSBNQ1IgcmVnaXN0ZXIKLQkqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgTURSIHJlZ2lzdGVyLgotCSogT3RoZXJ3aXNlIGEgcmFjZSBjb25kaXRpb24gd291bGQgZXhpc3QgYmV0d2VlbiBhY2Nlc3NlcyB0bwotCSogYm90aCByZWdpc3RlcnMuCi0JKi8KLQotCW11dGV4X2xvY2soJmxuY19yZWdfbXV0ZXgpOwotCi0JLyogU2VuZCB0aGUgY29udHJvbCBtZXNzYWdlICovCi0JcmVzdWx0ID0gcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBMTkNfTURSX09GRlNFVCwgYWRkcik7Ci0JaWYgKCFyZXN1bHQpCi0JCS8qIEFuZCBhZGRyZXNzICovCi0JCXJlc3VsdCA9IHBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgTE5DX01DUl9PRkZTRVQsIG1lc3NhZ2UpOwotCi0JbXV0ZXhfdW5sb2NrKCZsbmNfcmVnX211dGV4KTsKLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICoJcmFyX2luaXRfcGFyYW1zCQktCUluaXRpYWxpemUgUkFSIHBhcmFtZXRlcnMKLSAqCUByYXI6IFJBUiBkZXZpY2UgdG8gaW5pdGlhbGlzZQotICoKLSAqCUluaXRpYWxpemUgUkFSIHBhcmFtZXRlcnMsIHN1Y2ggYXMgYnVzIGFkZHJlc3NlcywgZXRjLiBSZXR1cm5zIDAKLSAqCW9uIHN1Y2Nlc3MsIG9yIGFuIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KLSAqLwotc3RhdGljIGludCBpbml0X3Jhcl9wYXJhbXMoc3RydWN0IHJhcl9kZXZpY2UgKnJhcikKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHJhci0+cmFyX2RldjsKLQl1bnNpZ25lZCBpbnQgaTsKLQlpbnQgcmVzdWx0ID0gMDsKLQlpbnQgb2Zmc2V0ID0gMHgxMDsJLyogUkFSIDAgdG8gMiBpbiBvcmRlciBsb3cvaGlnaC9sb3cvaGlnaC8uLi4gKi8KLQotCS8qIFJldHJpZXZlIFJBUiBzdGFydCBhbmQgZW5kIGJ1cyBhZGRyZXNzZXMuCi0JKiBBY2Nlc3MgdGhlIFJBUiByZWdpc3RlcnMgdGhyb3VnaCB0aGUgTGluY3JvZnQgTWVzc2FnZSBCdXMKLQkqIEludGVyZmFjZSBvbiBQQ0kgZGV2aWNlOiAwMDowMC4wIEhvc3QgYnJpZGdlLgotCSovCi0KLQlmb3IgKGkgPSAwOyBpIDwgTVJTVF9OVU1fUkFSOyArK2kpIHsKLQkJc3RydWN0IHJhcl9hZGRyICphZGRyID0gJnJhci0+cmFyX2FkZHJbaV07Ci0KLQkJcmVzdWx0ID0gcmFyX3JlYWRfYWRkcihwZGV2LCBvZmZzZXQrKywgJmFkZHItPmxvdyk7Ci0JCWlmIChyZXN1bHQgIT0gMCkKLQkJCXJldHVybiByZXN1bHQ7Ci0KLQkJcmVzdWx0ID0gcmFyX3JlYWRfYWRkcihwZGV2LCBvZmZzZXQrKywgJmFkZHItPmhpZ2gpOwotCQlpZiAocmVzdWx0ICE9IDApCi0JCQlyZXR1cm4gcmVzdWx0OwotCi0KLQkJLyoKLQkJKiBPbmx5IHRoZSB1cHBlciAyMiBiaXRzIG9mIHRoZSBSQVIgYWRkcmVzc2VzIGFyZQotCQkqIHN0b3JlZCBpbiB0aGVpciBjb3JyZXNwb25kaW5nIFJBUiByZWdpc3RlcnMgc28gd2UKLQkJKiBtdXN0IHNldCB0aGUgbG93ZXIgMTAgYml0cyBhY2NvcmRpbmdseS4KLQotCQkqIFRoZSBsb3cgYWRkcmVzcyBoYXMgaXRzIGxvd2VyIDEwIGJpdHMgY2xlYXJlZCwgYW5kCi0JCSogdGhlIGhpZ2ggYWRkcmVzcyBoYXMgYWxsIGl0cyBsb3dlciAxMCBiaXRzIHNldCwKLQkJKiBlLmcuOgotCQkqIGxvdyA9IDB4MmZmZmZjMDAKLQkJKi8KLQotCQlhZGRyLT5sb3cgJj0gKGRtYV9hZGRyX3QpMHhmZmZmZmMwMHU7Ci0KLQkJLyoKLQkJKiBTZXQgYml0cyA5OjAgb24gdXBwc2VyIGFkZHJlc3MgaWYgYml0cyAzMToxMCBhcmUgbm9uCi0JCSogemVybzsgb3RoZXJ3aXplIGNsZWFyIGFsbCBiaXRzCi0JCSovCi0KLQkJaWYgKChhZGRyLT5oaWdoICYgMHhmZmZmZmMwMHUpID09IDApCi0JCQlhZGRyLT5oaWdoID0gMDsKLQkJZWxzZQotCQkJYWRkci0+aGlnaCB8PSAweDNmZnU7Ci0JfQotCS8qIERvbmUgYWNjZXNzaW5nIHRoZSBkZXZpY2UuICovCi0KLQlpZiAocmVzdWx0ID09IDApIHsKLQkJZm9yIChpID0gMDsgaSAhPSBNUlNUX05VTV9SQVI7ICsraSkgewotCQkJLyoKLQkJCSogIkJSQVIiIHJlZmVycyB0byB0aGUgUkFSIHJlZ2lzdGVycyBpbiB0aGUKLQkJCSogTGluY3JvZnQgQi11bml0LgotCQkJKi8KLQkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJCUkFSWyV1XSBidXMgYWRkcmVzcyByYW5nZSA9ICIKLQkJCSAgIlslbHgsICVseF1cbiIsIGksCi0JCQkgICh1bnNpZ25lZCBsb25nKXJhci0+cmFyX2FkZHJbaV0ubG93LAotCQkJICAodW5zaWduZWQgbG9uZylyYXItPnJhcl9hZGRyW2ldLmhpZ2gpOwotCQl9Ci0JfQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICoJcmFyX2dldF9hZGRyZXNzCQktCWdldCB0aGUgYnVzIGFkZHJlc3MgaW4gYSBSQVIKLSAqCUBzdGFydDogcmV0dXJuIHZhbHVlIG9mIHN0YXJ0IGFkZHJlc3Mgb2YgYmxvY2sKLSAqCUBlbmQ6IHJldHVybiB2YWx1ZSBvZiBlbmQgYWRkcmVzcyBvZiBibG9jawotICoKLSAqCVRoZSByYXJfZ2V0X2FkZHJlc3MgZnVuY3Rpb24gaXMgdXNlZCBieSBvdGhlciBkZXZpY2UgZHJpdmVycwotICoJdG8gb2J0YWluIFJBUiBhZGRyZXNzIGluZm9ybWF0aW9uIG9uIGEgUkFSLiBJdCB0YWtlcyB0aHJlZQotICoJcGFyYW1ldGVyczoKLSAqCi0gKglUaGUgZnVuY3Rpb24gcmV0dXJucyBhIDAgdXBvbiBzdWNjZXNzIG9yIGFuIGVycm9yIGlmIHRoZXJlIGlzIG5vIFJBUgotICoJZmFjaWxpdHkgb24gdGhpcyBzeXN0ZW0uCi0gKi8KLWludCByYXJfZ2V0X2FkZHJlc3MoaW50IHJhcl9pbmRleCwgZG1hX2FkZHJfdCAqc3RhcnQsIGRtYV9hZGRyX3QgKmVuZCkKLXsKLQlpbnQgaWR4OwotCXN0cnVjdCByYXJfZGV2aWNlICpyYXIgPSByYXJfdG9fZGV2aWNlKHJhcl9pbmRleCwgJmlkeCk7Ci0KLQlpZiAocmFyID09IE5VTEwpIHsKLQkJV0FSTl9PTigxKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JKnN0YXJ0ID0gcmFyLT5yYXJfYWRkcltpZHhdLmxvdzsKLQkqZW5kID0gcmFyLT5yYXJfYWRkcltpZHhdLmhpZ2g7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKHJhcl9nZXRfYWRkcmVzcyk7Ci0KLS8qKgotICoJcmFyX2xvY2sJLQlsb2NrIGEgUkFSIHJlZ2lzdGVyCi0gKglAcmFyX2luZGV4OiBSQVIgdG8gbG9jayAoMC0yKQotICoKLSAqCVRoZSByYXJfbG9jayBmdW5jdGlvbiBpcyB1ZWQgYnkgb3RoZXIgZGV2aWNlIGRyaXZlcnMgdG8gbG9jayBhbiBSQVIuCi0gKglvbmNlIGEgUkFSIGlzIGxvY2tlZCwgaXQgc3RheXMgbG9ja2VkIHVudGlsIHRoZSBuZXh0IHN5c3RlbSByZWJvb3QuCi0gKgotICoJVGhlIGZ1bmN0aW9uIHJldHVybnMgYSAwIHVwb24gc3VjY2VzcyBvciBhbiBlcnJvciBpZiB0aGVyZSBpcyBubyBSQVIKLSAqCWZhY2lsaXR5IG9uIHRoaXMgc3lzdGVtLCBvciB0aGUgbG9ja2luZyBmYWlscwotICovCi1pbnQgcmFyX2xvY2soaW50IHJhcl9pbmRleCkKLXsKLQlzdHJ1Y3QgcmFyX2RldmljZSAqcmFyOwotCWludCByZXN1bHQ7Ci0JaW50IGlkeDsKLQlkbWFfYWRkcl90IGxvdywgaGlnaDsKLQotCXJhciA9IHJhcl90b19kZXZpY2UocmFyX2luZGV4LCAmaWR4KTsKLQotCWlmIChyYXIgPT0gTlVMTCkgewotCQlXQVJOX09OKDEpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlsb3cgPSByYXItPnJhcl9hZGRyW2lkeF0ubG93ICYgMHhmZmZmZmMwMHU7Ci0JaGlnaCA9IHJhci0+cmFyX2FkZHJbaWR4XS5oaWdoICYgMHhmZmZmZmMwMHU7Ci0KLQkvKgotCSogT25seSBhbGxvdyBJL08gZnJvbSB0aGUgZ3JhcGhpY3MgYW5kIExhbmd3ZWxsOwotCSogbm90IGZyb20gdGhlIHg4NiBwcm9jZXNzb3IKLQkqLwotCi0JaWYgKHJhcl9pbmRleCA9PSBSQVJfVFlQRV9WSURFTykgewotCQlsb3cgfD0gMHgwMDAwMDAwOTsKLQkJaGlnaCB8PSAweDAwMDAwMDE1OwotCX0gZWxzZSBpZiAocmFyX2luZGV4ID09IFJBUl9UWVBFX0FVRElPKSB7Ci0JCS8qIE9ubHkgYWxsb3cgSS9PIGZyb20gTGFuZ3dlbGw7IG5vdGhpbmcgZnJvbSB4ODYgKi8KLQkJbG93IHw9IDB4MDAwMDAwMDg7Ci0JCWhpZ2ggfD0gMHgwMDAwMDAxODsKLQl9IGVsc2UKLQkJLyogUmVhZC1vbmx5IGZyb20gYWxsIGFnZW50cyAqLwotCQloaWdoIHw9IDB4MDAwMDAwMTg7Ci0KLQkvKgotCSogTm93IHByb2dyYW0gdGhlIHJlZ2lzdGVyIHVzaW5nIHRoZSBMaW5jcm9mdCBtZXNzYWdlCi0JKiBidXMgaW50ZXJmYWNlLgotCSovCi0JcmVzdWx0ID0gcmFyX3NldF9hZGRyKHJhci0+cmFyX2RldiwKLQkJCQkyICogaWR4LCBsb3cpOwotCi0JaWYgKHJlc3VsdCA9PSAwKQotCQlyZXN1bHQgPSByYXJfc2V0X2FkZHIocmFyLT5yYXJfZGV2LAotCQkJCTIgKiBpZHggKyAxLCBoaWdoKTsKLQotCXJldHVybiByZXN1bHQ7Ci19Ci1FWFBPUlRfU1lNQk9MKHJhcl9sb2NrKTsKLQotLyoqCi0gKglyZWdpc3Rlcl9yYXIJCS0JcmVnaXN0ZXIgYSBSQVIgaGFuZGxlcgotICoJQG51bTogUkFSIHdlIHdpc2ggdG8gcmVnaXN0ZXIgZm9yCi0gKglAY2FsbGJhY2s6IGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBSQVIgc3VwcG9ydCBpcyBhdmFpbGFibGUKLSAqCUBkYXRhOiBkYXRhIHRvIHBhc3MgdG8gdGhpcyBmdW5jdGlvbgotICoKLSAqCVRoZSByZWdpc3Rlcl9yYXIgZnVuY3Rpb24gaXMgdG8gdXNlZCBieSBvdGhlciBkZXZpY2UgZHJpdmVycwotICoJdG8gZW5zdXJlIHRoYXQgdGhpcyBkcml2ZXIgaXMgcmVhZHkuIEFzIHdlIGNhbm5vdCBiZSBzdXJlIG9mCi0gKgl0aGUgY29tcGlsZS9leGVjdXRlIG9yZGVyIG9mIGRyaXZlcnMgaW4gdGhlciBrZXJuZWwsIGl0IGlzCi0gKgliZXN0IHRvIGdpdmUgdGhpcyBkcml2ZXIgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdoZW4KLSAqCWl0IGlzIHJlYWR5IHRvIGdpdmUgb3V0IGFkZHJlc3Nlcy4gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uCi0gKgl3b3VsZCBoYXZlIHRob3NlIHN0ZXBzIHRoYXQgY29udGludWUgdGhlIGluaXRpYWxpemF0aW9uIG9mCi0gKglhIGRyaXZlciB0aGF0IGRvIHJlcXVpcmUgYSB2YWxpZCBSQVIgYWRkcmVzcy4gT25lIG9mIHRob3NlCi0gKglzdGVwcyB3b3VsZCBiZSB0byBjYWxsIHJhcl9nZXRfYWRkcmVzcygpCi0gKgotICoJVGhpcyBmdW5jdGlvbiByZXR1cm4gMCBvbiBzdWNjZXNzIGFuIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KLSAqLwotaW50IHJlZ2lzdGVyX3JhcihpbnQgbnVtLCBpbnQgKCpjYWxsYmFjaykodW5zaWduZWQgbG9uZyBkYXRhKSwKLQkJCQkJCQl1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0JLyogRm9yIG5vdyB3ZSBoYXJkY29kZSBhIHNpbmdsZSBSQVIgZGV2aWNlICovCi0Jc3RydWN0IHJhcl9kZXZpY2UgKnJhcjsKLQlzdHJ1Y3QgY2xpZW50ICpjOwotCWludCBpZHg7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQltdXRleF9sb2NrKCZyYXJfbXV0ZXgpOwotCi0JLyogRG8gd2UgaGF2ZSBhIGNsaWVudCBtYXBwaW5nIGZvciB0aGlzIFJBUiBudW1iZXIgPyAqLwotCWMgPSByYXJfdG9fY2xpZW50KG51bSk7Ci0JaWYgKGMgPT0gTlVMTCkgewotCQlyZXR2YWwgPSAtRVJBTkdFOwotCQlnb3RvIGRvbmU7Ci0JfQotCS8qIElzIGl0IGNsYWltZWQgPyAqLwotCWlmIChjLT5idXN5KSB7Ci0JCXJldHZhbCA9IC1FQlVTWTsKLQkJZ290byBkb25lOwotCX0KLQljLT5idXN5ID0gMTsKLQotCS8qIFNlZSBpZiB3ZSBoYXZlIGEgaGFuZGxlciBmb3IgdGhpcyBSQVIgeWV0LCBpZiB3ZSBkbyB0aGVuIGZpcmUgaXQgKi8KLQlyYXIgPSByYXJfdG9fZGV2aWNlKG51bSwgJmlkeCk7Ci0KLQlpZiAocmFyKSB7Ci0JCS8qCi0JCSogaWYgdGhlIGRyaXZlciBhbHJlYWR5IHJlZ2lzdGVyZWQsIHRoZW4gd2UgY2FuIHNpbXBseQotCQkqIGNhbGwgdGhlIGNhbGxiYWNrIHJpZ2h0IG5vdwotCQkqLwotCQkoKmNhbGxiYWNrKShkYXRhKTsKLQkJZ290byBkb25lOwotCX0KLQotCS8qIEFycmFuZ2UgdG8gYmUgY2FsbGVkIGJhY2sgd2hlbiB0aGUgaGFyZHdhcmUgaXMgZm91bmQgKi8KLQljLT5jYWxsYmFjayA9IGNhbGxiYWNrOwotCWMtPmRyaXZlcl9wcml2ID0gZGF0YTsKLWRvbmU6Ci0JbXV0ZXhfdW5sb2NrKCZyYXJfbXV0ZXgpOwotCXJldHVybiByZXR2YWw7Ci19Ci1FWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX3Jhcik7Ci0KLS8qKgotICoJdW5yZWdpc3Rlcl9yYXIJLQlyZWxlYXNlIGEgUkFSIGFsbG9jYXRpb24KLSAqCUBudW06IFJBUiBudW1iZXIKLSAqCi0gKglSZWxlYXNlcyBhIFJBUiBhbGxvY2F0aW9uLCBvciBwZW5kaW5nIGFsbG9jYXRpb24uIElmIGEgY2FsbGJhY2sgaXMKLSAqCXBlbmRpbmcgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgZWl0aGVyIGNvbXBsZXRlIGJlZm9yZSB0aGUgdW5yZWdpc3RlcgotICoJcmV0dXJucyBvciBub3QgYXQgYWxsLgotICovCi0KLXZvaWQgdW5yZWdpc3Rlcl9yYXIoaW50IG51bSkKLXsKLQlzdHJ1Y3QgY2xpZW50ICpjOwotCi0JbXV0ZXhfbG9jaygmcmFyX211dGV4KTsKLQljID0gcmFyX3RvX2NsaWVudChudW0pOwotCWlmIChjID09IE5VTEwgfHwgIWMtPmJ1c3kpCi0JCVdBUk5fT04oMSk7Ci0JZWxzZQotCQljLT5idXN5ID0gMDsKLQltdXRleF91bmxvY2soJnJhcl9tdXRleCk7Ci19Ci1FWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfcmFyKTsKLQotLyoqCi0gKglyYXJfY2FsbGJhY2sJCS0JUHJvY2VzcyBjYWxsYmFja3MKLSAqCUByYXI6IG5ldyBSQVIgZGV2aWNlCi0gKgotICoJUHJvY2VzcyB0aGUgY2FsbGJhY2tzIGZvciBhIG5ld2x5IGZvdW5kIFJBUiBkZXZpY2UuCi0gKi8KLQotc3RhdGljIHZvaWQgcmFyX2NhbGxiYWNrKHN0cnVjdCByYXJfZGV2aWNlICpyYXIpCi17Ci0Jc3RydWN0IGNsaWVudCAqYyA9ICZyYXItPmNsaWVudFswXTsKLQlpbnQgaTsKLQotCW11dGV4X2xvY2soJnJhcl9tdXRleCk7Ci0KLQlyYXItPnJlZ2lzdGVyZWQgPSAxOwkvKiBFbnN1cmUgbm8gbW9yZSBjYWxsYmFja3MgcXVldWUgKi8KLQotCWZvciAoaSA9IDA7IGkgPCBNUlNUX05VTV9SQVI7IGkrKykgewotCQlpZiAoYy0+Y2FsbGJhY2sgJiYgYy0+YnVzeSkgewotCQkJYy0+Y2FsbGJhY2soYy0+ZHJpdmVyX3ByaXYpOwotCQkJYy0+Y2FsbGJhY2sgPSBOVUxMOwotCQl9Ci0JCWMrKzsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZyYXJfbXV0ZXgpOwotfQotCi0vKioKLSAqCXJhcl9wcm9iZQkJLQlQQ0kgcHJvYmUgY2FsbGJhY2sKLSAqCUBkZXY6IFBDSSBkZXZpY2UKLSAqCUBpZDogbWF0Y2hpbmcgZW50cnkgaW4gdGhlIG1hdGNoIHRhYmxlCi0gKgotICoJQSBSQVIgZGV2aWNlIGhhcyBiZWVuIGRpc2NvdmVyZWQuIEluaXRpYWxpc2UgaXQgYW5kIGlmIHN1Y2Nlc3NmdWwKLSAqCXByb2Nlc3MgYW55IHBlbmRpbmcgY2FsbGJhY2tzIHRoYXQgY2FuIG5vdyBiZSBjb21wbGV0ZWQuCi0gKi8KLXN0YXRpYyBpbnQgcmFyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKLXsKLQlpbnQgZXJyb3I7Ci0Jc3RydWN0IHJhcl9kZXZpY2UgKnJhcjsKLQotCWRldl9kYmcoJmRldi0+ZGV2LCAiUENJIHByb2JlIHN0YXJ0aW5nXG4iKTsKLQotCXJhciA9IGFsbG9jX3Jhcl9kZXZpY2UoKTsKLQlpZiAocmFyID09IE5VTEwpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQkvKiBFbmFibGUgdGhlIGRldmljZSAqLwotCWVycm9yID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKLQlpZiAoZXJyb3IpIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsCi0JCQkiRXJyb3IgZW5hYmxpbmcgUkFSIHJlZ2lzdGVyIFBDSSBkZXZpY2VcbiIpOwotCQlnb3RvIGVuZF9mdW5jdGlvbjsKLQl9Ci0KLQkvKiBGaWxsIGluIHRoZSByYXJfZGV2aWNlIHN0cnVjdHVyZSAqLwotCXJhci0+cmFyX2RldiA9IHBjaV9kZXZfZ2V0KGRldik7Ci0JcGNpX3NldF9kcnZkYXRhKGRldiwgcmFyKTsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSB0aGUgUkFSIHBhcmFtZXRlcnMsIHdoaWNoIGhhdmUgdG8gYmUgcmV0cmlldmVkCi0JICogdmlhIHRoZSBtZXNzYWdlIGJ1cyBpbnRlcmZhY2UuCi0JICovCi0JZXJyb3IgPSBpbml0X3Jhcl9wYXJhbXMocmFyKTsKLQlpZiAoZXJyb3IpIHsKLQkJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiRXJyb3IgcmV0cmlldmluZyBSQVIgYWRkcmVzc2VzXG4iKTsKLQkJZ290byBlbmRfZnVuY3Rpb247Ci0JfQotCS8qIG5vdyBjYWxsIGFueW9uZSB3aG8gaGFzIHJlZ2lzdGVyZWQgKHVzaW5nIGNhbGxiYWNrcykgKi8KLQlyYXJfY2FsbGJhY2socmFyKTsKLQlyZXR1cm4gMDsKLWVuZF9mdW5jdGlvbjoKLQlmcmVlX3Jhcl9kZXZpY2UocmFyKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJhcl9wY2lfaWRfdGJsW10gPSB7Ci0JeyBQQ0lfVkRFVklDRShJTlRFTCwgMHg0MTEwKSB9LAotCXsgMCB9Ci19OwotCi1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcmFyX3BjaV9pZF90YmwpOwotCi1jb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqbXlfaWRfdGFibGUgPSByYXJfcGNpX2lkX3RibDsKLQotLyogZmllbGQgZm9yIHJlZ2lzdGVyaW5nIGRyaXZlciB0byBQQ0kgZGV2aWNlICovCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcmFyX3BjaV9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAicmFyX3JlZ2lzdGVyX2RyaXZlciIsCi0JLmlkX3RhYmxlID0gcmFyX3BjaV9pZF90YmwsCi0JLnByb2JlID0gcmFyX3Byb2JlLAotCS8qIENhbm5vdCBiZSB1bnBsdWdnZWQgLSBubyByZW1vdmUgKi8KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHJhcl9pbml0X2hhbmRsZXIodm9pZCkKLXsKLQlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcmFyX3BjaV9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgcmFyX2V4aXRfaGFuZGxlcih2b2lkKQotewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcmFyX3BjaV9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChyYXJfaW5pdF9oYW5kbGVyKTsKLW1vZHVsZV9leGl0KHJhcl9leGl0X2hhbmRsZXIpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkludGVsIFJlc3RyaWN0ZWQgQWNjZXNzIFJlZ2lvbiBSZWdpc3RlciBEcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvYXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvYXAuaAppbmRleCAzZjc0NGE1Li5mYWFjODVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2FwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9hcC5oCkBAIC00Miw3ICs0Miw4IEBACiAKIC8qIGFwX3dwYS5jICovCiB2b2lkIFdwYVN0YXRlTWFjaGluZUluaXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJIHN0cnVjdCBydF9zdGF0ZV9tYWNoaW5lICpTbSwgT1VUIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdKTsKKwkJCSBzdHJ1Y3QgcnRfc3RhdGVfbWFjaGluZSAqU20sCisJCQkgT1VUIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdKTsKIAogI2lmZGVmIFJUTVBfTUFDX1VTQgogdm9pZCBCZWFjb25VcGRhdGVFeGVjKHZvaWQgKlN5c3RlbVNwZWNpZmljMSwKQEAgLTYxLDYgKzYyLDcgQEAKIEJPT0xFQU4gTWFjVGFibGVEZWxldGVFbnRyeShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCiAJCQkgICAgdTE2IHdjaWQsIHU4ICpwQWRkcik7CiAKLXN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKk1hY1RhYmxlTG9va3VwKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggKnBBZGRyKTsKK3N0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKk1hY1RhYmxlTG9va3VwKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKKwkJCQkJCQkJdTggKnBBZGRyKTsKIAogI2VuZGlmIC8qIF9fQVBfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NobGlzdC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jaGxpc3QuaAppbmRleCBhZGE2NWU1Li4xMjMxZTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NobGlzdC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY2hsaXN0LmgKQEAgLTczLDM1ICs3MywzMSBAQAogZXh0ZXJuIHN0cnVjdCBydF9jaF9mcmVxX21hcCBDSF9IWl9JRF9NQVBbXTsKIGV4dGVybiBpbnQgQ0hfSFpfSURfTUFQX05VTTsKIAotI2RlZmluZSAgICAgTUFQX0NIQU5ORUxfSURfVE9fS0haKF9jaCwgX2toeikJCQkJCVwKLQkJZG97CQkJCQkJCQkJCQkJCVwKLQkJCWludCBfY2hJZHg7CQkJCQkJCQkJCQlcCi0JCQlmb3IgKF9jaElkeCA9IDA7IF9jaElkeCA8IENIX0haX0lEX01BUF9OVU07IF9jaElkeCsrKVwKLQkJCXsJCQkJCQkJCQkJCQkJXAotCQkJCWlmICgoX2NoKSA9PSBDSF9IWl9JRF9NQVBbX2NoSWR4XS5jaGFubmVsKQkJCVwKLQkJCQl7CQkJCQkJCQkJCQkJXAotCQkJCQkoX2toeikgPSBDSF9IWl9JRF9NQVBbX2NoSWR4XS5mcmVxS0h6ICogMTAwMDsJXAotCQkJCQlicmVhazsJCQkJCQkJCQkJXAotCQkJCX0JCQkJCQkJCQkJCQlcCi0JCQl9CQkJCQkJCQkJCQkJCVwKLQkJCWlmIChfY2hJZHggPT0gQ0hfSFpfSURfTUFQX05VTSkJCQkJCVwKLQkJCQkoX2toeikgPSAyNDEyMDAwOwkJCQkJCQkJCVwKLSAgICAgICAgICAgIH13aGlsZSgwKQorI2RlZmluZSAgICAgTUFQX0NIQU5ORUxfSURfVE9fS0haKF9jaCwgX2toeikJCVwKKwkJZG8gewkJCQkJCQlcCisJCQlpbnQgX2NoSWR4OwkJCQkJXAorCQkJZm9yIChfY2hJZHggPSAwOyBfY2hJZHggPCBDSF9IWl9JRF9NQVBfTlVNOyBfY2hJZHgrKykge1wKKwkJCQlpZiAoKF9jaCkgPT0gQ0hfSFpfSURfTUFQW19jaElkeF0uY2hhbm5lbCkgeyBcCisJCQkJCShfa2h6KSA9IENIX0haX0lEX01BUFtfY2hJZHhdLmZyZXFLSHogKiAxMDAwO1wKKwkJCQkJYnJlYWs7CQkJCVwKKwkJCQl9CQkJCQlcCisJCQl9CQkJCQkJXAorCQkJaWYgKF9jaElkeCA9PSBDSF9IWl9JRF9NQVBfTlVNKQlcCisJCQkJKF9raHopID0gMjQxMjAwMDsJCVwKKwkJfSB3aGlsZSAoMCkKIAogI2RlZmluZSAgICAgTUFQX0tIWl9UT19DSEFOTkVMX0lEKF9raHosIF9jaCkgICAgICAgICAgICAgICAgIFwKLQkJZG97CQkJCQkJCQkJCQkJCVwKLQkJCWludCBfY2hJZHg7CQkJCQkJCQkJCQlcCi0JCQlmb3IgKF9jaElkeCA9IDA7IF9jaElkeCA8IENIX0haX0lEX01BUF9OVU07IF9jaElkeCsrKVwKLQkJCXsJCQkJCQkJCQkJCQkJXAotCQkJCWlmICgoX2toeikgPT0gQ0hfSFpfSURfTUFQW19jaElkeF0uZnJlcUtIeikJCQlcCi0JCQkJewkJCQkJCQkJCQkJCVwKLQkJCQkJKF9jaCkgPSBDSF9IWl9JRF9NQVBbX2NoSWR4XS5jaGFubmVsOwkJCVwKLQkJCQkJYnJlYWs7CQkJCQkJCQkJCVwKLQkJCQl9CQkJCQkJCQkJCQkJXAotCQkJfQkJCQkJCQkJCQkJCQlcCi0JCQlpZiAoX2NoSWR4ID09IENIX0haX0lEX01BUF9OVU0pCQkJCQlcCi0JCQkJKF9jaCkgPSAxOwkJCQkJCQkJCQkJXAotCQl9d2hpbGUoMCkKKwkJZG8gewkJCQkJCQlcCisJCQlpbnQgX2NoSWR4OwkJCQlcCisJCQlmb3IgKF9jaElkeCA9IDA7IF9jaElkeCA8IENIX0haX0lEX01BUF9OVU07IF9jaElkeCsrKSB7XAorCQkJCWlmICgoX2toeikgPT0gQ0hfSFpfSURfTUFQW19jaElkeF0uZnJlcUtIeikge1wKKwkJCQkJKF9jaCkgPSBDSF9IWl9JRF9NQVBbX2NoSWR4XS5jaGFubmVsOyBcCisJCQkJCWJyZWFrOwkJCVwKKwkJCQl9CQkJCQlcCisJCQl9CQkJCQkJXAorCQkJaWYgKF9jaElkeCA9PSBDSF9IWl9JRF9NQVBfTlVNKQkJCVwKKwkJCQkoX2NoKSA9IDE7CQkJCVwKKwkJfSB3aGlsZSAoMCkKIAogdm9pZCBCdWlsZENoYW5uZWxMaXN0RXgoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX3dwYS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX3dwYS5jCmluZGV4IGMxNmYzNzYuLjk0MTRhYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV93cGEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fd3BhLmMKQEAgLTQyNyw3ICs0MjcsNyBAQAogLyoKICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIERlc2NyaXB0aW9uOgotICAgICAgICBUaGlzIGlzIGEgZnVuY3Rpb24gdG8gaW5pdGlsaXplIDQtd2F5IGhhbmRzaGFrZQorICAgICAgICBUaGlzIGlzIGEgZnVuY3Rpb24gdG8gaW5pdGlhbGl6ZSA0LXdheSBoYW5kc2hha2UKIAogICAgIFJldHVybjoKIApAQCAtODY3LDcgKzg2Nyw3IEBACiAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICBEZXNjcmlwdGlvbjoKICAgICAgICAgV2hlbiByZWNlaXZpbmcgdGhlIGxhc3QgcGFja2V0IG9mIDQtd2F5IHBhaXJ3aXNla2V5IGhhbmRzaGFrZS4KLSAgICAgICAgSW5pdGlsaXplIDItd2F5IGdyb3Vwa2V5IGhhbmRzaGFrZSBmb2xsb3dpbmcuCisgICAgICAgIEluaXRpYWxpemUgMi13YXkgZ3JvdXBrZXkgaGFuZHNoYWtlIGZvbGxvd2luZy4KICAgICBSZXR1cm46CiAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9ydG1wX3RpbWVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9ydG1wX3RpbWVyLmMKaW5kZXggNDJlNDdkOS4uYWI1MjA5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vcnRtcF90aW1lci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3J0bXBfdGltZXIuYwpAQCAtMTQzLDggKzE0Myw4IEBACiAJc3RydWN0IHJ0X3J0bXBfb3NfdGFzayAqcFRhc2s7CiAJc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkOwogCi0JcFRhc2sgPSAoc3RydWN0IHJ0X3J0bXBfb3NfdGFzayAqKUNvbnRleHQ7Ci0JcEFkID0gKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKilwVGFzay0+cHJpdjsKKwlwVGFzayA9IENvbnRleHQ7CisJcEFkID0gcFRhc2stPnByaXY7CiAKIAlSdG1wT1NUYXNrQ3VzdG9taXplKHBUYXNrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9tbG1lLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL21sbWUuaAppbmRleCA5OWM5MzYyLi4wMTQxNGMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL21sbWUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL21sbWUuaApAQCAtMzEsNyArMzEsNyBAQAogCiAJUmV2aXNpb24gSGlzdG9yeToKIAlXaG8JCQlXaGVuCQkJV2hhdAotCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAlKb2huIENoYW5nCTIwMDMtMDgtMjgJCUNyZWF0ZWQKIAlKb2huIENoYW5nICAyMDA0LTA5LTA2ICAgICAgbW9kaWZpZWQgZm9yIFJUMjYwMAogCkBAIC01MCw3ICs1MCw3IEBACiAjZGVmaW5lIE1MTUVfVEFTS19FWEVDX0lOVFYgICAgICAgICAxMDAvKjIwMCovCS8qICovCiAjZGVmaW5lIExFQURfVElNRSAgICAgICAgICAgICAgICAgICA1CiAjZGVmaW5lIE1MTUVfVEFTS19FWEVDX01VTFRJUExFICAgICAgIDEwICAvKjUqLwkvKiBNTE1FX1RBU0tfRVhFQ19NVUxUSVBMRSAqIE1MTUVfVEFTS19FWEVDX0lOVFYgPSAxIHNlYyAqLwotI2RlZmluZSBSRU9SREVSX0VYRUNfSU5UViAgICAgICAgIAkxMDAJLyogMC4xIHNlYyAqLworI2RlZmluZSBSRU9SREVSX0VYRUNfSU5UVgkJMTAwCS8qIDAuMSBzZWMgKi8KIAogLyogVGhlIGRlZmluaXRpb24gb2YgUmFkYXIgZGV0ZWN0aW9uIGR1cmF0aW9uIHJlZ2lvbiAqLwogI2RlZmluZSBDRQkJMApAQCAtNjAsNyArNjAsNyBAQAogI2RlZmluZSBKQVBfVzU2CTQKICNkZWZpbmUgTUFYX1JEX1JFR0lPTiA1CiAKLSNkZWZpbmUgQkVBQ09OX0xPU1RfVElNRSAgICAgICAgICAgIDQgKiBPU19IWgkvKiAyMDQ4IG1zZWMgPSAyIHNlYyAqLworI2RlZmluZSBCRUFDT05fTE9TVF9USU1FICAgICAgICAgICAgKDQgKiBPU19IWikJLyogMjA0OCBtc2VjID0gMiBzZWMgKi8KIAogI2RlZmluZSBETFNfVElNRU9VVCAgICAgICAgICAgICAgICAgMTIwMAkvKiB1bml0OiBtc2VjICovCiAjZGVmaW5lIEFVVEhfVElNRU9VVCAgICAgICAgICAgICAgICAzMDAJLyogdW5pdDogbXNlYyAqLwpAQCAtMTE5LDggKzExOSw4IEBACiAjZGVmaW5lIE1BQ19BRERSX0lTX0dST1VQKEFkZHIpICAgICAgICgoKEFkZHJbMF0pICYgMHgwMSkpCiAjZGVmaW5lIE1BQ19BRERSX0hBU0goQWRkcikgICAgICAgICAgICAoQWRkclswXSBeIEFkZHJbMV0gXiBBZGRyWzJdIF4gQWRkclszXSBeIEFkZHJbNF0gXiBBZGRyWzVdKQogI2RlZmluZSBNQUNfQUREUl9IQVNIX0lOREVYKEFkZHIpICAgICAgKE1BQ19BRERSX0hBU0goQWRkcikgJSBIQVNIX1RBQkxFX1NJWkUpCi0jZGVmaW5lIFRJRF9NQUNfSEFTSChBZGRyLFRJRCkgICAgICAgICAgICAoVElEXkFkZHJbMF0gXiBBZGRyWzFdIF4gQWRkclsyXSBeIEFkZHJbM10gXiBBZGRyWzRdIF4gQWRkcls1XSkKLSNkZWZpbmUgVElEX01BQ19IQVNIX0lOREVYKEFkZHIsVElEKSAgICAgIChUSURfTUFDX0hBU0goQWRkcixUSUQpICUgSEFTSF9UQUJMRV9TSVpFKQorI2RlZmluZSBUSURfTUFDX0hBU0goQWRkciwgVElEKSAgICAgICAgICAgIChUSUReQWRkclswXSBeIEFkZHJbMV0gXiBBZGRyWzJdIF4gQWRkclszXSBeIEFkZHJbNF0gXiBBZGRyWzVdKQorI2RlZmluZSBUSURfTUFDX0hBU0hfSU5ERVgoQWRkciwgVElEKSAgICAgIChUSURfTUFDX0hBU0goQWRkciwgVElEKSAlIEhBU0hfVEFCTEVfU0laRSkKIAogLyogTEVEIENvbnRyb2wgKi8KIC8qIGFzc29pYXRpb24gT04uIG9uZSBMRUQgT04uIGFub3RoZXIgYmxpbmtpbmcgd2hlbiBUWCwgT0ZGIHdoZW4gaWRsZSAqLwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAjZGVmaW5lIENBUF9JU19EU1NTX09GRE0oeCkgICAgICAgICAgICAgICgoKHgpICYgMHgyMDAwKSAhPSAwKQogI2RlZmluZSBDQVBfSVNfREVMQVlfQkEoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4NDAwMCkgIT0gMCkJLyogODAyLjExZSBkOSAqLwogCi0jZGVmaW5lIENBUF9HRU5FUkFURShlc3MsaWJzcyxwcml2LHNfcHJlLHNfc2xvdCxzcGVjdHJ1bSkgICgoKGVzcykgPyAweDAwMDEgOiAweDAwMDApIHwgKChpYnNzKSA/IDB4MDAwMiA6IDB4MDAwMCkgfCAoKHByaXYpID8gMHgwMDEwIDogMHgwMDAwKSB8ICgoc19wcmUpID8gMHgwMDIwIDogMHgwMDAwKSB8ICgoc19zbG90KSA/IDB4MDQwMCA6IDB4MDAwMCkgfCAoKHNwZWN0cnVtKSA/IDB4MDEwMCA6IDB4MDAwMCkpCisjZGVmaW5lIENBUF9HRU5FUkFURShlc3MsIGlic3MsIHByaXYsIHNfcHJlLCBzX3Nsb3QsIHNwZWN0cnVtKSAgKCgoZXNzKSA/IDB4MDAwMSA6IDB4MDAwMCkgfCAoKGlic3MpID8gMHgwMDAyIDogMHgwMDAwKSB8ICgocHJpdikgPyAweDAwMTAgOiAweDAwMDApIHwgKChzX3ByZSkgPyAweDAwMjAgOiAweDAwMDApIHwgKChzX3Nsb3QpID8gMHgwNDAwIDogMHgwMDAwKSB8ICgoc3BlY3RydW0pID8gMHgwMTAwIDogMHgwMDAwKSkKIAogI2RlZmluZSBFUlBfSVNfTk9OX0VSUF9QUkVTRU5UKHgpICAgICAgICAoKCh4KSAmIDB4MDEpICE9IDApCS8qIDgwMi4xMWcgKi8KICNkZWZpbmUgRVJQX0lTX1VTRV9QUk9URUNUSU9OKHgpICAgICAgICAgKCgoeCkgJiAweDAyKSAhPSAwKQkvKiA4MDIuMTFnICovCkBAIC0xNTQsOSArMTU0LDkgQEAKICNkZWZpbmUgRFJTX1RYX1FVQUxJVFlfV09SU1RfQk9VTkQgICAgICAgOAkvKiAzICAvLyBqdXN0IHRlc3QgYnkgZ2FyeSAqLwogI2RlZmluZSBEUlNfUEVOQUxUWSAgICAgICAgICAgICAgICAgICAgICA4CiAKLSNkZWZpbmUgQkFfTk9UVVNFIAkyCisjZGVmaW5lIEJBX05PVFVTRQkyCiAvKkJBIFBvbGljeSBzdWJmaWxlZCB2YWx1ZSBpbiBBRERCQSBmcmFtZSAqLwotI2RlZmluZSBJTU1FRF9CQSAJMQorI2RlZmluZSBJTU1FRF9CQQkxCiAjZGVmaW5lIERFTEFZX0JBCTAKIAogLyogQkEgSW5pdGlhdG9yIHN1YmZpZWxkIGluIERFTEJBIGZyYW1lICovCkBAIC0xNzYsOCArMTc2LDcgQEAKIAogLyogcmVzZXQgYWxsIE9uZVNlY1R4IGNvdW50ZXJzICovCiAjZGVmaW5lIFJFU0VUX09ORV9TRUNfVFhfQ05UKF9fcEVudHJ5KSBcCi1pZiAoKChfX3BFbnRyeSkpICE9IE5VTEwpIFwKLXsgXAoraWYgKCgoX19wRW50cnkpKSAhPSBOVUxMKSB7IFwKIAkoX19wRW50cnkpLT5PbmVTZWNUeFJldHJ5T2tDb3VudCA9IDA7IFwKIAkoX19wRW50cnkpLT5PbmVTZWNUeEZhaWxDb3VudCA9IDA7IFwKIAkoX19wRW50cnkpLT5PbmVTZWNUeE5vUmV0cnlPa0NvdW50ID0gMDsgXApAQCAtODQ2LDcgKzg0NSw3IEBACiAJc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSBFbnRyeVtNQVhfTEVOX09GX01MTUVfUVVFVUVdOwogfTsKIAotdHlwZWRlZiB2b2lkKCpTVEFURV9NQUNISU5FX0ZVTkMpICh2b2lkICogQWRhcHRvciwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Cit0eXBlZGVmIHZvaWQoKlNUQVRFX01BQ0hJTkVfRlVOQykgKHZvaWQgKkFkYXB0b3IsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pOwogCiBzdHJ1Y3QgcnRfc3RhdGVfbWFjaGluZSB7CiAJdW5zaWduZWQgbG9uZyBCYXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5jCmluZGV4IDAwMjliMmQuLjY1MzY5NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmMKQEAgLTEwMTUsNyArMTAxNSw3IEBACiAJc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkOwogCWludCByZXQgPSBORElTX1NUQVRVU19GQUlMVVJFOwogCi0JcEFkID0gKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKilwVGFzay0+cHJpdjsKKwlwQWQgPSBwVGFzay0+cHJpdjsKIAogI2lmZGVmIEtUSFJFQURfU1VQUE9SVAogCWlmIChwVGFzay0+a3RocmVhZF90YXNrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0bXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oCmluZGV4IDgyYjZlNzguLjI4MjkzNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oCkBAIC0yNTExLDcgKzI1MTEsNyBAQAogCQkgICB1OCBUSUQsCiAJCSAgIHU4IFR4UmF0ZSwKIAkJICAgdTggVHhvcG1vZGUsCi0JCSAgIElOIEJPT0xFQU4gQ2ZBY2ssIElOIEhUVFJBTlNNSVRfU0VUVElORyAqIHBUcmFuc21pdCk7CisJCSAgIElOIEJPT0xFQU4gQ2ZBY2ssIElOIEhUVFJBTlNNSVRfU0VUVElORyAqcFRyYW5zbWl0KTsKIAogdm9pZCBSVE1QV3JpdGVUeFdJX0RhdGEoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAogCQkJc3RydWN0IHJ0X3R4d2kgKnBUeFdJLCBzdHJ1Y3QgcnRfdHhfYmxrICpwVHhCbGspOwpAQCAtMzA1OSw3ICszMDU5LDcgQEAKIAkJCQkgICAgdTE2ICpwQmVhY29uUGVyaW9kLAogCQkJCSAgICB1OCAqcENoYW5uZWwsCiAJCQkJICAgIHU4ICpwTmV3Q2hhbm5lbCwKLQkJCQkgICAgT1VUIExBUkdFX0lOVEVHRVIgKiBwVGltZXN0YW1wLAorCQkJCSAgICBPVVQgTEFSR0VfSU5URUdFUiAqcFRpbWVzdGFtcCwKIAkJCQkgICAgc3RydWN0IHJ0X2NmX3Bhcm0gKnBDZlBhcm0sCiAJCQkJICAgIHUxNiAqcEF0aW1XaW4sCiAJCQkJICAgIHUxNiAqcENhcGFiaWxpdHlJbmZvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC91c2JfbWFpbl9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvdXNiX21haW5fZGV2LmMKaW5kZXggNjc0NzY5ZC4uYTBmZTMxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC91c2JfbWFpbl9kZXYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3VzYl9tYWluX2Rldi5jCkBAIC02NCw2ICs2NCw3IEBACiAJe1VTQl9ERVZJQ0UoMHgxNEIyLCAweDNDMDcpfSwJLyogQUwgKi8KIAl7VVNCX0RFVklDRSgweDA1MEQsIDB4ODA1Myl9LAkvKiBCZWxraW4gKi8KIAl7VVNCX0RFVklDRSgweDA1MEQsIDB4ODI1Qil9LAkvKiBCZWxraW4gKi8KKwl7VVNCX0RFVklDRSgweDA1MEQsIDB4OTM1Qil9LAkvKiBCZWxraW4gRjZENDA1MCB2MiAqLwogCXtVU0JfREVWSUNFKDB4MTRCMiwgMHgzQzIzKX0sCS8qIEFpcmxpbmsgKi8KIAl7VVNCX0RFVklDRSgweDE0QjIsIDB4M0MyNyl9LAkvKiBBaXJsaW5rICovCiAJe1VTQl9ERVZJQ0UoMHgwN0FBLCAweDAwMkYpfSwJLyogQ29yZWdhICovCkBAIC00MjIsOCArNDIzLDggQEAKIAlpbnQgc3RhdHVzOwogCXN0YXR1cyA9IDA7CiAKLQlwVGFzayA9IChzdHJ1Y3QgcnRfcnRtcF9vc190YXNrICopQ29udGV4dDsKLQlwQWQgPSAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqKXBUYXNrLT5wcml2OworCXBUYXNrID0gQ29udGV4dDsKKwlwQWQgPSBwVGFzay0+cHJpdjsKIAogCVJ0bXBPU1Rhc2tDdXN0b21pemUocFRhc2spOwogCkBAIC00OTEsOCArNDkyLDggQEAKIAlpbnQgc3RhdHVzOwogCXN0YXR1cyA9IDA7CiAKLQlwVGFzayA9IChzdHJ1Y3QgcnRfcnRtcF9vc190YXNrICopQ29udGV4dDsKLQlwQWQgPSAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqKXBUYXNrLT5wcml2OworCXBUYXNrID0gQ29udGV4dDsKKwlwQWQgPSBwVGFzay0+cHJpdjsKIAogCVJ0bXBPU1Rhc2tDdXN0b21pemUocFRhc2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL21kNC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9tZDQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNmYjYzNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL21kNC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKi8KLQotI2lmbmRlZiBfX01ENF9IX18KLSNkZWZpbmUgX19NRDRfSF9fCi0KLS8qIE1ENCBjb250ZXh0LiAqLwotdHlwZWRlZglzdHJ1Y3QJX01ENF9DVFhfCXsKLQl1bnNpZ25lZCBsb25nCXN0YXRlWzRdOyAgICAgICAgLyogc3RhdGUgKEFCQ0QpICovCi0JdW5zaWduZWQgbG9uZwljb3VudFsyXTsgICAgICAgIC8qIG51bWJlciBvZiBiaXRzLCBtb2R1bG8gMl42NCAobHNiIGZpcnN0KSAqLwotCXU4CWJ1ZmZlcls2NF07ICAgICAgLyogaW5wdXQgYnVmZmVyICovCi19CU1ENF9DVFg7Ci0KLXZvaWQgTUQ0SW5pdChNRDRfQ1RYICopOwotdm9pZCBNRDRVcGRhdGUoTUQ0X0NUWCAqLCB1OCAqLCBVSU5UKTsKLXZvaWQgTUQ0RmluYWwodTggWzE2XSwgTUQ0X0NUWCAqKTsKLQotI2VuZGlmIC8qX19NRDRfSF9fKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvS2NvbmZpZwppbmRleCAxNTVhNzhlLi4xYjMxMDNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9LY29uZmlnCkBAIC00LDYgKzQsNyBAQAogCXNlbGVjdCBXSVJFTEVTU19FWFQKIAlzZWxlY3QgV0VYVF9QUklWCiAJc2VsZWN0IEVFUFJPTV85M0NYNgorCXNlbGVjdCBDUllQVE8KIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCiAJICBJZiBidWlsdCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWQgcjgxODdzZS5rby4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL0tjb25maWcKaW5kZXggMmFlMzc0NS4uMmU2NGIyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL0tjb25maWcKQEAgLTMsNSArMyw2IEBACiAJZGVwZW5kcyBvbiBQQ0kgJiYgV0xBTgogCXNlbGVjdCBXSVJFTEVTU19FWFQKIAlzZWxlY3QgV0VYVF9QUklWCisJc2VsZWN0IENSWVBUTwogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvZG90MTFkLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2RvdDExZC5jCmluZGV4IDkwOGY2MDUuLjZiYmYwOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvZG90MTFkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9kb3QxMWQuYwpAQCAtMjE4LDIyICsyMTgsNCBAQAogCiAJcmV0dXJuIGRlZmF1bHRfY2huOwogfQotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsMCkpCi0vL0VYUE9SVF9TWU1CT0woRG90MTFkX0luaXQpOwotLy9FWFBPUlRfU1lNQk9MKERvdDExZF9SZXNldCk7Ci0vL0VYUE9SVF9TWU1CT0woRG90MTFkX1VwZGF0ZUNvdW50cnlJZSk7Ci0vL0VYUE9SVF9TWU1CT0woRE9UMTFEX0dldE1heFR4UHdySW5EYm0pOwotLy9FWFBPUlRfU1lNQk9MKERPVDExRF9TY2FuQ29tcGxldGUpOwotLy9FWFBPUlRfU1lNQk9MKElzTGVnYWxDaGFubmVsKTsKLS8vRVhQT1JUX1NZTUJPTChUb0xlZ2FsQ2hhbm5lbCk7Ci0jZWxzZQotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoRG90MTFkX0luaXQpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoRG90MTFkX1Jlc2V0KTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKERvdDExZF9VcGRhdGVDb3VudHJ5SWUpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoRE9UMTFEX0dldE1heFR4UHdySW5EYm0pOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoRE9UMTFEX1NjYW5Db21wbGV0ZSk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhJc0xlZ2FsQ2hhbm5lbCk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhUb0xlZ2FsQ2hhbm5lbCk7Ci0jZW5kaWYKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTEuaAppbmRleCA1MDcyOGY2Li5kZGE2NzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExLmgKQEAgLTI3LDEyICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+ICAgLyogQVJSQVlfU0laRSAqLwogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApKQogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KLSNlbHNlCi0jaW5jbHVkZSA8bGludXgvamZmcy5oPgotI2luY2x1ZGUgPGxpbnV4L3RxdWV1ZS5oPgotI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgpAQCAtNDQsMTIgKzM5LDYgQEAKICNpbmNsdWRlICJydGw4MTl4X0JBLmgiCiAjaW5jbHVkZSAicnRsODE5eF9UUy5oIgogCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkpCi0jaWZuZGVmIGJvb2wKLXR5cGVkZWYgZW51bXtmYWxzZSA9IDAsIHRydWV9IGJvb2w7Ci0jZW5kaWYKLSNlbmRpZgotCiAjaWZuZGVmIElXX01PREVfTU9OSVRPUgogI2RlZmluZSBJV19NT0RFX01PTklUT1IgNgogI2VuZGlmCkBAIC00MjgsNDYgKzQxNyw5IEBACiAjZGVmaW5lIElXX1FVQUxfTk9JU0VfVVBEQVRFRCAgMHg0CiAjZW5kaWYKIAotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCi1zdGF0aWMgaW5saW5lIHZvaWQgdHFfaW5pdChzdHJ1Y3QgdHFfc3RydWN0ICogdGFzaywgdm9pZCgqZnVuYykodm9pZCAqKSwgdm9pZCAqZGF0YSkKLXsKLQl0YXNrLT5yb3V0aW5lID0gZnVuYzsKLQl0YXNrLT5kYXRhIAk9IGRhdGE7Ci0JLy90YXNrLT5uZXh0ID0gTlVMTDsKLQlJTklUX0xJU1RfSEVBRCgmdGFzay0+bGlzdCk7Ci0JdGFzay0+c3luYyA9IDA7Ci19Ci0jZW5kaWYKLQogLy8gbGludXggdW5kZXIgMi42LjkgcmVsZWFzZSBtYXkgbm90IHN1cHBvcnQgaXQsIHNvIG1vZGlmeSBpdCBmb3IgY29tbW9uIHVzZQotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsOSkpCi0vLyNkZWZpbmUgTVNFQ1ModCkJKDEwMDAgKiAoKHQpIC8gSFopICsgMTAwMCAqICgodCkgJSBIWikgLyBIWikKLSNkZWZpbmUgTVNFQ1ModCkJKEhaICogKCh0KSAvIDEwMDApICsgKEhaICogKCh0KSAlIDEwMDApKSAvIDEwMDApCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbXNsZWVwX2ludGVycnVwdGlibGVfcnNsKHVuc2lnbmVkIGludCBtc2VjcykKLXsKLSAgICAgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IE1TRUNTKG1zZWNzKSArIDE7Ci0KLSAgICAgICAgIHdoaWxlICh0aW1lb3V0KSB7Ci0gICAgICAgICAgICAgICAgIHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0gICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOwotICAgICAgICAgfQotICAgICAgICAgcmV0dXJuIHRpbWVvdXQ7Ci19Ci0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNCwzMSkpCi1zdGF0aWMgaW5saW5lIHZvaWQgbXNsZWVwKHVuc2lnbmVkIGludCBtc2VjcykKLXsKLSAgICAgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IE1TRUNTKG1zZWNzKSArIDE7Ci0KLSAgICAgICAgIHdoaWxlICh0aW1lb3V0KSB7Ci0gICAgICAgICAgICAgICAgIHNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLSAgICAgICAgICAgICAgICAgdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7Ci0gICAgICAgICB9Ci19Ci0jZW5kaWYKLSNlbHNlCiAjZGVmaW5lIE1TRUNTKHQpIG1zZWNzX3RvX2ppZmZpZXModCkKICNkZWZpbmUgbXNsZWVwX2ludGVycnVwdGlibGVfcnNsICBtc2xlZXBfaW50ZXJydXB0aWJsZQotI2VuZGlmCiAKICNkZWZpbmUgSUVFRTgwMjExX0RBVEFfTEVOCQkyMzA0CiAvKiBNYXhpbXVtIHNpemUgZm9yIHRoZSBNQS1VTklUREFUQSBwcmltaXRpdmUsIDgwMi4xMSBzdGFuZGFyZCBzZWN0aW9uCkBAIC0xNzQ3LDIxICsxNjk5LDYgQEAKICNkZWZpbmUgSUVFRTgwMjExXzUyR0haX0NIQU5ORUxTIChJRUVFODAyMTFfNTJHSFpfTUFYX0NIQU5ORUwgLSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUVFRTgwMjExXzUyR0haX01JTl9DSEFOTkVMICsgMSkKIAotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPD0gS0VSTkVMX1ZFUlNJT04oMiw2LDExKSkKLWV4dGVybiBpbmxpbmUgaW50IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGNvbnN0IHU4ICphZGRyKQotewotICAgICAgICByZXR1cm4gKChhZGRyWzBdICE9IDB4ZmYpICYmICgweDAxICYgYWRkclswXSkpOwotfQotI2VuZGlmCi0KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDw9IEtFUk5FTF9WRVJTSU9OKDIsNiwxMykpCi1leHRlcm4gaW5saW5lIGludCBpc19icm9hZGNhc3RfZXRoZXJfYWRkcihjb25zdCB1OCAqYWRkcikKLXsKLQlyZXR1cm4gKChhZGRyWzBdID09IDB4ZmYpICYmIChhZGRyWzFdID09IDB4ZmYpICYmIChhZGRyWzJdID09IDB4ZmYpICYmICAgXAotCQkoYWRkclszXSA9PSAweGZmKSAmJiAoYWRkcls0XSA9PSAweGZmKSAmJiAoYWRkcls1XSA9PSAweGZmKSk7Ci19Ci0jZW5kaWYKLQogdHlwZWRlZiBzdHJ1Y3QgdHhfcGVuZGluZ190ewogCWludCBmcmFnOwogCXN0cnVjdCBpZWVlODAyMTFfdHhiICp0eGI7CkBAIC0xODM4LDExICsxNzc1LDcgQEAKIAlib29sCQkJCWJJUFNNb2RlQmFja3VwOwogCWJvb2wJCQkJYlN3UmZQcm9jZXNzaW5nOwogCVJUX1JGX1BPV0VSX1NUQVRFCWVJbmFjdGl2ZVBvd2VyU3RhdGU7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAJc3RydWN0IHdvcmtfc3RydWN0IAlJbmFjdGl2ZVBzV29ya0l0ZW07Ci0jZWxzZQotCXN0cnVjdCB0cV9zdHJ1Y3QJSW5hY3RpdmVQc1dvcmtJdGVtOwotI2VuZGlmCiAJc3RydWN0IHRpbWVyX2xpc3QJSW5hY3RpdmVQc1RpbWVyOwogCiAJLy8gUmV0dXJuIHBvaW50IGZvciBqb2luIGFjdGlvbgpAQCAtMjMyOSwzNiArMjI2MiwxNiBAQAogCiAJLyogdXNlZCBpZiBJRUVFX1NPRlRNQUNfQkVBQ09OUyBpcyBzZXQgKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdCBiZWFjb25fdGltZXI7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAgICAgICAgIHN0cnVjdCB3b3JrX3N0cnVjdCBhc3NvY2lhdGVfY29tcGxldGVfd3E7CiAgICAgICAgIHN0cnVjdCB3b3JrX3N0cnVjdCBhc3NvY2lhdGVfcHJvY2VkdXJlX3dxOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjApCiAgICAgICAgIHN0cnVjdCBkZWxheWVkX3dvcmsgc29mdG1hY19zY2FuX3dxOwogICAgICAgICBzdHJ1Y3QgZGVsYXllZF93b3JrIGFzc29jaWF0ZV9yZXRyeV93cTsKIAkgc3RydWN0IGRlbGF5ZWRfd29yayBzdGFydF9pYnNzX3dxOwogCSBzdHJ1Y3QgZGVsYXllZF93b3JrIGh3X3dha2V1cF93cTsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGh3X3NsZWVwX3dxOwotI2Vsc2UKLSAgICAgICAgc3RydWN0IHdvcmtfc3RydWN0IHNvZnRtYWNfc2Nhbl93cTsKLSAgICAgICAgc3RydWN0IHdvcmtfc3RydWN0IGFzc29jaWF0ZV9yZXRyeV93cTsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3RhcnRfaWJzc193cTsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaHdfd2FrZXVwX3dxOwotCXN0cnVjdCB3b3JrX3N0cnVjdCBod19zbGVlcF93cTsKLSNlbmRpZgorCiAgICAgICAgIHN0cnVjdCB3b3JrX3N0cnVjdCB3eF9zeW5jX3NjYW5fd3E7CiAgICAgICAgIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKLSNlbHNlCi0JLyogdXNlZCBmb3IgcGVyaW9kbHkgc2NhbiAqLwotCXN0cnVjdCB0aW1lcl9saXN0IHNjYW5fdGltZXI7Ci0KLQlzdHJ1Y3QgdHFfc3RydWN0IGFzc29jaWF0ZV9jb21wbGV0ZV93cTsKLQlzdHJ1Y3QgdHFfc3RydWN0IGFzc29jaWF0ZV9yZXRyeV93cTsKLQlzdHJ1Y3QgdHFfc3RydWN0IHN0YXJ0X2lic3Nfd3E7Ci0Jc3RydWN0IHRxX3N0cnVjdCBhc3NvY2lhdGVfcHJvY2VkdXJlX3dxOwotCXN0cnVjdCB0cV9zdHJ1Y3Qgc29mdG1hY19zY2FuX3dxOwotCXN0cnVjdCB0cV9zdHJ1Y3Qgd3hfc3luY19zY2FuX3dxOwotCi0jZW5kaWYKICAgICAgICAgLy8gUW9zIHJlbGF0ZWQuIEFkZGVkIGJ5IEFubmllLCAyMDA1LTExLTAxLgogICAgICAgICAvL1NUQV9RT1MgIFN0YVFvczsKIApAQCAtMjU1NywxMSArMjQ3MCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqaWVlZTgwMjExX3ByaXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsMCkKIAlyZXR1cm4gKChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqKW5ldGRldl9wcml2KGRldikpLT5wcml2OwotI2Vsc2UKLQlyZXR1cm4gKChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqKWRldi0+cHJpdiktPnByaXY7Ci0jZW5kaWYKIH0KIAogZXh0ZXJuIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2VtcHR5X2Vzc2lkKGNvbnN0IGNoYXIgKmVzc2lkLCBpbnQgZXNzaWRfbGVuKQpAQCAtMjgxNCwxMSArMjcyMyw3IEBACiAJCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmIpOwogCiAvL2V4dGVybiB2b2lkIGllZWU4MDIxMV93eF9zeW5jX3NjYW5fd3Eoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKIGV4dGVybiB2b2lkIGllZWU4MDIxMV93eF9zeW5jX3NjYW5fd3Eoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLSNlbHNlCi0gZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3d4X3N5bmNfc2Nhbl93cShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci0jZW5kaWYKIAogCiBleHRlcm4gaW50IGllZWU4MDIxMV93eF9zZXRfcmF3dHgoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYwppbmRleCBkNWFhOWFmLi5hZTUwMzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKQEAgLTI0MywyMyArMjQzLDMgQEAKIAlrZnJlZShoY3J5cHQpOwogfQogCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfY3J5cHRfZGVpbml0X2VudHJpZXMpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9jcnlwdF9kZWluaXRfaGFuZGxlcik7Ci0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX2NyeXB0X2RlbGF5ZWRfZGVpbml0KTsKLQotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yZWdpc3Rlcl9jcnlwdG9fb3BzKTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdW5yZWdpc3Rlcl9jcnlwdG9fb3BzKTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMpOwotI2Vsc2UKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9jcnlwdF9kZWluaXRfZW50cmllcyk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfY3J5cHRfZGVpbml0X2hhbmRsZXIpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX2NyeXB0X2RlbGF5ZWRfZGVpbml0KTsKLQotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3JlZ2lzdGVyX2NyeXB0b19vcHMpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3VucmVnaXN0ZXJfY3J5cHRvX29wcyk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMpOwotI2VuZGlmCi0KLS8vbW9kdWxlX2luaXQoaWVlZTgwMjExX2NyeXB0b19pbml0KTsKLS8vbW9kdWxlX2V4aXQoaWVlZTgwMjExX2NyeXB0b19kZWluaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmgKaW5kZXggYTg0ZGY0Yi4uY2E3ZGQwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5oCkBAIC04MiwxMiArODIsNCBAQAogdm9pZCBpZWVlODAyMTFfY3J5cHRfZGVpbml0X2hhbmRsZXIodW5zaWduZWQgbG9uZyk7CiB2b2lkIGllZWU4MDIxMV9jcnlwdF9kZWxheWVkX2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKIAkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhICoqY3J5cHQpOwotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCi0jZGVmaW5lIG9mZnNldF9pbl9wYWdlKHApICgodW5zaWduZWQgbG9uZykocCkgJiB+UEFHRV9NQVNLKQotI2VuZGlmCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNCwzMSkpCi0jZGVmaW5lIGNyeXB0b19hbGxvY190Zm0gY3J5cHRvX2FsbG9jX3RmbV9yc2wKLSNkZWZpbmUgY3J5cHRvX2ZyZWVfdGZtIGNyeXB0b19mcmVlX3RmbV9yc2wKLSNlbmRpZgotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X2NjbXAuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X2NjbXAuYwppbmRleCA3MTY1YzRjLi5hNGUyMWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF9jY21wLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfY2NtcC5jCkBAIC0yNCwxOCArMjQsOSBAQAogCiAjaW5jbHVkZSAiaWVlZTgwMjExLmgiCiAKLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApKQotI2luY2x1ZGUgInJ0bF9jcnlwdG8uaCIKLSNlbHNlCiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+Ci0jZW5kaWYKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKLSAgICAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+Ci0jZWxzZQogICAgICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgotI2VuZGlmCi0vLyNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KIAogTU9EVUxFX0FVVEhPUigiSm91bmkgTWFsaW5lbiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJIb3N0IEFQIGNyeXB0OiBDQ01QIik7CkBAIC03NSwyMSArNjYsNyBAQAogdm9pZCBpZWVlODAyMTFfY2NtcF9hZXNfZW5jcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAogCQkJICAgICBjb25zdCB1OCBwdFsxNl0sIHU4IGN0WzE2XSkKIHsKLSNpZigoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIxKSkgJiYgKCFPUEVOU1VTRV9TTEVEKSkKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc3JjLCBkc3Q7Ci0KLQlzcmMucGFnZSA9IHZpcnRfdG9fcGFnZShwdCk7Ci0Jc3JjLm9mZnNldCA9IG9mZnNldF9pbl9wYWdlKHB0KTsKLQlzcmMubGVuZ3RoID0gQUVTX0JMT0NLX0xFTjsKLQotCWRzdC5wYWdlID0gdmlydF90b19wYWdlKGN0KTsKLQlkc3Qub2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoY3QpOwotCWRzdC5sZW5ndGggPSBBRVNfQkxPQ0tfTEVOOwotCi0JY3J5cHRvX2NpcGhlcl9lbmNyeXB0KHRmbSwgJmRzdCwgJnNyYywgQUVTX0JMT0NLX0xFTik7Ci0jZWxzZQogCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUoKHZvaWQqKXRmbSwgY3QsIHB0KTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCAqIGllZWU4MDIxMV9jY21wX2luaXQoaW50IGtleV9pZHgpCkBAIC0xMDEsMTQgKzc4LDYgQEAKIAkJZ290byBmYWlsOwogCXByaXYtPmtleV9pZHggPSBrZXlfaWR4OwogCi0jaWYoKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMSkpICYmICghT1BFTlNVU0VfU0xFRCkpCi0JcHJpdi0+dGZtID0gY3J5cHRvX2FsbG9jX3RmbSgiYWVzIiwgMCk7Ci0JaWYgKHByaXYtPnRmbSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJpZWVlODAyMTFfY3J5cHRfY2NtcDogY291bGQgbm90IGFsbG9jYXRlICIKLQkJICAgICAgICJjcnlwdG8gQVBJIGFlc1xuIik7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0gICAgICAgI2Vsc2UKICAgICAgICBwcml2LT50Zm0gPSAodm9pZCopY3J5cHRvX2FsbG9jX2NpcGhlcigiYWVzIiwgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CiAJaWYgKElTX0VSUihwcml2LT50Zm0pKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJpZWVlODAyMTFfY3J5cHRfY2NtcDogY291bGQgbm90IGFsbG9jYXRlICIKQEAgLTExNiwxNyArODUsMTIgQEAKIAkJcHJpdi0+dGZtID0gTlVMTDsKIAkJZ290byBmYWlsOwogCX0KLQkjZW5kaWYKIAlyZXR1cm4gcHJpdjsKIAogZmFpbDoKIAlpZiAocHJpdikgewogCQlpZiAocHJpdi0+dGZtKQotCQkJI2lmKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMSkpCi0JCQljcnlwdG9fZnJlZV90Zm0ocHJpdi0+dGZtKTsKLSAgICAgICAgICAgICAgICAgICAgI2Vsc2UKIAkJCWNyeXB0b19mcmVlX2NpcGhlcigodm9pZCopcHJpdi0+dGZtKTsKLQkJICAgICAgI2VuZGlmCiAJCWtmcmVlKHByaXYpOwogCX0KIApAQCAtMTM4LDExICsxMDIsNyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfY2NtcF9kYXRhICpfcHJpdiA9IHByaXY7CiAJaWYgKF9wcml2ICYmIF9wcml2LT50Zm0pCi0jaWYoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIxKSkKLQkJY3J5cHRvX2ZyZWVfdGZtKF9wcml2LT50Zm0pOwotI2Vsc2UKIAkJY3J5cHRvX2ZyZWVfY2lwaGVyKCh2b2lkKilfcHJpdi0+dGZtKTsKLSNlbmRpZgogCWtmcmVlKHByaXYpOwogfQogCkBAIC01MjgsMTEgKzQ4OCwzIEBACiAJaWVlZTgwMjExX3VucmVnaXN0ZXJfY3J5cHRvX29wcygmaWVlZTgwMjExX2NyeXB0X2NjbXApOwogfQogCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfY2NtcF9udWxsKTsKLSNlbHNlCi1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfY2NtcF9udWxsKTsKLSNlbmRpZgotCi0vL21vZHVsZV9pbml0KGllZWU4MDIxMV9jcnlwdG9fY2NtcF9pbml0KTsKLS8vbW9kdWxlX2V4aXQoaWVlZTgwMjExX2NyeXB0b19jY21wX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jCmluZGV4IDY1ZjQ4ODkuLjE0Y2E2MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3RraXAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMKQEAgLTI0LDE3ICsyNCw4IEBACiAjaW5jbHVkZSAiaWVlZTgwMjExLmgiCiAKIAotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCi0jaW5jbHVkZSAicnRsX2NyeXB0by5oIgotI2Vsc2UKICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KLSNlbmRpZgotLy8jaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQotICAgICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KLSNlbHNlCi0gICAgICAgICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgotI2VuZGlmCisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAKQEAgLTY4LDE3ICs1OSwxMCBAQAogCXUzMiBkb3QxMVJTTkFTdGF0c1RLSVBMb2NhbE1JQ0ZhaWx1cmVzOwogCiAJaW50IGtleV9pZHg7Ci0jaWYoKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjEpKSB8fCAoT1BFTlNVU0VfU0xFRCkpCiAJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnJ4X3RmbV9hcmM0OwogCXN0cnVjdCBjcnlwdG9faGFzaCAqcnhfdGZtX21pY2hhZWw7CiAJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnR4X3RmbV9hcmM0OwogCXN0cnVjdCBjcnlwdG9faGFzaCAqdHhfdGZtX21pY2hhZWw7Ci0jZWxzZQotCXN0cnVjdCBjcnlwdG9fdGZtICp0eF90Zm1fYXJjNDsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdHhfdGZtX21pY2hhZWw7Ci0Jc3RydWN0IGNyeXB0b190Zm0gKnJ4X3RmbV9hcmM0OwotCXN0cnVjdCBjcnlwdG9fdGZtICpyeF90Zm1fbWljaGFlbDsKLSNlbmRpZgogCS8qIHNjcmF0Y2ggYnVmZmVycyBmb3IgdmlydF90b19wYWdlKCkgKGNyeXB0byBBUEkpICovCiAJdTggcnhfaGRyWzE2XSwgdHhfaGRyWzE2XTsKIH07CkBAIC05MSwzNSArNzUsNiBAQAogCWlmIChwcml2ID09IE5VTEwpCiAJCWdvdG8gZmFpbDsKIAlwcml2LT5rZXlfaWR4ID0ga2V5X2lkeDsKLSNpZigoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIxKSkgJiYgKCFPUEVOU1VTRV9TTEVEKSkKLQlwcml2LT50eF90Zm1fYXJjNCA9IGNyeXB0b19hbGxvY190Zm0oImFyYzQiLCAwKTsKLQlpZiAocHJpdi0+dHhfdGZtX2FyYzQgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiaWVlZTgwMjExX2NyeXB0X3RraXA6IGNvdWxkIG5vdCBhbGxvY2F0ZSAiCi0JCQkJImNyeXB0byBBUEkgYXJjNFxuIik7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQlwcml2LT50eF90Zm1fbWljaGFlbCA9IGNyeXB0b19hbGxvY190Zm0oIm1pY2hhZWxfbWljIiwgMCk7Ci0JaWYgKHByaXYtPnR4X3RmbV9taWNoYWVsID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgImllZWU4MDIxMV9jcnlwdF90a2lwOiBjb3VsZCBub3QgYWxsb2NhdGUgIgotCQkJCSJjcnlwdG8gQVBJIG1pY2hhZWxfbWljXG4iKTsKLQkJZ290byBmYWlsOwotCX0KLQotCXByaXYtPnJ4X3RmbV9hcmM0ID0gY3J5cHRvX2FsbG9jX3RmbSgiYXJjNCIsIDApOwotCWlmIChwcml2LT5yeF90Zm1fYXJjNCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJpZWVlODAyMTFfY3J5cHRfdGtpcDogY291bGQgbm90IGFsbG9jYXRlICIKLQkJCQkiY3J5cHRvIEFQSSBhcmM0XG4iKTsKLQkJZ290byBmYWlsOwotCX0KLQotCXByaXYtPnJ4X3RmbV9taWNoYWVsID0gY3J5cHRvX2FsbG9jX3RmbSgibWljaGFlbF9taWMiLCAwKTsKLQlpZiAocHJpdi0+cnhfdGZtX21pY2hhZWwgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiaWVlZTgwMjExX2NyeXB0X3RraXA6IGNvdWxkIG5vdCBhbGxvY2F0ZSAiCi0JCQkJImNyeXB0byBBUEkgbWljaGFlbF9taWNcbiIpOwotCQlnb3RvIGZhaWw7Ci0JfQotI2Vsc2UKIAlwcml2LT50eF90Zm1fYXJjNCA9IGNyeXB0b19hbGxvY19ibGtjaXBoZXIoImVjYihhcmM0KSIsIDAsCiAJCQlDUllQVE9fQUxHX0FTWU5DKTsKIAlpZiAoSVNfRVJSKHByaXYtPnR4X3RmbV9hcmM0KSkgewpAQCAtMTU1LDIyICsxMTAsMTAgQEAKIAkJcHJpdi0+cnhfdGZtX21pY2hhZWwgPSBOVUxMOwogCQlnb3RvIGZhaWw7CiAJfQotI2VuZGlmCiAJcmV0dXJuIHByaXY7CiAKIGZhaWw6CiAJaWYgKHByaXYpIHsKLSNpZigoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIxKSkgJiYgKCFPUEVOU1VTRV9TTEVEKSkKLQkJaWYgKHByaXYtPnR4X3RmbV9taWNoYWVsKQotCQkJY3J5cHRvX2ZyZWVfdGZtKHByaXYtPnR4X3RmbV9taWNoYWVsKTsKLQkJaWYgKHByaXYtPnR4X3RmbV9hcmM0KQotCQkJY3J5cHRvX2ZyZWVfdGZtKHByaXYtPnR4X3RmbV9hcmM0KTsKLQkJaWYgKHByaXYtPnJ4X3RmbV9taWNoYWVsKQotCQkJY3J5cHRvX2ZyZWVfdGZtKHByaXYtPnJ4X3RmbV9taWNoYWVsKTsKLQkJaWYgKHByaXYtPnJ4X3RmbV9hcmM0KQotCQkJY3J5cHRvX2ZyZWVfdGZtKHByaXYtPnJ4X3RmbV9hcmM0KTsKLQotI2Vsc2UKIAkJaWYgKHByaXYtPnR4X3RmbV9taWNoYWVsKQogCQkJY3J5cHRvX2ZyZWVfaGFzaChwcml2LT50eF90Zm1fbWljaGFlbCk7CiAJCWlmIChwcml2LT50eF90Zm1fYXJjNCkKQEAgLTE3OSw3ICsxMjIsNiBAQAogCQkJY3J5cHRvX2ZyZWVfaGFzaChwcml2LT5yeF90Zm1fbWljaGFlbCk7CiAJCWlmIChwcml2LT5yeF90Zm1fYXJjNCkKIAkJCWNyeXB0b19mcmVlX2Jsa2NpcGhlcihwcml2LT5yeF90Zm1fYXJjNCk7Ci0jZW5kaWYKIAkJa2ZyZWUocHJpdik7CiAJfQogCkBAIC0xOTAsMTYgKzEzMiw2IEBACiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfdGtpcF9kZWluaXQodm9pZCAqcHJpdikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3RraXBfZGF0YSAqX3ByaXYgPSBwcml2OwotI2lmKChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjEpKSAmJiAoIU9QRU5TVVNFX1NMRUQpKQotCWlmIChfcHJpdi0+dHhfdGZtX21pY2hhZWwpCi0JCWNyeXB0b19mcmVlX3RmbShfcHJpdi0+dHhfdGZtX21pY2hhZWwpOwotCWlmIChfcHJpdi0+dHhfdGZtX2FyYzQpCi0JCWNyeXB0b19mcmVlX3RmbShfcHJpdi0+dHhfdGZtX2FyYzQpOwotCWlmIChfcHJpdi0+cnhfdGZtX21pY2hhZWwpCi0JCWNyeXB0b19mcmVlX3RmbShfcHJpdi0+cnhfdGZtX21pY2hhZWwpOwotCWlmIChfcHJpdi0+cnhfdGZtX2FyYzQpCi0JCWNyeXB0b19mcmVlX3RmbShfcHJpdi0+cnhfdGZtX2FyYzQpOwotI2Vsc2UKIAlpZiAoX3ByaXYpIHsKIAkJaWYgKF9wcml2LT50eF90Zm1fbWljaGFlbCkKIAkJCWNyeXB0b19mcmVlX2hhc2goX3ByaXYtPnR4X3RmbV9taWNoYWVsKTsKQEAgLTIxMCw3ICsxNDIsNiBAQAogCQlpZiAoX3ByaXYtPnJ4X3RmbV9hcmM0KQogCQkJY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKF9wcml2LT5yeF90Zm1fYXJjNCk7CiAJfQotI2VuZGlmCiAJa2ZyZWUocHJpdik7CiB9CiAKQEAgLTM4MSwxMCArMzEyLDggQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOwogCWNiX2Rlc2MgKnRjYl9kZXNjID0gKGNiX2Rlc2MgKikoc2tiLT5jYiArIE1BWF9ERVZfQUREUl9TSVpFKTsKIAotCSNpZigoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyMSkpIHx8IChPUEVOU1VTRV9TTEVEKSkKIAlzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgZGVzYyA9IHsudGZtID0gdGtleS0+dHhfdGZtX2FyYzR9OwogCWludCByZXQgPSAwOwotCSNlbmRpZgogCXU4IHJjNGtleVsxNl0sICAqaWN2OwogCXUzMiBjcmM7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOwpAQCAtNDQ3LDMyICszNzYsMTQgQEAKIAlpZiAoIXRjYl9kZXNjLT5iSHdTZWMpCiAJewogCQlpY3YgPSBza2JfcHV0KHNrYiwgNCk7Ci0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKIAkJY3JjID0gfmNyYzMyX2xlKH4wLCBwb3MsIGxlbik7Ci0jZWxzZQotCQljcmMgPSB+ZXRoZXJfY3JjX2xlKGxlbiwgcG9zKTsKLSNlbmRpZgogCQlpY3ZbMF0gPSBjcmM7CiAJCWljdlsxXSA9IGNyYyA+PiA4OwogCQlpY3ZbMl0gPSBjcmMgPj4gMTY7CiAJCWljdlszXSA9IGNyYyA+PiAyNDsKLSNpZigoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIxKSkgJiYgKCFPUEVOU1VTRV9TTEVEKSkKLQkJY3J5cHRvX2NpcGhlcl9zZXRrZXkodGtleS0+dHhfdGZtX2FyYzQsIHJjNGtleSwgMTYpOwotCQlzZy5wYWdlID0gdmlydF90b19wYWdlKHBvcyk7Ci0JCXNnLm9mZnNldCA9IG9mZnNldF9pbl9wYWdlKHBvcyk7Ci0JCXNnLmxlbmd0aCA9IGxlbiArIDQ7Ci0JCWNyeXB0b19jaXBoZXJfZW5jcnlwdCh0a2V5LT50eF90Zm1fYXJjNCwgJnNnLCAmc2csIGxlbiArIDQpOwotI2Vsc2UKIAkJY3J5cHRvX2Jsa2NpcGhlcl9zZXRrZXkodGtleS0+dHhfdGZtX2FyYzQsIHJjNGtleSwgMTYpOwotI2lmKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyNCkpCi0JCXNnLnBhZ2UgPSB2aXJ0X3RvX3BhZ2UocG9zKTsKLQkJc2cub2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UocG9zKTsKLQkJc2cubGVuZ3RoID0gbGVuICsgNDsKLSNlbHNlCiAJCXNnX2luaXRfb25lKCZzZywgcG9zLCBsZW4rNCk7Ci0jZW5kaWYKIAkJcmV0PSBjcnlwdG9fYmxrY2lwaGVyX2VuY3J5cHQoJmRlc2MsICZzZywgJnNnLCBsZW4gKyA0KTsKLSNlbmRpZgogCiAJfQogCkBAIC00ODMsMTEgKzM5NCw3IEBACiAJfQogCiAJaWYgKCF0Y2JfZGVzYy0+Ykh3U2VjKQotI2lmKChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjEpKSAmJiAoIU9QRU5TVVNFX1NMRUQpKQotCQlyZXR1cm4gMDsKLQkjZWxzZQogCQlyZXR1cm4gcmV0OwotCSNlbmRpZgogCWVsc2UKICAgICAgICAgCXJldHVybiAwOwogCkBAIC01MDIsOSArNDA5LDcgQEAKIAl1MTYgaXYxNjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOwogCWNiX2Rlc2MgKnRjYl9kZXNjID0gKGNiX2Rlc2MgKikoc2tiLT5jYiArIE1BWF9ERVZfQUREUl9TSVpFKTsKLQkjaWYoKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjEpKSB8fCAoT1BFTlNVU0VfU0xFRCkpCiAJc3RydWN0IGJsa2NpcGhlcl9kZXNjIGRlc2MgPSB7LnRmbSA9IHRrZXktPnJ4X3RmbV9hcmM0fTsKLQkjZW5kaWYKIAl1OCByYzRrZXlbMTZdOwogCXU4IGljdls0XTsKIAl1MzIgY3JjOwpAQCAtNTYzLDIxICs0NjgsOCBAQAogCiAJCXBsZW4gPSBza2ItPmxlbiAtIGhkcl9sZW4gLSAxMjsKIAotI2lmKChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjEpKSAmJiAoIU9QRU5TVVNFX1NMRUQpKQotCQljcnlwdG9fY2lwaGVyX3NldGtleSh0a2V5LT5yeF90Zm1fYXJjNCwgcmM0a2V5LCAxNik7Ci0JCXNnLnBhZ2UgPSB2aXJ0X3RvX3BhZ2UocG9zKTsKLQkJc2cub2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UocG9zKTsKLQkJc2cubGVuZ3RoID0gcGxlbiArIDQ7Ci0JCWNyeXB0b19jaXBoZXJfZGVjcnlwdCh0a2V5LT5yeF90Zm1fYXJjNCwgJnNnLCAmc2csIHBsZW4gKyA0KTsKLSNlbHNlCiAJCWNyeXB0b19ibGtjaXBoZXJfc2V0a2V5KHRrZXktPnJ4X3RmbV9hcmM0LCByYzRrZXksIDE2KTsKLSNpZihMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjQpKQotCQlzZy5wYWdlID0gdmlydF90b19wYWdlKHBvcyk7Ci0JCXNnLm9mZnNldCA9IG9mZnNldF9pbl9wYWdlKHBvcyk7Ci0JCXNnLmxlbmd0aCA9IHBsZW4gKyA0OwotI2Vsc2UKIAkJc2dfaW5pdF9vbmUoJnNnLCBwb3MsIHBsZW4rNCk7Ci0jZW5kaWYKIAkJaWYgKGNyeXB0b19ibGtjaXBoZXJfZGVjcnlwdCgmZGVzYywgJnNnLCAmc2csIHBsZW4gKyA0KSkgewogCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJCXByaW50ayhLRVJOX0RFQlVHICI6IFRLSVA6IGZhaWxlZCB0byBkZWNyeXB0ICIKQEAgLTU4NiwxMyArNDc4LDggQEAKIAkJCX0KIAkJCXJldHVybiAtNzsKIAkJfQotI2VuZGlmCiAKLQkjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKIAkJY3JjID0gfmNyYzMyX2xlKH4wLCBwb3MsIHBsZW4pOwotCSNlbHNlCi0JCWNyYyA9IH5ldGhlcl9jcmNfbGUocGxlbiwgcG9zKTsKLQkjZW5kaWYKIAkJaWN2WzBdID0gY3JjOwogCQlpY3ZbMV0gPSBjcmMgPj4gODsKIAkJaWN2WzJdID0gY3JjID4+IDE2OwpAQCAtNjQxLDQ3ICs1MjgsNiBAQAogfQogCiAKLSNpZigoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIxKSkgJiYgKCFPUEVOU1VTRV9TTEVEKSkKLXN0YXRpYyBpbnQgbWljaGFlbF9taWMoc3RydWN0IGNyeXB0b190Zm0gKiB0Zm1fbWljaGFlbCwgdTggKmtleSwgdTggKmhkciwKLQkJICAgICAgIHU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sIHU4ICptaWMpCi17Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzJdOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjApCi0gICAgICAgIHN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKLSAgICAgICAgaW50IHJldCA9IDA7Ci0jZW5kaWYKLQotCWlmICh0Zm1fbWljaGFlbCA9PSBOVUxMKXsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAibWljaGFlbF9taWM6IHRmbV9taWNoYWVsID09IE5VTExcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXNnWzBdLnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoaGRyKTsKLQlzZ1swXS5vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShoZHIpOwotCXNnWzBdLmxlbmd0aCA9IDE2OwotCi0Jc2dbMV0ucGFnZSA9IHZpcnRfdG9fcGFnZShkYXRhKTsKLQlzZ1sxXS5vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShkYXRhKTsKLQlzZ1sxXS5sZW5ndGggPSBkYXRhX2xlbjsKLQotCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQotCWNyeXB0b19kaWdlc3RfaW5pdCh0Zm1fbWljaGFlbCk7Ci0gICAgICAgIGNyeXB0b19kaWdlc3Rfc2V0a2V5KHRmbV9taWNoYWVsLCBrZXksIDgpOwotICAgICAgICBjcnlwdG9fZGlnZXN0X3VwZGF0ZSh0Zm1fbWljaGFlbCwgc2csIDIpOwotICAgICAgICBjcnlwdG9fZGlnZXN0X2ZpbmFsKHRmbV9taWNoYWVsLCBtaWMpOwotICAgICAgICByZXR1cm4gMDsKLSNlbHNlCi1pZiAoY3J5cHRvX2hhc2hfc2V0a2V5KHRrZXktPnRmbV9taWNoYWVsLCBrZXksIDgpKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLQotLy8gICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgZGVzYy50Zm0gPSB0a2V5LT50Zm1fbWljaGFlbDsKLSAgICAgICAgICAgICAgZGVzYy5mbGFncyA9IDA7Ci0gICAgICAgICAgICAgIHJldCA9IGNyeXB0b19oYXNoX2RpZ2VzdCgmZGVzYywgc2csIGRhdGFfbGVuICsgMTYsIG1pYyk7Ci0gICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0jZW5kaWYKLX0KLSNlbHNlCiBzdGF0aWMgaW50IG1pY2hhZWxfbWljKHN0cnVjdCBjcnlwdG9faGFzaCAqdGZtX21pY2hhZWwsIHU4ICoga2V5LCB1OCAqIGhkciwKICAgICAgICAgICAgICAgICAgICAgICAgdTggKiBkYXRhLCBzaXplX3QgZGF0YV9sZW4sIHU4ICogbWljKQogewpAQCAtNjkyLDE5ICs1MzgsOSBAQAogICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIm1pY2hhZWxfbWljOiB0Zm1fbWljaGFlbCA9PSBOVUxMXG4iKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjQpCi0gICAgICAgIHNnWzBdLnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoaGRyKTsKLSAgICAgICAgc2dbMF0ub2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoaGRyKTsKLSAgICAgICAgc2dbMF0ubGVuZ3RoID0gMTY7Ci0KLSAgICAgICAgc2dbMV0ucGFnZSA9IHZpcnRfdG9fcGFnZShkYXRhKTsKLSAgICAgICAgc2dbMV0ub2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoZGF0YSk7Ci0gICAgICAgIHNnWzFdLmxlbmd0aCA9IGRhdGFfbGVuOwotI2Vsc2UKICAgICAgICAgc2dfaW5pdF90YWJsZShzZywgMik7CiAgICAgICAgIHNnX3NldF9idWYoJnNnWzBdLCBoZHIsIDE2KTsKICAgICAgICAgc2dfc2V0X2J1Zigmc2dbMV0sIGRhdGEsIGRhdGFfbGVuKTsKLSNlbmRpZgogCiAgICAgICAgIGlmIChjcnlwdG9faGFzaF9zZXRrZXkodGZtX21pY2hhZWwsIGtleSwgOCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNzEzLDcgKzU0OSw2IEBACiAgICAgICAgIGRlc2MuZmxhZ3MgPSAwOwogICAgICAgICByZXR1cm4gY3J5cHRvX2hhc2hfZGlnZXN0KCZkZXNjLCBzZywgZGF0YV9sZW4gKyAxNiwgbWljKTsKIH0KLSNlbmRpZgogCiAKIApAQCAtNzcyLDEzICs2MDcsOCBAQAogCX0KIAkvLyB9CiAJcG9zID0gc2tiX3B1dChza2IsIDgpOwotI2lmKChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjEpKSAmJiAoIU9QRU5TVVNFX1NMRUQpKQogCWlmIChtaWNoYWVsX21pYyh0a2V5LT50eF90Zm1fbWljaGFlbCwgJnRrZXktPmtleVsxNl0sIHRrZXktPnR4X2hkciwKIAkJCQlza2ItPmRhdGEgKyBoZHJfbGVuLCBza2ItPmxlbiAtIDggLSBoZHJfbGVuLCBwb3MpKQotI2Vsc2UKLQlpZiAobWljaGFlbF9taWModGtleS0+dHhfdGZtX21pY2hhZWwsICZ0a2V5LT5rZXlbMTZdLCB0a2V5LT50eF9oZHIsCi0JCQkJc2tiLT5kYXRhICsgaGRyX2xlbiwgc2tiLT5sZW4gLSA4IC0gaGRyX2xlbiwgcG9zKSkKLSNlbmRpZgogCQlyZXR1cm4gLTE7CiAKIAlyZXR1cm4gMDsKQEAgLTg1MCwxMyArNjgwLDggQEAKIAl9CiAJLy8gfQogCi0jaWYoKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMSkpICYmICghT1BFTlNVU0VfU0xFRCkpCiAJaWYgKG1pY2hhZWxfbWljKHRrZXktPnJ4X3RmbV9taWNoYWVsLCAmdGtleS0+a2V5WzI0XSwgdGtleS0+cnhfaGRyLAogCQkJCXNrYi0+ZGF0YSArIGhkcl9sZW4sIHNrYi0+bGVuIC0gOCAtIGhkcl9sZW4sIG1pYykpCi0jZWxzZQotCWlmIChtaWNoYWVsX21pYyh0a2V5LT5yeF90Zm1fbWljaGFlbCwgJnRrZXktPmtleVsyNF0sIHRrZXktPnJ4X2hkciwKLQkJCQlza2ItPmRhdGEgKyBoZHJfbGVuLCBza2ItPmxlbiAtIDggLSBoZHJfbGVuLCBtaWMpKQotI2VuZGlmCiAgICAgICAgICAgICAJcmV0dXJuIC0xOwogCWlmIChtZW1jbXAobWljLCBza2ItPmRhdGEgKyBza2ItPmxlbiAtIDgsIDgpICE9IDApIHsKIAkJc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKQEAgLTg4NiwzMiArNzExLDE4IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV90a2lwX2RhdGEgKnRrZXkgPSBwcml2OwogCWludCBrZXlpZHg7Ci0jaWYoKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMSkpICYmICghT1BFTlNVU0VfU0xFRCkpCi0Jc3RydWN0IGNyeXB0b190Zm0gKnRmbSA9IHRrZXktPnR4X3RmbV9taWNoYWVsOwotCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0yID0gdGtleS0+dHhfdGZtX2FyYzQ7Ci0Jc3RydWN0IGNyeXB0b190Zm0gKnRmbTMgPSB0a2V5LT5yeF90Zm1fbWljaGFlbDsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtNCA9IHRrZXktPnJ4X3RmbV9hcmM0OwotI2Vsc2UKIAlzdHJ1Y3QgY3J5cHRvX2hhc2ggKnRmbSA9IHRrZXktPnR4X3RmbV9taWNoYWVsOwogCXN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0yID0gdGtleS0+dHhfdGZtX2FyYzQ7CiAJc3RydWN0IGNyeXB0b19oYXNoICp0Zm0zID0gdGtleS0+cnhfdGZtX21pY2hhZWw7CiAJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbTQgPSB0a2V5LT5yeF90Zm1fYXJjNDsKLSNlbmRpZgogCiAJa2V5aWR4ID0gdGtleS0+a2V5X2lkeDsKIAltZW1zZXQodGtleSwgMCwgc2l6ZW9mKCp0a2V5KSk7CiAJdGtleS0+a2V5X2lkeCA9IGtleWlkeDsKLSNpZigoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIxKSkgJiYgKCFPUEVOU1VTRV9TTEVEKSkKIAl0a2V5LT50eF90Zm1fbWljaGFlbCA9IHRmbTsKIAl0a2V5LT50eF90Zm1fYXJjNCA9IHRmbTI7CiAJdGtleS0+cnhfdGZtX21pY2hhZWwgPSB0Zm0zOwogCXRrZXktPnJ4X3RmbV9hcmM0ID0gdGZtNDsKLSNlbHNlCi0JdGtleS0+dHhfdGZtX21pY2hhZWwgPSB0Zm07Ci0JdGtleS0+dHhfdGZtX2FyYzQgPSB0Zm0yOwotCXRrZXktPnJ4X3RmbV9taWNoYWVsID0gdGZtMzsKLQl0a2V5LT5yeF90Zm1fYXJjNCA9IHRmbTQ7Ci0jZW5kaWYKIAogCWlmIChsZW4gPT0gVEtJUF9LRVlfTEVOKSB7CiAJCW1lbWNweSh0a2V5LT5rZXksIGtleSwgVEtJUF9LRVlfTEVOKTsKQEAgLTEwMjEsMTEgKzgzMiw0IEBACiAvLyAgICBwcmludGsoIj09PT09PT09PT09PT4lcygpXG4iLCBfX0ZVTkNUSU9OX18pOwogICAgICAgICByZXR1cm47CiB9Ci0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdGtpcF9udWxsKTsKLSNlbHNlCi1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfdGtpcF9udWxsKTsKLSNlbmRpZgogCi0vL21vZHVsZV9pbml0KGllZWU4MDIxMV9jcnlwdG9fdGtpcF9pbml0KTsKLS8vbW9kdWxlX2V4aXQoaWVlZTgwMjExX2NyeXB0b190a2lwX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfd2VwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF93ZXAuYwppbmRleCBjNGJiYzhkLi41ZGM5NzY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF93ZXAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF93ZXAuYwpAQCAtMjEsMzAgKzIxLDExIEBACiAjaW5jbHVkZSAiaWVlZTgwMjExLmgiCiAKIAotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCi0jaW5jbHVkZSAicnRsX2NyeXB0by5oIgotI2Vsc2UKICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KLSNlbmRpZgogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQotICAgICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KLSNlbHNlCi0gICAgI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+Ci0jZW5kaWYKLS8vI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLS8vCi0vKgotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCi0jaW5jbHVkZSAicnRsX2NyeXB0by5oIgotI2Vsc2UKLSNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KLSNlbmRpZgogCi0jaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSovCiBNT0RVTEVfQVVUSE9SKCJKb3VuaSBNYWxpbmVuIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkhvc3QgQVAgY3J5cHQ6IFdFUCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtNTgsMTIgKzM5LDggQEAKIAl1OCBrZXlbV0VQX0tFWV9MRU4gKyAxXTsKIAl1OCBrZXlfbGVuOwogCXU4IGtleV9pZHg7Ci0jaWYoKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMSkpICYmICghT1BFTlNVU0VfU0xFRCkpCi0Jc3RydWN0IGNyeXB0b190Zm0gKnRmbTsKLQkjZWxzZQogICAgICAgICBzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdHhfdGZtOwogICAgICAgICBzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqcnhfdGZtOwotICAgICAgICAjZW5kaWYKIH07CiAKIApAQCAtNzYsMTQgKzUzLDYgQEAKIAkJZ290byBmYWlsOwogCXByaXYtPmtleV9pZHggPSBrZXlpZHg7CiAKLSNpZigoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIxKSkgJiYgKCFPUEVOU1VTRV9TTEVEKSkKLQlwcml2LT50Zm0gPSBjcnlwdG9fYWxsb2NfdGZtKCJhcmM0IiwgMCk7Ci0JaWYgKHByaXYtPnRmbSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJpZWVlODAyMTFfY3J5cHRfd2VwOiBjb3VsZCBub3QgYWxsb2NhdGUgIgotCQkgICAgICAgImNyeXB0byBBUEkgYXJjNFxuIik7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0JI2Vsc2UKIAlwcml2LT50eF90Zm0gPSBjcnlwdG9fYWxsb2NfYmxrY2lwaGVyKCJlY2IoYXJjNCkiLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKICAgICAgICAgaWYgKElTX0VSUihwcml2LT50eF90Zm0pKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgImllZWU4MDIxMV9jcnlwdF93ZXA6IGNvdWxkIG5vdCBhbGxvY2F0ZSAiCkBAIC05OCw3ICs2Nyw2IEBACiAgICAgICAgICAgICAgICAgcHJpdi0+cnhfdGZtID0gTlVMTDsKICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIH0KLSAgICAgICAgI2VuZGlmCiAKIAkvKiBzdGFydCBXRVAgSVYgZnJvbSBhIHJhbmRvbSB2YWx1ZSAqLwogCWdldF9yYW5kb21fYnl0ZXMoJnByaXYtPml2LCA0KTsKQEAgLTEwNiwxMyArNzQsNiBAQAogCXJldHVybiBwcml2OwogCiBmYWlsOgotI2lmKChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjEpKSAmJiAoIU9QRU5TVVNFX1NMRUQpKQotCWlmIChwcml2KSB7Ci0JCWlmIChwcml2LT50Zm0pCi0JCQljcnlwdG9fZnJlZV90Zm0ocHJpdi0+dGZtKTsKLQkJa2ZyZWUocHJpdik7Ci0JfQotCSNlbHNlCiAJaWYgKHByaXYpIHsKICAgICAgICAgICAgICAgICBpZiAocHJpdi0+dHhfdGZtKQogICAgICAgICAgICAgICAgICAgICAgICAgY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKHByaXYtPnR4X3RmbSk7CkBAIC0xMjAsNyArODEsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKHByaXYtPnJ4X3RmbSk7CiAgICAgICAgICAgICAgICAga2ZyZWUocHJpdik7CiAgICAgICAgIH0KLSAgICAgICAgI2VuZGlmCiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTEyOCwxNyArODgsMTIgQEAKIHN0YXRpYyB2b2lkIHByaXNtMl93ZXBfZGVpbml0KHZvaWQgKnByaXYpCiB7CiAJc3RydWN0IHByaXNtMl93ZXBfZGF0YSAqX3ByaXYgPSBwcml2OwotI2lmKChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjEpKSAmJiAoIU9QRU5TVVNFX1NMRUQpKQotCWlmIChfcHJpdiAmJiBfcHJpdi0+dGZtKQotCQljcnlwdG9fZnJlZV90Zm0oX3ByaXYtPnRmbSk7Ci0JI2Vsc2UKIAlpZiAoX3ByaXYpIHsKICAgICAgICAgICAgICAgICBpZiAoX3ByaXYtPnR4X3RmbSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNyeXB0b19mcmVlX2Jsa2NpcGhlcihfcHJpdi0+dHhfdGZtKTsKICAgICAgICAgICAgICAgICBpZiAoX3ByaXYtPnJ4X3RmbSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNyeXB0b19mcmVlX2Jsa2NpcGhlcihfcHJpdi0+cnhfdGZtKTsKICAgICAgICAgfQotICAgICAgICAjZW5kaWYKIAlrZnJlZShwcml2KTsKIH0KIApAQCAtMTU1LDkgKzExMCw3IEBACiAJdTgga2V5W1dFUF9LRVlfTEVOICsgM107CiAJdTggKnBvczsKIAljYl9kZXNjICp0Y2JfZGVzYyA9IChjYl9kZXNjICopKHNrYi0+Y2IgKyBNQVhfREVWX0FERFJfU0laRSk7Ci0JI2lmKChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIxKSkgfHwgKE9QRU5TVVNFX1NMRUQpKQogCXN0cnVjdCBibGtjaXBoZXJfZGVzYyBkZXNjID0gey50Zm0gPSB3ZXAtPnR4X3RmbX07Ci0JI2VuZGlmCiAJdTMyIGNyYzsKIAl1OCAqaWN2OwogCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKQEAgLTE5NiwzNSArMTQ5LDE2IEBACiAJewogCiAJCS8qIEFwcGVuZCBsaXR0bGUtZW5kaWFuIENSQzMyIGFuZCBlbmNyeXB0IGl0IHRvIHByb2R1Y2UgSUNWICovCi0JI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsMCkpCiAJCWNyYyA9IH5jcmMzMl9sZSh+MCwgcG9zLCBsZW4pOwotCSNlbHNlCi0JCWNyYyA9IH5ldGhlcl9jcmNfbGUobGVuLCBwb3MpOwotCSNlbmRpZgogCQlpY3YgPSBza2JfcHV0KHNrYiwgNCk7CiAJCWljdlswXSA9IGNyYzsKIAkJaWN2WzFdID0gY3JjID4+IDg7CiAJCWljdlsyXSA9IGNyYyA+PiAxNjsKIAkJaWN2WzNdID0gY3JjID4+IDI0OwogCi0jaWYoKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMSkpICYmICghT1BFTlNVU0VfU0xFRCkpCi0JCWNyeXB0b19jaXBoZXJfc2V0a2V5KHdlcC0+dGZtLCBrZXksIGtsZW4pOwotCQlzZy5wYWdlID0gdmlydF90b19wYWdlKHBvcyk7Ci0JCXNnLm9mZnNldCA9IG9mZnNldF9pbl9wYWdlKHBvcyk7Ci0JCXNnLmxlbmd0aCA9IGxlbiArIDQ7Ci0JCWNyeXB0b19jaXBoZXJfZW5jcnlwdCh3ZXAtPnRmbSwgJnNnLCAmc2csIGxlbiArIDQpOwotCQlyZXR1cm4gMDsKLQkjZWxzZQogCQljcnlwdG9fYmxrY2lwaGVyX3NldGtleSh3ZXAtPnR4X3RmbSwga2V5LCBrbGVuKTsKLQkjaWYoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDI0KSkKLQkJc2cucGFnZSA9IHZpcnRfdG9fcGFnZShwb3MpOwotCQlzZy5vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShwb3MpOwotCQlzZy5sZW5ndGggPSBsZW4gKyA0OwotCSNlbHNlCiAJCXNnX2luaXRfb25lKCZzZywgcG9zLCBsZW4rNCk7Ci0JI2VuZGlmCiAJCXJldHVybiBjcnlwdG9fYmxrY2lwaGVyX2VuY3J5cHQoJmRlc2MsICZzZywgJnNnLCBsZW4gKyA0KTsKLQkjZW5kaWYKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI0NSw5ICsxNzksNyBAQAogCXU4IGtleVtXRVBfS0VZX0xFTiArIDNdOwogCXU4IGtleWlkeCwgKnBvczsKIAljYl9kZXNjICp0Y2JfZGVzYyA9IChjYl9kZXNjICopKHNrYi0+Y2IgKyBNQVhfREVWX0FERFJfU0laRSk7Ci0JI2lmKChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIxKSkgfHwgKE9QRU5TVVNFX1NMRUQpKQogCXN0cnVjdCBibGtjaXBoZXJfZGVzYyBkZXNjID0gey50Zm0gPSB3ZXAtPnJ4X3RmbX07Ci0JI2VuZGlmCiAJdTMyIGNyYzsKIAl1OCBpY3ZbNF07CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOwpAQCAtMjcyLDI5ICsyMDQsMTEgQEAKIAogCWlmICghdGNiX2Rlc2MtPmJId1NlYykKIAl7Ci0jaWYoKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMSkpICYmICghT1BFTlNVU0VfU0xFRCkpCi0JCWNyeXB0b19jaXBoZXJfc2V0a2V5KHdlcC0+dGZtLCBrZXksIGtsZW4pOwotCQlzZy5wYWdlID0gdmlydF90b19wYWdlKHBvcyk7Ci0JCXNnLm9mZnNldCA9IG9mZnNldF9pbl9wYWdlKHBvcyk7Ci0JCXNnLmxlbmd0aCA9IHBsZW4gKyA0OwotCQljcnlwdG9fY2lwaGVyX2RlY3J5cHQod2VwLT50Zm0sICZzZywgJnNnLCBwbGVuICsgNCk7Ci0JI2Vsc2UKIAkJY3J5cHRvX2Jsa2NpcGhlcl9zZXRrZXkod2VwLT5yeF90Zm0sIGtleSwga2xlbik7Ci0JI2lmKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyNCkpCi0JCXNnLnBhZ2UgPSB2aXJ0X3RvX3BhZ2UocG9zKTsKLQkJc2cub2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UocG9zKTsKLQkJc2cubGVuZ3RoID0gcGxlbiArIDQ7Ci0JI2Vsc2UKIAkJc2dfaW5pdF9vbmUoJnNnLCBwb3MsIHBsZW4rNCk7Ci0JI2VuZGlmCiAJCWlmIChjcnlwdG9fYmxrY2lwaGVyX2RlY3J5cHQoJmRlc2MsICZzZywgJnNnLCBwbGVuICsgNCkpCiAJCQlyZXR1cm4gLTc7Ci0JI2VuZGlmCi0JI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsMCkpCiAJCWNyYyA9IH5jcmMzMl9sZSh+MCwgcG9zLCBwbGVuKTsKLQkjZWxzZQotCQljcmMgPSB+ZXRoZXJfY3JjX2xlKHBsZW4sIHBvcyk7Ci0JI2VuZGlmCiAJCWljdlswXSA9IGNyYzsKIAkJaWN2WzFdID0gY3JjID4+IDg7CiAJCWljdlsyXSA9IGNyYyA+PiAxNjsKQEAgLTM3OSwxNCArMjkzLDYgQEAKIAogdm9pZCBpZWVlODAyMTFfd2VwX251bGwodm9pZCkKIHsKLS8vCXByaW50aygiPT09PT09PT09PT09PiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CiAgICAgICAgIHJldHVybjsKIH0KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApKQotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93ZXBfbnVsbCk7Ci0jZWxzZQotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3dlcF9udWxsKTsKLSNlbmRpZgogCi0vL21vZHVsZV9pbml0KGllZWU4MDIxMV9jcnlwdG9fd2VwX2luaXQpOwotLy9tb2R1bGVfZXhpdChpZWVlODAyMTFfY3J5cHRvX3dlcF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKaW5kZXggNjE0YThiNi4uN2VkZjVjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKQEAgLTMxLDcgKzMxLDYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotLy8jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KQEAgLTExMCwxNCArMTA5LDcgQEAKIAkJZ290byBmYWlsZWQ7CiAJfQogCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkpCiAJaWVlZSA9IG5ldGRldl9wcml2KGRldik7Ci0jZWxzZQotCWllZWUgPSAoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKilkZXYtPnByaXY7Ci0jZW5kaWYKLSNpZiAwCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpZWVlODAyMTFfcnRsX3htaXQ7Ci0jZW5kaWYKIAogCW1lbXNldChpZWVlLCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UpK3NpemVvZl9wcml2KTsKIAlpZWVlLT5kZXYgPSBkZXY7CkBAIC0xNjYsMTIgKzE1OCw3IEBACiAKIAlpZWVlODAyMTFfc29mdG1hY19pbml0KGllZWUpOwogCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxMykpCiAJaWVlZS0+cEhUSW5mbyA9IGt6YWxsb2Moc2l6ZW9mKFJUX0hJR0hfVEhST1VHSFBVVCksIEdGUF9LRVJORUwpOwotI2Vsc2UKLQlpZWVlLT5wSFRJbmZvID0gKFJUX0hJR0hfVEhST1VHSFBVVCopa21hbGxvYyhzaXplb2YoUlRfSElHSF9USFJPVUdIUFVUKSwgR0ZQX0tFUk5FTCk7Ci0JbWVtc2V0KGllZWUtPnBIVEluZm8sMCxzaXplb2YoUlRfSElHSF9USFJPVUdIUFVUKSk7Ci0jZW5kaWYKIAlpZiAoaWVlZS0+cEhUSW5mbyA9PSBOVUxMKQogCXsKIAkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICJjYW4ndCBhbGxvYyBtZW1vcnkgZm9yIEhUSW5mb1xuIik7CkBAIC0xODAsMTMgKzE2Nyw2IEBACiAJSFRVcGRhdGVEZWZhdWx0U2V0dGluZyhpZWVlKTsKIAlIVEluaXRpYWxpemVIVEluZm8oaWVlZSk7IC8vbWF5IG1vdmUgdG8gb3RoZXIgcGxhY2UuCiAJVFNJbml0aWFsaXplKGllZWUpOwotI2lmIDAKLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkpCi0gCUlOSVRfV09SSygmaWVlZS0+aHRfb25Bc3NSc3AsICh2b2lkKCopKHZvaWQqKSkgSFRPbkFzc29jUnNwX3dxKTsKLSNlbHNlCi0JSU5JVF9XT1JLKCZpZWVlLT5odF9vbkFzc1JzcCwgKHZvaWQoKikodm9pZCopKSBIVE9uQXNzb2NSc3Bfd3EsIGllZWUpOwotI2VuZGlmCi0jZW5kaWYKIAlmb3IgKGkgPSAwOyBpIDwgSUVFRV9JQlNTX01BQ19IQVNIX1NJWkU7IGkrKykKIAkJSU5JVF9MSVNUX0hFQUQoJmllZWUtPmlic3NfbWFjX2hhc2hbaV0pOwogCkBAIC0yMDUsMzIgKzE4NSwyMCBAQAogCiAgZmFpbGVkOgogCWlmIChkZXYpCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkpCiAJCWZyZWVfbmV0ZGV2KGRldik7Ci0jZWxzZQotCQlrZnJlZShkZXYpOwotI2VuZGlmCiAJcmV0dXJuIE5VTEw7CiB9CiAKIAogdm9pZCBmcmVlX2llZWU4MDIxMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApKQogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSNlbHNlCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSAoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKilkZXYtPnByaXY7Ci0jZW5kaWYKIAlpbnQgaTsKLQkvL3N0cnVjdCBsaXN0X2hlYWQgKnAsICpxOwotLy8JZGVsX3RpbWVyX3N5bmMoJmllZWUtPlN3QndUaW1lcik7Ci0jaWYgMQogCWlmIChpZWVlLT5wSFRJbmZvICE9IE5VTEwpCiAJewogCQlrZnJlZShpZWVlLT5wSFRJbmZvKTsKIAkJaWVlZS0+cEhUSW5mbyA9IE5VTEw7CiAJfQotI2VuZGlmCiAJUmVtb3ZlQWxsVFMoaWVlZSk7CiAJaWVlZTgwMjExX3NvZnRtYWNfZnJlZShpZWVlKTsKIAlkZWxfdGltZXJfc3luYygmaWVlZS0+Y3J5cHRfZGVpbml0X3RpbWVyKTsKQEAgLTI0NywyMCArMjE1LDcgQEAKIAl9CiAKIAlpZWVlODAyMTFfbmV0d29ya3NfZnJlZShpZWVlKTsKLSNpZiAwCi0JZm9yIChpID0gMDsgaSA8IElFRUVfSUJTU19NQUNfSEFTSF9TSVpFOyBpKyspIHsKLQkJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIHEsICZpZWVlLT5pYnNzX21hY19oYXNoW2ldKSB7Ci0JCQlrZnJlZShsaXN0X2VudHJ5KHAsIHN0cnVjdCBpZWVlX2lic3Nfc2VxLCBsaXN0KSk7Ci0JCQlsaXN0X2RlbChwKTsKLQkJfQotCX0KLQotI2VuZGlmCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkpCiAJZnJlZV9uZXRkZXYoZGV2KTsKLSNlbHNlCi0Ja2ZyZWUoZGV2KTsKLSNlbmRpZgogfQogCiAjaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRwpAQCAtMzU4LDExICszMTMsNyBAQAogCX0KIAogCWllZWU4MDIxMV9kZWJ1Z19sZXZlbCA9IGRlYnVnOwotI2lmKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyNCkpCi0JaWVlZTgwMjExX3Byb2MgPSBjcmVhdGVfcHJvY19lbnRyeShEUlZfTkFNRSwgU19JRkRJUiwgcHJvY19uZXQpOwotI2Vsc2UKIAlpZWVlODAyMTFfcHJvYyA9IGNyZWF0ZV9wcm9jX2VudHJ5KERSVl9OQU1FLCBTX0lGRElSLCBpbml0X25ldC5wcm9jX25ldCk7Ci0jZW5kaWYKIAlpZiAoaWVlZTgwMjExX3Byb2MgPT0gTlVMTCkgewogCQlJRUVFODAyMTFfRVJST1IoIlVuYWJsZSB0byBjcmVhdGUgIiBEUlZfTkFNRQogCQkJCSIgcHJvYyBkaXJlY3RvcnlcbiIpOwpAQCAtMzcxLDExICszMjIsNyBAQAogCWUgPSBjcmVhdGVfcHJvY19lbnRyeSgiZGVidWdfbGV2ZWwiLCBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkgICAgICBpZWVlODAyMTFfcHJvYyk7CiAJaWYgKCFlKSB7Ci0jaWYoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDI0KSkKLQkJcmVtb3ZlX3Byb2NfZW50cnkoRFJWX05BTUUsIHByb2NfbmV0KTsKLSNlbHNlCiAJCXJlbW92ZV9wcm9jX2VudHJ5KERSVl9OQU1FLCBpbml0X25ldC5wcm9jX25ldCk7Ci0jZW5kaWYKIAkJaWVlZTgwMjExX3Byb2MgPSBOVUxMOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC0zOTAsMTEgKzMzNyw3IEBACiB7CiAJaWYgKGllZWU4MDIxMV9wcm9jKSB7CiAJCXJlbW92ZV9wcm9jX2VudHJ5KCJkZWJ1Z19sZXZlbCIsIGllZWU4MDIxMV9wcm9jKTsKLSNpZihMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjQpKQotCQlyZW1vdmVfcHJvY19lbnRyeShEUlZfTkFNRSwgcHJvY19uZXQpOwotI2Vsc2UKIAkJcmVtb3ZlX3Byb2NfZW50cnkoRFJWX05BTUUsIGluaXRfbmV0LnByb2NfbmV0KTsKLSNlbmRpZgogCQlpZWVlODAyMTFfcHJvYyA9IE5VTEw7CiAJfQogCWllZWU4MDIxMV9jcnlwdG9fd2VwX2V4aXQoKTsKQEAgLTQwMywyMSArMzQ2LDEwIEBACiAJaWVlZTgwMjExX2NyeXB0b19kZWluaXQoKTsKIH0KIAotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsMCkpCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJkZWJ1ZyBvdXRwdXQgbWFzayIpOwogCiAKLS8vbW9kdWxlX2V4aXQoaWVlZTgwMjExX3J0bF9leGl0KTsKLS8vbW9kdWxlX2luaXQoaWVlZTgwMjExX3J0bF9pbml0KTsKLSNlbmRpZgogI2VuZGlmCiAKLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApKQotLy9FWFBPUlRfU1lNQk9MKGFsbG9jX2llZWU4MDIxMSk7Ci0vL0VYUE9SVF9TWU1CT0woZnJlZV9pZWVlODAyMTEpOwotI2Vsc2UKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGFsbG9jX2llZWU4MDIxMSk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhmcmVlX2llZWU4MDIxMSk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCmluZGV4IGRhMTAwNjcuLmFhZjliOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfcnguYwpAQCAtNTUsMTEgKzU1LDcgQEAKIAl1MTYgZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7CiAKIAlza2ItPmRldiA9IGllZWUtPmRldjsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIyKQogICAgICAgICBza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwotI2Vsc2UKLSAgICAgICAgc2tiLT5tYWMucmF3ID0gc2tiLT5kYXRhOwotI2VuZGlmCiAKIAlza2JfcHVsbChza2IsIGllZWU4MDIxMV9nZXRfaGRybGVuKGZjKSk7CiAJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7CkBAIC0yNzkzLDggKzI3ODksNiBAQAogI2VuZGlmCiAJCW1lbWNweSh0YXJnZXQsICZuZXR3b3JrLCBzaXplb2YoKnRhcmdldCkpOwogCQlsaXN0X2FkZF90YWlsKCZ0YXJnZXQtPmxpc3QsICZpZWVlLT5uZXR3b3JrX2xpc3QpOwotCQlpZihpZWVlLT5zb2Z0bWFjX2ZlYXR1cmVzICYgSUVFRV9TT0ZUTUFDX0FTU09DSUFURSkKLQkJCWllZWU4MDIxMV9zb2Z0bWFjX25ld19uZXQoaWVlZSwmbmV0d29yayk7CiAJfSBlbHNlIHsKIAkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIlVwZGF0aW5nICclcycgKCVwTSkgdmlhICVzLlxuIiwKIAkJCQkgICAgIGVzY2FwZV9lc3NpZCh0YXJnZXQtPnNzaWQsCkBAIC0yODIxLDggKzI4MTUsNiBAQAogCQkvL1lKLGFkZCwwODA4MTksZm9yIGhpZGRlbiBhcCxlbmQKIAogCQl1cGRhdGVfbmV0d29yayh0YXJnZXQsICZuZXR3b3JrKTsKLQkJaWYocmVuZXcgJiYgKGllZWUtPnNvZnRtYWNfZmVhdHVyZXMgJiBJRUVFX1NPRlRNQUNfQVNTT0NJQVRFKSkKLQkJCWllZWU4MDIxMV9zb2Z0bWFjX25ld19uZXQoaWVlZSwmbmV0d29yayk7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZS0+bG9jaywgZmxhZ3MpOwpAQCAtMjg4MCwxMSArMjg3MiwzIEBACiAKIAl9CiB9Ci0KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApKQotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yeF9tZ3QpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yeCk7Ci0jZWxzZQotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3J4X21ndCk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfcngpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKaW5kZXggNDZiNmU4Yy4uYjdlYzFkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwpAQCAtNTEwLDM0ICs1MTAsMTEgQEAKIH0KIH0KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotLyogY2FsbGVkIGJvdGggYnkgd3Egd2l0aCBpZWVlLT5sb2NrIGhlbGQgKi8KLXZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKLXsKLSNpZiAwCi0Jc2hvcnQgd2F0Y2hkb2cgPSAwOwotCWRvewotCQlpZWVlLT5jdXJyZW50X25ldHdvcmsuY2hhbm5lbCA9Ci0JCQkoaWVlZS0+Y3VycmVudF9uZXR3b3JrLmNoYW5uZWwgKyAxKSAlIE1BWF9DSEFOTkVMX05VTUJFUjsKLQkJaWYgKHdhdGNoZG9nKysgPiBNQVhfQ0hBTk5FTF9OVU1CRVIpCi0JCQkJcmV0dXJuOyAvKiBubyBnb29kIGNoYW5zICovCiAKLQl9d2hpbGUoIWllZWUtPmNoYW5uZWxfbWFwW2llZWUtPmN1cnJlbnRfbmV0d29yay5jaGFubmVsXSk7Ci0jZW5kaWYKLQotCXNjaGVkdWxlX3Rhc2soJmllZWUtPnNvZnRtYWNfc2Nhbl93cSk7Ci19Ci0jZW5kaWYKLQotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc2Nhbl93cShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAgICAgICAgIHN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOwogICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZihkd29yaywgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UsIHNvZnRtYWNfc2Nhbl93cSk7Ci0jZWxzZQotdm9pZCBpZWVlODAyMTFfc29mdG1hY19zY2FuX3dxKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQotewotI2VuZGlmCiAJc3RhdGljIHNob3J0IHdhdGNoZG9nID0gMDsKIAl1OCBsYXN0X2NoYW5uZWwgPSBpZWVlLT5jdXJyZW50X25ldHdvcmsuY2hhbm5lbDsKICNpZmRlZiBFTkFCTEVfRE9UMTFECkBAIC01NzUsMTMgKzU1Miw3IEBACiAJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxdWVzdHMoaWVlZSk7CiAKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogCXF1ZXVlX2RlbGF5ZWRfd29yayhpZWVlLT53cSwgJmllZWUtPnNvZnRtYWNfc2Nhbl93cSwgSUVFRTgwMjExX1NPRlRNQUNfU0NBTl9USU1FKTsKLSNlbHNlCi0JLy9pZWVlLT5zY2FuX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgTVNFQ1MoSUVFRTgwMjExX1NPRlRNQUNfU0NBTl9USU1FKTsKLQlpZiAoaWVlZS0+c2Nhbm5pbmcgPT0gMSkKLQkJbW9kX3RpbWVyKCZpZWVlLT5zY2FuX3RpbWVyLChqaWZmaWVzICsgTVNFQ1MoSUVFRTgwMjExX1NPRlRNQUNfU0NBTl9USU1FKSkpOwotI2VuZGlmCiAKIAl1cCgmaWVlZS0+c2Nhbl9zZW0pOwogCXJldHVybjsKQEAgLTU5NywxOSArNTY4LDYgQEAKIAl1cCgmaWVlZS0+c2Nhbl9zZW0pOwogfQogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi12b2lkIGllZWU4MDIxMV9zb2Z0bWFjX3NjYW5fY2IodW5zaWduZWQgbG9uZyBfZGV2KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSAoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKilfZGV2OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKLQlpZWVlODAyMTFfc29mdG1hY19zY2FuKGllZWUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKLX0KLSNlbmRpZgotCi0KIHZvaWQgaWVlZTgwMjExX2JlYWNvbnNfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTY2NSwxMSArNjIzLDcgQEAKIAlpZiAoaWVlZS0+c2Nhbm5pbmcgPT0gMSl7CiAJCWllZWUtPnNjYW5uaW5nID0gMDsKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogCQljYW5jZWxfZGVsYXllZF93b3JrKCZpZWVlLT5zb2Z0bWFjX3NjYW5fd3EpOwotI2Vsc2UKLQkJZGVsX3RpbWVyX3N5bmMoJmllZWUtPnNjYW5fdGltZXIpOwotI2VuZGlmCiAJfQogCiAvLwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7CkBAIC03MDQsMTYgKzY1OCw3IEBACiAJaWYgKGllZWUtPnNvZnRtYWNfZmVhdHVyZXMgJiBJRUVFX1NPRlRNQUNfU0NBTil7CiAJCWlmIChpZWVlLT5zY2FubmluZyA9PSAwKXsKIAkJCWllZWUtPnNjYW5uaW5nID0gMTsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQogCQkJcXVldWVfZGVsYXllZF93b3JrKGllZWUtPndxLCAmaWVlZS0+c29mdG1hY19zY2FuX3dxLCAwKTsKLSNlbHNlCi0KLQkJCXF1ZXVlX3dvcmsoaWVlZS0+d3EsICZpZWVlLT5zb2Z0bWFjX3NjYW5fd3EpOwotI2VuZGlmCi0jZWxzZQotCQkJaWVlZTgwMjExX3NvZnRtYWNfc2NhbihpZWVlKTsKLSNlbmRpZgogCQl9CiAJfWVsc2UKIAkJaWVlZS0+c3RhcnRfc2NhbihpZWVlLT5kZXYpOwpAQCAtMTQyOCwxMyArMTM3Myw4IEBACiAKIAlpZWVlLT5zdGF0ZSA9IElFRUU4MDIxMV9BU1NPQ0lBVElOR19SRVRSWTsKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogCXF1ZXVlX2RlbGF5ZWRfd29yayhpZWVlLT53cSwgJmllZWUtPmFzc29jaWF0ZV9yZXRyeV93cSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSUVFRTgwMjExX1NPRlRNQUNfQVNTT0NfUkVUUllfVElNRSk7Ci0jZWxzZQotCXNjaGVkdWxlX3Rhc2soJmllZWUtPmFzc29jaWF0ZV9yZXRyeV93cSk7Ci0jZW5kaWYKLQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKIH0KIApAQCAtMTUyNywxNCArMTQ2Nyw5IEBACiAJCS8vZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsvL2VkaXQgYnkgdGhvbWFzCiAJfQogfQotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKIHZvaWQgaWVlZTgwMjExX2Fzc29jaWF0ZV9jb21wbGV0ZV93cShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlLCBhc3NvY2lhdGVfY29tcGxldGVfd3EpOwotI2Vsc2UKLXZvaWQgaWVlZTgwMjExX2Fzc29jaWF0ZV9jb21wbGV0ZV93cShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKLXsKLSNlbmRpZgogCXByaW50ayhLRVJOX0lORk8gIkFzc29jaWF0ZWQgc3VjY2Vzc2Z1bGx5XG4iKTsKIAlpZWVlLT5pc19yb2FtaW5nID0gZmFsc2U7CiAJaWYoaWVlZTgwMjExX2lzXzU0ZyhpZWVlLT5jdXJyZW50X25ldHdvcmspICYmCkBAIC0xNjA2LDIxICsxNTQxLDEyIEBACiAJfQogI2VuZGlmCiAJLy9pZWVlLT5VcGRhdGVIYWxSQVRSVGFibGVIYW5kbGVyKGRldiwgaWVlZS0+ZG90MTFIVE9wZXJhdGlvbmFsUmF0ZVNldCk7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAJcXVldWVfd29yayhpZWVlLT53cSwgJmllZWUtPmFzc29jaWF0ZV9jb21wbGV0ZV93cSk7Ci0jZWxzZQotCXNjaGVkdWxlX3Rhc2soJmllZWUtPmFzc29jaWF0ZV9jb21wbGV0ZV93cSk7Ci0jZW5kaWYKIH0KIAotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKIHZvaWQgaWVlZTgwMjExX2Fzc29jaWF0ZV9wcm9jZWR1cmVfd3Eoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSwgYXNzb2NpYXRlX3Byb2NlZHVyZV93cSk7Ci0jZWxzZQotdm9pZCBpZWVlODAyMTFfYXNzb2NpYXRlX3Byb2NlZHVyZV93cShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKLXsKLSNlbmRpZgogCWllZWUtPnN5bmNfc2Nhbl9odXJyeXVwID0gMTsKICNpZmRlZiBFTkFCTEVfSVBTCiAJaWYoaWVlZS0+aWVlZTgwMjExX2lwc19sZWF2ZSAhPSBOVUxMKQpAQCAtMTczNCwxMSArMTY2MCw3IEBACiAJCQkJCX0KIAogCQkJCQlpZWVlLT5zdGF0ZSA9IElFRUU4MDIxMV9BU1NPQ0lBVElORzsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsMCkKIAkJCQkJcXVldWVfd29yayhpZWVlLT53cSwgJmllZWUtPmFzc29jaWF0ZV9wcm9jZWR1cmVfd3EpOwotI2Vsc2UKLQkJCQkJc2NoZWR1bGVfdGFzaygmaWVlZS0+YXNzb2NpYXRlX3Byb2NlZHVyZV93cSk7Ci0jZW5kaWYKIAkJCQl9ZWxzZXsKIAkJCQkJaWYoaWVlZTgwMjExX2lzXzU0ZyhpZWVlLT5jdXJyZW50X25ldHdvcmspICYmCiAJCQkJCQkoaWVlZS0+bW9kdWxhdGlvbiAmIElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT04pKXsKQEAgLTIzMzIsMTEgKzIyNTQsNyBAQAogCQkJCQkJIkFzc29jaWF0aW9uIHJlc3BvbnNlIHN0YXR1cyBjb2RlIDB4JXhcbiIsCiAJCQkJCQllcnJjb2RlKTsKIAkJCQkJaWYoaWVlZS0+QXNvY1JldHJ5Q291bnQgPCBSVF9BU09DX1JFVFJZX0xJTUlUKSB7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAJCQkJCQlxdWV1ZV93b3JrKGllZWUtPndxLCAmaWVlZS0+YXNzb2NpYXRlX3Byb2NlZHVyZV93cSk7Ci0jZWxzZQotCQkJCQkJc2NoZWR1bGVfdGFzaygmaWVlZS0+YXNzb2NpYXRlX3Byb2NlZHVyZV93cSk7Ci0jZW5kaWYKIAkJCQkJfSBlbHNlIHsKIAkJCQkJCWllZWU4MDIxMV9hc3NvY2lhdGVfYWJvcnQoaWVlZSk7CiAJCQkJCX0KQEAgLTI0NDYsMTEgKzIzNjQsNyBAQAogCQkJLy8Jbm90aWZ5X3d4X2Fzc29jX2V2ZW50KGllZWUpOwogCQkJCS8vSFRTZXRDb25uZWN0QndNb2RlKGllZWUsIEhUX0NIQU5ORUxfV0lEVEhfMjAsIEhUX0VYVENITkxfT0ZGU0VUX05PX0VYVCk7CiAJCQkJUmVtb3ZlUGVlclRTKGllZWUsIGhlYWRlci0+YWRkcjIpOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogCQkJCXF1ZXVlX3dvcmsoaWVlZS0+d3EsICZpZWVlLT5hc3NvY2lhdGVfcHJvY2VkdXJlX3dxKTsKLSNlbHNlCi0JCQkJc2NoZWR1bGVfdGFzaygmaWVlZS0+YXNzb2NpYXRlX3Byb2NlZHVyZV93cSk7Ci0jZW5kaWYKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIElFRUU4MDIxMV9TVFlQRV9NQU5BR0VfQUNUOgpAQCAtMjY4NywxNiArMjYwMSwxMSBAQAogCQluZXRpZl9jYXJyaWVyX29uKGllZWUtPmRldik7CiAJfQogfQotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKIHZvaWQgaWVlZTgwMjExX3N0YXJ0X2lic3Nfd3Eoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCiAgICAgICAgIHN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOwogICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZihkd29yaywgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UsIHN0YXJ0X2lic3Nfd3EpOwotI2Vsc2UKLXZvaWQgaWVlZTgwMjExX3N0YXJ0X2lic3Nfd3Eoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCi17Ci0jZW5kaWYKIAkvKiBpd2NvbmZpZyBtb2RlIGFkLWhvYyB3aWxsIHNjaGVkdWxlIHRoaXMgYW5kIHJldHVybgogCSAqIG9uIHRoZSBvdGhlciBoYW5kIHRoaXMgd2lsbCBibG9jayBmdXJ0aGVyIGl3Y29uZmlnIFNFVAogCSAqIG9wZXJhdGlvbnMgYmVjYXVzZSBvZiB0aGUgd3hfc2VtIGhvbGQuCkBAIC0yODA3LDExICsyNzE2LDcgQEAKIAogaW5saW5lIHZvaWQgaWVlZTgwMjExX3N0YXJ0X2lic3Moc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAJcXVldWVfZGVsYXllZF93b3JrKGllZWUtPndxLCAmaWVlZS0+c3RhcnRfaWJzc193cSwgMTUwKTsKLSNlbHNlCi0Jc2NoZWR1bGVfdGFzaygmaWVlZS0+c3RhcnRfaWJzc193cSk7Ci0jZW5kaWYKIH0KIAogLyogdGhpcyBpcyBjYWxsZWQgb25seSBpbiB1c2VyIGNvbnRleHQsIHdpdGggd3hfc2VtIGhlbGQgKi8KQEAgLTI4NzMsMjIgKzI3NzgsMjIgQEAKIAlpZihJU19ET1QxMURfRU5BQkxFKGllZWUpKQogCQlEb3QxMWRfUmVzZXQoaWVlZSk7CiAjZW5kaWYKLQlpZWVlLT5zdGF0ZSA9IElFRUU4MDIxMV9OT0xJTks7CiAJaWVlZS0+aXNfc2V0X2tleSA9IGZhbHNlOwogCWllZWUtPmxpbmtfY2hhbmdlKGllZWUtPmRldik7CiAJLy9IVFNldENvbm5lY3RCd01vZGUoaWVlZSwgSFRfQ0hBTk5FTF9XSURUSF8yMCwgSFRfRVhUQ0hOTF9PRkZTRVRfTk9fRVhUKTsKLQlub3RpZnlfd3hfYXNzb2NfZXZlbnQoaWVlZSk7CisJaWYgKGllZWUtPnN0YXRlID09IElFRUU4MDIxMV9MSU5LRUQgfHwKKwkgICAgaWVlZS0+c3RhdGUgPT0gSUVFRTgwMjExX0FTU09DSUFUSU5HKSB7CisJCWllZWUtPnN0YXRlID0gSUVFRTgwMjExX05PTElOSzsKKwkJbm90aWZ5X3d4X2Fzc29jX2V2ZW50KGllZWUpOworCX0KKworCWllZWUtPnN0YXRlID0gSUVFRTgwMjExX05PTElOSzsKIAogfQotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKIHZvaWQgaWVlZTgwMjExX2Fzc29jaWF0ZV9yZXRyeV93cShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAgICAgICAgIHN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOwogICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZihkd29yaywgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UsIGFzc29jaWF0ZV9yZXRyeV93cSk7Ci0jZWxzZQotdm9pZCBpZWVlODAyMTFfYXNzb2NpYXRlX3JldHJ5X3dxKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQotewotI2VuZGlmCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRvd24oJmllZWUtPnd4X3NlbSk7CkBAIC0yOTkwLDEwICsyODk1LDggQEAKIAogCWllZWU4MDIxMV9zdG9wX3NlbmRfYmVhY29ucyhpZWVlKTsKIAlkZWxfdGltZXJfc3luYygmaWVlZS0+YXNzb2NpYXRlX3RpbWVyKTsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsMCkKIAljYW5jZWxfZGVsYXllZF93b3JrKCZpZWVlLT5hc3NvY2lhdGVfcmV0cnlfd3EpOwogCWNhbmNlbF9kZWxheWVkX3dvcmsoJmllZWUtPnN0YXJ0X2lic3Nfd3EpOwotI2VuZGlmCiAJaWVlZTgwMjExX3N0b3Bfc2NhbihpZWVlKTsKIAogCWllZWU4MDIxMV9kaXNhc3NvY2lhdGUoaWVlZSk7CkBAIC0zMTE0LDExICszMDE3LDYgQEAKIAlpZWVlLT5zdGFfZWRjYV9wYXJhbVszXSA9IDB4MDAyRjMyNjI7CiAJaWVlZS0+YWdncmVnYXRpb24gPSB0cnVlOwogCWllZWUtPmVuYWJsZV9yeF9pbW1fQkEgPSAxOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotCWluaXRfdGltZXIoJmllZWUtPnNjYW5fdGltZXIpOwotCWllZWUtPnNjYW5fdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWllZWU7Ci0JaWVlZS0+c2Nhbl90aW1lci5mdW5jdGlvbiA9IGllZWU4MDIxMV9zb2Z0bWFjX3NjYW5fY2I7Ci0jZW5kaWYKIAlpZWVlLT50eF9wZW5kaW5nLnR4YiA9IE5VTEw7CiAKIAlpbml0X3RpbWVyKCZpZWVlLT5hc3NvY2lhdGVfdGltZXIpOwpAQCAtMzEyOSwxNiArMzAyNywxMiBAQAogCWllZWUtPmJlYWNvbl90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGllZWU7CiAJaWVlZS0+YmVhY29uX3RpbWVyLmZ1bmN0aW9uID0gaWVlZTgwMjExX3NlbmRfYmVhY29uX2NiOwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAjaWZkZWYgUEZfU1lOQ1RIUkVBRAogCWllZWUtPndxID0gY3JlYXRlX3dvcmtxdWV1ZShEUlZfTkFNRSwwKTsKICNlbHNlCiAJaWVlZS0+d3EgPSBjcmVhdGVfd29ya3F1ZXVlKERSVl9OQU1FKTsKICNlbmRpZgotI2VuZGlmCiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQogICAgICAgICBJTklUX0RFTEFZRURfV09SSygmaWVlZS0+c3RhcnRfaWJzc193cSxpZWVlODAyMTFfc3RhcnRfaWJzc193cSk7CiAgICAgICAgIElOSVRfV09SSygmaWVlZS0+YXNzb2NpYXRlX2NvbXBsZXRlX3dxLCBpZWVlODAyMTFfYXNzb2NpYXRlX2NvbXBsZXRlX3dxKTsKICAgICAgICAgSU5JVF9XT1JLKCZpZWVlLT5hc3NvY2lhdGVfcHJvY2VkdXJlX3dxLCBpZWVlODAyMTFfYXNzb2NpYXRlX3Byb2NlZHVyZV93cSk7CkBAIC0zMTQ2LDIzICszMDQwLDYgQEAKICAgICAgICAgSU5JVF9ERUxBWUVEX1dPUksoJmllZWUtPmFzc29jaWF0ZV9yZXRyeV93cSwgaWVlZTgwMjExX2Fzc29jaWF0ZV9yZXRyeV93cSk7CiAgICAgICAgIElOSVRfV09SSygmaWVlZS0+d3hfc3luY19zY2FuX3dxLGllZWU4MDIxMV93eF9zeW5jX3NjYW5fd3EpOwogCi0jZWxzZQotCUlOSVRfV09SSygmaWVlZS0+c3RhcnRfaWJzc193cSwodm9pZCgqKSh2b2lkKikpIGllZWU4MDIxMV9zdGFydF9pYnNzX3dxLGllZWUpOwotCUlOSVRfV09SSygmaWVlZS0+YXNzb2NpYXRlX3JldHJ5X3dxLCh2b2lkKCopKHZvaWQqKSkgaWVlZTgwMjExX2Fzc29jaWF0ZV9yZXRyeV93cSxpZWVlKTsKLQlJTklUX1dPUksoJmllZWUtPmFzc29jaWF0ZV9jb21wbGV0ZV93cSwodm9pZCgqKSh2b2lkKikpIGllZWU4MDIxMV9hc3NvY2lhdGVfY29tcGxldGVfd3EsaWVlZSk7Ci0JSU5JVF9XT1JLKCZpZWVlLT5hc3NvY2lhdGVfcHJvY2VkdXJlX3dxLCh2b2lkKCopKHZvaWQqKSkgaWVlZTgwMjExX2Fzc29jaWF0ZV9wcm9jZWR1cmVfd3EsaWVlZSk7Ci0JSU5JVF9XT1JLKCZpZWVlLT5zb2Z0bWFjX3NjYW5fd3EsKHZvaWQoKikodm9pZCopKSBpZWVlODAyMTFfc29mdG1hY19zY2FuX3dxLGllZWUpOwotCUlOSVRfV09SSygmaWVlZS0+d3hfc3luY19zY2FuX3dxLCh2b2lkKCopKHZvaWQqKSkgaWVlZTgwMjExX3d4X3N5bmNfc2Nhbl93cSxpZWVlKTsKLSNlbmRpZgotCi0jZWxzZQotCXRxX2luaXQoJmllZWUtPnN0YXJ0X2lic3Nfd3EsKHZvaWQoKikodm9pZCopKSBpZWVlODAyMTFfc3RhcnRfaWJzc193cSxpZWVlKTsKLQl0cV9pbml0KCZpZWVlLT5hc3NvY2lhdGVfcmV0cnlfd3EsKHZvaWQoKikodm9pZCopKSBpZWVlODAyMTFfYXNzb2NpYXRlX3JldHJ5X3dxLGllZWUpOwotCXRxX2luaXQoJmllZWUtPmFzc29jaWF0ZV9jb21wbGV0ZV93cSwodm9pZCgqKSh2b2lkKikpIGllZWU4MDIxMV9hc3NvY2lhdGVfY29tcGxldGVfd3EsaWVlZSk7Ci0JdHFfaW5pdCgmaWVlZS0+YXNzb2NpYXRlX3Byb2NlZHVyZV93cSwodm9pZCgqKSh2b2lkKikpIGllZWU4MDIxMV9hc3NvY2lhdGVfcHJvY2VkdXJlX3dxLGllZWUpOwotCXRxX2luaXQoJmllZWUtPnNvZnRtYWNfc2Nhbl93cSwodm9pZCgqKSh2b2lkKikpIGllZWU4MDIxMV9zb2Z0bWFjX3NjYW5fd3EsaWVlZSk7Ci0JdHFfaW5pdCgmaWVlZS0+d3hfc3luY19zY2FuX3dxLCh2b2lkKCopKHZvaWQqKSkgaWVlZTgwMjExX3d4X3N5bmNfc2Nhbl93cSxpZWVlKTsKLSNlbmRpZgogCXNlbWFfaW5pdCgmaWVlZS0+d3hfc2VtLCAxKTsKIAlzZW1hX2luaXQoJmllZWUtPnNjYW5fc2VtLCAxKTsKICNpZmRlZiBFTkFCTEVfSVBTCkBAIC0zMTg5LDEwICszMDY2LDggQEAKICNlbmRpZgogCWRlbF90aW1lcl9zeW5jKCZpZWVlLT5hc3NvY2lhdGVfdGltZXIpOwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmaWVlZS0+YXNzb2NpYXRlX3JldHJ5X3dxKTsKIAlkZXN0cm95X3dvcmtxdWV1ZShpZWVlLT53cSk7Ci0jZW5kaWYKIAogCXVwKCZpZWVlLT53eF9zZW0pOwogfQpAQCAtMzY0Nyw0OSArMzUyMiwzIEBACiAJCW1lbXNldCh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgMCwgRVRIX0FMRU4pOwogCXdpcmVsZXNzX3NlbmRfZXZlbnQoaWVlZS0+ZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKIH0KLQotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsMCkpCi0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX2dldF9iZWFjb24pOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9ydGxfd2FrZV9xdWV1ZSk7Ci0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlKTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcmVzZXRfcXVldWUpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zb2Z0bWFjX3N0b3BfcHJvdG9jb2wpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zb2Z0bWFjX3N0YXJ0X3Byb3RvY29sKTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfaXNfc2hvcnRzbG90KTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfaXNfNTRnKTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3BhX3N1cHBsaWNhbnRfaW9jdGwpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9wc190eF9hY2spOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zb2Z0bWFjX3htaXQpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdG9wX3NlbmRfYmVhY29ucyk7Ci0vL0VYUE9SVF9TWU1CT0wobm90aWZ5X3d4X2Fzc29jX2V2ZW50KTsKLS8vRVhQT1JUX1NZTUJPTChTZW5kRGlzYXNzb2NpYXRpb24pOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9kaXNhc3NvY2lhdGUpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFydF9zZW5kX2JlYWNvbnMpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdG9wX3NjYW4pOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcXVlc3RzKTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc29mdG1hY19zY2FuX3N5bmNybyk7Ci0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YXJ0X3NjYW5fc3luY3JvKTsKLSNlbHNlCi1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfZ2V0X2JlYWNvbik7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfcnRsX3dha2VfcXVldWUpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9yZXNldF9xdWV1ZSk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfc29mdG1hY19zdG9wX3Byb3RvY29sKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9zb2Z0bWFjX3N0YXJ0X3Byb3RvY29sKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9pc19zaG9ydHNsb3QpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX2lzXzU0Zyk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfd3BhX3N1cHBsaWNhbnRfaW9jdGwpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3BzX3R4X2Fjayk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfc29mdG1hY194bWl0KTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9zdG9wX3NlbmRfYmVhY29ucyk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhub3RpZnlfd3hfYXNzb2NfZXZlbnQpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoU2VuZERpc2Fzc29jaWF0aW9uKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9kaXNhc3NvY2lhdGUpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3N0YXJ0X3NlbmRfYmVhY29ucyk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfc3RvcF9zY2FuKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcXVlc3RzKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9zb2Z0bWFjX3NjYW5fc3luY3JvKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9zdGFydF9zY2FuX3N5bmNybyk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfc3RhX3BzX3NlbmRfbnVsbF9mcmFtZSk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfc3RhX3BzX3NlbmRfcHNwb2xsX2ZyYW1lKTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hY193eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hY193eC5jCmluZGV4IDFiYmQ0OWYuLmQwYTEwODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWNfd3guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjX3d4LmMKQEAgLTMxMiwxNCArMzEyLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjApCiB2b2lkIGllZWU4MDIxMV93eF9zeW5jX3NjYW5fd3Eoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSwgd3hfc3luY19zY2FuX3dxKTsKLSNlbHNlCi12b2lkIGllZWU4MDIxMV93eF9zeW5jX3NjYW5fd3Eoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCi17Ci0jZW5kaWYKIAlzaG9ydCBjaGFuOwogCUhUX0VYVENITkxfT0ZGU0VUIGNoYW5fb2Zmc2V0PTA7CiAJSFRfQ0hBTk5FTF9XSURUSCBiYW5kd2lkdGg9MDsKQEAgLTMzNyw4ICszMzIsNiBAQAogCWllZWU4MDIxMV9zdGFfcHNfc2VuZF9udWxsX2ZyYW1lKGllZWUsIDEpOwogI2VuZGlmCiAKLQluZXRpZl9jYXJyaWVyX29mZihpZWVlLT5kZXYpOwotCiAJaWYgKGllZWUtPmRhdGFfaGFyZF9zdG9wKQogCQlpZWVlLT5kYXRhX2hhcmRfc3RvcChpZWVlLT5kZXYpOwogCkBAIC0zODksNyArMzgyLDYgQEAKIAlpZihpZWVlLT5pd19tb2RlID09IElXX01PREVfQURIT0MgfHwgaWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX01BU1RFUikKIAkJaWVlZTgwMjExX3N0YXJ0X3NlbmRfYmVhY29ucyhpZWVlKTsKIAotCW5ldGlmX2NhcnJpZXJfb24oaWVlZS0+ZGV2KTsKIAljb3VudCA9IDA7CiAJdXAoJmllZWUtPnd4X3NlbSk7CiAKQEAgLTQwOCwxMSArNDAwLDcgQEAKIAl9CiAKIAlpZiAoIGllZWUtPnN0YXRlID09IElFRUU4MDIxMV9MSU5LRUQpewotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogCQlxdWV1ZV93b3JrKGllZWUtPndxLCAmaWVlZS0+d3hfc3luY19zY2FuX3dxKTsKLSNlbHNlCi0JCXNjaGVkdWxlX3Rhc2soJmllZWUtPnd4X3N5bmNfc2Nhbl93cSk7Ci0jZW5kaWYKIAkJLyogaW50ZW50aW9uYWxseSBmb3JnZXQgdG8gdXAgc2VtICovCiAJCXJldHVybiAwOwogCX0KQEAgLTQ1OSwyOSArNDQ3LDggQEAKIAlpZiAod3JxdS0+ZXNzaWQuZmxhZ3MgJiYgd3JxdS0+ZXNzaWQubGVuZ3RoKSB7CiAJCS8vZmlyc3QgZmx1c2ggY3VycmVudCBuZXR3b3JrLnNzaWQKIAkJbGVuID0gKCh3cnF1LT5lc3NpZC5sZW5ndGgtMSkgPCBJV19FU1NJRF9NQVhfU0laRSkgPyAod3JxdS0+ZXNzaWQubGVuZ3RoLTEpIDogSVdfRVNTSURfTUFYX1NJWkU7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgIEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKLQkJc3RybmNweShpZWVlLT5jdXJyZW50X25ldHdvcmsuc3NpZCwgZXh0cmEsIGxlbik7Ci0JCWllZWUtPmN1cnJlbnRfbmV0d29yay5zc2lkX2xlbiA9IGxlbjsKLSNpZiAwCi0JCXsKLQkJCWludCBpOwotCQkJZm9yIChpPTA7IGk8bGVuOyBpKyspCi0JCQkJcHJpbnRrKCIlYyAiLCBleHRyYVtpXSk7Ci0JCQlwcmludGsoIlxuIik7Ci0JCX0KLSNlbmRpZgotI2Vsc2UKIAkJc3RybmNweShpZWVlLT5jdXJyZW50X25ldHdvcmsuc3NpZCwgZXh0cmEsIGxlbisxKTsKIAkJaWVlZS0+Y3VycmVudF9uZXR3b3JrLnNzaWRfbGVuID0gbGVuKzE7Ci0jaWYgMAotCQl7Ci0JCQlpbnQgaTsKLQkJCWZvciAoaT0wOyBpPGxlbiArIDE7IGkrKykKLQkJCQlwcmludGsoIiVjICIsIGV4dHJhW2ldKTsKLQkJCXByaW50aygiXG4iKTsKLQkJfQotI2VuZGlmCi0jZW5kaWYKIAkJaWVlZS0+c3NpZF9zZXQgPSAxOwogCX0KIAllbHNlewpAQCAtNjU5LDQyICs2MjYsNCBAQAogCXJldHVybiByZXQ7CiAKIH0KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApKQotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9nZXRfZXNzaWQpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9zZXRfZXNzaWQpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9zZXRfcmF0ZSk7Ci0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X2dldF9yYXRlKTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfc2V0X3dhcCk7Ci0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X2dldF93YXApOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9zZXRfbW9kZSk7Ci0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X2dldF9tb2RlKTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfc2V0X3NjYW4pOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9nZXRfZnJlcSk7Ci0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X3NldF9mcmVxKTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfc2V0X3Jhd3R4KTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfZ2V0X25hbWUpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9zZXRfcG93ZXIpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9nZXRfcG93ZXIpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93bGFuX2ZyZXF1ZW5jaWVzKTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfc2V0X3J0cyk7Ci0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X2dldF9ydHMpOwotI2Vsc2UKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV93eF9nZXRfZXNzaWQpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3d4X3NldF9lc3NpZCk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfd3hfc2V0X3JhdGUpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3d4X2dldF9yYXRlKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV93eF9zZXRfd2FwKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV93eF9nZXRfd2FwKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV93eF9zZXRfbW9kZSk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfd3hfZ2V0X21vZGUpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3d4X3NldF9zY2FuKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV93eF9nZXRfZnJlcSk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfd3hfc2V0X2ZyZXEpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3d4X3NldF9yYXd0eCk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfd3hfZ2V0X25hbWUpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3d4X3NldF9wb3dlcik7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfd3hfZ2V0X3Bvd2VyKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV93bGFuX2ZyZXF1ZW5jaWVzKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV93eF9zZXRfcnRzKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV93eF9nZXRfcnRzKTsKLSNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfdHguYwppbmRleCBhNzVmMzY2Li5kZDhhMjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKQEAgLTI4NiwxMiArMjg2LDcgQEAKIAlpZiAoZXRoLT5oX3Byb3RvICE9IGh0b25zKEVUSF9QX0lQKSkKIAkJcmV0dXJuIDA7CiAKLS8vCUlFRUU4MDIxMV9ERUJVR19EQVRBKElFRUU4MDIxMV9ETF9EQVRBLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyMikpCiAJaXAgPSBpcF9oZHIoc2tiKTsKLSNlbHNlCi0JaXAgPSAoc3RydWN0IGlwaGRyKikoc2tiLT5kYXRhICsgc2l6ZW9mKHN0cnVjdCBldGhlcl9oZWFkZXIpKTsKLSNlbmRpZgogCXN3aXRjaCAoaXAtPnRvcyAmIDB4ZmMpIHsKIAkJY2FzZSAweDIwOgogCQkJcmV0dXJuIDI7CkBAIC02MTMsMTEgKzYwOCw3IEBACiAKIGludCBpZWVlODAyMTFfcnRsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IG5ldGRldl9wcml2KGRldik7Ci0jZWxzZQotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICopZGV2LT5wcml2OwotI2VuZGlmCiAJc3RydWN0IGllZWU4MDIxMV90eGIgKnR4YiA9IE5VTEw7CiAJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHJxb3MgKmZyYWdfaGRyOwogCWludCBpLCBieXRlc19wZXJfZnJhZywgbnJfZnJhZ3MsIGJ5dGVzX2xhc3RfZnJhZywgZnJhZ19zaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKaW5kZXggNDk3MWIxYy4uYjc0NDkxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCkBAIC01NCwyNSArNTQsNyBAQAogCXsiTi01RyIsNH0sCiB9OwogCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNCwyMCkpICYmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCi1zdGF0aWMgaW5saW5lIGNoYXIgKgotaXdlX3N0cmVhbV9hZGRfZXZlbnRfcnNsKGNoYXIgKiAgICAgc3RyZWFtLCAgICAgICAgIC8qIFN0cmVhbSBvZiBldmVudHMgKi8KLSAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiAgICAgZW5kcywgICAgICAgICAgIC8qIEVuZCBvZiBzdHJlYW0gKi8KLSAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpd19ldmVudCAqaXdlLCAgICAgIC8qIFBheWxvYWQgKi8KLSAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgZXZlbnRfbGVuKSAgICAgIC8qIFJlYWwgc2l6ZSBvZiBwYXlsb2FkICovCi17Ci0gICAgICAgIC8qIENoZWNrIGlmIGl0J3MgcG9zc2libGUgKi8KLSAgICAgICAgaWYoKHN0cmVhbSArIGV2ZW50X2xlbikgPCBlbmRzKSB7Ci0gICAgICAgICAgICAgICAgaXdlLT5sZW4gPSBldmVudF9sZW47Ci0JCW5kZWxheSgxKTsgICAvL25ldwotICAgICAgICAgICAgICAgIG1lbWNweShzdHJlYW0sIChjaGFyICopIGl3ZSwgZXZlbnRfbGVuKTsKLSAgICAgICAgICAgICAgICBzdHJlYW0gKz0gZXZlbnRfbGVuOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzdHJlYW07Ci19Ci0jZWxzZQogI2RlZmluZSBpd2Vfc3RyZWFtX2FkZF9ldmVudF9yc2wgaXdlX3N0cmVhbV9hZGRfZXZlbnQKLSNlbmRpZgogCiAjZGVmaW5lIE1BWF9DVVNUT01fTEVOIDY0CiBzdGF0aWMgaW5saW5lIGNoYXIgKnJ0bDgxOXhfdHJhbnNsYXRlX3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCkBAIC05MywxMSArNzUsNyBAQAogCWl3ZS5jbWQgPSBTSU9DR0lXQVA7CiAJaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CiAJbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgbmV0d29yay0+YnNzaWQsIEVUSF9BTEVOKTsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI3KQogCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnRfcnNsKGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBJV19FVl9BRERSX0xFTik7Ci0jZWxzZQotCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnRfcnNsKHN0YXJ0LCBzdG9wLCAmaXdlLCBJV19FVl9BRERSX0xFTik7Ci0jZW5kaWYKIAkvKiBSZW1haW5pbmcgZW50cmllcyB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgb3JkZXIgd2UgcHJvdmlkZSB0aGVtICovCiAKIAkvKiBBZGQgdGhlIEVTU0lEICovCkBAIC0xMDYsMjIgKzg0LDE0IEBACiAvLwlpZiAobmV0d29yay0+ZmxhZ3MgJiBORVRXT1JLX0VNUFRZX0VTU0lEKSB7CiAJaWYgKG5ldHdvcmstPnNzaWRfbGVuID09IDApIHsKIAkJaXdlLnUuZGF0YS5sZW5ndGggPSBzaXplb2YoIjxoaWRkZW4+Iik7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNykKICAgICAgICAgICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCAiPGhpZGRlbj4iKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChzdGFydCwgc3RvcCwgJml3ZSwgIjxoaWRkZW4+Iik7Ci0jZW5kaWYKICAgICAgICAgfSBlbHNlIHsKIAkJaXdlLnUuZGF0YS5sZW5ndGggPSBtaW4obmV0d29yay0+c3NpZF9sZW4sICh1OCkzMik7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNykKICAgICAgICAgICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBuZXR3b3JrLT5zc2lkKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChzdGFydCwgc3RvcCwgJml3ZSwgbmV0d29yay0+c3NpZCk7Ci0jZW5kaWYKICAgICAgICAgfQogCS8qIEFkZCB0aGUgcHJvdG9jb2wgbmFtZSAqLwogCWl3ZS5jbWQgPSBTSU9DR0lXTkFNRTsKLQlmb3IoaT0wOyBpPChzaXplb2YoaWVlZTgwMjExX21vZGVzKS9zaXplb2YoaWVlZTgwMjExX21vZGVzWzBdKSk7IGkrKykgeworCWZvcihpPTA7IGk8QVJSQVlfU0laRShpZWVlODAyMTFfbW9kZXMpOyBpKyspIHsKIAkJaWYobmV0d29yay0+bW9kZSYoMTw8aSkpIHsKIAkJCXNwcmludGYocG5hbWUsaWVlZTgwMjExX21vZGVzW2ldLm1vZGVfc3RyaW5nLGllZWU4MDIxMV9tb2Rlc1tpXS5tb2RlX3NpemUpOwogCQkJcG5hbWUgKz1pZWVlODAyMTFfbW9kZXNbaV0ubW9kZV9zaXplOwpAQCAtMTI5LDExICs5OSw3IEBACiAJfQogCSpwbmFtZSA9ICdcMCc7CiAJc25wcmludGYoaXdlLnUubmFtZSwgSUZOQU1TSVosICJJRUVFODAyLjExJXMiLCBwcm90b19uYW1lKTsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI3KQogICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50X3JzbChpbmZvLCBzdGFydCwgc3RvcCwgJml3ZSwgSVdfRVZfQ0hBUl9MRU4pOwotI2Vsc2UKLSAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudF9yc2woc3RhcnQsIHN0b3AsICZpd2UsIElXX0VWX0NIQVJfTEVOKTsKLSNlbmRpZgogICAgICAgICAvKiBBZGQgbW9kZSAqLwogICAgICAgICBpd2UuY21kID0gU0lPQ0dJV01PREU7CiAgICAgICAgIGlmIChuZXR3b3JrLT5jYXBhYmlsaXR5ICYKQEAgLTE0MiwxMSArMTA4LDcgQEAKIAkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX01BU1RFUjsKIAkJZWxzZQogCQkJaXdlLnUubW9kZSA9IElXX01PREVfQURIT0M7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNykKICAgICAgICAgICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50X3JzbChpbmZvLCBzdGFydCwgc3RvcCwgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50X3JzbChzdGFydCwgc3RvcCwgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOwotI2VuZGlmCiAgICAgICAgIH0KIAogICAgICAgICAvKiBBZGQgZnJlcXVlbmN5L2NoYW5uZWwgKi8KQEAgLTE1NiwxMSArMTE4LDcgQEAKIAlpd2UudS5mcmVxLm0gPSBuZXR3b3JrLT5jaGFubmVsOwogCWl3ZS51LmZyZXEuZSA9IDA7CiAJaXdlLnUuZnJlcS5pID0gMDsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI3KQogICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50X3JzbChpbmZvLCBzdGFydCwgc3RvcCwgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOwotI2Vsc2UKLSAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudF9yc2woc3RhcnQsIHN0b3AsICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKLSNlbmRpZgogCS8qIEFkZCBlbmNyeXB0aW9uIGNhcGFiaWxpdHkgKi8KIAlpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKIAlpZiAobmV0d29yay0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKQpAQCAtMTY4LDExICsxMjYsNyBAQAogCWVsc2UKIAkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKIAlpd2UudS5kYXRhLmxlbmd0aCA9IDA7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNykKICAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBzdGFydCwgc3RvcCwgJml3ZSwgbmV0d29yay0+c3NpZCk7Ci0jZWxzZQotICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KHN0YXJ0LCBzdG9wLCAmaXdlLCBuZXR3b3JrLT5zc2lkKTsKLSNlbmRpZgogCS8qIEFkZCBiYXNpYyBhbmQgZXh0ZW5kZWQgcmF0ZXMgKi8KIAltYXhfcmF0ZSA9IDA7CiAJcCA9IGN1c3RvbTsKQEAgLTIxNiwzMyArMTcwLDE1IEBACiAJCWlmIChyYXRlID4gbWF4X3JhdGUpCiAJCQltYXhfcmF0ZSA9IHJhdGU7CiAJfQotI2lmIDAKLQlwcmludGsoIm1heCByYXRlOiVkID09PWJhc2ljIHJhdGU6XG4iLCBtYXhfcmF0ZSk7Ci0JZm9yIChpPTA7aTxuZXR3b3JrLT5yYXRlc19sZW47aSsrKQotCQlwcmludGsoIiAleCIsIG5ldHdvcmstPnJhdGVzW2ldKTsKLQlwcmludGsoIlxuPT09PT09PWV4dGVuZCByYXRlXG4iKTsKLQlmb3IgKGk9MDsgaTxuZXR3b3JrLT5yYXRlc19leF9sZW47IGkrKykKLQkJcHJpbnRrKCIgJXgiLCBuZXR3b3JrLT5yYXRlc19leFtpXSk7Ci0JcHJpbnRrKCJcbiIpOwotI2VuZGlmCiAJaXdlLmNtZCA9IFNJT0NHSVdSQVRFOwogCWl3ZS51LmJpdHJhdGUuZml4ZWQgPSBpd2UudS5iaXRyYXRlLmRpc2FibGVkID0gMDsKIAlpd2UudS5iaXRyYXRlLnZhbHVlID0gbWF4X3JhdGUgKiA1MDAwMDA7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNykKICAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudF9yc2woaW5mbywgc3RhcnQsIHN0b3AsICZpd2UsCiAJCQkJICAgICBJV19FVl9QQVJBTV9MRU4pOwotI2Vsc2UKLSAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudF9yc2woc3RhcnQsIHN0b3AsICZpd2UsCi0JCQkJICAgICBJV19FVl9QQVJBTV9MRU4pOwotI2VuZGlmCiAJaXdlLmNtZCA9IElXRVZDVVNUT007CiAJaXdlLnUuZGF0YS5sZW5ndGggPSBwIC0gY3VzdG9tOwogCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI3KQogICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBjdXN0b20pOwotI2Vsc2UKLSAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChzdGFydCwgc3RvcCwgJml3ZSwgY3VzdG9tKTsKLSNlbmRpZgogCS8qIEFkZCBxdWFsaXR5IHN0YXRpc3RpY3MgKi8KIAkvKiBUT0RPOiBGaXggdGhlc2UgdmFsdWVzLi4uICovCiAJaXdlLmNtZCA9IElXRVZRVUFMOwpAQCAtMjU3LDIxICsxOTMsMTMgQEAKIAlpZiAoIShuZXR3b3JrLT5zdGF0cy5tYXNrICYgSUVFRTgwMjExX1NUQVRNQVNLX1NJR05BTCkpCiAJCWl3ZS51LnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX1FVQUxfSU5WQUxJRDsKIAlpd2UudS5xdWFsLnVwZGF0ZWQgPSA3OwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjcpCiAgICAgICAgIHN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnRfcnNsKGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBJV19FVl9RVUFMX0xFTik7Ci0jZWxzZQotICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50X3JzbChzdGFydCwgc3RvcCwgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOwotI2VuZGlmCiAJaXdlLmNtZCA9IElXRVZDVVNUT007CiAJcCA9IGN1c3RvbTsKIAogCWl3ZS51LmRhdGEubGVuZ3RoID0gcCAtIGN1c3RvbTsKIAlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNykKICAgICAgICAgICAgIHN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgc3RhcnQsIHN0b3AsICZpd2UsIGN1c3RvbSk7Ci0jZWxzZQotICAgICAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChzdGFydCwgc3RvcCwgJml3ZSwgY3VzdG9tKTsKLSNlbmRpZgogI2lmIChXSVJFTEVTU19FWFQgPCAxOCkKIAlpZiAoaWVlZS0+d3BhX2VuYWJsZWQgJiYgbmV0d29yay0+d3BhX2llX2xlbil7CiAJCWNoYXIgYnVmW01BWF9XUEFfSUVfTEVOICogMiArIDMwXTsKQEAgLTI4NSwxMSArMjEzLDcgQEAKIAkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKIAkJaXdlLmNtZCA9IElXRVZDVVNUT007CiAJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNykKICAgICAgICAgICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBidWYpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KHN0YXJ0LCBzdG9wLCAmaXdlLCBidWYpOwotI2VuZGlmCiAgICAgICAgIH0KIAogCWlmIChpZWVlLT53cGFfZW5hYmxlZCAmJiBuZXR3b3JrLT5yc25faWVfbGVuKXsKQEAgLTMwNCwxMSArMjI4LDcgQEAKIAkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKIAkJaXdlLmNtZCA9IElXRVZDVVNUT007CiAJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNykKICAgICAgICAgICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBidWYpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KHN0YXJ0LCBzdG9wLCAmaXdlLCBidWYpOwotI2VuZGlmCiAgICAgICAgIH0KICNlbHNlCiAJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKQEAgLTMxOCwxMSArMjM4LDcgQEAKIAkJbWVtY3B5KGJ1ZiwgbmV0d29yay0+d3BhX2llLCBuZXR3b3JrLT53cGFfaWVfbGVuKTsKIAkJaXdlLmNtZCA9IElXRVZHRU5JRTsKIAkJaXdlLnUuZGF0YS5sZW5ndGggPSBuZXR3b3JrLT53cGFfaWVfbGVuOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjcpCiAgICAgICAgICAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBzdGFydCwgc3RvcCwgJml3ZSwgYnVmKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChzdGFydCwgc3RvcCwgJml3ZSwgYnVmKTsKLSNlbmRpZgogICAgICAgICB9CiAJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKIAlpZiAobmV0d29yay0+cnNuX2llX2xlbikKQEAgLTMzMSwxMSArMjQ3LDcgQEAKIAkJbWVtY3B5KGJ1ZiwgbmV0d29yay0+cnNuX2llLCBuZXR3b3JrLT5yc25faWVfbGVuKTsKIAkJaXdlLmNtZCA9IElXRVZHRU5JRTsKIAkJaXdlLnUuZGF0YS5sZW5ndGggPSBuZXR3b3JrLT5yc25faWVfbGVuOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjcpCiAgICAgICAgICAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBzdGFydCwgc3RvcCwgJml3ZSwgYnVmKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChzdGFydCwgc3RvcCwgJml3ZSwgYnVmKTsKLSNlbmRpZgogICAgICAgICB9CiAjZW5kaWYKIApAQCAtMzQ4LDExICsyNjAsNyBAQAogCQkgICAgICAiIExhc3QgYmVhY29uOiAlbHVtcyBhZ28iLCAoamlmZmllcyAtIG5ldHdvcmstPmxhc3Rfc2Nhbm5lZCkgLyAoSFogLyAxMDApKTsKIAlpd2UudS5kYXRhLmxlbmd0aCA9IHAgLSBjdXN0b207CiAJaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjcpCiAgICAgICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBjdXN0b20pOwotI2Vsc2UKLSAgICAgICAgICAgIHN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoc3RhcnQsIHN0b3AsICZpd2UsIGN1c3RvbSk7Ci0jZW5kaWYKIAogCXJldHVybiBzdGFydDsKIH0KQEAgLTYzMiw3ICs1NDAsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCWludCByZXQgPSAwOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpZWVlLT5kZXY7CiAgICAgICAgIHN0cnVjdCBpd19wb2ludCAqZW5jb2RpbmcgPSAmd3JxdS0+ZW5jb2Rpbmc7CiAgICAgICAgIHN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKQEAgLTgwNyw3ICs3MTQsNiBAQAogICAgICAgICAgICAgICAgIElFRUU4MDIxMV9ERUJVR19XWCgiJXM6IHJlc2V0X3BvcnQgZmFpbGVkXG4iLCBkZXYtPm5hbWUpOwogICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwogICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAgcmV0dXJuIHJldDsKIH0KIApAQCAtODcwLDcgKzc3Niw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsMCkKIAlzdHJ1Y3QgaXdfbWxtZSAqbWxtZSA9IChzdHJ1Y3QgaXdfbWxtZSAqKSBleHRyYTsKIAlzd2l0Y2ggKG1sbWUtPmNtZCkgewogICAgICAgICBjYXNlIElXX01MTUVfREVBVVRIOgpAQCAtODgwLDcgKzc4NSw2IEBACiAJIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOwogICAgICAgICB9Ci0jZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApAQCAtODg4LDcgKzc5Miw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKmRhdGEsIGNoYXIgKmV4dHJhKQogewotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogCXN3aXRjaCAoZGF0YS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CiAgICAgICAgIGNhc2UgSVdfQVVUSF9XUEFfVkVSU0lPTjoKIAkgICAgIC8qbmVlZCB0byBzdXBwb3J0IHdwYTIgaGVyZSovCkBAIC05NDYsMjMgKzg0OSwxMiBAQAogCWRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KLSNlbmRpZgogCXJldHVybiAwOwogfQogI2VuZGlmCiAjaWYgMQogaW50IGllZWU4MDIxMV93eF9zZXRfZ2VuX2llKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1OCAqaWUsIHNpemVfdCBsZW4pCiB7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0jaWYgMAotCXByaW50aygiPT09PT4lcygpXG4iLCBfX0ZVTkNUSU9OX18pOwotCXsKLQkJaW50IGk7Ci0JCWZvciAoaT0wOyBpPGxlbjsgaSsrKQotCQlwcmludGsoIiUyeCAiLCBpZVtpXSYweGZmKTsKLQkJcHJpbnRrKCJcbiIpOwotCX0KLSNlbmRpZgogCXU4ICpidWY7CiAKIAlpZiAobGVuPk1BWF9XUEFfSUVfTEVOIHx8IChsZW4gJiYgaWUgPT0gTlVMTCkpCkBAIC05OTIsMjkgKzg4NCw3IEBACiAJCWllZWUtPndwYV9pZSA9IE5VTEw7CiAJCWllZWUtPndwYV9pZV9sZW4gPSAwOwogCX0KLSNlbmRpZgogCXJldHVybiAwOwogCiB9CiAjZW5kaWYKLQotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsMCkpCi0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X3NldF9nZW5faWUpOwotI2lmIChXSVJFTEVTU19FWFQgPj0gMTgpCi0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X3NldF9tbG1lKTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfc2V0X2F1dGgpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9zZXRfZW5jb2RlX2V4dCk7Ci0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X2dldF9lbmNvZGVfZXh0KTsKLSNlbmRpZgotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9nZXRfc2Nhbik7Ci0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X3NldF9lbmNvZGUpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9nZXRfZW5jb2RlKTsKLSNlbHNlCi0vL0VYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV93eF9zZXRfZ2VuX2llKTsKLS8vRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3d4X3NldF9tbG1lKTsKLS8vRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3d4X3NldF9hdXRoKTsKLS8vRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3d4X3NldF9lbmNvZGVfZXh0KTsKLS8vRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3d4X2dldF9zY2FuKTsKLS8vRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3d4X3NldF9lbmNvZGUpOwotLy9FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfd3hfZ2V0X2VuY29kZSk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9IVFByb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9IVFByb2MuYwppbmRleCA0YzRiMWRmLi5iMGM5Yzc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL3J0bDgxOXhfSFRQcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X0hUUHJvYy5jCkBAIC0xMDI0LDE3ICsxMDI0LDYgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIHZvaWQgSFRTZXRDb25uZWN0QndNb2RlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlKiBpZWVlLCBIVF9DSEFOTkVMX1dJRFRICUJhbmR3aWR0aCwgSFRfRVhUQ0hOTF9PRkZTRVQJT2Zmc2V0KTsKLSNpZiAwCi0vL0kgbmVlZCBtb3ZlIHRoaXMgZnVuY3Rpb24gdG8gb3RoZXIgcGxhY2VzLCBzdWNoIGFzIHJ4PwotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKLXZvaWQgSFRPbkFzc29jUnNwX3dxKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSwgaHRfb25Bc3NSc3ApOwotI2Vsc2UKLXZvaWQgSFRPbkFzc29jUnNwX3dxKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQotewotI2VuZGlmCi0jZW5kaWYKIHZvaWQgSFRPbkFzc29jUnNwKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQogewogCVBSVF9ISUdIX1RIUk9VR0hQVVQJcEhUSW5mbyA9IGllZWUtPnBIVEluZm87CkBAIC0xNzYwLDkgKzE3NDksMyBAQAogCiAJcEhUSW5mby0+YlN3QndJblByb2dyZXNzID0gZmFsc2U7CiB9Ci0KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkKLS8vRVhQT1JUX1NZTUJPTF9OT1ZFUlMoSFRVcGRhdGVTZWxmQW5kUGVlclNldHRpbmcpOwotI2Vsc2UKLS8vRVhQT1JUX1NZTUJPTChIVFVwZGF0ZVNlbGZBbmRQZWVyU2V0dGluZyk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MF9ydGw4MjU2LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTBfcnRsODI1Ni5jCmluZGV4IDczOTFmNWYuLjhiZDViMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MF9ydGw4MjU2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkwX3J0bDgyNTYuYwpAQCAtNTAxLDEzICs1MDEsMTMgQEAKIAkJCQlpZigocHJpdi0+aWVlZTgwMjExLT5lUkZQb3dlclN0YXRlID09IGVSZk9mZikgJiYgUlRfSU5fUFNfTEVWRUwocFBTQywgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMpKQogCQkJCXsgLy8gVGhlIGN1cnJlbnQgUkYgc3RhdGUgaXMgT0ZGIGFuZCB0aGUgUkYgT0ZGIGxldmVsIGlzIGhhbHRpbmcgdGhlIE5JQywgcmUtaW5pdGlhbGl6ZSB0aGUgTklDLgogCQkJCQlib29sIHJ0c3RhdHVzID0gdHJ1ZTsKLQkJCQkJdTMyIEluaXRpbGl6ZUNvdW50ID0gMzsKKwkJCQkJdTMyIEluaXRpYWxpemVDb3VudCA9IDM7CiAJCQkJCWRvCiAJCQkJCXsKLQkJCQkJCUluaXRpbGl6ZUNvdW50LS07CisJCQkJCQlJbml0aWFsaXplQ291bnQtLTsKIAkJCQkJCXByaXYtPlJlZ1JmT2ZmID0gZmFsc2U7CiAJCQkJCQlydHN0YXR1cyA9IE5pY0lGRW5hYmxlTklDKGRldik7Ci0JCQkJCX13aGlsZSggKHJ0c3RhdHVzICE9IHRydWUpICYmKEluaXRpbGl6ZUNvdW50ID4wKSApOworCQkJCQl9d2hpbGUoIChydHN0YXR1cyAhPSB0cnVlKSAmJihJbml0aWFsaXplQ291bnQgPjApICk7CiAKIAkJCQkJaWYocnRzdGF0dXMgIT0gdHJ1ZSkKIAkJCQkJewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRS5oCmluZGV4IGY0YmU5Y2MuLjg2NWNkYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFLmgKQEAgLTE0NjgsNyArMTQ2OCw2IEBACiAKICNlbmRpZgogYm9vbCBpbml0X2Zpcm13YXJlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotdm9pZCBydGw4MTl4RV90eF9jbWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBzaG9ydCBydGw4MTkyX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmKiBza2IpOwogdTMyIHJlYWRfY2FtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGFkZHIpOwogdm9pZCB3cml0ZV9jYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggYWRkciwgdTMyIGRhdGEpOwpAQCAtMTUwMywxMCArMTUwMiw5IEBACiB2b2lkIHJ0bDgxODVfdHhfYW50ZW5uYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBhbnQpOwogdm9pZCBydGw4MTg3X3NldF9yeGNvbmYoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAvL3Nob3J0IGNoZWNrX25pY19lbm91Z2hfZGVzYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBwcmlvcml0eV90IHByaW9yaXR5KTsKLXZvaWQgcnRsODE5Ml9zdGFydF9iZWFjb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiB2b2lkIENhbVJlc2V0QWxsRW50cnkoc3RydWN0IG5ldF9kZXZpY2UqIGRldik7CiB2b2lkIEVuYWJsZUhXU2VjdXJpdHlDb25maWc4MTkyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotdm9pZCBzZXRLZXkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggRW50cnlObywgdTggS2V5SW5kZXgsIHUxNiBLZXlUeXBlLCB1OCAqTWFjQWRkciwgdTggRGVmYXVsdEtleSwgdTMyICpLZXlDb250ZW50ICk7Cit2b2lkIHNldEtleShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBFbnRyeU5vLCB1OCBLZXlJbmRleCwgdTE2IEtleVR5cGUsIGNvbnN0IHU4ICpNYWNBZGRyLCB1OCBEZWZhdWx0S2V5LCB1MzIgKktleUNvbnRlbnQgKTsKIHZvaWQgQ2FtUHJpbnREYmdSZWcoc3RydWN0IG5ldF9kZXZpY2UqIGRldik7CiBleHRlcm4Jdm9pZAlkbV9jY2tfdHhwb3dlcl9hZGp1c3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldixib29sICBiaW5jaDE0KTsKIGV4dGVybiB2b2lkIGZpcm13YXJlX2luaXRfcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfY29yZS5jCmluZGV4IGViNDE0MDIuLjRjZDA3MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfY29yZS5jCkBAIC05MiwxMiArOTIsOCBAQAogCQkJLy8JQ09NUF9QT1dFUl9UUkFDS0lORwl8CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyAJQ09NUF9JTlRSICAgICAgIHwKIAkJCQlDT01QX0VSUiA7IC8vYWx3YXlzIG9wZW4gZXJyIGZsYWdzIG9uCi0jaWZuZGVmIFBDSV9ERVZJQ0UKLSNkZWZpbmUgUENJX0RFVklDRSh2ZW5kLGRldilcCi0JLnZlbmRvcj0odmVuZCksLmRldmljZT0oZGV2KSxcCi0JLnN1YnZlbmRvcj1QQ0lfQU5ZX0lELC5zdWJkZXZpY2U9UENJX0FOWV9JRAotI2VuZGlmCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcnRsODE5Ml9wY2lfaWRfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ0bDgxOTJfcGNpX2lkX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CiAjaWZkZWYgUlRMODE5MFAKIAkvKiBSZWFsdGVrICovCiAJLyogRGxpbmsgKi8KQEAgLTE1NSw2ICsxNTEsMTYgQEAKICNlbmRpZgogfTsKIAorc3RhdGljIHZvaWQgcnRsODE5Ml9zdGFydF9iZWFjb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBydGw4MTkyX3N0b3BfYmVhY29uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgcnRsODE5eF93YXRjaGRvZ193cWNhbGxiYWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitzdGF0aWMgdm9pZCBydGw4MTkyX2lycV9yeF90YXNrbGV0KHN0cnVjdCByODE5Ml9wcml2ICpwcml2KTsKK3N0YXRpYyB2b2lkIHJ0bDgxOTJfaXJxX3R4X3Rhc2tsZXQoc3RydWN0IHI4MTkyX3ByaXYgKnByaXYpOworc3RhdGljIHZvaWQgcnRsODE5Ml9wcmVwYXJlX2JlYWNvbihzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdik7CitzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE5Ml9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqbmV0ZGV2KTsKK3N0YXRpYyB2b2lkIHJ0bDgxOTJfdHJ5X3dha2VfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHByaSk7CitzdGF0aWMgdm9pZCBydGw4MTl4RV90eF9jbWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKICNpZmRlZiBFTkFCTEVfRE9UMTFECiAKIHR5cGVkZWYgc3RydWN0IF9DSEFOTkVMX0xJU1QKQEAgLTE2Myw3ICsxNjksNyBAQAogCXU4CUxlbjsKIH1DSEFOTkVMX0xJU1QsICpQQ0hBTk5FTF9MSVNUOwogCi1zdGF0aWMgQ0hBTk5FTF9MSVNUIENoYW5uZWxQbGFuW10gPSB7CitzdGF0aWMgY29uc3QgQ0hBTk5FTF9MSVNUIENoYW5uZWxQbGFuW10gPSB7CiAJe3sxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwzNiw0MCw0NCw0OCw1Miw1Niw2MCw2NCwxNDksMTUzLDE1NywxNjEsMTY1fSwyNH0sICAJCS8vRkNDCiAJe3sxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMX0sMTF9LCAgICAgICAgICAgICAgICAgICAgCQkJCS8vSUMKIAl7ezEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDM2LDQwLDQ0LDQ4LDUyLDU2LDYwLDY0fSwyMX0sICAJLy9FVFNJCkBAIC0zNDksOCArMzU1LDggQEAKIAkvL3N0cnVjdCByODE5Ml9wcml2KiBwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAkvL3N0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTgwMjExOwogCi0Jc3RhdGljIHU4IGNjbXBfaWVbNF0gPSB7MHgwMCwweDUwLDB4ZjIsMHgwNH07Ci0Jc3RhdGljIHU4IGNjbXBfcnNuX2llWzRdID0gezB4MDAsIDB4MGYsIDB4YWMsIDB4MDR9OworCXN0YXRpYyBjb25zdCB1OCBjY21wX2llWzRdID0gezB4MDAsMHg1MCwweGYyLDB4MDR9OworCXN0YXRpYyBjb25zdCB1OCBjY21wX3Jzbl9pZVs0XSA9IHsweDAwLCAweDBmLCAweGFjLCAweDA0fTsKIAlpbnQgd3BhX2llX2xlbj0gaWVlZS0+d3BhX2llX2xlbjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEqIGNyeXB0OwogCWludCBlbmNyeXB0OwpAQCAtNDg3LDE1ICs0OTMsMTMgQEAKIC8qIHRoaXMgbWlnaHQgc3RpbGwgY2FsbGVkIGluIHdoYXQgd2FzIHRoZSBQSFkgcnRsODE4NS9ydGw4MTkyIGNvbW1vbiBjb2RlCiAgKiBwbGFucyBhcmUgdG8gcG9zc2liaWx0eSB0dXJuIGl0IGFnYWluIGluIG9uZSBjb21tb24gY29kZS4uLgogICovCi1pbmxpbmUgdm9pZCBmb3JjZV9wY2lfcG9zdGluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQordm9pZCBmb3JjZV9wY2lfcG9zdGluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogfQogCiAKIC8vd2FybmluZyBtZXNzYWdlIFdCCi1pcnFyZXR1cm5fdCBydGw4MTkyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpuZXRkZXYpOwogLy9zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnJ0bDgxOTJfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci12b2lkIHJ0bDgxOTJfY29tbWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogLy92b2lkIHJ0bDgxOTJfcmVzdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgcnRsODE5Ml9yZXN0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAvL3ZvaWQgcnRsODE5Ml9ycV90eF9hY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKQEAgLTk0MCw3ICs5NDQsNyBAQAogICogIEhJR0hfUVVFVUUgICAgID09PT4gICAgICAgICAgICAgICAgICAgICAgICA3CiAgKiAgQkVBQ09OX1FVRVVFICAgPT09PiAgICAgICAgICAgICAgICAgICAgICAgIDgKICAqICAqLwotc3RhdGljIHUzMiBUWF9ERVNDX0JBU0VbXSA9IHtCS1FEQSwgQkVRREEsIFZJUURBLCBWT1FEQSwgSENDQVFEQSwgQ1FEQSwgTVFEQSwgSFFEQSwgQlFEQX07CitzdGF0aWMgY29uc3QgdTMyIFRYX0RFU0NfQkFTRVtdID0ge0JLUURBLCBCRVFEQSwgVklRREEsIFZPUURBLCBIQ0NBUURBLCBDUURBLCBNUURBLCBIUURBLCBCUURBfTsKIHZvaWQgcnRsODE5Ml90eF9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICBzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxOTJfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7CkBAIC0xMTE2LDcgKzExMjAsNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyB1MTYgcnRsX3JhdGVbXSA9IHsxMCwyMCw1NSwxMTAsNjAsOTAsMTIwLDE4MCwyNDAsMzYwLDQ4MCw1NDB9Oworc3RhdGljIGNvbnN0IHUxNiBydGxfcmF0ZVtdID0gezEwLDIwLDU1LDExMCw2MCw5MCwxMjAsMTgwLDI0MCwzNjAsNDgwLDU0MH07CiBpbmxpbmUgdTE2IHJ0bDgxOTJfcmF0ZTJyYXRlKHNob3J0IHJhdGUpCiB7CiAJaWYgKHJhdGUgPjExKSByZXR1cm4gMDsKQEAgLTEyNTIsOCArMTI1Niw2IEBACiB9CiAKIAotdm9pZCBydGw4MTkyX3RyeV93YWtlX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwcmkpOwotCiBzdGF0aWMgdm9pZCBydGw4MTkyX3R4X2lzcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcHJpbykKIHsKICAgICBzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxOTJfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7CkBAIC0xNzMzLDExICsxNzM1LDYgQEAKICAgICBwZGVzYy0+Tm9FbmMgPSAxOwogICAgIHBkZXNjLT5TZWNUeXBlID0gMHgwOwogICAgIGlmICh0Y2JfZGVzYy0+Ykh3U2VjKSB7Ci0gICAgICAgIHN0YXRpYyB1OCB0bXAgPTA7Ci0gICAgICAgIGlmICghdG1wKSB7Ci0gICAgICAgICAgICBwcmludGsoIj09Pj09PT09PT09PT09PT09PT1odyBzZWNcbiIpOwotICAgICAgICAgICAgdG1wID0gMTsKLSAgICAgICAgfQogICAgICAgICBzd2l0Y2ggKHByaXYtPmllZWU4MDIxMS0+cGFpcndpc2Vfa2V5X3R5cGUpIHsKICAgICAgICAgICAgIGNhc2UgS0VZX1RZUEVfV0VQNDA6CiAgICAgICAgICAgICBjYXNlIEtFWV9UWVBFX1dFUDEwNDoKQEAgLTE5ODgsNyArMTk4NSw3IEBACiAvKgogKiBiYWNrZ3JvdW5kIHN1cHBvcnQgdG8gcnVuIFFvUyBhY3RpdmF0ZSBmdW5jdGlvbmFsaXR5CiAqLwotc3RhdGljIGludCBXRENBUEFSQV9BRERbXSA9IHtFRENBUEFSQV9CRSxFRENBUEFSQV9CSyxFRENBUEFSQV9WSSxFRENBUEFSQV9WT307CitzdGF0aWMgY29uc3QgaW50IFdEQ0FQQVJBX0FERFtdID0ge0VEQ0FQQVJBX0JFLEVEQ0FQQVJBX0JLLEVEQ0FQQVJBX1ZJLEVEQ0FQQVJBX1ZPfTsKIHN0YXRpYyB2b2lkIHJ0bDgxOTJfcW9zX2FjdGl2YXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqIHdvcmspCiB7CiAgICAgICAgIHN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByODE5Ml9wcml2LCBxb3NfYWN0aXZhdGUpOwpAQCAtMjY0NiwxMSArMjY0Myw2IEBACiAJbXV0ZXhfaW5pdCgmcHJpdi0+bXV0ZXgpOwogfQogCi1leHRlcm4gIHZvaWQgICAgcnRsODE5eF93YXRjaGRvZ193cWNhbGxiYWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci0KLXZvaWQgcnRsODE5Ml9pcnFfcnhfdGFza2xldChzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdik7Ci12b2lkIHJ0bDgxOTJfaXJxX3R4X3Rhc2tsZXQoc3RydWN0IHI4MTkyX3ByaXYgKnByaXYpOwotdm9pZCBydGw4MTkyX3ByZXBhcmVfYmVhY29uKHN0cnVjdCByODE5Ml9wcml2ICpwcml2KTsKIC8vaW5pdCB0YXNrbGV0IGFuZCB3YWl0X3F1ZXVlIGhlcmUuIG9ubHkgMi42IGFib3ZlIGtlcm5lbCBpcyBjb25zaWRlcmVkCiAjZGVmaW5lIERSVl9OQU1FICJ3bGFuMCIKIHN0YXRpYyB2b2lkIHJ0bDgxOTJfaW5pdF9wcml2X3Rhc2soc3RydWN0IG5ldF9kZXZpY2UqIGRldikKQEAgLTM4MDcsNyArMzc5OSw3IEBACiAKIH0KIAotdm9pZCBydGw4MTkyX3ByZXBhcmVfYmVhY29uKHN0cnVjdCByODE5Ml9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgcnRsODE5Ml9wcmVwYXJlX2JlYWNvbihzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCS8vdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTM4MzcsNyArMzgyOSw3IEBACiAgKiBydGw4MTkyX2JlYWNvbl90eF9lbmFibGUoKS4gcnRsODE5Ml9iZWFjb25fdHhfZGlzYWJsZSgpIG1pZ2h0CiAgKiBiZSB1c2VkIHRvIHN0b3AgYmVhY29uIHRyYW5zbWlzc2lvbgogICovCi12b2lkIHJ0bDgxOTJfc3RhcnRfYmVhY29uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBydGw4MTkyX3N0YXJ0X2JlYWNvbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gKHN0cnVjdCByODE5Ml9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldCA9ICZwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yazsKQEAgLTQxMjQsMTQgKzQxMTYsMTQgQEAKIHsKIAl1OCBFbnRyeUlkID0gMDsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JdTgqCU1hY0FkZHIgPSBwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5ic3NpZDsKKwljb25zdCB1OCoJTWFjQWRkciA9IHByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLmJzc2lkOwogCi0Jc3RhdGljIHU4CUNBTV9DT05TVF9BRERSWzRdWzZdID0geworCXN0YXRpYyBjb25zdCB1OAlDQU1fQ09OU1RfQUREUls0XVs2XSA9IHsKIAkJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAogCQl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMX0sCiAJCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyfSwKIAkJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDN9fTsKLQlzdGF0aWMgdTgJQ0FNX0NPTlNUX0JST0FEW10gPQorCXN0YXRpYyBjb25zdCB1OAlDQU1fQ09OU1RfQlJPQURbXSA9CiAJCXsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTsKIAogCVJUX1RSQUNFKENPTVBfU0VDLCAiQ2FtUmVzdG9yZUFsbEVudHJ5OiBcbiIpOwpAQCAtNDMxOCw3ICs0MzEwLDYgQEAKIAkJCWRlbF90aW1lcl9zeW5jKCZpZWVlLT5hc3NvY2lhdGVfdGltZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsX2RlbGF5ZWRfd29yaygmaWVlZS0+YXNzb2NpYXRlX3JldHJ5X3dxKTsKIAkJCWllZWU4MDIxMV9zdG9wX3NjYW4oaWVlZSk7Ci0JCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwogCQkJdXAoJmllZWUtPnd4X3NlbSk7CiAJCX0KIAkJZWxzZXsKQEAgLTQ2NjksNyArNDY2MCw3IEBACiB9CiAKIAotdm9pZCBydGw4MTl4X3dhdGNoZG9nX3dxY2FsbGJhY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHZvaWQgcnRsODE5eF93YXRjaGRvZ193cWNhbGxiYWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IGNvbnRhaW5lcl9vZih3b3JrLHN0cnVjdCBkZWxheWVkX3dvcmssd29yayk7CiAgICAgICAgc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoZHdvcmssc3RydWN0IHI4MTkyX3ByaXYsd2F0Y2hfZG9nX3dxKTsKQEAgLTYwNzYsNyArNjA2Nyw3IEBACiAJfQogfQogCi12b2lkIHJ0bDgxOTJfaXJxX3R4X3Rhc2tsZXQoc3RydWN0IHI4MTkyX3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBydGw4MTkyX2lycV90eF90YXNrbGV0KHN0cnVjdCByODE5Ml9wcml2ICpwcml2KQogewogICAgICAgIHJ0bDgxOTJfdHhfcmVzdW1lKHByaXYtPmllZWU4MDIxMS0+ZGV2KTsKIH0KQEAgLTYzMDUsNyArNjI5Niw3IEBACiAKIH0KIAotdm9pZCBydGw4MTkyX2lycV9yeF90YXNrbGV0KHN0cnVjdCByODE5Ml9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgcnRsODE5Ml9pcnFfcnhfdGFza2xldChzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdikKIHsKICAgICAgICBydGw4MTkyX3J4KHByaXYtPmllZWU4MDIxMS0+ZGV2KTsKIAkvKiB1bm1hc2sgUkRVICovCkBAIC02NjQwLDcgKzY2MzEsNyBAQAogfQogCiAvL3dhcm5pbmcgbWVzc2FnZSBXQgotaXJxcmV0dXJuX3QgcnRsODE5Ml9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqbmV0ZGV2KQorc3RhdGljIGlycXJldHVybl90IHJ0bDgxOTJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKm5ldGRldikKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIG5ldGRldjsKICAgICBzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxOTJfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7CkBAIC02Nzg0LDcgKzY3NzUsNyBAQAogICAgIHJldHVybiBJUlFfSEFORExFRDsKIH0KIAotdm9pZCBydGw4MTkyX3RyeV93YWtlX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwcmkpCitzdGF0aWMgdm9pZCBydGw4MTkyX3RyeV93YWtlX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwcmkpCiB7CiAjaWYgMAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC02ODQ3LDcgKzY4MzgsNyBAQAogCQl1OCBFbnRyeU5vLAogCQl1OCBLZXlJbmRleCwKIAkJdTE2IEtleVR5cGUsCi0JCXU4ICpNYWNBZGRyLAorCQljb25zdCB1OCAqTWFjQWRkciwKIAkJdTggRGVmYXVsdEtleSwKIAkJdTMyICpLZXlDb250ZW50ICkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfZG0uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfZG0uYwppbmRleCBhMjQ5ZjAwLi5hNTg4NGM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX2RtLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV9kbS5jCkBAIC0yNiwyMCArMjYsMjAgQEAKIC8vIEluZGljYXRlIGRpZmZlcmVudCBBUCB2ZW5kb3IgZm9yIElPVCBpc3N1ZS4KIC8vCiAjaWZkZWYgIFJUTDgxOTBQCi1zdGF0aWMgdTMyIGVkY2Ffc2V0dGluZ19ETFtIVF9JT1RfUEVFUl9NQVhdID0KK3N0YXRpYyBjb25zdCB1MzIgZWRjYV9zZXR0aW5nX0RMW0hUX0lPVF9QRUVSX01BWF0gPQogeyAweDVlNDMyMiwgCTB4NWU0MzIyLCAJMHg1ZTQzMjIsICAJMHg2MDQzMjIsIAkweGE0NGYsIAkweDVlNDMyMiwJMHg1ZTQzMjJ9Owotc3RhdGljIHUzMiBlZGNhX3NldHRpbmdfVUxbSFRfSU9UX1BFRVJfTUFYXSA9CitzdGF0aWMgY29uc3QgdTMyIGVkY2Ffc2V0dGluZ19VTFtIVF9JT1RfUEVFUl9NQVhdID0KIHsgMHg1ZTQzMjIsIAkweGE0NGYsIAkweDVlNDMyMiwgIAkweDYwNDMyMiwgCTB4NWU0MzIyLCAJMHg1ZTQzMjIsCTB4NWU0MzIyfTsKICNlbHNlCiAjaWZkZWYgUlRMODE5MkUKLXN0YXRpYyB1MzIgZWRjYV9zZXR0aW5nX0RMW0hUX0lPVF9QRUVSX01BWF0gPQorc3RhdGljIGNvbnN0IHUzMiBlZGNhX3NldHRpbmdfRExbSFRfSU9UX1BFRVJfTUFYXSA9CiB7IDB4NWU0MzIyLCAJMHg1ZTQzMjIsIAkweDVlNDMyMiwgCTB4NjA0MzIyLCAJMHhhNDRmLCAJMHg1ZTQzMjIsCTB4NWU0MzIyfTsKLXN0YXRpYyB1MzIgZWRjYV9zZXR0aW5nX1VMW0hUX0lPVF9QRUVSX01BWF0gPQorc3RhdGljIGNvbnN0IHUzMiBlZGNhX3NldHRpbmdfVUxbSFRfSU9UX1BFRVJfTUFYXSA9CiB7IDB4NWU0MzIyLCAJMHhhNDRmLAkJMHg1ZTQzMjIsICAJMHg2MDQzMjIsIAkweDVlNDMyMiwgCTB4NWU0MzIyLCAJMHg1ZTQzMjJ9OwogI2Vsc2UKLXN0YXRpYyB1MzIgZWRjYV9zZXR0aW5nX0RMW0hUX0lPVF9QRUVSX01BWF0gPQorc3RhdGljIGNvbnN0IHUzMiBlZGNhX3NldHRpbmdfRExbSFRfSU9UX1BFRVJfTUFYXSA9CiB7IDB4NWU0MzIyLCAJMHg1ZTQzMjIsIAkweDVlNDMyMiwgCTB4NjA0MzIyLCAJMHhhNDRmLCAJMHg1ZWE0NGYsIAkweDVlNDMyMn07Ci1zdGF0aWMgdTMyIGVkY2Ffc2V0dGluZ19VTFtIVF9JT1RfUEVFUl9NQVhdID0KK3N0YXRpYyBjb25zdCB1MzIgZWRjYV9zZXR0aW5nX1VMW0hUX0lPVF9QRUVSX01BWF0gPQogeyAweDVlNDMyMiwgCTB4YTQ0ZiwgCTB4NWU0MzIyLCAJMHg2MDQzMjIsIAkweDVlYTQ0ZiwgCTB4NWVhNDRmLCAJMHg1ZTQzMjJ9OwogI2VuZGlmCiAjZW5kaWYKQEAgLTU5Miw3ICs1OTIsNyBAQAogCiAvL09GRE0gZGVmYXVsdCBhdCAwZGIsIGluZGV4PTYuCiAjaWZuZGVmIFJUTDgxOTBQCi1zdGF0aWMgdTMyIE9GRE1Td2luZ1RhYmxlW09GRE1fVGFibGVfTGVuZ3RoXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgT0ZETVN3aW5nVGFibGVbT0ZETV9UYWJsZV9MZW5ndGhdID0gewogCTB4N2Y4MDAxZmUsCS8vIDAsICs2ZGIKIAkweDcxYzAwMWM3LAkvLyAxLCArNWRiCiAJMHg2NTQwMDE5NSwJLy8gMiwgKzRkYgpAQCAtNjEzLDcgKzYxMyw3IEBACiAJMHgxMjAwMDA0OCwJLy8gMTcsIC0xMWRiCiAJMHgxMDAwMDA0MAkvLyAxOCwgLTEyZGIKIH07Ci1zdGF0aWMgdTgJQ0NLU3dpbmdUYWJsZV9DaDFfQ2gxM1tDQ0tfVGFibGVfbGVuZ3RoXVs4XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBDQ0tTd2luZ1RhYmxlX0NoMV9DaDEzW0NDS19UYWJsZV9sZW5ndGhdWzhdID0gewogCXsweDM2LCAweDM1LCAweDJlLCAweDI1LCAweDFjLCAweDEyLCAweDA5LCAweDA0fSwJLy8gMCwgKzBkYiA9PT0+IENDSzQwTSBkZWZhdWx0CiAJezB4MzAsIDB4MmYsIDB4MjksIDB4MjEsIDB4MTksIDB4MTAsIDB4MDgsIDB4MDN9LAkvLyAxLCAtMWRiCiAJezB4MmIsIDB4MmEsIDB4MjUsIDB4MWUsIDB4MTYsIDB4MGUsIDB4MDcsIDB4MDN9LAkvLyAyLCAtMmRiCkBAIC02MjgsNyArNjI4LDcgQEAKIAl7MHgwZiwgMHgwZiwgMHgwZCwgMHgwYiwgMHgwOCwgMHgwNSwgMHgwMywgMHgwMX0JLy8gMTEsIC0xMWRiCiB9OwogCi1zdGF0aWMgdTgJQ0NLU3dpbmdUYWJsZV9DaDE0W0NDS19UYWJsZV9sZW5ndGhdWzhdID0geworc3RhdGljIGNvbnN0IHU4IENDS1N3aW5nVGFibGVfQ2gxNFtDQ0tfVGFibGVfbGVuZ3RoXVs4XSA9IHsKIAl7MHgzNiwgMHgzNSwgMHgyZSwgMHgxYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCS8vIDAsICswZGIgID09PT4gQ0NLNDBNIGRlZmF1bHQKIAl7MHgzMCwgMHgyZiwgMHgyOSwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCS8vIDEsIC0xZGIKIAl7MHgyYiwgMHgyYSwgMHgyNSwgMHgxNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCS8vIDIsIC0yZGIKQEAgLTIwOTQsOCArMjA5NCw2IEBACiAJCWRtX2N0cmxfaW5pdGdhaW5fYnlyc3NpX2J5X2Z3ZmFsc2VfYWxhcm0oZGV2KTsKIAllbHNlIGlmKGRtX2RpZ3RhYmxlLmRpZ19hbGdvcml0aG0gPT0gRElHX0FMR09fQllfUlNTSSkKIAkJZG1fY3RybF9pbml0Z2Fpbl9ieXJzc2lfYnlfZHJpdmVycnNzaShkZXYpOwotCWVsc2UKLQkJcmV0dXJuOwogfQogCiAKQEAgLTI5MzgsOCArMjkzNiw2IEBACiAJUlRfUkZfUE9XRVJfU1RBVEUJZVJmUG93ZXJTdGF0ZVRvU2V0OwogCWJvb2wgYkFjdHVhbGx5U2V0ID0gZmFsc2U7CiAKLQkJYkFjdHVhbGx5U2V0PWZhbHNlOwotCiAJCWlmKCFwcml2LT51cCkKIAkJewogCQlSVF9UUkFDRSgoQ09NUF9JTklUIHwgQ09NUF9QT1dFUiB8IENPTVBfUkYpLCJkbV9ncGlvX2NoYW5nZV9yZl9jYWxsYmFjaygpOiBDYWxsYmFjayBmdW5jdGlvbiBicmVha3Mgb3V0ISFcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV93eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV93eC5jCmluZGV4IDBiMGYzOWMuLjU3NDJjZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfd3guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX3d4LmMKQEAgLTI2LDcgKzI2LDcgQEAKICNlbmRpZgogCiAjZGVmaW5lIFJBVEVfQ09VTlQgMTIKLXN0YXRpYyB1MzIgcnRsODE4MF9yYXRlc1tdID0gezEwMDAwMDAsMjAwMDAwMCw1NTAwMDAwLDExMDAwMDAwLAorc3RhdGljIGNvbnN0IHUzMiBydGw4MTgwX3JhdGVzW10gPSB7MTAwMDAwMCwyMDAwMDAwLDU1MDAwMDAsMTEwMDAwMDAsCiAJNjAwMDAwMCw5MDAwMDAwLDEyMDAwMDAwLDE4MDAwMDAwLDI0MDAwMDAwLDM2MDAwMDAwLDQ4MDAwMDAwLDU0MDAwMDAwfTsKIAogCkBAIC0xMzcsMTYxICsxMzcsNiBAQAogCXJldHVybiBpZWVlODAyMTFfd3hfZ2V0X3Bvd2VyKHByaXYtPmllZWU4MDIxMSxpbmZvLHdycXUsZXh0cmEpOwogfQogCi0jaWZkZWYgSk9ITl9JT0NUTAotdTE2IHJlYWRfcnRsODIyNShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBhZGRyKTsKLXZvaWQgd3JpdGVfcnRsODIyNShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBhZHIsIHUxNiBkYXRhKTsKLXUzMiBqb2huX3JlYWRfcnRsODIyNShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBhZHIpOwotdm9pZCBfd3JpdGVfcnRsODIyNShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBhZHIsIHUxNiBkYXRhKTsKLQotc3RhdGljIGludCByODE5Ml93eF9yZWFkX3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQl1OCBhZGRyOwotCXUxNiBkYXRhMTsKLQotCWRvd24oJnByaXYtPnd4X3NlbSk7Ci0KLQotCWdldF91c2VyKGFkZHIsKHU4Kil3cnF1LT5kYXRhLnBvaW50ZXIpOwotCWRhdGExID0gcmVhZF9ydGw4MjI1KGRldiwgYWRkcik7Ci0Jd3JxdS0+ZGF0YS5sZW5ndGggPSBkYXRhMTsKLQotCXVwKCZwcml2LT53eF9zZW0pOwotCXJldHVybiAwOwotCi19Ci0KLXN0YXRpYyBpbnQgcjgxOTJfd3hfd3JpdGVfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0gICAgICAgIHN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLSAgICAgICAgdTggYWRkcjsKLQotICAgICAgICBkb3duKCZwcml2LT53eF9zZW0pOwotCi0gICAgICAgIGdldF91c2VyKGFkZHIsICh1OCopd3JxdS0+ZGF0YS5wb2ludGVyKTsKLQl3cml0ZV9ydGw4MjI1KGRldiwgYWRkciwgd3JxdS0+ZGF0YS5sZW5ndGgpOwotCi0gICAgICAgIHVwKCZwcml2LT53eF9zZW0pOwotCXJldHVybiAwOwotCi19Ci0KLXZvaWQgcnRsODE4N193cml0ZV9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggYWRyLCB1MzIgZGF0YSk7Ci11OCBydGw4MTg3X3JlYWRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsdTggYWRyLCB1MzIgZGF0YSk7Ci0KLXN0YXRpYyBpbnQgcjgxOTJfd3hfcmVhZF9iYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0gICAgICAgIHN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQl1OCBkYXRhYmI7Ci0jaWYgMAotCWludCBpOwotCWZvcihpPTA7aTwxMjtpKyspIHByaW50aygiJTh4XG4iLCByZWFkX2NhbShkZXYsIGkpICk7Ci0jZW5kaWYKLQotICAgICAgICBkb3duKCZwcml2LT53eF9zZW0pOwotCi0JZGF0YWJiID0gcnRsODE4N19yZWFkX3BoeShkZXYsICh1OCl3cnF1LT5kYXRhLmxlbmd0aCwgMHgwMDAwMDAwMCk7Ci0Jd3JxdS0+ZGF0YS5sZW5ndGggPSBkYXRhYmI7Ci0KLQl1cCgmcHJpdi0+d3hfc2VtKTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBydGw4MTg3X3dyaXRlX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBhZHIsIHUzMiBkYXRhKTsKLXN0YXRpYyBpbnQgcjgxOTJfd3hfd3JpdGVfYmIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotICAgICAgICBzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0gICAgICAgIHU4IGRhdGFiYjsKLQotICAgICAgICBkb3duKCZwcml2LT53eF9zZW0pOwotCi0gICAgICAgIGdldF91c2VyKGRhdGFiYiwgKHU4Kil3cnF1LT5kYXRhLnBvaW50ZXIpOwotICAgICAgICBydGw4MTg3X3dyaXRlX3BoeShkZXYsIHdycXUtPmRhdGEubGVuZ3RoLCBkYXRhYmIpOwotCi0gICAgICAgIHVwKCZwcml2LT53eF9zZW0pOwotICAgICAgICByZXR1cm4gMDsKLQotfQotCi0KLXN0YXRpYyBpbnQgcjgxOTJfd3hfd3JpdGVfbmljYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0gICAgICAgIHN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLSAgICAgICAgdTMyIGFkZHI7Ci0KLSAgICAgICAgZG93bigmcHJpdi0+d3hfc2VtKTsKLQotICAgICAgICBnZXRfdXNlcihhZGRyLCAodTMyKil3cnF1LT5kYXRhLnBvaW50ZXIpOwotICAgICAgICB3cml0ZV9uaWNfYnl0ZShkZXYsIGFkZHIsIHdycXUtPmRhdGEubGVuZ3RoKTsKLQotICAgICAgICB1cCgmcHJpdi0+d3hfc2VtKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0KLX0KLXN0YXRpYyBpbnQgcjgxOTJfd3hfcmVhZF9uaWNiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLSAgICAgICAgc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotICAgICAgICB1MzIgYWRkcjsKLSAgICAgICAgdTE2IGRhdGExOwotCi0gICAgICAgIGRvd24oJnByaXYtPnd4X3NlbSk7Ci0KLSAgICAgICAgZ2V0X3VzZXIoYWRkciwodTMyKil3cnF1LT5kYXRhLnBvaW50ZXIpOwotICAgICAgICBkYXRhMSA9IHJlYWRfbmljX2J5dGUoZGV2LCBhZGRyKTsKLSAgICAgICAgd3JxdS0+ZGF0YS5sZW5ndGggPSBkYXRhMTsKLQotICAgICAgICB1cCgmcHJpdi0+d3hfc2VtKTsKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcjgxOTJfd3hfZ2V0X2FwX3N0YXR1cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0gICAgICAgIHN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLSAgICAgICAgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlODAyMTE7Ci0gICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqdGFyZ2V0OwotCWludCBuYW1lX2xlbjsKLQotICAgICAgICBkb3duKCZwcml2LT53eF9zZW0pOwotCi0JLy9jb3VudCB0aGUgbGVuZ3RoIG9mIGlucHV0IHNzaWQKLQlmb3IobmFtZV9sZW49MCA7ICgoY2hhciopd3JxdS0+ZGF0YS5wb2ludGVyKVtuYW1lX2xlbl0hPSdcMCcgOyBuYW1lX2xlbisrKTsKLQotCS8vc2VhcmNoIGZvciB0aGUgY29ycmVzcG9kaW5nIGluZm8gd2hpY2ggaXMgcmVjZWl2ZWQKLSAgICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeSh0YXJnZXQsICZpZWVlLT5uZXR3b3JrX2xpc3QsIGxpc3QpIHsKLSAgICAgICAgICAgICAgICBpZiAoICh0YXJnZXQtPnNzaWRfbGVuID09IG5hbWVfbGVuKSAmJgotCQkgICAgIChzdHJuY21wKHRhcmdldC0+c3NpZCwgKGNoYXIqKXdycXUtPmRhdGEucG9pbnRlciwgbmFtZV9sZW4pPT0wKSl7Ci0JCQlpZih0YXJnZXQtPndwYV9pZV9sZW4+MCB8fCB0YXJnZXQtPnJzbl9pZV9sZW4+MCApCi0JCQkJLy9zZXQgZmxhZ3M9MSB0byBpbmRpY2F0ZSB0aGlzIGFwIGlzIFdQQQotCQkJCXdycXUtPmRhdGEuZmxhZ3MgPSAxOwotCQkJZWxzZSB3cnF1LT5kYXRhLmZsYWdzID0gMDsKLQotCi0JCWJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHVwKCZwcml2LT53eF9zZW0pOwotICAgICAgICByZXR1cm4gMDsKLX0KLQotCi0KLSNlbmRpZgotCiBzdGF0aWMgaW50IHI4MTkyX3d4X3NldF9yYXd0eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOXhFX3BoeS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTl4RV9waHkuYwppbmRleCA3YmQ0ZmFlLi5mZmQxZTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOXhFX3BoeS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5eEVfcGh5LmMKQEAgLTcsNyArNyw3IEBACiAjaWZkZWYgRU5BQkxFX0RPVDExRAogI2luY2x1ZGUgImllZWU4MDIxMS9kb3QxMWQuaCIKICNlbmRpZgotc3RhdGljIHUzMiBSRl9DSEFOTkVMX1RBQkxFX1pFQlJBW10gPSB7CitzdGF0aWMgY29uc3QgdTMyIFJGX0NIQU5ORUxfVEFCTEVfWkVCUkFbXSA9IHsKIAkwLAogCTB4MDg1YywgLy8yNDEyIDEKIAkweDA4ZGMsIC8vMjQxNyAyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L0tjb25maWcKaW5kZXggYjQyMmVhMS4uMjdiODlhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvS2NvbmZpZwpAQCAtNCw1ICs0LDYgQEAKIAlzZWxlY3QgV0lSRUxFU1NfRVhUCiAJc2VsZWN0IFdFWFRfUFJJVgogCXNlbGVjdCBFRVBST01fOTNDWDYKKwlzZWxlY3QgQ1JZUFRPCiAJZGVmYXVsdCBOCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9UT0RPCmluZGV4IDNjOGRhMTUuLmIxNTIwNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvVE9ETworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L1RPRE8KQEAgLTEsNCArMSwxMCBAQAogVE9ETzoKKy0gbWVyZ2UgcmVhbHRla3MgYnVnZml4ZXMgYW5kIG5ldyBmZWF0dXJlcyBpbnRvIHRoZSBkcml2ZXI6CisgIC0gYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoaXMgZHJpdmVyIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgIGh0dHA6Ly93d3cuZ2V0bmV0LmV1L3Byb2R1Y3RzX0dOLTYyMVUuaHRtbAorICAtIG5vdGU6CisgICAgcmVhbHRlayBoYXMgc3RyaXBwZWQgYWxvbW9zdCBhbGwgY29tbWVudHMgZnJvbSB0aGUgc291cmNlLAorICAgIHNvIHBsZWFzZSBsZWF2ZSBhbGwgY29tbWVudHMgdGhhdCBtYXkgaGVscCBpbiBkZXZlbG9wbWVudCBpbiB0aGUgY29kZS4KIC0gcHJlcGFyZSBwcml2YXRlIGllZWU4MDIxMSBzdGFjayBmb3IgbWVyZ2Ugd2l0aCBydGw4MTg3c2UncyB2ZXJzaW9uOgogICAtIHJlbW92ZSBydGw4MTkyc3UncyBzcGVjaWZpYyBkZWFkIGNvZGUKICAgLSBjbGVhbnVwIGllZWU4MDIxMS5oCkBAIC03LDcgKzEzLDYgQEAKIC0gc3dpdGNoIHRvIHVzZSBzaGFyZWQgImxpYnJ0bCIgaW5zdGVhZCBvZiBwcml2YXRlIGllZWU4MDIxMSBzdGFjawogLSBzd2l0Y2ggdG8gdXNlIExJQjgwMjExCiAtIHN3aXRjaCB0byB1c2UgTUFDODAyMTEKLS0gc3dpdGNoIHRvIHVzZSBFRVBST01fOTNDWDYKIC0gdXNlIGtlcm5lbCBjb2Rpbmcgc3R5bGUKIC0gY2hlY2twYXRjaC5wbCBmaXhlcwogLSBzcGFyc2UgZml4ZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2RvdDExZC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvZG90MTFkLmMKaW5kZXggMjI0ODQ2Mi4uNjI3NWNjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvZG90MTFkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvZG90MTFkLmMKQEAgLTEsMTEgKzEsMjEgQEAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCUZpbGU6Ci0vLwkJRG90MTFkLmMKLS8vCi0vLwlEZXNjcmlwdGlvbjoKLS8vCQlJbXBsZW1lbnQgODAyLjExZC4KLS8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAiZG90MTFkLmgiCiAKQEAgLTUwLDcgKzYwLDYgQEAKIAlwRG90MTFkSW5mby0+Q291bnRyeUllTGVuID0gMDsKIAlSRVNFVF9DSUVfV0FUQ0hET0coaWVlZSk7CiAKLQkvL3ByaW50aygiRG90MTFkX1Jlc2V0KClcbiIpOwogfQogCiAvLwpAQCAtMTA1LDcgKzExNCw2IEBACiAJCXBUcmlwbGUgPSAoUENITkxfVFhQT1dFUl9UUklQTEUpKCh1OCopcFRyaXBsZSArIDMpOwogCX0KICNpZiAxCi0JLy9wcmludGsoIkRvdDExZF9VcGRhdGVDb3VudHJ5SWUoKTogQ2hhbm5lbCBMaXN0OlxuIik7CiAJcHJpbnRrKCJDaGFubmVsIExpc3Q6Iik7CiAJZm9yKGk9MTsgaTw9IE1BWF9DSEFOTkVMX05VTUJFUjsgaSsrKQogCQlpZihwRG90MTFkSW5mby0+Y2hhbm5lbF9tYXBbaV0gPiAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvZG90MTFkLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9kb3QxMWQuaAppbmRleCA5MTNhYzVkLi42MmEyYzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9kb3QxMWQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9kb3QxMWQuaApAQCAtMSwxMCArMSwyNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIFJlYWx0ZWsgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19JTkNfRE9UMTFEX0gKICNkZWZpbmUgX19JTkNfRE9UMTFEX0gKIAogI2luY2x1ZGUgImllZWU4MDIxMS5oIgogCi0vLyNkZWZpbmUgRE9UMTFEX01BWF9DSE5MX05VTSA4MwotCiB0eXBlZGVmIHN0cnVjdCBfQ0hOTF9UWFBPV0VSX1RSSVBMRSB7CiAJdTggRmlyc3RDaG5sOwogCXU4ICBOdW1DaG5sczsKQEAgLTE4LDcgKzM0LDYgQEAKIH1ET1QxMURfU1RBVEU7CiAKIHR5cGVkZWYgc3RydWN0IF9SVF9ET1QxMURfSU5GTyB7Ci0JLy9ERUNMQVJFX1JUX09CSkVDVChSVF9ET1QxMURfSU5GTyk7CiAKIAlib29sIGJFbmFibGVkOyAvLyBkb3QxMU11bHRpRG9tYWluQ2FwYWJpbGl0eUVuYWJsZWQKIApAQCAtMjgsOCArNDMsNiBAQAogCXU4ICBDb3VudHJ5SWVXYXRjaGRvZzsKIAogCXU4ICBjaGFubmVsX21hcFtNQVhfQ0hBTk5FTF9OVU1CRVIrMV07ICAvLyEhIVZhbHVlIDA6IEludmFsaWQsIDE6IFZhbGlkIChhY3RpdmUgc2NhbiksIDI6IFZhbGlkIChwYXNzaXZlIHNjYW4pCi0JLy91OCAgQ2hubExpc3RMZW47IC8vICNCeXRlcyB2YWxpZCBpbiBDaG5sTGlzdFtdLgotCS8vdTggIENobmxMaXN0W0RPVDExRF9NQVhfQ0hOTF9OVU1dOwogCXU4ICBNYXhUeFB3ckRibUxpc3RbTUFYX0NIQU5ORUxfTlVNQkVSKzFdOwogCiAJRE9UMTFEX1NUQVRFIFN0YXRlOwpAQCAtOTUsNCArMTA4LDQgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqIGRldiwKIAl1OCBjaGFubmVsCiApOwotI2VuZGlmIC8vICNpZm5kZWYgX19JTkNfRE9UMTFEX0gKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTEuaAppbmRleCBiY2IyYjEyLi4xZDY3ODlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTEuaApAQCAtMTY4LDYgKzE2OCwxMCBAQAogLyogUU9TIGNvbnRyb2wgKi8KICNkZWZpbmUgSUVFRTgwMjExX1FDVExfVElEICAgICAgICAgICAgICAweDAwMEYKIAorI2RlZmluZSBPVUlfU1VCVFlQRV9XTU1fSU5GTwkJMAorI2RlZmluZSBPVUlfU1VCVFlQRV9XTU1fUEFSQU0JMQorI2RlZmluZSBPVUlfU1VCVFlQRV9RT1NfQ0FQQUJJCTUKKwogLyogZGVidWcgbWFjcm9zICovCiAjZGVmaW5lIENPTkZJR19JRUVFODAyMTFfREVCVUcKICNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCkBAIC0xMTIwLDExICsxMTI0LDI3IEBACiAJQ09VTlRSWV9DT0RFX01LSyA9IDUsCiAJQ09VTlRSWV9DT0RFX01LSzEgPSA2LAogCUNPVU5UUllfQ09ERV9JU1JBRUwgPSA3LAotCUNPVU5UUllfQ09ERV9URUxFQywKLQlDT1VOVFJZX0NPREVfTUlDLAotCUNPVU5UUllfQ09ERV9HTE9CQUxfRE9NQUlOCisJQ09VTlRSWV9DT0RFX1RFTEVDID0gOCwKKwlDT1VOVFJZX0NPREVfTUlDID0gOSwKKwlDT1VOVFJZX0NPREVfR0xPQkFMX0RPTUFJTiA9IDEwLAorCUNPVU5UUllfQ09ERV9XT1JMRF9XSURFXzEzID0gMTEsCisJQ09VTlRSWV9DT0RFX1RFTEVDX05FVEdFQVIgPSAxMiwKKwlDT1VOVFJZX0NPREVfTUFYCiB9OwogCisjZGVmaW5lCU5VTV9QTUtJRF9DQUNIRQkJMTYKKwordHlwZWRlZiBzdHJ1Y3QgX1JUX1BNS0lEX0xJU1QKK3sKKwl1OAkJCQkJCWJVc2VkOworCXU4IAkJCQkJCUJzc2lkWzZdOworCXU4CQkJCQkJUE1LSURbMTZdOworCXU4CQkJCQkJU3NpZEJ1ZlszM107CisJdTgqCQkJCQkJc3NpZF9vY3RldDsKKwl1MTYgCQkJCQlzc2lkX2xlbmd0aDsKK30gUlRfUE1LSURfTElTVCwgKlBSVF9QTUtJRF9MSVNUOworCisKICNpbmNsdWRlICJpZWVlODAyMTFfcjgxOTJzLmgiCiAKIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlIHsKQEAgLTExMzQsNiArMTE1NCw3IEBACiAJLyogaHcgc2VjdXJpdHkgcmVsYXRlZCAqLwogCXU4IGh3c2VjX2FjdGl2ZTsKIAlib29sIGlzX3NpbGVudF9yZXNldDsKKwlib29sIGZvcmNlX21pY19lcnJvcjsKIAlib29sIGlzX3JvYW1pbmc7CiAJYm9vbCBpZWVlX3VwOwogCWJvb2wgYlN1cHBvcnRSZW1vdGVXYWtlVXA7CkBAIC0xMjQ3LDYgKzEyNjgsNyBAQAogCWludCBiY3J4X3N0YV9rZXk7IC8qIHVzZSBpbmRpdmlkdWFsIGtleXMgdG8gb3ZlcnJpZGUgZGVmYXVsdCBrZXlzIGV2ZW4KIAkJCSAgICogd2l0aCBSWCBvZiBicm9hZC9tdWx0aWNhc3QgZnJhbWVzICovCiAKKwlSVF9QTUtJRF9MSVNUCQlQTUtJRExpc3RbTlVNX1BNS0lEX0NBQ0hFXTsKIAkvKiBGcmFnbWVudGF0aW9uIHN0cnVjdHVyZXMgKi8KIAkvLyBlYWNoIHN0cmVhbWluZyBjb250YWluIGEgZW50cnkKIAlzdHJ1Y3QgaWVlZTgwMjExX2ZyYWdfZW50cnkgZnJhZ19jYWNoZVsxN11bSUVFRTgwMjExX0ZSQUdfQ0FDSEVfTEVOXTsKQEAgLTEyOTUsNiArMTMxNywxMCBAQAogCSAqLwogCXZvaWQgKnBEb3QxMWRJbmZvOwogCWJvb2wgYkdsb2JhbERvbWFpbjsKKworCXU4ICAgSWJzc1N0YXJ0Q2hubDsKKwl1OCAgIGlic3NfbWF4am9pbl9jaGFsOworCiAJaW50IHJhdGU7ICAgICAgIC8qIGN1cnJlbnQgcmF0ZSAqLwogCWludCBiYXNpY19yYXRlOwogCS8vRklYTUU6IHBsZWFjZSBjYWxsYmFjaywgc2VlIGlmIHJlZHVuZGFudCB3aXRoIHNvZnRtYWNfZmVhdHVyZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKaW5kZXggODAxOTQyMy4uMjRlN2Q1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKQEAgLTExLDcgKzExLDYgQEAKICAqCiAgKi8KIAotLy8jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTIwMSw3ICsyMDAsNyBAQAogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiB9OwogCi1pbnQgX19pbml0IGllZWU4MDIxMV9jcnlwdG9faW5pdCh2b2lkKQoraW50IGllZWU4MDIxMV9jcnlwdG9faW5pdCh2b2lkKQogewogCWludCByZXQgPSAtRU5PTUVNOwogCkBAIC0yMjEsNyArMjIwLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIF9fZXhpdCBpZWVlODAyMTFfY3J5cHRvX2RlaW5pdCh2b2lkKQordm9pZCBpZWVlODAyMTFfY3J5cHRvX2RlaW5pdCh2b2lkKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnB0ciwgKm47CiAJc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fYWxnICphbGcgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuaAppbmRleCBiNThhM2JjLi40MmU1MmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuaApAQCAtNDksNyArNDksNyBAQAogCSAqIFRoZXNlIGNhbiBiZSBOVUxMIGlmIGZ1bGwgTVNEVSBvcGVyYXRpb25zIGFyZSBub3QgbmVlZGVkLiAqLwogCWludCAoKmVuY3J5cHRfbXNkdSkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhkcl9sZW4sIHZvaWQgKnByaXYpOwogCWludCAoKmRlY3J5cHRfbXNkdSkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGtleWlkeCwgaW50IGhkcl9sZW4sCi0JCQkgICAgdm9pZCAqcHJpdik7CisJCQkgICAgdm9pZCAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UqIGllZWUpOwogCiAJaW50ICgqc2V0X2tleSkodm9pZCAqa2V5LCBpbnQgbGVuLCB1OCAqc2VxLCB2b2lkICpwcml2KTsKIAlpbnQgKCpnZXRfa2V5KSh2b2lkICprZXksIGludCBsZW4sIHU4ICpzZXEsIHZvaWQgKnByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X2NjbXAuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF9jY21wLmMKaW5kZXggNzdkZTk1Ny4uY2FlZTQ0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X2NjbXAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfY2NtcC5jCkBAIC05LDcgKzksNiBAQAogICogbW9yZSBkZXRhaWxzLgogICovCiAKLS8vI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0xMzEsNyArMTMwLDYgQEAKIAlxY19pbmNsdWRlZCA9ICgoV0xBTl9GQ19HRVRfVFlQRShmYykgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEpICYmCiAJCSAgICAgICAoV0xBTl9GQ19HRVRfU1RZUEUoZmMpICYgMHgwOCkpOwogICAgICAgICAqLwotCS8vIGZpeGVkIGJ5IERhdmlkIDoyMDA2LjkuNgogCXFjX2luY2x1ZGVkID0gKChXTEFOX0ZDX0dFVF9UWVBFKGZjKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSkgJiYKIAkJICAgICAgIChXTEFOX0ZDX0dFVF9TVFlQRShmYykgJiAweDgwKSk7CiAJYWFkX2xlbiA9IDIyOwpAQCAtMjEwLDcgKzIwOCw2IEBACiAJcG9zID0gc2tiX3B1c2goc2tiLCBDQ01QX0hEUl9MRU4pOwogCW1lbW1vdmUocG9zLCBwb3MgKyBDQ01QX0hEUl9MRU4sIGhkcl9sZW4pOwogCXBvcyArPSBoZHJfbGVuOwotLy8JbWljID0gc2tiX3B1dChza2IsIENDTVBfTUlDX0xFTik7CiAKIAlpID0gQ0NNUF9QTl9MRU4gLSAxOwogCXdoaWxlIChpID49IDApIHsKQEAgLTI0MCw3ICsyMzcsNiBAQAogCQl1OCAqZSA9IGtleS0+dHhfZTsKIAkJdTggKnMwID0ga2V5LT50eF9zMDsKIAotCQkvL21pYyBpcyBtb3ZlZCB0byBoZXJlIGJ5IGpvaG4KIAkJbWljID0gc2tiX3B1dChza2IsIENDTVBfTUlDX0xFTik7CiAKIAkJY2NtcF9pbml0X2Jsb2NrcyhrZXktPnRmbSwgaGRyLCBrZXktPnR4X3BuLCBkYXRhX2xlbiwgYjAsIGIsIHMwKTsKQEAgLTQ0NSw3ICs0NDEsNiBAQAogCiB2b2lkIGllZWU4MDIxMV9jY21wX251bGwodm9pZCkKIHsKLS8vICAgIHByaW50aygiPT09PT09PT09PT09PiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CiAJcmV0dXJuOwogfQogCkBAIC00NzAsNyArNDY1LDcgQEAKIAlyZXR1cm4gaWVlZTgwMjExX3JlZ2lzdGVyX2NyeXB0b19vcHMoJmllZWU4MDIxMV9jcnlwdF9jY21wKTsKIH0KIAotdm9pZCBfX2V4aXQgaWVlZTgwMjExX2NyeXB0b19jY21wX2V4aXQodm9pZCkKK3ZvaWQgaWVlZTgwMjExX2NyeXB0b19jY21wX2V4aXQodm9pZCkKIHsKIAlpZWVlODAyMTFfdW5yZWdpc3Rlcl9jcnlwdG9fb3BzKCZpZWVlODAyMTFfY3J5cHRfY2NtcCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3RraXAuYwppbmRleCBhZGU1ZjZmLi41YWI5NGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMKQEAgLTksNyArOSw2IEBACiAgKiBtb3JlIGRldGFpbHMuCiAgKi8KIAotLy8jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTQzLDYgKzQyLDcgQEAKIAogCXUzMiByeF9pdjMyOwogCXUxNiByeF9pdjE2OworCWJvb2wgaW5pdGlhbGl6ZWQ7CiAJdTE2IHJ4X3R0YWtbNV07CiAJaW50IHJ4X3BoYXNlMV9kb25lOwogCXUzMiByeF9pdjMyX25ldzsKQEAgLTQzMyw4ICs0MzMsOCBAQAogCiAJaWYgKCF0Y2JfZGVzYy0+Ykh3U2VjKQogCXsKLQkJaWYgKGl2MzIgPCB0a2V5LT5yeF9pdjMyIHx8Ci0JCShpdjMyID09IHRrZXktPnJ4X2l2MzIgJiYgaXYxNiA8PSB0a2V5LT5yeF9pdjE2KSkgeworCQlpZiAoKGl2MzIgPCB0a2V5LT5yeF9pdjMyIHx8CisJCShpdjMyID09IHRrZXktPnJ4X2l2MzIgJiYgaXYxNiA8PSB0a2V5LT5yeF9pdjE2KSkmJnRrZXktPmluaXRpYWxpemVkKSB7CiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIlRLSVA6IHJlcGxheSBkZXRlY3RlZDogU1RBPSVwTSIKIAkJCQkiIHByZXZpb3VzIFRTQyAlMDh4JTA0eCByZWNlaXZlZCBUU0MgIgpAQCAtNDQ0LDYgKzQ0NCw3IEBACiAJCQl0a2V5LT5kb3QxMVJTTkFTdGF0c1RLSVBSZXBsYXlzKys7CiAJCQlyZXR1cm4gLTQ7CiAJCX0KKyAgICAgICAgICAgICAgICB0a2V5LT5pbml0aWFsaXplZCA9IHRydWU7CiAKIAkJaWYgKGl2MzIgIT0gdGtleS0+cnhfaXYzMiB8fCAhdGtleS0+cnhfcGhhc2UxX2RvbmUpIHsKIAkJCXRraXBfbWl4aW5nX3BoYXNlMSh0a2V5LT5yeF90dGFrLCB0a2V5LT5rZXksIGhkci0+YWRkcjIsIGl2MzIpOwpAQCAtNDUyLDEwICs0NTMsOCBAQAogCQl0a2lwX21peGluZ19waGFzZTIocmM0a2V5LCB0a2V5LT5rZXksIHRrZXktPnJ4X3R0YWssIGl2MTYpOwogCiAJCXBsZW4gPSBza2ItPmxlbiAtIGhkcl9sZW4gLSAxMjsKLQorCQlzZ19pbml0X29uZSgmc2csIHBvcywgcGxlbis0KTsKIAkJY3J5cHRvX2Jsa2NpcGhlcl9zZXRrZXkodGtleS0+cnhfdGZtX2FyYzQsIHJjNGtleSwgMTYpOwotCQlzZ19pbml0X29uZSgmc2csIHBvcywgcGxlbiArIDQpOwotCiAJCWlmIChjcnlwdG9fYmxrY2lwaGVyX2RlY3J5cHQoJmRlc2MsICZzZywgJnNnLCBwbGVuICsgNCkpIHsKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiOiBUS0lQOiBmYWlsZWQgdG8gZGVjcnlwdCAiCkBAIC01NzEsMTIgKzU3MCw5IEBACiAKIAltaWNoYWVsX21pY19oZHIoc2tiLCB0a2V5LT50eF9oZHIpOwogCi0JLy8geyBkYXZpZCwgMjAwNi45LjEKLQkvLyBmaXggdGhlIHdwYSBwcm9jZXNzIHdpdGggd21tIGVuYWJsZWQuCiAJaWYoSUVFRTgwMjExX1FPU19IQVNfU0VRKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKSkpIHsKIAkJdGtleS0+dHhfaGRyWzEyXSA9ICooc2tiLT5kYXRhICsgaGRyX2xlbiAtIDIpICYgMHgwNzsKIAl9Ci0JLy8gfQogCXBvcyA9IHNrYl9wdXQoc2tiLCA4KTsKIAogCWlmIChtaWNoYWVsX21pYyh0a2V5LT50eF90Zm1fbWljaGFlbCwgJnRrZXktPmtleVsxNl0sIHRrZXktPnR4X2hkciwKQEAgLTYwOCw3ICs2MDQsNyBAQAogfQogCiBzdGF0aWMgaW50IGllZWU4MDIxMV9taWNoYWVsX21pY192ZXJpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGtleWlkeCwKLQkJCQkgICAgIGludCBoZHJfbGVuLCB2b2lkICpwcml2KQorCQkJCSAgICAgaW50IGhkcl9sZW4sIHZvaWQgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlKiBpZWVlKQogewogCXN0cnVjdCBpZWVlODAyMTFfdGtpcF9kYXRhICp0a2V5ID0gcHJpdjsKIAl1OCBtaWNbOF07CkBAIC02MjAsMTIgKzYxNiw5IEBACiAJCXJldHVybiAtMTsKIAogCW1pY2hhZWxfbWljX2hkcihza2IsIHRrZXktPnJ4X2hkcik7Ci0JLy8geyBkYXZpZCwgMjAwNi45LjEKLQkvLyBmaXggdGhlIHdwYSBwcm9jZXNzIHdpdGggd21tIGVuYWJsZWQuCiAJaWYoSUVFRTgwMjExX1FPU19IQVNfU0VRKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKSkpIHsKIAkJdGtleS0+cnhfaGRyWzEyXSA9ICooc2tiLT5kYXRhICsgaGRyX2xlbiAtIDIpICYgMHgwNzsKIAl9Ci0JLy8gfQogCiAJaWYgKG1pY2hhZWxfbWljKHRrZXktPnJ4X3RmbV9taWNoYWVsLCAmdGtleS0+a2V5WzI0XSwgdGtleS0+cnhfaGRyLAogCQkJc2tiLT5kYXRhICsgaGRyX2xlbiwgc2tiLT5sZW4gLSA4IC0gaGRyX2xlbiwgbWljKSkKQEAgLTYzNyw5ICs2MzAsMTQgQEAKIAkJICAgICAgICJNU0RVIGZyb20gJXBNIGtleWlkeD0lZFxuIiwKIAkJICAgICAgIHNrYi0+ZGV2ID8gc2tiLT5kZXYtPm5hbWUgOiAiTi9BIiwgaGRyLT5hZGRyMiwKIAkJICAgICAgIGtleWlkeCk7Ci0JCWlmIChza2ItPmRldikKKyAgICAgICAgICAgICAgICBwcmludGsoIiVkLCBmb3JjZV9taWNfZXJyb3IgPSAlZFxuIiwgKG1lbWNtcChtaWMsIHNrYi0+ZGF0YSArIHNrYi0+bGVuIC0gOCwgOCkgIT0gMCksXAorICAgICAgICAgICAgICAgICAgICAgICAgaWVlZS0+Zm9yY2VfbWljX2Vycm9yKTsKKwkJaWYgKHNrYi0+ZGV2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoInNrYi0+ZGV2ICE9IE5VTExcbiIpOwogCQkJaWVlZTgwMjExX21pY2hhZWxfbWljX2ZhaWx1cmUoc2tiLT5kZXYsIGhkciwga2V5aWR4KTsKKyAgICAgICAgICAgICAgICB9CiAJCXRrZXktPmRvdDExUlNOQVN0YXRzVEtJUExvY2FsTUlDRmFpbHVyZXMrKzsKKyAgICAgICAgICAgICAgICBpZWVlLT5mb3JjZV9taWNfZXJyb3IgPSBmYWxzZTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtNzYyLDE4ICs3NjAsMTcgQEAKIAkub3duZXIJCSAgICAgICAgPSBUSElTX01PRFVMRSwKIH07CiAKLWludCBfX2luaXQgaWVlZTgwMjExX2NyeXB0b190a2lwX2luaXQodm9pZCkKK2ludCBpZWVlODAyMTFfY3J5cHRvX3RraXBfaW5pdCh2b2lkKQogewogCXJldHVybiBpZWVlODAyMTFfcmVnaXN0ZXJfY3J5cHRvX29wcygmaWVlZTgwMjExX2NyeXB0X3RraXApOwogfQogCi12b2lkIF9fZXhpdCBpZWVlODAyMTFfY3J5cHRvX3RraXBfZXhpdCh2b2lkKQordm9pZCBpZWVlODAyMTFfY3J5cHRvX3RraXBfZXhpdCh2b2lkKQogewogCWllZWU4MDIxMV91bnJlZ2lzdGVyX2NyeXB0b19vcHMoJmllZWU4MDIxMV9jcnlwdF90a2lwKTsKIH0KIAogdm9pZCBpZWVlODAyMTFfdGtpcF9udWxsKHZvaWQpCiB7Ci0vLyAgICBwcmludGsoIj09PT09PT09PT09PT4lcygpXG4iLCBfX0ZVTkNUSU9OX18pOwogICAgICAgICByZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfd2VwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfd2VwLmMKaW5kZXggYTFjMGE1OS4uNTIxOWJmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3dlcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF93ZXAuYwpAQCAtOSw3ICs5LDYgQEAKICAqIG1vcmUgZGV0YWlscy4KICAqLwogCi0vLyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMjc5LDE4ICsyNzgsMTcgQEAKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogfTsKIAotaW50IF9faW5pdCBpZWVlODAyMTFfY3J5cHRvX3dlcF9pbml0KHZvaWQpCitpbnQgaWVlZTgwMjExX2NyeXB0b193ZXBfaW5pdCh2b2lkKQogewogCXJldHVybiBpZWVlODAyMTFfcmVnaXN0ZXJfY3J5cHRvX29wcygmaWVlZTgwMjExX2NyeXB0X3dlcCk7CiB9CiAKLXZvaWQgX19leGl0IGllZWU4MDIxMV9jcnlwdG9fd2VwX2V4aXQodm9pZCkKK3ZvaWQgaWVlZTgwMjExX2NyeXB0b193ZXBfZXhpdCh2b2lkKQogewogCWllZWU4MDIxMV91bnJlZ2lzdGVyX2NyeXB0b19vcHMoJmllZWU4MDIxMV9jcnlwdF93ZXApOwogfQogCiB2b2lkIGllZWU4MDIxMV93ZXBfbnVsbCh2b2lkKQogewotLy8JcHJpbnRrKCI9PT09PT09PT09PT0+JXMoKVxuIiwgX19GVU5DVElPTl9fKTsKICAgICAgICAgcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCmluZGV4IGE4NzY1MGEuLjQ5NDViM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKQEAgLTMxLDcgKzMxLDYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotLy8jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KQEAgLTE0Miw3ICsxNDEsNiBAQAogCXNwaW5fbG9ja19pbml0KCZpZWVlLT53cGF4X3N1aXRsaXN0X2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZpZWVlLT5id19zcGlubG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmllZWUtPnJlb3JkZXJfc3BpbmxvY2spOwotCS8vYWRkZWQgYnkgV0IKIAlhdG9taWNfc2V0KCYoaWVlZS0+YXRtX2NobmxvcCksIDApOwogCWF0b21pY19zZXQoJihpZWVlLT5hdG1fc3didyksIDApOwogCkBAIC0xNTMsNyArMTUxLDYgQEAKICAJaWVlZS0+cHJpdmFjeV9pbnZva2VkID0gMDsKICAJaWVlZS0+aWVlZTgwMl8xeCA9IDE7CiAJaWVlZS0+cmF3X3R4ID0gMDsKLQkvL2llZWUtPmh3c2VjX3N1cHBvcnQgPSAxOyAvL2RlZmF1bHQgc3VwcG9ydCBodyBzZWN1cml0eS4gLy91c2UgbW9kdWxlX3BhcmFtIGluc3RlYWQuCiAJaWVlZS0+aHdzZWNfYWN0aXZlID0gMDsgLy9kaXNhYmxlIGh3c2VjLCBzd2l0Y2ggaXQgb24gd2hlbiBuZWNlc3NhcnkuCiAKIAlpZWVlODAyMTFfc29mdG1hY19pbml0KGllZWUpOwpAQCAtMTk2LDggKzE5Myw2IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBpOwotCS8vc3RydWN0IGxpc3RfaGVhZCAqcCwgKnE7Ci0vLwlkZWxfdGltZXJfc3luYygmaWVlZS0+U3dCd1RpbWVyKTsKICNpZiAxCiAJaWYgKGllZWUtPnBIVEluZm8gIT0gTlVMTCkKIAl7CkBAIC0yMjgsMjMgKzIyMyw2IEBACiAKIHUzMiBpZWVlODAyMTFfZGVidWdfbGV2ZWwgPSAwOwogc3RhdGljIGludCBkZWJ1ZyA9IFwKLQkvLwkJICAgIElFRUU4MDIxMV9ETF9JTkZPCXwKLQkvLwkJICAgIElFRUU4MDIxMV9ETF9XWAl8Ci0JLy8JCSAgICBJRUVFODAyMTFfRExfU0NBTgl8Ci0JLy8JCSAgICBJRUVFODAyMTFfRExfU1RBVEUJfAotCS8vCQkgICAgSUVFRTgwMjExX0RMX01HTVQJfAotCS8vCQkgICAgSUVFRTgwMjExX0RMX0ZSQUcJfAotCS8vCQkgICAgSUVFRTgwMjExX0RMX0VBUAl8Ci0JLy8JCSAgICBJRUVFODAyMTFfRExfRFJPUAl8Ci0JLy8JCSAgICBJRUVFODAyMTFfRExfVFgJfAotCS8vCQkgICAgSUVFRTgwMjExX0RMX1JYCXwKLQkJCSAgICAvL0lFRUU4MDIxMV9ETF9RT1MgICAgfAotCS8vCQkgICAgSUVFRTgwMjExX0RMX0hUIAl8Ci0JLy8JCSAgICBJRUVFODAyMTFfRExfVFMJfAotLy8JCQkgICAgSUVFRTgwMjExX0RMX0JBIAl8Ci0JLy8JCSAgICBJRUVFODAyMTFfRExfUkVPUkRFUnwKLS8vCQkJICAgIElFRUU4MDIxMV9ETF9UUkFDRSAgfAotCQkJICAgIC8vSUVFRTgwMjExX0RMX0RBVEEJfAogCQkJICAgIElFRUU4MDIxMV9ETF9FUlIJICAvL2F3YXlscyBvcGVuIHRoaXMgZmxhZ3MgdG8gc2hvdyBlcnJvciBvdXQKIAkJCSAgICA7CiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmllZWU4MDIxMV9wcm9jID0gTlVMTDsKQEAgLTI4Miw3ICsyNjAsNyBAQAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1pbnQgX19pbml0IGllZWU4MDIxMV9kZWJ1Z19pbml0KHZvaWQpCitpbnQgaWVlZTgwMjExX2RlYnVnX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmU7CiAKQEAgLTMwOCw3ICsyODYsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIF9fZXhpdCBpZWVlODAyMTFfZGVidWdfZXhpdCh2b2lkKQordm9pZCBpZWVlODAyMTFfZGVidWdfZXhpdCh2b2lkKQogewogCWlmIChpZWVlODAyMTFfcHJvYykgewogCQlyZW1vdmVfcHJvY19lbnRyeSgiZGVidWdfbGV2ZWwiLCBpZWVlODAyMTFfcHJvYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfcjgxOTJzLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfcjgxOTJzLmgKaW5kZXggMTgyNGNkYS4uN2U3ZmJiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3I4MTkycy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9yODE5MnMuaApAQCAtMzM5LDI4ICszMzksMzkgQEAKIH07CiAKIC8qIEZpcm13YXJlIHJlbGF0ZWQgQ01EIElPLiAqLwotdHlwZWRlZiBlbnVtIF9GV19DTURfSU9fVFlQRSB7Ci0JRldfQ01EX0RJR19FTkFCTEUgPSAwLAkJLyogZm9yIERJRyBETSAqLwordHlwZWRlZgllbnVtIF9GV19DTURfSU9fVFlQRXsKKwlGV19DTURfRElHX0VOQUJMRSA9IDAsIC8qIGZvciBESUcgRE0gKi8KIAlGV19DTURfRElHX0RJU0FCTEUgPSAxLAogCUZXX0NNRF9ESUdfSEFMVCA9IDIsCiAJRldfQ01EX0RJR19SRVNVTUUgPSAzLAotCUZXX0NNRF9ISUdIX1BXUl9FTkFCTEUgPSA0LAkvKiBmb3IgSGlnaCBQb3dlciBETSAqLworCUZXX0NNRF9ISUdIX1BXUl9FTkFCTEUgPSA0LCAvKiBmb3IgRElHIERNICovCiAJRldfQ01EX0hJR0hfUFdSX0RJU0FCTEUgPSA1LAotCUZXX0NNRF9SQV9SRVNFVCA9IDYsCQkvKiBmb3IgUmF0ZSBhZGFwdGl2ZSBETSAqLwotCUZXX0NNRF9SQV9BQ1RJVkUgPSA3LAotCUZXX0NNRF9SQV9SRUZSRVNIX04gPSA4LAotCUZXX0NNRF9SQV9SRUZSRVNIX0JHID0gOSwKLQlGV19DTURfSVFLX0VOQUJMRSA9IDEwLAkJLyogZm9yIEZXIHN1cHBvcnRlZCBJUUsgKi8KLQlGV19DTURfVFhQV1JfVFJBQ0tfRU5BQkxFID0gMTEsCS8qIFR4IHBvd2VyIHRyYWNraW5nIHN3aXRjaCAqLwotCUZXX0NNRF9UWFBXUl9UUkFDS19ESVNBQkxFID0gMTIsLyogVHggcG93ZXIgdHJhY2tpbmcgc3dpdGNoICovCi0JRldfQ01EX1BBVVNFX0RNX0JZX1NDQU4gPSAxMywKLQlGV19DTURfUkVTVU1FX0RNX0JZX1NDQU4gPSAxNCwKLQlGV19DTURfTUlEX0hJR0hfUFdSX0VOQUJMRSA9IDE1LAorCUZXX0NNRF9SQV9SRVNFVCA9IDYsIC8qIGZvciBESUcgRE0gKi8KKwlGV19DTURfUkFfQUNUSVZFPSA3LAorCUZXX0NNRF9SQV9SRUZSRVNIX049IDgsCisJRldfQ01EX1JBX1JFRlJFU0hfQkc9IDksCisJRldfQ01EX1JBX0lOSVQ9IDEwLCAvKiBmb3IgRlcgc3VwcG9ydGVkIElRSyAqLworCUZXX0NNRF9JUUtfRU5BQkxFID0gMTEsIC8qIFR4IHBvd2VyIHRyYWNraW5nIHN3aXRjaCAqLworCUZXX0NNRF9UWFBXUl9UUkFDS19FTkFCTEUgPSAxMiwgLyogVHggcG93ZXIgdHJhY2tpbmcgc3dpdGNoICovCisJRldfQ01EX1RYUFdSX1RSQUNLX0RJU0FCTEUgPSAxMywKKwlGV19DTURfVFhQV1JfVFJBQ0tfVEhFUk1BTCA9IDE0LAorCUZXX0NNRF9QQVVTRV9ETV9CWV9TQ0FOID0gMTUsCiAJLyogaW5kaWNhdGUgZmlybXdhcmUgdGhhdCBkcml2ZXIgZW50ZXJzIExQUywgZm9yIFBTLVBvbGwgaGFyZHdhcmUgYnVnICovCi0JRldfQ01EX0xQU19FTlRFUiA9IDE2LAorCUZXX0NNRF9SRVNVTUVfRE1fQllfU0NBTiA9IDE2LAogCS8qIGluZGljYXRlIGZpcm13YXJlIHRoYXQgZHJpdmVyIGxlYXZlIExQUyAqLwotCUZXX0NNRF9MUFNfTEVBVkUgPSAxNywKLX0gRldfQ01EX0lPX1RZUEU7CisJRldfQ01EX1JBX1JFRlJFU0hfTl9DT01CID0gMTcsCisJRldfQ01EX1JBX1JFRlJFU0hfQkdfQ09NQiA9IDE4LAorCUZXX0NNRF9BTlRFTk5BX1NXX0VOQUJMRSA9IDE5LAorCUZXX0NNRF9BTlRFTk5BX1NXX0RJU0FCTEUgPSAyMCwKKwlGV19DTURfVFhfRkVFREJBQ0tfQ0NYX0VOQUJMRSA9IDIxLAorCUZXX0NNRF9MUFNfRU5URVIgPSAyMiwKKwlGV19DTURfTFBTX0xFQVZFID0gMjMsCisJRldfQ01EX0RJR19NT0RFX1NTID0gMjQsCisJRldfQ01EX0RJR19NT0RFX0ZBID0gMjUsCisJRldfQ01EX0FERF9BMl9FTlRSWSA9IDI2LAorCUZXX0NNRF9DVFJMX0RNX0JZX0RSSVZFUiA9IDI3LAorCUZXX0NNRF9DVFJMX0RNX0JZX0RSSVZFUl9ORVcgPSAyOCwKK31GV19DTURfSU9fVFlQRSwqUEZXX0NNRF9JT19UWVBFOwogCiAjZGVmaW5lIFJUX01BWF9MRF9TTE9UX05VTQkxMAogc3RydWN0IHJ0X2xpbmtfZGV0ZWN0IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKaW5kZXggMWYyYmM3YS4uMDlhMDJmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKQEAgLTM2MCw3ICszNjAsNyBAQAogCWhkcmxlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKSk7CiAKIAlhdG9taWNfaW5jKCZjcnlwdC0+cmVmY250KTsKLQlyZXMgPSBjcnlwdC0+b3BzLT5kZWNyeXB0X21zZHUoc2tiLCBrZXlpZHgsIGhkcmxlbiwgY3J5cHQtPnByaXYpOworCXJlcyA9IGNyeXB0LT5vcHMtPmRlY3J5cHRfbXNkdShza2IsIGtleWlkeCwgaGRybGVuLCBjcnlwdC0+cHJpdixpZWVlKTsKIAlhdG9taWNfZGVjKCZjcnlwdC0+cmVmY250KTsKIAlpZiAocmVzIDwgMCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE1TRFUgZGVjcnlwdGlvbi9NSUMgdmVyaWZpY2F0aW9uIGZhaWxlZCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCmluZGV4IDRmMWYyZjAuLjAyODUwNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwpAQCAtMTYwLDcgKzE2MCw2IEBACiAJaWVlZS0+bWdtdF9xdWV1ZV9oZWFkID0gbmg7CiAJaWVlZS0+bWdtdF9xdWV1ZV9yaW5nW25oXSA9IHNrYjsKIAotCS8vcmV0dXJuIDA7CiB9CiAKIHN0cnVjdCBza19idWZmICpkZXF1ZXVlX21nbXQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCkBAIC0xODMsMTkgKzE4Miw1MyBAQAogCWllZWUtPm1nbXRfcXVldWVfdGFpbCA9IGllZWUtPm1nbXRfcXVldWVfaGVhZCA9IDA7CiB9CiAKK3U4CitNZ250UXVlcnlfVHhSYXRlRXhjbHVkZUNDS1JhdGVzKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQoreworCXUxNglpOworCXU4CVF1ZXJ5UmF0ZSA9IDA7CisJdTgJQmFzaWNSYXRlOworCisKKwlmb3IoIGkgPSAwOyBpIDwgaWVlZS0+Y3VycmVudF9uZXR3b3JrLnJhdGVzX2xlbjsgaSsrKQorCXsKKwkJQmFzaWNSYXRlID0gaWVlZS0+Y3VycmVudF9uZXR3b3JrLnJhdGVzW2ldJjB4N0Y7CisJCWlmKCFpZWVlODAyMTFfaXNfY2NrX3JhdGUoQmFzaWNSYXRlKSkKKwkJeworCQkJaWYoUXVlcnlSYXRlID09IDApCisJCQl7CisJCQkJUXVlcnlSYXRlID0gQmFzaWNSYXRlOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmKEJhc2ljUmF0ZSA8IFF1ZXJ5UmF0ZSkKKwkJCQl7CisJCQkJCVF1ZXJ5UmF0ZSA9IEJhc2ljUmF0ZTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlpZihRdWVyeVJhdGUgPT0gMCkKKwl7CisJCVF1ZXJ5UmF0ZSA9IDEyOworCQlwcmludGsoIk5vIEJhc2ljUmF0ZSBmb3VuZCEhXG4iKTsKKwl9CisJcmV0dXJuIFF1ZXJ5UmF0ZTsKK30KIHU4IE1nbnRRdWVyeV9NZ250RnJhbWVUeFJhdGUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CiAJUFJUX0hJR0hfVEhST1VHSFBVVCAgICAgIHBIVEluZm8gPSBpZWVlLT5wSFRJbmZvOwogCXU4IHJhdGU7CiAKLQkvLyAyMDA4LzAxLzI1IE1IIEZvciBicm9hZGNvbSwgTUdOVCBmcmFtZSBzZXQgYXMgT0ZETSA2TS4KLQlpZihwSFRJbmZvLT5JT1RBY3Rpb24gJiBIVF9JT1RfQUNUX01HTlRfVVNFX0NDS182TSkKLQkJcmF0ZSA9IDB4MGM7CisJaWYocEhUSW5mby0+SU9UQWN0aW9uICYgSFRfSU9UX0FDVF9XQV9JT1RfQnJvYWRjb20pCisJeworCQlyYXRlID0gTWdudFF1ZXJ5X1R4UmF0ZUV4Y2x1ZGVDQ0tSYXRlcyhpZWVlKTsKKwl9CiAJZWxzZQogCQlyYXRlID0gaWVlZS0+YmFzaWNfcmF0ZSAmIDB4N2Y7CiAKIAlpZihyYXRlID09IDApewotCQkvLyAyMDA1LjAxLjI2LCBieSByY25qa28uCiAJCWlmKGllZWUtPm1vZGUgPT0gSUVFRV9BfHwKIAkJICAgaWVlZS0+bW9kZT09IElFRUVfTl81R3x8CiAJCSAgIChpZWVlLT5tb2RlPT0gSUVFRV9OXzI0RyYmIXBIVEluZm8tPmJDdXJTdXBwQ0NLKSkKQEAgLTIwMywxNyArMjM2LDYgQEAKIAkJZWxzZQogCQkJcmF0ZSA9IDB4MDI7CiAJfQotCi0JLyoKLQkvLyBEYXRhIHJhdGUgb2YgUHJvYmVSZXEgaXMgYWxyZWFkeSBkZWNpZGVkLiBBbm5pZSwgMjAwNS0wMy0zMQotCWlmKCBwTWdudEluZm8tPmJTY2FuSW5Qcm9ncmVzcyB8fCAocE1nbnRJbmZvLT5iRHVhbE1vZGVTY2FuU3RlcCE9MCkgKQotCXsKLQlpZihwTWdudEluZm8tPmRvdDExQ3VycmVudFdpcmVsZXNzTW9kZT09V0lSRUxFU1NfTU9ERV9BKQotCXJhdGUgPSAweDBjOwotCWVsc2UKLQlyYXRlID0gMHgwMjsKLQl9Ci0JICovCiAJcmV0dXJuIHJhdGU7CiB9CiAKQEAgLTI1MSw5ICsyNzMsNyBAQAogCQkJCWllZWUtPnNlcV9jdHJsWzBdKys7CiAKIAkJCS8qIGF2b2lkIHdhdGNoZG9nIHRyaWdnZXJzICovCi0JLy8JCWllZWUtPmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCQkJaWVlZS0+c29mdG1hY19kYXRhX2hhcmRfc3RhcnRfeG1pdChza2IsaWVlZS0+ZGV2LGllZWUtPmJhc2ljX3JhdGUpOwotCQkJLy9kZXZfa2ZyZWVfc2tiX2FueShza2IpOy8vZWRpdCBieSB0aG9tYXMKIAkJfQogCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKQEAgLTI3OSw5ICsyOTksNyBAQAogCQkJcHJpbnRrKCIlcygpOmluc2VydCB0byB3YWl0cXVldWUhXG4iLF9fRlVOQ1RJT05fXyk7CiAJCQlza2JfcXVldWVfdGFpbCgmaWVlZS0+c2tiX3dhaXRRW3RjYl9kZXNjLT5xdWV1ZV9pbmRleF0sIHNrYik7CiAJCX0gZWxzZSB7Ci0JCQkvL3ByaW50aygiVFggcGFja2V0IVxuIik7CiAJCQlpZWVlLT5zb2Z0bWFjX2hhcmRfc3RhcnRfeG1pdChza2IsaWVlZS0+ZGV2KTsKLQkJCS8vZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsvL2VkaXQgYnkgdGhvbWFzCiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZS0+bWdtdF90eF9sb2NrLCBmbGFncyk7CiAJfQpAQCAtMjkzLDE2ICszMTEsMjQgQEAKIAlzaG9ydCBzaW5nbGUgPSBpZWVlLT5zb2Z0bWFjX2ZlYXR1cmVzICYgSUVFRV9TT0ZUTUFDX1NJTkdMRV9RVUVVRTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAgKmhlYWRlciA9CiAJCShzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAgKikgc2tiLT5kYXRhOworCXUxNiBmYyx0eXBlLHN0eXBlOwogICAgICAgICBjYl9kZXNjICp0Y2JfZGVzYyA9IChjYl9kZXNjICopKHNrYi0+Y2IgKyA4KTsKIAorCWZjID0gaGVhZGVyLT5mcmFtZV9jb250cm9sOworCXR5cGUgPSBXTEFOX0ZDX0dFVF9UWVBFKGZjKTsKKwlzdHlwZSA9IFdMQU5fRkNfR0VUX1NUWVBFKGZjKTsKKworCisJaWYoc3R5cGUgIT0gSUVFRTgwMjExX1NUWVBFX1BTUE9MTCkKIAl0Y2JfZGVzYy0+cXVldWVfaW5kZXggPSBNR05UX1FVRVVFOworCWVsc2UKKwkJdGNiX2Rlc2MtPnF1ZXVlX2luZGV4ID0gSElHSF9RVUVVRTsKIAl0Y2JfZGVzYy0+ZGF0YV9yYXRlID0gTWdudFF1ZXJ5X01nbnRGcmFtZVR4UmF0ZShpZWVlKTsKIAl0Y2JfZGVzYy0+UkFUUkluZGV4ID0gNzsKIAl0Y2JfZGVzYy0+YlR4RGlzYWJsZVJhdGVGYWxsQmFjayA9IDE7CiAJdGNiX2Rlc2MtPmJUeFVzZURyaXZlckFzc2luZ2VkUmF0ZSA9IDE7Ci0JLy9wcmludGsoIj09PT09PT09PT09PT0+JXMoKVxuIiwgX19GVU5DVElPTl9fKTsKIAlpZihzaW5nbGUpewotCisJCWlmKCEodHlwZSA9PSBJRUVFODAyMTFfRlRZUEVfQ1RMKSkgewogCQloZWFkZXItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYoaWVlZS0+c2VxX2N0cmxbMF0gPDwgNCk7CiAKIAkJaWYgKGllZWUtPnNlcV9jdHJsWzBdID09IDB4RkZGKQpAQCAtMzEwLDEyICszMzYsMTIgQEAKIAkJZWxzZQogCQkJaWVlZS0+c2VxX2N0cmxbMF0rKzsKIAorCQl9CiAJCS8qIGF2b2lkIHdhdGNoZG9nIHRyaWdnZXJzICovCi0JLy8JaWVlZS0+ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJCWllZWUtPnNvZnRtYWNfZGF0YV9oYXJkX3N0YXJ0X3htaXQoc2tiLGllZWUtPmRldixpZWVlLT5iYXNpY19yYXRlKTsKIAogCX1lbHNlewotCisJCWlmKCEodHlwZSA9PSBJRUVFODAyMTFfRlRZUEVfQ1RMKSkgewogCQloZWFkZXItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYoaWVlZS0+c2VxX2N0cmxbMF0gPDwgNCk7CiAKIAkJaWYgKGllZWUtPnNlcV9jdHJsWzBdID09IDB4RkZGKQpAQCAtMzIzLDEwICszNDksMTAgQEAKIAkJZWxzZQogCQkJaWVlZS0+c2VxX2N0cmxbMF0rKzsKIAorCQl9CiAJCWllZWUtPnNvZnRtYWNfaGFyZF9zdGFydF94bWl0KHNrYixpZWVlLT5kZXYpOwogCiAJfQotCS8vZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsvL2VkaXQgYnkgdGhvbWFzCiB9CiAKIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX3Byb2JlX3JlcShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKQEAgLTM3MywyNCArMzk5LDE2IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpZighaWVlZS0+aWVlZV91cCkKIAkJcmV0dXJuOwotCS8vdW5zaWduZWQgbG9uZyBmbGFnczsKIAlza2IgPSBpZWVlODAyMTFfZ2V0X2JlYWNvbl8oaWVlZSk7CiAKIAlpZiAoc2tiKXsKIAkJc29mdG1hY19tZ210X3htaXQoc2tiLCBpZWVlKTsKIAkJaWVlZS0+c29mdG1hY19zdGF0cy50eF9iZWFjb25zKys7Ci0JCS8vZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsvL2VkaXQgYnkgdGhvbWFzCiAJfQotLy8JaWVlZS0+YmVhY29uX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsKLS8vCQkoTVNFQ1MoIGllZWUtPmN1cnJlbnRfbmV0d29yay5iZWFjb25faW50ZXJ2YWwgLTUpKTsKIAotCS8vc3Bpbl9sb2NrX2lycXNhdmUoJmllZWUtPmJlYWNvbl9sb2NrLGZsYWdzKTsKIAlpZihpZWVlLT5iZWFjb25fdHhpbmcgJiYgaWVlZS0+aWVlZV91cCl7Ci0vLwkJaWYoIXRpbWVyX3BlbmRpbmcoJmllZWUtPmJlYWNvbl90aW1lcikpCi0vLwkJCWFkZF90aW1lcigmaWVlZS0+YmVhY29uX3RpbWVyKTsKIAkJbW9kX3RpbWVyKCZpZWVlLT5iZWFjb25fdGltZXIsamlmZmllcysoTVNFQ1MoaWVlZS0+Y3VycmVudF9uZXR3b3JrLmJlYWNvbl9pbnRlcnZhbC01KSkpOwogCX0KLQkvL3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmJlYWNvbl9sb2NrLGZsYWdzKTsKIH0KIAogCkBAIC00MTQsNyArNDMyLDYgQEAKIAlpZiAoc2tiKXsKIAkJc29mdG1hY19tZ210X3htaXQoc2tiLCBpZWVlKTsKIAkJaWVlZS0+c29mdG1hY19zdGF0cy50eF9wcm9iZV9ycSsrOwotCQkvL2Rldl9rZnJlZV9za2JfYW55KHNrYik7Ly9lZGl0IGJ5IHRob21hcwogCX0KIH0KIApAQCAtNTg1LDEyICs2MDIsOCBAQAogCiB2b2lkIGllZWU4MDIxMV9zb2Z0bWFjX3N0b3Bfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKIHsKLS8vCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvL2llZWUtPnN5bmNfc2Nhbl9odXJyeXVwID0gMTsKIAogCWRvd24oJmllZWUtPnNjYW5fc2VtKTsKLS8vCXNwaW5fbG9ja19pcnFzYXZlKCZpZWVlLT5sb2NrLCBmbGFncyk7CiAJaWVlZS0+c2Nhbl93YXRjaF9kb2cgPSAwOwogCWlmIChpZWVlLT5zY2FubmluZyA9PSAxKXsKIAkJaWVlZS0+c2Nhbm5pbmcgPSAwOwpAQCAtNTk4LDcgKzYxMSw2IEBACiAJCWNhbmNlbF9kZWxheWVkX3dvcmsoJmllZWUtPnNvZnRtYWNfc2Nhbl93cSk7CiAJfQogCi0vLwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7CiAJdXAoJmllZWUtPnNjYW5fc2VtKTsKIH0KIApAQCAtNjcyLDcgKzY4NCw2IEBACiAJbWVtY3B5KGF1dGgtPmhlYWRlci5hZGRyMiwgaWVlZS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweShhdXRoLT5oZWFkZXIuYWRkcjMsIGJlYWNvbi0+YnNzaWQsIEVUSF9BTEVOKTsKIAotCS8vYXV0aC0+YWxnb3JpdGhtID0gaWVlZS0+b3Blbl93ZXAgPyBXTEFOX0FVVEhfT1BFTiA6IFdMQU5fQVVUSF9TSEFSRURfS0VZOwogCWlmKGllZWUtPmF1dGhfbW9kZSA9PSAwKQogCQlhdXRoLT5hbGdvcml0aG0gPSBXTEFOX0FVVEhfT1BFTjsKIAllbHNlIGlmKGllZWUtPmF1dGhfbW9kZSA9PSAxKQpAQCAtNjg5LDYgKzcwMCwyNiBAQAogCiB9CiAKK3ZvaWQgY29uc3RydWN0V01NSUUodTgqIHdtbWllLCB1OCogd21tX2xlbix1OCBvdWlfc3VidHlwZSkKK3sKKwl1OAlzelFvU09VSVtdID17MjIxLCAwLCAweDAwLCAweDUwLCAweGYyLCAweDAyLCAwLCAxfTsKKworCWlmIChvdWlfc3VidHlwZSA9PSBPVUlfU1VCVFlQRV9RT1NfQ0FQQUJJKQorCXsKKwkJc3pRb1NPVUlbMF0gPSA0NjsKKwkJc3pRb1NPVUlbMV0gPSAqd21tX2xlbjsKKwkJbWVtY3B5KHdtbWllLHN6UW9TT1VJLDMpOworCQkqd21tX2xlbiA9IDM7CisJfQorCWVsc2UKKwl7CisJCXN6UW9TT1VJWzFdID0gKndtbV9sZW4gKyA2OworCQlzelFvU09VSVs2XSA9IG91aV9zdWJ0eXBlOworCQltZW1jcHkod21taWUsIHN6UW9TT1VJLCA4KTsKKwkJKih3bW1pZSs4KSA9IDA7CisJCSp3bW1fbGVuID0gOTsKKwl9Cit9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiogaWVlZTgwMjExX3Byb2JlX3Jlc3Aoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4ICpkZXN0KQogewpAQCAtNzA3LDE0ICs3MzgsMTggQEAKIAlpbnQgd3BhX2llX2xlbiA9IGllZWUtPndwYV9pZV9sZW47CiAJdTggZXJwaW5mb19jb250ZW50ID0gMDsKIAotCXU4KiB0bXBfaHRfY2FwX2J1ZjsKKwl1OCogdG1wX2h0X2NhcF9idWY9TlVMTDsKIAl1OCB0bXBfaHRfY2FwX2xlbj0wOwotCXU4KiB0bXBfaHRfaW5mb19idWY7CisJdTgqIHRtcF9odF9pbmZvX2J1Zj1OVUxMOwogCXU4IHRtcF9odF9pbmZvX2xlbj0wOwogCVBSVF9ISUdIX1RIUk9VR0hQVVQJcEhUSW5mbyA9IGllZWUtPnBIVEluZm87CiAJdTgqIHRtcF9nZW5lcmljX2llX2J1Zj1OVUxMOwogCXU4IHRtcF9nZW5lcmljX2llX2xlbj0wOwogCisKKwl1OCB3bW1pZVs5XSA9IHswfTsKKwl1OCB3bW1fbGVuID0gMDsKKwogCWlmKHJhdGVfZXhfbGVuID4gMCkgcmF0ZV9leF9sZW4rPTI7CiAKIAlpZihpZWVlLT5jdXJyZW50X25ldHdvcmsuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9JQlNTKQpAQCAtNzIyLDcgKzc1Nyw3IEBACiAJZWxzZQogCQlhdGltX2xlbiA9IDA7CiAKLSNpZiAxCisjaWYgMAogCWlmKGllZWU4MDIxMV9pc181NGcoaWVlZS0+Y3VycmVudF9uZXR3b3JrKSkKIAkJZXJwX2xlbiA9IDM7CiAJZWxzZQpAQCAtNzQ3LDIyICs3ODIsMzUgQEAKIAkJKCgwID09IHN0cmNtcChjcnlwdC0+b3BzLT5uYW1lLCAiV0VQIikgfHwgd3BhX2llX2xlbikpOwogCS8vSFQgcmFsYXRlZCBlbGVtZW50CiAjaWYgMQotCXRtcF9odF9jYXBfYnVmID0odTgqKSAmKGllZWUtPnBIVEluZm8tPlNlbGZIVENhcCk7Ci0JdG1wX2h0X2NhcF9sZW4gPSBzaXplb2YoaWVlZS0+cEhUSW5mby0+U2VsZkhUQ2FwKTsKLQl0bXBfaHRfaW5mb19idWYgPSh1OCopICYoaWVlZS0+cEhUSW5mby0+U2VsZkhUSW5mbyk7Ci0JdG1wX2h0X2luZm9fbGVuID0gc2l6ZW9mKGllZWUtPnBIVEluZm8tPlNlbGZIVEluZm8pOwotCUhUQ29uc3RydWN0Q2FwYWJpbGl0eUVsZW1lbnQoaWVlZSwgdG1wX2h0X2NhcF9idWYsICZ0bXBfaHRfY2FwX2xlbixlbmNyeXB0KTsKLQlIVENvbnN0cnVjdEluZm9FbGVtZW50KGllZWUsdG1wX2h0X2luZm9fYnVmLCZ0bXBfaHRfaW5mb19sZW4sIGVuY3J5cHQpOworCWlmKGllZWUtPnBIVEluZm8tPmJDdXJyZW50SFRTdXBwb3J0KXsKKwkJdG1wX2h0X2NhcF9idWYgPSh1OCopICYoaWVlZS0+cEhUSW5mby0+U2VsZkhUQ2FwKTsKKwkJdG1wX2h0X2NhcF9sZW4gPSBzaXplb2YoaWVlZS0+cEhUSW5mby0+U2VsZkhUQ2FwKTsKKwkJdG1wX2h0X2luZm9fYnVmID0odTgqKSAmKGllZWUtPnBIVEluZm8tPlNlbGZIVEluZm8pOworCQl0bXBfaHRfaW5mb19sZW4gPSBzaXplb2YoaWVlZS0+cEhUSW5mby0+U2VsZkhUSW5mbyk7CisKKwkJSFRDb25zdHJ1Y3RDYXBhYmlsaXR5RWxlbWVudChpZWVlLCB0bXBfaHRfY2FwX2J1ZiwgJnRtcF9odF9jYXBfbGVuLGVuY3J5cHQpOworCisJCUhUQ29uc3RydWN0SW5mb0VsZW1lbnQoaWVlZSx0bXBfaHRfaW5mb19idWYsJnRtcF9odF9pbmZvX2xlbiwgZW5jcnlwdCk7CiAKIAotICAgICAgICBpZihwSFRJbmZvLT5iUmVnUlQyUlRBZ2dyZWdhdGlvbikKLSAgICAgICAgewotICAgICAgICAJdG1wX2dlbmVyaWNfaWVfYnVmID0gaWVlZS0+cEhUSW5mby0+c3pSVDJSVEFnZ0J1ZmZlcjsKLQkJdG1wX2dlbmVyaWNfaWVfbGVuID0gc2l6ZW9mKGllZWUtPnBIVEluZm8tPnN6UlQyUlRBZ2dCdWZmZXIpOwotCQlIVENvbnN0cnVjdFJUMlJUQWdnRWxlbWVudChpZWVlLCB0bXBfZ2VuZXJpY19pZV9idWYsICZ0bXBfZ2VuZXJpY19pZV9sZW4pOwotICAgICAgICB9Ci0vLwlwcmludGsoIj09PT09PT09PT09PT09PT50bXBfaHRfY2FwX2xlbiBpcyAlZCx0bXBfaHRfaW5mb19sZW4gaXMgJWQsIHRtcF9nZW5lcmljX2llX2xlbiBpcyAlZFxuIix0bXBfaHRfY2FwX2xlbix0bXBfaHRfaW5mb19sZW4sdG1wX2dlbmVyaWNfaWVfbGVuKTsKKwkJaWYocEhUSW5mby0+YlJlZ1JUMlJUQWdncmVnYXRpb24pCisJCXsKKwkJCXRtcF9nZW5lcmljX2llX2J1ZiA9IGllZWUtPnBIVEluZm8tPnN6UlQyUlRBZ2dCdWZmZXI7CisJCQl0bXBfZ2VuZXJpY19pZV9sZW4gPSBzaXplb2YoaWVlZS0+cEhUSW5mby0+c3pSVDJSVEFnZ0J1ZmZlcik7CisJCQlIVENvbnN0cnVjdFJUMlJUQWdnRWxlbWVudChpZWVlLCB0bXBfZ2VuZXJpY19pZV9idWYsICZ0bXBfZ2VuZXJpY19pZV9sZW4pOworCQl9CisJfQogI2VuZGlmCisKKwlpZihpZWVlLT5xb3Nfc3VwcG9ydCl7CisKKwkJaWYoaWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKQorCQl7CisJCQl3bW1fbGVuID0gMTsKKwkJCWNvbnN0cnVjdFdNTUlFKHdtbWllLCZ3bW1fbGVuLE9VSV9TVUJUWVBFX1dNTV9JTkZPKTsKKwkJfQorCX0KKwogCWJlYWNvbl9zaXplID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcHJvYmVfcmVzcG9uc2UpKzIrCiAJCXNzaWRfbGVuCiAJCSszIC8vY2hhbm5lbApAQCAtODI1LDcgKzg3Myw2IEBACiAJdTE2IHZhbDE2OwogCQkqKHRhZysrKSA9IE1GSUVfVFlQRV9JQlNTX1NFVDsKIAkJKih0YWcrKykgPSAyOwotCQkvLyooKHUxNiopKHRhZykpID0gY3B1X3RvX2xlMTYoaWVlZS0+Y3VycmVudF9uZXR3b3JrLmF0aW1fd2luZG93KTsKIAkJIHZhbDE2ID0gY3B1X3RvX2xlMTYoaWVlZS0+Y3VycmVudF9uZXR3b3JrLmF0aW1fd2luZG93KTsKIAkJbWVtY3B5KCh1OCAqKXRhZywgKHU4ICopJnZhbDE2LCAyKTsKIAkJdGFnKz0yOwpAQCAtODU0LDcgKzkwMSw2IEBACiAJCXRhZyArPSB3cGFfaWVfbGVuOwogCX0KIAotCS8vc2tiLT5kZXYgPSBpZWVlLT5kZXY7CiAJcmV0dXJuIHNrYjsKIH0KIApAQCAtOTk2LDE5ICsxMDQyLDM5IEBACiB9CiAKIAoraW5saW5lIGludCBTZWNJc0luUE1LSURMaXN0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1OCAqYnNzaWQpCit7CisJaW50IGkgPSAwOworCisJZG8KKwl7CisJCWlmICgoaWVlZS0+UE1LSURMaXN0W2ldLmJVc2VkKSAmJiAobWVtY21wKGllZWUtPlBNS0lETGlzdFtpXS5Cc3NpZCwgYnNzaWQsIEVUSF9BTEVOKSA9PSAwKSkKKwkJeworCQkJYnJlYWs7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpKys7CisJCX0KKwl9IHdoaWxlIChpIDwgTlVNX1BNS0lEX0NBQ0hFKTsKKworCWlmIChpID09IE5VTV9QTUtJRF9DQUNIRSkKKwl7CisJCWkgPSAtMTsKKwl9CisJZWxzZQorCXsKKwl9CisKKwlyZXR1cm4gKGkpOworCit9CiBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9hc3NvY2lhdGlvbl9yZXEoc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpiZWFjb24sc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkvL3Vuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3JlcXVlc3RfZnJhbWUgKmhkcjsKIAl1OCAqdGFnOy8vLCpyc25faWU7Ci0JLy9zaG9ydCBpbmZvX2FkZHIgPSAwOwotCS8vaW50IGk7Ci0JLy91MTYgc3VpdGVfY291bnQgPSAwOwotCS8vdTggc3VpdF9zZWxlY3QgPSAwOwotCS8vdW5zaWduZWQgaW50IHdwYV9sZW4gPSBiZWFjb24tPndwYV9pZV9sZW47Ci0JLy9mb3IgSFQKIAl1OCogaHRfY2FwX2J1ZiA9IE5VTEw7CiAJdTggaHRfY2FwX2xlbj0wOwogCXU4KiByZWFsdGVrX2llX2J1Zj1OVUxMOwpAQCAtMTAxOSw2ICsxMDg1LDcgQEAKIAl1bnNpZ25lZCBpbnQgY3h2ZXJudW1faWVfbGVuPTA7CiAJc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhKiBjcnlwdDsKIAlpbnQgZW5jcnlwdDsKKwlpbnQJUE1LQ2FjaGVJZHg7CiAKIAl1bnNpZ25lZCBpbnQgcmF0ZV9sZW4gPSBpZWVlODAyMTFfTUZJRV9yYXRlX2xlbihpZWVlKTsKIAl1bnNpZ25lZCBpbnQgd21tX2luZm9fbGVuID0gYmVhY29uLT5xb3NfZGF0YS5zdXBwb3J0ZWQ/OTowOwpAQCAtMTA2MCw2ICsxMTI3LDE0IEBACiAJewogCQljeHZlcm51bV9pZV9sZW4gPSA1KzI7CiAJfQorCisJUE1LQ2FjaGVJZHggPSBTZWNJc0luUE1LSURMaXN0KGllZWUsIGllZWUtPmN1cnJlbnRfbmV0d29yay5ic3NpZCk7CisJaWYgKFBNS0NhY2hlSWR4ID49IDApCisJeworCQl3cGFfaWVfbGVuICs9IDE4OworCQlwcmludGsoIltQTUsgY2FjaGVdOiBXUEEyIElFIGxlbmd0aDogJXhcbiIsIHdwYV9pZV9sZW4pOworCX0KKwogCWxlbiA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3JlcXVlc3RfZnJhbWUpKyAyCiAJCSsgYmVhY29uLT5zc2lkX2xlbi8vZXNzaWQgdGFnZ2VkIHZhbAogCQkrIHJhdGVfbGVuLy9yYXRlcyB0YWdnZWQgdmFsCkBAIC0xMTg3LDYgKzEyNjIsMTMgQEAKIAl0YWcgPSBza2JfcHV0KHNrYiwgd3BhX2llX2xlbik7CiAJaWYgKHdwYV9pZV9sZW4pewogCQltZW1jcHkodGFnLCBpZWVlLT53cGFfaWUsIGllZWUtPndwYV9pZV9sZW4pOworCQlpZiAoUE1LQ2FjaGVJZHggPj0gMCkKKwkJeworCQkJdGFnID0gc2tiX3B1dChza2IsIDE4KTsKKwkJCSp0YWcgPSAxOworCQkJKih0YWcgKyAxKSA9IDA7CisJCQltZW1jcHkoKHRhZyArIDIpLCAmaWVlZS0+UE1LSURMaXN0W1BNS0NhY2hlSWR4XS5QTUtJRCwgMTYpOworCQl9CiAJfQogCiAJdGFnID0gc2tiX3B1dChza2Isd21tX2luZm9fbGVuKTsKQEAgLTEyMTUsOCArMTI5Nyw2IEBACiAJCQltZW1jcHkodGFnLCByZWFsdGVrX2llX2J1ZixyZWFsdGVrX2llX2xlbiAtMiApOwogCQl9CiAJfQotLy8JcHJpbnRrKCI8PT09PT0lcygpLCAlcCwgJXBcbiIsIF9fRlVOQ1RJT05fXywgaWVlZS0+ZGV2LCBpZWVlLT5kZXYtPmRldl9hZGRyKTsKLS8vCUlFRUU4MDIxMV9ERUJVR19EQVRBKElFRUU4MDIxMV9ETF9EQVRBLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAlyZXR1cm4gc2tiOwogfQogCkBAIC0xMjcxLDcgKzEzNTEsNiBAQAogCWVsc2V7CiAJCWllZWUtPnN0YXRlID0gSUVFRTgwMjExX0FTU09DSUFUSU5HX0FVVEhFTlRJQ0FUSU5HIDsKIAkJSUVFRTgwMjExX0RFQlVHX01HTVQoIlNlbmRpbmcgYXV0aGVudGljYXRpb24gcmVxdWVzdFxuIik7Ci0JCS8vcHJpbnRrKEtFUk5fV0FSTklORyAiU2VuZGluZyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0XG4iKTsKIAkJc29mdG1hY19tZ210X3htaXQoc2tiLCBpZWVlKTsKIAkJLy9CVUdPTiB3aGVuIHlvdSB0cnkgdG8gYWRkX3RpbWVyIHR3aWNlLCB1c2luZyBtb2RfdGltZXIgbWF5IGJlIGJldHRlciwgam9objA3MDkKIAkJaWYoIXRpbWVyX3BlbmRpbmcoJmllZWUtPmFzc29jaWF0ZV90aW1lcikpewpAQCAtMTI4Nyw3ICsxMzY2LDYgQEAKIAl1OCAqYzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqYmVhY29uID0gJmllZWUtPmN1cnJlbnRfbmV0d29yazsKLS8vCWludCBobGVuID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfYXV0aGVudGljYXRpb24pOwogCiAJaWVlZS0+YXNzb2NpYXRlX3NlcSsrOwogCWllZWUtPnNvZnRtYWNfc3RhdHMudHhfYXV0aF9ycSsrOwpAQCAtMTMwNyw3ICsxMzg1LDYgQEAKIAogCQlzb2Z0bWFjX21nbXRfeG1pdChza2IsIGllZWUpOwogCQltb2RfdGltZXIoJmllZWUtPmFzc29jaWF0ZV90aW1lciwgamlmZmllcyArIChIWi8yKSk7Ci0JCS8vZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsvL2VkaXQgYnkgdGhvbWFzCiAJfQogCWtmcmVlKGNoYWxsZW5nZSk7CiB9CkBAIC0xMzI4LDcgKzE0MDUsNiBAQAogCWVsc2V7CiAJCXNvZnRtYWNfbWdtdF94bWl0KHNrYiwgaWVlZSk7CiAJCW1vZF90aW1lcigmaWVlZS0+YXNzb2NpYXRlX3RpbWVyLCBqaWZmaWVzICsgKEhaLzIpKTsKLQkJLy9kZXZfa2ZyZWVfc2tiX2FueShza2IpOy8vZWRpdCBieSB0aG9tYXMKIAl9CiB9CiAKQEAgLTEzNTYsNyArMTQzMiw2IEBACiAJewogCQlwcmludGsoIlN1Y2Nlc3NmdWxseSBhc3NvY2lhdGVkLCBodCBub3QgZW5hYmxlZCglZCwgJWQpXG4iLCBpZWVlLT5wSFRJbmZvLT5iQ3VycmVudEhUU3VwcG9ydCwgaWVlZS0+cEhUSW5mby0+YkVuYWJsZUhUKTsKIAkJbWVtc2V0KGllZWUtPmRvdDExSFRPcGVyYXRpb25hbFJhdGVTZXQsIDAsIDE2KTsKLQkJLy9IVFNldENvbm5lY3RCd01vZGUoaWVlZSwgSFRfQ0hBTk5FTF9XSURUSF8yMCwgSFRfRVhUQ0hOTF9PRkZTRVRfTk9fRVhUKTsKIAl9CiAJaWVlZS0+TGlua0RldGVjdEluZm8uU2xvdE51bSA9IDIgKiAoMSArIGllZWUtPmN1cnJlbnRfbmV0d29yay5iZWFjb25faW50ZXJ2YWwvNTAwKTsKIAkvLyBUbyBwcmV2ZW50IHRoZSBpbW1lZGlhdGVseSBjYWxsaW5nIHdhdGNoX2RvZyBhZnRlciBhc3NvY2lhdGlvbi4KQEAgLTEzODgsNyArMTQ2Myw2IEBACiAJZGVsX3RpbWVyX3N5bmMoJmllZWUtPmFzc29jaWF0ZV90aW1lcik7CiAKIAlpZWVlLT5zdGF0ZSA9IElFRUU4MDIxMV9MSU5LRUQ7Ci0JLy9pZWVlLT5VcGRhdGVIYWxSQVRSVGFibGVIYW5kbGVyKGRldiwgaWVlZS0+ZG90MTFIVE9wZXJhdGlvbmFsUmF0ZVNldCk7CiAJcXVldWVfd29yayhpZWVlLT53cSwgJmllZWUtPmFzc29jaWF0ZV9jb21wbGV0ZV93cSk7CiB9CiAKQEAgLTE0MDQsOSArMTQ3OCwxNCBAQAogCiAJaWVlZTgwMjExX3N0b3Bfc2NhbihpZWVlKTsKIAlwcmludGsoIj09PT4lcygpLCBjaGFuOiVkXG4iLCBfX0ZVTkNUSU9OX18sIGllZWUtPmN1cnJlbnRfbmV0d29yay5jaGFubmVsKTsKLQkvL2llZWUtPnNldF9jaGFuKGllZWUtPmRldiwgaWVlZS0+Y3VycmVudF9uZXR3b3JrLmNoYW5uZWwpOwogCUhUU2V0Q29ubmVjdEJ3TW9kZShpZWVlLCBIVF9DSEFOTkVMX1dJRFRIXzIwLCBIVF9FWFRDSE5MX09GRlNFVF9OT19FWFQpOwogCisJaWYoaWVlZS0+ZVJGUG93ZXJTdGF0ZSA9PSBlUmZPZmYpCisJeworICAgICAgICAgICAgcHJpbnRrKCI9PT09PT09PT09PT09PiVzKCk6UmYgc3RhdGUgaXMgZVJmT2ZmLCBzY2hlZHVsZSBpcHNsZWF2ZSB3cSBhZ2FpbixyZXR1cm5cbiIsX19GVU5DVElPTl9fKTsKKwkJdXAoJmllZWUtPnd4X3NlbSk7CisJCXJldHVybjsKKwl9CiAJaWVlZS0+YXNzb2NpYXRlX3NlcSA9IDE7CiAJaWVlZTgwMjExX2Fzc29jaWF0ZV9zdGVwMShpZWVlKTsKIApAQCAtMTQzMiwxNCArMTUxMSwxNiBAQAogCWlmICgoaWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSAmJiAhKG5ldC0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9JQlNTKSkKIAkJcmV0dXJuOwogCisJaWYgKChpZWVlLT5pd19tb2RlID09IElXX01PREVfQURIT0MpICYmIChuZXQtPmNoYW5uZWwgPiBpZWVlLT5pYnNzX21heGpvaW5fY2hhbCkpCisJCXJldHVybjsKIAogCWlmIChpZWVlLT5pd19tb2RlID09IElXX01PREVfSU5GUkEgfHwgaWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKXsKIAkJLyogaWYgdGhlIHVzZXIgc3BlY2lmaWVkIHRoZSBBUCBNQUMsIHdlIG5lZWQgYWxzbyB0aGUgZXNzaWQKIAkJICogVGhpcyBjb3VsZCBiZSBvYnRhaW5lZCBieSBiZWFjb25zIG9yLCBpZiB0aGUgbmV0d29yayBkb2VzIG5vdAogCQkgKiBicm9hZGNhc3QgaXQsIGl0IGNhbiBiZSBwdXQgbWFudWFsbHkuCiAJCSAqLwotCQlhcHNldCA9IGllZWUtPndhcF9zZXQ7Ly8obWVtY21wKGllZWUtPmN1cnJlbnRfbmV0d29yay5ic3NpZCwgemVybyxFVEhfQUxFTikhPTAgKTsKLQkJc3NpZHNldCA9IGllZWUtPnNzaWRfc2V0Oy8vaWVlZS0+Y3VycmVudF9uZXR3b3JrLnNzaWRbMF0gIT0gJ1wwJzsKKwkJYXBzZXQgPSBpZWVlLT53YXBfc2V0OworCQlzc2lkc2V0ID0gaWVlZS0+c3NpZF9zZXQ7CiAJCXNzaWRicm9hZCA9ICAhKG5ldC0+c3NpZF9sZW4gPT0gMCB8fCBuZXQtPnNzaWRbMF09PSAnXDAnKTsKIAkJYXBtYXRjaCA9IChtZW1jbXAoaWVlZS0+Y3VycmVudF9uZXR3b3JrLmJzc2lkLCBuZXQtPmJzc2lkLCBFVEhfQUxFTik9PTApOwogCQlzc2lkbWF0Y2ggPSAoaWVlZS0+Y3VycmVudF9uZXR3b3JrLnNzaWRfbGVuID09IG5ldC0+c3NpZF9sZW4pJiZcCkBAIC0xNDgwLDcgKzE1NjEsNiBAQAogCQkJCQlpZWVlLT5Bc29jUmV0cnlDb3VudCA9IDA7CiAJCQkJCS8vZm9yIEhUIGJ5IGFteSAwODA1MTQKIAkJCQkJaWYoKGllZWUtPmN1cnJlbnRfbmV0d29yay5xb3NfZGF0YS5zdXBwb3J0ZWQgPT0gMSkgJiYKLQkJCQkJICAvLyAoaWVlZS0+cEhUSW5mby0+YkVuYWJsZUhUICYmIGllZWUtPmN1cnJlbnRfbmV0d29yay5ic3NodC5iZFN1cHBvcnRIVCkpCiAJCQkJCSAgIGllZWUtPmN1cnJlbnRfbmV0d29yay5ic3NodC5iZFN1cHBvcnRIVCkKIC8qV0IsIDIwMDguMDkuMDk6YkN1cnJlbnRIVFN1cHBvcnQgYW5kIGJFbmFibGVIVCB0d28gZmxhZ3MgYXJlIGdvaW5nIHRvIHB1dCB0b2dldGhlciB0byBjaGVjayB3aGV0aGVyIHdlIGFyZSBpbiBIVCBub3csIHNvIG5lZWRuJ3QgdG8gY2hlY2sgYkVuYWJsZUhUIGZsYWdzIGhlcmUuIFRoYXQncyBpcyB0byBzYXkgd2Ugd2lsbCBzZXQgdG8gSFQgc3VwcG9ydCB3aGVuZXZlciBqb2luZWQgQVAgaGFzIHRoZSBhYmlsaXR5IHRvIHN1cHBvcnQgSFQuIEFuZCB3aGV0aGVyIHdlIGFyZSBpbiBIVCBvciBub3QsIHBsZWFzZSBjaGVjayBiQ3VycmVudEhUU3VwcG9ydCYmYkVuYWJsZUhUIG5vdyBwbGVhc2UuKi8KIAkJCQkJewpAQCAtMTUwOCw3ICsxNTg4LDYgQEAKIAkJCQkJCXByaW50ayhLRVJOX0lORk8iVXNpbmcgQiByYXRlc1xuIik7CiAJCQkJCX0KIAkJCQkJbWVtc2V0KGllZWUtPmRvdDExSFRPcGVyYXRpb25hbFJhdGVTZXQsIDAsIDE2KTsKLQkJCQkJLy9IVFNldENvbm5lY3RCd01vZGUoaWVlZSwgSFRfQ0hBTk5FTF9XSURUSF8yMCwgSFRfRVhUQ0hOTF9PRkZTRVRfTk9fRVhUKTsKIAkJCQkJaWVlZS0+c3RhdGUgPSBJRUVFODAyMTFfTElOS0VEOwogCQkJCX0KIApAQCAtMTU5OCw2ICsxNjc3LDE2IEBACiAJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mIChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAgKSkKIAkJcmV0dXJuIC0xOyAvKiBjb3JydXB0ZWQgKi8KIAorICAgICAgICBpZigobWVtY21wKGhlYWRlci0+YWRkcjMsaWVlZS0+Y3VycmVudF9uZXR3b3JrLmJzc2lkLEVUSF9BTEVOKSAhPSAwKSYmCisgICAgICAgICAgICAgICAgKG1lbWNtcChoZWFkZXItPmFkZHIzLCJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiLEVUSF9BTEVOKSAhPSAwKSkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYobWVtY21wKGhlYWRlci0+YWRkcjMsaWVlZS0+Y3VycmVudF9uZXR3b3JrLmJzc2lkLEVUSF9BTEVOKSA9PSAwKSB7CisgICAgICAgIH0KKworICAgICAgICBpZihtZW1jbXAoaGVhZGVyLT5hZGRyMywiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIixFVEhfQUxFTikgPT0gMCkgeworICAgICAgICB9CiAJbWVtY3B5KHNyYyxoZWFkZXItPmFkZHIyLCBFVEhfQUxFTik7CiAKIAlza2JlbmQgPSAodTgqKXNrYi0+ZGF0YSArIHNrYi0+bGVuOwpAQCAtMTYxNSw3ICsxNzA0LDYgQEAKIAkJdGFnKys7IC8qIHBvaW50IHRvIHRoZSBuZXh0IHRhZyAqLwogCX0KIAotCS8vSUVFRTgwMjExRE1FU0coIkNhcmQgTUFDIGFkZHJlc3MgaXMgIk1BQ1NUUiwgTUFDMlNUUihzcmMpKTsKIAlpZiAoc3NpZGxlbiA9PSAwKSByZXR1cm4gMTsKIAogCWlmICghc3NpZCkgcmV0dXJuIDE7IC8qIHNzaWQgbm90IGZvdW5kIGluIHRhZ2dlZCBwYXJhbSAqLwpAQCAtMTY3MywxMSArMTc2MSw4IEBACiB7CiAJdTggZGVzdFtFVEhfQUxFTl07CiAKLQkvL0lFRUU4MDIxMURNRVNHKCJSeCBwcm9iZSIpOwogCWllZWUtPnNvZnRtYWNfc3RhdHMucnhfcHJvYmVfcnErKzsKLQkvL0RNRVNHKCJEZXN0IGlzICJNQUNTVFIsIE1BQzJTVFIoZGVzdCkpOwogCWlmIChwcm9iZV9ycV9wYXJzZShpZWVlLCBza2IsIGRlc3QpKXsKLQkJLy9JRUVFODAyMTFETUVTRygiV2FzIGZvciBtZSEiKTsKIAkJaWVlZS0+c29mdG1hY19zdGF0cy50eF9wcm9iZV9ycysrOwogCQlpZWVlODAyMTFfcmVzcF90b19wcm9iZShpZWVlLCBkZXN0KTsKIAl9CkBAIC0xNjg4LDE0ICsxNzczLDEyIEBACiB7CiAJdTggZGVzdFtFVEhfQUxFTl07CiAJaW50IHN0YXR1czsKLQkvL0lFRUU4MDIxMURNRVNHKCJSeCBwcm9iZSIpOwogCWllZWUtPnNvZnRtYWNfc3RhdHMucnhfYXV0aF9ycSsrOwogCiAJc3RhdHVzID0gYXV0aF9ycV9wYXJzZShza2IsIGRlc3QpOwogCWlmIChzdGF0dXMgIT0gLTEpIHsKIAkJaWVlZTgwMjExX3Jlc3BfdG9fYXV0aChpZWVlLCBzdGF0dXMsIGRlc3QpOwogCX0KLQkvL0RNRVNHKCJEZXN0IGlzICJNQUNTVFIsIE1BQzJTVFIoZGVzdCkpOwogCiB9CiAKQEAgLTE3MDQsNyArMTc4Nyw2IEBACiB7CiAKIAl1OCBkZXN0W0VUSF9BTEVOXTsKLQkvL3Vuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZWVlLT5zb2Z0bWFjX3N0YXRzLnJ4X2Fzc19ycSsrOwogCWlmIChhc3NvY19ycV9wYXJzZShza2IsZGVzdCkgIT0gLTEpewpAQCAtMTczOSw3ICsxODIxLDYgQEAKIAkJcmV0dXJuIDA7CiAJKi8KIAlkdGltID0gaWVlZS0+Y3VycmVudF9uZXR3b3JrLmR0aW1fZGF0YTsKLQkvL3ByaW50aygiRFRJTVxuIik7CiAJaWYoIShkdGltICYgSUVFRTgwMjExX0RUSU1fVkFMSUQpKQogCQlyZXR1cm4gMDsKIAl0aW1lb3V0ID0gaWVlZS0+Y3VycmVudF9uZXR3b3JrLmJlYWNvbl9pbnRlcnZhbDsgLy9zaG91bGQgd2UgdXNlIHBzX3RpbWVvdXQgdmFsdWUgb3IgYmVhY29uX2ludGVydmFsCkBAIC0xNzYyLDcgKzE4NDMsNiBAQAogCWlmKHRpbWVfbCl7CiAJCSp0aW1lX2wgPSBpZWVlLT5jdXJyZW50X25ldHdvcmsubGFzdF9kdGltX3N0YV90aW1lWzBdCiAJCQkrIChpZWVlLT5jdXJyZW50X25ldHdvcmsuYmVhY29uX2ludGVydmFsKTsKLQkJLy8JKiBpZWVlLT5jdXJyZW50X25ldHdvcmsuZHRpbV9wZXJpb2QpICogMTAwMDsKIAl9CiAKIAlpZih0aW1lX2gpewpAQCAtMTc5MCw3ICsxODcwLDYgQEAKIAkJaWVlZS0+aXdfbW9kZSAhPSBJV19NT0RFX0lORlJBIHx8CiAJCWllZWUtPnN0YXRlICE9IElFRUU4MDIxMV9MSU5LRUQpKXsKIAotCS8vCSN3YXJuaW5nIENIRUNLX0xPQ0tfSEVSRQogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaWVlZS0+bWdtdF90eF9sb2NrLCBmbGFnczIpOwogCiAJCWllZWU4MDIxMV9zdGFfd2FrZXVwKGllZWUsIDEpOwpAQCAtMTgwOSw3ICsxODg4LDYgQEAKIAkJCWllZWUtPmVudGVyX3NsZWVwX3N0YXRlKGllZWUtPmRldix0aCx0bCk7CiAKIAkJZWxzZSBpZihpZWVlLT5zdGFfc2xlZXAgPT0gMCl7Ci0JCS8vCXByaW50aygic2VuZCBudWxsIDFcbiIpOwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmllZWUtPm1nbXRfdHhfbG9jaywgZmxhZ3MyKTsKIAogCQkJaWYoaWVlZS0+cHNfaXNfcXVldWVfZW1wdHkoaWVlZS0+ZGV2KSl7CkBAIC0xOTE4LDggKzE5OTYsNiBAQAogCQkJaWVlZTgwMjExX3J4X0RFTEJBKGllZWUsIHNrYik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLS8vCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLS8vCQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9CQSwgInVua25vd24gYWN0aW9uIGZyYW1lKCVkKVxuIiwgdG1wKTsKIAkJCWJyZWFrOwogCX0KIAlyZXR1cm47CkBAIC0xOTM2LDcgKzIwMTIsNiBAQAogCWludCBjaGxlbj0wOwogCWludCBhaWQ7CiAJc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXNwb25zZV9mcmFtZSAqYXNzb2NfcmVzcDsKLS8vCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50ICppbmZvX2VsZW1lbnQ7CiAJYm9vbCBiU3VwcG9ydE5tb2RlID0gdHJ1ZSwgYkhhbGZTdXBwb3J0Tm1vZGUgPSBmYWxzZTsgLy9kZWZhdWx0IHN1cHBvcnQgTiBtb2RlLCBkaXNhYmxlIGhhbGZObW9kZQogCiAJaWYoIWllZWUtPnByb3RvX3N0YXJ0ZWQpCkBAIC0yMDk1LDggKzIxNzAsNiBAQAogCQkJCWllZWUtPnNvZnRtYWNfc3RhdHMucmVhc3NvYysrOwogCQkJCWllZWUtPmlzX3JvYW1pbmcgPSB0cnVlOwogCQkJCWllZWU4MDIxMV9kaXNhc3NvY2lhdGUoaWVlZSk7Ci0JCQkvLwlub3RpZnlfd3hfYXNzb2NfZXZlbnQoaWVlZSk7Ci0JCQkJLy9IVFNldENvbm5lY3RCd01vZGUoaWVlZSwgSFRfQ0hBTk5FTF9XSURUSF8yMCwgSFRfRVhUQ0hOTF9PRkZTRVRfTk9fRVhUKTsKIAkJCQlSZW1vdmVQZWVyVFMoaWVlZSwgaGVhZGVyLT5hZGRyMik7CiAJCQkJaWYoaWVlZS0+TGVkQ29udHJvbEhhbmRsZXIgIT0gTlVMTCkKIAkJCQkgICAgICAgIGllZWUtPkxlZENvbnRyb2xIYW5kbGVyKGllZWUtPmRldiwgTEVEX0NUTF9TVEFSVF9UT19MSU5LKTsgLy9hZGRlZCBieSBhbXkgZm9yIExFRCAwOTAzMTgKQEAgLTIxMTEsNyArMjE4NCw2IEBACiAJCQlicmVhazsKIAl9CiAKLQkvL2Rldl9rZnJlZV9za2JfYW55KHNrYik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxNjMsMjIgKzIyMzUsMTYgQEAKIAkJCS8qIGFzIGZvciB0aGUgY29tcGxldGlvbiBmdW5jdGlvbiwgaXQgZG9lcyBub3QgbmVlZAogCQkJICogdG8gY2hlY2sgaXQgYW55IG1vcmUuCiAJCQkgKiAqLwotCQkJLy9wcmludGsoImVycm9yOm5vIGRlc2NyaXB0b3IgbGVmdEBxdWV1ZV9pbmRleCAlZCwgJWQsICVkXG4iLCBxdWV1ZV9pbmRleCwgc2tiX3F1ZXVlX2xlbigmaWVlZS0+c2tiX3dhaXRRW3F1ZXVlX2luZGV4XSksIGllZWUtPmNoZWNrX25pY19lbm91Z2hfZGVzYyhpZWVlLT5kZXYscXVldWVfaW5kZXgpKTsKLQkJCS8vaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlKGllZWUpOwogCQkJc2tiX3F1ZXVlX3RhaWwoJmllZWUtPnNrYl93YWl0UVtxdWV1ZV9pbmRleF0sIHR4Yi0+ZnJhZ21lbnRzW2ldKTsKIAkJfWVsc2V7CiAJCQlpZWVlLT5zb2Z0bWFjX2RhdGFfaGFyZF9zdGFydF94bWl0KAogCQkJCQl0eGItPmZyYWdtZW50c1tpXSwKIAkJCQkJaWVlZS0+ZGV2LGllZWUtPnJhdGUpOwotCQkJLy9pZWVlLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JCQkvL2llZWUtPnN0YXRzLnR4X2J5dGVzICs9IHR4Yi0+ZnJhZ21lbnRzW2ldLT5sZW47Ci0JCQkvL2llZWUtPmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCQl9CiAJfQogI2VuZGlmCiAJaWVlZTgwMjExX3R4Yl9mcmVlKHR4Yik7CiAKLS8vZXhpdDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLGZsYWdzKTsKIAogfQpAQCAtMjE5Nyw5ICsyMjYzLDcgQEAKIAkJCWllZWUtPnNvZnRtYWNfZGF0YV9oYXJkX3N0YXJ0X3htaXQoCiAJCQkJaWVlZS0+dHhfcGVuZGluZy50eGItPmZyYWdtZW50c1tpXSwKIAkJCQlpZWVlLT5kZXYsaWVlZS0+cmF0ZSk7Ci0JCQkJLy8oaSsxKTxpZWVlLT50eF9wZW5kaW5nLnR4Yi0+bnJfZnJhZ3MpOwogCQkJaWVlZS0+c3RhdHMudHhfcGFja2V0cysrOwotCQkvLwlpZWVlLT5kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAkJfQogCX0KIApAQCAtMjI0OSw3ICsyMzEzLDYgQEAKIAkJCQlpZWVlLT5zZXFfY3RybFswXSsrOwogCiAJCQlpZWVlLT5zb2Z0bWFjX2RhdGFfaGFyZF9zdGFydF94bWl0KHNrYixpZWVlLT5kZXYsaWVlZS0+YmFzaWNfcmF0ZSk7Ci0JCQkvL2Rldl9rZnJlZV9za2JfYW55KHNrYik7Ly9lZGl0IGJ5IHRob21hcwogCQl9CiAJfQogCWlmICghaWVlZS0+cXVldWVfc3RvcCAmJiBpZWVlLT50eF9wZW5kaW5nLnR4YikKQEAgLTIyNjcsMTUgKzIzMzAsMTIgQEAKIAogdm9pZCBpZWVlODAyMTFfcnRsX3N0b3BfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7Ci0JLy91bnNpZ25lZCBsb25nIGZsYWdzOwotCS8vc3Bpbl9sb2NrX2lycXNhdmUoJmllZWUtPmxvY2ssZmxhZ3MpOwogCiAJaWYgKCEgbmV0aWZfcXVldWVfc3RvcHBlZChpZWVlLT5kZXYpKXsKIAkJbmV0aWZfc3RvcF9xdWV1ZShpZWVlLT5kZXYpOwogCQlpZWVlLT5zb2Z0bWFjX3N0YXRzLnN3dHhzdG9wKys7CiAJfQogCWllZWUtPnF1ZXVlX3N0b3AgPSAxOwotCS8vc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZS0+bG9jayxmbGFncyk7CiAKIH0KIApAQCAtMjM2Miw3ICsyNDIyLDcgQEAKIAogLy8JaWYoKElTX0RPVDExRF9FTkFCTEUoaWVlZSkpICYmIChpZWVlLT5zdGF0ZSA9PSBJRUVFODAyMTFfTk9MSU5LKSkKIAlpZiAoaWVlZS0+c3RhdGUgPT0gSUVFRTgwMjExX05PTElOSykKLQkJaWVlZS0+Y3VycmVudF9uZXR3b3JrLmNoYW5uZWwgPSA2OworCQlpZWVlLT5jdXJyZW50X25ldHdvcmsuY2hhbm5lbCA9IGllZWUtPklic3NTdGFydENobmw7CiAJLyogaWYgbm90IHRoZW4gdGhlIHN0YXRlIGlzIG5vdCBsaW5rZWQuIE1heWJlIHRoZSB1c2VyIHN3aXRoY2VkIHRvCiAJICogYWQtaG9jIG1vZGUganVzdCBhZnRlciBiZWluZyBpbiBtb25pdG9yIG1vZGUsIG9yIGp1c3QgYWZ0ZXIKIAkgKiBiZWluZyB2ZXJ5IGZldyB0aW1lIGluIG1hbmFnZWQgbW9kZSAoc28gdGhlIGNhcmQgaGF2ZSBoYWQgbm8KQEAgLTI1MDksMTEgKzI1NjksOSBAQAogCWllZWUtPnN0YXRlID0gSUVFRTgwMjExX05PTElOSzsKIAlpZWVlLT5pc19zZXRfa2V5ID0gZmFsc2U7CiAKLQkvL0xaTSBmb3IgdXNiIGRldiBjcmFzaC4KLQkvL2llZWUtPmxpbmtfY2hhbmdlKGllZWUtPmRldik7CiAJcXVldWVfZGVsYXllZF93b3JrKGllZWUtPndxLCAmaWVlZS0+bGlua19jaGFuZ2Vfd3EsIDApOwogCi0JLy9IVFNldENvbm5lY3RCd01vZGUoaWVlZSwgSFRfQ0hBTk5FTF9XSURUSF8yMCwgSFRfRVhUQ0hOTF9PRkZTRVRfTk9fRVhUKTsKKwogCW5vdGlmeV93eF9hc3NvY19ldmVudChpZWVlKTsKIAogfQpAQCAtMjY1Nyw4ICsyNzE1LDYgQEAKIAogCWlmIChpZWVlLT5jdXJyZW50X25ldHdvcmsuYmVhY29uX2ludGVydmFsID09IDApCiAJCWllZWUtPmN1cnJlbnRfbmV0d29yay5iZWFjb25faW50ZXJ2YWwgPSAxMDA7Ci0vLwlwcmludGsoIj09PT4lcygpLCBjaGFuOiVkXG4iLCBfX0ZVTkNUSU9OX18sIGllZWUtPmN1cnJlbnRfbmV0d29yay5jaGFubmVsKTsKLS8vCWllZWUtPnNldF9jaGFuKGllZWUtPmRldixpZWVlLT5jdXJyZW50X25ldHdvcmsuY2hhbm5lbCk7CiAKICAgICAgICAJZm9yKGkgPSAwOyBpIDwgMTc7IGkrKykgewogCSAgaWVlZS0+bGFzdF9yeHNlcV9udW1baV0gPSAtMTsKQEAgLTI3MjEsNyArMjc3Nyw2IEBACiAJaWVlZS0+UmVnZG90MTFIVE9wZXJhdGlvbmFsUmF0ZVNldFswXT0gMHhmZjsvL3N1cHBvcnQgTUNTIDB+NwogCWllZWUtPlJlZ2RvdDExSFRPcGVyYXRpb25hbFJhdGVTZXRbMV09IDB4ZmY7Ly9zdXBwb3J0IE1DUyA4fjE1CiAJaWVlZS0+UmVnZG90MTFIVE9wZXJhdGlvbmFsUmF0ZVNldFs0XT0gMHgwMTsKLQkvL2FkZGVkIGJ5IGFteQogCWllZWUtPmFjdHNjYW5uaW5nID0gZmFsc2U7CiAJaWVlZS0+YmVpbnJldHJ5ID0gZmFsc2U7CiAJaWVlZS0+aXNfc2V0X2tleSA9IGZhbHNlOwpAQCAtMjg5MSw4ICsyOTQ2LDYgQEAKIAogCWlmIChpZWVlLT5zZXRfc2VjdXJpdHkpCiAJCWllZWUtPnNldF9zZWN1cml0eShpZWVlLT5kZXYsICZzZWMpOwotCS8vZWxzZQotCS8vCXJldCA9IC1FT1BOT1RTVVBQOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTMxNzMsNyArMzIyNiw2IEBACiAJaW50IHJldD0wOwogCiAJZG93bigmaWVlZS0+d3hfc2VtKTsKLQkvL0lFRUVfREVCVUdfSU5GTygid3BhX3N1cHBsaWNhbnQ6IGxlbj0lZFxuIiwgcC0+bGVuZ3RoKTsKIAogCWlmIChwLT5sZW5ndGggPCBzaXplb2Yoc3RydWN0IGllZWVfcGFyYW0pIHx8ICFwLT5wb2ludGVyKXsKIAkJcmV0ID0gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKaW5kZXggNDg0YzNhYi4uYTZhNWQ2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKQEAgLTMyLDcgKzMyLDYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0vLyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgpAQCAtMjA4LDcgKzIwNyw2IEBACiAJLyogVG8gZW5jcnlwdCwgZnJhbWUgZm9ybWF0IGlzOgogCSAqIElWICg0IGJ5dGVzKSwgY2xlYXIgcGF5bG9hZCAoaW5jbHVkaW5nIFNOQVApLCBJQ1YgKDQgYnl0ZXMpICovCiAKLQkvLyBQUjogRklYTUU6IENvcGllZCBmcm9tIGhvc3RhcC4gQ2hlY2sgZnJhZ21lbnRhdGlvbi9NU0RVL01QRFUgZW5jcnlwdGlvbi4KIAkvKiBIb3N0LWJhc2VkIElFRUUgODAyLjExIGZyYWdtZW50YXRpb24gZm9yIFRYIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLCBzbwogCSAqIGNhbGwgYm90aCBNU0RVIGFuZCBNUERVIGVuY3J5cHRpb24gZnVuY3Rpb25zIGZyb20gaGVyZS4gKi8KIAlhdG9taWNfaW5jKCZjcnlwdC0+cmVmY250KTsKQEAgLTIzMSw3ICsyMjksNiBAQAogCiAKIHZvaWQgaWVlZTgwMjExX3R4Yl9mcmVlKHN0cnVjdCBpZWVlODAyMTFfdHhiICp0eGIpIHsKLQkvL2ludCBpOwogCWlmICh1bmxpa2VseSghdHhiKSkKIAkJcmV0dXJuOwogCWtmcmVlKHR4Yik7CkBAIC0yODAsNyArMjc3LDYgQEAKIAlpZiAoZXRoLT5oX3Byb3RvICE9IGh0b25zKEVUSF9QX0lQKSkKIAkJcmV0dXJuIDA7CiAKLS8vCUlFRUU4MDIxMV9ERUJVR19EQVRBKElFRUU4MDIxMV9ETF9EQVRBLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAlpcCA9IGlwX2hkcihza2IpOwogCiAJc3dpdGNoIChpcC0+dG9zICYgMHhmYykgewpAQCAtNjgxLDEwICs2NzcsOCBAQAogCQlpZiAoZW5jcnlwdCkKIAkJCWZjID0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgfCBJRUVFODAyMTFfRkNUTF9XRVA7CiAJCWVsc2UKLQogICAgICAgICAgICAgICAgICAgICAgICAgZmMgPSBJRUVFODAyMTFfRlRZUEVfREFUQTsKIAotCQkvL2lmKGllZWUtPmN1cnJlbnRfbmV0d29yay5Rb1NfRW5hYmxlKQogCQlpZihxb3NfYWN0aXZlZCkKIAkJCWZjIHw9IElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQTsKIAkJZWxzZQpAQCAtNzY1LDcgKzc1OSw2IEBACiAJCXR4Yi0+ZW5jcnlwdGVkID0gZW5jcnlwdDsKIAkJdHhiLT5wYXlsb2FkX3NpemUgPSBieXRlczsKIAotCQkvL2lmIChpZWVlLT5jdXJyZW50X25ldHdvcmsuUW9TX0VuYWJsZSkKIAkJaWYocW9zX2FjdGl2ZWQpCiAJCXsKIAkJCXR4Yi0+cXVldWVfaW5kZXggPSBVUDJBQyhza2ItPnByaW9yaXR5KTsKQEAgLTgxMiw3ICs4MDUsNiBAQAogCQkJCS8qIFRoZSBsYXN0IGZyYWdtZW50IHRha2VzIHRoZSByZW1haW5pbmcgbGVuZ3RoICovCiAJCQkJYnl0ZXMgPSBieXRlc19sYXN0X2ZyYWc7CiAJCQl9Ci0JCQkvL2lmKGllZWUtPmN1cnJlbnRfbmV0d29yay5Rb1NfRW5hYmxlKQogCQkJaWYocW9zX2FjdGl2ZWQpCiAJCQl7CiAJCQkJLy8gYWRkIDEgb25seSBpbmRpY2F0ZSB0byBjb3JyZXNwb25kaW5nIHNlcSBudW1iZXIgY29udHJvbCAyMDA2LzcvMTIKQEAgLTg4OSw3ICs4ODEsNiBAQAogCQlpZiAoIHRjYl9kZXNjLT5iTXVsdGljYXN0IHx8ICB0Y2JfZGVzYy0+YkJyb2FkY2FzdCkKIAkJCXRjYl9kZXNjLT5kYXRhX3JhdGUgPSBpZWVlLT5iYXNpY19yYXRlOwogCQllbHNlCi0JCQkvL3RjYl9kZXNjLT5kYXRhX3JhdGUgPSBDVVJSRU5UX1JBVEUoaWVlZS0+Y3VycmVudF9uZXR3b3JrLm1vZGUsIGllZWUtPnJhdGUsIGllZWUtPkhUQ3VycmVudE9wZXJhUmF0ZSk7CiAJCQl0Y2JfZGVzYy0+ZGF0YV9yYXRlID0gQ1VSUkVOVF9SQVRFKGllZWUtPm1vZGUsIGllZWUtPnJhdGUsIGllZWUtPkhUQ3VycmVudE9wZXJhUmF0ZSk7CiAJCWllZWU4MDIxMV9xdXJleV9TaG9ydFByZWFtYmxlTW9kZShpZWVlLCB0Y2JfZGVzYyk7CiAJCWllZWU4MDIxMV90eF9xdWVyeV9hZ2dfY2FwKGllZWUsIHR4Yi0+ZnJhZ21lbnRzWzBdLCB0Y2JfZGVzYyk7CkBAIC04OTcsOCArODg4LDYgQEAKIAkJaWVlZTgwMjExX3F1ZXJ5X0JhbmR3aWR0aE1vZGUoaWVlZSwgdGNiX2Rlc2MpOwogCQlpZWVlODAyMTFfcXVlcnlfcHJvdGVjdGlvbm1vZGUoaWVlZSwgdGNiX2Rlc2MsIHR4Yi0+ZnJhZ21lbnRzWzBdKTsKIAkJaWVlZTgwMjExX3F1ZXJ5X3NlcW51bShpZWVlLCB0eGItPmZyYWdtZW50c1swXSwgaGVhZGVyLmFkZHIxKTsKLS8vCQlJRUVFODAyMTFfREVCVUdfREFUQShJRUVFODAyMTFfRExfREFUQSwgdHhiLT5mcmFnbWVudHNbMF0tPmRhdGEsIHR4Yi0+ZnJhZ21lbnRzWzBdLT5sZW4pOwotCQkvL0lFRUU4MDIxMV9ERUJVR19EQVRBKElFRUU4MDIxMV9ETF9EQVRBLCB0Y2JfZGVzYywgc2l6ZW9mKGNiX2Rlc2MpKTsKICNlbmRpZgogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCmluZGV4IDJjZTViZDUuLjk4NGEzNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCkBAIC03Nyw3ICs3Nyw2IEBACiAJLyogQWRkIHRoZSBFU1NJRCAqLwogCWl3ZS5jbWQgPSBTSU9DR0lXRVNTSUQ7CiAJaXdlLnUuZGF0YS5mbGFncyA9IDE7Ci0vLwlpZiAobmV0d29yay0+ZmxhZ3MgJiBORVRXT1JLX0VNUFRZX0VTU0lEKSB7CiAJaWYgKG5ldHdvcmstPnNzaWRfbGVuID09IDApIHsKIAkJaXdlLnUuZGF0YS5sZW5ndGggPSBzaXplb2YoIjxoaWRkZW4+Iik7CiAgICAgICAgICAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBzdGFydCwgc3RvcCwgJml3ZSwgIjxoaWRkZW4+Iik7CkBAIC0yNDAsOSArMjM5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJY2hhciAqZXYgPSBleHRyYTsKLS8vCWNoYXIgKnN0b3AgPSBldiArIElXX1NDQU5fTUFYX0RBVEE7CiAJY2hhciAqc3RvcCA9IGV2ICsgd3JxdS0+ZGF0YS5sZW5ndGg7Ly9JV19TQ0FOX01BWF9EQVRBOwotCS8vY2hhciAqc3RvcCA9IGV2ICsgSVdfU0NBTl9NQVhfREFUQTsKIAlpbnQgaSA9IDA7CiAJaW50IGVyciA9IDA7CiAJSUVFRTgwMjExX0RFQlVHX1dYKCJHZXR0aW5nIHNjYW5cbiIpOwpAQCAtNTExLDcgKzUwOCw2IEBACiAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfc2VjdXJpdHkgc2VjID0gewogICAgICAgICAgICAgICAgIC5mbGFncyA9IDAsCiAgICAgICAgIH07Ci0JLy9wcmludGsoIj09PT09PT5lbmNvZGluZyBmbGFnOiV4LGV4dCBmbGFnOiV4LCBleHQgYWxnOiVkXG4iLCBlbmNvZGluZy0+ZmxhZ3MsZXh0LT5leHRfZmxhZ3MsIGV4dC0+YWxnKTsKICAgICAgICAgaWR4ID0gZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOwogICAgICAgICBpZiAoaWR4KSB7CiAgICAgICAgICAgICAgICAgaWYgKGlkeCA8IDEgfHwgaWR4ID4gV0VQX0tFWVMpCkBAIC01NjIsNyArNTU4LDYgQEAKICAgICAgICAgfQogCiAJc2VjLmVuYWJsZWQgPSAxOwotICAgIC8vICAgIHNlYy5lbmNyeXB0ID0gMTsKIAogICAgICAgICBzd2l0Y2ggKGV4dC0+YWxnKSB7CiAgICAgICAgIGNhc2UgSVdfRU5DT0RFX0FMR19XRVA6CkBAIC01ODAsNyArNTc1LDcgQEAKICAgICAgICAgICAgICAgICByZXQgPSAtRUlOVkFMOwogICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgfQotCXByaW50aygiYWxnIG5hbWU6JXNcbiIsYWxnKTsKKwlJRUVFODAyMTFfREVCVUdfV1goImFsZyBuYW1lOiAlc1xuIiwgYWxnKTsKIAogCSBvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMoYWxnKTsKICAgICAgICAgaWYgKG9wcyA9PSBOVUxMKQpAQCAtNjI0LDggKzYxOSw2IEBACiAgICAgICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICB9CiAjaWYgMQotIC8vc2tpcF9ob3N0X2NyeXB0OgotCS8vcHJpbnRrKCJza2lwX2hvc3RfY3J5cHQ6ZXh0X2ZsYWdzOiV4XG4iLCBleHQtPmV4dF9mbGFncyk7CiAgICAgICAgIGlmIChleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfU0VUX1RYX0tFWSkgewogICAgICAgICAgICAgICAgIGllZWUtPnR4X2tleWlkeCA9IGlkeDsKICAgICAgICAgICAgICAgICBzZWMuYWN0aXZlX2tleSA9IGlkeDsKQEAgLTYzMyw3ICs2MjYsNiBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKGV4dC0+YWxnICE9IElXX0VOQ09ERV9BTEdfTk9ORSkgewotICAgICAgICAgICAgICAgIC8vbWVtY3B5KHNlYy5rZXlzW2lkeF0sIGV4dC0+a2V5LCBleHQtPmtleV9sZW4pOwogICAgICAgICAgICAgICAgIHNlYy5rZXlfc2l6ZXNbaWR4XSA9IGV4dC0+a2V5X2xlbjsKICAgICAgICAgICAgICAgICBzZWMuZmxhZ3MgfD0gKDEgPDwgaWR4KTsKICAgICAgICAgICAgICAgICBpZiAoZXh0LT5hbGcgPT0gSVdfRU5DT0RFX0FMR19XRVApIHsKQEAgLTY5MCw3ICs2ODIsNiBAQAogCXN3aXRjaCAoZGF0YS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CiAgICAgICAgIGNhc2UgSVdfQVVUSF9XUEFfVkVSU0lPTjoKIAkgICAgIC8qbmVlZCB0byBzdXBwb3J0IHdwYTIgaGVyZSovCi0JCS8vcHJpbnRrKCJ3cGEgdmVyc2lvbjoleFxuIiwgZGF0YS0+dmFsdWUpOwogCQlicmVhazsKICAgICAgICAgY2FzZSBJV19BVVRIX0NJUEhFUl9QQUlSV0lTRToKICAgICAgICAgY2FzZSBJV19BVVRIX0NJUEhFUl9HUk9VUDoKQEAgLTcwOCw4ICs2OTksNiBAQAogCQlicmVhazsKIAogCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKLQkJLy9wcmludGsoIj09PT09PT4lcygpOmRhdGEtPnZhbHVlIGlzICVkXG4iLF9fRlVOQ1RJT05fXyxkYXRhLT52YWx1ZSk7Ci0JLy8JaWVlZS0+b3Blbl93ZXAgPSAoZGF0YS0+dmFsdWUmSVdfQVVUSF9BTEdfT1BFTl9TWVNURU0pPzE6MDsKIAkJaWYoZGF0YS0+dmFsdWUgJiBJV19BVVRIX0FMR19TSEFSRURfS0VZKXsKIAkJCWllZWUtPm9wZW5fd2VwID0gMDsKIAkJCWllZWUtPmF1dGhfbW9kZSA9IDE7CkBAIC03MjEsMTcgKzcxMCwxNCBAQAogCQllbHNlIGlmKGRhdGEtPnZhbHVlICYgSVdfQVVUSF9BTEdfTEVBUCl7CiAJCQlpZWVlLT5vcGVuX3dlcCA9IDE7CiAJCQlpZWVlLT5hdXRoX21vZGUgPSAyOwotCQkJLy9wcmludGsoImhhaGFoYWE6TEVBUFxuIik7CiAJCX0KIAkJZWxzZQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCS8vcHJpbnRrKCJvcGVuX3dlcDolZFxuIiwgaWVlZS0+b3Blbl93ZXApOwogCQlicmVhazsKIAogI2lmIDEKIAljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6CiAJCWllZWUtPndwYV9lbmFibGVkID0gKGRhdGEtPnZhbHVlKT8xOjA7Ci0JCS8vcHJpbnRrKCJlbmFibGUgd3BhOiVkXG4iLCBpZWVlLT53cGFfZW5hYmxlZCk7CiAJCWJyZWFrOwogCiAjZW5kaWYKQEAgLTc1NSw3ICs3NDEsNiBAQAogCiAJaWYgKGxlbj5NQVhfV1BBX0lFX0xFTiB8fCAobGVuICYmIGllID09IE5VTEwpKQogCXsKLQkvLwlwcmludGsoInJldHVybiBlcnJvciBvdXQsIGxlbjolZFxuIiwgbGVuKTsKIAlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfQkEuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfQkEuaAppbmRleCA4ZGRjOGJmOS4uMWMyYTQwYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfQkEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X0JBLmgKQEAgLTEsMyArMSwyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIFJlYWx0ZWsgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0JBVFlQRV9IXwogI2RlZmluZSBfQkFUWVBFX0hfCiAKQEAgLTE4LDE0ICszNiw3IEBACiAjZGVmaW5lCURFTEJBX1JFQVNPTl9FTkRfQkEJCQkzNwogI2RlZmluZQlERUxCQV9SRUFTT05fVU5LTk9XTl9CQQkzOAogI2RlZmluZQlERUxCQV9SRUFTT05fVElNRU9VVAkJCTM5Ci0vKiAgd2hldGhlciBuZWVkIGRlZmluZSBCQSBBY3Rpb24gZnJhbWVzIGhlcmU/Ci1zdHJ1Y3QgaWVlZTgwMjExX0FEREJBX1JlcXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hlYWRlcl9kYXRhIGhlYWRlcjsKLQl1OAljYXRlZ29yeTsKLQl1OAotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0qLwotLy9JcyB0aGlzIG5lZWQ/SSBwdXQgaGVyZSBqdXN0IHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRlZmluZSBzdHJ1Y3R1cmUgQkFfUkVDT1JEIC8vV0IKKwogdHlwZWRlZiB1bmlvbiBfU0VRVUVOQ0VfQ09OVFJPTHsKIAl1MTYgU2hvcnREYXRhOwogCXN0cnVjdApAQCAtNjUsNSArNzYsNCBAQAogCVNFUVVFTkNFX0NPTlRST0wJQmFTdGFydFNlcUN0cmw7CiB9IEJBX1JFQ09SRCwgKlBCQV9SRUNPUkQ7CiAKLSNlbmRpZiAvL2VuZCBfQkFUWVBFX0hfCi0KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvcnRsODE5eF9CQVByb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfQkFQcm9jLmMKaW5kZXggOGMzN2RkMS4uY2E2MTFmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvcnRsODE5eF9CQVByb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X0JBUHJvYy5jCkBAIC0xLDkgKzEsMjEgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogVGhpcyBmaWxlIGlzIGNyZWF0ZWQgdG8gcHJvY2VzcyBCQSBBY3Rpb24gRnJhbWUuIEFjY29yZGluZyB0byA4MDIuMTEgc3BlYywgdGhlcmUgYXJlIDMgQkEgYWN0aW9uIHR5cGVzIGF0IGFsbC4gQW5kIGFzIEJBIGlzCi0gKiByZWxhdGVkIHRvIFRTLCB0aGlzIHBhcnQgbmVlZCBzb21lIHN0cnV0dXJlIGRlZmluZWQgaW4gUU9TIHNpZGUgY29kZS4gQWxzbyBUWCBSWCBpcyBnb2luZyB0byBiZSByZXN0dXJjdHVyZWQsIHNvIGhvdyB0byBzZW5kCi0gKiBBRERCQVJFUSBBRERCQVJTUCBhbmQgREVMQkEgcGFja2V0IGlzIHN0aWxsIG9uIGNvbnNpZGVyYXRpb24uIFRlbXBvcmFyaWx5IHVzZSBNQU5BR0UgUVVFVUUgaW5zdGVhZCBvZiBOb3JtYWwgUXVldWUuCi0gKiBXQiAyMDA4LTA1LTI3Ci0gKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBSZWFsdGVrIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSAiaWVlZTgwMjExLmgiCiAjaW5jbHVkZSAicnRsODE5eF9CQS5oIgogCkBAIC0xMTIsNyArMTI0LDYgQEAKIAl1OCogdGFnID0gTlVMTDsKIAl1MTYgdG1wID0gMDsKIAl1MTYgbGVuID0gaWVlZS0+dHhfaGVhZHJvb20gKyA5OwotCS8vY2F0ZWdvcnkoMSkgKyBhY3Rpb24gZmllbGQoMSkgKyBEaWFsb2cgVG9rZW4oMSkgKyBCQSBQYXJhbWV0ZXIgU2V0KDIpICsgIEJBIFRpbWVvdXQgVmFsdWUoMikgKyAgQkEgU3RhcnQgU2VxQ3RybCgyKShvciBTdGF0dXNDb2RlKDIpKQogCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFJBQ0UgfCBJRUVFODAyMTFfRExfQkEsICI9PT09PT09PT4lcygpLCBmcmFtZSglZCkgc2VudGQgdG86JXBNLCBpZWVlLT5kZXY6JXBcbiIsIF9fRlVOQ1RJT05fXywgdHlwZSwgRHN0LCBpZWVlLT5kZXYpOwogCWlmIChwQkEgPT0gTlVMTHx8aWVlZSA9PSBOVUxMKQogCXsKQEAgLTEzOCw3ICsxNDksNiBAQAogCiAJQkFSZXEtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfTUFOQUdFX0FDVCk7IC8vYWN0aW9uIGZyYW1lCiAKLQkvL3RhZyArPSBzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKTsgLy9tb3ZlIHRvIGFjdGlvbiBmaWVsZAogCXRhZyA9ICh1OCopc2tiX3B1dChza2IsIDkpOwogCSp0YWcgKys9IEFDVF9DQVRfQkE7CiAJKnRhZyArKz0gdHlwZTsKQEAgLTE3MSw3ICsxODEsNiBAQAogCiAJSUVFRTgwMjExX0RFQlVHX0RBVEEoSUVFRTgwMjExX0RMX0RBVEF8SUVFRTgwMjExX0RMX0JBLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAlyZXR1cm4gc2tiOwotCS8vcmV0dXJuIE5VTEw7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTk2LDcgKzIwNSw2IEBACiAJIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKiBEZWxiYSA9IE5VTEw7CiAJdTgqIHRhZyA9IE5VTEw7CiAJdTE2IHRtcCA9IDA7Ci0JLy9sZW4gPSBoZWFkIGxlbiArIERFTEJBIFBhcmFtZXRlciBTZXQoMikgKyBSZWFzb24gQ29kZSgyKQogCXUxNiBsZW4gPSA2ICsgaWVlZS0+dHhfaGVhZHJvb207CiAKIAlpZiAobmV0X3JhdGVsaW1pdCgpKQpAQCAtMjEzLDcgKzIyMSw2IEBACiAJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLCAiY2FuJ3QgYWxsb2Mgc2tiIGZvciBBRERCQV9SRVFcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0vLwltZW1zZXQoc2tiLT5kYXRhLCAwLCBsZW4rc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikpOwogCXNrYl9yZXNlcnZlKHNrYiwgaWVlZS0+dHhfaGVhZHJvb20pOwogCiAJRGVsYmEgPSAoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICopIHNrYl9wdXQoc2tiLHNpemVvZiggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpKTsKQEAgLTI1OCw5ICsyNjUsNiBAQAogCWlmIChza2IpCiAJewogCQlzb2Z0bWFjX21nbXRfeG1pdChza2IsIGllZWUpOwotCQkvL2FkZCBzdGF0aXN0aWMgbmVlZGVkIGhlcmUuCi0JCS8vYW5kIHNrYiB3aWxsIGJlIGZyZWVkIGluIHNvZnRtYWNfbWdtdF94bWl0KCksIHNvIG9taXQgYWxsIGRldl9rZnJlZV9za2JfYW55KCkgb3V0c2lkZSBzb2Z0bWFjX21nbXRfeG1pdCgpCi0JCS8vV0IKIAl9CiAJZWxzZQogCXsKQEAgLTI4NCw3ICsyODgsNiBAQAogCWlmIChza2IpCiAJewogCQlzb2Z0bWFjX21nbXRfeG1pdChza2IsIGllZWUpOwotCQkvL3NhbWUgYWJvdmUKIAl9CiAJZWxzZQogCXsKQEAgLTMxMSw3ICszMTQsNiBAQAogCWlmIChza2IpCiAJewogCQlzb2Z0bWFjX21nbXRfeG1pdChza2IsIGllZWUpOwotCQkvL3NhbWUgYWJvdmUKIAl9CiAJZWxzZQogCXsKQEAgLTM2MSw4ICszNjMsNyBAQAogLy9zb21lIG90aGVyIGNhcGFiaWxpdHkgaXMgbm90IHJlYWR5IG5vdy4KIAlpZigJKGllZWUtPmN1cnJlbnRfbmV0d29yay5xb3NfZGF0YS5hY3RpdmUgPT0gMCkgfHwKIAkJKGllZWUtPnBIVEluZm8tPmJDdXJyZW50SFRTdXBwb3J0ID09IGZhbHNlKSB8fAotCQkoaWVlZS0+cEhUSW5mby0+SU9UQWN0aW9uICYgSFRfSU9UX0FDVF9SRUpFQ1RfQUREQkFfUkVRKSkgLy98fAotCS8vCShpZWVlLT5wU3RhUW9zLT5iRW5hYmxlUnhJbW1CQSA9PSBmYWxzZSkJKQorCQkoaWVlZS0+cEhUSW5mby0+SU9UQWN0aW9uICYgSFRfSU9UX0FDVF9SRUpFQ1RfQUREQkFfUkVRKSkKIAl7CiAJCXJjID0gQUREQkFfU1RBVFVTX1JFRlVTRUQ7CiAJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLCAiRmFpbGVkIHRvIHJlcGx5IG9uIEFEREJBX1JFUSBhcyBzb21lIGNhcGFiaWxpdHkgaXMgbm90IHJlYWR5KCVkLCAlZClcbiIsIGllZWUtPmN1cnJlbnRfbmV0d29yay5xb3NfZGF0YS5hY3RpdmUsIGllZWUtPnBIVEluZm8tPmJDdXJyZW50SFRTdXBwb3J0KTsKQEAgLTM5NCw3ICszOTUsNiBAQAogCQlnb3RvIE9uQUREQkFSZXFfRmFpbDsKIAl9CiAJCS8vIEFkbWl0IHRoZSBBRERCQSBSZXF1ZXN0Ci0JLy8KIAlEZUFjdGl2YXRlQkFFbnRyeShpZWVlLCBwQkEpOwogCXBCQS0+RGlhbG9nVG9rZW4gPSAqcERpYWxvZ1Rva2VuOwogCXBCQS0+QmFQYXJhbVNldCA9ICpwQmFQYXJhbVNldDsKQEAgLTQwNiwxMCArNDA2LDkgQEAKIAlwQkEtPkJhUGFyYW1TZXQuZmllbGQuQnVmZmVyU2l6ZSA9IDE7CiAJZWxzZQogCXBCQS0+QmFQYXJhbVNldC5maWVsZC5CdWZmZXJTaXplID0gMzI7Ci0JQWN0aXZhdGVCQUVudHJ5KGllZWUsIHBCQSwgMCk7Ly9wQkEtPkJhVGltZW91dFZhbHVlKTsKKwlBY3RpdmF0ZUJBRW50cnkoaWVlZSwgcEJBLCAwKTsKIAlpZWVlODAyMTFfc2VuZF9BRERCQVJzcChpZWVlLCBkc3QsIHBCQSwgQUREQkFfU1RBVFVTX1NVQ0NFU1MpOwogCi0JLy8gRW5kIG9mIHByb2NlZHVyZS4KIAlyZXR1cm4gMDsKIAogT25BRERCQVJlcV9GYWlsOgpAQCAtNTQxLDExICs1NDAsMTEgQEAKIAkJcEFkbWl0dGVkQkEtPkJhUGFyYW1TZXQgPSAqcEJhUGFyYW1TZXQ7CiAJCURlQWN0aXZhdGVCQUVudHJ5KGllZWUsIHBBZG1pdHRlZEJBKTsKIAkJQWN0aXZhdGVCQUVudHJ5KGllZWUsIHBBZG1pdHRlZEJBLCAqcEJhVGltZW91dFZhbCk7Ci0JfQotCWVsc2UKLQl7Ci0JCS8vIERlbGF5IG5leHQgQUREQkEgcHJvY2Vzcy4KKwl9IGVsc2UgewogCQlwVFMtPmJBZGRCYVJlcURlbGF5ZWQgPSB0cnVlOworCQlwVFMtPmJEaXNhYmxlX0FkZEJhID0gdHJ1ZTsKKwkJUmVhc29uQ29kZSA9IERFTEJBX1JFQVNPTl9FTkRfQkE7CisJCWdvdG8gT25BRERCQVJzcF9SZWplY3Q7CiAJfQogCiAJLy8gRW5kIG9mIHByb2NlZHVyZQpAQCAtNjM1LDcgKzYzNCw2IEBACiAJCXBUeFRzLT5iQWRkQmFSZXFJblByb2dyZXNzID0gZmFsc2U7CiAJCXBUeFRzLT5iQWRkQmFSZXFEZWxheWVkID0gZmFsc2U7CiAJCWRlbF90aW1lcl9zeW5jKCZwVHhUcy0+VHNBZGRCYVRpbWVyKTsKLQkJLy9QbGF0Zm9ybUNhbmNlbFRpbWVyKEFkYXB0ZXIsICZwVHhUcy0+VHNBZGRCYVRpbWVyKTsKIAkJVHhUc0RlbGV0ZUJBKGllZWUsIHBUeFRzKTsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X0hULmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X0hULmgKaW5kZXggYTk3YzkwMS4uMTcxMjE4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvcnRsODE5eF9IVC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfSFQuaApAQCAtMSwzICsxLDIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfUlRMODE5WFVfSFRUWVBFX0hfCiAjZGVmaW5lIF9SVEw4MTlYVV9IVFRZUEVfSF8KIApAQCAtMzgxLDggKzM5OSw3IEBACiAJdTE2CQkJCQliZEhUSW5mb0xlbjsKIAogCUhUX1NQRUNfVkVSCQkJCWJkSFRTcGVjVmVyOwotCS8vSFRfQ0FQQUJJTElUWV9FTEUJCQliZEhUQ2FwRWxlOwotCS8vSFRfSU5GT1JNQVRJT05fRUxFCQliZEhUSW5mb0VsZTsKKwlIVF9DSEFOTkVMX1dJRFRICQkJYmRCYW5kV2lkdGg7CiAKIAl1OAkJCQkJYmRSVDJSVEFnZ3JlZ2F0aW9uOwogCXU4CQkJCQliZFJUMlJUTG9uZ1Nsb3RUaW1lOwpAQCAtNDA2LDcgKzQyMyw3IEBACiAKIHR5cGVkZWYgc3RydWN0IF9GQUxTRV9BTEFSTV9TVEFUSVNUSUNTewogCXUzMglDbnRfUGFyaXR5X0ZhaWw7Ci0JdTMyICAgIENudF9SYXRlX0lsbGVnYWw7CisJdTMyCUNudF9SYXRlX0lsbGVnYWw7CiAJdTMyCUNudF9DcmM4X2ZhaWw7CiAJdTMyCUNudF9hbGw7CiB9RkFMU0VfQUxBUk1fU1RBVElTVElDUywgKlBGQUxTRV9BTEFSTV9TVEFUSVNUSUNTOwpAQCAtNDc2LDEwICs0OTMsOSBAQAogCUhUX0lPVF9BQ1RfRk9SQ0VEX0NUUzJTRUxGID0gMHgwMDAwMDIwMCwKIAlIVF9JT1RfQUNUX0ZPUkNFRF9SVFMgPSAweDAwMDAwNDAwLAogCUhUX0lPVF9BQ1RfQU1TRFVfRU5BQkxFID0gMHgwMDAwMDgwMCwKLQlIVF9JT1RfQUNUX01JRF9ISUdIUE9XRVIgPSAweDAwMDAxMDAwLAotCUhUX0lPVF9BQ1RfUkVKRUNUX0FEREJBX1JFUSA9IDB4MDAwMDIwMDAsCi0JSFRfSU9UX0FDVF9BTExPV19QRUVSX0FHR19PTkVfUEtUID0gMHgwMDAwNDAwMCwKLQlIVF9JT1RfQUNUX0VEQ0FfQklBU19PTl9SWCA9IDB4MDAwMDgwMDAsCisJSFRfSU9UX0FDVF9SRUpFQ1RfQUREQkFfUkVRID0gMHgwMDAwMTAwMCwKKwlIVF9JT1RfQUNUX0FMTE9XX1BFRVJfQUdHX09ORV9QS1QgPSAweDAwMDAyMDAwLAorCUhUX0lPVF9BQ1RfRURDQV9CSUFTX09OX1JYID0gMHgwMDAwNDAwMCwKIAogCUhUX0lPVF9BQ1RfSFlCUklEX0FHR1JFR0FUSU9OID0gMHgwMDAxMDAwMCwKIAlIVF9JT1RfQUNUX0RJU0FCTEVfU0hPUlRfR0kgPSAweDAwMDIwMDAwLApAQCAtNDg3LDEyICs1MDMsMTkgQEAKIAlIVF9JT1RfQUNUX0RJU0FCTEVfVFhfNDBfTUhaID0gMHgwMDA4MDAwMCwKIAlIVF9JT1RfQUNUX1RYX05PX0FHR1JFR0FUSU9OID0gMHgwMDEwMDAwMCwKIAlIVF9JT1RfQUNUX0RJU0FCTEVfVFhfMlNTID0gMHgwMDIwMDAwMCwKKwkKKyAgICAgICAgSFRfSU9UX0FDVF9NSURfSElHSFBPV0VSID0gMHgwMDQwMDAwMCwKKyAgICAgICAgSFRfSU9UX0FDVF9OVUxMX0RBVEFfUE9XRVJfU0FWSU5HID0gMHgwMDgwMDAwMCwKKyAgICAgICAgCisgICAgICAgIEhUX0lPVF9BQ1RfRElTQUJMRV9DQ0tfUkFURSA9IDB4MDEwMDAwMDAsCisJSFRfSU9UX0FDVF9GT1JDRURfRU5BQkxFX0JFX1RYT1AgPSAweDAyMDAwMDAwLAorCUhUX0lPVF9BQ1RfV0FfSU9UX0Jyb2FkY29tID0gMHgwNDAwMDAwMCwKIH1IVF9JT1RfQUNUSU9OX0UsICpQSFRfSU9UX0FDVElPTl9FOwogCiB0eXBlZGVmIGVudW0gX0hUX0lPVF9SQUZVTkN7CisJSFRfSU9UX1JBRlVOQ19ESVNBQkxFX0FMTCA9IDB4MDAsCiAJSFRfSU9UX1JBRlVOQ19QRUVSXzFSID0gMHgwMSwKIAlIVF9JT1RfUkFGVU5DX1RYX0FNU0RVID0gMHgwMiwKLQlIVF9JT1RfUkFGVU5DX0RJU0FCTEVfQUxMID0gMHg4MCwKIH1IVF9JT1RfUkFGVU5DLCAqUEhUX0lPVF9SQUZVTkM7CiAKIHR5cGVkZWYgZW51bSBfUlRfSFRfQ0FQewpAQCAtNTA0LDUgKzUyNyw0IEBACiAJUlRfSFRfQ0FQX1VTRV85MlNFID0gMHgyMCwKIH1SVF9IVF9DQVBCSUxJVFksICpQUlRfSFRfQ0FQQklMSVRZOwogCi0jZW5kaWYgLy9fUlRMODE5WFVfSFRUWVBFX0hfCi0KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvcnRsODE5eF9IVFByb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfSFRQcm9jLmMKaW5kZXggMDExMTRjNS4uY2ZkOWExYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvcnRsODE5eF9IVFByb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X0hUUHJvYy5jCkBAIC0xLDUgKzEsMjEgQEAKLQotLy9BcyB0aGlzIGZ1bmN0aW9uIGlzIG1haW5seSBwb3J0ZWQgZnJvbSBXaW5kb3dzIGRyaXZlciwgc28gbGVhdmUgdGhlIG5hbWUgbGl0dGxlIGNoYW5nZWQuIElmIGFueSBjb25mdXNpb24gY2F1c2VkLCB0ZWxsIG1lLiBDcmVhdGVkIGJ5IFdCLiAyMDA4LjA1LjA4CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgImllZWU4MDIxMS5oIgogI2luY2x1ZGUgInJ0bDgxOXhfSFQuaCIKIHU4IE1DU19GSUxURVJfQUxMWzE2XSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKQEAgLTgsMzIgKzI0LDMxIEBACiAKIHUxNiBNQ1NfREFUQV9SQVRFWzJdWzJdWzc3XSA9CiAJewl7CXsxMywgMjYsIDM5LCA1MiwgNzgsIDEwNCwgMTE3LCAxMzAsIDI2LCA1MiwgNzggLDEwNCwgMTU2LCAyMDgsIDIzNCwgMjYwLAotCQkJMzksIDc4LCAxMTcsIDIzNCwgMzEyLCAzNTEsIDM5MCwgNTIsIDEwNCwgMTU2LCAyMDgsIDMxMiwgNDE2LCA0NjgsIDUyMCwKKwkJCTM5LCA3OCwgMTE3LCAyMzQsIDMxMiwgMzUxLCAzOTAsIDUyLCAxMDQsIDE1NiwgMjA4LCAzMTIsIDQxNiwgNDY4LCA1MjAsIAogCQkJMCwgNzgsIDEwNCwgMTMwLCAxMTcsIDE1NiwgMTk1LCAxMDQsIDEzMCwgMTMwLCAxNTYsIDE4MiwgMTgyLCAyMDgsIDE1NiwgMTk1LAotCQkJMTk1LCAyMzQsIDI3MywgMjczLCAzMTIsIDEzMCwgMTU2LCAxODEsIDE1NiwgMTgxLCAyMDgsIDIzNCwgMjA4LCAyMzQsIDI2MCwgMjYwLAotCQkJMjg2LCAxOTUsIDIzNCwgMjczLCAyMzQsIDI3MywgMzEyLCAzNTEsIDMxMiwgMzUxLCAzOTAsIDM5MCwgNDI5fSwJCQkvLyBMb25nIEdJLCAyME1IegotCQkJezE0LCAyOSwgNDMsIDU4LCA4NywgMTE2LCAxMzAsIDE0NCwgMjksIDU4LCA4NywgMTE2LCAxNzMsIDIzMSwgMjYwLCAyODksCi0JCQk0MywgODcsIDEzMCwgMTczLCAyNjAsIDM0NywgMzkwLCA0MzMsIDU4LCAxMTYsIDE3MywgMjMxLCAzNDcsIDQ2MiwgNTIwLCA1NzgsCi0JCQkwLCA4NywgMTE2LCAxNDQsIDEzMCwgMTczLCAyMTcsIDExNiwgMTQ0LCAxNDQsIDE3MywgMjAyLCAyMDIsIDIzMSwgMTczLCAyMTcsCi0JCQkyMTcsIDI2MCwgMzAzLCAzMDMsIDM0NywgMTQ0LCAxNzMsIDIwMiwgMTczLCAyMDIsIDIzMSwgMjYwLCAyMzEsIDI2MCwgMjg5LCAyODksCi0JCQkzMTgsIDIxNywgMjYwLCAzMDMsIDI2MCwgMzAzLCAzNDcsIDM5MCwgMzQ3LCAzOTAsIDQzMywgNDMzLCA0Nzd9CX0sCQkvLyBTaG9ydCBHSSwgMjBNSHoKLQkJewl7MjcsIDU0LCA4MSwgMTA4LCAxNjIsIDIxNiwgMjQzLCAyNzAsIDU0LCAxMDgsIDE2MiwgMjE2LCAzMjQsIDQzMiwgNDg2LCA1NDAsCi0JCQk4MSwgMTYyLCAyNDMsIDMyNCwgNDg2LCA2NDgsIDcyOSwgODEwLCAxMDgsIDIxNiwgMzI0LCA0MzIsIDY0OCwgODY0LCA5NzIsIDEwODAsCi0JCQkxMiwgMTYyLCAyMTYsIDI3MCwgMjQzLCAzMjQsIDQwNSwgMjE2LCAyNzAsIDI3MCwgMzI0LCAzNzgsIDM3OCwgNDMyLCAzMjQsIDQwNSwKLQkJCTQwNSwgNDg2LCA1NjcsIDU2NywgNjQ4LCAyNzAsIDMyNCwgMzc4LCAzMjQsIDM3OCwgNDMyLCA0ODYsIDQzMiwgNDg2LCA1NDAsIDU0MCwKLQkJCTU5NCwgNDA1LCA0ODYsIDU2NywgNDg2LCA1NjcsIDY0OCwgNzI5LCA2NDgsIDcyOSwgODEwLCA4MTAsIDg5MX0sIAkvLyBMb25nIEdJLCA0ME1IegotCQkJezMwLCA2MCwgOTAsIDEyMCwgMTgwLCAyNDAsIDI3MCwgMzAwLCA2MCwgMTIwLCAxODAsIDI0MCwgMzYwLCA0ODAsIDU0MCwgNjAwLAotCQkJOTAsIDE4MCwgMjcwLCAzNjAsIDU0MCwgNzIwLCA4MTAsIDkwMCwgMTIwLCAyNDAsIDM2MCwgNDgwLCA3MjAsIDk2MCwgMTA4MCwgMTIwMCwKLQkJCTEzLCAxODAsIDI0MCwgMzAwLCAyNzAsIDM2MCwgNDUwLCAyNDAsIDMwMCwgMzAwLCAzNjAsIDQyMCwgNDIwLCA0ODAsIDM2MCwgNDUwLAotCQkJNDUwLCA1NDAsIDYzMCwgNjMwLCA3MjAsIDMwMCwgMzYwLCA0MjAsIDM2MCwgNDIwLCA0ODAsIDU0MCwgNDgwLCA1NDAsIDYwMCwgNjAwLAotCQkJNjYwLCA0NTAsIDU0MCwgNjMwLCA1NDAsIDYzMCwgNzIwLCA4MTAsIDcyMCwgODEwLCA5MDAsIDkwMCwgOTkwfQl9CS8vIFNob3J0IEdJLCA0ME1IegorCQkJMTk1LCAyMzQsIDI3MywgMjczLCAzMTIsIDEzMCwgMTU2LCAxODEsIDE1NiwgMTgxLCAyMDgsIDIzNCwgMjA4LCAyMzQsIDI2MCwgMjYwLCAKKwkJCTI4NiwgMTk1LCAyMzQsIDI3MywgMjM0LCAyNzMsIDMxMiwgMzUxLCAzMTIsIDM1MSwgMzkwLCAzOTAsIDQyOX0sCQkJCisJCQl7MTQsIDI5LCA0MywgNTgsIDg3LCAxMTYsIDEzMCwgMTQ0LCAyOSwgNTgsIDg3LCAxMTYsIDE3MywgMjMxLCAyNjAsIDI4OSwgCisJCQk0MywgODcsIDEzMCwgMTczLCAyNjAsIDM0NywgMzkwLCA0MzMsIDU4LCAxMTYsIDE3MywgMjMxLCAzNDcsIDQ2MiwgNTIwLCA1NzgsIAorCQkJMCwgODcsIDExNiwgMTQ0LCAxMzAsIDE3MywgMjE3LCAxMTYsIDE0NCwgMTQ0LCAxNzMsIDIwMiwgMjAyLCAyMzEsIDE3MywgMjE3LCAKKwkJCTIxNywgMjYwLCAzMDMsIDMwMywgMzQ3LCAxNDQsIDE3MywgMjAyLCAxNzMsIDIwMiwgMjMxLCAyNjAsIDIzMSwgMjYwLCAyODksIDI4OSwgCisJCQkzMTgsIDIxNywgMjYwLCAzMDMsIDI2MCwgMzAzLCAzNDcsIDM5MCwgMzQ3LCAzOTAsIDQzMywgNDMzLCA0Nzd9CX0sCQkKKwkJewl7MjcsIDU0LCA4MSwgMTA4LCAxNjIsIDIxNiwgMjQzLCAyNzAsIDU0LCAxMDgsIDE2MiwgMjE2LCAzMjQsIDQzMiwgNDg2LCA1NDAsIAorCQkJODEsIDE2MiwgMjQzLCAzMjQsIDQ4NiwgNjQ4LCA3MjksIDgxMCwgMTA4LCAyMTYsIDMyNCwgNDMyLCA2NDgsIDg2NCwgOTcyLCAxMDgwLCAKKwkJCTEyLCAxNjIsIDIxNiwgMjcwLCAyNDMsIDMyNCwgNDA1LCAyMTYsIDI3MCwgMjcwLCAzMjQsIDM3OCwgMzc4LCA0MzIsIDMyNCwgNDA1LCAKKwkJCTQwNSwgNDg2LCA1NjcsIDU2NywgNjQ4LCAyNzAsIDMyNCwgMzc4LCAzMjQsIDM3OCwgNDMyLCA0ODYsIDQzMiwgNDg2LCA1NDAsIDU0MCwgCisJCQk1OTQsIDQwNSwgNDg2LCA1NjcsIDQ4NiwgNTY3LCA2NDgsIDcyOSwgNjQ4LCA3MjksIDgxMCwgODEwLCA4OTF9LCAJCisJCQl7MzAsIDYwLCA5MCwgMTIwLCAxODAsIDI0MCwgMjcwLCAzMDAsIDYwLCAxMjAsIDE4MCwgMjQwLCAzNjAsIDQ4MCwgNTQwLCA2MDAsIAorCQkJOTAsIDE4MCwgMjcwLCAzNjAsIDU0MCwgNzIwLCA4MTAsIDkwMCwgMTIwLCAyNDAsIDM2MCwgNDgwLCA3MjAsIDk2MCwgMTA4MCwgMTIwMCwgCisJCQkxMywgMTgwLCAyNDAsIDMwMCwgMjcwLCAzNjAsIDQ1MCwgMjQwLCAzMDAsIDMwMCwgMzYwLCA0MjAsIDQyMCwgNDgwLCAzNjAsIDQ1MCwgCisJCQk0NTAsIDU0MCwgNjMwLCA2MzAsIDcyMCwgMzAwLCAzNjAsIDQyMCwgMzYwLCA0MjAsIDQ4MCwgNTQwLCA0ODAsIDU0MCwgNjAwLCA2MDAsIAorCQkJNjYwLCA0NTAsIDU0MCwgNjMwLCA1NDAsIDYzMCwgNzIwLCA4MTAsIDcyMCwgODEwLCA5MDAsIDkwMCwgOTkwfQl9CQogCX07CiAKIHN0YXRpYyB1OCBVTktOT1dOX0JPUkFEQ09NWzNdID0gezB4MDAsIDB4MTQsIDB4YmZ9Owogc3RhdGljIHU4IExJTktTWVNXUlQzMzBfTElOS1NZU1dSVDMwMF9CUk9BRENPTVszXSA9IHsweDAwLCAweDFhLCAweDcwfTsKIHN0YXRpYyB1OCBMSU5LU1lTV1JUMzUwX0xJTktTWVNXUlQxNTBfQlJPQURDT01bM10gPSB7MHgwMCwgMHgxZCwgMHg3ZX07Ci1zdGF0aWMgdTggTkVUR0VBUjgzNEJ2Ml9CUk9BRENPTVszXSA9IHsweDAwLCAweDFiLCAweDJmfTsKLXN0YXRpYyB1OCBCRUxLSU5GNUQ4MjMzVjFfUkFMSU5LWzNdID0gezB4MDAsIDB4MTcsIDB4M2Z9OwkvL2Nvc2EgMDMyMDIwMDgKK3N0YXRpYyB1OCBCRUxLSU5GNUQ4MjMzVjFfUkFMSU5LWzNdID0gezB4MDAsIDB4MTcsIDB4M2Z9OwkKIHN0YXRpYyB1OCBCRUxLSU5GNUQ4MjMzNFYzX1JBTElOS1szXSA9IHsweDAwLCAweDFjLCAweGRmfTsKIHN0YXRpYyB1OCBQQ0lfUkFMSU5LWzNdID0gezB4MDAsIDB4OTAsIDB4Y2N9Owogc3RhdGljIHU4IEVESU1BWF9SQUxJTktbM10gPSB7MHgwMCwgMHgwZSwgMHgyZX07CkBAIC00MSwxMCArNTYsOSBAQAogc3RhdGljIHU4IERMSU5LX0FUSEVST1NfMVszXSA9IHsweDAwLCAweDFjLCAweGYwfTsKIHN0YXRpYyB1OCBETElOS19BVEhFUk9TXzJbM10gPSB7MHgwMCwgMHgyMSwgMHg5MX07CiBzdGF0aWMgdTggQ0lTQ09fQlJPQURDT01bM10gPSB7MHgwMCwgMHgxNywgMHg5NH07CitzdGF0aWMgdTggTkVUR0VBUl9CUk9BRENPTVszXSA9IHsweDAwLCAweDFmLCAweDMzfTsKIHN0YXRpYyB1OCBMSU5LU1lTX01BUlZFTExfNDQwME5bM10gPSB7MHgwMCwgMHgxNCwgMHhhNH07Ci0vLyAyMDA4LzA0LzAxIE1IIEZvciBDaXNjbyBHIG1vZGUgUlggVFAgV2UgbmVlZCB0byBjaGFuZ2UgRlcgZHVyYXRpb24uIFNob3VsZCB3ZSBwdXQgdGhlCi0vLyBjb2RlIGluIG90aGVyIHBsYWNlPz8KLS8vc3RhdGljIHU4IFdJRklfQ0lTQ09fR19BUFszXSA9IHsweDAwLCAweDQwLCAweDk2fTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKmZ1bmN0aW9uOiAgVGhpcyBmdW5jdGlvbiB1cGRhdGUgZGVmYXVsdCBzZXR0aW5ncyBpbiBwSFRJbmZvIHN0cnVjdHVyZQogICogICBpbnB1dDogIFBSVF9ISUdIX1RIUk9VR0hQVVQJcEhUSW5mbwpAQCAtNTUsMTAgKzY5LDcgQEAKIHZvaWQgSFRVcGRhdGVEZWZhdWx0U2V0dGluZyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSogaWVlZSkKIHsKIAlQUlRfSElHSF9USFJPVUdIUFVUCXBIVEluZm8gPSBpZWVlLT5wSFRJbmZvOwotCS8vY29uc3QgdHlwZW9mKCAoKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICopMCktPnBIVEluZm8gKSAqX19tcHRyID0gJnBIVEluZm87CiAKLQkvL3ByaW50aygicEhUaW5mbzolcCwgJnBIVGluZm86JXAsIG1wdHI6JXAsICBvZmZzZXRvZjoleFxuIiwgcEhUSW5mbywgJnBIVEluZm8sIF9fbXB0ciwgb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UsIHBIVEluZm8pKTsKLQkvL3ByaW50aygiPT09PmllZWU6JXAsXG4iLCBpZWVlKTsKIAkvLyBTaG9ydEdJIHN1cHBvcnQKIAlwSFRJbmZvLT5iUmVnU2hvcnRHSTIwTUh6PSAxOwogCXBIVEluZm8tPmJSZWdTaG9ydEdJNDBNSHo9IDE7CkBAIC0yOTEsNyArMzAyLDYgQEAKICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdTE2ICBUeENvdW50VG9EYXRhUmF0ZSggc3RydWN0IGllZWU4MDIxMV9kZXZpY2UqIGllZWUsIHU4IG5EYXRhUmF0ZSkKIHsKLQkvL1BSVF9ISUdIX1RIUk9VR0hQVVQJcEhUSW5mbyA9IGllZWUtPnBIVEluZm87CiAJdTE2CQlDQ0tPRkRNUmF0ZVsxMl0gPSB7MHgwMiAsIDB4MDQgLCAweDBiICwgMHgxNiAsIDB4MGMgLCAweDEyICwgMHgxOCAsIDB4MjQgLCAweDMwICwgMHg0OCAsIDB4NjAgLCAweDZjfTsKIAl1OAlpczQwTUh6ID0gMDsKIAl1OAlpc1Nob3J0R0kgPSAwOwpAQCAtMzA3LDI4ICszMTcsMjQgQEAKIAkJCWlzNDBNSHogPSAwOwogCQkJaXNTaG9ydEdJID0gMDsKIAotCQkgICAgICAvLyBuRGF0YVJhdGUgPSBuRGF0YVJhdGUgLSAxMjsKIAkJfQogCQllbHNlIGlmKG5EYXRhUmF0ZSA+PTB4MjAgICYmIG5EYXRhUmF0ZSA8PSAweDJmICkgLy8oMjcsIDQ0KQogCQl7CiAJCQlpczQwTUh6ID0gMTsKIAkJCWlzU2hvcnRHSSA9IDA7CiAKLQkJCS8vbkRhdGFSYXRlID0gbkRhdGFSYXRlIC0gMjg7CiAJCX0KIAkJZWxzZSBpZihuRGF0YVJhdGUgPj0gMHgzMCAgJiYgbkRhdGFSYXRlIDw9IDB4M2YgKSAgLy8oNDMsIDYwKQogCQl7CiAJCQlpczQwTUh6ID0gMDsKIAkJCWlzU2hvcnRHSSA9IDE7CiAKLQkJCS8vbkRhdGFSYXRlID0gbkRhdGFSYXRlIC0gNDQ7CiAJCX0KIAkJZWxzZSBpZihuRGF0YVJhdGUgPj0gMHg0MCAgJiYgbkRhdGFSYXRlIDw9IDB4NGYgKSAvLyg1OSwgNzYpCiAJCXsKIAkJCWlzNDBNSHogPSAxOwogCQkJaXNTaG9ydEdJID0gMTsKIAotCQkJLy9uRGF0YVJhdGUgPSBuRGF0YVJhdGUgLSA2MDsKIAkJfQogCQlyZXR1cm4gTUNTX0RBVEFfUkFURVtpczQwTUh6XVtpc1Nob3J0R0ldW25EYXRhUmF0ZSYweGZdOwogCX0KQEAgLTM1MSw3ICszNTcsNiBAQAogCWVsc2UgaWYoKG1lbWNtcChuZXQtPmJzc2lkLCBVTktOT1dOX0JPUkFEQ09NLCAzKT09MCkgfHwKICAgICAJCSAgICAobWVtY21wKG5ldC0+YnNzaWQsIExJTktTWVNXUlQzMzBfTElOS1NZU1dSVDMwMF9CUk9BRENPTSwgMyk9PTApfHwKICAgICAJCSAgICAobWVtY21wKG5ldC0+YnNzaWQsIExJTktTWVNXUlQzNTBfTElOS1NZU1dSVDE1MF9CUk9BRENPTSwgMyk9PTApfHwKLSAgICAJCSAgICAobWVtY21wKG5ldC0+YnNzaWQsIE5FVEdFQVI4MzRCdjJfQlJPQURDT00sIDMpPT0wKSB8fAogICAgIAkJICAgIChuZXQtPmJyb2FkY29tX2NhcF9leGlzdCkpCiAgICAgCQkgIHJldFZhbHVlID0gdHJ1ZTsKIAllbHNlIGlmKG5ldC0+YnNzaHQuYmRSVDJSVEFnZ3JlZ2F0aW9uKQpAQCAtMzc5LDEzICszODQsMTUgQEAKIAkJaWYobmV0LT5ic3NodC5SVDJSVF9IVF9Nb2RlICYgUlRfSFRfQ0FQX1VTRV85MlNFKXsKIAkJCXBIVEluZm8tPklPVFBlZXIgPSBIVF9JT1RfUEVFUl9SRUFMVEVLXzkyU0U7CiAJCX0KKwkJaWYobmV0LT5ic3NodC5SVDJSVF9IVF9Nb2RlICYgUlRfSFRfQ0FQX1VTRV9TT0ZUQVApeworCQkJcEhUSW5mby0+SU9UUGVlciA9IEhUX0lPVF9QRUVSXzkyVV9TT0ZUQVA7CisJCX0KIAl9CiAJZWxzZSBpZihuZXQtPmJyb2FkY29tX2NhcF9leGlzdCkKIAkJcEhUSW5mby0+SU9UUGVlciA9IEhUX0lPVF9QRUVSX0JST0FEQ09NOwogCWVsc2UgaWYoKG1lbWNtcChuZXQtPmJzc2lkLCBVTktOT1dOX0JPUkFEQ09NLCAzKT09MCkgfHwKIAkJCShtZW1jbXAobmV0LT5ic3NpZCwgTElOS1NZU1dSVDMzMF9MSU5LU1lTV1JUMzAwX0JST0FEQ09NLCAzKT09MCl8fAotCQkJKG1lbWNtcChuZXQtPmJzc2lkLCBMSU5LU1lTV1JUMzUwX0xJTktTWVNXUlQxNTBfQlJPQURDT00sIDMpPT0wKXx8Ci0JCQkobWVtY21wKG5ldC0+YnNzaWQsIE5FVEdFQVI4MzRCdjJfQlJPQURDT00sIDMpPT0wKSApCisJCQkobWVtY21wKG5ldC0+YnNzaWQsIExJTktTWVNXUlQzNTBfTElOS1NZU1dSVDE1MF9CUk9BRENPTSwgMyk9PTApKQogCQlwSFRJbmZvLT5JT1RQZWVyID0gSFRfSU9UX1BFRVJfQlJPQURDT007CiAJZWxzZSBpZigobWVtY21wKG5ldC0+YnNzaWQsIEJFTEtJTkY1RDgyMzNWMV9SQUxJTkssIDMpPT0wKSB8fAogCQkJKG1lbWNtcChuZXQtPmJzc2lkLCBCRUxLSU5GNUQ4MjMzNFYzX1JBTElOSywgMyk9PTApIHx8CkBAIC0zOTgsNyArNDA1LDcgQEAKIAkJKG1lbWNtcChuZXQtPmJzc2lkLCBETElOS19BVEhFUk9TXzEsIDMpID09IDApfHwKIAkJKG1lbWNtcChuZXQtPmJzc2lkLCBETElOS19BVEhFUk9TXzIsIDMpID09IDApKQogCQlwSFRJbmZvLT5JT1RQZWVyID0gSFRfSU9UX1BFRVJfQVRIRVJPUzsKLQllbHNlIGlmKG1lbWNtcChuZXQtPmJzc2lkLCBDSVNDT19CUk9BRENPTSwgMyk9PTApCisJZWxzZSBpZiAoKG1lbWNtcChuZXQtPmJzc2lkLCBDSVNDT19CUk9BRENPTSwgMyk9PTApfHxuZXQtPmNpc2NvX2NhcF9leGlzdCkKIAkJcEhUSW5mby0+SU9UUGVlciA9IEhUX0lPVF9QRUVSX0NJU0NPOwogCWVsc2UgaWYgKChtZW1jbXAobmV0LT5ic3NpZCwgTElOS1NZU19NQVJWRUxMXzQ0MDBOLCAzKSA9PSAwKSB8fAogCQkgIG5ldC0+bWFydmVsbF9jYXBfZXhpc3QpCkBAIC00MzksMjUgKzQ0Niw2IEBACiBib29sIEhUSU9UQWN0SXNEaXNhYmxlTUNTMTUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UqIGllZWUpCiB7CiAJYm9vbCByZXRWYWx1ZSA9IGZhbHNlOwotCi0jaWZkZWYgVE9ETwotCS8vIEFwcGx5IGZvciA4MTl1IG9ubHkKLSNpZiAoSEFMX0NPREVfQkFTRT09UlRMODE5MikKLQotI2lmIChERVZfQlVTX1RZUEUgPT0gVVNCX0lOVEVSRkFDRSkKLQkvLyBBbHdheSBkaXNhYmxlIE1DUzE1IGJ5IEplcnJ5IENoYW5nJ3MgcmVxdWVzdC5ieSBFbWlseSwgMjAwOC4wNC4xNQotCXJldFZhbHVlID0gdHJ1ZTsKLSNlbGlmIChERVZfQlVTX1RZUEUgPT0gUENJX0lOVEVSRkFDRSkKLQkvLyBFbmFibGUgTUNTMTUgaWYgdGhlIHBlZXIgaXMgQ2lzY28gQVAuIGJ5IEVtaWx5LCAyMDA4LjA1LjEyCi0vLwlpZihwQnNzRGVzYy0+YkNpc2NvQ2FwRXhpc3QpCi0vLwkJcmV0VmFsdWUgPSBmYWxzZTsKLS8vCWVsc2UKLQkJcmV0VmFsdWUgPSBmYWxzZTsKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLQkvLyBKZXJyeSBDaGFuZyBzdWdnZXN0IHRoYXQgODE5MCAxeDIgZG9lcyBub3QgbmVlZCB0byBkaXNhYmxlIE1DUzE1Ci0KIAlyZXR1cm4gcmV0VmFsdWU7CiB9CiAKQEAgLTYyNCwxNyArNjEyLDExIEBACiAgIEhUSU9UQWN0SXNFRENBQmlhc1J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlKiBpZWVlLHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29yaykKIHsKIAl1OAlyZXRWYWx1ZSA9IDA7Ci0JLy9pZihJU19IQVJEV0FSRV9UWVBFXzgxOTJTVShBZGFwdGVyKSkKIAlQUlRfSElHSF9USFJPVUdIUFVUCXBIVEluZm8gPSBpZWVlLT5wSFRJbmZvOwogCXsKLS8vI2lmIFVOREVSX1ZJU1RBCi0vLwkJaWYocEJzc0Rlc2MtPlZlbmRlcj09SFRfSU9UX1BFRVJfQVRIRVJPUyB8fAotLy8JCQlwQnNzRGVzYy0+VmVuZGVyPT1IVF9JT1RfUEVFUl9SQUxJTkspCi0vLyNlbHNlCiAJCWlmKHBIVEluZm8tPklPVFBlZXI9PUhUX0lPVF9QRUVSX0FUSEVST1MgfHwKIAkJICAgcEhUSW5mby0+SU9UUGVlcj09SFRfSU9UX1BFRVJfQlJPQURDT00gfHwKIAkJICAgcEhUSW5mby0+SU9UUGVlcj09SFRfSU9UX1BFRVJfUkFMSU5LKQotLy8jZW5kaWYKIAkJCXJldHVybiAxOwogCiAJfQpAQCAtNjQ5LDcgKzYzMSw2IEBACiAKIAlpZihwSFRJbmZvLT5JT1RQZWVyPT1IVF9JT1RfUEVFUl9SQUxJTkspCiAJewotCQlpZihuZXR3b3JrLT5ic3NodC5iZEhUMVIpCiAJCQlyZXRWYWx1ZSA9IDE7CiAJfQogCkBAIC02NjIsOSArNjQzLDEwIEBACiAJdTgJcmV0VmFsdWUgPSAwOwogCVBSVF9ISUdIX1RIUk9VR0hQVVQJcEhUSW5mbyA9IGllZWUtPnBIVEluZm87CiAKLQlpZihwSFRJbmZvLT5JT1RQZWVyPT1IVF9JT1RfUEVFUl9SQUxJTkspCisJaWYocEhUSW5mby0+SU9UUGVlcj09SFRfSU9UX1BFRVJfUkFMSU5LIHx8CisJCXBIVEluZm8tPklPVFBlZXI9PUhUX0lPVF9QRUVSX1JFQUxURUsgfHwKKwkJcEhUSW5mby0+SU9UUGVlcj09SFRfSU9UX1BFRVJfUkVBTFRFS185MlNFKQogCXsKLQkJaWYobmV0d29yay0+YnNzaHQuYmRIVDFSKQogCQkJcmV0VmFsdWUgPSAxOwogCX0KIApAQCAtNzE4LDggKzcwMCw3IEBACiAJCShLRVlfVFlQRV9XRVA0MCA9PSBpZWVlLT5ncm91cF9rZXlfdHlwZSkgfHwKIAkJKEtFWV9UWVBFX1RLSVAgPT0gaWVlZS0+cGFpcndpc2Vfa2V5X3R5cGUpICkKIAl7Ci0JCWlmKHBIVEluZm8tPklPVFBlZXI9PUhUX0lPVF9QRUVSX1JFQUxURUsgfHwKLQkJICAgIHBIVEluZm8tPklPVFBlZXI9PUhUX0lPVF9QRUVSX1VOS05PV04pCisJCWlmKHBIVEluZm8tPklPVFBlZXI9PUhUX0lPVF9QRUVSX1JFQUxURUspCiAJCQlyZXRWYWx1ZSA9IDE7CiAJfQogCkBAIC03NTEsMTAgKzczMiwxMSBAQAogewogCWJvb2wgCXJldFZhbHVlID0gZmFsc2U7CiAJUFJUX0hJR0hfVEhST1VHSFBVVAlwSFRJbmZvID0gaWVlZS0+cEhUSW5mbzsKKwlpZihwSFRJbmZvLT5JT1RQZWVyID09IEhUX0lPVF9QRUVSX0JST0FEQ09NKQogCXsKLQkJaWYocEhUSW5mby0+SU9UUGVlciA9PSBIVF9JT1RfUEVFUl9NQVJWRUxMKQorCQlpZigobWVtY21wKG5ldHdvcmstPmJzc2lkLCBORVRHRUFSX0JST0FEQ09NLCAzKT09MCkKKwkJCSYmIChuZXR3b3JrLT5ic3NodC5iZEJhbmRXaWR0aCA9PSBIVF9DSEFOTkVMX1dJRFRIXzIwXzQwKSkKIAkJCXJldHVybiB0cnVlOwotCiAJfQogCXJldHVybiByZXRWYWx1ZTsKIH0KQEAgLTc4Myw3ICs3NjUsNiBAQAogewogCVBSVF9ISUdIX1RIUk9VR0hQVVQJcEhUID0gaWVlZS0+cEhUSW5mbzsKIAlQSFRfQ0FQQUJJTElUWV9FTEUgCXBDYXBFTEUgPSBOVUxMOwotCS8vdTggYklzRGVjbGFyZU1DUzEzOwogCiAJaWYgKChwb3NIVENhcCA9PSBOVUxMKSB8fCAocEhUID09IE5VTEwpKQogCXsKQEAgLTgxMywxMyArNzk0LDExIEBACiAJCXBDYXBFTEUtPkNobFdpZHRoID0gKHBIVC0+YlJlZ0JXNDBNSHo/MTowKTsKIAl9CiAKLS8vCXBDYXBFTEUtPkNobFdpZHRoIAkJPSAocEhULT5iUmVnQlc0ME1Iej8xOjApOwogCXBDYXBFTEUtPk1pbW9Qd3JTYXZlIAkJPSBwSFQtPlNlbGZNaW1vUHM7CiAJcENhcEVMRS0+R3JlZW5GaWVsZAkJPSAwOyAvLyBUaGlzIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCBub3chIQogCXBDYXBFTEUtPlNob3J0R0kyME1oegkJPSAxOyAvLyBXZSBjYW4gcmVjZWl2ZSBTaG9ydCBHSSEhCiAJcENhcEVMRS0+U2hvcnRHSTQwTWh6CQk9IDE7IC8vIFdlIGNhbiByZWNlaXZlIFNob3J0IEdJISEKLQkvL0RiZ1ByaW50KCJUWCBIVCBjYXAvaW5mbyBlbGUgQlc9JWQgU0cyMD0lZCBTRzQwPSVkXG5cciIsCi0JCS8vcENhcEVMRS0+Q2hsV2lkdGgsIHBDYXBFTEUtPlNob3J0R0kyME1oeiwgcENhcEVMRS0+U2hvcnRHSTQwTWh6KTsKKwogCXBDYXBFTEUtPlR4U1RCQyAJCT0gMTsKIAlwQ2FwRUxFLT5SeFNUQkMgCQk9IDA7CiAJcENhcEVMRS0+RGVsYXlCQQkJPSAwOwkvLyBEbyBub3Qgc3VwcG9ydCBub3chIQpAQCAtODc5LDEyICs4NTgsNiBAQAogCWVsc2UKIAkJKmxlbiA9IDI2ICsgMjsKIAotCi0KLS8vCUlFRUU4MDIxMV9ERUJVR19EQVRBKElFRUU4MDIxMV9ETF9EQVRBIHwgSUVFRTgwMjExX0RMX0hULCBwb3NIVENhcCwgKmxlbiAtMik7Ci0KLQkvL1ByaW50IGVhY2ggZmllbGQgaW4gZGV0YWlsLiBEcml2ZXIgc2hvdWxkIG5vdCBwcmludCBvdXQgdGhpcyBtZXNzYWdlIGJ5IGRlZmF1bHQKLS8vCUhURGVidWdIVENhcGFiaWxpdHkocG9zSFRDYXAsICh1OCopIkhUQ29uc3RydWN0Q2FwYWJpbGl0eSgpIik7CiAJcmV0dXJuOwogCiB9CkBAIC05MzgsOCArOTExLDYgQEAKIAkJLy9TVEEgc2hvdWxkIG5vdCBnZW5lcmF0ZSBIaWdoIFRocm91Z2hwdXQgSW5mb3JtYXRpb24gRWxlbWVudAogCQkqbGVuID0gMDsKIAl9Ci0JLy9JRUVFODAyMTFfREVCVUdfREFUQShJRUVFODAyMTFfRExfREFUQSB8IElFRUU4MDIxMV9ETF9IVCwgcG9zSFRJbmZvLCAqbGVuIC0gMik7Ci0JLy9IVERlYnVnSFRJbmZvKHBvc0hUSW5mbywgIkhUQ29uc3RydWN0SW5mb3JFbGVtZW50Iik7CiAJcmV0dXJuOwogfQogCkBAIC0xMDA1LDcgKzk3Niw2IEBACiAJKi8KIAogI2Vsc2UKLQkvLyBEbyBOb3RoaW5nCiAjZW5kaWYKIAogCXBvc1JUMlJUQWdnLT5MZW5ndGggPSA2OwpAQCAtMTE4OCwxMiArMTE1OCw3IEBACiAJCXJldHVybjsKIAl9CiAJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9IVCwgIj09PT4gSFRPbkFzc29jUnNwX3dxKCk6IEhUX0VOQUJMRVxuIik7Ci0vLwlJRUVFODAyMTFfREVCVUdfREFUQShJRUVFODAyMTFfRExfREFUQSwgcEhUSW5mby0+UGVlckhUQ2FwQnVmLCBzaXplb2YoSFRfQ0FQQUJJTElUWV9FTEUpKTsKLS8vCUlFRUU4MDIxMV9ERUJVR19EQVRBKElFRUU4MDIxMV9ETF9EQVRBLCBwSFRJbmZvLT5QZWVySFRJbmZvQnVmLCBzaXplb2YoSFRfSU5GT1JNQVRJT05fRUxFKSk7CiAKLS8vCUhURGVidWdIVENhcGFiaWxpdHkocEhUSW5mby0+UGVlckhUQ2FwQnVmLCJIVE9uQXNzb2NSc3Bfd3EiKTsKLS8vCUhURGVidWdIVEluZm8ocEhUSW5mby0+UGVlckhUSW5mb0J1ZiwiSFRPbkFzc29jUnNwX3dxIik7Ci0JLy8KIAlpZighbWVtY21wKHBIVEluZm8tPlBlZXJIVENhcEJ1ZixFV0MxMU5IVENhcCwgc2l6ZW9mKEVXQzExTkhUQ2FwKSkpCiAJCXBQZWVySFRDYXAgPSAoUEhUX0NBUEFCSUxJVFlfRUxFKSgmcEhUSW5mby0+UGVlckhUQ2FwQnVmWzRdKTsKIAllbHNlCkBAIC0xMjA5LDEyICsxMTc0LDEwIEBACiAJLy8gQ29uZmlndXJhdGlvbnM6CiAJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAlJRUVFODAyMTFfREVCVUdfREFUQShJRUVFODAyMTFfRExfREFUQXxJRUVFODAyMTFfRExfSFQsIHBQZWVySFRDYXAsIHNpemVvZihIVF9DQVBBQklMSVRZX0VMRSkpOwotLy8JSUVFRTgwMjExX0RFQlVHX0RBVEEoSUVFRTgwMjExX0RMX0RBVEF8SUVFRTgwMjExX0RMX0hULCBwUGVlckhUSW5mbywgc2l6ZW9mKEhUX0lORk9STUFUSU9OX0VMRSkpOwotCS8vIENvbmZpZyBTdXBwb3J0ZWQgQ2hhbm5lbCBXaWR0aCBzZXR0aW5nCi0JLy8KKwogCUhUU2V0Q29ubmVjdEJ3TW9kZShpZWVlLCAoSFRfQ0hBTk5FTF9XSURUSCkocFBlZXJIVENhcC0+Q2hsV2lkdGgpLCAoSFRfRVhUQ0hOTF9PRkZTRVQpKHBQZWVySFRJbmZvLT5FeHRDaGxPZmZzZXQpKTsKIAotLy8JaWYocEhUSW5mby0+YkN1ckJXNDBNSHogPT0gdHJ1ZSkKKwlpZihwSFRJbmZvLT5iQ3VyQlc0ME1IeiA9PSB0cnVlKQogCQlwSFRJbmZvLT5iQ3VyVHhCVzQwTUh6ID0gKChwUGVlckhUSW5mby0+UmVjb21tZW1kZWRUeFdpZHRoID09IDEpP3RydWU6ZmFsc2UpOwogCiAJLy8KQEAgLTEyOTUsNyArMTI1OCw3IEBACiAKIAkvLyA8Mj4gU2V0IEFNUERVIE1pbmltdW0gTVBEVSBTdGFydCBTcGFjaW5nCiAJLy8gODAyLjExbiAzLjAgc2VjdGlvbiA5LjdkLjMKLSNpZiAxCisjaWYgMAogCWlmKHBIVEluZm8tPk1QRFVfRGVuc2l0eSA+IHBQZWVySFRDYXAtPk1QRFVEZW5zaXR5KQogCQlwSFRJbmZvLT5DdXJyZW50TVBEVURlbnNpdHkgPSBwSFRJbmZvLT5NUERVX0RlbnNpdHk7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvcnRsODE5eF9Rb3MuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfUW9zLmgKaW5kZXggZDQ1NjVlYy4uOTI4MDYyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvcnRsODE5eF9Rb3MuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X1Fvcy5oCkBAIC0xLDMgKzEsMjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBSZWFsdGVrIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fSU5DX1FPU19UWVBFX0gKICNkZWZpbmUgX19JTkNfUU9TX1RZUEVfSAogCkBAIC0zNiwxOCArNTQsNiBAQAogCiAjZGVmaW5lCU1BWF9XTU1FTEVfTEVOR1RICTY0CiAKLS8vCi0vLyBRb1MgbW9kZS4KLS8vIGVudW0gMCwgMSwgMiwgNDogc2luY2Ugd2UgY2FuIHVzZSB0aGUgT1IofCkgb3BlcmF0aW9uLgotLy8KLS8vIFFPU19NT0RFIGlzIHJlZGVmaW5lZCBmb3IgZW51bSBjYW4ndCBiZSArKywgfCB1bmRlciBDKysgY29tcGlsZXIsIDIwMDYuMDUuMTcsIGJ5IHJjbmprby4KLS8vdHlwZWRlZgllbnVtIF9RT1NfTU9ERXsKLS8vCVFPU19ESVNBQkxFCQk9IDAsCi0vLwlRT1NfV01NCQkJPSAxLAotLy8JUU9TX0VEQ0EJCQk9IDIsCi0vLwlRT1NfSENDQQkJCT0gNCwKLS8vfVFPU19NT0RFLCpQUU9TX01PREU7Ci0vLwogdHlwZWRlZiB1MzIgUU9TX01PREUsICpQUU9TX01PREU7CiAjZGVmaW5lIFFPU19ESVNBQkxFCQkwCiAjZGVmaW5lIFFPU19XTU0JCQkxCkBAIC0yMTksMTkgKzIyNSw2IEBACiAKIH1RT1NfSU5GT19GSUVMRCwgKlBRT1NfSU5GT19GSUVMRDsKIAotLy8KLS8vIEFDSSB0byBBQyBjb2RpbmcuCi0vLyBSZWY6IFdNTSBzcGVjIDIuMi4yOiBXTUUgUGFyYW1ldGVyIEVsZW1lbnQsIHAuMTMuCi0vLwotLy8gQUNfQ09ESU5HIGlzIHJlZGVmaW5lZCBmb3IgZW51bSBjYW4ndCBiZSArKywgfCB1bmRlciBDKysgY29tcGlsZXIsIDIwMDYuMDUuMTcsIGJ5IHJjbmprby4KLS8vdHlwZWRlZgllbnVtIF9BQ19DT0RJTkd7Ci0vLwlBQzBfQkUJPSAwLAkJLy8gQUNJOiAweDAwCS8vIEJlc3QgRWZmb3J0Ci0vLwlBQzFfQksJPSAxLAkJLy8gQUNJOiAweDAxCS8vIEJhY2tncm91bmQKLS8vCUFDMl9WSQk9IDIsCQkvLyBBQ0k6IDB4MTAJLy8gVmlkZW8KLS8vCUFDM19WTwk9IDMsCQkvLyBBQ0k6IDB4MTEJLy8gVm9pY2UKLS8vCUFDX01BWCA9IDQsCQkvLyBNYXg6IGRlZmluZSB0b3RhbCBudW1iZXI7IFNob3VsZCBub3QgdG8gYmUgdXNlZCBhcyBhIHJlYWwgZW51bS4KLS8vfUFDX0NPRElORywqUEFDX0NPRElORzsKLS8vCiB0eXBlZGVmIHUzMiBBQ19DT0RJTkc7CiAjZGVmaW5lIEFDMF9CRQkwCQkvLyBBQ0k6IDB4MDAJLy8gQmVzdCBFZmZvcnQKICNkZWZpbmUgQUMxX0JLCTEJCS8vIEFDSTogMHgwMQkvLyBCYWNrZ3JvdW5kCkBAIC0yNTIsNyArMjQ1LDcgQEAKIAkJdTgJQUNNOjE7CiAJCXU4CUFDSToyOwogCQl1OAlSZXNlcnZlZDoxOwotCX1mOwkvLyBGaWVsZAorCX1mOwogfUFDSV9BSUZTTiwgKlBBQ0lfQUlGU047CiAKIC8vCkBAIC0yNjUsNyArMjU4LDcgQEAKIAl7CiAJCXU4CUVDV21pbjo0OwogCQl1OAlFQ1dtYXg6NDsKLQl9ZjsJLy8gRmllbGQKKwl9ZjsKIH1FQ1csICpQRUNXOwogCiAvLwpAQCAtMjgxLDcgKzI3NCw3IEBACiAJCUFDSV9BSUZTTglBY2lBaWZzbjsKIAkJRUNXCQlFY3c7CiAJCXUxNgkJVFhPUExpbWl0OwotCX1mOwkvLyBGaWVsZAorCX1mOwogfUFDX1BBUkFNLCAqUEFDX1BBUkFNOwogCiAKQEAgLTM1NCw3ICszNDcsNyBAQAogCQl1MzIJTWluUGh5UmF0ZTsKIAkJdTE2CVN1cnBsdXNCYW5kd2lkdGhBbGxvd2FuY2U7CiAJCXUxNglNZWRpdW1UaW1lOwotCX0gZjsJLy8gRmllbGQKKwl9IGY7CiB9VFNQRUNfQk9EWSwgKlBUU1BFQ19CT0RZOwogCiAKQEAgLTM4NCw3ICszNzcsNiBAQAogCiAKIHR5cGVkZWYgc3RydWN0IF9BQ017Ci0vLwl1OAkJUmVnRW5hYmxlQUNNOwogCXU2NAkJVXNlZFRpbWU7CiAJdTY0CQlNZWRpdW1UaW1lOwogCXU4CQlId0FjbUN0bDsJLy8gVFJVRTogVXNlZFRpbWUgZXhjZWVkID0+IERvIE5PVCBVU0UgdGhpcyBBQy4gSXQgd2xsIGJlIHdyaXR0ZW4gdG8gQUNNX0NPTlRST0woMHhCRiBCSVQgMC8xLzIgaW4gODE4NUIpLgpAQCAtNDA0LDEwICszOTYsNiBAQAogI2RlZmluZQlHRVRfQkVfVUFQU0QoX2Fwc2QpICgoX2Fwc2QpICYgQklUMykKICNkZWZpbmUJU0VUX0JFX1VBUFNEKF9hcHNkKSAoKF9hcHNkKSB8PSBCSVQzKQogCi0KLS8vdHlwZWRlZiBzdHJ1Y3QgX1RDTEFTU3sKLS8vIFRPRE8KLS8vfSBUQ0xBU1MsICpQVENMQVNTOwogdHlwZWRlZiB1bmlvbiBfUU9TX1RDTEFTewogCiAJc3RydWN0IF9UWVBFX0dFTkVSQUx7CkBAIC00NTksMzIgKzQ0NywxMiBAQAogCX0gVFlQRTJfODAyMVE7CiB9IFFPU19UQ0xBUywgKlBRT1NfVENMQVM7CiAKLS8vdHlwZWRlZiBzdHJ1Y3QgX1dNTV9UU1RSRUFNewotLy8KLS8vLSBUU1BFQwotLy8tIEFDICh3aGljaCB0byBtYXBwaW5nKQotLy99IFdNTV9UU1RSRUFNLCAqUFdNTV9UU1RSRUFNOwogdHlwZWRlZiBzdHJ1Y3QgX1FPU19UU1RSRUFNewogCXU4CQkJQUM7CiAJV01NX1RTUEVDCQlUU3BlYzsKIAlRT1NfVENMQVMJCVRDbGFzczsKIH0gUU9TX1RTVFJFQU0sICpQUU9TX1RTVFJFQU07CiAKLS8vdHlwZWRlZiBzdHJ1Y3QgX1VfQVBTRHsKLS8vLSBUcmlnZ2VyRW5hYmxlIFs0XQotLy8tIE1heFNQTGVuZ3RoCi0vLy0gSGlnaGVzdEFjQnVmZmVyZWQKLS8vfSBVX0FQU0QsICpQVV9BUFNEOwotCi0vL2pvc2VwaCBUT0RPOgotLy8JVUFQU0QgZnVuY3Rpb24gc2hvdWxkIGJlIGltcGxlbWVudGVkIGJ5IDIgZGF0YSBzdHJ1Y3R1cmUKLS8vCSJRb3MgY29udHJvbCBmaWVsZCIgYW5kICJRb3MgaW5mbyBmaWVsZCIKLS8vdHlwZWRlZiBzdHJ1Y3QgX1FPU19VQVBTRHsKLS8vCXU4CQkJYlRyaWdnZXJFbmFibGVbNF07Ci0vLwl1OCAJCQlNYXhTUExlbmd0aDsKLS8vCXU4CQkJSGlnaGVzdEJ1ZkFDOwotLy99IFFPU19VQVBTRCwgKlBRT1NfQVBTRDsKLQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgICAgIDgwMi4xMSBNYW5hZ2VtZW50IGZyYW1lIFN0YXR1cyBDb2RlIGZpZWxkCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ5OCw3ICs0NjYsNiBAQAogLy8gUmVmOiBET1QxMV9RT1MgaW4gODE4NSBjb2RlLiBbZGVmLiBpbiBRb1NfbXAuaF0KIC8vCiB0eXBlZGVmIHN0cnVjdCBfU1RBX1FPU3sKLQkvL0RFQ0xBUkVfUlRfT0JKRUNUKFNUQV9RT1MpOwogCXU4CQkJCVdNTUlFQnVmW01BWF9XTU1FTEVfTEVOR1RIXTsKIAl1OCoJCQkJV01NSUU7CiAKQEAgLTU2NSwxOCArNTMyLDkgQEAKIAlBQ19QQVJBTQkJQWNQYXJhbWV0ZXJbNF07CiB9QlNTX1FPUywgKlBCU1NfUU9TOwogCi0KLS8vCi0vLyBSZWY6IHNRb1NDdGxMbmcgYW5kIFFvU0N0bCBkZWZpbml0aW9uIGluIDgxODUgUW9TIGNvZGUuCi0vLyNkZWZpbmUgUW9TQ3RsICAgKCgJKEFkYXB0ZXItPmJSZWdRb1MpICYmIChBZGFwdGVyLT5kb3QxMVFvUy5Rb1NNb2RlICYoUU9TX0VEQ0F8UU9TX0hDQ0EpKQkgICkgID9zUW9TQ3RsTG5nOjApCi0vLwogI2RlZmluZSBzUW9TQ3RsTG5nCQkJMgogI2RlZmluZQlRT1NfQ1RSTF9MRU4oX1Fvc01vZGUpCQkoKF9Rb3NNb2RlID4gUU9TX0RJU0FCTEUpPyBzUW9TQ3RsTG5nIDogMCkKIAotCi0vL0FkZGVkIGJ5IGpvc2VwaAotLy9VUCBNYXBwaW5nIHRvIEFDLCB1c2luZyBpbiBNZ250UXVlcnlfU2VxdWVuY2VOdW1iZXIoKSBhbmQgbWF5YmUgZm9yIERTQ1AKLS8vI2RlZmluZSBVUDJBQyh1cCkJCQkoKHVwPDMpPygodXA9PTApPzE6MCk6KHVwPj4xKSkKICNkZWZpbmUgSXNBQ1ZhbGlkKGFjKQkJCSgoYWM8PTcgKT90cnVlOmZhbHNlICkKIAotI2VuZGlmIC8vICNpZm5kZWYgX19JTkNfUU9TX1RZUEVfSAorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X1RTLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X1RTLmgKaW5kZXggYmFhYWMyMS4uYTA3YjIzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvcnRsODE5eF9UUy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfVFMuaApAQCAtMSwzICsxLDIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfVFNUWVBFX0hfCiAjZGVmaW5lIF9UU1RZUEVfSF8KICNpbmNsdWRlICJydGw4MTl4X1Fvcy5oIgpAQCAtMzAsMTAgKzQ4LDEwIEBACiAJdTE2CQkJCVR4Q3VyU2VxOwogCUJBX1JFQ09SRAkJCVR4UGVuZGluZ0JBUmVjb3JkOyAgCS8vIEZvciBCQSBPcmlnaW5hdG9yCiAJQkFfUkVDT1JECQkJVHhBZG1pdHRlZEJBUmVjb3JkOwkvLyBGb3IgQkEgT3JpZ2luYXRvcgotLy8JUU9TX0RMX1JFQ09SRAkJRExSZWNvcmQ7CiAJdTgJCQkJYkFkZEJhUmVxSW5Qcm9ncmVzczsKIAl1OAkJCQliQWRkQmFSZXFEZWxheWVkOwogCXU4CQkJCWJVc2luZ0JhOworCXU4IAkJCQliRGlzYWJsZV9BZGRCYTsKIAlzdHJ1Y3QgdGltZXJfbGlzdAkJVHNBZGRCYVRpbWVyOwogCXU4CQkJCW51bTsKIH0gVFhfVFNfUkVDT1JELCAqUFRYX1RTX1JFQ09SRDsKQEAgLTQ4LDkgKzY2LDYgQEAKIAl1MTYJCQkJUnhMYXN0U2VxTnVtOwogCXU4CQkJCVJ4TGFzdEZyYWdOdW07CiAJdTgJCQkJbnVtOwotLy8JUU9TX0RMX1JFQ09SRAkJRExSZWNvcmQ7CiB9IFJYX1RTX1JFQ09SRCwgKlBSWF9UU19SRUNPUkQ7CiAKLQogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfVFNQcm9jLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X1RTUHJvYy5jCmluZGV4IGRlMTQzZWMuLjdmZmMwNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfVFNQcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvcnRsODE5eF9UU1Byb2MuYwpAQCAtMSwzICsxLDIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgImllZWU4MDIxMS5oIgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtMjksNyArNDcsNiBAQAogCiAJUFJYX1JFT1JERVJfRU5UUlkgCXBSZW9yZGVyRW50cnkgPSBOVUxMOwogCi0JLy91MzIgZmxhZ3MgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCXN0cnVjdCBpZWVlODAyMTFfcnhiICpzdGF0c19JbmRpY2F0ZUFycmF5W1JFT1JERVJfV0lOX1NJWkVdOwogCXU4IGluZGV4ID0gMDsKQEAgLTM3LDcgKzU0LDYgQEAKIAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJihpZWVlLT5yZW9yZGVyX3NwaW5sb2NrKSwgZmxhZ3MpOwotCS8vUGxhdGZvcm1BY3F1aXJlU3BpbkxvY2soQWRhcHRlciwgUlRfUlhfU1BJTkxPQ0spOwogCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfUkVPUkRFUiwiPT09PT09PT09PT09PT09PT09PiVzKClcbiIsX19GVU5DVElPTl9fKTsKIAlpZihwUnhUcy0+UnhUaW1lb3V0SW5kaWNhdGVTZXEgIT0gMHhmZmZmKQogCXsKQEAgLTcyLDcgKzg4LDYgQEAKIAogCWlmKGluZGV4PjApCiAJewotCQkvLyBTZXQgUnhUaW1lb3V0SW5kaWNhdGVTZXEgdG8gMHhmZmZmIHRvIGluZGljYXRlIG5vIHBlbmRpbmcgcGFja2V0cyBpbiBidWZmZXIgbm93LgogCQlwUnhUcy0+UnhUaW1lb3V0SW5kaWNhdGVTZXEgPSAweGZmZmY7CiAKIAkJLy8gSW5kaWNhdGUgcGFja2V0cwpAQCAtODIsNiArOTcsNyBAQAogCQkJcmV0dXJuOwogCQl9CiAJCWllZWU4MDIxMV9pbmRpY2F0ZV9wYWNrZXRzKGllZWUsIHN0YXRzX0luZGljYXRlQXJyYXksIGluZGV4KTsKKwkJIGJQa3RJbkJ1ZiA9IGZhbHNlOwogCX0KIAogCWlmKGJQa3RJbkJ1ZiAmJiAocFJ4VHMtPlJ4VGltZW91dEluZGljYXRlU2VxPT0weGZmZmYpKQpAQCAtMTI2LDYgKzE0Miw3IEBACiAJcFRTLT5iQWRkQmFSZXFJblByb2dyZXNzID0gZmFsc2U7CiAJcFRTLT5iQWRkQmFSZXFEZWxheWVkID0gZmFsc2U7CiAJcFRTLT5iVXNpbmdCYSA9IGZhbHNlOworCXBUUy0+YkRpc2FibGVfQWRkQmEgPSBmYWxzZTsKIAlSZXNldEJhRW50cnkoJnBUUy0+VHhBZG1pdHRlZEJBUmVjb3JkKTsgLy9Gb3IgQkEgT3JpZ2luYXRvcgogCVJlc2V0QmFFbnRyeSgmcFRTLT5UeFBlbmRpbmdCQVJlY29yZCk7CiB9CkBAIC0yMTIsNyArMjI5LDYgQEAKIAl9CiAJLy8gSW5pdGlhbGl6ZSB1bnVzZWQgUnggUmVvcmRlciBMaXN0LgogCUlOSVRfTElTVF9IRUFEKCZpZWVlLT5SeFJlb3JkZXJfVW51c2VkX0xpc3QpOwotLy8jaWZkZWYgVE9fRE9fTElTVAogCWZvcihjb3VudCA9IDA7IGNvdW50IDwgUkVPUkRFUl9FTlRSWV9OVU07IGNvdW50KyspCiAJewogCQlsaXN0X2FkZF90YWlsKCAmcFJ4UmVvcmRlckVudHJ5LT5MaXN0LCZpZWVlLT5SeFJlb3JkZXJfVW51c2VkX0xpc3QpOwpAQCAtMjIwLDcgKzIzNiw2IEBACiAJCQlicmVhazsKIAkJcFJ4UmVvcmRlckVudHJ5ID0gJmllZWUtPlJ4UmVvcmRlckVudHJ5W2NvdW50KzFdOwogCX0KLS8vI2VuZGlmCiAKIH0KIApAQCAtMjM2LDcgKzI1MSw2IEBACiAKIFBUU19DT01NT05fSU5GTyBTZWFyY2hBZG1pdFRSU3RyZWFtKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1OCoJQWRkciwgdTggVElELCBUUl9TRUxFQ1QJVHhSeFNlbGVjdCkKIHsKLQkvL0RJUkVDVElPTl9WQUxVRSAJZGlyOwogCXU4IAlkaXI7CiAJYm9vbAkJCQlzZWFyY2hfZGlyWzRdID0gezAsIDAsIDAsIDB9OwogCXN0cnVjdCBsaXN0X2hlYWQqCQlwc2VhcmNoX2xpc3Q7IC8vRklYTUUKQEAgLTI4MiwxOCArMjk2LDE1IEBACiAJZWxzZQogCQlwc2VhcmNoX2xpc3QgPSAmaWVlZS0+UnhfVFNfQWRtaXRfTGlzdDsKIAotCS8vZm9yKGRpciA9IERJUl9VUDsgZGlyIDw9IERJUl9CSV9ESVI7IGRpcisrKQogCWZvcihkaXIgPSAwOyBkaXIgPD0gRElSX0JJX0RJUjsgZGlyKyspCiAJewogCQlpZihzZWFyY2hfZGlyW2Rpcl0gPT1mYWxzZSApCiAJCQljb250aW51ZTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShwUmV0LCBwc2VhcmNoX2xpc3QsIExpc3QpewotCS8vCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1RTLCAiQUREOiVwTSwgVElEOiVkLCBkaXI6JWRcbiIsIHBSZXQtPkFkZHIsIHBSZXQtPlRTcGVjLmYuVFNJbmZvLmZpZWxkLnVjVFNJRCwgcFJldC0+VFNwZWMuZi5UU0luZm8uZmllbGQudWNEaXJlY3Rpb24pOwogCQkJaWYgKG1lbWNtcChwUmV0LT5BZGRyLCBBZGRyLCA2KSA9PSAwKQogCQkJCWlmIChwUmV0LT5UU3BlYy5mLlRTSW5mby5maWVsZC51Y1RTSUQgPT0gVElEKQogCQkJCQlpZihwUmV0LT5UU3BlYy5mLlRTSW5mby5maWVsZC51Y0RpcmVjdGlvbiA9PSBkaXIpCiAJCQkJCXsKLQkvLwkJCQkJcHJpbnRrKCJCaW5nbyEgZ290IGl0XG4iKTsKIAkJCQkJCWJyZWFrOwogCQkJCQl9CiAKQEAgLTM1MiwxMCArMzYzLDkgQEAKIAkvLwogCWlmKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKEFkZHIpIHx8IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKEFkZHIpKQogCXsKLQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICJnZXQgVFMgZm9yIEJyb2FkY2FzdCBvciBNdWx0aWNhc3RcbiIpOworCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgIkVSUiEgZ2V0IFRTIGZvciBCcm9hZGNhc3Qgb3IgTXVsdGljYXN0XG4iKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KLQogCWlmIChpZWVlLT5jdXJyZW50X25ldHdvcmsucW9zX2RhdGEuc3VwcG9ydGVkID09IDApCiAJCVVQID0gMDsKIAllbHNlCkBAIC0zNjMsNyArMzczLDcgQEAKIAkJLy8gSW4gV01NIGNhc2U6IHdlIHVzZSA0IFRJRCBvbmx5CiAJCWlmICghSXNBQ1ZhbGlkKFRJRCkpCiAJCXsKLQkJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLCAiIGluICVzKCksIFRJRCglZCkgaXMgbm90IHZhbGlkXG4iLCBfX0ZVTkNUSU9OX18sIFRJRCk7CisJCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgIkVSUiEgaW4gJXMoKSwgVElEKCVkKSBpcyBub3QgdmFsaWRcbiIsIF9fRlVOQ1RJT05fXywgVElEKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCkBAIC00NzgsNyArNDg4LDYgQEAKIAlUUl9TRUxFQ1QJCQlUeFJ4U2VsZWN0CiAJKQogewotCS8vdTMyIGZsYWdzID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAlkZWxfdGltZXJfc3luYygmcFRzLT5TZXR1cFRpbWVyKTsKIAlkZWxfdGltZXJfc3luYygmcFRzLT5JbmFjdFRpbWVyKTsKQEAgLTQ4Niw3ICs0OTUsNiBAQAogCiAJaWYoVHhSeFNlbGVjdCA9PSBSWF9ESVIpCiAJewotLy8jaWZkZWYgVE9fRE9fTElTVAogCQlQUlhfUkVPUkRFUl9FTlRSWQlwUnhSZW9yZGVyRW50cnk7CiAJCVBSWF9UU19SRUNPUkQgCQlwUnhUUyA9IChQUlhfVFNfUkVDT1JEKXBUczsKIAkJaWYodGltZXJfcGVuZGluZygmcFJ4VFMtPlJ4UGt0UGVuZGluZ1RpbWVyKSkKQEAgLTQ5NCw5ICs1MDIsNyBAQAogCiAgICAgICAgICAgICAgICAgd2hpbGUoIWxpc3RfZW1wdHkoJnBSeFRTLT5SeFBlbmRpbmdQa3RMaXN0KSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gICAgICBQbGF0Zm9ybUFjcXVpcmVTcGluTG9jayhBZGFwdGVyLCBSVF9SWF9TUElOTE9DSyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmKGllZWUtPnJlb3JkZXJfc3BpbmxvY2spLCBmbGFncyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL3BSeFJlb3JkZXJFbnRyeSA9IGxpc3RfZW50cnkoJnBSeFRTLT5SeFBlbmRpbmdQa3RMaXN0LnByZXYsUlhfUkVPUkRFUl9FTlRSWSxMaXN0KTsKIAkJCXBSeFJlb3JkZXJFbnRyeSA9IChQUlhfUkVPUkRFUl9FTlRSWSlsaXN0X2VudHJ5KHBSeFRTLT5SeFBlbmRpbmdQa3RMaXN0LnByZXYsUlhfUkVPUkRFUl9FTlRSWSxMaXN0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfZGVsX2luaXQoJnBSeFJlb3JkZXJFbnRyeS0+TGlzdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB7CkBAIC01MTQsMTEgKzUyMCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByeGIgPSBOVUxMOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgbGlzdF9hZGRfdGFpbCgmcFJ4UmVvcmRlckVudHJ5LT5MaXN0LCZpZWVlLT5SeFJlb3JkZXJfVW51c2VkX0xpc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy9QbGF0Zm9ybVJlbGVhc2VTcGluTG9jayhBZGFwdGVyLCBSVF9SWF9TUElOTE9DSyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCYoaWVlZS0+cmVvcmRlcl9zcGlubG9jayksIGZsYWdzKTsKICAgICAgICAgICAgICAgICB9Ci0KLS8vI2VuZGlmCiAJfQogCWVsc2UKIAl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU1VfSFdJbWcuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTVV9IV0ltZy5jCmluZGV4IGJhOGUxMmMuLjdjNGZkMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTVV9IV0ltZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTVV9IV0ltZy5jCkBAIC05Myw3ICs5Myw3IEBACiAweDkwMCwweDAwMDAwMDAwLAogMHg5MDQsMHgwMDAwMDAyMywKIDB4OTA4LDB4MDAwMDAwMDAsCi0weDkwYywweDAzMzIxMzMzLAorMHg5MGMsMHgwMTEyMTMxMywKIDB4YTAwLDB4MDBkMDQ3YzgsCiAweGEwNCwweDgwZmYwMDA4LAogMHhhMDgsMHg4Y2NkODMwMCwKQEAgLTEzNSw3ICsxMzUsNyBAQAogMHhjNjgsMHg2OTU0MzQyMCwKIDB4YzZjLDB4NDMzYzAwOTQsCiAweGM3MCwweDJjN2YwMDBkLAotMHhjNzQsMHgwMTg2MTU1YiwKKzB4Yzc0LDB4MDE4NjE3NWIsCiAweGM3OCwweDAwMDAwMDFmLAogMHhjN2MsMHgwMGI5MTYxMiwKIDB4YzgwLDB4NDAwMDAxMDAsCkBAIC0yNTYsMTMgKzI1NiwzNCBAQAogfTsKIAogdTMyIFJ0bDgxOTJTVVBIWV9SRUdfQXJyYXlfUEdbUEhZX1JFR19BcnJheV9QR0xlbmd0aF0gPSB7Ci0weGUwMCwweGZmZmZmZmZmLDB4MDYwOTA5MDksCi0weGUwNCwweGZmZmZmZmZmLDB4MDAwMzA0MDYsCisweGUwMCwweGZmZmZmZmZmLDB4MDQwNjA2MDYsCisweGUwNCwweGZmZmZmZmZmLDB4MDAwMjAyMDQsCiAweGUwOCwweDAwMDBmZjAwLDB4MDAwMDAwMDAsCi0weGUxMCwweGZmZmZmZmZmLDB4MGEwYzBkMGUsCi0weGUxNCwweGZmZmZmZmZmLDB4MDQwNzA4MDksCi0weGUxOCwweGZmZmZmZmZmLDB4MGEwYzBkMGUsCi0weGUxYywweGZmZmZmZmZmLDB4MDQwNzA4MDksCisweGUxMCwweGZmZmZmZmZmLDB4MDQwODA4MGEsCisweGUxNCwweGZmZmZmZmZmLDB4MDAwMjAyMDQsCisweGUxOCwweGZmZmZmZmZmLDB4MDQwODA4MGEsCisweGUxYywweGZmZmZmZmZmLDB4MDAwMjAyMDQsCisweGUwMCwweGZmZmZmZmZmLDB4MDAwMDAwMDAsCisweGUwNCwweGZmZmZmZmZmLDB4MDAwMDAwMDAsCisweGUwOCwweDAwMDBmZjAwLDB4MDAwMDAwMDAsCisweGUxMCwweGZmZmZmZmZmLDB4MDAwMDAwMDAsCisweGUxNCwweGZmZmZmZmZmLDB4MDAwMDAwMDAsCisweGUxOCwweGZmZmZmZmZmLDB4MDAwMDAwMDAsCisweGUxYywweGZmZmZmZmZmLDB4MDAwMDAwMDAsCisweGUwMCwweGZmZmZmZmZmLDB4MDAwMDAwMDAsCisweGUwNCwweGZmZmZmZmZmLDB4MDAwMDAwMDAsCisweGUwOCwweDAwMDBmZjAwLDB4MDAwMDAwMDAsCisweGUxMCwweGZmZmZmZmZmLDB4MDAwMDAwMDAsCisweGUxNCwweGZmZmZmZmZmLDB4MDAwMDAwMDAsCisweGUxOCwweGZmZmZmZmZmLDB4MDAwMDAwMDAsCisweGUxYywweGZmZmZmZmZmLDB4MDAwMDAwMDAsCisweGUwMCwweGZmZmZmZmZmLDB4MDAwMDAwMDAsCisweGUwNCwweGZmZmZmZmZmLDB4MDAwMDAwMDAsCisweGUwOCwweDAwMDBmZjAwLDB4MDAwMDAwMDAsCisweGUxMCwweGZmZmZmZmZmLDB4MDAwMDAwMDAsCisweGUxNCwweGZmZmZmZmZmLDB4MDAwMDAwMDAsCisweGUxOCwweGZmZmZmZmZmLDB4MDAwMDAwMDAsCisweGUxYywweGZmZmZmZmZmLDB4MDAwMDAwMDAsCiB9OwogCiB1MzIgUnRsODE5MlNVUmFkaW9BXzFUX0FycmF5W1JhZGlvQV8xVF9BcnJheUxlbmd0aF0gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU1VfSFdJbWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTVV9IV0ltZy5oCmluZGV4IDM2ZTg0YWYuLjY5YTY2YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTVV9IV0ltZy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTVV9IV0ltZy5oCkBAIC0xLDMgKzEsMjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBSZWFsdGVrIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fSU5DX0hBTDgxOTJTVV9GV19JTUdfSAogI2RlZmluZSBfX0lOQ19IQUw4MTkyU1VfRldfSU1HX0gKIApAQCAtMTksNyArMzcsNyBAQAogZXh0ZXJuIHUzMiBSdGw4MTkyU1VQSFlfQ2hhbmdlVG9fMVQyUkFycmF5W1BIWV9DaGFuZ2VUb18xVDJSQXJyYXlMZW5ndGhdOwogI2RlZmluZSBQSFlfQ2hhbmdlVG9fMlQyUkFycmF5TGVuZ3RoIDQ1CiBleHRlcm4gdTMyIFJ0bDgxOTJTVVBIWV9DaGFuZ2VUb18yVDJSQXJyYXlbUEhZX0NoYW5nZVRvXzJUMlJBcnJheUxlbmd0aF07Ci0jZGVmaW5lIFBIWV9SRUdfQXJyYXlfUEdMZW5ndGggMjEKKyNkZWZpbmUgUEhZX1JFR19BcnJheV9QR0xlbmd0aCA4NAogZXh0ZXJuIHUzMiBSdGw4MTkyU1VQSFlfUkVHX0FycmF5X1BHW1BIWV9SRUdfQXJyYXlfUEdMZW5ndGhdOwogI2RlZmluZSBSYWRpb0FfMVRfQXJyYXlMZW5ndGggMjAyCiBleHRlcm4gdTMyIFJ0bDgxOTJTVVJhZGlvQV8xVF9BcnJheVtSYWRpb0FfMVRfQXJyYXlMZW5ndGhdOwpAQCAtMzgsNSArNTYsNSBAQAogI2RlZmluZSBBR0NUQUJfQXJyYXlMZW5ndGggMzIwCiBleHRlcm4gdTMyIFJ0bDgxOTJTVUFHQ1RBQl9BcnJheVtBR0NUQUJfQXJyYXlMZW5ndGhdOwogCi0jZW5kaWYgLy9fX0lOQ19IQUw4MTkyU1VfRldfSU1HX0gKKyNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU1VfbGVkLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU1VfbGVkLmMKaW5kZXggNjA5ZGJhNi4uNWQ5NmIzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNVX2xlZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTVV9sZWQuYwpAQCAtMTA4NywyMiArMTA4NywxMyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlIAkqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGF0YTsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAJKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAJc2NoZWR1bGVfd29yaygmKHByaXYtPkJsaW5rV29ya0l0ZW0pKTsKLSNlbmRpZgogfQogCiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQogdm9pZCBCbGlua1dvcmtJdGVtQ2FsbGJhY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByODE5Ml9wcml2LCBCbGlua1dvcmtJdGVtKTsKLSNlbHNlCi12b2lkIEJsaW5rV29ya0l0ZW1DYWxsYmFjayh2b2lkICogQ29udGV4dCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopQ29udGV4dDsKLQlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0jZW5kaWYKIAogCVBMRURfODE5eFVzYgkgcExlZCA9IHByaXYtPnBMZWQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTX0VmdXNlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU19FZnVzZS5jCmluZGV4IGYwY2U2NTYuLmJiZWZkMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTX0VmdXNlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNfRWZ1c2UuYwpAQCAtMSwyNyArMSwyNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIFJlYWx0ZWsgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgotICogICAgIChjKSBDb3B5cmlnaHQgIDIwMDgsIFJlYWxURUsgVGVjaG5vbG9naWVzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIEJhc2VkIG9uIHRoZSByODE4MCBkcml2ZXIsIHdoaWNoIGlzOgorICogQ29weXJpZ2h0IDIwMDQtMjAwNSBBbmRyZWEgTWVyZWxsbyA8YW5kcmVhbXJsQHRpc2NhbGkuaXQ+LCBldCBhbC4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgotICogTW9kdWxlOglFZnVzZS5jCSggU291cmNlIEMgRmlsZSkKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCiAgKgotICogTm90ZToJCUNvcHkgZnJvbSBXTUFDIGZvciB0aGUgZmlyc3QgdmVyc2lvbiEhISEKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCiAgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgogICoKLSAqIEZ1bmN0aW9uOgotICoKLSAqIEV4cG9ydDoKLSAqCi0gKiBBYmJyZXY6Ci0gKgotICogSGlzdG9yeToKLSAqIERhdGEJCQlXaG8JCVJlbWFyawotICoKLSAqIDA5LzIzLzIwMDgJTUhDCQlQb3J0aW5nIEVmdXNlIFIvVyBBUEkgZnJvbSBXTUFDLgotICogMTEvMTAvMjAwOAlNSEMJCTEuIFBvcnRpbmcgZnJvbSA4NzEyIEVGVVNFLgotICoJCQkJCQkyLiBBZGQgZGVzY3JpcHRpb24gYW5kIHJlb3JnYW5pemUgY29kZSBhcmNoLgotICogMTEvMTYvMjAwOCAJTUhDCQkxLiBSZW9yZ2FuaXplIGNvZGUgYXJjaGl0ZWN0dXJlLgotICoJCQkJCQkyLiBSZW5hbWUgZm9yIHNvbWUgQVBJIGFuZCBjaGFuZ2UgZXh0ZXJuIG9yIHN0YXRpYyB0eXBlLgotICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgInI4MTkyVS5oIgogI2luY2x1ZGUgInI4MTkyU19ody5oIgpAQCAtMzAsMjAgKzI5LDE0IEBACiAjaW5jbHVkZSAicjgxOTJTX0VmdXNlLmgiCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAKLS8vdHlwZWRlZiAgaW50CUlOVDMyOwotLy8KLS8vIEluIHRoZSBmdXR1cmUsIHdlIHdpbGwgYWx3YXlzIHN1cHBvcnQgRUZVU0UhIQotLy8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRGVmaW5lIExvY2FsIENvbnN0YW50LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNkZWZpbmUgCV9QT1dFUk9OX0RFTEFZXwogI2RlZmluZSAJX1BSRV9FWEVDVVRFX1JFQURfQ01EXwogCiAjZGVmaW5lCQlFRlVTRV9SRVBFQVRfVEhSRVNIT0xEXwkJMwogI2RlZmluZQkJRUZVU0VfRVJST0VfSEFORExFCQkxCiAKLQotLy8gRnJvbSA4NzEyISEhISEKIHR5cGVkZWYgc3RydWN0IF9FRlVTRV9NQVBfQXsKIAl1OCBvZmZzZXQ7CQkvLzB+MTUKIAl1OCB3b3JkX3N0YXJ0OwkvLzB+MwpAQCAtOTEsMTQgKzg0LDExIEBACiAJdTgJCXR4X3Bvd2VyX2dbMTRdOwogfTsKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1EZWZpbmUgTG9jYWwgQ29uc3RhbnQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRGVmaW5lIGdsb2JhbCB2YXJpYWJsZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGNvbnN0IHU4IE1BWF9QR1BLVF9TSVpFID0gOTsgLy9oZWFkZXIrIDIqIDQgd29yZHMgKEJZVEVTKQogY29uc3QgdTggUEdQS1RfREFUQV9TSVpFID0gODsgLy9CWVRFUyBzaXplb2YodTgpKjgKIGNvbnN0IHUzMiBFRlVTRV9NQVhfU0laRSA9IDUxMjsKIAorY29uc3QgdTggRUZVU0VfT09CX1BST1RFQ1RfQllURVMgPSAxNDsKIAogY29uc3QgRUZVU0VfTUFQIFJUTDg3MTJfU0RJT19FRlVTRV9UQUJMRVtdPXsKIAkJCQkvL29mZnNldAl3b3JkX3MJYnl0ZV9zdGFydAlieXRlX2NudHMKQEAgLTExNywxNSArMTA3LDYgQEAKIC8qVHhQd0luZGV4ICovCXsxMQkJLDAJCSwwCQkJLDI4CX0gIC8vIDU4fjczaCAgMy4uLjQKIH07CiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRGVmaW5lIGdsb2JhbCB2YXJpYWJsZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLURlZmluZSBsb2NhbCB2YXJpYWJsZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRGVmaW5lIGxvY2FsIHZhcmlhYmxlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tRGVmaW5lIGZ1bmN0aW9uIHByb3RvdHlwZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8vCiAvLyBGcm9tIFdNQUMgRWZ1c2Ugb25lIGJ5dGUgUi9XCiAvLwpAQCAtMTc2LDcgKzE1Nyw3IEBACiAvLwogc3RhdGljCXU4CiBlZnVzZV9QZ1BhY2tldFJlYWQoCXN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsdTgJb2Zmc2V0LHU4ICpkYXRhKTsKLXN0YXRpYwl1OAorc3RhdGljCXUzMgogZWZ1c2VfUGdQYWNrZXRXcml0ZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2LHU4IG9mZnNldCx1OCB3b3JkX2VuLHU4CSpkYXRhKTsKIHN0YXRpYwl2b2lkCiBlZnVzZV9Xb3JkRW5hYmxlRGF0YVJlYWQoCXU4IHdvcmRfZW4sdTggKnNvdXJkYXRhLHU4ICp0YXJnZXRkYXRhKTsKQEAgLTE5NCw3ICsxNzUsNiBAQAogI2lmZGVmIFRPX0RPX0xJU1QKIHN0YXRpYyB2b2lkIGVmdXNlX3JlZ19jdHJsKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIHU4IGJQb3dlck9uKTsKICNlbmRpZgotLyotLS0tLS0tLS0tLS0tLS0tLS0tLURlZmluZSBmdW5jdGlvbiBwcm90b3R5cGUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIAogCkBAIC0yNDIsOCArMjIyLDcgQEAKIAkvL1NldCBFLWZ1c2UgcHJvZ3JhbSB0aW1lICYgcmVhZCB0aW1lIDogMHgzMFszMDoyNF09MTExMDAxMGIKIAl3cml0ZV9uaWNfYnl0ZShkZXYsIEVGVVNFX0NUUkwrMywgMHg3Mik7CiAKLX0JLyogRUZVU0VfSW5pdGlhbGl6ZSAqLwotCit9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEZ1bmN0aW9uOglFRlVTRV9SZWFkMUJ5dGUKQEAgLTMwMiw3ICsyODEsNyBAQAogCWVsc2UKIAkJcmV0dXJuIDB4RkY7CiAKLX0JLyogRUZVU0VfUmVhZDFCeXRlICovCit9CiAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzI0LDEzICszMDMsMTAgQEAKIGV4dGVybgl2b2lkCiBFRlVTRV9Xcml0ZTFCeXRlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIHUxNiBBZGRyZXNzLHU4IFZhbHVlKQogewotCS8vdTgJZGF0YTsKIAl1OAlCeXRldGVtcCA9IHsweDAwfTsKIAl1OAl0ZW1wID0gezB4MDB9OwogCXUzMglrPTA7CiAKLQkvL1JUX1RSQUNFKENPTVBfRUZVU0UsICJBZGRyPSV4IERhdGEgPSV4XG4iLCBBZGRyZXNzLCBWYWx1ZSk7Ci0KIAlpZiggQWRkcmVzcyA8IEVGVVNFX01BQ19MRU4pCS8vRS1mdXNlIDUxMkJ5dGUKIAl7CiAJCXdyaXRlX25pY19ieXRlKGRldiwgRUZVU0VfQ1RSTCwgVmFsdWUpOwpAQCAtMzQ5LDcgKzMyNSw2IEBACiAJCXRlbXAgPSBCeXRldGVtcCB8IDB4ODA7CiAJCXdyaXRlX25pY19ieXRlKGRldiwgRUZVU0VfQ1RSTCszLCB0ZW1wKTsKIAotCQkvL1dhaXQgV3JpdGUtcmVhZHkgKDB4MzBbMzFdPTApCiAJCUJ5dGV0ZW1wID0gcmVhZF9uaWNfYnl0ZShkZXYsIEVGVVNFX0NUUkwrMyk7CiAJCXdoaWxlKEJ5dGV0ZW1wICYgMHg4MCkKIAkJewpAQCAtMzYzLDggKzMzOCw3IEBACiAJCX0KIAl9CiAKLX0JLyogRUZVU0VfV3JpdGUxQnl0ZSAqLwotCit9CiAKICNpZmRlZiBFRlVTRV9GT1JfOTJTVQogLy8KQEAgLTM4MCwxMiArMzU0LDEwIEBACiAvLwogdm9pZCBkb185M2M0NihzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCAgdTggYWRkb3J2YWx1ZSkKIHsKLSAgICAJLy91OCAgY2xlYXJbMV0gPSB7MHgwfTsgICAgICAvLyBjcz0wICwgc2s9MCAsIGRpPTAgLCBkbz0wCiAJdTggIGNzWzFdID0gezB4ODh9OyAgICAgICAgLy8gY3M9MSAsIHNrPTAgLCBkaT0wICwgZG89MAogCXU4ICBjc3NrWzFdID0gezB4OGN9OyAgICAgIC8vIGNzPTEgLCBzaz0xICwgZGk9MCAsIGRvPTAKIAl1OCAgY3NkaVsxXSA9IHsweDhhfTsgICAgICAvLyBjcz0xICwgc2s9MCAsIGRpPTEgLCBkbz0wCiAgICAgCXU4ICBjc3NrZGlbMV0gPSB7MHg4ZX07ICAgIC8vIGNzPTEgLCBzaz0xICwgZGk9MSAsIGRvPTAKLQkvL3U4ICBkaVsxXSA9IHsweDgyfTsgICAgICAgIC8vIGNzPTAgLCBzaz0wICwgZGk9MSAsIGRvPTAKICAgICAJdTggIGNvdW50OwogCiAgICAgCWZvcihjb3VudD0wIDsgY291bnQ8OCA7IGNvdW50KyspCkBAIC00MjQsNyArMzk2LDYgQEAKIAl1OCAgCWNzc2tbMV0gPSB7MHg4Y307ICAgICAgLy8gY3M9MSAsIHNrPTEgLCBkaT0wICwgZG89MAogCXU4ICAJY3NkaVsxXSA9IHsweDhhfTsgICAgICAvLyBjcz0xICwgc2s9MCAsIGRpPTEgLCBkbz0wCiAgICAJdTggIAljc3NrZGlbMV0gPSB7MHg4ZX07ICAgIC8vIGNzPTEgLCBzaz0xICwgZGk9MSAsIGRvPTAKLQkvL3U4ICAJZGlbMV0gPSB7MHg4Mn07ICAgICAgICAvLyBjcz0wICwgc2s9MCAsIGRpPTEgLCBkbz0wCiAJdTggIAlFZXByb21TRUxbMV09ezB4MDB9OwogCXU4ICAJYWRkcmVzczsKIApAQCAtNDM0LDcgKzQwNSw2IEBACiAKIAlhZGRyZXNzID0gKHU4KVJlZzsKIAotCS8vIFN1Z2dlc3RlZCBieSBTRDEgQWxleCwgMjAwOC4xMC4yMC4gUmV2aXNlZCBieSBSb2dlci4KIAkqRWVwcm9tU0VMPSByZWFkX25pY19ieXRlKGRldiwgRVBST01fQ01EKTsKIAogCWlmKCgqRWVwcm9tU0VMICYgMHgxMCkgPT0gMHgxMCkgLy8gc2VsZWN0IDkzYzQ2CkBAIC00ODYsMTMgKzQ1NiwxMCBAQAogdm9pZAogUmVhZEVGdXNlQnl0ZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2LHUxNiBfb2Zmc2V0LCB1OCAqcGJ1ZikKIHsKLQotCS8vdTE2IAlpbmRleGs9MDsKIAl1MzIgIHZhbHVlMzI7CiAJdTggCXJlYWRieXRlOwogCXUxNiAJcmV0cnk7CiAKLQogCS8vV3JpdGUgQWRkcmVzcwogCXdyaXRlX25pY19ieXRlKGRldiwgRUZVU0VfQ1RSTCsxLCAoX29mZnNldCAmIDB4ZmYpKTsKIAlyZWFkYnl0ZSA9IHJlYWRfbmljX2J5dGUoZGV2LCBFRlVTRV9DVFJMKzIpOwpAQCAtNTA1LDcgKzQ3Miw2IEBACiAJLy9DaGVjayBiaXQgMzIgcmVhZC1yZWFkeQogCXJldHJ5ID0gMDsKIAl2YWx1ZTMyID0gcmVhZF9uaWNfZHdvcmQoZGV2LCBFRlVTRV9DVFJMKTsKLQkvL3doaWxlKCEoKCh2YWx1ZTMyID4+IDI0KSAmIDB4ZmYpICYgMHg4MCkgICYmIChyZXRyeTwxMCkpCiAJd2hpbGUoISgoKHZhbHVlMzIgPj4gMjQpICYgMHhmZikgJiAweDgwKSAgJiYgKHJldHJ5PDEwMDAwKSkKIAl7CiAJCXZhbHVlMzIgPSByZWFkX25pY19kd29yZChkZXYsIEVGVVNFX0NUUkwpOwpAQCAtNTMyLDc4ICs0OTgsMTQ1IEBACiBSZWFkRUZ1c2Uoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgdTE2CSBfb2Zmc2V0LCB1MTYgX3NpemVfYnl0ZSwgdTggKnBidWYpCiB7CiAKLQl1OCAgCWVmdXNlVGJsWzEyOF07CisJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXU4ICAJZWZ1c2VUYmxbRUZVU0VfTUFQX0xFTl07CiAJdTggIAlydGVtcDhbMV07CiAJdTE2IAllRnVzZV9BZGRyID0gMDsKIAl1OCAgCW9mZnNldCwgd3JlbjsKIAl1MTYgIAlpLCBqOwotCXUxNiAJZUZ1c2VXb3JkWzE2XVs0XTsvLyA9IHsweEZGfTsvL0ZJWExaTQorCXUxNiAJZUZ1c2VXb3JkW0VGVVNFX01BWF9TRUNUSU9OXVtFRlVTRV9NQVhfV09SRF9VTklUXTsKKwl1MTYJZWZ1c2VfdXRpbGl6ZWQgPSAwOworCXUxNgllZnVzZV91c2FnZSA9IDA7CiAKLQlmb3IoaT0wOyBpPDE2OyBpKyspCi0JCWZvcihqPTA7IGo8NDsgaisrKQotCQkJZUZ1c2VXb3JkW2ldW2pdPTB4RkY7Ci0KLQkvLyBEbyBOT1QgZXhjZXNzIHRvdGFsIHNpemUgb2YgRUZ1c2UgdGFibGUuIEFkZGVkIGJ5IFJvZ2VyLCAyMDA4LjExLjEwLgotCWlmKChfb2Zmc2V0ICsgX3NpemVfYnl0ZSk+MTI4KQotCXsvLyB0b3RhbCBFLUZ1c2UgdGFibGUgaXMgMTI4Ynl0ZXMKLQkJLy9SVF9UUkFDRShDT01QX0VGVVNFLCAiUmVhZEVGdXNlKCk6IEludmFsaWQgb2Zmc2V0KCUjeCkgd2l0aCByZWFkIGJ5dGVzKCUjeCkhIVxuIixfb2Zmc2V0LCBfc2l6ZV9ieXRlKTsKKwlpZigoX29mZnNldCArIF9zaXplX2J5dGUpPkVGVVNFX01BUF9MRU4pCisJewogCQlwcmludGsoIlJlYWRFRnVzZSgpOiBJbnZhbGlkIG9mZnNldCB3aXRoIHJlYWQgYnl0ZXMhIVxuIik7CiAJCXJldHVybjsKIAl9CiAKLQkvLyBSZWZyZXNoIGVmdXNlIGluaXQgbWFwIGFzIGFsbCBveEZGLgotCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykKLQkJZWZ1c2VUYmxbaV0gPSAweEZGOworCWZvcihpID0gMDsgaSA8IEVGVVNFX01BWF9TRUNUSU9OOyBpKyspCisJCWZvcihqID0gMDsgaiA8IEVGVVNFX01BWF9XT1JEX1VOSVQ7IGorKykKKwkJCWVGdXNlV29yZFtpXVtqXT0weEZGRkY7CiAKICNpZiAoRUZVU0VfUkVBRF9TV0lUQ0ggPT0gMSkKIAlSZWFkRUZ1c2VCeXRlKGRldiwgZUZ1c2VfQWRkciwgcnRlbXA4KTsKICNlbHNlCiAJcnRlbXA4WzBdID0gRUZVU0VfUmVhZDFCeXRlKGRldiwgZUZ1c2VfQWRkcik7CiAjZW5kaWYKLQlpZigqcnRlbXA4ICE9IDB4RkYpCQllRnVzZV9BZGRyKys7Ci0Jd2hpbGUoKCpydGVtcDggIT0gMHhGRikgJiYgKGVGdXNlX0FkZHIgPCA1MTIpKXsKKwlpZigqcnRlbXA4ICE9IDB4RkYpeworCQllZnVzZV91dGlsaXplZCsrOworCQlSVF9UUkFDRShDT01QX0VQUk9NLCAiQWRkcj0lZFxuIiwgZUZ1c2VfQWRkcik7CisJCWVGdXNlX0FkZHIrKzsKKwl9CisKKwl3aGlsZSgoKnJ0ZW1wOCAhPSAweEZGKSAmJiAoZUZ1c2VfQWRkciA8IEVGVVNFX1JFQUxfQ09OVEVOVF9MRU4pKQorCXsKIAkJb2Zmc2V0ID0gKCgqcnRlbXA4ID4+IDQpICYgMHgwZik7Ci0JCWlmKG9mZnNldCA8PSAweDBGKXsKKwkJaWYob2Zmc2V0IDwgRUZVU0VfTUFYX1NFQ1RJT04pCisJCXsKIAkJCXdyZW4gPSAoKnJ0ZW1wOCAmIDB4MGYpOwotCQkJZm9yKGk9MDsgaTw0OyBpKyspewotCQkJCWlmKCEod3JlbiAmIDB4MDEpKXsKKwkJCVJUX1RSQUNFKENPTVBfRVBST00sICJPZmZzZXQtJWQgV29yZGVuPSV4XG4iLCBvZmZzZXQsIHdyZW4pOworCisJCQlmb3IoaSA9IDA7IGkgPCBFRlVTRV9NQVhfV09SRF9VTklUOyBpKyspCisJCQl7CisJCQkJaWYoISh3cmVuICYgMHgwMSkpCisJCQkJeworCQkJCQlSVF9UUkFDRShDT01QX0VQUk9NLCAiQWRkcj0lZFxuIiwgZUZ1c2VfQWRkcik7CiAjaWYgKEVGVVNFX1JFQURfU1dJVENIID09IDEpCiAJCQkJCVJlYWRFRnVzZUJ5dGUoZGV2LCBlRnVzZV9BZGRyLCBydGVtcDgpOwllRnVzZV9BZGRyKys7CiAjZWxzZQogCQkJCQlydGVtcDhbMF0gPSBFRlVTRV9SZWFkMUJ5dGUoZGV2LCBlRnVzZV9BZGRyKTsJZUZ1c2VfQWRkcisrOwogI2VuZGlmCisJCQkJCWVmdXNlX3V0aWxpemVkKys7CiAJCQkJCWVGdXNlV29yZFtvZmZzZXRdW2ldID0gKCpydGVtcDggJiAweGZmKTsKLQkJCQkJaWYoZUZ1c2VfQWRkciA+PSA1MTIpIGJyZWFrOworCQkJCQlpZihlRnVzZV9BZGRyID49IEVGVVNFX1JFQUxfQ09OVEVOVF9MRU4pCisJCQkJCQlicmVhazsKKworCQkJCQlSVF9UUkFDRShDT01QX0VQUk9NLCAiQWRkcj0lZFxuIiwgZUZ1c2VfQWRkcik7CiAjaWYgKEVGVVNFX1JFQURfU1dJVENIID09IDEpCiAJCQkJCVJlYWRFRnVzZUJ5dGUoZGV2LCBlRnVzZV9BZGRyLCBydGVtcDgpOwllRnVzZV9BZGRyKys7CiAjZWxzZQogCQkJCQlydGVtcDhbMF0gPSBFRlVTRV9SZWFkMUJ5dGUoZGV2LCBlRnVzZV9BZGRyKTsJZUZ1c2VfQWRkcisrOwogI2VuZGlmCisJCQkJCWVmdXNlX3V0aWxpemVkKys7CiAJCQkJCWVGdXNlV29yZFtvZmZzZXRdW2ldIHw9ICgoKHUxNikqcnRlbXA4IDw8IDgpICYgMHhmZjAwKTsKLQkJCQkJaWYoZUZ1c2VfQWRkciA+PSA1MTIpIGJyZWFrOworCQkJCQlpZihlRnVzZV9BZGRyID49IEVGVVNFX1JFQUxfQ09OVEVOVF9MRU4pCisJCQkJCQlicmVhazsKIAkJCQl9CiAJCQkJd3JlbiA+Pj0gMTsKIAkJCX0KIAkJfQorCisJCVJUX1RSQUNFKENPTVBfRVBST00sICJBZGRyPSVkXG4iLCBlRnVzZV9BZGRyKTsKICNpZiAoRUZVU0VfUkVBRF9TV0lUQ0ggPT0gMSkKIAkJUmVhZEVGdXNlQnl0ZShkZXYsIGVGdXNlX0FkZHIsIHJ0ZW1wOCk7CiAjZWxzZQogCQlydGVtcDhbMF0gPSBFRlVTRV9SZWFkMUJ5dGUoZGV2LCBlRnVzZV9BZGRyKTsJZUZ1c2VfQWRkcisrOwogI2VuZGlmCi0JCWlmKCpydGVtcDggIT0gMHhGRiAmJiAoZUZ1c2VfQWRkciA8IDUxMikpCWVGdXNlX0FkZHIrKzsKKwkJaWYoKnJ0ZW1wOCAhPSAweEZGICYmIChlRnVzZV9BZGRyIDwgNTEyKSkKKwkJeworCQkJZWZ1c2VfdXRpbGl6ZWQrKzsKKwkJCWVGdXNlX0FkZHIrKzsKKwkJfQogCX0KIAotCWZvcihpPTA7IGk8MTY7IGkrKyl7Ci0JCWZvcihqPTA7IGo8NDsgaisrKXsKKwlmb3IoaT0wOyBpPEVGVVNFX01BWF9TRUNUSU9OOyBpKyspCisJeworCQlmb3Ioaj0wOyBqPEVGVVNFX01BWF9XT1JEX1VOSVQ7IGorKykKKwkJewogCQkJZWZ1c2VUYmxbKGkqOCkrKGoqMildPShlRnVzZVdvcmRbaV1bal0gJiAweGZmKTsKIAkJCWVmdXNlVGJsWyhpKjgpKygoaioyKSsxKV09KChlRnVzZVdvcmRbaV1bal0gPj4gOCkgJiAweGZmKTsKIAkJfQogCX0KIAlmb3IoaT0wOyBpPF9zaXplX2J5dGU7IGkrKykKIAkJcGJ1ZltpXSA9IGVmdXNlVGJsW19vZmZzZXQraV07Ci19Ci0jZW5kaWYJLy8gI2lmIChFRlVTRV9GT1JfOTJTVSA9PSAxKQogCisJZWZ1c2VfdXNhZ2UgPSAodTgpKChlZnVzZV91dGlsaXplZCoxMDApL0VGVVNFX1JFQUxfQ09OVEVOVF9MRU4pOworCXByaXYtPkVmdXNlVXNlZEJ5dGVzID0gZWZ1c2VfdXRpbGl6ZWQ7CisJcHJpdi0+RWZ1c2VVc2VkUGVyY2VudGFnZSA9ICh1OCllZnVzZV91c2FnZTsKK30KKyNlbmRpZgorCitleHRlcm4JYm9vbAorRUZVU0VfU2hhZG93VXBkYXRlQ2hrKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCit7CisJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXU4CVNlY3Rpb25JZHgsIGksIEJhc2U7CisJdTE2CVdvcmRzTmVlZCA9IDAsIEhkck51bSA9IDAsIFRvdGFsQnl0ZXMgPSAwLCBFZnVzZVVzZWQgPSAwOworCWJvb2wJYldvcmRDaGFuZ2VkLCBiUmVzdWx0ID0gdHJ1ZTsKKworCWZvciAoU2VjdGlvbklkeCA9IDA7IFNlY3Rpb25JZHggPCAxNjsgU2VjdGlvbklkeCsrKQorCXsKKwkJQmFzZSA9IFNlY3Rpb25JZHggKiA4OworCQliV29yZENoYW5nZWQgPSBmYWxzZTsKKworCQlmb3IgKGkgPSAwOyBpIDwgODsgaT1pKzIpCisJCXsKKwkJCWlmKChwcml2LT5FZnVzZU1hcFtFRlVTRV9JTklUX01BUF1bQmFzZStpXSAhPQorCQkJCXByaXYtPkVmdXNlTWFwW0VGVVNFX01PRElGWV9NQVBdW0Jhc2UraV0pIHx8CisJCQkJKHByaXYtPkVmdXNlTWFwW0VGVVNFX0lOSVRfTUFQXVtCYXNlK2krMV0gIT0KKwkJCQlwcml2LT5FZnVzZU1hcFtFRlVTRV9NT0RJRllfTUFQXVtCYXNlK2krMV0pKQorCQkJeworCQkJCVdvcmRzTmVlZCsrOworCQkJCWJXb3JkQ2hhbmdlZCA9IHRydWU7CisJCQl9CisJCX0KKworCQlpZiggYldvcmRDaGFuZ2VkPT10cnVlICkKKwkJCUhkck51bSsrOworCX0KKworCVRvdGFsQnl0ZXMgPSBIZHJOdW0gKyBXb3Jkc05lZWQqMjsKKwlFZnVzZVVzZWQgPSBwcml2LT5FZnVzZVVzZWRCeXRlczsKKworCWlmKCAoVG90YWxCeXRlcyArIEVmdXNlVXNlZCkgPj0gKEVGVVNFX01BWF9TSVpFLUVGVVNFX09PQl9QUk9URUNUX0JZVEVTKSkKKwkJYlJlc3VsdCA9IHRydWU7CisKKwlSVF9UUkFDRShDT01QX0VQUk9NLCAiRUZVU0VfU2hhZG93VXBkYXRlQ2hrKCk6IFRvdGFsQnl0ZXMoJXgpLCBIZHJOdW0oJXgpLCBXb3Jkc05lZWQoJXgpLCBFZnVzZVVzZWQoJWQpXG4iLAorCQlUb3RhbEJ5dGVzLCBIZHJOdW0sIFdvcmRzTmVlZCwgRWZ1c2VVc2VkKTsKKworCXJldHVybiBiUmVzdWx0OworfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBGdW5jdGlvbjoJRUZVU0VfU2hhZG93UmVhZApAQCAtNjI0LDggKzY1Nyw2IEBACiBleHRlcm4gdm9pZAogRUZVU0VfU2hhZG93UmVhZCgJc3RydWN0IG5ldF9kZXZpY2UqCWRldiwJdTggVHlwZSwgdTE2IE9mZnNldCwgdTMyICpWYWx1ZSkKIHsKLQkvL0hBTF9EQVRBX1RZUEUJKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKHBBZGFwdGVyKTsKLQogCWlmIChUeXBlID09IDEpCiAJCWVmdXNlX1NoYWRvd1JlYWQxQnl0ZShkZXYsIE9mZnNldCwgKHU4ICopVmFsdWUpOwogCWVsc2UgaWYgKFR5cGUgPT0gMikKQEAgLTYzMyw4ICs2NjQsNyBAQAogCWVsc2UgaWYgKFR5cGUgPT0gNCkKIAkJZWZ1c2VfU2hhZG93UmVhZDRCeXRlKGRldiwgT2Zmc2V0LCAodTMyICopVmFsdWUpOwogCi19CS8vIEVGVVNFX1NoYWRvd1JlYWQKLQorfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBGdW5jdGlvbjoJRUZVU0VfU2hhZG93V3JpdGUKQEAgLTY1NSw4ICs2ODUsNiBAQAogZXh0ZXJuCXZvaWQKIEVGVVNFX1NoYWRvd1dyaXRlKAlzdHJ1Y3QgbmV0X2RldmljZSoJZGV2LAl1OCBUeXBlLCB1MTYgT2Zmc2V0LHUzMglWYWx1ZSkKIHsKLQkvL0hBTF9EQVRBX1RZUEUJKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKHBBZGFwdGVyKTsKLQogCWlmIChPZmZzZXQgPj0gMHgxOCAmJiBPZmZzZXQgPD0gMHgxRikKIAkJcmV0dXJuOwogCkBAIC02NjcsOCArNjk1LDcgQEAKIAllbHNlIGlmIChUeXBlID09IDQpCiAJCWVmdXNlX1NoYWRvd1dyaXRlNEJ5dGUoZGV2LCBPZmZzZXQsICh1MzIpVmFsdWUpOwogCi19CS8vIEVGVVNFX1NoYWRvd1dyaXRlCi0KK30KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRnVuY3Rpb246CUVGVVNFX1NoYWRvd1VwZGF0ZQpAQCAtNjg2LDE1ICs3MTMsMjUgQEAKICAqIDExLzEyLzIwMDggCU1IQwkJQ3JlYXRlIFZlcnNpb24gMC4KICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1leHRlcm4Jdm9pZAorZXh0ZXJuIGJvb2wKIEVGVVNFX1NoYWRvd1VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQogewotCS8vSEFMX0RBVEFfVFlQRQkqcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEocEFkYXB0ZXIpOwogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAl1MTYJCQlpLCBvZmZzZXQsIGJhc2UgPSAwOwogCXU4CQkJd29yZF9lbiA9IDB4MEY7Ci0JYm9vbCBmaXJzdF9wZyA9IGZhbHNlOwotCS8vIEZvciBFZnVzZSB3cml0ZSBhY3Rpb24sIHdlIG11c3QgZW5hYmxlIExETzIuNVYgYW5kIDQwTUhaIGNsay4KKwlib29sCQkJZmlyc3RfcGcgPSBmYWxzZTsKKworCVJUX1RSQUNFKENPTVBfRVBST00sICItLS0+RUZVU0VfU2hhZG93VXBkYXRlKClcbiIpOworCisJaWYoIUVGVVNFX1NoYWRvd1VwZGF0ZUNoayhkZXYpKQorCXsKKwkJZWZ1c2VfUmVhZEFsbE1hcChkZXYsICZwcml2LT5FZnVzZU1hcFtFRlVTRV9JTklUX01BUF1bMF0pOworCQltZW1jcHkoKHZvaWQgKikmcHJpdi0+RWZ1c2VNYXBbRUZVU0VfTU9ESUZZX01BUF1bMF0sCisJCQkodm9pZCAqKSZwcml2LT5FZnVzZU1hcFtFRlVTRV9JTklUX01BUF1bMF0sIEhXU0VUX01BWF9TSVpFXzkyUyk7CisKKwkJUlRfVFJBQ0UoQ09NUF9FUFJPTSwgIjwtLS1FRlVTRV9TaGFkb3dVcGRhdGUoKTogRWZ1c2Ugb3V0IG9mIGNhcGFjaXR5ISFcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQogCWVmdXNlX1Bvd2VyU3dpdGNoKGRldiwgVFJVRSk7CiAKIAkvLwpAQCAtNzEyLDE2ICs3NDksMTIgQEAKIAkJLy8KIAkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKIAkJewotCQkJaWYgKG9mZnNldCA9PSAwICYmIHByaXYtPkVmdXNlTWFwW0VGVVNFX0lOSVRfTUFQXVtiYXNlK2ldID09IDB4RkYpCi0JCQl7Ci0JCQkJZmlyc3RfcGcgPSBUUlVFOwotCQkJfQotCi0JCQkvLyAyMDA4LzEyLzExIE1IIEhXIGF1dG9sb2FkIGZhaWwgd29ya2Fyb3VuZCBmb3IgQS9CQ1VULgotCiAJCQlpZiAoZmlyc3RfcGcgPT0gVFJVRSkKIAkJCXsKIAkJCQl3b3JkX2VuICY9IH4oMTw8KGkvMikpOworCQkJCVJUX1RSQUNFKENPTVBfRVBST00sIlNlY3Rpb24oJXgpIEFkZHJbJXhdICV4IHVwZGF0ZSB0byAleCwgV29yZF9Fbj0lMDJ4XG4iLAorCQkJCW9mZnNldCwgYmFzZStpLCBwcml2LT5FZnVzZU1hcFtFRlVTRV9JTklUX01BUF1bYmFzZStpXSwKKwkJCQlwcml2LT5FZnVzZU1hcFtFRlVTRV9NT0RJRllfTUFQXVtiYXNlK2ldLHdvcmRfZW4pOwogCQkJCXByaXYtPkVmdXNlTWFwW0VGVVNFX0lOSVRfTUFQXVtiYXNlK2ldID0KIAkJCQlwcml2LT5FZnVzZU1hcFtFRlVTRV9NT0RJRllfTUFQXVtiYXNlK2ldOwogCQkJfWVsc2UKQEAgLTczMCw4ICs3NjMsOSBAQAogCQkJCXByaXYtPkVmdXNlTWFwW0VGVVNFX01PRElGWV9NQVBdW2Jhc2UraV0pCiAJCQl7CiAJCQkJd29yZF9lbiAmPSB+KEVGVVNFX0JJVChpLzIpKTsKLQkJCQkvL1JUX1RSQUNFKENPTVBfRUZVU0UsICAiT2Zmc2V0PSVkIEFkZHIleCAleCA9PT4gJXggV29yZF9Fbj0lMDJ4XG4iLAotCQkJCS8vb2Zmc2V0LCBiYXNlK2ksIHByaXYtPkVmdXNlTWFwWzBdW2Jhc2UraV0sIHByaXYtPkVmdXNlTWFwWzFdW2Jhc2UraV0sd29yZF9lbik7CisJCQkJUlRfVFJBQ0UoQ09NUF9FUFJPTSwgIlNlY3Rpb24oJXgpIEFkZHJbJXhdICV4IHVwZGF0ZSB0byAleCwgV29yZF9Fbj0lMDJ4XG4iLAorCQkJCW9mZnNldCwgYmFzZStpLCBwcml2LT5FZnVzZU1hcFswXVtiYXNlK2ldLAorCQkJCXByaXYtPkVmdXNlTWFwWzFdW2Jhc2UraV0sd29yZF9lbik7CiAKIAkJCQkvLyBVcGRhdGUgaW5pdCB0YWJsZSEhIQogCQkJCXByaXYtPkVmdXNlTWFwW0VGVVNFX0lOSVRfTUFQXVtiYXNlK2ldID0KQEAgLTc0NywyNSArNzgxLDI3IEBACiAJCXsKIAkJCXU4CXRtcGRhdGFbOF07CiAKLQkJCS8vRklYTFpNCi0JCQltZW1jcHkodG1wZGF0YSwgJihwcml2LT5FZnVzZU1hcFtFRlVTRV9NT0RJRllfTUFQXVtiYXNlXSksIDgpOwotCQkJLy9SVF9QUklOVF9EQVRBKENPTVBfSU5JVCwgREJHX0xPVUQsICgiVS1FRlVTRVxuIiksIHRtcGRhdGEsIDgpOwotCQkJZWZ1c2VfUGdQYWNrZXRXcml0ZShkZXYsKHU4KW9mZnNldCx3b3JkX2VuLHRtcGRhdGEpOworCQkJbWVtY3B5KCh2b2lkICopdG1wZGF0YSwgKHZvaWQgKikmKHByaXYtPkVmdXNlTWFwW0VGVVNFX01PRElGWV9NQVBdW2Jhc2VdKSwgOCk7CisJCQlSVF9UUkFDRShDT01QX0lOSVQsICJVLUVGVVNFXG4iKTsKKworCQkJaWYoIWVmdXNlX1BnUGFja2V0V3JpdGUoZGV2LCh1OClvZmZzZXQsd29yZF9lbix0bXBkYXRhKSkKKwkJCXsKKwkJCQlSVF9UUkFDRShDT01QX0VQUk9NLCJFRlVTRV9TaGFkb3dVcGRhdGUoKTogUEcgc2VjdGlvbigleCkgZmFpbCEhXG4iLCBvZmZzZXQpOworCQkJCWJyZWFrOworCQkJfQogCQl9CiAKIAl9Ci0JLy8gMjAwOC8xMi8wMSBNSCBGb3IgRWZ1c2UgSFcgbG9hZCBidWcgd29ya2Fyb3VuZiBtZXRob2QhISEhCi0JLy8gV2Ugd2lsbCBmb3JjZSB3cml0ZSAweDEwRUMgaW50byBhZGRyZXNzIDEwJjExIGFmdGVyIGFsbCBFZnVzZSBjb250ZW50LgotCS8vCi0KLQogCS8vIEZvciB3YXJtIHJlYm9vdCwgd2UgbXVzdCByZXN1bWUgRWZ1c2UgY2xvY2sgdG8gNTAwSy4KKwogCWVmdXNlX1Bvd2VyU3dpdGNoKGRldiwgRkFMU0UpOwotCS8vIDIwMDgvMTIvMDEgTUggV2UgdXBkYXRlIHNoYWRvdyBjb250ZW50IGFnYWluISEhIQotCUVGVVNFX1NoYWRvd01hcFVwZGF0ZShkZXYpOwogCi19CS8vIEVGVVNFX1NoYWRvd1VwZGF0ZQorCWVmdXNlX1JlYWRBbGxNYXAoZGV2LCAmcHJpdi0+RWZ1c2VNYXBbRUZVU0VfSU5JVF9NQVBdWzBdKTsKKwltZW1jcHkoKHZvaWQgKikmcHJpdi0+RWZ1c2VNYXBbRUZVU0VfTU9ESUZZX01BUF1bMF0sCisJCSh2b2lkICopJnByaXYtPkVmdXNlTWFwW0VGVVNFX0lOSVRfTUFQXVswXSwgSFdTRVRfTUFYX1NJWkVfOTJTKTsKIAorCXJldHVybiB0cnVlOworfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBGdW5jdGlvbjoJRUZVU0VfU2hhZG93TWFwVXBkYXRlCkBAIC03OTIsMTIgKzgyOCwxMCBAQAogCX1lbHNlewogCQllZnVzZV9SZWFkQWxsTWFwKGRldiwgJnByaXYtPkVmdXNlTWFwW0VGVVNFX0lOSVRfTUFQXVswXSk7CiAJfQotCS8vUGxhdGZvcm1Nb3ZlTWVtb3J5KCZwcml2LT5FZnVzZU1hcFtFRlVTRV9NT0RJRllfTUFQXVswXSwKLQkJLy8mcHJpdi0+RWZ1c2VNYXBbRUZVU0VfSU5JVF9NQVBdWzBdLCBIV1NFVF9NQVhfU0laRV85MlMpOy8vRklYTFpNCi0JbWVtY3B5KCZwcml2LT5FZnVzZU1hcFtFRlVTRV9NT0RJRllfTUFQXVswXSwKLQkJJnByaXYtPkVmdXNlTWFwW0VGVVNFX0lOSVRfTUFQXVswXSwgSFdTRVRfTUFYX1NJWkVfOTJTKTsKKwltZW1jcHkoKHZvaWQgKikmcHJpdi0+RWZ1c2VNYXBbRUZVU0VfTU9ESUZZX01BUF1bMF0sCisJCSh2b2lkICopJnByaXYtPkVmdXNlTWFwW0VGVVNFX0lOSVRfTUFQXVswXSwgSFdTRVRfTUFYX1NJWkVfOTJTKTsKIAotfQkvLyBFRlVTRV9TaGFkb3dNYXBVcGRhdGUKK30KIAogZXh0ZXJuCXZvaWQKIEVGVVNFX0ZvcmNlV3JpdGVWZW5kb3JJZCggc3RydWN0IG5ldF9kZXZpY2UqIGRldikKQEAgLTgxMCw3ICs4NDQsNyBAQAogCiAJZWZ1c2VfUG93ZXJTd2l0Y2goZGV2LCBGQUxTRSk7CiAKLX0JLy8gRUZVU0VfRm9yY2VXcml0ZVZlbmRvcklkCit9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEZ1bmN0aW9uOgllZnVzZV9TaGFkb3dSZWFkMUJ5dGUKQEAgLTgzNyw3ICs4NzEsNyBAQAogCiAJKlZhbHVlID0gcHJpdi0+RWZ1c2VNYXBbRUZVU0VfTU9ESUZZX01BUF1bT2Zmc2V0XTsKIAotfQkvLyBFRlVTRV9TaGFkb3dSZWFkMUJ5dGUKK30KIAogLy8tLS0tLS0tLS0tLS0tLS1SZWFkIFR3byBCeXRlcwogc3RhdGljCXZvaWQKQEAgLTg0OCw3ICs4ODIsNyBAQAogCSpWYWx1ZSA9IHByaXYtPkVmdXNlTWFwW0VGVVNFX01PRElGWV9NQVBdW09mZnNldF07CiAJKlZhbHVlIHw9IHByaXYtPkVmdXNlTWFwW0VGVVNFX01PRElGWV9NQVBdW09mZnNldCsxXTw8ODsKIAotfQkvLyBFRlVTRV9TaGFkb3dSZWFkMkJ5dGUKK30KIAogLy8tLS0tLS0tLS0tLS0tLS1SZWFkIEZvdXIgQnl0ZXMKIHN0YXRpYwl2b2lkCkBAIC04NjEsNyArODk1LDcgQEAKIAkqVmFsdWUgfD0gcHJpdi0+RWZ1c2VNYXBbRUZVU0VfTU9ESUZZX01BUF1bT2Zmc2V0KzJdPDwxNjsKIAkqVmFsdWUgfD0gcHJpdi0+RWZ1c2VNYXBbRUZVU0VfTU9ESUZZX01BUF1bT2Zmc2V0KzNdPDwyNDsKIAotfQkvLyBlZnVzZV9TaGFkb3dSZWFkNEJ5dGUKK30KIAogCiAKQEAgLTg5MCw3ICs5MjQsNyBAQAogCiAJcHJpdi0+RWZ1c2VNYXBbRUZVU0VfTU9ESUZZX01BUF1bT2Zmc2V0XSA9IFZhbHVlOwogCi19CS8vIGVmdXNlX1NoYWRvd1dyaXRlMUJ5dGUKK30KIAogLy8tLS0tLS0tLS0tLS0tLS1Xcml0ZSBUd28gQnl0ZXMKIHN0YXRpYwl2b2lkCkBAIC05MDEsNyArOTM1LDcgQEAKIAlwcml2LT5FZnVzZU1hcFtFRlVTRV9NT0RJRllfTUFQXVtPZmZzZXRdID0gVmFsdWUmMHgwMEZGOwogCXByaXYtPkVmdXNlTWFwW0VGVVNFX01PRElGWV9NQVBdW09mZnNldCsxXSA9IFZhbHVlPj44OwogCi19CS8vIGVmdXNlX1NoYWRvd1dyaXRlMUJ5dGUKK30KIAogLy8tLS0tLS0tLS0tLS0tLS1Xcml0ZSBGb3VyIEJ5dGVzCiBzdGF0aWMJdm9pZApAQCAtOTE0LDEwICs5NDgsOCBAQAogCXByaXYtPkVmdXNlTWFwW0VGVVNFX01PRElGWV9NQVBdW09mZnNldCsyXSA9ICh1OCkoKFZhbHVlPj4xNikmMHgwMEZGKTsKIAlwcml2LT5FZnVzZU1hcFtFRlVTRV9NT0RJRllfTUFQXVtPZmZzZXQrM10gPSAodTgpKChWYWx1ZT4+MjQpJjB4RkYpOwogCi19CS8vIGVmdXNlX1NoYWRvd1dyaXRlMUJ5dGUKK30KIAotCi0vKiAgMTEvMTYvMjAwOCBNSCBSZWFkIG9uZSBieXRlIGZyb20gcmVhbCBFZnVzZS4gKi8KIHN0YXRpYwl1OAogZWZ1c2VfT25lQnl0ZVJlYWQoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgdTE2IGFkZHIsdTggKmRhdGEpCiB7CkBAIC05NDcsNyArOTc5LDcgQEAKIAkJYlJlc3VsdCA9IEZBTFNFOwogCX0KIAlyZXR1cm4gYlJlc3VsdDsKLX0JLy8gZWZ1c2VfT25lQnl0ZVJlYWQKK30KIAogLyogIDExLzE2LzIwMDggTUggV3JpdGUgb25lIGJ5dGUgdG8gcmVhbGQgRWZ1c2UuICovCiBzdGF0aWMJdTgKQEAgLTk1NiwxMCArOTg4LDYgQEAKIAl1OCB0bXBpZHggPSAwOwogCXU4IGJSZXN1bHQ7CiAKLQkvL1JUX1RSQUNFKENPTVBfRUZVU0UsICJBZGRyID0gJXggRGF0YT0leFxuIiwgYWRkciwgZGF0YSk7Ci0KLQkvL3JldHVybgkwOwotCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS1lLWZ1c2UgcmVnIGN0cmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJLy9hZGRyZXNzCiAJd3JpdGVfbmljX2J5dGUoZGV2LCBFRlVTRV9DVFJMKzEsICh1OCkoYWRkciYweGZmKSk7CkBAIC05ODMsOCArMTAxMSw3IEBACiAJfQogCiAJcmV0dXJuIGJSZXN1bHQ7Ci19CS8vIGVmdXNlX09uZUJ5dGVXcml0ZQotCit9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEZ1bmN0aW9uOgllZnVzZV9SZWFkQWxsTWFwCkBAIC0xMDA1LDE5ICsxMDMyLDEzIEBACiBzdGF0aWMJdm9pZAogZWZ1c2VfUmVhZEFsbE1hcChzdHJ1Y3QgbmV0X2RldmljZSoJZGV2LCB1OAkqRWZ1c2UpCiB7Ci0JLy91OCAJcGdfZGF0YVs4XTsKLQkvL3U4IAlvZmZzZXQgPSAwOwotCS8vdTggCXRtcGlkeDsKLQkvL3N0YXRpYwl1OAlpbmRleCA9IDA7Ci0KIAkvLwogCS8vIFdlIG11c3QgZW5hYmxlIGNsb2NrIGFuZCBMRE8gMi41ViBvdGhlcndpc2UsIHJlYWQgYWxsIG1hcCB3aWxsIGJlIGZhaWwhISEhCiAJLy8KIAllZnVzZV9Qb3dlclN3aXRjaChkZXYsIFRSVUUpOwogCVJlYWRFRnVzZShkZXYsIDAsIDEyOCwgRWZ1c2UpOwogCWVmdXNlX1Bvd2VyU3dpdGNoKGRldiwgRkFMU0UpOwotfQkvLyBlZnVzZV9SZWFkQWxsTWFwCi0KK30KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRnVuY3Rpb246CWVmdXNlX1dyaXRlQWxsTWFwCkBAIC0xMDU3LDE4ICsxMDc4LDExIEBACiAJCQkvLyAweDE4LTFmIFJlc2VydmUgPjB4NTAgUmVzZXJ2ZSBmb3IgdHggcG93ZXIKIAkJCWlmIChvZmZzZXQgPT0gMy8qIHx8IG9mZnNldCA+IDkqLykKIAkJCQljb250aW51ZTsvL3dvcmRfZW4gPSAweDBGOwotCQkJLy9lbHNlIGlmIChvZmZzZXQgPT0gOSkJLy8gMHg0Yy00ZiBSZXNlcnZlCi0JCQkJLy93b3JkX2VuID0gMHgwQzsKIAkJCWVsc2UKIAkJCQl3b3JkX2VuID0gMHgwMDsKIAkJfQotCQkvL1JUX1RSQUNFKENPTVBfRUZVU0UsICgiQWRkcj0lZCBzaXplPSVkIFdvcmRfRW49JTAyeFxuIiwgb2Zmc2V0LCBlZXByb21fc2l6ZSwgd29yZF9lbikpOwogCi0JCS8vbWVtY3B5KHRtcGRhdGEsZWVwcm9tKyhvZmZzZXQqUEdQS1RfREFUQV9TSVpFKSw4KTsKIAkJbWVtY3B5KHRtcGRhdGEsIChlZXByb20rKG9mZnNldCpQR1BLVF9EQVRBX1NJWkUpKSwgOCk7Ci0KLQkJLy9SVF9QUklOVF9EQVRBKENPTVBfSU5JVCwgREJHX0xPVUQsICgiRUZVU0VcdCIpLCB0bXBkYXRhLCA4KTsKLQogCQllZnVzZV9QZ1BhY2tldFdyaXRlKGRldixvZmZzZXQsd29yZF9lbix0bXBkYXRhKTsKIAogCkBAIC0xMDc3LDcgKzEwOTEsNyBAQAogCS8vIEZvciB3YXJtIHJlYm9vdCwgd2UgbXVzdCByZXN1bWUgRWZ1c2UgY2xvY2sgdG8gNTAwSy4KIAllZnVzZV9Qb3dlclN3aXRjaChkZXYsIEZBTFNFKTsKIAotfQkvLyBlZnVzZV9Xcml0ZUFsbE1hcAorfQogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTExMTQsMTUgKzExMjgsOSBAQAogCWlmKGRhdGE9PU5VTEwpCXJldHVybiBGQUxTRTsKIAlpZihvZmZzZXQ+MTUpCQlyZXR1cm4gRkFMU0U7CiAKLQkvL0ZJWExaTQotCS8vUGxhdGZvcm1GaWxsTWVtb3J5KChQVk9JRClkYXRhLCBzaXplb2YodTgpKlBHUEtUX0RBVEFfU0laRSwgMHhmZik7Ci0JLy9QbGF0Zm9ybUZpbGxNZW1vcnkoKFBWT0lEKXRtcGRhdGEsIHNpemVvZih1OCkqUEdQS1RfREFUQV9TSVpFLCAweGZmKTsKIAltZW1zZXQoZGF0YSwgMHhmZiwgc2l6ZW9mKHU4KSpQR1BLVF9EQVRBX1NJWkUpOwogCW1lbXNldCh0bXBkYXRhLCAweGZmLCBzaXplb2YodTgpKlBHUEtUX0RBVEFfU0laRSk7CiAKLQkvL1JUX1BSSU5UX0RBVEEoQ09NUF9FRlVTRSwgREJHX0xPVUQsICgiZWZ1c2VfUGdQYWNrZXRSZWFkLTFcbiIpLCBkYXRhLCA4KTsKLQotCS8vZWZ1c2VfcmVnX2N0cmwocEFkYXB0ZXIsVFJVRSk7Ly9wb3dlciBvbgogCXdoaWxlKGJDb250aW51YWwgJiYgKGVmdXNlX2FkZHIgIDwgRUZVU0VfTUFYX1NJWkUpICkKIAl7CiAJCS8vLS0tLS0tLSAgSGVhZGVyIFJlYWQgLS0tLS0tLS0tLS0tLQpAQCAtMTE2OSw5ICsxMTc3LDYgQEAKIAkJfQogCiAJfQotCS8vZWZ1c2VfcmVnX2N0cmwocEFkYXB0ZXIsRkFMU0UpOy8vcG93ZXIgb2ZmCi0KLQkvL1JUX1BSSU5UX0RBVEEoQ09NUF9FRlVTRSwgREJHX0xPVUQsICgiZWZ1c2VfUGdQYWNrZXRSZWFkLTJcbiIpLCBkYXRhLCA4KTsKIAogCWlmKAkoZGF0YVswXT09MHhmZikgJiYoZGF0YVsxXT09MHhmZikgJiYgKGRhdGFbMl09PTB4ZmYpICAmJiAoZGF0YVszXT09MHhmZikgJiYKIAkJKGRhdGFbNF09PTB4ZmYpICYmKGRhdGFbNV09PTB4ZmYpICYmIChkYXRhWzZdPT0weGZmKSAgJiYgKGRhdGFbN109PTB4ZmYpKQpAQCAtMTE3OSw4ICsxMTg0LDcgQEAKIAllbHNlCiAJCXJldHVybiBUUlVFOwogCi19CS8vIGVmdXNlX1BnUGFja2V0UmVhZAotCit9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEZ1bmN0aW9uOgllZnVzZV9QZ1BhY2tldFdyaXRlCkBAIC0xMjAwLDcgKzEyMDQsNyBAQAogICogMTEvMTYvMjAwOCAJTUhDCQlSZW9yZ2FuaXplIGNvZGUgQXJjaCBhbmQgYXNzaWduIGFzIGxvY2FsIEFQSS4KICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgdTggZWZ1c2VfUGdQYWNrZXRXcml0ZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCB1OCBvZmZzZXQsIHU4IHdvcmRfZW4sdTggKmRhdGEpCitzdGF0aWMgdTMyIGVmdXNlX1BnUGFja2V0V3JpdGUoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgdTggb2Zmc2V0LCB1OCB3b3JkX2VuLHU4ICpkYXRhKQogewogCXU4IFdyaXRlU3RhdGUgPSBQR19TVEFURV9IRUFERVI7CiAKQEAgLTEyMTAsMTIgKzEyMTQsOSBAQAogCiAJdTggcGdfaGVhZGVyID0gMDsKIAotCS8vdTE2IHRtcF9hZGRyPTA7CiAJdTggdG1wX3dvcmRfY250cz0wLHRhcmdldF93b3JkX2NudHM9MDsKIAl1OCB0bXBfaGVhZGVyLG1hdGNoX3dvcmRfZW4sdG1wX3dvcmRfZW47CiAKLQkvL3U4CWVmdXNlX2Nsa19vcmksZWZ1c2VfY2xrX25ldzsKLQogCVBHUEtUX1NUUlVDVCB0YXJnZXRfcGt0OwogCVBHUEtUX1NUUlVDVCB0bXBfcGt0OwogCkBAIC0xMjQwLDcgKzEyNDEsNiBAQAogCWVmdXNlX1dvcmRFbmFibGVEYXRhUmVhZCh3b3JkX2VuLGRhdGEsdGFyZ2V0X3BrdC5kYXRhKTsKIAl0YXJnZXRfd29yZF9jbnRzID0gZWZ1c2VfQ2FsY3VsYXRlV29yZENudHModGFyZ2V0X3BrdC53b3JkX2VuKTsKIAotCS8vZWZ1c2VfcmVnX2N0cmwocEFkYXB0ZXIsVFJVRSk7Ly9wb3dlciBvbgogCXByaW50aygiRUZVU0UgUG93ZXIgT05cbiIpOwogCiAJd2hpbGUoIGJDb250aW51YWwgJiYgKGVmdXNlX2FkZHIgIDwgRUZVU0VfTUFYX1NJWkUpICkKQEAgLTEzMTIsMTQgKzEzMTIsMTIgQEAKIAkJCQkJCQliYWR3b3JkZW4gPSBlZnVzZV9Xb3JkRW5hYmxlRGF0YVdyaXRlKGRldixlZnVzZV9hZGRyKzEsIHRtcF9wa3Qud29yZF9lbiAsdGFyZ2V0X3BrdC5kYXRhKTsKIAogCQkJCQkJCS8vKioqKioqKioqKioqICBzby0yLTItQS0xICoqKioqKioqKioqKioqKioqKioKLQkJCQkJCQkvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAkJCQkJCQlpZigweDBGICE9IChiYWR3b3JkZW4mMHgwRikpCiAJCQkJCQkJewogCQkJCQkJCQl1OCByZW9yZ19vZmZzZXQgPSBvZmZzZXQ7CiAJCQkJCQkJCXU4IHJlb3JnX3dvcmRlbj1iYWR3b3JkZW47CiAJCQkJCQkJCWVmdXNlX1BnUGFja2V0V3JpdGUoZGV2LHJlb3JnX29mZnNldCxyZW9yZ193b3JkZW4sb3JpZ2luYWxkYXRhKTsKIAkJCQkJCQl9Ci0JCQkJCQkJLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIAkJCQkJCQl0bXBfd29yZF9lbiA9IDB4MEY7CiAJCQkJCQkJaWYoICAodGFyZ2V0X3BrdC53b3JkX2VuJkJJVDApXihtYXRjaF93b3JkX2VuJkJJVDApICApCkBAIC0xMzQyLDEzICsxMzQwLDEzIEBACiAJCQkJCQkJLy8qKioqKioqKioqKiogIHNvLTItMi1BLTIgKioqKioqKioqKioqKioqKioqKgogCQkJCQkJCWlmKCh0bXBfd29yZF9lbiYweDBGKSE9MHgwRil7CiAJCQkJCQkJCS8vcmVvcmdhbml6ZSBvdGhlciBwZyBwYWNrZXQKLQkJCQkJCQkJLy9lZnVzZV9hZGRyID0gZWZ1c2VfYWRkciArICgyKnRtcF93b3JkX2NudHMpICsxOy8vbmV4dCBwZyBwYWNrZXQgYWRkcgotCQkJCQkJCQllZnVzZV9hZGRyID0gZWZ1c2VfR2V0Q3VycmVudFNpemUoZGV2KTsKLQkJCQkJCQkJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQkJCQkJCQkJdGFyZ2V0X3BrdC5vZmZzZXQgPSBvZmZzZXQ7CisKKwkJCQkJCQllZnVzZV9hZGRyID0gZWZ1c2VfR2V0Q3VycmVudFNpemUoZGV2KTsKKworCQkJCQkJCXRhcmdldF9wa3Qub2Zmc2V0ID0gb2Zmc2V0OwogCQkJCQkJCQl0YXJnZXRfcGt0LndvcmRfZW49IHRtcF93b3JkX2VuOwotCQkJCQkJCQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PQotCQkJCQkJCX1lbHNleworCisJCQkJCQl9ZWxzZXsKIAkJCQkJCQkJYkNvbnRpbnVhbCA9IEZBTFNFOwogCQkJCQkJCX0KIAkJCQkJCQkjaWYgKEVGVVNFX0VSUk9FX0hBTkRMRSA9PSAxKQpAQCAtMTM2MywxMCArMTM2MSw4IEBACiAJCQkJCQllbHNley8vKioqKioqKioqKioqICBzby0yLTItQiAqKioqKioqKioqKioqKioqKioqCiAJCQkJCQkJLy9yZW9yZ2FuaXplIG90aGVyIHBnIHBhY2tldAogCQkJCQkJCWVmdXNlX2FkZHIgPSBlZnVzZV9hZGRyICsgKDIqdG1wX3dvcmRfY250cykgKzE7Ly9uZXh0IHBnIHBhY2tldCBhZGRyCi0JCQkJCQkJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAkJCQkJCQl0YXJnZXRfcGt0Lm9mZnNldCA9IG9mZnNldDsKIAkJCQkJCQl0YXJnZXRfcGt0LndvcmRfZW49IHRhcmdldF9wa3Qud29yZF9lbjsKLQkJCQkJCQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PQogCQkJCQkJCSNpZiAoRUZVU0VfRVJST0VfSEFORExFID09IDEpCiAJCQkJCQkJV3JpdGVTdGF0ZT1QR19TVEFURV9IRUFERVI7CiAJCQkJCQkJI2VuZGlmCkBAIC0xNDA1LDEzICsxNDAxLDEwIEBACiAKIAkJCQkJLy8qKioqKioqKioqKiogIHMxLTItQSA6Y292ZXIgdGhlIGV4aXN0IGRhdGEgKioqKioqKioqKioqKioqKioqKgogCQkJCQltZW1zZXQob3JpZ2luYWxkYXRhLDB4ZmYsc2l6ZW9mKHU4KSo4KTsKLQkJCQkJLy9QbGF0Zm9ybUZpbGxNZW1vcnkoKFBWT0lEKW9yaWdpbmFsZGF0YSwgc2l6ZW9mKHU4KSo4LCAweGZmKTsKIAogCQkJCQlpZihlZnVzZV9QZ1BhY2tldFJlYWQoIGRldiwgdG1wX3BrdC5vZmZzZXQsb3JpZ2luYWxkYXRhKSkKIAkJCQkJewkvL2NoZWNrIGlmIGRhdGEgZXhpc3QKLQkJCQkJCS8vZWZ1c2VfcmVnX2N0cmwocEFkYXB0ZXIsVFJVRSk7Ly9wb3dlciBvbgogCQkJCQkJYmFkd29yZGVuID0gZWZ1c2VfV29yZEVuYWJsZURhdGFXcml0ZShkZXYsZWZ1c2VfYWRkcisxLHRtcF9wa3Qud29yZF9lbixvcmlnaW5hbGRhdGEpOwotCQkJCQkJLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAJCQkJCQlpZigweDBGICE9IChiYWR3b3JkZW4mMHgwRikpCiAJCQkJCQl7CiAJCQkJCQkJdTggcmVvcmdfb2Zmc2V0ID0gdG1wX3BrdC5vZmZzZXQ7CkBAIC0xNDE5LDcgKzE0MTIsNiBAQAogCQkJCQkJCWVmdXNlX1BnUGFja2V0V3JpdGUoZGV2LHJlb3JnX29mZnNldCxyZW9yZ193b3JkZW4sb3JpZ2luYWxkYXRhKTsKIAkJCQkJCQllZnVzZV9hZGRyID0gZWZ1c2VfR2V0Q3VycmVudFNpemUoZGV2KTsKIAkJCQkJCX0KLQkJCQkJCS8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCQkJCQkJZWxzZXsKIAkJCQkJCQllZnVzZV9hZGRyID0gZWZ1c2VfYWRkciArICh0bXBfd29yZF9jbnRzKjIpICsxOyAvL05leHQgcGdfcGFja2V0CiAJCQkJCQl9CkBAIC0xNDU5LDExICsxNDUxLDkgQEAKIAkJCXsvL3Jlb3JnYW5pemUgb3RoZXIgcGcgcGFja2V0IC8vKioqKioqKioqKioqICBzMS0xLUIgKioqKioqKioqKioqKioqKioqKgogCQkJCWVmdXNlX2FkZHIgPSBlZnVzZV9hZGRyICsgKDIqdGFyZ2V0X3dvcmRfY250cykgKzE7Ly9uZXh0IHBnIHBhY2tldCBhZGRyCiAKLQkJCQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PQogCQkJCXRhcmdldF9wa3Qub2Zmc2V0ID0gb2Zmc2V0OwogCQkJCXRhcmdldF9wa3Qud29yZF9lbj0gYmFkd29yZGVuOwogCQkJCXRhcmdldF93b3JkX2NudHMgPSAgZWZ1c2VfQ2FsY3VsYXRlV29yZENudHModGFyZ2V0X3BrdC53b3JkX2VuKTsKLQkJCQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PQogCQkJCSNpZiAoRUZVU0VfRVJST0VfSEFORExFID09IDEpCiAJCQkJV3JpdGVTdGF0ZT1QR19TVEFURV9IRUFERVI7CiAJCQkJcmVwZWF0X3RpbWVzKys7CkBAIC0xNDc3LDExICsxNDY3LDEyIEBACiAJCX0KIAl9CiAKLQkvL2VmdXNlX3JlZ19jdHJsKHBBZGFwdGVyLEZBTFNFKTsvL3Bvd2VyIG9mZgotCisJaWYoZWZ1c2VfYWRkciAgPj0gKEVGVVNFX01BWF9TSVpFLUVGVVNFX09PQl9QUk9URUNUX0JZVEVTKSkKKwl7CisJCVJUX1RSQUNFKENPTVBfRVBST00sICJlZnVzZV9QZ1BhY2tldFdyaXRlKCk6IGVmdXNlX2FkZHIoJXgpIE91dCBvZiBzaXplISFcbiIsIGVmdXNlX2FkZHIpOworCX0KIAlyZXR1cm4gVFJVRTsKLX0JLy8gZWZ1c2VfUGdQYWNrZXRXcml0ZQotCit9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEZ1bmN0aW9uOgllZnVzZV9Xb3JkRW5hYmxlRGF0YVJlYWQKQEAgLTE1MDMsMTIgKzE0OTQsNiBAQAogc3RhdGljCXZvaWQKIGVmdXNlX1dvcmRFbmFibGVEYXRhUmVhZCgJdTggd29yZF9lbix1OCAqc291cmRhdGEsdTggKnRhcmdldGRhdGEpCiB7Ci0JLy91OCB0bXBpbmRleCA9IDA7Ci0KLQkvL0RiZ1ByaW50KCJlZnVzZV9Xb3JkRW5hYmxlRGF0YVJlYWQgd29yZF9lbiA9ICV4XG4iLCB3b3JkX2VuKTsKLQotCS8vUlRfUFJJTlRfREFUQShDT01QX0VGVVNFLCBEQkdfTE9VRCwgKCJzb3VyZGF0YVxuIiksIHNvdXJkYXRhLCA4KTsKLQkvL1JUX1BSSU5UX0RBVEEoQ09NUF9FRlVTRSwgREJHX0xPVUQsICgidGFyZ2V0ZGF0YVxuIiksIHRhcmdldGRhdGEsIDgpOwogCiAJaWYgKCEod29yZF9lbiZCSVQwKSkKIAl7CkBAIC0xNTMwLDggKzE1MTUsNyBAQAogCQl0YXJnZXRkYXRhWzZdID0gc291cmRhdGFbNl07Ly9zb3VyZGF0YVt0bXBpbmRleCsrXTsKIAkJdGFyZ2V0ZGF0YVs3XSA9IHNvdXJkYXRhWzddOy8vc291cmRhdGFbdG1waW5kZXgrK107CiAJfQotfQkvLyBlZnVzZV9Xb3JkRW5hYmxlRGF0YVJlYWQKLQorfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBGdW5jdGlvbjoJZWZ1c2VfV29yZEVuYWJsZURhdGFXcml0ZQpAQCAtMTU1NSwxNSArMTUzOSw5IEBACiAJdTE2IHRtcGFkZHIgPSAwOwogCXUxNiBzdGFydF9hZGRyID0gZWZ1c2VfYWRkcjsKIAl1OCBiYWR3b3JkZW4gPSAweDBGOwotCS8vdTggTmV4dFN0YXRlOwogCXU4IHRtcGRhdGFbOF07CiAKIAltZW1zZXQodG1wZGF0YSwweGZmLFBHUEtUX0RBVEFfU0laRSk7Ci0JLy9QbGF0Zm9ybUZpbGxNZW1vcnkoKFBWT0lEKXRtcGRhdGEsIFBHUEtUX0RBVEFfU0laRSwgMHhmZik7Ci0KLQkvL1JUX1RSQUNFKENPTVBfRUZVU0UsICJ3b3JkX2VuID0gJXggZWZ1c2VfYWRkcj0leFxuIiwgd29yZF9lbiwgZWZ1c2VfYWRkcik7Ci0KLQkvL1JUX1BSSU5UX0RBVEEoQ09NUF9FRlVTRSwgREJHX0xPVUQsICgiVS1FRlVTRVxuIiksIGRhdGEsIDgpOwogCiAJaWYoISh3b3JkX2VuJkJJVDApKQogCXsKQEAgLTE2MTQsOCArMTU5Miw3IEBACiAJCX0KIAl9CiAJcmV0dXJuIGJhZHdvcmRlbjsKLX0JLy8gZWZ1c2VfV29yZEVuYWJsZURhdGFXcml0ZQotCit9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEZ1bmN0aW9uOgllZnVzZV9Qb3dlclN3aXRjaApAQCAtMTY1OCw4ICsxNjM1LDcgQEAKIAkJd3JpdGVfbmljX2J5dGUoZGV2LCBFRlVTRV9DTEssIDB4MDIpOwogCX0KIAotfQkvKiBlZnVzZV9Qb3dlclN3aXRjaCAqLwotCit9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEZ1bmN0aW9uOgllZnVzZV9HZXRDdXJyZW50U2l6ZQpAQCAtMTY4Niw4ICsxNjYyLDYgQEAKIAl1OCBob2Zmc2V0PTAsaHdvcmRlbj0wOwogCXU4IGVmdXNlX2RhdGEsd29yZF9jbnRzPTA7CiAKLQkvL2VmdXNlX3JlZ19jdHJsKHBBZGFwdGVyLFRSVUUpOy8vcG93ZXIgb24KLQogCXdoaWxlICgJYkNvbnRpbnVhbCAmJgogCQkJZWZ1c2VfT25lQnl0ZVJlYWQoZGV2LCBlZnVzZV9hZGRyICwmZWZ1c2VfZGF0YSkgJiYKIAkJCShlZnVzZV9hZGRyICA8IEVGVVNFX01BWF9TSVpFKSApCkBAIC0xNzA2LDEyICsxNjgwLDkgQEAKIAkJfQogCX0KIAotCS8vZWZ1c2VfcmVnX2N0cmwocEFkYXB0ZXIsRkFMU0UpOy8vcG93ZXIgb2ZmCi0KIAlyZXR1cm4gZWZ1c2VfYWRkcjsKIAotfQkvLyBlZnVzZV9HZXRDdXJyZW50U2l6ZX0KLQorfQogCiAvKiAgMTEvMTYvMjAwOCBNSCBBZGQgZGVzY3JpcHRpb24uIEdldCBjdXJyZW50IGVmdXNlIGFyZWEgZW5hYmxlZCB3b3JkISEuICovCiBzdGF0aWMgdTgKQEAgLTE3MjMsNyArMTY5NCw3IEBACiAJaWYoISh3b3JkX2VuICYgQklUMikpCXdvcmRfY250cysrOwogCWlmKCEod29yZF9lbiAmIEJJVDMpKQl3b3JkX2NudHMrKzsKIAlyZXR1cm4gd29yZF9jbnRzOwotfQkvLyBlZnVzZV9DYWxjdWxhdGVXb3JkQ250cworfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBGdW5jdGlvbjoJRUZVU0VfUHJvZ3JhbU1hcApAQCAtMTc4NiwxMiArMTc1NywxMCBAQAogCQkJCXsKIAkJCQkJdTMyCWo7CiAKLQkJCQkJLy9HZXRIZXhWYWx1ZUZyb21TdHJpbmcoc3pMaW5lLCAmdTRiUmVnVmFsdWUsICZ1NGJNb3ZlKTsKIAkJCQkJZWZ1c2VfUGFyc2luZ01hcChzekxpbmUsICZ1NGJSZWdWYWx1ZSwgJnU0Yk1vdmUpOwogCiAJCQkJCS8vIEdldCBuZXh0IGhleCB2YWx1ZSBhcyBFRVBST00gdmFsdWUuCiAJCQkJCXN6TGluZSArPSB1NGJNb3ZlOwotCQkJCQkvL1dyaXRlRUVwcm9tKGRldiwgKHUxNikoaXRoTGluZSo4K2kpLCAodTE2KXU0YlJlZ1ZhbHVlKTsKIAkJCQkJZWVwcm9tW2luZGV4KytdID0gKHU4KSh1NGJSZWdWYWx1ZSYweGZmKTsKIAkJCQkJZWVwcm9tW2luZGV4KytdID0gKHU4KSgodTRiUmVnVmFsdWU+PjgpJjB4ZmYpOwogCkBAIC0xODA4LDkgKzE3NzcsNiBAQAogCQlyZXR1cm4JUlRfU1RBVFVTX0ZBSUxVUkU7CiAJfQogCi0KLQkvL1JUX1BSSU5UX0RBVEEoQ09NUF9FRlVTRSwgREJHX0xPVUQsICgiRUZVU0UgIiksIGVlcHJvbSwgSFdTRVRfTUFYX1NJWkVfOTJTKTsKLQogCS8vIFVzZSBtYXAgZmlsZSB0byB1cGRhdGUgcmVhbCBFZnVzZSBvciBzaGFkb3cgbW9kaWZ5IHRhYmxlLgogCWlmIChUYWJsZVR5cGUgPT0gMSkKIAl7CkBAIC0xODI0LDQ2ICsxNzkwLDEwIEBACiAJfQogCiAJcmV0dXJuCXJ0U3RhdHVzOwotfQkvKiBFRlVTRV9Qcm9ncmFtTWFwICovCit9CiAKICNlbmRpZgogCi0vLwotLy8JRGVzY3JpcHRpb246Ci0vLwkJUmV0dXJuIFRSVUUgaWYgY2hUbXAgaXMgcmVwcmVzZW50IGZvciBoZXggZGlnaXQgYW5kCi0vLwkJRkFMU0Ugb3RoZXJ3aXNlLgotLy8KLS8vCi1ib29sIElzSGV4RGlnaXQoCWNoYXIgY2hUbXApCi17Ci0JaWYoIChjaFRtcCA+PSAnMCcgJiYgY2hUbXAgPD0gJzknKSB8fAotCQkoY2hUbXAgPj0gJ2EnICYmIGNoVG1wIDw9ICdmJykgfHwKLQkJKGNoVG1wID49ICdBJyAmJiBjaFRtcCA8PSAnRicpICkKLQl7Ci0JCXJldHVybiBUUlVFOwotCX0KLQllbHNlCi0JewotCQlyZXR1cm4gRkFMU0U7Ci0JfQotfQotCi0vLwotLy8JRGVzY3JpcHRpb246Ci0vLwkJVHJhbnNsYXRlIGEgY2hhcmFjdGVyIHRvIGhleCBkaWdpdC4KLS8vCi11MzIgTWFwQ2hhclRvSGV4RGlnaXQoY2hhciBjaFRtcCkKLXsKLQlpZihjaFRtcCA+PSAnMCcgJiYgY2hUbXAgPD0gJzknKQotCQlyZXR1cm4gKGNoVG1wIC0gJzAnKTsKLQllbHNlIGlmKGNoVG1wID49ICdhJyAmJiBjaFRtcCA8PSAnZicpCi0JCXJldHVybiAoMTAgKyAoY2hUbXAgLSAnYScpKTsKLQllbHNlIGlmKGNoVG1wID49ICdBJyAmJiBjaFRtcCA8PSAnRicpCi0JCXJldHVybiAoMTAgKyAoY2hUbXAgLSAnQScpKTsKLQllbHNlCi0JCXJldHVybiAwOwotfQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBGdW5jdGlvbjoJZWZ1c2VfUGFyc2luZ01hcAogICoKQEAgLTE4ODksOSArMTgxOSw2IEBACiAJLy8gQ2hlY2sgaW5wdXQgcGFyYW1ldGVyLgogCWlmKHN6U3RyID09IE5VTEwgfHwgcHU0YlZhbCA9PSBOVUxMIHx8IHB1NGJNb3ZlID09IE5VTEwpCiAJewotCQkvL1JUX1RSQUNFKENPTVBfRUZVU0UsCi0JCS8vImVlcHJvbV9QYXJzaW5nTWFwKCk6IEludmFsaWQgSU4gYXJncyEgc3pTdHI6ICVwLCBwdTRiVmFsOiAlcCwgcHU0Yk1vdmU6ICVwXG4iLAotCQkvL3N6U3RyLCBwdTRiVmFsLCBwdTRiTW92ZSk7CiAJCXJldHVybiBGQUxTRTsKIAl9CiAKQEAgLTE5MDksMzQgKzE4MzYsMjYgQEAKIAogCS8vIENoZWNrIGlmIHN6U2NhbiBpcyBub3cgcG9pbnRlciB0byBhIGNoYXJhY3RlciBmb3IgaGV4IGRpZ2l0LAogCS8vIGlmIG5vdCwgaXQgbWVhbnMgdGhpcyBpcyBub3QgYSB2YWxpZCBoZXggbnVtYmVyLgotCWlmKCFJc0hleERpZ2l0KCpzelNjYW4pKQotCXsKKwlpZiAoIWlzeGRpZ2l0KCpzelNjYW4pKQogCQlyZXR1cm4gRkFMU0U7Ci0JfQogCiAJLy8gUGFyc2UgZWFjaCBkaWdpdC4KIAlkbwogCXsKLQkJKCpwdTRiVmFsKSA8PD0gNDsKLQkJKnB1NGJWYWwgKz0gTWFwQ2hhclRvSGV4RGlnaXQoKnN6U2Nhbik7CisJCSpwdTRiVmFsID0gKCpwdTRiVmFsIDw8IDQpICsgaGV4X3RvX2Jpbigqc3pTY2FuKTsKIAogCQlzelNjYW4rKzsKIAkJKCpwdTRiTW92ZSkrKzsKLQl9IHdoaWxlKElzSGV4RGlnaXQoKnN6U2NhbikpOworCX0gd2hpbGUgKGlzeGRpZ2l0KCpzelNjYW4pKTsKIAogCXJldHVybiBUUlVFOwogCi19CS8qIGVmdXNlX1BhcnNpbmdNYXAgKi8KK30KICNlbmRpZgogCi0vLwotLy8gVXNlbGVzcyBTZWN0aW9uIENvZGUgTm93ISEhISEhCi0vLwotLy8gUG9ydGluZyBmcm9tIDg3MTIgU0RJTwogaW50IGVmdXNlX29uZV9ieXRlX3J3KHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIHU4IGJSZWFkLCB1MTYgYWRkciwgdTggKmRhdGEpCiB7CiAJdTMyIGJSZXN1bHQ7Ci0JLy91OCBlZnVzZV9jdGxyZWcsdG1waWR4ID0gMDsKIAl1OCB0bXBpZHggPSAwOwogCXU4IHRtcHY4PTA7CiAKQEAgLTE5NjUsNyArMTg4NCw2IEBACiAKIAl9CiAJZWxzZXsKLQkJLy9yZXR1cm4JMDsKIAkJd3JpdGVfbmljX2J5dGUoZGV2LCBFRlVTRV9DVFJMLCAqZGF0YSk7Ly9kYXRhCiAKIAkJd3JpdGVfbmljX2J5dGUoZGV2LCBFRlVTRV9DVFJMKzMsIDB4RjIpOy8vd3JpdGUgY21kCkBAIC0xOTg3LDIxICsxOTA1LDE4IEBACiAJfQogCXJldHVybiBiUmVzdWx0OwogfQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogdm9pZCBlZnVzZV9hY2Nlc3Moc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgdTggYlJlYWQsdTE2IHN0YXJ0X2FkZHIsIHU4IGNudHMsIHU4ICpkYXRhKQogewogCXU4CWVmdXNlX2Nsa19vcmksZWZ1c2VfY2xrX25ldzsvLyx0bXA4OwogCXUzMiBpID0gMDsKIAogCWlmKHN0YXJ0X2FkZHI+MHgyMDApIHJldHVybjsKLQkvL1JUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tcF9pb2N0bF9jXyxfZHJ2X2Vycl8sCi0JLy8JKCJcbiA9PT0+IGVmdXNlX2FjY2VzcyBbc3RhcnRfYWRkcj0weCV4IGNudHM6JWQgZGF0YWFycmF5OjB4JTA4eCAgUXVlcnkgRWZ1c2VdLlxuIixzdGFydF9hZGRyLGNudHMsZGF0YSkpOwogCS8vIC0tLS0tLS0tLS0tLS0tLS0tU1lTX0ZVTkNfRU4gRGlnaXRhbCBDb3JlIFZkZCBlbmFibGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJZWZ1c2VfY2xrX29yaSA9IHJlYWRfbmljX2J5dGUoZGV2LFNZU19GVU5DX0VOKzEpOwogCWVmdXNlX2Nsa19uZXcgPSBlZnVzZV9jbGtfb3JpfDB4MjA7CiAKIAlpZihlZnVzZV9jbGtfbmV3IT0gZWZ1c2VfY2xrX29yaSl7Ci0JCS8vUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21wX2lvY3RsX2NfLF9kcnZfZXJyXywoIj09PT13cml0ZSAweDEwMjUwMDAzPT09PT1cbiIpKTsKIAkJd3JpdGVfbmljX2J5dGUoZGV2LCBTWVNfRlVOQ19FTisxLCBlZnVzZV9jbGtfbmV3KTsKIAl9CiAjaWZkZWYgX1BPV0VST05fREVMQVlfCkBAIC0yMDIxLDkgKzE5MzYsOCBAQAogCS8vLS0tLS0tLS0tLS0tLS0tLS1lLWZ1c2Ugb25lIGJ5dGUgcmVhZCAvIHdyaXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCWZvcihpPTA7aTxjbnRzO2krKyl7CiAJCWVmdXNlX29uZV9ieXRlX3J3KGRldixiUmVhZCwgc3RhcnRfYWRkcitpICwgZGF0YStpKTsKLQkJLy8vL1JUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tcF9pb2N0bF9jXyxfZHJ2X2Vycl8sKCI9PT5lZnVzZV9hY2Nlc3MgYWRkcjoweCUwMnggdmFsdWU6MHglMDJ4XG4iLGRhdGEraSwqKGRhdGEraSkpKTsKKwogCX0KLQkvLyAtLS0tLS0tLS0tLS0tLS0tLWUtZnVzZSBwd3IgJiBjbGsgcmVnIGN0cmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJd3JpdGVfbmljX2J5dGUoZGV2LCBFRlVTRV9URVNUKzMsIHJlYWRfbmljX2J5dGUoZGV2LCBFRlVTRV9URVNUKzMpJjB4N2YpOwogCXdyaXRlX25pY19ieXRlKGRldiwgRUZVU0VfQ0xLX0NUUkwsIHJlYWRfbmljX2J5dGUoZGV2LCBFRlVTRV9DTEtfQ1RSTCkmMHhmZCk7CiAKQEAgLTIwMzEsOCArMTk0NSw2IEBACiAJaWYoZWZ1c2VfY2xrX25ldyAhPSBlZnVzZV9jbGtfb3JpKQl3cml0ZV9uaWNfYnl0ZShkZXYsIDB4MTAyNTAwMDMsIGVmdXNlX2Nsa19vcmkpOwogCiB9Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogI2lmZGVmIFRPX0RPX0xJU1QKIHN0YXRpYwl2b2lkIGVmdXNlX3JlZ19jdHJsKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIHU4IGJQb3dlck9uKQpAQCAtMjA2MCwxNSArMTk3MiwxMiBAQAogCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEVGVVNFX0NMS19DVFJMLCByZWFkX25pY19ieXRlKGRldiwgRUZVU0VfQ0xLX0NUUkwpJjB4ZmQpOwogCQkvLyAtLS0tLS0tLS0tLS0tLS0tLVNZU19GVU5DX0VOIERpZ2l0YWwgQ29yZSBWZGQgZGlzYWJsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotCQkvL3dyaXRlX25pY19ieXRlKHBBZGFwdGVyLCBTWVNfRlVOQ19FTisxLCAgcmVhZF9uaWNfYnl0ZShwQWRhcHRlcixTWVNfRlVOQ19FTisxKSYweERGKTsKIAl9CiAKIAogfQogI2VuZGlmCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogdm9pZCBlZnVzZV9yZWFkX2RhdGEoc3RydWN0IG5ldF9kZXZpY2UqIGRldix1OCBlZnVzZV9yZWFkX2l0ZW0sdTggKmRhdGEsdTMyIGRhdGFfc2l6ZSkKIHsKIAl1OCBvZmZzZXQsIHdvcmRfc3RhcnQsYnl0ZV9zdGFydCxieXRlX2NudHM7CkBAIC0yMDc5LDEwICsxOTg4LDggQEAKIAogCXU4IHRtcGlkeDsKIAl1OCBwZ19kYXRhWzhdOwotCS8vdTgJdGVtcF92YWx1ZVs4XSA9IHsweGZmfTsKIAogCWlmKGVmdXNlX3JlYWRfaXRlbT4gIChzaXplb2YoUlRMODcxMl9TRElPX0VGVVNFX1RBQkxFKS9zaXplb2YoRUZVU0VfTUFQKSkpewotCQkvL2Vycm9yIG1zZwogCQlyZXR1cm4gOwogCX0KIApAQCAtMjA5Miw0OCArMTk5OSwzOSBAQAogCWJ5dGVfY250cyAgIAk9IFJUTDg3MTJfU0RJT19FRlVTRV9UQUJMRVtlZnVzZV9yZWFkX2l0ZW1dLmJ5dGVfY250czsKIAogCWlmKGRhdGFfc2l6ZSE9Ynl0ZV9jbnRzKXsKLQkJLy9lcnJvciBtc2cKIAkJcmV0dXJuOwogCX0KIAogCXBnX3BrdF9jbnRzID0gKGJ5dGVfY250cyAvUEdQS1RfREFUQV9TSVpFKSArMTsKIAogCWlmKHBnX3BrdF9jbnRzID4gMSl7Ci0JCS8vdG1wZGF0YSA9IF9tYWxsb2MocGdfcGt0X2NudHMqUEdQS1RfREFUQV9TSVpFKTsKIAkJdG1wZGF0YSA9IGVmdXNlZGF0YTsKIAogCQlpZih0bXBkYXRhIT1OVUxMKQogCQl7CiAJCQltZW1zZXQodG1wZGF0YSwweGZmLHBnX3BrdF9jbnRzKlBHUEtUX0RBVEFfU0laRSk7Ci0JCQkvL1BsYXRmb3JtRmlsbE1lbW9yeSgoUFZPSUQpcGdfZGF0YSwgcGdfcGt0X2NudHMqUEdQS1RfREFUQV9TSVpFLCAweGZmKTsKIAogCQkJZm9yKHRtcGlkeD0wO3RtcGlkeDxwZ19wa3RfY250czt0bXBpZHgrKykKIAkJCXsKIAkJCQltZW1zZXQocGdfZGF0YSwweGZmLFBHUEtUX0RBVEFfU0laRSk7Ci0JCQkJLy9QbGF0Zm9ybUZpbGxNZW1vcnkoKFBWT0lEKXBnX2RhdGEsIFBHUEtUX0RBVEFfU0laRSwgMHhmZik7CiAJCQkJaWYoVFJVRT09IGVmdXNlX1BnUGFja2V0UmVhZChkZXYsb2Zmc2V0K3RtcGlkeCxwZ19kYXRhKSkKIAkJCQl7CiAJCQkJCW1lbWNweSh0bXBkYXRhKyhQR1BLVF9EQVRBX1NJWkUqdG1waWR4KSxwZ19kYXRhLFBHUEtUX0RBVEFfU0laRSk7Ci0JCQkJCS8vUGxhdGZvcm1Nb3ZlTWVtb3J5KChQVk9JRCkodG1wZGF0YSsoUEdQS1RfREFUQV9TSVpFKnRtcGlkeCkpLCAoUFZPSUQpcGdfZGF0YSwgUEdQS1RfREFUQV9TSVpFKTsKIAkJCQl9CiAJCQl9CiAJCQltZW1jcHkoZGF0YSwodG1wZGF0YSsgKDIqd29yZF9zdGFydCkrYnl0ZV9zdGFydCApLGRhdGFfc2l6ZSk7Ci0JCQkvL1BsYXRmb3JtTW92ZU1lbW9yeSgoUFZPSUQpZGF0YSwgKFBWT0lEKSh0bXBkYXRhKyAoMip3b3JkX3N0YXJ0KStieXRlX3N0YXJ0ICksIGRhdGFfc2l6ZSk7Ci0JCQkvL19tZnJlZSh0bXBkYXRhLCBwZ19wa3RfY250cypQR1BLVF9EQVRBX1NJWkUpOwogCQl9CiAJfQogCWVsc2UKIAl7CiAJCW1lbXNldChwZ19kYXRhLDB4ZmYsUEdQS1RfREFUQV9TSVpFKTsKLQkJLy9QbGF0Zm9ybUZpbGxNZW1vcnkoKFBWT0lEKXBnX2RhdGEsIFBHUEtUX0RBVEFfU0laRSwgMHhmZik7CiAJCWlmKFRSVUU9PWVmdXNlX1BnUGFja2V0UmVhZChkZXYsb2Zmc2V0LHBnX2RhdGEpKXsKIAkJCW1lbWNweShkYXRhLHBnX2RhdGErICgyKndvcmRfc3RhcnQpK2J5dGVfc3RhcnQgLGRhdGFfc2l6ZSk7Ci0JCQkvL1BsYXRmb3JtTW92ZU1lbW9yeSgoUFZPSUQpZGF0YSwgKFBWT0lEKShwZ19kYXRhKyAoMip3b3JkX3N0YXJ0KStieXRlX3N0YXJ0KSwgZGF0YV9zaXplKTsKIAkJfQogCX0KIAogfQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogLy9wZXIgaW50ZXJmYWNlIGRvZXNuJ3QgYWxpa2UKIHZvaWQgZWZ1c2Vfd3JpdGVfZGF0YShzdHJ1Y3QgbmV0X2RldmljZSogZGV2LHU4IGVmdXNlX3dyaXRlX2l0ZW0sdTggKmRhdGEsdTMyIGRhdGFfc2l6ZSx1MzIgYldvcmRVbml0KQogewpAQCAtMjE0NSw3ICsyMDQzLDYgQEAKIAl1OCBwZ19kYXRhWzhdLHRtcGJ5dGVzPTA7CiAKIAlpZihlZnVzZV93cml0ZV9pdGVtPiAgKHNpemVvZihSVEw4NzEyX1NESU9fRUZVU0VfVEFCTEUpL3NpemVvZihFRlVTRV9NQVApKSl7Ci0JCS8vZXJyb3IgbXNnCiAJCXJldHVybiA7CiAJfQogCkBAIC0yMTU1LDcgKzIwNTIsNiBAQAogCWJ5dGVfY250cyAgIAk9IFJUTDg3MTJfU0RJT19FRlVTRV9UQUJMRVtlZnVzZV93cml0ZV9pdGVtXS5ieXRlX2NudHM7CiAKIAlpZihkYXRhX3NpemUgPiAgYnl0ZV9jbnRzKXsKLQkJLy9lcnJvciBtc2cKIAkJcmV0dXJuOwogCX0KIAlwZ19wa3RfY250cyA9IChieXRlX2NudHMgL1BHUEtUX0RBVEFfU0laRSkgKzE7CkBAIC0yMTY4LDEzICsyMDY0LDExIEBACiAKIAkJaWYoKGVmdXNlX3dyaXRlX2l0ZW09PUVGVVNFX0YwQ0lTKXx8KGVmdXNlX3dyaXRlX2l0ZW09PUVGVVNFX0YxQ0lTKSl7CiAJCQltZW1zZXQocGdfZGF0YSwweGZmLFBHUEtUX0RBVEFfU0laRSk7Ci0JCQkvL1BsYXRmb3JtRmlsbE1lbW9yeSgoUFZPSUQpcGdfZGF0YSwgUEdQS1RfREFUQV9TSVpFLCAweGZmKTsKIAkJCWVmdXNlX1BnUGFja2V0UmVhZChkZXYsb2Zmc2V0LHBnX2RhdGEpOwogCiAJCQlpZihlZnVzZV93cml0ZV9pdGVtPT1FRlVTRV9GMENJUyl7CiAJCQkJd29yZF9lbiA9IDB4MDc7CiAJCQkJbWVtY3B5KHBnX2RhdGErd29yZF9zdGFydCoyK2J5dGVfc3RhcnQsZGF0YSxzaXplb2YodTgpKjIpOwotCQkJCS8vUGxhdGZvcm1Nb3ZlTWVtb3J5KChQVk9JRCkocGdfZGF0YSt3b3JkX3N0YXJ0KjIrYnl0ZV9zdGFydCksIChQVk9JRClkYXRhLCBzaXplb2YodTgpKjIpOwogCQkJCWVmdXNlX1BnUGFja2V0V3JpdGUoZGV2LG9mZnNldCx3b3JkX2VuLHBnX2RhdGErKHdvcmRfc3RhcnQqMikpOwogCiAJCQkJd29yZF9lbiA9IDB4MDA7CkBAIC0yMTgzLDcgKzIwNzcsNiBAQAogCQkJCXdvcmRfZW4gPSAweDAwOwogCQkJCWVmdXNlX1BnUGFja2V0UmVhZChkZXYsb2Zmc2V0KzIscGdfZGF0YSk7CiAJCQkJbWVtY3B5KHBnX2RhdGEsZGF0YSsyKzgsc2l6ZW9mKHU4KSo3KTsKLQkJCQkvL1BsYXRmb3JtTW92ZU1lbW9yeSgoUFZPSUQpKHBnX2RhdGEpLCAoUFZPSUQpKGRhdGErMis4KSwgc2l6ZW9mKHU4KSo3KTsKIAogCQkJCWVmdXNlX1BnUGFja2V0V3JpdGUoZGV2LChvZmZzZXQrMiksd29yZF9lbixwZ19kYXRhKTsKIAkJCX0KQEAgLTIyMDIsNyArMjA5NSw2IEBACiAJCX0KIAkJZWxzZXsKIAkJCW1lbXNldChwZ19kYXRhLDB4ZmYsUEdQS1RfREFUQV9TSVpFKTsKLQkJCS8vUGxhdGZvcm1GaWxsTWVtb3J5KChQVk9JRClwZ19kYXRhLCBQR1BLVF9EQVRBX1NJWkUsIDB4ZmYpOwogCQkJaWYoKGVmdXNlX3dyaXRlX2l0ZW09PUVGVVNFX1NESU9fU0VUVElORyl8fChlZnVzZV93cml0ZV9pdGVtPT1FRlVTRV9DQ0NSKSl7CiAJCQkJd29yZF9lbiA9IDB4MGUgOwogCQkJCXRtcGJ5dGVzID0gMjsKQEAgLTIyMjEsMTIgKzIxMTMsMTAgQEAKIAkJCX0KIAkJCWlmKGJXb3JkVW5pdD09VFJVRSl7CiAJCQkJbWVtY3B5KHBnX2RhdGErd29yZF9zdGFydCoyICxkYXRhLHNpemVvZih1OCkqdG1wYnl0ZXMpOwotCQkJCS8vUGxhdGZvcm1Nb3ZlTWVtb3J5KChQVk9JRCkocGdfZGF0YSt3b3JkX3N0YXJ0KjIpLCAoUFZPSUQpKGRhdGEpLCBzaXplb2YodTgpKnRtcGJ5dGVzKTsKIAkJCX0KIAkJCWVsc2V7CiAJCQkJZWZ1c2VfUGdQYWNrZXRSZWFkKGRldixvZmZzZXQscGdfZGF0YSk7CiAJCQkJbWVtY3B5KHBnX2RhdGErKDIqd29yZF9zdGFydCkrYnl0ZV9zdGFydCxkYXRhLHNpemVvZih1OCkqYnl0ZV9jbnRzKTsKLQkJCQkvL1BsYXRmb3JtTW92ZU1lbW9yeSgoUFZPSUQpKHBnX2RhdGErKDIqd29yZF9zdGFydCkrYnl0ZV9zdGFydCksIChQVk9JRCkoZGF0YSksIHNpemVvZih1OCkqYnl0ZV9jbnRzKTsKIAkJCX0KIAogCQkJZWZ1c2VfUGdQYWNrZXRXcml0ZShkZXYsb2Zmc2V0LHdvcmRfZW4scGdfZGF0YSsod29yZF9zdGFydCoyKSk7CkBAIC0yMjM0LDcgKzIxMjQsNiBAQAogCQl9CiAKIAl9Ci0JLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAllbHNlIGlmKHBnX3BrdF9jbnRzPjEpey8vc2l0dWF0aW9uIEIKIAkJaWYod29yZF9zdGFydD09MCl7CiAJCQl3b3JkX2VuID0gMHgwMDsKQEAgLTIyNTUsNyArMjE0NCw2IEBACiAKIAkJfQogCX0KLQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCWVsc2V7Ly9zaXR1YXRpb24gQwogCQl3b3JkX2VuID0gMHgwZjsKIAkJZm9yKHRtcGlkeD0gMDsgdG1waWR4PHdvcmRfY250cyA7IHRtcGlkeCsrKQpAQCAtMjI2Nyw3ICsyMTU1LDYgQEAKIAl9CiAKIH0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHZvaWQgZWZ1c2V0X3Rlc3RfZnVuY19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCiB7CkBAIC0yMjg4LDcgKzIxNzUsNiBAQAogCW1lbXNldCh0eHBvd2VydGFibGUsMCxzaXplb2YodTgpKjI4KTsKIAllZnVzZV9yZWFkX2RhdGEoZGV2LEVGVVNFX1RYUFdfVEFCLHR4cG93ZXJ0YWJsZSxzaXplb2YodHhwb3dlcnRhYmxlKSk7CiB9Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB2b2lkIGVmdXNldF90ZXN0X2Z1bmNfd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKIHsKQEAgLTIzMTEsMTkgKzIxOTcsMyBAQAogCWVmdXNlX3dyaXRlX2RhdGEoZGV2LEVGVVNFX1NESU9fU0VUVElORyx0bXBkYXRhLHNpemVvZih0bXBkYXRhKSxiV29yZFVuaXQpOwogCiB9Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0KLQotCi0KLQotCi0KLQotCi0vKiBFbmQgb2YgRWZ1c2UuYyAqLwotCi0KLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU19FZnVzZS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNfRWZ1c2UuaAppbmRleCAxZTUwMTUzLi5jNDhhMTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU19FZnVzZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTX0VmdXNlLmgKQEAgLTEsMzkgKzEsMzggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBSZWFsdGVrIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKLSAqICAgICAoYykgQ29weXJpZ2h0ICAyMDA4LCBSZWFsVEVLIFRlY2hub2xvZ2llcyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBCYXNlZCBvbiB0aGUgcjgxODAgZHJpdmVyLCB3aGljaCBpczoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDUgQW5kcmVhIE1lcmVsbG8gPGFuZHJlYW1ybEB0aXNjYWxpLml0PiwgZXQgYWwuCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKLSAqIE1vZHVsZToJRWZ1c2UuaAkoIEhlYWRlciBGaWxlKQorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KICAqCi0gKiBOb3RlOgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKICAqCi0gKiBGdW5jdGlvbjoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KICAqCi0gKiBFeHBvcnQ6Ci0gKgotICogQWJicmV2OgotICoKLSAqIEhpc3Rvcnk6Ci0gKiBEYXRhCQkJV2hvCQlSZW1hcmsKLSAqCi0gKiAwOS8yMy8yMDA4CU1IQwkJUG9ydGluZyBFZnVzZSBSL1cgQVBJIGZyb20gV01BQy4KLSAqIDExLzEwLzIwMDgJTUhDCQlQb3J0aW5nIEVmdXNlLmggZnJvbSA4NzEyIFNESU8uCi0gKgkJCQkJCTEuIFdlIG11c2UgcmVkZWZpbmUgdGhlIGhlYWRlciBmaWxlIHRvIGZpdCBvdXIgY29kaW5nCi0gKgkJCQkJCSAgIHN0eWxlLgotICoJCQkJCQkyLiBUSGUgQVBJIHdlIGV4cG9ydCB0byBvdGhlciBtb2R1bGUsIHdlIG11c3QgcmVkZWZpbmUKLSAqCQkJCQkJICAgZm9yIDgxOTJTIHNlcmllcy4KLSAqCi0gKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBDaGVjayB0byBzZWUgaWYgdGhlIGZpbGUgaGFzIGJlZW4gaW5jbHVkZWQgYWxyZWFkeS4gICovCiAKICNpZm5kZWYgX19JTkNfRUZVU0VfSAogI2RlZmluZSBfX0lOQ19FRlVTRV9ICiAKLS8vIFJvZ2VyIHBvcnRpbmcgZm9yIDgxOTJTVQogI2RlZmluZQkJRUZVU0VfRk9SXzkyU1UJCTEKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLURlZmluZSBQYXJhbWV0ZXJzLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjZGVmaW5lCQlFRlVTRV9NQUNfTEVOCQkJCQkweDIwMAorI2RlZmluZQkJRUZVU0VfUkVBTF9DT05URU5UX0xFTgkJNTEyCisjZGVmaW5lCQlFRlVTRV9NQVBfTEVOCQkJCQkxMjgKKyNkZWZpbmUJCUVGVVNFX01BWF9TRUNUSU9OCQkJMTYKKyNkZWZpbmUJCUVGVVNFX01BWF9XT1JEX1VOSVQJCQk0CiAKICNkZWZpbmUJCUVGVVNFX0lOSVRfTUFQCQkJCTAKICNkZWZpbmUJCUVGVVNFX01PRElGWV9NQVAJCQkJMQpAQCAtNDEsNyArNDAsNiBAQAogI2RlZmluZQkJRUZVU0VfQ0xLX0NUUkwJCQlFRlVTRV9DVFJMCiAjZGVmaW5lIAlFRlVTRV9CSVQoeCkgICgxIDw8ICh4KSkKIAotLy8gRnJvbSA4NzEyISEhISEhISEKICNkZWZpbmUJCVBHX1NUQVRFX0hFQURFUiAJMHgwMQogI2RlZmluZQkJUEdfU1RBVEVfV09SRF8wCQkweDAyCiAjZGVmaW5lCQlQR19TVEFURV9XT1JEXzEJCTB4MDQKQEAgLTUyLDIzICs1MCw2IEBACiAjZGVmaW5lCQlQR19TV0JZVEVfSAkJCTB4MDEKICNkZWZpbmUJCVBHX1NXQllURV9MCQkJMHgwMgogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRGVmaW5lIFBhcmFtZXRlcnMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLURlZmluZSBzdHJ1Y3R1cmUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1EZWZpbmUgc3RydWN0dXJlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1FeHBvcnQgZ2xvYmFsIHZhcmlhYmxlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUV4cG9ydCBnbG9iYWwgdmFyaWFibGUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1FeHBvcnQgTWFyY28gRGVmaW5pdGlvbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRXhwb3J0IE1hcmNvIERlZmluaXRpb24tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1FeHBvcnRlZCBGdW5jdGlvbiBwcm90b3R5cGUtLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogZXh0ZXJuCXZvaWQKIEVGVVNFX0luaXRpYWxpemUoc3RydWN0IG5ldF9kZXZpY2UqIGRldik7CiBleHRlcm4JdTgKQEAgLTgxLDIxICs2MiwxOCBAQAogUmVhZEVGdXNlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsdTE2IF9vZmZzZXQsdTE2IF9zaXplX2J5dGUsdTgqIHBidWYpOwogZXh0ZXJuCXZvaWQKIFJlYWRFRnVzZUJ5dGUoc3RydWN0IG5ldF9kZXZpY2UqIGRldix1MTYgIF9vZmZzZXQsdTggICpwYnVmKTsKLSNlbmRpZgkvLyAjaWYgKEVGVVNFX0ZPUl85MlNVID09IDEpCisjZW5kaWYKIAogZXh0ZXJuCXZvaWQKIEVGVVNFX1NoYWRvd1JlYWQoc3RydWN0IG5ldF9kZXZpY2UqIGRldix1bnNpZ25lZCBjaGFyIFR5cGUsdW5zaWduZWQgc2hvcnQgT2Zmc2V0LHUzMiAqVmFsdWUpOwogZXh0ZXJuCXZvaWQKIEVGVVNFX1NoYWRvd1dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsdW5zaWduZWQgY2hhciBUeXBlLHVuc2lnbmVkIHNob3J0IE9mZnNldCx1MzIgVmFsdWUpOwotZXh0ZXJuCXZvaWQKK2V4dGVybglib29sCiBFRlVTRV9TaGFkb3dVcGRhdGUoc3RydWN0IG5ldF9kZXZpY2UqIGRldik7CiBleHRlcm4Jdm9pZAogRUZVU0VfU2hhZG93TWFwVXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwogCiBleHRlcm4JYm9vbAogRUZVU0VfUHJvZ3JhbU1hcChzdHJ1Y3QgbmV0X2RldmljZSogZGV2LGNoYXIqIHBGaWxlTmFtZSwgdTggVGFibGVUeXBlKTsJCS8vIDA9U2hhZG93IDE9UmVhbCBFZnVzZQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUV4cG9ydGVkIEZ1bmN0aW9uIHByb3RvdHlwZS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qIEVuZCBvZiBFZnVzZS5oICovCi0KLSNlbmRpZiAvL19fSU5DX0VGVVNFX0gKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNfZmlybXdhcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTX2Zpcm13YXJlLmMKaW5kZXggNTAzNmQ1NC4uZGIwZDJkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNfZmlybXdhcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU19maXJtd2FyZS5jCkBAIC0xLDE2ICsxLDIyIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFByb2NlZHVyZTogICAgSW5pdCBib290IGNvZGUvZmlybXdhcmUgY29kZS9kYXRhIHNlc3Npb24KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBSZWFsdGVrIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKLSAqIERlc2NyaXB0aW9uOiBUaGlzIHJvdXRpbmUgd2lsbCBpbnRpYWxpemUgZmlybXdhcmUuIElmIGFueSBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbgotICogCQlwcm9jZXNzLCB0aGUgcm91dGluZSBzaGFsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgYW5kIHJldHVybiBmYWlsLgotICoJCU5JQyBkcml2ZXIgc2hvdWxkIGNhbGwgTmRpc09wZW5GaWxlIG9ubHkgZnJvbSBNaW5pcG9ydEluaXRpYWxpemUuCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgogICoKLSAqIEFyZ3VtZW50czogICBUaGUgcG9pbnRlciBvZiB0aGUgYWRhcHRlcgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSAqIFJldHVybnM6Ci0gKiAgICAgICAgTkRJU19TVEFUVVNfRkFJTFVSRSAtIHRoZSBmb2xsb3dpbmcgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBzaG91bGQgYmUgdGVybWluYXRlZAotICogICAgICAgIE5ESVNfU1RBVFVTX1NVQ0NFU1MgLSBpZiBmaXJtd2FyZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIHN1Y2Nlc3MKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgInI4MTkyVS5oIgogI2luY2x1ZGUgInI4MTkyU19maXJtd2FyZS5oIgogI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNfZmlybXdhcmUuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTX2Zpcm13YXJlLmgKaW5kZXggMmMyY2Y4MC4uN2YyNjhhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNfZmlybXdhcmUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU19maXJtd2FyZS5oCkBAIC0xLDQ0ICsxLDMyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0lOQ19GSVJNV0FSRV9ICiAjZGVmaW5lIF9fSU5DX0ZJUk1XQVJFX0gKIAogCi0vLyNkZWZpbmUgUlRMODE5MF9DUFVfU1RBUlRfT0ZGU0VUCTB4ODAKLS8qIFRPRE86IHRoaXMgZGVmaW5pdGlvbiBpcyBUQkQgKi8KLS8vI2RlZmluZSBVU0JfSFdERVNDX0hFQURFUl9MRU4JMAotCi0vKiBJdCBzaG91bGQgYmUgZG91YmxlIHdvcmQgYWxpZ25tZW50ICovCi0vLyNpZiBERVZfQlVTX1RZUEU9PVBDSV9JTlRFUkZBQ0UKLS8vI2RlZmluZSBHRVRfQ09NTUFORF9QQUNLRVRfRlJBR19USFJFU0hPTEQodikJNCoodi80KSAtIDgKLS8vI2Vsc2UKLS8vI2RlZmluZSBHRVRfQ09NTUFORF9QQUNLRVRfRlJBR19USFJFU0hPTEQodikJKDQqKHYvNCkgLSA4IC0gVVNCX0hXREVTQ19IRUFERVJfTEVOKQotLy8jZW5kaWYKLQotLy90eXBlZGVmIGVudW0gX2Zpcm13YXJlX2luaXRfc3RlcHsKLS8vCUZXX0lOSVRfU1RFUDBfQk9PVCA9IDAsCi0vLwlGV19JTklUX1NURVAxX01BSU4gPSAxLAotLy8JRldfSU5JVF9TVEVQMl9EQVRBID0gMiwKLS8vfWZpcm13YXJlX2luaXRfc3RlcF9lOwotCi0vL3R5cGVkZWYgZW51bSBfREVTQ19QQUNLRVRfVFlQRXsKLS8vCURFU0NfUEFDS0VUX1RZUEVfSU5JVCA9IDAsCi0vLwlERVNDX1BBQ0tFVF9UWVBFX05PUk1BTCA9IDEsCi0vL31ERVNDX1BBQ0tFVF9UWVBFOwotI2RlZmluZQlSVEw4MTkyU19GV19QS1RfRlJBR19TSVpFCQkweEZGMDAJLy8gNjRLCi0KLQogI2RlZmluZSAJUlRMODE5MF9NQVhfRklSTVdBUkVfQ09ERV9TSVpFCTY0MDAwCS8vNjRrCiAjZGVmaW5lCU1BWF9GSVJNV0FSRV9DT0RFX1NJWkUJMHhGRjAwIC8vIEZpcm13YXJlIExvY2FsIGJ1ZmZlciBzaXplLgogI2RlZmluZSAJUlRMODE5MF9DUFVfU1RBUlRfT0ZGU0VUCQkJMHg4MAotCisjZGVmaW5lCVJUTDgxOTJTX0ZXX1BLVF9GUkFHX1NJWkUJCTB4NDAwMAogI2RlZmluZSBHRVRfQ09NTUFORF9QQUNLRVRfRlJBR19USFJFU0hPTEQodikJKDQqKHYvNCkgLSA4IC0gVVNCX0hXREVTQ19IRUFERVJfTEVOKQogCi0vL3R5cGVkZWYgZW51bSBfREVTQ19QQUNLRVRfVFlQRXsKLS8vCURFU0NfUEFDS0VUX1RZUEVfSU5JVCA9IDAsCi0vLwlERVNDX1BBQ0tFVF9UWVBFX05PUk1BTCA9IDEsCi0vL31ERVNDX1BBQ0tFVF9UWVBFOwogCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9uLgotLy90eXBlZGVmCXN0cnVjdCBfQURBUFRFUglBREFQVEVSLCAqUEFEQVBURVI7CiAjaWZkZWYgUlRMODE5MlMKIHR5cGVkZWYgZW51bSBfZmlybXdhcmVfaW5pdF9zdGVwewogCUZXX0lOSVRfU1RFUDBfSU1FTSA9IDAsCkBAIC02NCwxNyArNTIsOCBAQAogCU9QVF9GSVJNV0FSRV9SRVNFVCA9IDEsCiB9b3B0X3JzdF90eXBlX2U7CiAKLS8qdHlwZWRlZiBlbnVtIF9GSVJNV0FSRV9TVEFUVVN7Ci0JRldfU1RBVFVTXzBfSU5JVCA9IDAsCi0JRldfU1RBVFVTXzFfTU9WRV9CT09UX0NPREUgPSAxLAotCUZXX1NUQVRVU18yX01PVkVfTUFJTl9DT0RFID0gMiwKLQlGV19TVEFUVVNfM19UVVJOT05fQ1BVID0gMywKLQlGV19TVEFUVVNfNF9NT1ZFX0RBVEFfQ09ERSA9IDQsCi0JRldfU1RBVFVTXzVfUkVBRFkgPSA1LAotfUZJUk1XQVJFX1NUQVRVUzsKLSovCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSVEw4MTkyUyBGaXJtd2FyZSByZWxhdGVkLCBSZXZpc2VkIGJ5IFJvZ2VyLCAyMDA4LjEyLjE4LgorLy8gUlRMODE5MlMgRmlybXdhcmUgcmVsYXRlZAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogdHlwZWRlZiAgc3RydWN0IF9SVF84MTkyU19GSVJNV0FSRV9QUklWIHsgLy84LWJ5dGVzIGFsaWdubWVudCByZXF1aXJlZAogCkBAIC0xODEsNyArMTYwLDYgQEAKIHR5cGVkZWYgc3RydWN0IF9ydF9maXJtd2FyZXsKIAlQUlRfODE5MlNfRklSTVdBUkVfSERSCXBGd0hlYWRlcjsKIAlGSVJNV0FSRV84MTkyU19TVEFUVVMJRldTdGF0dXM7Ci0JdTE2ICAgICAgICAgICAgIEZpcm13YXJlVmVyc2lvbjsKIAl1OAkJRndJTUVNW1JUTDgxOTBfTUFYX0ZJUk1XQVJFX0NPREVfU0laRV07CiAJdTgJCUZ3RU1FTVtSVEw4MTkwX01BWF9GSVJNV0FSRV9DT0RFX1NJWkVdOwogCXUzMgkJRndJTUVNTGVuOwpAQCAtMTg5LDExICsxNjcsNDMgQEAKIAl1OAkJc3pGd1RtcEJ1ZmZlclsxNjQwMDBdOwogICAgICAgICB1MzIgICAgICAgICAgICAgc3pGd1RtcEJ1ZmZlckxlbjsKIAl1MTYJCUNtZFBhY2tldEZyYWdUaHJlc29sZDsKKwl1MTYJCUZpcm13YXJlVmVyc2lvbjsKIH1ydF9maXJtd2FyZSwgKnBydF9maXJtd2FyZTsKIAotLy90eXBlZGVmIHN0cnVjdCBfUlRfRklSTVdBUkVfSU5GT184MTkyU1V7Ci0vLwl1OAkJc3pJbmZvWzE2XTsKLS8vfVJUX0ZJUk1XQVJFX0lORk9fODE5MlNVLCAqUFJUX0ZJUk1XQVJFX0lORk9fODE5MlNVOworI2RlZmluZQkJRldfRElHX0VOQUJMRV9DVEwJCQlCSVQwCisjZGVmaW5lCQlGV19ISUdIX1BXUl9FTkFCTEVfQ1RMCQlCSVQxCisjZGVmaW5lCQlGV19TU19DVEwJCQkJCQlCSVQyCisjZGVmaW5lCQlGV19SQV9JTklUX0NUTAkJCQlCSVQzCisjZGVmaW5lCQlGV19SQV9CR19DVEwJCQkJCUJJVDQKKyNkZWZpbmUJCUZXX1JBX05fQ1RMCQkJCQlCSVQ1CisjZGVmaW5lCQlGV19QV1JfVFJLX0NUTAkJCQlCSVQ2CisjZGVmaW5lCQlGV19JUUtfQ1RMCQkJCQkJQklUNworI2RlZmluZQkJRldfQU5URU5OQV9TVwkJCQlCSVQ4CisjZGVmaW5lCQlGV19ESVNBQkxFX0FMTF9ETQkJCTAKKworI2RlZmluZQkJRldfUFdSX1RSS19QQVJBTV9DTFIJCTB4MDAwMGZmZmYKKyNkZWZpbmUJCUZXX1JBX1BBUkFNX0NMUgkJCQkweGZmZmYwMDAwCisKKyNkZWZpbmUJRldfQ01EX0lPX0NMUihfcGRldiwgX0JpdCkJCVwKKwl1ZGVsYXkoMTAwMCk7CQlcCisJKChzdHJ1Y3QgcjgxOTJfcHJpdiAqKWllZWU4MDIxMV9wcml2KF9wZGV2KSktPkZ3Q21kSU9NYXAgJj0gKH5fQml0KTsKKworI2RlZmluZQlGV19DTURfSU9fVVBEQVRFKF9wZGV2LCBfdmFsKQkJXAorCSgoc3RydWN0IHI4MTkyX3ByaXYgKilpZWVlODAyMTFfcHJpdihfcGRldikpLT5Gd0NtZElPTWFwID0gX3ZhbDsKKworI2RlZmluZQkJRldfQ01EX0lPX1NFVChfcGRldiwgX3ZhbCkgCVwKKwl3cml0ZV9uaWNfd29yZChfcGRldiwgTEJVU19NT05fQUREUiwgKHUxNilfdmFsKTsJXAorCUZXX0NNRF9JT19VUERBVEUoX3BkZXYsIF92YWwpOworCisjZGVmaW5lCQlGV19DTURfUEFSQV9TRVQoX3BkZXYsIF92YWwpIAkJXAorCXdyaXRlX25pY19kd29yZChfcGRldiwgTEJVU19BRERSX01BU0ssIF92YWwpOwlcCisJKChzdHJ1Y3QgcjgxOTJfcHJpdiAqKWllZWU4MDIxMV9wcml2KF9wZGV2KSktPkZ3Q21kSU9QYXJhbSA9IF92YWw7CisKKyNkZWZpbmUJCUZXX0NNRF9JT19RVUVSWShfcGRldikJKHUxNikoKChzdHJ1Y3QgcjgxOTJfcHJpdiAqKWllZWU4MDIxMV9wcml2KF9wZGV2KSktPkZ3Q21kSU9NYXApCisjZGVmaW5lCUZXX0NNRF9JT19QQVJBX1FVRVJZKF9wZGV2KQkodTMyKSgoKHN0cnVjdCByODE5Ml9wcml2ICopaWVlZTgwMjExX3ByaXYoX3BkZXYpKS0+RndDbWRJT1BhcmFtKQorCisKKwogYm9vbCBGaXJtd2FyZURvd25sb2FkOTJTKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTX2h3LmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU19ody5oCmluZGV4IDgyZWE5NmIuLmU2MmI3OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTX2h3LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNfaHcuaApAQCAtMSwyNSArMSwyMiBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKglDb3B5cmlnaHQoYykgMjAwOCwgIFJlYWxURUsgVGVjaG5vbG9neSBJbmMuIEFsbCBSaWdodCBSZXNlcnZlZC4KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBSZWFsdGVrIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKLSAqIE1vZHVsZToJX19JTkNfSEFMODE5MlNFUkVHX0gKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCiAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKICAqCi0gKiBOb3RlOgkxLiBEZWZpbmUgTWFjIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGNvcnJlc3BvbmRpbmcgYml0IG1hc2sgbWFwCi0gKgkJCTIuIENDWCByZWdpc3RlcgotICoJCQkzLiBCYWNrd2FyZCBjb21wYXRpYmxlIHJlZ2lzdGVyIHdpdGggdXNlbGVzcyBhZGRyZXNzLgotICoJCQk0LiBEZWZpbmUgOTJTVSByZXF1aXJlZCByZWdpc3RlciBhZGRyZXNzIGFuZCBkZWZpbml0aW9uLgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgogICoKLSAqCi0gKiBFeHBvcnQ6CUNvbnN0YW50cywgbWFjcm8sIGZ1bmN0aW9ucyhBUEkpLCBnbG9iYWwgdmFyaWFibGVzKE5vbmUpLgotICoKLSAqIEFiYnJldjoKLSAqCi0gKiBIaXN0b3J5OgotICoJCURhdGEJCVdobwkJUmVtYXJrCi0gKiAgICAgIDA4LzA3LzIwMDcgIE1IQyAgICAJMS4gUG9ydGluZyBmcm9tIDl4IHNlcmllcyBQSFlDRkcuaC4KLSAqCQkJCQkJCTIuIFJlb3JnYW5pemUgY29kZSBhcmNoaXRlY3R1cmUuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKICNpZm5kZWYgUjgxOTJTX0hXCiAjZGVmaW5lIFI4MTkyU19IVwogCkBAIC0yOSwyMSArMjYsMTQgQEAKIAlWRVJTSU9OXzgxOTJTX0NDVVQKIH1WRVJTSU9OXzgxOTJTLCpQVkVSU0lPTl84MTkyUzsKIAotLy8jaWZkZWYgUlRMODE5MlNVCiB0eXBlZGVmIGVudW0gX1ZFUlNJT05fODE5MlNVc2J7CiAJVkVSU0lPTl84MTkyU1VfQSwgLy9BLUN1dAogCVZFUlNJT05fODE5MlNVX0IsIC8vQi1DdXQKIAlWRVJTSU9OXzgxOTJTVV9DLCAvL0MtQ3V0CiB9VkVSU0lPTl84MTkyU1VzYiwgKlBWRVJTSU9OXzgxOTJTVXNiOwotLy8jZWxzZQotdHlwZWRlZiBlbnVtIF9WRVJTSU9OXzgxOXhVewotCVZFUlNJT05fODE5eFVfQSwgLy8gQS1jdXQKLQlWRVJTSU9OXzgxOXhVX0IsIC8vIEItY3V0Ci0JVkVSU0lPTl84MTl4VV9DLC8vIEMtY3V0Ci19VkVSU0lPTl84MTl4VSwqUFZFUlNJT05fODE5eFU7Ci0vLyNlbmRpZgogCi0vKiAyMDA3LzExLzE1IE1IIERlZmluZSBkaWZmZXJlbnQgUkYgdHlwZS4gKi8KKworLyogUkYgdHlwZS4gKi8KIHR5cGVkZWYJZW51bSBfUlRfUkZfVFlQRV9ERUZJTklUSU9OCiB7CiAJUkZfMVQyUiA9IDAsCkBAIC01MSw5ICs0MSw2IEBACiAJUkZfMlQyUiwKIAlSRl8xVDFSLAogCVJGXzJUMlJfR1JFRU4sCi0JLy9SRl8zVDNSLAotCS8vUkZfM1Q0UiwKLQkvL1JGXzRUNFIsCiAJUkZfODE5WF9NQVhfVFlQRQogfVJUX1JGX1RZUEVfREVGX0U7CiAKQEAgLTY4LDEyICs1NSwxMCBAQAogI2RlZmluZQlSVEw4MTg3X1JFUV9TRVRfUkVHUwkweDA1CiAKICNkZWZpbmUgTUFYX1RYX1VSQiA1Ci0jZGVmaW5lIE1BWF9SWF9VUkIgMTYKKyNkZWZpbmUgTUFYX1JYX1VSQiA4CiAKICNkZWZpbmUgUjgxODBfTUFYX1JFVFJZIDI1NQotLy8jZGVmaW5lIE1BWF9SWF9OT1JNQUxfVVJCIDMKLS8vI2RlZmluZSBNQVhfUlhfQ09NTUFORF9VUkIgMgotI2RlZmluZSBSWF9VUkJfU0laRSAJCTkxMDAKKyNkZWZpbmUgUlhfVVJCX1NJWkUgCQkweDQwMDAKIAogI2RlZmluZSBCQl9BTlRBVFRFTl9DSEFOMTQJMHgwYwogI2RlZmluZSBCQl9BTlRFTk5BX0IgCQkweDQwCkBAIC0xMzQsNyArMTE5LDYgQEAKICNkZWZpbmUgTVNSX0xJTktfRU5FRENBCSAgIAkoMTw8NCkKIAogCi0vLyNkZWZpbmUgQ21kOTM0NkNSXzkzNTZTRUwJKDE8PDQpCiAjZGVmaW5lIEVQUk9NX0NNRF9SRVNFUlZFRF9NQVNLIAkJCSgxPDw1KQogI2RlZmluZSBFUFJPTV9DTURfT1BFUkFUSU5HX01PREVfU0hJRlQgCTYKICNkZWZpbmUgRVBST01fQ01EX09QRVJBVElOR19NT0RFX01BU0sgCSgoMTw8Nyl8KDE8PDYpKQpAQCAtMTQ3LDEzICsxMzEsNiBAQAogI2RlZmluZSBFUFJPTV9XX1NISUZUIAkJCTEKICNkZWZpbmUgRVBST01fUl9TSElGVCAJCQkwCiAKLS8vI2RlZmluZQlNQUMwIAkJCSAweDAwMCwKLS8vI2RlZmluZQlNQUMxIAkJCSAweDAwMSwKLS8vI2RlZmluZQlNQUMyIAkJCSAweDAwMiwKLS8vI2RlZmluZQlNQUMzIAkJCSAweDAwMywKLS8vI2RlZmluZQlNQUM0IAkJCSAweDAwNCwKLS8vI2RlZmluZQlNQUM1IAkJCSAweDAwNSwKLQogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8vICAgICAgIDgxOTJTIFJlZ3NpdGVyIG9mZnNldCBkZWZpbml0aW9uCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNTI5LDE0ICs1MDYsNiBAQAogLy8gVVNCIFJQV00gcmVnaXN0ZXIKICNkZWZpbmUJVVNCX1JQV00JCQkweEZFNTgKIAotLy9GSVhMWk0gU1ZOX0JSQUNIIE5PVCBNT0QgSEVSRSwgSUYgTU9EIFJYIElTIExJVFRMRSBMT1cKLS8vI2lmICgoSEFMX0NPREVfQkFTRSA9PSBSVEw4MTkyX1MpICYmICAoREVWX0JVU19UWVBFPT1QQ0lfSU5URVJGQUNFKSkKLS8vI2RlZmluZQlSUFdNCQlQQ0lfUlBXTQotLy8jZWxpZiAoKEhBTF9DT0RFX0JBU0UgPT0gUlRMODE5Ml9TKSAmJiAgKERFVl9CVVNfVFlQRT09VVNCX0lOVEVSRkFDRSkpCi0vLyNkZWZpbmUJUlBXTQkJVVNCX1JQV00KLS8vI2VuZGlmCi0KLQogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyAgICAgICA4MTkwIFJlZ3NpdGVyIG9mZnNldCBkZWZpbml0aW9uCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTc3NywxMyArNzQ2LDExIEBACiAjZGVmaW5lCQlSQ1JfTVhETUFfT0ZGU0VUCQk4CiAjZGVmaW5lCQlSQ1JfRklGT19PRkZTRVQJCTEzCiAKLS8vaW4gOTJVIEZJWExaTQotLy8jaWZkZWYgUlRMODE5MlUKICNkZWZpbmUgUkNSX09OTFlFUkxQS1QJCUJJVDMxCQkJLy8gRWFybHkgUmVjZWl2aW5nIGJhc2VkIG9uIFBhY2tldCBTaXplLgogI2RlZmluZSBSQ1JfRU5DUzIJCQlCSVQzMAkJCS8vIEVuYWJsZSBDYXJyaWVyIFNlbnNlIERldGVjdGlvbiBNZXRob2QgMgogI2RlZmluZSBSQ1JfRU5DUzEJCQlCSVQyOQkJCS8vIEVuYWJsZSBDYXJyaWVyIFNlbnNlIERldGVjdGlvbiBNZXRob2QgMQogI2RlZmluZSBSQ1JfQUNLVFhCVwkJCShCSVQyNHxCSVQyNSkJCS8vIFRYQlcgU2V0dGluZyBvZiBBQ0sgZnJhbWVzCi0vLyNlbmRpZgorCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICAgICAgIDgxOTJTIChNU1IpIE1lZGlhIFN0YXR1cyBSZWdpc3RlcgkoT2Zmc2V0IDB4NEMsIDggYml0cykKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTI1OSwxNyArMTIyNiwxOCBAQAogI2RlZmluZQkJRUVQUk9NX0NIQU5ORUxfUExBTl9HTE9CQUxfRE9NQUlOCTB4OQogI2RlZmluZQkJRUVQUk9NX0NIQU5ORUxfUExBTl9XT1JMRF9XSURFXzEzCTB4QQogI2RlZmluZQkJRUVQUk9NX0NIQU5ORUxfUExBTl9CWV9IV19NQVNLCTB4ODAKKyNkZWZpbmUgCUVFUFJPTV9DSURfREVGQVVMVAkJCTB4MAorI2RlZmluZSAJRUVQUk9NX0NJRF9BTFBIQQkJCTB4MQorI2RlZmluZSAJRUVQUk9NX0NJRF9TZW5hbwkJCTB4MworI2RlZmluZQkJRUVQUk9NX0NJRF9DQU1FTwkJCTBYOAorI2RlZmluZSAJRUVQUk9NX0NJRF9TSVRFQ09NCQkJMHg5CisjZGVmaW5lIAlFRVBST01fQ0lEX0NPUkVHQQkJCTB4QgorI2RlZmluZSAJRUVQUk9NX0NJRF9FRElNQVhfQkVMS0lOCQkweEMKKyNkZWZpbmUJCUVFUFJPTV9DSURfU0VSQ09NTV9CRUxLSU4JCTB4RQorI2RlZmluZQkJRUVQUk9NX0NJRF9DQU1FTzEJCQkweEYKKyNkZWZpbmUgCUVFUFJPTV9DSURfV0hRTCAJCQkweEZFCisjZGVmaW5lCQlFRVBST01fQ0lEX05ldENvcmUJCQkweDUKIAotI2RlZmluZSAJCUVFUFJPTV9DSURfREVGQVVMVAkJCQkweDAKLSNkZWZpbmUgCQlFRVBST01fQ0lEX0FMUEhBCQkJCTB4MQotI2RlZmluZQkJRUVQUk9NX0NJRF9DQU1FTwkJCQkJMFg4Ci0jZGVmaW5lIAkJRUVQUk9NX0NJRF9TSVRFQ09NCQkJCTB4OQotCi0vLyNkZWZpbmUgRUVQUk9NX0NJRF9SVU5UT1AJCQkJCQkweDIKLS8vI2RlZmluZSBFRVBST01fQ0lEX1NlbmFvCQkJCQkJMHgzCi0vLyNkZWZpbmUgRUVQUk9NX0NJRF9UT1NISUJBCQkJCQkJMHg0Ci0vLyNkZWZpbmUgRUVQUk9NX0NJRF9OZXRDb3JlCQkJCQkJMHg1Ci0jZGVmaW5lIAkJRUVQUk9NX0NJRF9XSFFMIAkJCQkweEZFIC8vIGFkZGVkIGJ5IGNoaXlva28gZm9yIGR0bSwgMjAwOTAxMDgKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gMHgyYzAgRlcgQ29tbWFuZCBDb250cm9sIHJlZ2lzdGVyIGRlZmluaXRpb24sIGFkZGVkIGJ5IFJvZ2VyLCAyMDA4LjExLjI3LgpAQCAtMTI4MiwxOCArMTI1MCwzMiBAQAogI2RlZmluZQkJRldfSElHSF9QV1JfRU5BQkxFCQkJMHhmZDAwMDAwOQogI2RlZmluZQkJRldfVFhQV1JfVFJBQ0tfRU5BQkxFCQkweGZkMDAwMDE3CiAjZGVmaW5lCQlGV19UWFBXUl9UUkFDS19ESVNBQkxFCQkweGZkMDAwMDE4Ci0jZGVmaW5lCQlGV19SQV9SRVNFVAkJCQkJMHhmZDAwMDBhZgotI2RlZmluZQkJRldfUkFfQUNUSVZFCQkJCQkweGZkMDAwMGE2CisjZGVmaW5lCQlGV19UWFBXUl9UUkFDS19USEVSTUFMCQkweGZkMDAwMDE5CisjZGVmaW5lCQlGV19SQV9JTklUCQkJCQkJMHhmZDAwMDAyNgorI2RlZmluZQkJRldfUkFfSU9UX0JHX0NPTUIJCQkweGZkMDAwMDMwCisjZGVmaW5lCQlGV19SQV9JT1RfTl9DT01CCQkJCTB4ZmQwMDAwMzEKICNkZWZpbmUJCUZXX1JBX1JFRlJFU0gJCQkJCTB4ZmQwMDAwYTAKLSNkZWZpbmUJCUZXX1JBX0VOQUJMRV9CRwkJCQkweGZkMDAwMGFjCisjZGVmaW5lCQlGV19SQV9ESVNBQkxFCQkJCQkweGZkMDAwMGE0CisjZGVmaW5lCQlGV19SQV9BQ1RJVkUJCQkJCTB4ZmQwMDAwYTYKKyNkZWZpbmUJCUZXX1JBX0RJU0FCTEVfUlNTSV9NQVNLCQkweGZkMDAwMGFjCisjZGVmaW5lCQlGV19SQV9FTkFCTEVfUlNTSV9NQVNLCQkweGZkMDAwMGFkCisjZGVmaW5lCQlGV19SQV9SRVNFVAkJCQkJMHhmZDAwMDBhZgorI2RlZmluZQkJRldfRE1fRElTQUJMRQkJCQkJMHhmZDAwYWEwMAogI2RlZmluZQkJRldfSVFLX0VOQUJMRQkJCQkJMHhmMDAwMDAyMAogI2RlZmluZQkJRldfSVFLX1NVQ0NFU1MJCQkJMHgwMDAwZGRkZAogI2RlZmluZQkJRldfSVFLX0ZBSUwJCQkJCTB4MDAwMGZmZmYKICNkZWZpbmUJCUZXX09QX0ZBSUxVUkUJCQkJCTB4ZmZmZmZmZmYKLSNkZWZpbmUJCUZXX0RNX0RJU0FCTEUJCQkJCTB4ZmQwMGFhMDAKKyNkZWZpbmUJCUZXX1RYX0ZFRURCQUNLX05PTkUJCQkJMHhmYjAwMDAwMAorI2RlZmluZQkJRldfVFhfRkVFREJBQ0tfRFRNX0VOQUJMRQkJKEZXX1RYX0ZFRURCQUNLX05PTkUgfCAweDEpCisjZGVmaW5lCQlGV19UWF9GRUVEQkFDS19DQ1hfRU5BQkxFCQkoRldfVFhfRkVFREJBQ0tfTk9ORSB8IDB4MikKICNkZWZpbmUJCUZXX0JCX1JFU0VUX0VOQUJMRQkJCTB4ZmYwMDAwMGQKICNkZWZpbmUJCUZXX0JCX1JFU0VUX0RJU0FCTEUJCQkweGZmMDAwMDBlCi0KKyNkZWZpbmUJCUZXX0xQU19FTlRFUgkJCQkJMHhmZTAwMDAxMAorI2RlZmluZQkJRldfTFBTX0xFQVZFCQkJCQkweGZlMDAwMDExCisjZGVmaW5lCQlGV19JTkRJUkVDVF9SRUFECQkJCTB4ZjIwMDAwMDAKKyNkZWZpbmUJCUZXX0lORElSRUNUX1dSSVRFCQkJCTB4ZjIwMDAwMDEKKyNkZWZpbmUJCUZXX1RYQU5UX1NXSVRDSF9FTkFCTEUJCTB4ZmQwMDAwMjMKKyNkZWZpbmUJCUZXX1RYQU5UX1NXSVRDSF9ESVNBQkxFCQkweGZkMDAwMDI0CiAvLwogLy8tLS0tLS0tLS0tLS0tLTkyU1UgcmVxdWlyZSBkZWxldGUgb3IgbW92ZSB0byBvdGhlciBwbGFjZSBsYXRlcgogLy8KQEAgLTE0NjAsMzQgKzE0NDIsNCBAQAogI2RlZmluZQkJSEFMXzgxOTJTX0hXX0dQSU9fT0ZGX01BU0sJMHhGNwogI2RlZmluZQkJSEFMXzgxOTJTX0hXX0dQSU9fV1BTX0JJVAlCSVQ0CiAKLSNlbmRpZiAgLy9SODE5MlNfSFcKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNfcGh5LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU19waHkuYwppbmRleCBiNmMwZjE5Li5hNWZjMmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU19waHkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU19waHkuYwpAQCAtMSwzNSArMSwyMCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0gICAgIChjKSBDb3B5cmlnaHQgMjAwOCwgUmVhbFRFSyBUZWNobm9sb2dpZXMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotCi0gTW9kdWxlOgloYWw4MTkyc3BoeS5jCi0KLSBOb3RlOgkJTWVyZ2UgOTJTRS9TVSBQSFkgY29uZmlnIGFzIGJlbG93Ci0JCQkxLiBCQiByZWdpc3RlciBSL1cgQVBJCi0gCQkJMi4gUkYgcmVnaXN0ZXIgUi9XIEFQSQotIAkJCTMuIEluaXRpYWwgQkIvUkYvTUFDIGNvbmZpZyBieSByZWFkaW5nIEJCL01BQy9SRiB0eHQuCi0gCQkJMy4gUG93ZXIgc2V0dGluZyBBUEkKLSAJCQk0LiBDaGFubmVsIHN3aXRjaCBBUEkKLSAJCQk1LiBJbml0aWFsIGdhaW4gc3dpdGNoIEFQSS4KLSAJCQk2LiBPdGhlciBCQi9NQUMvUkYgQVBJLgotCi0gRnVuY3Rpb246CVBIWTogRXh0ZXJuIGZ1bmN0aW9uLCBwaHk6IGxvY2FsIGZ1bmN0aW9uCi0KLSBFeHBvcnQ6CVBIWV9GdW5jdGlvbk5hbWUKLQotIEFiYnJldjoJTk9ORQotCi0gSGlzdG9yeToKLQlEYXRhCQlXaG8JCVJlbWFyawotCTA4LzA4LzIwMDggIE1IQyAgICAJMS4gUG9ydCBmcm9tIDl4IHNlcmllcyBwaHljZmcuYwotCQkJCQkJMi4gUmVvcmdhbml6ZSBjb2RlIGFyY2ggYW5kIGFkIGRlc2NyaXB0aW9uLgotCQkJCQkJMy4gQ29sbGVjdCBzaW1pbGFyIGZ1bmN0aW9uLgotCQkJCQkJNC4gU2VwZXJhdGUgZXh0ZXJuL2xvY2FsIEFQSS4KLQkwOC8xMi8yMDA4CU1IQwkJV2UgbXVzdCBtZXJnZSBvciBtb3ZlIFVTQiBQSFkgcmVsYXRpdmUgZnVuY3Rpb24gbGF0ZXIuCi0JMTAvMDcvMjAwOAlNSEMJCUFkZCBJUSBjYWxpYnJhdGlvbiBmb3IgUEhZLihPbmx5IDFUMlIgbW9kZSBub3chISEpCi0JMTEvMDYvMjAwOAlNSEMJCUFkZCBUWCBQb3dlciBpbmRleCBQRyBmaWxlIHRvIGNvbmZpZyBpbiAweEV4eCByZWdpc3RlcgotCQkJCQkJYXJlYSB0byBtYXAgd2l0aCBFRVBST00vRUZVU0UgdHggcHdyIGluZGV4LgotCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgInI4MTkyVS5oIgogI2luY2x1ZGUgInI4MTkyVV9kbS5oIgpAQCAtNDIsMTYgKzI3LDEyIEBACiAKICNpbmNsdWRlICJpZWVlODAyMTEvZG90MTFkLmgiCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRGVmaW5lIExvY2FsIENvbnN0YW50LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIENoYW5uZWwgc3dpdGNoOlRoZSBzaXplIG9mIGNvbW1hbmQgdGFibGVzIGZvciBzd2l0Y2ggY2hhbm5lbCovCiAjZGVmaW5lIE1BWF9QUkVDTURfQ05UIDE2CiAjZGVmaW5lIE1BWF9SRkRFUEVORENNRF9DTlQgMTYKICNkZWZpbmUgTUFYX1BPU1RDTURfQ05UIDE2CiAjZGVmaW5lIE1BWF9ET1pFX1dBSVRJTkdfVElNRVNfOXggNjQKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1EZWZpbmUgbG9jYWwgdmFyaWFibGUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLy8gMjAwNC0wNS0xMQotCiBzdGF0aWMJdTMyCiBwaHlfQ2FsY3VsYXRlQml0U2hpZnQodTMyIEJpdE1hc2spOwogc3RhdGljCVJUX1NUQVRVUwpAQCAtODYsNyArNjcsNiBAQAogc3RhdGljIHU4IHBoeV9EYm1Ub1R4UHdySWR4KCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCBXSVJFTEVTU19NT0RFIFdpcmVsZXNzTW9kZSwgbG9uZyBQb3dlckluRGJtKTsKIHZvaWQgcGh5X1NldEZ3Q21kSU9DYWxsYmFjayhzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKIAotLy8jaWYgKChIQUxfQ09ERV9CQVNFID09IFJUTDgxOTJfUykgJiYgKERFVl9CVVNfVFlQRT09VVNCX0lOVEVSRkFDRSkpCiAvLwogLy8gRGVzY3JpcHRpb246CiAvLwlCYXNlIEJhbmQgcmVhZCBieSA0MTgxIHRvIG1ha2Ugc3VyZSB0aGF0IG9wZXJhdGlvbiBjb3VsZCBiZSBkb25lIGluIHVubGltaXRlZCBjeWNsZS4KQEAgLTk1LDggKzc1LDYgQEAKIC8vCQktCU9ubHkgdXNlIG9uIFJUTDgxOTJTIFVTQiBpbnRlcmZhY2UuCiAvLwkJLQlQQVNTSVZFIExFVkVMCiAvLwotLy8gQ3JlYXRlZCBieSBSb2dlciwgMjAwOC4wOS4wNi4KLS8vCiAvL3VzZSBpbiBwaHkgb25seQogdTMyIHBoeV9RdWVyeVVzYkJCUmVnKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIHUzMglSZWdBZGRyKQogewpAQCAtMTE4LDcgKzk2LDcgQEAKIAkJbXNsZWVwKDEpOyAvLyAxIG1zCiAKIAkJLy8gV2FpdCB0b28gbG9uZywgcmV0dXJuIEZBTFNFIHRvIGF2b2lkIHRvIGJlIHN0dWNrIGhlcmUuCi0JCWlmKChCQldhaXRDb3VudGVyID4gMTAwKSApLy98fFJUX1VTQl9DQU5OT1RfSU8oQWRhcHRlcikpCisJCWlmKChCQldhaXRDb3VudGVyID4gMTAwKSApCiAJCXsKIAkJCVJUX1RSQUNFKENPTVBfUkYsICJwaHlfUXVlcnlVc2JCQlJlZygpOiAoJWQpIFdhaXQgdG9vIGxvZ24gdG8gcXVlcnkgQkIhIVxuIiwgQkJXYWl0Q291bnRlcik7CiAJCQlyZXR1cm4gUmV0dXJuVmFsdWU7CkBAIC0xNjAsOSArMTM4LDYgQEAKIC8vIEFzc3VtcHRpb246CiAvLwkJLQlPbmx5IHVzZSBvbiBSVEw4MTkyUyBVU0IgaW50ZXJmYWNlLgogLy8JCS0JUEFTU0lWRSBMRVZFTAotLy8KLS8vIENyZWF0ZWQgYnkgUm9nZXIsIDIwMDguMDkuMDYuCi0vLwogLy91c2UgaW4gcGh5IG9ubHkKIHZvaWQKIHBoeV9TZXRVc2JCQlJlZyhzdHJ1Y3QgbmV0X2RldmljZSogZGV2LHUzMglSZWdBZGRyLHUzMiBEYXRhKQpAQCAtMTkxLDcgKzE2Niw2IEBACiAJfQogCiAJcHJpdi0+YkNoYW5nZUJCSW5Qcm9ncmVzcyA9IHRydWU7Ci0JLy9wcmludGsoIioqKioqKioqKioqKioqJXM6IFJlZ0FkZHI6JXggRGF0YToleFxuIiwgX19GVU5DVElPTl9fLFJlZ0FkZHIsIERhdGEpOwogCXdyaXRlX25pY19kd29yZChkZXYsIFJlZ0FkZHIsIERhdGEpOwogCiAJcHJpdi0+YkNoYW5nZUJCSW5Qcm9ncmVzcyA9IGZhbHNlOwpAQCAtMjE1LDkgKzE4OSw3IEBACiB7CiAKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JLy91MzIJdmFsdWUgID0gMCwgUmV0dXJuVmFsdWUgPSAwOwogCXUzMglSZXR1cm5WYWx1ZSA9IDA7Ci0JLy91MzIgCXRtcGxvbmcsdG1wbG9uZzI7CiAJdTgJUG9sbGluZ0NudCA9IDUwOwogCXU4CVJGV2FpdENvdW50ZXIgPSAwOwogCkBAIC0yMjksOCArMjAxLDYgQEAKIAkvLwogCXdoaWxlKHByaXYtPmJDaGFuZ2VSRkluUHJvZ3Jlc3MpCiAJewotCQkvL1BsYXRmb3JtUmVsZWFzZVNwaW5Mb2NrKEFkYXB0ZXIsIFJUX1JGX09QRVJBVEVfU1BJTkxPQ0spOwotCQkvL3NwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZl9sb2NrLCBmbGFncyk7CS8vTFpNLDA5MDMxOAogCQlkb3duKCZwcml2LT5yZl9zZW0pOwogCiAJCVJGV2FpdENvdW50ZXIgKys7CkBAIC0yNDQsMTQgKzIxNCwxMCBAQAogCQl9CiAJCWVsc2UKIAkJewotCQkJLy9QbGF0Zm9ybUFjcXVpcmVTcGluTG9jayhBZGFwdGVyLCBSVF9SRl9PUEVSQVRFX1NQSU5MT0NLKTsKIAkJfQogCX0KIAogCXByaXYtPmJDaGFuZ2VSRkluUHJvZ3Jlc3MgPSB0cnVlOwotCS8vUGxhdGZvcm1SZWxlYXNlU3BpbkxvY2soQWRhcHRlciwgUlRfUkZfT1BFUkFURV9TUElOTE9DSyk7Ci0KLQogCU9mZnNldCAmPSAweDNmOyAvL1JGX09mZnNldD0gMHgwMH4weDNGCiAKIAl3cml0ZV9uaWNfZHdvcmQoZGV2LCBSRl9CQl9DTURfQUREUiwgMHhGMDAwMDAwMnwKQEAgLTI2Nyw4ICsyMzMsNiBAQAogCS8vIERhdGEgRlcgcmVhZCBiYWNrLgogCVJldHVyblZhbHVlID0gcmVhZF9uaWNfZHdvcmQoZGV2LCBSRl9CQl9DTURfREFUQSk7CiAKLQkvL1BsYXRmb3JtQWNxdWlyZVNwaW5Mb2NrKEFkYXB0ZXIsIFJUX1JGX09QRVJBVEVfU1BJTkxPQ0spOwotCS8vc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cmZfbG9jaywgZmxhZ3MpOyAgIC8vTFpNLDA5MDMxOAogCXVwKCZwcml2LT5yZl9zZW0pOwogCXByaXYtPmJDaGFuZ2VSRkluUHJvZ3Jlc3MgPSBmYWxzZTsKIApAQCAtMzA2LDI3ICsyNzAsMjMgQEAKIAkvLwogCXdoaWxlKHByaXYtPmJDaGFuZ2VSRkluUHJvZ3Jlc3MpCiAJewotCQkvL1BsYXRmb3JtUmVsZWFzZVNwaW5Mb2NrKEFkYXB0ZXIsIFJUX1JGX09QRVJBVEVfU1BJTkxPQ0spOwotCQkvL3NwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZl9sb2NrLCBmbGFncyk7CS8vTFpNLDA5MDMxOAogCQlkb3duKCZwcml2LT5yZl9zZW0pOwogCiAJCVJGV2FpdENvdW50ZXIgKys7CiAJCVJUX1RSQUNFKENPTVBfUkYsICJwaHlfU2V0VXNiUkZSZWcoKTogV2FpdCAxIG1zICglZCB0aW1lcykuLi5cbiIsIFJGV2FpdENvdW50ZXIpOwogCQltc2xlZXAoMSk7IC8vIDEgbXMKIAotCQlpZigoUkZXYWl0Q291bnRlciA+IDEwMCkpLy8gfHwgUlRfVVNCX0NBTk5PVF9JTyhBZGFwdGVyKSkKKwkJaWYoKFJGV2FpdENvdW50ZXIgPiAxMDApKQogCQl7CiAJCQlSVF9UUkFDRShDT01QX1JGLCAicGh5X1NldFVzYlJGUmVnKCk6ICglZCkgV2FpdCB0b28gbG9nbiB0byBxdWVyeSBCQiEhXG4iLCBSRldhaXRDb3VudGVyKTsKIAkJCXJldHVybjsKIAkJfQogCQllbHNlCiAJCXsKLQkJCS8vUGxhdGZvcm1BY3F1aXJlU3BpbkxvY2soQWRhcHRlciwgUlRfUkZfT1BFUkFURV9TUElOTE9DSyk7CiAJCX0KIAl9CiAKIAlwcml2LT5iQ2hhbmdlUkZJblByb2dyZXNzID0gdHJ1ZTsKLQkvL1BsYXRmb3JtUmVsZWFzZVNwaW5Mb2NrKEFkYXB0ZXIsIFJUX1JGX09QRVJBVEVfU1BJTkxPQ0spOwogCiAKIAlSZWdBZGRyICY9IDB4M2Y7IC8vUkZfT2Zmc2V0PSAweDAwfjB4M0YKQEAgLTM0NywxOCArMzA3LDExIEBACiAJCVJUX1RSQUNFKENPTVBfUkYsICJwaHlfU2V0VXNiUkZSZWcoKTogU2V0IFJlZ0FkZHIoJSN4KSA9ICUjeCBGYWlsISEhXG4iLCBSZWdBZGRyLCBEYXRhKTsKIAl9CiAKLQkvL1BsYXRmb3JtQWNxdWlyZVNwaW5Mb2NrKEFkYXB0ZXIsIFJUX1JGX09QRVJBVEVfU1BJTkxPQ0spOwotCS8vc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cmZfbG9jaywgZmxhZ3MpOyAgIC8vTFpNLDA5MDMxOAogCXVwKCZwcml2LT5yZl9zZW0pOwogCXByaXYtPmJDaGFuZ2VSRkluUHJvZ3Jlc3MgPSBmYWxzZTsKIAogfQogCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tRGVmaW5lIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1GdW5jdGlvbiBCb2R5LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvLwogLy8gMS4gQkIgcmVnaXN0ZXIgUi9XIEFQSQogLy8KQEAgLTM3Niw4ICszMjksNiBAQAogKiBSZXR1cm46CQl1MzIJCQlEYXRhCQkJLy9UaGUgcmVhZGJhY2sgcmVnaXN0ZXIgdmFsdWUKICogTm90ZToJCVRoaXMgZnVuY3Rpb24gaXMgZXF1YWwgdG8gIkdldFJlZ1NldHRpbmciIGluIFBIWSBwcm9ncmFtbWluZyBndWlkZQogKi8KLS8vdXNlIHBoeSBkbSBjb3JlIDgyMjUgODI1NiA2MDUyCi0vL3UzMiBQSFlfUXVlcnlCQlJlZyhzdHJ1Y3QgbmV0X2RldmljZSogZGV2LHUzMgkJUmVnQWRkciwJdTMyCQlCaXRNYXNrKQogdTMyIHJ0bDgxOTJfUXVlcnlCQlJlZyhzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCB1MzIgUmVnQWRkciwgdTMyIEJpdE1hc2spCiB7CiAKQEAgLTM5MiwxMCArMzQzLDggQEAKIAkvLyBpbmZpbml0ZSBjeWNsZS4KIAkvLyAyMDA4LjA5LjA2LgogCS8vCi0vLyNpZiAoKEhBTF9DT0RFX0JBU0UgPT0gUlRMODE5Ml9TKSAmJiAoREVWX0JVU19UWVBFPT1VU0JfSU5URVJGQUNFKSkKIAlpZihJU19CQl9SRUdfT0ZGU0VUXzkyUyhSZWdBZGRyKSkKIAl7Ci0JCS8vaWYoUlRfVVNCX0NBTk5PVF9JTyhBZGFwdGVyKSkJcmV0dXJuCUZBTFNFOwogCiAJCWlmKChSZWdBZGRyICYgMHgwMykgIT0gMCkKIAkJewpAQCAtNDEzLDcgKzM2Miw3IEBACiAJQml0U2hpZnQgPSBwaHlfQ2FsY3VsYXRlQml0U2hpZnQoQml0TWFzayk7CiAJUmV0dXJuVmFsdWUgPSAoT3JpZ2luYWxWYWx1ZSAmIEJpdE1hc2spID4+IEJpdFNoaWZ0OwogCi0JLy9SVFBSSU5UKEZQSFksIFBIWV9CQlIsICgiQkJSIE1BU0s9MHgleCBBZGRyWzB4JXhdPTB4JXhcbiIsIEJpdE1hc2ssIFJlZ0FkZHIsIE9yaWdpbmFsVmFsdWUpKTsKKwogCVJUX1RSQUNFKENPTVBfUkYsICI8LS0tUEhZX1F1ZXJ5QkJSZWcoKTogUmVnQWRkciglI3gpLCBCaXRNYXNrKCUjeCksIE9yaWdpbmFsVmFsdWUoJSN4KVxuIiwgUmVnQWRkciwgQml0TWFzaywgT3JpZ2luYWxWYWx1ZSk7CiAJcmV0dXJuIChSZXR1cm5WYWx1ZSk7CiB9CkBAIC00MzUsOCArMzg0LDYgQEAKICogUmV0dXJuOgkJTm9uZQogKiBOb3RlOgkJVGhpcyBmdW5jdGlvbiBpcyBlcXVhbCB0byAiUHV0UmVnU2V0dGluZyIgaW4gUEhZIHByb2dyYW1taW5nIGd1aWRlCiAqLwotLy91c2UgcGh5IGRtIGNvcmUgODIyNSA4MjU2Ci0vL3ZvaWQgUEhZX1NldEJCUmVnKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsdTMyCQlSZWdBZGRyLAl1MzIJCUJpdE1hc2ssCXUzMgkJRGF0YQkpCiB2b2lkIHJ0bDgxOTJfc2V0QkJyZWcoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgdTMyIFJlZ0FkZHIsIHUzMiBCaXRNYXNrLCB1MzIgRGF0YSkKIHsKIAl1MzIJT3JpZ2luYWxWYWx1ZSwgQml0U2hpZnQsIE5ld1ZhbHVlOwpAQCAtNDUwLDcgKzM5Nyw2IEBACiAJLy8gaW5maW5pdGUgY3ljbGUuCiAJLy8gMjAwOC4wOS4wNi4KIAkvLwotLy8jaWYgKChIQUxfQ09ERV9CQVNFID09IFJUTDgxOTJfUykgJiYgKERFVl9CVVNfVFlQRT09VVNCX0lOVEVSRkFDRSkpCiAJaWYoSVNfQkJfUkVHX09GRlNFVF85MlMoUmVnQWRkcikpCiAJewogCQlpZigoUmVnQWRkciAmIDB4MDMpICE9IDApCkBAIC00ODAsNyArNDI2LDYgQEAKIAkJCXdyaXRlX25pY19kd29yZChkZXYsIFJlZ0FkZHIsIERhdGEpOwogCX0KIAotCS8vUlRfVFJBQ0UoQ09NUF9SRiwgIjwtLS1QSFlfU2V0QkJSZWcoKTogUmVnQWRkciglI3gpLCBCaXRNYXNrKCUjeCksIERhdGEoJSN4KVxuIiwgUmVnQWRkciwgQml0TWFzaywgRGF0YSk7CiAKIAlyZXR1cm47CiB9CkBAIC01MDUsOCArNDUwLDYgQEAKICogUmV0dXJuOgkJdTMyCQkJUmVhZGJhY2sgdmFsdWUKICogTm90ZToJCVRoaXMgZnVuY3Rpb24gaXMgZXF1YWwgdG8gIkdldFJGUmVnU2V0dGluZyIgaW4gUEhZIHByb2dyYW1taW5nIGd1aWRlCiAqLwotLy9pbiBkbSA4MjU2IGFuZCBwaHkKLS8vdTMyIFBIWV9RdWVyeVJGUmVnKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCVJGOTBfUkFESU9fUEFUSF9FIGVSRlBhdGgsIHUzMiBSZWdBZGRyLCB1MzIgQml0TWFzaykKIHUzMiBydGw4MTkyX3BoeV9RdWVyeVJGUmVnKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIFJGOTBfUkFESU9fUEFUSF9FIGVSRlBhdGgsIHUzMiBSZWdBZGRyLCB1MzIgQml0TWFzaykKIHsKIAl1MzIgT3JpZ2luYWxfVmFsdWUsIFJlYWRiYWNrX1ZhbHVlLCBCaXRTaGlmdDsvLywgZmxhZ3M7CkBAIC01MjcsOSArNDcwLDYgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyogMjAwOC8wMS8xNyBNSCBXZSBnZXQgYW5kIHJlbGVhc2Ugc3BpbiBsb2NrIHdoZW4gcmVhZGluZyBSRiByZWdpc3Rlci4gKi8KLQkvL1BsYXRmb3JtQWNxdWlyZVNwaW5Mb2NrKGRldiwgUlRfUkZfT1BFUkFURV9TUElOTE9DSyk7RklYTFpNCi0JLy9zcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cmZfbG9jaywgZmxhZ3MpOwkvL1lKLHRlc3QsMDkwMTEzCiAJZG93bigmcHJpdi0+cmZfc2VtKTsKIAkvLwogCS8vIDxSb2dlcl9Ob3Rlcz4gRHVlIHRvIDgwNTEgb3BlcmF0aW9uIGN5Y2xlIChsaW1pdGF0aW9uIGN5Y2xlOiA2dXMpIGFuZCAxLUJ5dGUgYWNjZXNzIGlzc3VlLCB3ZSBzaG91bGQgdXNlCkBAIC01MzcsMTcgKzQ3NywxMSBAQAogCS8vIGluZmluaXRlIGN5Y2xlLgogCS8vIDIwMDguMDkuMDYuCiAJLy8KLS8vI2lmIChIQUxfQ09ERV9CQVNFID09IFJUTDgxOTJfUyAmJiBERVZfQlVTX1RZUEU9PVVTQl9JTlRFUkZBQ0UpCi0JLy9pZihSVF9VU0JfQ0FOTk9UX0lPKEFkYXB0ZXIpKQlyZXR1cm4gRkFMU0U7CiAJT3JpZ2luYWxfVmFsdWUgPSBwaHlfUXVlcnlVc2JSRlJlZyhkZXYsIGVSRlBhdGgsIFJlZ0FkZHIpOwogCiAJQml0U2hpZnQgPSAgcGh5X0NhbGN1bGF0ZUJpdFNoaWZ0KEJpdE1hc2spOwogCVJlYWRiYWNrX1ZhbHVlID0gKE9yaWdpbmFsX1ZhbHVlICYgQml0TWFzaykgPj4gQml0U2hpZnQ7Ci0JLy9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZl9sb2NrLCBmbGFncyk7ICAgLy9ZSix0ZXN0LDA5MDExMwogCXVwKCZwcml2LT5yZl9zZW0pOwotCS8vUGxhdGZvcm1SZWxlYXNlU3BpbkxvY2soZGV2LCBSVF9SRl9PUEVSQVRFX1NQSU5MT0NLKTsKLQotCS8vUlRQUklOVChGUEhZLCBQSFlfUkZSLCAoIlJGUi0lZCBNQVNLPTB4JXggQWRkclsweCV4XT0weCV4XG4iLCBlUkZQYXRoLCBCaXRNYXNrLCBSZWdBZGRyLCBPcmlnaW5hbF9WYWx1ZSkpOwogCiAJcmV0dXJuIChSZWFkYmFja19WYWx1ZSk7CiB9CkBAIC01NzAsOCArNTA0LDYgQEAKICogUmV0dXJuOgkJTm9uZQogKiBOb3RlOgkJVGhpcyBmdW5jdGlvbiBpcyBlcXVhbCB0byAiUHV0UkZSZWdTZXR0aW5nIiBpbiBQSFkgcHJvZ3JhbW1pbmcgZ3VpZGUKICovCi0vL3VzZSBwaHkgIDgyMjUgODI1NgotLy92b2lkIFBIWV9TZXRSRlJlZyhzdHJ1Y3QgbmV0X2RldmljZSogZGV2LFJGOTBfUkFESU9fUEFUSF9FIGVSRlBhdGgsIHUzMglSZWdBZGRyLAl1MzIgQml0TWFzayx1MzIJRGF0YQkpCiB2b2lkIHJ0bDgxOTJfcGh5X1NldFJGUmVnKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIFJGOTBfUkFESU9fUEFUSF9FIGVSRlBhdGgsIHUzMiBSZWdBZGRyLCB1MzIgQml0TWFzaywgdTMyIERhdGEpCiB7CiAKQEAgLTU5MiwxOCArNTI0LDExIEBACiAJCXJldHVybjsKIAl9CiAKLQkvKiAyMDA4LzAxLzE3IE1IIFdlIGdldCBhbmQgcmVsZWFzZSBzcGluIGxvY2sgd2hlbiB3cml0aW5nIFJGIHJlZ2lzdGVyLiAqLwotCS8vUGxhdGZvcm1BY3F1aXJlU3BpbkxvY2soZGV2LCBSVF9SRl9PUEVSQVRFX1NQSU5MT0NLKTsKLQkvL3NwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZl9sb2NrLCBmbGFncyk7CS8vWUosdGVzdCwwOTAxMTMKIAlkb3duKCZwcml2LT5yZl9zZW0pOwogCS8vCiAJLy8gPFJvZ2VyX05vdGVzPiBEdWUgdG8gODA1MSBvcGVyYXRpb24gY3ljbGUgKGxpbWl0YXRpb24gY3ljbGU6IDZ1cykgYW5kIDEtQnl0ZSBhY2Nlc3MgaXNzdWUsIHdlIHNob3VsZCB1c2UKIAkvLyA0MTgxIHRvIGFjY2VzcyBCYXNlIEJhbmQgaW5zdGVhZCBvZiA4MDUxIG9uIFVTQiBpbnRlcmZhY2UgdG8gbWFrZSBzdXJlIHRoYXQgYWNjZXNzIGNvdWxkIGJlIGRvbmUgaW4KIAkvLyBpbmZpbml0ZSBjeWNsZS4KLQkvLyAyMDA4LjA5LjA2LgotCS8vCi0vLyNpZiAoSEFMX0NPREVfQkFTRSA9PSBSVEw4MTkyX1MgJiYgREVWX0JVU19UWVBFPT1VU0JfSU5URVJGQUNFKQotCQkvL2lmKFJUX1VTQl9DQU5OT1RfSU8oQWRhcHRlcikpCXJldHVybjsKIAogCQlpZiAoQml0TWFzayAhPSBiUkZSZWdPZmZzZXRNYXNrKSAvLyBSRiBkYXRhIGlzIDEyIGJpdHMgb25seQogCQl7CkBAIC02MTQsMTAgKzUzOSw3IEBACiAJCX0KIAkJZWxzZQogCQkJcGh5X1NldFVzYlJGUmVnKGRldiwgZVJGUGF0aCwgUmVnQWRkciwgRGF0YSk7Ci0JLy9QbGF0Zm9ybVJlbGVhc2VTcGluTG9jayhkZXYsIFJUX1JGX09QRVJBVEVfU1BJTkxPQ0spOwotCS8vc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cmZfbG9jaywgZmxhZ3MpOyAgIC8vWUosdGVzdCwwOTAxMTMKIAl1cCgmcHJpdi0+cmZfc2VtKTsKLQkvL1JUUFJJTlQoRlBIWSwgUEhZX1JGVywgKCJSRlctJWQgTUFTSz0weCV4IEFkZHJbMHgleF09MHgleFxuIiwgZVJGUGF0aCwgQml0TWFzaywgUmVnQWRkciwgRGF0YSkpOwogCVJUX1RSQUNFKENPTVBfUkYsICI8LS0tUEhZX1NldFJGUmVnKCk6IFJlZ0FkZHIoJSN4KSwgQml0TWFzayglI3gpLCBEYXRhKCUjeCksIGVSRlBhdGgoJSN4KVxuIiwKIAkJCVJlZ0FkZHIsIEJpdE1hc2ssIERhdGEsIGVSRlBhdGgpOwogCkBAIC02OTEsMjkgKzYxMyw5IEBACiAJc3RydWN0IHI4MTkyX3ByaXYgCSpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlwaHlfSW5pdEJCUkZSZWdpc3RlckRlZmluaXRpb24oZGV2KTsKIAotCS8vCi0JLy8gQ29uZmlnIEJCIGFuZCBBR0MKLQkvLwotCS8vc3dpdGNoKCBBZGFwdGVyLT5NZ250SW5mby5iUmVnSHdQYXJhRmlsZSApCi0JLy97Ci0JLy8JY2FzZSAwOgotCS8vCQlwaHlfQkI4MTkwX0NvbmZpZ19IYXJkQ29kZShkZXYpOwotCS8vCQlicmVhazsKIAotCS8vCWNhc2UgMToKIAkJCXJ0U3RhdHVzID0gcGh5X0JCODE5MlNfQ29uZmlnX1BhcmFGaWxlKGRldik7Ci0JLy8JCWJyZWFrOwogCi0JLy8JY2FzZSAyOgotCQkJLy8gUGFydGlhbCBNb2RpZnkuCi0JLy8JCXBoeV9CQjgxOTBfQ29uZmlnX0hhcmRDb2RlKGRldik7Ci0JLy8JCXBoeV9CQjgxOTJTX0NvbmZpZ19QYXJhRmlsZShkZXYpOwotCS8vCQlicmVhazsKLQotCS8vCWRlZmF1bHQ6Ci0JLy8JCXBoeV9CQjgxOTBfQ29uZmlnX0hhcmRDb2RlKGRldik7Ci0JLy8JCWJyZWFrOwotCS8vfQogCVBhdGhNYXAgPSAodTgpKHJ0bDgxOTJfUXVlcnlCQlJlZyhkZXYsIHJGUEdBMF9UeEluZm8sIDB4ZikgfAogCQkJCXJ0bDgxOTJfUXVlcnlCQlJlZyhkZXYsIHJPRkRNMF9UUnhQYXRoRW5hYmxlLCAweGYpKTsKIAlwcml2LT5yZl9wYXRobWFwID0gUGF0aE1hcDsKQEAgLTc3NCwxNSArNjc2LDEwIEBACiB9CiAKIAotLy8gSm9zZXBoIHRlc3Q6IG5ldyBpbml0aWFsaXplIG9yZGVyISEKLS8vIFRlc3Qgb25seSEhIFRoaXMgcGFydCBuZWVkIHRvIGJlIHJlLW9yZ2FuaXplZC4KLS8vIE5vdyBpdCBpcyBqdXN0IGZvciA4MjU2LgotLy91c2UgaW4gcGh5IG9ubHkKICNpZmRlZiBUT19ET19MSVNUCiBzdGF0aWMgUlRfU1RBVFVTCiBwaHlfQkI4MTkwX0NvbmZpZ19IYXJkQ29kZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQogewotCS8vUlRfQVNTRVJUKEZBTFNFLCAoIlRoaXMgZnVuY3Rpb24gaXMgbm90IGltcGxlbWVudCB5ZXQhISBcbiIpKTsKIAlyZXR1cm4gUlRfU1RBVFVTX1NVQ0NFU1M7CiB9CiAjZW5kaWYKQEAgLTgxMSw3ICs3MDgsNiBAQAogCXUzMiogCQkJUnRsODE5WFBIWV9SRUdBcnJheXRvWFRYUl9UYWJsZTsKIAl1MTYJCQkJUEhZX1JFR0FycmF5dG9YVFhSTGVuOwogCi0vLyNpZiAoSEFMX0NPREVfQkFTRSAhPSBSVEw4MTkyX1MpCiAKIAlpZihwcml2LT5yZl90eXBlID09IFJGXzFUMVIpCiAJewpAQCAtODIzLDExICs3MTksNiBAQAogCQlSdGw4MTlYUEhZX1JFR0FycmF5dG9YVFhSX1RhYmxlID0gUnRsODE5WFBIWV9SRUdfdG8xVDJSX0FycmF5OwogCQlQSFlfUkVHQXJyYXl0b1hUWFJMZW4gPSBQSFlfQ2hhbmdlVG9fMVQyUkFycmF5TGVuZ3RoOwogCX0KLQkvL2Vsc2UgaWYocHJpdi0+cmZfdHlwZSA9PSBSRl8yVDJSIHx8IHByaXYtPnJmX3R5cGUgPT0gUkZfMlQyUl9HUkVFTikKLQkvL3sKLQkvLwlSdGw4MTlYUEhZX1JFR0FycmF5dG9YVFhSX1RhYmxlID0gUnRsODE5WFBIWV9SRUdfdG8yVDJSX0FycmF5OwotCS8vCVBIWV9SRUdBcnJheXRvWFRYUkxlbiA9IFBIWV9DaGFuZ2VUb18yVDJSQXJyYXlMZW5ndGg7Ci0JLy99CiAJZWxzZQogCXsKIAkJcmV0dXJuIFJUX1NUQVRVU19GQUlMVVJFOwpAQCAtODUwLDE1ICs3NDEsMTEgQEAKIAkJCWVsc2UgaWYgKFJ0bDgxOVhQSFlfUkVHQXJyYXl0b1hUWFJfVGFibGVbaV0gPT0gMHhmOSkKIAkJCQl1ZGVsYXkoMSk7CiAJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgUnRsODE5WFBIWV9SRUdBcnJheXRvWFRYUl9UYWJsZVtpXSwgUnRsODE5WFBIWV9SRUdBcnJheXRvWFRYUl9UYWJsZVtpKzFdLCBSdGw4MTlYUEhZX1JFR0FycmF5dG9YVFhSX1RhYmxlW2krMl0pOwotCQkJLy9SVF9UUkFDRShDT01QX1NFTkQsCi0JCQkvLyJUaGUgUnRsODE5WFBIWV9SRUdBcnJheXRvWFRYUl9UYWJsZVswXSBpcyAlbHggUnRsODE5WFBIWV9SRUdBcnJheXRvWFRYUl9UYWJsZVsxXSBpcyAlbHggUnRsODE5WFBIWV9SRUdBcnJheXRvWFRYUl9UYWJsZVsyXSBpcyAlbHggXG4iLAotCQkJLy9SdGw4MTlYUEhZX1JFR0FycmF5dG9YVFhSX1RhYmxlW2ldLFJ0bDgxOVhQSFlfUkVHQXJyYXl0b1hUWFJfVGFibGVbaSsxXSwgUnRsODE5WFBIWV9SRUdBcnJheXRvWFRYUl9UYWJsZVtpKzJdKTsKIAkJfQogCX0KIAllbHNlIHsKIAkJUlRfVFJBQ0UoQ09NUF9TRU5ELCAicGh5X1NldEJCdG9EaWZmUkZXaXRoSGVhZGVyRmlsZSgpOiBDb25maWdUeXBlICE9IEJhc2VCYW5kX0NvbmZpZ19QSFlfUkVHXG4iKTsKIAl9Ci0vLyNlbmRpZgkvLyAjaWYgKEhBTF9DT0RFX0JBU0UgIT0gUlRMODE5Ml9TKQogCXJldHVybiBSVF9TVEFUVVNfU1VDQ0VTUzsKIH0KIApAQCAtODY5LDE0ICs3NTYsNiBAQAogewogCXN0cnVjdCByODE5Ml9wcml2IAkqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJUlRfU1RBVFVTCQkJcnRTdGF0dXMgPSBSVF9TVEFUVVNfU1VDQ0VTUzsKLQkvL3U4CQkJCXUyUmVnVmFsdWU7Ci0JLy91MTYJCQkJdTRSZWdWYWx1ZTsKLQkvL2NoYXIJCQkJc3pCQlJlZ0ZpbGVbXSA9IFJUTDgxOVhfUEhZX1JFRzsKLQkvL2NoYXIJCQkJc3pCQlJlZ0ZpbGUxVDJSW10gPSBSVEw4MTlYX1BIWV9SRUdfMVQyUjsKLQkvL2NoYXIJCQkJc3pCQlJlZ1BnRmlsZVtdID0gUlRMODE5WF9QSFlfUkVHX1BHOwotCS8vY2hhcgkJCQlzekFHQ1RhYmxlRmlsZVtdID0gUlRMODE5WF9BR0NfVEFCOwotCS8vY2hhcgkJCQlzekJCUmVndG8xVDFSRmlsZVtdID0gUlRMODE5WF9QSFlfUkVHX3RvMVQxUjsKLQkvL2NoYXIJCQkJc3pCQlJlZ3RvMVQyUkZpbGVbXSA9IFJUTDgxOVhfUEhZX1JFR190bzFUMlI7CiAKIAlSVF9UUkFDRShDT01QX0lOSVQsICI9PT5waHlfQkI4MTkyU19Db25maWdfUGFyYUZpbGVcbiIpOwogCkBAIC05NTYsNDIgKzgzNSwxNiBAQAogCXUzMgkJCQkJaSA9IDA7CiAJdTMyCQkJCQlBcnJheUxlbmd0aCA9IDA7CiAJdTMyKgkJCQkJcHRyQXJyYXk7Ci0JLy9zdHJ1Y3QgcjgxOTJfcHJpdiAJKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCi0vLyNpZiAoSEFMX0NPREVfQkFTRSAhPSBSVEw4MTkyX1MpCi0JLyppZihBZGFwdGVyLT5iSW5IY3RUZXN0KQotCXsKLQkJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfTE9VRCwgKCJSdGw4MTlYTUFDUEhZX0FycmF5RFRNXG4iKSk7Ci0JCUFycmF5TGVuZ3RoID0gTUFDUEhZX0FycmF5TGVuZ3RoRFRNOwotCQlwdHJBcnJheSA9IFJ0bDgxOVhNQUNQSFlfQXJyYXlEVE07Ci0JfQotCWVsc2UgaWYocEhhbERhdGEtPmJUWFBvd2VyRGF0YVJlYWRGcm9tRUVQT1JNKQotCXsKLS8vCQlSVF9UUkFDRShDT01QX0lOSVQsIERCR19MT1VELCAoIlJ0bDgxOVhNQUNQSFlfQXJyYXlfUEdcbiIpKTsKLS8vCQlBcnJheUxlbmd0aCA9IE1BQ1BIWV9BcnJheV9QR0xlbmd0aDsKLS8vCQlwdHJBcnJheSA9IFJ0bDgxOVhNQUNQSFlfQXJyYXlfUEc7Ci0KLQl9ZWxzZSovCiAJeyAvLzIwMDguMTEuMDYgTW9kaWZpZWQgYnkgdHlubGkuCiAJCVJUX1RSQUNFKENPTVBfSU5JVCwgIlJlYWQgUnRsODE5WE1BQ1BIWV9BcnJheVxuIik7CiAJCUFycmF5TGVuZ3RoID0gTUFDXzJUX0FycmF5TGVuZ3RoOwogCQlwdHJBcnJheSA9IFJ0bDgxOVhNQUNfQXJyYXk7CiAJfQogCi0JLypmb3IoaSA9IDAgO2kgPCBBcnJheUxlbmd0aDtpPWkrMyl7Ci0JCVJUX1RSQUNFKENPTVBfU0VORCwgREJHX0xPVUQsICgiVGhlIFJ0bDgxOVhNQUNQSFlfQXJyYXlbMF0gaXMgJWx4IFJ0bDgxOVhNQUNQSFlfQXJyYXlbMV0gaXMgJWx4IFJ0bDgxOVhNQUNQSFlfQXJyYXlbMl0gaXMgJWx4XG4iLHB0ckFycmF5W2ldLCBwdHJBcnJheVtpKzFdLCBwdHJBcnJheVtpKzJdKSk7Ci0JCWlmKHB0ckFycmF5W2ldID09IDB4MzE4KQotCQl7Ci0JCQlwdHJBcnJheVtpKzJdID0gMHgwMDAwMDgwMDsKLQkJCS8vRGJnUHJpbnQoInB0ckFycmF5W2ldLCBwdHJBcnJheVtpKzFdLCBwdHJBcnJheVtpKzJdID0gJXgsICV4LCAleFxuIiwKLQkJCS8vCXB0ckFycmF5W2ldLCBwdHJBcnJheVtpKzFdLCBwdHJBcnJheVtpKzJdKTsKLQkJfQotCQlQSFlfU2V0QkJSZWcoQWRhcHRlciwgcHRyQXJyYXlbaV0sIHB0ckFycmF5W2krMV0sIHB0ckFycmF5W2krMl0pOwotCX0qLwogCWZvcihpID0gMCA7aSA8IEFycmF5TGVuZ3RoO2k9aSsyKXsgLy8gQWRkIGJ5IHR5bmxpIGZvciAyIGNvbHVtbgogCQl3cml0ZV9uaWNfYnl0ZShkZXYsIHB0ckFycmF5W2ldLCAodTgpcHRyQXJyYXlbaSsxXSk7CiAJfQotLy8jZW5kaWYKIAlyZXR1cm4gUlRfU1RBVFVTX1NVQ0NFU1M7CiB9CiAKQEAgLTEwMTUsNDEgKzg2OCwxNCBAQAogcGh5X0NvbmZpZ0JCV2l0aEhlYWRlckZpbGUoc3RydWN0IG5ldF9kZXZpY2UqIGRldix1OCBDb25maWdUeXBlKQogewogCWludCAJCWk7Ci0JLy91OCAJCUFycmF5TGVuZ3RoOwogCXUzMioJUnRsODE5WFBIWV9SRUdBcnJheV9UYWJsZTsKIAl1MzIqCVJ0bDgxOVhBR0NUQUJfQXJyYXlfVGFibGU7CiAJdTE2CQlQSFlfUkVHQXJyYXlMZW4sIEFHQ1RBQl9BcnJheUxlbjsKLQkvL3N0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLS8vI2lmIChIQUxfQ09ERV9CQVNFICE9IFJUTDgxOTJfUykKLQkvKmlmKEFkYXB0ZXItPmJJbkhjdFRlc3QpCi0JewogCi0JCUFHQ1RBQl9BcnJheUxlbiA9IEFHQ1RBQl9BcnJheUxlbmd0aERUTTsKLQkJUnRsODE5WEFHQ1RBQl9BcnJheV9UYWJsZSA9IFJ0bDgxOVhBR0NUQUJfQXJyYXlEVE07Ci0KLQkJaWYocEhhbERhdGEtPlJGX1R5cGUgPT0gUkZfMlQ0UikKLQkJewotCQkJUEhZX1JFR0FycmF5TGVuID0gUEhZX1JFR0FycmF5TGVuZ3RoRFRNOwotCQkJUnRsODE5WFBIWV9SRUdBcnJheV9UYWJsZSA9IFJ0bDgxOVhQSFlfUkVHQXJyYXlEVE07Ci0JCX0KLQkJZWxzZSBpZiAocEhhbERhdGEtPlJGX1R5cGUgPT0gUkZfMVQyUikKLQkJewotCQkJUEhZX1JFR0FycmF5TGVuID0gUEhZX1JFR18xVDJSQXJyYXlMZW5ndGhEVE07Ci0JCQlSdGw4MTlYUEhZX1JFR0FycmF5X1RhYmxlID0gUnRsODE5WFBIWV9SRUdfMVQyUkFycmF5RFRNOwotCQl9Ci0KLQl9Ci0JZWxzZQotCSovCi0JLy97Ci0JLy8KLQkvLyAyMDA4LjExLjA2IE1vZGlmaWVkIGJ5IHR5bmxpLgotCS8vCiAJQUdDVEFCX0FycmF5TGVuID0gQUdDVEFCX0FycmF5TGVuZ3RoOwogCVJ0bDgxOVhBR0NUQUJfQXJyYXlfVGFibGUgPSBSdGw4MTlYQUdDVEFCX0FycmF5OwogCVBIWV9SRUdBcnJheUxlbiA9IFBIWV9SRUdfMlQyUkFycmF5TGVuZ3RoOyAvLyBEZWZhdWx0IFJGX3R5cGU6IDJUMlIKIAlSdGw4MTlYUEhZX1JFR0FycmF5X1RhYmxlID0gUnRsODE5WFBIWV9SRUdfQXJyYXk7Ci0JLy99CiAKIAlpZihDb25maWdUeXBlID09IEJhc2VCYW5kX0NvbmZpZ19QSFlfUkVHKQogCXsKQEAgLTEwNjgsNyArODk0LDYgQEAKIAkJCWVsc2UgaWYgKFJ0bDgxOVhQSFlfUkVHQXJyYXlfVGFibGVbaV0gPT0gMHhmOSkKIAkJCQl1ZGVsYXkoMSk7CiAJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgUnRsODE5WFBIWV9SRUdBcnJheV9UYWJsZVtpXSwgYk1hc2tEV29yZCwgUnRsODE5WFBIWV9SRUdBcnJheV9UYWJsZVtpKzFdKTsKLQkJCS8vUlRfVFJBQ0UoQ09NUF9TRU5ELCAiVGhlIFJ0bDgxOVhQSFlfUkVHQXJyYXlfVGFibGVbMF0gaXMgJWx4IFJ0bDgxOVhQSFlfUkVHQXJyYXlbMV0gaXMgJWx4IFxuIixSdGw4MTlYUEhZX1JFR0FycmF5X1RhYmxlW2ldLCBSdGw4MTlYUEhZX1JFR0FycmF5X1RhYmxlW2krMV0pOwogCiAJCX0KIAl9CkBAIC0xMDc4LDcgKzkwMyw2IEBACiAJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgUnRsODE5WEFHQ1RBQl9BcnJheV9UYWJsZVtpXSwgYk1hc2tEV29yZCwgUnRsODE5WEFHQ1RBQl9BcnJheV9UYWJsZVtpKzFdKTsKIAkJfQogCX0KLS8vI2VuZGlmCS8vICNpZiAoSEFMX0NPREVfQkFTRSAhPSBSVEw4MTkyX1MpCiAJcmV0dXJuIFJUX1NUQVRVU19TVUNDRVNTOwogfQogCkBAIC0xMTAzLDEyICs5MjcsOCBAQAogcGh5X0NvbmZpZ0JCV2l0aFBnSGVhZGVyRmlsZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2LHU4IENvbmZpZ1R5cGUpCiB7CiAJaW50IGk7Ci0JLy91OCBBcnJheUxlbmd0aDsKIAl1MzIqCVJ0bDgxOVhQSFlfUkVHQXJyYXlfVGFibGVfUEc7CiAJdTE2CVBIWV9SRUdBcnJheVBHTGVuOwotCS8vc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotLy8jaWYgKEhBTF9DT0RFX0JBU0UgIT0gUlRMODE5Ml9TKQotCS8vIERlZmF1bHQ6IHBIYWxEYXRhLT5SRl9UeXBlID0gUkZfMlQyUi4KIAogCVBIWV9SRUdBcnJheVBHTGVuID0gUEhZX1JFR19BcnJheV9QR0xlbmd0aDsKIAlSdGw4MTlYUEhZX1JFR0FycmF5X1RhYmxlX1BHID0gUnRsODE5WFBIWV9SRUdfQXJyYXlfUEc7CkBAIC0xMTMwLDE1ICs5NTAsMTMgQEAKIAkJCWVsc2UgaWYgKFJ0bDgxOVhQSFlfUkVHQXJyYXlfVGFibGVfUEdbaV0gPT0gMHhmOSkKIAkJCQl1ZGVsYXkoMSk7CiAJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgUnRsODE5WFBIWV9SRUdBcnJheV9UYWJsZV9QR1tpXSwgUnRsODE5WFBIWV9SRUdBcnJheV9UYWJsZV9QR1tpKzFdLCBSdGw4MTlYUEhZX1JFR0FycmF5X1RhYmxlX1BHW2krMl0pOwotCQkJLy9SVF9UUkFDRShDT01QX1NFTkQsICJUaGUgUnRsODE5WFBIWV9SRUdBcnJheV9UYWJsZV9QR1swXSBpcyAlbHggUnRsODE5WFBIWV9SRUdBcnJheV9UYWJsZV9QR1sxXSBpcyAlbHggXG4iLAotCQkJLy8JCVJ0bDgxOVhQSFlfUkVHQXJyYXlfVGFibGVfUEdbaV0sIFJ0bDgxOVhQSFlfUkVHQXJyYXlfVGFibGVfUEdbaSsxXSk7CiAJCX0KIAl9ZWxzZXsKIAkJUlRfVFJBQ0UoQ09NUF9TRU5ELCAicGh5X0NvbmZpZ0JCV2l0aFBnSGVhZGVyRmlsZSgpOiBDb25maWdUeXBlICE9IEJhc2VCYW5kX0NvbmZpZ19QSFlfUkVHXG4iKTsKIAl9CiAJcmV0dXJuIFJUX1NUQVRVU19TVUNDRVNTOwogCi19CS8qIHBoeV9Db25maWdCQldpdGhQZ0hlYWRlckZpbGUgKi8KK30KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRnVuY3Rpb246ICAgIFBIWV9Db25maWdSRldpdGhIZWFkZXJGaWxlKCkKQEAgLTExNTUsMTkgKzk3MywxNCBAQAogICoKICAqIE5vdGU6CQlEZWxheSBtYXkgYmUgcmVxdWlyZWQgZm9yIFJGIGNvbmZpZ3VyYXRpb24KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8vaW4gODI1NiBwaHlfUkY4MjU2X0NvbmZpZ19QYXJhRmlsZSBvbmx5Ci0vL1JUX1NUQVRVUyBQSFlfQ29uZmlnUkZXaXRoSGVhZGVyRmlsZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2LFJGOTBfUkFESU9fUEFUSF9FIGVSRlBhdGgpCiB1OCBydGw4MTkyX3BoeV9Db25maWdSRldpdGhIZWFkZXJGaWxlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIFJGOTBfUkFESU9fUEFUSF9FCWVSRlBhdGgpCiB7CiAKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJaW50CQkJaTsKLQkvL3UzMioJcFJGQXJyYXk7CiAJUlRfU1RBVFVTCXJ0U3RhdHVzID0gUlRfU1RBVFVTX1NVQ0NFU1M7CiAJdTMyCQkJKlJ0bDgxOVhSYWRpb0FfQXJyYXlfVGFibGU7CiAJdTMyCQkJKlJ0bDgxOVhSYWRpb0JfQXJyYXlfVGFibGU7Ci0JLy91MzIqCVJ0bDgxOVhSYWRpb0NfQXJyYXlfVGFibGU7Ci0JLy91MzIqCVJ0bDgxOVhSYWRpb0RfQXJyYXlfVGFibGU7CiAJdTE2CQkJUmFkaW9BX0FycmF5TGVuLFJhZGlvQl9BcnJheUxlbjsKIAogCXsJLy8yMDA4LjExLjA2IE1vZGlmaWVkIGJ5IHR5bmxpCkBAIC0xMTkwLDE4ICsxMDAzLDEyIEBACiAKIAlydFN0YXR1cyA9IFJUX1NUQVRVU19TVUNDRVNTOwogCi0JLy8gV2hlbiBpbml0aWFsaXphdGlvbiwgd2Ugd2FudCB0aGUgZGVsYXkgZnVuY3Rpb24obWRlbGF5KCksIGRlbGF5X3VzKCkKLQkvLyA9PT4gYWN0dWFsbHkgd2UgY2FsbCBQbGF0Zm9ybVN0YWxsRXhlY3V0aW9uKCkpIHRvIGRvIE5kaXNTdGFsbEV4ZWN1dGlvbigpCi0JLy8gW2J1c3kgd2FpdF0gaW5zdGVhZCBvZiBOZGlzTVNsZWVwKCkuIFNvIHdlIGFjcXVpcmUgUlRfSU5JVElBTF9TUElOTE9DSwotCS8vIHRvIHJ1biBhdCBEaXNwYXRjaCBsZXZlbCB0byBhY2hpdmUgaXQuCi0JLy9jb3NhIFBsYXRmb3JtQWNxdWlyZVNwaW5Mb2NrKEFkYXB0ZXIsIFJUX0lOSVRJQUxfU1BJTkxPQ0spOwogCiAJc3dpdGNoKGVSRlBhdGgpewogCQljYXNlIFJGOTBfUEFUSF9BOgogCQkJZm9yKGkgPSAwO2k8UmFkaW9BX0FycmF5TGVuOyBpPWkrMil7CiAJCQkJaWYoUnRsODE5WFJhZGlvQV9BcnJheV9UYWJsZVtpXSA9PSAweGZlKQogCQkJCQl7IC8vIERlYXkgc3BlY2lmaWMgbXMuIE9ubHkgUkYgY29uZmlndXJhdGlvbiByZXF1aXJlIGRlbGF5LgotLy8jaWYgKERFVl9CVVNfVFlQRSA9PSBVU0JfSU5URVJGQUNFKQogCQkJCQkJbWRlbGF5KDEwMDApOwogCQkJCX0KIAkJCQkJZWxzZSBpZiAoUnRsODE5WFJhZGlvQV9BcnJheV9UYWJsZVtpXSA9PSAweGZkKQpAQCAtMTIxMCw3ICsxMDE3LDYgQEAKIAkJCQkJCW1kZWxheSgxKTsKIAkJCQkJZWxzZSBpZiAoUnRsODE5WFJhZGlvQV9BcnJheV9UYWJsZVtpXSA9PSAweGZiKQogCQkJCQkJdWRlbGF5KDUwKTsKLQkJCQkJCS8vUGxhdGZvcm1TdGFsbEV4ZWN1dGlvbig1MCk7CiAJCQkJCWVsc2UgaWYgKFJ0bDgxOVhSYWRpb0FfQXJyYXlfVGFibGVbaV0gPT0gMHhmYSkKIAkJCQkJCXVkZWxheSg1KTsKIAkJCQkJZWxzZSBpZiAoUnRsODE5WFJhZGlvQV9BcnJheV9UYWJsZVtpXSA9PSAweGY5KQpAQCAtMTIyNSw3ICsxMDMxLDYgQEAKIAkJCWZvcihpID0gMDtpPFJhZGlvQl9BcnJheUxlbjsgaT1pKzIpewogCQkJCWlmKFJ0bDgxOVhSYWRpb0JfQXJyYXlfVGFibGVbaV0gPT0gMHhmZSkKIAkJCQkJeyAvLyBEZWF5IHNwZWNpZmljIG1zLiBPbmx5IFJGIGNvbmZpZ3VyYXRpb24gcmVxdWlyZSBkZWxheS4KLS8vI2lmIChERVZfQlVTX1RZUEUgPT0gVVNCX0lOVEVSRkFDRSkKIAkJCQkJCW1kZWxheSgxMDAwKTsKIAkJCQl9CiAJCQkJCWVsc2UgaWYgKFJ0bDgxOVhSYWRpb0JfQXJyYXlfVGFibGVbaV0gPT0gMHhmZCkKQEAgLTEyODEsNyArMTA4Niw2IEBACiAJUkY5MF9SQURJT19QQVRIX0UJZVJGUGF0aAogCSkKIHsKLQkvL3N0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlSVF9TVEFUVVMJCQlydFN0YXR1cyA9IFJUX1NUQVRVU19TVUNDRVNTOwogCXUzMgkJCQlpLCBDaGVja1RpbWVzID0gNCx1bFJlZ1JlYWQgPSAwOwogCXUzMgkJCQlXcml0ZUFkZHJbNF07CkBAIC0xMzAyLDcgKzExMDYsNiBAQAogCQlzd2l0Y2goQ2hlY2tCbG9jaykKIAkJewogCQljYXNlIEhXOTBfQkxPQ0tfTUFDOgotCQkJLy9SVF9BU1NFUlQoRkFMU0UsICgiUEhZX0NoZWNrQkJSRk9LKCk6IE5ldmVyIFdyaXRlIDB4MTAwIGhlcmUhIikpOwogCQkJUlRfVFJBQ0UoQ09NUF9JTklULCAiUEhZX0NoZWNrQkJSRk9LKCk6IE5ldmVyIFdyaXRlIDB4MTAwIGhlcmUhXG4iKTsKIAkJCWJyZWFrOwogCkBAIC0xMzEzLDE4ICsxMTE2LDEyIEBACiAJCQlicmVhazsKIAogCQljYXNlIEhXOTBfQkxPQ0tfUkY6Ci0JCQkvLyBXaGVuIGluaXRpYWxpemF0aW9uLCB3ZSB3YW50IHRoZSBkZWxheSBmdW5jdGlvbihtZGVsYXkoKSwgZGVsYXlfdXMoKQotCQkJLy8gPT0+IGFjdHVhbGx5IHdlIGNhbGwgUGxhdGZvcm1TdGFsbEV4ZWN1dGlvbigpKSB0byBkbyBOZGlzU3RhbGxFeGVjdXRpb24oKQotCQkJLy8gW2J1c3kgd2FpdF0gaW5zdGVhZCBvZiBOZGlzTVNsZWVwKCkuIFNvIHdlIGFjcXVpcmUgUlRfSU5JVElBTF9TUElOTE9DSwotCQkJLy8gdG8gcnVuIGF0IERpc3BhdGNoIGxldmVsIHRvIGFjaGl2ZSBpdC4KLQkJCS8vY29zYSBQbGF0Zm9ybUFjcXVpcmVTcGluTG9jayhkZXYsIFJUX0lOSVRJQUxfU1BJTkxPQ0spOwogCQkJV3JpdGVEYXRhW2ldICY9IDB4ZmZmOwogCQkJcnRsODE5Ml9waHlfU2V0UkZSZWcoZGV2LCBlUkZQYXRoLCBXcml0ZUFkZHJbSFc5MF9CTE9DS19SRl0sIGJSRlJlZ09mZnNldE1hc2ssIFdyaXRlRGF0YVtpXSk7CiAJCQkvLyBUT0RPOiB3ZSBzaG91bGQgbm90IGRlbGF5IGZvciBzdWNoIGEgbG9uZyB0aW1lLiBBc2sgU0QzCiAJCQltZGVsYXkoMTApOwogCQkJdWxSZWdSZWFkID0gcnRsODE5Ml9waHlfUXVlcnlSRlJlZyhkZXYsIGVSRlBhdGgsIFdyaXRlQWRkcltIVzkwX0JMT0NLX1JGXSwgYk1hc2tEV29yZCk7CiAJCQltZGVsYXkoMTApOwotCQkJLy9jb3NhIFBsYXRmb3JtUmVsZWFzZVNwaW5Mb2NrKGRldiwgUlRfSU5JVElBTF9TUElOTE9DSyk7CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgpAQCAtMTMzOCw3ICsxMTM1LDYgQEAKIAkJLy8KIAkJaWYodWxSZWdSZWFkICE9IFdyaXRlRGF0YVtpXSkKIAkJewotCQkJLy9SVF9UUkFDRShDT01QX0ZQR0EsICAoInVsUmVnUmVhZDogJXgsIFdyaXRlRGF0YTogJXggXG4iLCB1bFJlZ1JlYWQsIFdyaXRlRGF0YVtpXSkpOwogCQkJUlRfVFJBQ0UoQ09NUF9FUlIsICJyZWFkIGJhY2sgZXJyb3IocmVhZDoleCwgd3JpdGU6JXgpXG4iLCB1bFJlZ1JlYWQsIFdyaXRlRGF0YVtpXSk7CiAJCQlydFN0YXR1cyA9IFJUX1NUQVRVU19GQUlMVVJFOwogCQkJYnJlYWs7CkBAIC0xMzQ4LDcgKzExNDQsNiBAQAogCXJldHVybiBydFN0YXR1czsKIH0KIAotLy9ubyB1c2UgdGVtcCBpbiB3aW5kb3dzIGRyaXZlcgogI2lmZGVmIFRPX0RPX0xJU1QKIHZvaWQKIFBIWV9TZXRSRlBvd2VyU3RhdGU4MTkyU1VzYigKQEAgLTEzNTksNyArMTE1NCw2IEBACiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCWJvb2wJCQlXYWl0U2h1dERvd24gPSBGQUxTRTsKIAl1MzIJCQlEV29yZENvbnRlbnQ7Ci0JLy9SRjkwX1JBRElPX1BBVEhfRQllUkZQYXRoOwogCXU4CQkJCWVSRlBhdGg7CiAJQkJfUkVHSVNURVJfREVGSU5JVElPTl9UCSpwUGh5UmVnOwogCkBAIC0xMzY4LDcgKzExNjIsNiBAQAogCiAJcHJpdi0+U2V0UkZQb3dlclN0YXRlSW5Qcm9ncmVzcyA9IFRSVUU7CiAKLQkvLyBUT0RPOiBFbWlseSwgMjAwNi4xMS4yMSwgd2Ugc2hvdWxkIHJld3JpdGUgdGhpcyBmdW5jdGlvbgogCiAJaWYoUkZQb3dlclN0YXRlPT1SRl9TSFVUX0RPV04pCiAJewpAQCAtMTQyMCwyMiArMTIxMywyMCBAQAogCiAJY2FzZSBSRl84MjU4OgogCQlicmVhazsKLQl9Ly8gc3dpdGNoKCBwcml2LT5yZl9jaGlwICkKKwl9CiAKIAlwcml2LT5TZXRSRlBvd2VyU3RhdGVJblByb2dyZXNzID0gRkFMU0U7CiB9CiAjZW5kaWYKIAogI2lmZGVmIFJUTDgxOTJVCi0vL25vIHVzZSB0ZW1wIGluIHdpbmRvd3MgZHJpdmVyCiB2b2lkCiBQSFlfVXBkYXRlSW5pdGlhbEdhaW4oCiAJc3RydWN0IG5ldF9kZXZpY2UqIGRldgogCSkKIHsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAJKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCS8vdW5zaWduZWQgY2hhcgkJCSpJR1RhYmxlOwotCS8vdTgJCQlESUdfQ3VycmVudEluaXRpYWxHYWluID0gNDsKKwogCiAJc3dpdGNoKHByaXYtPnJmX2NoaXApCiAJewpAQCAtMTQ1Niw3ICsxMjQ3LDYgQEAKIH0KICNlbmRpZgogCi0vL1lKLG1vZGlmaWVkLDA5MDEwNwogdm9pZCBQSFlfR2V0SFdSZWdPcmlnaW5hbFZhbHVlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCiB7CiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwpAQCAtMTYyNSw4ICsxNDE1LDYgQEAKIAkvLyBUcmFuY2VpdmVyIExTU0kgUmVhZGJhY2sgUEkgbW9kZQogCXByaXYtPlBIWVJlZ0RlZltSRjkwX1BBVEhfQV0ucmZMU1NJUmVhZEJhY2tQaSA9IFRyYW5zY2VpdmVyQV9IU1BJX1JlYWRiYWNrOwogCXByaXYtPlBIWVJlZ0RlZltSRjkwX1BBVEhfQl0ucmZMU1NJUmVhZEJhY2tQaSA9IFRyYW5zY2VpdmVyQl9IU1BJX1JlYWRiYWNrOwotCS8vcEhhbERhdGEtPlBIWVJlZ0RlZltSRjkwX1BBVEhfQ10ucmZMU1NJUmVhZEJhY2tQaSA9IHJGUEdBMF9YQ19MU1NJUmVhZEJhY2s7Ci0JLy9wSGFsRGF0YS0+UEhZUmVnRGVmW1JGOTBfUEFUSF9EXS5yZkxTU0lSZWFkQmFja1BpID0gckZQR0EwX1hEX0xTU0lSZWFkQmFjazsKIAogfQogCkBAIC0xNjM3LDkgKzE0MjUsNyBAQAogLy8JQXNzdW1wdGlvbjogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGV4ZWN1dGVkIGluIHJlLXNjaGR1bGFibGUgY29udGV4dCwKIC8vCQlpZS4gUEFTU0lWRV9MRVZFTC4KIC8vCi0vLwkwNTA4MjMsIGJ5IHJjbmprby4KLS8vbm90IHVuZGVyc3RhbmQgaXQgc2VlbSdzIHVzZSBpbiBpbml0Ci0vL1NldEh3UmVnODE5MlNVc2ItLS0+SGFsRnVuYy5TZXRId1JlZ0hhbmRsZXIKKwogYm9vbCBQSFlfU2V0UkZQb3dlclN0YXRlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIFJUX1JGX1BPV0VSX1NUQVRFIGVSRlBvd2VyU3RhdGUpCiB7CiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwpAQCAtMTY2NSw4ICsxNDUxLDYgQEAKIHsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJYm9vbAkJCWJSZXN1bHQgPSBUUlVFOwotCS8vdTgJCWVSRlBhdGg7Ci0JLy91OAkJaSwgUXVldWVJRDsKIAl1OCAJCXUxYlRtcDsKIAogCWlmKHByaXYtPlNldFJGUG93ZXJTdGF0ZUluUHJvZ3Jlc3MgPT0gVFJVRSkKQEAgLTE2OTcsOSArMTQ4MSw2IEBACiAJCQkJCQlicmVhazsKIAkJCQkvLwogCQkJCS8vUkYgT2ZmL1NsZWVwIHNlcXVlbmNlLiBEZXNpZ25lZC90ZXN0ZWQgZnJvbSBTRDQgU2NvdHQsIFNEMSBHcmVudCBhbmQgSm9uYm9uLgotCQkJCS8vIEFkZGVkIGJ5IEJydWNlLCAyMDA4LTExLTIyLgotCQkJCS8vCi0JCQkJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAkJCQkvLyAoMCkgRGlzYWJsZSBGVyBCQiByZXNldCBjaGVja2luZwogCQkJCXdyaXRlX25pY19kd29yZChkZXYsIFdGTTUsIEZXX0JCX1JFU0VUX0RJU0FCTEUpOwogCkBAIC0xNzI4LDcgKzE1MDksNiBAQAogCiAJCQlkZWZhdWx0OgogCQkJCWJSZXN1bHQgPSBGQUxTRTsKLQkJCQkvL1JUX0FTU0VSVChGQUxTRSwgKCJwaHlfU2V0UkZQb3dlclN0YXRlODE5MlNVKCk6IHVua25vd24gc3RhdGUgdG8gc2V0OiAweCVYISEhXG4iLCBlUkZQb3dlclN0YXRlKSk7CiAJCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CkBAIC0xODYwLDcgKzE2NDAsNiBAQAogIHZvaWQgUEhZX1NldFR4UG93ZXJMZXZlbDgxOTJTKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIHU4CWNoYW5uZWwpCiB7CiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCS8vSEFMX0RBVEFfVFlQRQkJKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKGRldik7CiAJdTgJcG93ZXJsZXZlbCA9ICh1OClFRVBST01fRGVmYXVsdF9UeFBvd2VyLCBwb3dlcmxldmVsT0ZETTI0RyA9IDB4MTA7CiAJczggCWFudF9wd3JfZGlmZiA9IDA7CiAJdTMyCXU0UmVnVmFsdWU7CkBAIC0xOTA5LDE0ICsxNjg4LDYgQEAKIAkJCS8vIFJGIEIgSFQgT0ZETSBwd3ItUkZBIEhUIE9GRE0gcHdyCiAJCWFudF9wd3JfZGlmZiA9IAlwcml2LT5SZlR4UHdyTGV2ZWxPZmRtMlRbMV1baW5kZXhdIC0KIAkJCQkJCXByaXYtPlJmVHhQd3JMZXZlbE9mZG0yVFswXVtpbmRleF07Ci0JCQkvLyBSRiBCIChIVCBPRkRNIHB3citsZWdhY3ktaHQtZGlmZikgLShSRkEgSFQgT0ZETSBwd3IrbGVnYWN5LWh0LWRpZmYpCi0JCS8vIFdlIGNhbiBub3QgaGFuZGxlIFBhdGggQiZBIEhUL0xlZ2FjeSBwd3IgZGlmZiBmb3IgOTJTIG5vdy4KLQotCQkvL1JUUFJJTlQoRlBIWSwgUEhZX1RYUFdSLCAoIkNILSVkIEhUNDAgQS9CIFB3ciBpbmRleCA9ICV4LyV4KCVkLyVkKVxuIiwKLQkJLy9jaGFubmVsLCBwcml2LT5SZlR4UHdyTGV2ZWxPZmRtMlRbMF1baW5kZXhdLAotCQkvL3ByaXYtPlJmVHhQd3JMZXZlbE9mZG0yVFsxXVtpbmRleF0sCi0JCS8vcHJpdi0+UmZUeFB3ckxldmVsT2ZkbTJUWzBdW2luZGV4XSwKLQkJLy9wcml2LT5SZlR4UHdyTGV2ZWxPZmRtMlRbMV1baW5kZXhdKSk7CiAKIAkJaHQyMHB3clswXSA9IGh0NDBwd3JbMF0gPSBwcml2LT5SZlR4UHdyTGV2ZWxPZmRtMlRbMF1baW5kZXhdOwogCQlodDIwcHdyWzFdID0gaHQ0MHB3clsxXSA9IHByaXYtPlJmVHhQd3JMZXZlbE9mZG0yVFsxXVtpbmRleF07CkBAIC0xOTQ5LDEwICsxNzIwLDYgQEAKIAkJCS8vIFJGIEIgSFQgT0ZETSBwd3ItUkZBIEhUIE9GRE0gcHdyCiAJCQlpZiAocHJpdi0+cmZfdHlwZSA9PSBSRl8yVDJSKQogCQkJCWFudF9wd3JfZGlmZiA9IGh0MjBwd3JbMV0gLSBodDIwcHdyWzBdOwotCi0JCQkvL1JUUFJJTlQoRlBIWSwgUEhZX1RYUFdSLAotCQkJLy8oIkhUMjAgdG8gSFQ0MCBwd3JkaWZmW0EvQl09JWQvJWQsIGFudF9wd3JfZGlmZj0lZChCLUE9JWQtJWQpXG4iLAotCQkJLy9wd3JkaWZmWzBdLCBwd3JkaWZmWzFdLCBhbnRfcHdyX2RpZmYsIGh0MjBwd3JbMV0sIGh0MjBwd3JbMF0pKTsKIAkJfQogCiAJCS8vIEJhbmQgRWRnZSBzY2hlbWUgaXMgZW5hYmxlZCBmb3IgRkNDIG1vZGUKQEAgLTE5OTcsMTggKzE3NjQsMTIgQEAKIAkJCXsKIAkJCQlpZiAoY2hhbm5lbCA8PSAxIHx8IGNoYW5uZWwgPj0gMTEpCiAJCQkJewotCQkJCQkvL1JUUFJJTlQoRlBIWSwgUEhZX1RYUFdSLAotCQkJCQkvLygiSFQyMCBCYW5kLWVkZ2UgcHdyZGlmZltBL0JdPSVkLyVkLCBhbnRfcHdyX2RpZmY9JWQoQi1BPSVkLSVkKVxuIiwKLQkJCQkJLy9wd3JkaWZmWzBdLCBwd3JkaWZmWzFdLCBhbnRfcHdyX2RpZmYsIGh0MjBwd3JbMV0sIGh0MjBwd3JbMF0pKTsKIAkJCQl9CiAJCQl9CiAJCQllbHNlCiAJCQl7CiAJCQkJaWYgKGNoYW5uZWwgPD0gMyB8fCBjaGFubmVsID49IDkpCiAJCQkJewotCQkJCQkvL1JUUFJJTlQoRlBIWSwgUEhZX1RYUFdSLAotCQkJCQkvLygiSFQ0MCBCYW5kLWVkZ2UgcHdyZGlmZltBL0JdPSVkLyVkLCBhbnRfcHdyX2RpZmY9JWQoQi1BPSVkLSVkKVxuIiwKLQkJCQkJLy9wd3JkaWZmWzBdLCBwd3JkaWZmWzFdLCBhbnRfcHdyX2RpZmYsIGh0NDBwd3JbMV0sIGh0NDBwd3JbMF0pKTsKIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTIwMjEsMTAgKzE3ODIsNiBAQAogCWlmKGFudF9wd3JfZGlmZiA8IC04KQogCQlhbnRfcHdyX2RpZmYgPSAtODsKIAotCQkvL1JUUFJJTlQoRlBIWSwgUEhZX1RYUFdSLAotCQkvLygiQ0NLL0hUIFBvd2VyIGluZGV4ID0gJXgvJXgoJWQvJWQpLCBhbnRfcHdyX2RpZmY9JWRcbiIsCi0JCS8vcG93ZXJsZXZlbCwgcG93ZXJsZXZlbE9GRE0yNEcsIHBvd2VybGV2ZWwsIHBvd2VybGV2ZWxPRkRNMjRHLCBhbnRfcHdyX2RpZmYpKTsKLQogCQlhbnRfcHdyX2RpZmYgJj0gMHhmOwogCiAJCS8vIEFudGVubmEgVFggcG93ZXIgZGlmZmVyZW5jZQpAQCAtMjA1MCw3ICsxODA3LDYgQEAKIAkvLyBUT0RPOgogCS8vIDEuIDgwMi4xMWggcG93ZXIgY29udHJhaW50CiAJLy8KLQkvLyAwNzEwMTEsIGJ5IHJjbmprby4KIAkvLwogI2lmZGVmIFRPRE8gLy9XQiwgMTFoIGhhcyBub3QgaW1wbGVtZW50ZWQgbm93LgogCWlmKAlwcml2LT5pZWVlODAyMTEtPml3X21vZGUgIT0gSVdfTU9ERV9JTkZSQSAmJiBwcml2LT5iV2l0aENjeENlbGxQd3IgJiYKQEAgLTIwOTUsOCArMTg1MSw2IEBACiAJc3dpdGNoKHByaXYtPnJmX2NoaXApCiAJewogCQljYXNlIFJGXzgyMjU6Ci0JCQkvL1BIWV9TZXRSRjgyMjVDY2tUeFBvd2VyKGRldiwgcG93ZXJsZXZlbCk7Ci0JCQkvL1BIWV9TZXRSRjgyMjVPZmRtVHhQb3dlcihkZXYsIHBvd2VybGV2ZWxPRkRNMjRHKTsKIAkJYnJlYWs7CiAKIAkJY2FzZSBSRl84MjU2OgpAQCAtMjEyMSw4ICsxODc1LDYgQEAKIC8vCiAvLwlUT0RPOgogLy8JCUEgbW9kZS4KLS8vCUJ5IEJydWNlLCAyMDA4LTAyLTA0LgotLy8gICAgbm8gdXNlIHRlbXAKIGJvb2wgUEhZX1VwZGF0ZVR4UG93ZXJEYm04MTkyUyhzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCBsb25nIHBvd2VySW5EYm0pCiB7CiAJc3RydWN0IHI4MTkyX3ByaXYgCSpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKQEAgLTIxNjQsOCArMTkxNiw2IEBACiAJRGVzY3JpcHRpb246CiAJCVdoZW4gYmVhY29uIGludGVydmFsIGlzIGNoYW5nZWQsIHRoZSB2YWx1ZXMgb2YgdGhlCiAJCWh3IHJlZ2lzdGVycyBzaG91bGQgYmUgbW9kaWZpZWQuCi0JQnkgdHlubGksIDIwMDguMTAuMjQuCi0KICovCiAKIGV4dGVybiB2b2lkIFBIWV9TZXRCZWFjb25Id1JlZygJc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgdTE2IEJlYWNvbkludGVydmFsKQpAQCAtMjE3Myw4ICsxOTIzLDYgQEAKIAl1MzIgTmV3QmVhY29uTnVtOwogCiAJTmV3QmVhY29uTnVtID0gQmVhY29uSW50ZXJ2YWwgKjMyIC0gNjQ7Ci0JLy9QbGF0Zm9ybUVGSU9Xcml0ZTRCeXRlKEFkYXB0ZXIsIFdGTTMrNCwgTmV3QmVhY29uTnVtKTsKLQkvL1BsYXRmb3JtRUZJT1dyaXRlNEJ5dGUoQWRhcHRlciwgV0ZNMywgMHhCMDI2MDA3Qyk7CiAJd3JpdGVfbmljX2R3b3JkKGRldiwgV0ZNMys0LCBOZXdCZWFjb25OdW0pOwogCXdyaXRlX25pY19kd29yZChkZXYsIFdGTTMsIDB4QjAyNjAwN0MpOwogfQpAQCAtMjE4NCw3ICsxOTMyLDYgQEAKIC8vCQlNYXAgZEJtIGludG8gVHggcG93ZXIgaW5kZXggYWNjb3JkaW5nIHRvCiAvLwkJY3VycmVudCBIVyBtb2RlbCwgZm9yIGV4YW1wbGUsIFJGIGFuZCBQQSwgYW5kCiAvLwkJY3VycmVudCB3aXJlbGVzcyBtb2RlLgotLy8JQnkgQnJ1Y2UsIDIwMDgtMDEtMjkuCiAvLyAgICB1c2UgaW4gcGh5IG9ubHkKIHN0YXRpYyB1OCBwaHlfRGJtVG9UeFB3cklkeCgKIAlzdHJ1Y3QgbmV0X2RldmljZSogZGV2LApAQCAtMjE5Miw3ICsxOTM5LDYgQEAKIAlsb25nCQkJUG93ZXJJbkRibQogCSkKIHsKLQkvL3N0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAl1OAkJCQlUeFB3cklkeCA9IDA7CiAJbG9uZwkJCQlPZmZzZXQgPSAwOwogCkBAIC0yMjAyLDcgKzE5NDgsNiBAQAogCS8vIDNkYm0sIGFuZCBPRkRNIEhUIGVxdWFscyB0byAwZGJtIHJlcGVjdGl2ZWx5LgogCS8vIE5vdGU6CiAJLy8JVGhlIG1hcHBpbmcgbWF5IGJlIGRpZmZlcmVudCBieSBkaWZmZXJlbnQgTklDcy4gRG8gbm90IHVzZSB0aGlzIGZvcm11bGEgZm9yIHdoYXQgbmVlZHMgYWNjdXJhdGUgcmVzdWx0LgotCS8vIEJ5IEJydWNlLCAyMDA4LTAxLTI5LgogCS8vCiAJc3dpdGNoKFdpcmVsZXNzTW9kZSkKIAl7CkBAIC0yMjM4LDcgKzE5ODMsNiBAQAogLy8JCU1hcCBUeCBwb3dlciBpbmRleCBpbnRvIGRCbSBhY2NvcmRpbmcgdG8KIC8vCQljdXJyZW50IEhXIG1vZGVsLCBmb3IgZXhhbXBsZSwgUkYgYW5kIFBBLCBhbmQKIC8vCQljdXJyZW50IHdpcmVsZXNzIG1vZGUuCi0vLwlCeSBCcnVjZSwgMjAwOC0wMS0yOS4KIC8vICAgIHVzZSBpbiBwaHkgb25seQogc3RhdGljIGxvbmcgcGh5X1R4UHdySWR4VG9EYm0oCiAJc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKQEAgLTIyNTUsNyArMTk5OSw2IEBACiAJLy8gM2RibSwgYW5kIE9GRE0gSFQgZXF1YWxzIHRvIDBkYm0gcmVwZWN0aXZlbHkuCiAJLy8gTm90ZToKIAkvLwlUaGUgbWFwcGluZyBtYXkgYmUgZGlmZmVyZW50IGJ5IGRpZmZlcmVudCBOSUNzLiBEbyBub3QgdXNlIHRoaXMgZm9ybXVsYSBmb3Igd2hhdCBuZWVkcyBhY2N1cmF0ZSByZXN1bHQuCi0JLy8gQnkgQnJ1Y2UsIDIwMDgtMDEtMjkuCiAJLy8KIAlzd2l0Y2goV2lyZWxlc3NNb2RlKQogCXsKQEAgLTIzMjcsOSArMjA3MCw2IEBACiB2b2lkIFBIWV9Jbml0aWFsR2FpbjgxOTJTKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsdTggT3BlcmF0aW9uCSkKIHsKIAotCS8vc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCS8vdTMyCQkJCQlCaXRNYXNrOwotCS8vdTgJCQkJCWluaXRpYWxfZ2FpbjsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjM1MywxMSArMjA5Myw2IEBACiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCXU4CSAJCQlyZWdCd09wTW9kZTsKIAotCS8vcmV0dXJuOwotCi0JLy8gQWRkZWQgaXQgZm9yIDIwLzQwIG1oeiBzd2l0Y2ggdGltZSBldmFsdWF0aW9uIGJ5IGd1YW5nYW4gMDcwNTMxCi0JLy91MzIJCQkJTm93TCwgTm93SDsKLQkvL3U4Qnl0ZQkJCQlCZWdpblRpbWUsIEVuZFRpbWU7CiAJdTgJCQkJcmVnUlJTUl9SU0M7CiAKIAlSVF9UUkFDRShDT01QX1NXQlcsICI9PT5TZXRCV01vZGVDYWxsYmFjazgxOTBQY2koKSAgU3dpdGNoIHRvICVzIGJhbmR3aWR0aFxuIiwgXApAQCAtMjM3MiwxMCArMjEwNyw2IEBACiAJaWYoIXByaXYtPnVwKQogCQlyZXR1cm47CiAKLQkvLyBBZGRlZCBpdCBmb3IgMjAvNDAgbWh6IHN3aXRjaCB0aW1lIGV2YWx1YXRpb24gYnkgZ3VhbmdhbiAwNzA1MzEKLQkvL05vd0wgPSByZWFkX25pY19kd29yZChkZXYsIFRTRlIpOwotCS8vTm93SCA9IHJlYWRfbmljX2R3b3JkKGRldiwgVFNGUis0KTsKLQkvL0JlZ2luVGltZSA9ICgodThCeXRlKU5vd0ggPDwgMzIpICsgTm93TDsKIAogCS8vMy8vCiAJLy8zLy88MT5TZXQgTUFDIHJlZ2lzdGVyCkBAIC0yMzg2LDggKzIxMTcsNiBAQAogCXN3aXRjaChwcml2LT5DdXJyZW50Q2hhbm5lbEJXKQogCXsKIAkJY2FzZSBIVF9DSEFOTkVMX1dJRFRIXzIwOgotCQkJLy9pZihwcml2LT5jYXJkXzgxOTJfdmVyc2lvbiA+PSBWRVJTSU9OXzgxOTJTX0JDVVQpCi0JCQkvLwl3cml0ZV9uaWNfYnl0ZShkZXYsIHJGUEdBMF9BbmFsb2dQYXJhbWV0ZXIyLCAweDU4KTsKIAogCQkJcmVnQndPcE1vZGUgfD0gQldfT1BNT0RFXzIwTUhaOwogCQkgICAgICAgCS8vIDIwMDcvMDIvMDcgTWFyayBieSBFbWlseSBiZWNhc3VlIHdlIGhhdmUgbm90IHZlcmlmeSB3aGV0aGVyIHRoaXMgcmVnaXN0ZXIgd29ya3MKQEAgLTIzOTUsOCArMjEyNCw2IEBACiAJCQlicmVhazsKIAogCQljYXNlIEhUX0NIQU5ORUxfV0lEVEhfMjBfNDA6Ci0JCQkvL2lmKHByaXYtPmNhcmRfODE5Ml92ZXJzaW9uID49IFZFUlNJT05fODE5MlNfQkNVVCkKLQkJCS8vCXdyaXRlX25pY19ieXRlKGRldiwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjIsIDB4MTgpOwogCiAJCQlyZWdCd09wTW9kZSAmPSB+QldfT1BNT0RFXzIwTUhaOwogICAgICAgICAJCS8vIDIwMDcvMDIvMDcgTWFyayBieSBFbWlseSBiZWNhc3VlIHdlIGhhdmUgbm90IHZlcmlmeSB3aGV0aGVyIHRoaXMgcmVnaXN0ZXIgd29ya3MKQEAgLTI0MjEsMTIgKzIxNDgsNiBAQAogCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9SRk1PRCwgYlJGTU9ELCAweDApOwogCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMV9SRk1PRCwgYlJGTU9ELCAweDApOwogCi0JCQkvLyBDb3JyZWN0IHRoZSB0eCBwb3dlciBmb3IgQ0NLIHJhdGUgaW4gNDBNLiBTdWdnZXN0IGJ5IFlOLCAyMDA3MTIwNwotCQkJLy8gSXQgaXMgc2V0IGluIFR4IGRlc2NyaXB0b3IgZm9yIDgxOTJ4IHNlcmllcwotCQkJLy93cml0ZV9uaWNfZHdvcmQoZGV2LCByQ0NLMF9UeEZpbHRlcjEsIDB4MWExYjAwMDApOwotCQkJLy93cml0ZV9uaWNfZHdvcmQoZGV2LCByQ0NLMF9UeEZpbHRlcjIsIDB4MDkwZTEzMTcpOwotCQkJLy93cml0ZV9uaWNfZHdvcmQoZGV2LCByQ0NLMF9EZWJ1Z1BvcnQsIDB4MDAwMDAyMDQpOwotCiAJCQlpZiAocHJpdi0+Y2FyZF84MTkyX3ZlcnNpb24gPj0gVkVSU0lPTl84MTkyU19CQ1VUKQogCQkJCXdyaXRlX25pY19ieXRlKGRldiwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjIsIDB4NTgpOwogCkBAIC0yNDM4LDE2ICsyMTU5LDExIEBACiAJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX1JGTU9ELCBiUkZNT0QsIDB4MSk7CiAJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0ExX1JGTU9ELCBiUkZNT0QsIDB4MSk7CiAKLQkJCS8vIENvcnJlY3QgdGhlIHR4IHBvd2VyIGZvciBDQ0sgcmF0ZSBpbiA0ME0uIFN1Z2dlc3QgYnkgWU4sIDIwMDcxMjA3Ci0JCQkvL3dyaXRlX25pY19kd29yZChkZXYsIHJDQ0swX1R4RmlsdGVyMSwgMHgzNTM2MDAwMCk7Ci0JCQkvL3dyaXRlX25pY19kd29yZChkZXYsIHJDQ0swX1R4RmlsdGVyMiwgMHgxMjFjMjUyZSk7Ci0JCQkvL3dyaXRlX25pY19kd29yZChkZXYsIHJDQ0swX0RlYnVnUG9ydCwgMHgwMDAwMDQwOSk7CiAKIAkJCS8vIFNldCBDb250cm9sIGNoYW5uZWwgdG8gdXBwZXIgb3IgbG93ZXIuIFRoZXNlIHNldHRpbmdzIGFyZSByZXF1aXJlZCBvbmx5IGZvciA0ME1IegogCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJDQ0swX1N5c3RlbSwgYkNDS1NpZGVCYW5kLCAocHJpdi0+bkN1cjQwTWh6UHJpbWVTQz4+MSkpOwogCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJPRkRNMV9MU1RGLCAweEMwMCwgcHJpdi0+bkN1cjQwTWh6UHJpbWVTQyk7CiAKLQkJCS8vcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9BbmFsb2dQYXJhbWV0ZXIxLCAweDAwMzAwMDAwLCAzKTsKIAkJCWlmIChwcml2LT5jYXJkXzgxOTJfdmVyc2lvbiA+PSBWRVJTSU9OXzgxOTJTX0JDVVQpCiAJCQkJd3JpdGVfbmljX2J5dGUoZGV2LCByRlBHQTBfQW5hbG9nUGFyYW1ldGVyMiwgMHgxOCk7CiAKQEAgLTI0NjEsMTEgKzIxNzcsNiBAQAogCX0KIAkvL1NraXAgb3ZlciBzZXR0aW5nIG9mIEotbW9kZSBpbiBCQiByZWdpc3RlciBoZXJlLiBEZWZhdWx0IHZhbHVlIGlzICJOb25lIEogbW9kZSIuIEVtaWx5IDIwMDcwMzE1CiAKLQkvLyBBZGRlZCBpdCBmb3IgMjAvNDAgbWh6IHN3aXRjaCB0aW1lIGV2YWx1YXRpb24gYnkgZ3VhbmdhbiAwNzA1MzEKLQkvL05vd0wgPSByZWFkX25pY19kd29yZChkZXYsIFRTRlIpOwotCS8vTm93SCA9IHJlYWRfbmljX2R3b3JkKGRldiwgVFNGUis0KTsKLQkvL0VuZFRpbWUgPSAoKHU4Qnl0ZSlOb3dIIDw8IDMyKSArIE5vd0w7Ci0JLy9SVF9UUkFDRShDT01QX1NDQU4sIERCR19MT1VELCAoIlNldEJXTW9kZUNhbGxiYWNrODE5MFBjaTogdGltZSBvZiBTZXRCV01vZGUgPSAlSTY0ZCB1cyFcbiIsIChFbmRUaW1lIC0gQmVnaW5UaW1lKSkpOwogCiAJLy8zPDM+U2V0IFJGIHJlbGF0ZWQgcmVnaXN0ZXIKIAlzd2l0Y2goIHByaXYtPnJmX2NoaXAgKQpAQCAtMjUxNiwzNiArMjIyNywxMSBAQAogICoKICAqIE5vdGU6CQlXZSBkbyBub3QgdGFrZSBqIG1vZGUgaW50byBjb25zaWRlcmF0aW9uIG5vdwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLy9leHRlcm4gdm9pZCBQSFlfU2V0QldNb2RlODE5MlMoCXN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0vLwlIVF9DSEFOTkVMX1dJRFRICUJhbmR3aWR0aCwJLy8gMjBNIG9yIDQwTQotLy8JSFRfRVhUQ0hOTF9PRkZTRVQJT2Zmc2V0CQkvLyBVcHBlciwgTG93ZXIsIG9yIERvbid0IGNhcmUKIHZvaWQgcnRsODE5Ml9TZXRCV01vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgSFRfQ0hBTk5FTF9XSURUSAlCYW5kd2lkdGgsIEhUX0VYVENITkxfT0ZGU0VUIE9mZnNldCkKIHsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJSFRfQ0hBTk5FTF9XSURUSCB0bXBCVyA9IHByaXYtPkN1cnJlbnRDaGFubmVsQlc7CiAKLQotCS8vIE1vZGlmaWVkIGl0IGZvciAyMC80MCBtaHogc3dpdGNoIGJ5IGd1YW5nYW4gMDcwNTMxCi0KLQkvL3JldHVybjsKLQotCS8vaWYocHJpdi0+U3dDaG5sSW5Qcm9ncmVzcykKLS8vCWlmKHBNZ250SW5mby0+YlNjYW5JblByb2dyZXNzKQotLy8JewotLy8JCVJUX1RSQUNFKENPTVBfU0NBTiwgREJHX0xPVUQsICgiU2V0QldNb2RlODE5MFBjaSgpICVzIEV4aXQgYmVjYXVzZSBiU2NhbkluUHJvZ3Jlc3MhXG4iLAotLy8JCQkJCUJhbmR3aWR0aCA9PSBIVF9DSEFOTkVMX1dJRFRIXzIwPyIyME1IeiI6IjQwTUh6IikpOwotLy8JCXJldHVybjsKLS8vCX0KLQotLy8JaWYocHJpdi0+U2V0QldNb2RlSW5Qcm9ncmVzcykKLS8vCXsKLS8vCQkvLyBNb2RpZmllZCBpdCBmb3IgMjAvNDAgbWh6IHN3aXRjaCBieSBndWFuZ2FuIDA3MDUzMQotLy8JCVJUX1RSQUNFKENPTVBfU0NBTiwgREJHX0xPVUQsICgiU2V0QldNb2RlODE5MFBjaSgpICVzIGNhbmNlbCBsYXN0IHRpbWVyIGJlY2F1c2UgU2V0QldNb2RlSW5Qcm9ncmVzcyFcbiIsCi0vLwkJCQkJQmFuZHdpZHRoID09IEhUX0NIQU5ORUxfV0lEVEhfMjA/IjIwTUh6IjoiNDBNSHoiKSk7Ci0vLwkJUGxhdGZvcm1DYW5jZWxUaW1lcihkZXYsICZwcml2LT5TZXRCV01vZGVUaW1lcik7Ci0vLwkJLy9yZXR1cm47Ci0vLwl9Ci0KIAlpZihwcml2LT5TZXRCV01vZGVJblByb2dyZXNzKQogCQlyZXR1cm47CiAKQEAgLTI1NjAsNyArMjI0Niw3IEBACiAJZWxzZQogCQlwcml2LT5uQ3VyNDBNaHpQcmltZVNDID0gSEFMX1BSSU1FX0NITkxfT0ZGU0VUX0RPTlRfQ0FSRTsKIAotCWlmKChwcml2LT51cCkgKS8vICYmICEoUlRfQ0FOTk9UX0lPKEFkYXB0ZXIpICYmIEFkYXB0ZXItPmJJblNldFBvd2VyKSApCisJaWYoKHByaXYtPnVwKSApCiAJewogCVNldEJXTW9kZUNhbGxiYWNrODE5MlNVc2JXb3JrSXRlbShkZXYpOwogCX0KQEAgLTI1NzgsNyArMjI2NCw2IEBACiAKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJdTMyCQlkZWxheTsKLQkvL2Jvb2wJCQlyZXQ7CiAKIAlSVF9UUkFDRShDT01QX0NILCAiPT0+U3dDaG5sQ2FsbGJhY2s4MTkwUGNpKCksIHN3aXRjaCB0byBjaGFubmVsICVkXG4iLCBwcml2LT5jaGFuKTsKIApAQCAtMjU5NSwxNiArMjI4MCwxMSBAQAogCQlpZighcHJpdi0+U3dDaG5sSW5Qcm9ncmVzcykKIAkJCWJyZWFrOwogCi0JCS8vaWYoIXBoeV9Td0NobmxTdGVwQnlTdGVwKGRldiwgcHJpdi0+Q3VycmVudENoYW5uZWwsICZwcml2LT5Td0NobmxTdGFnZSwgJnByaXYtPlN3Q2hubFN0ZXAsICZkZWxheSkpCiAJCWlmKCFwaHlfU3dDaG5sU3RlcEJ5U3RlcChkZXYsIHByaXYtPmNoYW4sICZwcml2LT5Td0NobmxTdGFnZSwgJnByaXYtPlN3Q2hubFN0ZXAsICZkZWxheSkpCiAJCXsKIAkJCWlmKGRlbGF5PjApCiAJCQl7CiAJCQkJbWRlbGF5KGRlbGF5KTsKLQkJCQkvL1BsYXRmb3JtU2V0VGltZXIoZGV2LCAmcHJpdi0+U3dDaG5sVGltZXIsIGRlbGF5KTsKLQkJCQkvL21vZF90aW1lcigmcHJpdi0+U3dDaG5sVGltZXIsICBqaWZmaWVzICsgTVNFQ1MoZGVsYXkpKTsKLQkJCQkvLz09PlBIWV9Td0NobmxDYWxsYmFjazgxOTJTKGRldik7IGZvciA5MnNlCi0JCQkJLy89PT5Td0NobmxDYWxsYmFjazgxOTJTVXNiKGRldikgZm9yIDkyc3UKIAkJCX0KIAkJCWVsc2UKIAkJCWNvbnRpbnVlOwpAQCAtMjYxOCwxMiArMjI5OCw5IEBACiB9CiAKIC8vIENhbGwgYWZ0ZXIgaW5pdGlhbGl6YXRpb24KLS8vZXh0ZXJuIHZvaWQgUEhZX1N3Q2hubDgxOTJTKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCXU4IGNoYW5uZWwpCiB1OCBydGw4MTkyX3BoeV9Td0Nobmwoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgdTggY2hhbm5lbCkKIHsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JLy91OCAJCQl0bXBjaGFubmVsID1jaGFubmVsOwotCS8vYm9vbAkJCWJSZXN1bHQgPSBmYWxzZTsKIAogICAgICAgICBpZighcHJpdi0+dXApCiAJCXJldHVybiBmYWxzZTsKQEAgLTI2MzQsNyArMjMxMSw2IEBACiAJaWYocHJpdi0+U2V0QldNb2RlSW5Qcm9ncmVzcykKIAkJcmV0dXJuIGZhbHNlOwogCi0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCXN3aXRjaChwcml2LT5pZWVlODAyMTEtPm1vZGUpCiAJewogCWNhc2UgV0lSRUxFU1NfTU9ERV9BOgpAQCAtMjY2MSwxMCArMjMzNyw5IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJCTsvL1JUX1RSQUNFKENPTVBfRVJSLCAiSW52YWxpZCBXaXJlbGVzc01vZGUoJSN4KSEhXG4iLCBwcml2LT5pZWVlODAyMTEtPm1vZGUpOworCQkJOwogCQlicmVhazsKIAl9Ci0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJcHJpdi0+U3dDaG5sSW5Qcm9ncmVzcyA9IFRSVUU7CiAJaWYoIGNoYW5uZWwgPT0gMCkKQEAgLTI2NzUsNyArMjM1MCw3IEBACiAJcHJpdi0+U3dDaG5sU3RhZ2U9MDsKIAlwcml2LT5Td0NobmxTdGVwPTA7CiAKLQlpZigocHJpdi0+dXApKS8vICYmICEoUlRfQ0FOTk9UX0lPKEFkYXB0ZXIpICYmIEFkYXB0ZXItPmJJblNldFBvd2VyKSkKKwlpZigocHJpdi0+dXApKQogCXsKIAlTd0NobmxDYWxsYmFjazgxOTJTVXNiV29ya0l0ZW0oZGV2KTsKICNpZmRlZiBUT19ET19MSVNUCkBAIC0yNjk1LDcgKzIzNzAsNiBAQAogCXsKIAkJUlRfVFJBQ0UoQ09NUF9TQ0FOLCAiUEhZX1N3Q2hubDgxOTJTIFN3Q2hubEluUHJvZ3Jlc3MgRkFMU0UgZHJpdmVyIHNsZWVwIG9yIHVubG9hZFxuIik7CiAJCXByaXYtPlN3Q2hubEluUHJvZ3Jlc3MgPSBmYWxzZTsKLQkJLy9wcml2LT5DdXJyZW50Q2hhbm5lbCA9IHRtcGNoYW5uZWw7CiAJfQogICAgICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTI3MDksOCArMjM4Myw3IEBACiAvLyBUaGUgZm9sbG93aW5nIHByb2NlZHVyZSBpcyBvcGVydGVkIGFjY29yZGluZyB0byBTd0NoYW5sQ2FsbGJhY2s4MTkwUGNpKCkuCiAvLyBIb3dldmVyLCB0aGlzIHByb2NlZHVyZSBpcyBwZXJmb3JtZWQgc3luY2hyb25vdXNseSAgd2hpY2ggc2hvdWxkIGJlIHJ1bm5pbmcgdW5kZXIKIC8vIHBhc3NpdmUgbGV2ZWwuCi0vLwotLy9ub3QgdW5kZXJzdGFuZCBpdAorCiB2b2lkIFBIWV9Td0NobmxQaHk4MTkyUygJLy8gT25seSBjYWxsZWQgZHVyaW5nIGluaXRpYWxpemUKIAlzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAogCXU4CQljaGFubmVsCkBAIC0yNzY3LDE0ICsyNDQwLDEwIEBACiAKIAlpZihDbWRUYWJsZSA9PSBOVUxMKQogCXsKLQkJLy9SVF9BU1NFUlQoRkFMU0UsICgicGh5X1NldFN3Q2hubENtZEFycmF5KCk6IENtZFRhYmxlIGNhbm5vdCBiZSBOVUxMLlxuIikpOwogCQlyZXR1cm4gRkFMU0U7CiAJfQogCWlmKENtZFRhYmxlSWR4ID49IENtZFRhYmxlU3opCiAJewotCQkvL1JUX0FTU0VSVChGQUxTRSwKLQkJCS8vCSgicGh5X1NldFN3Q2hubENtZEFycmF5KCk6IEFjY2VzcyBpbnZhbGlkIGluZGV4LCBwbGVhc2UgY2hlY2sgc2l6ZSBvZiB0aGUgdGFibGUsIENtZFRhYmxlSWR4OiVkLCBDbWRUYWJsZVN6OiVkXG4iLAotCQkJCS8vQ21kVGFibGVJZHgsIENtZFRhYmxlU3opKTsKIAkJcmV0dXJuIEZBTFNFOwogCX0KIApAQCAtMjc5OCw3ICsyNDY3LDYgQEAKIAkpCiB7CiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCS8vUENIQU5ORUxfQUNDRVNTX1NFVFRJTkcJcENobmxBY2Nlc3NTZXR0aW5nOwogCVN3Q2hubENtZAkJCQlQcmVDb21tb25DbWRbTUFYX1BSRUNNRF9DTlRdOwogCXUzMgkJCQkJUHJlQ29tbW9uQ21kQ250OwogCVN3Q2hubENtZAkJCQlQb3N0Q29tbW9uQ21kW01BWF9QT1NUQ01EX0NOVF07CkBAIC0yODA4LDIyICsyNDc2LDEzIEBACiAJU3dDaG5sQ21kCQkJCSpDdXJyZW50Q21kID0gTlVMTDsKIAl1OAkJCQkJZVJGUGF0aDsKIAotCS8vUlRfQVNTRVJUKChkZXYgIT0gTlVMTCksICgiQWRhcHRlciBzaG91bGQgbm90IGJlIE5VTExcbiIpKTsKLQkvL1JUX0FTU0VSVChJc0xlZ2FsQ2hhbm5lbChkZXYsIGNoYW5uZWwpLCAoImlsbGVnYWwgY2hhbm5lbDogJWRcbiIsIGNoYW5uZWwpKTsKIAlSVF9UUkFDRShDT01QX0NILCAiPT09PT09PT09PT0+JXMoKSwgY2hhbm5lbDolZCwgc3RhZ2U6JWQsIHN0ZXA6JWRcbiIsIF9fRlVOQ1RJT05fXywgY2hhbm5lbCwgKnN0YWdlLCAqc3RlcCk7Ci0JLy9SVF9BU1NFUlQoKHBIYWxEYXRhICE9IE5VTEwpLCAoInBIYWxEYXRhIHNob3VsZCBub3QgYmUgTlVMTFxuIikpOwogCWlmICghSXNMZWdhbENoYW5uZWwocHJpdi0+aWVlZTgwMjExLCBjaGFubmVsKSkKIAl7CiAJCVJUX1RSQUNFKENPTVBfRVJSLCAiPT09PT09PT09PT09PT5zZXQgdG8gaWxsZWdhbCBjaGFubmVsOiVkXG4iLCBjaGFubmVsKTsKIAkJcmV0dXJuIHRydWU7IC8vcmV0dXJuIHRydWUgdG8gdGVsbCB1cHBlciBjYWxsZXIgZnVuY3Rpb24gdGhpcyBjaGFubmVsIHNldHRpbmcgaXMgZmluaXNoZWQhIE9yIGl0IHdpbGwgaW4gd2hpbGUgbG9vcC4KIAl9CiAKLQkvL3BDaG5sQWNjZXNzU2V0dGluZyA9ICZBZGFwdGVyLT5NZ250SW5mby5JbmZvODE4NS5DaGFubmVsQWNjZXNzU2V0dGluZzsKLQkvL1JUX0FTU0VSVCgocENobmxBY2Nlc3NTZXR0aW5nICE9IE5VTEwpLCAoInBDaG5sQWNjZXNzU2V0dGluZyBzaG91bGQgbm90IGJlIE5VTExcbiIpKTsKLQotCS8vZm9yKGVSRlBhdGggPSBSRjkwX1BBVEhfQTsgZVJGUGF0aCA8cHJpdi0+TnVtVG90YWxSRlBhdGg7IGVSRlBhdGgrKykKLQkvL2ZvcihlUkZQYXRoID0gMDsgZVJGUGF0aCA8cHJpdi0+TnVtVG90YWxSRlBhdGg7IGVSRlBhdGgrKykKLQkvL3sKIAkJLy8gPDE+IEZpbGwgdXAgcHJlIGNvbW1vbiBjb21tYW5kLgogCVByZUNvbW1vbkNtZENudCA9IDA7CiAJcGh5X1NldFN3Q2hubENtZEFycmF5KFByZUNvbW1vbkNtZCwgUHJlQ29tbW9uQ21kQ250KyssIE1BWF9QUkVDTURfQ05ULApAQCAtMjg0NCw4ICsyNTAzLDcgQEAKIAkJY2FzZSBSRl84MjI1OgogCQlpZiAoY2hhbm5lbCA8IDEgfHwgY2hhbm5lbCA+IDE0KQogCQkJUlRfVFJBQ0UoQ09NUF9FUlIsICJpbGxlZ2FsIGNoYW5uZWwgZm9yIHplYnJhOiVkXG4iLCBjaGFubmVsKTsKLQkJLy9SVF9BU1NFUlQoKGNoYW5uZWwgPj0gMSAmJiBjaGFubmVsIDw9IDE0KSwgKCJpbGxlZ2FsIGNoYW5uZWwgZm9yIFplYnJhOiAlZFxuIiwgY2hhbm5lbCkpOwotCQkvLyAyMDA4LzA5LzA0IE1IIENoYW5nZSBjaGFubmVsLgorCiAJCXBoeV9TZXRTd0NobmxDbWRBcnJheShSZkRlcGVuZENtZCwgUmZEZXBlbmRDbWRDbnQrKywgTUFYX1JGREVQRU5EQ01EX0NOVCwKIAkJCUNtZElEX1JGX1dyaXRlUmVnLCByUmZDaGFubmVsLCBjaGFubmVsLCAxMCk7CiAJCXBoeV9TZXRTd0NobmxDbWRBcnJheShSZkRlcGVuZENtZCwgUmZEZXBlbmRDbWRDbnQrKywgTUFYX1JGREVQRU5EQ01EX0NOVCwKQEAgLTI4NTUsOCArMjUxMyw2IEBACiAJY2FzZSBSRl84MjU2OgogCQlpZiAoY2hhbm5lbCA8IDEgfHwgY2hhbm5lbCA+IDE0KQogCQkJUlRfVFJBQ0UoQ09NUF9FUlIsICJpbGxlZ2FsIGNoYW5uZWwgZm9yIHplYnJhOiVkXG4iLCBjaGFubmVsKTsKLQkJLy8gVEVTVCEhIFRoaXMgaXMgbm90IHRoZSB0YWJsZSBmb3IgODI1NiEhCi0JCS8vUlRfQVNTRVJUKChjaGFubmVsID49IDEgJiYgY2hhbm5lbCA8PSAxNCksICgiaWxsZWdhbCBjaGFubmVsIGZvciBaZWJyYTogJWRcbiIsIGNoYW5uZWwpKTsKIAkJcGh5X1NldFN3Q2hubENtZEFycmF5KFJmRGVwZW5kQ21kLCBSZkRlcGVuZENtZENudCsrLCBNQVhfUkZERVBFTkRDTURfQ05ULAogCQkJQ21kSURfUkZfV3JpdGVSZWcsIHJSZkNoYW5uZWwsIGNoYW5uZWwsIDEwKTsKIAkJcGh5X1NldFN3Q2hubENtZEFycmF5KFJmRGVwZW5kQ21kLCBSZkRlcGVuZENtZENudCsrLCBNQVhfUkZERVBFTkRDTURfQ05ULApAQCAtMjg3Niw3ICsyNTMyLDYgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQkvL1JUX0FTU0VSVChGQUxTRSwgKCJVbmtub3duIHJmX2NoaXA6ICVkXG4iLCBwcml2LT5yZl9jaGlwKSk7CiAJCXJldHVybiBGQUxTRTsKIAkJYnJlYWs7CiAJfQpAQCAtMjkxMyw3ICsyNTY4LDYgQEAKIAkJc3dpdGNoKEN1cnJlbnRDbWQtPkNtZElEKQogCQl7CiAJCWNhc2UgQ21kSURfU2V0VHhQb3dlckxldmVsOgotCQkJLy9pZihwcml2LT5jYXJkXzgxOTJfdmVyc2lvbiA+IFZFUlNJT05fODE5MF9CRCkKIAkJCQlQSFlfU2V0VHhQb3dlckxldmVsODE5MlMoZGV2LGNoYW5uZWwpOwogCQkJYnJlYWs7CiAJCWNhc2UgQ21kSURfV3JpdGVQb3J0VWxvbmc6CkBAIC0yOTMwLDcgKzI1ODQsNiBAQAogCQkJewogCQkJLy8gRm9yIG5ldyBUNjUgUkYgMDIyMmQgcmVnaXN0ZXIgMHgxOCBiaXQgMC05ID0gY2hhbm5lbCBudW1iZXIuCiAJCQkJcnRsODE5Ml9waHlfU2V0UkZSZWcoZGV2LCAoUkY5MF9SQURJT19QQVRIX0UpZVJGUGF0aCwgQ3VycmVudENtZC0+UGFyYTEsIDB4MWYsIChDdXJyZW50Q21kLT5QYXJhMikpOwotCQkJCS8vcHJpbnRrKCI9PT09PiV4LCAleCwgcmVhZF9iYWNrOiV4XG4iLCBDdXJyZW50Q21kLT5QYXJhMixDdXJyZW50Q21kLT5QYXJhMSwgcnRsODE5Ml9waHlfUXVlcnlSRlJlZyhkZXYsIChSRjkwX1JBRElPX1BBVEhfRSllUkZQYXRoLCBDdXJyZW50Q21kLT5QYXJhMSwgMHgxZikpOwogCQkJfQogCQkJYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTI5MzksNyArMjU5Miw2IEBACiAKIAkJYnJlYWs7CiAJfXdoaWxlKFRSVUUpOwotCS8vY29zYSB9Lypmb3IoTnVtYmVyIG9mIFJGIHBhdGhzKSovCiAKIAkoKmRlbGF5KT1DdXJyZW50Q21kLT5tc0RlbGF5OwogCSgqc3RlcCkrKzsKQEAgLTI5ODUsMTQgKzI2MzcsOCBAQAogICoJMTEvMTUvMjAwNwlNSEMJCUNyZWF0ZSBWZXJzaW9uIDAuCiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotIC8vY2FsbGVkIGJ5IHJ0bDgxOTJfcGh5X1F1ZXJ5UkZSZWcsIHJ0bDgxOTJfcGh5X1NldFJGUmVnLCBQSFlfU2V0UkZQb3dlclN0YXRlODE5MlNVc2IKLS8vZXh0ZXJuCWJvb2wKLS8vUEhZX0NoZWNrSXNMZWdhbFJmUGF0aDgxOTJTKAotLy8Jc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLS8vCXUzMgllUkZQYXRoKQogdTggcnRsODE5Ml9waHlfQ2hlY2tJc0xlZ2FsUkZQYXRoKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIHUzMiBlUkZQYXRoKQogewotLy8Jc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCWJvb2wJCQkJcnRWYWx1ZSA9IFRSVUU7CiAKIAkvLyBOT3QgY2hlY2sgUkYgUGF0aCBub3cuIQpAQCAtMzAyMyw3ICsyNjY5LDYgQEAKIHZvaWQKIFBIWV9JUUNhbGlicmF0ZSgJc3RydWN0IG5ldF9kZXZpY2UqIGRldikKIHsKLQkvL3N0cnVjdCByODE5Ml9wcml2IAkqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJdTMyCQkJCWksIHJlZzsKIAl1MzIJCQkJb2xkX3ZhbHVlOwogCWxvbmcJCQkJWCwgWSwgVFgwWzRdOwpAQCAtMzAzOSw3ICsyNjg0LDYgQEAKIAl7CiAJCS8vIElRSwogCQlydGw4MTkyX3NldEJCcmVnKGRldiwgMHhjMDQsIGJNYXNrRFdvcmQsIDB4MDBhMDU0MzApOwotCQkvL1BsYXRmb3JtU3RhbGxFeGVjdXRpb24oNSk7CiAJCXVkZWxheSg1KTsKIAkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIDB4YzA4LCBiTWFza0RXb3JkLCAweDAwMDgwMGU0KTsKIAkJdWRlbGF5KDUpOwpAQCAtMzE2OSw4ICsyODEzLDYgQEAKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGV4dGVybiB2b2lkIFBIWV9JUUNhbGlicmF0ZUJjdXQoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKIHsKLQkvL3N0cnVjdCByODE5Ml9wcml2IAkqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JLy9QTUdOVF9JTkZPCQlwTWdudEluZm8gPSAmcEFkYXB0ZXItPk1nbnRJbmZvOwogCXUzMgkJCQlpLCByZWc7CiAJdTMyCQkJCW9sZF92YWx1ZTsKIAlsb25nCQkJCVgsIFksIFRYMFs0XTsKQEAgLTMxODQsMjEgKzI4MjYsNiBAQAogCS8vCiAJLy8gMS4gU2F2ZSBlNzB+ZWUwIHJlZ2lzdGVyIHNldHRpbmcsIGFuZCBsb2FkIGNhbGlicmF0aW9uIHNldHRpbmcKIAkvLwotCS8qCi0JMHhlZTBbMzE6MF09MHgzZmVkOTJmYjsKLQkweGVkY1szMTowXSA9MHgzZmVkOTJmYjsKLQkweGU3MFszMTowXSA9MHgzZmVkOTJmYjsKLQkweGU3NFszMTowXSA9MHgzZmVkOTJmYjsKLQkweGU3OFszMTowXSA9MHgzZmVkOTJmYjsKLQkweGU3Y1szMTowXT0gMHgzZmVkOTJmYjsKLQkweGU4MFszMTowXT0gMHgzZmVkOTJmYjsKLQkweGU4NFszMTowXT0gMHgzZmVkOTJmYjsKLQkweGU4OFszMTowXT0gMHgzZmVkOTJmYjsKLQkweGU4Y1szMTowXT0gMHgzZmVkOTJmYjsKLQkweGVkMFszMTowXT0gMHgzZmVkOTJmYjsKLQkweGVkNFszMTowXT0gMHgzZmVkOTJmYjsKLQkweGVkOFszMTowXT0gMHgzZmVkOTJmYjsKLQkqLwogCWNhbGlicmF0ZV9zZXQgWzBdID0gMHhlZTA7CiAJY2FsaWJyYXRlX3NldCBbMV0gPSAweGVkYzsKIAljYWxpYnJhdGVfc2V0IFsyXSA9IDB4ZTcwOwpAQCAtMzIxMiw3ICsyODM5LDYgQEAKIAljYWxpYnJhdGVfc2V0IFsxMF0gPSAweGVkMDsKIAljYWxpYnJhdGVfc2V0IFsxMV0gPSAweGVkNDsKIAljYWxpYnJhdGVfc2V0IFsxMl0gPSAweGVkODsKLQkvL1JUX1RSQUNFKENPTVBfSU5JVCwgREJHX0xPVUQsICgiU2F2ZSBlNzB+ZWUwIHJlZ2lzdGVyIHNldHRpbmdcbiIpKTsKIAlmb3IgKGkgPSAwOyBpIDwgMTM7IGkrKykKIAl7CiAJCWxvYWRfdmFsdWVbaV0gPSBydGw4MTkyX1F1ZXJ5QkJSZWcoZGV2LCBjYWxpYnJhdGVfc2V0W2ldLCBiTWFza0RXb3JkKTsKQEAgLTMyMzIsNyArMjg1OCw2IEBACiAJCS8vQkIgc3dpdGNoIHRvIFBJIG1vZGUuIElmIGRlZmF1bHQgaXMgUEkgbW9kZSwgaWdub3JpbmcgMiBjb21tYW5kcyBiZWxvdy4KIAkJaWYgKCFSZlBpRW5hYmxlKQkvL2lmIG9yaWdpbmFsIGlzIFNJIG1vZGUsIHRoZW4gc3dpdGNoIHRvIFBJIG1vZGUuCiAJCXsKLQkJCS8vRGJnUHJpbnQoIklRSyBTd2l0Y2ggdG8gUEkgbW9kZVxuIik7CiAJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgMHg4MjAsIGJNYXNrRFdvcmQsIDB4MDEwMDAxMDApOwogCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIDB4ODI4LCBiTWFza0RXb3JkLCAweDAxMDAwMTAwKTsKIAkJfQpAQCAtMzI4Niw3ICsyOTExLDYgQEAKIAogCQlpZiAoIVJmUGlFbmFibGUpCS8vaWYgb3JpZ2luYWwgaXMgU0kgbW9kZSwgdGhlbiBzd2l0Y2ggdG8gUEkgbW9kZS4KIAkJewotCQkJLy9EYmdQcmludCgiSVFLIFN3aXRjaCBiYWNrIHRvIFNJIG1vZGVcbiIpOwogCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIDB4ODIwLCBiTWFza0RXb3JkLCAweDAxMDAwMDAwKTsKIAkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCAweDgyOCwgYk1hc2tEV29yZCwgMHgwMTAwMDAwMCk7CiAJCX0KQEAgLTMzNjksNyArMjk5Myw2IEBACiAJLy8KIAkvLyA0LiBSZWxvYWQgZTcwfmVlMCByZWdpc3RlciBzZXR0aW5nLgogCS8vCi0JLy9SVF9UUkFDRShDT01QX0lOSVQsIERCR19MT1VELCAoIlJlbG9hZCBlNzB+ZWUwIHJlZ2lzdGVyIHNldHRpbmcuXG4iKSk7CiAJZm9yIChpID0gMDsgaSA8IDEzOyBpKyspCiAJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCBjYWxpYnJhdGVfc2V0W2ldLCBiTWFza0RXb3JkLCBsb2FkX3ZhbHVlW2ldKTsKIApAQCAtMzM4MCwxNCArMzAwMywxMiBAQAogCiAKIAotfQkvLyBQSFlfSVFDYWxpYnJhdGVCY3V0Cit9CiAKIAogLy8KIC8vIE1vdmUgZnJvbSBwaHljZmcuYyB0byBnZW4uYyB0byBiZSBjb2RlIGluZGVwZW5kZW50IGxhdGVyCiAvLwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tTW92ZSB0byBvdGhlciBESVIgbGF0ZXItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8vI2lmIChERVZfQlVTX1RZUEUgPT0gVVNCX0lOVEVSRkFDRSkKIAogLy8gICAgdXNlIGluIHBoeSBvbmx5IChpbiB3aW4gaXQncyB0aW1lcikKIHZvaWQgU3dDaG5sQ2FsbGJhY2s4MTkyU1VzYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMzM5NSw3ICszMDE2LDYgQEAKIAogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAl1MzIJCQlkZWxheTsKLS8vCWJvb2wJCQlyZXQ7CiAKIAlSVF9UUkFDRShDT01QX1NDQU4sICI9PT5Td0NobmxDYWxsYmFjazgxOTBQY2koKSwgc3dpdGNoIHRvIGNoYW5uZWwgJWRcbiIsCiAJCSBwcml2LT5jaGFuKTsKQEAgLTM0MTgsNyArMzAzOCw2IEBACiAJCXsKIAkJCWlmKGRlbGF5PjApCiAJCQl7Ci0JCQkJLy9QbGF0Zm9ybVNldFRpbWVyKGRldiwgJnByaXYtPlN3Q2hubFRpbWVyLCBkZWxheSk7CiAKIAkJCX0KIAkJCWVsc2UKQEAgLTM0NzMsMTYgKzMwOTIsMTIgQEAKICAqCQkJKDIpIFdpbGwgdHdvIHdvcmtpdGVtIG9mICJzd2l0Y2ggY2hhbm5lbCIgYW5kICJzd2l0Y2ggY2hhbm5lbCBiYW5kd2lkdGgiIHJ1bgogICoJCQkgICAgIGNvbmN1cnJlbnRseT8KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8vPT09PT4vL3J0bDgxOTJfU2V0QldNb2RlCi0vLyAgICB1c2UgaW4gcGh5IG9ubHkgKGluIHdpbiBpdCdzIHRpbWVyKQorLy8gICAgdXNlIGluIHBoeSBvbmx5CiB2b2lkIFNldEJXTW9kZUNhbGxiYWNrODE5MlNVc2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJdTgJIAkJCXJlZ0J3T3BNb2RlOwogCi0JLy8gQWRkZWQgaXQgZm9yIDIwLzQwIG1oeiBzd2l0Y2ggdGltZSBldmFsdWF0aW9uIGJ5IGd1YW5nYW4gMDcwNTMxCi0JLy91MzIJCQkJTm93TCwgTm93SDsKLQkvL3U4Qnl0ZQkJCQlCZWdpblRpbWUsIEVuZFRpbWU7CiAJdTgJCQkJcmVnUlJTUl9SU0M7CiAKIAlSVF9UUkFDRShDT01QX1NDQU4sICI9PT5TZXRCV01vZGVDYWxsYmFjazgxOTBQY2koKSAgU3dpdGNoIHRvICVzIGJhbmR3aWR0aFxuIiwgXApAQCAtMzQ5NywxMCArMzExMiw2IEBACiAJaWYoIXByaXYtPnVwKQogCQlyZXR1cm47CiAKLQkvLyBBZGRlZCBpdCBmb3IgMjAvNDAgbWh6IHN3aXRjaCB0aW1lIGV2YWx1YXRpb24gYnkgZ3VhbmdhbiAwNzA1MzEKLQkvL05vd0wgPSByZWFkX25pY19kd29yZChkZXYsIFRTRlIpOwotCS8vTm93SCA9IHJlYWRfbmljX2R3b3JkKGRldiwgVFNGUis0KTsKLQkvL0JlZ2luVGltZSA9ICgodThCeXRlKU5vd0ggPDwgMzIpICsgTm93TDsKIAogCS8vMzwxPlNldCBNQUMgcmVnaXN0ZXIKIAlyZWdCd09wTW9kZSA9IHJlYWRfbmljX2J5dGUoZGV2LCBCV19PUE1PREUpOwpAQCAtMzUxMCwxMyArMzEyMSwxMSBAQAogCXsKIAkJY2FzZSBIVF9DSEFOTkVMX1dJRFRIXzIwOgogCQkJcmVnQndPcE1vZGUgfD0gQldfT1BNT0RFXzIwTUhaOwotCQkgICAgICAgLy8gMjAwNy8wMi8wNyBNYXJrIGJ5IEVtaWx5IGJlY2FzdWUgd2UgaGF2ZSBub3QgdmVyaWZ5IHdoZXRoZXIgdGhpcyByZWdpc3RlciB3b3JrcwogCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBCV19PUE1PREUsIHJlZ0J3T3BNb2RlKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgSFRfQ0hBTk5FTF9XSURUSF8yMF80MDoKIAkJCXJlZ0J3T3BNb2RlICY9IH5CV19PUE1PREVfMjBNSFo7Ci0gICAgICAgIAkJLy8gMjAwNy8wMi8wNyBNYXJrIGJ5IEVtaWx5IGJlY2FzdWUgd2UgaGF2ZSBub3QgdmVyaWZ5IHdoZXRoZXIgdGhpcyByZWdpc3RlciB3b3JrcwogCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBCV19PUE1PREUsIHJlZ0J3T3BNb2RlKTsKIAogCQkJcmVnUlJTUl9SU0MgPSAocmVnUlJTUl9SU0MmMHg5MCkgfChwcml2LT5uQ3VyNDBNaHpQcmltZVNDPDw1KTsKQEAgLTM1NDYsMTIgKzMxNTUsNiBAQAogCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJDQ0swX1N5c3RlbSwgYkNDS1NpZGVCYW5kLCAocHJpdi0+bkN1cjQwTWh6UHJpbWVTQz4+MSkpOwogCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJPRkRNMV9MU1RGLCAweEMwMCwgcHJpdi0+bkN1cjQwTWh6UHJpbWVTQyk7CiAKLQkJCS8vIENvcnJlY3QgdGhlIHR4IHBvd2VyIGZvciBDQ0sgcmF0ZSBpbiA0ME0uIFN1Z2dlc3QgYnkgWU4sIDIwMDcxMjA3Ci0JCQkvL1BIWV9TZXRCQlJlZyhBZGFwdGVyLCByQ0NLMF9UeEZpbHRlcjEsIGJNYXNrRFdvcmQsIDB4MzUzNjAwMDApOwotCQkJLy9QSFlfU2V0QkJSZWcoQWRhcHRlciwgckNDSzBfVHhGaWx0ZXIyLCBiTWFza0RXb3JkLCAweDEyMWMyNTJlKTsKLQkJCS8vUEhZX1NldEJCUmVnKEFkYXB0ZXIsIHJDQ0swX0RlYnVnUG9ydCwgYk1hc2tEV29yZCwgMHgwMDAwMDQwOSk7Ci0JCQkvL1BIWV9TZXRCQlJlZyhBZGFwdGVyLCByRlBHQTBfQW5hbG9nUGFyYW1ldGVyMSwgYkFEQ2xrUGhhc2UsIDApOwotCiAJCQlpZiAocHJpdi0+Y2FyZF84MTkyX3ZlcnNpb24gPj0gVkVSU0lPTl84MTkyU19CQ1VUKQogCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByRlBHQTBfQW5hbG9nUGFyYW1ldGVyMiwgMHhmZiwgMHgxOCk7CiAKQEAgLTM1NjQsMTIgKzMxNjcsNiBAQAogCX0KIAkvL1NraXAgb3ZlciBzZXR0aW5nIG9mIEotbW9kZSBpbiBCQiByZWdpc3RlciBoZXJlLiBEZWZhdWx0IHZhbHVlIGlzICJOb25lIEogbW9kZSIuIEVtaWx5IDIwMDcwMzE1CiAKLQkvLyBBZGRlZCBpdCBmb3IgMjAvNDAgbWh6IHN3aXRjaCB0aW1lIGV2YWx1YXRpb24gYnkgZ3VhbmdhbiAwNzA1MzEKLQkvL05vd0wgPSByZWFkX25pY19kd29yZChkZXYsIFRTRlIpOwotCS8vTm93SCA9IHJlYWRfbmljX2R3b3JkKGRldiwgVFNGUis0KTsKLQkvL0VuZFRpbWUgPSAoKHU4Qnl0ZSlOb3dIIDw8IDMyKSArIE5vd0w7Ci0JLy9SVF9UUkFDRShDT01QX1NDQU4sIERCR19MT1VELCAoIlNldEJXTW9kZUNhbGxiYWNrODE5MFBjaTogdGltZSBvZiBTZXRCV01vZGUgPSAlSTY0ZCB1cyFcbiIsIChFbmRUaW1lIC0gQmVnaW5UaW1lKSkpOwotCiAjaWYgMQogCS8vMzwzPlNldCBSRiByZWxhdGVkIHJlZ2lzdGVyCiAJc3dpdGNoKCBwcml2LT5yZl9jaGlwICkKQEAgLTM1OTcsNyArMzE5NCw2IEBACiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJLy9SVF9BU1NFUlQoRkFMU0UsICgiVW5rbm93biByZl9jaGlwOiAlZFxuIiwgcHJpdi0+cmZfY2hpcCkpOwogCQkJYnJlYWs7CiAJfQogI2VuZGlmCkBAIC0zNzA1LDcgKzMzMDEsNiBAQAogCXByaXYtPlNldEJXTW9kZUluUHJvZ3Jlc3M9IEZBTFNFOwogfQogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tTW92ZSB0byBvdGVyIERJUiBsYXRlci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogdm9pZCBJbml0aWFsR2FpbjgxOTJTKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCXU4IE9wZXJhdGlvbikKIHsKICNpZmRlZiBUT19ET19MSVNUCkBAIC0zODEyLDcgKzM0MDcsNiBAQAogCiAJdTE2CUZ3Q21kV2FpdExpbWl0ID0gMTAwMDsKIAotCS8vaWYoSVNfSEFSRFdBUkVfVFlQRV84MTkyU1UoQWRhcHRlcikgJiYgQWRhcHRlci0+YkluSGN0VGVzdCkKIAlpZihwcml2LT5iSW5IY3RUZXN0KQogCQlyZXR1cm4gdHJ1ZTsKIApAQCAtMzgyOCwxMSArMzQyMiw2IEBACiAjaWYgMQogCXdoaWxlKHByaXYtPlNldEZ3Q21kSW5Qcm9ncmVzcyAmJiBGd0NtZFdhaXRDb3VudGVyPEZ3Q21kV2FpdExpbWl0KQogCXsKLQkJLy9pZihSVF9VU0JfQ0FOTk9UX0lPKEFkYXB0ZXIpKQotCQkvL3sKLQkJLy8JUlRfVFJBQ0UoQ09NUF9DTUQsIERCR19XQVJOSU5HLCAoIkhhbFNldEZ3Q21kODE5MlMoKTogVVNCIGNhbiBOT1QgSU8hIVxuIikpOwotCQkvLwlyZXR1cm4gRkFMU0U7Ci0JCS8vfQogCiAJCVJUX1RSQUNFKENPTVBfQ01ELCAiSGFsU2V0RndDbWQ4MTkyUygpOiBwcmV2aW91cyB3b3JraXRlbSBub3QgZmluaXNoISFcbiIpOwogCQlyZXR1cm4gZmFsc2U7CkBAIC0zODQzLDkgKzM0MzIsNyBAQAogCiAJaWYoRndDbWRXYWl0Q291bnRlciA9PSBGd0NtZFdhaXRMaW1pdCkKIAl7Ci0JCS8vUlRfQVNTRVJUKEZBTFNFLCAoIlNldEZ3Q21kSU9Xb3JrSXRlbUNhbGxiYWNrKCk6IFdhaXQgdG9vIGxvZ24gdG8gc2V0IEZXIENNRFxuIikpOwogCQlSVF9UUkFDRShDT01QX0NNRCwgIkhhbFNldEZ3Q21kODE5MlMoKTogV2FpdCB0b28gbG9nbiB0byBzZXQgRlcgQ01EXG4iKTsKLQkJLy9yZXR1cm4gZmFsc2U7CiAJfQogI2VuZGlmCiAJaWYgKHByaXYtPlNldEZ3Q21kSW5Qcm9ncmVzcykKQEAgLTM4OTgsMTAgKzM0ODUsMTAgQEAKIC8vCiB2b2lkIHBoeV9TZXRGd0NtZElPQ2FsbGJhY2soc3RydWN0IG5ldF9kZXZpY2UqIGRldikKIHsKLQkvL3N0cnVjdCBuZXRfZGV2aWNlKiBkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UqKSBkYXRhOwotCXUzMiAJIAlpbnB1dDsKLQlzdGF0aWMgdTMyIFNjYW5SZWdpc3RlcjsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJUFJUX0hJR0hfVEhST1VHSFBVVAlwSFRJbmZvID0gcHJpdi0+aWVlZTgwMjExLT5wSFRJbmZvOworCXJ0X2Zpcm13YXJlCQkqcEZpcm13YXJlID0gcHJpdi0+cEZpcm13YXJlOworCXUzMglpbnB1dCwgQ3VycmVudEFJRCA9IDA7OwogCWlmKCFwcml2LT51cCkKIAl7CiAJCVJUX1RSQUNFKENPTVBfQ01ELCAiU2V0RndDbWRJT1RpbWVyQ2FsbGJhY2soKTogZHJpdmVyIGlzIGdvaW5nIHRvIHVubG9hZFxuIik7CkBAIC0zOTEwLDYxICszNDk3LDIyIEBACiAKIAlSVF9UUkFDRShDT01QX0NNRCwgIi0tLT5TZXRGd0NtZElPVGltZXJDYWxsYmFjaygpOiBDbWQoJSN4KSwgU2V0RndDbWRJblByb2dyZXNzKCVkKVxuIiwgcHJpdi0+Q3VycmVudEZ3Q21kSU8sIHByaXYtPlNldEZ3Q21kSW5Qcm9ncmVzcyk7CiAKKwlpZihwRmlybXdhcmUtPkZpcm13YXJlVmVyc2lvbiA+PSAweDM0KQorCXsKKwkJc3dpdGNoKHByaXYtPkN1cnJlbnRGd0NtZElPKQorCQl7CisJCQljYXNlIEZXX0NNRF9SQV9SRUZSRVNIX046CisJCQkJcHJpdi0+Q3VycmVudEZ3Q21kSU8gPSBGV19DTURfUkFfUkVGUkVTSF9OX0NPTUI7CisJCQlicmVhazsKKwkJCWNhc2UgRldfQ01EX1JBX1JFRlJFU0hfQkc6CisJCQkJcHJpdi0+Q3VycmVudEZ3Q21kSU8gPSBGV19DTURfUkFfUkVGUkVTSF9CR19DT01COworCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CiAJc3dpdGNoKHByaXYtPkN1cnJlbnRGd0NtZElPKQogCXsKLQkJY2FzZSBGV19DTURfSElHSF9QV1JfRU5BQkxFOgotCQkJaWYoKHByaXYtPmllZWU4MDIxMS0+cEhUSW5mby0+SU9UQWN0aW9uICYgSFRfSU9UX0FDVF9ESVNBQkxFX0hJR0hfUE9XRVIpPT0wKQotCQkJCXdyaXRlX25pY19kd29yZChkZXYsIFdGTTUsIEZXX0hJR0hfUFdSX0VOQUJMRSk7Ci0JCQlicmVhazsKLQotCQljYXNlIEZXX0NNRF9ISUdIX1BXUl9ESVNBQkxFOgotCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgV0ZNNSwgRldfSElHSF9QV1JfRElTQUJMRSk7Ci0JCQlicmVhazsKLQotCQljYXNlIEZXX0NNRF9ESUdfUkVTVU1FOgotCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgV0ZNNSwgRldfRElHX1JFU1VNRSk7Ci0JCQlicmVhazsKLQotCQljYXNlIEZXX0NNRF9ESUdfSEFMVDoKLQkJCXdyaXRlX25pY19kd29yZChkZXYsIFdGTTUsIEZXX0RJR19IQUxUKTsKLQkJCWJyZWFrOwotCi0JCS8vCi0JCS8vIDxSb2dlcl9Ob3Rlcz4gVGhlIGZvbGxvd2luZyBGVyBDTUQgSU8gd2FzIGNvbWJpbmVkIGludG8gc2luZ2xlIG9wZXJhdGlvbgotCQkvLyAoaS5lLiwgdG8gcHJldmVudCBudW1iZXIgb2Ygc3lzdGVtIHdvcmtpdGVtIG91dCBvZiByZXNvdXJjZSEhKS4KLQkJLy8gMjAwOC4xMi4wNC4KLQkJLy8KLQkJY2FzZSBGV19DTURfUkVTVU1FX0RNX0JZX1NDQU46Ci0JCQlSVF9UUkFDRShDT01QX0NNRCwgIltGVyBDTURdIFNldCBISUdIUFdSIGVuYWJsZSBhbmQgRElHIHJlc3VtZSEhXG4iKTsKLQkJCWlmKChwcml2LT5pZWVlODAyMTEtPnBIVEluZm8tPklPVEFjdGlvbiAmIEhUX0lPVF9BQ1RfRElTQUJMRV9ISUdIX1BPV0VSKT09MCkKLQkJCXsKLQkJCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBXRk01LCBGV19ISUdIX1BXUl9FTkFCTEUpOyAvL2JyZWFrOwotCQkJCUNoa0Z3Q21kSW9Eb25lKGRldik7Ci0JCQl9Ci0JCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBXRk01LCBGV19ESUdfUkVTVU1FKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRldfQ01EX1BBVVNFX0RNX0JZX1NDQU46Ci0JCQlSVF9UUkFDRShDT01QX0NNRCwgIltGVyBDTURdIFNldCBISUdIUFdSIGRpc2FibGUgYW5kIERJRyBoYWx0ISFcbiIpOwotCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgV0ZNNSwgRldfSElHSF9QV1JfRElTQUJMRSk7IC8vYnJlYWs7Ci0JCQlDaGtGd0NtZElvRG9uZShkZXYpOwotCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgV0ZNNSwgRldfRElHX0hBTFQpOwotCQkJYnJlYWs7Ci0KLQkJLy8KLQkJLy8gPFJvZ2VyX05vdGVzPiBUaGUgZm9sbG93aW5nIEZXIENNRCBJTyBzaG91bGQgYmUgY2hlY2tlZAotCQkvLyAoaS5lLiwgd29ya2l0ZW0gc2NoZWR1bGUgdGltaW5nIGlzc3VlISEpLgotCQkvLyAyMDA4LjEyLjA0LgotCQkvLwotCQljYXNlIEZXX0NNRF9ESUdfRElTQUJMRToKLQkJCVJUX1RSQUNFKENPTVBfQ01ELCAiW0ZXIENNRF0gU2V0IERJRyBkaXNhYmxlISFcbiIpOwotCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgV0ZNNSwgRldfRElHX0RJU0FCTEUpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBGV19DTURfRElHX0VOQUJMRToKLQkJCVJUX1RSQUNFKENPTVBfQ01ELCAiW0ZXIENNRF0gU2V0IERJRyBlbmFibGUhIVxuIik7Ci0JCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBXRk01LCBGV19ESUdfRU5BQkxFKTsKLQkJCWJyZWFrOwogCiAJCWNhc2UgRldfQ01EX1JBX1JFU0VUOgogCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgV0ZNNSwgRldfUkFfUkVTRVQpOwpAQCAtMzk3NSw4MiArMzUyMywxMTEgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgRldfQ01EX1JBX1JFRlJFU0hfTjoKLQkJCVJUX1RSQUNFKENPTVBfQ01ELCAiW0ZXIENNRF0gU2V0IFJBIHJlZnJlc2ghISBOXG4iKTsKLQkJCWlmKHByaXYtPmllZWU4MDIxMS0+cEhUSW5mby0+SU9UUmFGdW5jICYgSFRfSU9UX1JBRlVOQ19ESVNBQkxFX0FMTCkKKwkJCVJUX1RSQUNFKENPTVBfQ01ELCAiW0ZXIENNRF0gU2V0IFJBIG4gcmVmcmVzaCEhXG4iKTsKKwkJCWlmKHBIVEluZm8tPklPVFJhRnVuYyAmIEhUX0lPVF9SQUZVTkNfRElTQUJMRV9BTEwpCiAJCQkJaW5wdXQgPSBGV19SQV9SRUZSRVNIOwogCQkJZWxzZQotCQkJCWlucHV0ID0gRldfUkFfUkVGUkVTSCB8IChwcml2LT5pZWVlODAyMTEtPnBIVEluZm8tPklPVFJhRnVuYyA8PCA4KTsKKwkJCQlpbnB1dCA9IEZXX1JBX1JFRlJFU0ggfCAocEhUSW5mby0+SU9UUmFGdW5jIDw8IDgpOwogCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgV0ZNNSwgaW5wdXQpOworCQkJQ2hrRndDbWRJb0RvbmUoZGV2KTsKKwkJCXdyaXRlX25pY19kd29yZChkZXYsIFdGTTUsIEZXX1JBX0VOQUJMRV9SU1NJX01BU0spOworCQkJQ2hrRndDbWRJb0RvbmUoZGV2KTsKIAkJCWJyZWFrOwogCQljYXNlIEZXX0NNRF9SQV9SRUZSRVNIX0JHOgotCQkJUlRfVFJBQ0UoQ09NUF9DTUQsICJbRlcgQ01EXSBTZXQgUkEgcmVmcmVzaCEhIEIvR1xuIik7CisJCQlSVF9UUkFDRShDT01QX0NNRCwgIltGVyBDTURdIFNldCBSQSBCRyByZWZyZXNoISFcbiIpOwogCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgV0ZNNSwgRldfUkFfUkVGUkVTSCk7CiAJCQlDaGtGd0NtZElvRG9uZShkZXYpOwotCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgV0ZNNSwgRldfUkFfRU5BQkxFX0JHKTsKKwkJCXdyaXRlX25pY19kd29yZChkZXYsIFdGTTUsIEZXX1JBX0RJU0FCTEVfUlNTSV9NQVNLKTsKKwkJCUNoa0Z3Q21kSW9Eb25lKGRldik7CisJCQlicmVhazsKKworCQljYXNlIEZXX0NNRF9SQV9SRUZSRVNIX05fQ09NQjoKKwkJCVJUX1RSQUNFKENPTVBfQ01ELCAiW0ZXIENNRF0gU2V0IFJBIG4gQ29tYm8gcmVmcmVzaCEhXG4iKTsKKwkJCWlmKHBIVEluZm8tPklPVFJhRnVuYyAmIEhUX0lPVF9SQUZVTkNfRElTQUJMRV9BTEwpCisJCQkJaW5wdXQgPSBGV19SQV9JT1RfTl9DT01COworCQkJZWxzZQorCQkJCWlucHV0ID0gRldfUkFfSU9UX05fQ09NQiB8ICgoKHBIVEluZm8tPklPVFJhRnVuYykmMHgwZikgPDwgOCk7CisJCQlpbnB1dCA9IGlucHV0IHwoKHBIVEluZm8tPklPVFBlZXIgJiAweGYpIDw8MTIpOworCQkJUlRfVFJBQ0UoQ09NUF9DTUQsICJbRlcgQ01EXSBTZXQgUkEvSU9UIENvbWIgaW4gbiBtb2RlISEgaW5wdXQoJSN4KVxuIiwgaW5wdXQpOworCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgV0ZNNSwgaW5wdXQpOworCQkJQ2hrRndDbWRJb0RvbmUoZGV2KTsKKwkJCWJyZWFrOworCisJCWNhc2UgRldfQ01EX1JBX1JFRlJFU0hfQkdfQ09NQjoKKwkJCVJUX1RSQUNFKENPTVBfQ01ELCAiW0ZXIENNRF0gU2V0IFJBIEIvRyBDb21ibyByZWZyZXNoISFcbiIpOworCQkJaWYocEhUSW5mby0+SU9UUmFGdW5jICYgSFRfSU9UX1JBRlVOQ19ESVNBQkxFX0FMTCkKKwkJCQlpbnB1dCA9IEZXX1JBX0lPVF9CR19DT01COworCQkJZWxzZQorCQkJCWlucHV0ID0gRldfUkFfSU9UX0JHX0NPTUIgfCAoKChwSFRJbmZvLT5JT1RSYUZ1bmMpJjB4MGYpIDw8IDgpOworCQkJaW5wdXQgPSBpbnB1dCB8KChwSFRJbmZvLT5JT1RQZWVyICYgMHhmKSA8PDEyKTsKKwkJCVJUX1RSQUNFKENPTVBfQ01ELCAiW0ZXIENNRF0gU2V0IFJBL0lPVCBDb21iIGluIEIvRyBtb2RlISEgaW5wdXQoJSN4KVxuIiwgaW5wdXQpOworCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgV0ZNNSwgaW5wdXQpOworCQkJQ2hrRndDbWRJb0RvbmUoZGV2KTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgRldfQ01EX0lRS19FTkFCTEU6CiAJCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBXRk01LCBGV19JUUtfRU5BQkxFKTsKKwkJCUNoa0Z3Q21kSW9Eb25lKGRldik7CiAJCQlicmVhazsKIAogCQljYXNlIEZXX0NNRF9UWFBXUl9UUkFDS19FTkFCTEU6CiAJCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBXRk01LCBGV19UWFBXUl9UUkFDS19FTkFCTEUpOworCQkJQ2hrRndDbWRJb0RvbmUoZGV2KTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgRldfQ01EX1RYUFdSX1RSQUNLX0RJU0FCTEU6CiAJCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBXRk01LCBGV19UWFBXUl9UUkFDS19ESVNBQkxFKTsKKwkJCUNoa0Z3Q21kSW9Eb25lKGRldik7CiAJCQlicmVhazsKIAotCQlkZWZhdWx0OgotCQkJUlRfVFJBQ0UoQ09NUF9DTUQsIlVua25vd24gRlcgQ21kIElPKCUjeClcbiIsIHByaXYtPkN1cnJlbnRGd0NtZElPKTsKKwkJY2FzZSBGV19DTURfUEFVU0VfRE1fQllfU0NBTjoKKwkJCVJUX1RSQUNFKENPTVBfQ01ELCJbRlcgQ01EXSBQYXVzZSBETSBieSBTY2FuISFcbiIpOworCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJPRkRNMF9YQUFHQ0NvcmUxLCBiTWFza0J5dGUwLCAweDE3KTsKKwkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByT0ZETTBfWEJBR0NDb3JlMSwgYk1hc2tCeXRlMCwgMHgxNyk7CisJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckNDSzBfQ0NBLCBiTWFza0J5dGUyLCAweDQwKTsKIAkJCWJyZWFrOwotCX0KIAotCUNoa0Z3Q21kSW9Eb25lKGRldik7Ci0KLQlzd2l0Y2gocHJpdi0+Q3VycmVudEZ3Q21kSU8pCi0JeworCQljYXNlIEZXX0NNRF9SRVNVTUVfRE1fQllfU0NBTjoKKwkJCVJUX1RSQUNFKENPTVBfQ01ELCAiW0ZXIENNRF0gUmVzdW1lIERNIGJ5IFNjYW4hIVxuIik7CisJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckNDSzBfQ0NBLCBiTWFza0J5dGUyLCAweDgzKTsKKwkJCVBIWV9TZXRUeFBvd2VyTGV2ZWw4MTkyUyhkZXYsIHByaXYtPmNoYW4pOworCQkJYnJlYWs7CiAJCWNhc2UgRldfQ01EX0hJR0hfUFdSX0RJU0FCTEU6Ci0JCQkvL2lmKHBNZ250SW5mby0+YlR1cmJvU2NhbikKLQkJCXsKLQkJCQkvL0xvd2VyIGluaXRpYWwgZ2FpbgotCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByT0ZETTBfWEFBR0NDb3JlMSwgYk1hc2tCeXRlMCwgMHgxNyk7Ci0JCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJPRkRNMF9YQkFHQ0NvcmUxLCBiTWFza0J5dGUwLCAweDE3KTsKLQkJCQkvLyBDQ0EgdGhyZXNob2xkCi0JCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJDQ0swX0NDQSwgYk1hc2tCeXRlMiwgMHg0MCk7Ci0JCQkJLy8gRGlzYWJsZSBPRkRNIFBhcnQKLQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgck9GRE0wX1RSTXV4UGFyLCBiTWFza0J5dGUyLCAweDEpOwotCQkJCVNjYW5SZWdpc3RlciA9IHJ0bDgxOTJfUXVlcnlCQlJlZyhkZXYsIHJPRkRNMF9SeERldGVjdG9yMSxiTWFza0RXb3JkKTsKLQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgck9GRE0wX1J4RGV0ZWN0b3IxLCAweGYsIDB4Zik7Ci0JCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJPRkRNMV9UUnhQYXRoRW5hYmxlLCAweGYsIDB4MCk7Ci0JCQl9CisJCQlSVF9UUkFDRShDT01QX0NNRCwgIltGVyBDTURdIEhpZ2ggUHdyIERpc2FibGUhIVxuIik7CisJCQlpZihwcml2LT5ETUZsYWcgJiBIQUxfRE1fSElQV1JfRElTQUJMRSkKKwkJCQlicmVhazsKKwkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByT0ZETTBfWEFBR0NDb3JlMSwgYk1hc2tCeXRlMCwgMHgxNyk7CisJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgck9GRE0wX1hCQUdDQ29yZTEsIGJNYXNrQnl0ZTAsIDB4MTcpOworCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJDQ0swX0NDQSwgYk1hc2tCeXRlMiwgMHg0MCk7CiAJCQlicmVhazsKIAogCQljYXNlIEZXX0NNRF9ISUdIX1BXUl9FTkFCTEU6Ci0JCQkvL2lmKHBNZ250SW5mby0+YlR1cmJvU2NhbikKLQkJCXsKLQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgck9GRE0wX1hBQUdDQ29yZTEsIGJNYXNrQnl0ZTAsIDB4MzYpOwotCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByT0ZETTBfWEJBR0NDb3JlMSwgYk1hc2tCeXRlMCwgMHgzNik7CisJCQlSVF9UUkFDRShDT01QX0NNRCwgIltGVyBDTURdIEhpZ2ggUHdyIEVuYWJsZSEhXG4iKTsKKwkJCWlmKHByaXYtPkRNRmxhZyAmIEhBTF9ETV9ISVBXUl9ESVNBQkxFKQorCQkJCWJyZWFrOworCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJDQ0swX0NDQSwgYk1hc2tCeXRlMiwgMHg4Myk7CisJCQlicmVhazsKIAotCQkJCS8vIENDQSB0aHJlc2hvbGQKLQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckNDSzBfQ0NBLCBiTWFza0J5dGUyLCAweDgzKTsKLQkJCQkvLyBFbmFibGUgT0ZETSBQYXJ0Ci0JCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJPRkRNMF9UUk11eFBhciwgYk1hc2tCeXRlMiwgMHgwKTsKKwkJY2FzZSBGV19DTURfTFBTX0VOVEVSOgorCQkJUlRfVFJBQ0UoQ09NUF9DTUQsICJbRlcgQ01EXSBFbnRlciBMUFMgbW9kZSEhXG4iKTsKKwkJCUN1cnJlbnRBSUQgPSBwcml2LT5pZWVlODAyMTEtPmFzc29jX2lkOworCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgV0ZNNSwgKEZXX0xQU19FTlRFUnwgKChDdXJyZW50QUlEfDB4YzAwMCk8PDgpKSAgICApOworCQkJQ2hrRndDbWRJb0RvbmUoZGV2KTsKKwkJCXBIVEluZm8tPklPVEFjdGlvbiB8PSAgSFRfSU9UX0FDVF9ESVNBQkxFX0VEQ0FfVFVSQk87CisJCQlicmVhazsKIAotCQkJCS8vTFpNIEFERCBiZWNhdXNlIHNvbWV0aW1lcyB0aGVyZSBpcyBubyBGV19DTURfSElHSF9QV1JfRElTQUJMRSwgdGhpcyB2YWx1ZSB3aWxsIGJlIDAuCi0JCQkJaWYoU2NhblJlZ2lzdGVyICE9IDApewotCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByT0ZETTBfUnhEZXRlY3RvcjEsIGJNYXNrRFdvcmQsIFNjYW5SZWdpc3Rlcik7Ci0JCQkJfQorCQljYXNlIEZXX0NNRF9MUFNfTEVBVkU6CisJCQlSVF9UUkFDRShDT01QX0NNRCwgIltGVyBDTURdIExlYXZlIExQUyBtb2RlISFcbiIpOworCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgV0ZNNSwgRldfTFBTX0xFQVZFICk7CisJCQlDaGtGd0NtZElvRG9uZShkZXYpOworCQkJcEhUSW5mby0+SU9UQWN0aW9uICY9ICAofkhUX0lPVF9BQ1RfRElTQUJMRV9FRENBX1RVUkJPKTsKKwkJCWJyZWFrOwogCi0JCQkJaWYocHJpdi0+cmZfdHlwZSA9PSBSRl8xVDJSIHx8IHByaXYtPnJmX3R5cGUgPT0gUkZfMlQyUikKLQkJCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJPRkRNMV9UUnhQYXRoRW5hYmxlLCAweGYsIDB4Myk7Ci0JCQkJZWxzZQotCQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgck9GRE0xX1RSeFBhdGhFbmFibGUsIDB4ZiwgMHgxKTsKLQkJCX0KKwkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCX0KIAotCXByaXYtPlNldEZ3Q21kSW5Qcm9ncmVzcyA9IGZhbHNlOy8vIENsZWFyIEZXIENNRCBvcGVyYXRpb24gZmxhZy4KKwlwcml2LT5TZXRGd0NtZEluUHJvZ3Jlc3MgPSBmYWxzZTsKIAlSVF9UUkFDRShDT01QX0NNRCwgIjwtLS1TZXRGd0NtZElPV29ya0l0ZW1DYWxsYmFjaygpXG4iKTsKIAogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlUuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJVLmgKaW5kZXggZWNjZjQ0Ny4uNzQxYzZiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyVS5oCkBAIC0xLDMzICsxLDQwIEBACi0vKgotICAgVGhpcyBpcyBwYXJ0IG9mIHJ0bDgxODcgT3BlblNvdXJjZSBkcml2ZXIuCi0gICBDb3B5cmlnaHQgKEMpIEFuZHJlYSBNZXJlbGxvIDIwMDQtMjAwNSAgPGFuZHJlYW1ybEB0aXNjYWxpLml0PgotICAgUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIEdQTCAoR2VuZXJhbCBQdWJsaWMgTGljZW5jZSkKLQotICAgUGFydHMgb2YgdGhpcyBkcml2ZXIgYXJlIGJhc2VkIG9uIHRoZSBHUEwgcGFydCBvZiB0aGUKLSAgIG9mZmljaWFsIHJlYWx0ZWsgZHJpdmVyCi0KLSAgIFBhcnRzIG9mIHRoaXMgZHJpdmVyIGFyZSBiYXNlZCBvbiB0aGUgcnRsODE5MiBkcml2ZXIgc2tlbGV0b24KLSAgIGZyb20gUGF0cmljIFNjaGVua2UgJiBBbmRyZXMgU2Fsb21vbgotCi0gICBQYXJ0cyBvZiB0aGlzIGRyaXZlciBhcmUgYmFzZWQgb24gdGhlIEludGVsIFBybyBXaXJlbGVzcyAyMTAwIEdQTCBkcml2ZXIKLQotICAgV2Ugd2FudCB0byB0YW5rcyB0aGUgQXV0aG9ycyBvZiB0aG9zZSBwcm9qZWN0cyBhbmQgdGhlIE5kaXN3cmFwcGVyCi0gICBwcm9qZWN0IEF1dGhvcnMuCi0qLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIFJlYWx0ZWsgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBMaW51eCBkZXZpY2UgZHJpdmVyIGZvciBSVEw4MTkyVQorICoKKyAqIEJhc2VkIG9uIHRoZSByODE4NyBkcml2ZXIsIHdoaWNoIGlzOgorICogQ29weXJpZ2h0IDIwMDQtMjAwNSBBbmRyZWEgTWVyZWxsbyA8YW5kcmVhbXJsQHRpc2NhbGkuaXQ+LCBldCBhbC4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2lmbmRlZiBSODE5eFVfSAogI2RlZmluZSBSODE5eFVfSAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0vLyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLS8vI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTUxLDkgKzU4LDcgQEAKICNkZWZpbmUgUlRMODE5WF9FRVBST01fQ01EX0NLCQkoMSA8PCAyKQogI2RlZmluZSBSVEw4MTlYX0VFUFJPTV9DTURfQ1MJCSgxIDw8IDMpCiAKLS8vI2RlZmluZSBSVEw4MTkyVQogI2RlZmluZSBSVEw4MTl4VV9NT0RVTEVfTkFNRSAicnRsODE5eFUiCi0vL2FkZGVkIGZvciBIVyBzZWN1cml0eSwgam9obi4wNjI5CiAjZGVmaW5lIEZBTFNFIDAKICNkZWZpbmUgVFJVRSAxCiAjZGVmaW5lIE1BWF9LRVlfTEVOICAgICA2MQpAQCAtMTE0LDYgKzExOSw3IEBACiAKICNkZWZpbmUgQ09NUF9UUkFDRQkJCQlCSVQwCQkvLyBGb3IgZnVuY3Rpb24gY2FsbCB0cmFjaW5nLgogI2RlZmluZSBDT01QX0RCRwkJCQlCSVQxCQkvLyBPbmx5IGZvciB0ZW1wb3JhcnkgZGVidWcgbWVzc2FnZS4KKyNkZWZpbmUgQ09NUF9NTE1FCQkJCUJJVDEKICNkZWZpbmUgQ09NUF9JTklUCQkJCUJJVDIJCS8vIGR1cmluZyBkcml2ZXIgaW5pdGlhbGl6YXRpb24gLyBoYWx0IC8gcmVzZXQuCiAKIApAQCAtMTM3LDE0ICsxNDMsMTQgQEAKICNkZWZpbmUgQ09NUF9TRUMJCQkgICAgICAgIEJJVDIwCS8vIEV2ZW50IGhhbmRsaW5nCiAjZGVmaW5lIENPTVBfTEVECQkJCUJJVDIxCS8vIEZvciBMRUQuCiAjZGVmaW5lIENPTVBfUkYJCQkJCUJJVDIyCS8vIEZvciBSRi4KLS8vMSEhISEhISEhISEhISEhISEhISEhISEhISEhIQorI2RlZmluZSBDT01QX1JYREVTQwkJCQlCSVQyMworCiAjZGVmaW5lIENPTVBfUlhERVNDCQkJCUJJVDIzCS8vIFNob3cgUnggZGVzYyBpbmZvcm1hdGlvbiBmb3IgU0QzIGRlYnVnLiBBZGRlZCBieSBBbm5pZSwgMjAwNi0wNy0xNS4KLS8vMS8vMUF0dGVudGlvbiBQbGVhc2UhISE8MTFuIG9yIDgxOTAgc3BlY2lmaWMgY29kZSBzaG91bGQgYmUgcHV0IGJlbG93IHRoaXMgbGluZT4KLS8vMSEhISEhISEhISEhISEhISEhISEhISEhISEhIQogCiAjZGVmaW5lIENPTVBfRklSTVdBUkUJCQkJQklUMjQJLy9mb3IgZmlybXdhcmUgZG93bmxvYWRpbmcKICNkZWZpbmUgQ09NUF9IVAkJCQkJQklUMjUJLy8gRm9yIDgwMi4xMW4gSFQgcmVsYXRlZCBpbmZvcm1hdGlvbi4gYnkgRW1pbHkgMjAwNi04LTExCiAjZGVmaW5lIENPTVBfQU1TRFUJCQkJQklUMjYJLy8gRm9yIEEtTVNEVSBEZWJ1Z2dpbmcKKyNkZWZpbmUgQ09NUF9QUwkJCQkJQklUMjYKIAogI2RlZmluZSBDT01QX1NDQU4JCQkJQklUMjcKICNkZWZpbmUgQ09NUF9DTUQJCQkJQklUMjgKQEAgLTE1OSw4ICsxNjUsNyBAQAogICAgICAgICAgICAgICAgIHByaW50ayggIkFzc2VydGlvbiBmYWlsZWQhICVzLCVzLCVzLGxpbmU9JWRcbiIsIFwKICAgICAgICAgICAgICAgICAjZXhwcixfX0ZJTEVfXyxfX0ZVTkNUSU9OX18sX19MSU5FX18pOyAgICAgICAgICBcCiAgICAgICAgIH0KLS8vd2IgYWRkZWQgdG8gZGVidWcgb3V0IGRhdGEgYnVmCi0vL2lmIHlvdSB3YW50IHByaW50IERBVEEgYnVmZmVyIHJlbGF0ZWQgQkEsIHBsZWFzZSBzZXQgaWVlZTgwMjExX2RlYnVnX2xldmVsIHRvIERBVEF8QkEKKwogI2RlZmluZSBSVF9ERUJVR19EQVRBKGxldmVsLCBkYXRhLCBkYXRhbGVuKSAgICAgIFwKICAgICAgICAgZG97IGlmICgocnRfZ2xvYmFsX2RlYnVnX2NvbXBvbmVudCAmIChsZXZlbCkpID09IChsZXZlbCkpICAgXAogICAgICAgICAgICAgICAgIHsgICAgICAgXApAQCAtMTgwLDI1ICsxODUsMTcgQEAKICNkZWZpbmUgUlRfREVCVUdfREFUQShsZXZlbCwgZGF0YSwgZGF0YWxlbikgZG8ge30gd2hpbGUoMCkKICNlbmRpZiAvKiBSVEw4MTY5X0RFQlVHICovCiAKLS8vI2lmZGVmIFJUTDgxOTJTVQogCS8vMlRPRE86IFdlIHNob3VsZCBkZWZpbmUgODE5MlMgZmlybXdhcmUgcmVsYXRlZCBtYWNybyBzZXR0aW5ncyBoZXJlISEKIAkjZGVmaW5lIFJUTDgxOVhfREVGQVVMVF9SRl9UWVBFCQkJCVJGXzFUMlIKIAkjZGVmaW5lIFJUTDgxOVhfVE9UQUxfUkZfUEFUSAkJCQkyCiAKLQkvLyNkZWZpbmUgUnRsODE5WEZ3Qm9vdEFycmF5CQkJCQlSdGw4MTkyVXNiRndCb290QXJyYXkKLQkvLyNkZWZpbmUgUnRsODE5WEZ3TWFpbkFycmF5CQkJCQlSdGw4MTkyVXNiRndNYWluQXJyYXkKLQkvLyNkZWZpbmUgUnRsODE5WEZ3RGF0YUFycmF5CQkJCQlSdGw4MTkyVXNiRndEYXRhQXJyYXkKLQogCSNkZWZpbmUgUnRsODE5WE1BQ1BIWV9BcnJheV9QRwkJCQlSdGw4MTkyVXNiTUFDUEhZX0FycmF5X1BHCiAJI2RlZmluZSBSdGw4MTlYTUFDUEhZX0FycmF5CQkJCQlSdGw4MTkyVXNiTUFDUEhZX0FycmF5CiAJI2RlZmluZSBSdGw4MTlYUEhZX1JFR0FycmF5CQkJCQlSdGw4MTkyVXNiUEhZX1JFR0FycmF5CiAJI2RlZmluZSBSdGw4MTlYUEhZX1JFR18xVDJSQXJyYXkJCQkJUnRsODE5MlVzYlBIWV9SRUdfMVQyUkFycmF5Ci0JLy8jZGVmaW5lIFJ0bDgxOVhSYWRpb0FfQXJyYXkJCQkJCVJ0bDgxOTJVc2JSYWRpb0FfQXJyYXkKLQkvLyNkZWZpbmUgUnRsODE5WFJhZGlvQl9BcnJheQkJCQkJUnRsODE5MlVzYlJhZGlvQl9BcnJheQogCSNkZWZpbmUgUnRsODE5WFJhZGlvQ19BcnJheQkJCQkJUnRsODE5MlVzYlJhZGlvQ19BcnJheQogCSNkZWZpbmUgUnRsODE5WFJhZGlvRF9BcnJheQkJCQkJUnRsODE5MlVzYlJhZGlvRF9BcnJheQogCi0JLy8yMDA4LjExLjA2IEFkZC4KIAkjZGVmaW5lIFJ0bDgxOVhGd0ltYWdlQXJyYXkJCQkJCVJ0bDgxOTJTVUZ3SW1nQXJyYXkKIAkjZGVmaW5lIFJ0bDgxOVhNQUNfQXJyYXkJCQkJCQlSdGw4MTkyU1VNQUNfMlRfQXJyYXkKIAkjZGVmaW5lIFJ0bDgxOVhBR0NUQUJfQXJyYXkJCQkJCVJ0bDgxOTJTVUFHQ1RBQl9BcnJheQpAQCAtMjEyLDggKzIwOSw2IEBACiAJI2RlZmluZSBSdGw4MTlYUmFkaW9CX0dNX0FycmF5CQkJCVJ0bDgxOTJTVVJhZGlvQl9HTV9BcnJheQogCSNkZWZpbmUgUnRsODE5WFJhZGlvQV90bzFUX0FycmF5CQkJCVJ0bDgxOTJTVVJhZGlvQV90bzFUX0FycmF5CiAJI2RlZmluZSBSdGw4MTlYUmFkaW9BX3RvMlRfQXJyYXkJCQkJUnRsODE5MlNVUmFkaW9BX3RvMlRfQXJyYXkKLS8vI2VuZGlmCi0KIC8vCiAvLyBRdWV1ZSBTZWxlY3QgVmFsdWUgaW4gVHhEZXNjCiAvLwpAQCAtMjU2LDcgKzI1MSw2IEBACiAjZGVmaW5lIERFU0M5MF9SQVRFTUNTMTUgICAgICAgICAgICAgICAgICAgICAgICAweDBmCiAjZGVmaW5lIERFU0M5MF9SQVRFTUNTMzIgICAgICAgICAgICAgICAgICAgICAgICAweDIwCiAKLS8vI2lmZGVmIFJUTDgxOTJTVQogLy8gQ0NLIFJhdGVzLCBUeEhUID0gMAogI2RlZmluZSBERVNDOTJTX1JBVEUxTQkJCQkJMHgwMAogI2RlZmluZSBERVNDOTJTX1JBVEUyTQkJCQkJMHgwMQpAQCAtMjkyLDEzICsyODYsMTIgQEAKICNkZWZpbmUgREVTQzkyU19SQVRFTUNTMTUJCQkJMHgxYgogI2RlZmluZSBERVNDOTJTX1JBVEVNQ1MxNV9TRwkJCTB4MWMKICNkZWZpbmUgREVTQzkyU19SQVRFTUNTMzIJCQkJMHgyMAotLy8jZW5kaWYKIAogI2RlZmluZSBSVEw4MTlYX0RFRkFVTFRfUkZfVFlQRSBSRl8xVDJSCiAKICNkZWZpbmUgSUVFRTgwMjExX1dBVENIX0RPR19USU1FICAgIDIwMDAKICNkZWZpbmUJCVBIWV9CZWFjb25fUlNTSV9TTElEX1dJTl9NQVgJCTEwCi0vL2ZvciB0eHBvd2VydHJhY2tpbmcgYnkgYW15CisvL2ZvciB0eHBvd2VydHJhY2tpbmcKICNkZWZpbmUgCU9GRE1fVGFibGVfTGVuZ3RoCTE5CiAjZGVmaW5lCUNDS19UYWJsZV9sZW5ndGgJMTIKIApAQCAtNTIyLDcgKzUxNSw2IEBACiAJdTggb3V0X3BpcGU7CiB9cnRsODE5Ml9yeF9pbmZvIDsKIAotLy90eXBlZGVmIHN0cnVjdCBfUlhfREVTQ19TVEFUVVNfODE5MlNVewogdHlwZWRlZiBzdHJ1Y3QgcnhfZGVzY184MTl4X3VzYnsKIAkvL0RXT1JEIDAKIAl1MTYJCUxlbmd0aDoxNDsKQEAgLTU4Miw3NyArNTc0LDM0IEBACiAKIAkvL0RXT1JEIDUKIAl1MzIJCVRTRkw7Ci0vL31SWF9ERVNDX1NUQVRVU184MTkyU1UsICpQUlhfREVTQ19TVEFUVVNfODE5MlNVOwogfXJ4X2Rlc2NfODE5eF91c2IsICpwcnhfZGVzY184MTl4X3VzYjsKIAogCiAvLwogLy8gRHJpdmVyIGluZm8gYXJlIHdyaXR0ZW4gdG8gdGhlIGJlZ2luaW5nIG9mIHRoZSBSeEJ1ZmZlcgogLy8KLS8vdHlwZWRlZiBzdHJ1Y3QgX1JYX0RSSVZFUl9JTkZPXzgxOTJTewogdHlwZWRlZiBzdHJ1Y3QgcnhfZHJ2aW5mb184MTl4X3VzYnsKLQkvLwotCS8vIERyaXZlciBpbmZvIGNvbnRhaW4gUEhZIHN0YXR1cyBhbmQgb3RoZXIgdmFyaWFiZWwgc2l6ZSBpbmZvCi0JLy8gUEhZIFN0YXR1cyBjb250ZW50IGFzIGJlbG93Ci0JLy8KLQotCS8vRFdPUkQgMAotCS8qdTRCeXRlCQkJZ2Fpbl8wOjc7Ci0JdTRCeXRlCQkJdHJzd18wOjE7Ci0JdTRCeXRlCQkJZ2Fpbl8xOjc7Ci0JdTRCeXRlCQkJdHJzd18xOjE7Ci0JdTRCeXRlCQkJZ2Fpbl8yOjc7Ci0JdTRCeXRlCQkJdHJzd18yOjE7Ci0JdTRCeXRlCQkJZ2Fpbl8zOjc7Ci0JdTRCeXRlCQkJdHJzd18zOjE7CSovCiAJdTgJCQlnYWluX3Ryc3dbNF07CiAKIAkvL0RXT1JEIDEKLQkvKnU0Qnl0ZQkJCXB3ZGJfYWxsOjg7Ci0JdTRCeXRlCQkJY2Zvc2hvXzA6ODsKLQl1NEJ5dGUJCQljZm9zaG9fMTo4OwotCXU0Qnl0ZQkJCWNmb3Nob18yOjg7Ki8KIAl1OAkJCXB3ZGJfYWxsOwogCXU4CQkJY2Zvc2hvWzRdOwogCiAJLy9EV09SRCAyCi0JLyp1NEJ5dGUJCQljZm9zaG9fMzo4OwotCXU0Qnl0ZQkJCWNmb3RhaWxfMDo4OwotCXU0Qnl0ZQkJCWNmb3RhaWxfMTo4OwotCXU0Qnl0ZQkJCWNmb3RhaWxfMjo4OyovCiAJdTgJCQljZm90YWlsWzRdOwogCiAJLy9EV09SRCAzCi0JLyp1NEJ5dGUJCQljZm90YWlsXzM6ODsKLQl1NEJ5dGUJCQlyeGV2bV8wOjg7Ci0JdTRCeXRlCQkJcnhldm1fMTo4OwotCXU0Qnl0ZQkJCXJ4c25yXzA6ODsqLwogCWNoYXIJCQkgICAgICAgIHJ4ZXZtWzJdOwogCWNoYXIJCQkgICAgICAgIHJ4c25yWzRdOwogCiAJLy9EV09SRCA0Ci0JLyp1NEJ5dGUJCQlyeHNucl8xOjg7Ci0JdTRCeXRlCQkJcnhzbnJfMjo4OwotCXU0Qnl0ZQkJCXJ4c25yXzM6ODsKLQl1NEJ5dGUJCQlwZHNucl8wOjg7Ki8KIAl1OAkJCXBkc25yWzJdOwogCiAJLy9EV09SRCA1Ci0JLyp1NEJ5dGUJCQlwZHNucl8xOjg7Ci0JdTRCeXRlCQkJY3NpX2N1cnJlbnRfMDo4OwotCXU0Qnl0ZQkJCWNzaV9jdXJyZW50XzE6ODsKLQl1NEJ5dGUJCQljc2lfdGFyZ2V0XzA6ODsqLwogCXU4CQkJY3NpX2N1cnJlbnRbMl07CiAJdTgJCQljc2lfdGFyZ2V0WzJdOwogCiAJLy9EV09SRCA2Ci0JLyp1NEJ5dGUJCQljc2lfdGFyZ2V0XzE6ODsKLQl1NEJ5dGUJCQlzaWdldm06ODsKLQl1NEJ5dGUJCQltYXhfZXhfcHdyOjg7Ci0JdTRCeXRlCQkJZXhfaW50Zl9mbGFnOjE7Ci0JdTRCeXRlCQkJc2dpX2VuOjE7Ci0JdTRCeXRlCQkJcnhzYzoyOwotCXU0Qnl0ZQkJCXJlc2VydmU6NDsqLwogCXU4CQkJc2lnZXZtOwogCXU4CQkJbWF4X2V4X3B3cjsKIAl1OAkJCWV4X2ludGZfZmxhZzoxOwpAQCAtNjY5LDEwICs2MTgsOCBAQAogCiAjZGVmaW5lIE1BWF9ERVZfQUREUl9TSVpFCQk4ICAvKiBzdXBwb3J0IHRpbGwgNjQgYml0IGJ1cyB3aWR0aCBPUyAqLwogI2RlZmluZSBNQVhfRklSTVdBUkVfSU5GT1JNQVRJT05fU0laRSAgIDMyIC8qMjAwNi8wNC8zMCBieSBFbWlseSBmb3JSVEw4MTkwKi8KLS8vI2RlZmluZSBNQVhfODAyXzExX0hFQURFUl9MRU5HVEggICAgICAgICg0MCArIE1BWF9GSVJNV0FSRV9JTkZPUk1BVElPTl9TSVpFKQogI2RlZmluZSBFTkNSWVBUSU9OX01BWF9PVkVSSEVBRAkJMTI4CiAjZGVmaW5lCVVTQl9IV0RFU0NfSEVBREVSX0xFTgkJc2l6ZW9mKHR4X2Rlc2NfODE5eF91c2IpCi0vLyNkZWZpbmUgVFhfUEFDS0VUX1NISUZUX0JZVEVTIAkgIAkoVVNCX0hXREVTQ19IRUFERVJfTEVOICsgc2l6ZW9mKHR4X2Z3aW5mb184MTl4X3VzYikpCiAjZGVmaW5lIE1BWF9GUkFHTUVOVF9DT1VOVAkJOAogI2lmZGVmIFJUTDgxOTJVCiAjZGVmaW5lIE1BWF9UUkFOU01JVF9CVUZGRVJfU0laRQkJCTgwMDAKQEAgLTY4MSwxOSArNjI4LDE1IEBACiAjZW5kaWYKICNkZWZpbmUgc2NyY2xuZwkJCQkJNAkJLy8gb2N0ZXRzIGZvciBjcmMzMiAoRkNTLCBJQ1YpCiAKKyNkZWZpbmUJCUhBTF9ETV9ESUdfRElTQUJMRQkJCQlCSVQwCisjZGVmaW5lCQlIQUxfRE1fSElQV1JfRElTQUJMRQkJCQlCSVQxCisKIHR5cGVkZWYgZW51bSByZl9vcHR5cGUKIHsKIAlSRl9PUF9CeV9TV18zd2lyZSA9IDAsCiAJUkZfT1BfQnlfRlcsCiAJUkZfT1BfTUFYCiB9cmZfb3BfdHlwZTsKLS8qIDgxOTAgTG9vcGJhY2sgTW9kZSBkZWZpbml0aW9uICovCi10eXBlZGVmIGVudW0gX3J0bDgxOXhVc2JfbG9vcGJhY2t7Ci0JUlRMODE5eFVfTk9fTE9PUEJBQ0sgPSAwLAotCVJUTDgxOXhVX01BQ19MT09QQkFDSyA9IDEsCi0JUlRMODE5eFVfRE1BX0xPT1BCQUNLID0gMiwKLQlSVEw4MTl4VV9DQ0tfTE9PUEJBQ0sgPSAzLAotfXJ0bDgxOXhVc2JfbG9vcGJhY2tfZTsKIAogLyogZm9yIHJ0bDgxOXggKi8KIHR5cGVkZWYgZW51bSBfUlRfU1RBVFVTewpAQCAtNzAzLDE2ICs2NDYsMTMgQEAKIAlSVF9TVEFUVVNfUkVTT1VSQ0UgPSAzCiB9UlRfU1RBVFVTLCpQUlRfU1RBVFVTOwogCi0vLyNpZmRlZiBSVEw4MTkyU1UKIHR5cGVkZWYgZW51bSBfUlRMODE5MlNVU0JfTE9PUEJBQ0t7CiAJUlRMODE5MlNVX05PX0xPT1BCQUNLID0gMCwKIAlSVEw4MTkyU1VfTUFDX0xPT1BCQUNLID0gMSwKIAlSVEw4MTkyU1VfRE1BX0xPT1BCQUNLID0gMiwKIAlSVEw4MTkyU1VfQ0NLX0xPT1BCQUNLID0gMywKIH1SVEw4MTkyU1VTQl9MT09QQkFDS19FOwotLy8jZW5kaWYKIAotLy8rYnkgYW15IDA4MDUwNwogI2RlZmluZSBNQVhfUkVDRUlWRV9CVUZGRVJfU0laRQk5MTAwCS8vIEFkZCB0aGlzIHRvIDkxMDAgYnl0ZXMgdG8gcmVjZWl2ZSBBLU1TRFUgZnJvbSBSVC1BUAogCiAKQEAgLTc5MCwxMCArNzMwLDYgQEAKIHR5cGVkZWYgc3RydWN0IF9ydF85eF90eF9yYXRlX2hpc3RvcnkgewogCXUzMiAgICAgICAgICAgICBjY2tbNF07CiAJdTMyICAgICAgICAgICAgIG9mZG1bOF07Ci0JLy8gSFRfTUNTWzBdW106IEJXPTAgU0c9MAotCS8vIEhUX01DU1sxXVtdOiBCVz0xIFNHPTAKLQkvLyBIVF9NQ1NbMl1bXTogQlc9MCBTRz0xCi0JLy8gSFRfTUNTWzNdW106IEJXPTEgU0c9MQogCXUzMiAgICAgICAgICAgICBodF9tY3NbNF1bMTZdOwogfXJ0X3R4X3JhaGlzX3QsICpwcnRfdHhfcmFoaXNfdDsKIHR5cGVkZWYgc3RydWN0IF9SVF9TTU9PVEhfREFUQV80UkYgewpAQCAtODA4LDExICs3NDQsNiBAQAogdHlwZWRlZiBzdHJ1Y3QgU3RhdHMKIHsKIAl1bnNpZ25lZCBsb25nIHR4cmR1OwotLy8JdW5zaWduZWQgbG9uZyByeHJkdTsKLQkvL3Vuc2lnbmVkIGxvbmcgcnhub2xhc3Q7Ci0JLy91bnNpZ25lZCBsb25nIHJ4bm9kYXRhOwotLy8JdW5zaWduZWQgbG9uZyByeHJlc2V0OwotLy8JdW5zaWduZWQgbG9uZyByeG5vcG9pbnRlcjsKIAl1bnNpZ25lZCBsb25nIHJ4b2s7CiAJdW5zaWduZWQgbG9uZyByeGZyYW1nbWVudDsKIAl1bnNpZ25lZCBsb25nIHJ4Y21kcGt0WzRdOwkJLy8wOC8wNS8wOCBhbXkgcnggY21kIGVsZW1lbnQgdHhmZWVkYmFjay9iY24gcmVwb3J0L2NmZyBzZXQvcXVlcnkKQEAgLTgzMiwxOCArNzYzLDggQEAKIAl1bnNpZ25lZCBsb25nIHR4bnBlcnI7CiAJdW5zaWduZWQgbG9uZyB0eG5wZHJvcDsKIAl1bnNpZ25lZCBsb25nIHR4cmVzdW1lZDsKLS8vCXVuc2lnbmVkIGxvbmcgcnhlcnI7Ci0vLwl1bnNpZ25lZCBsb25nIHJ4b3ZlcmZsb3c7Ci0vLwl1bnNpZ25lZCBsb25nIHJ4aW50OwogCXVuc2lnbmVkIGxvbmcgdHhucG9raW50OwotLy8JdW5zaWduZWQgbG9uZyB0eGhwb2tpbnQ7Ci0vLwl1bnNpZ25lZCBsb25nIHR4aHBlcnI7Ci0vLwl1bnNpZ25lZCBsb25nIGludHM7Ci0vLwl1bnNpZ25lZCBsb25nIHNoaW50czsKIAl1bnNpZ25lZCBsb25nIHR4b3ZlcmZsb3c7Ci0vLwl1bnNpZ25lZCBsb25nIHJ4ZG1hZmFpbDsKLS8vCXVuc2lnbmVkIGxvbmcgdHhiZWFjb247Ci0vLwl1bnNpZ25lZCBsb25nIHR4YmVhY29uZXJyOwogCXVuc2lnbmVkIGxvbmcgdHhscG9raW50OwogCXVuc2lnbmVkIGxvbmcgdHhscGRyb3A7CiAJdW5zaWduZWQgbG9uZyB0eGxwZXJyOwpAQCAtOTA5LDE0ICs4MzAsMTEgQEAKIAl1MzIJQ3VycmVudFNob3dUeGF0ZTsKIH0gU3RhdHM7CiAKLQogLy8gQmFuZHdpZHRoIE9mZnNldAogI2RlZmluZSBIQUxfUFJJTUVfQ0hOTF9PRkZTRVRfRE9OVF9DQVJFCQkwCiAjZGVmaW5lIEhBTF9QUklNRV9DSE5MX09GRlNFVF9MT1dFUgkJCTEKICNkZWZpbmUgSEFMX1BSSU1FX0NITkxfT0ZGU0VUX1VQUEVSCQkJMgogCi0vLytieSBhbXkgMDgwNTA3Ci0KIHR5cGVkZWYgc3RydWN0IAlDaG5sQWNjZXNzU2V0dGluZyB7CiAJdTE2IFNJRlNfVGltZXI7CiAJdTE2IERJRlNfVGltZXI7CkBAIC05NTYsMTQgKzg3NCwxMiBAQAogICAgICAgICBSRl9QU0VVRE9fMTFOID0gNSwKIH1SVF9SRl9UWVBFXzgxOXhVLCAqUFJUX1JGX1RZUEVfODE5eFU7CiAKLS8vI2lmZGVmIFJUTDgxOTJTVQogdHlwZWRlZiBlbnVtIF9SRl9QT1dFUl9TVEFURXsKIAlSRl9PTiwKIAlSRl9TTEVFUCwKIAlSRl9PRkYsCiAJUkZfU0hVVF9ET1dOLAogfVJGX1BPV0VSX1NUQVRFLCAqUFJGX1BPV0VSX1NUQVRFOwotLy8jZW5kaWYKIAogdHlwZWRlZiBzdHJ1Y3QgX3JhdGVfYWRhcHRpdmUKIHsKQEAgLTEwMTQsNyArOTMwLDYgQEAKIAl1OAkJCQljY2E7CiAKIH0gaW5pdF9nYWluLCAqcGluaXRfZ2FpbjsKLS8vYnkgYW15IDA2MDYKIAogdHlwZWRlZiBzdHJ1Y3QgX3BoeV9vZmRtX3J4X3N0YXR1c19yZXBvcnRfODE5eHVzYgogewpAQCAtMTA2Niw4ICs5ODEsMjYgQEAKIAlSVF9DSURfTmV0dHJvbml4ID0gMTEsCiAJUlRfQ0lEX0RMSU5LID0gMTIsCiAJUlRfQ0lEX1BST05FVCA9IDEzLAorCVJUX0NJRF9DT1JFR0EgPSAxNCwKKwlSVF9DSURfODE5eF9BTFBIQSA9IDE1LAorCVJUX0NJRF84MTl4X1NpdGVjb20gPSAxNiwKKwlSVF9DSURfQ0NYID0gMTcsCisJUlRfQ0lEXzgxOXhfTGVub3ZvID0gMTgsCisJUlRfQ0lEXzgxOXhfUU1JID0gMTksCisJUlRfQ0lEXzgxOXhfRWRpbWF4X0JlbGtpbiA9IDIwLAorCVJUX0NJRF84MTl4X1NlcmNvbW1fQmVsa2luID0gMjEsCisJUlRfQ0lEXzgxOXhfQ0FNRU8xID0gMjIsCisJUlRfQ0lEXzgxOXhfTVNJID0gMjMsCisJUlRfQ0lEXzgxOXhfQWNlciA9IDI0LAogfVJUX0NVU1RPTUVSX0lELCAqUFJUX0NVU1RPTUVSX0lEOwogCit0eXBlZGVmIGVudW0gX1JUX09QX01PREV7CisgICAgUlRfT1BfTU9ERV9BUCwKKyAgICBSVF9PUF9NT0RFX0lORlJBU1RSVUNUVVJFLAorICAgIFJUX09QX01PREVfSUJTUywKKyAgICBSVF9PUF9NT0RFX05PX0xJTkssCit9UlRfT1BfTU9ERSwgKlBSVF9PUF9NT0RFOworCiB0eXBlZGVmIGVudW0gX1JFU0VUX1RZUEUgewogCVJFU0VUX1RZUEVfTk9SRVNFVCA9IDB4MDAsCiAJUkVTRVRfVFlQRV9OT1JNQUwgPSAweDAxLApAQCAtMTA5Myw4ICsxMDI2LDYgQEAKIAlOSUNfODE5MlNVID0gNSwKIAl9IG5pY190OwogCi0vL2RlZmluZGVkIGJ5IFdCLiBSZWFkeSB0byBmaWxsIGhhbmRsZXJzIGZvciBkaWZmZXJlbnQgTklDIHR5cGVzLgotLy9hZGQgaGFuZGxlIGhlcmUgd2hlbiBuZWNlc3NhcnkuCiBzdHJ1Y3QgcnRsODE5eF9vcHN7CiAJbmljX3QgbmljX3R5cGU7CiAJdm9pZCAoKiBydGw4MTl4X3JlYWRfZWVwcm9tX2luZm8pKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMTExMywxMSArMTA0NCwxMiBAQAogCXN0cnVjdCBydGw4MTl4X29wcyogb3BzOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwogCS8qIGFkZGVkIGZvciBtYWludGFpbiBpbmZvIGZyb20gZWVwcm9tICovCisJc2hvcnQgZXByb210eXBlOwogCXUxNiBlZXByb21fdmlkOwogCXUxNiBlZXByb21fcGlkOwogCXU4ICBlZXByb21fQ3VzdG9tZXJJRDsKIAl1OCAgZWVwcm9tX1N1YkN1c3RvbWVySUQ7Ci0JdTggIGVlcHJvbV9DaGFubmVsUGxhbjsKKwl1MTYgIGVlcHJvbV9DaGFubmVsUGxhbjsKIAlSVF9DVVNUT01FUl9JRCBDdXN0b21lcklEOwogCUxFRF9TVFJBVEVHWV84MTl4VXNiCUxlZFN0cmF0ZWd5OwogCXU4ICB0eHF1ZXVlX3RvX291dHBpcGVtYXBbOV07CkBAIC0xMTI5LDc2ICsxMDYxLDU1IEBACiAJaW50IGlycTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZTgwMjExOwogCisJdTggUkFUUlRhYmxlQml0bWFwOworCisJdTMyCUlDX0N1dDsKIAlzaG9ydCBjYXJkXzgxOTI7IC8qIE86IHJ0bDgxOTIsIDE6cnRsODE4NSBWIEIvQywgMjpydGw4MTg1IFYgRCAqLwotCXU4IGNhcmRfODE5Ml92ZXJzaW9uOyAvKiBpZiBUQ1IgcmVwb3J0cyBjYXJkIFYgQi9DIHRoaXMgZGlzY3JpbWluYXRlcyAqLwotLy8Jc2hvcnQgcGh5X3ZlcjsgLyogbWVhbmluZ2Z1bCBmb3IgcnRsODIyNSAxOkEgMjpCIDM6QyAqLworCXUzMiBjYXJkXzgxOTJfdmVyc2lvbjsgLyogaWYgVENSIHJlcG9ydHMgY2FyZCBWIEIvQyB0aGlzIGRpc2NyaW1pbmF0ZXMgKi8KIAlzaG9ydCBlbmFibGVfZ3BpbzA7CiAJZW51bSBjYXJkX3R5cGUge1BDSSxNSU5JUENJLENBUkRCVVMsVVNCfWNhcmRfdHlwZTsKIAlzaG9ydCBod19wbGNwX2xlbjsKIAlzaG9ydCBwbGNwX3ByZWFtYmxlX21vZGU7CiAKIAlzcGlubG9ja190IGlycV9sb2NrOwotLy8Jc3BpbmxvY2tfdCBpcnFfdGhfbG9jazsKIAlzcGlubG9ja190IHR4X2xvY2s7CiAJc3BpbmxvY2tfdCBwc19sb2NrOwogICAgICAgICBzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisJYm9vbCBwc19mb3JjZTsKIAlzcGlubG9ja190IHJmX2xvY2s7IC8vdXNlZCB0byBsb2NrIHJmIHdyaXRlIG9wZXJhdGlvbiBhZGRlZCBieSB3YgorCXNwaW5sb2NrX3QgcmZfcHNfbG9jazsKIAogCXUxNiBpcnFfbWFzazsKLS8vCXNob3J0IGlycV9lbmFibGVkOwotLy8Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsgLy9jb21tZW50IHRoaXMgb3V0LgogCXNob3J0IGNoYW47CiAJc2hvcnQgc2VuczsKIAlzaG9ydCBtYXhfc2VuczsKIAotCi0JLy8JdTggY2h0eHB3clsxNV07IC8vY2hhbm5lbHMgZnJvbSAxIHRvIDE0LCAwIG5vdCB1c2VkCi0vLwl1OCBjaHR4cHdyX29mZG1bMTVdOyAvL2NoYW5uZWxzIGZyb20gMSB0byAxNCwgMCBub3QgdXNlZAotLy8JdTggY2NrX3R4cHdyX2Jhc2U7Ci0vLwl1OCBvZmRtX3R4cHdyX2Jhc2U7Ci0vLwl1OCBjaGFsbG93WzE1XTsgLy9jaGFubmVscyBmcm9tIDEgdG8gMTQsIDAgbm90IHVzZWQKIAlzaG9ydCB1cDsKIAlzaG9ydCBjcmNtb247IC8vaWYgMSBhbGxvdyBiYWQgY3JjIGZyYW1lIHJlY2VwdGlvbiBpbiBtb25pdG9yIG1vZGUKLS8vCXNob3J0IHByaXNtX2hkcjsKKwlib29sIGJTdXJwcmlzZVJlbW92ZWQ7CiAKLS8vCXN0cnVjdCB0aW1lcl9saXN0IHNjYW5fdGltZXI7Ci0JLypzaG9ydCBzY2FucGVuZGluZzsKLQlzaG9ydCBzdG9wc2NhbjsqLwotLy8Jc3BpbmxvY2tfdCBzY2FuX2xvY2s7Ci0vLwl1OCBhY3RpdmVfcHJvYmU7Ci0JLy91OCBhY3RpdmVfc2Nhbl9udW07CiAJc3RydWN0IHNlbWFwaG9yZSB3eF9zZW07CiAJc3RydWN0IHNlbWFwaG9yZSByZl9zZW07IC8vdXNlZCB0byBsb2NrIHJmIHdyaXRlIG9wZXJhdGlvbiBhZGRlZCBieSB3YiwgbW9kaWZpZWQgYnkgZGF2aWQKLS8vCXNob3J0IGh3X3dlcDsKIAotLy8Jc2hvcnQgZGlncGh5OwotLy8Jc2hvcnQgYW50YjsKLS8vCXNob3J0IGRpdmVyc2l0eTsKLS8vCXU4IGNzX3RyZXNob2xkOwotLy8Jc2hvcnQgcmNyX2NzZW5zZTsKIAl1OCByZl90eXBlOyAvLzAgbWVhbnMgMVQyUiwgMSBtZWFucyAyVDRSCiAJUlRfUkZfVFlQRV84MTl4VSByZl9jaGlwOwogCi0vLwl1MzIga2V5MFs0XTsKIAlzaG9ydCAoKnJmX3NldF9zZW5zKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LHNob3J0IHNlbnMpOwogCXU4ICgqcmZfc2V0X2NoYW4pKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsdTggY2gpOwogCXZvaWQgKCpyZl9jbG9zZSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAJdm9pZCAoKnJmX2luaXQpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCS8vc2hvcnQgcmF0ZTsKIAlzaG9ydCBwcm9taXNjOworICAgICAgICB1MzIgbWNfZmlsdGVyWzJdOwogCS8qc3RhdHMqLwogCXN0cnVjdCBTdGF0cyBzdGF0czsKIAlzdHJ1Y3QgaXdfc3RhdGlzdGljcyB3c3RhdHM7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkaXJfZGV2OwogCiAJLypSWCBzdHVmZiovCi0vLwl1MzIgKnJ4cmluZzsKLS8vCXUzMiAqcnhyaW5ndGFpbDsKLS8vCWRtYV9hZGRyX3QgcnhyaW5nZG1hOwogCXN0cnVjdCB1cmIgKipyeF91cmI7CiAJc3RydWN0IHVyYiAqKnJ4X2NtZF91cmI7CiAKLS8qIG1vZGlmaWVkIGJ5IGRhdmFkIGZvciBSeCBwcm9jZXNzICovCisvKiBmb3IgUnggcHJvY2VzcyAqLwogICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgcnhfcXVldWU7CiAgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCBza2JfcXVldWU7CiAKQEAgLTEyMDksNiArMTEyMCw3IEBACiAKIAogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBpcnFfcnhfdGFza2xldDsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgaXJxX3R4X3Rhc2tsZXQ7CiAJc3RydWN0IHVyYiAqcnh1cmJfdGFzazsKIAogCS8vMiBUeCBSZWxhdGVkIHZhcmlhYmxlcwpAQCAtMTIzNSw2ICsxMTQ3LDcgQEAKIAlzdHJ1Y3QgCUNobmxBY2Nlc3NTZXR0aW5nICBDaGFubmVsQWNjZXNzU2V0dGluZzsKIAogCXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF93cTsKKyAgICAgICAgc3RydWN0IHdvcmtfc3RydWN0IG1jYXN0X3dxOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAkvL2ZvciBydGw4MTl4VXNiCkBAIC0xMjQ0LDIxICsxMTU3LDI4IEBACiAJYm9vbCAJYkRjdXQ7CiAJYm9vbCBiQ3VycmVudFJ4QWdnckVuYWJsZTsKIAl1OCBSZl9Nb2RlOyAvL2FkZCBmb3IgRmlybXdhcmUgUkYgLVIvVyBzd2l0Y2gKKwl1OCBGd1JzdmRUeFBhZ2VDZmc7CiAJcHJ0X2Zpcm13YXJlCQlwRmlybXdhcmU7Ci0JcnRsODE5eFVzYl9sb29wYmFja19lCUxvb3BiYWNrTW9kZTsKKwlSVEw4MTkyU1VTQl9MT09QQkFDS19FCUxvb3BiYWNrTW9kZTsKIAlib29sIHVzYl9lcnJvcjsKIAogCXUxNiBFRVBST01UeFBvd2VyRGlmZjsKIAl1OCBFRVBST01UaGVybWFsTWV0ZXI7CiAJdTggRUVQUk9NUHdEaWZmOwogCXU4IEVFUFJPTUNyeXN0YWxDYXA7CisJdTggRUVQUk9NQmx1ZXRvb3RoQ29leGlzdDsKIAl1OCBFRVBST01fRGVmX1ZlcjsKIAl1OCBFRVBST01UeFBvd2VyTGV2ZWxDQ0s7Ly8gQ0NLIGNoYW5uZWwgMX4xNAogCXU4IEVFUFJPTVR4UG93ZXJMZXZlbENDS19WMVszXTsKIAl1OCBFRVBST01UeFBvd2VyTGV2ZWxPRkRNMjRHWzNdOyAvLyBPRkRNIDIuNEcgY2hhbm5lbCAxfjE0CiAJdTggRUVQUk9NVHhQb3dlckxldmVsT0ZETTVHWzI0XTsJLy8gT0ZETSA1RwogCi0vL1JUTDgxOTJTVQorCXU4IEVFUFJPTU9wdGlvbmFsOworCXU4IFNob3dSYXRlTW9kZTsKKwlib29sIGJGb3JjZWRTaG93UnhSYXRlOworCisJdTMyCVJmUmVnQ2hubFZhbFsyXTsKKwogCWJvb2wJYkRtRGlzYWJsZVByb3RlY3Q7CiAJYm9vbAliSWdub3JlRGlmZlJhdGVUeFBvd2VyT2Zmc2V0OwogCkBAIC0xMjc4LDYgKzExOTgsOSBAQAogCWJvb2wJCUVlcHJvbU9yRWZ1c2U7CiAJYm9vbAkJYkJvb3RGcm9tRWZ1c2U7CS8vIHN5c3RlbSBib290IGZvcm0gRUZVU0UKIAl1OCAgCQlFZnVzZU1hcFsyXVtIV1NFVF9NQVhfU0laRV85MlNdOworCXUxNgkJRWZ1c2VVc2VkQnl0ZXM7CisJdTgJCUVmdXNlVXNlZFBlcmNlbnRhZ2U7CisKIAogCXU4ICAJCUVFUFJPTVVzYk9wdGlvbjsKIAl1OCAgCQlFRVBST01Vc2JQaHlQYXJhbVs1XTsKQEAgLTEyOTAsNiArMTIxMyw4IEBACiAJdTggIAkJRUVQUk9NVHhQd3JUa01vZGU7CiAKIAl1OCAgCQliVFhQb3dlckRhdGFSZWFkRnJvbUVFUE9STTsKKwl1OAkJRUVQUk9NUmVndWxhdG9yeTsKKwl1OAkJRUVQUk9NUHdyR3JvdXBbMl1bM107CiAKIAl1OAkJRUVQUk9NVmVyc2lvbjsKIAl1OAkJRUVQUk9NVXNiRW5kUG9pbnROdW1iZXI7CkBAIC0xMjk4LDcgKzEyMjMsNyBAQAogCXU4CVJmVHhQd3JMZXZlbENja1syXVsxNF07CiAJdTgJUmZUeFB3ckxldmVsT2ZkbTFUWzJdWzE0XTsKIAl1OAlSZlR4UHdyTGV2ZWxPZmRtMlRbMl1bMTRdOwotCS8vIDIwMDkvMDEvMjAgTUggQWRkIGZvciBuZXcgRUVQUk9NIGZvcm1hdC4KKwkvLyBuZXcgRUVQUk9NIGZvcm1hdC4KIAl1OAkJCQkJVHhQd3JIdDIwRGlmZlsyXVsxNF07CQkJCS8vIEhUIDIwPC0+NDAgUHdyIGRpZmYKIAl1OAkJCQkJVHhQd3JMZWdhY3lIdERpZmZbMl1bMTRdOwkJLy8gRm9yIEhUPC0+bGVnYWN5IHB3ciBkaWZmCiAJdTgJCQkJCVR4UHdyYmFuZEVkZ2VIdDQwWzJdWzJdOwkJLy8gQmFuZCBlZGdlIGZvciBIWSA0ME1IWmxvdy91cCBjaGFubmVsCkBAIC0xMzEwLDcgKzEyMzUsNiBAQAogCXU4IAkJCQlNaWRIaWdoUHdyVEhSX0wxOwogCXU4IAkJCQlNaWRIaWdoUHdyVEhSX0wyOwogCXU4CQkJCVR4UHdyU2FmZXR5RmxhZzsJCQkJLy8gZm9yIFR4IHBvd2VyIHNhZmV0eSBzcGVjCi0vL1JUTDgxOTJTVQogCiAvKlBIWSByZWxhdGVkKi8KIAlCQl9SRUdJU1RFUl9ERUZJTklUSU9OX1QJUEhZUmVnRGVmWzRdOwkvL1JhZGlvIEEvQi9DL0QKQEAgLTEzMjMsOCArMTI0NywxMSBAQAogCXUzMglQd3JfVHJhY2s7CiAJdTgJVHhQb3dlckRpZmY7CiAJdTgJQW50ZW5uYVR4UHdEaWZmWzJdOwkJCQkvLyBBbnRlbm5hIGdhaW4gb2Zmc2V0LCBpbmRleCAwIGZvciBCLCAxIGZvciBDLCBhbmQgMiBmb3IgRAorCXU4CVRoZXJtYWxNZXRlclsyXTsgLy8gVGhlcm1hbE1ldGVyLCBpbmRleCAwIGZvciBSRklDMCwgYW5kIDEgZm9yIFJGSUMxCisJdTgJVGhlcm1hbFZhbHVlOwogCXU4CUNyeXN0YWxDYXA7CQkJCQkJLy8gQ3J5c3RhbENhcC4KLQl1OAlUaGVybWFsTWV0ZXJbMl07CQkJCS8vIFRoZXJtYWxNZXRlciwgaW5kZXggMCBmb3IgUkZJQzAsIGFuZCAxIGZvciBSRklDMQorCXU4CUJsdWV0b290aENvZXhpc3Q7CisJdTgJRXh0ZXJuYWxQQTsKIAogCXU4CUNja1B3RW5sOwogCS8vIFVzZSB0byBjYWxjdWxhdGUgUFdCRC4KQEAgLTEzMzcsMjQgKzEyNjQsMjIgQEAKIAl1OAlTd0NobmxTdGVwOwogCXU4CVNldEJXTW9kZUluUHJvZ3Jlc3M7CiAJSFRfQ0hBTk5FTF9XSURUSAkJQ3VycmVudENoYW5uZWxCVzsKKwlib29sIGJDaG5sUGxhbkZyb21IVzsKIAl1OCAgICAgIENoYW5uZWxQbGFuOworCXUxNglSZWdDaGFubmVsUGxhbjsKIAl1OCAgICAgIHB3ckdyb3VwQ250OwogCS8vIDgxOTAgNDBNSHogbW9kZQogCS8vCiAJdTgJbkN1cjQwTWh6UHJpbWVTQzsJLy8gQ29udHJvbCBjaGFubmVsIHN1Yi1jYXJyaWVyCi0JLy8gSm9zZXBoIHRlc3QgZm9yIHNob3J0ZW4gUkYgY29uZmlndXJhdGlvbiB0aW1lLgotCS8vIFdlIHNhdmUgUkYgcmVnMCBpbiB0aGlzIHZhcmlhYmxlIHRvIHJlZHVjZSBSRiByZWFkaW5nLgotCS8vCisKIAl1MzIJCQkJCVJmUmVnMFZhbHVlWzRdOwogCXU4IAkJCQkJTnVtVG90YWxSRlBhdGg7CiAJYm9vbCAJCQkJYnJmcGF0aF9yeGVuYWJsZVs0XTsKIAkvL1JGIHNldCByZWxhdGVkCiAJYm9vbAkJCQlTZXRSRlBvd2VyU3RhdGVJblByb2dyZXNzOwotLy8rYnkgYW15IDA4MDUwNworCiAJc3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hfZG9nX3RpbWVyOwogCi0vLytieSBhbXkgMDgwNTE1IGZvciBkeW5hbWljIG1lY2hlbmlzbQotCS8vQWRkIGJ5IGFteSBUeCBQb3dlciBDb250cm9sIGZvciBOZWFyL0ZhciBSYW5nZSAyMDA4LzA1LzE1CiAJYm9vbAliZHluYW1pY190eHBvd2VyOyAgLy9iRHluYW1pY1R4UG93ZXIKIAlib29sCWJEeW5hbWljVHhIaWdoUG93ZXI7ICAvLyBUeCBoaWdoIHBvd2VyIHN0YXRlCiAJYm9vbAliRHluYW1pY1R4TG93UG93ZXI7ICAvLyBUeCBsb3cgcG93ZXIgc3RhdGUKQEAgLTEzNjMsMTcgKzEyODgsMTggQEAKIAogCWJvb2wJYnN0b3JlX2xhc3RfZHRwZmxhZzsKIAlib29sCWJzdGFydF90eGN0cmxfYnlkdHA7ICAgLy9EZWZpbmUgdG8gZGlzY3JpbWluYXRlIG9uIEhpZ2ggcG93ZXIgU3RhdGUgb3Igb24gc2l0ZXN1dmV5IHRvIGNoYW5nZSBUeCBnYWluIGluZGV4Ci0JLy9BZGQgYnkgYW15IGZvciBSYXRlIEFkYXB0aXZlCisKIAlyYXRlX2FkYXB0aXZlIHJhdGVfYWRhcHRpdmU7Ci0JLy9BZGQgYnkgYW15IGZvciBUWCBwb3dlciB0cmFja2luZwotCS8vMjAwOC8wNS8xNSAgTWFycyBPUEVOL0NMT1NFIFRYIFBPV0VSIFRSQUNLSU5HCisJLy8gVFggcG93ZXIgdHJhY2tpbmcKICAgICAgICB0eGJiZ2Fpbl9zdHJ1Y3QgdHhiYmdhaW5fdGFibGVbVHhCQkdhaW5UYWJsZUxlbmd0aF07CiAgICAgICAgdTgJRUVQUk9NVHhQb3dlclRyYWNrRW5hYmxlOwogCXU4CQkJICAgdHhwb3dlcl9jb3VudDsvL0ZvciA2IHNlYyBkbyB0cmFja2luZyBhZ2FpbgogCWJvb2wJCQkgICBidHhwb3dlcl90cmFja2luZ0luaXQ7CiAJdTgJCQkgICBPRkRNX2luZGV4OwogCXU4CQkJICAgQ0NLX2luZGV4OwotCS8vMjAwNy8wOS8xMCBNYXJzIEFkZCBDQ0sgVFggUG93ZXIgVHJhY2tpbmcKKwl1OAkJCSAgIFJlY29yZF9DQ0tfMjBNaW5kZXg7CisJdTgJCQkgICBSZWNvcmRfQ0NLXzQwTWluZGV4OworCS8vIENDSyBUWCBQb3dlciBUcmFja2luZwogCWNja3R4YmJnYWluX3N0cnVjdAljY2tfdHhiYmdhaW5fdGFibGVbQ0NLVHhCQkdhaW5UYWJsZUxlbmd0aF07CiAJY2NrdHhiYmdhaW5fc3RydWN0CWNja190eGJiZ2Fpbl9jaDE0X3RhYmxlW0NDS1R4QkJHYWluVGFibGVMZW5ndGhdOwogCXU4IHJmYV90eHBvd2VydHJhY2tpbmdpbmRleDsKQEAgLTEzOTAsMTAgKzEzMTYsMTUgQEAKIAlib29sIGJjY2tfaW5fY2gxNDsKIAlib29sIGJ0eHBvd2VyZGF0YV9yZWFkZnJvbUVFUE9STTsKIAl1MTYgCVRTU0lfMTNkQm07CisJdTgJQ0NLUHJlc2VudEF0dGVudHVhdGlvbl8yME1kZWZhdWx0OworCXU4CUNDS1ByZXNlbnRBdHRlbnR1YXRpb25fNDBNZGVmYXVsdDsKKwljaGFyCUNDS1ByZXNlbnRBdHRlbnR1YXRpb25fZGlmZmVyZW5jZTsKKwljaGFyCUNDS1ByZXNlbnRBdHRlbnR1YXRpb247CisJYm9vbCBiRE1Jbml0aWFsR2FpbkVuYWJsZTsKIAkvL0ZvciBCYWNrdXAgSW5pdGlhbCBHYWluCiAJaW5pdF9nYWluIGluaXRnYWluX2JhY2t1cDsKIAl1OCBEZWZhdWx0SW5pdGlhbEdhaW5bNF07Ci0JLy8gRm9yIEVEQ0EgVHVyYm8gbW9kZSwgQWRkZWQgYnkgYW15IDA4MDUxNS4KKwkvLyBGb3IgRURDQSBUdXJibyBtb2RlCiAJYm9vbAkJYmlzX2FueV9ub25iZXBrdHM7CiAJYm9vbAkJYmN1cnJlbnRfdHVyYm9fRURDQTsKIAlib29sCQliaXNfY3VyX3JkbHN0YXRlOwpAQCAtMTQwNywxNyArMTMzOCwyMyBAQAogCXU4CWZyYW1lc3luYzsKIAl1MzIgCWZyYW1lc3luY0MzNDsKIAl1OCAgIAlmcmFtZXN5bmNNb25pdG9yOwotICAgICAgICAJLy9BZGRlZCBieSBhbXkgMDgwNTE2ICBmb3IgUlggcmVsYXRlZAorICAgICAgICAJLy8gUlggcmVsYXRlZAogCXUxNiAJbnJ4QU1QRFVfc2l6ZTsKIAl1OCAJbnJ4QU1QRFVfYWdncl9udW07CiAKLQkvL2J5IGFteSBmb3IgZ3BpbworCS8vIGdwaW8KIAkgYm9vbCBiSHdSYWRpb09mZjsKIAotCS8vYnkgYW15IGZvciByZXNldF9jb3VudAorCWJvb2wgaXNSRk9mZjsKKwlib29sIGJJblBvd2VyU2F2ZU1vZGU7CisKKwlib29sIFJGQ2hhbmdlSW5Qcm9ncmVzczsKKwlib29sIFJlZ1JmT2ZmOworCXU4CWJId1JmT2ZmQWN0aW9uOworCiAJdTMyIHJlc2V0X2NvdW50OwogCWJvb2wgYnBiY19wcmVzc2VkOwotCS8vYnkgYW15IGZvciBkZWJ1ZworCS8vIGRlYnVnCiAJdTMyIHR4cG93ZXJfY2hlY2tjbnQ7CiAJdTMyIHR4cG93ZXJfdHJhY2tpbmdfY2FsbGJhY2tfY250OwogCXU4IHRoZXJtYWxfcmVhZF92YWxbNDBdOwpAQCAtMTQyNiw3ICsxMzYzLDcgQEAKIAl1MzIgY2NrdHhwb3dlcl9hZGp1c3RjbnRfY2gxNDsKIAl1OCB0eF9md2luZm9fZm9yY2Vfc3ViY2Fycmllcm1vZGU7CiAJdTggdHhfZndpbmZvX2ZvcmNlX3N1YmNhcnJpZXJ2YWw7Ci0JLy9ieSBhbXkgZm9yIHNpbGVudCByZXNldAorCS8vIHNpbGVudCByZXNldAogCVJFU0VUX1RZUEUJUmVzZXRQcm9ncmVzczsKIAlib29sCQliRm9yY2VkU2lsZW50UmVzZXQ7CiAJYm9vbAkJYkRpc2FibGVOb3JtYWxSZXNldENoZWNrOwpAQCAtMTQzNSwxMSArMTM3MiwxMSBAQAogCWludAkJSXJwUGVuZGluZ0NvdW50OwogCWJvb2wJCWJSZXNldEluUHJvZ3Jlc3M7CiAJYm9vbAkJZm9yY2VfcmVzZXQ7CisJYm9vbAkJZm9yY2VfbHBzOwogCXU4CQlJbml0aWFsR2Fpbk9wZXJhdGVUeXBlOwogCiAJdTE2CQlTaWZzVGltZTsKIAotCS8vZGVmaW5lIHdvcmsgaXRlbSBieSBhbXkgMDgwNTI2CiAJc3RydWN0IGRlbGF5ZWRfd29yayB1cGRhdGVfYmVhY29uX3dxOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgd2F0Y2hfZG9nX3dxOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgdHhwb3dlcl90cmFja2luZ193cTsKQEAgLTE0NDgsOCArMTM4NSw3IEBACiAJc3RydWN0IGRlbGF5ZWRfd29yayBpbml0aWFsZ2Fpbl9vcGVyYXRlX3dxOwogCiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnByaXZfd3E7Ci0vLyNpZmRlZiBSVEw4MTkyU1UKLQkvL2x6bSBhZGQgZm9yIDgxOTJTCisKIAkgdTMyIAkJCUludHJNYXNrOwogCS8vIFJGIGFuZCBCQiBhY2Nlc3MgcmVsYXRlZCBzeW5jaHJvbml6YXRpb24gZmxhZ3MuCiAJYm9vbAkJCQliQ2hhbmdlQkJJblByb2dyZXNzOyAvLyBCYXNlQmFuZCBSVyBpcyBzdGlsbCBpbiBwcm9ncmVzcy4KQEAgLTE0NjQsNyArMTQwMCw2IEBACiAJdTgJCQkJVGhlcm1hbFJlYWRCYWNrSW5kZXg7CQkJLy9kZWJ1ZyBvbmx5CiAJdTgJCQkJVGhlcm1hbFJlYWRWYWxbNDBdOwkJCQkvL2RlYnVnIG9ubHkKIAotCS8vIEZvciBIQ1QgdGVzdCwgMjAwNS4wNy4xNSwgYnkgcmNuamtvLgogCS8vIG5vdCByZWFsaXplIHRydWUsIGp1c3QgZGVmaW5lIGl0LCBzZXQgaXQgMCBkZWZhdWx0LCBiZWNhdXNlIHNvbWUgZnVuYyB1c2UgaXQKIAlib29sCQkJCWJJbkhjdFRlc3Q7CiAKQEAgLTE0ODEsNyArMTQxNiw2IEBACiAJY2hhcgkJCQkJUkZfQ19UeFB3RGlmZjsJCQkJCS8vIEFudGVubmEgZ2FpbiBvZmZzZXQsIHJmLWMgdG8gcmYtYQogCiAJYm9vbAliUkZTaU9yUGk7Ly8wPXNpLCAxPXBpLgotCS8vbHptIGFkZCBmb3IgODE5MlMKIAogCWJvb2wgU2V0RndDbWRJblByb2dyZXNzOyAvL2lzIHNldCBGVyBDTUQgaW4gUHJvZ3Jlc3M/IDkyUyBvbmx5CiAJdTggQ3VycmVudEZ3Q21kSU87CkBAIC0xNDk1LDI1ICsxNDI5LDE3IEBACiAJTEVEXzgxOXhVc2IJCQlTd0xlZDA7CiAJTEVEXzgxOXhVc2IJCQlTd0xlZDE7CiAgICAgICAgIHU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYlJlZ1VzZUxlZDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCUJsaW5rV29ya0l0ZW07IAorCXN0cnVjdCB3b3JrX3N0cnVjdAkJQmxpbmtXb3JrSXRlbTsKIAkvKiBhZGRlZCBmb3IgbGVkIGNvbnRyb2wgKi8KIAl1MTYJCQkJRndDbWRJT01hcDsKIAl1MzIJCQkJRndDbWRJT1BhcmFtOwotCXU4CQkJCURNRmxhZzsgCisJdTgJCQkJRE1GbGFnOwogCiAKIAogCiB9cjgxOTJfcHJpdjsKIAotLy8gZm9yIHJ0bDgxODcKLS8vIG5vdyBtaXJnaW5nIHRvIHJ0bDgxODdCCi0vKgotdHlwZWRlZiBlbnVtewotCUxPV19QUklPUklUWSA9IDB4MDIsCi0JTk9STV9QUklPUklUWQotCX0gcHJpb3JpdHlfdDsKLSovCiAvL2ZvciBydGw4MTg3QgogdHlwZWRlZiBlbnVtewogCUJVTEtfUFJJT1JJVFkgPSAweDAxLApAQCAtMTU0Miw2ICsxNDY4LDkgQEAKIH07CiAjZW5kaWYKIAordm9pZCBMZWRDb250cm9sODE5MlNVc2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgTEVEX0NUTF9NT0RFIExlZEFjdGlvbik7Cit2b2lkIEluaXRTd0xlZHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIERlSW5pdFN3TGVkcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHNob3J0IHJ0bDgxOTJTVV90eF9jbWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBzaG9ydCBydGw4MTkyU1VfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYqIHNrYik7CiBib29sIEZpcm13YXJlRG93bmxvYWQ5MlMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0xNTY3LDcgKzE0OTYsNiBAQAogdm9pZCBydGw4MTkyX3R4X2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIAogdm9pZCBydGw4MTkyX2Rpc2Fzc29jaWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLS8vdm9pZCBmaXhfcnhfZmlmbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgcnRsODE4NV9zZXRfcmZfcGluc19lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldix1MzIgYSk7CiAKIHZvaWQgcnRsODE5Ml9zZXRfYW5hcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldix1MzIgYSk7CkBAIC0xNTgyLDcgKzE1MTAsNiBAQAogdm9pZCB3cml0ZV9waHlfb2ZkbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBhZHIsIHUzMiBkYXRhKTsKIHZvaWQgcnRsODE4NV90eF9hbnRlbm5hKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGFudCk7CiB2b2lkIHJ0bDgxOTJfc2V0X3J4Y29uZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLS8vc2hvcnQgY2hlY2tfbmljX2Vub3VnaF9kZXNjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHByaW9yaXR5X3QgcHJpb3JpdHkpOwogZXh0ZXJuIHZvaWQgcnRsODE5eHVzYl9iZWFjb25fdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldix1MTYgIHR4X3JhdGUpOwogdm9pZCBDYW1SZXNldEFsbEVudHJ5KHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwogdm9pZCBFbmFibGVIV1NlY3VyaXR5Q29uZmlnODE5MihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJVX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJVX2NvcmUuYwppbmRleCAxYjY4OTA2Li42OTcwYzk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyVV9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlVfY29yZS5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9lZXByb21fOTNjeDYuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogCiAjdW5kZWYgTE9PUF9URVNUCiAjdW5kZWYgRFVNUF9SWApAQCAtMTYyLDYgKzE2Myw4IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBydGw4MTkyX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOwogc3RhdGljIHZvaWQgX19kZXZleGl0IHJ0bDgxOTJfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGw4MTkyX25ldGRldl9vcHM7CitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHByb2NfbmV0ZGV2X25vdGlmaWVyOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcnRsODE5Ml91c2JfZHJpdmVyID0gewogCS5uYW1lCQk9IFJUTDgxOXhVX01PRFVMRV9OQU1FLAkgICAgICAgICAgLyogRHJpdmVyIG5hbWUgICAqLwpAQCAtMjUyLDUzICsyNTUsNDkgQEAKIHsKIAlpbnQgaSwgbWF4X2NoYW49LTEsIG1pbl9jaGFuPS0xOwogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlKiBpZWVlID0gcHJpdi0+aWVlZTgwMjExOwotCXN3aXRjaCAoY2hhbm5lbF9wbGFuKQotCXsKLQkJY2FzZSBDT1VOVFJZX0NPREVfRkNDOgotCQljYXNlIENPVU5UUllfQ09ERV9JQzoKLQkJY2FzZSBDT1VOVFJZX0NPREVfRVRTSToKLQkJY2FzZSBDT1VOVFJZX0NPREVfU1BBSU46Ci0JCWNhc2UgQ09VTlRSWV9DT0RFX0ZSQU5DRToKLQkJY2FzZSBDT1VOVFJZX0NPREVfTUtLOgotCQljYXNlIENPVU5UUllfQ09ERV9NS0sxOgotCQljYXNlIENPVU5UUllfQ09ERV9JU1JBRUw6Ci0JCWNhc2UgQ09VTlRSWV9DT0RFX1RFTEVDOgotCQljYXNlIENPVU5UUllfQ09ERV9NSUM6Ci0JCXsKLQkJCURvdDExZF9Jbml0KGllZWUpOwotCQkJaWVlZS0+Ykdsb2JhbERvbWFpbiA9IGZhbHNlOwotCQkJLy9hY3R1cmFsbHkgODIyNSAmIDgyNTYgcmYgY2hpcCBvbmx5IHN1cHBvcnQgQixHLDI0TiBtb2RlCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHByaXYtPnJmX2NoaXAgPT0gUkZfODIyNSkgfHwgKHByaXYtPnJmX2NoaXAgPT0gUkZfODI1NikgfHwgKHByaXYtPnJmX2NoaXAgPT0gUkZfNjA1MikpCi0JCQl7Ci0JCQkJbWluX2NoYW4gPSAxOwotCQkJCW1heF9jaGFuID0gMTQ7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJUlRfVFJBQ0UoQ09NUF9FUlIsICJ1bmtub3duIHJmIGNoaXAsIGNhbid0IHNldCBjaGFubmVsIG1hcCBpbiBmdW5jdGlvbjolcygpXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJfQotCQkJaWYgKENoYW5uZWxQbGFuW2NoYW5uZWxfcGxhbl0uTGVuICE9IDApewotCQkJCS8vIENsZWFyIG9sZCBjaGFubmVsIG1hcAotCQkJCW1lbXNldChHRVRfRE9UMTFEX0lORk8oaWVlZSktPmNoYW5uZWxfbWFwLCAwLCBzaXplb2YoR0VUX0RPVDExRF9JTkZPKGllZWUpLT5jaGFubmVsX21hcCkpOwotCQkJCS8vIFNldCBuZXcgY2hhbm5lbCBtYXAKLQkJCQlmb3IgKGk9MDtpPENoYW5uZWxQbGFuW2NoYW5uZWxfcGxhbl0uTGVuO2krKykKLQkJCQl7Ci0JCQkJCWlmIChDaGFubmVsUGxhbltjaGFubmVsX3BsYW5dLkNoYW5uZWxbaV0gPCBtaW5fY2hhbiB8fCBDaGFubmVsUGxhbltjaGFubmVsX3BsYW5dLkNoYW5uZWxbaV0gPiBtYXhfY2hhbikKLQkJCQkJYnJlYWs7Ci0JCQkJCUdFVF9ET1QxMURfSU5GTyhpZWVlKS0+Y2hhbm5lbF9tYXBbQ2hhbm5lbFBsYW5bY2hhbm5lbF9wbGFuXS5DaGFubmVsW2ldXSA9IDE7Ci0JCQkJfQotCQkJfQotCQkJYnJlYWs7CisKKwlpZWVlLT5iR2xvYmFsRG9tYWluID0gZmFsc2U7CisJc3dpdGNoIChwcml2LT5yZl9jaGlwKSB7CisJY2FzZSBSRl84MjI1OgorCWNhc2UgUkZfODI1NjoKKwljYXNlIFJGXzYwNTI6CisJCW1pbl9jaGFuID0gMTsKKwkJbWF4X2NoYW4gPSAxNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfZXJyKCIlcygpOiB1bmtub3duIHJmIGNoaXAsIGNhbid0IHNldCBjaGFubmVsIG1hcFxuIiwKKwkJCQkJCQkJX19mdW5jX18pOworCQlicmVhazsKKwl9CisJaWYgKENoYW5uZWxQbGFuW2NoYW5uZWxfcGxhbl0uTGVuICE9IDApIHsKKwkJbWVtc2V0KEdFVF9ET1QxMURfSU5GTyhpZWVlKS0+Y2hhbm5lbF9tYXAsIDAsCisJCQkJc2l6ZW9mKEdFVF9ET1QxMURfSU5GTyhpZWVlKS0+Y2hhbm5lbF9tYXApKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgQ2hhbm5lbFBsYW5bY2hhbm5lbF9wbGFuXS5MZW47IGkrKykgeworCQkJaWYgKENoYW5uZWxQbGFuW2NoYW5uZWxfcGxhbl0uQ2hhbm5lbFtpXSA8IG1pbl9jaGFuIHx8IENoYW5uZWxQbGFuW2NoYW5uZWxfcGxhbl0uQ2hhbm5lbFtpXSA+IG1heF9jaGFuKQorCQkJCWJyZWFrOworCQkJR0VUX0RPVDExRF9JTkZPKGllZWUpLT5jaGFubmVsX21hcFtDaGFubmVsUGxhbltjaGFubmVsX3BsYW5dLkNoYW5uZWxbaV1dID0gMTsKIAkJfQotCQljYXNlIENPVU5UUllfQ09ERV9HTE9CQUxfRE9NQUlOOgotCQl7Ci0JCQlHRVRfRE9UMTFEX0lORk8oaWVlZSktPmJFbmFibGVkID0gMDsvL3RoaXMgZmxhZyBlbmFibGVkIHRvIGZvbGxvdyAxMWQgY291bnRyeSBJRSBzZXR0aW5nLCBvdGhlcndpc2UsIGl0IHNoYWxsIGZvbGxvdyBnbG9iYWwgZG9tYWluIHNldHRpbmdzLgotCQkJRG90MTFkX1Jlc2V0KGllZWUpOwotCQkJaWVlZS0+Ykdsb2JhbERvbWFpbiA9IHRydWU7Ci0JCQlicmVhazsKLQkJfQotCQlkZWZhdWx0OgotCQkJYnJlYWs7CisJfQorCXN3aXRjaCAoY2hhbm5lbF9wbGFuKSB7CisJY2FzZSBDT1VOVFJZX0NPREVfR0xPQkFMX0RPTUFJTjoKKwkJaWVlZS0+Ykdsb2JhbERvbWFpbiA9IHRydWU7CisJCWZvciAoaSA9IDEyOyBpIDw9IDE0OyBpKyspCisJCQlHRVRfRE9UMTFEX0lORk8oaWVlZSktPmNoYW5uZWxfbWFwW2ldID0gMjsKKwkJaWVlZS0+SWJzc1N0YXJ0Q2hubCA9IDEwOworCQlpZWVlLT5pYnNzX21heGpvaW5fY2hhbCA9IDExOworCQlicmVhazsKKwljYXNlIENPVU5UUllfQ09ERV9XT1JMRF9XSURFXzEzOgorCQlwcmludGsoS0VSTl9JTkZPICJ3b3JsZCB3aWRlIDEzXG4iKTsKKwkJZm9yIChpID0gMTI7IGkgPD0gMTM7IGkrKykKKwkJCUdFVF9ET1QxMURfSU5GTyhpZWVlKS0+Y2hhbm5lbF9tYXBbaV0gPSAyOworCQlpZWVlLT5JYnNzU3RhcnRDaG5sID0gMTA7CisJCWllZWUtPmlic3NfbWF4am9pbl9jaGFsID0gMTE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWllZWUtPklic3NTdGFydENobmwgPSAxOworCQlpZWVlLT5pYnNzX21heGpvaW5fY2hhbCA9IDE0OworCQlicmVhazsKIAl9CiAJcmV0dXJuOwogfQpAQCAtOTkxLDE1ICs5OTAsMjQgQEAKIAlyZXR1cm4gbGVuOwogfQogCi12b2lkIHJ0bDgxOTJfcHJvY19tb2R1bGVfaW5pdCh2b2lkKQoraW50IHJ0bDgxOTJfcHJvY19tb2R1bGVfaW5pdCh2b2lkKQogeworCWludCByZXQ7CisKIAlSVF9UUkFDRShDT01QX0lOSVQsICJJbml0aWFsaXppbmcgcHJvYyBmaWxlc3lzdGVtIik7CiAJcnRsODE5Ml9wcm9jPWNyZWF0ZV9wcm9jX2VudHJ5KFJUTDgxOXhVX01PRFVMRV9OQU1FLCBTX0lGRElSLCBpbml0X25ldC5wcm9jX25ldCk7CisJaWYgKCFydGw4MTkyX3Byb2MpCisJCXJldHVybiAtRU5PTUVNOworCXJldCA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmcHJvY19uZXRkZXZfbm90aWZpZXIpOworCWlmIChyZXQpCisJCXJlbW92ZV9wcm9jX2VudHJ5KFJUTDgxOXhVX01PRFVMRV9OQU1FLCBpbml0X25ldC5wcm9jX25ldCk7CisJcmV0dXJuIHJldDsKIH0KIAogCiB2b2lkIHJ0bDgxOTJfcHJvY19tb2R1bGVfcmVtb3ZlKHZvaWQpCiB7CisJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJnByb2NfbmV0ZGV2X25vdGlmaWVyKTsKIAlyZW1vdmVfcHJvY19lbnRyeShSVEw4MTl4VV9NT0RVTEVfTkFNRSwgaW5pdF9uZXQucHJvY19uZXQpOwogfQogCkBAIC0xMDI3LDggKzEwMzUsNyBAQAogCQlyZW1vdmVfcHJvY19lbnRyeSgicmVnaXN0ZXJzLWUiLCBwcml2LT5kaXJfZGV2KTsKIAkvLwlyZW1vdmVfcHJvY19lbnRyeSgiY2NrLXJlZ2lzdGVycyIscHJpdi0+ZGlyX2Rldik7CiAJLy8JcmVtb3ZlX3Byb2NfZW50cnkoIm9mZG0tcmVnaXN0ZXJzIixwcml2LT5kaXJfZGV2KTsKLQkJLy9yZW1vdmVfcHJvY19lbnRyeShkZXYtPm5hbWUsIHJ0bDgxOTJfcHJvYyk7Ci0JCXJlbW92ZV9wcm9jX2VudHJ5KCJ3bGFuMCIsIHJ0bDgxOTJfcHJvYyk7CisJCXJlbW92ZV9wcm9jX2VudHJ5KHByaXYtPmRpcl9kZXYtPm5hbWUsIHJ0bDgxOTJfcHJvYyk7CiAJCXByaXYtPmRpcl9kZXYgPSBOVUxMOwogCX0KIH0KQEAgLTExNDUsNiArMTE1MiwyNSBAQAogCQkgICAgICBkZXYtPm5hbWUpOwogCX0KIH0KKworc3RhdGljIGludCBwcm9jX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IHB0cjsKKworCWlmIChuZXRfZGV2LT5uZXRkZXZfb3BzID09ICZydGw4MTkyX25ldGRldl9vcHMgJiYKKwkgICAgZXZlbnQgPT0gTkVUREVWX0NIQU5HRU5BTUUpIHsKKwkJcnRsODE5Ml9wcm9jX3JlbW92ZV9vbmUobmV0X2Rldik7CisJCXJ0bDgxOTJfcHJvY19pbml0X29uZShuZXRfZGV2KTsKKwl9CisKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcHJvY19uZXRkZXZfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBwcm9jX25ldGRldl9ldmVudCwKK307CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLU1JU0MgU1RVRkYtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTczNTUsNiArNzM4MSw4IEBACiAgICAgICAgIFJUX1RSQUNFKENPTVBfSU5JVCwgIk9vcHM6IGknbSBjb21pbmdcbiIpOwogCiAJZGV2ID0gYWxsb2NfaWVlZTgwMjExKHNpemVvZihzdHJ1Y3QgcjgxOTJfcHJpdikpOworCWlmIChkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGRldik7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmaW50Zi0+ZGV2KTsKQEAgLTczOTIsNyArNzQyMCw4IEBACiAJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKLQlyZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwlpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikpCisJCWdvdG8gZmFpbDsKIAlSVF9UUkFDRShDT01QX0lOSVQsICJkZXYgbmFtZT09PT09PT0+ICVzXG4iLGRldi0+bmFtZSk7CiAJcnRsODE5Ml9wcm9jX2luaXRfb25lKGRldik7CiAKQEAgLTc0NzQsMzUgKzc1MDMsNjMgQEAKIAlyZXQgPSBpZWVlODAyMTFfY3J5cHRvX2luaXQoKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaWVlZTgwMjExX2NyeXB0b19pbml0KCkgZmFpbGVkICVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OworCQlnb3RvIGZhaWxfY3J5cHRvOwogCX0KIAogCXJldCA9IGllZWU4MDIxMV9jcnlwdG9fdGtpcF9pbml0KCk7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgImllZWU4MDIxMV9jcnlwdG9fdGtpcF9pbml0KCkgZmFpbGVkICVkXG4iLAogCQkJcmV0KTsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBmYWlsX2NyeXB0b190a2lwOwogCX0KIAogCXJldCA9IGllZWU4MDIxMV9jcnlwdG9fY2NtcF9pbml0KCk7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgImllZWU4MDIxMV9jcnlwdG9fY2NtcF9pbml0KCkgZmFpbGVkICVkXG4iLAogCQkJcmV0KTsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBmYWlsX2NyeXB0b19jY21wOwogCX0KIAogCXJldCA9IGllZWU4MDIxMV9jcnlwdG9fd2VwX2luaXQoKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaWVlZTgwMjExX2NyeXB0b193ZXBfaW5pdCgpIGZhaWxlZCAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBmYWlsX2NyeXB0b193ZXA7CiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiXG5MaW51eCBrZXJuZWwgZHJpdmVyIGZvciBSVEw4MTkyIGJhc2VkIFdMQU4gY2FyZHNcbiIpOwogCXByaW50ayhLRVJOX0lORk8gIkNvcHlyaWdodCAoYykgMjAwNy0yMDA4LCBSZWFsc2lsIFdsYW5cbiIpOwogCVJUX1RSQUNFKENPTVBfSU5JVCwgIkluaXRpYWxpemluZyBtb2R1bGUiKTsKIAlSVF9UUkFDRShDT01QX0lOSVQsICJXaXJlbGVzcyBleHRlbnNpb25zIHZlcnNpb24gJWQiLCBXSVJFTEVTU19FWFQpOwotCXJ0bDgxOTJfcHJvY19tb2R1bGVfaW5pdCgpOwotCXJldHVybiB1c2JfcmVnaXN0ZXIoJnJ0bDgxOTJfdXNiX2RyaXZlcik7CisKKwlyZXQgPSBydGw4MTkyX3Byb2NfbW9kdWxlX2luaXQoKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigicnRsODE5Ml9wcm9jX21vZHVsZV9pbml0KCkgZmFpbGVkICVkXG4iLCByZXQpOworCQlnb3RvIGZhaWxfcHJvYzsKKwl9CisKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnJ0bDgxOTJfdXNiX2RyaXZlcik7CisJaWYgKHJldCkgeworCQlwcl9lcnIoInVzYl9yZWdpc3RlcigpIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJZ290byBmYWlsX3VzYjsKKwl9CisKKwlyZXR1cm4gMDsKKworZmFpbF91c2I6CisJcnRsODE5Ml9wcm9jX21vZHVsZV9yZW1vdmUoKTsKK2ZhaWxfcHJvYzoKKwlpZWVlODAyMTFfY3J5cHRvX3dlcF9leGl0KCk7CitmYWlsX2NyeXB0b193ZXA6CisJaWVlZTgwMjExX2NyeXB0b19jY21wX2V4aXQoKTsKK2ZhaWxfY3J5cHRvX2NjbXA6CisJaWVlZTgwMjExX2NyeXB0b190a2lwX2V4aXQoKTsKK2ZhaWxfY3J5cHRvX3RraXA6CisJaWVlZTgwMjExX2NyeXB0b19kZWluaXQoKTsKK2ZhaWxfY3J5cHRvOgorI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKKwlpZWVlODAyMTFfZGVidWdfZXhpdCgpOworI2VuZGlmCisJcmV0dXJuIHJldDsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyVV9kbS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlVfZG0uYwppbmRleCBmYTVlMjQ0Li5jZTdlMWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyVV9kbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJVX2RtLmMKQEAgLTI2NzMsNyArMjY3Myw2IEBACiB7CiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCVBSVF9ISUdIX1RIUk9VR0hQVVQJcEhUSW5mbyA9IHByaXYtPmllZWU4MDIxMS0+cEhUSW5mbzsKLQkvL1BTVEFfUU9TCQkJcFN0YVFvcyA9IHBNZ250SW5mby0+cFN0YVFvczsKIAogCS8vIEtlZXAgcGFzdCBUeC9SeCBwYWNrZXQgY291bnQgZm9yIFJULXRvLVJUIEVEQ0EgdHVyYm8uCiAJc3RhdGljIHVuc2lnbmVkIGxvbmcJCQlsYXN0VHhPa0NudCA9IDA7CkBAIC0yNjgxLDEwICsyNjgwLDggQEAKIAl1bnNpZ25lZCBsb25nCQkJCWN1clR4T2tDbnQgPSAwOwogCXVuc2lnbmVkIGxvbmcJCQkJY3VyUnhPa0NudCA9IDA7CiAKLQkvLwotCS8vIERvIG5vdCBiZSBUdXJibyBpZiBpdCdzIHVuZGVyIFdpRmkgY29uZmlnIGFuZCBRb3MgRW5hYmxlZCwgYmVjYXVzZSB0aGUgRURDQSBwYXJhbWV0ZXJzCi0JLy8gc2hvdWxkIGZvbGxvdyB0aGUgc2V0dGluZ3MgZnJvbSBRQVAuIEJ5IEJydWNlLCAyMDA3LTEyLTA3LgotCS8vCisJdTMyCQkJCUVEQ0FfQkVfVUwgPSBlZGNhX3NldHRpbmdfVUxbcEhUSW5mby0+SU9UUGVlcl07CisJdTMyCQkJCUVEQ0FfQkVfREwgPSBlZGNhX3NldHRpbmdfRExbcEhUSW5mby0+SU9UUGVlcl07CiAJI2lmIDEKIAlpZihwcml2LT5pZWVlODAyMTEtPnN0YXRlICE9IElFRUU4MDIxMV9MSU5LRUQpCiAJCWdvdG8gZG1fQ2hlY2tFZGNhVHVyYm9fRVhJVDsKQEAgLTI2OTMsNiArMjY5MCwxNCBAQAogCWlmKHByaXYtPmllZWU4MDIxMS0+cEhUSW5mby0+SU9UQWN0aW9uICYgSFRfSU9UX0FDVF9ESVNBQkxFX0VEQ0FfVFVSQk8pCiAJCWdvdG8gZG1fQ2hlY2tFZGNhVHVyYm9fRVhJVDsKIAorCWlmKHByaXYtPmllZWU4MDIxMS0+cEhUSW5mby0+SU9UQWN0aW9uICYgSFRfSU9UX0FDVF9GT1JDRURfRU5BQkxFX0JFX1RYT1ApCisJeworCQlpZighKEVEQ0FfQkVfVUwgJiAweGZmZmYwMDAwKSkKKwkJCUVEQ0FfQkVfVUwgfD0gMHgwMDVlMDAwMDsKKwkJaWYoIShFRENBX0JFX0RMICYgMHhmZmZmMDAwMCkpCisJCQlFRENBX0JFX0RMIHw9IDB4MDA1ZTAwMDA7CisJfQorCiAJewogCQl1OCogcGVlcm5hbWVbMTFdID0geyJ1bmtub3duIiwgInJlYWx0ZWsiLCAicmVhbHRla185MnNlIiwgImJyb2FkY29tIiwgInJhbGluayIsICJhdGhlcm9zIiwgImNpc2NvIiwgIm1hcnZlbGwiLCAiOTJ1X3NvZnRhcCIsICJzZWxmX3NvZnRhcCJ9OwogCQlzdGF0aWMgaW50IHdiX3RtcCA9IDA7CkBAIC0yNzE0LDcgKzI3MTksNyBAQAogCQkJewogCQkJCWlmKHByaXYtPmJpc19jdXJfcmRsc3RhdGUgfHwgIXByaXYtPmJjdXJyZW50X3R1cmJvX0VEQ0EpCiAJCQkJewotCQkJCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBFRENBUEFSQV9CRSwgZWRjYV9zZXR0aW5nX1VMW3BIVEluZm8tPklPVFBlZXJdKTsKKwkJCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgRURDQVBBUkFfQkUsIEVEQ0FfQkVfVUwpOwogCQkJCQlwcml2LT5iaXNfY3VyX3JkbHN0YXRlID0gZmFsc2U7CiAJCQkJfQogCQkJfQpAQCAtMjcyMiw3ICsyNzI3LDcgQEAKIAkJCXsKIAkJCQlpZighcHJpdi0+YmlzX2N1cl9yZGxzdGF0ZSB8fCAhcHJpdi0+YmN1cnJlbnRfdHVyYm9fRURDQSkKIAkJCQl7Ci0JCQkJCXdyaXRlX25pY19kd29yZChkZXYsIEVEQ0FQQVJBX0JFLCBlZGNhX3NldHRpbmdfRExbcEhUSW5mby0+SU9UUGVlcl0pOworCQkJCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBFRENBUEFSQV9CRSwgRURDQV9CRV9ETCk7CiAJCQkJCXByaXYtPmJpc19jdXJfcmRsc3RhdGUgPSB0cnVlOwogCQkJCX0KIAkJCX0KQEAgLTI3MzQsNyArMjczOSw3IEBACiAJCQl7CiAJCQkJaWYoIXByaXYtPmJpc19jdXJfcmRsc3RhdGUgfHwgIXByaXYtPmJjdXJyZW50X3R1cmJvX0VEQ0EpCiAJCQkJewotCQkJCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBFRENBUEFSQV9CRSwgZWRjYV9zZXR0aW5nX0RMW3BIVEluZm8tPklPVFBlZXJdKTsKKwkJCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgRURDQVBBUkFfQkUsIEVEQ0FfQkVfREwpOwogCQkJCQlwcml2LT5iaXNfY3VyX3JkbHN0YXRlID0gdHJ1ZTsKIAkJCQl9CiAJCQl9CkBAIC0yNzQyLDcgKzI3NDcsNyBAQAogCQkJewogCQkJCWlmKHByaXYtPmJpc19jdXJfcmRsc3RhdGUgfHwgIXByaXYtPmJjdXJyZW50X3R1cmJvX0VEQ0EpCiAJCQkJewotCQkJCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBFRENBUEFSQV9CRSwgZWRjYV9zZXR0aW5nX1VMW3BIVEluZm8tPklPVFBlZXJdKTsKKwkJCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgRURDQVBBUkFfQkUsIEVEQ0FfQkVfVUwpOwogCQkJCQlwcml2LT5iaXNfY3VyX3JkbHN0YXRlID0gZmFsc2U7CiAJCQkJfQogCQkJfQpAQCAtMjc3MSw3ICsyNzc2LDcgQEAKIAkJCQkJKCgodTMyKShxb3NfcGFyYW1ldGVycy0+Y3dfbWF4WzBdKSk8PCBBQ19QQVJBTV9FQ1dfTUFYX09GRlNFVCl8CiAJCQkJCSgoKHUzMikocW9zX3BhcmFtZXRlcnMtPmN3X21pblswXSkpPDwgQUNfUEFSQU1fRUNXX01JTl9PRkZTRVQpfAogCQkJCQkoKHUzMil1MWJBSUZTIDw8IEFDX1BBUkFNX0FJRlNfT0ZGU0VUKSk7Ci0JCQkvL3dyaXRlX25pY19kd29yZChkZXYsIFdEQ0FQQVJBX0FERFtpXSwgdTRiQWNQYXJhbSk7CisKIAkJCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBFRENBUEFSQV9CRSwgIHU0YkFjUGFyYW0pOwogCiAJCQkvLyBDaGVjayBBQ00gYml0LgpAQCAtMjc4MCw3ICsyNzg1LDcgQEAKIAkJCS8vIFRPRE86ICBNb2RpZmllZCB0aGlzIHBhcnQgYW5kIHRyeSB0byBzZXQgYWNtIGNvbnRyb2wgaW4gb25seSAxIElPIHByb2Nlc3NpbmchIQogCiAJCQkJCVBBQ0lfQUlGU04JcEFjaUFpZnNuID0gKFBBQ0lfQUlGU04pJihxb3NfcGFyYW1ldGVycy0+YWlmc1swXSk7Ci0JCQkJCXU4CQlBY21DdHJsID0gcmVhZF9uaWNfYnl0ZSggZGV2LCBBY21Id0N0cmwgKTsKKwkJCQkJdTgJCUFjbUN0cmwgPSBwcml2LT5BY21Db250cm9sIHwgMHgxOwogCQkJCQlpZiggcEFjaUFpZnNuLT5mLkFDTSApCiAJCQkJCXsgLy8gQUNNIGJpdCBpcyAxLgogCQkJCQkJQWNtQ3RybCB8PSBBY21Id19CZXFFbjsKQEAgLTI4MDQsNyArMjgwOSw3IEBACiAJcHJpdi0+aWVlZTgwMjExLT5iaXNfYW55X25vbmJlcGt0cyA9IGZhbHNlOwogCWxhc3RUeE9rQ250ID0gcHJpdi0+c3RhdHMudHhieXRlc3VuaWNhc3Q7CiAJbGFzdFJ4T2tDbnQgPSBwcml2LT5zdGF0cy5yeGJ5dGVzdW5pY2FzdDsKLX0JLy8gZG1fQ2hlY2tFZGNhVHVyYm8KK30KICNlbmRpZgogCiBleHRlcm4gdm9pZCBETV9DVFNUb1NlbGZTZXR0aW5nKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LHUzMiBETV9UeXBlLCB1MzIgRE1fVmFsdWUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyVV93eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlVfd3guYwppbmRleCBhN2NjNmY5Li4yMDA1YjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyVV93eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJVX3d4LmMKQEAgLTEsMjEgKzEsMjMgQEAKLS8qCi0gICBUaGlzIGZpbGUgY29udGFpbnMgd2lyZWxlc3MgZXh0ZW5zaW9uIGhhbmRsZXJzLgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIFJlYWx0ZWsgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBMaW51eCBkZXZpY2UgZHJpdmVyIGZvciBSVEw4MTkyVQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSAgIFRoaXMgaXMgcGFydCBvZiBydGw4MTgwIE9wZW5Tb3VyY2UgZHJpdmVyLgotICAgQ29weXJpZ2h0IChDKSBBbmRyZWEgTWVyZWxsbyAyMDA0LTIwMDUgIDxhbmRyZWFtcmxAdGlzY2FsaS5pdD4KLSAgIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiBHUEwgKEdlbmVyYWwgUHVibGljIExpY2VuY2UpCi0KLSAgIFBhcnRzIG9mIHRoaXMgZHJpdmVyIGFyZSBiYXNlZCBvbiB0aGUgR1BMIHBhcnQKLSAgIG9mIHRoZSBvZmZpY2lhbCByZWFsdGVrIGRyaXZlci4KLQotICAgUGFydHMgb2YgdGhpcyBkcml2ZXIgYXJlIGJhc2VkIG9uIHRoZSBydGw4MTgwIGRyaXZlciBza2VsZXRvbgotICAgZnJvbSBQYXRyaWMgU2NoZW5rZSAmIEFuZHJlcyBTYWxvbW9uLgotCi0gICBQYXJ0cyBvZiB0aGlzIGRyaXZlciBhcmUgYmFzZWQgb24gdGhlIEludGVsIFBybyBXaXJlbGVzcyAyMTAwIEdQTCBkcml2ZXIuCi0KLSAgIFdlIHdhbnQgdG8gdGFua3MgdGhlIEF1dGhvcnMgb2YgdGhvc2UgcHJvamVjdHMgYW5kIHRoZSBOZGlzd3JhcHBlcgotICAgcHJvamVjdCBBdXRob3JzLgotKi8KIAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgInI4MTkyVS5oIgpAQCAtMjQ4LDYgKzI1MCw3IEBACiAgICAgICAgIHN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlODAyMTE7CiAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqdGFyZ2V0OworCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbGF0ZXN0ID0gTlVMTDsKIAlpbnQgbmFtZV9sZW47CiAKICAgICAgICAgZG93bigmcHJpdi0+d3hfc2VtKTsKQEAgLTI1OSwxMyArMjYyLDIwIEBACiAgICAgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkodGFyZ2V0LCAmaWVlZS0+bmV0d29ya19saXN0LCBsaXN0KSB7CiAgICAgICAgICAgICAgICAgaWYgKCAodGFyZ2V0LT5zc2lkX2xlbiA9PSBuYW1lX2xlbikgJiYKIAkJICAgICAoc3RybmNtcCh0YXJnZXQtPnNzaWQsIChjaGFyKil3cnF1LT5kYXRhLnBvaW50ZXIsIG5hbWVfbGVuKT09MCkpewotCQkJaWYodGFyZ2V0LT53cGFfaWVfbGVuPjAgfHwgdGFyZ2V0LT5yc25faWVfbGVuPjAgKQotCQkJCS8vc2V0IGZsYWdzPTEgdG8gaW5kaWNhdGUgdGhpcyBhcCBpcyBXUEEKLQkJCQl3cnF1LT5kYXRhLmZsYWdzID0gMTsKLQkJCWVsc2Ugd3JxdS0+ZGF0YS5mbGFncyA9IDA7CisJCQlpZiAoKGxhdGVzdCA9PSBOVUxMKSB8fCh0YXJnZXQtPmxhc3Rfc2Nhbm5lZCA+IGxhdGVzdC0+bGFzdF9zY2FubmVkKSkKKwkJCQlsYXRlc3QgPSB0YXJnZXQ7CiAKKwkJfQorICAgICAgICB9CiAKLQkJYnJlYWs7CisgICAgICAgIGlmKGxhdGVzdCAhPSBOVUxMKQorICAgICAgICB7CisJCXdycXUtPmRhdGEubGVuZ3RoID0gbGF0ZXN0LT5TaWduYWxTdHJlbmd0aDsKKworCQlpZihsYXRlc3QtPndwYV9pZV9sZW4+MCB8fCBsYXRlc3QtPnJzbl9pZV9sZW4+MCApIHsKKwkJCXdycXUtPmRhdGEuZmxhZ3MgPSAxOworCQl9IGVsc2UgeworCQkJd3JxdS0+ZGF0YS5mbGFncyA9IDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTQ2MCwxNCArNDcwLDYgQEAKIAlyYW5nZS0+d2VfdmVyc2lvbl9jb21waWxlZCA9IFdJUkVMRVNTX0VYVDsKIAlyYW5nZS0+d2VfdmVyc2lvbl9zb3VyY2UgPSAxNjsKIAotLy8JcmFuZ2UtPnJldHJ5X2NhcGE7CS8qIFdoYXQgcmV0cnkgb3B0aW9ucyBhcmUgc3VwcG9ydGVkICovCi0vLwlyYW5nZS0+cmV0cnlfZmxhZ3M7CS8qIEhvdyB0byBkZWNvZGUgbWF4L21pbiByZXRyeSBsaW1pdCAqLwotLy8JcmFuZ2UtPnJfdGltZV9mbGFnczsJLyogSG93IHRvIGRlY29kZSBtYXgvbWluIHJldHJ5IGxpZmUgKi8KLS8vCXJhbmdlLT5taW5fcmV0cnk7CS8qIE1pbmltYWwgbnVtYmVyIG9mIHJldHJpZXMgKi8KLS8vCXJhbmdlLT5tYXhfcmV0cnk7CS8qIE1heGltYWwgbnVtYmVyIG9mIHJldHJpZXMgKi8KLS8vCXJhbmdlLT5taW5fcl90aW1lOwkvKiBNaW5pbWFsIHJldHJ5IGxpZmV0aW1lICovCi0vLwlyYW5nZS0+bWF4X3JfdGltZTsJLyogTWF4aW1hbCByZXRyeSBsaWZldGltZSAqLwotCiAKIAlmb3IgKGkgPSAwLCB2YWwgPSAwOyBpIDwgMTQ7IGkrKykgewogCkBAIC0xMDExLDYgKzEwMTMsNzAgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHI4MTkyX3d4X3NldF9wbWtpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJaW50IGk7CisJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlKiBpZWVlID0gcHJpdi0+aWVlZTgwMjExOworCXN0cnVjdCBpd19wbWtzYSogIHBQTUsgPSAoc3RydWN0IGl3X3Bta3NhKilleHRyYTsKKwlpbnQJaW50UmV0dXJuID0gZmFsc2U7CisKKwlzd2l0Y2ggKHBQTUstPmNtZCkKKwl7CisJCWNhc2UgSVdfUE1LU0FfQUREOgorCQkJZm9yIChpID0gMDsgaSA8IE5VTV9QTUtJRF9DQUNIRTsgaSsrKQorCQkJeworCQkJCWlmIChtZW1jbXAoaWVlZS0+UE1LSURMaXN0W2ldLkJzc2lkLCBwUE1LLT5ic3NpZC5zYV9kYXRhLCBFVEhfQUxFTikgPT0gMCkKKwkJCQl7CisgICAgICAgICAgICAgICAgICAgIAkJCW1lbWNweShpZWVlLT5QTUtJRExpc3RbaV0uUE1LSUQsIHBQTUstPnBta2lkLCBJV19QTUtJRF9MRU4pOworCQkJCQltZW1jcHkoaWVlZS0+UE1LSURMaXN0W2ldLkJzc2lkLCBwUE1LLT5ic3NpZC5zYV9kYXRhLCBFVEhfQUxFTik7CisJCQkJCWllZWUtPlBNS0lETGlzdFtpXS5iVXNlZCA9IHRydWU7CisJCQkJCWludFJldHVybiA9IHRydWU7CisJCQkJCWdvdG8gX19FWElUX187CisJCQkJfQorCQkJfQorCisJCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1BNS0lEX0NBQ0hFOyBpKyspCisJCQl7CisJCQkJaWYgKGllZWUtPlBNS0lETGlzdFtpXS5iVXNlZCA9PSBmYWxzZSkKKwkJCQl7CisJCQkJCW1lbWNweShpZWVlLT5QTUtJRExpc3RbaV0uUE1LSUQsIHBQTUstPnBta2lkLCBJV19QTUtJRF9MRU4pOworCQkJCQltZW1jcHkoaWVlZS0+UE1LSURMaXN0W2ldLkJzc2lkLCBwUE1LLT5ic3NpZC5zYV9kYXRhLCBFVEhfQUxFTik7CisJCQkJCWllZWUtPlBNS0lETGlzdFtpXS5iVXNlZCA9IHRydWU7CisJCQkJCWludFJldHVybiA9IHRydWU7CisJCQkJCWdvdG8gX19FWElUX187CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBJV19QTUtTQV9SRU1PVkU6CisJCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1BNS0lEX0NBQ0hFOyBpKyspCisJCQl7CisJCQkJaWYgKG1lbWNtcChpZWVlLT5QTUtJRExpc3RbaV0uQnNzaWQsIHBQTUstPmJzc2lkLnNhX2RhdGEsIEVUSF9BTEVOKSA9PSB0cnVlKQorCQkJCXsKKwkJCQkJbWVtc2V0KCZpZWVlLT5QTUtJRExpc3RbaV0sIDB4MDAsIHNpemVvZihSVF9QTUtJRF9MSVNUKSk7CisJCQkJCWludFJldHVybiA9IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkgICAgICAgIH0KKwkJCWJyZWFrOworCisJCWNhc2UgSVdfUE1LU0FfRkxVU0g6CisJCQltZW1zZXQoJmllZWUtPlBNS0lETGlzdFswXSwgMHgwMCwgKHNpemVvZihSVF9QTUtJRF9MSVNUKSAqIE5VTV9QTUtJRF9DQUNIRSkpOworICAgICAgICAgICAgaW50UmV0dXJuID0gdHJ1ZTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9CisKK19fRVhJVF9fOgorCXJldHVybiAoaW50UmV0dXJuKTsKKworfQorCiBzdGF0aWMgaW50IHI4MTkyX3d4X3NldF9nZW5faWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsIGNoYXIgKmV4dHJhKQpAQCAtMTA5Myw3ICsxMTU5LDcgQEAKIAlOVUxMLC8vcjgxOTJfd3hfZ2V0X2F1dGgsLy9OVUxMLCAJCQkvKiBTSU9DU0lXQVVUSCAqLwogCXI4MTkyX3d4X3NldF9lbmNfZXh0LCAJCQkvKiBTSU9DU0lXRU5DT0RFRVhUICovCiAJTlVMTCwvL3I4MTkyX3d4X2dldF9lbmNfZXh0LC8vTlVMTCwgCQkJLyogU0lPQ1NJV0VOQ09ERUVYVCAqLwotCU5VTEwsIAkJCS8qIFNJT0NTSVdQTUtTQSAqLworCXI4MTkyX3d4X3NldF9wbWtpZCwgLyogU0lPQ1NJV1BNS1NBICovCiAJTlVMTCwgCQkJIC8qLS0taG9sZS0tLSovCiAKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTl4VV9jbWRwa3QuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOXhVX2NtZHBrdC5jCmluZGV4IGE4ZTlkMmQuLjdhYjllMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOXhVX2NtZHBrdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOXhVX2NtZHBrdC5jCkBAIC0xLDEzICsxLDIyIEBACi0vKgotICogKGMpIENvcHlyaWdodCAyMDA4LCBSZWFsVEVLIFRlY2hub2xvZ2llcyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIExpbnV4IGRldmljZSBkcml2ZXIgZm9yIFJUTDgxOTJVCiAgKgotICogTW9kdWxlOiByODE5eHVzYl9jbWRwa3QuYwotICogKFJUTDgxOTAgVFgvUlggY29tbWFuZCBwYWNrZXQgaGFuZGxlciBTb3VyY2UgQyBGaWxlKQorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KICAqCi0gKiBOb3RlOiBUaGUgbW9kdWxlIGlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBUWCBhbmQgUlggY29tbWFuZCBwYWNrZXQuCi0gKiAxLlRYOiBTZW5kIHNldCBhbmQgcXVlcnkgY29uZmlndXJhdGlvbiBjb21tYW5kIHBhY2tldC4KLSAqIDIuUlg6IFJlY2VpdmUgdHggZmVlZGJhY2ssIGJlYWNvbiBzdGF0ZSwgcXVlcnkgY29uZmlndXJhdGlvbiwgY29tbWFuZCBwYWNrZXQuCi0gKi8KKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgInI4MTkyVS5oIgogI2luY2x1ZGUgInI4MTl4VV9jbWRwa3QuaCIKIApAQCAtMTksMTkgKzI4LDEzIEBACiAJY2JfZGVzYwkJICAgICp0Y2JfZGVzYzsKIAl1bnNpZ25lZCBjaGFyCSAgICAqcHRyX2J1ZjsKIAotCS8qIFBsYXRmb3JtQWNxdWlyZVNwaW5Mb2NrKEFkYXB0ZXIsIFJUX1RYX1NQSU5MT0NLKTsgKi8KLQogCS8qCiAJICogR2V0IFRDQiBhbmQgbG9jYWwgYnVmZmVyIGZyb20gY29tbW9uIHBvb2wuCiAJICogKEl0IGlzIHNoYXJlZCBieSBDbWRRLCBNZ250USwgYW5kIFVTQiBjb2FsZXNjZSBEYXRhUSkKIAkgKi8KIAlza2IgID0gZGV2X2FsbG9jX3NrYihVU0JfSFdERVNDX0hFQURFUl9MRU4gKyBEYXRhTGVuICsgNCk7Ci0JaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCVJUX1RSQUNFKENPTVBfRVJSLCAiKCVzKTogdW5hYmxlIHRvIGFsbG9jIHNrYiBidWZmZXJcbiIsCi0JCQkJCQkJCV9fZnVuY19fKTsKLQkJcnRTdGF0dXMgPSBmYWxzZTsKLQkJcmV0dXJuIHJ0U3RhdHVzOwotCX0KKwlpZiAoIXNrYikKKwkJcmV0dXJuIGZhbHNlOwogCW1lbWNweSgodW5zaWduZWQgY2hhciAqKShza2ItPmNiKSwgJmRldiwgc2l6ZW9mKGRldikpOwogCXRjYl9kZXNjID0gKGNiX2Rlc2MgKikoc2tiLT5jYiArIE1BWF9ERVZfQUREUl9TSVpFKTsKIAl0Y2JfZGVzYy0+cXVldWVfaW5kZXggPSBUWENNRF9RVUVVRTsKQEAgLTUxLDcgKzU0LDYgQEAKIAkJCXByaXYtPmllZWU4MDIxMS0+c29mdG1hY19oYXJkX3N0YXJ0X3htaXQoc2tiLCBkZXYpOwogCQl9CiAKLQkvL1BsYXRmb3JtUmVsZWFzZVNwaW5Mb2NrKEFkYXB0ZXIsIFJUX1RYX1NQSU5MT0NLKTsKIAlyZXR1cm4gcnRTdGF0dXM7CiB9CiAKQEAgLTIyNCw3ICsyMjYsNiBAQAogCWlmIChwcml2LT5pZWVlODAyMTEtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykgewogCQkvLzIgbWF5YmUgbmVlZCBlbmRpYW4gdHJhbnNmb3JtPwogCQlyeF9pbnRyX3N0YXR1cy5pbnRlcnJ1cHRfc3RhdHVzID0gKigodTMyICopKHBtc2cgKyA0KSk7Ci0JCS8vcnhfaW50cl9zdGF0dXMuSW50ZXJydXB0U3RhdHVzID0gTjJINEJZVEUoKigoVUlOVDMyICopKHBNc2cgKyA0KSkpOwogCiAJCURNRVNHKCJpbnRlcnJ1cHQgc3RhdHVzID0gMHgleFxuIiwgcnhfaW50cl9zdGF0dXMuaW50ZXJydXB0X3N0YXR1cyk7CiAKQEAgLTQ5MSw2ICs0OTIsMTMgQEAKIAkJCWNtcGtfaGFuZGxlX3R4X3JhdGVfaGlzdG9yeShkZXYsIHBjbWRfYnVmZik7CiAJCQljbWRfbGVuZ3RoID0gQ01QS19UWF9SQUhJU19TSVpFOwogCQkJYnJlYWs7CisJCWNhc2UgUlhfVFhfVFNTSV9NRUFOX0JBQ0s6CisJCQl7CisJCQkJdTMyCSpwTXNnOworCQkJCXBNc2cgPSAodTMyICopcGNtZF9idWZmOworCQkJfQorCQkJY21kX2xlbmd0aCA9IDMyOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQkgUlRfVFJBQ0UoQ09NUF9FUlIsICIoJXMpOiB1bmtub3duIENNRCBFbGVtZW50XG4iLAogCQkJCQkJCQlfX2Z1bmNfXyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTl4VV9jbWRwa3QuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOXhVX2NtZHBrdC5oCmluZGV4IGQzYzU2MTUuLjk1ODg1YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOXhVX2NtZHBrdC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOXhVX2NtZHBrdC5oCkBAIC0xNzMsNiArMTczLDcgQEAKICAgICBSWF9EQkdJTkZPX0ZFRURCQUNLID0gNSwKICAgICBSWF9UWF9QRVJfUEtUX0ZFRURCQUNLID0gNiwKICAgICBSWF9UWF9SQVRFX0hJU1RPUlkgPSA3LAorICAgIFJYX1RYX1RTU0lfTUVBTl9CQUNLID0gOCwKICAgICBSWF9DTURfRUxFX01BWAogfSBjbXBrX2VsZW1lbnRfZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvS2NvbmZpZwppbmRleCAwNDM5YzkwLi4yODk2OTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvS2NvbmZpZwpAQCAtMyw1ICszLDYgQEAKIAlkZXBlbmRzIG9uIFBDSSAmJiBXTEFOICYmIFVTQgogCXNlbGVjdCBXSVJFTEVTU19FWFQKIAlzZWxlY3QgV0VYVF9QUklWCisJc2VsZWN0IENSWVBUTwogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9kb3QxMWQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9kb3QxMWQuaAppbmRleCAwODUxYjlkLi5kOTljYzAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvZG90MTFkLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2RvdDExZC5oCkBAIC0yLDcgKzIsNyBAQAogI2RlZmluZSBfX0lOQ19ET1QxMURfSAogCiAjaWZkZWYgRU5BQkxFX0RPVDExRAotI2luY2x1ZGUgImllZWU4MDIxMS5oIgorI2luY2x1ZGUgImllZWU4MDIxMS9pZWVlODAyMTEuaCIKIAogCiB0eXBlZGVmIHN0cnVjdCBfQ0hOTF9UWFBPV0VSX1RSSVBMRSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljNzI2MTEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjU5NSArMCwwIEBACi0vKgotICogTWVyZ2VkIHdpdGggbWFpbmxpbmUgaWVlZTgwMjExLmggaW4gQXVnIDIwMDQuICBPcmlnaW5hbCBpZWVlODAyXzExCi0gKiByZW1haW5zIGNvcHlyaWdodCBieSB0aGUgb3JpZ2luYWwgYXV0aG9ycwotICoKLSAqIFBvcnRpb25zIG9mIHRoZSBtZXJnZWQgY29kZSBhcmUgYmFzZWQgb24gSG9zdCBBUCAoc29mdHdhcmUgd2lyZWxlc3MKLSAqIExBTiBhY2Nlc3MgcG9pbnQpIGRyaXZlciBmb3IgSW50ZXJzaWwgUHJpc20yLzIuNS8zLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAyLCBTU0ggQ29tbXVuaWNhdGlvbnMgU2VjdXJpdHkgQ29ycCBhbmQgSm91bmkgTWFsaW5lbgotICogPGprbWFsaW5lQGNjLmh1dC5maT4KLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDAzLCBKb3VuaSBNYWxpbmVuIDxqa21hbGluZUBjYy5odXQuZmk+Ci0gKgotICogQWRhcHRpb24gdG8gYSBnZW5lcmljIElFRUUgODAyLjExIHN0YWNrIGJ5IEphbWVzIEtldHJlbm9zCi0gKiA8amtldHJlbm9AbGludXguaW50ZWwuY29tPgotICogQ29weXJpZ2h0IChjKSAyMDA0LCBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIE1vZGlmaWVkIGZvciBSZWFsdGVrJ3Mgd2ktZmkgY2FyZHMgYnkgQW5kcmVhIE1lcmVsbG8KLSAqIDxhbmRyZWFtcmxAdGlzY2FsaS5pdD4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBTZWUgUkVBRE1FIGFuZCBDT1BZSU5HIGZvcgotICogbW9yZSBkZXRhaWxzLgotICovCi0jaWZuZGVmIElFRUU4MDIxMV9ICi0jZGVmaW5lIElFRUU4MDIxMV9ICi0jaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4gLyogRVRIX0FMRU4gKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4gICAvKiBBUlJBWV9TSVpFICovCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+Ci0KLSNpbmNsdWRlICJpZWVlODAyMTEvcnRsODE5eF9IVC5oIgotI2luY2x1ZGUgImllZWU4MDIxMS9ydGw4MTl4X0JBLmgiCi0jaW5jbHVkZSAiaWVlZTgwMjExL3J0bDgxOXhfVFMuaCIKLQotCi0jaWZuZGVmIElXX01PREVfTU9OSVRPUgotI2RlZmluZSBJV19NT0RFX01PTklUT1IgNgotI2VuZGlmCi0KLSNpZm5kZWYgSVdFVkNVU1RPTQotI2RlZmluZSBJV0VWQ1VTVE9NIDB4OGMwMgotI2VuZGlmCi0KLQotI2lmbmRlZiBjb250YWluZXJfb2YKLS8qKgotICogY29udGFpbmVyX29mIC0gY2FzdCBhIG1lbWJlciBvZiBhIHN0cnVjdHVyZSBvdXQgdG8gdGhlIGNvbnRhaW5pbmcgc3RydWN0dXJlCi0gKgotICogQHB0cjogICAgICAgIHRoZSBwb2ludGVyIHRvIHRoZSBtZW1iZXIuCi0gKiBAdHlwZTogICAgICAgdGhlIHR5cGUgb2YgdGhlIGNvbnRhaW5lciBzdHJ1Y3QgdGhpcyBpcyBlbWJlZGRlZCBpbi4KLSAqIEBtZW1iZXI6ICAgICB0aGUgbmFtZSBvZiB0aGUgbWVtYmVyIHdpdGhpbiB0aGUgc3RydWN0LgotICoKLSAqLwotI2RlZmluZSBjb250YWluZXJfb2YocHRyLCB0eXBlLCBtZW1iZXIpICh7ICAgICAgICAgICAgICAgICAgICAgIFwKLQljb25zdCB0eXBlb2YoKCh0eXBlICopMCktPm1lbWJlcikgKCpfX21wdHIgPSAocHRyKSk7ICAgIFwKLQkodHlwZSAqKSgoY2hhciAqKV9fbXB0ciAtIG9mZnNldG9mKHR5cGUsIG1lbWJlcikpOyB9KQotI2VuZGlmCi0KLSNkZWZpbmUgS0VZX1RZUEVfTkEJCTB4MAotI2RlZmluZSBLRVlfVFlQRV9XRVA0MAkJMHgxCi0jZGVmaW5lIEtFWV9UWVBFX1RLSVAJCTB4MgotI2RlZmluZSBLRVlfVFlQRV9DQ01QCQkweDQKLSNkZWZpbmUgS0VZX1RZUEVfV0VQMTA0CQkweDUKLQotLyogYWRkZWQgZm9yIHJ0bDgxOXggdHggcHJvY2VkdXJlICovCi0jZGVmaW5lIE1BWF9RVUVVRV9TSVpFCQkweDEwCi0KLS8qCi0gKiA4MTkwIHF1ZXVlIG1hcHBpbmcKLSAqLwotI2RlZmluZSBCS19RVUVVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEJFX1FVRVVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgVklfUVVFVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBWT19RVUVVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIEhDQ0FfUVVFVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgVFhDTURfUVVFVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBNR05UX1FVRVVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIEhJR0hfUVVFVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgQkVBQ09OX1FVRVVFICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotCi0jZGVmaW5lIExPV19RVUVVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJFX1FVRVVFCi0jZGVmaW5lIE5PUk1BTF9RVUVVRSAgICAgICAgICAgICAgICAgICAgICAgICAgIE1HTlRfUVVFVUUKLQotLyogYWRkZWQgYnkgYW15IGZvciBwcyAqLwotI2RlZmluZSBTV1JGX1RJTUVPVVQJCQkJNTAKLQotLyogYWRkZWQgYnkgYW15IGZvciBMRUFQIHJlbGF0ZWQgKi8KLSNkZWZpbmUgSUVfQ0lTQ09fRkxBR19QT1NJVElPTgkJMHgwOAkvKiBGbGFnIGJ5dGU6IGJ5dGUgOCwgbnVtYmVyZWQgZnJvbSAwLiAqLwotI2RlZmluZSBTVVBQT1JUX0NLSVBfTUlDCQkJMHgwOAkvKiBiaXQzICovCi0jZGVmaW5lIFNVUFBPUlRfQ0tJUF9QSwkJCTB4MTAJLyogYml0NCAqLwotLyogZGVmaW5lZCBmb3Igc2tiIGNiIGZpZWxkICovCi0vKiBBdCBtb3N0IDI4IGJ5dGUgKi8KLXR5cGVkZWYgc3RydWN0IGNiX2Rlc2MgewotCS8qIFR4IERlc2MgUmVsYXRlZCBmbGFncyAoOC05KSAqLwotCXU4IGJMYXN0SW5pUGt0OjE7Ci0JdTggYkNtZE9ySW5pdDoxOwotCXU4IGJGaXJzdFNlZzoxOwotCXU4IGJMYXN0U2VnOjE7Ci0JdTggYkVuY3J5cHQ6MTsKLQl1OCBiVHhEaXNhYmxlUmF0ZUZhbGxCYWNrOjE7Ci0JdTggYlR4VXNlRHJpdmVyQXNzaW5nZWRSYXRlOjE7Ci0JdTggYkh3U2VjOjE7IC8qIGluZGljYXRlIHdoZXRoZXIgdXNlIEh3IHNlY3VyaXR5LiBXQiAqLwotCi0JdTggcmVzZXJ2ZWQxOwotCi0JLyogVHggRmlybXdhcmUgUmVsYWdlZCBmbGFncyAoMTAtMTEpKi8KLQl1OCBiQ1RTRW5hYmxlOjE7Ci0JdTggYlJUU0VuYWJsZToxOwotCXU4IGJVc2VTaG9ydEdJOjE7Ci0JdTggYlVzZVNob3J0UHJlYW1ibGU6MTsKLQl1OCBiVHhFbmFibGVGd0NhbGNEdXI6MTsKLQl1OCBiQU1QRFVFbmFibGU6MTsKLQl1OCBiUlRTU1RCQzoxOwotCXU4IFJUU1NDOjE7Ci0KLQl1OCBiUlRTQlc6MTsKLQl1OCBiUGFja2V0Qlc6MTsKLQl1OCBiUlRTVXNlU2hvcnRQcmVhbWJsZToxOwotCXU4IGJSVFNVc2VTaG9ydEdJOjE7Ci0JdTggYk11bHRpY2FzdDoxOwotCXU4IGJCcm9hZGNhc3Q6MTsKLQl1OCBkcnZfYWdnX2VuYWJsZToxOwotCXU4IHJlc2VydmVkMjoxOwotCi0JLyogVHggRGVzYyByZWxhdGVkIGVsZW1lbnQoMTItMTkpICovCi0JdTggcmF0YV9pbmRleDsKLQl1OCBxdWV1ZV9pbmRleDsKLQl1MTYgdHhidWZfc2l6ZTsKLQl1OCBSQVRSSW5kZXg7Ci0JdTggcmVzZXJ2ZWQ2OwotCXU4IHJlc2VydmVkNzsKLQl1OCByZXNlcnZlZDg7Ci0KLQkvKiBUeCBmaXJtd2FyZSByZWxhdGVkIGVsZW1lbnQoMjAtMjcpICovCi0JdTggZGF0YV9yYXRlOwotCXU4IHJ0c19yYXRlOwotCXU4IGFtcGR1X2ZhY3RvcjsKLQl1OCBhbXBkdV9kZW5zaXR5OwotCXU4IERydkFnZ3JOdW07Ci0JdTE2IHBrdF9zaXplOwotCXU4IHJlc2VydmVkMTI7Ci19IGNiX2Rlc2MsICpwY2JfZGVzYzsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLURlZmluZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUgTUdOXzFNICAgICAgICAgICAgICAgICAgMHgwMgotI2RlZmluZSBNR05fMk0gICAgICAgICAgICAgICAgICAweDA0Ci0jZGVmaW5lIE1HTl81XzVNICAgICAgICAgICAgICAgIDB4MGIKLSNkZWZpbmUgTUdOXzExTSAgICAgICAgICAgICAgICAgMHgxNgotCi0jZGVmaW5lIE1HTl82TSAgICAgICAgICAgICAgICAgIDB4MGMKLSNkZWZpbmUgTUdOXzlNICAgICAgICAgICAgICAgICAgMHgxMgotI2RlZmluZSBNR05fMTJNICAgICAgICAgICAgICAgICAweDE4Ci0jZGVmaW5lIE1HTl8xOE0gICAgICAgICAgICAgICAgIDB4MjQKLSNkZWZpbmUgTUdOXzI0TSAgICAgICAgICAgICAgICAgMHgzMAotI2RlZmluZSBNR05fMzZNICAgICAgICAgICAgICAgICAweDQ4Ci0jZGVmaW5lIE1HTl80OE0gICAgICAgICAgICAgICAgIDB4NjAKLSNkZWZpbmUgTUdOXzU0TSAgICAgICAgICAgICAgICAgMHg2YwotCi0jZGVmaW5lIE1HTl9NQ1MwICAgICAgICAgICAgICAgIDB4ODAKLSNkZWZpbmUgTUdOX01DUzEgICAgICAgICAgICAgICAgMHg4MQotI2RlZmluZSBNR05fTUNTMiAgICAgICAgICAgICAgICAweDgyCi0jZGVmaW5lIE1HTl9NQ1MzICAgICAgICAgICAgICAgIDB4ODMKLSNkZWZpbmUgTUdOX01DUzQgICAgICAgICAgICAgICAgMHg4NAotI2RlZmluZSBNR05fTUNTNSAgICAgICAgICAgICAgICAweDg1Ci0jZGVmaW5lIE1HTl9NQ1M2ICAgICAgICAgICAgICAgIDB4ODYKLSNkZWZpbmUgTUdOX01DUzcgICAgICAgICAgICAgICAgMHg4NwotI2RlZmluZSBNR05fTUNTOCAgICAgICAgICAgICAgICAweDg4Ci0jZGVmaW5lIE1HTl9NQ1M5ICAgICAgICAgICAgICAgIDB4ODkKLSNkZWZpbmUgTUdOX01DUzEwICAgICAgICAgICAgICAgMHg4YQotI2RlZmluZSBNR05fTUNTMTEgICAgICAgICAgICAgICAweDhiCi0jZGVmaW5lIE1HTl9NQ1MxMiAgICAgICAgICAgICAgIDB4OGMKLSNkZWZpbmUgTUdOX01DUzEzICAgICAgICAgICAgICAgMHg4ZAotI2RlZmluZSBNR05fTUNTMTQgICAgICAgICAgICAgICAweDhlCi0jZGVmaW5lIE1HTl9NQ1MxNSAgICAgICAgICAgICAgIDB4OGYKLQotLyoKLSAqCQk4MDIuMTEgTWFuYWdlbWVudCBmcmFtZSBSZWFzb24gQ29kZSBmaWVsZAotICovCi1lbnVtCV9SZWFzb25Db2RlewotCXVuc3BlY19yZWFzb24JPSAweDEsCi0JYXV0aF9ub3RfdmFsaWQJPSAweDIsCi0JZGVhdXRoX2x2X3NzCT0gMHgzLAotCWluYWN0aXZpdHkJCT0gMHg0LAotCWFwX292ZXJsb2FkIAk9IDB4NSwKLQljbGFzczJfZXJyCQk9IDB4NiwKLQljbGFzczNfZXJyCQk9IDB4NywKLQlkaXNhc19sdl9zcyAJPSAweDgsCi0JYXNvY19ub3RfYXV0aAk9IDB4OSwKLQotCS8qIC0tLS1NSUNfQ0hFQ0sgKi8KLQltaWNfZmFpbHVyZSAJPSAweGUsCi0JLyogLS0tLUVORCBNSUNfQ0hFQ0sgKi8KLQotCS8qIFJlYXNvbiBjb2RlIGRlZmluZWQgaW4gODAyLjExaSBEMTAuMCBwLjI4LiAqLwotCWludmFsaWRfSUUJCT0gMHgwZCwKLQlmb3VyX3dheV90bW91dAk9IDB4MGYsCi0JdHdvX3dheV90bW91dAk9IDB4MTAsCi0JSUVfZGlzbWF0Y2ggCT0gMHgxMSwKLQlpbnZhbGlkX0djaXBoZXIgPSAweDEyLAotCWludmFsaWRfUGNpcGhlciA9IDB4MTMsCi0JaW52YWxpZF9BS01QCT0gMHgxNCwKLQl1bnN1cF9SU05JRXZlciA9IDB4MTUsCi0JaW52YWxpZF9SU05JRQk9IDB4MTYsCi0JYXV0aF84MDJfMXhfZmFpbCA9IDB4MTcsCi0JY2lwZXJfcmVqZWN0CQk9IDB4MTgsCi0KLQkvKiBSZWFzb24gY29kZSBkZWZpbmVkIGluIDcuMy4xLjcsIDgwMi4xZSBEMTMuMCwgcC40Mi4gKi8KLQlRb1NfdW5zcGVjCQk9IDB4MjAsIC8qIDMyICovCi0JUUFQX2JhbmR3aWR0aAk9IDB4MjEsIC8qIDMzICovCi0JcG9vcl9jb25kaXRpb24JPSAweDIyLCAvKiAzNCAqLwotCW5vX2ZhY2lsaXR5IAk9IDB4MjMsIC8qIDM1ICovCi0JCQkJCQkJLyogV2hlcmUgaXMgMzY/Pz8gKi8KLQlyZXFfZGVjbGluZWQJPSAweDI1LCAvKiAzNyAqLwotCWludmFsaWRfcGFyYW0JPSAweDI2LCAvKiAzOCAqLwotCXJlcV9ub3RfaG9ub3JlZCA9IDB4MjcsCS8qIDM5ICovCi0JVFNfbm90X2NyZWF0ZWQJPSAweDJGLCAvKiA0NyAqLwotCURMX25vdF9hbGxvd2VkCT0gMHgzMCwgLyogNDggKi8KLQlkZXN0X25vdF9leGlzdAk9IDB4MzEsIC8qIDQ5ICovCi0JZGVzdF9ub3RfUVNUQQk9IDB4MzIsIC8qIDUwICovCi19OwotCi0KLQotI2RlZmluZSBhU2lmc1RpbWUJICgocHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsubW9kZSA9PSBJRUVFX0EpIHx8IFwKLQkJKHByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLm1vZGUgPT0gSUVFRV9OXzI0RykgfHwgXAotCQkocHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsubW9kZSA9PSBJRUVFX05fNUcpKSA/IDE2IDogMTAKLQotI2RlZmluZSBNR01UX1FVRVVFX05VTSA1Ci0KLSNkZWZpbmUgSUVFRV9DTURfU0VUX1dQQV9QQVJBTQkJCTEKLSNkZWZpbmUJSUVFRV9DTURfU0VUX1dQQV9JRQkJCTIKLSNkZWZpbmUgSUVFRV9DTURfU0VUX0VOQ1JZUFRJT04JCQkzCi0jZGVmaW5lIElFRUVfQ01EX01MTUUJCQkJNAotCi0jZGVmaW5lIElFRUVfUEFSQU1fV1BBX0VOQUJMRUQJCQkxCi0jZGVmaW5lIElFRUVfUEFSQU1fVEtJUF9DT1VOVEVSTUVBU1VSRVMJCTIKLSNkZWZpbmUgSUVFRV9QQVJBTV9EUk9QX1VORU5DUllQVEVECQkzCi0jZGVmaW5lIElFRUVfUEFSQU1fUFJJVkFDWV9JTlZPS0VECQk0Ci0jZGVmaW5lIElFRUVfUEFSQU1fQVVUSF9BTEdTCQkJNQotI2RlZmluZSBJRUVFX1BBUkFNX0lFRUVfODAyXzFYCQkJNgotLyogSXQgc2hvdWxkIGNvbnNpc3RlbnQgd2l0aCB0aGUgZHJpdmVyX1hYWC5jICovCi0jZGVmaW5lIElFRUVfUEFSQU1fV1BBWF9TRUxFQ1QJCQk3Ci0vKiBBZGRlZCBmb3Igbm90aWZ5IHRoZSBlbmNyeXB0aW9uIHR5cGUgc2VsZWN0aW9uICovCi0jZGVmaW5lIElFRUVfUFJPVE9fV1BBCQkJCTEKLSNkZWZpbmUgSUVFRV9QUk9UT19SU04JCQkJMgotLyogQWRkZWQgZm9yIG5vdGlmeSB0aGUgZW5jcnlwdGlvbiB0eXBlIHNlbGVjdGlvbiAqLwotI2RlZmluZSBJRUVFX1dQQVhfVVNFR1JPVVAJCQkwCi0jZGVmaW5lIElFRUVfV1BBWF9XRVA0MAkJCQkxCi0jZGVmaW5lIElFRUVfV1BBWF9US0lQCQkJCTIKLSNkZWZpbmUgSUVFRV9XUEFYX1dSQVAgICAJCQkzCi0jZGVmaW5lIElFRUVfV1BBWF9DQ01QCQkJCTQKLSNkZWZpbmUgSUVFRV9XUEFYX1dFUDEwNAkJCTUKLQotI2RlZmluZSBJRUVFX0tFWV9NR01UX0lFRUU4MDIxWAkJCTEKLSNkZWZpbmUgSUVFRV9LRVlfTUdNVF9QU0sJCQkyCi0KLSNkZWZpbmUgSUVFRV9NTE1FX1NUQV9ERUFVVEgJCQkxCi0jZGVmaW5lIElFRUVfTUxNRV9TVEFfRElTQVNTT0MJCQkyCi0KLQotI2RlZmluZSBJRUVFX0NSWVBUX0VSUl9VTktOT1dOX0FMRwkJMgotI2RlZmluZSBJRUVFX0NSWVBUX0VSUl9VTktOT1dOX0FERFIJCTMKLSNkZWZpbmUgSUVFRV9DUllQVF9FUlJfQ1JZUFRfSU5JVF9GQUlMRUQJNAotI2RlZmluZSBJRUVFX0NSWVBUX0VSUl9LRVlfU0VUX0ZBSUxFRAkJNQotI2RlZmluZSBJRUVFX0NSWVBUX0VSUl9UWF9LRVlfU0VUX0ZBSUxFRAk2Ci0jZGVmaW5lIElFRUVfQ1JZUFRfRVJSX0NBUkRfQ09ORl9GQUlMRUQJCTcKLQotCi0jZGVmaW5lCUlFRUVfQ1JZUFRfQUxHX05BTUVfTEVOCQkJMTYKLQotI2RlZmluZSBNQVhfSUVfTEVOICAweGZmCi0KLS8qIGFkZGVkIGZvciBrZXJuZWwgY29uZmxpY3QgKi8KLSNkZWZpbmUgaWVlZTgwMjExX2NyeXB0X2RlaW5pdF9lbnRyaWVzIAlpZWVlODAyMTFfY3J5cHRfZGVpbml0X2VudHJpZXNfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV9jcnlwdF9kZWluaXRfaGFuZGxlciAJaWVlZTgwMjExX2NyeXB0X2RlaW5pdF9oYW5kbGVyX3JzbAotI2RlZmluZSBpZWVlODAyMTFfY3J5cHRfZGVsYXllZF9kZWluaXQgCWllZWU4MDIxMV9jcnlwdF9kZWxheWVkX2RlaW5pdF9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3JlZ2lzdGVyX2NyeXB0b19vcHMgIAlpZWVlODAyMTFfcmVnaXN0ZXJfY3J5cHRvX29wc19yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3VucmVnaXN0ZXJfY3J5cHRvX29wcyBpZWVlODAyMTFfdW5yZWdpc3Rlcl9jcnlwdG9fb3BzX3JzbAotI2RlZmluZSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMgCWllZWU4MDIxMV9nZXRfY3J5cHRvX29wc19yc2wKLQotI2RlZmluZSBpZWVlODAyMTFfY2NtcF9udWxsCQlpZWVlODAyMTFfY2NtcF9udWxsX3JzbAotCi0jZGVmaW5lIGllZWU4MDIxMV90a2lwX251bGwJCWllZWU4MDIxMV90a2lwX251bGxfcnNsCi0KLSNkZWZpbmUgaWVlZTgwMjExX3dlcF9udWxsCQlpZWVlODAyMTFfd2VwX251bGxfcnNsCi0KLSNkZWZpbmUgZnJlZV9pZWVlODAyMTEgICAgICAgICAgCWZyZWVfaWVlZTgwMjExX3JzbAotI2RlZmluZSBhbGxvY19pZWVlODAyMTEgICAgICAgIAkJYWxsb2NfaWVlZTgwMjExX3JzbAotCi0jZGVmaW5lIGllZWU4MDIxMV9yeCAJCQlpZWVlODAyMTFfcnhfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV9yeF9tZ3QJCWllZWU4MDIxMV9yeF9tZ3RfcnNsCi0KLSNkZWZpbmUgaWVlZTgwMjExX2dldF9iZWFjb24JCWllZWU4MDIxMV9nZXRfYmVhY29uX3JzbAotI2RlZmluZSBpZWVlODAyMTFfd2FrZV9xdWV1ZQkJaWVlZTgwMjExX3dha2VfcXVldWVfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV9zdG9wX3F1ZXVlCQlpZWVlODAyMTFfc3RvcF9xdWV1ZV9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3Jlc2V0X3F1ZXVlCQlpZWVlODAyMTFfcmVzZXRfcXVldWVfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV9zb2Z0bWFjX3N0b3BfcHJvdG9jb2wJaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbF9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3NvZnRtYWNfc3RhcnRfcHJvdG9jb2wgaWVlZTgwMjExX3NvZnRtYWNfc3RhcnRfcHJvdG9jb2xfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV9pc19zaG9ydHNsb3QJCWllZWU4MDIxMV9pc19zaG9ydHNsb3RfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV9pc181NGcJCWllZWU4MDIxMV9pc181NGdfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV93cGFfc3VwcGxpY2FudF9pb2N0bAlpZWVlODAyMTFfd3BhX3N1cHBsaWNhbnRfaW9jdGxfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV9wc190eF9hY2sJCWllZWU4MDIxMV9wc190eF9hY2tfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV9zb2Z0bWFjX3htaXQJCWllZWU4MDIxMV9zb2Z0bWFjX3htaXRfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV9zdG9wX3NlbmRfYmVhY29ucwlpZWVlODAyMTFfc3RvcF9zZW5kX2JlYWNvbnNfcnNsCi0jZGVmaW5lIG5vdGlmeV93eF9hc3NvY19ldmVudAkJbm90aWZ5X3d4X2Fzc29jX2V2ZW50X3JzbAotI2RlZmluZSBTZW5kRGlzYXNzb2NpYXRpb24JCVNlbmREaXNhc3NvY2lhdGlvbl9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX2Rpc2Fzc29jaWF0ZQkJaWVlZTgwMjExX2Rpc2Fzc29jaWF0ZV9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3N0YXJ0X3NlbmRfYmVhY29ucwlpZWVlODAyMTFfc3RhcnRfc2VuZF9iZWFjb25zX3JzbAotI2RlZmluZSBpZWVlODAyMTFfc3RvcF9zY2FuCQlpZWVlODAyMTFfc3RvcF9zY2FuX3JzbAotI2RlZmluZSBpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXF1ZXN0cwlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXF1ZXN0c19yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3NvZnRtYWNfc2Nhbl9zeW5jcm8JaWVlZTgwMjExX3NvZnRtYWNfc2Nhbl9zeW5jcm9fcnNsCi0jZGVmaW5lIGllZWU4MDIxMV9zdGFydF9zY2FuX3N5bmNybwlpZWVlODAyMTFfc3RhcnRfc2Nhbl9zeW5jcm9fcnNsCi0KLSNkZWZpbmUgaWVlZTgwMjExX3d4X2dldF9lc3NpZAkJaWVlZTgwMjExX3d4X2dldF9lc3NpZF9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3d4X3NldF9lc3NpZAkJaWVlZTgwMjExX3d4X3NldF9lc3NpZF9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3d4X3NldF9yYXRlCQlpZWVlODAyMTFfd3hfc2V0X3JhdGVfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV93eF9nZXRfcmF0ZQkJaWVlZTgwMjExX3d4X2dldF9yYXRlX3JzbAotI2RlZmluZSBpZWVlODAyMTFfd3hfc2V0X3dhcAkJaWVlZTgwMjExX3d4X3NldF93YXBfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV93eF9nZXRfd2FwCQlpZWVlODAyMTFfd3hfZ2V0X3dhcF9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3d4X3NldF9tb2RlCQlpZWVlODAyMTFfd3hfc2V0X21vZGVfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV93eF9nZXRfbW9kZQkJaWVlZTgwMjExX3d4X2dldF9tb2RlX3JzbAotI2RlZmluZSBpZWVlODAyMTFfd3hfc2V0X3NjYW4JCWllZWU4MDIxMV93eF9zZXRfc2Nhbl9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3d4X2dldF9mcmVxCQlpZWVlODAyMTFfd3hfZ2V0X2ZyZXFfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV93eF9zZXRfZnJlcQkJaWVlZTgwMjExX3d4X3NldF9mcmVxX3JzbAotI2RlZmluZSBpZWVlODAyMTFfd3hfc2V0X3Jhd3R4CQlpZWVlODAyMTFfd3hfc2V0X3Jhd3R4X3JzbAotI2RlZmluZSBpZWVlODAyMTFfd3hfZ2V0X25hbWUJCWllZWU4MDIxMV93eF9nZXRfbmFtZV9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3d4X3NldF9wb3dlcgkJaWVlZTgwMjExX3d4X3NldF9wb3dlcl9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3d4X2dldF9wb3dlcgkJaWVlZTgwMjExX3d4X2dldF9wb3dlcl9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3dsYW5fZnJlcXVlbmNpZXMJaWVlZTgwMjExX3dsYW5fZnJlcXVlbmNpZXNfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV93eF9zZXRfcnRzCQlpZWVlODAyMTFfd3hfc2V0X3J0c19yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3d4X2dldF9ydHMJCWllZWU4MDIxMV93eF9nZXRfcnRzX3JzbAotCi0jZGVmaW5lIGllZWU4MDIxMV90eGJfZnJlZQkJaWVlZTgwMjExX3R4Yl9mcmVlX3JzbAotCi0jZGVmaW5lIGllZWU4MDIxMV93eF9zZXRfZ2VuX2llCQlpZWVlODAyMTFfd3hfc2V0X2dlbl9pZV9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3d4X2dldF9zY2FuCQlpZWVlODAyMTFfd3hfZ2V0X3NjYW5fcnNsCi0jZGVmaW5lIGllZWU4MDIxMV93eF9zZXRfZW5jb2RlCQlpZWVlODAyMTFfd3hfc2V0X2VuY29kZV9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3d4X2dldF9lbmNvZGUJCWllZWU4MDIxMV93eF9nZXRfZW5jb2RlX3JzbAotI2lmIFdJUkVMRVNTX0VYVCA+PSAxOAotI2RlZmluZSBpZWVlODAyMTFfd3hfc2V0X21sbWUJCWllZWU4MDIxMV93eF9zZXRfbWxtZV9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3d4X3NldF9hdXRoCQlpZWVlODAyMTFfd3hfc2V0X2F1dGhfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV93eF9zZXRfZW5jb2RlX2V4dAlpZWVlODAyMTFfd3hfc2V0X2VuY29kZV9leHRfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV93eF9nZXRfZW5jb2RlX2V4dAlpZWVlODAyMTFfd3hfZ2V0X2VuY29kZV9leHRfcnNsCi0jZW5kaWYKLQotCi10eXBlZGVmIHN0cnVjdCBpZWVlX3BhcmFtIHsKLQl1MzIgY21kOwotCXU4IHN0YV9hZGRyW0VUSF9BTEVOXTsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQl1OCBuYW1lOwotCQkJdTMyIHZhbHVlOwotCQl9IHdwYV9wYXJhbTsKLQkJc3RydWN0IHsKLQkJCXUzMiBsZW47Ci0JCQl1OCByZXNlcnZlZFszMl07Ci0JCQl1OCBkYXRhWzBdOwotCQl9IHdwYV9pZTsKLQkJc3RydWN0ewotCQkJaW50IGNvbW1hbmQ7Ci0JCQlpbnQgcmVhc29uX2NvZGU7Ci0JCX0gbWxtZTsKLQkJc3RydWN0IHsKLQkJCXU4IGFsZ1tJRUVFX0NSWVBUX0FMR19OQU1FX0xFTl07Ci0JCQl1OCBzZXRfdHg7Ci0JCQl1MzIgZXJyOwotCQkJdTggaWR4OwotCQkJdTggc2VxWzhdOyAvKiBzZXF1ZW5jZSBjb3VudGVyIChzZXQ6IFJYLCBnZXQ6IFRYKSAqLwotCQkJdTE2IGtleV9sZW47Ci0JCQl1OCBrZXlbMF07Ci0JCX0gY3J5cHQ7Ci0JfSB1OwotfSBpZWVlX3BhcmFtOwotCi0KLSNpZiBXSVJFTEVTU19FWFQgPCAxNwotI2RlZmluZSBJV19RVUFMX1FVQUxfSU5WQUxJRCAgIDB4MTAKLSNkZWZpbmUgSVdfUVVBTF9MRVZFTF9JTlZBTElEICAweDIwCi0jZGVmaW5lIElXX1FVQUxfTk9JU0VfSU5WQUxJRCAgMHg0MAotI2RlZmluZSBJV19RVUFMX1FVQUxfVVBEQVRFRCAgIDB4MQotI2RlZmluZSBJV19RVUFMX0xFVkVMX1VQREFURUQgIDB4MgotI2RlZmluZSBJV19RVUFMX05PSVNFX1VQREFURUQgIDB4NAotI2VuZGlmCi0KLQotLyogbGludXggdW5kZXIgMi42LjkgcmVsZWFzZSBtYXkgbm90IHN1cHBvcnQgaXQsIHNvIG1vZGlmeSBpdCBmb3IgY29tbW9uIHVzZSAqLwotI2RlZmluZSBNU0VDUyh0KSBtc2Vjc190b19qaWZmaWVzKHQpCi0jZGVmaW5lIG1zbGVlcF9pbnRlcnJ1cHRpYmxlX3JzbCAgbXNsZWVwX2ludGVycnVwdGlibGUKLQotI2RlZmluZSBJRUVFODAyMTFfREFUQV9MRU4JCTIzMDQKLS8qIE1heGltdW0gc2l6ZSBmb3IgdGhlIE1BLVVOSVREQVRBIHByaW1pdGl2ZSwgODAyLjExIHN0YW5kYXJkIHNlY3Rpb24KLSAgIDYuMi4xLjEuMi4KLQotICAgVGhlIGZpZ3VyZSBpbiBzZWN0aW9uIDcuMS4yIHN1Z2dlc3RzIGEgYm9keSBzaXplIG9mIHVwIHRvIDIzMTIKLSAgIGJ5dGVzIGlzIGFsbG93ZWQsIHdoaWNoIGlzIGEgYml0IGNvbmZ1c2luZywgSSBzdXNwZWN0IHRoaXMKLSAgIHJlcHJlc2VudHMgdGhlIDIzMDQgYnl0ZXMgb2YgcmVhbCBkYXRhLCBwbHVzIGEgcG9zc2libGUgOCBieXRlcyBvZgotICAgV0VQIElWIGFuZCBJQ1YuICh0aGlzIGludGVycHJldGF0aW9uIHN1Z2dlc3RlZCBieSBSYW1pcm8gQmFycmVpcm8pICovCi0jZGVmaW5lIElFRUU4MDIxMV8xQUREUl9MRU4gMTAKLSNkZWZpbmUgSUVFRTgwMjExXzJBRERSX0xFTiAxNgotI2RlZmluZSBJRUVFODAyMTFfM0FERFJfTEVOIDI0Ci0jZGVmaW5lIElFRUU4MDIxMV80QUREUl9MRU4gMzAKLSNkZWZpbmUgSUVFRTgwMjExX0ZDU19MRU4gICAgNAotI2RlZmluZSBJRUVFODAyMTFfSExFTiAgICAgICAgICAgICAgICAgIChJRUVFODAyMTFfNEFERFJfTEVOKQotI2RlZmluZSBJRUVFODAyMTFfRlJBTUVfTEVOICAgICAgICAgICAgIChJRUVFODAyMTFfREFUQV9MRU4gKyBJRUVFODAyMTFfSExFTikKLSNkZWZpbmUgSUVFRTgwMjExX01HTVRfSERSX0xFTiAyNAotI2RlZmluZSBJRUVFODAyMTFfREFUQV9IRFIzX0xFTiAyNAotI2RlZmluZSBJRUVFODAyMTFfREFUQV9IRFI0X0xFTiAzMAotCi0jZGVmaW5lIE1JTl9GUkFHX1RIUkVTSE9MRCAgICAgMjU2VQotI2RlZmluZSBNQVhfRlJBR19USFJFU0hPTEQgICAgIDIzNDZVCi0KLQotLyogRnJhbWUgY29udHJvbCBmaWVsZCBjb25zdGFudHMgKi8KLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfVkVSUwkJMHgwMDAzCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX0ZUWVBFCQkweDAwMGMKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfU1RZUEUJCTB4MDBmMAotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9GUkFNRVRZUEUJMHgwMGZjCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX1RPRFMJCTB4MDEwMAotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9GUk9NRFMJCTB4MDIwMAotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9EU1RPRFMJCTB4MDMwMAotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9NT1JFRlJBR1MJMHgwNDAwCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX1JFVFJZCQkweDA4MDAKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfUE0JCTB4MTAwMAotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9NT1JFREFUQQkJMHgyMDAwCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX1dFUAkJMHg0MDAwCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX09SREVSCQkweDgwMDAKLQotI2RlZmluZSBJRUVFODAyMTFfRlRZUEVfTUdNVAkJMHgwMDAwCi0jZGVmaW5lIElFRUU4MDIxMV9GVFlQRV9DVEwJCTB4MDAwNAotI2RlZmluZSBJRUVFODAyMTFfRlRZUEVfREFUQQkJMHgwMDA4Ci0KLS8qIG1hbmFnZW1lbnQgKi8KLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUQkweDAwMDAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFU1AgCTB4MDAxMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVEJMHgwMDIwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFU1AJMHgwMDMwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVEJMHgwMDQwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQCTB4MDA1MAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OCQkweDAwODAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0FUSU0JCTB4MDA5MAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfRElTQVNTT0MJMHgwMEEwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9BVVRICQkweDAwQjAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0RFQVVUSAkJMHgwMEMwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9NQU5BR0VfQUNUCTB4MDBEMAotCi0vKiBjb250cm9sICovCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9QU1BPTEwJCTB4MDBBMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUlRTCQkweDAwQjAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0NUUwkJMHgwMEMwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9BQ0sJCTB4MDBEMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQ0ZFTkQJCTB4MDBFMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQ0ZFTkRBQ0sJMHgwMEYwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9CTE9DS0FDSyAgIDB4MDA5NAotCi0vKiBkYXRhICovCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9EQVRBCQkweDAwMDAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0RBVEFfQ0ZBQ0sJMHgwMDEwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9EQVRBX0NGUE9MTAkweDAwMjAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0RBVEFfQ0ZBQ0tQT0xMCTB4MDAzMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMJMHgwMDQwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9DRkFDSwkJMHgwMDUwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9DRlBPTEwJCTB4MDA2MAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQ0ZBQ0tQT0xMCTB4MDA3MAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUU9TX0RBVEEJMHgwMDgwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9RT1NfTlVMTAkweDAwQzAKLQotI2RlZmluZSBJRUVFODAyMTFfU0NUTF9GUkFHCQkweDAwMEYKLSNkZWZpbmUgSUVFRTgwMjExX1NDVExfU0VRCQkweEZGRjAKLQotLyogUU9TIGNvbnRyb2wgKi8KLSNkZWZpbmUgSUVFRTgwMjExX1FDVExfVElEICAgICAgICAgICAgICAweDAwMEYKLQotI2RlZmluZQlGQ19RT1NfQklUCQkJCQlCSVQ3Ci0jZGVmaW5lIElzRGF0YUZyYW1lKHBkdSkJCQkoKChwZHVbMF0gJiAweDBDKSA9PSAweDA4KSA/IHRydWUgOiBmYWxzZSkKLSNkZWZpbmUJSXNMZWdhY3lEYXRhRnJhbWUocGR1KQkoSXNEYXRhRnJhbWUocGR1KSAmJiAoIShwZHVbMF0mRkNfUU9TX0JJVCkpKQotCi0jZGVmaW5lIElzUW9TRGF0YUZyYW1lKHBmcmFtZSkgICgoKih1MTYgKilwZnJhbWUmKElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQXxJRUVFODAyMTFfRlRZUEVfREFUQSkpID09IChJRUVFODAyMTFfU1RZUEVfUU9TX0RBVEF8SUVFRTgwMjExX0ZUWVBFX0RBVEEpKQotI2RlZmluZSBGcmFtZV9PcmRlcihwZnJhbWUpICAgICAoKih1MTYgKilwZnJhbWUmSUVFRTgwMjExX0ZDVExfT1JERVIpCi0jZGVmaW5lIFNOX0xFU1MoYSwgYikJCSgoKGEtYikmMHg4MDApICE9IDApCi0jZGVmaW5lIFNOX0VRVUFMKGEsIGIpCShhID09IGIpCi0jZGVmaW5lIE1BWF9ERVZfQUREUl9TSVpFIDgKLXR5cGVkZWYgZW51bSBfQUNUX0NBVEVHT1JZewotCUFDVF9DQVRfUU9TID0gMSwKLQlBQ1RfQ0FUX0RMUyA9IDIsCi0JQUNUX0NBVF9CQSAgPSAzLAotCUFDVF9DQVRfSFQgID0gNywKLQlBQ1RfQ0FUX1dNTSA9IDE3LAotfSBBQ1RfQ0FURUdPUlksICpQQUNUX0NBVEVHT1JZOwotCi10eXBlZGVmIGVudW0gX1RTX0FDVElPTnsKLQlBQ1RfQUREVFNSRVEgPSAwLAotCUFDVF9BRERUU1JTUCA9IDEsCi0JQUNUX0RFTFRTICAgID0gMiwKLQlBQ1RfU0NIRURVTEUgPSAzLAotfSBUU19BQ1RJT04sICpQVFNfQUNUSU9OOwotCi10eXBlZGVmIGVudW0gX0JBX0FDVElPTnsKLQlBQ1RfQUREQkFSRVEgPSAwLAotCUFDVF9BRERCQVJTUCA9IDEsCi0JQUNUX0RFTEJBICAgID0gMiwKLX0gQkFfQUNUSU9OLCAqUEJBX0FDVElPTjsKLQotdHlwZWRlZiBlbnVtIF9Jbml0aWFsR2Fpbk9wVHlwZXsKLQlJR19CYWNrdXAgPSAwLAotCUlHX1Jlc3RvcmUsCi0JSUdfTWF4Ci19IEluaXRpYWxHYWluT3BUeXBlOwotCi0vKiBkZWJ1ZyBtYWNyb3MgKi8KLSNkZWZpbmUgQ09ORklHX0lFRUU4MDIxMV9ERUJVRwotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKLWV4dGVybiB1MzIgaWVlZTgwMjExX2RlYnVnX2xldmVsOwotI2RlZmluZSBJRUVFODAyMTFfREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgXAotZG8geyBpZiAoaWVlZTgwMjExX2RlYnVnX2xldmVsICYgKGxldmVsKSkgXAotICBwcmludGsoS0VSTl9ERUJVRyAiaWVlZTgwMjExOiAiIGZtdCwgIyMgYXJncyk7IH0gd2hpbGUgKDApCi0vKiB3YiBhZGRlZCB0byBkZWJ1ZyBvdXQgZGF0YSBidWYKLSAqIGlmIHlvdSB3YW50IHByaW50IERBVEEgYnVmZmVyIHJlbGF0ZWQgQkEsIHBsZWFzZSBzZXQgaWVlZTgwMjExX2RlYnVnX2xldmVsCi0gKiB0byBEQVRBfEJBCi0gKi8KLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX0RBVEEobGV2ZWwsIGRhdGEsIGRhdGFsZW4pCVwKLQlkbyB7IGlmICgoaWVlZTgwMjExX2RlYnVnX2xldmVsICYgKGxldmVsKSkgPT0gKGxldmVsKSkgeyAJXAotCQkJaW50IGk7CQkJCQlcCi0JCQl1OCogcGRhdGEgPSAodTggKikgZGF0YTsJCQlcCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiaWVlZTgwMjExOiAlcygpXG4iLCBfX0ZVTkNUSU9OX18pOwlcCi0JCQlmb3IgKGkgPSAwOyBpIDwgKGludCkoZGF0YWxlbik7IGkrKykgewkJXAotCQkJCXByaW50aygiJTJ4ICIsIHBkYXRhW2ldKTsJCVwKLQkJCQlpZiAoKGkrMSklMTYgPT0gMCkgXAotCQkJCQlwcmludGsoIlxuIik7CVwKLQkJCX0JXAotCQkJcHJpbnRrKCJcbiIpOwkJCVwKLQkJfQkJCQkJXAotCX0gd2hpbGUgKDApCi0jZWxzZQotI2RlZmluZSBJRUVFODAyMTFfREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUgKDApCi0jZGVmaW5lIElFRUU4MDIxMV9ERUJVR19EQVRBKGxldmVsLCBkYXRhLCBkYXRhbGVuKSBkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgkvKiBDT05GSUdfSUVFRTgwMjExX0RFQlVHICovCi0KLS8qIGRlYnVnIG1hY3JvcyBub3QgZGVwZW5kZW50IG9uIENPTkZJR19JRUVFODAyMTFfREVCVUcgKi8KLQotLyoKLSAqIFRvIHVzZSB0aGUgZGVidWcgc3lzdGVtOwotICoKLSAqIElmIHlvdSBhcmUgZGVmaW5pbmcgYSBuZXcgZGVidWcgY2xhc3NpZmljYXRpb24sIHNpbXBseSBhZGQgaXQgdG8gdGhlICNkZWZpbmUKLSAqIGxpc3QgaGVyZSBpbiB0aGUgZm9ybSBvZjoKLSAqCi0gKiAjZGVmaW5lIElFRUU4MDIxMV9ETF94eHh4IFZBTFVFCi0gKgotICogc2hpZnRpbmcgdmFsdWUgdG8gdGhlIGxlZnQgb25lIGJpdCBmcm9tIHRoZSBwcmV2aW91cyBlbnRyeS4gIHh4eHggc2hvdWxkIGJlCi0gKiB0aGUgbmFtZSBvZiB0aGUgY2xhc3NpZmljYXRpb24gKGZvciBleGFtcGxlLCBXRVApCi0gKgotICogWW91IHRoZW4gbmVlZCB0byBlaXRoZXIgYWRkIGEgSUVFRTgwMjExX3h4eHhfREVCVUcoKSBtYWNybyBkZWZpbml0aW9uIGZvciB5b3VyCi0gKiBjbGFzc2lmaWNhdGlvbiwgb3IgdXNlIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfeHh4eCwgLi4uKSB3aGVuZXZlciB5b3Ugd2FudAotICogdG8gc2VuZCBvdXRwdXQgdG8gdGhhdCBjbGFzc2lmaWNhdGlvbi4KLSAqCi0gKiBUbyBhZGQgeW91ciBkZWJ1ZyBsZXZlbCB0byB0aGUgbGlzdCBvZiBsZXZlbHMgc2VlbiB3aGVuIHlvdSBwZXJmb3JtCi0gKgotICogJSBjYXQgL3Byb2MvbmV0L2lwdy9kZWJ1Z19sZXZlbAotICoKLSAqIHlvdSBzaW1wbHkgbmVlZCB0byBhZGQgeW91ciBlbnRyeSB0byB0aGUgaXB3X2RlYnVnX2xldmVscyBhcnJheS4KLSAqCi0gKiBJZiB5b3UgZG8gbm90IHNlZSBkZWJ1Z19sZXZlbCBpbiAvcHJvYy9uZXQvaXB3IHRoZW4geW91IGRvIG5vdCBoYXZlCi0gKiBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGRlZmluZWQgaW4geW91ciBrZXJuZWwgY29uZmlndXJhdGlvbgotICoKLSAqLwotCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9JTkZPICAgICAgICAgICgxPDwwKQotI2RlZmluZSBJRUVFODAyMTFfRExfV1ggICAgICAgICAgICAoMTw8MSkKLSNkZWZpbmUgSUVFRTgwMjExX0RMX1NDQU4gICAgICAgICAgKDE8PDIpCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9TVEFURSAgICAgICAgICgxPDwzKQotI2RlZmluZSBJRUVFODAyMTFfRExfTUdNVCAgICAgICAgICAoMTw8NCkKLSNkZWZpbmUgSUVFRTgwMjExX0RMX0ZSQUcgICAgICAgICAgKDE8PDUpCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9FQVAgICAgICAgICAgICgxPDw2KQotI2RlZmluZSBJRUVFODAyMTFfRExfRFJPUCAgICAgICAgICAoMTw8NykKLQotI2RlZmluZSBJRUVFODAyMTFfRExfVFggICAgICAgICAgICAoMTw8OCkKLSNkZWZpbmUgSUVFRTgwMjExX0RMX1JYICAgICAgICAgICAgKDE8PDkpCi0KLSNkZWZpbmUgSUVFRTgwMjExX0RMX0hUCQkgICAoMTw8MTApICAvKiBIVCAqLwotI2RlZmluZSBJRUVFODAyMTFfRExfQkEJCSAgICgxPDwxMSkgIC8qIGJhICovCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9UUwkJICAgKDE8PDEyKSAgLyogVFMgKi8KLSNkZWZpbmUgSUVFRTgwMjExX0RMX1FPUyAgICAgICAgICAgKDE8PDEzKQotI2RlZmluZSBJRUVFODAyMTFfRExfUkVPUkRFUgkgICAoMTw8MTQpCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9JT1QJICAgKDE8PDE1KQotI2RlZmluZSBJRUVFODAyMTFfRExfSVBTCSAgICgxPDwxNikKLSNkZWZpbmUgSUVFRTgwMjExX0RMX1RSQUNFCSAgICgxPDwyOSkgIC8qIHRyYWNlIGZ1bmN0aW9uLCBuZWVkIHRvIHVzZXIgbmV0X3JhdGVsaW1pdCgpIHRvZ2V0aGVyIGluIG9yZGVyIG5vdCB0byBwcmludCB0b28gbXVjaCB0byB0aGUgc2NyZWVuICovCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9EQVRBCSAgICgxPDwzMCkgICAvKiB1c2UgdGhpcyBmbGFnIHRvIGNvbnRyb2wgd2hldGhlciBwcmludCBkYXRhIGJ1ZiBvdXQuICovCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9FUlIJICAgKDE8PDMxKSAgIC8qIGFsd2F5cyBvcGVuICovCi0jZGVmaW5lIElFRUU4MDIxMV9FUlJPUihmLCBhLi4uKSBwcmludGsoS0VSTl9FUlIgImllZWU4MDIxMTogIiBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfV0FSTklORyhmLCBhLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HICJpZWVlODAyMTE6ICIgZiwgIyMgYSkKLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX0lORk8oZiwgYS4uLikgICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0lORk8sIGYsICMjIGEpCi0KLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX1dYKGYsIGEuLi4pICAgICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1dYLCBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfU0NBTihmLCBhLi4uKSAgIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfU0NBTiwgZiwgIyMgYSkKLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX1NUQVRFKGYsIGEuLi4pICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1NUQVRFLCBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfTUdNVChmLCBhLi4uKSAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9NR01ULCBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfRlJBRyhmLCBhLi4uKSAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9GUkFHLCBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfRUFQKGYsIGEuLi4pICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VBUCwgZiwgIyMgYSkKLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX0RST1AoZiwgYS4uLikgIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRFJPUCwgZiwgIyMgYSkKLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX1RYKGYsIGEuLi4pICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1RYLCBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfUlgoZiwgYS4uLikgIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfUlgsIGYsICMjIGEpCi0jZGVmaW5lIElFRUU4MDIxMV9ERUJVR19RT1MoZiwgYS4uLikgIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfUU9TLCBmLCAjIyBhKQotCi0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRwotLyogQWRkZWQgYnkgQW5uaWUsIDIwMDUtMTEtMjIuICovCi0jZGVmaW5lIE1BWF9TVFJfTEVOICAgICA2NAotLyogSSB3YW50IHRvIHNlZSBBU0NJSSAzMyB0byAxMjYgb25seS4gT3RoZXJ3aXNlLCBJIHByaW50ICc/Jy4gQW5uaWUsIDIwMDUtMTEtMjIuKi8KLSNkZWZpbmUgUFJJTlRBQkxFKF9jaCkgIChfY2ggPiAnIScgJiYgX2NoIDwgJ34nKQotI2RlZmluZSBJRUVFODAyMTFfUFJJTlRfU1RSKF9Db21wLCBfVGl0bGVTdHJpbmcsIF9QdHIsIF9MZW4pICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCi0JCQlpZiAoKF9Db21wKSAmIGxldmVsKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQkJaW50ICAgICAgICAgICAgIF9faTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCQl1OCAgYnVmZmVyW01BWF9TVFJfTEVOXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAotCQkJCWludCBsZW5ndGggPSAoX0xlbiA8IE1BWF9TVFJfTEVOKSA/IF9MZW4gOiAoTUFYX1NUUl9MRU4gLSAxKTsgIAlcCi0JCQkJbWVtc2V0KGJ1ZmZlciwgMCwgTUFYX1NUUl9MRU4pOyAgICAgICAgICAgICAgICAgICAgICAJCVwKLQkJCQltZW1jcHkoYnVmZmVyLCAodTggKilfUHRyLCBsZW5ndGgpOyAgICAgICAgICAgIAkJXAotCQkJCWZvciAoX19pID0gMDsgX19pIDwgTUFYX1NUUl9MRU47IF9faSsrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJCSAgICAgaWYgKCFQUklOVEFCTEUoYnVmZmVyW19faV0pKSAgIFwKLQkJCQkJCWJ1ZmZlcltfX2ldID0gJz8nOyAgICAgCVwKLQkJCQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJCWJ1ZmZlcltsZW5ndGhdID0gJ1wwJzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQkJcHJpbnRrKCJSdGw4MTl4OiAiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCi0JCQkJcHJpbnRrKF9UaXRsZVN0cmluZyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQkJcHJpbnRrKCI6ICVkLCA8JXM+XG4iLCBfTGVuLCBidWZmZXIpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQl9Ci0jZWxzZQotI2RlZmluZSBJRUVFODAyMTFfUFJJTlRfU1RSKF9Db21wLCBfVGl0bGVTdHJpbmcsIF9QdHIsIF9MZW4pICBkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+IC8qIEFSUEhSRF9FVEhFUiAqLwotCi0jaWZuZGVmIFdJUkVMRVNTX1NQWQotI2RlZmluZSBXSVJFTEVTU19TUFkJCS8qIGVuYWJsZSBpd3NweSBzdXBwb3J0ICovCi0jZW5kaWYKLSNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgkvKiBuZXcgZHJpdmVyIEFQSSAqLwotCi0jaWZuZGVmIEVUSF9QX1BBRQotI2RlZmluZSBFVEhfUF9QQUUgMHg4ODhFIC8qIFBvcnQgQWNjZXNzIEVudGl0eSAoSUVFRSA4MDIuMVgpICovCi0jZW5kaWYgLyogRVRIX1BfUEFFICovCi0KLSNkZWZpbmUgRVRIX1BfUFJFQVVUSCAweDg4QzcgLyogSUVFRSA4MDIuMTFpIHByZS1hdXRoZW50aWNhdGlvbiAqLwotCi0jaWZuZGVmIEVUSF9QXzgwMjExX1JBVwotI2RlZmluZSBFVEhfUF84MDIxMV9SQVcgKEVUSF9QX0VDT05FVCArIDEpCi0jZW5kaWYKLQotLyogSUVFRSA4MDIuMTEgZGVmaW5lcyAqLwotCi0jZGVmaW5lIFA4MDIxMV9PVUlfTEVOIDMKLQotc3RydWN0IGllZWU4MDIxMV9zbmFwX2hkciB7Ci0KLQl1OCAgICBkc2FwOyAgIC8qIGFsd2F5cyAweEFBICovCi0JdTggICAgc3NhcDsgICAvKiBhbHdheXMgMHhBQSAqLwotCXU4ICAgIGN0cmw7ICAgLyogYWx3YXlzIDB4MDMgKi8KLQl1OCAgICBvdWlbUDgwMjExX09VSV9MRU5dOyAgICAvKiBvcmdhbml6YXRpb25hbCB1bml2ZXJzYWwgaWQgKi8KLQotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLSNkZWZpbmUgU05BUF9TSVpFIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3NuYXBfaGRyKQotCi0jZGVmaW5lIFdMQU5fRkNfR0VUX1ZFUlMoZmMpICgoZmMpICYgSUVFRTgwMjExX0ZDVExfVkVSUykKLSNkZWZpbmUgV0xBTl9GQ19HRVRfVFlQRShmYykgKChmYykgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkKLSNkZWZpbmUgV0xBTl9GQ19HRVRfU1RZUEUoZmMpICgoZmMpICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpCi0KLSNkZWZpbmUgV0xBTl9GQ19HRVRfRlJBTUVUWVBFKGZjKSAoKGZjKSAmIElFRUU4MDIxMV9GQ1RMX0ZSQU1FVFlQRSkKLSNkZWZpbmUgV0xBTl9HRVRfU0VRX0ZSQUcoc2VxKSAoKHNlcSkgJiBJRUVFODAyMTFfU0NUTF9GUkFHKQotI2RlZmluZSBXTEFOX0dFVF9TRVFfU0VRKHNlcSkgICgoKHNlcSkgJiBJRUVFODAyMTFfU0NUTF9TRVEpID4+IDQpCi0KLS8qIEF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobXMgKi8KLSNkZWZpbmUgV0xBTl9BVVRIX09QRU4gMAotI2RlZmluZSBXTEFOX0FVVEhfU0hBUkVEX0tFWSAxCi0jZGVmaW5lIFdMQU5fQVVUSF9MRUFQIDIKLQotI2RlZmluZSBXTEFOX0FVVEhfQ0hBTExFTkdFX0xFTiAxMjgKLQotI2RlZmluZSBXTEFOX0NBUEFCSUxJVFlfQlNTICgxPDwwKQotI2RlZmluZSBXTEFOX0NBUEFCSUxJVFlfSUJTUyAoMTw8MSkKLSNkZWZpbmUgV0xBTl9DQVBBQklMSVRZX0NGX1BPTExBQkxFICgxPDwyKQotI2RlZmluZSBXTEFOX0NBUEFCSUxJVFlfQ0ZfUE9MTF9SRVFVRVNUICgxPDwzKQotI2RlZmluZSBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSAoMTw8NCkKLSNkZWZpbmUgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFICgxPDw1KQotI2RlZmluZSBXTEFOX0NBUEFCSUxJVFlfUEJDQyAoMTw8NikKLSNkZWZpbmUgV0xBTl9DQVBBQklMSVRZX0NIQU5ORUxfQUdJTElUWSAoMTw8NykKLSNkZWZpbmUgV0xBTl9DQVBBQklMSVRZX1NQRUNUUlVNX01HTVQgKDE8PDgpCi0jZGVmaW5lIFdMQU5fQ0FQQUJJTElUWV9RT1MgKDE8PDkpCi0jZGVmaW5lIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9TTE9UICgxPDwxMCkKLSNkZWZpbmUgV0xBTl9DQVBBQklMSVRZX0RTU1NfT0ZETSAoMTw8MTMpCi0KLS8qIDgwMi4xMWcgRVJQIGluZm9ybWF0aW9uIGVsZW1lbnQgKi8KLSNkZWZpbmUgV0xBTl9FUlBfTk9OX0VSUF9QUkVTRU5UICgxPDwwKQotI2RlZmluZSBXTEFOX0VSUF9VU0VfUFJPVEVDVElPTiAoMTw8MSkKLSNkZWZpbmUgV0xBTl9FUlBfQkFSS0VSX1BSRUFNQkxFICgxPDwyKQotCi0vKiBTdGF0dXMgY29kZXMgKi8KLWVudW0gaWVlZTgwMjExX3N0YXR1c2NvZGUgewotCVdMQU5fU1RBVFVTX1NVQ0NFU1MgPSAwLAotCVdMQU5fU1RBVFVTX1VOU1BFQ0lGSUVEX0ZBSUxVUkUgPSAxLAotCVdMQU5fU1RBVFVTX0NBUFNfVU5TVVBQT1JURUQgPSAxMCwKLQlXTEFOX1NUQVRVU19SRUFTU09DX05PX0FTU09DID0gMTEsCi0JV0xBTl9TVEFUVVNfQVNTT0NfREVOSUVEX1VOU1BFQyA9IDEyLAotCVdMQU5fU1RBVFVTX05PVF9TVVBQT1JURURfQVVUSF9BTEcgPSAxMywKLQlXTEFOX1NUQVRVU19VTktOT1dOX0FVVEhfVFJBTlNBQ1RJT04gPSAxNCwKLQlXTEFOX1NUQVRVU19DSEFMTEVOR0VfRkFJTCA9IDE1LAotCVdMQU5fU1RBVFVTX0FVVEhfVElNRU9VVCA9IDE2LAotCVdMQU5fU1RBVFVTX0FQX1VOQUJMRV9UT19IQU5ETEVfTkVXX1NUQSA9IDE3LAotCVdMQU5fU1RBVFVTX0FTU09DX0RFTklFRF9SQVRFUyA9IDE4LAotCS8qIDgwMi4xMWIgKi8KLQlXTEFOX1NUQVRVU19BU1NPQ19ERU5JRURfTk9TSE9SVFBSRUFNQkxFID0gMTksCi0JV0xBTl9TVEFUVVNfQVNTT0NfREVOSUVEX05PUEJDQyA9IDIwLAotCVdMQU5fU1RBVFVTX0FTU09DX0RFTklFRF9OT0FHSUxJVFkgPSAyMSwKLQkvKiA4MDIuMTFoICovCi0JV0xBTl9TVEFUVVNfQVNTT0NfREVOSUVEX05PU1BFQ1RSVU0gPSAyMiwKLQlXTEFOX1NUQVRVU19BU1NPQ19SRUpFQ1RFRF9CQURfUE9XRVIgPSAyMywKLQlXTEFOX1NUQVRVU19BU1NPQ19SRUpFQ1RFRF9CQURfU1VQUF9DSEFOID0gMjQsCi0JLyogODAyLjExZyAqLwotCVdMQU5fU1RBVFVTX0FTU09DX0RFTklFRF9OT1NIT1JUVElNRSA9IDI1LAotCVdMQU5fU1RBVFVTX0FTU09DX0RFTklFRF9OT0RTU1NPRkRNID0gMjYsCi0JLyogODAyLjExaSAqLwotCVdMQU5fU1RBVFVTX0lOVkFMSURfSUUgPSA0MCwKLQlXTEFOX1NUQVRVU19JTlZBTElEX0dST1VQX0NJUEhFUiA9IDQxLAotCVdMQU5fU1RBVFVTX0lOVkFMSURfUEFJUldJU0VfQ0lQSEVSID0gNDIsCi0JV0xBTl9TVEFUVVNfSU5WQUxJRF9BS01QID0gNDMsCi0JV0xBTl9TVEFUVVNfVU5TVVBQX1JTTl9WRVJTSU9OID0gNDQsCi0JV0xBTl9TVEFUVVNfSU5WQUxJRF9SU05fSUVfQ0FQID0gNDUsCi0JV0xBTl9TVEFUVVNfQ0lQSEVSX1NVSVRFX1JFSkVDVEVEID0gNDYsCi19OwotCi0vKiBSZWFzb24gY29kZXMgKi8KLWVudW0gaWVlZTgwMjExX3JlYXNvbmNvZGUgewotCVdMQU5fUkVBU09OX1VOU1BFQ0lGSUVEID0gMSwKLQlXTEFOX1JFQVNPTl9QUkVWX0FVVEhfTk9UX1ZBTElEID0gMiwKLQlXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORyA9IDMsCi0JV0xBTl9SRUFTT05fRElTQVNTT0NfRFVFX1RPX0lOQUNUSVZJVFkgPSA0LAotCVdMQU5fUkVBU09OX0RJU0FTU09DX0FQX0JVU1kgPSA1LAotCVdMQU5fUkVBU09OX0NMQVNTMl9GUkFNRV9GUk9NX05PTkFVVEhfU1RBID0gNiwKLQlXTEFOX1JFQVNPTl9DTEFTUzNfRlJBTUVfRlJPTV9OT05BU1NPQ19TVEEgPSA3LAotCVdMQU5fUkVBU09OX0RJU0FTU09DX1NUQV9IQVNfTEVGVCA9IDgsCi0JV0xBTl9SRUFTT05fU1RBX1JFUV9BU1NPQ19XSVRIT1VUX0FVVEggPSA5LAotCS8qIDgwMi4xMWggKi8KLQlXTEFOX1JFQVNPTl9ESVNBU1NPQ19CQURfUE9XRVIgPSAxMCwKLQlXTEFOX1JFQVNPTl9ESVNBU1NPQ19CQURfU1VQUF9DSEFOID0gMTEsCi0JLyogODAyLjExaSAqLwotCVdMQU5fUkVBU09OX0lOVkFMSURfSUUgPSAxMywKLQlXTEFOX1JFQVNPTl9NSUNfRkFJTFVSRSA9IDE0LAotCVdMQU5fUkVBU09OXzRXQVlfSEFORFNIQUtFX1RJTUVPVVQgPSAxNSwKLQlXTEFOX1JFQVNPTl9HUk9VUF9LRVlfSEFORFNIQUtFX1RJTUVPVVQgPSAxNiwKLQlXTEFOX1JFQVNPTl9JRV9ESUZGRVJFTlQgPSAxNywKLQlXTEFOX1JFQVNPTl9JTlZBTElEX0dST1VQX0NJUEhFUiA9IDE4LAotCVdMQU5fUkVBU09OX0lOVkFMSURfUEFJUldJU0VfQ0lQSEVSID0gMTksCi0JV0xBTl9SRUFTT05fSU5WQUxJRF9BS01QID0gMjAsCi0JV0xBTl9SRUFTT05fVU5TVVBQX1JTTl9WRVJTSU9OID0gMjEsCi0JV0xBTl9SRUFTT05fSU5WQUxJRF9SU05fSUVfQ0FQID0gMjIsCi0JV0xBTl9SRUFTT05fSUVFRTgwMjFYX0ZBSUxFRCA9IDIzLAotCVdMQU5fUkVBU09OX0NJUEhFUl9TVUlURV9SRUpFQ1RFRCA9IDI0LAotfTsKLQotI2RlZmluZSBJRUVFODAyMTFfU1RBVE1BU0tfU0lHTkFMICgxPDwwKQotI2RlZmluZSBJRUVFODAyMTFfU1RBVE1BU0tfUlNTSSAoMTw8MSkKLSNkZWZpbmUgSUVFRTgwMjExX1NUQVRNQVNLX05PSVNFICgxPDwyKQotI2RlZmluZSBJRUVFODAyMTFfU1RBVE1BU0tfUkFURSAoMTw8MykKLSNkZWZpbmUgSUVFRTgwMjExX1NUQVRNQVNLX1dFTUFTSyAweDcKLQotI2RlZmluZSBJRUVFODAyMTFfQ0NLX01PRFVMQVRJT04gICAgKDE8PDApCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT04gICAoMTw8MSkKLQotI2RlZmluZSBJRUVFODAyMTFfMjRHSFpfQkFORCAgICAgKDE8PDApCi0jZGVmaW5lIElFRUU4MDIxMV81MkdIWl9CQU5EICAgICAoMTw8MSkKLQotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfTEVOICAJCTQKLSNkZWZpbmUgSUVFRTgwMjExX0NDS19SQVRFXzFNQgkJCTB4MDIKLSNkZWZpbmUgSUVFRTgwMjExX0NDS19SQVRFXzJNQgkJCTB4MDQKLSNkZWZpbmUgSUVFRTgwMjExX0NDS19SQVRFXzVNQgkJCTB4MEIKLSNkZWZpbmUgSUVFRTgwMjExX0NDS19SQVRFXzExTUIJCQkweDE2Ci0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfTEVOIAkJOAotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzZNQgkJCTB4MEMKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV85TUIJCQkweDEyCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQgkJMHgxOAotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUIJCTB4MjQKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV8yNE1CCQkweDMwCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQgkJMHg0OAotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUIJCTB4NjAKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV81NE1CCQkweDZDCi0jZGVmaW5lIElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0sJCTB4ODAKLQotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfMU1CX01BU0sJCSgxPDwwKQotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfMk1CX01BU0sJCSgxPDwxKQotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfNU1CX01BU0sJCSgxPDwyKQotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfMTFNQl9NQVNLCQkoMTw8MykKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV82TUJfTUFTSwkJKDE8PDQpCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfOU1CX01BU0sJCSgxPDw1KQotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzEyTUJfTUFTSwkJKDE8PDYpCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfMThNQl9NQVNLCQkoMTw8NykKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV8yNE1CX01BU0sJCSgxPDw4KQotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzM2TUJfTUFTSwkJKDE8PDkpCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQl9NQVNLCQkoMTw8MTApCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQl9NQVNLCQkoMTw8MTEpCi0KLSNkZWZpbmUgSUVFRTgwMjExX0NDS19SQVRFU19NQVNLCQkweDAwMDAwMDBGCi0jZGVmaW5lIElFRUU4MDIxMV9DQ0tfQkFTSUNfUkFURVNfTUFTSwkoSUVFRTgwMjExX0NDS19SQVRFXzFNQl9NQVNLIHwgXAotCUlFRUU4MDIxMV9DQ0tfUkFURV8yTUJfTUFTSykKLSNkZWZpbmUgSUVFRTgwMjExX0NDS19ERUZBVUxUX1JBVEVTX01BU0sJKElFRUU4MDIxMV9DQ0tfQkFTSUNfUkFURVNfTUFTSyB8IFwKLQlJRUVFODAyMTFfQ0NLX1JBVEVfNU1CX01BU0sgfCBcCi0JSUVFRTgwMjExX0NDS19SQVRFXzExTUJfTUFTSykKLQotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFU19NQVNLCQkweDAwMDAwRkYwCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX0JBU0lDX1JBVEVTX01BU0sJKElFRUU4MDIxMV9PRkRNX1JBVEVfNk1CX01BU0sgfCBcCi0JSUVFRTgwMjExX09GRE1fUkFURV8xMk1CX01BU0sgfCBcCi0JSUVFRTgwMjExX09GRE1fUkFURV8yNE1CX01BU0spCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX0RFRkFVTFRfUkFURVNfTUFTSwkoSUVFRTgwMjExX09GRE1fQkFTSUNfUkFURVNfTUFTSyB8IFwKLQlJRUVFODAyMTFfT0ZETV9SQVRFXzlNQl9NQVNLICB8IFwKLQlJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUJfTUFTSyB8IFwKLQlJRUVFODAyMTFfT0ZETV9SQVRFXzM2TUJfTUFTSyB8IFwKLQlJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUJfTUFTSyB8IFwKLQlJRUVFODAyMTFfT0ZETV9SQVRFXzU0TUJfTUFTSykKLSNkZWZpbmUgSUVFRTgwMjExX0RFRkFVTFRfUkFURVNfTUFTSyAoSUVFRTgwMjExX09GRE1fREVGQVVMVF9SQVRFU19NQVNLIHwgXAotCQkJCUlFRUU4MDIxMV9DQ0tfREVGQVVMVF9SQVRFU19NQVNLKQotCi0jZGVmaW5lIElFRUU4MDIxMV9OVU1fT0ZETV9SQVRFUwkgICAgOAotI2RlZmluZSBJRUVFODAyMTFfTlVNX0NDS19SQVRFUwkJICAgIDQKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fU0hJRlRfTUFTS19BICAgICAgICAgNAotCi0KLS8qIHRoaXMgaXMgc3RvbGVuIGFuZCBtb2RpZmllZCBmcm9tIHRoZSBtYWR3aWZpIGRyaXZlciovCi0jZGVmaW5lIElFRUU4MDIxMV9GQzBfVFlQRV9NQVNLCQkweDBjCi0jZGVmaW5lIElFRUU4MDIxMV9GQzBfVFlQRV9EQVRBCQkweDA4Ci0jZGVmaW5lIElFRUU4MDIxMV9GQzBfU1VCVFlQRV9NQVNLCTB4QjAKLSNkZWZpbmUgSUVFRTgwMjExX0ZDMF9TVUJUWVBFX1FPUwkweDgwCi0KLSNkZWZpbmUgSUVFRTgwMjExX1FPU19IQVNfU0VRKGZjKSBcCi0JKCgoZmMpICYgKElFRUU4MDIxMV9GQzBfVFlQRV9NQVNLIHwgSUVFRTgwMjExX0ZDMF9TVUJUWVBFX01BU0spKSA9PSBcCi0JIChJRUVFODAyMTFfRkMwX1RZUEVfREFUQSB8IElFRUU4MDIxMV9GQzBfU1VCVFlQRV9RT1MpKQotCi0vKiB0aGlzIGlzIHN0b2xlbiBmcm9tIGlwdzIyMDAgZHJpdmVyICovCi0jZGVmaW5lIElFRUVfSUJTU19NQUNfSEFTSF9TSVpFIDMxCi1zdHJ1Y3QgaWVlZV9pYnNzX3NlcSB7Ci0JdTggbWFjW0VUSF9BTEVOXTsKLQl1MTYgc2VxX251bVsxN107Ci0JdTE2IGZyYWdfbnVtWzE3XTsKLQl1bnNpZ25lZCBsb25nIHBhY2tldF90aW1lWzE3XTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci19OwotCi0vKiBOT1RFOiBUaGlzIGRhdGEgaXMgZm9yIHN0YXRpc3RpY2FsIHB1cnBvc2VzOyBub3QgYWxsIGhhcmR3YXJlIHByb3ZpZGVzIHRoaXMKLSAqICAgICAgIGluZm9ybWF0aW9uIGZvciBmcmFtZXMgcmVjZWl2ZWQuICBOb3Qgc2V0dGluZyB0aGVzZSB3aWxsIG5vdCBjYXVzZQotICogICAgICAgYW55IGFkdmVyc2UgYWZmZWN0cy4gKi8KLXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgewotCXUzMiBtYWNfdGltZVsyXTsKLQlzOCByc3NpOwotCXU4IHNpZ25hbDsKLQl1OCBub2lzZTsKLQl1MTYgcmF0ZTsgLyogaW4gMTAwIGticHMgKi8KLQl1OCByZWNlaXZlZF9jaGFubmVsOwotCXU4IGNvbnRyb2w7Ci0JdTggbWFzazsKLQl1OCBmcmVxOwotCXUxNiBsZW47Ci0JdTY0IHRzZjsKLQl1MzIgYmVhY29uX3RpbWU7Ci0JdTggbmljX3R5cGU7Ci0JdTE2ICAgICAgIExlbmd0aDsKLQl1OCAgICAgICAgU2lnbmFsUXVhbGl0eTsgLyogaW4gMC0xMDAgaW5kZXguICovCi0JczMyICAgICAgIFJlY3ZTaWduYWxQb3dlcjsgLyogUmVhbCBwb3dlciBpbiBkQm0gZm9yIHRoaXMgcGFja2V0LCBubyBiZWF1dGlmaWNhdGlvbiBhbmQgYWdncmVnYXRpb24uICovCi0JczggICAgICAgIFJ4UG93ZXI7IC8qIGluIGRCbSBUcmFuc2xhdGUgZnJvbSBQV2RCICovCi0JdTggICAgICAgIFNpZ25hbFN0cmVuZ3RoOyAvKiBpbiAwLTEwMCBpbmRleC4gKi8KLQl1MTYgICAgICAgYkh3RXJyb3I6MTsKLQl1MTYgICAgICAgYkNSQzoxOwotCXUxNiAgICAgICBiSUNWOjE7Ci0JdTE2ICAgICAgIGJTaG9ydFByZWFtYmxlOjE7Ci0JdTE2ICAgICAgIEFudGVubmE6MTsgICAgICAvKiBmb3IgcnRsODE4NSAqLwotCXUxNiAgICAgICBEZWNyeXB0ZWQ6MTsgICAgLyogZm9yIHJ0bDgxODUsIHJ0bDgxODcgKi8KLQl1MTYgICAgICAgV2FrZXVwOjE7ICAgICAgIC8qIGZvciBydGw4MTg1ICovCi0JdTE2ICAgICAgIFJlc2VydmVkMDoxOyAgICAvKiBmb3IgcnRsODE4NSAqLwotCXU4ICAgICAgICBBR0M7Ci0JdTMyICAgICAgIFRpbWVTdGFtcExvdzsKLQl1MzIgICAgICAgVGltZVN0YW1wSGlnaDsKLQlib29sICAgICAgYlNoaWZ0OwotCWJvb2wgICAgICBiSXNRb3NEYXRhOwotCXU4ICAgICAgICBVc2VyUHJpb3JpdHk7Ci0KLQkvKgotCSAqIDFBdHRlbnRpb24gUGxlYXNlISEhPDExbiBvciA4MTkwIHNwZWNpZmljIGNvZGUgc2hvdWxkIGJlIHB1dCBiZWxvdyB0aGlzIGxpbmU+Ci0JICovCi0KLQl1OCAgICAgICAgUnhEcnZJbmZvU2l6ZTsKLQl1OCAgICAgICAgUnhCdWZTaGlmdDsKLQlib29sICAgICAgYklzQU1QRFU7Ci0JYm9vbCAgICAgIGJGaXJzdE1QRFU7Ci0JYm9vbCAgICAgIGJDb250YWluSFRDOwotCWJvb2wgICAgICBSeElzNDBNSHpQYWNrZXQ7Ci0JdTMyICAgICAgIFJ4UFdEQkFsbDsKLQl1OCAgICAgICAgUnhNSU1PU2lnbmFsU3RyZW5ndGhbNF07ICAgICAgICAvKiBpbiAwfjEwMCBpbmRleCAqLwotCXM4ICAgICAgICBSeE1JTU9TaWduYWxRdWFsaXR5WzJdOwotCWJvb2wgICAgICBiUGFja2V0TWF0Y2hCU1NJRDsKLQlib29sICAgICAgYklzQ0NLOwotCWJvb2wgICAgICBiUGFja2V0VG9TZWxmOwotCXU4CSp2aXJ0dWFsX2FkZHJlc3M7Ci0JdTE2ICAgICAgICAgIHBhY2tldGxlbmd0aDsgICAgICAgICAgICAgIC8qIFRvdGFsIHBhY2tldCBsZW5ndGg6IE11c3QgZXF1YWwgdG8gc3VtIG9mIGFsbCBGcmFnTGVuZ3RoICovCi0JdTE2ICAgICAgICAgIGZyYWdsZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRnJhZ0xlbmd0aCBzaG91bGQgZXF1YWwgdG8gUGFja2V0TGVuZ3RoIGluIG5vbi1mcmFnbWVudCBjYXNlICovCi0JdTE2ICAgICAgICAgIGZyYWdvZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRGF0YSBvZmZzZXQgZm9yIHRoaXMgZnJhZ21lbnQgKi8KLQl1MTYgICAgICAgICAgbnRvdGFsZnJhZzsKLQlib29sICAgICAgCSAgYmlzcnhhZ2dyc3ViZnJhbWU7Ci0JYm9vbAkJICBiUGFja2V0QmVhY29uOwkvKiBjb3NhIGFkZCBmb3IgcnNzaSAqLwotCWJvb2wJCSAgYlRvU2VsZkJBOwkJLyogY29zYSBhZGQgZm9yIHJzc2kgKi8KLQljaGFyIAkgIGNja19hZGNfcHdkYls0XTsJLyogY29zYSBhZGQgZm9yIHJ4IHBhdGggc2VsZWN0aW9uICovCi0JdTE2CQkgIFNlcV9OdW07Ci0KLX07Ci0KLS8qIElFRUUgODAyLjExIHJlcXVpcmVzIHRoYXQgU1RBIHN1cHBvcnRzIGNvbmN1cnJlbnQgcmVjZXB0aW9uIG9mIGF0IGxlYXN0Ci0gKiB0aHJlZSBmcmFnbWVudGVkIGZyYW1lcy4gVGhpcyBkZWZpbmUgY2FuIGJlIGluY3JlYXNlZCB0byBzdXBwb3J0IG1vcmUKLSAqIGNvbmN1cnJlbnQgZnJhbWVzLCBidXQgaXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgZWFjaCBlbnRyeSBjYW4gY29uc3VtZSBhYm91dAotICogMiBrQiBvZiBSQU0gYW5kIGluY3JlYXNpbmcgY2FjaGUgc2l6ZSB3aWxsIHNsb3cgZG93biBmcmFtZSByZWFzc2VtYmx5LiAqLwotI2RlZmluZSBJRUVFODAyMTFfRlJBR19DQUNIRV9MRU4gNAotCi1zdHJ1Y3QgaWVlZTgwMjExX2ZyYWdfZW50cnkgewotCXVuc2lnbmVkIGxvbmcgZmlyc3RfZnJhZ190aW1lOwotCXVuc2lnbmVkIGludCBzZXE7Ci0JdW5zaWduZWQgaW50IGxhc3RfZnJhZzsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXU4IHNyY19hZGRyW0VUSF9BTEVOXTsKLQl1OCBkc3RfYWRkcltFVEhfQUxFTl07Ci19OwotCi1zdHJ1Y3QgaWVlZTgwMjExX3N0YXRzIHsKLQl1bnNpZ25lZCBpbnQgdHhfdW5pY2FzdF9mcmFtZXM7Ci0JdW5zaWduZWQgaW50IHR4X211bHRpY2FzdF9mcmFtZXM7Ci0JdW5zaWduZWQgaW50IHR4X2ZyYWdtZW50czsKLQl1bnNpZ25lZCBpbnQgdHhfdW5pY2FzdF9vY3RldHM7Ci0JdW5zaWduZWQgaW50IHR4X211bHRpY2FzdF9vY3RldHM7Ci0JdW5zaWduZWQgaW50IHR4X2RlZmVycmVkX3RyYW5zbWlzc2lvbnM7Ci0JdW5zaWduZWQgaW50IHR4X3NpbmdsZV9yZXRyeV9mcmFtZXM7Ci0JdW5zaWduZWQgaW50IHR4X211bHRpcGxlX3JldHJ5X2ZyYW1lczsKLQl1bnNpZ25lZCBpbnQgdHhfcmV0cnlfbGltaXRfZXhjZWVkZWQ7Ci0JdW5zaWduZWQgaW50IHR4X2Rpc2NhcmRzOwotCXVuc2lnbmVkIGludCByeF91bmljYXN0X2ZyYW1lczsKLQl1bnNpZ25lZCBpbnQgcnhfbXVsdGljYXN0X2ZyYW1lczsKLQl1bnNpZ25lZCBpbnQgcnhfZnJhZ21lbnRzOwotCXVuc2lnbmVkIGludCByeF91bmljYXN0X29jdGV0czsKLQl1bnNpZ25lZCBpbnQgcnhfbXVsdGljYXN0X29jdGV0czsKLQl1bnNpZ25lZCBpbnQgcnhfZmNzX2Vycm9yczsKLQl1bnNpZ25lZCBpbnQgcnhfZGlzY2FyZHNfbm9fYnVmZmVyOwotCXVuc2lnbmVkIGludCB0eF9kaXNjYXJkc193cm9uZ19zYTsKLQl1bnNpZ25lZCBpbnQgcnhfZGlzY2FyZHNfdW5kZWNyeXB0YWJsZTsKLQl1bnNpZ25lZCBpbnQgcnhfbWVzc2FnZV9pbl9tc2dfZnJhZ21lbnRzOwotCXVuc2lnbmVkIGludCByeF9tZXNzYWdlX2luX2JhZF9tc2dfZnJhZ21lbnRzOwotfTsKLQotc3RydWN0IGllZWU4MDIxMV9kZXZpY2U7Ci0KLSNpbmNsdWRlICJpZWVlODAyMTFfY3J5cHQuaCIKLQotI2RlZmluZSBTRUNfS0VZXzEgICAgICAgICAoMTw8MCkKLSNkZWZpbmUgU0VDX0tFWV8yICAgICAgICAgKDE8PDEpCi0jZGVmaW5lIFNFQ19LRVlfMyAgICAgICAgICgxPDwyKQotI2RlZmluZSBTRUNfS0VZXzQgICAgICAgICAoMTw8MykKLSNkZWZpbmUgU0VDX0FDVElWRV9LRVkgICAgKDE8PDQpCi0jZGVmaW5lIFNFQ19BVVRIX01PREUgICAgICgxPDw1KQotI2RlZmluZSBTRUNfVU5JQ0FTVF9HUk9VUCAoMTw8NikKLSNkZWZpbmUgU0VDX0xFVkVMICAgICAgICAgKDE8PDcpCi0jZGVmaW5lIFNFQ19FTkFCTEVEICAgICAgICgxPDw4KQotI2RlZmluZSBTRUNfRU5DUllQVCAgICAgICAoMTw8OSkKLQotI2RlZmluZSBTRUNfTEVWRUxfMCAgICAgIDAgLyogTm9uZSAqLwotI2RlZmluZSBTRUNfTEVWRUxfMSAgICAgIDEgLyogV0VQIDQwIGFuZCAxMDQgYml0ICovCi0jZGVmaW5lIFNFQ19MRVZFTF8yICAgICAgMiAvKiBMZXZlbCAxICsgVEtJUCAqLwotI2RlZmluZSBTRUNfTEVWRUxfMl9DS0lQIDMgLyogTGV2ZWwgMSArIENLSVAgKi8KLSNkZWZpbmUgU0VDX0xFVkVMXzMgICAgICA0IC8qIExldmVsIDIgKyBDQ01QICovCi0KLSNkZWZpbmUgU0VDX0FMR19OT05FICAgICAgICAgICAgMAotI2RlZmluZSBTRUNfQUxHX1dFUCAgICAgICAgICAgICAxCi0jZGVmaW5lIFNFQ19BTEdfVEtJUCAgICAgICAgICAgIDIKLSNkZWZpbmUgU0VDX0FMR19DQ01QICAgICAgICAgICAgMwotCi0jZGVmaW5lIFdFUF9LRVlTIAkJNAotI2RlZmluZSBXRVBfS0VZX0xFTgkJMTMKLSNkZWZpbmUgU0NNX0tFWV9MRU4gICAgICAgICAgICAgMzIKLSNkZWZpbmUgU0NNX1RFTVBPUkFMX0tFWV9MRU5HVEggMTYKLQotc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSB7Ci0JdTE2IGFjdGl2ZV9rZXk6MiwKLQkgICAgZW5hYmxlZDoxLAotCSAgICBhdXRoX21vZGU6MiwKLQkgICAgYXV0aF9hbGdvOjQsCi0JICAgIHVuaWNhc3RfdXNlc19ncm91cDoxLAotCSAgICBlbmNyeXB0OjE7Ci0JdTgga2V5X3NpemVzW1dFUF9LRVlTXTsKLQl1OCBrZXlzW1dFUF9LRVlTXVtTQ01fS0VZX0xFTl07Ci0JdTggbGV2ZWw7Ci0JdTE2IGZsYWdzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLQotLyoKLSA4MDIuMTEgZGF0YSBmcmFtZSBmcm9tIEFQCi0gICAgICAsLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLUJ5dGVzIHwgIDIgICB8ICAyICAgfCAgICA2ICAgIHwgICAgNiAgICB8ICAgIDYgICAgfCAgMiAgIHwgMC4uMjMxMiB8ICAgNCAgfAotICAgICAgfC0tLS0tLXwtLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tfC0tLS0tLS0tLXwtLS0tLS18Ci1EZXNjLiB8IGN0cmwgfCBkdXJhIHwgIERBL1JBICB8ICAgVEEgICAgfCAgICBTQSAgIHwgU2VxdSB8ICBmcmFtZSAgfCAgZmNzIHwKLSAgICAgIHwgICAgICB8IHRpb24gfCAoQlNTSUQpIHwgICAgICAgICB8ICAgICAgICAgfCBlbmNlIHwgIGRhdGEgICB8ICAgICAgfAotICAgICAgYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nCi1Ub3RhbDogMjgtMjM0MCBieXRlcwotKi8KLQotLyogTWFuYWdlbWVudCBGcmFtZSBJbmZvcm1hdGlvbiBFbGVtZW50IFR5cGVzICovCi1lbnVtIGllZWU4MDIxMV9tZmllIHsKLQlNRklFX1RZUEVfU1NJRCA9IDAsCi0JTUZJRV9UWVBFX1JBVEVTID0gMSwKLQlNRklFX1RZUEVfRkhfU0VUID0gMiwKLQlNRklFX1RZUEVfRFNfU0VUID0gMywKLQlNRklFX1RZUEVfQ0ZfU0VUID0gNCwKLQlNRklFX1RZUEVfVElNID0gNSwKLQlNRklFX1RZUEVfSUJTU19TRVQgPSA2LAotCU1GSUVfVFlQRV9DT1VOVFJZID0gNywKLQlNRklFX1RZUEVfSE9QX1BBUkFNUyA9IDgsCi0JTUZJRV9UWVBFX0hPUF9UQUJMRSA9IDksCi0JTUZJRV9UWVBFX1JFUVVFU1QgPSAxMCwKLQlNRklFX1RZUEVfQ0hBTExFTkdFID0gMTYsCi0JTUZJRV9UWVBFX1BPV0VSX0NPTlNUUkFJTlQgPSAzMiwKLQlNRklFX1RZUEVfUE9XRVJfQ0FQQUJJTElUWSA9IDMzLAotCU1GSUVfVFlQRV9UUENfUkVRVUVTVCA9IDM0LAotCU1GSUVfVFlQRV9UUENfUkVQT1JUID0gMzUsCi0JTUZJRV9UWVBFX1NVUFBfQ0hBTk5FTFMgPSAzNiwKLQlNRklFX1RZUEVfQ1NBID0gMzcsCi0JTUZJRV9UWVBFX01FQVNVUkVfUkVRVUVTVCA9IDM4LAotCU1GSUVfVFlQRV9NRUFTVVJFX1JFUE9SVCA9IDM5LAotCU1GSUVfVFlQRV9RVUlFVCA9IDQwLAotCU1GSUVfVFlQRV9JQlNTX0RGUyA9IDQxLAotCU1GSUVfVFlQRV9FUlAgPSA0MiwKLQlNRklFX1RZUEVfUlNOID0gNDgsCi0JTUZJRV9UWVBFX1JBVEVTX0VYID0gNTAsCi0JTUZJRV9UWVBFX0hUX0NBUCA9IDQ1LAotCU1GSUVfVFlQRV9IVF9JTkZPID0gNjEsCi0JTUZJRV9UWVBFX0FJUk9ORVQgPSAxMzMsCi0JTUZJRV9UWVBFX0dFTkVSSUMgPSAyMjEsCi0JTUZJRV9UWVBFX1FPU19QQVJBTUVURVIgPSAyMjIsCi19OwotCi0vKiBNaW5pbWFsIGhlYWRlcjsgY2FuIGJlIHVzZWQgZm9yIHBhc3NpbmcgODAyLjExIGZyYW1lcyB3aXRoIHN1ZmZpY2llbnQKLSAqIGluZm9ybWF0aW9uIHRvIGRldGVybWluZSB3aGF0IHR5cGUgb2YgdW5kZXJseWluZyBkYXRhIHR5cGUgaXMgYWN0dWFsbHkKLSAqIHN0b3JlZCBpbiB0aGUgZGF0YS4gKi8KLXN0cnVjdCBpZWVlODAyMTFfaGRyIHsKLQlfX2xlMTYgZnJhbWVfY3RsOwotCV9fbGUxNiBkdXJhdGlvbl9pZDsKLQl1OCBwYXlsb2FkWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfaGRyXzFhZGRyIHsKLQlfX2xlMTYgZnJhbWVfY3RsOwotCV9fbGUxNiBkdXJhdGlvbl9pZDsKLQl1OCBhZGRyMVtFVEhfQUxFTl07Ci0JdTggcGF5bG9hZFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX2hkcl8yYWRkciB7Ci0JX19sZTE2IGZyYW1lX2N0bDsKLQlfX2xlMTYgZHVyYXRpb25faWQ7Ci0JdTggYWRkcjFbRVRIX0FMRU5dOwotCXU4IGFkZHIyW0VUSF9BTEVOXTsKLQl1OCBwYXlsb2FkWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIHsKLQlfX2xlMTYgZnJhbWVfY3RsOwotCV9fbGUxNiBkdXJhdGlvbl9pZDsKLQl1OCBhZGRyMVtFVEhfQUxFTl07Ci0JdTggYWRkcjJbRVRIX0FMRU5dOwotCXU4IGFkZHIzW0VUSF9BTEVOXTsKLQlfX2xlMTYgc2VxX2N0bDsKLQl1OCBwYXlsb2FkWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyIHsKLQlfX2xlMTYgZnJhbWVfY3RsOwotCV9fbGUxNiBkdXJhdGlvbl9pZDsKLQl1OCBhZGRyMVtFVEhfQUxFTl07Ci0JdTggYWRkcjJbRVRIX0FMRU5dOwotCXU4IGFkZHIzW0VUSF9BTEVOXTsKLQlfX2xlMTYgc2VxX2N0bDsKLQl1OCBhZGRyNFtFVEhfQUxFTl07Ci0JdTggcGF5bG9hZFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcnFvcyB7Ci0JX19sZTE2IGZyYW1lX2N0bDsKLQlfX2xlMTYgZHVyYXRpb25faWQ7Ci0JdTggYWRkcjFbRVRIX0FMRU5dOwotCXU4IGFkZHIyW0VUSF9BTEVOXTsKLQl1OCBhZGRyM1tFVEhfQUxFTl07Ci0JX19sZTE2IHNlcV9jdGw7Ci0JdTggcGF5bG9hZFswXTsKLQlfX2xlMTYgcW9zX2N0bDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkcnFvcyB7Ci0JX19sZTE2IGZyYW1lX2N0bDsKLQlfX2xlMTYgZHVyYXRpb25faWQ7Ci0JdTggYWRkcjFbRVRIX0FMRU5dOwotCXU4IGFkZHIyW0VUSF9BTEVOXTsKLQl1OCBhZGRyM1tFVEhfQUxFTl07Ci0JX19sZTE2IHNlcV9jdGw7Ci0JdTggYWRkcjRbRVRIX0FMRU5dOwotCXU4IHBheWxvYWRbMF07Ci0JX19sZTE2IHFvc19jdGw7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgewotCXU4IGlkOwotCXU4IGxlbjsKLQl1OCBkYXRhWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfYXV0aGVudGljYXRpb24gewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKLQlfX2xlMTYgYWxnb3JpdGhtOwotCV9fbGUxNiB0cmFuc2FjdGlvbjsKLQlfX2xlMTYgc3RhdHVzOwotCS8qY2hhbGxlbmdlKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9kaXNhc3NvYyB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgaGVhZGVyOwotCV9fbGUxNiByZWFzb247Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9wcm9iZV9yZXF1ZXN0IHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciBoZWFkZXI7Ci0JLyogU1NJRCwgc3VwcG9ydGVkIHJhdGVzICovCi0Jc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfcHJvYmVfcmVzcG9uc2UgewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKLQl1MzIgdGltZV9zdGFtcFsyXTsKLQlfX2xlMTYgYmVhY29uX2ludGVydmFsOwotCV9fbGUxNiBjYXBhYmlsaXR5OwotCS8qIFNTSUQsIHN1cHBvcnRlZCByYXRlcywgRkggcGFyYW1zLCBEUyBwYXJhbXMsCi0JICogQ0YgcGFyYW1zLCBJQlNTIHBhcmFtcywgVElNIChpZiBiZWFjb24pLCBSU04gKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogQWxpYXMgYmVhY29uIGZvciBwcm9iZV9yZXNwb25zZSAqLwotI2RlZmluZSBpZWVlODAyMTFfYmVhY29uIGllZWU4MDIxMV9wcm9iZV9yZXNwb25zZQotCi1zdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3JlcXVlc3RfZnJhbWUgewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKLQlfX2xlMTYgY2FwYWJpbGl0eTsKLQlfX2xlMTYgbGlzdGVuX2ludGVydmFsOwotCS8qIFNTSUQsIHN1cHBvcnRlZCByYXRlcywgUlNOICovCi0Jc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfcmVhc3NvY19yZXF1ZXN0X2ZyYW1lIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciBoZWFkZXI7Ci0JX19sZTE2IGNhcGFiaWxpdHk7Ci0JX19sZTE2IGxpc3Rlbl9pbnRlcnZhbDsKLQl1OCBjdXJyZW50X2FwW0VUSF9BTEVOXTsKLQkvKiBTU0lELCBzdXBwb3J0ZWQgcmF0ZXMsIFJTTiAqLwotCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3Jlc3BvbnNlX2ZyYW1lIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciBoZWFkZXI7Ci0JX19sZTE2IGNhcGFiaWxpdHk7Ci0JX19sZTE2IHN0YXR1czsKLQlfX2xlMTYgYWlkOwotCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsgLyogc3VwcG9ydGVkIHJhdGVzICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV90eGIgewotCXU4IG5yX2ZyYWdzOwotCXU4IGVuY3J5cHRlZDsKLQl1OCBxdWV1ZV9pbmRleDsKLQl1OCBydHNfaW5jbHVkZWQ7Ci0JdTE2IHJlc2VydmVkOwotCV9fbGUxNiBmcmFnX3NpemU7Ci0JX19sZTE2IHBheWxvYWRfc2l6ZTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqZnJhZ21lbnRzWzBdOwotfTsKLQotI2RlZmluZSBNQVhfVFhfQUdHX0NPVU5UCQkgIDE2Ci1zdHJ1Y3QgaWVlZTgwMjExX2Rydl9hZ2dfdHhiIHsKLQl1OCBucl9kcnZfYWdnX2ZyYW1lczsKLQlzdHJ1Y3Qgc2tfYnVmZiAqdHhfYWdnX2ZyYW1lc1tNQVhfVFhfQUdHX0NPVU5UXTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLSNkZWZpbmUgTUFYX1NVQkZSQU1FX0NPVU5UIAkJICA2NAotc3RydWN0IGllZWU4MDIxMV9yeGIgewotCXU4IG5yX3N1YmZyYW1lczsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc3ViZnJhbWVzW01BWF9TVUJGUkFNRV9DT1VOVF07Ci0JdTggZHN0W0VUSF9BTEVOXTsKLQl1OCBzcmNbRVRIX0FMRU5dOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotdHlwZWRlZiB1bmlvbiBfZnJhbWVxb3MgewotCXUxNiBzaG9ydGRhdGE7Ci0JdTggIGNoYXJkYXRhWzJdOwotCXN0cnVjdCB7Ci0JCXUxNiB0aWQ6NDsKLQkJdTE2IGVvc3A6MTsKLQkJdTE2IGFja19wb2xpY3k6MjsKLQkJdTE2IHJlc2VydmVkOjE7Ci0JCXUxNiB0eG9wOjg7Ci0JfSBmaWVsZDsKLX0gZnJhbWVxb3MsICpwZnJhbWVxb3M7Ci0KLS8qIFNXRUVQIFRBQkxFIEVOVFJJRVMgTlVNQkVSKi8KLSNkZWZpbmUgTUFYX1NXRUVQX1RBQl9FTlRSSUVTCQkgIDQyCi0jZGVmaW5lIE1BWF9TV0VFUF9UQUJfRU5UUklFU19QRVJfUEFDS0VUICA3Ci0vKiBNQVhfUkFURVNfTEVOR1RIIG5lZWRzIHRvIGJlIDEyLiAgVGhlIHNwZWMgc2F5cyA4LCBhbmQgbWFueSBBUHMKLSAqIG9ubHkgdXNlIDgsIGFuZCB0aGVuIHVzZSBleHRlbmRlZCByYXRlcyBmb3IgdGhlIHJlbWFpbmluZyBzdXBwb3J0ZWQKLSAqIHJhdGVzLiAgT3RoZXIgQVBzLCBob3dldmVyLCBzdGljayBhbGwgb2YgdGhlaXIgc3VwcG9ydGVkIHJhdGVzIG9uIHRoZQotICogbWFpbiByYXRlcyBpbmZvcm1hdGlvbiBlbGVtZW50Li4uICovCi0jZGVmaW5lIE1BWF9SQVRFU19MRU5HVEggICAgICAgICAgICAgICAgICAoKHU4KTEyKQotI2RlZmluZSBNQVhfUkFURVNfRVhfTEVOR1RIICAgICAgICAgICAgICAgKCh1OCkxNikKLSNkZWZpbmUgTUFYX05FVFdPUktfQ09VTlQgICAgICAgICAgICAgICAgICAxMjgKLQotI2RlZmluZSBNQVhfQ0hBTk5FTF9OVU1CRVIgICAgICAgICAgICAgICAgIDE2MQotI2RlZmluZSBJRUVFODAyMTFfU09GVE1BQ19TQ0FOX1RJTUUJICAgMTAwCi0vKiAoSFogLyAyKSAqLwotI2RlZmluZSBJRUVFODAyMTFfU09GVE1BQ19BU1NPQ19SRVRSWV9USU1FIChIWiAqIDIpCi0KLSNkZWZpbmUgQ1JDX0xFTkdUSCAgICAgICAgICAgICAgICAgNFUKLQotI2RlZmluZSBNQVhfV1BBX0lFX0xFTiA2NAotCi0jZGVmaW5lIE5FVFdPUktfRU1QVFlfRVNTSUQgKDE8PDApCi0jZGVmaW5lIE5FVFdPUktfSEFTX09GRE0gICAgKDE8PDEpCi0jZGVmaW5lIE5FVFdPUktfSEFTX0NDSyAgICAgKDE8PDIpCi0KLS8qIFFvUyBzdHJ1Y3R1cmUgKi8KLSNkZWZpbmUgTkVUV09SS19IQVNfUU9TX1BBUkFNRVRFUlMgICAgICAoMTw8MykKLSNkZWZpbmUgTkVUV09SS19IQVNfUU9TX0lORk9STUFUSU9OICAgICAoMTw8NCkKLSNkZWZpbmUgTkVUV09SS19IQVNfUU9TX01BU0sgICAgICAgICAgICAoTkVUV09SS19IQVNfUU9TX1BBUkFNRVRFUlMgfCBcCi0JCQkJCSBORVRXT1JLX0hBU19RT1NfSU5GT1JNQVRJT04pCi0vKiA4MDIuMTFoICovCi0jZGVmaW5lIE5FVFdPUktfSEFTX1BPV0VSX0NPTlNUUkFJTlQgICAgKDE8PDUpCi0jZGVmaW5lIE5FVFdPUktfSEFTX0NTQSAgICAgICAgICAgICAgICAgKDE8PDYpCi0jZGVmaW5lIE5FVFdPUktfSEFTX1FVSUVUICAgICAgICAgICAgICAgKDE8PDcpCi0jZGVmaW5lIE5FVFdPUktfSEFTX0lCU1NfREZTICAgICAgICAgICAgKDE8PDgpCi0jZGVmaW5lIE5FVFdPUktfSEFTX1RQQ19SRVBPUlQgICAgICAgICAgKDE8PDkpCi0KLSNkZWZpbmUgTkVUV09SS19IQVNfRVJQX1ZBTFVFICAgICAgICAgICAoMTw8MTApCi0KLSNkZWZpbmUgUU9TX1FVRVVFX05VTSAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFFPU19PVUlfTEVOICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBRT1NfT1VJX1RZUEUgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUU9TX0VMRU1FTlRfSUQgICAgICAgICAgICAgICAgICAyMjEKLSNkZWZpbmUgUU9TX09VSV9JTkZPX1NVQl9UWVBFICAgICAgICAgICAwCi0jZGVmaW5lIFFPU19PVUlfUEFSQU1fU1VCX1RZUEUgICAgICAgICAgMQotI2RlZmluZSBRT1NfVkVSU0lPTl8xICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUU9TX0FJRlNOX01JTl9WQUxVRSAgICAgICAgICAgICAyCi1zdHJ1Y3QgaWVlZTgwMjExX3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50IHsKLQl1OCBlbGVtZW50SUQ7Ci0JdTggbGVuZ3RoOwotCXU4IHF1aVtRT1NfT1VJX0xFTl07Ci0JdTggcXVpX3R5cGU7Ci0JdTggcXVpX3N1YnR5cGU7Ci0JdTggdmVyc2lvbjsKLQl1OCBhY19pbmZvOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfcW9zX2FjX3BhcmFtZXRlciB7Ci0JdTggYWNpX2FpZnNuOwotCXU4IGVjd19taW5fbWF4OwotCV9fbGUxNiB0eF9vcF9saW1pdDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJfaW5mbyB7Ci0Jc3RydWN0IGllZWU4MDIxMV9xb3NfaW5mb3JtYXRpb25fZWxlbWVudCBpbmZvX2VsZW1lbnQ7Ci0JdTggcmVzZXJ2ZWQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9xb3NfYWNfcGFyYW1ldGVyIGFjX3BhcmFtc19yZWNvcmRbUU9TX1FVRVVFX05VTV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycyB7Ci0JX19sZTE2IGN3X21pbltRT1NfUVVFVUVfTlVNXTsKLQlfX2xlMTYgY3dfbWF4W1FPU19RVUVVRV9OVU1dOwotCXU4IGFpZnNbUU9TX1FVRVVFX05VTV07Ci0JdTggZmxhZ1tRT1NfUVVFVUVfTlVNXTsKLQlfX2xlMTYgdHhfb3BfbGltaXRbUU9TX1FVRVVFX05VTV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9xb3NfZGF0YSB7Ci0Jc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotCWludCBhY3RpdmU7Ci0JaW50IHN1cHBvcnRlZDsKLQl1OCBwYXJhbV9jb3VudDsKLQl1OCBvbGRfcGFyYW1fY291bnQ7Ci19OwotCi1zdHJ1Y3QgaWVlZTgwMjExX3RpbV9wYXJhbWV0ZXJzIHsKLQl1OCB0aW1fY291bnQ7Ci0JdTggdGltX3BlcmlvZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX3dtbV9hY19wYXJhbSB7Ci0JdTggYWNfYWNpX2FjbV9haWZzbjsKLQl1OCBhY19lY3dtaW5fZWN3bWF4OwotCXUxNiBhY190eG9wX2xpbWl0OwotfTsKLQotc3RydWN0IGllZWU4MDIxMV93bW1fdHNfaW5mbyB7Ci0JdTggYWNfZGlyX3RpZDsKLQl1OCBhY191cF9wc2I7Ci0JdTggcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV93bW1fdHNwZWNfZWxlbSB7Ci0Jc3RydWN0IGllZWU4MDIxMV93bW1fdHNfaW5mbyB0c19pbmZvOwotCXUxNiBub3JtX21zZHVfc2l6ZTsKLQl1MTYgbWF4X21zZHVfc2l6ZTsKLQl1MzIgbWluX3NlcnZfaW50ZXI7Ci0JdTMyIG1heF9zZXJ2X2ludGVyOwotCXUzMiBpbmFjdF9pbnRlcjsKLQl1MzIgc3VzcGVuX2ludGVyOwotCXUzMiBzZXJ2X3N0YXJ0X3RpbWU7Ci0JdTMyIG1pbl9kYXRhX3JhdGU7Ci0JdTMyIG1lYW5fZGF0YV9yYXRlOwotCXUzMiBwZWFrX2RhdGFfcmF0ZTsKLQl1MzIgbWF4X2J1cnN0X3NpemU7Ci0JdTMyIGRlbGF5X2JvdW5kOwotCXUzMiBtaW5fcGh5X3JhdGU7Ci0JdTE2IHN1cnBfYmFuZF9hbGxvdzsKLQl1MTYgbWVkaXVtX3RpbWU7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotZW51bSBlYXBfdHlwZSB7Ci0JRUFQX1BBQ0tFVCA9IDAsCi0JRUFQT0xfU1RBUlQsCi0JRUFQT0xfTE9HT0ZGLAotCUVBUE9MX0tFWSwKLQlFQVBPTF9FTkNBUF9BU0ZfQUxFUlQKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICplYXBfdHlwZXNbXSA9IHsKLQlbRUFQX1BBQ0tFVF0JCT0gIkVBUC1QYWNrZXQiLAotCVtFQVBPTF9TVEFSVF0JCT0gIkVBUE9MLVN0YXJ0IiwKLQlbRUFQT0xfTE9HT0ZGXQkJPSAiRUFQT0wtTG9nb2ZmIiwKLQlbRUFQT0xfS0VZXQkJPSAiRUFQT0wtS2V5IiwKLQlbRUFQT0xfRU5DQVBfQVNGX0FMRVJUXQk9ICJFQVBPTC1FbmNhcC1BU0YtQWxlcnQiCi19OwotCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmVhcF9nZXRfdHlwZShpbnQgdHlwZSkKLXsKLQlyZXR1cm4gKCh1MzIpdHlwZSA+PSBBUlJBWV9TSVpFKGVhcF90eXBlcykpID8gIlVua25vd24iIDogZWFwX3R5cGVzW3R5cGVdOwotfQotc3RhdGljIGlubGluZSB1OCBGcmFtZV9Rb1NUSUQodTggKmJ1ZikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqaGRyOwotCXUxNiBmYzsKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKilidWY7Ci0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7Ci0JcmV0dXJuICh1OCkoKGZyYW1lcW9zICopKGJ1ZiArICgoKGZjICYgSUVFRTgwMjExX0ZDVExfVE9EUykgJiYgKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKSkgPyAzMCA6IDI0KSkpLT5maWVsZC50aWQ7Ci19Ci0KLQotc3RydWN0IGVhcG9sIHsKLQl1OCBzbmFwWzZdOwotCXUxNiBldGhlcnR5cGU7Ci0JdTggdmVyc2lvbjsKLQl1OCB0eXBlOwotCXUxNiBsZW5ndGg7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9zb2Z0bWFjX3N0YXRzewotCXVuc2lnbmVkIGludCByeF9hc3Nfb2s7Ci0JdW5zaWduZWQgaW50IHJ4X2Fzc19lcnI7Ci0JdW5zaWduZWQgaW50IHJ4X3Byb2JlX3JxOwotCXVuc2lnbmVkIGludCB0eF9wcm9iZV9yczsKLQl1bnNpZ25lZCBpbnQgdHhfYmVhY29uczsKLQl1bnNpZ25lZCBpbnQgcnhfYXV0aF9ycTsKLQl1bnNpZ25lZCBpbnQgcnhfYXV0aF9yc19vazsKLQl1bnNpZ25lZCBpbnQgcnhfYXV0aF9yc19lcnI7Ci0JdW5zaWduZWQgaW50IHR4X2F1dGhfcnE7Ci0JdW5zaWduZWQgaW50IG5vX2F1dGhfcnM7Ci0JdW5zaWduZWQgaW50IG5vX2Fzc19yczsKLQl1bnNpZ25lZCBpbnQgdHhfYXNzX3JxOwotCXVuc2lnbmVkIGludCByeF9hc3NfcnE7Ci0JdW5zaWduZWQgaW50IHR4X3Byb2JlX3JxOwotCXVuc2lnbmVkIGludCByZWFzc29jOwotCXVuc2lnbmVkIGludCBzd3R4c3RvcDsKLQl1bnNpZ25lZCBpbnQgc3d0eGF3YWtlOwotCXVuc2lnbmVkIGNoYXIgQ3VycmVudFNob3dUeGF0ZTsKLQl1bnNpZ25lZCBjaGFyIGxhc3RfcGFja2V0X3JhdGU7Ci0JdW5zaWduZWQgaW50IHR4cmV0cnljb3VudDsKLX07Ci0KLSNkZWZpbmUgQkVBQ09OX1BST0JFX1NTSURfSURfUE9TSVRJT04gMTIKLQotc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnRfaGRyIHsKLQl1OCBpZDsKLQl1OCBsZW47Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFRoZXNlIGFyZSB0aGUgZGF0YSB0eXBlcyB0aGF0IGNhbiBtYWtlIHVwIG1hbmFnZW1lbnQgcGFja2V0cwotICoKLQl1MTYgYXV0aF9hbGdvcml0aG07Ci0JdTE2IGF1dGhfc2VxdWVuY2U7Ci0JdTE2IGJlYWNvbl9pbnRlcnZhbDsKLQl1MTYgY2FwYWJpbGl0eTsKLQl1OCBjdXJyZW50X2FwW0VUSF9BTEVOXTsKLQl1MTYgbGlzdGVuX2ludGVydmFsOwotCXN0cnVjdCB7Ci0JCXUxNiBhc3NvY2lhdGlvbl9pZDoxNCwgcmVzZXJ2ZWQ6MjsKLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQl1MzIgdGltZV9zdGFtcFsyXTsKLQl1MTYgcmVhc29uOwotCXUxNiBzdGF0dXM7Ci0qLwotCi0jZGVmaW5lIElFRUU4MDIxMV9ERUZBVUxUX1RYX0VTU0lEICJQZW5ndWluIgotI2RlZmluZSBJRUVFODAyMTFfREVGQVVMVF9CQVNJQ19SQVRFIDIgLyogMU1icHMgKi8KLQotZW51bSB7V01NX2FsbF9mcmFtZSwgV01NX3R3b19mcmFtZSwgV01NX2ZvdXJfZnJhbWUsIFdNTV9zaXhfZnJhbWV9OwotI2RlZmluZSBNQVhfU1BfTGVuICAoV01NX2FsbF9mcmFtZSA8PCA0KQotI2RlZmluZSBJRUVFODAyMTFfUU9TX1RJRCAweDBmCi0jZGVmaW5lIFFPU19DVExfTk9UQ09OVEFJTl9BQ0sgKDB4MDEgPDwgNSkKLQotI2RlZmluZSBJRUVFODAyMTFfRFRJTV9NQkNBU1QgNAotI2RlZmluZSBJRUVFODAyMTFfRFRJTV9VQ0FTVCAyCi0jZGVmaW5lIElFRUU4MDIxMV9EVElNX1ZBTElEIDEKLSNkZWZpbmUgSUVFRTgwMjExX0RUSU1fSU5WQUxJRCAwCi0KLSNkZWZpbmUgSUVFRTgwMjExX1BTX0RJU0FCTEVEIDAKLSNkZWZpbmUgSUVFRTgwMjExX1BTX1VOSUNBU1QgSUVFRTgwMjExX0RUSU1fVUNBU1QKLSNkZWZpbmUgSUVFRTgwMjExX1BTX01CQ0FTVCBJRUVFODAyMTFfRFRJTV9NQkNBU1QKLQotCi0jaWZkZWYgV01NX0hhbmdfODE4NwotI3VuZGVmIFdNTV9IYW5nXzgxODcKLSNlbmRpZgotCi0jZGVmaW5lIFdNRV9BQ19CSyAgIDB4MDAKLSNkZWZpbmUgV01FX0FDX0JFICAgMHgwMQotI2RlZmluZSBXTUVfQUNfVkkgICAweDAyCi0jZGVmaW5lIFdNRV9BQ19WTyAgIDB4MDMKLSNkZWZpbmUgV01FX0FDSV9NQVNLIDB4MDMKLSNkZWZpbmUgV01FX0FJRlNOX01BU0sgMHgwMwotI2RlZmluZSBXTUVfQUNfUFJBTV9MRU4gMTYKLQotI2RlZmluZSBNQVhfUkVDRUlWRV9CVUZGRVJfU0laRSA5MTAwCi0KLS8qIFVQIE1hcHBpbmcgdG8gQUMsIHVzaW5nIGluIE1nbnRRdWVyeV9TZXF1ZW5jZU51bWJlcigpIGFuZCBtYXliZSBmb3IgRFNDUCAqLwotI2RlZmluZSBVUDJBQyh1cCkgKAkJICAgXAotCSgodXApIDwgMSkgPyBXTUVfQUNfQkUgOiBcCi0JKCh1cCkgPCAzKSA/IFdNRV9BQ19CSyA6IFwKLQkoKHVwKSA8IDQpID8gV01FX0FDX0JFIDogXAotCSgodXApIDwgNikgPyBXTUVfQUNfVkkgOiBcCi0JV01FX0FDX1ZPKQotLyogQUMgTWFwcGluZyB0byBVUCwgdXNpbmcgaW4gVHggcGFydCBmb3Igc2VsZWN0aW5nIHRoZSBjb3JyZXNwb25kaW5nIFRYIHF1ZXVlICovCi0jZGVmaW5lIEFDMlVQKF9hYykJKCAgICAgICBcCi0JKChfYWMpID09IFdNRV9BQ19WTykgPyA2IDogXAotCSgoX2FjKSA9PSBXTUVfQUNfVkkpID8gNSA6IFwKLQkoKF9hYykgPT0gV01FX0FDX0JLKSA/IDEgOiBcCi0JMCkKLQotI2RlZmluZQlFVEhFUl9BRERSX0xFTgkJNgkvKiBsZW5ndGggb2YgYW4gRXRoZXJuZXQgYWRkcmVzcyAqLwotI2RlZmluZSBFVEhFUk5FVF9IRUFERVJfU0laRSAgICAxNCAgICAgIC8qIGxlbmd0aCBvZiB0d28gRXRoZXJuZXQgYWRkcmVzcyBwbHVzIGV0aGVyIHR5cGUqLwotCi1zdHJ1Y3QJZXRoZXJfaGVhZGVyIHsKLQl1OCBldGhlcl9kaG9zdFtFVEhFUl9BRERSX0xFTl07Ci0JdTggZXRoZXJfc2hvc3RbRVRIRVJfQUREUl9MRU5dOwotCXUxNiBldGhlcl90eXBlOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotI2lmbmRlZiBFVEhFUlRZUEVfUEFFCi0jZGVmaW5lCUVUSEVSVFlQRV9QQUUJMHg4ODhlCQkvKiBFQVBPTCBQQUUvODAyLjF4ICovCi0jZW5kaWYKLSNpZm5kZWYgRVRIRVJUWVBFX0lQCi0jZGVmaW5lCUVUSEVSVFlQRV9JUAkweDA4MDAJCS8qIElQIHByb3RvY29sICovCi0jZW5kaWYKLQotdHlwZWRlZiBzdHJ1Y3QgX2Jzc19odHsKLQotCWJvb2wJCQkJc3VwcG9ydF9odDsKLQotCS8qIEhUIHJlbGF0ZWQgZWxlbWVudHMgKi8KLQl1OAkJCQkJaHRfY2FwX2J1ZlszMl07Ci0JdTE2CQkJCQlodF9jYXBfbGVuOwotCXU4CQkJCQlodF9pbmZvX2J1ZlszMl07Ci0JdTE2CQkJCQlodF9pbmZvX2xlbjsKLQotCUhUX1NQRUNfVkVSCQkJaHRfc3BlY192ZXI7Ci0JLyogSFRfQ0FQQUJJTElUWV9FTEUJCQliZEhUQ2FwRWxlOyAqLwotCS8qIEhUX0lORk9STUFUSU9OX0VMRQkJYmRIVEluZm9FbGU7ICovCi0KLQlib29sCQkJCWFnZ3JlZ2F0aW9uOwotCWJvb2wJCQkJbG9uZ19zbG90X3RpbWU7Ci19IGJzc19odCwgKnBic3NfaHQ7Ci0KLXR5cGVkZWYgZW51bSBfZXJwX3R7Ci0JRVJQX05vbkVSUHByZXNlbnQJPSAweDAxLAotCUVSUF9Vc2VQcm90ZWN0aW9uCT0gMHgwMiwKLQlFUlBfQmFya2VyUHJlYW1ibGVNb2RlID0gMHgwNCwKLX0gZXJwX3Q7Ci0KLQotc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrIHsKLQkvKiBUaGVzZSBlbnRyaWVzIGFyZSB1c2VkIHRvIGlkZW50aWZ5IGEgdW5pcXVlIG5ldHdvcmsgKi8KLQl1OCBic3NpZFtFVEhfQUxFTl07Ci0JdTggY2hhbm5lbDsKLQkvKiBFbnN1cmUgbnVsbC10ZXJtaW5hdGVkIGZvciBhbnkgZGVidWcgbXNncyAqLwotCXU4IHNzaWRbSVdfRVNTSURfTUFYX1NJWkUgKyAxXTsKLQl1OCBzc2lkX2xlbjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19kYXRhIHFvc19kYXRhOwotCWJvb2wJYldpdGhBaXJvbmV0SUU7Ci0JYm9vbAliQ2tpcFN1cHBvcnRlZDsKLQlib29sCWJDY3hSbUVuYWJsZTsKLQl1MTYgCUNjeFJtU3RhdGVbMl07Ci0JLyogQ0NYdjQgUzU5LCBNQlNTSUQuICovCi0JYm9vbAliTUJzc2lkVmFsaWQ7Ci0JdTgJTUJzc2lkTWFzazsKLQl1OAlNQnNzaWRbNl07Ci0JLyogQ0NYIDIgUzM4LCBXTEFOIERldmljZSBWZXJzaW9uIE51bWJlciBlbGVtZW50LiAqLwotCWJvb2wJYldpdGhDY3hWZXJOdW07Ci0JdTgJQnNzQ2N4VmVyTnVtYmVyOwotCS8qIFRoZXNlIGFyZSBuZXR3b3JrIHN0YXRpc3RpY3MgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzIHN0YXRzOwotCXUxNiBjYXBhYmlsaXR5OwotCXU4ICByYXRlc1tNQVhfUkFURVNfTEVOR1RIXTsKLQl1OCAgcmF0ZXNfbGVuOwotCXU4ICByYXRlc19leFtNQVhfUkFURVNfRVhfTEVOR1RIXTsKLQl1OCAgcmF0ZXNfZXhfbGVuOwotCXVuc2lnbmVkIGxvbmcgbGFzdF9zY2FubmVkOwotCXU4ICBtb2RlOwotCXUzMiBmbGFnczsKLQl1MzIgbGFzdF9hc3NvY2lhdGU7Ci0JdTMyIHRpbWVfc3RhbXBbMl07Ci0JdTE2IGJlYWNvbl9pbnRlcnZhbDsKLQl1MTYgbGlzdGVuX2ludGVydmFsOwotCXUxNiBhdGltX3dpbmRvdzsKLQl1OCAgZXJwX3ZhbHVlOwotCXU4ICB3cGFfaWVbTUFYX1dQQV9JRV9MRU5dOwotCXNpemVfdCB3cGFfaWVfbGVuOwotCXU4ICByc25faWVbTUFYX1dQQV9JRV9MRU5dOwotCXNpemVfdCByc25faWVfbGVuOwotCi0Jc3RydWN0IGllZWU4MDIxMV90aW1fcGFyYW1ldGVycyB0aW07Ci0JdTggIGR0aW1fcGVyaW9kOwotCXU4ICBkdGltX2RhdGE7Ci0JdTMyIGxhc3RfZHRpbV9zdGFfdGltZVsyXTsKLQotCS8qIGFwcGVkZWQgZm9yIFFvUyAqLwotCXU4IHdtbV9pbmZvOwotCXN0cnVjdCBpZWVlODAyMTFfd21tX2FjX3BhcmFtIHdtbV9wYXJhbVs0XTsKLQl1OCBRb1NfRW5hYmxlOwotI2lmZGVmIFRIT01BU19UVVJCTwotCXU4IFR1cmJvX0VuYWJsZTsvKiBlbmFibGUgdHVyYm8gbW9kZSwgYWRkZWQgYnkgdGhvbWFzICovCi0jZW5kaWYKLSNpZmRlZiBFTkFCTEVfRE9UMTFECi0JdTE2IENvdW50cnlJZUxlbjsKLQl1OCBDb3VudHJ5SWVCdWZbTUFYX0lFX0xFTl07Ci0jZW5kaWYKLQkvKiBIVCBSZWxhdGVkICovCi0JQlNTX0hUCWJzc2h0OwotCS8qIEFkZCB0byBoYW5kbGUgYnJvYWRjb20gQVAgbWFuYWdlbWVudCBmcmFtZSBDQ0sgcmF0ZS4gKi8KLQlib29sIGJyb2FkY29tX2NhcF9leGlzdDsKLQlib29sIHJhbGlua19jYXBfZXhpc3Q7Ci0JYm9vbCBhdGhlcm9zX2NhcF9leGlzdDsKLQlib29sIGNpc2NvX2NhcF9leGlzdDsKLQlib29sIHVua25vd25fY2FwX2V4aXN0OwotCWJvb2wJYmVycF9pbmZvX3ZhbGlkOwotCWJvb2wgYnVzZXByb3RlY3Rpb247Ci0JLyogcHV0IGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdHVyZS4gKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci19OwotCi1lbnVtIGllZWU4MDIxMV9zdGF0ZSB7Ci0KLQkvKiB0aGUgY2FyZCBpcyBub3QgbGlua2VkIGF0IGFsbCAqLwotCUlFRUU4MDIxMV9OT0xJTksgPSAwLAotCi0JLyogSUVFRTgwMjExX0FTU09DSUFUSU5HKiBhcmUgZm9yIEJTUyBjbGllbnQgbW9kZQotCSAqIHRoZSBkcml2ZXIgc2hhbGwgbm90IHBlcmZvcm0gUlggZmlsdGVyaW5nIHVubGVzcwotCSAqIHRoZSBzdGF0ZSBpcyBMSU5LRUQuCi0JICogVGhlIGRyaXZlciBzaGFsbCBqdXN0IGNoZWNrIGZvciB0aGUgc3RhdGUgTElOS0VEIGFuZAotCSAqIGRlZmF1bHRzIHRvIE5PTElOSyBmb3IgQUxMIHRoZSBvdGhlciBzdGF0ZXMgKGluY2x1ZGluZwotCSAqIExJTktFRF9TQ0FOTklORykKLQkgKi8KLQotCS8qIHRoZSBhc3NvY2lhdGlvbiBwcm9jZWR1cmUgd2lsbCBzdGFydCAod3Egc2NoZWR1bGluZykqLwotCUlFRUU4MDIxMV9BU1NPQ0lBVElORywKLQlJRUVFODAyMTFfQVNTT0NJQVRJTkdfUkVUUlksCi0KLQkvKiB0aGUgYXNzb2NpYXRpb24gcHJvY2VkdXJlIGlzIHNlbmRpbmcgQVVUSCByZXF1ZXN0Ki8KLQlJRUVFODAyMTFfQVNTT0NJQVRJTkdfQVVUSEVOVElDQVRJTkcsCi0KLQkvKiB0aGUgYXNzb2NpYXRpb24gcHJvY2VkdXJlIGhhcyBzdWNjZXNzZnVsbHkgYXV0aGVudGNhdGVkCi0JICogYW5kIGlzIHNlbmRpbmcgYXNzb2NpYXRpb24gcmVxdWVzdAotCSAqLwotCUlFRUU4MDIxMV9BU1NPQ0lBVElOR19BVVRIRU5USUNBVEVELAotCi0JLyogdGhlIGxpbmsgaXMgb2suIHRoZSBjYXJkIGFzc29jaWF0ZWQgdG8gYSBCU1Mgb3IgbGlua2VkCi0JICogdG8gYSBpYnNzIGNlbGwgb3IgYWN0aW5nIGFzIGFuIEFQIGFuZCBjcmVhdGluZyB0aGUgYnNzCi0JICovCi0JSUVFRTgwMjExX0xJTktFRCwKLQotCS8qIHNhbWUgYXMgTElOS0VELCBidXQgdGhlIGRyaXZlciBzaGFsbCBhcHBseSBSWCBmaWx0ZXIKLQkgKiBydWxlcyBhcyB3ZSBhcmUgaW4gTk9fTElOSyBtb2RlLiBBcyB0aGUgY2FyZCBpcyBzdGlsbAotCSAqIGxvZ2ljYWxseSBsaW5rZWQsIGJ1dCBpdCBpcyBkb2luZyBhIHN5bmNybyBzaXRlIHN1cnZleQotCSAqIHRoZW4gaXQgd2lsbCBiZSBiYWNrIHRvIExJTktFRCBzdGF0ZS4KLQkgKi8KLQlJRUVFODAyMTFfTElOS0VEX1NDQU5OSU5HLAotCi19OwotCi0jZGVmaW5lIERFRkFVTFRfTUFYX1NDQU5fQUdFICgxNSAqIEhaKQotI2RlZmluZSBERUZBVUxUX0ZUUyAyMzQ2Ci0KLSNkZWZpbmUgQ0ZHX0lFRUU4MDIxMV9SRVNFUlZFX0ZDUyAoMTw8MCkKLSNkZWZpbmUgQ0ZHX0lFRUU4MDIxMV9DT01QVVRFX0ZDUyAoMTw8MSkKLSNkZWZpbmUgQ0ZHX0lFRUU4MDIxMV9SVFMgKDE8PDIpCi0KLSNkZWZpbmUgSUVFRTgwMjExXzI0R0haX01JTl9DSEFOTkVMIDEKLSNkZWZpbmUgSUVFRTgwMjExXzI0R0haX01BWF9DSEFOTkVMIDE0Ci0jZGVmaW5lIElFRUU4MDIxMV8yNEdIWl9DSEFOTkVMUyAoSUVFRTgwMjExXzI0R0haX01BWF9DSEFOTkVMIC0gXAotCQkJCSAgSUVFRTgwMjExXzI0R0haX01JTl9DSEFOTkVMICsgMSkKLQotI2RlZmluZSBJRUVFODAyMTFfNTJHSFpfTUlOX0NIQU5ORUwgMzQKLSNkZWZpbmUgSUVFRTgwMjExXzUyR0haX01BWF9DSEFOTkVMIDE2NQotI2RlZmluZSBJRUVFODAyMTFfNTJHSFpfQ0hBTk5FTFMgKElFRUU4MDIxMV81MkdIWl9NQVhfQ0hBTk5FTCAtIFwKLQkJCQkgIElFRUU4MDIxMV81MkdIWl9NSU5fQ0hBTk5FTCArIDEpCi0KLQotCi10eXBlZGVmIHN0cnVjdCB0eF9wZW5kaW5nX3R7Ci0JaW50IGZyYWc7Ci0Jc3RydWN0IGllZWU4MDIxMV90eGIgKnR4YjsKLX0gdHhfcGVuZGluZ190OwotCi10eXBlZGVmIHN0cnVjdCBfYmFuZHdpZHRoX2F1dG9zd2l0Y2ggewotCWxvbmcgdGhyZXNob2xkXzIwTWh6dG80ME1oejsKLQlsb25nCXRocmVzaG9sZF80ME1oenRvMjBNaHo7Ci0JYm9vbCBiZm9yY2VkX3R4MjBNaHo7Ci0JYm9vbCBiYXV0b3N3aXRjaF9lbmFibGU7Ci19IGJhbmR3aWR0aF9hdXRvc3dpdGNoLCAqcGJhbmR3aWR0aF9hdXRvc3dpdGNoOwotCi0KLQotI2RlZmluZSBSRU9SREVSX1dJTl9TSVpFCTEyOAotI2RlZmluZSBSRU9SREVSX0VOVFJZX05VTQkxMjgKLXR5cGVkZWYgc3RydWN0IF9SWF9SRU9SREVSX0VOVFJZIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkCUxpc3Q7Ci0JdTE2CQkJU2VxTnVtOwotCXN0cnVjdCBpZWVlODAyMTFfcnhiICpwcnhiOwotfSBSWF9SRU9SREVSX0VOVFJZLCAqUFJYX1JFT1JERVJfRU5UUlk7Ci0KLXR5cGVkZWYgZW51bSBfRnN5bmNfU3RhdGUgewotCURlZmF1bHRfRnN5bmMsCi0JSFdfRnN5bmMsCi0JU1dfRnN5bmMKLX0gRnN5bmNfU3RhdGU7Ci0KLS8qIFBvd2VyIHNhdmUgbW9kZSBjb25maWd1cmVkLiAqLwotdHlwZWRlZgllbnVtIF9SVF9QU19NT0RFIHsKLQllQWN0aXZlLAkvKiBBY3RpdmUvQ29udGludW91cyBhY2Nlc3MuICovCi0JZU1heFBzLAkJLyogTWF4IHBvd2VyIHNhdmUgbW9kZS4gKi8KLQllRmFzdFBzCQkvKiBGYXN0IHBvd2VyIHNhdmUgbW9kZS4gKi8KLX0gUlRfUFNfTU9ERTsKLQotdHlwZWRlZiBlbnVtIF9JUFNfQ0FMTEJBQ0tfRlVOQ0lPTiB7Ci0JSVBTX0NBTExCQUNLX05PTkUgPSAwLAotCUlQU19DQUxMQkFDS19NR05UX0xJTktfUkVRVUVTVCA9IDEsCi0JSVBTX0NBTExCQUNLX0pPSU5fUkVRVUVTVCA9IDIsCi19IElQU19DQUxMQkFDS19GVU5DSU9OOwotCi10eXBlZGVmIGVudW0gX1JUX0pPSU5fQUNUSU9OIHsKLQlSVF9KT0lOX0lORlJBICAgPSAxLAotCVJUX0pPSU5fSUJTUyAgPSAyLAotCVJUX1NUQVJUX0lCU1MgPSAzLAotCVJUX05PX0FDVElPTiAgPSA0LAotfSBSVF9KT0lOX0FDVElPTjsKLQotdHlwZWRlZiBzdHJ1Y3QgX0lic3NQYXJtcyB7Ci0JdTE2ICAgYXRpbVdpbjsKLX0gSWJzc1Bhcm1zLCAqUElic3NQYXJtczsKLSNkZWZpbmUgTUFYX05VTV9SQVRFUwkyNjQgLyogTWF4IG51bSBvZiBzdXBwb3J0IHJhdGVzIGVsZW1lbnQ6IDgsICBNYXggbnVtIG9mIGV4dC4gc3VwcG9ydCByYXRlOiAyNTUuIDA2MTEyMiwgYnkgcmNuamtvLiAqLwotCi0vKiBSRiBzdGF0ZS4gKi8KLXR5cGVkZWYJZW51bSBfUlRfUkZfUE9XRVJfU1RBVEUgewotCWVSZk9uLAotCWVSZlNsZWVwLAotCWVSZk9mZgotfSBSVF9SRl9QT1dFUl9TVEFURTsKLQotdHlwZWRlZiBzdHJ1Y3QgX1JUX1BPV0VSX1NBVkVfQ09OVFJPTCB7Ci0KLQkvKiBJbmFjdGl2ZSBQb3dlciBTYXZlKElQUykgOiBEaXNhYmxlIFJGIHdoZW4gZGlzY29ubmVjdGVkICovCi0JYm9vbAkJCQliSW5hY3RpdmVQczsKLQlib29sCQkJCWJJUFNNb2RlQmFja3VwOwotCWJvb2wJCQkJYlN3UmZQcm9jZXNzaW5nOwotCVJUX1JGX1BPV0VSX1NUQVRFCWVJbmFjdGl2ZVBvd2VyU3RhdGU7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IAlJbmFjdGl2ZVBzV29ya0l0ZW07Ci0Jc3RydWN0IHRpbWVyX2xpc3QJSW5hY3RpdmVQc1RpbWVyOwotCi0JLyogUmV0dXJuIHBvaW50IGZvciBqb2luIGFjdGlvbiAqLwotCUlQU19DQUxMQkFDS19GVU5DSU9OCVJldHVyblBvaW50OwotCi0JLyogUmVjb3JlZCBQYXJhbWV0ZXJzIGZvciByZXNjaGVkdWxlZCBKb2luUmVxdWVzdCAqLwotCWJvb2wJCQkJYlRtcEJzc0Rlc2M7Ci0JUlRfSk9JTl9BQ1RJT04JCXRtcEpvaW5BY3Rpb247Ci0Jc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrIHRtcEJzc0Rlc2M7Ci0KLQkvKiBSZWNvcmVkIFBhcmFtZXRlcnMgZm9yIHJlc2NoZWR1bGVkIE1nbnRMaW5rUmVxdWVzdCAqLwotCWJvb2wJCQkJYlRtcFNjYW5Pbmx5OwotCWJvb2wJCQkJYlRtcEFjdGl2ZVNjYW47Ci0JYm9vbAkJCQliVG1wRmlsdGVySGlkZGVuQVA7Ci0JYm9vbAkJCQliVG1wVXBkYXRlUGFybXM7Ci0JdTgJCQkJCXRtcFNzaWRCdWZbMzNdOwotCU9DVEVUX1NUUklORwkJCXRtcFNzaWQyU2NhbjsKLQlib29sCQkJCWJUbXBTc2lkMlNjYW47Ci0JdTgJCQkJCXRtcE5ldHdvcmtUeXBlOwotCXU4CQkJCQl0bXBDaGFubmVsTnVtYmVyOwotCXUxNgkJCQkJdG1wQmNuUGVyaW9kOwotCXU4CQkJCQl0bXBEdGltUGVyaW9kOwotCXUxNgkJCQkJdG1wbUNhcDsKLQlPQ1RFVF9TVFJJTkcJCQl0bXBTdXBwUmF0ZVNldDsKLQl1OAkJCQkJdG1wU3VwcFJhdGVCdWZbTUFYX05VTV9SQVRFU107Ci0JYm9vbAkJCQliVG1wU3VwcFJhdGU7Ci0JSWJzc1Bhcm1zCQkJCXRtcElicG07Ci0JYm9vbAkJCQliVG1wSWJwbTsKLQotCS8qIExlaXNyZSBQb3N3ZXIgU2F2ZSA6IERpc2FibGUgUkYgaWYgY29ubmVjdGVkIGJ1dCB0cmFmZmljIGlzIG5vdCBidXN5ICovCi0JYm9vbAkJCQliTGVpc3VyZVBzOwotCi19IFJUX1BPV0VSX1NBVkVfQ09OVFJPTCwgKlBSVF9QT1dFUl9TQVZFX0NPTlRST0w7Ci0KLXR5cGVkZWYgdTMyIFJUX1JGX0NIQU5HRV9TT1VSQ0U7Ci0jZGVmaW5lIFJGX0NIQU5HRV9CWV9TVyBCSVQzMQotI2RlZmluZSBSRl9DSEFOR0VfQllfSFcgQklUMzAKLSNkZWZpbmUgUkZfQ0hBTkdFX0JZX1BTIEJJVDI5Ci0jZGVmaW5lIFJGX0NIQU5HRV9CWV9JUFMgQklUMjgKLSNkZWZpbmUgUkZfQ0hBTkdFX0JZX0lOSVQJMAkvKiBEbyBub3QgY2hhbmdlIHRoZSBSRk9mZiByZWFzb24uICovCi0KLSNpZmRlZiBFTkFCTEVfRE9UMTFECi10eXBlZGVmIGVudW0gewotCUNPVU5UUllfQ09ERV9GQ0MgPSAwLAotCUNPVU5UUllfQ09ERV9JQyA9IDEsCi0JQ09VTlRSWV9DT0RFX0VUU0kgPSAyLAotCUNPVU5UUllfQ09ERV9TUEFJTiA9IDMsCi0JQ09VTlRSWV9DT0RFX0ZSQU5DRSA9IDQsCi0JQ09VTlRSWV9DT0RFX01LSyA9IDUsCi0JQ09VTlRSWV9DT0RFX01LSzEgPSA2LAotCUNPVU5UUllfQ09ERV9JU1JBRUwgPSA3LAotCUNPVU5UUllfQ09ERV9URUxFQywKLQlDT1VOVFJZX0NPREVfTUlDLAotCUNPVU5UUllfQ09ERV9HTE9CQUxfRE9NQUlOCi19IGNvdW50cnlfY29kZV90eXBlX3Q7Ci0jZW5kaWYKLQotI2RlZmluZSBSVF9NQVhfTERfU0xPVF9OVU0JMTAKLXR5cGVkZWYgc3RydWN0IF9SVF9MSU5LX0RFVEVDVF9UIHsKLQotCXUzMgkJCQlOdW1SZWN2QmNuSW5QZXJpb2Q7Ci0JdTMyCQkJCU51bVJlY3ZEYXRhSW5QZXJpb2Q7Ci0KLQl1MzIJCQkJUnhCY25OdW1bUlRfTUFYX0xEX1NMT1RfTlVNXTsJLyogbnVtYmVyIG9mIFJ4IGJlYWNvbiAvIENoZWNrRm9ySGFuZ19wZXJpb2QgIHRvIGRldGVybWluZSBsaW5rIHN0YXR1cyAqLwotCXUzMgkJCQlSeERhdGFOdW1bUlRfTUFYX0xEX1NMT1RfTlVNXTsJLyogbnVtYmVyIG9mIFJ4IGRhdGEgLyBDaGVja0ZvckhhbmdfcGVyaW9kICB0byBkZXRlcm1pbmUgbGluayBzdGF0dXMgKi8KLQl1MTYJCQkJU2xvdE51bTsJLyogbnVtYmVyIG9mIENoZWNrRm9ySGFuZyBwZXJpb2QgdG8gZGV0ZXJtaW5lIGxpbmsgc3RhdHVzICovCi0JdTE2CQkJCVNsb3RJbmRleDsKLQotCXUzMgkJCQlOdW1UeE9rSW5QZXJpb2Q7Ci0JdTMyCQkJCU51bVJ4T2tJblBlcmlvZDsKLQlib29sCQkJCWJCdXN5VHJhZmZpYzsKLX0gUlRfTElOS19ERVRFQ1RfVCwgKlBSVF9MSU5LX0RFVEVDVF9UOwotCi0KLXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfc2VjdXJpdHkgc2VjOwotCi0JLyogaHcgc2VjdXJpdHkgcmVsYXRlZCAqLwotCXU4IGh3c2VjX2FjdGl2ZTsgIC8qIGh3IHNlY3VyaXR5IGFjdGl2ZS4gKi8KLQlib29sIGlzX3NpbGVudF9yZXNldDsKLQlib29sIGllZWVfdXA7Ci0JYm9vbCBiU3VwcG9ydFJlbW90ZVdha2VVcDsKLQlSVF9QU19NT0RFCWRvdDExUG93ZXJTYXZlTW9kZTsgLyogUG93ZXIgc2F2ZSBtb2RlIGNvbmZpZ3VyZWQuICovCi0JYm9vbCBhY3RzY2FubmluZzsKLQlib29sIGJlaW5yZXRyeTsKLQlSVF9SRl9QT1dFUl9TVEFURQkJZVJGUG93ZXJTdGF0ZTsKLQlSVF9SRl9DSEFOR0VfU09VUkNFCVJmT2ZmUmVhc29uOwotCWJvb2wgaXNfc2V0X2tleTsKLQkvKiAxMW4gc3BlYyByZWxhdGVkIEkgd29uZGVyIGlmIFRoZXNlIGluZm8gc3RydWN0dXJlIG5lZWQgdG8gYmUgbW92ZWQgb3V0IG9mIGllZWU4MDIxMV9kZXZpY2UgKi8KLQotCS8qIDExbiBIVCBiZWxvdyAqLwotCVBSVF9ISUdIX1RIUk9VR0hQVVQJcEhUSW5mbzsKLQlzcGlubG9ja190IGJ3X3NwaW5sb2NrOwotCi0Jc3BpbmxvY2tfdCByZW9yZGVyX3NwaW5sb2NrOwotCS8qIGZvciBIVCBvcGVyYXRpb24gcmF0ZSBzZXQuICB3ZSB1c2UgdGhpcyBvbmUgZm9yIEhUIGRhdGEgcmF0ZSB0bwotCSAqIHNlcGFyYXRlIGRpZmZlcmVudCBkZXNjcmlwdG9ycwotCSAqIHRoZSB3YXkgZmlsbCB0aGlzIGlzIHRoZSBzYW1lIGFzIGluIHRoZSBJRQotCSAqLwotCXU4CVJlZ2RvdDExSFRPcGVyYXRpb25hbFJhdGVTZXRbMTZdOwkJLyogdXNlIFJBVFIgZm9ybWF0ICovCi0JdTgJZG90MTFIVE9wZXJhdGlvbmFsUmF0ZVNldFsxNl07CQkvKiB1c2UgUkFUUiBmb3JtYXQgKi8KLQl1OAlSZWdIVFN1cHBSYXRlU2V0WzE2XTsKLQl1OAkJCQlIVEN1cnJlbnRPcGVyYVJhdGU7Ci0JdTgJCQkJSFRIaWdoZXN0T3BlcmFSYXRlOwotCS8qIHdiIGFkZGVkIGZvciByYXRlIG9wZXJhdGlvbiBtb2RlIHRvIGZpcm13YXJlICovCi0JdTgJYlR4RGlzYWJsZVJhdGVGYWxsQmFjazsKLQl1OCAJYlR4VXNlRHJpdmVyQXNzaW5nZWRSYXRlOwotCWF0b21pY190CWF0bV9jaG5sb3A7Ci0JYXRvbWljX3QJYXRtX3N3Ync7Ci0KLQkvKiA4MDIuMTFlIGFuZCBXTU0gVHJhZmZpYyBTdHJlYW0gSW5mbyAoVFgpICovCi0Jc3RydWN0IGxpc3RfaGVhZAkJVHhfVFNfQWRtaXRfTGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkCQlUeF9UU19QZW5kaW5nX0xpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZAkJVHhfVFNfVW51c2VkX0xpc3Q7Ci0JVFhfVFNfUkVDT1JECQlUeFRzUmVjb3JkW1RPVEFMX1RTX05VTV07Ci0JLyogODAyLjExZSBhbmQgV01NIFRyYWZmaWMgU3RyZWFtIEluZm8gKFJYKSAqLwotCXN0cnVjdCBsaXN0X2hlYWQJCVJ4X1RTX0FkbWl0X0xpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZAkJUnhfVFNfUGVuZGluZ19MaXN0OwotCXN0cnVjdCBsaXN0X2hlYWQJCVJ4X1RTX1VudXNlZF9MaXN0OwotCVJYX1RTX1JFQ09SRAkJUnhUc1JlY29yZFtUT1RBTF9UU19OVU1dOwotCVJYX1JFT1JERVJfRU5UUlkJUnhSZW9yZGVyRW50cnlbMTI4XTsKLQlzdHJ1Y3QgbGlzdF9oZWFkCQlSeFJlb3JkZXJfVW51c2VkX0xpc3Q7Ci0JLyogUW9zIHJlbGF0ZWQuICovCi0vKglQU1RBX1FPUwkJCXBTdGFRb3M7ICovCi0JdTgJCQkJRm9yY2VkUHJpb3JpdHk7CQkvKiBGb3JjZSBwZXItcGFja2V0IHByaW9yaXR5IDF+Ny4gKGRlZmF1bHQ6IDAsIG5vdCB0byBmb3JjZSBpdC4pICovCi0KLQotCS8qIEJvb2trZWVwaW5nIHN0cnVjdHVyZXMgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N0YXRzIGllZWVfc3RhdHM7Ci0Jc3RydWN0IGllZWU4MDIxMV9zb2Z0bWFjX3N0YXRzIHNvZnRtYWNfc3RhdHM7Ci0KLQkvKiBQcm9iZSAvIEJlYWNvbiBtYW5hZ2VtZW50ICovCi0Jc3RydWN0IGxpc3RfaGVhZCBuZXR3b3JrX2ZyZWVfbGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG5ldHdvcmtfbGlzdDsKLQlzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmtzOwotCWludCBzY2FuczsKLQlpbnQgc2Nhbl9hZ2U7Ci0KLQlpbnQgaXdfbW9kZTsgLyogb3BlcmF0aW5nIG1vZGUgKElXX01PREVfKikgKi8KLQlzdHJ1Y3QgaXdfc3B5X2RhdGEgc3B5X2RhdGE7Ci0KLQlzcGlubG9ja190IGxvY2s7Ci0Jc3BpbmxvY2tfdCB3cGF4X3N1aXRsaXN0X2xvY2s7Ci0KLQlpbnQgdHhfaGVhZHJvb207IC8qIFNldCB0byBzaXplIG9mIGFueSBhZGRpdGlvbmFsIHJvb20gbmVlZGVkIGF0IGZyb250Ci0JCQkgICogb2YgYWxsb2NhdGVkIFR4IFNLQnMgKi8KLQl1MzIgY29uZmlnOwotCi0JLyogV0VQIGFuZCBvdGhlciBlbmNyeXB0aW9uIHJlbGF0ZWQgc2V0dGluZ3MgYXQgdGhlIGRldmljZSBsZXZlbCAqLwotCWludCBvcGVuX3dlcDsgLyogU2V0IHRvIDEgdG8gYWxsb3cgdW5lbmNyeXB0ZWQgZnJhbWVzICovCi0JaW50IGF1dGhfbW9kZTsKLQlpbnQgcmVzZXRfb25fa2V5Y2hhbmdlOyAvKiBTZXQgdG8gMSBpZiB0aGUgSFcgbmVlZHMgdG8gYmUgcmVzZXQgb24KLQkJCQkgKiBXRVAga2V5IGNoYW5nZXMgKi8KLQotCS8qIElmIHRoZSBob3N0IHBlcmZvcm1zIHtlbixkZX1jcnlwdGlvbiwgdGhlbiBzZXQgdG8gMSAqLwotCWludCBob3N0X2VuY3J5cHQ7Ci0JaW50IGhvc3RfZW5jcnlwdF9tc2R1OwotCWludCBob3N0X2RlY3J5cHQ7Ci0JLyogaG9zdCBwZXJmb3JtcyBtdWx0aWNhc3QgZGVjcnlwdGlvbiAqLwotCWludCBob3N0X21jX2RlY3J5cHQ7Ci0KLQkvKiBob3N0IHNob3VsZCBzdHJpcCBJViBhbmQgSUNWIGZyb20gcHJvdGVjdGVkIGZyYW1lcyAqLwotCS8qIG1lYW5pbmdmdWwgb25seSB3aGVuIGhhcmR3YXJlIGRlY3J5cHRpb24gaXMgYmVpbmcgdXNlZCAqLwotCWludCBob3N0X3N0cmlwX2l2X2ljdjsKLQotCWludCBob3N0X29wZW5fZnJhZzsKLQlpbnQgaG9zdF9idWlsZF9pdjsKLQlpbnQgaWVlZTgwMl8xeDsgLyogaXMgSUVFRSA4MDIuMVggdXNlZCAqLwotCi0JLyogV1BBIGRhdGEgKi8KLQlib29sIGJIYWxmV2lyZWxlc3NOMjRHTW9kZTsKLQlpbnQgd3BhX2VuYWJsZWQ7Ci0JaW50IGRyb3BfdW5lbmNyeXB0ZWQ7Ci0JaW50IHRraXBfY291bnRlcm1lYXN1cmVzOwotCWludCBwcml2YWN5X2ludm9rZWQ7Ci0Jc2l6ZV90IHdwYV9pZV9sZW47Ci0JdTggKndwYV9pZTsKLQl1OCBhcF9tYWNfYWRkcls2XTsKLQl1MTYgcGFpcndpc2Vfa2V5X3R5cGU7Ci0JdTE2IGdyb3VwX2tleV90eXBlOwotCXN0cnVjdCBsaXN0X2hlYWQgY3J5cHRfZGVpbml0X2xpc3Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhICpjcnlwdFtXRVBfS0VZU107Ci0JaW50IHR4X2tleWlkeDsgLyogZGVmYXVsdCBUWCBrZXkgaW5kZXggKGNyeXB0W3R4X2tleWlkeF0pICovCi0Jc3RydWN0IHRpbWVyX2xpc3QgY3J5cHRfZGVpbml0X3RpbWVyOwotCWludCBjcnlwdF9xdWllc2NlZDsKLQotCWludCBiY3J4X3N0YV9rZXk7IC8qIHVzZSBpbmRpdmlkdWFsIGtleXMgdG8gb3ZlcnJpZGUgZGVmYXVsdCBrZXlzIGV2ZW4KLQkJCSAgICogd2l0aCBSWCBvZiBicm9hZC9tdWx0aWNhc3QgZnJhbWVzICovCi0KLQkvKiBGcmFnbWVudGF0aW9uIHN0cnVjdHVyZXMgKi8KLQkvKiBlYWNoIHN0cmVhbWluZyBjb250YWluIGEgZW50cnkgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX2ZyYWdfZW50cnkgZnJhZ19jYWNoZVsxN11bSUVFRTgwMjExX0ZSQUdfQ0FDSEVfTEVOXTsKLQl1bnNpZ25lZCBpbnQgZnJhZ19uZXh0X2lkeFsxN107Ci0JdTE2IGZ0czsgLyogRnJhZ21lbnRhdGlvbiBUaHJlc2hvbGQgKi8KLSNkZWZpbmUgREVGQVVMVF9SVFNfVEhSRVNIT0xEIDIzNDZVCi0jZGVmaW5lIE1JTl9SVFNfVEhSRVNIT0xEIDEKLSNkZWZpbmUgTUFYX1JUU19USFJFU0hPTEQgMjM0NlUKLQl1MTYgcnRzOyAvKiBSVFMgdGhyZXNob2xkICovCi0KLQkvKiBBc3NvY2lhdGlvbiBpbmZvICovCi0JdTggYnNzaWRbRVRIX0FMRU5dOwotCi0JLyogVGhpcyBzdG9yZXMgaW5mb3MgZm9yIHRoZSBjdXJyZW50IG5ldHdvcmsuCi0JICogRWl0aGVyIHRoZSBuZXR3b3JrIHdlIGFyZSBhc3NvY2lhdGVkIGluIElORlJBU1RSVUNUVVJFCi0JICogb3IgdGhlIG5ldHdvcmsgdGhhdCB3ZSBhcmUgY3JlYXRpbmcgaW4gTUFTVEVSIG1vZGUuCi0JICogYWQtaG9jIGlzIGEgbWl4dHVyZSA7LSkuCi0JICogTm90ZSB0aGF0IGluIGluZnJhc3RydWN0dXJlIG1vZGUsIGV2ZW4gd2hlbiBub3QgYXNzb2NpYXRlZCwKLQkgKiBmaWVsZHMgYnNzaWQgYW5kIGVzc2lkIG1heSBiZSB2YWxpZCAoaWYgd3BhX3NldCBhbmQgZXNzaWRfc2V0Ci0JICogYXJlIHRydWUpIGFzIHRoeSBjYXJyeSB0aGUgdmFsdWUgc2V0IGJ5IHRoZSB1c2VyIHZpYSBpd2NvbmZpZwotCSAqLwotCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayBjdXJyZW50X25ldHdvcms7Ci0KLQllbnVtIGllZWU4MDIxMV9zdGF0ZSBzdGF0ZTsKLQotCWludCBzaG9ydF9zbG90OwotCWludCByZWdfbW9kZTsKLQlpbnQgbW9kZTsgICAgICAgLyogQSwgQiwgRyAqLwotCWludCBtb2R1bGF0aW9uOyAvKiBDQ0ssIE9GRE0gKi8KLQlpbnQgZnJlcV9iYW5kOyAgLyogMi40R2h6LCA1LjJHaHosIE1peGVkICovCi0JaW50IGFiZ190cnVlOyAgIC8qIEFCRyBmbGFnICAgICAgICAgICAgICAqLwotCi0JLyogdXNlZCBmb3IgZm9yY2luZyB0aGUgaWJzcyB3b3JrcXVldWUgdG8gdGVybWluYXRlCi0JICogd2l0aG91dCB3YWl0IGZvciB0aGUgc3luY3JvIHNjYW4gdG8gdGVybWluYXRlCi0JICovCi0Jc2hvcnQgc3luY19zY2FuX2h1cnJ5dXA7Ci0KLQlpbnQgcGVyZmVjdF9yc3NpOwotCWludCB3b3JzdF9yc3NpOwotCi0JdTE2IHByZXZfc2VxX2N0bDsgICAgICAgLyogdXNlZCB0byBkcm9wIGR1cGxpY2F0ZSBmcmFtZXMgKi8KLQotCS8qIG1hcCBvZiBhbGxvd2VkIGNoYW5uZWxzLiAwIGlzIGR1bW15ICovCi0JLyogRklYTUU6IHJlbWViZXIgdG8gZGVmYXVsdCB0byBhIGJhc2ljIGNoYW5uZWwgcGxhbiBkZXBlbmRpbmcgb2YgdGhlIFBIWSB0eXBlICovCi0jaWZkZWYgRU5BQkxFX0RPVDExRAotCXZvaWQgKnBEb3QxMWRJbmZvOwotCWJvb2wgYkdsb2JhbERvbWFpbjsKLSNlbHNlCi0JaW50IGNoYW5uZWxfbWFwW01BWF9DSEFOTkVMX05VTUJFUisxXTsKLSNlbmRpZgotCWludCByYXRlOyAgICAgICAvKiBjdXJyZW50IHJhdGUgKi8KLQlpbnQgYmFzaWNfcmF0ZTsKLQkvKiBGSVhNRTogcGxlYWNlIGNhbGxiYWNrLCBzZWUgaWYgcmVkdW5kYW50IHdpdGggc29mdG1hY19mZWF0dXJlcyAqLwotCXNob3J0IGFjdGl2ZV9zY2FuOwotCi0JLyogdGhpcyBjb250YWlucyBmbGFncyBmb3Igc2VsZWN0aXZlbHkgZW5hYmxlIHNvZnRtYWMgc3VwcG9ydCAqLwotCXUxNiBzb2Z0bWFjX2ZlYXR1cmVzOwotCi0JLyogaWYgdGhlIHNlcXVlbmNlIGNvbnRyb2wgZmllbGQgaXMgbm90IGZpbGxlZCBieSBIVyAqLwotCXUxNiBzZXFfY3RybFs1XTsKLQotCS8qIGFzc29jaWF0aW9uIHByb2NlZHVyZSB0cmFuc2FjdGlvbiBzZXF1ZW5jZSBudW1iZXIgKi8KLQl1MTYgYXNzb2NpYXRlX3NlcTsKLQotCS8qIEFJRCBmb3IgUlRYZWQgYXNzb2NpYXRpb24gcmVzcG9uc2VzICovCi0JdTE2IGFzc29jX2lkOwotCi0JLyogcG93ZXIgc2F2ZSBtb2RlIHJlbGF0ZWQqLwotCXNob3J0IHBzOwotCXNob3J0IHN0YV9zbGVlcDsKLQlpbnQgcHNfdGltZW91dDsKLQlpbnQgcHNfcGVyaW9kOwotCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBwc190YXNrOwotCXUzMiBwc190aDsKLQl1MzIgcHNfdGw7Ci0KLQlzaG9ydCByYXdfdHg7Ci0JLyogdXNlZCBpZiBJRUVFX1NPRlRNQUNfVFhfUVVFVUUgaXMgc2V0ICovCi0Jc2hvcnQgcXVldWVfc3RvcDsKLQlzaG9ydCBzY2FubmluZzsKLQlzaG9ydCBwcm90b19zdGFydGVkOwotCi0Jc3RydWN0IHNlbWFwaG9yZSB3eF9zZW07Ci0Jc3RydWN0IHNlbWFwaG9yZSBzY2FuX3NlbTsKLQotCXNwaW5sb2NrX3QgbWdtdF90eF9sb2NrOwotCXNwaW5sb2NrX3QgYmVhY29uX2xvY2s7Ci0KLQlzaG9ydCBiZWFjb25fdHhpbmc7Ci0KLQlzaG9ydCB3YXBfc2V0OwotCXNob3J0IHNzaWRfc2V0OwotCi0JdTggIHdwYXhfdHlwZV9zZXQ7Ci0JdTMyIHdwYXhfdHlwZV9ub3RpZnk7Ci0KLQkvKiBRb1MgcmVsYXRlZCBmbGFnICovCi0JY2hhciBpbml0X3dtbXBhcmFtX2ZsYWc7Ci0JLyogc2V0IG9uIGluaXRpYWxpemF0aW9uICovCi0JdTggIHFvc19zdXBwb3J0OwotCi0JLyogZm9yIGRpc2NhcmRpbmcgZHVwbGljYXRlZCBwYWNrZXRzIGluIElCU1MgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGlic3NfbWFjX2hhc2hbSUVFRV9JQlNTX01BQ19IQVNIX1NJWkVdOwotCi0JLyogZm9yIGRpc2NhcmRpbmcgZHVwbGljYXRlZCBwYWNrZXRzIGluIEJTUyAqLwotCXUxNiBsYXN0X3J4c2VxX251bVsxN107IC8qIHJ4IHNlcSBwcmV2aW91cyBwZXItdGlkICovCi0JdTE2IGxhc3RfcnhmcmFnX251bVsxN107LyogdHggZnJhZyBwcmV2aW91cyBwZXItdGlkICovCi0JdW5zaWduZWQgbG9uZyBsYXN0X3BhY2tldF90aW1lWzE3XTsKLQotCS8qIGZvciBQUyBtb2RlICovCi0JdW5zaWduZWQgbG9uZyBsYXN0X3J4X3BzX3RpbWU7Ci0KLQkvKiB1c2VkIGlmIElFRUVfU09GVE1BQ19TSU5HTEVfUVVFVUUgaXMgc2V0ICovCi0Jc3RydWN0IHNrX2J1ZmYgKm1nbXRfcXVldWVfcmluZ1tNR01UX1FVRVVFX05VTV07Ci0JaW50IG1nbXRfcXVldWVfaGVhZDsKLQlpbnQgbWdtdF9xdWV1ZV90YWlsOwotLyogYWRkZWQgZm9yIHJ0bDgxOXggKi8KLSNkZWZpbmUgSUVFRTgwMjExX1FVRVVFX0xJTUlUIDEyOAotCXU4IEFzb2NSZXRyeUNvdW50OwotCXVuc2lnbmVkIGludCBod19oZWFkZXI7Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCBza2Jfd2FpdFFbTUFYX1FVRVVFX1NJWkVdOwotCXN0cnVjdCBza19idWZmX2hlYWQgIHNrYl9hZ2dRW01BWF9RVUVVRV9TSVpFXTsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICBza2JfZHJ2X2FnZ1FbTUFYX1FVRVVFX1NJWkVdOwotCXUzMglzdGFfZWRjYV9wYXJhbVs0XTsKLQlib29sIGFnZ3JlZ2F0aW9uOwotCS8qIEVuYWJsZS9EaXNhYmxlIFJ4IGltbWVkaWF0ZSBCQSBjYXBhYmlsaXR5LiAqLwotCWJvb2wgZW5hYmxlX3J4X2ltbV9CQTsKLQlib29sIGJpYnNzY29vcmRpbmF0b3I7Ci0KLQkvKitieSBhbXkgZm9yIERNICwwODA1MTUgKi8KLQkvKiBEeW5hbWljIFR4IHBvd2VyIGZvciBuZWFyL2ZhciByYW5nZSBlbmFibGUvRGlzYWJsZSAgKi8KLQlib29sCWJkeW5hbWljX3R4cG93ZXJfZW5hYmxlOwotCi0JYm9vbCBiQ1RTVG9TZWxmRW5hYmxlOwotCXU4IAlDVFNUb1NlbGZUSDsKLQotCXUzMiAJZnN5bmNfdGltZV9pbnRlcnZhbDsKLQl1MzIJZnN5bmNfcmF0ZV9iaXRtYXA7Ci0JdTgJZnN5bmNfcnNzaV90aHJlc2hvbGQ7Ci0JYm9vbAliZnN5bmNfZW5hYmxlOwotCi0JdTgJZnN5bmNfbXVsdGlwbGVfdGltZWludGVydmFsOwkJLyogRnN5bmNNdWx0aXBsZVRpbWVJbnRlcnZhbCAqIEZzeW5jVGltZUludGVydmFsICovCi0JdTMyCWZzeW5jX2ZpcnN0ZGlmZl9yYXRldGhyZXNob2xkOwkJLyogbG93IHRocmVzaG9sZCAqLwotCXUzMglmc3luY19zZWNvbmRkaWZmX3JhdGV0aHJlc2hvbGQ7CSAvKiBkZWNyZWFzZSB0aHJlc2hvbGQgKi8KLQlGc3luY19TdGF0ZQkJCWZzeW5jX3N0YXRlOwotCWJvb2wJCWJpc19hbnlfbm9uYmVwa3RzOwotCS8qIDIwTWh6IDQwTWh6IEF1dG9Td2l0Y2ggVGhyZXNob2xkICovCi0JYmFuZHdpZHRoX2F1dG9zd2l0Y2ggYmFuZHdpZHRoX2F1dG9fc3dpdGNoOwotCS8qIGZvciB0eHBvd2VyIHRyYWNraW5nICovCi0JYm9vbCBGd1JXUkY7Ci0KLQkvKiBhZGRlZCBieSBhbXkgZm9yIEFQIHJvYW1pbmcgKi8KLQlSVF9MSU5LX0RFVEVDVF9UCUxpbmtEZXRlY3RJbmZvOwotCS8qIGFkZGVkIGJ5IGFteSBmb3IgcHMgKi8KLQlSVF9QT1dFUl9TQVZFX0NPTlRST0wJUG93ZXJTYXZlQ29udHJvbDsKLQkvKiB1c2VkIGlmIElFRUVfU09GVE1BQ19UWF9RVUVVRSBpcyBzZXQgKi8KLQlzdHJ1Y3QgIHR4X3BlbmRpbmdfdCB0eF9wZW5kaW5nOwotCi0JLyogdXNlZCBpZiBJRUVFX1NPRlRNQUNfQVNTT0NJQVRFIGlzIHNldCAqLwotCXN0cnVjdCB0aW1lcl9saXN0IGFzc29jaWF0ZV90aW1lcjsKLQotCS8qIHVzZWQgaWYgSUVFRV9TT0ZUTUFDX0JFQUNPTlMgaXMgc2V0ICovCi0Jc3RydWN0IHRpbWVyX2xpc3QgYmVhY29uX3RpbWVyOwotCXN0cnVjdCB3b3JrX3N0cnVjdCBhc3NvY2lhdGVfY29tcGxldGVfd3E7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IGFzc29jaWF0ZV9wcm9jZWR1cmVfd3E7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayBzb2Z0bWFjX3NjYW5fd3E7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayBhc3NvY2lhdGVfcmV0cnlfd3E7Ci0JIHN0cnVjdCBkZWxheWVkX3dvcmsgc3RhcnRfaWJzc193cTsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd3hfc3luY19zY2FuX3dxOwotCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKLQkvKiBRb3MgcmVsYXRlZC4gQWRkZWQgYnkgQW5uaWUsIDIwMDUtMTEtMDEuICovCi0JLyogU1RBX1FPUyAgU3RhUW9zOyAqLwotCi0KLQkvKiBDYWxsYmFjayBmdW5jdGlvbnMgKi8KLQl2b2lkICgqc2V0X3NlY3VyaXR5KShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3NlY3VyaXR5ICpzZWMpOwotCi0JLyogVXNlZCB0byBUWCBkYXRhIGZyYW1lIGJ5IHVzaW5nIHR4YiBzdHJ1Y3RzLgotCSAqIHRoaXMgaXMgbm90IHVzZWQgaWYgaW4gdGhlIHNvZnRtYWNfZmVhdHVyZXMKLQkgKiBpcyBzZXQgdGhlIGZsYWcgSUVFRV9TT0ZUTUFDX1RYX1FVRVVFCi0JICovCi0JaW50ICgqaGFyZF9zdGFydF94bWl0KShzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqdHhiLAotCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi0JaW50ICgqcmVzZXRfcG9ydCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0JaW50ICgqaXNfcXVldWVfZnVsbCkgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwcmkpOwotCi0JaW50ICgqaGFuZGxlX21hbmFnZW1lbnQpIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrLCB1MTYgdHlwZSk7Ci0JaW50ICgqaXNfcW9zX2FjdGl2ZSkgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwotCi0JLyogU29mdG1hYy1nZW5lcmF0ZWQgZnJhbWVzIChtYW1hZ2VtZW50KSBhcmUgVFhlZCB2aWEgdGhpcwotCSAqIGNhbGxiYWNrIGlmIHRoZSBmbGFnIElFRUVfU09GVE1BQ19TSU5HTEVfUVVFVUUgaXMKLQkgKiBub3Qgc2V0LiBBcyBzb21lIGNhcmRzIG1heSBoYXZlIGRpZmZlcmVudCBIVyBxdWV1ZXMgdGhhdAotCSAqIG9uZSBtaWdodCB3YW50IHRvIHVzZSBmb3IgZGF0YSBhbmQgbWFuYWdlbWVudCBmcmFtZXMKLQkgKiB0aGUgb3B0aW9uIHRvIGhhdmUgdHdvIGNhbGxiYWNrcyBtaWdodCBiZSB1c2VmdWwuCi0JICogVGhpcyBmdWNudGlvbiBjYW4ndCBzbGVlcC4KLQkgKi8KLQlpbnQgKCpzb2Z0bWFjX2hhcmRfc3RhcnRfeG1pdCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotCS8qIHVzZWQgaW5zdGVhZCBvZiBoYXJkX3N0YXJ0X3htaXQgKG5vdCBzb2Z0bWFjX2hhcmRfc3RhcnRfeG1pdCkKLQkgKiBpZiB0aGUgSUVFRV9TT0ZUTUFDX1RYX1FVRVVFIGZlYXR1cmUgaXMgdXNlZCB0byBUWCBkYXRhCi0JICogZnJhbWVzLiBJIHRoZSBvcHRpb24gSUVFRV9TT0ZUTUFDX1NJTkdMRV9RVUVVRSBpcyBhbHNvIHNldAotCSAqIHRoZW4gYWxzbyBtYW5hZ2VtZW50IGZyYW1lcyBhcmUgc2VudCB2aWEgdGhpcyBjYWxsYmFjay4KLQkgKiBUaGlzIGZ1bmN0aW9uIGNhbid0IHNsZWVwLgotCSAqLwotCXZvaWQgKCpzb2Z0bWFjX2RhdGFfaGFyZF9zdGFydF94bWl0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCByYXRlKTsKLQotCS8qIHN0b3BzIHRoZSBIVyBxdWV1ZSBmb3IgREFUQSBmcmFtZXMuIFVzZWZ1bCB0byBhdm9pZAotCSAqIHdhc3RlIHRpbWUgdG8gVFggZGF0YSBmcmFtZSB3aGVuIHdlIGFyZSByZWFzc29jaWF0aW5nCi0JICogVGhpcyBmdW5jdGlvbiBjYW4gc2xlZXAuCi0JICovCi0Jdm9pZCAoKmRhdGFfaGFyZF9zdG9wKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotCS8qIE9LIHRoaXMgaXMgY29tcGxlbWVudGFyIHRvIGRhdGFfcG9sbF9oYXJkX3N0b3AgKi8KLQl2b2lkICgqZGF0YV9oYXJkX3Jlc3VtZSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLQkvKiBhc2sgdG8gdGhlIGRyaXZlciB0byByZXR1bmUgdGhlIHJhZGlvIC4KLQkgKiBUaGlzIGZ1bmN0aW9uIGNhbiBzbGVlcC4gdGhlIGRyaXZlciBzaG91bGQgZW5zdXJlCi0JICogdGhlIHJhZGlvIGhhcyBiZWVuIHN3aXRoY2VkIGJlZm9yZSByZXR1cm4uCi0JICovCi0Jdm9pZCAoKnNldF9jaGFuKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzaG9ydCBjaCk7Ci0KLQkvKiBUaGVzZSBhcmUgbm90IHVzZWQgaWYgdGhlIGllZWUgc3RhY2sgdGFrZXMgY2FyZSBvZgotCSAqIHNjYW5uaW5nIChJRUVFX1NPRlRNQUNfU0NBTiBmZWF0dXJlIHNldCkuCi0JICogSW4gdGhpcyBjYXNlIG9ubHkgdGhlIHNldF9jaGFuIGlzIHVzZWQuCi0JICoKLQkgKiBUaGUgc3luY3JvIHZlcnNpb24gaXMgc2ltaWxhciB0byB0aGUgc3RhcnRfc2NhbiBidXQKLQkgKiBkb2VzIG5vdCByZXR1cm4gdW50aWwgYWxsIGNoYW5uZWxzIGhhcyBiZWVuIHNjYW5uZWQuCi0JICogdGhpcyBpcyBjYWxsZWQgaW4gdXNlciBjb250ZXh0IGFuZCBzaG91bGQgc2xlZXAsCi0JICogaXQgaXMgY2FsbGVkIGluIGEgd29ya19xdWV1ZSB3aGVuIHN3aXRoY2luZyB0byBhZC1ob2MgbW9kZQotCSAqIG9yIGluIGJlaGFsZiBvZiBpd2xpc3Qgc2NhbiB3aGVuIHRoZSBjYXJkIGlzIGFzc29jaWF0ZWQKLQkgKiBhbmQgcm9vdCB1c2VyIGFzayBmb3IgYSBzY2FuLgotCSAqIHRoZSBmdWNudGlvbiBzdG9wX3NjYW4gc2hvdWxkIHN0b3AgYm90aCB0aGUgc3luY3JvIGFuZAotCSAqIGJhY2tncm91bmQgc2Nhbm5pbmcgYW5kIGNhbiBzbGVlcC4KLQkgKiBUaGUgZnVjbnRpb24gc3RhcnRfc2NhbiBzaG91bGQgaW5pdGlhdGUgdGhlIGJhY2tncm91bmQKLQkgKiBzY2FubmluZyBhbmQgY2FuJ3Qgc2xlZXAuCi0JICovCi0Jdm9pZCAoKnNjYW5fc3luY3JvKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQl2b2lkICgqc3RhcnRfc2Nhbikoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0Jdm9pZCAoKnN0b3Bfc2Nhbikoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLQkvKiBpbmRpY2F0ZSB0aGUgZHJpdmVyIHRoYXQgdGhlIGxpbmsgc3RhdGUgaXMgY2hhbmdlZAotCSAqIGZvciBleGFtcGxlIGl0IG1heSBpbmRpY2F0ZSB0aGUgY2FyZCBpcyBhc3NvY2lhdGVkIG5vdy4KLQkgKiBEcml2ZXIgbWlnaHQgYmUgaW50ZXJlc3RlZCBpbiB0aGlzIHRvIGFwcGx5IFJYIGZpbHRlcgotCSAqIHJ1bGVzIG9yIHNpbXBseSBsaWdodCB0aGUgTElOSyBsZWQKLQkgKi8KLQl2b2lkICgqbGlua19jaGFuZ2UpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi0JLyogdGhlc2UgdHdvIGZ1bmN0aW9uIGluZGljYXRlcyB0byB0aGUgSFcgd2hlbiB0byBzdGFydAotCSAqIGFuZCBzdG9wIHRvIHNlbmQgYmVhY29ucy4gVGhpcyBpcyB1c2VkIHdoZW4gdGhlCi0JICogSUVFRV9TT0ZUTUFDX0JFQUNPTlMgaXMgbm90IHNldC4gRm9yIG5vdyB0aGUKLQkgKiBzdG9wX3NlbmRfYmFjb25zIGlzIE5PVCBndWFyYW50ZWVkIHRvIGJlIGNhbGxlZCBvbmx5Ci0JICogYWZ0ZXIgc3RhcnRfc2VuZF9iZWFjb25zLgotCSAqLwotCXZvaWQgKCpzdGFydF9zZW5kX2JlYWNvbnMpIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdHhfcmF0ZSk7Ci0Jdm9pZCAoKnN0b3Bfc2VuZF9iZWFjb25zKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLQkvKiBwb3dlciBzYXZlIG1vZGUgcmVsYXRlZCAqLwotCXZvaWQgKCpzdGFfd2FrZV91cCkgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCXZvaWQgKCpwc19yZXF1ZXN0X3R4X2FjaykgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCXZvaWQgKCplbnRlcl9zbGVlcF9zdGF0ZSkgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiB0aCwgdTMyIHRsKTsKLQlzaG9ydCAoKnBzX2lzX3F1ZXVlX2VtcHR5KSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0JaW50ICgqaGFuZGxlX2JlYWNvbikgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfYmVhY29uICpiZWFjb24sIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29yayk7Ci0JaW50ICgqaGFuZGxlX2Fzc29jX3Jlc3BvbnNlKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXNwb25zZV9mcmFtZSAqcmVzcCwgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrKTsKLQotCi0JLyogY2hlY2sgd2hldGhlciBUeCBodyByZXNvdWNlIGF2YWlsYWJsZSAqLwotCXNob3J0ICgqY2hlY2tfbmljX2Vub3VnaF9kZXNjKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcXVldWVfaW5kZXgpOwotCS8qIGFkZGVkIGJ5IHdiIGZvciBIVCByZWxhdGVkICovCi0Jdm9pZCAoKlNldEJXTW9kZUhhbmRsZXIpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIEhUX0NIQU5ORUxfV0lEVEggQmFuZHdpZHRoLCBIVF9FWFRDSE5MX09GRlNFVCBPZmZzZXQpOwotCWJvb2wgKCpHZXRObW9kZVN1cHBvcnRCeVNlY0NmZykoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0Jdm9pZCAoKlNldFdpcmVsZXNzTW9kZSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggd2lyZWxlc3NfbW9kZSk7Ci0JYm9vbCAoKkdldEhhbGZObW9kZVN1cHBvcnRCeUFQc0hhbmRsZXIpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCXZvaWQgKCpJbml0aWFsR2FpbkhhbmRsZXIpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IE9wZXJhdGlvbik7Ci0KLQkvKiBUaGlzIG11c3QgYmUgdGhlIGxhc3QgaXRlbSBzbyB0aGF0IGl0IHBvaW50cyB0byB0aGUgZGF0YQotCSAqIGFsbG9jYXRlZCBiZXlvbmQgdGhpcyBzdHJ1Y3R1cmUgYnkgYWxsb2NfaWVlZTgwMjExICovCi0JdTggcHJpdlswXTsKLX07Ci0KLSNkZWZpbmUgSUVFRV9BICAgICAgICAgICAgKDE8PDApCi0jZGVmaW5lIElFRUVfQiAgICAgICAgICAgICgxPDwxKQotI2RlZmluZSBJRUVFX0cgICAgICAgICAgICAoMTw8MikKLSNkZWZpbmUgSUVFRV9OXzI0RyAJCSAgKDE8PDQpCi0jZGVmaW5lCUlFRUVfTl81RwkJICAoMTw8NSkKLSNkZWZpbmUgSUVFRV9NT0RFX01BU0sgICAgKElFRUVfQXxJRUVFX0J8SUVFRV9HKQotCi0vKiBHZW5lcmF0ZSBhIDgwMi4xMSBoZWFkZXIgKi8KLQotLyogVXNlcyB0aGUgY2hhbm5lbCBjaGFuZ2UgY2FsbGJhY2sgZGlyZWN0bHkKLSAqIGluc3RlYWQgb2YgW3N0YXJ0L3N0b3BdIHNjYW4gY2FsbGJhY2tzCi0gKi8KLSNkZWZpbmUgSUVFRV9TT0ZUTUFDX1NDQU4gKDE8PDIpCi0KLS8qIFBlcmZvcm0gYXV0aGVudGljYXRpb24gYW5kIGFzc29jaWF0aW9uIGhhbmRzaGFrZSAqLwotI2RlZmluZSBJRUVFX1NPRlRNQUNfQVNTT0NJQVRFICgxPDwzKQotCi0vKiBHZW5lcmF0ZSBwcm9iZSByZXF1ZXN0cyAqLwotI2RlZmluZSBJRUVFX1NPRlRNQUNfUFJPQkVSUSAoMTw8NCkKLQotLyogR2VuZXJhdGUgcmVzcG9uZXMgdG8gcHJvYmUgcmVxdWVzdHMgKi8KLSNkZWZpbmUgSUVFRV9TT0ZUTUFDX1BST0JFUlMgKDE8PDUpCi0KLS8qIFRoZSBpZWVlODAyLjExIHN0YWNrIHdpbGwgbWFuYWdlcyB0aGUgbmV0aWYgcXVldWUKLSAqIHdha2Uvc3RvcCBmb3IgdGhlIGRyaXZlciwgdGFraW5nIGNhcmUgb2YgODAyLjExCi0gKiBmcmFnbWVudGF0aW9uLiBTZWUgc29mdG1hYy5jIGZvciBkZXRhaWxzLiAqLwotI2RlZmluZSBJRUVFX1NPRlRNQUNfVFhfUVVFVUUgKDE8PDcpCi0KLS8qIFVzZXMgb25seSB0aGUgc29mdG1hY19kYXRhX2hhcmRfc3RhcnRfeG1pdAotICogZXZlbiBmb3IgVFggbWFuYWdlbWVudCBmcmFtZXMuCi0gKi8KLSNkZWZpbmUgSUVFRV9TT0ZUTUFDX1NJTkdMRV9RVUVVRSAoMTw8OCkKLQotLyogR2VuZXJhdGUgYmVhY29ucy4gIFRoZSBzdGFjayB3aWxsIGVucXVldWUgYmVhY29ucwotICogdG8gdGhlIGNhcmQKLSAqLwotI2RlZmluZSBJRUVFX1NPRlRNQUNfQkVBQ09OUyAoMTw8NikKLQotc3RhdGljIGlubGluZSB2b2lkICppZWVlODAyMTFfcHJpdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiAoKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICopbmV0ZGV2X3ByaXYoZGV2KSktPnByaXY7Ci19Ci0KLWV4dGVybiBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19lbXB0eV9lc3NpZChjb25zdCBjaGFyICplc3NpZCwgaW50IGVzc2lkX2xlbikKLXsKLQkvKiBTaW5nbGUgd2hpdGUgc3BhY2UgaXMgZm9yIExpbmtzeXMgQVBzICovCi0JaWYgKGVzc2lkX2xlbiA9PSAxICYmIGVzc2lkWzBdID09ICcgJykKLQkJcmV0dXJuIDE7Ci0KLQkvKiBPdGhlcndpc2UsIGlmIHRoZSBlbnRpcmUgZXNzaWQgaXMgMCwgd2UgYXNzdW1lIGl0IGlzIGhpZGRlbiAqLwotCXdoaWxlIChlc3NpZF9sZW4pIHsKLQkJZXNzaWRfbGVuLS07Ci0JCWlmIChlc3NpZFtlc3NpZF9sZW5dICE9ICdcMCcpCi0JCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQotZXh0ZXJuIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX3ZhbGlkX21vZGUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIGludCBtb2RlKQotewotCS8qCi0JICogSXQgaXMgcG9zc2libGUgZm9yIGJvdGggYWNjZXNzIHBvaW50cyBhbmQgb3VyIGRldmljZSB0byBzdXBwb3J0Ci0JICogY29tYmluYXRpb25zIG9mIG1vZGVzLCBzbyBhcyBsb25nIGFzIHRoZXJlIGlzIG9uZSB2YWxpZCBjb21iaW5hdGlvbgotCSAqIG9mIGFwL2RldmljZSBzdXBwb3J0ZWQgbW9kZXMsIHRoZW4gcmV0dXJuIHN1Y2Nlc3MKLQkgKgotCSAqLwotCWlmICgobW9kZSAmIElFRUVfQSkgJiYKLQkgICAgKGllZWUtPm1vZHVsYXRpb24gJiBJRUVFODAyMTFfT0ZETV9NT0RVTEFUSU9OKSAmJgotCSAgICAoaWVlZS0+ZnJlcV9iYW5kICYgSUVFRTgwMjExXzUyR0haX0JBTkQpKQotCQlyZXR1cm4gMTsKLQotCWlmICgobW9kZSAmIElFRUVfRykgJiYKLQkgICAgKGllZWUtPm1vZHVsYXRpb24gJiBJRUVFODAyMTFfT0ZETV9NT0RVTEFUSU9OKSAmJgotCSAgICAoaWVlZS0+ZnJlcV9iYW5kICYgSUVFRTgwMjExXzI0R0haX0JBTkQpKQotCQlyZXR1cm4gMTsKLQotCWlmICgobW9kZSAmIElFRUVfQikgJiYKLQkgICAgKGllZWUtPm1vZHVsYXRpb24gJiBJRUVFODAyMTFfQ0NLX01PRFVMQVRJT04pICYmCi0JICAgIChpZWVlLT5mcmVxX2JhbmQgJiBJRUVFODAyMTFfMjRHSFpfQkFORCkpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWV4dGVybiBpbmxpbmUgaW50IGllZWU4MDIxMV9nZXRfaGRybGVuKHUxNiBmYykKLXsKLQlpbnQgaGRybGVuID0gSUVFRTgwMjExXzNBRERSX0xFTjsKLQotCXN3aXRjaCAoV0xBTl9GQ19HRVRfVFlQRShmYykpIHsKLQljYXNlIElFRUU4MDIxMV9GVFlQRV9EQVRBOgotCQlpZiAoKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKSAmJiAoZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTKSkKLQkJCWhkcmxlbiA9IElFRUU4MDIxMV80QUREUl9MRU47IC8qIEFkZHI0ICovCi0JCWlmIChJRUVFODAyMTFfUU9TX0hBU19TRVEoZmMpKQotCQkJaGRybGVuICs9IDI7IC8qIFFPUyBjdHJsKi8KLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfRlRZUEVfQ1RMOgotCQlzd2l0Y2ggKFdMQU5fRkNfR0VUX1NUWVBFKGZjKSkgewotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9DVFM6Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FDSzoKLQkJCWhkcmxlbiA9IElFRUU4MDIxMV8xQUREUl9MRU47Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWhkcmxlbiA9IElFRUU4MDIxMV8yQUREUl9MRU47Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gaGRybGVuOwotfQotCi1zdGF0aWMgaW5saW5lIHU4ICppZWVlODAyMTFfZ2V0X3BheWxvYWQoc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKLXsKLQlzd2l0Y2ggKGllZWU4MDIxMV9nZXRfaGRybGVuKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKSkpIHsKLQljYXNlIElFRUU4MDIxMV8xQUREUl9MRU46Ci0JCXJldHVybiAoKHN0cnVjdCBpZWVlODAyMTFfaGRyXzFhZGRyICopaGRyKS0+cGF5bG9hZDsKLQljYXNlIElFRUU4MDIxMV8yQUREUl9MRU46Ci0JCXJldHVybiAoKHN0cnVjdCBpZWVlODAyMTFfaGRyXzJhZGRyICopaGRyKS0+cGF5bG9hZDsKLQljYXNlIElFRUU4MDIxMV8zQUREUl9MRU46Ci0JCXJldHVybiAoKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICopaGRyKS0+cGF5bG9hZDsKLQljYXNlIElFRUU4MDIxMV80QUREUl9MRU46Ci0JCXJldHVybiAoKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopaGRyKS0+cGF5bG9hZDsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19vZmRtX3JhdGUodTggcmF0ZSkKLXsKLQlzd2l0Y2ggKHJhdGUgJiB+SUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSykgewotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV82TUI6Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzlNQjoKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQjoKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMThNQjoKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQjoKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQjoKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQjoKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQjoKLQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaXNfY2NrX3JhdGUodTggcmF0ZSkKLXsKLQlzd2l0Y2ggKHJhdGUgJiB+SUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSykgewotCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzFNQjoKLQljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV8yTUI6Ci0JY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfNU1COgotCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzExTUI6Ci0JCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKiBpZWVlODAyMTEuYyAqLwotZXh0ZXJuIHZvaWQgZnJlZV9pZWVlODAyMTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1leHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2llZWU4MDIxMShpbnQgc2l6ZW9mX3ByaXYpOwotCi1leHRlcm4gaW50IGllZWU4MDIxMV9zZXRfZW5jcnlwdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci0KLS8qIGllZWU4MDIxMV90eC5jICovCi0KLWV4dGVybiBpbnQgaWVlZTgwMjExX2VuY3J5cHRfZnJhZ21lbnQoCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0Jc3RydWN0IHNrX2J1ZmYgKmZyYWcsCi0JaW50IGhkcl9sZW4pOwotCi1leHRlcm4gaW50IGllZWU4MDIxMV94bWl0KHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3R4Yl9mcmVlKHN0cnVjdCBpZWVlODAyMTFfdHhiICopOwotCi0KLS8qIGllZWU4MDIxMV9yeC5jICovCi1leHRlcm4gaW50IGllZWU4MDIxMV9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnJ4X3N0YXRzKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV9yeF9tZ3Qoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZWFkZXIsCi0JCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnN0YXRzKTsKLQotLyogaWVlZTgwMjExX3d4LmMgKi8KLWV4dGVybiBpbnQgaWVlZTgwMjExX3d4X2dldF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICprZXkpOwotZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfc2V0X2VuY29kZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmtleSk7Ci1leHRlcm4gaW50IGllZWU4MDIxMV93eF9nZXRfZW5jb2RlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqa2V5KTsKLSNpZiBXSVJFTEVTU19FWFQgPj0gMTgKLWV4dGVybiBpbnQgaWVlZTgwMjExX3d4X2dldF9lbmNvZGVfZXh0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpOwotZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfc2V0X2VuY29kZV9leHQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSk7Ci1leHRlcm4gaW50IGllZWU4MDIxMV93eF9zZXRfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICAgIHN0cnVjdCBpd19wYXJhbSAqZGF0YSwgY2hhciAqZXh0cmEpOwotZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfc2V0X21sbWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSk7Ci0jZW5kaWYKLWV4dGVybiBpbnQgaWVlZTgwMjExX3d4X3NldF9nZW5faWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4ICppZSwgc2l6ZV90IGxlbik7Ci0KLS8qIGllZWU4MDIxMV9zb2Z0bWFjLmMgKi8KLWV4dGVybiBzaG9ydCBpZWVlODAyMTFfaXNfNTRnKHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayBuZXQpOwotZXh0ZXJuIHNob3J0IGllZWU4MDIxMV9pc19zaG9ydHNsb3Qoc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrIG5ldCk7Ci1leHRlcm4gaW50IGllZWU4MDIxMV9yeF9mcmFtZV9zb2Z0bWFjKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqcnhfc3RhdHMsIHUxNiB0eXBlLAotCQkJdTE2IHN0eXBlKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV9zb2Z0bWFjX25ld19uZXQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0KTsKLQotdm9pZCBTZW5kRGlzYXNzb2NpYXRpb24oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4KiBhc1N0YSwgdTggYXNSc24pOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqdHhiLCBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci0KLWV4dGVybiB2b2lkIGllZWU4MDIxMV9zdG9wX3NlbmRfYmVhY29ucyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBub3RpZnlfd3hfYXNzb2NfZXZlbnQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfY2hlY2tfYWxsX25ldHMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0YXJ0X2JzcyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfc3RhcnRfbWFzdGVyX2JzcyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfc3RhcnRfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfc29mdG1hY19pbml0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV9zb2Z0bWFjX2ZyZWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX2Fzc29jaWF0ZV9hYm9ydChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfZGlzYXNzb2NpYXRlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV9zdG9wX3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0YXJ0X3NjYW5fc3luY3JvKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV9jaGVja19hbGxfbmV0cyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfc3RhcnRfcHJvdG9jb2woc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0b3BfcHJvdG9jb2woc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc3RhcnRfcHJvdG9jb2woc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfcmVzZXRfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3dha2VfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0b3BfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfZ2V0X2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfc3RhcnRfc2VuZF9iZWFjb25zKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV9zdG9wX3NlbmRfYmVhY29ucyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gaW50IGllZWU4MDIxMV93cGFfc3VwcGxpY2FudF9pb2N0bChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IGl3X3BvaW50ICpwKTsKLWV4dGVybiB2b2lkIG5vdGlmeV93eF9hc3NvY19ldmVudChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfcHNfdHhfYWNrKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzaG9ydCBzdWNjZXNzKTsKLQotZXh0ZXJuIHZvaWQgc29mdG1hY19tZ210X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotCi0vKiBpZWVlODAyMTFfY3J5cHRfY2NtcCZ0a2lwJndlcC5jICovCi1leHRlcm4gdm9pZCBpZWVlODAyMTFfdGtpcF9udWxsKHZvaWQpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3dlcF9udWxsKHZvaWQpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX2NjbXBfbnVsbCh2b2lkKTsKLQotLyogaWVlZTgwMjExX3NvZnRtYWNfd3guYyAqLwotCi1leHRlcm4gaW50IGllZWU4MDIxMV93eF9nZXRfd2FwKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0KTsKLQotZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfc2V0X3dhcChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJIHVuaW9uIGl3cmVxX2RhdGEgKmF3cnEsCi0JCQkgY2hhciAqZXh0cmEpOwotCi1leHRlcm4gaW50IGllZWU4MDIxMV93eF9nZXRfZXNzaWQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqYSwKLQkJCQl1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpiKTsKLQotZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfc2V0X3JhdGUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKTsKLQotZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfZ2V0X3JhdGUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKTsKLQotZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfc2V0X21vZGUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmEsCi0JCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmIpOwotCi1leHRlcm4gaW50IGllZWU4MDIxMV93eF9zZXRfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqYSwKLQkJCSAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqYik7Ci0KLWV4dGVybiBpbnQgaWVlZTgwMjExX3d4X3NldF9lc3NpZChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmEsCi0JCQkgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSk7Ci0KLWV4dGVybiBpbnQgaWVlZTgwMjExX3d4X2dldF9tb2RlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICphLAotCQkJICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpiKTsKLQotZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfc2V0X2ZyZXEoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmEsCi0JCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmIpOwotCi1leHRlcm4gaW50IGllZWU4MDIxMV93eF9nZXRfZnJlcShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqYSwKLQkJCSAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqYik7Ci0KLWV4dGVybiB2b2lkIGllZWU4MDIxMV93eF9zeW5jX3NjYW5fd3Eoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLQotCi1leHRlcm4gaW50IGllZWU4MDIxMV93eF9zZXRfcmF3dHgoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSk7Ci0KLWV4dGVybiBpbnQgaWVlZTgwMjExX3d4X2dldF9uYW1lKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSk7Ci0KLWV4dGVybiBpbnQgaWVlZTgwMjExX3d4X3NldF9wb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpOwotCi1leHRlcm4gaW50IGllZWU4MDIxMV93eF9nZXRfcG93ZXIoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKTsKLQotZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfc2V0X3J0cyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpOwotCi1leHRlcm4gaW50IGllZWU4MDIxMV93eF9nZXRfcnRzKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSk7Ci0vKiBIVCAqLwotI2RlZmluZSBNQVhfUkVDRUlWRV9CVUZGRVJfU0laRSA5MTAwCi1leHRlcm4gdm9pZCBIVERlYnVnSFRDYXBhYmlsaXR5KHU4ICpDYXBJRSwgdTggKlRpdGxlU3RyaW5nKTsKLWV4dGVybiB2b2lkIEhURGVidWdIVEluZm8odTggKkluZm9JRSwgdTggKlRpdGxlU3RyaW5nKTsKLQotdm9pZCBIVFNldENvbm5lY3RCd01vZGUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIEhUX0NIQU5ORUxfV0lEVEggQmFuZHdpZHRoLCBIVF9FWFRDSE5MX09GRlNFVCAgICBPZmZzZXQpOwotZXh0ZXJuIHZvaWQgSFRVcGRhdGVEZWZhdWx0U2V0dGluZyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBIVENvbnN0cnVjdENhcGFiaWxpdHlFbGVtZW50KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1OCAqcG9zSFRDYXAsIHU4ICpsZW4sIHU4IGlzRW5jcnlwdCk7Ci1leHRlcm4gdm9pZCBIVENvbnN0cnVjdEluZm9FbGVtZW50KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1OCAqcG9zSFRJbmZvLCB1OCAqbGVuLCB1OCBpc0VuY3J5cHQpOwotZXh0ZXJuIHZvaWQgSFRDb25zdHJ1Y3RSVDJSVEFnZ0VsZW1lbnQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4ICpwb3NSVDJSVEFnZywgdTggKmxlbik7Ci1leHRlcm4gdm9pZCBIVE9uQXNzb2NSc3Aoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgSFRJbml0aWFsaXplSFRJbmZvKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiB2b2lkIEhUSW5pdGlhbGl6ZUJzc0Rlc2MoUEJTU19IVCBwQnNzSFQpOwotZXh0ZXJuIHZvaWQgSFRSZXNldFNlbGZBbmRTYXZlUGVlclNldHRpbmcoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqcE5ldHdvcmspOwotZXh0ZXJuIHZvaWQgSFRVcGRhdGVTZWxmQW5kUGVlclNldHRpbmcoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpwTmV0d29yayk7Ci1leHRlcm4gdTggSFRHZXRIaWdoZXN0TUNTUmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgdTggKnBNQ1NSYXRlU2V0LCB1OCAqcE1DU0ZpbHRlcik7Ci1leHRlcm4gdTggTUNTX0ZJTFRFUl9BTExbXTsKLWV4dGVybiB1MTYgTUNTX0RBVEFfUkFURVsyXVsyXVs3N10gOwotZXh0ZXJuIHU4IEhUQ0NoZWNrKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1OCAqcEZyYW1lKTsKLWV4dGVybiB2b2lkIEhUUmVzZXRJT1RTZXR0aW5nKFBSVF9ISUdIX1RIUk9VR0hQVVQgIHBIVEluZm8pOwotZXh0ZXJuIGJvb2wgSXNIVEhhbGZObW9kZUFQcyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdTE2IEhUSGFsZk1jc1RvRGF0YVJhdGUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsICB1OCAgICAgIG5NY3NSYXRlKTsKLWV4dGVybiB1MTYgSFRNY3NUb0RhdGFSYXRlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1OCBuTWNzUmF0ZSk7Ci1leHRlcm4gdTE2ICBUeENvdW50VG9EYXRhUmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgdTggbkRhdGFSYXRlKTsKLS8qIGZ1bmN0aW9uIGluIEJBUFJPQy5jICovCi1leHRlcm4gaW50IGllZWU4MDIxMV9yeF9BRERCQVJlcShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1leHRlcm4gaW50IGllZWU4MDIxMV9yeF9BRERCQVJzcChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1leHRlcm4gaW50IGllZWU4MDIxMV9yeF9ERUxCQShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1leHRlcm4gdm9pZCBUc0luaXRBZGRCQShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgUFRYX1RTX1JFQ09SRCAgIHBUUywgdTggUG9saWN5LCB1OCBiT3ZlcndyaXRlUGVuZGluZyk7Ci1leHRlcm4gdm9pZCBUc0luaXREZWxCQShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgUFRTX0NPTU1PTl9JTkZPIHBUc0NvbW1vbkluZm8sIFRSX1NFTEVDVCBUeFJ4U2VsZWN0KTsKLWV4dGVybiB2b2lkIEJhU2V0dXBUaW1lT3V0KHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci1leHRlcm4gdm9pZCBUeEJhSW5hY3RUaW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci1leHRlcm4gdm9pZCBSeEJhSW5hY3RUaW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci1leHRlcm4gdm9pZCBSZXNldEJhRW50cnkoUEJBX1JFQ09SRCBwQkEpOwotLyogZnVuY3Rpb24gaW4gVFMuYyAqLwotZXh0ZXJuIGJvb2wgR2V0VHMoCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JUFRTX0NPTU1PTl9JTkZPICpwcFRTLAotCXU4CQkJCSpBZGRyLAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElELAotCVRSX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgVHhSeFNlbGVjdCwgIC8qIFJ4OjEsIFR4OjAgKi8KLQlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJBZGROZXdUcwotCSk7Ci1leHRlcm4gdm9pZCBUU0luaXRpYWxpemUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuICB2b2lkIFRzU3RhcnRBZGRCYVByb2Nlc3Moc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIFBUWF9UU19SRUNPUkQgICBwVHhUUyk7Ci1leHRlcm4gdm9pZCBSZW1vdmVQZWVyVFMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4ICpBZGRyKTsKLWV4dGVybiB2b2lkIFJlbW92ZUFsbFRTKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLXZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc2Nhbl9zeW5jcm8oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotCi1leHRlcm4gY29uc3QgbG9uZyBpZWVlODAyMTFfd2xhbl9mcmVxdWVuY2llc1tdOwotCi1leHRlcm4gaW5saW5lIHZvaWQgaWVlZTgwMjExX2luY3JlbWVudF9zY2FucyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKLXsKLQlpZWVlLT5zY2FucysrOwotfQotCi1leHRlcm4gaW5saW5lIGludCBpZWVlODAyMTFfZ2V0X3NjYW5zKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQotewotCXJldHVybiBpZWVlLT5zY2FuczsKLX0KLQotc3RhdGljIGlubGluZSBjb25zdCBjaGFyICplc2NhcGVfZXNzaWQoY29uc3QgY2hhciAqZXNzaWQsIHU4IGVzc2lkX2xlbikKLXsKLQlzdGF0aWMgY2hhciBlc2NhcGVkW0lXX0VTU0lEX01BWF9TSVpFICogMiArIDFdOwotCWNvbnN0IGNoYXIgKnMgPSBlc3NpZDsKLQljaGFyICpkID0gZXNjYXBlZDsKLQotCWlmIChpZWVlODAyMTFfaXNfZW1wdHlfZXNzaWQoZXNzaWQsIGVzc2lkX2xlbikpIHsKLQkJbWVtY3B5KGVzY2FwZWQsICI8aGlkZGVuPiIsIHNpemVvZigiPGhpZGRlbj4iKSk7Ci0JCXJldHVybiBlc2NhcGVkOwotCX0KLQotCWVzc2lkX2xlbiA9IG1pbihlc3NpZF9sZW4sICh1OClJV19FU1NJRF9NQVhfU0laRSk7Ci0Jd2hpbGUgKGVzc2lkX2xlbi0tKSB7Ci0JCWlmICgqcyA9PSAnXDAnKSB7Ci0JCQkqZCsrID0gJ1xcJzsKLQkJCSpkKysgPSAnMCc7Ci0JCQlzKys7Ci0JCX0gZWxzZSB7Ci0JCQkqZCsrID0gKnMrKzsKLQkJfQotCX0KLQkqZCA9ICdcMCc7Ci0JcmV0dXJuIGVzY2FwZWQ7Ci19Ci0KLS8qIEZvciB0aGUgZnVuY3Rpb24gaXMgbW9yZSByZWxhdGVkIHRvIGhhcmR3YXJlIHNldHRpbmcsIGl0J3MgYmV0dGVyIHRvIHVzZSB0aGUKLSAqIGllZWUgaGFuZGxlciB0byByZWZlciB0byBpdC4KLSAqLwotZXh0ZXJuIHNob3J0IGNoZWNrX25pY19lbm91Z2hfZGVzYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcXVldWVfaW5kZXgpOwotZXh0ZXJuIGludCBpZWVlODAyMTFfZGF0YV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotZXh0ZXJuIGludCBpZWVlODAyMTFfcGFyc2VfaW5mb19wYXJhbShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgKmluZm9fZWxlbWVudCwKLQkJdTE2IGxlbmd0aCwKLQkJc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrLAotCQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cyk7Ci0KLXZvaWQgaWVlZTgwMjExX2luZGljYXRlX3BhY2tldHMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHN0cnVjdCBpZWVlODAyMTFfcnhiICoqcHJ4YkluZGljYXRlQXJyYXksIHU4ICBpbmRleCk7Ci0jZGVmaW5lIFJUX0FTT0NfUkVUUllfTElNSVQJNQotI2VuZGlmIC8qIElFRUU4MDIxMV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwppbmRleCBmYjc4ZWQyLi5kNmY1NWMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKQEAgLTg1LDcgKzg1LDcgQEAKIAl9CiAJLyogQWRkIHRoZSBwcm90b2NvbCBuYW1lICovCiAJaXdlLmNtZCA9IFNJT0NHSVdOQU1FOwotCWZvcihpPTA7IGk8KHNpemVvZihpZWVlODAyMTFfbW9kZXMpL3NpemVvZihpZWVlODAyMTFfbW9kZXNbMF0pKTsgaSsrKSB7CisJZm9yKGk9MDsgaTxBUlJBWV9TSVpFKGllZWU4MDIxMV9tb2Rlcyk7IGkrKykgewogCQlpZihuZXR3b3JrLT5tb2RlJigxPDxpKSkgewogCQkJc3ByaW50ZihwbmFtZSxpZWVlODAyMTFfbW9kZXNbaV0ubW9kZV9zdHJpbmcsaWVlZTgwMjExX21vZGVzW2ldLm1vZGVfc2l6ZSk7CiAJCQlwbmFtZSArPWllZWU4MDIxMV9tb2Rlc1tpXS5tb2RlX3NpemU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOTJVLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOTJVLmgKaW5kZXggNjlhMjcyMS4uNjIwNmY5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTkyVS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5MlUuaApAQCAtMzksNyArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlICJpZWVlODAyMTEuaCIKKyNpbmNsdWRlICJpZWVlODAyMTEvaWVlZTgwMjExLmgiCiAKICNkZWZpbmUgUlRMODE5MlUKICNkZWZpbmUgUlRMODE5eFVfTU9EVUxFX05BTUUgInJ0bDgxOXhVIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTkyVV9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOTJVX2NvcmUuYwppbmRleCBmMzg0NzJjLi4xZmY3ODUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOTJVX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOTJVX2NvcmUuYwpAQCAtNDEwLDE0ICs0MTAsMTIgQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHByaXYtPnVkZXY7CiAKIAlzdGF0dXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLAotCQkJICAgICAgIFJUTDgxODdfUkVRX0dFVF9SRUdTLCBSVEw4MTg3X1JFUVRfUkVBRCwKLQkJCSAgICAgICAoaW5keCYweGZmKXwweGZmMDAsIChpbmR4Pj44KSYweDBmLCAmZGF0YSwgMiwgSFogLyAyKTsKKwkJCQkgICAgICAgUlRMODE4N19SRVFfR0VUX1JFR1MsIFJUTDgxODdfUkVRVF9SRUFELAorCQkJCSAgICAgICAoaW5keCYweGZmKXwweGZmMDAsIChpbmR4Pj44KSYweDBmLAorCQkJCQkJCSZkYXRhLCAyLCBIWiAvIDIpOwogCiAJaWYgKHN0YXR1cyA8IDApCi0JewogCQlwcmludGsoInJlYWRfbmljX3dvcmQgVGltZU91dCEgc3RhdHVzOiVkXG4iLCBzdGF0dXMpOwotCX0KLQogCiAJcmV0dXJuIGRhdGE7CiB9CkBAIC00MzEsMTMgKzQyOSwxMCBAQAogCiAJc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwKIAkJCSAgICAgICBSVEw4MTg3X1JFUV9HRVRfUkVHUywgUlRMODE4N19SRVFUX1JFQUQsCi0JCQkgICAgICAgaW5keHwweGZlMDAsIDAsICZkYXRhLCAyLCBIWiAvIDIpOworCQkJCSAgICAgICBpbmR4fDB4ZmUwMCwgMCwgJmRhdGEsIDIsIEhaIC8gMik7CiAKIAlpZiAoc3RhdHVzIDwgMCkKLQl7CiAJCXByaW50aygicmVhZF9uaWNfd29yZCBUaW1lT3V0ISBzdGF0dXM6JWRcbiIsIHN0YXR1cyk7Ci0JfQotCiAKIAlyZXR1cm4gZGF0YTsKIH0KQEAgLTQ0NiwzMSArNDQxLDI5IEBACiB7CiAJdTMyIGRhdGE7CiAJaW50IHN0YXR1czsKLS8vCWludCByZXN1bHQ7CisJLyogaW50IHJlc3VsdDsgKi8KIAogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gKHN0cnVjdCByODE5Ml9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHByaXYtPnVkZXY7CiAKIAlzdGF0dXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLAotCQkJICAgICAgIFJUTDgxODdfUkVRX0dFVF9SRUdTLCBSVEw4MTg3X1JFUVRfUkVBRCwKLQkJCSAgICAgICAoaW5keCYweGZmKXwweGZmMDAsIChpbmR4Pj44KSYweDBmLCAmZGF0YSwgNCwgSFogLyAyKTsKLS8vCWlmKDAgIT0gcmVzdWx0KSB7Ci0vLwkgIHByaW50ayhLRVJOX1dBUk5JTkcgInJlYWQgc2l6ZSBvZiBkYXRhID0gJWRcLCBkYXRlID0gJWRcbiIsIHJlc3VsdCwgZGF0YSk7Ci0vLwl9CisJCQkJICAgICAgIFJUTDgxODdfUkVRX0dFVF9SRUdTLCBSVEw4MTg3X1JFUVRfUkVBRCwKKwkJCQkJKGluZHgmMHhmZil8MHhmZjAwLCAoaW5keD4+OCkmMHgwZiwKKwkJCQkJCQkmZGF0YSwgNCwgSFogLyAyKTsKKwkvKiBpZigwICE9IHJlc3VsdCkgeworCSAqCXByaW50ayhLRVJOX1dBUk5JTkcgInJlYWQgc2l6ZSBvZiBkYXRhID0gJWRcLCBkYXRlID0gJWRcbiIsCisJICoJCQkJCQkJIHJlc3VsdCwgZGF0YSk7CisJICogfQorCSAqLwogCiAJaWYgKHN0YXR1cyA8IDApCi0JewogCQlwcmludGsoInJlYWRfbmljX2R3b3JkIFRpbWVPdXQhIHN0YXR1czolZFxuIiwgc3RhdHVzKTsKLQl9Ci0KLQogCiAJcmV0dXJuIGRhdGE7CiB9CiAKLQotLy91OCByZWFkX3BoeV9jY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggYWRyKTsKLS8vdTggcmVhZF9waHlfb2ZkbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBhZHIpOworLyogdTggcmVhZF9waHlfY2NrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGFkcik7ICovCisvKiB1OCByZWFkX3BoeV9vZmRtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGFkcik7ICovCiAvKiB0aGlzIG1pZ2h0IHN0aWxsIGNhbGxlZCBpbiB3aGF0IHdhcyB0aGUgUEhZIHJ0bDgxODUvcnRsODE5MiBjb21tb24gY29kZQogICogcGxhbnMgYXJlIHRvIHBvc3NpYmlsdHkgdHVybiBpdCBhZ2FpbiBpbiBvbmUgY29tbW9uIGNvZGUuLi4KICAqLwpAQCAtNDc4LDI2ICs0NzEsMjIgQEAKIHsKIH0KIAotCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnJ0bDgxOTJfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiB2b2lkIHJ0bDgxOTJfY29tbWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotLy92b2lkIHJ0bDgxOTJfcmVzdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKy8qIHZvaWQgcnRsODE5Ml9yZXN0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOyAqLwogdm9pZCBydGw4MTkyX3Jlc3RhcnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLS8vdm9pZCBydGw4MTkyX3JxX3R4X2FjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotCisvKiB2b2lkIHJ0bDgxOTJfcnFfdHhfYWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7ICovCiB2b2lkIHdhdGNoX2RvZ190aW1lcl9jYWxsYmFjayh1bnNpZ25lZCBsb25nIGRhdGEpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1QUk9DRlMgU1RVRkYtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAqICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1QUk9DRlMgU1RVRkYtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCiAKLXN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnJ0bDgxOTJfcHJvYyA9IE5VTEw7CitzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpydGw4MTkyX3Byb2M7CiAKLQotCi1zdGF0aWMgaW50IHByb2NfZ2V0X3N0YXRzX2FwKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwKLQkJCSAgb2ZmX3Qgb2Zmc2V0LCBpbnQgY291bnQsCi0JCQkgIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBwcm9jX2dldF9zdGF0c19hcChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IGNvdW50LAorCQkJCQkJCWludCAqZW9mLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkYXRhOwogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gKHN0cnVjdCByODE5Ml9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKQEAgLTUwOCwxOCArNDk3LDEyIEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRhcmdldCwgJmllZWUtPm5ldHdvcmtfbGlzdCwgbGlzdCkgewogCi0JCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBjb3VudCAtIGxlbiwKLQkJIiVzICIsIHRhcmdldC0+c3NpZCk7CisJCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBjb3VudCAtIGxlbiwgIiVzICIsIHRhcmdldC0+c3NpZCk7CiAKLQkJaWYodGFyZ2V0LT53cGFfaWVfbGVuPjAgfHwgdGFyZ2V0LT5yc25faWVfbGVuPjApewotCQkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIGNvdW50IC0gbGVuLAotCQkJIldQQVxuIik7Ci0JCX0KLQkJZWxzZXsKLQkJCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBjb3VudCAtIGxlbiwKLQkJCSJub25fV1BBXG4iKTsKLQkJfQotCisJCWlmICh0YXJnZXQtPndwYV9pZV9sZW4gPiAwIHx8IHRhcmdldC0+cnNuX2llX2xlbiA+IDApCisJCQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgY291bnQgLSBsZW4sICJXUEFcbiIpOworCQllbHNlCisJCQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgY291bnQgLSBsZW4sICJub25fV1BBXG4iKTsKIAl9CiAKIAkqZW9mID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5MlVfd3guaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5MlVfd3guaAppbmRleCBiMmY3YTU3Li5mNGNmMjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOTJVX3d4LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTkyVV93eC5oCkBAIC0xNSw3ICsxNSw3IEBACiAjaWZuZGVmIFI4MTgwX1dYX0gKICNkZWZpbmUgUjgxODBfV1hfSAogLy8jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KLS8vI2luY2x1ZGUgImllZWU4MDIxMS5oIgorCiBleHRlcm4gc3RydWN0IGl3X2hhbmRsZXJfZGVmIHI4MTkyX3d4X2hhbmRsZXJzX2RlZjsKIC8qIEVuYWJsZSAgdGhlIHJ0bDgxOXhfY29yZS5jIHRvIHNoYXJlIHRoaXMgZnVuY3Rpb24sIGRhdmlkIDIwMDguOS4yMiAqLwogZXh0ZXJuIHN0cnVjdCBpd19zdGF0aXN0aWNzICpyODE5Ml9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOXhVX2Zpcm13YXJlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOXhVX2Zpcm13YXJlLmMKaW5kZXggM2NjMmQ1Ny4uYjEzNmVlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTl4VV9maXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5eFVfZmlybXdhcmUuYwpAQCAtMTEsNyArMTEsNyBAQAogICogICAgICAgIE5ESVNfU1RBVFVTX0ZBSUxVUkUgLSB0aGUgZm9sbG93aW5nIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgc2hvdWxkIGJlIHRlcm1pbmF0ZWQKICAqICAgICAgICBORElTX1NUQVRVU19TVUNDRVNTIC0gaWYgZmlybXdhcmUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBzdWNjZXNzCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vI2luY2x1ZGUgImllZWU4MDIxMS5oIgorCiAjaW5jbHVkZSAicjgxOTJVLmgiCiAjaW5jbHVkZSAicjgxOTJVX2h3LmgiCiAjaW5jbHVkZSAicjgxOXhVX2Zpcm13YXJlX2ltZy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NlcC9zZXBfZHJpdmVyX2FwaS5oIGIvZHJpdmVycy9zdGFnaW5nL3NlcC9zZXBfZHJpdmVyX2FwaS5oCmluZGV4IDM4MzU0M2QuLjdlZjE2ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zZXAvc2VwX2RyaXZlcl9hcGkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2VwL3NlcF9kcml2ZXJfYXBpLmgKQEAgLTY1LDcgKzY1LDcgQEAKIC8qIGZyZWUgZHluYW1pYyBkYXRhIGFhbG9jYXRlZCBkdXJpbmcgdGFibGUgY3JlYXRpb24gKi8KICNkZWZpbmUgU0VQX0lPQ0ZSRUVETUFUQUJMRURBVEEgICAgICAgICAgICAgICAgX0lPKFNFUF9JT0NfTUFHSUNfTlVNQkVSICwgNykKIAotLyogZ2V0IHRoZSBzdGF0aWMgcG9vbCBhcmVhIGFkZGVyc3NlcyAocGh5c2ljYWwgYW5kIHZpcnR1YWwpICovCisvKiBnZXQgdGhlIHN0YXRpYyBwb29sIGFyZWEgYWRkcmVzc2VzIChwaHlzaWNhbCBhbmQgdmlydHVhbCkgKi8KICNkZWZpbmUgU0VQX0lPQ0dFVFNUQVRJQ1BPT0xBRERSICAgICAgICAgICAgICAgX0lPKFNFUF9JT0NfTUFHSUNfTlVNQkVSICwgOCkKIAogLyogc2V0IGZsb3cgaWQgY29tbWFuZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpYy5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpYy5oCmluZGV4IGViM2E2MTkuLmJlYWI0MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljLmgKQEAgLTE2OCwxNyArMTY4LDYgQEAKIAlzdHJ1Y3Qgc2xpY19zcGlubG9jayBsb2NrOwogfTsKIAotI2lmZGVmIFNUQVRVU19TVUNDRVNTCi0jdW5kZWYgU1RBVFVTX1NVQ0NFU1MKLSNlbmRpZgotCi0jZGVmaW5lIFNUQVRVU19TVUNDRVNTICAgICAgICAgICAgICAwCi0jZGVmaW5lIFNUQVRVU19QRU5ESU5HICAgICAgICAgICAgICAwCi0jZGVmaW5lIFNUQVRVU19GQUlMVVJFICAgICAgICAgICAgIC0xCi0jZGVmaW5lIFNUQVRVU19FUlJPUiAgICAgICAgICAgICAgIC0yCi0jZGVmaW5lIFNUQVRVU19OT1RfU1VQUE9SVEVEICAgICAgIC0zCi0jZGVmaW5lIFNUQVRVU19CVUZGRVJfVE9PX1NIT1JUICAgIC00Ci0KICNkZWZpbmUgU0xJQ19NQVhfQ0FSRFMgICAgICAgICAgICAgIDMyCiAjZGVmaW5lIFNMSUNfTUFYX1BPUlRTICAgICAgICAgICAgICA0ICAgICAgICAvKiBNYXggIyBvZiBwb3J0cyBwZXIgY2FyZCAgICovCiAKQEAgLTUxMCw3ICs0OTksNiBAQAogICAgIHN0cnVjdCBzbGljX2lmZXZlbnRzICBpZl9ldmVudHM7CiAgICAgc3RydWN0IHNsaWNfc3RhdHMgICAgICAgIGluaWNzdGF0c19wcmV2OwogICAgIHN0cnVjdCBzbGljbmV0X3N0YXRzICAgICBzbGljX3N0YXRzOwotICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljb3NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljb3NzLmMKaW5kZXggYmViZjBmZC4uZjhjNGIxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY29zcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNvc3MuYwpAQCAtOTcsNjYgKzk3LDYgQEAKICNpbmNsdWRlICJzbGljaHcuaCIKICNpbmNsdWRlICJzbGljLmgiCiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc2xpY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IHNsaWNfZW50cnlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgc2xpY19lbnRyeV9oYWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBzbGljX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwotc3RhdGljIG5ldGRldl90eF90IHNsaWNfeG1pdF9zdGFydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIHNsaWNfeG1pdF9mYWlsKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgdm9pZCAqY21kLCB1MzIgc2tidHlwZSwgdTMyIHN0YXR1cyk7Ci1zdGF0aWMgdm9pZCBzbGljX2NvbmZpZ19wY2koc3RydWN0IHBjaV9kZXYgKnBjaWRldik7Ci1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnNsaWNfcmN2cXVldWVfZ2V0bmV4dChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgaW50IHNsaWNfbWFjX3NldF9hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnB0cik7Ci1zdGF0aWMgdm9pZCBzbGljX2xpbmtfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX3Vwcl9yZXF1ZXN0X2NvbXBsZXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgaXNyKTsKLXN0YXRpYyBpbnQgc2xpY19yc3BxdWV1ZV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfcnNwcXVldWVfZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgc3RydWN0IHNsaWNfcnNwYnVmICpzbGljX3JzcHF1ZXVlX2dldG5leHQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCBzbGljX2NtZHFfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX2NtZHFfZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX2NtZHFfcmVzZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgc2xpY19jbWRxX2FkZGNtZHBhZ2Uoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqcGFnZSk7Ci1zdGF0aWMgdm9pZCBzbGljX2NtZHFfZ2V0ZG9uZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX2NtZHFfcHV0ZG9uZV9pcnEoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJICBzdHJ1Y3Qgc2xpY19ob3N0Y21kICpjbWQpOwotc3RhdGljIHN0cnVjdCBzbGljX2hvc3RjbWQgKnNsaWNfY21kcV9nZXRmcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbnQgc2xpY19yY3ZxdWV1ZV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbnQgc2xpY19yY3ZxdWV1ZV9maWxsKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB1MzIgc2xpY19yY3ZxdWV1ZV9yZWluc2VydChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1zdGF0aWMgdm9pZCBzbGljX3JjdnF1ZXVlX2ZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgc2xpY19hZGFwdGVyX3NldF9od2FkZHIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCBzbGljX2NhcmRfaW5pdChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfaW50YWdnX3NldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIHZhbHVlKTsKLXN0YXRpYyBpbnQgc2xpY19jYXJkX2Rvd25sb2FkKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB1MzIgc2xpY19jYXJkX2xvY2F0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgaW50IHNsaWNfaWZfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgaW50IHNsaWNfYWRhcHRlcl9hbGxvY3Jlc291cmNlcyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX2FkYXB0ZXJfZnJlZXJlc291cmNlcyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX2xpbmtfY29uZmlnKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgbGlua3NwZWVkLAotCQkJICAgICB1MzIgbGlua2R1cGxleCk7Ci1zdGF0aWMgdm9pZCBzbGljX3VubWFwX21taW9fc3BhY2Uoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgc2xpY19jYXJkX2NsZWFudXAoc3RydWN0IHNsaWNjYXJkICpjYXJkKTsKLXN0YXRpYyB2b2lkIHNsaWNfc29mdF9yZXNldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgYm9vbCBzbGljX21hY19maWx0ZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkgICAgc3RydWN0IGV0aGVyX2hlYWRlciAqZXRoZXJfZnJhbWUpOwotc3RhdGljIHZvaWQgc2xpY19tYWNfYWRkcmVzc19jb25maWcoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgc2xpY19tYWNfY29uZmlnKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfbWNhc3Rfc2V0X21hc2soc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgc2xpY19jb25maWdfc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBib29sIGxpbmtjaGFuZ2UpOwotc3RhdGljIHZvaWQgc2xpY19jb25maWdfY2xlYXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgc2xpY19jb25maWdfZ2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgY29uZmlnLAotCQkJICAgIHUzMiBjb25maWdoKTsKLXN0YXRpYyB2b2lkIHNsaWNfdGltZXJfbG9hZF9jaGVjayh1bG9uZyBjb250ZXh0KTsKLXN0YXRpYyB2b2lkIHNsaWNfYXNzZXJ0X2ZhaWwodm9pZCk7Ci1zdGF0aWMgdXNob3J0IHNsaWNfZWVwcm9tX2Nrc3VtKGNoYXIgKm0sIGludCBsZW4pOwotc3RhdGljIHZvaWQgc2xpY191cHJfc3RhcnQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgc2xpY19saW5rX3Vwcl9jb21wbGV0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIElzcik7Ci1zdGF0aWMgaW50ICBzbGljX3Vwcl9yZXF1ZXN0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgdXByX3JlcXVlc3QsCi0JCQkgICAgIHUzMiB1cHJfZGF0YSwgdTMyIHVwcl9kYXRhX2gsIHUzMiB1cHJfYnVmZmVyLAotCQkJICAgICB1MzIgdXByX2J1ZmZlcl9oKTsKLXN0YXRpYyB2b2lkIHNsaWNfbWNhc3Rfc2V0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLQogc3RhdGljIHVpbnQgc2xpY19maXJzdF9pbml0ID0gMTsKIHN0YXRpYyBjaGFyICpzbGljX2Jhbm5lciA9ICJBbGFjcml0ZWNoIFNMSUMgVGVjaG5vbG9neSh0bSkgU2VydmVyICJcCiAJCSJhbmQgU3RvcmFnZSBBY2NlbGVyYXRvciAoTm9uLUFjY2VsZXJhdGVkKSI7CkBAIC0yMDYsNiArMTQ2LDE3IEBACiAjdW5kZWYgQVNTRVJUCiAjZW5kaWYKIAorc3RhdGljIHZvaWQgc2xpY19hc3NlcnRfZmFpbCh2b2lkKQoreworCXUzMiBjcHVpZDsKKwl1MzIgY3Vycl9waWQ7CisJY3B1aWQgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJY3Vycl9waWQgPSBjdXJyZW50LT5waWQ7CisKKwlwcmludGsoS0VSTl9FUlIgIiVzIENQVSAjICVkIC0tLS0gUElEICMgJWRcbiIsCisJICAgICAgIF9fZnVuY19fLCBjcHVpZCwgY3Vycl9waWQpOworfQorCiAjaWZuZGVmIEFTU0VSVAogI2RlZmluZSBBU1NFUlQoYSkgZG8gewkJCQkJCQlcCiAJaWYgKCEoYSkpIHsJCQkJCQkJXApAQCAtMjQxLDEzICsxOTIsNiBAQAogCQkJX2FkYXB0ZXItPmhhbmRsZV9sb2NrLmZsYWdzKTsgICAgICAgICAgICAgICAgICAgXAogfQogCi1zdGF0aWMgdm9pZCBzbGljX2RlYnVnX2luaXQodm9pZCk7Ci1zdGF0aWMgdm9pZCBzbGljX2RlYnVnX2NsZWFudXAodm9pZCk7Ci1zdGF0aWMgdm9pZCBzbGljX2RlYnVnX2FkYXB0ZXJfY3JlYXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfZGVidWdfYWRhcHRlcl9kZXN0cm95KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfZGVidWdfY2FyZF9jcmVhdGUoc3RydWN0IHNsaWNjYXJkICpjYXJkKTsKLXN0YXRpYyB2b2lkIHNsaWNfZGVidWdfY2FyZF9kZXN0cm95KHN0cnVjdCBzbGljY2FyZCAqY2FyZCk7Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBzbGljX3JlZzMyX3dyaXRlKHZvaWQgX19pb21lbSAqcmVnLCB1MzIgdmFsdWUsIGJvb2wgZmx1c2gpCiB7CiAJd3JpdGVsKHZhbHVlLCByZWcpOwpAQCAtMjcyLDEwMTYgKzIxNiw2IEBACiAJCQkJYWRhcHRlci0+Yml0NjRyZWdsb2NrLmZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgc2xpY19pbml0X2RyaXZlcih2b2lkKQotewotCWlmIChzbGljX2ZpcnN0X2luaXQpIHsKLQkJc2xpY19maXJzdF9pbml0ID0gMDsKLQkJc3Bpbl9sb2NrX2luaXQoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2spOwotCQlzbGljX2RlYnVnX2luaXQoKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHNsaWNfaW5pdF9hZGFwdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCQkgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2LAotCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV90YmxfZW50cnksCi0JCQkgICAgICB2b2lkIF9faW9tZW0gKm1lbWFkZHIsIGludCBjaGlwX2lkeCkKLXsKLQl1c2hvcnQgaW5kZXg7Ci0Jc3RydWN0IHNsaWNfaGFuZGxlICpwc2xpY19oYW5kbGU7Ci0Jc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0vKglhZGFwdGVyLT5wY2lkZXYgPSBwY2lkZXY7Ki8KLQlhZGFwdGVyLT52ZW5kaWQgPSBwY2lfdGJsX2VudHJ5LT52ZW5kb3I7Ci0JYWRhcHRlci0+ZGV2aWQgPSBwY2lfdGJsX2VudHJ5LT5kZXZpY2U7Ci0JYWRhcHRlci0+c3Vic3lzaWQgPSBwY2lfdGJsX2VudHJ5LT5zdWJkZXZpY2U7Ci0JYWRhcHRlci0+YnVzbnVtYmVyID0gcGNpZGV2LT5idXMtPm51bWJlcjsKLQlhZGFwdGVyLT5zbG90bnVtYmVyID0gKChwY2lkZXYtPmRldmZuID4+IDMpICYgMHgxRik7Ci0JYWRhcHRlci0+ZnVuY3Rpb25udW1iZXIgPSAocGNpZGV2LT5kZXZmbiAmIDB4Nyk7Ci0JYWRhcHRlci0+bWVtb3J5bGVuZ3RoID0gcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDApOwotCWFkYXB0ZXItPnNsaWNfcmVncyA9IChfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKiltZW1hZGRyOwotCWFkYXB0ZXItPmlycSA9IHBjaWRldi0+aXJxOwotLyoJYWRhcHRlci0+bmV0ZGV2ID0gbmV0ZGV2OyovCi0JYWRhcHRlci0+bmV4dF9uZXRkZXZpY2UgPSBoZWFkX25ldGRldmljZTsKLQloZWFkX25ldGRldmljZSA9IG5ldGRldjsKLQlhZGFwdGVyLT5jaGlwaWQgPSBjaGlwX2lkeDsKLQlhZGFwdGVyLT5wb3J0ID0gMDsJLyphZGFwdGVyLT5mdW5jdGlvbm51bWJlcjsqLwotCWFkYXB0ZXItPmNhcmRpbmRleCA9IGFkYXB0ZXItPnBvcnQ7Ci0JYWRhcHRlci0+bWVtb3J5YmFzZSA9IG1lbWFkZHI7Ci0Jc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnVwcl9sb2NrLmxvY2spOwotCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5iaXQ2NHJlZ2xvY2subG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jay5sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+cmVzZXRfbG9jay5sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+aGFuZGxlX2xvY2subG9jayk7Ci0KLQlhZGFwdGVyLT5jYXJkX3NpemUgPSAxOwotCS8qCi0JICBJbml0aWFsaXplIHNsaWNfaGFuZGxlIGFycmF5Ci0JKi8KLQlBU1NFUlQoU0xJQ19DTURRX01BWENNRFMgPD0gMHhGRkZGKTsKLQkvKgotCSBTdGFydCB3aXRoIDEuICAwIGlzIGFuIGludmFsaWQgaG9zdCBoYW5kbGUuCi0JKi8KLQlmb3IgKGluZGV4ID0gMSwgcHNsaWNfaGFuZGxlID0gJmFkYXB0ZXItPnNsaWNfaGFuZGxlc1sxXTsKLQkgICAgIGluZGV4IDwgU0xJQ19DTURRX01BWENNRFM7IGluZGV4KyssIHBzbGljX2hhbmRsZSsrKSB7Ci0KLQkJcHNsaWNfaGFuZGxlLT50b2tlbi5oYW5kbGVfaW5kZXggPSBpbmRleDsKLQkJcHNsaWNfaGFuZGxlLT50eXBlID0gU0xJQ19IQU5ETEVfRlJFRTsKLQkJcHNsaWNfaGFuZGxlLT5uZXh0ID0gYWRhcHRlci0+cGZyZWVfc2xpY19oYW5kbGVzOwotCQlhZGFwdGVyLT5wZnJlZV9zbGljX2hhbmRsZXMgPSBwc2xpY19oYW5kbGU7Ci0JfQotCWFkYXB0ZXItPnBzaG1lbSA9IChzdHJ1Y3Qgc2xpY19zaG1lbSAqKQotCQkJCQlwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCi0JCQkJCXNpemVvZihzdHJ1Y3Qgc2xpY19zaG1lbSksCi0JCQkJCSZhZGFwdGVyLT4KLQkJCQkJcGh5c19zaG1lbSk7Ci0JQVNTRVJUKGFkYXB0ZXItPnBzaG1lbSk7Ci0KLQltZW1zZXQoYWRhcHRlci0+cHNobWVtLCAwLCBzaXplb2Yoc3RydWN0IHNsaWNfc2htZW0pKTsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzbGljX25ldGRldl9vcHMgPSB7Ci0JLm5kb19vcGVuCQk9IHNsaWNfZW50cnlfb3BlbiwKLQkubmRvX3N0b3AJCT0gc2xpY19lbnRyeV9oYWx0LAotCS5uZG9fc3RhcnRfeG1pdAkJPSBzbGljX3htaXRfc3RhcnQsCi0JLm5kb19kb19pb2N0bAkJPSBzbGljX2lvY3RsLAotCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gc2xpY19tYWNfc2V0X2FkZHJlc3MsCi0JLm5kb19nZXRfc3RhdHMJCT0gc2xpY19nZXRfc3RhdHMsCi0JLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBzbGljX21jYXN0X3NldF9saXN0LAotCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAotCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKLX07Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHNsaWNfZW50cnlfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaWRldiwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX3RibF9lbnRyeSkKLXsKLQlzdGF0aWMgaW50IGNhcmRzX2ZvdW5kOwotCXN0YXRpYyBpbnQgZGlkX3ZlcnNpb247Ci0JaW50IGVyciA9IC1FTk9ERVY7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcjsKLQl2b2lkIF9faW9tZW0gKm1lbW1hcHBlZF9pb2FkZHIgPSBOVUxMOwotCXUzMiBzdGF0dXMgPSAwOwotCXVsb25nIG1taW9fc3RhcnQgPSAwOwotCXVsb25nIG1taW9fbGVuID0gMDsKLQlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSBOVUxMOwotCWludCBwY2lfdXNpbmdfZGFjID0gMDsKLQotCXNsaWNfZ2xvYmFsLmR5bmFtaWNfaW50YWdnID0gZHluYW1pY19pbnRhZ2c7Ci0KLQllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2lkZXYpOwotCi0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWlmIChzbGljX2RlYnVnID4gMCAmJiBkaWRfdmVyc2lvbisrID09IDApIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzXG4iLCBzbGljX2Jhbm5lcik7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlc1xuIiwgc2xpY19wcm9jX3ZlcnNpb24pOwotCX0KLQotCWlmICghcGNpX3NldF9kbWFfbWFzayhwY2lkZXYsIERNQV9CSVRfTUFTSyg2NCkpKSB7Ci0JCXBjaV91c2luZ19kYWMgPSAxOwotCQlpZiAocGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaWRldiwgRE1BX0JJVF9NQVNLKDY0KSkpIHsKLQkJCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAidW5hYmxlIHRvIG9idGFpbiA2NC1iaXQgRE1BIGZvciAiCi0JCQkJCSJjb25zaXN0ZW50IGFsbG9jYXRpb25zXG4iKTsKLQkJCWdvdG8gZXJyX291dF9kaXNhYmxlX3BjaTsKLQkJfQotCX0gZWxzZSBpZiAocGNpX3NldF9kbWFfbWFzayhwY2lkZXYsIERNQV9CSVRfTUFTSygzMikpKSB7Ci0JCXBjaV91c2luZ19kYWMgPSAwOwotCQlwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpZGV2LCBETUFfQklUX01BU0soMzIpKTsKLQl9IGVsc2UgewotCQlkZXZfZXJyKCZwY2lkZXYtPmRldiwgIm5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvblxuIik7Ci0JCWdvdG8gZXJyX291dF9kaXNhYmxlX3BjaTsKLQl9Ci0KLQllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaWRldiwgRFJWX05BTUUpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycigmcGNpZGV2LT5kZXYsICJjYW4ndCBvYnRhaW4gUENJIHJlc291cmNlc1xuIik7Ci0JCWdvdG8gZXJyX291dF9kaXNhYmxlX3BjaTsKLQl9Ci0KLQlwY2lfc2V0X21hc3RlcihwY2lkZXYpOwotCi0JbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBhZGFwdGVyKSk7Ci0JaWYgKCFuZXRkZXYpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfb3V0X2V4aXRfc2xpY19wcm9iZTsKLQl9Ci0KLQlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZwY2lkZXYtPmRldik7Ci0KLQlwY2lfc2V0X2RydmRhdGEocGNpZGV2LCBuZXRkZXYpOwotCWFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCWFkYXB0ZXItPm5ldGRldiA9IG5ldGRldjsKLQlhZGFwdGVyLT5wY2lkZXYgPSBwY2lkZXY7Ci0JaWYgKHBjaV91c2luZ19kYWMpCi0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwotCi0JbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDApOwotCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDApOwotCi0KLS8qCW1lbW1hcHBlZF9pb2FkZHIgPSAgKHUzMilpb3JlbWFwX25vY2FjaGUobW1pb19zdGFydCwgbW1pb19sZW4pOyovCi0JbWVtbWFwcGVkX2lvYWRkciA9IGlvcmVtYXAobW1pb19zdGFydCwgbW1pb19sZW4pOwotCWlmICghbWVtbWFwcGVkX2lvYWRkcikgewotCQlkZXZfZXJyKCZwY2lkZXYtPmRldiwgImNhbm5vdCByZW1hcCBNTUlPIHJlZ2lvbiAlbHggQCAlbHhcbiIsCi0JCQltbWlvX2xlbiwgbW1pb19zdGFydCk7Ci0JCWdvdG8gZXJyX291dF9mcmVlX25ldGRldjsKLQl9Ci0KLQlzbGljX2NvbmZpZ19wY2kocGNpZGV2KTsKLQotCXNsaWNfaW5pdF9kcml2ZXIoKTsKLQotCXNsaWNfaW5pdF9hZGFwdGVyKG5ldGRldiwKLQkJCSAgcGNpZGV2LCBwY2lfdGJsX2VudHJ5LCBtZW1tYXBwZWRfaW9hZGRyLCBjYXJkc19mb3VuZCk7Ci0KLQlzdGF0dXMgPSBzbGljX2NhcmRfbG9jYXRlKGFkYXB0ZXIpOwotCWlmIChzdGF0dXMpIHsKLQkJZGV2X2VycigmcGNpZGV2LT5kZXYsICJjYW5ub3QgbG9jYXRlIGNhcmRcbiIpOwotCQlnb3RvIGVycl9vdXRfZnJlZV9tbWlvX3JlZ2lvbjsKLQl9Ci0KLQljYXJkID0gYWRhcHRlci0+Y2FyZDsKLQotCWlmICghYWRhcHRlci0+YWxsb2NhdGVkKSB7Ci0JCWNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZCsrOwotCQlhZGFwdGVyLT5hbGxvY2F0ZWQgPSAxOwotCX0KLQotCXN0YXR1cyA9IHNsaWNfY2FyZF9pbml0KGNhcmQsIGFkYXB0ZXIpOwotCi0JaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQljYXJkLT5zdGF0ZSA9IENBUkRfRkFJTDsKLQkJYWRhcHRlci0+c3RhdGUgPSBBREFQVF9GQUlMOwotCQlhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX0RPV047Ci0JCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAiRkFJTEVEIHN0YXR1c1sleF1cbiIsIHN0YXR1cyk7Ci0JfSBlbHNlIHsKLQkJc2xpY19hZGFwdGVyX3NldF9od2FkZHIoYWRhcHRlcik7Ci0JfQotCi0JbmV0ZGV2LT5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZylhZGFwdGVyLT5tZW1vcnliYXNlOwotCW5ldGRldi0+aXJxID0gYWRhcHRlci0+aXJxOwotCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZzbGljX25ldGRldl9vcHM7Ci0KLQlzbGljX2RlYnVnX2FkYXB0ZXJfY3JlYXRlKGFkYXB0ZXIpOwotCi0Jc3RyY3B5KG5ldGRldi0+bmFtZSwgImV0aCVkIik7Ci0JZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7Ci0JaWYgKGVycikgewotCQlkZXZfZXJyKCZwY2lkZXYtPmRldiwgIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBhYm9ydGluZy5cbiIpOwotCQlnb3RvIGVycl9vdXRfdW5tYXA7Ci0JfQotCi0JY2FyZHNfZm91bmQrKzsKLQotCXJldHVybiBzdGF0dXM7Ci0KLWVycl9vdXRfdW5tYXA6Ci0JaW91bm1hcChtZW1tYXBwZWRfaW9hZGRyKTsKLWVycl9vdXRfZnJlZV9tbWlvX3JlZ2lvbjoKLQlyZWxlYXNlX21lbV9yZWdpb24obW1pb19zdGFydCwgbW1pb19sZW4pOwotZXJyX291dF9mcmVlX25ldGRldjoKLQlmcmVlX25ldGRldihuZXRkZXYpOwotZXJyX291dF9leGl0X3NsaWNfcHJvYmU6Ci0JcGNpX3JlbGVhc2VfcmVnaW9ucyhwY2lkZXYpOwotZXJyX291dF9kaXNhYmxlX3BjaToKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpZGV2KTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHNsaWNfZW50cnlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSBhZGFwdGVyLT5jYXJkOwotCXUzMiBsb2NrZWQgPSAwOwotCWludCBzdGF0dXM7Ci0KLQlBU1NFUlQoYWRhcHRlcik7Ci0JQVNTRVJUKGNhcmQpOwotCi0JbmV0aWZfc3RvcF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2ssCi0JCQkJc2xpY19nbG9iYWwuZHJpdmVyX2xvY2suZmxhZ3MpOwotCWxvY2tlZCA9IDE7Ci0JaWYgKCFhZGFwdGVyLT5hY3RpdmF0ZWQpIHsKLQkJY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkKys7Ci0JCXNsaWNfZ2xvYmFsLm51bV9zbGljX3BvcnRzX2FjdGl2ZSsrOwotCQlhZGFwdGVyLT5hY3RpdmF0ZWQgPSAxOwotCX0KLQlzdGF0dXMgPSBzbGljX2lmX2luaXQoYWRhcHRlcik7Ci0KLQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCWlmIChhZGFwdGVyLT5hY3RpdmF0ZWQpIHsKLQkJCWNhcmQtPmFkYXB0ZXJzX2FjdGl2YXRlZC0tOwotCQkJc2xpY19nbG9iYWwubnVtX3NsaWNfcG9ydHNfYWN0aXZlLS07Ci0JCQlhZGFwdGVyLT5hY3RpdmF0ZWQgPSAwOwotCQl9Ci0JCWlmIChsb2NrZWQpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2ssCi0JCQkJCQlzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5mbGFncyk7Ci0JCQlsb2NrZWQgPSAwOwotCQl9Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCWlmICghY2FyZC0+bWFzdGVyKQotCQljYXJkLT5tYXN0ZXIgPSBhZGFwdGVyOwotCi0JaWYgKGxvY2tlZCkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5sb2NrLAotCQkJCQlzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5mbGFncyk7Ci0JCWxvY2tlZCA9IDA7Ci0JfQotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgc2xpY19lbnRyeV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaWRldikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaWRldik7Ci0JdTMyIG1taW9fc3RhcnQgPSAwOwotCXVpbnQgbW1pb19sZW4gPSAwOwotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQ7Ci0Jc3RydWN0IG1jYXN0X2FkZHJlc3MgKm1jYWRkciwgKm1saXN0OwotCi0JQVNTRVJUKGFkYXB0ZXIpOwotCXNsaWNfYWRhcHRlcl9mcmVlcmVzb3VyY2VzKGFkYXB0ZXIpOwotCXNsaWNfdW5tYXBfbW1pb19zcGFjZShhZGFwdGVyKTsKLQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotCi0JbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDApOwotCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDApOwotCi0JcmVsZWFzZV9tZW1fcmVnaW9uKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKLQotCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKWRldi0+YmFzZV9hZGRyKTsKLQkvKiBmcmVlIG11bHRpY2FzdCBhZGRyZXNzZXMgKi8KLQltbGlzdCA9IGFkYXB0ZXItPm1jYXN0YWRkcnM7Ci0Jd2hpbGUgKG1saXN0KSB7Ci0JCW1jYWRkciA9IG1saXN0OwotCQltbGlzdCA9IG1saXN0LT5uZXh0OwotCQlrZnJlZShtY2FkZHIpOwotCX0KLQlBU1NFUlQoYWRhcHRlci0+Y2FyZCk7Ci0JY2FyZCA9IGFkYXB0ZXItPmNhcmQ7Ci0JQVNTRVJUKGNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZCk7Ci0JY2FyZC0+YWRhcHRlcnNfYWxsb2NhdGVkLS07Ci0JYWRhcHRlci0+YWxsb2NhdGVkID0gMDsKLQlpZiAoIWNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZCkgewotCQlzdHJ1Y3Qgc2xpY2NhcmQgKmN1cnJfY2FyZCA9IHNsaWNfZ2xvYmFsLnNsaWNfY2FyZDsKLQkJaWYgKGN1cnJfY2FyZCA9PSBjYXJkKSB7Ci0JCQlzbGljX2dsb2JhbC5zbGljX2NhcmQgPSBjYXJkLT5uZXh0OwotCQl9IGVsc2UgewotCQkJd2hpbGUgKGN1cnJfY2FyZC0+bmV4dCAhPSBjYXJkKQotCQkJCWN1cnJfY2FyZCA9IGN1cnJfY2FyZC0+bmV4dDsKLQkJCUFTU0VSVChjdXJyX2NhcmQpOwotCQkJY3Vycl9jYXJkLT5uZXh0ID0gY2FyZC0+bmV4dDsKLQkJfQotCQlBU1NFUlQoc2xpY19nbG9iYWwubnVtX3NsaWNfY2FyZHMpOwotCQlzbGljX2dsb2JhbC5udW1fc2xpY19jYXJkcy0tOwotCQlzbGljX2NhcmRfY2xlYW51cChjYXJkKTsKLQl9Ci0Ja2ZyZWUoZGV2KTsKLQlwY2lfcmVsZWFzZV9yZWdpb25zKHBjaWRldik7Ci19Ci0KLXN0YXRpYyBpbnQgc2xpY19lbnRyeV9oYWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7Ci0JX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2xpY19nbG9iYWwuZHJpdmVyX2xvY2subG9jaywKLQkJCQlzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5mbGFncyk7Ci0JQVNTRVJUKGNhcmQpOwotCW5ldGlmX3N0b3BfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKLQlhZGFwdGVyLT5zdGF0ZSA9IEFEQVBUX0RPV047Ci0JYWRhcHRlci0+bGlua3N0YXRlID0gTElOS19ET1dOOwotCWFkYXB0ZXItPnVwcl9saXN0ID0gTlVMTDsKLQlhZGFwdGVyLT51cHJfYnVzeSA9IDA7Ci0JYWRhcHRlci0+ZGV2ZmxhZ3NfcHJldiA9IDA7Ci0JQVNTRVJUKGNhcmQtPmFkYXB0ZXJbYWRhcHRlci0+Y2FyZGluZGV4XSA9PSBhZGFwdGVyKTsKLQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfaWNyLCBJQ1JfSU5UX09GRiwgRkxVU0gpOwotCWFkYXB0ZXItPmFsbF9yZWdfd3JpdGVzKys7Ci0JYWRhcHRlci0+aWNyX3JlZ193cml0ZXMrKzsKLQlzbGljX2NvbmZpZ19jbGVhcihhZGFwdGVyKTsKLQlpZiAoYWRhcHRlci0+YWN0aXZhdGVkKSB7Ci0JCWNhcmQtPmFkYXB0ZXJzX2FjdGl2YXRlZC0tOwotCQlzbGljX2dsb2JhbC5udW1fc2xpY19wb3J0c19hY3RpdmUtLTsKLQkJYWRhcHRlci0+YWN0aXZhdGVkID0gMDsKLQl9Ci0jaWZkZWYgQVVUT01BVElDX1JFU0VUCi0Jc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3Jlc2V0X2lmYWNlLCAwLCBGTFVTSCk7Ci0jZW5kaWYKLQkvKgotCSAqICBSZXNldCB0aGUgYWRhcHRlcidzIGNtZCBxdWV1ZXMKLQkgKi8KLQlzbGljX2NtZHFfcmVzZXQoYWRhcHRlcik7Ci0KLSNpZmRlZiBBVVRPTUFUSUNfUkVTRVQKLQlpZiAoIWNhcmQtPmFkYXB0ZXJzX2FjdGl2YXRlZCkKLQkJc2xpY19jYXJkX2luaXQoY2FyZCwgYWRhcHRlcik7Ci0jZW5kaWYKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2ssCi0JCQkJc2xpY19nbG9iYWwuZHJpdmVyX2xvY2suZmxhZ3MpOwotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGludCBzbGljX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCi17Ci0Jc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBldGh0b29sX2NtZCBlZGF0YTsKLQlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZDsKLQl1MzIgZGF0YVs3XTsKLQl1MzIgaW50YWdnOwotCi0JQVNTRVJUKHJxKTsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU0lPQ1NMSUNTRVRJTlRBR0c6Ci0JCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCBycS0+aWZyX2RhdGEsIDI4KSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlpbnRhZ2cgPSBkYXRhWzBdOwotCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBzZXQgaW50ZXJydXB0IGFnZ3JlZ2F0aW9uIHRvICVkXG4iLAotCQkJX19mdW5jX18sIGludGFnZyk7Ci0JCXNsaWNfaW50YWdnX3NldChhZGFwdGVyLCBpbnRhZ2cpOwotCQlyZXR1cm4gMDsKLQotI2lmZGVmIFNMSUNfVFJBQ0VfRFVNUF9FTkFCTEVECi0JY2FzZSBTSU9DU0xJQ1RSQUNFRFVNUDoKLQkJewotCQkJdTMyIHZhbHVlOwotCQkJREJHX0lPQ1RMKCJzbGljX2lvY3RsICBTSU9DU0xJQ19UUkFDRV9EVU1QXG4iKTsKLQotCQkJaWYgKGNvcHlfZnJvbV91c2VyKGRhdGEsIHJxLT5pZnJfZGF0YSwgMjgpKSB7Ci0JCQkJUFJJTlRfRVJST1IKLQkJCQkgICAgKCJzbGljOiBjb3B5X2Zyb21fdXNlciBGQUlMRUQgZ2V0dGluZyBpbml0aWFsIHNpbWJhIHBhcmFtXG4iKTsKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCX0KLQotCQkJdmFsdWUgPSBkYXRhWzBdOwotCQkJaWYgKHRyYWNlbW9uX3JlcXVlc3QgPT0gU0xJQ19EVU1QX0RPTkUpIHsKLQkJCQlQUklOVF9FUlJPUgotCQkJCSAgICAoIkFUSyBEaWFnbm9zdGljIFRyYWNlIER1bXAgUmVxdWVzdGVkXG4iKTsKLQkJCQl0cmFjZW1vbl9yZXF1ZXN0ID0gU0xJQ19EVU1QX1JFUVVFU1RFRDsKLQkJCQl0cmFjZW1vbl9yZXF1ZXN0X3R5cGUgPSB2YWx1ZTsKLQkJCQl0cmFjZW1vbl90aW1lc3RhbXAgPSBqaWZmaWVzOwotCQkJfSBlbHNlIGlmICgodHJhY2Vtb25fcmVxdWVzdCA9PSBTTElDX0RVTVBfUkVRVUVTVEVEKSB8fAotCQkJCSAgICh0cmFjZW1vbl9yZXF1ZXN0ID09Ci0JCQkJICAgIFNMSUNfRFVNUF9JTl9QUk9HUkVTUykpIHsKLQkJCQlQUklOVF9FUlJPUgotCQkJCSAgICAoIkFUSyBEaWFnbm9zdGljIFRyYWNlIER1bXAgUmVxdWVzdGVkIGJ1dCBhbHJlYWR5IGluIHByb2dyZXNzLi4uIGlnbm9yZVxuIik7Ci0JCQl9IGVsc2UgewotCQkJCVBSSU5UX0VSUk9SCi0JCQkJICAgICgiQVRLIERpYWdub3N0aWMgVHJhY2UgRHVtcCBSZXF1ZXN0ZWRcbiIpOwotCQkJCXRyYWNlbW9uX3JlcXVlc3QgPSBTTElDX0RVTVBfUkVRVUVTVEVEOwotCQkJCXRyYWNlbW9uX3JlcXVlc3RfdHlwZSA9IHZhbHVlOwotCQkJCXRyYWNlbW9uX3RpbWVzdGFtcCA9IGppZmZpZXM7Ci0JCQl9Ci0JCQlyZXR1cm4gMDsKLQkJfQotI2VuZGlmCi0JY2FzZSBTSU9DRVRIVE9PTDoKLQkJQVNTRVJUKGFkYXB0ZXIpOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJmVjbWQsIHJxLT5pZnJfZGF0YSwgc2l6ZW9mKGVjbWQpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCWlmIChlY21kLmNtZCA9PSBFVEhUT09MX0dTRVQpIHsKLQkJCWVkYXRhLnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwKLQkJCQkJICAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwKLQkJCQkJICAgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfAotCQkJCQkgICBTVVBQT1JURURfQXV0b25lZyB8IFNVUFBPUlRFRF9NSUkpOwotCQkJZWRhdGEucG9ydCA9IFBPUlRfTUlJOwotCQkJZWRhdGEudHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOwotCQkJZWRhdGEucGh5X2FkZHJlc3MgPSAwOwotCQkJaWYgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBMSU5LXzEwME1CKQotCQkJCWVkYXRhLnNwZWVkID0gU1BFRURfMTAwOwotCQkJZWxzZSBpZiAoYWRhcHRlci0+bGlua3NwZWVkID09IExJTktfMTBNQikKLQkJCQllZGF0YS5zcGVlZCA9IFNQRUVEXzEwOwotCQkJZWxzZQotCQkJCWVkYXRhLnNwZWVkID0gMDsKLQotCQkJaWYgKGFkYXB0ZXItPmxpbmtkdXBsZXggPT0gTElOS19GVUxMRCkKLQkJCQllZGF0YS5kdXBsZXggPSBEVVBMRVhfRlVMTDsKLQkJCWVsc2UKLQkJCQllZGF0YS5kdXBsZXggPSBEVVBMRVhfSEFMRjsKLQotCQkJZWRhdGEuYXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOwotCQkJZWRhdGEubWF4dHhwa3QgPSAxOwotCQkJZWRhdGEubWF4cnhwa3QgPSAxOwotCQkJaWYgKGNvcHlfdG9fdXNlcihycS0+aWZyX2RhdGEsICZlZGF0YSwgc2l6ZW9mKGVkYXRhKSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJfSBlbHNlIGlmIChlY21kLmNtZCA9PSBFVEhUT09MX1NTRVQpIHsKLQkJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCQlyZXR1cm4gLUVQRVJNOwotCi0JCQlpZiAoYWRhcHRlci0+bGlua3NwZWVkID09IExJTktfMTAwTUIpCi0JCQkJZWRhdGEuc3BlZWQgPSBTUEVFRF8xMDA7Ci0JCQllbHNlIGlmIChhZGFwdGVyLT5saW5rc3BlZWQgPT0gTElOS18xME1CKQotCQkJCWVkYXRhLnNwZWVkID0gU1BFRURfMTA7Ci0JCQllbHNlCi0JCQkJZWRhdGEuc3BlZWQgPSAwOwotCi0JCQlpZiAoYWRhcHRlci0+bGlua2R1cGxleCA9PSBMSU5LX0ZVTExEKQotCQkJCWVkYXRhLmR1cGxleCA9IERVUExFWF9GVUxMOwotCQkJZWxzZQotCQkJCWVkYXRhLmR1cGxleCA9IERVUExFWF9IQUxGOwotCi0JCQllZGF0YS5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7Ci0JCQllZGF0YS5tYXh0eHBrdCA9IDE7Ci0JCQllZGF0YS5tYXhyeHBrdCA9IDE7Ci0JCQlpZiAoKGVjbWQuc3BlZWQgIT0gZWRhdGEuc3BlZWQpIHx8Ci0JCQkgICAgKGVjbWQuZHVwbGV4ICE9IGVkYXRhLmR1cGxleCkpIHsKLQkJCQl1MzIgc3BlZWQ7Ci0JCQkJdTMyIGR1cGxleDsKLQotCQkJCWlmIChlY21kLnNwZWVkID09IFNQRUVEXzEwKQotCQkJCQlzcGVlZCA9IDA7Ci0JCQkJZWxzZQotCQkJCQlzcGVlZCA9IFBDUl9TUEVFRF8xMDA7Ci0JCQkJaWYgKGVjbWQuZHVwbGV4ID09IERVUExFWF9GVUxMKQotCQkJCQlkdXBsZXggPSBQQ1JfRFVQTEVYX0ZVTEw7Ci0JCQkJZWxzZQotCQkJCQlkdXBsZXggPSAwOwotCQkJCXNsaWNfbGlua19jb25maWcoYWRhcHRlciwgc3BlZWQsIGR1cGxleCk7Ci0JCQkJc2xpY19saW5rX2V2ZW50X2hhbmRsZXIoYWRhcHRlcik7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLX0KLQotI2RlZmluZSAgWE1JVF9GQUlMX0xJTktfU1RBVEUgICAgICAgICAgICAgICAxCi0jZGVmaW5lICBYTUlUX0ZBSUxfWkVST19MRU5HVEggICAgICAgICAgICAgIDIKLSNkZWZpbmUgIFhNSVRfRkFJTF9IT1NUQ01EX0ZBSUwgICAgICAgICAgICAgMwotCi1zdGF0aWMgdm9pZCBzbGljX3htaXRfYnVpbGRfcmVxdWVzdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgICAgc3RydWN0IHNsaWNfaG9zdGNtZCAqaGNtZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3Qgc2xpY19ob3N0NjRfY21kICppaGNtZDsKLQl1bG9uZyBwaHlzX2FkZHI7Ci0KLQlpaGNtZCA9ICZoY21kLT5jbWQ2NDsKLQotCWloY21kLT5mbGFncyA9IChhZGFwdGVyLT5wb3J0IDw8IElIRkxHX0lGU0hGVCk7Ci0JaWhjbWQtPmNvbW1hbmQgPSBJSENNRF9YTVRfUkVROwotCWloY21kLT51LnNsaWNfYnVmZmVycy50b3RsZW4gPSBza2ItPmxlbjsKLQlwaHlzX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShhZGFwdGVyLT5wY2lkZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCi0JCQlQQ0lfRE1BX1RPREVWSUNFKTsKLQlpaGNtZC0+dS5zbGljX2J1ZmZlcnMuYnVmc1swXS5wYWRkcmwgPSBTTElDX0dFVF9BRERSX0xPVyhwaHlzX2FkZHIpOwotCWloY21kLT51LnNsaWNfYnVmZmVycy5idWZzWzBdLnBhZGRyaCA9IFNMSUNfR0VUX0FERFJfSElHSChwaHlzX2FkZHIpOwotCWloY21kLT51LnNsaWNfYnVmZmVycy5idWZzWzBdLmxlbmd0aCA9IHNrYi0+bGVuOwotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKLQloY21kLT5jbWRzaXplID0gKHUzMikgKCgoKHU2NCkmaWhjbWQtPnUuc2xpY19idWZmZXJzLmJ1ZnNbMV0gLQotCQkJCSAgICAgKHU2NCkgaGNtZCkgKyAzMSkgPj4gNSk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19YODYpCi0JaGNtZC0+Y21kc2l6ZSA9ICgoKCh1MzIpICZpaGNtZC0+dS5zbGljX2J1ZmZlcnMuYnVmc1sxXSAtCi0JCQkgICAodTMyKSBoY21kKSArIDMxKSA+PiA1KTsKLSNlbHNlCi0JU3RvcCBDb21waWxhdGlvbjsKLSNlbmRpZgotfQotCi0jZGVmaW5lIE5PUk1BTF9FVEhGUkFNRSAgICAgMAotCi1zdGF0aWMgbmV0ZGV2X3R4X3Qgc2xpY194bWl0X3N0YXJ0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHNsaWNjYXJkICpjYXJkOwotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgc2xpY19ob3N0Y21kICpoY21kID0gTlVMTDsKLQl1MzIgc3RhdHVzID0gMDsKLQl1MzIgc2tidHlwZSA9IE5PUk1BTF9FVEhGUkFNRTsKLQl2b2lkICpvZmZsb2FkY21kID0gTlVMTDsKLQotCWNhcmQgPSBhZGFwdGVyLT5jYXJkOwotCUFTU0VSVChjYXJkKTsKLQlpZiAoKGFkYXB0ZXItPmxpbmtzdGF0ZSAhPSBMSU5LX1VQKSB8fAotCSAgICAoYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfVVApIHx8IChjYXJkLT5zdGF0ZSAhPSBDQVJEX1VQKSkgewotCQlzdGF0dXMgPSBYTUlUX0ZBSUxfTElOS19TVEFURTsKLQkJZ290byB4bWl0X2ZhaWw7Ci0KLQl9IGVsc2UgaWYgKHNrYi0+bGVuID09IDApIHsKLQkJc3RhdHVzID0gWE1JVF9GQUlMX1pFUk9fTEVOR1RIOwotCQlnb3RvIHhtaXRfZmFpbDsKLQl9Ci0KLQlpZiAoc2tidHlwZSA9PSBOT1JNQUxfRVRIRlJBTUUpIHsKLQkJaGNtZCA9IHNsaWNfY21kcV9nZXRmcmVlKGFkYXB0ZXIpOwotCQlpZiAoIWhjbWQpIHsKLQkJCWFkYXB0ZXItPnhtaXRxX2Z1bGwgPSAxOwotCQkJc3RhdHVzID0gWE1JVF9GQUlMX0hPU1RDTURfRkFJTDsKLQkJCWdvdG8geG1pdF9mYWlsOwotCQl9Ci0JCUFTU0VSVChoY21kLT5wc2xpY19oYW5kbGUpOwotCQlBU1NFUlQoaGNtZC0+Y21kNjQuaG9zdGhhbmRsZSA9PQotCQkgICAgICAgaGNtZC0+cHNsaWNfaGFuZGxlLT50b2tlbi5oYW5kbGVfdG9rZW4pOwotCQloY21kLT5za2IgPSBza2I7Ci0JCWhjbWQtPmJ1c3kgPSAxOwotCQloY21kLT50eXBlID0gU0xJQ19DTURfRFVNQjsKLQkJaWYgKHNrYnR5cGUgPT0gTk9STUFMX0VUSEZSQU1FKQotCQkJc2xpY194bWl0X2J1aWxkX3JlcXVlc3QoYWRhcHRlciwgaGNtZCwgc2tiKTsKLQl9Ci0JYWRhcHRlci0+c3RhdHMudHhfcGFja2V0cysrOwotCWFkYXB0ZXItPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwotCi0jaWZkZWYgREVCVUdfRFVNUAotCWlmIChhZGFwdGVyLT5raWxsX2NhcmQpIHsKLQkJc3RydWN0IHNsaWNfaG9zdDY0X2NtZCBpaGNtZDsKLQotCQlpaGNtZCA9ICZoY21kLT5jbWQ2NDsKLQotCQlpaGNtZC0+ZmxhZ3MgfD0gMHg0MDsKLQkJYWRhcHRlci0+a2lsbF9jYXJkID0gMDsJLyogb25seSBkbyB0aGlzIG9uY2UgKi8KLQl9Ci0jZW5kaWYKLQlpZiAoaGNtZC0+cGFkZHJoID09IDApIHsKLQkJc2xpY19yZWczMl93cml0ZSgmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2NiYXIsCi0JCQkJIChoY21kLT5wYWRkcmwgfCBoY21kLT5jbWRzaXplKSwgRE9OVF9GTFVTSCk7Ci0JfSBlbHNlIHsKLQkJc2xpY19yZWc2NF93cml0ZShhZGFwdGVyLCAmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2NiYXI2NCwKLQkJCQkgKGhjbWQtPnBhZGRybCB8IGhjbWQtPmNtZHNpemUpLAotCQkJCSAmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCi0JCQkJIGhjbWQtPnBhZGRyaCwgRE9OVF9GTFVTSCk7Ci0JfQoteG1pdF9kb25lOgotCXJldHVybiBORVRERVZfVFhfT0s7Ci14bWl0X2ZhaWw6Ci0Jc2xpY194bWl0X2ZhaWwoYWRhcHRlciwgc2tiLCBvZmZsb2FkY21kLCBza2J0eXBlLCBzdGF0dXMpOwotCWdvdG8geG1pdF9kb25lOwotfQotCi1zdGF0aWMgdm9pZCBzbGljX3htaXRfZmFpbChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKLQkJICAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICB2b2lkICpjbWQsIHUzMiBza2J0eXBlLCB1MzIgc3RhdHVzKQotewotCWlmIChhZGFwdGVyLT54bWl0cV9mdWxsKQotCQluZXRpZl9zdG9wX3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7Ci0JaWYgKChjbWQgPT0gTlVMTCkgJiYgKHN0YXR1cyA8PSBYTUlUX0ZBSUxfSE9TVENNRF9GQUlMKSkgewotCQlzd2l0Y2ggKHN0YXR1cykgewotCQljYXNlIFhNSVRfRkFJTF9MSU5LX1NUQVRFOgotCQkJZGV2X2VycigmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCi0JCQkJInJlamVjdCB4bWl0IHNrYlslcDogJXhdIGxpbmtzdGF0ZVslc10gIgotCQkJCSJhZGFwdGVyWyVzOiVkXSBjYXJkWyVzOiVkXVxuIiwKLQkJCQlza2IsIHNrYi0+cGt0X3R5cGUsCi0JCQkJU0xJQ19MSU5LU1RBVEUoYWRhcHRlci0+bGlua3N0YXRlKSwKLQkJCQlTTElDX0FEQVBURVJfU1RBVEUoYWRhcHRlci0+c3RhdGUpLAotCQkJCWFkYXB0ZXItPnN0YXRlLAotCQkJCVNMSUNfQ0FSRF9TVEFURShhZGFwdGVyLT5jYXJkLT5zdGF0ZSksCi0JCQkJYWRhcHRlci0+Y2FyZC0+c3RhdGUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgWE1JVF9GQUlMX1pFUk9fTEVOR1RIOgotCQkJZGV2X2VycigmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCi0JCQkJInhtaXRfc3RhcnQgc2tiLT5sZW4gPT0gMCBza2JbJXBdIHR5cGVbJXhdXG4iLAotCQkJCXNrYiwgc2tiLT5wa3RfdHlwZSk7Ci0JCQlicmVhazsKLQkJY2FzZSBYTUlUX0ZBSUxfSE9TVENNRF9GQUlMOgotCQkJZGV2X2VycigmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCi0JCQkJInhtaXRfc3RhcnQgc2tiWyVwXSB0eXBlWyV4XSBObyBob3N0IGNvbW1hbmRzICIKLQkJCQkiYXZhaWxhYmxlXG4iLCBza2IsIHNrYi0+cGt0X3R5cGUpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlBU1NFUlQoMCk7Ci0JCX0KLQl9Ci0JZGV2X2tmcmVlX3NrYihza2IpOwotCWFkYXB0ZXItPnN0YXRzLnR4X2Ryb3BwZWQrKzsKLX0KLQotc3RhdGljIHZvaWQgc2xpY19yY3ZfaGFuZGxlX2Vycm9yKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAotCQkJCQlzdHJ1Y3Qgc2xpY19yY3ZidWYgKnJjdmJ1ZikKLXsKLQlzdHJ1Y3Qgc2xpY19oZGRyX3dkcyAqaGRyID0gKHN0cnVjdCBzbGljX2hkZHJfd2RzICopcmN2YnVmLT5kYXRhOwotCi0JaWYgKGFkYXB0ZXItPmRldmlkICE9IFNMSUNfMUdCX0RFVklDRV9JRCkgewotCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXMxNCAmIFZSSFNUQVRfODAyT0UpCi0JCQlhZGFwdGVyLT5pZl9ldmVudHMub2Zsb3c4MDIrKzsKLQkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzMTQgJiBWUkhTVEFUX1RQT0ZMTykKLQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5UcHJ0b2Zsb3crKzsKLQkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCXzgwMlVFKQotCQkJYWRhcHRlci0+aWZfZXZlbnRzLnVmbG93ODAyKys7Ci0JCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9SQ1ZFKSB7Ci0JCQlhZGFwdGVyLT5pZl9ldmVudHMucmN2ZWFybHkrKzsKLQkJCWFkYXB0ZXItPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7Ci0JCX0KLQkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX0JVRkYpIHsKLQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5CdWZvdisrOwotCQkJYWRhcHRlci0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKLQkJfQotCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfQ0FSUkUpIHsKLQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5DYXJyZSsrOwotCQkJYWRhcHRlci0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKLQkJfQotCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfTE9OR0UpCi0JCQlhZGFwdGVyLT5pZl9ldmVudHMuTG9uZ2UrKzsKLQkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX1BSRUEpCi0JCQlhZGFwdGVyLT5pZl9ldmVudHMuSW52cCsrOwotCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfQ1JDKSB7Ci0JCQlhZGFwdGVyLT5pZl9ldmVudHMuQ3JjKys7Ci0JCQlhZGFwdGVyLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7Ci0JCX0KLQkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX0RSQkwpCi0JCQlhZGFwdGVyLT5pZl9ldmVudHMuRHJibCsrOwotCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfQ09ERSkKLQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5Db2RlKys7Ci0JCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9UUENTVU0pCi0JCQlhZGFwdGVyLT5pZl9ldmVudHMuVHBDc3VtKys7Ci0JCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9UUEhMRU4pCi0JCQlhZGFwdGVyLT5pZl9ldmVudHMuVHBIbGVuKys7Ci0JCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9JUENTVU0pCi0JCQlhZGFwdGVyLT5pZl9ldmVudHMuSXBDc3VtKys7Ci0JCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9JUExFUlIpCi0JCQlhZGFwdGVyLT5pZl9ldmVudHMuSXBMZW4rKzsKLQkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX0lQSEVSUikKLQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5JcEhsZW4rKzsKLQl9IGVsc2UgewotCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNHQiAmIFZHQlNUQVRfWFBFUlIpIHsKLQkJCXUzMiB4ZXJyID0gaGRyLT5mcmFtZV9zdGF0dXNHQiA+PiBWR0JTVEFUX1hFUlJTSEZUOwotCi0JCQlpZiAoeGVyciA9PSBWR0JTVEFUX1hDU0VSUikKLQkJCQlhZGFwdGVyLT5pZl9ldmVudHMuVHBDc3VtKys7Ci0JCQlpZiAoeGVyciA9PSBWR0JTVEFUX1hVRkxPVykKLQkJCQlhZGFwdGVyLT5pZl9ldmVudHMuVHBydG9mbG93Kys7Ci0JCQlpZiAoeGVyciA9PSBWR0JTVEFUX1hITEVOKQotCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5UcEhsZW4rKzsKLQkJfQotCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNHQiAmIFZHQlNUQVRfTkVURVJSKSB7Ci0JCQl1MzIgbmVyciA9Ci0JCQkgICAgKGhkci0+Ci0JCQkgICAgIGZyYW1lX3N0YXR1c0dCID4+IFZHQlNUQVRfTkVSUlNIRlQpICYKLQkJCSAgICBWR0JTVEFUX05FUlJNU0s7Ci0JCQlpZiAobmVyciA9PSBWR0JTVEFUX05DU0VSUikKLQkJCQlhZGFwdGVyLT5pZl9ldmVudHMuSXBDc3VtKys7Ci0JCQlpZiAobmVyciA9PSBWR0JTVEFUX05VRkxPVykKLQkJCQlhZGFwdGVyLT5pZl9ldmVudHMuSXBMZW4rKzsKLQkJCWlmIChuZXJyID09IFZHQlNUQVRfTkhMRU4pCi0JCQkJYWRhcHRlci0+aWZfZXZlbnRzLklwSGxlbisrOwotCQl9Ci0JCWlmIChoZHItPmZyYW1lX3N0YXR1c0dCICYgVkdCU1RBVF9MTktFUlIpIHsKLQkJCXUzMiBsZXJyID0gaGRyLT5mcmFtZV9zdGF0dXNHQiAmIFZHQlNUQVRfTEVSUk1TSzsKLQotCQkJaWYgKGxlcnIgPT0gVkdCU1RBVF9MREVBUkxZKQotCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5yY3ZlYXJseSsrOwotCQkJaWYgKGxlcnIgPT0gVkdCU1RBVF9MQk9GTE8pCi0JCQkJYWRhcHRlci0+aWZfZXZlbnRzLkJ1Zm92Kys7Ci0JCQlpZiAobGVyciA9PSBWR0JTVEFUX0xDT0RFUlIpCi0JCQkJYWRhcHRlci0+aWZfZXZlbnRzLkNvZGUrKzsKLQkJCWlmIChsZXJyID09IFZHQlNUQVRfTERCTE5CTCkKLQkJCQlhZGFwdGVyLT5pZl9ldmVudHMuRHJibCsrOwotCQkJaWYgKGxlcnIgPT0gVkdCU1RBVF9MQ1JDRVJSKQotCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5DcmMrKzsKLQkJCWlmIChsZXJyID09IFZHQlNUQVRfTE9GTE8pCi0JCQkJYWRhcHRlci0+aWZfZXZlbnRzLm9mbG93ODAyKys7Ci0JCQlpZiAobGVyciA9PSBWR0JTVEFUX0xVRkxPKQotCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy51ZmxvdzgwMisrOwotCQl9Ci0JfQotCXJldHVybjsKLX0KLQotI2RlZmluZSBUQ1BfT0ZGTE9BRF9GUkFNRV9QVVNIRkxBRyAgMHgxMDAwMDAwMAotI2RlZmluZSBNX0ZBU1RfUEFUSCAgICAgICAgICAgICAgICAgMHgwMDQwCi0KLXN0YXRpYyB2b2lkIHNsaWNfcmN2X2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3Qgc2xpY19yY3ZidWYgKnJjdmJ1ZjsKLQl1MzIgZnJhbWVzID0gMDsKLQotCXdoaWxlICgoc2tiID0gc2xpY19yY3ZxdWV1ZV9nZXRuZXh0KGFkYXB0ZXIpKSkgewotCQl1MzIgcnhfYnl0ZXM7Ci0KLQkJQVNTRVJUKHNrYi0+aGVhZCk7Ci0JCXJjdmJ1ZiA9IChzdHJ1Y3Qgc2xpY19yY3ZidWYgKilza2ItPmhlYWQ7Ci0JCWFkYXB0ZXItPmNhcmQtPmV2ZW50cysrOwotCQlpZiAocmN2YnVmLT5zdGF0dXMgJiBJUkhERFJfRVJSKSB7Ci0JCQlhZGFwdGVyLT5yeF9lcnJvcnMrKzsKLQkJCXNsaWNfcmN2X2hhbmRsZV9lcnJvcihhZGFwdGVyLCByY3ZidWYpOwotCQkJc2xpY19yY3ZxdWV1ZV9yZWluc2VydChhZGFwdGVyLCBza2IpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoIXNsaWNfbWFjX2ZpbHRlcihhZGFwdGVyLCAoc3RydWN0IGV0aGVyX2hlYWRlciAqKQotCQkJCQlyY3ZidWYtPmRhdGEpKSB7Ci0JCQlzbGljX3JjdnF1ZXVlX3JlaW5zZXJ0KGFkYXB0ZXIsIHNrYik7Ci0JCQljb250aW51ZTsKLQkJfQotCQlza2JfcHVsbChza2IsIFNMSUNfUkNWQlVGX0hFQURTSVpFKTsKLQkJcnhfYnl0ZXMgPSAocmN2YnVmLT5sZW5ndGggJiBJUkhERFJfRkxFTl9NU0spOwotCQlza2JfcHV0KHNrYiwgcnhfYnl0ZXMpOwotCQlhZGFwdGVyLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCWFkYXB0ZXItPnN0YXRzLnJ4X2J5dGVzICs9IHJ4X2J5dGVzOwotI2lmIFNMSUNfT0ZGTE9BRF9JUF9DSEVDS1NVTQotCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotI2VuZGlmCi0KLQkJc2tiLT5kZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHNrYi0+ZGV2KTsKLQkJbmV0aWZfcngoc2tiKTsKLQotCQkrK2ZyYW1lczsKLSNpZiBTTElDX0lOVEVSUlVQVF9QUk9DRVNTX0xJTUlUCi0JCWlmIChmcmFtZXMgPj0gU0xJQ19SQ1ZRX01BWF9QUk9DRVNTX0lTUikgewotCQkJYWRhcHRlci0+cmN2X2ludGVycnVwdF95aWVsZHMrKzsKLQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYKLQl9Ci0JYWRhcHRlci0+bWF4X2lzcl9yY3ZzID0gbWF4KGFkYXB0ZXItPm1heF9pc3JfcmN2cywgZnJhbWVzKTsKLX0KLQotc3RhdGljIHZvaWQgc2xpY194bWl0X2NvbXBsZXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQotewotCXN0cnVjdCBzbGljX2hvc3RjbWQgKmhjbWQ7Ci0Jc3RydWN0IHNsaWNfcnNwYnVmICpyc3BidWY7Ci0JdTMyIGZyYW1lcyA9IDA7Ci0Jc3RydWN0IHNsaWNfaGFuZGxlX3dvcmQgc2xpY19oYW5kbGVfd29yZDsKLQotCWRvIHsKLQkJcnNwYnVmID0gc2xpY19yc3BxdWV1ZV9nZXRuZXh0KGFkYXB0ZXIpOwotCQlpZiAoIXJzcGJ1ZikKLQkJCWJyZWFrOwotCQlhZGFwdGVyLT54bWl0X2NvbXBsZXRlcysrOwotCQlhZGFwdGVyLT5jYXJkLT5ldmVudHMrKzsKLQkJLyoKLQkJIEdldCB0aGUgY29tcGxldGUgaG9zdCBjb21tYW5kIGJ1ZmZlcgotCQkqLwotCQlzbGljX2hhbmRsZV93b3JkLmhhbmRsZV90b2tlbiA9IHJzcGJ1Zi0+aG9zdGhhbmRsZTsKLQkJQVNTRVJUKHNsaWNfaGFuZGxlX3dvcmQuaGFuZGxlX2luZGV4KTsKLQkJQVNTRVJUKHNsaWNfaGFuZGxlX3dvcmQuaGFuZGxlX2luZGV4IDw9IFNMSUNfQ01EUV9NQVhDTURTKTsKLQkJaGNtZCA9Ci0JCSAgICAoc3RydWN0IHNsaWNfaG9zdGNtZCAqKQotCQkJYWRhcHRlci0+c2xpY19oYW5kbGVzW3NsaWNfaGFuZGxlX3dvcmQuaGFuZGxlX2luZGV4XS4KLQkJCQkJCQkJCWFkZHJlc3M7Ci0vKiAgICAgIGhjbWQgPSAoc3RydWN0IHNsaWNfaG9zdGNtZCAqKSByc3BidWYtPmhvc3RoYW5kbGU7ICovCi0JCUFTU0VSVChoY21kKTsKLQkJQVNTRVJUKGhjbWQtPnBzbGljX2hhbmRsZSA9PQotCQkgICAgICAgJmFkYXB0ZXItPnNsaWNfaGFuZGxlc1tzbGljX2hhbmRsZV93b3JkLmhhbmRsZV9pbmRleF0pOwotCQlpZiAoaGNtZC0+dHlwZSA9PSBTTElDX0NNRF9EVU1CKSB7Ci0JCQlpZiAoaGNtZC0+c2tiKQotCQkJCWRldl9rZnJlZV9za2JfaXJxKGhjbWQtPnNrYik7Ci0JCQlzbGljX2NtZHFfcHV0ZG9uZV9pcnEoYWRhcHRlciwgaGNtZCk7Ci0JCX0KLQkJcnNwYnVmLT5zdGF0dXMgPSAwOwotCQlyc3BidWYtPmhvc3RoYW5kbGUgPSAwOwotCQlmcmFtZXMrKzsKLQl9IHdoaWxlICgxKTsKLQlhZGFwdGVyLT5tYXhfaXNyX3htaXRzID0gbWF4KGFkYXB0ZXItPm1heF9pc3JfeG1pdHMsIGZyYW1lcyk7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBzbGljX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldl9pZDsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7Ci0JdTMyIGlzcjsKLQotCWlmICgoYWRhcHRlci0+cHNobWVtKSAmJiAoYWRhcHRlci0+cHNobWVtLT5pc3IpKSB7Ci0JCXNsaWNfcmVnMzJfd3JpdGUoJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19pY3IsCi0JCQkJIElDUl9JTlRfTUFTSywgRkxVU0gpOwotCQlpc3IgPSBhZGFwdGVyLT5pc3Jjb3B5ID0gYWRhcHRlci0+cHNobWVtLT5pc3I7Ci0JCWFkYXB0ZXItPnBzaG1lbS0+aXNyID0gMDsKLQkJYWRhcHRlci0+bnVtX2lzcnMrKzsKLQkJc3dpdGNoIChhZGFwdGVyLT5jYXJkLT5zdGF0ZSkgewotCQljYXNlIENBUkRfVVA6Ci0JCQlpZiAoaXNyICYgfklTUl9JTykgewotCQkJCWlmIChpc3IgJiBJU1JfRVJSKSB7Ci0JCQkJCWFkYXB0ZXItPmVycm9yX2ludGVycnVwdHMrKzsKLQkJCQkJaWYgKGlzciAmIElTUl9STUlTUykgewotCQkJCQkJaW50IGNvdW50OwotCQkJCQkJaW50IHByZV9jb3VudDsKLQkJCQkJCWludCBlcnJvcnM7Ci0KLQkJCQkJCXN0cnVjdCBzbGljX3JjdnF1ZXVlICpyY3ZxID0KLQkJCQkJCSAgICAmYWRhcHRlci0+cmN2cXVldWU7Ci0KLQkJCQkJCWFkYXB0ZXItPgotCQkJCQkJICAgIGVycm9yX3JtaXNzX2ludGVycnVwdHMrKzsKLQkJCQkJCWlmICghcmN2cS0+ZXJyb3JzKQotCQkJCQkJCXJjdl9jb3VudCA9IHJjdnEtPmNvdW50OwotCQkJCQkJcHJlX2NvdW50ID0gcmN2cS0+Y291bnQ7Ci0JCQkJCQllcnJvcnMgPSByY3ZxLT5lcnJvcnM7Ci0KLQkJCQkJCXdoaWxlIChyY3ZxLT5jb3VudCA8Ci0JCQkJCQkgICAgICAgU0xJQ19SQ1ZRX0ZJTExUSFJFU0gpIHsKLQkJCQkJCQljb3VudCA9Ci0JCQkJCQkJICAgIHNsaWNfcmN2cXVldWVfZmlsbAotCQkJCQkJCSAgICAoYWRhcHRlcik7Ci0JCQkJCQkJaWYgKCFjb3VudCkKLQkJCQkJCQkJYnJlYWs7Ci0JCQkJCQl9Ci0JCQkJCX0gZWxzZSBpZiAoaXNyICYgSVNSX1hEUk9QKSB7Ci0JCQkJCQlkZXZfZXJyKCZkZXYtPmRldiwKLQkJCQkJCQkiaXNyICYgSVNSX0VSUiBbJXhdICIKLQkJCQkJCQkiSVNSX1hEUk9QIFxuIiwgaXNyKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWRldl9lcnIoJmRldi0+ZGV2LAotCQkJCQkJCSJpc3IgJiBJU1JfRVJSIFsleF1cbiIsCi0JCQkJCQkJaXNyKTsKLQkJCQkJfQotCQkJCX0KLQotCQkJCWlmIChpc3IgJiBJU1JfTEVWRU5UKSB7Ci0JCQkJCWFkYXB0ZXItPmxpbmtldmVudF9pbnRlcnJ1cHRzKys7Ci0JCQkJCXNsaWNfbGlua19ldmVudF9oYW5kbGVyKGFkYXB0ZXIpOwotCQkJCX0KLQotCQkJCWlmICgoaXNyICYgSVNSX1VQQykgfHwKLQkJCQkgICAgKGlzciAmIElTUl9VUENFUlIpIHx8IChpc3IgJiBJU1JfVVBDQlNZKSkgewotCQkJCQlhZGFwdGVyLT51cHJfaW50ZXJydXB0cysrOwotCQkJCQlzbGljX3Vwcl9yZXF1ZXN0X2NvbXBsZXRlKGFkYXB0ZXIsIGlzcik7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoaXNyICYgSVNSX1JDVikgewotCQkJCWFkYXB0ZXItPnJjdl9pbnRlcnJ1cHRzKys7Ci0JCQkJc2xpY19yY3ZfaGFuZGxlcihhZGFwdGVyKTsKLQkJCX0KLQotCQkJaWYgKGlzciAmIElTUl9DTUQpIHsKLQkJCQlhZGFwdGVyLT54bWl0X2ludGVycnVwdHMrKzsKLQkJCQlzbGljX3htaXRfY29tcGxldGUoYWRhcHRlcik7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQljYXNlIENBUkRfRE9XTjoKLQkJCWlmICgoaXNyICYgSVNSX1VQQykgfHwKLQkJCSAgICAoaXNyICYgSVNSX1VQQ0VSUikgfHwgKGlzciAmIElTUl9VUENCU1kpKSB7Ci0JCQkJYWRhcHRlci0+dXByX2ludGVycnVwdHMrKzsKLQkJCQlzbGljX3Vwcl9yZXF1ZXN0X2NvbXBsZXRlKGFkYXB0ZXIsIGlzcik7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQotCQlhZGFwdGVyLT5pc3Jjb3B5ID0gMDsKLQkJYWRhcHRlci0+YWxsX3JlZ193cml0ZXMgKz0gMjsKLQkJYWRhcHRlci0+aXNyX3JlZ193cml0ZXMrKzsKLQkJc2xpY19yZWczMl93cml0ZSgmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2lzciwgMCwgRkxVU0gpOwotCX0gZWxzZSB7Ci0JCWFkYXB0ZXItPmZhbHNlX2ludGVycnVwdHMrKzsKLQl9Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi0vKgotICogc2xpY19saW5rX2V2ZW50X2hhbmRsZXIgLQotICoKLSAqIEluaXRpYXRlIGEgbGluayBjb25maWd1cmF0aW9uIHNlcXVlbmNlLiAgVGhlIGxpbmsgY29uZmlndXJhdGlvbiBiZWdpbnMKLSAqIGJ5IGlzc3VpbmcgYSBSRUFEX0xJTktfU1RBVFVTIGNvbW1hbmQgdG8gdGhlIFV0aWxpdHkgUHJvY2Vzc29yIG9uIHRoZQotICogU0xJQy4gIFNpbmNlIHRoZSBjb21tYW5kIGZpbmlzaGVzIGFzeW5jaHJvbm91c2x5LCB0aGUgc2xpY191cHJfY29tbGV0ZQotICogcm91dGluZSB3aWxsIGZvbGxvdyBpdCB1cCB3aXRoYSBVUCBjb25maWd1cmF0aW9uIHdyaXRlIGNvbW1hbmQsIHdoaWNoCi0gKiB3aWxsIGFsc28gY29tcGxldGUgYXN5bmNocm9ub3VzbHkuCi0gKgotICovCi1zdGF0aWMgdm9pZCBzbGljX2xpbmtfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpbnQgc3RhdHVzOwotCXN0cnVjdCBzbGljX3NobWVtICpwc2htZW07Ci0KLQlpZiAoYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfVVApIHsKLQkJLyogQWRhcHRlciBpcyBub3Qgb3BlcmF0aW9uYWwuICBJZ25vcmUuICAqLwotCQlyZXR1cm47Ci0JfQotCi0JcHNobWVtID0gKHN0cnVjdCBzbGljX3NobWVtICopYWRhcHRlci0+cGh5c19zaG1lbTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKLQlzdGF0dXMgPSBzbGljX3Vwcl9yZXF1ZXN0KGFkYXB0ZXIsCi0JCQkJICBTTElDX1VQUl9STFNSLAotCQkJCSAgU0xJQ19HRVRfQUREUl9MT1coJnBzaG1lbS0+bGlua3N0YXR1cyksCi0JCQkJICBTTElDX0dFVF9BRERSX0hJR0goJnBzaG1lbS0+bGlua3N0YXR1cyksCi0JCQkJICAwLCAwKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1g4NikKLQlzdGF0dXMgPSBzbGljX3Vwcl9yZXF1ZXN0KGFkYXB0ZXIsIFNMSUNfVVBSX1JMU1IsCi0JCSh1MzIpICZwc2htZW0tPmxpbmtzdGF0dXMsCS8qIG5vIDRHQiB3cmFwIGd1YXJhbnRlZWQgKi8KLQkJCQkgIDAsIDAsIDApOwotI2Vsc2UKLQlTdG9wIGNvbXBpbGF0aW9uOwotI2VuZGlmCi0JQVNTRVJUKChzdGF0dXMgPT0gU1RBVFVTX1NVQ0NFU1MpIHx8IChzdGF0dXMgPT0gU1RBVFVTX1BFTkRJTkcpKTsKLX0KLQotc3RhdGljIHZvaWQgc2xpY19pbml0X2NsZWFudXAoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaWYgKGFkYXB0ZXItPmludHJyZWdpc3RlcmVkKSB7Ci0JCWFkYXB0ZXItPmludHJyZWdpc3RlcmVkID0gMDsKLQkJZnJlZV9pcnEoYWRhcHRlci0+bmV0ZGV2LT5pcnEsIGFkYXB0ZXItPm5ldGRldik7Ci0KLQl9Ci0JaWYgKGFkYXB0ZXItPnBzaG1lbSkgewotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKLQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzbGljX3NobWVtKSwKLQkJCQkgICAgYWRhcHRlci0+cHNobWVtLCBhZGFwdGVyLT5waHlzX3NobWVtKTsKLQkJYWRhcHRlci0+cHNobWVtID0gTlVMTDsKLQkJYWRhcHRlci0+cGh5c19zaG1lbSA9IChkbWFfYWRkcl90KSBOVUxMOwotCX0KLQotCWlmIChhZGFwdGVyLT5waW5ndGltZXJzZXQpIHsKLQkJYWRhcHRlci0+cGluZ3RpbWVyc2V0ID0gMDsKLQkJZGVsX3RpbWVyKCZhZGFwdGVyLT5waW5ndGltZXIpOwotCX0KLQotCXNsaWNfcnNwcXVldWVfZnJlZShhZGFwdGVyKTsKLQlzbGljX2NtZHFfZnJlZShhZGFwdGVyKTsKLQlzbGljX3JjdnF1ZXVlX2ZyZWUoYWRhcHRlcik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc2xpY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlBU1NFUlQoYWRhcHRlcik7Ci0JZGV2LT5zdGF0cy5jb2xsaXNpb25zID0gYWRhcHRlci0+c2xpY19zdGF0cy5pZmFjZS54bWl0X2NvbGxpc2lvbnM7Ci0JZGV2LT5zdGF0cy5yeF9lcnJvcnMgPSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnJjdl9lcnJvcnM7Ci0JZGV2LT5zdGF0cy50eF9lcnJvcnMgPSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnhtdF9lcnJvcnM7Ci0JZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzID0gYWRhcHRlci0+c2xpY19zdGF0cy5pZmFjZS5yY3ZfZGlzY2FyZHM7Ci0JZGV2LT5zdGF0cy50eF9oZWFydGJlYXRfZXJyb3JzID0gMDsKLQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzID0gMDsKLQlkZXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMgPSAwOwotCWRldi0+c3RhdHMudHhfZmlmb19lcnJvcnMgPSAwOwotCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzID0gMDsKLQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgPSAwOwotCi0JcmV0dXJuICZkZXYtPnN0YXRzOwotfQotCi0vKgotICogIEFsbG9jYXRlIGEgbWNhc3RfYWRkcmVzcyBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgbXVsdGljYXN0IGFkZHJlc3MuCi0gKiAgTGluayBpdCBpbi4KLSAqLwotc3RhdGljIGludCBzbGljX21jYXN0X2FkZF9saXN0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBjaGFyICphZGRyZXNzKQotewotCXN0cnVjdCBtY2FzdF9hZGRyZXNzICptY2FkZHIsICptbGlzdDsKLQotCS8qIENoZWNrIHRvIHNlZSBpZiBpdCBhbHJlYWR5IGV4aXN0cyAqLwotCW1saXN0ID0gYWRhcHRlci0+bWNhc3RhZGRyczsKLQl3aGlsZSAobWxpc3QpIHsKLQkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIobWxpc3QtPmFkZHJlc3MsIGFkZHJlc3MpKQotCQkJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotCQltbGlzdCA9IG1saXN0LT5uZXh0OwotCX0KLQotCS8qIERvZXNuJ3QgYWxyZWFkeSBleGlzdC4gIEFsbG9jYXRlIGEgc3RydWN0dXJlIHRvIGhvbGQgaXQgKi8KLQltY2FkZHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWNhc3RfYWRkcmVzcyksIEdGUF9BVE9NSUMpOwotCWlmIChtY2FkZHIgPT0gTlVMTCkKLQkJcmV0dXJuIDE7Ci0KLQltZW1jcHkobWNhZGRyLT5hZGRyZXNzLCBhZGRyZXNzLCA2KTsKLQotCW1jYWRkci0+bmV4dCA9IGFkYXB0ZXItPm1jYXN0YWRkcnM7Ci0JYWRhcHRlci0+bWNhc3RhZGRycyA9IG1jYWRkcjsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQogLyoKICAqIEZ1bmN0aW9ucyB0byBvYnRhaW4gdGhlIENSQyBjb3JyZXNwb25kaW5nIHRvIHRoZSBkZXN0aW5hdGlvbiBtYWMgYWRkcmVzcy4KICAqIFRoaXMgaXMgYSBzdGFuZGFyZCBldGhlcm5ldCBDUkMgaW4gdGhhdCBpdCBpcyBhIDMyLWJpdCwgcmVmbGVjdGVkIENSQyB1c2luZwpAQCAtMTM2Miw0NCArMjk2LDYgQEAKIAlhZGFwdGVyLT5tY2FzdG1hc2sgfD0gKHU2NCkgMSA8PCBjcmNwb2x5OwogfQogCi1zdGF0aWMgdm9pZCBzbGljX21jYXN0X3NldF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKLQljaGFyICphZGRyZXNzZXM7Ci0Jc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKLQotCUFTU0VSVChhZGFwdGVyKTsKLQotCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHsKLQkJYWRkcmVzc2VzID0gKGNoYXIgKikgJmhhLT5hZGRyOwotCQlzdGF0dXMgPSBzbGljX21jYXN0X2FkZF9saXN0KGFkYXB0ZXIsIGFkZHJlc3Nlcyk7Ci0JCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlicmVhazsKLQkJc2xpY19tY2FzdF9zZXRfYml0KGFkYXB0ZXIsIGFkZHJlc3Nlcyk7Ci0JfQotCi0JaWYgKGFkYXB0ZXItPmRldmZsYWdzX3ByZXYgIT0gZGV2LT5mbGFncykgewotCQlhZGFwdGVyLT5tYWNvcHRzID0gTUFDX0RJUkVDVEVEOwotCQlpZiAoZGV2LT5mbGFncykgewotCQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQlJPQURDQVNUKQotCQkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX0JDQVNUOwotCQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKLQkJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19QUk9NSVNDOwotCQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCi0JCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfQUxMTUNBU1Q7Ci0JCQlpZiAoZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QpCi0JCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfTUNBU1Q7Ci0JCX0KLQkJYWRhcHRlci0+ZGV2ZmxhZ3NfcHJldiA9IGRldi0+ZmxhZ3M7Ci0JCXNsaWNfY29uZmlnX3NldChhZGFwdGVyLCB0cnVlKTsKLQl9IGVsc2UgewotCQlpZiAoc3RhdHVzID09IFNUQVRVU19TVUNDRVNTKQotCQkJc2xpY19tY2FzdF9zZXRfbWFzayhhZGFwdGVyKTsKLQl9Ci0JcmV0dXJuOwotfQotCiBzdGF0aWMgdm9pZCBzbGljX21jYXN0X3NldF9tYXNrKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewogCV9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqc2xpY19yZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOwpAQCAtMTQzOSwxMjMgKzMzNSw2IEBACiAJYWRkX3RpbWVyKCZhZGFwdGVyLT5waW5ndGltZXIpOwogfQogCi0vKgotICogIHNsaWNfaWZfaW5pdAotICoKLSAqICBQZXJmb3JtIGluaXRpYWxpemF0aW9uIG9mIG91ciBzbGljIGludGVyZmFjZS4KLSAqCi0gKi8KLXN0YXRpYyBpbnQgc2xpY19pZl9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQotewotCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKLQlzdHJ1Y3Qgc2xpY19zaG1lbSAqcHNobWVtOwotCWludCBzdGF0dXMgPSAwOwotCi0JQVNTRVJUKGNhcmQpOwotCi0JLyogYWRhcHRlciBzaG91bGQgYmUgZG93biBhdCB0aGlzIHBvaW50ICovCi0JaWYgKGFkYXB0ZXItPnN0YXRlICE9IEFEQVBUX0RPV04pIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICIlczogYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfRE9XTlxuIiwKLQkJCV9fZnVuY19fKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCUFTU0VSVChhZGFwdGVyLT5saW5rc3RhdGUgPT0gTElOS19ET1dOKTsKLQotCWFkYXB0ZXItPmRldmZsYWdzX3ByZXYgPSBkZXYtPmZsYWdzOwotCWFkYXB0ZXItPm1hY29wdHMgPSBNQUNfRElSRUNURUQ7Ci0JaWYgKGRldi0+ZmxhZ3MpIHsKLQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQlJPQURDQVNUKQotCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfQkNBU1Q7Ci0JCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCi0JCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19QUk9NSVNDOwotCQlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkKLQkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX0FMTE1DQVNUOwotCQlpZiAoZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QpCi0JCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19NQ0FTVDsKLQl9Ci0Jc3RhdHVzID0gc2xpY19hZGFwdGVyX2FsbG9jcmVzb3VyY2VzKGFkYXB0ZXIpOwotCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsCi0JCQkiJXM6IHNsaWNfYWRhcHRlcl9hbGxvY3Jlc291cmNlcyBGQUlMRUQgJXhcbiIsCi0JCQlfX2Z1bmNfXywgc3RhdHVzKTsKLQkJc2xpY19hZGFwdGVyX2ZyZWVyZXNvdXJjZXMoYWRhcHRlcik7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JaWYgKCFhZGFwdGVyLT5xdWV1ZXNfaW5pdGlhbGl6ZWQpIHsKLQkJaWYgKHNsaWNfcnNwcXVldWVfaW5pdChhZGFwdGVyKSkKLQkJCXJldHVybiAtRU5PTUVNOwotCQlpZiAoc2xpY19jbWRxX2luaXQoYWRhcHRlcikpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJaWYgKHNsaWNfcmN2cXVldWVfaW5pdChhZGFwdGVyKSkKLQkJCXJldHVybiAtRU5PTUVNOwotCQlhZGFwdGVyLT5xdWV1ZXNfaW5pdGlhbGl6ZWQgPSAxOwotCX0KLQotCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19pY3IsIElDUl9JTlRfT0ZGLCBGTFVTSCk7Ci0JbWRlbGF5KDEpOwotCi0JaWYgKCFhZGFwdGVyLT5pc3BfaW5pdGlhbGl6ZWQpIHsKLQkJcHNobWVtID0gKHN0cnVjdCBzbGljX3NobWVtICopYWRhcHRlci0+cGh5c19zaG1lbTsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Yml0NjRyZWdsb2NrLmxvY2ssCi0JCQkJCWFkYXB0ZXItPmJpdDY0cmVnbG9jay5mbGFncyk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpCi0JCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAotCQkJCSBTTElDX0dFVF9BRERSX0hJR0goJnBzaG1lbS0+aXNyKSwgRE9OVF9GTFVTSCk7Ci0JCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19pc3AsCi0JCQkJIFNMSUNfR0VUX0FERFJfTE9XKCZwc2htZW0tPmlzciksIEZMVVNIKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1g4NikKLQkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsIDAsIERPTlRfRkxVU0gpOwotCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfaXNwLCAodTMyKSZwc2htZW0tPmlzciwgRkxVU0gpOwotI2Vsc2UKLQkJU3RvcCBDb21waWxhdGlvbnMKLSNlbmRpZgotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5iaXQ2NHJlZ2xvY2subG9jaywKLQkJCQkJYWRhcHRlci0+Yml0NjRyZWdsb2NrLmZsYWdzKTsKLQkJYWRhcHRlci0+aXNwX2luaXRpYWxpemVkID0gMTsKLQl9Ci0KLQlhZGFwdGVyLT5zdGF0ZSA9IEFEQVBUX1VQOwotCWlmICghY2FyZC0+bG9hZHRpbWVyc2V0KSB7Ci0JCWluaXRfdGltZXIoJmNhcmQtPmxvYWR0aW1lcik7Ci0JCWNhcmQtPmxvYWR0aW1lci5leHBpcmVzID0KLQkJICAgIGppZmZpZXMgKyAoU0xJQ19MT0FEVElNRVJfUEVSSU9EICogSFopOwotCQljYXJkLT5sb2FkdGltZXIuZGF0YSA9ICh1bG9uZykgY2FyZDsKLQkJY2FyZC0+bG9hZHRpbWVyLmZ1bmN0aW9uID0gJnNsaWNfdGltZXJfbG9hZF9jaGVjazsKLQkJYWRkX3RpbWVyKCZjYXJkLT5sb2FkdGltZXIpOwotCi0JCWNhcmQtPmxvYWR0aW1lcnNldCA9IDE7Ci0JfQotCi0JaWYgKCFhZGFwdGVyLT5waW5ndGltZXJzZXQpIHsKLQkJaW5pdF90aW1lcigmYWRhcHRlci0+cGluZ3RpbWVyKTsKLQkJYWRhcHRlci0+cGluZ3RpbWVyLmV4cGlyZXMgPQotCQkgICAgamlmZmllcyArIChQSU5HX1RJTUVSX0lOVEVSVkFMICogSFopOwotCQlhZGFwdGVyLT5waW5ndGltZXIuZGF0YSA9ICh1bG9uZykgZGV2OwotCQlhZGFwdGVyLT5waW5ndGltZXIuZnVuY3Rpb24gPSAmc2xpY190aW1lcl9waW5nOwotCQlhZGRfdGltZXIoJmFkYXB0ZXItPnBpbmd0aW1lcik7Ci0JCWFkYXB0ZXItPnBpbmd0aW1lcnNldCA9IDE7Ci0JCWFkYXB0ZXItPmNhcmQtPnBpbmdzdGF0dXMgPSBJU1JfUElOR01BU0s7Ci0JfQotCi0JLyoKLQkgKiAgICBjbGVhciBhbnkgcGVuZGluZyBldmVudHMsIHRoZW4gZW5hYmxlIGludGVycnVwdHMKLQkgKi8KLQlhZGFwdGVyLT5pc3Jjb3B5ID0gMDsKLQlhZGFwdGVyLT5wc2htZW0tPmlzciA9IDA7Ci0Jc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2lzciwgMCwgRkxVU0gpOwotCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19pY3IsIElDUl9JTlRfT04sIEZMVVNIKTsKLQotCXNsaWNfbGlua19jb25maWcoYWRhcHRlciwgTElOS19BVVRPU1BFRUQsIExJTktfQVVUT0QpOwotCXNsaWNfbGlua19ldmVudF9oYW5kbGVyKGFkYXB0ZXIpOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCiBzdGF0aWMgdm9pZCBzbGljX3VubWFwX21taW9fc3BhY2Uoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJaWYgKGFkYXB0ZXItPnNsaWNfcmVncykKQEAgLTE1NjMsNjQgKzM0Miw2IEBACiAJYWRhcHRlci0+c2xpY19yZWdzID0gTlVMTDsKIH0KIAotc3RhdGljIGludCBzbGljX2FkYXB0ZXJfYWxsb2NyZXNvdXJjZXMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaWYgKCFhZGFwdGVyLT5pbnRycmVnaXN0ZXJlZCkgewotCQlpbnQgcmV0dmFsOwotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2ssCi0JCQkJCXNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmZsYWdzKTsKLQotCQlyZXR2YWwgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5uZXRkZXYtPmlycSwKLQkJCQkgICAgICZzbGljX2ludGVycnVwdCwKLQkJCQkgICAgIElSUUZfU0hBUkVELAotCQkJCSAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5uZXRkZXYpOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5sb2NrLAotCQkJCQlzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5mbGFncyk7Ci0KLQkJaWYgKHJldHZhbCkgewotCQkJZGV2X2VycigmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCi0JCQkJInJlcXVlc3RfaXJxICglcykgRkFJTEVEIFsleF1cbiIsCi0JCQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCByZXR2YWwpOwotCQkJcmV0dXJuIHJldHZhbDsKLQkJfQotCQlhZGFwdGVyLT5pbnRycmVnaXN0ZXJlZCA9IDE7Ci0JfQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIHZvaWQgc2xpY19jb25maWdfcGNpKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpCi17Ci0JdTE2IHBjaV9jb21tYW5kOwotCXUxNiBuZXdfY29tbWFuZDsKLQotCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBjaWRldiwgUENJX0NPTU1BTkQsICZwY2lfY29tbWFuZCk7Ci0KLQluZXdfY29tbWFuZCA9IHBjaV9jb21tYW5kIHwgUENJX0NPTU1BTkRfTUFTVEVSCi0JICAgIHwgUENJX0NPTU1BTkRfTUVNT1JZCi0JICAgIHwgUENJX0NPTU1BTkRfSU5WQUxJREFURQotCSAgICB8IFBDSV9DT01NQU5EX1BBUklUWSB8IFBDSV9DT01NQU5EX1NFUlIgfCBQQ0lfQ09NTUFORF9GQVNUX0JBQ0s7Ci0JaWYgKHBjaV9jb21tYW5kICE9IG5ld19jb21tYW5kKQotCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGNpZGV2LCBQQ0lfQ09NTUFORCwgbmV3X2NvbW1hbmQpOwotfQotCi1zdGF0aWMgdm9pZCBzbGljX2FkYXB0ZXJfZnJlZXJlc291cmNlcyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKLXsKLQlzbGljX2luaXRfY2xlYW51cChhZGFwdGVyKTsKLQltZW1zZXQoJmFkYXB0ZXItPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpKTsKLQlhZGFwdGVyLT5lcnJvcl9pbnRlcnJ1cHRzID0gMDsKLQlhZGFwdGVyLT5yY3ZfaW50ZXJydXB0cyA9IDA7Ci0JYWRhcHRlci0+eG1pdF9pbnRlcnJ1cHRzID0gMDsKLQlhZGFwdGVyLT5saW5rZXZlbnRfaW50ZXJydXB0cyA9IDA7Ci0JYWRhcHRlci0+dXByX2ludGVycnVwdHMgPSAwOwotCWFkYXB0ZXItPm51bV9pc3JzID0gMDsKLQlhZGFwdGVyLT54bWl0X2NvbXBsZXRlcyA9IDA7Ci0JYWRhcHRlci0+cmN2X2Jyb2FkY2FzdHMgPSAwOwotCWFkYXB0ZXItPnJjdl9tdWx0aWNhc3RzID0gMDsKLQlhZGFwdGVyLT5yY3ZfdW5pY2FzdHMgPSAwOwotfQotCiAvKgogICogIHNsaWNfbGlua19jb25maWcKICAqCkBAIC0xNzc0LDE4ICs0OTUsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgc2xpY19jYXJkX2NsZWFudXAoc3RydWN0IHNsaWNjYXJkICpjYXJkKQotewotCWlmIChjYXJkLT5sb2FkdGltZXJzZXQpIHsKLQkJY2FyZC0+bG9hZHRpbWVyc2V0ID0gMDsKLQkJZGVsX3RpbWVyKCZjYXJkLT5sb2FkdGltZXIpOwotCX0KLQotCXNsaWNfZGVidWdfY2FyZF9kZXN0cm95KGNhcmQpOwotCi0Ja2ZyZWUoY2FyZCk7Ci19Ci0KIHN0YXRpYyBpbnQgc2xpY19jYXJkX2Rvd25sb2FkX2dicmN2KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CkBAIC0xOTY3LDcgKzY3Niw3IEBACiAJICAgYW5kIHJlYWNoIG1haW5sb29wICovCiAJbWRlbGF5KDIwKTsKIAotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKKwlyZXR1cm4gMDsKIH0KIAogTU9EVUxFX0ZJUk1XQVJFKCJzbGljb3NzL29hc2lzZG93bmxvYWQuc3lzIik7CkBAIC0xOTk5LDMxNyArNzA4LDYgQEAKIAlhZGFwdGVyLT5jYXJkLT5sb2FkbGV2ZWxfY3VycmVudCA9IHZhbHVlOwogfQogCi1zdGF0aWMgaW50IHNsaWNfY2FyZF9pbml0KHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7Ci0Jc3RydWN0IHNsaWNfZWVwcm9tICpwZWVwcm9tOwotCXN0cnVjdCBvc2xpY19lZXByb20gKnBPZWVwcm9tOwotCWRtYV9hZGRyX3QgcGh5c19jb25maWc7Ci0JdTMyIHBoeXNfY29uZmlnaDsKLQl1MzIgcGh5c19jb25maWdsOwotCXUzMiBpID0gMDsKLQlzdHJ1Y3Qgc2xpY19zaG1lbSAqcHNobWVtOwotCWludCBzdGF0dXM7Ci0JdWludCBtYWNhZGRycyA9IGNhcmQtPmNhcmRfc2l6ZTsKLQl1c2hvcnQgZWVjb2Rlc2l6ZTsKLQl1c2hvcnQgZHJhbXNpemU7Ci0JdXNob3J0IGVlX2Noa3N1bTsKLQl1c2hvcnQgY2FsY19jaGtzdW07Ci0Jc3RydWN0IHNsaWNfY29uZmlnX21hYyAqcG1hYzsKLQl1bnNpZ25lZCBjaGFyIGZydWZvcm1hdDsKLQl1bnNpZ25lZCBjaGFyIG9lbWZydWZvcm1hdDsKLQlzdHJ1Y3QgYXRrX2ZydSAqcGF0a2ZydTsKLQl1bmlvbiBvZW1mcnUgKnBvZW1mcnU7Ci0KLQkvKiBSZXNldCBldmVyeXRoaW5nIGV4Y2VwdCBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSAqLwotCXNsaWNfc29mdF9yZXNldChhZGFwdGVyKTsKLQotCS8qIERvd25sb2FkIHRoZSBtaWNyb2NvZGUgKi8KLQlzdGF0dXMgPSBzbGljX2NhcmRfZG93bmxvYWQoYWRhcHRlcik7Ci0KLQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCWRldl9lcnIoJmFkYXB0ZXItPnBjaWRldi0+ZGV2LAotCQkJImRvd25sb2FkIGZhaWxlZCBidXMgJWQgc2xvdCAlZFxuIiwKLQkJCWFkYXB0ZXItPmJ1c251bWJlciwgYWRhcHRlci0+c2xvdG51bWJlcik7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JaWYgKCFjYXJkLT5jb25maWdfc2V0KSB7Ci0JCXBlZXByb20gPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCi0JCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHNsaWNfZWVwcm9tKSwKLQkJCQkJICAgICAgICZwaHlzX2NvbmZpZyk7Ci0KLQkJcGh5c19jb25maWdsID0gU0xJQ19HRVRfQUREUl9MT1cocGh5c19jb25maWcpOwotCQlwaHlzX2NvbmZpZ2ggPSBTTElDX0dFVF9BRERSX0hJR0gocGh5c19jb25maWcpOwotCi0JCWlmICghcGVlcHJvbSkgewotCQkJZGV2X2VycigmYWRhcHRlci0+cGNpZGV2LT5kZXYsCi0JCQkJImVlcHJvbSByZWFkIGZhaWxlZCB0byBnZXQgbWVtb3J5ICIKLQkJCQkiYnVzICVkIHNsb3QgJWRcbiIsIGFkYXB0ZXItPmJ1c251bWJlciwKLQkJCQlhZGFwdGVyLT5zbG90bnVtYmVyKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9IGVsc2UgewotCQkJbWVtc2V0KHBlZXByb20sIDAsIHNpemVvZihzdHJ1Y3Qgc2xpY19lZXByb20pKTsKLQkJfQotCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfaWNyLCBJQ1JfSU5UX09GRiwgRkxVU0gpOwotCQltZGVsYXkoMSk7Ci0JCXBzaG1lbSA9IChzdHJ1Y3Qgc2xpY19zaG1lbSAqKWFkYXB0ZXItPnBoeXNfc2htZW07Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmJpdDY0cmVnbG9jay5sb2NrLAotCQkJCQlhZGFwdGVyLT5iaXQ2NHJlZ2xvY2suZmxhZ3MpOwotCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwgMCwgRE9OVF9GTFVTSCk7Ci0JCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19pc3AsCi0JCQkJIFNMSUNfR0VUX0FERFJfTE9XKCZwc2htZW0tPmlzciksIEZMVVNIKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Yml0NjRyZWdsb2NrLmxvY2ssCi0JCQkJCWFkYXB0ZXItPmJpdDY0cmVnbG9jay5mbGFncyk7Ci0KLQkJc2xpY19jb25maWdfZ2V0KGFkYXB0ZXIsIHBoeXNfY29uZmlnbCwgcGh5c19jb25maWdoKTsKLQotCQlmb3IgKDs7KSB7Ci0JCQlpZiAoYWRhcHRlci0+cHNobWVtLT5pc3IpIHsKLQkJCQlpZiAoYWRhcHRlci0+cHNobWVtLT5pc3IgJiBJU1JfVVBDKSB7Ci0JCQkJCWFkYXB0ZXItPnBzaG1lbS0+aXNyID0gMDsKLQkJCQkJc2xpY19yZWc2NF93cml0ZShhZGFwdGVyLAotCQkJCQkJJnNsaWNfcmVncy0+c2xpY19pc3AsIDAsCi0JCQkJCQkmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCi0JCQkJCQkwLCBGTFVTSCk7Ci0JCQkJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19pc3IsCi0JCQkJCQkJIDAsIEZMVVNIKTsKLQotCQkJCQlzbGljX3Vwcl9yZXF1ZXN0X2NvbXBsZXRlKGFkYXB0ZXIsIDApOwotCQkJCQlicmVhazsKLQkJCQl9IGVsc2UgewotCQkJCQlhZGFwdGVyLT5wc2htZW0tPmlzciA9IDA7Ci0JCQkJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19pc3IsCi0JCQkJCQkJIDAsIEZMVVNIKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCW1kZWxheSgxKTsKLQkJCQlpKys7Ci0JCQkJaWYgKGkgPiA1MDAwKSB7Ci0JCQkJCWRldl9lcnIoJmFkYXB0ZXItPnBjaWRldi0+ZGV2LAotCQkJCQkJIiVkIGNvbmZpZyBkYXRhIGZldGNoIHRpbWVkIG91dCFcbiIsCi0JCQkJCQlhZGFwdGVyLT5wb3J0KTsKLQkJCQkJc2xpY19yZWc2NF93cml0ZShhZGFwdGVyLAotCQkJCQkJJnNsaWNfcmVncy0+c2xpY19pc3AsIDAsCi0JCQkJCQkmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCi0JCQkJCQkwLCBGTFVTSCk7Ci0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXN3aXRjaCAoYWRhcHRlci0+ZGV2aWQpIHsKLQkJLyogT2FzaXMgY2FyZCAqLwotCQljYXNlIFNMSUNfMkdCX0RFVklDRV9JRDoKLQkJCS8qIGV4dHJhY3QgRUVQUk9NIGRhdGEgYW5kIHBvaW50ZXJzIHRvIEVFUFJPTSBkYXRhICovCi0JCQlwT2VlcHJvbSA9IChzdHJ1Y3Qgb3NsaWNfZWVwcm9tICopIHBlZXByb207Ci0JCQllZWNvZGVzaXplID0gcE9lZXByb20tPkVlY29kZVNpemU7Ci0JCQlkcmFtc2l6ZSA9IHBPZWVwcm9tLT5EcmFtU2l6ZTsKLQkJCXBtYWMgPSBwT2VlcHJvbS0+TWFjSW5mbzsKLQkJCWZydWZvcm1hdCA9IHBPZWVwcm9tLT5GcnVGb3JtYXQ7Ci0JCQlwYXRrZnJ1ID0gJnBPZWVwcm9tLT5BdGtGcnU7Ci0JCQlvZW1mcnVmb3JtYXQgPSBwT2VlcHJvbS0+T2VtRnJ1Rm9ybWF0OwotCQkJcG9lbWZydSA9ICZwT2VlcHJvbS0+T2VtRnJ1OwotCQkJbWFjYWRkcnMgPSAyOwotCQkJLyogTWlub3Iga2x1ZGdlIGZvciBPYXNpcyBjYXJkCi0JCQkgICAgIGdldCAyIE1BQyBhZGRyZXNzZXMgZnJvbSB0aGUKLQkJCSAgICAgRUVQUk9NIHRvIGVuc3VyZSB0aGF0IGZ1bmN0aW9uIDEKLQkJCSAgICAgZ2V0cyB0aGUgUG9ydCAxIE1BQyBhZGRyZXNzICovCi0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCS8qIGV4dHJhY3QgRUVQUk9NIGRhdGEgYW5kIHBvaW50ZXJzIHRvIEVFUFJPTSBkYXRhICovCi0JCQllZWNvZGVzaXplID0gcGVlcHJvbS0+RWVjb2RlU2l6ZTsKLQkJCWRyYW1zaXplID0gcGVlcHJvbS0+RHJhbVNpemU7Ci0JCQlwbWFjID0gcGVlcHJvbS0+dTIubWFjLk1hY0luZm87Ci0JCQlmcnVmb3JtYXQgPSBwZWVwcm9tLT5GcnVGb3JtYXQ7Ci0JCQlwYXRrZnJ1ID0gJnBlZXByb20tPkF0a0ZydTsKLQkJCW9lbWZydWZvcm1hdCA9IHBlZXByb20tPk9lbUZydUZvcm1hdDsKLQkJCXBvZW1mcnUgPSAmcGVlcHJvbS0+T2VtRnJ1OwotCQkJYnJlYWs7Ci0JCX0KLQotCQljYXJkLT5jb25maWcuRWVwcm9tVmFsaWQgPSBmYWxzZTsKLQotCQkvKiAgc2VlIGlmIHRoZSBFRVBST00gaXMgdmFsaWQgYnkgY2hlY2tpbmcgaXQncyBjaGVja3N1bSAqLwotCQlpZiAoKGVlY29kZXNpemUgPD0gTUFYX0VFQ09ERV9TSVpFKSAmJgotCQkgICAgKGVlY29kZXNpemUgPj0gTUlOX0VFQ09ERV9TSVpFKSkgewotCi0JCQllZV9jaGtzdW0gPQotCQkJICAgICoodTE2ICopICgoY2hhciAqKSBwZWVwcm9tICsgKGVlY29kZXNpemUgLSAyKSk7Ci0JCQkvKgotCQkJICAgIGNhbGN1bGF0ZSB0aGUgRUVQUk9NIGNoZWNrc3VtCi0JCQkqLwotCQkJY2FsY19jaGtzdW0gPQotCQkJICAgIH5zbGljX2VlcHJvbV9ja3N1bSgoY2hhciAqKSBwZWVwcm9tLAotCQkJCQkgICAgICAgKGVlY29kZXNpemUgLSAyKSk7Ci0JCQkvKgotCQkJICAgIGlmIHRoZSB1Y2RvZSBjaGtzdW0gZmxhZyBiaXQgd29ya2VkLAotCQkJICAgIHdlIHdvdWxkbid0IG5lZWQgdGhpcyBzaGl0Ci0JCQkqLwotCQkJaWYgKGVlX2Noa3N1bSA9PSBjYWxjX2Noa3N1bSkKLQkJCQljYXJkLT5jb25maWcuRWVwcm9tVmFsaWQgPSB0cnVlOwotCQl9Ci0JCS8qICBjb3B5IGluIHRoZSBEUkFNIHNpemUgKi8KLQkJY2FyZC0+Y29uZmlnLkRyYW1TaXplID0gZHJhbXNpemU7Ci0KLQkJLyogIGNvcHkgaW4gdGhlIE1BQyBhZGRyZXNzKGVzKSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgbWFjYWRkcnM7IGkrKykgewotCQkJbWVtY3B5KCZjYXJkLT5jb25maWcuTWFjSW5mb1tpXSwKLQkJCSAgICAgICAmcG1hY1tpXSwgc2l6ZW9mKHN0cnVjdCBzbGljX2NvbmZpZ19tYWMpKTsKLQkJfQotCi0JCS8qICBjb3B5IHRoZSBBbGFjcml0ZWNoIEZSVSBpbmZvcm1hdGlvbiAqLwotCQljYXJkLT5jb25maWcuRnJ1Rm9ybWF0ID0gZnJ1Zm9ybWF0OwotCQltZW1jcHkoJmNhcmQtPmNvbmZpZy5BdGtGcnUsIHBhdGtmcnUsCi0JCQkJCQlzaXplb2Yoc3RydWN0IGF0a19mcnUpKTsKLQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKLQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzbGljX2VlcHJvbSksCi0JCQkJICAgIHBlZXByb20sIHBoeXNfY29uZmlnKTsKLQotCQlpZiAoKCFjYXJkLT5jb25maWcuRWVwcm9tVmFsaWQpICYmCi0JCSAgICAoYWRhcHRlci0+cmVnX3BhcmFtcy5mYWlsX29uX2JhZF9lZXByb20pKSB7Ci0JCQlzbGljX3JlZzY0X3dyaXRlKGFkYXB0ZXIsICZzbGljX3JlZ3MtPnNsaWNfaXNwLCAwLAotCQkJCQkgJnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAotCQkJCQkgMCwgRkxVU0gpOwotCQkJZGV2X2VycigmYWRhcHRlci0+cGNpZGV2LT5kZXYsCi0JCQkJInVuc3VwcG9ydGVkIENPTkZJR1VSQVRJT04gRUVQUk9NIGludmFsaWRcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQljYXJkLT5jb25maWdfc2V0ID0gMTsKLQl9Ci0KLQlpZiAoc2xpY19jYXJkX2Rvd25sb2FkX2dicmN2KGFkYXB0ZXIpKSB7Ci0JCWRldl9lcnIoJmFkYXB0ZXItPnBjaWRldi0+ZGV2LAotCQkJInVuYWJsZSB0byBkb3dubG9hZCBHQiByZWNlaXZlIG1pY3JvY29kZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChzbGljX2dsb2JhbC5keW5hbWljX2ludGFnZykKLQkJc2xpY19pbnRhZ2dfc2V0KGFkYXB0ZXIsIDApOwotCWVsc2UKLQkJc2xpY19pbnRhZ2dfc2V0KGFkYXB0ZXIsIGludGFnZ19kZWxheSk7Ci0KLQkvKgotCSAqICBJbml0aWFsaXplIHBpbmcgc3RhdHVzIHRvICJvayIKLQkgKi8KLQljYXJkLT5waW5nc3RhdHVzID0gSVNSX1BJTkdNQVNLOwotCi0JLyoKLQkgKiBMYXN0bHksIG1hcmsgb3VyIGNhcmQgc3RhdGUgYXMgdXAgYW5kIHJldHVybiBzdWNjZXNzCi0JICovCi0JY2FyZC0+c3RhdGUgPSBDQVJEX1VQOwotCWNhcmQtPnJlc2V0X2luX3Byb2dyZXNzID0gMDsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIHUzMiBzbGljX2NhcmRfbG9jYXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQotewotCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IHNsaWNfZ2xvYmFsLnNsaWNfY2FyZDsKLQlzdHJ1Y3QgcGh5c2NhcmQgKnBoeXNjYXJkID0gc2xpY19nbG9iYWwucGh5c19jYXJkOwotCXVzaG9ydCBjYXJkX2hvc3RpZDsKLQl1MTYgX19pb21lbSAqaG9zdGlkX3JlZzsKLQl1aW50IGk7Ci0JdWludCByZGhvc3RpZF9vZmZzZXQgPSAwOwotCi0Jc3dpdGNoIChhZGFwdGVyLT5kZXZpZCkgewotCWNhc2UgU0xJQ18yR0JfREVWSUNFX0lEOgotCQlyZGhvc3RpZF9vZmZzZXQgPSBTTElDX1JESE9TVElEXzJHQjsKLQkJYnJlYWs7Ci0JY2FzZSBTTElDXzFHQl9ERVZJQ0VfSUQ6Ci0JCXJkaG9zdGlkX29mZnNldCA9IFNMSUNfUkRIT1NUSURfMUdCOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlBU1NFUlQoMCk7Ci0JCWJyZWFrOwotCX0KLQotCWhvc3RpZF9yZWcgPQotCSAgICAodTE2IF9faW9tZW0gKikgKCgodTggX19pb21lbSAqKSAoYWRhcHRlci0+c2xpY19yZWdzKSkgKwotCSAgICByZGhvc3RpZF9vZmZzZXQpOwotCi0JLyogcmVhZCB0aGUgMTYgYml0IGhvc3RpZCBmcm9tIFNSQU0gKi8KLQljYXJkX2hvc3RpZCA9ICh1c2hvcnQpIHJlYWR3KGhvc3RpZF9yZWcpOwotCi0JLyogSW5pdGlhbGl6ZSBhIG5ldyBjYXJkIHN0cnVjdHVyZSBpZiBuZWVkIGJlICovCi0JaWYgKGNhcmRfaG9zdGlkID09IFNMSUNfSE9TVElEX0RFRkFVTFQpIHsKLQkJY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbGljY2FyZCksIEdGUF9LRVJORUwpOwotCQlpZiAoY2FyZCA9PSBOVUxMKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJY2FyZC0+bmV4dCA9IHNsaWNfZ2xvYmFsLnNsaWNfY2FyZDsKLQkJc2xpY19nbG9iYWwuc2xpY19jYXJkID0gY2FyZDsKLQkJY2FyZC0+YnVzbnVtYmVyID0gYWRhcHRlci0+YnVzbnVtYmVyOwotCQljYXJkLT5zbG90bnVtYmVyID0gYWRhcHRlci0+c2xvdG51bWJlcjsKLQotCQkvKiBGaW5kIGFuIGF2YWlsYWJsZSBjYXJkbnVtICovCi0JCWZvciAoaSA9IDA7IGkgPCBTTElDX01BWF9DQVJEUzsgaSsrKSB7Ci0JCQlpZiAoc2xpY19nbG9iYWwuY2FyZG51bWludXNlW2ldID09IDApIHsKLQkJCQlzbGljX2dsb2JhbC5jYXJkbnVtaW51c2VbaV0gPSAxOwotCQkJCWNhcmQtPmNhcmRudW0gPSBpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXNsaWNfZ2xvYmFsLm51bV9zbGljX2NhcmRzKys7Ci0KLQkJc2xpY19kZWJ1Z19jYXJkX2NyZWF0ZShjYXJkKTsKLQl9IGVsc2UgewotCQkvKiBDYXJkIGV4aXN0cywgZmluZCB0aGUgY2FyZCB0aGlzIGFkYXB0ZXIgYmVsb25ncyB0byAqLwotCQl3aGlsZSAoY2FyZCkgewotCQkJaWYgKGNhcmQtPmNhcmRudW0gPT0gY2FyZF9ob3N0aWQpCi0JCQkJYnJlYWs7Ci0JCQljYXJkID0gY2FyZC0+bmV4dDsKLQkJfQotCX0KLQotCUFTU0VSVChjYXJkKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiBTVEFUVVNfRkFJTFVSRTsKLQkvKiBQdXQgdGhlIGFkYXB0ZXIgaW4gdGhlIGNhcmQncyBhZGFwdGVyIGxpc3QgKi8KLQlBU1NFUlQoY2FyZC0+YWRhcHRlclthZGFwdGVyLT5wb3J0XSA9PSBOVUxMKTsKLQlpZiAoIWNhcmQtPmFkYXB0ZXJbYWRhcHRlci0+cG9ydF0pIHsKLQkJY2FyZC0+YWRhcHRlclthZGFwdGVyLT5wb3J0XSA9IGFkYXB0ZXI7Ci0JCWFkYXB0ZXItPmNhcmQgPSBjYXJkOwotCX0KLQotCWNhcmQtPmNhcmRfc2l6ZSA9IDE7CS8qIG9uZSBwb3J0IHBlciAqbG9naWNhbCogY2FyZCAqLwotCi0Jd2hpbGUgKHBoeXNjYXJkKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBTTElDX01BWF9QT1JUUzsgaSsrKSB7Ci0JCQlpZiAoIXBoeXNjYXJkLT5hZGFwdGVyW2ldKQotCQkJCWNvbnRpbnVlOwotCQkJZWxzZQotCQkJCWJyZWFrOwotCQl9Ci0JCUFTU0VSVChpICE9IFNMSUNfTUFYX1BPUlRTKTsKLQkJaWYgKHBoeXNjYXJkLT5hZGFwdGVyW2ldLT5zbG90bnVtYmVyID09IGFkYXB0ZXItPnNsb3RudW1iZXIpCi0JCQlicmVhazsKLQkJcGh5c2NhcmQgPSBwaHlzY2FyZC0+bmV4dDsKLQl9Ci0JaWYgKCFwaHlzY2FyZCkgewotCQkvKiBubyBzdHJ1Y3R1cmUgYWxsb2NhdGVkIGZvciB0aGlzIHBoeXNpY2FsIGNhcmQgeWV0ICovCi0JCXBoeXNjYXJkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBoeXNjYXJkKSwgR0ZQX0FUT01JQyk7Ci0JCUFTU0VSVChwaHlzY2FyZCk7Ci0KLQkJcGh5c2NhcmQtPm5leHQgPSBzbGljX2dsb2JhbC5waHlzX2NhcmQ7Ci0JCXNsaWNfZ2xvYmFsLnBoeXNfY2FyZCA9IHBoeXNjYXJkOwotCQlwaHlzY2FyZC0+YWRhcHRlcnNfYWxsb2NkID0gMTsKLQl9IGVsc2UgewotCQlwaHlzY2FyZC0+YWRhcHRlcnNfYWxsb2NkKys7Ci0JfQotCS8qIE5vdGUgLSB0aGlzIGlzIFpFUk8gcmVsYXRpdmUgKi8KLQlhZGFwdGVyLT5waHlzcG9ydCA9IHBoeXNjYXJkLT5hZGFwdGVyc19hbGxvY2QgLSAxOwotCi0JQVNTRVJUKHBoeXNjYXJkLT5hZGFwdGVyW2FkYXB0ZXItPnBoeXNwb3J0XSA9PSBOVUxMKTsKLQlwaHlzY2FyZC0+YWRhcHRlclthZGFwdGVyLT5waHlzcG9ydF0gPSBhZGFwdGVyOwotCWFkYXB0ZXItPnBoeXNjYXJkID0gcGh5c2NhcmQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgc2xpY19zb2Z0X3Jlc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewogCWlmIChhZGFwdGVyLT5jYXJkLT5zdGF0ZSA9PSBDQVJEX1VQKSB7CkBAIC0yMzIyLDYgKzcyMCw2MiBAQAogCW1kZWxheSgxKTsKIH0KIAorc3RhdGljIHZvaWQgc2xpY19tYWNfYWRkcmVzc19jb25maWcoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIHZhbHVlOworCXUzMiB2YWx1ZTI7CisJX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7CisKKwl2YWx1ZSA9ICoodTMyICopICZhZGFwdGVyLT5jdXJybWFjYWRkclsyXTsKKwl2YWx1ZSA9IG50b2hsKHZhbHVlKTsKKwlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfd3JhZGRyYWwsIHZhbHVlLCBGTFVTSCk7CisJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3dyYWRkcmJsLCB2YWx1ZSwgRkxVU0gpOworCisJdmFsdWUyID0gKHUzMikgKChhZGFwdGVyLT5jdXJybWFjYWRkclswXSA8PCA4IHwKKwkJCSAgICAgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMV0pICYgMHhGRkZGKTsKKworCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY193cmFkZHJhaCwgdmFsdWUyLCBGTFVTSCk7CisJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3dyYWRkcmJoLCB2YWx1ZTIsIEZMVVNIKTsKKworCS8qIFdyaXRlIG91ciBtdWx0aWNhc3QgbWFzayBvdXQgdG8gdGhlIGNhcmQuICBUaGlzIGlzIGRvbmUgKi8KKwkvKiBoZXJlIGluIGFkZGl0aW9uIHRvIHRoZSBzbGljX21jYXN0X2FkZHJfc2V0IHJvdXRpbmUgICAgICovCisJLyogYmVjYXVzZSBBTExfTUNBU1QgbWF5IGhhdmUgYmVlbiBlbmFibGVkIG9yIGRpc2FibGVkICAgICAqLworCXNsaWNfbWNhc3Rfc2V0X21hc2soYWRhcHRlcik7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfbWFjX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgdmFsdWU7CisJX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7CisKKwkvKiBTZXR1cCBHTUFDIGdhcHMgKi8KKwlpZiAoYWRhcHRlci0+bGlua3NwZWVkID09IExJTktfMTAwME1CKSB7CisJCXZhbHVlID0gKChHTUNSX0dBUEJCXzEwMDAgPDwgR01DUl9HQVBCQl9TSElGVCkgfAorCQkJIChHTUNSX0dBUFIxXzEwMDAgPDwgR01DUl9HQVBSMV9TSElGVCkgfAorCQkJIChHTUNSX0dBUFIyXzEwMDAgPDwgR01DUl9HQVBSMl9TSElGVCkpOworCX0gZWxzZSB7CisJCXZhbHVlID0gKChHTUNSX0dBUEJCXzEwMCA8PCBHTUNSX0dBUEJCX1NISUZUKSB8CisJCQkgKEdNQ1JfR0FQUjFfMTAwIDw8IEdNQ1JfR0FQUjFfU0hJRlQpIHwKKwkJCSAoR01DUl9HQVBSMl8xMDAgPDwgR01DUl9HQVBSMl9TSElGVCkpOworCX0KKworCS8qIGVuYWJsZSBHTUlJICovCisJaWYgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBMSU5LXzEwMDBNQikKKwkJdmFsdWUgfD0gR01DUl9HQklUOworCisJLyogZW5hYmxlIGZ1bGxkdXBsZXggKi8KKwlpZiAoKGFkYXB0ZXItPmxpbmtkdXBsZXggPT0gTElOS19GVUxMRCkKKwkgICAgfHwgKGFkYXB0ZXItPm1hY29wdHMgJiBNQUNfTE9PUEJBQ0spKSB7CisJCXZhbHVlIHw9IEdNQ1JfRlVMTEQ7CisJfQorCisJLyogd3JpdGUgbWFjIGNvbmZpZyAqLworCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY193bWNmZywgdmFsdWUsIEZMVVNIKTsKKworCS8qIHNldHVwIG1hYyBhZGRyZXNzZXMgKi8KKwlzbGljX21hY19hZGRyZXNzX2NvbmZpZyhhZGFwdGVyKTsKK30KKwogc3RhdGljIHZvaWQgc2xpY19jb25maWdfc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBib29sIGxpbmtjaGFuZ2UpCiB7CiAJdTMyIHZhbHVlOwpAQCAtMjQwMyw3NiArODU3LDEwIEBACiAJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3dwaHksIHBoeV9jb25maWcsIEZMVVNIKTsKIH0KIAotc3RhdGljIHZvaWQgc2xpY19jb25maWdfZ2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgY29uZmlnLAotCQkJCQkJCXUzMiBjb25maWdfaCkKLXsKLQlpbnQgc3RhdHVzOwotCi0Jc3RhdHVzID0gc2xpY191cHJfcmVxdWVzdChhZGFwdGVyLAotCQkJCSAgU0xJQ19VUFJfUkNPTkZJRywKLQkJCQkgICh1MzIpIGNvbmZpZywgKHUzMikgY29uZmlnX2gsIDAsIDApOwotCUFTU0VSVChzdGF0dXMgPT0gMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNsaWNfbWFjX2FkZHJlc3NfY29uZmlnKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQotewotCXUzMiB2YWx1ZTsKLQl1MzIgdmFsdWUyOwotCV9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqc2xpY19yZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOwotCi0JdmFsdWUgPSAqKHUzMiAqKSAmYWRhcHRlci0+Y3Vycm1hY2FkZHJbMl07Ci0JdmFsdWUgPSBudG9obCh2YWx1ZSk7Ci0Jc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3dyYWRkcmFsLCB2YWx1ZSwgRkxVU0gpOwotCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY193cmFkZHJibCwgdmFsdWUsIEZMVVNIKTsKLQotCXZhbHVlMiA9ICh1MzIpICgoYWRhcHRlci0+Y3Vycm1hY2FkZHJbMF0gPDwgOCB8Ci0JCQkgICAgIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzFdKSAmIDB4RkZGRik7Ci0KLQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfd3JhZGRyYWgsIHZhbHVlMiwgRkxVU0gpOwotCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY193cmFkZHJiaCwgdmFsdWUyLCBGTFVTSCk7Ci0KLQkvKiBXcml0ZSBvdXIgbXVsdGljYXN0IG1hc2sgb3V0IHRvIHRoZSBjYXJkLiAgVGhpcyBpcyBkb25lICovCi0JLyogaGVyZSBpbiBhZGRpdGlvbiB0byB0aGUgc2xpY19tY2FzdF9hZGRyX3NldCByb3V0aW5lICAgICAqLwotCS8qIGJlY2F1c2UgQUxMX01DQVNUIG1heSBoYXZlIGJlZW4gZW5hYmxlZCBvciBkaXNhYmxlZCAgICAgKi8KLQlzbGljX21jYXN0X3NldF9tYXNrKGFkYXB0ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBzbGljX21hY19jb25maWcoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JdTMyIHZhbHVlOwotCV9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqc2xpY19yZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOwotCi0JLyogU2V0dXAgR01BQyBnYXBzICovCi0JaWYgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBMSU5LXzEwMDBNQikgewotCQl2YWx1ZSA9ICgoR01DUl9HQVBCQl8xMDAwIDw8IEdNQ1JfR0FQQkJfU0hJRlQpIHwKLQkJCSAoR01DUl9HQVBSMV8xMDAwIDw8IEdNQ1JfR0FQUjFfU0hJRlQpIHwKLQkJCSAoR01DUl9HQVBSMl8xMDAwIDw8IEdNQ1JfR0FQUjJfU0hJRlQpKTsKLQl9IGVsc2UgewotCQl2YWx1ZSA9ICgoR01DUl9HQVBCQl8xMDAgPDwgR01DUl9HQVBCQl9TSElGVCkgfAotCQkJIChHTUNSX0dBUFIxXzEwMCA8PCBHTUNSX0dBUFIxX1NISUZUKSB8Ci0JCQkgKEdNQ1JfR0FQUjJfMTAwIDw8IEdNQ1JfR0FQUjJfU0hJRlQpKTsKLQl9Ci0KLQkvKiBlbmFibGUgR01JSSAqLwotCWlmIChhZGFwdGVyLT5saW5rc3BlZWQgPT0gTElOS18xMDAwTUIpCi0JCXZhbHVlIHw9IEdNQ1JfR0JJVDsKLQotCS8qIGVuYWJsZSBmdWxsZHVwbGV4ICovCi0JaWYgKChhZGFwdGVyLT5saW5rZHVwbGV4ID09IExJTktfRlVMTEQpCi0JICAgIHx8IChhZGFwdGVyLT5tYWNvcHRzICYgTUFDX0xPT1BCQUNLKSkgewotCQl2YWx1ZSB8PSBHTUNSX0ZVTExEOwotCX0KLQotCS8qIHdyaXRlIG1hYyBjb25maWcgKi8KLQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfd21jZmcsIHZhbHVlLCBGTFVTSCk7Ci0KLQkvKiBzZXR1cCBtYWMgYWRkcmVzc2VzICovCi0Jc2xpY19tYWNfYWRkcmVzc19jb25maWcoYWRhcHRlcik7Ci19Ci0KIHN0YXRpYyBib29sIHNsaWNfbWFjX2ZpbHRlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKIAkJCXN0cnVjdCBldGhlcl9oZWFkZXIgKmV0aGVyX2ZyYW1lKQogeworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJdTMyIG9wdHMgPSBhZGFwdGVyLT5tYWNvcHRzOwogCXUzMiAqZGhvc3Q0ID0gKHUzMiAqKSZldGhlcl9mcmFtZS0+ZXRoZXJfZGhvc3RbMF07CiAJdTE2ICpkaG9zdDIgPSAodTE2ICopJmV0aGVyX2ZyYW1lLT5ldGhlcl9kaG9zdFs0XTsKQEAgLTI0OTIsNyArODgwLDcgQEAKIAlpZiAoZXRoZXJfZnJhbWUtPmV0aGVyX2Rob3N0WzBdICYgMHgwMSkgewogCQlpZiAob3B0cyAmIE1BQ19BTExNQ0FTVCkgewogCQkJYWRhcHRlci0+cmN2X211bHRpY2FzdHMrKzsKLQkJCWFkYXB0ZXItPnN0YXRzLm11bHRpY2FzdCsrOworCQkJbmV0ZGV2LT5zdGF0cy5tdWx0aWNhc3QrKzsKIAkJCXJldHVybiB0cnVlOwogCQl9CiAJCWlmIChvcHRzICYgTUFDX01DQVNUKSB7CkBAIC0yNTAyLDcgKzg5MCw3IEBACiAJCQkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIobWNhZGRyLT5hZGRyZXNzLAogCQkJCQkJCWV0aGVyX2ZyYW1lLT5ldGhlcl9kaG9zdCkpIHsKIAkJCQkJYWRhcHRlci0+cmN2X211bHRpY2FzdHMrKzsKLQkJCQkJYWRhcHRlci0+c3RhdHMubXVsdGljYXN0Kys7CisJCQkJCW5ldGRldi0+c3RhdHMubXVsdGljYXN0Kys7CiAJCQkJCXJldHVybiB0cnVlOwogCQkJCX0KIAkJCQltY2FkZHIgPSBtY2FkZHItPm5leHQ7CkBAIC0yNTk3LDE3ICs5ODUsNiBAQAogCWFkZF90aW1lcigmY2FyZC0+bG9hZHRpbWVyKTsKIH0KIAotc3RhdGljIHZvaWQgc2xpY19hc3NlcnRfZmFpbCh2b2lkKQotewotCXUzMiBjcHVpZDsKLQl1MzIgY3Vycl9waWQ7Ci0JY3B1aWQgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JY3Vycl9waWQgPSBjdXJyZW50LT5waWQ7Ci0KLQlwcmludGsoS0VSTl9FUlIgIiVzIENQVSAjICVkIC0tLS0gUElEICMgJWRcbiIsCi0JICAgICAgIF9fZnVuY19fLCBjcHVpZCwgY3Vycl9waWQpOwotfQotCiBzdGF0aWMgaW50IHNsaWNfdXByX3F1ZXVlX3JlcXVlc3Qoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkgICB1MzIgdXByX3JlcXVlc3QsCiAJCQkgICB1MzIgdXByX2RhdGEsCkBAIC0yNjM3LDcgKzEwMTQsNTUgQEAKIAl9IGVsc2UgewogCQlhZGFwdGVyLT51cHJfbGlzdCA9IHVwcjsKIAl9Ci0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzbGljX3Vwcl9zdGFydChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY191cHIgKnVwcjsKKwlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKKy8qCisgICAgY2hhciAqIHB0cjE7CisgICAgY2hhciAqIHB0cjI7CisgICAgdWludCBjbWRvZmZzZXQ7CisqLworCXVwciA9IGFkYXB0ZXItPnVwcl9saXN0OworCWlmICghdXByKQorCQlyZXR1cm47CisJaWYgKGFkYXB0ZXItPnVwcl9idXN5KQorCQlyZXR1cm47CisJYWRhcHRlci0+dXByX2J1c3kgPSAxOworCisJc3dpdGNoICh1cHItPnVwcl9yZXF1ZXN0KSB7CisJY2FzZSBTTElDX1VQUl9TVEFUUzoKKwkJaWYgKHVwci0+dXByX2RhdGFfaCA9PSAwKSB7CisJCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfc3RhdHMsIHVwci0+dXByX2RhdGEsCisJCQkJCSBGTFVTSCk7CisJCX0gZWxzZSB7CisJCQlzbGljX3JlZzY0X3dyaXRlKGFkYXB0ZXIsICZzbGljX3JlZ3MtPnNsaWNfc3RhdHM2NCwKKwkJCQkJIHVwci0+dXByX2RhdGEsCisJCQkJCSAmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJCSB1cHItPnVwcl9kYXRhX2gsIEZMVVNIKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgU0xJQ19VUFJfUkxTUjoKKwkJc2xpY19yZWc2NF93cml0ZShhZGFwdGVyLCAmc2xpY19yZWdzLT5zbGljX3Jsc3IsIHVwci0+dXByX2RhdGEsCisJCQkJICZzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwgdXByLT51cHJfZGF0YV9oLAorCQkJCSBGTFVTSCk7CisJCWJyZWFrOworCisJY2FzZSBTTElDX1VQUl9SQ09ORklHOgorCQlzbGljX3JlZzY0X3dyaXRlKGFkYXB0ZXIsICZzbGljX3JlZ3MtPnNsaWNfcmNvbmZpZywKKwkJCQkgdXByLT51cHJfZGF0YSwgJnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAorCQkJCSB1cHItPnVwcl9kYXRhX2gsIEZMVVNIKTsKKwkJYnJlYWs7CisJY2FzZSBTTElDX1VQUl9QSU5HOgorCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfcGluZywgMSwgRkxVU0gpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlBU1NFUlQoMCk7CisJfQogfQogCiBzdGF0aWMgaW50IHNsaWNfdXByX3JlcXVlc3Qoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCkBAIC0yNjQ2LDIyICsxMDcxLDk3IEBACiAJCSAgICAgdTMyIHVwcl9kYXRhX2gsCiAJCSAgICAgdTMyIHVwcl9idWZmZXIsIHUzMiB1cHJfYnVmZmVyX2gpCiB7Ci0JaW50IHN0YXR1czsKKwlpbnQgcmM7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+dXByX2xvY2subG9jaywgYWRhcHRlci0+dXByX2xvY2suZmxhZ3MpOwotCXN0YXR1cyA9IHNsaWNfdXByX3F1ZXVlX3JlcXVlc3QoYWRhcHRlciwKKwlyYyA9IHNsaWNfdXByX3F1ZXVlX3JlcXVlc3QoYWRhcHRlciwKIAkJCQkJdXByX3JlcXVlc3QsCiAJCQkJCXVwcl9kYXRhLAogCQkJCQl1cHJfZGF0YV9oLCB1cHJfYnVmZmVyLCB1cHJfYnVmZmVyX2gpOwotCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+dXByX2xvY2subG9jaywKLQkJCQkJYWRhcHRlci0+dXByX2xvY2suZmxhZ3MpOwotCQlyZXR1cm4gc3RhdHVzOwotCX0KKwlpZiAocmMpCisJCWdvdG8gZXJyX3VubG9ja19pcnE7CisKIAlzbGljX3Vwcl9zdGFydChhZGFwdGVyKTsKK2Vycl91bmxvY2tfaXJxOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnVwcl9sb2NrLmxvY2ssCiAJCQkJYWRhcHRlci0+dXByX2xvY2suZmxhZ3MpOwotCXJldHVybiBTVEFUVVNfUEVORElORzsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfbGlua191cHJfY29tcGxldGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBpc3IpCit7CisJdTMyIGxpbmtzdGF0dXMgPSBhZGFwdGVyLT5wc2htZW0tPmxpbmtzdGF0dXM7CisJdWludCBsaW5rdXA7CisJdW5zaWduZWQgY2hhciBsaW5rc3BlZWQ7CisJdW5zaWduZWQgY2hhciBsaW5rZHVwbGV4OworCisJaWYgKChpc3IgJiBJU1JfVVBDRVJSKSB8fCAoaXNyICYgSVNSX1VQQ0JTWSkpIHsKKwkJc3RydWN0IHNsaWNfc2htZW0gKnBzaG1lbTsKKworCQlwc2htZW0gPSAoc3RydWN0IHNsaWNfc2htZW0gKilhZGFwdGVyLT5waHlzX3NobWVtOworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKKwkJc2xpY191cHJfcXVldWVfcmVxdWVzdChhZGFwdGVyLAorCQkJCSAgICAgICBTTElDX1VQUl9STFNSLAorCQkJCSAgICAgICBTTElDX0dFVF9BRERSX0xPVygmcHNobWVtLT5saW5rc3RhdHVzKSwKKwkJCQkgICAgICAgU0xJQ19HRVRfQUREUl9ISUdIKCZwc2htZW0tPmxpbmtzdGF0dXMpLAorCQkJCSAgICAgICAwLCAwKTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX1g4NikKKwkJc2xpY191cHJfcXVldWVfcmVxdWVzdChhZGFwdGVyLAorCQkJCSAgICAgICBTTElDX1VQUl9STFNSLAorCQkJCSAgICAgICAodTMyKSAmcHNobWVtLT5saW5rc3RhdHVzLAorCQkJCSAgICAgICBTTElDX0dFVF9BRERSX0hJR0gocHNobWVtKSwgMCwgMCk7CisjZWxzZQorCQlTdG9wIENvbXBpbGF0aW9uOworI2VuZGlmCisJCXJldHVybjsKKwl9CisJaWYgKGFkYXB0ZXItPnN0YXRlICE9IEFEQVBUX1VQKQorCQlyZXR1cm47CisKKwlBU1NFUlQoKGFkYXB0ZXItPmRldmlkID09IFNMSUNfMUdCX0RFVklDRV9JRCkKKwkgICAgICAgfHwgKGFkYXB0ZXItPmRldmlkID09IFNMSUNfMkdCX0RFVklDRV9JRCkpOworCisJbGlua3VwID0gbGlua3N0YXR1cyAmIEdJR19MSU5LVVAgPyBMSU5LX1VQIDogTElOS19ET1dOOworCWlmIChsaW5rc3RhdHVzICYgR0lHX1NQRUVEXzEwMDApCisJCWxpbmtzcGVlZCA9IExJTktfMTAwME1COworCWVsc2UgaWYgKGxpbmtzdGF0dXMgJiBHSUdfU1BFRURfMTAwKQorCQlsaW5rc3BlZWQgPSBMSU5LXzEwME1COworCWVsc2UKKwkJbGlua3NwZWVkID0gTElOS18xME1COworCisJaWYgKGxpbmtzdGF0dXMgJiBHSUdfRlVMTERVUExFWCkKKwkJbGlua2R1cGxleCA9IExJTktfRlVMTEQ7CisJZWxzZQorCQlsaW5rZHVwbGV4ID0gTElOS19IQUxGRDsKKworCWlmICgoYWRhcHRlci0+bGlua3N0YXRlID09IExJTktfRE9XTikgJiYgKGxpbmt1cCA9PSBMSU5LX0RPV04pKQorCQlyZXR1cm47CisKKwkvKiBsaW5rIHVwIGV2ZW50LCBidXQgbm90aGluZyBoYXMgY2hhbmdlZCAqLworCWlmICgoYWRhcHRlci0+bGlua3N0YXRlID09IExJTktfVVApICYmCisJICAgIChsaW5rdXAgPT0gTElOS19VUCkgJiYKKwkgICAgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBsaW5rc3BlZWQpICYmCisJICAgIChhZGFwdGVyLT5saW5rZHVwbGV4ID09IGxpbmtkdXBsZXgpKQorCQlyZXR1cm47CisKKwkvKiBsaW5rIGhhcyBjaGFuZ2VkIGF0IHRoaXMgcG9pbnQgKi8KKworCS8qIGxpbmsgaGFzIGdvbmUgZnJvbSB1cCB0byBkb3duICovCisJaWYgKGxpbmt1cCA9PSBMSU5LX0RPV04pIHsKKwkJYWRhcHRlci0+bGlua3N0YXRlID0gTElOS19ET1dOOworCQlyZXR1cm47CisJfQorCisJLyogbGluayBoYXMgZ29uZSBmcm9tIGRvd24gdG8gdXAgKi8KKwlhZGFwdGVyLT5saW5rc3BlZWQgPSBsaW5rc3BlZWQ7CisJYWRhcHRlci0+bGlua2R1cGxleCA9IGxpbmtkdXBsZXg7CisKKwlpZiAoYWRhcHRlci0+bGlua3N0YXRlICE9IExJTktfVVApIHsKKwkJLyogc2V0dXAgdGhlIG1hYyAqLworCQlzbGljX2NvbmZpZ19zZXQoYWRhcHRlciwgdHJ1ZSk7CisJCWFkYXB0ZXItPmxpbmtzdGF0ZSA9IExJTktfVVA7CisJCW5ldGlmX3N0YXJ0X3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7CisJfQogfQogCiBzdGF0aWMgdm9pZCBzbGljX3Vwcl9yZXF1ZXN0X2NvbXBsZXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgaXNyKQpAQCAtMjc4NiwxMjggKzEyODYsMTUgQEAKIAkJCQlhZGFwdGVyLT51cHJfbG9jay5mbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHNsaWNfdXByX3N0YXJ0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQorc3RhdGljIHZvaWQgc2xpY19jb25maWdfZ2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgY29uZmlnLAorCQkJCQkJCXUzMiBjb25maWdfaCkKIHsKLQlzdHJ1Y3Qgc2xpY191cHIgKnVwcjsKLQlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKLS8qCi0gICAgY2hhciAqIHB0cjE7Ci0gICAgY2hhciAqIHB0cjI7Ci0gICAgdWludCBjbWRvZmZzZXQ7Ci0qLwotCXVwciA9IGFkYXB0ZXItPnVwcl9saXN0OwotCWlmICghdXByKQotCQlyZXR1cm47Ci0JaWYgKGFkYXB0ZXItPnVwcl9idXN5KQotCQlyZXR1cm47Ci0JYWRhcHRlci0+dXByX2J1c3kgPSAxOworCWludCBzdGF0dXM7CiAKLQlzd2l0Y2ggKHVwci0+dXByX3JlcXVlc3QpIHsKLQljYXNlIFNMSUNfVVBSX1NUQVRTOgotCQlpZiAodXByLT51cHJfZGF0YV9oID09IDApIHsKLQkJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19zdGF0cywgdXByLT51cHJfZGF0YSwKLQkJCQkJIEZMVVNIKTsKLQkJfSBlbHNlIHsKLQkJCXNsaWNfcmVnNjRfd3JpdGUoYWRhcHRlciwgJnNsaWNfcmVncy0+c2xpY19zdGF0czY0LAotCQkJCQkgdXByLT51cHJfZGF0YSwKLQkJCQkJICZzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKLQkJCQkJIHVwci0+dXByX2RhdGFfaCwgRkxVU0gpOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBTTElDX1VQUl9STFNSOgotCQlzbGljX3JlZzY0X3dyaXRlKGFkYXB0ZXIsICZzbGljX3JlZ3MtPnNsaWNfcmxzciwgdXByLT51cHJfZGF0YSwKLQkJCQkgJnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCB1cHItPnVwcl9kYXRhX2gsCi0JCQkJIEZMVVNIKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNMSUNfVVBSX1JDT05GSUc6Ci0JCXNsaWNfcmVnNjRfd3JpdGUoYWRhcHRlciwgJnNsaWNfcmVncy0+c2xpY19yY29uZmlnLAotCQkJCSB1cHItPnVwcl9kYXRhLCAmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCi0JCQkJIHVwci0+dXByX2RhdGFfaCwgRkxVU0gpOwotCQlicmVhazsKLQljYXNlIFNMSUNfVVBSX1BJTkc6Ci0JCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19waW5nLCAxLCBGTFVTSCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUFTU0VSVCgwKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHNsaWNfbGlua191cHJfY29tcGxldGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBpc3IpCi17Ci0JdTMyIGxpbmtzdGF0dXMgPSBhZGFwdGVyLT5wc2htZW0tPmxpbmtzdGF0dXM7Ci0JdWludCBsaW5rdXA7Ci0JdW5zaWduZWQgY2hhciBsaW5rc3BlZWQ7Ci0JdW5zaWduZWQgY2hhciBsaW5rZHVwbGV4OwotCi0JaWYgKChpc3IgJiBJU1JfVVBDRVJSKSB8fCAoaXNyICYgSVNSX1VQQ0JTWSkpIHsKLQkJc3RydWN0IHNsaWNfc2htZW0gKnBzaG1lbTsKLQotCQlwc2htZW0gPSAoc3RydWN0IHNsaWNfc2htZW0gKilhZGFwdGVyLT5waHlzX3NobWVtOwotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKLQkJc2xpY191cHJfcXVldWVfcmVxdWVzdChhZGFwdGVyLAotCQkJCSAgICAgICBTTElDX1VQUl9STFNSLAotCQkJCSAgICAgICBTTElDX0dFVF9BRERSX0xPVygmcHNobWVtLT5saW5rc3RhdHVzKSwKLQkJCQkgICAgICAgU0xJQ19HRVRfQUREUl9ISUdIKCZwc2htZW0tPmxpbmtzdGF0dXMpLAotCQkJCSAgICAgICAwLCAwKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1g4NikKLQkJc2xpY191cHJfcXVldWVfcmVxdWVzdChhZGFwdGVyLAotCQkJCSAgICAgICBTTElDX1VQUl9STFNSLAotCQkJCSAgICAgICAodTMyKSAmcHNobWVtLT5saW5rc3RhdHVzLAotCQkJCSAgICAgICBTTElDX0dFVF9BRERSX0hJR0gocHNobWVtKSwgMCwgMCk7Ci0jZWxzZQotCQlTdG9wIENvbXBpbGF0aW9uOwotI2VuZGlmCi0JCXJldHVybjsKLQl9Ci0JaWYgKGFkYXB0ZXItPnN0YXRlICE9IEFEQVBUX1VQKQotCQlyZXR1cm47Ci0KLQlBU1NFUlQoKGFkYXB0ZXItPmRldmlkID09IFNMSUNfMUdCX0RFVklDRV9JRCkKLQkgICAgICAgfHwgKGFkYXB0ZXItPmRldmlkID09IFNMSUNfMkdCX0RFVklDRV9JRCkpOwotCi0JbGlua3VwID0gbGlua3N0YXR1cyAmIEdJR19MSU5LVVAgPyBMSU5LX1VQIDogTElOS19ET1dOOwotCWlmIChsaW5rc3RhdHVzICYgR0lHX1NQRUVEXzEwMDApCi0JCWxpbmtzcGVlZCA9IExJTktfMTAwME1COwotCWVsc2UgaWYgKGxpbmtzdGF0dXMgJiBHSUdfU1BFRURfMTAwKQotCQlsaW5rc3BlZWQgPSBMSU5LXzEwME1COwotCWVsc2UKLQkJbGlua3NwZWVkID0gTElOS18xME1COwotCi0JaWYgKGxpbmtzdGF0dXMgJiBHSUdfRlVMTERVUExFWCkKLQkJbGlua2R1cGxleCA9IExJTktfRlVMTEQ7Ci0JZWxzZQotCQlsaW5rZHVwbGV4ID0gTElOS19IQUxGRDsKLQotCWlmICgoYWRhcHRlci0+bGlua3N0YXRlID09IExJTktfRE9XTikgJiYgKGxpbmt1cCA9PSBMSU5LX0RPV04pKQotCQlyZXR1cm47Ci0KLQkvKiBsaW5rIHVwIGV2ZW50LCBidXQgbm90aGluZyBoYXMgY2hhbmdlZCAqLwotCWlmICgoYWRhcHRlci0+bGlua3N0YXRlID09IExJTktfVVApICYmCi0JICAgIChsaW5rdXAgPT0gTElOS19VUCkgJiYKLQkgICAgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBsaW5rc3BlZWQpICYmCi0JICAgIChhZGFwdGVyLT5saW5rZHVwbGV4ID09IGxpbmtkdXBsZXgpKQotCQlyZXR1cm47Ci0KLQkvKiBsaW5rIGhhcyBjaGFuZ2VkIGF0IHRoaXMgcG9pbnQgKi8KLQotCS8qIGxpbmsgaGFzIGdvbmUgZnJvbSB1cCB0byBkb3duICovCi0JaWYgKGxpbmt1cCA9PSBMSU5LX0RPV04pIHsKLQkJYWRhcHRlci0+bGlua3N0YXRlID0gTElOS19ET1dOOwotCQlyZXR1cm47Ci0JfQotCi0JLyogbGluayBoYXMgZ29uZSBmcm9tIGRvd24gdG8gdXAgKi8KLQlhZGFwdGVyLT5saW5rc3BlZWQgPSBsaW5rc3BlZWQ7Ci0JYWRhcHRlci0+bGlua2R1cGxleCA9IGxpbmtkdXBsZXg7Ci0KLQlpZiAoYWRhcHRlci0+bGlua3N0YXRlICE9IExJTktfVVApIHsKLQkJLyogc2V0dXAgdGhlIG1hYyAqLwotCQlzbGljX2NvbmZpZ19zZXQoYWRhcHRlciwgdHJ1ZSk7Ci0JCWFkYXB0ZXItPmxpbmtzdGF0ZSA9IExJTktfVVA7Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7Ci0JfQorCXN0YXR1cyA9IHNsaWNfdXByX3JlcXVlc3QoYWRhcHRlciwKKwkJCQkgIFNMSUNfVVBSX1JDT05GSUcsCisJCQkJICAodTMyKSBjb25maWcsICh1MzIpIGNvbmZpZ19oLCAwLCAwKTsKKwlBU1NFUlQoc3RhdHVzID09IDApOwogfQogCiAvKgpAQCAtMzAxMiw2ICsxMzk5LDI0IEBACiAJcmV0dXJuICh1c2hvcnQpIHN1bTsKIH0KIAorc3RhdGljIHZvaWQgc2xpY19yc3BxdWV1ZV9mcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCXN0cnVjdCBzbGljX3JzcHF1ZXVlICpyc3BxID0gJmFkYXB0ZXItPnJzcHF1ZXVlOworCisJZm9yIChpID0gMDsgaSA8IHJzcHEtPm51bV9wYWdlczsgaSsrKSB7CisJCWlmIChyc3BxLT52YWRkcltpXSkgeworCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsIFBBR0VfU0laRSwKKwkJCQkJICAgIHJzcHEtPnZhZGRyW2ldLCByc3BxLT5wYWRkcltpXSk7CisJCX0KKwkJcnNwcS0+dmFkZHJbaV0gPSBOVUxMOworCQlyc3BxLT5wYWRkcltpXSA9IDA7CisJfQorCXJzcHEtPm9mZnNldCA9IDA7CisJcnNwcS0+cGFnZWluZGV4ID0gMDsKKwlyc3BxLT5yc3BidWYgPSBOVUxMOworfQorCiBzdGF0aWMgaW50IHNsaWNfcnNwcXVldWVfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpbnQgaTsKQEAgLTMwMzIsNyArMTQzNyw3IEBACiAJCQlkZXZfZXJyKCZhZGFwdGVyLT5wY2lkZXYtPmRldiwKIAkJCQkicGNpX2FsbG9jX2NvbnNpc3RlbnQgZmFpbGVkXG4iKTsKIAkJCXNsaWNfcnNwcXVldWVfZnJlZShhZGFwdGVyKTsKLQkJCXJldHVybiBTVEFUVVNfRkFJTFVSRTsKKwkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAjaWZuZGVmIENPTkZJR19YODZfNjQKIAkJQVNTRVJUKCgodTMyKSByc3BxLT52YWRkcltpXSAmIDB4RkZGRkYwMDApID09CkBAIC0zMDU2LDI1ICsxNDYxLDcgQEAKIAlyc3BxLT5vZmZzZXQgPSAwOwogCXJzcHEtPnBhZ2VpbmRleCA9IDA7CiAJcnNwcS0+cnNwYnVmID0gKHN0cnVjdCBzbGljX3JzcGJ1ZiAqKXJzcHEtPnZhZGRyWzBdOwotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIHZvaWQgc2xpY19yc3BxdWV1ZV9mcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQotewotCWludCBpOwotCXN0cnVjdCBzbGljX3JzcHF1ZXVlICpyc3BxID0gJmFkYXB0ZXItPnJzcHF1ZXVlOwotCi0JZm9yIChpID0gMDsgaSA8IHJzcHEtPm51bV9wYWdlczsgaSsrKSB7Ci0JCWlmIChyc3BxLT52YWRkcltpXSkgewotCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsIFBBR0VfU0laRSwKLQkJCQkJICAgIHJzcHEtPnZhZGRyW2ldLCByc3BxLT5wYWRkcltpXSk7Ci0JCX0KLQkJcnNwcS0+dmFkZHJbaV0gPSBOVUxMOwotCQlyc3BxLT5wYWRkcltpXSA9IDA7Ci0JfQotCXJzcHEtPm9mZnNldCA9IDA7Ci0JcnNwcS0+cGFnZWluZGV4ID0gMDsKLQlyc3BxLT5yc3BidWYgPSBOVUxMOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHNsaWNfcnNwYnVmICpzbGljX3JzcHF1ZXVlX2dldG5leHQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCkBAIC0zMTU5LDM2ICsxNTQ2LDYgQEAKIAlyZXR1cm4gcGFnZWFkZHI7CiB9CiAKLXN0YXRpYyBpbnQgc2xpY19jbWRxX2luaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaW50IGk7Ci0JdTMyICpwYWdlYWRkcjsKLQotCUFTU0VSVChhZGFwdGVyLT5zdGF0ZSA9PSBBREFQVF9ET1dOKTsKLQltZW1zZXQoJmFkYXB0ZXItPmNtZHFfYWxsLCAwLCBzaXplb2Yoc3RydWN0IHNsaWNfY21kcXVldWUpKTsKLQltZW1zZXQoJmFkYXB0ZXItPmNtZHFfZnJlZSwgMCwgc2l6ZW9mKHN0cnVjdCBzbGljX2NtZHF1ZXVlKSk7Ci0JbWVtc2V0KCZhZGFwdGVyLT5jbWRxX2RvbmUsIDAsIHNpemVvZihzdHJ1Y3Qgc2xpY19jbWRxdWV1ZSkpOwotCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5jbWRxX2FsbC5sb2NrLmxvY2spOwotCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5jbWRxX2ZyZWUubG9jay5sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+Y21kcV9kb25lLmxvY2subG9jayk7Ci0Jc2xpY19jbWRxbWVtX2luaXQoYWRhcHRlcik7Ci0JYWRhcHRlci0+c2xpY19oYW5kbGVfaXggPSAxOwotCWZvciAoaSA9IDA7IGkgPCBTTElDX0NNRFFfSU5JVFBBR0VTOyBpKyspIHsKLQkJcGFnZWFkZHIgPSBzbGljX2NtZHFtZW1fYWRkcGFnZShhZGFwdGVyKTsKLSNpZm5kZWYgQ09ORklHX1g4Nl82NAotCQlBU1NFUlQoKCh1MzIpIHBhZ2VhZGRyICYgMHhGRkZGRjAwMCkgPT0gKHUzMikgcGFnZWFkZHIpOwotI2VuZGlmCi0JCWlmICghcGFnZWFkZHIpIHsKLQkJCXNsaWNfY21kcV9mcmVlKGFkYXB0ZXIpOwotCQkJcmV0dXJuIFNUQVRVU19GQUlMVVJFOwotCQl9Ci0JCXNsaWNfY21kcV9hZGRjbWRwYWdlKGFkYXB0ZXIsIHBhZ2VhZGRyKTsKLQl9Ci0JYWRhcHRlci0+c2xpY19oYW5kbGVfaXggPSAxOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCiBzdGF0aWMgdm9pZCBzbGljX2NtZHFfZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3Qgc2xpY19ob3N0Y21kICpjbWQ7CkBAIC0zMjEyLDUzICsxNTY5LDYgQEAKIAlzbGljX2NtZHFtZW1fZnJlZShhZGFwdGVyKTsKIH0KIAotc3RhdGljIHZvaWQgc2xpY19jbWRxX3Jlc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQotewotCXN0cnVjdCBzbGljX2hvc3RjbWQgKmhjbWQ7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1MzIgb3V0c3RhbmRpbmc7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kcV9mcmVlLmxvY2subG9jaywKLQkJCWFkYXB0ZXItPmNtZHFfZnJlZS5sb2NrLmZsYWdzKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kcV9kb25lLmxvY2subG9jaywKLQkJCWFkYXB0ZXItPmNtZHFfZG9uZS5sb2NrLmZsYWdzKTsKLQlvdXRzdGFuZGluZyA9IGFkYXB0ZXItPmNtZHFfYWxsLmNvdW50IC0gYWRhcHRlci0+Y21kcV9kb25lLmNvdW50OwotCW91dHN0YW5kaW5nIC09IGFkYXB0ZXItPmNtZHFfZnJlZS5jb3VudDsKLQloY21kID0gYWRhcHRlci0+Y21kcV9hbGwuaGVhZDsKLQl3aGlsZSAoaGNtZCkgewotCQlpZiAoaGNtZC0+YnVzeSkgewotCQkJc2tiID0gaGNtZC0+c2tiOwotCQkJQVNTRVJUKHNrYik7Ci0JCQloY21kLT5idXN5ID0gMDsKLQkJCWhjbWQtPnNrYiA9IE5VTEw7Ci0JCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwotCQl9Ci0JCWhjbWQgPSBoY21kLT5uZXh0X2FsbDsKLQl9Ci0JYWRhcHRlci0+Y21kcV9mcmVlLmNvdW50ID0gMDsKLQlhZGFwdGVyLT5jbWRxX2ZyZWUuaGVhZCA9IE5VTEw7Ci0JYWRhcHRlci0+Y21kcV9mcmVlLnRhaWwgPSBOVUxMOwotCWFkYXB0ZXItPmNtZHFfZG9uZS5jb3VudCA9IDA7Ci0JYWRhcHRlci0+Y21kcV9kb25lLmhlYWQgPSBOVUxMOwotCWFkYXB0ZXItPmNtZHFfZG9uZS50YWlsID0gTlVMTDsKLQlhZGFwdGVyLT5jbWRxX2ZyZWUuaGVhZCA9IGFkYXB0ZXItPmNtZHFfYWxsLmhlYWQ7Ci0JaGNtZCA9IGFkYXB0ZXItPmNtZHFfYWxsLmhlYWQ7Ci0Jd2hpbGUgKGhjbWQpIHsKLQkJYWRhcHRlci0+Y21kcV9mcmVlLmNvdW50Kys7Ci0JCWhjbWQtPm5leHQgPSBoY21kLT5uZXh0X2FsbDsKLQkJaGNtZCA9IGhjbWQtPm5leHRfYWxsOwotCX0KLQlpZiAoYWRhcHRlci0+Y21kcV9mcmVlLmNvdW50ICE9IGFkYXB0ZXItPmNtZHFfYWxsLmNvdW50KSB7Ci0JCWRldl9lcnIoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAotCQkJImZyZWVfY291bnQgJWQgIT0gYWxsIGNvdW50ICVkXG4iLAotCQkJYWRhcHRlci0+Y21kcV9mcmVlLmNvdW50LCBhZGFwdGVyLT5jbWRxX2FsbC5jb3VudCk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmNtZHFfZG9uZS5sb2NrLmxvY2ssCi0JCQkJYWRhcHRlci0+Y21kcV9kb25lLmxvY2suZmxhZ3MpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmNtZHFfZnJlZS5sb2NrLmxvY2ssCi0JCQkJYWRhcHRlci0+Y21kcV9mcmVlLmxvY2suZmxhZ3MpOwotfQotCiBzdGF0aWMgdm9pZCBzbGljX2NtZHFfYWRkY21kcGFnZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyICpwYWdlKQogewogCXN0cnVjdCBzbGljX2hvc3RjbWQgKmNtZDsKQEAgLTMzMjQsNiArMTYzNCw5OSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtZHEtPmxvY2subG9jaywgY21kcS0+bG9jay5mbGFncyk7CiB9CiAKK3N0YXRpYyBpbnQgc2xpY19jbWRxX2luaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisJdTMyICpwYWdlYWRkcjsKKworCUFTU0VSVChhZGFwdGVyLT5zdGF0ZSA9PSBBREFQVF9ET1dOKTsKKwltZW1zZXQoJmFkYXB0ZXItPmNtZHFfYWxsLCAwLCBzaXplb2Yoc3RydWN0IHNsaWNfY21kcXVldWUpKTsKKwltZW1zZXQoJmFkYXB0ZXItPmNtZHFfZnJlZSwgMCwgc2l6ZW9mKHN0cnVjdCBzbGljX2NtZHF1ZXVlKSk7CisJbWVtc2V0KCZhZGFwdGVyLT5jbWRxX2RvbmUsIDAsIHNpemVvZihzdHJ1Y3Qgc2xpY19jbWRxdWV1ZSkpOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5jbWRxX2FsbC5sb2NrLmxvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5jbWRxX2ZyZWUubG9jay5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+Y21kcV9kb25lLmxvY2subG9jayk7CisJc2xpY19jbWRxbWVtX2luaXQoYWRhcHRlcik7CisJYWRhcHRlci0+c2xpY19oYW5kbGVfaXggPSAxOworCWZvciAoaSA9IDA7IGkgPCBTTElDX0NNRFFfSU5JVFBBR0VTOyBpKyspIHsKKwkJcGFnZWFkZHIgPSBzbGljX2NtZHFtZW1fYWRkcGFnZShhZGFwdGVyKTsKKyNpZm5kZWYgQ09ORklHX1g4Nl82NAorCQlBU1NFUlQoKCh1MzIpIHBhZ2VhZGRyICYgMHhGRkZGRjAwMCkgPT0gKHUzMikgcGFnZWFkZHIpOworI2VuZGlmCisJCWlmICghcGFnZWFkZHIpIHsKKwkJCXNsaWNfY21kcV9mcmVlKGFkYXB0ZXIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJc2xpY19jbWRxX2FkZGNtZHBhZ2UoYWRhcHRlciwgcGFnZWFkZHIpOworCX0KKwlhZGFwdGVyLT5zbGljX2hhbmRsZV9peCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2xpY19jbWRxX3Jlc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBzbGljX2hvc3RjbWQgKmhjbWQ7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MzIgb3V0c3RhbmRpbmc7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kcV9mcmVlLmxvY2subG9jaywKKwkJCWFkYXB0ZXItPmNtZHFfZnJlZS5sb2NrLmZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kcV9kb25lLmxvY2subG9jaywKKwkJCWFkYXB0ZXItPmNtZHFfZG9uZS5sb2NrLmZsYWdzKTsKKwlvdXRzdGFuZGluZyA9IGFkYXB0ZXItPmNtZHFfYWxsLmNvdW50IC0gYWRhcHRlci0+Y21kcV9kb25lLmNvdW50OworCW91dHN0YW5kaW5nIC09IGFkYXB0ZXItPmNtZHFfZnJlZS5jb3VudDsKKwloY21kID0gYWRhcHRlci0+Y21kcV9hbGwuaGVhZDsKKwl3aGlsZSAoaGNtZCkgeworCQlpZiAoaGNtZC0+YnVzeSkgeworCQkJc2tiID0gaGNtZC0+c2tiOworCQkJQVNTRVJUKHNrYik7CisJCQloY21kLT5idXN5ID0gMDsKKwkJCWhjbWQtPnNrYiA9IE5VTEw7CisJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCQl9CisJCWhjbWQgPSBoY21kLT5uZXh0X2FsbDsKKwl9CisJYWRhcHRlci0+Y21kcV9mcmVlLmNvdW50ID0gMDsKKwlhZGFwdGVyLT5jbWRxX2ZyZWUuaGVhZCA9IE5VTEw7CisJYWRhcHRlci0+Y21kcV9mcmVlLnRhaWwgPSBOVUxMOworCWFkYXB0ZXItPmNtZHFfZG9uZS5jb3VudCA9IDA7CisJYWRhcHRlci0+Y21kcV9kb25lLmhlYWQgPSBOVUxMOworCWFkYXB0ZXItPmNtZHFfZG9uZS50YWlsID0gTlVMTDsKKwlhZGFwdGVyLT5jbWRxX2ZyZWUuaGVhZCA9IGFkYXB0ZXItPmNtZHFfYWxsLmhlYWQ7CisJaGNtZCA9IGFkYXB0ZXItPmNtZHFfYWxsLmhlYWQ7CisJd2hpbGUgKGhjbWQpIHsKKwkJYWRhcHRlci0+Y21kcV9mcmVlLmNvdW50Kys7CisJCWhjbWQtPm5leHQgPSBoY21kLT5uZXh0X2FsbDsKKwkJaGNtZCA9IGhjbWQtPm5leHRfYWxsOworCX0KKwlpZiAoYWRhcHRlci0+Y21kcV9mcmVlLmNvdW50ICE9IGFkYXB0ZXItPmNtZHFfYWxsLmNvdW50KSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkJImZyZWVfY291bnQgJWQgIT0gYWxsIGNvdW50ICVkXG4iLAorCQkJYWRhcHRlci0+Y21kcV9mcmVlLmNvdW50LCBhZGFwdGVyLT5jbWRxX2FsbC5jb3VudCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmNtZHFfZG9uZS5sb2NrLmxvY2ssCisJCQkJYWRhcHRlci0+Y21kcV9kb25lLmxvY2suZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmNtZHFfZnJlZS5sb2NrLmxvY2ssCisJCQkJYWRhcHRlci0+Y21kcV9mcmVlLmxvY2suZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBzbGljX2NtZHFfZ2V0ZG9uZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY19jbWRxdWV1ZSAqZG9uZV9jbWRxID0gJmFkYXB0ZXItPmNtZHFfZG9uZTsKKwlzdHJ1Y3Qgc2xpY19jbWRxdWV1ZSAqZnJlZV9jbWRxID0gJmFkYXB0ZXItPmNtZHFfZnJlZTsKKworCUFTU0VSVChmcmVlX2NtZHEtPmhlYWQgPT0gTlVMTCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRvbmVfY21kcS0+bG9jay5sb2NrLCBkb25lX2NtZHEtPmxvY2suZmxhZ3MpOworCisJZnJlZV9jbWRxLT5oZWFkID0gZG9uZV9jbWRxLT5oZWFkOworCWZyZWVfY21kcS0+Y291bnQgPSBkb25lX2NtZHEtPmNvdW50OworCWRvbmVfY21kcS0+aGVhZCA9IE5VTEw7CisJZG9uZV9jbWRxLT50YWlsID0gTlVMTDsKKwlkb25lX2NtZHEtPmNvdW50ID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkb25lX2NtZHEtPmxvY2subG9jaywgZG9uZV9jbWRxLT5sb2NrLmZsYWdzKTsKK30KKwogc3RhdGljIHN0cnVjdCBzbGljX2hvc3RjbWQgKnNsaWNfY21kcV9nZXRmcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBzbGljX2NtZHF1ZXVlICpjbWRxID0gJmFkYXB0ZXItPmNtZHFfZnJlZTsKQEAgLTMzNTcsMjIgKzE3NjAsNiBAQAogCXJldHVybiBjbWQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNsaWNfY21kcV9nZXRkb25lKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQotewotCXN0cnVjdCBzbGljX2NtZHF1ZXVlICpkb25lX2NtZHEgPSAmYWRhcHRlci0+Y21kcV9kb25lOwotCXN0cnVjdCBzbGljX2NtZHF1ZXVlICpmcmVlX2NtZHEgPSAmYWRhcHRlci0+Y21kcV9mcmVlOwotCi0JQVNTRVJUKGZyZWVfY21kcS0+aGVhZCA9PSBOVUxMKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZG9uZV9jbWRxLT5sb2NrLmxvY2ssIGRvbmVfY21kcS0+bG9jay5mbGFncyk7Ci0KLQlmcmVlX2NtZHEtPmhlYWQgPSBkb25lX2NtZHEtPmhlYWQ7Ci0JZnJlZV9jbWRxLT5jb3VudCA9IGRvbmVfY21kcS0+Y291bnQ7Ci0JZG9uZV9jbWRxLT5oZWFkID0gTlVMTDsKLQlkb25lX2NtZHEtPnRhaWwgPSBOVUxMOwotCWRvbmVfY21kcS0+Y291bnQgPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRvbmVfY21kcS0+bG9jay5sb2NrLCBkb25lX2NtZHEtPmxvY2suZmxhZ3MpOwotfQotCiBzdGF0aWMgdm9pZCBzbGljX2NtZHFfcHV0ZG9uZV9pcnEoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkJc3RydWN0IHNsaWNfaG9zdGNtZCAqY21kKQogewpAQCAtMzM4OCw3OSArMTc3NSw2IEBACiAJc3Bpbl91bmxvY2soJmNtZHEtPmxvY2subG9jayk7CiB9CiAKLXN0YXRpYyBpbnQgc2xpY19yY3ZxdWV1ZV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQotewotCWludCBpLCBjb3VudDsKLQlzdHJ1Y3Qgc2xpY19yY3ZxdWV1ZSAqcmN2cSA9ICZhZGFwdGVyLT5yY3ZxdWV1ZTsKLQotCUFTU0VSVChhZGFwdGVyLT5zdGF0ZSA9PSBBREFQVF9ET1dOKTsKLQlyY3ZxLT50YWlsID0gTlVMTDsKLQlyY3ZxLT5oZWFkID0gTlVMTDsKLQlyY3ZxLT5zaXplID0gU0xJQ19SQ1ZRX0VOVFJJRVM7Ci0JcmN2cS0+ZXJyb3JzID0gMDsKLQlyY3ZxLT5jb3VudCA9IDA7Ci0JaSA9IChTTElDX1JDVlFfRU5UUklFUyAvIFNMSUNfUkNWUV9GSUxMRU5UUklFUyk7Ci0JY291bnQgPSAwOwotCXdoaWxlIChpKSB7Ci0JCWNvdW50ICs9IHNsaWNfcmN2cXVldWVfZmlsbChhZGFwdGVyKTsKLQkJaS0tOwotCX0KLQlpZiAocmN2cS0+Y291bnQgPCBTTElDX1JDVlFfTUlORU5UUklFUykgewotCQlzbGljX3JjdnF1ZXVlX2ZyZWUoYWRhcHRlcik7Ci0JCXJldHVybiBTVEFUVVNfRkFJTFVSRTsKLQl9Ci0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgdm9pZCBzbGljX3JjdnF1ZXVlX2ZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jc3RydWN0IHNsaWNfcmN2cXVldWUgKnJjdnEgPSAmYWRhcHRlci0+cmN2cXVldWU7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCXdoaWxlIChyY3ZxLT5oZWFkKSB7Ci0JCXNrYiA9IHJjdnEtPmhlYWQ7Ci0JCXJjdnEtPmhlYWQgPSByY3ZxLT5oZWFkLT5uZXh0OwotCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JfQotCXJjdnEtPnRhaWwgPSBOVUxMOwotCXJjdnEtPmhlYWQgPSBOVUxMOwotCXJjdnEtPmNvdW50ID0gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBza19idWZmICpzbGljX3JjdnF1ZXVlX2dldG5leHQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jc3RydWN0IHNsaWNfcmN2cXVldWUgKnJjdnEgPSAmYWRhcHRlci0+cmN2cXVldWU7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3Qgc2xpY19yY3ZidWYgKnJjdmJ1ZjsKLQlpbnQgY291bnQ7Ci0KLQlpZiAocmN2cS0+Y291bnQpIHsKLQkJc2tiID0gcmN2cS0+aGVhZDsKLQkJcmN2YnVmID0gKHN0cnVjdCBzbGljX3JjdmJ1ZiAqKXNrYi0+aGVhZDsKLQkJQVNTRVJUKHJjdmJ1Zik7Ci0KLQkJaWYgKHJjdmJ1Zi0+c3RhdHVzICYgSVJIRERSX1NWQUxJRCkgewotCQkJcmN2cS0+aGVhZCA9IHJjdnEtPmhlYWQtPm5leHQ7Ci0JCQlza2ItPm5leHQgPSBOVUxMOwotCQkJcmN2cS0+Y291bnQtLTsKLQkJfSBlbHNlIHsKLQkJCXNrYiA9IE5VTEw7Ci0JCX0KLQl9IGVsc2UgewotCQlkZXZfZXJyKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKLQkJCSJSY3ZRIEVtcHR5ISEgcmN2cVslcF0gY291bnRbJXhdXG4iLCByY3ZxLCByY3ZxLT5jb3VudCk7Ci0JCXNrYiA9IE5VTEw7Ci0JfQotCXdoaWxlIChyY3ZxLT5jb3VudCA8IFNMSUNfUkNWUV9GSUxMVEhSRVNIKSB7Ci0JCWNvdW50ID0gc2xpY19yY3ZxdWV1ZV9maWxsKGFkYXB0ZXIpOwotCQlpZiAoIWNvdW50KQotCQkJYnJlYWs7Ci0JfQotCWlmIChza2IpCi0JCXJjdnEtPmVycm9ycyA9IDA7Ci0JcmV0dXJuIHNrYjsKLX0KLQogc3RhdGljIGludCBzbGljX3JjdnF1ZXVlX2ZpbGwoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJdm9pZCAqcGFkZHI7CkBAIC0zNTQ4LDYgKzE4NjIsNzkgQEAKIAlyZXR1cm4gaTsKIH0KIAorc3RhdGljIHZvaWQgc2xpY19yY3ZxdWV1ZV9mcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBzbGljX3JjdnF1ZXVlICpyY3ZxID0gJmFkYXB0ZXItPnJjdnF1ZXVlOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwl3aGlsZSAocmN2cS0+aGVhZCkgeworCQlza2IgPSByY3ZxLT5oZWFkOworCQlyY3ZxLT5oZWFkID0gcmN2cS0+aGVhZC0+bmV4dDsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCX0KKwlyY3ZxLT50YWlsID0gTlVMTDsKKwlyY3ZxLT5oZWFkID0gTlVMTDsKKwlyY3ZxLT5jb3VudCA9IDA7Cit9CisKK3N0YXRpYyBpbnQgc2xpY19yY3ZxdWV1ZV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCWludCBpLCBjb3VudDsKKwlzdHJ1Y3Qgc2xpY19yY3ZxdWV1ZSAqcmN2cSA9ICZhZGFwdGVyLT5yY3ZxdWV1ZTsKKworCUFTU0VSVChhZGFwdGVyLT5zdGF0ZSA9PSBBREFQVF9ET1dOKTsKKwlyY3ZxLT50YWlsID0gTlVMTDsKKwlyY3ZxLT5oZWFkID0gTlVMTDsKKwlyY3ZxLT5zaXplID0gU0xJQ19SQ1ZRX0VOVFJJRVM7CisJcmN2cS0+ZXJyb3JzID0gMDsKKwlyY3ZxLT5jb3VudCA9IDA7CisJaSA9IChTTElDX1JDVlFfRU5UUklFUyAvIFNMSUNfUkNWUV9GSUxMRU5UUklFUyk7CisJY291bnQgPSAwOworCXdoaWxlIChpKSB7CisJCWNvdW50ICs9IHNsaWNfcmN2cXVldWVfZmlsbChhZGFwdGVyKTsKKwkJaS0tOworCX0KKwlpZiAocmN2cS0+Y291bnQgPCBTTElDX1JDVlFfTUlORU5UUklFUykgeworCQlzbGljX3JjdnF1ZXVlX2ZyZWUoYWRhcHRlcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICpzbGljX3JjdnF1ZXVlX2dldG5leHQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNsaWNfcmN2cXVldWUgKnJjdnEgPSAmYWRhcHRlci0+cmN2cXVldWU7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3Qgc2xpY19yY3ZidWYgKnJjdmJ1ZjsKKwlpbnQgY291bnQ7CisKKwlpZiAocmN2cS0+Y291bnQpIHsKKwkJc2tiID0gcmN2cS0+aGVhZDsKKwkJcmN2YnVmID0gKHN0cnVjdCBzbGljX3JjdmJ1ZiAqKXNrYi0+aGVhZDsKKwkJQVNTRVJUKHJjdmJ1Zik7CisKKwkJaWYgKHJjdmJ1Zi0+c3RhdHVzICYgSVJIRERSX1NWQUxJRCkgeworCQkJcmN2cS0+aGVhZCA9IHJjdnEtPmhlYWQtPm5leHQ7CisJCQlza2ItPm5leHQgPSBOVUxMOworCQkJcmN2cS0+Y291bnQtLTsKKwkJfSBlbHNlIHsKKwkJCXNrYiA9IE5VTEw7CisJCX0KKwl9IGVsc2UgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKKwkJCSJSY3ZRIEVtcHR5ISEgcmN2cVslcF0gY291bnRbJXhdXG4iLCByY3ZxLCByY3ZxLT5jb3VudCk7CisJCXNrYiA9IE5VTEw7CisJfQorCXdoaWxlIChyY3ZxLT5jb3VudCA8IFNMSUNfUkNWUV9GSUxMVEhSRVNIKSB7CisJCWNvdW50ID0gc2xpY19yY3ZxdWV1ZV9maWxsKGFkYXB0ZXIpOworCQlpZiAoIWNvdW50KQorCQkJYnJlYWs7CisJfQorCWlmIChza2IpCisJCXJjdnEtPmVycm9ycyA9IDA7CisJcmV0dXJuIHNrYjsKK30KKwogc3RhdGljIHUzMiBzbGljX3JjdnF1ZXVlX3JlaW5zZXJ0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBzbGljX3JjdnF1ZXVlICpyY3ZxID0gJmFkYXB0ZXItPnJjdnF1ZXVlOwpAQCAtMzgxMywxMSArMjIwMCwxMCBAQAogc3RhdGljIGludCBzbGljX2RlYnVnX2FkYXB0ZXJfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IHNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCi0JaWYgKChhZGFwdGVyLT5uZXRkZXYpICYmIChhZGFwdGVyLT5uZXRkZXYtPm5hbWUpKSB7Ci0JCXNlcV9wcmludGYoc2VxLCAiaW5mbzogaW50ZXJmYWNlICAgICAgICAgIDogJXNcbiIsCisJc2VxX3ByaW50ZihzZXEsICJpbmZvOiBpbnRlcmZhY2UgICAgICAgICAgOiAlc1xuIiwKIAkJCSAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOwotCX0KIAlzZXFfcHJpbnRmKHNlcSwgImluZm86IHN0YXR1cyAgICAgICAgICAgICA6ICVzXG4iLAogCQlTTElDX0xJTktTVEFURShhZGFwdGVyLT5saW5rc3RhdGUpKTsKIAlzZXFfcHJpbnRmKHNlcSwgImluZm86IHBvcnQgICAgICAgICAgICAgICA6ICVkXG4iLApAQCAtMzgzNSw5ICsyMjIxLDkgQEAKIAlzZXFfcHJpbnRmKHNlcSwgImluZm86IFJjdlEgY3VycmVudCAgICAgICA6ICU0LjRYXG4iLAogCQkgICAgYWRhcHRlci0+cmN2cXVldWUuY291bnQpOwogCXNlcV9wcmludGYoc2VxLCAicnggc3RhdHM6IHBhY2tldHMgICAgICAgICAgICAgICAgICA6ICU4LjhsWFxuIiwKLQkJICAgIGFkYXB0ZXItPnN0YXRzLnJ4X3BhY2tldHMpOworCQkgICAgbmV0ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKTsKIAlzZXFfcHJpbnRmKHNlcSwgInJ4IHN0YXRzOiBieXRlcyAgICAgICAgICAgICAgICAgICAgOiAlOC44bFhcbiIsCi0JCSAgICBhZGFwdGVyLT5zdGF0cy5yeF9ieXRlcyk7CisJCSAgICBuZXRkZXYtPnN0YXRzLnJ4X2J5dGVzKTsKIAlzZXFfcHJpbnRmKHNlcSwgInJ4IHN0YXRzOiBicm9hZGNhc3RzICAgICAgICAgICAgICAgOiAlOC44WFxuIiwKIAkJICAgIGFkYXB0ZXItPnJjdl9icm9hZGNhc3RzKTsKIAlzZXFfcHJpbnRmKHNlcSwgInJ4IHN0YXRzOiBtdWx0aWNhc3RzICAgICAgICAgICAgICAgOiAlOC44WFxuIiwKQEAgLTM4NTEsMTMgKzIyMzcsMTMgQEAKIAlzZXFfcHJpbnRmKHNlcSwgInJ4IHN0YXRzOiBkcm9wcyAgICAgICAgICAgICAgICAgICAgOiAlOC44WFxuIiwKIAkJCSh1MzIpIGFkYXB0ZXItPnJjdl9kcm9wcyk7CiAJc2VxX3ByaW50ZihzZXEsICJ0eCBzdGF0czogcGFja2V0cyAgICAgICAgICAgICAgICAgIDogJTguOGxYXG4iLAotCQkJYWRhcHRlci0+c3RhdHMudHhfcGFja2V0cyk7CisJCQluZXRkZXYtPnN0YXRzLnR4X3BhY2tldHMpOwogCXNlcV9wcmludGYoc2VxLCAidHggc3RhdHM6IGJ5dGVzICAgICAgICAgICAgICAgICAgICA6ICU4LjhsWFxuIiwKLQkJCWFkYXB0ZXItPnN0YXRzLnR4X2J5dGVzKTsKKwkJCW5ldGRldi0+c3RhdHMudHhfYnl0ZXMpOwogCXNlcV9wcmludGYoc2VxLCAidHggc3RhdHM6IGVycm9ycyAgICAgICAgICAgICAgICAgICA6ICU4LjhYXG4iLAogCQkJKHUzMikgYWRhcHRlci0+c2xpY19zdGF0cy5pZmFjZS54bXRfZXJyb3JzKTsKIAlzZXFfcHJpbnRmKHNlcSwgInJ4IHN0YXRzOiBtdWx0aWNhc3RzICAgICAgICAgICAgICAgOiAlOC44bFhcbiIsCi0JCQlhZGFwdGVyLT5zdGF0cy5tdWx0aWNhc3QpOworCQkJbmV0ZGV2LT5zdGF0cy5tdWx0aWNhc3QpOwogCXNlcV9wcmludGYoc2VxLCAidHggc3RhdHM6IGNvbGxpc2lvbiBlcnJvcnMgICAgICAgICA6ICU4LjhYXG4iLAogCQkJKHUzMikgYWRhcHRlci0+c2xpY19zdGF0cy5pZmFjZS54bWl0X2NvbGxpc2lvbnMpOwogCXNlcV9wcmludGYoc2VxLCAicGVyZjogTWF4IHJjdiBmcmFtZXMvaXNyICAgICAgICAgICA6ICU4LjhYXG4iLApAQCAtNDAzOSw5ICsyNDI1LDE1NTUgQEAKIAl9CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioqKioqKioqKioqKioqKiAgIE1PRFVMRSBJTklUSUFUSU9OIC8gVEVSTUlOQVRJT04gRlVOQ1RJT05TICAgKioqKioqKioqKioqKioqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBzbGljX2xpbmtfZXZlbnRfaGFuZGxlciAtCisgKgorICogSW5pdGlhdGUgYSBsaW5rIGNvbmZpZ3VyYXRpb24gc2VxdWVuY2UuICBUaGUgbGluayBjb25maWd1cmF0aW9uIGJlZ2lucworICogYnkgaXNzdWluZyBhIFJFQURfTElOS19TVEFUVVMgY29tbWFuZCB0byB0aGUgVXRpbGl0eSBQcm9jZXNzb3Igb24gdGhlCisgKiBTTElDLiAgU2luY2UgdGhlIGNvbW1hbmQgZmluaXNoZXMgYXN5bmNocm9ub3VzbHksIHRoZSBzbGljX3Vwcl9jb21sZXRlCisgKiByb3V0aW5lIHdpbGwgZm9sbG93IGl0IHVwIHdpdGhhIFVQIGNvbmZpZ3VyYXRpb24gd3JpdGUgY29tbWFuZCwgd2hpY2gKKyAqIHdpbGwgYWxzbyBjb21wbGV0ZSBhc3luY2hyb25vdXNseS4KKyAqCisgKi8KK3N0YXRpYyB2b2lkIHNsaWNfbGlua19ldmVudF9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCWludCBzdGF0dXM7CisJc3RydWN0IHNsaWNfc2htZW0gKnBzaG1lbTsKKworCWlmIChhZGFwdGVyLT5zdGF0ZSAhPSBBREFQVF9VUCkgeworCQkvKiBBZGFwdGVyIGlzIG5vdCBvcGVyYXRpb25hbC4gIElnbm9yZS4gICovCisJCXJldHVybjsKKwl9CisKKwlwc2htZW0gPSAoc3RydWN0IHNsaWNfc2htZW0gKilhZGFwdGVyLT5waHlzX3NobWVtOworCisjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQorCXN0YXR1cyA9IHNsaWNfdXByX3JlcXVlc3QoYWRhcHRlciwKKwkJCQkgIFNMSUNfVVBSX1JMU1IsCisJCQkJICBTTElDX0dFVF9BRERSX0xPVygmcHNobWVtLT5saW5rc3RhdHVzKSwKKwkJCQkgIFNMSUNfR0VUX0FERFJfSElHSCgmcHNobWVtLT5saW5rc3RhdHVzKSwKKwkJCQkgIDAsIDApOworI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2KQorCXN0YXR1cyA9IHNsaWNfdXByX3JlcXVlc3QoYWRhcHRlciwgU0xJQ19VUFJfUkxTUiwKKwkJKHUzMikgJnBzaG1lbS0+bGlua3N0YXR1cywJLyogbm8gNEdCIHdyYXAgZ3VhcmFudGVlZCAqLworCQkJCSAgMCwgMCwgMCk7CisjZWxzZQorCVN0b3AgY29tcGlsYXRpb247CisjZW5kaWYKKwlBU1NFUlQoc3RhdHVzID09IDApOworfQorCitzdGF0aWMgdm9pZCBzbGljX2luaXRfY2xlYW51cChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYWRhcHRlci0+aW50cnJlZ2lzdGVyZWQpIHsKKwkJYWRhcHRlci0+aW50cnJlZ2lzdGVyZWQgPSAwOworCQlmcmVlX2lycShhZGFwdGVyLT5uZXRkZXYtPmlycSwgYWRhcHRlci0+bmV0ZGV2KTsKKworCX0KKwlpZiAoYWRhcHRlci0+cHNobWVtKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCSAgICBzaXplb2Yoc3RydWN0IHNsaWNfc2htZW0pLAorCQkJCSAgICBhZGFwdGVyLT5wc2htZW0sIGFkYXB0ZXItPnBoeXNfc2htZW0pOworCQlhZGFwdGVyLT5wc2htZW0gPSBOVUxMOworCQlhZGFwdGVyLT5waHlzX3NobWVtID0gKGRtYV9hZGRyX3QpIE5VTEw7CisJfQorCisJaWYgKGFkYXB0ZXItPnBpbmd0aW1lcnNldCkgeworCQlhZGFwdGVyLT5waW5ndGltZXJzZXQgPSAwOworCQlkZWxfdGltZXIoJmFkYXB0ZXItPnBpbmd0aW1lcik7CisJfQorCisJc2xpY19yc3BxdWV1ZV9mcmVlKGFkYXB0ZXIpOworCXNsaWNfY21kcV9mcmVlKGFkYXB0ZXIpOworCXNsaWNfcmN2cXVldWVfZnJlZShhZGFwdGVyKTsKK30KKworLyoKKyAqICBBbGxvY2F0ZSBhIG1jYXN0X2FkZHJlc3Mgc3RydWN0dXJlIHRvIGhvbGQgdGhlIG11bHRpY2FzdCBhZGRyZXNzLgorICogIExpbmsgaXQgaW4uCisgKi8KK3N0YXRpYyBpbnQgc2xpY19tY2FzdF9hZGRfbGlzdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgY2hhciAqYWRkcmVzcykKK3sKKwlzdHJ1Y3QgbWNhc3RfYWRkcmVzcyAqbWNhZGRyLCAqbWxpc3Q7CisKKwkvKiBDaGVjayB0byBzZWUgaWYgaXQgYWxyZWFkeSBleGlzdHMgKi8KKwltbGlzdCA9IGFkYXB0ZXItPm1jYXN0YWRkcnM7CisJd2hpbGUgKG1saXN0KSB7CisJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKG1saXN0LT5hZGRyZXNzLCBhZGRyZXNzKSkKKwkJCXJldHVybiAwOworCQltbGlzdCA9IG1saXN0LT5uZXh0OworCX0KKworCS8qIERvZXNuJ3QgYWxyZWFkeSBleGlzdC4gIEFsbG9jYXRlIGEgc3RydWN0dXJlIHRvIGhvbGQgaXQgKi8KKwltY2FkZHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWNhc3RfYWRkcmVzcyksIEdGUF9BVE9NSUMpOworCWlmIChtY2FkZHIgPT0gTlVMTCkKKwkJcmV0dXJuIDE7CisKKwltZW1jcHkobWNhZGRyLT5hZGRyZXNzLCBhZGRyZXNzLCA2KTsKKworCW1jYWRkci0+bmV4dCA9IGFkYXB0ZXItPm1jYXN0YWRkcnM7CisJYWRhcHRlci0+bWNhc3RhZGRycyA9IG1jYWRkcjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzbGljX21jYXN0X3NldF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBzdGF0dXMgPSAwOworCWNoYXIgKmFkZHJlc3NlczsKKwlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOworCisJQVNTRVJUKGFkYXB0ZXIpOworCisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikgeworCQlhZGRyZXNzZXMgPSAoY2hhciAqKSAmaGEtPmFkZHI7CisJCXN0YXR1cyA9IHNsaWNfbWNhc3RfYWRkX2xpc3QoYWRhcHRlciwgYWRkcmVzc2VzKTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJYnJlYWs7CisJCXNsaWNfbWNhc3Rfc2V0X2JpdChhZGFwdGVyLCBhZGRyZXNzZXMpOworCX0KKworCWlmIChhZGFwdGVyLT5kZXZmbGFnc19wcmV2ICE9IGRldi0+ZmxhZ3MpIHsKKwkJYWRhcHRlci0+bWFjb3B0cyA9IE1BQ19ESVJFQ1RFRDsKKwkJaWYgKGRldi0+ZmxhZ3MpIHsKKwkJCWlmIChkZXYtPmZsYWdzICYgSUZGX0JST0FEQ0FTVCkKKwkJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19CQ0FTVDsKKwkJCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCisJCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfUFJPTUlTQzsKKwkJCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQorCQkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX0FMTE1DQVNUOworCQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfTVVMVElDQVNUKQorCQkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX01DQVNUOworCQl9CisJCWFkYXB0ZXItPmRldmZsYWdzX3ByZXYgPSBkZXYtPmZsYWdzOworCQlzbGljX2NvbmZpZ19zZXQoYWRhcHRlciwgdHJ1ZSk7CisJfSBlbHNlIHsKKwkJaWYgKHN0YXR1cyA9PSAwKQorCQkJc2xpY19tY2FzdF9zZXRfbWFzayhhZGFwdGVyKTsKKwl9CisJcmV0dXJuOworfQorCisjZGVmaW5lICBYTUlUX0ZBSUxfTElOS19TVEFURSAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgIFhNSVRfRkFJTF9aRVJPX0xFTkdUSCAgICAgICAgICAgICAgMgorI2RlZmluZSAgWE1JVF9GQUlMX0hPU1RDTURfRkFJTCAgICAgICAgICAgICAzCisKK3N0YXRpYyB2b2lkIHNsaWNfeG1pdF9idWlsZF9yZXF1ZXN0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkJICAgICBzdHJ1Y3Qgc2xpY19ob3N0Y21kICpoY21kLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBzbGljX2hvc3Q2NF9jbWQgKmloY21kOworCXVsb25nIHBoeXNfYWRkcjsKKworCWloY21kID0gJmhjbWQtPmNtZDY0OworCisJaWhjbWQtPmZsYWdzID0gKGFkYXB0ZXItPnBvcnQgPDwgSUhGTEdfSUZTSEZUKTsKKwlpaGNtZC0+Y29tbWFuZCA9IElIQ01EX1hNVF9SRVE7CisJaWhjbWQtPnUuc2xpY19idWZmZXJzLnRvdGxlbiA9IHNrYi0+bGVuOworCXBoeXNfYWRkciA9IHBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBjaWRldiwgc2tiLT5kYXRhLCBza2ItPmxlbiwKKwkJCVBDSV9ETUFfVE9ERVZJQ0UpOworCWloY21kLT51LnNsaWNfYnVmZmVycy5idWZzWzBdLnBhZGRybCA9IFNMSUNfR0VUX0FERFJfTE9XKHBoeXNfYWRkcik7CisJaWhjbWQtPnUuc2xpY19idWZmZXJzLmJ1ZnNbMF0ucGFkZHJoID0gU0xJQ19HRVRfQUREUl9ISUdIKHBoeXNfYWRkcik7CisJaWhjbWQtPnUuc2xpY19idWZmZXJzLmJ1ZnNbMF0ubGVuZ3RoID0gc2tiLT5sZW47CisjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQorCWhjbWQtPmNtZHNpemUgPSAodTMyKSAoKCgodTY0KSZpaGNtZC0+dS5zbGljX2J1ZmZlcnMuYnVmc1sxXSAtCisJCQkJICAgICAodTY0KSBoY21kKSArIDMxKSA+PiA1KTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX1g4NikKKwloY21kLT5jbWRzaXplID0gKCgoKHUzMikgJmloY21kLT51LnNsaWNfYnVmZmVycy5idWZzWzFdIC0KKwkJCSAgICh1MzIpIGhjbWQpICsgMzEpID4+IDUpOworI2Vsc2UKKwlTdG9wIENvbXBpbGF0aW9uOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHNsaWNfeG1pdF9mYWlsKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgIHZvaWQgKmNtZCwgdTMyIHNrYnR5cGUsIHUzMiBzdGF0dXMpCit7CisJaWYgKGFkYXB0ZXItPnhtaXRxX2Z1bGwpCisJCW5ldGlmX3N0b3BfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKKwlpZiAoKGNtZCA9PSBOVUxMKSAmJiAoc3RhdHVzIDw9IFhNSVRfRkFJTF9IT1NUQ01EX0ZBSUwpKSB7CisJCXN3aXRjaCAoc3RhdHVzKSB7CisJCWNhc2UgWE1JVF9GQUlMX0xJTktfU1RBVEU6CisJCQlkZXZfZXJyKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKKwkJCQkicmVqZWN0IHhtaXQgc2tiWyVwOiAleF0gbGlua3N0YXRlWyVzXSAiCisJCQkJImFkYXB0ZXJbJXM6JWRdIGNhcmRbJXM6JWRdXG4iLAorCQkJCXNrYiwgc2tiLT5wa3RfdHlwZSwKKwkJCQlTTElDX0xJTktTVEFURShhZGFwdGVyLT5saW5rc3RhdGUpLAorCQkJCVNMSUNfQURBUFRFUl9TVEFURShhZGFwdGVyLT5zdGF0ZSksCisJCQkJYWRhcHRlci0+c3RhdGUsCisJCQkJU0xJQ19DQVJEX1NUQVRFKGFkYXB0ZXItPmNhcmQtPnN0YXRlKSwKKwkJCQlhZGFwdGVyLT5jYXJkLT5zdGF0ZSk7CisJCQlicmVhazsKKwkJY2FzZSBYTUlUX0ZBSUxfWkVST19MRU5HVEg6CisJCQlkZXZfZXJyKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKKwkJCQkieG1pdF9zdGFydCBza2ItPmxlbiA9PSAwIHNrYlslcF0gdHlwZVsleF1cbiIsCisJCQkJc2tiLCBza2ItPnBrdF90eXBlKTsKKwkJCWJyZWFrOworCQljYXNlIFhNSVRfRkFJTF9IT1NUQ01EX0ZBSUw6CisJCQlkZXZfZXJyKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKKwkJCQkieG1pdF9zdGFydCBza2JbJXBdIHR5cGVbJXhdIE5vIGhvc3QgY29tbWFuZHMgIgorCQkJCSJhdmFpbGFibGVcbiIsIHNrYiwgc2tiLT5wa3RfdHlwZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUFTU0VSVCgwKTsKKwkJfQorCX0KKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisJYWRhcHRlci0+bmV0ZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfcmN2X2hhbmRsZV9lcnJvcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJc3RydWN0IHNsaWNfcmN2YnVmICpyY3ZidWYpCit7CisJc3RydWN0IHNsaWNfaGRkcl93ZHMgKmhkciA9IChzdHJ1Y3Qgc2xpY19oZGRyX3dkcyAqKXJjdmJ1Zi0+ZGF0YTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCisJaWYgKGFkYXB0ZXItPmRldmlkICE9IFNMSUNfMUdCX0RFVklDRV9JRCkgeworCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXMxNCAmIFZSSFNUQVRfODAyT0UpCisJCQlhZGFwdGVyLT5pZl9ldmVudHMub2Zsb3c4MDIrKzsKKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzMTQgJiBWUkhTVEFUX1RQT0ZMTykKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5UcHJ0b2Zsb3crKzsKKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCXzgwMlVFKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLnVmbG93ODAyKys7CisJCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9SQ1ZFKSB7CisJCQlhZGFwdGVyLT5pZl9ldmVudHMucmN2ZWFybHkrKzsKKwkJCW5ldGRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKKwkJfQorCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfQlVGRikgeworCQkJYWRhcHRlci0+aWZfZXZlbnRzLkJ1Zm92Kys7CisJCQluZXRkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJCX0KKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX0NBUlJFKSB7CisJCQlhZGFwdGVyLT5pZl9ldmVudHMuQ2FycmUrKzsKKwkJCW5ldGRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJfQorCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfTE9OR0UpCisJCQlhZGFwdGVyLT5pZl9ldmVudHMuTG9uZ2UrKzsKKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX1BSRUEpCisJCQlhZGFwdGVyLT5pZl9ldmVudHMuSW52cCsrOworCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfQ1JDKSB7CisJCQlhZGFwdGVyLT5pZl9ldmVudHMuQ3JjKys7CisJCQluZXRkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJfQorCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfRFJCTCkKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5EcmJsKys7CisJCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9DT0RFKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLkNvZGUrKzsKKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX1RQQ1NVTSkKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5UcENzdW0rKzsKKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX1RQSExFTikKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5UcEhsZW4rKzsKKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX0lQQ1NVTSkKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5JcENzdW0rKzsKKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX0lQTEVSUikKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5JcExlbisrOworCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfSVBIRVJSKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLklwSGxlbisrOworCX0gZWxzZSB7CisJCWlmIChoZHItPmZyYW1lX3N0YXR1c0dCICYgVkdCU1RBVF9YUEVSUikgeworCQkJdTMyIHhlcnIgPSBoZHItPmZyYW1lX3N0YXR1c0dCID4+IFZHQlNUQVRfWEVSUlNIRlQ7CisKKwkJCWlmICh4ZXJyID09IFZHQlNUQVRfWENTRVJSKQorCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5UcENzdW0rKzsKKwkJCWlmICh4ZXJyID09IFZHQlNUQVRfWFVGTE9XKQorCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5UcHJ0b2Zsb3crKzsKKwkJCWlmICh4ZXJyID09IFZHQlNUQVRfWEhMRU4pCisJCQkJYWRhcHRlci0+aWZfZXZlbnRzLlRwSGxlbisrOworCQl9CisJCWlmIChoZHItPmZyYW1lX3N0YXR1c0dCICYgVkdCU1RBVF9ORVRFUlIpIHsKKwkJCXUzMiBuZXJyID0KKwkJCSAgICAoaGRyLT4KKwkJCSAgICAgZnJhbWVfc3RhdHVzR0IgPj4gVkdCU1RBVF9ORVJSU0hGVCkgJgorCQkJICAgIFZHQlNUQVRfTkVSUk1TSzsKKwkJCWlmIChuZXJyID09IFZHQlNUQVRfTkNTRVJSKQorCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5JcENzdW0rKzsKKwkJCWlmIChuZXJyID09IFZHQlNUQVRfTlVGTE9XKQorCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5JcExlbisrOworCQkJaWYgKG5lcnIgPT0gVkdCU1RBVF9OSExFTikKKwkJCQlhZGFwdGVyLT5pZl9ldmVudHMuSXBIbGVuKys7CisJCX0KKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzR0IgJiBWR0JTVEFUX0xOS0VSUikgeworCQkJdTMyIGxlcnIgPSBoZHItPmZyYW1lX3N0YXR1c0dCICYgVkdCU1RBVF9MRVJSTVNLOworCisJCQlpZiAobGVyciA9PSBWR0JTVEFUX0xERUFSTFkpCisJCQkJYWRhcHRlci0+aWZfZXZlbnRzLnJjdmVhcmx5Kys7CisJCQlpZiAobGVyciA9PSBWR0JTVEFUX0xCT0ZMTykKKwkJCQlhZGFwdGVyLT5pZl9ldmVudHMuQnVmb3YrKzsKKwkJCWlmIChsZXJyID09IFZHQlNUQVRfTENPREVSUikKKwkJCQlhZGFwdGVyLT5pZl9ldmVudHMuQ29kZSsrOworCQkJaWYgKGxlcnIgPT0gVkdCU1RBVF9MREJMTkJMKQorCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5EcmJsKys7CisJCQlpZiAobGVyciA9PSBWR0JTVEFUX0xDUkNFUlIpCisJCQkJYWRhcHRlci0+aWZfZXZlbnRzLkNyYysrOworCQkJaWYgKGxlcnIgPT0gVkdCU1RBVF9MT0ZMTykKKwkJCQlhZGFwdGVyLT5pZl9ldmVudHMub2Zsb3c4MDIrKzsKKwkJCWlmIChsZXJyID09IFZHQlNUQVRfTFVGTE8pCisJCQkJYWRhcHRlci0+aWZfZXZlbnRzLnVmbG93ODAyKys7CisJCX0KKwl9CisJcmV0dXJuOworfQorCisjZGVmaW5lIFRDUF9PRkZMT0FEX0ZSQU1FX1BVU0hGTEFHICAweDEwMDAwMDAwCisjZGVmaW5lIE1fRkFTVF9QQVRIICAgICAgICAgICAgICAgICAweDAwNDAKKworc3RhdGljIHZvaWQgc2xpY19yY3ZfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHNsaWNfcmN2YnVmICpyY3ZidWY7CisJdTMyIGZyYW1lcyA9IDA7CisKKwl3aGlsZSAoKHNrYiA9IHNsaWNfcmN2cXVldWVfZ2V0bmV4dChhZGFwdGVyKSkpIHsKKwkJdTMyIHJ4X2J5dGVzOworCisJCUFTU0VSVChza2ItPmhlYWQpOworCQlyY3ZidWYgPSAoc3RydWN0IHNsaWNfcmN2YnVmICopc2tiLT5oZWFkOworCQlhZGFwdGVyLT5jYXJkLT5ldmVudHMrKzsKKwkJaWYgKHJjdmJ1Zi0+c3RhdHVzICYgSVJIRERSX0VSUikgeworCQkJYWRhcHRlci0+cnhfZXJyb3JzKys7CisJCQlzbGljX3Jjdl9oYW5kbGVfZXJyb3IoYWRhcHRlciwgcmN2YnVmKTsKKwkJCXNsaWNfcmN2cXVldWVfcmVpbnNlcnQoYWRhcHRlciwgc2tiKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFzbGljX21hY19maWx0ZXIoYWRhcHRlciwgKHN0cnVjdCBldGhlcl9oZWFkZXIgKikKKwkJCQkJcmN2YnVmLT5kYXRhKSkgeworCQkJc2xpY19yY3ZxdWV1ZV9yZWluc2VydChhZGFwdGVyLCBza2IpOworCQkJY29udGludWU7CisJCX0KKwkJc2tiX3B1bGwoc2tiLCBTTElDX1JDVkJVRl9IRUFEU0laRSk7CisJCXJ4X2J5dGVzID0gKHJjdmJ1Zi0+bGVuZ3RoICYgSVJIRERSX0ZMRU5fTVNLKTsKKwkJc2tiX3B1dChza2IsIHJ4X2J5dGVzKTsKKwkJbmV0ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCW5ldGRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcnhfYnl0ZXM7CisjaWYgU0xJQ19PRkZMT0FEX0lQX0NIRUNLU1VNCisJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisjZW5kaWYKKworCQlza2ItPmRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgc2tiLT5kZXYpOworCQluZXRpZl9yeChza2IpOworCisJCSsrZnJhbWVzOworI2lmIFNMSUNfSU5URVJSVVBUX1BST0NFU1NfTElNSVQKKwkJaWYgKGZyYW1lcyA+PSBTTElDX1JDVlFfTUFYX1BST0NFU1NfSVNSKSB7CisJCQlhZGFwdGVyLT5yY3ZfaW50ZXJydXB0X3lpZWxkcysrOworCQkJYnJlYWs7CisJCX0KKyNlbmRpZgorCX0KKwlhZGFwdGVyLT5tYXhfaXNyX3JjdnMgPSBtYXgoYWRhcHRlci0+bWF4X2lzcl9yY3ZzLCBmcmFtZXMpOworfQorCitzdGF0aWMgdm9pZCBzbGljX3htaXRfY29tcGxldGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNsaWNfaG9zdGNtZCAqaGNtZDsKKwlzdHJ1Y3Qgc2xpY19yc3BidWYgKnJzcGJ1ZjsKKwl1MzIgZnJhbWVzID0gMDsKKwlzdHJ1Y3Qgc2xpY19oYW5kbGVfd29yZCBzbGljX2hhbmRsZV93b3JkOworCisJZG8geworCQlyc3BidWYgPSBzbGljX3JzcHF1ZXVlX2dldG5leHQoYWRhcHRlcik7CisJCWlmICghcnNwYnVmKQorCQkJYnJlYWs7CisJCWFkYXB0ZXItPnhtaXRfY29tcGxldGVzKys7CisJCWFkYXB0ZXItPmNhcmQtPmV2ZW50cysrOworCQkvKgorCQkgR2V0IHRoZSBjb21wbGV0ZSBob3N0IGNvbW1hbmQgYnVmZmVyCisJCSovCisJCXNsaWNfaGFuZGxlX3dvcmQuaGFuZGxlX3Rva2VuID0gcnNwYnVmLT5ob3N0aGFuZGxlOworCQlBU1NFUlQoc2xpY19oYW5kbGVfd29yZC5oYW5kbGVfaW5kZXgpOworCQlBU1NFUlQoc2xpY19oYW5kbGVfd29yZC5oYW5kbGVfaW5kZXggPD0gU0xJQ19DTURRX01BWENNRFMpOworCQloY21kID0KKwkJICAgIChzdHJ1Y3Qgc2xpY19ob3N0Y21kICopCisJCQlhZGFwdGVyLT5zbGljX2hhbmRsZXNbc2xpY19oYW5kbGVfd29yZC5oYW5kbGVfaW5kZXhdLgorCQkJCQkJCQkJYWRkcmVzczsKKy8qICAgICAgaGNtZCA9IChzdHJ1Y3Qgc2xpY19ob3N0Y21kICopIHJzcGJ1Zi0+aG9zdGhhbmRsZTsgKi8KKwkJQVNTRVJUKGhjbWQpOworCQlBU1NFUlQoaGNtZC0+cHNsaWNfaGFuZGxlID09CisJCSAgICAgICAmYWRhcHRlci0+c2xpY19oYW5kbGVzW3NsaWNfaGFuZGxlX3dvcmQuaGFuZGxlX2luZGV4XSk7CisJCWlmIChoY21kLT50eXBlID09IFNMSUNfQ01EX0RVTUIpIHsKKwkJCWlmIChoY21kLT5za2IpCisJCQkJZGV2X2tmcmVlX3NrYl9pcnEoaGNtZC0+c2tiKTsKKwkJCXNsaWNfY21kcV9wdXRkb25lX2lycShhZGFwdGVyLCBoY21kKTsKKwkJfQorCQlyc3BidWYtPnN0YXR1cyA9IDA7CisJCXJzcGJ1Zi0+aG9zdGhhbmRsZSA9IDA7CisJCWZyYW1lcysrOworCX0gd2hpbGUgKDEpOworCWFkYXB0ZXItPm1heF9pc3JfeG1pdHMgPSBtYXgoYWRhcHRlci0+bWF4X2lzcl94bWl0cywgZnJhbWVzKTsKK30KKworc3RhdGljIGlycXJldHVybl90IHNsaWNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2lkOworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgaXNyOworCisJaWYgKChhZGFwdGVyLT5wc2htZW0pICYmIChhZGFwdGVyLT5wc2htZW0tPmlzcikpIHsKKwkJc2xpY19yZWczMl93cml0ZSgmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2ljciwKKwkJCQkgSUNSX0lOVF9NQVNLLCBGTFVTSCk7CisJCWlzciA9IGFkYXB0ZXItPmlzcmNvcHkgPSBhZGFwdGVyLT5wc2htZW0tPmlzcjsKKwkJYWRhcHRlci0+cHNobWVtLT5pc3IgPSAwOworCQlhZGFwdGVyLT5udW1faXNycysrOworCQlzd2l0Y2ggKGFkYXB0ZXItPmNhcmQtPnN0YXRlKSB7CisJCWNhc2UgQ0FSRF9VUDoKKwkJCWlmIChpc3IgJiB+SVNSX0lPKSB7CisJCQkJaWYgKGlzciAmIElTUl9FUlIpIHsKKwkJCQkJYWRhcHRlci0+ZXJyb3JfaW50ZXJydXB0cysrOworCQkJCQlpZiAoaXNyICYgSVNSX1JNSVNTKSB7CisJCQkJCQlpbnQgY291bnQ7CisJCQkJCQlpbnQgcHJlX2NvdW50OworCQkJCQkJaW50IGVycm9yczsKKworCQkJCQkJc3RydWN0IHNsaWNfcmN2cXVldWUgKnJjdnEgPQorCQkJCQkJICAgICZhZGFwdGVyLT5yY3ZxdWV1ZTsKKworCQkJCQkJYWRhcHRlci0+CisJCQkJCQkgICAgZXJyb3Jfcm1pc3NfaW50ZXJydXB0cysrOworCQkJCQkJaWYgKCFyY3ZxLT5lcnJvcnMpCisJCQkJCQkJcmN2X2NvdW50ID0gcmN2cS0+Y291bnQ7CisJCQkJCQlwcmVfY291bnQgPSByY3ZxLT5jb3VudDsKKwkJCQkJCWVycm9ycyA9IHJjdnEtPmVycm9yczsKKworCQkJCQkJd2hpbGUgKHJjdnEtPmNvdW50IDwKKwkJCQkJCSAgICAgICBTTElDX1JDVlFfRklMTFRIUkVTSCkgeworCQkJCQkJCWNvdW50ID0KKwkJCQkJCQkgICAgc2xpY19yY3ZxdWV1ZV9maWxsCisJCQkJCQkJICAgIChhZGFwdGVyKTsKKwkJCQkJCQlpZiAoIWNvdW50KQorCQkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfSBlbHNlIGlmIChpc3IgJiBJU1JfWERST1ApIHsKKwkJCQkJCWRldl9lcnIoJmRldi0+ZGV2LAorCQkJCQkJCSJpc3IgJiBJU1JfRVJSIFsleF0gIgorCQkJCQkJCSJJU1JfWERST1AgXG4iLCBpc3IpOworCQkJCQl9IGVsc2UgeworCQkJCQkJZGV2X2VycigmZGV2LT5kZXYsCisJCQkJCQkJImlzciAmIElTUl9FUlIgWyV4XVxuIiwKKwkJCQkJCQlpc3IpOworCQkJCQl9CisJCQkJfQorCisJCQkJaWYgKGlzciAmIElTUl9MRVZFTlQpIHsKKwkJCQkJYWRhcHRlci0+bGlua2V2ZW50X2ludGVycnVwdHMrKzsKKwkJCQkJc2xpY19saW5rX2V2ZW50X2hhbmRsZXIoYWRhcHRlcik7CisJCQkJfQorCisJCQkJaWYgKChpc3IgJiBJU1JfVVBDKSB8fAorCQkJCSAgICAoaXNyICYgSVNSX1VQQ0VSUikgfHwgKGlzciAmIElTUl9VUENCU1kpKSB7CisJCQkJCWFkYXB0ZXItPnVwcl9pbnRlcnJ1cHRzKys7CisJCQkJCXNsaWNfdXByX3JlcXVlc3RfY29tcGxldGUoYWRhcHRlciwgaXNyKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChpc3IgJiBJU1JfUkNWKSB7CisJCQkJYWRhcHRlci0+cmN2X2ludGVycnVwdHMrKzsKKwkJCQlzbGljX3Jjdl9oYW5kbGVyKGFkYXB0ZXIpOworCQkJfQorCisJCQlpZiAoaXNyICYgSVNSX0NNRCkgeworCQkJCWFkYXB0ZXItPnhtaXRfaW50ZXJydXB0cysrOworCQkJCXNsaWNfeG1pdF9jb21wbGV0ZShhZGFwdGVyKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgQ0FSRF9ET1dOOgorCQkJaWYgKChpc3IgJiBJU1JfVVBDKSB8fAorCQkJICAgIChpc3IgJiBJU1JfVVBDRVJSKSB8fCAoaXNyICYgSVNSX1VQQ0JTWSkpIHsKKwkJCQlhZGFwdGVyLT51cHJfaW50ZXJydXB0cysrOworCQkJCXNsaWNfdXByX3JlcXVlc3RfY29tcGxldGUoYWRhcHRlciwgaXNyKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJCWFkYXB0ZXItPmlzcmNvcHkgPSAwOworCQlhZGFwdGVyLT5hbGxfcmVnX3dyaXRlcyArPSAyOworCQlhZGFwdGVyLT5pc3JfcmVnX3dyaXRlcysrOworCQlzbGljX3JlZzMyX3dyaXRlKCZhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfaXNyLCAwLCBGTFVTSCk7CisJfSBlbHNlIHsKKwkJYWRhcHRlci0+ZmFsc2VfaW50ZXJydXB0cysrOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKyNkZWZpbmUgTk9STUFMX0VUSEZSQU1FICAgICAwCisKK3N0YXRpYyBuZXRkZXZfdHhfdCBzbGljX3htaXRfc3RhcnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQ7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBzbGljX2hvc3RjbWQgKmhjbWQgPSBOVUxMOworCXUzMiBzdGF0dXMgPSAwOworCXUzMiBza2J0eXBlID0gTk9STUFMX0VUSEZSQU1FOworCXZvaWQgKm9mZmxvYWRjbWQgPSBOVUxMOworCisJY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisJQVNTRVJUKGNhcmQpOworCWlmICgoYWRhcHRlci0+bGlua3N0YXRlICE9IExJTktfVVApIHx8CisJICAgIChhZGFwdGVyLT5zdGF0ZSAhPSBBREFQVF9VUCkgfHwgKGNhcmQtPnN0YXRlICE9IENBUkRfVVApKSB7CisJCXN0YXR1cyA9IFhNSVRfRkFJTF9MSU5LX1NUQVRFOworCQlnb3RvIHhtaXRfZmFpbDsKKworCX0gZWxzZSBpZiAoc2tiLT5sZW4gPT0gMCkgeworCQlzdGF0dXMgPSBYTUlUX0ZBSUxfWkVST19MRU5HVEg7CisJCWdvdG8geG1pdF9mYWlsOworCX0KKworCWlmIChza2J0eXBlID09IE5PUk1BTF9FVEhGUkFNRSkgeworCQloY21kID0gc2xpY19jbWRxX2dldGZyZWUoYWRhcHRlcik7CisJCWlmICghaGNtZCkgeworCQkJYWRhcHRlci0+eG1pdHFfZnVsbCA9IDE7CisJCQlzdGF0dXMgPSBYTUlUX0ZBSUxfSE9TVENNRF9GQUlMOworCQkJZ290byB4bWl0X2ZhaWw7CisJCX0KKwkJQVNTRVJUKGhjbWQtPnBzbGljX2hhbmRsZSk7CisJCUFTU0VSVChoY21kLT5jbWQ2NC5ob3N0aGFuZGxlID09CisJCSAgICAgICBoY21kLT5wc2xpY19oYW5kbGUtPnRva2VuLmhhbmRsZV90b2tlbik7CisJCWhjbWQtPnNrYiA9IHNrYjsKKwkJaGNtZC0+YnVzeSA9IDE7CisJCWhjbWQtPnR5cGUgPSBTTElDX0NNRF9EVU1COworCQlpZiAoc2tidHlwZSA9PSBOT1JNQUxfRVRIRlJBTUUpCisJCQlzbGljX3htaXRfYnVpbGRfcmVxdWVzdChhZGFwdGVyLCBoY21kLCBza2IpOworCX0KKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCisjaWZkZWYgREVCVUdfRFVNUAorCWlmIChhZGFwdGVyLT5raWxsX2NhcmQpIHsKKwkJc3RydWN0IHNsaWNfaG9zdDY0X2NtZCBpaGNtZDsKKworCQlpaGNtZCA9ICZoY21kLT5jbWQ2NDsKKworCQlpaGNtZC0+ZmxhZ3MgfD0gMHg0MDsKKwkJYWRhcHRlci0+a2lsbF9jYXJkID0gMDsJLyogb25seSBkbyB0aGlzIG9uY2UgKi8KKwl9CisjZW5kaWYKKwlpZiAoaGNtZC0+cGFkZHJoID09IDApIHsKKwkJc2xpY19yZWczMl93cml0ZSgmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2NiYXIsCisJCQkJIChoY21kLT5wYWRkcmwgfCBoY21kLT5jbWRzaXplKSwgRE9OVF9GTFVTSCk7CisJfSBlbHNlIHsKKwkJc2xpY19yZWc2NF93cml0ZShhZGFwdGVyLCAmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2NiYXI2NCwKKwkJCQkgKGhjbWQtPnBhZGRybCB8IGhjbWQtPmNtZHNpemUpLAorCQkJCSAmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJIGhjbWQtPnBhZGRyaCwgRE9OVF9GTFVTSCk7CisJfQoreG1pdF9kb25lOgorCXJldHVybiBORVRERVZfVFhfT0s7Cit4bWl0X2ZhaWw6CisJc2xpY194bWl0X2ZhaWwoYWRhcHRlciwgc2tiLCBvZmZsb2FkY21kLCBza2J0eXBlLCBzdGF0dXMpOworCWdvdG8geG1pdF9kb25lOworfQorCisKK3N0YXRpYyB2b2lkIHNsaWNfYWRhcHRlcl9mcmVlcmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXNsaWNfaW5pdF9jbGVhbnVwKGFkYXB0ZXIpOworCWFkYXB0ZXItPmVycm9yX2ludGVycnVwdHMgPSAwOworCWFkYXB0ZXItPnJjdl9pbnRlcnJ1cHRzID0gMDsKKwlhZGFwdGVyLT54bWl0X2ludGVycnVwdHMgPSAwOworCWFkYXB0ZXItPmxpbmtldmVudF9pbnRlcnJ1cHRzID0gMDsKKwlhZGFwdGVyLT51cHJfaW50ZXJydXB0cyA9IDA7CisJYWRhcHRlci0+bnVtX2lzcnMgPSAwOworCWFkYXB0ZXItPnhtaXRfY29tcGxldGVzID0gMDsKKwlhZGFwdGVyLT5yY3ZfYnJvYWRjYXN0cyA9IDA7CisJYWRhcHRlci0+cmN2X211bHRpY2FzdHMgPSAwOworCWFkYXB0ZXItPnJjdl91bmljYXN0cyA9IDA7Cit9CisKK3N0YXRpYyBpbnQgc2xpY19hZGFwdGVyX2FsbG9jcmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCWlmICghYWRhcHRlci0+aW50cnJlZ2lzdGVyZWQpIHsKKwkJaW50IHJldHZhbDsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5sb2NrLAorCQkJCQlzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5mbGFncyk7CisKKwkJcmV0dmFsID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+bmV0ZGV2LT5pcnEsCisJCQkJICAgICAmc2xpY19pbnRlcnJ1cHQsCisJCQkJICAgICBJUlFGX1NIQVJFRCwKKwkJCQkgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+bmV0ZGV2KTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2xpY19nbG9iYWwuZHJpdmVyX2xvY2subG9jaywKKwkJCQkJc2xpY19nbG9iYWwuZHJpdmVyX2xvY2suZmxhZ3MpOworCisJCWlmIChyZXR2YWwpIHsKKwkJCWRldl9lcnIoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkJCSJyZXF1ZXN0X2lycSAoJXMpIEZBSUxFRCBbJXhdXG4iLAorCQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgcmV0dmFsKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJYWRhcHRlci0+aW50cnJlZ2lzdGVyZWQgPSAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICBzbGljX2lmX2luaXQKKyAqCisgKiAgUGVyZm9ybSBpbml0aWFsaXphdGlvbiBvZiBvdXIgc2xpYyBpbnRlcmZhY2UuCisgKgorICovCitzdGF0aWMgaW50IHNsaWNfaWZfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSBhZGFwdGVyLT5jYXJkOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7CisJc3RydWN0IHNsaWNfc2htZW0gKnBzaG1lbTsKKwlpbnQgcmM7CisKKwlBU1NFUlQoY2FyZCk7CisKKwkvKiBhZGFwdGVyIHNob3VsZCBiZSBkb3duIGF0IHRoaXMgcG9pbnQgKi8KKwlpZiAoYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfRE9XTikgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBhZGFwdGVyLT5zdGF0ZSAhPSBBREFQVF9ET1dOXG4iLAorCQkJX19mdW5jX18pOworCQlyYyA9IC1FSU87CisJCWdvdG8gZXJyOworCX0KKwlBU1NFUlQoYWRhcHRlci0+bGlua3N0YXRlID09IExJTktfRE9XTik7CisKKwlhZGFwdGVyLT5kZXZmbGFnc19wcmV2ID0gZGV2LT5mbGFnczsKKwlhZGFwdGVyLT5tYWNvcHRzID0gTUFDX0RJUkVDVEVEOworCWlmIChkZXYtPmZsYWdzKSB7CisJCWlmIChkZXYtPmZsYWdzICYgSUZGX0JST0FEQ0FTVCkKKwkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX0JDQVNUOworCQlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQorCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfUFJPTUlTQzsKKwkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCisJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19BTExNQ0FTVDsKKwkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfTVVMVElDQVNUKQorCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfTUNBU1Q7CisJfQorCXJjID0gc2xpY19hZGFwdGVyX2FsbG9jcmVzb3VyY2VzKGFkYXB0ZXIpOworCWlmIChyYykgeworCQlkZXZfZXJyKCZkZXYtPmRldiwKKwkJCSIlczogc2xpY19hZGFwdGVyX2FsbG9jcmVzb3VyY2VzIEZBSUxFRCAleFxuIiwKKwkJCV9fZnVuY19fLCByYyk7CisJCXNsaWNfYWRhcHRlcl9mcmVlcmVzb3VyY2VzKGFkYXB0ZXIpOworCQlnb3RvIGVycjsKKwl9CisKKwlpZiAoIWFkYXB0ZXItPnF1ZXVlc19pbml0aWFsaXplZCkgeworCQlpZiAoKHJjID0gc2xpY19yc3BxdWV1ZV9pbml0KGFkYXB0ZXIpKSkKKwkJCWdvdG8gZXJyOworCQlpZiAoKHJjID0gc2xpY19jbWRxX2luaXQoYWRhcHRlcikpKQorCQkJZ290byBlcnI7CisJCWlmICgocmMgPSBzbGljX3JjdnF1ZXVlX2luaXQoYWRhcHRlcikpKQorCQkJZ290byBlcnI7CisJCWFkYXB0ZXItPnF1ZXVlc19pbml0aWFsaXplZCA9IDE7CisJfQorCisJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2ljciwgSUNSX0lOVF9PRkYsIEZMVVNIKTsKKwltZGVsYXkoMSk7CisKKwlpZiAoIWFkYXB0ZXItPmlzcF9pbml0aWFsaXplZCkgeworCQlwc2htZW0gPSAoc3RydWN0IHNsaWNfc2htZW0gKilhZGFwdGVyLT5waHlzX3NobWVtOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5iaXQ2NHJlZ2xvY2subG9jaywKKwkJCQkJYWRhcHRlci0+Yml0NjRyZWdsb2NrLmZsYWdzKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKKwkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJIFNMSUNfR0VUX0FERFJfSElHSCgmcHNobWVtLT5pc3IpLCBET05UX0ZMVVNIKTsKKwkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2lzcCwKKwkJCQkgU0xJQ19HRVRfQUREUl9MT1coJnBzaG1lbS0+aXNyKSwgRkxVU0gpOworI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2KQorCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwgMCwgRE9OVF9GTFVTSCk7CisJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19pc3AsICh1MzIpJnBzaG1lbS0+aXNyLCBGTFVTSCk7CisjZWxzZQorCQlTdG9wIENvbXBpbGF0aW9ucworI2VuZGlmCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmJpdDY0cmVnbG9jay5sb2NrLAorCQkJCQlhZGFwdGVyLT5iaXQ2NHJlZ2xvY2suZmxhZ3MpOworCQlhZGFwdGVyLT5pc3BfaW5pdGlhbGl6ZWQgPSAxOworCX0KKworCWFkYXB0ZXItPnN0YXRlID0gQURBUFRfVVA7CisJaWYgKCFjYXJkLT5sb2FkdGltZXJzZXQpIHsKKwkJaW5pdF90aW1lcigmY2FyZC0+bG9hZHRpbWVyKTsKKwkJY2FyZC0+bG9hZHRpbWVyLmV4cGlyZXMgPQorCQkgICAgamlmZmllcyArIChTTElDX0xPQURUSU1FUl9QRVJJT0QgKiBIWik7CisJCWNhcmQtPmxvYWR0aW1lci5kYXRhID0gKHVsb25nKSBjYXJkOworCQljYXJkLT5sb2FkdGltZXIuZnVuY3Rpb24gPSAmc2xpY190aW1lcl9sb2FkX2NoZWNrOworCQlhZGRfdGltZXIoJmNhcmQtPmxvYWR0aW1lcik7CisKKwkJY2FyZC0+bG9hZHRpbWVyc2V0ID0gMTsKKwl9CisKKwlpZiAoIWFkYXB0ZXItPnBpbmd0aW1lcnNldCkgeworCQlpbml0X3RpbWVyKCZhZGFwdGVyLT5waW5ndGltZXIpOworCQlhZGFwdGVyLT5waW5ndGltZXIuZXhwaXJlcyA9CisJCSAgICBqaWZmaWVzICsgKFBJTkdfVElNRVJfSU5URVJWQUwgKiBIWik7CisJCWFkYXB0ZXItPnBpbmd0aW1lci5kYXRhID0gKHVsb25nKSBkZXY7CisJCWFkYXB0ZXItPnBpbmd0aW1lci5mdW5jdGlvbiA9ICZzbGljX3RpbWVyX3Bpbmc7CisJCWFkZF90aW1lcigmYWRhcHRlci0+cGluZ3RpbWVyKTsKKwkJYWRhcHRlci0+cGluZ3RpbWVyc2V0ID0gMTsKKwkJYWRhcHRlci0+Y2FyZC0+cGluZ3N0YXR1cyA9IElTUl9QSU5HTUFTSzsKKwl9CisKKwkvKgorCSAqICAgIGNsZWFyIGFueSBwZW5kaW5nIGV2ZW50cywgdGhlbiBlbmFibGUgaW50ZXJydXB0cworCSAqLworCWFkYXB0ZXItPmlzcmNvcHkgPSAwOworCWFkYXB0ZXItPnBzaG1lbS0+aXNyID0gMDsKKwlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfaXNyLCAwLCBGTFVTSCk7CisJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2ljciwgSUNSX0lOVF9PTiwgRkxVU0gpOworCisJc2xpY19saW5rX2NvbmZpZyhhZGFwdGVyLCBMSU5LX0FVVE9TUEVFRCwgTElOS19BVVRPRCk7CisJc2xpY19saW5rX2V2ZW50X2hhbmRsZXIoYWRhcHRlcik7CisKK2VycjoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgc2xpY19lbnRyeV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisJdTMyIGxvY2tlZCA9IDA7CisJaW50IHN0YXR1czsKKworCUFTU0VSVChhZGFwdGVyKTsKKwlBU1NFUlQoY2FyZCk7CisKKwluZXRpZl9zdG9wX3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2xpY19nbG9iYWwuZHJpdmVyX2xvY2subG9jaywKKwkJCQlzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5mbGFncyk7CisJbG9ja2VkID0gMTsKKwlpZiAoIWFkYXB0ZXItPmFjdGl2YXRlZCkgeworCQljYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQrKzsKKwkJc2xpY19nbG9iYWwubnVtX3NsaWNfcG9ydHNfYWN0aXZlKys7CisJCWFkYXB0ZXItPmFjdGl2YXRlZCA9IDE7CisJfQorCXN0YXR1cyA9IHNsaWNfaWZfaW5pdChhZGFwdGVyKTsKKworCWlmIChzdGF0dXMgIT0gMCkgeworCQlpZiAoYWRhcHRlci0+YWN0aXZhdGVkKSB7CisJCQljYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQtLTsKKwkJCXNsaWNfZ2xvYmFsLm51bV9zbGljX3BvcnRzX2FjdGl2ZS0tOworCQkJYWRhcHRlci0+YWN0aXZhdGVkID0gMDsKKwkJfQorCQlpZiAobG9ja2VkKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5sb2NrLAorCQkJCQkJc2xpY19nbG9iYWwuZHJpdmVyX2xvY2suZmxhZ3MpOworCQkJbG9ja2VkID0gMDsKKwkJfQorCQlyZXR1cm4gc3RhdHVzOworCX0KKwlpZiAoIWNhcmQtPm1hc3RlcikKKwkJY2FyZC0+bWFzdGVyID0gYWRhcHRlcjsKKworCWlmIChsb2NrZWQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xpY19nbG9iYWwuZHJpdmVyX2xvY2subG9jaywKKwkJCQkJc2xpY19nbG9iYWwuZHJpdmVyX2xvY2suZmxhZ3MpOworCQlsb2NrZWQgPSAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzbGljX2NhcmRfY2xlYW51cChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQpCit7CisJaWYgKGNhcmQtPmxvYWR0aW1lcnNldCkgeworCQljYXJkLT5sb2FkdGltZXJzZXQgPSAwOworCQlkZWxfdGltZXIoJmNhcmQtPmxvYWR0aW1lcik7CisJfQorCisJc2xpY19kZWJ1Z19jYXJkX2Rlc3Ryb3koY2FyZCk7CisKKwlrZnJlZShjYXJkKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHNsaWNfZW50cnlfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lkZXYpOworCXUzMiBtbWlvX3N0YXJ0ID0gMDsKKwl1aW50IG1taW9fbGVuID0gMDsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNsaWNjYXJkICpjYXJkOworCXN0cnVjdCBtY2FzdF9hZGRyZXNzICptY2FkZHIsICptbGlzdDsKKworCUFTU0VSVChhZGFwdGVyKTsKKwlzbGljX2FkYXB0ZXJfZnJlZXJlc291cmNlcyhhZGFwdGVyKTsKKwlzbGljX3VubWFwX21taW9fc3BhY2UoYWRhcHRlcik7CisJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKworCW1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAwKTsKKwltbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAwKTsKKworCXJlbGVhc2VfbWVtX3JlZ2lvbihtbWlvX3N0YXJ0LCBtbWlvX2xlbik7CisKKwlpb3VubWFwKCh2b2lkIF9faW9tZW0gKilkZXYtPmJhc2VfYWRkcik7CisJLyogZnJlZSBtdWx0aWNhc3QgYWRkcmVzc2VzICovCisJbWxpc3QgPSBhZGFwdGVyLT5tY2FzdGFkZHJzOworCXdoaWxlIChtbGlzdCkgeworCQltY2FkZHIgPSBtbGlzdDsKKwkJbWxpc3QgPSBtbGlzdC0+bmV4dDsKKwkJa2ZyZWUobWNhZGRyKTsKKwl9CisJQVNTRVJUKGFkYXB0ZXItPmNhcmQpOworCWNhcmQgPSBhZGFwdGVyLT5jYXJkOworCUFTU0VSVChjYXJkLT5hZGFwdGVyc19hbGxvY2F0ZWQpOworCWNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZC0tOworCWFkYXB0ZXItPmFsbG9jYXRlZCA9IDA7CisJaWYgKCFjYXJkLT5hZGFwdGVyc19hbGxvY2F0ZWQpIHsKKwkJc3RydWN0IHNsaWNjYXJkICpjdXJyX2NhcmQgPSBzbGljX2dsb2JhbC5zbGljX2NhcmQ7CisJCWlmIChjdXJyX2NhcmQgPT0gY2FyZCkgeworCQkJc2xpY19nbG9iYWwuc2xpY19jYXJkID0gY2FyZC0+bmV4dDsKKwkJfSBlbHNlIHsKKwkJCXdoaWxlIChjdXJyX2NhcmQtPm5leHQgIT0gY2FyZCkKKwkJCQljdXJyX2NhcmQgPSBjdXJyX2NhcmQtPm5leHQ7CisJCQlBU1NFUlQoY3Vycl9jYXJkKTsKKwkJCWN1cnJfY2FyZC0+bmV4dCA9IGNhcmQtPm5leHQ7CisJCX0KKwkJQVNTRVJUKHNsaWNfZ2xvYmFsLm51bV9zbGljX2NhcmRzKTsKKwkJc2xpY19nbG9iYWwubnVtX3NsaWNfY2FyZHMtLTsKKwkJc2xpY19jYXJkX2NsZWFudXAoY2FyZCk7CisJfQorCWtmcmVlKGRldik7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwY2lkZXYpOworfQorCitzdGF0aWMgaW50IHNsaWNfZW50cnlfaGFsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSBhZGFwdGVyLT5jYXJkOworCV9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqc2xpY19yZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2ssCisJCQkJc2xpY19nbG9iYWwuZHJpdmVyX2xvY2suZmxhZ3MpOworCUFTU0VSVChjYXJkKTsKKwluZXRpZl9zdG9wX3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7CisJYWRhcHRlci0+c3RhdGUgPSBBREFQVF9ET1dOOworCWFkYXB0ZXItPmxpbmtzdGF0ZSA9IExJTktfRE9XTjsKKwlhZGFwdGVyLT51cHJfbGlzdCA9IE5VTEw7CisJYWRhcHRlci0+dXByX2J1c3kgPSAwOworCWFkYXB0ZXItPmRldmZsYWdzX3ByZXYgPSAwOworCUFTU0VSVChjYXJkLT5hZGFwdGVyW2FkYXB0ZXItPmNhcmRpbmRleF0gPT0gYWRhcHRlcik7CisJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2ljciwgSUNSX0lOVF9PRkYsIEZMVVNIKTsKKwlhZGFwdGVyLT5hbGxfcmVnX3dyaXRlcysrOworCWFkYXB0ZXItPmljcl9yZWdfd3JpdGVzKys7CisJc2xpY19jb25maWdfY2xlYXIoYWRhcHRlcik7CisJaWYgKGFkYXB0ZXItPmFjdGl2YXRlZCkgeworCQljYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQtLTsKKwkJc2xpY19nbG9iYWwubnVtX3NsaWNfcG9ydHNfYWN0aXZlLS07CisJCWFkYXB0ZXItPmFjdGl2YXRlZCA9IDA7CisJfQorI2lmZGVmIEFVVE9NQVRJQ19SRVNFVAorCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19yZXNldF9pZmFjZSwgMCwgRkxVU0gpOworI2VuZGlmCisJLyoKKwkgKiAgUmVzZXQgdGhlIGFkYXB0ZXIncyBjbWQgcXVldWVzCisJICovCisJc2xpY19jbWRxX3Jlc2V0KGFkYXB0ZXIpOworCisjaWZkZWYgQVVUT01BVElDX1JFU0VUCisJaWYgKCFjYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQpCisJCXNsaWNfY2FyZF9pbml0KGNhcmQsIGFkYXB0ZXIpOworI2VuZGlmCisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5sb2NrLAorCQkJCXNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzbGljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCUFTU0VSVChhZGFwdGVyKTsKKwlkZXYtPnN0YXRzLmNvbGxpc2lvbnMgPSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnhtaXRfY29sbGlzaW9uczsKKwlkZXYtPnN0YXRzLnJ4X2Vycm9ycyA9IGFkYXB0ZXItPnNsaWNfc3RhdHMuaWZhY2UucmN2X2Vycm9yczsKKwlkZXYtPnN0YXRzLnR4X2Vycm9ycyA9IGFkYXB0ZXItPnNsaWNfc3RhdHMuaWZhY2UueG10X2Vycm9yczsKKwlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnJjdl9kaXNjYXJkczsKKwlkZXYtPnN0YXRzLnR4X2hlYXJ0YmVhdF9lcnJvcnMgPSAwOworCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgPSAwOworCWRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycyA9IDA7CisJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycyA9IDA7CisJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgPSAwOworCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyA9IDA7CisKKwlyZXR1cm4gJmRldi0+c3RhdHM7Cit9CisKK3N0YXRpYyBpbnQgc2xpY19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZXRodG9vbF9jbWQgZWRhdGE7CisJc3RydWN0IGV0aHRvb2xfY21kIGVjbWQ7CisJdTMyIGRhdGFbN107CisJdTMyIGludGFnZzsKKworCUFTU0VSVChycSk7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NTTElDU0VUSU5UQUdHOgorCQlpZiAoY29weV9mcm9tX3VzZXIoZGF0YSwgcnEtPmlmcl9kYXRhLCAyOCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaW50YWdnID0gZGF0YVswXTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICIlczogc2V0IGludGVycnVwdCBhZ2dyZWdhdGlvbiB0byAlZFxuIiwKKwkJCV9fZnVuY19fLCBpbnRhZ2cpOworCQlzbGljX2ludGFnZ19zZXQoYWRhcHRlciwgaW50YWdnKTsKKwkJcmV0dXJuIDA7CisKKyNpZmRlZiBTTElDX1RSQUNFX0RVTVBfRU5BQkxFRAorCWNhc2UgU0lPQ1NMSUNUUkFDRURVTVA6CisJCXsKKwkJCXUzMiB2YWx1ZTsKKwkJCURCR19JT0NUTCgic2xpY19pb2N0bCAgU0lPQ1NMSUNfVFJBQ0VfRFVNUFxuIik7CisKKwkJCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCBycS0+aWZyX2RhdGEsIDI4KSkgeworCQkJCVBSSU5UX0VSUk9SCisJCQkJICAgICgic2xpYzogY29weV9mcm9tX3VzZXIgRkFJTEVEIGdldHRpbmcgaW5pdGlhbCBzaW1iYSBwYXJhbVxuIik7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisKKwkJCXZhbHVlID0gZGF0YVswXTsKKwkJCWlmICh0cmFjZW1vbl9yZXF1ZXN0ID09IFNMSUNfRFVNUF9ET05FKSB7CisJCQkJUFJJTlRfRVJST1IKKwkJCQkgICAgKCJBVEsgRGlhZ25vc3RpYyBUcmFjZSBEdW1wIFJlcXVlc3RlZFxuIik7CisJCQkJdHJhY2Vtb25fcmVxdWVzdCA9IFNMSUNfRFVNUF9SRVFVRVNURUQ7CisJCQkJdHJhY2Vtb25fcmVxdWVzdF90eXBlID0gdmFsdWU7CisJCQkJdHJhY2Vtb25fdGltZXN0YW1wID0gamlmZmllczsKKwkJCX0gZWxzZSBpZiAoKHRyYWNlbW9uX3JlcXVlc3QgPT0gU0xJQ19EVU1QX1JFUVVFU1RFRCkgfHwKKwkJCQkgICAodHJhY2Vtb25fcmVxdWVzdCA9PQorCQkJCSAgICBTTElDX0RVTVBfSU5fUFJPR1JFU1MpKSB7CisJCQkJUFJJTlRfRVJST1IKKwkJCQkgICAgKCJBVEsgRGlhZ25vc3RpYyBUcmFjZSBEdW1wIFJlcXVlc3RlZCBidXQgYWxyZWFkeSBpbiBwcm9ncmVzcy4uLiBpZ25vcmVcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlQUklOVF9FUlJPUgorCQkJCSAgICAoIkFUSyBEaWFnbm9zdGljIFRyYWNlIER1bXAgUmVxdWVzdGVkXG4iKTsKKwkJCQl0cmFjZW1vbl9yZXF1ZXN0ID0gU0xJQ19EVU1QX1JFUVVFU1RFRDsKKwkJCQl0cmFjZW1vbl9yZXF1ZXN0X3R5cGUgPSB2YWx1ZTsKKwkJCQl0cmFjZW1vbl90aW1lc3RhbXAgPSBqaWZmaWVzOworCQkJfQorCQkJcmV0dXJuIDA7CisJCX0KKyNlbmRpZgorCWNhc2UgU0lPQ0VUSFRPT0w6CisJCUFTU0VSVChhZGFwdGVyKTsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZlY21kLCBycS0+aWZyX2RhdGEsIHNpemVvZihlY21kKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAoZWNtZC5jbWQgPT0gRVRIVE9PTF9HU0VUKSB7CisJCQllZGF0YS5zdXBwb3J0ZWQgPSAoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8CisJCQkJCSAgIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfAorCQkJCQkgICBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8CisJCQkJCSAgIFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgU1VQUE9SVEVEX0F1dG9uZWcgfCBTVVBQT1JURURfTUlJKTsKKwkJCWVkYXRhLnBvcnQgPSBQT1JUX01JSTsKKwkJCWVkYXRhLnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKKwkJCWVkYXRhLnBoeV9hZGRyZXNzID0gMDsKKwkJCWlmIChhZGFwdGVyLT5saW5rc3BlZWQgPT0gTElOS18xMDBNQikKKwkJCQllZGF0YS5zcGVlZCA9IFNQRUVEXzEwMDsKKwkJCWVsc2UgaWYgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBMSU5LXzEwTUIpCisJCQkJZWRhdGEuc3BlZWQgPSBTUEVFRF8xMDsKKwkJCWVsc2UKKwkJCQllZGF0YS5zcGVlZCA9IDA7CisKKwkJCWlmIChhZGFwdGVyLT5saW5rZHVwbGV4ID09IExJTktfRlVMTEQpCisJCQkJZWRhdGEuZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCQllbHNlCisJCQkJZWRhdGEuZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisKKwkJCWVkYXRhLmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKKwkJCWVkYXRhLm1heHR4cGt0ID0gMTsKKwkJCWVkYXRhLm1heHJ4cGt0ID0gMTsKKwkJCWlmIChjb3B5X3RvX3VzZXIocnEtPmlmcl9kYXRhLCAmZWRhdGEsIHNpemVvZihlZGF0YSkpKQorCQkJCXJldHVybiAtRUZBVUxUOworCisJCX0gZWxzZSBpZiAoZWNtZC5jbWQgPT0gRVRIVE9PTF9TU0VUKSB7CisJCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCQkJcmV0dXJuIC1FUEVSTTsKKworCQkJaWYgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBMSU5LXzEwME1CKQorCQkJCWVkYXRhLnNwZWVkID0gU1BFRURfMTAwOworCQkJZWxzZSBpZiAoYWRhcHRlci0+bGlua3NwZWVkID09IExJTktfMTBNQikKKwkJCQllZGF0YS5zcGVlZCA9IFNQRUVEXzEwOworCQkJZWxzZQorCQkJCWVkYXRhLnNwZWVkID0gMDsKKworCQkJaWYgKGFkYXB0ZXItPmxpbmtkdXBsZXggPT0gTElOS19GVUxMRCkKKwkJCQllZGF0YS5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJCWVsc2UKKwkJCQllZGF0YS5kdXBsZXggPSBEVVBMRVhfSEFMRjsKKworCQkJZWRhdGEuYXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOworCQkJZWRhdGEubWF4dHhwa3QgPSAxOworCQkJZWRhdGEubWF4cnhwa3QgPSAxOworCQkJaWYgKChlY21kLnNwZWVkICE9IGVkYXRhLnNwZWVkKSB8fAorCQkJICAgIChlY21kLmR1cGxleCAhPSBlZGF0YS5kdXBsZXgpKSB7CisJCQkJdTMyIHNwZWVkOworCQkJCXUzMiBkdXBsZXg7CisKKwkJCQlpZiAoZWNtZC5zcGVlZCA9PSBTUEVFRF8xMCkKKwkJCQkJc3BlZWQgPSAwOworCQkJCWVsc2UKKwkJCQkJc3BlZWQgPSBQQ1JfU1BFRURfMTAwOworCQkJCWlmIChlY21kLmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKKwkJCQkJZHVwbGV4ID0gUENSX0RVUExFWF9GVUxMOworCQkJCWVsc2UKKwkJCQkJZHVwbGV4ID0gMDsKKwkJCQlzbGljX2xpbmtfY29uZmlnKGFkYXB0ZXIsIHNwZWVkLCBkdXBsZXgpOworCQkJCXNsaWNfbGlua19ldmVudF9oYW5kbGVyKGFkYXB0ZXIpOworCQkJfQorCQl9CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfY29uZmlnX3BjaShzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KQoreworCXUxNiBwY2lfY29tbWFuZDsKKwl1MTYgbmV3X2NvbW1hbmQ7CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChwY2lkZXYsIFBDSV9DT01NQU5ELCAmcGNpX2NvbW1hbmQpOworCisJbmV3X2NvbW1hbmQgPSBwY2lfY29tbWFuZCB8IFBDSV9DT01NQU5EX01BU1RFUgorCSAgICB8IFBDSV9DT01NQU5EX01FTU9SWQorCSAgICB8IFBDSV9DT01NQU5EX0lOVkFMSURBVEUKKwkgICAgfCBQQ0lfQ09NTUFORF9QQVJJVFkgfCBQQ0lfQ09NTUFORF9TRVJSIHwgUENJX0NPTU1BTkRfRkFTVF9CQUNLOworCWlmIChwY2lfY29tbWFuZCAhPSBuZXdfY29tbWFuZCkKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBjaWRldiwgUENJX0NPTU1BTkQsIG5ld19jb21tYW5kKTsKK30KKworc3RhdGljIGludCBzbGljX2NhcmRfaW5pdChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCV9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqc2xpY19yZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOworCXN0cnVjdCBzbGljX2VlcHJvbSAqcGVlcHJvbTsKKwlzdHJ1Y3Qgb3NsaWNfZWVwcm9tICpwT2VlcHJvbTsKKwlkbWFfYWRkcl90IHBoeXNfY29uZmlnOworCXUzMiBwaHlzX2NvbmZpZ2g7CisJdTMyIHBoeXNfY29uZmlnbDsKKwl1MzIgaSA9IDA7CisJc3RydWN0IHNsaWNfc2htZW0gKnBzaG1lbTsKKwlpbnQgc3RhdHVzOworCXVpbnQgbWFjYWRkcnMgPSBjYXJkLT5jYXJkX3NpemU7CisJdXNob3J0IGVlY29kZXNpemU7CisJdXNob3J0IGRyYW1zaXplOworCXVzaG9ydCBlZV9jaGtzdW07CisJdXNob3J0IGNhbGNfY2hrc3VtOworCXN0cnVjdCBzbGljX2NvbmZpZ19tYWMgKnBtYWM7CisJdW5zaWduZWQgY2hhciBmcnVmb3JtYXQ7CisJdW5zaWduZWQgY2hhciBvZW1mcnVmb3JtYXQ7CisJc3RydWN0IGF0a19mcnUgKnBhdGtmcnU7CisJdW5pb24gb2VtZnJ1ICpwb2VtZnJ1OworCisJLyogUmVzZXQgZXZlcnl0aGluZyBleGNlcHQgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgKi8KKwlzbGljX3NvZnRfcmVzZXQoYWRhcHRlcik7CisKKwkvKiBEb3dubG9hZCB0aGUgbWljcm9jb2RlICovCisJc3RhdHVzID0gc2xpY19jYXJkX2Rvd25sb2FkKGFkYXB0ZXIpOworCisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBjaWRldi0+ZGV2LAorCQkJImRvd25sb2FkIGZhaWxlZCBidXMgJWQgc2xvdCAlZFxuIiwKKwkJCWFkYXB0ZXItPmJ1c251bWJlciwgYWRhcHRlci0+c2xvdG51bWJlcik7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJaWYgKCFjYXJkLT5jb25maWdfc2V0KSB7CisJCXBlZXByb20gPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisJCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHNsaWNfZWVwcm9tKSwKKwkJCQkJICAgICAgICZwaHlzX2NvbmZpZyk7CisKKwkJcGh5c19jb25maWdsID0gU0xJQ19HRVRfQUREUl9MT1cocGh5c19jb25maWcpOworCQlwaHlzX2NvbmZpZ2ggPSBTTElDX0dFVF9BRERSX0hJR0gocGh5c19jb25maWcpOworCisJCWlmICghcGVlcHJvbSkgeworCQkJZGV2X2VycigmYWRhcHRlci0+cGNpZGV2LT5kZXYsCisJCQkJImVlcHJvbSByZWFkIGZhaWxlZCB0byBnZXQgbWVtb3J5ICIKKwkJCQkiYnVzICVkIHNsb3QgJWRcbiIsIGFkYXB0ZXItPmJ1c251bWJlciwKKwkJCQlhZGFwdGVyLT5zbG90bnVtYmVyKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9IGVsc2UgeworCQkJbWVtc2V0KHBlZXByb20sIDAsIHNpemVvZihzdHJ1Y3Qgc2xpY19lZXByb20pKTsKKwkJfQorCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfaWNyLCBJQ1JfSU5UX09GRiwgRkxVU0gpOworCQltZGVsYXkoMSk7CisJCXBzaG1lbSA9IChzdHJ1Y3Qgc2xpY19zaG1lbSAqKWFkYXB0ZXItPnBoeXNfc2htZW07CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmJpdDY0cmVnbG9jay5sb2NrLAorCQkJCQlhZGFwdGVyLT5iaXQ2NHJlZ2xvY2suZmxhZ3MpOworCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwgMCwgRE9OVF9GTFVTSCk7CisJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19pc3AsCisJCQkJIFNMSUNfR0VUX0FERFJfTE9XKCZwc2htZW0tPmlzciksIEZMVVNIKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Yml0NjRyZWdsb2NrLmxvY2ssCisJCQkJCWFkYXB0ZXItPmJpdDY0cmVnbG9jay5mbGFncyk7CisKKwkJc2xpY19jb25maWdfZ2V0KGFkYXB0ZXIsIHBoeXNfY29uZmlnbCwgcGh5c19jb25maWdoKTsKKworCQlmb3IgKDs7KSB7CisJCQlpZiAoYWRhcHRlci0+cHNobWVtLT5pc3IpIHsKKwkJCQlpZiAoYWRhcHRlci0+cHNobWVtLT5pc3IgJiBJU1JfVVBDKSB7CisJCQkJCWFkYXB0ZXItPnBzaG1lbS0+aXNyID0gMDsKKwkJCQkJc2xpY19yZWc2NF93cml0ZShhZGFwdGVyLAorCQkJCQkJJnNsaWNfcmVncy0+c2xpY19pc3AsIDAsCisJCQkJCQkmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJCQkwLCBGTFVTSCk7CisJCQkJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19pc3IsCisJCQkJCQkJIDAsIEZMVVNIKTsKKworCQkJCQlzbGljX3Vwcl9yZXF1ZXN0X2NvbXBsZXRlKGFkYXB0ZXIsIDApOworCQkJCQlicmVhazsKKwkJCQl9IGVsc2UgeworCQkJCQlhZGFwdGVyLT5wc2htZW0tPmlzciA9IDA7CisJCQkJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19pc3IsCisJCQkJCQkJIDAsIEZMVVNIKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCW1kZWxheSgxKTsKKwkJCQlpKys7CisJCQkJaWYgKGkgPiA1MDAwKSB7CisJCQkJCWRldl9lcnIoJmFkYXB0ZXItPnBjaWRldi0+ZGV2LAorCQkJCQkJIiVkIGNvbmZpZyBkYXRhIGZldGNoIHRpbWVkIG91dCFcbiIsCisJCQkJCQlhZGFwdGVyLT5wb3J0KTsKKwkJCQkJc2xpY19yZWc2NF93cml0ZShhZGFwdGVyLAorCQkJCQkJJnNsaWNfcmVncy0+c2xpY19pc3AsIDAsCisJCQkJCQkmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJCQkwLCBGTFVTSCk7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KKwkJCX0KKwkJfQorCisJCXN3aXRjaCAoYWRhcHRlci0+ZGV2aWQpIHsKKwkJLyogT2FzaXMgY2FyZCAqLworCQljYXNlIFNMSUNfMkdCX0RFVklDRV9JRDoKKwkJCS8qIGV4dHJhY3QgRUVQUk9NIGRhdGEgYW5kIHBvaW50ZXJzIHRvIEVFUFJPTSBkYXRhICovCisJCQlwT2VlcHJvbSA9IChzdHJ1Y3Qgb3NsaWNfZWVwcm9tICopIHBlZXByb207CisJCQllZWNvZGVzaXplID0gcE9lZXByb20tPkVlY29kZVNpemU7CisJCQlkcmFtc2l6ZSA9IHBPZWVwcm9tLT5EcmFtU2l6ZTsKKwkJCXBtYWMgPSBwT2VlcHJvbS0+TWFjSW5mbzsKKwkJCWZydWZvcm1hdCA9IHBPZWVwcm9tLT5GcnVGb3JtYXQ7CisJCQlwYXRrZnJ1ID0gJnBPZWVwcm9tLT5BdGtGcnU7CisJCQlvZW1mcnVmb3JtYXQgPSBwT2VlcHJvbS0+T2VtRnJ1Rm9ybWF0OworCQkJcG9lbWZydSA9ICZwT2VlcHJvbS0+T2VtRnJ1OworCQkJbWFjYWRkcnMgPSAyOworCQkJLyogTWlub3Iga2x1ZGdlIGZvciBPYXNpcyBjYXJkCisJCQkgICAgIGdldCAyIE1BQyBhZGRyZXNzZXMgZnJvbSB0aGUKKwkJCSAgICAgRUVQUk9NIHRvIGVuc3VyZSB0aGF0IGZ1bmN0aW9uIDEKKwkJCSAgICAgZ2V0cyB0aGUgUG9ydCAxIE1BQyBhZGRyZXNzICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIGV4dHJhY3QgRUVQUk9NIGRhdGEgYW5kIHBvaW50ZXJzIHRvIEVFUFJPTSBkYXRhICovCisJCQllZWNvZGVzaXplID0gcGVlcHJvbS0+RWVjb2RlU2l6ZTsKKwkJCWRyYW1zaXplID0gcGVlcHJvbS0+RHJhbVNpemU7CisJCQlwbWFjID0gcGVlcHJvbS0+dTIubWFjLk1hY0luZm87CisJCQlmcnVmb3JtYXQgPSBwZWVwcm9tLT5GcnVGb3JtYXQ7CisJCQlwYXRrZnJ1ID0gJnBlZXByb20tPkF0a0ZydTsKKwkJCW9lbWZydWZvcm1hdCA9IHBlZXByb20tPk9lbUZydUZvcm1hdDsKKwkJCXBvZW1mcnUgPSAmcGVlcHJvbS0+T2VtRnJ1OworCQkJYnJlYWs7CisJCX0KKworCQljYXJkLT5jb25maWcuRWVwcm9tVmFsaWQgPSBmYWxzZTsKKworCQkvKiAgc2VlIGlmIHRoZSBFRVBST00gaXMgdmFsaWQgYnkgY2hlY2tpbmcgaXQncyBjaGVja3N1bSAqLworCQlpZiAoKGVlY29kZXNpemUgPD0gTUFYX0VFQ09ERV9TSVpFKSAmJgorCQkgICAgKGVlY29kZXNpemUgPj0gTUlOX0VFQ09ERV9TSVpFKSkgeworCisJCQllZV9jaGtzdW0gPQorCQkJICAgICoodTE2ICopICgoY2hhciAqKSBwZWVwcm9tICsgKGVlY29kZXNpemUgLSAyKSk7CisJCQkvKgorCQkJICAgIGNhbGN1bGF0ZSB0aGUgRUVQUk9NIGNoZWNrc3VtCisJCQkqLworCQkJY2FsY19jaGtzdW0gPQorCQkJICAgIH5zbGljX2VlcHJvbV9ja3N1bSgoY2hhciAqKSBwZWVwcm9tLAorCQkJCQkgICAgICAgKGVlY29kZXNpemUgLSAyKSk7CisJCQkvKgorCQkJICAgIGlmIHRoZSB1Y2RvZSBjaGtzdW0gZmxhZyBiaXQgd29ya2VkLAorCQkJICAgIHdlIHdvdWxkbid0IG5lZWQgdGhpcyBzaGl0CisJCQkqLworCQkJaWYgKGVlX2Noa3N1bSA9PSBjYWxjX2Noa3N1bSkKKwkJCQljYXJkLT5jb25maWcuRWVwcm9tVmFsaWQgPSB0cnVlOworCQl9CisJCS8qICBjb3B5IGluIHRoZSBEUkFNIHNpemUgKi8KKwkJY2FyZC0+Y29uZmlnLkRyYW1TaXplID0gZHJhbXNpemU7CisKKwkJLyogIGNvcHkgaW4gdGhlIE1BQyBhZGRyZXNzKGVzKSAqLworCQlmb3IgKGkgPSAwOyBpIDwgbWFjYWRkcnM7IGkrKykgeworCQkJbWVtY3B5KCZjYXJkLT5jb25maWcuTWFjSW5mb1tpXSwKKwkJCSAgICAgICAmcG1hY1tpXSwgc2l6ZW9mKHN0cnVjdCBzbGljX2NvbmZpZ19tYWMpKTsKKwkJfQorCisJCS8qICBjb3B5IHRoZSBBbGFjcml0ZWNoIEZSVSBpbmZvcm1hdGlvbiAqLworCQljYXJkLT5jb25maWcuRnJ1Rm9ybWF0ID0gZnJ1Zm9ybWF0OworCQltZW1jcHkoJmNhcmQtPmNvbmZpZy5BdGtGcnUsIHBhdGtmcnUsCisJCQkJCQlzaXplb2Yoc3RydWN0IGF0a19mcnUpKTsKKworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzbGljX2VlcHJvbSksCisJCQkJICAgIHBlZXByb20sIHBoeXNfY29uZmlnKTsKKworCQlpZiAoKCFjYXJkLT5jb25maWcuRWVwcm9tVmFsaWQpICYmCisJCSAgICAoYWRhcHRlci0+cmVnX3BhcmFtcy5mYWlsX29uX2JhZF9lZXByb20pKSB7CisJCQlzbGljX3JlZzY0X3dyaXRlKGFkYXB0ZXIsICZzbGljX3JlZ3MtPnNsaWNfaXNwLCAwLAorCQkJCQkgJnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAorCQkJCQkgMCwgRkxVU0gpOworCQkJZGV2X2VycigmYWRhcHRlci0+cGNpZGV2LT5kZXYsCisJCQkJInVuc3VwcG9ydGVkIENPTkZJR1VSQVRJT04gRUVQUk9NIGludmFsaWRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQljYXJkLT5jb25maWdfc2V0ID0gMTsKKwl9CisKKwlpZiAoc2xpY19jYXJkX2Rvd25sb2FkX2dicmN2KGFkYXB0ZXIpKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBjaWRldi0+ZGV2LAorCQkJInVuYWJsZSB0byBkb3dubG9hZCBHQiByZWNlaXZlIG1pY3JvY29kZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChzbGljX2dsb2JhbC5keW5hbWljX2ludGFnZykKKwkJc2xpY19pbnRhZ2dfc2V0KGFkYXB0ZXIsIDApOworCWVsc2UKKwkJc2xpY19pbnRhZ2dfc2V0KGFkYXB0ZXIsIGludGFnZ19kZWxheSk7CisKKwkvKgorCSAqICBJbml0aWFsaXplIHBpbmcgc3RhdHVzIHRvICJvayIKKwkgKi8KKwljYXJkLT5waW5nc3RhdHVzID0gSVNSX1BJTkdNQVNLOworCisJLyoKKwkgKiBMYXN0bHksIG1hcmsgb3VyIGNhcmQgc3RhdGUgYXMgdXAgYW5kIHJldHVybiBzdWNjZXNzCisJICovCisJY2FyZC0+c3RhdGUgPSBDQVJEX1VQOworCWNhcmQtPnJlc2V0X2luX3Byb2dyZXNzID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzbGljX2luaXRfZHJpdmVyKHZvaWQpCit7CisJaWYgKHNsaWNfZmlyc3RfaW5pdCkgeworCQlzbGljX2ZpcnN0X2luaXQgPSAwOworCQlzcGluX2xvY2tfaW5pdCgmc2xpY19nbG9iYWwuZHJpdmVyX2xvY2subG9jayk7CisJCXNsaWNfZGVidWdfaW5pdCgpOworCX0KK30KKworc3RhdGljIHZvaWQgc2xpY19pbml0X2FkYXB0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgICAgIHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX3RibF9lbnRyeSwKKwkJCSAgICAgIHZvaWQgX19pb21lbSAqbWVtYWRkciwgaW50IGNoaXBfaWR4KQoreworCXVzaG9ydCBpbmRleDsKKwlzdHJ1Y3Qgc2xpY19oYW5kbGUgKnBzbGljX2hhbmRsZTsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKy8qCWFkYXB0ZXItPnBjaWRldiA9IHBjaWRldjsqLworCWFkYXB0ZXItPnZlbmRpZCA9IHBjaV90YmxfZW50cnktPnZlbmRvcjsKKwlhZGFwdGVyLT5kZXZpZCA9IHBjaV90YmxfZW50cnktPmRldmljZTsKKwlhZGFwdGVyLT5zdWJzeXNpZCA9IHBjaV90YmxfZW50cnktPnN1YmRldmljZTsKKwlhZGFwdGVyLT5idXNudW1iZXIgPSBwY2lkZXYtPmJ1cy0+bnVtYmVyOworCWFkYXB0ZXItPnNsb3RudW1iZXIgPSAoKHBjaWRldi0+ZGV2Zm4gPj4gMykgJiAweDFGKTsKKwlhZGFwdGVyLT5mdW5jdGlvbm51bWJlciA9IChwY2lkZXYtPmRldmZuICYgMHg3KTsKKwlhZGFwdGVyLT5tZW1vcnlsZW5ndGggPSBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMCk7CisJYWRhcHRlci0+c2xpY19yZWdzID0gKF9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqKW1lbWFkZHI7CisJYWRhcHRlci0+aXJxID0gcGNpZGV2LT5pcnE7CisvKglhZGFwdGVyLT5uZXRkZXYgPSBuZXRkZXY7Ki8KKwlhZGFwdGVyLT5uZXh0X25ldGRldmljZSA9IGhlYWRfbmV0ZGV2aWNlOworCWhlYWRfbmV0ZGV2aWNlID0gbmV0ZGV2OworCWFkYXB0ZXItPmNoaXBpZCA9IGNoaXBfaWR4OworCWFkYXB0ZXItPnBvcnQgPSAwOwkvKmFkYXB0ZXItPmZ1bmN0aW9ubnVtYmVyOyovCisJYWRhcHRlci0+Y2FyZGluZGV4ID0gYWRhcHRlci0+cG9ydDsKKwlhZGFwdGVyLT5tZW1vcnliYXNlID0gbWVtYWRkcjsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+dXByX2xvY2subG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPmJpdDY0cmVnbG9jay5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLmxvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5yZXNldF9sb2NrLmxvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5oYW5kbGVfbG9jay5sb2NrKTsKKworCWFkYXB0ZXItPmNhcmRfc2l6ZSA9IDE7CisJLyoKKwkgIEluaXRpYWxpemUgc2xpY19oYW5kbGUgYXJyYXkKKwkqLworCUFTU0VSVChTTElDX0NNRFFfTUFYQ01EUyA8PSAweEZGRkYpOworCS8qCisJIFN0YXJ0IHdpdGggMS4gIDAgaXMgYW4gaW52YWxpZCBob3N0IGhhbmRsZS4KKwkqLworCWZvciAoaW5kZXggPSAxLCBwc2xpY19oYW5kbGUgPSAmYWRhcHRlci0+c2xpY19oYW5kbGVzWzFdOworCSAgICAgaW5kZXggPCBTTElDX0NNRFFfTUFYQ01EUzsgaW5kZXgrKywgcHNsaWNfaGFuZGxlKyspIHsKKworCQlwc2xpY19oYW5kbGUtPnRva2VuLmhhbmRsZV9pbmRleCA9IGluZGV4OworCQlwc2xpY19oYW5kbGUtPnR5cGUgPSBTTElDX0hBTkRMRV9GUkVFOworCQlwc2xpY19oYW5kbGUtPm5leHQgPSBhZGFwdGVyLT5wZnJlZV9zbGljX2hhbmRsZXM7CisJCWFkYXB0ZXItPnBmcmVlX3NsaWNfaGFuZGxlcyA9IHBzbGljX2hhbmRsZTsKKwl9CisJYWRhcHRlci0+cHNobWVtID0gKHN0cnVjdCBzbGljX3NobWVtICopCisJCQkJCXBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBzbGljX3NobWVtKSwKKwkJCQkJJmFkYXB0ZXItPgorCQkJCQlwaHlzX3NobWVtKTsKKwlBU1NFUlQoYWRhcHRlci0+cHNobWVtKTsKKworCW1lbXNldChhZGFwdGVyLT5wc2htZW0sIDAsIHNpemVvZihzdHJ1Y3Qgc2xpY19zaG1lbSkpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNsaWNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gc2xpY19lbnRyeV9vcGVuLAorCS5uZG9fc3RvcAkJPSBzbGljX2VudHJ5X2hhbHQsCisJLm5kb19zdGFydF94bWl0CQk9IHNsaWNfeG1pdF9zdGFydCwKKwkubmRvX2RvX2lvY3RsCQk9IHNsaWNfaW9jdGwsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBzbGljX21hY19zZXRfYWRkcmVzcywKKwkubmRvX2dldF9zdGF0cwkJPSBzbGljX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHNsaWNfbWNhc3Rfc2V0X2xpc3QsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorfTsKKworc3RhdGljIHUzMiBzbGljX2NhcmRfbG9jYXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IHNsaWNfZ2xvYmFsLnNsaWNfY2FyZDsKKwlzdHJ1Y3QgcGh5c2NhcmQgKnBoeXNjYXJkID0gc2xpY19nbG9iYWwucGh5c19jYXJkOworCXVzaG9ydCBjYXJkX2hvc3RpZDsKKwl1MTYgX19pb21lbSAqaG9zdGlkX3JlZzsKKwl1aW50IGk7CisJdWludCByZGhvc3RpZF9vZmZzZXQgPSAwOworCisJc3dpdGNoIChhZGFwdGVyLT5kZXZpZCkgeworCWNhc2UgU0xJQ18yR0JfREVWSUNFX0lEOgorCQlyZGhvc3RpZF9vZmZzZXQgPSBTTElDX1JESE9TVElEXzJHQjsKKwkJYnJlYWs7CisJY2FzZSBTTElDXzFHQl9ERVZJQ0VfSUQ6CisJCXJkaG9zdGlkX29mZnNldCA9IFNMSUNfUkRIT1NUSURfMUdCOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlBU1NFUlQoMCk7CisJCWJyZWFrOworCX0KKworCWhvc3RpZF9yZWcgPQorCSAgICAodTE2IF9faW9tZW0gKikgKCgodTggX19pb21lbSAqKSAoYWRhcHRlci0+c2xpY19yZWdzKSkgKworCSAgICByZGhvc3RpZF9vZmZzZXQpOworCisJLyogcmVhZCB0aGUgMTYgYml0IGhvc3RpZCBmcm9tIFNSQU0gKi8KKwljYXJkX2hvc3RpZCA9ICh1c2hvcnQpIHJlYWR3KGhvc3RpZF9yZWcpOworCisJLyogSW5pdGlhbGl6ZSBhIG5ldyBjYXJkIHN0cnVjdHVyZSBpZiBuZWVkIGJlICovCisJaWYgKGNhcmRfaG9zdGlkID09IFNMSUNfSE9TVElEX0RFRkFVTFQpIHsKKwkJY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbGljY2FyZCksIEdGUF9LRVJORUwpOworCQlpZiAoY2FyZCA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJY2FyZC0+bmV4dCA9IHNsaWNfZ2xvYmFsLnNsaWNfY2FyZDsKKwkJc2xpY19nbG9iYWwuc2xpY19jYXJkID0gY2FyZDsKKwkJY2FyZC0+YnVzbnVtYmVyID0gYWRhcHRlci0+YnVzbnVtYmVyOworCQljYXJkLT5zbG90bnVtYmVyID0gYWRhcHRlci0+c2xvdG51bWJlcjsKKworCQkvKiBGaW5kIGFuIGF2YWlsYWJsZSBjYXJkbnVtICovCisJCWZvciAoaSA9IDA7IGkgPCBTTElDX01BWF9DQVJEUzsgaSsrKSB7CisJCQlpZiAoc2xpY19nbG9iYWwuY2FyZG51bWludXNlW2ldID09IDApIHsKKwkJCQlzbGljX2dsb2JhbC5jYXJkbnVtaW51c2VbaV0gPSAxOworCQkJCWNhcmQtPmNhcmRudW0gPSBpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXNsaWNfZ2xvYmFsLm51bV9zbGljX2NhcmRzKys7CisKKwkJc2xpY19kZWJ1Z19jYXJkX2NyZWF0ZShjYXJkKTsKKwl9IGVsc2UgeworCQkvKiBDYXJkIGV4aXN0cywgZmluZCB0aGUgY2FyZCB0aGlzIGFkYXB0ZXIgYmVsb25ncyB0byAqLworCQl3aGlsZSAoY2FyZCkgeworCQkJaWYgKGNhcmQtPmNhcmRudW0gPT0gY2FyZF9ob3N0aWQpCisJCQkJYnJlYWs7CisJCQljYXJkID0gY2FyZC0+bmV4dDsKKwkJfQorCX0KKworCUFTU0VSVChjYXJkKTsKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRU5YSU87CisJLyogUHV0IHRoZSBhZGFwdGVyIGluIHRoZSBjYXJkJ3MgYWRhcHRlciBsaXN0ICovCisJQVNTRVJUKGNhcmQtPmFkYXB0ZXJbYWRhcHRlci0+cG9ydF0gPT0gTlVMTCk7CisJaWYgKCFjYXJkLT5hZGFwdGVyW2FkYXB0ZXItPnBvcnRdKSB7CisJCWNhcmQtPmFkYXB0ZXJbYWRhcHRlci0+cG9ydF0gPSBhZGFwdGVyOworCQlhZGFwdGVyLT5jYXJkID0gY2FyZDsKKwl9CisKKwljYXJkLT5jYXJkX3NpemUgPSAxOwkvKiBvbmUgcG9ydCBwZXIgKmxvZ2ljYWwqIGNhcmQgKi8KKworCXdoaWxlIChwaHlzY2FyZCkgeworCQlmb3IgKGkgPSAwOyBpIDwgU0xJQ19NQVhfUE9SVFM7IGkrKykgeworCQkJaWYgKCFwaHlzY2FyZC0+YWRhcHRlcltpXSkKKwkJCQljb250aW51ZTsKKwkJCWVsc2UKKwkJCQlicmVhazsKKwkJfQorCQlBU1NFUlQoaSAhPSBTTElDX01BWF9QT1JUUyk7CisJCWlmIChwaHlzY2FyZC0+YWRhcHRlcltpXS0+c2xvdG51bWJlciA9PSBhZGFwdGVyLT5zbG90bnVtYmVyKQorCQkJYnJlYWs7CisJCXBoeXNjYXJkID0gcGh5c2NhcmQtPm5leHQ7CisJfQorCWlmICghcGh5c2NhcmQpIHsKKwkJLyogbm8gc3RydWN0dXJlIGFsbG9jYXRlZCBmb3IgdGhpcyBwaHlzaWNhbCBjYXJkIHlldCAqLworCQlwaHlzY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwaHlzY2FyZCksIEdGUF9BVE9NSUMpOworCQlBU1NFUlQocGh5c2NhcmQpOworCisJCXBoeXNjYXJkLT5uZXh0ID0gc2xpY19nbG9iYWwucGh5c19jYXJkOworCQlzbGljX2dsb2JhbC5waHlzX2NhcmQgPSBwaHlzY2FyZDsKKwkJcGh5c2NhcmQtPmFkYXB0ZXJzX2FsbG9jZCA9IDE7CisJfSBlbHNlIHsKKwkJcGh5c2NhcmQtPmFkYXB0ZXJzX2FsbG9jZCsrOworCX0KKwkvKiBOb3RlIC0gdGhpcyBpcyBaRVJPIHJlbGF0aXZlICovCisJYWRhcHRlci0+cGh5c3BvcnQgPSBwaHlzY2FyZC0+YWRhcHRlcnNfYWxsb2NkIC0gMTsKKworCUFTU0VSVChwaHlzY2FyZC0+YWRhcHRlclthZGFwdGVyLT5waHlzcG9ydF0gPT0gTlVMTCk7CisJcGh5c2NhcmQtPmFkYXB0ZXJbYWRhcHRlci0+cGh5c3BvcnRdID0gYWRhcHRlcjsKKwlhZGFwdGVyLT5waHlzY2FyZCA9IHBoeXNjYXJkOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNsaWNfZW50cnlfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaWRldiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX3RibF9lbnRyeSkKK3sKKwlzdGF0aWMgaW50IGNhcmRzX2ZvdW5kOworCXN0YXRpYyBpbnQgZGlkX3ZlcnNpb247CisJaW50IGVyciA9IC1FTk9ERVY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcjsKKwl2b2lkIF9faW9tZW0gKm1lbW1hcHBlZF9pb2FkZHIgPSBOVUxMOworCXUzMiBzdGF0dXMgPSAwOworCXVsb25nIG1taW9fc3RhcnQgPSAwOworCXVsb25nIG1taW9fbGVuID0gMDsKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSBOVUxMOworCWludCBwY2lfdXNpbmdfZGFjID0gMDsKKworCXNsaWNfZ2xvYmFsLmR5bmFtaWNfaW50YWdnID0gZHluYW1pY19pbnRhZ2c7CisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2lkZXYpOworCisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChzbGljX2RlYnVnID4gMCAmJiBkaWRfdmVyc2lvbisrID09IDApIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzXG4iLCBzbGljX2Jhbm5lcik7CisJCXByaW50ayhLRVJOX0RFQlVHICIlc1xuIiwgc2xpY19wcm9jX3ZlcnNpb24pOworCX0KKworCWlmICghcGNpX3NldF9kbWFfbWFzayhwY2lkZXYsIERNQV9CSVRfTUFTSyg2NCkpKSB7CisJCXBjaV91c2luZ19kYWMgPSAxOworCQlpZiAocGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaWRldiwgRE1BX0JJVF9NQVNLKDY0KSkpIHsKKwkJCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAidW5hYmxlIHRvIG9idGFpbiA2NC1iaXQgRE1BIGZvciAiCisJCQkJCSJjb25zaXN0ZW50IGFsbG9jYXRpb25zXG4iKTsKKwkJCWdvdG8gZXJyX291dF9kaXNhYmxlX3BjaTsKKwkJfQorCX0gZWxzZSBpZiAocGNpX3NldF9kbWFfbWFzayhwY2lkZXYsIERNQV9CSVRfTUFTSygzMikpKSB7CisJCXBjaV91c2luZ19kYWMgPSAwOworCQlwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpZGV2LCBETUFfQklUX01BU0soMzIpKTsKKwl9IGVsc2UgeworCQlkZXZfZXJyKCZwY2lkZXYtPmRldiwgIm5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvblxuIik7CisJCWdvdG8gZXJyX291dF9kaXNhYmxlX3BjaTsKKwl9CisKKwllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaWRldiwgRFJWX05BTUUpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGNpZGV2LT5kZXYsICJjYW4ndCBvYnRhaW4gUENJIHJlc291cmNlc1xuIik7CisJCWdvdG8gZXJyX291dF9kaXNhYmxlX3BjaTsKKwl9CisKKwlwY2lfc2V0X21hc3RlcihwY2lkZXYpOworCisJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBhZGFwdGVyKSk7CisJaWYgKCFuZXRkZXYpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0X2V4aXRfc2xpY19wcm9iZTsKKwl9CisKKwlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZwY2lkZXYtPmRldik7CisKKwlwY2lfc2V0X2RydmRhdGEocGNpZGV2LCBuZXRkZXYpOworCWFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWFkYXB0ZXItPm5ldGRldiA9IG5ldGRldjsKKwlhZGFwdGVyLT5wY2lkZXYgPSBwY2lkZXY7CisJaWYgKHBjaV91c2luZ19kYWMpCisJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOworCisJbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDApOworCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDApOworCisKKy8qCW1lbW1hcHBlZF9pb2FkZHIgPSAgKHUzMilpb3JlbWFwX25vY2FjaGUobW1pb19zdGFydCwgbW1pb19sZW4pOyovCisJbWVtbWFwcGVkX2lvYWRkciA9IGlvcmVtYXAobW1pb19zdGFydCwgbW1pb19sZW4pOworCWlmICghbWVtbWFwcGVkX2lvYWRkcikgeworCQlkZXZfZXJyKCZwY2lkZXYtPmRldiwgImNhbm5vdCByZW1hcCBNTUlPIHJlZ2lvbiAlbHggQCAlbHhcbiIsCisJCQltbWlvX2xlbiwgbW1pb19zdGFydCk7CisJCWdvdG8gZXJyX291dF9mcmVlX25ldGRldjsKKwl9CisKKwlzbGljX2NvbmZpZ19wY2kocGNpZGV2KTsKKworCXNsaWNfaW5pdF9kcml2ZXIoKTsKKworCXNsaWNfaW5pdF9hZGFwdGVyKG5ldGRldiwKKwkJCSAgcGNpZGV2LCBwY2lfdGJsX2VudHJ5LCBtZW1tYXBwZWRfaW9hZGRyLCBjYXJkc19mb3VuZCk7CisKKwlzdGF0dXMgPSBzbGljX2NhcmRfbG9jYXRlKGFkYXB0ZXIpOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2VycigmcGNpZGV2LT5kZXYsICJjYW5ub3QgbG9jYXRlIGNhcmRcbiIpOworCQlnb3RvIGVycl9vdXRfZnJlZV9tbWlvX3JlZ2lvbjsKKwl9CisKKwljYXJkID0gYWRhcHRlci0+Y2FyZDsKKworCWlmICghYWRhcHRlci0+YWxsb2NhdGVkKSB7CisJCWNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZCsrOworCQlhZGFwdGVyLT5hbGxvY2F0ZWQgPSAxOworCX0KKworCXN0YXR1cyA9IHNsaWNfY2FyZF9pbml0KGNhcmQsIGFkYXB0ZXIpOworCisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWNhcmQtPnN0YXRlID0gQ0FSRF9GQUlMOworCQlhZGFwdGVyLT5zdGF0ZSA9IEFEQVBUX0ZBSUw7CisJCWFkYXB0ZXItPmxpbmtzdGF0ZSA9IExJTktfRE9XTjsKKwkJZGV2X2VycigmcGNpZGV2LT5kZXYsICJGQUlMRUQgc3RhdHVzWyV4XVxuIiwgc3RhdHVzKTsKKwl9IGVsc2UgeworCQlzbGljX2FkYXB0ZXJfc2V0X2h3YWRkcihhZGFwdGVyKTsKKwl9CisKKwluZXRkZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKWFkYXB0ZXItPm1lbW9yeWJhc2U7CisJbmV0ZGV2LT5pcnEgPSBhZGFwdGVyLT5pcnE7CisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJnNsaWNfbmV0ZGV2X29wczsKKworCXNsaWNfZGVidWdfYWRhcHRlcl9jcmVhdGUoYWRhcHRlcik7CisKKwlzdHJjcHkobmV0ZGV2LT5uYW1lLCAiZXRoJWQiKTsKKwllcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAiQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UsIGFib3J0aW5nLlxuIik7CisJCWdvdG8gZXJyX291dF91bm1hcDsKKwl9CisKKwljYXJkc19mb3VuZCsrOworCisJcmV0dXJuIHN0YXR1czsKKworZXJyX291dF91bm1hcDoKKwlpb3VubWFwKG1lbW1hcHBlZF9pb2FkZHIpOworZXJyX291dF9mcmVlX21taW9fcmVnaW9uOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihtbWlvX3N0YXJ0LCBtbWlvX2xlbik7CitlcnJfb3V0X2ZyZWVfbmV0ZGV2OgorCWZyZWVfbmV0ZGV2KG5ldGRldik7CitlcnJfb3V0X2V4aXRfc2xpY19wcm9iZToKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBjaWRldik7CitlcnJfb3V0X2Rpc2FibGVfcGNpOgorCXBjaV9kaXNhYmxlX2RldmljZShwY2lkZXYpOworCXJldHVybiBlcnI7Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzbGljX2RyaXZlciA9IHsKIAkubmFtZSA9IERSVl9OQU1FLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5jIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5jCmluZGV4IDlmZmViMzYuLmY2YjQwMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmMKQEAgLTgzNSw3ICs4MzUsNyBAQAogICogT3JpZ2luYWwgaW5pdCBmdW5jdGlvbiBjaGFuZ2VkIHRvIHByb2JlIG1ldGhvZCB0byBiZSB1c2VkIGJ5IHBjaV9kcnYKICAqIHByb2Nlc3MgdXNlZCB0byBkZXRlY3QgY2hpcHMgcmVwbGFjZWQgd2l0aCBrZXJuZWwgcHJvY2VzcyBpbiBwY2lfZHJ2CiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IHNtdGNmYl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbXRjZmJfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJc3RydWN0IHNtdGNmYl9pbmZvICpzZmI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NjM5OGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvS2NvbmZpZwpAQCAtMCwwICsxLDcgQEAKK2NvbmZpZyBTT0xPNlgxMAorCXRyaXN0YXRlICJTb2Z0bG9naWMgNngxMCBNUEVHIGNvZGVjIGNhcmRzIgorCWRlcGVuZHMgb24gUENJICYmIFZJREVPX0RFViAmJiBTTkQKKwlzZWxlY3QgVklERU9CVUZfRE1BX0NPTlRJRworCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBTb2Z0bG9naWMgYmFzZWQgTVBFRy00IGFuZCBoLjI2NCBjb2RlYworCSAgY29kZWMgY2FyZHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U3MDA0NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9NYWtlZmlsZQpAQCAtMCwwICsxLDYgQEAKK3NvbG82eDEwLW9ianMJOj0gc29sbzYwMTAtY29yZS5vIHNvbG82MDEwLWkyYy5vIHNvbG82MDEwLXAybS5vIFwKKwkJICAgc29sbzYwMTAtdjRsMi5vIHNvbG82MDEwLXR3MjgubyBzb2xvNjAxMC1ncGlvLm8gXAorCQkgICBzb2xvNjAxMC1kaXNwLm8gc29sbzYwMTAtZW5jLm8gc29sbzYwMTAtdjRsMi1lbmMubyBcCisJCSAgIHNvbG82MDEwLWc3MjMubworCitvYmotJChDT05GSUdfU09MTzZYMTApIDo9IHNvbG82eDEwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL1RPRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZhMmVlMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9UT0RPCkBAIC0wLDAgKzEsMjggQEAKK1RPRE8gKHN0YWdpbmcgPT4gbWFpbik6CisKKwkqIGNoZWNrcGF0Y2gucGwgKGhhdmVuJ3QgcnVuIGl0IHlldCkKKwkqIExpbmRlbnQgKHNob3VsZCBiZSBjbGVhbiwgYnV0IGNoZWNrKQorCSogTW90aW9uIGRldGVjdGlvbiBmbGFncyBuZWVkIHRvIGJlIG1vdmVkIHRvIHY0bDIKKwkqIFNvbWUgcHJpdmF0ZSBDSURzIG5lZWQgdG8gYmUgbW92ZWQgdG8gdjRsMgorCitUT0RPIChnZW5lcmFsKToKKworCSogZW5jb2RlciBvbi9vZmYgY29udHJvbHMKKwkqIG1wZWcgY2lkIGJpdHJhdGUgbW9kZSAodmJyL2NicikKKwkqIG1wZWcgY2lkIGJpdHJhdGUvYml0cmF0ZS1wZWFrCisJKiBtcGVnIGVuY29kZSBvZiB1c2VyIGRhdGEKKwkqIG1wZWcgZGVjb2RlIG9mIHVzZXIgZGF0YQorCSogc3dpdGNoIGJldHdlZW4gNCBmcmFtZXMvaXJxIHRvIDEgd2hlbiB1c2luZyBtanBlZyAoYW5kIHRoZW4gYmFjaworCSAgd2hlbiBub3QpCisJKiBpbXBsZW1lbnQgYSBDSUQgY29udHJvbCBmb3IgbW90aW9uIGFyZWFzL3RocmVzaG9sZHMKKwkqIGltcGxlbWVudCBDSUQgY29udHJvbHMgZm9yIG1vemFpYyBhcmVhcworCSogYWxsb3cgZm9yIGhpZ2hlciBsZXZlbCBvZiBpbnRlcnZhbCAoZm9yIDwgMSBmcHMpCisJKiBzb3VuZDoKKwkgIC0gaW1wbGVtZW50IHBsYXliYWNrIHZpYSBleHRlcm5hbCBzb3VuZCBqYWNrCisJICAtIGltcGxlbWVudCBsb29wYmFjayBvZiBleHRlcm5hbCBzb3VuZCBqYWNrIHdpdGggaW5jb21pbmcgYXVkaW8/CisJICAtIGltcGxlbWVudCBwYXVzZS9yZXN1bWUKKwkgIC0gY2hlY2sgaW50byBqYWNraW5nIHNvdW5kIGZyb20gdHgyOHh4IGNoaXBzIGRpcmVjdGx5ICh0byBhdm9pZAorCSAgICBnLjcyMy84a2h6IGxpbWl0YXRpb25zKQorCitQbGFzZSBzZW5kIHBhdGNoZXMgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4gYW5kIENjIEJlbiBDb2xsaW5zCis8YmNvbGxpbnNAYmx1ZWNoZXJyeS5uZXQ+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLWNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGM2NzM5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLWNvcmUuYwpAQCAtMCwwICsxLDI4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBCbHVlY2hlcnJ5LCBMTEMgd3d3LmJsdWVjaGVycnlkdnIuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQmVuIENvbGxpbnMgPGJjb2xsaW5zQGJsdWVjaGVycnkubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorCisjaW5jbHVkZSAic29sbzYwMTAuaCIKKyNpbmNsdWRlICJzb2xvNjAxMC10dzI4LmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiU29mdGxvZ2ljIDYwMTAgTVA0IEVuY29kZXIvRGVjb2RlciBWNEwyL0FMU0EgRHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJCZW4gQ29sbGlucyA8YmNvbGxpbnNAYmx1ZWNoZXJyeS5uZXQ+Iik7CitNT0RVTEVfVkVSU0lPTihTT0xPNjAxMF9WRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwordm9pZCBzb2xvNjAxMF9pcnFfb24oc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHUzMiBtYXNrKQoreworCXNvbG9fZGV2LT5pcnFfbWFzayB8PSBtYXNrOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0lSUV9FTkFCTEUsIHNvbG9fZGV2LT5pcnFfbWFzayk7Cit9CisKK3ZvaWQgc29sbzYwMTBfaXJxX29mZihzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgdTMyIG1hc2spCit7CisJc29sb19kZXYtPmlycV9tYXNrICY9IH5tYXNrOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0lSUV9FTkFCTEUsIHNvbG9fZGV2LT5pcnFfbWFzayk7Cit9CisKKy8qIFhYWCBXZSBzaG91bGQgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgc3ViLWRldmljZSBJU1IncyAqLworc3RhdGljIGlycXJldHVybl90IHNvbG82MDEwX2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gZGF0YTsKKwl1MzIgc3RhdHVzOworCWludCBpOworCisJc3RhdHVzID0gc29sb19yZWdfcmVhZChzb2xvX2RldiwgU09MT19JUlFfU1RBVCk7CisJaWYgKCFzdGF0dXMpCisJCXJldHVybiBJUlFfTk9ORTsKKworCWlmIChzdGF0dXMgJiB+c29sb19kZXYtPmlycV9tYXNrKSB7CisJCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0lSUV9TVEFULAorCQkJICAgICAgIHN0YXR1cyAmIH5zb2xvX2Rldi0+aXJxX21hc2spOworCQlzdGF0dXMgJj0gc29sb19kZXYtPmlycV9tYXNrOworCX0KKworCWlmIChzdGF0dXMgJiBTT0xPX0lSUV9QQ0lfRVJSKSB7CisJCXUzMiBlcnIgPSBzb2xvX3JlZ19yZWFkKHNvbG9fZGV2LCBTT0xPX1BDSV9FUlIpOworCQlzb2xvX3AybV9lcnJvcl9pc3Ioc29sb19kZXYsIGVycik7CisJCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0lSUV9TVEFULCBTT0xPX0lSUV9QQ0lfRVJSKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgU09MT19OUl9QMk07IGkrKykKKwkJaWYgKHN0YXR1cyAmIFNPTE9fSVJRX1AyTShpKSkKKwkJCXNvbG9fcDJtX2lzcihzb2xvX2RldiwgaSk7CisKKwlpZiAoc3RhdHVzICYgU09MT19JUlFfSUlDKQorCQlzb2xvX2kyY19pc3Ioc29sb19kZXYpOworCisJaWYgKHN0YXR1cyAmIFNPTE9fSVJRX1ZJREVPX0lOKQorCQlzb2xvX3ZpZGVvX2luX2lzcihzb2xvX2Rldik7CisKKwkvKiBDYWxsIHRoaXMgZmlyc3Qgc28gZW5jIGdldHMgZGV0ZWN0ZWQgZmxhZyBzZXQgKi8KKwlpZiAoc3RhdHVzICYgU09MT19JUlFfTU9USU9OKQorCQlzb2xvX21vdGlvbl9pc3Ioc29sb19kZXYpOworCisJaWYgKHN0YXR1cyAmIFNPTE9fSVJRX0VOQ09ERVIpCisJCXNvbG9fZW5jX3Y0bDJfaXNyKHNvbG9fZGV2KTsKKworCWlmIChzdGF0dXMgJiBTT0xPX0lSUV9HNzIzKQorCQlzb2xvX2c3MjNfaXNyKHNvbG9fZGV2KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9zb2xvX2RldihzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKworCWlmICghc29sb19kZXYpCisJCXJldHVybjsKKworCXBkZXYgPSBzb2xvX2Rldi0+cGRldjsKKworCS8qIElmIHdlIG5ldmVyIGluaXRpYWxpemVkIHRoZSBQQ0kgZGV2aWNlLCB0aGVuIG5vdGhpbmcgZWxzZQorCSAqIGJlbG93IGhlcmUgbmVlZHMgY2xlYW51cCAqLworCWlmICghcGRldikgeworCQlrZnJlZShzb2xvX2Rldik7CisJCXJldHVybjsKKwl9CisKKwkvKiBCcmluZyBkb3duIHRoZSBzdWItZGV2aWNlcyBmaXJzdCAqLworCXNvbG9fZzcyM19leGl0KHNvbG9fZGV2KTsKKwlzb2xvX2VuY192NGwyX2V4aXQoc29sb19kZXYpOworCXNvbG9fZW5jX2V4aXQoc29sb19kZXYpOworCXNvbG9fdjRsMl9leGl0KHNvbG9fZGV2KTsKKwlzb2xvX2Rpc3BfZXhpdChzb2xvX2Rldik7CisJc29sb19ncGlvX2V4aXQoc29sb19kZXYpOworCXNvbG9fcDJtX2V4aXQoc29sb19kZXYpOworCXNvbG9faTJjX2V4aXQoc29sb19kZXYpOworCisJLyogTm93IGNsZWFudXAgdGhlIFBDSSBkZXZpY2UgKi8KKwlpZiAoc29sb19kZXYtPnJlZ19iYXNlKSB7CisJCXNvbG82MDEwX2lycV9vZmYoc29sb19kZXYsIH4wKTsKKwkJcGNpX2lvdW5tYXAocGRldiwgc29sb19kZXYtPnJlZ19iYXNlKTsKKwkJZnJlZV9pcnEocGRldi0+aXJxLCBzb2xvX2Rldik7CisJfQorCisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJa2ZyZWUoc29sb19kZXYpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzb2xvNjAxMF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldjsKKwlpbnQgcmV0OworCWludCBzZHJhbTsKKwl1OCBjaGlwX2lkOworCisJaWYgKChzb2xvX2RldiA9IGt6YWxsb2Moc2l6ZW9mKCpzb2xvX2RldiksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNvbG9fZGV2LT5wZGV2ID0gcGRldjsKKwlzcGluX2xvY2tfaW5pdCgmc29sb19kZXYtPnJlZ19pb19sb2NrKTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgc29sb19kZXYpOworCisJaWYgKChyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KSkpCisJCWdvdG8gZmFpbF9wcm9iZTsKKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJaWYgKChyZXQgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIFNPTE82MDEwX05BTUUpKSkKKwkJZ290byBmYWlsX3Byb2JlOworCisJaWYgKChzb2xvX2Rldi0+cmVnX2Jhc2UgPSBwY2lfaW9yZW1hcF9iYXIocGRldiwgMCkpID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsX3Byb2JlOworCX0KKworCWNoaXBfaWQgPSBzb2xvX3JlZ19yZWFkKHNvbG9fZGV2LCBTT0xPX0NISVBfT1BUSU9OKSAmCisJCQkJCVNPTE9fQ0hJUF9JRF9NQVNLOworCXN3aXRjaCAoY2hpcF9pZCkgeworCQljYXNlIDc6CisJCQlzb2xvX2Rldi0+bnJfY2hhbnMgPSAxNjsKKwkJCXNvbG9fZGV2LT5ucl9leHQgPSA1OworCQkJYnJlYWs7CisJCWNhc2UgNjoKKwkJCXNvbG9fZGV2LT5ucl9jaGFucyA9IDg7CisJCQlzb2xvX2Rldi0+bnJfZXh0ID0gMjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIkludmFsaWQgY2hpcF9pZCAweCUwMngsICIKKwkJCQkgImRlZmF1bHRpbmcgdG8gNCBjaGFubmVsc1xuIiwKKwkJCQkgY2hpcF9pZCk7CisJCWNhc2UgNToKKwkJCXNvbG9fZGV2LT5ucl9jaGFucyA9IDQ7CisJCQlzb2xvX2Rldi0+bnJfZXh0ID0gMTsKKwl9CisKKwkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIHRvIHN0YXJ0ICovCisJc29sbzYwMTBfaXJxX29mZihzb2xvX2RldiwgfjApOworCisJLyogSW5pdGlhbCBnbG9iYWwgc2V0dGluZ3MgKi8KKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19TWVNfQ0ZHLCBTT0xPX1NZU19DRkdfU0RSQU02NEJJVCB8CisJCSAgICAgICBTT0xPX1NZU19DRkdfSU5QVVRESVYoMjUpIHwKKwkJICAgICAgIFNPTE9fU1lTX0NGR19GRUVEQkFDS0RJVigoU09MT19DTE9DS19NSFogKiAyKSAtIDIpIHwKKwkJICAgICAgIFNPTE9fU1lTX0NGR19PVVRESVYoMykpOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1RJTUVSX0NMT0NLX05VTSwgU09MT19DTE9DS19NSFogLSAxKTsKKworCS8qIFBMTCBsb2NraW5nIHRpbWUgb2YgMW1zICovCisJbWRlbGF5KDEpOworCisJcmV0ID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBzb2xvNjAxMF9pc3IsIElSUUZfU0hBUkVELCBTT0xPNjAxMF9OQU1FLAorCQkJICBzb2xvX2Rldik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsX3Byb2JlOworCisJLyogSGFuZGxlIHRoaXMgZnJvbSB0aGUgc3RhcnQgKi8KKwlzb2xvNjAxMF9pcnFfb24oc29sb19kZXYsIFNPTE9fSVJRX1BDSV9FUlIpOworCisJaWYgKChyZXQgPSBzb2xvX2kyY19pbml0KHNvbG9fZGV2KSkpCisJCWdvdG8gZmFpbF9wcm9iZTsKKworCS8qIFNldHVwIHRoZSBETUEgZW5naW5lICovCisJc2RyYW0gPSAoc29sb19kZXYtPm5yX2NoYW5zID49IDgpID8gMiA6IDE7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fRE1BX0NUUkwsCisJCSAgICAgICBTT0xPX0RNQV9DVFJMX1JFRlJFU0hfQ1lDTEUoMSkgfAorCQkgICAgICAgU09MT19ETUFfQ1RSTF9TRFJBTV9TSVpFKHNkcmFtKSB8CisJCSAgICAgICBTT0xPX0RNQV9DVFJMX1NEUkFNX0NMS19JTlZFUlQgfAorCQkgICAgICAgU09MT19ETUFfQ1RSTF9SRUFEX0NMS19TRUxFQ1QgfAorCQkgICAgICAgU09MT19ETUFfQ1RSTF9MQVRFTkNZKDEpKTsKKworCWlmICgocmV0ID0gc29sb19wMm1faW5pdChzb2xvX2RldikpKQorCQlnb3RvIGZhaWxfcHJvYmU7CisKKwlpZiAoKHJldCA9IHNvbG9fZGlzcF9pbml0KHNvbG9fZGV2KSkpCisJCWdvdG8gZmFpbF9wcm9iZTsKKworCWlmICgocmV0ID0gc29sb19ncGlvX2luaXQoc29sb19kZXYpKSkKKwkJZ290byBmYWlsX3Byb2JlOworCisJaWYgKChyZXQgPSBzb2xvX3R3MjhfaW5pdChzb2xvX2RldikpKQorCQlnb3RvIGZhaWxfcHJvYmU7CisKKwlpZiAoKHJldCA9IHNvbG9fdjRsMl9pbml0KHNvbG9fZGV2KSkpCisJCWdvdG8gZmFpbF9wcm9iZTsKKworCWlmICgocmV0ID0gc29sb19lbmNfaW5pdChzb2xvX2RldikpKQorCQlnb3RvIGZhaWxfcHJvYmU7CisKKwlpZiAoKHJldCA9IHNvbG9fZW5jX3Y0bDJfaW5pdChzb2xvX2RldikpKQorCQlnb3RvIGZhaWxfcHJvYmU7CisKKwlpZiAoKHJldCA9IHNvbG9fZzcyM19pbml0KHNvbG9fZGV2KSkpCisJCWdvdG8gZmFpbF9wcm9iZTsKKworCXJldHVybiAwOworCitmYWlsX3Byb2JlOgorCWZyZWVfc29sb19kZXYoc29sb19kZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzb2xvNjAxMF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJZnJlZV9zb2xvX2Rldihzb2xvX2Rldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzb2xvNjAxMF9pZF90YWJsZVtdID0geworCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU09GVExPR0lDLCBQQ0lfREVWSUNFX0lEX1NPTE82MDEwKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CTFVFQ0hFUlJZLCBQQ0lfREVWSUNFX0lEX05FVVNPTE9fNCl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQkxVRUNIRVJSWSwgUENJX0RFVklDRV9JRF9ORVVTT0xPXzkpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JMVUVDSEVSUlksIFBDSV9ERVZJQ0VfSURfTkVVU09MT18xNil9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQkxVRUNIRVJSWSwgUENJX0RFVklDRV9JRF9DT01NU09MT180KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CTFVFQ0hFUlJZLCBQQ0lfREVWSUNFX0lEX0NPTU1TT0xPXzkpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JMVUVDSEVSUlksIFBDSV9ERVZJQ0VfSURfQ09NTVNPTE9fMTYpfSwKKwl7MCx9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc29sbzYwMTBfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc29sbzYwMTBfcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9IFNPTE82MDEwX05BTUUsCisJLmlkX3RhYmxlID0gc29sbzYwMTBfaWRfdGFibGUsCisJLnByb2JlID0gc29sbzYwMTBfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBzb2xvNjAxMF9wY2lfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc29sbzYwMTBfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc29sbzYwMTBfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzb2xvNjAxMF9tb2R1bGVfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmc29sbzYwMTBfcGNpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNvbG82MDEwX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KHNvbG82MDEwX21vZHVsZV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC1kaXNwLmMgYi9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtZGlzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NWYwMjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtZGlzcC5jCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEJsdWVjaGVycnksIExMQyB3d3cuYmx1ZWNoZXJyeWR2ci5jb20KKyAqIENvcHlyaWdodCAoQykgMjAxMCBCZW4gQ29sbGlucyA8YmNvbGxpbnNAYmx1ZWNoZXJyeS5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorCisjaW5jbHVkZSAic29sbzYwMTAuaCIKKworI2RlZmluZSBTT0xPX1ZDTEtfREVMQVkJCQkzCisjZGVmaW5lIFNPTE9fUFJPR1JFU1NJVkVfVlNJWkUJCTEwMjQKKworI2RlZmluZSBTT0xPX01PVF9USFJFU0hfVwkJNjQKKyNkZWZpbmUgU09MT19NT1RfVEhSRVNIX0gJCTY0CisjZGVmaW5lIFNPTE9fTU9UX1RIUkVTSF9TSVpFCQk4MTkyCisjZGVmaW5lIFNPTE9fTU9UX1RIUkVTSF9SRUFMCQkoU09MT19NT1RfVEhSRVNIX1cgKiBTT0xPX01PVF9USFJFU0hfSCkKKyNkZWZpbmUgU09MT19NT1RfRkxBR19TSVpFCQk1MTIKKyNkZWZpbmUgU09MT19NT1RfRkxBR19BUkVBCQkoU09MT19NT1RfRkxBR19TSVpFICogMzIpCisKK3N0YXRpYyB1bnNpZ25lZCB2aWRlb190eXBlOworbW9kdWxlX3BhcmFtKHZpZGVvX3R5cGUsIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyh2aWRlb190eXBlLCAidmlkZW9fdHlwZSAoMCA9IE5UU0MvRGVmYXVsdCwgMSA9IFBBTCkiKTsKKworc3RhdGljIHZvaWQgc29sb192aW5fY29uZmlnKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCXNvbG9fZGV2LT52aW5faHN0YXJ0ID0gODsKKwlzb2xvX2Rldi0+dmluX3ZzdGFydCA9IDI7CisKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19TWVNfVkNMSywKKwkJICAgICAgIFNPTE9fVkNMS19TRUxFQ1QoMikgfAorCQkgICAgICAgU09MT19WQ0xLX1ZJTjE0MTVfREVMQVkoU09MT19WQ0xLX0RFTEFZKSB8CisJCSAgICAgICBTT0xPX1ZDTEtfVklOMTIxM19ERUxBWShTT0xPX1ZDTEtfREVMQVkpIHwKKwkJICAgICAgIFNPTE9fVkNMS19WSU4xMDExX0RFTEFZKFNPTE9fVkNMS19ERUxBWSkgfAorCQkgICAgICAgU09MT19WQ0xLX1ZJTjA4MDlfREVMQVkoU09MT19WQ0xLX0RFTEFZKSB8CisJCSAgICAgICBTT0xPX1ZDTEtfVklOMDYwN19ERUxBWShTT0xPX1ZDTEtfREVMQVkpIHwKKwkJICAgICAgIFNPTE9fVkNMS19WSU4wNDA1X0RFTEFZKFNPTE9fVkNMS19ERUxBWSkgfAorCQkgICAgICAgU09MT19WQ0xLX1ZJTjAyMDNfREVMQVkoU09MT19WQ0xLX0RFTEFZKSB8CisJCSAgICAgICBTT0xPX1ZDTEtfVklOMDAwMV9ERUxBWShTT0xPX1ZDTEtfREVMQVkpKTsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZJX0FDVF9JX1AsCisJCSAgICAgICBTT0xPX1ZJX0hfU1RBUlQoc29sb19kZXYtPnZpbl9oc3RhcnQpIHwKKwkJICAgICAgIFNPTE9fVklfVl9TVEFSVChzb2xvX2Rldi0+dmluX3ZzdGFydCkgfAorCQkgICAgICAgU09MT19WSV9WX1NUT1Aoc29sb19kZXYtPnZpbl92c3RhcnQgKworCQkJCSAgICAgIHNvbG9fZGV2LT52aWRlb192c2l6ZSkpOworCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVklfQUNUX0lfUywKKwkJICAgICAgIFNPTE9fVklfSF9TVEFSVChzb2xvX2Rldi0+dm91dF9oc3RhcnQpIHwKKwkJICAgICAgIFNPTE9fVklfVl9TVEFSVChzb2xvX2Rldi0+dm91dF92c3RhcnQpIHwKKwkJICAgICAgIFNPTE9fVklfVl9TVE9QKHNvbG9fZGV2LT52b3V0X3ZzdGFydCArCisJCQkJICAgICAgc29sb19kZXYtPnZpZGVvX3ZzaXplKSk7CisKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WSV9BQ1RfUCwKKwkJICAgICAgIFNPTE9fVklfSF9TVEFSVCgwKSB8CisJCSAgICAgICBTT0xPX1ZJX1ZfU1RBUlQoMSkgfAorCQkgICAgICAgU09MT19WSV9WX1NUT1AoU09MT19QUk9HUkVTU0lWRV9WU0laRSkpOworCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVklfQ0hfRk9STUFULAorCQkgICAgICAgU09MT19WSV9GRF9TRUxfTUFTSygwKSB8IFNPTE9fVklfUFJPR19NQVNLKDApKTsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZJX0ZNVF9DRkcsIDApOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZJX1BBR0VfU1csIDIpOworCisJaWYgKHNvbG9fZGV2LT52aWRlb190eXBlID09IFNPTE9fVk9fRk1UX1RZUEVfTlRTQykgeworCQlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WSV9QQl9DT05GSUcsCisJCQkgICAgICAgU09MT19WSV9QQl9VU0VSX01PREUpOworCQlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WSV9QQl9SQU5HRV9IViwKKwkJCSAgICAgICBTT0xPX1ZJX1BCX0hTSVpFKDg1OCkgfCBTT0xPX1ZJX1BCX1ZTSVpFKDI0NikpOworCQlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WSV9QQl9BQ1RfViwKKwkJCSAgICAgICBTT0xPX1ZJX1BCX1ZTVEFSVCg0KSB8CisJCQkgICAgICAgU09MT19WSV9QQl9WU1RPUCg0ICsgMjQwKSk7CisJfSBlbHNlIHsKKwkJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVklfUEJfQ09ORklHLAorCQkJICAgICAgIFNPTE9fVklfUEJfVVNFUl9NT0RFIHwgU09MT19WSV9QQl9QQUwpOworCQlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WSV9QQl9SQU5HRV9IViwKKwkJCSAgICAgICBTT0xPX1ZJX1BCX0hTSVpFKDg2NCkgfCBTT0xPX1ZJX1BCX1ZTSVpFKDI5NCkpOworCQlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WSV9QQl9BQ1RfViwKKwkJCSAgICAgICBTT0xPX1ZJX1BCX1ZTVEFSVCg0KSB8CisJCQkgICAgICAgU09MT19WSV9QQl9WU1RPUCg0ICsgMjg4KSk7CisJfQorCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZJX1BCX0FDVF9ILCBTT0xPX1ZJX1BCX0hTVEFSVCgxNikgfAorCQkgICAgICAgU09MT19WSV9QQl9IU1RPUCgxNiArIDcyMCkpOworfQorCitzdGF0aWMgdm9pZCBzb2xvX2Rpc3BfY29uZmlnKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCXNvbG9fZGV2LT52b3V0X2hzdGFydCA9IDY7CisJc29sb19kZXYtPnZvdXRfdnN0YXJ0ID0gODsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZPX0JPUkRFUl9MSU5FX0NPTE9SLAorCQkgICAgICAgKDB4YTAgPDwgMjQpIHwgKDB4ODggPDwgMTYpIHwgKDB4YTAgPDwgOCkgfCAweDg4KTsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WT19CT1JERVJfRklMTF9DT0xPUiwKKwkJICAgICAgICgweDEwIDw8IDI0KSB8ICgweDhmIDw8IDE2KSB8ICgweDEwIDw8IDgpIHwgMHg4Zik7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVk9fQktHX0NPTE9SLAorCQkgICAgICAgKDE2IDw8IDI0KSB8ICgxMjggPDwgMTYpIHwgKDE2IDw8IDgpIHwgMTI4KTsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZPX0ZNVF9FTkMsCisJCSAgICAgICBzb2xvX2Rldi0+dmlkZW9fdHlwZSB8CisJCSAgICAgICBTT0xPX1ZPX1VTRVJfQ09MT1JfU0VUX05BViB8CisJCSAgICAgICBTT0xPX1ZPX05BX0NPTE9SX1koMCkgfAorCQkgICAgICAgU09MT19WT19OQV9DT0xPUl9DQigwKSB8CisJCSAgICAgICBTT0xPX1ZPX05BX0NPTE9SX0NSKDApKTsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZPX0FDVF9ILAorCQkgICAgICAgU09MT19WT19IX1NUQVJUKHNvbG9fZGV2LT52b3V0X2hzdGFydCkgfAorCQkgICAgICAgU09MT19WT19IX1NUT1Aoc29sb19kZXYtPnZvdXRfaHN0YXJ0ICsKKwkJCQkgICAgICBzb2xvX2Rldi0+dmlkZW9faHNpemUpKTsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZPX0FDVF9WLAorCQkgICAgICAgU09MT19WT19WX1NUQVJUKHNvbG9fZGV2LT52b3V0X3ZzdGFydCkgfAorCQkgICAgICAgU09MT19WT19WX1NUT1Aoc29sb19kZXYtPnZvdXRfdnN0YXJ0ICsKKwkJCQkgICAgICBzb2xvX2Rldi0+dmlkZW9fdnNpemUpKTsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZPX1JBTkdFX0hWLAorCQkgICAgICAgU09MT19WT19IX0xFTihzb2xvX2Rldi0+dmlkZW9faHNpemUpIHwKKwkJICAgICAgIFNPTE9fVk9fVl9MRU4oc29sb19kZXYtPnZpZGVvX3ZzaXplKSk7CisKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WSV9XSU5fU1csIDUpOworCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVk9fRElTUF9DVFJMLCBTT0xPX1ZPX0RJU1BfT04gfAorCQkgICAgICAgU09MT19WT19ESVNQX0VSQVNFX0NPVU5UKDgpIHwKKwkJICAgICAgIFNPTE9fVk9fRElTUF9CQVNFKFNPTE9fRElTUF9FWFRfQUREUihzb2xvX2RldikpKTsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZPX0RJU1BfRVJBU0UsIFNPTE9fVk9fRElTUF9FUkFTRV9PTik7CisKKwkvKiBFbmFibGUgY2hhbm5lbHMgd2Ugc3VwcG9ydCAqLworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZJX0NIX0VOQSwgKDEgPDwgc29sb19kZXYtPm5yX2NoYW5zKSAtIDEpOworCisJLyogRGlzYWJsZSB0aGUgd2F0Y2hkb2cgKi8KKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19XQVRDSERPRywgMCk7Cit9CisKK3N0YXRpYyBpbnQgc29sb19kbWFfdmluX3JlZ2lvbihzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgdTMyIG9mZiwKKwkJCSAgICAgICB1MTYgdmFsLCBpbnQgcmVnX3NpemUpCit7CisJdTE2IGJ1Zls2NF07CisJaW50IGk7CisJaW50IHJldCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGJ1ZikgPj4gMTsgaSsrKQorCQlidWZbaV0gPSB2YWw7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVnX3NpemU7IGkgKz0gc2l6ZW9mKGJ1ZikpCisJCXJldCB8PSBzb2xvX3AybV9kbWEoc29sb19kZXYsIFNPTE9fUDJNX0RNQV9JRF9WSU4sIDEsIGJ1ZiwKKwkJCQkgICAgU09MT19NT1RJT05fRVhUX0FERFIoc29sb19kZXYpICsgb2ZmICsgaSwKKwkJCQkgICAgc2l6ZW9mKGJ1ZikpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBzb2xvX3NldF9tb3Rpb25fdGhyZXNob2xkKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCB1OCBjaCwgdTE2IHZhbCkKK3sKKwlpZiAoY2ggPiBzb2xvX2Rldi0+bnJfY2hhbnMpCisJCXJldHVybjsKKworCXNvbG9fZG1hX3Zpbl9yZWdpb24oc29sb19kZXYsIFNPTE9fTU9UX0ZMQUdfQVJFQSArCisJCQkgICAgKGNoICogU09MT19NT1RfVEhSRVNIX1NJWkUgKiAyKSwKKwkJCSAgICB2YWwsIFNPTE9fTU9UX1RIUkVTSF9SRUFMKTsKK30KKworLyogRmlyc3QgOGsgaXMgbW90aW9uIGZsYWcgKDUxMiBieXRlcyAqIDE2KS4gRm9sbG93aW5nIHRoYXQgaXMgYW4gOGsrOGsKKyAqIHRocmVzaG9sZCBhbmQgd29ya2luZyB0YWJsZSBmb3IgZWFjaCBjaGFubmVsLiBBdGxlYXN0IHRoYXQncyB3aGF0IHRoZQorICogc3BlYyBzYXlzLiBIb3dldmVyLCB0aGlzIGNvZGUgKHRha2UgZnJvbSByZGspIGhhcyBzb21lIG15c3RlcnkgOGsKKyAqIGJsb2NrIHJpZ2h0IGFmdGVyIHRoZSBmbGFnIGFyZWEsIGJlZm9yZSB0aGUgZmlyc3QgdGhyZXNoIHRhYmxlLiAqLworc3RhdGljIHZvaWQgc29sb19tb3Rpb25fY29uZmlnKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNvbG9fZGV2LT5ucl9jaGFuczsgaSsrKSB7CisJCS8qIENsZWFyIG1vdGlvbiBmbGFnIGFyZWEgKi8KKwkJc29sb19kbWFfdmluX3JlZ2lvbihzb2xvX2RldiwgaSAqIFNPTE9fTU9UX0ZMQUdfU0laRSwgMHgwMDAwLAorCQkJCSAgICBTT0xPX01PVF9GTEFHX1NJWkUpOworCisJCS8qIENsZWFyIHdvcmtpbmcgY2FjaGUgdGFibGUgKi8KKwkJc29sb19kbWFfdmluX3JlZ2lvbihzb2xvX2RldiwgU09MT19NT1RfRkxBR19BUkVBICsKKwkJCQkgICAgU09MT19NT1RfVEhSRVNIX1NJWkUgKworCQkJCSAgICAoaSAqIFNPTE9fTU9UX1RIUkVTSF9TSVpFICogMiksCisJCQkJICAgIDB4MDAwMCwgU09MT19NT1RfVEhSRVNIX1JFQUwpOworCisJCS8qIFNldCBkZWZhdWx0IHRocmVzaG9sZCB0YWJsZSAqLworCQlzb2xvX3NldF9tb3Rpb25fdGhyZXNob2xkKHNvbG9fZGV2LCBpLCBTT0xPX0RFRl9NT1RfVEhSRVNIKTsKKwl9CisKKwkvKiBEZWZhdWx0IG1vdGlvbiBzZXR0aW5ncyAqLworICAgICAgICBzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WSV9NT1RfQURSLCBTT0xPX1ZJX01PVElPTl9FTigwKSB8CisJCSAgICAgICAoU09MT19NT1RJT05fRVhUX0FERFIoc29sb19kZXYpID4+IDE2KSk7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVklfTU9UX0NUUkwsCisJCSAgICAgICBTT0xPX1ZJX01PVElPTl9GUkFNRV9DT1VOVCgzKSB8CisJCSAgICAgICBTT0xPX1ZJX01PVElPTl9TQU1QTEVfTEVOR1RIKHNvbG9fZGV2LT52aWRlb19oc2l6ZSAvIDE2KQorCQkgICAgICAgfCAvL1NPTE9fVklfTU9USU9OX0lOVFJfU1RBUlRfU1RPUCB8CisJCSAgICAgICBTT0xPX1ZJX01PVElPTl9TQU1QTEVfQ09VTlQoMTApKTsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZJX01PVElPTl9CT1JERVIsIDApOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZJX01PVElPTl9CQVIsIDApOworfQorCitpbnQgc29sb19kaXNwX2luaXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJaW50IGk7CisKKwlzb2xvX2Rldi0+dmlkZW9faHNpemUgPSA3MDQ7CisJaWYgKHZpZGVvX3R5cGUgPT0gMCkgeworCQlzb2xvX2Rldi0+dmlkZW9fdHlwZSA9IFNPTE9fVk9fRk1UX1RZUEVfTlRTQzsKKwkJc29sb19kZXYtPnZpZGVvX3ZzaXplID0gMjQwOworCQlzb2xvX2Rldi0+ZnBzID0gMzA7CisJfSBlbHNlIHsKKwkJc29sb19kZXYtPnZpZGVvX3R5cGUgPSBTT0xPX1ZPX0ZNVF9UWVBFX1BBTDsKKwkJc29sb19kZXYtPnZpZGVvX3ZzaXplID0gMjg4OworCQlzb2xvX2Rldi0+ZnBzID0gMjU7CisJfQorCisJc29sb192aW5fY29uZmlnKHNvbG9fZGV2KTsKKwlzb2xvX21vdGlvbl9jb25maWcoc29sb19kZXYpOworCXNvbG9fZGlzcF9jb25maWcoc29sb19kZXYpOworCisJZm9yIChpID0gMDsgaSA8IHNvbG9fZGV2LT5ucl9jaGFuczsgaSsrKQorCQlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WSV9XSU5fT04oaSksIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc29sb19kaXNwX2V4aXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJaW50IGk7CisKKwlzb2xvNjAxMF9pcnFfb2ZmKHNvbG9fZGV2LCBTT0xPX0lSUV9NT1RJT04pOworCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVk9fRElTUF9DVFJMLCAwKTsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WT19aT09NX0NUUkwsIDApOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZPX0ZSRUVaRV9DVFJMLCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBzb2xvX2Rldi0+bnJfY2hhbnM7IGkrKykgeworCQlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WSV9XSU5fQ1RSTDAoaSksIDApOworCQlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WSV9XSU5fQ1RSTDEoaSksIDApOworCQlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WSV9XSU5fT04oaSksIDApOworCX0KKworCS8qIFNldCBkZWZhdWx0IGJvcmRlciAqLworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZPX0JPUkRFUl9YKGkpLCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZPX0JPUkRFUl9ZKGkpLCAwKTsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZPX0JPUkRFUl9MSU5FX01BU0ssIDApOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZPX0JPUkRFUl9GSUxMX01BU0ssIDApOworCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVk9fUkVDVEFOR0xFX0NUUkwoMCksIDApOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZPX1JFQ1RBTkdMRV9TVEFSVCgwKSwgMCk7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVk9fUkVDVEFOR0xFX1NUT1AoMCksIDApOworCQorCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZPX1JFQ1RBTkdMRV9DVFJMKDEpLCAwKTsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WT19SRUNUQU5HTEVfU1RBUlQoMSksIDApOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZPX1JFQ1RBTkdMRV9TVE9QKDEpLCAwKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC1lbmMuYyBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC1lbmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmNmMGE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLWVuYy5jCkBAIC0wLDAgKzEsMjI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEJsdWVjaGVycnksIExMQyB3d3cuYmx1ZWNoZXJyeWR2ci5jb20KKyAqIENvcHlyaWdodCAoQykgMjAxMCBCZW4gQ29sbGlucyA8YmNvbGxpbnNAYmx1ZWNoZXJyeS5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlICJzb2xvNjAxMC5oIgorI2luY2x1ZGUgInNvbG82MDEwLW9zZC1mb250LmgiCisKKyNkZWZpbmUgQ0FQVFVSRV9NQVhfQkFORFdJRFRICQkzMgkvLyBEMSA0Y2hhbm5lbCAoRDEgPT0gNCkKKyNkZWZpbmUgT1NHX0JVRkZFUl9TSVpFCQkJMTAyNAorCisjZGVmaW5lIFZJX1BST0dfSFNJWkUJCQkoMTI4MCAtIDE2KQorI2RlZmluZSBWSV9QUk9HX1ZTSVpFCQkJKDEwMjQgLSAxNikKKworc3RhdGljIHZvaWQgc29sb19jYXB0dXJlX2NvbmZpZyhzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldikKK3sKKwlpbnQgaSwgajsKKwl1bnNpZ25lZCBsb25nIGhlaWdodDsKKwl1bnNpZ25lZCBsb25nIHdpZHRoOworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0NBUF9CQVNFLAorCQkgICAgICAgU09MT19DQVBfTUFYX1BBR0UoU09MT19DQVBfRVhUX01BWF9QQUdFICoKKwkJCQkJIHNvbG9fZGV2LT5ucl9jaGFucykgfAorCQkgICAgICAgU09MT19DQVBfQkFTRV9BRERSKFNPTE9fQ0FQX0VYVF9BRERSKHNvbG9fZGV2KSA+PiAxNikpOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0NBUF9CVFcsCisJCSAgICAgICAoMSA8PCAxNykgfCBTT0xPX0NBUF9QUk9HX0JBTkRXSURUSCgyKSB8CisJCSAgICAgICBTT0xPX0NBUF9NQVhfQkFORFdJRFRIKENBUFRVUkVfTUFYX0JBTkRXSURUSCkpOworCisJLyogU2V0IHNjYWxlIDEsIDkgZGltZW5zaW9uICovCisJd2lkdGggPSBzb2xvX2Rldi0+dmlkZW9faHNpemU7CisJaGVpZ2h0ID0gc29sb19kZXYtPnZpZGVvX3ZzaXplOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0RJTV9TQ0FMRTEsCisJCSAgICAgICBTT0xPX0RJTV9IX01CX05VTSh3aWR0aCAvIDE2KSB8CisJCSAgICAgICBTT0xPX0RJTV9WX01CX05VTV9GUkFNRShoZWlnaHQgLyA4KSB8CisJCSAgICAgICBTT0xPX0RJTV9WX01CX05VTV9GSUVMRChoZWlnaHQgLyAxNikpOworCisJLyogU2V0IHNjYWxlIDIsIDEwIGRpbWVuc2lvbiAqLworCXdpZHRoID0gc29sb19kZXYtPnZpZGVvX2hzaXplIC8gMjsKKwloZWlnaHQgPSBzb2xvX2Rldi0+dmlkZW9fdnNpemU7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fRElNX1NDQUxFMiwKKwkJICAgICAgIFNPTE9fRElNX0hfTUJfTlVNKHdpZHRoIC8gMTYpIHwKKwkJICAgICAgIFNPTE9fRElNX1ZfTUJfTlVNX0ZSQU1FKGhlaWdodCAvIDgpIHwKKwkJICAgICAgIFNPTE9fRElNX1ZfTUJfTlVNX0ZJRUxEKGhlaWdodCAvIDE2KSk7CisKKwkvKiBTZXQgc2NhbGUgMywgMTEgZGltZW5zaW9uICovCisJd2lkdGggPSBzb2xvX2Rldi0+dmlkZW9faHNpemUgLyAyOworCWhlaWdodCA9IHNvbG9fZGV2LT52aWRlb192c2l6ZSAvIDI7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fRElNX1NDQUxFMywKKwkJICAgICAgIFNPTE9fRElNX0hfTUJfTlVNKHdpZHRoIC8gMTYpIHwKKwkJICAgICAgIFNPTE9fRElNX1ZfTUJfTlVNX0ZSQU1FKGhlaWdodCAvIDgpIHwKKwkJICAgICAgIFNPTE9fRElNX1ZfTUJfTlVNX0ZJRUxEKGhlaWdodCAvIDE2KSk7CisKKwkvKiBTZXQgc2NhbGUgNCwgMTIgZGltZW5zaW9uICovCisJd2lkdGggPSBzb2xvX2Rldi0+dmlkZW9faHNpemUgLyAzOworCWhlaWdodCA9IHNvbG9fZGV2LT52aWRlb192c2l6ZSAvIDM7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fRElNX1NDQUxFNCwKKwkJICAgICAgIFNPTE9fRElNX0hfTUJfTlVNKHdpZHRoIC8gMTYpIHwKKwkJICAgICAgIFNPTE9fRElNX1ZfTUJfTlVNX0ZSQU1FKGhlaWdodCAvIDgpIHwKKwkJICAgICAgIFNPTE9fRElNX1ZfTUJfTlVNX0ZJRUxEKGhlaWdodCAvIDE2KSk7CisKKwkvKiBTZXQgc2NhbGUgNSwgMTMgZGltZW5zaW9uICovCisJd2lkdGggPSBzb2xvX2Rldi0+dmlkZW9faHNpemUgLyA0OworCWhlaWdodCA9IHNvbG9fZGV2LT52aWRlb192c2l6ZSAvIDI7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fRElNX1NDQUxFNSwKKwkJICAgICAgIFNPTE9fRElNX0hfTUJfTlVNKHdpZHRoIC8gMTYpIHwKKwkJICAgICAgIFNPTE9fRElNX1ZfTUJfTlVNX0ZSQU1FKGhlaWdodCAvIDgpIHwKKwkJICAgICAgIFNPTE9fRElNX1ZfTUJfTlVNX0ZJRUxEKGhlaWdodCAvIDE2KSk7CisKKwkvKiBQcm9ncmVzc2l2ZSAqLworCXdpZHRoID0gVklfUFJPR19IU0laRTsKKwloZWlnaHQgPSBWSV9QUk9HX1ZTSVpFOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0RJTV9QUk9HLAorCQkgICAgICAgU09MT19ESU1fSF9NQl9OVU0od2lkdGggLyAxNikgfAorCQkgICAgICAgU09MT19ESU1fVl9NQl9OVU1fRlJBTUUoaGVpZ2h0IC8gMTYpIHwKKwkJICAgICAgIFNPTE9fRElNX1ZfTUJfTlVNX0ZJRUxEKGhlaWdodCAvIDE2KSk7CisKKwkvKiBDbGVhciBPU0QgKi8KKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WRV9PU0RfQ0gsIDApOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZFX09TRF9CQVNFLAorCQkgICAgICAgU09MT19FT1NEX0VYVF9BRERSKHNvbG9fZGV2KSA+PiAxNik7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVkVfT1NEX0NMUiwKKwkJICAgICAgIDB4RjAgPDwgMTYgfCAweDgwIDw8IDggfCAweDgwKTsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WRV9PU0RfT1BULCAwKTsKKworCS8qIENsZWFyIE9TRyBidWZmZXIgKi8KKwlidWYgPSBremFsbG9jKE9TR19CVUZGRVJfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBzb2xvX2Rldi0+bnJfY2hhbnM7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgU09MT19FT1NEX0VYVF9TSVpFOyBqICs9IE9TR19CVUZGRVJfU0laRSkgeworCQkJc29sb19wMm1fZG1hKHNvbG9fZGV2LCBTT0xPX1AyTV9ETUFfSURfTVA0RSwgMSwgYnVmLAorCQkJCSAgICAgU09MT19FT1NEX0VYVF9BRERSKHNvbG9fZGV2KSArCisJCQkJICAgICAoaSAqIFNPTE9fRU9TRF9FWFRfU0laRSkgKyBqLAorCQkJCSAgICAgT1NHX0JVRkZFUl9TSVpFKTsKKwkJfQorCX0KKwlrZnJlZShidWYpOworfQorCitpbnQgc29sb19vc2RfcHJpbnQoc3RydWN0IHNvbG9fZW5jX2RldiAqc29sb19lbmMpCit7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBzb2xvX2VuYy0+c29sb19kZXY7CisJY2hhciAqc3RyID0gc29sb19lbmMtPm9zZF90ZXh0OworCXU4ICpidWY7CisJdTMyIHJlZyA9IHNvbG9fcmVnX3JlYWQoc29sb19kZXYsIFNPTE9fVkVfT1NEX0NIKTsKKwlpbnQgbGVuID0gc3RybGVuKHN0cik7CisJaW50IGksIGo7CisJaW50IHggPSAxLCB5ID0gMTsKKworCWlmIChsZW4gPT0gMCkgeworCQlyZWcgJj0gfigxIDw8IHNvbG9fZW5jLT5jaCk7CisJCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZFX09TRF9DSCwgcmVnKTsKKwkJcmV0dXJuIDA7CisJfQorCisJYnVmID0ga3phbGxvYyhTT0xPX0VPU0RfRVhUX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgMTY7IGorKykgeworCQkJYnVmWyhqKjIpICsgKGklMikgKyAoKHggKyAoaS8yKSkgKiAzMikgKyAoeSAqIDIwNDgpXSA9CisJCQkJKHNvbG9fb3NkX2ZvbnRbKHN0cltpXSAqIDQpICsgKGogLyA0KV0KKwkJCQkJPj4gKCgzIC0gKGogJSA0KSkgKiA4KSkgJiAweGZmOworCQl9CisJfQorCisJc29sb19wMm1fZG1hKHNvbG9fZGV2LCAwLCAxLCBidWYsIFNPTE9fRU9TRF9FWFRfQUREUihzb2xvX2RldikgKworCQkgICAgIChzb2xvX2VuYy0+Y2ggKiBTT0xPX0VPU0RfRVhUX1NJWkUpLCBTT0xPX0VPU0RfRVhUX1NJWkUpOworICAgICAgICByZWcgfD0gKDEgPDwgc29sb19lbmMtPmNoKTsKKyAgICAgICAgc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVkVfT1NEX0NILCByZWcpOworCisJa2ZyZWUoYnVmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzb2xvX2pwZWdfY29uZmlnKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZFX0pQRUdfUVBfVEJMLAorCQkgICAgICAgKDIgPDwgMjQpIHwgKDIgPDwgMTYpIHwgKDIgPDwgOCkgfCAoMiA8PCAwKSk7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVkVfSlBFR19RUF9DSF9MLCAwKTsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WRV9KUEVHX1FQX0NIX0gsIDApOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZFX0pQRUdfQ0ZHLAorCQkoU09MT19KUEVHX0VYVF9TSVpFKHNvbG9fZGV2KSAmIDB4ZmZmZjAwMDApIHwKKwkJKChTT0xPX0pQRUdfRVhUX0FERFIoc29sb19kZXYpID4+IDE2KSAmIDB4MDAwMGZmZmYpKTsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WRV9KUEVHX0NUUkwsIDB4ZmZmZmZmZmYpOworfQorCitzdGF0aWMgdm9pZCBzb2xvX21wNGVfY29uZmlnKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCWludCBpOworCisJLyogV2UgY2FuIG9ubHkgdXNlIFZFX0lOVFJfQ1RSTCgwKSBpZiB3ZSB3YW50IHRvIHN1cHBvcnQgbWpwZWcgKi8KKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WRV9DRkcwLAorCQkgICAgICAgU09MT19WRV9JTlRSX0NUUkwoMCkgfAorCQkgICAgICAgU09MT19WRV9CTE9DS19TSVpFKFNPTE9fTVA0RV9FWFRfU0laRShzb2xvX2RldikgPj4gMTYpIHwKKwkJICAgICAgIFNPTE9fVkVfQkxPQ0tfQkFTRShTT0xPX01QNEVfRVhUX0FERFIoc29sb19kZXYpID4+IDE2KSk7CisKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WRV9DRkcxLAorCQkgICAgICAgU09MT19WRV9CWVRFX0FMSUdOKDIpIHwKKwkJICAgICAgIFNPTE9fVkVfSU5TRVJUX0lOREVYIHwgU09MT19WRV9NT1RJT05fTU9ERSgwKSk7CisKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WRV9XTVJLX1BPTFksIDApOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZFX1ZNUktfSU5JVF9LRVksIDApOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZFX1dNUktfU1RSTCwgMCk7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVkVfRU5DUllQX1BPTFksIDApOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZFX0VOQ1JZUF9JTklULCAwKTsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZFX0FUVFIsCisJCSAgICAgICBTT0xPX1ZFX0xJVFRMRV9FTkRJQU4gfAorCQkgICAgICAgU09MT19DT01QX0FUVFJfRkNPREUoMSkgfAorCQkgICAgICAgU09MT19DT01QX1RJTUVfSU5DKDApIHwKKwkJICAgICAgIFNPTE9fQ09NUF9USU1FX1dJRFRIKDE1KSB8CisJCSAgICAgICBTT0xPX0RDVF9JTlRFUlZBTCgzNiAvIDQpKTsKKworCWZvciAoaSA9IDA7IGkgPCBzb2xvX2Rldi0+bnJfY2hhbnM7IGkrKykKKwkJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVkVfQ0hfUkVGX0JBU0UoaSksCisJCQkgICAgICAgKFNPTE9fRVJFRl9FWFRfQUREUihzb2xvX2RldikgKworCQkJICAgICAgIChpICogU09MT19FUkVGX0VYVF9TSVpFKSkgPj4gMTYpOworfQorCitpbnQgc29sb19lbmNfaW5pdChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldikKK3sKKwlpbnQgaTsKKworCXNvbG9fY2FwdHVyZV9jb25maWcoc29sb19kZXYpOworCXNvbG9fbXA0ZV9jb25maWcoc29sb19kZXYpOworCXNvbG9fanBlZ19jb25maWcoc29sb19kZXYpOworCisJZm9yIChpID0gMDsgaSA8IHNvbG9fZGV2LT5ucl9jaGFuczsgaSsrKSB7CisJCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0NBUF9DSF9TQ0FMRShpKSwgMCk7CisJCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0NBUF9DSF9DT01QX0VOQV9FKGkpLCAwKTsKKwl9CisKKwlzb2xvNjAxMF9pcnFfb24oc29sb19kZXYsIFNPTE9fSVJRX0VOQ09ERVIpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc29sb19lbmNfZXhpdChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldikKK3sKKwlpbnQgaTsKKworCXNvbG82MDEwX2lycV9vZmYoc29sb19kZXYsIFNPTE9fSVJRX0VOQ09ERVIpOworCisJZm9yIChpID0gMDsgaSA8IHNvbG9fZGV2LT5ucl9jaGFuczsgaSsrKSB7CisJCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0NBUF9DSF9TQ0FMRShpKSwgMCk7CisJCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0NBUF9DSF9DT01QX0VOQV9FKGkpLCAwKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtZzcyMy5jIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLWc3MjMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODI4NDZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLWc3MjMuYwpAQCAtMCwwICsxLDM5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBCbHVlY2hlcnJ5LCBMTEMgd3d3LmJsdWVjaGVycnlkdnIuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQmVuIENvbGxpbnMgPGJjb2xsaW5zQGJsdWVjaGVycnkubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorCisjaW5jbHVkZSAic29sbzYwMTAuaCIKKyNpbmNsdWRlICJzb2xvNjAxMC10dzI4LmgiCisKKyNkZWZpbmUgRzcyM19JTlRSX09SREVSCQkwCisjZGVmaW5lIEc3MjNfRkRNQV9QQUdFUwkJMzIKKyNkZWZpbmUgRzcyM19QRVJJT0RfQllURVMJNDgKKyNkZWZpbmUgRzcyM19QRVJJT0RfQkxPQ0sJMTAyNAorI2RlZmluZSBHNzIzX0ZSQU1FU19QRVJfUEFHRQk0OAorCisvKiBTZXRzIHVwIGNoYW5uZWxzIDE2LTE5IGZvciBkZWNvZGluZyBhbmQgMC0xNSBmb3IgZW5jb2RpbmcgKi8KKyNkZWZpbmUgT1VUTU9ERV9NQVNLCQkweDMwMAorCisjZGVmaW5lIFNBTVBMRVJBVEUJCTgwMDAKKyNkZWZpbmUgQklUUkFURQkJCTI1CisKKy8qIFRoZSBzb2xvIHdyaXRlcyB0byAxayBieXRlIHBhZ2VzLCAzMiBwYWdlcywgaW4gdGhlIGRtYS4gRWFjaCAxayBwYWdlCisgKiBpcyBicm9rZW4gZG93biB0byAyMCAqIDQ4IGJ5dGUgcmVnaW9ucyAob25lIGZvciBlYWNoIGNoYW5uZWwgcG9zc2libGUpCisgKiB3aXRoIHRoZSByZXN0IG9mIHRoZSBwYWdlIGJlaW5nIGR1bW15IGRhdGEuICovCisjZGVmaW5lIE1BWF9CVUZGRVIJCShHNzIzX1BFUklPRF9CWVRFUyAqIFBFUklPRFNfTUFYKQorI2RlZmluZSBJUlFfUEFHRVMJCTQgLy8gMCAtIDQKKyNkZWZpbmUgUEVSSU9EU19NSU4JCSgxIDw8IElSUV9QQUdFUykKKyNkZWZpbmUgUEVSSU9EU19NQVgJCUc3MjNfRkRNQV9QQUdFUworCitzdHJ1Y3Qgc29sb19zbmRfcGNtIHsKKwlpbnQJCQkJb247CisJc3BpbmxvY2tfdAkJCWxvY2s7CisJc3RydWN0IHNvbG82MDEwX2RldgkJKnNvbG9fZGV2OworCXVuc2lnbmVkIGNoYXIJCQlnNzIzX2J1ZltHNzIzX1BFUklPRF9CWVRFU107Cit9OworCitzdGF0aWMgdm9pZCBzb2xvX2c3MjNfY29uZmlnKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCWludCBjbGtfZGl2OworCisJY2xrX2RpdiA9IFNPTE9fQ0xPQ0tfTUhaIC8gKFNBTVBMRVJBVEUgKiAoQklUUkFURSAqIDIpICogMik7CisKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19BVURJT19TQU1QTEUsCisJCSAgICAgICBTT0xPX0FVRElPX0JJVFJBVEUoQklUUkFURSkgfAorCQkgICAgICAgU09MT19BVURJT19DTEtfRElWKGNsa19kaXYpKTsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0FVRElPX0ZETUFfSU5UUiwKKwkJICAgICAgU09MT19BVURJT19GRE1BX0lOVEVSVkFMKElSUV9QQUdFUykgfAorCQkgICAgICBTT0xPX0FVRElPX0lOVFJfT1JERVIoRzcyM19JTlRSX09SREVSKSB8CisJCSAgICAgIFNPTE9fQVVESU9fRkRNQV9CQVNFKFNPTE9fRzcyM19FWFRfQUREUihzb2xvX2RldikgPj4gMTYpKTsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0FVRElPX0NPTlRST0wsCisJCSAgICAgICBTT0xPX0FVRElPX0VOQUJMRSB8IFNPTE9fQVVESU9fSTJTX01PREUgfAorCQkgICAgICAgU09MT19BVURJT19JMlNfTVVMVEkoMykgfCBTT0xPX0FVRElPX01PREUoT1VUTU9ERV9NQVNLKSk7Cit9CisKK3ZvaWQgc29sb19nNzIzX2lzcihzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldikKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9zdHIgKnBzdHIgPQorCQkmc29sb19kZXYtPnNuZF9wY20tPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnNzOworCXN0cnVjdCBzb2xvX3NuZF9wY20gKnNvbG9fcGNtOworCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fSVJRX1NUQVQsIFNPTE9fSVJRX0c3MjMpOworCisJZm9yIChzcyA9IHBzdHItPnN1YnN0cmVhbTsgc3MgIT0gTlVMTDsgc3MgPSBzcy0+bmV4dCkgeworCQlpZiAoc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzcykgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCS8qIFRoaXMgbWVhbnMgb3BlbigpIGhhc24ndCBiZWVuIGNhbGxlZCBvbiB0aGlzIG9uZSAqLworCQlpZiAoc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzcykgPT0gc29sb19kZXYpCisJCQljb250aW51ZTsKKworCQkvKiBIYXZlbid0IHRyaWdnZXJlZCBhIHN0YXJ0IHlldCAqLworCQlzb2xvX3BjbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3MpOworCQlpZiAoIXNvbG9fcGNtLT5vbikKKwkJCWNvbnRpbnVlOworCisJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3MpOworCX0KK30KKworc3RhdGljIGludCBzbmRfc29sb19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzcywKKwkJCSAgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQoreworCXJldHVybiBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3MsIHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7Cit9CisKK3N0YXRpYyBpbnQgc25kX3NvbG9faHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnNzKQoreworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHNzKTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9zb2xvX3BjbV9odyA9IHsKKwkuaW5mbwkJCT0gKFNORFJWX1BDTV9JTkZPX01NQVAgfAorCQkJCSAgIFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJCQkgICBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCQkJICAgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCksCisJLmZvcm1hdHMJCT0gU05EUlZfUENNX0ZNVEJJVF9VOCwKKwkucmF0ZXMJCQk9IFNORFJWX1BDTV9SQVRFXzgwMDAsCisJLnJhdGVfbWluCQk9IDgwMDAsCisJLnJhdGVfbWF4CQk9IDgwMDAsCisJLmNoYW5uZWxzX21pbgkJPSAxLAorCS5jaGFubmVsc19tYXgJCT0gMSwKKwkuYnVmZmVyX2J5dGVzX21heAk9IE1BWF9CVUZGRVIsCisJLnBlcmlvZF9ieXRlc19taW4JPSBHNzIzX1BFUklPRF9CWVRFUywKKwkucGVyaW9kX2J5dGVzX21heAk9IEc3MjNfUEVSSU9EX0JZVEVTLAorCS5wZXJpb2RzX21pbgkJPSBQRVJJT0RTX01JTiwKKwkucGVyaW9kc19tYXgJCT0gUEVSSU9EU19NQVgsCit9OworCitzdGF0aWMgaW50IHNuZF9zb2xvX3BjbV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3MpCit7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHNzKTsKKwlzdHJ1Y3Qgc29sb19zbmRfcGNtICpzb2xvX3BjbTsKKworCXNvbG9fcGNtID0ga3phbGxvYyhzaXplb2YoKnNvbG9fcGNtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNvbG9fcGNtID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2luaXQoJnNvbG9fcGNtLT5sb2NrKTsKKwlzb2xvX3BjbS0+c29sb19kZXYgPSBzb2xvX2RldjsKKwlzcy0+cnVudGltZS0+aHcgPSBzbmRfc29sb19wY21faHc7CisKKwlzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHNzKSA9IHNvbG9fcGNtOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX3NvbG9fcGNtX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3MpCit7CisJc3RydWN0IHNvbG9fc25kX3BjbSAqc29sb19wY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHNzKTsKKworCXNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3MpID0gc29sb19wY20tPnNvbG9fZGV2OworCWtmcmVlKHNvbG9fcGNtKTsKKworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfc29sb19wY21fdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnNzLCBpbnQgY21kKQoreworCXN0cnVjdCBzb2xvX3NuZF9wY20gKnNvbG9fcGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzcyk7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBzb2xvX3BjbS0+c29sb19kZXY7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2soJnNvbG9fcGNtLT5sb2NrKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJaWYgKHNvbG9fcGNtLT5vbiA9PSAwKSB7CisJCQkvKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCB1c2VyLCBzd2l0Y2ggb24gaW50ZXJydXB0cyAqLworCQkJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZzb2xvX2Rldi0+c25kX3VzZXJzKSA9PSAxKQorCQkJCXNvbG82MDEwX2lycV9vbihzb2xvX2RldiwgU09MT19JUlFfRzcyMyk7CisJCQlzb2xvX3BjbS0+b24gPSAxOworCQl9CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJaWYgKHNvbG9fcGNtLT5vbikgeworCQkJLyogSWYgdGhpcyB3YXMgb3VyIGxhc3QgdXNlciwgc3dpdGNoIHRoZW0gb2ZmICovCisJCQlpZiAoYXRvbWljX2RlY19yZXR1cm4oJnNvbG9fZGV2LT5zbmRfdXNlcnMpID09IDApCisJCQkJc29sbzYwMTBfaXJxX29mZihzb2xvX2RldiwgU09MT19JUlFfRzcyMyk7CisJCQlzb2xvX3BjbS0+b24gPSAwOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJc3Bpbl91bmxvY2soJnNvbG9fcGNtLT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc25kX3NvbG9fcGNtX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzcykKK3sKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBzbmRfc29sb19wY21fcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnNzKQoreworCXN0cnVjdCBzb2xvX3NuZF9wY20gKnNvbG9fcGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzcyk7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBzb2xvX3BjbS0+c29sb19kZXY7CisJc25kX3BjbV91ZnJhbWVzX3QgaWR4ID0gc29sb19yZWdfcmVhZChzb2xvX2RldiwgU09MT19BVURJT19TVEEpICYgMHgxZjsKKworCXJldHVybiBpZHggKiBHNzIzX0ZSQU1FU19QRVJfUEFHRTsKK30KKworc3RhdGljIGludCBzbmRfc29sb19wY21fY29weShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnNzLCBpbnQgY2hhbm5lbCwKKwkJCSAgICAgc25kX3BjbV91ZnJhbWVzX3QgcG9zLCB2b2lkIF9fdXNlciAqZHN0LAorCQkJICAgICBzbmRfcGNtX3VmcmFtZXNfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc29sb19zbmRfcGNtICpzb2xvX3BjbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3MpOworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gc29sb19wY20tPnNvbG9fZGV2OworCWludCBlcnIsIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgKGNvdW50IC8gRzcyM19GUkFNRVNfUEVSX1BBR0UpOyBpKyspIHsKKwkJaW50IHBhZ2UgPSAocG9zIC8gRzcyM19GUkFNRVNfUEVSX1BBR0UpICsgaTsKKworCQllcnIgPSBzb2xvX3AybV9kbWEoc29sb19kZXYsIFNPTE9fUDJNX0RNQV9JRF9HNzIzRSwgMCwKKwkJCQkgICBzb2xvX3BjbS0+ZzcyM19idWYsCisJCQkJICAgU09MT19HNzIzX0VYVF9BRERSKHNvbG9fZGV2KSArCisJCQkJICAgKHBhZ2UgKiBHNzIzX1BFUklPRF9CTE9DSykgKworCQkJCSAgIChzcy0+bnVtYmVyICogRzcyM19QRVJJT0RfQllURVMpLAorCQkJCSAgIEc3MjNfUEVSSU9EX0JZVEVTKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJZXJyID0gY29weV90b191c2VyKGRzdCArIChpICogRzcyM19QRVJJT0RfQllURVMpLAorCQkJCSAgIHNvbG9fcGNtLT5nNzIzX2J1ZiwgRzcyM19QRVJJT0RfQllURVMpOworCisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOyAKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfc29sb19wY21fb3BzID0geworCS5vcGVuID0gc25kX3NvbG9fcGNtX29wZW4sCisJLmNsb3NlID0gc25kX3NvbG9fcGNtX2Nsb3NlLAorCS5pb2N0bCA9IHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMgPSBzbmRfc29sb19od19wYXJhbXMsCisJLmh3X2ZyZWUgPSBzbmRfc29sb19od19mcmVlLAorCS5wcmVwYXJlID0gc25kX3NvbG9fcGNtX3ByZXBhcmUsCisJLnRyaWdnZXIgPSBzbmRfc29sb19wY21fdHJpZ2dlciwKKwkucG9pbnRlciA9IHNuZF9zb2xvX3BjbV9wb2ludGVyLAorCS5jb3B5ID0gc25kX3NvbG9fcGNtX2NvcHksCit9OworCitzdGF0aWMgaW50IHNuZF9zb2xvX2NhcHR1cmVfdm9sdW1lX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqaW5mbykKK3sKKwlpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOworCWluZm8tPmNvdW50ID0gMTsKKwlpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJaW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAxNTsKKwlpbmZvLT52YWx1ZS5pbnRlZ2VyLnN0ZXAgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX3NvbG9fY2FwdHVyZV92b2x1bWVfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1OCBjaCA9IHZhbHVlLT5pZC5udW1pZCAtIDE7CisKKwl2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHR3MjhfZ2V0X2F1ZGlvX2dhaW4oc29sb19kZXYsIGNoKTsKKworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfc29sb19jYXB0dXJlX3ZvbHVtZV9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXU4IGNoID0gdmFsdWUtPmlkLm51bWlkIC0gMTsKKyAgICAgICAgdTggb2xkX3ZhbDsKKworICAgICAgICBvbGRfdmFsID0gdHcyOF9nZXRfYXVkaW9fZ2Fpbihzb2xvX2RldiwgY2gpOworCWlmIChvbGRfdmFsID09IHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKQorCQlyZXR1cm4gMDsKKworCXR3Mjhfc2V0X2F1ZGlvX2dhaW4oc29sb19kZXYsIGNoLCB2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7CisKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfc29sb19jYXB0dXJlX3ZvbHVtZSA9IHsKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkubmFtZSA9ICJDYXB0dXJlIFZvbHVtZSIsCisJLmluZm8gPSBzbmRfc29sb19jYXB0dXJlX3ZvbHVtZV9pbmZvLAorCS5nZXQgPSBzbmRfc29sb19jYXB0dXJlX3ZvbHVtZV9nZXQsCisJLnB1dCA9IHNuZF9zb2xvX2NhcHR1cmVfdm9sdW1lX3B1dCwKK307CisKK3N0YXRpYyBpbnQgc29sb19zbmRfcGNtX2luaXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gc29sb19kZXYtPnNuZF9jYXJkOworCXN0cnVjdCBzbmRfcGNtICpwY207CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzczsKKwlpbnQgcmV0OworCWludCBpOworCisJcmV0ID0gc25kX3BjbV9uZXcoY2FyZCwgY2FyZC0+ZHJpdmVyLCAwLCAwLCBzb2xvX2Rldi0+bnJfY2hhbnMsCisJCQkgICZwY20pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLAorCQkJJnNuZF9zb2xvX3BjbV9vcHMpOworCisJc25kX3BjbV9jaGlwKHBjbSkgPSBzb2xvX2RldjsKKwlwY20tPmluZm9fZmxhZ3MgPSAwOworCXN0cmNweShwY20tPm5hbWUsIGNhcmQtPnNob3J0bmFtZSk7CisKKwlmb3IgKGkgPSAwLCBzcyA9IHBjbS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLnN1YnN0cmVhbTsKKwkgICAgIHNzOyBzcyA9IHNzLT5uZXh0LCBpKyspCisJCXNwcmludGYoc3MtPm5hbWUsICJDYW1lcmEgIyVkIEF1ZGlvIiwgaSk7CisKKwlyZXQgPSBzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwKKwkJCQkJU05EUlZfRE1BX1RZUEVfQ09OVElOVU9VUywKKwkJCQkJc25kX2RtYV9jb250aW51b3VzX2RhdGEoR0ZQX0tFUk5FTCksCisJCQkJCU1BWF9CVUZGRVIsIE1BWF9CVUZGRVIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJc29sb19kZXYtPnNuZF9wY20gPSBwY207CisKKwlyZXR1cm4gMDsKK30KKworaW50IHNvbG9fZzcyM19pbml0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCXN0YXRpYyBzdHJ1Y3Qgc25kX2RldmljZV9vcHMgb3BzID0geyBOVUxMIH07CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGtjdGw7CisJY2hhciBuYW1lWzMyXTsKKwlpbnQgcmV0OworCisJYXRvbWljX3NldCgmc29sb19kZXYtPnNuZF91c2VycywgMCk7CisKKwkvKiBBbGxvd3MgZm9yIGVhc2llciBtYXBwaW5nIGJldHdlZW4gdmlkZW8gYW5kIGF1ZGlvICovCisJc3ByaW50ZihuYW1lLCAiU29mdGxvZ2ljJWQiLCBzb2xvX2Rldi0+dmZkLT5udW0pOworCisJcmV0ID0gc25kX2NhcmRfY3JlYXRlKFNORFJWX0RFRkFVTFRfSURYMSwgbmFtZSwgVEhJU19NT0RVTEUsIDAsCisJCQkgICAgICAmc29sb19kZXYtPnNuZF9jYXJkKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWNhcmQgPSBzb2xvX2Rldi0+c25kX2NhcmQ7CisKKwlzdHJjcHkoY2FyZC0+ZHJpdmVyLCBTT0xPNjAxMF9OQU1FKTsKKwlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiU09MTy02MDEwIEF1ZGlvIik7CisJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIG9uICVzIElSUSAlZCIsIGNhcmQtPnNob3J0bmFtZSwKKwkJcGNpX25hbWUoc29sb19kZXYtPnBkZXYpLCBzb2xvX2Rldi0+cGRldi0+aXJxKTsKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZzb2xvX2Rldi0+cGRldi0+ZGV2KTsKKworCXJldCA9IHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9MT1dMRVZFTCwgc29sb19kZXYsICZvcHMpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIHNuZF9lcnJvcjsKKworCS8qIE1peGVyIGNvbnRyb2xzICovCisJc3RyY3B5KGNhcmQtPm1peGVybmFtZSwgIlNPTE8tNjAxMCIpOworCWtjdGwgPSBzbmRfc29sb19jYXB0dXJlX3ZvbHVtZTsKKwlrY3RsLmNvdW50ID0gc29sb19kZXYtPm5yX2NoYW5zOworICAgICAgICByZXQgPSBzbmRfY3RsX2FkZChjYXJkLCBzbmRfY3RsX25ldzEoJmtjdGwsIHNvbG9fZGV2KSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAoKHJldCA9IHNvbG9fc25kX3BjbV9pbml0KHNvbG9fZGV2KSkgPCAwKQorCQlnb3RvIHNuZF9lcnJvcjsKKworCWlmICgocmV0ID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpIDwgMCkKKwkJZ290byBzbmRfZXJyb3I7CisKKwlzb2xvX2c3MjNfY29uZmlnKHNvbG9fZGV2KTsKKworCWRldl9pbmZvKCZzb2xvX2Rldi0+cGRldi0+ZGV2LCAiQWxzYSBzb3VuZCBjYXJkIGFzICVzXG4iLCBuYW1lKTsKKworCXJldHVybiAwOworCitzbmRfZXJyb3I6CisJc25kX2NhcmRfZnJlZShjYXJkKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHNvbG9fZzcyM19leGl0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0FVRElPX0NPTlRST0wsIDApOworCXNvbG82MDEwX2lycV9vZmYoc29sb19kZXYsIFNPTE9fSVJRX0c3MjMpOworCisJc25kX2NhcmRfZnJlZShzb2xvX2Rldi0+c25kX2NhcmQpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLWdwaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC1ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZmN2E3MWVkYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC1ncGlvLmMKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQmx1ZWNoZXJyeSwgTExDIHd3dy5ibHVlY2hlcnJ5ZHZyLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDEwIEJlbiBDb2xsaW5zIDxiY29sbGluc0BibHVlY2hlcnJ5Lm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlICJzb2xvNjAxMC5oIgorCitzdGF0aWMgdm9pZCBzb2xvX2dwaW9fbW9kZShzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwKKwkJCSAgIHVuc2lnbmVkIGludCBwb3J0X21hc2ssIHVuc2lnbmVkIGludCBtb2RlKQoreworCWludCBwb3J0OworCXVuc2lnbmVkIGludCByZXQ7CisKKwlyZXQgPSBzb2xvX3JlZ19yZWFkKHNvbG9fZGV2LCBTT0xPX0dQSU9fQ09ORklHXzApOworCisJLyogVG8gc2V0IGdwaW8gKi8KKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgMTY7IHBvcnQrKykgeworCQlpZiAoISgoMSA8PCBwb3J0KSAmIHBvcnRfbWFzaykpCisJCQljb250aW51ZTsKKworCQlyZXQgJj0gKH4oMyA8PCAocG9ydCA8PCAxKSkpOworCQlyZXQgfD0gKChtb2RlICYgMykgPDwgKHBvcnQgPDwgMSkpOworCX0KKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0dQSU9fQ09ORklHXzAsIHJldCk7CisKKwkvKiBUbyBzZXQgZXh0ZW5kZWQgZ3BpbyAtIHNlbnNvciAqLworCXJldCA9IHNvbG9fcmVnX3JlYWQoc29sb19kZXYsIFNPTE9fR1BJT19DT05GSUdfMSk7CisKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgMTY7IHBvcnQrKykgeworCQlpZiAoISgoMSA8PCAocG9ydCArIDE2KSkgJiBwb3J0X21hc2spKQorCQkJY29udGludWU7CisKKwkJaWYgKCFtb2RlKQorCQkJcmV0ICY9IH4oMSA8PCBwb3J0KTsKKwkJZWxzZQorCQkJcmV0IHw9IDEgPDwgcG9ydDsKKwl9CisKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19HUElPX0NPTkZJR18xLCByZXQpOworfQorCitzdGF0aWMgdm9pZCBzb2xvX2dwaW9fc2V0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fR1BJT19EQVRBX09VVCwKKwkJICAgICAgIHNvbG9fcmVnX3JlYWQoc29sb19kZXYsIFNPTE9fR1BJT19EQVRBX09VVCkgfCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNvbG9fZ3Bpb19jbGVhcihzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgdW5zaWduZWQgaW50IHZhbHVlKQoreworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0dQSU9fREFUQV9PVVQsCisJCSAgICAgICBzb2xvX3JlZ19yZWFkKHNvbG9fZGV2LCBTT0xPX0dQSU9fREFUQV9PVVQpICYgfnZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgc29sb19ncGlvX2NvbmZpZyhzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldikKK3sKKwkvKiBWaWRlbyByZXNldCAqLworCXNvbG9fZ3Bpb19tb2RlKHNvbG9fZGV2LCAweDMwLCAxKTsKKwlzb2xvX2dwaW9fY2xlYXIoc29sb19kZXYsIDB4MzApOworCXVkZWxheSgxMDApOworCXNvbG9fZ3Bpb19zZXQoc29sb19kZXYsIDB4MzApOworCXVkZWxheSgxMDApOworCisJLyogV2FybmluZzogRG9uJ3QgdG91Y2ggdGhlIG5leHQgbGluZSB1bmxlc3MgeW91J3JlIHN1cmUgb2Ygd2hhdAorCSAqIHlvdSdyZSBkb2luZzogZmlyc3QgZm91ciBncGlvIFswLTNdIGFyZSB1c2VkIGZvciB2aWRlby4gKi8KKwlzb2xvX2dwaW9fbW9kZShzb2xvX2RldiwgMHgwZiwgMik7CisKKwkvKiBXZSB1c2UgYml0IDgtMTUgb2YgU09MT19HUElPX0NPTkZJR18wIGZvciByZWxheSBwdXJwb3NlcyAqLworCXNvbG9fZ3Bpb19tb2RlKHNvbG9fZGV2LCAweGZmMDAsIDEpOworCisJLyogSW5pdGlhbGx5IHNldCByZWxheSBzdGF0dXMgdG8gMCAqLworCXNvbG9fZ3Bpb19jbGVhcihzb2xvX2RldiwgMHhmZjAwKTsKK30KKworaW50IHNvbG9fZ3Bpb19pbml0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworICAgICAgICBzb2xvX2dwaW9fY29uZmlnKHNvbG9fZGV2KTsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgc29sb19ncGlvX2V4aXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJc29sb19ncGlvX2NsZWFyKHNvbG9fZGV2LCAweDMwKTsKKwlzb2xvX2dwaW9fY29uZmlnKHNvbG9fZGV2KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC1pMmMuYyBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC1pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmI4NmZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLWkyYy5jCkBAIC0wLDAgKzEsMzMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEJsdWVjaGVycnksIExMQyB3d3cuYmx1ZWNoZXJyeWR2ci5jb20KKyAqIENvcHlyaWdodCAoQykgMjAxMCBCZW4gQ29sbGlucyA8YmNvbGxpbnNAYmx1ZWNoZXJyeS5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKiBYWFg6IFRoZSBTT0xPNjAxMCBpMmMgZG9lcyBub3QgaGF2ZSBzZXBhcmF0ZSBpbnRlcnJ1cHRzIGZvciBlYWNoIGkyYworICogY2hhbm5lbC4gVGhlIGJ1cyBjYW4gb25seSBoYW5kbGUgb25lIGkyYyBldmVudCBhdCBhIHRpbWUuIFRoZSBiZWxvdyBoYW5kbGVzCisgKiB0aGlzIGFsbCB3cm9uZy4gV2Ugc2hvdWxkIGJlIHVzaW5nIHRoZSBzdGF0dXMgcmVnaXN0ZXJzIHRvIHNlZSBpZiB0aGUgYnVzCisgKiBpcyBpbiB1c2UsIGFuZCBoYXZlIGEgZ2xvYmFsIGxvY2sgdG8gY2hlY2sgdGhlIHN0YXR1cyByZWdpc3Rlci4gQWxzbywKKyAqIHRoZSBidWxrIG9mIHRoZSB3b3JrIHNob3VsZCBiZSBoYW5kbGVkIG91dC1vZi1pbnRlcnJ1cHQuIFRoZSB1Z2x5IGxvb3BzCisgKiB0aGF0IG9jY3VyIGR1cmluZyBpbnRlcnJ1cHQgc2NhcmUgbWUuIFRoZSBJU1Igc2hvdWxkIG1lcmVseSBzaWduYWwKKyAqIHRocmVhZCBjb250ZXh0LCBBQ0sgdGhlIGludGVycnVwdCwgYW5kIG1vdmUgb24uIC0tIEJlbkMgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSAic29sbzYwMTAuaCIKKwordTggc29sb19pMmNfcmVhZGJ5dGUoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIGludCBpZCwgdTggYWRkciwgdTggb2ZmKQoreworCXN0cnVjdCBpMmNfbXNnIG1zZ3NbMl07CisJdTggZGF0YTsKKworCW1zZ3NbMF0uZmxhZ3MgPSAwOworCW1zZ3NbMF0uYWRkciA9IGFkZHI7CisJbXNnc1swXS5sZW4gPSAxOworCW1zZ3NbMF0uYnVmID0gJm9mZjsKKworCW1zZ3NbMV0uZmxhZ3MgPSBJMkNfTV9SRDsKKwltc2dzWzFdLmFkZHIgPSBhZGRyOworCW1zZ3NbMV0ubGVuID0gMTsKKwltc2dzWzFdLmJ1ZiA9ICZkYXRhOworCisJaTJjX3RyYW5zZmVyKCZzb2xvX2Rldi0+aTJjX2FkYXBbaWRdLCBtc2dzLCAyKTsKKworICAgICAgICByZXR1cm4gZGF0YTsKK30KKwordm9pZCBzb2xvX2kyY193cml0ZWJ5dGUoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIGludCBpZCwgdTggYWRkciwKKwkJCXU4IG9mZiwgdTggZGF0YSkKK3sKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzOworCXU4IGJ1ZlsyXTsKKworCWJ1ZlswXSA9IG9mZjsKKwlidWZbMV0gPSBkYXRhOworCW1zZ3MuZmxhZ3MgPSAwOworCW1zZ3MuYWRkciA9IGFkZHI7CisJbXNncy5sZW4gPSAyOworCW1zZ3MuYnVmID0gYnVmOworCisJaTJjX3RyYW5zZmVyKCZzb2xvX2Rldi0+aTJjX2FkYXBbaWRdLCAmbXNncywgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHNvbG9faTJjX2ZsdXNoKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCBpbnQgd3IpCit7CisJdTMyIGN0cmw7CisKKwljdHJsID0gU09MT19JSUNfQ0hfU0VUKHNvbG9fZGV2LT5pMmNfaWQpOworCisJaWYgKHNvbG9fZGV2LT5pMmNfc3RhdGUgPT0gSUlDX1NUQVRFX1NUQVJUKQorCQljdHJsIHw9IFNPTE9fSUlDX1NUQVJUOworCisJaWYgKHdyKSB7CisJCWN0cmwgfD0gU09MT19JSUNfV1JJVEU7CisJfSBlbHNlIHsKKwkJY3RybCB8PSBTT0xPX0lJQ19SRUFEOworCQlpZiAoIShzb2xvX2Rldi0+aTJjX21zZy0+ZmxhZ3MgJiBJMkNfTV9OT19SRF9BQ0spKQorCQkJY3RybCB8PSBTT0xPX0lJQ19BQ0tfRU47CisJfQorCisJaWYgKHNvbG9fZGV2LT5pMmNfbXNnX3B0ciA9PSBzb2xvX2Rldi0+aTJjX21zZy0+bGVuKQorCQljdHJsIHw9IFNPTE9fSUlDX1NUT1A7CisKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19JSUNfQ1RSTCwgY3RybCk7Cit9CisKK3N0YXRpYyB2b2lkIHNvbG9faTJjX3N0YXJ0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCXUzMiBhZGRyID0gc29sb19kZXYtPmkyY19tc2ctPmFkZHIgPDwgMTsKKworCWlmIChzb2xvX2Rldi0+aTJjX21zZy0+ZmxhZ3MgJiBJMkNfTV9SRCkKKwkJYWRkciB8PSAxOworCisJc29sb19kZXYtPmkyY19zdGF0ZSA9IElJQ19TVEFURV9TVEFSVDsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19JSUNfVFhELCBhZGRyKTsKKwlzb2xvX2kyY19mbHVzaChzb2xvX2RldiwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHNvbG9faTJjX3N0b3Aoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJc29sbzYwMTBfaXJxX29mZihzb2xvX2RldiwgU09MT19JUlFfSUlDKTsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19JSUNfQ1RSTCwgMCk7CisJc29sb19kZXYtPmkyY19zdGF0ZSA9IElJQ19TVEFURV9TVE9QOworCXdha2VfdXAoJnNvbG9fZGV2LT5pMmNfd2FpdCk7Cit9CisKK3N0YXRpYyBpbnQgc29sb19pMmNfaGFuZGxlX3JlYWQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CitwcmVwYXJlX3JlYWQ6CisJaWYgKHNvbG9fZGV2LT5pMmNfbXNnX3B0ciAhPSBzb2xvX2Rldi0+aTJjX21zZy0+bGVuKSB7CisJCXNvbG9faTJjX2ZsdXNoKHNvbG9fZGV2LCAwKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc29sb19kZXYtPmkyY19tc2dfcHRyID0gMDsKKwlzb2xvX2Rldi0+aTJjX21zZysrOworCXNvbG9fZGV2LT5pMmNfbXNnX251bS0tOworCisJaWYgKHNvbG9fZGV2LT5pMmNfbXNnX251bSA9PSAwKSB7CisJCXNvbG9faTJjX3N0b3Aoc29sb19kZXYpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIShzb2xvX2Rldi0+aTJjX21zZy0+ZmxhZ3MgJiBJMkNfTV9OT1NUQVJUKSkgeworCQlzb2xvX2kyY19zdGFydChzb2xvX2Rldik7CisJfSBlbHNlIHsKKwkJaWYgKHNvbG9fZGV2LT5pMmNfbXNnLT5mbGFncyAmIEkyQ19NX1JEKQorCQkJZ290byBwcmVwYXJlX3JlYWQ7CisJCWVsc2UKKwkJCXNvbG9faTJjX3N0b3Aoc29sb19kZXYpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNvbG9faTJjX2hhbmRsZV93cml0ZShzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldikKK3sKK3JldHJ5X3dyaXRlOgorCWlmIChzb2xvX2Rldi0+aTJjX21zZ19wdHIgIT0gc29sb19kZXYtPmkyY19tc2ctPmxlbikgeworCQlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19JSUNfVFhELAorCQkJICAgICAgIHNvbG9fZGV2LT5pMmNfbXNnLT5idWZbc29sb19kZXYtPmkyY19tc2dfcHRyXSk7CisJCXNvbG9fZGV2LT5pMmNfbXNnX3B0cisrOworCQlzb2xvX2kyY19mbHVzaChzb2xvX2RldiwgMSk7CisJCXJldHVybiAwOworCX0KKworCXNvbG9fZGV2LT5pMmNfbXNnX3B0ciA9IDA7CisJc29sb19kZXYtPmkyY19tc2crKzsKKwlzb2xvX2Rldi0+aTJjX21zZ19udW0tLTsKKworCWlmIChzb2xvX2Rldi0+aTJjX21zZ19udW0gPT0gMCkgeworCQlzb2xvX2kyY19zdG9wKHNvbG9fZGV2KTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCEoc29sb19kZXYtPmkyY19tc2ctPmZsYWdzICYgSTJDX01fTk9TVEFSVCkpIHsKKwkJc29sb19pMmNfc3RhcnQoc29sb19kZXYpOworCX0gZWxzZSB7CisJCWlmIChzb2xvX2Rldi0+aTJjX21zZy0+ZmxhZ3MgJiBJMkNfTV9SRCkKKwkJCXNvbG9faTJjX3N0b3Aoc29sb19kZXYpOworCQllbHNlCisJCQlnb3RvIHJldHJ5X3dyaXRlOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgc29sb19pMmNfaXNyKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCXUzMiBzdGF0dXMgPSBzb2xvX3JlZ19yZWFkKHNvbG9fZGV2LCBTT0xPX0lJQ19DVFJMKTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0lSUV9TVEFULCBTT0xPX0lSUV9JSUMpOworCisJaWYgKHN0YXR1cyAmIChTT0xPX0lJQ19TVEFURV9UUk5TICYgU09MT19JSUNfU1RBVEVfU0lHX0VSUikgfHwKKwkgICAgc29sb19kZXYtPmkyY19pZCA8IDApIHsKKwkJc29sb19pMmNfc3RvcChzb2xvX2Rldik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJc3dpdGNoIChzb2xvX2Rldi0+aTJjX3N0YXRlKSB7CisJY2FzZSBJSUNfU1RBVEVfU1RBUlQ6CisJCWlmIChzb2xvX2Rldi0+aTJjX21zZy0+ZmxhZ3MgJiBJMkNfTV9SRCkgeworCQkJc29sb19kZXYtPmkyY19zdGF0ZSA9IElJQ19TVEFURV9SRUFEOworCQkJcmV0ID0gc29sb19pMmNfaGFuZGxlX3JlYWQoc29sb19kZXYpOworCQkJYnJlYWs7CisJCX0KKworCQlzb2xvX2Rldi0+aTJjX3N0YXRlID0gSUlDX1NUQVRFX1dSSVRFOworCWNhc2UgSUlDX1NUQVRFX1dSSVRFOgorCQlyZXQgPSBzb2xvX2kyY19oYW5kbGVfd3JpdGUoc29sb19kZXYpOworCQlicmVhazsKKworCWNhc2UgSUlDX1NUQVRFX1JFQUQ6CisJCXNvbG9fZGV2LT5pMmNfbXNnLT5idWZbc29sb19kZXYtPmkyY19tc2dfcHRyXSA9CisJCQlzb2xvX3JlZ19yZWFkKHNvbG9fZGV2LCBTT0xPX0lJQ19SWEQpOworCQlzb2xvX2Rldi0+aTJjX21zZ19wdHIrKzsKKworCQlyZXQgPSBzb2xvX2kyY19oYW5kbGVfcmVhZChzb2xvX2Rldik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJc29sb19pMmNfc3RvcChzb2xvX2Rldik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzb2xvX2kyY19tYXN0ZXJfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsCisJCQkJc3RydWN0IGkyY19tc2cgbXNnc1tdLCBpbnQgbnVtKQoreworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gYWRhcC0+YWxnb19kYXRhOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwlpbnQgcmV0OworCWludCBpOworCURFRklORV9XQUlUKHdhaXQpOworCisJZm9yIChpID0gMDsgaSA8IFNPTE9fSTJDX0FEQVBURVJTOyBpKyspIHsKKwkJaWYgKCZzb2xvX2Rldi0+aTJjX2FkYXBbaV0gPT0gYWRhcCkKKwkJCWJyZWFrOworCX0KKworCWlmIChpID09IFNPTE9fSTJDX0FEQVBURVJTKQorCQlyZXR1cm4gbnVtOyAvLyBYWFggUmlnaHQgcmV0dXJuIHZhbHVlIGZvciBmYWlsdXJlPworCisJZG93bigmc29sb19kZXYtPmkyY19zZW0pOworCXNvbG9fZGV2LT5pMmNfaWQgPSBpOworCXNvbG9fZGV2LT5pMmNfbXNnID0gbXNnczsKKwlzb2xvX2Rldi0+aTJjX21zZ19udW0gPSBudW07CisJc29sb19kZXYtPmkyY19tc2dfcHRyID0gMDsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0lJQ19DVFJMLCAwKTsKKwlzb2xvNjAxMF9pcnFfb24oc29sb19kZXYsIFNPTE9fSVJRX0lJQyk7CisJc29sb19pMmNfc3RhcnQoc29sb19kZXYpOworCisJdGltZW91dCA9IEhaIC8gMjsKKworCWZvciAoOzspIHsKKwkJcHJlcGFyZV90b193YWl0KCZzb2xvX2Rldi0+aTJjX3dhaXQsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOworCisJCWlmIChzb2xvX2Rldi0+aTJjX3N0YXRlID09IElJQ19TVEFURV9TVE9QKQorCQkJYnJlYWs7CisKKwkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7CisJCWlmICghdGltZW91dCkKKwkJCWJyZWFrOworCisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCWJyZWFrOworCX0KKworCWZpbmlzaF93YWl0KCZzb2xvX2Rldi0+aTJjX3dhaXQsICZ3YWl0KTsKKwlyZXQgPSBudW0gLSBzb2xvX2Rldi0+aTJjX21zZ19udW07CisJc29sb19kZXYtPmkyY19zdGF0ZSA9IElJQ19TVEFURV9JRExFOworCXNvbG9fZGV2LT5pMmNfaWQgPSAtMTsKKworCXVwKCZzb2xvX2Rldi0+aTJjX3NlbSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdTMyIHNvbG9faTJjX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQoreworCXJldHVybiBJMkNfRlVOQ19JMkM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBzb2xvX2kyY19hbGdvID0geworCS5tYXN0ZXJfeGZlcgk9IHNvbG9faTJjX21hc3Rlcl94ZmVyLAorCS5mdW5jdGlvbmFsaXR5CT0gc29sb19pMmNfZnVuY3Rpb25hbGl0eSwKK307CisKK2ludCBzb2xvX2kyY19pbml0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCWludCBpOworCWludCByZXQ7CisKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19JSUNfQ0ZHLAorCQkgICAgICAgU09MT19JSUNfUFJFU0NBTEUoOCkgfCBTT0xPX0lJQ19FTkFCTEUpOworCisJc29sb19kZXYtPmkyY19pZCA9IC0xOworCXNvbG9fZGV2LT5pMmNfc3RhdGUgPSBJSUNfU1RBVEVfSURMRTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzb2xvX2Rldi0+aTJjX3dhaXQpOworCWluaXRfTVVURVgoJnNvbG9fZGV2LT5pMmNfc2VtKTsKKworCWZvciAoaSA9IDA7IGkgPCBTT0xPX0kyQ19BREFQVEVSUzsgaSsrKSB7CisJCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9ICZzb2xvX2Rldi0+aTJjX2FkYXBbaV07CisKKwkJc25wcmludGYoYWRhcC0+bmFtZSwgSTJDX05BTUVfU0laRSwgIiVzIEkyQyAlZCIsCisJCQkgU09MTzYwMTBfTkFNRSwgaSk7CisJCWFkYXAtPmFsZ28gPSAmc29sb19pMmNfYWxnbzsKKwkJYWRhcC0+YWxnb19kYXRhID0gc29sb19kZXY7CisJCWFkYXAtPnJldHJpZXMgPSAxOworCQlhZGFwLT5kZXYucGFyZW50ID0gJnNvbG9fZGV2LT5wZGV2LT5kZXY7CisKKwkJaWYgKChyZXQgPSBpMmNfYWRkX2FkYXB0ZXIoYWRhcCkpKSB7CisJCQlhZGFwLT5hbGdvX2RhdGEgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAocmV0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBTT0xPX0kyQ19BREFQVEVSUzsgaSsrKSB7CisJCQlpZiAoIXNvbG9fZGV2LT5pMmNfYWRhcFtpXS5hbGdvX2RhdGEpCisJCQkJYnJlYWs7CisJCQlpMmNfZGVsX2FkYXB0ZXIoJnNvbG9fZGV2LT5pMmNfYWRhcFtpXSk7CisJCQlzb2xvX2Rldi0+aTJjX2FkYXBbaV0uYWxnb19kYXRhID0gTlVMTDsKKwkJfQorCQlyZXR1cm4gcmV0OworCX0KKworCWRldl9pbmZvKCZzb2xvX2Rldi0+cGRldi0+ZGV2LCAiRW5hYmxlZCAlZCBpMmMgYWRhcHRlcnNcbiIsCisJCSBTT0xPX0kyQ19BREFQVEVSUyk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzb2xvX2kyY19leGl0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFNPTE9fSTJDX0FEQVBURVJTOyBpKyspIHsKKwkJaWYgKCFzb2xvX2Rldi0+aTJjX2FkYXBbaV0uYWxnb19kYXRhKQorCQkJY29udGludWU7CisJCWkyY19kZWxfYWRhcHRlcigmc29sb19kZXYtPmkyY19hZGFwW2ldKTsKKwkJc29sb19kZXYtPmkyY19hZGFwW2ldLmFsZ29fZGF0YSA9IE5VTEw7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLWpwZWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC1qcGVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIwNTA3ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC1qcGVnLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQmx1ZWNoZXJyeSwgTExDIHd3dy5ibHVlY2hlcnJ5ZHZyLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDEwIEJlbiBDb2xsaW5zIDxiY29sbGluc0BibHVlY2hlcnJ5Lm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19TT0xPNjAxMF9KUEVHX0gKKyNkZWZpbmUgX19TT0xPNjAxMF9KUEVHX0gKKworc3RhdGljIHVuc2lnbmVkIGNoYXIganBlZ19oZWFkZXJbXSA9IHsKKwkweGZmLCAweGQ4LCAweGZmLCAweGZlLCAweDAwLCAweDBkLCAweDQyLCAweDZjLAorCTB4NzUsIDB4NjUsIDB4NjMsIDB4NjgsIDB4NjUsIDB4NzIsIDB4NzIsIDB4NzksCisJMHgyMCwgMHhmZiwgMHhkYiwgMHgwMCwgMHg0MywgMHgwMCwgMHgyMCwgMHgxNiwKKwkweDE4LCAweDFjLCAweDE4LCAweDE0LCAweDIwLCAweDFjLCAweDFhLCAweDFjLAorCTB4MjQsIDB4MjIsIDB4MjAsIDB4MjYsIDB4MzAsIDB4NTAsIDB4MzQsIDB4MzAsCisJMHgyYywgMHgyYywgMHgzMCwgMHg2MiwgMHg0NiwgMHg0YSwgMHgzYSwgMHg1MCwKKwkweDc0LCAweDY2LCAweDdhLCAweDc4LCAweDcyLCAweDY2LCAweDcwLCAweDZlLAorCTB4ODAsIDB4OTAsIDB4YjgsIDB4OWMsIDB4ODAsIDB4ODgsIDB4YWUsIDB4OGEsCisJMHg2ZSwgMHg3MCwgMHhhMCwgMHhkYSwgMHhhMiwgMHhhZSwgMHhiZSwgMHhjNCwKKwkweGNlLCAweGQwLCAweGNlLCAweDdjLCAweDlhLCAweGUyLCAweGYyLCAweGUwLAorCTB4YzgsIDB4ZjAsIDB4YjgsIDB4Y2EsIDB4Y2UsIDB4YzYsIDB4ZmYsIDB4ZGIsCisJMHgwMCwgMHg0MywgMHgwMSwgMHgyMiwgMHgyNCwgMHgyNCwgMHgzMCwgMHgyYSwKKwkweDMwLCAweDVlLCAweDM0LCAweDM0LCAweDVlLCAweGM2LCAweDg0LCAweDcwLAorCTB4ODQsIDB4YzYsIDB4YzYsIDB4YzYsIDB4YzYsIDB4YzYsIDB4YzYsIDB4YzYsCisJMHhjNiwgMHhjNiwgMHhjNiwgMHhjNiwgMHhjNiwgMHhjNiwgMHhjNiwgMHhjNiwKKwkweGM2LCAweGM2LCAweGM2LCAweGM2LCAweGM2LCAweGM2LCAweGM2LCAweGM2LAorCTB4YzYsIDB4YzYsIDB4YzYsIDB4YzYsIDB4YzYsIDB4YzYsIDB4YzYsIDB4YzYsCisJMHhjNiwgMHhjNiwgMHhjNiwgMHhjNiwgMHhjNiwgMHhjNiwgMHhjNiwgMHhjNiwKKwkweGM2LCAweGM2LCAweGM2LCAweGM2LCAweGM2LCAweGM2LCAweGM2LCAweGM2LAorCTB4YzYsIDB4YzYsIDB4YzYsIDB4ZmYsIDB4YzQsIDB4MDEsIDB4YTIsIDB4MDAsCisJMHgwMCwgMHgwMSwgMHgwNSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwKKwkweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisJMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgxMCwgMHgwMCwgMHgwMiwgMHgwMSwKKwkweDAzLCAweDAzLCAweDAyLCAweDA0LCAweDAzLCAweDA1LCAweDA1LCAweDA0LAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4N2QsIDB4MDEsIDB4MDIsIDB4MDMsCisJMHgwMCwgMHgwNCwgMHgxMSwgMHgwNSwgMHgxMiwgMHgyMSwgMHgzMSwgMHg0MSwKKwkweDA2LCAweDEzLCAweDUxLCAweDYxLCAweDA3LCAweDIyLCAweDcxLCAweDE0LAorCTB4MzIsIDB4ODEsIDB4OTEsIDB4YTEsIDB4MDgsIDB4MjMsIDB4NDIsIDB4YjEsCisJMHhjMSwgMHgxNSwgMHg1MiwgMHhkMSwgMHhmMCwgMHgyNCwgMHgzMywgMHg2MiwKKwkweDcyLCAweDgyLCAweDA5LCAweDBhLCAweDE2LCAweDE3LCAweDE4LCAweDE5LAorCTB4MWEsIDB4MjUsIDB4MjYsIDB4MjcsIDB4MjgsIDB4MjksIDB4MmEsIDB4MzQsCisJMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwgMHgzYSwgMHg0MywgMHg0NCwKKwkweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LCAweDQ5LCAweDRhLCAweDUzLCAweDU0LAorCTB4NTUsIDB4NTYsIDB4NTcsIDB4NTgsIDB4NTksIDB4NWEsIDB4NjMsIDB4NjQsCisJMHg2NSwgMHg2NiwgMHg2NywgMHg2OCwgMHg2OSwgMHg2YSwgMHg3MywgMHg3NCwKKwkweDc1LCAweDc2LCAweDc3LCAweDc4LCAweDc5LCAweDdhLCAweDgzLCAweDg0LAorCTB4ODUsIDB4ODYsIDB4ODcsIDB4ODgsIDB4ODksIDB4OGEsIDB4OTIsIDB4OTMsCisJMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywgMHg5OCwgMHg5OSwgMHg5YSwgMHhhMiwKKwkweGEzLCAweGE0LCAweGE1LCAweGE2LCAweGE3LCAweGE4LCAweGE5LCAweGFhLAorCTB4YjIsIDB4YjMsIDB4YjQsIDB4YjUsIDB4YjYsIDB4YjcsIDB4YjgsIDB4YjksCisJMHhiYSwgMHhjMiwgMHhjMywgMHhjNCwgMHhjNSwgMHhjNiwgMHhjNywgMHhjOCwKKwkweGM5LCAweGNhLCAweGQyLCAweGQzLCAweGQ0LCAweGQ1LCAweGQ2LCAweGQ3LAorCTB4ZDgsIDB4ZDksIDB4ZGEsIDB4ZTEsIDB4ZTIsIDB4ZTMsIDB4ZTQsIDB4ZTUsCisJMHhlNiwgMHhlNywgMHhlOCwgMHhlOSwgMHhlYSwgMHhmMSwgMHhmMiwgMHhmMywKKwkweGY0LCAweGY1LCAweGY2LCAweGY3LCAweGY4LCAweGY5LCAweGZhLCAweDAxLAorCTB4MDAsIDB4MDMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsCisJMHgwMSwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorCTB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MTEsIDB4MDAsIDB4MDIsIDB4MDEsCisJMHgwMiwgMHgwNCwgMHgwNCwgMHgwMywgMHgwNCwgMHgwNywgMHgwNSwgMHgwNCwKKwkweDA0LCAweDAwLCAweDAxLCAweDAyLCAweDc3LCAweDAwLCAweDAxLCAweDAyLAorCTB4MDMsIDB4MTEsIDB4MDQsIDB4MDUsIDB4MjEsIDB4MzEsIDB4MDYsIDB4MTIsCisJMHg0MSwgMHg1MSwgMHgwNywgMHg2MSwgMHg3MSwgMHgxMywgMHgyMiwgMHgzMiwKKwkweDgxLCAweDA4LCAweDE0LCAweDQyLCAweDkxLCAweGExLCAweGIxLCAweGMxLAorCTB4MDksIDB4MjMsIDB4MzMsIDB4NTIsIDB4ZjAsIDB4MTUsIDB4NjIsIDB4NzIsCisJMHhkMSwgMHgwYSwgMHgxNiwgMHgyNCwgMHgzNCwgMHhlMSwgMHgyNSwgMHhmMSwKKwkweDE3LCAweDE4LCAweDE5LCAweDFhLCAweDI2LCAweDI3LCAweDI4LCAweDI5LAorCTB4MmEsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsIDB4MzksIDB4M2EsIDB4NDMsCisJMHg0NCwgMHg0NSwgMHg0NiwgMHg0NywgMHg0OCwgMHg0OSwgMHg0YSwgMHg1MywKKwkweDU0LCAweDU1LCAweDU2LCAweDU3LCAweDU4LCAweDU5LCAweDVhLCAweDYzLAorCTB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsIDB4NjgsIDB4NjksIDB4NmEsIDB4NzMsCisJMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywgMHg3OCwgMHg3OSwgMHg3YSwgMHg4MiwKKwkweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LCAweDg4LCAweDg5LCAweDhhLAorCTB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsIDB4OTgsIDB4OTksCisJMHg5YSwgMHhhMiwgMHhhMywgMHhhNCwgMHhhNSwgMHhhNiwgMHhhNywgMHhhOCwKKwkweGE5LCAweGFhLCAweGIyLCAweGIzLCAweGI0LCAweGI1LCAweGI2LCAweGI3LAorCTB4YjgsIDB4YjksIDB4YmEsIDB4YzIsIDB4YzMsIDB4YzQsIDB4YzUsIDB4YzYsCisJMHhjNywgMHhjOCwgMHhjOSwgMHhjYSwgMHhkMiwgMHhkMywgMHhkNCwgMHhkNSwKKwkweGQ2LCAweGQ3LCAweGQ4LCAweGQ5LCAweGRhLCAweGUyLCAweGUzLCAweGU0LAorCTB4ZTUsIDB4ZTYsIDB4ZTcsIDB4ZTgsIDB4ZTksIDB4ZWEsIDB4ZjIsIDB4ZjMsCisJMHhmNCwgMHhmNSwgMHhmNiwgMHhmNywgMHhmOCwgMHhmOSwgMHhmYSwgMHhmZiwKKwkweGMwLCAweDAwLCAweDExLCAweDA4LCAweDAwLCAweGYwLCAweDAyLCAweGMwLAorCTB4MDMsIDB4MDEsIDB4MjIsIDB4MDAsIDB4MDIsIDB4MTEsIDB4MDEsIDB4MDMsCisJMHgxMSwgMHgwMSwgMHhmZiwgMHhkYSwgMHgwMCwgMHgwYywgMHgwMywgMHgwMSwKKwkweDAwLCAweDAyLCAweDExLCAweDAzLCAweDExLCAweDAwLCAweDNmLCAweDAwCit9OworCisvKiBUaGlzIGlzIHRoZSBieXRlIG1hcmtlciBmb3IgdGhlIHN0YXJ0IG9mIFNPRjA6IDB4ZmZjMCBtYXJrZXIgKi8KKyNkZWZpbmUgU09GMF9TVEFSVAk1NzUKKworI2VuZGlmIC8qIF9fU09MTzYwMTBfSlBFR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtb2Zmc2V0cy5oIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLW9mZnNldHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDMxZGU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLW9mZnNldHMuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEJsdWVjaGVycnksIExMQyB3d3cuYmx1ZWNoZXJyeWR2ci5jb20KKyAqIENvcHlyaWdodCAoQykgMjAxMCBCZW4gQ29sbGlucyA8YmNvbGxpbnNAYmx1ZWNoZXJyeS5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fU09MTzYwMTBfT0ZGU0VUU19ICisjZGVmaW5lIF9fU09MTzYwMTBfT0ZGU0VUU19ICisKKy8qIE9mZnNldHMgYW5kIHNpemVzIG9mIHRoZSBleHRlcm5hbCBhZGRyZXNzICovCisjZGVmaW5lIFNPTE9fRElTUF9FWFRfQUREUihfX3NvbG8pCQkweDAwMDAwMDAwCisjZGVmaW5lIFNPTE9fRElTUF9FWFRfU0laRQkJCTB4MDA0ODAwMDAKKworI2RlZmluZSBTT0xPX0RFQzJMSVZFX0VYVF9BRERSKF9fc29sbykgXAorCQkoU09MT19ESVNQX0VYVF9BRERSKF9fc29sbykgKyBTT0xPX0RJU1BfRVhUX1NJWkUpCisjZGVmaW5lIFNPTE9fREVDMkxJVkVfRVhUX1NJWkUJCQkweDAwMjQwMDAwCisKKyNkZWZpbmUgU09MT19PU0dfRVhUX0FERFIoX19zb2xvKSBcCisJCShTT0xPX0RFQzJMSVZFX0VYVF9BRERSKF9fc29sbykgKyBTT0xPX0RFQzJMSVZFX0VYVF9TSVpFKQorI2RlZmluZSBTT0xPX09TR19FWFRfU0laRQkJCTB4MDAxMjAwMDAKKworI2RlZmluZSBTT0xPX0VPU0RfRVhUX0FERFIoX19zb2xvKSBcCisJCShTT0xPX09TR19FWFRfQUREUihfX3NvbG8pICsgU09MT19PU0dfRVhUX1NJWkUpCisjZGVmaW5lIFNPTE9fRU9TRF9FWFRfU0laRQkJCTB4MDAwMTAwMDAKKworI2RlZmluZSBTT0xPX01PVElPTl9FWFRfQUREUihfX3NvbG8pIFwKKwkJKFNPTE9fRU9TRF9FWFRfQUREUihfX3NvbG8pICsgXAorCQkgKFNPTE9fRU9TRF9FWFRfU0laRSAqIF9fc29sby0+bnJfY2hhbnMpKQorI2RlZmluZSBTT0xPX01PVElPTl9FWFRfU0laRQkJCTB4MDAwODAwMDAKKworI2RlZmluZSBTT0xPX0c3MjNfRVhUX0FERFIoX19zb2xvKSBcCisJCShTT0xPX01PVElPTl9FWFRfQUREUihfX3NvbG8pICsgU09MT19NT1RJT05fRVhUX1NJWkUpCisjZGVmaW5lIFNPTE9fRzcyM19FWFRfU0laRQkJCTB4MDAwMTAwMDAKKworI2RlZmluZSBTT0xPX0NBUF9FWFRfQUREUihfX3NvbG8pIFwKKwkJKFNPTE9fRzcyM19FWFRfQUREUihfX3NvbG8pICsgU09MT19HNzIzX0VYVF9TSVpFKQorI2RlZmluZSBTT0xPX0NBUF9FWFRfTUFYX1BBR0UJCQkoMTggKyAxNSkKKyNkZWZpbmUgU09MT19DQVBfRVhUX1NJWkUJCQkoU09MT19DQVBfRVhUX01BWF9QQUdFICogNjU1MzYpCisKKy8qIFRoaXMgKzEgaXMgdmVyeSBpbXBvcnRhbnQgLS0gV2h5PyEgLS0gQmVuQyAqLworI2RlZmluZSBTT0xPX0VSRUZfRVhUX0FERFIoX19zb2xvKSBcCisJCShTT0xPX0NBUF9FWFRfQUREUihfX3NvbG8pICsgXAorCQkgKFNPTE9fQ0FQX0VYVF9TSVpFICogKF9fc29sby0+bnJfY2hhbnMgKyAxKSkpCisjZGVmaW5lIFNPTE9fRVJFRl9FWFRfU0laRQkJCTB4MDAxNDAwMDAKKworI2RlZmluZSBTT0xPX01QNEVfRVhUX0FERFIoX19zb2xvKSBcCisJCShTT0xPX0VSRUZfRVhUX0FERFIoX19zb2xvKSArIFwKKwkJIChTT0xPX0VSRUZfRVhUX1NJWkUgKiBfX3NvbG8tPm5yX2NoYW5zKSkKKyNkZWZpbmUgU09MT19NUDRFX0VYVF9TSVpFKF9fc29sbykJCSgweDAwMDgwMDAwICogX19zb2xvLT5ucl9jaGFucykKKworI2RlZmluZSBTT0xPX0RSRUZfRVhUX0FERFIoX19zb2xvKSBcCisJCShTT0xPX01QNEVfRVhUX0FERFIoX19zb2xvKSArIFNPTE9fTVA0RV9FWFRfU0laRShfX3NvbG8pKQorI2RlZmluZSBTT0xPX0RSRUZfRVhUX1NJWkUJCQkweDAwMTQwMDAwCisKKyNkZWZpbmUgU09MT19NUDREX0VYVF9BRERSKF9fc29sbykgXAorCQkoU09MT19EUkVGX0VYVF9BRERSKF9fc29sbykgKyBcCisJCSAoU09MT19EUkVGX0VYVF9TSVpFICogX19zb2xvLT5ucl9jaGFucykpCisjZGVmaW5lIFNPTE9fTVA0RF9FWFRfU0laRQkJCTB4MDAwODAwMDAKKworI2RlZmluZSBTT0xPX0pQRUdfRVhUX0FERFIoX19zb2xvKSBcCisJCShTT0xPX01QNERfRVhUX0FERFIoX19zb2xvKSArIFwKKwkJIChTT0xPX01QNERfRVhUX1NJWkUgKiBfX3NvbG8tPm5yX2NoYW5zKSkKKyNkZWZpbmUgU09MT19KUEVHX0VYVF9TSVpFKF9fc29sbykJCSgweDAwMDgwMDAwICogX19zb2xvLT5ucl9jaGFucykKKworI2VuZGlmIC8qIF9fU09MTzYwMTBfT0ZGU0VUU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtb3NkLWZvbnQuaCBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC1vc2QtZm9udC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZjU2NWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtb3NkLWZvbnQuaApAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBCbHVlY2hlcnJ5LCBMTEMgd3d3LmJsdWVjaGVycnlkdnIuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQmVuIENvbGxpbnMgPGJjb2xsaW5zQGJsdWVjaGVycnkubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX1NPTE82MDEwX09TRF9GT05UX0gKKyNkZWZpbmUgX19TT0xPNjAxMF9PU0RfRk9OVF9ICisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc29sb19vc2RfZm9udFtdID0geworCTB4MDAwMDAwMDAsIDB4MDAwMGMwYzgsIDB4Y2NmZWZlMGMsIDB4MDgwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgxMDEwMzgzOCwgMHg3YzdjZmVmZSwgMHgwMDAwMDAwMCwJLy8gMAorCTB4MDAwMDAwMDAsIDB4ZmVmZTdjN2MsIDB4MzgzODEwMTAsIDB4MTAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHg3YzgyZmVmZSwgMHhmZWZlZmU3YywgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAxMDM4LCAweDEwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAxMDM4N2MsIDB4ZmU3YzM4MTAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDM4NDQ0NCwgMHg0NDM4MDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDM4NDQ4MjgyLCAweDgyNDQzODAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDA3YzdjN2MsIDB4N2M3YzAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHg2YzZjNmM2YywgMHg2YzZjNmM2YywgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDA2MWU3ZWZlLCAweGZlN2UxZTA2LCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4YzBmMGZjZmUsIDB4ZmVmY2YwYzAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHhjNmNlZGVmZSwgMHhmZWRlY2VjNiwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweGM2ZTZmNmZlLCAweGZlZjZlNmM2LCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MTIzNjdlZmUsIDB4ZmU3ZTM2MTIsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHg5MGQ4ZmNmZSwgMHhmZWZjZDg5MCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDM4LCAweDdjYzY5MmJhLCAweDkyYzY3YzM4LCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMzgsIDB4N2NjNmFhOTIsIDB4YWFjNjdjMzgsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAzOCwgMHg3ODMwMTA3YywgMHhiYWE4NjgwYywgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDM4LCAweDNjMTgxMjdjLCAweGI4MzgyYzYwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwNDQsIDB4YWE2YzgyNTQsIDB4MzhlZWM2N2MsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDA4MiwgMHg0NDI4ODI0NCwgMHgzOGM2ODI3YywgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDM4LCAweDQ0NDQ0NGZlLCAweGZlZWVjNmZlLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMTgsIDB4NzgxODc4MTgsIDB4M2M3ZTdlM2MsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgzODU0OTI5YSwgMHg4MjQ0MzgwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwYzBjOGNjLCAweGZlZmUwYzA4LCAweDAwMDAwMDAwLAorCTB4MDAwMGUwYTAsIDB4ZTA0MGUwMGUsIDB4OGEwZWE0MGUsIDB4MDAwMDAwMDAsCisJMHgwMDAwZTBhMCwgMHhlMDQwZTAwZSwgMHgwYThlNDQwZSwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDdjLCAweDgyODI5MjkyLCAweDkyOTI4MmZlLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwZjgsIDB4ZmMwNDY0OTQsIDB4OTQ2NDA0ZmMsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAzZiwgMHg3ZjQwNGM1MiwgMHg1MjRjNDA3ZiwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDdjLCAweDgyYmE4MmJhLCAweDgyYmE4MmZlLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgxODNjM2MzYywgMHgxODE4MDAxOCwgMHgxODAwMDAwMCwJLy8gMzIgICAhCisJMHgwMDAwMDA2NiwgMHg2NjI0MDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDZjNmNmZTZjLCAweDZjNmNmZTZjLCAweDZjMDAwMDAwLAkvLyAzNCAiICMKKwkweDAwMDAxMDEwLCAweDdjZDZkNjE2LCAweDdjZDBkNmQ2LCAweDdjMTAxMDAwLAorCTB4MDAwMDAwMDAsIDB4MDA4NmM2NjAsIDB4MzAxODBjYzYsIDB4YzIwMDAwMDAsCS8vIDM2ICQgJQorCTB4MDAwMDAwMDAsIDB4Mzg2YzZjMzgsIDB4ZGM3NjY2NjYsIDB4ZGMwMDAwMDAsCisJMHgwMDAwMDAwYywgMHgwYzBjMDYwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwJLy8gMzggJiAnCisJMHgwMDAwMDAwMCwgMHgzMDE4MGMwYywgMHgwYzBjMGMxOCwgMHgzMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDBjMTgzMDMwLCAweDMwMzAzMDE4LCAweDBjMDAwMDAwLAkvLyA0MCAoICkKKwkweDAwMDAwMDAwLCAweDAwMDA2NjNjLCAweGZmM2M2NjAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDE4MTgsIDB4N2UxODE4MDAsIDB4MDAwMDAwMDAsCS8vIDQyICogKworCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDBlMGUsIDB4MGMwNjAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHg3ZTAwMDAwMCwgMHgwMDAwMDAwMCwJLy8gNDQgLCAtCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwNiwgMHgwNjAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDgwYzA2MDMwLCAweDE4MGMwNjAyLCAweDAwMDAwMDAwLAkvLyA0NiAuIC8KKwkweDAwMDAwMDdjLCAweGM2ZTZmNmRlLCAweGNlYzZjNjdjLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMzAsIDB4MzgzYzMwMzAsIDB4MzAzMDMwZmMsIDB4MDAwMDAwMDAsCS8vIDQ4IDAgMQorCTB4MDAwMDAwN2MsIDB4YzZjMDYwMzAsIDB4MTgwY2M2ZmUsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDA3YywgMHhjNmMwYzA3YywgMHhjMGMwYzY3YywgMHgwMDAwMDAwMCwJLy8gNTAgMiAzCisJMHgwMDAwMDA2MCwgMHg3MDc4NmM2NiwgMHhmZTYwNjBmMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMGZlLCAweDA2MDYwNjdlLCAweGMwYzBjNjdjLCAweDAwMDAwMDAwLAkvLyA1MiA0IDUKKwkweDAwMDAwMDM4LCAweDBjMDYwNjdlLCAweGM2YzZjNjdjLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwZmUsIDB4YzZjMDYwMzAsIDB4MTgxODE4MTgsIDB4MDAwMDAwMDAsCS8vIDU0IDYgNworCTB4MDAwMDAwN2MsIDB4YzZjNmM2N2MsIDB4YzZjNmM2N2MsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDA3YywgMHhjNmM2YzZmYywgMHhjMGMwNjAzOCwgMHgwMDAwMDAwMCwJLy8gNTYgOCA5CisJMHgwMDAwMDAwMCwgMHgxODE4MDAwMCwgMHgwMDE4MTgwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDE4MTgwMDAwLCAweDAwMTgxODBjLCAweDAwMDAwMDAwLAkvLyA1OCA6IDsKKwkweDAwMDAwMDYwLCAweDMwMTgwYzA2LCAweDBjMTgzMDYwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDA3ZTAwMDAsIDB4MDA3ZTAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwNiwgMHgwYzE4MzA2MCwgMHgzMDE4MGMwNiwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDdjLCAweGM2YzY2MDMwLCAweDMwMDAzMDMwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwN2MsIDB4YzZmNmQ2ZDYsIDB4NzYwNjA2N2MsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAxMCwgMHgzODZjYzZjNiwgMHhmZWM2YzZjNiwgMHgwMDAwMDAwMCwJLy8gNjQgQCBBCisJMHgwMDAwMDA3ZSwgMHhjNmM2YzY3ZSwgMHhjNmM2YzY3ZSwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDc4LCAweGNjMDYwNjA2LCAweDA2MDZjYzc4LCAweDAwMDAwMDAwLAkvLyA2NgorCTB4MDAwMDAwM2UsIDB4NjZjNmM2YzYsIDB4YzZjNjY2M2UsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDBmZSwgMHgwNjA2MDYzZSwgMHgwNjA2MDZmZSwgMHgwMDAwMDAwMCwJLy8gNjgKKwkweDAwMDAwMGZlLCAweDA2MDYwNjNlLCAweDA2MDYwNjA2LCAweDAwMDAwMDAwLAorCTB4MDAwMDAwNzgsIDB4Y2MwNjA2MDYsIDB4ZjZjNmNjYjgsIDB4MDAwMDAwMDAsCS8vIDcwCisJMHgwMDAwMDBjNiwgMHhjNmM2YzZmZSwgMHhjNmM2YzZjNiwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDNjLCAweDE4MTgxODE4LCAweDE4MTgxODNjLCAweDAwMDAwMDAwLAkvLyA3MgorCTB4MDAwMDAwNjAsIDB4NjA2MDYwNjAsIDB4NjA2NjY2M2MsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDBjNiwgMHhjNjY2MzYxZSwgMHgzNjY2YzZjNiwgMHgwMDAwMDAwMCwJLy8gNzQKKwkweDAwMDAwMDA2LCAweDA2MDYwNjA2LCAweDA2MDYwNmZlLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwYzYsIDB4ZWVmZWQ2YzYsIDB4YzZjNmM2YzYsIDB4MDAwMDAwMDAsCS8vIDc2CisJMHgwMDAwMDBjNiwgMHhjZWRlZmVmNiwgMHhlNmM2YzZjNiwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDM4LCAweDZjYzZjNmM2LCAweGM2YzY2YzM4LCAweDAwMDAwMDAwLAkvLyA3OAorCTB4MDAwMDAwN2UsIDB4YzZjNmM2N2UsIDB4MDYwNjA2MDYsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAzOCwgMHg2Y2M2YzZjNiwgMHhjNmQ2N2MzOCwgMHg2MDAwMDAwMCwJLy8gODAKKwkweDAwMDAwMDdlLCAweGM2YzZjNjdlLCAweDY2YzZjNmM2LCAweDAwMDAwMDAwLAorCTB4MDAwMDAwN2MsIDB4YzZjNjBjMzgsIDB4NjBjNmM2N2MsIDB4MDAwMDAwMDAsCS8vIDgyCisJMHgwMDAwMDA3ZSwgMHgxODE4MTgxOCwgMHgxODE4MTgxOCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMGM2LCAweGM2YzZjNmM2LCAweGM2YzZjNjdjLCAweDAwMDAwMDAwLAkvLyA4NAorCTB4MDAwMDAwYzYsIDB4YzZjNmM2YzYsIDB4YzY2YzM4MTAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDBjNiwgMHhjNmM2YzZjNiwgMHhkNmQ2ZmU2YywgMHgwMDAwMDAwMCwJLy8gODYKKwkweDAwMDAwMGM2LCAweGM2YzY2YzM4LCAweDZjYzZjNmM2LCAweDAwMDAwMDAwLAorCTB4MDAwMDAwNjYsIDB4NjY2NjY2NjYsIDB4M2MxODE4MTgsIDB4MDAwMDAwMDAsCS8vIDg4CisJMHgwMDAwMDBmZSwgMHhjMDYwMzAxOCwgMHgwYzA2MDZmZSwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDNjLCAweDBjMGMwYzBjLCAweDBjMGMwYzNjLCAweDAwMDAwMDAwLAkvLyA5MAorCTB4MDAwMDAwMDIsIDB4MDYwYzE4MzAsIDB4NjBjMDgwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAzYywgMHgzMDMwMzAzMCwgMHgzMDMwMzAzYywgMHgwMDAwMDAwMCwJLy8gOTIKKwkweDAwMDAxMDM4LCAweDZjYzYwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDBmZTAwMDAsCisJMHgwMDAwMTgxOCwgMHgzMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAzYzYwLCAweDdjNjY2NjdjLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMGMsIDB4MGMwYzdjY2MsIDB4Y2NjY2NjN2MsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwN2NjNiwgMHgwNjA2YzY3YywgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDYwLCAweDYwNjA3YzY2LCAweDY2NjY2NjdjLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDdjYzYsIDB4ZmUwNmM2N2MsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDA3OCwgMHgwYzBjMGMzZSwgMHgwYzBjMGMwYywgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDA3YzY2LCAweDY2NjY2NjdjLCAweDYwNjAzZTAwLAorCTB4MDAwMDAwMGMsIDB4MGMwYzdjY2MsIDB4Y2NjY2NjY2MsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAzMCwgMHgzMDAwMzgzMCwgMHgzMDMwMzA3OCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDMwLCAweDMwMDAzYzMwLCAweDMwMzAzMDMwLCAweDMwMzAxZjAwLAorCTB4MDAwMDAwMGMsIDB4MGMwY2NjNmMsIDB4M2M2Y2NjY2MsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAzMCwgMHgzMDMwMzAzMCwgMHgzMDMwMzAzMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDA2NmZlLCAweGQ2ZDZkNmQ2LCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDc4Y2MsIDB4Y2NjY2NjY2MsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwN2NjNiwgMHhjNmM2YzY3YywgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDA3Y2NjLCAweGNjY2NjYzdjLCAweDBjMGMwYzAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDdjNjYsIDB4NjY2NjY2N2MsIDB4NjA2MDYwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwNzZkYywgMHgwYzBjMGMwYywgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDA3Y2M2LCAweDFjNzBjNjdjLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MTgxOGZlMTgsIDB4MTgxODE4NzAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwNjY2NiwgMHg2NjY2NjYzYywgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDBjNmM2LCAweGM2NmMzODEwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMGM2ZDYsIDB4ZDZkNmZlNmMsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwYzY2YywgMHgzODM4NmNjNiwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDA2NjY2LCAweDY2NjY2NjdjLCAweDYwNjAzZTAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMGZlNjAsIDB4MzAxODBjZmUsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDA3MCwgMHgxODE4MTgwZSwgMHgxODE4MTg3MCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDE4LCAweDE4MTgxODAwLCAweDE4MTgxODE4LCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMGUsIDB4MTgxODE4NzAsIDB4MTgxODE4MGUsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDBkYywgMHg3NjAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMTAzODZjLCAweGM2YzZmZTAwLCAweDAwMDAwMDAwCit9OworCisjZW5kaWYgLyogX19TT0xPNjAxMF9PU0RfRk9OVF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtcDJtLmMgYi9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtcDJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI4MWYwNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC1wMm0uYwpAQCAtMCwwICsxLDIwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBCbHVlY2hlcnJ5LCBMTEMgd3d3LmJsdWVjaGVycnlkdnIuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQmVuIENvbGxpbnMgPGJjb2xsaW5zQGJsdWVjaGVycnkubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSAic29sbzYwMTAuaCIKKworLy8gI2RlZmluZSBTT0xPX1RFU1RfUDJNCisKK2ludCBzb2xvX3AybV9kbWEoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHU4IGlkLCBpbnQgd3IsCisJCSB2b2lkICpzeXNfYWRkciwgdTMyIGV4dF9hZGRyLCB1MzIgc2l6ZSkKK3sKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCWludCByZXQ7CisKKwlXQVJOX09OKCFzaXplKTsKKwlXQVJOX09OKGlkID49IFNPTE9fTlJfUDJNKTsKKwlpZiAoIXNpemUgfHwgaWQgPj0gU09MT19OUl9QMk0pCisJCXJldHVybiAtRUlOVkFMOworCisJZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShzb2xvX2Rldi0+cGRldiwgc3lzX2FkZHIsIHNpemUsCisJCQkJICB3ciA/IFBDSV9ETUFfVE9ERVZJQ0UgOiBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJcmV0ID0gc29sb19wMm1fZG1hX3Qoc29sb19kZXYsIGlkLCB3ciwgZG1hX2FkZHIsIGV4dF9hZGRyLCBzaXplKTsKKworCXBjaV91bm1hcF9zaW5nbGUoc29sb19kZXYtPnBkZXYsIGRtYV9hZGRyLCBzaXplLAorCQkJIHdyID8gUENJX0RNQV9UT0RFVklDRSA6IFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgc29sb19wMm1fZG1hX3Qoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHU4IGlkLCBpbnQgd3IsCisJCSAgIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHUzMiBleHRfYWRkciwgdTMyIHNpemUpCit7CisJc3RydWN0IHNvbG9fcDJtX2RldiAqcDJtX2RldjsKKwl1bnNpZ25lZCBpbnQgdGltZW91dCA9IDA7CisKKwlXQVJOX09OKCFzaXplKTsKKwlXQVJOX09OKGlkID49IFNPTE9fTlJfUDJNKTsKKwlpZiAoIXNpemUgfHwgaWQgPj0gU09MT19OUl9QMk0pCisJCXJldHVybiAtRUlOVkFMOworCisJcDJtX2RldiA9ICZzb2xvX2Rldi0+cDJtX2RldltpZF07CisKKwlkb3duKCZwMm1fZGV2LT5zZW0pOworCitzdGFydF9kbWE6CisJSU5JVF9DT01QTEVUSU9OKHAybV9kZXYtPmNvbXBsZXRpb24pOworCXAybV9kZXYtPmVycm9yID0gMDsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19QMk1fVEFSX0FEUihpZCksIGRtYV9hZGRyKTsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19QMk1fRVhUX0FEUihpZCksIGV4dF9hZGRyKTsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19QMk1fRVhUX0NGRyhpZCksCisJCSAgICAgICBTT0xPX1AyTV9DT1BZX1NJWkUoc2l6ZSA+PiAyKSk7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fUDJNX0NPTlRST0woaWQpLAorCQkgICAgICAgU09MT19QMk1fQlVSU1RfU0laRShTT0xPX1AyTV9CVVJTVF8yNTYpIHwKKwkJICAgICAgICh3ciA/IFNPTE9fUDJNX1dSSVRFIDogMCkgfCBTT0xPX1AyTV9UUkFOU19PTik7CisKKwl0aW1lb3V0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZwMm1fZGV2LT5jb21wbGV0aW9uLCBIWik7CisKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19QMk1fQ09OVFJPTChpZCksIDApOworCisJLyogWFhYIFJlYWxseSBsb29rcyB0byBtZSBsaWtlIHdlIHdpbGwgZ2V0IHN0dWNrIGhlcmUgaWYgYQorCSAqIHJlYWwgUENJIFAyTSBlcnJvciBvY2N1cnMgKi8KKwlpZiAocDJtX2Rldi0+ZXJyb3IpCisJCWdvdG8gc3RhcnRfZG1hOworCisJdXAoJnAybV9kZXYtPnNlbSk7CisKKwlyZXR1cm4gKHRpbWVvdXQgPT0gMCkgPyAtRUFHQUlOIDogMDsKK30KKworI2lmZGVmIFNPTE9fVEVTVF9QMk0KKworI2RlZmluZSBQMk1fVEVTVF9DSEFSCQkweGJlCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcDJtX3Rlc3Qoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHU4IGlkLAorCQkJCSAgIHUzMiBiYXNlLCBpbnQgc2l6ZSkKK3sKKwl1OCAqd3JfYnVmOworCXU4ICpyZF9idWY7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBsb25nIGVycl9jbnQgPSAwOworCisJd3JfYnVmID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdyX2J1ZikgeworCQlwcmludGsoU09MTzYwMTBfTkFNRSAiOiBGYWlsZWQgdG8gbWFsbG9jIGZvciBwMm1fdGVzdFxuIik7CisJCXJldHVybiBzaXplOworCX0KKworCXJkX2J1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZF9idWYpIHsKKwkJcHJpbnRrKFNPTE82MDEwX05BTUUgIjogRmFpbGVkIHRvIG1hbGxvYyBmb3IgcDJtX3Rlc3RcbiIpOworCQlrZnJlZSh3cl9idWYpOworCQlyZXR1cm4gc2l6ZTsKKwl9CisKKwltZW1zZXQod3JfYnVmLCBQMk1fVEVTVF9DSEFSLCBzaXplKTsKKwltZW1zZXQocmRfYnVmLCBQMk1fVEVTVF9DSEFSICsgMSwgc2l6ZSk7CisKKwlzb2xvX3AybV9kbWEoc29sb19kZXYsIGlkLCAxLCB3cl9idWYsIGJhc2UsIHNpemUpOworCXNvbG9fcDJtX2RtYShzb2xvX2RldiwgaWQsIDAsIHJkX2J1ZiwgYmFzZSwgc2l6ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCQlpZiAod3JfYnVmW2ldICE9IHJkX2J1ZltpXSkKKwkJCWVycl9jbnQrKzsKKworCWtmcmVlKHdyX2J1Zik7CisJa2ZyZWUocmRfYnVmKTsKKworCXJldHVybiBlcnJfY250OworfQorCisjZGVmaW5lIFRFU1RfQ0hVTktfU0laRQkJKDggKiAxMDI0KQorCitzdGF0aWMgdm9pZCBydW5fcDJtX3Rlc3Qoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGVycnMgPSAwOworCXUzMiBzaXplID0gU09MT19KUEVHX0VYVF9BRERSKHNvbG9fZGV2KSArIFNPTE9fSlBFR19FWFRfU0laRShzb2xvX2Rldik7CisJaW50IGksIGQ7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVGVzdGluZyAldSBieXRlcyBvZiBleHRlcm5hbCByYW1cbiIsCisJICAgICAgIFNPTE82MDEwX05BTUUsIHNpemUpOworCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gVEVTVF9DSFVOS19TSVpFKQorCQlmb3IgKGQgPSAwOyBkIDwgNDsgZCsrKQorCQkJZXJycyArPSBwMm1fdGVzdChzb2xvX2RldiwgZCwgaSwgVEVTVF9DSFVOS19TSVpFKTsKKworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBGb3VuZCAlbGx1IGVycm9ycyBkdXJpbmcgcDJtIHRlc3RcbiIsCisJICAgICAgIFNPTE82MDEwX05BTUUsIGVycnMpOworCisJcmV0dXJuOworfQorI2Vsc2UKKyNkZWZpbmUgcnVuX3AybV90ZXN0KF9fc29sbykJZG97fXdoaWxlKDApCisjZW5kaWYKKwordm9pZCBzb2xvX3AybV9pc3Ioc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIGludCBpZCkKK3sKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19JUlFfU1RBVCwgU09MT19JUlFfUDJNKGlkKSk7CisJY29tcGxldGUoJnNvbG9fZGV2LT5wMm1fZGV2W2lkXS5jb21wbGV0aW9uKTsKK30KKwordm9pZCBzb2xvX3AybV9lcnJvcl9pc3Ioc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHUzMiBzdGF0dXMpCit7CisJc3RydWN0IHNvbG9fcDJtX2RldiAqcDJtX2RldjsKKwlpbnQgaTsKKworCWlmICghKHN0YXR1cyAmIFNPTE9fUENJX0VSUl9QMk0pKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgU09MT19OUl9QMk07IGkrKykgeworCQlwMm1fZGV2ID0gJnNvbG9fZGV2LT5wMm1fZGV2W2ldOworCQlwMm1fZGV2LT5lcnJvciA9IDE7CisJCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1AyTV9DT05UUk9MKGkpLCAwKTsKKwkJY29tcGxldGUoJnAybV9kZXYtPmNvbXBsZXRpb24pOworCX0KK30KKwordm9pZCBzb2xvX3AybV9leGl0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFNPTE9fTlJfUDJNOyBpKyspCisJCXNvbG82MDEwX2lycV9vZmYoc29sb19kZXYsIFNPTE9fSVJRX1AyTShpKSk7Cit9CisKK2ludCBzb2xvX3AybV9pbml0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCXN0cnVjdCBzb2xvX3AybV9kZXYgKnAybV9kZXY7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgU09MT19OUl9QMk07IGkrKykgeworCQlwMm1fZGV2ID0gJnNvbG9fZGV2LT5wMm1fZGV2W2ldOworCisJCWluaXRfTVVURVgoJnAybV9kZXYtPnNlbSk7CisJCWluaXRfY29tcGxldGlvbigmcDJtX2Rldi0+Y29tcGxldGlvbik7CisKKwkJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fUDJNX0RFU19BRFIoaSksCisJCQkgICAgICAgX19wYShwMm1fZGV2LT5kZXNjKSk7CisKKwkJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fUDJNX0NPTlRST0woaSksIDApOworCQlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19QMk1fQ09ORklHKGkpLAorCQkJICAgICAgIFNPTE9fUDJNX0NTQ18xNkJJVF81NjUgfAorCQkJICAgICAgIFNPTE9fUDJNX0RNQV9JTlRFUlZBTCgwKSB8CisJCQkgICAgICAgU09MT19QMk1fUENJX01BU1RFUl9NT0RFKTsKKwkJc29sbzYwMTBfaXJxX29uKHNvbG9fZGV2LCBTT0xPX0lSUV9QMk0oaSkpOworCX0KKworCXJ1bl9wMm1fdGVzdChzb2xvX2Rldik7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC1yZWdpc3RlcnMuaCBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC1yZWdpc3RlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzlkM2M2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLXJlZ2lzdGVycy5oCkBAIC0wLDAgKzEsNjU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEJsdWVjaGVycnksIExMQyB3d3cuYmx1ZWNoZXJyeWR2ci5jb20KKyAqIENvcHlyaWdodCAoQykgMjAxMCBCZW4gQ29sbGlucyA8YmNvbGxpbnNAYmx1ZWNoZXJyeS5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fU09MTzYwMTBfUkVHSVNURVJTX0gKKyNkZWZpbmUgX19TT0xPNjAxMF9SRUdJU1RFUlNfSAorCisjaW5jbHVkZSAic29sbzYwMTAtb2Zmc2V0cy5oIgorCisvKiBHbG9iYWwgNjAxMCBzeXN0ZW0gY29uZmlndXJhdGlvbiAqLworI2RlZmluZSBTT0xPX1NZU19DRkcJCQkJMHgwMDAwCisjZGVmaW5lICAgU09MT19TWVNfQ0ZHX0ZPVVRfRU4JCQkweDAwMDAwMDAxCisjZGVmaW5lICAgU09MT19TWVNfQ0ZHX1BMTF9CWVBBU1MJCTB4MDAwMDAwMDIKKyNkZWZpbmUgICBTT0xPX1NZU19DRkdfUExMX1BXRE4JCQkweDAwMDAwMDA0CisjZGVmaW5lICAgU09MT19TWVNfQ0ZHX09VVERJVihfX24pCQkoKChfX24pICYgMHgwMDMpIDw8IDMpCisjZGVmaW5lICAgU09MT19TWVNfQ0ZHX0ZFRURCQUNLRElWKF9fbikJCSgoKF9fbikgJiAweDFmZikgPDwgNSkKKyNkZWZpbmUgICBTT0xPX1NZU19DRkdfSU5QVVRESVYoX19uKQkJKCgoX19uKSAmIDB4MDFmKSA8PCAxNCkKKyNkZWZpbmUgICBTT0xPX1NZU19DRkdfQ0xPQ0tfRElWCQkweDAwMDgwMDAwCisjZGVmaW5lICAgU09MT19TWVNfQ0ZHX05DTEtfREVMQVkoX19uKQkJKCgoX19uKSAmIDB4MDAzKSA8PCAyNCkKKyNkZWZpbmUgICBTT0xPX1NZU19DRkdfUENMS19ERUxBWShfX24pCQkoKChfX24pICYgMHgwMGYpIDw8IDI2KQorI2RlZmluZSAgIFNPTE9fU1lTX0NGR19TRFJBTTY0QklUCQkweDQwMDAwMDAwCisjZGVmaW5lICAgU09MT19TWVNfQ0ZHX1JFU0VUCQkJMHg4MDAwMDAwMAorCisjZGVmaW5lCVNPTE9fRE1BX0NUUkwJCQkJMHgwMDA0CisjZGVmaW5lCSAgU09MT19ETUFfQ1RSTF9SRUZSRVNIX0NZQ0xFKG4pCSgobik8PDgpCisvKiAwPTE2LzMyTUIsIDE9MzIvNjRNQiwgMj02NC8xMjhNQiwgMz0xMjgvMjU2TUIgKi8KKyNkZWZpbmUJICBTT0xPX0RNQV9DVFJMX1NEUkFNX1NJWkUobikJCSgobik8PDYpCisjZGVmaW5lCSAgU09MT19ETUFfQ1RSTF9TRFJBTV9DTEtfSU5WRVJUCSgxPDw1KQorI2RlZmluZQkgIFNPTE9fRE1BX0NUUkxfU1RST0JFX1NFTEVDVAkJKDE8PDQpCisjZGVmaW5lCSAgU09MT19ETUFfQ1RSTF9SRUFEX0RBVEFfU0VMRUNUCSgxPDwzKQorI2RlZmluZQkgIFNPTE9fRE1BX0NUUkxfUkVBRF9DTEtfU0VMRUNUCQkoMTw8MikKKyNkZWZpbmUJICBTT0xPX0RNQV9DVFJMX0xBVEVOQ1kobikJCSgobik8PDApCisKKyNkZWZpbmUgU09MT19TWVNfVkNMSwkJCQkweDAwMEMKKyNkZWZpbmUJICBTT0xPX1ZDTEtfSU5WRVJUCQkJKDE8PDIyKQorLyogMD1zeXNfY2xrLzQsIDE9c3lzX2Nsay8yLCAyPWNsa19pbi8yIG9mIHN5c3RlbSBpbnB1dCAqLworI2RlZmluZQkgIFNPTE9fVkNMS19TRUxFQ1QobikJCQkoKG4pPDwyMCkKKyNkZWZpbmUJICBTT0xPX1ZDTEtfVklOMTQxNV9ERUxBWShuKQkJKChuKTw8MTQpCisjZGVmaW5lCSAgU09MT19WQ0xLX1ZJTjEyMTNfREVMQVkobikJCSgobik8PDEyKQorI2RlZmluZQkgIFNPTE9fVkNMS19WSU4xMDExX0RFTEFZKG4pCQkoKG4pPDwxMCkKKyNkZWZpbmUJICBTT0xPX1ZDTEtfVklOMDgwOV9ERUxBWShuKQkJKChuKTw8OCkKKyNkZWZpbmUJICBTT0xPX1ZDTEtfVklOMDYwN19ERUxBWShuKQkJKChuKTw8NikKKyNkZWZpbmUJICBTT0xPX1ZDTEtfVklOMDQwNV9ERUxBWShuKQkJKChuKTw8NCkKKyNkZWZpbmUJICBTT0xPX1ZDTEtfVklOMDIwM19ERUxBWShuKQkJKChuKTw8MikKKyNkZWZpbmUJICBTT0xPX1ZDTEtfVklOMDAwMV9ERUxBWShuKQkJKChuKTw8MCkKKworI2RlZmluZSBTT0xPX0lSUV9TVEFUCQkJCTB4MDAxMAorI2RlZmluZSBTT0xPX0lSUV9FTkFCTEUJCQkJMHgwMDE0CisjZGVmaW5lCSAgU09MT19JUlFfUDJNKG4pCQkJKDE8PCgobikrMTcpKQorI2RlZmluZQkgIFNPTE9fSVJRX0dQSU8JCQkJKDE8PDE2KQorI2RlZmluZQkgIFNPTE9fSVJRX1ZJREVPX0xPU1MJCQkoMTw8MTUpCisjZGVmaW5lCSAgU09MT19JUlFfVklERU9fSU4JCQkoMTw8MTQpCisjZGVmaW5lCSAgU09MT19JUlFfTU9USU9OCQkJKDE8PDEzKQorI2RlZmluZQkgIFNPTE9fSVJRX0FUQV9DTUQJCQkoMTw8MTIpCisjZGVmaW5lCSAgU09MT19JUlFfQVRBX0RJUgkJCSgxPDwxMSkKKyNkZWZpbmUJICBTT0xPX0lSUV9QQ0lfRVJSCQkJKDE8PDEwKQorI2RlZmluZQkgIFNPTE9fSVJRX1BTMl8xCQkJKDE8PDkpCisjZGVmaW5lCSAgU09MT19JUlFfUFMyXzAJCQkoMTw8OCkKKyNkZWZpbmUJICBTT0xPX0lSUV9TUEkJCQkJKDE8PDcpCisjZGVmaW5lCSAgU09MT19JUlFfSUlDCQkJCSgxPDw2KQorI2RlZmluZQkgIFNPTE9fSVJRX1VBUlQobikJCQkoMTw8KChuKSArIDQpKQorI2RlZmluZQkgIFNPTE9fSVJRX0c3MjMJCQkJKDE8PDMpCisjZGVmaW5lCSAgU09MT19JUlFfREVDT0RFUgkJCSgxPDwxKQorI2RlZmluZQkgIFNPTE9fSVJRX0VOQ09ERVIJCQkoMTw8MCkKKworI2RlZmluZSBTT0xPX0NISVBfT1BUSU9OCQkJMHgwMDFDCisjZGVmaW5lICAgU09MT19DSElQX0lEX01BU0sJCQkweDAwMDAwMDA3CisKKyNkZWZpbmUgU09MT19FRVBST01fQ1RSTAkJCTB4MDA2MAorI2RlZmluZQkgIFNPTE9fRUVQUk9NX0FDQ0VTU19FTgkJCSgxPDw3KQorI2RlZmluZQkgIFNPTE9fRUVQUk9NX0NTCQkJKDE8PDMpCisjZGVmaW5lCSAgU09MT19FRVBST01fQ0xLCQkJKDE8PDIpCisjZGVmaW5lCSAgU09MT19FRVBST01fRE8JCQkoMTw8MSkKKyNkZWZpbmUJICBTT0xPX0VFUFJPTV9ESQkJCSgxPDwwKQorI2RlZmluZQkgIFNPTE9fRUVQUk9NX0VOQUJMRQkJCShFRVBST01fQUNDRVNTX0VOIHwgRUVQUk9NX0NTKQorCisjZGVmaW5lIFNPTE9fUENJX0VSUgkJCQkweDAwNzAKKyNkZWZpbmUgICBTT0xPX1BDSV9FUlJfRkFUQUwJCQkweDAwMDAwMDAxCisjZGVmaW5lICAgU09MT19QQ0lfRVJSX1BBUklUWQkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgICBTT0xPX1BDSV9FUlJfVEFSR0VUCQkJMHgwMDAwMDAwNAorI2RlZmluZSAgIFNPTE9fUENJX0VSUl9USU1FT1VUCQkJMHgwMDAwMDAwOAorI2RlZmluZSAgIFNPTE9fUENJX0VSUl9QMk0JCQkweDAwMDAwMDEwCisjZGVmaW5lICAgU09MT19QQ0lfRVJSX0FUQQkJCTB4MDAwMDAwMjAKKyNkZWZpbmUgICBTT0xPX1BDSV9FUlJfUDJNX0RFU0MJCQkweDAwMDAwMDQwCisjZGVmaW5lICAgU09MT19QQ0lfRVJSX0ZTTTAoX19zKQkJKCgoX19zKSA+PiAxNikgJiAweDBmKQorI2RlZmluZSAgIFNPTE9fUENJX0VSUl9GU00xKF9fcykJCSgoKF9fcykgPj4gMjApICYgMHgwZikKKyNkZWZpbmUgICBTT0xPX1BDSV9FUlJfRlNNMihfX3MpCQkoKChfX3MpID4+IDI0KSAmIDB4MWYpCisKKyNkZWZpbmUgU09MT19QMk1fQkFTRQkJCQkweDAwODAKKworI2RlZmluZSBTT0xPX1AyTV9DT05GSUcobikJCQkoMHgwMDgwICsgKChuKSoweDIwKSkKKyNkZWZpbmUJICBTT0xPX1AyTV9ETUFfSU5URVJWQUwobikJCSgobik8PDYpLyogTiozMiBjbG9ja3MgKi8KKyNkZWZpbmUJICBTT0xPX1AyTV9DU0NfQllURV9SRU9SREVSCQkoMTw8NSkJLyogQkdSIC0+IFJHQiAqLworLyogMDpyPVsxNDoxMF0gZz1bOTo1XSBiPVs0OjBdLCAxOnI9WzE1OjExXSBnPVsxMDo1XSBiPVs0OjBdICovCisjZGVmaW5lCSAgU09MT19QMk1fQ1NDXzE2QklUXzU2NQkJKDE8PDQpCisjZGVmaW5lCSAgU09MT19QMk1fVVZfU1dBUAkJCSgxPDwzKQorI2RlZmluZQkgIFNPTE9fUDJNX1BDSV9NQVNURVJfTU9ERQkJKDE8PDIpCisjZGVmaW5lCSAgU09MT19QMk1fREVTQ19JTlRSX09QVAkJKDE8PDEpCS8qIDE6RW1wdHksIDA6RWFjaCAqLworI2RlZmluZQkgIFNPTE9fUDJNX0RFU0NfTU9ERQkJCSgxPDwwKQorCisjZGVmaW5lIFNPTE9fUDJNX0RFU19BRFIobikJCQkoMHgwMDg0ICsgKChuKSoweDIwKSkKKworI2RlZmluZSBTT0xPX1AyTV9ERVNDX0lEKG4pCQkJKDB4MDA4OCArICgobikqMHgyMCkpCisjZGVmaW5lCSAgU09MT19QMk1fVVBEQVRFX0lEKG4pCQkJKChuKTw8MCkKKworI2RlZmluZSBTT0xPX1AyTV9TVEFUVVMobikJCQkoMHgwMDhDICsgKChuKSoweDIwKSkKKyNkZWZpbmUJICBTT0xPX1AyTV9DT01NQU5EX0RPTkUJCQkoMTw8OCkKKyNkZWZpbmUJICBTT0xPX1AyTV9DVVJSRU5UX0lEKHN0YXQpCQkoMHhmZiAmIChzdGF0KSkKKworI2RlZmluZSBTT0xPX1AyTV9DT05UUk9MKG4pCQkJKDB4MDA5MCArICgobikqMHgyMCkpCisjZGVmaW5lCSAgU09MT19QMk1fUENJX0lOQyhuKQkJCSgobik8PDIwKQorI2RlZmluZQkgIFNPTE9fUDJNX1JFUEVBVChuKQkJCSgobik8PDEwKQorLyogMDo1MTIsIDE6MjU2LCAyOjEyOCwgMzo2NCwgNDozMiwgNToxMjgoMnBhZ2UpICovCisjZGVmaW5lCSAgU09MT19QMk1fQlVSU1RfU0laRShuKQkJKChuKTw8NykKKyNkZWZpbmUJICAgIFNPTE9fUDJNX0JVUlNUXzUxMgkJCTAKKyNkZWZpbmUJICAgIFNPTE9fUDJNX0JVUlNUXzI1NgkJCTEKKyNkZWZpbmUJICAgIFNPTE9fUDJNX0JVUlNUXzEyOAkJCTIKKyNkZWZpbmUJICAgIFNPTE9fUDJNX0JVUlNUXzY0CQkJMworI2RlZmluZQkgICAgU09MT19QMk1fQlVSU1RfMzIJCQk0CisjZGVmaW5lCSAgU09MT19QMk1fQ1NDXzE2QklUCQkJKDE8PDYpCS8qIDA6MjRiaXQsIDE6MTZiaXQgKi8KKy8qIDA6WVswXTwtMChPRkYpLCAxOllbMF08LTEoT04pLCAyOllbMF08LUdbMF0sIDM6WVswXTwtQml0WzE1XSAqLworI2RlZmluZQkgIFNPTE9fUDJNX0FMUEhBX01PREUobikJCSgobik8PDQpCisjZGVmaW5lCSAgU09MT19QMk1fQ1NDX09OCQkJKDE8PDMpCisjZGVmaW5lCSAgU09MT19QMk1fSU5URVJSVVBUX1JFUQkJKDE8PDIpCisjZGVmaW5lCSAgU09MT19QMk1fV1JJVEUJCQkoMTw8MSkKKyNkZWZpbmUJICBTT0xPX1AyTV9UUkFOU19PTgkJCSgxPDwwKQorCisjZGVmaW5lIFNPTE9fUDJNX0VYVF9DRkcobikJCQkoMHgwMDk0ICsgKChuKSoweDIwKSkKKyNkZWZpbmUJICBTT0xPX1AyTV9FWFRfSU5DKG4pCQkJKChuKTw8MjApCisjZGVmaW5lCSAgU09MT19QMk1fQ09QWV9TSVpFKG4pCQkJKChuKTw8MCkKKworI2RlZmluZSBTT0xPX1AyTV9UQVJfQURSKG4pCQkJKDB4MDA5OCArICgobikqMHgyMCkpCisKKyNkZWZpbmUgU09MT19QMk1fRVhUX0FEUihuKQkJCSgweDAwOUMgKyAoKG4pKjB4MjApKQorCisjZGVmaW5lIFNPTE9fUDJNX0JVRkZFUihpKQkJCSgweDIwMDAgKyAoKGkpKjQpKQorCisjZGVmaW5lIFNPTE9fVklfQ0hfU1dJVENIXzAJCQkweDAxMDAKKyNkZWZpbmUgU09MT19WSV9DSF9TV0lUQ0hfMQkJCTB4MDEwNAorI2RlZmluZSBTT0xPX1ZJX0NIX1NXSVRDSF8yCQkJMHgwMTA4CisKKyNkZWZpbmUJU09MT19WSV9DSF9FTkEJCQkJMHgwMTBDCisjZGVmaW5lCVNPTE9fVklfQ0hfRk9STUFUCQkJMHgwMTEwCisjZGVmaW5lCSAgU09MT19WSV9GRF9TRUxfTUFTSyhuKQkJKChuKTw8MTYpCisjZGVmaW5lCSAgU09MT19WSV9QUk9HX01BU0sobikJCQkoKG4pPDwwKQorCisjZGVmaW5lIFNPTE9fVklfRk1UX0NGRwkJCQkweDAxMTQKKyNkZWZpbmUJICBTT0xPX1ZJX0ZNVF9DSEVDS19WQ09VTlQJCSgxPDwzMSkKKyNkZWZpbmUJICBTT0xPX1ZJX0ZNVF9DSEVDS19IQ09VTlQJCSgxPDwzMCkKKyNkZWZpbmUgICBTT0xPX1ZJX0ZNVF9URVNUX1NJR05BTAkJKDE8PDI4KQorCisjZGVmaW5lCVNPTE9fVklfUEFHRV9TVwkJCQkweDAxMTgKKyNkZWZpbmUJICBTT0xPX0ZJX0lOVl9ESVNQX0xJVkUobikJCSgobik8PDgpCisjZGVmaW5lCSAgU09MT19GSV9JTlZfRElTUF9PVVQobikJCSgobik8PDcpCisjZGVmaW5lCSAgU09MT19ESVNQX1NZTkNfRkkobikJCQkoKG4pPDw2KQorI2RlZmluZQkgIFNPTE9fUElQX1BBR0VfQUREKG4pCQkJKChuKTw8MykKKyNkZWZpbmUJICBTT0xPX05PUk1BTF9QQUdFX0FERChuKQkJKChuKTw8MCkKKworI2RlZmluZQlTT0xPX1ZJX0FDVF9JX1AJCQkJMHgwMTFDCisjZGVmaW5lCVNPTE9fVklfQUNUX0lfUwkJCQkweDAxMjAKKyNkZWZpbmUJU09MT19WSV9BQ1RfUAkJCQkweDAxMjQKKyNkZWZpbmUJICBTT0xPX1ZJX0ZJX0lOVkVSVAkJCSgxPDwzMSkKKyNkZWZpbmUJICBTT0xPX1ZJX0hfU1RBUlQobikJCQkoKG4pPDwyMSkKKyNkZWZpbmUJICBTT0xPX1ZJX1ZfU1RBUlQobikJCQkoKG4pPDwxMSkKKyNkZWZpbmUJICBTT0xPX1ZJX1ZfU1RPUChuKQkJCSgobik8PDApCisKKyNkZWZpbmUgU09MT19WSV9TVEFUVVMwCQkJCTB4MDEyOAorI2RlZmluZSAgIFNPTE9fVklfU1RBVFVTMF9QQUdFKF9fbikJCSgoX19uKSAmIDB4MDcpCisjZGVmaW5lIFNPTE9fVklfU1RBVFVTMQkJCQkweDAxMkMKKworLyogWFhYOiBNaWdodCBiZSBiZXR0ZXIgb2ZmIGluIGtlcm5lbCBsZXZlbCBkaXNwLmggKi8KKyNkZWZpbmUgRElTUF9QQUdFKHN0YXQpCQkJCSgoc3RhdCkgJiAweDA3KQorCisjZGVmaW5lIFNPTE9fVklfUEJfQ09ORklHCQkJMHgwMTMwCisjZGVmaW5lCSAgU09MT19WSV9QQl9VU0VSX01PREUJCQkoMTw8MSkKKyNkZWZpbmUJICBTT0xPX1ZJX1BCX1BBTAkJCSgxPDwwKQorI2RlZmluZSBTT0xPX1ZJX1BCX1JBTkdFX0hWCQkJMHgwMTM0CisjZGVmaW5lCSAgU09MT19WSV9QQl9IU0laRShoKQkJCSgoaCk8PDEyKQorI2RlZmluZQkgIFNPTE9fVklfUEJfVlNJWkUodikJCQkoKHYpPDwwKQorI2RlZmluZSBTT0xPX1ZJX1BCX0FDVF9ICQkJMHgwMTM4CisjZGVmaW5lCSAgU09MT19WSV9QQl9IU1RBUlQobikJCQkoKG4pPDwxMikKKyNkZWZpbmUJICBTT0xPX1ZJX1BCX0hTVE9QKG4pCQkJKChuKTw8MCkKKyNkZWZpbmUgU09MT19WSV9QQl9BQ1RfVgkJCTB4MDEzQworI2RlZmluZQkgIFNPTE9fVklfUEJfVlNUQVJUKG4pCQkJKChuKTw8MTIpCisjZGVmaW5lCSAgU09MT19WSV9QQl9WU1RPUChuKQkJCSgobik8PDApCisKKyNkZWZpbmUJU09MT19WSV9NT1NBSUMoY2gpCQkJKDB4MDE0MCArICgoY2gpKjQpKQorI2RlZmluZQkgIFNPTE9fVklfTU9TQUlDX1NYKHgpCQkJKCh4KTw8MjQpCisjZGVmaW5lCSAgU09MT19WSV9NT1NBSUNfRVgoeCkJCQkoKHgpPDwxNikKKyNkZWZpbmUJICBTT0xPX1ZJX01PU0FJQ19TWSh4KQkJCSgoeCk8PDgpCisjZGVmaW5lCSAgU09MT19WSV9NT1NBSUNfRVkoeCkJCQkoKHgpPDwwKQorCisjZGVmaW5lCVNPTE9fVklfV0lOX0NUUkwwKGNoKQkJCSgweDAxODAgKyAoKGNoKSo0KSkKKyNkZWZpbmUJU09MT19WSV9XSU5fQ1RSTDEoY2gpCQkJKDB4MDFDMCArICgoY2gpKjQpKQorCisjZGVmaW5lCSAgU09MT19WSV9XSU5fQ0hBTk5FTChuKQkJKChuKTw8MjgpCisKKyNkZWZpbmUJICBTT0xPX1ZJX1dJTl9QSVAobikJCQkoKG4pPDwyNykKKyNkZWZpbmUJICBTT0xPX1ZJX1dJTl9TQ0FMRShuKQkJCSgobik8PDI0KQorCisjZGVmaW5lCSAgU09MT19WSV9XSU5fU1goeCkJCQkoKHgpPDwxMikKKyNkZWZpbmUJICBTT0xPX1ZJX1dJTl9FWCh4KQkJCSgoeCk8PDApCisKKyNkZWZpbmUJICBTT0xPX1ZJX1dJTl9TWSh4KQkJCSgoeCk8PDEyKQorI2RlZmluZQkgIFNPTE9fVklfV0lOX0VZKHgpCQkJKCh4KTw8MCkKKworI2RlZmluZQlTT0xPX1ZJX1dJTl9PTihjaCkJCQkoMHgwMjAwICsgKChjaCkqNCkpCisKKyNkZWZpbmUgU09MT19WSV9XSU5fU1cJCQkJMHgwMjQwCisjZGVmaW5lIFNPTE9fVklfV0lOX0xJVkVfQVVUT19NVVRFCQkweDAyNDQKKworI2RlZmluZQlTT0xPX1ZJX01PVF9BRFIJCQkJMHgwMjYwCisjZGVmaW5lCSAgU09MT19WSV9NT1RJT05fRU4obWFzaykJCSgobWFzayk8PDE2KQorI2RlZmluZQlTT0xPX1ZJX01PVF9DVFJMCQkJMHgwMjY0CisjZGVmaW5lCSAgU09MT19WSV9NT1RJT05fRlJBTUVfQ09VTlQobikJCSgobik8PDI0KQorI2RlZmluZQkgIFNPTE9fVklfTU9USU9OX1NBTVBMRV9MRU5HVEgobikJKChuKTw8MTYpCisjZGVmaW5lCSAgU09MT19WSV9NT1RJT05fSU5UUl9TVEFSVF9TVE9QCSgxPDwxNSkKKyNkZWZpbmUJICBTT0xPX1ZJX01PVElPTl9GUkVFWkVfREFUQQkJKDE8PDE0KQorI2RlZmluZQkgIFNPTE9fVklfTU9USU9OX1NBTVBMRV9DT1VOVChuKQkoKG4pPDwwKQorI2RlZmluZSBTT0xPX1ZJX01PVF9DTEVBUgkJCTB4MDI2OAorI2RlZmluZSBTT0xPX1ZJX01PVF9TVEFUVVMJCQkweDAyNkMKKyNkZWZpbmUJICBTT0xPX1ZJX01PVElPTl9DTlQobikJCQkoKG4pPDwwKQorI2RlZmluZSBTT0xPX1ZJX01PVElPTl9CT1JERVIJCQkweDAyNzAKKyNkZWZpbmUgU09MT19WSV9NT1RJT05fQkFSCQkJMHgwMjc0CisjZGVmaW5lCSAgU09MT19WSV9NT1RJT05fWV9TRVQJCQkoMTw8MjkpCisjZGVmaW5lCSAgU09MT19WSV9NT1RJT05fWV9BREQJCQkoMTw8MjgpCisjZGVmaW5lCSAgU09MT19WSV9NT1RJT05fQ0JfU0VUCQkJKDE8PDI3KQorI2RlZmluZQkgIFNPTE9fVklfTU9USU9OX0NCX0FERAkJCSgxPDwyNikKKyNkZWZpbmUJICBTT0xPX1ZJX01PVElPTl9DUl9TRVQJCQkoMTw8MjUpCisjZGVmaW5lCSAgU09MT19WSV9NT1RJT05fQ1JfQURECQkJKDE8PDI0KQorI2RlZmluZQkgIFNPTE9fVklfTU9USU9OX1lfVkFMVUUodikJCSgodik8PDE2KQorI2RlZmluZQkgIFNPTE9fVklfTU9USU9OX0NCX1ZBTFVFKHYpCQkoKHYpPDw4KQorI2RlZmluZQkgIFNPTE9fVklfTU9USU9OX0NSX1ZBTFVFKHYpCQkoKHYpPDwwKQorCisjZGVmaW5lCVNPTE9fVk9fRk1UX0VOQwkJCQkweDAzMDAKKyNkZWZpbmUJICBTT0xPX1ZPX1NDQU5fTU9ERV9QUk9HUkVTU0lWRQkJKDE8PDMxKQorI2RlZmluZQkgIFNPTE9fVk9fRk1UX1RZUEVfUEFMCQkJKDE8PDMwKQorI2RlZmluZSAgIFNPTE9fVk9fRk1UX1RZUEVfTlRTQwkJCTAKKyNkZWZpbmUJICBTT0xPX1ZPX1VTRVJfU0VUCQkJKDE8PDI5KQorCisjZGVmaW5lCSAgU09MT19WT19GSV9DSEFOR0UJCQkoMTw8MjApCisjZGVmaW5lCSAgU09MT19WT19VU0VSX0NPTE9SX1NFVF9WU1lOQwkJKDE8PDE5KQorI2RlZmluZQkgIFNPTE9fVk9fVVNFUl9DT0xPUl9TRVRfSFNZTkMJCSgxPDwxOCkKKyNkZWZpbmUJICBTT0xPX1ZPX1VTRVJfQ09MT1JfU0VUX05BVgkJKDE8PDE3KQorI2RlZmluZQkgIFNPTE9fVk9fVVNFUl9DT0xPUl9TRVRfTkFICQkoMTw8MTYpCisjZGVmaW5lCSAgU09MT19WT19OQV9DT0xPUl9ZKFkpCQkJKChZKTw8OCkKKyNkZWZpbmUJICBTT0xPX1ZPX05BX0NPTE9SX0NCKENCKQkJKCgoQ0IpLzE2KTw8NCkKKyNkZWZpbmUJICBTT0xPX1ZPX05BX0NPTE9SX0NSKENSKQkJKCgoQ1IpLzE2KTw8MCkKKworI2RlZmluZQlTT0xPX1ZPX0FDVF9ICQkJCTB4MDMwNAorI2RlZmluZQkgIFNPTE9fVk9fSF9CTEFOSyhuKQkJCSgobik8PDIyKQorI2RlZmluZQkgIFNPTE9fVk9fSF9TVEFSVChuKQkJCSgobik8PDExKQorI2RlZmluZQkgIFNPTE9fVk9fSF9TVE9QKG4pCQkJKChuKTw8MCkKKworI2RlZmluZQlTT0xPX1ZPX0FDVF9WCQkJCTB4MDMwOAorI2RlZmluZQkgIFNPTE9fVk9fVl9CTEFOSyhuKQkJCSgobik8PDIyKQorI2RlZmluZQkgIFNPTE9fVk9fVl9TVEFSVChuKQkJCSgobik8PDExKQorI2RlZmluZQkgIFNPTE9fVk9fVl9TVE9QKG4pCQkJKChuKTw8MCkKKworI2RlZmluZQlTT0xPX1ZPX1JBTkdFX0hWCQkJMHgwMzBDCisjZGVmaW5lCSAgU09MT19WT19TWU5DX0lOVkVSVAkJCSgxPDwyNCkKKyNkZWZpbmUJICBTT0xPX1ZPX0hTWU5DX0lOVkVSVAkJCSgxPDwyMykKKyNkZWZpbmUJICBTT0xPX1ZPX1ZTWU5DX0lOVkVSVAkJCSgxPDwyMikKKyNkZWZpbmUJICBTT0xPX1ZPX0hfTEVOKG4pCQkJKChuKTw8MTEpCisjZGVmaW5lCSAgU09MT19WT19WX0xFTihuKQkJCSgobik8PDApCisKKyNkZWZpbmUJU09MT19WT19ESVNQX0NUUkwJCQkweDAzMTAKKyNkZWZpbmUJICBTT0xPX1ZPX0RJU1BfT04JCQkoMTw8MzEpCisjZGVmaW5lCSAgU09MT19WT19ESVNQX0VSQVNFX0NPVU5UKG4pCQkoKG4mMHhmKTw8MjQpCisjZGVmaW5lCSAgU09MT19WT19ESVNQX0RPVUJMRV9TQ0FOCQkoMTw8MjIpCisjZGVmaW5lCSAgU09MT19WT19ESVNQX1NJTkdMRV9QQUdFCQkoMTw8MjEpCisjZGVmaW5lCSAgU09MT19WT19ESVNQX0JBU0UobikJCQkoKChuKT4+MTYpICYgMHhmZmZmKQorCisjZGVmaW5lIFNPTE9fVk9fRElTUF9FUkFTRQkJCTB4MDMxNAorI2RlZmluZQkgIFNPTE9fVk9fRElTUF9FUkFTRV9PTgkJCSgxPDwwKQorCisjZGVmaW5lCVNPTE9fVk9fWk9PTV9DVFJMCQkJMHgwMzE4CisjZGVmaW5lCSAgU09MT19WT19aT09NX1ZFUl9PTgkJCSgxPDwyNCkKKyNkZWZpbmUJICBTT0xPX1ZPX1pPT01fSE9SX09OCQkJKDE8PDIzKQorI2RlZmluZQkgIFNPTE9fVk9fWk9PTV9WX0NPTVAJCQkoMTw8MjIpCisjZGVmaW5lCSAgU09MT19WT19aT09NX1NYKGgpCQkJKCgoaCkvMik8PDExKQorI2RlZmluZQkgIFNPTE9fVk9fWk9PTV9TWSh2KQkJCSgoKHYpLzIpPDwwKQorCisjZGVmaW5lIFNPTE9fVk9fRlJFRVpFX0NUUkwJCQkweDAzMUMKKyNkZWZpbmUJICBTT0xPX1ZPX0ZSRUVaRV9PTgkJCSgxPDwxKQorI2RlZmluZQkgIFNPTE9fVk9fRlJFRVpFX0lOVEVSUE9MQVRJT04JCSgxPDwwKQorCisjZGVmaW5lCVNPTE9fVk9fQktHX0NPTE9SCQkJMHgwMzIwCisjZGVmaW5lCSAgU09MT19CR19ZKHkpCQkJCSgoeSk8PDE2KQorI2RlZmluZQkgIFNPTE9fQkdfVSh1KQkJCQkoKHUpPDw4KQorI2RlZmluZQkgIFNPTE9fQkdfVih2KQkJCQkoKHYpPDwwKQorCisjZGVmaW5lCVNPTE9fVk9fREVJTlRFUkxBQ0UJCQkweDAzMjQKKyNkZWZpbmUJICBTT0xPX1ZPX0RFSU5URVJMQUNFX1RIUkVTSE9MRChuKQkoKG4pPDw4KQorI2RlZmluZQkgIFNPTE9fVk9fREVJTlRFUkxBQ0VfRURHRV9WQUxVRShuKQkoKG4pPDwwKQorCisjZGVmaW5lIFNPTE9fVk9fQk9SREVSX0xJTkVfQ09MT1IJCTB4MDMzMAorI2RlZmluZSBTT0xPX1ZPX0JPUkRFUl9GSUxMX0NPTE9SCQkweDAzMzQKKyNkZWZpbmUgU09MT19WT19CT1JERVJfTElORV9NQVNLCQkweDAzMzgKKyNkZWZpbmUgU09MT19WT19CT1JERVJfRklMTF9NQVNLCQkweDAzM2MKKworI2RlZmluZSBTT0xPX1ZPX0JPUkRFUl9YKG4pCQkJKDB4MDM0MCsoKG4pKjQpKQorI2RlZmluZSBTT0xPX1ZPX0JPUkRFUl9ZKG4pCQkJKDB4MDM1NCsoKG4pKjQpKQorCisjZGVmaW5lIFNPTE9fVk9fQ0VMTF9FWFRfU0VUCQkJMHgwMzY4CisjZGVmaW5lIFNPTE9fVk9fQ0VMTF9FWFRfU1RBUlQJCQkweDAzNmMKKyNkZWZpbmUgU09MT19WT19DRUxMX0VYVF9TVE9QCQkJMHgwMzcwCisKKyNkZWZpbmUgU09MT19WT19DRUxMX0VYVF9TRVQyCQkJMHgwMzc0CisjZGVmaW5lIFNPTE9fVk9fQ0VMTF9FWFRfU1RBUlQyCQkJMHgwMzc4CisjZGVmaW5lIFNPTE9fVk9fQ0VMTF9FWFRfU1RPUDIJCQkweDAzN2MKKworI2RlZmluZSBTT0xPX1ZPX1JFQ1RBTkdMRV9DVFJMKG4pCQkoMHgwMzY4KygobikqMTIpKQorI2RlZmluZSBTT0xPX1ZPX1JFQ1RBTkdMRV9TVEFSVChuKQkJKDB4MDM2YysoKG4pKjEyKSkKKyNkZWZpbmUgU09MT19WT19SRUNUQU5HTEVfU1RPUChuKQkJKDB4MDM3MCsoKG4pKjEyKSkKKworI2RlZmluZSBTT0xPX1ZPX0NVUlNPUl9QT1MJCQkoMHgwMzgwKQorI2RlZmluZSBTT0xPX1ZPX0NVUlNPUl9DTFIJCQkoMHgwMzg0KQorI2RlZmluZSBTT0xPX1ZPX0NVUlNPUl9DTFIyCQkJKDB4MDM4OCkKKyNkZWZpbmUgU09MT19WT19DVVJTT1JfTUFTSyhpZCkJCQkoMHgwMzkwKygoaWQpKjQpKQorCisjZGVmaW5lIFNPTE9fVk9fRVhQQU5TSU9OKGlkKQkJCSgweDAyNTArKChpZCkqNCkpCisKKyNkZWZpbmUJU09MT19PU0dfQ09ORklHCQkJCTB4MDNFMAorI2RlZmluZQkgIFNPTE9fVk9fT1NHX09OCQkJKDE8PDMxKQorI2RlZmluZQkgIFNPTE9fVk9fT1NHX0NPTE9SX01VVEUJCSgxPDwyOCkKKyNkZWZpbmUJICBTT0xPX1ZPX09TR19BTFBIQV9SQVRFKG4pCQkoKG4pPDwyMikKKyNkZWZpbmUJICBTT0xPX1ZPX09TR19BTFBIQV9CR19SQVRFKG4pCQkoKG4pPDwxNikKKyNkZWZpbmUJICBTT0xPX1ZPX09TR19CQVNFKG9mZnNldCkJCSgoKG9mZnNldCk+PjE2KSYweGZmZmYpCisKKyNkZWZpbmUgU09MT19PU0dfRVJBU0UJCQkJMHgwM0U0CisjZGVmaW5lCSAgU09MT19PU0dfRVJBU0VfT04JCQkoMHg4MCkKKyNkZWZpbmUJICBTT0xPX09TR19FUkFTRV9PRkYJCQkoMHgwMCkKKworI2RlZmluZSBTT0xPX1ZPX09TR19CTElOSwkJCTB4MDNFOAorI2RlZmluZQkgIFNPTE9fVk9fT1NHX0JMSU5LX09OCQkJKDE8PDEpCisjZGVmaW5lCSAgU09MT19WT19PU0dfQkxJTktfSU5UUkVWQUwxOAkJKDE8PDApCisKKyNkZWZpbmUgU09MT19DQVBfQkFTRQkJCQkweDA0MDAKKyNkZWZpbmUJICBTT0xPX0NBUF9NQVhfUEFHRShuKQkJCSgobik8PDE2KQorI2RlZmluZQkgIFNPTE9fQ0FQX0JBU0VfQUREUihuKQkJCSgobik8PDApCisjZGVmaW5lIFNPTE9fQ0FQX0JUVwkJCQkweDA0MDQKKyNkZWZpbmUJICBTT0xPX0NBUF9QUk9HX0JBTkRXSURUSChuKQkJKChuKTw8OCkKKyNkZWZpbmUJICBTT0xPX0NBUF9NQVhfQkFORFdJRFRIKG4pCQkoKG4pPDwwKQorCisjZGVmaW5lIFNPTE9fRElNX1NDQUxFMQkJCQkweDA0MDgKKyNkZWZpbmUgU09MT19ESU1fU0NBTEUyCQkJCTB4MDQwQworI2RlZmluZSBTT0xPX0RJTV9TQ0FMRTMJCQkJMHgwNDEwCisjZGVmaW5lIFNPTE9fRElNX1NDQUxFNAkJCQkweDA0MTQKKyNkZWZpbmUgU09MT19ESU1fU0NBTEU1CQkJCTB4MDQxOAorI2RlZmluZQkgIFNPTE9fRElNX1ZfTUJfTlVNX0ZSQU1FKG4pCQkoKG4pPDwxNikKKyNkZWZpbmUJICBTT0xPX0RJTV9WX01CX05VTV9GSUVMRChuKQkJKChuKTw8OCkKKyNkZWZpbmUJICBTT0xPX0RJTV9IX01CX05VTShuKQkJCSgobik8PDApCisKKyNkZWZpbmUgU09MT19ESU1fUFJPRwkJCQkweDA0MUMKKyNkZWZpbmUgU09MT19DQVBfU1RBVFVTCQkJCTB4MDQyMAorCisjZGVmaW5lIFNPTE9fQ0FQX0NIX1NDQUxFKGNoKQkJCSgweDA0NDArKChjaCkqNCkpCisjZGVmaW5lIFNPTE9fQ0FQX0NIX0NPTVBfRU5BX0UoY2gpCQkoMHgwNDgwKygoY2gpKjQpKQorI2RlZmluZSBTT0xPX0NBUF9DSF9JTlRWKGNoKQkJCSgweDA0QzArKChjaCkqNCkpCisjZGVmaW5lIFNPTE9fQ0FQX0NIX0lOVFZfRShjaCkJCQkoMHgwNTAwKygoY2gpKjQpKQorCisKKyNkZWZpbmUgU09MT19WRV9DRkcwCQkJCTB4MDYxMAorI2RlZmluZQkgIFNPTE9fVkVfVFdPX1BBR0VfTU9ERQkJCSgxPDwzMSkKKyNkZWZpbmUJICBTT0xPX1ZFX0lOVFJfQ1RSTChuKQkJCSgobik8PDI0KQorI2RlZmluZQkgIFNPTE9fVkVfQkxPQ0tfU0laRShuKQkJCSgobik8PDE2KQorI2RlZmluZQkgIFNPTE9fVkVfQkxPQ0tfQkFTRShuKQkJCSgobik8PDApCisKKyNkZWZpbmUgU09MT19WRV9DRkcxCQkJCTB4MDYxNAorI2RlZmluZQkgIFNPTE9fVkVfQllURV9BTElHTihuKQkJCSgobik8PDI0KQorI2RlZmluZQkgIFNPTE9fVkVfSU5TRVJUX0lOREVYCQkJKDE8PDE4KQorI2RlZmluZQkgIFNPTE9fVkVfTU9USU9OX01PREUobikJCSgobik8PDE2KQorI2RlZmluZQkgIFNPTE9fVkVfTU9USU9OX0JBU0UobikJCSgobik8PDApCisKKyNkZWZpbmUgU09MT19WRV9XTVJLX1BPTFkJCQkweDA2MUMKKyNkZWZpbmUgU09MT19WRV9WTVJLX0lOSVRfS0VZCQkJMHgwNjIwCisjZGVmaW5lIFNPTE9fVkVfV01SS19TVFJMCQkJMHgwNjI0CisjZGVmaW5lIFNPTE9fVkVfRU5DUllQX1BPTFkJCQkweDA2MjgKKyNkZWZpbmUgU09MT19WRV9FTkNSWVBfSU5JVAkJCTB4MDYyQworI2RlZmluZSBTT0xPX1ZFX0FUVFIJCQkJMHgwNjMwCisjZGVmaW5lCSAgU09MT19WRV9MSVRUTEVfRU5ESUFOCQkJKDE8PDMxKQorI2RlZmluZQkgIFNPTE9fQ09NUF9BVFRSX1JOCQkJKDE8PDMwKQorI2RlZmluZQkgIFNPTE9fQ09NUF9BVFRSX0ZDT0RFKG4pCQkoKG4pPDwyNykKKyNkZWZpbmUJICBTT0xPX0NPTVBfVElNRV9JTkMobikJCQkoKG4pPDwyNSkKKyNkZWZpbmUJICBTT0xPX0NPTVBfVElNRV9XSURUSChuKQkJKChuKTw8MjEpCisjZGVmaW5lCSAgU09MT19EQ1RfSU5URVJWQUwobikJCQkoKG4pPDwxNikKKworI2RlZmluZSBTT0xPX1ZFX1NUQVRFKG4pCQkJKDB4MDY0MCsoKG4pKjQpKQorc3RydWN0IHZpZGVuY19zdGF0dXMgeworCXVuaW9uIHsKKwkJdTMyIHN0YXR1czA7CisJCXN0cnVjdCB7CisJCQl1MzIgbXA0X2VuY19jb2RlX3NpemU6MjAsIHNhZF9tb3Rpb246MSwgdmlkX21vdGlvbjoxLAorCQkJICAgIHZvcF90eXBlOjIsIHZpZGVvX2NoYW5uZWw6NSwgc291cmNlX2ZpZWxkX2lkeDoxLAorCQkJICAgIGludGVybGFjZToxLCBwcm9ncmVzc2l2ZToxOworCQl9IHN0YXR1czBfc3Q7CisJfTsKKwl1bmlvbiB7CisJCXUzMiBzdGF0dXMxOworCQlzdHJ1Y3QgeworCQkJdTMyIHZzaXplOjgsIGhzaXplOjgsIGxhc3RfcXVldWU6NCwgZm9vMTo4LCBzY2FsZTo0OworCQl9IHN0YXR1czFfc3Q7CisJfTsKKwl1bmlvbiB7CisJCXUzMiBzdGF0dXM0OworCQlzdHJ1Y3QgeworCQkJdTMyIGpwZWdfY29kZV9zaXplOjIwLCBpbnRlcnZhbDoxMCwgZm9vMToyOworCQl9IHN0YXR1czRfc3Q7CisJfTsKKwl1bmlvbiB7CisJCXUzMiBzdGF0dXM5OworCQlzdHJ1Y3QgeworCQkJdTMyIGNoYW5uZWw6NSwgZm9vMToyNzsKKwkJfSBzdGF0dXM5X3N0OworCX07CisJdW5pb24geworCQl1MzIgc3RhdHVzMTA7CisJCXN0cnVjdCB7CisJCQl1MzIgbXA0X2NvZGVfc2l6ZToyMCwgZm9vOjEyOworCQl9IHN0YXR1czEwX3N0OworCX07CisJdW5pb24geworCQl1MzIgc3RhdHVzMTE7CisJCXN0cnVjdCB7CisJCQl1MzIgbGFzdF9xdWV1ZTo4LCBmb28xOjI0OworCQl9IHN0YXR1czExX3N0OworCX07Cit9OworCisjZGVmaW5lIFNPTE9fVkVfSlBFR19RUF9UQkwJCQkweDA2NzAKKyNkZWZpbmUgU09MT19WRV9KUEVHX1FQX0NIX0wJCQkweDA2NzQKKyNkZWZpbmUgU09MT19WRV9KUEVHX1FQX0NIX0gJCQkweDA2NzgKKyNkZWZpbmUgU09MT19WRV9KUEVHX0NGRwkJCTB4MDY3QworI2RlZmluZSBTT0xPX1ZFX0pQRUdfQ1RSTAkJCTB4MDY4MAorCisjZGVmaW5lIFNPTE9fVkVfT1NEX0NICQkJCTB4MDY5MAorI2RlZmluZSBTT0xPX1ZFX09TRF9CQVNFCQkJMHgwNjk0CisjZGVmaW5lIFNPTE9fVkVfT1NEX0NMUgkJCQkweDA2OTgKKyNkZWZpbmUgU09MT19WRV9PU0RfT1BUCQkJCTB4MDY5QworCisjZGVmaW5lIFNPTE9fVkVfQ0hfSU5UTChjaCkJCQkoMHgwNzAwKygoY2gpKjQpKQorI2RlZmluZSBTT0xPX1ZFX0NIX01PVChjaCkJCQkoMHgwNzQwKygoY2gpKjQpKQorI2RlZmluZSBTT0xPX1ZFX0NIX1FQKGNoKQkJCSgweDA3ODArKChjaCkqNCkpCisjZGVmaW5lIFNPTE9fVkVfQ0hfUVBfRShjaCkJCQkoMHgwN0MwKygoY2gpKjQpKQorI2RlZmluZSBTT0xPX1ZFX0NIX0dPUChjaCkJCQkoMHgwODAwKygoY2gpKjQpKQorI2RlZmluZSBTT0xPX1ZFX0NIX0dPUF9FKGNoKQkJCSgweDA4NDArKChjaCkqNCkpCisjZGVmaW5lIFNPTE9fVkVfQ0hfUkVGX0JBU0UoY2gpCQkJKDB4MDg4MCsoKGNoKSo0KSkKKyNkZWZpbmUgU09MT19WRV9DSF9SRUZfQkFTRV9FKGNoKQkJKDB4MDhDMCsoKGNoKSo0KSkKKworI2RlZmluZSBTT0xPX1ZFX01QRUc0X1FVRShuKQkJCSgweDBBMDArKChuKSo4KSkKKyNkZWZpbmUgU09MT19WRV9KUEVHX1FVRShuKQkJCSgweDBBMDQrKChuKSo4KSkKKworI2RlZmluZSBTT0xPX1ZEX0NGRzAJCQkJMHgwOTAwCisjZGVmaW5lCSAgU09MT19WRF9DRkdfTk9fV1JJVEVfTk9fV0lORE9XCSgxPDwyNCkKKyNkZWZpbmUJICBTT0xPX1ZEX0NGR19CVVNZX1dJQVRfQ09ERQkJKDE8PDIzKQorI2RlZmluZQkgIFNPTE9fVkRfQ0ZHX0JVU1lfV0lBVF9SRUYJCSgxPDwyMikKKyNkZWZpbmUJICBTT0xPX1ZEX0NGR19CVVNZX1dJQVRfUkVTCQkoMTw8MjEpCisjZGVmaW5lCSAgU09MT19WRF9DRkdfQlVTWV9XSUFUX01TCQkoMTw8MjApCisjZGVmaW5lCSAgU09MT19WRF9DRkdfU0lOR0xFX01PREUJCSgxPDwxOCkKKyNkZWZpbmUJICBTT0xPX1ZEX0NGR19TQ0FMX01BTlVBTAkJKDE8PDE3KQorI2RlZmluZQkgIFNPTE9fVkRfQ0ZHX1VTRVJfUEFHRV9DVFJMCQkoMTw8MTYpCisjZGVmaW5lCSAgU09MT19WRF9DRkdfTElUVExFX0VORElBTgkJKDE8PDE1KQorI2RlZmluZQkgIFNPTE9fVkRfQ0ZHX1NUQVJUX0ZJCQkJKDE8PDE0KQorI2RlZmluZQkgIFNPTE9fVkRfQ0ZHX0VSUl9MT0NLCQkJKDE8PDEzKQorI2RlZmluZQkgIFNPTE9fVkRfQ0ZHX0VSUl9JTlRfRU5BCQkoMTw8MTIpCisjZGVmaW5lCSAgU09MT19WRF9DRkdfVElNRV9XSURUSChuKQkJKChuKTw8OCkKKyNkZWZpbmUJICBTT0xPX1ZEX0NGR19EQ1RfSU5URVJWQUwobikJCSgobik8PDApCisKKyNkZWZpbmUgU09MT19WRF9DRkcxCQkJCTB4MDkwNAorCisjZGVmaW5lCVNPTE9fVkRfREVJTlRFUkxBQ0UJCQkweDA5MDgKKyNkZWZpbmUJICBTT0xPX1ZEX0RFSU5URVJMQUNFX1RIUkVTSE9MRChuKQkoKG4pPDw4KQorI2RlZmluZQkgIFNPTE9fVkRfREVJTlRFUkxBQ0VfRURHRV9WQUxVRShuKQkoKG4pPDwwKQorCisjZGVmaW5lIFNPTE9fVkRfQ09ERV9BRFIJCQkweDA5MEMKKworI2RlZmluZSBTT0xPX1ZEX0NUUkwJCQkJMHgwOTEwCisjZGVmaW5lCSAgU09MT19WRF9PUEVSX09OCQkJKDE8PDMxKQorI2RlZmluZQkgIFNPTE9fVkRfTUFYX0lURU0obikJCQkoKG4pPDwwKQorCisjZGVmaW5lIFNPTE9fVkRfU1RBVFVTMAkJCQkweDA5MjAKKyNkZWZpbmUJICBTT0xPX1ZEX1NUQVRVUzBfSU5UUl9BQ0sJCSgxPDwyMikKKyNkZWZpbmUJICBTT0xPX1ZEX1NUQVRVUzBfSU5UUl9FTVBUWQkJKDE8PDIxKQorI2RlZmluZQkgIFNPTE9fVkRfU1RBVFVTMF9JTlRSX0VSUgkJKDE8PDIwKQorCisjZGVmaW5lIFNPTE9fVkRfU1RBVFVTMQkJCQkweDA5MjQKKworI2RlZmluZSBTT0xPX1ZEX0lEWDAJCQkJMHgwOTMwCisjZGVmaW5lCSAgU09MT19WRF9JRFhfSU5URVJMQUNFCQkJKDE8PDMwKQorI2RlZmluZQkgIFNPTE9fVkRfSURYX0NIQU5ORUwobikJCSgobik8PDI0KQorI2RlZmluZQkgIFNPTE9fVkRfSURYX1NJWkUobikJCQkoKG4pPDwwKQorCisjZGVmaW5lIFNPTE9fVkRfSURYMQkJCQkweDA5MzQKKyNkZWZpbmUJICBTT0xPX1ZEX0lEWF9TUkNfU0NBTEUobikJCSgobik8PDI4KQorI2RlZmluZQkgIFNPTE9fVkRfSURYX1dJTkRPVyhuKQkJCSgobik8PDI0KQorI2RlZmluZQkgIFNPTE9fVkRfSURYX0RFSU5URVJMQUNFCQkoMTw8MTYpCisjZGVmaW5lCSAgU09MT19WRF9JRFhfSF9CTE9DSyhuKQkJKChuKTw8OCkKKyNkZWZpbmUJICBTT0xPX1ZEX0lEWF9WX0JMT0NLKG4pCQkoKG4pPDwwKQorCisjZGVmaW5lIFNPTE9fVkRfSURYMgkJCQkweDA5MzgKKyNkZWZpbmUJICBTT0xPX1ZEX0lEWF9SRUZfQkFTRV9TSURFCQkoMTw8MzEpCisjZGVmaW5lCSAgU09MT19WRF9JRFhfUkVGX0JBU0UobikJCSgoKG4pPj4xNikmMHhmZmZmKQorCisjZGVmaW5lIFNPTE9fVkRfSURYMwkJCQkweDA5M0MKKyNkZWZpbmUJICBTT0xPX1ZEX0lEWF9ESVNQX1NDQUxFKG4pCQkoKG4pPDwyOCkKKyNkZWZpbmUJICBTT0xPX1ZEX0lEWF9JTlRFUkxBQ0VfV1IJCSgxPDwyNykKKyNkZWZpbmUJICBTT0xPX1ZEX0lEWF9JTlRFUlBPTAkJCSgxPDwyNikKKyNkZWZpbmUJICBTT0xPX1ZEX0lEWF9IT1IyWAkJCSgxPDwyNSkKKyNkZWZpbmUJICBTT0xPX1ZEX0lEWF9PRkZTRVRfWChuKQkJKChuKTw8MTIpCisjZGVmaW5lCSAgU09MT19WRF9JRFhfT0ZGU0VUX1kobikJCSgobik8PDApCisKKyNkZWZpbmUgU09MT19WRF9JRFg0CQkJCTB4MDk0MAorI2RlZmluZQkgIFNPTE9fVkRfSURYX0RFQ19XUl9QQUdFKG4pCQkoKG4pPDw4KQorI2RlZmluZQkgIFNPTE9fVkRfSURYX0RJU1BfUkRfUEFHRShuKQkJKChuKTw8MCkKKworI2RlZmluZSBTT0xPX1ZEX1dSX1BBR0UobikJCQkoMHgwM0YwICsgKChuKSAqIDQpKQorCisKKyNkZWZpbmUgU09MT19HUElPX0NPTkZJR18wCQkJMHgwQjAwCisjZGVmaW5lIFNPTE9fR1BJT19DT05GSUdfMQkJCTB4MEIwNAorI2RlZmluZSBTT0xPX0dQSU9fREFUQV9PVVQJCQkweDBCMDgKKyNkZWZpbmUgU09MT19HUElPX0RBVEFfSU4JCQkweDBCMEMKKyNkZWZpbmUgU09MT19HUElPX0lOVF9BQ0tfU1RBCQkJMHgwQjEwCisjZGVmaW5lIFNPTE9fR1BJT19JTlRfRU5BCQkJMHgwQjE0CisjZGVmaW5lIFNPTE9fR1BJT19JTlRfQ0ZHXzAJCQkweDBCMTgKKyNkZWZpbmUgU09MT19HUElPX0lOVF9DRkdfMQkJCTB4MEIxQworCisKKyNkZWZpbmUgU09MT19JSUNfQ0ZHCQkJCTB4MEIyMAorI2RlZmluZQkgIFNPTE9fSUlDX0VOQUJMRQkJCSgxPDw4KQorI2RlZmluZQkgIFNPTE9fSUlDX1BSRVNDQUxFKG4pCQkJKChuKTw8MCkKKworI2RlZmluZSBTT0xPX0lJQ19DVFJMCQkJCTB4MEIyNAorI2RlZmluZQkgIFNPTE9fSUlDX0FVVE9fQ0xFQVIJCQkoMTw8MjApCisjZGVmaW5lCSAgU09MT19JSUNfU1RBVEVfUlhfQUNLCQkJKDE8PDE5KQorI2RlZmluZQkgIFNPTE9fSUlDX1NUQVRFX0JVU1kJCQkoMTw8MTgpCisjZGVmaW5lCSAgU09MT19JSUNfU1RBVEVfU0lHX0VSUgkJKDE8PDE3KQorI2RlZmluZQkgIFNPTE9fSUlDX1NUQVRFX1RSTlMJCQkoMTw8MTYpCisjZGVmaW5lCSAgU09MT19JSUNfQ0hfU0VUKG4pCQkJKChuKTw8NSkKKyNkZWZpbmUJICBTT0xPX0lJQ19BQ0tfRU4JCQkoMTw8NCkKKyNkZWZpbmUJICBTT0xPX0lJQ19TVEFSVAkJCSgxPDwzKQorI2RlZmluZQkgIFNPTE9fSUlDX1NUT1AJCQkJKDE8PDIpCisjZGVmaW5lCSAgU09MT19JSUNfUkVBRAkJCQkoMTw8MSkKKyNkZWZpbmUJICBTT0xPX0lJQ19XUklURQkJCSgxPDwwKQorCisjZGVmaW5lIFNPTE9fSUlDX1RYRAkJCQkweDBCMjgKKyNkZWZpbmUgU09MT19JSUNfUlhECQkJCTB4MEIyQworCisvKgorICoJVUFSVCBSRUdJU1RFUgorICovCisjZGVmaW5lIFNPTE9fVUFSVF9DT05UUk9MKG4pCQkJKDB4MEJBMCArICgobikqMHgyMCkpCisjZGVmaW5lCSAgU09MT19VQVJUX0NMS19ESVYobikJCQkoKG4pPDwyNCkKKyNkZWZpbmUJICBTT0xPX01PREVNX0NUUkxfRU4JCQkoMTw8MjApCisjZGVmaW5lCSAgU09MT19QQVJJVFlfRVJST1JfRFJPUAkJKDE8PDE4KQorI2RlZmluZQkgIFNPTE9fSVJRX0VSUl9FTgkJCSgxPDwxNykKKyNkZWZpbmUJICBTT0xPX0lSUV9SWF9FTgkJCSgxPDwxNikKKyNkZWZpbmUJICBTT0xPX0lSUV9UWF9FTgkJCSgxPDwxNSkKKyNkZWZpbmUJICBTT0xPX1JYX0VOCQkJCSgxPDwxNCkKKyNkZWZpbmUJICBTT0xPX1RYX0VOCQkJCSgxPDwxMykKKyNkZWZpbmUJICBTT0xPX1VBUlRfSEFMRl9EVVBMRVgJCQkoMTw8MTIpCisjZGVmaW5lCSAgU09MT19VQVJUX0xPT1BCQUNLCQkJKDE8PDExKQorCisjZGVmaW5lCSAgU09MT19CQVVEUkFURV8yMzA0MDAJCQkoKDA8PDkpfCgwPDw2KSkKKyNkZWZpbmUJICBTT0xPX0JBVURSQVRFXzExNTIwMAkJCSgoMDw8OSl8KDE8PDYpKQorI2RlZmluZQkgIFNPTE9fQkFVRFJBVEVfNTc2MDAJCQkoKDA8PDkpfCgyPDw2KSkKKyNkZWZpbmUJICBTT0xPX0JBVURSQVRFXzM4NDAwCQkJKCgwPDw5KXwoMzw8NikpCisjZGVmaW5lCSAgU09MT19CQVVEUkFURV8xOTIwMAkJCSgoMDw8OSl8KDQ8PDYpKQorI2RlZmluZQkgIFNPTE9fQkFVRFJBVEVfOTYwMAkJCSgoMDw8OSl8KDU8PDYpKQorI2RlZmluZQkgIFNPTE9fQkFVRFJBVEVfNDgwMAkJCSgoMDw8OSl8KDY8PDYpKQorI2RlZmluZQkgIFNPTE9fQkFVRFJBVEVfMjQwMAkJCSgoMTw8OSl8KDY8PDYpKQorI2RlZmluZQkgIFNPTE9fQkFVRFJBVEVfMTIwMAkJCSgoMjw8OSl8KDY8PDYpKQorI2RlZmluZQkgIFNPTE9fQkFVRFJBVEVfMzAwCQkJKCgzPDw5KXwoNjw8NikpCisKKyNkZWZpbmUJICBTT0xPX1VBUlRfREFUQV9CSVRfOAkJCSgzPDw0KQorI2RlZmluZQkgIFNPTE9fVUFSVF9EQVRBX0JJVF83CQkJKDI8PDQpCisjZGVmaW5lCSAgU09MT19VQVJUX0RBVEFfQklUXzYJCQkoMTw8NCkKKyNkZWZpbmUJICBTT0xPX1VBUlRfREFUQV9CSVRfNQkJCSgwPDw0KQorCisjZGVmaW5lCSAgU09MT19VQVJUX1NUT1BfQklUXzEJCQkoMDw8MikKKyNkZWZpbmUJICBTT0xPX1VBUlRfU1RPUF9CSVRfMgkJCSgxPDwyKQorCisjZGVmaW5lCSAgU09MT19VQVJUX1BBUklUWV9OT05FCQkJKDA8PDApCisjZGVmaW5lCSAgU09MT19VQVJUX1BBUklUWV9FVkVOCQkJKDI8PDApCisjZGVmaW5lCSAgU09MT19VQVJUX1BBUklUWV9PREQJCQkoMzw8MCkKKworI2RlZmluZSBTT0xPX1VBUlRfU1RBVFVTKG4pCQkJKDB4MEJBNCArICgobikqMHgyMCkpCisjZGVmaW5lCSAgU09MT19VQVJUX0NUUwkJCQkoMTw8MTUpCisjZGVmaW5lCSAgU09MT19VQVJUX1JYX0JVU1kJCQkoMTw8MTQpCisjZGVmaW5lCSAgU09MT19VQVJUX09WRVJSVU4JCQkoMTw8MTMpCisjZGVmaW5lCSAgU09MT19VQVJUX0ZSQU1FX0VSUgkJCSgxPDwxMikKKyNkZWZpbmUJICBTT0xPX1VBUlRfUEFSSVRZX0VSUgkJCSgxPDwxMSkKKyNkZWZpbmUJICBTT0xPX1VBUlRfVFhfQlVTWQkJCSgxPDw1KQorCisjZGVmaW5lCSAgU09MT19VQVJUX1JYX0JVRkZfQ05UKHN0YXQpCQkoKChzdGF0KT4+NikgJiAweDFmKQorI2RlZmluZQkgIFNPTE9fVUFSVF9SWF9CVUZGX1NJWkUJCTgKKyNkZWZpbmUJICBTT0xPX1VBUlRfVFhfQlVGRl9DTlQoc3RhdCkJCSgoKHN0YXQpPj4wKSAmIDB4MWYpCisjZGVmaW5lCSAgU09MT19VQVJUX1RYX0JVRkZfU0laRQkJOAorCisjZGVmaW5lIFNPTE9fVUFSVF9UWF9EQVRBKG4pCQkJKDB4MEJBOCArICgobikqMHgyMCkpCisjZGVmaW5lCSAgU09MT19VQVJUX1RYX0RBVEFfUFVTSAkJKDE8PDgpCisjZGVmaW5lIFNPTE9fVUFSVF9SWF9EQVRBKG4pCQkJKDB4MEJBQyArICgobikqMHgyMCkpCisjZGVmaW5lCSAgU09MT19VQVJUX1JYX0RBVEFfUE9QCQkJKDE8PDgpCisKKyNkZWZpbmUgU09MT19USU1FUl9DTE9DS19OVU0JCQkweDBiZTAKKyNkZWZpbmUgU09MT19USU1FUl9XQVRDSERPRwkJCTB4MGJlNAorI2RlZmluZSBTT0xPX1RJTUVSX1VTRUMJCQkJMHgwYmU4CisjZGVmaW5lIFNPTE9fVElNRVJfU0VDCQkJCTB4MGJlYworCisjZGVmaW5lIFNPTE9fQVVESU9fQ09OVFJPTAkJCTB4MEQwMAorI2RlZmluZQkgIFNPTE9fQVVESU9fRU5BQkxFCQkJKDE8PDMxKQorI2RlZmluZQkgIFNPTE9fQVVESU9fTUFTVEVSX01PREUJCSgxPDwzMCkKKyNkZWZpbmUJICBTT0xPX0FVRElPX0kyU19NT0RFCQkJKDE8PDI5KQorI2RlZmluZQkgIFNPTE9fQVVESU9fSTJTX0xSX1NXQVAJCSgxPDwyNykKKyNkZWZpbmUJICBTT0xPX0FVRElPX0kyU184QklUCQkJKDE8PDI2KQorI2RlZmluZQkgIFNPTE9fQVVESU9fSTJTX01VTFRJKG4pCQkoKG4pPDwyNCkKKyNkZWZpbmUJICBTT0xPX0FVRElPX01JWF85VE8wCQkJKDE8PDIzKQorI2RlZmluZQkgIFNPTE9fQVVESU9fREVDXzlUTzBfVk9MKG4pCQkoKG4pPDwyMCkKKyNkZWZpbmUJICBTT0xPX0FVRElPX01JWF8xOVRPMTAJCQkoMTw8MTkpCisjZGVmaW5lCSAgU09MT19BVURJT19ERUNfMTlUTzEwX1ZPTChuKQkJKChuKTw8MTYpCisjZGVmaW5lCSAgU09MT19BVURJT19NT0RFKG4pCQkJKChuKTw8MCkKKyNkZWZpbmUgU09MT19BVURJT19TQU1QTEUJCQkweDBEMDQKKyNkZWZpbmUJICBTT0xPX0FVRElPX0VFX01PREVfT04JCQkoMTw8MzApCisjZGVmaW5lCSAgU09MT19BVURJT19FRV9FTkNfQ0goY2gpCQkoKGNoKTw8MjUpCisjZGVmaW5lCSAgU09MT19BVURJT19CSVRSQVRFKG4pCQkJKChuKTw8MTYpCisjZGVmaW5lCSAgU09MT19BVURJT19DTEtfRElWKG4pCQkJKChuKTw8MCkKKyNkZWZpbmUgU09MT19BVURJT19GRE1BX0lOVFIJCQkweDBEMDgKKyNkZWZpbmUJICBTT0xPX0FVRElPX0ZETUFfSU5URVJWQUwobikJCSgobik8PDE5KQorI2RlZmluZQkgIFNPTE9fQVVESU9fSU5UUl9PUkRFUihuKQkJKChuKTw8MTYpCisjZGVmaW5lCSAgU09MT19BVURJT19GRE1BX0JBU0UobikJCSgobik8PDApCisjZGVmaW5lIFNPTE9fQVVESU9fRVZPTF8wCQkJMHgwRDBDCisjZGVmaW5lIFNPTE9fQVVESU9fRVZPTF8xCQkJMHgwRDEwCisjZGVmaW5lCSAgU09MT19BVURJT19FVk9MKGNoLCB2YWx1ZSkJCSgodmFsdWUpPDwoKGNoKSUxMCkpCisjZGVmaW5lIFNPTE9fQVVESU9fU1RBCQkJCTB4MEQxNAorCisKKyNkZWZpbmUgU09MT19XQVRDSERPRwkJCQkweDBCRTQKKyNkZWZpbmUgV0FUQ0hET0dfU1RBVChzdGF0dXMpCQkJKHN0YXR1czw8OCkKKyNkZWZpbmUgV0FUQ0hET0dfVElNRShzZWMpCQkJKHNlYyYweGZmKQorCisjZW5kaWYgLyogX19TT0xPNjAxMF9SRUdJU1RFUlNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLXR3MjguYyBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC10dzI4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE1OWM4MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC10dzI4LmMKQEAgLTAsMCArMSw4MjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQmx1ZWNoZXJyeSwgTExDIHd3dy5ibHVlY2hlcnJ5ZHZyLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDEwIEJlbiBDb2xsaW5zIDxiY29sbGluc0BibHVlY2hlcnJ5Lm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgInNvbG82MDEwLmgiCisjaW5jbHVkZSAic29sbzYwMTAtdHcyOC5oIgorCisvKiBYWFg6IFNvbWUgb2YgdGhlc2UgdmFsdWVzIGFyZSBtYXNrZWQgaW50byBhbiA4LWJpdCByZWdzLCBhbmQgc2hpZnRlZAorICogYXJvdW5kIGZvciBvdGhlciA4LWJpdCByZWdzLiBXaGF0IGFyZSB0aGUgbWFnaWMgYml0cyBpbiB0aGVzZSB2YWx1ZXM/ICovCisjZGVmaW5lIERFRkFVTFRfSERFTEFZX05UU0MJCSgzMiAtIDQpCisjZGVmaW5lIERFRkFVTFRfSEFDVElWRV9OVFNDCQkoNzIwICsgMTYpCisjZGVmaW5lIERFRkFVTFRfVkRFTEFZX05UU0MJCSg3IC0gMikKKyNkZWZpbmUgREVGQVVMVF9WQUNUSVZFX05UU0MJCSgyNDAgKyA0KQorCisjZGVmaW5lIERFRkFVTFRfSERFTEFZX1BBTAkJKDMyICsgNCkKKyNkZWZpbmUgREVGQVVMVF9IQUNUSVZFX1BBTAkJKDg2NC1ERUZBVUxUX0hERUxBWV9QQUwpCisjZGVmaW5lIERFRkFVTFRfVkRFTEFZX1BBTAkJKDYpCisjZGVmaW5lIERFRkFVTFRfVkFDVElWRV9QQUwJCSgzMTItREVGQVVMVF9WREVMQVlfUEFMKQorCitzdGF0aWMgdTggdGJsX3R3Mjg2NF90ZW1wbGF0ZVtdID0geworCTB4MDAsIDB4MDAsIDB4ODAsIDB4MTAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDIsIC8vIDB4MDAKKwkweDEyLCAweGY1LCAweDA5LCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDdmLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4MTAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDIsIC8vIDB4MTAKKwkweDEyLCAweGY1LCAweDA5LCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDdmLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4MTAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDIsIC8vIDB4MjAKKwkweDEyLCAweGY1LCAweDA5LCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDdmLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4MTAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDIsIC8vIDB4MzAKKwkweDEyLCAweGY1LCAweDA5LCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDdmLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8vIDB4NDAKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8vIDB4NTAKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8vIDB4NjAKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8vIDB4NzAKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEzLCAweDAwLAorCTB4MDAsIDB4MDIsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4ODAsIDB4NDQsIDB4NTAsIC8vIDB4ODAKKwkweDIyLCAweDAxLCAweGQ4LCAweGJjLCAweGI4LCAweDQ0LCAweDM4LCAweDAwLAorCTB4MDAsIDB4NzgsIDB4NzIsIDB4M2UsIDB4MTQsIDB4YTUsIDB4ZTQsIDB4MDUsIC8vIDB4OTAKKwkweDAwLCAweDI4LCAweDQ0LCAweDQ0LCAweGEwLCAweDg4LCAweDVhLCAweDAxLAorCTB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MWEsIDB4MWEsIDB4MWEsIDB4MWEsIC8vIDB4YTAKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGYwLCAweGYwLCAweGYwLCAweDQ0LAorCTB4NDQsIDB4MGEsIDB4MDAsIDB4ZmYsIDB4ZWYsIDB4ZWYsIDB4ZWYsIDB4ZWYsIC8vIDB4YjAKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8vIDB4YzAKKwkweDAwLCAweDAwLCAweDU1LCAweDAwLCAweGIxLCAweGU0LCAweDQwLCAweDAwLAorCTB4NzcsIDB4NzcsIDB4MDEsIDB4MTMsIDB4NTcsIDB4OWIsIDB4ZGYsIDB4MjAsIC8vIDB4ZDAKKwkweDY0LCAweGE4LCAweGVjLCAweGQxLCAweDBmLCAweDExLCAweDExLCAweDgxLAorCTB4MTAsIDB4ZTAsIDB4YmIsIDB4YmIsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MDAsIC8vIDB4ZTAKKwkweDExLCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAweDExLCAweDAwLAorCTB4ODMsIDB4YjUsIDB4MDksIDB4NzgsIDB4ODUsIDB4MDAsIDB4MDEsIDB4MjAsIC8vIDB4ZjAKKwkweDY0LCAweDExLCAweDQwLCAweGFmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLAorfTsKKworc3RhdGljIHU4IHRibF90dzI4NjVfbnRzY190ZW1wbGF0ZVtdID0geworCTB4MDAsIDB4ZjAsIDB4NzAsIDB4MzAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDIsIC8vIDB4MDAKKwkweDEyLCAweGZmLCAweDA5LCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDdmLAorCTB4MDAsIDB4ZjAsIDB4NzAsIDB4MzAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDIsIC8vIDB4MTAKKwkweDEyLCAweGZmLCAweDA5LCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDdmLAorCTB4MDAsIDB4ZjAsIDB4NzAsIDB4MzAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDIsIC8vIDB4MjAKKwkweDEyLCAweGZmLCAweDA5LCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDdmLAorCTB4MDAsIDB4ZjAsIDB4NzAsIDB4NDgsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDIsIC8vIDB4MzAKKwkweDEyLCAweGZmLCAweDA5LCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDdmLAorCTB4MDAsIDB4MDAsIDB4OTAsIDB4NjgsIDB4MDAsIDB4MzgsIDB4ODAsIDB4ODAsIC8vIDB4NDAKKwkweDgwLCAweDgwLCAweDc3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8vIDB4NTAKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4NDUsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8vIDB4NjAKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIxLCAweDQzLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZjEsIDB4MDMsIDB4RUYsIDB4MDMsIC8vIDB4NzAKKwkweEU5LCAweDAzLCAweEQ5LCAweDE1LCAweDE1LCAweEU0LCAweEEzLCAweDgwLAorCTB4MDAsIDB4MDIsIDB4MDAsIDB4Q0MsIDB4MDAsIDB4ODAsIDB4NDQsIDB4NTAsIC8vIDB4ODAKKwkweDIyLCAweDAxLCAweEQ4LCAweEJDLCAweEI4LCAweDQ0LCAweDM4LCAweDAwLAorCTB4MDAsIDB4NzgsIDB4NDQsIDB4M0QsIDB4MTQsIDB4QTUsIDB4RTAsIDB4MDUsIC8vIDB4OTAKKwkweDAwLCAweDI4LCAweDQ0LCAweDQ0LCAweEEwLCAweDkwLCAweDUyLCAweDEzLAorCTB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MUEsIDB4MUEsIDB4MUIsIDB4MUEsIC8vIDB4YTAKKwkweDAwLCAweDAwLCAweDAwLCAweEYwLCAweEYwLCAweEYwLCAweEYwLCAweDQ0LAorCTB4NDQsIDB4NEEsIDB4MDAsIDB4RkYsIDB4RUYsIDB4RUYsIDB4RUYsIDB4RUYsIC8vIDB4YjAKKwkweEZGLCAweEU3LCAweEU5LCAweEU5LCAweEVCLCAweEZGLCAweEQ2LCAweEQ4LAorCTB4RDgsIDB4RDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8vIDB4YzAKKwkweDAwLCAweDAwLCAweDU1LCAweDAwLCAweEU0LCAweDM5LCAweDAwLCAweDgwLAorCTB4NzcsIDB4NzcsIDB4MDMsIDB4MjAsIDB4NTcsIDB4OWIsIDB4ZGYsIDB4MzEsIC8vIDB4ZDAKKwkweDY0LCAweGE4LCAweGVjLCAweGQxLCAweDBmLCAweDExLCAweDExLCAweDgxLAorCTB4MTAsIDB4QzAsIDB4QUEsIDB4QUEsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MDAsIC8vIDB4ZTAKKwkweDExLCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAweDExLCAweDAwLAorCTB4ODMsIDB4QjUsIDB4MDksIDB4NzgsIDB4ODUsIDB4MDAsIDB4MDEsIDB4MjAsIC8vIDB4ZjAKKwkweDY0LCAweDUxLCAweDQwLCAweGFmLCAweEZGLCAweEYwLCAweDAwLCAweEMwLAorfTsKKworc3RhdGljIHU4IHRibF90dzI4NjVfcGFsX3RlbXBsYXRlW10gPSB7CisJMHgwMCwgMHhmMCwgMHg3MCwgMHgzMCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgxMiwgLy8gMHgwMAorCTB4MTEsIDB4ZmYsIDB4MDEsIDB4YzMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4N2YsCisJMHgwMCwgMHhmMCwgMHg3MCwgMHgzMCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgxMiwgLy8gMHgxMAorCTB4MTEsIDB4ZmYsIDB4MDEsIDB4YzMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4N2YsCisJMHgwMCwgMHhmMCwgMHg3MCwgMHgzMCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgxMiwgLy8gMHgyMAorCTB4MTEsIDB4ZmYsIDB4MDEsIDB4YzMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4N2YsCisJMHgwMCwgMHhmMCwgMHg3MCwgMHgzMCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgxMiwgLy8gMHgzMAorCTB4MTEsIDB4ZmYsIDB4MDEsIDB4YzMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4N2YsCisJMHgwMCwgMHg5NCwgMHg5MCwgMHg0OCwgMHgwMCwgMHgzOCwgMHg3RiwgMHg4MCwgLy8gMHg0MAorCTB4ODAsIDB4ODAsIDB4NzcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gMHg1MAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHg0NSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gMHg2MAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4NDMsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMSwgMHgwMywgMHhFRiwgMHgwMywgLy8gMHg3MAorCTB4RUEsIDB4MDMsIDB4RDksIDB4MTUsIDB4MTUsIDB4RTQsIDB4QTMsIDB4ODAsCisJMHgwMCwgMHgwMiwgMHgwMCwgMHhDQywgMHgwMCwgMHg4MCwgMHg0NCwgMHg1MCwgLy8gMHg4MAorCTB4MjIsIDB4MDEsIDB4RDgsIDB4QkMsIDB4QjgsIDB4NDQsIDB4MzgsIDB4MDAsCisJMHgwMCwgMHg3OCwgMHg0NCwgMHgzRCwgMHgxNCwgMHhBNSwgMHhFMCwgMHgwNSwgLy8gMHg5MAorCTB4MDAsIDB4MjgsIDB4NDQsIDB4NDQsIDB4QTAsIDB4OTAsIDB4NTIsIDB4MTMsCisJMHgwOCwgMHgwOCwgMHgwOCwgMHgwOCwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgLy8gMHhhMAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4RjAsIDB4RjAsIDB4RjAsIDB4RjAsIDB4NDQsCisJMHg0NCwgMHg0QSwgMHgwMCwgMHhGRiwgMHhFRiwgMHhFRiwgMHhFRiwgMHhFRiwgLy8gMHhiMAorCTB4RkYsIDB4RTcsIDB4RTksIDB4RTksIDB4RTksIDB4RkYsIDB4RDcsIDB4RDgsCisJMHhEOSwgMHhEOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gMHhjMAorCTB4MDAsIDB4MDAsIDB4NTUsIDB4MDAsIDB4RTQsIDB4MzksIDB4MDAsIDB4ODAsCisJMHg3NywgMHg3NywgMHgwMywgMHgyMCwgMHg1NywgMHg5YiwgMHhkZiwgMHgzMSwgLy8gMHhkMAorCTB4NjQsIDB4YTgsIDB4ZWMsIDB4ZDEsIDB4MGYsIDB4MTEsIDB4MTEsIDB4ODEsCisJMHgxMCwgMHhDMCwgMHhBQSwgMHhBQSwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgLy8gMHhlMAorCTB4MTEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsCisJMHg4MywgMHhCNSwgMHgwOSwgMHgwMCwgMHhBMCwgMHgwMCwgMHgwMSwgMHgyMCwgLy8gMHhmMAorCTB4NjQsIDB4NTEsIDB4NDAsIDB4YWYsIDB4RkYsIDB4RjAsIDB4MDAsIDB4QzAsCit9OworCisjZGVmaW5lIGlzX3R3Mjg2eChfX3NvbG8sIF9faWQpICghKF9fc29sby0+dHcyODE1ICYgKDEgPDwgX19pZCkpKQorCitzdGF0aWMgdTggdHdfcmVhZGJ5dGUoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIGludCBjaGlwX2lkLCB1OCB0dzZ4X29mZiwKKwkJICAgICAgdTggdHdfb2ZmKQoreworCWlmIChpc190dzI4Nngoc29sb19kZXYsIGNoaXBfaWQpKQorCQlyZXR1cm4gc29sb19pMmNfcmVhZGJ5dGUoc29sb19kZXYsIFNPTE9fSTJDX1RXLAorCQkJCQkgVFdfQ0hJUF9PRkZTRVRfQUREUihjaGlwX2lkKSwKKwkJCQkJIHR3Nnhfb2ZmKTsKKwllbHNlCisJCXJldHVybiBzb2xvX2kyY19yZWFkYnl0ZShzb2xvX2RldiwgU09MT19JMkNfVFcsCisJCQkJCSBUV19DSElQX09GRlNFVF9BRERSKGNoaXBfaWQpLAorCQkJCQkgdHdfb2ZmKTsKK30KKworc3RhdGljIHZvaWQgdHdfd3JpdGVieXRlKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCBpbnQgY2hpcF9pZCwKKwkJCSB1OCB0dzZ4X29mZiwgdTggdHdfb2ZmLCB1OCB2YWwpCit7CisJaWYgKGlzX3R3Mjg2eChzb2xvX2RldiwgY2hpcF9pZCkpCisJCXNvbG9faTJjX3dyaXRlYnl0ZShzb2xvX2RldiwgU09MT19JMkNfVFcsCisJCQkJICAgVFdfQ0hJUF9PRkZTRVRfQUREUihjaGlwX2lkKSwKKwkJCQkgICB0dzZ4X29mZiwgdmFsKTsKKwllbHNlCisJCXNvbG9faTJjX3dyaXRlYnl0ZShzb2xvX2RldiwgU09MT19JMkNfVFcsCisJCQkJICAgVFdfQ0hJUF9PRkZTRVRfQUREUihjaGlwX2lkKSwKKwkJCQkgICB0d19vZmYsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHR3X3dyaXRlX2FuZF92ZXJpZnkoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHU4IGFkZHIsIHU4IG9mZiwKKwkJCQl1OCB2YWwpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCXU4IHJ2YWwgPSBzb2xvX2kyY19yZWFkYnl0ZShzb2xvX2RldiwgU09MT19JMkNfVFcsIGFkZHIsIG9mZik7CisJCWlmIChydmFsID09IHZhbCkKKwkJCXJldHVybjsKKworCQlzb2xvX2kyY193cml0ZWJ5dGUoc29sb19kZXYsIFNPTE9fSTJDX1RXLCBhZGRyLCBvZmYsIHZhbCk7CisJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEpOworCX0KKworLy8JcHJpbnRrKCJzb2xvNjAxMC90dzI4OiBFcnJvciB3cml0aW5nIHJlZ2lzdGVyOiAlMDJ4LT4lMDJ4IFslMDJ4XVxuIiwKKy8vCQlhZGRyLCBvZmYsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgdHcyODY1X3NldHVwKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCB1OCBkZXZfYWRkcikKK3sKKwl1OCB0YmxfdHcyODY1X2NvbW1vblsyNTZdOworCWludCBpOworCisJaWYgKHNvbG9fZGV2LT52aWRlb190eXBlID09IFNPTE9fVk9fRk1UX1RZUEVfUEFMKQorCQltZW1jcHkodGJsX3R3Mjg2NV9jb21tb24sIHRibF90dzI4NjVfcGFsX3RlbXBsYXRlLAorCQkgICAgICAgc2l6ZW9mKHRibF90dzI4NjVfY29tbW9uKSk7CisJZWxzZQorCQltZW1jcHkodGJsX3R3Mjg2NV9jb21tb24sIHRibF90dzI4NjVfbnRzY190ZW1wbGF0ZSwKKwkJICAgICAgIHNpemVvZih0YmxfdHcyODY1X2NvbW1vbikpOworCisJLyogQUxJTksgTW9kZSAqLworCWlmIChzb2xvX2Rldi0+bnJfY2hhbnMgPT0gNCkgeworCQl0YmxfdHcyODY1X2NvbW1vblsweGQyXSA9IDB4MDE7CisJCXRibF90dzI4NjVfY29tbW9uWzB4Y2ZdID0gMHgwMDsKKwl9IGVsc2UgaWYgKHNvbG9fZGV2LT5ucl9jaGFucyA9PSA4KSB7CisJCXRibF90dzI4NjVfY29tbW9uWzB4ZDJdID0gMHgwMjsKKwkJaWYgKGRldl9hZGRyID09IFRXX0NISVBfT0ZGU0VUX0FERFIoMSkpCisJCQl0YmxfdHcyODY1X2NvbW1vblsweGNmXSA9IDB4ODA7CisJfSBlbHNlIGlmIChzb2xvX2Rldi0+bnJfY2hhbnMgPT0gMTYpIHsKKwkJdGJsX3R3Mjg2NV9jb21tb25bMHhkMl0gPSAweDAzOworCQlpZiAoZGV2X2FkZHIgPT0gVFdfQ0hJUF9PRkZTRVRfQUREUigxKSkKKwkJCXRibF90dzI4NjVfY29tbW9uWzB4Y2ZdID0gMHg4MzsKKwkJZWxzZSBpZiAoZGV2X2FkZHIgPT0gVFdfQ0hJUF9PRkZTRVRfQUREUigyKSkKKwkJCXRibF90dzI4NjVfY29tbW9uWzB4Y2ZdID0gMHg4MzsKKwkJZWxzZSBpZiAoZGV2X2FkZHIgPT0gVFdfQ0hJUF9PRkZTRVRfQUREUigzKSkKKwkJCXRibF90dzI4NjVfY29tbW9uWzB4Y2ZdID0gMHg4MDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgMHhmZjsgaSsrKSB7CisJCS8qIFNraXAgcmVhZCBvbmx5IHJlZ2lzdGVycyAqLworCQlpZiAoaSA+PSAweGI4ICYmIGkgPD0gMHhjMSApCisJCQljb250aW51ZTsKKwkJaWYgKChpICYgfjB4MzApID09IDB4MDAgfHwKKwkJICAgIChpICYgfjB4MzApID09IDB4MGMgfHwKKwkJICAgIChpICYgfjB4MzApID09IDB4MGQpCisJCQljb250aW51ZTsKKwkJaWYgKGkgPj0gMHhjNCAmJiBpIDw9IDB4YzcpCisJCQljb250aW51ZTsKKwkJaWYgKGkgPT0gMHhmZCkKKwkJCWNvbnRpbnVlOworCisJCXR3X3dyaXRlX2FuZF92ZXJpZnkoc29sb19kZXYsIGRldl9hZGRyLCBpLAorCQkJCSAgICB0YmxfdHcyODY1X2NvbW1vbltpXSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHcyODY0X3NldHVwKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCB1OCBkZXZfYWRkcikKK3sKKwl1OCB0YmxfdHcyODY0X2NvbW1vbltzaXplb2YodGJsX3R3Mjg2NF90ZW1wbGF0ZSldOworCWludCBpOworCisJbWVtY3B5KHRibF90dzI4NjRfY29tbW9uLCB0YmxfdHcyODY0X3RlbXBsYXRlLAorCSAgICAgICBzaXplb2YodGJsX3R3Mjg2NF9jb21tb24pKTsKKworCWlmIChzb2xvX2Rldi0+dHcyODY1ID09IDApIHsKKwkJLyogSVJRIE1vZGUgKi8KKwkJaWYgKHNvbG9fZGV2LT5ucl9jaGFucyA9PSA0KSB7CisJCQl0YmxfdHcyODY0X2NvbW1vblsweGQyXSA9IDB4MDE7CisJCQl0YmxfdHcyODY0X2NvbW1vblsweGNmXSA9IDB4MDA7CisJCX0gZWxzZSBpZiAoc29sb19kZXYtPm5yX2NoYW5zID09IDgpIHsKKwkJCXRibF90dzI4NjRfY29tbW9uWzB4ZDJdID0gMHgwMjsKKwkJCWlmIChkZXZfYWRkciA9PSBUV19DSElQX09GRlNFVF9BRERSKDApKQorCQkJCXRibF90dzI4NjRfY29tbW9uWzB4Y2ZdID0gMHg0MzsKKwkJCWVsc2UgaWYgKGRldl9hZGRyID09IFRXX0NISVBfT0ZGU0VUX0FERFIoMSkpCisJCQkJdGJsX3R3Mjg2NF9jb21tb25bMHhjZl0gPSAweDQwOworCQl9IGVsc2UgaWYgKHNvbG9fZGV2LT5ucl9jaGFucyA9PSAxNikgeworCQkJdGJsX3R3Mjg2NF9jb21tb25bMHhkMl0gPSAweDAzOworCQkJaWYgKGRldl9hZGRyID09IFRXX0NISVBfT0ZGU0VUX0FERFIoMCkpCisJCQkJdGJsX3R3Mjg2NF9jb21tb25bMHhjZl0gPSAweDQzOworCQkJZWxzZSBpZiAoZGV2X2FkZHIgPT0gVFdfQ0hJUF9PRkZTRVRfQUREUigxKSkKKwkJCQl0YmxfdHcyODY0X2NvbW1vblsweGNmXSA9IDB4NDM7CisJCQllbHNlIGlmIChkZXZfYWRkciA9PSBUV19DSElQX09GRlNFVF9BRERSKDIpKQorCQkJCXRibF90dzI4NjRfY29tbW9uWzB4Y2ZdID0gMHg0MzsKKwkJCWVsc2UgaWYgKGRldl9hZGRyID09IFRXX0NISVBfT0ZGU0VUX0FERFIoMykpCisJCQkJdGJsX3R3Mjg2NF9jb21tb25bMHhjZl0gPSAweDQwOworCQl9CisJfSBlbHNlIHsKKwkJLyogQUxJTksgTW9kZS4gQXNzdW1lcyB0aGF0IHRoZSBmaXJzdCB0dzI4eHggaXMgYQorCQkgKiAyODY1IGFuZCB0aGVzZSBhcmUgaW4gY2FzY2FkZS4gKi8KKwkJZm9yIChpID0gMDsgaSA8PSA0OyBpKyspCisJCQl0YmxfdHcyODY0X2NvbW1vblsweDA4IHwgaSA8PCA0XSA9IDB4MTI7CisKKwkJaWYgKHNvbG9fZGV2LT5ucl9jaGFucyA9PSA4KSB7CisJCQl0YmxfdHcyODY0X2NvbW1vblsweGQyXSA9IDB4MDI7CisJCQlpZiAoZGV2X2FkZHIgPT0gVFdfQ0hJUF9PRkZTRVRfQUREUigxKSkKKwkJCQl0YmxfdHcyODY0X2NvbW1vblsweGNmXSA9IDB4ODA7CisJCX0gZWxzZSBpZiAoc29sb19kZXYtPm5yX2NoYW5zID09IDE2KSB7CisJCQl0YmxfdHcyODY0X2NvbW1vblsweGQyXSA9IDB4MDM7CisJCQlpZiAoZGV2X2FkZHIgPT0gVFdfQ0hJUF9PRkZTRVRfQUREUigxKSkKKwkJCQl0YmxfdHcyODY0X2NvbW1vblsweGNmXSA9IDB4ODM7CisJCQllbHNlIGlmIChkZXZfYWRkciA9PSBUV19DSElQX09GRlNFVF9BRERSKDIpKQorCQkJCXRibF90dzI4NjRfY29tbW9uWzB4Y2ZdID0gMHg4MzsKKwkJCWVsc2UgaWYgKGRldl9hZGRyID09IFRXX0NISVBfT0ZGU0VUX0FERFIoMykpCisJCQkJdGJsX3R3Mjg2NF9jb21tb25bMHhjZl0gPSAweDgwOworCQl9CisJfQorCisJLyogTlRTQyBvciBQQUwgKi8KKwlpZiAoc29sb19kZXYtPnZpZGVvX3R5cGUgPT0gU09MT19WT19GTVRfVFlQRV9QQUwpIHsKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJdGJsX3R3Mjg2NF9jb21tb25bMHgwNyB8IChpIDw8IDQpXSB8PSAweDEwOworCQkJdGJsX3R3Mjg2NF9jb21tb25bMHgwOCB8IChpIDw8IDQpXSB8PSAweDA2OworCQkJdGJsX3R3Mjg2NF9jb21tb25bMHgwYSB8IChpIDw8IDQpXSB8PSAweDA4OworCQkJdGJsX3R3Mjg2NF9jb21tb25bMHgwYiB8IChpIDw8IDQpXSB8PSAweDEzOworCQkJdGJsX3R3Mjg2NF9jb21tb25bMHgwZSB8IChpIDw8IDQpXSB8PSAweDAxOworCQl9CisJCXRibF90dzI4NjRfY29tbW9uWzB4OWRdID0gMHg5MDsKKwkJdGJsX3R3Mjg2NF9jb21tb25bMHhmM10gPSAweDAwOworCQl0YmxfdHcyODY0X2NvbW1vblsweGY0XSA9IDB4YTA7CisJfQorCisJZm9yIChpID0gMDsgaSA8IDB4ZmY7IGkrKykgeworCQkvKiBTa2lwIHJlYWQgb25seSByZWdpc3RlcnMgKi8KKwkJaWYgKGkgPj0gMHhiOCAmJiBpIDw9IDB4YzEgKQorCQkJY29udGludWU7CisJCWlmICgoaSAmIH4weDMwKSA9PSAweDAwIHx8CisJCSAgICAoaSAmIH4weDMwKSA9PSAweDBjIHx8CisJCSAgICAoaSAmIH4weDMwKSA9PSAweDBkKQorCQkJY29udGludWU7CisJCWlmIChpID09IDB4NzQgfHwgaSA9PSAweDc3IHx8IGkgPT0gMHg3OCB8fAorCQkgICAgaSA9PSAweDc5IHx8IGkgPT0gMHg3YSkKKwkJCWNvbnRpbnVlOworCQlpZiAoaSA9PSAweGZkKQorCQkJY29udGludWU7CisKKwkJdHdfd3JpdGVfYW5kX3ZlcmlmeShzb2xvX2RldiwgZGV2X2FkZHIsIGksCisJCQkJICAgIHRibF90dzI4NjRfY29tbW9uW2ldKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0dzI4MTVfc2V0dXAoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHU4IGRldl9hZGRyKQoreworCXU4IHRibF9udHNjX3R3MjgxNV9jb21tb25bXSA9IHsKKwkJMHgwMCwgMHhjOCwgMHgyMCwgMHhkMCwgMHgwNiwgMHhmMCwgMHgwOCwgMHg4MCwKKwkJMHg4MCwgMHg4MCwgMHg4MCwgMHgwMiwgMHgwNiwgMHgwMCwgMHgxMSwKKwl9OworCisJdTggdGJsX3BhbF90dzI4MTVfY29tbW9uW10gPSB7CisJCTB4MDAsIDB4ODgsIDB4MjAsIDB4ZDAsIDB4MDUsIDB4MjAsIDB4MjgsIDB4ODAsCisJCTB4ODAsIDB4ODAsIDB4ODAsIDB4ODIsIDB4MDYsIDB4MDAsIDB4MTEsCisJfTsKKworCXU4IHRibF90dzI4MTVfc2ZyW10gPSB7CisJCTB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4NDUsIDB4YTAsIDB4ZDAsIDB4MmYsIC8vIDB4MDAKKwkJMHg2NCwgMHg4MCwgMHg4MCwgMHg4MiwgMHg4MiwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJMHgwMCwgMHgwZiwgMHgwNSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNiwgMHgwMCwgLy8gMHgxMAorCQkweDAwLCAweDAwLCAweDAwLCAweGZmLCAweDhmLCAweDAwLCAweDAwLCAweDAwLAorCQkweDg4LCAweDg4LCAweGMwLCAweDAwLCAweDIwLCAweDY0LCAweGE4LCAweGVjLCAvLyAweDIwCisJCTB4MzEsIDB4NzUsIDB4YjksIDB4ZmQsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODgsCisJCTB4ODgsIDB4MTEsIDB4MDAsIDB4ODgsIDB4ODgsIDB4MDAsCQkvLyAweDMwCisJfTsKKwl1OCAqdGJsX3R3MjgxNV9jb21tb247CisJaW50IGk7CisJaW50IGNoOworCisJdGJsX250c2NfdHcyODE1X2NvbW1vblsweDA2XSA9IDA7CisKKwkvKiBIb3Jpem9udGFsIERlbGF5IENvbnRyb2wgKi8KKwl0YmxfbnRzY190dzI4MTVfY29tbW9uWzB4MDJdID0gREVGQVVMVF9IREVMQVlfTlRTQyAmIDB4ZmY7CisJdGJsX250c2NfdHcyODE1X2NvbW1vblsweDA2XSB8PSAweDAzICYgKERFRkFVTFRfSERFTEFZX05UU0MgPj4gOCk7CisKKwkvKiBIb3Jpem9udGFsIEFjdGl2ZSBDb250cm9sICovCisJdGJsX250c2NfdHcyODE1X2NvbW1vblsweDAzXSA9IERFRkFVTFRfSEFDVElWRV9OVFNDICYgMHhmZjsKKwl0YmxfbnRzY190dzI4MTVfY29tbW9uWzB4MDZdIHw9CisJCSgoMHgwMyAmIChERUZBVUxUX0hBQ1RJVkVfTlRTQyA+PiA4KSkgPDwgMik7CisKKwkvKiBWZXJ0aWNhbCBEZWxheSBDb250cm9sICovCisJdGJsX250c2NfdHcyODE1X2NvbW1vblsweDA0XSA9IERFRkFVTFRfVkRFTEFZX05UU0MgJiAweGZmOworCXRibF9udHNjX3R3MjgxNV9jb21tb25bMHgwNl0gfD0KKwkJKCgweDAxICYgKERFRkFVTFRfVkRFTEFZX05UU0MgPj4gOCkpIDw8IDQpOworCisJLyogVmVydGljYWwgQWN0aXZlIENvbnRyb2wgKi8KKwl0YmxfbnRzY190dzI4MTVfY29tbW9uWzB4MDVdID0gREVGQVVMVF9WQUNUSVZFX05UU0MgJiAweGZmOworCXRibF9udHNjX3R3MjgxNV9jb21tb25bMHgwNl0gfD0KKwkJKCgweDAxICYgKERFRkFVTFRfVkFDVElWRV9OVFNDID4+IDgpKSA8PCA1KTsKKworCXRibF9wYWxfdHcyODE1X2NvbW1vblsweDA2XSA9IDA7CisKKwkvKiBIb3Jpem9udGFsIERlbGF5IENvbnRyb2wgKi8KKwl0YmxfcGFsX3R3MjgxNV9jb21tb25bMHgwMl0gPSBERUZBVUxUX0hERUxBWV9QQUwgJiAweGZmOworCXRibF9wYWxfdHcyODE1X2NvbW1vblsweDA2XSB8PSAweDAzICYgKERFRkFVTFRfSERFTEFZX1BBTCA+PiA4KTsKKworCS8qIEhvcml6b250YWwgQWN0aXZlIENvbnRyb2wgKi8KKwl0YmxfcGFsX3R3MjgxNV9jb21tb25bMHgwM10gPSBERUZBVUxUX0hBQ1RJVkVfUEFMICYgMHhmZjsKKwl0YmxfcGFsX3R3MjgxNV9jb21tb25bMHgwNl0gfD0KKwkJKCgweDAzICYgKERFRkFVTFRfSEFDVElWRV9QQUwgPj4gOCkpIDw8IDIpOworCisJLyogVmVydGljYWwgRGVsYXkgQ29udHJvbCAqLworCXRibF9wYWxfdHcyODE1X2NvbW1vblsweDA0XSA9IERFRkFVTFRfVkRFTEFZX1BBTCAmIDB4ZmY7CisJdGJsX3BhbF90dzI4MTVfY29tbW9uWzB4MDZdIHw9CisJCSgoMHgwMSAmIChERUZBVUxUX1ZERUxBWV9QQUwgPj4gOCkpIDw8IDQpOworCisJLyogVmVydGljYWwgQWN0aXZlIENvbnRyb2wgKi8KKwl0YmxfcGFsX3R3MjgxNV9jb21tb25bMHgwNV0gPSBERUZBVUxUX1ZBQ1RJVkVfUEFMICYgMHhmZjsKKwl0YmxfcGFsX3R3MjgxNV9jb21tb25bMHgwNl0gfD0KKwkJKCgweDAxICYgKERFRkFVTFRfVkFDVElWRV9QQUwgPj4gOCkpIDw8IDUpOworCisJdGJsX3R3MjgxNV9jb21tb24gPQorCSAgICAoc29sb19kZXYtPnZpZGVvX3R5cGUgPT0gU09MT19WT19GTVRfVFlQRV9OVFNDKSA/CisJICAgICB0YmxfbnRzY190dzI4MTVfY29tbW9uIDogdGJsX3BhbF90dzI4MTVfY29tbW9uOworCisJLyogRHVhbCBJVFUtUiBCVC42NTYgZm9ybWF0ICovCisJdGJsX3R3MjgxNV9jb21tb25bMHgwZF0gfD0gMHgwNDsKKworCS8qIEF1ZGlvIGNvbmZpZ3VyYXRpb24gKi8KKwl0YmxfdHcyODE1X3NmclsweDYyIC0gMHg0MF0gJj0gfigzIDw8IDYpOworCisJaWYgKHNvbG9fZGV2LT5ucl9jaGFucyA9PSA0KSB7CisJCXRibF90dzI4MTVfc2ZyWzB4NjMgLSAweDQwXSB8PSAxOworCQl0YmxfdHcyODE1X3NmclsweDYyIC0gMHg0MF0gfD0gMyA8PCA2OworCX0gZWxzZSBpZiAoc29sb19kZXYtPm5yX2NoYW5zID09IDgpIHsKKwkJdGJsX3R3MjgxNV9zZnJbMHg2MyAtIDB4NDBdIHw9IDI7CisJCWlmIChkZXZfYWRkciA9PSBUV19DSElQX09GRlNFVF9BRERSKDApKQorCQkJdGJsX3R3MjgxNV9zZnJbMHg2MiAtIDB4NDBdIHw9IDEgPDwgNjsKKwkJZWxzZSBpZiAoZGV2X2FkZHIgPT0gVFdfQ0hJUF9PRkZTRVRfQUREUigxKSkKKwkJCXRibF90dzI4MTVfc2ZyWzB4NjIgLSAweDQwXSB8PSAyIDw8IDY7CisJfSBlbHNlIGlmIChzb2xvX2Rldi0+bnJfY2hhbnMgPT0gMTYpIHsKKwkJdGJsX3R3MjgxNV9zZnJbMHg2MyAtIDB4NDBdIHw9IDM7CisJCWlmIChkZXZfYWRkciA9PSBUV19DSElQX09GRlNFVF9BRERSKDApKQorCQkJdGJsX3R3MjgxNV9zZnJbMHg2MiAtIDB4NDBdIHw9IDEgPDwgNjsKKwkJZWxzZSBpZiAoZGV2X2FkZHIgPT0gVFdfQ0hJUF9PRkZTRVRfQUREUigxKSkKKwkJCXRibF90dzI4MTVfc2ZyWzB4NjIgLSAweDQwXSB8PSAwIDw8IDY7CisJCWVsc2UgaWYgKGRldl9hZGRyID09IFRXX0NISVBfT0ZGU0VUX0FERFIoMikpCisJCQl0YmxfdHcyODE1X3NmclsweDYyIC0gMHg0MF0gfD0gMCA8PCA2OworCQllbHNlIGlmIChkZXZfYWRkciA9PSBUV19DSElQX09GRlNFVF9BRERSKDMpKQorCQkJdGJsX3R3MjgxNV9zZnJbMHg2MiAtIDB4NDBdIHw9IDIgPDwgNjsKKwl9CisKKwkvKiBPdXRwdXQgbW9kZSBvZiBSX0FEQVRNIHBpbiAoMCBtaXhpbmcsIDEgcmVjb3JkKSAqLworCS8qIHRibF90dzI4MTVfc2ZyWzB4NjMgLSAweDQwXSB8PSAwIDw8IDI7ICovCisKKwkvKiA4S0h6LCB1c2VkIHRvIGJlIDE2S0h6LCBidXQgY2hhbmdlZCBmb3IgcmVtb3RlIGNsaWVudCBjb21wYXQgKi8KKwl0YmxfdHcyODE1X3NmclsweDYyIC0gMHg0MF0gfD0gMCA8PCAyOworCXRibF90dzI4MTVfc2ZyWzB4NmMgLSAweDQwXSB8PSAwIDw8IDI7CisKKwkvKiBQbGF5YmFjayBvZiByaWdodCBjaGFubmVsICovCisJdGJsX3R3MjgxNV9zZnJbMHg2YyAtIDB4NDBdIHw9IDEgPDwgNTsKKworCS8qIFJlc2VydmVkIHZhbHVlIChYWFggPz8pICovCisJdGJsX3R3MjgxNV9zZnJbMHg1YyAtIDB4NDBdIHw9IDEgPDwgNTsKKworCS8qIEFuYWxvZyBvdXRwdXQgZ2FpbiBhbmQgbWl4IHJhdGlvIHBsYXliYWNrIG9uIGZ1bGwgKi8KKwl0YmxfdHcyODE1X3NmclsweDcwIC0gMHg0MF0gfD0gMHhmZjsKKwkvKiBTZWxlY3QgcGxheWJhY2sgYXVkaW8gYW5kIG11dGUgYWxsIGV4Y2VwdCAqLworCXRibF90dzI4MTVfc2ZyWzB4NzEgLSAweDQwXSB8PSAweDEwOworCXRibF90dzI4MTVfc2ZyWzB4NmQgLSAweDQwXSB8PSAweDBmOworCisJLyogRW5kIG9mIGF1ZGlvIGNvbmZpZ3VyYXRpb24gKi8KKworCWZvciAoY2ggPSAwOyBjaCA8IDQ7IGNoKyspIHsKKwkJdGJsX3R3MjgxNV9jb21tb25bMHgwZF0gJj0gfjM7CisJCXN3aXRjaCAoY2gpIHsKKwkJY2FzZSAwOgorCQkJdGJsX3R3MjgxNV9jb21tb25bMHgwZF0gfD0gMHgyMTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQl0YmxfdHcyODE1X2NvbW1vblsweDBkXSB8PSAweDIwOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXRibF90dzI4MTVfY29tbW9uWzB4MGRdIHw9IDB4MjM7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJdGJsX3R3MjgxNV9jb21tb25bMHgwZF0gfD0gMHgyMjsKKwkJCWJyZWFrOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IDB4MGY7IGkrKykgeworCQkJaWYgKGkgPT0gMHgwMCkKKwkJCQljb250aW51ZTsJLy8gcmVhZC1vbmx5CisJCQlzb2xvX2kyY193cml0ZWJ5dGUoc29sb19kZXYsIFNPTE9fSTJDX1RXLAorCQkJCQkgICBkZXZfYWRkciwgKGNoICogMHgxMCkgKyBpLAorCQkJCQkgICB0YmxfdHcyODE1X2NvbW1vbltpXSk7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAweDQwOyBpIDwgMHg3NjsgaSsrKSB7CisJCS8qIFNraXAgcmVhZC1vbmx5IGFuZCBub3AgcmVnaXN0ZXJzICovCisJCWlmIChpID09IDB4NDAgfHwgaSA9PSAweDU5IHx8IGkgPT0gMHg1YSB8fAorCQkgICAgaSA9PSAweDVkIHx8IGkgPT0gMHg1ZSB8fCBpID09IDB4NWYpCisJCQljb250aW51ZTsKKworCQlzb2xvX2kyY193cml0ZWJ5dGUoc29sb19kZXYsIFNPTE9fSTJDX1RXLCBkZXZfYWRkciwgaSwKKwkJCQkgICAgICAgdGJsX3R3MjgxNV9zZnJbaSAtIDB4NDBdKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBGSVJTVF9BQ1RJVkVfTElORQkweDAwMDgKKyNkZWZpbmUgTEFTVF9BQ1RJVkVfTElORQkweDAxMDIKKworc3RhdGljIHZvaWQgc2FhNzEyOF9zZXR1cChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldikKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyIHJlZ3NbMTI4XSA9IHsKKwkJMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwKKwkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJMHgxQywgMHgyQiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMCwKKwkJMHg1OSwgMHgxZCwgMHg3NSwgMHgzZiwgMHgwNiwgMHgzZiwgMHgwMCwgMHgwMCwKKwkJMHgxYywgMHgzMywgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHgzZiwgMHgwMCwKKwkJMHgxYSwgMHgxYSwgMHgxMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgxMCwgMHg5NywgMHg0YywgMHgxOCwKKwkJMHg5YiwgMHg5MywgMHg5ZiwgMHhmZiwgMHg3YywgMHgzNCwgMHgzZiwgMHgzZiwKKwkJMHgzZiwgMHg4MywgMHg4MywgMHg4MCwgMHgwZCwgMHgwZiwgMHhjMywgMHgwNiwKKwkJMHgwMiwgMHg4MCwgMHg3MSwgMHg3NywgMHhhNywgMHg2NywgMHg2NiwgMHgyZSwKKwkJMHg3YiwgMHgxMSwgMHg0ZiwgMHgxZiwgMHg3YywgMHhmMCwgMHgyMSwgMHg3NywKKwkJMHg0MSwgMHg4OCwgMHg0MSwgMHgxMiwgMHhlZCwgMHgxMCwgMHgxMCwgMHgwMCwKKwkJMHg0MSwgMHhjMywgMHgwMCwgMHgzZSwgMHhiOCwgMHgwMiwgMHgwMCwgMHgwMCwKKwkJMHgwMCwgMHgwMCwgMHgwOCwgMHhmZiwgMHg4MCwgMHgwMCwgMHhmZiwgMHhmZiwKKwl9OworCisJcmVnc1sweDdBXSA9IEZJUlNUX0FDVElWRV9MSU5FICYgMHhmZjsKKwlyZWdzWzB4N0JdID0gTEFTVF9BQ1RJVkVfTElORSAmIDB4ZmY7CisJcmVnc1sweDdDXSA9ICgoMSA8PCA3KSB8CisJCQkoKChMQVNUX0FDVElWRV9MSU5FID4+IDgpICYgMSkgPDwgNikgfAorCQkJKCgoRklSU1RfQUNUSVZFX0xJTkUgPj4gOCkgJiAxKSA8PCA0KSk7CisKKwkvKiBQQUw6IFhYWDogV2UgY291bGQgZG8gYSBzZWNvbmQgc2V0IG9mIHJlZ3MgdG8gYXZvaWQgdGhpcyAqLworCWlmIChzb2xvX2Rldi0+dmlkZW9fdHlwZSAhPSBTT0xPX1ZPX0ZNVF9UWVBFX05UU0MpIHsKKwkJcmVnc1sweDI4XSA9IDB4RTE7CisKKwkJcmVnc1sweDVBXSA9IDB4MEY7CisJCXJlZ3NbMHg2MV0gPSAweDAyOworCQlyZWdzWzB4NjJdID0gMHgzNTsKKwkJcmVnc1sweDYzXSA9IDB4Q0I7CisJCXJlZ3NbMHg2NF0gPSAweDhBOworCQlyZWdzWzB4NjVdID0gMHgwOTsKKwkJcmVnc1sweDY2XSA9IDB4MkE7CisKKwkJcmVnc1sweDZDXSA9IDB4ZjE7CisJCXJlZ3NbMHg2RV0gPSAweDIwOworCisJCXJlZ3NbMHg3QV0gPSAweDA2ICsgMTI7CisJCXJlZ3NbMHg3Yl0gPSAweDI0ICsgMTI7CisJCXJlZ3NbMHg3Y10gfD0gMSA8PCA2OworCX0KKworCS8qIEZpcnN0IDB4MjUgYnl0ZXMgYXJlIHJlYWQtb25seT8gKi8KKwlmb3IgKGkgPSAweDI2OyBpIDwgMTI4OyBpKyspIHsKKwkJaWYgKGkgPT0gMHg2MCB8fCBpID09IDB4N0QpCisJCQljb250aW51ZTsKKwkJc29sb19pMmNfd3JpdGVieXRlKHNvbG9fZGV2LCBTT0xPX0kyQ19TQUEsIDB4NDYsIGksIHJlZ3NbaV0pOworCX0KKworCXJldHVybjsKK30KKworaW50IHNvbG9fdHcyOF9pbml0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCWludCBpOworCXU4IHZhbHVlOworCisJLyogRGV0ZWN0IHRlY2h3ZWxsIGNoaXAgdHlwZSAqLworCWZvciAoaSA9IDA7IGkgPCBUV19OVU1fQ0hJUDsgaSsrKSB7CisJCXZhbHVlID0gc29sb19pMmNfcmVhZGJ5dGUoc29sb19kZXYsIFNPTE9fSTJDX1RXLAorCQkJCQkgIFRXX0NISVBfT0ZGU0VUX0FERFIoaSksIDB4RkYpOworCisJCXN3aXRjaCAodmFsdWUgPj4gMykgeworCQljYXNlIDB4MTg6CisJCQlzb2xvX2Rldi0+dHcyODY1IHw9IDEgPDwgaTsKKwkJCXNvbG9fZGV2LT50dzI4X2NudCsrOworCQkJYnJlYWs7CisJCWNhc2UgMHgwYzoKKwkJCXNvbG9fZGV2LT50dzI4NjQgfD0gMSA8PCBpOworCQkJc29sb19kZXYtPnR3MjhfY250Kys7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXZhbHVlID0gc29sb19pMmNfcmVhZGJ5dGUoc29sb19kZXYsIFNPTE9fSTJDX1RXLAorCQkJCQkJICBUV19DSElQX09GRlNFVF9BRERSKGkpLCAweDU5KTsKKwkJCWlmICgodmFsdWUgPj4gMykgPT0gMHgwNCkgeworCQkJCXNvbG9fZGV2LT50dzI4MTUgfD0gMSA8PCBpOworCQkJCXNvbG9fZGV2LT50dzI4X2NudCsrOworCQkJfQorCQl9CisJfQorCisJaWYgKCFzb2xvX2Rldi0+dHcyOF9jbnQpCisJCXJldHVybiAtRUlOVkFMOworCisJc2FhNzEyOF9zZXR1cChzb2xvX2Rldik7CisKKwlmb3IgKGkgPSAwOyBpIDwgc29sb19kZXYtPnR3MjhfY250OyBpKyspIHsKKwkJaWYgKChzb2xvX2Rldi0+dHcyODY1ICYgKDEgPDwgaSkpKQorCQkJdHcyODY1X3NldHVwKHNvbG9fZGV2LCBUV19DSElQX09GRlNFVF9BRERSKGkpKTsKKwkJZWxzZSBpZiAoKHNvbG9fZGV2LT50dzI4NjQgJiAoMSA8PCBpKSkpCisJCQl0dzI4NjRfc2V0dXAoc29sb19kZXYsIFRXX0NISVBfT0ZGU0VUX0FERFIoaSkpOworCQllbHNlCisJCQl0dzI4MTVfc2V0dXAoc29sb19kZXYsIFRXX0NISVBfT0ZGU0VUX0FERFIoaSkpOworCX0KKworCWRldl9pbmZvKCZzb2xvX2Rldi0+cGRldi0+ZGV2LCAiSW5pdGlhbGl6ZWQgJWQgdHcyOHh4IGNoaXAlczoiLAorCQkgc29sb19kZXYtPnR3MjhfY250LCBzb2xvX2Rldi0+dHcyOF9jbnQgPT0gMSA/ICIiIDogInMiKTsKKworCWlmIChzb2xvX2Rldi0+dHcyODY1KQorCQlwcmludGsoIiB0dzI4NjVbJWRdIiwgaHdlaWdodDMyKHNvbG9fZGV2LT50dzI4NjUpKTsKKwlpZiAoc29sb19kZXYtPnR3Mjg2NCkKKwkJcHJpbnRrKCIgdHcyODY0WyVkXSIsIGh3ZWlnaHQzMihzb2xvX2Rldi0+dHcyODY0KSk7CisJaWYgKHNvbG9fZGV2LT50dzI4MTUpCisJCXByaW50aygiIHR3MjgxNVslZF0iLCBod2VpZ2h0MzIoc29sb19kZXYtPnR3MjgxNSkpOworCXByaW50aygiXG4iKTsKKworCXJldHVybiAwOworfQorCisvKiAKKyAqIFdlIGFjY2Vzc2VkIHRoZSB2aWRlbyBzdGF0dXMgc2lnbmFsIGluIHRoZSBUZWNod2VsbCBjaGlwIHRocm91Z2gKKyAqIGlpYy9pMmMgYmVjYXVzZSB0aGUgdmlkZW8gc3RhdHVzIHJlcG9ydGVkIGJ5IHJlZ2lzdGVyIFJFR19WSV9TVEFUVVMxCisgKiAoYWRkcmVzcyAweDAxMkMpIG9mIHRoZSBTT0xPNjAxMCBjaGlwIGRvZXNuJ3QgZ2l2ZSB0aGUgY29ycmVjdCB2aWRlbworICogc3RhdHVzIHNpZ25hbCB2YWx1ZXMuCisgKi8KK2ludCB0dzI4X2dldF92aWRlb19zdGF0dXMoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHU4IGNoKQoreworCXU4IHZhbCwgY2hpcF9udW07CisKKwkvKiBHZXQgdGhlIHJpZ2h0IGNoaXAgYW5kIG9uLWNoaXAgY2hhbm5lbCAqLworCWNoaXBfbnVtID0gY2ggLyA0OworCWNoICU9IDQ7CisKKwl2YWwgPSB0d19yZWFkYnl0ZShzb2xvX2RldiwgY2hpcF9udW0sIFRXMjg2WF9BVl9TVEFUX0FERFIsCisJCQkgIFRXX0FWX1NUQVRfQUREUikgJiAweDBmOworCisJcmV0dXJuIHZhbCAmICgxIDw8IGNoKSA/IDEgOiAwOworfQorCisjaWYgMAorLyogU3RhdHVzIG9mIGF1ZGlvIGZyb20gdXAgdG8gNCB0ZWNod2VsbCBjaGlwcyBhcmUgY29tYmluZWQgaW50byAxIHZhcmlhYmxlLgorICogU2VlIHRlY2h3ZWxsIGRhdGFzaGVldCBmb3IgZGV0YWlscy4gKi8KK3UxNiB0dzI4X2dldF9hdWRpb19zdGF0dXMoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJdTggdmFsOworCXUxNiBzdGF0dXMgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNvbG9fZGV2LT50dzI4X2NudDsgaSsrKSB7CisJCXZhbCA9ICh0d19yZWFkYnl0ZShzb2xvX2RldiwgaSwgVFcyODZYX0FWX1NUQVRfQUREUiwKKwkJCQkgICBUV19BVl9TVEFUX0FERFIpICYgMHhmMCkgPj4gNDsKKwkJc3RhdHVzIHw9IHZhbCA8PCAoaSAqIDQpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisjZW5kaWYKKworaW50IHR3Mjhfc2V0X2N0cmxfdmFsKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCB1MzIgY3RybCwgdTggY2gsCisJCSAgICAgIHMzMiB2YWwpCit7CisJY2hhciBzdmFsOworCXU4IGNoaXBfbnVtOworCisJLyogR2V0IHRoZSByaWdodCBjaGlwIGFuZCBvbi1jaGlwIGNoYW5uZWwgKi8KKwljaGlwX251bSA9IGNoIC8gNDsKKwljaCAlPSA0OworCisJaWYgKHZhbCA+IDI1NSB8fCB2YWwgPCAwKQorCQlyZXR1cm4gLUVSQU5HRTsKKworCXN3aXRjaCAoY3RybCkgeworCWNhc2UgVjRMMl9DSURfU0hBUlBORVNTOgorCQkvKiBPbmx5IDI4NnggaGFzIHNoYXJwbmVzcyAqLworCQlpZiAodmFsID4gMHgwZiB8fCB2YWwgPCAwKQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCWlmIChpc190dzI4Nngoc29sb19kZXYsIGNoaXBfbnVtKSkgeworCQkJdTggdiA9IHNvbG9faTJjX3JlYWRieXRlKHNvbG9fZGV2LCBTT0xPX0kyQ19UVywKKwkJCQkJCSBUV19DSElQX09GRlNFVF9BRERSKGNoaXBfbnVtKSwKKwkJCQkJCSBUVzI4NnhfU0hBUlBORVNTKGNoaXBfbnVtKSk7CisJCQl2ICY9IDB4ZjA7CisJCQl2IHw9IHZhbDsKKwkJCXNvbG9faTJjX3dyaXRlYnl0ZShzb2xvX2RldiwgU09MT19JMkNfVFcsCisJCQkJCSAgIFRXX0NISVBfT0ZGU0VUX0FERFIoY2hpcF9udW0pLAorCQkJCQkgICBUVzI4NnhfU0hBUlBORVNTKGNoaXBfbnVtKSwgdik7CisJCX0gZWxzZSBpZiAodmFsICE9IDApCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJaWYgKGlzX3R3Mjg2eChzb2xvX2RldiwgY2hpcF9udW0pKQorCQkJc3ZhbCA9IHZhbCAtIDEyODsKKwkJZWxzZQorCQkJc3ZhbCA9IChjaGFyKXZhbDsKKwkJdHdfd3JpdGVieXRlKHNvbG9fZGV2LCBjaGlwX251bSwgVFcyODZ4X0hVRV9BRERSKGNoKSwKKwkJCSAgICAgVFdfSFVFX0FERFIoY2gpLCBzdmFsKTsKKworCQlicmVhazsKKworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJaWYgKGlzX3R3Mjg2eChzb2xvX2RldiwgY2hpcF9udW0pKSB7CisJCQlzb2xvX2kyY193cml0ZWJ5dGUoc29sb19kZXYsIFNPTE9fSTJDX1RXLAorCQkJCQkgICBUV19DSElQX09GRlNFVF9BRERSKGNoaXBfbnVtKSwKKwkJCQkJICAgVFcyODZ4X1NBVFVSQVRJT05VX0FERFIoY2gpLCB2YWwpOworCQl9CisJCXR3X3dyaXRlYnl0ZShzb2xvX2RldiwgY2hpcF9udW0sIFRXMjg2eF9TQVRVUkFUSU9OVl9BRERSKGNoKSwKKwkJCSAgICAgVFdfU0FUVVJBVElPTl9BRERSKGNoKSwgdmFsKTsKKworCQlicmVhazsKKworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCXR3X3dyaXRlYnl0ZShzb2xvX2RldiwgY2hpcF9udW0sIFRXMjg2eF9DT05UUkFTVF9BRERSKGNoKSwKKwkJCSAgICAgVFdfQ09OVFJBU1RfQUREUihjaCksIHZhbCk7CisJCWJyZWFrOworCisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQlpZiAoaXNfdHcyODZ4KHNvbG9fZGV2LCBjaGlwX251bSkpCisJCQlzdmFsID0gdmFsIC0gMTI4OworCQllbHNlCisJCQlzdmFsID0gKGNoYXIpdmFsOworCQl0d193cml0ZWJ5dGUoc29sb19kZXYsIGNoaXBfbnVtLCBUVzI4NnhfQlJJR0hUTkVTU19BRERSKGNoKSwKKwkJCSAgICAgVFdfQlJJR0hUTkVTU19BRERSKGNoKSwgc3ZhbCk7CisKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCB0dzI4X2dldF9jdHJsX3ZhbChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgdTMyIGN0cmwsIHU4IGNoLAorCQkgICAgICBzMzIgKnZhbCkKK3sKKwl1OCBydmFsLCBjaGlwX251bTsKKworCS8qIEdldCB0aGUgcmlnaHQgY2hpcCBhbmQgb24tY2hpcCBjaGFubmVsICovCisJY2hpcF9udW0gPSBjaCAvIDQ7CisJY2ggJT0gNDsKKworCXN3aXRjaCAoY3RybCkgeworCWNhc2UgVjRMMl9DSURfU0hBUlBORVNTOgorCQkvKiBPbmx5IDI4NnggaGFzIHNoYXJwbmVzcyAqLworCQlpZiAoaXNfdHcyODZ4KHNvbG9fZGV2LCBjaGlwX251bSkpIHsKKwkJCXJ2YWwgPSBzb2xvX2kyY19yZWFkYnl0ZShzb2xvX2RldiwgU09MT19JMkNfVFcsCisJCQkJCQkgVFdfQ0hJUF9PRkZTRVRfQUREUihjaGlwX251bSksCisJCQkJCQkgVFcyODZ4X1NIQVJQTkVTUyhjaGlwX251bSkpOworCQkJKnZhbCA9IHJ2YWwgJiAweDBmOworCQl9IGVsc2UKKwkJCSp2YWwgPSAwOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJcnZhbCA9IHR3X3JlYWRieXRlKHNvbG9fZGV2LCBjaGlwX251bSwgVFcyODZ4X0hVRV9BRERSKGNoKSwKKwkJCQkgICBUV19IVUVfQUREUihjaCkpOworCQlpZiAoaXNfdHcyODZ4KHNvbG9fZGV2LCBjaGlwX251bSkpCisJCQkqdmFsID0gKHMzMikoKGNoYXIpcnZhbCkgKyAxMjg7CisJCWVsc2UKKwkJCSp2YWwgPSBydmFsOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCSp2YWwgPSB0d19yZWFkYnl0ZShzb2xvX2RldiwgY2hpcF9udW0sCisJCQkJICAgVFcyODZ4X1NBVFVSQVRJT05VX0FERFIoY2gpLAorCQkJCSAgIFRXX1NBVFVSQVRJT05fQUREUihjaCkpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQkqdmFsID0gdHdfcmVhZGJ5dGUoc29sb19kZXYsIGNoaXBfbnVtLAorCQkJCSAgIFRXMjg2eF9DT05UUkFTVF9BRERSKGNoKSwKKwkJCQkgICBUV19DT05UUkFTVF9BRERSKGNoKSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJcnZhbCA9IHR3X3JlYWRieXRlKHNvbG9fZGV2LCBjaGlwX251bSwKKwkJCQkgICBUVzI4NnhfQlJJR0hUTkVTU19BRERSKGNoKSwKKwkJCQkgICBUV19CUklHSFRORVNTX0FERFIoY2gpKTsKKwkJaWYgKGlzX3R3Mjg2eChzb2xvX2RldiwgY2hpcF9udW0pKSAKKwkJCSp2YWwgPSAoczMyKSgoY2hhcilydmFsKSArIDEyODsKKwkJZWxzZQorCQkJKnZhbCA9IHJ2YWw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisjaWYgMAorLyoKKyAqIEZvciBhdWRpbyBvdXRwdXQgdm9sdW1lLCB0aGUgb3V0cHV0IGNoYW5uZWwgaXMgb25seSAxLiBJbiB0aGlzIGNhc2Ugd2UKKyAqIGRvbid0IG5lZWQgdG8gb2Zmc2V0IFRXX0NISVBfT0ZGU0VUX0FERFIuIFRoZSBUV19DSElQX09GRlNFVF9BRERSIHVzZWQKKyAqIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHRlY2h3ZWxsIGNoaXAuCisgKi8KK3ZvaWQgdHcyODE1X1NldF9BdWRpb091dFZvbChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgdW5zaWduZWQgaW50IHVfdmFsKQoreworCXVuc2lnbmVkIGludCB2YWw7CisJdW5zaWduZWQgaW50IGNoaXBfbnVtOworCisJY2hpcF9udW0gPSAoc29sb19kZXYtPm5yX2NoYW5zIC0gMSkgLyA0OworCisJdmFsID0gdHdfcmVhZGJ5dGUoc29sb19kZXYsIGNoaXBfbnVtLCBUVzI4NnhfQVVESU9fT1VUUFVUX1ZPTF9BRERSLAorCQkJICBUV19BVURJT19PVVRQVVRfVk9MX0FERFIpOworCisJdV92YWwgPSAodmFsICYgMHgwZikgfCAodV92YWwgPDwgNCk7CisKKwl0d193cml0ZWJ5dGUoc29sb19kZXYsIGNoaXBfbnVtLCBUVzI4NnhfQVVESU9fT1VUUFVUX1ZPTF9BRERSLAorCQkgICAgIFRXX0FVRElPX09VVFBVVF9WT0xfQUREUiwgdV92YWwpOworfQorI2VuZGlmCisKK3U4IHR3MjhfZ2V0X2F1ZGlvX2dhaW4oc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHU4IGNoKQoreworCXU4IHZhbDsKKwl1OCBjaGlwX251bTsKKworCS8qIEdldCB0aGUgcmlnaHQgY2hpcCBhbmQgb24tY2hpcCBjaGFubmVsICovCisJY2hpcF9udW0gPSBjaCAvIDQ7CisJY2ggJT0gNDsKKworCXZhbCA9IHR3X3JlYWRieXRlKHNvbG9fZGV2LCBjaGlwX251bSwKKwkJCSAgVFcyODZ4X0FVRElPX0lOUFVUX0dBSU5fQUREUihjaCksCisJCQkgIFRXX0FVRElPX0lOUFVUX0dBSU5fQUREUihjaCkpOworCisJcmV0dXJuIChjaCAlIDIpID8gKHZhbCA+PiA0KSA6ICh2YWwgJiAweDBmKTsKK30KKwordm9pZCB0dzI4X3NldF9hdWRpb19nYWluKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCB1OCBjaCwgdTggdmFsKQoreworCXU4IG9sZF92YWw7CisJdTggY2hpcF9udW07CisKKwkvKiBHZXQgdGhlIHJpZ2h0IGNoaXAgYW5kIG9uLWNoaXAgY2hhbm5lbCAqLworCWNoaXBfbnVtID0gY2ggLyA0OworCWNoICU9IDQ7CisKKwlvbGRfdmFsID0gdHdfcmVhZGJ5dGUoc29sb19kZXYsIGNoaXBfbnVtLAorCQkJICAgICAgVFcyODZ4X0FVRElPX0lOUFVUX0dBSU5fQUREUihjaCksCisJCQkgICAgICBUV19BVURJT19JTlBVVF9HQUlOX0FERFIoY2gpKTsKKworCXZhbCA9IChvbGRfdmFsICYgKChjaCAlIDIpID8gMHgwZiA6IDB4ZjApKSB8CisJCSgoY2ggJSAyKSA/ICh2YWwgPDwgNCkgOiB2YWwpOworCisJdHdfd3JpdGVieXRlKHNvbG9fZGV2LCBjaGlwX251bSwgVFcyODZ4X0FVRElPX0lOUFVUX0dBSU5fQUREUihjaCksCisJCSAgICAgVFdfQVVESU9fSU5QVVRfR0FJTl9BRERSKGNoKSwgdmFsKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC10dzI4LmggYi9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtdHcyOC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZWVjZmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtdHcyOC5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQmx1ZWNoZXJyeSwgTExDIHd3dy5ibHVlY2hlcnJ5ZHZyLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDEwIEJlbiBDb2xsaW5zIDxiY29sbGluc0BibHVlY2hlcnJ5Lm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19TT0xPNjAxMF9UVzI4X0gKKyNkZWZpbmUgX19TT0xPNjAxMF9UVzI4X0gKKworI2luY2x1ZGUgInNvbG82MDEwLmgiCisKKyNkZWZpbmUgVFdfTlVNX0NISVAJCQkJNAorI2RlZmluZSBUV19CQVNFX0FERFIJCQkJMHgyOAorI2RlZmluZSBUV19DSElQX09GRlNFVF9BRERSKG4pCQkJKFRXX0JBU0VfQUREUiArIChuKSkKKworLyogdHcyODE1ICovCisjZGVmaW5lIFRXX0FWX1NUQVRfQUREUgkJCQkweDVhCisjZGVmaW5lIFRXX0hVRV9BRERSKG4pCQkJCSgweDA3IHwgKChuKSA8PCA0KSkKKyNkZWZpbmUgVFdfU0FUVVJBVElPTl9BRERSKG4pCQkJKDB4MDggfCAoKG4pIDw8IDQpKQorI2RlZmluZSBUV19DT05UUkFTVF9BRERSKG4pCQkJKDB4MDkgfCAoKG4pIDw8IDQpKQorI2RlZmluZSBUV19CUklHSFRORVNTX0FERFIobikJCQkoMHgwYSB8ICgobikgPDwgNCkpCisjZGVmaW5lIFRXX0FVRElPX09VVFBVVF9WT0xfQUREUgkJMHg3MAorI2RlZmluZSBUV19BVURJT19JTlBVVF9HQUlOX0FERFIobikJCSgweDYwICsgKChuID4gMSkgPyAxIDogMCkpCisKKy8qIHR3Mjg2eCAqLworI2RlZmluZSBUVzI4NlhfQVZfU1RBVF9BRERSCQkJMHhmZAorI2RlZmluZSBUVzI4NnhfSFVFX0FERFIobikJCQkoMHgwNiB8ICgobikgPDwgNCkpCisjZGVmaW5lIFRXMjg2eF9TQVRVUkFUSU9OVV9BRERSKG4pCQkoMHgwNCB8ICgobikgPDwgNCkpCisjZGVmaW5lIFRXMjg2eF9TQVRVUkFUSU9OVl9BRERSKG4pCQkoMHgwNSB8ICgobikgPDwgNCkpCisjZGVmaW5lIFRXMjg2eF9DT05UUkFTVF9BRERSKG4pCQkJKDB4MDIgfCAoKG4pIDw8IDQpKQorI2RlZmluZSBUVzI4NnhfQlJJR0hUTkVTU19BRERSKG4pCQkoMHgwMSB8ICgobikgPDwgNCkpCisjZGVmaW5lIFRXMjg2eF9TSEFSUE5FU1MobikJCQkoMHgwMyB8ICgobikgPDwgNCkpCisjZGVmaW5lIFRXMjg2eF9BVURJT19PVVRQVVRfVk9MX0FERFIJCTB4ZGYKKyNkZWZpbmUgVFcyODZ4X0FVRElPX0lOUFVUX0dBSU5fQUREUihuKQkJKDB4RDAgKyAoKG4gPiAxKSA/IDEgOiAwKSkKKworaW50IHNvbG9fdHcyOF9pbml0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KTsKKworaW50IHR3Mjhfc2V0X2N0cmxfdmFsKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCB1MzIgY3RybCwgdTggY2gsCisJCSAgICAgIHMzMiB2YWwpOworaW50IHR3MjhfZ2V0X2N0cmxfdmFsKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCB1MzIgY3RybCwgdTggY2gsCisJCSAgICAgIHMzMiAqdmFsKTsKKwordTggdHcyOF9nZXRfYXVkaW9fZ2FpbihzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgdTggY2gpOwordm9pZCB0dzI4X3NldF9hdWRpb19nYWluKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCB1OCBjaCwgdTggdmFsKTsKK2ludCB0dzI4X2dldF92aWRlb19zdGF0dXMoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHU4IGNoKTsKKworI2lmIDAKK3Vuc2lnbmVkIGludCB0dzI4MTVfZ2V0X2F1ZGlvX3N0YXR1cyhzdHJ1Y3QgU09MTzYwMTAgKnNvbG82MDEwKTsKK3ZvaWQgdHcyODE1X1NldF9BdWRpb091dFZvbChzdHJ1Y3QgU09MTzYwMTAgKnNvbG82MDEwLCB1bnNpZ25lZCBpbnQgdV92YWwpOworI2VuZGlmCisKKyNlbmRpZiAvKiBfX1NPTE82MDEwX1RXMjhfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLXY0bDItZW5jLmMgYi9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtdjRsMi1lbmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTE0YjRiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLXY0bDItZW5jLmMKQEAgLTAsMCArMSwxNTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEJsdWVjaGVycnksIExMQyB3d3cuYmx1ZWNoZXJyeWR2ci5jb20KKyAqIENvcHlyaWdodCAoQykgMjAxMCBCZW4gQ29sbGlucyA8YmNvbGxpbnNAYmx1ZWNoZXJyeS5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KKworI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWRtYS1jb250aWcuaD4KKworI2luY2x1ZGUgInNvbG82MDEwLmgiCisjaW5jbHVkZSAic29sbzYwMTAtdHcyOC5oIgorI2luY2x1ZGUgInNvbG82MDEwLWpwZWcuaCIKKworI2RlZmluZSBNSU5fVklEX0JVRkZFUlMJCTQKKyNkZWZpbmUgRlJBTUVfQlVGX1NJWkUJCSgxMjggKiAxMDI0KQorI2RlZmluZSBNUDRfUVMJCQkxNgorCitzdGF0aWMgaW50IHNvbG9fZW5jX3RocmVhZCh2b2lkICpkYXRhKTsKKworZXh0ZXJuIHVuc2lnbmVkIHZpZGVvX25yOworCitzdHJ1Y3Qgc29sb19lbmNfZmggeworCXN0cnVjdAkJCXNvbG9fZW5jX2RldiAqZW5jOworCXUzMgkJCWZtdDsKKwl1MTYJCQlyZF9pZHg7CisJdTgJCQllbmNfb247CisJZW51bSBzb2xvX2VuY190eXBlcwl0eXBlOworCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZQl2aWRxOworCXN0cnVjdCBsaXN0X2hlYWQJdmlkcV9hY3RpdmU7CisJc3RydWN0IHRhc2tfc3RydWN0CSprdGhyZWFkOworfTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgdmlkX3ZvcF9oZWFkZXJbXSA9IHsKKwkweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLAorCTB4MDIsIDB4NDgsIDB4MDUsIDB4YzAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4NDAsCisJMHgwMCwgMHg0MCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg5NywgMHg1MywgMHgwNCwKKwkweDFmLCAweDRjLCAweDU4LCAweDEwLCAweDc4LCAweDUxLCAweDE4LCAweDNlLAorfTsKKworLyoKKyAqIFRoaW5ncyB3ZSBjYW4gY2hhbmdlIGFyb3VuZDoKKyAqCisgKiBieXRlICAxMCwgICAgICAgIDQtYml0cyAwMTExMTAwMCAgICAgICAgICAgICAgICAgICBhc3BlY3QKKyAqIGJ5dGVzIDIxLDIyLDIzICAxNi1iaXRzIDAwMHgxMTExIDExMTExMTExIDExMTF4MDAwIGZwcy9yZXMKKyAqIGJ5dGVzIDIzLDI0LDI1ICAxNS1iaXRzIDAwMDAwbjExIDExMTExMTExIDExMTExeDAwIGludGVydmFsCisgKiBieXRlcyAyNSwyNiwyNyAgMTMtYml0cyAwMDAwMHgxMSAxMTExMTExMSAxMTF4MDAwMCB3aWR0aAorICogYnl0ZXMgMjcsMjgsMjkgIDEzLWJpdHMgMDAweDExMTEgMTExMTExMTEgMXgwMDAwMDAgaGVpZ2h0CisgKiBieXRlICAyOSAgICAgICAgIDEtYml0ICAweDEwMDAwMCAgICAgICAgICAgICAgICAgICBpbnRlcmxhY2UKKyAqLworCisvKiBGb3IgYXNwZWN0ICovCisjZGVmaW5lIFhWSURfUEFSXzQzX1BBTAkJMgorI2RlZmluZSBYVklEX1BBUl80M19OVFNDCTMKKworc3RhdGljIGNvbnN0IHUzMiBzb2xvX3VzZXJfY3RybHNbXSA9IHsKKwlWNEwyX0NJRF9CUklHSFRORVNTLAorCVY0TDJfQ0lEX0NPTlRSQVNULAorCVY0TDJfQ0lEX1NBVFVSQVRJT04sCisJVjRMMl9DSURfSFVFLAorCVY0TDJfQ0lEX1NIQVJQTkVTUywKKwkwCit9OworCitzdGF0aWMgY29uc3QgdTMyIHNvbG9fbXBlZ19jdHJsc1tdID0geworCVY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkcsCisJVjRMMl9DSURfTVBFR19WSURFT19HT1BfU0laRSwKKwkwCit9OworCitzdGF0aWMgY29uc3QgdTMyIHNvbG9fcHJpdmF0ZV9jdHJsc1tdID0geworCVY0TDJfQ0lEX01PVElPTl9FTkFCTEUsCisJVjRMMl9DSURfTU9USU9OX1RIUkVTSE9MRCwKKwkwCit9OworCitzdGF0aWMgY29uc3QgdTMyIHNvbG9fZm10eF9jdHJsc1tdID0geworCVY0TDJfQ0lEX1JEU19UWF9SQURJT19URVhULAorCTAKK307CisKK3N0YXRpYyBjb25zdCB1MzIgKnNvbG9fY3RybF9jbGFzc2VzW10gPSB7CisJc29sb191c2VyX2N0cmxzLAorCXNvbG9fbXBlZ19jdHJscywKKwlzb2xvX2ZtdHhfY3RybHMsCisJc29sb19wcml2YXRlX2N0cmxzLAorCU5VTEwKK307CisKK3N0cnVjdCB2b3BfaGVhZGVyIHsKKwkvKiBWRF9JRFgwICovCisJdTMyIHNpemU6MjAsIHN5bmNfc3RhcnQ6MSwgcGFnZV9zdG9wOjEsIHZvcF90eXBlOjIsIGNoYW5uZWw6NCwKKwkJbm9wMDoxLCBzb3VyY2VfZmw6MSwgaW50ZXJsYWNlOjEsIHByb2dyZXNzaXZlOjE7CisKKwkvKiBWRF9JRFgxICovCisJdTMyIHZzaXplOjgsIGhzaXplOjgsIGZyYW1lX2ludGVyb3A6MSwgbm9wMTo3LCB3aW5faWQ6NCwgc2NhbGU6NDsKKworCS8qIFZEX0lEWDIgKi8KKwl1MzIgYmFzZV9hZGRyOjE2LCBub3AyOjE1LCBob2ZmOjE7CisKKwkvKiBWRF9JRFgzIC0gVXNlciBzZXQgbWFjcm9zICovCisJdTMyIHN5OjEyLCBzeDoxMiwgbm9wMzoxLCBoem9vbToxLCByZWFkX2ludGVyb3A6MSwgd3JpdGVfaW50ZXJsYWNlOjEsCisJCXNjYWxlX21vZGU6NDsKKworCS8qIFZEX0lEWDQgLSBVc2VyIHNldCBtYWNyb3MgY29udGludWVkICovCisJdTMyIHdyaXRlX3BhZ2U6OCwgbm9wNDoyNDsKKworCS8qIFZEX0lEWDUgKi8KKwl1MzIgbmV4dF9jb2RlX2FkZHI7CisKKwl1MzIgZW5kX25vcHNbMTBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBzb2xvX2lzX21vdGlvbl9vbihzdHJ1Y3Qgc29sb19lbmNfZGV2ICpzb2xvX2VuYykKK3sKKwlzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiA9IHNvbG9fZW5jLT5zb2xvX2RldjsKKwl1OCBjaCA9IHNvbG9fZW5jLT5jaDsKKworCWlmIChzb2xvX2Rldi0+bW90aW9uX21hc2sgJiAoMSA8PCBjaCkpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzb2xvX21vdGlvbl90b2dnbGUoc3RydWN0IHNvbG9fZW5jX2RldiAqc29sb19lbmMsIGludCBvbikKK3sKKwlzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiA9IHNvbG9fZW5jLT5zb2xvX2RldjsKKwl1OCBjaCA9IHNvbG9fZW5jLT5jaDsKKworCXNwaW5fbG9jaygmc29sb19lbmMtPmxvY2spOworCisJaWYgKG9uKQorCQlzb2xvX2Rldi0+bW90aW9uX21hc2sgfD0gKDEgPDwgY2gpOworCWVsc2UKKwkJc29sb19kZXYtPm1vdGlvbl9tYXNrICY9IH4oMSA8PCBjaCk7CisKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WSV9NT1RfQURSLAorCQkgICAgICAgU09MT19WSV9NT1RJT05fRU4oc29sb19kZXYtPm1vdGlvbl9tYXNrKSB8CisJCSAgICAgICAoU09MT19NT1RJT05fRVhUX0FERFIoc29sb19kZXYpID4+IDE2KSk7CisKKwlpZiAoc29sb19kZXYtPm1vdGlvbl9tYXNrKQorCQlzb2xvNjAxMF9pcnFfb24oc29sb19kZXYsIFNPTE9fSVJRX01PVElPTik7CisJZWxzZQorCQlzb2xvNjAxMF9pcnFfb2ZmKHNvbG9fZGV2LCBTT0xPX0lSUV9NT1RJT04pOworCisJc3Bpbl91bmxvY2soJnNvbG9fZW5jLT5sb2NrKTsKK30KKworLyogU2hvdWxkIGJlIGNhbGxlZCB3aXRoIHNvbG9fZW5jLT5sb2NrIGhlbGQgKi8KK3N0YXRpYyB2b2lkIHNvbG9fdXBkYXRlX21vZGUoc3RydWN0IHNvbG9fZW5jX2RldiAqc29sb19lbmMpCit7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBzb2xvX2VuYy0+c29sb19kZXY7CisKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJnNvbG9fZW5jLT5sb2NrKTsKKworCXNvbG9fZW5jLT5pbnRlcmxhY2VkID0gKHNvbG9fZW5jLT5tb2RlICYgMHgwOCkgPyAxIDogMDsKKwlzb2xvX2VuYy0+Yndfd2VpZ2h0ID0gbWF4KHNvbG9fZGV2LT5mcHMgLyBzb2xvX2VuYy0+aW50ZXJ2YWwsIDEpOworCisJc3dpdGNoIChzb2xvX2VuYy0+bW9kZSkgeworCWNhc2UgU09MT19FTkNfTU9ERV9DSUY6CisJCXNvbG9fZW5jLT53aWR0aCA9IHNvbG9fZGV2LT52aWRlb19oc2l6ZSA+PiAxOworCQlzb2xvX2VuYy0+aGVpZ2h0ID0gc29sb19kZXYtPnZpZGVvX3ZzaXplOworCQlicmVhazsKKwljYXNlIFNPTE9fRU5DX01PREVfRDE6CisJCXNvbG9fZW5jLT53aWR0aCA9IHNvbG9fZGV2LT52aWRlb19oc2l6ZTsKKwkJc29sb19lbmMtPmhlaWdodCA9IHNvbG9fZGV2LT52aWRlb192c2l6ZSA8PCAxOworCQlzb2xvX2VuYy0+Yndfd2VpZ2h0IDw8PSAyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlXQVJOKDEsICJtb2RlIGlzIHVua25vd24iKTsKKwl9Cit9CisKKy8qIFNob3VsZCBiZSBjYWxsZWQgd2l0aCBzb2xvX2VuYy0+bG9jayBoZWxkICovCitzdGF0aWMgaW50IHNvbG9fZW5jX29uKHN0cnVjdCBzb2xvX2VuY19maCAqZmgpCit7CisJc3RydWN0IHNvbG9fZW5jX2RldiAqc29sb19lbmMgPSBmaC0+ZW5jOworCXU4IGNoID0gc29sb19lbmMtPmNoOworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gc29sb19lbmMtPnNvbG9fZGV2OworCXU4IGludGVydmFsOworCisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZzb2xvX2VuYy0+bG9jayk7CisKKwlpZiAoZmgtPmVuY19vbikKKwkJcmV0dXJuIDA7CisKKwlzb2xvX3VwZGF0ZV9tb2RlKHNvbG9fZW5jKTsKKworCS8qIE1ha2Ugc3VyZSB0byBidyBjaGVjayBvbiBmaXJzdCByZWFkZXIgKi8KKwlpZiAoIWF0b21pY19yZWFkKCZzb2xvX2VuYy0+cmVhZGVycykpIHsKKwkJaWYgKHNvbG9fZW5jLT5id193ZWlnaHQgPiBzb2xvX2Rldi0+ZW5jX2J3X3JlbWFpbikKKwkJCXJldHVybiAtRUJVU1k7CisJCWVsc2UKKwkJCXNvbG9fZGV2LT5lbmNfYndfcmVtYWluIC09IHNvbG9fZW5jLT5id193ZWlnaHQ7CisJfQorCisJZmgtPmt0aHJlYWQgPSBrdGhyZWFkX3J1bihzb2xvX2VuY190aHJlYWQsIGZoLCBTT0xPNjAxMF9OQU1FICJfZW5jIik7CisKKwlpZiAoSVNfRVJSKGZoLT5rdGhyZWFkKSkKKwkJcmV0dXJuIFBUUl9FUlIoZmgtPmt0aHJlYWQpOworCisJZmgtPmVuY19vbiA9IDE7CisJZmgtPnJkX2lkeCA9IHNvbG9fZW5jLT5zb2xvX2Rldi0+ZW5jX3dyX2lkeDsKKworCWlmIChmaC0+dHlwZSA9PSBTT0xPX0VOQ19UWVBFX0VYVCkKKwkJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fQ0FQX0NIX0NPTVBfRU5BX0UoY2gpLCAxKTsKKworCWlmIChhdG9taWNfaW5jX3JldHVybigmc29sb19lbmMtPnJlYWRlcnMpID4gMSkKKwkJcmV0dXJuIDA7CisKKwkvKiBEaXNhYmxlIGFsbCBlbmNvZGluZyBmb3IgdGhpcyBjaGFubmVsICovCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fQ0FQX0NIX1NDQUxFKGNoKSwgMCk7CisKKwkvKiBDb21tb24gZm9yIGJvdGggc3RkIGFuZCBleHQgZW5jb2RpbmcgKi8KKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WRV9DSF9JTlRMKGNoKSwKKwkJICAgICAgIHNvbG9fZW5jLT5pbnRlcmxhY2VkID8gMSA6IDApOworCisJaWYgKHNvbG9fZW5jLT5pbnRlcmxhY2VkKQorCQlpbnRlcnZhbCA9IHNvbG9fZW5jLT5pbnRlcnZhbCAtIDE7CisJZWxzZQorCQlpbnRlcnZhbCA9IHNvbG9fZW5jLT5pbnRlcnZhbDsKKworCS8qIFN0YW5kYXJkIGVuY29kaW5nIG9ubHkgKi8KKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WRV9DSF9HT1AoY2gpLCBzb2xvX2VuYy0+Z29wKTsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WRV9DSF9RUChjaCksIHNvbG9fZW5jLT5xcCk7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fQ0FQX0NIX0lOVFYoY2gpLCBpbnRlcnZhbCk7CisKKwkvKiBFeHRlbmRlZCBlbmNvZGluZyBvbmx5ICovCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVkVfQ0hfR09QX0UoY2gpLCBzb2xvX2VuYy0+Z29wKTsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WRV9DSF9RUF9FKGNoKSwgc29sb19lbmMtPnFwKTsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19DQVBfQ0hfSU5UVl9FKGNoKSwgaW50ZXJ2YWwpOworCisJLyogRW5hYmxlcyB0aGUgc3RhbmRhcmQgZW5jb2RlciAqLworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0NBUF9DSF9TQ0FMRShjaCksIHNvbG9fZW5jLT5tb2RlKTsKKworCS8qIFNldHRsZSBkb3duIEJlYXZpcy4uLiAqLworCW1kZWxheSgxMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc29sb19lbmNfb2ZmKHN0cnVjdCBzb2xvX2VuY19maCAqZmgpCit7CisJc3RydWN0IHNvbG9fZW5jX2RldiAqc29sb19lbmMgPSBmaC0+ZW5jOworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gc29sb19lbmMtPnNvbG9fZGV2OworCisJaWYgKCFmaC0+ZW5jX29uKQorCQlyZXR1cm47CisKKwlpZiAoZmgtPmt0aHJlYWQpIHsKKwkJa3RocmVhZF9zdG9wKGZoLT5rdGhyZWFkKTsKKwkJZmgtPmt0aHJlYWQgPSBOVUxMOworCX0KKworCXNvbG9fZGV2LT5lbmNfYndfcmVtYWluICs9IHNvbG9fZW5jLT5id193ZWlnaHQ7CisJZmgtPmVuY19vbiA9IDA7CisKKwlpZiAoYXRvbWljX2RlY19yZXR1cm4oJnNvbG9fZW5jLT5yZWFkZXJzKSA+IDApCisJCXJldHVybjsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0NBUF9DSF9TQ0FMRShzb2xvX2VuYy0+Y2gpLCAwKTsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19DQVBfQ0hfQ09NUF9FTkFfRShzb2xvX2VuYy0+Y2gpLCAwKTsKK30KKworc3RhdGljIHZvaWQgZW5jX3Jlc2V0X2dvcChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgdTggY2gpCit7CisJQlVHX09OKGNoID49IHNvbG9fZGV2LT5ucl9jaGFucyk7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVkVfQ0hfR09QKGNoKSwgMSk7CisJc29sb19kZXYtPnY0bDJfZW5jW2NoXS0+cmVzZXRfZ29wID0gMTsKK30KKworc3RhdGljIGludCBlbmNfZ29wX3Jlc2V0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCB1OCBjaCwgdTggdm9wKQoreworCUJVR19PTihjaCA+PSBzb2xvX2Rldi0+bnJfY2hhbnMpOworCWlmICghc29sb19kZXYtPnY0bDJfZW5jW2NoXS0+cmVzZXRfZ29wKQorCQlyZXR1cm4gMDsKKwlpZiAodm9wKQorCQlyZXR1cm4gMTsKKwlzb2xvX2Rldi0+djRsMl9lbmNbY2hdLT5yZXNldF9nb3AgPSAwOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZFX0NIX0dPUChjaCksCisJCSAgICAgICBzb2xvX2Rldi0+djRsMl9lbmNbY2hdLT5nb3ApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVuY19nZXRfbXBlZ19kbWFfdChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgZG1hX2FkZHJfdCBidWYsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgb2ZmLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlpbnQgcmV0OworCisJaWYgKG9mZiA+IFNPTE9fTVA0RV9FWFRfU0laRShzb2xvX2RldikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG9mZiArIHNpemUgPD0gU09MT19NUDRFX0VYVF9TSVpFKHNvbG9fZGV2KSkKKwkJcmV0dXJuIHNvbG9fcDJtX2RtYV90KHNvbG9fZGV2LCBTT0xPX1AyTV9ETUFfSURfTVA0RSwgMCwgYnVmLAorCQkJCSAgICAgIFNPTE9fTVA0RV9FWFRfQUREUihzb2xvX2RldikgKyBvZmYsIHNpemUpOworCisJLyogQnVmZmVyIHdyYXAgKi8KKwlyZXQgPSBzb2xvX3AybV9kbWFfdChzb2xvX2RldiwgU09MT19QMk1fRE1BX0lEX01QNEUsIDAsIGJ1ZiwKKwkJCSAgICBTT0xPX01QNEVfRVhUX0FERFIoc29sb19kZXYpICsgb2ZmLAorCQkJICAgIFNPTE9fTVA0RV9FWFRfU0laRShzb2xvX2RldikgLSBvZmYpOworCisJcmV0IHw9IHNvbG9fcDJtX2RtYV90KHNvbG9fZGV2LCBTT0xPX1AyTV9ETUFfSURfTVA0RSwgMCwKKwkJCSAgICAgIGJ1ZiArIFNPTE9fTVA0RV9FWFRfU0laRShzb2xvX2RldikgLSBvZmYsCisJCQkgICAgICBTT0xPX01QNEVfRVhUX0FERFIoc29sb19kZXYpLAorCQkJICAgICAgc2l6ZSArIG9mZiAtIFNPTE9fTVA0RV9FWFRfU0laRShzb2xvX2RldikpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBlbmNfZ2V0X21wZWdfZG1hKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCB2b2lkICpidWYsCisJCQkgICAgdW5zaWduZWQgaW50IG9mZiwgdW5zaWduZWQgaW50IHNpemUpCit7CisJaW50IHJldDsKKworCWRtYV9hZGRyX3QgZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShzb2xvX2Rldi0+cGRldiwgYnVmLCBzaXplLAorCQkJCQkgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJcmV0ID0gZW5jX2dldF9tcGVnX2RtYV90KHNvbG9fZGV2LCBkbWFfYWRkciwgb2ZmLCBzaXplKTsKKwlwY2lfdW5tYXBfc2luZ2xlKHNvbG9fZGV2LT5wZGV2LCBkbWFfYWRkciwgc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZW5jX2dldF9qcGVnX2RtYShzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgZG1hX2FkZHJfdCBidWYsCisJCQkgICAgdW5zaWduZWQgaW50IG9mZiwgdW5zaWduZWQgaW50IHNpemUpCit7CisJaW50IHJldDsKKworCWlmIChvZmYgPiBTT0xPX0pQRUdfRVhUX1NJWkUoc29sb19kZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChvZmYgKyBzaXplIDw9IFNPTE9fSlBFR19FWFRfU0laRShzb2xvX2RldikpCisJCXJldHVybiBzb2xvX3AybV9kbWFfdChzb2xvX2RldiwgU09MT19QMk1fRE1BX0lEX0pQRUcsIDAsIGJ1ZiwKKwkJCQkgICAgICBTT0xPX0pQRUdfRVhUX0FERFIoc29sb19kZXYpICsgb2ZmLCBzaXplKTsKKworCS8qIEJ1ZmZlciB3cmFwICovCisJcmV0ID0gc29sb19wMm1fZG1hX3Qoc29sb19kZXYsIFNPTE9fUDJNX0RNQV9JRF9KUEVHLCAwLCBidWYsCisJCQkgICAgIFNPTE9fSlBFR19FWFRfQUREUihzb2xvX2RldikgKyBvZmYsCisJCQkgICAgIFNPTE9fSlBFR19FWFRfU0laRShzb2xvX2RldikgLSBvZmYpOworCisJcmV0IHw9IHNvbG9fcDJtX2RtYV90KHNvbG9fZGV2LCBTT0xPX1AyTV9ETUFfSURfSlBFRywgMCwKKwkJCSAgICAgIGJ1ZiArIFNPTE9fSlBFR19FWFRfU0laRShzb2xvX2RldikgLSBvZmYsCisJCQkgICAgICBTT0xPX0pQRUdfRVhUX0FERFIoc29sb19kZXYpLAorCQkJICAgICAgc2l6ZSArIG9mZiAtIFNPTE9fSlBFR19FWFRfU0laRShzb2xvX2RldikpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzb2xvX2ZpbGxfanBlZyhzdHJ1Y3Qgc29sb19lbmNfZmggKmZoLCBzdHJ1Y3Qgc29sb19lbmNfYnVmICplbmNfYnVmLAorCQkJICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwgZG1hX2FkZHJfdCB2YnVmKQoreworCXN0cnVjdCBzb2xvX2VuY19kZXYgKnNvbG9fZW5jID0gZmgtPmVuYzsKKwlzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiA9IHNvbG9fZW5jLT5zb2xvX2RldjsKKwl1OCAqcCA9IHZpZGVvYnVmX3F1ZXVlX3RvX3ZhZGRyKCZmaC0+dmlkcSwgdmIpOworCisJbWVtY3B5KHAsIGpwZWdfaGVhZGVyLCBzaXplb2YoanBlZ19oZWFkZXIpKTsKKwlwW1NPRjBfU1RBUlQgKyA1XSA9IDB4ZmYgJiAoc29sb19lbmMtPmhlaWdodCA+PiA4KTsKKwlwW1NPRjBfU1RBUlQgKyA2XSA9IDB4ZmYgJiBzb2xvX2VuYy0+aGVpZ2h0OworCXBbU09GMF9TVEFSVCArIDddID0gMHhmZiAmIChzb2xvX2VuYy0+d2lkdGggPj4gOCk7CisJcFtTT0YwX1NUQVJUICsgOF0gPSAweGZmICYgc29sb19lbmMtPndpZHRoOworCisJdmJ1ZiArPSBzaXplb2YoanBlZ19oZWFkZXIpOworCXZiLT5zaXplID0gZW5jX2J1Zi0+anBlZ19zaXplICsgc2l6ZW9mKGpwZWdfaGVhZGVyKTsKKworCXJldHVybiBlbmNfZ2V0X2pwZWdfZG1hKHNvbG9fZGV2LCB2YnVmLCBlbmNfYnVmLT5qcGVnX29mZiwKKwkJCQllbmNfYnVmLT5qcGVnX3NpemUpOworfQorCitzdGF0aWMgaW50IHNvbG9fZmlsbF9tcGVnKHN0cnVjdCBzb2xvX2VuY19maCAqZmgsIHN0cnVjdCBzb2xvX2VuY19idWYgKmVuY19idWYsCisJCQkgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLCBkbWFfYWRkcl90IHZidWYpCit7CisJc3RydWN0IHNvbG9fZW5jX2RldiAqc29sb19lbmMgPSBmaC0+ZW5jOworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gc29sb19lbmMtPnNvbG9fZGV2OworCXN0cnVjdCB2b3BfaGVhZGVyIHZoOworCWludCByZXQ7CisJaW50IGZyYW1lX3NpemUsIGZyYW1lX29mZjsKKworCWlmIChXQVJOX09OX09OQ0UoZW5jX2J1Zi0+c2l6ZSA8PSBzaXplb2YodmgpKSkKKwkJcmV0dXJuIC0xOworCisJLyogRmlyc3QgZ2V0IHRoZSBoYXJkd2FyZSB2b3AgaGVhZGVyIChub3QgcmVhbCBtcGVnKSAqLworCXJldCA9IGVuY19nZXRfbXBlZ19kbWEoc29sb19kZXYsICZ2aCwgZW5jX2J1Zi0+b2ZmLCBzaXplb2YodmgpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLTE7CisKKwlpZiAoV0FSTl9PTl9PTkNFKHZoLnNpemUgPiBlbmNfYnVmLT5zaXplKSkKKwkJcmV0dXJuIC0xOworCisJdmItPndpZHRoID0gdmguaHNpemUgPDwgNDsKKwl2Yi0+aGVpZ2h0ID0gdmgudnNpemUgPDwgNDsKKwl2Yi0+c2l6ZSA9IHZoLnNpemU7CisKKwkvKiBJZiB0aGlzIGlzIGEga2V5IGZyYW1lLCBhZGQgZXh0cmEgbTR2IGhlYWRlciAqLworCWlmICghZW5jX2J1Zi0+dm9wKSB7CisJCXUxNiBmcHMgPSBzb2xvX2Rldi0+ZnBzICogMTAwMDsKKwkJdTE2IGludGVydmFsID0gc29sb19lbmMtPmludGVydmFsICogMTAwMDsKKwkJdTggKnAgPSB2aWRlb2J1Zl9xdWV1ZV90b192YWRkcigmZmgtPnZpZHEsIHZiKTsKKworCQltZW1jcHkocCwgdmlkX3ZvcF9oZWFkZXIsIHNpemVvZih2aWRfdm9wX2hlYWRlcikpOworCisJCWlmIChzb2xvX2Rldi0+dmlkZW9fdHlwZSA9PSBTT0xPX1ZPX0ZNVF9UWVBFX05UU0MpCisJCQlwWzEwXSB8PSAoKFhWSURfUEFSXzQzX05UU0MgPDwgMykgJiAweDc4KTsKKwkJZWxzZQorCQkJcFsxMF0gfD0gKChYVklEX1BBUl80M19QQUwgPDwgMykgJiAweDc4KTsKKworCQkvKiBGcmFtZSByYXRlIGFuZCBpbnRlcnZhbCAqLworCQlwWzIyXSA9IGZwcyA+PiA0OworCQlwWzIzXSA9ICgoZnBzIDw8IDQpICYgMHhmMCkgfCAweDBjIHwgKChpbnRlcnZhbCA+PiAxMykgJiAweDMpOworCQlwWzI0XSA9IChpbnRlcnZhbCA+PiA1KSAmIDB4ZmY7CisJCXBbMjVdID0gKChpbnRlcnZhbCA8PCAzKSAmIDB4ZjgpIHwgMHgwNDsKKworCQkvKiBXaWR0aCBhbmQgaGVpZ2h0ICovCisJCXBbMjZdID0gKHZiLT53aWR0aCA+PiAzKSAmIDB4ZmY7CisJCXBbMjddID0gKCh2Yi0+aGVpZ2h0ID4+IDkpICYgMHgwZikgfCAweDEwOworCQlwWzI4XSA9ICh2Yi0+aGVpZ2h0ID4+IDEpICYgMHhmZjsKKworCQkvKiBJbnRlcmxhY2UgKi8KKwkJaWYgKHZoLmludGVybGFjZSkKKwkJCXBbMjldIHw9IDB4MjA7CisKKwkJLyogQWRqdXN0IHRoZSBkbWEgYnVmZmVyIHBhc3QgdGhpcyBoZWFkZXIgKi8KKwkJdmItPnNpemUgKz0gc2l6ZW9mKHZpZF92b3BfaGVhZGVyKTsKKwkJdmJ1ZiArPSBzaXplb2YodmlkX3ZvcF9oZWFkZXIpOworCX0KKworCS8qIE5vdyBnZXQgdGhlIGFjdHVhbCBtcGVnIHBheWxvYWQgKi8KKwlmcmFtZV9vZmYgPSAoZW5jX2J1Zi0+b2ZmICsgc2l6ZW9mKHZoKSkgJSBTT0xPX01QNEVfRVhUX1NJWkUoc29sb19kZXYpOworCWZyYW1lX3NpemUgPSBlbmNfYnVmLT5zaXplIC0gc2l6ZW9mKHZoKTsKKwlyZXQgPSBlbmNfZ2V0X21wZWdfZG1hX3Qoc29sb19kZXYsIHZidWYsIGZyYW1lX29mZiwgZnJhbWVfc2l6ZSk7CisJaWYgKFdBUk5fT05fT05DRShyZXQpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworLyogT24gc3VjY2Vzc2Z1bCByZXR1cm4gKDApLCBsZWF2ZXMgc29sb19lbmMtPmxvY2sgdW5sb2NrZWQgKi8KK3N0YXRpYyBpbnQgc29sb19lbmNfZmlsbGJ1ZihzdHJ1Y3Qgc29sb19lbmNfZmggKmZoLAorCQkJICAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBzb2xvX2VuY19kZXYgKnNvbG9fZW5jID0gZmgtPmVuYzsKKwlzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiA9IHNvbG9fZW5jLT5zb2xvX2RldjsKKwlzdHJ1Y3Qgc29sb19lbmNfYnVmICplbmNfYnVmID0gTlVMTDsKKwlkbWFfYWRkcl90IHZidWY7CisJaW50IHJldDsKKwl1MTYgaWR4ID0gZmgtPnJkX2lkeDsKKworCXdoaWxlIChpZHggIT0gc29sb19kZXYtPmVuY193cl9pZHgpIHsKKwkJc3RydWN0IHNvbG9fZW5jX2J1ZiAqZWJ1ZiA9ICZzb2xvX2Rldi0+ZW5jX2J1ZltpZHhdOworCQlpZHggPSAoaWR4ICsgMSkgJSBTT0xPX05SX1JJTkdfQlVGUzsKKwkJaWYgKGZoLT5mbXQgPT0gVjRMMl9QSVhfRk1UX01QRUcpIHsKKwkJCWlmIChmaC0+dHlwZSAhPSBlYnVmLT50eXBlKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGVidWYtPmNoID09IHNvbG9fZW5jLT5jaCkgeworCQkJCWVuY19idWYgPSBlYnVmOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgaWYgKGVidWYtPmNoID09IHNvbG9fZW5jLT5jaCkgeworCQkJLyogRm9yIG1qcGVnLCBrZWVwIHJlYWRpbmcgdG8gdGhlIG5ld2VzdCBmcmFtZSAqLworCQkJZW5jX2J1ZiA9IGVidWY7CisJCX0KKwl9CisKKwlmaC0+cmRfaWR4ID0gaWR4OworCisJaWYgKCFlbmNfYnVmKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoKGZoLT5mbXQgPT0gVjRMMl9QSVhfRk1UX01QRUcgJiYKKwkgICAgIHZiLT5ic2l6ZSA8IGVuY19idWYtPnNpemUpIHx8CisJICAgIChmaC0+Zm10ID09IFY0TDJfUElYX0ZNVF9NSlBFRyAmJgorCSAgICAgdmItPmJzaXplIDwgKGVuY19idWYtPmpwZWdfc2l6ZSArIHNpemVvZihqcGVnX2hlYWRlcikpKSkgeworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKCEodmJ1ZiA9IHZpZGVvYnVmX3RvX2RtYV9jb250aWcodmIpKSkKKwkJcmV0dXJuIC0xOworCisJLyogSXMgaXQgb2sgdGhhdCB3ZSBtZXNzIHdpdGggdGhpcyBidWZmZXIgb3V0IG9mIGxvY2s/ICovCisJc3Bpbl91bmxvY2soJnNvbG9fZW5jLT5sb2NrKTsKKworCWlmIChmaC0+Zm10ID09IFY0TDJfUElYX0ZNVF9NUEVHKQorCQlyZXQgPSBzb2xvX2ZpbGxfbXBlZyhmaCwgZW5jX2J1ZiwgdmIsIHZidWYpOworCWVsc2UKKwkJcmV0ID0gc29sb19maWxsX2pwZWcoZmgsIGVuY19idWYsIHZiLCB2YnVmKTsKKworCWlmIChyZXQpIC8vIElnbm9yZSBmYWlsdXJlcworCQlyZXR1cm4gMDsKKworCWxpc3RfZGVsKCZ2Yi0+cXVldWUpOworCXZiLT5maWVsZF9jb3VudCsrOworCXZiLT50cyA9IGVuY19idWYtPnRzOworCXZiLT5zdGF0ZSA9IFZJREVPQlVGX0RPTkU7CisKKwl3YWtlX3VwKCZ2Yi0+ZG9uZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc29sb19lbmNfdGhyZWFkX3RyeShzdHJ1Y3Qgc29sb19lbmNfZmggKmZoKQoreworCXN0cnVjdCBzb2xvX2VuY19kZXYgKnNvbG9fZW5jID0gZmgtPmVuYzsKKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YjsKKworCWZvciAoOzspIHsKKwkJc3Bpbl9sb2NrKCZzb2xvX2VuYy0+bG9jayk7CisKKwkJaWYgKGxpc3RfZW1wdHkoJmZoLT52aWRxX2FjdGl2ZSkpCisJCQlicmVhazsKKworCQl2YiA9IGxpc3RfZmlyc3RfZW50cnkoJmZoLT52aWRxX2FjdGl2ZSwKKwkJCQkgICAgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyLCBxdWV1ZSk7CisKKwkJaWYgKCF3YWl0cXVldWVfYWN0aXZlKCZ2Yi0+ZG9uZSkpCisJCQlicmVhazsKKworCQkvKiBPbiBzdWNjZXNzLCByZXR1cm5zIHdpdGggc29sb19lbmMtPmxvY2sgdW5sb2NrZWQgKi8KKwkJaWYgKHNvbG9fZW5jX2ZpbGxidWYoZmgsIHZiKSkKKwkJCWJyZWFrOworCX0KKworCWFzc2VydF9zcGluX2xvY2tlZCgmc29sb19lbmMtPmxvY2spOworCXNwaW5fdW5sb2NrKCZzb2xvX2VuYy0+bG9jayk7Cit9CisKK3N0YXRpYyBpbnQgc29sb19lbmNfdGhyZWFkKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHNvbG9fZW5jX2ZoICpmaCA9IGRhdGE7CisJc3RydWN0IHNvbG9fZW5jX2RldiAqc29sb19lbmMgPSBmaC0+ZW5jOworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCisJc2V0X2ZyZWV6YWJsZSgpOworCWFkZF93YWl0X3F1ZXVlKCZzb2xvX2VuYy0+dGhyZWFkX3dhaXQsICZ3YWl0KTsKKworCWZvciAoOzspIHsKKwkJbG9uZyB0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKEhaKTsKKwkJaWYgKHRpbWVvdXQgPT0gLUVSRVNUQVJUU1lTIHx8IGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKKwkJCWJyZWFrOworCQlzb2xvX2VuY190aHJlYWRfdHJ5KGZoKTsKKwkJdHJ5X3RvX2ZyZWV6ZSgpOworCX0KKworCXJlbW92ZV93YWl0X3F1ZXVlKCZzb2xvX2VuYy0+dGhyZWFkX3dhaXQsICZ3YWl0KTsKKworICAgICAgICByZXR1cm4gMDsKK30KKwordm9pZCBzb2xvX21vdGlvbl9pc3Ioc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJdTMyIHN0YXR1czsKKwlpbnQgaTsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0lSUV9TVEFULCBTT0xPX0lSUV9NT1RJT04pOworCisJc3RhdHVzID0gc29sb19yZWdfcmVhZChzb2xvX2RldiwgU09MT19WSV9NT1RfU1RBVFVTKTsKKworCWZvciAoaSA9IDA7IGkgPCBzb2xvX2Rldi0+bnJfY2hhbnM7IGkrKykgeworCQlzdHJ1Y3Qgc29sb19lbmNfZGV2ICpzb2xvX2VuYyA9IHNvbG9fZGV2LT52NGwyX2VuY1tpXTsKKworCQlCVUdfT04oc29sb19lbmMgPT0gTlVMTCk7CisKKwkJaWYgKHNvbG9fZW5jLT5tb3Rpb25fZGV0ZWN0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKCEoc3RhdHVzICYgKDEgPDwgaSkpKQorCQkJY29udGludWU7CisKKwkJc29sb19lbmMtPm1vdGlvbl9kZXRlY3RlZCA9IDE7CisJfQorfQorCit2b2lkIHNvbG9fZW5jX3Y0bDJfaXNyKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCXN0cnVjdCBzb2xvX2VuY19idWYgKmVuY19idWY7CisJc3RydWN0IHZpZGVuY19zdGF0dXMgdnN0YXR1czsKKwl1MzIgbXBlZ19jdXJyZW50LCBtcGVnX25leHQsIG1wZWdfc2l6ZTsKKwl1MzIganBlZ19jdXJyZW50LCBqcGVnX25leHQsIGpwZWdfc2l6ZTsKKwl1MzIgcmVnX21wZWdfc2l6ZTsKKwl1OCBjdXJfcSwgdm9wX3R5cGU7CisJdTggY2g7CisJZW51bSBzb2xvX2VuY190eXBlcyBlbmNfdHlwZTsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0lSUV9TVEFULCBTT0xPX0lSUV9FTkNPREVSKTsKKworCXZzdGF0dXMuc3RhdHVzMTEgPSBzb2xvX3JlZ19yZWFkKHNvbG9fZGV2LCBTT0xPX1ZFX1NUQVRFKDExKSk7CisJY3VyX3EgPSAodnN0YXR1cy5zdGF0dXMxMV9zdC5sYXN0X3F1ZXVlICsgMSkgJSBNUDRfUVM7CisKKwl2c3RhdHVzLnN0YXR1czAgPSBzb2xvX3JlZ19yZWFkKHNvbG9fZGV2LCBTT0xPX1ZFX1NUQVRFKDApKTsKKwlyZWdfbXBlZ19zaXplID0gKHZzdGF0dXMuc3RhdHVzMF9zdC5tcDRfZW5jX2NvZGVfc2l6ZSArIDY0ICsgMzIpICYKKwkJCSh+MzEpOworCisJd2hpbGUgKHNvbG9fZGV2LT5lbmNfaWR4ICE9IGN1cl9xKSB7CisJCW1wZWdfY3VycmVudCA9IHNvbG9fcmVnX3JlYWQoc29sb19kZXYsCisJCQkJCVNPTE9fVkVfTVBFRzRfUVVFKHNvbG9fZGV2LT5lbmNfaWR4KSk7CisJCWpwZWdfY3VycmVudCA9IHNvbG9fcmVnX3JlYWQoc29sb19kZXYsCisJCQkJCVNPTE9fVkVfSlBFR19RVUUoc29sb19kZXYtPmVuY19pZHgpKTsKKwkJc29sb19kZXYtPmVuY19pZHggPSAoc29sb19kZXYtPmVuY19pZHggKyAxKSAlIE1QNF9RUzsKKwkJbXBlZ19uZXh0ID0gc29sb19yZWdfcmVhZChzb2xvX2RldiwKKwkJCQkJU09MT19WRV9NUEVHNF9RVUUoc29sb19kZXYtPmVuY19pZHgpKTsKKwkJanBlZ19uZXh0ID0gc29sb19yZWdfcmVhZChzb2xvX2RldiwKKwkJCQkJU09MT19WRV9KUEVHX1FVRShzb2xvX2Rldi0+ZW5jX2lkeCkpOworCisJCWlmICgoY2ggPSAobXBlZ19jdXJyZW50ID4+IDI0KSAmIDB4MWYpID49IFNPTE9fTUFYX0NIQU5ORUxTKSB7CisJCQljaCAtPSBTT0xPX01BWF9DSEFOTkVMUzsKKwkJCWVuY190eXBlID0gU09MT19FTkNfVFlQRV9FWFQ7CisJCX0gZWxzZQorCQkJZW5jX3R5cGUgPSBTT0xPX0VOQ19UWVBFX1NURDsKKworCQl2b3BfdHlwZSA9IChtcGVnX2N1cnJlbnQgPj4gMjkpICYgMzsKKworCQltcGVnX2N1cnJlbnQgJj0gMHgwMGZmZmZmZjsKKwkJbXBlZ19uZXh0ICAgICY9IDB4MDBmZmZmZmY7CisJCWpwZWdfY3VycmVudCAmPSAweDAwZmZmZmZmOworCQlqcGVnX25leHQgICAgJj0gMHgwMGZmZmZmZjsKKworCQltcGVnX3NpemUgPSAoU09MT19NUDRFX0VYVF9TSVpFKHNvbG9fZGV2KSArCisJCQkgICAgIG1wZWdfbmV4dCAtIG1wZWdfY3VycmVudCkgJQorCQkJICAgIFNPTE9fTVA0RV9FWFRfU0laRShzb2xvX2Rldik7CisKKwkJanBlZ19zaXplID0gKFNPTE9fSlBFR19FWFRfU0laRShzb2xvX2RldikgKworCQkJICAgICBqcGVnX25leHQgLSBqcGVnX2N1cnJlbnQpICUKKwkJCSAgICBTT0xPX0pQRUdfRVhUX1NJWkUoc29sb19kZXYpOworCisJCS8qIFhYWCBJIHRoaW5rIHRoaXMgbWVhbnMgd2UgaGFkIGEgcmluZyBvdmVyZmxvdz8gKi8KKwkJaWYgKG1wZWdfY3VycmVudCA+IG1wZWdfbmV4dCAmJiBtcGVnX3NpemUgIT0gcmVnX21wZWdfc2l6ZSkgeworCQkJZW5jX3Jlc2V0X2dvcChzb2xvX2RldiwgY2gpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBXaGVuIHJlc2V0dGluZyB0aGUgR09QLCBza2lwIGZyYW1lcyB1bnRpbCBJLWZyYW1lICovCisJCWlmIChlbmNfZ29wX3Jlc2V0KHNvbG9fZGV2LCBjaCwgdm9wX3R5cGUpKQorCQkJY29udGludWU7CisKKwkJZW5jX2J1ZiA9ICZzb2xvX2Rldi0+ZW5jX2J1Zltzb2xvX2Rldi0+ZW5jX3dyX2lkeF07CisKKwkJZW5jX2J1Zi0+dm9wID0gdm9wX3R5cGU7CisJCWVuY19idWYtPmNoID0gY2g7CisJCWVuY19idWYtPm9mZiA9IG1wZWdfY3VycmVudDsKKwkJZW5jX2J1Zi0+c2l6ZSA9IG1wZWdfc2l6ZTsKKwkJZW5jX2J1Zi0+anBlZ19vZmYgPSBqcGVnX2N1cnJlbnQ7CisJCWVuY19idWYtPmpwZWdfc2l6ZSA9IGpwZWdfc2l6ZTsKKwkJZW5jX2J1Zi0+dHlwZSA9IGVuY190eXBlOworCisJCWRvX2dldHRpbWVvZmRheSgmZW5jX2J1Zi0+dHMpOworCisJCXNvbG9fZGV2LT5lbmNfd3JfaWR4ID0gKHNvbG9fZGV2LT5lbmNfd3JfaWR4ICsgMSkgJQorCQkJCQlTT0xPX05SX1JJTkdfQlVGUzsKKworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnNvbG9fZGV2LT52NGwyX2VuY1tjaF0tPnRocmVhZF93YWl0KTsKKwl9CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgc29sb19lbmNfYnVmX3NldHVwKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHVuc2lnbmVkIGludCAqY291bnQsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgKnNpemUpCit7CisgICAgICAgICpzaXplID0gRlJBTUVfQlVGX1NJWkU7CisKKyAgICAgICAgaWYgKCpjb3VudCA8IE1JTl9WSURfQlVGRkVSUykKKwkJKmNvdW50ID0gTUlOX1ZJRF9CVUZGRVJTOworCisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNvbG9fZW5jX2J1Zl9wcmVwYXJlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsCisJCQkJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsCisJCQkJZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQoreworCXN0cnVjdCBzb2xvX2VuY19maCAqZmggPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCBzb2xvX2VuY19kZXYgKnNvbG9fZW5jID0gZmgtPmVuYzsKKworCXZiLT5zaXplID0gRlJBTUVfQlVGX1NJWkU7CisJaWYgKHZiLT5iYWRkciAhPSAwICYmIHZiLT5ic2l6ZSA8IHZiLT5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFRoZXNlIHByb3BlcnRpZXMgb25seSBjaGFuZ2Ugd2hlbiBxdWV1ZSBpcyBpZGxlICovCisJdmItPndpZHRoID0gc29sb19lbmMtPndpZHRoOworCXZiLT5oZWlnaHQgPSBzb2xvX2VuYy0+aGVpZ2h0OworCXZiLT5maWVsZCAgPSBmaWVsZDsKKworCWlmICh2Yi0+c3RhdGUgPT0gVklERU9CVUZfTkVFRFNfSU5JVCkgeworCQlpbnQgcmMgPSB2aWRlb2J1Zl9pb2xvY2sodnEsIHZiLCBOVUxMKTsKKwkJaWYgKHJjIDwgMCkgeworCQkJdmlkZW9idWZfZG1hX2NvbnRpZ19mcmVlKHZxLCB2Yik7CisJCQl2Yi0+c3RhdGUgPSBWSURFT0JVRl9ORUVEU19JTklUOworCQkJcmV0dXJuIHJjOworCQl9CisJfQorCXZiLT5zdGF0ZSA9IFZJREVPQlVGX1BSRVBBUkVEOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNvbG9fZW5jX2J1Zl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLAorCQkJICAgICAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBzb2xvX2VuY19maCAqZmggPSB2cS0+cHJpdl9kYXRhOworCisJdmItPnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworCWxpc3RfYWRkX3RhaWwoJnZiLT5xdWV1ZSwgJmZoLT52aWRxX2FjdGl2ZSk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZmaC0+ZW5jLT50aHJlYWRfd2FpdCk7Cit9CisKK3N0YXRpYyB2b2lkIHNvbG9fZW5jX2J1Zl9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsCisJCQkJIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXZpZGVvYnVmX2RtYV9jb250aWdfZnJlZSh2cSwgdmIpOworCXZiLT5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIHNvbG9fZW5jX3ZpZGVvX3FvcHMgPSB7CisJLmJ1Zl9zZXR1cAk9IHNvbG9fZW5jX2J1Zl9zZXR1cCwKKwkuYnVmX3ByZXBhcmUJPSBzb2xvX2VuY19idWZfcHJlcGFyZSwKKwkuYnVmX3F1ZXVlCT0gc29sb19lbmNfYnVmX3F1ZXVlLAorCS5idWZfcmVsZWFzZQk9IHNvbG9fZW5jX2J1Zl9yZWxlYXNlLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBzb2xvX2VuY19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQoreworCXN0cnVjdCBzb2xvX2VuY19maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gdmlkZW9idWZfcG9sbF9zdHJlYW0oZmlsZSwgJmZoLT52aWRxLCB3YWl0KTsKK30KKworc3RhdGljIGludCBzb2xvX2VuY19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3Qgc29sb19lbmNfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIHZpZGVvYnVmX21tYXBfbWFwcGVyKCZmaC0+dmlkcSwgdm1hKTsKK30KKworc3RhdGljIGludCBzb2xvX2VuY19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBzb2xvX2VuY19kZXYgKnNvbG9fZW5jID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3Qgc29sb19lbmNfZmggKmZoOworCisJaWYgKChmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9jaygmc29sb19lbmMtPmxvY2spOworCisJZmgtPmVuYyA9IHNvbG9fZW5jOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOworCUlOSVRfTElTVF9IRUFEKCZmaC0+dmlkcV9hY3RpdmUpOworCWZoLT5mbXQgPSBWNEwyX1BJWF9GTVRfTVBFRzsKKwlmaC0+dHlwZSA9IFNPTE9fRU5DX1RZUEVfU1REOworCisJdmlkZW9idWZfcXVldWVfZG1hX2NvbnRpZ19pbml0KCZmaC0+dmlkcSwgJnNvbG9fZW5jX3ZpZGVvX3FvcHMsCisJCQkJICAgICZzb2xvX2VuYy0+c29sb19kZXYtPnBkZXYtPmRldiwKKwkJCQkgICAgJnNvbG9fZW5jLT5sb2NrLAorCQkJCSAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCQkJICAgIFY0TDJfRklFTERfSU5URVJMQUNFRCwKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIpLCBmaCk7CisKKwlzcGluX3VubG9jaygmc29sb19lbmMtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNvbG9fZW5jX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpkYXRhLAorCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3Qgc29sb19lbmNfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzb2xvX2VuY19kZXYgKnNvbG9fZW5jID0gZmgtPmVuYzsKKworCS8qIE1ha2Ugc3VyZSB0aGUgZW5jb2RlciBpcyBvbiAqLworCWlmICghZmgtPmVuY19vbikgeworCQlpbnQgcmV0OworCisJCXNwaW5fbG9jaygmc29sb19lbmMtPmxvY2spOworCQlyZXQgPSBzb2xvX2VuY19vbihmaCk7CisJICAgICAgICBzcGluX3VubG9jaygmc29sb19lbmMtPmxvY2spOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gdmlkZW9idWZfcmVhZF9zdHJlYW0oJmZoLT52aWRxLCBkYXRhLCBjb3VudCwgcHBvcywgMCwKKwkJCQkgICAgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworfQorCitzdGF0aWMgaW50IHNvbG9fZW5jX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHNvbG9fZW5jX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXZpZGVvYnVmX3N0b3AoJmZoLT52aWRxKTsKKwl2aWRlb2J1Zl9tbWFwX2ZyZWUoJmZoLT52aWRxKTsKKwlzb2xvX2VuY19vZmYoZmgpOworCWtmcmVlKGZoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNvbG9fZW5jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKKwkJCSAgICAgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQoreworCXN0cnVjdCBzb2xvX2VuY19maCAqZmggPSBwcml2OworCXN0cnVjdCBzb2xvX2VuY19kZXYgKnNvbG9fZW5jID0gZmgtPmVuYzsKKwlzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiA9IHNvbG9fZW5jLT5zb2xvX2RldjsKKworCXN0cmNweShjYXAtPmRyaXZlciwgU09MTzYwMTBfTkFNRSk7CisJc25wcmludGYoY2FwLT5jYXJkLCBzaXplb2YoY2FwLT5jYXJkKSwgIlNvZnRsb2dpYyA2MDEwIEVuYyAlZCIsCisJCSBzb2xvX2VuYy0+Y2gpOworCXNucHJpbnRmKGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSwgIlBDSSAlcyIsCisJCSBwY2lfbmFtZShzb2xvX2Rldi0+cGRldikpOworCWNhcC0+dmVyc2lvbiA9IFNPTE82MDEwX1ZFUl9OVU07CisJY2FwLT5jYXBhYmlsaXRpZXMgPSAgICAgVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CisJCQkJVjRMMl9DQVBfUkVBRFdSSVRFIHwKKwkJCQlWNEwyX0NBUF9TVFJFQU1JTkc7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc29sb19lbmNfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wdXQpCit7CisJc3RydWN0IHNvbG9fZW5jX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHNvbG9fZW5jX2RldiAqc29sb19lbmMgPSBmaC0+ZW5jOworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gc29sb19lbmMtPnNvbG9fZGV2OworCisJaWYgKGlucHV0LT5pbmRleCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzbnByaW50ZihpbnB1dC0+bmFtZSwgc2l6ZW9mKGlucHV0LT5uYW1lKSwgIkVuY29kZXIgJWQiLAorCQkgc29sb19lbmMtPmNoICsgMSk7CisJaW5wdXQtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOworCisJaWYgKHNvbG9fZGV2LT52aWRlb190eXBlID09IFNPTE9fVk9fRk1UX1RZUEVfTlRTQykKKwkJaW5wdXQtPnN0ZCA9IFY0TDJfU1REX05UU0NfTTsKKwllbHNlCisJCWlucHV0LT5zdGQgPSBWNEwyX1NURF9QQUxfTTsKKworCWlmICghdHcyOF9nZXRfdmlkZW9fc3RhdHVzKHNvbG9fZGV2LCBzb2xvX2VuYy0+Y2gpKQorCQlpbnB1dC0+c3RhdHVzID0gVjRMMl9JTl9TVF9OT19TSUdOQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2xvX2VuY19zZXRfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpbmRleCkKK3sKKwlpZiAoaW5kZXgpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc29sb19lbmNfZ2V0X2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgICAgdW5zaWduZWQgaW50ICppbmRleCkKK3sKKwkqaW5kZXggPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc29sb19lbmNfZW51bV9mbXRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCSBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQoreworCXN3aXRjaCAoZi0+aW5kZXgpIHsKKwljYXNlIDA6CisJCWYtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX01QRUc7CisJCXN0cmNweShmLT5kZXNjcmlwdGlvbiwgIk1QRUctNCBBVkMiKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlmLT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NSlBFRzsKKwkJc3RyY3B5KGYtPmRlc2NyaXB0aW9uLCAiTUpQRUciKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZi0+ZmxhZ3MgPSBWNEwyX0ZNVF9GTEFHX0NPTVBSRVNTRUQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2xvX2VuY190cnlfZm10X2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHNvbG9fZW5jX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHNvbG9fZW5jX2RldiAqc29sb19lbmMgPSBmaC0+ZW5jOworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gc29sb19lbmMtPnNvbG9fZGV2OworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCisJaWYgKHBpeC0+cGl4ZWxmb3JtYXQgIT0gVjRMMl9QSVhfRk1UX01QRUcgJiYKKwkgICAgcGl4LT5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfTUpQRUcpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogV2UgY2Fubm90IGNoYW5nZSB3aWR0aC9oZWlnaHQgaW4gbWlkIHJlYWQgKi8KKwlpZiAoYXRvbWljX3JlYWQoJnNvbG9fZW5jLT5yZWFkZXJzKSA+IDApIHsKKwkJaWYgKHBpeC0+d2lkdGggIT0gc29sb19lbmMtPndpZHRoIHx8CisJCSAgICBwaXgtPmhlaWdodCAhPSBzb2xvX2VuYy0+aGVpZ2h0KQorCQkJcmV0dXJuIC1FQlVTWTsKKwl9IGVsc2UgaWYgKCEocGl4LT53aWR0aCA9PSBzb2xvX2Rldi0+dmlkZW9faHNpemUgJiYKKwkgICAgICBwaXgtPmhlaWdodCA9PSBzb2xvX2Rldi0+dmlkZW9fdnNpemUgPDwgMSkgJiYKKwkgICAgIShwaXgtPndpZHRoID09IHNvbG9fZGV2LT52aWRlb19oc2l6ZSA+PiAxICYmCisJICAgICAgcGl4LT5oZWlnaHQgPT0gc29sb19kZXYtPnZpZGVvX3ZzaXplKSkgeworCQkvKiBEZWZhdWx0IHRvIENJRiAxLzIgc2l6ZSAqLworCQlwaXgtPndpZHRoID0gc29sb19kZXYtPnZpZGVvX2hzaXplID4+IDE7CisJCXBpeC0+aGVpZ2h0ID0gc29sb19kZXYtPnZpZGVvX3ZzaXplOworCX0KKworCWlmIChwaXgtPmZpZWxkID09IFY0TDJfRklFTERfQU5ZKQorCQlwaXgtPmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCWVsc2UgaWYgKHBpeC0+ZmllbGQgIT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEKSB7CisJCXBpeC0+ZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJfQorCisJLyogSnVzdCBzZXQgdGhlc2UgKi8KKwlwaXgtPmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOworCXBpeC0+c2l6ZWltYWdlID0gRlJBTUVfQlVGX1NJWkU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2xvX2VuY19zZXRfZm10X2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHNvbG9fZW5jX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHNvbG9fZW5jX2RldiAqc29sb19lbmMgPSBmaC0+ZW5jOworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gc29sb19lbmMtPnNvbG9fZGV2OworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCWludCByZXQ7CisKKwlzcGluX2xvY2soJnNvbG9fZW5jLT5sb2NrKTsKKworCWlmICgocmV0ID0gc29sb19lbmNfdHJ5X2ZtdF9jYXAoZmlsZSwgcHJpdiwgZikpKSB7CisJCXNwaW5fdW5sb2NrKCZzb2xvX2VuYy0+bG9jayk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHBpeC0+d2lkdGggPT0gc29sb19kZXYtPnZpZGVvX2hzaXplKQorCQlzb2xvX2VuYy0+bW9kZSA9IFNPTE9fRU5DX01PREVfRDE7CisJZWxzZQorCQlzb2xvX2VuYy0+bW9kZSA9IFNPTE9fRU5DX01PREVfQ0lGOworCisJLyogVGhpcyBkb2VzIG5vdCBjaGFuZ2UgdGhlIGVuY29kZXIgYXQgYWxsICovCisJZmgtPmZtdCA9IHBpeC0+cGl4ZWxmb3JtYXQ7CisKKwlpZiAocGl4LT5wcml2KQorCQlmaC0+dHlwZSA9IFNPTE9fRU5DX1RZUEVfRVhUOworCXJldCA9IHNvbG9fZW5jX29uKGZoKTsKKworCXNwaW5fdW5sb2NrKCZzb2xvX2VuYy0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNvbG9fZW5jX2dldF9mbXRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgc29sb19lbmNfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3Qgc29sb19lbmNfZGV2ICpzb2xvX2VuYyA9IGZoLT5lbmM7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisKKwlwaXgtPndpZHRoID0gc29sb19lbmMtPndpZHRoOworCXBpeC0+aGVpZ2h0ID0gc29sb19lbmMtPmhlaWdodDsKKwlwaXgtPnBpeGVsZm9ybWF0ID0gZmgtPmZtdDsKKwlwaXgtPmZpZWxkID0gc29sb19lbmMtPmludGVybGFjZWQgPyBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQgOgorCQkgICAgIFY0TDJfRklFTERfTk9ORTsKKwlwaXgtPnNpemVpbWFnZSA9IEZSQU1FX0JVRl9TSVpFOworCXBpeC0+Y29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2xvX2VuY19yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCAKKwkJCSAgICBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcmVxKQoreworCXN0cnVjdCBzb2xvX2VuY19maCAqZmggPSBwcml2OworCisJcmV0dXJuIHZpZGVvYnVmX3JlcWJ1ZnMoJmZoLT52aWRxLCByZXEpOworfQorCitzdGF0aWMgaW50IHNvbG9fZW5jX3F1ZXJ5YnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgICBzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc29sb19lbmNfZmggKmZoID0gcHJpdjsKKworCXJldHVybiB2aWRlb2J1Zl9xdWVyeWJ1ZigmZmgtPnZpZHEsIGJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgc29sb19lbmNfcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCit7CisJc3RydWN0IHNvbG9fZW5jX2ZoICpmaCA9IHByaXY7CisKKwlyZXR1cm4gdmlkZW9idWZfcWJ1ZigmZmgtPnZpZHEsIGJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgc29sb19lbmNfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBzb2xvX2VuY19maCAqZmggPSBwcml2OworCXN0cnVjdCBzb2xvX2VuY19kZXYgKnNvbG9fZW5jID0gZmgtPmVuYzsKKwlpbnQgcmV0OworCisJLyogTWFrZSBzdXJlIHRoZSBlbmNvZGVyIGlzIG9uICovCisJaWYgKCFmaC0+ZW5jX29uKSB7CisJCXNwaW5fbG9jaygmc29sb19lbmMtPmxvY2spOworCQlyZXQgPSBzb2xvX2VuY19vbihmaCk7CisJCXNwaW5fdW5sb2NrKCZzb2xvX2VuYy0+bG9jayk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHZpZGVvYnVmX2RxYnVmKCZmaC0+dmlkcSwgYnVmLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFNpZ25hbCBtb3Rpb24gZGV0ZWN0aW9uICovCisJaWYgKHNvbG9faXNfbW90aW9uX29uKHNvbG9fZW5jKSkgeworCQlidWYtPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfTU9USU9OX09OOworCQlpZiAoc29sb19lbmMtPm1vdGlvbl9kZXRlY3RlZCkgeworCQkJYnVmLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX01PVElPTl9ERVRFQ1RFRDsKKwkJCXNvbG9fcmVnX3dyaXRlKHNvbG9fZW5jLT5zb2xvX2RldiwgU09MT19WSV9NT1RfQ0xFQVIsCisJCQkJICAgICAgIDEgPDwgc29sb19lbmMtPmNoKTsKKwkJCXNvbG9fZW5jLT5tb3Rpb25fZGV0ZWN0ZWQgPSAwOworCQl9CisJfQorCisJLyogQ2hlY2sgZm9yIGtleSBmcmFtZSBvbiBtcGVnIGRhdGEgKi8KKwlpZiAoZmgtPmZtdCA9PSBWNEwyX1BJWF9GTVRfTVBFRykgeworCQlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiA9IGZoLT52aWRxLmJ1ZnNbYnVmLT5pbmRleF07CisJCXU4ICpwID0gdmlkZW9idWZfcXVldWVfdG9fdmFkZHIoJmZoLT52aWRxLCB2Yik7CisJCWlmIChwWzNdID09IDB4MDApCisJCQlidWYtPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfS0VZRlJBTUU7CisJCWVsc2UKKwkJCWJ1Zi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19QRlJBTUU7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc29sb19lbmNfc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgIGVudW0gdjRsMl9idWZfdHlwZSBpKQoreworCXN0cnVjdCBzb2xvX2VuY19maCAqZmggPSBwcml2OworCisJaWYgKGkgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbigmZmgtPnZpZHEpOworfQorCitzdGF0aWMgaW50IHNvbG9fZW5jX3N0cmVhbW9mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICAgIGVudW0gdjRsMl9idWZfdHlwZSBpKQoreworCXN0cnVjdCBzb2xvX2VuY19maCAqZmggPSBwcml2OworCisJaWYgKGkgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vZmYoJmZoLT52aWRxKTsKK30KKworc3RhdGljIGludCBzb2xvX2VuY19zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKmkpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc29sb19lbnVtX2ZyYW1lc2l6ZXMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZnJtc2l6ZWVudW0gKmZzaXplKQoreworCXN0cnVjdCBzb2xvX2VuY19maCAqZmggPSBwcml2OworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gZmgtPmVuYy0+c29sb19kZXY7CisKKwlpZiAoZnNpemUtPnBpeGVsX2Zvcm1hdCAhPSBWNEwyX1BJWF9GTVRfTVBFRykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKGZzaXplLT5pbmRleCkgeworCWNhc2UgMDoKKwkJZnNpemUtPmRpc2NyZXRlLndpZHRoID0gc29sb19kZXYtPnZpZGVvX2hzaXplID4+IDE7CisJCWZzaXplLT5kaXNjcmV0ZS5oZWlnaHQgPSBzb2xvX2Rldi0+dmlkZW9fdnNpemU7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZnNpemUtPmRpc2NyZXRlLndpZHRoID0gc29sb19kZXYtPnZpZGVvX2hzaXplOworCQlmc2l6ZS0+ZGlzY3JldGUuaGVpZ2h0ID0gc29sb19kZXYtPnZpZGVvX3ZzaXplIDw8IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZzaXplLT50eXBlID0gVjRMMl9GUk1TSVpFX1RZUEVfRElTQ1JFVEU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2xvX2VudW1fZnJhbWVpbnRlcnZhbHMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJICAgIHN0cnVjdCB2NGwyX2ZybWl2YWxlbnVtICpmaW50dikKK3sKKwlzdHJ1Y3Qgc29sb19lbmNfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiA9IGZoLT5lbmMtPnNvbG9fZGV2OworCisJaWYgKGZpbnR2LT5waXhlbF9mb3JtYXQgIT0gVjRMMl9QSVhfRk1UX01QRUcgfHwgZmludHYtPmluZGV4KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZpbnR2LT50eXBlID0gVjRMMl9GUk1JVkFMX1RZUEVfU1RFUFdJU0U7CisKKwlmaW50di0+c3RlcHdpc2UubWluLm51bWVyYXRvciA9IHNvbG9fZGV2LT5mcHM7CisJZmludHYtPnN0ZXB3aXNlLm1pbi5kZW5vbWluYXRvciA9IDE7CisKKwlmaW50di0+c3RlcHdpc2UubWF4Lm51bWVyYXRvciA9IHNvbG9fZGV2LT5mcHM7CisJZmludHYtPnN0ZXB3aXNlLm1heC5kZW5vbWluYXRvciA9IDE1OworCisJZmludHYtPnN0ZXB3aXNlLnN0ZXAubnVtZXJhdG9yID0gMTsKKwlmaW50di0+c3RlcHdpc2Uuc3RlcC5kZW5vbWluYXRvciA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2xvX2dfcGFybShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJICAgICAgIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKnNwKQoreworCXN0cnVjdCBzb2xvX2VuY19maCAqZmggPSBwcml2OworCXN0cnVjdCBzb2xvX2VuY19kZXYgKnNvbG9fZW5jID0gZmgtPmVuYzsKKwlzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiA9IHNvbG9fZW5jLT5zb2xvX2RldjsKKwlzdHJ1Y3QgdjRsMl9jYXB0dXJlcGFybSAqY3AgPSAmc3AtPnBhcm0uY2FwdHVyZTsKKworCWNwLT5jYXBhYmlsaXR5ID0gVjRMMl9DQVBfVElNRVBFUkZSQU1FOworCWNwLT50aW1lcGVyZnJhbWUubnVtZXJhdG9yID0gc29sb19lbmMtPmludGVydmFsOworCWNwLT50aW1lcGVyZnJhbWUuZGVub21pbmF0b3IgPSBzb2xvX2Rldi0+ZnBzOworCWNwLT5jYXB0dXJlbW9kZSA9IDA7CisJLyogWFhYOiBTaG91bGRuJ3Qgd2UgYmUgYWJsZSB0byBnZXQvc2V0IHRoaXMgZnJvbSB2aWRlb2J1Zj8gKi8KKwljcC0+cmVhZGJ1ZmZlcnMgPSAyOworCisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNvbG9fc19wYXJtKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkgICAgICAgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqc3ApCit7CisJc3RydWN0IHNvbG9fZW5jX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHNvbG9fZW5jX2RldiAqc29sb19lbmMgPSBmaC0+ZW5jOworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gc29sb19lbmMtPnNvbG9fZGV2OworCXN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtICpjcCA9ICZzcC0+cGFybS5jYXB0dXJlOworCisJc3Bpbl9sb2NrKCZzb2xvX2VuYy0+bG9jayk7CisKKwlpZiAoYXRvbWljX3JlYWQoJnNvbG9fZW5jLT5yZWFkZXJzKSA+IDApIHsKKwkJc3Bpbl91bmxvY2soJnNvbG9fZW5jLT5sb2NrKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAoKGNwLT50aW1lcGVyZnJhbWUubnVtZXJhdG9yID09IDApIHx8CisJICAgIChjcC0+dGltZXBlcmZyYW1lLmRlbm9taW5hdG9yID09IDApKSB7CisJCS8qIHJlc2V0IGZyYW1lcmF0ZSAqLworCQljcC0+dGltZXBlcmZyYW1lLm51bWVyYXRvciA9IDE7CisJCWNwLT50aW1lcGVyZnJhbWUuZGVub21pbmF0b3IgPSBzb2xvX2Rldi0+ZnBzOworCX0KKworCWlmIChjcC0+dGltZXBlcmZyYW1lLmRlbm9taW5hdG9yICE9IHNvbG9fZGV2LT5mcHMpCisJCWNwLT50aW1lcGVyZnJhbWUuZGVub21pbmF0b3IgPSBzb2xvX2Rldi0+ZnBzOworCisJaWYgKGNwLT50aW1lcGVyZnJhbWUubnVtZXJhdG9yID4gMTUpCisJCWNwLT50aW1lcGVyZnJhbWUubnVtZXJhdG9yID0gMTU7CisKKwlzb2xvX2VuYy0+aW50ZXJ2YWwgPSBjcC0+dGltZXBlcmZyYW1lLm51bWVyYXRvcjsKKworCWNwLT5jYXBhYmlsaXR5ID0gVjRMMl9DQVBfVElNRVBFUkZSQU1FOworCisJc29sb19lbmMtPmdvcCA9IG1heChzb2xvX2Rldi0+ZnBzIC8gc29sb19lbmMtPmludGVydmFsLCAxKTsKKwlzb2xvX3VwZGF0ZV9tb2RlKHNvbG9fZW5jKTsKKworCXNwaW5fdW5sb2NrKCZzb2xvX2VuYy0+bG9jayk7CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc29sb19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCit7CisJc3RydWN0IHNvbG9fZW5jX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHNvbG9fZW5jX2RldiAqc29sb19lbmMgPSBmaC0+ZW5jOworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gc29sb19lbmMtPnNvbG9fZGV2OworCisJcWMtPmlkID0gdjRsMl9jdHJsX25leHQoc29sb19jdHJsX2NsYXNzZXMsIHFjLT5pZCk7CisJaWYgKCFxYy0+aWQpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMHgwMCwgMHhmZiwgMSwgMHg4MCk7CisJY2FzZSBWNEwyX0NJRF9TSEFSUE5FU1M6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMHgwMCwgMHgwZiwgMSwgMHgwMCk7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0VOQ09ESU5HOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwoCisJCQlxYywgVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfMSwKKwkJCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzRfQVZDLCAxLAorCQkJVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfNF9BVkMpOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19HT1BfU0laRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAxLCAyNTUsIDEsIHNvbG9fZGV2LT5mcHMpOworI2lmZGVmIFBSSVZBVEVfQ0lEUworCWNhc2UgVjRMMl9DSURfTU9USU9OX1RIUkVTSE9MRDoKKwkJcWMtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUjsKKwkJcWMtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOworCQlxYy0+bWluaW11bSA9IDA7CisJCXFjLT5tYXhpbXVtID0gMHhmZmZmOworCQlxYy0+c3RlcCA9IDE7CisJCXFjLT5kZWZhdWx0X3ZhbHVlID0gU09MT19ERUZfTU9UX1RIUkVTSDsKKwkJc3RybGNweShxYy0+bmFtZSwgIk1vdGlvbiBEZXRlY3Rpb24gVGhyZXNob2xkIiwKKwkJCXNpemVvZihxYy0+bmFtZSkpOworCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX01PVElPTl9FTkFCTEU6CisJCXFjLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTjsKKwkJcWMtPm1pbmltdW0gPSAwOworCQlxYy0+bWF4aW11bSA9IHFjLT5zdGVwID0gMTsKKwkJcWMtPmRlZmF1bHRfdmFsdWUgPSAwOworCQlzdHJsY3B5KHFjLT5uYW1lLCAiTW90aW9uIERldGVjdGlvbiBFbmFibGUiLCBzaXplb2YocWMtPm5hbWUpKTsKKwkJcmV0dXJuIDA7CisjZWxzZQorCWNhc2UgVjRMMl9DSURfTU9USU9OX1RIUkVTSE9MRDoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAweGZmZmYsIDEsCisJCQkJCSAgICBTT0xPX0RFRl9NT1RfVEhSRVNIKTsKKwljYXNlIFY0TDJfQ0lEX01PVElPTl9FTkFCTEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMCk7CisjZW5kaWYKKwljYXNlIFY0TDJfQ0lEX1JEU19UWF9SQURJT19URVhUOgorCQlxYy0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX1NUUklORzsKKwkJcWMtPm1pbmltdW0gPSAwOworCQlxYy0+bWF4aW11bSA9IE9TRF9URVhUX01BWDsKKwkJcWMtPnN0ZXAgPSAxOworCQlxYy0+ZGVmYXVsdF92YWx1ZSA9IDA7CisJCXN0cmxjcHkocWMtPm5hbWUsICJPU0QgVGV4dCIsIHNpemVvZihxYy0+bmFtZSkpOworCQlyZXR1cm4gMDsKKwl9CisKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgc29sb19xdWVyeW1lbnUoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgIHN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqcW1lbnUpCit7CisJc3RydWN0IHY0bDJfcXVlcnljdHJsIHFjdHJsOworCWludCBlcnI7CisKKwlxY3RybC5pZCA9IHFtZW51LT5pZDsKKwlpZiAoKGVyciA9IHNvbG9fcXVlcnljdHJsKGZpbGUsIHByaXYsICZxY3RybCkpKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9tZW51KHFtZW51LCAmcWN0cmwsIE5VTEwpOworfQorCitzdGF0aWMgaW50IHNvbG9fZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkgICAgICAgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3Qgc29sb19lbmNfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3Qgc29sb19lbmNfZGV2ICpzb2xvX2VuYyA9IGZoLT5lbmM7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBzb2xvX2VuYy0+c29sb19kZXY7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCWNhc2UgVjRMMl9DSURfSFVFOgorCWNhc2UgVjRMMl9DSURfU0hBUlBORVNTOgorCQlyZXR1cm4gdHcyOF9nZXRfY3RybF92YWwoc29sb19kZXYsIGN0cmwtPmlkLCBzb2xvX2VuYy0+Y2gsCisJCQkJCSAmY3RybC0+dmFsdWUpOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORzoKKwkJY3RybC0+dmFsdWUgPSBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR180X0FWQzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9TSVpFOgorCQljdHJsLT52YWx1ZSA9IHNvbG9fZW5jLT5nb3A7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTU9USU9OX1RIUkVTSE9MRDoKKwkJY3RybC0+dmFsdWUgPSBzb2xvX2VuYy0+bW90aW9uX3RocmVzaDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NT1RJT05fRU5BQkxFOgorCQljdHJsLT52YWx1ZSA9IHNvbG9faXNfbW90aW9uX29uKHNvbG9fZW5jKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc29sb19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCSAgICAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBzb2xvX2VuY19maCAqZmggPSBwcml2OworCXN0cnVjdCBzb2xvX2VuY19kZXYgKnNvbG9fZW5jID0gZmgtPmVuYzsKKwlzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiA9IHNvbG9fZW5jLT5zb2xvX2RldjsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJY2FzZSBWNEwyX0NJRF9TSEFSUE5FU1M6CisJCXJldHVybiB0dzI4X3NldF9jdHJsX3ZhbChzb2xvX2RldiwgY3RybC0+aWQsIHNvbG9fZW5jLT5jaCwKKwkJCQkJIGN0cmwtPnZhbHVlKTsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkc6CisJCWlmIChjdHJsLT52YWx1ZSAhPSBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR180X0FWQykKKwkJCXJldHVybiAtRVJBTkdFOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fR09QX1NJWkU6CisJCWlmIChjdHJsLT52YWx1ZSA8IDEgfHwgY3RybC0+dmFsdWUgPiAyNTUpCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJc29sb19lbmMtPmdvcCA9IGN0cmwtPnZhbHVlOworCQlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WRV9DSF9HT1Aoc29sb19lbmMtPmNoKSwKKwkJCSAgICAgICBzb2xvX2VuYy0+Z29wKTsKKwkJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVkVfQ0hfR09QX0Uoc29sb19lbmMtPmNoKSwKKwkJCSAgICAgICBzb2xvX2VuYy0+Z29wKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NT1RJT05fVEhSRVNIT0xEOgorCQkvKiBUT0RPIGFjY2VwdCB2YWx1ZSBvbiBsb3dlciAxNi1iaXRzIGFuZCB1c2UgaGlnaAorCQkgKiAxNi1iaXRzIHRvIGFzc2lnbiB0aGUgdmFsdWUgdG8gYSBzcGVjaWZpYyBibG9jayAqLworCQlpZiAoY3RybC0+dmFsdWUgPCAwIHx8IGN0cmwtPnZhbHVlID4gMHhmZmZmKQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCXNvbG9fZW5jLT5tb3Rpb25fdGhyZXNoID0gY3RybC0+dmFsdWU7CisJCXNvbG9fc2V0X21vdGlvbl90aHJlc2hvbGQoc29sb19kZXYsIHNvbG9fZW5jLT5jaCwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01PVElPTl9FTkFCTEU6CisJCXNvbG9fbW90aW9uX3RvZ2dsZShzb2xvX2VuYywgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2xvX3NfZXh0X2N0cmxzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3RybHMpCit7CisJc3RydWN0IHNvbG9fZW5jX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHNvbG9fZW5jX2RldiAqc29sb19lbmMgPSBmaC0+ZW5jOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGN0cmxzLT5jb3VudDsgaSsrKSB7CisJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjdHJsID0gKGN0cmxzLT5jb250cm9scyArIGkpOworCQlpbnQgZXJyOworCisJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJY2FzZSBWNEwyX0NJRF9SRFNfVFhfUkFESU9fVEVYVDoKKwkJCWlmIChjdHJsLT5zaXplIC0gMSA+IE9TRF9URVhUX01BWCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gLUVSQU5HRTsKKwkJCWVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgCWVyciA9IGNvcHlfZnJvbV91c2VyKHNvbG9fZW5jLT5vc2RfdGV4dCwKKwkJCQkJCSAgICAgY3RybC0+c3RyaW5nLAorCQkJCQkJICAgICBPU0RfVEVYVF9NQVgpOworCQkJCXNvbG9fZW5jLT5vc2RfdGV4dFtPU0RfVEVYVF9NQVhdID0gJ1wwJzsKKwkJCQlpZiAoIWVycikKKwkJCQkJZXJyID0gc29sb19vc2RfcHJpbnQoc29sb19lbmMpOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllcnIgPSAtRUlOVkFMOworCQl9CisKKwkJaWYgKGVyciA8IDApIHsKKwkJCWN0cmxzLT5lcnJvcl9pZHggPSBpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNvbG9fZ19leHRfY3RybHMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjdHJscykKK3sKKwlzdHJ1Y3Qgc29sb19lbmNfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3Qgc29sb19lbmNfZGV2ICpzb2xvX2VuYyA9IGZoLT5lbmM7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3RybHMtPmNvdW50OyBpKyspIHsKKwkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmwgPSAoY3RybHMtPmNvbnRyb2xzICsgaSk7CisJCWludCBlcnI7CisKKwkJc3dpdGNoIChjdHJsLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX1JEU19UWF9SQURJT19URVhUOgorCQkJaWYgKGN0cmwtPnNpemUgPCBPU0RfVEVYVF9NQVgpIHsKKwkJCQljdHJsLT5zaXplID0gT1NEX1RFWFRfTUFYOworCQkJCWVyciA9IC1FTk9TUEM7CisJCQl9IGVsc2UgeworCQkJCWVyciA9IGNvcHlfdG9fdXNlcihjdHJsLT5zdHJpbmcsCisJCQkJCQkgICBzb2xvX2VuYy0+b3NkX3RleHQsCisJCQkJCQkgICBPU0RfVEVYVF9NQVgpOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllcnIgPSAtRUlOVkFMOworCQl9CisKKwkJaWYgKGVyciA8IDApIHsKKwkJCWN0cmxzLT5lcnJvcl9pZHggPSBpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHNvbG9fZW5jX2ZvcHMgPSB7CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJCT0gc29sb19lbmNfb3BlbiwKKwkucmVsZWFzZQkJPSBzb2xvX2VuY19yZWxlYXNlLAorCS5yZWFkCQkJPSBzb2xvX2VuY19yZWFkLAorCS5wb2xsCQkJPSBzb2xvX2VuY19wb2xsLAorCS5tbWFwCQkJPSBzb2xvX2VuY19tbWFwLAorCS5pb2N0bAkJCT0gdmlkZW9faW9jdGwyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBzb2xvX2VuY19pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcAkJPSBzb2xvX2VuY19xdWVyeWNhcCwKKwkudmlkaW9jX3Nfc3RkCQkJPSBzb2xvX2VuY19zX3N0ZCwKKwkvKiBJbnB1dCBjYWxsYmFja3MgKi8KKwkudmlkaW9jX2VudW1faW5wdXQJCT0gc29sb19lbmNfZW51bV9pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQJCQk9IHNvbG9fZW5jX3NldF9pbnB1dCwKKwkudmlkaW9jX2dfaW5wdXQJCQk9IHNvbG9fZW5jX2dldF9pbnB1dCwKKwkvKiBWaWRlbyBjYXB0dXJlIGZvcm1hdCBjYWxsYmFja3MgKi8KKwkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAJPSBzb2xvX2VuY19lbnVtX2ZtdF9jYXAsCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAJCT0gc29sb19lbmNfdHJ5X2ZtdF9jYXAsCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwCQk9IHNvbG9fZW5jX3NldF9mbXRfY2FwLAorCS52aWRpb2NfZ19mbXRfdmlkX2NhcAkJPSBzb2xvX2VuY19nZXRfZm10X2NhcCwKKwkvKiBTdHJlYW1pbmcgSS9PICovCisJLnZpZGlvY19yZXFidWZzCQkJPSBzb2xvX2VuY19yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYJCT0gc29sb19lbmNfcXVlcnlidWYsCisJLnZpZGlvY19xYnVmCQkJPSBzb2xvX2VuY19xYnVmLAorCS52aWRpb2NfZHFidWYJCQk9IHNvbG9fZW5jX2RxYnVmLAorCS52aWRpb2Nfc3RyZWFtb24JCT0gc29sb19lbmNfc3RyZWFtb24sCisJLnZpZGlvY19zdHJlYW1vZmYJCT0gc29sb19lbmNfc3RyZWFtb2ZmLAorCS8qIEZyYW1lIHNpemUgYW5kIGludGVydmFsICovCisJLnZpZGlvY19lbnVtX2ZyYW1lc2l6ZXMJCT0gc29sb19lbnVtX2ZyYW1lc2l6ZXMsCisJLnZpZGlvY19lbnVtX2ZyYW1laW50ZXJ2YWxzCT0gc29sb19lbnVtX2ZyYW1laW50ZXJ2YWxzLAorCS8qIFZpZGVvIGNhcHR1cmUgcGFyYW1ldGVycyAqLworCS52aWRpb2Nfc19wYXJtCQkJPSBzb2xvX3NfcGFybSwKKwkudmlkaW9jX2dfcGFybQkJCT0gc29sb19nX3Bhcm0sCisJLyogQ29udHJvbHMgKi8KKwkudmlkaW9jX3F1ZXJ5Y3RybAkJPSBzb2xvX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX3F1ZXJ5bWVudQkJPSBzb2xvX3F1ZXJ5bWVudSwKKwkudmlkaW9jX2dfY3RybAkJCT0gc29sb19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwJCQk9IHNvbG9fc19jdHJsLAorCS52aWRpb2NfZ19leHRfY3RybHMJCT0gc29sb19nX2V4dF9jdHJscywKKwkudmlkaW9jX3NfZXh0X2N0cmxzCQk9IHNvbG9fc19leHRfY3RybHMsCit9OworCitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBzb2xvX2VuY190ZW1wbGF0ZSA9IHsKKwkubmFtZQkJCT0gU09MTzYwMTBfTkFNRSwKKwkuZm9wcwkJCT0gJnNvbG9fZW5jX2ZvcHMsCisJLmlvY3RsX29wcwkJPSAmc29sb19lbmNfaW9jdGxfb3BzLAorCS5taW5vcgkJCT0gLTEsCisJLnJlbGVhc2UJCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCisKKwkudHZub3JtcwkJPSBWNEwyX1NURF9OVFNDX00gfCBWNEwyX1NURF9QQUxfTSwKKwkuY3VycmVudF9ub3JtCQk9IFY0TDJfU1REX05UU0NfTSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc29sb19lbmNfZGV2ICpzb2xvX2VuY19hbGxvYyhzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgdTggY2gpCit7CisJc3RydWN0IHNvbG9fZW5jX2RldiAqc29sb19lbmM7CisJaW50IHJldDsKKworCXNvbG9fZW5jID0ga3phbGxvYyhzaXplb2YoKnNvbG9fZW5jKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzb2xvX2VuYykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlzb2xvX2VuYy0+dmZkID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKCFzb2xvX2VuYy0+dmZkKSB7CisJCWtmcmVlKHNvbG9fZW5jKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJc29sb19lbmMtPnNvbG9fZGV2ID0gc29sb19kZXY7CisJc29sb19lbmMtPmNoID0gY2g7CisKKwkqc29sb19lbmMtPnZmZCA9IHNvbG9fZW5jX3RlbXBsYXRlOworCXNvbG9fZW5jLT52ZmQtPnBhcmVudCA9ICZzb2xvX2Rldi0+cGRldi0+ZGV2OworCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShzb2xvX2VuYy0+dmZkLCBWRkxfVFlQRV9HUkFCQkVSLAorCQkJCSAgICB2aWRlb19ucik7CisJaWYgKHJldCA8IDApIHsKKwkJdmlkZW9fZGV2aWNlX3JlbGVhc2Uoc29sb19lbmMtPnZmZCk7CisJCWtmcmVlKHNvbG9fZW5jKTsKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwl9CisKKwl2aWRlb19zZXRfZHJ2ZGF0YShzb2xvX2VuYy0+dmZkLCBzb2xvX2VuYyk7CisKKwlzbnByaW50Zihzb2xvX2VuYy0+dmZkLT5uYW1lLCBzaXplb2Yoc29sb19lbmMtPnZmZC0+bmFtZSksCisJCSAiJXMtZW5jICglaS8laSkiLCBTT0xPNjAxMF9OQU1FLCBzb2xvX2Rldi0+dmZkLT5udW0sCisJCSBzb2xvX2VuYy0+dmZkLT5udW0pOworCisJaWYgKHZpZGVvX25yID49IDApCisJCXZpZGVvX25yKys7CisKKwlzcGluX2xvY2tfaW5pdCgmc29sb19lbmMtPmxvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNvbG9fZW5jLT50aHJlYWRfd2FpdCk7CisJYXRvbWljX3NldCgmc29sb19lbmMtPnJlYWRlcnMsIDApOworCisJc29sb19lbmMtPnFwID0gU09MT19ERUZBVUxUX1FQOworICAgICAgICBzb2xvX2VuYy0+Z29wID0gc29sb19kZXYtPmZwczsKKwlzb2xvX2VuYy0+aW50ZXJ2YWwgPSAxOworCXNvbG9fZW5jLT5tb2RlID0gU09MT19FTkNfTU9ERV9DSUY7CisJc29sb19lbmMtPm1vdGlvbl90aHJlc2ggPSBTT0xPX0RFRl9NT1RfVEhSRVNIOworCisJc3Bpbl9sb2NrKCZzb2xvX2VuYy0+bG9jayk7CisJc29sb191cGRhdGVfbW9kZShzb2xvX2VuYyk7CisJc3Bpbl91bmxvY2soJnNvbG9fZW5jLT5sb2NrKTsKKworCXJldHVybiBzb2xvX2VuYzsKK30KKworc3RhdGljIHZvaWQgc29sb19lbmNfZnJlZShzdHJ1Y3Qgc29sb19lbmNfZGV2ICpzb2xvX2VuYykKK3sKKwlpZiAoc29sb19lbmMgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2Uoc29sb19lbmMtPnZmZCk7CisJa2ZyZWUoc29sb19lbmMpOworfQorCitpbnQgc29sb19lbmNfdjRsMl9pbml0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNvbG9fZGV2LT5ucl9jaGFuczsgaSsrKSB7CisJCXNvbG9fZGV2LT52NGwyX2VuY1tpXSA9IHNvbG9fZW5jX2FsbG9jKHNvbG9fZGV2LCBpKTsKKwkJaWYgKElTX0VSUihzb2xvX2Rldi0+djRsMl9lbmNbaV0pKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgIT0gc29sb19kZXYtPm5yX2NoYW5zKSB7CisJCWludCByZXQgPSBQVFJfRVJSKHNvbG9fZGV2LT52NGwyX2VuY1tpXSk7CisJCXdoaWxlIChpLS0pCisJCQlzb2xvX2VuY19mcmVlKHNvbG9fZGV2LT52NGwyX2VuY1tpXSk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogRDFATUFYLUZQUyAqIDQgKi8KKwlzb2xvX2Rldi0+ZW5jX2J3X3JlbWFpbiA9IHNvbG9fZGV2LT5mcHMgKiA0ICogNDsKKworCWRldl9pbmZvKCZzb2xvX2Rldi0+cGRldi0+ZGV2LCAiRW5jb2RlcnMgYXMgL2Rldi92aWRlbyVkLSVkXG4iLAorCQkgc29sb19kZXYtPnY0bDJfZW5jWzBdLT52ZmQtPm51bSwKKwkJIHNvbG9fZGV2LT52NGwyX2VuY1tzb2xvX2Rldi0+bnJfY2hhbnMgLSAxXS0+dmZkLT5udW0pOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc29sb19lbmNfdjRsMl9leGl0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCWludCBpOworCisJc29sbzYwMTBfaXJxX29mZihzb2xvX2RldiwgU09MT19JUlFfTU9USU9OKTsKKworCWZvciAoaSA9IDA7IGkgPCBzb2xvX2Rldi0+bnJfY2hhbnM7IGkrKykKKwkJc29sb19lbmNfZnJlZShzb2xvX2Rldi0+djRsMl9lbmNbaV0pOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLXY0bDIuYyBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC12NGwyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUzN2NjNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC12NGwyLmMKQEAgLTAsMCArMSw4NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQmx1ZWNoZXJyeSwgTExDIHd3dy5ibHVlY2hlcnJ5ZHZyLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDEwIEJlbiBDb2xsaW5zIDxiY29sbGluc0BibHVlY2hlcnJ5Lm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtZG1hLWNvbnRpZy5oPgorCisjaW5jbHVkZSAic29sbzYwMTAuaCIKKyNpbmNsdWRlICJzb2xvNjAxMC10dzI4LmgiCisKKyNkZWZpbmUgU09MT19IV19CUEwJCTIwNDgKKyNkZWZpbmUgU09MT19ESVNQX1BJWF9GSUVMRAlWNEwyX0ZJRUxEX0lOVEVSTEFDRUQKKyNkZWZpbmUgU09MT19ESVNQX0JVRl9TSVpFCSg2NCAqIDEwMjQpIC8vIDY0aworCisvKiBJbWFnZSBzaXplIGlzIHR3byBmaWVsZHMsIFNPTE9fSFdfQlBMIGlzIG9uZSBob3Jpem9udGFsIGxpbmUgKi8KKyNkZWZpbmUgc29sb192bGluZXMoX19zb2xvKQkoX19zb2xvLT52aWRlb192c2l6ZSAqIDIpCisjZGVmaW5lIHNvbG9faW1hZ2Vfc2l6ZShfX3NvbG8pIChzb2xvX2J5dGVzcGVybGluZShfX3NvbG8pICogXAorCQkJCSBzb2xvX3ZsaW5lcyhfX3NvbG8pKQorI2RlZmluZSBzb2xvX2J5dGVzcGVybGluZShfX3NvbG8pIChfX3NvbG8tPnZpZGVvX2hzaXplICogMikKKworI2RlZmluZSBNSU5fVklEX0JVRkZFUlMJCTQKKworLyogU2ltcGxlIGZpbGUgaGFuZGxlICovCitzdHJ1Y3Qgc29sb19maWxlaGFuZGxlIHsKKwlzdHJ1Y3Qgc29sbzYwMTBfZGV2CSpzb2xvX2RldjsKKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUJdmlkcTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgICAgICAqa3RocmVhZDsKKwlzcGlubG9ja190CQlzbG9jazsKKwlpbnQJCQlvbGRfd3JpdGU7CisJc3RydWN0IGxpc3RfaGVhZAl2aWRxX2FjdGl2ZTsKK307CisKK3Vuc2lnbmVkIHZpZGVvX25yID0gLTE7Cittb2R1bGVfcGFyYW0odmlkZW9fbnIsIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyh2aWRlb19uciwgInZpZGVvWCBzdGFydCBudW1iZXIsIC0xIGlzIGF1dG9kZXRlY3QgKGRlZmF1bHQpIik7CisKK3N0YXRpYyB2b2lkIGVyYXNlX29uKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZPX0RJU1BfRVJBU0UsIFNPTE9fVk9fRElTUF9FUkFTRV9PTik7CisJc29sb19kZXYtPmVyYXNpbmcgPSAxOworCXNvbG9fZGV2LT5mcmFtZV9ibGFuayA9IDA7Cit9CisKK3N0YXRpYyBpbnQgZXJhc2Vfb2ZmKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCWlmICghc29sb19kZXYtPmVyYXNpbmcpCisJCXJldHVybiAwOworCisJLyogRmlyc3QgdGltZSBhcm91bmQsIGFzc2VydCBlcmFzZSBvZmYgKi8KKwlpZiAoIXNvbG9fZGV2LT5mcmFtZV9ibGFuaykKKwkJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVk9fRElTUF9FUkFTRSwgMCk7CisJLyogS2VlcCB0aGUgZXJhc2luZyBmbGFnIG9uIGZvciA4IGZyYW1lcyBtaW5pbXVtICovCisJaWYgKHNvbG9fZGV2LT5mcmFtZV9ibGFuaysrID49IDgpCisJCXNvbG9fZGV2LT5lcmFzaW5nID0gMDsKKworCXJldHVybiAxOworfQorCit2b2lkIHNvbG9fdmlkZW9faW5faXNyKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0lSUV9TVEFULCBTT0xPX0lSUV9WSURFT19JTik7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzb2xvX2Rldi0+ZGlzcF90aHJlYWRfd2FpdCk7Cit9CisKK3N0YXRpYyB2b2lkIHNvbG9fd2luX3NldHVwKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCB1OCBjaCwKKwkJCSAgIGludCBzeCwgaW50IHN5LCBpbnQgZXgsIGludCBleSwgaW50IHNjYWxlKQoreworCWlmIChjaCA+PSBzb2xvX2Rldi0+bnJfY2hhbnMpCisJCXJldHVybjsKKworCS8qIEhlcmUsIHdlIGp1c3Qga2VlcCB3aW5kb3cvY2hhbm5lbCB0aGUgc2FtZSAqLworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZJX1dJTl9DVFJMMChjaCksCisJCSAgICAgICBTT0xPX1ZJX1dJTl9DSEFOTkVMKGNoKSB8CisJCSAgICAgICBTT0xPX1ZJX1dJTl9TWChzeCkgfAorCQkgICAgICAgU09MT19WSV9XSU5fRVgoZXgpIHwKKwkJICAgICAgIFNPTE9fVklfV0lOX1NDQUxFKHNjYWxlKSk7CisKKyAgICAgICAgc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVklfV0lOX0NUUkwxKGNoKSwKKwkJICAgICAgIFNPTE9fVklfV0lOX1NZKHN5KSB8CisJCSAgICAgICBTT0xPX1ZJX1dJTl9FWShleSkpOworfQorCitzdGF0aWMgaW50IHNvbG9fdjRsMl9jaF9leHRfNHVwKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCB1OCBpZHgsIGludCBvbikKK3sKKwl1OCBjaCA9IGlkeCAqIDQ7CisKKwlpZiAoY2ggPj0gc29sb19kZXYtPm5yX2NoYW5zKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghb24pIHsKKwkJdTggaTsKKwkJZm9yIChpID0gY2g7IGkgPCBjaCArIDQ7IGkrKykKKwkJCXNvbG9fd2luX3NldHVwKHNvbG9fZGV2LCBpLCBzb2xvX2Rldi0+dmlkZW9faHNpemUsCisJCQkJICAgICAgIHNvbG9fdmxpbmVzKHNvbG9fZGV2KSwKKwkJCQkgICAgICAgc29sb19kZXYtPnZpZGVvX2hzaXplLAorCQkJCSAgICAgICBzb2xvX3ZsaW5lcyhzb2xvX2RldiksIDApOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBSb3cgMSAqLworCXNvbG9fd2luX3NldHVwKHNvbG9fZGV2LCBjaCwgMCwgMCwgc29sb19kZXYtPnZpZGVvX2hzaXplIC8gMiwKKwkJICAgICAgIHNvbG9fdmxpbmVzKHNvbG9fZGV2KSAvIDIsIDMpOworCXNvbG9fd2luX3NldHVwKHNvbG9fZGV2LCBjaCArIDEsIHNvbG9fZGV2LT52aWRlb19oc2l6ZSAvIDIsIDAsCisJCSAgICAgICBzb2xvX2Rldi0+dmlkZW9faHNpemUsIHNvbG9fdmxpbmVzKHNvbG9fZGV2KSAvIDIsIDMpOworCS8qIFJvdyAyICovCisJc29sb193aW5fc2V0dXAoc29sb19kZXYsIGNoICsgMiwgMCwgc29sb192bGluZXMoc29sb19kZXYpIC8gMiwKKwkJICAgICAgIHNvbG9fZGV2LT52aWRlb19oc2l6ZSAvIDIsIHNvbG9fdmxpbmVzKHNvbG9fZGV2KSwgMyk7CisJc29sb193aW5fc2V0dXAoc29sb19kZXYsIGNoICsgMywgc29sb19kZXYtPnZpZGVvX2hzaXplIC8gMiwKKwkJICAgICAgIHNvbG9fdmxpbmVzKHNvbG9fZGV2KSAvIDIsIHNvbG9fZGV2LT52aWRlb19oc2l6ZSwKKwkJICAgICAgIHNvbG9fdmxpbmVzKHNvbG9fZGV2KSwgMyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2xvX3Y0bDJfY2hfZXh0XzE2dXAoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIGludCBvbikKK3sKKwlpbnQgc3ksIHlzaXplLCBoc2l6ZSwgaTsKKworCWlmICghb24pIHsKKwkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCQlzb2xvX3dpbl9zZXR1cChzb2xvX2RldiwgaSwgc29sb19kZXYtPnZpZGVvX2hzaXplLAorCQkJCSAgICAgICBzb2xvX3ZsaW5lcyhzb2xvX2RldiksCisJCQkJICAgICAgIHNvbG9fZGV2LT52aWRlb19oc2l6ZSwKKwkJCQkgICAgICAgc29sb192bGluZXMoc29sb19kZXYpLCAwKTsKKwkJcmV0dXJuIDA7CisJfQorCisJeXNpemUgPSBzb2xvX3ZsaW5lcyhzb2xvX2RldikgLyA0OworCWhzaXplID0gc29sb19kZXYtPnZpZGVvX2hzaXplIC8gNDsKKworCWZvciAoc3kgPSAwLCBpID0gMDsgaSA8IDQ7IGkrKywgc3kgKz0geXNpemUpIHsKKwkJc29sb193aW5fc2V0dXAoc29sb19kZXYsIGkgKiA0LCAwLCBzeSwgaHNpemUsCisJCQkgICAgICAgc3kgKyB5c2l6ZSwgNSk7CisJCXNvbG9fd2luX3NldHVwKHNvbG9fZGV2LCAoaSAqIDQpICsgMSwgaHNpemUsIHN5LAorCQkJICAgICAgIGhzaXplICogMiwgc3kgKyB5c2l6ZSwgNSk7CisJCXNvbG9fd2luX3NldHVwKHNvbG9fZGV2LCAoaSAqIDQpICsgMiwgaHNpemUgKiAyLCBzeSwKKwkJCSAgICAgICBoc2l6ZSAqIDMsIHN5ICsgeXNpemUsIDUpOworCQlzb2xvX3dpbl9zZXR1cChzb2xvX2RldiwgKGkgKiA0KSArIDMsIGhzaXplICogMywgc3ksCisJCQkgICAgICAgc29sb19kZXYtPnZpZGVvX2hzaXplLCBzeSArIHlzaXplLCA1KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2xvX3Y0bDJfY2goc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHU4IGNoLCBpbnQgb24pCit7CisJdTggZXh0X2NoOworCisJaWYgKGNoIDwgc29sb19kZXYtPm5yX2NoYW5zKSB7CisJCXNvbG9fd2luX3NldHVwKHNvbG9fZGV2LCBjaCwgb24gPyAwIDogc29sb19kZXYtPnZpZGVvX2hzaXplLAorCQkJICAgICAgIG9uID8gMCA6IHNvbG9fdmxpbmVzKHNvbG9fZGV2KSwKKwkJCSAgICAgICBzb2xvX2Rldi0+dmlkZW9faHNpemUsIHNvbG9fdmxpbmVzKHNvbG9fZGV2KSwKKwkJCSAgICAgICBvbiA/IDEgOiAwKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGNoID49IHNvbG9fZGV2LT5ucl9jaGFucyArIHNvbG9fZGV2LT5ucl9leHQpCisJCXJldHVybiAtRUlOVkFMOworCisJZXh0X2NoID0gY2ggLSBzb2xvX2Rldi0+bnJfY2hhbnM7CisKKwkvKiA0dXAncyBmaXJzdCAqLworCWlmIChleHRfY2ggPCA0KQorCQlyZXR1cm4gc29sb192NGwyX2NoX2V4dF80dXAoc29sb19kZXYsIGV4dF9jaCwgb24pOworCisJLyogUmVtYWluaW5nIGNhc2UgaXMgMTZ1cCBmb3IgMTYtcG9ydCAqLworCXJldHVybiBzb2xvX3Y0bDJfY2hfZXh0XzE2dXAoc29sb19kZXYsIG9uKTsKK30KKworc3RhdGljIGludCBzb2xvX3Y0bDJfc2V0X2NoKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCB1OCBjaCkKK3sKKwlpZiAoY2ggPj0gc29sb19kZXYtPm5yX2NoYW5zICsgc29sb19kZXYtPm5yX2V4dCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcmFzZV9vbihzb2xvX2Rldik7CisKKwlzb2xvX3Y0bDJfY2goc29sb19kZXYsIHNvbG9fZGV2LT5jdXJfZGlzcF9jaCwgMCk7CisJc29sb192NGwyX2NoKHNvbG9fZGV2LCBjaCwgMSk7CisKKwlzb2xvX2Rldi0+Y3VyX2Rpc3BfY2ggPSBjaDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzb2xvX2ZpbGxidWYoc3RydWN0IHNvbG9fZmlsZWhhbmRsZSAqZmgsCisJCQkgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBmaC0+c29sb19kZXY7CisJZG1hX2FkZHJfdCB2YnVmOworCXVuc2lnbmVkIGludCBmZG1hX2FkZHI7CisJaW50IGZyYW1lX3NpemU7CisJaW50IGVycm9yID0gMTsKKwlpbnQgaTsKKworCWlmICghKHZidWYgPSB2aWRlb2J1Zl90b19kbWFfY29udGlnKHZiKSkpCisJCWdvdG8gZmluaXNoX2J1ZjsKKworCWlmIChlcmFzZV9vZmYoc29sb19kZXYpKSB7CisJCXZvaWQgKnAgPSB2aWRlb2J1Zl9xdWV1ZV90b192YWRkcigmZmgtPnZpZHEsIHZiKTsKKwkJaW50IGltYWdlX3NpemUgPSBzb2xvX2ltYWdlX3NpemUoc29sb19kZXYpOworCQlmb3IgKGkgPSAwOyBpIDwgaW1hZ2Vfc2l6ZTsgaSArPSAyKSB7CisJCQkoKHU4ICopcClbaV0gPSAweDgwOworCQkJKCh1OCAqKXApW2kgKyAxXSA9IDB4MDA7CisJCX0KKwkJZXJyb3IgPSAwOworCQlnb3RvIGZpbmlzaF9idWY7CisJfQorCisJZnJhbWVfc2l6ZSA9IFNPTE9fSFdfQlBMICogc29sb192bGluZXMoc29sb19kZXYpOworCWZkbWFfYWRkciA9IFNPTE9fRElTUF9FWFRfQUREUihzb2xvX2RldikgKyAoZmgtPm9sZF93cml0ZSAqIGZyYW1lX3NpemUpOworCisJZm9yIChpID0gMDsgaSA8IGZyYW1lX3NpemUgLyBTT0xPX0RJU1BfQlVGX1NJWkU7IGkrKykgeworCQlpbnQgajsKKwkJZm9yIChqID0gMDsgaiA8IChTT0xPX0RJU1BfQlVGX1NJWkUgLyBTT0xPX0hXX0JQTCk7IGorKykgeworCQkJaWYgKHNvbG9fcDJtX2RtYV90KHNvbG9fZGV2LCBTT0xPX1AyTV9ETUFfSURfRElTUCwgMCwKKwkJCQkJICAgdmJ1ZiwgZmRtYV9hZGRyICsgKGogKiBTT0xPX0hXX0JQTCksCisJCQkJCSAgIHNvbG9fYnl0ZXNwZXJsaW5lKHNvbG9fZGV2KSkpCisJCQkJZ290byBmaW5pc2hfYnVmOworCQkJdmJ1ZiArPSBzb2xvX2J5dGVzcGVybGluZShzb2xvX2Rldik7CisJCX0KKwkJZmRtYV9hZGRyICs9IFNPTE9fRElTUF9CVUZfU0laRTsKKwl9CisJZXJyb3IgPSAwOworCitmaW5pc2hfYnVmOgorCWlmIChlcnJvcikgeworCQl2Yi0+c3RhdGUgPSBWSURFT0JVRl9FUlJPUjsKKwl9IGVsc2UgeworCQl2Yi0+c3RhdGUgPSBWSURFT0JVRl9ET05FOworCQl2Yi0+ZmllbGRfY291bnQrKzsKKwkJZG9fZ2V0dGltZW9mZGF5KCZ2Yi0+dHMpOworCX0KKworCXdha2VfdXAoJnZiLT5kb25lKTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgc29sb190aHJlYWRfdHJ5KHN0cnVjdCBzb2xvX2ZpbGVoYW5kbGUgKmZoKQoreworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiOworCXVuc2lnbmVkIGludCBjdXJfd3JpdGU7CisKKwlmb3IgKDs7KSB7CisJCXNwaW5fbG9jaygmZmgtPnNsb2NrKTsKKworCQlpZiAobGlzdF9lbXB0eSgmZmgtPnZpZHFfYWN0aXZlKSkKKwkJCWJyZWFrOworCisJCXZiID0gbGlzdF9maXJzdF9lbnRyeSgmZmgtPnZpZHFfYWN0aXZlLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyLAorCQkJCSAgICAgIHF1ZXVlKTsKKworCQlpZiAoIXdhaXRxdWV1ZV9hY3RpdmUoJnZiLT5kb25lKSkKKwkJCWJyZWFrOworCisJCWN1cl93cml0ZSA9IFNPTE9fVklfU1RBVFVTMF9QQUdFKHNvbG9fcmVnX3JlYWQoZmgtPnNvbG9fZGV2LAorCQkJCQkJCVNPTE9fVklfU1RBVFVTMCkpOworCQlpZiAoY3VyX3dyaXRlID09IGZoLT5vbGRfd3JpdGUpCisJCQlicmVhazsKKworCQlmaC0+b2xkX3dyaXRlID0gY3VyX3dyaXRlOworCQlsaXN0X2RlbCgmdmItPnF1ZXVlKTsKKworCQlzcGluX3VubG9jaygmZmgtPnNsb2NrKTsKKworCQlzb2xvX2ZpbGxidWYoZmgsIHZiKTsKKwl9CisKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJmZoLT5zbG9jayk7CisJc3Bpbl91bmxvY2soJmZoLT5zbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgc29sb190aHJlYWQodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc29sb19maWxlaGFuZGxlICpmaCA9IGRhdGE7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBmaC0+c29sb19kZXY7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisKKwlzZXRfZnJlZXphYmxlKCk7CisJYWRkX3dhaXRfcXVldWUoJnNvbG9fZGV2LT5kaXNwX3RocmVhZF93YWl0LCAmd2FpdCk7CisKKwlmb3IgKDs7KSB7CisJCWxvbmcgdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShIWik7CisJCWlmICh0aW1lb3V0ID09IC1FUkVTVEFSVFNZUyB8fCBrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJCQlicmVhazsKKwkJc29sb190aHJlYWRfdHJ5KGZoKTsKKwkJdHJ5X3RvX2ZyZWV6ZSgpOworCX0KKworCXJlbW92ZV93YWl0X3F1ZXVlKCZzb2xvX2Rldi0+ZGlzcF90aHJlYWRfd2FpdCwgJndhaXQpOworCisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNvbG9fc3RhcnRfdGhyZWFkKHN0cnVjdCBzb2xvX2ZpbGVoYW5kbGUgKmZoKQoreworCWZoLT5rdGhyZWFkID0ga3RocmVhZF9ydW4oc29sb190aHJlYWQsIGZoLCBTT0xPNjAxMF9OQU1FICJfZGlzcCIpOworCisJaWYgKElTX0VSUihmaC0+a3RocmVhZCkpCisJCXJldHVybiBQVFJfRVJSKGZoLT5rdGhyZWFkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzb2xvX3N0b3BfdGhyZWFkKHN0cnVjdCBzb2xvX2ZpbGVoYW5kbGUgKmZoKQoreworCWlmIChmaC0+a3RocmVhZCkgeworCQlrdGhyZWFkX3N0b3AoZmgtPmt0aHJlYWQpOworCQlmaC0+a3RocmVhZCA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IHNvbG9fYnVmX3NldHVwKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHVuc2lnbmVkIGludCAqY291bnQsCisJCQkgIHVuc2lnbmVkIGludCAqc2l6ZSkKK3sKKwlzdHJ1Y3Qgc29sb19maWxlaGFuZGxlICpmaCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgID0gZmgtPnNvbG9fZGV2OworCisgICAgICAgICpzaXplID0gc29sb19pbWFnZV9zaXplKHNvbG9fZGV2KTsKKworICAgICAgICBpZiAoKmNvdW50IDwgTUlOX1ZJRF9CVUZGRVJTKQorCQkqY291bnQgPSBNSU5fVklEX0JVRkZFUlM7CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc29sb19idWZfcHJlcGFyZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLAorCQkJICAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLCBlbnVtIHY0bDJfZmllbGQgZmllbGQpCit7CisJc3RydWN0IHNvbG9fZmlsZWhhbmRsZSAqZmggID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiA9IGZoLT5zb2xvX2RldjsKKworCXZiLT5zaXplID0gc29sb19pbWFnZV9zaXplKHNvbG9fZGV2KTsKKwlpZiAodmItPmJhZGRyICE9IDAgJiYgdmItPmJzaXplIDwgdmItPnNpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogWFhYOiBUaGVzZSBwcm9wZXJ0aWVzIG9ubHkgY2hhbmdlIHdoZW4gcXVldWUgaXMgaWRsZSAqLworCXZiLT53aWR0aCAgPSBzb2xvX2Rldi0+dmlkZW9faHNpemU7CisJdmItPmhlaWdodCA9IHNvbG9fdmxpbmVzKHNvbG9fZGV2KTsKKwl2Yi0+Ynl0ZXNwZXJsaW5lID0gc29sb19ieXRlc3BlcmxpbmUoc29sb19kZXYpOworCXZiLT5maWVsZCAgPSBmaWVsZDsKKworCWlmICh2Yi0+c3RhdGUgPT0gVklERU9CVUZfTkVFRFNfSU5JVCkgeworCQlpbnQgcmMgPSB2aWRlb2J1Zl9pb2xvY2sodnEsIHZiLCBOVUxMKTsKKwkJaWYgKHJjIDwgMCkgeworCQkJdmlkZW9idWZfZG1hX2NvbnRpZ19mcmVlKHZxLCB2Yik7CisJCQl2Yi0+c3RhdGUgPSBWSURFT0JVRl9ORUVEU19JTklUOworCQkJcmV0dXJuIHJjOworCQl9CisJfQorCXZiLT5zdGF0ZSA9IFZJREVPQlVGX1BSRVBBUkVEOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNvbG9fYnVmX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsCisJCQkgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3Qgc29sb19maWxlaGFuZGxlICpmaCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBmaC0+c29sb19kZXY7CisKKwl2Yi0+c3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJbGlzdF9hZGRfdGFpbCgmdmItPnF1ZXVlLCAmZmgtPnZpZHFfYWN0aXZlKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnNvbG9fZGV2LT5kaXNwX3RocmVhZF93YWl0KTsKK30KKworc3RhdGljIHZvaWQgc29sb19idWZfcmVsZWFzZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLAorCQkJICAgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwl2aWRlb2J1Zl9kbWFfY29udGlnX2ZyZWUodnEsIHZiKTsKKwl2Yi0+c3RhdGUgPSBWSURFT0JVRl9ORUVEU19JTklUOworfQorCitzdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBzb2xvX3ZpZGVvX3FvcHMgPSB7CisJLmJ1Zl9zZXR1cAk9IHNvbG9fYnVmX3NldHVwLAorCS5idWZfcHJlcGFyZQk9IHNvbG9fYnVmX3ByZXBhcmUsCisJLmJ1Zl9xdWV1ZQk9IHNvbG9fYnVmX3F1ZXVlLAorCS5idWZfcmVsZWFzZQk9IHNvbG9fYnVmX3JlbGVhc2UsCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IHNvbG9fdjRsMl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKK3sKKwlzdHJ1Y3Qgc29sb19maWxlaGFuZGxlICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworICAgICAgICByZXR1cm4gdmlkZW9idWZfcG9sbF9zdHJlYW0oZmlsZSwgJmZoLT52aWRxLCB3YWl0KTsKK30KKworc3RhdGljIGludCBzb2xvX3Y0bDJfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHNvbG9fZmlsZWhhbmRsZSAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gdmlkZW9idWZfbW1hcF9tYXBwZXIoJmZoLT52aWRxLCB2bWEpOworfQorCitzdGF0aWMgaW50IHNvbG9fdjRsMl9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3Qgc29sb19maWxlaGFuZGxlICpmaDsKKwlpbnQgcmV0OworCisJaWYgKChmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9ja19pbml0KCZmaC0+c2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZmaC0+dmlkcV9hY3RpdmUpOworCWZoLT5zb2xvX2RldiA9IHNvbG9fZGV2OworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOworCisJaWYgKChyZXQgPSBzb2xvX3N0YXJ0X3RocmVhZChmaCkpKSB7CisJCWtmcmVlKGZoKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl2aWRlb2J1Zl9xdWV1ZV9kbWFfY29udGlnX2luaXQoJmZoLT52aWRxLCAmc29sb192aWRlb19xb3BzLAorCQkJCSAgICAmc29sb19kZXYtPnBkZXYtPmRldiwgJmZoLT5zbG9jaywKKwkJCQkgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAorCQkJCSAgICBTT0xPX0RJU1BfUElYX0ZJRUxELAorCQkJCSAgICBzaXplb2Yoc3RydWN0IHZpZGVvYnVmX2J1ZmZlciksIGZoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBzb2xvX3Y0bDJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmRhdGEsCisJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3Qgc29sb19maWxlaGFuZGxlICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiB2aWRlb2J1Zl9yZWFkX3N0cmVhbSgmZmgtPnZpZHEsIGRhdGEsIGNvdW50LCBwcG9zLCAwLAorCQkJCSAgICBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Cit9CisKK3N0YXRpYyBpbnQgc29sb192NGwyX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHNvbG9fZmlsZWhhbmRsZSAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwl2aWRlb2J1Zl9zdG9wKCZmaC0+dmlkcSk7CisJdmlkZW9idWZfbW1hcF9mcmVlKCZmaC0+dmlkcSk7CisJc29sb19zdG9wX3RocmVhZChmaCk7CisJa2ZyZWUoZmgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc29sb19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCisJCQkgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQoreworCXN0cnVjdCBzb2xvX2ZpbGVoYW5kbGUgICpmaCAgPSBwcml2OworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gZmgtPnNvbG9fZGV2OworCisJc3RyY3B5KGNhcC0+ZHJpdmVyLCBTT0xPNjAxMF9OQU1FKTsKKwlzdHJjcHkoY2FwLT5jYXJkLCAiU29mdGxvZ2ljIDYwMTAiKTsKKwlzbnByaW50ZihjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbyksICJQQ0kgJXMiLAorCQkgcGNpX25hbWUoc29sb19kZXYtPnBkZXYpKTsKKwljYXAtPnZlcnNpb24gPSBTT0xPNjAxMF9WRVJfTlVNOworCWNhcC0+Y2FwYWJpbGl0aWVzID0gICAgIFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAorCQkJCVY0TDJfQ0FQX1JFQURXUklURSB8CisJCQkJVjRMMl9DQVBfU1RSRUFNSU5HOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNvbG9fZW51bV9leHRfaW5wdXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsCisJCQkgICAgICAgc3RydWN0IHY0bDJfaW5wdXQgKmlucHV0KQoreworCXN0YXRpYyBjb25zdCBjaGFyICpkaXNwbmFtZXNfMVtdID0geyAiNFVQIiB9OworCXN0YXRpYyBjb25zdCBjaGFyICpkaXNwbmFtZXNfMltdID0geyAiNFVQLTEiLCAiNFVQLTIiIH07CisJc3RhdGljIGNvbnN0IGNoYXIgKmRpc3BuYW1lc181W10gPSB7CisJCSI0VVAtMSIsICI0VVAtMiIsICI0VVAtMyIsICI0VVAtNCIsICIxNlVQIgorCX07CisJY29uc3QgY2hhciAqKmRpc3BuYW1lczsKKworCWlmIChpbnB1dC0+aW5kZXggPj0gKHNvbG9fZGV2LT5ucl9jaGFucyArIHNvbG9fZGV2LT5ucl9leHQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzb2xvX2Rldi0+bnJfZXh0ID09IDUpCisJCWRpc3BuYW1lcyA9IGRpc3BuYW1lc181OworCWVsc2UgaWYgKHNvbG9fZGV2LT5ucl9leHQgPT0gMikKKwkJZGlzcG5hbWVzID0gZGlzcG5hbWVzXzI7CisJZWxzZQorCQlkaXNwbmFtZXMgPSBkaXNwbmFtZXNfMTsKKworCXNucHJpbnRmKGlucHV0LT5uYW1lLCBzaXplb2YoaW5wdXQtPm5hbWUpLCAiTXVsdGkgJXMiLAorCQkgZGlzcG5hbWVzW2lucHV0LT5pbmRleCAtIHNvbG9fZGV2LT5ucl9jaGFuc10pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc29sb19lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgc3RydWN0IHY0bDJfaW5wdXQgKmlucHV0KQoreworCXN0cnVjdCBzb2xvX2ZpbGVoYW5kbGUgKmZoICA9IHByaXY7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBmaC0+c29sb19kZXY7CisKKwlpZiAoaW5wdXQtPmluZGV4ID49IHNvbG9fZGV2LT5ucl9jaGFucykgeworCQlpbnQgcmV0ID0gc29sb19lbnVtX2V4dF9pbnB1dChzb2xvX2RldiwgaW5wdXQpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfSBlbHNlIHsKKwkJc25wcmludGYoaW5wdXQtPm5hbWUsIHNpemVvZihpbnB1dC0+bmFtZSksICJDYW1lcmEgJWQiLAorCQkJIGlucHV0LT5pbmRleCArIDEpOworCisJCS8qIFdlIGNhbiBvbmx5IGNoZWNrIHRoaXMgZm9yIG5vcm1hbCBpbnB1dHMgKi8KKwkJaWYgKCF0dzI4X2dldF92aWRlb19zdGF0dXMoc29sb19kZXYsIGlucHV0LT5pbmRleCkpCisJCQlpbnB1dC0+c3RhdHVzID0gVjRMMl9JTl9TVF9OT19TSUdOQUw7CisJfQorCisJaW5wdXQtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOworCisJaWYgKHNvbG9fZGV2LT52aWRlb190eXBlID09IFNPTE9fVk9fRk1UX1RZUEVfTlRTQykKKwkJaW5wdXQtPnN0ZCA9IFY0TDJfU1REX05UU0NfTTsKKwllbHNlCisJCWlucHV0LT5zdGQgPSBWNEwyX1NURF9QQUxfTTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNvbG9fc2V0X2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJc3RydWN0IHNvbG9fZmlsZWhhbmRsZSAqZmggPSBwcml2OworCisJcmV0dXJuIHNvbG9fdjRsMl9zZXRfY2goZmgtPnNvbG9fZGV2LCBpbmRleCk7Cit9CisKK3N0YXRpYyBpbnQgc29sb19nZXRfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaW5kZXgpCit7CisJc3RydWN0IHNvbG9fZmlsZWhhbmRsZSAqZmggPSBwcml2OworCisJKmluZGV4ID0gZmgtPnNvbG9fZGV2LT5jdXJfZGlzcF9jaDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNvbG9fZW51bV9mbXRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgICBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQoreworCWlmIChmLT5pbmRleCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmLT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9VWVZZOworCXN0cmxjcHkoZi0+ZGVzY3JpcHRpb24sICJVWVVWIDQ6MjoyIFBhY2tlZCIsIHNpemVvZihmLT5kZXNjcmlwdGlvbikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc29sb190cnlfZm10X2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHNvbG9fZmlsZWhhbmRsZSAqZmggPSBwcml2OworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gZmgtPnNvbG9fZGV2OworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCWludCBpbWFnZV9zaXplID0gc29sb19pbWFnZV9zaXplKHNvbG9fZGV2KTsKKworCS8qIENoZWNrIHN1cHBvcnRlZCBzaXplcyAqLworCWlmIChwaXgtPndpZHRoICE9IHNvbG9fZGV2LT52aWRlb19oc2l6ZSkKKwkJcGl4LT53aWR0aCA9IHNvbG9fZGV2LT52aWRlb19oc2l6ZTsKKwlpZiAocGl4LT5oZWlnaHQgIT0gc29sb192bGluZXMoc29sb19kZXYpKQorCQlwaXgtPmhlaWdodCA9IHNvbG9fdmxpbmVzKHNvbG9fZGV2KTsKKwlpZiAocGl4LT5zaXplaW1hZ2UgIT0gaW1hZ2Vfc2l6ZSkKKwkJcGl4LT5zaXplaW1hZ2UgPSBpbWFnZV9zaXplOworCisJLyogQ2hlY2sgZm9ybWF0cyAqLworCWlmIChwaXgtPmZpZWxkID09IFY0TDJfRklFTERfQU5ZKQorCQlwaXgtPmZpZWxkID0gU09MT19ESVNQX1BJWF9GSUVMRDsKKworCWlmIChwaXgtPnBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9VWVZZIHx8CisJICAgIHBpeC0+ZmllbGQgICAgICAgIT0gU09MT19ESVNQX1BJWF9GSUVMRCB8fAorCSAgICBwaXgtPmNvbG9yc3BhY2UgICE9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0pCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc29sb19zZXRfZm10X2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHNvbG9fZmlsZWhhbmRsZSAqZmggPSBwcml2OworCisJaWYgKHZpZGVvYnVmX3F1ZXVlX2lzX2J1c3koJmZoLT52aWRxKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIEZvciByaWdodCBub3csIGlmIGl0IGRvZXNuJ3QgbWF0Y2ggb3VyIHJ1bm5pbmcgY29uZmlnLAorCSAqIHRoZW4gZmFpbCAqLworCXJldHVybiBzb2xvX3RyeV9mbXRfY2FwKGZpbGUsIHByaXYsIGYpOworfQorCitzdGF0aWMgaW50IHNvbG9fZ2V0X2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBzb2xvX2ZpbGVoYW5kbGUgKmZoID0gcHJpdjsKKwlzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiA9IGZoLT5zb2xvX2RldjsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKworCXBpeC0+d2lkdGggPSBzb2xvX2Rldi0+dmlkZW9faHNpemU7CisJcGl4LT5oZWlnaHQgPSBzb2xvX3ZsaW5lcyhzb2xvX2Rldik7CisJcGl4LT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9VWVZZOworCXBpeC0+ZmllbGQgPSBTT0xPX0RJU1BfUElYX0ZJRUxEOworCXBpeC0+c2l6ZWltYWdlID0gc29sb19pbWFnZV9zaXplKHNvbG9fZGV2KTsKKwlwaXgtPmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOworCXBpeC0+Ynl0ZXNwZXJsaW5lID0gc29sb19ieXRlc3BlcmxpbmUoc29sb19kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc29sb19yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCAKKwkJCXN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpyZXEpCit7CisJc3RydWN0IHNvbG9fZmlsZWhhbmRsZSAqZmggPSBwcml2OworCisJcmV0dXJuIHZpZGVvYnVmX3JlcWJ1ZnMoJmZoLT52aWRxLCByZXEpOworfQorCitzdGF0aWMgaW50IHNvbG9fcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBzb2xvX2ZpbGVoYW5kbGUgKmZoID0gcHJpdjsKKworCXJldHVybiB2aWRlb2J1Zl9xdWVyeWJ1ZigmZmgtPnZpZHEsIGJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgc29sb19xYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc29sb19maWxlaGFuZGxlICpmaCA9IHByaXY7CisKKwlyZXR1cm4gdmlkZW9idWZfcWJ1ZigmZmgtPnZpZHEsIGJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgc29sb19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCit7CisJc3RydWN0IHNvbG9fZmlsZWhhbmRsZSAqZmggPSBwcml2OworCisJcmV0dXJuIHZpZGVvYnVmX2RxYnVmKCZmaC0+dmlkcSwgYnVmLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Cit9CisKK3N0YXRpYyBpbnQgc29sb19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCit7CisJc3RydWN0IHNvbG9fZmlsZWhhbmRsZSAqZmggPSBwcml2OworCisJaWYgKGkgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbigmZmgtPnZpZHEpOworfQorCitzdGF0aWMgaW50IHNvbG9fc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKK3sKKwlzdHJ1Y3Qgc29sb19maWxlaGFuZGxlICpmaCA9IHByaXY7CisKKwlpZiAoaSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9mZigmZmgtPnZpZHEpOworfQorCitzdGF0aWMgaW50IHNvbG9fc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICppKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgdTMyIHNvbG9fbW90aW9uX2N0cmxzW10gPSB7CisJVjRMMl9DSURfTU9USU9OX1RSQUNFLAorCTAKK307CisKK3N0YXRpYyBjb25zdCB1MzIgKnNvbG9fY3RybF9jbGFzc2VzW10gPSB7CisJc29sb19tb3Rpb25fY3RybHMsCisJTlVMTAorfTsKKworc3RhdGljIGludCBzb2xvX2Rpc3BfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgICAgIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCit7CisJcWMtPmlkID0gdjRsMl9jdHJsX25leHQoc29sb19jdHJsX2NsYXNzZXMsIHFjLT5pZCk7CisJaWYgKCFxYy0+aWQpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChxYy0+aWQpIHsKKyNpZmRlZiBQUklWQVRFX0NJRFMKKwljYXNlIFY0TDJfQ0lEX01PVElPTl9UUkFDRToKKwkJcWMtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOOworCQlxYy0+bWluaW11bSA9IDA7CisJCXFjLT5tYXhpbXVtID0gcWMtPnN0ZXAgPSAxOworCQlxYy0+ZGVmYXVsdF92YWx1ZSA9IDA7CisJCXN0cmxjcHkocWMtPm5hbWUsICJNb3Rpb24gRGV0ZWN0aW9uIFRyYWNlIiwgc2l6ZW9mKHFjLT5uYW1lKSk7CisJCXJldHVybiAwOworI2Vsc2UKKwljYXNlIFY0TDJfQ0lEX01PVElPTl9UUkFDRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAwKTsKKyNlbmRpZgorCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBzb2xvX2Rpc3BfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IHNvbG9fZmlsZWhhbmRsZSAqZmggPSBwcml2OworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gZmgtPnNvbG9fZGV2OworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfTU9USU9OX1RSQUNFOgorCQljdHJsLT52YWx1ZSA9IHNvbG9fcmVnX3JlYWQoc29sb19kZXYsIFNPTE9fVklfTU9USU9OX0JBUikKKwkJCT8gMSA6IDA7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBzb2xvX2Rpc3Bfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IHNvbG9fZmlsZWhhbmRsZSAqZmggPSBwcml2OworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gZmgtPnNvbG9fZGV2OworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfTU9USU9OX1RSQUNFOgorCQlpZiAoY3RybC0+dmFsdWUpIHsKKwkJCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZJX01PVElPTl9CT1JERVIsCisJCQkJCVNPTE9fVklfTU9USU9OX1lfQUREIHwKKwkJCQkJU09MT19WSV9NT1RJT05fWV9WQUxVRSgweDIwKSB8CisJCQkJCVNPTE9fVklfTU9USU9OX0NCX1ZBTFVFKDB4MTApIHwKKwkJCQkJU09MT19WSV9NT1RJT05fQ1JfVkFMVUUoMHgxMCkpOworCQkJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVklfTU9USU9OX0JBUiwKKwkJCQkJU09MT19WSV9NT1RJT05fQ1JfQUREIHwKKwkJCQkJU09MT19WSV9NT1RJT05fWV9WQUxVRSgweDEwKSB8CisJCQkJCVNPTE9fVklfTU9USU9OX0NCX1ZBTFVFKDB4ODApIHwKKwkJCQkJU09MT19WSV9NT1RJT05fQ1JfVkFMVUUoMHgxMCkpOworCQl9IGVsc2UgeworCQkJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVklfTU9USU9OX0JPUkRFUiwgMCk7CisJCQlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WSV9NT1RJT05fQkFSLCAwKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgc29sb192NGwyX2ZvcHMgPSB7CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJCT0gc29sb192NGwyX29wZW4sCisJLnJlbGVhc2UJCT0gc29sb192NGwyX3JlbGVhc2UsCisJLnJlYWQJCQk9IHNvbG9fdjRsMl9yZWFkLAorCS5wb2xsCQkJPSBzb2xvX3Y0bDJfcG9sbCwKKwkubW1hcAkJCT0gc29sb192NGwyX21tYXAsCisJLmlvY3RsCQkJPSB2aWRlb19pb2N0bDIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHNvbG9fdjRsMl9pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcAkJPSBzb2xvX3F1ZXJ5Y2FwLAorCS52aWRpb2Nfc19zdGQJCQk9IHNvbG9fc19zdGQsCisJLyogSW5wdXQgY2FsbGJhY2tzICovCisJLnZpZGlvY19lbnVtX2lucHV0CQk9IHNvbG9fZW51bV9pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQJCQk9IHNvbG9fc2V0X2lucHV0LAorCS52aWRpb2NfZ19pbnB1dAkJCT0gc29sb19nZXRfaW5wdXQsCisJLyogVmlkZW8gY2FwdHVyZSBmb3JtYXQgY2FsbGJhY2tzICovCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwCT0gc29sb19lbnVtX2ZtdF9jYXAsCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAJCT0gc29sb190cnlfZm10X2NhcCwKKwkudmlkaW9jX3NfZm10X3ZpZF9jYXAJCT0gc29sb19zZXRfZm10X2NhcCwKKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAJCT0gc29sb19nZXRfZm10X2NhcCwKKwkvKiBTdHJlYW1pbmcgSS9PICovCisJLnZpZGlvY19yZXFidWZzCQkJPSBzb2xvX3JlcWJ1ZnMsCisJLnZpZGlvY19xdWVyeWJ1ZgkJPSBzb2xvX3F1ZXJ5YnVmLAorCS52aWRpb2NfcWJ1ZgkJCT0gc29sb19xYnVmLAorCS52aWRpb2NfZHFidWYJCQk9IHNvbG9fZHFidWYsCisJLnZpZGlvY19zdHJlYW1vbgkJPSBzb2xvX3N0cmVhbW9uLAorICAgICAgICAudmlkaW9jX3N0cmVhbW9mZgkJPSBzb2xvX3N0cmVhbW9mZiwKKwkvKiBDb250cm9scyAqLworCS52aWRpb2NfcXVlcnljdHJsCQk9IHNvbG9fZGlzcF9xdWVyeWN0cmwsCisgICAgICAgIC52aWRpb2NfZ19jdHJsCQkJPSBzb2xvX2Rpc3BfZ19jdHJsLAorICAgICAgICAudmlkaW9jX3NfY3RybAkJCT0gc29sb19kaXNwX3NfY3RybCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHNvbG9fdjRsMl90ZW1wbGF0ZSA9IHsKKwkubmFtZQkJCT0gU09MTzYwMTBfTkFNRSwKKwkuZm9wcwkJCT0gJnNvbG9fdjRsMl9mb3BzLAorCS5pb2N0bF9vcHMJCT0gJnNvbG9fdjRsMl9pb2N0bF9vcHMsCisJLm1pbm9yCQkJPSAtMSwKKwkucmVsZWFzZQkJPSB2aWRlb19kZXZpY2VfcmVsZWFzZSwKKworCS50dm5vcm1zCQk9IFY0TDJfU1REX05UU0NfTSB8IFY0TDJfU1REX1BBTF9NLAorCS5jdXJyZW50X25vcm0JCT0gVjRMMl9TVERfTlRTQ19NLAorfTsKKworaW50IHNvbG9fdjRsMl9pbml0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCWludCByZXQ7CisJaW50IGk7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzb2xvX2Rldi0+ZGlzcF90aHJlYWRfd2FpdCk7CisKKwlzb2xvX2Rldi0+dmZkID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKCFzb2xvX2Rldi0+dmZkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCSpzb2xvX2Rldi0+dmZkID0gc29sb192NGwyX3RlbXBsYXRlOworCXNvbG9fZGV2LT52ZmQtPnBhcmVudCA9ICZzb2xvX2Rldi0+cGRldi0+ZGV2OworCisJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHNvbG9fZGV2LT52ZmQsIFZGTF9UWVBFX0dSQUJCRVIsIHZpZGVvX25yKTsKKwlpZiAocmV0IDwgMCkgeworCQl2aWRlb19kZXZpY2VfcmVsZWFzZShzb2xvX2Rldi0+dmZkKTsKKwkJc29sb19kZXYtPnZmZCA9IE5VTEw7CisJCXJldHVybiByZXQ7CisJfQorCisJdmlkZW9fc2V0X2RydmRhdGEoc29sb19kZXYtPnZmZCwgc29sb19kZXYpOworCisJc25wcmludGYoc29sb19kZXYtPnZmZC0+bmFtZSwgc2l6ZW9mKHNvbG9fZGV2LT52ZmQtPm5hbWUpLCAiJXMgKCVpKSIsCisJCSBTT0xPNjAxMF9OQU1FLCBzb2xvX2Rldi0+dmZkLT5udW0pOworCisJaWYgKHZpZGVvX25yID49IDApCisJCXZpZGVvX25yKys7CisKKwlkZXZfaW5mbygmc29sb19kZXYtPnBkZXYtPmRldiwgIkRpc3BsYXkgYXMgL2Rldi92aWRlbyVkIHdpdGggIgorCQkgIiVkIGlucHV0cyAoJWQgZXh0ZW5kZWQpXG4iLCBzb2xvX2Rldi0+dmZkLT5udW0sCisJCSBzb2xvX2Rldi0+bnJfY2hhbnMsIHNvbG9fZGV2LT5ucl9leHQpOworCisJLyogQ3ljbGUgYWxsIHRoZSBjaGFubmVscyBhbmQgY2xlYXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc29sb19kZXYtPm5yX2NoYW5zOyBpKyspIHsKKwkJc29sb192NGwyX3NldF9jaChzb2xvX2RldiwgaSk7CisJCXdoaWxlIChlcmFzZV9vZmYoc29sb19kZXYpKQorCQkJOy8vIERvIG5vdGhpbmcKKwl9CisKKwkvKiBTZXQgdGhlIGRlZmF1bHQgZGlzcGxheSBjaGFubmVsICovCisJc29sb192NGwyX3NldF9jaChzb2xvX2RldiwgMCk7CisJd2hpbGUgKGVyYXNlX29mZihzb2xvX2RldikpCisJCTsvLyBEbyBub3RoaW5nCisKKwlzb2xvNjAxMF9pcnFfb24oc29sb19kZXYsIFNPTE9fSVJRX1ZJREVPX0lOKTsKKworCXJldHVybiAwOworfQorCit2b2lkIHNvbG9fdjRsMl9leGl0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCXNvbG82MDEwX2lycV9vZmYoc29sb19kZXYsIFNPTE9fSVJRX1ZJREVPX0lOKTsKKwlpZiAoc29sb19kZXYtPnZmZCkgeworCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShzb2xvX2Rldi0+dmZkKTsKKwkJc29sb19kZXYtPnZmZCA9IE5VTEw7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLmggYi9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2E4ZTNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLmgKQEAgLTAsMCArMSwzMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQmx1ZWNoZXJyeSwgTExDIHd3dy5ibHVlY2hlcnJ5ZHZyLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDEwIEJlbiBDb2xsaW5zIDxiY29sbGluc0BibHVlY2hlcnJ5Lm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19TT0xPNjAxMF9ICisjZGVmaW5lIF9fU09MTzYwMTBfSAorCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2Lmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtY29yZS5oPgorCisjaW5jbHVkZSAic29sbzYwMTAtcmVnaXN0ZXJzLmgiCisKKyNpZm5kZWYgUENJX1ZFTkRPUl9JRF9TT0ZUTE9HSUMKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TT0ZUTE9HSUMJCTB4OTQxMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NPTE82MDEwCQkweDYwMTAKKyNlbmRpZgorCisjaWZuZGVmIFBDSV9WRU5ET1JfSURfQkxVRUNIRVJSWQorI2RlZmluZSBQQ0lfVkVORE9SX0lEX0JMVUVDSEVSUlkJMHgxQkIzCisvKiBOZXVnZW50IFNvZnRsb2dpYyA2MDEwIGJhc2VkIGNhcmRzICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVVU09MT180CQkweDQzMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVVTT0xPXzkJCTB4NDMwOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FVVNPTE9fMTYJMHg0MzEwCisvKiBDb21tZWxsIFNvZnRsb2dpYyA2MDEwIGJhc2VkIGNhcmRzICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NTVNPTE9fNAkweDRFMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01NU09MT185CTB4NEUwOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTU1TT0xPXzE2CTB4NEUxMAorI2VuZGlmIC8qIEJsdWVjaGVycnkgKi8KKworI2RlZmluZSBTT0xPNjAxMF9OQU1FCQkJInNvbG82MDEwIgorCisjZGVmaW5lIFNPTE9fTUFYX0NIQU5ORUxTCQkxNgorCisvKiBNYWtlIHN1cmUgdGhlc2UgdHdvIG1hdGNoICovCisjZGVmaW5lIFNPTE82MDEwX1ZFUlNJT04JCSIyLjAuMCIKKyNkZWZpbmUgU09MTzYwMTBfVkVSX01BSk9SCQkyCisjZGVmaW5lIFNPTE82MDEwX1ZFUl9NSU5PUgkJMAorI2RlZmluZSBTT0xPNjAxMF9WRVJfU1VCCQkwCisjZGVmaW5lIFNPTE82MDEwX1ZFUl9OVU0gXAorICAgIEtFUk5FTF9WRVJTSU9OKFNPTE82MDEwX1ZFUl9NQUpPUiwgU09MTzYwMTBfVkVSX01JTk9SLCBTT0xPNjAxMF9WRVJfU1VCKQorCisvKgorICogVGhlIFNPTE82MDEwIGFjdHVhbGx5IGhhcyA4IGkyYyBjaGFubmVscywgYnV0IHdlIG9ubHkgdXNlIDIuCisgKiAwIC0gVGVjaHdlbGwgY2hpcChzKQorICogMSAtIFNBQTcxMjgKKyAqLworI2RlZmluZSBTT0xPX0kyQ19BREFQVEVSUwkJMgorI2RlZmluZSBTT0xPX0kyQ19UVwkJCTAKKyNkZWZpbmUgU09MT19JMkNfU0FBCQkJMQorCisvKiBETUEgRW5naW5lIHNldHVwICovCisjZGVmaW5lIFNPTE9fTlJfUDJNCQkJNAorI2RlZmluZSBTT0xPX05SX1AyTV9ERVNDCQkyNTYKKyNkZWZpbmUgU09MT19QMk1fREVTQ19TSVpFCQkoU09MT19OUl9QMk1fREVTQyAqIDE2KQorLyogTVBFRyBhbmQgSlBFRyBzaGFyZSB0aGUgc2FtZSBpbnRlcnJ1cHQgYW5kIGxvY2tzIHNvIHRoZXkgbXVzdCBiZSB0b2dldGhlcgorICogaW4gdGhlIHNhbWUgZG1hIGNoYW5uZWwuICovCisjZGVmaW5lIFNPTE9fUDJNX0RNQV9JRF9NUDRFCQkwCisjZGVmaW5lIFNPTE9fUDJNX0RNQV9JRF9KUEVHCQkwCisjZGVmaW5lIFNPTE9fUDJNX0RNQV9JRF9NUDRECQkxCisjZGVmaW5lIFNPTE9fUDJNX0RNQV9JRF9HNzIzRAkJMQorI2RlZmluZSBTT0xPX1AyTV9ETUFfSURfRElTUAkJMgorI2RlZmluZSBTT0xPX1AyTV9ETUFfSURfT1NHCQkyCisjZGVmaW5lIFNPTE9fUDJNX0RNQV9JRF9HNzIzRQkJMworI2RlZmluZSBTT0xPX1AyTV9ETUFfSURfVklOCQkzCisKKy8qIEVuY29kZXIgc3RhbmRhcmQgbW9kZXMgKi8KKyNkZWZpbmUgU09MT19FTkNfTU9ERV9DSUYJCTIKKyNkZWZpbmUgU09MT19FTkNfTU9ERV9IRDEJCTEKKyNkZWZpbmUgU09MT19FTkNfTU9ERV9EMQkJOQorCisjZGVmaW5lIFNPTE9fREVGQVVMVF9HT1AJCTMwCisjZGVmaW5lIFNPTE9fREVGQVVMVF9RUAkJCTMKKworLyogVGhlcmUgaXMgOE1CIG1lbW9yeSBhdmFpbGFibGUgZm9yIHNvbG8gdG8gYnVmZmVyIE1QRUc0IGZyYW1lcy4KKyAqIFRoaXMgZ2l2ZXMgdXMgNTEyICogMTZrYnl0ZSBxdWV1ZXMuICovCisjZGVmaW5lIFNPTE9fTlJfUklOR19CVUZTCQk1MTIKKworI2RlZmluZSBTT0xPX0NMT0NLX01IWgkJCTEwOAorCisjaWZuZGVmIFY0TDJfQlVGX0ZMQUdfTU9USU9OX09OCisjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfTU9USU9OX09OCQkweDA0MDAKKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19NT1RJT05fREVURUNURUQJMHgwODAwCisjZW5kaWYKKyNpZm5kZWYgVjRMMl9DSURfTU9USU9OX0VOQUJMRQorI2RlZmluZSBQUklWQVRFX0NJRFMKKyNkZWZpbmUgVjRMMl9DSURfTU9USU9OX0VOQUJMRQkJKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSswKQorI2RlZmluZSBWNEwyX0NJRF9NT1RJT05fVEhSRVNIT0xECShWNEwyX0NJRF9QUklWQVRFX0JBU0UrMSkKKyNkZWZpbmUgVjRMMl9DSURfTU9USU9OX1RSQUNFCQkoVjRMMl9DSURfUFJJVkFURV9CQVNFKzIpCisjZW5kaWYKKworZW51bSBTT0xPX0kyQ19TVEFURSB7CisJSUlDX1NUQVRFX0lETEUsCisJSUlDX1NUQVRFX1NUQVJULAorCUlJQ19TVEFURV9SRUFELAorCUlJQ19TVEFURV9XUklURSwKKwlJSUNfU1RBVEVfU1RPUAorfTsKKworc3RydWN0IHNvbG9fcDJtX2RldiB7CisJc3RydWN0IHNlbWFwaG9yZQlzZW07CisJc3RydWN0IGNvbXBsZXRpb24JY29tcGxldGlvbjsKKwlpbnQJCQllcnJvcjsKKwl1OAkJCWRlc2NbU09MT19QMk1fREVTQ19TSVpFXTsKK307CisKKyNkZWZpbmUgT1NEX1RFWFRfTUFYCQkzMAorCitlbnVtIHNvbG9fZW5jX3R5cGVzIHsKKwlTT0xPX0VOQ19UWVBFX1NURCwKKwlTT0xPX0VOQ19UWVBFX0VYVCwKK307CisKK3N0cnVjdCBzb2xvX2VuY19kZXYgeworCXN0cnVjdCBzb2xvNjAxMF9kZXYJKnNvbG9fZGV2OworCS8qIFY0TDIgSXRlbXMgKi8KKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlCSp2ZmQ7CisJLyogR2VuZXJhbCBhY2NvdW50aW5nICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJdGhyZWFkX3dhaXQ7CisJc3BpbmxvY2tfdAkJbG9jazsKKwlhdG9taWNfdAkJcmVhZGVyczsKKwl1OAkJCWNoOworCXU4CQkJbW9kZSwgZ29wLCBxcCwgaW50ZXJsYWNlZCwgaW50ZXJ2YWw7CisJdTgJCQlyZXNldF9nb3A7CisJdTgJCQlid193ZWlnaHQ7CisJdTgJCQltb3Rpb25fZGV0ZWN0ZWQ7CisJdTE2CQkJbW90aW9uX3RocmVzaDsKKwl1MTYJCQl3aWR0aDsKKwl1MTYJCQloZWlnaHQ7CisJY2hhcgkJCW9zZF90ZXh0W09TRF9URVhUX01BWCArIDFdOworfTsKKworc3RydWN0IHNvbG9fZW5jX2J1ZiB7CisJdTgJCQl2b3A7CisJdTgJCQljaDsKKwllbnVtIHNvbG9fZW5jX3R5cGVzCXR5cGU7CisJdTMyCQkJb2ZmOworCXUzMgkJCXNpemU7CisJdTMyCQkJanBlZ19vZmY7CisJdTMyCQkJanBlZ19zaXplOworCXN0cnVjdCB0aW1ldmFsCQl0czsKK307CisKKy8qIFRoZSBTT0xPNjAxMCBQQ0kgRGV2aWNlICovCitzdHJ1Y3Qgc29sbzYwMTBfZGV2IHsKKwkvKiBHZW5lcmFsIHN0dWZmICovCisJc3RydWN0IHBjaV9kZXYJCSpwZGV2OworCXU4IF9faW9tZW0JCSpyZWdfYmFzZTsKKwlpbnQJCQlucl9jaGFuczsKKwlpbnQJCQlucl9leHQ7CisJdTMyCQkJaXJxX21hc2s7CisJdTMyCQkJbW90aW9uX21hc2s7CisJc3BpbmxvY2tfdAkJcmVnX2lvX2xvY2s7CisKKwkvKiB0dzI4eHggYWNjb3VudGluZyAqLworCXU4CQkJdHcyODY1LCB0dzI4NjQsIHR3MjgxNTsKKwl1OAkJCXR3MjhfY250OworCisJLyogaTJjIHJlbGF0ZWQgaXRlbXMgKi8KKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIJaTJjX2FkYXBbU09MT19JMkNfQURBUFRFUlNdOworCWVudW0gU09MT19JMkNfU1RBVEUJaTJjX3N0YXRlOworCXN0cnVjdCBzZW1hcGhvcmUJaTJjX3NlbTsKKwlpbnQJCQlpMmNfaWQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QJaTJjX3dhaXQ7CisJc3RydWN0IGkyY19tc2cJCSppMmNfbXNnOworCXVuc2lnbmVkIGludAkJaTJjX21zZ19udW07CisJdW5zaWduZWQgaW50CQlpMmNfbXNnX3B0cjsKKworCS8qIFAyTSBETUEgRW5naW5lICovCisJc3RydWN0IHNvbG9fcDJtX2RldglwMm1fZGV2W1NPTE9fTlJfUDJNXTsKKworCS8qIFY0TDIgRGlzcGxheSBpdGVtcyAqLworCXN0cnVjdCB2aWRlb19kZXZpY2UJKnZmZDsKKwl1bnNpZ25lZCBpbnQJCWVyYXNpbmc7CisJdW5zaWduZWQgaW50CQlmcmFtZV9ibGFuazsKKwl1OAkJCWN1cl9kaXNwX2NoOworCXdhaXRfcXVldWVfaGVhZF90CWRpc3BfdGhyZWFkX3dhaXQ7CisKKwkvKiBWNEwyIEVuY29kZXIgaXRlbXMgKi8KKwlzdHJ1Y3Qgc29sb19lbmNfZGV2CSp2NGwyX2VuY1tTT0xPX01BWF9DSEFOTkVMU107CisJdTE2CQkJZW5jX2J3X3JlbWFpbjsKKwkvKiBJRFggaW50byBodyBtcDQgZW5jb2RlciAqLworCXU4CQkJZW5jX2lkeDsKKwkvKiBPdXIgc29mdHdhcmUgcmluZyBvZiBlbmMgYnVmIHJlZmVyZW5jZXMgKi8KKwl1MTYJCQllbmNfd3JfaWR4OworCXN0cnVjdCBzb2xvX2VuY19idWYJZW5jX2J1ZltTT0xPX05SX1JJTkdfQlVGU107CisKKwkvKiBDdXJyZW50IHZpZGVvIHNldHRpbmdzICovCisJdTMyIAkJCXZpZGVvX3R5cGU7CisJdTE2CQkJdmlkZW9faHNpemUsIHZpZGVvX3ZzaXplOworCXUxNgkJCXZvdXRfaHN0YXJ0LCB2b3V0X3ZzdGFydDsKKwl1MTYJCQl2aW5faHN0YXJ0LCB2aW5fdnN0YXJ0OworCXU4CQkJZnBzOworCisJLyogQXVkaW8gY29tcG9uZW50cyAqLworCXN0cnVjdCBzbmRfY2FyZAkJKnNuZF9jYXJkOworCXN0cnVjdCBzbmRfcGNtCQkqc25kX3BjbTsKKwlhdG9taWNfdAkJc25kX3VzZXJzOworCWludAkJCWc3MjNfaHdfaWR4OworfTsKKworc3RhdGljIGlubGluZSB1MzIgc29sb19yZWdfcmVhZChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgaW50IHJlZykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiByZXQ7CisJdTE2IHZhbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzb2xvX2Rldi0+cmVnX2lvX2xvY2ssIGZsYWdzKTsKKworCXJldCA9IHJlYWRsKHNvbG9fZGV2LT5yZWdfYmFzZSArIHJlZyk7CisJcm1iKCk7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoc29sb19kZXYtPnBkZXYsIFBDSV9TVEFUVVMsICZ2YWwpOworCXJtYigpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc29sb19kZXYtPnJlZ19pb19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc29sb19yZWdfd3JpdGUoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIGludCByZWcsCisJCQkJICAgICAgdTMyIGRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgdmFsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNvbG9fZGV2LT5yZWdfaW9fbG9jaywgZmxhZ3MpOworCisJd3JpdGVsKGRhdGEsIHNvbG9fZGV2LT5yZWdfYmFzZSArIHJlZyk7CisJd21iKCk7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoc29sb19kZXYtPnBkZXYsIFBDSV9TVEFUVVMsICZ2YWwpOworCXJtYigpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc29sb19kZXYtPnJlZ19pb19sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgc29sbzYwMTBfaXJxX29uKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCB1MzIgbWFzayk7Cit2b2lkIHNvbG82MDEwX2lycV9vZmYoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHUzMiBtYXNrKTsKKworLyogSW5pdC9leGl0IHJvdXRlaW5lcyBmb3Igc3Vic3lzdGVtcyAqLworaW50IHNvbG9fZGlzcF9pbml0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KTsKK3ZvaWQgc29sb19kaXNwX2V4aXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpOworCitpbnQgc29sb19ncGlvX2luaXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpOwordm9pZCBzb2xvX2dwaW9fZXhpdChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2Rldik7CisKK2ludCBzb2xvX2kyY19pbml0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KTsKK3ZvaWQgc29sb19pMmNfZXhpdChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2Rldik7CisKK2ludCBzb2xvX3AybV9pbml0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KTsKK3ZvaWQgc29sb19wMm1fZXhpdChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2Rldik7CisKK2ludCBzb2xvX3Y0bDJfaW5pdChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2Rldik7Cit2b2lkIHNvbG9fdjRsMl9leGl0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KTsKKworaW50IHNvbG9fZW5jX2luaXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpOwordm9pZCBzb2xvX2VuY19leGl0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KTsKKworaW50IHNvbG9fZW5jX3Y0bDJfaW5pdChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2Rldik7Cit2b2lkIHNvbG9fZW5jX3Y0bDJfZXhpdChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2Rldik7CisKK2ludCBzb2xvX2c3MjNfaW5pdChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2Rldik7Cit2b2lkIHNvbG9fZzcyM19leGl0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KTsKKworLyogSVNSJ3MgKi8KK2ludCBzb2xvX2kyY19pc3Ioc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpOwordm9pZCBzb2xvX3AybV9pc3Ioc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIGludCBpZCk7Cit2b2lkIHNvbG9fcDJtX2Vycm9yX2lzcihzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgdTMyIHN0YXR1cyk7Cit2b2lkIHNvbG9fZW5jX3Y0bDJfaXNyKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KTsKK3ZvaWQgc29sb19nNzIzX2lzcihzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2Rldik7Cit2b2lkIHNvbG9fbW90aW9uX2lzcihzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2Rldik7Cit2b2lkIHNvbG9fdmlkZW9faW5faXNyKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KTsKKworLyogaTJjIHJlYWQvd3JpdGUgKi8KK3U4IHNvbG9faTJjX3JlYWRieXRlKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCBpbnQgaWQsIHU4IGFkZHIsIHU4IG9mZik7Cit2b2lkIHNvbG9faTJjX3dyaXRlYnl0ZShzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgaW50IGlkLCB1OCBhZGRyLCB1OCBvZmYsCisJCQl1OCBkYXRhKTsKKworLyogUDJNIERNQSAqLworaW50IHNvbG9fcDJtX2RtYV90KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCB1OCBpZCwgaW50IHdyLAorCQkgICBkbWFfYWRkcl90IGRtYV9hZGRyLCB1MzIgZXh0X2FkZHIsIHUzMiBzaXplKTsKK2ludCBzb2xvX3AybV9kbWEoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHU4IGlkLCBpbnQgd3IsCisJCSB2b2lkICpzeXNfYWRkciwgdTMyIGV4dF9hZGRyLCB1MzIgc2l6ZSk7CisKKy8qIFNldCB0aGUgdGhyZXNob2xkIGZvciBtb3Rpb24gZGV0ZWN0aW9uICovCit2b2lkIHNvbG9fc2V0X21vdGlvbl90aHJlc2hvbGQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHU4IGNoLCB1MTYgdmFsKTsKKyNkZWZpbmUgU09MT19ERUZfTU9UX1RIUkVTSAkJMHgwMzAwCisKKy8qIFdyaXRlIHRleHQgb24gT1NEICovCitpbnQgc29sb19vc2RfcHJpbnQoc3RydWN0IHNvbG9fZW5jX2RldiAqc29sb19lbmMpOworCisjZW5kaWYgLyogX19TT0xPNjAxMF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTJmZmVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvS2NvbmZpZwpAQCAtMCwwICsxLDQwIEBACisKK21lbnVjb25maWcgU1BFQ1RSQQorCXRyaXN0YXRlICJEZW5hbGkgU3BlY3RyYSBGbGFzaCBUcmFuc2xhdGlvbiBMYXllciIKKwlkZXBlbmRzIG9uIEJMT0NLCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgRW5hYmxlIHRoZSBGVEwgcHNldWRvLWZpbGVzeXN0ZW0gdXNlZCB3aXRoIHRoZSBOQU5EIEZsYXNoCisJICBjb250cm9sbGVyIG9uIEludGVsIE1vb3Jlc3Rvd24gUGxhdGZvcm0gdG8gcHJldGVuZCB0byBiZSBhIGRpc2sKKworY2hvaWNlCisJcHJvbXB0ICJDb21waWxlIGZvciIKKwlkZXBlbmRzIG9uIFNQRUNUUkEKKwlkZWZhdWx0IFNQRUNUUkFfTVJTVF9IVworCitjb25maWcgU1BFQ1RSQV9NUlNUX0hXCisJYm9vbCAiTW9vcmVzdG93biBoYXJkd2FyZSBtb2RlIgorCWhlbHAKKwkgIERyaXZlciBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgTW9vcmVzdG93biBoYXJkd2FyZSdzIHJlZ2lzdGVyIGludGVyZmFjZS4KKwkgIGluIERNQSBtb2RlLgorCitjb25maWcgU1BFQ1RSQV9NVEQKKwlib29sICJMaW51eCBNVEQgbW9kZSIKKwlkZXBlbmRzIG9uIE1URAorCWhlbHAKKwkgIERyaXZlciBjb21tdW5pY2F0ZXMgd2l0aCB0aGUga2VybmVsIE1URCBzdWJzeXN0ZW0gaW5zdGVhZCBvZiBpdHMgb3duCisJICBidWlsdC1pbiBoYXJkd2FyZSBkcml2ZXIuCisKK2NvbmZpZyBTUEVDVFJBX0VNVQorCWJvb2wgIlJBTSBlbXVsYXRvciB0ZXN0aW5nIgorCWhlbHAKKwkgIERyaXZlciBlbXVsYXRlcyBGbGFzaCBvbiBhIFJBTSBidWZmZXIgYW5kIC8gb3IgZGlzayBmaWxlLiAgVXNlZnVsIHRvIHRlc3QgdGhlIGJlaGF2aW9yIG9mIEZUTCBsYXllci4KKworZW5kY2hvaWNlCisKK2NvbmZpZyBTUEVDVFJBX01SU1RfSFdfRE1BCisgICAgICAgYm9vbAorICAgICAgIGRlZmF1bHQgbgorICAgICAgIGRlcGVuZHMgb24gU1BFQ1RSQV9NUlNUX0hXCisgICAgICAgaGVscAorICAgICAgICAgVXNlIERNQSBmb3IgbmF0aXZlIGhhcmR3YXJlIGludGVyZmFjZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc3N2RmYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL01ha2VmaWxlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgTWFrZWZpbGUgb2YgSW50ZWwgTW9vcmVzdG93biBOQU5EIGNvbnRyb2xsZXIgZHJpdmVyCisjCisKK29iai0kKENPTkZJR19TUEVDVFJBKSArPSBzcGVjdHJhLm8KK3NwZWN0cmEteSA6PSBmZnNwb3J0Lm8gZmxhc2gubyBsbGQubworc3BlY3RyYS0kKENPTkZJR19TUEVDVFJBX01SU1RfSFcpICs9IGxsZF9uYW5kLm8gCitzcGVjdHJhLSQoQ09ORklHX1NQRUNUUkFfTVJTVF9IV19ETUEpICs9IGxsZF9jZG1hLm8KK3NwZWN0cmEtJChDT05GSUdfU1BFQ1RSQV9FTVUpICs9IGxsZF9lbXUubworc3BlY3RyYS0kKENPTkZJR19TUEVDVFJBX01URCkgKz0gbGxkX210ZC5vCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL1JFQURNRSBiL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2JhNTU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvUkVBRE1FCkBAIC0wLDAgKzEsMjkgQEAKK1RoaXMgaXMgYSBkcml2ZXIgZm9yIE5BTkQgY29udHJvbGxlciBvZiBJbnRlbCBNb29yZXN0b3duIHBsYXRmb3JtLgorCitUaGlzIGRyaXZlciBpcyBhIHN0YW5kYWxvbmUgbGludXggYmxvY2sgZGV2aWNlIGRyaXZlciwgaXQgYWN0cyBhcyBpZiBpdCdzIGEgbm9ybWFsIGhhcmQgZGlzay4KK0l0IGluY2x1ZGVzIHRocmVlIGxheWVyOgorCWJsb2NrIGxheWVyIGludGVyZmFjZSAtIGZpbGUgZmZzcG9ydC5jCisJRmxhc2ggVHJhbnNsYXRpb24gTGF5ZXIgKEZUTCkgLSBmaWxlIGZsYXNoLmMgKGltcGxlbWVudCB0aGUgTkFORCBmbGFzaCBUcmFuc2xhdGlvbiBMYXllciwgaW5jbHVkcyBhZGRyZXNzIG1hcHBpbmcsIGdhcmJhZ2UgY29sbGVjdGlvbiwgd2Vhci1sZXZlbGluZyBhbmQgc28gb24pCisJTG93IGxldmVsIGxheWVyIC0gZmlsZSBsbGRfbmFuZC5jL2xsZF9jZG1hLmMvbGxkX2VtdS5jICh3aGljaCBpbXBsZW1lbnRzIGFjdHVhbCBjb250cm9sbGVyIGhhcmR3YXJlIHJlZ2lzdGVycyBhY2Nlc3MpCisKK1RoaXMgZHJpdmVyIGNhbiBiZSBidWlsZCBhcyBtb2R1bGVzIG9yIGJ1aWxkLWluLgorCitEZXBlbmRlbmN5OgorVGhpcyBkcml2ZXIgaGFzIGRlcGVuZGVuY3kgb24gSUEgRmlybXdhcmUgb2YgSW50ZWwgTW9vcmVzdG93biBwbGF0Zm9ybS4KK0l0IG5lZWQgdGhlIElBIEZpcm13YXJlIHRvIGNyZWF0ZSB0aGUgYmxvY2sgdGFibGUgZm9yIHRoZSBmaXJzdCB0aW1lLgorQW5kIHRvIHZhbGlkYXRlIHRoaXMgZHJpdmVyIGNvZGUgd2l0aG91dCBJQSBGaXJtd2FyZSwgeW91IGNhbiBjaGFuZ2UgdGhlCittYWNybyBBVVRPX0ZPUk1BVF9GTEFTSCBmcm9tIDAgdG8gMSBpbiBmaWxlIHNwZWN0cmFzd2NvbmZpZy5oLiBUaHVzIHRoZQorZHJpdmVyIHdpbGwgZXJhc2UgdGhlIHdob2xlIG5hbmQgZmxhc2ggYW5kIGNyZWF0ZSBhIG5ldyBibG9jayB0YWJsZS4KKworVE9ETzoKKwktIEVuYWJsZSBDb21tYW5kIERNQSBmZWF0dXJlIHN1cHBvcnQKKwktIGxvd2VyIHRoZSBtZW1vcnkgZm9vdHByaW50CisJLSBSZW1vdmUgbW9zdCBvZiB0aGUgdW5uZWNlc3NhcnkgZ2xvYmFsIHZhcmlhYmxlcworCS0gQ2hhbmdlIGFsbCB0aGUgdXBjYXNlIHZhcmlhYmxlIC8gZnVuY3Rpb25zIG5hbWUgdG8gbG93ZXJjYXNlCisJLSBTb21lIG90aGVyIG1pc2MgYnVncworCitQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvOgorCUdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CisKK0FuZCBDYyB0bzogR2FvIFl1bnBlbmcgPHl1bnBlbmcuZ2FvQGludGVsLmNvbT4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvZmZzZGVmcy5oIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvZmZzZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZTljZDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9mZnNkZWZzLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIE5BTkQgRmxhc2ggQ29udHJvbGxlciBEZXZpY2UgRHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEludGVsIENvcnBvcmF0aW9uIGFuZCBpdHMgc3VwcGxpZXJzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX0ZGU0RFRlNfCisjZGVmaW5lIF9GRlNERUZTXworCisjZGVmaW5lIENMRUFSIDAJCQkvKnVzZSB0aGlzIHRvIGNsZWFyIGEgZmllbGQgaW5zdGVhZCBvZiAiZmFpbCIqLworI2RlZmluZSBTRVQgICAxCQkJLyp1c2UgdGhpcyB0byBzZXQgYSBmaWVsZCBpbnN0ZWFkIG9mICJwYXNzIiovCisjZGVmaW5lIEZBSUwgMQkJCS8qZmFpbGVkIGZsYWcqLworI2RlZmluZSBQQVNTIDAJCQkvKnN1Y2Nlc3MgZmxhZyovCisjZGVmaW5lIEVSUiAtMQkJCS8qZXJyb3IgZmxhZyovCisKKyNkZWZpbmUgICBFUkFTRV9DTUQgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICBXUklURV9NQUlOX0NNRCAgICAgICAgMTEKKyNkZWZpbmUgICBSRUFEX01BSU5fQ01EICAgICAgICAgMTIKKyNkZWZpbmUgICBXUklURV9TUEFSRV9DTUQgICAgICAgMTMKKyNkZWZpbmUgICBSRUFEX1NQQVJFX0NNRCAgICAgICAgMTQKKyNkZWZpbmUgICBXUklURV9NQUlOX1NQQVJFX0NNRCAgMTUKKyNkZWZpbmUgICBSRUFEX01BSU5fU1BBUkVfQ01EICAgMTYKKyNkZWZpbmUgICBNRU1DT1BZX0NNRCAgICAgICAgICAgMTcKKyNkZWZpbmUgICBEVU1NWV9DTUQgICAgICAgICAgICAgOTkKKworI2RlZmluZSAgICAgRVZFTlRfUEFTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lICAgICBFVkVOVF9DT1JSRUNUQUJMRV9EQVRBX0VSUk9SX0ZJWEVEICAgICAgICAgMHgwMQorI2RlZmluZSAgICAgRVZFTlRfVU5DT1JSRUNUQUJMRV9EQVRBX0VSUk9SICAgICAgICAgICAgICAweDAyCisjZGVmaW5lICAgICBFVkVOVF9USU1FX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgICAgIEVWRU5UX1BST0dSQU1fRkFJTFVSRSAgICAgICAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSAgICAgRVZFTlRfRVJBU0VfRkFJTFVSRSAgICAgICAgICAgICAgICAgICAgICAgICAweDA1CisjZGVmaW5lICAgICBFVkVOVF9NRU1DT1BZX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgICAgIEVWRU5UX0ZBSUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNworCisjZGVmaW5lICAgICBFVkVOVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIKKyNkZWZpbmUgICAgIEVWRU5UX0RNQV9DTURfQ09NUCAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3NworI2RlZmluZSAgICAgRVZFTlRfRUNDX1RSQU5TQUNUSU9OX0RPTkUgICAgICAgICAgICAgICAgICAweDg4CisjZGVmaW5lICAgICBFVkVOVF9ETUFfQ01EX0ZBSUwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTkKKworI2RlZmluZSBDTURfUEFTUyAgICAgICAgMAorI2RlZmluZSBDTURfRkFJTCAgICAgICAgMQorI2RlZmluZSBDTURfQUJPUlQgICAgICAgMgorI2RlZmluZSBDTURfTk9UX0RPTkUgICAgMworCisjZW5kaWYgLyogX0ZGU0RFRlNfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9mZnNwb3J0LmMgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9mZnNwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBjNWM5NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2Zmc3BvcnQuYwpAQCAtMCwwICsxLDgyNyBAQAorLyoKKyAqIE5BTkQgRmxhc2ggQ29udHJvbGxlciBEZXZpY2UgRHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEludGVsIENvcnBvcmF0aW9uIGFuZCBpdHMgc3VwcGxpZXJzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJmZnNwb3J0LmgiCisjaW5jbHVkZSAiZmxhc2guaCIKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisvKioqKiBIZWxwZXIgZnVuY3Rpb25zIHVzZWQgZm9yIERpdiwgUmVtYWluZGVyIG9wZXJhdGlvbiBvbiB1NjQgKioqKi8KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgR0xPQl9DYWxjX1VzZWRfQml0cworKiBJbnB1dHM6ICAgICAgIFBvd2VyIG9mIDIgbnVtYmVyCisqIE91dHB1dHM6ICAgICAgTnVtYmVyIG9mIFVzZWQgQml0cworKiAgICAgICAgICAgICAgIDAsIGlmIHRoZSBhcmd1bWVudCBpcyAwCisqIERlc2NyaXB0aW9uOiAgQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgYml0cyB1c2VkIGJ5IGEgZ2l2ZW4gcG93ZXIgb2YgMiBudW1iZXIKKyogICAgICAgICAgICAgICBOdW1iZXIgY2FuIGJlIHVwdG8gMzIgYml0CisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworaW50IEdMT0JfQ2FsY19Vc2VkX0JpdHModTMyIG4pCit7CisJaW50IHRvdF9iaXRzID0gMDsKKworCWlmIChuID49IDEgPDwgMTYpIHsKKwkJbiA+Pj0gMTY7CisJCXRvdF9iaXRzICs9IDE2OworCX0KKworCWlmIChuID49IDEgPDwgOCkgeworCQluID4+PSAgODsKKwkJdG90X2JpdHMgKz0gIDg7CisJfQorCisJaWYgKG4gPj0gMSA8PCA0KSB7CisJCW4gPj49ICA0OworCQl0b3RfYml0cyArPSAgNDsKKwl9CisKKwlpZiAobiA+PSAxIDw8IDIpIHsKKwkJbiA+Pj0gIDI7CisJCXRvdF9iaXRzICs9ICAyOworCX0KKworCWlmIChuID49IDEgPDwgMSkKKwkJdG90X2JpdHMgKz0gIDE7CisKKwlyZXR1cm4gKChuID09IDApID8gKDApIDogdG90X2JpdHMpOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBHTE9CX3U2NF9EaXYKKyogSW5wdXRzOiAgICAgICBOdW1iZXIgb2YgdTY0CisqICAgICAgICAgICAgICAgQSBwb3dlciBvZiAyIG51bWJlciBhcyBEaXZpc2lvbgorKiBPdXRwdXRzOiAgICAgIFF1b3RpZW50IG9mIHRoZSBEaXZpc29yIG9wZXJhdGlvbgorKiBEZXNjcmlwdGlvbjogIEl0IGRpdmlkZXMgdGhlIGFkZHJlc3MgYnkgZGl2aXNvciBieSB1c2luZyBiaXQgc2hpZnQgb3BlcmF0aW9uCisqICAgICAgICAgICAgICAgKGVzc2VudGlhbGx5IHdpdGhvdXQgZXhwbGljaXRlbHkgdXNpbmcgIi8iKS4KKyogICAgICAgICAgICAgICBEaXZpc29yIGlzIGEgcG93ZXIgb2YgMiBudW1iZXIgYW5kIERpdmlkZWQgaXMgb2YgdTY0CisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLwordTY0IEdMT0JfdTY0X0Rpdih1NjQgYWRkciwgdTMyIGRpdmlzb3IpCit7CisJcmV0dXJuICAodTY0KShhZGRyID4+IEdMT0JfQ2FsY19Vc2VkX0JpdHMoZGl2aXNvcikpOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBHTE9CX3U2NF9SZW1haW5kZXIKKyogSW5wdXRzOiAgICAgICBOdW1iZXIgb2YgdTY0CisqICAgICAgICAgICAgICAgRGl2aXNvciBUeXBlICgxIC1QYWdlQWRkcmVzcywgMi0gQmxvY2tBZGRyZXNzKQorKiBPdXRwdXRzOiAgICAgIFJlbWFpbmRlciBvZiB0aGUgRGl2aXNpb24gb3BlcmF0aW9uCisqIERlc2NyaXB0aW9uOiAgSXQgY2FsY3VsYXRlcyB0aGUgcmVtYWluZGVyIG9mIGEgbnVtYmVyIChvZiB1NjQpIGJ5CisqICAgICAgICAgICAgICAgZGl2aXNvcihwb3dlciBvZiAyIG51bWJlciApIGJ5IHVzaW5nIGJpdCBzaGlmdGluZyBhbmQgbXVsdGlwbHkKKyogICAgICAgICAgICAgICBvcGVyYXRpb24oZXNzZW50aWFsbHkgd2l0aG91dCBleHBsaWNpdGVseSB1c2luZyAiLyIpLgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3U2NCBHTE9CX3U2NF9SZW1haW5kZXIodTY0IGFkZHIsIHUzMiBkaXZpc29yX3R5cGUpCit7CisJdTY0IHJlc3VsdCA9IDA7CisKKwlpZiAoZGl2aXNvcl90eXBlID09IDEpIHsgLyogUmVtYWluZGVyIC0tIFBhZ2UgKi8KKwkJcmVzdWx0ID0gKGFkZHIgPj4gRGV2aWNlSW5mby5uQml0c0luUGFnZURhdGFTaXplKTsKKwkJcmVzdWx0ID0gcmVzdWx0ICogRGV2aWNlSW5mby53UGFnZURhdGFTaXplOworCX0gZWxzZSBpZiAoZGl2aXNvcl90eXBlID09IDIpIHsgLyogUmVtYWluZGVyIC0tIEJsb2NrICovCisJCXJlc3VsdCA9IChhZGRyID4+IERldmljZUluZm8ubkJpdHNJbkJsb2NrRGF0YVNpemUpOworCQlyZXN1bHQgPSByZXN1bHQgKiBEZXZpY2VJbmZvLndCbG9ja0RhdGFTaXplOworCX0KKworCXJlc3VsdCA9IGFkZHIgLSByZXN1bHQ7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIE5VTV9ERVZJQ0VTICAgICAgICAgICAgIDEKKyNkZWZpbmUgUEFSVElUSU9OUyAgICAgICAgICAgICAgOAorCisjZGVmaW5lIEdMT0JfU0JEX05BTUUgICAgICAgICAgIm5kIgorI2RlZmluZSBHTE9CX1NCRF9JUlFfTlVNICAgICAgICgyOSkKKyNkZWZpbmUgR0xPQl9WRVJTSU9OCQkiZHJpdmVyIHZlcnNpb24gMjAwOTExMTAiCisKKyNkZWZpbmUgR0xPQl9TQkRfSU9DVExfR0MgICAgICAgICAgICAgICAgICAgICAgICAoMHg3NzAxKQorI2RlZmluZSBHTE9CX1NCRF9JT0NUTF9XTCAgICAgICAgICAgICAgICAgICAgICAgICgweDc3MDIpCisjZGVmaW5lIEdMT0JfU0JEX0lPQ1RMX0ZPUk1BVCAgICAgICAgICAgICAgICAgICAgKDB4NzcwMykKKyNkZWZpbmUgR0xPQl9TQkRfSU9DVExfRVJBU0VfRkxBU0ggICAgICAgICAgICAgICAoMHg3NzA0KQorI2RlZmluZSBHTE9CX1NCRF9JT0NUTF9GTFVTSF9DQUNIRSAgICAgICAgICAgICAgICgweDc3MDUpCisjZGVmaW5lIEdMT0JfU0JEX0lPQ1RMX0NPUFlfQkxLX1RBQkxFICAgICAgICAgICAgKDB4NzcwNikKKyNkZWZpbmUgR0xPQl9TQkRfSU9DVExfQ09QWV9XRUFSX0xFVkVMSU5HX1RBQkxFICAoMHg3NzA3KQorI2RlZmluZSBHTE9CX1NCRF9JT0NUTF9HRVRfTkFORF9JTkZPICAgICAgICAgICAgICgweDc3MDgpCisjZGVmaW5lIEdMT0JfU0JEX0lPQ1RMX1dSSVRFX0RBVEEgICAgICAgICAgICAgICAgKDB4NzcwOSkKKyNkZWZpbmUgR0xPQl9TQkRfSU9DVExfUkVBRF9EQVRBICAgICAgICAgICAgICAgICAoMHg3NzBBKQorCitzdGF0aWMgaW50IHJlc2VydmVkX21iID0gMDsKK21vZHVsZV9wYXJhbShyZXNlcnZlZF9tYiwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocmVzZXJ2ZWRfbWIsICJSZXNlcnZlZCBzcGFjZSBmb3IgT1MgaW1hZ2UsIGluIE1pQiAoZGVmYXVsdCAyNSBNaUIpIik7CisKK2ludCBuYW5kX2RlYnVnX2xldmVsOworbW9kdWxlX3BhcmFtKG5hbmRfZGVidWdfbGV2ZWwsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG5hbmRfZGVidWdfbGV2ZWwsICJkZWJ1ZyBsZXZlbCB2YWx1ZTogMS0zIik7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RydWN0IHNwZWN0cmFfbmFuZF9kZXYgeworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJdTY0IHNpemU7CisJdTE2IHVzZXJzOworCXNwaW5sb2NrX3QgcWxvY2s7CisJdm9pZCBfX2lvbWVtICppb2FkZHI7ICAvKiBNYXBwZWQgYWRkcmVzcyAqLworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxdWV1ZTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZDsKKwlzdHJ1Y3QgZ2VuZGlzayAqZ2Q7CisJdTggKnRtcF9idWY7Cit9OworCisKK3N0YXRpYyBpbnQgR0xPQl9TQkRfbWFqb3JudW07CisKK3N0YXRpYyBjaGFyICpHTE9CX3ZlcnNpb24gPSBHTE9CX1ZFUlNJT047CisKK3N0YXRpYyBzdHJ1Y3Qgc3BlY3RyYV9uYW5kX2RldiBuYW5kX2RldmljZVtOVU1fREVWSUNFU107CisKK3N0YXRpYyBzdHJ1Y3QgbXV0ZXggc3BlY3RyYV9sb2NrOworCitzdGF0aWMgaW50IHJlc19ibGtzX29zID0gMTsKKworc3RydWN0IHNwZWN0cmFfaW5kZW50ZnlfZGV2X3RhZyBJZGVudGlmeURldmljZURhdGE7CisKK3N0YXRpYyBpbnQgZm9yY2VfZmx1c2hfY2FjaGUodm9pZCkKK3sKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJaWYgKEVSUiA9PSBHTE9CX0ZUTF9GbHVzaF9DYWNoZSgpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbCB0byBGbHVzaCBGVEwgQ2FjaGUhXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorI2lmIENNRF9ETUEKKwkJaWYgKGdsb2JfZnRsX2V4ZWN1dGVfY21kcygpKQorCQkJcmV0dXJuIC1FSU87CisJCWVsc2UKKwkJCXJldHVybiAwOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBpb2N0bF9yd19wYWdlX2luZm8geworCXU4ICpkYXRhOworCXVuc2lnbmVkIGludCBwYWdlOworfTsKKworc3RhdGljIGludCBpb2N0bF9yZWFkX3BhZ2VfZGF0YSh1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl1OCAqYnVmOworCXN0cnVjdCBpb2N0bF9yd19wYWdlX2luZm8gaW5mbzsKKwlpbnQgcmVzdWx0ID0gUEFTUzsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmaW5mbywgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YoaW5mbykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWJ1ZiA9IGttYWxsb2MoSWRlbnRpZnlEZXZpY2VEYXRhLlBhZ2VEYXRhU2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKCFidWYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpb2N0bF9yZWFkX3BhZ2VfZGF0YTogIgorCQkgICAgICAgImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltdXRleF9sb2NrKCZzcGVjdHJhX2xvY2spOworCXJlc3VsdCA9IEdMT0JfRlRMX1BhZ2VfUmVhZChidWYsCisJCSh1NjQpaW5mby5wYWdlICogSWRlbnRpZnlEZXZpY2VEYXRhLlBhZ2VEYXRhU2l6ZSk7CisJbXV0ZXhfdW5sb2NrKCZzcGVjdHJhX2xvY2spOworCisJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilpbmZvLmRhdGEsIGJ1ZiwKKwkJCSAgIElkZW50aWZ5RGV2aWNlRGF0YS5QYWdlRGF0YVNpemUpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaW9jdGxfcmVhZF9wYWdlX2RhdGE6ICIKKwkJICAgICAgICJmYWlsZWQgdG8gY29weSB1c2VyIGRhdGFcbiIpOworCQlrZnJlZShidWYpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlrZnJlZShidWYpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgaW9jdGxfd3JpdGVfcGFnZV9kYXRhKHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXU4ICpidWY7CisJc3RydWN0IGlvY3RsX3J3X3BhZ2VfaW5mbyBpbmZvOworCWludCByZXN1bHQgPSBQQVNTOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZpbmZvLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihpbmZvKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJYnVmID0ga21hbGxvYyhJZGVudGlmeURldmljZURhdGEuUGFnZURhdGFTaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWJ1ZikgeworCQlwcmludGsoS0VSTl9FUlIgImlvY3RsX3dyaXRlX3BhZ2VfZGF0YTogIgorCQkgICAgICAgImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCAodm9pZCBfX3VzZXIgKilpbmZvLmRhdGEsCisJCQkgICBJZGVudGlmeURldmljZURhdGEuUGFnZURhdGFTaXplKSkgeworCQlwcmludGsoS0VSTl9FUlIgImlvY3RsX3dyaXRlX3BhZ2VfZGF0YTogIgorCQkgICAgICAgImZhaWxlZCB0byBjb3B5IHVzZXIgZGF0YVxuIik7CisJCWtmcmVlKGJ1Zik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCW11dGV4X2xvY2soJnNwZWN0cmFfbG9jayk7CisJcmVzdWx0ID0gR0xPQl9GVExfUGFnZV9Xcml0ZShidWYsCisJCSh1NjQpaW5mby5wYWdlICogSWRlbnRpZnlEZXZpY2VEYXRhLlBhZ2VEYXRhU2l6ZSk7CisJbXV0ZXhfdW5sb2NrKCZzcGVjdHJhX2xvY2spOworCisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKiBSZXR1cm4gaG93IG1hbnkgYmxvY2tzIHNob3VsZCBiZSByZXNlcnZlZCBmb3IgYmFkIGJsb2NrIHJlcGxhY2VtZW50ICovCitzdGF0aWMgaW50IGdldF9yZXNfYmxrX251bV9iYWRfYmxrKHZvaWQpCit7CisJcmV0dXJuIElkZW50aWZ5RGV2aWNlRGF0YS53RGF0YUJsb2NrTnVtIC8gMTA7Cit9CisKKy8qIFJldHVybiBob3cgbWFueSBibG9ja3Mgc2hvdWxkIGJlIHJlc2VydmVkIGZvciBPUyBpbWFnZSAqLworc3RhdGljIGludCBnZXRfcmVzX2Jsa19udW1fb3Modm9pZCkKK3sKKwl1MzIgcmVzX2Jsa3MsIGJsa19zaXplOworCisJYmxrX3NpemUgPSBJZGVudGlmeURldmljZURhdGEuUGFnZURhdGFTaXplICoKKwkJSWRlbnRpZnlEZXZpY2VEYXRhLlBhZ2VzUGVyQmxvY2s7CisKKwlyZXNfYmxrcyA9IChyZXNlcnZlZF9tYiAqIDEwMjQgKiAxMDI0KSAvIGJsa19zaXplOworCisJaWYgKChyZXNfYmxrcyA8IDEpIHx8IChyZXNfYmxrcyA+PSBJZGVudGlmeURldmljZURhdGEud0RhdGFCbG9ja051bSkpCisJCXJlc19ibGtzID0gMTsgLyogUmVzZXJ2ZWQgMSBibG9jayBmb3IgYmxvY2sgdGFibGUgKi8KKworCXJldHVybiByZXNfYmxrczsKK30KKworc3RhdGljIHZvaWQgU0JEX3ByZXBhcmVfZmx1c2goc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9MSU5VWF9CTE9DSzsKKwkvKiBycS0+dGltZW91dCA9IDUgKiBIWjsgKi8KKwlycS0+Y21kWzBdID0gUkVRX0xCX09QX0ZMVVNIOworfQorCisvKiBUcmFuc2ZlciBhIGZ1bGwgcmVxdWVzdC4gKi8KK3N0YXRpYyBpbnQgZG9fdHJhbnNmZXIoc3RydWN0IHNwZWN0cmFfbmFuZF9kZXYgKnRyLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxKQoreworCXU2NCBzdGFydF9hZGRyLCBhZGRyOworCXUzMiBsb2dpY2FsX3N0YXJ0X3NlY3QsIGhkX3N0YXJ0X3NlY3Q7CisJdTMyIG5zZWN0LCBoZF9zZWN0czsKKwl1MzIgcnNlY3QsIHRzZWN0ID0gMDsKKwljaGFyICpidWY7CisJdTMyIHJhdGlvID0gSWRlbnRpZnlEZXZpY2VEYXRhLlBhZ2VEYXRhU2l6ZSA+PiA5OworCisJc3RhcnRfYWRkciA9ICh1NjQpKGJsa19ycV9wb3MocmVxKSkgPDwgOTsKKwkvKiBBZGQgYSBiaWcgZW5vdWdoIG9mZnNldCB0byBwcmV2ZW50IHRoZSBPUyBJbWFnZSBmcm9tCisJKiAgYmVpbmcgYWNjZXNzZWQgb3IgZGFtYWdlZCBieSBmaWxlIHN5c3RlbSAqLworCXN0YXJ0X2FkZHIgKz0gSWRlbnRpZnlEZXZpY2VEYXRhLlBhZ2VEYXRhU2l6ZSAqCisJCQlJZGVudGlmeURldmljZURhdGEuUGFnZXNQZXJCbG9jayAqCisJCQlyZXNfYmxrc19vczsKKworCWlmIChyZXEtPmNtZF90eXBlID09IFJFUV9UWVBFX0xJTlVYX0JMT0NLICYmCisJCQlyZXEtPmNtZFswXSA9PSBSRVFfTEJfT1BfRkxVU0gpIHsKKwkJaWYgKGZvcmNlX2ZsdXNoX2NhY2hlKCkpIC8qIEZhaWwgdG8gZmx1c2ggY2FjaGUgKi8KKwkJCXJldHVybiAtRUlPOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocmVxLT5jbWRfdHlwZSAhPSBSRVFfVFlQRV9GUykKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoYmxrX3JxX3BvcyhyZXEpICsgYmxrX3JxX2N1cl9zZWN0b3JzKHJlcSkgPiBnZXRfY2FwYWNpdHkodHItPmdkKSkgeworCQlwcmludGsoS0VSTl9FUlIgIlNwZWN0cmEgZXJyb3I6IHJlcXVlc3Qgb3ZlciB0aGUgTkFORCAiCisJCQkiY2FwYWNpdHkhc2VjdG9yICVkLCBjdXJyZW50X25yX3NlY3RvcnMgJWQsICIKKwkJCSJ3aGlsZSBjYXBhY2l0eSBpcyAlZFxuIiwKKwkJCShpbnQpYmxrX3JxX3BvcyhyZXEpLAorCQkJYmxrX3JxX2N1cl9zZWN0b3JzKHJlcSksCisJCQkoaW50KWdldF9jYXBhY2l0eSh0ci0+Z2QpKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJbG9naWNhbF9zdGFydF9zZWN0ID0gc3RhcnRfYWRkciA+PiA5OworCWhkX3N0YXJ0X3NlY3QgPSBsb2dpY2FsX3N0YXJ0X3NlY3QgLyByYXRpbzsKKwlyc2VjdCA9IGxvZ2ljYWxfc3RhcnRfc2VjdCAtIGhkX3N0YXJ0X3NlY3QgKiByYXRpbzsKKworCWFkZHIgPSAodTY0KWhkX3N0YXJ0X3NlY3QgKiByYXRpbyAqIDUxMjsKKwlidWYgPSByZXEtPmJ1ZmZlcjsKKwluc2VjdCA9IGJsa19ycV9jdXJfc2VjdG9ycyhyZXEpOworCisJaWYgKHJzZWN0KQorCQl0c2VjdCA9ICAocmF0aW8gLSByc2VjdCkgPCBuc2VjdCA/IChyYXRpbyAtIHJzZWN0KSA6IG5zZWN0OworCisJc3dpdGNoIChycV9kYXRhX2RpcihyZXEpKSB7CisJY2FzZSBSRUFEOgorCQkvKiBSZWFkIHRoZSBmaXJzdCBOQU5EIHBhZ2UgKi8KKwkJaWYgKHJzZWN0KSB7CisJCQlpZiAoR0xPQl9GVExfUGFnZV9SZWFkKHRyLT50bXBfYnVmLCBhZGRyKSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgaW4gJXMsIExpbmUgJWRcbiIsCisJCQkJCV9fRklMRV9fLCBfX0xJTkVfXyk7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCQltZW1jcHkoYnVmLCB0ci0+dG1wX2J1ZiArIChyc2VjdCA8PCA5KSwgdHNlY3QgPDwgOSk7CisJCQlhZGRyICs9IElkZW50aWZ5RGV2aWNlRGF0YS5QYWdlRGF0YVNpemU7CisJCQlidWYgKz0gdHNlY3QgPDwgOTsKKwkJCW5zZWN0IC09IHRzZWN0OworCQl9CisKKwkJLyogUmVhZCB0aGUgb3RoZXIgTkFORCBwYWdlcyAqLworCQlmb3IgKGhkX3NlY3RzID0gbnNlY3QgLyByYXRpbzsgaGRfc2VjdHMgPiAwOyBoZF9zZWN0cy0tKSB7CisJCQlpZiAoR0xPQl9GVExfUGFnZV9SZWFkKGJ1ZiwgYWRkcikpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGluICVzLCBMaW5lICVkXG4iLAorCQkJCQlfX0ZJTEVfXywgX19MSU5FX18pOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQkJYWRkciArPSBJZGVudGlmeURldmljZURhdGEuUGFnZURhdGFTaXplOworCQkJYnVmICs9IElkZW50aWZ5RGV2aWNlRGF0YS5QYWdlRGF0YVNpemU7CisJCX0KKworCQkvKiBSZWFkIHRoZSBsYXN0IE5BTkQgcGFnZXMgKi8KKwkJaWYgKG5zZWN0ICUgcmF0aW8pIHsKKwkJCWlmIChHTE9CX0ZUTF9QYWdlX1JlYWQodHItPnRtcF9idWYsIGFkZHIpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBpbiAlcywgTGluZSAlZFxuIiwKKwkJCQkJX19GSUxFX18sIF9fTElORV9fKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJCW1lbWNweShidWYsIHRyLT50bXBfYnVmLCAobnNlY3QgJSByYXRpbykgPDwgOSk7CisJCX0KKyNpZiBDTURfRE1BCisJCWlmIChnbG9iX2Z0bF9leGVjdXRlX2NtZHMoKSkKKwkJCXJldHVybiAtRUlPOworCQllbHNlCisJCQlyZXR1cm4gMDsKKyNlbmRpZgorCQlyZXR1cm4gMDsKKworCWNhc2UgV1JJVEU6CisJCS8qIFdyaXRlIHRoZSBmaXJzdCBOQU5EIHBhZ2UgKi8KKwkJaWYgKHJzZWN0KSB7CisJCQlpZiAoR0xPQl9GVExfUGFnZV9SZWFkKHRyLT50bXBfYnVmLCBhZGRyKSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgaW4gJXMsIExpbmUgJWRcbiIsCisJCQkJCV9fRklMRV9fLCBfX0xJTkVfXyk7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCQltZW1jcHkodHItPnRtcF9idWYgKyAocnNlY3QgPDwgOSksIGJ1ZiwgdHNlY3QgPDwgOSk7CisJCQlpZiAoR0xPQl9GVExfUGFnZV9Xcml0ZSh0ci0+dG1wX2J1ZiwgYWRkcikpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGluICVzLCBMaW5lICVkXG4iLAorCQkJCQlfX0ZJTEVfXywgX19MSU5FX18pOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQkJYWRkciArPSBJZGVudGlmeURldmljZURhdGEuUGFnZURhdGFTaXplOworCQkJYnVmICs9IHRzZWN0IDw8IDk7CisJCQluc2VjdCAtPSB0c2VjdDsKKwkJfQorCisJCS8qIFdyaXRlIHRoZSBvdGhlciBOQU5EIHBhZ2VzICovCisJCWZvciAoaGRfc2VjdHMgPSBuc2VjdCAvIHJhdGlvOyBoZF9zZWN0cyA+IDA7IGhkX3NlY3RzLS0pIHsKKwkJCWlmIChHTE9CX0ZUTF9QYWdlX1dyaXRlKGJ1ZiwgYWRkcikpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGluICVzLCBMaW5lICVkXG4iLAorCQkJCQlfX0ZJTEVfXywgX19MSU5FX18pOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQkJYWRkciArPSBJZGVudGlmeURldmljZURhdGEuUGFnZURhdGFTaXplOworCQkJYnVmICs9IElkZW50aWZ5RGV2aWNlRGF0YS5QYWdlRGF0YVNpemU7CisJCX0KKworCQkvKiBXcml0ZSB0aGUgbGFzdCBOQU5EIHBhZ2VzICovCisJCWlmIChuc2VjdCAlIHJhdGlvKSB7CisJCQlpZiAoR0xPQl9GVExfUGFnZV9SZWFkKHRyLT50bXBfYnVmLCBhZGRyKSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgaW4gJXMsIExpbmUgJWRcbiIsCisJCQkJCV9fRklMRV9fLCBfX0xJTkVfXyk7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCQltZW1jcHkodHItPnRtcF9idWYsIGJ1ZiwgKG5zZWN0ICUgcmF0aW8pIDw8IDkpOworCQkJaWYgKEdMT0JfRlRMX1BhZ2VfV3JpdGUodHItPnRtcF9idWYsIGFkZHIpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBpbiAlcywgTGluZSAlZFxuIiwKKwkJCQkJX19GSUxFX18sIF9fTElORV9fKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJfQorI2lmIENNRF9ETUEKKwkJaWYgKGdsb2JfZnRsX2V4ZWN1dGVfY21kcygpKQorCQkJcmV0dXJuIC1FSU87CisJCWVsc2UKKwkJCXJldHVybiAwOworI2VuZGlmCisJCXJldHVybiAwOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJVbmtub3duIHJlcXVlc3QgJXVcbiIsIHJxX2RhdGFfZGlyKHJlcSkpOworCQlyZXR1cm4gLUVJTzsKKwl9Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY29waWVkIGZyb20gZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYyAqLworc3RhdGljIGludCBzcGVjdHJhX3RyYW5zX3RocmVhZCh2b2lkICphcmcpCit7CisJc3RydWN0IHNwZWN0cmFfbmFuZF9kZXYgKnRyID0gYXJnOworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpycSA9IHRyLT5xdWV1ZTsKKwlzdHJ1Y3QgcmVxdWVzdCAqcmVxID0gTlVMTDsKKworCS8qIHdlIG1pZ2h0IGdldCBpbnZvbHZlZCB3aGVuIG1lbW9yeSBnZXRzIGxvdywgc28gdXNlIFBGX01FTUFMTE9DICovCisJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTUVNQUxMT0M7CisKKwlzcGluX2xvY2tfaXJxKHJxLT5xdWV1ZV9sb2NrKTsKKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQlpbnQgcmVzOworCisJCWlmICghcmVxKSB7CisJCQlyZXEgPSBibGtfZmV0Y2hfcmVxdWVzdChycSk7CisJCQlpZiAoIXJlcSkgeworCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQkJc3Bpbl91bmxvY2tfaXJxKHJxLT5xdWV1ZV9sb2NrKTsKKwkJCQlzY2hlZHVsZSgpOworCQkJCXNwaW5fbG9ja19pcnEocnEtPnF1ZXVlX2xvY2spOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJc3Bpbl91bmxvY2tfaXJxKHJxLT5xdWV1ZV9sb2NrKTsKKworCQltdXRleF9sb2NrKCZzcGVjdHJhX2xvY2spOworCQlyZXMgPSBkb190cmFuc2Zlcih0ciwgcmVxKTsKKwkJbXV0ZXhfdW5sb2NrKCZzcGVjdHJhX2xvY2spOworCisJCXNwaW5fbG9ja19pcnEocnEtPnF1ZXVlX2xvY2spOworCisJCWlmICghX19ibGtfZW5kX3JlcXVlc3RfY3VyKHJlcSwgcmVzKSkKKwkJCXJlcSA9IE5VTEw7CisJfQorCisJaWYgKHJlcSkKKwkJX19ibGtfZW5kX3JlcXVlc3RfYWxsKHJlcSwgLUVJTyk7CisKKwlzcGluX3VubG9ja19pcnEocnEtPnF1ZXVlX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKKworLyogUmVxdWVzdCBmdW5jdGlvbiB0aGF0ICJoYW5kbGVzIGNsdXN0ZXJpbmciLiAqLworc3RhdGljIHZvaWQgR0xPQl9TQkRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcnEpCit7CisJc3RydWN0IHNwZWN0cmFfbmFuZF9kZXYgKnBkZXYgPSBycS0+cXVldWVkYXRhOworCXdha2VfdXBfcHJvY2VzcyhwZGV2LT50aHJlYWQpOworfQorCitzdGF0aWMgaW50IEdMT0JfU0JEX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQorCit7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBHTE9CX1NCRF9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCit7CisJaW50IHJldDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwltdXRleF9sb2NrKCZzcGVjdHJhX2xvY2spOworCXJldCA9IGZvcmNlX2ZsdXNoX2NhY2hlKCk7CisJbXV0ZXhfdW5sb2NrKCZzcGVjdHJhX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgR0xPQl9TQkRfZ2V0Z2VvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvKQoreworCWdlby0+aGVhZHMgPSA0OworCWdlby0+c2VjdG9ycyA9IDE2OworCWdlby0+Y3lsaW5kZXJzID0gZ2V0X2NhcGFjaXR5KGJkZXYtPmJkX2Rpc2spIC8gKDQgKiAxNik7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJImhlYWRzOiAlZCwgc2VjdG9yczogJWQsIGN5bGluZGVyczogJWRcbiIsCisJCWdlby0+aGVhZHMsIGdlby0+c2VjdG9ycywgZ2VvLT5jeWxpbmRlcnMpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBHTE9CX1NCRF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCisJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCByZXQ7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBHTE9CX1NCRF9JT0NUTF9HQzoKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkgICAgICAgIlNwZWN0cmEgSU9DVEw6IEdhcmJhZ2UgQ29sbGVjdGlvbiAiCisJCQkgICAgICAgImJlaW5nIHBlcmZvcm1lZFxuIik7CisJCWlmIChQQVNTICE9IEdMT0JfRlRMX0dhcmJhZ2VfQ29sbGVjdGlvbigpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCisJY2FzZSBHTE9CX1NCRF9JT0NUTF9XTDoKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkgICAgICAgIlNwZWN0cmEgSU9DVEw6IFN0YXRpYyBXZWFyIExldmVsaW5nICIKKwkJCSAgICAgICAiYmVpbmcgcGVyZm9ybWVkXG4iKTsKKwkJaWYgKFBBU1MgIT0gR0xPQl9GVExfV2Vhcl9MZXZlbGluZygpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCisJY2FzZSBHTE9CX1NCRF9JT0NUTF9GT1JNQVQ6CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiU3BlY3RyYSBJT0NUTDogRmxhc2ggZm9ybWF0ICIKKwkJCSAgICAgICAiYmVpbmcgcGVyZm9ybWVkXG4iKTsKKwkJaWYgKFBBU1MgIT0gR0xPQl9GVExfRmxhc2hfRm9ybWF0KCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIEdMT0JfU0JEX0lPQ1RMX0ZMVVNIX0NBQ0hFOgorCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlNwZWN0cmEgSU9DVEw6IENhY2hlIGZsdXNoICIKKwkJCSAgICAgICAiYmVpbmcgcGVyZm9ybWVkXG4iKTsKKwkJbXV0ZXhfbG9jaygmc3BlY3RyYV9sb2NrKTsKKwkJcmV0ID0gZm9yY2VfZmx1c2hfY2FjaGUoKTsKKwkJbXV0ZXhfdW5sb2NrKCZzcGVjdHJhX2xvY2spOworCQlyZXR1cm4gcmV0OworCisJY2FzZSBHTE9CX1NCRF9JT0NUTF9DT1BZX0JMS19UQUJMRToKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJTcGVjdHJhIElPQ1RMOiAiCisJCQkgICAgICAgIkNvcHkgYmxvY2sgdGFibGVcbiIpOworCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywKKwkJCWdldF9ibGtfdGFibGVfc3RhcnRfYWRkcigpLAorCQkJZ2V0X2Jsa190YWJsZV9sZW4oKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIEdMT0JfU0JEX0lPQ1RMX0NPUFlfV0VBUl9MRVZFTElOR19UQUJMRToKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJTcGVjdHJhIElPQ1RMOiAiCisJCQkgICAgICAgIkNvcHkgd2VhciBsZXZlbGluZyB0YWJsZVxuIik7CisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLAorCQkJZ2V0X3dlYXJfbGV2ZWxpbmdfdGFibGVfc3RhcnRfYWRkcigpLAorCQkJZ2V0X3dlYXJfbGV2ZWxpbmdfdGFibGVfbGVuKCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCisJY2FzZSBHTE9CX1NCRF9JT0NUTF9HRVRfTkFORF9JTkZPOgorCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlNwZWN0cmEgSU9DVEw6ICIKKwkJCSAgICAgICAiR2V0IE5BTkQgaW5mb1xuIik7CisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmSWRlbnRpZnlEZXZpY2VEYXRhLAorCQkJc2l6ZW9mKElkZW50aWZ5RGV2aWNlRGF0YSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCisJY2FzZSBHTE9CX1NCRF9JT0NUTF9XUklURV9EQVRBOgorCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlNwZWN0cmEgSU9DVEw6ICIKKwkJCSAgICAgICAiV3JpdGUgb25lIHBhZ2UgZGF0YVxuIik7CisJCXJldHVybiBpb2N0bF93cml0ZV9wYWdlX2RhdGEoYXJnKTsKKworCWNhc2UgR0xPQl9TQkRfSU9DVExfUkVBRF9EQVRBOgorCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlNwZWN0cmEgSU9DVEw6ICIKKwkJCSAgICAgICAiUmVhZCBvbmUgcGFnZSBkYXRhXG4iKTsKKwkJcmV0dXJuIGlvY3RsX3JlYWRfcGFnZV9kYXRhKGFyZyk7CisJfQorCisJcmV0dXJuIC1FTk9UVFk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgR0xPQl9TQkRfb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gR0xPQl9TQkRfb3BlbiwKKwkucmVsZWFzZSA9IEdMT0JfU0JEX3JlbGVhc2UsCisJLmxvY2tlZF9pb2N0bCA9IEdMT0JfU0JEX2lvY3RsLAorCS5nZXRnZW8gPSBHTE9CX1NCRF9nZXRnZW8sCit9OworCitzdGF0aWMgaW50IFNCRF9zZXR1cF9kZXZpY2Uoc3RydWN0IHNwZWN0cmFfbmFuZF9kZXYgKmRldiwgaW50IHdoaWNoKQoreworCWludCByZXNfYmxrczsKKwl1MzIgc2VjdHM7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCW1lbXNldChkZXYsIDAsIHNpemVvZihzdHJ1Y3Qgc3BlY3RyYV9uYW5kX2RldikpOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwgIlJlc2VydmVkICVkIGJsb2NrcyAiCisJCSJmb3IgT1MgaW1hZ2UsICVkIGJsb2NrcyBmb3IgYmFkIGJsb2NrIHJlcGxhY2VtZW50LlxuIiwKKwkJZ2V0X3Jlc19ibGtfbnVtX29zKCksCisJCWdldF9yZXNfYmxrX251bV9iYWRfYmxrKCkpOworCisJcmVzX2Jsa3MgPSBnZXRfcmVzX2Jsa19udW1fYmFkX2JsaygpICsgZ2V0X3Jlc19ibGtfbnVtX29zKCk7CisKKwlkZXYtPnNpemUgPSAodTY0KUlkZW50aWZ5RGV2aWNlRGF0YS5QYWdlRGF0YVNpemUgKgorCQlJZGVudGlmeURldmljZURhdGEuUGFnZXNQZXJCbG9jayAqCisJCShJZGVudGlmeURldmljZURhdGEud0RhdGFCbG9ja051bSAtIHJlc19ibGtzKTsKKworCXJlc19ibGtzX29zID0gZ2V0X3Jlc19ibGtfbnVtX29zKCk7CisKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5xbG9jayk7CisKKwlkZXYtPnRtcF9idWYgPSBrbWFsbG9jKElkZW50aWZ5RGV2aWNlRGF0YS5QYWdlRGF0YVNpemUsIEdGUF9BVE9NSUMpOworCWlmICghZGV2LT50bXBfYnVmKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGttYWxsb2MgbWVtb3J5IGluICVzIExpbmUgJWQsIGV4aXQuXG4iLAorCQkJX19GSUxFX18sIF9fTElORV9fKTsKKwkJZ290byBvdXRfdmZyZWU7CisJfQorCisJZGV2LT5xdWV1ZSA9IGJsa19pbml0X3F1ZXVlKEdMT0JfU0JEX3JlcXVlc3QsICZkZXYtPnFsb2NrKTsKKwlpZiAoZGV2LT5xdWV1ZSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIlNwZWN0cmE6IFJlcXVlc3QgcXVldWUgY291bGQgbm90IGJlIGluaXRpYWxpemVkLiIKKwkJCSIgQWJvcnRpbmdcbiAiKTsKKwkJZ290byBvdXRfdmZyZWU7CisJfQorCWRldi0+cXVldWUtPnF1ZXVlZGF0YSA9IGRldjsKKworCS8qIEFzIExpbnV4IGJsb2NrIGxheWVyIGRvZW5zJ3Qgc3VwcG9ydCA+NEtCIGhhcmR3YXJlIHNlY3RvciwgICovCisJLyogSGVyZSB3ZSBmb3JjZSByZXBvcnQgNTEyIGJ5dGUgaGFyZHdhcmUgc2VjdG9yIHNpemUgdG8gS2VybmVsICovCisJYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShkZXYtPnF1ZXVlLCA1MTIpOworCisJYmxrX3F1ZXVlX29yZGVyZWQoZGV2LT5xdWV1ZSwgUVVFVUVfT1JERVJFRF9EUkFJTl9GTFVTSCwKKwkJCQkJU0JEX3ByZXBhcmVfZmx1c2gpOworCisJZGV2LT50aHJlYWQgPSBrdGhyZWFkX3J1bihzcGVjdHJhX3RyYW5zX3RocmVhZCwgZGV2LCAibmFuZF90aGQiKTsKKwlpZiAoSVNfRVJSKGRldi0+dGhyZWFkKSkgeworCQlibGtfY2xlYW51cF9xdWV1ZShkZXYtPnF1ZXVlKTsKKwkJdW5yZWdpc3Rlcl9ibGtkZXYoR0xPQl9TQkRfbWFqb3JudW0sIEdMT0JfU0JEX05BTUUpOworCQlyZXR1cm4gUFRSX0VSUihkZXYtPnRocmVhZCk7CisJfQorCisJZGV2LT5nZCA9IGFsbG9jX2Rpc2soUEFSVElUSU9OUyk7CisJaWYgKCFkZXYtPmdkKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIlNwZWN0cmE6IENvdWxkIG5vdCBhbGxvY2F0ZSBkaXNrLiBBYm9ydGluZyBcbiAiKTsKKwkJZ290byBvdXRfdmZyZWU7CisJfQorCWRldi0+Z2QtPm1ham9yID0gR0xPQl9TQkRfbWFqb3JudW07CisJZGV2LT5nZC0+Zmlyc3RfbWlub3IgPSB3aGljaCAqIFBBUlRJVElPTlM7CisJZGV2LT5nZC0+Zm9wcyA9ICZHTE9CX1NCRF9vcHM7CisJZGV2LT5nZC0+cXVldWUgPSBkZXYtPnF1ZXVlOworCWRldi0+Z2QtPnByaXZhdGVfZGF0YSA9IGRldjsKKwlzbnByaW50ZihkZXYtPmdkLT5kaXNrX25hbWUsIDMyLCAiJXMlYyIsIEdMT0JfU0JEX05BTUUsIHdoaWNoICsgJ2EnKTsKKworCXNlY3RzID0gZGV2LT5zaXplID4+IDk7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwgIkNhcGFjaXR5IHNlY3RzOiAlZFxuIiwgc2VjdHMpOworCXNldF9jYXBhY2l0eShkZXYtPmdkLCBzZWN0cyk7CisKKwlhZGRfZGlzayhkZXYtPmdkKTsKKworCXJldHVybiAwOworb3V0X3ZmcmVlOgorCXJldHVybiAtRU5PTUVNOworfQorCisvKgorc3RhdGljIHNzaXplX3Qgc2hvd19uYW5kX2Jsb2NrX251bShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKKwkJKGludClJZGVudGlmeURldmljZURhdGEud0RhdGFCbG9ja051bSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbmFuZF9wYWdlc19wZXJfYmxvY2soc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsCisJCShpbnQpSWRlbnRpZnlEZXZpY2VEYXRhLlBhZ2VzUGVyQmxvY2spOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X25hbmRfcGFnZV9zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLAorCQkoaW50KUlkZW50aWZ5RGV2aWNlRGF0YS5QYWdlRGF0YVNpemUpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIobmFuZF9ibG9ja19udW0sIDA0NDQsIHNob3dfbmFuZF9ibG9ja19udW0sIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKG5hbmRfcGFnZXNfcGVyX2Jsb2NrLCAwNDQ0LCBzaG93X25hbmRfcGFnZXNfcGVyX2Jsb2NrLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihuYW5kX3BhZ2Vfc2l6ZSwgMDQ0NCwgc2hvd19uYW5kX3BhZ2Vfc2l6ZSwgTlVMTCk7CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV9zeXNmc19lbnRyeShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaWYgKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9uYW5kX2Jsb2NrX251bSkpCisJCXByaW50ayhLRVJOX0VSUiAiU3BlY3RyYTogIgorCQkJImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZW50cnkgbmFuZF9ibG9ja19udW0uXG4iKTsKKwlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX25hbmRfcGFnZXNfcGVyX2Jsb2NrKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJTcGVjdHJhOiAiCisJCSJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGVudHJ5IG5hbmRfcGFnZXNfcGVyX2Jsb2NrLlxuIik7CisJaWYgKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9uYW5kX3BhZ2Vfc2l6ZSkpCisJCXByaW50ayhLRVJOX0VSUiAiU3BlY3RyYTogIgorCQkiZmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBlbnRyeSBuYW5kX3BhZ2Vfc2l6ZS5cbiIpOworfQorKi8KKworc3RhdGljIGludCBHTE9CX1NCRF9pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwkvKiBTZXQgZGVidWcgb3V0cHV0IGxldmVsICgwfjMpIGhlcmUuIDMgaXMgbW9zdCB2ZXJib3NlICovCisJcHJpbnRrKEtFUk5fQUxFUlQgIlNwZWN0cmE6ICVzXG4iLCBHTE9CX3ZlcnNpb24pOworCisJbXV0ZXhfaW5pdCgmc3BlY3RyYV9sb2NrKTsKKworCUdMT0JfU0JEX21ham9ybnVtID0gcmVnaXN0ZXJfYmxrZGV2KDAsIEdMT0JfU0JEX05BTUUpOworCWlmIChHTE9CX1NCRF9tYWpvcm51bSA8PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGdldCB0aGUgbWFqb3IgJWQgZm9yIFNwZWN0cmEiLAorCQkgICAgICAgR0xPQl9TQkRfbWFqb3JudW0pOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWlmIChQQVNTICE9IEdMT0JfRlRMX0ZsYXNoX0luaXQoKSkgeworCQlwcmludGsoS0VSTl9FUlIgIlNwZWN0cmE6IFVuYWJsZSB0byBJbml0aWFsaXplIEZsYXNoIERldmljZS4gIgorCQkgICAgICAgIkFib3J0aW5nXG4iKTsKKwkJZ290byBvdXRfZmxhc2hfcmVnaXN0ZXI7CisJfQorCisJLyogY3JlYXRlX3N5c2ZzX2VudHJ5KCZkZXYtPmRldik7ICovCisKKwlpZiAoUEFTUyAhPSBHTE9CX0ZUTF9JZGVudGlmeURldmljZSgmSWRlbnRpZnlEZXZpY2VEYXRhKSkgeworCQlwcmludGsoS0VSTl9FUlIgIlNwZWN0cmE6IFVuYWJsZSB0byBSZWFkIEZsYXNoIERldmljZS4gIgorCQkgICAgICAgIkFib3J0aW5nXG4iKTsKKwkJZ290byBvdXRfZmxhc2hfcmVnaXN0ZXI7CisJfSBlbHNlIHsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwgIkluIEdMT0JfU0JEX2luaXQ6ICIKKwkJCSAgICAgICAiTnVtIGJsb2Nrcz0lZCwgcGFnZXNwZXJibG9jaz0lZCwgIgorCQkJICAgICAgICJwYWdlZGF0YXNpemU9JWQsIEVDQ0J5dGVzUGVyU2VjdG9yPSVkXG4iLAorCQkgICAgICAgKGludClJZGVudGlmeURldmljZURhdGEuTnVtQmxvY2tzLAorCQkgICAgICAgKGludClJZGVudGlmeURldmljZURhdGEuUGFnZXNQZXJCbG9jaywKKwkJICAgICAgIChpbnQpSWRlbnRpZnlEZXZpY2VEYXRhLlBhZ2VEYXRhU2l6ZSwKKwkJICAgICAgIChpbnQpSWRlbnRpZnlEZXZpY2VEYXRhLndFQ0NCeXRlc1BlclNlY3Rvcik7CisJfQorCisJcHJpbnRrKEtFUk5fQUxFUlQgIlNwZWN0cmE6IHNlYXJjaGluZyBibG9jayB0YWJsZSwgcGxlYXNlIHdhaXQgLi4uXG4iKTsKKwlpZiAoR0xPQl9GVExfSW5pdCgpICE9IFBBU1MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTcGVjdHJhOiBVbmFibGUgdG8gSW5pdGlhbGl6ZSBGVEwgTGF5ZXIuICIKKwkJICAgICAgICJBYm9ydGluZ1xuIik7CisJCWdvdG8gb3V0X2Z0bF9mbGFzaF9yZWdpc3RlcjsKKwl9CisJcHJpbnRrKEtFUk5fQUxFUlQgIlNwZWN0cmE6IGJsb2NrIHRhYmxlIGhhcyBiZWVuIGZvdW5kLlxuIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0RFVklDRVM7IGkrKykKKwkJaWYgKFNCRF9zZXR1cF9kZXZpY2UoJm5hbmRfZGV2aWNlW2ldLCBpKSA9PSAtRU5PTUVNKQorCQkJZ290byBvdXRfZnRsX2ZsYXNoX3JlZ2lzdGVyOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCSAgICAgICAiU3BlY3RyYTogbW9kdWxlIGxvYWRlZCB3aXRoIG1ham9yIG51bWJlciAlZFxuIiwKKwkJICAgICAgIEdMT0JfU0JEX21ham9ybnVtKTsKKworCXJldHVybiAwOworCitvdXRfZnRsX2ZsYXNoX3JlZ2lzdGVyOgorCUdMT0JfRlRMX0NhY2hlX1JlbGVhc2UoKTsKK291dF9mbGFzaF9yZWdpc3RlcjoKKwlHTE9CX0ZUTF9GbGFzaF9SZWxlYXNlKCk7CisJdW5yZWdpc3Rlcl9ibGtkZXYoR0xPQl9TQkRfbWFqb3JudW0sIEdMT0JfU0JEX05BTUUpOworCXByaW50ayhLRVJOX0VSUiAiU3BlY3RyYTogTW9kdWxlIGxvYWQgZmFpbGVkLlxuIik7CisKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IEdMT0JfU0JEX2V4aXQodm9pZCkKK3sKKwlpbnQgaTsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9ERVZJQ0VTOyBpKyspIHsKKwkJc3RydWN0IHNwZWN0cmFfbmFuZF9kZXYgKmRldiA9ICZuYW5kX2RldmljZVtpXTsKKwkJaWYgKGRldi0+Z2QpIHsKKwkJCWRlbF9nZW5kaXNrKGRldi0+Z2QpOworCQkJcHV0X2Rpc2soZGV2LT5nZCk7CisJCX0KKwkJaWYgKGRldi0+cXVldWUpCisJCQlibGtfY2xlYW51cF9xdWV1ZShkZXYtPnF1ZXVlKTsKKwkJa2ZyZWUoZGV2LT50bXBfYnVmKTsKKwl9CisKKwl1bnJlZ2lzdGVyX2Jsa2RldihHTE9CX1NCRF9tYWpvcm51bSwgR0xPQl9TQkRfTkFNRSk7CisKKwltdXRleF9sb2NrKCZzcGVjdHJhX2xvY2spOworCWZvcmNlX2ZsdXNoX2NhY2hlKCk7CisJbXV0ZXhfdW5sb2NrKCZzcGVjdHJhX2xvY2spOworCisJR0xPQl9GVExfQ2FjaGVfUmVsZWFzZSgpOworCisJR0xPQl9GVExfRmxhc2hfUmVsZWFzZSgpOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCSAgICAgICAiU3BlY3RyYSBGVEwgbW9kdWxlIChtYWpvciBudW1iZXIgJWQpIHVubG9hZGVkLlxuIiwKKwkJICAgICAgIEdMT0JfU0JEX21ham9ybnVtKTsKK30KKworbW9kdWxlX2luaXQoR0xPQl9TQkRfaW5pdCk7Cittb2R1bGVfZXhpdChHTE9CX1NCRF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2Zmc3BvcnQuaCBiL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2Zmc3BvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzVkOTBjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvZmZzcG9ydC5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBOQU5EIEZsYXNoIENvbnRyb2xsZXIgRGV2aWNlIERyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbiBhbmQgaXRzIHN1cHBsaWVycy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9GRlNQT1JUXworI2RlZmluZSBfRkZTUE9SVF8KKworI2luY2x1ZGUgImZmc2RlZnMuaCIKKworI2lmIGRlZmluZWQgX19HTlVDX18KKyNkZWZpbmUgUEFDS0VECisjZGVmaW5lIFBBQ0tFRF9HTlUgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpCisjZGVmaW5lIFVOQUxJR05FRAorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4JLyogZm9yIHN0cmNweSgpLCBzdHJpY21wKCksIGV0YyAqLworI2luY2x1ZGUgPGxpbnV4L21tLmg+CQkvKiBmb3Iga21hbGxvYygpLCBrZnJlZSgpICovCisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CS8qIHByaW50aygpICovCisjaW5jbHVkZSA8bGludXgvZnMuaD4JCS8qIGV2ZXJ5dGhpbmcuLi4gKi8KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgkvKiBlcnJvciBjb2RlcyAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CS8qIHNpemVfdCAqLworI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlICJmbGFzaC5oIgorCisjZGVmaW5lIFZFUkJPU0UgICAgMQorCisjZGVmaW5lIE5BTkRfREJHX1dBUk4gIDEKKyNkZWZpbmUgTkFORF9EQkdfREVCVUcgMgorI2RlZmluZSBOQU5EX0RCR19UUkFDRSAzCisKK2V4dGVybiBpbnQgbmFuZF9kZWJ1Z19sZXZlbDsKKworI2lmZGVmIFZFUkJPU0UKKyNkZWZpbmUgbmFuZF9kYmdfcHJpbnQobGV2ZWwsIGFyZ3MuLi4pCQkJXAorCWRvIHsJCQkJCQlcCisJCWlmIChsZXZlbCA8PSBuYW5kX2RlYnVnX2xldmVsKQkJXAorCQkJcHJpbnRrKEtFUk5fQUxFUlQgYXJncyk7CVwKKwl9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgbmFuZF9kYmdfcHJpbnQobGV2ZWwsIGFyZ3MuLi4pCisjZW5kaWYKKworI2lmZGVmIFNVUFBPUlRfQklHX0VORElBTgorI2RlZmluZSBJTlZFUlRVSU5UMTYodykgICAoKHUxNikoKCh1MTYpKHcpKSA8PCA4KSB8IFwKKwkJCSAgICh1MTYpKCh1MTYpKHcpID4+IDgpKQorCisjZGVmaW5lIElOVkVSVFVJTlQzMihkdykgICgoKHUzMikoZHcpIDw8IDI0KSB8IFwKKwkJCSAgICgoKHUzMikoZHcpIDw8IDgpICYgMHgwMGZmMDAwMCkgfCBcCisJCQkgICAoKCh1MzIpKGR3KSA+PiA4KSAmIDB4MDAwMGZmMDApIHwgXAorCQkJICAgKCh1MzIpKGR3KSA+PiAyNCkpCisjZWxzZQorI2RlZmluZSBJTlZFUlRVSU5UMTYodykgICB3CisjZGVmaW5lIElOVkVSVFVJTlQzMihkdykgIGR3CisjZW5kaWYKKworZXh0ZXJuIGludCBHTE9CX0NhbGNfVXNlZF9CaXRzKHUzMiBuKTsKK2V4dGVybiB1NjQgR0xPQl91NjRfRGl2KHU2NCBhZGRyLCB1MzIgZGl2aXNvcik7CitleHRlcm4gdTY0IEdMT0JfdTY0X1JlbWFpbmRlcih1NjQgYWRkciwgdTMyIGRpdmlzb3JfdHlwZSk7CisKKyNlbmRpZiAvKiBfRkZTUE9SVF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2ZsYXNoLmMgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9mbGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNGFhNTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9mbGFzaC5jCkBAIC0wLDAgKzEsNDczMSBAQAorLyoKKyAqIE5BTkQgRmxhc2ggQ29udHJvbGxlciBEZXZpY2UgRHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEludGVsIENvcnBvcmF0aW9uIGFuZCBpdHMgc3VwcGxpZXJzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgImZsYXNoLmgiCisjaW5jbHVkZSAiZmZzZGVmcy5oIgorI2luY2x1ZGUgImxsZC5oIgorI2luY2x1ZGUgImxsZF9uYW5kLmgiCisjaWYgQ01EX0RNQQorI2luY2x1ZGUgImxsZF9jZG1hLmgiCisjZW5kaWYKKworI2RlZmluZSBCTEtfRlJPTV9BRERSKGFkZHIpICAoKHUzMikoYWRkciA+PiBEZXZpY2VJbmZvLm5CaXRzSW5CbG9ja0RhdGFTaXplKSkKKyNkZWZpbmUgUEFHRV9GUk9NX0FERFIoYWRkciwgQmxvY2spICAoKHUxNikoKGFkZHIgLSAodTY0KUJsb2NrICogXAorCURldmljZUluZm8ud0Jsb2NrRGF0YVNpemUpID4+IERldmljZUluZm8ubkJpdHNJblBhZ2VEYXRhU2l6ZSkpCisKKyNkZWZpbmUgSVNfU1BBUkVfQkxPQ0soYmxrKSAgICAgKEJBRF9CTE9DSyAhPSAocGJ0W2Jsa10gJlwKKwlCQURfQkxPQ0spICYmIFNQQVJFX0JMT0NLID09IChwYnRbYmxrXSAmIFNQQVJFX0JMT0NLKSkKKworI2RlZmluZSBJU19EQVRBX0JMT0NLKGJsaykgICAgICAoMCA9PSAocGJ0W2Jsa10gJiBCQURfQkxPQ0spKQorCisjZGVmaW5lIElTX0RJU0NBUkRFRF9CTE9DSyhibGspIChCQURfQkxPQ0sgIT0gKHBidFtibGtdICZcCisJQkFEX0JMT0NLKSAmJiBESVNDQVJEX0JMT0NLID09IChwYnRbYmxrXSAmIERJU0NBUkRfQkxPQ0spKQorCisjZGVmaW5lIElTX0JBRF9CTE9DSyhibGspICAgICAgIChCQURfQkxPQ0sgPT0gKHBidFtibGtdICYgQkFEX0JMT0NLKSkKKworI2lmIERFQlVHX0JORFJZCit2b2lkIGRlYnVnX2JvdW5kYXJ5X2xpbmVub19lcnJvcihpbnQgY2hubCwgaW50IGxpbWl0LCBpbnQgbm8sCisJCQkJaW50IGxpbmVubywgY2hhciAqZmlsZW5hbWUpCit7CisJaWYgKGNobmwgPj0gbGltaXQpCisJCXByaW50ayhLRVJOX0VSUiAiQm91bmRhcnkgQ2hlY2sgRmFpbCB2YWx1ZSAlZCA+PSBsaW1pdCAlZCwgIgorCQkiYXQgICVzOiVkLiBPdGhlciBpbmZvOiVkLiBBYm9ydGluZy4uLlxuIiwKKwkJY2hubCwgbGltaXQsIGZpbGVuYW1lLCBsaW5lbm8sIG5vKTsKK30KKy8qIHN0YXRpYyBpbnQgZ2xvYmFsbWVtc2l6ZTsgKi8KKyNlbmRpZgorCitzdGF0aWMgdTE2IEZUTF9DYWNoZV9JZl9IaXQodTY0IGR3UGFnZUFkZHIpOworc3RhdGljIGludCBGVExfQ2FjaGVfUmVhZCh1NjQgZHdQYWdlQWRkcik7CitzdGF0aWMgdm9pZCBGVExfQ2FjaGVfUmVhZF9QYWdlKHU4ICpwRGF0YSwgdTY0IGR3UGFnZUFkZHIsCisJCQkJdTE2IGNhY2hlX2Jsayk7CitzdGF0aWMgdm9pZCBGVExfQ2FjaGVfV3JpdGVfUGFnZSh1OCAqcERhdGEsIHU2NCBkd1BhZ2VBZGRyLAorCQkJCSB1OCBjYWNoZV9ibGssIHUxNiBmbGFnKTsKK3N0YXRpYyBpbnQgRlRMX0NhY2hlX1dyaXRlKHZvaWQpOworc3RhdGljIGludCBGVExfQ2FjaGVfV3JpdGVfQmFjayh1OCAqcERhdGEsIHU2NCBibGtfYWRkcik7CitzdGF0aWMgdm9pZCBGVExfQ2FsY3VsYXRlX0xSVSh2b2lkKTsKK3N0YXRpYyB1MzIgRlRMX0dldF9CbG9ja19JbmRleCh1MzIgd0Jsb2NrTnVtKTsKKworc3RhdGljIGludCBGVExfU2VhcmNoX0Jsb2NrX1RhYmxlX0lOX0Jsb2NrKHUzMiBCVF9CbG9jaywKKwkJCQkJICAgdTggQlRfVGFnLCB1MTYgKlBhZ2UpOworc3RhdGljIGludCBGVExfUmVhZF9CbG9ja19UYWJsZSh2b2lkKTsKK3N0YXRpYyBpbnQgRlRMX1dyaXRlX0Jsb2NrX1RhYmxlKGludCB3Rm9yY2UpOworc3RhdGljIGludCBGVExfV3JpdGVfQmxvY2tfVGFibGVfRGF0YSh2b2lkKTsKK3N0YXRpYyBpbnQgRlRMX0NoZWNrX0Jsb2NrX1RhYmxlKGludCB3T2xkVGFibGUpOworc3RhdGljIGludCBGVExfU3RhdGljX1dlYXJfTGV2ZWxpbmcodm9pZCk7CitzdGF0aWMgdTMyIEZUTF9SZXBsYWNlX0Jsb2NrX1RhYmxlKHZvaWQpOworc3RhdGljIGludCBGVExfV3JpdGVfSU5fUHJvZ3Jlc3NfQmxvY2tfVGFibGVfUGFnZSh2b2lkKTsKKworc3RhdGljIHUzMiBGVExfR2V0X1BhZ2VfTnVtKHU2NCBsZW5ndGgpOworc3RhdGljIHU2NCBGVExfR2V0X1BoeXNpY2FsX0Jsb2NrX0FkZHIodTY0IGJsa19hZGRyKTsKKworc3RhdGljIHUzMiBGVExfUmVwbGFjZV9PbmVCbG9jayh1MzIgd0Jsb2NrTnVtLAorCQkJCSAgICAgIHUzMiB3UmVwbGFjZU51bSk7CitzdGF0aWMgdTMyIEZUTF9SZXBsYWNlX0xXQmxvY2sodTMyIHdCbG9ja051bSwKKwkJCQkgICAgIGludCAqcEdhcmJhZ2VDb2xsZWN0KTsKK3N0YXRpYyB1MzIgRlRMX1JlcGxhY2VfTVdCbG9jayh2b2lkKTsKK3N0YXRpYyBpbnQgRlRMX1JlcGxhY2VfQmxvY2sodTY0IGJsa19hZGRyKTsKK3N0YXRpYyBpbnQgRlRMX0FkanVzdF9SZWxhdGl2ZV9FcmFzZV9Db3VudCh1MzIgSW5kZXhfb2ZfTUFYKTsKKworc3RhdGljIGludCBGVExfRmxhc2hfRXJyb3JfSGFuZGxlKHU4ICpwRGF0YSwgdTY0IG9sZF9wYWdlX2FkZHIsIHU2NCBibGtfYWRkcik7CisKK3N0cnVjdCBkZXZpY2VfaW5mb190YWcgRGV2aWNlSW5mbzsKK3N0cnVjdCBmbGFzaF9jYWNoZV90YWcgQ2FjaGU7CitzdGF0aWMgc3RydWN0IHNwZWN0cmFfbDJfY2FjaGVfaW5mbyBjYWNoZV9sMjsKKworc3RhdGljIHU4ICpjYWNoZV9sMl9wYWdlX2J1ZjsKK3N0YXRpYyB1OCAqY2FjaGVfbDJfYmxrX2J1ZjsKKwordTggKmdfcEJsb2NrVGFibGU7Cit1OCAqZ19wV2VhckNvdW50ZXI7Cit1MTYgKmdfcFJlYWRDb3VudGVyOwordTMyICpnX3BCVEJsb2NrczsKK3N0YXRpYyB1MTYgZ193QmxvY2tUYWJsZU9mZnNldDsKK3N0YXRpYyB1MzIgZ193QmxvY2tUYWJsZUluZGV4Oworc3RhdGljIHU4IGdfY0Jsb2NrVGFibGVTdGF0dXM7CisKK3N0YXRpYyB1OCAqZ19wVGVtcEJ1ZjsKK3N0YXRpYyB1OCAqZmxhZ19jaGVja19ibGtfdGFibGU7CitzdGF0aWMgdTggKnRtcF9idWZfc2VhcmNoX2J0X2luX2Jsb2NrOworc3RhdGljIHU4ICpzcGFyZV9idWZfc2VhcmNoX2J0X2luX2Jsb2NrOworc3RhdGljIHU4ICpzcGFyZV9idWZfYnRfc2VhcmNoX2J0X2luX2Jsb2NrOworc3RhdGljIHU4ICp0bXBfYnVmMV9yZWFkX2Jsa190YWJsZTsKK3N0YXRpYyB1OCAqdG1wX2J1ZjJfcmVhZF9ibGtfdGFibGU7CitzdGF0aWMgdTggKmZsYWdzX3N0YXRpY193ZWFyX2xldmVsaW5nOworc3RhdGljIHU4ICp0bXBfYnVmX3dyaXRlX2Jsa190YWJsZV9kYXRhOworc3RhdGljIHU4ICp0bXBfYnVmX3JlYWRfZGlzdHVyYmFuY2U7CisKK3U4ICpidWZfcmVhZF9wYWdlX21haW5fc3BhcmU7Cit1OCAqYnVmX3dyaXRlX3BhZ2VfbWFpbl9zcGFyZTsKK3U4ICpidWZfcmVhZF9wYWdlX3NwYXJlOwordTggKmJ1Zl9nZXRfYmFkX2Jsb2NrOworCisjaWYgKFJFU1RPUkVfQ0FDSEVfT05fQ0RNQV9DSEFJTl9GQUlMVVJFICYmIENNRF9ETUEpCitzdHJ1Y3QgZmxhc2hfY2FjaGVfZGVsdGFfbGlzdF90YWcgaW50X2NhY2hlW01BWF9DSEFOUyArIE1BWF9ERVNDU107CitzdHJ1Y3QgZmxhc2hfY2FjaGVfdGFnIGNhY2hlX3N0YXJ0X2NvcHk7CisjZW5kaWYKKworaW50IGdfd051bUZyZWVCbG9ja3M7Cit1OCBnX1NCRENtZEluZGV4OworCitzdGF0aWMgdTggKmdfcElQRjsKK3N0YXRpYyB1OCBidF9mbGFnID0gRklSU1RfQlRfSUQ7CitzdGF0aWMgdTggYnRfYmxvY2tfY2hhbmdlZDsKKworc3RhdGljIHUxNiBjYWNoZV9ibG9ja190b193cml0ZTsKK3N0YXRpYyB1OCBsYXN0X2VyYXNlZCA9IEZJUlNUX0JUX0lEOworCitzdGF0aWMgdTggR0NfQ2FsbGVkOworc3RhdGljIHU4IEJUX0dDX0NhbGxlZDsKKworI2lmIENNRF9ETUEKKyNkZWZpbmUgQ09QWV9CQUNLX0JVRl9OVU0gMTAKKworc3RhdGljIHU4IGZ0bF9jbWRfY250OyAgLyogSW5pdCB2YWx1ZSBpcyAwICovCit1OCAqZ19wQlREZWx0YTsKK3U4ICpnX3BCVERlbHRhX0ZyZWU7Cit1OCAqZ19wQlRTdGFydGluZ0NvcHk7Cit1OCAqZ19wV2VhckNvdW50ZXJDb3B5OwordTE2ICpnX3BSZWFkQ291bnRlckNvcHk7Cit1OCAqZ19wQmxvY2tUYWJsZUNvcGllczsKK3U4ICpnX3BOZXh0QmxvY2tUYWJsZTsKK3N0YXRpYyB1OCAqY3BfYmFja19idWZfY29waWVzW0NPUFlfQkFDS19CVUZfTlVNXTsKK3N0YXRpYyBpbnQgY3BfYmFja19idWZfaWR4OworCitzdGF0aWMgdTggKmdfdGVtcF9idWY7CisKKyNwcmFnbWEgcGFjayhwdXNoLCAxKQorI3ByYWdtYSBwYWNrKDEpCitzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhIHsKKwl1OCBmdGxfY21kX2NudDsKKwl1OCBWYWxpZEZpZWxkczsKKwl1MTYgZ193QmxvY2tUYWJsZU9mZnNldDsKKwl1MzIgZ193QmxvY2tUYWJsZUluZGV4OworCXUzMiBCVF9JbmRleDsKKwl1MzIgQlRfRW50cnlfVmFsdWU7CisJdTMyIFdDX0luZGV4OworCXU4IFdDX0VudHJ5X1ZhbHVlOworCXUzMiBSQ19JbmRleDsKKwl1MTYgUkNfRW50cnlfVmFsdWU7Cit9OworCisjcHJhZ21hIHBhY2socG9wKQorCitzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhICpwX0JUYWJsZUNoYW5nZXNEZWx0YTsKKyNlbmRpZgorCisKKyNkZWZpbmUgTUFSS19CTE9DS19BU19CQUQoYmxvY2tub2RlKSAgICAgIChibG9ja25vZGUgfD0gQkFEX0JMT0NLKQorI2RlZmluZSBNQVJLX0JMS19BU19ESVNDQVJEKGJsaykgIChibGsgPSAoYmxrICYgflNQQVJFX0JMT0NLKSB8IERJU0NBUkRfQkxPQ0spCisKKyNkZWZpbmUgRlRMX0dldF9MQkFQQkFfVGFibGVfTWVtX1NpemVfQnl0ZXMoKSAoRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICpcCisJCQkJCQlzaXplb2YodTMyKSkKKyNkZWZpbmUgRlRMX0dldF9XZWFyQ291bnRlcl9UYWJsZV9NZW1fU2l6ZV9CeXRlcygpIChEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0gKlwKKwkJCQkJCXNpemVvZih1OCkpCisjZGVmaW5lIEZUTF9HZXRfUmVhZENvdW50ZXJfVGFibGVfTWVtX1NpemVfQnl0ZXMoKSAoRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICpcCisJCQkJCQlzaXplb2YodTE2KSkKKyNpZiBTVVBQT1JUX0xBUkdFX0JMT0NLTlVNCisjZGVmaW5lIEZUTF9HZXRfTEJBUEJBX1RhYmxlX0ZsYXNoX1NpemVfQnl0ZXMoKSAoRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICpcCisJCQkJCQlzaXplb2YodTgpICogMykKKyNlbHNlCisjZGVmaW5lIEZUTF9HZXRfTEJBUEJBX1RhYmxlX0ZsYXNoX1NpemVfQnl0ZXMoKSAoRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICpcCisJCQkJCQlzaXplb2YodTE2KSkKKyNlbmRpZgorI2RlZmluZSBGVExfR2V0X1dlYXJDb3VudGVyX1RhYmxlX0ZsYXNoX1NpemVfQnl0ZXMgXAorCUZUTF9HZXRfV2VhckNvdW50ZXJfVGFibGVfTWVtX1NpemVfQnl0ZXMKKyNkZWZpbmUgRlRMX0dldF9SZWFkQ291bnRlcl9UYWJsZV9GbGFzaF9TaXplX0J5dGVzIFwKKwlGVExfR2V0X1JlYWRDb3VudGVyX1RhYmxlX01lbV9TaXplX0J5dGVzCisKK3N0YXRpYyB1MzIgRlRMX0dldF9CbG9ja19UYWJsZV9GbGFzaF9TaXplX0J5dGVzKHZvaWQpCit7CisJdTMyIGJ5dGVfbnVtOworCisJaWYgKERldmljZUluZm8uTUxDRGV2aWNlKSB7CisJCWJ5dGVfbnVtID0gRlRMX0dldF9MQkFQQkFfVGFibGVfRmxhc2hfU2l6ZV9CeXRlcygpICsKKwkJCURldmljZUluZm8ud0RhdGFCbG9ja051bSAqIHNpemVvZih1OCkgKworCQkJRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICogc2l6ZW9mKHUxNik7CisJfSBlbHNlIHsKKwkJYnl0ZV9udW0gPSBGVExfR2V0X0xCQVBCQV9UYWJsZV9GbGFzaF9TaXplX0J5dGVzKCkgKworCQkJRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICogc2l6ZW9mKHU4KTsKKwl9CisKKwlieXRlX251bSArPSA0ICogc2l6ZW9mKHU4KTsKKworCXJldHVybiBieXRlX251bTsKK30KKworc3RhdGljIHUxNiAgRlRMX0dldF9CbG9ja19UYWJsZV9GbGFzaF9TaXplX1BhZ2VzKHZvaWQpCit7CisJcmV0dXJuICh1MTYpRlRMX0dldF9QYWdlX051bShGVExfR2V0X0Jsb2NrX1RhYmxlX0ZsYXNoX1NpemVfQnl0ZXMoKSk7Cit9CisKK3N0YXRpYyBpbnQgRlRMX0NvcHlfQmxvY2tfVGFibGVfVG9fRmxhc2godTggKmZsYXNoQnVmLCB1MzIgc2l6ZVRvVHgsCisJCQkJCXUzMiBzaXplVHhlZCkKK3sKKwl1MzIgd0J5dGVzQ29waWVkLCBibGtfdGJsX3NpemUsIHdCeXRlczsKKwl1MzIgKnBidCA9ICh1MzIgKilnX3BCbG9ja1RhYmxlOworCisJYmxrX3RibF9zaXplID0gRlRMX0dldF9MQkFQQkFfVGFibGVfRmxhc2hfU2l6ZV9CeXRlcygpOworCWZvciAod0J5dGVzID0gMDsKKwkod0J5dGVzIDwgc2l6ZVRvVHgpICYmICgod0J5dGVzICsgc2l6ZVR4ZWQpIDwgYmxrX3RibF9zaXplKTsKKwl3Qnl0ZXMrKykgeworI2lmIFNVUFBPUlRfTEFSR0VfQkxPQ0tOVU0KKwkJZmxhc2hCdWZbd0J5dGVzXSA9ICh1OCkocGJ0Wyh3Qnl0ZXMgKyBzaXplVHhlZCkgLyAzXQorCQk+PiAoKCh3Qnl0ZXMgKyBzaXplVHhlZCkgJSAzKSA/CisJCSgoKCh3Qnl0ZXMgKyBzaXplVHhlZCkgJSAzKSA9PSAyKSA/IDAgOiA4KSA6IDE2KSkgJiAweEZGOworI2Vsc2UKKwkJZmxhc2hCdWZbd0J5dGVzXSA9ICh1OCkocGJ0Wyh3Qnl0ZXMgKyBzaXplVHhlZCkgLyAyXQorCQk+PiAoKCh3Qnl0ZXMgKyBzaXplVHhlZCkgJSAyKSA/IDAgOiA4KSkgJiAweEZGOworI2VuZGlmCisJfQorCisJc2l6ZVR4ZWQgPSAoc2l6ZVR4ZWQgPiBibGtfdGJsX3NpemUpID8gKHNpemVUeGVkIC0gYmxrX3RibF9zaXplKSA6IDA7CisJYmxrX3RibF9zaXplID0gRlRMX0dldF9XZWFyQ291bnRlcl9UYWJsZV9GbGFzaF9TaXplX0J5dGVzKCk7CisJd0J5dGVzQ29waWVkID0gd0J5dGVzOworCXdCeXRlcyA9ICgoYmxrX3RibF9zaXplIC0gc2l6ZVR4ZWQpID4gKHNpemVUb1R4IC0gd0J5dGVzQ29waWVkKSkgPworCQkoc2l6ZVRvVHggLSB3Qnl0ZXNDb3BpZWQpIDogKGJsa190Ymxfc2l6ZSAtIHNpemVUeGVkKTsKKwltZW1jcHkoZmxhc2hCdWYgKyB3Qnl0ZXNDb3BpZWQsIGdfcFdlYXJDb3VudGVyICsgc2l6ZVR4ZWQsIHdCeXRlcyk7CisKKwlzaXplVHhlZCA9IChzaXplVHhlZCA+IGJsa190Ymxfc2l6ZSkgPyAoc2l6ZVR4ZWQgLSBibGtfdGJsX3NpemUpIDogMDsKKworCWlmIChEZXZpY2VJbmZvLk1MQ0RldmljZSkgeworCQlibGtfdGJsX3NpemUgPSBGVExfR2V0X1JlYWRDb3VudGVyX1RhYmxlX0ZsYXNoX1NpemVfQnl0ZXMoKTsKKwkJd0J5dGVzQ29waWVkICs9IHdCeXRlczsKKwkJZm9yICh3Qnl0ZXMgPSAwOyAoKHdCeXRlcyArIHdCeXRlc0NvcGllZCkgPCBzaXplVG9UeCkgJiYKKwkJCSgod0J5dGVzICsgc2l6ZVR4ZWQpIDwgYmxrX3RibF9zaXplKTsgd0J5dGVzKyspCisJCQlmbGFzaEJ1Zlt3Qnl0ZXMgKyB3Qnl0ZXNDb3BpZWRdID0KKwkJCShnX3BSZWFkQ291bnRlclsod0J5dGVzICsgc2l6ZVR4ZWQpIC8gMl0gPj4KKwkJCSgoKHdCeXRlcyArIHNpemVUeGVkKSAlIDIpID8gMCA6IDgpKSAmIDB4RkY7CisJfQorCisJcmV0dXJuIHdCeXRlc0NvcGllZCArIHdCeXRlczsKK30KKworc3RhdGljIGludCBGVExfQ29weV9CbG9ja19UYWJsZV9Gcm9tX0ZsYXNoKHU4ICpmbGFzaEJ1ZiwKKwkJCQl1MzIgc2l6ZVRvVHgsIHUzMiBzaXplVHhlZCkKK3sKKwl1MzIgd0J5dGVzQ29waWVkLCBibGtfdGJsX3NpemUsIHdCeXRlczsKKwl1MzIgKnBidCA9ICh1MzIgKilnX3BCbG9ja1RhYmxlOworCisJYmxrX3RibF9zaXplID0gRlRMX0dldF9MQkFQQkFfVGFibGVfRmxhc2hfU2l6ZV9CeXRlcygpOworCWZvciAod0J5dGVzID0gMDsgKHdCeXRlcyA8IHNpemVUb1R4KSAmJgorCQkoKHdCeXRlcyArIHNpemVUeGVkKSA8IGJsa190Ymxfc2l6ZSk7IHdCeXRlcysrKSB7CisjaWYgU1VQUE9SVF9MQVJHRV9CTE9DS05VTQorCQlpZiAoISgod0J5dGVzICsgc2l6ZVR4ZWQpICUgMykpCisJCQlwYnRbKHdCeXRlcyArIHNpemVUeGVkKSAvIDNdID0gMDsKKwkJcGJ0Wyh3Qnl0ZXMgKyBzaXplVHhlZCkgLyAzXSB8PQorCQkJKGZsYXNoQnVmW3dCeXRlc10gPDwgKCgod0J5dGVzICsgc2l6ZVR4ZWQpICUgMykgPworCQkJKCgoKHdCeXRlcyArIHNpemVUeGVkKSAlIDMpID09IDIpID8gMCA6IDgpIDogMTYpKTsKKyNlbHNlCisJCWlmICghKCh3Qnl0ZXMgKyBzaXplVHhlZCkgJSAyKSkKKwkJCXBidFsod0J5dGVzICsgc2l6ZVR4ZWQpIC8gMl0gPSAwOworCQlwYnRbKHdCeXRlcyArIHNpemVUeGVkKSAvIDJdIHw9CisJCQkoZmxhc2hCdWZbd0J5dGVzXSA8PCAoKCh3Qnl0ZXMgKyBzaXplVHhlZCkgJSAyKSA/CisJCQkwIDogOCkpOworI2VuZGlmCisJfQorCisJc2l6ZVR4ZWQgPSAoc2l6ZVR4ZWQgPiBibGtfdGJsX3NpemUpID8gKHNpemVUeGVkIC0gYmxrX3RibF9zaXplKSA6IDA7CisJYmxrX3RibF9zaXplID0gRlRMX0dldF9XZWFyQ291bnRlcl9UYWJsZV9GbGFzaF9TaXplX0J5dGVzKCk7CisJd0J5dGVzQ29waWVkID0gd0J5dGVzOworCXdCeXRlcyA9ICgoYmxrX3RibF9zaXplIC0gc2l6ZVR4ZWQpID4gKHNpemVUb1R4IC0gd0J5dGVzQ29waWVkKSkgPworCQkoc2l6ZVRvVHggLSB3Qnl0ZXNDb3BpZWQpIDogKGJsa190Ymxfc2l6ZSAtIHNpemVUeGVkKTsKKwltZW1jcHkoZ19wV2VhckNvdW50ZXIgKyBzaXplVHhlZCwgZmxhc2hCdWYgKyB3Qnl0ZXNDb3BpZWQsIHdCeXRlcyk7CisJc2l6ZVR4ZWQgPSAoc2l6ZVR4ZWQgPiBibGtfdGJsX3NpemUpID8gKHNpemVUeGVkIC0gYmxrX3RibF9zaXplKSA6IDA7CisKKwlpZiAoRGV2aWNlSW5mby5NTENEZXZpY2UpIHsKKwkJd0J5dGVzQ29waWVkICs9IHdCeXRlczsKKwkJYmxrX3RibF9zaXplID0gRlRMX0dldF9SZWFkQ291bnRlcl9UYWJsZV9GbGFzaF9TaXplX0J5dGVzKCk7CisJCWZvciAod0J5dGVzID0gMDsgKCh3Qnl0ZXMgKyB3Qnl0ZXNDb3BpZWQpIDwgc2l6ZVRvVHgpICYmCisJCQkoKHdCeXRlcyArIHNpemVUeGVkKSA8IGJsa190Ymxfc2l6ZSk7IHdCeXRlcysrKSB7CisJCQlpZiAoKCh3Qnl0ZXMgKyBzaXplVHhlZCkgJSAyKSkKKwkJCQlnX3BSZWFkQ291bnRlclsod0J5dGVzICsgc2l6ZVR4ZWQpIC8gMl0gPSAwOworCQkJZ19wUmVhZENvdW50ZXJbKHdCeXRlcyArIHNpemVUeGVkKSAvIDJdIHw9CisJCQkJKGZsYXNoQnVmW3dCeXRlc10gPDwKKwkJCQkoKCh3Qnl0ZXMgKyBzaXplVHhlZCkgJSAyKSA/IDAgOiA4KSk7CisJCX0KKwl9CisKKwlyZXR1cm4gd0J5dGVzQ29waWVkK3dCeXRlczsKK30KKworc3RhdGljIGludCBGVExfSW5zZXJ0X0Jsb2NrX1RhYmxlX1NpZ25hdHVyZSh1OCAqYnVmLCB1OCB0YWcpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQlRTSUdfQllURVM7IGkrKykKKwkJYnVmW0JUU0lHX09GRlNFVCArIGldID0KKwkJKCh0YWcgKyAoaSAqIEJUU0lHX0RFTFRBKSAtIEZJUlNUX0JUX0lEKSAlCisJCSgxICsgTEFTVF9CVF9JRC1GSVJTVF9CVF9JRCkpICsgRklSU1RfQlRfSUQ7CisKKwlyZXR1cm4gUEFTUzsKK30KKworc3RhdGljIGludCBGVExfRXh0cmFjdF9CbG9ja19UYWJsZV9UYWcodTggKmJ1ZiwgdTggKip0YWdhcnJheSkKK3sKKwlzdGF0aWMgdTggdGFnW0JUU0lHX0JZVEVTID4+IDFdOworCWludCBpLCBqLCBrLCB0YWdpLCB0YWd0ZW1wLCBzdGF0dXM7CisKKwkqdGFnYXJyYXkgPSAodTggKil0YWc7CisJdGFnaSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgKEJUU0lHX0JZVEVTIC0gMSk7IGkrKykgeworCQlmb3IgKGogPSBpICsgMTsgKGogPCBCVFNJR19CWVRFUykgJiYKKwkJCSh0YWdpIDwgKEJUU0lHX0JZVEVTID4+IDEpKTsgaisrKSB7CisJCQl0YWd0ZW1wID0gYnVmW0JUU0lHX09GRlNFVCArIGpdIC0KKwkJCQlidWZbQlRTSUdfT0ZGU0VUICsgaV07CisJCQlpZiAodGFndGVtcCAmJiAhKHRhZ3RlbXAgJSBCVFNJR19ERUxUQSkpIHsKKwkJCQl0YWd0ZW1wID0gKGJ1ZltCVFNJR19PRkZTRVQgKyBpXSArCisJCQkJCSgxICsgTEFTVF9CVF9JRCAtIEZJUlNUX0JUX0lEKSAtCisJCQkJCShpICogQlRTSUdfREVMVEEpKSAlCisJCQkJCSgxICsgTEFTVF9CVF9JRCAtIEZJUlNUX0JUX0lEKTsKKwkJCQlzdGF0dXMgPSBGQUlMOworCQkJCWZvciAoayA9IDA7IGsgPCB0YWdpOyBrKyspIHsKKwkJCQkJaWYgKHRhZ3RlbXAgPT0gdGFnW2tdKQorCQkJCQkJc3RhdHVzID0gUEFTUzsKKwkJCQl9CisKKwkJCQlpZiAoc3RhdHVzID09IEZBSUwpIHsKKwkJCQkJdGFnW3RhZ2krK10gPSB0YWd0ZW1wOworCQkJCQlpID0gKGogPT0gKGkgKyAxKSkgPyBpICsgMSA6IGk7CisJCQkJCWogPSAoaiA9PSAoaSArIDEpKSA/IGkgKyAxIDogaTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gdGFnaTsKK30KKworCitzdGF0aWMgaW50IEZUTF9FeGVjdXRlX1NQTF9SZWNvdmVyeSh2b2lkKQoreworCXUzMiBqLCBibG9jaywgYmxrczsKKwl1MzIgKnBidCA9ICh1MzIgKilnX3BCbG9ja1RhYmxlOworCWludCByZXQ7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCQkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlibGtzID0gRGV2aWNlSW5mby53U3BlY3RyYUVuZEJsb2NrIC0gRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2s7CisJZm9yIChqID0gMDsgaiA8PSBibGtzOyBqKyspIHsKKwkJYmxvY2sgPSAocGJ0W2pdKTsKKwkJaWYgKCgoYmxvY2sgJiBCQURfQkxPQ0spICE9IEJBRF9CTE9DSykgJiYKKwkJCSgoYmxvY2sgJiBTUEFSRV9CTE9DSykgPT0gU1BBUkVfQkxPQ0spKSB7CisJCQlyZXQgPSAgR0xPQl9MTERfRXJhc2VfQmxvY2soYmxvY2sgJiB+QkFEX0JMT0NLKTsKKwkJCWlmIChGQUlMID09IHJldCkgeworCQkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sCisJCQkJCSJOQU5EIFByb2dyYW0gZmFpbCBpbiAlcywgTGluZSAlZCwgIgorCQkJCQkiRnVuY3Rpb246ICVzLCBuZXcgQmFkIEJsb2NrICVkICIKKwkJCQkJImdlbmVyYXRlZCFcbiIsCisJCQkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18sCisJCQkJCShpbnQpKGJsb2NrICYgfkJBRF9CTE9DSykpOworCQkJCU1BUktfQkxPQ0tfQVNfQkFEKHBidFtqXSk7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gUEFTUzsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBHTE9CX0ZUTF9JZGVudGlmeURldmljZQorKiBJbnB1dHM6ICAgICAgIHBvaW50ZXIgdG8gaWRlbnRpZnkgZGF0YSBzdHJ1Y3R1cmUKKyogT3V0cHV0czogICAgICBQQVNTIC8gRkFJTAorKiBEZXNjcmlwdGlvbjogIHRoZSBpZGVudGlmeSBkYXRhIHN0cnVjdHVyZSBpcyBmaWxsZWQgaW4gd2l0aAorKiAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBmb3IgdGhlIGJsb2NrIGRyaXZlci4KKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCitpbnQgR0xPQl9GVExfSWRlbnRpZnlEZXZpY2Uoc3RydWN0IHNwZWN0cmFfaW5kZW50ZnlfZGV2X3RhZyAqZGV2X2RhdGEpCit7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJZGV2X2RhdGEtPk51bUJsb2NrcyA9IERldmljZUluZm8ud1RvdGFsQmxvY2tzOworCWRldl9kYXRhLT5QYWdlc1BlckJsb2NrID0gRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jazsKKwlkZXZfZGF0YS0+UGFnZURhdGFTaXplID0gRGV2aWNlSW5mby53UGFnZURhdGFTaXplOworCWRldl9kYXRhLT53RUNDQnl0ZXNQZXJTZWN0b3IgPSBEZXZpY2VJbmZvLndFQ0NCeXRlc1BlclNlY3RvcjsKKwlkZXZfZGF0YS0+d0RhdGFCbG9ja051bSA9IERldmljZUluZm8ud0RhdGFCbG9ja051bTsKKworCXJldHVybiBQQVNTOworfQorCisvKiAuLi4uLiAqLworc3RhdGljIGludCBhbGxvY2F0ZV9tZW1vcnkodm9pZCkKK3sKKwl1MzIgYmxvY2tfdGFibGVfc2l6ZSwgcGFnZV9zaXplLCBibG9ja19zaXplLCBtZW1fc2l6ZTsKKwl1MzIgdG90YWxfYnl0ZXMgPSAwOworCWludCBpOworI2lmIENNRF9ETUEKKwlpbnQgajsKKyNlbmRpZgorCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCXBhZ2Vfc2l6ZSA9IERldmljZUluZm8ud1BhZ2VTaXplOworCWJsb2NrX3NpemUgPSBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrICogRGV2aWNlSW5mby53UGFnZURhdGFTaXplOworCisJYmxvY2tfdGFibGVfc2l6ZSA9IERldmljZUluZm8ud0RhdGFCbG9ja051bSAqCisJCShzaXplb2YodTMyKSArIHNpemVvZih1OCkgKyBzaXplb2YodTE2KSk7CisJYmxvY2tfdGFibGVfc2l6ZSArPSAoRGV2aWNlSW5mby53UGFnZURhdGFTaXplIC0KKwkJKGJsb2NrX3RhYmxlX3NpemUgJSBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUpKSAlCisJCURldmljZUluZm8ud1BhZ2VEYXRhU2l6ZTsKKworCS8qIE1hbGxvYyBtZW1vcnkgZm9yIGJsb2NrIHRhYmxlcyAqLworCWdfcEJsb2NrVGFibGUgPSBrbWFsbG9jKGJsb2NrX3RhYmxlX3NpemUsIEdGUF9BVE9NSUMpOworCWlmICghZ19wQmxvY2tUYWJsZSkKKwkJZ290byBibG9ja190YWJsZV9mYWlsOworCW1lbXNldChnX3BCbG9ja1RhYmxlLCAwLCBibG9ja190YWJsZV9zaXplKTsKKwl0b3RhbF9ieXRlcyArPSBibG9ja190YWJsZV9zaXplOworCisJZ19wV2VhckNvdW50ZXIgPSAodTggKikoZ19wQmxvY2tUYWJsZSArCisJCURldmljZUluZm8ud0RhdGFCbG9ja051bSAqIHNpemVvZih1MzIpKTsKKworCWlmIChEZXZpY2VJbmZvLk1MQ0RldmljZSkKKwkJZ19wUmVhZENvdW50ZXIgPSAodTE2ICopKGdfcEJsb2NrVGFibGUgKworCQkJRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICoKKwkJCShzaXplb2YodTMyKSArIHNpemVvZih1OCkpKTsKKworCS8qIE1hbGxvYyBtZW1vcnkgYW5kIGluaXQgZm9yIGNhY2hlIGl0ZW1zICovCisJZm9yIChpID0gMDsgaSA8IENBQ0hFX0lURU1fTlVNOyBpKyspIHsKKwkJQ2FjaGUuYXJyYXlbaV0uYWRkcmVzcyA9IE5BTkRfQ0FDSEVfSU5JVF9BRERSOworCQlDYWNoZS5hcnJheVtpXS51c2VfY250ID0gMDsKKwkJQ2FjaGUuYXJyYXlbaV0uY2hhbmdlZCA9IENMRUFSOworCQlDYWNoZS5hcnJheVtpXS5idWYgPSBrbWFsbG9jKENhY2hlLmNhY2hlX2l0ZW1fc2l6ZSwKKwkJCUdGUF9BVE9NSUMpOworCQlpZiAoIUNhY2hlLmFycmF5W2ldLmJ1ZikKKwkJCWdvdG8gY2FjaGVfaXRlbV9mYWlsOworCQltZW1zZXQoQ2FjaGUuYXJyYXlbaV0uYnVmLCAwLCBDYWNoZS5jYWNoZV9pdGVtX3NpemUpOworCQl0b3RhbF9ieXRlcyArPSBDYWNoZS5jYWNoZV9pdGVtX3NpemU7CisJfQorCisJLyogTWFsbG9jIG1lbW9yeSBmb3IgSVBGICovCisJZ19wSVBGID0ga21hbGxvYyhwYWdlX3NpemUsIEdGUF9BVE9NSUMpOworCWlmICghZ19wSVBGKQorCQlnb3RvIGlwZl9mYWlsOworCW1lbXNldChnX3BJUEYsIDAsIHBhZ2Vfc2l6ZSk7CisJdG90YWxfYnl0ZXMgKz0gcGFnZV9zaXplOworCisJLyogTWFsbG9jIG1lbW9yeSBmb3IgZGF0YSBtZXJnaW5nIGR1cmluZyBMZXZlbDIgQ2FjaGUgZmx1c2ggKi8KKwljYWNoZV9sMl9wYWdlX2J1ZiA9IGttYWxsb2MocGFnZV9zaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWNhY2hlX2wyX3BhZ2VfYnVmKQorCQlnb3RvIGNhY2hlX2wyX3BhZ2VfYnVmX2ZhaWw7CisJbWVtc2V0KGNhY2hlX2wyX3BhZ2VfYnVmLCAweGZmLCBwYWdlX3NpemUpOworCXRvdGFsX2J5dGVzICs9IHBhZ2Vfc2l6ZTsKKworCWNhY2hlX2wyX2Jsa19idWYgPSBrbWFsbG9jKGJsb2NrX3NpemUsIEdGUF9BVE9NSUMpOworCWlmICghY2FjaGVfbDJfYmxrX2J1ZikKKwkJZ290byBjYWNoZV9sMl9ibGtfYnVmX2ZhaWw7CisJbWVtc2V0KGNhY2hlX2wyX2Jsa19idWYsIDB4ZmYsIGJsb2NrX3NpemUpOworCXRvdGFsX2J5dGVzICs9IGJsb2NrX3NpemU7CisKKwkvKiBNYWxsb2MgbWVtb3J5IGZvciB0ZW1wIGJ1ZmZlciAqLworCWdfcFRlbXBCdWYgPSBrbWFsbG9jKENhY2hlLmNhY2hlX2l0ZW1fc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKCFnX3BUZW1wQnVmKQorCQlnb3RvIFRlbXBfYnVmX2ZhaWw7CisJbWVtc2V0KGdfcFRlbXBCdWYsIDAsIENhY2hlLmNhY2hlX2l0ZW1fc2l6ZSk7CisJdG90YWxfYnl0ZXMgKz0gQ2FjaGUuY2FjaGVfaXRlbV9zaXplOworCisJLyogTWFsbG9jIG1lbW9yeSBmb3IgYmxvY2sgdGFibGUgYmxvY2tzICovCisJbWVtX3NpemUgPSAoMSArIExBU1RfQlRfSUQgLSBGSVJTVF9CVF9JRCkgKiBzaXplb2YodTMyKTsKKwlnX3BCVEJsb2NrcyA9IGttYWxsb2MobWVtX3NpemUsIEdGUF9BVE9NSUMpOworCWlmICghZ19wQlRCbG9ja3MpCisJCWdvdG8gYnRfYmxvY2tzX2ZhaWw7CisJbWVtc2V0KGdfcEJUQmxvY2tzLCAweGZmLCBtZW1fc2l6ZSk7CisJdG90YWxfYnl0ZXMgKz0gbWVtX3NpemU7CisKKwkvKiBNYWxsb2MgbWVtb3J5IGZvciBmdW5jdGlvbiBGVExfQ2hlY2tfQmxvY2tfVGFibGUgKi8KKwlmbGFnX2NoZWNrX2Jsa190YWJsZSA9IGttYWxsb2MoRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWZsYWdfY2hlY2tfYmxrX3RhYmxlKQorCQlnb3RvIGZsYWdfY2hlY2tfYmxrX3RhYmxlX2ZhaWw7CisJdG90YWxfYnl0ZXMgKz0gRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtOworCisJLyogTWFsbG9jIG1lbW9yeSBmb3IgZnVuY3Rpb24gRlRMX1NlYXJjaF9CbG9ja19UYWJsZV9JTl9CbG9jayAqLworCXRtcF9idWZfc2VhcmNoX2J0X2luX2Jsb2NrID0ga21hbGxvYyhwYWdlX3NpemUsIEdGUF9BVE9NSUMpOworCWlmICghdG1wX2J1Zl9zZWFyY2hfYnRfaW5fYmxvY2spCisJCWdvdG8gdG1wX2J1Zl9zZWFyY2hfYnRfaW5fYmxvY2tfZmFpbDsKKwltZW1zZXQodG1wX2J1Zl9zZWFyY2hfYnRfaW5fYmxvY2ssIDB4ZmYsIHBhZ2Vfc2l6ZSk7CisJdG90YWxfYnl0ZXMgKz0gcGFnZV9zaXplOworCisJbWVtX3NpemUgPSBEZXZpY2VJbmZvLndQYWdlU2l6ZSAtIERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZTsKKwlzcGFyZV9idWZfc2VhcmNoX2J0X2luX2Jsb2NrID0ga21hbGxvYyhtZW1fc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKCFzcGFyZV9idWZfc2VhcmNoX2J0X2luX2Jsb2NrKQorCQlnb3RvIHNwYXJlX2J1Zl9zZWFyY2hfYnRfaW5fYmxvY2tfZmFpbDsKKwltZW1zZXQoc3BhcmVfYnVmX3NlYXJjaF9idF9pbl9ibG9jaywgMHhmZiwgbWVtX3NpemUpOworCXRvdGFsX2J5dGVzICs9IG1lbV9zaXplOworCisJc3BhcmVfYnVmX2J0X3NlYXJjaF9idF9pbl9ibG9jayA9IGttYWxsb2MobWVtX3NpemUsIEdGUF9BVE9NSUMpOworCWlmICghc3BhcmVfYnVmX2J0X3NlYXJjaF9idF9pbl9ibG9jaykKKwkJZ290byBzcGFyZV9idWZfYnRfc2VhcmNoX2J0X2luX2Jsb2NrX2ZhaWw7CisJbWVtc2V0KHNwYXJlX2J1Zl9idF9zZWFyY2hfYnRfaW5fYmxvY2ssIDB4ZmYsIG1lbV9zaXplKTsKKwl0b3RhbF9ieXRlcyArPSBtZW1fc2l6ZTsKKworCS8qIE1hbGxvYyBtZW1vcnkgZm9yIGZ1bmN0aW9uIEZUTF9SZWFkX0Jsb2NrX1RhYmxlICovCisJdG1wX2J1ZjFfcmVhZF9ibGtfdGFibGUgPSBrbWFsbG9jKHBhZ2Vfc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKCF0bXBfYnVmMV9yZWFkX2Jsa190YWJsZSkKKwkJZ290byB0bXBfYnVmMV9yZWFkX2Jsa190YWJsZV9mYWlsOworCW1lbXNldCh0bXBfYnVmMV9yZWFkX2Jsa190YWJsZSwgMHhmZiwgcGFnZV9zaXplKTsKKwl0b3RhbF9ieXRlcyArPSBwYWdlX3NpemU7CisKKwl0bXBfYnVmMl9yZWFkX2Jsa190YWJsZSA9IGttYWxsb2MocGFnZV9zaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXRtcF9idWYyX3JlYWRfYmxrX3RhYmxlKQorCQlnb3RvIHRtcF9idWYyX3JlYWRfYmxrX3RhYmxlX2ZhaWw7CisJbWVtc2V0KHRtcF9idWYyX3JlYWRfYmxrX3RhYmxlLCAweGZmLCBwYWdlX3NpemUpOworCXRvdGFsX2J5dGVzICs9IHBhZ2Vfc2l6ZTsKKworCS8qIE1hbGxvYyBtZW1vcnkgZm9yIGZ1bmN0aW9uIEZUTF9TdGF0aWNfV2Vhcl9MZXZlbGluZyAqLworCWZsYWdzX3N0YXRpY193ZWFyX2xldmVsaW5nID0ga21hbGxvYyhEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0sCisJCQkJCUdGUF9BVE9NSUMpOworCWlmICghZmxhZ3Nfc3RhdGljX3dlYXJfbGV2ZWxpbmcpCisJCWdvdG8gZmxhZ3Nfc3RhdGljX3dlYXJfbGV2ZWxpbmdfZmFpbDsKKwl0b3RhbF9ieXRlcyArPSBEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW07CisKKwkvKiBNYWxsb2MgbWVtb3J5IGZvciBmdW5jdGlvbiBGVExfV3JpdGVfQmxvY2tfVGFibGVfRGF0YSAqLworCWlmIChGVExfR2V0X0Jsb2NrX1RhYmxlX0ZsYXNoX1NpemVfUGFnZXMoKSA+IDMpCisJCW1lbV9zaXplID0gRlRMX0dldF9CbG9ja19UYWJsZV9GbGFzaF9TaXplX0J5dGVzKCkgLQorCQkJCTIgKiBEZXZpY2VJbmZvLndQYWdlU2l6ZTsKKwllbHNlCisJCW1lbV9zaXplID0gRGV2aWNlSW5mby53UGFnZVNpemU7CisJdG1wX2J1Zl93cml0ZV9ibGtfdGFibGVfZGF0YSA9IGttYWxsb2MobWVtX3NpemUsIEdGUF9BVE9NSUMpOworCWlmICghdG1wX2J1Zl93cml0ZV9ibGtfdGFibGVfZGF0YSkKKwkJZ290byB0bXBfYnVmX3dyaXRlX2Jsa190YWJsZV9kYXRhX2ZhaWw7CisJbWVtc2V0KHRtcF9idWZfd3JpdGVfYmxrX3RhYmxlX2RhdGEsIDB4ZmYsIG1lbV9zaXplKTsKKwl0b3RhbF9ieXRlcyArPSBtZW1fc2l6ZTsKKworCS8qIE1hbGxvYyBtZW1vcnkgZm9yIGZ1bmN0aW9uIEZUTF9SZWFkX0Rpc3R1cmJhbmNlICovCisJdG1wX2J1Zl9yZWFkX2Rpc3R1cmJhbmNlID0ga21hbGxvYyhibG9ja19zaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXRtcF9idWZfcmVhZF9kaXN0dXJiYW5jZSkKKwkJZ290byB0bXBfYnVmX3JlYWRfZGlzdHVyYmFuY2VfZmFpbDsKKwltZW1zZXQodG1wX2J1Zl9yZWFkX2Rpc3R1cmJhbmNlLCAweGZmLCBibG9ja19zaXplKTsKKwl0b3RhbF9ieXRlcyArPSBibG9ja19zaXplOworCisJLyogQWxsb2MgbWVtIGZvciBmdW5jdGlvbiBOQU5EX1JlYWRfUGFnZV9NYWluX1NwYXJlIG9mIGxsZF9uYW5kLmMgKi8KKwlidWZfcmVhZF9wYWdlX21haW5fc3BhcmUgPSBrbWFsbG9jKERldmljZUluZm8ud1BhZ2VTaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWJ1Zl9yZWFkX3BhZ2VfbWFpbl9zcGFyZSkKKwkJZ290byBidWZfcmVhZF9wYWdlX21haW5fc3BhcmVfZmFpbDsKKwl0b3RhbF9ieXRlcyArPSBEZXZpY2VJbmZvLndQYWdlU2l6ZTsKKworCS8qIEFsbG9jIG1lbSBmb3IgZnVuY3Rpb24gTkFORF9Xcml0ZV9QYWdlX01haW5fU3BhcmUgb2YgbGxkX25hbmQuYyAqLworCWJ1Zl93cml0ZV9wYWdlX21haW5fc3BhcmUgPSBrbWFsbG9jKERldmljZUluZm8ud1BhZ2VTaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWJ1Zl93cml0ZV9wYWdlX21haW5fc3BhcmUpCisJCWdvdG8gYnVmX3dyaXRlX3BhZ2VfbWFpbl9zcGFyZV9mYWlsOworCXRvdGFsX2J5dGVzICs9IERldmljZUluZm8ud1BhZ2VTaXplOworCisJLyogQWxsb2MgbWVtIGZvciBmdW5jdGlvbiBOQU5EX1JlYWRfUGFnZV9TcGFyZSBvZiBsbGRfbmFuZC5jICovCisJYnVmX3JlYWRfcGFnZV9zcGFyZSA9IGttYWxsb2MoRGV2aWNlSW5mby53UGFnZVNwYXJlU2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKCFidWZfcmVhZF9wYWdlX3NwYXJlKQorCQlnb3RvIGJ1Zl9yZWFkX3BhZ2Vfc3BhcmVfZmFpbDsKKwltZW1zZXQoYnVmX3JlYWRfcGFnZV9zcGFyZSwgMHhmZiwgRGV2aWNlSW5mby53UGFnZVNwYXJlU2l6ZSk7CisJdG90YWxfYnl0ZXMgKz0gRGV2aWNlSW5mby53UGFnZVNwYXJlU2l6ZTsKKworCS8qIEFsbG9jIG1lbSBmb3IgZnVuY3Rpb24gTkFORF9HZXRfQmFkX0Jsb2NrIG9mIGxsZF9uYW5kLmMgKi8KKwlidWZfZ2V0X2JhZF9ibG9jayA9IGttYWxsb2MoRGV2aWNlSW5mby53UGFnZVNwYXJlU2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKCFidWZfZ2V0X2JhZF9ibG9jaykKKwkJZ290byBidWZfZ2V0X2JhZF9ibG9ja19mYWlsOworCW1lbXNldChidWZfZ2V0X2JhZF9ibG9jaywgMHhmZiwgRGV2aWNlSW5mby53UGFnZVNwYXJlU2l6ZSk7CisJdG90YWxfYnl0ZXMgKz0gRGV2aWNlSW5mby53UGFnZVNwYXJlU2l6ZTsKKworI2lmIENNRF9ETUEKKwlnX3RlbXBfYnVmID0ga21hbGxvYyhibG9ja19zaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWdfdGVtcF9idWYpCisJCWdvdG8gdGVtcF9idWZfZmFpbDsKKwltZW1zZXQoZ190ZW1wX2J1ZiwgMHhmZiwgYmxvY2tfc2l6ZSk7CisJdG90YWxfYnl0ZXMgKz0gYmxvY2tfc2l6ZTsKKworCS8qIE1hbGxvYyBtZW1vcnkgZm9yIGNvcHkgb2YgYmxvY2sgdGFibGUgdXNlZCBpbiBDRE1BIG1vZGUgKi8KKwlnX3BCVFN0YXJ0aW5nQ29weSA9IGttYWxsb2MoYmxvY2tfdGFibGVfc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKCFnX3BCVFN0YXJ0aW5nQ29weSkKKwkJZ290byBidF9zdGFydGluZ19jb3B5OworCW1lbXNldChnX3BCVFN0YXJ0aW5nQ29weSwgMCwgYmxvY2tfdGFibGVfc2l6ZSk7CisJdG90YWxfYnl0ZXMgKz0gYmxvY2tfdGFibGVfc2l6ZTsKKworCWdfcFdlYXJDb3VudGVyQ29weSA9ICh1OCAqKShnX3BCVFN0YXJ0aW5nQ29weSArCisJCURldmljZUluZm8ud0RhdGFCbG9ja051bSAqIHNpemVvZih1MzIpKTsKKworCWlmIChEZXZpY2VJbmZvLk1MQ0RldmljZSkKKwkJZ19wUmVhZENvdW50ZXJDb3B5ID0gKHUxNiAqKShnX3BCVFN0YXJ0aW5nQ29weSArCisJCQlEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0gKgorCQkJKHNpemVvZih1MzIpICsgc2l6ZW9mKHU4KSkpOworCisJLyogTWFsbG9jIG1lbW9yeSBmb3IgYmxvY2sgdGFibGUgY29waWVzICovCisJbWVtX3NpemUgPSA1ICogRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICogc2l6ZW9mKHUzMikgKworCQkJNSAqIERldmljZUluZm8ud0RhdGFCbG9ja051bSAqIHNpemVvZih1OCk7CisJaWYgKERldmljZUluZm8uTUxDRGV2aWNlKQorCQltZW1fc2l6ZSArPSA1ICogRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICogc2l6ZW9mKHUxNik7CisJZ19wQmxvY2tUYWJsZUNvcGllcyA9IGttYWxsb2MobWVtX3NpemUsIEdGUF9BVE9NSUMpOworCWlmICghZ19wQmxvY2tUYWJsZUNvcGllcykKKwkJZ290byBibGtfdGFibGVfY29waWVzX2ZhaWw7CisJbWVtc2V0KGdfcEJsb2NrVGFibGVDb3BpZXMsIDAsIG1lbV9zaXplKTsKKwl0b3RhbF9ieXRlcyArPSBtZW1fc2l6ZTsKKwlnX3BOZXh0QmxvY2tUYWJsZSA9IGdfcEJsb2NrVGFibGVDb3BpZXM7CisKKwkvKiBNYWxsb2MgbWVtb3J5IGZvciBCbG9jayBUYWJsZSBEZWx0YSAqLworCW1lbV9zaXplID0gTUFYX0RFU0NTICogc2l6ZW9mKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEpOworCWdfcEJURGVsdGEgPSBrbWFsbG9jKG1lbV9zaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWdfcEJURGVsdGEpCisJCWdvdG8gYnRfZGVsdGFfZmFpbDsKKwltZW1zZXQoZ19wQlREZWx0YSwgMCwgbWVtX3NpemUpOworCXRvdGFsX2J5dGVzICs9IG1lbV9zaXplOworCWdfcEJURGVsdGFfRnJlZSA9IGdfcEJURGVsdGE7CisKKwkvKiBNYWxsb2MgbWVtb3J5IGZvciBDb3B5IEJhY2sgQnVmZmVycyAqLworCWZvciAoaiA9IDA7IGogPCBDT1BZX0JBQ0tfQlVGX05VTTsgaisrKSB7CisJCWNwX2JhY2tfYnVmX2NvcGllc1tqXSA9IGttYWxsb2MoYmxvY2tfc2l6ZSwgR0ZQX0FUT01JQyk7CisJCWlmICghY3BfYmFja19idWZfY29waWVzW2pdKQorCQkJZ290byBjcF9iYWNrX2J1Zl9jb3BpZXNfZmFpbDsKKwkJbWVtc2V0KGNwX2JhY2tfYnVmX2NvcGllc1tqXSwgMCwgYmxvY2tfc2l6ZSk7CisJCXRvdGFsX2J5dGVzICs9IGJsb2NrX3NpemU7CisJfQorCWNwX2JhY2tfYnVmX2lkeCA9IDA7CisKKwkvKiBNYWxsb2MgbWVtb3J5IGZvciBwZW5kaW5nIGNvbW1hbmRzIGxpc3QgKi8KKwltZW1fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcGVuZGluZ19jbWQpICogTUFYX0RFU0NTOworCWluZm8ucGNtZHMgPSBremFsbG9jKG1lbV9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluZm8ucGNtZHMpCisJCWdvdG8gcGVuZGluZ19jbWRzX2J1Zl9mYWlsOworCXRvdGFsX2J5dGVzICs9IG1lbV9zaXplOworCisJLyogTWFsbG9jIG1lbW9yeSBmb3IgQ0RNQSBkZXNjcmlwdGVyIHRhYmxlICovCisJbWVtX3NpemUgPSBzaXplb2Yoc3RydWN0IGNkbWFfZGVzY3JpcHRvcikgKiBNQVhfREVTQ1M7CisJaW5mby5jZG1hX2Rlc2NfYnVmID0ga3phbGxvYyhtZW1fc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvLmNkbWFfZGVzY19idWYpCisJCWdvdG8gY2RtYV9kZXNjX2J1Zl9mYWlsOworCXRvdGFsX2J5dGVzICs9IG1lbV9zaXplOworCisJLyogTWFsbG9jIG1lbW9yeSBmb3IgTWVtY3B5IGRlc2NyaXB0ZXIgdGFibGUgKi8KKwltZW1fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbWVtY3B5X2Rlc2NyaXB0b3IpICogTUFYX0RFU0NTOworCWluZm8ubWVtY3BfZGVzY19idWYgPSBremFsbG9jKG1lbV9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluZm8ubWVtY3BfZGVzY19idWYpCisJCWdvdG8gbWVtY3BfZGVzY19idWZfZmFpbDsKKwl0b3RhbF9ieXRlcyArPSBtZW1fc2l6ZTsKKyNlbmRpZgorCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJIlRvdGFsIG1lbW9yeSBhbGxvY2F0ZWQgaW4gRlRMIGxheWVyOiAlZFxuIiwgdG90YWxfYnl0ZXMpOworCisJcmV0dXJuIFBBU1M7CisKKyNpZiBDTURfRE1BCittZW1jcF9kZXNjX2J1Zl9mYWlsOgorCWtmcmVlKGluZm8uY2RtYV9kZXNjX2J1Zik7CitjZG1hX2Rlc2NfYnVmX2ZhaWw6CisJa2ZyZWUoaW5mby5wY21kcyk7CitwZW5kaW5nX2NtZHNfYnVmX2ZhaWw6CitjcF9iYWNrX2J1Zl9jb3BpZXNfZmFpbDoKKwlqLS07CisJZm9yICg7IGogPj0gMDsgai0tKQorCQlrZnJlZShjcF9iYWNrX2J1Zl9jb3BpZXNbal0pOworCWtmcmVlKGdfcEJURGVsdGEpOworYnRfZGVsdGFfZmFpbDoKKwlrZnJlZShnX3BCbG9ja1RhYmxlQ29waWVzKTsKK2Jsa190YWJsZV9jb3BpZXNfZmFpbDoKKwlrZnJlZShnX3BCVFN0YXJ0aW5nQ29weSk7CitidF9zdGFydGluZ19jb3B5OgorCWtmcmVlKGdfdGVtcF9idWYpOwordGVtcF9idWZfZmFpbDoKKwlrZnJlZShidWZfZ2V0X2JhZF9ibG9jayk7CisjZW5kaWYKKworYnVmX2dldF9iYWRfYmxvY2tfZmFpbDoKKwlrZnJlZShidWZfcmVhZF9wYWdlX3NwYXJlKTsKK2J1Zl9yZWFkX3BhZ2Vfc3BhcmVfZmFpbDoKKwlrZnJlZShidWZfd3JpdGVfcGFnZV9tYWluX3NwYXJlKTsKK2J1Zl93cml0ZV9wYWdlX21haW5fc3BhcmVfZmFpbDoKKwlrZnJlZShidWZfcmVhZF9wYWdlX21haW5fc3BhcmUpOworYnVmX3JlYWRfcGFnZV9tYWluX3NwYXJlX2ZhaWw6CisJa2ZyZWUodG1wX2J1Zl9yZWFkX2Rpc3R1cmJhbmNlKTsKK3RtcF9idWZfcmVhZF9kaXN0dXJiYW5jZV9mYWlsOgorCWtmcmVlKHRtcF9idWZfd3JpdGVfYmxrX3RhYmxlX2RhdGEpOwordG1wX2J1Zl93cml0ZV9ibGtfdGFibGVfZGF0YV9mYWlsOgorCWtmcmVlKGZsYWdzX3N0YXRpY193ZWFyX2xldmVsaW5nKTsKK2ZsYWdzX3N0YXRpY193ZWFyX2xldmVsaW5nX2ZhaWw6CisJa2ZyZWUodG1wX2J1ZjJfcmVhZF9ibGtfdGFibGUpOwordG1wX2J1ZjJfcmVhZF9ibGtfdGFibGVfZmFpbDoKKwlrZnJlZSh0bXBfYnVmMV9yZWFkX2Jsa190YWJsZSk7Cit0bXBfYnVmMV9yZWFkX2Jsa190YWJsZV9mYWlsOgorCWtmcmVlKHNwYXJlX2J1Zl9idF9zZWFyY2hfYnRfaW5fYmxvY2spOworc3BhcmVfYnVmX2J0X3NlYXJjaF9idF9pbl9ibG9ja19mYWlsOgorCWtmcmVlKHNwYXJlX2J1Zl9zZWFyY2hfYnRfaW5fYmxvY2spOworc3BhcmVfYnVmX3NlYXJjaF9idF9pbl9ibG9ja19mYWlsOgorCWtmcmVlKHRtcF9idWZfc2VhcmNoX2J0X2luX2Jsb2NrKTsKK3RtcF9idWZfc2VhcmNoX2J0X2luX2Jsb2NrX2ZhaWw6CisJa2ZyZWUoZmxhZ19jaGVja19ibGtfdGFibGUpOworZmxhZ19jaGVja19ibGtfdGFibGVfZmFpbDoKKwlrZnJlZShnX3BCVEJsb2Nrcyk7CitidF9ibG9ja3NfZmFpbDoKKwlrZnJlZShnX3BUZW1wQnVmKTsKK1RlbXBfYnVmX2ZhaWw6CisJa2ZyZWUoY2FjaGVfbDJfYmxrX2J1Zik7CitjYWNoZV9sMl9ibGtfYnVmX2ZhaWw6CisJa2ZyZWUoY2FjaGVfbDJfcGFnZV9idWYpOworY2FjaGVfbDJfcGFnZV9idWZfZmFpbDoKKwlrZnJlZShnX3BJUEYpOworaXBmX2ZhaWw6CitjYWNoZV9pdGVtX2ZhaWw6CisJaS0tOworCWZvciAoOyBpID49IDA7IGktLSkKKwkJa2ZyZWUoQ2FjaGUuYXJyYXlbaV0uYnVmKTsKKwlrZnJlZShnX3BCbG9ja1RhYmxlKTsKK2Jsb2NrX3RhYmxlX2ZhaWw6CisJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8ga21hbGxvYyBtZW1vcnkgaW4gJXMgTGluZSAlZC5cbiIsCisJCV9fRklMRV9fLCBfX0xJTkVfXyk7CisKKwlyZXR1cm4gLUVOT01FTTsKK30KKworLyogLi4uLiAqLworc3RhdGljIGludCBmcmVlX21lbW9yeSh2b2lkKQoreworCWludCBpOworCisjaWYgQ01EX0RNQQorCWtmcmVlKGluZm8ubWVtY3BfZGVzY19idWYpOworCWtmcmVlKGluZm8uY2RtYV9kZXNjX2J1Zik7CisJa2ZyZWUoaW5mby5wY21kcyk7CisJZm9yIChpID0gQ09QWV9CQUNLX0JVRl9OVU0gLSAxOyBpID49IDA7IGktLSkKKwkJa2ZyZWUoY3BfYmFja19idWZfY29waWVzW2ldKTsKKwlrZnJlZShnX3BCVERlbHRhKTsKKwlrZnJlZShnX3BCbG9ja1RhYmxlQ29waWVzKTsKKwlrZnJlZShnX3BCVFN0YXJ0aW5nQ29weSk7CisJa2ZyZWUoZ190ZW1wX2J1Zik7CisJa2ZyZWUoYnVmX2dldF9iYWRfYmxvY2spOworI2VuZGlmCisJa2ZyZWUoYnVmX3JlYWRfcGFnZV9zcGFyZSk7CisJa2ZyZWUoYnVmX3dyaXRlX3BhZ2VfbWFpbl9zcGFyZSk7CisJa2ZyZWUoYnVmX3JlYWRfcGFnZV9tYWluX3NwYXJlKTsKKwlrZnJlZSh0bXBfYnVmX3JlYWRfZGlzdHVyYmFuY2UpOworCWtmcmVlKHRtcF9idWZfd3JpdGVfYmxrX3RhYmxlX2RhdGEpOworCWtmcmVlKGZsYWdzX3N0YXRpY193ZWFyX2xldmVsaW5nKTsKKwlrZnJlZSh0bXBfYnVmMl9yZWFkX2Jsa190YWJsZSk7CisJa2ZyZWUodG1wX2J1ZjFfcmVhZF9ibGtfdGFibGUpOworCWtmcmVlKHNwYXJlX2J1Zl9idF9zZWFyY2hfYnRfaW5fYmxvY2spOworCWtmcmVlKHNwYXJlX2J1Zl9zZWFyY2hfYnRfaW5fYmxvY2spOworCWtmcmVlKHRtcF9idWZfc2VhcmNoX2J0X2luX2Jsb2NrKTsKKwlrZnJlZShmbGFnX2NoZWNrX2Jsa190YWJsZSk7CisJa2ZyZWUoZ19wQlRCbG9ja3MpOworCWtmcmVlKGdfcFRlbXBCdWYpOworCWtmcmVlKGdfcElQRik7CisJZm9yIChpID0gQ0FDSEVfSVRFTV9OVU0gLSAxOyBpID49IDA7IGktLSkKKwkJa2ZyZWUoQ2FjaGUuYXJyYXlbaV0uYnVmKTsKKwlrZnJlZShnX3BCbG9ja1RhYmxlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkdW1wX2NhY2hlX2wyX3RhYmxlKHZvaWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKwlzdHJ1Y3Qgc3BlY3RyYV9sMl9jYWNoZV9saXN0ICpwbmQ7CisJaW50IG4sIGk7CisKKwluID0gMDsKKwlsaXN0X2Zvcl9lYWNoKHAsICZjYWNoZV9sMi50YWJsZS5saXN0KSB7CisJCXBuZCA9IGxpc3RfZW50cnkocCwgc3RydWN0IHNwZWN0cmFfbDJfY2FjaGVfbGlzdCwgbGlzdCk7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sICJkdW1wX2NhY2hlX2wyX3RhYmxlIG5vZGU6ICVkLCBsb2dpY2FsX2Jsa19udW06ICVkXG4iLCBuLCBwbmQtPmxvZ2ljYWxfYmxrX251bSk7CisvKgorCQlmb3IgKGkgPSAwOyBpIDwgRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jazsgaSsrKSB7CisJCQlpZiAocG5kLT5wYWdlc19hcnJheVtpXSAhPSBNQVhfVTMyX1ZBTFVFKQorCQkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sICIgICAgcGFnZXNfYXJyYXlbJWRdOiAweCV4XG4iLCBpLCBwbmQtPnBhZ2VzX2FycmF5W2ldKTsKKwkJfQorKi8KKwkJbisrOworCX0KK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgR0xPQl9GVExfSW5pdAorKiBJbnB1dHM6ICAgICAgIG5vbmUKKyogT3V0cHV0czogICAgICBQQVNTPTAgLyBGQUlMPTEKKyogRGVzY3JpcHRpb246ICBhbGxvY2F0ZXMgdGhlIG1lbW9yeSBmb3IgY2FjaGUgYXJyYXksCisqICAgICAgICAgICAgICAgaW1wb3J0YW50IGRhdGEgc3RydWN0dXJlcworKiAgICAgICAgICAgICAgIGNsZWFycyB0aGUgY2FjaGUgYXJyYXkKKyogICAgICAgICAgICAgICByZWFkcyB0aGUgYmxvY2sgdGFibGUgZnJvbSBmbGFzaCBpbnRvIGFycmF5CisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK2ludCBHTE9CX0ZUTF9Jbml0KHZvaWQpCit7CisJaW50IGk7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJQ2FjaGUucGFnZXNfcGVyX2l0ZW0gPSAxOworCUNhY2hlLmNhY2hlX2l0ZW1fc2l6ZSA9IDEgKiBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemU7CisKKwlpZiAoYWxsb2NhdGVfbWVtb3J5KCkgIT0gUEFTUykKKwkJcmV0dXJuIEZBSUw7CisKKyNpZiBDTURfRE1BCisjaWYgUkVTVE9SRV9DQUNIRV9PTl9DRE1BX0NIQUlOX0ZBSUxVUkUKKwltZW1jcHkoKHZvaWQgKikmY2FjaGVfc3RhcnRfY29weSwgKHZvaWQgKikmQ2FjaGUsCisJCXNpemVvZihzdHJ1Y3QgZmxhc2hfY2FjaGVfdGFnKSk7CisJbWVtc2V0KCh2b2lkICopJmludF9jYWNoZSwgLTEsCisJCXNpemVvZihzdHJ1Y3QgZmxhc2hfY2FjaGVfZGVsdGFfbGlzdF90YWcpICoKKwkJKE1BWF9DSEFOUyArIE1BWF9ERVNDUykpOworI2VuZGlmCisJZnRsX2NtZF9jbnQgPSAwOworI2VuZGlmCisKKwlpZiAoRlRMX1JlYWRfQmxvY2tfVGFibGUoKSAhPSBQQVNTKQorCQlyZXR1cm4gRkFJTDsKKworCS8qIEluaXQgdGhlIExldmVsMiBDYWNoZSBkYXRhIHN0cnVjdHVyZSAqLworCWZvciAoaSA9IDA7IGkgPCBCTEtfTlVNX0ZPUl9MMl9DQUNIRTsgaSsrKQorCQljYWNoZV9sMi5ibGtfYXJyYXlbaV0gPSBNQVhfVTMyX1ZBTFVFOworCWNhY2hlX2wyLmN1cl9ibGtfaWR4ID0gMDsKKwljYWNoZV9sMi5jdXJfcGFnZV9udW0gPSAwOworCUlOSVRfTElTVF9IRUFEKCZjYWNoZV9sMi50YWJsZS5saXN0KTsKKwljYWNoZV9sMi50YWJsZS5sb2dpY2FsX2Jsa19udW0gPSBNQVhfVTMyX1ZBTFVFOworCisJZHVtcF9jYWNoZV9sMl90YWJsZSgpOworCisJcmV0dXJuIDA7Cit9CisKKworI2lmIENNRF9ETUEKKyNpZiAwCitzdGF0aWMgdm9pZCBzYXZlX2Jsa190YWJsZV9jaGFuZ2VzKHUxNiBpZHgpCit7CisJdTggZnRsX2NtZDsKKwl1MzIgKnBidCA9ICh1MzIgKilnX3BCVFN0YXJ0aW5nQ29weTsKKworI2lmIFJFU1RPUkVfQ0FDSEVfT05fQ0RNQV9DSEFJTl9GQUlMVVJFCisJdTE2IGlkOworCXU4IGNhY2hlX2Jsa3M7CisKKwlpZCA9IGlkeCAtIE1BWF9DSEFOUzsKKwlpZiAoaW50X2NhY2hlW2lkXS5pdGVtICE9IC0xKSB7CisJCWNhY2hlX2Jsa3MgPSBpbnRfY2FjaGVbaWRdLml0ZW07CisJCWNhY2hlX3N0YXJ0X2NvcHkuYXJyYXlbY2FjaGVfYmxrc10uYWRkcmVzcyA9CisJCQlpbnRfY2FjaGVbaWRdLmNhY2hlLmFkZHJlc3M7CisJCWNhY2hlX3N0YXJ0X2NvcHkuYXJyYXlbY2FjaGVfYmxrc10uY2hhbmdlZCA9CisJCQlpbnRfY2FjaGVbaWRdLmNhY2hlLmNoYW5nZWQ7CisJfQorI2VuZGlmCisKKwlmdGxfY21kID0gcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250OworCisJd2hpbGUgKGZ0bF9jbWQgPD0gUGVuZGluZ0NNRFtpZHhdLlRhZykgeworCQlpZiAocF9CVGFibGVDaGFuZ2VzRGVsdGEtPlZhbGlkRmllbGRzID09IDB4MDEpIHsKKwkJCWdfd0Jsb2NrVGFibGVPZmZzZXQgPQorCQkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5nX3dCbG9ja1RhYmxlT2Zmc2V0OworCQl9IGVsc2UgaWYgKHBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5WYWxpZEZpZWxkcyA9PSAweDBDKSB7CisJCQlwYnRbcF9CVGFibGVDaGFuZ2VzRGVsdGEtPkJUX0luZGV4XSA9CisJCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPkJUX0VudHJ5X1ZhbHVlOworCQkJZGVidWdfYm91bmRhcnlfZXJyb3IoKCgKKwkJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfSW5kZXgpKSwKKwkJCQlEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0sIDApOworCQl9IGVsc2UgaWYgKHBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5WYWxpZEZpZWxkcyA9PSAweDAzKSB7CisJCQlnX3dCbG9ja1RhYmxlT2Zmc2V0ID0KKwkJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+Z193QmxvY2tUYWJsZU9mZnNldDsKKwkJCWdfd0Jsb2NrVGFibGVJbmRleCA9CisJCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmdfd0Jsb2NrVGFibGVJbmRleDsKKwkJfSBlbHNlIGlmIChwX0JUYWJsZUNoYW5nZXNEZWx0YS0+VmFsaWRGaWVsZHMgPT0gMHgzMCkgeworCQkJZ19wV2VhckNvdW50ZXJDb3B5W3BfQlRhYmxlQ2hhbmdlc0RlbHRhLT5XQ19JbmRleF0gPQorCQkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5XQ19FbnRyeV9WYWx1ZTsKKwkJfSBlbHNlIGlmICgoRGV2aWNlSW5mby5NTENEZXZpY2UpICYmCisJCQkocF9CVGFibGVDaGFuZ2VzRGVsdGEtPlZhbGlkRmllbGRzID09IDB4QzApKSB7CisJCQlnX3BSZWFkQ291bnRlckNvcHlbcF9CVGFibGVDaGFuZ2VzRGVsdGEtPlJDX0luZGV4XSA9CisJCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPlJDX0VudHJ5X1ZhbHVlOworCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkJIkluIGV2ZW50IHN0YXR1cyBzZXR0aW5nIHJlYWQgY291bnRlciAiCisJCQkJIkdMT0JfZnRsX2NtZF9jbnQgJXUgQ291bnQgJXUgSW5kZXggJXVcbiIsCisJCQkJZnRsX2NtZCwKKwkJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+UkNfRW50cnlfVmFsdWUsCisJCQkJKHVuc2lnbmVkIGludClwX0JUYWJsZUNoYW5nZXNEZWx0YS0+UkNfSW5kZXgpOworCQl9IGVsc2UgeworCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkJIlRoaXMgc2hvdWxkIG5ldmVyIG9jY3VyIFxuIik7CisJCX0KKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEgKz0gMTsKKwkJZnRsX2NtZCA9IHBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5mdGxfY21kX2NudDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRpc2NhcmRfY21kcyh1MTYgbikKK3sKKwl1MzIgKnBidCA9ICh1MzIgKilnX3BCVFN0YXJ0aW5nQ29weTsKKwl1OCBmdGxfY21kOworCXVuc2lnbmVkIGxvbmcgazsKKyNpZiBSRVNUT1JFX0NBQ0hFX09OX0NETUFfQ0hBSU5fRkFJTFVSRQorCXU4IGNhY2hlX2Jsa3M7CisJdTE2IGlkOworI2VuZGlmCisKKwlpZiAoKFBlbmRpbmdDTURbbl0uQ01EID09IFdSSVRFX01BSU5fQ01EKSB8fAorCQkoUGVuZGluZ0NNRFtuXS5DTUQgPT0gV1JJVEVfTUFJTl9TUEFSRV9DTUQpKSB7CisJCWZvciAoayA9IDA7IGsgPCBEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW07IGsrKykgeworCQkJaWYgKFBlbmRpbmdDTURbbl0uQmxvY2sgPT0gKHBidFtrXSAmICh+QkFEX0JMT0NLKSkpCisJCQkJTUFSS19CTEtfQVNfRElTQ0FSRChwYnRba10pOworCQl9CisJfQorCisJZnRsX2NtZCA9IHBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5mdGxfY21kX2NudDsKKwl3aGlsZSAoZnRsX2NtZCA8PSBQZW5kaW5nQ01EW25dLlRhZykgeworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YSArPSAxOworCQlmdGxfY21kID0gcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250OworCX0KKworI2lmIFJFU1RPUkVfQ0FDSEVfT05fQ0RNQV9DSEFJTl9GQUlMVVJFCisJaWQgPSBuIC0gTUFYX0NIQU5TOworCisJaWYgKGludF9jYWNoZVtpZF0uaXRlbSAhPSAtMSkgeworCQljYWNoZV9ibGtzID0gaW50X2NhY2hlW2lkXS5pdGVtOworCQlpZiAoUGVuZGluZ0NNRFtuXS5DTUQgPT0gTUVNQ09QWV9DTUQpIHsKKwkJCWlmICgoY2FjaGVfc3RhcnRfY29weS5hcnJheVtjYWNoZV9ibGtzXS5idWYgPD0KKwkJCQlQZW5kaW5nQ01EW25dLkRhdGFEZXN0QWRkcikgJiYKKwkJCQkoKGNhY2hlX3N0YXJ0X2NvcHkuYXJyYXlbY2FjaGVfYmxrc10uYnVmICsKKwkJCQlDYWNoZS5jYWNoZV9pdGVtX3NpemUpID4KKwkJCQlQZW5kaW5nQ01EW25dLkRhdGFEZXN0QWRkcikpIHsKKwkJCQljYWNoZV9zdGFydF9jb3B5LmFycmF5W2NhY2hlX2Jsa3NdLmFkZHJlc3MgPQorCQkJCQkJTkFORF9DQUNIRV9JTklUX0FERFI7CisJCQkJY2FjaGVfc3RhcnRfY29weS5hcnJheVtjYWNoZV9ibGtzXS51c2VfY250ID0KKwkJCQkJCQkJMDsKKwkJCQljYWNoZV9zdGFydF9jb3B5LmFycmF5W2NhY2hlX2Jsa3NdLmNoYW5nZWQgPQorCQkJCQkJCQlDTEVBUjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWNhY2hlX3N0YXJ0X2NvcHkuYXJyYXlbY2FjaGVfYmxrc10uYWRkcmVzcyA9CisJCQkJCWludF9jYWNoZVtpZF0uY2FjaGUuYWRkcmVzczsKKwkJCWNhY2hlX3N0YXJ0X2NvcHkuYXJyYXlbY2FjaGVfYmxrc10uY2hhbmdlZCA9CisJCQkJCWludF9jYWNoZVtpZF0uY2FjaGUuY2hhbmdlZDsKKwkJfQorCX0KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX2NtZF9wYXNzKGludCAqZmlyc3RfZmFpbGVkX2NtZCwgdTE2IGlkeCkKK3sKKwlpZiAoMCA9PSAqZmlyc3RfZmFpbGVkX2NtZCkKKwkJc2F2ZV9ibGtfdGFibGVfY2hhbmdlcyhpZHgpOworCWVsc2UKKwkJZGlzY2FyZF9jbWRzKGlkeCk7Cit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfY21kX2ZhaWxfYWJvcnQoaW50ICpmaXJzdF9mYWlsZWRfY21kLAorCQkJCXUxNiBpZHgsIGludCBldmVudCkKK3sKKwl1MzIgKnBidCA9ICh1MzIgKilnX3BCVFN0YXJ0aW5nQ29weTsKKwl1OCBmdGxfY21kOworCXVuc2lnbmVkIGxvbmcgaTsKKwlpbnQgZXJhc2VfZmFpbCwgcHJvZ3JhbV9mYWlsOworI2lmIFJFU1RPUkVfQ0FDSEVfT05fQ0RNQV9DSEFJTl9GQUlMVVJFCisJdTggY2FjaGVfYmxrczsKKwl1MTYgaWQ7CisjZW5kaWYKKworCWlmICgwID09ICpmaXJzdF9mYWlsZWRfY21kKQorCQkqZmlyc3RfZmFpbGVkX2NtZCA9IFBlbmRpbmdDTURbaWR4XS5TQkRDbWRJbmRleDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiVW5jb3JyZWN0YWJsZSBlcnJvciBoYXMgb2NjdXJlZCAiCisJCSJ3aGlsZSBleGVjdXRpbmcgJXUgQ29tbWFuZCAldSBhY2Nlc2luZyBCbG9jayAldVxuIiwKKwkJKHVuc2lnbmVkIGludClwX0JUYWJsZUNoYW5nZXNEZWx0YS0+ZnRsX2NtZF9jbnQsCisJCVBlbmRpbmdDTURbaWR4XS5DTUQsCisJCSh1bnNpZ25lZCBpbnQpUGVuZGluZ0NNRFtpZHhdLkJsb2NrKTsKKworCWZ0bF9jbWQgPSBwX0JUYWJsZUNoYW5nZXNEZWx0YS0+ZnRsX2NtZF9jbnQ7CisJd2hpbGUgKGZ0bF9jbWQgPD0gUGVuZGluZ0NNRFtpZHhdLlRhZykgeworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YSArPSAxOworCQlmdGxfY21kID0gcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250OworCX0KKworI2lmIFJFU1RPUkVfQ0FDSEVfT05fQ0RNQV9DSEFJTl9GQUlMVVJFCisJaWQgPSBpZHggLSBNQVhfQ0hBTlM7CisKKwlpZiAoaW50X2NhY2hlW2lkXS5pdGVtICE9IC0xKSB7CisJCWNhY2hlX2Jsa3MgPSBpbnRfY2FjaGVbaWRdLml0ZW07CisJCWlmICgoUGVuZGluZ0NNRFtpZHhdLkNNRCA9PSBXUklURV9NQUlOX0NNRCkpIHsKKwkJCWNhY2hlX3N0YXJ0X2NvcHkuYXJyYXlbY2FjaGVfYmxrc10uYWRkcmVzcyA9CisJCQkJCWludF9jYWNoZVtpZF0uY2FjaGUuYWRkcmVzczsKKwkJCWNhY2hlX3N0YXJ0X2NvcHkuYXJyYXlbY2FjaGVfYmxrc10uY2hhbmdlZCA9IFNFVDsKKwkJfSBlbHNlIGlmICgoUGVuZGluZ0NNRFtpZHhdLkNNRCA9PSBSRUFEX01BSU5fQ01EKSkgeworCQkJY2FjaGVfc3RhcnRfY29weS5hcnJheVtjYWNoZV9ibGtzXS5hZGRyZXNzID0KKwkJCQlOQU5EX0NBQ0hFX0lOSVRfQUREUjsKKwkJCWNhY2hlX3N0YXJ0X2NvcHkuYXJyYXlbY2FjaGVfYmxrc10udXNlX2NudCA9IDA7CisJCQljYWNoZV9zdGFydF9jb3B5LmFycmF5W2NhY2hlX2Jsa3NdLmNoYW5nZWQgPQorCQkJCQkJCUNMRUFSOworCQl9IGVsc2UgaWYgKFBlbmRpbmdDTURbaWR4XS5DTUQgPT0gRVJBU0VfQ01EKSB7CisJCQkvKiA/ICovCisJCX0gZWxzZSBpZiAoUGVuZGluZ0NNRFtpZHhdLkNNRCA9PSBNRU1DT1BZX0NNRCkgeworCQkJLyogPyAqLworCQl9CisJfQorI2VuZGlmCisKKwllcmFzZV9mYWlsID0gKGV2ZW50ID09IEVWRU5UX0VSQVNFX0ZBSUxVUkUpICYmCisJCQkoUGVuZGluZ0NNRFtpZHhdLkNNRCA9PSBFUkFTRV9DTUQpOworCisJcHJvZ3JhbV9mYWlsID0gKGV2ZW50ID09IEVWRU5UX1BST0dSQU1fRkFJTFVSRSkgJiYKKwkJCSgoUGVuZGluZ0NNRFtpZHhdLkNNRCA9PSBXUklURV9NQUlOX0NNRCkgfHwKKwkJCShQZW5kaW5nQ01EW2lkeF0uQ01EID09IFdSSVRFX01BSU5fU1BBUkVfQ01EKSk7CisKKwlpZiAoZXJhc2VfZmFpbCB8fCBwcm9ncmFtX2ZhaWwpIHsKKwkJZm9yIChpID0gMDsgaSA8IERldmljZUluZm8ud0RhdGFCbG9ja051bTsgaSsrKSB7CisJCQlpZiAoUGVuZGluZ0NNRFtpZHhdLkJsb2NrID09CisJCQkJKHBidFtpXSAmICh+QkFEX0JMT0NLKSkpCisJCQkJTUFSS19CTE9DS19BU19CQUQocGJ0W2ldKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc19jbWQoaW50ICpmaXJzdF9mYWlsZWRfY21kLCB1MTYgaWR4LCBpbnQgZXZlbnQpCit7CisJdTggZnRsX2NtZDsKKwlpbnQgY21kX21hdGNoID0gMDsKKworCWlmIChwX0JUYWJsZUNoYW5nZXNEZWx0YS0+ZnRsX2NtZF9jbnQgPT0gUGVuZGluZ0NNRFtpZHhdLlRhZykKKwkJY21kX21hdGNoID0gMTsKKworCWlmIChQZW5kaW5nQ01EW2lkeF0uU3RhdHVzID09IENNRF9QQVNTKSB7CisJCXByb2Nlc3NfY21kX3Bhc3MoZmlyc3RfZmFpbGVkX2NtZCwgaWR4KTsKKwl9IGVsc2UgaWYgKChQZW5kaW5nQ01EW2lkeF0uU3RhdHVzID09IENNRF9GQUlMKSB8fAorCQkJKFBlbmRpbmdDTURbaWR4XS5TdGF0dXMgPT0gQ01EX0FCT1JUKSkgeworCQlwcm9jZXNzX2NtZF9mYWlsX2Fib3J0KGZpcnN0X2ZhaWxlZF9jbWQsIGlkeCwgZXZlbnQpOworCX0gZWxzZSBpZiAoKFBlbmRpbmdDTURbaWR4XS5TdGF0dXMgPT0gQ01EX05PVF9ET05FKSAmJgorCQkJCQlQZW5kaW5nQ01EW2lkeF0uVGFnKSB7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJIiBDb21tYW5kIG5vLiAlaHUgaXMgbm90IGV4ZWN1dGVkXG4iLAorCQkJKHVuc2lnbmVkIGludClQZW5kaW5nQ01EW2lkeF0uVGFnKTsKKwkJZnRsX2NtZCA9IHBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5mdGxfY21kX2NudDsKKwkJd2hpbGUgKGZ0bF9jbWQgPD0gUGVuZGluZ0NNRFtpZHhdLlRhZykgeworCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEgKz0gMTsKKwkJCWZ0bF9jbWQgPSBwX0JUYWJsZUNoYW5nZXNEZWx0YS0+ZnRsX2NtZF9jbnQ7CisJCX0KKwl9Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgcHJvY2Vzc19jbWQoaW50ICpmaXJzdF9mYWlsZWRfY21kLCB1MTYgaWR4LCBpbnQgZXZlbnQpCit7CisJcHJpbnRrKEtFUk5fRVJSICJ0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmdW5jdGlvbi4gIgorCQkiU2hvdWxkIG5vdCBiZSBjYWxsZWQhIFxuIik7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAJR0xPQl9GVExfRXZlbnRfU3RhdHVzCisqIElucHV0czogICAgICAgbm9uZQorKiBPdXRwdXRzOiAgICAgIEV2ZW50IENvZGUKKyogRGVzY3JpcHRpb246CUl0IGlzIGNhbGxlZCBieSBTQkQgYWZ0ZXIgaGFyZHdhcmUgaW50ZXJydXB0IHNpZ25hbGxpbmcKKyogICAgICAgICAgICAgICBjb21wbGV0aW9uIG9mIGNvbW1hbmRzIGNoYWluCisqICAgICAgICAgICAgICAgSXQgZG9lcyBmb2xsb3dpbmcgdGhpbmdzCisqICAgICAgICAgICAgICAgZ2V0IGV2ZW50IHN0YXR1cyBmcm9tIExMRAorKiAgICAgICAgICAgICAgIGFuYWx5emUgY29tbWFuZCBjaGFpbiBzdGF0dXMKKyogICAgICAgICAgICAgICBkZXRlcm1pbmUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkCisqICAgICAgICAgICAgICAgYW5hbHl6ZSByZXN1bHRzCisqICAgICAgICAgICAgICAgcmVidWlsZCB0aGUgYmxvY2sgdGFibGUgaW4gY2FzZSBvZiB1bmNvcnJlY3RhYmxlIGVycm9yCisqICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50IGNvZGUKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCitpbnQgR0xPQl9GVExfRXZlbnRfU3RhdHVzKGludCAqZmlyc3RfZmFpbGVkX2NtZCkKK3sKKwlpbnQgZXZlbnRfY29kZSA9IFBBU1M7CisJdTE2IGlfUDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwkqZmlyc3RfZmFpbGVkX2NtZCA9IDA7CisKKwlldmVudF9jb2RlID0gR0xPQl9MTERfRXZlbnRfU3RhdHVzKCk7CisKKwlzd2l0Y2ggKGV2ZW50X2NvZGUpIHsKKwljYXNlIEVWRU5UX1BBU1M6CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiSGFuZGxpbmcgRVZFTlRfUEFTU1xuIik7CisJCWJyZWFrOworCWNhc2UgRVZFTlRfVU5DT1JSRUNUQUJMRV9EQVRBX0VSUk9SOgorCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkhhbmRsaW5nIFVuY29ycmVjdGFibGUgRUNDIVxuIik7CisJCWJyZWFrOworCWNhc2UgRVZFTlRfUFJPR1JBTV9GQUlMVVJFOgorCWNhc2UgRVZFTlRfRVJBU0VfRkFJTFVSRToKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwgIkhhbmRsaW5nIFVnbHkgY2FzZS4gIgorCQkJIkV2ZW50IGNvZGU6IDB4JXhcbiIsIGV2ZW50X2NvZGUpOworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YSA9CisJCQkoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSAqKWdfcEJURGVsdGE7CisJCWZvciAoaV9QID0gTUFYX0NIQU5TOyBpX1AgPCAoZnRsX2NtZF9jbnQgKyBNQVhfQ0hBTlMpOworCQkJCWlfUCsrKQorCQkJcHJvY2Vzc19jbWQoZmlyc3RfZmFpbGVkX2NtZCwgaV9QLCBldmVudF9jb2RlKTsKKwkJbWVtY3B5KGdfcEJsb2NrVGFibGUsIGdfcEJUU3RhcnRpbmdDb3B5LAorCQkJRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICogc2l6ZW9mKHUzMikpOworCQltZW1jcHkoZ19wV2VhckNvdW50ZXIsIGdfcFdlYXJDb3VudGVyQ29weSwKKwkJCURldmljZUluZm8ud0RhdGFCbG9ja051bSAqIHNpemVvZih1OCkpOworCQlpZiAoRGV2aWNlSW5mby5NTENEZXZpY2UpCisJCQltZW1jcHkoZ19wUmVhZENvdW50ZXIsIGdfcFJlYWRDb3VudGVyQ29weSwKKwkJCQlEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0gKiBzaXplb2YodTE2KSk7CisKKyNpZiBSRVNUT1JFX0NBQ0hFX09OX0NETUFfQ0hBSU5fRkFJTFVSRQorCQltZW1jcHkoKHZvaWQgKikmQ2FjaGUsICh2b2lkICopJmNhY2hlX3N0YXJ0X2NvcHksCisJCQlzaXplb2Yoc3RydWN0IGZsYXNoX2NhY2hlX3RhZykpOworCQltZW1zZXQoKHZvaWQgKikmaW50X2NhY2hlLCAtMSwKKwkJCXNpemVvZihzdHJ1Y3QgZmxhc2hfY2FjaGVfZGVsdGFfbGlzdF90YWcpICoKKwkJCShNQVhfREVTQ1MgKyBNQVhfQ0hBTlMpKTsKKyNlbmRpZgorCQlicmVhazsKKwlkZWZhdWx0OgorCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLAorCQkJIkhhbmRsaW5nIHVuZXhwZWN0ZWQgZXZlbnQgY29kZSAtIDB4JXhcbiIsCisJCQlldmVudF9jb2RlKTsKKwkJZXZlbnRfY29kZSA9IEVSUjsKKwkJYnJlYWs7CisJfQorCisJbWVtY3B5KGdfcEJUU3RhcnRpbmdDb3B5LCBnX3BCbG9ja1RhYmxlLAorCQlEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0gKiBzaXplb2YodTMyKSk7CisJbWVtY3B5KGdfcFdlYXJDb3VudGVyQ29weSwgZ19wV2VhckNvdW50ZXIsCisJCURldmljZUluZm8ud0RhdGFCbG9ja051bSAqIHNpemVvZih1OCkpOworCWlmIChEZXZpY2VJbmZvLk1MQ0RldmljZSkKKwkJbWVtY3B5KGdfcFJlYWRDb3VudGVyQ29weSwgZ19wUmVhZENvdW50ZXIsCisJCQlEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0gKiBzaXplb2YodTE2KSk7CisKKwlnX3BCVERlbHRhX0ZyZWUgPSBnX3BCVERlbHRhOworCWZ0bF9jbWRfY250ID0gMDsKKwlnX3BOZXh0QmxvY2tUYWJsZSA9IGdfcEJsb2NrVGFibGVDb3BpZXM7CisJY3BfYmFja19idWZfaWR4ID0gMDsKKworI2lmIFJFU1RPUkVfQ0FDSEVfT05fQ0RNQV9DSEFJTl9GQUlMVVJFCisJbWVtY3B5KCh2b2lkICopJmNhY2hlX3N0YXJ0X2NvcHksICh2b2lkICopJkNhY2hlLAorCQlzaXplb2Yoc3RydWN0IGZsYXNoX2NhY2hlX3RhZykpOworCW1lbXNldCgodm9pZCAqKSZpbnRfY2FjaGUsIC0xLAorCQlzaXplb2Yoc3RydWN0IGZsYXNoX2NhY2hlX2RlbHRhX2xpc3RfdGFnKSAqCisJCShNQVhfREVTQ1MgKyBNQVhfQ0hBTlMpKTsKKyNlbmRpZgorCisJcmV0dXJuIGV2ZW50X2NvZGU7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBnbG9iX2Z0bF9leGVjdXRlX2NtZHMKKyogSW5wdXRzOiAgICAgICBub25lCisqIE91dHB1dHM6ICAgICAgbm9uZQorKiBEZXNjcmlwdGlvbjogIHBhc3MgdGhydSB0byBMTEQKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UxNiBnbG9iX2Z0bF9leGVjdXRlX2NtZHModm9pZCkKK3sKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwKKwkJImdsb2JfZnRsX2V4ZWN1dGVfY21kczogZnRsX2NtZF9jbnQgJXVcbiIsCisJCSh1bnNpZ25lZCBpbnQpZnRsX2NtZF9jbnQpOworCWdfU0JEQ21kSW5kZXggPSAwOworCXJldHVybiBnbG9iX2xsZF9leGVjdXRlX2NtZHMoKTsKK30KKworI2VuZGlmCisKKyNpZiAhQ01EX0RNQQorLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBHTE9CX0ZUTF9SZWFkIEltbWVkaWF0ZQorKiBJbnB1dHM6ICAgICAgICAgcG9pbnRlciB0byBkYXRhCisqICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcyBvZiBkYXRhCisqIE91dHB1dHM6ICAgICAgUEFTUyAvIEZBSUwKKyogRGVzY3JpcHRpb246ICBSZWFkcyBvbmUgcGFnZSBvZiBkYXRhIGludG8gUkFNIGRpcmVjdGx5IGZyb20gZmxhc2ggd2l0aG91dAorKiAgICAgICB1c2luZyBvciBkaXN0dXJiaW5nIGNhY2hlLkl0IGlzIGFzc3VtZWQgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQKKyogICAgICAgd2l0aCBDTUQtRE1BIGRpc2FibGVkLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgR0xPQl9GVExfUmVhZF9JbW1lZGlhdGUodTggKnJlYWRfZGF0YSwgdTY0IGFkZHIpCit7CisJaW50IHdSZXN1bHQgPSBGQUlMOworCXUzMiBCbG9jazsKKwl1MTYgUGFnZTsKKwl1MzIgcGh5X2JsazsKKwl1MzIgKnBidCA9ICh1MzIgKilnX3BCbG9ja1RhYmxlOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCUJsb2NrID0gQkxLX0ZST01fQUREUihhZGRyKTsKKwlQYWdlID0gUEFHRV9GUk9NX0FERFIoYWRkciwgQmxvY2spOworCisJaWYgKCFJU19TUEFSRV9CTE9DSyhCbG9jaykpCisJCXJldHVybiBGQUlMOworCisJcGh5X2JsayA9IHBidFtCbG9ja107CisJd1Jlc3VsdCA9IEdMT0JfTExEX1JlYWRfUGFnZV9NYWluKHJlYWRfZGF0YSwgcGh5X2JsaywgUGFnZSwgMSk7CisKKwlpZiAoRGV2aWNlSW5mby5NTENEZXZpY2UpIHsKKwkJZ19wUmVhZENvdW50ZXJbcGh5X2JsayAtIERldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrXSsrOworCQlpZiAoZ19wUmVhZENvdW50ZXJbcGh5X2JsayAtIERldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrXQorCQkJPj0gTUFYX1JFQURfQ09VTlRFUikKKwkJCUZUTF9SZWFkX0Rpc3R1cmJhbmNlKHBoeV9ibGspOworCQlpZiAoZ19jQmxvY2tUYWJsZVN0YXR1cyAhPSBJTl9QUk9HUkVTU19CTE9DS19UQUJMRSkgeworCQkJZ19jQmxvY2tUYWJsZVN0YXR1cyA9IElOX1BST0dSRVNTX0JMT0NLX1RBQkxFOworCQkJRlRMX1dyaXRlX0lOX1Byb2dyZXNzX0Jsb2NrX1RhYmxlX1BhZ2UoKTsKKwkJfQorCX0KKworCXJldHVybiB3UmVzdWx0OworfQorI2VuZGlmCisKKyNpZmRlZiBTVVBQT1JUX0JJR19FTkRJQU4KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRnVuY3Rpb246ICAgICBGVExfSW52ZXJ0X0Jsb2NrX1RhYmxlCisqIElucHV0czogICAgICAgbm9uZQorKiBPdXRwdXRzOiAgICAgIG5vbmUKKyogRGVzY3JpcHRpb246ICBSZS1mb3JtYXQgdGhlIGJsb2NrIHRhYmxlIGluIHJhbSBiYXNlZCBvbiBCSUdfRU5ESUFOIGFuZAorKiAgICAgICAgICAgICAgICAgICAgIExBUkdFX0JMT0NLTlVNIGlmIG5lY2Vzc2FyeQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIEZUTF9JbnZlcnRfQmxvY2tfVGFibGUodm9pZCkKK3sKKwl1MzIgaTsKKwl1MzIgKnBidCA9ICh1MzIgKilnX3BCbG9ja1RhYmxlOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworI2lmZGVmIFNVUFBPUlRfTEFSR0VfQkxPQ0tOVU0KKwlmb3IgKGkgPSAwOyBpIDwgRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtOyBpKyspIHsKKwkJcGJ0W2ldID0gSU5WRVJUVUlOVDMyKHBidFtpXSk7CisJCWdfcFdlYXJDb3VudGVyW2ldID0gSU5WRVJUVUlOVDMyKGdfcFdlYXJDb3VudGVyW2ldKTsKKwl9CisjZWxzZQorCWZvciAoaSA9IDA7IGkgPCBEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW07IGkrKykgeworCQlwYnRbaV0gPSBJTlZFUlRVSU5UMTYocGJ0W2ldKTsKKwkJZ19wV2VhckNvdW50ZXJbaV0gPSBJTlZFUlRVSU5UMTYoZ19wV2VhckNvdW50ZXJbaV0pOworCX0KKyNlbmRpZgorfQorI2VuZGlmCisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgR0xPQl9GVExfRmxhc2hfSW5pdAorKiBJbnB1dHM6ICAgICAgIG5vbmUKKyogT3V0cHV0czogICAgICBQQVNTPTAgLyBGQUlMPTB4MDEgKGJhc2VkIG9uIHJlYWQgSUQpCisqIERlc2NyaXB0aW9uOiAgVGhlIGZsYXNoIGNvbnRyb2xsZXIgaXMgaW5pdGlhbGl6ZWQKKyogICAgICAgICAgICAgICBUaGUgZmxhc2ggZGV2aWNlIGlzIHJlc2V0CisqICAgICAgICAgICAgICAgUGVyZm9ybSBhIGZsYXNoIFJFQUQgSUQgY29tbWFuZCB0byBjb25maXJtIHRoYXQgYQorKiAgICAgICAgICAgICAgICAgICB2YWxpZCBkZXZpY2UgaXMgYXR0YWNoZWQgYW5kIGFjdGl2ZS4KKyogICAgICAgICAgICAgICAgICAgVGhlIERldmljZUluZm8gc3RydWN0dXJlIGdldHMgZmlsbGVkIGluCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworaW50IEdMT0JfRlRMX0ZsYXNoX0luaXQodm9pZCkKK3sKKwlpbnQgc3RhdHVzID0gRkFJTDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlnX1NCRENtZEluZGV4ID0gMDsKKworCUdMT0JfTExEX0ZsYXNoX0luaXQoKTsKKworCXN0YXR1cyA9IEdMT0JfTExEX1JlYWRfRGV2aWNlX0lEKCk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogSW5wdXRzOiAgICAgICBub25lCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIC8gRkFJTD0weDAxIChiYXNlZCBvbiByZWFkIElEKQorKiBEZXNjcmlwdGlvbjogIFRoZSBmbGFzaCBjb250cm9sbGVyIGlzIHJlbGVhc2VkCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworaW50IEdMT0JfRlRMX0ZsYXNoX1JlbGVhc2Uodm9pZCkKK3sKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJcmV0dXJuIEdMT0JfTExEX0ZsYXNoX1JlbGVhc2UoKTsKK30KKworCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEdMT0JfRlRMX0NhY2hlX1JlbGVhc2UKKyogSW5wdXRzOiAgICAgICBub25lCisqIE91dHB1dHM6ICAgICAgbm9uZQorKiBEZXNjcmlwdGlvbjogIHJlbGVhc2UgYWxsIGFsbG9jYXRlZCBtZW1vcnkgaW4gR0xPQl9GVExfSW5pdAorKiAgICAgICAgICAgICAgIChhbGxvY2F0ZWQgaW4gR0xPQl9GVExfSW5pdCkKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCit2b2lkIEdMT0JfRlRMX0NhY2hlX1JlbGVhc2Uodm9pZCkKK3sKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlmcmVlX21lbW9yeSgpOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEZUTF9DYWNoZV9JZl9IaXQKKyogSW5wdXRzOiAgICAgICBQYWdlIEFkZHJlc3MKKyogT3V0cHV0czogICAgICBCbG9jayBudW1iZXIvVU5ISVQgQkxPQ0sKKyogRGVzY3JpcHRpb246ICBEZXRlcm1pbmVzIGlmIHRoZSBhZGRyZXNzZWQgcGFnZSBpcyBpbiBjYWNoZQorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3N0YXRpYyB1MTYgRlRMX0NhY2hlX0lmX0hpdCh1NjQgcGFnZV9hZGRyKQoreworCXUxNiBpdGVtOworCXU2NCBhZGRyOworCWludCBpOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWl0ZW0gPSBVTkhJVF9DQUNIRV9JVEVNOworCWZvciAoaSA9IDA7IGkgPCBDQUNIRV9JVEVNX05VTTsgaSsrKSB7CisJCWFkZHIgPSBDYWNoZS5hcnJheVtpXS5hZGRyZXNzOworCQlpZiAoKHBhZ2VfYWRkciA+PSBhZGRyKSAmJgorCQkJKHBhZ2VfYWRkciA8IChhZGRyICsgQ2FjaGUuY2FjaGVfaXRlbV9zaXplKSkpIHsKKwkJCWl0ZW0gPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gaXRlbTsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBGVExfQ2FsY3VsYXRlX0xSVQorKiBJbnB1dHM6ICAgICAgIE5vbmUKKyogT3V0cHV0czogICAgICBOb25lCisqIERlc2NyaXB0aW9uOiAgQ2FsY3VsYXRlIHRoZSBsZWFzdCByZWNlbnRseSBibG9jayBpbiBhIGNhY2hlIGFuZCByZWNvcmQgaXRzCisqICAgICAgICAgICAgICAgaW5kZXggaW4gTFJVIGZpZWxkLgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3N0YXRpYyB2b2lkIEZUTF9DYWxjdWxhdGVfTFJVKHZvaWQpCit7CisJdTE2IGksIGJDdXJyZW50TFJVLCBiVGVtcENvdW50OworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWJDdXJyZW50TFJVID0gMDsKKwliVGVtcENvdW50ID0gTUFYX1dPUkRfVkFMVUU7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ0FDSEVfSVRFTV9OVU07IGkrKykgeworCQlpZiAoQ2FjaGUuYXJyYXlbaV0udXNlX2NudCA8IGJUZW1wQ291bnQpIHsKKwkJCWJDdXJyZW50TFJVID0gaTsKKwkJCWJUZW1wQ291bnQgPSBDYWNoZS5hcnJheVtpXS51c2VfY250OworCQl9CisJfQorCisJQ2FjaGUuTFJVID0gYkN1cnJlbnRMUlU7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgRlRMX0NhY2hlX1JlYWRfUGFnZQorKiBJbnB1dHM6ICAgICAgIHBvaW50ZXIgdG8gcmVhZCBidWZmZXIsIGxvZ2ljYWwgYWRkcmVzcyBhbmQgY2FjaGUgaXRlbSBudW1iZXIKKyogT3V0cHV0czogICAgICBOb25lCisqIERlc2NyaXB0aW9uOiAgUmVhZCB0aGUgcGFnZSBmcm9tIHRoZSBjYWNoZWQgYmxvY2sgYWRkcmVzc2VkIGJ5IGJsb2NrbnVtYmVyCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworc3RhdGljIHZvaWQgRlRMX0NhY2hlX1JlYWRfUGFnZSh1OCAqZGF0YV9idWYsIHU2NCBsb2dpY19hZGRyLCB1MTYgY2FjaGVfaXRlbSkKK3sKKwl1OCAqc3RhcnRfYWRkcjsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlzdGFydF9hZGRyID0gQ2FjaGUuYXJyYXlbY2FjaGVfaXRlbV0uYnVmOworCXN0YXJ0X2FkZHIgKz0gKHUzMikoKChsb2dpY19hZGRyIC0gQ2FjaGUuYXJyYXlbY2FjaGVfaXRlbV0uYWRkcmVzcykgPj4KKwkJRGV2aWNlSW5mby5uQml0c0luUGFnZURhdGFTaXplKSAqIERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSk7CisKKyNpZiBDTURfRE1BCisJR0xPQl9MTERfTWVtQ29weV9DTUQoZGF0YV9idWYsIHN0YXJ0X2FkZHIsCisJCQlEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUsIDApOworCWZ0bF9jbWRfY250Kys7CisjZWxzZQorCW1lbWNweShkYXRhX2J1Ziwgc3RhcnRfYWRkciwgRGV2aWNlSW5mby53UGFnZURhdGFTaXplKTsKKyNlbmRpZgorCisJaWYgKENhY2hlLmFycmF5W2NhY2hlX2l0ZW1dLnVzZV9jbnQgPCBNQVhfV09SRF9WQUxVRSkKKwkJQ2FjaGUuYXJyYXlbY2FjaGVfaXRlbV0udXNlX2NudCsrOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEZUTF9DYWNoZV9SZWFkX0FsbAorKiBJbnB1dHM6ICAgICAgIHBvaW50ZXIgdG8gcmVhZCBidWZmZXIsYmxvY2sgYWRkcmVzcworKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAvIEZBSUwgPTEKKyogRGVzY3JpcHRpb246ICBJdCByZWFkcyBwYWdlcyBpbiBjYWNoZQorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3N0YXRpYyBpbnQgRlRMX0NhY2hlX1JlYWRfQWxsKHU4ICpwRGF0YSwgdTY0IHBoeV9hZGRyKQoreworCWludCB3UmVzdWx0ID0gUEFTUzsKKwl1MzIgQmxvY2s7CisJdTMyIGxiYTsKKwl1MTYgUGFnZTsKKwl1MTYgUGFnZUNvdW50OworCXUzMiAqcGJ0ID0gKHUzMiAqKWdfcEJsb2NrVGFibGU7CisJdTMyIGk7CisKKwlCbG9jayA9IEJMS19GUk9NX0FERFIocGh5X2FkZHIpOworCVBhZ2UgPSBQQUdFX0ZST01fQUREUihwaHlfYWRkciwgQmxvY2spOworCVBhZ2VDb3VudCA9IENhY2hlLnBhZ2VzX3Blcl9pdGVtOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlcywgQmxvY2s6IDB4JXhcbiIsCisJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fLCBCbG9jayk7CisKKwlsYmEgPSAweGZmZmZmZmZmOworCWZvciAoaSA9IDA7IGkgPCBEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW07IGkrKykgeworCQlpZiAoKHBidFtpXSAmICh+QkFEX0JMT0NLKSkgPT0gQmxvY2spIHsKKwkJCWxiYSA9IGk7CisJCQlpZiAoSVNfU1BBUkVfQkxPQ0soaSkgfHwgSVNfQkFEX0JMT0NLKGkpIHx8CisJCQkJSVNfRElTQ0FSREVEX0JMT0NLKGkpKSB7CisJCQkJLyogQWRkIGJ5IHl1bnBlbmcgLTIwMDguMTIuMyAqLworI2lmIENNRF9ETUEKKwkJCQlHTE9CX0xMRF9NZW1Db3B5X0NNRChwRGF0YSwgZ190ZW1wX2J1ZiwKKwkJCQlQYWdlQ291bnQgKiBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUsIDApOworCQkJCWZ0bF9jbWRfY250Kys7CisjZWxzZQorCQkJCW1lbXNldChwRGF0YSwgMHhGRiwKKwkJCQkJUGFnZUNvdW50ICogRGV2aWNlSW5mby53UGFnZURhdGFTaXplKTsKKyNlbmRpZgorCQkJCXJldHVybiB3UmVzdWx0OworCQkJfSBlbHNlIHsKKwkJCQljb250aW51ZTsgLyogYnJlYWsgPz8gKi8KKwkJCX0KKwkJfQorCX0KKworCWlmICgweGZmZmZmZmZmID09IGxiYSkKKwkJcHJpbnRrKEtFUk5fRVJSICJGVExfQ2FjaGVfUmVhZF9BbGw6IEJsb2NrIGlzIG5vdCBmb3VuZCBpbiBCVFxuIik7CisKKyNpZiBDTURfRE1BCisJd1Jlc3VsdCA9IEdMT0JfTExEX1JlYWRfUGFnZV9NYWluX2NkbWEocERhdGEsIEJsb2NrLCBQYWdlLAorCQkJUGFnZUNvdW50LCBMTERfQ01EX0ZMQUdfTU9ERV9DRE1BKTsKKwlpZiAoRGV2aWNlSW5mby5NTENEZXZpY2UpIHsKKwkJZ19wUmVhZENvdW50ZXJbQmxvY2sgLSBEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9ja10rKzsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkgICAgICAgIlJlYWQgQ291bnRlciBtb2RpZmllZCBpbiBmdGxfY21kX2NudCAldSIKKwkJCQkiIEJsb2NrICV1IENvdW50ZXIldVxuIiwKKwkJCSAgICAgICBmdGxfY21kX2NudCwgKHVuc2lnbmVkIGludClCbG9jaywKKwkJCSAgICAgICBnX3BSZWFkQ291bnRlcltCbG9jayAtCisJCQkgICAgICAgRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2tdKTsKKworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YSA9CisJCQkoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSAqKWdfcEJURGVsdGFfRnJlZTsKKwkJZ19wQlREZWx0YV9GcmVlICs9IHNpemVvZihzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhKTsKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250ID0gZnRsX2NtZF9jbnQ7CisJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5SQ19JbmRleCA9CisJCQlCbG9jayAtIERldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrOworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+UkNfRW50cnlfVmFsdWUgPQorCQkJZ19wUmVhZENvdW50ZXJbQmxvY2sgLSBEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9ja107CisJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5WYWxpZEZpZWxkcyA9IDB4QzA7CisKKwkJZnRsX2NtZF9jbnQrKzsKKworCQlpZiAoZ19wUmVhZENvdW50ZXJbQmxvY2sgLSBEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9ja10gPj0KKwkJICAgIE1BWF9SRUFEX0NPVU5URVIpCisJCQlGVExfUmVhZF9EaXN0dXJiYW5jZShCbG9jayk7CisJCWlmIChnX2NCbG9ja1RhYmxlU3RhdHVzICE9IElOX1BST0dSRVNTX0JMT0NLX1RBQkxFKSB7CisJCQlnX2NCbG9ja1RhYmxlU3RhdHVzID0gSU5fUFJPR1JFU1NfQkxPQ0tfVEFCTEU7CisJCQlGVExfV3JpdGVfSU5fUHJvZ3Jlc3NfQmxvY2tfVGFibGVfUGFnZSgpOworCQl9CisJfSBlbHNlIHsKKwkJZnRsX2NtZF9jbnQrKzsKKwl9CisjZWxzZQorCXdSZXN1bHQgPSBHTE9CX0xMRF9SZWFkX1BhZ2VfTWFpbihwRGF0YSwgQmxvY2ssIFBhZ2UsIFBhZ2VDb3VudCk7CisJaWYgKHdSZXN1bHQgPT0gRkFJTCkKKwkJcmV0dXJuIHdSZXN1bHQ7CisKKwlpZiAoRGV2aWNlSW5mby5NTENEZXZpY2UpIHsKKwkJZ19wUmVhZENvdW50ZXJbQmxvY2sgLSBEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9ja10rKzsKKwkJaWYgKGdfcFJlYWRDb3VudGVyW0Jsb2NrIC0gRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2tdID49CisJCQkJCQlNQVhfUkVBRF9DT1VOVEVSKQorCQkJRlRMX1JlYWRfRGlzdHVyYmFuY2UoQmxvY2spOworCQlpZiAoZ19jQmxvY2tUYWJsZVN0YXR1cyAhPSBJTl9QUk9HUkVTU19CTE9DS19UQUJMRSkgeworCQkJZ19jQmxvY2tUYWJsZVN0YXR1cyA9IElOX1BST0dSRVNTX0JMT0NLX1RBQkxFOworCQkJRlRMX1dyaXRlX0lOX1Byb2dyZXNzX0Jsb2NrX1RhYmxlX1BhZ2UoKTsKKwkJfQorCX0KKyNlbmRpZgorCXJldHVybiB3UmVzdWx0OworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgRlRMX0NhY2hlX1dyaXRlX0FsbAorKiBJbnB1dHM6ICAgICAgIHBvaW50ZXIgdG8gY2FjaGUgaW4gc3lzIG1lbW9yeQorKiAgICAgICAgICAgICAgIGFkZHJlc3Mgb2YgZnJlZSBibG9jayBpbiBmbGFzaAorKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAvIEZBSUw9MQorKiBEZXNjcmlwdGlvbjogIHdyaXRlcyBhbGwgdGhlIHBhZ2VzIG9mIHRoZSBibG9jayBpbiBjYWNoZSB0byBmbGFzaAorKgorKiAgICAgICAgICAgICAgIE5PVEU6bmVlZCB0byBtYWtlIHN1cmUgdGhpcyB3b3JrcyBvayB3aGVuIGNhY2hlIGlzIGxpbWl0ZWQKKyogICAgICAgICAgICAgICB0byBhIHBhcnRpYWwgYmxvY2suIFRoaXMgaXMgd2hlcmUgY29weS1iYWNrIHdvdWxkIGJlCisqICAgICAgICAgICAgICAgYWN0aXZhdGVkLiAgVGhpcyB3b3VsZCByZXF1aXJlIGtub3dpbmcgd2hpY2ggcGFnZXMgaW4gdGhlCisqICAgICAgICAgICAgICAgY2FjaGVkIGJsb2NrIGFyZSBjbGVhbi9kaXJ0eS5SaWdodCBub3cgd2Ugb25seSBrbm93IGlmCisqICAgICAgICAgICAgICAgdGhlIHdob2xlIGJsb2NrIGlzIGNsZWFuL2RpcnR5LgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCitzdGF0aWMgaW50IEZUTF9DYWNoZV9Xcml0ZV9BbGwodTggKnBEYXRhLCB1NjQgYmxrX2FkZHIpCit7CisJdTE2IHdSZXN1bHQgPSBQQVNTOworCXUzMiBCbG9jazsKKwl1MTYgUGFnZTsKKwl1MTYgUGFnZUNvdW50OworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJUaGlzIGJsb2NrICVkIGdvaW5nIHRvIGJlIHdyaXR0ZW4gIgorCQkib24gJWRcbiIsIGNhY2hlX2Jsb2NrX3RvX3dyaXRlLAorCQkodTMyKShibGtfYWRkciA+PiBEZXZpY2VJbmZvLm5CaXRzSW5CbG9ja0RhdGFTaXplKSk7CisKKwlCbG9jayA9IEJMS19GUk9NX0FERFIoYmxrX2FkZHIpOworCVBhZ2UgPSBQQUdFX0ZST01fQUREUihibGtfYWRkciwgQmxvY2spOworCVBhZ2VDb3VudCA9IENhY2hlLnBhZ2VzX3Blcl9pdGVtOworCisjaWYgQ01EX0RNQQorCWlmIChGQUlMID09IEdMT0JfTExEX1dyaXRlX1BhZ2VfTWFpbl9jZG1hKHBEYXRhLAorCQkJCQlCbG9jaywgUGFnZSwgUGFnZUNvdW50KSkgeworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLAorCQkJIk5BTkQgUHJvZ3JhbSBmYWlsIGluICVzLCBMaW5lICVkLCAiCisJCQkiRnVuY3Rpb246ICVzLCBuZXcgQmFkIEJsb2NrICVkIGdlbmVyYXRlZCEgIgorCQkJIk5lZWQgQmFkIEJsb2NrIHJlcGxhY2luZy5cbiIsCisJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fLCBCbG9jayk7CisJCXdSZXN1bHQgPSBGQUlMOworCX0KKwlmdGxfY21kX2NudCsrOworI2Vsc2UKKwlpZiAoRkFJTCA9PSBHTE9CX0xMRF9Xcml0ZV9QYWdlX01haW4ocERhdGEsIEJsb2NrLCBQYWdlLCBQYWdlQ291bnQpKSB7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sICJOQU5EIFByb2dyYW0gZmFpbCBpbiAlcywiCisJCQkiIExpbmUgJWQsIEZ1bmN0aW9uICVzLCBuZXcgQmFkIEJsb2NrICVkIGdlbmVyYXRlZCEiCisJCQkiTmVlZCBCYWQgQmxvY2sgcmVwbGFjaW5nLlxuIiwKKwkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18sIEJsb2NrKTsKKwkJd1Jlc3VsdCA9IEZBSUw7CisJfQorI2VuZGlmCisJcmV0dXJuIHdSZXN1bHQ7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgRlRMX0NhY2hlX1VwZGF0ZV9CbG9jaworKiBJbnB1dHM6ICAgICAgIHBvaW50ZXIgdG8gYnVmZmVyLHBhZ2UgYWRkcmVzcyxibG9jayBhZGRyZXNzCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIC8gRkFJTD0xCisqIERlc2NyaXB0aW9uOiAgSXQgdXBkYXRlcyB0aGUgY2FjaGUKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3N0YXRpYyBpbnQgRlRMX0NhY2hlX1VwZGF0ZV9CbG9jayh1OCAqcERhdGEsCisJCQl1NjQgb2xkX3BhZ2VfYWRkciwgdTY0IGJsa19hZGRyKQoreworCWludCBpLCBqOworCXU4ICpidWYgPSBwRGF0YTsKKwlpbnQgd1Jlc3VsdCA9IFBBU1M7CisJaW50IHdGb3VuZEluQ2FjaGU7CisJdTY0IHBhZ2VfYWRkcjsKKwl1NjQgYWRkcjsKKwl1NjQgb2xkX2Jsa19hZGRyOworCXUxNiBwYWdlX29mZnNldDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCW9sZF9ibGtfYWRkciA9ICh1NjQpKG9sZF9wYWdlX2FkZHIgPj4KKwkJRGV2aWNlSW5mby5uQml0c0luQmxvY2tEYXRhU2l6ZSkgKiBEZXZpY2VJbmZvLndCbG9ja0RhdGFTaXplOworCXBhZ2Vfb2Zmc2V0ID0gKHUxNikoR0xPQl91NjRfUmVtYWluZGVyKG9sZF9wYWdlX2FkZHIsIDIpID4+CisJCURldmljZUluZm8ubkJpdHNJblBhZ2VEYXRhU2l6ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jazsgaSArPSBDYWNoZS5wYWdlc19wZXJfaXRlbSkgeworCQlwYWdlX2FkZHIgPSBvbGRfYmxrX2FkZHIgKyBpICogRGV2aWNlSW5mby53UGFnZURhdGFTaXplOworCQlpZiAoaSAhPSBwYWdlX29mZnNldCkgeworCQkJd0ZvdW5kSW5DYWNoZSA9IEZBSUw7CisJCQlmb3IgKGogPSAwOyBqIDwgQ0FDSEVfSVRFTV9OVU07IGorKykgeworCQkJCWFkZHIgPSBDYWNoZS5hcnJheVtqXS5hZGRyZXNzOworCQkJCWFkZHIgPSBGVExfR2V0X1BoeXNpY2FsX0Jsb2NrX0FkZHIoYWRkcikgKworCQkJCQlHTE9CX3U2NF9SZW1haW5kZXIoYWRkciwgMik7CisJCQkJaWYgKChhZGRyID49IHBhZ2VfYWRkcikgJiYgYWRkciA8CisJCQkJCShwYWdlX2FkZHIgKyBDYWNoZS5jYWNoZV9pdGVtX3NpemUpKSB7CisJCQkJCXdGb3VuZEluQ2FjaGUgPSBQQVNTOworCQkJCQlidWYgPSBDYWNoZS5hcnJheVtqXS5idWY7CisJCQkJCUNhY2hlLmFycmF5W2pdLmNoYW5nZWQgPSBTRVQ7CisjaWYgQ01EX0RNQQorI2lmIFJFU1RPUkVfQ0FDSEVfT05fQ0RNQV9DSEFJTl9GQUlMVVJFCisJCQkJCWludF9jYWNoZVtmdGxfY21kX2NudF0uaXRlbSA9IGo7CisJCQkJCWludF9jYWNoZVtmdGxfY21kX2NudF0uY2FjaGUuYWRkcmVzcyA9CisJCQkJCQlDYWNoZS5hcnJheVtqXS5hZGRyZXNzOworCQkJCQlpbnRfY2FjaGVbZnRsX2NtZF9jbnRdLmNhY2hlLmNoYW5nZWQgPQorCQkJCQkJQ2FjaGUuYXJyYXlbal0uY2hhbmdlZDsKKyNlbmRpZgorI2VuZGlmCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmIChGQUlMID09IHdGb3VuZEluQ2FjaGUpIHsKKwkJCQlpZiAoRVJSID09IEZUTF9DYWNoZV9SZWFkX0FsbChnX3BUZW1wQnVmLAorCQkJCQlwYWdlX2FkZHIpKSB7CisJCQkJCXdSZXN1bHQgPSBGQUlMOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJYnVmID0gZ19wVGVtcEJ1ZjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWJ1ZiA9IHBEYXRhOworCQl9CisKKwkJaWYgKEZBSUwgPT0gRlRMX0NhY2hlX1dyaXRlX0FsbChidWYsCisJCQlibGtfYWRkciArIChwYWdlX2FkZHIgLSBvbGRfYmxrX2FkZHIpKSkgeworCQkJd1Jlc3VsdCA9IEZBSUw7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiB3UmVzdWx0OworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEZUTF9Db3B5X0Jsb2NrCisqIElucHV0czogICAgICAgc291cmNlIGJsb2NrIGFkZHJlc3MKKyogICAgICAgICAgICAgICBEZXN0aW5hdGlvbiBibG9jayBhZGRyZXNzCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIC8gRkFJTD0xCisqIERlc2NyaXB0aW9uOiAgdXNlZCBvbmx5IGZvciBzdGF0aWMgd2VhciBsZXZlbGluZyB0byBtb3ZlIHRoZSBibG9jaworKiAgICAgICAgICAgICAgIGNvbnRhaW5pbmcgc3RhdGljIGRhdGEgdG8gbmV3IGJsb2Nrcyhtb3JlIHdvcm4pCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworaW50IEZUTF9Db3B5X0Jsb2NrKHU2NCBvbGRfYmxrX2FkZHIsIHU2NCBibGtfYWRkcikKK3sKKwlpbnQgaSwgcjEsIHIyLCB3UmVzdWx0ID0gUEFTUzsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jazsgaSArPSBDYWNoZS5wYWdlc19wZXJfaXRlbSkgeworCQlyMSA9IEZUTF9DYWNoZV9SZWFkX0FsbChnX3BUZW1wQnVmLCBvbGRfYmxrX2FkZHIgKworCQkJCQlpICogRGV2aWNlSW5mby53UGFnZURhdGFTaXplKTsKKwkJcjIgPSBGVExfQ2FjaGVfV3JpdGVfQWxsKGdfcFRlbXBCdWYsIGJsa19hZGRyICsKKwkJCQkJaSAqIERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSk7CisJCWlmICgoRVJSID09IHIxKSB8fCAoRkFJTCA9PSByMikpIHsKKwkJCXdSZXN1bHQgPSBGQUlMOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gd1Jlc3VsdDsKK30KKworLyogU2VhcmNoIHRoZSBibG9jayB0YWJsZSB0byBmaW5kIG91dCB0aGUgbGVhc3Qgd2VhciBibG9jayBhbmQgdGhlbiByZXR1cm4gaXQgKi8KK3N0YXRpYyB1MzIgZmluZF9sZWFzdF93b3JuX2Jsa19mb3JfbDJfY2FjaGUodm9pZCkKK3sKKwlpbnQgaTsKKwl1MzIgKnBidCA9ICh1MzIgKilnX3BCbG9ja1RhYmxlOworCXU4IGxlYXN0X3dlYXJfY250ID0gTUFYX0JZVEVfVkFMVUU7CisJdTMyIGxlYXN0X3dlYXJfYmxrX2lkeCA9IE1BWF9VMzJfVkFMVUU7CisJdTMyIHBoeV9pZHg7CisKKwlmb3IgKGkgPSAwOyBpIDwgRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtOyBpKyspIHsKKwkJaWYgKElTX1NQQVJFX0JMT0NLKGkpKSB7CisJCQlwaHlfaWR4ID0gKHUzMikoKH5CQURfQkxPQ0spICYgcGJ0W2ldKTsKKwkJCWlmIChwaHlfaWR4ID4gRGV2aWNlSW5mby53U3BlY3RyYUVuZEJsb2NrKQorCQkJCXByaW50ayhLRVJOX0VSUiAiZmluZF9sZWFzdF93b3JuX2Jsa19mb3JfbDJfY2FjaGU6ICIKKwkJCQkJIlRvbyBiaWcgcGh5IGJsb2NrIG51bSAoJWQpXG4iLCBwaHlfaWR4KTsKKwkJCWlmIChnX3BXZWFyQ291bnRlcltwaHlfaWR4IC1EZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9ja10gPCBsZWFzdF93ZWFyX2NudCkgeworCQkJCWxlYXN0X3dlYXJfY250ID0gZ19wV2VhckNvdW50ZXJbcGh5X2lkeCAtIERldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrXTsKKwkJCQlsZWFzdF93ZWFyX2Jsa19pZHggPSBpOworCQkJfQorCQl9CisJfQorCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJImZpbmRfbGVhc3Rfd29ybl9ibGtfZm9yX2wyX2NhY2hlOiAiCisJCSJmaW5kIGJsb2NrICVkIHdpdGggbGVhc3Qgd29ybiBjb3VudGVyICglZClcbiIsCisJCWxlYXN0X3dlYXJfYmxrX2lkeCwgbGVhc3Rfd2Vhcl9jbnQpOworCisJcmV0dXJuIGxlYXN0X3dlYXJfYmxrX2lkeDsKK30KKworCisKKy8qIEdldCBibG9ja3MgZm9yIExldmVsMiBDYWNoZSAqLworc3RhdGljIGludCBnZXRfbDJfY2FjaGVfYmxrcyh2b2lkKQoreworCWludCBuOworCXUzMiBibGs7CisJdTMyICpwYnQgPSAodTMyICopZ19wQmxvY2tUYWJsZTsKKworCWZvciAobiA9IDA7IG4gPCBCTEtfTlVNX0ZPUl9MMl9DQUNIRTsgbisrKSB7CisJCWJsayA9IGZpbmRfbGVhc3Rfd29ybl9ibGtfZm9yX2wyX2NhY2hlKCk7CisJCWlmIChibGsgPiBEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0pIHsKKwkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sCisJCQkJImZpbmRfbGVhc3Rfd29ybl9ibGtfZm9yX2wyX2NhY2hlOiAiCisJCQkJIk5vIGVub3VnaCBmcmVlIE5BTkQgYmxvY2tzIChuOiAlZCkgZm9yIEwyIENhY2hlIVxuIiwgbik7CisJCQlyZXR1cm4gRkFJTDsKKwkJfQorCQkvKiBUYWcgdGhlIGZyZWUgYmxvY2sgYXMgZGlzY2FyZCBpbiBibG9jayB0YWJsZSAqLworCQlwYnRbYmxrXSA9IChwYnRbYmxrXSAmICh+QkFEX0JMT0NLKSkgfCBESVNDQVJEX0JMT0NLOworCQkvKiBBZGQgdGhlIGZyZWUgYmxvY2sgdG8gdGhlIEwyIENhY2hlIGJsb2NrIGFycmF5ICovCisJCWNhY2hlX2wyLmJsa19hcnJheVtuXSA9IHBidFtibGtdICYgKH5CQURfQkxPQ0spOworCX0KKworCXJldHVybiBQQVNTOworfQorCitzdGF0aWMgaW50IGVyYXNlX2wyX2NhY2hlX2Jsb2Nrcyh2b2lkKQoreworCWludCBpLCByZXQgPSBQQVNTOworCXUzMiBwYmxrLCBsYmxrOworCXU2NCBhZGRyOworCXUzMiAqcGJ0ID0gKHUzMiAqKWdfcEJsb2NrVGFibGU7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWZvciAoaSA9IDA7IGkgPCBCTEtfTlVNX0ZPUl9MMl9DQUNIRTsgaSsrKSB7CisJCXBibGsgPSBjYWNoZV9sMi5ibGtfYXJyYXlbaV07CisKKwkJLyogSWYgdGhlIEwyIGNhY2hlIGJsb2NrIGlzIGludmFsaWQsIHRoZW4ganVzdCBza2lwIGl0ICovCisJCWlmIChNQVhfVTMyX1ZBTFVFID09IHBibGspCisJCQljb250aW51ZTsKKworCQlCVUdfT04ocGJsayA+IERldmljZUluZm8ud1NwZWN0cmFFbmRCbG9jayk7CisKKwkJYWRkciA9ICh1NjQpcGJsayA8PCBEZXZpY2VJbmZvLm5CaXRzSW5CbG9ja0RhdGFTaXplOworCQlpZiAoUEFTUyA9PSBHTE9CX0ZUTF9CbG9ja19FcmFzZShhZGRyKSkgeworCQkJLyogR2V0IGxvZ2ljYWwgYmxvY2sgbnVtYmVyIG9mIHRoZSBlcmFzZWQgYmxvY2sgKi8KKwkJCWxibGsgPSBGVExfR2V0X0Jsb2NrX0luZGV4KHBibGspOworCQkJQlVHX09OKEJBRF9CTE9DSyA9PSBsYmxrKTsKKwkJCS8qIFRhZyBpdCBhcyBmcmVlIGluIHRoZSBibG9jayB0YWJsZSAqLworCQkJcGJ0W2xibGtdICY9ICh1MzIpKH5ESVNDQVJEX0JMT0NLKTsKKwkJCXBidFtsYmxrXSB8PSAodTMyKShTUEFSRV9CTE9DSyk7CisJCX0gZWxzZSB7CisJCQlNQVJLX0JMT0NLX0FTX0JBRChwYnRbbGJsa10pOworCQkJcmV0ID0gRVJSOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIE1lcmdlIHRoZSB2YWxpZCBkYXRhIHBhZ2UgaW4gdGhlIEwyIGNhY2hlIGJsb2NrcyBpbnRvIE5BTkQuCisqLworc3RhdGljIGludCBmbHVzaF9sMl9jYWNoZSh2b2lkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisJc3RydWN0IHNwZWN0cmFfbDJfY2FjaGVfbGlzdCAqcG5kLCAqdG1wX3BuZDsKKwl1MzIgKnBidCA9ICh1MzIgKilnX3BCbG9ja1RhYmxlOworCXUzMiBwaHlfYmxrLCBsMl9ibGs7CisJdTY0IGFkZHI7CisJdTE2IGwyX3BhZ2U7CisJaW50IGksIHJldCA9IFBBU1M7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWlmIChsaXN0X2VtcHR5KCZjYWNoZV9sMi50YWJsZS5saXN0KSkgLyogTm8gZGF0YSB0byBmbHVzaCAqLworCQlyZXR1cm4gcmV0OworCisJLy9kdW1wX2NhY2hlX2wyX3RhYmxlKCk7CisKKwlpZiAoSU5fUFJPR1JFU1NfQkxPQ0tfVEFCTEUgIT0gZ19jQmxvY2tUYWJsZVN0YXR1cykgeworCQlnX2NCbG9ja1RhYmxlU3RhdHVzID0gSU5fUFJPR1JFU1NfQkxPQ0tfVEFCTEU7CisJCUZUTF9Xcml0ZV9JTl9Qcm9ncmVzc19CbG9ja19UYWJsZV9QYWdlKCk7CisJfQorCisJbGlzdF9mb3JfZWFjaChwLCAmY2FjaGVfbDIudGFibGUubGlzdCkgeworCQlwbmQgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBzcGVjdHJhX2wyX2NhY2hlX2xpc3QsIGxpc3QpOworCQlpZiAoSVNfU1BBUkVfQkxPQ0socG5kLT5sb2dpY2FsX2Jsa19udW0pIHx8CisJCQlJU19CQURfQkxPQ0socG5kLT5sb2dpY2FsX2Jsa19udW0pIHx8CisJCQlJU19ESVNDQVJERURfQkxPQ0socG5kLT5sb2dpY2FsX2Jsa19udW0pKSB7CisJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiJXMsIExpbmUgJWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisJCQltZW1zZXQoY2FjaGVfbDJfYmxrX2J1ZiwgMHhmZiwgRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jayAqIERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSk7CQkJCisJCX0gZWxzZSB7CisJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiJXMsIExpbmUgJWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisJCQlwaHlfYmxrID0gcGJ0W3BuZC0+bG9naWNhbF9ibGtfbnVtXSAmICh+QkFEX0JMT0NLKTsKKwkJCXJldCA9IEdMT0JfTExEX1JlYWRfUGFnZV9NYWluKGNhY2hlX2wyX2Jsa19idWYsCisJCQkJcGh5X2JsaywgMCwgRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jayk7CisJCQlpZiAocmV0ID09IEZBSUwpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIlJlYWQgTkFORCBwYWdlIGZhaWwgaW4gJXMsIExpbmUgJWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisJCQl9CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jazsgaSsrKSB7CisJCQlpZiAocG5kLT5wYWdlc19hcnJheVtpXSAhPSBNQVhfVTMyX1ZBTFVFKSB7CisJCQkJbDJfYmxrID0gY2FjaGVfbDIuYmxrX2FycmF5WyhwbmQtPnBhZ2VzX2FycmF5W2ldID4+IDE2KSAmIDB4ZmZmZl07CisJCQkJbDJfcGFnZSA9IHBuZC0+cGFnZXNfYXJyYXlbaV0gJiAweGZmZmY7CisJCQkJcmV0ID0gR0xPQl9MTERfUmVhZF9QYWdlX01haW4oY2FjaGVfbDJfcGFnZV9idWYsIGwyX2JsaywgbDJfcGFnZSwgMSk7CisJCQkJaWYgKHJldCA9PSBGQUlMKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUiAiUmVhZCBOQU5EIHBhZ2UgZmFpbCBpbiAlcywgTGluZSAlZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKKwkJCQl9CisJCQkJbWVtY3B5KGNhY2hlX2wyX2Jsa19idWYgKyBpICogRGV2aWNlSW5mby53UGFnZURhdGFTaXplLCBjYWNoZV9sMl9wYWdlX2J1ZiwgRGV2aWNlSW5mby53UGFnZURhdGFTaXplKTsKKwkJCX0KKwkJfQorCisJCS8qIEZpbmQgYSBmcmVlIGJsb2NrIGFuZCB0YWcgdGhlIG9yaWdpbmFsIGJsb2NrIGFzIGRpc2NhcmRlZCAqLworCQlhZGRyID0gKHU2NClwbmQtPmxvZ2ljYWxfYmxrX251bSA8PCBEZXZpY2VJbmZvLm5CaXRzSW5CbG9ja0RhdGFTaXplOworCQlyZXQgPSBGVExfUmVwbGFjZV9CbG9jayhhZGRyKTsKKwkJaWYgKHJldCA9PSBGQUlMKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkZUTF9SZXBsYWNlX0Jsb2NrIGZhaWwgaW4gJXMsIExpbmUgJWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisJCX0KKworCQkvKiBXcml0ZSBiYWNrIHRoZSB1cGRhdGVkIGRhdGEgaW50byBOQU5EICovCisJCXBoeV9ibGsgPSBwYnRbcG5kLT5sb2dpY2FsX2Jsa19udW1dICYgKH5CQURfQkxPQ0spOworCQlpZiAoRkFJTCA9PSBHTE9CX0xMRF9Xcml0ZV9QYWdlX01haW4oY2FjaGVfbDJfYmxrX2J1ZiwgcGh5X2JsaywgMCwgRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jaykpIHsKKwkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sCisJCQkJIlByb2dyYW0gTkFORCBibG9jayAlZCBmYWlsIGluICVzLCBMaW5lICVkXG4iLAorCQkJCXBoeV9ibGssIF9fRklMRV9fLCBfX0xJTkVfXyk7CisJCQkvKiBUaGlzIG1heSBub3QgYmUgcmVhbGx5IGEgYmFkIGJsb2NrLiBTbyBqdXN0IHRhZyBpdCBhcyBkaXNjYXJkZWQuICovCisJCQkvKiBUaGVuIGl0IGhhcyBhIGNoYW5jZSB0byBiZSBlcmFzZWQgd2hlbiBnYXJiYWdlIGNvbGxlY3Rpb24uICovCisJCQkvKiBJZiBpdCBpcyByZWFsbHkgYmFkLCB0aGVuIHRoZSBlcmFzZSB3aWxsIGZhaWwgYW5kIGl0IHdpbGwgYmUgbWFya2VkICovCisJCQkvKiBhcyBiYWQgdGhlbi4gT3RoZXJ3aXNlIGl0IHdpbGwgYmUgbWFya2VkIGFzIGZyZWUgYW5kIGNhbiBiZSB1c2VkIGFnYWluICovCisJCQlNQVJLX0JMS19BU19ESVNDQVJEKHBidFtwbmQtPmxvZ2ljYWxfYmxrX251bV0pOworCQkJLyogRmluZCBhbm90aGVyIGZyZWUgYmxvY2sgYW5kIHdyaXRlIGl0IGFnYWluICovCisJCQlGVExfUmVwbGFjZV9CbG9jayhhZGRyKTsKKwkJCXBoeV9ibGsgPSBwYnRbcG5kLT5sb2dpY2FsX2Jsa19udW1dICYgKH5CQURfQkxPQ0spOworCQkJaWYgKEZBSUwgPT0gR0xPQl9MTERfV3JpdGVfUGFnZV9NYWluKGNhY2hlX2wyX2Jsa19idWYsIHBoeV9ibGssIDAsIERldmljZUluZm8ud1BhZ2VzUGVyQmxvY2spKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gd3JpdGUgYmFjayBibG9jayAlZCB3aGVuIGZsdXNoIEwyIGNhY2hlLiIKKwkJCQkJIlNvbWUgZGF0YSB3aWxsIGJlIGxvc3QhXG4iLCBwaHlfYmxrKTsKKwkJCQlNQVJLX0JMT0NLX0FTX0JBRChwYnRbcG5kLT5sb2dpY2FsX2Jsa19udW1dKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIHRhZyB0aGUgbmV3IGZyZWUgYmxvY2sgYXMgdXNlZCBibG9jayAqLworCQkJcGJ0W3BuZC0+bG9naWNhbF9ibGtfbnVtXSAmPSAoflNQQVJFX0JMT0NLKTsKKwkJfQorCX0KKworCS8qIERlc3Ryb3kgdGhlIEwyIENhY2hlIHRhYmxlIGFuZCBmcmVlIHRoZSBtZW1vcnkgb2YgYWxsIG5vZGVzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBuZCwgdG1wX3BuZCwgJmNhY2hlX2wyLnRhYmxlLmxpc3QsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJnBuZC0+bGlzdCk7CisJCWtmcmVlKHBuZCk7CisJfQorCisJLyogRXJhc2UgZGlzY2FyZCBMMiBjYWNoZSBibG9ja3MgKi8KKwlpZiAoZXJhc2VfbDJfY2FjaGVfYmxvY2tzKCkgIT0gUEFTUykKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJCSIgRXJhc2UgTDIgY2FjaGUgYmxvY2tzIGVycm9yIGluICVzLCBMaW5lICVkXG4iLAorCQkJX19GSUxFX18sIF9fTElORV9fKTsKKworCS8qIEluaXQgdGhlIExldmVsMiBDYWNoZSBkYXRhIHN0cnVjdHVyZSAqLworCWZvciAoaSA9IDA7IGkgPCBCTEtfTlVNX0ZPUl9MMl9DQUNIRTsgaSsrKQorCQljYWNoZV9sMi5ibGtfYXJyYXlbaV0gPSBNQVhfVTMyX1ZBTFVFOworCWNhY2hlX2wyLmN1cl9ibGtfaWR4ID0gMDsKKwljYWNoZV9sMi5jdXJfcGFnZV9udW0gPSAwOworCUlOSVRfTElTVF9IRUFEKCZjYWNoZV9sMi50YWJsZS5saXN0KTsKKwljYWNoZV9sMi50YWJsZS5sb2dpY2FsX2Jsa19udW0gPSBNQVhfVTMyX1ZBTFVFOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFdyaXRlIGJhY2sgYSBjaGFuZ2VkIHZpY3RpbSBjYWNoZSBpdGVtIHRvIHRoZSBMZXZlbDIgQ2FjaGUKKyAqIGFuZCB1cGRhdGUgdGhlIEwyIENhY2hlIHRhYmxlIHRvIG1hcCB0aGUgY2hhbmdlLgorICogSWYgdGhlIEwyIENhY2hlIGlzIGZ1bGwsIHRoZW4gc3RhcnQgdG8gZG8gdGhlIEwyIENhY2hlIGZsdXNoLgorKi8KK3N0YXRpYyBpbnQgd3JpdGVfYmFja190b19sMl9jYWNoZSh1OCAqYnVmLCB1NjQgbG9naWNhbF9hZGRyKQoreworCXUzMiBsb2dpY2FsX2Jsa19udW07CisJdTE2IGxvZ2ljYWxfcGFnZV9udW07CisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKwlzdHJ1Y3Qgc3BlY3RyYV9sMl9jYWNoZV9saXN0ICpwbmQsICpwbmRfbmV3OworCXUzMiBub2RlX3NpemU7CisJaW50IGksIGZvdW5kOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJLyoKKwkgKiBJZiBMZXZlbDIgQ2FjaGUgdGFibGUgaXMgZW1wdHksIHRoZW4gaXQgbWVhbnMgZWl0aGVyOgorCSAqIDEuIFRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhhdCB0aGUgZnVuY3Rpb24gY2FsbGVkIGFmdGVyIEZUTF9pbml0CisJICogb3IKKwkgKiAyLiBUaGUgTGV2ZWwyIENhY2hlIGhhcyBqdXN0IGJlZW4gZmx1c2hlZAorCSAqCisJICogU28sICdzdGVhbCcgc29tZSBmcmVlIGJsb2NrcyBmcm9tIE5BTkQgZm9yIEwyIENhY2hlIHVzaW5nCisJICogYnkganVzdCBtYXNrIHRoZW0gYXMgZGlzY2FyZCBpbiB0aGUgYmxvY2sgdGFibGUKKwkqLworCWlmIChsaXN0X2VtcHR5KCZjYWNoZV9sMi50YWJsZS5saXN0KSkgeworCQlCVUdfT04oY2FjaGVfbDIuY3VyX2Jsa19pZHggIT0gMCk7CisJCUJVR19PTihjYWNoZV9sMi5jdXJfcGFnZV9udW0hPSAwKTsKKwkJQlVHX09OKGNhY2hlX2wyLnRhYmxlLmxvZ2ljYWxfYmxrX251bSAhPSBNQVhfVTMyX1ZBTFVFKTsKKwkJaWYgKEZBSUwgPT0gZ2V0X2wyX2NhY2hlX2Jsa3MoKSkgeworCQkJR0xPQl9GVExfR2FyYmFnZV9Db2xsZWN0aW9uKCk7CisJCQlpZiAoRkFJTCA9PSBnZXRfbDJfY2FjaGVfYmxrcygpKSB7CisJCQkJcHJpbnRrKEtFUk5fQUxFUlQgIkZhaWwgdG8gZ2V0IEwyIGNhY2hlIGJsa3MhXG4iKTsKKwkJCQlyZXR1cm4gRkFJTDsKKwkJCX0KKwkJfQorCX0KKworCWxvZ2ljYWxfYmxrX251bSA9IEJMS19GUk9NX0FERFIobG9naWNhbF9hZGRyKTsKKwlsb2dpY2FsX3BhZ2VfbnVtID0gUEFHRV9GUk9NX0FERFIobG9naWNhbF9hZGRyLCBsb2dpY2FsX2Jsa19udW0pOworCUJVR19PTihsb2dpY2FsX2Jsa19udW0gPT0gTUFYX1UzMl9WQUxVRSk7CisKKwkvKiBXcml0ZSB0aGUgY2FjaGUgaXRlbSBkYXRhIGludG8gdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgTDIgQ2FjaGUgKi8KKyNpZiBDTURfRE1BCisJLyoKKwkgKiBUT0RPCisJICovCisjZWxzZQorCWlmIChGQUlMID09IEdMT0JfTExEX1dyaXRlX1BhZ2VfTWFpbihidWYsCisJCWNhY2hlX2wyLmJsa19hcnJheVtjYWNoZV9sMi5jdXJfYmxrX2lkeF0sCisJCWNhY2hlX2wyLmN1cl9wYWdlX251bSwgMSkpIHsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwgIk5BTkQgUHJvZ3JhbSBmYWlsIGluICIKKwkJCSIlcywgTGluZSAlZCwgbmV3IEJhZCBCbG9jayAlZCBnZW5lcmF0ZWQhXG4iLAorCQkJX19GSUxFX18sIF9fTElORV9fLAorCQkJY2FjaGVfbDIuYmxrX2FycmF5W2NhY2hlX2wyLmN1cl9ibGtfaWR4XSk7CisKKwkJLyogVE9ETzogdGFnIHRoZSBjdXJyZW50IGJsb2NrIGFzIGJhZCBhbmQgdHJ5IGFnYWluICovCisKKwkJcmV0dXJuIEZBSUw7CisJfQorI2VuZGlmCisKKwkvKiAKKwkgKiBVcGRhdGUgdGhlIEwyIENhY2hlIHRhYmxlLgorCSAqCisJICogRmlyc3Qgc2VhY2hpbmcgaW4gdGhlIHRhYmxlIHRvIHNlZSB3aGV0aGVyIHRoZSBsb2dpY2FsIGJsb2NrCisJICogaGFzIGJlZW4gbWFwcGVkLiBJZiBub3QsIHRoZW4ga21hbGxvYyBhIG5ldyBub2RlIGZvciB0aGUKKwkgKiBsb2dpY2FsIGJsb2NrLCBmaWxsIGRhdGEsIGFuZCB0aGVuIGluc2VydCBpdCB0byB0aGUgbGlzdC4KKwkgKiBPdGhlcndpc2UsIGp1c3QgdXBkYXRlIHRoZSBtYXBwZWQgbm9kZSBkaXJlY3RseS4KKwkgKi8KKwlmb3VuZCA9IDA7CisJbGlzdF9mb3JfZWFjaChwLCAmY2FjaGVfbDIudGFibGUubGlzdCkgeworCQlwbmQgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBzcGVjdHJhX2wyX2NhY2hlX2xpc3QsIGxpc3QpOworCQlpZiAocG5kLT5sb2dpY2FsX2Jsa19udW0gPT0gbG9naWNhbF9ibGtfbnVtKSB7CisJCQlwbmQtPnBhZ2VzX2FycmF5W2xvZ2ljYWxfcGFnZV9udW1dID0KKwkJCQkoY2FjaGVfbDIuY3VyX2Jsa19pZHggPDwgMTYpIHwKKwkJCQljYWNoZV9sMi5jdXJfcGFnZV9udW07CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoIWZvdW5kKSB7IC8qIENyZWF0ZSBuZXcgbm9kZSBmb3IgdGhlIGxvZ2ljYWwgYmxvY2sgaGVyZSAqLworCisJCS8qIFRoZSBsb2dpY2FsIHBhZ2VzIHRvIHBoeXNpY2FsIHBhZ2VzIG1hcCBhcnJheSBpcworCQkgKiBsb2NhdGVkIGF0IHRoZSBlbmQgb2Ygc3RydWN0IHNwZWN0cmFfbDJfY2FjaGVfbGlzdC4KKwkJICovIAorCQlub2RlX3NpemUgPSBzaXplb2Yoc3RydWN0IHNwZWN0cmFfbDJfY2FjaGVfbGlzdCkgKworCQkJc2l6ZW9mKHUzMikgKiBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrOworCQlwbmRfbmV3ID0ga21hbGxvYyhub2RlX3NpemUsIEdGUF9BVE9NSUMpOworCQlpZiAoIXBuZF9uZXcpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGttYWxsb2MgaW4gJXMgTGluZSAlZFxuIiwKKwkJCQlfX0ZJTEVfXywgX19MSU5FX18pOworCQkJLyogCisJCQkgKiBUT0RPOiBOZWVkIHRvIGZsdXNoIGFsbCB0aGUgTDIgY2FjaGUgaW50byBOQU5EIEFTQVAKKwkJCSAqIHNpbmNlIG5vIG1lbW9yeSBhdmFpbGFibGUgaGVyZQorCQkJICovCisJCX0KKwkJcG5kX25ldy0+bG9naWNhbF9ibGtfbnVtID0gbG9naWNhbF9ibGtfbnVtOworCQlmb3IgKGkgPSAwOyBpIDwgRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jazsgaSsrKQorCQkJcG5kX25ldy0+cGFnZXNfYXJyYXlbaV0gPSBNQVhfVTMyX1ZBTFVFOworCQlwbmRfbmV3LT5wYWdlc19hcnJheVtsb2dpY2FsX3BhZ2VfbnVtXSA9CisJCQkoY2FjaGVfbDIuY3VyX2Jsa19pZHggPDwgMTYpIHwgY2FjaGVfbDIuY3VyX3BhZ2VfbnVtOworCQlsaXN0X2FkZCgmcG5kX25ldy0+bGlzdCwgJmNhY2hlX2wyLnRhYmxlLmxpc3QpOworCX0KKworCS8qIEluY3JlYXNpbmcgdGhlIGN1cnJlbnQgcG9zaXRpb24gcG9pbnRlciBvZiB0aGUgTDIgQ2FjaGUgKi8KKwljYWNoZV9sMi5jdXJfcGFnZV9udW0rKzsKKwlpZiAoY2FjaGVfbDIuY3VyX3BhZ2VfbnVtID49IERldmljZUluZm8ud1BhZ2VzUGVyQmxvY2spIHsKKwkJY2FjaGVfbDIuY3VyX2Jsa19pZHgrKzsKKwkJaWYgKGNhY2hlX2wyLmN1cl9ibGtfaWR4ID49IEJMS19OVU1fRk9SX0wyX0NBQ0hFKSB7CisJCQkvKiBUaGUgTDIgQ2FjaGUgaXMgZnVsbC4gTmVlZCB0byBmbHVzaCBpdCBub3cgKi8KKwkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sCisJCQkJIkwyIENhY2hlIGlzIGZ1bGwsIHdpbGwgc3RhcnQgdG8gZmx1c2ggaXRcbiIpOworCQkJZmx1c2hfbDJfY2FjaGUoKTsKKwkJfSBlbHNlIHsKKwkJCWNhY2hlX2wyLmN1cl9wYWdlX251bSA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gUEFTUzsKK30KKworLyoKKyAqIFNlYWNoIGluIHRoZSBMZXZlbDIgQ2FjaGUgdGFibGUgdG8gZmluZCB0aGUgY2FjaGUgaXRlbS4KKyAqIElmIGZpbmQsIHJlYWQgdGhlIGRhdGEgZnJvbSB0aGUgTkFORCBwYWdlIG9mIEwyIENhY2hlLAorICogT3RoZXJ3aXNlLCByZXR1cm4gRkFJTC4KKyAqLworc3RhdGljIGludCBzZWFyY2hfbDJfY2FjaGUodTggKmJ1ZiwgdTY0IGxvZ2ljYWxfYWRkcikKK3sKKwl1MzIgbG9naWNhbF9ibGtfbnVtOworCXUxNiBsb2dpY2FsX3BhZ2VfbnVtOworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisJc3RydWN0IHNwZWN0cmFfbDJfY2FjaGVfbGlzdCAqcG5kOworCXUzMiB0bXAgPSBNQVhfVTMyX1ZBTFVFOworCXUzMiBwaHlfYmxrOworCXUxNiBwaHlfcGFnZTsKKwlpbnQgcmV0ID0gRkFJTDsKKworCWxvZ2ljYWxfYmxrX251bSA9IEJMS19GUk9NX0FERFIobG9naWNhbF9hZGRyKTsKKwlsb2dpY2FsX3BhZ2VfbnVtID0gUEFHRV9GUk9NX0FERFIobG9naWNhbF9hZGRyLCBsb2dpY2FsX2Jsa19udW0pOworCisJbGlzdF9mb3JfZWFjaChwLCAmY2FjaGVfbDIudGFibGUubGlzdCkgeworCQlwbmQgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBzcGVjdHJhX2wyX2NhY2hlX2xpc3QsIGxpc3QpOworCQlpZiAocG5kLT5sb2dpY2FsX2Jsa19udW0gPT0gbG9naWNhbF9ibGtfbnVtKSB7CisJCQl0bXAgPSBwbmQtPnBhZ2VzX2FycmF5W2xvZ2ljYWxfcGFnZV9udW1dOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAodG1wICE9IE1BWF9VMzJfVkFMVUUpIHsgLyogRm91bmQgdmFsaWQgbWFwICovCisJCXBoeV9ibGsgPSBjYWNoZV9sMi5ibGtfYXJyYXlbKHRtcCA+PiAxNikgJiAweEZGRkZdOworCQlwaHlfcGFnZSA9IHRtcCAmIDB4RkZGRjsKKyNpZiBDTURfRE1BCisJCS8qIFRPRE8gKi8KKyNlbHNlCisJCXJldCA9IEdMT0JfTExEX1JlYWRfUGFnZV9NYWluKGJ1ZiwgcGh5X2JsaywgcGh5X3BhZ2UsIDEpOworI2VuZGlmCisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBGVExfQ2FjaGVfV3JpdGVfQmFjaworKiBJbnB1dHM6ICAgICAgIHBvaW50ZXIgdG8gZGF0YSBjYWNoZWQgaW4gc3lzIG1lbW9yeQorKiAgICAgICAgICAgICAgIGFkZHJlc3Mgb2YgZnJlZSBibG9jayBpbiBmbGFzaAorKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAvIEZBSUw9MQorKiBEZXNjcmlwdGlvbjogIHdyaXRlcyBhbGwgdGhlIHBhZ2VzIG9mIENhY2hlIEJsb2NrIHRvIGZsYXNoCisqCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3N0YXRpYyBpbnQgRlRMX0NhY2hlX1dyaXRlX0JhY2sodTggKnBEYXRhLCB1NjQgYmxrX2FkZHIpCit7CisJaW50IGksIGosIGlFcmFzZTsKKwl1NjQgb2xkX3BhZ2VfYWRkciwgYWRkciwgcGh5X2FkZHI7CisJdTMyICpwYnQgPSAodTMyICopZ19wQmxvY2tUYWJsZTsKKwl1MzIgbGJhOworCQorCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCW9sZF9wYWdlX2FkZHIgPSBGVExfR2V0X1BoeXNpY2FsX0Jsb2NrX0FkZHIoYmxrX2FkZHIpICsKKwkJR0xPQl91NjRfUmVtYWluZGVyKGJsa19hZGRyLCAyKTsKKworCWlFcmFzZSA9IChGQUlMID09IEZUTF9SZXBsYWNlX0Jsb2NrKGJsa19hZGRyKSkgPyBQQVNTIDogRkFJTDsKKworCXBidFtCTEtfRlJPTV9BRERSKGJsa19hZGRyKV0gJj0gKH5TUEFSRV9CTE9DSyk7CisKKyNpZiBDTURfRE1BCisJcF9CVGFibGVDaGFuZ2VzRGVsdGEgPSAoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSAqKWdfcEJURGVsdGFfRnJlZTsKKwlnX3BCVERlbHRhX0ZyZWUgKz0gc2l6ZW9mKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEpOworCisJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250ID0gZnRsX2NtZF9jbnQ7CisJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPkJUX0luZGV4ID0gKHUzMikoYmxrX2FkZHIgPj4KKwkJRGV2aWNlSW5mby5uQml0c0luQmxvY2tEYXRhU2l6ZSk7CisJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPkJUX0VudHJ5X1ZhbHVlID0KKwkJcGJ0Wyh1MzIpKGJsa19hZGRyID4+IERldmljZUluZm8ubkJpdHNJbkJsb2NrRGF0YVNpemUpXTsKKwlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+VmFsaWRGaWVsZHMgPSAweDBDOworI2VuZGlmCisKKwlpZiAoSU5fUFJPR1JFU1NfQkxPQ0tfVEFCTEUgIT0gZ19jQmxvY2tUYWJsZVN0YXR1cykgeworCQlnX2NCbG9ja1RhYmxlU3RhdHVzID0gSU5fUFJPR1JFU1NfQkxPQ0tfVEFCTEU7CisJCUZUTF9Xcml0ZV9JTl9Qcm9ncmVzc19CbG9ja19UYWJsZV9QYWdlKCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFJFVFJZX1RJTUVTOyBpKyspIHsKKwkJaWYgKFBBU1MgPT0gaUVyYXNlKSB7CisJCQlwaHlfYWRkciA9IEZUTF9HZXRfUGh5c2ljYWxfQmxvY2tfQWRkcihibGtfYWRkcik7CisJCQlpZiAoRkFJTCA9PSBHTE9CX0ZUTF9CbG9ja19FcmFzZShwaHlfYWRkcikpIHsKKwkJCQlsYmEgPSBCTEtfRlJPTV9BRERSKGJsa19hZGRyKTsKKwkJCQlNQVJLX0JMT0NLX0FTX0JBRChwYnRbbGJhXSk7CisJCQkJaSA9IFJFVFJZX1RJTUVTOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJZm9yIChqID0gMDsgaiA8IENBQ0hFX0lURU1fTlVNOyBqKyspIHsKKwkJCWFkZHIgPSBDYWNoZS5hcnJheVtqXS5hZGRyZXNzOworCQkJaWYgKChhZGRyIDw9IGJsa19hZGRyKSAmJgorCQkJCSgoYWRkciArIENhY2hlLmNhY2hlX2l0ZW1fc2l6ZSkgPiBibGtfYWRkcikpCisJCQkJY2FjaGVfYmxvY2tfdG9fd3JpdGUgPSBqOworCQl9CisKKwkJcGh5X2FkZHIgPSBGVExfR2V0X1BoeXNpY2FsX0Jsb2NrX0FkZHIoYmxrX2FkZHIpOworCQlpZiAoUEFTUyA9PSBGVExfQ2FjaGVfVXBkYXRlX0Jsb2NrKHBEYXRhLAorCQkJCQlvbGRfcGFnZV9hZGRyLCBwaHlfYWRkcikpIHsKKwkJCWNhY2hlX2Jsb2NrX3RvX3dyaXRlID0gVU5ISVRfQ0FDSEVfSVRFTTsKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJaUVyYXNlID0gUEFTUzsKKwkJfQorCX0KKworCWlmIChpID49IFJFVFJZX1RJTUVTKSB7CisJCWlmIChFUlIgPT0gRlRMX0ZsYXNoX0Vycm9yX0hhbmRsZShwRGF0YSwKKwkJCQkJb2xkX3BhZ2VfYWRkciwgYmxrX2FkZHIpKQorCQkJcmV0dXJuIEVSUjsKKwkJZWxzZQorCQkJcmV0dXJuIEZBSUw7CisJfQorCisJcmV0dXJuIFBBU1M7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgRlRMX0NhY2hlX1dyaXRlX1BhZ2UKKyogSW5wdXRzOiAgICAgICBQb2ludGVyIHRvIGJ1ZmZlciwgcGFnZSBhZGRyZXNzLCBjYWNoZSBibG9jayBudW1iZXIKKyogT3V0cHV0czogICAgICBQQVNTPTAgLyBGQUlMPTEKKyogRGVzY3JpcHRpb246ICBJdCB3cml0ZXMgdGhlIGRhdGEgaW4gQ2FjaGUgQmxvY2sKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3N0YXRpYyB2b2lkIEZUTF9DYWNoZV9Xcml0ZV9QYWdlKHU4ICpwRGF0YSwgdTY0IHBhZ2VfYWRkciwKKwkJCQl1OCBjYWNoZV9ibGssIHUxNiBmbGFnKQoreworCXU4ICpwRGVzdDsKKwl1NjQgYWRkcjsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlhZGRyID0gQ2FjaGUuYXJyYXlbY2FjaGVfYmxrXS5hZGRyZXNzOworCXBEZXN0ID0gQ2FjaGUuYXJyYXlbY2FjaGVfYmxrXS5idWY7CisKKwlwRGVzdCArPSAodW5zaWduZWQgbG9uZykocGFnZV9hZGRyIC0gYWRkcik7CisJQ2FjaGUuYXJyYXlbY2FjaGVfYmxrXS5jaGFuZ2VkID0gU0VUOworI2lmIENNRF9ETUEKKyNpZiBSRVNUT1JFX0NBQ0hFX09OX0NETUFfQ0hBSU5fRkFJTFVSRQorCWludF9jYWNoZVtmdGxfY21kX2NudF0uaXRlbSA9IGNhY2hlX2JsazsKKwlpbnRfY2FjaGVbZnRsX2NtZF9jbnRdLmNhY2hlLmFkZHJlc3MgPQorCQkJQ2FjaGUuYXJyYXlbY2FjaGVfYmxrXS5hZGRyZXNzOworCWludF9jYWNoZVtmdGxfY21kX2NudF0uY2FjaGUuY2hhbmdlZCA9CisJCQlDYWNoZS5hcnJheVtjYWNoZV9ibGtdLmNoYW5nZWQ7CisjZW5kaWYKKwlHTE9CX0xMRF9NZW1Db3B5X0NNRChwRGVzdCwgcERhdGEsIERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSwgZmxhZyk7CisJZnRsX2NtZF9jbnQrKzsKKyNlbHNlCisJbWVtY3B5KHBEZXN0LCBwRGF0YSwgRGV2aWNlSW5mby53UGFnZURhdGFTaXplKTsKKyNlbmRpZgorCWlmIChDYWNoZS5hcnJheVtjYWNoZV9ibGtdLnVzZV9jbnQgPCBNQVhfV09SRF9WQUxVRSkKKwkJQ2FjaGUuYXJyYXlbY2FjaGVfYmxrXS51c2VfY250Kys7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBGVExfQ2FjaGVfV3JpdGUKKyogSW5wdXRzOiAgICAgICBub25lCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIC8gRkFJTD0xCisqIERlc2NyaXB0aW9uOiAgSXQgd3JpdGVzIGxlYXN0IGZyZXF1ZW50bHkgdXNlZCBDYWNoZSBibG9jayB0byBmbGFzaCBpZiBpdAorKiAgICAgICAgICAgICAgIGhhcyBiZWVuIGNoYW5nZWQKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCitzdGF0aWMgaW50IEZUTF9DYWNoZV9Xcml0ZSh2b2lkKQoreworCWludCBpLCBiUmVzdWx0ID0gUEFTUzsKKwl1MTYgYk5PLCBsZWFzdF9jb3VudCA9IDB4RkZGRjsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlGVExfQ2FsY3VsYXRlX0xSVSgpOworCisJYk5PID0gQ2FjaGUuTFJVOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiRlRMX0NhY2hlX1dyaXRlOiAiCisJCSJMZWFzdCB1c2VkIGNhY2hlIGJsb2NrIGlzICVkXG4iLCBiTk8pOworCisJaWYgKENhY2hlLmFycmF5W2JOT10uY2hhbmdlZCAhPSBTRVQpCisJCXJldHVybiBiUmVzdWx0OworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJGVExfQ2FjaGVfV3JpdGU6IENhY2hlIgorCQkiIEJsb2NrICVkIGNvbnRhaW5pbmcgbG9naWNhbCBibG9jayAlZCBpcyBkaXJ0eVxuIiwKKwkJYk5PLAorCQkodTMyKShDYWNoZS5hcnJheVtiTk9dLmFkZHJlc3MgPj4KKwkJRGV2aWNlSW5mby5uQml0c0luQmxvY2tEYXRhU2l6ZSkpOworI2lmIENNRF9ETUEKKyNpZiBSRVNUT1JFX0NBQ0hFX09OX0NETUFfQ0hBSU5fRkFJTFVSRQorCWludF9jYWNoZVtmdGxfY21kX2NudF0uaXRlbSA9IGJOTzsKKwlpbnRfY2FjaGVbZnRsX2NtZF9jbnRdLmNhY2hlLmFkZHJlc3MgPQorCQkJCUNhY2hlLmFycmF5W2JOT10uYWRkcmVzczsKKwlpbnRfY2FjaGVbZnRsX2NtZF9jbnRdLmNhY2hlLmNoYW5nZWQgPSBDTEVBUjsKKyNlbmRpZgorI2VuZGlmCisJYlJlc3VsdCA9IHdyaXRlX2JhY2tfdG9fbDJfY2FjaGUoQ2FjaGUuYXJyYXlbYk5PXS5idWYsCisJCQlDYWNoZS5hcnJheVtiTk9dLmFkZHJlc3MpOworCWlmIChiUmVzdWx0ICE9IEVSUikKKwkJQ2FjaGUuYXJyYXlbYk5PXS5jaGFuZ2VkID0gQ0xFQVI7CisKKwlsZWFzdF9jb3VudCA9IENhY2hlLmFycmF5W2JOT10udXNlX2NudDsKKworCWZvciAoaSA9IDA7IGkgPCBDQUNIRV9JVEVNX05VTTsgaSsrKSB7CisJCWlmIChpID09IGJOTykKKwkJCWNvbnRpbnVlOworCQlpZiAoQ2FjaGUuYXJyYXlbaV0udXNlX2NudCA+IDApCisJCQlDYWNoZS5hcnJheVtpXS51c2VfY250IC09IGxlYXN0X2NvdW50OworCX0KKworCXJldHVybiBiUmVzdWx0OworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEZUTF9DYWNoZV9SZWFkCisqIElucHV0czogICAgICAgUGFnZSBhZGRyZXNzCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIC8gRkFJTD0xCisqIERlc2NyaXB0aW9uOiAgSXQgcmVhZHMgdGhlIGJsb2NrIGZyb20gZGV2aWNlIGluIENhY2hlIEJsb2NrCisqICAgICAgICAgICAgICAgU2V0IHRoZSBMUlUgY291bnQgdG8gMQorKiAgICAgICAgICAgICAgIE1hcmsgdGhlIENhY2hlIEJsb2NrIGFzIGNsZWFuCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworc3RhdGljIGludCBGVExfQ2FjaGVfUmVhZCh1NjQgbG9naWNhbF9hZGRyKQoreworCXU2NCBpdGVtX2FkZHIsIHBoeV9hZGRyOworCXUxNiBudW07CisJaW50IHJldDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwludW0gPSBDYWNoZS5MUlU7IC8qIFRoZSBMUlUgY2FjaGUgaXRlbSB3aWxsIGJlIG92ZXJ3cml0dGVuICovCisKKwlpdGVtX2FkZHIgPSAodTY0KUdMT0JfdTY0X0Rpdihsb2dpY2FsX2FkZHIsIENhY2hlLmNhY2hlX2l0ZW1fc2l6ZSkgKgorCQlDYWNoZS5jYWNoZV9pdGVtX3NpemU7CisJQ2FjaGUuYXJyYXlbbnVtXS5hZGRyZXNzID0gaXRlbV9hZGRyOworCUNhY2hlLmFycmF5W251bV0udXNlX2NudCA9IDE7CisJQ2FjaGUuYXJyYXlbbnVtXS5jaGFuZ2VkID0gQ0xFQVI7CisKKyNpZiBDTURfRE1BCisjaWYgUkVTVE9SRV9DQUNIRV9PTl9DRE1BX0NIQUlOX0ZBSUxVUkUKKwlpbnRfY2FjaGVbZnRsX2NtZF9jbnRdLml0ZW0gPSBudW07CisJaW50X2NhY2hlW2Z0bF9jbWRfY250XS5jYWNoZS5hZGRyZXNzID0KKwkJCUNhY2hlLmFycmF5W251bV0uYWRkcmVzczsKKwlpbnRfY2FjaGVbZnRsX2NtZF9jbnRdLmNhY2hlLmNoYW5nZWQgPQorCQkJQ2FjaGUuYXJyYXlbbnVtXS5jaGFuZ2VkOworI2VuZGlmCisjZW5kaWYKKwkvKgorCSAqIFNlYXJjaCBpbiBMMiBDYWNoZS4gSWYgaGl0LCBmaWxsIGRhdGEgaW50byBMMSBDYWNoZSBpdGVtIGJ1ZmZlciwKKwkgKiBPdGhlcndpc2UsIHJlYWQgaXQgZnJvbSBOQU5ECisJICovCisJcmV0ID0gc2VhcmNoX2wyX2NhY2hlKENhY2hlLmFycmF5W251bV0uYnVmLCBsb2dpY2FsX2FkZHIpOworCWlmIChQQVNTID09IHJldCkgLyogSGl0IGluIEwyIENhY2hlICovCisJCXJldHVybiByZXQ7CisKKwkvKiBDb21wdXRlIHRoZSBwaHlzaWNhbCBzdGFydCBhZGRyZXNzIG9mIE5BTkQgZGV2aWNlIGFjY29yZGluZyB0byAqLworCS8qIHRoZSBsb2dpY2FsIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIGNhY2hlIGl0ZW0gKExSVSBjYWNoZSBpdGVtKSAqLworCXBoeV9hZGRyID0gRlRMX0dldF9QaHlzaWNhbF9CbG9ja19BZGRyKGl0ZW1fYWRkcikgKworCQlHTE9CX3U2NF9SZW1haW5kZXIoaXRlbV9hZGRyLCAyKTsKKworCXJldHVybiBGVExfQ2FjaGVfUmVhZF9BbGwoQ2FjaGUuYXJyYXlbbnVtXS5idWYsIHBoeV9hZGRyKTsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBGVExfQ2hlY2tfQmxvY2tfVGFibGUKKyogSW5wdXRzOiAgICAgICA/CisqIE91dHB1dHM6ICAgICAgUEFTUz0wIC8gRkFJTD0xCisqIERlc2NyaXB0aW9uOiAgSXQgY2hlY2tzIHRoZSBjb3JyZWN0bmVzcyBvZiBlYWNoIGJsb2NrIHRhYmxlIGVudHJ5CisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworc3RhdGljIGludCBGVExfQ2hlY2tfQmxvY2tfVGFibGUoaW50IHdPbGRUYWJsZSkKK3sKKwl1MzIgaTsKKwlpbnQgd1Jlc3VsdCA9IFBBU1M7CisJdTMyIGJsa19pZHg7CisJdTMyICpwYnQgPSAodTMyICopZ19wQmxvY2tUYWJsZTsKKwl1OCAqcEZsYWcgPSBmbGFnX2NoZWNrX2Jsa190YWJsZTsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJaWYgKE5VTEwgIT0gcEZsYWcpIHsKKwkJbWVtc2V0KHBGbGFnLCBGQUlMLCBEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0pOworCQlmb3IgKGkgPSAwOyBpIDwgRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtOyBpKyspIHsKKwkJCWJsa19pZHggPSAodTMyKShwYnRbaV0gJiAofkJBRF9CTE9DSykpOworCisJCQkvKgorCQkJICogMjAwODEwMDYvS0JWIC0gQ2hhbmdlZCB0byBwRmxhZ1tpXSByZWZlcmVuY2UKKwkJCSAqIHRvIGF2b2lkIGJ1ZmZlciBvdmVyZmxvdworCQkJICovCisKKwkJCS8qCisJCQkgKiAyMDA4LTEwLTIwIFl1bnBlbmcgTm90ZTogVGhpcyBjaGFuZ2UgYXZvaWQKKwkJCSAqIGJ1ZmZlciBvdmVyZmxvdywgYnV0IGNoYW5nZWQgZnVuY3Rpb24gb2YKKwkJCSAqIHRoZSBjb2RlLCBzbyBpdCBzaG91bGQgYmUgcmUtd3JpdGUgbGF0ZXIKKwkJCSAqLworCQkJaWYgKChibGtfaWR4ID4gRGV2aWNlSW5mby53U3BlY3RyYUVuZEJsb2NrKSB8fAorCQkJCVBBU1MgPT0gcEZsYWdbaV0pIHsKKwkJCQl3UmVzdWx0ID0gRkFJTDsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJcEZsYWdbaV0gPSBQQVNTOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHdSZXN1bHQ7Cit9CisKKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEZUTF9Xcml0ZV9CbG9ja19UYWJsZQorKiBJbnB1dHM6ICAgICAgIGZsYXNnCisqIE91dHB1dHM6ICAgICAgMD1CbG9jayBUYWJsZSB3YXMgdXBkYXRlZC4gTm8gd3JpdGUgZG9uZS4gMT1CbG9jayB3cml0ZSBuZWVkcyB0bworKiBoYXBwZW4uIC0xIEVycm9yCisqIERlc2NyaXB0aW9uOiAgSXQgd3JpdGVzIHRoZSBibG9jayB0YWJsZQorKiAgICAgICAgICAgICAgIEJsb2NrIHRhYmxlIGFsd2F5cyBtYXBwZWQgdG8gTEJBIDAgd2hpY2ggaW50dXJuIG1hcHBlZAorKiAgICAgICAgICAgICAgIHRvIGFueSBwaHlzaWNhbCBibG9jaworKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3N0YXRpYyBpbnQgRlRMX1dyaXRlX0Jsb2NrX1RhYmxlKGludCB3Rm9yY2UpCit7CisJdTMyICpwYnQgPSAodTMyICopZ19wQmxvY2tUYWJsZTsKKwlpbnQgd1N1Y2Nlc3MgPSBQQVNTOworCXUzMiB3VGVtcEJsb2NrVGFibGVJbmRleDsKKwl1MTYgYnRfcGFnZXMsIG5ld19idF9vZmZzZXQ7CisJdTggYmxvY2tjaGFuZ2VvY2N1cmVkID0gMDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWJ0X3BhZ2VzID0gRlRMX0dldF9CbG9ja19UYWJsZV9GbGFzaF9TaXplX1BhZ2VzKCk7CisKKwlpZiAoSU5fUFJPR1JFU1NfQkxPQ0tfVEFCTEUgIT0gZ19jQmxvY2tUYWJsZVN0YXR1cykKKwkJcmV0dXJuIDA7CisKKwlpZiAoUEFTUyA9PSB3Rm9yY2UpIHsKKwkJZ193QmxvY2tUYWJsZU9mZnNldCA9CisJCQkodTE2KShEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrIC0gYnRfcGFnZXMpOworI2lmIENNRF9ETUEKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEgPQorCQkJKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEgKilnX3BCVERlbHRhX0ZyZWU7CisJCWdfcEJURGVsdGFfRnJlZSArPSBzaXplb2Yoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSk7CisKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250ID0gZnRsX2NtZF9jbnQ7CisJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5nX3dCbG9ja1RhYmxlT2Zmc2V0ID0KKwkJCWdfd0Jsb2NrVGFibGVPZmZzZXQ7CisJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5WYWxpZEZpZWxkcyA9IDB4MDE7CisjZW5kaWYKKwl9CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJIkluc2lkZSBGVExfV3JpdGVfQmxvY2tfVGFibGU6IGJsb2NrICVkIFBhZ2U6JWRcbiIsCisJCWdfd0Jsb2NrVGFibGVJbmRleCwgZ193QmxvY2tUYWJsZU9mZnNldCk7CisKKwlkbyB7CisJCW5ld19idF9vZmZzZXQgPSBnX3dCbG9ja1RhYmxlT2Zmc2V0ICsgYnRfcGFnZXMgKyAxOworCQlpZiAoKDAgPT0gKG5ld19idF9vZmZzZXQgJSBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrKSkgfHwKKwkJCShuZXdfYnRfb2Zmc2V0ID4gRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jaykgfHwKKwkJCShGQUlMID09IHdTdWNjZXNzKSkgeworCQkJd1RlbXBCbG9ja1RhYmxlSW5kZXggPSBGVExfUmVwbGFjZV9CbG9ja19UYWJsZSgpOworCQkJaWYgKEJBRF9CTE9DSyA9PSB3VGVtcEJsb2NrVGFibGVJbmRleCkKKwkJCQlyZXR1cm4gRVJSOworCQkJaWYgKCFibG9ja2NoYW5nZW9jY3VyZWQpIHsKKwkJCQlidF9ibG9ja19jaGFuZ2VkID0gMTsKKwkJCQlibG9ja2NoYW5nZW9jY3VyZWQgPSAxOworCQkJfQorCisJCQlnX3dCbG9ja1RhYmxlSW5kZXggPSB3VGVtcEJsb2NrVGFibGVJbmRleDsKKwkJCWdfd0Jsb2NrVGFibGVPZmZzZXQgPSAwOworCQkJcGJ0W0JMT0NLX1RBQkxFX0lOREVYXSA9IGdfd0Jsb2NrVGFibGVJbmRleDsKKyNpZiBDTURfRE1BCisJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YSA9CisJCQkJKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEgKilnX3BCVERlbHRhX0ZyZWU7CisJCQlnX3BCVERlbHRhX0ZyZWUgKz0gc2l6ZW9mKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEpOworCisJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+ZnRsX2NtZF9jbnQgPQorCQkJCSAgICBmdGxfY21kX2NudDsKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5nX3dCbG9ja1RhYmxlT2Zmc2V0ID0KKwkJCQkgICAgZ193QmxvY2tUYWJsZU9mZnNldDsKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5nX3dCbG9ja1RhYmxlSW5kZXggPQorCQkJCSAgICBnX3dCbG9ja1RhYmxlSW5kZXg7CisJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+VmFsaWRGaWVsZHMgPSAweDAzOworCisJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YSA9CisJCQkJKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEgKilnX3BCVERlbHRhX0ZyZWU7CisJCQlnX3BCVERlbHRhX0ZyZWUgKz0KKwkJCQlzaXplb2Yoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSk7CisKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5mdGxfY21kX2NudCA9CisJCQkJICAgIGZ0bF9jbWRfY250OworCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPkJUX0luZGV4ID0KKwkJCQkgICAgQkxPQ0tfVEFCTEVfSU5ERVg7CisJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfRW50cnlfVmFsdWUgPQorCQkJCSAgICBwYnRbQkxPQ0tfVEFCTEVfSU5ERVhdOworCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPlZhbGlkRmllbGRzID0gMHgwQzsKKyNlbmRpZgorCQl9CisKKwkJd1N1Y2Nlc3MgPSBGVExfV3JpdGVfQmxvY2tfVGFibGVfRGF0YSgpOworCQlpZiAoRkFJTCA9PSB3U3VjY2VzcykKKwkJCU1BUktfQkxPQ0tfQVNfQkFEKHBidFtCTE9DS19UQUJMRV9JTkRFWF0pOworCX0gd2hpbGUgKEZBSUwgPT0gd1N1Y2Nlc3MpOworCisJZ19jQmxvY2tUYWJsZVN0YXR1cyA9IENVUlJFTlRfQkxPQ0tfVEFCTEU7CisKKwlyZXR1cm4gMTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGdW5jdGlvbjogICAgIEdMT0JfRlRMX0ZsYXNoX0Zvcm1hdAorKiBJbnB1dHM6ICAgICAgIG5vbmUKKyogT3V0cHV0czogICAgICBQQVNTCisqIERlc2NyaXB0aW9uOiAgVGhlIGJsb2NrIHRhYmxlIHN0b3JlcyBiYWQgYmxvY2sgaW5mbywgaW5jbHVkaW5nIE1ERisKKyogICAgICAgICAgICAgICBibG9ja3MgZ29uZSBiYWQgb3ZlciB0aGUgYWdlcy4gVGhlcmVmb3JlLCBpZiB3ZSBoYXZlIGEKKyogICAgICAgICAgICAgICBibG9jayB0YWJsZSBpbiBwbGFjZSwgdGhlbiB1c2UgaXQgdG8gc2NhbiBmb3IgYmFkIGJsb2NrcworKiAgICAgICAgICAgICAgIElmIG5vdCwgdGhlbiBzY2FuIGZvciBNREYuCisqICAgICAgICAgICAgICAgTm93LCBhIGJsb2NrIHRhYmxlIHdpbGwgb25seSBiZSBmb3VuZCBpZiBzcGVjdHJhIHdhcyBhbHJlYWR5CisqICAgICAgICAgICAgICAgYmVpbmcgdXNlZC4gRm9yIGEgZnJlc2ggZmxhc2gsIHdlJ2xsIGdvIHRocnUgc2Nhbm5pbmcgZm9yCisqICAgICAgICAgICAgICAgTURGLiBJZiBzcGVjdHJhIHdhcyBiZWluZyB1c2VkLCB0aGVuIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQKKyogICAgICAgICAgICAgICB0aGUgTURGIGhhcyBiZWVuIGNvcnJ1cHRlZC4gU3BlY3RyYSBhdm9pZHMgd3JpdGluZyB0byB0aGUKKyogICAgICAgICAgICAgICBmaXJzdCAyIGJ5dGVzIG9mIHRoZSBzcGFyZSBhcmVhIHRvIGFsbCBwYWdlcyBpbiBhIGJsb2NrLiBUaGlzCisqICAgICAgICAgICAgICAgY292ZXJzIGFsbCBrbm93biBmbGFzaCBkZXZpY2VzLiBIb3dldmVyLCBzaW5jZSBmbGFzaAorKiAgICAgICAgICAgICAgIG1hbnVmYWN0dXJlcnMgaGF2ZSBubyBzdGFuZGFyZCBvZiB3aGVyZSB0aGUgTURGIGlzIHN0b3JlZCwKKyogICAgICAgICAgICAgICB0aGlzIGNhbm5vdCBndWFyYW50ZWUgdGhhdCB0aGUgTURGIGlzIHByb3RlY3RlZCBmb3IgZnV0dXJlCisqICAgICAgICAgICAgICAgZGV2aWNlcyB0b28uIFRoZSBpbml0aWFsIHNjYW5uaW5nIGZvciB0aGUgYmxvY2sgdGFibGUgYXNzdXJlcworKiAgICAgICAgICAgICAgIHRoaXMuIEl0IGlzIG9rIGV2ZW4gaWYgdGhlIGJsb2NrIHRhYmxlIGlzIG91dGRhdGVkLCBhcyBhbGwKKyogICAgICAgICAgICAgICB3ZSdyZSBsb29raW5nIGZvciBhcmUgYmFkIGJsb2NrIG1hcmtlcnMuCisqICAgICAgICAgICAgICAgVXNlIHRoaXMgd2hlbiBtb3VudGluZyBhIGZpbGUgc3lzdGVtIG9yIHN0YXJ0aW5nIGEKKyogICAgICAgICAgICAgICBuZXcgZmxhc2guCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50ICBGVExfRm9ybWF0X0ZsYXNoKHU4IHZhbGlkX2Jsb2NrX3RhYmxlKQoreworCXUzMiBpLCBqOworCXUzMiAqcGJ0ID0gKHUzMiAqKWdfcEJsb2NrVGFibGU7CisJdTMyIHRlbXBOb2RlOworCWludCByZXQ7CisKKyNpZiBDTURfRE1BCisJdTMyICpwYnRTdGFydGluZ0NvcHkgPSAodTMyICopZ19wQlRTdGFydGluZ0NvcHk7CisJaWYgKGZ0bF9jbWRfY250KQorCQlyZXR1cm4gRkFJTDsKKyNlbmRpZgorCisJaWYgKEZBSUwgPT0gRlRMX0NoZWNrX0Jsb2NrX1RhYmxlKEZBSUwpKQorCQl2YWxpZF9ibG9ja190YWJsZSA9IDA7CisKKwlpZiAodmFsaWRfYmxvY2tfdGFibGUpIHsKKwkJdTggc3dpdGNoZWQgPSAxOworCQl1MzIgYmxvY2ssIGs7CisKKwkJayA9IERldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrOworCQl3aGlsZSAoc3dpdGNoZWQgJiYgKGsgPCBEZXZpY2VJbmZvLndTcGVjdHJhRW5kQmxvY2spKSB7CisJCQlzd2l0Y2hlZCA9IDA7CisJCQlrKys7CisJCQlmb3IgKGogPSBEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9jaywgaSA9IDA7CisJCQlqIDw9IERldmljZUluZm8ud1NwZWN0cmFFbmRCbG9jazsKKwkJCWorKywgaSsrKSB7CisJCQkJYmxvY2sgPSAocGJ0W2ldICYgfkJBRF9CTE9DSykgLQorCQkJCQlEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9jazsKKwkJCQlpZiAoYmxvY2sgIT0gaSkgeworCQkJCQlzd2l0Y2hlZCA9IDE7CisJCQkJCXRlbXBOb2RlID0gcGJ0W2ldOworCQkJCQlwYnRbaV0gPSBwYnRbYmxvY2tdOworCQkJCQlwYnRbYmxvY2tdID0gdGVtcE5vZGU7CisJCQkJfQorCQkJfQorCQl9CisJCWlmICgoayA9PSBEZXZpY2VJbmZvLndTcGVjdHJhRW5kQmxvY2spICYmIHN3aXRjaGVkKQorCQkJdmFsaWRfYmxvY2tfdGFibGUgPSAwOworCX0KKworCWlmICghdmFsaWRfYmxvY2tfdGFibGUpIHsKKwkJbWVtc2V0KGdfcEJsb2NrVGFibGUsIDAsCisJCQlEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0gKiBzaXplb2YodTMyKSk7CisJCW1lbXNldChnX3BXZWFyQ291bnRlciwgMCwKKwkJCURldmljZUluZm8ud0RhdGFCbG9ja051bSAqIHNpemVvZih1OCkpOworCQlpZiAoRGV2aWNlSW5mby5NTENEZXZpY2UpCisJCQltZW1zZXQoZ19wUmVhZENvdW50ZXIsIDAsCisJCQkJRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICogc2l6ZW9mKHUxNikpOworI2lmIENNRF9ETUEKKwkJbWVtc2V0KGdfcEJUU3RhcnRpbmdDb3B5LCAwLAorCQkJRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICogc2l6ZW9mKHUzMikpOworCQltZW1zZXQoZ19wV2VhckNvdW50ZXJDb3B5LCAwLAorCQkJCURldmljZUluZm8ud0RhdGFCbG9ja051bSAqIHNpemVvZih1OCkpOworCQlpZiAoRGV2aWNlSW5mby5NTENEZXZpY2UpCisJCQltZW1zZXQoZ19wUmVhZENvdW50ZXJDb3B5LCAwLAorCQkJCURldmljZUluZm8ud0RhdGFCbG9ja051bSAqIHNpemVvZih1MTYpKTsKKyNlbmRpZgorCQlmb3IgKGogPSBEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9jaywgaSA9IDA7CisJCQlqIDw9IERldmljZUluZm8ud1NwZWN0cmFFbmRCbG9jazsKKwkJCWorKywgaSsrKSB7CisJCQlpZiAoR0xPQl9MTERfR2V0X0JhZF9CbG9jaygodTMyKWopKQorCQkJCXBidFtpXSA9ICh1MzIpKEJBRF9CTE9DSyB8IGopOworCQl9CisJfQorCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwgIkVyYXNpbmcgYWxsIGJsb2NrcyBpbiB0aGUgTkFORFxuIik7CisKKwlmb3IgKGogPSBEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9jaywgaSA9IDA7CisJCWogPD0gRGV2aWNlSW5mby53U3BlY3RyYUVuZEJsb2NrOworCQlqKyssIGkrKykgeworCQlpZiAoKHBidFtpXSAmIEJBRF9CTE9DSykgIT0gQkFEX0JMT0NLKSB7CisJCQlyZXQgPSBHTE9CX0xMRF9FcmFzZV9CbG9jayhqKTsKKwkJCWlmIChGQUlMID09IHJldCkgeworCQkJCXBidFtpXSA9ICh1MzIpKGopOworCQkJCU1BUktfQkxPQ0tfQVNfQkFEKHBidFtpXSk7CisJCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJCSAgICAgICAiTkFORCBQcm9ncmFtIGZhaWwgaW4gJXMsIExpbmUgJWQsICIKKwkJCSAgICAgICAiRnVuY3Rpb246ICVzLCBuZXcgQmFkIEJsb2NrICVkIGdlbmVyYXRlZCFcbiIsCisJCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXywgKGludClqKTsKKwkJCX0gZWxzZSB7CisJCQkJcGJ0W2ldID0gKHUzMikoU1BBUkVfQkxPQ0sgfCBqKTsKKwkJCX0KKwkJfQorI2lmIENNRF9ETUEKKwkJcGJ0U3RhcnRpbmdDb3B5W2ldID0gcGJ0W2ldOworI2VuZGlmCisJfQorCisJZ193QmxvY2tUYWJsZU9mZnNldCA9IDA7CisJZm9yIChpID0gMDsgKGkgPD0gKERldmljZUluZm8ud1NwZWN0cmFFbmRCbG9jayAtCisJCQlEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9jaykpCisJCQkmJiAoKHBidFtpXSAmIEJBRF9CTE9DSykgPT0gQkFEX0JMT0NLKTsgaSsrKQorCQk7CisJaWYgKGkgPiAoRGV2aWNlSW5mby53U3BlY3RyYUVuZEJsb2NrIC0gRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2spKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQWxsIGJsb2NrcyBiYWQhXG4iKTsKKwkJcmV0dXJuIEZBSUw7CisJfSBlbHNlIHsKKwkJZ193QmxvY2tUYWJsZUluZGV4ID0gcGJ0W2ldICYgfkJBRF9CTE9DSzsKKwkJaWYgKGkgIT0gQkxPQ0tfVEFCTEVfSU5ERVgpIHsKKwkJCXRlbXBOb2RlID0gcGJ0W2ldOworCQkJcGJ0W2ldID0gcGJ0W0JMT0NLX1RBQkxFX0lOREVYXTsKKwkJCXBidFtCTE9DS19UQUJMRV9JTkRFWF0gPSB0ZW1wTm9kZTsKKwkJfQorCX0KKwlwYnRbQkxPQ0tfVEFCTEVfSU5ERVhdICY9ICh+U1BBUkVfQkxPQ0spOworCisjaWYgQ01EX0RNQQorCXBidFN0YXJ0aW5nQ29weVtCTE9DS19UQUJMRV9JTkRFWF0gJj0gKH5TUEFSRV9CTE9DSyk7CisjZW5kaWYKKworCWdfY0Jsb2NrVGFibGVTdGF0dXMgPSBJTl9QUk9HUkVTU19CTE9DS19UQUJMRTsKKwltZW1zZXQoZ19wQlRCbG9ja3MsIDB4RkYsCisJCQkoMSArIExBU1RfQlRfSUQgLSBGSVJTVF9CVF9JRCkgKiBzaXplb2YodTMyKSk7CisJZ19wQlRCbG9ja3NbRklSU1RfQlRfSUQtRklSU1RfQlRfSURdID0gZ193QmxvY2tUYWJsZUluZGV4OworCUZUTF9Xcml0ZV9CbG9ja19UYWJsZShGQUlMKTsKKworCWZvciAoaSA9IDA7IGkgPCBDQUNIRV9JVEVNX05VTTsgaSsrKSB7CisJCUNhY2hlLmFycmF5W2ldLmFkZHJlc3MgPSBOQU5EX0NBQ0hFX0lOSVRfQUREUjsKKwkJQ2FjaGUuYXJyYXlbaV0udXNlX2NudCA9IDA7CisJCUNhY2hlLmFycmF5W2ldLmNoYW5nZWQgID0gQ0xFQVI7CisJfQorCisjaWYgKFJFU1RPUkVfQ0FDSEVfT05fQ0RNQV9DSEFJTl9GQUlMVVJFICYmIENNRF9ETUEpCisJbWVtY3B5KCh2b2lkICopJmNhY2hlX3N0YXJ0X2NvcHksICh2b2lkICopJkNhY2hlLAorCQkJc2l6ZW9mKHN0cnVjdCBmbGFzaF9jYWNoZV90YWcpKTsKKyNlbmRpZgorCXJldHVybiBQQVNTOworfQorCitzdGF0aWMgaW50ICBmb3JjZV9mb3JtYXRfbmFuZCh2b2lkKQoreworCXUzMiBpOworCisJLyogRm9yY2UgZXJhc2UgdGhlIHdob2xlIHVucHJvdGVjdGVkIHBoeXNpY2FsIHBhcnRpdG9uIG9mIE5BTkQgKi8KKwlwcmludGsoS0VSTl9BTEVSVCAiU3RhcnQgdG8gZm9yY2UgZXJhc2Ugd2hvbGUgTkFORCBkZXZpY2UgLi4uXG4iKTsKKwlwcmludGsoS0VSTl9BTEVSVCAiRnJvbSBwaHlpY2FsIGJsb2NrICVkIHRvICVkXG4iLAorCQlEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9jaywgRGV2aWNlSW5mby53U3BlY3RyYUVuZEJsb2NrKTsKKwlmb3IgKGkgPSBEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9jazsgaSA8PSBEZXZpY2VJbmZvLndTcGVjdHJhRW5kQmxvY2s7IGkrKykgeworCQlpZiAoR0xPQl9MTERfRXJhc2VfQmxvY2soaSkpCisJCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBmb3JjZSBlcmFzZSBOQU5EIGJsb2NrICVkXG4iLCBpKTsKKwl9CisJcHJpbnRrKEtFUk5fQUxFUlQgIkZvcmNlIEVyYXNlIGVuZHMuIFBsZWFzZSByZWJvb3QgdGhlIHN5c3RlbSAuLi5cbiIpOworCXdoaWxlKDEpOworCisJcmV0dXJuIFBBU1M7Cit9CisKK2ludCBHTE9CX0ZUTF9GbGFzaF9Gb3JtYXQodm9pZCkKK3sKKwkvL3JldHVybiBGVExfRm9ybWF0X0ZsYXNoKDEpOworCXJldHVybiBmb3JjZV9mb3JtYXRfbmFuZCgpOworCit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgRlRMX1NlYXJjaF9CbG9ja19UYWJsZV9JTl9CbG9jaworKiBJbnB1dHM6ICAgICAgIEJsb2NrIE51bWJlcgorKiAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gcGFnZQorKiBPdXRwdXRzOiAgICAgIFBBU1MgLyBGQUlMCisqICAgICAgICAgICAgICAgUGFnZSBjb250YXRpbmluZyB0aGUgYmxvY2sgdGFibGUKKyogRGVzY3JpcHRpb246ICBJdCBzZWFyY2hlcyB0aGUgYmxvY2sgdGFibGUgaW4gdGhlIGJsb2NrCisqICAgICAgICAgICAgICAgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LgorKgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3N0YXRpYyBpbnQgRlRMX1NlYXJjaF9CbG9ja19UYWJsZV9JTl9CbG9jayh1MzIgQlRfQmxvY2ssCisJCQkJCQl1OCBCVF9UYWcsIHUxNiAqUGFnZSkKK3sKKwl1MTYgaSwgaiwgazsKKwl1MTYgUmVzdWx0ID0gUEFTUzsKKwl1MTYgTGFzdF9JUEYgPSAwOworCXU4ICBCVF9Gb3VuZCA9IDA7CisJdTggKnRhZ2FycmF5OworCXU4ICp0ZW1wYnVmID0gdG1wX2J1Zl9zZWFyY2hfYnRfaW5fYmxvY2s7CisJdTggKnBTcGFyZUJ1ZiA9IHNwYXJlX2J1Zl9zZWFyY2hfYnRfaW5fYmxvY2s7CisJdTggKnBTcGFyZUJ1ZkJUTGFzdFBhZ2UgPSBzcGFyZV9idWZfYnRfc2VhcmNoX2J0X2luX2Jsb2NrOworCXU4IGJ0X2ZsYWdfbGFzdF9wYWdlID0gMHhGRjsKKwl1OCBzZWFyY2hfaW5fcHJldmlvdXNfcGFnZXMgPSAwOworCXUxNiBidF9wYWdlczsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkgICAgICAgIlNlYXJjaGluZyBibG9jayB0YWJsZSBpbiAldSBibG9ja1xuIiwKKwkJICAgICAgICh1bnNpZ25lZCBpbnQpQlRfQmxvY2spOworCisJYnRfcGFnZXMgPSBGVExfR2V0X0Jsb2NrX1RhYmxlX0ZsYXNoX1NpemVfUGFnZXMoKTsKKworCWZvciAoaSA9IGJ0X3BhZ2VzOyBpIDwgRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jazsKKwkJCQlpICs9IChidF9wYWdlcyArIDEpKSB7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJICAgICAgICJTZWFyY2hpbmcgbGFzdCBJUEY6ICVkXG4iLCBpKTsKKwkJUmVzdWx0ID0gR0xPQl9MTERfUmVhZF9QYWdlX01haW5fUG9sbGluZyh0ZW1wYnVmLAorCQkJCQkJCUJUX0Jsb2NrLCBpLCAxKTsKKworCQlpZiAoMCA9PSBtZW1jbXAodGVtcGJ1ZiwgZ19wSVBGLCBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUpKSB7CisJCQlpZiAoKGkgKyBidF9wYWdlcyArIDEpIDwgRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jaykgeworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIHsKKwkJCQlzZWFyY2hfaW5fcHJldmlvdXNfcGFnZXMgPSAxOworCQkJCUxhc3RfSVBGID0gaTsKKwkJCX0KKwkJfQorCisJCWlmICghc2VhcmNoX2luX3ByZXZpb3VzX3BhZ2VzKSB7CisJCQlpZiAoaSAhPSBidF9wYWdlcykgeworCQkJCWkgLT0gKGJ0X3BhZ2VzICsgMSk7CisJCQkJTGFzdF9JUEYgPSBpOworCQkJfQorCQl9CisKKwkJaWYgKDAgPT0gTGFzdF9JUEYpCisJCQlicmVhazsKKworCQlpZiAoIXNlYXJjaF9pbl9wcmV2aW91c19wYWdlcykgeworCQkJaSA9IGkgKyAxOworCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkJIlJlYWRpbmcgdGhlIHNwYXJlIGFyZWEgb2YgQmxvY2sgJXUgUGFnZSAldSIsCisJCQkJKHVuc2lnbmVkIGludClCVF9CbG9jaywgaSk7CisJCQlSZXN1bHQgPSBHTE9CX0xMRF9SZWFkX1BhZ2VfU3BhcmUocFNwYXJlQnVmLAorCQkJCQkJCUJUX0Jsb2NrLCBpLCAxKTsKKwkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJCSJSZWFkaW5nIHRoZSBzcGFyZSBhcmVhIG9mIEJsb2NrICV1IFBhZ2UgJXUiLAorCQkJCSh1bnNpZ25lZCBpbnQpQlRfQmxvY2ssIGkgKyBidF9wYWdlcyAtIDEpOworCQkJUmVzdWx0ID0gR0xPQl9MTERfUmVhZF9QYWdlX1NwYXJlKHBTcGFyZUJ1ZkJUTGFzdFBhZ2UsCisJCQkJQlRfQmxvY2ssIGkgKyBidF9wYWdlcyAtIDEsIDEpOworCisJCQlrID0gMDsKKwkJCWogPSBGVExfRXh0cmFjdF9CbG9ja19UYWJsZV9UYWcocFNwYXJlQnVmLCAmdGFnYXJyYXkpOworCQkJaWYgKGopIHsKKwkJCQlmb3IgKDsgayA8IGo7IGsrKykgeworCQkJCQlpZiAodGFnYXJyYXlba10gPT0gQlRfVGFnKQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiAoayA8IGopCisJCQkJYnRfZmxhZyA9IHRhZ2FycmF5W2tdOworCQkJZWxzZQorCQkJCVJlc3VsdCA9IEZBSUw7CisKKwkJCWlmIChSZXN1bHQgPT0gUEFTUykgeworCQkJCWsgPSAwOworCQkJCWogPSBGVExfRXh0cmFjdF9CbG9ja19UYWJsZV9UYWcoCisJCQkJCXBTcGFyZUJ1ZkJUTGFzdFBhZ2UsICZ0YWdhcnJheSk7CisJCQkJaWYgKGopIHsKKwkJCQkJZm9yICg7IGsgPCBqOyBrKyspIHsKKwkJCQkJCWlmICh0YWdhcnJheVtrXSA9PSBCVF9UYWcpCisJCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlpZiAoayA8IGopCisJCQkJCWJ0X2ZsYWdfbGFzdF9wYWdlID0gdGFnYXJyYXlba107CisJCQkJZWxzZQorCQkJCQlSZXN1bHQgPSBGQUlMOworCisJCQkJaWYgKFJlc3VsdCA9PSBQQVNTKSB7CisJCQkJCWlmIChidF9mbGFnID09IGJ0X2ZsYWdfbGFzdF9wYWdlKSB7CisJCQkJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCQkJCQkiQmxvY2sgdGFibGUgaXMgZm91bmQiCisJCQkJCQkJIiBpbiBwYWdlIGFmdGVyIElQRiAiCisJCQkJCQkJImF0IGJsb2NrICVkICIKKwkJCQkJCQkicGFnZSAlZFxuIiwKKwkJCQkJCQkoaW50KUJUX0Jsb2NrLCBpKTsKKwkJCQkJCUJUX0ZvdW5kID0gMTsKKwkJCQkJCSpQYWdlICA9IGk7CisJCQkJCQlnX2NCbG9ja1RhYmxlU3RhdHVzID0KKwkJCQkJCQlDVVJSRU5UX0JMT0NLX1RBQkxFOworCQkJCQkJYnJlYWs7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlSZXN1bHQgPSBGQUlMOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKHNlYXJjaF9pbl9wcmV2aW91c19wYWdlcykKKwkJCWkgPSBpIC0gYnRfcGFnZXM7CisJCWVsc2UKKwkJCWkgPSBpIC0gKGJ0X3BhZ2VzICsgMSk7CisKKwkJUmVzdWx0ID0gUEFTUzsKKworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCSJSZWFkaW5nIHRoZSBzcGFyZSBhcmVhIG9mIEJsb2NrICVkIFBhZ2UgJWQiLAorCQkJKGludClCVF9CbG9jaywgaSk7CisKKwkJUmVzdWx0ID0gR0xPQl9MTERfUmVhZF9QYWdlX1NwYXJlKHBTcGFyZUJ1ZiwgQlRfQmxvY2ssIGksIDEpOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCSJSZWFkaW5nIHRoZSBzcGFyZSBhcmVhIG9mIEJsb2NrICV1IFBhZ2UgJXUiLAorCQkJKHVuc2lnbmVkIGludClCVF9CbG9jaywgaSArIGJ0X3BhZ2VzIC0gMSk7CisKKwkJUmVzdWx0ID0gR0xPQl9MTERfUmVhZF9QYWdlX1NwYXJlKHBTcGFyZUJ1ZkJUTGFzdFBhZ2UsCisJCQkJCUJUX0Jsb2NrLCBpICsgYnRfcGFnZXMgLSAxLCAxKTsKKworCQlrID0gMDsKKwkJaiA9IEZUTF9FeHRyYWN0X0Jsb2NrX1RhYmxlX1RhZyhwU3BhcmVCdWYsICZ0YWdhcnJheSk7CisJCWlmIChqKSB7CisJCQlmb3IgKDsgayA8IGo7IGsrKykgeworCQkJCWlmICh0YWdhcnJheVtrXSA9PSBCVF9UYWcpCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKGsgPCBqKQorCQkJYnRfZmxhZyA9IHRhZ2FycmF5W2tdOworCQllbHNlCisJCQlSZXN1bHQgPSBGQUlMOworCisJCWlmIChSZXN1bHQgPT0gUEFTUykgeworCQkJayA9IDA7CisJCQlqID0gRlRMX0V4dHJhY3RfQmxvY2tfVGFibGVfVGFnKHBTcGFyZUJ1ZkJUTGFzdFBhZ2UsCisJCQkJCQkmdGFnYXJyYXkpOworCQkJaWYgKGopIHsKKwkJCQlmb3IgKDsgayA8IGo7IGsrKykgeworCQkJCQlpZiAodGFnYXJyYXlba10gPT0gQlRfVGFnKQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiAoayA8IGopIHsKKwkJCQlidF9mbGFnX2xhc3RfcGFnZSA9IHRhZ2FycmF5W2tdOworCQkJfSBlbHNlIHsKKwkJCQlSZXN1bHQgPSBGQUlMOworCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAoUmVzdWx0ID09IFBBU1MpIHsKKwkJCQlpZiAoYnRfZmxhZyA9PSBidF9mbGFnX2xhc3RfcGFnZSkgeworCQkJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCQkJCSJCbG9jayB0YWJsZSBpcyBmb3VuZCAiCisJCQkJCQkiaW4gcGFnZSBwcmlvciB0byBJUEYgIgorCQkJCQkJImF0IGJsb2NrICV1IHBhZ2UgJWRcbiIsCisJCQkJCQkodW5zaWduZWQgaW50KUJUX0Jsb2NrLCBpKTsKKwkJCQkJQlRfRm91bmQgPSAxOworCQkJCQkqUGFnZSAgPSBpOworCQkJCQlnX2NCbG9ja1RhYmxlU3RhdHVzID0KKwkJCQkJCUlOX1BST0dSRVNTX0JMT0NLX1RBQkxFOworCQkJCQlicmVhazsKKwkJCQl9IGVsc2UgeworCQkJCQlSZXN1bHQgPSBGQUlMOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlpZiAoUmVzdWx0ID09IEZBSUwpIHsKKwkJaWYgKChMYXN0X0lQRiA+IGJ0X3BhZ2VzKSAmJiAoaSA8IExhc3RfSVBGKSAmJiAoIUJUX0ZvdW5kKSkgeworCQkJQlRfRm91bmQgPSAxOworCQkJKlBhZ2UgPSBpIC0gKGJ0X3BhZ2VzICsgMSk7CisJCX0KKwkJaWYgKChMYXN0X0lQRiA9PSBidF9wYWdlcykgJiYgKGkgPCBMYXN0X0lQRikgJiYgKCFCVF9Gb3VuZCkpCisJCQlnb3RvIGZ1bmNfcmV0dXJuOworCX0KKworCWlmIChMYXN0X0lQRiA9PSAwKSB7CisJCWkgPSAwOworCQlSZXN1bHQgPSBQQVNTOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlJlYWRpbmcgdGhlIHNwYXJlIGFyZWEgb2YgIgorCQkJIkJsb2NrICV1IFBhZ2UgJXUiLCAodW5zaWduZWQgaW50KUJUX0Jsb2NrLCBpKTsKKworCQlSZXN1bHQgPSBHTE9CX0xMRF9SZWFkX1BhZ2VfU3BhcmUocFNwYXJlQnVmLCBCVF9CbG9jaywgaSwgMSk7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJIlJlYWRpbmcgdGhlIHNwYXJlIGFyZWEgb2YgQmxvY2sgJXUgUGFnZSAldSIsCisJCQkodW5zaWduZWQgaW50KUJUX0Jsb2NrLCBpICsgYnRfcGFnZXMgLSAxKTsKKwkJUmVzdWx0ID0gR0xPQl9MTERfUmVhZF9QYWdlX1NwYXJlKHBTcGFyZUJ1ZkJUTGFzdFBhZ2UsCisJCQkJCUJUX0Jsb2NrLCBpICsgYnRfcGFnZXMgLSAxLCAxKTsKKworCQlrID0gMDsKKwkJaiA9IEZUTF9FeHRyYWN0X0Jsb2NrX1RhYmxlX1RhZyhwU3BhcmVCdWYsICZ0YWdhcnJheSk7CisJCWlmIChqKSB7CisJCQlmb3IgKDsgayA8IGo7IGsrKykgeworCQkJCWlmICh0YWdhcnJheVtrXSA9PSBCVF9UYWcpCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKGsgPCBqKQorCQkJYnRfZmxhZyA9IHRhZ2FycmF5W2tdOworCQllbHNlCisJCQlSZXN1bHQgPSBGQUlMOworCisJCWlmIChSZXN1bHQgPT0gUEFTUykgeworCQkJayA9IDA7CisJCQlqID0gRlRMX0V4dHJhY3RfQmxvY2tfVGFibGVfVGFnKHBTcGFyZUJ1ZkJUTGFzdFBhZ2UsCisJCQkJCQkJJnRhZ2FycmF5KTsKKwkJCWlmIChqKSB7CisJCQkJZm9yICg7IGsgPCBqOyBrKyspIHsKKwkJCQkJaWYgKHRhZ2FycmF5W2tdID09IEJUX1RhZykKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGsgPCBqKQorCQkJCWJ0X2ZsYWdfbGFzdF9wYWdlID0gdGFnYXJyYXlba107CisJCQllbHNlCisJCQkJUmVzdWx0ID0gRkFJTDsKKworCQkJaWYgKFJlc3VsdCA9PSBQQVNTKSB7CisJCQkJaWYgKGJ0X2ZsYWcgPT0gYnRfZmxhZ19sYXN0X3BhZ2UpIHsKKwkJCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkJCQkiQmxvY2sgdGFibGUgaXMgZm91bmQgIgorCQkJCQkJImluIHBhZ2UgYWZ0ZXIgSVBGIGF0ICIKKwkJCQkJCSJibG9jayAldSBwYWdlICV1XG4iLAorCQkJCQkJKHVuc2lnbmVkIGludClCVF9CbG9jaywKKwkJCQkJCSh1bnNpZ25lZCBpbnQpaSk7CisJCQkJCUJUX0ZvdW5kID0gMTsKKwkJCQkJKlBhZ2UgID0gaTsKKwkJCQkJZ19jQmxvY2tUYWJsZVN0YXR1cyA9CisJCQkJCQlDVVJSRU5UX0JMT0NLX1RBQkxFOworCQkJCQlnb3RvIGZ1bmNfcmV0dXJuOworCQkJCX0gZWxzZSB7CisJCQkJCVJlc3VsdCA9IEZBSUw7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKFJlc3VsdCA9PSBGQUlMKQorCQkJZ290byBmdW5jX3JldHVybjsKKwl9CitmdW5jX3JldHVybjoKKwlyZXR1cm4gUmVzdWx0OworfQorCit1OCAqZ2V0X2Jsa190YWJsZV9zdGFydF9hZGRyKHZvaWQpCit7CisJcmV0dXJuIGdfcEJsb2NrVGFibGU7Cit9CisKK3Vuc2lnbmVkIGxvbmcgZ2V0X2Jsa190YWJsZV9sZW4odm9pZCkKK3sKKwlyZXR1cm4gRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICogc2l6ZW9mKHUzMik7Cit9CisKK3U4ICpnZXRfd2Vhcl9sZXZlbGluZ190YWJsZV9zdGFydF9hZGRyKHZvaWQpCit7CisJcmV0dXJuIGdfcFdlYXJDb3VudGVyOworfQorCit1bnNpZ25lZCBsb25nIGdldF93ZWFyX2xldmVsaW5nX3RhYmxlX2xlbih2b2lkKQoreworCXJldHVybiBEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0gKiBzaXplb2YodTgpOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEZUTF9SZWFkX0Jsb2NrX1RhYmxlCisqIElucHV0czogICAgICAgbm9uZQorKiBPdXRwdXRzOiAgICAgIFBBU1MgLyBGQUlMCisqIERlc2NyaXB0aW9uOiAgcmVhZCB0aGUgZmxhc2ggc3BhcmUgYXJlYSBhbmQgZmluZCBhIGJsb2NrIGNvbnRhaW5pbmcgdGhlCisqICAgICAgICAgICAgICAgbW9zdCByZWNlbnQgYmxvY2sgdGFibGUoaGF2aW5nIGxhcmdlc3QgYmxvY2tfdGFibGVfY291bnRlcikuCisqICAgICAgICAgICAgICAgRmluZCB0aGUgbGFzdCB3cml0dGVuIEJsb2NrIHRhYmxlIGluIHRoaXMgYmxvY2suCisqICAgICAgICAgICAgICAgQ2hlY2sgdGhlIGNvcnJlY3RuZXNzIG9mIEJsb2NrIFRhYmxlCisqICAgICAgICAgICAgICAgSWYgQ0RNQSBpcyBlbmFibGVkLCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbgorKiAgICAgICAgICAgICAgIHBvbGxpbmcgbW9kZS4KKyogICAgICAgICAgICAgICBXZSBkb24ndCBuZWVkIHRvIHN0b3JlIGNoYW5nZXMgaW4gQmxvY2sgdGFibGUgaW4gdGhpcworKiAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFzIGl0IGlzIGNhbGxlZCBvbmx5IGF0IGluaXRpYWxpemF0aW9uCisqCisqICAgICAgICAgICAgICAgTm90ZTogQ3VycmVudGx5IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IGluaXRpYWxpemF0aW9uCisqICAgICAgICAgICAgICAgYmVmb3JlIGFueSByZWFkL2VyYXNlL3dyaXRlIGNvbW1hbmQgaXNzdWVkIHRvIGZsYXNoIHNvLAorKiAgICAgICAgICAgICAgIHRoZXJlIGlzIG5vIG5lZWQgdG8gd2FpdCBmb3IgQ0RNQSBsaXN0IHRvIGNvbXBsZXRlIGFzIG9mIG5vdworKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3N0YXRpYyBpbnQgRlRMX1JlYWRfQmxvY2tfVGFibGUodm9pZCkKK3sKKwl1MTYgaSA9IDA7CisJaW50IGssIGo7CisJdTggKnRlbXBCdWYsICp0YWdhcnJheTsKKwlpbnQgd1Jlc3VsdCA9IEZBSUw7CisJaW50IHN0YXR1cyA9IEZBSUw7CisJdTggYmxvY2tfdGFibGVfZm91bmQgPSAwOworCWludCBzZWFyY2hfcmVzdWx0OworCXUzMiBCbG9jazsKKwl1MTYgUGFnZSA9IDA7CisJdTE2IFBhZ2VDb3VudDsKKwl1MTYgYnRfcGFnZXM7CisJaW50IHdCeXRlc0NvcGllZCA9IDAsIHRlbXB2YXI7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwl0ZW1wQnVmID0gdG1wX2J1ZjFfcmVhZF9ibGtfdGFibGU7CisJYnRfcGFnZXMgPSBGVExfR2V0X0Jsb2NrX1RhYmxlX0ZsYXNoX1NpemVfUGFnZXMoKTsKKworCWZvciAoaiA9IERldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrOworCQlqIDw9IChpbnQpRGV2aWNlSW5mby53U3BlY3RyYUVuZEJsb2NrOworCQkJaisrKSB7CisJCXN0YXR1cyA9IEdMT0JfTExEX1JlYWRfUGFnZV9TcGFyZSh0ZW1wQnVmLCBqLCAwLCAxKTsKKwkJayA9IDA7CisJCWkgPSBGVExfRXh0cmFjdF9CbG9ja19UYWJsZV9UYWcodGVtcEJ1ZiwgJnRhZ2FycmF5KTsKKwkJaWYgKGkpIHsKKwkJCXN0YXR1cyAgPSBHTE9CX0xMRF9SZWFkX1BhZ2VfTWFpbl9Qb2xsaW5nKHRlbXBCdWYsCisJCQkJCQkJCWosIDAsIDEpOworCQkJZm9yICg7IGsgPCBpOyBrKyspIHsKKwkJCQlpZiAodGFnYXJyYXlba10gPT0gdGVtcEJ1ZlszXSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoayA8IGkpCisJCQlrID0gdGFnYXJyYXlba107CisJCWVsc2UKKwkJCWNvbnRpbnVlOworCisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJCSJCbG9jayB0YWJsZSBpcyBjb250YWluZWQgaW4gQmxvY2sgJWQgJWRcbiIsCisJCQkJICAgICAgICh1bnNpZ25lZCBpbnQpaiwgKHVuc2lnbmVkIGludClrKTsKKworCQlpZiAoZ19wQlRCbG9ja3Nbay1GSVJTVF9CVF9JRF0gPT0gQlRCTE9DS19JTlZBTCkgeworCQkJZ19wQlRCbG9ja3Nbay1GSVJTVF9CVF9JRF0gPSBqOworCQkJYmxvY2tfdGFibGVfZm91bmQgPSAxOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fRVJSICJGVExfUmVhZF9CbG9ja19UYWJsZSAtIgorCQkJCSJUaGlzIHNob3VsZCBuZXZlciBoYXBwZW5zLiAiCisJCQkJIlR3byBibG9jayB0YWJsZSBoYXZlIHNhbWUgY291bnRlciAldSFcbiIsIGspOworCQl9CisJfQorCisJaWYgKGJsb2NrX3RhYmxlX2ZvdW5kKSB7CisJCWlmIChnX3BCVEJsb2Nrc1tGSVJTVF9CVF9JRCAtIEZJUlNUX0JUX0lEXSAhPSBCVEJMT0NLX0lOVkFMICYmCisJCWdfcEJUQmxvY2tzW0xBU1RfQlRfSUQgLSBGSVJTVF9CVF9JRF0gIT0gQlRCTE9DS19JTlZBTCkgeworCQkJaiA9IExBU1RfQlRfSUQ7CisJCQl3aGlsZSAoKGogPiBGSVJTVF9CVF9JRCkgJiYKKwkJCShnX3BCVEJsb2Nrc1tqIC0gRklSU1RfQlRfSURdICE9IEJUQkxPQ0tfSU5WQUwpKQorCQkJCWotLTsKKwkJCWlmIChqID09IEZJUlNUX0JUX0lEKSB7CisJCQkJaiA9IExBU1RfQlRfSUQ7CisJCQkJbGFzdF9lcmFzZWQgPSBMQVNUX0JUX0lEOworCQkJfSBlbHNlIHsKKwkJCQlsYXN0X2VyYXNlZCA9ICh1OClqICsgMTsKKwkJCQl3aGlsZSAoKGogPiBGSVJTVF9CVF9JRCkgJiYgKEJUQkxPQ0tfSU5WQUwgPT0KKwkJCQkJZ19wQlRCbG9ja3NbaiAtIEZJUlNUX0JUX0lEXSkpCisJCQkJCWotLTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWogPSBGSVJTVF9CVF9JRDsKKwkJCXdoaWxlIChnX3BCVEJsb2Nrc1tqIC0gRklSU1RfQlRfSURdID09IEJUQkxPQ0tfSU5WQUwpCisJCQkJaisrOworCQkJbGFzdF9lcmFzZWQgPSAodTgpajsKKwkJCXdoaWxlICgoaiA8IExBU1RfQlRfSUQpICYmIChCVEJMT0NLX0lOVkFMICE9CisJCQkJZ19wQlRCbG9ja3NbaiAtIEZJUlNUX0JUX0lEXSkpCisJCQkJaisrOworCQkJaWYgKGdfcEJUQmxvY2tzW2otRklSU1RfQlRfSURdID09IEJUQkxPQ0tfSU5WQUwpCisJCQkJai0tOworCQl9CisKKwkJaWYgKGxhc3RfZXJhc2VkID4gaikKKwkJCWogKz0gKDEgKyBMQVNUX0JUX0lEIC0gRklSU1RfQlRfSUQpOworCisJCWZvciAoOyAoaiA+PSBsYXN0X2VyYXNlZCkgJiYgKEZBSUwgPT0gd1Jlc3VsdCk7IGotLSkgeworCQkJaSA9IChqIC0gRklSU1RfQlRfSUQpICUKKwkJCQkoMSArIExBU1RfQlRfSUQgLSBGSVJTVF9CVF9JRCk7CisJCQlzZWFyY2hfcmVzdWx0ID0KKwkJCUZUTF9TZWFyY2hfQmxvY2tfVGFibGVfSU5fQmxvY2soZ19wQlRCbG9ja3NbaV0sCisJCQkJCQlpICsgRklSU1RfQlRfSUQsICZQYWdlKTsKKwkJCWlmIChnX2NCbG9ja1RhYmxlU3RhdHVzID09IElOX1BST0dSRVNTX0JMT0NLX1RBQkxFKQorCQkJCWJsb2NrX3RhYmxlX2ZvdW5kID0gMDsKKworCQkJd2hpbGUgKChzZWFyY2hfcmVzdWx0ID09IFBBU1MpICYmIChGQUlMID09IHdSZXN1bHQpKSB7CisJCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkJCSJGVExfUmVhZF9CbG9ja19UYWJsZToiCisJCQkJCSJCbG9jazogJXUgUGFnZTogJXUgIgorCQkJCQkiY29udGFpbnMgYmxvY2sgdGFibGVcbiIsCisJCQkJCSh1bnNpZ25lZCBpbnQpZ19wQlRCbG9ja3NbaV0sCisJCQkJCSh1bnNpZ25lZCBpbnQpUGFnZSk7CisKKwkJCQl0ZW1wQnVmID0gdG1wX2J1ZjJfcmVhZF9ibGtfdGFibGU7CisKKwkJCQlmb3IgKGsgPSAwOyBrIDwgYnRfcGFnZXM7IGsrKykgeworCQkJCQlCbG9jayA9IGdfcEJUQmxvY2tzW2ldOworCQkJCQlQYWdlQ291bnQgPSAxOworCisJCQkJCXN0YXR1cyAgPQorCQkJCQlHTE9CX0xMRF9SZWFkX1BhZ2VfTWFpbl9Qb2xsaW5nKAorCQkJCQl0ZW1wQnVmLCBCbG9jaywgUGFnZSwgUGFnZUNvdW50KTsKKworCQkJCQl0ZW1wdmFyID0gayA/IDAgOiA0OworCisJCQkJCXdCeXRlc0NvcGllZCArPQorCQkJCQlGVExfQ29weV9CbG9ja19UYWJsZV9Gcm9tX0ZsYXNoKAorCQkJCQl0ZW1wQnVmICsgdGVtcHZhciwKKwkJCQkJRGV2aWNlSW5mby53UGFnZURhdGFTaXplIC0gdGVtcHZhciwKKwkJCQkJd0J5dGVzQ29waWVkKTsKKworCQkJCQlQYWdlKys7CisJCQkJfQorCisJCQkJd1Jlc3VsdCA9IEZUTF9DaGVja19CbG9ja19UYWJsZShGQUlMKTsKKwkJCQlpZiAoRkFJTCA9PSB3UmVzdWx0KSB7CisJCQkJCWJsb2NrX3RhYmxlX2ZvdW5kID0gMDsKKwkJCQkJaWYgKFBhZ2UgPiBidF9wYWdlcykKKwkJCQkJCVBhZ2UgLT0gKChidF9wYWdlczw8MSkgKyAxKTsKKwkJCQkJZWxzZQorCQkJCQkJc2VhcmNoX3Jlc3VsdCA9IEZBSUw7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJaWYgKFBBU1MgPT0gd1Jlc3VsdCkgeworCQlpZiAoIWJsb2NrX3RhYmxlX2ZvdW5kKQorCQkJRlRMX0V4ZWN1dGVfU1BMX1JlY292ZXJ5KCk7CisKKwkJaWYgKGdfY0Jsb2NrVGFibGVTdGF0dXMgPT0gSU5fUFJPR1JFU1NfQkxPQ0tfVEFCTEUpCisJCQlnX3dCbG9ja1RhYmxlT2Zmc2V0ID0gKHUxNilQYWdlICsgMTsKKwkJZWxzZQorCQkJZ193QmxvY2tUYWJsZU9mZnNldCA9ICh1MTYpUGFnZSAtIGJ0X3BhZ2VzOworCisJCWdfd0Jsb2NrVGFibGVJbmRleCA9ICh1MzIpZ19wQlRCbG9ja3NbaV07CisKKyNpZiBDTURfRE1BCisJCWlmIChEZXZpY2VJbmZvLk1MQ0RldmljZSkKKwkJCW1lbWNweShnX3BCVFN0YXJ0aW5nQ29weSwgZ19wQmxvY2tUYWJsZSwKKwkJCQlEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0gKiBzaXplb2YodTMyKQorCQkJCSsgRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICogc2l6ZW9mKHU4KQorCQkJCSsgRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICogc2l6ZW9mKHUxNikpOworCQllbHNlCisJCQltZW1jcHkoZ19wQlRTdGFydGluZ0NvcHksIGdfcEJsb2NrVGFibGUsCisJCQkJRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICogc2l6ZW9mKHUzMikKKwkJCQkrIERldmljZUluZm8ud0RhdGFCbG9ja051bSAqIHNpemVvZih1OCkpOworI2VuZGlmCisJfQorCisJaWYgKEZBSUwgPT0gd1Jlc3VsdCkKKwkJcHJpbnRrKEtFUk5fRVJSICJZdW5wZW5nIC0gIgorCQkiQ2FuIG5vdCBmaW5kIHZhbGlkIHNwZWN0cmEgYmxvY2sgdGFibGUhXG4iKTsKKworI2lmIEFVVE9fRk9STUFUX0ZMQVNICisJaWYgKEZBSUwgPT0gd1Jlc3VsdCkgeworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgImRvaW5nIGF1dG8tZm9ybWF0XG4iKTsKKwkJd1Jlc3VsdCA9IEZUTF9Gb3JtYXRfRmxhc2goMCk7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gd1Jlc3VsdDsKK30KKworCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBGVExfRmxhc2hfRXJyb3JfSGFuZGxlCisqIElucHV0czogICAgICAgUG9pbnRlciB0byBkYXRhCisqICAgICAgICAgICAgICAgUGFnZSBhZGRyZXNzCisqICAgICAgICAgICAgICAgQmxvY2sgYWRkcmVzcworKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAvIEZBSUw9MQorKiBEZXNjcmlwdGlvbjogIEl0IGhhbmRsZXMgYW55IGVycm9yIG9jY3VyZWQgZHVyaW5nIFNwZWN0cmEgb3BlcmF0aW9uCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworc3RhdGljIGludCBGVExfRmxhc2hfRXJyb3JfSGFuZGxlKHU4ICpwRGF0YSwgdTY0IG9sZF9wYWdlX2FkZHIsCisJCQkJdTY0IGJsa19hZGRyKQoreworCXUzMiBpOworCWludCBqOworCXUzMiB0bXBfbm9kZSwgYmxrX25vZGUgPSBCTEtfRlJPTV9BRERSKGJsa19hZGRyKTsKKwl1NjQgcGh5X2FkZHI7CisJaW50IHdFcmFzZSA9IEZBSUw7CisJaW50IHdSZXN1bHQgPSBGQUlMOworCXUzMiAqcGJ0ID0gKHUzMiAqKWdfcEJsb2NrVGFibGU7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWlmIChFUlIgPT0gR0xPQl9GVExfR2FyYmFnZV9Db2xsZWN0aW9uKCkpCisJCXJldHVybiBFUlI7CisKKwlkbyB7CisJCWZvciAoaSA9IERldmljZUluZm8ud1NwZWN0cmFFbmRCbG9jayAtCisJCQlEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9jazsKKwkJCQkJaSA+IDA7IGktLSkgeworCQkJaWYgKElTX1NQQVJFX0JMT0NLKGkpKSB7CisJCQkJdG1wX25vZGUgPSAodTMyKShCQURfQkxPQ0sgfAorCQkJCQlwYnRbYmxrX25vZGVdKTsKKwkJCQlwYnRbYmxrX25vZGVdID0gKHUzMikocGJ0W2ldICYKKwkJCQkJKH5TUEFSRV9CTE9DSykpOworCQkJCXBidFtpXSA9IHRtcF9ub2RlOworI2lmIENNRF9ETUEKKwkJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YSA9CisJCQkJICAgIChzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhICopCisJCQkJICAgIGdfcEJURGVsdGFfRnJlZTsKKwkJCQlnX3BCVERlbHRhX0ZyZWUgKz0KKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEpOworCisJCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250ID0KKwkJCQkgICAgZnRsX2NtZF9jbnQ7CisJCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPkJUX0luZGV4ID0KKwkJCQkgICAgYmxrX25vZGU7CisJCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPkJUX0VudHJ5X1ZhbHVlID0KKwkJCQkgICAgcGJ0W2Jsa19ub2RlXTsKKwkJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+VmFsaWRGaWVsZHMgPSAweDBDOworCisJCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEgPQorCQkJCSAgICAoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSAqKQorCQkJCSAgICBnX3BCVERlbHRhX0ZyZWU7CisJCQkJZ19wQlREZWx0YV9GcmVlICs9CisJCQkJICAgIHNpemVvZihzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhKTsKKworCQkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5mdGxfY21kX2NudCA9CisJCQkJICAgIGZ0bF9jbWRfY250OworCQkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5CVF9JbmRleCA9IGk7CisJCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPkJUX0VudHJ5X1ZhbHVlID0gcGJ0W2ldOworCQkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5WYWxpZEZpZWxkcyA9IDB4MEM7CisjZW5kaWYKKwkJCQl3UmVzdWx0ID0gUEFTUzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChGQUlMID09IHdSZXN1bHQpIHsKKwkJCWlmIChGQUlMID09IEdMT0JfRlRMX0dhcmJhZ2VfQ29sbGVjdGlvbigpKQorCQkJCWJyZWFrOworCQkJZWxzZQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKElOX1BST0dSRVNTX0JMT0NLX1RBQkxFICE9IGdfY0Jsb2NrVGFibGVTdGF0dXMpIHsKKwkJCWdfY0Jsb2NrVGFibGVTdGF0dXMgPSBJTl9QUk9HUkVTU19CTE9DS19UQUJMRTsKKwkJCUZUTF9Xcml0ZV9JTl9Qcm9ncmVzc19CbG9ja19UYWJsZV9QYWdlKCk7CisJCX0KKworCQlwaHlfYWRkciA9IEZUTF9HZXRfUGh5c2ljYWxfQmxvY2tfQWRkcihibGtfYWRkcik7CisKKwkJZm9yIChqID0gMDsgaiA8IFJFVFJZX1RJTUVTOyBqKyspIHsKKwkJCWlmIChQQVNTID09IHdFcmFzZSkgeworCQkJCWlmIChGQUlMID09IEdMT0JfRlRMX0Jsb2NrX0VyYXNlKHBoeV9hZGRyKSkgeworCQkJCQlNQVJLX0JMT0NLX0FTX0JBRChwYnRbYmxrX25vZGVdKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKFBBU1MgPT0gRlRMX0NhY2hlX1VwZGF0ZV9CbG9jayhwRGF0YSwKKwkJCQkJCQkgICBvbGRfcGFnZV9hZGRyLAorCQkJCQkJCSAgIHBoeV9hZGRyKSkgeworCQkJCXdSZXN1bHQgPSBQQVNTOworCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQl3UmVzdWx0ID0gRkFJTDsKKwkJCQl3RXJhc2UgPSBQQVNTOworCQkJfQorCQl9CisJfSB3aGlsZSAoRkFJTCA9PSB3UmVzdWx0KTsKKworCUZUTF9Xcml0ZV9CbG9ja19UYWJsZShGQUlMKTsKKworCXJldHVybiB3UmVzdWx0OworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEZUTF9HZXRfUGFnZV9OdW0KKyogSW5wdXRzOiAgICAgICBTaXplIGluIGJ5dGVzCisqIE91dHB1dHM6ICAgICAgU2l6ZSBpbiBwYWdlcworKiBEZXNjcmlwdGlvbjogIEl0IGNhbGN1bGF0ZXMgdGhlIHBhZ2VzIHJlcXVpcmVkIGZvciB0aGUgbGVuZ3RoIHBhc3NlZAorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3N0YXRpYyB1MzIgRlRMX0dldF9QYWdlX051bSh1NjQgbGVuZ3RoKQoreworCXJldHVybiAodTMyKSgobGVuZ3RoID4+IERldmljZUluZm8ubkJpdHNJblBhZ2VEYXRhU2l6ZSkgKworCQkoR0xPQl91NjRfUmVtYWluZGVyKGxlbmd0aCAsIDEpID4gMCA/IDEgOiAwKSk7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgRlRMX0dldF9QaHlzaWNhbF9CbG9ja19BZGRyCisqIElucHV0czogICAgICAgQmxvY2sgQWRkcmVzcyAoYnl0ZSBmb3JtYXQpCisqIE91dHB1dHM6ICAgICAgUGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgYmxvY2suCisqIERlc2NyaXB0aW9uOiAgSXQgdHJhbnNsYXRlcyBMQkEgdG8gUEJBIGJ5IHJldHVybmluZyBhZGRyZXNzIHN0b3JlZAorKiAgICAgICAgICAgICAgIGF0IHRoZSBMQkEgbG9jYXRpb24gaW4gdGhlIGJsb2NrIHRhYmxlCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworc3RhdGljIHU2NCBGVExfR2V0X1BoeXNpY2FsX0Jsb2NrX0FkZHIodTY0IGxvZ2ljYWxfYWRkcikKK3sKKwl1MzIgKnBidDsKKwl1NjQgcGh5c2ljYWxfYWRkcjsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlwYnQgPSAodTMyICopZ19wQmxvY2tUYWJsZTsKKwlwaHlzaWNhbF9hZGRyID0gKHU2NCkgRGV2aWNlSW5mby53QmxvY2tEYXRhU2l6ZSAqCisJCShwYnRbQkxLX0ZST01fQUREUihsb2dpY2FsX2FkZHIpXSAmICh+QkFEX0JMT0NLKSk7CisKKwlyZXR1cm4gcGh5c2ljYWxfYWRkcjsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgRlRMX0dldF9CbG9ja19JbmRleAorKiBJbnB1dHM6ICAgICAgIFBoeXNpY2FsIEJsb2NrIG5vLgorKiBPdXRwdXRzOiAgICAgIExvZ2ljYWwgYmxvY2sgbm8uIC9CQURfQkxPQ0sKKyogRGVzY3JpcHRpb246ICBJdCByZXR1cm5zIHRoZSBsb2dpY2FsIGJsb2NrIG5vLiBmb3IgdGhlIFBCQSBwYXNzZWQKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3N0YXRpYyB1MzIgRlRMX0dldF9CbG9ja19JbmRleCh1MzIgd0Jsb2NrTnVtKQoreworCXUzMiAqcGJ0ID0gKHUzMiAqKWdfcEJsb2NrVGFibGU7CisJdTMyIGk7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWZvciAoaSA9IDA7IGkgPCBEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW07IGkrKykKKwkJaWYgKHdCbG9ja051bSA9PSAocGJ0W2ldICYgKH5CQURfQkxPQ0spKSkKKwkJCXJldHVybiBpOworCisJcmV0dXJuIEJBRF9CTE9DSzsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBHTE9CX0ZUTF9XZWFyX0xldmVsaW5nCisqIElucHV0czogICAgICAgbm9uZQorKiBPdXRwdXRzOiAgICAgIFBBU1M9MAorKiBEZXNjcmlwdGlvbjogIFRoaXMgaXMgc3RhdGljIHdlYXIgbGV2ZWxpbmcgKGRvbmUgYnkgZXhwbGljaXQgY2FsbCkKKyogICAgICAgICAgICAgICBkbyBjb21wbGV0ZSBzdGF0aWMgd2VhciBsZXZlbGluZworKiAgICAgICAgICAgICAgIGRvIGNvbXBsZXRlIGdhcmJhZ2UgY29sbGVjdGlvbgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK2ludCBHTE9CX0ZUTF9XZWFyX0xldmVsaW5nKHZvaWQpCit7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJRlRMX1N0YXRpY19XZWFyX0xldmVsaW5nKCk7CisJR0xPQl9GVExfR2FyYmFnZV9Db2xsZWN0aW9uKCk7CisKKwlyZXR1cm4gUEFTUzsKK30KKworc3RhdGljIHZvaWQgZmluZF9sZWFzdF9tb3N0X3dvcm4odTggKmNoZywKKwl1MzIgKmxlYXN0X2lkeCwgdTggKmxlYXN0X2NudCwKKwl1MzIgKm1vc3RfaWR4LCB1OCAqbW9zdF9jbnQpCit7CisJdTMyICpwYnQgPSAodTMyICopZ19wQmxvY2tUYWJsZTsKKwl1MzIgaWR4OworCXU4IGNudDsKKwlpbnQgaTsKKworCWZvciAoaSA9IEJMT0NLX1RBQkxFX0lOREVYICsgMTsgaSA8IERldmljZUluZm8ud0RhdGFCbG9ja051bTsgaSsrKSB7CisJCWlmIChJU19CQURfQkxPQ0soaSkgfHwgUEFTUyA9PSBjaGdbaV0pCisJCQljb250aW51ZTsKKworCQlpZHggPSAodTMyKSAoKH5CQURfQkxPQ0spICYgcGJ0W2ldKTsKKwkJY250ID0gZ19wV2VhckNvdW50ZXJbaWR4IC0gRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2tdOworCisJCWlmIChJU19TUEFSRV9CTE9DSyhpKSkgeworCQkJaWYgKGNudCA+ICptb3N0X2NudCkgeworCQkJCSptb3N0X2NudCA9IGNudDsKKwkJCQkqbW9zdF9pZHggPSBpZHg7CisJCQl9CisJCX0KKworCQlpZiAoSVNfREFUQV9CTE9DSyhpKSkgeworCQkJaWYgKGNudCA8ICpsZWFzdF9jbnQpIHsKKwkJCQkqbGVhc3RfY250ID0gY250OworCQkJCSpsZWFzdF9pZHggPSBpZHg7CisJCQl9CisJCX0KKworCQlpZiAoUEFTUyA9PSBjaGdbKm1vc3RfaWR4XSB8fCBQQVNTID09IGNoZ1sqbGVhc3RfaWR4XSkgeworCQkJZGVidWdfYm91bmRhcnlfZXJyb3IoKm1vc3RfaWR4LAorCQkJCURldmljZUluZm8ud0RhdGFCbG9ja051bSwgMCk7CisJCQlkZWJ1Z19ib3VuZGFyeV9lcnJvcigqbGVhc3RfaWR4LAorCQkJCURldmljZUluZm8ud0RhdGFCbG9ja051bSwgMCk7CisJCQljb250aW51ZTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBtb3ZlX2Jsa3NfZm9yX3dlYXJfbGV2ZWxpbmcodTggKmNoZywKKwl1MzIgKmxlYXN0X2lkeCwgdTMyICpyZXBfYmxrX251bSwgaW50ICpyZXN1bHQpCit7CisJdTMyICpwYnQgPSAodTMyICopZ19wQmxvY2tUYWJsZTsKKwl1MzIgcmVwX2JsazsKKwlpbnQgaiwgcmV0X2NwX2JsaywgcmV0X2VyYXNlOworCWludCByZXQgPSBQQVNTOworCisJY2hnWypsZWFzdF9pZHhdID0gUEFTUzsKKwlkZWJ1Z19ib3VuZGFyeV9lcnJvcigqbGVhc3RfaWR4LCBEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0sIDApOworCisJcmVwX2JsayA9IEZUTF9SZXBsYWNlX01XQmxvY2soKTsKKwlpZiAocmVwX2JsayAhPSBCQURfQkxPQ0spIHsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkiTW9yZSB0aGFuIHR3byBzcGFyZSBibG9ja3MgZXhpc3Qgc28gZG8gaXRcbiIpOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkJsb2NrIFJlcGxhY2VkIGlzICVkXG4iLAorCQkJCXJlcF9ibGspOworCisJCWNoZ1tyZXBfYmxrXSA9IFBBU1M7CisKKwkJaWYgKElOX1BST0dSRVNTX0JMT0NLX1RBQkxFICE9IGdfY0Jsb2NrVGFibGVTdGF0dXMpIHsKKwkJCWdfY0Jsb2NrVGFibGVTdGF0dXMgPSBJTl9QUk9HUkVTU19CTE9DS19UQUJMRTsKKwkJCUZUTF9Xcml0ZV9JTl9Qcm9ncmVzc19CbG9ja19UYWJsZV9QYWdlKCk7CisJCX0KKworCQlmb3IgKGogPSAwOyBqIDwgUkVUUllfVElNRVM7IGorKykgeworCQkJcmV0X2NwX2JsayA9IEZUTF9Db3B5X0Jsb2NrKCh1NjQpKCpsZWFzdF9pZHgpICoKKwkJCQlEZXZpY2VJbmZvLndCbG9ja0RhdGFTaXplLAorCQkJCSh1NjQpcmVwX2JsayAqIERldmljZUluZm8ud0Jsb2NrRGF0YVNpemUpOworCQkJaWYgKEZBSUwgPT0gcmV0X2NwX2JsaykgeworCQkJCXJldF9lcmFzZSA9IEdMT0JfRlRMX0Jsb2NrX0VyYXNlKCh1NjQpcmVwX2JsaworCQkJCQkqIERldmljZUluZm8ud0Jsb2NrRGF0YVNpemUpOworCQkJCWlmIChGQUlMID09IHJldF9lcmFzZSkKKwkJCQkJTUFSS19CTE9DS19BU19CQUQocGJ0W3JlcF9ibGtdKTsKKwkJCX0gZWxzZSB7CisJCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkJCSJGVExfQ29weV9CbG9jayA9PSBPS1xuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoaiA8IFJFVFJZX1RJTUVTKSB7CisJCQl1MzIgdG1wOworCQkJdTMyIG9sZF9pZHggPSBGVExfR2V0X0Jsb2NrX0luZGV4KCpsZWFzdF9pZHgpOworCQkJdTMyIHJlcF9pZHggPSBGVExfR2V0X0Jsb2NrX0luZGV4KHJlcF9ibGspOworCQkJdG1wID0gKHUzMikoRElTQ0FSRF9CTE9DSyB8IHBidFtvbGRfaWR4XSk7CisJCQlwYnRbb2xkX2lkeF0gPSAodTMyKSgoflNQQVJFX0JMT0NLKSAmCisJCQkJCQkJcGJ0W3JlcF9pZHhdKTsKKwkJCXBidFtyZXBfaWR4XSA9IHRtcDsKKyNpZiBDTURfRE1BCisJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YSA9IChzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhICopCisJCQkJCQlnX3BCVERlbHRhX0ZyZWU7CisJCQlnX3BCVERlbHRhX0ZyZWUgKz0gc2l6ZW9mKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEpOworCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250ID0KKwkJCQkJCWZ0bF9jbWRfY250OworCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPkJUX0luZGV4ID0gb2xkX2lkeDsKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5CVF9FbnRyeV9WYWx1ZSA9IHBidFtvbGRfaWR4XTsKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5WYWxpZEZpZWxkcyA9IDB4MEM7CisKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhID0gKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEgKikKKwkJCQkJCWdfcEJURGVsdGFfRnJlZTsKKwkJCWdfcEJURGVsdGFfRnJlZSArPSBzaXplb2Yoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSk7CisKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5mdGxfY21kX2NudCA9CisJCQkJCQlmdGxfY21kX2NudDsKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5CVF9JbmRleCA9IHJlcF9pZHg7CisJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfRW50cnlfVmFsdWUgPSBwYnRbcmVwX2lkeF07CisJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+VmFsaWRGaWVsZHMgPSAweDBDOworI2VuZGlmCisJCX0gZWxzZSB7CisJCQlwYnRbRlRMX0dldF9CbG9ja19JbmRleChyZXBfYmxrKV0gfD0gQkFEX0JMT0NLOworI2lmIENNRF9ETUEKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhID0gKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEgKikKKwkJCQkJCWdfcEJURGVsdGFfRnJlZTsKKwkJCWdfcEJURGVsdGFfRnJlZSArPSBzaXplb2Yoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSk7CisKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5mdGxfY21kX2NudCA9CisJCQkJCQlmdGxfY21kX2NudDsKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5CVF9JbmRleCA9CisJCQkJCUZUTF9HZXRfQmxvY2tfSW5kZXgocmVwX2Jsayk7CisJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfRW50cnlfVmFsdWUgPQorCQkJCQlwYnRbRlRMX0dldF9CbG9ja19JbmRleChyZXBfYmxrKV07CisJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+VmFsaWRGaWVsZHMgPSAweDBDOworI2VuZGlmCisJCQkqcmVzdWx0ID0gRkFJTDsKKwkJCXJldCA9IEZBSUw7CisJCX0KKworCQlpZiAoKCgqcmVwX2Jsa19udW0pKyspID4gV0VBUl9MRVZFTElOR19CTE9DS19OVU0pCisJCQlyZXQgPSBGQUlMOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiTGVzcyB0aGFuIDMgc3BhcmUgYmxvY2tzIGV4aXN0IHNvIHF1aXRcbiIpOworCQlyZXQgPSBGQUlMOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgRlRMX1N0YXRpY19XZWFyX0xldmVsaW5nCisqIElucHV0czogICAgICAgbm9uZQorKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAvIEZBSUw9MQorKiBEZXNjcmlwdGlvbjogIFRoaXMgaXMgc3RhdGljIHdlYXIgbGV2ZWxpbmcgKGRvbmUgYnkgZXhwbGljaXQgY2FsbCkKKyogICAgICAgICAgICAgICBzZWFyY2ggZm9yIG1vc3QmbGVhc3QgdXNlZAorKiAgICAgICAgICAgICAgIGlmIGRpZmZlcmVuY2UgPCBHQVRFOgorKiAgICAgICAgICAgICAgICAgICB1cGRhdGUgdGhlIGJsb2NrIHRhYmxlIHdpdGggZXhoYW5nZQorKiAgICAgICAgICAgICAgICAgICBtYXJrIGJsb2NrIHRhYmxlIGluIGZsYXNoIGFzIElOX1BST0dSRVNTCisqICAgICAgICAgICAgICAgICAgIGNvcHkgZmxhc2ggYmxvY2sKKyogICAgICAgICAgICAgICB0aGUgY2FsbGVyIHNob3VsZCBoYW5kbGUgR0MgY2xlYW4gdXAgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworaW50IEZUTF9TdGF0aWNfV2Vhcl9MZXZlbGluZyh2b2lkKQoreworCXU4IG1vc3Rfd29ybl9jbnQ7CisJdTggbGVhc3Rfd29ybl9jbnQ7CisJdTMyIG1vc3Rfd29ybl9pZHg7CisJdTMyIGxlYXN0X3dvcm5faWR4OworCWludCByZXN1bHQgPSBQQVNTOworCWludCBnb19vbiA9IFBBU1M7CisJdTMyIHJlcGxhY2VkX2Jsa3MgPSAwOworCXU4ICpjaGFuZ19mbGFnID0gZmxhZ3Nfc3RhdGljX3dlYXJfbGV2ZWxpbmc7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJaWYgKCFjaGFuZ19mbGFnKQorCQlyZXR1cm4gRkFJTDsKKworCW1lbXNldChjaGFuZ19mbGFnLCBGQUlMLCBEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0pOworCXdoaWxlIChnb19vbiA9PSBQQVNTKSB7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJInN0YXJ0aW5nIHN0YXRpYyB3ZWFyIGxldmVsaW5nXG4iKTsKKwkJbW9zdF93b3JuX2NudCA9IDA7CisJCWxlYXN0X3dvcm5fY250ID0gMHhGRjsKKwkJbGVhc3Rfd29ybl9pZHggPSBCTE9DS19UQUJMRV9JTkRFWDsKKwkJbW9zdF93b3JuX2lkeCA9IEJMT0NLX1RBQkxFX0lOREVYOworCisJCWZpbmRfbGVhc3RfbW9zdF93b3JuKGNoYW5nX2ZsYWcsICZsZWFzdF93b3JuX2lkeCwKKwkJCSZsZWFzdF93b3JuX2NudCwgJm1vc3Rfd29ybl9pZHgsICZtb3N0X3dvcm5fY250KTsKKworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCSJVc2VkIGFuZCBsZWFzdCB3b3JuIGlzIGJsb2NrICV1LCB3aG9zIGNvdW50IGlzICV1XG4iLAorCQkJKHVuc2lnbmVkIGludClsZWFzdF93b3JuX2lkeCwKKwkJCSh1bnNpZ25lZCBpbnQpbGVhc3Rfd29ybl9jbnQpOworCisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJIkZyZWUgYW5kICBtb3N0IHdvcm4gaXMgYmxvY2sgJXUsIHdob3MgY291bnQgaXMgJXVcbiIsCisJCQkodW5zaWduZWQgaW50KW1vc3Rfd29ybl9pZHgsCisJCQkodW5zaWduZWQgaW50KW1vc3Rfd29ybl9jbnQpOworCisJCWlmICgobW9zdF93b3JuX2NudCA+IGxlYXN0X3dvcm5fY250KSAmJgorCQkJKG1vc3Rfd29ybl9jbnQgLSBsZWFzdF93b3JuX2NudCA+IFdFQVJfTEVWRUxJTkdfR0FURSkpCisJCQlnb19vbiA9IG1vdmVfYmxrc19mb3Jfd2Vhcl9sZXZlbGluZyhjaGFuZ19mbGFnLAorCQkJCSZsZWFzdF93b3JuX2lkeCwgJnJlcGxhY2VkX2Jsa3MsICZyZXN1bHQpOworCQllbHNlCisJCQlnb19vbiA9IEZBSUw7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworI2lmIENNRF9ETUEKK3N0YXRpYyBpbnQgZG9fZ2FyYmFnZV9jb2xsZWN0aW9uKHUzMiBkaXNjYXJkX2NudCkKK3sKKwl1MzIgKnBidCA9ICh1MzIgKilnX3BCbG9ja1RhYmxlOworCXUzMiBwYmE7CisJdTggYnRfYmxvY2tfZXJhc2VkID0gMDsKKwlpbnQgaSwgY250LCByZXQgPSBGQUlMOworCXU2NCBhZGRyOworCisJaSA9IDA7CisJd2hpbGUgKChpIDwgRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtKSAmJiAoZGlzY2FyZF9jbnQgPiAwKSAmJgorCQkJKChmdGxfY21kX2NudCArIDI4KSA8IDI1NikpIHsKKwkJaWYgKCgocGJ0W2ldICYgQkFEX0JMT0NLKSAhPSBCQURfQkxPQ0spICYmCisJCQkJKHBidFtpXSAmIERJU0NBUkRfQkxPQ0spKSB7CisJCQlpZiAoSU5fUFJPR1JFU1NfQkxPQ0tfVEFCTEUgIT0gZ19jQmxvY2tUYWJsZVN0YXR1cykgeworCQkJCWdfY0Jsb2NrVGFibGVTdGF0dXMgPSBJTl9QUk9HUkVTU19CTE9DS19UQUJMRTsKKwkJCQlGVExfV3JpdGVfSU5fUHJvZ3Jlc3NfQmxvY2tfVGFibGVfUGFnZSgpOworCQkJfQorCisJCQlhZGRyID0gRlRMX0dldF9QaHlzaWNhbF9CbG9ja19BZGRyKCh1NjQpaSAqCisJCQkJCQlEZXZpY2VJbmZvLndCbG9ja0RhdGFTaXplKTsKKwkJCXBiYSA9IEJMS19GUk9NX0FERFIoYWRkcik7CisKKwkJCWZvciAoY250ID0gRklSU1RfQlRfSUQ7IGNudCA8PSBMQVNUX0JUX0lEOyBjbnQrKykgeworCQkJCWlmIChwYmEgPT0gZ19wQlRCbG9ja3NbY250IC0gRklSU1RfQlRfSURdKSB7CisJCQkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJCQkJIkdDIHdpbGwgZXJhc2UgQlQgYmxvY2sgJXVcbiIsCisJCQkJCQkodW5zaWduZWQgaW50KXBiYSk7CisJCQkJCWRpc2NhcmRfY250LS07CisJCQkJCWkrKzsKKwkJCQkJYnRfYmxvY2tfZXJhc2VkID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiAoYnRfYmxvY2tfZXJhc2VkKSB7CisJCQkJYnRfYmxvY2tfZXJhc2VkID0gMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJYWRkciA9IEZUTF9HZXRfUGh5c2ljYWxfQmxvY2tfQWRkcigodTY0KWkgKgorCQkJCQkJRGV2aWNlSW5mby53QmxvY2tEYXRhU2l6ZSk7CisKKwkJCWlmIChQQVNTID09IEdMT0JfRlRMX0Jsb2NrX0VyYXNlKGFkZHIpKSB7CisJCQkJcGJ0W2ldICY9ICh1MzIpKH5ESVNDQVJEX0JMT0NLKTsKKwkJCQlwYnRbaV0gfD0gKHUzMikoU1BBUkVfQkxPQ0spOworCQkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhID0KKwkJCQkJKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEgKikKKwkJCQkJZ19wQlREZWx0YV9GcmVlOworCQkJCWdfcEJURGVsdGFfRnJlZSArPQorCQkJCQlzaXplb2Yoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSk7CisJCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250ID0KKwkJCQkJZnRsX2NtZF9jbnQgLSAxOworCQkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5CVF9JbmRleCA9IGk7CisJCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPkJUX0VudHJ5X1ZhbHVlID0gcGJ0W2ldOworCQkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5WYWxpZEZpZWxkcyA9IDB4MEM7CisJCQkJZGlzY2FyZF9jbnQtLTsKKwkJCQlyZXQgPSBQQVNTOworCQkJfSBlbHNlIHsKKwkJCQlNQVJLX0JMT0NLX0FTX0JBRChwYnRbaV0pOworCQkJfQorCQl9CisKKwkJaSsrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKyNlbHNlCitzdGF0aWMgaW50IGRvX2dhcmJhZ2VfY29sbGVjdGlvbih1MzIgZGlzY2FyZF9jbnQpCit7CisJdTMyICpwYnQgPSAodTMyICopZ19wQmxvY2tUYWJsZTsKKwl1MzIgcGJhOworCXU4IGJ0X2Jsb2NrX2VyYXNlZCA9IDA7CisJaW50IGksIGNudCwgcmV0ID0gRkFJTDsKKwl1NjQgYWRkcjsKKworCWkgPSAwOworCXdoaWxlICgoaSA8IERldmljZUluZm8ud0RhdGFCbG9ja051bSkgJiYgKGRpc2NhcmRfY250ID4gMCkpIHsKKwkJaWYgKCgocGJ0W2ldICYgQkFEX0JMT0NLKSAhPSBCQURfQkxPQ0spICYmCisJCQkJKHBidFtpXSAmIERJU0NBUkRfQkxPQ0spKSB7CisJCQlpZiAoSU5fUFJPR1JFU1NfQkxPQ0tfVEFCTEUgIT0gZ19jQmxvY2tUYWJsZVN0YXR1cykgeworCQkJCWdfY0Jsb2NrVGFibGVTdGF0dXMgPSBJTl9QUk9HUkVTU19CTE9DS19UQUJMRTsKKwkJCQlGVExfV3JpdGVfSU5fUHJvZ3Jlc3NfQmxvY2tfVGFibGVfUGFnZSgpOworCQkJfQorCisJCQlhZGRyID0gRlRMX0dldF9QaHlzaWNhbF9CbG9ja19BZGRyKCh1NjQpaSAqCisJCQkJCQlEZXZpY2VJbmZvLndCbG9ja0RhdGFTaXplKTsKKwkJCXBiYSA9IEJMS19GUk9NX0FERFIoYWRkcik7CisKKwkJCWZvciAoY250ID0gRklSU1RfQlRfSUQ7IGNudCA8PSBMQVNUX0JUX0lEOyBjbnQrKykgeworCQkJCWlmIChwYmEgPT0gZ19wQlRCbG9ja3NbY250IC0gRklSU1RfQlRfSURdKSB7CisJCQkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJCQkJIkdDIHdpbGwgZXJhc2UgQlQgYmxvY2sgJWRcbiIsCisJCQkJCQlwYmEpOworCQkJCQlkaXNjYXJkX2NudC0tOworCQkJCQlpKys7CisJCQkJCWJ0X2Jsb2NrX2VyYXNlZCA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGJ0X2Jsb2NrX2VyYXNlZCkgeworCQkJCWJ0X2Jsb2NrX2VyYXNlZCA9IDA7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIElmIHRoZSBkaXNjYXJkIGJsb2NrIGlzIEwyIGNhY2hlIGJsb2NrLCB0aGVuIGp1c3Qgc2tpcCBpdCAqLworCQkJZm9yIChjbnQgPSAwOyBjbnQgPCBCTEtfTlVNX0ZPUl9MMl9DQUNIRTsgY250KyspIHsKKwkJCQlpZiAoY2FjaGVfbDIuYmxrX2FycmF5W2NudF0gPT0gcGJhKSB7CisJCQkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJCQkJIkdDIHdpbGwgZXJhc2UgTDIgY2FjaGUgYmxrICVkXG4iLAorCQkJCQkJcGJhKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKGNudCA8IEJMS19OVU1fRk9SX0wyX0NBQ0hFKSB7IC8qIFNraXAgaXQgKi8KKwkJCQlkaXNjYXJkX2NudC0tOworCQkJCWkrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJYWRkciA9IEZUTF9HZXRfUGh5c2ljYWxfQmxvY2tfQWRkcigodTY0KWkgKgorCQkJCQkJRGV2aWNlSW5mby53QmxvY2tEYXRhU2l6ZSk7CisKKwkJCWlmIChQQVNTID09IEdMT0JfRlRMX0Jsb2NrX0VyYXNlKGFkZHIpKSB7CisJCQkJcGJ0W2ldICY9ICh1MzIpKH5ESVNDQVJEX0JMT0NLKTsKKwkJCQlwYnRbaV0gfD0gKHUzMikoU1BBUkVfQkxPQ0spOworCQkJCWRpc2NhcmRfY250LS07CisJCQkJcmV0ID0gUEFTUzsKKwkJCX0gZWxzZSB7CisJCQkJTUFSS19CTE9DS19BU19CQUQocGJ0W2ldKTsKKwkJCX0KKwkJfQorCisJCWkrKzsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgR0xPQl9GVExfR2FyYmFnZV9Db2xsZWN0aW9uCisqIElucHV0czogICAgICAgbm9uZQorKiBPdXRwdXRzOiAgICAgIFBBU1MgLyBGQUlMIChyZXR1cm5zIHRoZSBudW1iZXIgb2YgdW4tZXJhc2VkIGJsb2NrcworKiBEZXNjcmlwdGlvbjogIHNlYXJjaCB0aGUgYmxvY2sgdGFibGUgZm9yIGFsbCBkaXNjYXJkZWQgYmxvY2tzIHRvIGVyYXNlCisqICAgICAgICAgICAgICAgZm9yIGVhY2ggZGlzY2FyZGVkIGJsb2NrOgorKiAgICAgICAgICAgICAgICAgICBzZXQgdGhlIGZsYXNoIGJsb2NrIHRvIElOX1BST0dSRVNTCisqICAgICAgICAgICAgICAgICAgIGVyYXNlIHRoZSBibG9jaworKiAgICAgICAgICAgICAgICAgICB1cGRhdGUgdGhlIGJsb2NrIHRhYmxlCisqICAgICAgICAgICAgICAgICAgIHdyaXRlIHRoZSBibG9jayB0YWJsZSB0byBmbGFzaAorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK2ludCBHTE9CX0ZUTF9HYXJiYWdlX0NvbGxlY3Rpb24odm9pZCkKK3sKKwl1MzIgaTsKKwl1MzIgd0Rpc2NhcmQgPSAwOworCWludCB3UmVzdWx0ID0gRkFJTDsKKwl1MzIgKnBidCA9ICh1MzIgKilnX3BCbG9ja1RhYmxlOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlpZiAoR0NfQ2FsbGVkKSB7CisJCXByaW50ayhLRVJOX0FMRVJUICJHTE9CX0ZUTF9HYXJiYWdlX0NvbGxlY3Rpb24oKSAiCisJCQkiaGFzIGJlZW4gcmUtZW50ZXJlZCEgRXhpdC5cbiIpOworCQlyZXR1cm4gUEFTUzsKKwl9CisKKwlHQ19DYWxsZWQgPSAxOworCisJR0xPQl9GVExfQlRfR2FyYmFnZV9Db2xsZWN0aW9uKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtOyBpKyspIHsKKwkJaWYgKElTX0RJU0NBUkRFRF9CTE9DSyhpKSkKKwkJCXdEaXNjYXJkKys7CisJfQorCisJaWYgKHdEaXNjYXJkIDw9IDApIHsKKwkJR0NfQ2FsbGVkID0gMDsKKwkJcmV0dXJuIHdSZXN1bHQ7CisJfQorCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCSJGb3VuZCAlZCBkaXNjYXJkZWQgYmxvY2tzXG4iLCB3RGlzY2FyZCk7CisKKwlGVExfV3JpdGVfQmxvY2tfVGFibGUoRkFJTCk7CisKKwl3UmVzdWx0ID0gZG9fZ2FyYmFnZV9jb2xsZWN0aW9uKHdEaXNjYXJkKTsKKworCUZUTF9Xcml0ZV9CbG9ja19UYWJsZShGQUlMKTsKKworCUdDX0NhbGxlZCA9IDA7CisKKwlyZXR1cm4gd1Jlc3VsdDsKK30KKworCisjaWYgQ01EX0RNQQorc3RhdGljIGludCBkb19idF9nYXJiYWdlX2NvbGxlY3Rpb24odm9pZCkKK3sKKwl1MzIgcGJhLCBsYmE7CisJdTMyICpwYnQgPSAodTMyICopZ19wQmxvY2tUYWJsZTsKKwl1MzIgKnBCVEJsb2Nrc05vZGUgPSAodTMyICopZ19wQlRCbG9ja3M7CisJdTY0IGFkZHI7CisJaW50IGksIHJldCA9IEZBSUw7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlpZiAoQlRfR0NfQ2FsbGVkKQorCQlyZXR1cm4gUEFTUzsKKworCUJUX0dDX0NhbGxlZCA9IDE7CisKKwlmb3IgKGkgPSBsYXN0X2VyYXNlZDsgKGkgPD0gTEFTVF9CVF9JRCkgJiYKKwkJKGdfcEJUQmxvY2tzWygoaSArIDIpICUgKDEgKyBMQVNUX0JUX0lEIC0gRklSU1RfQlRfSUQpKSArCisJCUZJUlNUX0JUX0lEIC0gRklSU1RfQlRfSURdICE9IEJUQkxPQ0tfSU5WQUwpICYmCisJCSgoZnRsX2NtZF9jbnQgKyAyOCkpIDwgMjU2OyBpKyspIHsKKwkJcGJhID0gcEJUQmxvY2tzTm9kZVtpIC0gRklSU1RfQlRfSURdOworCQlsYmEgPSBGVExfR2V0X0Jsb2NrX0luZGV4KHBiYSk7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJImRvX2J0X2dhcmJhZ2VfY29sbGVjdGlvbjogcGJhICVkLCBsYmEgJWRcbiIsCisJCQlwYmEsIGxiYSk7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJIkJsb2NrIFRhYmxlIEVudHJ5OiAlZCIsIHBidFtsYmFdKTsKKworCQlpZiAoKChwYnRbbGJhXSAmIEJBRF9CTE9DSykgIT0gQkFEX0JMT0NLKSAmJgorCQkJKHBidFtsYmFdICYgRElTQ0FSRF9CTE9DSykpIHsKKwkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJCSJkb19idF9nYXJiYWdlX2NvbGxlY3Rpb25fY2RtYTogIgorCQkJCSJFcmFzaW5nIEJsb2NrIHRhYmxlcyBwcmVzZW50IGluIGJsb2NrICVkXG4iLAorCQkJCXBiYSk7CisJCQlhZGRyID0gRlRMX0dldF9QaHlzaWNhbF9CbG9ja19BZGRyKCh1NjQpbGJhICoKKwkJCQkJCURldmljZUluZm8ud0Jsb2NrRGF0YVNpemUpOworCQkJaWYgKFBBU1MgPT0gR0xPQl9GVExfQmxvY2tfRXJhc2UoYWRkcikpIHsKKwkJCQlwYnRbbGJhXSAmPSAodTMyKSh+RElTQ0FSRF9CTE9DSyk7CisJCQkJcGJ0W2xiYV0gfD0gKHUzMikoU1BBUkVfQkxPQ0spOworCisJCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEgPQorCQkJCQkoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSAqKQorCQkJCQlnX3BCVERlbHRhX0ZyZWU7CisJCQkJZ19wQlREZWx0YV9GcmVlICs9CisJCQkJCXNpemVvZihzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhKTsKKworCQkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5mdGxfY21kX2NudCA9CisJCQkJCWZ0bF9jbWRfY250IC0gMTsKKwkJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfSW5kZXggPSBsYmE7CisJCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPkJUX0VudHJ5X1ZhbHVlID0KKwkJCQkJCQkJcGJ0W2xiYV07CisKKwkJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+VmFsaWRGaWVsZHMgPSAweDBDOworCisJCQkJcmV0ID0gUEFTUzsKKwkJCQlwQlRCbG9ja3NOb2RlW2xhc3RfZXJhc2VkIC0gRklSU1RfQlRfSURdID0KKwkJCQkJCQlCVEJMT0NLX0lOVkFMOworCQkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJCQkicmVzZXR0aW5nIGJ0IGVudHJ5IGF0IGluZGV4ICVkICIKKwkJCQkJInZhbHVlICVkXG4iLCBpLAorCQkJCQlwQlRCbG9ja3NOb2RlW2kgLSBGSVJTVF9CVF9JRF0pOworCQkJCWlmIChsYXN0X2VyYXNlZCA9PSBMQVNUX0JUX0lEKQorCQkJCQlsYXN0X2VyYXNlZCA9IEZJUlNUX0JUX0lEOworCQkJCWVsc2UKKwkJCQkJbGFzdF9lcmFzZWQrKzsKKwkJCX0gZWxzZSB7CisJCQkJTUFSS19CTE9DS19BU19CQUQocGJ0W2xiYV0pOworCQkJfQorCQl9CisJfQorCisJQlRfR0NfQ2FsbGVkID0gMDsKKworCXJldHVybiByZXQ7Cit9CisKKyNlbHNlCitzdGF0aWMgaW50IGRvX2J0X2dhcmJhZ2VfY29sbGVjdGlvbih2b2lkKQoreworCXUzMiBwYmEsIGxiYTsKKwl1MzIgKnBidCA9ICh1MzIgKilnX3BCbG9ja1RhYmxlOworCXUzMiAqcEJUQmxvY2tzTm9kZSA9ICh1MzIgKilnX3BCVEJsb2NrczsKKwl1NjQgYWRkcjsKKwlpbnQgaSwgcmV0ID0gRkFJTDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWlmIChCVF9HQ19DYWxsZWQpCisJCXJldHVybiBQQVNTOworCisJQlRfR0NfQ2FsbGVkID0gMTsKKworCWZvciAoaSA9IGxhc3RfZXJhc2VkOyAoaSA8PSBMQVNUX0JUX0lEKSAmJgorCQkoZ19wQlRCbG9ja3NbKChpICsgMikgJSAoMSArIExBU1RfQlRfSUQgLSBGSVJTVF9CVF9JRCkpICsKKwkJRklSU1RfQlRfSUQgLSBGSVJTVF9CVF9JRF0gIT0gQlRCTE9DS19JTlZBTCk7IGkrKykgeworCQlwYmEgPSBwQlRCbG9ja3NOb2RlW2kgLSBGSVJTVF9CVF9JRF07CisJCWxiYSA9IEZUTF9HZXRfQmxvY2tfSW5kZXgocGJhKTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkiZG9fYnRfZ2FyYmFnZV9jb2xsZWN0aW9uX2NkbWE6IHBiYSAlZCwgbGJhICVkXG4iLAorCQkJcGJhLCBsYmEpOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCSJCbG9jayBUYWJsZSBFbnRyeTogJWQiLCBwYnRbbGJhXSk7CisKKwkJaWYgKCgocGJ0W2xiYV0gJiBCQURfQkxPQ0spICE9IEJBRF9CTE9DSykgJiYKKwkJCShwYnRbbGJhXSAmIERJU0NBUkRfQkxPQ0spKSB7CisJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCQkiZG9fYnRfZ2FyYmFnZV9jb2xsZWN0aW9uOiAiCisJCQkJIkVyYXNpbmcgQmxvY2sgdGFibGVzIHByZXNlbnQgaW4gYmxvY2sgJWRcbiIsCisJCQkJcGJhKTsKKwkJCWFkZHIgPSBGVExfR2V0X1BoeXNpY2FsX0Jsb2NrX0FkZHIoKHU2NClsYmEgKgorCQkJCQkJRGV2aWNlSW5mby53QmxvY2tEYXRhU2l6ZSk7CisJCQlpZiAoUEFTUyA9PSBHTE9CX0ZUTF9CbG9ja19FcmFzZShhZGRyKSkgeworCQkJCXBidFtsYmFdICY9ICh1MzIpKH5ESVNDQVJEX0JMT0NLKTsKKwkJCQlwYnRbbGJhXSB8PSAodTMyKShTUEFSRV9CTE9DSyk7CisJCQkJcmV0ID0gUEFTUzsKKwkJCQlwQlRCbG9ja3NOb2RlW2xhc3RfZXJhc2VkIC0gRklSU1RfQlRfSURdID0KKwkJCQkJCQlCVEJMT0NLX0lOVkFMOworCQkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJCQkicmVzZXR0aW5nIGJ0IGVudHJ5IGF0IGluZGV4ICVkICIKKwkJCQkJInZhbHVlICVkXG4iLCBpLAorCQkJCQlwQlRCbG9ja3NOb2RlW2kgLSBGSVJTVF9CVF9JRF0pOworCQkJCWlmIChsYXN0X2VyYXNlZCA9PSBMQVNUX0JUX0lEKQorCQkJCQlsYXN0X2VyYXNlZCA9IEZJUlNUX0JUX0lEOworCQkJCWVsc2UKKwkJCQkJbGFzdF9lcmFzZWQrKzsKKwkJCX0gZWxzZSB7CisJCQkJTUFSS19CTE9DS19BU19CQUQocGJ0W2xiYV0pOworCQkJfQorCQl9CisJfQorCisJQlRfR0NfQ2FsbGVkID0gMDsKKworCXJldHVybiByZXQ7Cit9CisKKyNlbmRpZgorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBHTE9CX0ZUTF9CVF9HYXJiYWdlX0NvbGxlY3Rpb24KKyogSW5wdXRzOiAgICAgICBub25lCisqIE91dHB1dHM6ICAgICAgUEFTUyAvIEZBSUwgKHJldHVybnMgdGhlIG51bWJlciBvZiB1bi1lcmFzZWQgYmxvY2tzCisqIERlc2NyaXB0aW9uOiAgRXJhc2VzIGRpc2NhcmRlZCBibG9ja3MgY29udGFpbmluZyBCbG9jayB0YWJsZQorKgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworaW50IEdMT0JfRlRMX0JUX0dhcmJhZ2VfQ29sbGVjdGlvbih2b2lkKQoreworCXJldHVybiBkb19idF9nYXJiYWdlX2NvbGxlY3Rpb24oKTsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBGVExfUmVwbGFjZV9PbmVCbG9jaworKiBJbnB1dHM6ICAgICAgIEJsb2NrIG51bWJlciAxCisqICAgICAgICAgICAgICAgQmxvY2sgbnVtYmVyIDIKKyogT3V0cHV0czogICAgICBSZXBsYWNlZCBCbG9jayBOdW1iZXIKKyogRGVzY3JpcHRpb246ICBJbnRlcmNoYW5nZSBibG9jayB0YWJsZSBlbnRyaWVzIGF0IHdCbG9ja051bSBhbmQgd1JlcGxhY2VOdW0KKyoKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3N0YXRpYyB1MzIgRlRMX1JlcGxhY2VfT25lQmxvY2sodTMyIGJsaywgdTMyIHJlcF9ibGspCit7CisJdTMyIHRtcF9ibGs7CisJdTMyIHJlcGxhY2Vfbm9kZSA9IEJBRF9CTE9DSzsKKwl1MzIgKnBidCA9ICh1MzIgKilnX3BCbG9ja1RhYmxlOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWlmIChyZXBfYmxrICE9IEJBRF9CTE9DSykgeworCQlpZiAoSVNfQkFEX0JMT0NLKGJsaykpCisJCQl0bXBfYmxrID0gcGJ0W2Jsa107CisJCWVsc2UKKwkJCXRtcF9ibGsgPSBESVNDQVJEX0JMT0NLIHwgKH5TUEFSRV9CTE9DSyAmIHBidFtibGtdKTsKKworCQlyZXBsYWNlX25vZGUgPSAodTMyKSAoKH5TUEFSRV9CTE9DSykgJiBwYnRbcmVwX2Jsa10pOworCQlwYnRbYmxrXSA9IHJlcGxhY2Vfbm9kZTsKKwkJcGJ0W3JlcF9ibGtdID0gdG1wX2JsazsKKworI2lmIENNRF9ETUEKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEgPQorCQkJKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEgKilnX3BCVERlbHRhX0ZyZWU7CisJCWdfcEJURGVsdGFfRnJlZSArPSBzaXplb2Yoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSk7CisKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250ID0gZnRsX2NtZF9jbnQ7CisJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5CVF9JbmRleCA9IGJsazsKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPkJUX0VudHJ5X1ZhbHVlID0gcGJ0W2Jsa107CisKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPlZhbGlkRmllbGRzID0gMHgwQzsKKworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YSA9CisJCQkoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSAqKWdfcEJURGVsdGFfRnJlZTsKKwkJZ19wQlREZWx0YV9GcmVlICs9IHNpemVvZihzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhKTsKKworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+ZnRsX2NtZF9jbnQgPSBmdGxfY21kX2NudDsKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPkJUX0luZGV4ID0gcmVwX2JsazsKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPkJUX0VudHJ5X1ZhbHVlID0gcGJ0W3JlcF9ibGtdOworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+VmFsaWRGaWVsZHMgPSAweDBDOworI2VuZGlmCisJfQorCisJcmV0dXJuIHJlcGxhY2Vfbm9kZTsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBGVExfV3JpdGVfQmxvY2tfVGFibGVfRGF0YQorKiBJbnB1dHM6ICAgICAgIEJsb2NrIHRhYmxlIHNpemUgaW4gcGFnZXMKKyogT3V0cHV0czogICAgICBQQVNTPTAgLyBGQUlMPTEKKyogRGVzY3JpcHRpb246ICBXcml0ZSBibG9jayB0YWJsZSBkYXRhIGluIGZsYXNoCisqICAgICAgICAgICAgICAgSWYgZmlyc3QgcGFnZSBhbmQgbGFzdCBwYWdlCisqICAgICAgICAgICAgICAgICAgV3JpdGUgZGF0YStCVCBmbGFnCisqICAgICAgICAgICAgICAgZWxzZQorKiAgICAgICAgICAgICAgICAgIFdyaXRlIGRhdGEKKyogICAgICAgICAgICAgICBCVCBmbGFnIGlzIGEgY291bnRlci4gSXRzIHZhbHVlIGlzIGluY3JlbWVudGVkIGZvciBibG9jayB0YWJsZQorKiAgICAgICAgICAgICAgIHdyaXRlIGluIGEgbmV3IEJsb2NrCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCitzdGF0aWMgaW50IEZUTF9Xcml0ZV9CbG9ja19UYWJsZV9EYXRhKHZvaWQpCit7CisJdTY0IGR3QmxvY2tUYWJsZUFkZHIsIHBUZW1wQWRkcjsKKwl1MzIgQmxvY2s7CisJdTE2IFBhZ2UsIFBhZ2VDb3VudDsKKwl1OCAqdGVtcEJ1ZiA9IHRtcF9idWZfd3JpdGVfYmxrX3RhYmxlX2RhdGE7CisJaW50IHdCeXRlc0NvcGllZDsKKwl1MTYgYnRfcGFnZXM7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlkd0Jsb2NrVGFibGVBZGRyID0KKwkJKHU2NCkoKHU2NClnX3dCbG9ja1RhYmxlSW5kZXggKiBEZXZpY2VJbmZvLndCbG9ja0RhdGFTaXplICsKKwkJKHU2NClnX3dCbG9ja1RhYmxlT2Zmc2V0ICogRGV2aWNlSW5mby53UGFnZURhdGFTaXplKTsKKwlwVGVtcEFkZHIgPSBkd0Jsb2NrVGFibGVBZGRyOworCisJYnRfcGFnZXMgPSBGVExfR2V0X0Jsb2NrX1RhYmxlX0ZsYXNoX1NpemVfUGFnZXMoKTsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiRlRMX1dyaXRlX0Jsb2NrX1RhYmxlX0RhdGE6ICIKKwkJCSAgICAgICAicGFnZT0gJWQgQmxvY2tUYWJsZUluZGV4PSAlZCAiCisJCQkgICAgICAgIkJsb2NrVGFibGVPZmZzZXQ9JWRcbiIsIGJ0X3BhZ2VzLAorCQkJICAgICAgIGdfd0Jsb2NrVGFibGVJbmRleCwgZ193QmxvY2tUYWJsZU9mZnNldCk7CisKKwlCbG9jayA9IEJMS19GUk9NX0FERFIocFRlbXBBZGRyKTsKKwlQYWdlID0gUEFHRV9GUk9NX0FERFIocFRlbXBBZGRyLCBCbG9jayk7CisJUGFnZUNvdW50ID0gMTsKKworCWlmIChidF9ibG9ja19jaGFuZ2VkKSB7CisJCWlmIChidF9mbGFnID09IExBU1RfQlRfSUQpIHsKKwkJCWJ0X2ZsYWcgPSBGSVJTVF9CVF9JRDsKKwkJCWdfcEJUQmxvY2tzW2J0X2ZsYWcgLSBGSVJTVF9CVF9JRF0gPSBCbG9jazsKKwkJfSBlbHNlIGlmIChidF9mbGFnIDwgTEFTVF9CVF9JRCkgeworCQkJYnRfZmxhZysrOworCQkJZ19wQlRCbG9ja3NbYnRfZmxhZyAtIEZJUlNUX0JUX0lEXSA9IEJsb2NrOworCQl9CisKKwkJaWYgKChidF9mbGFnID4gKExBU1RfQlRfSUQtNCkpICYmCisJCQlnX3BCVEJsb2Nrc1tGSVJTVF9CVF9JRCAtIEZJUlNUX0JUX0lEXSAhPQorCQkJCQkJQlRCTE9DS19JTlZBTCkgeworCQkJYnRfYmxvY2tfY2hhbmdlZCA9IDA7CisJCQlHTE9CX0ZUTF9CVF9HYXJiYWdlX0NvbGxlY3Rpb24oKTsKKwkJfQorCisJCWJ0X2Jsb2NrX2NoYW5nZWQgPSAwOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCSJCbG9jayBUYWJsZSBDb3VudGVyIGlzICV1IEJsb2NrICV1XG4iLAorCQkJYnRfZmxhZywgKHVuc2lnbmVkIGludClCbG9jayk7CisJfQorCisJbWVtc2V0KHRlbXBCdWYsIDAsIDMpOworCXRlbXBCdWZbM10gPSBidF9mbGFnOworCXdCeXRlc0NvcGllZCA9IEZUTF9Db3B5X0Jsb2NrX1RhYmxlX1RvX0ZsYXNoKHRlbXBCdWYgKyA0LAorCQkJRGV2aWNlSW5mby53UGFnZURhdGFTaXplIC0gNCwgMCk7CisJbWVtc2V0KCZ0ZW1wQnVmW3dCeXRlc0NvcGllZCArIDRdLCAweGZmLAorCQlEZXZpY2VJbmZvLndQYWdlU2l6ZSAtICh3Qnl0ZXNDb3BpZWQgKyA0KSk7CisJRlRMX0luc2VydF9CbG9ja19UYWJsZV9TaWduYXR1cmUoJnRlbXBCdWZbRGV2aWNlSW5mby53UGFnZURhdGFTaXplXSwKKwkJCQkJYnRfZmxhZyk7CisKKyNpZiBDTURfRE1BCisJbWVtY3B5KGdfcE5leHRCbG9ja1RhYmxlLCB0ZW1wQnVmLAorCQlEZXZpY2VJbmZvLndQYWdlU2l6ZSAqIHNpemVvZih1OCkpOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiV3JpdGluZyBGaXJzdCBQYWdlIG9mIEJsb2NrIFRhYmxlICIKKwkJIkJsb2NrICV1IFBhZ2UgJXVcbiIsICh1bnNpZ25lZCBpbnQpQmxvY2ssIFBhZ2UpOworCWlmIChGQUlMID09IEdMT0JfTExEX1dyaXRlX1BhZ2VfTWFpbl9TcGFyZV9jZG1hKGdfcE5leHRCbG9ja1RhYmxlLAorCQlCbG9jaywgUGFnZSwgMSwKKwkJTExEX0NNRF9GTEFHX01PREVfQ0RNQSB8IExMRF9DTURfRkxBR19PUkRFUl9CRUZPUkVfUkVTVCkpIHsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwgIk5BTkQgUHJvZ3JhbSBmYWlsIGluICIKKwkJCSIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzLCAiCisJCQkibmV3IEJhZCBCbG9jayAlZCBnZW5lcmF0ZWQhXG4iLAorCQkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXywgQmxvY2spOworCQlnb3RvIGZ1bmNfcmV0dXJuOworCX0KKworCWZ0bF9jbWRfY250Kys7CisJZ19wTmV4dEJsb2NrVGFibGUgKz0gKChEZXZpY2VJbmZvLndQYWdlU2l6ZSAqIHNpemVvZih1OCkpKTsKKyNlbHNlCisJaWYgKEZBSUwgPT0gR0xPQl9MTERfV3JpdGVfUGFnZV9NYWluX1NwYXJlKHRlbXBCdWYsIEJsb2NrLCBQYWdlLCAxKSkgeworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLAorCQkJIk5BTkQgUHJvZ3JhbSBmYWlsIGluICVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXMsICIKKwkJCSJuZXcgQmFkIEJsb2NrICVkIGdlbmVyYXRlZCFcbiIsCisJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fLCBCbG9jayk7CisJCWdvdG8gZnVuY19yZXR1cm47CisJfQorI2VuZGlmCisKKwlpZiAoYnRfcGFnZXMgPiAxKSB7CisJCVBhZ2VDb3VudCA9IGJ0X3BhZ2VzIC0gMTsKKwkJaWYgKFBhZ2VDb3VudCA+IDEpIHsKKwkJCXdCeXRlc0NvcGllZCArPSBGVExfQ29weV9CbG9ja19UYWJsZV9Ub19GbGFzaCh0ZW1wQnVmLAorCQkJCURldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSAqIChQYWdlQ291bnQgLSAxKSwKKwkJCQl3Qnl0ZXNDb3BpZWQpOworCisjaWYgQ01EX0RNQQorCQkJbWVtY3B5KGdfcE5leHRCbG9ja1RhYmxlLCB0ZW1wQnVmLAorCQkJCShQYWdlQ291bnQgLSAxKSAqIERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSk7CisJCQlpZiAoRkFJTCA9PSBHTE9CX0xMRF9Xcml0ZV9QYWdlX01haW5fY2RtYSgKKwkJCQlnX3BOZXh0QmxvY2tUYWJsZSwgQmxvY2ssIFBhZ2UgKyAxLAorCQkJCVBhZ2VDb3VudCAtIDEpKSB7CisJCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJCQkJIk5BTkQgUHJvZ3JhbSBmYWlsIGluICVzLCBMaW5lICVkLCAiCisJCQkJCSJGdW5jdGlvbjogJXMsICIKKwkJCQkJIm5ldyBCYWQgQmxvY2sgJWQgZ2VuZXJhdGVkIVxuIiwKKwkJCQkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXywKKwkJCQkJKGludClCbG9jayk7CisJCQkJZ290byBmdW5jX3JldHVybjsKKwkJCX0KKworCQkJZnRsX2NtZF9jbnQrKzsKKwkJCWdfcE5leHRCbG9ja1RhYmxlICs9IChQYWdlQ291bnQgLSAxKSAqCisJCQkJRGV2aWNlSW5mby53UGFnZURhdGFTaXplICogc2l6ZW9mKHU4KTsKKyNlbHNlCisJCQlpZiAoRkFJTCA9PSBHTE9CX0xMRF9Xcml0ZV9QYWdlX01haW4odGVtcEJ1ZiwKKwkJCQkJQmxvY2ssIFBhZ2UgKyAxLCBQYWdlQ291bnQgLSAxKSkgeworCQkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sCisJCQkJCSJOQU5EIFByb2dyYW0gZmFpbCBpbiAlcywgTGluZSAlZCwgIgorCQkJCQkiRnVuY3Rpb246ICVzLCAiCisJCQkJCSJuZXcgQmFkIEJsb2NrICVkIGdlbmVyYXRlZCFcbiIsCisJCQkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18sCisJCQkJCShpbnQpQmxvY2spOworCQkJCWdvdG8gZnVuY19yZXR1cm47CisJCQl9CisjZW5kaWYKKwkJfQorCisJCXdCeXRlc0NvcGllZCA9IEZUTF9Db3B5X0Jsb2NrX1RhYmxlX1RvX0ZsYXNoKHRlbXBCdWYsCisJCQkJRGV2aWNlSW5mby53UGFnZURhdGFTaXplLCB3Qnl0ZXNDb3BpZWQpOworCQltZW1zZXQoJnRlbXBCdWZbd0J5dGVzQ29waWVkXSwgMHhmZiwKKwkJCURldmljZUluZm8ud1BhZ2VTaXplLXdCeXRlc0NvcGllZCk7CisJCUZUTF9JbnNlcnRfQmxvY2tfVGFibGVfU2lnbmF0dXJlKAorCQkJJnRlbXBCdWZbRGV2aWNlSW5mby53UGFnZURhdGFTaXplXSwgYnRfZmxhZyk7CisjaWYgQ01EX0RNQQorCQltZW1jcHkoZ19wTmV4dEJsb2NrVGFibGUsIHRlbXBCdWYsCisJCQkJRGV2aWNlSW5mby53UGFnZVNpemUgKiBzaXplb2YodTgpKTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkiV3JpdGluZyB0aGUgbGFzdCBQYWdlIG9mIEJsb2NrIFRhYmxlICIKKwkJCSJCbG9jayAldSBQYWdlICV1XG4iLAorCQkJKHVuc2lnbmVkIGludClCbG9jaywgUGFnZSArIGJ0X3BhZ2VzIC0gMSk7CisJCWlmIChGQUlMID09IEdMT0JfTExEX1dyaXRlX1BhZ2VfTWFpbl9TcGFyZV9jZG1hKAorCQkJZ19wTmV4dEJsb2NrVGFibGUsIEJsb2NrLCBQYWdlICsgYnRfcGFnZXMgLSAxLCAxLAorCQkJTExEX0NNRF9GTEFHX01PREVfQ0RNQSB8CisJCQlMTERfQ01EX0ZMQUdfT1JERVJfQkVGT1JFX1JFU1QpKSB7CisJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLAorCQkJCSJOQU5EIFByb2dyYW0gZmFpbCBpbiAlcywgTGluZSAlZCwgIgorCQkJCSJGdW5jdGlvbjogJXMsIG5ldyBCYWQgQmxvY2sgJWQgZ2VuZXJhdGVkIVxuIiwKKwkJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fLCBCbG9jayk7CisJCQlnb3RvIGZ1bmNfcmV0dXJuOworCQl9CisJCWZ0bF9jbWRfY250Kys7CisjZWxzZQorCQlpZiAoRkFJTCA9PSBHTE9CX0xMRF9Xcml0ZV9QYWdlX01haW5fU3BhcmUodGVtcEJ1ZiwKKwkJCQkJQmxvY2ssIFBhZ2UrYnRfcGFnZXMgLSAxLCAxKSkgeworCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJCQkiTkFORCBQcm9ncmFtIGZhaWwgaW4gJXMsIExpbmUgJWQsICIKKwkJCQkiRnVuY3Rpb246ICVzLCAiCisJCQkJIm5ldyBCYWQgQmxvY2sgJWQgZ2VuZXJhdGVkIVxuIiwKKwkJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fLCBCbG9jayk7CisJCQlnb3RvIGZ1bmNfcmV0dXJuOworCQl9CisjZW5kaWYKKwl9CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkZUTF9Xcml0ZV9CbG9ja19UYWJsZV9EYXRhOiBkb25lXG4iKTsKKworZnVuY19yZXR1cm46CisJcmV0dXJuIFBBU1M7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgRlRMX1JlcGxhY2VfQmxvY2tfVGFibGUKKyogSW5wdXRzOiAgICAgICBOb25lCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIC8gRkFJTD0xCisqIERlc2NyaXB0aW9uOiAgR2V0IGEgbmV3IGJsb2NrIHRvIHdyaXRlIGJsb2NrIHRhYmxlCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworc3RhdGljIHUzMiBGVExfUmVwbGFjZV9CbG9ja19UYWJsZSh2b2lkKQoreworCXUzMiBibGs7CisJaW50IGdjOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWJsayA9IEZUTF9SZXBsYWNlX0xXQmxvY2soQkxPQ0tfVEFCTEVfSU5ERVgsICZnYyk7CisKKwlpZiAoKEJBRF9CTE9DSyA9PSBibGspICYmIChQQVNTID09IGdjKSkgeworCQlHTE9CX0ZUTF9HYXJiYWdlX0NvbGxlY3Rpb24oKTsKKwkJYmxrID0gRlRMX1JlcGxhY2VfTFdCbG9jayhCTE9DS19UQUJMRV9JTkRFWCwgJmdjKTsKKwl9CisJaWYgKEJBRF9CTE9DSyA9PSBibGspCisJCXByaW50ayhLRVJOX0VSUiAiJXMsICVzOiBUaGVyZSBpcyBubyBzcGFyZSBibG9jay4gIgorCQkJIkl0IHNob3VsZCBuZXZlciBoYXBwZW5cbiIsCisJCQlfX0ZJTEVfXywgX19mdW5jX18pOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJOZXcgQmxvY2sgdGFibGUgQmxvY2sgaXMgJWRcbiIsIGJsayk7CisKKwlyZXR1cm4gYmxrOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEZUTF9SZXBsYWNlX0xXQmxvY2sKKyogSW5wdXRzOiAgICAgICBCbG9jayBudW1iZXIKKyogICAgICAgICAgICAgICBQb2ludGVyIHRvIEdhcmJhZ2UgQ29sbGVjdCBmbGFnCisqIE91dHB1dHM6CisqIERlc2NyaXB0aW9uOiAgRGV0ZXJtaW5lIHRoZSBsZWFzdCB3ZWFyZWQgYmxvY2sgYnkgdHJhdmVyc2luZworKiAgICAgICAgICAgICAgIGJsb2NrIHRhYmxlCisqICAgICAgICAgICAgICAgU2V0IEdhcmJhZ2UgY29sbGVjdGlvbiB0byBiZSBjYWxsZWQgaWYgbnVtYmVyIG9mIHNwYXJlCisqICAgICAgICAgICAgICAgYmxvY2sgaXMgbGVzcyB0aGFuIEZyZWUgQmxvY2sgR2F0ZSBjb3VudAorKiAgICAgICAgICAgICAgIENoYW5nZSBCbG9jayB0YWJsZSBlbnRyeSB0byBtYXAgbGVhc3Qgd29ybiBibG9jayBmb3IgY3VycmVudAorKiAgICAgICAgICAgICAgIG9wZXJhdGlvbgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3N0YXRpYyB1MzIgRlRMX1JlcGxhY2VfTFdCbG9jayh1MzIgd0Jsb2NrTnVtLCBpbnQgKnBHYXJiYWdlQ29sbGVjdCkKK3sKKwl1MzIgaTsKKwl1MzIgKnBidCA9ICh1MzIgKilnX3BCbG9ja1RhYmxlOworCXU4IHdMZWFzdFdvcm5Db3VudGVyID0gMHhGRjsKKwl1MzIgd0xlYXN0V29ybkluZGV4ID0gQkFEX0JMT0NLOworCXUzMiB3U3BhcmVCbG9ja051bSA9IDA7CisJdTMyIHdEaXNjYXJkQmxvY2tOdW0gPSAwOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWlmIChJU19TUEFSRV9CTE9DSyh3QmxvY2tOdW0pKSB7CisJCSpwR2FyYmFnZUNvbGxlY3QgPSBGQUlMOworCQlwYnRbd0Jsb2NrTnVtXSA9ICh1MzIpKHBidFt3QmxvY2tOdW1dICYgKH5TUEFSRV9CTE9DSykpOworI2lmIENNRF9ETUEKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEgPQorCQkJKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEgKilnX3BCVERlbHRhX0ZyZWU7CisJCWdfcEJURGVsdGFfRnJlZSArPSBzaXplb2Yoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSk7CisJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5mdGxfY21kX2NudCA9CisJCQkJCQlmdGxfY21kX2NudDsKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPkJUX0luZGV4ID0gKHUzMikod0Jsb2NrTnVtKTsKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPkJUX0VudHJ5X1ZhbHVlID0gcGJ0W3dCbG9ja051bV07CisJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5WYWxpZEZpZWxkcyA9IDB4MEM7CisjZW5kaWYKKwkJcmV0dXJuIHBidFt3QmxvY2tOdW1dOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW07IGkrKykgeworCQlpZiAoSVNfRElTQ0FSREVEX0JMT0NLKGkpKQorCQkJd0Rpc2NhcmRCbG9ja051bSsrOworCisJCWlmIChJU19TUEFSRV9CTE9DSyhpKSkgeworCQkJdTMyIHdQaHlzaWNhbEluZGV4ID0gKHUzMikoKH5CQURfQkxPQ0spICYgcGJ0W2ldKTsKKwkJCWlmICh3UGh5c2ljYWxJbmRleCA+IERldmljZUluZm8ud1NwZWN0cmFFbmRCbG9jaykKKwkJCQlwcmludGsoS0VSTl9FUlIgIkZUTF9SZXBsYWNlX0xXQmxvY2s6ICIKKwkJCQkJIlRoaXMgc2hvdWxkIG5ldmVyIG9jY3VyIVxuIik7CisJCQlpZiAoZ19wV2VhckNvdW50ZXJbd1BoeXNpY2FsSW5kZXggLQorCQkJCURldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrXSA8CisJCQkJd0xlYXN0V29ybkNvdW50ZXIpIHsKKwkJCQl3TGVhc3RXb3JuQ291bnRlciA9CisJCQkJCWdfcFdlYXJDb3VudGVyW3dQaHlzaWNhbEluZGV4IC0KKwkJCQkJRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2tdOworCQkJCXdMZWFzdFdvcm5JbmRleCA9IGk7CisJCQl9CisJCQl3U3BhcmVCbG9ja051bSsrOworCQl9CisJfQorCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJIkZUTF9SZXBsYWNlX0xXQmxvY2s6IExlYXN0IFdvcm4gQ291bnRlciAlZFxuIiwKKwkJKGludCl3TGVhc3RXb3JuQ291bnRlcik7CisKKwlpZiAoKHdEaXNjYXJkQmxvY2tOdW0gPj0gTlVNX0ZSRUVfQkxPQ0tTX0dBVEUpIHx8CisJCSh3U3BhcmVCbG9ja051bSA8PSBOVU1fRlJFRV9CTE9DS1NfR0FURSkpCisJCSpwR2FyYmFnZUNvbGxlY3QgPSBQQVNTOworCWVsc2UKKwkJKnBHYXJiYWdlQ29sbGVjdCA9IEZBSUw7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJIkZUTF9SZXBsYWNlX0xXQmxvY2s6IERpc2NhcmRlZCBCbG9ja3MgJXUgU3BhcmUiCisJCSIgQmxvY2tzICV1XG4iLAorCQkodW5zaWduZWQgaW50KXdEaXNjYXJkQmxvY2tOdW0sCisJCSh1bnNpZ25lZCBpbnQpd1NwYXJlQmxvY2tOdW0pOworCisJcmV0dXJuIEZUTF9SZXBsYWNlX09uZUJsb2NrKHdCbG9ja051bSwgd0xlYXN0V29ybkluZGV4KTsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBGVExfUmVwbGFjZV9NV0Jsb2NrCisqIElucHV0czogICAgICAgTm9uZQorKiBPdXRwdXRzOiAgICAgIG1vc3Qgd29ybiBzcGFyZSBibG9jayBuby4vQkFEX0JMT0NLCisqIERlc2NyaXB0aW9uOiAgSXQgZmluZHMgbW9zdCB3b3JuIHNwYXJlIGJsb2NrLgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3N0YXRpYyB1MzIgRlRMX1JlcGxhY2VfTVdCbG9jayh2b2lkKQoreworCXUzMiBpOworCXUzMiAqcGJ0ID0gKHUzMiAqKWdfcEJsb2NrVGFibGU7CisJdTggd01vc3RXb3JuQ291bnRlciA9IDA7CisJdTMyIHdNb3N0V29ybkluZGV4ID0gQkFEX0JMT0NLOworCXUzMiB3U3BhcmVCbG9ja051bSA9IDA7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWZvciAoaSA9IDA7IGkgPCBEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW07IGkrKykgeworCQlpZiAoSVNfU1BBUkVfQkxPQ0soaSkpIHsKKwkJCXUzMiB3UGh5c2ljYWxJbmRleCA9ICh1MzIpKCh+U1BBUkVfQkxPQ0spICYgcGJ0W2ldKTsKKwkJCWlmIChnX3BXZWFyQ291bnRlclt3UGh5c2ljYWxJbmRleCAtCisJCQkgICAgRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2tdID4KKwkJCSAgICB3TW9zdFdvcm5Db3VudGVyKSB7CisJCQkJd01vc3RXb3JuQ291bnRlciA9CisJCQkJICAgIGdfcFdlYXJDb3VudGVyW3dQaHlzaWNhbEluZGV4IC0KKwkJCQkgICAgRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2tdOworCQkJCXdNb3N0V29ybkluZGV4ID0gd1BoeXNpY2FsSW5kZXg7CisJCQl9CisJCQl3U3BhcmVCbG9ja051bSsrOworCQl9CisJfQorCisJaWYgKHdTcGFyZUJsb2NrTnVtIDw9IDIpCisJCXJldHVybiBCQURfQkxPQ0s7CisKKwlyZXR1cm4gd01vc3RXb3JuSW5kZXg7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgRlRMX1JlcGxhY2VfQmxvY2sKKyogSW5wdXRzOiAgICAgICBCbG9jayBBZGRyZXNzCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIC8gRkFJTD0xCisqIERlc2NyaXB0aW9uOiAgSWYgYmxvY2sgc3BlY2lmaWVkIGJ5IGJsa19hZGRyIHBhcmFtZXRlciBpcyBub3QgZnJlZSwKKyogICAgICAgICAgICAgICByZXBsYWNlIGl0IHdpdGggdGhlIGxlYXN0IHdvcm4gYmxvY2suCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworc3RhdGljIGludCBGVExfUmVwbGFjZV9CbG9jayh1NjQgYmxrX2FkZHIpCit7CisJdTMyIGN1cnJlbnRfYmxrID0gQkxLX0ZST01fQUREUihibGtfYWRkcik7CisJdTMyICpwYnQgPSAodTMyICopZ19wQmxvY2tUYWJsZTsKKwlpbnQgd1Jlc3VsdCA9IFBBU1M7CisJaW50IEdhcmJhZ2VDb2xsZWN0ID0gRkFJTDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlpZiAoSVNfU1BBUkVfQkxPQ0soY3VycmVudF9ibGspKSB7CisJCXBidFtjdXJyZW50X2Jsa10gPSAoflNQQVJFX0JMT0NLKSAmIHBidFtjdXJyZW50X2Jsa107CisjaWYgQ01EX0RNQQorCQlwX0JUYWJsZUNoYW5nZXNEZWx0YSA9CisJCQkoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSAqKWdfcEJURGVsdGFfRnJlZTsKKwkJZ19wQlREZWx0YV9GcmVlICs9IHNpemVvZihzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhKTsKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250ID0KKwkJCWZ0bF9jbWRfY250OworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfSW5kZXggPSBjdXJyZW50X2JsazsKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPkJUX0VudHJ5X1ZhbHVlID0gcGJ0W2N1cnJlbnRfYmxrXTsKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPlZhbGlkRmllbGRzID0gMHgwQyA7CisjZW5kaWYKKwkJcmV0dXJuIHdSZXN1bHQ7CisJfQorCisJRlRMX1JlcGxhY2VfTFdCbG9jayhjdXJyZW50X2JsaywgJkdhcmJhZ2VDb2xsZWN0KTsKKworCWlmIChQQVNTID09IEdhcmJhZ2VDb2xsZWN0KQorCQl3UmVzdWx0ID0gR0xPQl9GVExfR2FyYmFnZV9Db2xsZWN0aW9uKCk7CisKKwlyZXR1cm4gd1Jlc3VsdDsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBHTE9CX0ZUTF9Jc19CYWRCbG9jaworKiBJbnB1dHM6ICAgICAgIGJsb2NrIG51bWJlciB0byB0ZXN0CisqIE91dHB1dHM6ICAgICAgUEFTUyAoYmxvY2sgaXMgQkFEKSAvIEZBSUwgKGJsb2NrIGlzIG5vdCBiYWQpCisqIERlc2NyaXB0aW9uOiAgdGVzdCBpZiB0aGlzIGJsb2NrIG51bWJlciBpcyBmbGFnZ2VkIGFzIGJhZAorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK2ludCBHTE9CX0ZUTF9Jc19CYWRCbG9jayh1MzIgd0Jsb2NrTnVtKQoreworCXUzMiAqcGJ0ID0gKHUzMiAqKWdfcEJsb2NrVGFibGU7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJaWYgKHdCbG9ja051bSA+PSBEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9jaworCQkmJiBCQURfQkxPQ0sgPT0gKHBidFt3QmxvY2tOdW1dICYgQkFEX0JMT0NLKSkKKwkJcmV0dXJuIFBBU1M7CisJZWxzZQorCQlyZXR1cm4gRkFJTDsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBHTE9CX0ZUTF9GbHVzaF9DYWNoZQorKiBJbnB1dHM6ICAgICAgIG5vbmUKKyogT3V0cHV0czogICAgICBQQVNTPTAgLyBGQUlMPTEKKyogRGVzY3JpcHRpb246ICBmbHVzaCBhbGwgdGhlIGNhY2hlIGJsb2NrcyB0byBmbGFzaAorKiAgICAgICAgICAgICAgIGlmIGEgY2FjaGUgYmxvY2sgaXMgbm90IGRpcnR5LCBkb24ndCBkbyBhbnl0aGluZyB3aXRoIGl0CisqICAgICAgICAgICAgICAgZWxzZSwgd3JpdGUgdGhlIGJsb2NrIGFuZCB1cGRhdGUgdGhlIGJsb2NrIHRhYmxlCisqIE5vdGU6ICAgICAgICAgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGF0IHNodXRkb3duL3Bvd2VyIGRvd24uCisqICAgICAgICAgICAgICAgdG8gd3JpdGUgaW1wb3J0YW50IGRhdGEgaW50byBkZXZpY2UKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCitpbnQgR0xPQl9GVExfRmx1c2hfQ2FjaGUodm9pZCkKK3sKKwlpbnQgaSwgcmV0OworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWZvciAoaSA9IDA7IGkgPCBDQUNIRV9JVEVNX05VTTsgaSsrKSB7CisJCWlmIChTRVQgPT0gQ2FjaGUuYXJyYXlbaV0uY2hhbmdlZCkgeworI2lmIENNRF9ETUEKKyNpZiBSRVNUT1JFX0NBQ0hFX09OX0NETUFfQ0hBSU5fRkFJTFVSRQorCQkJaW50X2NhY2hlW2Z0bF9jbWRfY250XS5pdGVtID0gaTsKKwkJCWludF9jYWNoZVtmdGxfY21kX2NudF0uY2FjaGUuYWRkcmVzcyA9CisJCQkJCUNhY2hlLmFycmF5W2ldLmFkZHJlc3M7CisJCQlpbnRfY2FjaGVbZnRsX2NtZF9jbnRdLmNhY2hlLmNoYW5nZWQgPSBDTEVBUjsKKyNlbmRpZgorI2VuZGlmCisJCQlyZXQgPSB3cml0ZV9iYWNrX3RvX2wyX2NhY2hlKENhY2hlLmFycmF5W2ldLmJ1ZiwgQ2FjaGUuYXJyYXlbaV0uYWRkcmVzcyk7CisJCQlpZiAoUEFTUyA9PSByZXQpIHsKKwkJCQlDYWNoZS5hcnJheVtpXS5jaGFuZ2VkID0gQ0xFQVI7CisJCQl9IGVsc2UgeworCQkJCXByaW50ayhLRVJOX0FMRVJUICJGYWlsZWQgd2hlbiB3cml0ZSBiYWNrIHRvIEwyIGNhY2hlIVxuIik7CisJCQkJLyogVE9ETyAtIEhvdyB0byBoYW5kbGUgdGhpcz8gKi8KKwkJCX0KKwkJfQorCX0KKworCWZsdXNoX2wyX2NhY2hlKCk7CisKKwlyZXR1cm4gRlRMX1dyaXRlX0Jsb2NrX1RhYmxlKEZBSUwpOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEdMT0JfRlRMX1BhZ2VfUmVhZAorKiBJbnB1dHM6ICAgICAgIHBvaW50ZXIgdG8gZGF0YQorKiAgICAgICAgICAgICAgICAgICBsb2dpY2FsIGFkZHJlc3Mgb2YgZGF0YSAodTY0IGlzIExCQSAqIEJ5dGVzL1BhZ2UpCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIC8gRkFJTD0xCisqIERlc2NyaXB0aW9uOiAgcmVhZHMgYSBwYWdlIG9mIGRhdGEgaW50byBSQU0gZnJvbSB0aGUgY2FjaGUKKyogICAgICAgICAgICAgICBpZiB0aGUgZGF0YSBpcyBub3QgYWxyZWFkeSBpbiBjYWNoZSwgcmVhZCBmcm9tIGZsYXNoIHRvIGNhY2hlCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworaW50IEdMT0JfRlRMX1BhZ2VfUmVhZCh1OCAqZGF0YSwgdTY0IGxvZ2ljYWxfYWRkcikKK3sKKwl1MTYgY2FjaGVfaXRlbTsKKwlpbnQgcmVzID0gUEFTUzsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiR0xPQl9GVExfUGFnZV9SZWFkIC0gIgorCQkicGFnZV9hZGRyOiAlbGx1XG4iLCBsb2dpY2FsX2FkZHIpOworCisJY2FjaGVfaXRlbSA9IEZUTF9DYWNoZV9JZl9IaXQobG9naWNhbF9hZGRyKTsKKworCWlmIChVTkhJVF9DQUNIRV9JVEVNID09IGNhY2hlX2l0ZW0pIHsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkgICAgICAgIkdMT0JfRlRMX1BhZ2VfUmVhZDogQ2FjaGUgbm90IGhpdFxuIik7CisJCXJlcyA9IEZUTF9DYWNoZV9Xcml0ZSgpOworCQlpZiAoRVJSID09IEZUTF9DYWNoZV9SZWFkKGxvZ2ljYWxfYWRkcikpCisJCQlyZXMgPSBFUlI7CisJCWNhY2hlX2l0ZW0gPSBDYWNoZS5MUlU7CisJfQorCisJRlRMX0NhY2hlX1JlYWRfUGFnZShkYXRhLCBsb2dpY2FsX2FkZHIsIGNhY2hlX2l0ZW0pOworCisJcmV0dXJuIHJlczsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBHTE9CX0ZUTF9QYWdlX1dyaXRlCisqIElucHV0czogICAgICAgcG9pbnRlciB0byBkYXRhCisqICAgICAgICAgICAgICAgYWRkcmVzcyBvZiBkYXRhIChBRERSRVNTVFlQRSBpcyBMQkEgKiBCeXRlcy9QYWdlKQorKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAvIEZBSUw9MQorKiBEZXNjcmlwdGlvbjogIHdyaXRlcyBhIHBhZ2Ugb2YgZGF0YSBmcm9tIFJBTSB0byB0aGUgY2FjaGUKKyogICAgICAgICAgICAgICBpZiB0aGUgZGF0YSBpcyBub3QgYWxyZWFkeSBpbiBjYWNoZSwgd3JpdGUgYmFjayB0aGUKKyogICAgICAgICAgICAgICBsZWFzdCByZWNlbnRseSB1c2VkIGJsb2NrIGFuZCByZWFkIHRoZSBhZGRyZXNzZWQgYmxvY2sKKyogICAgICAgICAgICAgICBmcm9tIGZsYXNoIHRvIGNhY2hlCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworaW50IEdMT0JfRlRMX1BhZ2VfV3JpdGUodTggKnBEYXRhLCB1NjQgZHdQYWdlQWRkcikKK3sKKwl1MTYgY2FjaGVfYmxrOworCXUzMiAqcGJ0ID0gKHUzMiAqKWdfcEJsb2NrVGFibGU7CisJaW50IHdSZXN1bHQgPSBQQVNTOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICJHTE9CX0ZUTF9QYWdlX1dyaXRlIC0gIgorCQkiZHdQYWdlQWRkcjogJWxsdVxuIiwgZHdQYWdlQWRkcik7CisKKwljYWNoZV9ibGsgPSBGVExfQ2FjaGVfSWZfSGl0KGR3UGFnZUFkZHIpOworCisJaWYgKFVOSElUX0NBQ0hFX0lURU0gPT0gY2FjaGVfYmxrKSB7CisJCXdSZXN1bHQgPSBGVExfQ2FjaGVfV3JpdGUoKTsKKwkJaWYgKElTX0JBRF9CTE9DSyhCTEtfRlJPTV9BRERSKGR3UGFnZUFkZHIpKSkgeworCQkJd1Jlc3VsdCA9IEZUTF9SZXBsYWNlX0Jsb2NrKGR3UGFnZUFkZHIpOworCQkJcGJ0W0JMS19GUk9NX0FERFIoZHdQYWdlQWRkcildIHw9IFNQQVJFX0JMT0NLOworCQkJaWYgKHdSZXN1bHQgPT0gRkFJTCkKKwkJCQlyZXR1cm4gRkFJTDsKKwkJfQorCQlpZiAoRVJSID09IEZUTF9DYWNoZV9SZWFkKGR3UGFnZUFkZHIpKQorCQkJd1Jlc3VsdCA9IEVSUjsKKwkJY2FjaGVfYmxrID0gQ2FjaGUuTFJVOworCQlGVExfQ2FjaGVfV3JpdGVfUGFnZShwRGF0YSwgZHdQYWdlQWRkciwgY2FjaGVfYmxrLCAwKTsKKwl9IGVsc2UgeworI2lmIENNRF9ETUEKKwkJRlRMX0NhY2hlX1dyaXRlX1BhZ2UocERhdGEsIGR3UGFnZUFkZHIsIGNhY2hlX2JsaywKKwkJCQlMTERfQ01EX0ZMQUdfT1JERVJfQkVGT1JFX1JFU1QpOworI2Vsc2UKKwkJRlRMX0NhY2hlX1dyaXRlX1BhZ2UocERhdGEsIGR3UGFnZUFkZHIsIGNhY2hlX2JsaywgMCk7CisjZW5kaWYKKwl9CisKKwlyZXR1cm4gd1Jlc3VsdDsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBHTE9CX0ZUTF9CbG9ja19FcmFzZQorKiBJbnB1dHM6ICAgICAgIGFkZHJlc3Mgb2YgYmxvY2sgdG8gZXJhc2UgKG5vdyBpbiBieXRlIGZvcm1hdCwgc2hvdWxkIGNoYW5nZSB0bworKiBibG9jayBmb3JtYXQpCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIC8gRkFJTD0xCisqIERlc2NyaXB0aW9uOiAgZXJhc2VzIHRoZSBzcGVjaWZpZWQgYmxvY2sKKyogICAgICAgICAgICAgICBpbmNyZW1lbnRzIHRoZSBlcmFzZSBjb3VudAorKiAgICAgICAgICAgICAgIElmIGVyYXNlIGNvdW50IHJlYWNoZXMgaXRzIHVwcGVyIGxpbWl0LGNhbGwgZnVuY3Rpb24gdG8KKyogICAgICAgICAgICAgICBkbyB0aGUgYWp1c3RtZW50IGFzIHBlciB0aGUgcmVsYXRpdmUgZXJhc2UgY291bnQgdmFsdWVzCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworaW50IEdMT0JfRlRMX0Jsb2NrX0VyYXNlKHU2NCBibGtfYWRkcikKK3sKKwlpbnQgc3RhdHVzOworCXUzMiBCbGtJZHg7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlCbGtJZHggPSAodTMyKShibGtfYWRkciA+PiBEZXZpY2VJbmZvLm5CaXRzSW5CbG9ja0RhdGFTaXplKTsKKworCWlmIChCbGtJZHggPCBEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9jaykgeworCQlwcmludGsoS0VSTl9FUlIgIkdMT0JfRlRMX0Jsb2NrX0VyYXNlOiAiCisJCQkiVGhpcyBzaG91bGQgbmV2ZXIgb2NjdXJcbiIpOworCQlyZXR1cm4gRkFJTDsKKwl9CisKKyNpZiBDTURfRE1BCisJc3RhdHVzID0gR0xPQl9MTERfRXJhc2VfQmxvY2tfY2RtYShCbGtJZHgsIExMRF9DTURfRkxBR19NT0RFX0NETUEpOworCWlmIChzdGF0dXMgPT0gRkFJTCkKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJCSAgICAgICAiTkFORCBQcm9ncmFtIGZhaWwgaW4gJXMsIExpbmUgJWQsICIKKwkJCSAgICAgICAiRnVuY3Rpb246ICVzLCBuZXcgQmFkIEJsb2NrICVkIGdlbmVyYXRlZCFcbiIsCisJCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXywgQmxrSWR4KTsKKyNlbHNlCisJc3RhdHVzID0gR0xPQl9MTERfRXJhc2VfQmxvY2soQmxrSWR4KTsKKwlpZiAoc3RhdHVzID09IEZBSUwpIHsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJCSAgICAgICAiTkFORCBQcm9ncmFtIGZhaWwgaW4gJXMsIExpbmUgJWQsICIKKwkJCSAgICAgICAiRnVuY3Rpb246ICVzLCBuZXcgQmFkIEJsb2NrICVkIGdlbmVyYXRlZCFcbiIsCisJCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXywgQmxrSWR4KTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisjZW5kaWYKKworCWlmIChEZXZpY2VJbmZvLk1MQ0RldmljZSkgeworCQlnX3BSZWFkQ291bnRlcltCbGtJZHggLSBEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9ja10gPSAwOworCQlpZiAoZ19jQmxvY2tUYWJsZVN0YXR1cyAhPSBJTl9QUk9HUkVTU19CTE9DS19UQUJMRSkgeworCQkJZ19jQmxvY2tUYWJsZVN0YXR1cyA9IElOX1BST0dSRVNTX0JMT0NLX1RBQkxFOworCQkJRlRMX1dyaXRlX0lOX1Byb2dyZXNzX0Jsb2NrX1RhYmxlX1BhZ2UoKTsKKwkJfQorCX0KKworCWdfcFdlYXJDb3VudGVyW0Jsa0lkeCAtIERldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrXSsrOworCisjaWYgQ01EX0RNQQorCXBfQlRhYmxlQ2hhbmdlc0RlbHRhID0KKwkJKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEgKilnX3BCVERlbHRhX0ZyZWU7CisJZ19wQlREZWx0YV9GcmVlICs9IHNpemVvZihzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhKTsKKwlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+ZnRsX2NtZF9jbnQgPSBmdGxfY21kX2NudDsKKwlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+V0NfSW5kZXggPQorCQlCbGtJZHggLSBEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9jazsKKwlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+V0NfRW50cnlfVmFsdWUgPQorCQlnX3BXZWFyQ291bnRlcltCbGtJZHggLSBEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9ja107CisJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPlZhbGlkRmllbGRzID0gMHgzMDsKKworCWlmIChEZXZpY2VJbmZvLk1MQ0RldmljZSkgeworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YSA9CisJCQkoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSAqKWdfcEJURGVsdGFfRnJlZTsKKwkJZ19wQlREZWx0YV9GcmVlICs9IHNpemVvZihzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhKTsKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250ID0KKwkJCWZ0bF9jbWRfY250OworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+UkNfSW5kZXggPQorCQkJQmxrSWR4IC0gRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2s7CisJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5SQ19FbnRyeV9WYWx1ZSA9CisJCQlnX3BSZWFkQ291bnRlcltCbGtJZHggLQorCQkJCURldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrXTsKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPlZhbGlkRmllbGRzID0gMHhDMDsKKwl9CisKKwlmdGxfY21kX2NudCsrOworI2VuZGlmCisKKwlpZiAoZ19wV2VhckNvdW50ZXJbQmxrSWR4IC0gRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2tdID09IDB4RkUpCisJCUZUTF9BZGp1c3RfUmVsYXRpdmVfRXJhc2VfQ291bnQoQmxrSWR4KTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBGVExfQWRqdXN0X1JlbGF0aXZlX0VyYXNlX0NvdW50CisqIElucHV0czogICAgICAgaW5kZXggdG8gYmxvY2sgdGhhdCB3YXMganVzdCBpbmNyZW1lbnRlZCBhbmQgaXMgYXQgdGhlIG1heAorKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAvIEZBSUw9MQorKiBEZXNjcmlwdGlvbjogIElmIGFueSBlcmFzZSBjb3VudHMgYXQgTUFYLCBhZGp1c3RzIGVyYXNlIGNvdW50IG9mIGV2ZXJ5CisqICAgICAgICAgICAgICAgYmxvY2sgYnkgc3Vic3RyYWN0aW5nIGxlYXN0IHdvcm4KKyogICAgICAgICAgICAgICBjb3VudGVyIGZyb20gY291bnRlciB2YWx1ZSBvZiBldmVyeSBlbnRyeSBpbiB3ZWFyIHRhYmxlCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworc3RhdGljIGludCBGVExfQWRqdXN0X1JlbGF0aXZlX0VyYXNlX0NvdW50KHUzMiBJbmRleF9vZl9NQVgpCit7CisJdTggd0xlYXN0V29ybkNvdW50ZXIgPSBNQVhfQllURV9WQUxVRTsKKwl1OCB3V2VhckNvdW50ZXI7CisJdTMyIGksIHdXZWFySW5kZXg7CisJdTMyICpwYnQgPSAodTMyICopZ19wQmxvY2tUYWJsZTsKKwlpbnQgd1Jlc3VsdCA9IFBBU1M7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJZm9yIChpID0gMDsgaSA8IERldmljZUluZm8ud0RhdGFCbG9ja051bTsgaSsrKSB7CisJCWlmIChJU19CQURfQkxPQ0soaSkpCisJCQljb250aW51ZTsKKwkJd1dlYXJJbmRleCA9ICh1MzIpKHBidFtpXSAmICh+QkFEX0JMT0NLKSk7CisKKwkJaWYgKCh3V2VhckluZGV4IC0gRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2spIDwgMCkKKwkJCXByaW50ayhLRVJOX0VSUiAiRlRMX0FkanVzdF9SZWxhdGl2ZV9FcmFzZV9Db3VudDoiCisJCQkJCSJUaGlzIHNob3VsZCBuZXZlciBvY2N1clxuIik7CisJCXdXZWFyQ291bnRlciA9IGdfcFdlYXJDb3VudGVyW3dXZWFySW5kZXggLQorCQkJRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2tdOworCQlpZiAod1dlYXJDb3VudGVyIDwgd0xlYXN0V29ybkNvdW50ZXIpCisJCQl3TGVhc3RXb3JuQ291bnRlciA9IHdXZWFyQ291bnRlcjsKKwl9CisKKwlpZiAod0xlYXN0V29ybkNvdW50ZXIgPT0gMCkgeworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLAorCQkJIkFkanVzdGluZyBXZWFyIExldmVsbGluZyBDb3VudGVyczogU3BlY2lhbCBDYXNlXG4iKTsKKwkJZ19wV2VhckNvdW50ZXJbSW5kZXhfb2ZfTUFYIC0KKwkJCURldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrXS0tOworI2lmIENNRF9ETUEKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEgPQorCQkJKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEgKilnX3BCVERlbHRhX0ZyZWU7CisJCWdfcEJURGVsdGFfRnJlZSArPSBzaXplb2Yoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSk7CisJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5mdGxfY21kX2NudCA9IGZ0bF9jbWRfY250OworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+V0NfSW5kZXggPQorCQkJSW5kZXhfb2ZfTUFYIC0gRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2s7CisJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5XQ19FbnRyeV9WYWx1ZSA9CisJCQlnX3BXZWFyQ291bnRlcltJbmRleF9vZl9NQVggLQorCQkJCURldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrXTsKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPlZhbGlkRmllbGRzID0gMHgzMDsKKyNlbmRpZgorCQlGVExfU3RhdGljX1dlYXJfTGV2ZWxpbmcoKTsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtOyBpKyspCisJCQlpZiAoIUlTX0JBRF9CTE9DSyhpKSkgeworCQkJCXdXZWFySW5kZXggPSAodTMyKShwYnRbaV0gJiAofkJBRF9CTE9DSykpOworCQkJCWdfcFdlYXJDb3VudGVyW3dXZWFySW5kZXggLQorCQkJCQlEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9ja10gPQorCQkJCQkodTgpKGdfcFdlYXJDb3VudGVyCisJCQkJCVt3V2VhckluZGV4IC0KKwkJCQkJRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2tdIC0KKwkJCQkJd0xlYXN0V29ybkNvdW50ZXIpOworI2lmIENNRF9ETUEKKwkJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YSA9CisJCQkJKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEgKilnX3BCVERlbHRhX0ZyZWU7CisJCQkJZ19wQlREZWx0YV9GcmVlICs9CisJCQkJCXNpemVvZihzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhKTsKKworCQkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5mdGxfY21kX2NudCA9CisJCQkJCWZ0bF9jbWRfY250OworCQkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5XQ19JbmRleCA9IHdXZWFySW5kZXggLQorCQkJCQlEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9jazsKKwkJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+V0NfRW50cnlfVmFsdWUgPQorCQkJCQlnX3BXZWFyQ291bnRlclt3V2VhckluZGV4IC0KKwkJCQkJRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2tdOworCQkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5WYWxpZEZpZWxkcyA9IDB4MzA7CisjZW5kaWYKKwkJCX0KKwl9CisKKwlyZXR1cm4gd1Jlc3VsdDsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBGVExfV3JpdGVfSU5fUHJvZ3Jlc3NfQmxvY2tfVGFibGVfUGFnZQorKiBJbnB1dHM6ICAgICAgIE5vbmUKKyogT3V0cHV0czogICAgICBOb25lCisqIERlc2NyaXB0aW9uOiAgSXQgd3JpdGVzIGluLXByb2dyZXNzIGZsYWcgcGFnZSB0byB0aGUgcGFnZSBuZXh0IHRvCisqICAgICAgICAgICAgICAgYmxvY2sgdGFibGUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBGVExfV3JpdGVfSU5fUHJvZ3Jlc3NfQmxvY2tfVGFibGVfUGFnZSh2b2lkKQoreworCWludCB3UmVzdWx0ID0gUEFTUzsKKwl1MTYgYnRfcGFnZXM7CisJdTE2IGR3SVBGUGFnZUFkZHI7CisjaWYgQ01EX0RNQQorI2Vsc2UKKwl1MzIgKnBidCA9ICh1MzIgKilnX3BCbG9ja1RhYmxlOworCXUzMiB3VGVtcEJsb2NrVGFibGVJbmRleDsKKyNlbmRpZgorCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlidF9wYWdlcyA9IEZUTF9HZXRfQmxvY2tfVGFibGVfRmxhc2hfU2l6ZV9QYWdlcygpOworCisJZHdJUEZQYWdlQWRkciA9IGdfd0Jsb2NrVGFibGVPZmZzZXQgKyBidF9wYWdlczsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiV3JpdGluZyBJUEYgYXQgIgorCQkJICAgICAgICJCbG9jayAlZCBQYWdlICVkXG4iLAorCQkJICAgICAgIGdfd0Jsb2NrVGFibGVJbmRleCwgZHdJUEZQYWdlQWRkcik7CisKKyNpZiBDTURfRE1BCisJd1Jlc3VsdCA9IEdMT0JfTExEX1dyaXRlX1BhZ2VfTWFpbl9TcGFyZV9jZG1hKGdfcElQRiwKKwkJZ193QmxvY2tUYWJsZUluZGV4LCBkd0lQRlBhZ2VBZGRyLCAxLAorCQlMTERfQ01EX0ZMQUdfTU9ERV9DRE1BIHwgTExEX0NNRF9GTEFHX09SREVSX0JFRk9SRV9SRVNUKTsKKwlpZiAod1Jlc3VsdCA9PSBGQUlMKSB7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sCisJCQkgICAgICAgIk5BTkQgUHJvZ3JhbSBmYWlsIGluICVzLCBMaW5lICVkLCAiCisJCQkgICAgICAgIkZ1bmN0aW9uOiAlcywgbmV3IEJhZCBCbG9jayAlZCBnZW5lcmF0ZWQhXG4iLAorCQkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18sCisJCQkgICAgICAgZ193QmxvY2tUYWJsZUluZGV4KTsKKwl9CisJZ193QmxvY2tUYWJsZU9mZnNldCA9IGR3SVBGUGFnZUFkZHIgKyAxOworCXBfQlRhYmxlQ2hhbmdlc0RlbHRhID0gKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEgKilnX3BCVERlbHRhX0ZyZWU7CisJZ19wQlREZWx0YV9GcmVlICs9IHNpemVvZihzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhKTsKKwlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+ZnRsX2NtZF9jbnQgPSBmdGxfY21kX2NudDsKKwlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+Z193QmxvY2tUYWJsZU9mZnNldCA9IGdfd0Jsb2NrVGFibGVPZmZzZXQ7CisJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPlZhbGlkRmllbGRzID0gMHgwMTsKKwlmdGxfY21kX2NudCsrOworI2Vsc2UKKwl3UmVzdWx0ID0gR0xPQl9MTERfV3JpdGVfUGFnZV9NYWluX1NwYXJlKGdfcElQRiwKKwkJZ193QmxvY2tUYWJsZUluZGV4LCBkd0lQRlBhZ2VBZGRyLCAxKTsKKwlpZiAod1Jlc3VsdCA9PSBGQUlMKSB7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sCisJCQkgICAgICAgIk5BTkQgUHJvZ3JhbSBmYWlsIGluICVzLCBMaW5lICVkLCAiCisJCQkgICAgICAgIkZ1bmN0aW9uOiAlcywgbmV3IEJhZCBCbG9jayAlZCBnZW5lcmF0ZWQhXG4iLAorCQkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18sCisJCQkgICAgICAgKGludClnX3dCbG9ja1RhYmxlSW5kZXgpOworCQlNQVJLX0JMT0NLX0FTX0JBRChwYnRbQkxPQ0tfVEFCTEVfSU5ERVhdKTsKKwkJd1RlbXBCbG9ja1RhYmxlSW5kZXggPSBGVExfUmVwbGFjZV9CbG9ja19UYWJsZSgpOworCQlidF9ibG9ja19jaGFuZ2VkID0gMTsKKwkJaWYgKEJBRF9CTE9DSyA9PSB3VGVtcEJsb2NrVGFibGVJbmRleCkKKwkJCXJldHVybiBFUlI7CisJCWdfd0Jsb2NrVGFibGVJbmRleCA9IHdUZW1wQmxvY2tUYWJsZUluZGV4OworCQlnX3dCbG9ja1RhYmxlT2Zmc2V0ID0gMDsKKwkJLyogQmxvY2sgdGFibGUgdGFnIGlzICcwMCcuIE1lYW5zIGl0J3MgdXNlZCBvbmUgKi8KKwkJcGJ0W0JMT0NLX1RBQkxFX0lOREVYXSA9IGdfd0Jsb2NrVGFibGVJbmRleDsKKwkJcmV0dXJuIEZBSUw7CisJfQorCWdfd0Jsb2NrVGFibGVPZmZzZXQgPSBkd0lQRlBhZ2VBZGRyICsgMTsKKyNlbmRpZgorCXJldHVybiB3UmVzdWx0OworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBGVExfUmVhZF9EaXN0dXJiYW5jZQorKiBJbnB1dHM6ICAgICAgIGJsb2NrIGFkZHJlc3MKKyogT3V0cHV0czogICAgICBQQVNTPTAgLyBGQUlMPTEKKyogRGVzY3JpcHRpb246ICB1c2VkIHRvIGhhbmRsZSByZWFkIGRpc3R1cmJhbmNlLiBEYXRhIGluIGJsb2NrIHRoYXQKKyogICAgICAgICAgICAgICByZWFjaGVzIGl0cyByZWFkIGxpbWl0IGlzIG1vdmVkIHRvIG5ldyBibG9jaworKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworaW50IEZUTF9SZWFkX0Rpc3R1cmJhbmNlKHUzMiBibGtfYWRkcikKK3sKKwlpbnQgd1Jlc3VsdCA9IEZBSUw7CisJdTMyICpwYnQgPSAodTMyICopIGdfcEJsb2NrVGFibGU7CisJdTMyIGR3T2xkQmxvY2tBZGRyID0gYmxrX2FkZHI7CisJdTMyIHdCbG9ja051bTsKKwl1MzIgaTsKKwl1MzIgd0xlYXN0UmVhZENvdW50ZXIgPSAweEZGRkY7CisJdTMyIHdMZWFzdFJlYWRJbmRleCA9IEJBRF9CTE9DSzsKKwl1MzIgd1NwYXJlQmxvY2tOdW0gPSAwOworCXUzMiB3VGVtcE5vZGU7CisJdTMyIHdSZXBsYWNlZE5vZGU7CisJdTggKmdfcFRlbXBCdWY7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKyNpZiBDTURfRE1BCisJZ19wVGVtcEJ1ZiA9IGNwX2JhY2tfYnVmX2NvcGllc1tjcF9iYWNrX2J1Zl9pZHhdOworCWNwX2JhY2tfYnVmX2lkeCsrOworCWlmIChjcF9iYWNrX2J1Zl9pZHggPiBDT1BZX0JBQ0tfQlVGX05VTSkgeworCQlwcmludGsoS0VSTl9FUlIgImNwX2JhY2tfYnVmX2NvcGllcyBvdmVyZmxvdyEgRXhpdC4iCisJCSJNYXliZSB0b28gbWFueSBwZW5kaW5nIGNvbW1hbmRzIGluIHlvdXIgQ0RNQSBjaGFpbi5cbiIpOworCQlyZXR1cm4gRkFJTDsKKwl9CisjZWxzZQorCWdfcFRlbXBCdWYgPSB0bXBfYnVmX3JlYWRfZGlzdHVyYmFuY2U7CisjZW5kaWYKKworCXdCbG9ja051bSA9IEZUTF9HZXRfQmxvY2tfSW5kZXgoYmxrX2FkZHIpOworCisJZG8geworCQkvKiBUaGlzIGlzIGEgYnVnLkhlcmUgJ2knIHNob3VsZCBiZSBsb2dpY2FsIGJsb2NrIG51bWJlcgorCQkgKiBhbmQgc3RhcnQgZnJvbSAxICgwIGlzIHJlc2VydmVkIGZvciBibG9jayB0YWJsZSkuCisJCSAqIEhhdmUgZml4ZWQgaXQuICAgICAgICAtIFl1bnBlbmcgMjAwOC4gMTIuIDE5CisJCSAqLworCQlmb3IgKGkgPSAxOyBpIDwgRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtOyBpKyspIHsKKwkJCWlmIChJU19TUEFSRV9CTE9DSyhpKSkgeworCQkJCXUzMiB3UGh5c2ljYWxJbmRleCA9CisJCQkJCSh1MzIpKCh+U1BBUkVfQkxPQ0spICYgcGJ0W2ldKTsKKwkJCQlpZiAoZ19wUmVhZENvdW50ZXJbd1BoeXNpY2FsSW5kZXggLQorCQkJCQlEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9ja10gPAorCQkJCQl3TGVhc3RSZWFkQ291bnRlcikgeworCQkJCQl3TGVhc3RSZWFkQ291bnRlciA9CisJCQkJCQlnX3BSZWFkQ291bnRlclt3UGh5c2ljYWxJbmRleCAtCisJCQkJCQlEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9ja107CisJCQkJCXdMZWFzdFJlYWRJbmRleCA9IGk7CisJCQkJfQorCQkJCXdTcGFyZUJsb2NrTnVtKys7CisJCQl9CisJCX0KKworCQlpZiAod1NwYXJlQmxvY2tOdW0gPD0gTlVNX0ZSRUVfQkxPQ0tTX0dBVEUpIHsKKwkJCXdSZXN1bHQgPSBHTE9CX0ZUTF9HYXJiYWdlX0NvbGxlY3Rpb24oKTsKKwkJCWlmIChQQVNTID09IHdSZXN1bHQpCisJCQkJY29udGludWU7CisJCQllbHNlCisJCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQl3VGVtcE5vZGUgPSAodTMyKShESVNDQVJEX0JMT0NLIHwgcGJ0W3dCbG9ja051bV0pOworCQkJd1JlcGxhY2VkTm9kZSA9ICh1MzIpKCh+U1BBUkVfQkxPQ0spICYKKwkJCQkJcGJ0W3dMZWFzdFJlYWRJbmRleF0pOworI2lmIENNRF9ETUEKKwkJCXBidFt3QmxvY2tOdW1dID0gd1JlcGxhY2VkTm9kZTsKKwkJCXBidFt3TGVhc3RSZWFkSW5kZXhdID0gd1RlbXBOb2RlOworCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEgPQorCQkJCShzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhICopZ19wQlREZWx0YV9GcmVlOworCQkJZ19wQlREZWx0YV9GcmVlICs9IHNpemVvZihzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhKTsKKworCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250ID0KKwkJCQkJZnRsX2NtZF9jbnQ7CisJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfSW5kZXggPSB3QmxvY2tOdW07CisJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfRW50cnlfVmFsdWUgPSBwYnRbd0Jsb2NrTnVtXTsKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5WYWxpZEZpZWxkcyA9IDB4MEM7CisKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhID0KKwkJCQkoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSAqKWdfcEJURGVsdGFfRnJlZTsKKwkJCWdfcEJURGVsdGFfRnJlZSArPSBzaXplb2Yoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSk7CisKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5mdGxfY21kX2NudCA9CisJCQkJCWZ0bF9jbWRfY250OworCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPkJUX0luZGV4ID0gd0xlYXN0UmVhZEluZGV4OworCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPkJUX0VudHJ5X1ZhbHVlID0KKwkJCQkJcGJ0W3dMZWFzdFJlYWRJbmRleF07CisJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+VmFsaWRGaWVsZHMgPSAweDBDOworCisJCQl3UmVzdWx0ID0gR0xPQl9MTERfUmVhZF9QYWdlX01haW5fY2RtYShnX3BUZW1wQnVmLAorCQkJCWR3T2xkQmxvY2tBZGRyLCAwLCBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrLAorCQkJCUxMRF9DTURfRkxBR19NT0RFX0NETUEpOworCQkJaWYgKHdSZXN1bHQgPT0gRkFJTCkKKwkJCQlyZXR1cm4gd1Jlc3VsdDsKKworCQkJZnRsX2NtZF9jbnQrKzsKKworCQkJaWYgKHdSZXN1bHQgIT0gRkFJTCkgeworCQkJCWlmIChGQUlMID09IEdMT0JfTExEX1dyaXRlX1BhZ2VfTWFpbl9jZG1hKAorCQkJCQlnX3BUZW1wQnVmLCBwYnRbd0Jsb2NrTnVtXSwgMCwKKwkJCQkJRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jaykpIHsKKwkJCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJCQkJCSJOQU5EIFByb2dyYW0gZmFpbCBpbiAiCisJCQkJCQkiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlcywgIgorCQkJCQkJIm5ldyBCYWQgQmxvY2sgJWQgIgorCQkJCQkJImdlbmVyYXRlZCFcbiIsCisJCQkJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fLAorCQkJCQkJKGludClwYnRbd0Jsb2NrTnVtXSk7CisJCQkJCXdSZXN1bHQgPSBGQUlMOworCQkJCQlNQVJLX0JMT0NLX0FTX0JBRChwYnRbd0Jsb2NrTnVtXSk7CisJCQkJfQorCQkJCWZ0bF9jbWRfY250Kys7CisJCQl9CisjZWxzZQorCQkJd1Jlc3VsdCA9IEdMT0JfTExEX1JlYWRfUGFnZV9NYWluKGdfcFRlbXBCdWYsCisJCQkJZHdPbGRCbG9ja0FkZHIsIDAsIERldmljZUluZm8ud1BhZ2VzUGVyQmxvY2spOworCQkJaWYgKHdSZXN1bHQgPT0gRkFJTCkKKwkJCQlyZXR1cm4gd1Jlc3VsdDsKKworCQkJaWYgKHdSZXN1bHQgIT0gRkFJTCkgeworCQkJCS8qIFRoaXMgaXMgYSBidWcuIEF0IHRoaXMgdGltZSwgcGJ0W3dCbG9ja051bV0KKwkJCQlpcyBzdGlsbCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZgorCQkJCWRpc2NhcmQgYmxvY2ssIGFuZCBzaG91bGQgbm90IGJlIHdyaXRlLgorCQkJCUhhdmUgZml4ZWQgaXQgYXMgYmVsb3cuCisJCQkJCS0tIFl1bnBlbmcgMjAwOC4xMi4xOQorCQkJCSovCisJCQkJd1Jlc3VsdCA9IEdMT0JfTExEX1dyaXRlX1BhZ2VfTWFpbihnX3BUZW1wQnVmLAorCQkJCQl3UmVwbGFjZWROb2RlLCAwLAorCQkJCQlEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrKTsKKwkJCQlpZiAod1Jlc3VsdCA9PSBGQUlMKSB7CisJCQkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sCisJCQkJCQkiTkFORCBQcm9ncmFtIGZhaWwgaW4gIgorCQkJCQkJIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXMsICIKKwkJCQkJCSJuZXcgQmFkIEJsb2NrICVkICIKKwkJCQkJCSJnZW5lcmF0ZWQhXG4iLAorCQkJCQkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXywKKwkJCQkJCShpbnQpd1JlcGxhY2VkTm9kZSk7CisJCQkJCU1BUktfQkxPQ0tfQVNfQkFEKHdSZXBsYWNlZE5vZGUpOworCQkJCX0gZWxzZSB7CisJCQkJCXBidFt3QmxvY2tOdW1dID0gd1JlcGxhY2VkTm9kZTsKKwkJCQkJcGJ0W3dMZWFzdFJlYWRJbmRleF0gPSB3VGVtcE5vZGU7CisJCQkJfQorCQkJfQorCisJCQlpZiAoKHdSZXN1bHQgPT0gUEFTUykgJiYgKGdfY0Jsb2NrVGFibGVTdGF0dXMgIT0KKwkJCQlJTl9QUk9HUkVTU19CTE9DS19UQUJMRSkpIHsKKwkJCQlnX2NCbG9ja1RhYmxlU3RhdHVzID0gSU5fUFJPR1JFU1NfQkxPQ0tfVEFCTEU7CisJCQkJRlRMX1dyaXRlX0lOX1Byb2dyZXNzX0Jsb2NrX1RhYmxlX1BhZ2UoKTsKKwkJCX0KKyNlbmRpZgorCQl9CisJfSB3aGlsZSAod1Jlc3VsdCAhPSBQQVNTKQorCTsKKworI2lmIENNRF9ETUEKKwkvKiAuLi4gKi8KKyNlbmRpZgorCisJcmV0dXJuIHdSZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2ZsYXNoLmggYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9mbGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZDA1ODAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9mbGFzaC5oCkBAIC0wLDAgKzEsMTk4IEBACisvKgorICogTkFORCBGbGFzaCBDb250cm9sbGVyIERldmljZSBEcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgSW50ZWwgQ29ycG9yYXRpb24gYW5kIGl0cyBzdXBwbGllcnMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBfRkxBU0hfSU5URVJGQUNFXworI2RlZmluZSBfRkxBU0hfSU5URVJGQUNFXworCisjaW5jbHVkZSAiZmZzcG9ydC5oIgorI2luY2x1ZGUgInNwZWN0cmFzd2NvbmZpZy5oIgorCisjZGVmaW5lIE1BWF9CWVRFX1ZBTFVFICAgICAgICAweEZGCisjZGVmaW5lIE1BWF9XT1JEX1ZBTFVFICAgICAgICAweEZGRkYKKyNkZWZpbmUgTUFYX1UzMl9WQUxVRSAgICAgICAgMHhGRkZGRkZGRgorCisjZGVmaW5lIE1BWF9CTE9DS05PREVfVkFMVUUgICAgIDB4RkZGRkZGCisjZGVmaW5lIERJU0NBUkRfQkxPQ0sgICAgICAgICAgIDB4ODAwMDAwCisjZGVmaW5lIFNQQVJFX0JMT0NLICAgICAgICAgICAgIDB4NDAwMDAwCisjZGVmaW5lIEJBRF9CTE9DSyAgICAgICAgICAgICAgIDB4QzAwMDAwCisKKyNkZWZpbmUgVU5ISVRfQ0FDSEVfSVRFTSAgICAgICAgIDB4RkZGRgorCisjZGVmaW5lIE5BTkRfQ0FDSEVfSU5JVF9BRERSICAgIDB4ZmZmZmZmZmZmZmZmZmZmZlVMTAorCisjZGVmaW5lIElOX1BST0dSRVNTX0JMT0NLX1RBQkxFICAgMHgwMAorI2RlZmluZSBDVVJSRU5UX0JMT0NLX1RBQkxFICAgICAgIDB4MDEKKworI2RlZmluZSBCVFNJR19PRkZTRVQgICAoMCkKKyNkZWZpbmUgQlRTSUdfQllURVMgICAgKDUpCisjZGVmaW5lIEJUU0lHX0RFTFRBICAgICgzKQorCisjZGVmaW5lIE1BWF9SRUFEX0NPVU5URVIgIDB4MjcxMAorCisjZGVmaW5lIEZJUlNUX0JUX0lECQkoMSkKKyNkZWZpbmUgTEFTVF9CVF9JRCAgICAoMjU0KQorI2RlZmluZSBCVEJMT0NLX0lOVkFMICAodTMyKSgweEZGRkZGRkZGKQorCitzdHJ1Y3QgZGV2aWNlX2luZm9fdGFnIHsKKwl1MTYgd0RldmljZU1ha2VyOworCXUxNiB3RGV2aWNlSUQ7CisJdTMyIHdEZXZpY2VUeXBlOworCXUzMiB3U3BlY3RyYVN0YXJ0QmxvY2s7CisJdTMyIHdTcGVjdHJhRW5kQmxvY2s7CisJdTMyIHdUb3RhbEJsb2NrczsKKwl1MTYgd1BhZ2VzUGVyQmxvY2s7CisJdTE2IHdQYWdlU2l6ZTsKKwl1MTYgd1BhZ2VEYXRhU2l6ZTsKKwl1MTYgd1BhZ2VTcGFyZVNpemU7CisJdTE2IHdOdW1QYWdlU3BhcmVGbGFnOworCXUxNiB3RUNDQnl0ZXNQZXJTZWN0b3I7CisJdTMyIHdCbG9ja1NpemU7CisJdTMyIHdCbG9ja0RhdGFTaXplOworCXUzMiB3RGF0YUJsb2NrTnVtOworCXU4IGJQbGFuZU51bTsKKwl1MTYgd0RldmljZU1haW5BcmVhU2l6ZTsKKwl1MTYgd0RldmljZVNwYXJlQXJlYVNpemU7CisJdTE2IHdEZXZpY2VzQ29ubmVjdGVkOworCXUxNiB3RGV2aWNlV2lkdGg7CisJdTE2IHdIV1JldmlzaW9uOworCXUxNiB3SFdGZWF0dXJlczsKKworCXUxNiB3T05GSURldkZlYXR1cmVzOworCXUxNiB3T05GSU9wdENvbW1hbmRzOworCXUxNiB3T05GSVRpbWluZ01vZGU7CisJdTE2IHdPTkZJUGdtQ2FjaGVUaW1pbmdNb2RlOworCisJdTE2IE1MQ0RldmljZTsKKwl1MTYgd1NwYXJlU2tpcEJ5dGVzOworCisJdTggbkJpdHNJblBhZ2VOdW1iZXI7CisJdTggbkJpdHNJblBhZ2VEYXRhU2l6ZTsKKwl1OCBuQml0c0luQmxvY2tEYXRhU2l6ZTsKK307CisKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX2luZm9fdGFnIERldmljZUluZm87CisKKy8qIENhY2hlIGl0ZW0gZm9ybWF0ICovCitzdHJ1Y3QgZmxhc2hfY2FjaGVfaXRlbV90YWcgeworCXU2NCBhZGRyZXNzOworCXUxNiB1c2VfY250OworCXUxNiBjaGFuZ2VkOworCXU4ICpidWY7Cit9OworCitzdHJ1Y3QgZmxhc2hfY2FjaGVfdGFnIHsKKwl1MzIgY2FjaGVfaXRlbV9zaXplOyAvKiBTaXplIGluIGJ5dGVzIG9mIGVhY2ggY2FjaGUgaXRlbSAqLworCXUxNiBwYWdlc19wZXJfaXRlbTsgLyogSG93IG1hbnkgTkFORCBwYWdlcyBpbiBlYWNoIGNhY2hlIGl0ZW0gKi8KKwl1MTYgTFJVOyAvKiBOby4gb2YgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgY2FjaGUgaXRlbSAqLworCXN0cnVjdCBmbGFzaF9jYWNoZV9pdGVtX3RhZyBhcnJheVtDQUNIRV9JVEVNX05VTV07Cit9OworCisvKgorICpEYXRhIHN0cnVjdHVyZSBmb3IgZWFjaCBsaXN0IG5vZGUgb2YgdGhlIG1hbmFnbWVudCB0YWJsZQorICogdXNlZCBmb3IgdGhlIExldmVsIDIgQ2FjaGUuIEVhY2ggbm9kZSBtYXBzIG9uZSBsb2dpY2FsIE5BTkQgYmxvY2suCisgKi8KK3N0cnVjdCBzcGVjdHJhX2wyX2NhY2hlX2xpc3QgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl1MzIgbG9naWNhbF9ibGtfbnVtOyAvKiBMb2dpY2FsIGJsb2NrIG51bWJlciAqLworCXUzMiBwYWdlc19hcnJheVtdOyAvKiBQYWdlIG1hcCBhcnJheSBvZiB0aGlzIGxvZ2ljYWwgYmxvY2suCisJCQkgICAqIEFycmF5IGluZGV4IGlzIHRoZSBsb2dpY2FsIGJsb2NrIG51bWJlciwKKwkJCSAgICogYW5kIGZvciBldmVyeSBpdGVtIG9mIHRoaXMgYXJyeToKKwkJCSAgICogaGlnaCAxNiBiaXQgaXMgaW5kZXggb2YgdGhlIEwyIGNhY2hlIGJsb2NrIG51bSwKKwkJCSAgICogbG93IDE2IGJpdCBpcyB0aGUgcGh5IHBhZ2UgbnVtCisJCQkgICAqIG9mIHRoZSBhYm92ZSBMMiBjYWNoZSBibG9jay4KKwkJCSAgICogVGhpcyBhcnJheSB3aWxsIGJlIGttYWxsb2MgZHVyaW5nIHJ1biB0aW1lLgorCQkJICAgKi8KK307CisKK3N0cnVjdCBzcGVjdHJhX2wyX2NhY2hlX2luZm8geworCXUzMiBibGtfYXJyYXlbQkxLX05VTV9GT1JfTDJfQ0FDSEVdOworCXUxNiBjdXJfYmxrX2lkeDsgLyogaWR4IHRvIHRoZSBwaHkgYmxvY2sgbnVtYmVyIG9mIGN1cnJlbnQgdXNpbmcgKi8KKwl1MTYgY3VyX3BhZ2VfbnVtOyAvKiBwYWdlcyBudW1iZXIgb2YgY3VycmVudCB1c2luZyAqLworCXN0cnVjdCBzcGVjdHJhX2wyX2NhY2hlX2xpc3QgdGFibGU7IC8qIEZpcnN0IG5vZGUgb2YgdGhlIHRhYmxlICovCit9OworCisjZGVmaW5lIFJFU1RPUkVfQ0FDSEVfT05fQ0RNQV9DSEFJTl9GQUlMVVJFICAgIDEKKworI2lmIFJFU1RPUkVfQ0FDSEVfT05fQ0RNQV9DSEFJTl9GQUlMVVJFCitzdHJ1Y3QgZmxhc2hfY2FjaGVfbW9kX2l0ZW1fdGFnIHsKKwl1NjQgYWRkcmVzczsKKwl1OCBjaGFuZ2VkOworfTsKKworc3RydWN0IGZsYXNoX2NhY2hlX2RlbHRhX2xpc3RfdGFnIHsKKwl1OCBpdGVtOyAgLyogdXNlZCBjYWNoZSBpdGVtICovCisJc3RydWN0IGZsYXNoX2NhY2hlX21vZF9pdGVtX3RhZyBjYWNoZTsKK307CisjZW5kaWYKKworZXh0ZXJuIHN0cnVjdCBmbGFzaF9jYWNoZV90YWcgQ2FjaGU7CisKK2V4dGVybiB1OCAqYnVmX3JlYWRfcGFnZV9tYWluX3NwYXJlOworZXh0ZXJuIHU4ICpidWZfd3JpdGVfcGFnZV9tYWluX3NwYXJlOworZXh0ZXJuIHU4ICpidWZfcmVhZF9wYWdlX3NwYXJlOworZXh0ZXJuIHU4ICpidWZfZ2V0X2JhZF9ibG9jazsKK2V4dGVybiB1OCAqY2RtYV9kZXNjX2J1ZjsKK2V4dGVybiB1OCAqbWVtY3BfZGVzY19idWY7CisKKy8qIHN0cnV0dXJlIHVzZWQgZm9yIEluZGVudGZ5RGV2aWNlIGZ1bmN0aW9uICovCitzdHJ1Y3Qgc3BlY3RyYV9pbmRlbnRmeV9kZXZfdGFnIHsKKwl1MzIgTnVtQmxvY2tzOworCXUxNiBQYWdlc1BlckJsb2NrOworCXUxNiBQYWdlRGF0YVNpemU7CisJdTE2IHdFQ0NCeXRlc1BlclNlY3RvcjsKKwl1MzIgd0RhdGFCbG9ja051bTsKK307CisKK2ludCBHTE9CX0ZUTF9GbGFzaF9Jbml0KHZvaWQpOworaW50IEdMT0JfRlRMX0ZsYXNoX1JlbGVhc2Uodm9pZCk7CisvKnZvaWQgR0xPQl9GVExfRXJhc2VfRmxhc2godm9pZCk7Ki8KK2ludCBHTE9CX0ZUTF9CbG9ja19FcmFzZSh1NjQgYmxvY2tfYWRkcik7CitpbnQgR0xPQl9GVExfSXNfQmFkQmxvY2sodTMyIGJsb2NrX251bSk7CitpbnQgR0xPQl9GVExfSWRlbnRpZnlEZXZpY2Uoc3RydWN0IHNwZWN0cmFfaW5kZW50ZnlfZGV2X3RhZyAqZGV2X2RhdGEpOworaW50IEdMT0JfRlRMX0V2ZW50X1N0YXR1cyhpbnQgKik7Cit1MTYgZ2xvYl9mdGxfZXhlY3V0ZV9jbWRzKHZvaWQpOworCisvKmludCBGVExfUmVhZF9EaXN0dXJiYW5jZShBRERSRVNTVFlQRSBkd0Jsb2NrQWRkcik7Ki8KK2ludCBGVExfUmVhZF9EaXN0dXJiYW5jZSh1MzIgZHdCbG9ja0FkZHIpOworCisvKkZsYXNoIHIvdyBiYXNlZCBvbiBjYWNoZSovCitpbnQgR0xPQl9GVExfUGFnZV9SZWFkKHU4ICpyZWFkX2RhdGEsIHU2NCBwYWdlX2FkZHIpOworaW50IEdMT0JfRlRMX1BhZ2VfV3JpdGUodTggKndyaXRlX2RhdGEsIHU2NCBwYWdlX2FkZHIpOworaW50IEdMT0JfRlRMX1dlYXJfTGV2ZWxpbmcodm9pZCk7CitpbnQgR0xPQl9GVExfRmxhc2hfRm9ybWF0KHZvaWQpOworaW50IEdMT0JfRlRMX0luaXQodm9pZCk7CitpbnQgR0xPQl9GVExfRmx1c2hfQ2FjaGUodm9pZCk7CitpbnQgR0xPQl9GVExfR2FyYmFnZV9Db2xsZWN0aW9uKHZvaWQpOworaW50IEdMT0JfRlRMX0JUX0dhcmJhZ2VfQ29sbGVjdGlvbih2b2lkKTsKK3ZvaWQgR0xPQl9GVExfQ2FjaGVfUmVsZWFzZSh2b2lkKTsKK3U4ICpnZXRfYmxrX3RhYmxlX3N0YXJ0X2FkZHIodm9pZCk7Cit1OCAqZ2V0X3dlYXJfbGV2ZWxpbmdfdGFibGVfc3RhcnRfYWRkcih2b2lkKTsKK3Vuc2lnbmVkIGxvbmcgZ2V0X2Jsa190YWJsZV9sZW4odm9pZCk7Cit1bnNpZ25lZCBsb25nIGdldF93ZWFyX2xldmVsaW5nX3RhYmxlX2xlbih2b2lkKTsKKworI2lmIERFQlVHX0JORFJZCit2b2lkIGRlYnVnX2JvdW5kYXJ5X2xpbmVub19lcnJvcihpbnQgY2hubCwgaW50IGxpbWl0LCBpbnQgbm8sIGludCBsaW5lbm8sCisJCQkJY2hhciAqZmlsZW5hbWUpOworI2RlZmluZSBkZWJ1Z19ib3VuZGFyeV9lcnJvcihjaG5sLCBsaW1pdCwgbm8pIGRlYnVnX2JvdW5kYXJ5X2xpbmVub19lcnJvcihjaG5sLFwKKwkJCQkJCWxpbWl0LCBubywgX19MSU5FX18sIF9fRklMRV9fKQorI2Vsc2UKKyNkZWZpbmUgZGVidWdfYm91bmRhcnlfZXJyb3IoY2hubCwgbGltaXQsIG5vKSA7CisjZW5kaWYKKworI2VuZGlmIC8qX0ZMQVNIX0lOVEVSRkFDRV8qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvbGxkLmMgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9sbGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzNiOTc2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvbGxkLmMKQEAgLTAsMCArMSwzMzkgQEAKKy8qCisgKiBOQU5EIEZsYXNoIENvbnRyb2xsZXIgRGV2aWNlIERyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbiBhbmQgaXRzIHN1cHBsaWVycy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAic3BlY3RyYXN3Y29uZmlnLmgiCisjaW5jbHVkZSAiZmZzcG9ydC5oIgorI2luY2x1ZGUgImZmc2RlZnMuaCIKKyNpbmNsdWRlICJsbGQuaCIKKyNpbmNsdWRlICJsbGRfbmFuZC5oIgorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KKyNpZiBGTEFTSF9FTVUJCS8qIHZlY3RvciBhbGwgdGhlIExMRCBjYWxscyB0byB0aGUgTExEX0VNVSBjb2RlICovCisjaW5jbHVkZSAibGxkX2VtdS5oIgorI2luY2x1ZGUgImxsZF9jZG1hLmgiCisKKy8qIGNvbW1vbiBmdW5jdGlvbnM6ICovCit1MTYgR0xPQl9MTERfRmxhc2hfUmVzZXQodm9pZCkKK3sKKwlyZXR1cm4gZW11X0ZsYXNoX1Jlc2V0KCk7Cit9CisKK3UxNiBHTE9CX0xMRF9SZWFkX0RldmljZV9JRCh2b2lkKQoreworCXJldHVybiBlbXVfUmVhZF9EZXZpY2VfSUQoKTsKK30KKworaW50IEdMT0JfTExEX0ZsYXNoX1JlbGVhc2Uodm9pZCkKK3sKKwlyZXR1cm4gZW11X0ZsYXNoX1JlbGVhc2UoKTsKK30KKwordTE2IEdMT0JfTExEX0ZsYXNoX0luaXQodm9pZCkKK3sKKwlyZXR1cm4gZW11X0ZsYXNoX0luaXQoKTsKK30KKwordTE2IEdMT0JfTExEX0VyYXNlX0Jsb2NrKHUzMiBibG9ja19hZGQpCit7CisJcmV0dXJuIGVtdV9FcmFzZV9CbG9jayhibG9ja19hZGQpOworfQorCit1MTYgR0xPQl9MTERfV3JpdGVfUGFnZV9NYWluKHU4ICp3cml0ZV9kYXRhLCB1MzIgYmxvY2ssIHUxNiBQYWdlLAorCQkJCXUxNiBQYWdlQ291bnQpCit7CisJcmV0dXJuIGVtdV9Xcml0ZV9QYWdlX01haW4od3JpdGVfZGF0YSwgYmxvY2ssIFBhZ2UsIFBhZ2VDb3VudCk7Cit9CisKK3UxNiBHTE9CX0xMRF9SZWFkX1BhZ2VfTWFpbih1OCAqcmVhZF9kYXRhLCB1MzIgYmxvY2ssIHUxNiBQYWdlLAorCQkJICAgICAgIHUxNiBQYWdlQ291bnQpCit7CisJcmV0dXJuIGVtdV9SZWFkX1BhZ2VfTWFpbihyZWFkX2RhdGEsIGJsb2NrLCBQYWdlLCBQYWdlQ291bnQpOworfQorCit1MTYgR0xPQl9MTERfUmVhZF9QYWdlX01haW5fUG9sbGluZyh1OCAqcmVhZF9kYXRhLAorCQkJdTMyIGJsb2NrLCB1MTYgcGFnZSwgdTE2IHBhZ2VfY291bnQpCit7CisJcmV0dXJuIGVtdV9SZWFkX1BhZ2VfTWFpbihyZWFkX2RhdGEsIGJsb2NrLCBwYWdlLCBwYWdlX2NvdW50KTsKK30KKwordTE2IEdMT0JfTExEX1dyaXRlX1BhZ2VfTWFpbl9TcGFyZSh1OCAqd3JpdGVfZGF0YSwgdTMyIGJsb2NrLAorCQkJCSAgICAgIHUxNiBQYWdlLCB1MTYgUGFnZUNvdW50KQoreworCXJldHVybiBlbXVfV3JpdGVfUGFnZV9NYWluX1NwYXJlKHdyaXRlX2RhdGEsIGJsb2NrLCBQYWdlLCBQYWdlQ291bnQpOworfQorCit1MTYgR0xPQl9MTERfUmVhZF9QYWdlX01haW5fU3BhcmUodTggKnJlYWRfZGF0YSwgdTMyIGJsb2NrLAorCQkJCSAgICAgdTE2IFBhZ2UsIHUxNiBQYWdlQ291bnQpCit7CisJcmV0dXJuIGVtdV9SZWFkX1BhZ2VfTWFpbl9TcGFyZShyZWFkX2RhdGEsIGJsb2NrLCBQYWdlLCBQYWdlQ291bnQpOworfQorCit1MTYgR0xPQl9MTERfV3JpdGVfUGFnZV9TcGFyZSh1OCAqd3JpdGVfZGF0YSwgdTMyIGJsb2NrLCB1MTYgUGFnZSwKKwkJCQkgdTE2IFBhZ2VDb3VudCkKK3sKKwlyZXR1cm4gZW11X1dyaXRlX1BhZ2VfU3BhcmUod3JpdGVfZGF0YSwgYmxvY2ssIFBhZ2UsIFBhZ2VDb3VudCk7Cit9CisKK3UxNiBHTE9CX0xMRF9SZWFkX1BhZ2VfU3BhcmUodTggKnJlYWRfZGF0YSwgdTMyIGJsb2NrLCB1MTYgUGFnZSwKKwkJCQl1MTYgUGFnZUNvdW50KQoreworCXJldHVybiBlbXVfUmVhZF9QYWdlX1NwYXJlKHJlYWRfZGF0YSwgYmxvY2ssIFBhZ2UsIFBhZ2VDb3VudCk7Cit9CisKK3UxNiAgR0xPQl9MTERfR2V0X0JhZF9CbG9jayh1MzIgYmxvY2spCit7CisgICAgcmV0dXJuICBlbXVfR2V0X0JhZF9CbG9jayhibG9jayk7Cit9CisKKyNlbmRpZiAvKiBGTEFTSF9FTVUgKi8KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCisjaWYgRkxBU0hfTVRECQkvKiB2ZWN0b3IgYWxsIHRoZSBMTEQgY2FsbHMgdG8gdGhlIExMRF9NVEQgY29kZSAqLworI2luY2x1ZGUgImxsZF9tdGQuaCIKKyNpbmNsdWRlICJsbGRfY2RtYS5oIgorCisvKiBjb21tb24gZnVuY3Rpb25zOiAqLwordTE2IEdMT0JfTExEX0ZsYXNoX1Jlc2V0KHZvaWQpCit7CisJcmV0dXJuIG10ZF9GbGFzaF9SZXNldCgpOworfQorCit1MTYgR0xPQl9MTERfUmVhZF9EZXZpY2VfSUQodm9pZCkKK3sKKwlyZXR1cm4gbXRkX1JlYWRfRGV2aWNlX0lEKCk7Cit9CisKK2ludCBHTE9CX0xMRF9GbGFzaF9SZWxlYXNlKHZvaWQpCit7CisJcmV0dXJuIG10ZF9GbGFzaF9SZWxlYXNlKCk7Cit9CisKK3UxNiBHTE9CX0xMRF9GbGFzaF9Jbml0KHZvaWQpCit7CisJcmV0dXJuIG10ZF9GbGFzaF9Jbml0KCk7Cit9CisKK3UxNiBHTE9CX0xMRF9FcmFzZV9CbG9jayh1MzIgYmxvY2tfYWRkKQoreworCXJldHVybiBtdGRfRXJhc2VfQmxvY2soYmxvY2tfYWRkKTsKK30KKwordTE2IEdMT0JfTExEX1dyaXRlX1BhZ2VfTWFpbih1OCAqd3JpdGVfZGF0YSwgdTMyIGJsb2NrLCB1MTYgUGFnZSwKKwkJCQl1MTYgUGFnZUNvdW50KQoreworCXJldHVybiBtdGRfV3JpdGVfUGFnZV9NYWluKHdyaXRlX2RhdGEsIGJsb2NrLCBQYWdlLCBQYWdlQ291bnQpOworfQorCit1MTYgR0xPQl9MTERfUmVhZF9QYWdlX01haW4odTggKnJlYWRfZGF0YSwgdTMyIGJsb2NrLCB1MTYgUGFnZSwKKwkJCSAgICAgICB1MTYgUGFnZUNvdW50KQoreworCXJldHVybiBtdGRfUmVhZF9QYWdlX01haW4ocmVhZF9kYXRhLCBibG9jaywgUGFnZSwgUGFnZUNvdW50KTsKK30KKwordTE2IEdMT0JfTExEX1JlYWRfUGFnZV9NYWluX1BvbGxpbmcodTggKnJlYWRfZGF0YSwKKwkJCXUzMiBibG9jaywgdTE2IHBhZ2UsIHUxNiBwYWdlX2NvdW50KQoreworCXJldHVybiBtdGRfUmVhZF9QYWdlX01haW4ocmVhZF9kYXRhLCBibG9jaywgcGFnZSwgcGFnZV9jb3VudCk7Cit9CisKK3UxNiBHTE9CX0xMRF9Xcml0ZV9QYWdlX01haW5fU3BhcmUodTggKndyaXRlX2RhdGEsIHUzMiBibG9jaywKKwkJCQkgICAgICB1MTYgUGFnZSwgdTE2IFBhZ2VDb3VudCkKK3sKKwlyZXR1cm4gbXRkX1dyaXRlX1BhZ2VfTWFpbl9TcGFyZSh3cml0ZV9kYXRhLCBibG9jaywgUGFnZSwgUGFnZUNvdW50KTsKK30KKwordTE2IEdMT0JfTExEX1JlYWRfUGFnZV9NYWluX1NwYXJlKHU4ICpyZWFkX2RhdGEsIHUzMiBibG9jaywKKwkJCQkgICAgIHUxNiBQYWdlLCB1MTYgUGFnZUNvdW50KQoreworCXJldHVybiBtdGRfUmVhZF9QYWdlX01haW5fU3BhcmUocmVhZF9kYXRhLCBibG9jaywgUGFnZSwgUGFnZUNvdW50KTsKK30KKwordTE2IEdMT0JfTExEX1dyaXRlX1BhZ2VfU3BhcmUodTggKndyaXRlX2RhdGEsIHUzMiBibG9jaywgdTE2IFBhZ2UsCisJCQkJIHUxNiBQYWdlQ291bnQpCit7CisJcmV0dXJuIG10ZF9Xcml0ZV9QYWdlX1NwYXJlKHdyaXRlX2RhdGEsIGJsb2NrLCBQYWdlLCBQYWdlQ291bnQpOworfQorCit1MTYgR0xPQl9MTERfUmVhZF9QYWdlX1NwYXJlKHU4ICpyZWFkX2RhdGEsIHUzMiBibG9jaywgdTE2IFBhZ2UsCisJCQkJdTE2IFBhZ2VDb3VudCkKK3sKKwlyZXR1cm4gbXRkX1JlYWRfUGFnZV9TcGFyZShyZWFkX2RhdGEsIGJsb2NrLCBQYWdlLCBQYWdlQ291bnQpOworfQorCit1MTYgIEdMT0JfTExEX0dldF9CYWRfQmxvY2sodTMyIGJsb2NrKQoreworICAgIHJldHVybiAgbXRkX0dldF9CYWRfQmxvY2soYmxvY2spOworfQorCisjZW5kaWYgLyogRkxBU0hfTVREICovCisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCisjaWYgRkxBU0hfTkFORAkvKiB2ZWN0b3IgYWxsIHRoZSBMTEQgY2FsbHMgdG8gdGhlIE5BTkQgY29udHJvbGxlciBjb2RlICovCisjaW5jbHVkZSAibGxkX25hbmQuaCIKKyNpbmNsdWRlICJsbGRfY2RtYS5oIgorI2luY2x1ZGUgImZsYXNoLmgiCisKKy8qIGNvbW1vbiBmdW5jdGlvbnMgZm9yIExMRF9OQU5EICovCit2b2lkIEdMT0JfTExEX0VDQ19Db250cm9sKGludCBlbmFibGUpCit7CisJTkFORF9FQ0NfQ3RybChlbmFibGUpOworfQorCisvKiBjb21tb24gZnVuY3Rpb25zIGZvciBMTERfTkFORCAqLwordTE2IEdMT0JfTExEX0ZsYXNoX1Jlc2V0KHZvaWQpCit7CisJcmV0dXJuIE5BTkRfRmxhc2hfUmVzZXQoKTsKK30KKwordTE2IEdMT0JfTExEX1JlYWRfRGV2aWNlX0lEKHZvaWQpCit7CisJcmV0dXJuIE5BTkRfUmVhZF9EZXZpY2VfSUQoKTsKK30KKwordTE2IEdMT0JfTExEX1VubG9ja0FycmF5QWxsKHZvaWQpCit7CisJcmV0dXJuIE5BTkRfVW5sb2NrQXJyYXlBbGwoKTsKK30KKwordTE2IEdMT0JfTExEX0ZsYXNoX0luaXQodm9pZCkKK3sKKwlyZXR1cm4gTkFORF9GbGFzaF9Jbml0KCk7Cit9CisKK2ludCBHTE9CX0xMRF9GbGFzaF9SZWxlYXNlKHZvaWQpCit7CisJcmV0dXJuIG5hbmRfcmVsZWFzZV9zcGVjdHJhKCk7Cit9CisKK3UxNiBHTE9CX0xMRF9FcmFzZV9CbG9jayh1MzIgYmxvY2tfYWRkKQoreworCXJldHVybiBOQU5EX0VyYXNlX0Jsb2NrKGJsb2NrX2FkZCk7Cit9CisKKwordTE2IEdMT0JfTExEX1dyaXRlX1BhZ2VfTWFpbih1OCAqd3JpdGVfZGF0YSwgdTMyIGJsb2NrLCB1MTYgUGFnZSwKKwkJCQl1MTYgUGFnZUNvdW50KQoreworCXJldHVybiBOQU5EX1dyaXRlX1BhZ2VfTWFpbih3cml0ZV9kYXRhLCBibG9jaywgUGFnZSwgUGFnZUNvdW50KTsKK30KKwordTE2IEdMT0JfTExEX1JlYWRfUGFnZV9NYWluKHU4ICpyZWFkX2RhdGEsIHUzMiBibG9jaywgdTE2IHBhZ2UsCisJCQkgICAgICAgdTE2IHBhZ2VfY291bnQpCit7CisJaWYgKHBhZ2VfY291bnQgPT0gMSkgLyogVXNpbmcgcG9sbGluZyB0byBpbXByb3ZlIHJlYWQgc3BlZWQgKi8KKwkJcmV0dXJuIE5BTkRfUmVhZF9QYWdlX01haW5fUG9sbGluZyhyZWFkX2RhdGEsIGJsb2NrLCBwYWdlLCAxKTsKKwllbHNlCisJCXJldHVybiBOQU5EX1JlYWRfUGFnZV9NYWluKHJlYWRfZGF0YSwgYmxvY2ssIHBhZ2UsIHBhZ2VfY291bnQpOworfQorCit1MTYgR0xPQl9MTERfUmVhZF9QYWdlX01haW5fUG9sbGluZyh1OCAqcmVhZF9kYXRhLAorCQkJdTMyIGJsb2NrLCB1MTYgcGFnZSwgdTE2IHBhZ2VfY291bnQpCit7CisJcmV0dXJuIE5BTkRfUmVhZF9QYWdlX01haW5fUG9sbGluZyhyZWFkX2RhdGEsCisJCQlibG9jaywgcGFnZSwgcGFnZV9jb3VudCk7Cit9CisKK3UxNiBHTE9CX0xMRF9Xcml0ZV9QYWdlX01haW5fU3BhcmUodTggKndyaXRlX2RhdGEsIHUzMiBibG9jaywKKwkJCQkgICAgICB1MTYgUGFnZSwgdTE2IFBhZ2VDb3VudCkKK3sKKwlyZXR1cm4gTkFORF9Xcml0ZV9QYWdlX01haW5fU3BhcmUod3JpdGVfZGF0YSwgYmxvY2ssIFBhZ2UsIFBhZ2VDb3VudCk7Cit9CisKK3UxNiBHTE9CX0xMRF9Xcml0ZV9QYWdlX1NwYXJlKHU4ICp3cml0ZV9kYXRhLCB1MzIgYmxvY2ssIHUxNiBQYWdlLAorCQkJCSB1MTYgUGFnZUNvdW50KQoreworCXJldHVybiBOQU5EX1dyaXRlX1BhZ2VfU3BhcmUod3JpdGVfZGF0YSwgYmxvY2ssIFBhZ2UsIFBhZ2VDb3VudCk7Cit9CisKK3UxNiBHTE9CX0xMRF9SZWFkX1BhZ2VfTWFpbl9TcGFyZSh1OCAqcmVhZF9kYXRhLCB1MzIgYmxvY2ssCisJCQkJICAgICB1MTYgcGFnZSwgdTE2IHBhZ2VfY291bnQpCit7CisJcmV0dXJuIE5BTkRfUmVhZF9QYWdlX01haW5fU3BhcmUocmVhZF9kYXRhLCBibG9jaywgcGFnZSwgcGFnZV9jb3VudCk7Cit9CisKK3UxNiBHTE9CX0xMRF9SZWFkX1BhZ2VfU3BhcmUodTggKnJlYWRfZGF0YSwgdTMyIGJsb2NrLCB1MTYgUGFnZSwKKwkJCQl1MTYgUGFnZUNvdW50KQoreworCXJldHVybiBOQU5EX1JlYWRfUGFnZV9TcGFyZShyZWFkX2RhdGEsIGJsb2NrLCBQYWdlLCBQYWdlQ291bnQpOworfQorCit1MTYgIEdMT0JfTExEX0dldF9CYWRfQmxvY2sodTMyIGJsb2NrKQoreworCXJldHVybiAgTkFORF9HZXRfQmFkX0Jsb2NrKGJsb2NrKTsKK30KKworI2lmIENNRF9ETUEKK3UxNiBHTE9CX0xMRF9FdmVudF9TdGF0dXModm9pZCkKK3sKKwlyZXR1cm4gQ0RNQV9FdmVudF9TdGF0dXMoKTsKK30KKwordTE2IGdsb2JfbGxkX2V4ZWN1dGVfY21kcyh2b2lkKQoreworCXJldHVybiBDRE1BX0V4ZWN1dGVfQ01EcygpOworfQorCit1MTYgR0xPQl9MTERfTWVtQ29weV9DTUQodTggKmRlc3QsIHU4ICpzcmMsCisJCQl1MzIgQnl0ZUNvdW50LCB1MTYgZmxhZykKK3sKKwkvKiBSZXBsYWNlIHRoZSBoYXJkd2FyZSBtZW1jb3B5IHdpdGggc29mdHdhcmUgbWVtY3B5IGZ1bmN0aW9uICovCisJaWYgKENETUFfRXhlY3V0ZV9DTURzKCkpCisJCXJldHVybiBGQUlMOworCW1lbWNweShkZXN0LCBzcmMsIEJ5dGVDb3VudCk7CisJcmV0dXJuIFBBU1M7CisKKwkvKiByZXR1cm4gQ0RNQV9NZW1Db3B5X0NNRChkZXN0LCBzcmMsIEJ5dGVDb3VudCwgZmxhZyk7ICovCit9CisKK3UxNiBHTE9CX0xMRF9FcmFzZV9CbG9ja19jZG1hKHUzMiBibG9jaywgdTE2IGZsYWdzKQoreworCXJldHVybiBDRE1BX0RhdGFfQ01EKEVSQVNFX0NNRCwgMCwgYmxvY2ssIDAsIDAsIGZsYWdzKTsKK30KKwordTE2IEdMT0JfTExEX1dyaXRlX1BhZ2VfTWFpbl9jZG1hKHU4ICpkYXRhLCB1MzIgYmxvY2ssIHUxNiBwYWdlLCB1MTYgY291bnQpCit7CisJcmV0dXJuIENETUFfRGF0YV9DTUQoV1JJVEVfTUFJTl9DTUQsIGRhdGEsIGJsb2NrLCBwYWdlLCBjb3VudCwgMCk7Cit9CisKK3UxNiBHTE9CX0xMRF9SZWFkX1BhZ2VfTWFpbl9jZG1hKHU4ICpkYXRhLCB1MzIgYmxvY2ssIHUxNiBwYWdlLAorCQkJCXUxNiBjb3VudCwgdTE2IGZsYWdzKQoreworCXJldHVybiBDRE1BX0RhdGFfQ01EKFJFQURfTUFJTl9DTUQsIGRhdGEsIGJsb2NrLCBwYWdlLCBjb3VudCwgZmxhZ3MpOworfQorCit1MTYgR0xPQl9MTERfV3JpdGVfUGFnZV9NYWluX1NwYXJlX2NkbWEodTggKmRhdGEsIHUzMiBibG9jaywgdTE2IHBhZ2UsCisJCQkJCXUxNiBjb3VudCwgdTE2IGZsYWdzKQoreworCXJldHVybiBDRE1BX0RhdGFfQ01EKFdSSVRFX01BSU5fU1BBUkVfQ01ELAorCQkJZGF0YSwgYmxvY2ssIHBhZ2UsIGNvdW50LCBmbGFncyk7Cit9CisKK3UxNiBHTE9CX0xMRF9SZWFkX1BhZ2VfTWFpbl9TcGFyZV9jZG1hKHU4ICpkYXRhLAorCQkJCXUzMiBibG9jaywgdTE2IHBhZ2UsIHUxNiBjb3VudCkKK3sKKwlyZXR1cm4gQ0RNQV9EYXRhX0NNRChSRUFEX01BSU5fU1BBUkVfQ01ELCBkYXRhLCBibG9jaywgcGFnZSwgY291bnQsCisJCQlMTERfQ01EX0ZMQUdfTU9ERV9DRE1BKTsKK30KKworI2VuZGlmIC8qIENNRF9ETUEgKi8KKyNlbmRpZiAvKiBGTEFTSF9OQU5EICovCisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworCisvKiBlbmQgb2YgTExELmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2xsZC5oIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvbGxkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM3MzhlMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2xsZC5oCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogTkFORCBGbGFzaCBDb250cm9sbGVyIERldmljZSBEcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgSW50ZWwgQ29ycG9yYXRpb24gYW5kIGl0cyBzdXBwbGllcnMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKi8KKworCisKKyNpZm5kZWYgX0xMRF8KKyNkZWZpbmUgX0xMRF8KKworI2luY2x1ZGUgImZmc3BvcnQuaCIKKyNpbmNsdWRlICJzcGVjdHJhc3djb25maWcuaCIKKyNpbmNsdWRlICJmbGFzaC5oIgorCisjZGVmaW5lIEdPT0RfQkxPQ0sgMAorI2RlZmluZSBERUZFQ1RJVkVfQkxPQ0sgMQorI2RlZmluZSBSRUFEX0VSUk9SIDIKKworI2RlZmluZSBDTEtfWCAgNQorI2RlZmluZSBDTEtfTVVMVEkgNAorCisvKiBUeXBlZGVmcyAqLworCisvKiAgcHJvdG90eXBlczogQVBJIGZvciBMTEQgKi8KKy8qIEN1cnJlbnRseSwgV3JpdGVfUGFnZV9NYWluCisgKiAJCQkgIE1lbUNvcHkKKyAqIAkJCSAgUmVhZF9QYWdlX01haW5fU3BhcmUKKyAqIGRvIG5vdCBoYXZlIGZsYWcgYmVjYXVzZSB0aGV5IHdlcmUgbm90IGltcGxlbWVudGVkIHByaW9yIHRvIHRoaXMKKyAqIFRoZXkgYXJlIG5vdCBiZWluZyBhZGRlZCB0byBrZWVwIGNoYW5nZXMgdG8gYSBtaW5pbXVtIGZvciBub3cuCisgKiBDdXJyZW50bHksIHRoZXkgYXJlIG5vdCByZXF1aXJlZCAob25seSByZXFkIGZvciBXcl9QX01fUy4pCisgKiBMYXRlciBvbiwgdGhlc2UgTkVFRCB0byBiZSBjaGFuZ2VkLgorICovCisKK2V4dGVybiB2b2lkIEdMT0JfTExEX0VDQ19Db250cm9sKGludCBlbmFibGUpOworCitleHRlcm4gdTE2IEdMT0JfTExEX0ZsYXNoX1Jlc2V0KHZvaWQpOworCitleHRlcm4gdTE2IEdMT0JfTExEX1JlYWRfRGV2aWNlX0lEKHZvaWQpOworCitleHRlcm4gdTE2IEdMT0JfTExEX1VubG9ja0FycmF5QWxsKHZvaWQpOworCitleHRlcm4gdTE2IEdMT0JfTExEX0ZsYXNoX0luaXQodm9pZCk7CisKK2V4dGVybiBpbnQgR0xPQl9MTERfRmxhc2hfUmVsZWFzZSh2b2lkKTsKKworZXh0ZXJuIHUxNiBHTE9CX0xMRF9FcmFzZV9CbG9jayh1MzIgYmxvY2tfYWRkKTsKKworZXh0ZXJuIHUxNiBHTE9CX0xMRF9Xcml0ZV9QYWdlX01haW4odTggKndyaXRlX2RhdGEsCisJdTMyIGJsb2NrLCB1MTYgUGFnZSwgdTE2IFBhZ2VDb3VudCk7CisKK2V4dGVybiB1MTYgR0xPQl9MTERfUmVhZF9QYWdlX01haW4odTggKnJlYWRfZGF0YSwKKwl1MzIgYmxvY2ssIHUxNiBwYWdlLCB1MTYgcGFnZV9jb3VudCk7CisKK2V4dGVybiB1MTYgR0xPQl9MTERfUmVhZF9QYWdlX01haW5fUG9sbGluZyh1OCAqcmVhZF9kYXRhLAorCXUzMiBibG9jaywgdTE2IHBhZ2UsIHUxNiBwYWdlX2NvdW50KTsKKworZXh0ZXJuIHUxNiBHTE9CX0xMRF9Xcml0ZV9QYWdlX01haW5fU3BhcmUodTggKndyaXRlX2RhdGEsCisJdTMyIGJsb2NrLCB1MTYgUGFnZSwgdTE2IFBhZ2VDb3VudCk7CisKK2V4dGVybiB1MTYgR0xPQl9MTERfV3JpdGVfUGFnZV9TcGFyZSh1OCAqd3JpdGVfZGF0YSwKKwl1MzIgYmxvY2ssIHUxNiBQYWdlLCB1MTYgUGFnZUNvdW50KTsKKworZXh0ZXJuIHUxNiBHTE9CX0xMRF9SZWFkX1BhZ2VfTWFpbl9TcGFyZSh1OCAqcmVhZF9kYXRhLAorCXUzMiBibG9jaywgdTE2IHBhZ2UsIHUxNiBwYWdlX2NvdW50KTsKKworZXh0ZXJuIHUxNiBHTE9CX0xMRF9SZWFkX1BhZ2VfU3BhcmUodTggKnJlYWRfZGF0YSwKKwl1MzIgYmxvY2ssIHUxNiBQYWdlLCB1MTYgUGFnZUNvdW50KTsKKworZXh0ZXJuIHUxNiAgR0xPQl9MTERfR2V0X0JhZF9CbG9jayh1MzIgYmxvY2spOworCitleHRlcm4gdTE2IEdMT0JfTExEX0V2ZW50X1N0YXR1cyh2b2lkKTsKKworZXh0ZXJuIHUxNiBHTE9CX0xMRF9NZW1Db3B5X0NNRCh1OCAqZGVzdCwgdTggKnNyYywgdTMyIEJ5dGVDb3VudCwgdTE2IGZsYWcpOworCitleHRlcm4gdTE2IGdsb2JfbGxkX2V4ZWN1dGVfY21kcyh2b2lkKTsKKworZXh0ZXJuIHUxNiBHTE9CX0xMRF9FcmFzZV9CbG9ja19jZG1hKHUzMiBibG9jaywgdTE2IGZsYWdzKTsKKworZXh0ZXJuIHUxNiBHTE9CX0xMRF9Xcml0ZV9QYWdlX01haW5fY2RtYSh1OCAqZGF0YSwKKwl1MzIgYmxvY2ssIHUxNiBwYWdlLCB1MTYgY291bnQpOworCitleHRlcm4gdTE2IEdMT0JfTExEX1JlYWRfUGFnZV9NYWluX2NkbWEodTggKmRhdGEsCisJdTMyIGJsb2NrLCB1MTYgcGFnZSwgdTE2IGNvdW50LCB1MTYgZmxhZ3MpOworCitleHRlcm4gdTE2IEdMT0JfTExEX1dyaXRlX1BhZ2VfTWFpbl9TcGFyZV9jZG1hKHU4ICpkYXRhLAorCXUzMiBibG9jaywgdTE2IHBhZ2UsIHUxNiBjb3VudCwgdTE2IGZsYWdzKTsKKworZXh0ZXJuIHUxNiBHTE9CX0xMRF9SZWFkX1BhZ2VfTWFpbl9TcGFyZV9jZG1hKHU4ICpkYXRhLAorCXUzMiBibG9jaywgdTE2IHBhZ2UsIHUxNiBjb3VudCk7CisKKyNkZWZpbmUgTExEX0NNRF9GTEFHX09SREVSX0JFRk9SRV9SRVNUCQkoMHgxKQorI2RlZmluZSBMTERfQ01EX0ZMQUdfTU9ERV9DRE1BCQkJKDB4OCkKKworCisjZW5kaWYgLypfTExEXyAqLworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2xsZF9jZG1hLmMgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9sbGRfY2RtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZTc2MTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9sbGRfY2RtYS5jCkBAIC0wLDAgKzEsOTEwIEBACisvKgorICogTkFORCBGbGFzaCBDb250cm9sbGVyIERldmljZSBEcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgSW50ZWwgQ29ycG9yYXRpb24gYW5kIGl0cyBzdXBwbGllcnMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSAic3BlY3RyYXN3Y29uZmlnLmgiCisjaW5jbHVkZSAibGxkLmgiCisjaW5jbHVkZSAibGxkX25hbmQuaCIKKyNpbmNsdWRlICJsbGRfY2RtYS5oIgorI2luY2x1ZGUgImxsZF9lbXUuaCIKKyNpbmNsdWRlICJmbGFzaC5oIgorI2luY2x1ZGUgIm5hbmRfcmVncy5oIgorCisjZGVmaW5lIE1BWF9QRU5ESU5HX0NNRFMgICAgNAorI2RlZmluZSBNT0RFXzAyICAgICAgICAgICAgICgweDIgPDwgMjYpCisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBDRE1BX0RhdGFfQ21kCisqIElucHV0czogICBjbWQgY29kZSAoYWxpZ25lZCBmb3IgaHcpCisqICAgICAgICAgICAgICAgZGF0YTogcG9pbnRlciB0byBzb3VyY2Ugb3IgZGVzdGluYXRpb24KKyogICAgICAgICAgICAgICBibG9jazogYmxvY2sgYWRkcmVzcworKiAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UgYWRkcmVzcworKiAgICAgICAgICAgICAgIG51bTogbnVtIHBhZ2VzIHRvIHRyYW5zZmVyCisqIE91dHB1dHM6ICAgICAgUEFTUworKiBEZXNjcmlwdGlvbjogIFRoaXMgZnVuY3Rpb24gdGFrZXMgdGhlIHBhcmFtZXRlcnMgYW5kIHB1dHMgdGhlbQorKiAgICAgICAgICAgICAgICAgICBpbnRvIHRoZSAicGVuZGluZyBjb21tYW5kcyIgYXJyYXkuCisqICAgICAgICAgICAgICAgSXQgZG9lcyBub3QgcGFyc2Ugb3IgdmFsaWRhdGUgdGhlIHBhcmFtZXRlcnMuCisqICAgICAgICAgICAgICAgVGhlIGFycmF5IGluZGV4IGlzIHNhbWUgYXMgdGhlIHRhZy4KKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCit1MTYgQ0RNQV9EYXRhX0NNRCh1OCBjbWQsIHU4ICpkYXRhLCB1MzIgYmxvY2ssIHUxNiBwYWdlLCB1MTYgbnVtLCB1MTYgZmxhZ3MpCit7CisJdTggYmFuazsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJaWYgKDAgPT0gY21kKQorCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJIiVzLCBMaW5lICVkLCBJbGxlZ2FsIGNtZCAoMClcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisKKwkvKiBJZiBhIGNvbW1hbmQgb2YgYW5vdGhlciBiYW5rIGNvbWVzLCB0aGVuIGZpcnN0IGV4ZWN1dGUgKi8KKwkvKiBwZW5kaW5nIGNvbW1hbmRzIG9mIHRoZSBjdXJyZW50IGJhbmssIHRoZW4gc2V0IHRoZSBuZXcgKi8KKwkvKiBiYW5rIGFzIGN1cnJlbnQgYmFuayAqLworCWJhbmsgPSBibG9jayAvIChEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyAvIHRvdGFsVXNlZEJhbmtzKTsKKwlpZiAoYmFuayAhPSBpbmZvLmZsYXNoX2JhbmspIHsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJCSJXaWxsIGFjY2VzcyBuZXcgYmFuay4gb2xkIGJhbms6ICVkLCBuZXcgYmFuazogJWRcbiIsCisJCQlpbmZvLmZsYXNoX2JhbmssIGJhbmspOworCQlpZiAoQ0RNQV9FeGVjdXRlX0NNRHMoKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJDRE1BX0V4ZWN1dGVfQ01EcyBmYWlsIVxuIik7CisJCQlyZXR1cm4gRkFJTDsKKwkJfQorCQlpbmZvLmZsYXNoX2JhbmsgPSBiYW5rOworCX0KKworCWluZm8ucGNtZHNbaW5mby5wY21kc19udW1dLkNNRCA9IGNtZDsKKwlpbmZvLnBjbWRzW2luZm8ucGNtZHNfbnVtXS5EYXRhQWRkciA9IGRhdGE7CisJaW5mby5wY21kc1tpbmZvLnBjbWRzX251bV0uQmxvY2sgPSBibG9jazsKKwlpbmZvLnBjbWRzW2luZm8ucGNtZHNfbnVtXS5QYWdlID0gcGFnZTsKKwlpbmZvLnBjbWRzW2luZm8ucGNtZHNfbnVtXS5QYWdlQ291bnQgPSBudW07CisJaW5mby5wY21kc1tpbmZvLnBjbWRzX251bV0uRGF0YURlc3RBZGRyID0gMDsKKwlpbmZvLnBjbWRzW2luZm8ucGNtZHNfbnVtXS5EYXRhU3JjQWRkciA9IDA7CisJaW5mby5wY21kc1tpbmZvLnBjbWRzX251bV0uTWVtQ29weUJ5dGVDbnQgPSAwOworCWluZm8ucGNtZHNbaW5mby5wY21kc19udW1dLkZsYWdzID0gZmxhZ3M7CisJaW5mby5wY21kc1tpbmZvLnBjbWRzX251bV0uU3RhdHVzID0gMHhCMEI7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgV1JJVEVfTUFJTl9TUEFSRV9DTUQ6CisJCUNvbnZfTWFpbl9TcGFyZV9EYXRhX0xvZzJQaHlfRm9ybWF0KGRhdGEsIG51bSk7CisJCWJyZWFrOworCWNhc2UgV1JJVEVfU1BBUkVfQ01EOgorCQlDb252X1NwYXJlX0RhdGFfTG9nMlBoeV9Gb3JtYXQoZGF0YSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWluZm8ucGNtZHNfbnVtKys7CisKKwlpZiAoaW5mby5wY21kc19udW0gPj0gTUFYX1BFTkRJTkdfQ01EUykgeworCQlpZiAoQ0RNQV9FeGVjdXRlX0NNRHMoKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJDRE1BX0V4ZWN1dGVfQ01EcyBmYWlsIVxuIik7CisJCQlyZXR1cm4gRkFJTDsKKwkJfQorCX0KKworCXJldHVybiBQQVNTOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBDRE1BX01lbUNvcHlfQ01ECisqIElucHV0czogICAgICAgZGVzdDogcG9pbnRlciB0byBkZXN0aW5hdGlvbgorKiAgICAgICAgICAgICAgIHNyYzogIHBvaW50ZXIgdG8gc291cmNlCisqICAgICAgICAgICAgICAgY291bnQ6IG51bSBieXRlcyB0byB0cmFuc2ZlcgorKiBPdXRwdXRzOiAgICAgIFBBU1MKKyogRGVzY3JpcHRpb246ICBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBwYXJhbWV0ZXJzIGFuZCBwdXRzIHRoZW0KKyogICAgICAgICAgICAgICAgICAgaW50byB0aGUgInBlbmRpbmcgY29tbWFuZHMiIGFycmF5LgorKiAgICAgICAgICAgICAgIEl0IGRvZXMgbm90IHBhcnNlIG9yIHZhbGlkYXRlIHRoZSBwYXJhbWV0ZXJzLgorKiAgICAgICAgICAgICAgIFRoZSBhcnJheSBpbmRleCBpcyBzYW1lIGFzIHRoZSB0YWcuCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLwordTE2IENETUFfTWVtQ29weV9DTUQodTggKmRlc3QsIHU4ICpzcmMsIHUzMiBieXRlX2NudCwgdTE2IGZsYWdzKQoreworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJaW5mby5wY21kc1tpbmZvLnBjbWRzX251bV0uQ01EID0gTUVNQ09QWV9DTUQ7CisJaW5mby5wY21kc1tpbmZvLnBjbWRzX251bV0uRGF0YUFkZHIgPSAwOworCWluZm8ucGNtZHNbaW5mby5wY21kc19udW1dLkJsb2NrID0gMDsKKwlpbmZvLnBjbWRzW2luZm8ucGNtZHNfbnVtXS5QYWdlID0gMDsKKwlpbmZvLnBjbWRzW2luZm8ucGNtZHNfbnVtXS5QYWdlQ291bnQgPSAwOworCWluZm8ucGNtZHNbaW5mby5wY21kc19udW1dLkRhdGFEZXN0QWRkciA9IGRlc3Q7CisJaW5mby5wY21kc1tpbmZvLnBjbWRzX251bV0uRGF0YVNyY0FkZHIgPSBzcmM7CisJaW5mby5wY21kc1tpbmZvLnBjbWRzX251bV0uTWVtQ29weUJ5dGVDbnQgPSBieXRlX2NudDsKKwlpbmZvLnBjbWRzW2luZm8ucGNtZHNfbnVtXS5GbGFncyA9IGZsYWdzOworCWluZm8ucGNtZHNbaW5mby5wY21kc19udW1dLlN0YXR1cyA9IDB4QjBCOworCisJaW5mby5wY21kc19udW0rKzsKKworCWlmIChpbmZvLnBjbWRzX251bSA+PSBNQVhfUEVORElOR19DTURTKSB7CisJCWlmIChDRE1BX0V4ZWN1dGVfQ01EcygpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkNETUFfRXhlY3V0ZV9DTURzIGZhaWwhXG4iKTsKKwkJCXJldHVybiBGQUlMOworCQl9CisJfQorCisJcmV0dXJuIFBBU1M7Cit9CisKKyNpZiAwCisvKiBQcmludHMgdGhlIFBlbmRpbmdDTURzIGFycmF5ICovCit2b2lkIHByaW50X3BlbmRpbmdfY21kcyh2b2lkKQoreworCXUxNiBpOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby5wY21kc19udW07IGkrKykgeworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlxuaTogJWRcbiIsIGkpOworCQlzd2l0Y2ggKGluZm8ucGNtZHNbaV0uQ01EKSB7CisJCWNhc2UgRVJBU0VfQ01EOgorCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkJIkVyYXNlIENvbW1hbmQgKDB4JXgpXG4iLAorCQkJCWluZm8ucGNtZHNbaV0uQ01EKTsKKwkJCWJyZWFrOworCQljYXNlIFdSSVRFX01BSU5fQ01EOgorCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkJIldyaXRlIE1haW4gQ29tbWFuZCAoMHgleClcbiIsCisJCQkJaW5mby5wY21kc1tpXS5DTUQpOworCQkJYnJlYWs7CisJCWNhc2UgV1JJVEVfTUFJTl9TUEFSRV9DTUQ6CisJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCQkiV3JpdGUgTWFpbiBTcGFyZSBDb21tYW5kICgweCV4KVxuIiwKKwkJCQlpbmZvLnBjbWRzW2ldLkNNRCk7CisJCQlicmVhazsKKwkJY2FzZSBSRUFEX01BSU5fU1BBUkVfQ01EOgorCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkJIlJlYWQgTWFpbiBTcGFyZSBDb21tYW5kICgweCV4KVxuIiwKKwkJCQlpbmZvLnBjbWRzW2ldLkNNRCk7CisJCQlicmVhazsKKwkJY2FzZSBSRUFEX01BSU5fQ01EOgorCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkJIlJlYWQgTWFpbiBDb21tYW5kICgweCV4KVxuIiwKKwkJCQlpbmZvLnBjbWRzW2ldLkNNRCk7CisJCQlicmVhazsKKwkJY2FzZSBNRU1DT1BZX0NNRDoKKwkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJCSJNZW1jb3B5IENvbW1hbmQgKDB4JXgpXG4iLAorCQkJCWluZm8ucGNtZHNbaV0uQ01EKTsKKwkJCWJyZWFrOworCQljYXNlIERVTU1ZX0NNRDoKKwkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJCSJEdW1teSBDb21tYW5kICgweCV4KVxuIiwKKwkJCQlpbmZvLnBjbWRzW2ldLkNNRCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJCSJJbGxlZ2FsIENvbW1hbmQgKDB4JXgpXG4iLAorCQkJCWluZm8ucGNtZHNbaV0uQ01EKTsKKwkJCWJyZWFrOworCQl9CisKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJEYXRhQWRkcjogMHgleFxuIiwKKwkJCSh1MzIpaW5mby5wY21kc1tpXS5EYXRhQWRkcik7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiQmxvY2s6ICVkXG4iLAorCQkJaW5mby5wY21kc1tpXS5CbG9jayk7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiUGFnZTogJWRcbiIsCisJCQlpbmZvLnBjbWRzW2ldLlBhZ2UpOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlBhZ2VDb3VudDogJWRcbiIsCisJCQlpbmZvLnBjbWRzW2ldLlBhZ2VDb3VudCk7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiRGF0YURlc3RBZGRyOiAweCV4XG4iLAorCQkJKHUzMilpbmZvLnBjbWRzW2ldLkRhdGFEZXN0QWRkcik7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiRGF0YVNyY0FkZHI6IDB4JXhcbiIsCisJCQkodTMyKWluZm8ucGNtZHNbaV0uRGF0YVNyY0FkZHIpOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIk1lbUNvcHlCeXRlQ250OiAlZFxuIiwKKwkJCWluZm8ucGNtZHNbaV0uTWVtQ29weUJ5dGVDbnQpOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkZsYWdzOiAweCV4XG4iLAorCQkJaW5mby5wY21kc1tpXS5GbGFncyk7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiU3RhdHVzOiAweCV4XG4iLAorCQkJaW5mby5wY21kc1tpXS5TdGF0dXMpOworCX0KK30KKworLyogUHJpbnQgdGhlIENETUEgZGVzY3JpcHRvcnMgKi8KK3ZvaWQgcHJpbnRfY2RtYV9kZXNjcmlwdG9ycyh2b2lkKQoreworCXN0cnVjdCBjZG1hX2Rlc2NyaXB0b3IgKnBjOworCWludCBpOworCisJcGMgPSAoc3RydWN0IGNkbWFfZGVzY3JpcHRvciAqKWluZm8uY2RtYV9kZXNjX2J1ZjsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiXG5XaWxsIGR1bXAgY2RtYSBkZXNjcmlwdG9yczpcbiIpOworCisJZm9yIChpID0gMDsgaSA8IGluZm8uY2RtYV9udW07IGkrKykgeworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlxuaTogJWRcbiIsIGkpOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCSJOeHRQb2ludGVySGk6IDB4JXgsIE54dFBvaW50ZXJMbzogMHgleFxuIiwKKwkJCXBjW2ldLk54dFBvaW50ZXJIaSwgcGNbaV0uTnh0UG9pbnRlckxvKTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkiRmxhc2hQb2ludGVySGk6IDB4JXgsIEZsYXNoUG9pbnRlckxvOiAweCV4XG4iLAorCQkJcGNbaV0uRmxhc2hQb2ludGVySGksIHBjW2ldLkZsYXNoUG9pbnRlckxvKTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJDb21tYW5kVHlwZTogMHgleFxuIiwKKwkJCXBjW2ldLkNvbW1hbmRUeXBlKTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkiTWVtQWRkckhpOiAweCV4LCBNZW1BZGRyTG86IDB4JXhcbiIsCisJCQlwY1tpXS5NZW1BZGRySGksIHBjW2ldLk1lbUFkZHJMbyk7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiQ29tbWFuZEZsYWdzOiAweCV4XG4iLAorCQkJcGNbaV0uQ29tbWFuZEZsYWdzKTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJDaGFubmVsOiAlZCwgU3RhdHVzOiAweCV4XG4iLAorCQkJcGNbaV0uQ2hhbm5lbCwgcGNbaV0uU3RhdHVzKTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkiTWVtQ29weVBvaW50ZXJIaTogMHgleCwgTWVtQ29weVBvaW50ZXJMbzogMHgleFxuIiwKKwkJCXBjW2ldLk1lbUNvcHlQb2ludGVySGksIHBjW2ldLk1lbUNvcHlQb2ludGVyTG8pOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCSJSZXNlcnZlZDEyOiAweCV4LCBSZXNlcnZlZDEzOiAweCV4LCAiCisJCQkiUmVzZXJ2ZWQxNDogMHgleCwgcGNtZDogJWRcbiIsCisJCQlwY1tpXS5SZXNlcnZlZDEyLCBwY1tpXS5SZXNlcnZlZDEzLAorCQkJcGNbaV0uUmVzZXJ2ZWQxNCwgcGNbaV0ucGNtZCk7CisJfQorfQorCisvKiBQcmludCB0aGUgTWVtb3J5IGNvcHkgZGVzY3JpcHRvcnMgKi8KK3N0YXRpYyB2b2lkIHByaW50X21lbWNwX2Rlc2NyaXB0b3JzKHZvaWQpCit7CisJc3RydWN0IG1lbWNweV9kZXNjcmlwdG9yICpwbTsKKwlpbnQgaTsKKworCXBtID0gKHN0cnVjdCBtZW1jcHlfZGVzY3JpcHRvciAqKWluZm8ubWVtY3BfZGVzY19idWY7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlxuV2lsbCBkdW1wIG1lbV9jcHkgZGVzY3JpcHRvcnM6XG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbmZvLmNkbWFfbnVtOyBpKyspIHsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJcbmk6ICVkXG4iLCBpKTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkiTnh0UG9pbnRlckhpOiAweCV4LCBOeHRQb2ludGVyTG86IDB4JXhcbiIsCisJCQlwbVtpXS5OeHRQb2ludGVySGksIHBtW2ldLk54dFBvaW50ZXJMbyk7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJIlNyY0FkZHJIaTogMHgleCwgU3JjQWRkckxvOiAweCV4XG4iLAorCQkJcG1baV0uU3JjQWRkckhpLCBwbVtpXS5TcmNBZGRyTG8pOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCSJEZXN0QWRkckhpOiAweCV4LCBEZXN0QWRkckxvOiAweCV4XG4iLAorCQkJcG1baV0uRGVzdEFkZHJIaSwgcG1baV0uRGVzdEFkZHJMbyk7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiWGZlclNpemU6ICVkXG4iLAorCQkJcG1baV0uWGZlclNpemUpOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIk1lbUNvcHlGbGFnczogMHgleFxuIiwKKwkJCXBtW2ldLk1lbUNvcHlGbGFncyk7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiTWVtQ29weVN0YXR1czogJWRcbiIsCisJCQlwbVtpXS5NZW1Db3B5U3RhdHVzKTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJyZXNlcnZlZDk6IDB4JXhcbiIsCisJCQlwbVtpXS5yZXNlcnZlZDkpOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgInJlc2VydmVkMTA6IDB4JXhcbiIsCisJCQlwbVtpXS5yZXNlcnZlZDEwKTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJyZXNlcnZlZDExOiAweCV4XG4iLAorCQkJcG1baV0ucmVzZXJ2ZWQxMSk7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAicmVzZXJ2ZWQxMjogMHgleFxuIiwKKwkJCXBtW2ldLnJlc2VydmVkMTIpOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgInJlc2VydmVkMTM6IDB4JXhcbiIsCisJCQlwbVtpXS5yZXNlcnZlZDEzKTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJyZXNlcnZlZDE0OiAweCV4XG4iLAorCQkJcG1baV0ucmVzZXJ2ZWQxNCk7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAicmVzZXJ2ZWQxNTogMHgleFxuIiwKKwkJCXBtW2ldLnJlc2VydmVkMTUpOworCX0KK30KKyNlbmRpZgorCisvKiBSZXNldCBjZG1hX2Rlc2NyaXB0b3IgY2hhaW4gdG8gMCAqLworc3RhdGljIHZvaWQgcmVzZXRfY2RtYV9kZXNjKGludCBpKQoreworCXN0cnVjdCBjZG1hX2Rlc2NyaXB0b3IgKnB0cjsKKworCUJVR19PTihpID49IE1BWF9ERVNDUyk7CisKKwlwdHIgPSAoc3RydWN0IGNkbWFfZGVzY3JpcHRvciAqKWluZm8uY2RtYV9kZXNjX2J1ZjsKKworCXB0cltpXS5OeHRQb2ludGVySGkgPSAwOworCXB0cltpXS5OeHRQb2ludGVyTG8gPSAwOworCXB0cltpXS5GbGFzaFBvaW50ZXJIaSA9IDA7CisJcHRyW2ldLkZsYXNoUG9pbnRlckxvID0gMDsKKwlwdHJbaV0uQ29tbWFuZFR5cGUgPSAwOworCXB0cltpXS5NZW1BZGRySGkgPSAwOworCXB0cltpXS5NZW1BZGRyTG8gPSAwOworCXB0cltpXS5Db21tYW5kRmxhZ3MgPSAwOworCXB0cltpXS5DaGFubmVsID0gMDsKKwlwdHJbaV0uU3RhdHVzID0gMDsKKwlwdHJbaV0uTWVtQ29weVBvaW50ZXJIaSA9IDA7CisJcHRyW2ldLk1lbUNvcHlQb2ludGVyTG8gPSAwOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgQ0RNQV9VcGRhdGVFdmVudFN0YXR1cworKiBJbnB1dHM6ICAgICAgIG5vbmUKKyogT3V0cHV0czogICAgICBub25lCisqIERlc2NyaXB0aW9uOiAgVGhpcyBmdW5jdGlvbiB1cGRhdGUgdGhlIGV2ZW50IHN0YXR1cyBvZiBhbGwgdGhlIGNoYW5uZWxzCisqICAgICAgICAgICAgICAgd2hlbiBhbiBlcnJvciBjb25kaXRpb24gaXMgcmVwb3J0ZWQuCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3ZvaWQgQ0RNQV9VcGRhdGVFdmVudFN0YXR1cyh2b2lkKQoreworCWludCBpLCBqLCBhY3RpdmVfY2hhbjsKKwlzdHJ1Y3QgY2RtYV9kZXNjcmlwdG9yICpwdHI7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCXB0ciA9IChzdHJ1Y3QgY2RtYV9kZXNjcmlwdG9yICopaW5mby5jZG1hX2Rlc2NfYnVmOworCisJZm9yIChqID0gMDsgaiA8IGluZm8uY2RtYV9udW07IGorKykgeworCQkvKiBDaGVjayBmb3IgdGhlIGRlc2NyaXB0b3Igd2l0aCBmYWlsdXJlICovCisJCWlmICgocHRyW2pdLlN0YXR1cyAmIENNRF9ETUFfREVTQ19GQUlMKSkKKwkJCWJyZWFrOworCisJfQorCisJLyogQWxsIHRoZSBwcmV2aW91cyBjbWQncyBzdGF0dXMgZm9yIHRoaXMgY2hhbm5lbCBtdXN0IGJlIGdvb2QgKi8KKwlmb3IgKGkgPSAwOyBpIDwgajsgaSsrKSB7CisJCWlmIChwdHJbaV0ucGNtZCAhPSAweGZmKQorCQkJaW5mby5wY21kc1twdHJbaV0ucGNtZF0uU3RhdHVzID0gQ01EX1BBU1M7CisJfQorCisJLyogQWJvcnQgdGhlIGNoYW5uZWwgd2l0aCB0eXBlIDAgcmVzZXQgY29tbWFuZC4gSXQgcmVzZXRzIHRoZSAqLworCS8qIHNlbGVjdGVkIGNoYW5uZWwgYWZ0ZXIgdGhlIGRlc2NyaXB0b3IgY29tcGxldGVzIHRoZSBmbGFzaCAqLworCS8qIG9wZXJhdGlvbiBhbmQgc3RhdHVzIGhhcyBiZWVuIHVwZGF0ZWQgZm9yIHRoZSBkZXNjcmlwdG9yLiAqLworCS8qIE1lbW9yeSBDb3B5IGFuZCBTeW5jIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRlc2NyaXB0b3Igd2lsbCAqLworCS8qIG5vdCBiZSBleGVjdXRlZCAqLworCWFjdGl2ZV9jaGFuID0gaW9yZWFkMzIoRmxhc2hSZWcgKyBDSE5MX0FDVElWRSk7CisJaWYgKChhY3RpdmVfY2hhbiAmICgxIDw8IGluZm8uZmxhc2hfYmFuaykpID09ICgxIDw8IGluZm8uZmxhc2hfYmFuaykpIHsKKwkJaW93cml0ZTMyKE1PREVfMDIgfCAoMCA8PCA0KSwgRmxhc2hNZW0pOyAvKiBUeXBlIDAgcmVzZXQgKi8KKwkJaW93cml0ZTMyKCgweEYgPDwgNCkgfCBpbmZvLmZsYXNoX2JhbmssIEZsYXNoTWVtICsgMHgxMCk7CisJfSBlbHNlIHsgLyogU2hvdWxkIG5vdCByZWFjaGVkIGhlcmUgKi8KKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciEgVXNlZCBiYW5rIGlzIG5vdCBzZXQgaW4iCisJCQkiIHJlZyBDSE5MX0FDVElWRVxuIik7CisJfQorfQorCitzdGF0aWMgdm9pZCBjZG1hX3RyYW5zKHUxNiBjaGFuKQoreworCXUzMiBhZGRyOworCisJYWRkciA9IGluZm8uY2RtYV9kZXNjOworCisJaW93cml0ZTMyKE1PREVfMTAgfCAoY2hhbiA8PCAyNCksIEZsYXNoTWVtKTsKKwlpb3dyaXRlMzIoKDEgPDwgNykgfCBjaGFuLCBGbGFzaE1lbSArIDB4MTApOworCisJaW93cml0ZTMyKE1PREVfMTAgfCAoY2hhbiA8PCAyNCkgfCAoKDB4MEZGRkYgJiAoYWRkciA+PiAxNikpIDw8IDgpLAorCQlGbGFzaE1lbSk7CisJaW93cml0ZTMyKCgxIDw8IDcpIHwgKDEgPDwgNCkgfCAwLCBGbGFzaE1lbSArIDB4MTApOworCisJaW93cml0ZTMyKE1PREVfMTAgfCAoY2hhbiA8PCAyNCkgfCAoKDB4MEZGRkYgJiBhZGRyKSA8PCA4KSwgRmxhc2hNZW0pOworCWlvd3JpdGUzMigoMSA8PCA3KSB8ICgxIDw8IDUpIHwgMCwgRmxhc2hNZW0gKyAweDEwKTsKKworCWlvd3JpdGUzMihNT0RFXzEwIHwgKGNoYW4gPDwgMjQpLCBGbGFzaE1lbSk7CisJaW93cml0ZTMyKCgxIDw8IDcpIHwgKDEgPDwgNSkgfCAoMSA8PCA0KSB8IDAsIEZsYXNoTWVtICsgMHgxMCk7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBDRE1BX0V4ZWN1dGVfQ01EcyAoZm9yIHVzZSB3aXRoIENNRF9ETUEpCisqIElucHV0czogICAgICAgdGFnX2NvdW50OiAgdGhlIG51bWJlciBvZiBwZW5kaW5nIGNtZHMgdG8gZG8KKyogT3V0cHV0czogICAgICBQQVNTL0ZBSUwKKyogRGVzY3JpcHRpb246ICBCdWlsZCB0aGUgU0RNQSBjaGFpbihzKSBieSBtYWtpbmcgb25lIENNRC1ETUEgZGVzY3JpcHRvcgorKiAgICAgICAgICAgICAgIGZvciBlYWNoIHBlbmRpbmcgY29tbWFuZCwgc3RhcnQgdGhlIENETUEgZW5naW5lLCBhbmQgcmV0dXJuLgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3UxNiBDRE1BX0V4ZWN1dGVfQ01Ecyh2b2lkKQoreworCWludCBpLCByZXQ7CisJdTY0IGZsYXNoX2FkZDsKKwl1MzIgcHRyOworCWRtYV9hZGRyX3QgbWFwX2FkZHIsIG5leHRfcHRyOworCXUxNiBzdGF0dXMgPSBQQVNTOworCXUxNiB0bXBfYzsKKwlzdHJ1Y3QgY2RtYV9kZXNjcmlwdG9yICpwYzsKKwlzdHJ1Y3QgbWVtY3B5X2Rlc2NyaXB0b3IgKnBtOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwkvKiBObyBwZW5kaW5nIGNtZHMgdG8gZXhlY3V0ZSwganVzdCBleGl0ICovCisJaWYgKDAgPT0gaW5mby5wY21kc19udW0pIHsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsCisJCQkiTm8gcGVuZGluZyBjbWRzIHRvIGV4ZWN1dGUuIEp1c3QgZXhpdC5cbiIpOworCQlyZXR1cm4gUEFTUzsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0RFU0NTOyBpKyspCisJCXJlc2V0X2NkbWFfZGVzYyhpKTsKKworCXBjID0gKHN0cnVjdCBjZG1hX2Rlc2NyaXB0b3IgKilpbmZvLmNkbWFfZGVzY19idWY7CisJcG0gPSAoc3RydWN0IG1lbWNweV9kZXNjcmlwdG9yICopaW5mby5tZW1jcF9kZXNjX2J1ZjsKKworCWluZm8uY2RtYV9kZXNjID0gdmlydF90b19idXMoaW5mby5jZG1hX2Rlc2NfYnVmKTsKKwlpbmZvLm1lbWNwX2Rlc2MgPSB2aXJ0X3RvX2J1cyhpbmZvLm1lbWNwX2Rlc2NfYnVmKTsKKwluZXh0X3B0ciA9IGluZm8uY2RtYV9kZXNjOworCWluZm8uY2RtYV9udW0gPSAwOworCisJZm9yIChpID0gMDsgaSA8IGluZm8ucGNtZHNfbnVtOyBpKyspIHsKKwkJaWYgKGluZm8ucGNtZHNbaV0uQmxvY2sgPj0gRGV2aWNlSW5mby53VG90YWxCbG9ja3MpIHsKKwkJCWluZm8ucGNtZHNbaV0uU3RhdHVzID0gQ01EX05PVF9ET05FOworCQkJY29udGludWU7CisJCX0KKworCQluZXh0X3B0ciArPSBzaXplb2Yoc3RydWN0IGNkbWFfZGVzY3JpcHRvcik7CisJCXBjW2luZm8uY2RtYV9udW1dLk54dFBvaW50ZXJIaSA9IG5leHRfcHRyID4+IDE2OworCQlwY1tpbmZvLmNkbWFfbnVtXS5OeHRQb2ludGVyTG8gPSBuZXh0X3B0ciAmIDB4ZmZmZjsKKworCQkvKiBVc2UgdGhlIEJsb2NrIG9mZnNldCB3aXRoaW4gYSBiYW5rICovCisJCXRtcF9jID0gaW5mby5wY21kc1tpXS5CbG9jayAvCisJCQkoRGV2aWNlSW5mby53VG90YWxCbG9ja3MgLyB0b3RhbFVzZWRCYW5rcyk7CisJCWZsYXNoX2FkZCA9ICh1NjQpKGluZm8ucGNtZHNbaV0uQmxvY2sgLSB0bXBfYyAqCisJCQkoRGV2aWNlSW5mby53VG90YWxCbG9ja3MgLyB0b3RhbFVzZWRCYW5rcykpICoKKwkJCURldmljZUluZm8ud0Jsb2NrRGF0YVNpemUgKworCQkJKHU2NCkoaW5mby5wY21kc1tpXS5QYWdlKSAqCisJCQlEZXZpY2VJbmZvLndQYWdlRGF0YVNpemU7CisKKwkJcHRyID0gTU9ERV8xMCB8IChpbmZvLmZsYXNoX2JhbmsgPDwgMjQpIHwKKwkJCSh1MzIpR0xPQl91NjRfRGl2KGZsYXNoX2FkZCwKKwkJCQlEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUpOworCQlwY1tpbmZvLmNkbWFfbnVtXS5GbGFzaFBvaW50ZXJIaSA9IHB0ciA+PiAxNjsKKwkJcGNbaW5mby5jZG1hX251bV0uRmxhc2hQb2ludGVyTG8gPSBwdHIgJiAweGZmZmY7CisKKwkJaWYgKChpbmZvLnBjbWRzW2ldLkNNRCA9PSBXUklURV9NQUlOX1NQQVJFX0NNRCkgfHwKKwkJCShpbmZvLnBjbWRzW2ldLkNNRCA9PSBSRUFEX01BSU5fU1BBUkVfQ01EKSkgeworCQkJLyogRGVzY3JpcHRvciB0byBzZXQgTWFpbitTcGFyZSBBY2Nlc3MgTW9kZSAqLworCQkJcGNbaW5mby5jZG1hX251bV0uQ29tbWFuZFR5cGUgPSAweDQzOworCQkJcGNbaW5mby5jZG1hX251bV0uQ29tbWFuZEZsYWdzID0KKwkJCQkoMCA8PCAxMCkgfCAoMSA8PCA5KSB8ICgwIDw8IDgpIHwgMHg0MDsKKwkJCXBjW2luZm8uY2RtYV9udW1dLk1lbUFkZHJIaSA9IDA7CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5NZW1BZGRyTG8gPSAwOworCQkJcGNbaW5mby5jZG1hX251bV0uQ2hhbm5lbCA9IDA7CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5TdGF0dXMgPSAwOworCQkJcGNbaW5mby5jZG1hX251bV0ucGNtZCA9IGk7CisKKwkJCWluZm8uY2RtYV9udW0rKzsKKwkJCUJVR19PTihpbmZvLmNkbWFfbnVtID49IE1BWF9ERVNDUyk7CisKKwkJCXJlc2V0X2NkbWFfZGVzYyhpbmZvLmNkbWFfbnVtKTsKKwkJCW5leHRfcHRyICs9IHNpemVvZihzdHJ1Y3QgY2RtYV9kZXNjcmlwdG9yKTsKKwkJCXBjW2luZm8uY2RtYV9udW1dLk54dFBvaW50ZXJIaSA9IG5leHRfcHRyID4+IDE2OworCQkJcGNbaW5mby5jZG1hX251bV0uTnh0UG9pbnRlckxvID0gbmV4dF9wdHIgJiAweGZmZmY7CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5GbGFzaFBvaW50ZXJIaSA9IHB0ciA+PiAxNjsKKwkJCXBjW2luZm8uY2RtYV9udW1dLkZsYXNoUG9pbnRlckxvID0gcHRyICYgMHhmZmZmOworCQl9CisKKwkJc3dpdGNoIChpbmZvLnBjbWRzW2ldLkNNRCkgeworCQljYXNlIEVSQVNFX0NNRDoKKwkJCXBjW2luZm8uY2RtYV9udW1dLkNvbW1hbmRUeXBlID0gMTsKKwkJCXBjW2luZm8uY2RtYV9udW1dLkNvbW1hbmRGbGFncyA9CisJCQkJKDAgPDwgMTApIHwgKDEgPDwgOSkgfCAoMCA8PCA4KSB8IDB4NDA7CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5NZW1BZGRySGkgPSAwOworCQkJcGNbaW5mby5jZG1hX251bV0uTWVtQWRkckxvID0gMDsKKwkJCWJyZWFrOworCisJCWNhc2UgV1JJVEVfTUFJTl9DTUQ6CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5Db21tYW5kVHlwZSA9CisJCQkJMHgyMTAwIHwgaW5mby5wY21kc1tpXS5QYWdlQ291bnQ7CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5Db21tYW5kRmxhZ3MgPQorCQkJCSgwIDw8IDEwKSB8ICgxIDw8IDkpIHwgKDAgPDwgOCkgfCAweDQwOworCQkJbWFwX2FkZHIgPSB2aXJ0X3RvX2J1cyhpbmZvLnBjbWRzW2ldLkRhdGFBZGRyKTsKKwkJCXBjW2luZm8uY2RtYV9udW1dLk1lbUFkZHJIaSA9IG1hcF9hZGRyID4+IDE2OworCQkJcGNbaW5mby5jZG1hX251bV0uTWVtQWRkckxvID0gbWFwX2FkZHIgJiAweGZmZmY7CisJCQlicmVhazsKKworCQljYXNlIFJFQURfTUFJTl9DTUQ6CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5Db21tYW5kVHlwZSA9CisJCQkJMHgyMDAwIHwgaW5mby5wY21kc1tpXS5QYWdlQ291bnQ7CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5Db21tYW5kRmxhZ3MgPQorCQkJCSgwIDw8IDEwKSB8ICgxIDw8IDkpIHwgKDAgPDwgOCkgfCAweDQwOworCQkJbWFwX2FkZHIgPSB2aXJ0X3RvX2J1cyhpbmZvLnBjbWRzW2ldLkRhdGFBZGRyKTsKKwkJCXBjW2luZm8uY2RtYV9udW1dLk1lbUFkZHJIaSA9IG1hcF9hZGRyID4+IDE2OworCQkJcGNbaW5mby5jZG1hX251bV0uTWVtQWRkckxvID0gbWFwX2FkZHIgJiAweGZmZmY7CisJCQlicmVhazsKKworCQljYXNlIFdSSVRFX01BSU5fU1BBUkVfQ01EOgorCQkJcGNbaW5mby5jZG1hX251bV0uQ29tbWFuZFR5cGUgPQorCQkJCTB4MjEwMCB8IGluZm8ucGNtZHNbaV0uUGFnZUNvdW50OworCQkJcGNbaW5mby5jZG1hX251bV0uQ29tbWFuZEZsYWdzID0KKwkJCQkoMCA8PCAxMCkgfCAoMSA8PCA5KSB8ICgwIDw8IDgpIHwgMHg0MDsKKwkJCW1hcF9hZGRyID0gdmlydF90b19idXMoaW5mby5wY21kc1tpXS5EYXRhQWRkcik7CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5NZW1BZGRySGkgPSBtYXBfYWRkciA+PiAxNjsKKwkJCXBjW2luZm8uY2RtYV9udW1dLk1lbUFkZHJMbyA9IG1hcF9hZGRyICYgMHhmZmZmOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRUFEX01BSU5fU1BBUkVfQ01EOgorCQkJcGNbaW5mby5jZG1hX251bV0uQ29tbWFuZFR5cGUgPQorCQkJCTB4MjAwMCB8IGluZm8ucGNtZHNbaV0uUGFnZUNvdW50OworCQkJcGNbaW5mby5jZG1hX251bV0uQ29tbWFuZEZsYWdzID0KKwkJCQkoMCA8PCAxMCkgfCAoMSA8PCA5KSB8ICgwIDw8IDgpIHwgMHg0MDsKKwkJCW1hcF9hZGRyID0gdmlydF90b19idXMoaW5mby5wY21kc1tpXS5EYXRhQWRkcik7CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5NZW1BZGRySGkgPSBtYXBfYWRkciA+PiAxNjsKKwkJCXBjW2luZm8uY2RtYV9udW1dLk1lbUFkZHJMbyA9IG1hcF9hZGRyICYgMHhmZmZmOworCQkJYnJlYWs7CisKKwkJY2FzZSBNRU1DT1BZX0NNRDoKKwkJCXBjW2luZm8uY2RtYV9udW1dLkNvbW1hbmRUeXBlID0gMHhGRkZGOyAvKiBOT1AgY21kICovCisJCQkvKiBTZXQgYml0IDExIHRvIGxldCB0aGUgQ0RNQSBlbmdpbmUgY29udGludWUgdG8gKi8KKwkJCS8qIGV4ZWN1dGUgb25seSBhZnRlciBpdCBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZyAgICovCisJCQkvKiB0aGUgbWVtY29weSBkZXNjcmlwdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkvKiBBbHNvIHNldCBiaXQgMTAgYW5kIGJpdCA5IHRvIDEgICAgICAgICAgICAgICAgICAqLworCQkJcGNbaW5mby5jZG1hX251bV0uQ29tbWFuZEZsYWdzID0gMHgwRTQwOworCQkJbWFwX2FkZHIgPSBpbmZvLm1lbWNwX2Rlc2MgKyBpbmZvLmNkbWFfbnVtICoKKwkJCQkJc2l6ZW9mKHN0cnVjdCBtZW1jcHlfZGVzY3JpcHRvcik7CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5NZW1Db3B5UG9pbnRlckhpID0gbWFwX2FkZHIgPj4gMTY7CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5NZW1Db3B5UG9pbnRlckxvID0gbWFwX2FkZHIgJiAweGZmZmY7CisKKwkJCXBtW2luZm8uY2RtYV9udW1dLk54dFBvaW50ZXJIaSA9IDA7CisJCQlwbVtpbmZvLmNkbWFfbnVtXS5OeHRQb2ludGVyTG8gPSAwOworCisJCQltYXBfYWRkciA9IHZpcnRfdG9fYnVzKGluZm8ucGNtZHNbaV0uRGF0YVNyY0FkZHIpOworCQkJcG1baW5mby5jZG1hX251bV0uU3JjQWRkckhpID0gbWFwX2FkZHIgPj4gMTY7CisJCQlwbVtpbmZvLmNkbWFfbnVtXS5TcmNBZGRyTG8gPSBtYXBfYWRkciAmIDB4ZmZmZjsKKwkJCW1hcF9hZGRyID0gdmlydF90b19idXMoaW5mby5wY21kc1tpXS5EYXRhRGVzdEFkZHIpOworCQkJcG1baW5mby5jZG1hX251bV0uRGVzdEFkZHJIaSA9IG1hcF9hZGRyID4+IDE2OworCQkJcG1baW5mby5jZG1hX251bV0uRGVzdEFkZHJMbyA9IG1hcF9hZGRyICYgMHhmZmZmOworCisJCQlwbVtpbmZvLmNkbWFfbnVtXS5YZmVyU2l6ZSA9CisJCQkJaW5mby5wY21kc1tpXS5NZW1Db3B5Qnl0ZUNudDsKKwkJCXBtW2luZm8uY2RtYV9udW1dLk1lbUNvcHlGbGFncyA9CisJCQkJKDAgPDwgMTUgfCAwIDw8IDE0IHwgMjcgPDwgOCB8IDB4NDApOworCQkJcG1baW5mby5jZG1hX251bV0uTWVtQ29weVN0YXR1cyA9IDA7CisJCQlicmVhazsKKworCQljYXNlIERVTU1ZX0NNRDoKKwkJZGVmYXVsdDoKKwkJCXBjW2luZm8uY2RtYV9udW1dLkNvbW1hbmRUeXBlID0gMFhGRkZGOworCQkJcGNbaW5mby5jZG1hX251bV0uQ29tbWFuZEZsYWdzID0KKwkJCQkoMCA8PCAxMCkgfCAoMSA8PCA5KSB8ICgwIDw8IDgpIHwgMHg0MDsKKwkJCXBjW2luZm8uY2RtYV9udW1dLk1lbUFkZHJIaSA9IDA7CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5NZW1BZGRyTG8gPSAwOworCQkJYnJlYWs7CisJCX0KKworCQlwY1tpbmZvLmNkbWFfbnVtXS5DaGFubmVsID0gMDsKKwkJcGNbaW5mby5jZG1hX251bV0uU3RhdHVzID0gMDsKKwkJcGNbaW5mby5jZG1hX251bV0ucGNtZCA9IGk7CisKKwkJaW5mby5jZG1hX251bSsrOworCQlCVUdfT04oaW5mby5jZG1hX251bSA+PSBNQVhfREVTQ1MpOworCisJCWlmICgoaW5mby5wY21kc1tpXS5DTUQgPT0gV1JJVEVfTUFJTl9TUEFSRV9DTUQpIHx8CisJCQkoaW5mby5wY21kc1tpXS5DTUQgPT0gUkVBRF9NQUlOX1NQQVJFX0NNRCkpIHsKKwkJCS8qIERlc2NyaXB0b3IgdG8gc2V0IGJhY2sgTWFpbiBBcmVhIEFjY2VzcyBNb2RlICovCisJCQlyZXNldF9jZG1hX2Rlc2MoaW5mby5jZG1hX251bSk7CisJCQluZXh0X3B0ciArPSBzaXplb2Yoc3RydWN0IGNkbWFfZGVzY3JpcHRvcik7CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5OeHRQb2ludGVySGkgPSBuZXh0X3B0ciA+PiAxNjsKKwkJCXBjW2luZm8uY2RtYV9udW1dLk54dFBvaW50ZXJMbyA9IG5leHRfcHRyICYgMHhmZmZmOworCisJCQlwY1tpbmZvLmNkbWFfbnVtXS5GbGFzaFBvaW50ZXJIaSA9IHB0ciA+PiAxNjsKKwkJCXBjW2luZm8uY2RtYV9udW1dLkZsYXNoUG9pbnRlckxvID0gcHRyICYgMHhmZmZmOworCisJCQlwY1tpbmZvLmNkbWFfbnVtXS5Db21tYW5kVHlwZSA9IDB4NDI7CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5Db21tYW5kRmxhZ3MgPQorCQkJCSgwIDw8IDEwKSB8ICgxIDw8IDkpIHwgKDAgPDwgOCkgfCAweDQwOworCQkJcGNbaW5mby5jZG1hX251bV0uTWVtQWRkckhpID0gMDsKKwkJCXBjW2luZm8uY2RtYV9udW1dLk1lbUFkZHJMbyA9IDA7CisKKwkJCXBjW2luZm8uY2RtYV9udW1dLkNoYW5uZWwgPSAwOworCQkJcGNbaW5mby5jZG1hX251bV0uU3RhdHVzID0gMDsKKwkJCXBjW2luZm8uY2RtYV9udW1dLnBjbWQgPSBpOworCisJCQlpbmZvLmNkbWFfbnVtKys7CisJCQlCVUdfT04oaW5mby5jZG1hX251bSA+PSBNQVhfREVTQ1MpOworCQl9CisJfQorCisJLyogQWRkIGEgZHVtbXkgZGVzY3JpcHRvciBhdCBlbmQgb2YgdGhlIENETUEgY2hhaW4gKi8KKwlyZXNldF9jZG1hX2Rlc2MoaW5mby5jZG1hX251bSk7CisJcHRyID0gTU9ERV8xMCB8IChpbmZvLmZsYXNoX2JhbmsgPDwgMjQpOworCXBjW2luZm8uY2RtYV9udW1dLkZsYXNoUG9pbnRlckhpID0gcHRyID4+IDE2OworCXBjW2luZm8uY2RtYV9udW1dLkZsYXNoUG9pbnRlckxvID0gcHRyICYgMHhmZmZmOworCXBjW2luZm8uY2RtYV9udW1dLkNvbW1hbmRUeXBlID0gMHhGRkZGOyAvKiBOT1AgY29tbWFuZCAqLworCS8qIFNldCBDb21tYW5kIEZsYWdzIGZvciB0aGUgbGFzdCBDRE1BIGRlc2NyaXB0b3I6ICovCisJLyogc2V0IENvbnRpbnVlIGJpdCAoYml0IDkpIHRvIDAgYW5kIEludGVycnVwdCBiaXQgKGJpdCA4KSB0byAxICovCisJcGNbaW5mby5jZG1hX251bV0uQ29tbWFuZEZsYWdzID0KKwkJKDAgPDwgMTApIHwgKDAgPDwgOSkgfCAoMSA8PCA4KSB8IDB4NDA7CisJcGNbaW5mby5jZG1hX251bV0ucGNtZCA9IDB4ZmY7IC8qIFNldCBpdCB0byBhbiBpbGxlZ2FsIHZhbHVlICovCisJaW5mby5jZG1hX251bSsrOworCUJVR19PTihpbmZvLmNkbWFfbnVtID49IE1BWF9ERVNDUyk7CisKKwlpb3dyaXRlMzIoMSwgRmxhc2hSZWcgKyBHTE9CQUxfSU5UX0VOQUJMRSk7ICAvKiBFbmFibGUgSW50ZXJydXB0ICovCisKKwlpb3dyaXRlMzIoMSwgRmxhc2hSZWcgKyBETUFfRU5BQkxFKTsKKwkvKiBXYWl0IGZvciBETUEgdG8gYmUgZW5hYmxlZCBiZWZvcmUgaXNzdWluZyB0aGUgbmV4dCBjb21tYW5kICovCisJd2hpbGUgKCEoaW9yZWFkMzIoRmxhc2hSZWcgKyBETUFfRU5BQkxFKSAmIERNQV9FTkFCTEVfX0ZMQUcpKQorCQk7CisJY2RtYV90cmFucyhpbmZvLmZsYXNoX2JhbmspOworCisJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpbmZvLmNvbXBsZXRlLCA1MCAqIEhaKTsKKwlpZiAoIXJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICJXYWl0IGZvciBjb21wbGV0aW9uIHRpbWVvdXQgIgorCQkJImluICVzLCBMaW5lICVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOworCXN0YXR1cyA9IGluZm8ucmV0OworCisJaW5mby5wY21kc19udW0gPSAwOyAvKiBDbGVhciB0aGUgcGVuZGluZyBjbWRzIG51bWJlciB0byAwICovCisKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgaXNfY2RtYV9pbnRlcnJ1cHQodm9pZCkKK3sKKwl1MzIgaW50c19iMCwgaW50c19iMSwgaW50c19iMiwgaW50c19iMywgaW50c19jZG1hOworCXUzMiBpbnRfZW5fbWFzazsKKwl1MzIgY2RtYV9pbnRfZW5fbWFzazsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJLyogU2V0IHRoZSBnbG9iYWwgRW5hYmxlIG1hc2tzIGZvciBvbmx5IHRob3NlIGludGVycnVwdHMKKwkgKiB0aGF0IGFyZSBzdXBwb3J0ZWQgKi8KKwljZG1hX2ludF9lbl9tYXNrID0gKERNQV9JTlRSX19ERVNDX0NPTVBfQ0hBTk5FTDAgfAorCQkJRE1BX0lOVFJfX0RFU0NfQ09NUF9DSEFOTkVMMSB8CisJCQlETUFfSU5UUl9fREVTQ19DT01QX0NIQU5ORUwyIHwKKwkJCURNQV9JTlRSX19ERVNDX0NPTVBfQ0hBTk5FTDMgfAorCQkJRE1BX0lOVFJfX01FTUNPUFlfREVTQ19DT01QKTsKKworCWludF9lbl9tYXNrID0gKElOVFJfU1RBVFVTMF9fRUNDX0VSUiB8CisJCUlOVFJfU1RBVFVTMF9fUFJPR1JBTV9GQUlMIHwKKwkJSU5UUl9TVEFUVVMwX19FUkFTRV9GQUlMKTsKKworCWludHNfYjAgPSBpb3JlYWQzMihGbGFzaFJlZyArIElOVFJfU1RBVFVTMCkgJiBpbnRfZW5fbWFzazsKKwlpbnRzX2IxID0gaW9yZWFkMzIoRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzEpICYgaW50X2VuX21hc2s7CisJaW50c19iMiA9IGlvcmVhZDMyKEZsYXNoUmVnICsgSU5UUl9TVEFUVVMyKSAmIGludF9lbl9tYXNrOworCWludHNfYjMgPSBpb3JlYWQzMihGbGFzaFJlZyArIElOVFJfU1RBVFVTMykgJiBpbnRfZW5fbWFzazsKKwlpbnRzX2NkbWEgPSBpb3JlYWQzMihGbGFzaFJlZyArIERNQV9JTlRSKSAmIGNkbWFfaW50X2VuX21hc2s7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiaW50c19iYW5rMCB0byBpbnRzX2JhbmszOiAiCisJCQkiMHgleCwgMHgleCwgMHgleCwgMHgleCwgaW50c19jZG1hOiAweCV4XG4iLAorCQkJaW50c19iMCwgaW50c19iMSwgaW50c19iMiwgaW50c19iMywgaW50c19jZG1hKTsKKworCWlmIChpbnRzX2IwIHx8IGludHNfYjEgfHwgaW50c19iMiB8fCBpbnRzX2IzIHx8IGludHNfY2RtYSkgeworCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQlpb3dyaXRlMzIoaW50c19iMCwgRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzApOworCQlpb3dyaXRlMzIoaW50c19iMSwgRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzEpOworCQlpb3dyaXRlMzIoaW50c19iMiwgRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzIpOworCQlpb3dyaXRlMzIoaW50c19iMywgRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzMpOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCSJOb3QgYSBOQU5EIGNvbnRyb2xsZXIgaW50ZXJydXB0ISBJZ25vcmUgaXQuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfZXZlbnRfc3RhdHVzKHZvaWQpCit7CisJaW50IGk7CisJc3RydWN0IGNkbWFfZGVzY3JpcHRvciAqcHRyOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlwdHIgPSAoc3RydWN0IGNkbWFfZGVzY3JpcHRvciAqKWluZm8uY2RtYV9kZXNjX2J1ZjsKKworCWZvciAoaSA9IDA7IGkgPCBpbmZvLmNkbWFfbnVtOyBpKyspIHsKKwkJaWYgKHB0cltpXS5wY21kICE9IDB4ZmYpCisJCQlpbmZvLnBjbWRzW3B0cltpXS5wY21kXS5TdGF0dXMgPSBDTURfUEFTUzsKKwkJaWYgKChwdHJbaV0uQ29tbWFuZFR5cGUgPT0gMHg0MSkgfHwKKwkJCShwdHJbaV0uQ29tbWFuZFR5cGUgPT0gMHg0MikgfHwKKwkJCShwdHJbaV0uQ29tbWFuZFR5cGUgPT0gMHg0MykpCisJCQljb250aW51ZTsKKworCQlzd2l0Y2ggKGluZm8ucGNtZHNbcHRyW2ldLnBjbWRdLkNNRCkgeworCQljYXNlIFJFQURfTUFJTl9TUEFSRV9DTUQ6CisJCQlDb252X01haW5fU3BhcmVfRGF0YV9QaHkyTG9nX0Zvcm1hdCgKKwkJCQlpbmZvLnBjbWRzW3B0cltpXS5wY21kXS5EYXRhQWRkciwKKwkJCQlpbmZvLnBjbWRzW3B0cltpXS5wY21kXS5QYWdlQ291bnQpOworCQkJYnJlYWs7CisJCWNhc2UgUkVBRF9TUEFSRV9DTUQ6CisJCQlDb252X1NwYXJlX0RhdGFfUGh5MkxvZ19Gb3JtYXQoCisJCQkJaW5mby5wY21kc1twdHJbaV0ucGNtZF0uRGF0YUFkZHIpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB1MTYgZG9fZWNjX2Zvcl9kZXNjKHUzMiBjaCwgdTggKmJ1ZiwgdTE2IHBhZ2UpCit7CisJdTE2IGV2ZW50ID0gRVZFTlRfTk9ORTsKKwl1MTYgZXJyX2J5dGU7CisJdTE2IGVycl9wYWdlID0gMDsKKwl1OCBlcnJfc2VjdG9yOworCXU4IGVycl9kZXZpY2U7CisJdTE2IGVjY19jb3JyZWN0aW9uX2luZm87CisJdTE2IGVycl9hZGRyZXNzOworCXUzMiBlY2NTZWN0b3JTaXplOworCXU4ICplcnJfcG9zOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWVjY1NlY3RvclNpemUgPSBFQ0NfU0VDVE9SX1NJWkUgKiAoRGV2aWNlSW5mby53RGV2aWNlc0Nvbm5lY3RlZCk7CisKKwlkbyB7CisJCWlmICgwID09IGNoKQorCQkJZXJyX3BhZ2UgPSBpb3JlYWQzMihGbGFzaFJlZyArIEVSUl9QQUdFX0FERFIwKTsKKwkJZWxzZSBpZiAoMSA9PSBjaCkKKwkJCWVycl9wYWdlID0gaW9yZWFkMzIoRmxhc2hSZWcgKyBFUlJfUEFHRV9BRERSMSk7CisJCWVsc2UgaWYgKDIgPT0gY2gpCisJCQllcnJfcGFnZSA9IGlvcmVhZDMyKEZsYXNoUmVnICsgRVJSX1BBR0VfQUREUjIpOworCQllbHNlIGlmICgzID09IGNoKQorCQkJZXJyX3BhZ2UgPSBpb3JlYWQzMihGbGFzaFJlZyArIEVSUl9QQUdFX0FERFIzKTsKKworCQllcnJfYWRkcmVzcyA9IGlvcmVhZDMyKEZsYXNoUmVnICsgRUNDX0VSUk9SX0FERFJFU1MpOworCQllcnJfYnl0ZSA9IGVycl9hZGRyZXNzICYgRUNDX0VSUk9SX0FERFJFU1NfX09GRlNFVDsKKwkJZXJyX3NlY3RvciA9ICgoZXJyX2FkZHJlc3MgJgorCQkJRUNDX0VSUk9SX0FERFJFU1NfX1NFQ1RPUl9OUikgPj4gMTIpOworCisJCWVjY19jb3JyZWN0aW9uX2luZm8gPSBpb3JlYWQzMihGbGFzaFJlZyArIEVSUl9DT1JSRUNUSU9OX0lORk8pOworCQllcnJfZGV2aWNlID0gKChlY2NfY29ycmVjdGlvbl9pbmZvICYKKwkJCUVSUl9DT1JSRUNUSU9OX0lORk9fX0RFVklDRV9OUikgPj4gOCk7CisKKwkJaWYgKGVjY19jb3JyZWN0aW9uX2luZm8gJiBFUlJfQ09SUkVDVElPTl9JTkZPX19FUlJPUl9UWVBFKSB7CisJCQlldmVudCA9IEVWRU5UX1VOQ09SUkVDVEFCTEVfREFUQV9FUlJPUjsKKwkJfSBlbHNlIHsKKwkJCWV2ZW50ID0gRVZFTlRfQ09SUkVDVEFCTEVfREFUQV9FUlJPUl9GSVhFRDsKKwkJCWlmIChlcnJfYnl0ZSA8IEVDQ19TRUNUT1JfU0laRSkgeworCQkJCWVycl9wb3MgPSBidWYgKworCQkJCQkoZXJyX3BhZ2UgLSBwYWdlKSAqCisJCQkJCURldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSArCisJCQkJCWVycl9zZWN0b3IgKiBlY2NTZWN0b3JTaXplICsKKwkJCQkJZXJyX2J5dGUgKgorCQkJCQlEZXZpY2VJbmZvLndEZXZpY2VzQ29ubmVjdGVkICsKKwkJCQkJZXJyX2RldmljZTsKKwkJCQkqZXJyX3BvcyBePSBlY2NfY29ycmVjdGlvbl9pbmZvICYKKwkJCQkJRVJSX0NPUlJFQ1RJT05fSU5GT19fQllURU1BU0s7CisJCQl9CisJCX0KKwl9IHdoaWxlICghKGVjY19jb3JyZWN0aW9uX2luZm8gJiBFUlJfQ09SUkVDVElPTl9JTkZPX19MQVNUX0VSUl9JTkZPKSk7CisKKwlyZXR1cm4gZXZlbnQ7Cit9CisKK3N0YXRpYyB1MTYgcHJvY2Vzc19lY2NfaW50KHUzMiBjLCB1MTYgKnBfZGVzY19udW0pCit7CisJc3RydWN0IGNkbWFfZGVzY3JpcHRvciAqcHRyOworCXUxNiBqOworCWludCBldmVudCA9IEVWRU5UX1BBU1M7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJaWYgKGMgIT0gaW5mby5mbGFzaF9iYW5rKQorCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIWluZm8uZmxhc2hfYmFuayBpcyAlZCwgd2hpbGUgYyBpcyAlZFxuIiwKKwkJCQlpbmZvLmZsYXNoX2JhbmssIGMpOworCisJcHRyID0gKHN0cnVjdCBjZG1hX2Rlc2NyaXB0b3IgKilpbmZvLmNkbWFfZGVzY19idWY7CisKKwlmb3IgKGogPSAwOyBqIDwgaW5mby5jZG1hX251bTsgaisrKQorCQlpZiAoKHB0cltqXS5TdGF0dXMgJiBDTURfRE1BX0RFU0NfQ09NUCkgIT0gQ01EX0RNQV9ERVNDX0NPTVApCisJCQlicmVhazsKKworCSpwX2Rlc2NfbnVtID0gajsgLyogUGFzcyB0aGUgZGVzY3JpcHRlciBudW1iZXIgZm91bmQgaGVyZSAqLworCisJaWYgKGogPj0gaW5mby5jZG1hX251bSkgeworCQlwcmludGsoS0VSTl9FUlIgIkNhbiBub3QgZmluZCB0aGUgY29ycmVjdCBkZXNjcmlwdG9yIG51bWJlciAiCisJCQkid2hlbiBlY2MgaW50ZXJydXB0IHRyaWdnZXJlZCEiCisJCQkiaW5mby5jZG1hX251bTogJWQsIGo6ICVkXG4iLCBpbmZvLmNkbWFfbnVtLCBqKTsKKwkJcmV0dXJuIEVWRU5UX1VOQ09SUkVDVEFCTEVfREFUQV9FUlJPUjsKKwl9CisKKwlldmVudCA9IGRvX2VjY19mb3JfZGVzYyhjLCBpbmZvLnBjbWRzW3B0cltqXS5wY21kXS5EYXRhQWRkciwKKwkJaW5mby5wY21kc1twdHJbal0ucGNtZF0uUGFnZSk7CisKKwlpZiAoRVZFTlRfVU5DT1JSRUNUQUJMRV9EQVRBX0VSUk9SID09IGV2ZW50KSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5jb3JyZWN0YWJsZSBFQ0MgZXJyb3IhIgorCQkJImluZm8uY2RtYV9udW06ICVkLCBqOiAlZCwgIgorCQkJInBlbmRpbmcgY21kIENNRDogMHgleCwgIgorCQkJIkJsb2NrOiAweCV4LCBQYWdlOiAweCV4LCBQYWdlQ291bnQ6IDB4JXhcbiIsCisJCQlpbmZvLmNkbWFfbnVtLCBqLAorCQkJaW5mby5wY21kc1twdHJbal0ucGNtZF0uQ01ELAorCQkJaW5mby5wY21kc1twdHJbal0ucGNtZF0uQmxvY2ssCisJCQlpbmZvLnBjbWRzW3B0cltqXS5wY21kXS5QYWdlLAorCQkJaW5mby5wY21kc1twdHJbal0ucGNtZF0uUGFnZUNvdW50KTsKKworCQlpZiAocHRyW2pdLnBjbWQgIT0gMHhmZikKKwkJCWluZm8ucGNtZHNbcHRyW2pdLnBjbWRdLlN0YXR1cyA9IENNRF9GQUlMOworCQlDRE1BX1VwZGF0ZUV2ZW50U3RhdHVzKCk7CisJfQorCisJcmV0dXJuIGV2ZW50OworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX3Byb2dfZXJhc2VfZmFpbF9pbnQodTE2IGRlc2NfbnVtKQoreworCXN0cnVjdCBjZG1hX2Rlc2NyaXB0b3IgKnB0cjsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJcHRyID0gKHN0cnVjdCBjZG1hX2Rlc2NyaXB0b3IgKilpbmZvLmNkbWFfZGVzY19idWY7CisKKwlpZiAocHRyW2Rlc2NfbnVtXS5wY21kICE9IDB4RkYpCisJCWluZm8ucGNtZHNbcHRyW2Rlc2NfbnVtXS5wY21kXS5TdGF0dXMgPSBDTURfRkFJTDsKKworCUNETUFfVXBkYXRlRXZlbnRTdGF0dXMoKTsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIENETUFfRXZlbnRfU3RhdHVzIChmb3IgdXNlIHdpdGggQ01EX0RNQSkKKyogSW5wdXRzOiAgICAgICBub25lCisqIE91dHB1dHM6ICAgICAgRXZlbnRfU3RhdHVzIGNvZGUKKyogRGVzY3JpcHRpb246ICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhbiBpbnRlcnJ1cHQgaGFzIGhhcHBlbmVkCisqICAgICAgICAgICAgICAgSXQgcmVhZHMgdGhlIEhXIHN0YXR1cyByZWdpc3RlciBhbmQgLi4udGJkCisqICAgICAgICAgICAgICAgSXQgcmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgZXZlbnQgc3RhdHVzCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3UxNiAgQ0RNQV9FdmVudF9TdGF0dXModm9pZCkKK3sKKwl1MzIgaW50c19hZGRyWzRdID0ge0lOVFJfU1RBVFVTMCwgSU5UUl9TVEFUVVMxLAorCQlJTlRSX1NUQVRVUzIsIElOVFJfU1RBVFVTM307CisJdTMyIGRtYV9pbnRyX2JpdFs0XSA9IHtETUFfSU5UUl9fREVTQ19DT01QX0NIQU5ORUwwLAorCQlETUFfSU5UUl9fREVTQ19DT01QX0NIQU5ORUwxLAorCQlETUFfSU5UUl9fREVTQ19DT01QX0NIQU5ORUwyLAorCQlETUFfSU5UUl9fREVTQ19DT01QX0NIQU5ORUwzfTsKKwl1MzIgY2RtYV9pbnRfc3RhdHVzLCBpbnRfc3RhdHVzOworCXUzMiBlY2NfZW5hYmxlID0gMDsKKwl1MTYgZXZlbnQgPSBFVkVOVF9QQVNTOworCXUxNiBjdXJfZGVzYyA9IDA7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWVjY19lbmFibGUgPSBpb3JlYWQzMihGbGFzaFJlZyArIEVDQ19FTkFCTEUpOworCisJd2hpbGUgKDEpIHsKKwkJaW50X3N0YXR1cyA9IGlvcmVhZDMyKEZsYXNoUmVnICsgaW50c19hZGRyW2luZm8uZmxhc2hfYmFua10pOworCQlpZiAoZWNjX2VuYWJsZSAmJiAoaW50X3N0YXR1cyAmIElOVFJfU1RBVFVTMF9fRUNDX0VSUikpIHsKKwkJCWV2ZW50ID0gcHJvY2Vzc19lY2NfaW50KGluZm8uZmxhc2hfYmFuaywgJmN1cl9kZXNjKTsKKwkJCWlvd3JpdGUzMihJTlRSX1NUQVRVUzBfX0VDQ19FUlIsCisJCQkJRmxhc2hSZWcgKyBpbnRzX2FkZHJbaW5mby5mbGFzaF9iYW5rXSk7CisJCQlpZiAoRVZFTlRfVU5DT1JSRUNUQUJMRV9EQVRBX0VSUk9SID09IGV2ZW50KSB7CisJCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJCQkJImludHNfYmFuazAgdG8gaW50c19iYW5rMzogIgorCQkJCQkiMHgleCwgMHgleCwgMHgleCwgMHgleCwgIgorCQkJCQkiaW50c19jZG1hOiAweCV4XG4iLAorCQkJCQlpb3JlYWQzMihGbGFzaFJlZyArIElOVFJfU1RBVFVTMCksCisJCQkJCWlvcmVhZDMyKEZsYXNoUmVnICsgSU5UUl9TVEFUVVMxKSwKKwkJCQkJaW9yZWFkMzIoRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzIpLAorCQkJCQlpb3JlYWQzMihGbGFzaFJlZyArIElOVFJfU1RBVFVTMyksCisJCQkJCWlvcmVhZDMyKEZsYXNoUmVnICsgRE1BX0lOVFIpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIGlmIChpbnRfc3RhdHVzICYgSU5UUl9TVEFUVVMwX19QUk9HUkFNX0ZBSUwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiTkFORCBwcm9ncmFtIGZhaWwgaW50ZXJydXB0IVxuIik7CisJCQlwcm9jZXNzX3Byb2dfZXJhc2VfZmFpbF9pbnQoY3VyX2Rlc2MpOworCQkJZXZlbnQgPSBFVkVOVF9QUk9HUkFNX0ZBSUxVUkU7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChpbnRfc3RhdHVzICYgSU5UUl9TVEFUVVMwX19FUkFTRV9GQUlMKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIk5BTkQgZXJhc2UgZmFpbCBpbnRlcnJ1cHQhXG4iKTsKKwkJCXByb2Nlc3NfcHJvZ19lcmFzZV9mYWlsX2ludChjdXJfZGVzYyk7CisJCQlldmVudCA9IEVWRU5UX0VSQVNFX0ZBSUxVUkU7CisJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCWNkbWFfaW50X3N0YXR1cyA9IGlvcmVhZDMyKEZsYXNoUmVnICsgRE1BX0lOVFIpOworCQkJaWYgKGNkbWFfaW50X3N0YXR1cyAmIGRtYV9pbnRyX2JpdFtpbmZvLmZsYXNoX2JhbmtdKSB7CisJCQkJaW93cml0ZTMyKGRtYV9pbnRyX2JpdFtpbmZvLmZsYXNoX2JhbmtdLAorCQkJCQlGbGFzaFJlZyArIERNQV9JTlRSKTsKKwkJCQl1cGRhdGVfZXZlbnRfc3RhdHVzKCk7CisJCQkJZXZlbnQgPSBFVkVOVF9QQVNTOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJaW50X3N0YXR1cyA9IGlvcmVhZDMyKEZsYXNoUmVnICsgaW50c19hZGRyW2luZm8uZmxhc2hfYmFua10pOworCWlvd3JpdGUzMihpbnRfc3RhdHVzLCBGbGFzaFJlZyArIGludHNfYWRkcltpbmZvLmZsYXNoX2JhbmtdKTsKKwljZG1hX2ludF9zdGF0dXMgPSBpb3JlYWQzMihGbGFzaFJlZyArIERNQV9JTlRSKTsKKwlpb3dyaXRlMzIoY2RtYV9pbnRfc3RhdHVzLCBGbGFzaFJlZyArIERNQV9JTlRSKTsKKworCWlvd3JpdGUzMigwLCBGbGFzaFJlZyArIERNQV9FTkFCTEUpOworCXdoaWxlICgoaW9yZWFkMzIoRmxhc2hSZWcgKyBETUFfRU5BQkxFKSAmIERNQV9FTkFCTEVfX0ZMQUcpKQorCQk7CisKKwlyZXR1cm4gZXZlbnQ7Cit9CisKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9sbGRfY2RtYS5oIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvbGxkX2NkbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTRlYTA2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvbGxkX2NkbWEuaApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIE5BTkQgRmxhc2ggQ29udHJvbGxlciBEZXZpY2UgRHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEludGVsIENvcnBvcmF0aW9uIGFuZCBpdHMgc3VwcGxpZXJzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICovCisKKy8qIGhlYWRlciBmb3IgTExEX0NETUEuYyBtb2R1bGUgKi8KKworI2lmbmRlZiBfTExEX0NETUFfCisjZGVmaW5lIF9MTERfQ0RNQV8KKworI2luY2x1ZGUgImZsYXNoLmgiCisKKyNkZWZpbmUgIERFQlVHX1NZTkMgICAgMQorCisvKi8vLy8vLy8vLy8vICAgQ0RNQSBzcGVjaWZpYyBNQUNSTyBkZWZpbml0aW9uICovCisjZGVmaW5lIE1BWF9ERVNDUyAgICAgICAgICgyNTUpCisjZGVmaW5lIE1BWF9DSEFOUyAgKDQpCisjZGVmaW5lIE1BWF9TWU5DX1BPSU5UUyAgICAgICAgICgxNikKKyNkZWZpbmUgTUFYX0RFU0NfUEVSX0NIQU4gICAgIChNQVhfREVTQ1MgKiAzICsgTUFYX1NZTkNfUE9JTlRTICsgMikKKworI2RlZmluZSBDSEFOTkVMX1NZTkNfTUFTSyAgICAgICAoMHgwMDBGKQorI2RlZmluZSBDSEFOTkVMX0RNQV9NQVNLICAgICAgICAoMHgwMEYwKQorI2RlZmluZSBDSEFOTkVMX0lEX01BU0sgICAgICAgICAoMHgwMzAwKQorI2RlZmluZSBDSEFOTkVMX0NPTlRfTUFTSyAgICAgICAoMHg0MDAwKQorI2RlZmluZSBDSEFOTkVMX0lOVFJfTUFTSyAgICAgICAoMHg4MDAwKQorCisjZGVmaW5lIENIQU5ORUxfU1lOQ19PRkZTRVQgICAgICgwKQorI2RlZmluZSBDSEFOTkVMX0RNQV9PRkZTRVQgICAgICAoNCkKKyNkZWZpbmUgQ0hBTk5FTF9JRF9PRkZTRVQgICAgICAgKDgpCisjZGVmaW5lIENIQU5ORUxfQ09OVF9PRkZTRVQgICAgICgxNCkKKyNkZWZpbmUgQ0hBTk5FTF9JTlRSX09GRlNFVCAgICAgKDE1KQorCit1MTYgQ0RNQV9EYXRhX0NNRCh1OCBjbWQsIHU4ICpkYXRhLCB1MzIgYmxvY2ssIHUxNiBwYWdlLCB1MTYgbnVtLCB1MTYgZmxhZ3MpOwordTE2IENETUFfTWVtQ29weV9DTUQodTggKmRlc3QsIHU4ICpzcmMsIHUzMiBieXRlX2NudCwgdTE2IGZsYWdzKTsKK3UxNiBDRE1BX0V4ZWN1dGVfQ01Ecyh2b2lkKTsKK3ZvaWQgcHJpbnRfcGVuZGluZ19jbWRzKHZvaWQpOwordm9pZCBwcmludF9jZG1hX2Rlc2NyaXB0b3JzKHZvaWQpOworCitleHRlcm4gdTggZ19TQkRDbWRJbmRleDsKK2V4dGVybiBzdHJ1Y3QgbXJzdF9uYW5kX2luZm8gaW5mbzsKKworCisvKi8vLy8vLy8vLy8vICAgcHJvdG90eXBlczogQVBJcyBmb3IgTExEX0NETUEgKi8KK2ludCBpc19jZG1hX2ludGVycnVwdCh2b2lkKTsKK3UxNiBDRE1BX0V2ZW50X1N0YXR1cyh2b2lkKTsKKworLyogQ01ELURNQSBEZXNjcmlwdG9yIFN0cnVjdC4gIFRoZXNlIGFyZSBkZWZpbmVkIGJ5IHRoZSBDTURfRE1BIEhXICovCitzdHJ1Y3QgY2RtYV9kZXNjcmlwdG9yIHsKKwl1MzIgTnh0UG9pbnRlckhpOworCXUzMiBOeHRQb2ludGVyTG87CisJdTMyIEZsYXNoUG9pbnRlckhpOworCXUzMiBGbGFzaFBvaW50ZXJMbzsKKwl1MzIgQ29tbWFuZFR5cGU7CisJdTMyIE1lbUFkZHJIaTsKKwl1MzIgTWVtQWRkckxvOworCXUzMiBDb21tYW5kRmxhZ3M7CisJdTMyIENoYW5uZWw7CisJdTMyIFN0YXR1czsKKwl1MzIgTWVtQ29weVBvaW50ZXJIaTsKKwl1MzIgTWVtQ29weVBvaW50ZXJMbzsKKwl1MzIgUmVzZXJ2ZWQxMjsKKwl1MzIgUmVzZXJ2ZWQxMzsKKwl1MzIgUmVzZXJ2ZWQxNDsKKwl1MzIgcGNtZDsgLyogcGVuZGluZyBjbWQgbnVtIHJlbGF0ZWQgdG8gdGhpcyBkZXNjcmlwdG9yICovCit9OworCisvKiBUaGlzIHN0cnVjdCBob2xkcyBvbmUgTWVtQ29weSBkZXNjcmlwdG9yIGFzIGRlZmluZWQgYnkgdGhlIEhXICovCitzdHJ1Y3QgbWVtY3B5X2Rlc2NyaXB0b3IgeworCXUzMiBOeHRQb2ludGVySGk7CisJdTMyIE54dFBvaW50ZXJMbzsKKwl1MzIgU3JjQWRkckhpOworCXUzMiBTcmNBZGRyTG87CisJdTMyIERlc3RBZGRySGk7CisJdTMyIERlc3RBZGRyTG87CisJdTMyIFhmZXJTaXplOworCXUzMiBNZW1Db3B5RmxhZ3M7CisJdTMyIE1lbUNvcHlTdGF0dXM7CisJdTMyIHJlc2VydmVkOTsKKwl1MzIgcmVzZXJ2ZWQxMDsKKwl1MzIgcmVzZXJ2ZWQxMTsKKwl1MzIgcmVzZXJ2ZWQxMjsKKwl1MzIgcmVzZXJ2ZWQxMzsKKwl1MzIgcmVzZXJ2ZWQxNDsKKwl1MzIgcmVzZXJ2ZWQxNTsKK307CisKKy8qIFBlbmRpbmcgQ01EIHRhYmxlIGVudHJpZXMgKGluY2x1ZGVzIE1lbUNvcHkgcGFyYW1ldGVycyAqLworc3RydWN0IHBlbmRpbmdfY21kIHsKKwl1OCBDTUQ7CisJdTggKkRhdGFBZGRyOworCXUzMiBCbG9jazsKKwl1MTYgUGFnZTsKKwl1MTYgUGFnZUNvdW50OworCXU4ICpEYXRhRGVzdEFkZHI7CisJdTggKkRhdGFTcmNBZGRyOworCXUzMiBNZW1Db3B5Qnl0ZUNudDsKKwl1MTYgRmxhZ3M7CisJdTE2IFN0YXR1czsKK307CisKKyNpZiBERUJVR19TWU5DCitleHRlcm4gdTMyIGRlYnVnX3N5bmNfY250OworI2VuZGlmCisKKy8qIERlZmluaXRpb25zIGZvciBDTUQgRE1BIGRlc2NyaXB0b3IgY2hhaW4gZmllbGRzICovCisjZGVmaW5lICAgICBDTURfRE1BX0RFU0NfQ09NUCAgIDB4ODAwMAorI2RlZmluZSAgICAgQ01EX0RNQV9ERVNDX0ZBSUwgICAweDQwMDAKKworI2VuZGlmIC8qX0xMRF9DRE1BXyovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9sbGRfZW11LmMgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9sbGRfZW11LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBlYjBmNmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9sbGRfZW11LmMKQEAgLTAsMCArMSw3ODAgQEAKKy8qCisgKiBOQU5EIEZsYXNoIENvbnRyb2xsZXIgRGV2aWNlIERyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbiBhbmQgaXRzIHN1cHBsaWVycy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSAiZmxhc2guaCIKKyNpbmNsdWRlICJmZnNkZWZzLmgiCisjaW5jbHVkZSAibGxkX2VtdS5oIgorI2luY2x1ZGUgImxsZC5oIgorI2lmIENNRF9ETUEKKyNpbmNsdWRlICJsbGRfY2RtYS5oIgorI2VuZGlmCisKKyNkZWZpbmUgR0xPQl9MTERfUEFHRVMgICAgICAgICAgIDY0CisjZGVmaW5lIEdMT0JfTExEX1BBR0VfU0laRSAgICAgICAoNTEyKzE2KQorI2RlZmluZSBHTE9CX0xMRF9QQUdFX0RBVEFfU0laRSAgNTEyCisjZGVmaW5lIEdMT0JfTExEX0JMT0NLUyAgICAgICAgICAyMDQ4CisKKyNpZiAoQ01EX0RNQSAgJiYgRkxBU0hfRU1VKQorI2luY2x1ZGUgImxsZF9jZG1hLmgiCit1MzIgdG90YWxVc2VkQmFua3M7Cit1MzIgdmFsaWRfYmFua3NbTUFYX0NIQU5TXTsKKyNlbmRpZgorCisjaWYgRkxBU0hfRU1VCQkJLyogVGhpcyBpcyBmb3IgZW50aXJlIG1vZHVsZSAqLworCitzdGF0aWMgdTggKmZsYXNoX21lbW9yeVtHTE9CX0xMRF9CTE9DS1MgKiBHTE9CX0xMRF9QQUdFU107CisKKy8qIFJlYWQgbmFuZCBlbXUgZmlsZSBhbmQgdGhlbiBmaWxsIGl0J3MgY29udGVudCB0byBmbGFzaF9tZW1vcnkgKi8KK2ludCBlbXVfbG9hZF9maWxlX3RvX21lbSh2b2lkKQoreworCW1tX3NlZ21lbnRfdCBmczsKKwlzdHJ1Y3QgZmlsZSAqbmVmX2ZpbHAgPSBOVUxMOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOworCWxvZmZfdCBuZWZfc2l6ZSA9IDA7CisJbG9mZl90IHRtcF9maWxlX29mZnNldCwgZmlsZV9vZmZzZXQ7CisJc3NpemVfdCBucmVhZDsKKwlpbnQgaSwgcmMgPSAtRUlOVkFMOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlmcyA9IGdldF9mcygpOworCXNldF9mcyhnZXRfZHMoKSk7CisKKwluZWZfZmlscCA9IGZpbHBfb3BlbigiL3Jvb3QvbmFuZF9lbXVfZmlsZSIsIE9fUkRXUiB8IE9fTEFSR0VGSUxFLCAwKTsKKwlpZiAoSVNfRVJSKG5lZl9maWxwKSkgeworCQlwcmludGsoS0VSTl9FUlIgImZpbHBfb3BlbiBlcnJvcjogIgorCQkgICAgICAgIlVuYWJsZSB0byBvcGVuIG5hbmQgZW11IGZpbGUhXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIobmVmX2ZpbHApOworCX0KKworCWlmIChuZWZfZmlscC0+Zl9wYXRoLmRlbnRyeSkgeworCQlpbm9kZSA9IG5lZl9maWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ2FuIG5vdCBnZXQgdmFsaWQgaW5vZGUhXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJbmVmX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZS0+aV9tYXBwaW5nLT5ob3N0KTsKKwlpZiAobmVmX3NpemUgPD0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgbmFuZCBlbXUgZmlsZSBzaXplOiAiCisJCSAgICAgICAiMHglbGx4XG4iLCBuZWZfc2l6ZSk7CisJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAibmFuZCBlbXUgZmlsZSBzaXplOiAlbGxkXG4iLAorCQkJICAgICAgIG5lZl9zaXplKTsKKwl9CisKKwlmaWxlX29mZnNldCA9IDA7CisJZm9yIChpID0gMDsgaSA8IEdMT0JfTExEX0JMT0NLUyAqIEdMT0JfTExEX1BBR0VTOyBpKyspIHsKKwkJdG1wX2ZpbGVfb2Zmc2V0ID0gZmlsZV9vZmZzZXQ7CisJCW5yZWFkID0gdmZzX3JlYWQobmVmX2ZpbHAsCisJCQkJIChjaGFyIF9fdXNlciAqKWZsYXNoX21lbW9yeVtpXSwKKwkJCQkgR0xPQl9MTERfUEFHRV9TSVpFLCAmdG1wX2ZpbGVfb2Zmc2V0KTsKKwkJaWYgKG5yZWFkIDwgR0xPQl9MTERfUEFHRV9TSVpFKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzLCBMaW5lICVkIC0gIgorCQkJICAgICAgICJuYW5kIGVtdSBmaWxlIHBhcnRpYWwgcmVhZDogIgorCQkJICAgICAgICIlZCBieXRlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLCAoaW50KW5yZWFkKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWZpbGVfb2Zmc2V0ICs9IEdMT0JfTExEX1BBR0VfU0laRTsKKwl9CisJcmMgPSAwOworCitvdXQ6CisJZmlscF9jbG9zZShuZWZfZmlscCwgY3VycmVudC0+ZmlsZXMpOworCXNldF9mcyhmcyk7CisJcmV0dXJuIHJjOworfQorCisvKiBXcml0ZSBjb250ZW50cyBvZiBmbGFzaF9tZW1vcnkgdG8gbmFuZCBlbXUgZmlsZSAqLworaW50IGVtdV93cml0ZV9tZW1fdG9fZmlsZSh2b2lkKQoreworCW1tX3NlZ21lbnRfdCBmczsKKwlzdHJ1Y3QgZmlsZSAqbmVmX2ZpbHAgPSBOVUxMOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOworCWxvZmZfdCBuZWZfc2l6ZSA9IDA7CisJbG9mZl90IHRtcF9maWxlX29mZnNldCwgZmlsZV9vZmZzZXQ7CisJc3NpemVfdCBud3JpdHRlbjsKKwlpbnQgaSwgcmMgPSAtRUlOVkFMOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlmcyA9IGdldF9mcygpOworCXNldF9mcyhnZXRfZHMoKSk7CisKKwluZWZfZmlscCA9IGZpbHBfb3BlbigiL3Jvb3QvbmFuZF9lbXVfZmlsZSIsIE9fUkRXUiB8IE9fTEFSR0VGSUxFLCAwKTsKKwlpZiAoSVNfRVJSKG5lZl9maWxwKSkgeworCQlwcmludGsoS0VSTl9FUlIgImZpbHBfb3BlbiBlcnJvcjogIgorCQkgICAgICAgIlVuYWJsZSB0byBvcGVuIG5hbmQgZW11IGZpbGUhXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIobmVmX2ZpbHApOworCX0KKworCWlmIChuZWZfZmlscC0+Zl9wYXRoLmRlbnRyeSkgeworCQlpbm9kZSA9IG5lZl9maWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCAiICJuZWZfZmlscC0+Zl9wYXRoLmRlbnRyeSB2YWx1ZSFcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwluZWZfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlLT5pX21hcHBpbmctPmhvc3QpOworCWlmIChuZWZfc2l6ZSA8PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCAiCisJCSAgICAgICAibmFuZCBlbXUgZmlsZSBzaXplOiAweCVsbHhcbiIsIG5lZl9zaXplKTsKKwkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJuYW5kIGVtdSBmaWxlIHNpemU6ICIKKwkJCSAgICAgICAiJWxsZFxuIiwgbmVmX3NpemUpOworCX0KKworCWZpbGVfb2Zmc2V0ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgR0xPQl9MTERfQkxPQ0tTICogR0xPQl9MTERfUEFHRVM7IGkrKykgeworCQl0bXBfZmlsZV9vZmZzZXQgPSBmaWxlX29mZnNldDsKKwkJbndyaXR0ZW4gPSB2ZnNfd3JpdGUobmVmX2ZpbHAsCisJCQkJICAgICAoY2hhciBfX3VzZXIgKilmbGFzaF9tZW1vcnlbaV0sCisJCQkJICAgICBHTE9CX0xMRF9QQUdFX1NJWkUsICZ0bXBfZmlsZV9vZmZzZXQpOworCQlpZiAobndyaXR0ZW4gPCBHTE9CX0xMRF9QQUdFX1NJWkUpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXMsIExpbmUgJWQgLSAiCisJCQkgICAgICAgIm5hbmQgZW11IGZpbGUgcGFydGlhbCB3cml0ZTogIgorCQkJICAgICAgICIlZCBieXRlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLCAoaW50KW53cml0dGVuKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWZpbGVfb2Zmc2V0ICs9IEdMT0JfTExEX1BBR0VfU0laRTsKKwl9CisJcmMgPSAwOworCitvdXQ6CisJZmlscF9jbG9zZShuZWZfZmlscCwgY3VycmVudC0+ZmlsZXMpOworCXNldF9mcyhmcyk7CisJcmV0dXJuIHJjOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgZW11X0ZsYXNoX0luaXQKKyogSW5wdXRzOiAgICAgICBub25lCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIChub3RpY2UgMD1vayBoZXJlKQorKiBEZXNjcmlwdGlvbjogIENyZWF0ZXMgJiBpbml0aWFsaXplcyB0aGUgZmxhc2ggUkFNIGFycmF5LgorKgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3UxNiBlbXVfRmxhc2hfSW5pdCh2b2lkKQoreworCWludCBpOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlmbGFzaF9tZW1vcnlbMF0gPSAodTggKil2bWFsbG9jKEdMT0JfTExEX1BBR0VfU0laRSAqCisJCQkJCQkgICBHTE9CX0xMRF9CTE9DS1MgKgorCQkJCQkJICAgR0xPQl9MTERfUEFHRVMgKgorCQkJCQkJICAgc2l6ZW9mKHU4KSk7CisJaWYgKCFmbGFzaF9tZW1vcnlbMF0pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsIHRvIGFsbG9jYXRlIG1lbW9yeSAiCisJCSAgICAgICAiZm9yIG5hbmQgZW11bGF0b3IhXG4iKTsKKwkJcmV0dXJuIEVSUjsKKwl9CisKKwltZW1zZXQoKGNoYXIgKikoZmxhc2hfbWVtb3J5WzBdKSwgMHhGRiwKKwkgICAgICAgR0xPQl9MTERfUEFHRV9TSVpFICogR0xPQl9MTERfQkxPQ0tTICogR0xPQl9MTERfUEFHRVMgKgorCSAgICAgICBzaXplb2YodTgpKTsKKworCWZvciAoaSA9IDE7IGkgPCBHTE9CX0xMRF9CTE9DS1MgKiBHTE9CX0xMRF9QQUdFUzsgaSsrKQorCQlmbGFzaF9tZW1vcnlbaV0gPSBmbGFzaF9tZW1vcnlbaSAtIDFdICsgR0xPQl9MTERfUEFHRV9TSVpFOworCisJZW11X2xvYWRfZmlsZV90b19tZW0oKTsgLyogTG9hZCBuYW5kIGVtdSBmaWxlIHRvIG1lbSAqLworCisJcmV0dXJuIFBBU1M7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBlbXVfRmxhc2hfUmVsZWFzZQorKiBJbnB1dHM6ICAgICAgIG5vbmUKKyogT3V0cHV0czogICAgICBQQVNTPTAgKG5vdGljZSAwPW9rIGhlcmUpCisqIERlc2NyaXB0aW9uOiAgICAgICAgICBSZWxlYXNlcyB0aGUgZmxhc2guCisqCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworaW50IGVtdV9GbGFzaF9SZWxlYXNlKHZvaWQpCit7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwllbXVfd3JpdGVfbWVtX3RvX2ZpbGUoKTsgIC8qIFdyaXRlIGJhY2sgbWVtIHRvIG5hbmQgZW11IGZpbGUgKi8KKworCXZmcmVlKGZsYXNoX21lbW9yeVswXSk7CisJcmV0dXJuIFBBU1M7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBlbXVfUmVhZF9EZXZpY2VfSUQKKyogSW5wdXRzOiAgICAgICBub25lCisqIE91dHB1dHM6ICAgICAgUEFTUz0xIEZBSUw9MAorKiBEZXNjcmlwdGlvbjogIFJlYWRzIHRoZSBpbmZvIGZyb20gdGhlIGNvbnRyb2xsZXIgcmVnaXN0ZXJzLgorKiAgICAgICAgICAgICAgIFNldHMgdXAgRGV2aWNlSW5mbyBzdHJ1Y3R1cmUgd2l0aCBkZXZpY2UgcGFyYW1ldGVycworKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KKwordTE2IGVtdV9SZWFkX0RldmljZV9JRCh2b2lkKQoreworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJRGV2aWNlSW5mby53RGV2aWNlTWFrZXIgPSAwOworCURldmljZUluZm8ud0RldmljZVR5cGUgPSA4OworCURldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrID0gMzY7CisJRGV2aWNlSW5mby53U3BlY3RyYUVuZEJsb2NrID0gR0xPQl9MTERfQkxPQ0tTIC0gMTsKKwlEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyA9IEdMT0JfTExEX0JMT0NLUzsKKwlEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrID0gR0xPQl9MTERfUEFHRVM7CisJRGV2aWNlSW5mby53UGFnZVNpemUgPSBHTE9CX0xMRF9QQUdFX1NJWkU7CisJRGV2aWNlSW5mby53UGFnZURhdGFTaXplID0gR0xPQl9MTERfUEFHRV9EQVRBX1NJWkU7CisJRGV2aWNlSW5mby53UGFnZVNwYXJlU2l6ZSA9IEdMT0JfTExEX1BBR0VfU0laRSAtCisJICAgIEdMT0JfTExEX1BBR0VfREFUQV9TSVpFOworCURldmljZUluZm8ud0Jsb2NrU2l6ZSA9IERldmljZUluZm8ud1BhZ2VTaXplICogR0xPQl9MTERfUEFHRVM7CisJRGV2aWNlSW5mby53QmxvY2tEYXRhU2l6ZSA9IERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSAqIEdMT0JfTExEX1BBR0VTOworCURldmljZUluZm8ud0RhdGFCbG9ja051bSA9ICh1MzIpIChEZXZpY2VJbmZvLndTcGVjdHJhRW5kQmxvY2sgLQorCQkJCQkJRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2sKKwkJCQkJCSsgMSk7CisJRGV2aWNlSW5mby5NTENEZXZpY2UgPSAxOyAvKiBFbXVsYXRlIE1MQyBkZXZpY2UgKi8KKwlEZXZpY2VJbmZvLm5CaXRzSW5QYWdlTnVtYmVyID0KKwkJKHU4KUdMT0JfQ2FsY19Vc2VkX0JpdHMoRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jayk7CisJRGV2aWNlSW5mby5uQml0c0luUGFnZURhdGFTaXplID0KKwkJKHU4KUdMT0JfQ2FsY19Vc2VkX0JpdHMoRGV2aWNlSW5mby53UGFnZURhdGFTaXplKTsKKwlEZXZpY2VJbmZvLm5CaXRzSW5CbG9ja0RhdGFTaXplID0KKwkJKHU4KUdMT0JfQ2FsY19Vc2VkX0JpdHMoRGV2aWNlSW5mby53QmxvY2tEYXRhU2l6ZSk7CisKKyNpZiBDTURfRE1BCisJdG90YWxVc2VkQmFua3MgPSA0OworCXZhbGlkX2JhbmtzWzBdID0gMTsKKwl2YWxpZF9iYW5rc1sxXSA9IDE7CisJdmFsaWRfYmFua3NbMl0gPSAxOworCXZhbGlkX2JhbmtzWzNdID0gMTsKKyNlbmRpZgorCisJcmV0dXJuIFBBU1M7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBlbXVfRmxhc2hfUmVzZXQKKyogSW5wdXRzOiAgICAgICBub25lCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIChub3RpY2UgMD1vayBoZXJlKQorKiBEZXNjcmlwdGlvbjogICAgICAgICAgUmVzZXQgdGhlIGZsYXNoCisqCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLwordTE2IGVtdV9GbGFzaF9SZXNldCh2b2lkKQoreworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJcmV0dXJuIFBBU1M7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBlbXVfRXJhc2VfQmxvY2sKKyogSW5wdXRzOiAgICAgICBBZGRyZXNzCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIChub3RpY2UgMD1vayBoZXJlKQorKiBEZXNjcmlwdGlvbjogICAgICAgICAgRXJhc2UgYSBibG9jaworKgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3UxNiBlbXVfRXJhc2VfQmxvY2sodTMyIGJsb2NrX2FkZCkKK3sKKwlpbnQgaTsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJaWYgKGJsb2NrX2FkZCA+PSBEZXZpY2VJbmZvLndUb3RhbEJsb2NrcykgeworCQlwcmludGsoS0VSTl9FUlIgImVtdV9FcmFzZV9CbG9jayBlcnJvciEgIgorCQkgICAgICAgIlRvbyBiaWcgYmxvY2sgYWRkcmVzczogJWRcbiIsIGJsb2NrX2FkZCk7CisJCXJldHVybiBGQUlMOworCX0KKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiRXJhc2luZyBibG9jayAlZFxuIiwKKwkJKGludClibG9ja19hZGQpOworCisJZm9yIChpID0gYmxvY2tfYWRkICogR0xPQl9MTERfUEFHRVM7CisJICAgICBpIDwgKChibG9ja19hZGQgKyAxKSAqIEdMT0JfTExEX1BBR0VTKTsgaSsrKSB7CisJCWlmIChmbGFzaF9tZW1vcnlbaV0pIHsKKwkJCW1lbXNldCgodTggKikoZmxhc2hfbWVtb3J5W2ldKSwgMHhGRiwKKwkJCSAgICAgICBEZXZpY2VJbmZvLndQYWdlU2l6ZSAqIHNpemVvZih1OCkpOworCQl9CisJfQorCisJcmV0dXJuIFBBU1M7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBlbXVfV3JpdGVfUGFnZV9NYWluCisqIElucHV0czogICAgICAgV3JpdGUgYnVmZmVyIGFkZHJlc3MgcG9pbnRlcgorKiAgICAgICAgICAgICAgIEJsb2NrIG51bWJlcgorKiAgICAgICAgICAgICAgIFBhZ2UgIG51bWJlcgorKiAgICAgICAgICAgICAgIE51bWJlciBvZiBwYWdlcyB0byBwcm9jZXNzCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIChub3RpY2UgMD1vayBoZXJlKQorKiBEZXNjcmlwdGlvbjogIFdyaXRlIHRoZSBkYXRhIGluIHRoZSBidWZmZXIgdG8gbWFpbiBhcmVhIG9mIGZsYXNoCisqCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLwordTE2IGVtdV9Xcml0ZV9QYWdlX01haW4odTggKndyaXRlX2RhdGEsIHUzMiBCbG9jaywKKwkJCSAgIHUxNiBQYWdlLCB1MTYgUGFnZUNvdW50KQoreworCWludCBpOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlpZiAoQmxvY2sgPj0gRGV2aWNlSW5mby53VG90YWxCbG9ja3MpCisJCXJldHVybiBGQUlMOworCisJaWYgKFBhZ2UgKyBQYWdlQ291bnQgPiBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrKQorCQlyZXR1cm4gRkFJTDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiZW11X1dyaXRlX1BhZ2VfTWFpbjogIgorCQkgICAgICAgImxiYSAldSBQYWdlICV1IFBhZ2VDb3VudCAldVxuIiwKKwkJICAgICAgICh1bnNpZ25lZCBpbnQpQmxvY2ssCisJCSAgICAgICAodW5zaWduZWQgaW50KVBhZ2UsICh1bnNpZ25lZCBpbnQpUGFnZUNvdW50KTsKKworCWZvciAoaSA9IDA7IGkgPCBQYWdlQ291bnQ7IGkrKykgeworCQlpZiAoTlVMTCA9PSBmbGFzaF9tZW1vcnlbQmxvY2sgKiBHTE9CX0xMRF9QQUdFUyArIFBhZ2VdKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlJ1biBvdXQgb2YgbWVtb3J5XG4iKTsKKwkJCXJldHVybiBGQUlMOworCQl9CisJCW1lbWNweSgodTggKikgKGZsYXNoX21lbW9yeVtCbG9jayAqIEdMT0JfTExEX1BBR0VTICsgUGFnZV0pLAorCQkgICAgICAgd3JpdGVfZGF0YSwgRGV2aWNlSW5mby53UGFnZURhdGFTaXplKTsKKwkJd3JpdGVfZGF0YSArPSBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemU7CisJCVBhZ2UrKzsKKwl9CisKKwlyZXR1cm4gUEFTUzsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIGVtdV9SZWFkX1BhZ2VfTWFpbgorKiBJbnB1dHM6ICAgICAgIFJlYWQgYnVmZmVyIGFkZHJlc3MgcG9pbnRlcgorKiAgICAgICAgICAgICAgIEJsb2NrIG51bWJlcgorKiAgICAgICAgICAgICAgIFBhZ2UgIG51bWJlcgorKiAgICAgICAgICAgICAgIE51bWJlciBvZiBwYWdlcyB0byBwcm9jZXNzCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIChub3RpY2UgMD1vayBoZXJlKQorKiBEZXNjcmlwdGlvbjogIFJlYWQgdGhlIGRhdGEgZnJvbSB0aGUgZmxhc2ggbWFpbiBhcmVhIHRvIHRoZSBidWZmZXIKKyoKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCit1MTYgZW11X1JlYWRfUGFnZV9NYWluKHU4ICpyZWFkX2RhdGEsIHUzMiBCbG9jaywKKwkJCSAgdTE2IFBhZ2UsIHUxNiBQYWdlQ291bnQpCit7CisJaW50IGk7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWlmIChCbG9jayA+PSBEZXZpY2VJbmZvLndUb3RhbEJsb2NrcykKKwkJcmV0dXJuIEZBSUw7CisKKwlpZiAoUGFnZSArIFBhZ2VDb3VudCA+IERldmljZUluZm8ud1BhZ2VzUGVyQmxvY2spCisJCXJldHVybiBGQUlMOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJlbXVfUmVhZF9QYWdlX01haW46ICIKKwkJICAgICAgICJsYmEgJXUgUGFnZSAldSBQYWdlQ291bnQgJXVcbiIsCisJCSAgICAgICAodW5zaWduZWQgaW50KUJsb2NrLAorCQkgICAgICAgKHVuc2lnbmVkIGludClQYWdlLCAodW5zaWduZWQgaW50KVBhZ2VDb3VudCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUGFnZUNvdW50OyBpKyspIHsKKwkJaWYgKE5VTEwgPT0gZmxhc2hfbWVtb3J5W0Jsb2NrICogR0xPQl9MTERfUEFHRVMgKyBQYWdlXSkgeworCQkJbWVtc2V0KHJlYWRfZGF0YSwgMHhGRiwgRGV2aWNlSW5mby53UGFnZURhdGFTaXplKTsKKwkJfSBlbHNlIHsKKwkJCW1lbWNweShyZWFkX2RhdGEsCisJCQkgICAgICAgKHU4ICopIChmbGFzaF9tZW1vcnlbQmxvY2sgKiBHTE9CX0xMRF9QQUdFUworCQkJCQkJICAgICAgKyBQYWdlXSksCisJCQkgICAgICAgRGV2aWNlSW5mby53UGFnZURhdGFTaXplKTsKKwkJfQorCQlyZWFkX2RhdGEgKz0gRGV2aWNlSW5mby53UGFnZURhdGFTaXplOworCQlQYWdlKys7CisJfQorCisJcmV0dXJuIFBBU1M7Cit9CisKKyNpZm5kZWYgRUxET1JBCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgZW11X1JlYWRfUGFnZV9NYWluX1NwYXJlCisqIElucHV0czogICAgICAgV3JpdGUgQnVmZmVyCisqICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzCisqICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXIgc2l6ZQorKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAobm90aWNlIDA9b2sgaGVyZSkKKyogRGVzY3JpcHRpb246ICAgICAgICAgIFJlYWQgZnJvbSBmbGFzaCBtYWluK3NwYXJlIGFyZWEKKyoKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCit1MTYgZW11X1JlYWRfUGFnZV9NYWluX1NwYXJlKHU4ICpyZWFkX2RhdGEsIHUzMiBCbG9jaywKKwkJCQl1MTYgUGFnZSwgdTE2IFBhZ2VDb3VudCkKK3sKKwlpbnQgaTsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJaWYgKEJsb2NrID49IERldmljZUluZm8ud1RvdGFsQmxvY2tzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUmVhZCBQYWdlIE1haW4rU3BhcmUgIgorCQkgICAgICAgIkVycm9yOiBCbG9jayBBZGRyZXNzIHRvbyBiaWdcbiIpOworCQlyZXR1cm4gRkFJTDsKKwl9CisKKwlpZiAoUGFnZSArIFBhZ2VDb3VudCA+IERldmljZUluZm8ud1BhZ2VzUGVyQmxvY2spIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJSZWFkIFBhZ2UgTWFpbitTcGFyZSAiCisJCSAgICAgICAiRXJyb3I6IFBhZ2UgbnVtYmVyIHRvbyBiaWdcbiIpOworCQlyZXR1cm4gRkFJTDsKKwl9CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlJlYWQgUGFnZSBNYWluICsgU3BhcmUgLSAiCisJCSAgICAgICAiTm8uIG9mIHBhZ2VzICV1IGJsb2NrICV1IHN0YXJ0IHBhZ2UgJXVcbiIsCisJCSAgICAgICAodW5zaWduZWQgaW50KVBhZ2VDb3VudCwKKwkJICAgICAgICh1bnNpZ25lZCBpbnQpQmxvY2ssICh1bnNpZ25lZCBpbnQpUGFnZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUGFnZUNvdW50OyBpKyspIHsKKwkJaWYgKE5VTEwgPT0gZmxhc2hfbWVtb3J5W0Jsb2NrICogR0xPQl9MTERfUEFHRVMgKyBQYWdlXSkgeworCQkJbWVtc2V0KHJlYWRfZGF0YSwgMHhGRiwgRGV2aWNlSW5mby53UGFnZVNpemUpOworCQl9IGVsc2UgeworCQkJbWVtY3B5KHJlYWRfZGF0YSwgKHU4ICopIChmbGFzaF9tZW1vcnlbQmxvY2sgKgorCQkJCQkJCQkgR0xPQl9MTERfUEFHRVMKKwkJCQkJCQkJICsgUGFnZV0pLAorCQkJICAgICAgIERldmljZUluZm8ud1BhZ2VTaXplKTsKKwkJfQorCisJCXJlYWRfZGF0YSArPSBEZXZpY2VJbmZvLndQYWdlU2l6ZTsKKwkJUGFnZSsrOworCX0KKworCXJldHVybiBQQVNTOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgZW11X1dyaXRlX1BhZ2VfTWFpbl9TcGFyZQorKiBJbnB1dHM6ICAgICAgIFdyaXRlIGJ1ZmZlcgorKiAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcworKiAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyIGxlbmd0aAorKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAobm90aWNlIDA9b2sgaGVyZSkKKyogRGVzY3JpcHRpb246ICAgICAgICAgIFdyaXRlIHRoZSBidWZmZXIgdG8gbWFpbitzcGFyZSBhcmVhIG9mIGZsYXNoCisqCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLwordTE2IGVtdV9Xcml0ZV9QYWdlX01haW5fU3BhcmUodTggKndyaXRlX2RhdGEsIHUzMiBCbG9jaywKKwkJCQkgdTE2IFBhZ2UsIHUxNiBwYWdlX2NvdW50KQoreworCXUxNiBpOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlpZiAoQmxvY2sgPj0gRGV2aWNlSW5mby53VG90YWxCbG9ja3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJXcml0ZSBQYWdlIE1haW4gKyBTcGFyZSAiCisJCSAgICAgICAiRXJyb3I6IEJsb2NrIEFkZHJlc3MgdG9vIGJpZ1xuIik7CisJCXJldHVybiBGQUlMOworCX0KKworCWlmIChQYWdlICsgcGFnZV9jb3VudCA+IERldmljZUluZm8ud1BhZ2VzUGVyQmxvY2spIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJXcml0ZSBQYWdlIE1haW4gKyBTcGFyZSAiCisJCSAgICAgICAiRXJyb3I6IFBhZ2UgbnVtYmVyIHRvbyBiaWdcbiIpOworCQlyZXR1cm4gRkFJTDsKKwl9CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIldyaXRlIFBhZ2UgTWFpbitTcGFyZSAtICIKKwkJICAgICAgICJOby4gb2YgcGFnZXMgJXUgYmxvY2sgJXUgc3RhcnQgcGFnZSAldVxuIiwKKwkJICAgICAgICh1bnNpZ25lZCBpbnQpcGFnZV9jb3VudCwKKwkJICAgICAgICh1bnNpZ25lZCBpbnQpQmxvY2ssICh1bnNpZ25lZCBpbnQpUGFnZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGFnZV9jb3VudDsgaSsrKSB7CisJCWlmIChOVUxMID09IGZsYXNoX21lbW9yeVtCbG9jayAqIEdMT0JfTExEX1BBR0VTICsgUGFnZV0pIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiUnVuIG91dCBvZiBtZW1vcnkhXG4iKTsKKwkJCXJldHVybiBGQUlMOworCQl9CisJCW1lbWNweSgodTggKikgKGZsYXNoX21lbW9yeVtCbG9jayAqIEdMT0JfTExEX1BBR0VTICsgUGFnZV0pLAorCQkgICAgICAgd3JpdGVfZGF0YSwgRGV2aWNlSW5mby53UGFnZVNpemUpOworCQl3cml0ZV9kYXRhICs9IERldmljZUluZm8ud1BhZ2VTaXplOworCQlQYWdlKys7CisJfQorCisJcmV0dXJuIFBBU1M7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBlbXVfV3JpdGVfUGFnZV9TcGFyZQorKiBJbnB1dHM6ICAgICAgIFdyaXRlIGJ1ZmZlcgorKiAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcworKiAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyIHNpemUKKyogT3V0cHV0czogICAgICBQQVNTPTAgKG5vdGljZSAwPW9rIGhlcmUpCisqIERlc2NyaXB0aW9uOiAgICAgICAgICBXcml0ZSB0aGUgYnVmZmVyIGluIHRoZSBzcGFyZSBhcmVhCisqCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLwordTE2IGVtdV9Xcml0ZV9QYWdlX1NwYXJlKHU4ICp3cml0ZV9kYXRhLCB1MzIgQmxvY2ssCisJCQkgICAgdTE2IFBhZ2UsIHUxNiBQYWdlQ291bnQpCit7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlpZiAoQmxvY2sgPj0gRGV2aWNlSW5mby53VG90YWxCbG9ja3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJSZWFkIFBhZ2UgU3BhcmUgRXJyb3I6ICIKKwkJICAgICAgICJCbG9jayBBZGRyZXNzIHRvbyBiaWdcbiIpOworCQlyZXR1cm4gRkFJTDsKKwl9CisKKwlpZiAoUGFnZSArIFBhZ2VDb3VudCA+IERldmljZUluZm8ud1BhZ2VzUGVyQmxvY2spIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJSZWFkIFBhZ2UgU3BhcmUgRXJyb3I6ICIKKwkJICAgICAgICJQYWdlIG51bWJlciB0b28gYmlnXG4iKTsKKwkJcmV0dXJuIEZBSUw7CisJfQorCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJXcml0ZSBQYWdlIFNwYXJlLSAiCisJCSAgICAgICAiYmxvY2sgJXUgcGFnZSAldVxuIiwKKwkJICAgICAgICh1bnNpZ25lZCBpbnQpQmxvY2ssICh1bnNpZ25lZCBpbnQpUGFnZSk7CisKKwlpZiAoTlVMTCA9PSBmbGFzaF9tZW1vcnlbQmxvY2sgKiBHTE9CX0xMRF9QQUdFUyArIFBhZ2VdKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUnVuIG91dCBvZiBtZW1vcnkhXG4iKTsKKwkJcmV0dXJuIEZBSUw7CisJfQorCisJbWVtY3B5KCh1OCAqKSAoZmxhc2hfbWVtb3J5W0Jsb2NrICogR0xPQl9MTERfUEFHRVMgKyBQYWdlXSArCisJCQkgRGV2aWNlSW5mby53UGFnZURhdGFTaXplKSwgd3JpdGVfZGF0YSwKKwkgICAgICAgKERldmljZUluZm8ud1BhZ2VTaXplIC0gRGV2aWNlSW5mby53UGFnZURhdGFTaXplKSk7CisKKwlyZXR1cm4gUEFTUzsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIGVtdV9SZWFkX1BhZ2VfU3BhcmUKKyogSW5wdXRzOiAgICAgICBXcml0ZSBCdWZmZXIKKyogICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MKKyogICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlciBzaXplCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIChub3RpY2UgMD1vayBoZXJlKQorKiBEZXNjcmlwdGlvbjogICAgICAgICAgUmVhZCBkYXRhIGZyb20gdGhlIHNwYXJlIGFyZWEKKyoKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCit1MTYgZW11X1JlYWRfUGFnZV9TcGFyZSh1OCAqd3JpdGVfZGF0YSwgdTMyIEJsb2NrLAorCQkJICAgdTE2IFBhZ2UsIHUxNiBQYWdlQ291bnQpCit7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlpZiAoQmxvY2sgPj0gRGV2aWNlSW5mby53VG90YWxCbG9ja3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJSZWFkIFBhZ2UgU3BhcmUgIgorCQkgICAgICAgIkVycm9yOiBCbG9jayBBZGRyZXNzIHRvbyBiaWdcbiIpOworCQlyZXR1cm4gRkFJTDsKKwl9CisKKwlpZiAoUGFnZSArIFBhZ2VDb3VudCA+IERldmljZUluZm8ud1BhZ2VzUGVyQmxvY2spIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJSZWFkIFBhZ2UgU3BhcmUgIgorCQkgICAgICAgIkVycm9yOiBQYWdlIG51bWJlciB0b28gYmlnXG4iKTsKKwkJcmV0dXJuIEZBSUw7CisJfQorCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJSZWFkIFBhZ2UgU3BhcmUtICIKKwkJICAgICAgICJibG9jayAldSBwYWdlICV1XG4iLAorCQkgICAgICAgKHVuc2lnbmVkIGludClCbG9jaywgKHVuc2lnbmVkIGludClQYWdlKTsKKworCWlmIChOVUxMID09IGZsYXNoX21lbW9yeVtCbG9jayAqIEdMT0JfTExEX1BBR0VTICsgUGFnZV0pIHsKKwkJbWVtc2V0KHdyaXRlX2RhdGEsIDB4RkYsCisJCSAgICAgICAoRGV2aWNlSW5mby53UGFnZVNpemUgLSBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUpKTsKKwl9IGVsc2UgeworCQltZW1jcHkod3JpdGVfZGF0YSwKKwkJICAgICAgICh1OCAqKSAoZmxhc2hfbWVtb3J5W0Jsb2NrICogR0xPQl9MTERfUEFHRVMgKyBQYWdlXQorCQkJCSArIERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSksCisJCSAgICAgICAoRGV2aWNlSW5mby53UGFnZVNpemUgLSBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUpKTsKKwl9CisKKwlyZXR1cm4gUEFTUzsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIGVtdV9FbmFibGVfRGlzYWJsZV9JbnRlcnJ1cHRzCisqIElucHV0czogICAgICAgZW5hYmxlIG9yIGRpc2FibGUKKyogT3V0cHV0czogICAgICBub25lCisqIERlc2NyaXB0aW9uOiAgTk9QCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLwordm9pZCBlbXVfRW5hYmxlX0Rpc2FibGVfSW50ZXJydXB0cyh1MTYgSU5UX0VOQUJMRSkKK3sKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKK30KKwordTE2IGVtdV9HZXRfQmFkX0Jsb2NrKHUzMiBibG9jaykKK3sKKwlyZXR1cm4gMDsKK30KKworI2lmIENNRF9ETUEKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogU3VwcG9ydCBmb3IgQ0RNQSBmdW5jdGlvbnMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICBlbXVfQ0RNQV9GbGFzaF9Jbml0CisqICAgICAgICAgICBDRE1BX3Byb2Nlc3NfZGF0YSBjb21tYW5kICAgKHVzZSBMTERfQ0RNQSkKKyogICAgICAgICAgIENETUFfTWVtQ29weV9DTUQgICAgICAgICAgICAodXNlIExMRF9DRE1BKQorKiAgICAgICBlbXVfQ0RNQV9leGVjdXRlIGFsbCBjb21tYW5kcworKiAgICAgICBlbXVfQ0RNQV9FdmVudF9TdGF0dXMKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3UxNiBlbXVfQ0RNQV9GbGFzaF9Jbml0KHZvaWQpCit7CisJdTE2IGk7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfREVTQ1MgKyBNQVhfQ0hBTlM7IGkrKykgeworCQlQZW5kaW5nQ01EW2ldLkNNRCA9IDA7CisJCVBlbmRpbmdDTURbaV0uVGFnID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5EYXRhQWRkciA9IDA7CisJCVBlbmRpbmdDTURbaV0uQmxvY2sgPSAwOworCQlQZW5kaW5nQ01EW2ldLlBhZ2UgPSAwOworCQlQZW5kaW5nQ01EW2ldLlBhZ2VDb3VudCA9IDA7CisJCVBlbmRpbmdDTURbaV0uRGF0YURlc3RBZGRyID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5EYXRhU3JjQWRkciA9IDA7CisJCVBlbmRpbmdDTURbaV0uTWVtQ29weUJ5dGVDbnQgPSAwOworCQlQZW5kaW5nQ01EW2ldLkNoYW5TeW5jWzBdID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5DaGFuU3luY1sxXSA9IDA7CisJCVBlbmRpbmdDTURbaV0uQ2hhblN5bmNbMl0gPSAwOworCQlQZW5kaW5nQ01EW2ldLkNoYW5TeW5jWzNdID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5DaGFuU3luY1s0XSA9IDA7CisJCVBlbmRpbmdDTURbaV0uU3RhdHVzID0gMzsKKwl9CisKKwlyZXR1cm4gUEFTUzsKK30KKworc3RhdGljIHZvaWQgZW11X2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJLyogVE9ETzogIC4uLiAqLworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgQ0RNQV9FeGVjdXRlX0NNRHMKKyogSW5wdXRzOiAgICAgICB0YWdfY291bnQ6ICB0aGUgbnVtYmVyIG9mIHBlbmRpbmcgY21kcyB0byBkbworKiBPdXRwdXRzOiAgICAgIFBBU1MvRkFJTAorKiBEZXNjcmlwdGlvbjogIGV4ZWN1dGUgZWFjaCBjb21tYW5kIGluIHRoZSBwZW5kaW5nIENNRCBhcnJheQorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3UxNiBlbXVfQ0RNQV9FeGVjdXRlX0NNRHModTE2IHRhZ19jb3VudCkKK3sKKwl1MTYgaSwgajsKKwl1OCBDTUQ7CQkvKiBjbWQgcGFyYW1ldGVyICovCisJdTggKmRhdGE7CisJdTMyIGJsb2NrOworCXUxNiBwYWdlOworCXUxNiBjb3VudDsKKwl1MTYgc3RhdHVzID0gUEFTUzsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICJBdCBzdGFydCBvZiBFeGVjdXRlIENNRHM6ICIKKwkJICAgICAgICJUYWcgQ291bnQgJXVcbiIsIHRhZ19jb3VudCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdG90YWxVc2VkQmFua3M7IGkrKykgeworCQlQZW5kaW5nQ01EW2ldLkNNRCA9IERVTU1ZX0NNRDsKKwkJUGVuZGluZ0NNRFtpXS5UYWcgPSAweEZGOworCQlQZW5kaW5nQ01EW2ldLkJsb2NrID0KKwkJICAgIChEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyAvIHRvdGFsVXNlZEJhbmtzKSAqIGk7CisKKwkJZm9yIChqID0gMDsgaiA8PSBNQVhfQ0hBTlM7IGorKykKKwkJCVBlbmRpbmdDTURbaV0uQ2hhblN5bmNbal0gPSAwOworCX0KKworCUNETUFfRXhlY3V0ZV9DTURzKHRhZ19jb3VudCk7CisKKwlwcmludF9wZW5kaW5nX2NtZHModGFnX2NvdW50KTsKKworI2lmIERFQlVHX1NZTkMKKwl9CisJZGVidWdfc3luY19jbnQrKzsKKyNlbmRpZgorCisJZm9yIChpID0gTUFYX0NIQU5TOworCSAgICAgaSA8IHRhZ19jb3VudCArIE1BWF9DSEFOUzsgaSsrKSB7CisJCUNNRCA9IFBlbmRpbmdDTURbaV0uQ01EOworCQlkYXRhID0gUGVuZGluZ0NNRFtpXS5EYXRhQWRkcjsKKwkJYmxvY2sgPSBQZW5kaW5nQ01EW2ldLkJsb2NrOworCQlwYWdlID0gUGVuZGluZ0NNRFtpXS5QYWdlOworCQljb3VudCA9IFBlbmRpbmdDTURbaV0uUGFnZUNvdW50OworCisJCXN3aXRjaCAoQ01EKSB7CisJCWNhc2UgRVJBU0VfQ01EOgorCQkJZW11X0VyYXNlX0Jsb2NrKGJsb2NrKTsKKwkJCVBlbmRpbmdDTURbaV0uU3RhdHVzID0gUEFTUzsKKwkJCWJyZWFrOworCQljYXNlIFdSSVRFX01BSU5fQ01EOgorCQkJZW11X1dyaXRlX1BhZ2VfTWFpbihkYXRhLCBibG9jaywgcGFnZSwgY291bnQpOworCQkJUGVuZGluZ0NNRFtpXS5TdGF0dXMgPSBQQVNTOworCQkJYnJlYWs7CisJCWNhc2UgV1JJVEVfTUFJTl9TUEFSRV9DTUQ6CisJCQllbXVfV3JpdGVfUGFnZV9NYWluX1NwYXJlKGRhdGEsIGJsb2NrLCBwYWdlLCBjb3VudCk7CisJCQlQZW5kaW5nQ01EW2ldLlN0YXR1cyA9IFBBU1M7CisJCQlicmVhazsKKwkJY2FzZSBSRUFEX01BSU5fQ01EOgorCQkJZW11X1JlYWRfUGFnZV9NYWluKGRhdGEsIGJsb2NrLCBwYWdlLCBjb3VudCk7CisJCQlQZW5kaW5nQ01EW2ldLlN0YXR1cyA9IFBBU1M7CisJCQlicmVhazsKKwkJY2FzZSBNRU1DT1BZX0NNRDoKKwkJCW1lbWNweShQZW5kaW5nQ01EW2ldLkRhdGFEZXN0QWRkciwKKwkJCSAgICAgICBQZW5kaW5nQ01EW2ldLkRhdGFTcmNBZGRyLAorCQkJICAgICAgIFBlbmRpbmdDTURbaV0uTWVtQ29weUJ5dGVDbnQpOworCQljYXNlIERVTU1ZX0NNRDoKKwkJCVBlbmRpbmdDTURbaV0uU3RhdHVzID0gUEFTUzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJUGVuZGluZ0NNRFtpXS5TdGF0dXMgPSBGQUlMOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKgorCSAqIFRlbXBlcm9yeSBhZGRpbmcgY29kZSB0byByZXNldCBQZW5kaW5nQ01EIGFycmF5IGZvciBiYXNpYyB0ZXN0aW5nLgorCSAqIEl0IHNob3VsZCBiZSBkb25lIGF0IHRoZSBlbmQgb2YgIGV2ZW50IHN0YXR1cyBmdW5jdGlvbi4KKwkgKi8KKwlmb3IgKGkgPSB0YWdfY291bnQgKyBNQVhfQ0hBTlM7IGkgPCBNQVhfREVTQ1M7IGkrKykgeworCQlQZW5kaW5nQ01EW2ldLkNNRCA9IDA7CisJCVBlbmRpbmdDTURbaV0uVGFnID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5EYXRhQWRkciA9IDA7CisJCVBlbmRpbmdDTURbaV0uQmxvY2sgPSAwOworCQlQZW5kaW5nQ01EW2ldLlBhZ2UgPSAwOworCQlQZW5kaW5nQ01EW2ldLlBhZ2VDb3VudCA9IDA7CisJCVBlbmRpbmdDTURbaV0uRGF0YURlc3RBZGRyID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5EYXRhU3JjQWRkciA9IDA7CisJCVBlbmRpbmdDTURbaV0uTWVtQ29weUJ5dGVDbnQgPSAwOworCQlQZW5kaW5nQ01EW2ldLkNoYW5TeW5jWzBdID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5DaGFuU3luY1sxXSA9IDA7CisJCVBlbmRpbmdDTURbaV0uQ2hhblN5bmNbMl0gPSAwOworCQlQZW5kaW5nQ01EW2ldLkNoYW5TeW5jWzNdID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5DaGFuU3luY1s0XSA9IDA7CisJCVBlbmRpbmdDTURbaV0uU3RhdHVzID0gQ01EX05PVF9ET05FOworCX0KKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiQXQgZW5kIG9mIEV4ZWN1dGUgQ01Ecy5cbiIpOworCisJZW11X2lzcigwLCAwKTsgLyogVGhpcyBpcyBhIG51bGwgaXNyIG5vdy4gTmVlZCBmaWxsIGl0IGluIGZ1dHVyZSAqLworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIGVtdV9FdmVudF9TdGF0dXMKKyogSW5wdXRzOiAgICAgICBub25lCisqIE91dHB1dHM6ICAgICAgRXZlbnRfU3RhdHVzIGNvZGUKKyogRGVzY3JpcHRpb246ICBUaGlzIGZ1bmN0aW9uIGNhbiBhbHNvIGJlIHVzZWQgdG8gZm9yY2UgZXJyb3JzCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLwordTE2IGVtdV9DRE1BX0V2ZW50X1N0YXR1cyh2b2lkKQoreworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJcmV0dXJuIEVWRU5UX1BBU1M7Cit9CisKKyNlbmRpZiAvKiBDTURfRE1BICovCisjZW5kaWYgLyogIUVMRE9SQSAqLworI2VuZGlmIC8qIEZMQVNIX0VNVSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvbGxkX2VtdS5oIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvbGxkX2VtdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZjg0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9sbGRfZW11LmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIE5BTkQgRmxhc2ggQ29udHJvbGxlciBEZXZpY2UgRHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEludGVsIENvcnBvcmF0aW9uIGFuZCBpdHMgc3VwcGxpZXJzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX0xMRF9FTVVfCisjZGVmaW5lIF9MTERfRU1VXworCisjaW5jbHVkZSAiZmZzcG9ydC5oIgorI2luY2x1ZGUgImZmc2RlZnMuaCIKKworLyogcHJvdG90eXBlczogZW11bGF0b3IgQVBJIGZ1bmN0aW9ucyAqLworZXh0ZXJuIHUxNiBlbXVfRmxhc2hfUmVzZXQodm9pZCk7CitleHRlcm4gdTE2IGVtdV9GbGFzaF9Jbml0KHZvaWQpOworZXh0ZXJuIGludCBlbXVfRmxhc2hfUmVsZWFzZSh2b2lkKTsKK2V4dGVybiB1MTYgZW11X1JlYWRfRGV2aWNlX0lEKHZvaWQpOworZXh0ZXJuIHUxNiBlbXVfRXJhc2VfQmxvY2sodTMyIGJsb2NrX2FkZHIpOworZXh0ZXJuIHUxNiBlbXVfV3JpdGVfUGFnZV9NYWluKHU4ICp3cml0ZV9kYXRhLCB1MzIgQmxvY2ssCisJCQkJdTE2IFBhZ2UsIHUxNiBQYWdlQ291bnQpOworZXh0ZXJuIHUxNiBlbXVfUmVhZF9QYWdlX01haW4odTggKnJlYWRfZGF0YSwgdTMyIEJsb2NrLCB1MTYgUGFnZSwKKwkJCQkgdTE2IFBhZ2VDb3VudCk7CitleHRlcm4gdTE2IGVtdV9FdmVudF9TdGF0dXModm9pZCk7CitleHRlcm4gdm9pZCBlbXVfRW5hYmxlX0Rpc2FibGVfSW50ZXJydXB0cyh1MTYgSU5UX0VOQUJMRSk7CitleHRlcm4gdTE2IGVtdV9Xcml0ZV9QYWdlX01haW5fU3BhcmUodTggKndyaXRlX2RhdGEsIHUzMiBCbG9jaywKKwkJCQkJdTE2IFBhZ2UsIHUxNiBQYWdlQ291bnQpOworZXh0ZXJuIHUxNiBlbXVfV3JpdGVfUGFnZV9TcGFyZSh1OCAqd3JpdGVfZGF0YSwgdTMyIEJsb2NrLAorCQkJCQl1MTYgUGFnZSwgdTE2IFBhZ2VDb3VudCk7CitleHRlcm4gdTE2IGVtdV9SZWFkX1BhZ2VfTWFpbl9TcGFyZSh1OCAqcmVhZF9kYXRhLCB1MzIgQmxvY2ssCisJCQkJICAgICAgIHUxNiBQYWdlLCB1MTYgUGFnZUNvdW50KTsKK2V4dGVybiB1MTYgZW11X1JlYWRfUGFnZV9TcGFyZSh1OCAqcmVhZF9kYXRhLCB1MzIgQmxvY2ssIHUxNiBQYWdlLAorCQkJCSAgdTE2IFBhZ2VDb3VudCk7CitleHRlcm4gdTE2IGVtdV9HZXRfQmFkX0Jsb2NrKHUzMiBibG9jayk7CisKK3UxNiBlbXVfQ0RNQV9GbGFzaF9Jbml0KHZvaWQpOwordTE2IGVtdV9DRE1BX0V4ZWN1dGVfQ01Ecyh1MTYgdGFnX2NvdW50KTsKK3UxNiBlbXVfQ0RNQV9FdmVudF9TdGF0dXModm9pZCk7CisjZW5kaWYgLypfTExEX0VNVV8qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvbGxkX210ZC5jIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvbGxkX210ZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZTA1YjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9sbGRfbXRkLmMKQEAgLTAsMCArMSw2ODcgQEAKKy8qCisgKiBOQU5EIEZsYXNoIENvbnRyb2xsZXIgRGV2aWNlIERyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbiBhbmQgaXRzIHN1cHBsaWVycy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgImZsYXNoLmgiCisjaW5jbHVkZSAiZmZzZGVmcy5oIgorI2luY2x1ZGUgImxsZF9lbXUuaCIKKyNpbmNsdWRlICJsbGQuaCIKKyNpZiBDTURfRE1BCisjaW5jbHVkZSAibGxkX2NkbWEuaCIKKyNlbmRpZgorCisjZGVmaW5lIEdMT0JfTExEX1BBR0VTICAgICAgICAgICA2NAorI2RlZmluZSBHTE9CX0xMRF9QQUdFX1NJWkUgICAgICAgKDUxMisxNikKKyNkZWZpbmUgR0xPQl9MTERfUEFHRV9EQVRBX1NJWkUgIDUxMgorI2RlZmluZSBHTE9CX0xMRF9CTE9DS1MgICAgICAgICAgMjA0OAorCisjaWYgQ01EX0RNQQorI2luY2x1ZGUgImxsZF9jZG1hLmgiCit1MzIgdG90YWxVc2VkQmFua3M7Cit1MzIgdmFsaWRfYmFua3NbTUFYX0NIQU5TXTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IG10ZF9pbmZvICpzcGVjdHJhX210ZDsKK3N0YXRpYyBpbnQgbXRkZGV2ID0gLTE7Cittb2R1bGVfcGFyYW0obXRkZGV2LCBpbnQsIDApOworCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgbXRkX0ZsYXNoX0luaXQKKyogSW5wdXRzOiAgICAgICBub25lCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIChub3RpY2UgMD1vayBoZXJlKQorKiBEZXNjcmlwdGlvbjogIENyZWF0ZXMgJiBpbml0aWFsaXplcyB0aGUgZmxhc2ggUkFNIGFycmF5LgorKgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3UxNiBtdGRfRmxhc2hfSW5pdCh2b2lkKQoreworCWlmIChtdGRkZXYgPT0gLTEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJObyBNVEQgZGV2aWNlIHNwZWNpZmllZC4gR2l2ZSBtdGRkZXYgcGFyYW1ldGVyXG4iKTsKKwkJcmV0dXJuIEZBSUw7CisJfQorCisJc3BlY3RyYV9tdGQgPSBnZXRfbXRkX2RldmljZShOVUxMLCBtdGRkZXYpOworCWlmICghc3BlY3RyYV9tdGQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gb2J0YWluIE1URCBkZXZpY2UgIyVkXG4iLCBtdGRkZXYpOworCQlyZXR1cm4gRkFJTDsKKwl9CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCXJldHVybiBQQVNTOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgbXRkX0ZsYXNoX1JlbGVhc2UKKyogSW5wdXRzOiAgICAgICBub25lCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIChub3RpY2UgMD1vayBoZXJlKQorKiBEZXNjcmlwdGlvbjogICAgICAgICAgUmVsZWFzZXMgdGhlIGZsYXNoLgorKgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK2ludCBtdGRfRmxhc2hfUmVsZWFzZSh2b2lkKQoreworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCWlmICghc3BlY3RyYV9tdGQpCisJCXJldHVybiBQQVNTOworCisJcHV0X210ZF9kZXZpY2Uoc3BlY3RyYV9tdGQpOworCXNwZWN0cmFfbXRkID0gTlVMTDsKKworCXJldHVybiBQQVNTOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgbXRkX1JlYWRfRGV2aWNlX0lECisqIElucHV0czogICAgICAgbm9uZQorKiBPdXRwdXRzOiAgICAgIFBBU1M9MSBGQUlMPTAKKyogRGVzY3JpcHRpb246ICBSZWFkcyB0aGUgaW5mbyBmcm9tIHRoZSBjb250cm9sbGVyIHJlZ2lzdGVycy4KKyogICAgICAgICAgICAgICBTZXRzIHVwIERldmljZUluZm8gc3RydWN0dXJlIHdpdGggZGV2aWNlIHBhcmFtZXRlcnMKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCisKK3UxNiBtdGRfUmVhZF9EZXZpY2VfSUQodm9pZCkKK3sKKwl1aW50NjRfdCB0bXA7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlpZiAoIXNwZWN0cmFfbXRkKQorCQlyZXR1cm4gRkFJTDsKKworCURldmljZUluZm8ud0RldmljZU1ha2VyID0gMDsKKwlEZXZpY2VJbmZvLndEZXZpY2VUeXBlID0gODsKKwlEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9jayA9IFNQRUNUUkFfU1RBUlRfQkxPQ0s7CisJdG1wID0gc3BlY3RyYV9tdGQtPnNpemU7CisJZG9fZGl2KHRtcCwgc3BlY3RyYV9tdGQtPmVyYXNlc2l6ZSk7CisJRGV2aWNlSW5mby53VG90YWxCbG9ja3MgPSB0bXA7CisJRGV2aWNlSW5mby53U3BlY3RyYUVuZEJsb2NrID0gRGV2aWNlSW5mby53VG90YWxCbG9ja3MgLSAxOworCURldmljZUluZm8ud1BhZ2VzUGVyQmxvY2sgPSBzcGVjdHJhX210ZC0+ZXJhc2VzaXplIC8gc3BlY3RyYV9tdGQtPndyaXRlc2l6ZTsKKwlEZXZpY2VJbmZvLndQYWdlU2l6ZSA9IHNwZWN0cmFfbXRkLT53cml0ZXNpemUgKyBzcGVjdHJhX210ZC0+b29ic2l6ZTsKKwlEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUgPSBzcGVjdHJhX210ZC0+d3JpdGVzaXplOworCURldmljZUluZm8ud1BhZ2VTcGFyZVNpemUgPSBzcGVjdHJhX210ZC0+b29ic2l6ZTsKKwlEZXZpY2VJbmZvLndCbG9ja1NpemUgPSBEZXZpY2VJbmZvLndQYWdlU2l6ZSAqIERldmljZUluZm8ud1BhZ2VzUGVyQmxvY2s7CisJRGV2aWNlSW5mby53QmxvY2tEYXRhU2l6ZSA9IERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSAqIERldmljZUluZm8ud1BhZ2VzUGVyQmxvY2s7CisJRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtID0gKHUzMikgKERldmljZUluZm8ud1NwZWN0cmFFbmRCbG9jayAtCisJCQkJCQlEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9jaworCQkJCQkJKyAxKTsKKwlEZXZpY2VJbmZvLk1MQ0RldmljZSA9IDA7Ly9zcGVjdHJhX210ZC0+Y2VsbHR5cGUgJiBOQU5EX0NJX0NFTExUWVBFX01TSzsKKwlEZXZpY2VJbmZvLm5CaXRzSW5QYWdlTnVtYmVyID0KKwkJKHU4KUdMT0JfQ2FsY19Vc2VkX0JpdHMoRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jayk7CisJRGV2aWNlSW5mby5uQml0c0luUGFnZURhdGFTaXplID0KKwkJKHU4KUdMT0JfQ2FsY19Vc2VkX0JpdHMoRGV2aWNlSW5mby53UGFnZURhdGFTaXplKTsKKwlEZXZpY2VJbmZvLm5CaXRzSW5CbG9ja0RhdGFTaXplID0KKwkJKHU4KUdMT0JfQ2FsY19Vc2VkX0JpdHMoRGV2aWNlSW5mby53QmxvY2tEYXRhU2l6ZSk7CisKKyNpZiBDTURfRE1BCisJdG90YWxVc2VkQmFua3MgPSA0OworCXZhbGlkX2JhbmtzWzBdID0gMTsKKwl2YWxpZF9iYW5rc1sxXSA9IDE7CisJdmFsaWRfYmFua3NbMl0gPSAxOworCXZhbGlkX2JhbmtzWzNdID0gMTsKKyNlbmRpZgorCisJcmV0dXJuIFBBU1M7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBtdGRfRmxhc2hfUmVzZXQKKyogSW5wdXRzOiAgICAgICBub25lCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIChub3RpY2UgMD1vayBoZXJlKQorKiBEZXNjcmlwdGlvbjogICAgICAgICAgUmVzZXQgdGhlIGZsYXNoCisqCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLwordTE2IG10ZF9GbGFzaF9SZXNldCh2b2lkKQoreworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJcmV0dXJuIFBBU1M7Cit9CisKK3ZvaWQgZXJhc2VfY2FsbGJhY2soc3RydWN0IGVyYXNlX2luZm8gKmUpCit7CisJY29tcGxldGUoKHZvaWQgKillLT5wcml2KTsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIG10ZF9FcmFzZV9CbG9jaworKiBJbnB1dHM6ICAgICAgIEFkZHJlc3MKKyogT3V0cHV0czogICAgICBQQVNTPTAgKG5vdGljZSAwPW9rIGhlcmUpCisqIERlc2NyaXB0aW9uOiAgICAgICAgICBFcmFzZSBhIGJsb2NrCisqCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLwordTE2IG10ZF9FcmFzZV9CbG9jayh1MzIgYmxvY2tfYWRkKQoreworCXN0cnVjdCBlcmFzZV9pbmZvIGVyYXNlOworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGNvbXApOworCWludCByZXQ7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWlmIChibG9ja19hZGQgPj0gRGV2aWNlSW5mby53VG90YWxCbG9ja3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtdGRfRXJhc2VfQmxvY2sgZXJyb3IhICIKKwkJICAgICAgICJUb28gYmlnIGJsb2NrIGFkZHJlc3M6ICVkXG4iLCBibG9ja19hZGQpOworCQlyZXR1cm4gRkFJTDsKKwl9CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkVyYXNpbmcgYmxvY2sgJWRcbiIsCisJCShpbnQpYmxvY2tfYWRkKTsKKworCWVyYXNlLm10ZCA9IHNwZWN0cmFfbXRkOworCWVyYXNlLmNhbGxiYWNrID0gZXJhc2VfY2FsbGJhY2s7CisJZXJhc2UuYWRkciA9IGJsb2NrX2FkZCAqIHNwZWN0cmFfbXRkLT5lcmFzZXNpemU7CisJZXJhc2UubGVuID0gc3BlY3RyYV9tdGQtPmVyYXNlc2l6ZTsKKwllcmFzZS5wcml2ID0gKHVuc2lnbmVkIGxvbmcpJmNvbXA7CisKKwlyZXQgPSBzcGVjdHJhX210ZC0+ZXJhc2Uoc3BlY3RyYV9tdGQsICZlcmFzZSk7CisJaWYgKCFyZXQpIHsKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmY29tcCk7CisJCWlmIChlcmFzZS5zdGF0ZSAhPSBNVERfRVJBU0VfRE9ORSkKKwkJCXJldCA9IC1FSU87CisJfQorCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAibXRkX0VyYXNlX0Jsb2NrIGVycm9yISAiCisJCSAgICAgICAiZXJhc2Ugb2YgcmVnaW9uIFsweCVsbHgsIDB4JWxseF0gZmFpbGVkXG4iLAorCQkgICAgICAgZXJhc2UuYWRkciwgZXJhc2UubGVuKTsKKwkJcmV0dXJuIEZBSUw7CisJfQorCisJcmV0dXJuIFBBU1M7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBtdGRfV3JpdGVfUGFnZV9NYWluCisqIElucHV0czogICAgICAgV3JpdGUgYnVmZmVyIGFkZHJlc3MgcG9pbnRlcgorKiAgICAgICAgICAgICAgIEJsb2NrIG51bWJlcgorKiAgICAgICAgICAgICAgIFBhZ2UgIG51bWJlcgorKiAgICAgICAgICAgICAgIE51bWJlciBvZiBwYWdlcyB0byBwcm9jZXNzCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIChub3RpY2UgMD1vayBoZXJlKQorKiBEZXNjcmlwdGlvbjogIFdyaXRlIHRoZSBkYXRhIGluIHRoZSBidWZmZXIgdG8gbWFpbiBhcmVhIG9mIGZsYXNoCisqCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLwordTE2IG10ZF9Xcml0ZV9QYWdlX01haW4odTggKndyaXRlX2RhdGEsIHUzMiBCbG9jaywKKwkJCSAgIHUxNiBQYWdlLCB1MTYgUGFnZUNvdW50KQoreworCXNpemVfdCByZXRsZW47CisJaW50IHJldCA9IDA7CisKKwlpZiAoQmxvY2sgPj0gRGV2aWNlSW5mby53VG90YWxCbG9ja3MpCisJCXJldHVybiBGQUlMOworCisJaWYgKFBhZ2UgKyBQYWdlQ291bnQgPiBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrKQorCQlyZXR1cm4gRkFJTDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAibXRkX1dyaXRlX1BhZ2VfTWFpbjogIgorCQkgICAgICAgImxiYSAldSBQYWdlICV1IFBhZ2VDb3VudCAldVxuIiwKKwkJICAgICAgICh1bnNpZ25lZCBpbnQpQmxvY2ssCisJCSAgICAgICAodW5zaWduZWQgaW50KVBhZ2UsICh1bnNpZ25lZCBpbnQpUGFnZUNvdW50KTsKKworCisJd2hpbGUgKFBhZ2VDb3VudCkgeworCQlyZXQgPSBzcGVjdHJhX210ZC0+d3JpdGUoc3BlY3RyYV9tdGQsCisJCQkJCSAoQmxvY2sgKiBzcGVjdHJhX210ZC0+ZXJhc2VzaXplKSArIChQYWdlICogc3BlY3RyYV9tdGQtPndyaXRlc2l6ZSksCisJCQkJCSBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUsICZyZXRsZW4sIHdyaXRlX2RhdGEpOworCQlpZiAocmV0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzIGZhaWxlZCAlZFxuIiwgX19mdW5jX18sIHJldCk7CisJCQlyZXR1cm4gRkFJTDsKKwkJfQorCQl3cml0ZV9kYXRhICs9IERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZTsKKwkJUGFnZSsrOworCQlQYWdlQ291bnQtLTsKKwl9CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCXJldHVybiBQQVNTOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgbXRkX1JlYWRfUGFnZV9NYWluCisqIElucHV0czogICAgICAgUmVhZCBidWZmZXIgYWRkcmVzcyBwb2ludGVyCisqICAgICAgICAgICAgICAgQmxvY2sgbnVtYmVyCisqICAgICAgICAgICAgICAgUGFnZSAgbnVtYmVyCisqICAgICAgICAgICAgICAgTnVtYmVyIG9mIHBhZ2VzIHRvIHByb2Nlc3MKKyogT3V0cHV0czogICAgICBQQVNTPTAgKG5vdGljZSAwPW9rIGhlcmUpCisqIERlc2NyaXB0aW9uOiAgUmVhZCB0aGUgZGF0YSBmcm9tIHRoZSBmbGFzaCBtYWluIGFyZWEgdG8gdGhlIGJ1ZmZlcgorKgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3UxNiBtdGRfUmVhZF9QYWdlX01haW4odTggKnJlYWRfZGF0YSwgdTMyIEJsb2NrLAorCQkJICB1MTYgUGFnZSwgdTE2IFBhZ2VDb3VudCkKK3sKKwlzaXplX3QgcmV0bGVuOworCWludCByZXQgPSAwOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlpZiAoQmxvY2sgPj0gRGV2aWNlSW5mby53VG90YWxCbG9ja3MpCisJCXJldHVybiBGQUlMOworCisJaWYgKFBhZ2UgKyBQYWdlQ291bnQgPiBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrKQorCQlyZXR1cm4gRkFJTDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAibXRkX1JlYWRfUGFnZV9NYWluOiAiCisJCSAgICAgICAibGJhICV1IFBhZ2UgJXUgUGFnZUNvdW50ICV1XG4iLAorCQkgICAgICAgKHVuc2lnbmVkIGludClCbG9jaywKKwkJICAgICAgICh1bnNpZ25lZCBpbnQpUGFnZSwgKHVuc2lnbmVkIGludClQYWdlQ291bnQpOworCisKKwl3aGlsZSAoUGFnZUNvdW50KSB7CisJCXJldCA9IHNwZWN0cmFfbXRkLT5yZWFkKHNwZWN0cmFfbXRkLAorCQkJCQkoQmxvY2sgKiBzcGVjdHJhX210ZC0+ZXJhc2VzaXplKSArIChQYWdlICogc3BlY3RyYV9tdGQtPndyaXRlc2l6ZSksCisJCQkJCURldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSwgJnJldGxlbiwgcmVhZF9kYXRhKTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlcyBmYWlsZWQgJWRcbiIsIF9fZnVuY19fLCByZXQpOworCQkJcmV0dXJuIEZBSUw7CisJCX0KKwkJcmVhZF9kYXRhICs9IERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZTsKKwkJUGFnZSsrOworCQlQYWdlQ291bnQtLTsKKwl9CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCXJldHVybiBQQVNTOworfQorCisjaWZuZGVmIEVMRE9SQQorLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIG10ZF9SZWFkX1BhZ2VfTWFpbl9TcGFyZQorKiBJbnB1dHM6ICAgICAgIFdyaXRlIEJ1ZmZlcgorKiAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcworKiAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyIHNpemUKKyogT3V0cHV0czogICAgICBQQVNTPTAgKG5vdGljZSAwPW9rIGhlcmUpCisqIERlc2NyaXB0aW9uOiAgICAgICAgICBSZWFkIGZyb20gZmxhc2ggbWFpbitzcGFyZSBhcmVhCisqCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLwordTE2IG10ZF9SZWFkX1BhZ2VfTWFpbl9TcGFyZSh1OCAqcmVhZF9kYXRhLCB1MzIgQmxvY2ssCisJCQkJdTE2IFBhZ2UsIHUxNiBQYWdlQ291bnQpCit7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlpZiAoQmxvY2sgPj0gRGV2aWNlSW5mby53VG90YWxCbG9ja3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJSZWFkIFBhZ2UgTWFpbitTcGFyZSAiCisJCSAgICAgICAiRXJyb3I6IEJsb2NrIEFkZHJlc3MgdG9vIGJpZ1xuIik7CisJCXJldHVybiBGQUlMOworCX0KKworCWlmIChQYWdlICsgUGFnZUNvdW50ID4gRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jaykgeworCQlwcmludGsoS0VSTl9FUlIgIlJlYWQgUGFnZSBNYWluK1NwYXJlICIKKwkJICAgICAgICJFcnJvcjogUGFnZSBudW1iZXIgJWQrJWQgdG9vIGJpZyBpbiBibG9jayAlZFxuIiwKKwkJICAgICAgIFBhZ2UsIFBhZ2VDb3VudCwgQmxvY2spOworCQlyZXR1cm4gRkFJTDsKKwl9CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlJlYWQgUGFnZSBNYWluICsgU3BhcmUgLSAiCisJCSAgICAgICAiTm8uIG9mIHBhZ2VzICV1IGJsb2NrICV1IHN0YXJ0IHBhZ2UgJXVcbiIsCisJCSAgICAgICAodW5zaWduZWQgaW50KVBhZ2VDb3VudCwKKwkJICAgICAgICh1bnNpZ25lZCBpbnQpQmxvY2ssICh1bnNpZ25lZCBpbnQpUGFnZSk7CisKKworCXdoaWxlIChQYWdlQ291bnQpIHsKKwkJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKKwkJaW50IHJldDsKKworCQlvcHMubW9kZSA9IE1URF9PT0JfQVVUTzsKKwkJb3BzLmRhdGJ1ZiA9IHJlYWRfZGF0YTsKKwkJb3BzLmxlbiA9IERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZTsKKwkJb3BzLm9vYmJ1ZiA9IHJlYWRfZGF0YSArIERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSArIEJUU0lHX09GRlNFVDsKKwkJb3BzLm9vYmxlbiA9IEJUU0lHX0JZVEVTOworCQlvcHMub29ib2ZmcyA9IDA7CisKKwkJcmV0ID0gc3BlY3RyYV9tdGQtPnJlYWRfb29iKHNwZWN0cmFfbXRkLAorCQkJCQkgICAgKEJsb2NrICogc3BlY3RyYV9tdGQtPmVyYXNlc2l6ZSkgKyAoUGFnZSAqIHNwZWN0cmFfbXRkLT53cml0ZXNpemUpLAorCQkJCQkgICAgJm9wcyk7CisJCWlmIChyZXQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXMgZmFpbGVkICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwkJCXJldHVybiBGQUlMOworCQl9CisJCXJlYWRfZGF0YSArPSBEZXZpY2VJbmZvLndQYWdlU2l6ZTsKKwkJUGFnZSsrOworCQlQYWdlQ291bnQtLTsKKwl9CisKKwlyZXR1cm4gUEFTUzsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIG10ZF9Xcml0ZV9QYWdlX01haW5fU3BhcmUKKyogSW5wdXRzOiAgICAgICBXcml0ZSBidWZmZXIKKyogICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MKKyogICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBsZW5ndGgKKyogT3V0cHV0czogICAgICBQQVNTPTAgKG5vdGljZSAwPW9rIGhlcmUpCisqIERlc2NyaXB0aW9uOiAgICAgICAgICBXcml0ZSB0aGUgYnVmZmVyIHRvIG1haW4rc3BhcmUgYXJlYSBvZiBmbGFzaAorKgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3UxNiBtdGRfV3JpdGVfUGFnZV9NYWluX1NwYXJlKHU4ICp3cml0ZV9kYXRhLCB1MzIgQmxvY2ssCisJCQkJIHUxNiBQYWdlLCB1MTYgcGFnZV9jb3VudCkKK3sKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWlmIChCbG9jayA+PSBEZXZpY2VJbmZvLndUb3RhbEJsb2NrcykgeworCQlwcmludGsoS0VSTl9FUlIgIldyaXRlIFBhZ2UgTWFpbiArIFNwYXJlICIKKwkJICAgICAgICJFcnJvcjogQmxvY2sgQWRkcmVzcyB0b28gYmlnXG4iKTsKKwkJcmV0dXJuIEZBSUw7CisJfQorCisJaWYgKFBhZ2UgKyBwYWdlX2NvdW50ID4gRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jaykgeworCQlwcmludGsoS0VSTl9FUlIgIldyaXRlIFBhZ2UgTWFpbiArIFNwYXJlICIKKwkJICAgICAgICJFcnJvcjogUGFnZSBudW1iZXIgJWQrJWQgdG9vIGJpZyBpbiBibG9jayAlZFxuIiwKKwkJICAgICAgIFBhZ2UsIHBhZ2VfY291bnQsIEJsb2NrKTsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuIEZBSUw7CisJfQorCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJXcml0ZSBQYWdlIE1haW4rU3BhcmUgLSAiCisJCSAgICAgICAiTm8uIG9mIHBhZ2VzICV1IGJsb2NrICV1IHN0YXJ0IHBhZ2UgJXVcbiIsCisJCSAgICAgICAodW5zaWduZWQgaW50KXBhZ2VfY291bnQsCisJCSAgICAgICAodW5zaWduZWQgaW50KUJsb2NrLCAodW5zaWduZWQgaW50KVBhZ2UpOworCisJd2hpbGUgKHBhZ2VfY291bnQpIHsKKwkJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKKwkJaW50IHJldDsKKworCQlvcHMubW9kZSA9IE1URF9PT0JfQVVUTzsKKwkJb3BzLmRhdGJ1ZiA9IHdyaXRlX2RhdGE7CisJCW9wcy5sZW4gPSBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemU7CisJCW9wcy5vb2JidWYgPSB3cml0ZV9kYXRhICsgRGV2aWNlSW5mby53UGFnZURhdGFTaXplICsgQlRTSUdfT0ZGU0VUOworCQlvcHMub29ibGVuID0gQlRTSUdfQllURVM7CisJCW9wcy5vb2JvZmZzID0gMDsKKworCQlyZXQgPSBzcGVjdHJhX210ZC0+d3JpdGVfb29iKHNwZWN0cmFfbXRkLAorCQkJCQkgICAgIChCbG9jayAqIHNwZWN0cmFfbXRkLT5lcmFzZXNpemUpICsgKFBhZ2UgKiBzcGVjdHJhX210ZC0+d3JpdGVzaXplKSwKKwkJCQkJICAgICAmb3BzKTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlcyBmYWlsZWQgJWRcbiIsIF9fZnVuY19fLCByZXQpOworCQkJcmV0dXJuIEZBSUw7CisJCX0KKwkJd3JpdGVfZGF0YSArPSBEZXZpY2VJbmZvLndQYWdlU2l6ZTsKKwkJUGFnZSsrOworCQlwYWdlX2NvdW50LS07CisJfQorCisJcmV0dXJuIFBBU1M7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBtdGRfV3JpdGVfUGFnZV9TcGFyZQorKiBJbnB1dHM6ICAgICAgIFdyaXRlIGJ1ZmZlcgorKiAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcworKiAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyIHNpemUKKyogT3V0cHV0czogICAgICBQQVNTPTAgKG5vdGljZSAwPW9rIGhlcmUpCisqIERlc2NyaXB0aW9uOiAgICAgICAgICBXcml0ZSB0aGUgYnVmZmVyIGluIHRoZSBzcGFyZSBhcmVhCisqCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLwordTE2IG10ZF9Xcml0ZV9QYWdlX1NwYXJlKHU4ICp3cml0ZV9kYXRhLCB1MzIgQmxvY2ssCisJCQkgICAgdTE2IFBhZ2UsIHUxNiBQYWdlQ291bnQpCit7CisJV0FSTl9PTigxKTsKKwlyZXR1cm4gRkFJTDsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIG10ZF9SZWFkX1BhZ2VfU3BhcmUKKyogSW5wdXRzOiAgICAgICBXcml0ZSBCdWZmZXIKKyogICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MKKyogICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlciBzaXplCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIChub3RpY2UgMD1vayBoZXJlKQorKiBEZXNjcmlwdGlvbjogICAgICAgICAgUmVhZCBkYXRhIGZyb20gdGhlIHNwYXJlIGFyZWEKKyoKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCit1MTYgbXRkX1JlYWRfUGFnZV9TcGFyZSh1OCAqcmVhZF9kYXRhLCB1MzIgQmxvY2ssCisJCQkgICB1MTYgUGFnZSwgdTE2IFBhZ2VDb3VudCkKK3sKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWlmIChCbG9jayA+PSBEZXZpY2VJbmZvLndUb3RhbEJsb2NrcykgeworCQlwcmludGsoS0VSTl9FUlIgIlJlYWQgUGFnZSBTcGFyZSAiCisJCSAgICAgICAiRXJyb3I6IEJsb2NrIEFkZHJlc3MgdG9vIGJpZ1xuIik7CisJCXJldHVybiBGQUlMOworCX0KKworCWlmIChQYWdlICsgUGFnZUNvdW50ID4gRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jaykgeworCQlwcmludGsoS0VSTl9FUlIgIlJlYWQgUGFnZSBTcGFyZSAiCisJCSAgICAgICAiRXJyb3I6IFBhZ2UgbnVtYmVyIHRvbyBiaWdcbiIpOworCQlyZXR1cm4gRkFJTDsKKwl9CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlJlYWQgUGFnZSBTcGFyZS0gIgorCQkgICAgICAgImJsb2NrICV1IHBhZ2UgJXUgKCV1IHBhZ2VzKVxuIiwKKwkJICAgICAgICh1bnNpZ25lZCBpbnQpQmxvY2ssICh1bnNpZ25lZCBpbnQpUGFnZSwgUGFnZUNvdW50KTsKKworCXdoaWxlIChQYWdlQ291bnQpIHsKKwkJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKKwkJaW50IHJldDsKKworCQlvcHMubW9kZSA9IE1URF9PT0JfQVVUTzsKKwkJb3BzLmRhdGJ1ZiA9IE5VTEw7CisJCW9wcy5sZW4gPSAwOworCQlvcHMub29iYnVmID0gcmVhZF9kYXRhOworCQlvcHMub29ibGVuID0gQlRTSUdfQllURVM7CisJCW9wcy5vb2JvZmZzID0gMDsKKworCQlyZXQgPSBzcGVjdHJhX210ZC0+cmVhZF9vb2Ioc3BlY3RyYV9tdGQsCisJCQkJCSAgICAoQmxvY2sgKiBzcGVjdHJhX210ZC0+ZXJhc2VzaXplKSArIChQYWdlICogc3BlY3RyYV9tdGQtPndyaXRlc2l6ZSksCisJCQkJCSAgICAmb3BzKTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlcyBmYWlsZWQgJWRcbiIsIF9fZnVuY19fLCByZXQpOworCQkJcmV0dXJuIEZBSUw7CisJCX0KKworCQlyZWFkX2RhdGEgKz0gRGV2aWNlSW5mby53UGFnZVNpemU7CisJCVBhZ2UrKzsKKwkJUGFnZUNvdW50LS07CisJfQorCisJcmV0dXJuIFBBU1M7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBtdGRfRW5hYmxlX0Rpc2FibGVfSW50ZXJydXB0cworKiBJbnB1dHM6ICAgICAgIGVuYWJsZSBvciBkaXNhYmxlCisqIE91dHB1dHM6ICAgICAgbm9uZQorKiBEZXNjcmlwdGlvbjogIE5PUAorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3ZvaWQgbXRkX0VuYWJsZV9EaXNhYmxlX0ludGVycnVwdHModTE2IElOVF9FTkFCTEUpCit7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7Cit9CisKK3UxNiBtdGRfR2V0X0JhZF9CbG9jayh1MzIgYmxvY2spCit7CisJcmV0dXJuIDA7Cit9CisKKyNpZiBDTURfRE1BCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIFN1cHBvcnQgZm9yIENETUEgZnVuY3Rpb25zCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgbXRkX0NETUFfRmxhc2hfSW5pdAorKiAgICAgICAgICAgQ0RNQV9wcm9jZXNzX2RhdGEgY29tbWFuZCAgICh1c2UgTExEX0NETUEpCisqICAgICAgICAgICBDRE1BX01lbUNvcHlfQ01EICAgICAgICAgICAgKHVzZSBMTERfQ0RNQSkKKyogICAgICAgbXRkX0NETUFfZXhlY3V0ZSBhbGwgY29tbWFuZHMKKyogICAgICAgbXRkX0NETUFfRXZlbnRfU3RhdHVzCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCit1MTYgbXRkX0NETUFfRmxhc2hfSW5pdCh2b2lkKQoreworCXUxNiBpOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0RFU0NTICsgTUFYX0NIQU5TOyBpKyspIHsKKwkJUGVuZGluZ0NNRFtpXS5DTUQgPSAwOworCQlQZW5kaW5nQ01EW2ldLlRhZyA9IDA7CisJCVBlbmRpbmdDTURbaV0uRGF0YUFkZHIgPSAwOworCQlQZW5kaW5nQ01EW2ldLkJsb2NrID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5QYWdlID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5QYWdlQ291bnQgPSAwOworCQlQZW5kaW5nQ01EW2ldLkRhdGFEZXN0QWRkciA9IDA7CisJCVBlbmRpbmdDTURbaV0uRGF0YVNyY0FkZHIgPSAwOworCQlQZW5kaW5nQ01EW2ldLk1lbUNvcHlCeXRlQ250ID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5DaGFuU3luY1swXSA9IDA7CisJCVBlbmRpbmdDTURbaV0uQ2hhblN5bmNbMV0gPSAwOworCQlQZW5kaW5nQ01EW2ldLkNoYW5TeW5jWzJdID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5DaGFuU3luY1szXSA9IDA7CisJCVBlbmRpbmdDTURbaV0uQ2hhblN5bmNbNF0gPSAwOworCQlQZW5kaW5nQ01EW2ldLlN0YXR1cyA9IDM7CisJfQorCisJcmV0dXJuIFBBU1M7Cit9CisKK3N0YXRpYyB2b2lkIG10ZF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCS8qIFRPRE86ICAuLi4gKi8KK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIENETUFfRXhlY3V0ZV9DTURzCisqIElucHV0czogICAgICAgdGFnX2NvdW50OiAgdGhlIG51bWJlciBvZiBwZW5kaW5nIGNtZHMgdG8gZG8KKyogT3V0cHV0czogICAgICBQQVNTL0ZBSUwKKyogRGVzY3JpcHRpb246ICBleGVjdXRlIGVhY2ggY29tbWFuZCBpbiB0aGUgcGVuZGluZyBDTUQgYXJyYXkKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCit1MTYgbXRkX0NETUFfRXhlY3V0ZV9DTURzKHUxNiB0YWdfY291bnQpCit7CisJdTE2IGksIGo7CisJdTggQ01EOwkJLyogY21kIHBhcmFtZXRlciAqLworCXU4ICpkYXRhOworCXUzMiBibG9jazsKKwl1MTYgcGFnZTsKKwl1MTYgY291bnQ7CisJdTE2IHN0YXR1cyA9IFBBU1M7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiQXQgc3RhcnQgb2YgRXhlY3V0ZSBDTURzOiAiCisJCSAgICAgICAiVGFnIENvdW50ICV1XG4iLCB0YWdfY291bnQpOworCisJZm9yIChpID0gMDsgaSA8IHRvdGFsVXNlZEJhbmtzOyBpKyspIHsKKwkJUGVuZGluZ0NNRFtpXS5DTUQgPSBEVU1NWV9DTUQ7CisJCVBlbmRpbmdDTURbaV0uVGFnID0gMHhGRjsKKwkJUGVuZGluZ0NNRFtpXS5CbG9jayA9CisJCSAgICAoRGV2aWNlSW5mby53VG90YWxCbG9ja3MgLyB0b3RhbFVzZWRCYW5rcykgKiBpOworCisJCWZvciAoaiA9IDA7IGogPD0gTUFYX0NIQU5TOyBqKyspCisJCQlQZW5kaW5nQ01EW2ldLkNoYW5TeW5jW2pdID0gMDsKKwl9CisKKwlDRE1BX0V4ZWN1dGVfQ01Ecyh0YWdfY291bnQpOworCisjaWZkZWYgVkVSQk9TRQorCQlwcmludF9wZW5kaW5nX2NtZHModGFnX2NvdW50KTsKKyNlbmRpZgorI2lmIERFQlVHX1NZTkMKKwl9CisJZGVidWdfc3luY19jbnQrKzsKKyNlbmRpZgorCisJZm9yIChpID0gTUFYX0NIQU5TOworCSAgICAgaSA8IHRhZ19jb3VudCArIE1BWF9DSEFOUzsgaSsrKSB7CisJCUNNRCA9IFBlbmRpbmdDTURbaV0uQ01EOworCQlkYXRhID0gUGVuZGluZ0NNRFtpXS5EYXRhQWRkcjsKKwkJYmxvY2sgPSBQZW5kaW5nQ01EW2ldLkJsb2NrOworCQlwYWdlID0gUGVuZGluZ0NNRFtpXS5QYWdlOworCQljb3VudCA9IFBlbmRpbmdDTURbaV0uUGFnZUNvdW50OworCisJCXN3aXRjaCAoQ01EKSB7CisJCWNhc2UgRVJBU0VfQ01EOgorCQkJbXRkX0VyYXNlX0Jsb2NrKGJsb2NrKTsKKwkJCVBlbmRpbmdDTURbaV0uU3RhdHVzID0gUEFTUzsKKwkJCWJyZWFrOworCQljYXNlIFdSSVRFX01BSU5fQ01EOgorCQkJbXRkX1dyaXRlX1BhZ2VfTWFpbihkYXRhLCBibG9jaywgcGFnZSwgY291bnQpOworCQkJUGVuZGluZ0NNRFtpXS5TdGF0dXMgPSBQQVNTOworCQkJYnJlYWs7CisJCWNhc2UgV1JJVEVfTUFJTl9TUEFSRV9DTUQ6CisJCQltdGRfV3JpdGVfUGFnZV9NYWluX1NwYXJlKGRhdGEsIGJsb2NrLCBwYWdlLCBjb3VudCk7CisJCQlQZW5kaW5nQ01EW2ldLlN0YXR1cyA9IFBBU1M7CisJCQlicmVhazsKKwkJY2FzZSBSRUFEX01BSU5fQ01EOgorCQkJbXRkX1JlYWRfUGFnZV9NYWluKGRhdGEsIGJsb2NrLCBwYWdlLCBjb3VudCk7CisJCQlQZW5kaW5nQ01EW2ldLlN0YXR1cyA9IFBBU1M7CisJCQlicmVhazsKKwkJY2FzZSBNRU1DT1BZX0NNRDoKKwkJCW1lbWNweShQZW5kaW5nQ01EW2ldLkRhdGFEZXN0QWRkciwKKwkJCSAgICAgICBQZW5kaW5nQ01EW2ldLkRhdGFTcmNBZGRyLAorCQkJICAgICAgIFBlbmRpbmdDTURbaV0uTWVtQ29weUJ5dGVDbnQpOworCQljYXNlIERVTU1ZX0NNRDoKKwkJCVBlbmRpbmdDTURbaV0uU3RhdHVzID0gUEFTUzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJUGVuZGluZ0NNRFtpXS5TdGF0dXMgPSBGQUlMOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKgorCSAqIFRlbXBlcm9yeSBhZGRpbmcgY29kZSB0byByZXNldCBQZW5kaW5nQ01EIGFycmF5IGZvciBiYXNpYyB0ZXN0aW5nLgorCSAqIEl0IHNob3VsZCBiZSBkb25lIGF0IHRoZSBlbmQgb2YgIGV2ZW50IHN0YXR1cyBmdW5jdGlvbi4KKwkgKi8KKwlmb3IgKGkgPSB0YWdfY291bnQgKyBNQVhfQ0hBTlM7IGkgPCBNQVhfREVTQ1M7IGkrKykgeworCQlQZW5kaW5nQ01EW2ldLkNNRCA9IDA7CisJCVBlbmRpbmdDTURbaV0uVGFnID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5EYXRhQWRkciA9IDA7CisJCVBlbmRpbmdDTURbaV0uQmxvY2sgPSAwOworCQlQZW5kaW5nQ01EW2ldLlBhZ2UgPSAwOworCQlQZW5kaW5nQ01EW2ldLlBhZ2VDb3VudCA9IDA7CisJCVBlbmRpbmdDTURbaV0uRGF0YURlc3RBZGRyID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5EYXRhU3JjQWRkciA9IDA7CisJCVBlbmRpbmdDTURbaV0uTWVtQ29weUJ5dGVDbnQgPSAwOworCQlQZW5kaW5nQ01EW2ldLkNoYW5TeW5jWzBdID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5DaGFuU3luY1sxXSA9IDA7CisJCVBlbmRpbmdDTURbaV0uQ2hhblN5bmNbMl0gPSAwOworCQlQZW5kaW5nQ01EW2ldLkNoYW5TeW5jWzNdID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5DaGFuU3luY1s0XSA9IDA7CisJCVBlbmRpbmdDTURbaV0uU3RhdHVzID0gQ01EX05PVF9ET05FOworCX0KKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiQXQgZW5kIG9mIEV4ZWN1dGUgQ01Ecy5cbiIpOworCisJbXRkX2lzcigwLCAwKTsgLyogVGhpcyBpcyBhIG51bGwgaXNyIG5vdy4gTmVlZCBmaWxsIGl0IGluIGZ1dHVyZSAqLworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIG10ZF9FdmVudF9TdGF0dXMKKyogSW5wdXRzOiAgICAgICBub25lCisqIE91dHB1dHM6ICAgICAgRXZlbnRfU3RhdHVzIGNvZGUKKyogRGVzY3JpcHRpb246ICBUaGlzIGZ1bmN0aW9uIGNhbiBhbHNvIGJlIHVzZWQgdG8gZm9yY2UgZXJyb3JzCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLwordTE2IG10ZF9DRE1BX0V2ZW50X1N0YXR1cyh2b2lkKQoreworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJcmV0dXJuIEVWRU5UX1BBU1M7Cit9CisKKyNlbmRpZiAvKiBDTURfRE1BICovCisjZW5kaWYgLyogIUVMRE9SQSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvbGxkX210ZC5oIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvbGxkX210ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlODFlZTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9sbGRfbXRkLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIE5BTkQgRmxhc2ggQ29udHJvbGxlciBEZXZpY2UgRHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEludGVsIENvcnBvcmF0aW9uIGFuZCBpdHMgc3VwcGxpZXJzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX0xMRF9NVERfCisjZGVmaW5lIF9MTERfTVREXworCisjaW5jbHVkZSAiZmZzcG9ydC5oIgorI2luY2x1ZGUgImZmc2RlZnMuaCIKKworLyogcHJvdG90eXBlczogTVREIEFQSSBmdW5jdGlvbnMgKi8KK2V4dGVybiB1MTYgbXRkX0ZsYXNoX1Jlc2V0KHZvaWQpOworZXh0ZXJuIHUxNiBtdGRfRmxhc2hfSW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgbXRkX0ZsYXNoX1JlbGVhc2Uodm9pZCk7CitleHRlcm4gdTE2IG10ZF9SZWFkX0RldmljZV9JRCh2b2lkKTsKK2V4dGVybiB1MTYgbXRkX0VyYXNlX0Jsb2NrKHUzMiBibG9ja19hZGRyKTsKK2V4dGVybiB1MTYgbXRkX1dyaXRlX1BhZ2VfTWFpbih1OCAqd3JpdGVfZGF0YSwgdTMyIEJsb2NrLAorCQkJCXUxNiBQYWdlLCB1MTYgUGFnZUNvdW50KTsKK2V4dGVybiB1MTYgbXRkX1JlYWRfUGFnZV9NYWluKHU4ICpyZWFkX2RhdGEsIHUzMiBCbG9jaywgdTE2IFBhZ2UsCisJCQkJIHUxNiBQYWdlQ291bnQpOworZXh0ZXJuIHUxNiBtdGRfRXZlbnRfU3RhdHVzKHZvaWQpOworZXh0ZXJuIHZvaWQgbXRkX0VuYWJsZV9EaXNhYmxlX0ludGVycnVwdHModTE2IElOVF9FTkFCTEUpOworZXh0ZXJuIHUxNiBtdGRfV3JpdGVfUGFnZV9NYWluX1NwYXJlKHU4ICp3cml0ZV9kYXRhLCB1MzIgQmxvY2ssCisJCQkJCXUxNiBQYWdlLCB1MTYgUGFnZUNvdW50KTsKK2V4dGVybiB1MTYgbXRkX1dyaXRlX1BhZ2VfU3BhcmUodTggKndyaXRlX2RhdGEsIHUzMiBCbG9jaywKKwkJCQkJdTE2IFBhZ2UsIHUxNiBQYWdlQ291bnQpOworZXh0ZXJuIHUxNiBtdGRfUmVhZF9QYWdlX01haW5fU3BhcmUodTggKnJlYWRfZGF0YSwgdTMyIEJsb2NrLAorCQkJCSAgICAgICB1MTYgUGFnZSwgdTE2IFBhZ2VDb3VudCk7CitleHRlcm4gdTE2IG10ZF9SZWFkX1BhZ2VfU3BhcmUodTggKnJlYWRfZGF0YSwgdTMyIEJsb2NrLCB1MTYgUGFnZSwKKwkJCQkgIHUxNiBQYWdlQ291bnQpOworZXh0ZXJuIHUxNiBtdGRfR2V0X0JhZF9CbG9jayh1MzIgYmxvY2spOworCit1MTYgbXRkX0NETUFfRmxhc2hfSW5pdCh2b2lkKTsKK3UxNiBtdGRfQ0RNQV9FeGVjdXRlX0NNRHModTE2IHRhZ19jb3VudCk7Cit1MTYgbXRkX0NETUFfRXZlbnRfU3RhdHVzKHZvaWQpOworI2VuZGlmIC8qX0xMRF9NVERfKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2xsZF9uYW5kLmMgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9sbGRfbmFuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYzNhZDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9sbGRfbmFuZC5jCkBAIC0wLDAgKzEsMjYwMSBAQAorLyoKKyAqIE5BTkQgRmxhc2ggQ29udHJvbGxlciBEZXZpY2UgRHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEludGVsIENvcnBvcmF0aW9uIGFuZCBpdHMgc3VwcGxpZXJzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJsbGQuaCIKKyNpbmNsdWRlICJsbGRfbmFuZC5oIgorI2luY2x1ZGUgImxsZF9jZG1hLmgiCisKKyNpbmNsdWRlICJzcGVjdHJhc3djb25maWcuaCIKKyNpbmNsdWRlICJmbGFzaC5oIgorI2luY2x1ZGUgImZmc2RlZnMuaCIKKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKKyNpbmNsdWRlICJuYW5kX3JlZ3MuaCIKKworI2RlZmluZSBTUEVDVFJBX05BTkRfTkFNRSAgICAibmQiCisKKyNkZWZpbmUgQ0VJTF9ESVYoWCwgWSkgKCgoWCklKFkpKSA/ICgoWCkvKFkpKzEpIDogKChYKS8oWSkpKQorI2RlZmluZSBNQVhfUEFHRVNfUEVSX1JXICAgICAgICAxMjgKKworI2RlZmluZSBJTlRfSURMRV9TVEFURSAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJTlRfUkVBRF9QQUdFX01BSU4gICAgMHgwMQorI2RlZmluZSBJTlRfV1JJVEVfUEFHRV9NQUlOICAgIDB4MDIKKyNkZWZpbmUgSU5UX1BJUEVMSU5FX1JFQURfQUhFQUQgICAgMHgwNAorI2RlZmluZSBJTlRfUElQRUxJTkVfV1JJVEVfQUhFQUQgICAgMHgwOAorI2RlZmluZSBJTlRfTVVMVElfUExBTkVfUkVBRCAgICAweDEwCisjZGVmaW5lIElOVF9NVUxUSV9QTEFORV9XUklURSAgICAweDExCisKK3N0YXRpYyB1MzIgZW5hYmxlX2VjYzsKKworc3RydWN0IG1yc3RfbmFuZF9pbmZvIGluZm87CisKK2ludCB0b3RhbFVzZWRCYW5rczsKK3UzMiBHTE9CX3ZhbGlkX2JhbmtzW0xMRF9NQVhfRkxBU0hfQkFOS1NdOworCit2b2lkIF9faW9tZW0gKkZsYXNoUmVnOwordm9pZCBfX2lvbWVtICpGbGFzaE1lbTsKKwordTE2IGNvbmZfcGFyYW1ldGVyc1tdID0geworCTB4MDAwMCwKKwkweDAwMDAsCisJMHgwMUY0LAorCTB4MDFGNCwKKwkweDAxRjQsCisJMHgwMUY0LAorCTB4MDAwMCwKKwkweDAwMDAsCisJMHgwMDAxLAorCTB4MDAwMCwKKwkweDAwMDAsCisJMHgwMDAwLAorCTB4MDAwMCwKKwkweDAwNDAsCisJMHgwMDAxLAorCTB4MDAwQSwKKwkweDAwMEEsCisJMHgwMDBBLAorCTB4MDAwMCwKKwkweDAwMDAsCisJMHgwMDA1LAorCTB4MDAxMiwKKwkweDAwMEMKK307CisKK3UxNiAgIE5BTkRfR2V0X0JhZF9CbG9jayh1MzIgYmxvY2spCit7CisJdTMyIHN0YXR1cyA9IFBBU1M7CisJdTMyIGZsYWdfYnl0ZXMgID0gMDsKKwl1MzIgc2tpcF9ieXRlcyAgPSBEZXZpY2VJbmZvLndTcGFyZVNraXBCeXRlczsKKwl1MzIgcGFnZSwgaTsKKwl1OCAqcFJlYWRTcGFyZUJ1ZiA9IGJ1Zl9nZXRfYmFkX2Jsb2NrOworCisJaWYgKGVuYWJsZV9lY2MpCisJCWZsYWdfYnl0ZXMgPSBEZXZpY2VJbmZvLndOdW1QYWdlU3BhcmVGbGFnOworCisJZm9yIChwYWdlID0gMDsgcGFnZSA8IDI7IHBhZ2UrKykgeworCQlzdGF0dXMgPSBOQU5EX1JlYWRfUGFnZV9TcGFyZShwUmVhZFNwYXJlQnVmLCBibG9jaywgcGFnZSwgMSk7CisJCWlmIChzdGF0dXMgIT0gUEFTUykKKwkJCXJldHVybiBSRUFEX0VSUk9SOworCQlmb3IgKGkgPSBmbGFnX2J5dGVzOyBpIDwgKGZsYWdfYnl0ZXMgKyBza2lwX2J5dGVzKTsgaSsrKQorCQkJaWYgKHBSZWFkU3BhcmVCdWZbaV0gIT0gMHhmZikKKwkJCQlyZXR1cm4gREVGRUNUSVZFX0JMT0NLOworCX0KKworCWZvciAocGFnZSA9IDE7IHBhZ2UgPCAzOyBwYWdlKyspIHsKKwkJc3RhdHVzID0gTkFORF9SZWFkX1BhZ2VfU3BhcmUocFJlYWRTcGFyZUJ1ZiwgYmxvY2ssCisJCQlEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrIC0gcGFnZSAsIDEpOworCQlpZiAoc3RhdHVzICE9IFBBU1MpCisJCQlyZXR1cm4gUkVBRF9FUlJPUjsKKwkJZm9yIChpID0gZmxhZ19ieXRlczsgaSA8IChmbGFnX2J5dGVzICsgc2tpcF9ieXRlcyk7IGkrKykKKwkJCWlmIChwUmVhZFNwYXJlQnVmW2ldICE9IDB4ZmYpCisJCQkJcmV0dXJuIERFRkVDVElWRV9CTE9DSzsKKwl9CisKKwlyZXR1cm4gR09PRF9CTE9DSzsKK30KKworCit1MTYgTkFORF9GbGFzaF9SZXNldCh2b2lkKQoreworCXUzMiBpOworCXUzMiBpbnRyX3N0YXR1c19yc3RfY29tcFs0XSA9IHtJTlRSX1NUQVRVUzBfX1JTVF9DT01QLAorCQlJTlRSX1NUQVRVUzFfX1JTVF9DT01QLAorCQlJTlRSX1NUQVRVUzJfX1JTVF9DT01QLAorCQlJTlRSX1NUQVRVUzNfX1JTVF9DT01QfTsKKwl1MzIgaW50cl9zdGF0dXNfdGltZV9vdXRbNF0gPSB7SU5UUl9TVEFUVVMwX19USU1FX09VVCwKKwkJSU5UUl9TVEFUVVMxX19USU1FX09VVCwKKwkJSU5UUl9TVEFUVVMyX19USU1FX09VVCwKKwkJSU5UUl9TVEFUVVMzX19USU1FX09VVH07CisJdTMyIGludHJfc3RhdHVzWzRdID0ge0lOVFJfU1RBVFVTMCwgSU5UUl9TVEFUVVMxLAorCQlJTlRSX1NUQVRVUzIsIElOVFJfU1RBVFVTM307CisJdTMyIGRldmljZV9yZXNldF9iYW5rc1s0XSA9IHtERVZJQ0VfUkVTRVRfX0JBTkswLAorCQlERVZJQ0VfUkVTRVRfX0JBTksxLAorCQlERVZJQ0VfUkVTRVRfX0JBTksyLAorCQlERVZJQ0VfUkVTRVRfX0JBTkszfTsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJZm9yIChpID0gMCA7IGkgPCBMTERfTUFYX0ZMQVNIX0JBTktTOyBpKyspCisJCWlvd3JpdGUzMihpbnRyX3N0YXR1c19yc3RfY29tcFtpXSB8IGludHJfc3RhdHVzX3RpbWVfb3V0W2ldLAorCQlGbGFzaFJlZyArIGludHJfc3RhdHVzW2ldKTsKKworCWZvciAoaSA9IDAgOyBpIDwgTExEX01BWF9GTEFTSF9CQU5LUzsgaSsrKSB7CisJCWlvd3JpdGUzMihkZXZpY2VfcmVzZXRfYmFua3NbaV0sIEZsYXNoUmVnICsgREVWSUNFX1JFU0VUKTsKKwkJd2hpbGUgKCEoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1c1tpXSkgJgorCQkJKGludHJfc3RhdHVzX3JzdF9jb21wW2ldIHwgaW50cl9zdGF0dXNfdGltZV9vdXRbaV0pKSkKKwkJCTsKKwkJaWYgKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXNbaV0pICYKKwkJCWludHJfc3RhdHVzX3RpbWVfb3V0W2ldKQorCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJCSJOQU5EIFJlc2V0IG9wZXJhdGlvbiB0aW1lZCBvdXQgb24gYmFuayAlZFxuIiwgaSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IExMRF9NQVhfRkxBU0hfQkFOS1M7IGkrKykKKwkJaW93cml0ZTMyKGludHJfc3RhdHVzX3JzdF9jb21wW2ldIHwgaW50cl9zdGF0dXNfdGltZV9vdXRbaV0sCisJCQlGbGFzaFJlZyArIGludHJfc3RhdHVzW2ldKTsKKworCXJldHVybiBQQVNTOworfQorCitzdGF0aWMgdm9pZCBOQU5EX09ORmlfVGltaW5nX01vZGUodTE2IG1vZGUpCit7CisJdTE2IFRyZWFbNl0gPSB7NDAsIDMwLCAyNSwgMjAsIDIwLCAxNn07CisJdTE2IFRycFs2XSA9IHs1MCwgMjUsIDE3LCAxNSwgMTIsIDEwfTsKKwl1MTYgVHJlaFs2XSA9IHszMCwgMTUsIDE1LCAxMCwgMTAsIDd9OworCXUxNiBUcmNbNl0gPSB7MTAwLCA1MCwgMzUsIDMwLCAyNSwgMjB9OworCXUxNiBUcmhvaFs2XSA9IHswLCAxNSwgMTUsIDE1LCAxNSwgMTV9OworCXUxNiBUcmxvaFs2XSA9IHswLCAwLCAwLCAwLCA1LCA1fTsKKwl1MTYgVGNlYVs2XSA9IHsxMDAsIDQ1LCAzMCwgMjUsIDI1LCAyNX07CisJdTE2IFRhZGxbNl0gPSB7MjAwLCAxMDAsIDEwMCwgMTAwLCA3MCwgNzB9OworCXUxNiBUcmh3WzZdID0gezIwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDB9OworCXUxNiBUcmh6WzZdID0gezIwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDB9OworCXUxNiBUd2hyWzZdID0gezEyMCwgODAsIDgwLCA2MCwgNjAsIDYwfTsKKwl1MTYgVGNzWzZdID0gezcwLCAzNSwgMjUsIDI1LCAyMCwgMTV9OworCisJdTE2IFRjbHNSaXNpbmcgPSAxOworCXUxNiBkYXRhX2ludmFsaWRfcmhvaCwgZGF0YV9pbnZhbGlkX3Jsb2gsIGRhdGFfaW52YWxpZDsKKwl1MTYgZHZfd2luZG93ID0gMDsKKwl1MTYgZW5fbG8sIGVuX2hpOworCXUxNiBhY2NfY2xrczsKKwl1MTYgYWRkcl8yX2RhdGEsIHJlXzJfd2UsIHJlXzJfcmUsIHdlXzJfcmUsIGNzX2NudDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJZW5fbG8gPSBDRUlMX0RJVihUcnBbbW9kZV0sIENMS19YKTsKKwllbl9oaSA9IENFSUxfRElWKFRyZWhbbW9kZV0sIENMS19YKTsKKworI2lmIE9ORklfQkxPT01fVElNRQorCWlmICgoZW5faGkgKiBDTEtfWCkgPCAoVHJlaFttb2RlXSArIDIpKQorCQllbl9oaSsrOworI2VuZGlmCisKKwlpZiAoKGVuX2xvICsgZW5faGkpICogQ0xLX1ggPCBUcmNbbW9kZV0pCisJCWVuX2xvICs9IENFSUxfRElWKChUcmNbbW9kZV0gLSAoZW5fbG8gKyBlbl9oaSkgKiBDTEtfWCksIENMS19YKTsKKworCWlmICgoZW5fbG8gKyBlbl9oaSkgPCBDTEtfTVVMVEkpCisJCWVuX2xvICs9IENMS19NVUxUSSAtIGVuX2xvIC0gZW5faGk7CisKKwl3aGlsZSAoZHZfd2luZG93IDwgOCkgeworCQlkYXRhX2ludmFsaWRfcmhvaCA9IGVuX2xvICogQ0xLX1ggKyBUcmhvaFttb2RlXTsKKworCQlkYXRhX2ludmFsaWRfcmxvaCA9IChlbl9sbyArIGVuX2hpKSAqIENMS19YICsgVHJsb2hbbW9kZV07CisKKwkJZGF0YV9pbnZhbGlkID0KKwkJICAgIGRhdGFfaW52YWxpZF9yaG9oIDwKKwkJICAgIGRhdGFfaW52YWxpZF9ybG9oID8gZGF0YV9pbnZhbGlkX3Job2ggOiBkYXRhX2ludmFsaWRfcmxvaDsKKworCQlkdl93aW5kb3cgPSBkYXRhX2ludmFsaWQgLSBUcmVhW21vZGVdOworCisJCWlmIChkdl93aW5kb3cgPCA4KQorCQkJZW5fbG8rKzsKKwl9CisKKwlhY2NfY2xrcyA9IENFSUxfRElWKFRyZWFbbW9kZV0sIENMS19YKTsKKworCXdoaWxlICgoKGFjY19jbGtzICogQ0xLX1gpIC0gVHJlYVttb2RlXSkgPCAzKQorCQlhY2NfY2xrcysrOworCisJaWYgKChkYXRhX2ludmFsaWQgLSBhY2NfY2xrcyAqIENMS19YKSA8IDIpCisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sICIlcywgTGluZSAlZDogV2FybmluZyFcbiIsCisJCQlfX0ZJTEVfXywgX19MSU5FX18pOworCisJYWRkcl8yX2RhdGEgPSBDRUlMX0RJVihUYWRsW21vZGVdLCBDTEtfWCk7CisJcmVfMl93ZSA9IENFSUxfRElWKFRyaHdbbW9kZV0sIENMS19YKTsKKwlyZV8yX3JlID0gQ0VJTF9ESVYoVHJoelttb2RlXSwgQ0xLX1gpOworCXdlXzJfcmUgPSBDRUlMX0RJVihUd2hyW21vZGVdLCBDTEtfWCk7CisJY3NfY250ID0gQ0VJTF9ESVYoKFRjc1ttb2RlXSAtIFRycFttb2RlXSksIENMS19YKTsKKwlpZiAoIVRjbHNSaXNpbmcpCisJCWNzX2NudCA9IENFSUxfRElWKFRjc1ttb2RlXSwgQ0xLX1gpOworCWlmIChjc19jbnQgPT0gMCkKKwkJY3NfY250ID0gMTsKKworCWlmIChUY2VhW21vZGVdKSB7CisJCXdoaWxlICgoKGNzX2NudCAqIENMS19YKSArIFRyZWFbbW9kZV0pIDwgVGNlYVttb2RlXSkKKwkJCWNzX2NudCsrOworCX0KKworI2lmIE1PREU1X1dPUktBUk9VTkQKKwlpZiAobW9kZSA9PSA1KQorCQlhY2NfY2xrcyA9IDU7CisjZW5kaWYKKworCS8qIFNpZ2h0aW5nIDM0NjI0MzA6IFRlbXBvcmFyeSBoYWNrIGZvciBNVDI5RjEyOEcwOENKQUJBV1A6QiAqLworCWlmICgoaW9yZWFkMzIoRmxhc2hSZWcgKyBNQU5VRkFDVFVSRVJfSUQpID09IDApICYmCisJCShpb3JlYWQzMihGbGFzaFJlZyArIERFVklDRV9JRCkgPT0gMHg4OCkpCisJCWFjY19jbGtzID0gNjsKKworCWlvd3JpdGUzMihhY2NfY2xrcywgRmxhc2hSZWcgKyBBQ0NfQ0xLUyk7CisJaW93cml0ZTMyKHJlXzJfd2UsIEZsYXNoUmVnICsgUkVfMl9XRSk7CisJaW93cml0ZTMyKHJlXzJfcmUsIEZsYXNoUmVnICsgUkVfMl9SRSk7CisJaW93cml0ZTMyKHdlXzJfcmUsIEZsYXNoUmVnICsgV0VfMl9SRSk7CisJaW93cml0ZTMyKGFkZHJfMl9kYXRhLCBGbGFzaFJlZyArIEFERFJfMl9EQVRBKTsKKwlpb3dyaXRlMzIoZW5fbG8sIEZsYXNoUmVnICsgUkRXUl9FTl9MT19DTlQpOworCWlvd3JpdGUzMihlbl9oaSwgRmxhc2hSZWcgKyBSRFdSX0VOX0hJX0NOVCk7CisJaW93cml0ZTMyKGNzX2NudCwgRmxhc2hSZWcgKyBDU19TRVRVUF9DTlQpOworfQorCitzdGF0aWMgdm9pZCBpbmRleF9hZGRyKHUzMiBhZGRyZXNzLCB1MzIgZGF0YSkKK3sKKwlpb3dyaXRlMzIoYWRkcmVzcywgRmxhc2hNZW0pOworCWlvd3JpdGUzMihkYXRhLCBGbGFzaE1lbSArIDB4MTApOworfQorCitzdGF0aWMgdm9pZCBpbmRleF9hZGRyX3JlYWRfZGF0YSh1MzIgYWRkcmVzcywgdTMyICpwZGF0YSkKK3sKKwlpb3dyaXRlMzIoYWRkcmVzcywgRmxhc2hNZW0pOworCSpwZGF0YSA9IGlvcmVhZDMyKEZsYXNoTWVtICsgMHgxMCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9lY2NfY29uZmlnKHZvaWQpCit7CisjaWYgU1VQUE9SVF84QklURUNDCisJaWYgKChpb3JlYWQzMihGbGFzaFJlZyArIERFVklDRV9NQUlOX0FSRUFfU0laRSkgPCA0MDk2KSB8fAorCQkoaW9yZWFkMzIoRmxhc2hSZWcgKyBERVZJQ0VfU1BBUkVfQVJFQV9TSVpFKSA8PSAxMjgpKQorCQlpb3dyaXRlMzIoOCwgRmxhc2hSZWcgKyBFQ0NfQ09SUkVDVElPTik7CisjZW5kaWYKKworCWlmICgoaW9yZWFkMzIoRmxhc2hSZWcgKyBFQ0NfQ09SUkVDVElPTikgJiBFQ0NfQ09SUkVDVElPTl9fVkFMVUUpCisJCT09IDEpIHsKKwkJRGV2aWNlSW5mby53RUNDQnl0ZXNQZXJTZWN0b3IgPSA0OworCQlEZXZpY2VJbmZvLndFQ0NCeXRlc1BlclNlY3RvciAqPSBEZXZpY2VJbmZvLndEZXZpY2VzQ29ubmVjdGVkOworCQlEZXZpY2VJbmZvLndOdW1QYWdlU3BhcmVGbGFnID0KKwkJCURldmljZUluZm8ud1BhZ2VTcGFyZVNpemUgLQorCQkJRGV2aWNlSW5mby53UGFnZURhdGFTaXplIC8KKwkJCShFQ0NfU0VDVE9SX1NJWkUgKiBEZXZpY2VJbmZvLndEZXZpY2VzQ29ubmVjdGVkKSAqCisJCQlEZXZpY2VJbmZvLndFQ0NCeXRlc1BlclNlY3RvcgorCQkJLSBEZXZpY2VJbmZvLndTcGFyZVNraXBCeXRlczsKKwl9IGVsc2UgeworCQlEZXZpY2VJbmZvLndFQ0NCeXRlc1BlclNlY3RvciA9CisJCQkoaW9yZWFkMzIoRmxhc2hSZWcgKyBFQ0NfQ09SUkVDVElPTikgJgorCQkJRUNDX0NPUlJFQ1RJT05fX1ZBTFVFKSAqIDEzIC8gODsKKwkJaWYgKChEZXZpY2VJbmZvLndFQ0NCeXRlc1BlclNlY3RvcikgJSAyID09IDApCisJCQlEZXZpY2VJbmZvLndFQ0NCeXRlc1BlclNlY3RvciArPSAyOworCQllbHNlCisJCQlEZXZpY2VJbmZvLndFQ0NCeXRlc1BlclNlY3RvciArPSAxOworCisJCURldmljZUluZm8ud0VDQ0J5dGVzUGVyU2VjdG9yICo9IERldmljZUluZm8ud0RldmljZXNDb25uZWN0ZWQ7CisJCURldmljZUluZm8ud051bVBhZ2VTcGFyZUZsYWcgPSBEZXZpY2VJbmZvLndQYWdlU3BhcmVTaXplIC0KKwkJCURldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSAvCisJCQkoRUNDX1NFQ1RPUl9TSVpFICogRGV2aWNlSW5mby53RGV2aWNlc0Nvbm5lY3RlZCkgKgorCQkJRGV2aWNlSW5mby53RUNDQnl0ZXNQZXJTZWN0b3IKKwkJCS0gRGV2aWNlSW5mby53U3BhcmVTa2lwQnl0ZXM7CisJfQorfQorCitzdGF0aWMgdTE2IGdldF9vbmZpX25hbmRfcGFyYSh2b2lkKQoreworCWludCBpOworCXUxNiBibGtzX2x1bl9sLCBibGtzX2x1bl9oLCBuX29mX2x1bnM7CisJdTMyIGJsb2NrcGVybHVuLCBpZDsKKworCWlvd3JpdGUzMihERVZJQ0VfUkVTRVRfX0JBTkswLCBGbGFzaFJlZyArIERFVklDRV9SRVNFVCk7CisKKwl3aGlsZSAoISgoaW9yZWFkMzIoRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzApICYKKwkJSU5UUl9TVEFUVVMwX19SU1RfQ09NUCkgfAorCQkoaW9yZWFkMzIoRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzApICYKKwkJSU5UUl9TVEFUVVMwX19USU1FX09VVCkpKQorCQk7CisKKwlpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzApICYgSU5UUl9TVEFUVVMwX19SU1RfQ09NUCkgeworCQlpb3dyaXRlMzIoREVWSUNFX1JFU0VUX19CQU5LMSwgRmxhc2hSZWcgKyBERVZJQ0VfUkVTRVQpOworCQl3aGlsZSAoISgoaW9yZWFkMzIoRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzEpICYKKwkJCUlOVFJfU1RBVFVTMV9fUlNUX0NPTVApIHwKKwkJCShpb3JlYWQzMihGbGFzaFJlZyArIElOVFJfU1RBVFVTMSkgJgorCQkJSU5UUl9TVEFUVVMxX19USU1FX09VVCkpKQorCQkJOworCisJCWlmIChpb3JlYWQzMihGbGFzaFJlZyArIElOVFJfU1RBVFVTMSkgJgorCQkJSU5UUl9TVEFUVVMxX19SU1RfQ09NUCkgeworCQkJaW93cml0ZTMyKERFVklDRV9SRVNFVF9fQkFOSzIsCisJCQkJRmxhc2hSZWcgKyBERVZJQ0VfUkVTRVQpOworCQkJd2hpbGUgKCEoKGlvcmVhZDMyKEZsYXNoUmVnICsgSU5UUl9TVEFUVVMyKSAmCisJCQkJSU5UUl9TVEFUVVMyX19SU1RfQ09NUCkgfAorCQkJCShpb3JlYWQzMihGbGFzaFJlZyArIElOVFJfU1RBVFVTMikgJgorCQkJCUlOVFJfU1RBVFVTMl9fVElNRV9PVVQpKSkKKwkJCQk7CisKKwkJCWlmIChpb3JlYWQzMihGbGFzaFJlZyArIElOVFJfU1RBVFVTMikgJgorCQkJCUlOVFJfU1RBVFVTMl9fUlNUX0NPTVApIHsKKwkJCQlpb3dyaXRlMzIoREVWSUNFX1JFU0VUX19CQU5LMywKKwkJCQkJRmxhc2hSZWcgKyBERVZJQ0VfUkVTRVQpOworCQkJCXdoaWxlICghKChpb3JlYWQzMihGbGFzaFJlZyArIElOVFJfU1RBVFVTMykgJgorCQkJCQlJTlRSX1NUQVRVUzNfX1JTVF9DT01QKSB8CisJCQkJCShpb3JlYWQzMihGbGFzaFJlZyArIElOVFJfU1RBVFVTMykgJgorCQkJCQlJTlRSX1NUQVRVUzNfX1RJTUVfT1VUKSkpCisJCQkJCTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJHZXR0aW5nIGEgdGltZSBvdXQgZm9yIGJhbmsgMiFcbiIpOworCQkJfQorCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fRVJSICJHZXR0aW5nIGEgdGltZSBvdXQgZm9yIGJhbmsgMSFcbiIpOworCQl9CisJfQorCisJaW93cml0ZTMyKElOVFJfU1RBVFVTMF9fVElNRV9PVVQsIEZsYXNoUmVnICsgSU5UUl9TVEFUVVMwKTsKKwlpb3dyaXRlMzIoSU5UUl9TVEFUVVMxX19USU1FX09VVCwgRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzEpOworCWlvd3JpdGUzMihJTlRSX1NUQVRVUzJfX1RJTUVfT1VULCBGbGFzaFJlZyArIElOVFJfU1RBVFVTMik7CisJaW93cml0ZTMyKElOVFJfU1RBVFVTM19fVElNRV9PVVQsIEZsYXNoUmVnICsgSU5UUl9TVEFUVVMzKTsKKworCURldmljZUluZm8ud09ORklEZXZGZWF0dXJlcyA9CisJCWlvcmVhZDMyKEZsYXNoUmVnICsgT05GSV9ERVZJQ0VfRkVBVFVSRVMpOworCURldmljZUluZm8ud09ORklPcHRDb21tYW5kcyA9CisJCWlvcmVhZDMyKEZsYXNoUmVnICsgT05GSV9PUFRJT05BTF9DT01NQU5EUyk7CisJRGV2aWNlSW5mby53T05GSVRpbWluZ01vZGUgPQorCQlpb3JlYWQzMihGbGFzaFJlZyArIE9ORklfVElNSU5HX01PREUpOworCURldmljZUluZm8ud09ORklQZ21DYWNoZVRpbWluZ01vZGUgPQorCQlpb3JlYWQzMihGbGFzaFJlZyArIE9ORklfUEdNX0NBQ0hFX1RJTUlOR19NT0RFKTsKKworCW5fb2ZfbHVucyA9IGlvcmVhZDMyKEZsYXNoUmVnICsgT05GSV9ERVZJQ0VfTk9fT0ZfTFVOUykgJgorCQlPTkZJX0RFVklDRV9OT19PRl9MVU5TX19OT19PRl9MVU5TOworCWJsa3NfbHVuX2wgPSBpb3JlYWQzMihGbGFzaFJlZyArIE9ORklfREVWSUNFX05PX09GX0JMT0NLU19QRVJfTFVOX0wpOworCWJsa3NfbHVuX2ggPSBpb3JlYWQzMihGbGFzaFJlZyArIE9ORklfREVWSUNFX05PX09GX0JMT0NLU19QRVJfTFVOX1UpOworCisJYmxvY2twZXJsdW4gPSAoYmxrc19sdW5faCA8PCAxNikgfCBibGtzX2x1bl9sOworCisJRGV2aWNlSW5mby53VG90YWxCbG9ja3MgPSBuX29mX2x1bnMgKiBibG9ja3Blcmx1bjsKKworCWlmICghKGlvcmVhZDMyKEZsYXNoUmVnICsgT05GSV9USU1JTkdfTU9ERSkgJgorCQlPTkZJX1RJTUlOR19NT0RFX19WQUxVRSkpCisJCXJldHVybiBGQUlMOworCisJZm9yIChpID0gNTsgaSA+IDA7IGktLSkgeworCQlpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBPTkZJX1RJTUlOR19NT0RFKSAmICgweDAxIDw8IGkpKQorCQkJYnJlYWs7CisJfQorCisJTkFORF9PTkZpX1RpbWluZ19Nb2RlKGkpOworCisJaW5kZXhfYWRkcihNT0RFXzExIHwgMCwgMHg5MCk7CisJaW5kZXhfYWRkcihNT0RFXzExIHwgMSwgMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlpbmRleF9hZGRyX3JlYWRfZGF0YShNT0RFXzExIHwgMiwgJmlkKTsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiM3JkIElEOiAweCV4XG4iLCBpZCk7CisKKwlEZXZpY2VJbmZvLk1MQ0RldmljZSA9IGlkICYgMHgwQzsKKworCS8qIEJ5IG5vdywgYWxsIHRoZSBPTkZJIGRldmljZXMgd2Uga25vdyBzdXBwb3J0IHRoZSBwYWdlIGNhY2hlICovCisJLyogcncgZmVhdHVyZS4gU28gaGVyZSB3ZSBlbmFibGUgdGhlIHBpcGVsaW5lX3J3X2FoZWFkIGZlYXR1cmUgKi8KKwkvKiBpb3dyaXRlMzIoMSwgRmxhc2hSZWcgKyBDQUNIRV9XUklURV9FTkFCTEUpOyAqLworCS8qIGlvd3JpdGUzMigxLCBGbGFzaFJlZyArIENBQ0hFX1JFQURfRU5BQkxFKTsgICovCisKKwlyZXR1cm4gUEFTUzsKK30KKworc3RhdGljIHZvaWQgZ2V0X3NhbXN1bmdfbmFuZF9wYXJhKHZvaWQpCit7CisJdTggbm9fb2ZfcGxhbmVzOworCXUzMiBibGtfc2l6ZTsKKwl1NjQgcGxhbmVfc2l6ZSwgY2FwYWNpdHk7CisJdTMyIGlkX2J5dGVzWzVdOworCWludCBpOworCisJaW5kZXhfYWRkcigodTMyKShNT0RFXzExIHwgMCksIDB4OTApOworCWluZGV4X2FkZHIoKHUzMikoTU9ERV8xMSB8IDEpLCAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQorCQlpbmRleF9hZGRyX3JlYWRfZGF0YSgodTMyKShNT0RFXzExIHwgMiksICZpZF9ieXRlc1tpXSk7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJIklEIGJ5dGVzOiAweCV4LCAweCV4LCAweCV4LCAweCV4LCAweCV4XG4iLAorCQlpZF9ieXRlc1swXSwgaWRfYnl0ZXNbMV0sIGlkX2J5dGVzWzJdLAorCQlpZF9ieXRlc1szXSwgaWRfYnl0ZXNbNF0pOworCisJaWYgKChpZF9ieXRlc1sxXSAmIDB4ZmYpID09IDB4ZDMpIHsgLyogU2Ftc3VuZyBLOVdBRzA4VTFBICovCisJCS8qIFNldCB0aW1pbmcgcmVnaXN0ZXIgdmFsdWVzIGFjY29yZGluZyB0byBkYXRhc2hlZXQgKi8KKwkJaW93cml0ZTMyKDUsIEZsYXNoUmVnICsgQUNDX0NMS1MpOworCQlpb3dyaXRlMzIoMjAsIEZsYXNoUmVnICsgUkVfMl9XRSk7CisJCWlvd3JpdGUzMigxMiwgRmxhc2hSZWcgKyBXRV8yX1JFKTsKKwkJaW93cml0ZTMyKDE0LCBGbGFzaFJlZyArIEFERFJfMl9EQVRBKTsKKwkJaW93cml0ZTMyKDMsIEZsYXNoUmVnICsgUkRXUl9FTl9MT19DTlQpOworCQlpb3dyaXRlMzIoMiwgRmxhc2hSZWcgKyBSRFdSX0VOX0hJX0NOVCk7CisJCWlvd3JpdGUzMigyLCBGbGFzaFJlZyArIENTX1NFVFVQX0NOVCk7CisJfQorCisJbm9fb2ZfcGxhbmVzID0gMSA8PCAoKGlkX2J5dGVzWzRdICYgMHgwYykgPj4gMik7CisJcGxhbmVfc2l6ZSAgPSAodTY0KTY0IDw8ICgoaWRfYnl0ZXNbNF0gJiAweDcwKSA+PiA0KTsKKwlibGtfc2l6ZSA9IDY0IDw8ICgoaW9yZWFkMzIoRmxhc2hSZWcgKyBERVZJQ0VfUEFSQU1fMSkgJiAweDMwKSA+PiA0KTsKKwljYXBhY2l0eSA9ICh1NjQpMTI4ICogcGxhbmVfc2l6ZSAqIG5vX29mX3BsYW5lczsKKworCURldmljZUluZm8ud1RvdGFsQmxvY2tzID0gKHUzMilHTE9CX3U2NF9EaXYoY2FwYWNpdHksIGJsa19zaXplKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X3Rvc2hpYmFfbmFuZF9wYXJhKHZvaWQpCit7CisJdm9pZCBfX2lvbWVtICpzY3JhdGNoX3JlZzsKKwl1MzIgdG1wOworCisJLyogV29ya2Fyb3VuZCB0byBmaXggYSBjb250cm9sbGVyIGJ1ZyB3aGljaCByZXBvcnRzIGEgd3JvbmcgKi8KKwkvKiBzcGFyZSBhcmVhIHNpemUgZm9yIHNvbWUga2luZCBvZiBUb3NoaWJhIE5BTkQgZGV2aWNlICovCisJaWYgKChpb3JlYWQzMihGbGFzaFJlZyArIERFVklDRV9NQUlOX0FSRUFfU0laRSkgPT0gNDA5NikgJiYKKwkJKGlvcmVhZDMyKEZsYXNoUmVnICsgREVWSUNFX1NQQVJFX0FSRUFfU0laRSkgPT0gNjQpKSB7CisJCWlvd3JpdGUzMigyMTYsIEZsYXNoUmVnICsgREVWSUNFX1NQQVJFX0FSRUFfU0laRSk7CisJCXRtcCA9IGlvcmVhZDMyKEZsYXNoUmVnICsgREVWSUNFU19DT05ORUNURUQpICoKKwkJCWlvcmVhZDMyKEZsYXNoUmVnICsgREVWSUNFX1NQQVJFX0FSRUFfU0laRSk7CisJCWlvd3JpdGUzMih0bXAsIEZsYXNoUmVnICsgTE9HSUNBTF9QQUdFX1NQQVJFX1NJWkUpOworI2lmIFNVUFBPUlRfMTVCSVRFQ0MKKwkJaW93cml0ZTMyKDE1LCBGbGFzaFJlZyArIEVDQ19DT1JSRUNUSU9OKTsKKyNlbGlmIFNVUFBPUlRfOEJJVEVDQworCQlpb3dyaXRlMzIoOCwgRmxhc2hSZWcgKyBFQ0NfQ09SUkVDVElPTik7CisjZW5kaWYKKwl9CisKKwkvKiBBcyBUb3NoaWJhIE5BTkQgY2FuIG5vdCBwcm92aWRlIGl0J3MgYmxvY2sgbnVtYmVyLCAqLworCS8qIHNvIGhlcmUgd2UgbmVlZCB1c2VyIHRvIHByb3ZpZGUgdGhlIGNvcnJlY3QgYmxvY2sgKi8KKwkvKiBudW1iZXIgaW4gYSBzY3JhdGNoIHJlZ2lzdGVyIGJlZm9yZSB0aGUgTGludXggTkFORCAqLworCS8qIGRyaXZlciBpcyBsb2FkZWQuIElmIG5vIHZhbGlkIHZhbHVlIGZvdW5kIGluIHRoZSBzY3JhdGNoICovCisJLyogcmVnaXN0ZXIsIHRoZW4gd2UgdXNlIGRlZmF1bHQgYmxvY2sgbnVtYmVyIHZhbHVlICovCisJc2NyYXRjaF9yZWcgPSBpb3JlbWFwX25vY2FjaGUoU0NSQVRDSF9SRUdfQUREUiwgU0NSQVRDSF9SRUdfU0laRSk7CisJaWYgKCFzY3JhdGNoX3JlZykgeworCQlwcmludGsoS0VSTl9FUlIgIlNwZWN0cmE6IGlvcmVtYXAgZmFpbGVkIGluICVzLCBMaW5lICVkIiwKKwkJCV9fRklMRV9fLCBfX0xJTkVfXyk7CisJCURldmljZUluZm8ud1RvdGFsQmxvY2tzID0gR0xPQl9IV0NUTF9ERUZBVUxUX0JMS1M7CisJfSBlbHNlIHsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJCSJTcGVjdHJhOiBpb3JlbWFwIHJlZyBhZGRyZXNzOiAweCVwXG4iLCBzY3JhdGNoX3JlZyk7CisJCURldmljZUluZm8ud1RvdGFsQmxvY2tzID0gMSA8PCBpb3JlYWQ4KHNjcmF0Y2hfcmVnKTsKKwkJaWYgKERldmljZUluZm8ud1RvdGFsQmxvY2tzIDwgNTEyKQorCQkJRGV2aWNlSW5mby53VG90YWxCbG9ja3MgPSBHTE9CX0hXQ1RMX0RFRkFVTFRfQkxLUzsKKwkJaW91bm1hcChzY3JhdGNoX3JlZyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBnZXRfaHluaXhfbmFuZF9wYXJhKHZvaWQpCit7CisJdm9pZCBfX2lvbWVtICpzY3JhdGNoX3JlZzsKKwl1MzIgbWFpbl9zaXplLCBzcGFyZV9zaXplOworCisJc3dpdGNoIChEZXZpY2VJbmZvLndEZXZpY2VJRCkgeworCWNhc2UgMHhENTogLyogSHluaXggSDI3VUFHOFQyQSwgSDI3VUJHOFU1QSBvciBIMjdVQ0c4VkZBICovCisJY2FzZSAweEQ3OiAvKiBIeW5peCBIMjdVREc4VkVNLCBIMjdVQ0c4VURNIG9yIEgyN1VDRzhWNUEgKi8KKwkJaW93cml0ZTMyKDEyOCwgRmxhc2hSZWcgKyBQQUdFU19QRVJfQkxPQ0spOworCQlpb3dyaXRlMzIoNDA5NiwgRmxhc2hSZWcgKyBERVZJQ0VfTUFJTl9BUkVBX1NJWkUpOworCQlpb3dyaXRlMzIoMjI0LCBGbGFzaFJlZyArIERFVklDRV9TUEFSRV9BUkVBX1NJWkUpOworCQltYWluX3NpemUgPSA0MDk2ICogaW9yZWFkMzIoRmxhc2hSZWcgKyBERVZJQ0VTX0NPTk5FQ1RFRCk7CisJCXNwYXJlX3NpemUgPSAyMjQgKiBpb3JlYWQzMihGbGFzaFJlZyArIERFVklDRVNfQ09OTkVDVEVEKTsKKwkJaW93cml0ZTMyKG1haW5fc2l6ZSwgRmxhc2hSZWcgKyBMT0dJQ0FMX1BBR0VfREFUQV9TSVpFKTsKKwkJaW93cml0ZTMyKHNwYXJlX3NpemUsIEZsYXNoUmVnICsgTE9HSUNBTF9QQUdFX1NQQVJFX1NJWkUpOworCQlpb3dyaXRlMzIoMCwgRmxhc2hSZWcgKyBERVZJQ0VfV0lEVEgpOworI2lmIFNVUFBPUlRfMTVCSVRFQ0MKKwkJaW93cml0ZTMyKDE1LCBGbGFzaFJlZyArIEVDQ19DT1JSRUNUSU9OKTsKKyNlbGlmIFNVUFBPUlRfOEJJVEVDQworCQlpb3dyaXRlMzIoOCwgRmxhc2hSZWcgKyBFQ0NfQ09SUkVDVElPTik7CisjZW5kaWYKKwkJRGV2aWNlSW5mby5NTENEZXZpY2UgID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJCSJTcGVjdHJhOiBVbmtub3duIEh5bml4IE5BTkQgKERldmljZSBJRDogMHgleCkuIgorCQkJIldpbGwgdXNlIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyBpbnN0ZWFkLlxuIiwKKwkJCURldmljZUluZm8ud0RldmljZUlEKTsKKwl9CisKKwlzY3JhdGNoX3JlZyA9IGlvcmVtYXBfbm9jYWNoZShTQ1JBVENIX1JFR19BRERSLCBTQ1JBVENIX1JFR19TSVpFKTsKKwlpZiAoIXNjcmF0Y2hfcmVnKSB7CisJCXByaW50ayhLRVJOX0VSUiAiU3BlY3RyYTogaW9yZW1hcCBmYWlsZWQgaW4gJXMsIExpbmUgJWQiLAorCQkJX19GSUxFX18sIF9fTElORV9fKTsKKwkJRGV2aWNlSW5mby53VG90YWxCbG9ja3MgPSBHTE9CX0hXQ1RMX0RFRkFVTFRfQkxLUzsKKwl9IGVsc2UgeworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLAorCQkJIlNwZWN0cmE6IGlvcmVtYXAgcmVnIGFkZHJlc3M6IDB4JXBcbiIsIHNjcmF0Y2hfcmVnKTsKKwkJRGV2aWNlSW5mby53VG90YWxCbG9ja3MgPSAxIDw8IGlvcmVhZDgoc2NyYXRjaF9yZWcpOworCQlpZiAoRGV2aWNlSW5mby53VG90YWxCbG9ja3MgPCA1MTIpCisJCQlEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyA9IEdMT0JfSFdDVExfREVGQVVMVF9CTEtTOworCQlpb3VubWFwKHNjcmF0Y2hfcmVnKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRfdmFsaWRfYmFua3Modm9pZCkKK3sKKwl1MzIgaWRbTExEX01BWF9GTEFTSF9CQU5LU107CisJaW50IGk7CisKKwl0b3RhbFVzZWRCYW5rcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IExMRF9NQVhfRkxBU0hfQkFOS1M7IGkrKykgeworCQlpbmRleF9hZGRyKCh1MzIpKE1PREVfMTEgfCAoaSA8PCAyNCkgfCAwKSwgMHg5MCk7CisJCWluZGV4X2FkZHIoKHUzMikoTU9ERV8xMSB8IChpIDw8IDI0KSB8IDEpLCAwKTsKKwkJaW5kZXhfYWRkcl9yZWFkX2RhdGEoKHUzMikoTU9ERV8xMSB8IChpIDw8IDI0KSB8IDIpLCAmaWRbaV0pOworCisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJIlJldHVybiAxc3QgSUQgZm9yIGJhbmtbJWRdOiAleFxuIiwgaSwgaWRbaV0pOworCisJCWlmIChpID09IDApIHsKKwkJCWlmIChpZFtpXSAmIDB4MGZmKQorCQkJCUdMT0JfdmFsaWRfYmFua3NbaV0gPSAxOworCQl9IGVsc2UgeworCQkJaWYgKChpZFtpXSAmIDB4MGZmKSA9PSAoaWRbMF0gJiAweDBmZikpCisJCQkJR0xPQl92YWxpZF9iYW5rc1tpXSA9IDE7CisJCX0KKworCQl0b3RhbFVzZWRCYW5rcyArPSBHTE9CX3ZhbGlkX2JhbmtzW2ldOworCX0KKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkidG90YWxVc2VkQmFua3M6ICVkXG4iLCB0b3RhbFVzZWRCYW5rcyk7Cit9CisKK3N0YXRpYyB2b2lkIGRldGVjdF9wYXJ0aXRpb25fZmVhdHVyZSh2b2lkKQoreworCWlmIChpb3JlYWQzMihGbGFzaFJlZyArIEZFQVRVUkVTKSAmIEZFQVRVUkVTX19QQVJUSVRJT04pIHsKKwkJaWYgKChpb3JlYWQzMihGbGFzaFJlZyArIFBFUk1fU1JDX0lEXzEpICYKKwkJCVBFUk1fU1JDX0lEXzFfX1NSQ0lEKSA9PSBTUEVDVFJBX1BBUlRJVElPTl9JRCkgeworCQkJRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2sgPQorCQkJICAgICgoaW9yZWFkMzIoRmxhc2hSZWcgKyBNSU5fTUFYX0JBTktfMSkgJgorCQkJICAgICAgTUlOX01BWF9CQU5LXzFfX01JTl9WQUxVRSkgKgorCQkJICAgICBEZXZpY2VJbmZvLndUb3RhbEJsb2NrcykKKwkJCSAgICArCisJCQkgICAgKGlvcmVhZDMyKEZsYXNoUmVnICsgTUlOX0JMS19BRERSXzEpICYKKwkJCSAgICBNSU5fQkxLX0FERFJfMV9fVkFMVUUpOworCisJCQlEZXZpY2VJbmZvLndTcGVjdHJhRW5kQmxvY2sgPQorCQkJICAgICgoKGlvcmVhZDMyKEZsYXNoUmVnICsgTUlOX01BWF9CQU5LXzEpICYKKwkJCSAgICAgICBNSU5fTUFYX0JBTktfMV9fTUFYX1ZBTFVFKSA+PiAyKSAqCisJCQkgICAgIERldmljZUluZm8ud1RvdGFsQmxvY2tzKQorCQkJICAgICsKKwkJCSAgICAoaW9yZWFkMzIoRmxhc2hSZWcgKyBNQVhfQkxLX0FERFJfMSkgJgorCQkJICAgIE1BWF9CTEtfQUREUl8xX19WQUxVRSk7CisKKwkJCURldmljZUluZm8ud1RvdGFsQmxvY2tzICo9IHRvdGFsVXNlZEJhbmtzOworCisJCQlpZiAoRGV2aWNlSW5mby53U3BlY3RyYUVuZEJsb2NrID49CisJCQkgICAgRGV2aWNlSW5mby53VG90YWxCbG9ja3MpIHsKKwkJCQlEZXZpY2VJbmZvLndTcGVjdHJhRW5kQmxvY2sgPQorCQkJCSAgICBEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyAtIDE7CisJCQl9CisKKwkJCURldmljZUluZm8ud0RhdGFCbG9ja051bSA9CisJCQkJRGV2aWNlSW5mby53U3BlY3RyYUVuZEJsb2NrIC0KKwkJCQlEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9jayArIDE7CisJCX0gZWxzZSB7CisJCQlEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyAqPSB0b3RhbFVzZWRCYW5rczsKKwkJCURldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrID0gU1BFQ1RSQV9TVEFSVF9CTE9DSzsKKwkJCURldmljZUluZm8ud1NwZWN0cmFFbmRCbG9jayA9CisJCQkJRGV2aWNlSW5mby53VG90YWxCbG9ja3MgLSAxOworCQkJRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtID0KKwkJCQlEZXZpY2VJbmZvLndTcGVjdHJhRW5kQmxvY2sgLQorCQkJCURldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrICsgMTsKKwkJfQorCX0gZWxzZSB7CisJCURldmljZUluZm8ud1RvdGFsQmxvY2tzICo9IHRvdGFsVXNlZEJhbmtzOworCQlEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9jayA9IFNQRUNUUkFfU1RBUlRfQkxPQ0s7CisJCURldmljZUluZm8ud1NwZWN0cmFFbmRCbG9jayA9IERldmljZUluZm8ud1RvdGFsQmxvY2tzIC0gMTsKKwkJRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtID0KKwkJCURldmljZUluZm8ud1NwZWN0cmFFbmRCbG9jayAtCisJCQlEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9jayArIDE7CisJfQorfQorCitzdGF0aWMgdm9pZCBkdW1wX2RldmljZV9pbmZvKHZvaWQpCit7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJEZXZpY2VJbmZvOlxuIik7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJEZXZpY2VNYWtlcjogMHgleFxuIiwKKwkJRGV2aWNlSW5mby53RGV2aWNlTWFrZXIpOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiRGV2aWNlSUQ6IDB4JXhcbiIsCisJCURldmljZUluZm8ud0RldmljZUlEKTsKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkRldmljZVR5cGU6IDB4JXhcbiIsCisJCURldmljZUluZm8ud0RldmljZVR5cGUpOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiU3BlY3RyYVN0YXJ0QmxvY2s6ICVkXG4iLAorCQlEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9jayk7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJTcGVjdHJhRW5kQmxvY2s6ICVkXG4iLAorCQlEZXZpY2VJbmZvLndTcGVjdHJhRW5kQmxvY2spOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiVG90YWxCbG9ja3M6ICVkXG4iLAorCQlEZXZpY2VJbmZvLndUb3RhbEJsb2Nrcyk7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJQYWdlc1BlckJsb2NrOiAlZFxuIiwKKwkJRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jayk7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJQYWdlU2l6ZTogJWRcbiIsCisJCURldmljZUluZm8ud1BhZ2VTaXplKTsKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlBhZ2VEYXRhU2l6ZTogJWRcbiIsCisJCURldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSk7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJQYWdlU3BhcmVTaXplOiAlZFxuIiwKKwkJRGV2aWNlSW5mby53UGFnZVNwYXJlU2l6ZSk7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJOdW1QYWdlU3BhcmVGbGFnOiAlZFxuIiwKKwkJRGV2aWNlSW5mby53TnVtUGFnZVNwYXJlRmxhZyk7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJFQ0NCeXRlc1BlclNlY3RvcjogJWRcbiIsCisJCURldmljZUluZm8ud0VDQ0J5dGVzUGVyU2VjdG9yKTsKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkJsb2NrU2l6ZTogJWRcbiIsCisJCURldmljZUluZm8ud0Jsb2NrU2l6ZSk7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJCbG9ja0RhdGFTaXplOiAlZFxuIiwKKwkJRGV2aWNlSW5mby53QmxvY2tEYXRhU2l6ZSk7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJEYXRhQmxvY2tOdW06ICVkXG4iLAorCQlEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0pOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiUGxhbmVOdW06ICVkXG4iLAorCQlEZXZpY2VJbmZvLmJQbGFuZU51bSk7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJEZXZpY2VNYWluQXJlYVNpemU6ICVkXG4iLAorCQlEZXZpY2VJbmZvLndEZXZpY2VNYWluQXJlYVNpemUpOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiRGV2aWNlU3BhcmVBcmVhU2l6ZTogJWRcbiIsCisJCURldmljZUluZm8ud0RldmljZVNwYXJlQXJlYVNpemUpOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiRGV2aWNlc0Nvbm5lY3RlZDogJWRcbiIsCisJCURldmljZUluZm8ud0RldmljZXNDb25uZWN0ZWQpOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiRGV2aWNlV2lkdGg6ICVkXG4iLAorCQlEZXZpY2VJbmZvLndEZXZpY2VXaWR0aCk7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJIV1JldmlzaW9uOiAweCV4XG4iLAorCQlEZXZpY2VJbmZvLndIV1JldmlzaW9uKTsKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkhXRmVhdHVyZXM6IDB4JXhcbiIsCisJCURldmljZUluZm8ud0hXRmVhdHVyZXMpOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiT05GSURldkZlYXR1cmVzOiAweCV4XG4iLAorCQlEZXZpY2VJbmZvLndPTkZJRGV2RmVhdHVyZXMpOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiT05GSU9wdENvbW1hbmRzOiAweCV4XG4iLAorCQlEZXZpY2VJbmZvLndPTkZJT3B0Q29tbWFuZHMpOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiT05GSVRpbWluZ01vZGU6IDB4JXhcbiIsCisJCURldmljZUluZm8ud09ORklUaW1pbmdNb2RlKTsKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIk9ORklQZ21DYWNoZVRpbWluZ01vZGU6IDB4JXhcbiIsCisJCURldmljZUluZm8ud09ORklQZ21DYWNoZVRpbWluZ01vZGUpOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiTUxDRGV2aWNlOiAlc1xuIiwKKwkJRGV2aWNlSW5mby5NTENEZXZpY2UgPyAiWWVzIiA6ICJObyIpOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiU3BhcmVTa2lwQnl0ZXM6ICVkXG4iLAorCQlEZXZpY2VJbmZvLndTcGFyZVNraXBCeXRlcyk7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJCaXRzSW5QYWdlTnVtYmVyOiAlZFxuIiwKKwkJRGV2aWNlSW5mby5uQml0c0luUGFnZU51bWJlcik7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJCaXRzSW5QYWdlRGF0YVNpemU6ICVkXG4iLAorCQlEZXZpY2VJbmZvLm5CaXRzSW5QYWdlRGF0YVNpemUpOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiQml0c0luQmxvY2tEYXRhU2l6ZTogJWRcbiIsCisJCURldmljZUluZm8ubkJpdHNJbkJsb2NrRGF0YVNpemUpOworfQorCit1MTYgTkFORF9SZWFkX0RldmljZV9JRCh2b2lkKQoreworCXUxNiBzdGF0dXMgPSBQQVNTOworCXU4IG5vX29mX3BsYW5lczsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJaW93cml0ZTMyKDB4MDIsIEZsYXNoUmVnICsgU1BBUkVfQVJFQV9TS0lQX0JZVEVTKTsKKwlpb3dyaXRlMzIoMHhmZmZmLCBGbGFzaFJlZyArIFNQQVJFX0FSRUFfTUFSS0VSKTsKKwlEZXZpY2VJbmZvLndEZXZpY2VNYWtlciA9IGlvcmVhZDMyKEZsYXNoUmVnICsgTUFOVUZBQ1RVUkVSX0lEKTsKKwlEZXZpY2VJbmZvLndEZXZpY2VJRCA9IGlvcmVhZDMyKEZsYXNoUmVnICsgREVWSUNFX0lEKTsKKwlEZXZpY2VJbmZvLk1MQ0RldmljZSA9IGlvcmVhZDMyKEZsYXNoUmVnICsgREVWSUNFX1BBUkFNXzApICYgMHgwYzsKKworCWlmIChpb3JlYWQzMihGbGFzaFJlZyArIE9ORklfREVWSUNFX05PX09GX0xVTlMpICYKKwkJT05GSV9ERVZJQ0VfTk9fT0ZfTFVOU19fT05GSV9ERVZJQ0UpIHsgLyogT05GSSAxLjAgTkFORCAqLworCQlpZiAoRkFJTCA9PSBnZXRfb25maV9uYW5kX3BhcmEoKSkKKwkJCXJldHVybiBGQUlMOworCX0gZWxzZSBpZiAoRGV2aWNlSW5mby53RGV2aWNlTWFrZXIgPT0gMHhFQykgeyAvKiBTYW1zdW5nIE5BTkQgKi8KKwkJZ2V0X3NhbXN1bmdfbmFuZF9wYXJhKCk7CisJfSBlbHNlIGlmIChEZXZpY2VJbmZvLndEZXZpY2VNYWtlciA9PSAweDk4KSB7IC8qIFRvc2hpYmEgTkFORCAqLworCQlnZXRfdG9zaGliYV9uYW5kX3BhcmEoKTsKKwl9IGVsc2UgaWYgKERldmljZUluZm8ud0RldmljZU1ha2VyID09IDB4QUQpIHsgLyogSHluaXggTkFORCAqLworCQlnZXRfaHluaXhfbmFuZF9wYXJhKCk7CisJfSBlbHNlIHsKKwkJRGV2aWNlSW5mby53VG90YWxCbG9ja3MgPSBHTE9CX0hXQ1RMX0RFRkFVTFRfQkxLUzsKKwl9CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkR1bXAgdGltaW5nIHJlZ2lzdGVyIHZhbHVlczoiCisJCQkiYWNjX2Nsa3M6ICVkLCByZV8yX3dlOiAlZCwgd2VfMl9yZTogJWQsIgorCQkJImFkZHJfMl9kYXRhOiAlZCwgcmR3cl9lbl9sb19jbnQ6ICVkLCAiCisJCQkicmR3cl9lbl9oaV9jbnQ6ICVkLCBjc19zZXR1cF9jbnQ6ICVkXG4iLAorCQkJaW9yZWFkMzIoRmxhc2hSZWcgKyBBQ0NfQ0xLUyksCisJCQlpb3JlYWQzMihGbGFzaFJlZyArIFJFXzJfV0UpLAorCQkJaW9yZWFkMzIoRmxhc2hSZWcgKyBXRV8yX1JFKSwKKwkJCWlvcmVhZDMyKEZsYXNoUmVnICsgQUREUl8yX0RBVEEpLAorCQkJaW9yZWFkMzIoRmxhc2hSZWcgKyBSRFdSX0VOX0xPX0NOVCksCisJCQlpb3JlYWQzMihGbGFzaFJlZyArIFJEV1JfRU5fSElfQ05UKSwKKwkJCWlvcmVhZDMyKEZsYXNoUmVnICsgQ1NfU0VUVVBfQ05UKSk7CisKKwlEZXZpY2VJbmZvLndIV1JldmlzaW9uID0gaW9yZWFkMzIoRmxhc2hSZWcgKyBSRVZJU0lPTik7CisJRGV2aWNlSW5mby53SFdGZWF0dXJlcyA9IGlvcmVhZDMyKEZsYXNoUmVnICsgRkVBVFVSRVMpOworCisJRGV2aWNlSW5mby53RGV2aWNlTWFpbkFyZWFTaXplID0KKwkJaW9yZWFkMzIoRmxhc2hSZWcgKyBERVZJQ0VfTUFJTl9BUkVBX1NJWkUpOworCURldmljZUluZm8ud0RldmljZVNwYXJlQXJlYVNpemUgPQorCQlpb3JlYWQzMihGbGFzaFJlZyArIERFVklDRV9TUEFSRV9BUkVBX1NJWkUpOworCisJRGV2aWNlSW5mby53UGFnZURhdGFTaXplID0KKwkJaW9yZWFkMzIoRmxhc2hSZWcgKyBMT0dJQ0FMX1BBR0VfREFUQV9TSVpFKTsKKworCS8qIE5vdGU6IFdoZW4gdXNpbmcgdGhlIE1pY29uIDRLIE5BTkQgZGV2aWNlLCB0aGUgY29udHJvbGxlciB3aWxsIHJlcG9ydAorCSAqIFBhZ2UgU3BhcmUgU2l6ZSBhcyAyMTYgYnl0ZXMuIEJ1dCBNaWNyb24ncyBTcGVjIHNheSBpdCdzIDIxOCBieXRlcy4KKwkgKiBBbmQgaWYgZm9yY2Ugc2V0IGl0IHRvIDIxOCBieXRlcywgdGhlIGNvbnRyb2xsZXIgY2FuIG5vdCB3b3JrCisJICogY29ycmVjdGx5LiBTbyBqdXN0IGxldCBpdCBiZS4gQnV0IGtlZXAgaW4gbWluZCB0aGF0IHRoaXMgYnVnIG1heQorCSAqIGNhdXNlCisJICogb3RoZXIgcHJvYmxlbXMgaW4gZnV0dXJlLiAgICAgICAtIFl1bnBlbmcgIDIwMDgtMTAtMTAKKwkgKi8KKwlEZXZpY2VJbmZvLndQYWdlU3BhcmVTaXplID0KKwkJaW9yZWFkMzIoRmxhc2hSZWcgKyBMT0dJQ0FMX1BBR0VfU1BBUkVfU0laRSk7CisKKwlEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrID0gaW9yZWFkMzIoRmxhc2hSZWcgKyBQQUdFU19QRVJfQkxPQ0spOworCisJRGV2aWNlSW5mby53UGFnZVNpemUgPQorCSAgICBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUgKyBEZXZpY2VJbmZvLndQYWdlU3BhcmVTaXplOworCURldmljZUluZm8ud0Jsb2NrU2l6ZSA9CisJICAgIERldmljZUluZm8ud1BhZ2VTaXplICogRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jazsKKwlEZXZpY2VJbmZvLndCbG9ja0RhdGFTaXplID0KKwkgICAgRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jayAqIERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZTsKKworCURldmljZUluZm8ud0RldmljZVdpZHRoID0gaW9yZWFkMzIoRmxhc2hSZWcgKyBERVZJQ0VfV0lEVEgpOworCURldmljZUluZm8ud0RldmljZVR5cGUgPQorCQkoKGlvcmVhZDMyKEZsYXNoUmVnICsgREVWSUNFX1dJRFRIKSA+IDApID8gMTYgOiA4KTsKKworCURldmljZUluZm8ud0RldmljZXNDb25uZWN0ZWQgPSBpb3JlYWQzMihGbGFzaFJlZyArIERFVklDRVNfQ09OTkVDVEVEKTsKKworCURldmljZUluZm8ud1NwYXJlU2tpcEJ5dGVzID0KKwkJaW9yZWFkMzIoRmxhc2hSZWcgKyBTUEFSRV9BUkVBX1NLSVBfQllURVMpICoKKwkJRGV2aWNlSW5mby53RGV2aWNlc0Nvbm5lY3RlZDsKKworCURldmljZUluZm8ubkJpdHNJblBhZ2VOdW1iZXIgPQorCQkodTgpR0xPQl9DYWxjX1VzZWRfQml0cyhEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrKTsKKwlEZXZpY2VJbmZvLm5CaXRzSW5QYWdlRGF0YVNpemUgPQorCQkodTgpR0xPQl9DYWxjX1VzZWRfQml0cyhEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUpOworCURldmljZUluZm8ubkJpdHNJbkJsb2NrRGF0YVNpemUgPQorCQkodTgpR0xPQl9DYWxjX1VzZWRfQml0cyhEZXZpY2VJbmZvLndCbG9ja0RhdGFTaXplKTsKKworCXNldF9lY2NfY29uZmlnKCk7CisKKwlub19vZl9wbGFuZXMgPSBpb3JlYWQzMihGbGFzaFJlZyArIE5VTUJFUl9PRl9QTEFORVMpICYKKwkJTlVNQkVSX09GX1BMQU5FU19fVkFMVUU7CisKKwlzd2l0Y2ggKG5vX29mX3BsYW5lcykgeworCWNhc2UgMDoKKwljYXNlIDE6CisJY2FzZSAzOgorCWNhc2UgNzoKKwkJRGV2aWNlSW5mby5iUGxhbmVOdW0gPSBub19vZl9wbGFuZXMgKyAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzdGF0dXMgPSBGQUlMOworCQlicmVhazsKKwl9CisKKwlmaW5kX3ZhbGlkX2JhbmtzKCk7CisKKwlkZXRlY3RfcGFydGl0aW9uX2ZlYXR1cmUoKTsKKworCWR1bXBfZGV2aWNlX2luZm8oKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3UxNiBOQU5EX1VubG9ja0FycmF5QWxsKHZvaWQpCit7CisJdTY0IHN0YXJ0X2FkZHIsIGVuZF9hZGRyOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlzdGFydF9hZGRyID0gMDsKKwllbmRfYWRkciA9ICgodTY0KURldmljZUluZm8ud0Jsb2NrU2l6ZSAqCisJCShEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyAtIDEpKSA+PgorCQlEZXZpY2VJbmZvLm5CaXRzSW5QYWdlRGF0YVNpemU7CisKKwlpbmRleF9hZGRyKCh1MzIpKE1PREVfMTAgfCAodTMyKXN0YXJ0X2FkZHIpLCAweDEwKTsKKwlpbmRleF9hZGRyKCh1MzIpKE1PREVfMTAgfCAodTMyKWVuZF9hZGRyKSwgMHgxMSk7CisKKwlyZXR1cm4gUEFTUzsKK30KKwordm9pZCBOQU5EX0xMRF9FbmFibGVfRGlzYWJsZV9JbnRlcnJ1cHRzKHUxNiBJTlRfRU5BQkxFKQoreworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJaWYgKElOVF9FTkFCTEUpCisJCWlvd3JpdGUzMigxLCBGbGFzaFJlZyArIEdMT0JBTF9JTlRfRU5BQkxFKTsKKwllbHNlCisJCWlvd3JpdGUzMigwLCBGbGFzaFJlZyArIEdMT0JBTF9JTlRfRU5BQkxFKTsKK30KKwordTE2IE5BTkRfRXJhc2VfQmxvY2sodTMyIGJsb2NrKQoreworCXUxNiBzdGF0dXMgPSBQQVNTOworCXU2NCBmbGFzaF9hZGQ7CisJdTE2IGZsYXNoX2Jhbms7CisJdTMyIGludHJfc3RhdHVzID0gMDsKKwl1MzIgaW50cl9zdGF0dXNfYWRkcmVzc2VzWzRdID0ge0lOVFJfU1RBVFVTMCwKKwkJSU5UUl9TVEFUVVMxLCBJTlRSX1NUQVRVUzIsIElOVFJfU1RBVFVTM307CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWZsYXNoX2FkZCA9ICh1NjQpKGJsb2NrICUgKERldmljZUluZm8ud1RvdGFsQmxvY2tzIC8gdG90YWxVc2VkQmFua3MpKQorCQkqIERldmljZUluZm8ud0Jsb2NrRGF0YVNpemU7CisKKwlmbGFzaF9iYW5rID0gYmxvY2sgLyAoRGV2aWNlSW5mby53VG90YWxCbG9ja3MgLyB0b3RhbFVzZWRCYW5rcyk7CisKKwlpZiAoYmxvY2sgPj0gRGV2aWNlSW5mby53VG90YWxCbG9ja3MpCisJCXN0YXR1cyA9IEZBSUw7CisKKwlpZiAoc3RhdHVzID09IFBBU1MpIHsKKwkJaW50cl9zdGF0dXMgPSBpbnRyX3N0YXR1c19hZGRyZXNzZXNbZmxhc2hfYmFua107CisKKwkJaW93cml0ZTMyKElOVFJfU1RBVFVTMF9fRVJBU0VfQ09NUCB8IElOVFJfU1RBVFVTMF9fRVJBU0VfRkFJTCwKKwkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCisJCWluZGV4X2FkZHIoKHUzMikoTU9ERV8xMCB8IChmbGFzaF9iYW5rIDw8IDI0KSB8CisJCQkoZmxhc2hfYWRkID4+IERldmljZUluZm8ubkJpdHNJblBhZ2VEYXRhU2l6ZSkpLCAxKTsKKworCQl3aGlsZSAoIShpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSAmCisJCQkoSU5UUl9TVEFUVVMwX19FUkFTRV9DT01QIHwgSU5UUl9TVEFUVVMwX19FUkFTRV9GQUlMKSkpCisJCQk7CisKKwkJaWYgKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpICYKKwkJCUlOVFJfU1RBVFVTMF9fRVJBU0VfRkFJTCkKKwkJCXN0YXR1cyA9IEZBSUw7CisKKwkJaW93cml0ZTMyKElOVFJfU1RBVFVTMF9fRVJBU0VfQ09NUCB8IElOVFJfU1RBVFVTMF9fRVJBU0VfRkFJTCwKKwkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB1MzIgQm91bmRhcnlfQ2hlY2tfQmxvY2tfUGFnZSh1MzIgYmxvY2ssIHUxNiBwYWdlLAorCQkJCQkJdTE2IHBhZ2VfY291bnQpCit7CisJdTMyIHN0YXR1cyA9IFBBU1M7CisKKwlpZiAoYmxvY2sgPj0gRGV2aWNlSW5mby53VG90YWxCbG9ja3MpCisJCXN0YXR1cyA9IEZBSUw7CisKKwlpZiAocGFnZSArIHBhZ2VfY291bnQgPiBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrKQorCQlzdGF0dXMgPSBGQUlMOworCisJcmV0dXJuIHN0YXR1czsKK30KKwordTE2IE5BTkRfUmVhZF9QYWdlX1NwYXJlKHU4ICpyZWFkX2RhdGEsIHUzMiBibG9jaywgdTE2IHBhZ2UsCisJCQkgICAgdTE2IHBhZ2VfY291bnQpCit7CisJdTMyIHN0YXR1cyA9IFBBU1M7CisJdTMyIGk7CisJdTY0IGZsYXNoX2FkZDsKKwl1MzIgUGFnZVNwYXJlU2l6ZSA9IERldmljZUluZm8ud1BhZ2VTcGFyZVNpemU7CisJdTMyIHNwYXJlRmxhZ0J5dGVzID0gRGV2aWNlSW5mby53TnVtUGFnZVNwYXJlRmxhZzsKKwl1MzIgZmxhc2hfYmFuazsKKwl1MzIgaW50cl9zdGF0dXMgPSAwOworCXUzMiBpbnRyX3N0YXR1c19hZGRyZXNzZXNbNF0gPSB7SU5UUl9TVEFUVVMwLAorCQlJTlRSX1NUQVRVUzEsIElOVFJfU1RBVFVTMiwgSU5UUl9TVEFUVVMzfTsKKwl1OCAqcGFnZV9zcGFyZSA9IGJ1Zl9yZWFkX3BhZ2Vfc3BhcmU7CisKKwlpZiAoYmxvY2sgPj0gRGV2aWNlSW5mby53VG90YWxCbG9ja3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJibG9jayB0b28gYmlnOiAlZFxuIiwgKGludClibG9jayk7CisJCXN0YXR1cyA9IEZBSUw7CisJfQorCisJaWYgKHBhZ2UgPj0gRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jaykgeworCQlwcmludGsoS0VSTl9FUlIgInBhZ2UgdG9vIGJpZzogJWRcbiIsIHBhZ2UpOworCQlzdGF0dXMgPSBGQUlMOworCX0KKworCWlmIChwYWdlX2NvdW50ID4gMSkgeworCQlwcmludGsoS0VSTl9FUlIgInBhZ2UgY291bnQgdG9vIGJpZzogJWRcbiIsIHBhZ2VfY291bnQpOworCQlzdGF0dXMgPSBGQUlMOworCX0KKworCWZsYXNoX2FkZCA9ICh1NjQpKGJsb2NrICUgKERldmljZUluZm8ud1RvdGFsQmxvY2tzIC8gdG90YWxVc2VkQmFua3MpKQorCQkqIERldmljZUluZm8ud0Jsb2NrRGF0YVNpemUgKworCQkodTY0KXBhZ2UgKiBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemU7CisKKwlmbGFzaF9iYW5rID0gYmxvY2sgLyAoRGV2aWNlSW5mby53VG90YWxCbG9ja3MgLyB0b3RhbFVzZWRCYW5rcyk7CisKKwlpZiAoc3RhdHVzID09IFBBU1MpIHsKKwkJaW50cl9zdGF0dXMgPSBpbnRyX3N0YXR1c19hZGRyZXNzZXNbZmxhc2hfYmFua107CisJCWlvd3JpdGUzMihpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSwKKwkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCisJCWluZGV4X2FkZHIoKHUzMikoTU9ERV8xMCB8IChmbGFzaF9iYW5rIDw8IDI0KSB8CisJCQkoZmxhc2hfYWRkID4+IERldmljZUluZm8ubkJpdHNJblBhZ2VEYXRhU2l6ZSkpLAorCQkJMHg0MSk7CisJCWluZGV4X2FkZHIoKHUzMikoTU9ERV8xMCB8IChmbGFzaF9iYW5rIDw8IDI0KSB8CisJCQkoZmxhc2hfYWRkID4+IERldmljZUluZm8ubkJpdHNJblBhZ2VEYXRhU2l6ZSkpLAorCQkJMHgyMDAwIHwgcGFnZV9jb3VudCk7CisJCXdoaWxlICghKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpICYKKwkJCUlOVFJfU1RBVFVTMF9fTE9BRF9DT01QKSkKKwkJCTsKKworCQlpb3dyaXRlMzIoKHUzMikoTU9ERV8wMSB8IChmbGFzaF9iYW5rIDw8IDI0KSB8CisJCQkoZmxhc2hfYWRkID4+IERldmljZUluZm8ubkJpdHNJblBhZ2VEYXRhU2l6ZSkpLAorCQkJRmxhc2hNZW0pOworCisJCWZvciAoaSA9IDA7IGkgPCAoUGFnZVNwYXJlU2l6ZSAvIDQpOyBpKyspCisJCQkqKCh1MzIgKilwYWdlX3NwYXJlICsgaSkgPQorCQkJCQlpb3JlYWQzMihGbGFzaE1lbSArIDB4MTApOworCisJCWlmIChlbmFibGVfZWNjKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgc3BhcmVGbGFnQnl0ZXM7IGkrKykKKwkJCQlyZWFkX2RhdGFbaV0gPQorCQkJCQlwYWdlX3NwYXJlW1BhZ2VTcGFyZVNpemUgLQorCQkJCQkJc3BhcmVGbGFnQnl0ZXMgKyBpXTsKKwkJCWZvciAoaSA9IDA7IGkgPCAoUGFnZVNwYXJlU2l6ZSAtIHNwYXJlRmxhZ0J5dGVzKTsgaSsrKQorCQkJCXJlYWRfZGF0YVtzcGFyZUZsYWdCeXRlcyArIGldID0KKwkJCQkJCQlwYWdlX3NwYXJlW2ldOworCQl9IGVsc2UgeworCQkJZm9yIChpID0gMDsgaSA8IFBhZ2VTcGFyZVNpemU7IGkrKykKKwkJCQlyZWFkX2RhdGFbaV0gPSBwYWdlX3NwYXJlW2ldOworCQl9CisKKwkJaW5kZXhfYWRkcigodTMyKShNT0RFXzEwIHwgKGZsYXNoX2JhbmsgPDwgMjQpIHwKKwkJCShmbGFzaF9hZGQgPj4gRGV2aWNlSW5mby5uQml0c0luUGFnZURhdGFTaXplKSksIDB4NDIpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIE5vIHVzZSBmdW5jdGlvbi4gU2hvdWxkIGJlIHJlbW92ZWQgbGF0ZXIgKi8KK3UxNiBOQU5EX1dyaXRlX1BhZ2VfU3BhcmUodTggKndyaXRlX2RhdGEsIHUzMiBibG9jaywgdTE2IHBhZ2UsCisJCQkgICAgIHUxNiBwYWdlX2NvdW50KQoreworCXByaW50ayhLRVJOX0VSUgorCSAgICAgICAiRXJyb3IhIFRoaXMgZnVuY3Rpb24gKE5BTkRfV3JpdGVfUGFnZV9TcGFyZSkgc2hvdWxkIG5ldmVyIgorCQkiIGJlIGNhbGxlZCFcbiIpOworCXJldHVybiBFUlI7Cit9CisKKy8qIG9wIHZhbHVlOiAgMCAtIERETUEgcmVhZDsgIDEgLSBERE1BIHdyaXRlICovCitzdGF0aWMgdm9pZCBkZG1hX3RyYW5zKHU4ICpkYXRhLCB1NjQgZmxhc2hfYWRkLAorCQkJdTMyIGZsYXNoX2JhbmssIGludCBvcCwgdTMyIG51bVBhZ2VzKQoreworCXUzMiBkYXRhX2FkZHI7CisKKwkvKiBNYXAgdmlydHVhbCBhZGRyZXNzIHRvIGJ1cyBhZGRyZXNzIGZvciBERE1BICovCisJZGF0YV9hZGRyID0gdmlydF90b19idXMoZGF0YSk7CisKKwlpbmRleF9hZGRyKCh1MzIpKE1PREVfMTAgfCAoZmxhc2hfYmFuayA8PCAyNCkgfAorCQkoZmxhc2hfYWRkID4+IERldmljZUluZm8ubkJpdHNJblBhZ2VEYXRhU2l6ZSkpLAorCQkodTE2KSgyIDw8IDEyKSB8IChvcCA8PCA4KSB8IG51bVBhZ2VzKTsKKworCWluZGV4X2FkZHIoKHUzMikoTU9ERV8xMCB8IChmbGFzaF9iYW5rIDw8IDI0KSB8CisJCSgodTE2KSgweDBGRkZGICYgKGRhdGFfYWRkciA+PiAxNikpIDw8IDgpKSwKKwkJKHUxNikoMiA8PCAxMikgfCAoMiA8PCA4KSB8IDApOworCisJaW5kZXhfYWRkcigodTMyKShNT0RFXzEwIHwgKGZsYXNoX2JhbmsgPDwgMjQpIHwKKwkJKCh1MTYpKDB4MEZGRkYgJiBkYXRhX2FkZHIpIDw8IDgpKSwKKwkJKHUxNikoMiA8PCAxMikgfCAoMyA8PCA4KSB8IDApOworCisJaW5kZXhfYWRkcigodTMyKShNT0RFXzEwIHwgKGZsYXNoX2JhbmsgPDwgMjQpIHwKKwkJKDEgPDwgMTYpIHwgKDB4NDAgPDwgOCkpLAorCQkodTE2KSgyIDw8IDEyKSB8ICg0IDw8IDgpIHwgMCk7Cit9CisKKy8qIElmIGRhdGEgaW4gYnVmIGFyZSBhbGwgMHhmZiwgdGhlbiByZXR1cm4gMTsgb3RoZXJ3aXNlIHJldHVybiAwICovCitzdGF0aWMgaW50IGNoZWNrX2FsbF8xKHU4ICpidWYpCit7CisJaW50IGksIGosIGNudDsKKworCWZvciAoaSA9IDA7IGkgPCBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemU7IGkrKykgeworCQlpZiAoYnVmW2ldICE9IDB4ZmYpIHsKKwkJCWNudCA9IDA7CisJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLAorCQkJCSJ0aGUgZmlyc3Qgbm9uLTB4ZmYgZGF0YSBieXRlIGlzOiAlZFxuIiwgaSk7CisJCQlmb3IgKGogPSBpOyBqIDwgRGV2aWNlSW5mby53UGFnZURhdGFTaXplOyBqKyspIHsKKwkJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiMHgleCAiLCBidWZbal0pOworCQkJCWNudCsrOworCQkJCWlmIChjbnQgPiA4KQorCQkJCQlicmVhazsKKwkJCX0KKwkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sICJcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBkb19lY2NfbmV3KHVuc2lnbmVkIGxvbmcgYmFuaywgdTggKmJ1ZiwKKwkJCQl1MzIgYmxvY2ssIHUxNiBwYWdlKQoreworCWludCBzdGF0dXMgPSBQQVNTOworCXUxNiBlcnJfcGFnZSA9IDA7CisJdTE2IGVycl9ieXRlOworCXU4IGVycl9zZWN0OworCXU4IGVycl9kZXY7CisJdTE2IGVycl9maXhfaW5mbzsKKwl1MTYgZXJyX2FkZHI7CisJdTMyIGVjY19zZWN0X3NpemU7CisJdTggKmVycl9wb3M7CisJdTMyIGVycl9wYWdlX2FkZHJbNF0gPSB7RVJSX1BBR0VfQUREUjAsCisJCUVSUl9QQUdFX0FERFIxLCBFUlJfUEFHRV9BRERSMiwgRVJSX1BBR0VfQUREUjN9OworCisJZWNjX3NlY3Rfc2l6ZSA9IEVDQ19TRUNUT1JfU0laRSAqIChEZXZpY2VJbmZvLndEZXZpY2VzQ29ubmVjdGVkKTsKKworCWRvIHsKKwkJZXJyX3BhZ2UgPSBpb3JlYWQzMihGbGFzaFJlZyArIGVycl9wYWdlX2FkZHJbYmFua10pOworCQllcnJfYWRkciA9IGlvcmVhZDMyKEZsYXNoUmVnICsgRUNDX0VSUk9SX0FERFJFU1MpOworCQllcnJfYnl0ZSA9IGVycl9hZGRyICYgRUNDX0VSUk9SX0FERFJFU1NfX09GRlNFVDsKKwkJZXJyX3NlY3QgPSAoKGVycl9hZGRyICYgRUNDX0VSUk9SX0FERFJFU1NfX1NFQ1RPUl9OUikgPj4gMTIpOworCQllcnJfZml4X2luZm8gPSBpb3JlYWQzMihGbGFzaFJlZyArIEVSUl9DT1JSRUNUSU9OX0lORk8pOworCQllcnJfZGV2ID0gKChlcnJfZml4X2luZm8gJiBFUlJfQ09SUkVDVElPTl9JTkZPX19ERVZJQ0VfTlIpCisJCQk+PiA4KTsKKwkJaWYgKGVycl9maXhfaW5mbyAmIEVSUl9DT1JSRUNUSU9OX0lORk9fX0VSUk9SX1RZUEUpIHsKKwkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sCisJCQkJIiVzLCBMaW5lICVkIFVuY29ycmVjdGFibGUgRUNDIGVycm9yICIKKwkJCQkid2hlbiByZWFkIGJsb2NrICVkIHBhZ2UgJWQuIgorCQkJCSJQVE5fSU5UUiByZWdpc3RlcjogMHgleCAiCisJCQkJImVycl9wYWdlOiAlZCwgZXJyX3NlY3Q6ICVkLCBlcnJfYnl0ZTogJWQsICIKKwkJCQkiZXJyX2RldjogJWQsIGVjY19zZWN0X3NpemU6ICVkLCAiCisJCQkJImVycl9maXhfaW5mbzogMHgleFxuIiwKKwkJCQlfX0ZJTEVfXywgX19MSU5FX18sIGJsb2NrLCBwYWdlLAorCQkJCWlvcmVhZDMyKEZsYXNoUmVnICsgUFROX0lOVFIpLAorCQkJCWVycl9wYWdlLCBlcnJfc2VjdCwgZXJyX2J5dGUsIGVycl9kZXYsCisJCQkJZWNjX3NlY3Rfc2l6ZSwgKHUzMillcnJfZml4X2luZm8pOworCisJCQlpZiAoY2hlY2tfYWxsXzEoYnVmKSkKKwkJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiJXMsIExpbmUgJWQiCisJCQkJCSAgICAgICAiQWxsIDB4ZmYhXG4iLAorCQkJCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fKTsKKwkJCWVsc2UKKwkJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiJXMsIExpbmUgJWQiCisJCQkJCSAgICAgICAiTm90IGFsbCAweGZmIVxuIiwKKwkJCQkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXyk7CisJCQlzdGF0dXMgPSBGQUlMOworCQl9IGVsc2UgeworCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJCQkiJXMsIExpbmUgJWQgRm91bmQgRUNDIGVycm9yICIKKwkJCQkid2hlbiByZWFkIGJsb2NrICVkIHBhZ2UgJWQuIgorCQkJCSJlcnJfcGFnZTogJWQsIGVycl9zZWN0OiAlZCwgZXJyX2J5dGU6ICVkLCAiCisJCQkJImVycl9kZXY6ICVkLCBlY2Nfc2VjdF9zaXplOiAlZCwgIgorCQkJCSJlcnJfZml4X2luZm86IDB4JXhcbiIsCisJCQkJX19GSUxFX18sIF9fTElORV9fLCBibG9jaywgcGFnZSwKKwkJCQllcnJfcGFnZSwgZXJyX3NlY3QsIGVycl9ieXRlLCBlcnJfZGV2LAorCQkJCWVjY19zZWN0X3NpemUsICh1MzIpZXJyX2ZpeF9pbmZvKTsKKwkJCWlmIChlcnJfYnl0ZSA8IEVDQ19TRUNUT1JfU0laRSkgeworCQkJCWVycl9wb3MgPSBidWYgKworCQkJCQkoZXJyX3BhZ2UgLSBwYWdlKSAqCisJCQkJCURldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSArCisJCQkJCWVycl9zZWN0ICogZWNjX3NlY3Rfc2l6ZSArCisJCQkJCWVycl9ieXRlICoKKwkJCQkJRGV2aWNlSW5mby53RGV2aWNlc0Nvbm5lY3RlZCArCisJCQkJCWVycl9kZXY7CisKKwkJCQkqZXJyX3BvcyBePSBlcnJfZml4X2luZm8gJgorCQkJCQlFUlJfQ09SUkVDVElPTl9JTkZPX19CWVRFTUFTSzsKKwkJCX0KKwkJfQorCX0gd2hpbGUgKCEoZXJyX2ZpeF9pbmZvICYgRVJSX0NPUlJFQ1RJT05fSU5GT19fTEFTVF9FUlJfSU5GTykpOworCisJcmV0dXJuIHN0YXR1czsKK30KKwordTE2IE5BTkRfUmVhZF9QYWdlX01haW5fUG9sbGluZyh1OCAqcmVhZF9kYXRhLAorCQl1MzIgYmxvY2ssIHUxNiBwYWdlLCB1MTYgcGFnZV9jb3VudCkKK3sKKwl1MzIgc3RhdHVzID0gUEFTUzsKKwl1NjQgZmxhc2hfYWRkOworCXUzMiBpbnRyX3N0YXR1cyA9IDA7CisJdTMyIGZsYXNoX2Jhbms7CisJdTMyIGludHJfc3RhdHVzX2FkZHJlc3Nlc1s0XSA9IHtJTlRSX1NUQVRVUzAsCisJCUlOVFJfU1RBVFVTMSwgSU5UUl9TVEFUVVMyLCBJTlRSX1NUQVRVUzN9OworCXU4ICpyZWFkX2RhdGFfbDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlzdGF0dXMgPSBCb3VuZGFyeV9DaGVja19CbG9ja19QYWdlKGJsb2NrLCBwYWdlLCBwYWdlX2NvdW50KTsKKwlpZiAoc3RhdHVzICE9IFBBU1MpCisJCXJldHVybiBzdGF0dXM7CisKKwlmbGFzaF9hZGQgPSAodTY0KShibG9jayAlIChEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyAvIHRvdGFsVXNlZEJhbmtzKSkKKwkJKiBEZXZpY2VJbmZvLndCbG9ja0RhdGFTaXplICsKKwkJKHU2NClwYWdlICogRGV2aWNlSW5mby53UGFnZURhdGFTaXplOworCWZsYXNoX2JhbmsgPSBibG9jayAvIChEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyAvIHRvdGFsVXNlZEJhbmtzKTsKKworCWlvd3JpdGUzMigwLCBGbGFzaFJlZyArIFRSQU5TRkVSX1NQQVJFX1JFRyk7CisKKwlpbnRyX3N0YXR1cyA9IGludHJfc3RhdHVzX2FkZHJlc3Nlc1tmbGFzaF9iYW5rXTsKKwlpb3dyaXRlMzIoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyksIEZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCisJaWYgKHBhZ2VfY291bnQgPiAxKSB7CisJCXJlYWRfZGF0YV9sID0gcmVhZF9kYXRhOworCQl3aGlsZSAocGFnZV9jb3VudCA+IE1BWF9QQUdFU19QRVJfUlcpIHsKKwkJCWlmIChpb3JlYWQzMihGbGFzaFJlZyArIE1VTFRJUExBTkVfT1BFUkFUSU9OKSkKKwkJCQlzdGF0dXMgPSBOQU5EX011bHRpcGxhbmVfUmVhZChyZWFkX2RhdGFfbCwKKwkJCQkJYmxvY2ssIHBhZ2UsIE1BWF9QQUdFU19QRVJfUlcpOworCQkJZWxzZQorCQkJCXN0YXR1cyA9IE5BTkRfUGlwZWxpbmVfUmVhZF9BaGVhZF9Qb2xsaW5nKAorCQkJCQlyZWFkX2RhdGFfbCwgYmxvY2ssIHBhZ2UsCisJCQkJCU1BWF9QQUdFU19QRVJfUlcpOworCisJCQlpZiAoc3RhdHVzID09IEZBSUwpCisJCQkJcmV0dXJuIHN0YXR1czsKKworCQkJcmVhZF9kYXRhX2wgKz0gRGV2aWNlSW5mby53UGFnZURhdGFTaXplICoKKwkJCQkJTUFYX1BBR0VTX1BFUl9SVzsKKwkJCXBhZ2VfY291bnQgLT0gTUFYX1BBR0VTX1BFUl9SVzsKKwkJCXBhZ2UgKz0gTUFYX1BBR0VTX1BFUl9SVzsKKwkJfQorCQlpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBNVUxUSVBMQU5FX09QRVJBVElPTikpCisJCQlzdGF0dXMgPSBOQU5EX011bHRpcGxhbmVfUmVhZChyZWFkX2RhdGFfbCwKKwkJCQkJYmxvY2ssIHBhZ2UsIHBhZ2VfY291bnQpOworCQllbHNlCisJCQlzdGF0dXMgPSBOQU5EX1BpcGVsaW5lX1JlYWRfQWhlYWRfUG9sbGluZygKKwkJCQkJcmVhZF9kYXRhX2wsIGJsb2NrLCBwYWdlLCBwYWdlX2NvdW50KTsKKworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCWlvd3JpdGUzMigxLCBGbGFzaFJlZyArIERNQV9FTkFCTEUpOworCXdoaWxlICghKGlvcmVhZDMyKEZsYXNoUmVnICsgRE1BX0VOQUJMRSkgJiBETUFfRU5BQkxFX19GTEFHKSkKKwkJOworCisJaW93cml0ZTMyKDAsIEZsYXNoUmVnICsgVFJBTlNGRVJfU1BBUkVfUkVHKTsKKwlpb3dyaXRlMzIoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyksIEZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCisJZGRtYV90cmFucyhyZWFkX2RhdGEsIGZsYXNoX2FkZCwgZmxhc2hfYmFuaywgMCwgMSk7CisKKwlpZiAoZW5hYmxlX2VjYykgeworCQl3aGlsZSAoIShpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSAmCisJCQkoSU5UUl9TVEFUVVMwX19FQ0NfVFJBTlNBQ1RJT05fRE9ORSB8CisJCQlJTlRSX1NUQVRVUzBfX0VDQ19FUlIpKSkKKwkJCTsKKworCQlpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykgJgorCQkJSU5UUl9TVEFUVVMwX19FQ0NfRVJSKSB7CisJCQlpb3dyaXRlMzIoSU5UUl9TVEFUVVMwX19FQ0NfRVJSLAorCQkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCQkJc3RhdHVzID0gZG9fZWNjX25ldyhmbGFzaF9iYW5rLCByZWFkX2RhdGEsCisJCQkJCWJsb2NrLCBwYWdlKTsKKwkJfQorCisJCWlmIChpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSAmCisJCQlJTlRSX1NUQVRVUzBfX0VDQ19UUkFOU0FDVElPTl9ET05FICYKKwkJCUlOVFJfU1RBVFVTMF9fRUNDX0VSUikKKwkJCWlvd3JpdGUzMihJTlRSX1NUQVRVUzBfX0VDQ19UUkFOU0FDVElPTl9ET05FIHwKKwkJCQlJTlRSX1NUQVRVUzBfX0VDQ19FUlIsCisJCQkJRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisJCWVsc2UgaWYgKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpICYKKwkJCUlOVFJfU1RBVFVTMF9fRUNDX1RSQU5TQUNUSU9OX0RPTkUpCisJCQlpb3dyaXRlMzIoSU5UUl9TVEFUVVMwX19FQ0NfVFJBTlNBQ1RJT05fRE9ORSwKKwkJCQlGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKwkJZWxzZSBpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykgJgorCQkJSU5UUl9TVEFUVVMwX19FQ0NfRVJSKQorCQkJaW93cml0ZTMyKElOVFJfU1RBVFVTMF9fRUNDX0VSUiwKKwkJCQlGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKwl9IGVsc2UgeworCQl3aGlsZSAoIShpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSAmCisJCQlJTlRSX1NUQVRVUzBfX0RNQV9DTURfQ09NUCkpCisJCQk7CisJCWlvd3JpdGUzMihJTlRSX1NUQVRVUzBfX0RNQV9DTURfQ09NUCwgRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisJfQorCisJaW93cml0ZTMyKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpLCBGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKworCWlvd3JpdGUzMigwLCBGbGFzaFJlZyArIERNQV9FTkFCTEUpOworCXdoaWxlICgoaW9yZWFkMzIoRmxhc2hSZWcgKyBETUFfRU5BQkxFKSAmIERNQV9FTkFCTEVfX0ZMQUcpKQorCQk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCit1MTYgTkFORF9QaXBlbGluZV9SZWFkX0FoZWFkX1BvbGxpbmcodTggKnJlYWRfZGF0YSwKKwkJCXUzMiBibG9jaywgdTE2IHBhZ2UsIHUxNiBwYWdlX2NvdW50KQoreworCXUzMiBzdGF0dXMgPSBQQVNTOworCXUzMiBOdW1QYWdlcyA9IHBhZ2VfY291bnQ7CisJdTY0IGZsYXNoX2FkZDsKKwl1MzIgZmxhc2hfYmFuazsKKwl1MzIgaW50cl9zdGF0dXMgPSAwOworCXUzMiBpbnRyX3N0YXR1c19hZGRyZXNzZXNbNF0gPSB7SU5UUl9TVEFUVVMwLAorCQlJTlRSX1NUQVRVUzEsIElOVFJfU1RBVFVTMiwgSU5UUl9TVEFUVVMzfTsKKwl1MzIgZWNjX2RvbmVfT1JfZG1hX2NvbXA7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJc3RhdHVzID0gQm91bmRhcnlfQ2hlY2tfQmxvY2tfUGFnZShibG9jaywgcGFnZSwgcGFnZV9jb3VudCk7CisKKwlpZiAocGFnZV9jb3VudCA8IDIpCisJCXN0YXR1cyA9IEZBSUw7CisKKwlmbGFzaF9hZGQgPSAodTY0KShibG9jayAlIChEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyAvIHRvdGFsVXNlZEJhbmtzKSkKKwkJKkRldmljZUluZm8ud0Jsb2NrRGF0YVNpemUgKworCQkodTY0KXBhZ2UgKiBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemU7CisKKwlmbGFzaF9iYW5rID0gYmxvY2sgLyAoRGV2aWNlSW5mby53VG90YWxCbG9ja3MgLyB0b3RhbFVzZWRCYW5rcyk7CisKKwlpZiAoc3RhdHVzID09IFBBU1MpIHsKKwkJaW50cl9zdGF0dXMgPSBpbnRyX3N0YXR1c19hZGRyZXNzZXNbZmxhc2hfYmFua107CisJCWlvd3JpdGUzMihpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSwKKwkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCisJCWlvd3JpdGUzMigxLCBGbGFzaFJlZyArIERNQV9FTkFCTEUpOworCQl3aGlsZSAoIShpb3JlYWQzMihGbGFzaFJlZyArIERNQV9FTkFCTEUpICYgRE1BX0VOQUJMRV9fRkxBRykpCisJCQk7CisKKwkJaW93cml0ZTMyKDAsIEZsYXNoUmVnICsgVFJBTlNGRVJfU1BBUkVfUkVHKTsKKworCQlpbmRleF9hZGRyKCh1MzIpKE1PREVfMTAgfCAoZmxhc2hfYmFuayA8PCAyNCkgfAorCQkJKGZsYXNoX2FkZCA+PiBEZXZpY2VJbmZvLm5CaXRzSW5QYWdlRGF0YVNpemUpKSwgMHg0Mik7CisJCWRkbWFfdHJhbnMocmVhZF9kYXRhLCBmbGFzaF9hZGQsIGZsYXNoX2JhbmssIDAsIE51bVBhZ2VzKTsKKworCQllY2NfZG9uZV9PUl9kbWFfY29tcCA9IDA7CisJCXdoaWxlICgxKSB7CisJCQlpZiAoZW5hYmxlX2VjYykgeworCQkJCXdoaWxlICghaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykpCisJCQkJCTsKKworCQkJCWlmIChpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSAmCisJCQkJCUlOVFJfU1RBVFVTMF9fRUNDX0VSUikgeworCQkJCQlpb3dyaXRlMzIoSU5UUl9TVEFUVVMwX19FQ0NfRVJSLAorCQkJCQkJRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisJCQkJCXN0YXR1cyA9IGRvX2VjY19uZXcoZmxhc2hfYmFuaywKKwkJCQkJCXJlYWRfZGF0YSwgYmxvY2ssIHBhZ2UpOworCQkJCX0gZWxzZSBpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykgJgorCQkJCQlJTlRSX1NUQVRVUzBfX0RNQV9DTURfQ09NUCkgeworCQkJCQlpb3dyaXRlMzIoSU5UUl9TVEFUVVMwX19ETUFfQ01EX0NPTVAsCisJCQkJCQlGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKworCQkJCQlpZiAoMSA9PSBlY2NfZG9uZV9PUl9kbWFfY29tcCkKKwkJCQkJCWJyZWFrOworCisJCQkJCWVjY19kb25lX09SX2RtYV9jb21wID0gMTsKKwkJCQl9IGVsc2UgaWYgKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpICYKKwkJCQkJSU5UUl9TVEFUVVMwX19FQ0NfVFJBTlNBQ1RJT05fRE9ORSkgeworCQkJCQlpb3dyaXRlMzIoCisJCQkJCUlOVFJfU1RBVFVTMF9fRUNDX1RSQU5TQUNUSU9OX0RPTkUsCisJCQkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCisJCQkJCWlmICgxID09IGVjY19kb25lX09SX2RtYV9jb21wKQorCQkJCQkJYnJlYWs7CisKKwkJCQkJZWNjX2RvbmVfT1JfZG1hX2NvbXAgPSAxOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJd2hpbGUgKCEoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykgJgorCQkJCQlJTlRSX1NUQVRVUzBfX0RNQV9DTURfQ09NUCkpCisJCQkJCTsKKworCQkJCWlvd3JpdGUzMihJTlRSX1NUQVRVUzBfX0RNQV9DTURfQ09NUCwKKwkJCQkJRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlvd3JpdGUzMigofklOVFJfU1RBVFVTMF9fRUNDX0VSUikgJgorCQkJCSh+SU5UUl9TVEFUVVMwX19FQ0NfVFJBTlNBQ1RJT05fRE9ORSkgJgorCQkJCSh+SU5UUl9TVEFUVVMwX19ETUFfQ01EX0NPTVApLAorCQkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCisJCX0KKworCQlpb3dyaXRlMzIoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyksCisJCQlGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKworCQlpb3dyaXRlMzIoMCwgRmxhc2hSZWcgKyBETUFfRU5BQkxFKTsKKworCQl3aGlsZSAoKGlvcmVhZDMyKEZsYXNoUmVnICsgRE1BX0VOQUJMRSkgJiBETUFfRU5BQkxFX19GTEFHKSkKKwkJCTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKwordTE2IE5BTkRfUmVhZF9QYWdlX01haW4odTggKnJlYWRfZGF0YSwgdTMyIGJsb2NrLCB1MTYgcGFnZSwKKwkJCSAgIHUxNiBwYWdlX2NvdW50KQoreworCXUzMiBzdGF0dXMgPSBQQVNTOworCXU2NCBmbGFzaF9hZGQ7CisJdTMyIGludHJfc3RhdHVzID0gMDsKKwl1MzIgZmxhc2hfYmFuazsKKwl1MzIgaW50cl9zdGF0dXNfYWRkcmVzc2VzWzRdID0ge0lOVFJfU1RBVFVTMCwKKwkJSU5UUl9TVEFUVVMxLCBJTlRSX1NUQVRVUzIsIElOVFJfU1RBVFVTM307CisJaW50IHJldDsKKwl1OCAqcmVhZF9kYXRhX2w7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCXN0YXR1cyA9IEJvdW5kYXJ5X0NoZWNrX0Jsb2NrX1BhZ2UoYmxvY2ssIHBhZ2UsIHBhZ2VfY291bnQpOworCWlmIChzdGF0dXMgIT0gUEFTUykKKwkJcmV0dXJuIHN0YXR1czsKKworCWZsYXNoX2FkZCA9ICh1NjQpKGJsb2NrICUgKERldmljZUluZm8ud1RvdGFsQmxvY2tzIC8gdG90YWxVc2VkQmFua3MpKQorCQkqIERldmljZUluZm8ud0Jsb2NrRGF0YVNpemUgKworCQkodTY0KXBhZ2UgKiBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemU7CisJZmxhc2hfYmFuayA9IGJsb2NrIC8gKERldmljZUluZm8ud1RvdGFsQmxvY2tzIC8gdG90YWxVc2VkQmFua3MpOworCisJaW93cml0ZTMyKDAsIEZsYXNoUmVnICsgVFJBTlNGRVJfU1BBUkVfUkVHKTsKKworCWludHJfc3RhdHVzID0gaW50cl9zdGF0dXNfYWRkcmVzc2VzW2ZsYXNoX2JhbmtdOworCWlvd3JpdGUzMihpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSwgRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisKKwlpZiAocGFnZV9jb3VudCA+IDEpIHsKKwkJcmVhZF9kYXRhX2wgPSByZWFkX2RhdGE7CisJCXdoaWxlIChwYWdlX2NvdW50ID4gTUFYX1BBR0VTX1BFUl9SVykgeworCQkJaWYgKGlvcmVhZDMyKEZsYXNoUmVnICsgTVVMVElQTEFORV9PUEVSQVRJT04pKQorCQkJCXN0YXR1cyA9IE5BTkRfTXVsdGlwbGFuZV9SZWFkKHJlYWRfZGF0YV9sLAorCQkJCQlibG9jaywgcGFnZSwgTUFYX1BBR0VTX1BFUl9SVyk7CisJCQllbHNlCisJCQkJc3RhdHVzID0gTkFORF9QaXBlbGluZV9SZWFkX0FoZWFkKAorCQkJCQlyZWFkX2RhdGFfbCwgYmxvY2ssIHBhZ2UsCisJCQkJCU1BWF9QQUdFU19QRVJfUlcpOworCisJCQlpZiAoc3RhdHVzID09IEZBSUwpCisJCQkJcmV0dXJuIHN0YXR1czsKKworCQkJcmVhZF9kYXRhX2wgKz0gRGV2aWNlSW5mby53UGFnZURhdGFTaXplICoKKwkJCQkJTUFYX1BBR0VTX1BFUl9SVzsKKwkJCXBhZ2VfY291bnQgLT0gTUFYX1BBR0VTX1BFUl9SVzsKKwkJCXBhZ2UgKz0gTUFYX1BBR0VTX1BFUl9SVzsKKwkJfQorCQlpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBNVUxUSVBMQU5FX09QRVJBVElPTikpCisJCQlzdGF0dXMgPSBOQU5EX011bHRpcGxhbmVfUmVhZChyZWFkX2RhdGFfbCwKKwkJCQkJYmxvY2ssIHBhZ2UsIHBhZ2VfY291bnQpOworCQllbHNlCisJCQlzdGF0dXMgPSBOQU5EX1BpcGVsaW5lX1JlYWRfQWhlYWQoCisJCQkJCXJlYWRfZGF0YV9sLCBibG9jaywgcGFnZSwgcGFnZV9jb3VudCk7CisKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlpb3dyaXRlMzIoMSwgRmxhc2hSZWcgKyBETUFfRU5BQkxFKTsKKwl3aGlsZSAoIShpb3JlYWQzMihGbGFzaFJlZyArIERNQV9FTkFCTEUpICYgRE1BX0VOQUJMRV9fRkxBRykpCisJCTsKKworCWlvd3JpdGUzMigwLCBGbGFzaFJlZyArIFRSQU5TRkVSX1NQQVJFX1JFRyk7CisJaW93cml0ZTMyKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpLCBGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKworCS8qIEZpbGwgdGhlIG1yc3RfbmFuZF9pbmZvIHN0cnVjdHVyZSAqLworCWluZm8uc3RhdGUgPSBJTlRfUkVBRF9QQUdFX01BSU47CisJaW5mby5yZWFkX2RhdGEgPSByZWFkX2RhdGE7CisJaW5mby5mbGFzaF9iYW5rID0gZmxhc2hfYmFuazsKKwlpbmZvLmJsb2NrID0gYmxvY2s7CisJaW5mby5wYWdlID0gcGFnZTsKKwlpbmZvLnJldCA9IFBBU1M7CisKKwlkZG1hX3RyYW5zKHJlYWRfZGF0YSwgZmxhc2hfYWRkLCBmbGFzaF9iYW5rLCAwLCAxKTsKKworCWlvd3JpdGUzMigxLCBGbGFzaFJlZyArIEdMT0JBTF9JTlRfRU5BQkxFKTsgLyogRW5hYmxlIEludGVycnVwdCAqLworCisJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpbmZvLmNvbXBsZXRlLCAxMCAqIEhaKTsKKwlpZiAoIXJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIldhaXQgZm9yIGNvbXBsZXRpb24gdGltZW91dCAiCisJCQkiaW4gJXMsIExpbmUgJWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisJCXN0YXR1cyA9IEVSUjsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSBpbmZvLnJldDsKKwl9CisKKwlpb3dyaXRlMzIoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyksIEZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCisJaW93cml0ZTMyKDAsIEZsYXNoUmVnICsgRE1BX0VOQUJMRSk7CisJd2hpbGUgKChpb3JlYWQzMihGbGFzaFJlZyArIERNQV9FTkFCTEUpICYgRE1BX0VOQUJMRV9fRkxBRykpCisJCTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3ZvaWQgQ29udl9TcGFyZV9EYXRhX0xvZzJQaHlfRm9ybWF0KHU4ICpkYXRhKQoreworCWludCBpOworCWNvbnN0IHUzMiBzcGFyZUZsYWdCeXRlcyA9IERldmljZUluZm8ud051bVBhZ2VTcGFyZUZsYWc7CisJY29uc3QgdTMyIFBhZ2VTcGFyZVNpemUgID0gRGV2aWNlSW5mby53UGFnZVNwYXJlU2l6ZTsKKworCWlmIChlbmFibGVfZWNjKSB7CisJCWZvciAoaSA9IHNwYXJlRmxhZ0J5dGVzIC0gMTsgaSA+PSAwOyBpKyspCisJCQlkYXRhW1BhZ2VTcGFyZVNpemUgLSBzcGFyZUZsYWdCeXRlcyArIGldID0gZGF0YVtpXTsKKwl9Cit9CisKK3ZvaWQgQ29udl9TcGFyZV9EYXRhX1BoeTJMb2dfRm9ybWF0KHU4ICpkYXRhKQoreworCWludCBpOworCWNvbnN0IHUzMiBzcGFyZUZsYWdCeXRlcyA9IERldmljZUluZm8ud051bVBhZ2VTcGFyZUZsYWc7CisJY29uc3QgdTMyIFBhZ2VTcGFyZVNpemUgPSBEZXZpY2VJbmZvLndQYWdlU3BhcmVTaXplOworCisJaWYgKGVuYWJsZV9lY2MpIHsKKwkJZm9yIChpID0gMDsgaSA8IHNwYXJlRmxhZ0J5dGVzOyBpKyspCisJCQlkYXRhW2ldID0gZGF0YVtQYWdlU3BhcmVTaXplIC0gc3BhcmVGbGFnQnl0ZXMgKyBpXTsKKwl9Cit9CisKKwordm9pZCBDb252X01haW5fU3BhcmVfRGF0YV9Mb2cyUGh5X0Zvcm1hdCh1OCAqZGF0YSwgdTE2IHBhZ2VfY291bnQpCit7CisJY29uc3QgdTMyIFBhZ2VTaXplID0gRGV2aWNlSW5mby53UGFnZVNpemU7CisJY29uc3QgdTMyIFBhZ2VEYXRhU2l6ZSA9IERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZTsKKwljb25zdCB1MzIgZWNjQnl0ZXMgPSBEZXZpY2VJbmZvLndFQ0NCeXRlc1BlclNlY3RvcjsKKwljb25zdCB1MzIgc3BhcmVTa2lwQnl0ZXMgPSBEZXZpY2VJbmZvLndTcGFyZVNraXBCeXRlczsKKwljb25zdCB1MzIgc3BhcmVGbGFnQnl0ZXMgPSBEZXZpY2VJbmZvLndOdW1QYWdlU3BhcmVGbGFnOworCXUzMiBlY2NTZWN0b3JTaXplOworCXUzMiBwYWdlX29mZnNldDsKKwlpbnQgaSwgajsKKworCWVjY1NlY3RvclNpemUgPSBFQ0NfU0VDVE9SX1NJWkUgKiAoRGV2aWNlSW5mby53RGV2aWNlc0Nvbm5lY3RlZCk7CisJaWYgKGVuYWJsZV9lY2MpIHsKKwkJd2hpbGUgKHBhZ2VfY291bnQgPiAwKSB7CisJCQlwYWdlX29mZnNldCA9IChwYWdlX2NvdW50IC0gMSkgKiBQYWdlU2l6ZTsKKwkJCWogPSAoRGV2aWNlSW5mby53UGFnZURhdGFTaXplIC8gZWNjU2VjdG9yU2l6ZSk7CisJCQlmb3IgKGkgPSBzcGFyZUZsYWdCeXRlcyAtIDE7IGkgPj0gMDsgaS0tKQorCQkJCWRhdGFbcGFnZV9vZmZzZXQgKworCQkJCQkoZWNjU2VjdG9yU2l6ZSArIGVjY0J5dGVzKSAqIGogKyBpXSA9CisJCQkJCWRhdGFbcGFnZV9vZmZzZXQgKyBQYWdlRGF0YVNpemUgKyBpXTsKKwkJCWZvciAoai0tOyBqID49IDE7IGotLSkgeworCQkJCWZvciAoaSA9IGVjY1NlY3RvclNpemUgLSAxOyBpID49IDA7IGktLSkKKwkJCQkJZGF0YVtwYWdlX29mZnNldCArCisJCQkJCShlY2NTZWN0b3JTaXplICsgZWNjQnl0ZXMpICogaiArIGldID0KKwkJCQkJCWRhdGFbcGFnZV9vZmZzZXQgKworCQkJCQkJZWNjU2VjdG9yU2l6ZSAqIGogKyBpXTsKKwkJCX0KKwkJCWZvciAoaSA9IChQYWdlU2l6ZSAtIHNwYXJlU2tpcEJ5dGVzKSAtIDE7CisJCQkJaSA+PSBQYWdlRGF0YVNpemU7IGktLSkKKwkJCQlkYXRhW3BhZ2Vfb2Zmc2V0ICsgaSArIHNwYXJlU2tpcEJ5dGVzXSA9CisJCQkJCWRhdGFbcGFnZV9vZmZzZXQgKyBpXTsKKwkJCXBhZ2VfY291bnQtLTsKKwkJfQorCX0KK30KKwordm9pZCBDb252X01haW5fU3BhcmVfRGF0YV9QaHkyTG9nX0Zvcm1hdCh1OCAqZGF0YSwgdTE2IHBhZ2VfY291bnQpCit7CisJY29uc3QgdTMyIFBhZ2VTaXplID0gRGV2aWNlSW5mby53UGFnZVNpemU7CisJY29uc3QgdTMyIFBhZ2VEYXRhU2l6ZSA9IERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZTsKKwljb25zdCB1MzIgZWNjQnl0ZXMgPSBEZXZpY2VJbmZvLndFQ0NCeXRlc1BlclNlY3RvcjsKKwljb25zdCB1MzIgc3BhcmVTa2lwQnl0ZXMgPSBEZXZpY2VJbmZvLndTcGFyZVNraXBCeXRlczsKKwljb25zdCB1MzIgc3BhcmVGbGFnQnl0ZXMgPSBEZXZpY2VJbmZvLndOdW1QYWdlU3BhcmVGbGFnOworCXUzMiBlY2NTZWN0b3JTaXplOworCXUzMiBwYWdlX29mZnNldDsKKwlpbnQgaSwgajsKKworCWVjY1NlY3RvclNpemUgPSBFQ0NfU0VDVE9SX1NJWkUgKiAoRGV2aWNlSW5mby53RGV2aWNlc0Nvbm5lY3RlZCk7CisJaWYgKGVuYWJsZV9lY2MpIHsKKwkJd2hpbGUgKHBhZ2VfY291bnQgPiAwKSB7CisJCQlwYWdlX29mZnNldCA9IChwYWdlX2NvdW50IC0gMSkgKiBQYWdlU2l6ZTsKKwkJCWZvciAoaSA9IFBhZ2VEYXRhU2l6ZTsKKwkJCQlpIDwgUGFnZVNpemUgLSBzcGFyZVNraXBCeXRlczsKKwkJCQlpKyspCisJCQkJZGF0YVtwYWdlX29mZnNldCArIGldID0KKwkJCQkJZGF0YVtwYWdlX29mZnNldCArIGkgKworCQkJCQlzcGFyZVNraXBCeXRlc107CisJCQlmb3IgKGogPSAxOworCQkJaiA8IERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSAvIGVjY1NlY3RvclNpemU7CisJCQlqKyspIHsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgZWNjU2VjdG9yU2l6ZTsgaSsrKQorCQkJCQlkYXRhW3BhZ2Vfb2Zmc2V0ICsKKwkJCQkJZWNjU2VjdG9yU2l6ZSAqIGogKyBpXSA9CisJCQkJCQlkYXRhW3BhZ2Vfb2Zmc2V0ICsKKwkJCQkJCShlY2NTZWN0b3JTaXplICsgZWNjQnl0ZXMpICogagorCQkJCQkJKyBpXTsKKwkJCX0KKwkJCWZvciAoaSA9IDA7IGkgPCBzcGFyZUZsYWdCeXRlczsgaSsrKQorCQkJCWRhdGFbcGFnZV9vZmZzZXQgKyBQYWdlRGF0YVNpemUgKyBpXSA9CisJCQkJCWRhdGFbcGFnZV9vZmZzZXQgKworCQkJCQkoZWNjU2VjdG9yU2l6ZSArIGVjY0J5dGVzKSAqIGogKyBpXTsKKwkJCXBhZ2VfY291bnQtLTsKKwkJfQorCX0KK30KKworLyogVW4tdGVzdGVkIGZ1bmN0aW9uICovCit1MTYgTkFORF9NdWx0aXBsYW5lX1JlYWQodTggKnJlYWRfZGF0YSwgdTMyIGJsb2NrLCB1MTYgcGFnZSwKKwkJCSAgICB1MTYgcGFnZV9jb3VudCkKK3sKKwl1MzIgc3RhdHVzID0gUEFTUzsKKwl1MzIgTnVtUGFnZXMgPSBwYWdlX2NvdW50OworCXU2NCBmbGFzaF9hZGQ7CisJdTMyIGZsYXNoX2Jhbms7CisJdTMyIGludHJfc3RhdHVzID0gMDsKKwl1MzIgaW50cl9zdGF0dXNfYWRkcmVzc2VzWzRdID0ge0lOVFJfU1RBVFVTMCwKKwkJSU5UUl9TVEFUVVMxLCBJTlRSX1NUQVRVUzIsIElOVFJfU1RBVFVTM307CisJdTMyIGVjY19kb25lX09SX2RtYV9jb21wOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCXN0YXR1cyA9IEJvdW5kYXJ5X0NoZWNrX0Jsb2NrX1BhZ2UoYmxvY2ssIHBhZ2UsIHBhZ2VfY291bnQpOworCisJZmxhc2hfYWRkID0gKHU2NCkoYmxvY2sgJSAoRGV2aWNlSW5mby53VG90YWxCbG9ja3MgLyB0b3RhbFVzZWRCYW5rcykpCisJCSogRGV2aWNlSW5mby53QmxvY2tEYXRhU2l6ZSArCisJCSh1NjQpcGFnZSAqIERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZTsKKworCWZsYXNoX2JhbmsgPSBibG9jayAvIChEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyAvIHRvdGFsVXNlZEJhbmtzKTsKKworCWlmIChzdGF0dXMgPT0gUEFTUykgeworCQlpbnRyX3N0YXR1cyA9IGludHJfc3RhdHVzX2FkZHJlc3Nlc1tmbGFzaF9iYW5rXTsKKwkJaW93cml0ZTMyKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpLAorCQkJRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisKKwkJaW93cml0ZTMyKDAsIEZsYXNoUmVnICsgVFJBTlNGRVJfU1BBUkVfUkVHKTsKKwkJaW93cml0ZTMyKDB4MDEsIEZsYXNoUmVnICsgTVVMVElQTEFORV9PUEVSQVRJT04pOworCisJCWlvd3JpdGUzMigxLCBGbGFzaFJlZyArIERNQV9FTkFCTEUpOworCQl3aGlsZSAoIShpb3JlYWQzMihGbGFzaFJlZyArIERNQV9FTkFCTEUpICYgRE1BX0VOQUJMRV9fRkxBRykpCisJCQk7CisJCWluZGV4X2FkZHIoKHUzMikoTU9ERV8xMCB8IChmbGFzaF9iYW5rIDw8IDI0KSB8CisJCQkoZmxhc2hfYWRkID4+IERldmljZUluZm8ubkJpdHNJblBhZ2VEYXRhU2l6ZSkpLCAweDQyKTsKKwkJZGRtYV90cmFucyhyZWFkX2RhdGEsIGZsYXNoX2FkZCwgZmxhc2hfYmFuaywgMCwgTnVtUGFnZXMpOworCisJCWVjY19kb25lX09SX2RtYV9jb21wID0gMDsKKwkJd2hpbGUgKDEpIHsKKwkJCWlmIChlbmFibGVfZWNjKSB7CisJCQkJd2hpbGUgKCFpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSkKKwkJCQkJOworCisJCQkJaWYgKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpICYKKwkJCQkJSU5UUl9TVEFUVVMwX19FQ0NfRVJSKSB7CisJCQkJCWlvd3JpdGUzMihJTlRSX1NUQVRVUzBfX0VDQ19FUlIsCisJCQkJCQlGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKwkJCQkJc3RhdHVzID0gZG9fZWNjX25ldyhmbGFzaF9iYW5rLAorCQkJCQkJcmVhZF9kYXRhLCBibG9jaywgcGFnZSk7CisJCQkJfSBlbHNlIGlmIChpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSAmCisJCQkJCUlOVFJfU1RBVFVTMF9fRE1BX0NNRF9DT01QKSB7CisJCQkJCWlvd3JpdGUzMihJTlRSX1NUQVRVUzBfX0RNQV9DTURfQ09NUCwKKwkJCQkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCisJCQkJCWlmICgxID09IGVjY19kb25lX09SX2RtYV9jb21wKQorCQkJCQkJYnJlYWs7CisKKwkJCQkJZWNjX2RvbmVfT1JfZG1hX2NvbXAgPSAxOworCQkJCX0gZWxzZSBpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykgJgorCQkJCQlJTlRSX1NUQVRVUzBfX0VDQ19UUkFOU0FDVElPTl9ET05FKSB7CisJCQkJCWlvd3JpdGUzMigKKwkJCQkJSU5UUl9TVEFUVVMwX19FQ0NfVFJBTlNBQ1RJT05fRE9ORSwKKwkJCQkJRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisKKwkJCQkJaWYgKDEgPT0gZWNjX2RvbmVfT1JfZG1hX2NvbXApCisJCQkJCQlicmVhazsKKworCQkJCQllY2NfZG9uZV9PUl9kbWFfY29tcCA9IDE7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQl3aGlsZSAoIShpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSAmCisJCQkJCUlOVFJfU1RBVFVTMF9fRE1BX0NNRF9DT01QKSkKKwkJCQkJOworCQkJCWlvd3JpdGUzMihJTlRSX1NUQVRVUzBfX0RNQV9DTURfQ09NUCwKKwkJCQkJRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlvd3JpdGUzMigofklOVFJfU1RBVFVTMF9fRUNDX0VSUikgJgorCQkJCSh+SU5UUl9TVEFUVVMwX19FQ0NfVFJBTlNBQ1RJT05fRE9ORSkgJgorCQkJCSh+SU5UUl9TVEFUVVMwX19ETUFfQ01EX0NPTVApLAorCQkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCisJCX0KKworCQlpb3dyaXRlMzIoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyksCisJCQlGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKworCQlpb3dyaXRlMzIoMCwgRmxhc2hSZWcgKyBETUFfRU5BQkxFKTsKKworCQl3aGlsZSAoKGlvcmVhZDMyKEZsYXNoUmVnICsgRE1BX0VOQUJMRSkgJiBETUFfRU5BQkxFX19GTEFHKSkKKwkJCTsKKworCQlpb3dyaXRlMzIoMCwgRmxhc2hSZWcgKyBNVUxUSVBMQU5FX09QRVJBVElPTik7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKwordTE2IE5BTkRfUGlwZWxpbmVfUmVhZF9BaGVhZCh1OCAqcmVhZF9kYXRhLCB1MzIgYmxvY2ssCisJCQkJdTE2IHBhZ2UsIHUxNiBwYWdlX2NvdW50KQoreworCXUzMiBzdGF0dXMgPSBQQVNTOworCXUzMiBOdW1QYWdlcyA9IHBhZ2VfY291bnQ7CisJdTY0IGZsYXNoX2FkZDsKKwl1MzIgZmxhc2hfYmFuazsKKwl1MzIgaW50cl9zdGF0dXMgPSAwOworCXUzMiBpbnRyX3N0YXR1c19hZGRyZXNzZXNbNF0gPSB7SU5UUl9TVEFUVVMwLAorCQlJTlRSX1NUQVRVUzEsIElOVFJfU1RBVFVTMiwgSU5UUl9TVEFUVVMzfTsKKwlpbnQgcmV0OworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlzdGF0dXMgPSBCb3VuZGFyeV9DaGVja19CbG9ja19QYWdlKGJsb2NrLCBwYWdlLCBwYWdlX2NvdW50KTsKKworCWlmIChwYWdlX2NvdW50IDwgMikKKwkJc3RhdHVzID0gRkFJTDsKKworCWlmIChzdGF0dXMgIT0gUEFTUykKKwkJcmV0dXJuIHN0YXR1czsKKworCWZsYXNoX2FkZCA9ICh1NjQpKGJsb2NrICUgKERldmljZUluZm8ud1RvdGFsQmxvY2tzIC8gdG90YWxVc2VkQmFua3MpKQorCQkqRGV2aWNlSW5mby53QmxvY2tEYXRhU2l6ZSArCisJCSh1NjQpcGFnZSAqIERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZTsKKworCWZsYXNoX2JhbmsgPSBibG9jayAvIChEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyAvIHRvdGFsVXNlZEJhbmtzKTsKKworCWludHJfc3RhdHVzID0gaW50cl9zdGF0dXNfYWRkcmVzc2VzW2ZsYXNoX2JhbmtdOworCWlvd3JpdGUzMihpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSwgRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisKKwlpb3dyaXRlMzIoMSwgRmxhc2hSZWcgKyBETUFfRU5BQkxFKTsKKwl3aGlsZSAoIShpb3JlYWQzMihGbGFzaFJlZyArIERNQV9FTkFCTEUpICYgRE1BX0VOQUJMRV9fRkxBRykpCisJCTsKKworCWlvd3JpdGUzMigwLCBGbGFzaFJlZyArIFRSQU5TRkVSX1NQQVJFX1JFRyk7CisKKwkvKiBGaWxsIHRoZSBtcnN0X25hbmRfaW5mbyBzdHJ1Y3R1cmUgKi8KKwlpbmZvLnN0YXRlID0gSU5UX1BJUEVMSU5FX1JFQURfQUhFQUQ7CisJaW5mby5yZWFkX2RhdGEgPSByZWFkX2RhdGE7CisJaW5mby5mbGFzaF9iYW5rID0gZmxhc2hfYmFuazsKKwlpbmZvLmJsb2NrID0gYmxvY2s7CisJaW5mby5wYWdlID0gcGFnZTsKKwlpbmZvLnJldCA9IFBBU1M7CisKKwlpbmRleF9hZGRyKCh1MzIpKE1PREVfMTAgfCAoZmxhc2hfYmFuayA8PCAyNCkgfAorCQkoZmxhc2hfYWRkID4+IERldmljZUluZm8ubkJpdHNJblBhZ2VEYXRhU2l6ZSkpLCAweDQyKTsKKworCWRkbWFfdHJhbnMocmVhZF9kYXRhLCBmbGFzaF9hZGQsIGZsYXNoX2JhbmssIDAsIE51bVBhZ2VzKTsKKworCWlvd3JpdGUzMigxLCBGbGFzaFJlZyArIEdMT0JBTF9JTlRfRU5BQkxFKTsgLyogRW5hYmxlIEludGVycnVwdCAqLworCisJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpbmZvLmNvbXBsZXRlLCAxMCAqIEhaKTsKKwlpZiAoIXJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIldhaXQgZm9yIGNvbXBsZXRpb24gdGltZW91dCAiCisJCQkiaW4gJXMsIExpbmUgJWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisJCXN0YXR1cyA9IEVSUjsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSBpbmZvLnJldDsKKwl9CisKKwlpb3dyaXRlMzIoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyksIEZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCisJaW93cml0ZTMyKDAsIEZsYXNoUmVnICsgRE1BX0VOQUJMRSk7CisKKwl3aGlsZSAoKGlvcmVhZDMyKEZsYXNoUmVnICsgRE1BX0VOQUJMRSkgJiBETUFfRU5BQkxFX19GTEFHKSkKKwkJOworCisJcmV0dXJuIHN0YXR1czsKK30KKworCit1MTYgTkFORF9Xcml0ZV9QYWdlX01haW4odTggKndyaXRlX2RhdGEsIHUzMiBibG9jaywgdTE2IHBhZ2UsCisJCQkgICAgdTE2IHBhZ2VfY291bnQpCit7CisJdTMyIHN0YXR1cyA9IFBBU1M7CisJdTY0IGZsYXNoX2FkZDsKKwl1MzIgaW50cl9zdGF0dXMgPSAwOworCXUzMiBmbGFzaF9iYW5rOworCXUzMiBpbnRyX3N0YXR1c19hZGRyZXNzZXNbNF0gPSB7SU5UUl9TVEFUVVMwLAorCQlJTlRSX1NUQVRVUzEsIElOVFJfU1RBVFVTMiwgSU5UUl9TVEFUVVMzfTsKKwlpbnQgcmV0OworCXU4ICp3cml0ZV9kYXRhX2w7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCXN0YXR1cyA9IEJvdW5kYXJ5X0NoZWNrX0Jsb2NrX1BhZ2UoYmxvY2ssIHBhZ2UsIHBhZ2VfY291bnQpOworCWlmIChzdGF0dXMgIT0gUEFTUykKKwkJcmV0dXJuIHN0YXR1czsKKworCWZsYXNoX2FkZCA9ICh1NjQpKGJsb2NrICUgKERldmljZUluZm8ud1RvdGFsQmxvY2tzIC8gdG90YWxVc2VkQmFua3MpKQorCQkqIERldmljZUluZm8ud0Jsb2NrRGF0YVNpemUgKworCQkodTY0KXBhZ2UgKiBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemU7CisKKwlmbGFzaF9iYW5rID0gYmxvY2sgLyAoRGV2aWNlSW5mby53VG90YWxCbG9ja3MgLyB0b3RhbFVzZWRCYW5rcyk7CisKKwlpbnRyX3N0YXR1cyA9IGludHJfc3RhdHVzX2FkZHJlc3Nlc1tmbGFzaF9iYW5rXTsKKworCWlvd3JpdGUzMigwLCBGbGFzaFJlZyArIFRSQU5TRkVSX1NQQVJFX1JFRyk7CisKKwlpb3dyaXRlMzIoSU5UUl9TVEFUVVMwX19QUk9HUkFNX0NPTVAgfAorCQlJTlRSX1NUQVRVUzBfX1BST0dSQU1fRkFJTCwgRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisKKwlpZiAocGFnZV9jb3VudCA+IDEpIHsKKwkJd3JpdGVfZGF0YV9sID0gd3JpdGVfZGF0YTsKKwkJd2hpbGUgKHBhZ2VfY291bnQgPiBNQVhfUEFHRVNfUEVSX1JXKSB7CisJCQlpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBNVUxUSVBMQU5FX09QRVJBVElPTikpCisJCQkJc3RhdHVzID0gTkFORF9NdWx0aXBsYW5lX1dyaXRlKHdyaXRlX2RhdGFfbCwKKwkJCQkJYmxvY2ssIHBhZ2UsIE1BWF9QQUdFU19QRVJfUlcpOworCQkJZWxzZQorCQkJCXN0YXR1cyA9IE5BTkRfUGlwZWxpbmVfV3JpdGVfQWhlYWQoCisJCQkJCXdyaXRlX2RhdGFfbCwgYmxvY2ssIHBhZ2UsCisJCQkJCU1BWF9QQUdFU19QRVJfUlcpOworCQkJaWYgKHN0YXR1cyA9PSBGQUlMKQorCQkJCXJldHVybiBzdGF0dXM7CisKKwkJCXdyaXRlX2RhdGFfbCArPSBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUgKgorCQkJCQlNQVhfUEFHRVNfUEVSX1JXOworCQkJcGFnZV9jb3VudCAtPSBNQVhfUEFHRVNfUEVSX1JXOworCQkJcGFnZSArPSBNQVhfUEFHRVNfUEVSX1JXOworCQl9CisJCWlmIChpb3JlYWQzMihGbGFzaFJlZyArIE1VTFRJUExBTkVfT1BFUkFUSU9OKSkKKwkJCXN0YXR1cyA9IE5BTkRfTXVsdGlwbGFuZV9Xcml0ZSh3cml0ZV9kYXRhX2wsCisJCQkJYmxvY2ssIHBhZ2UsIHBhZ2VfY291bnQpOworCQllbHNlCisJCQlzdGF0dXMgPSBOQU5EX1BpcGVsaW5lX1dyaXRlX0FoZWFkKHdyaXRlX2RhdGFfbCwKKwkJCQlibG9jaywgcGFnZSwgcGFnZV9jb3VudCk7CisKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlpb3dyaXRlMzIoMSwgRmxhc2hSZWcgKyBETUFfRU5BQkxFKTsKKwl3aGlsZSAoIShpb3JlYWQzMihGbGFzaFJlZyArIERNQV9FTkFCTEUpICYgRE1BX0VOQUJMRV9fRkxBRykpCisJCTsKKworCWlvd3JpdGUzMigwLCBGbGFzaFJlZyArIFRSQU5TRkVSX1NQQVJFX1JFRyk7CisKKwlpb3dyaXRlMzIoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyksIEZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCisJLyogRmlsbCB0aGUgbXJzdF9uYW5kX2luZm8gc3RydWN0dXJlICovCisJaW5mby5zdGF0ZSA9IElOVF9XUklURV9QQUdFX01BSU47CisJaW5mby53cml0ZV9kYXRhID0gd3JpdGVfZGF0YTsKKwlpbmZvLmZsYXNoX2JhbmsgPSBmbGFzaF9iYW5rOworCWluZm8uYmxvY2sgPSBibG9jazsKKwlpbmZvLnBhZ2UgPSBwYWdlOworCWluZm8ucmV0ID0gUEFTUzsKKworCWRkbWFfdHJhbnMod3JpdGVfZGF0YSwgZmxhc2hfYWRkLCBmbGFzaF9iYW5rLCAxLCAxKTsKKworCWlvd3JpdGUzMigxLCBGbGFzaFJlZyArIEdMT0JBTF9JTlRfRU5BQkxFKTsgLyogRW5hYmxlIGludGVycnVwdCAqLworCisJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpbmZvLmNvbXBsZXRlLCAxMCAqIEhaKTsKKwlpZiAoIXJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIldhaXQgZm9yIGNvbXBsZXRpb24gdGltZW91dCAiCisJCQkiaW4gJXMsIExpbmUgJWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisJCXN0YXR1cyA9IEVSUjsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSBpbmZvLnJldDsKKwl9CisKKwlpb3dyaXRlMzIoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyksIEZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCisJaW93cml0ZTMyKDAsIEZsYXNoUmVnICsgRE1BX0VOQUJMRSk7CisJd2hpbGUgKGlvcmVhZDMyKEZsYXNoUmVnICsgRE1BX0VOQUJMRSkgJiBETUFfRU5BQkxFX19GTEFHKQorCQk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCit2b2lkIE5BTkRfRUNDX0N0cmwoaW50IGVuYWJsZSkKK3sKKwlpZiAoZW5hYmxlKSB7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sCisJCQkiV2lsbCBlbmFibGUgRUNDIGluICVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJaW93cml0ZTMyKDEsIEZsYXNoUmVnICsgRUNDX0VOQUJMRSk7CisJCWVuYWJsZV9lY2MgPSAxOworCX0gZWxzZSB7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sCisJCQkiV2lsbCBkaXNhYmxlIEVDQyBpbiAlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCWlvd3JpdGUzMigwLCBGbGFzaFJlZyArIEVDQ19FTkFCTEUpOworCQllbmFibGVfZWNjID0gMDsKKwl9Cit9CisKK3UxNiBOQU5EX1dyaXRlX1BhZ2VfTWFpbl9TcGFyZSh1OCAqd3JpdGVfZGF0YSwgdTMyIGJsb2NrLAorCQkJCQl1MTYgcGFnZSwgdTE2IHBhZ2VfY291bnQpCit7CisJdTMyIHN0YXR1cyA9IFBBU1M7CisJdTMyIGksIGosIHBhZ2VfbnVtID0gMDsKKwl1MzIgUGFnZVNpemUgPSBEZXZpY2VJbmZvLndQYWdlU2l6ZTsKKwl1MzIgUGFnZURhdGFTaXplID0gRGV2aWNlSW5mby53UGFnZURhdGFTaXplOworCXUzMiBlY2NCeXRlcyA9IERldmljZUluZm8ud0VDQ0J5dGVzUGVyU2VjdG9yOworCXUzMiBzcGFyZUZsYWdCeXRlcyA9IERldmljZUluZm8ud051bVBhZ2VTcGFyZUZsYWc7CisJdTMyIHNwYXJlU2tpcEJ5dGVzICA9IERldmljZUluZm8ud1NwYXJlU2tpcEJ5dGVzOworCXU2NCBmbGFzaF9hZGQ7CisJdTMyIGVjY1NlY3RvclNpemU7CisJdTMyIGZsYXNoX2Jhbms7CisJdTMyIGludHJfc3RhdHVzID0gMDsKKwl1MzIgaW50cl9zdGF0dXNfYWRkcmVzc2VzWzRdID0ge0lOVFJfU1RBVFVTMCwKKwkJSU5UUl9TVEFUVVMxLCBJTlRSX1NUQVRVUzIsIElOVFJfU1RBVFVTM307CisJdTggKnBhZ2VfbWFpbl9zcGFyZSA9IGJ1Zl93cml0ZV9wYWdlX21haW5fc3BhcmU7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJZWNjU2VjdG9yU2l6ZSA9IEVDQ19TRUNUT1JfU0laRSAqIChEZXZpY2VJbmZvLndEZXZpY2VzQ29ubmVjdGVkKTsKKworCXN0YXR1cyA9IEJvdW5kYXJ5X0NoZWNrX0Jsb2NrX1BhZ2UoYmxvY2ssIHBhZ2UsIHBhZ2VfY291bnQpOworCisJZmxhc2hfYmFuayA9IGJsb2NrIC8gKERldmljZUluZm8ud1RvdGFsQmxvY2tzIC8gdG90YWxVc2VkQmFua3MpOworCisJaWYgKHN0YXR1cyA9PSBQQVNTKSB7CisJCWludHJfc3RhdHVzID0gaW50cl9zdGF0dXNfYWRkcmVzc2VzW2ZsYXNoX2JhbmtdOworCisJCWlvd3JpdGUzMigxLCBGbGFzaFJlZyArIFRSQU5TRkVSX1NQQVJFX1JFRyk7CisKKwkJd2hpbGUgKChzdGF0dXMgIT0gRkFJTCkgJiYgKHBhZ2VfY291bnQgPiAwKSkgeworCQkJZmxhc2hfYWRkID0gKHU2NCkoYmxvY2sgJQorCQkJKERldmljZUluZm8ud1RvdGFsQmxvY2tzIC8gdG90YWxVc2VkQmFua3MpKSAqCisJCQlEZXZpY2VJbmZvLndCbG9ja0RhdGFTaXplICsKKwkJCSh1NjQpcGFnZSAqIERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZTsKKworCQkJaW93cml0ZTMyKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpLAorCQkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCisJCQlpb3dyaXRlMzIoKHUzMikoTU9ERV8wMSB8IChmbGFzaF9iYW5rIDw8IDI0KSB8CisJCQkJKGZsYXNoX2FkZCA+PgorCQkJCURldmljZUluZm8ubkJpdHNJblBhZ2VEYXRhU2l6ZSkpLAorCQkJCUZsYXNoTWVtKTsKKworCQkJaWYgKGVuYWJsZV9lY2MpIHsKKwkJCQlmb3IgKGogPSAwOworCQkJCSAgICAgaiA8CisJCQkJICAgICBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUgLyBlY2NTZWN0b3JTaXplOworCQkJCSAgICAgaisrKSB7CisJCQkJCWZvciAoaSA9IDA7IGkgPCBlY2NTZWN0b3JTaXplOyBpKyspCisJCQkJCQlwYWdlX21haW5fc3BhcmVbKGVjY1NlY3RvclNpemUgKworCQkJCQkJCQkgZWNjQnl0ZXMpICogaiArCisJCQkJCQkJCWldID0KKwkJCQkJCSAgICB3cml0ZV9kYXRhW2VjY1NlY3RvclNpemUgKgorCQkJCQkJCSAgICAgICBqICsgaV07CisKKwkJCQkJZm9yIChpID0gMDsgaSA8IGVjY0J5dGVzOyBpKyspCisJCQkJCQlwYWdlX21haW5fc3BhcmVbKGVjY1NlY3RvclNpemUgKworCQkJCQkJCQkgZWNjQnl0ZXMpICogaiArCisJCQkJCQkJCWVjY1NlY3RvclNpemUgKworCQkJCQkJCQlpXSA9CisJCQkJCQkgICAgd3JpdGVfZGF0YVtQYWdlRGF0YVNpemUgKworCQkJCQkJCSAgICAgICBzcGFyZUZsYWdCeXRlcyArCisJCQkJCQkJICAgICAgIGVjY0J5dGVzICogaiArCisJCQkJCQkJICAgICAgIGldOworCQkJCX0KKworCQkJCWZvciAoaSA9IDA7IGkgPCBzcGFyZUZsYWdCeXRlczsgaSsrKQorCQkJCQlwYWdlX21haW5fc3BhcmVbKGVjY1NlY3RvclNpemUgKworCQkJCQkJCSBlY2NCeXRlcykgKiBqICsgaV0gPQorCQkJCQkgICAgd3JpdGVfZGF0YVtQYWdlRGF0YVNpemUgKyBpXTsKKworCQkJCWZvciAoaSA9IFBhZ2VTaXplIC0gMTsgaSA+PSBQYWdlRGF0YVNpemUgKworCQkJCQkJCXNwYXJlU2tpcEJ5dGVzOyBpLS0pCisJCQkJCXBhZ2VfbWFpbl9zcGFyZVtpXSA9IHBhZ2VfbWFpbl9zcGFyZVtpIC0KKwkJCQkJCQkJc3BhcmVTa2lwQnl0ZXNdOworCisJCQkJZm9yIChpID0gUGFnZURhdGFTaXplOyBpIDwgUGFnZURhdGFTaXplICsKKwkJCQkJCQlzcGFyZVNraXBCeXRlczsgaSsrKQorCQkJCQlwYWdlX21haW5fc3BhcmVbaV0gPSAweGZmOworCisJCQkJZm9yIChpID0gMDsgaSA8IFBhZ2VTaXplIC8gNDsgaSsrKQorCQkJCQlpb3dyaXRlMzIoCisJCQkJCSooKHUzMiAqKXBhZ2VfbWFpbl9zcGFyZSArIGkpLAorCQkJCQlGbGFzaE1lbSArIDB4MTApOworCQkJfSBlbHNlIHsKKworCQkJCWZvciAoaSA9IDA7IGkgPCBQYWdlU2l6ZSAvIDQ7IGkrKykKKwkJCQkJaW93cml0ZTMyKCooKHUzMiAqKXdyaXRlX2RhdGEgKyBpKSwKKwkJCQkJCUZsYXNoTWVtICsgMHgxMCk7CisJCQl9CisKKwkJCXdoaWxlICghKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpICYKKwkJCQkoSU5UUl9TVEFUVVMwX19QUk9HUkFNX0NPTVAgfAorCQkJCUlOVFJfU1RBVFVTMF9fUFJPR1JBTV9GQUlMKSkpCisJCQkJOworCisJCQlpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykgJgorCQkJCUlOVFJfU1RBVFVTMF9fUFJPR1JBTV9GQUlMKQorCQkJCXN0YXR1cyA9IEZBSUw7CisKKwkJCWlvd3JpdGUzMihpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSwKKwkJCQkJRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisKKwkJCXBhZ2VfbnVtKys7CisJCQlwYWdlX2NvdW50LS07CisJCQl3cml0ZV9kYXRhICs9IFBhZ2VTaXplOworCQl9CisKKwkJaW93cml0ZTMyKDAsIEZsYXNoUmVnICsgVFJBTlNGRVJfU1BBUkVfUkVHKTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCit1MTYgTkFORF9SZWFkX1BhZ2VfTWFpbl9TcGFyZSh1OCAqcmVhZF9kYXRhLCB1MzIgYmxvY2ssIHUxNiBwYWdlLAorCQkJCSB1MTYgcGFnZV9jb3VudCkKK3sKKwl1MzIgc3RhdHVzID0gUEFTUzsKKwl1MzIgaSwgajsKKwl1NjQgZmxhc2hfYWRkID0gMDsKKwl1MzIgUGFnZVNpemUgPSBEZXZpY2VJbmZvLndQYWdlU2l6ZTsKKwl1MzIgUGFnZURhdGFTaXplID0gRGV2aWNlSW5mby53UGFnZURhdGFTaXplOworCXUzMiBQYWdlU3BhcmVTaXplID0gRGV2aWNlSW5mby53UGFnZVNwYXJlU2l6ZTsKKwl1MzIgZWNjQnl0ZXMgPSBEZXZpY2VJbmZvLndFQ0NCeXRlc1BlclNlY3RvcjsKKwl1MzIgc3BhcmVGbGFnQnl0ZXMgPSBEZXZpY2VJbmZvLndOdW1QYWdlU3BhcmVGbGFnOworCXUzMiBzcGFyZVNraXBCeXRlcyAgPSBEZXZpY2VJbmZvLndTcGFyZVNraXBCeXRlczsKKwl1MzIgZWNjU2VjdG9yU2l6ZTsKKwl1MzIgZmxhc2hfYmFuazsKKwl1MzIgaW50cl9zdGF0dXMgPSAwOworCXU4ICpyZWFkX2RhdGFfbCA9IHJlYWRfZGF0YTsKKwl1MzIgaW50cl9zdGF0dXNfYWRkcmVzc2VzWzRdID0ge0lOVFJfU1RBVFVTMCwKKwkJSU5UUl9TVEFUVVMxLCBJTlRSX1NUQVRVUzIsIElOVFJfU1RBVFVTM307CisJdTggKnBhZ2VfbWFpbl9zcGFyZSA9IGJ1Zl9yZWFkX3BhZ2VfbWFpbl9zcGFyZTsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwllY2NTZWN0b3JTaXplID0gRUNDX1NFQ1RPUl9TSVpFICogKERldmljZUluZm8ud0RldmljZXNDb25uZWN0ZWQpOworCisJc3RhdHVzID0gQm91bmRhcnlfQ2hlY2tfQmxvY2tfUGFnZShibG9jaywgcGFnZSwgcGFnZV9jb3VudCk7CisKKwlmbGFzaF9iYW5rID0gYmxvY2sgLyAoRGV2aWNlSW5mby53VG90YWxCbG9ja3MgLyB0b3RhbFVzZWRCYW5rcyk7CisKKwlpZiAoc3RhdHVzID09IFBBU1MpIHsKKwkJaW50cl9zdGF0dXMgPSBpbnRyX3N0YXR1c19hZGRyZXNzZXNbZmxhc2hfYmFua107CisKKwkJaW93cml0ZTMyKDEsIEZsYXNoUmVnICsgVFJBTlNGRVJfU1BBUkVfUkVHKTsKKworCQlpb3dyaXRlMzIoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyksCisJCQkJRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisKKwkJd2hpbGUgKChzdGF0dXMgIT0gRkFJTCkgJiYgKHBhZ2VfY291bnQgPiAwKSkgeworCQkJZmxhc2hfYWRkID0gKHU2NCkoYmxvY2sgJQorCQkJCShEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyAvIHRvdGFsVXNlZEJhbmtzKSkKKwkJCQkqIERldmljZUluZm8ud0Jsb2NrRGF0YVNpemUgKworCQkJCSh1NjQpcGFnZSAqIERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZTsKKworCQkJaW5kZXhfYWRkcigodTMyKShNT0RFXzEwIHwgKGZsYXNoX2JhbmsgPDwgMjQpIHwKKwkJCQkoZmxhc2hfYWRkID4+IERldmljZUluZm8ubkJpdHNJblBhZ2VEYXRhU2l6ZSkpLAorCQkJCTB4NDMpOworCQkJaW5kZXhfYWRkcigodTMyKShNT0RFXzEwIHwgKGZsYXNoX2JhbmsgPDwgMjQpIHwKKwkJCQkoZmxhc2hfYWRkID4+IERldmljZUluZm8ubkJpdHNJblBhZ2VEYXRhU2l6ZSkpLAorCQkJCTB4MjAwMCB8IHBhZ2VfY291bnQpOworCisJCQl3aGlsZSAoIShpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSAmCisJCQkJSU5UUl9TVEFUVVMwX19MT0FEX0NPTVApKQorCQkJCTsKKworCQkJaW93cml0ZTMyKCh1MzIpKE1PREVfMDEgfCAoZmxhc2hfYmFuayA8PCAyNCkgfAorCQkJCShmbGFzaF9hZGQgPj4KKwkJCQlEZXZpY2VJbmZvLm5CaXRzSW5QYWdlRGF0YVNpemUpKSwKKwkJCQlGbGFzaE1lbSk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBQYWdlU2l6ZSAvIDQ7IGkrKykKKwkJCQkqKCgodTMyICopcGFnZV9tYWluX3NwYXJlKSArIGkpID0KKwkJCQkJaW9yZWFkMzIoRmxhc2hNZW0gKyAweDEwKTsKKworCQkJaWYgKGVuYWJsZV9lY2MpIHsKKwkJCQlmb3IgKGkgPSBQYWdlRGF0YVNpemU7ICBpIDwgUGFnZVNpemUgLQorCQkJCQkJCXNwYXJlU2tpcEJ5dGVzOyBpKyspCisJCQkJCXBhZ2VfbWFpbl9zcGFyZVtpXSA9IHBhZ2VfbWFpbl9zcGFyZVtpICsKKwkJCQkJCQkJc3BhcmVTa2lwQnl0ZXNdOworCisJCQkJZm9yIChqID0gMDsKKwkJCQlqIDwgRGV2aWNlSW5mby53UGFnZURhdGFTaXplIC8gZWNjU2VjdG9yU2l6ZTsKKwkJCQlqKyspIHsKKworCQkJCQlmb3IgKGkgPSAwOyBpIDwgZWNjU2VjdG9yU2l6ZTsgaSsrKQorCQkJCQkJcmVhZF9kYXRhX2xbZWNjU2VjdG9yU2l6ZSAqIGogKworCQkJCQkJCSAgICBpXSA9CisJCQkJCQkgICAgcGFnZV9tYWluX3NwYXJlWworCQkJCQkJCShlY2NTZWN0b3JTaXplICsKKwkJCQkJCQllY2NCeXRlcykgKiBqICsgaV07CisKKwkJCQkJZm9yIChpID0gMDsgaSA8IGVjY0J5dGVzOyBpKyspCisJCQkJCQlyZWFkX2RhdGFfbFtQYWdlRGF0YVNpemUgKworCQkJCQkJCSAgICBzcGFyZUZsYWdCeXRlcyArCisJCQkJCQkJICAgIGVjY0J5dGVzICogaiArIGldID0KKwkJCQkJCSAgICBwYWdlX21haW5fc3BhcmVbCisJCQkJCQkJKGVjY1NlY3RvclNpemUgKworCQkJCQkJCWVjY0J5dGVzKSAqIGogKworCQkJCQkJCWVjY1NlY3RvclNpemUgKyBpXTsKKwkJCQl9CisKKwkJCQlmb3IgKGkgPSAwOyBpIDwgc3BhcmVGbGFnQnl0ZXM7IGkrKykKKwkJCQkJcmVhZF9kYXRhX2xbUGFnZURhdGFTaXplICsgaV0gPQorCQkJCQkgICAgcGFnZV9tYWluX3NwYXJlWyhlY2NTZWN0b3JTaXplICsKKwkJCQkJCQkgICAgIGVjY0J5dGVzKSAqIGogKyBpXTsKKwkJCX0gZWxzZSB7CisJCQkJZm9yIChpID0gMDsgaSA8IChQYWdlRGF0YVNpemUgKyBQYWdlU3BhcmVTaXplKTsKKwkJCQkgICAgIGkrKykKKwkJCQkJcmVhZF9kYXRhX2xbaV0gPSBwYWdlX21haW5fc3BhcmVbaV07CisKKwkJCX0KKworCQkJaWYgKGVuYWJsZV9lY2MpIHsKKwkJCQl3aGlsZSAoIShpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSAmCisJCQkJCShJTlRSX1NUQVRVUzBfX0VDQ19UUkFOU0FDVElPTl9ET05FIHwKKwkJCQkJSU5UUl9TVEFUVVMwX19FQ0NfRVJSKSkpCisJCQkJCTsKKworCQkJCWlmIChpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSAmCisJCQkJCUlOVFJfU1RBVFVTMF9fRUNDX0VSUikgeworCQkJCQlpb3dyaXRlMzIoSU5UUl9TVEFUVVMwX19FQ0NfRVJSLAorCQkJCQkJRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisJCQkJCXN0YXR1cyA9IGRvX2VjY19uZXcoZmxhc2hfYmFuaywKKwkJCQkJCXJlYWRfZGF0YSwgYmxvY2ssIHBhZ2UpOworCQkJCX0KKworCQkJCWlmIChpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSAmCisJCQkJCUlOVFJfU1RBVFVTMF9fRUNDX1RSQU5TQUNUSU9OX0RPTkUgJgorCQkJCQlJTlRSX1NUQVRVUzBfX0VDQ19FUlIpIHsKKwkJCQkJaW93cml0ZTMyKElOVFJfU1RBVFVTMF9fRUNDX0VSUiB8CisJCQkJCUlOVFJfU1RBVFVTMF9fRUNDX1RSQU5TQUNUSU9OX0RPTkUsCisJCQkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCQkJCX0gZWxzZSBpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykgJgorCQkJCQlJTlRSX1NUQVRVUzBfX0VDQ19UUkFOU0FDVElPTl9ET05FKSB7CisJCQkJCWlvd3JpdGUzMigKKwkJCQkJSU5UUl9TVEFUVVMwX19FQ0NfVFJBTlNBQ1RJT05fRE9ORSwKKwkJCQkJRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisJCQkJfSBlbHNlIGlmIChpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSAmCisJCQkJCUlOVFJfU1RBVFVTMF9fRUNDX0VSUikgeworCQkJCQlpb3dyaXRlMzIoSU5UUl9TVEFUVVMwX19FQ0NfRVJSLAorCQkJCQkJRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisJCQkJfQorCQkJfQorCisJCQlwYWdlKys7CisJCQlwYWdlX2NvdW50LS07CisJCQlyZWFkX2RhdGFfbCArPSBQYWdlU2l6ZTsKKwkJfQorCX0KKworCWlvd3JpdGUzMigwLCBGbGFzaFJlZyArIFRSQU5TRkVSX1NQQVJFX1JFRyk7CisKKwlpbmRleF9hZGRyKCh1MzIpKE1PREVfMTAgfCAoZmxhc2hfYmFuayA8PCAyNCkgfAorCQkoZmxhc2hfYWRkID4+IERldmljZUluZm8ubkJpdHNJblBhZ2VEYXRhU2l6ZSkpLCAweDQyKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3UxNiBOQU5EX1BpcGVsaW5lX1dyaXRlX0FoZWFkKHU4ICp3cml0ZV9kYXRhLCB1MzIgYmxvY2ssCisJCQl1MTYgcGFnZSwgdTE2IHBhZ2VfY291bnQpCit7CisJdTE2IHN0YXR1cyA9IFBBU1M7CisJdTMyIE51bVBhZ2VzID0gcGFnZV9jb3VudDsKKwl1NjQgZmxhc2hfYWRkOworCXUzMiBmbGFzaF9iYW5rOworCXUzMiBpbnRyX3N0YXR1cyA9IDA7CisJdTMyIGludHJfc3RhdHVzX2FkZHJlc3Nlc1s0XSA9IHtJTlRSX1NUQVRVUzAsCisJCUlOVFJfU1RBVFVTMSwgSU5UUl9TVEFUVVMyLCBJTlRSX1NUQVRVUzN9OworCWludCByZXQ7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCXN0YXR1cyA9IEJvdW5kYXJ5X0NoZWNrX0Jsb2NrX1BhZ2UoYmxvY2ssIHBhZ2UsIHBhZ2VfY291bnQpOworCisJaWYgKHBhZ2VfY291bnQgPCAyKQorCQlzdGF0dXMgPSBGQUlMOworCisJaWYgKHN0YXR1cyAhPSBQQVNTKQorCQlyZXR1cm4gc3RhdHVzOworCisJZmxhc2hfYWRkID0gKHU2NCkoYmxvY2sgJSAoRGV2aWNlSW5mby53VG90YWxCbG9ja3MgLyB0b3RhbFVzZWRCYW5rcykpCisJCSogRGV2aWNlSW5mby53QmxvY2tEYXRhU2l6ZSArCisJCSh1NjQpcGFnZSAqIERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZTsKKworCWZsYXNoX2JhbmsgPSBibG9jayAvIChEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyAvIHRvdGFsVXNlZEJhbmtzKTsKKworCWludHJfc3RhdHVzID0gaW50cl9zdGF0dXNfYWRkcmVzc2VzW2ZsYXNoX2JhbmtdOworCWlvd3JpdGUzMihpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSwgRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisKKwlpb3dyaXRlMzIoMSwgRmxhc2hSZWcgKyBETUFfRU5BQkxFKTsKKwl3aGlsZSAoIShpb3JlYWQzMihGbGFzaFJlZyArIERNQV9FTkFCTEUpICYgRE1BX0VOQUJMRV9fRkxBRykpCisJCTsKKworCWlvd3JpdGUzMigwLCBGbGFzaFJlZyArIFRSQU5TRkVSX1NQQVJFX1JFRyk7CisKKwkvKiBGaWxsIHRoZSBtcnN0X25hbmRfaW5mbyBzdHJ1Y3R1cmUgKi8KKwlpbmZvLnN0YXRlID0gSU5UX1BJUEVMSU5FX1dSSVRFX0FIRUFEOworCWluZm8ud3JpdGVfZGF0YSA9IHdyaXRlX2RhdGE7CisJaW5mby5mbGFzaF9iYW5rID0gZmxhc2hfYmFuazsKKwlpbmZvLmJsb2NrID0gYmxvY2s7CisJaW5mby5wYWdlID0gcGFnZTsKKwlpbmZvLnJldCA9IFBBU1M7CisKKwlpbmRleF9hZGRyKCh1MzIpKE1PREVfMTAgfCAoZmxhc2hfYmFuayA8PCAyNCkgfAorCQkoZmxhc2hfYWRkID4+IERldmljZUluZm8ubkJpdHNJblBhZ2VEYXRhU2l6ZSkpLCAweDQyKTsKKworCWRkbWFfdHJhbnMod3JpdGVfZGF0YSwgZmxhc2hfYWRkLCBmbGFzaF9iYW5rLCAxLCBOdW1QYWdlcyk7CisKKwlpb3dyaXRlMzIoMSwgRmxhc2hSZWcgKyBHTE9CQUxfSU5UX0VOQUJMRSk7IC8qIEVuYWJsZSBpbnRlcnJ1cHQgKi8KKworCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW5mby5jb21wbGV0ZSwgMTAgKiBIWik7CisJaWYgKCFyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJXYWl0IGZvciBjb21wbGV0aW9uIHRpbWVvdXQgIgorCQkJImluICVzLCBMaW5lICVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOworCQlzdGF0dXMgPSBFUlI7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gaW5mby5yZXQ7CisJfQorCisJaW93cml0ZTMyKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpLCBGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKworCWlvd3JpdGUzMigwLCBGbGFzaFJlZyArIERNQV9FTkFCTEUpOworCXdoaWxlICgoaW9yZWFkMzIoRmxhc2hSZWcgKyBETUFfRU5BQkxFKSAmIERNQV9FTkFCTEVfX0ZMQUcpKQorCQk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBVbi10ZXN0ZWQgZnVuY3Rpb24gKi8KK3UxNiBOQU5EX011bHRpcGxhbmVfV3JpdGUodTggKndyaXRlX2RhdGEsIHUzMiBibG9jaywgdTE2IHBhZ2UsCisJCQkgICAgIHUxNiBwYWdlX2NvdW50KQoreworCXUxNiBzdGF0dXMgPSBQQVNTOworCXUzMiBOdW1QYWdlcyA9IHBhZ2VfY291bnQ7CisJdTY0IGZsYXNoX2FkZDsKKwl1MzIgZmxhc2hfYmFuazsKKwl1MzIgaW50cl9zdGF0dXMgPSAwOworCXUzMiBpbnRyX3N0YXR1c19hZGRyZXNzZXNbNF0gPSB7SU5UUl9TVEFUVVMwLAorCQlJTlRSX1NUQVRVUzEsIElOVFJfU1RBVFVTMiwgSU5UUl9TVEFUVVMzfTsKKwl1MTYgc3RhdHVzMiA9IFBBU1M7CisJdTMyIHQ7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJc3RhdHVzID0gQm91bmRhcnlfQ2hlY2tfQmxvY2tfUGFnZShibG9jaywgcGFnZSwgcGFnZV9jb3VudCk7CisJaWYgKHN0YXR1cyAhPSBQQVNTKQorCQlyZXR1cm4gc3RhdHVzOworCisJZmxhc2hfYWRkID0gKHU2NCkoYmxvY2sgJSAoRGV2aWNlSW5mby53VG90YWxCbG9ja3MgLyB0b3RhbFVzZWRCYW5rcykpCisJCSogRGV2aWNlSW5mby53QmxvY2tEYXRhU2l6ZSArCisJCSh1NjQpcGFnZSAqIERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZTsKKworCWZsYXNoX2JhbmsgPSBibG9jayAvIChEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyAvIHRvdGFsVXNlZEJhbmtzKTsKKworCWludHJfc3RhdHVzID0gaW50cl9zdGF0dXNfYWRkcmVzc2VzW2ZsYXNoX2JhbmtdOworCWlvd3JpdGUzMihpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSwgRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisKKwlpb3dyaXRlMzIoMCwgRmxhc2hSZWcgKyBUUkFOU0ZFUl9TUEFSRV9SRUcpOworCWlvd3JpdGUzMigweDAxLCBGbGFzaFJlZyArIE1VTFRJUExBTkVfT1BFUkFUSU9OKTsKKworCWlvd3JpdGUzMigxLCBGbGFzaFJlZyArIERNQV9FTkFCTEUpOworCXdoaWxlICghKGlvcmVhZDMyKEZsYXNoUmVnICsgRE1BX0VOQUJMRSkgJiBETUFfRU5BQkxFX19GTEFHKSkKKwkJOworCisJaW93cml0ZTMyKDAsIEZsYXNoUmVnICsgVFJBTlNGRVJfU1BBUkVfUkVHKTsKKworCWluZGV4X2FkZHIoKHUzMikoTU9ERV8xMCB8IChmbGFzaF9iYW5rIDw8IDI0KSB8CisJCShmbGFzaF9hZGQgPj4gRGV2aWNlSW5mby5uQml0c0luUGFnZURhdGFTaXplKSksIDB4NDIpOworCisJZGRtYV90cmFucyh3cml0ZV9kYXRhLCBmbGFzaF9hZGQsIGZsYXNoX2JhbmssIDEsIE51bVBhZ2VzKTsKKworCXdoaWxlICgxKSB7CisJCXdoaWxlICghaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykpCisJCQk7CisKKwkJaWYgKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpICYKKwkJCUlOVFJfU1RBVFVTMF9fRE1BX0NNRF9DT01QKSB7CisJCQlpb3dyaXRlMzIoSU5UUl9TVEFUVVMwX19ETUFfQ01EX0NPTVAsCisJCQkJRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisJCQlzdGF0dXMgPSBQQVNTOworCQkJaWYgKHN0YXR1czIgPT0gRkFJTCkKKwkJCQlzdGF0dXMgPSBGQUlMOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykgJgorCQkJCUlOVFJfU1RBVFVTMF9fUFJPR1JBTV9GQUlMKSB7CisJCQlzdGF0dXMyID0gRkFJTDsKKwkJCXN0YXR1cyA9IEZBSUw7CisJCQl0ID0gaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykgJgorCQkJCUlOVFJfU1RBVFVTMF9fUFJPR1JBTV9GQUlMOworCQkJaW93cml0ZTMyKHQsIEZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCQl9IGVsc2UgeworCQkJaW93cml0ZTMyKCh+SU5UUl9TVEFUVVMwX19QUk9HUkFNX0ZBSUwpICYKKwkJCQkofklOVFJfU1RBVFVTMF9fRE1BX0NNRF9DT01QKSwKKwkJCQlGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKwkJfQorCX0KKworCWlvd3JpdGUzMihpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSwgRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisKKwlpb3dyaXRlMzIoMCwgRmxhc2hSZWcgKyBETUFfRU5BQkxFKTsKKworCXdoaWxlICgoaW9yZWFkMzIoRmxhc2hSZWcgKyBETUFfRU5BQkxFKSAmIERNQV9FTkFCTEVfX0ZMQUcpKQorCQk7CisKKwlpb3dyaXRlMzIoMCwgRmxhc2hSZWcgKyBNVUxUSVBMQU5FX09QRVJBVElPTik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisKKyNpZiBDTURfRE1BCitzdGF0aWMgaXJxcmV0dXJuX3QgY2RtYV9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBtcnN0X25hbmRfaW5mbyAqZGV2ID0gZGV2X2lkOworCWludCBmaXJzdF9mYWlsZWRfY21kOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlpZiAoIWlzX2NkbWFfaW50ZXJydXB0KCkpCisJCXJldHVybiBJUlFfTk9ORTsKKworCS8qIERpc2FibGUgY29udHJvbGxlciBpbnRlcnJ1cHRzICovCisJaW93cml0ZTMyKDAsIEZsYXNoUmVnICsgR0xPQkFMX0lOVF9FTkFCTEUpOworCUdMT0JfRlRMX0V2ZW50X1N0YXR1cygmZmlyc3RfZmFpbGVkX2NtZCk7CisJY29tcGxldGUoJmRldi0+Y29tcGxldGUpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIGhhbmRsZV9uYW5kX2ludF9yZWFkKHN0cnVjdCBtcnN0X25hbmRfaW5mbyAqZGV2KQoreworCXUzMiBpbnRyX3N0YXR1c19hZGRyZXNzZXNbNF0gPSB7SU5UUl9TVEFUVVMwLAorCQlJTlRSX1NUQVRVUzEsIElOVFJfU1RBVFVTMiwgSU5UUl9TVEFUVVMzfTsKKwl1MzIgaW50cl9zdGF0dXM7CisJdTMyIGVjY19kb25lX09SX2RtYV9jb21wID0gMDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJZGV2LT5yZXQgPSBQQVNTOworCWludHJfc3RhdHVzID0gaW50cl9zdGF0dXNfYWRkcmVzc2VzW2Rldi0+Zmxhc2hfYmFua107CisKKwl3aGlsZSAoMSkgeworCQlpZiAoZW5hYmxlX2VjYykgeworCQkJaWYgKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpICYKKwkJCQlJTlRSX1NUQVRVUzBfX0VDQ19FUlIpIHsKKwkJCQlpb3dyaXRlMzIoSU5UUl9TVEFUVVMwX19FQ0NfRVJSLAorCQkJCQlGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKwkJCQlkZXYtPnJldCA9IGRvX2VjY19uZXcoZGV2LT5mbGFzaF9iYW5rLAorCQkJCQkJZGV2LT5yZWFkX2RhdGEsCisJCQkJCQlkZXYtPmJsb2NrLCBkZXYtPnBhZ2UpOworCQkJfSBlbHNlIGlmIChpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSAmCisJCQkJSU5UUl9TVEFUVVMwX19ETUFfQ01EX0NPTVApIHsKKwkJCQlpb3dyaXRlMzIoSU5UUl9TVEFUVVMwX19ETUFfQ01EX0NPTVAsCisJCQkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCQkJCWlmICgxID09IGVjY19kb25lX09SX2RtYV9jb21wKQorCQkJCQlicmVhazsKKwkJCQllY2NfZG9uZV9PUl9kbWFfY29tcCA9IDE7CisJCQl9IGVsc2UgaWYgKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpICYKKwkJCQlJTlRSX1NUQVRVUzBfX0VDQ19UUkFOU0FDVElPTl9ET05FKSB7CisJCQkJaW93cml0ZTMyKElOVFJfU1RBVFVTMF9fRUNDX1RSQU5TQUNUSU9OX0RPTkUsCisJCQkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCQkJCWlmICgxID09IGVjY19kb25lX09SX2RtYV9jb21wKQorCQkJCQlicmVhazsKKwkJCQllY2NfZG9uZV9PUl9kbWFfY29tcCA9IDE7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykgJgorCQkJCUlOVFJfU1RBVFVTMF9fRE1BX0NNRF9DT01QKSB7CisJCQkJaW93cml0ZTMyKElOVFJfU1RBVFVTMF9fRE1BX0NNRF9DT01QLAorCQkJCQlGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJJbGxlZ2FsIElOVFMgIgorCQkJCQkiKG9mZnNldCBhZGRyIDB4JXgpIHZhbHVlOiAweCV4XG4iLAorCQkJCQlpbnRyX3N0YXR1cywKKwkJCQkJaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykpOworCQkJfQorCQl9CisKKwkJaW93cml0ZTMyKCh+SU5UUl9TVEFUVVMwX19FQ0NfRVJSKSAmCisJCSh+SU5UUl9TVEFUVVMwX19FQ0NfVFJBTlNBQ1RJT05fRE9ORSkgJgorCQkofklOVFJfU1RBVFVTMF9fRE1BX0NNRF9DT01QKSwKKwkJRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfbmFuZF9pbnRfd3JpdGUoc3RydWN0IG1yc3RfbmFuZF9pbmZvICpkZXYpCit7CisJdTMyIGludHJfc3RhdHVzOworCXUzMiBpbnRyWzRdID0ge0lOVFJfU1RBVFVTMCwgSU5UUl9TVEFUVVMxLAorCQlJTlRSX1NUQVRVUzIsIElOVFJfU1RBVFVTM307CisJaW50IHN0YXR1cyA9IFBBU1M7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWRldi0+cmV0ID0gUEFTUzsKKwlpbnRyX3N0YXR1cyA9IGludHJbZGV2LT5mbGFzaF9iYW5rXTsKKworCXdoaWxlICgxKSB7CisJCXdoaWxlICghaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykpCisJCQk7CisKKwkJaWYgKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpICYKKwkJCUlOVFJfU1RBVFVTMF9fRE1BX0NNRF9DT01QKSB7CisJCQlpb3dyaXRlMzIoSU5UUl9TVEFUVVMwX19ETUFfQ01EX0NPTVAsCisJCQkJRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisJCQlpZiAoRkFJTCA9PSBzdGF0dXMpCisJCQkJZGV2LT5yZXQgPSBGQUlMOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykgJgorCQkJSU5UUl9TVEFUVVMwX19QUk9HUkFNX0ZBSUwpIHsKKwkJCXN0YXR1cyA9IEZBSUw7CisJCQlpb3dyaXRlMzIoSU5UUl9TVEFUVVMwX19QUk9HUkFNX0ZBSUwsCisJCQkJRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisJCX0gZWxzZSB7CisJCQlpb3dyaXRlMzIoKH5JTlRSX1NUQVRVUzBfX1BST0dSQU1fRkFJTCkgJgorCQkJCSh+SU5UUl9TVEFUVVMwX19ETUFfQ01EX0NPTVApLAorCQkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCQl9CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZGRtYV9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBtcnN0X25hbmRfaW5mbyAqZGV2ID0gZGV2X2lkOworCXUzMiBpbnRfbWFzaywgaW50czAsIGludHMxLCBpbnRzMiwgaW50czMsIGludHNfb2Zmc2V0OworCXUzMiBpbnRyWzRdID0ge0lOVFJfU1RBVFVTMCwgSU5UUl9TVEFUVVMxLAorCQlJTlRSX1NUQVRVUzIsIElOVFJfU1RBVFVTM307CisKKwlpbnRfbWFzayA9IElOVFJfU1RBVFVTMF9fRE1BX0NNRF9DT01QIHwKKwkJSU5UUl9TVEFUVVMwX19FQ0NfVFJBTlNBQ1RJT05fRE9ORSB8CisJCUlOVFJfU1RBVFVTMF9fRUNDX0VSUiB8CisJCUlOVFJfU1RBVFVTMF9fUFJPR1JBTV9GQUlMIHwKKwkJSU5UUl9TVEFUVVMwX19FUkFTRV9GQUlMOworCisJaW50czAgPSBpb3JlYWQzMihGbGFzaFJlZyArIElOVFJfU1RBVFVTMCk7CisJaW50czEgPSBpb3JlYWQzMihGbGFzaFJlZyArIElOVFJfU1RBVFVTMSk7CisJaW50czIgPSBpb3JlYWQzMihGbGFzaFJlZyArIElOVFJfU1RBVFVTMik7CisJaW50czMgPSBpb3JlYWQzMihGbGFzaFJlZyArIElOVFJfU1RBVFVTMyk7CisKKwlpbnRzX29mZnNldCA9IGludHJbZGV2LT5mbGFzaF9iYW5rXTsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkiSU5UUjA6IDB4JXgsIElOVFIxOiAweCV4LCBJTlRSMjogMHgleCwgSU5UUjM6IDB4JXgsICIKKwkJIkRNQV9JTlRSOiAweCV4LCAiCisJCSJkZXYtPnN0YXRlOiAweCV4LCBkZXYtPmZsYXNoX2Jhbms6ICVkXG4iLAorCQlpbnRzMCwgaW50czEsIGludHMyLCBpbnRzMywKKwkJaW9yZWFkMzIoRmxhc2hSZWcgKyBETUFfSU5UUiksCisJCWRldi0+c3RhdGUsIGRldi0+Zmxhc2hfYmFuayk7CisKKwlpZiAoIShpb3JlYWQzMihGbGFzaFJlZyArIGludHNfb2Zmc2V0KSAmIGludF9tYXNrKSkgeworCQlpb3dyaXRlMzIoaW50czAsIEZsYXNoUmVnICsgSU5UUl9TVEFUVVMwKTsKKwkJaW93cml0ZTMyKGludHMxLCBGbGFzaFJlZyArIElOVFJfU1RBVFVTMSk7CisJCWlvd3JpdGUzMihpbnRzMiwgRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzIpOworCQlpb3dyaXRlMzIoaW50czMsIEZsYXNoUmVnICsgSU5UUl9TVEFUVVMzKTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJCSJkZG1hX2lzcjogSW52YWxpZCBpbnRlcnJ1cHQgZm9yIE5BTkQgY29udHJvbGxlci4gIgorCQkJIklnbm9yZSBpdFxuIik7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlzd2l0Y2ggKGRldi0+c3RhdGUpIHsKKwljYXNlIElOVF9SRUFEX1BBR0VfTUFJTjoKKwljYXNlIElOVF9QSVBFTElORV9SRUFEX0FIRUFEOgorCQkvKiBEaXNhYmxlIGNvbnRyb2xsZXIgaW50ZXJydXB0cyAqLworCQlpb3dyaXRlMzIoMCwgRmxhc2hSZWcgKyBHTE9CQUxfSU5UX0VOQUJMRSk7CisJCWhhbmRsZV9uYW5kX2ludF9yZWFkKGRldik7CisJCWJyZWFrOworCWNhc2UgSU5UX1dSSVRFX1BBR0VfTUFJTjoKKwljYXNlIElOVF9QSVBFTElORV9XUklURV9BSEVBRDoKKwkJaW93cml0ZTMyKDAsIEZsYXNoUmVnICsgR0xPQkFMX0lOVF9FTkFCTEUpOworCQloYW5kbGVfbmFuZF9pbnRfd3JpdGUoZGV2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJkZG1hX2lzciAtIElsbGVnYWwgc3RhdGU6IDB4JXhcbiIsCisJCQlkZXYtPnN0YXRlKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCWRldi0+c3RhdGUgPSBJTlRfSURMRV9TVEFURTsKKwljb21wbGV0ZSgmZGV2LT5jb21wbGV0ZSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuYW5kX3BjaV9pZHNbXSA9IHsKKwl7CisJIC52ZW5kb3IgPSAweDgwODYsCisJIC5kZXZpY2UgPSAweDA4MDksCisJIC5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAorCSAuc3ViZGV2aWNlID0gUENJX0FOWV9JRCwKKwkgfSwKKwl7IC8qIGVuZDogYWxsIHplcm9lcyAqLyB9Cit9OworCitzdGF0aWMgaW50IG5hbmRfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0ID0gLUVOT0RFVjsKKwl1bnNpZ25lZCBsb25nIGNzcl9iYXNlOworCXVuc2lnbmVkIGxvbmcgY3NyX2xlbjsKKwlzdHJ1Y3QgbXJzdF9uYW5kX2luZm8gKnBuZGV2ID0gJmluZm87CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiU3BlY3RyYTogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkLlxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcGNpX3NldF9tYXN0ZXIoZGV2KTsKKwlwbmRldi0+ZGV2ID0gZGV2OworCisJY3NyX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKKwlpZiAoIWNzcl9iYXNlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiU3BlY3RyYTogcGNpX3Jlc291cmNlX3N0YXJ0IGZhaWxlZCFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwljc3JfbGVuID0gcGNpX3Jlc291cmNlX2xlbihkZXYsIDApOworCWlmICghY3NyX2xlbikgeworCQlwcmludGsoS0VSTl9FUlIgIlNwZWN0cmE6IHBjaV9yZXNvdXJjZV9sZW4gZmFpbGVkIVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMoZGV2LCBTUEVDVFJBX05BTkRfTkFNRSk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIlNwZWN0cmE6IFVuYWJsZSB0byByZXF1ZXN0ICIKKwkJICAgICAgICJtZW1vcnkgcmVnaW9uXG4iKTsKKwkJZ290byBmYWlsZWRfcmVxX2NzcjsKKwl9CisKKwlwbmRldi0+aW9hZGRyID0gaW9yZW1hcF9ub2NhY2hlKGNzcl9iYXNlLCBjc3JfbGVuKTsKKwlpZiAoIXBuZGV2LT5pb2FkZHIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTcGVjdHJhOiBVbmFibGUgdG8gcmVtYXAgbWVtb3J5IHJlZ2lvblxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbGVkX3JlbWFwX2NzcjsKKwl9CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJTcGVjdHJhOiBDU1IgMHglMDhseCAtPiAweCVwICgweCVseClcbiIsCisJCSAgICAgICBjc3JfYmFzZSwgcG5kZXYtPmlvYWRkciwgY3NyX2xlbik7CisKKwlpbml0X2NvbXBsZXRpb24oJnBuZGV2LT5jb21wbGV0ZSk7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJTcGVjdHJhOiBJUlEgJWRcbiIsIGRldi0+aXJxKTsKKworI2lmIENNRF9ETUEKKwlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsIGNkbWFfaXNyLCBJUlFGX1NIQVJFRCwKKwkJCVNQRUNUUkFfTkFORF9OQU1FLCAmaW5mbykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTcGVjdHJhOiBVbmFibGUgdG8gYWxsb2NhdGUgSVJRXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJaW91bm1hcChwbmRldi0+aW9hZGRyKTsKKwkJZ290byBmYWlsZWRfcmVtYXBfY3NyOworCX0KKyNlbHNlCisJaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBkZG1hX2lzciwgSVJRRl9TSEFSRUQsCisJCQlTUEVDVFJBX05BTkRfTkFNRSwgJmluZm8pKSB7CisJCXByaW50ayhLRVJOX0VSUiAiU3BlY3RyYTogVW5hYmxlIHRvIGFsbG9jYXRlIElSUVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWlvdW5tYXAocG5kZXYtPmlvYWRkcik7CisJCWdvdG8gZmFpbGVkX3JlbWFwX2NzcjsKKwl9CisjZW5kaWYKKworCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIHBuZGV2KTsKKworCXJldHVybiAwOworCitmYWlsZWRfcmVtYXBfY3NyOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKK2ZhaWxlZF9yZXFfY3NyOgorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbmFuZF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IG1yc3RfbmFuZF9pbmZvICpwbmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworI2lmIENNRF9ETUEKKwlmcmVlX2lycShkZXYtPmlycSwgcG5kZXYpOworI2VuZGlmCisJaW91bm1hcChwbmRldi0+aW9hZGRyKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7Cit9CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBuYW5kX3BjaV9pZHMpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmFuZF9wY2lfZHJpdmVyID0geworCS5uYW1lID0gU1BFQ1RSQV9OQU5EX05BTUUsCisJLmlkX3RhYmxlID0gbmFuZF9wY2lfaWRzLAorCS5wcm9iZSA9IG5hbmRfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBuYW5kX3BjaV9yZW1vdmUsCit9OworCitpbnQgTkFORF9GbGFzaF9Jbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKwl1MzIgaW50X21hc2s7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCUZsYXNoUmVnID0gaW9yZW1hcF9ub2NhY2hlKEdMT0JfSFdDVExfUkVHX0JBU0UsCisJCQlHTE9CX0hXQ1RMX1JFR19TSVpFKTsKKwlpZiAoIUZsYXNoUmVnKSB7CisJCXByaW50ayhLRVJOX0VSUiAiU3BlY3RyYTogaW9yZW1hcF9ub2NhY2hlIGZhaWxlZCEiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sCisJCSJTcGVjdHJhOiBSZW1hcHBlZCByZWcgYmFzZSBhZGRyZXNzOiAiCisJCSIweCVwLCBsZW46ICVkXG4iLAorCQlGbGFzaFJlZywgR0xPQl9IV0NUTF9SRUdfU0laRSk7CisKKwlGbGFzaE1lbSA9IGlvcmVtYXBfbm9jYWNoZShHTE9CX0hXQ1RMX01FTV9CQVNFLAorCQkJR0xPQl9IV0NUTF9NRU1fU0laRSk7CisJaWYgKCFGbGFzaE1lbSkgeworCQlwcmludGsoS0VSTl9FUlIgIlNwZWN0cmE6IGlvcmVtYXBfbm9jYWNoZSBmYWlsZWQhIik7CisJCWlvdW5tYXAoRmxhc2hSZWcpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJIlNwZWN0cmE6IFJlbWFwcGVkIGZsYXNoIGJhc2UgYWRkcmVzczogIgorCQkiMHglcCwgbGVuOiAlZFxuIiwKKwkJKHZvaWQgKilGbGFzaE1lbSwgR0xPQl9IV0NUTF9NRU1fU0laRSk7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkR1bXAgdGltaW5nIHJlZ2lzdGVyIHZhbHVlczoiCisJCQkiYWNjX2Nsa3M6ICVkLCByZV8yX3dlOiAlZCwgd2VfMl9yZTogJWQsIgorCQkJImFkZHJfMl9kYXRhOiAlZCwgcmR3cl9lbl9sb19jbnQ6ICVkLCAiCisJCQkicmR3cl9lbl9oaV9jbnQ6ICVkLCBjc19zZXR1cF9jbnQ6ICVkXG4iLAorCQkJaW9yZWFkMzIoRmxhc2hSZWcgKyBBQ0NfQ0xLUyksCisJCQlpb3JlYWQzMihGbGFzaFJlZyArIFJFXzJfV0UpLAorCQkJaW9yZWFkMzIoRmxhc2hSZWcgKyBXRV8yX1JFKSwKKwkJCWlvcmVhZDMyKEZsYXNoUmVnICsgQUREUl8yX0RBVEEpLAorCQkJaW9yZWFkMzIoRmxhc2hSZWcgKyBSRFdSX0VOX0xPX0NOVCksCisJCQlpb3JlYWQzMihGbGFzaFJlZyArIFJEV1JfRU5fSElfQ05UKSwKKwkJCWlvcmVhZDMyKEZsYXNoUmVnICsgQ1NfU0VUVVBfQ05UKSk7CisKKwlOQU5EX0ZsYXNoX1Jlc2V0KCk7CisKKwlpb3dyaXRlMzIoMCwgRmxhc2hSZWcgKyBHTE9CQUxfSU5UX0VOQUJMRSk7CisKKyNpZiBDTURfRE1BCisJaW5mby5wY21kc19udW0gPSAwOworCWluZm8uZmxhc2hfYmFuayA9IDA7CisJaW5mby5jZG1hX251bSA9IDA7CisJaW50X21hc2sgPSAoRE1BX0lOVFJfX0RFU0NfQ09NUF9DSEFOTkVMMCB8CisJCURNQV9JTlRSX19ERVNDX0NPTVBfQ0hBTk5FTDEgfAorCQlETUFfSU5UUl9fREVTQ19DT01QX0NIQU5ORUwyIHwKKwkJRE1BX0lOVFJfX0RFU0NfQ09NUF9DSEFOTkVMMyB8CisJCURNQV9JTlRSX19NRU1DT1BZX0RFU0NfQ09NUCk7CisJaW93cml0ZTMyKGludF9tYXNrLCBGbGFzaFJlZyArIERNQV9JTlRSX0VOKTsKKwlpb3dyaXRlMzIoMHhGRkZGLCBGbGFzaFJlZyArIERNQV9JTlRSKTsKKworCWludF9tYXNrID0gKElOVFJfU1RBVFVTMF9fRUNDX0VSUiB8CisJCUlOVFJfU1RBVFVTMF9fUFJPR1JBTV9GQUlMIHwKKwkJSU5UUl9TVEFUVVMwX19FUkFTRV9GQUlMKTsKKyNlbHNlCisJaW50X21hc2sgPSBJTlRSX1NUQVRVUzBfX0RNQV9DTURfQ09NUCB8CisJCUlOVFJfU1RBVFVTMF9fRUNDX1RSQU5TQUNUSU9OX0RPTkUgfAorCQlJTlRSX1NUQVRVUzBfX0VDQ19FUlIgfAorCQlJTlRSX1NUQVRVUzBfX1BST0dSQU1fRkFJTCB8CisJCUlOVFJfU1RBVFVTMF9fRVJBU0VfRkFJTDsKKyNlbmRpZgorCWlvd3JpdGUzMihpbnRfbWFzaywgRmxhc2hSZWcgKyBJTlRSX0VOMCk7CisJaW93cml0ZTMyKGludF9tYXNrLCBGbGFzaFJlZyArIElOVFJfRU4xKTsKKwlpb3dyaXRlMzIoaW50X21hc2ssIEZsYXNoUmVnICsgSU5UUl9FTjIpOworCWlvd3JpdGUzMihpbnRfbWFzaywgRmxhc2hSZWcgKyBJTlRSX0VOMyk7CisKKwkvKiBDbGVhciBhbGwgc3RhdHVzIGJpdHMgKi8KKwlpb3dyaXRlMzIoMHhGRkZGLCBGbGFzaFJlZyArIElOVFJfU1RBVFVTMCk7CisJaW93cml0ZTMyKDB4RkZGRiwgRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzEpOworCWlvd3JpdGUzMigweEZGRkYsIEZsYXNoUmVnICsgSU5UUl9TVEFUVVMyKTsKKwlpb3dyaXRlMzIoMHhGRkZGLCBGbGFzaFJlZyArIElOVFJfU1RBVFVTMyk7CisKKwlpb3dyaXRlMzIoMHgwRiwgRmxhc2hSZWcgKyBSQl9QSU5fRU5BQkxFRCk7CisJaW93cml0ZTMyKENISVBfRU5fRE9OVF9DQVJFX19GTEFHLCBGbGFzaFJlZyArIENISVBfRU5BQkxFX0RPTlRfQ0FSRSk7CisKKwkvKiBTaG91bGQgc2V0IHZhbHVlIGZvciB0aGVzZSByZWdpc3RlcnMgd2hlbiBpbml0ICovCisJaW93cml0ZTMyKDAsIEZsYXNoUmVnICsgVFdPX1JPV19BRERSX0NZQ0xFUyk7CisJaW93cml0ZTMyKDEsIEZsYXNoUmVnICsgRUNDX0VOQUJMRSk7CisJZW5hYmxlX2VjYyA9IDE7CisKKwlyZXR2YWwgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZuYW5kX3BjaV9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIFBBU1M7Cit9CisKKy8qIEZyZWUgbWVtb3J5ICovCitpbnQgbmFuZF9yZWxlYXNlX3NwZWN0cmEodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm5hbmRfcGNpX2RyaXZlcik7CisJaW91bm1hcChGbGFzaE1lbSk7CisJaW91bm1hcChGbGFzaFJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2xsZF9uYW5kLmggYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9sbGRfbmFuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwODM4ODIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9sbGRfbmFuZC5oCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogTkFORCBGbGFzaCBDb250cm9sbGVyIERldmljZSBEcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgSW50ZWwgQ29ycG9yYXRpb24gYW5kIGl0cyBzdXBwbGllcnMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBfTExEX05BTkRfCisjZGVmaW5lIF9MTERfTkFORF8KKworI2lmZGVmIEVMRE9SQQorI2luY2x1ZGUgImRlZnMuaCIKKyNlbHNlCisjaW5jbHVkZSAiZmxhc2guaCIKKyNpbmNsdWRlICJmZnNwb3J0LmgiCisjZW5kaWYKKworI2RlZmluZSBNT0RFXzAwICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgTU9ERV8wMSAgICAweDA0MDAwMDAwCisjZGVmaW5lIE1PREVfMTAgICAgMHgwODAwMDAwMAorI2RlZmluZSBNT0RFXzExICAgIDB4MEMwMDAwMDAKKworCisjZGVmaW5lIERBVEFfVFJBTlNGRVJfTU9ERSAgICAgICAgICAgICAgMAorI2RlZmluZSBQUk9URUNUSU9OX1BFUl9CTE9DSyAgICAgICAgICAgIDEKKyNkZWZpbmUgTE9BRF9XQUlUX0NPVU5UICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFBST0dSQU1fV0FJVF9DT1VOVCAgICAgICAgICAgICAgMworI2RlZmluZSBFUkFTRV9XQUlUX0NPVU5UICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgSU5UX01PTklUT1JfQ1lDTEVfQ09VTlQgICAgICAgICA1CisjZGVmaW5lIFJFQURfQlVTWV9QSU5fRU5BQkxFRCAgICAgICAgICAgNgorI2RlZmluZSBNVUxUSVBMQU5FX09QRVJBVElPTl9TVVBQT1JUICAgIDcKKyNkZWZpbmUgUFJFX0ZFVENIX01PREUgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENFX0RPTlRfQ0FSRV9TVVBQT1JUICAgICAgICAgICAgOQorI2RlZmluZSBDT1BZQkFDS19TVVBQT1JUICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIENBQ0hFX1dSSVRFX1NVUFBPUlQgICAgICAgICAgICAgMTEKKyNkZWZpbmUgQ0FDSEVfUkVBRF9TVVBQT1JUICAgICAgICAgICAgICAxMgorI2RlZmluZSBOVU1fUEFHRVNfSU5fQkxPQ0sgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEVDQ19FTkFCTEVfU0VMRUNUICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgV1JJVEVfRU5BQkxFXzJfUkVBRF9FTkFCTEUgICAgICAxNQorI2RlZmluZSBBRERSRVNTXzJfREFUQSAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIFJFQURfRU5BQkxFXzJfV1JJVEVfRU5BQkxFICAgICAgMTcKKyNkZWZpbmUgVFdPX1JPV19BRERSRVNTX0NZQ0xFUyAgICAgICAgICAxOAorI2RlZmluZSBNVUxUSVBMQU5FX0FERFJFU1NfUkVTVFJJQ1QgICAgIDE5CisjZGVmaW5lIEFDQ19DTE9DS1MgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgUkVBRF9XUklURV9FTkFCTEVfTE9XX0NPVU5UICAgICAyMQorI2RlZmluZSBSRUFEX1dSSVRFX0VOQUJMRV9ISUdIX0NPVU5UICAgIDIyCisKKyNkZWZpbmUgRUNDX1NFQ1RPUl9TSVpFICAgICA1MTIKKyNkZWZpbmUgTExEX01BWF9GTEFTSF9CQU5LUyAgICAgNAorCitzdHJ1Y3QgbXJzdF9uYW5kX2luZm8geworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJdTMyIHN0YXRlOworCXUzMiBmbGFzaF9iYW5rOworCXU4ICpyZWFkX2RhdGE7CisJdTggKndyaXRlX2RhdGE7CisJdTMyIGJsb2NrOworCXUxNiBwYWdlOworCXUzMiB1c2VfZG1hOworCXZvaWQgX19pb21lbSAqaW9hZGRyOyAgLyogTWFwcGVkIGlvIHJlZyBiYXNlIGFkZHJlc3MgKi8KKwlpbnQgcmV0OworCXUzMiBwY21kc19udW07CisJc3RydWN0IHBlbmRpbmdfY21kICpwY21kczsKKwlpbnQgY2RtYV9udW07ICAgICAgICAgICAvKiBDRE1BIGRlc2NyaXB0b3IgbnVtYmVyIGluIHRoaXMgY2hhbiAqLworCXU4ICpjZG1hX2Rlc2NfYnVmOwkvKiBDRE1BIGRlc2NyaXB0b3IgdGFibGUgKi8KKwl1OCAqbWVtY3BfZGVzY19idWY7CS8qIE1lbW9yeSBjb3B5IGRlc2NyaXB0b3IgdGFibGUgKi8KKwlkbWFfYWRkcl90IGNkbWFfZGVzYzsJLyogTWFwcGVkIENETUEgZGVzY3JpcHRvciB0YWJsZSAqLworCWRtYV9hZGRyX3QgbWVtY3BfZGVzYzsJLyogTWFwcGVkIG1lbW9yeSBjb3B5IGRlc2NyaXB0b3IgdGFibGUgKi8KKwlzdHJ1Y3QgY29tcGxldGlvbiBjb21wbGV0ZTsKK307CisKK2ludCBOQU5EX0ZsYXNoX0luaXQodm9pZCk7CitpbnQgbmFuZF9yZWxlYXNlX3NwZWN0cmEodm9pZCk7Cit1MTYgIE5BTkRfRmxhc2hfUmVzZXQodm9pZCk7Cit1MTYgIE5BTkRfUmVhZF9EZXZpY2VfSUQodm9pZCk7Cit1MTYgIE5BTkRfRXJhc2VfQmxvY2sodTMyIGZsYXNoX2FkZCk7Cit1MTYgIE5BTkRfV3JpdGVfUGFnZV9NYWluKHU4ICp3cml0ZV9kYXRhLCB1MzIgYmxvY2ssIHUxNiBwYWdlLAorCQkJCXUxNiBwYWdlX2NvdW50KTsKK3UxNiAgTkFORF9SZWFkX1BhZ2VfTWFpbih1OCAqcmVhZF9kYXRhLCB1MzIgYmxvY2ssIHUxNiBwYWdlLAorCQkJCXUxNiBwYWdlX2NvdW50KTsKK3UxNiAgTkFORF9VbmxvY2tBcnJheUFsbCh2b2lkKTsKK3UxNiAgTkFORF9Xcml0ZV9QYWdlX01haW5fU3BhcmUodTggKndyaXRlX2RhdGEsIHUzMiBibG9jaywKKwkJCQl1MTYgcGFnZSwgdTE2IHBhZ2VfY291bnQpOwordTE2ICBOQU5EX1dyaXRlX1BhZ2VfU3BhcmUodTggKnJlYWRfZGF0YSwgdTMyIGJsb2NrLCB1MTYgcGFnZSwKKwkJCQl1MTYgcGFnZV9jb3VudCk7Cit1MTYgIE5BTkRfUmVhZF9QYWdlX01haW5fU3BhcmUodTggKnJlYWRfZGF0YSwgdTMyIGJsb2NrLCB1MTYgcGFnZSwKKwkJCQl1MTYgcGFnZV9jb3VudCk7Cit1MTYgIE5BTkRfUmVhZF9QYWdlX1NwYXJlKHU4ICpyZWFkX2RhdGEsIHUzMiBibG9jaywgdTE2IHBhZ2UsCisJCQkJdTE2IHBhZ2VfY291bnQpOwordm9pZCBOQU5EX0xMRF9FbmFibGVfRGlzYWJsZV9JbnRlcnJ1cHRzKHUxNiBJTlRfRU5BQkxFKTsKK3UxNiAgTkFORF9HZXRfQmFkX0Jsb2NrKHUzMiBibG9jayk7Cit1MTYgIE5BTkRfUGlwZWxpbmVfUmVhZF9BaGVhZCh1OCAqcmVhZF9kYXRhLCB1MzIgYmxvY2ssIHUxNiBwYWdlLAorCQkJCXUxNiBwYWdlX2NvdW50KTsKK3UxNiAgTkFORF9QaXBlbGluZV9Xcml0ZV9BaGVhZCh1OCAqd3JpdGVfZGF0YSwgdTMyIGJsb2NrLAorCQkJCXUxNiBwYWdlLCB1MTYgcGFnZV9jb3VudCk7Cit1MTYgIE5BTkRfTXVsdGlwbGFuZV9SZWFkKHU4ICpyZWFkX2RhdGEsIHUzMiBibG9jaywgdTE2IHBhZ2UsCisJCQkJdTE2IHBhZ2VfY291bnQpOwordTE2ICBOQU5EX011bHRpcGxhbmVfV3JpdGUodTggKndyaXRlX2RhdGEsIHUzMiBibG9jaywgdTE2IHBhZ2UsCisJCQkJdTE2IHBhZ2VfY291bnQpOwordm9pZCBOQU5EX0VDQ19DdHJsKGludCBlbmFibGUpOwordTE2IE5BTkRfUmVhZF9QYWdlX01haW5fUG9sbGluZyh1OCAqcmVhZF9kYXRhLAorCQl1MzIgYmxvY2ssIHUxNiBwYWdlLCB1MTYgcGFnZV9jb3VudCk7Cit1MTYgTkFORF9QaXBlbGluZV9SZWFkX0FoZWFkX1BvbGxpbmcodTggKnJlYWRfZGF0YSwKKwkJCXUzMiBibG9jaywgdTE2IHBhZ2UsIHUxNiBwYWdlX2NvdW50KTsKK3ZvaWQgQ29udl9TcGFyZV9EYXRhX0xvZzJQaHlfRm9ybWF0KHU4ICpkYXRhKTsKK3ZvaWQgQ29udl9TcGFyZV9EYXRhX1BoeTJMb2dfRm9ybWF0KHU4ICpkYXRhKTsKK3ZvaWQgQ29udl9NYWluX1NwYXJlX0RhdGFfTG9nMlBoeV9Gb3JtYXQodTggKmRhdGEsIHUxNiBwYWdlX2NvdW50KTsKK3ZvaWQgQ29udl9NYWluX1NwYXJlX0RhdGFfUGh5MkxvZ19Gb3JtYXQodTggKmRhdGEsIHUxNiBwYWdlX2NvdW50KTsKKworZXh0ZXJuIHZvaWQgX19pb21lbSAqRmxhc2hSZWc7CitleHRlcm4gdm9pZCBfX2lvbWVtICpGbGFzaE1lbTsKKworZXh0ZXJuIGludCB0b3RhbFVzZWRCYW5rczsKK2V4dGVybiB1MzIgR0xPQl92YWxpZF9iYW5rc1tMTERfTUFYX0ZMQVNIX0JBTktTXTsKKworI2VuZGlmIC8qX0xMRF9OQU5EXyovCisKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9uYW5kX3JlZ3MuaCBiL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL25hbmRfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxOTJlNGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9uYW5kX3JlZ3MuaApAQCAtMCwwICsxLDYxOSBAQAorLyoKKyAqIE5BTkQgRmxhc2ggQ29udHJvbGxlciBEZXZpY2UgRHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEludGVsIENvcnBvcmF0aW9uIGFuZCBpdHMgc3VwcGxpZXJzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICovCisKKyNkZWZpbmUgREVWSUNFX1JFU0VUCQkJCTB4MAorI2RlZmluZSAgICAgREVWSUNFX1JFU0VUX19CQU5LMAkJCQkweDAwMDEKKyNkZWZpbmUgICAgIERFVklDRV9SRVNFVF9fQkFOSzEJCQkJMHgwMDAyCisjZGVmaW5lICAgICBERVZJQ0VfUkVTRVRfX0JBTksyCQkJCTB4MDAwNAorI2RlZmluZSAgICAgREVWSUNFX1JFU0VUX19CQU5LMwkJCQkweDAwMDgKKworI2RlZmluZSBUUkFOU0ZFUl9TUEFSRV9SRUcJCQkweDEwCisjZGVmaW5lICAgICBUUkFOU0ZFUl9TUEFSRV9SRUdfX0ZMQUcJCQkweDAwMDEKKworI2RlZmluZSBMT0FEX1dBSVRfQ05UCQkJCTB4MjAKKyNkZWZpbmUgICAgIExPQURfV0FJVF9DTlRfX1ZBTFVFCQkJCTB4ZmZmZgorCisjZGVmaW5lIFBST0dSQU1fV0FJVF9DTlQJCQkweDMwCisjZGVmaW5lICAgICBQUk9HUkFNX1dBSVRfQ05UX19WQUxVRQkJCTB4ZmZmZgorCisjZGVmaW5lIEVSQVNFX1dBSVRfQ05UCQkJCTB4NDAKKyNkZWZpbmUgICAgIEVSQVNFX1dBSVRfQ05UX19WQUxVRQkJCTB4ZmZmZgorCisjZGVmaW5lIElOVF9NT05fQ1lDQ05UCQkJCTB4NTAKKyNkZWZpbmUgICAgIElOVF9NT05fQ1lDQ05UX19WQUxVRQkJCTB4ZmZmZgorCisjZGVmaW5lIFJCX1BJTl9FTkFCTEVECQkJCTB4NjAKKyNkZWZpbmUgICAgIFJCX1BJTl9FTkFCTEVEX19CQU5LMAkJCTB4MDAwMQorI2RlZmluZSAgICAgUkJfUElOX0VOQUJMRURfX0JBTksxCQkJMHgwMDAyCisjZGVmaW5lICAgICBSQl9QSU5fRU5BQkxFRF9fQkFOSzIJCQkweDAwMDQKKyNkZWZpbmUgICAgIFJCX1BJTl9FTkFCTEVEX19CQU5LMwkJCTB4MDAwOAorCisjZGVmaW5lIE1VTFRJUExBTkVfT1BFUkFUSU9OCQkJMHg3MAorI2RlZmluZSAgICAgTVVMVElQTEFORV9PUEVSQVRJT05fX0ZMQUcJCQkweDAwMDEKKworI2RlZmluZSBNVUxUSVBMQU5FX1JFQURfRU5BQkxFCQkJMHg4MAorI2RlZmluZSAgICAgTVVMVElQTEFORV9SRUFEX0VOQUJMRV9fRkxBRwkJMHgwMDAxCisKKyNkZWZpbmUgQ09QWUJBQ0tfRElTQUJMRQkJCTB4OTAKKyNkZWZpbmUgICAgIENPUFlCQUNLX0RJU0FCTEVfX0ZMQUcJCQkweDAwMDEKKworI2RlZmluZSBDQUNIRV9XUklURV9FTkFCTEUJCQkweGEwCisjZGVmaW5lICAgICBDQUNIRV9XUklURV9FTkFCTEVfX0ZMQUcJCQkweDAwMDEKKworI2RlZmluZSBDQUNIRV9SRUFEX0VOQUJMRQkJCTB4YjAKKyNkZWZpbmUgICAgIENBQ0hFX1JFQURfRU5BQkxFX19GTEFHCQkJMHgwMDAxCisKKyNkZWZpbmUgUFJFRkVUQ0hfTU9ERQkJCQkweGMwCisjZGVmaW5lICAgICBQUkVGRVRDSF9NT0RFX19QUkVGRVRDSF9FTgkJCTB4MDAwMQorI2RlZmluZSAgICAgUFJFRkVUQ0hfTU9ERV9fUFJFRkVUQ0hfQlVSU1RfTEVOR1RICTB4ZmZmMAorCisjZGVmaW5lIENISVBfRU5BQkxFX0RPTlRfQ0FSRQkJCTB4ZDAKKyNkZWZpbmUgICAgIENISVBfRU5fRE9OVF9DQVJFX19GTEFHCQkJMHgwMQorCisjZGVmaW5lIEVDQ19FTkFCTEUJCQkJMHhlMAorI2RlZmluZSAgICAgRUNDX0VOQUJMRV9fRkxBRwkJCQkweDAwMDEKKworI2RlZmluZSBHTE9CQUxfSU5UX0VOQUJMRQkJCTB4ZjAKKyNkZWZpbmUgICAgIEdMT0JBTF9JTlRfRU5fRkxBRwkJCQkweDAxCisKKyNkZWZpbmUgV0VfMl9SRQkJCQkJMHgxMDAKKyNkZWZpbmUgICAgIFdFXzJfUkVfX1ZBTFVFCQkJCTB4MDAzZgorCisjZGVmaW5lIEFERFJfMl9EQVRBCQkJCTB4MTEwCisjZGVmaW5lICAgICBBRERSXzJfREFUQV9fVkFMVUUJCQkJMHgwMDNmCisKKyNkZWZpbmUgUkVfMl9XRQkJCQkJMHgxMjAKKyNkZWZpbmUgICAgIFJFXzJfV0VfX1ZBTFVFCQkJCTB4MDAzZgorCisjZGVmaW5lIEFDQ19DTEtTICAgIAkJCQkweDEzMAorI2RlZmluZSAgICAgQUNDX0NMS1NfX1ZBTFVFCQkJCTB4MDAwZgorCisjZGVmaW5lIE5VTUJFUl9PRl9QTEFORVMJCQkweDE0MAorI2RlZmluZSAgICAgTlVNQkVSX09GX1BMQU5FU19fVkFMVUUJCQkweDAwMDcKKworI2RlZmluZSBQQUdFU19QRVJfQkxPQ0sJCQkJMHgxNTAKKyNkZWZpbmUgICAgIFBBR0VTX1BFUl9CTE9DS19fVkFMVUUJCQkweGZmZmYKKworI2RlZmluZSBERVZJQ0VfV0lEVEgJCQkJMHgxNjAKKyNkZWZpbmUgICAgIERFVklDRV9XSURUSF9fVkFMVUUJCQkJMHgwMDAzCisKKyNkZWZpbmUgREVWSUNFX01BSU5fQVJFQV9TSVpFCQkJMHgxNzAKKyNkZWZpbmUgICAgIERFVklDRV9NQUlOX0FSRUFfU0laRV9fVkFMVUUJCTB4ZmZmZgorCisjZGVmaW5lIERFVklDRV9TUEFSRV9BUkVBX1NJWkUJCQkweDE4MAorI2RlZmluZSAgICAgREVWSUNFX1NQQVJFX0FSRUFfU0laRV9fVkFMVUUJCTB4ZmZmZgorCisjZGVmaW5lIFRXT19ST1dfQUREUl9DWUNMRVMJCQkweDE5MAorI2RlZmluZSAgICAgVFdPX1JPV19BRERSX0NZQ0xFU19fRkxBRwkJCTB4MDAwMQorCisjZGVmaW5lIE1VTFRJUExBTkVfQUREUl9SRVNUUklDVAkJMHgxYTAKKyNkZWZpbmUgICAgIE1VTFRJUExBTkVfQUREUl9SRVNUUklDVF9fRkxBRwkJMHgwMDAxCisKKyNkZWZpbmUgRUNDX0NPUlJFQ1RJT04JCQkJMHgxYjAKKyNkZWZpbmUgICAgIEVDQ19DT1JSRUNUSU9OX19WQUxVRQkJCTB4MDAxZgorCisjZGVmaW5lIFJFQURfTU9ERQkJCQkweDFjMAorI2RlZmluZSAgICAgUkVBRF9NT0RFX19WQUxVRQkJCQkweDAwMGYKKworI2RlZmluZSBXUklURV9NT0RFCQkJCTB4MWQwCisjZGVmaW5lICAgICBXUklURV9NT0RFX19WQUxVRQkJCQkweDAwMGYKKworI2RlZmluZSBDT1BZQkFDS19NT0RFCQkJCTB4MWUwCisjZGVmaW5lICAgICBDT1BZQkFDS19NT0RFX19WQUxVRQkJCTB4MDAwZgorCisjZGVmaW5lIFJEV1JfRU5fTE9fQ05UCQkJCTB4MWYwCisjZGVmaW5lICAgICBSRFdSX0VOX0xPX0NOVF9fVkFMVUUJCQkweDAwMWYKKworI2RlZmluZSBSRFdSX0VOX0hJX0NOVAkJCQkweDIwMAorI2RlZmluZSAgICAgUkRXUl9FTl9ISV9DTlRfX1ZBTFVFCQkJMHgwMDFmCisKKyNkZWZpbmUgTUFYX1JEX0RFTEFZCQkJCTB4MjEwCisjZGVmaW5lICAgICBNQVhfUkRfREVMQVlfX1ZBTFVFCQkJCTB4MDAwZgorCisjZGVmaW5lIENTX1NFVFVQX0NOVAkJCQkweDIyMAorI2RlZmluZSAgICAgQ1NfU0VUVVBfQ05UX19WQUxVRQkJCQkweDAwMWYKKworI2RlZmluZSBTUEFSRV9BUkVBX1NLSVBfQllURVMJCQkweDIzMAorI2RlZmluZSAgICAgU1BBUkVfQVJFQV9TS0lQX0JZVEVTX19WQUxVRQkJMHgwMDNmCisKKyNkZWZpbmUgU1BBUkVfQVJFQV9NQVJLRVIJCQkweDI0MAorI2RlZmluZSAgICAgU1BBUkVfQVJFQV9NQVJLRVJfX1ZBTFVFCQkJMHhmZmZmCisKKyNkZWZpbmUgREVWSUNFU19DT05ORUNURUQJCQkweDI1MAorI2RlZmluZSAgICAgREVWSUNFU19DT05ORUNURURfX1ZBTFVFCQkJMHgwMDA3CisKKyNkZWZpbmUgRElFX01BU0sJCQkJCTB4MjYwCisjZGVmaW5lICAgICBESUVfTUFTS19fVkFMVUUJCQkJMHgwMGZmCisKKyNkZWZpbmUgRklSU1RfQkxPQ0tfT0ZfTkVYVF9QTEFORQkJMHgyNzAKKyNkZWZpbmUgICAgIEZJUlNUX0JMT0NLX09GX05FWFRfUExBTkVfX1ZBTFVFCQkweGZmZmYKKworI2RlZmluZSBXUklURV9QUk9URUNUCQkJCTB4MjgwCisjZGVmaW5lICAgICBXUklURV9QUk9URUNUX19GTEFHCQkJCTB4MDAwMQorCisjZGVmaW5lIFJFXzJfUkUJCQkJCTB4MjkwCisjZGVmaW5lICAgICBSRV8yX1JFX19WQUxVRQkJCQkweDAwM2YKKworI2RlZmluZSBNQU5VRkFDVFVSRVJfSUQJCQkweDMwMAorI2RlZmluZSAgICAgTUFOVUZBQ1RVUkVSX0lEX19WQUxVRQkJCTB4MDBmZgorCisjZGVmaW5lIERFVklDRV9JRAkJCQkweDMxMAorI2RlZmluZSAgICAgREVWSUNFX0lEX19WQUxVRQkJCQkweDAwZmYKKworI2RlZmluZSBERVZJQ0VfUEFSQU1fMAkJCQkweDMyMAorI2RlZmluZSAgICAgREVWSUNFX1BBUkFNXzBfX1ZBTFVFCQkJMHgwMGZmCisKKyNkZWZpbmUgREVWSUNFX1BBUkFNXzEJCQkJMHgzMzAKKyNkZWZpbmUgICAgIERFVklDRV9QQVJBTV8xX19WQUxVRQkJCTB4MDBmZgorCisjZGVmaW5lIERFVklDRV9QQVJBTV8yCQkJCTB4MzQwCisjZGVmaW5lICAgICBERVZJQ0VfUEFSQU1fMl9fVkFMVUUJCQkweDAwZmYKKworI2RlZmluZSBMT0dJQ0FMX1BBR0VfREFUQV9TSVpFCQkJMHgzNTAKKyNkZWZpbmUgICAgIExPR0lDQUxfUEFHRV9EQVRBX1NJWkVfX1ZBTFVFCQkweGZmZmYKKworI2RlZmluZSBMT0dJQ0FMX1BBR0VfU1BBUkVfU0laRQkJCTB4MzYwCisjZGVmaW5lICAgICBMT0dJQ0FMX1BBR0VfU1BBUkVfU0laRV9fVkFMVUUJCTB4ZmZmZgorCisjZGVmaW5lIFJFVklTSU9OCQkJCQkweDM3MAorI2RlZmluZSAgICAgUkVWSVNJT05fX1ZBTFVFCQkJCTB4ZmZmZgorCisjZGVmaW5lIE9ORklfREVWSUNFX0ZFQVRVUkVTCQkJMHgzODAKKyNkZWZpbmUgICAgIE9ORklfREVWSUNFX0ZFQVRVUkVTX19WQUxVRQkJCTB4MDAzZgorCisjZGVmaW5lIE9ORklfT1BUSU9OQUxfQ09NTUFORFMJCTB4MzkwCisjZGVmaW5lICAgICBPTkZJX09QVElPTkFMX0NPTU1BTkRTX19WQUxVRQkJMHgwMDNmCisKKyNkZWZpbmUgT05GSV9USU1JTkdfTU9ERQkJCTB4M2EwCisjZGVmaW5lICAgICBPTkZJX1RJTUlOR19NT0RFX19WQUxVRQkJCTB4MDAzZgorCisjZGVmaW5lIE9ORklfUEdNX0NBQ0hFX1RJTUlOR19NT0RFCQkweDNiMAorI2RlZmluZSAgICAgT05GSV9QR01fQ0FDSEVfVElNSU5HX01PREVfX1ZBTFVFCQkweDAwM2YKKworI2RlZmluZSBPTkZJX0RFVklDRV9OT19PRl9MVU5TCQkJMHgzYzAKKyNkZWZpbmUgICAgIE9ORklfREVWSUNFX05PX09GX0xVTlNfX05PX09GX0xVTlMJCTB4MDBmZgorI2RlZmluZSAgICAgT05GSV9ERVZJQ0VfTk9fT0ZfTFVOU19fT05GSV9ERVZJQ0UJCTB4MDEwMAorCisjZGVmaW5lIE9ORklfREVWSUNFX05PX09GX0JMT0NLU19QRVJfTFVOX0wJMHgzZDAKKyNkZWZpbmUgICAgIE9ORklfREVWSUNFX05PX09GX0JMT0NLU19QRVJfTFVOX0xfX1ZBTFVFCTB4ZmZmZgorCisjZGVmaW5lIE9ORklfREVWSUNFX05PX09GX0JMT0NLU19QRVJfTFVOX1UJMHgzZTAKKyNkZWZpbmUgICAgIE9ORklfREVWSUNFX05PX09GX0JMT0NLU19QRVJfTFVOX1VfX1ZBTFVFCTB4ZmZmZgorCisjZGVmaW5lIEZFQVRVUkVTCQkJCQkweDNmMAorI2RlZmluZSAgICAgRkVBVFVSRVNfX05fQkFOS1MJCQkJMHgwMDAzCisjZGVmaW5lICAgICBGRUFUVVJFU19fRUNDX01BWF9FUlIJCQkweDAwM2MKKyNkZWZpbmUgICAgIEZFQVRVUkVTX19ETUEJCQkJCTB4MDA0MAorI2RlZmluZSAgICAgRkVBVFVSRVNfX0NNRF9ETUEJCQkJMHgwMDgwCisjZGVmaW5lICAgICBGRUFUVVJFU19fUEFSVElUSU9OCQkJCTB4MDEwMAorI2RlZmluZSAgICAgRkVBVFVSRVNfX1hETUFfU0lERUJBTkQJCQkweDAyMDAKKyNkZWZpbmUgICAgIEZFQVRVUkVTX19HUFJFRwkJCQkweDA0MDAKKyNkZWZpbmUgICAgIEZFQVRVUkVTX19JTkRFWF9BRERSCQkJCTB4MDgwMAorCisjZGVmaW5lIFRSQU5TRkVSX01PREUJCQkJMHg0MDAKKyNkZWZpbmUgICAgIFRSQU5TRkVSX01PREVfX1ZBTFVFCQkJMHgwMDAzCisKKyNkZWZpbmUgSU5UUl9TVEFUVVMwCQkJCTB4NDEwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzBfX0VDQ19UUkFOU0FDVElPTl9ET05FCQkweDAwMDEKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMF9fRUNDX0VSUgkJCTB4MDAwMgorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMwX19ETUFfQ01EX0NPTVAJCQkweDAwMDQKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMF9fVElNRV9PVVQJCQkweDAwMDgKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMF9fUFJPR1JBTV9GQUlMCQkJMHgwMDEwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzBfX0VSQVNFX0ZBSUwJCQkweDAwMjAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMF9fTE9BRF9DT01QCQkJMHgwMDQwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzBfX1BST0dSQU1fQ09NUAkJCTB4MDA4MAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMwX19FUkFTRV9DT01QCQkJMHgwMTAwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzBfX1BJUEVfQ1BZQkNLX0NNRF9DT01QCQkweDAyMDAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMF9fTE9DS0VEX0JMSwkJCTB4MDQwMAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMwX19VTlNVUF9DTUQJCQkweDA4MDAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMF9fSU5UX0FDVAkJCTB4MTAwMAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMwX19SU1RfQ09NUAkJCTB4MjAwMAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMwX19QSVBFX0NNRF9FUlIJCQkweDQwMDAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMF9fUEFHRV9YRkVSX0lOQwkJCTB4ODAwMAorCisjZGVmaW5lIElOVFJfRU4wCQkJCQkweDQyMAorI2RlZmluZSAgICAgSU5UUl9FTjBfX0VDQ19UUkFOU0FDVElPTl9ET05FCQkweDAwMDEKKyNkZWZpbmUgICAgIElOVFJfRU4wX19FQ0NfRVJSCQkJCTB4MDAwMgorI2RlZmluZSAgICAgSU5UUl9FTjBfX0RNQV9DTURfQ09NUAkJCTB4MDAwNAorI2RlZmluZSAgICAgSU5UUl9FTjBfX1RJTUVfT1VUCQkJCTB4MDAwOAorI2RlZmluZSAgICAgSU5UUl9FTjBfX1BST0dSQU1fRkFJTAkJCTB4MDAxMAorI2RlZmluZSAgICAgSU5UUl9FTjBfX0VSQVNFX0ZBSUwJCQkJMHgwMDIwCisjZGVmaW5lICAgICBJTlRSX0VOMF9fTE9BRF9DT01QCQkJCTB4MDA0MAorI2RlZmluZSAgICAgSU5UUl9FTjBfX1BST0dSQU1fQ09NUAkJCTB4MDA4MAorI2RlZmluZSAgICAgSU5UUl9FTjBfX0VSQVNFX0NPTVAJCQkJMHgwMTAwCisjZGVmaW5lICAgICBJTlRSX0VOMF9fUElQRV9DUFlCQ0tfQ01EX0NPTVAJCTB4MDIwMAorI2RlZmluZSAgICAgSU5UUl9FTjBfX0xPQ0tFRF9CTEsJCQkJMHgwNDAwCisjZGVmaW5lICAgICBJTlRSX0VOMF9fVU5TVVBfQ01ECQkJCTB4MDgwMAorI2RlZmluZSAgICAgSU5UUl9FTjBfX0lOVF9BQ1QJCQkJMHgxMDAwCisjZGVmaW5lICAgICBJTlRSX0VOMF9fUlNUX0NPTVAJCQkJMHgyMDAwCisjZGVmaW5lICAgICBJTlRSX0VOMF9fUElQRV9DTURfRVJSCQkJMHg0MDAwCisjZGVmaW5lICAgICBJTlRSX0VOMF9fUEFHRV9YRkVSX0lOQwkJCTB4ODAwMAorCisjZGVmaW5lIFBBR0VfQ05UMAkJCQkweDQzMAorI2RlZmluZSAgICAgUEFHRV9DTlQwX19WQUxVRQkJCQkweDAwZmYKKworI2RlZmluZSBFUlJfUEFHRV9BRERSMAkJCQkweDQ0MAorI2RlZmluZSAgICAgRVJSX1BBR0VfQUREUjBfX1ZBTFVFCQkJMHhmZmZmCisKKyNkZWZpbmUgRVJSX0JMT0NLX0FERFIwCQkJMHg0NTAKKyNkZWZpbmUgICAgIEVSUl9CTE9DS19BRERSMF9fVkFMVUUJCQkweGZmZmYKKworI2RlZmluZSBJTlRSX1NUQVRVUzEJCQkJMHg0NjAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMV9fRUNDX1RSQU5TQUNUSU9OX0RPTkUJCTB4MDAwMQorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMxX19FQ0NfRVJSCQkJMHgwMDAyCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzFfX0RNQV9DTURfQ09NUAkJCTB4MDAwNAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMxX19USU1FX09VVAkJCTB4MDAwOAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMxX19QUk9HUkFNX0ZBSUwJCQkweDAwMTAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMV9fRVJBU0VfRkFJTAkJCTB4MDAyMAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMxX19MT0FEX0NPTVAJCQkweDAwNDAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMV9fUFJPR1JBTV9DT01QCQkJMHgwMDgwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzFfX0VSQVNFX0NPTVAJCQkweDAxMDAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMV9fUElQRV9DUFlCQ0tfQ01EX0NPTVAJCTB4MDIwMAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMxX19MT0NLRURfQkxLCQkJMHgwNDAwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzFfX1VOU1VQX0NNRAkJCTB4MDgwMAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMxX19JTlRfQUNUCQkJMHgxMDAwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzFfX1JTVF9DT01QCQkJMHgyMDAwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzFfX1BJUEVfQ01EX0VSUgkJCTB4NDAwMAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMxX19QQUdFX1hGRVJfSU5DCQkJMHg4MDAwCisKKyNkZWZpbmUgSU5UUl9FTjEJCQkJCTB4NDcwCisjZGVmaW5lICAgICBJTlRSX0VOMV9fRUNDX1RSQU5TQUNUSU9OX0RPTkUJCTB4MDAwMQorI2RlZmluZSAgICAgSU5UUl9FTjFfX0VDQ19FUlIJCQkJMHgwMDAyCisjZGVmaW5lICAgICBJTlRSX0VOMV9fRE1BX0NNRF9DT01QCQkJMHgwMDA0CisjZGVmaW5lICAgICBJTlRSX0VOMV9fVElNRV9PVVQJCQkJMHgwMDA4CisjZGVmaW5lICAgICBJTlRSX0VOMV9fUFJPR1JBTV9GQUlMCQkJMHgwMDEwCisjZGVmaW5lICAgICBJTlRSX0VOMV9fRVJBU0VfRkFJTAkJCQkweDAwMjAKKyNkZWZpbmUgICAgIElOVFJfRU4xX19MT0FEX0NPTVAJCQkJMHgwMDQwCisjZGVmaW5lICAgICBJTlRSX0VOMV9fUFJPR1JBTV9DT01QCQkJMHgwMDgwCisjZGVmaW5lICAgICBJTlRSX0VOMV9fRVJBU0VfQ09NUAkJCQkweDAxMDAKKyNkZWZpbmUgICAgIElOVFJfRU4xX19QSVBFX0NQWUJDS19DTURfQ09NUAkJMHgwMjAwCisjZGVmaW5lICAgICBJTlRSX0VOMV9fTE9DS0VEX0JMSwkJCQkweDA0MDAKKyNkZWZpbmUgICAgIElOVFJfRU4xX19VTlNVUF9DTUQJCQkJMHgwODAwCisjZGVmaW5lICAgICBJTlRSX0VOMV9fSU5UX0FDVAkJCQkweDEwMDAKKyNkZWZpbmUgICAgIElOVFJfRU4xX19SU1RfQ09NUAkJCQkweDIwMDAKKyNkZWZpbmUgICAgIElOVFJfRU4xX19QSVBFX0NNRF9FUlIJCQkweDQwMDAKKyNkZWZpbmUgICAgIElOVFJfRU4xX19QQUdFX1hGRVJfSU5DCQkJMHg4MDAwCisKKyNkZWZpbmUgUEFHRV9DTlQxCQkJCTB4NDgwCisjZGVmaW5lICAgICBQQUdFX0NOVDFfX1ZBTFVFCQkJCTB4MDBmZgorCisjZGVmaW5lIEVSUl9QQUdFX0FERFIxCQkJCTB4NDkwCisjZGVmaW5lICAgICBFUlJfUEFHRV9BRERSMV9fVkFMVUUJCQkweGZmZmYKKworI2RlZmluZSBFUlJfQkxPQ0tfQUREUjEJCQkweDRhMAorI2RlZmluZSAgICAgRVJSX0JMT0NLX0FERFIxX19WQUxVRQkJCTB4ZmZmZgorCisjZGVmaW5lIElOVFJfU1RBVFVTMgkJCQkweDRiMAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMyX19FQ0NfVFJBTlNBQ1RJT05fRE9ORQkJMHgwMDAxCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzJfX0VDQ19FUlIJCQkweDAwMDIKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMl9fRE1BX0NNRF9DT01QCQkJMHgwMDA0CisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzJfX1RJTUVfT1VUCQkJMHgwMDA4CisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzJfX1BST0dSQU1fRkFJTAkJCTB4MDAxMAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMyX19FUkFTRV9GQUlMCQkJMHgwMDIwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzJfX0xPQURfQ09NUAkJCTB4MDA0MAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMyX19QUk9HUkFNX0NPTVAJCQkweDAwODAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMl9fRVJBU0VfQ09NUAkJCTB4MDEwMAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMyX19QSVBFX0NQWUJDS19DTURfQ09NUAkJMHgwMjAwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzJfX0xPQ0tFRF9CTEsJCQkweDA0MDAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMl9fVU5TVVBfQ01ECQkJMHgwODAwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzJfX0lOVF9BQ1QJCQkweDEwMDAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMl9fUlNUX0NPTVAJCQkweDIwMDAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMl9fUElQRV9DTURfRVJSCQkJMHg0MDAwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzJfX1BBR0VfWEZFUl9JTkMJCQkweDgwMDAKKworI2RlZmluZSBJTlRSX0VOMgkJCQkJMHg0YzAKKyNkZWZpbmUgICAgIElOVFJfRU4yX19FQ0NfVFJBTlNBQ1RJT05fRE9ORQkJMHgwMDAxCisjZGVmaW5lICAgICBJTlRSX0VOMl9fRUNDX0VSUgkJCQkweDAwMDIKKyNkZWZpbmUgICAgIElOVFJfRU4yX19ETUFfQ01EX0NPTVAJCQkweDAwMDQKKyNkZWZpbmUgICAgIElOVFJfRU4yX19USU1FX09VVAkJCQkweDAwMDgKKyNkZWZpbmUgICAgIElOVFJfRU4yX19QUk9HUkFNX0ZBSUwJCQkweDAwMTAKKyNkZWZpbmUgICAgIElOVFJfRU4yX19FUkFTRV9GQUlMCQkJCTB4MDAyMAorI2RlZmluZSAgICAgSU5UUl9FTjJfX0xPQURfQ09NUAkJCQkweDAwNDAKKyNkZWZpbmUgICAgIElOVFJfRU4yX19QUk9HUkFNX0NPTVAJCQkweDAwODAKKyNkZWZpbmUgICAgIElOVFJfRU4yX19FUkFTRV9DT01QCQkJCTB4MDEwMAorI2RlZmluZSAgICAgSU5UUl9FTjJfX1BJUEVfQ1BZQkNLX0NNRF9DT01QCQkweDAyMDAKKyNkZWZpbmUgICAgIElOVFJfRU4yX19MT0NLRURfQkxLCQkJCTB4MDQwMAorI2RlZmluZSAgICAgSU5UUl9FTjJfX1VOU1VQX0NNRAkJCQkweDA4MDAKKyNkZWZpbmUgICAgIElOVFJfRU4yX19JTlRfQUNUCQkJCTB4MTAwMAorI2RlZmluZSAgICAgSU5UUl9FTjJfX1JTVF9DT01QCQkJCTB4MjAwMAorI2RlZmluZSAgICAgSU5UUl9FTjJfX1BJUEVfQ01EX0VSUgkJCTB4NDAwMAorI2RlZmluZSAgICAgSU5UUl9FTjJfX1BBR0VfWEZFUl9JTkMJCQkweDgwMDAKKworI2RlZmluZSBQQUdFX0NOVDIJCQkJMHg0ZDAKKyNkZWZpbmUgICAgIFBBR0VfQ05UMl9fVkFMVUUJCQkJMHgwMGZmCisKKyNkZWZpbmUgRVJSX1BBR0VfQUREUjIJCQkJMHg0ZTAKKyNkZWZpbmUgICAgIEVSUl9QQUdFX0FERFIyX19WQUxVRQkJCTB4ZmZmZgorCisjZGVmaW5lIEVSUl9CTE9DS19BRERSMgkJCTB4NGYwCisjZGVmaW5lICAgICBFUlJfQkxPQ0tfQUREUjJfX1ZBTFVFCQkJMHhmZmZmCisKKyNkZWZpbmUgSU5UUl9TVEFUVVMzCQkJCTB4NTAwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzNfX0VDQ19UUkFOU0FDVElPTl9ET05FCQkweDAwMDEKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTM19fRUNDX0VSUgkJCTB4MDAwMgorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMzX19ETUFfQ01EX0NPTVAJCQkweDAwMDQKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTM19fVElNRV9PVVQJCQkweDAwMDgKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTM19fUFJPR1JBTV9GQUlMCQkJMHgwMDEwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzNfX0VSQVNFX0ZBSUwJCQkweDAwMjAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTM19fTE9BRF9DT01QCQkJMHgwMDQwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzNfX1BST0dSQU1fQ09NUAkJCTB4MDA4MAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMzX19FUkFTRV9DT01QCQkJMHgwMTAwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzNfX1BJUEVfQ1BZQkNLX0NNRF9DT01QCQkweDAyMDAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTM19fTE9DS0VEX0JMSwkJCTB4MDQwMAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMzX19VTlNVUF9DTUQJCQkweDA4MDAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTM19fSU5UX0FDVAkJCTB4MTAwMAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMzX19SU1RfQ09NUAkJCTB4MjAwMAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMzX19QSVBFX0NNRF9FUlIJCQkweDQwMDAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTM19fUEFHRV9YRkVSX0lOQwkJCTB4ODAwMAorCisjZGVmaW5lIElOVFJfRU4zCQkJCQkweDUxMAorI2RlZmluZSAgICAgSU5UUl9FTjNfX0VDQ19UUkFOU0FDVElPTl9ET05FCQkweDAwMDEKKyNkZWZpbmUgICAgIElOVFJfRU4zX19FQ0NfRVJSCQkJCTB4MDAwMgorI2RlZmluZSAgICAgSU5UUl9FTjNfX0RNQV9DTURfQ09NUAkJCTB4MDAwNAorI2RlZmluZSAgICAgSU5UUl9FTjNfX1RJTUVfT1VUCQkJCTB4MDAwOAorI2RlZmluZSAgICAgSU5UUl9FTjNfX1BST0dSQU1fRkFJTAkJCTB4MDAxMAorI2RlZmluZSAgICAgSU5UUl9FTjNfX0VSQVNFX0ZBSUwJCQkJMHgwMDIwCisjZGVmaW5lICAgICBJTlRSX0VOM19fTE9BRF9DT01QCQkJCTB4MDA0MAorI2RlZmluZSAgICAgSU5UUl9FTjNfX1BST0dSQU1fQ09NUAkJCTB4MDA4MAorI2RlZmluZSAgICAgSU5UUl9FTjNfX0VSQVNFX0NPTVAJCQkJMHgwMTAwCisjZGVmaW5lICAgICBJTlRSX0VOM19fUElQRV9DUFlCQ0tfQ01EX0NPTVAJCTB4MDIwMAorI2RlZmluZSAgICAgSU5UUl9FTjNfX0xPQ0tFRF9CTEsJCQkJMHgwNDAwCisjZGVmaW5lICAgICBJTlRSX0VOM19fVU5TVVBfQ01ECQkJCTB4MDgwMAorI2RlZmluZSAgICAgSU5UUl9FTjNfX0lOVF9BQ1QJCQkJMHgxMDAwCisjZGVmaW5lICAgICBJTlRSX0VOM19fUlNUX0NPTVAJCQkJMHgyMDAwCisjZGVmaW5lICAgICBJTlRSX0VOM19fUElQRV9DTURfRVJSCQkJMHg0MDAwCisjZGVmaW5lICAgICBJTlRSX0VOM19fUEFHRV9YRkVSX0lOQwkJCTB4ODAwMAorCisjZGVmaW5lIFBBR0VfQ05UMwkJCQkweDUyMAorI2RlZmluZSAgICAgUEFHRV9DTlQzX19WQUxVRQkJCQkweDAwZmYKKworI2RlZmluZSBFUlJfUEFHRV9BRERSMwkJCQkweDUzMAorI2RlZmluZSAgICAgRVJSX1BBR0VfQUREUjNfX1ZBTFVFCQkJMHhmZmZmCisKKyNkZWZpbmUgRVJSX0JMT0NLX0FERFIzCQkJMHg1NDAKKyNkZWZpbmUgICAgIEVSUl9CTE9DS19BRERSM19fVkFMVUUJCQkweGZmZmYKKworI2RlZmluZSBEQVRBX0lOVFIJCQkJMHg1NTAKKyNkZWZpbmUgICAgIERBVEFfSU5UUl9fV1JJVEVfU1BBQ0VfQVYJCQkweDAwMDEKKyNkZWZpbmUgICAgIERBVEFfSU5UUl9fUkVBRF9EQVRBX0FWCQkJMHgwMDAyCisKKyNkZWZpbmUgREFUQV9JTlRSX0VOCQkJCTB4NTYwCisjZGVmaW5lICAgICBEQVRBX0lOVFJfRU5fX1dSSVRFX1NQQUNFX0FWCQkweDAwMDEKKyNkZWZpbmUgICAgIERBVEFfSU5UUl9FTl9fUkVBRF9EQVRBX0FWCQkJMHgwMDAyCisKKyNkZWZpbmUgR1BSRUdfMAkJCQkJMHg1NzAKKyNkZWZpbmUgICAgIEdQUkVHXzBfX1ZBTFVFCQkJCTB4ZmZmZgorCisjZGVmaW5lIEdQUkVHXzEJCQkJCTB4NTgwCisjZGVmaW5lICAgICBHUFJFR18xX19WQUxVRQkJCQkweGZmZmYKKworI2RlZmluZSBHUFJFR18yCQkJCQkweDU5MAorI2RlZmluZSAgICAgR1BSRUdfMl9fVkFMVUUJCQkJMHhmZmZmCisKKyNkZWZpbmUgR1BSRUdfMwkJCQkJMHg1YTAKKyNkZWZpbmUgICAgIEdQUkVHXzNfX1ZBTFVFCQkJCTB4ZmZmZgorCisjZGVmaW5lIEVDQ19USFJFU0hPTEQJCQkJMHg2MDAKKyNkZWZpbmUgICAgIEVDQ19USFJFU0hPTERfX1ZBTFVFCQkJCTB4MDNmZgorCisjZGVmaW5lIEVDQ19FUlJPUl9CTE9DS19BRERSRVNTCQkweDYxMAorI2RlZmluZSAgICAgRUNDX0VSUk9SX0JMT0NLX0FERFJFU1NfX1ZBTFVFCQkweGZmZmYKKworI2RlZmluZSBFQ0NfRVJST1JfUEFHRV9BRERSRVNTCQkJMHg2MjAKKyNkZWZpbmUgICAgIEVDQ19FUlJPUl9QQUdFX0FERFJFU1NfX1ZBTFVFCQkweDBmZmYKKyNkZWZpbmUgICAgIEVDQ19FUlJPUl9QQUdFX0FERFJFU1NfX0JBTksJCTB4ZjAwMAorCisjZGVmaW5lIEVDQ19FUlJPUl9BRERSRVNTCQkJMHg2MzAKKyNkZWZpbmUgICAgIEVDQ19FUlJPUl9BRERSRVNTX19PRkZTRVQJCQkweDBmZmYKKyNkZWZpbmUgICAgIEVDQ19FUlJPUl9BRERSRVNTX19TRUNUT1JfTlIJCTB4ZjAwMAorCisjZGVmaW5lIEVSUl9DT1JSRUNUSU9OX0lORk8JCQkweDY0MAorI2RlZmluZSAgICAgRVJSX0NPUlJFQ1RJT05fSU5GT19fQllURU1BU0sJCTB4MDBmZgorI2RlZmluZSAgICAgRVJSX0NPUlJFQ1RJT05fSU5GT19fREVWSUNFX05SCQkweDBmMDAKKyNkZWZpbmUgICAgIEVSUl9DT1JSRUNUSU9OX0lORk9fX0VSUk9SX1RZUEUJCTB4NDAwMAorI2RlZmluZSAgICAgRVJSX0NPUlJFQ1RJT05fSU5GT19fTEFTVF9FUlJfSU5GTwkJMHg4MDAwCisKKyNkZWZpbmUgRE1BX0VOQUJMRQkJCQkweDcwMAorI2RlZmluZSAgICAgRE1BX0VOQUJMRV9fRkxBRwkJCQkweDAwMDEKKworI2RlZmluZSBJR05PUkVfRUNDX0RPTkUJCQkJMHg3MTAKKyNkZWZpbmUgICAgIElHTk9SRV9FQ0NfRE9ORV9fRkxBRwkJCTB4MDAwMQorCisjZGVmaW5lIERNQV9JTlRSCQkJCTB4NzIwCisjZGVmaW5lICAgICBETUFfSU5UUl9fVEFSR0VUX0VSUk9SCQkJMHgwMDAxCisjZGVmaW5lICAgICBETUFfSU5UUl9fREVTQ19DT01QX0NIQU5ORUwwCQkweDAwMDIKKyNkZWZpbmUgICAgIERNQV9JTlRSX19ERVNDX0NPTVBfQ0hBTk5FTDEJCTB4MDAwNAorI2RlZmluZSAgICAgRE1BX0lOVFJfX0RFU0NfQ09NUF9DSEFOTkVMMgkJMHgwMDA4CisjZGVmaW5lICAgICBETUFfSU5UUl9fREVTQ19DT01QX0NIQU5ORUwzCQkweDAwMTAKKyNkZWZpbmUgICAgIERNQV9JTlRSX19NRU1DT1BZX0RFU0NfQ09NUAkJMHgwMDIwCisKKyNkZWZpbmUgRE1BX0lOVFJfRU4JCQkJMHg3MzAKKyNkZWZpbmUgICAgIERNQV9JTlRSX0VOX19UQVJHRVRfRVJST1IJCQkweDAwMDEKKyNkZWZpbmUgICAgIERNQV9JTlRSX0VOX19ERVNDX0NPTVBfQ0hBTk5FTDAJCTB4MDAwMgorI2RlZmluZSAgICAgRE1BX0lOVFJfRU5fX0RFU0NfQ09NUF9DSEFOTkVMMQkJMHgwMDA0CisjZGVmaW5lICAgICBETUFfSU5UUl9FTl9fREVTQ19DT01QX0NIQU5ORUwyCQkweDAwMDgKKyNkZWZpbmUgICAgIERNQV9JTlRSX0VOX19ERVNDX0NPTVBfQ0hBTk5FTDMJCTB4MDAxMAorI2RlZmluZSAgICAgRE1BX0lOVFJfRU5fX01FTUNPUFlfREVTQ19DT01QCQkweDAwMjAKKworI2RlZmluZSBUQVJHRVRfRVJSX0FERFJfTE8JCQkweDc0MAorI2RlZmluZSAgICAgVEFSR0VUX0VSUl9BRERSX0xPX19WQUxVRQkJCTB4ZmZmZgorCisjZGVmaW5lIFRBUkdFVF9FUlJfQUREUl9ISQkJCTB4NzUwCisjZGVmaW5lICAgICBUQVJHRVRfRVJSX0FERFJfSElfX1ZBTFVFCQkJMHhmZmZmCisKKyNkZWZpbmUgQ0hOTF9BQ1RJVkUJCQkJMHg3NjAKKyNkZWZpbmUgICAgIENITkxfQUNUSVZFX19DSEFOTkVMMAkJCTB4MDAwMQorI2RlZmluZSAgICAgQ0hOTF9BQ1RJVkVfX0NIQU5ORUwxCQkJMHgwMDAyCisjZGVmaW5lICAgICBDSE5MX0FDVElWRV9fQ0hBTk5FTDIJCQkweDAwMDQKKyNkZWZpbmUgICAgIENITkxfQUNUSVZFX19DSEFOTkVMMwkJCTB4MDAwOAorCisjZGVmaW5lIEFDVElWRV9TUkNfSUQJCQkJMHg4MDAKKyNkZWZpbmUgICAgIEFDVElWRV9TUkNfSURfX1ZBTFVFCQkJCTB4MDBmZgorCisjZGVmaW5lIFBUTl9JTlRSCQkJCQkweDgxMAorI2RlZmluZSAgICAgUFROX0lOVFJfX0NPTkZJR19FUlJPUgkJCTB4MDAwMQorI2RlZmluZSAgICAgUFROX0lOVFJfX0FDQ0VTU19FUlJPUl9CQU5LMAkJMHgwMDAyCisjZGVmaW5lICAgICBQVE5fSU5UUl9fQUNDRVNTX0VSUk9SX0JBTksxCQkweDAwMDQKKyNkZWZpbmUgICAgIFBUTl9JTlRSX19BQ0NFU1NfRVJST1JfQkFOSzIJCTB4MDAwOAorI2RlZmluZSAgICAgUFROX0lOVFJfX0FDQ0VTU19FUlJPUl9CQU5LMwkJMHgwMDEwCisjZGVmaW5lICAgICBQVE5fSU5UUl9fUkVHX0FDQ0VTU19FUlJPUgkJCTB4MDAyMAorCisjZGVmaW5lIFBUTl9JTlRSX0VOCQkJCTB4ODIwCisjZGVmaW5lICAgICBQVE5fSU5UUl9FTl9fQ09ORklHX0VSUk9SCQkJMHgwMDAxCisjZGVmaW5lICAgICBQVE5fSU5UUl9FTl9fQUNDRVNTX0VSUk9SX0JBTkswCQkweDAwMDIKKyNkZWZpbmUgICAgIFBUTl9JTlRSX0VOX19BQ0NFU1NfRVJST1JfQkFOSzEJCTB4MDAwNAorI2RlZmluZSAgICAgUFROX0lOVFJfRU5fX0FDQ0VTU19FUlJPUl9CQU5LMgkJMHgwMDA4CisjZGVmaW5lICAgICBQVE5fSU5UUl9FTl9fQUNDRVNTX0VSUk9SX0JBTkszCQkweDAwMTAKKyNkZWZpbmUgICAgIFBUTl9JTlRSX0VOX19SRUdfQUNDRVNTX0VSUk9SCQkweDAwMjAKKworI2RlZmluZSBQRVJNX1NSQ19JRF8wCQkJCTB4ODMwCisjZGVmaW5lICAgICBQRVJNX1NSQ19JRF8wX19TUkNJRAkJCQkweDAwZmYKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzBfX0RJUkVDVF9BQ0NFU1NfQUNUSVZFCQkweDA4MDAKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzBfX1dSSVRFX0FDVElWRQkJCTB4MjAwMAorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfMF9fUkVBRF9BQ1RJVkUJCQkweDQwMDAKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzBfX1BBUlRJVElPTl9WQUxJRAkJMHg4MDAwCisKKyNkZWZpbmUgTUlOX0JMS19BRERSXzAJCQkJMHg4NDAKKyNkZWZpbmUgICAgIE1JTl9CTEtfQUREUl8wX19WQUxVRQkJCTB4ZmZmZgorCisjZGVmaW5lIE1BWF9CTEtfQUREUl8wCQkJCTB4ODUwCisjZGVmaW5lICAgICBNQVhfQkxLX0FERFJfMF9fVkFMVUUJCQkweGZmZmYKKworI2RlZmluZSBNSU5fTUFYX0JBTktfMAkJCQkweDg2MAorI2RlZmluZSAgICAgTUlOX01BWF9CQU5LXzBfX01JTl9WQUxVRQkJCTB4MDAwMworI2RlZmluZSAgICAgTUlOX01BWF9CQU5LXzBfX01BWF9WQUxVRQkJCTB4MDAwYworCisjZGVmaW5lIFBFUk1fU1JDX0lEXzEJCQkJMHg4NzAKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzFfX1NSQ0lECQkJCTB4MDBmZgorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfMV9fRElSRUNUX0FDQ0VTU19BQ1RJVkUJCTB4MDgwMAorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfMV9fV1JJVEVfQUNUSVZFCQkJMHgyMDAwCisjZGVmaW5lICAgICBQRVJNX1NSQ19JRF8xX19SRUFEX0FDVElWRQkJCTB4NDAwMAorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfMV9fUEFSVElUSU9OX1ZBTElECQkweDgwMDAKKworI2RlZmluZSBNSU5fQkxLX0FERFJfMQkJCQkweDg4MAorI2RlZmluZSAgICAgTUlOX0JMS19BRERSXzFfX1ZBTFVFCQkJMHhmZmZmCisKKyNkZWZpbmUgTUFYX0JMS19BRERSXzEJCQkJMHg4OTAKKyNkZWZpbmUgICAgIE1BWF9CTEtfQUREUl8xX19WQUxVRQkJCTB4ZmZmZgorCisjZGVmaW5lIE1JTl9NQVhfQkFOS18xCQkJCTB4OGEwCisjZGVmaW5lICAgICBNSU5fTUFYX0JBTktfMV9fTUlOX1ZBTFVFCQkJMHgwMDAzCisjZGVmaW5lICAgICBNSU5fTUFYX0JBTktfMV9fTUFYX1ZBTFVFCQkJMHgwMDBjCisKKyNkZWZpbmUgUEVSTV9TUkNfSURfMgkJCQkweDhiMAorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfMl9fU1JDSUQJCQkJMHgwMGZmCisjZGVmaW5lICAgICBQRVJNX1NSQ19JRF8yX19ESVJFQ1RfQUNDRVNTX0FDVElWRQkJMHgwODAwCisjZGVmaW5lICAgICBQRVJNX1NSQ19JRF8yX19XUklURV9BQ1RJVkUJCQkweDIwMDAKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzJfX1JFQURfQUNUSVZFCQkJMHg0MDAwCisjZGVmaW5lICAgICBQRVJNX1NSQ19JRF8yX19QQVJUSVRJT05fVkFMSUQJCTB4ODAwMAorCisjZGVmaW5lIE1JTl9CTEtfQUREUl8yCQkJCTB4OGMwCisjZGVmaW5lICAgICBNSU5fQkxLX0FERFJfMl9fVkFMVUUJCQkweGZmZmYKKworI2RlZmluZSBNQVhfQkxLX0FERFJfMgkJCQkweDhkMAorI2RlZmluZSAgICAgTUFYX0JMS19BRERSXzJfX1ZBTFVFCQkJMHhmZmZmCisKKyNkZWZpbmUgTUlOX01BWF9CQU5LXzIJCQkJMHg4ZTAKKyNkZWZpbmUgICAgIE1JTl9NQVhfQkFOS18yX19NSU5fVkFMVUUJCQkweDAwMDMKKyNkZWZpbmUgICAgIE1JTl9NQVhfQkFOS18yX19NQVhfVkFMVUUJCQkweDAwMGMKKworI2RlZmluZSBQRVJNX1NSQ19JRF8zCQkJCTB4OGYwCisjZGVmaW5lICAgICBQRVJNX1NSQ19JRF8zX19TUkNJRAkJCQkweDAwZmYKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzNfX0RJUkVDVF9BQ0NFU1NfQUNUSVZFCQkweDA4MDAKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzNfX1dSSVRFX0FDVElWRQkJCTB4MjAwMAorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfM19fUkVBRF9BQ1RJVkUJCQkweDQwMDAKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzNfX1BBUlRJVElPTl9WQUxJRAkJMHg4MDAwCisKKyNkZWZpbmUgTUlOX0JMS19BRERSXzMJCQkJMHg5MDAKKyNkZWZpbmUgICAgIE1JTl9CTEtfQUREUl8zX19WQUxVRQkJCTB4ZmZmZgorCisjZGVmaW5lIE1BWF9CTEtfQUREUl8zCQkJCTB4OTEwCisjZGVmaW5lICAgICBNQVhfQkxLX0FERFJfM19fVkFMVUUJCQkweGZmZmYKKworI2RlZmluZSBNSU5fTUFYX0JBTktfMwkJCQkweDkyMAorI2RlZmluZSAgICAgTUlOX01BWF9CQU5LXzNfX01JTl9WQUxVRQkJCTB4MDAwMworI2RlZmluZSAgICAgTUlOX01BWF9CQU5LXzNfX01BWF9WQUxVRQkJCTB4MDAwYworCisjZGVmaW5lIFBFUk1fU1JDX0lEXzQJCQkJMHg5MzAKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzRfX1NSQ0lECQkJCTB4MDBmZgorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfNF9fRElSRUNUX0FDQ0VTU19BQ1RJVkUJCTB4MDgwMAorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfNF9fV1JJVEVfQUNUSVZFCQkJMHgyMDAwCisjZGVmaW5lICAgICBQRVJNX1NSQ19JRF80X19SRUFEX0FDVElWRQkJCTB4NDAwMAorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfNF9fUEFSVElUSU9OX1ZBTElECQkweDgwMDAKKworI2RlZmluZSBNSU5fQkxLX0FERFJfNAkJCQkweDk0MAorI2RlZmluZSAgICAgTUlOX0JMS19BRERSXzRfX1ZBTFVFCQkJMHhmZmZmCisKKyNkZWZpbmUgTUFYX0JMS19BRERSXzQJCQkJMHg5NTAKKyNkZWZpbmUgICAgIE1BWF9CTEtfQUREUl80X19WQUxVRQkJCTB4ZmZmZgorCisjZGVmaW5lIE1JTl9NQVhfQkFOS180CQkJCTB4OTYwCisjZGVmaW5lICAgICBNSU5fTUFYX0JBTktfNF9fTUlOX1ZBTFVFCQkJMHgwMDAzCisjZGVmaW5lICAgICBNSU5fTUFYX0JBTktfNF9fTUFYX1ZBTFVFCQkJMHgwMDBjCisKKyNkZWZpbmUgUEVSTV9TUkNfSURfNQkJCQkweDk3MAorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfNV9fU1JDSUQJCQkJMHgwMGZmCisjZGVmaW5lICAgICBQRVJNX1NSQ19JRF81X19ESVJFQ1RfQUNDRVNTX0FDVElWRQkJMHgwODAwCisjZGVmaW5lICAgICBQRVJNX1NSQ19JRF81X19XUklURV9BQ1RJVkUJCQkweDIwMDAKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzVfX1JFQURfQUNUSVZFCQkJMHg0MDAwCisjZGVmaW5lICAgICBQRVJNX1NSQ19JRF81X19QQVJUSVRJT05fVkFMSUQJCTB4ODAwMAorCisjZGVmaW5lIE1JTl9CTEtfQUREUl81CQkJCTB4OTgwCisjZGVmaW5lICAgICBNSU5fQkxLX0FERFJfNV9fVkFMVUUJCQkweGZmZmYKKworI2RlZmluZSBNQVhfQkxLX0FERFJfNQkJCQkweDk5MAorI2RlZmluZSAgICAgTUFYX0JMS19BRERSXzVfX1ZBTFVFCQkJMHhmZmZmCisKKyNkZWZpbmUgTUlOX01BWF9CQU5LXzUJCQkJMHg5YTAKKyNkZWZpbmUgICAgIE1JTl9NQVhfQkFOS181X19NSU5fVkFMVUUJCQkweDAwMDMKKyNkZWZpbmUgICAgIE1JTl9NQVhfQkFOS181X19NQVhfVkFMVUUJCQkweDAwMGMKKworI2RlZmluZSBQRVJNX1NSQ19JRF82CQkJCTB4OWIwCisjZGVmaW5lICAgICBQRVJNX1NSQ19JRF82X19TUkNJRAkJCQkweDAwZmYKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzZfX0RJUkVDVF9BQ0NFU1NfQUNUSVZFCQkweDA4MDAKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzZfX1dSSVRFX0FDVElWRQkJCTB4MjAwMAorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfNl9fUkVBRF9BQ1RJVkUJCQkweDQwMDAKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzZfX1BBUlRJVElPTl9WQUxJRAkJMHg4MDAwCisKKyNkZWZpbmUgTUlOX0JMS19BRERSXzYJCQkJMHg5YzAKKyNkZWZpbmUgICAgIE1JTl9CTEtfQUREUl82X19WQUxVRQkJCTB4ZmZmZgorCisjZGVmaW5lIE1BWF9CTEtfQUREUl82CQkJCTB4OWQwCisjZGVmaW5lICAgICBNQVhfQkxLX0FERFJfNl9fVkFMVUUJCQkweGZmZmYKKworI2RlZmluZSBNSU5fTUFYX0JBTktfNgkJCQkweDllMAorI2RlZmluZSAgICAgTUlOX01BWF9CQU5LXzZfX01JTl9WQUxVRQkJCTB4MDAwMworI2RlZmluZSAgICAgTUlOX01BWF9CQU5LXzZfX01BWF9WQUxVRQkJCTB4MDAwYworCisjZGVmaW5lIFBFUk1fU1JDX0lEXzcJCQkJMHg5ZjAKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzdfX1NSQ0lECQkJCTB4MDBmZgorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfN19fRElSRUNUX0FDQ0VTU19BQ1RJVkUJCTB4MDgwMAorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfN19fV1JJVEVfQUNUSVZFCQkJMHgyMDAwCisjZGVmaW5lICAgICBQRVJNX1NSQ19JRF83X19SRUFEX0FDVElWRQkJCTB4NDAwMAorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfN19fUEFSVElUSU9OX1ZBTElECQkweDgwMDAKKworI2RlZmluZSBNSU5fQkxLX0FERFJfNwkJCQkweGEwMAorI2RlZmluZSAgICAgTUlOX0JMS19BRERSXzdfX1ZBTFVFCQkJMHhmZmZmCisKKyNkZWZpbmUgTUFYX0JMS19BRERSXzcJCQkJMHhhMTAKKyNkZWZpbmUgICAgIE1BWF9CTEtfQUREUl83X19WQUxVRQkJCTB4ZmZmZgorCisjZGVmaW5lIE1JTl9NQVhfQkFOS183CQkJCTB4YTIwCisjZGVmaW5lICAgICBNSU5fTUFYX0JBTktfN19fTUlOX1ZBTFVFCQkJMHgwMDAzCisjZGVmaW5lICAgICBNSU5fTUFYX0JBTktfN19fTUFYX1ZBTFVFCQkJMHgwMDBjCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9zcGVjdHJhc3djb25maWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL3NwZWN0cmFzd2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MjU5NDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9zcGVjdHJhc3djb25maWcuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogTkFORCBGbGFzaCBDb250cm9sbGVyIERldmljZSBEcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgSW50ZWwgQ29ycG9yYXRpb24gYW5kIGl0cyBzdXBwbGllcnMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBfU1BFQ1RSQVNXQ09ORklHXworI2RlZmluZSBfU1BFQ1RSQVNXQ09ORklHXworCisvKiBOQU5EIGRyaXZlciB2ZXJzaW9uICovCisjZGVmaW5lIEdMT0JfVkVSU0lPTiAgICAgICAgICAiZHJpdmVyIHZlcnNpb24gMjAxMDAzMTEiCisKKworLyoqKioqIENvbW1vbiBQYXJhbWV0ZXJzICoqKioqLworI2RlZmluZSBSRVRSWV9USU1FUyAgICAgICAgICAgICAgICAgICAzCisKKyNkZWZpbmUgUkVBRF9CQURCTE9DS19JTkZPICAgICAgICAgICAgMQorI2RlZmluZSBSRUFEQkFDS19WRVJJRlkgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVVE9fRk9STUFUX0ZMQVNIICAgICAgICAgICAgIDAKKworLyoqKioqIENhY2hlIFBhcmFtZXRlcnMgKioqKiovCisjZGVmaW5lIENBQ0hFX0lURU1fTlVNICAgICAgICAgICAgMTI4CisjZGVmaW5lIEJMS19OVU1fRk9SX0wyX0NBQ0hFICAgICAgICAxNgorCisvKioqKiogQmxvY2sgVGFibGUgUGFyYW1ldGVycyAqKioqKi8KKyNkZWZpbmUgQkxPQ0tfVEFCTEVfSU5ERVggICAgICAgICAgICAgMAorCisvKioqKiogV2VhciBMZXZlbGluZyBQYXJhbWV0ZXJzICoqKioqLworI2RlZmluZSBXRUFSX0xFVkVMSU5HX0dBVEUgICAgICAgICAweDEwCisjZGVmaW5lIFdFQVJfTEVWRUxJTkdfQkxPQ0tfTlVNICAgICAgMTAKKworI2RlZmluZSBERUJVR19CTkRSWSAgICAgICAgICAgICAwCisKKy8qKioqKiBQcm9kdWN0IEZlYXR1cmUgU3VwcG9ydCAqKioqKi8KKyNkZWZpbmUgRkxBU0hfRU1VICAgICAgICAgICAgICAgZGVmaW5lZChDT05GSUdfU1BFQ1RSQV9FTVUpCisjZGVmaW5lIEZMQVNIX05BTkQgICAgICAgICAgICAgIGRlZmluZWQoQ09ORklHX1NQRUNUUkFfTVJTVF9IVykKKyNkZWZpbmUgRkxBU0hfTVREICAgICAgICAgICAgICAgZGVmaW5lZChDT05GSUdfU1BFQ1RSQV9NVEQpCisjZGVmaW5lIENNRF9ETUEgICAgICAgICAgICAgICAgIGRlZmluZWQoQ09ORklHX1NQRUNUUkFfTVJTVF9IV19ETUEpCisKKyNkZWZpbmUgU1BFQ1RSQV9QQVJUSVRJT05fSUQgICAgMAorCisvKiBFbmFibGUgdGhpcyBtYWNybyBpZiB0aGUgbnVtYmVyIG9mIGZsYXNoIGJsb2NrcyBpcyBsYXJnZXIgdGhhbiAxNksuICovCisjZGVmaW5lIFNVUFBPUlRfTEFSR0VfQkxPQ0tOVU0gIDEKKworLyoqKiogQmxvY2sgVGFibGUgYW5kIFJlc2VydmVkIEJsb2NrIFBhcmFtZXRlcnMgKioqKiovCisjZGVmaW5lIFNQRUNUUkFfU1RBUlRfQkxPQ0sgICAgIDMKKy8vI2RlZmluZSBOVU1fRlJFRV9CTE9DS1NfR0FURSAgICAzMAorI2RlZmluZSBOVU1fRlJFRV9CTE9DS1NfR0FURSAgICA2MAorCisvKioqKiBIYXJkd2FyZSBQYXJhbWV0ZXJzICoqKiovCisjZGVmaW5lIEdMT0JfSFdDVExfUkVHX0JBU0UgICAgIDB4RkZBNDAwMDAKKyNkZWZpbmUgR0xPQl9IV0NUTF9SRUdfU0laRSAgICAgNDA5NgorCisjZGVmaW5lIEdMT0JfSFdDVExfTUVNX0JBU0UgICAgIDB4RkZBNDgwMDAKKyNkZWZpbmUgR0xPQl9IV0NUTF9NRU1fU0laRSAgICAgNDA5NgorCisvKiBLQlYgLSBVcGRhdGVkIHRvIExOVyBzY3JhdGNoIHJlZ2lzdGVyIGFkZHJlc3MgKi8KKyNkZWZpbmUgU0NSQVRDSF9SRUdfQUREUiAgICAweEZGMTA4MDE4CisjZGVmaW5lIFNDUkFUQ0hfUkVHX1NJWkUgICAgNjQKKworI2RlZmluZSBHTE9CX0hXQ1RMX0RFRkFVTFRfQkxLUyAgICAyMDQ4CisKKyNkZWZpbmUgU1VQUE9SVF8xNUJJVEVDQyAgICAgICAgMQorI2RlZmluZSBTVVBQT1JUXzhCSVRFQ0MgICAgICAgICAxCisKKyNkZWZpbmUgT05GSV9CTE9PTV9USU1FICAgICAgICAgMAorI2RlZmluZSBNT0RFNV9XT1JLQVJPVU5EICAgICAgICAxCisKKyNlbmRpZiAvKl9TUEVDVFJBU1dDT05GSUdfKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3RpLXN0L0tjb25maWcKaW5kZXggM2FiMjA0ZC4uNjhhZDNkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpLXN0L0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpLXN0L0tjb25maWcKQEAgLTQsNyArNCw3IEBACiAjCiBtZW51ICJUZXhhcyBJbnN0cnVtZW50cyBzaGFyZWQgdHJhbnNwb3J0IGxpbmUgZGlzY2lwbGluZSIKIGNvbmZpZyBUSV9TVAotCXRyaXN0YXRlICJzaGFyZWQgdHJhbnNwb3J0IGNvcmUgZHJpdmVyIgorCXRyaXN0YXRlICJTaGFyZWQgdHJhbnNwb3J0IGNvcmUgZHJpdmVyIgogCWRlcGVuZHMgb24gUkZLSUxMCiAJc2VsZWN0IEZXX0xPQURFUgogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL3RpLXN0L1RPRE8KaW5kZXggMmM0ZmU1OC4uZWJmZDZiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpLXN0L1RPRE8KKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpLXN0L1RPRE8KQEAgLTEsMTcgKzEsNiBAQAogVE9ETzoKIAotMS4gQSBwZXItZGV2aWNlL3R0eSBwb3J0IGNvbnRleHQgcmVxdWlyZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSBkZXZpY2VzCi1vbiBzYW1lIHBsYXRmb3JtLgotCi0yLiBSRU1PVkUgdGhlIHN5c2ZzIGVudHJ5IFBJRCBwYXNzaW5nIG1lY2hhbmlzbSwgc2luY2UgdGhlcmUgc2hvdWxkCi1iZSBhIGJldHRlciB3YXkgdG8gcmVxdWVzdCB1c2VyLXNwYWNlIHRvIGluc3RhbGwgbGluZSBkaXNjaXBsaW5lLgotCi0zLiBSZS12aWV3L1JlLXdvcmsgb24gdGhlIGxvY2tpbmcuCi0KLTQuIFJlLXN0cnVjdHVyZSB0byBtYWtlIHRoZSBsZGlzYyBkcml2ZXIgbW9yZSBnZW5lcmljIGZvciBjaGlwc2V0cyB3aGljaCBtdXgKLW11bHRpcGxlIGNvbm5lY3Rpdml0eSAoQlQsIEZNLCBHUFMpIHVwb24gMSBUVFkgcG9ydC4KLQotNS4gU3RlcCB1cCBhbmQgbWFpbnRhaW4gdGhpcyBkcml2ZXIgdG8gZW5zdXJlIHRoYXQgaXQgY29udGludWVzCisxLiBTdGVwIHVwIGFuZCBtYWludGFpbiB0aGlzIGRyaXZlciB0byBlbnN1cmUgdGhhdCBpdCBjb250aW51ZXMKIHRvIHdvcmsuICBIYXZpbmcgdGhlIGhhcmR3YXJlIGZvciB0aGlzIGlzIHByZXR0eSBtdWNoIGEKIHJlcXVpcmVtZW50LiAgSWYgdGhpcyBkb2VzIG5vdCBoYXBwZW4sIHRoZSB3aWxsIGJlIHJlbW92ZWQgaW4KIHRoZSAyLjYuMzUga2VybmVsIHJlbGVhc2UuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGktc3QvYnRfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvdGktc3QvYnRfZHJ2LmMKaW5kZXggZDg0MjBiNS4uNjFhZTk4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpLXN0L2J0X2Rydi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9idF9kcnYuYwpAQCAtODAsMzEgKzgwLDMzIEBACiAgKiBzdGF0dXMuaGNpX3N0X29wZW4oKSBmdW5jdGlvbiB3aWxsIHdhaXQgZm9yIHNpZ25hbCBmcm9tIHRoaXMKICAqIEFQSSB3aGVuIHN0X3JlZ2lzdGVyKCkgZnVuY3Rpb24gcmV0dXJucyBTVF9QRU5ESU5HLgogICovCi1zdGF0aWMgdm9pZCBoY2lfc3RfcmVnaXN0cmF0aW9uX2NvbXBsZXRpb25fY2IoY2hhciBkYXRhKQorc3RhdGljIHZvaWQgaGNpX3N0X3JlZ2lzdHJhdGlvbl9jb21wbGV0aW9uX2NiKHZvaWQgKnByaXZfZGF0YSwgY2hhciBkYXRhKQogeworCXN0cnVjdCBoY2lfc3QgKmxoc3QgPSAoc3RydWN0IGhjaV9zdCAqKXByaXZfZGF0YTsKIAlCVERSVl9BUElfU1RBUlQoKTsKIAogCS8qIGhjaV9zdF9vcGVuKCkgZnVuY3Rpb24gbmVlZHMgdmFsdWUgb2YgJ2RhdGEnIHRvIGtub3cKIAkgKiB0aGUgcmVnaXN0cmF0aW9uIHN0YXR1cyhzdWNjZXNzL2ZhaWwpLFNvIGhhdmUgYSBiYWNrCiAJICogdXAgb2YgaXQuCiAJICovCi0JaHN0LT5zdHJlZ19jYmRhdGEgPSBkYXRhOworCWxoc3QtPnN0cmVnX2NiZGF0YSA9IGRhdGE7CiAKIAkvKiBHb3QgYSBmZWVkYmFjayBmcm9tIFNUIGZvciBCVCBkcml2ZXIgcmVnaXN0cmF0aW9uCiAJICogcmVxdWVzdC5XYWNrdXAgaGNpX3N0X29wZW4oKSBmdW5jdGlvbiB0byBjb250aW51ZQogCSAqIGl0J3Mgb3BlbiBvcGVyYXRpb24uCiAJICovCi0JY29tcGxldGUoJmhzdC0+d2FpdF9mb3JfYnRkcnZfcmVnX2NvbXBsZXRpb24pOworCWNvbXBsZXRlKCZsaHN0LT53YWl0X2Zvcl9idGRydl9yZWdfY29tcGxldGlvbik7CiAKIAlCVERSVl9BUElfRVhJVCgwKTsKIH0KIAogLyogQ2FsbGVkIGJ5IFNoYXJlZCBUcmFuc3BvcnQgbGF5ZXIgd2hlbiByZWNlaXZlIGRhdGEgaXMKICAqIGF2YWlsYWJsZSAqLwotc3RhdGljIGxvbmcgaGNpX3N0X3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBsb25nIGhjaV9zdF9yZWNlaXZlKHZvaWQgKnByaXZfZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgZXJyOwogCWludCBsZW47CisJc3RydWN0IGhjaV9zdCAqbGhzdCA9IChzdHJ1Y3QgaGNpX3N0ICopcHJpdl9kYXRhOwogCiAJQlREUlZfQVBJX1NUQVJUKCk7CiAKQEAgLTExNiwxMyArMTE4LDEzIEBACiAJCUJURFJWX0FQSV9FWElUKC1FRkFVTFQpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9Ci0JaWYgKCFoc3QpIHsKKwlpZiAoIWxoc3QpIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCUJUX0RSVl9FUlIoIkludmFsaWQgaGNpX3N0IG1lbW9yeSxmcmVlaW5nIFNLQiIpOwogCQlCVERSVl9BUElfRVhJVCgtRUZBVUxUKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQotCWlmICghdGVzdF9iaXQoQlRfRFJWX1JVTk5JTkcsICZoc3QtPmZsYWdzKSkgeworCWlmICghdGVzdF9iaXQoQlRfRFJWX1JVTk5JTkcsICZsaHN0LT5mbGFncykpIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCUJUX0RSVl9FUlIoIkRldmljZSBpcyBub3QgcnVubmluZyxmcmVlaW5nIFNLQiIpOwogCQlCVERSVl9BUElfRVhJVCgtRUlOVkFMKTsKQEAgLTEzMCw3ICsxMzIsNyBAQAogCX0KIAogCWxlbiA9IHNrYi0+bGVuOwotCXNrYi0+ZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopaHN0LT5oZGV2OworCXNrYi0+ZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopbGhzdC0+aGRldjsKIAogCS8qIEZvcndhcmQgc2tiIHRvIEhDSSBDT1JFIGxheWVyICovCiAJZXJyID0gaGNpX3JlY3ZfZnJhbWUoc2tiKTsKQEAgLTE0MSw3ICsxNDMsNyBAQAogCQlCVERSVl9BUElfRVhJVChlcnIpOwogCQlyZXR1cm4gZXJyOwogCX0KLQloc3QtPmhkZXYtPnN0YXQuYnl0ZV9yeCArPSBsZW47CisJbGhzdC0+aGRldi0+c3RhdC5ieXRlX3J4ICs9IGxlbjsKIAogCUJURFJWX0FQSV9FWElUKDApOwogCXJldHVybiAwOwpAQCAtMTg5LDkgKzE5MSwxNCBAQAogCSAqIG1ha2UgaXQgYXMgTlVMTCAqLwogCWhjaV9zdF9wcm90by53cml0ZSA9IE5VTEw7CiAKKwkvKiBzZW5kIGluIHRoZSBoc3QgdG8gYmUgcmVjZWl2ZWQgYXQgcmVnaXN0cmF0aW9uIGNvbXBsZXRlIGNhbGxiYWNrCisJICogYW5kIGR1cmluZyBzdCdzIHJlY2VpdmUKKwkgKi8KKwloY2lfc3RfcHJvdG8ucHJpdl9kYXRhID0gaHN0OworCiAJLyogUmVnaXN0ZXIgd2l0aCBTVCBsYXllciAqLwogCWVyciA9IHN0X3JlZ2lzdGVyKCZoY2lfc3RfcHJvdG8pOwotCWlmIChlcnIgPT0gU1RfRVJSX1BFTkRJTkcpIHsKKwlpZiAoZXJyID09IC1FSU5QUk9HUkVTUykgewogCQkvKiBQcmVwYXJlIHdhaXQtZm9yLWNvbXBsZXRpb24gaGFuZGxlciBkYXRhIHN0cnVjdHVyZXMuCiAJCSAqIE5lZWRlZCB0byBzeW5jcm9uaXplIHRoaXMgYW5kIHN0X3JlZ2lzdHJhdGlvbl9jb21wbGV0aW9uX2NiKCkKIAkJICogZnVuY3Rpb25zLgpAQCAtMjMyLDcgKzIzOSw3IEBACiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQogCQllcnIgPSAwOwotCX0gZWxzZSBpZiAoZXJyID09IFNUX0VSUl9GQUlMVVJFKSB7CisJfSBlbHNlIGlmIChlcnIgPT0gLTEpIHsKIAkJQlRfRFJWX0VSUigic3RfcmVnaXN0ZXIgZmFpbGVkICVkIiwgZXJyKTsKIAkJQlREUlZfQVBJX0VYSVQoLUVBR0FJTik7CiAJCXJldHVybiAtRUFHQUlOOwpAQCAtMjgwLDcgKzI4Nyw3IEBACiAJLyogVW5yZWdpc3RlciBmcm9tIFNUIGxheWVyICovCiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChCVF9TVF9SRUdJU1RFUkVELCAmaHN0LT5mbGFncykpIHsKIAkJZXJyID0gc3RfdW5yZWdpc3RlcihTVF9CVCk7Ci0JCWlmIChlcnIgIT0gU1RfU1VDQ0VTUykgeworCQlpZiAoZXJyICE9IDApIHsKIAkJCUJUX0RSVl9FUlIoInN0X3VucmVnaXN0ZXIgZmFpbGVkICVkIiwgZXJyKTsKIAkJCUJURFJWX0FQSV9FWElUKC1FQlVTWSk7CiAJCQlyZXR1cm4gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpLXN0L3N0LmggYi9kcml2ZXJzL3N0YWdpbmcvdGktc3Qvc3QuaAppbmRleCBlOGZjOTdlLi45OTUyNTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGktc3Qvc3QuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGktc3Qvc3QuaApAQCAtMjQsMjQgKzI0LDI0IEBACiAjZGVmaW5lIFNUX0gKIAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotLyoKLSAqIHN0LmgKLSAqLwogCiAvKiBUT0RPOgogICogTW92ZSB0aGUgZm9sbG93aW5nIHRvIHR0eS5oIHVwb24gYWNjZXB0YW5jZQogICovCiAjZGVmaW5lIE5fVElfV0wJMjAJLyogTGRpc2MgZm9yIFRJJ3MgV0wgQlQsIEZNLCBHUFMgY29tYm8gY2hpcHMgKi8KIAotLyogc29tZSBncGlvcyBoYXZlIGFjdGl2ZSBoaWdoLCBvdGhlcnMgbGlrZSBmbSBoYXZlCi0gKiBhY3RpdmUgbG93CisvKioKKyAqIGVudW0ga2ltX2dwaW9fc3RhdGUgLSBGZXcgcHJvdG9jb2xzIHN1Y2ggYXMgRk0gaGF2ZSBBQ1RJVkUgTE9XCisgKglncGlvIHN0YXRlcyBmb3IgdGhlaXIgY2hpcC9jb3JlIGVuYWJsZSBncGlvcwogICovCiBlbnVtIGtpbV9ncGlvX3N0YXRlIHsKIAlLSU1fR1BJT19JTkFDVElWRSwKIAlLSU1fR1BJT19BQ1RJVkUsCiB9OwotLyoKLSAqIHRoZSBsaXN0IG9mIHByb3RvY29scyBvbiBjaGlwCisKKy8qKgorICogZW51bSBwcm90by10eXBlIC0gVGhlIHByb3RvY29sIG9uIFdpTGluayBjaGlwcyB3aGljaCBzaGFyZSBhCisgKgljb21tb24gcGh5c2ljYWwgaW50ZXJmYWNlIGxpa2UgVUFSVC4KICAqLwogZW51bSBwcm90b190eXBlIHsKIAlTVF9CVCwKQEAgLTUwLDQxICs1MCwzNSBAQAogCVNUX01BWCwKIH07CiAKLWVudW0gewotCVNUX0VSUl9GQUlMVVJFID0gLTEsCS8qIGNoZWNrIHN0cnVjdCAqLwotCVNUX1NVQ0NFU1MsCi0JU1RfRVJSX1BFTkRJTkcgPSAtNSwJLyogdG8gY2FsbCByZWdfY29tcGxldGVfY2IgKi8KLQlTVF9FUlJfQUxSRUFEWSwJCS8qIGFscmVhZHkgcmVnaXN0ZXJlZCAqLwotCVNUX0VSUl9JTlBST0dSRVNTLAotCVNUX0VSUl9OT1BST1RPLAkJLyogcHJvdG9jb2wgbm90IHN1cHBvcnRlZCAqLwotfTsKLQotLyogcGVyIHByb3RvY29sIHN0cnVjdHVyZQotICogZm9yIEJUL0ZNIGFuZCBHUFMKKy8qKgorICogc3RydWN0IHN0X3Byb3RvX3MgLSBQZXIgUHJvdG9jb2wgc3RydWN0dXJlIGZyb20gQlQvRk0vR1BTIHRvIFNUCisgKiBAdHlwZTogdHlwZSBvZiB0aGUgcHJvdG9jb2wgYmVpbmcgcmVnaXN0ZXJlZCBhbW9uZyB0aGUKKyAqCWF2YWlsYWJsZSBwcm90b190eXBlKEJULCBGTSwgR1BTIHRoZSBwcm90b2NvbCB3aGljaCBzaGFyZSBUVFkpLgorICogQHJlY3Y6IHRoZSByZWNlaXZlciBjYWxsYmFjayBwb2ludGluZyB0byBhIGZ1bmN0aW9uIGluIHRoZQorICoJcHJvdG9jb2wgZHJpdmVycyBjYWxsZWQgYnkgdGhlIFNUIGRyaXZlciB1cG9uIHJlY2VpdmluZworICoJcmVsZXZhbnQgZGF0YS4KKyAqIEBtYXRjaF9wYWNrZXQ6IHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLCB0byBtYWtlIFNUIG1vcmUgZ2VuZXJpYworICogQHJlZ19jb21wbGV0ZV9jYjogY2FsbGJhY2sgaGFuZGxlciBwb2ludGluZyB0byBhIGZ1bmN0aW9uIGluIHByb3RvY29sCisgKgloYW5kbGVyIGNhbGxlZCBieSBTVCB3aGVuIHRoZSBwZW5kaW5nIHJlZ2lzdHJhdGlvbnMgYXJlIGNvbXBsZXRlLgorICoJVGhlIHJlZ2lzdHJhdGlvbnMgYXJlIG1hcmtlZCBwZW5kaW5nLCBpbiBzaXR1YXRpb25zIHdoZW4gZncKKyAqCWRvd25sb2FkIGlzIGluIHByb2dyZXNzLgorICogQHdyaXRlOiBwb2ludGVyIHRvIGZ1bmN0aW9uIGluIFNUIHByb3ZpZGVkIHRvIHByb3RvY29sIGRyaXZlcnMgZnJvbSBTVCwKKyAqCXRvIGJlIG1hZGUgdXNlIHdoZW4gcHJvdG9jb2wgZHJpdmVycyBoYXZlIGRhdGEgdG8gc2VuZCB0byBUVFkuCisgKiBAcHJpdl9kYXRhOiBwcml2ZGF0ZSBkYXRhIGhvbGRlciBmb3IgdGhlIHByb3RvY29sIGRyaXZlcnMsIHNlbnQKKyAqCWZyb20gdGhlIHByb3RvY29sIGRyaXZlcnMgZHVyaW5nIHJlZ2lzdHJhdGlvbiwgYW5kIHNlbnQgYmFjayBvbgorICoJcmVnX2NvbXBsZXRlX2NiIGFuZCByZWN2LgogICovCiBzdHJ1Y3Qgc3RfcHJvdG9fcyB7CiAJZW51bSBwcm90b190eXBlIHR5cGU7Ci0vKgotICogdG8gYmUgY2FsbGVkIGJ5IFNUIHdoZW4gZGF0YSBhcnJpdmVzCi0gKi8KLQlsb25nICgqcmVjdikgKHN0cnVjdCBza19idWZmICopOwotLyoKLSAqIGZvciBmdXR1cmUgdXNlLCBsb2dpYyBub3cgdG8gYmUgaW4gU1QKLSAqLworCWxvbmcgKCpyZWN2KSAodm9pZCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKIAl1bnNpZ25lZCBjaGFyICgqbWF0Y2hfcGFja2V0KSAoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7Ci0vKgotICogc3Vic2VxdWVudCByZWdpc3RyYXRpb24gcmV0dXJuIFBFTkRJTkcsCi0gKiBzaWduYWxsZWQgY29tcGxldGUgYnkgdGhpcyBjYWxsYmFjayBmdW5jdGlvbgotICovCi0Jdm9pZCAoKnJlZ19jb21wbGV0ZV9jYikgKGNoYXIgZGF0YSk7Ci0vKgotICogd3JpdGUgZnVuY3Rpb24sIHNlbnQgaW4gYXMgTlVMTCBhbmQgdG8gYmUgcmV0dXJuZWQgdG8KLSAqIHByb3RvY29sIGRyaXZlcnMKLSAqLworCXZvaWQgKCpyZWdfY29tcGxldGVfY2IpICh2b2lkICosIGNoYXIgZGF0YSk7CiAJbG9uZyAoKndyaXRlKSAoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJdm9pZCAqcHJpdl9kYXRhOwogfTsKIAotZXh0ZXJuIGxvbmcgc3RfcmVnaXN0ZXIoc3RydWN0IHN0X3Byb3RvX3MgKm5ld19wcm90byk7Ci1leHRlcm4gbG9uZyBzdF91bnJlZ2lzdGVyKGVudW0gcHJvdG9fdHlwZSB0eXBlKTsKK2V4dGVybiBsb25nIHN0X3JlZ2lzdGVyKHN0cnVjdCBzdF9wcm90b19zICopOworZXh0ZXJuIGxvbmcgc3RfdW5yZWdpc3RlcihlbnVtIHByb3RvX3R5cGUpOwogCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc3RfZ2V0X3BsYXRfZGV2aWNlKHZvaWQpOwogI2VuZGlmIC8qIFNUX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9zdF9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGktc3Qvc3RfY29yZS5jCmluZGV4IDRlOTM2OTQuLjA2M2M5YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9zdF9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpLXN0L3N0X2NvcmUuYwpAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgInN0X2xsLmgiCiAjaW5jbHVkZSAic3QuaCIKIAotI2lmZGVmIERFQlVHCisjZGVmaW5lIFZFUkJPU0UKIC8qIHN0cmluZ3MgdG8gYmUgdXNlZCBmb3IgcmZraWxsIGVudHJpZXMgYW5kIGJ5CiAgKiBTVCBDb3JlIHRvIGJlIHVzZWQgZm9yIHN5c2ZzIGRlYnVnIGVudHJ5CiAgKi8KQEAgLTQ4LDcgKzQ4LDYgQEAKIAlQUk9UT19FTlRSWShTVF9GTSwgIkZNIiksCiAJUFJPVE9fRU5UUlkoU1RfR1BTLCAiR1BTIiksCiB9OwotI2VuZGlmCiAvKiBmdW5jdGlvbiBwb2ludGVyIHBvaW50aW5nIHRvIGVpdGhlciwKICAqIHN0X2tpbV9yZWN2IGR1cmluZyByZWdpc3RyYXRpb24gdG8gcmVjZWl2ZSBmdyBkb3dubG9hZCByZXNwb25zZXMKICAqIHN0X2ludF9yZWN2IGFmdGVyIHJlZ2lzdHJhdGlvbiB0byByZWNlaXZlIHByb3RvIHN0YWNrIHJlc3BvbnNlcwpAQCAtNjEsNyArNjAsNyBAQAogYm9vbCBpc19wcm90b2NvbF9saXN0X2VtcHR5KHZvaWQpCiB7CiAJdW5zaWduZWQgY2hhciBpID0gMDsKLQlwcl9pbmZvKCIgJXMgIiwgX19mdW5jX18pOworCXByX2RlYnVnKCIgJXMgIiwgX19mdW5jX18pOwogCWZvciAoaSA9IDA7IGkgPCBTVF9NQVg7IGkrKykgewogCQlpZiAoc3RfZ2RhdGEtPmxpc3RbaV0gIT0gTlVMTCkKIAkJCXJldHVybiBTVF9OT1RFTVBUWTsKQEAgLTcxLDYgKzcwLDcgQEAKIAlyZXR1cm4gU1RfRU1QVFk7CiB9CiAjZW5kaWYKKwogLyogY2FuIGJlIGNhbGxlZCBpbiBmcm9tCiAgKiAtLSBLSU0gKGR1cmluZyBmdyBkb3dubG9hZCkKICAqIC0tIFNUIENvcmUgKGR1cmluZyBzdF93cml0ZSkKQEAgLTgxLDIwICs4MSwxNSBAQAogaW50IHN0X2ludF93cml0ZShzdHJ1Y3Qgc3RfZGF0YV9zICpzdF9nZGF0YSwKIAljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgY291bnQpCiB7Ci0jaWZkZWYgVkVSQk9TRQkJCS8qIGZvciBkZWJ1ZyAqLwotCWludCBpOwotI2VuZGlmCiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlpZiAodW5saWtlbHkoc3RfZ2RhdGEgPT0gTlVMTCB8fCBzdF9nZGF0YS0+dHR5ID09IE5VTEwpKSB7CiAJCXByX2VycigidHR5IHVuYXZhaWxhYmxlIHRvIHBlcmZvcm0gd3JpdGUiKTsKLQkJcmV0dXJuIFNUX0VSUl9GQUlMVVJFOworCQlyZXR1cm4gLTE7CiAJfQogCXR0eSA9IHN0X2dkYXRhLT50dHk7CiAjaWZkZWYgVkVSQk9TRQotCXByaW50ayhLRVJOX0VSUiAic3RhcnQgZGF0YS4uXG4iKTsKLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykJLyogbm8gbmV3bGluZXMgZm9yIGVhY2ggZGF0dW0gKi8KLQkJcHJpbnRrKCIgJXgiLCBkYXRhW2ldKTsKLQlwcmludGsoS0VSTl9FUlIgIlxuIC4uZW5kIGRhdGFcbiIpOworCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICI8b3V0PCIsIERVTVBfUFJFRklYX05PTkUsCisJCTE2LCAxLCBkYXRhLCBjb3VudCwgMCk7CiAjZW5kaWYKIAlyZXR1cm4gdHR5LT5vcHMtPndyaXRlKHR0eSwgZGF0YSwgY291bnQpOwogCkBAIC0xMjIsOCArMTE3LDEwIEBACiAJICogICBwcm90b2NvbCBzdGFjayBkcml2ZXIKIAkgKi8KIAlpZiAobGlrZWx5KHN0X2dkYXRhLT5saXN0W3Byb3RvaWRdLT5yZWN2ICE9IE5VTEwpKSB7Ci0JCWlmICh1bmxpa2VseShzdF9nZGF0YS0+bGlzdFtwcm90b2lkXS0+cmVjdihzdF9nZGF0YS0+cnhfc2tiKQotCQkJICAgICAhPSBTVF9TVUNDRVNTKSkgeworCQlpZiAodW5saWtlbHkKKwkJCShzdF9nZGF0YS0+bGlzdFtwcm90b2lkXS0+cmVjdgorCQkJKHN0X2dkYXRhLT5saXN0W3Byb3RvaWRdLT5wcml2X2RhdGEsIHN0X2dkYXRhLT5yeF9za2IpCisJCQkgICAgICE9IDApKSB7CiAJCQlwcl9lcnIoIiBwcm90byBzdGFjayAlZCdzIC0+cmVjdiBmYWlsZWQiLCBwcm90b2lkKTsKIAkJCWtmcmVlX3NrYihzdF9nZGF0YS0+cnhfc2tiKTsKIAkJCXJldHVybjsKQEAgLTEzMiwxMSArMTI5LDExIEBACiAJCXByX2VycigiIHByb3RvIHN0YWNrICVkJ3MgLT5yZWN2IG51bGwiLCBwcm90b2lkKTsKIAkJa2ZyZWVfc2tiKHN0X2dkYXRhLT5yeF9za2IpOwogCX0KLQlwcl9pbmZvKCIgZG9uZSAlcyIsIF9fZnVuY19fKTsKIAlyZXR1cm47CiB9CiAKLS8qCisvKioKKyAqIHN0X3JlZ19jb21wbGV0ZSAtCiAgKiB0byBjYWxsIHJlZ2lzdHJhdGlvbiBjb21wbGV0ZSBjYWxsYmFja3MKICAqIG9mIGFsbCBwcm90b2NvbCBzdGFjayBkcml2ZXJzCiAgKi8KQEAgLTE0Nyw3ICsxNDQsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBTVF9NQVg7IGkrKykgewogCQlpZiAobGlrZWx5KHN0X2dkYXRhICE9IE5VTEwgJiYgc3RfZ2RhdGEtPmxpc3RbaV0gIT0gTlVMTCAmJgogCQkJICAgc3RfZ2RhdGEtPmxpc3RbaV0tPnJlZ19jb21wbGV0ZV9jYiAhPSBOVUxMKSkKLQkJCXN0X2dkYXRhLT5saXN0W2ldLT5yZWdfY29tcGxldGVfY2IoZXJyKTsKKwkJCXN0X2dkYXRhLT5saXN0W2ldLT5yZWdfY29tcGxldGVfY2IKKwkJCQkoc3RfZ2RhdGEtPmxpc3RbaV0tPnByaXZfZGF0YSwgZXJyKTsKIAl9CiB9CiAKQEAgLTE1Niw3ICsxNTQsNyBAQAogewogCXJlZ2lzdGVyIGludCByb29tID0gc2tiX3RhaWxyb29tKHN0X2dkYXRhLT5yeF9za2IpOwogCi0JcHJfaW5mbygibGVuICVkIHJvb20gJWQiLCBsZW4sIHJvb20pOworCXByX2RlYnVnKCJsZW4gJWQgcm9vbSAlZCIsIGxlbiwgcm9vbSk7CiAKIAlpZiAoIWxlbikgewogCQkvKiBSZWNlaXZlZCBwYWNrZXQgaGFzIG9ubHkgcGFja2V0IGhlYWRlciBhbmQKQEAgLTE5MCw4ICsxODgsOSBAQAogCXJldHVybiAwOwogfQogCi0vKiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgYWN0aW9uIHdoZW4gd2FrZS11cCBhY2sKLSAqIHJlY2VpdmVkCisvKioKKyAqIHN0X3dha2V1cF9hY2sgLSBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgYWN0aW9uIHdoZW4gd2FrZS11cCBhY2sKKyAqCXJlY2VpdmVkCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBzdF93YWtldXBfYWNrKHN0cnVjdCBzdF9kYXRhX3MgKnN0X2dkYXRhLAogCXVuc2lnbmVkIGNoYXIgY21kKQpAQCAtMjE0LDkgKzIxMywxMyBAQAogCXN0X3R4X3dha2V1cChzdF9nZGF0YSk7CiB9CiAKLS8qIERlY29kZXMgcmVjZWl2ZWQgUkFXIGRhdGEgYW5kIGZvcndhcmRzIHRvIGNvcnJlc3BvbmRpbmcKLSAqIGNsaWVudCBkcml2ZXJzIChCbHVldG9vdGgsRk0sR1BTLi5ldGMpLgotICoKKy8qKgorICogc3RfaW50X3JlY3YgLSBTVCdzIGludGVybmFsIHJlY2VpdmUgZnVuY3Rpb24uCisgKglEZWNvZGVzIHJlY2VpdmVkIFJBVyBkYXRhIGFuZCBmb3J3YXJkcyB0byBjb3JyZXNwb25kaW5nCisgKgljbGllbnQgZHJpdmVycyAoQmx1ZXRvb3RoLEZNLEdQUy4uZXRjKS4KKyAqCVRoaXMgY2FuIHJlY2VpdmUgdmFyaW91cyB0eXBlcyBvZiBwYWNrZXRzLAorICoJSENJLUV2ZW50cywgQUNMLCBTQ08sIDQgdHlwZXMgb2YgSENJLUxMIFBNIHBhY2tldHMKKyAqCUNILTggcGFja2V0cyBmcm9tIEZNLCBDSC05IHBhY2tldHMgZnJvbSBHUFMgY29yZXMuCiAgKi8KIHZvaWQgc3RfaW50X3JlY3Yodm9pZCAqZGlzY19kYXRhLAogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGxvbmcgY291bnQpCkBAIC0yNTksNyArMjYyLDcgQEAKIAogCQkJCS8qIFdhaXRpbmcgZm9yIGNvbXBsZXRlIHBhY2tldCA/ICovCiAJCQljYXNlIFNUX0JUX1c0X0RBVEE6Ci0JCQkJcHJfaW5mbygiQ29tcGxldGUgcGt0IHJlY2VpdmVkIik7CisJCQkJcHJfZGVidWcoIkNvbXBsZXRlIHBrdCByZWNlaXZlZCIpOwogCiAJCQkJLyogQXNrIFNUIENPUkUgdG8gZm9yd2FyZAogCQkJCSAqIHRoZSBwYWNrZXQgdG8gcHJvdG9jb2wgZHJpdmVyICovCkBAIC0yNzUsNyArMjc4LDcgQEAKIAkJCQllaCA9IChzdHJ1Y3QgaGNpX2V2ZW50X2hkciAqKXN0X2dkYXRhLT5yeF9za2ItPgogCQkJCSAgICBkYXRhOwogCi0JCQkJcHJfaW5mbygiRXZlbnQgaGVhZGVyOiBldnQgMHglMi4yeCIKKwkJCQlwcl9kZWJ1ZygiRXZlbnQgaGVhZGVyOiBldnQgMHglMi4yeCIKIAkJCQkJICAgInBsZW4gJWQiLCBlaC0+ZXZ0LCBlaC0+cGxlbik7CiAKIAkJCQlzdF9jaGVja19kYXRhX2xlbihzdF9nZGF0YSwgcHJvdG9pZCwgZWgtPnBsZW4pOwpAQCAtNDM5LDQ1ICs0NDIsNDMgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQotCXByX2luZm8oImRvbmUgJXMiLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoImRvbmUgJXMiLCBfX2Z1bmNfXyk7CiAJcmV0dXJuOwogfQogCi0vKiBpbnRlcm5hbCBkZS1RIGZ1bmN0aW9uCi0gKiAtLSByZXR1cm4gcHJldmlvdXMgaW4tY29tcGxldGVseSB3cml0dGVuIHNrYgotICogIG9yIHJldHVybiB0aGUgc2tiIGluIHRoZSB0eFEKKy8qKgorICogc3RfaW50X2RlcXVldWUgLSBpbnRlcm5hbCBkZS1RIGZ1bmN0aW9uLgorICoJSWYgdGhlIHByZXZpb3VzIGRhdGEgc2V0IHdhcyBub3Qgd3JpdHRlbgorICoJY29tcGxldGVseSwgcmV0dXJuIHRoYXQgc2tiIHdoaWNoIGhhcyB0aGUgcGVuZGluZyBkYXRhLgorICoJSW4gbm9ybWFsIGNhc2VzLCByZXR1cm4gdG9wIG9mIHR4cS4KICAqLwogc3RydWN0IHNrX2J1ZmYgKnN0X2ludF9kZXF1ZXVlKHN0cnVjdCBzdF9kYXRhX3MgKnN0X2dkYXRhKQogewogCXN0cnVjdCBza19idWZmICpyZXR1cm5pbmdfc2tiOwogCi0JcHJfaW5mbygiJXMiLCBfX2Z1bmNfXyk7Ci0JLyogaWYgdGhlIHByZXZpb3VzIHNrYiB3YXNuJ3Qgd3JpdHRlbiBjb21wbGV0ZWx5Ci0JICovCisJcHJfZGVidWcoIiVzIiwgX19mdW5jX18pOwogCWlmIChzdF9nZGF0YS0+dHhfc2tiICE9IE5VTEwpIHsKIAkJcmV0dXJuaW5nX3NrYiA9IHN0X2dkYXRhLT50eF9za2I7CiAJCXN0X2dkYXRhLT50eF9za2IgPSBOVUxMOwogCQlyZXR1cm4gcmV0dXJuaW5nX3NrYjsKIAl9Ci0KLQkvKiBkZS1RIGZyb20gdGhlIHR4USBhbHdheXMgaWYgcHJldmlvdXMgd3JpdGUgaXMgY29tcGxldGUgKi8KIAlyZXR1cm4gc2tiX2RlcXVldWUoJnN0X2dkYXRhLT50eHEpOwogfQogCi0vKiBpbnRlcm5hbCBRLWluZyBmdW5jdGlvbgotICogd2lsbCBlaXRoZXIgUSB0aGUgc2tiIHRvIHR4cSBvciB0aGUgdHhfd2FpdHEKLSAqIGRlcGVuZGluZyBvbiB0aGUgU1QgTEwgc3RhdGUKLSAqCi0gKiBsb2NrIHRoZSB3aG9sZSBmdW5jIC0gc2luY2UgbGxfZ2V0c3RhdGUgYW5kIFEtaW5nIHNob3VsZCBoYXBwZW4KLSAqIGluIG9uZS1zaG90CisvKioKKyAqIHN0X2ludF9lbnF1ZXVlIC0gaW50ZXJuYWwgUS1pbmcgZnVuY3Rpb24uCisgKglXaWxsIGVpdGhlciBRIHRoZSBza2IgdG8gdHhxIG9yIHRoZSB0eF93YWl0cQorICoJZGVwZW5kaW5nIG9uIHRoZSBTVCBMTCBzdGF0ZS4KKyAqCUlmIHRoZSBjaGlwIGlzIGFzbGVlcCwgdGhlbiBRIGl0IG9udG8gd2FpdHEgYW5kCisgKgl3YWtldXAgdGhlIGNoaXAuCisgKgl0eHEgYW5kIHdhaXRxIG5lZWRzIHByb3RlY3Rpb24gc2luY2UgdGhlIG90aGVyIGNvbnRleHRzCisgKgltYXkgYmUgc2VuZGluZyBkYXRhLCB3YWtpbmcgdXAgY2hpcC4KICAqLwogdm9pZCBzdF9pbnRfZW5xdWV1ZShzdHJ1Y3Qgc3RfZGF0YV9zICpzdF9nZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAotCXByX2luZm8oIiVzIiwgX19mdW5jX18pOwotCS8qIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGludm9rZWQgaW4gbW9yZSB0aGVuIG9uZSBjb250ZXh0LgotCSAqIHNvIGhhdmUgYSBsb2NrICovCisJcHJfZGVidWcoIiVzIiwgX19mdW5jX18pOwogCXNwaW5fbG9ja19pcnFzYXZlKCZzdF9nZGF0YS0+bG9jaywgZmxhZ3MpOwogCiAJc3dpdGNoIChzdF9sbF9nZXRzdGF0ZShzdF9nZGF0YSkpIHsKQEAgLTQ4OCwxNiArNDg5LDEyIEBACiAJY2FzZSBTVF9MTF9BU0xFRVBfVE9fQVdBS0U6CiAJCXNrYl9xdWV1ZV90YWlsKCZzdF9nZGF0YS0+dHhfd2FpdHEsIHNrYik7CiAJCWJyZWFrOwotCWNhc2UgU1RfTExfQVdBS0VfVE9fQVNMRUVQOgkvKiBob3N0IGNhbm5vdCBiZSBpbiB0aGlzIHN0YXRlICovCisJY2FzZSBTVF9MTF9BV0FLRV9UT19BU0xFRVA6CiAJCXByX2VycigiU1QgTEwgaXMgaWxsZWdhbCBzdGF0ZSglbGQpLCIKIAkJCSAgICJwdXJnaW5nIHJlY2VpdmVkIHNrYi4iLCBzdF9sbF9nZXRzdGF0ZShzdF9nZGF0YSkpOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJYnJlYWs7Ci0KIAljYXNlIFNUX0xMX0FTTEVFUDoKLQkJLyogY2FsbCBhIGZ1bmN0aW9uIG9mIFNUIExMIHRvIHB1dCBkYXRhCi0JCSAqIGluIHR4X3dhaXRRIGFuZCB3YWtlX2luZCBpbiB0eFEKLQkJICovCiAJCXNrYl9xdWV1ZV90YWlsKCZzdF9nZGF0YS0+dHhfd2FpdHEsIHNrYik7CiAJCXN0X2xsX3dha2V1cChzdF9nZGF0YSk7CiAJCWJyZWFrOwpAQCAtNTA3LDggKzUwNCw5IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlicmVhazsKIAl9CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdF9nZGF0YS0+bG9jaywgZmxhZ3MpOwotCXByX2luZm8oImRvbmUgJXMiLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoImRvbmUgJXMiLCBfX2Z1bmNfXyk7CiAJcmV0dXJuOwogfQogCkBAIC01MjIsNyArNTIwLDcgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CS8qIGZvciBpcnEgc2F2ZSBmbGFncyAqLwotCXByX2luZm8oIiVzIiwgX19mdW5jX18pOworCXByX2RlYnVnKCIlcyIsIF9fZnVuY19fKTsKIAkvKiBjaGVjayBmb3Igc2VuZGluZyAmIHNldCBmbGFnIHNlbmRpbmcgaGVyZSAqLwogCWlmICh0ZXN0X2FuZF9zZXRfYml0KFNUX1RYX1NFTkRJTkcsICZzdF9kYXRhLT50eF9zdGF0ZSkpIHsKIAkJcHJfaW5mbygiU1QgYWxyZWFkeSBzZW5kaW5nIik7CkBAIC01NjMsMzMgKzU2MSwxMyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogZnVuY3Rpb25zIGNhbGxlZCBmcm9tIFNUIEtJTQogKi8KLXZvaWQga2ltX3N0X2xpc3RfcHJvdG9jb2xzKHN0cnVjdCBzdF9kYXRhX3MgKnN0X2dkYXRhLCBjaGFyICpidWYpCit2b2lkIGtpbV9zdF9saXN0X3Byb3RvY29scyhzdHJ1Y3Qgc3RfZGF0YV9zICpzdF9nZGF0YSwgdm9pZCAqYnVmKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwotI2lmZGVmIERFQlVHCi0JdW5zaWduZWQgY2hhciBpID0gU1RfTUFYOwotI2VuZGlmCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnN0X2dkYXRhLT5sb2NrLCBmbGFncyk7Ci0jaWZkZWYgREVCVUcJCQkvKiBtb3JlIGRldGFpbGVkIGxvZyAqLwotCWZvciAoaSA9IDA7IGkgPCBTVF9NQVg7IGkrKykgewotCQlpZiAoaSA9PSAwKSB7Ci0JCQlzcHJpbnRmKGJ1ZiwgIiVzIGlzICVzIiwgcHJvdG9jb2xfc3RybmdzW2ldLAotCQkJCXN0X2dkYXRhLT5saXN0W2ldICE9Ci0JCQkJTlVMTCA/ICJSZWdpc3RlcmVkIiA6ICJVbnJlZ2lzdGVyZWQiKTsKLQkJfSBlbHNlIHsKLQkJCXNwcmludGYoYnVmLCAiJXNcbiVzIGlzICVzIiwgYnVmLCBwcm90b2NvbF9zdHJuZ3NbaV0sCi0JCQkJc3RfZ2RhdGEtPmxpc3RbaV0gIT0KLQkJCQlOVUxMID8gIlJlZ2lzdGVyZWQiIDogIlVucmVnaXN0ZXJlZCIpOwotCQl9Ci0JfQotCXNwcmludGYoYnVmLCAiJXNcbiIsIGJ1Zik7Ci0jZWxzZSAvKiBsaW1pdGVkIGluZm8gKi8KLQlzcHJpbnRmKGJ1ZiwgIkJUPSVjXG5GTT0lY1xuR1BTPSVjXG4iLAotCQlzdF9nZGF0YS0+bGlzdFtTVF9CVF0gIT0gTlVMTCA/ICdSJyA6ICdVJywKLQkJc3RfZ2RhdGEtPmxpc3RbU1RfRk1dICE9IE5VTEwgPyAnUicgOiAnVScsCi0JCXN0X2dkYXRhLT5saXN0W1NUX0dQU10gIT0gTlVMTCA/ICdSJyA6ICdVJyk7Ci0jZW5kaWYKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdF9nZGF0YS0+bG9jaywgZmxhZ3MpOworCXNlcV9wcmludGYoYnVmLCAiWyVkXVxuQlQ9JWNcbkZNPSVjXG5HUFM9JWNcbiIsCisJCQlzdF9nZGF0YS0+cHJvdG9zX3JlZ2lzdGVyZWQsCisJCQlzdF9nZGF0YS0+bGlzdFtTVF9CVF0gIT0gTlVMTCA/ICdSJyA6ICdVJywKKwkJCXN0X2dkYXRhLT5saXN0W1NUX0ZNXSAhPSBOVUxMID8gJ1InIDogJ1UnLAorCQkJc3RfZ2RhdGEtPmxpc3RbU1RfR1BTXSAhPSBOVUxMID8gJ1InIDogJ1UnKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNjAwLDcgKzU3OCw3IEBACiBsb25nIHN0X3JlZ2lzdGVyKHN0cnVjdCBzdF9wcm90b19zICpuZXdfcHJvdG8pCiB7CiAJc3RydWN0IHN0X2RhdGFfcwkqc3RfZ2RhdGE7Ci0JbG9uZyBlcnIgPSBTVF9TVUNDRVNTOworCWxvbmcgZXJyID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAogCXN0X2tpbV9yZWYoJnN0X2dkYXRhKTsKQEAgLTYwOCwxNyArNTg2LDE3IEBACiAJaWYgKHN0X2dkYXRhID09IE5VTEwgfHwgbmV3X3Byb3RvID09IE5VTEwgfHwgbmV3X3Byb3RvLT5yZWN2ID09IE5VTEwKIAkgICAgfHwgbmV3X3Byb3RvLT5yZWdfY29tcGxldGVfY2IgPT0gTlVMTCkgewogCQlwcl9lcnIoImdkYXRhL25ld19wcm90by9yZWN2IG9yIHJlZ19jb21wbGV0ZV9jYiBub3QgcmVhZHkiKTsKLQkJcmV0dXJuIFNUX0VSUl9GQUlMVVJFOworCQlyZXR1cm4gLTE7CiAJfQogCiAJaWYgKG5ld19wcm90by0+dHlwZSA8IFNUX0JUIHx8IG5ld19wcm90by0+dHlwZSA+PSBTVF9NQVgpIHsKIAkJcHJfZXJyKCJwcm90b2NvbCAlZCBub3Qgc3VwcG9ydGVkIiwgbmV3X3Byb3RvLT50eXBlKTsKLQkJcmV0dXJuIFNUX0VSUl9OT1BST1RPOworCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKIAl9CiAKIAlpZiAoc3RfZ2RhdGEtPmxpc3RbbmV3X3Byb3RvLT50eXBlXSAhPSBOVUxMKSB7CiAJCXByX2VycigicHJvdG9jb2wgJWQgYWxyZWFkeSByZWdpc3RlcmVkIiwgbmV3X3Byb3RvLT50eXBlKTsKLQkJcmV0dXJuIFNUX0VSUl9BTFJFQURZOworCQlyZXR1cm4gLUVBTFJFQURZOwogCX0KIAogCS8qIGNhbiBiZSBmcm9tIHByb2Nlc3MgY29udGV4dCBvbmx5ICovCkBAIC02MzAsMTEgKzYwOCwxMiBAQAogCQlzdF9raW1fY2hpcF90b2dnbGUobmV3X3Byb3RvLT50eXBlLCBLSU1fR1BJT19BQ1RJVkUpOwogCiAJCXN0X2dkYXRhLT5saXN0W25ld19wcm90by0+dHlwZV0gPSBuZXdfcHJvdG87CisJCXN0X2dkYXRhLT5wcm90b3NfcmVnaXN0ZXJlZCsrOwogCQluZXdfcHJvdG8tPndyaXRlID0gc3Rfd3JpdGU7CiAKIAkJc2V0X2JpdChTVF9SRUdfUEVORElORywgJnN0X2dkYXRhLT5zdF9zdGF0ZSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0X2dkYXRhLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybiBTVF9FUlJfUEVORElORzsKKwkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKIAl9IGVsc2UgaWYgKHN0X2dkYXRhLT5wcm90b3NfcmVnaXN0ZXJlZCA9PSBTVF9FTVBUWSkgewogCQlwcl9pbmZvKCIgcHJvdG9jb2wgbGlzdCBlbXB0eSA6JWQgIiwgbmV3X3Byb3RvLT50eXBlKTsKIAkJc2V0X2JpdChTVF9SRUdfSU5fUFJPR1JFU1MsICZzdF9nZGF0YS0+c3Rfc3RhdGUpOwpAQCAtNjQ4LDE2ICs2MjcsMTYgQEAKIAkJLyogdGhpcyBtYXkgdGFrZSBhIHdoaWxlIHRvIGNvbXBsZXRlCiAJCSAqIHNpbmNlIGl0IGludm9sdmVzIEJUIGZ3IGRvd25sb2FkCiAJCSAqLwotCQllcnIgPSBzdF9raW1fc3RhcnQoKTsKLQkJaWYgKGVyciAhPSBTVF9TVUNDRVNTKSB7CisJCWVyciA9IHN0X2tpbV9zdGFydChzdF9nZGF0YS0+a2ltX2RhdGEpOworCQlpZiAoZXJyICE9IDApIHsKIAkJCWNsZWFyX2JpdChTVF9SRUdfSU5fUFJPR1JFU1MsICZzdF9nZGF0YS0+c3Rfc3RhdGUpOwogCQkJaWYgKChzdF9nZGF0YS0+cHJvdG9zX3JlZ2lzdGVyZWQgIT0gU1RfRU1QVFkpICYmCiAJCQkgICAgKHRlc3RfYml0KFNUX1JFR19QRU5ESU5HLCAmc3RfZ2RhdGEtPnN0X3N0YXRlKSkpIHsKIAkJCQlwcl9lcnIoIiBLSU0gZmFpbHVyZSBjb21wbGV0ZSBjYWxsYmFjayAiKTsKLQkJCQlzdF9yZWdfY29tcGxldGUoc3RfZ2RhdGEsIFNUX0VSUl9GQUlMVVJFKTsKKwkJCQlzdF9yZWdfY29tcGxldGUoc3RfZ2RhdGEsIC0xKTsKIAkJCX0KIAotCQkJcmV0dXJuIFNUX0VSUl9GQUlMVVJFOworCQkJcmV0dXJuIC0xOwogCQl9CiAKIAkJLyogdGhlIHByb3RvY29sIG1pZ2h0IHJlcXVpcmUgb3RoZXIgZ3Bpb3MgdG8gYmUgdG9nZ2xlZApAQCAtNjcyLDkgKzY1MSw4IEBACiAJCSAqLwogCQlpZiAoKHN0X2dkYXRhLT5wcm90b3NfcmVnaXN0ZXJlZCAhPSBTVF9FTVBUWSkgJiYKIAkJICAgICh0ZXN0X2JpdChTVF9SRUdfUEVORElORywgJnN0X2dkYXRhLT5zdF9zdGF0ZSkpKSB7Ci0JCQlwcl9pbmZvKCIgY2FsbCByZWcgY29tcGxldGUgY2FsbGJhY2sgIik7Ci0JCQlzdF9nZGF0YS0+cHJvdG9zX3JlZ2lzdGVyZWQrKzsKLQkJCXN0X3JlZ19jb21wbGV0ZShzdF9nZGF0YSwgU1RfU1VDQ0VTUyk7CisJCQlwcl9kZWJ1ZygiIGNhbGwgcmVnIGNvbXBsZXRlIGNhbGxiYWNrICIpOworCQkJc3RfcmVnX2NvbXBsZXRlKHN0X2dkYXRhLCAwKTsKIAkJfQogCQljbGVhcl9iaXQoU1RfUkVHX1BFTkRJTkcsICZzdF9nZGF0YS0+c3Rfc3RhdGUpOwogCkBAIC02ODQsMTEgKzY2MiwxMiBAQAogCQlpZiAoc3RfZ2RhdGEtPmxpc3RbbmV3X3Byb3RvLT50eXBlXSAhPSBOVUxMKSB7CiAJCQlwcl9lcnIoIiBwcm90byAlZCBhbHJlYWR5IHJlZ2lzdGVyZWQgIiwKIAkJCQkgICBuZXdfcHJvdG8tPnR5cGUpOwotCQkJcmV0dXJuIFNUX0VSUl9BTFJFQURZOworCQkJcmV0dXJuIC1FQUxSRUFEWTsKIAkJfQogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZzdF9nZGF0YS0+bG9jaywgZmxhZ3MpOwogCQlzdF9nZGF0YS0+bGlzdFtuZXdfcHJvdG8tPnR5cGVdID0gbmV3X3Byb3RvOworCQlzdF9nZGF0YS0+cHJvdG9zX3JlZ2lzdGVyZWQrKzsKIAkJbmV3X3Byb3RvLT53cml0ZSA9IHN0X3dyaXRlOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdF9nZGF0YS0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gZXJyOwpAQCAtNzA3LDE4ICs2ODYsMTkgQEAKIAkJZGVmYXVsdDoKIAkJCXByX2VycigiJWQgcHJvdG9jb2wgbm90IHN1cHBvcnRlZCIsCiAJCQkJICAgbmV3X3Byb3RvLT50eXBlKTsKLQkJCWVyciA9IFNUX0VSUl9OT1BST1RPOworCQkJZXJyID0gLUVQUk9UT05PU1VQUE9SVDsKIAkJCS8qIHNvbWV0aGluZyB3cm9uZyAqLwogCQkJYnJlYWs7CiAJCX0KIAkJc3RfZ2RhdGEtPmxpc3RbbmV3X3Byb3RvLT50eXBlXSA9IG5ld19wcm90bzsKKwkJc3RfZ2RhdGEtPnByb3Rvc19yZWdpc3RlcmVkKys7CiAJCW5ld19wcm90by0+d3JpdGUgPSBzdF93cml0ZTsKIAogCQkvKiBsb2NrIGFscmVhZHkgaGVsZCBiZWZvcmUgZW50ZXJpbmcgZWxzZSAqLwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdF9nZGF0YS0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gZXJyOwogCX0KLQlwcl9pbmZvKCJkb25lICVzKCVkKSAiLCBfX2Z1bmNfXywgbmV3X3Byb3RvLT50eXBlKTsKKwlwcl9kZWJ1ZygiZG9uZSAlcyglZCkgIiwgX19mdW5jX18sIG5ld19wcm90by0+dHlwZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzdF9yZWdpc3Rlcik7CiAKQEAgLTcyNywxNiArNzA3LDE2IEBACiAgKi8KIGxvbmcgc3RfdW5yZWdpc3RlcihlbnVtIHByb3RvX3R5cGUgdHlwZSkKIHsKLQlsb25nIGVyciA9IFNUX1NVQ0NFU1M7CisJbG9uZyBlcnIgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCXN0cnVjdCBzdF9kYXRhX3MJKnN0X2dkYXRhOwogCi0JcHJfaW5mbygiJXM6ICVkICIsIF9fZnVuY19fLCB0eXBlKTsKKwlwcl9kZWJ1ZygiJXM6ICVkICIsIF9fZnVuY19fLCB0eXBlKTsKIAogCXN0X2tpbV9yZWYoJnN0X2dkYXRhKTsKIAlpZiAodHlwZSA8IFNUX0JUIHx8IHR5cGUgPj0gU1RfTUFYKSB7CiAJCXByX2VycigiIHByb3RvY29sICVkIG5vdCBzdXBwb3J0ZWQiLCB0eXBlKTsKLQkJcmV0dXJuIFNUX0VSUl9OT1BST1RPOworCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3RfZ2RhdGEtPmxvY2ssIGZsYWdzKTsKQEAgLTc0NCw3ICs3MjQsNyBAQAogCWlmIChzdF9nZGF0YS0+bGlzdFt0eXBlXSA9PSBOVUxMKSB7CiAJCXByX2VycigiIHByb3RvY29sICVkIG5vdCByZWdpc3RlcmVkIiwgdHlwZSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0X2dkYXRhLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybiBTVF9FUlJfTk9QUk9UTzsKKwkJcmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7CiAJfQogCiAJc3RfZ2RhdGEtPnByb3Rvc19yZWdpc3RlcmVkLS07CkBAIC03NjgsNyArNzQ4LDcgQEAKIAkJfQogCiAJCS8qIGFsbCBwcm90b2NvbHMgbm93IHVucmVnaXN0ZXJlZCAqLwotCQlzdF9raW1fc3RvcCgpOworCQlzdF9raW1fc3RvcChzdF9nZGF0YS0+a2ltX2RhdGEpOwogCQkvKiBkaXNhYmxlIFNUIExMICovCiAJCXN0X2xsX2Rpc2FibGUoc3RfZ2RhdGEpOwogCX0KQEAgLTc5MSw3ICs3NzEsNyBAQAogCWlmICh1bmxpa2VseShza2IgPT0gTlVMTCB8fCBzdF9nZGF0YSA9PSBOVUxMCiAJCXx8IHN0X2dkYXRhLT50dHkgPT0gTlVMTCkpIHsKIAkJcHJfZXJyKCJkYXRhL3R0eSB1bmF2YWlsYWJsZSB0byBwZXJmb3JtIHdyaXRlIik7Ci0JCXJldHVybiBTVF9FUlJfRkFJTFVSRTsKKwkJcmV0dXJuIC0xOwogCX0KICNpZmRlZiBERUJVRwkJCS8qIG9wZW4tdXAgc2tiIHRvIHJlYWQgdGhlIDFzdCBieXRlICovCiAJc3dpdGNoIChza2ItPmRhdGFbMF0pIHsKQEAgLTgxMCwxMCArNzkwLDEwIEBACiAJaWYgKHVubGlrZWx5KHN0X2dkYXRhLT5saXN0W3Byb3RvaWRdID09IE5VTEwpKSB7CiAJCXByX2VycigiIHByb3RvY29sICVkIG5vdCByZWdpc3RlcmVkLCBhbmQgd3JpdGluZz8gIiwKIAkJCSAgIHByb3RvaWQpOwotCQlyZXR1cm4gU1RfRVJSX0ZBSUxVUkU7CisJCXJldHVybiAtMTsKIAl9CiAjZW5kaWYKLQlwcl9pbmZvKCIlZCB0byBiZSB3cml0dGVuIiwgc2tiLT5sZW4pOworCXByX2RlYnVnKCIlZCB0byBiZSB3cml0dGVuIiwgc2tiLT5sZW4pOwogCWxlbiA9IHNrYi0+bGVuOwogCiAJLyogc3RfbGwgdG8gZGVjaWRlIHdoZXJlIHRvIGVucXVldWUgdGhlIHNrYiAqLwpAQCAtODM0LDcgKzgxNCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgc3RfdHR5X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQlpbnQgZXJyID0gU1RfU1VDQ0VTUzsKKwlpbnQgZXJyID0gMDsKIAlzdHJ1Y3Qgc3RfZGF0YV9zICpzdF9nZGF0YTsKIAlwcl9pbmZvKCIlcyAiLCBfX2Z1bmNfXyk7CiAKQEAgLTg1NSw4ICs4MzUsOCBAQAogCSAqIHNpZ25hbCB0byBVSU0gdmlhIEtJTSB0aGF0IC0KIAkgKiBpbnN0YWxsYXRpb24gb2YgTl9USV9XTCBsZGlzYyBpcyBjb21wbGV0ZQogCSAqLwotCXN0X2tpbV9jb21wbGV0ZSgpOwotCXByX2luZm8oImRvbmUgJXMiLCBfX2Z1bmNfXyk7CisJc3Rfa2ltX2NvbXBsZXRlKHN0X2dkYXRhLT5raW1fZGF0YSk7CisJcHJfZGVidWcoImRvbmUgJXMiLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtODc4LDEyICs4NTgsMTMgQEAKIAkJCXByX2VycigiJWQgbm90IHVuLXJlZ2lzdGVyZWQiLCBpKTsKIAkJc3RfZ2RhdGEtPmxpc3RbaV0gPSBOVUxMOwogCX0KKwlzdF9nZGF0YS0+cHJvdG9zX3JlZ2lzdGVyZWQgPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0X2dkYXRhLT5sb2NrLCBmbGFncyk7CiAJLyoKIAkgKiBzaWduYWwgdG8gVUlNIHZpYSBLSU0gdGhhdCAtCiAJICogTl9USV9XTCBsZGlzYyBpcyB1bi1pbnN0YWxsZWQKIAkgKi8KLQlzdF9raW1fY29tcGxldGUoKTsKKwlzdF9raW1fY29tcGxldGUoc3RfZ2RhdGEtPmtpbV9kYXRhKTsKIAlzdF9nZGF0YS0+dHR5ID0gTlVMTDsKIAkvKiBGbHVzaCBhbnkgcGVuZGluZyBjaGFyYWN0ZXJzIGluIHRoZSBkcml2ZXIgYW5kIGRpc2NpcGxpbmUuICovCiAJdHR5X2xkaXNjX2ZsdXNoKHR0eSk7CkBAIC05MDAsNyArODgxLDcgQEAKIAlzdF9nZGF0YS0+cnhfc2tiID0gTlVMTDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdF9nZGF0YS0+bG9jaywgZmxhZ3MpOwogCi0JcHJfaW5mbygiJXM6IGRvbmUgIiwgX19mdW5jX18pOworCXByX2RlYnVnKCIlczogZG9uZSAiLCBfX2Z1bmNfXyk7CiB9CiAKIHN0YXRpYyB2b2lkIHN0X3R0eV9yZWNlaXZlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCkBAIC05MDgsMTEgKzg4OSw4IEBACiB7CiAKICNpZmRlZiBWRVJCT1NFCi0JbG9uZyBpOwotCXByaW50ayhLRVJOX0VSUiAiaW5jb21pbmcgZGF0YS4uLlxuIik7Ci0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCi0JCXByaW50aygiICV4IiwgZGF0YVtpXSk7Ci0JcHJpbnRrKEtFUk5fRVJSICJcbi4uIGRhdGEgZW5kXG4iKTsKKwlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiPmluPiIsIERVTVBfUFJFRklYX05PTkUsCisJCTE2LCAxLCBkYXRhLCBjb3VudCwgMCk7CiAjZW5kaWYKIAogCS8qCkBAIC05MjAsNyArODk4LDcgQEAKIAkgKiB0byBLSU0gZm9yIHZhbGlkYXRpb24KIAkgKi8KIAlzdF9yZWN2KHR0eS0+ZGlzY19kYXRhLCBkYXRhLCBjb3VudCk7Ci0JcHJfaW5mbygiZG9uZSAlcyIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiZG9uZSAlcyIsIF9fZnVuY19fKTsKIH0KIAogLyogd2FrZS11cCBmdW5jdGlvbiBjYWxsZWQgaW4gZnJvbSB0aGUgVFRZIGxheWVyCkBAIC05MjksNyArOTA3LDcgQEAKIHN0YXRpYyB2b2lkIHN0X3R0eV93YWtldXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QJc3RfZGF0YV9zICpzdF9nZGF0YSA9IHR0eS0+ZGlzY19kYXRhOwotCXByX2luZm8oIiVzICIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiJXMgIiwgX19mdW5jX18pOwogCS8qIGRvbid0IGRvIGFuIHdha2V1cCBmb3Igbm93ICovCiAJY2xlYXJfYml0KFRUWV9ET19XUklURV9XQUtFVVAsICZ0dHktPmZsYWdzKTsKIApAQCAtOTQwLDcgKzkxOCw3IEBACiBzdGF0aWMgdm9pZCBzdF90dHlfZmx1c2hfYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0CXN0X2RhdGFfcyAqc3RfZ2RhdGEgPSB0dHktPmRpc2NfZGF0YTsKLQlwcl9pbmZvKCIlcyAiLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIiVzICIsIF9fZnVuY19fKTsKIAogCWtmcmVlX3NrYihzdF9nZGF0YS0+dHhfc2tiKTsKIAlzdF9nZGF0YS0+dHhfc2tiID0gTlVMTDsKQEAgLTk3OSw3ICs5NTcsNyBAQAogCQlrZnJlZShzdF9sZGlzY19vcHMpOwogCQlyZXR1cm4gZXJyOwogCX0KLQlwcl9pbmZvKCJyZWdpc3RlcmVkIG5fc2hhcmVkIGxpbmUgZGlzY2lwbGluZSIpOworCXByX2RlYnVnKCJyZWdpc3RlcmVkIG5fc2hhcmVkIGxpbmUgZGlzY2lwbGluZSIpOwogCiAJc3RfZ2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RfZGF0YV9zKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzdF9nZGF0YSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpLXN0L3N0X2NvcmUuaCBiL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9zdF9jb3JlLmgKaW5kZXggZjI3MWM4OC4uZTBjMzJkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpLXN0L3N0X2NvcmUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGktc3Qvc3RfY29yZS5oCkBAIC0zNiw1NyArMzYsODcgQEAKICNkZWZpbmUgU1RfUkVHX1BFTkRJTkcJCTMKICNkZWZpbmUgU1RfV0FJVElOR19GT1JfUkVTUAk0CiAKLS8qCi0gKiBsb2NhbCBkYXRhIHJlcXVpcmVkIGZvciBTVC9LSU0vU1QtSENJLUxMCisvKioKKyAqIHN0cnVjdCBzdF9kYXRhX3MgLSBTVCBjb3JlIGludGVybmFsIHN0cnVjdHVyZQorICogQHN0X3N0YXRlOiBkaWZmZXJlbnQgc3RhdGVzIG9mIFNUIGxpa2UgaW5pdGlhbGl6aW5nLCByZWdpc3RyYXRpb24KKyAqCWluIHByb2dyZXNzLCB0aGlzIGlzIG1haW5seSB1c2VkIHRvIHJldHVybiByZWxldmFudCBlcnIgY29kZXMKKyAqCXdoZW4gcHJvdG9jb2wgZHJpdmVycyBhcmUgcmVnaXN0ZXJpbmcuIEl0IGlzIGFsc28gdXNlZCB0byB0cmFjaworICoJdGhlIHJlY3YgZnVuY3Rpb24sIGFzIGluIGR1cmluZyBmdyBkb3dubG9hZCBvbmx5IEhDSSBldmVudHMKKyAqCWNhbiBvY2N1ciAsIHdoZXJlIGFzIGR1cmluZyBvdGhlciB0aW1lcyBvdGhlciBldmVudHMgQ0g4LCBDSDkKKyAqCWNhbiBvY2N1ci4KKyAqIEB0dHk6IHR0eSBwcm92aWRlZCBieSB0aGUgVFRZIGNvcmUgZm9yIGxpbmUgZGlzY2lwbGluZXMuCisgKiBAbGRpc2Nfb3BzOiB0aGUgcHJvY2VkdXJlcyB0aGF0IHRoaXMgbGluZSBkaXNjaXBsaW5lIHJlZ2lzdGVycyB3aXRoIFRUWS4KKyAqIEB0eF9za2I6IElmIGZvciBzb21lIHJlYXNvbiB0aGUgdHR5J3Mgd3JpdGUgcmV0dXJucyBsZXNzZXIgYnl0ZXMgd3JpdHRlbgorICoJdGhlbiB0byBtYWludGFpbiB0aGUgcmVzdCBvZiBkYXRhIHRvIGJlIHdyaXR0ZW4gb24gbmV4dCBpbnN0YW5jZS4KKyAqCVRoaXMgbmVlZHMgdG8gYmUgcHJvdGVjdGVkLCBoZW5jZSB0aGUgbG9jayBpbnNpZGUgd2FrZXVwIGZ1bmMuCisgKiBAdHhfc3RhdGU6IGlmIHRoZSBkYXRhIGlzIGJlaW5nIHdyaXR0ZW4gb250byB0aGUgVFRZIGFuZCBwcm90b2NvbCBkcml2ZXIKKyAqCXdhbnRzIHRvIHNlbmQgbW9yZSwgcXVldWUgdXAgZGF0YSBhbmQgbWFyayB0aGF0IHRoZXJlIGlzCisgKgltb3JlIGRhdGEgdG8gc2VuZC4KKyAqIEBsaXN0OiB0aGUgbGlzdCBvZiBwcm90b2NvbHMgcmVnaXN0ZXJlZCwgb25seSBNQVggY2FuIGV4aXN0LCBvbmUgcHJvdG9jb2wKKyAqCWNhbiByZWdpc3RlciBvbmx5IG9uY2UuCisgKiBAcnhfc3RhdGU6IHN0YXRlcyB0byBiZSBtYWludGFpbmVkIGluc2lkZSBzdCdzIHR0eSByZWNlaXZlCisgKiBAcnhfY291bnQ6IGNvdW50IHRvIGJlIG1haW50YWluZWQgaW5zaWRlIHN0J3MgdHR5IHJlY2VpZXZlCisgKiBAcnhfc2tiOiB0aGUgc2tiIHdoZXJlIGFsbCBkYXRhIGZvciBhIHByb3RvY29sIGdldHMgYWNjdW11bGF0ZWQsCisgKglzaW5jZSB0dHkgbWlnaHQgbm90IGNhbGwgcmVjZWl2ZSB3aGVuIGEgY29tcGxldGUgZXZlbnQgcGFja2V0CisgKglpcyByZWNlaXZlZCwgdGhlIHN0YXRlcywgY291bnQgYW5kIHRoZSBza2IgbmVlZHMgdG8gYmUgbWFpbnRhaW5lZC4KKyAqIEB0eHE6IHRoZSBsaXN0IG9mIHNrYnMgd2hpY2ggbmVlZHMgdG8gYmUgc2VudCBvbnRvIHRoZSBUVFkuCisgKiBAdHhfd2FpdHE6IGlmIHRoZSBjaGlwIGlzIG5vdCBpbiBBV0FLRSBzdGF0ZSwgdGhlIHNrYnMgbmVlZHMgdG8gYmUgcXVldWVkCisgKgl1cCBpbiBoZXJlLCBQTShXQUtFVVBfSU5EKSBkYXRhIG5lZWRzIHRvIGJlIHNlbnQgYW5kIHRoZW4gdGhlIHNrYnMKKyAqCWZyb20gd2FpdHEgY2FuIGJlIG1vdmVkIG9udG8gdGhlIHR4cS4KKyAqCU5lZWRzIGxvY2tpbmcgdG9vLgorICogQGxvY2s6IHRoZSBsb2NrIHRvIHByb3RlY3Qgc2ticywgcXVldWVzLCBhbmQgU1Qgc3RhdGVzLgorICogQHByb3Rvc19yZWdpc3RlcmVkOiBjb3VudCBvZiB0aGUgcHJvdG9jb2xzIHJlZ2lzdGVyZWQsIGFsc28gd2hlbiAwIHRoZQorICoJY2hpcCBlbmFibGUgZ3BpbyBjYW4gYmUgdG9nZ2xlZCwgYW5kIHdoZW4gaXQgY2hhbmdlcyB0byAxIHRoZSBmdworICoJbmVlZHMgdG8gYmUgZG93bmxvYWRlZCB0byBpbml0aWFsaXplIGNoaXAgc2lkZSBTVC4KKyAqIEBsbF9zdGF0ZTogdGhlIHZhcmlvdXMgUE0gc3RhdGVzIHRoZSBjaGlwIGNhbiBiZSwgdGhlIHN0YXRlcyBhcmUgbm90aWZpZWQKKyAqCXRvIHVzLCB3aGVuIHRoZSBjaGlwIHNlbmRzIHJlbGV2YW50IFBNIHBhY2tldHMoU0xFRVBfSU5ELCBXQUtFX0lORCkuCisgKiBAa2ltX2RhdGE6IHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IGVuY2Fwc3VsYXRpbmcgc3RydWN0dXJlLgorICoKICAqLwogc3RydWN0IHN0X2RhdGFfcyB7CiAJdW5zaWduZWQgbG9uZyBzdF9zdGF0ZTsKLS8qCi0gKiBhbiBpbnN0YW5jZSBvZiB0dHlfc3RydWN0ICYgbGRpc2Mgb3BzIHRvIG1vdmUgYXJvdW5kCi0gKi8KIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCXN0cnVjdCB0dHlfbGRpc2Nfb3BzICpsZGlzY19vcHM7Ci0vKgotICogdGhlIHR4IHNrYiAtCi0gKiBpZiB0aGUgc2tiIGlzIGFscmVhZHkgZGVxdWV1ZWQgYW5kIHRoZSB0dHkgZmFpbGVkIHRvIHdyaXRlIHRoZSBzYW1lCi0gKiBtYWludGFpbiB0aGUgc2tiIHRvIHdyaXRlIGluIHRoZSBuZXh0IHRyYW5zYWN0aW9uCi0gKi8KIAlzdHJ1Y3Qgc2tfYnVmZiAqdHhfc2tiOwogI2RlZmluZSBTVF9UWF9TRU5ESU5HCTEKICNkZWZpbmUgU1RfVFhfV0FLRVVQCTIKIAl1bnNpZ25lZCBsb25nIHR4X3N0YXRlOwotLyoKLSAqIGxpc3Qgb2YgcHJvdG9jb2wgcmVnaXN0ZXJlZAotICovCiAJc3RydWN0IHN0X3Byb3RvX3MgKmxpc3RbU1RfTUFYXTsKLS8qCi0gKiBsb2NrCi0gKi8KIAl1bnNpZ25lZCBsb25nIHJ4X3N0YXRlOwogCXVuc2lnbmVkIGxvbmcgcnhfY291bnQ7CiAJc3RydWN0IHNrX2J1ZmYgKnJ4X3NrYjsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4cSwgdHhfd2FpdHE7Ci0Jc3BpbmxvY2tfdCBsb2NrOwkvKiBTVCBMTCBzdGF0ZSBsb2NrICAqLworCXNwaW5sb2NrX3QgbG9jazsKIAl1bnNpZ25lZCBjaGFyCXByb3Rvc19yZWdpc3RlcmVkOwotCXVuc2lnbmVkIGxvbmcgbGxfc3RhdGU7CS8qIFNUIExMIHBvd2VyIHN0YXRlICovCisJdW5zaWduZWQgbG9uZyBsbF9zdGF0ZTsKKwl2b2lkICpraW1fZGF0YTsKIH07CiAKLS8qIHBvaW50IHRoaXMgdG8gdHR5LT5kcml2ZXItPndyaXRlIG9yIHR0eS0+b3BzLT53cml0ZQorLyoqCisgKiBzdF9pbnRfd3JpdGUgLQorICogcG9pbnQgdGhpcyB0byB0dHktPmRyaXZlci0+d3JpdGUgb3IgdHR5LT5vcHMtPndyaXRlCiAgKiBkZXBlbmRpbmcgdXBvbiB0aGUga2VybmVsIHZlcnNpb24KICAqLwogaW50IHN0X2ludF93cml0ZShzdHJ1Y3Qgc3RfZGF0YV9zKiwgY29uc3QgdW5zaWduZWQgY2hhciosIGludCk7Ci0vKiBpbnRlcm5hbCB3cml0ZSBmdW5jdGlvbiwgcGFzc2VkIG9udG8gcHJvdG9jb2wgZHJpdmVycworCisvKioKKyAqIHN0X3dyaXRlIC0KKyAqIGludGVybmFsIHdyaXRlIGZ1bmN0aW9uLCBwYXNzZWQgb250byBwcm90b2NvbCBkcml2ZXJzCiAgKiB2aWEgdGhlIHdyaXRlIGZ1bmN0aW9uIHB0ciBvZiBwcm90b2NvbCBzdHJ1Y3QKICAqLwogbG9uZyBzdF93cml0ZShzdHJ1Y3Qgc2tfYnVmZiAqKTsKLS8qIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmcm9tIFNULUxMCi0gKi8KKworLyogZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZyb20gU1QtTEwgKi8KIHZvaWQgc3RfbGxfc2VuZF9mcmFtZShlbnVtIHByb3RvX3R5cGUsIHN0cnVjdCBza19idWZmICopOworCiAvKiBpbnRlcm5hbCB3YWtlIHVwIGZ1bmN0aW9uICovCiB2b2lkIHN0X3R4X3dha2V1cChzdHJ1Y3Qgc3RfZGF0YV9zICpzdF9kYXRhKTsKIAorLyogaW5pdCwgZXhpdCBlbnRyeSBmdW5jcyBjYWxsZWQgZnJvbSBLSU0gKi8KIGludCBzdF9jb3JlX2luaXQoc3RydWN0IHN0X2RhdGFfcyAqKik7CiB2b2lkIHN0X2NvcmVfZXhpdChzdHJ1Y3Qgc3RfZGF0YV9zICopOworCisvKiBhc2sgZm9yIHJlZmVyZW5jZSBmcm9tIEtJTSAqLwogdm9pZCBzdF9raW1fcmVmKHN0cnVjdCBzdF9kYXRhX3MgKiopOwogCiAjZGVmaW5lIEdQU19TVFVCX1RFU1QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9zdF9raW0uYyBiL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9zdF9raW0uYwppbmRleCA5OGNiYWJiLi5iNGE2YzdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGktc3Qvc3Rfa2ltLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpLXN0L3N0X2tpbS5jCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIApAQCAtNTUsMzcgKzU3LDEwIEBACiAJCSAgIH0sCiB9OwogCi0jaWZuZGVmIExFR0FDWV9SRktJTExfU1VQUE9SVAotc3RhdGljIHNzaXplX3Qgc2hvd19waWQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQotCQkJKmF0dHIsIGNoYXIgKmJ1Zik7Ci1zdGF0aWMgc3NpemVfdCBzdG9yZV9waWQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQotCQkJICpkZXZhdHRyLCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7Ci1zdGF0aWMgc3NpemVfdCBzaG93X2xpc3Qoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQotCQkJICphdHRyLCBjaGFyICpidWYpOwotCi0vKiBzdHJ1Y3R1cmVzIHNwZWNpZmljIGZvciBzeXNmcyBlbnRyaWVzICovCi1zdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHBpZF9hdHRyID0KLV9fQVRUUihwaWQsIDA2NDQsICh2b2lkICopc2hvd19waWQsICh2b2lkICopc3RvcmVfcGlkKTsKLQotc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBsaXN0X3Byb3RvY29scyA9Ci1fX0FUVFIocHJvdG9jb2xzLCAwNDQ0LCAodm9pZCAqKXNob3dfbGlzdCwgTlVMTCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp1aW1fYXR0cnNbXSA9IHsKLQkmcGlkX2F0dHIuYXR0ciwKLQkvKiBhZGQgbW9yZSBkZWJ1ZyBzeXNmcyBlbnRyaWVzICovCi0JJmxpc3RfcHJvdG9jb2xzLmF0dHIsCi0JTlVMTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHVpbV9hdHRyX2dycCA9IHsKLQkuYXR0cnMgPSB1aW1fYXR0cnMsCi19OwotI2Vsc2UKIHN0YXRpYyBpbnQga2ltX3RvZ2dsZV9yYWRpbyh2b2lkKiwgYm9vbCk7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHJma2lsbF9vcHMga2ltX3Jma2lsbF9vcHMgPSB7CiAJLnNldF9ibG9jayA9IGtpbV90b2dnbGVfcmFkaW8sCiB9OwotI2VuZGlmCS8qIExFR0FDWV9SRktJTExfU1VQUE9SVCAqLwogCiAvKiBzdHJpbmdzIHRvIGJlIHVzZWQgZm9yIHJma2lsbCBlbnRyaWVzIGFuZCBieQogICogU1QgQ29yZSB0byBiZSB1c2VkIGZvciBzeXNmcyBkZWJ1ZyBlbnRyeQpAQCAtOTcsMTggKzcyLDE5IEBACiAJUFJPVE9fRU5UUlkoU1RfR1BTLCAiR1BTIiksCiB9OwogCi1zdHJ1Y3Qga2ltX2RhdGFfcwkqa2ltX2dkYXRhOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIGludGVybmFsIGZ1bmN0aW9ucyAqLwogCi0vKgotICogZnVuY3Rpb24gdG8gcmV0dXJuIHdoZXRoZXIgdGhlIGZpcm13YXJlIHJlc3BvbnNlIHdhcyBwcm9wZXIKLSAqIGluIGNhc2Ugb2YgZXJyb3IgZG9uJ3QgY29tcGxldGUgc28gdGhhdCB3YWl0aW5nIGZvciBwcm9wZXIKLSAqIHJlc3BvbnNlIHRpbWVzIG91dAorLyoqCisgKiB2YWxpZGF0ZV9maXJtd2FyZV9yZXNwb25zZSAtCisgKglmdW5jdGlvbiB0byByZXR1cm4gd2hldGhlciB0aGUgZmlybXdhcmUgcmVzcG9uc2Ugd2FzIHByb3BlcgorICoJaW4gY2FzZSBvZiBlcnJvciBkb24ndCBjb21wbGV0ZSBzbyB0aGF0IHdhaXRpbmcgZm9yIHByb3BlcgorICoJcmVzcG9uc2UgdGltZXMgb3V0CiAgKi8KLXZvaWQgdmFsaWRhdGVfZmlybXdhcmVfcmVzcG9uc2Uoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3ZvaWQgdmFsaWRhdGVfZmlybXdhcmVfcmVzcG9uc2Uoc3RydWN0IGtpbV9kYXRhX3MgKmtpbV9nZGF0YSkKIHsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0ga2ltX2dkYXRhLT5yeF9za2I7CiAJaWYgKHVubGlrZWx5KHNrYi0+ZGF0YVs1XSAhPSAwKSkgewogCQlwcl9lcnIoIm5vIHByb3BlciByZXNwb25zZSBkdXJpbmcgZncgZG93bmxvYWQiKTsKIAkJcHJfZXJyKCJkYXRhNiAleCIsIHNrYi0+ZGF0YVs1XSk7CkBAIC0xMjIsMTQgKzk4LDE0IEBACiAvKiBjaGVjayBmb3IgZGF0YSBsZW4gcmVjZWl2ZWQgaW5zaWRlIGtpbV9pbnRfcmVjdgogICogbW9zdCBvZnRlbiBoaXQgdGhlIGxhc3QgY2FzZSB0byB1cGRhdGUgc3RhdGUgdG8gd2FpdGluZyBmb3IgZGF0YQogICovCi1zdGF0aWMgaW5saW5lIGludCBraW1fY2hlY2tfZGF0YV9sZW4oaW50IGxlbikKK3N0YXRpYyBpbmxpbmUgaW50IGtpbV9jaGVja19kYXRhX2xlbihzdHJ1Y3Qga2ltX2RhdGFfcyAqa2ltX2dkYXRhLCBpbnQgbGVuKQogewogCXJlZ2lzdGVyIGludCByb29tID0gc2tiX3RhaWxyb29tKGtpbV9nZGF0YS0+cnhfc2tiKTsKIAotCXByX2luZm8oImxlbiAlZCByb29tICVkIiwgbGVuLCByb29tKTsKKwlwcl9kZWJ1ZygibGVuICVkIHJvb20gJWQiLCBsZW4sIHJvb20pOwogCiAJaWYgKCFsZW4pIHsKLQkJdmFsaWRhdGVfZmlybXdhcmVfcmVzcG9uc2Uoa2ltX2dkYXRhLT5yeF9za2IpOworCQl2YWxpZGF0ZV9maXJtd2FyZV9yZXNwb25zZShraW1fZ2RhdGEpOwogCX0gZWxzZSBpZiAobGVuID4gcm9vbSkgewogCQkvKiBSZWNlaXZlZCBwYWNrZXQncyBwYXlsb2FkIGxlbmd0aCBpcyBsYXJnZXIuCiAJCSAqIFdlIGNhbid0IGFjY29tbW9kYXRlIGl0IGluIGNyZWF0ZWQgc2tiLgpAQCAtMTU1LDE4ICsxMzEsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogcmVjZWl2ZSBmdW5jdGlvbiBjYWxsZWQgZHVyaW5nIGZpcm13YXJlIGRvd25sb2FkCi0gKiAtIGZpcm13YXJlIGRvd25sb2FkIHJlc3BvbnNlcyBvbiBkaWZmZXJlbnQgVUFSVCBkcml2ZXJzCi0gKiAgIGhhdmUgYmVlbiBvYnNlcnZlZCB0byBjb21lIGluIGJ1cnN0cyBvZiBkaWZmZXJlbnQKLSAqICAgdHR5X3JlY2VpdmUgYW5kIGhlbmNlIHRoZSBsb2dpYworLyoqCisgKiBraW1faW50X3JlY3YgLSByZWNlaXZlIGZ1bmN0aW9uIGNhbGxlZCBkdXJpbmcgZmlybXdhcmUgZG93bmxvYWQKKyAqCWZpcm13YXJlIGRvd25sb2FkIHJlc3BvbnNlcyBvbiBkaWZmZXJlbnQgVUFSVCBkcml2ZXJzCisgKgloYXZlIGJlZW4gb2JzZXJ2ZWQgdG8gY29tZSBpbiBidXJzdHMgb2YgZGlmZmVyZW50CisgKgl0dHlfcmVjZWl2ZSBhbmQgaGVuY2UgdGhlIGxvZ2ljCiAgKi8KLXZvaWQga2ltX2ludF9yZWN2KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGxvbmcgY291bnQpCit2b2lkIGtpbV9pbnRfcmVjdihzdHJ1Y3Qga2ltX2RhdGFfcyAqa2ltX2dkYXRhLAorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGxvbmcgY291bnQpCiB7CiAJcmVnaXN0ZXIgY2hhciAqcHRyOwogCXN0cnVjdCBoY2lfZXZlbnRfaGRyICplaDsKIAlyZWdpc3RlciBpbnQgbGVuID0gMCwgdHlwZSA9IDA7CiAKLQlwcl9pbmZvKCIlcyIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiJXMiLCBfX2Z1bmNfXyk7CiAJLyogRGVjb2RlIHJlY2VpdmVkIGJ5dGVzIGhlcmUgKi8KIAlwdHIgPSAoY2hhciAqKWRhdGE7CiAJaWYgKHVubGlrZWx5KHB0ciA9PSBOVUxMKSkgewpAQCAtMTg4LDggKzE2Niw4IEBACiAJCQlzd2l0Y2ggKGtpbV9nZGF0YS0+cnhfc3RhdGUpIHsKIAkJCQkvKiBXYWl0aW5nIGZvciBjb21wbGV0ZSBwYWNrZXQgPyAqLwogCQkJY2FzZSBTVF9CVF9XNF9EQVRBOgotCQkJCXByX2luZm8oIkNvbXBsZXRlIHBrdCByZWNlaXZlZCIpOwotCQkJCXZhbGlkYXRlX2Zpcm13YXJlX3Jlc3BvbnNlKGtpbV9nZGF0YS0+cnhfc2tiKTsKKwkJCQlwcl9kZWJ1ZygiQ29tcGxldGUgcGt0IHJlY2VpdmVkIik7CisJCQkJdmFsaWRhdGVfZmlybXdhcmVfcmVzcG9uc2Uoa2ltX2dkYXRhKTsKIAkJCQlraW1fZ2RhdGEtPnJ4X3N0YXRlID0gU1RfVzRfUEFDS0VUX1RZUEU7CiAJCQkJa2ltX2dkYXRhLT5yeF9za2IgPSBOVUxMOwogCQkJCWNvbnRpbnVlOwpAQCAtMTk3LDkgKzE3NSw5IEBACiAJCQljYXNlIFNUX0JUX1c0X0VWRU5UX0hEUjoKIAkJCQllaCA9IChzdHJ1Y3QgaGNpX2V2ZW50X2hkciAqKWtpbV9nZGF0YS0+CiAJCQkJICAgIHJ4X3NrYi0+ZGF0YTsKLQkJCQlwcl9pbmZvKCJFdmVudCBoZWFkZXI6IGV2dCAweCUyLjJ4IgorCQkJCXByX2RlYnVnKCJFdmVudCBoZWFkZXI6IGV2dCAweCUyLjJ4IgogCQkJCQkgICAicGxlbiAlZCIsIGVoLT5ldnQsIGVoLT5wbGVuKTsKLQkJCQlraW1fY2hlY2tfZGF0YV9sZW4oZWgtPnBsZW4pOworCQkJCWtpbV9jaGVja19kYXRhX2xlbihraW1fZ2RhdGEsIGVoLT5wbGVuKTsKIAkJCQljb250aW51ZTsKIAkJCX0JLyogZW5kIG9mIHN3aXRjaCAqLwogCQl9CQkvKiBlbmQgb2YgaWYgcnhfc3RhdGUgKi8KQEAgLTIxNiw3ICsxOTQsNyBAQAogCQkJcHRyKys7CiAJCQljb3VudC0tOwogCQkJY29udGludWU7Ci0JCX0JCS8qIGVuZCBvZiBzd2l0Y2ggKnB0ciAqLworCQl9CiAJCXB0cisrOwogCQljb3VudC0tOwogCQlraW1fZ2RhdGEtPnJ4X3NrYiA9CkBAIC0yMjYsMzQgKzIwNCwzNSBAQAogCQkJa2ltX2dkYXRhLT5yeF9zdGF0ZSA9IFNUX1c0X1BBQ0tFVF9UWVBFOwogCQkJa2ltX2dkYXRhLT5yeF9jb3VudCA9IDA7CiAJCQlyZXR1cm47Ci0JCX0gLyogbm90IG5lY2Vzc2FyeSBpbiB0aGlzIGNhc2UgKi8KKwkJfQogCQlidF9jYihraW1fZ2RhdGEtPnJ4X3NrYiktPnBrdF90eXBlID0gdHlwZTsKLQl9CQkJLyogZW5kIG9mIHdoaWxlIGNvdW50ICovCisJfQogCXByX2luZm8oImRvbmUgJXMiLCBfX2Z1bmNfXyk7CiAJcmV0dXJuOwogfQogCi1zdGF0aWMgbG9uZyByZWFkX2xvY2FsX3ZlcnNpb24oY2hhciAqYnRzX3Njcl9uYW1lKQorc3RhdGljIGxvbmcgcmVhZF9sb2NhbF92ZXJzaW9uKHN0cnVjdCBraW1fZGF0YV9zICpraW1fZ2RhdGEsIGNoYXIgKmJ0c19zY3JfbmFtZSkKIHsKIAl1bnNpZ25lZCBzaG9ydCB2ZXJzaW9uID0gMCwgY2hpcCA9IDAsIG1pbl92ZXIgPSAwLCBtYWpfdmVyID0gMDsKIAljaGFyIHJlYWRfdmVyX2NtZFtdID0geyAweDAxLCAweDAxLCAweDEwLCAweDAwIH07CiAKLQlwcl9pbmZvKCIlcyIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAlJTklUX0NPTVBMRVRJT04oa2ltX2dkYXRhLT5raW1fcmN2ZCk7CiAJaWYgKDQgIT0gc3RfaW50X3dyaXRlKGtpbV9nZGF0YS0+Y29yZV9kYXRhLCByZWFkX3Zlcl9jbWQsIDQpKSB7CiAJCXByX2Vycigia2ltOiBjb3VsZG4ndCB3cml0ZSA0IGJ5dGVzIik7Ci0JCXJldHVybiBTVF9FUlJfRkFJTFVSRTsKKwkJcmV0dXJuIC0xOwogCX0KIAogCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0CiAJICAgICgma2ltX2dkYXRhLT5raW1fcmN2ZCwgbXNlY3NfdG9famlmZmllcyhDTURfUkVTUF9USU1FKSkpIHsKIAkJcHJfZXJyKCIgd2FpdGluZyBmb3IgdmVyIGluZm8tIHRpbWVkIG91dCAiKTsKLQkJcmV0dXJuIFNUX0VSUl9GQUlMVVJFOworCQlyZXR1cm4gLTE7CiAJfQogCiAJdmVyc2lvbiA9Ci0JICAgIE1BS0VXT1JEKGtpbV9nZGF0YS0+cmVzcF9idWZmZXJbMTNdLCBraW1fZ2RhdGEtPnJlc3BfYnVmZmVyWzE0XSk7CisJCU1BS0VXT1JEKGtpbV9nZGF0YS0+cmVzcF9idWZmZXJbMTNdLAorCQkJCWtpbV9nZGF0YS0+cmVzcF9idWZmZXJbMTRdKTsKIAljaGlwID0gKHZlcnNpb24gJiAweDdDMDApID4+IDEwOwogCW1pbl92ZXIgPSAodmVyc2lvbiAmIDB4MDA3Rik7CiAJbWFqX3ZlciA9ICh2ZXJzaW9uICYgMHgwMzgwKSA+PiA3OwpAQCAtMjYyLDI1ICsyNDEsMzIgQEAKIAkJbWFqX3ZlciB8PSAweDAwMDg7CiAKIAlzcHJpbnRmKGJ0c19zY3JfbmFtZSwgIlRJSW5pdF8lZC4lZC4lZC5idHMiLCBjaGlwLCBtYWpfdmVyLCBtaW5fdmVyKTsKKworCS8qIHRvIGJlIGFjY2Vzc2VkIGxhdGVyIHZpYSBzeXNmcyBlbnRyeSAqLworCWtpbV9nZGF0YS0+dmVyc2lvbi5mdWxsID0gdmVyc2lvbjsKKwlraW1fZ2RhdGEtPnZlcnNpb24uY2hpcCA9IGNoaXA7CisJa2ltX2dkYXRhLT52ZXJzaW9uLm1hal92ZXIgPSBtYWpfdmVyOworCWtpbV9nZGF0YS0+dmVyc2lvbi5taW5fdmVyID0gbWluX3ZlcjsKKwogCXByX2luZm8oIiVzIiwgYnRzX3Njcl9uYW1lKTsKLQlyZXR1cm4gU1RfU1VDQ0VTUzsKKwlyZXR1cm4gMDsKIH0KIAotLyogaW50ZXJuYWwgZnVuY3Rpb24gd2hpY2ggcGFyc2VzIHRocm91Z2ggdGhlIC5idHMgZmlybXdhcmUgc2NyaXB0IGZpbGUKLSAqIGludHJlcHJldHMgU0VORCwgREVMQVkgYWN0aW9ucyBvbmx5IGFzIG9mIG5vdworLyoqCisgKiBkb3dubG9hZF9maXJtd2FyZSAtCisgKglpbnRlcm5hbCBmdW5jdGlvbiB3aGljaCBwYXJzZXMgdGhyb3VnaCB0aGUgLmJ0cyBmaXJtd2FyZQorICoJc2NyaXB0IGZpbGUgaW50cmVwcmV0cyBTRU5ELCBERUxBWSBhY3Rpb25zIG9ubHkgYXMgb2Ygbm93CiAgKi8KLXN0YXRpYyBsb25nIGRvd25sb2FkX2Zpcm13YXJlKHZvaWQpCitzdGF0aWMgbG9uZyBkb3dubG9hZF9maXJtd2FyZShzdHJ1Y3Qga2ltX2RhdGFfcyAqa2ltX2dkYXRhKQogewotCWxvbmcgZXJyID0gU1RfU1VDQ0VTUzsKKwlsb25nIGVyciA9IDA7CiAJbG9uZyBsZW4gPSAwOwogCXJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgKnB0ciA9IE5VTEw7CiAJcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqYWN0aW9uX3B0ciA9IE5VTEw7CiAJdW5zaWduZWQgY2hhciBidHNfc2NyX25hbWVbMzBdID0geyAwIH07CS8qIDMwIGNoYXIgbG9uZyBidHMgc2NyIG5hbWU/ICovCiAKLQlwcl9pbmZvKCIlcyIsIF9fZnVuY19fKTsKLQotCWVyciA9IHJlYWRfbG9jYWxfdmVyc2lvbihidHNfc2NyX25hbWUpOwotCWlmIChlcnIgIT0gU1RfU1VDQ0VTUykgeworCWVyciA9IHJlYWRfbG9jYWxfdmVyc2lvbihraW1fZ2RhdGEsIGJ0c19zY3JfbmFtZSk7CisJaWYgKGVyciAhPSAwKSB7CiAJCXByX2Vycigia2ltOiBmYWlsZWQgdG8gcmVhZCBsb2NhbCB2ZXIiKTsKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC0yOTEsNyArMjc3LDcgQEAKIAkJICAgICAoa2ltX2dkYXRhLT5md19lbnRyeS0+c2l6ZSA9PSAwKSkpIHsKIAkJcHJfZXJyKCIgcmVxdWVzdF9maXJtd2FyZSBmYWlsZWQoZXJybm8gJWxkKSBmb3IgJXMiLCBlcnIsCiAJCQkgICBidHNfc2NyX25hbWUpOwotCQlyZXR1cm4gU1RfRVJSX0ZBSUxVUkU7CisJCXJldHVybiAtMTsKIAl9CiAJcHRyID0gKHZvaWQgKilraW1fZ2RhdGEtPmZ3X2VudHJ5LT5kYXRhOwogCWxlbiA9IGtpbV9nZGF0YS0+ZndfZW50cnktPnNpemU7CkBAIC0zMDIsNyArMjg4LDcgQEAKIAlsZW4gLT0gc2l6ZW9mKHN0cnVjdCBidHNfaGVhZGVyKTsKIAogCXdoaWxlIChsZW4gPiAwICYmIHB0cikgewotCQlwcl9pbmZvKCIgYWN0aW9uIHNpemUgJWQsIHR5cGUgJWQgIiwKKwkJcHJfZGVidWcoIiBhY3Rpb24gc2l6ZSAlZCwgdHlwZSAlZCAiLAogCQkJICAgKChzdHJ1Y3QgYnRzX2FjdGlvbiAqKXB0ciktPnNpemUsCiAJCQkgICAoKHN0cnVjdCBidHNfYWN0aW9uICopcHRyKS0+dHlwZSk7CiAKQEAgLTMxNSw4ICszMDEsOCBAQAogCQkJCS8qIGlnbm9yZSByZW1vdGUgY2hhbmdlCiAJCQkJICogYmF1ZCByYXRlIEhDSSBWUyBjb21tYW5kICovCiAJCQkJcHJfZXJyCi0JCQkJICAgICgiIGNoYW5nZSByZW1vdGUgYmF1ZFwKLQkJCQkgICAgcmF0ZSBjb21tYW5kIGluIGZpcm13YXJlIik7CisJCQkJICAgICgiIGNoYW5nZSByZW1vdGUgYmF1ZCIKKwkJCQkgICAgIiByYXRlIGNvbW1hbmQgaW4gZmlybXdhcmUiKTsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtMzI2LDcgKzMxMiw3IEBACiAJCQkJCSAgICgoc3RydWN0IGJ0c19hY3Rpb24gKilwdHIpLT5zaXplKTsKIAkJCWlmICh1bmxpa2VseShlcnIgPCAwKSkgewogCQkJCXJlbGVhc2VfZmlybXdhcmUoa2ltX2dkYXRhLT5md19lbnRyeSk7Ci0JCQkJcmV0dXJuIFNUX0VSUl9GQUlMVVJFOworCQkJCXJldHVybiAtMTsKIAkJCX0KIAkJCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0CiAJCQkgICAgKCZraW1fZ2RhdGEtPmtpbV9yY3ZkLApAQCAtMzM1LDcgKzMyMSw3IEBACiAJCQkJICAgICgiIHJlc3BvbnNlIHRpbWVvdXQgZHVyaW5nIGZ3IGRvd25sb2FkICIpOwogCQkJCS8qIHRpbWVkIG91dCAqLwogCQkJCXJlbGVhc2VfZmlybXdhcmUoa2ltX2dkYXRhLT5md19lbnRyeSk7Ci0JCQkJcmV0dXJuIFNUX0VSUl9GQUlMVVJFOworCQkJCXJldHVybiAtMTsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIEFDVElPTl9ERUxBWToJLyogc2xlZXAgKi8KQEAgLTM1MywxOSArMzM5LDIzIEBACiAJfQogCS8qIGZ3IGRvd25sb2FkIGNvbXBsZXRlICovCiAJcmVsZWFzZV9maXJtd2FyZShraW1fZ2RhdGEtPmZ3X2VudHJ5KTsKLQlyZXR1cm4gU1RfU1VDQ0VTUzsKKwlyZXR1cm4gMDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBmdW5jdGlvbnMgY2FsbGVkIGZyb20gU1QgY29yZSAqLwotCiAvKiBmdW5jdGlvbiB0byB0b2dnbGUgdGhlIEdQSU8KICAqIG5lZWRzIHRvIGtub3cgd2hldGhlciB0aGUgR1BJTyBpcyBhY3RpdmUgaGlnaCBvciBhY3RpdmUgbG93CiAgKi8KIHZvaWQgc3Rfa2ltX2NoaXBfdG9nZ2xlKGVudW0gcHJvdG9fdHlwZSB0eXBlLCBlbnVtIGtpbV9ncGlvX3N0YXRlIHN0YXRlKQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKmtpbV9wZGV2OworCXN0cnVjdCBraW1fZGF0YV9zCSpraW1fZ2RhdGE7CiAJcHJfaW5mbygiICVzICIsIF9fZnVuY19fKTsKIAorCWtpbV9wZGV2ID0gc3RfZ2V0X3BsYXRfZGV2aWNlKCk7CisJa2ltX2dkYXRhID0gZGV2X2dldF9kcnZkYXRhKCZraW1fcGRldi0+ZGV2KTsKKwogCWlmIChraW1fZ2RhdGEtPmdwaW9zW3R5cGVdID09IC0xKSB7CiAJCXByX2luZm8oIiBncGlvIG5vdCByZXF1ZXN0ZWQgZm9yIHByb3RvY29sICVzIiwKIAkJCSAgIHByb3RvY29sX25hbWVzW3R5cGVdKTsKQEAgLTQwNSw2ICszOTUsOSBAQAogICovCiB2b2lkIHN0X2tpbV9yZWN2KHZvaWQgKmRpc2NfZGF0YSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgbG9uZyBjb3VudCkKIHsKKwlzdHJ1Y3Qgc3RfZGF0YV9zCSpzdF9nZGF0YSA9IChzdHJ1Y3Qgc3RfZGF0YV9zICopZGlzY19kYXRhOworCXN0cnVjdCBraW1fZGF0YV9zCSpraW1fZ2RhdGEgPSBzdF9nZGF0YS0+a2ltX2RhdGE7CisKIAlwcl9pbmZvKCIgJXMgIiwgX19mdW5jX18pOwogCS8qIGNvcHkgdG8gbG9jYWwgYnVmZmVyICovCiAJaWYgKHVubGlrZWx5KGRhdGFbNF0gPT0gMHgwMSAmJiBkYXRhWzVdID09IDB4MTAgJiYgZGF0YVswXSA9PSAweDA0KSkgewpAQCAtNDEzLDcgKzQwNiw3IEBACiAJCWNvbXBsZXRlX2FsbCgma2ltX2dkYXRhLT5raW1fcmN2ZCk7CiAJCXJldHVybjsKIAl9IGVsc2UgewotCQlraW1faW50X3JlY3YoZGF0YSwgY291bnQpOworCQlraW1faW50X3JlY3Yoa2ltX2dkYXRhLCBkYXRhLCBjb3VudCk7CiAJCS8qIGVpdGhlciBjb21wbGV0ZXMgb3IgdGltZXMgb3V0ICovCiAJfQogCXJldHVybjsKQEAgLTQyMiwyNyArNDE1LDMzIEBACiAvKiB0byBzaWduYWwgY29tcGxldGlvbiBvZiBsaW5lIGRpc2NpcGxpbmUgaW5zdGFsbGF0aW9uCiAgKiBjYWxsZWQgZnJvbSBTVCBDb3JlLCB1cG9uIHR0eV9vcGVuCiAgKi8KLXZvaWQgc3Rfa2ltX2NvbXBsZXRlKHZvaWQpCit2b2lkIHN0X2tpbV9jb21wbGV0ZSh2b2lkICpraW1fZGF0YSkKIHsKKwlzdHJ1Y3Qga2ltX2RhdGFfcwkqa2ltX2dkYXRhID0gKHN0cnVjdCBraW1fZGF0YV9zICopa2ltX2RhdGE7CiAJY29tcGxldGUoJmtpbV9nZGF0YS0+bGRpc2NfaW5zdGFsbGVkKTsKIH0KIAotLyogY2FsbGVkIGZyb20gU1QgQ29yZSB1cG9uIDFzdCByZWdpc3RyYXRpb24KLSovCi1sb25nIHN0X2tpbV9zdGFydCh2b2lkKQorLyoqCisgKiBzdF9raW1fc3RhcnQgLSBjYWxsZWQgZnJvbSBTVCBDb3JlIHVwb24gMXN0IHJlZ2lzdHJhdGlvbgorICoJVGhpcyBpbnZvbHZlcyB0b2dnbGluZyB0aGUgY2hpcCBlbmFibGUgZ3BpbywgcmVhZGluZworICoJdGhlIGZpcm13YXJlIHZlcnNpb24gZnJvbSBjaGlwLCBmb3JtaW5nIHRoZSBmdyBmaWxlIG5hbWUKKyAqCWJhc2VkIG9uIHRoZSBjaGlwIHZlcnNpb24sIHJlcXVlc3RpbmcgdGhlIGZ3LCBwYXJzaW5nIGl0CisgKglhbmQgcGVyZm9ybSBkb3dubG9hZChzZW5kL3JlY3YpLgorICovCitsb25nIHN0X2tpbV9zdGFydCh2b2lkICpraW1fZGF0YSkKIHsKLQlsb25nIGVyciA9IFNUX1NVQ0NFU1M7CisJbG9uZyBlcnIgPSAwOwogCWxvbmcgcmV0cnkgPSBQT1JfUkVUUllfQ09VTlQ7CisJc3RydWN0IGtpbV9kYXRhX3MJKmtpbV9nZGF0YSA9IChzdHJ1Y3Qga2ltX2RhdGFfcyAqKWtpbV9kYXRhOworCiAJcHJfaW5mbygiICVzIiwgX19mdW5jX18pOwogCiAJZG8gewotI2lmZGVmIExFR0FDWV9SRktJTExfU1VQUE9SVAogCQkvKiBUT0RPOiB0aGlzIGlzIG9ubHkgYmVjYXVzZSByZmtpbGwgc3ViLXN5c3RlbQogCQkgKiBkb2Vzbid0IHNlbmQgZXZlbnRzIHRvIHVzZXItc3BhY2UgaWYgdGhlIHN0YXRlCiAJCSAqIGlzbid0IGNoYW5nZWQKIAkJICovCiAJCXJma2lsbF9zZXRfaHdfc3RhdGUoa2ltX2dkYXRhLT5yZmtpbGxbU1RfQlRdLCAxKTsKLSNlbmRpZgogCQkvKiBDb25maWd1cmUgQlQgblNodXRkb3duIHRvIEhJR0ggc3RhdGUgKi8KIAkJZ3Bpb19zZXRfdmFsdWUoa2ltX2dkYXRhLT5ncGlvc1tTVF9CVF0sIEdQSU9fTE9XKTsKIAkJbWRlbGF5KDUpOwkvKiBGSVhNRTogYSBwcm9wZXIgdG9nZ2xlICovCkBAIC00NTAsMzAgKzQ0OSwyOSBAQAogCQltZGVsYXkoMTAwKTsKIAkJLyogcmUtaW5pdGlhbGl6ZSB0aGUgY29tcGxldGlvbiAqLwogCQlJTklUX0NPTVBMRVRJT04oa2ltX2dkYXRhLT5sZGlzY19pbnN0YWxsZWQpOwotI2lmbmRlZiBMRUdBQ1lfUkZLSUxMX1NVUFBPUlQKKyNpZiAwIC8qIG9sZGVyIHdheSBvZiBzaWduYWxsaW5nIHVzZXItc3BhY2UgVUlNICovCiAJCS8qIHNlbmQgc2lnbmFsIHRvIFVJTSAqLwogCQllcnIgPSBraWxsX3BpZChmaW5kX2dldF9waWQoa2ltX2dkYXRhLT51aW1fcGlkKSwgU0lHVVNSMiwgMCk7CiAJCWlmIChlcnIgIT0gMCkgewogCQkJcHJfaW5mbygiIHNlbmRpbmcgU0lHVVNSMiB0byB1aW0gZmFpbGVkICVsZCIsIGVycik7Ci0JCQllcnIgPSBTVF9FUlJfRkFJTFVSRTsKKwkJCWVyciA9IC0xOwogCQkJY29udGludWU7CiAJCX0KLSNlbHNlCisjZW5kaWYKIAkJLyogdW5ibG9jayBhbmQgc2VuZCBldmVudCB0byBVSU0gdmlhIC9kZXYvcmZraWxsICovCiAJCXJma2lsbF9zZXRfaHdfc3RhdGUoa2ltX2dkYXRhLT5yZmtpbGxbU1RfQlRdLCAwKTsKLSNlbmRpZgogCQkvKiB3YWl0IGZvciBsZGlzYyB0byBiZSBpbnN0YWxsZWQgKi8KIAkJZXJyID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZraW1fZ2RhdGEtPmxkaXNjX2luc3RhbGxlZCwKIAkJCQltc2Vjc190b19qaWZmaWVzKExESVNDX1RJTUUpKTsKIAkJaWYgKCFlcnIpIHsJLyogdGltZW91dCAqLwogCQkJcHJfZXJyKCJsaW5lIGRpc2MgaW5zdGFsbGF0aW9uIHRpbWVkIG91dCAiKTsKLQkJCWVyciA9IFNUX0VSUl9GQUlMVVJFOworCQkJZXJyID0gLTE7CiAJCQljb250aW51ZTsKIAkJfSBlbHNlIHsKIAkJCS8qIGxkaXNjIGluc3RhbGxlZCBub3cgKi8KIAkJCXByX2luZm8oIiBsaW5lIGRpc2NpcGxpbmUgaW5zdGFsbGVkICIpOwotCQkJZXJyID0gZG93bmxvYWRfZmlybXdhcmUoKTsKLQkJCWlmIChlcnIgIT0gU1RfU1VDQ0VTUykgeworCQkJZXJyID0gZG93bmxvYWRfZmlybXdhcmUoa2ltX2dkYXRhKTsKKwkJCWlmIChlcnIgIT0gMCkgewogCQkJCXByX2VycigiZG93bmxvYWQgZmlybXdhcmUgZmFpbGVkIik7CiAJCQkJY29udGludWU7CiAJCQl9IGVsc2UgewkvKiBvbiBzdWNjZXNzIGRvbid0IHJldHJ5ICovCkBAIC00ODQsMzEgKzQ4MiwzMyBAQAogCXJldHVybiBlcnI7CiB9CiAKLS8qIGNhbGxlZCBmcm9tIFNUIENvcmUsIG9uIHRoZSBsYXN0IHVuLXJlZ2lzdHJhdGlvbgotKi8KLWxvbmcgc3Rfa2ltX3N0b3Aodm9pZCkKKy8qKgorICogc3Rfa2ltX3N0b3AgLSBjYWxsZWQgZnJvbSBTVCBDb3JlLCBvbiB0aGUgbGFzdCB1bi1yZWdpc3RyYXRpb24KKyAqCXRvZ2dsZSBsb3cgdGhlIGNoaXAgZW5hYmxlIGdwaW8KKyAqLworbG9uZyBzdF9raW1fc3RvcCh2b2lkICpraW1fZGF0YSkKIHsKLQlsb25nIGVyciA9IFNUX1NVQ0NFU1M7CisJbG9uZyBlcnIgPSAwOworCXN0cnVjdCBraW1fZGF0YV9zCSpraW1fZ2RhdGEgPSAoc3RydWN0IGtpbV9kYXRhX3MgKilraW1fZGF0YTsKIAogCUlOSVRfQ09NUExFVElPTihraW1fZ2RhdGEtPmxkaXNjX2luc3RhbGxlZCk7Ci0jaWZuZGVmIExFR0FDWV9SRktJTExfU1VQUE9SVAorI2lmIDAgLyogb2xkZXIgd2F5IG9mIHNpZ25hbGxpbmcgdXNlci1zcGFjZSBVSU0gKi8KIAkvKiBzZW5kIHNpZ25hbCB0byBVSU0gKi8KIAllcnIgPSBraWxsX3BpZChmaW5kX2dldF9waWQoa2ltX2dkYXRhLT51aW1fcGlkKSwgU0lHVVNSMiwgMSk7CiAJaWYgKGVyciAhPSAwKSB7CiAJCXByX2Vycigic2VuZGluZyBTSUdVU1IyIHRvIHVpbSBmYWlsZWQgJWxkIiwgZXJyKTsKLQkJcmV0dXJuIFNUX0VSUl9GQUlMVVJFOworCQlyZXR1cm4gLTE7CiAJfQotI2Vsc2UKKyNlbmRpZgogCS8qIHNldCBCVCByZmtpbGwgdG8gYmUgYmxvY2tlZCAqLwogCWVyciA9IHJma2lsbF9zZXRfaHdfc3RhdGUoa2ltX2dkYXRhLT5yZmtpbGxbU1RfQlRdLCAxKTsKLSNlbmRpZgogCiAJLyogd2FpdCBmb3IgbGRpc2MgdG8gYmUgdW4taW5zdGFsbGVkICovCiAJZXJyID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZraW1fZ2RhdGEtPmxkaXNjX2luc3RhbGxlZCwKIAkJCW1zZWNzX3RvX2ppZmZpZXMoTERJU0NfVElNRSkpOwogCWlmICghZXJyKSB7CQkvKiB0aW1lb3V0ICovCiAJCXByX2VycigiIHRpbWVkIG91dCB3YWl0aW5nIGZvciBsZGlzYyB0byBiZSB1bi1pbnN0YWxsZWQiKTsKLQkJcmV0dXJuIFNUX0VSUl9GQUlMVVJFOworCQlyZXR1cm4gLTE7CiAJfQogCiAJLyogQnkgZGVmYXVsdCBjb25maWd1cmUgQlQgblNodXRkb3duIHRvIExPVyBzdGF0ZSAqLwpAQCAtNTIyLDM3ICs1MjIsMjQgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBmdW5jdGlvbnMgY2FsbGVkIGZyb20gc3Vic3lzdGVtcyAqLworLyogY2FsbGVkIHdoZW4gZGVidWdmcyBlbnRyeSBpcyByZWFkIGZyb20gKi8KIAotI2lmbmRlZiBMRUdBQ1lfUkZLSUxMX1NVUFBPUlQKLS8qIGNhbGxlZCB3aGVuIHN5c2ZzIGVudHJ5IGlzIHdyaXR0ZW4gdG8gKi8KLXN0YXRpYyBzc2l6ZV90IHN0b3JlX3BpZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCi0JCQkgKmRldmF0dHIsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorc3RhdGljIGludCBzaG93X3ZlcnNpb24oc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpCiB7Ci0JcHJfaW5mbygiJXM6IHBpZCAlcyAiLCBfX2Z1bmNfXywgYnVmKTsKLQlzc2NhbmYoYnVmLCAiJWxkIiwgJmtpbV9nZGF0YS0+dWltX3BpZCk7Ci0JLyogdG8gYmUgbWFkZSB1c2UgYnkga2ltX3N0YXJ0IHRvIHNpZ25hbCBTSUdVU1IyCi0JICovCi0JcmV0dXJuIHN0cmxlbihidWYpOworCXN0cnVjdCBraW1fZGF0YV9zICpraW1fZ2RhdGEgPSAoc3RydWN0IGtpbV9kYXRhX3MgKilzLT5wcml2YXRlOworCXNlcV9wcmludGYocywgIiUwNFggJWQuJWQuJWRcbiIsIGtpbV9nZGF0YS0+dmVyc2lvbi5mdWxsLAorCQkJa2ltX2dkYXRhLT52ZXJzaW9uLmNoaXAsIGtpbV9nZGF0YS0+dmVyc2lvbi5tYWpfdmVyLAorCQkJa2ltX2dkYXRhLT52ZXJzaW9uLm1pbl92ZXIpOworCXJldHVybiAwOwogfQogCi0vKiBjYWxsZWQgd2hlbiBzeXNmcyBlbnRyeSBpcyByZWFkIGZyb20gKi8KLXN0YXRpYyBzc2l6ZV90IHNob3dfcGlkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUKLQkJCSphdHRyLCBjaGFyICpidWYpCitzdGF0aWMgaW50IHNob3dfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZCkKIHsKLQlzcHJpbnRmKGJ1ZiwgIiVsZCIsIGtpbV9nZGF0YS0+dWltX3BpZCk7Ci0JcmV0dXJuIHN0cmxlbihidWYpOworCXN0cnVjdCBraW1fZGF0YV9zICpraW1fZ2RhdGEgPSAoc3RydWN0IGtpbV9kYXRhX3MgKilzLT5wcml2YXRlOworCWtpbV9zdF9saXN0X3Byb3RvY29scyhraW1fZ2RhdGEtPmNvcmVfZGF0YSwgcyk7CisJcmV0dXJuIDA7CiB9CiAKLS8qIGNhbGxlZCB3aGVuIHN5c2ZzIGVudHJ5IGlzIHJlYWQgZnJvbSAqLwotc3RhdGljIHNzaXplX3Qgc2hvd19saXN0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUKLQkJCSAqYXR0ciwgY2hhciAqYnVmKQotewotCWtpbV9zdF9saXN0X3Byb3RvY29scyhraW1fZ2RhdGEtPmNvcmVfZGF0YSwgYnVmKTsKLQlyZXR1cm4gc3RybGVuKGJ1Zik7Ci19Ci0KLSNlbHNlIC8qIExFR0FDWV9SRktJTExfU1VQUE9SVCAqLwotCiAvKiBmdW5jdGlvbiBjYWxsZWQgZnJvbSByZmtpbGwgc3Vic3lzdGVtLCB3aGVuIHNvbWVvbmUgZnJvbQogICogdXNlciBzcGFjZSB3b3VsZCB3cml0ZSAwLzEgb24gdGhlIHN5c2ZzIGVudHJ5CiAgKiAvc3lzL2NsYXNzL3Jma2lsbC9yZmtpbGwwLDEsMy9zdGF0ZQpAQCAtNTYwLDcgKzU0Nyw3IEBACiBzdGF0aWMgaW50IGtpbV90b2dnbGVfcmFkaW8odm9pZCAqZGF0YSwgYm9vbCBibG9ja2VkKQogewogCWVudW0gcHJvdG9fdHlwZSB0eXBlID0gKigoZW51bSBwcm90b190eXBlICopZGF0YSk7Ci0JcHJfaW5mbygiICVzOiAlZCAiLCBfX2Z1bmNfXywgdHlwZSk7CisJcHJfZGVidWcoIiAlczogJWQgIiwgX19mdW5jX18sIHR5cGUpOwogCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBTVF9CVDoKQEAgLTU3NywzMyArNTY0LDc5IEBACiAJCXByX2VycigiIHdyb25nIHByb3RvIHR5cGUgIik7CiAJYnJlYWs7CiAJfQotCXJldHVybiBTVF9TVUNDRVNTOworCXJldHVybiAwOwogfQogCi0jZW5kaWYJLyogTEVHQUNZX1JGS0lMTF9TVVBQT1JUICovCi0KKy8qKgorICogc3Rfa2ltX3JlZiAtIHJlZmVyZW5jZSB0aGUgY29yZSdzIGRhdGEKKyAqCVRoaXMgcmVmZXJlbmNlcyB0aGUgcGVyLVNUIHBsYXRmb3JtIGRldmljZSBpbiB0aGUgYXJjaC94eC8KKyAqCWJvYXJkLXh4LmMgZmlsZS4KKyAqCVRoaXMgd291bGQgZW5hYmxlIG11bHRpcGxlIHN1Y2ggcGxhdGZvcm0gZGV2aWNlcyB0byBleGlzdAorICoJb24gYSBnaXZlbiBwbGF0Zm9ybQorICovCiB2b2lkIHN0X2tpbV9yZWYoc3RydWN0IHN0X2RhdGFfcyAqKmNvcmVfZGF0YSkKIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwZGV2OworCXN0cnVjdCBraW1fZGF0YV9zCSpraW1fZ2RhdGE7CisJLyogZ2V0IGtpbV9nZGF0YSByZWZlcmVuY2UgZnJvbSBwbGF0Zm9ybSBkZXZpY2UgKi8KKwlwZGV2ID0gc3RfZ2V0X3BsYXRfZGV2aWNlKCk7CisJa2ltX2dkYXRhID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOwogCSpjb3JlX2RhdGEgPSBraW1fZ2RhdGEtPmNvcmVfZGF0YTsKIH0KIAorc3RhdGljIGludCBraW1fdmVyc2lvbl9vcGVuKHN0cnVjdCBpbm9kZSAqaSwgc3RydWN0IGZpbGUgKmYpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGYsIHNob3dfdmVyc2lvbiwgaS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGludCBraW1fbGlzdF9vcGVuKHN0cnVjdCBpbm9kZSAqaSwgc3RydWN0IGZpbGUgKmYpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGYsIHNob3dfbGlzdCwgaS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmVyc2lvbl9kZWJ1Z2ZzX2ZvcHMgPSB7CisJLyogdmVyc2lvbiBpbmZvICovCisJLm9wZW4gPSBraW1fdmVyc2lvbl9vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxpc3RfZGVidWdmc19mb3BzID0geworCS8qIHByb3RvY29scyBpbmZvICovCisJLm9wZW4gPSBraW1fbGlzdF9vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBmdW5jdGlvbnMgY2FsbGVkIGZyb20gcGxhdGZvcm0gZGV2aWNlIGRyaXZlciBzdWJzeXN0ZW0KICAqIG5lZWQgdG8gaGF2ZSBhIHJlbGV2YW50IHBsYXRmb3JtIGRldmljZSBlbnRyeSBpbiB0aGUgcGxhdGZvcm0ncwogICogYm9hcmQtKi5jIGZpbGUKICAqLwogCitzdHJ1Y3QgZGVudHJ5ICpraW1fZGVidWdmc19kaXI7CiBzdGF0aWMgaW50IGtpbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWxvbmcgc3RhdHVzOwogCWxvbmcgcHJvdG87CiAJbG9uZyAqZ3Bpb3MgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qga2ltX2RhdGFfcwkqa2ltX2dkYXRhOworCisJa2ltX2dkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGtpbV9kYXRhX3MpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWtpbV9nZGF0YSkgeworCQlwcl9lcnIoIm5vIG1lbSB0byBhbGxvY2F0ZSIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGtpbV9nZGF0YSk7CiAKIAlzdGF0dXMgPSBzdF9jb3JlX2luaXQoJmtpbV9nZGF0YS0+Y29yZV9kYXRhKTsKIAlpZiAoc3RhdHVzICE9IDApIHsKIAkJcHJfZXJyKCIgU1QgY29yZSBpbml0IGZhaWxlZCIpOwotCQlyZXR1cm4gU1RfRVJSX0ZBSUxVUkU7CisJCXJldHVybiAtMTsKIAl9CisJLyogcmVmZXIgdG8gaXRzZWxmICovCisJa2ltX2dkYXRhLT5jb3JlX2RhdGEtPmtpbV9kYXRhID0ga2ltX2dkYXRhOwogCiAJZm9yIChwcm90byA9IDA7IHByb3RvIDwgU1RfTUFYOyBwcm90bysrKSB7CiAJCWtpbV9nZGF0YS0+Z3Bpb3NbcHJvdG9dID0gZ3Bpb3NbcHJvdG9dOwpAQCAtNjM5LDMwICs2NzIsMTIgQEAKIAkJCXJldHVybiBzdGF0dXM7CiAJCX0KIAl9Ci0jaWZuZGVmIExFR0FDWV9SRktJTExfU1VQUE9SVAotCS8qIHBkZXYgdG8gY29udGFpbiBCVCwgRk0gYW5kIEdQUyBlbmFibGUvTi1TaHV0ZG93biBHUElPcwotCSAqIGV4ZWN1dGUgcmVxdWVzdF9ncGlvLCBzZXQgb3V0cHV0IGRpcmVjdGlvbgotCSAqLwotCWtpbV9nZGF0YS0+a2ltX2tvYmogPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKCJ1aW0iLCBOVUxMKTsKLQkvKiBjcmVhdGUgdGhlIHN5c2ZzIGVudHJ5IGZvciBVSU0gdG8gcHV0IGluIHBpZCAqLwotCWlmIChzeXNmc19jcmVhdGVfZ3JvdXAoa2ltX2dkYXRhLT5raW1fa29iaiwgJnVpbV9hdHRyX2dycCkpIHsKLQkJcHJfZXJyKCIgc3lzZnMgZW50cnkgY3JlYXRpb24gZmFpbGVkIik7Ci0JCWtvYmplY3RfcHV0KGtpbV9nZGF0YS0+a2ltX2tvYmopOwotCQkvKiBmcmVlIHJlcXVlc3RlZCBHUElPcyBhbmQgZmFpbCBwcm9iZSAqLwotCQlmb3IgKHByb3RvID0gU1RfQlQ7IHByb3RvIDwgU1RfTUFYOyBwcm90bysrKSB7Ci0JCQlpZiAoZ3Bpb3NbcHJvdG9dICE9IC0xKQotCQkJCWdwaW9fZnJlZShncGlvc1twcm90b10pOwotCQl9Ci0JCXJldHVybiAtMTsJLyogZmFpbCBpbnNtb2QgKi8KLQl9Ci0JcHJfaW5mbygiIHN5c2ZzIGVudHJ5IGNyZWF0ZWQgIik7Ci0jZW5kaWYKIAkvKiBnZXQgcmVmZXJlbmNlIG9mIHBkZXYgZm9yIHJlcXVlc3RfZmlybXdhcmUKIAkgKi8KIAlraW1fZ2RhdGEtPmtpbV9wZGV2ID0gcGRldjsKIAlpbml0X2NvbXBsZXRpb24oJmtpbV9nZGF0YS0+a2ltX3JjdmQpOwogCWluaXRfY29tcGxldGlvbigma2ltX2dkYXRhLT5sZGlzY19pbnN0YWxsZWQpOwotI2lmZGVmIExFR0FDWV9SRktJTExfU1VQUE9SVAorCiAJZm9yIChwcm90byA9IDA7IChwcm90byA8IFNUX01BWCkgJiYgKGdwaW9zW3Byb3RvXSAhPSAtMSk7IHByb3RvKyspIHsKIAkJLyogVE9ETzogc2hvdWxkIGFsbCB0eXBlcyBiZSByZmtpbGxfdHlwZV9idCA/ICovCiAJCWtpbV9nZGF0YS0+cmZfcHJvdG9zW3Byb3RvXSA9IHByb3RvOwpAQCAtNjg1LDggKzcwMCwyMCBAQAogCQl9CiAJCXByX2luZm8oInJma2lsbCBlbnRyeSBjcmVhdGVkIGZvciAlbGQiLCBncGlvc1twcm90b10pOwogCX0KLSNlbmRpZgotCXJldHVybiBTVF9TVUNDRVNTOworCisJa2ltX2RlYnVnZnNfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJ0aS1zdCIsIE5VTEwpOworCWlmIChJU19FUlIoa2ltX2RlYnVnZnNfZGlyKSkgeworCQlwcl9lcnIoIiBkZWJ1Z2ZzIGVudHJpZXMgY3JlYXRpb24gZmFpbGVkICIpOworCQlraW1fZGVidWdmc19kaXIgPSBOVUxMOworCQlyZXR1cm4gLTE7CisJfQorCisJZGVidWdmc19jcmVhdGVfZmlsZSgidmVyc2lvbiIsIFNfSVJVR08sIGtpbV9kZWJ1Z2ZzX2RpciwKKwkJCQlraW1fZ2RhdGEsICZ2ZXJzaW9uX2RlYnVnZnNfZm9wcyk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgicHJvdG9jb2xzIiwgU19JUlVHTywga2ltX2RlYnVnZnNfZGlyLAorCQkJCWtpbV9nZGF0YSwgJmxpc3RfZGVidWdmc19mb3BzKTsKKwlwcl9pbmZvKCIgZGVidWdmcyBlbnRyaWVzIGNyZWF0ZWQgIik7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQga2ltX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtNjk1LDI3ICs3MjIsMjcgQEAKIAkgKi8KIAlsb25nICpncGlvcyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWxvbmcgcHJvdG87CisJc3RydWN0IGtpbV9kYXRhX3MJKmtpbV9nZGF0YTsKKworCWtpbV9nZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKIAogCWZvciAocHJvdG8gPSAwOyAocHJvdG8gPCBTVF9NQVgpICYmIChncGlvc1twcm90b10gIT0gLTEpOyBwcm90bysrKSB7CiAJCS8qIENsYWltIHRoZSBCbHVldG9vdGgvRk0vR1BJTwogCQkgKiBuU2h1dGRvd24gZ3BpbyBmcm9tIHRoZSBzeXN0ZW0KIAkJICovCiAJCWdwaW9fZnJlZShncGlvc1twcm90b10pOwotI2lmZGVmIExFR0FDWV9SRktJTExfU1VQUE9SVAogCQlyZmtpbGxfdW5yZWdpc3RlcihraW1fZ2RhdGEtPnJma2lsbFtwcm90b10pOwogCQlyZmtpbGxfZGVzdHJveShraW1fZ2RhdGEtPnJma2lsbFtwcm90b10pOwogCQlraW1fZ2RhdGEtPnJma2lsbFtwcm90b10gPSBOVUxMOwotI2VuZGlmCiAJfQogCXByX2luZm8oImtpbTogR1BJTyBGcmVlZCIpOwotI2lmbmRlZiBMRUdBQ1lfUkZLSUxMX1NVUFBPUlQKLQkvKiBkZWxldGUgdGhlIHN5c2ZzIGVudHJpZXMgKi8KLQlzeXNmc19yZW1vdmVfZ3JvdXAoa2ltX2dkYXRhLT5raW1fa29iaiwgJnVpbV9hdHRyX2dycCk7Ci0Ja29iamVjdF9wdXQoa2ltX2dkYXRhLT5raW1fa29iaik7Ci0jZW5kaWYKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoa2ltX2RlYnVnZnNfZGlyKTsKIAlraW1fZ2RhdGEtPmtpbV9wZGV2ID0gTlVMTDsKIAlzdF9jb3JlX2V4aXQoa2ltX2dkYXRhLT5jb3JlX2RhdGEpOwotCXJldHVybiBTVF9TVUNDRVNTOworCisJa2ZyZWUoa2ltX2dkYXRhKTsKKwlraW1fZ2RhdGEgPSBOVUxMOworCXJldHVybiAwOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTcyMywyNyArNzUwLDE5IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHN0X2tpbV9pbml0KHZvaWQpCiB7Ci0JbG9uZyByZXQgPSBTVF9TVUNDRVNTOwotCWtpbV9nZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBraW1fZGF0YV9zKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFraW1fZ2RhdGEpIHsKLQkJcHJfZXJyKCJubyBtZW0gdG8gYWxsb2NhdGUiKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCisJbG9uZyByZXQgPSAwOwogCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigma2ltX3BsYXRmb3JtX2RyaXZlcik7CiAJaWYgKHJldCAhPSAwKSB7CiAJCXByX2VycigicGxhdGZvcm0gZHJ2IHJlZ2lzdHJhdGlvbiBmYWlsZWQiKTsKLQkJcmV0dXJuIFNUX0VSUl9GQUlMVVJFOworCQlyZXR1cm4gLTE7CiAJfQotCXJldHVybiBTVF9TVUNDRVNTOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc3Rfa2ltX2RlaW5pdCh2b2lkKQogewogCS8qIHRoZSBmb2xsb3dpbmcgcmV0dXJucyB2b2lkICovCiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmtpbV9wbGF0Zm9ybV9kcml2ZXIpOwotCWtmcmVlKGtpbV9nZGF0YSk7Ci0Ja2ltX2dkYXRhID0gTlVMTDsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGktc3Qvc3Rfa2ltLmggYi9kcml2ZXJzL3N0YWdpbmcvdGktc3Qvc3Rfa2ltLmgKaW5kZXggZmYzMjcwZS4uN2RlMjU0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpLXN0L3N0X2tpbS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9zdF9raW0uaApAQCAtNDMsNTAgKzQzLDcyIEBACiAgKiBzaW5jZSB0aGUgc2VsZi10ZXN0IGZvciBjaGlwIHRha2VzIGEgd2hpbGUKICAqLwogI2RlZmluZSBQT1JfUkVUUllfQ09VTlQgNQotLyoKLSAqIGxlZ2FjeSByZmtpbGwgc3VwcG9ydCB3aGVyZS1pbiAzIHJma2lsbAotICogZGV2aWNlcyBhcmUgY3JlYXRlZCBmb3IgdGhlIDMgZ3Bpb3MKLSAqIHRoYXQgU1QgaGFzIHJlcXVlc3RlZAorCisvKioKKyAqIHN0cnVjdCBjaGlwX3ZlcnNpb24gLSBzYXZlIHRoZSBjaGlwIHZlcnNpb24KICAqLwotI2RlZmluZSBMRUdBQ1lfUkZLSUxMX1NVUFBPUlQKLS8qCi0gKiBoZWFkZXIgZmlsZSBmb3IgU1QgcHJvdmlkZWQgYnkgS0lNCitzdHJ1Y3QgY2hpcF92ZXJzaW9uIHsKKwl1bnNpZ25lZCBzaG9ydCBmdWxsOworCXVuc2lnbmVkIHNob3J0IGNoaXA7CisJdW5zaWduZWQgc2hvcnQgbWluX3ZlcjsKKwl1bnNpZ25lZCBzaG9ydCBtYWpfdmVyOworfTsKKworLyoqCisgKiBzdHJ1Y3Qga2ltX2RhdGFfcyAtIHRoZSBLSU0gaW50ZXJuYWwgZGF0YSwgZW1iZWRkZWQgYXMgdGhlCisgKglwbGF0Zm9ybSdzIGRydiBkYXRhLiBPbmUgZm9yIGVhY2ggU1QgZGV2aWNlIGluIHRoZSBzeXN0ZW0uCisgKiBAdWltX3BpZDogS0lNIG5lZWRzIHRvIGNvbW11bmljYXRlIHdpdGggVUlNIHRvIHJlcXVlc3QgdG8gaW5zdGFsbAorICoJdGhlIGxkaXNjIGJ5IG9wZW5pbmcgVUFSVCB3aGVuIHByb3RvY29sIGRyaXZlcnMgcmVnaXN0ZXIuCisgKiBAa2ltX3BkZXY6IHRoZSBwbGF0Zm9ybSBkZXZpY2UgYWRkZWQgaW4gb25lIG9mIHRoZSBib2FyZC1YWC5jIGZpbGUKKyAqCWluIGFyY2gvWFgvIGRpcmVjdG9yeSwgMSBmb3IgZWFjaCBTVCBkZXZpY2UuCisgKiBAa2ltX3JjdmQ6IGNvbXBsZXRpb24gaGFuZGxlciB0byBub3RpZnkgd2hlbiBkYXRhIHdhcyByZWNlaXZlZCwKKyAqCW1haW5seSB1c2VkIGR1cmluZyBmdyBkb3dubG9hZCwgd2hpY2ggaW52b2x2ZXMgbXVsdGlwbGUgc2VuZC93YWl0CisgKglmb3IgZWFjaCBvZiB0aGUgSENJLVZTIGNvbW1hbmRzLgorICogQGxkaXNjX2luc3RhbGxlZDogY29tcGxldGlvbiBoYW5kbGVyIHRvIG5vdGlmeSB0aGF0IHRoZSBVSU0gYWNjZXB0ZWQKKyAqCXRoZSByZXF1ZXN0IHRvIGluc3RhbGwgbGRpc2MsIG5vdGlmeSBmcm9tIHR0eV9vcGVuIHdoaWNoIHN1Z2dlc3RzCisgKgl0aGUgbGRpc2Mgd2FzIHByb3Blcmx5IGluc3RhbGxlZC4KKyAqIEByZXNwX2J1ZmZlcjogZGF0YSBidWZmZXIgZm9yIHRoZSAuYnRzIGZ3IGZpbGUgbmFtZS4KKyAqIEBmd19lbnRyeTogZmlybXdhcmUgY2xhc3Mgc3RydWN0IHRvIHJlcXVlc3QvcmVsZWFzZSB0aGUgZncuCisgKiBAZ3Bpb3M6IHRoZSBsaXN0IG9mIGNvcmUvY2hpcCBlbmFibGUgZ3Bpb3MgZm9yIEJULCBGTSBhbmQgR1BTIGNvcmVzLgorICogQHJ4X3N0YXRlOiB0aGUgcnggc3RhdGUgZm9yIGtpbSdzIHJlY2VpdmUgZnVuYyBkdXJpbmcgZncgZG93bmxvYWQuCisgKiBAcnhfY291bnQ6IHRoZSByeCBjb3VudCBmb3IgdGhlIGtpbSdzIHJlY2VpdmUgZnVuYyBkdXJpbmcgZncgZG93bmxvYWQuCisgKiBAcnhfc2tiOiBhbGwgb2YgZncgZGF0YSBtaWdodCBub3QgY29tZSBhdCBvbmNlLCBhbmQgaGVuY2UgZGF0YSBzdG9yYWdlIGZvcgorICoJd2hvbGUgb2YgdGhlIGZ3IHJlc3BvbnNlLCBvbmx5IEhDSV9FVkVOVHMgYW5kIGhlbmNlIGRpZmYgZnJvbSBTVCdzCisgKglyZXNwb25zZS4KKyAqIEByZmtpbGw6IHJma2lsbCBkYXRhIGZvciBlYWNoIG9mIHRoZSBjb3JlcyB0byBiZSByZWdpc3RlcmVkIHdpdGggcmZraWxsLgorICogQHJmX3Byb3RvczogcHJvdG8gdHlwZXMgb2YgdGhlIGRhdGEgcmVnaXN0ZXJlZCB3aXRoIHJma2lsbCBzdWItc3lzdGVtLgorICogQGNvcmVfZGF0YTogU1QgY29yZSdzIGRhdGEsIHdoaWNoIG1haW5seSBpcyB0aGUgdHR5J3MgZGlzY19kYXRhCisgKiBAdmVyc2lvbjogY2hpcCB2ZXJzaW9uIGF2YWlsYWJsZSB2aWEgYSBzeXNmcyBlbnRyeS4KKyAqCiAgKi8KIHN0cnVjdCBraW1fZGF0YV9zIHsKIAlsb25nIHVpbV9waWQ7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqa2ltX3BkZXY7CiAJc3RydWN0IGNvbXBsZXRpb24ga2ltX3JjdmQsIGxkaXNjX2luc3RhbGxlZDsKLQkvKiBNQVggbGVuIG9mIHRoZSAuYnRzIGZpcm13YXJlIHNjcmlwdCBuYW1lICovCiAJY2hhciByZXNwX2J1ZmZlclszMF07CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKIAlsb25nIGdwaW9zW1NUX01BWF07Ci0Jc3RydWN0IGtvYmplY3QgKmtpbV9rb2JqOwotLyogdXNlZCBieSBraW1faW50X3JlY3YgdG8gdmFsaWRhdGUgZncgcmVzcG9uc2UgKi8KIAl1bnNpZ25lZCBsb25nIHJ4X3N0YXRlOwogCXVuc2lnbmVkIGxvbmcgcnhfY291bnQ7CiAJc3RydWN0IHNrX2J1ZmYgKnJ4X3NrYjsKLSNpZmRlZiBMRUdBQ1lfUkZLSUxMX1NVUFBPUlQKIAlzdHJ1Y3QgcmZraWxsICpyZmtpbGxbU1RfTUFYXTsKIAllbnVtIHByb3RvX3R5cGUgcmZfcHJvdG9zW1NUX01BWF07Ci0jZW5kaWYKIAlzdHJ1Y3Qgc3RfZGF0YV9zICpjb3JlX2RhdGE7CisJc3RydWN0IGNoaXBfdmVyc2lvbiB2ZXJzaW9uOwogfTsKIAotbG9uZyBzdF9raW1fc3RhcnQodm9pZCk7Ci1sb25nIHN0X2tpbV9zdG9wKHZvaWQpOwotLyoKLSAqIGNhbGxlZCBmcm9tIHN0X3R0eV9yZWNlaXZlIHRvIGF1dGhlbnRpY2F0ZSBmd19kb3dubG9hZAorLyoqCisgKiBmdW5jdGlvbnMgY2FsbGVkIHdoZW4gMSBvZiB0aGUgcHJvdG9jb2wgZHJpdmVycyBnZXRzCisgKiByZWdpc3RlcmVkLCB0aGVzZSBuZWVkIHRvIGNvbW11bmljYXRlIHdpdGggVUlNIHRvIHJlcXVlc3QKKyAqIGxkaXNjIGluc3RhbGxlZCwgcmVhZCBjaGlwX3ZlcnNpb24sIGRvd25sb2FkIHJlbGV2YW50IGZ3CiAgKi8KK2xvbmcgc3Rfa2ltX3N0YXJ0KHZvaWQgKik7Citsb25nIHN0X2tpbV9zdG9wKHZvaWQgKik7CisKIHZvaWQgc3Rfa2ltX3JlY3Yodm9pZCAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICosIGxvbmcgY291bnQpOwotCiB2b2lkIHN0X2tpbV9jaGlwX3RvZ2dsZShlbnVtIHByb3RvX3R5cGUsIGVudW0ga2ltX2dwaW9fc3RhdGUpOwotCi12b2lkIHN0X2tpbV9jb21wbGV0ZSh2b2lkKTsKLQotLyogZnVuY3Rpb24gY2FsbGVkIGZyb20gU1QgS0lNIHRvIFNUIENvcmUsIHRvCi0gKiBsaXN0IG91dCB0aGUgcHJvdG9jb2xzIHJlZ2lzdGVyZWQKLSAqLwotdm9pZCBraW1fc3RfbGlzdF9wcm90b2NvbHMoc3RydWN0IHN0X2RhdGFfcyAqLCBjaGFyICopOwordm9pZCBzdF9raW1fY29tcGxldGUodm9pZCAqKTsKK3ZvaWQga2ltX3N0X2xpc3RfcHJvdG9jb2xzKHN0cnVjdCBzdF9kYXRhX3MgKiwgdm9pZCAqKTsKIAogLyoKICAqIEJUUyBoZWFkZXJzCkBAIC05OCw5ICsxMjAsMTMgQEAKICNkZWZpbmUgQUNUSU9OX1JVTl9TQ1JJUFQgICAgICAgNQogI2RlZmluZSBBQ1RJT05fUkVNQVJLUyAgICAgICAgICA2CiAKLS8qCi0gKiAgKiBCUkYgRmlybXdhcmUgaGVhZGVyCi0gKiAgICovCisvKioKKyAqIHN0cnVjdCBidHNfaGVhZGVyIC0gdGhlIGZ3IGZpbGUgaXMgTk9UIGJpbmFyeSB3aGljaCBjYW4KKyAqCWJlIHNlbnQgb250byBUVFkgYXMgaXMuIFRoZSAuYnRzIGlzIG1vcmUgYSBzY3JpcHQKKyAqCWZpbGUgd2hpY2ggaGFzIGRpZmZlcmVudCB0eXBlcyBvZiBhY3Rpb25zLgorICoJRWFjaCBzdWNoIGFjdGlvbiBuZWVkcyB0byBiZSBwYXJzZWQgYnkgdGhlIEtJTSBhbmQKKyAqCXJlbGV2YW50IHByb2NlZHVyZSB0byBiZSBjYWxsZWQuCisgKi8KIHN0cnVjdCBidHNfaGVhZGVyIHsKIAl1aW50MzJfdCBtYWdpYzsKIAl1aW50MzJfdCB2ZXJzaW9uOwpAQCAtMTA4LDkgKzEzNCwxMCBAQAogCXVpbnQ4X3QgYWN0aW9uc1swXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0vKgotICogICogQlJGIEFjdGlvbnMgc3RydWN0dXJlCi0gKiAgICovCisvKioKKyAqIHN0cnVjdCBidHNfYWN0aW9uIC0gRWFjaCAuYnRzIGFjdGlvbiBoYXMgaXRzIG93biB0eXBlIG9mCisgKglkYXRhLgorICovCiBzdHJ1Y3QgYnRzX2FjdGlvbiB7CiAJdWludDE2X3QgdHlwZTsKIAl1aW50MTZfdCBzaXplOwpAQCAtMTM2LDggKzE2MywxMSBAQAogCXVpbnQzMl90IGZsb3dfY29udHJvbDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0vKiBmb3IgaWRlbnRpZnlpbmcgdGhlIGNoYW5nZSBzcGVlZCBIQ0kgVlMKLSAqIGNvbW1hbmQKKy8qKgorICogc3RydWN0IGhjaV9jb21tYW5kIC0gdGhlIEhDSS1WUyBmb3IgaW50cmVwcmV0aW5nCisgKgl0aGUgY2hhbmdlIGJhdWQgcmF0ZSBvZiBob3N0LXNpZGUgVUFSVCwgd2hpY2gKKyAqCW5lZWRzIHRvIGJlIGlnbm9yZWQsIHNpbmNlIFVJTSB3b3VsZCBkbyB0aGF0CisgKgl3aGVuIGl0IHJlY2VpdmVzIHJlcXVlc3QgZnJvbSBLSU0gZm9yIGxkaXNjIGluc3RhbGxhdGlvbi4KICAqLwogc3RydWN0IGhjaV9jb21tYW5kIHsKIAl1aW50OF90IHByZWZpeDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9zdF9sbC5jIGIvZHJpdmVycy9zdGFnaW5nL3RpLXN0L3N0X2xsLmMKaW5kZXggMDY4NWExMC4uN2ExZmI2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpLXN0L3N0X2xsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpLXN0L3N0X2xsLmMKQEAgLTM0LDcgKzM0LDcgQEAKIAogc3RhdGljIHZvaWQgbGxfZGV2aWNlX3dhbnRfdG9fc2xlZXAoc3RydWN0IHN0X2RhdGFfcyAqc3RfZGF0YSkKIHsKLQlwcl9pbmZvKCIlcyIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiJXMiLCBfX2Z1bmNfXyk7CiAJLyogc2FuaXR5IGNoZWNrICovCiAJaWYgKHN0X2RhdGEtPmxsX3N0YXRlICE9IFNUX0xMX0FXQUtFKQogCQlwcl9lcnIoIkVSUiBoY2lsbDogU1RfTExfR09fVE9fU0xFRVBfSU5EIgpAQCAtMTAxLDcgKzEwMSw3IEBACiAvKiBjYWxsZWQgd2hlbiBTVCBDb3JlIHdhbnRzIHRoZSBzdGF0ZSAqLwogdW5zaWduZWQgbG9uZyBzdF9sbF9nZXRzdGF0ZShzdHJ1Y3Qgc3RfZGF0YV9zICpsbCkKIHsKLQlwcl9pbmZvKCIgcmV0dXJuaW5nIHN0YXRlICVsZCIsIGxsLT5sbF9zdGF0ZSk7CisJcHJfZGVidWcoIiByZXR1cm5pbmcgc3RhdGUgJWxkIiwgbGwtPmxsX3N0YXRlKTsKIAlyZXR1cm4gbGwtPmxsX3N0YXRlOwogfQogCkBAIC0xMjcsOSArMTI3LDkgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJfZXJyKCIgdW5rbm93biBpbnB1dC9zdGF0ZSAiKTsKLQkJcmV0dXJuIFNUX0VSUl9GQUlMVVJFOworCQlyZXR1cm4gLTE7CiAJfQotCXJldHVybiBTVF9TVUNDRVNTOworCXJldHVybiAwOwogfQogCiAvKiBDYWxsZWQgZnJvbSBTVCBDT1JFIHRvIGluaXRpYWxpemUgU1QgTEwgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9zdF9sbC5oIGIvZHJpdmVycy9zdGFnaW5nL3RpLXN0L3N0X2xsLmgKaW5kZXggNzdkZmJmMC4uZTRkZmFjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpLXN0L3N0X2xsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpLXN0L3N0X2xsLmgKQEAgLTQxLDYgKzQxLDcgQEAKICNkZWZpbmUgU1RfTExfQVdBS0VfVE9fQVNMRUVQICAgICAgMwogI2RlZmluZSBTVF9MTF9JTlZBTElECQkgICA0CiAKKy8qIGRpZmZlcmVudCBQTSBub3RpZmljYXRpb25zIGNvbWluZyBmcm9tIGNoaXAgKi8KICNkZWZpbmUgTExfU0xFRVBfSU5ECTB4MzAKICNkZWZpbmUgTExfU0xFRVBfQUNLCTB4MzEKICNkZWZpbmUgTExfV0FLRV9VUF9JTkQJMHgzMgpAQCAtNTAsMTMgKzUxLDE5IEBACiBsb25nIHN0X2xsX2luaXQoc3RydWN0IHN0X2RhdGFfcyAqKTsKIGxvbmcgc3RfbGxfZGVpbml0KHN0cnVjdCBzdF9kYXRhX3MgKik7CiAKLS8qIGVuYWJsZS9kaXNhYmxlIFNUIExMIGFsb25nIHdpdGggS0lNIHN0YXJ0L3N0b3AKKy8qKgorICogZW5hYmxlL2Rpc2FibGUgU1QgTEwgYWxvbmcgd2l0aCBLSU0gc3RhcnQvc3RvcAogICogY2FsbGVkIGJ5IFNUIENvcmUKICAqLwogdm9pZCBzdF9sbF9lbmFibGUoc3RydWN0IHN0X2RhdGFfcyAqKTsKIHZvaWQgc3RfbGxfZGlzYWJsZShzdHJ1Y3Qgc3RfZGF0YV9zICopOwogCisvKioKKyAqIHZhcmlvdXMgZnVuY3MgdXNlZCBieSBTVCBjb3JlIHRvIHNldC9nZXQgdGhlIHZhcmlvdXMgUE0gc3RhdGVzCisgKiBvZiB0aGUgY2hpcC4KKyAqLwogdW5zaWduZWQgbG9uZyBzdF9sbF9nZXRzdGF0ZShzdHJ1Y3Qgc3RfZGF0YV9zICopOwogdW5zaWduZWQgbG9uZyBzdF9sbF9zbGVlcF9zdGF0ZShzdHJ1Y3Qgc3RfZGF0YV9zICosIHVuc2lnbmVkIGNoYXIpOwogdm9pZCBzdF9sbF93YWtldXAoc3RydWN0IHN0X2RhdGFfcyAqKTsKKwogI2VuZGlmIC8qIFNUX0xMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9zeXNmcy11aW0gYi9kcml2ZXJzL3N0YWdpbmcvdGktc3Qvc3lzZnMtdWltCmluZGV4IDEwMzExYWYuLjYyNmJkYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9zeXNmcy11aW0KKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpLXN0L3N5c2ZzLXVpbQpAQCAtMTQsMyArMTQsMTUgQEAKIAkJdW5pbnN0YWxsYXRpb24gd291bGQgYmUgcHBvbGxpbmcgb24gdGhpcyBkZXZpY2UgYW5kIGxpc3RlbmluZwogCQlvbiBldmVudHMgd2hpY2ggd291bGQgc3VnZ2VzdCBlaXRoZXIgdG8gaW5zdGFsbCBvciB1bi1pbnN0YWxsCiAJCWxpbmUgZGlzY2lwbGluZQorCitXaGF0OiAgICAgICAgICAgL3N5cy9rZXJuZWwvZGVidWcvdGktc3QvdmVyc2lvbgorQ29udGFjdDogICAgICAgIFBhdmFuIFNhdm95IDxwYXZhbl9zYXZveUB0aS5jb20+CitEZXNjcmlwdGlvbjoKKwkJV2lMaW5rIGNoaXAncyBST00gdmVyc2lvbiBleHBvc2VkIHRvIHVzZXItc3BhY2UgZm9yIHNvbWUKKwkJcHJvcHJpZXRhcnkgcHJvdG9jb2wgc3RhY2tzIHRvIG1ha2UgdXNlIG9mLgorCitXaGF0OiAgICAgICAgICAgL3N5cy9rZXJuZWwvZGVidWcvdGktc3QvcHJvdG9jb2xzCitDb250YWN0OiAgICAgICAgUGF2YW4gU2F2b3kgPHBhdmFuX3Nhdm95QHRpLmNvbT4KK0Rlc2NyaXB0aW9uOgorCQlUaGUgcmVhc29uIGZvciBjaGlwIGJlaW5nIE9OLCB0aGUgbGlzdCBvZiBwcm90b2NvbHMgcmVnaXN0ZXJlZC4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL0RvY3VtZW50YXRpb24vQ09OVFJJQlVUT1JTIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL0RvY3VtZW50YXRpb24vQ09OVFJJQlVUT1JTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZjU3ODcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvRG9jdW1lbnRhdGlvbi9DT05UUklCVVRPUlMKQEAgLTAsMCArMSw0NSBAQAorVEkgRFNQL0JyaWRnZSBEcml2ZXIgLSBDb250cmlidXRvcnMgRmlsZQorCitUaGUgRFNQL0JyaWRnZSBwcm9qZWN0IHdpc2ggdG8gdGhhbmsgYWxsIG9mIGl0cyBjb250cmlidXRvcnMsIGN1cnJlbnQgYnJpZGdlCitkcml2ZXIgaXMgdGhlIHJlc3VsdCBvZiB0aGUgd29yayBvZiBhbGwgb2YgdGhlbS4gSWYgYW55IG5hbWUgaXMgYWNjaWRlbnRhbGx5CitvbWl0dGVkLCBsZXQgdXMga25vdyBieSBzZW5kaW5nIGEgbWFpbCB0byBvbWFyLnJhbWlyZXpAdGkuY29tIG9yCit4MDk1ODQwQHRpLmNvbS4KKworUGxlYXNlIGtlZXAgdGhlIGZvbGxvd2luZyBsaXN0IGluIGFscGhhYmV0aWNhbCBvcmRlci4KKworCVN1bWFuIEFubmEKKwlTcmlwYWwgQmFnYWRpYQorCUZlbGlwZSBCYWxiaQorCU9oYWQgQmVuLUNvaGVuCisJUGhpbCBDYXJtb2R5CisJRGVlcGFrIENoaXRyaWtpCisJRmVsaXBlIENvbnRyZXJhcworCUhpcm9zaGkgRG95dQorCVNldGggRm9yc2hlZQorCUl2YW4gR29tZXogQ2FzdGVsbGFub3MKKwlNYXJrIEdyb3NlbgorCVJhbWVzaCBHdXB0YSBHCisJRmVybmFuZG8gR3V6bWFuIEx1Z28KKwlBeGVsIEhhc2xhbQorCUphbmV0IEhlYWQKKwlTaGl2YW5hbmRhIEhlYmJhcgorCUhhcmkgS2FuaWdlcmkKKwlUb255IExpbmRncmVuCisJQW50b25pbyBMdW5hCisJSGFyaSBOYWdhbGxhCisJTmlzaGFudGggTWVub24KKwlBbWV5YSBQYWxhbmRlCisJVmlqYXkgUGFzYW0KKwlHaWxiZXJ0IFBpdG5leQorCU9tYXIgUmFtaXJleiBMdW5hCisJRXJuZXN0byBSYW1vcworCUNocmlzIFJpbmcKKwlMYXJyeSBTY2hpZWZlcgorCVJlYmVjY2EgU2NodWx0eiBaYXZpbgorCUJoYXZpbiBTaGFoCisJQW5keSBTaGV2Y2hlbmtvCisJSmVmZiBUYXlsb3IKKwlSb21hbiBUZXJlc2hvbmtvdgorCUFybWFuZG8gVXJpYmUgZGUgTGVvbgorCU5pc2NoYWwgVmFyaWRlCisJV2VuYmlhbyBXYW5nCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvRG9jdW1lbnRhdGlvbi9SRUFETUUgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvRG9jdW1lbnRhdGlvbi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY2ZDM3MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9Eb2N1bWVudGF0aW9uL1JFQURNRQpAQCAtMCwwICsxLDcwIEBACisgICAgICAgICAgICAgICAgICAgICAgICBMaW51eCBEU1AvQklPUyBCcmlkZ2UgcmVsZWFzZQorCitEU1AvQklPUyBCcmlkZ2Ugb3ZlcnZpZXcKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitEU1AvQklPUyBCcmlkZ2UgaXMgZGVzaWduZWQgZm9yIHBsYXRmb3JtcyB0aGF0IGNvbnRhaW4gYSBHUFAgYW5kIG9uZSBvciBtb3JlCithdHRhY2hlZCBEU1BzLiAgVGhlIEdQUCBpcyBjb25zaWRlcmVkIHRoZSBtYXN0ZXIgb3IgImhvc3QiIHByb2Nlc3NvciwgYW5kIHRoZQorYXR0YWNoZWQgRFNQcyBhcmUgcHJvY2Vzc2luZyByZXNvdXJjZXMgdGhhdCBjYW4gYmUgdXRpbGl6ZWQgYnkgYXBwbGljYXRpb25zCithbmQgZHJpdmVycyBydW5uaW5nIG9uIHRoZSBHUFAuCisKK1RoZSBhYnN0cmFjdGlvbiB0aGF0IERTUC9CSU9TIEJyaWRnZSBzdXBwbGllcywgaXMgYSBkaXJlY3QgbGluayBiZXR3ZWVuIGEgR1BQCitwcm9ncmFtIGFuZCBhIERTUCB0YXNrLiAgVGhpcyBjb21tdW5pY2F0aW9uIGxpbmsgaXMgcGFydGl0aW9uZWQgaW50byB0d28KK3R5cGVzIG9mIHN1Yi1saW5rczogIG1lc3NhZ2luZyAoc2hvcnQsIGZpeGVkLWxlbmd0aCBwYWNrZXRzKSBhbmQgZGF0YQorc3RyZWFtaW5nIChtdWx0aXBsZSwgbGFyZ2UgYnVmZmVycykuICBFYWNoIHN1Yi1saW5rIG9wZXJhdGVzIGluZGVwZW5kZW50bHksCithbmQgZmVhdHVyZXMgaW4tb3JkZXIgZGVsaXZlcnkgb2YgZGF0YSwgbWVhbmluZyB0aGF0IG1lc3NhZ2VzIGFyZSBkZWxpdmVyZWQKK2luIHRoZSBvcmRlciB0aGV5IHdlcmUgc3VibWl0dGVkIHRvIHRoZSBtZXNzYWdlIGxpbmssIGFuZCBzdHJlYW0gYnVmZmVycyBhcmUKK2RlbGl2ZXJlZCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIHN1Ym1pdHRlZCB0byB0aGUgc3RyZWFtIGxpbmsuCisKK0luIGFkZGl0aW9uLCBhIEdQUCBjbGllbnQgY2FuIHNwZWNpZnkgd2hhdCBpbnB1dHMgYW5kIG91dHB1dHMgYSBEU1AgdGFzawordXNlcy4gRFNQIHRhc2tzIHR5cGljYWxseSB1c2UgbWVzc2FnZSBvYmplY3RzIGZvciBwYXNzaW5nIGNvbnRyb2wgYW5kIHN0YXR1cworaW5mb3JtYXRpb24gYW5kIHN0cmVhbSBvYmplY3RzIGZvciBlZmZpY2llbnQgc3RyZWFtaW5nIG9mIHJlYWwtdGltZSBkYXRhLgorCitHUFAgU29mdHdhcmUgQXJjaGl0ZWN0dXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0EgR1BQIGFwcGxpY2F0aW9uIGNvbW11bmljYXRlcyB3aXRoIGl0cyBhc3NvY2lhdGVkIERTUCB0YXNrIHJ1bm5pbmcgb24gdGhlCitEU1Agc3Vic3lzdGVtIHVzaW5nIHRoZSBEU1AvQklPUyBCcmlkZ2UgQVBJLiBGb3IgZXhhbXBsZSwgYSBHUFAgYXVkaW8KK2FwcGxpY2F0aW9uIGNhbiB1c2UgdGhlIEFQSSB0byBwYXNzIG1lc3NhZ2VzIHRvIGEgRFNQIHRhc2sgdGhhdCBpcyBtYW5hZ2luZworZGF0YSBmbG93aW5nIGZyb20gYW5hbG9nLXRvLWRpZ2l0YWwgY29udmVydGVycyAoQURDcykgdG8gZGlnaXRhbC10by1hbmFsb2cKK2NvbnZlcnRlcnMgKERBQ3MpLgorCitGcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiB0aGUgR1BQIE9TLCB0aGUgRFNQIGlzIHRyZWF0ZWQgYXMganVzdCBhbm90aGVyCitwZXJpcGhlcmFsIGRldmljZS4gICBNb3N0IGhpZ2ggbGV2ZWwgR1BQIE9TIHR5cGljYWxseSBzdXBwb3J0IGEgZGV2aWNlIGRyaXZlcgorbW9kZWwsIHdoZXJlYnkgYXBwbGljYXRpb25zIGNhbiBzYWZlbHkgYWNjZXNzIGFuZCBzaGFyZSBhIGhhcmR3YXJlIHBlcmlwaGVyYWwKK3Rocm91Z2ggc3RhbmRhcmQgZHJpdmVyIGludGVyZmFjZXMuICBUaGVyZWZvcmUsIHRvIGFsbG93IG11bHRpcGxlIEdQUAorYXBwbGljYXRpb25zIHRvIHNoYXJlIGFjY2VzcyB0byB0aGUgRFNQLCB0aGUgR1BQIHNpZGUgb2YgRFNQL0JJT1MgQnJpZGdlCitpbXBsZW1lbnRzIGEgZGV2aWNlIGRyaXZlciBmb3IgdGhlIERTUC4KKworU2luY2UgZHJpdmVyIGludGVyZmFjZXMgYXJlIG5vdCBhbHdheXMgc3RhbmRhcmQgYWNyb3NzIEdQUCBPUywgYW5kIHRvIHByb3ZpZGUKK3NvbWUgbGV2ZWwgb2YgaW50ZXJvcGVyYWJpbGl0eSBvZiBhcHBsaWNhdGlvbiBjb2RlIHVzaW5nIERTUC9CSU9TIEJyaWRnZQorYmV0d2VlbiBHUFAgT1MsIERTUC9CSU9TIEJyaWRnZSBwcm92aWRlcyBhIHN0YW5kYXJkIGxpYnJhcnkgb2YgQVBJcyB3aGljaAord3JhcCBjYWxscyBpbnRvIHRoZSBkZXZpY2UgZHJpdmVyLiAgIFNvLCByYXRoZXIgdGhhbiBjYWxsaW5nIEdQUCBPUyBzcGVjaWZpYworZHJpdmVyIGludGVyZmFjZXMsIGFwcGxpY2F0aW9ucyAoYW5kIGV2ZW4gb3RoZXIgZGV2aWNlIGRyaXZlcnMpIGNhbiB1c2UgdGhlCitzdGFuZGFyZCBBUEkgbGlicmFyeSBkaXJlY3RseS4KKworRFNQIFNvZnR3YXJlIEFyY2hpdGVjdHVyZQorPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGb3IgRFNQL0JJT1MsIERTUC9CSU9TIEJyaWRnZSBhZGRzIGEgZGV2aWNlLWluZGVwZW5kZW50IHN0cmVhbWluZyBJL08gKFNUUk0pCitpbnRlcmZhY2UsIGEgbWVzc2FnaW5nIGludGVyZmFjZSAoTk9ERSksIGFuZCBhIFJlc291cmNlIE1hbmFnZXIgKFJNKSBTZXJ2ZXIuCitUaGUgUk0gU2VydmVyIHJ1bnMgYXMgYSB0YXNrIG9mIERTUC9CSU9TIGFuZCBpcyBzdWJzZXJ2aWVudCB0byBjb21tYW5kcworYW5kIHF1ZXJpZXMgZnJvbSB0aGUgR1BQLiAgSXQgZXhlY3V0ZXMgY29tbWFuZHMgdG8gc3RhcnQgYW5kIHN0b3AgRFNQIHNpZ25hbAorcHJvY2Vzc2luZyBub2RlcyBpbiByZXNwb25zZSB0byBHUFAgcHJvZ3JhbXMgbWFraW5nIHJlcXVlc3RzIHRocm91Z2ggdGhlCisoR1BQLXNpZGUpIEFQSS4KKworRFNQIHRhc2tzIHN0YXJ0ZWQgYnkgdGhlIFJNIFNlcnZlciBhcmUgc2ltaWxhciB0byBhbnkgb3RoZXIgRFNQIHRhc2sgd2l0aCB0d28KK2ltcG9ydGFudCBkaWZmZXJlbmNlczogIHRoZXkgbXVzdCBmb2xsb3cgYSBzcGVjaWZpYyB0YXNrIG1vZGVsIGNvbnNpc3Rpbmcgb2YKK3RocmVlIEMtY2FsbGFibGUgZnVuY3Rpb25zIChub2RlIGNyZWF0ZSwgZXhlY3V0ZSwgYW5kIGRlbGV0ZSksIHdpdGggc3BlY2lmaWMKK3NldHMgb2YgYXJndW1lbnRzLCBhbmQgdGhleSBoYXZlIGEgcHJlLWRlZmluZWQgdGFzayBlbnZpcm9ubWVudCBlc3RhYmxpc2hlZAorYnkgdGhlIFJNIFNlcnZlci4KKworVGFza3Mgc3RhcnRlZCBieSB0aGUgUk0gU2VydmVyIGNvbW11bmljYXRlIHVzaW5nIHRoZSBTVFJNIGFuZCBOT0RFIGludGVyZmFjZXMKK2FuZCBhY3QgYXMgc2VydmVycyBmb3IgdGhlaXIgY29ycmVzcG9uZGluZyBHUFAgY2xpZW50cywgcGVyZm9ybWluZyBzaWduYWwKK3Byb2Nlc3NpbmcgZnVuY3Rpb25zIGFzIHJlcXVlc3RlZCBieSBtZXNzYWdlcyBzZW50IGJ5IHRoZWlyIEdQUCBjbGllbnQuCitUeXBpY2FsbHksIGEgRFNQIHRhc2sgbW92ZXMgZGF0YSBmcm9tIHNvdXJjZSBkZXZpY2VzIHRvIHNpbmsgZGV2aWNlcyB1c2luZworZGV2aWNlIGluZGVwZW5kZW50IEkvTyBzdHJlYW1zLCBwZXJmb3JtaW5nIGFwcGxpY2F0aW9uLXNwZWNpZmljIHByb2Nlc3NpbmcKK2FuZCB0cmFuc2Zvcm1hdGlvbnMgb24gdGhlIGRhdGEgd2hpbGUgaXQgaXMgbW92ZWQuICBGb3IgZXhhbXBsZSwgYW4gYXVkaW8KK3Rhc2sgbWlnaHQgcGVyZm9ybSBhdWRpbyBkZWNvbXByZXNzaW9uIChBRFBDTSwgTVBFRywgQ0VMUCkgb24gZGF0YSByZWNlaXZlZAorZnJvbSBhIEdQUCBhdWRpbyBkcml2ZXIgYW5kIHRoZW4gc2VuZCB0aGUgZGVjb21wcmVzc2VkIGxpbmVhciBzYW1wbGVzIHRvIGEKK2RpZ2l0YWwtdG8tYW5hbG9nIGNvbnZlcnRlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9Eb2N1bWVudGF0aW9uL2Vycm9yLWNvZGVzIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL0RvY3VtZW50YXRpb24vZXJyb3ItY29kZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI4MjZlMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9Eb2N1bWVudGF0aW9uL2Vycm9yLWNvZGVzCkBAIC0wLDAgKzEsMTU3IEBACisJCQlEU1AvQnJpZGdlIEVycm9yIENvZGUgR3VpZGUKKworCitTdWNjZXNzIGNvZGUgaXMgYWx3YXlzIHRha2VuIGFzIDAsIGV4Y2VwdCBmb3Igb25lIGNhc2Ugd2hlcmUgYSBzdWNjZXNzIHN0YXR1cworZGlmZmVyZW50IHRoYW4gMCBjYW4gYmUgcG9zc2libGUsIHRoaXMgaXMgd2hlbiBlbnVtZXJhdGluZyBhIHNlcmllcyBvZiBkc3AKK29iamVjdHMsIGlmIHRoZSBlbnVtZXJhdGlvbiBkb2Vzbid0IGhhdmUgYW55IG1vcmUgb2JqZWN0cyBpdCBpcyBjb25zaWRlcmVkIGFzIGEKK3N1Y2Nlc3NmdWwgY2FzZS4gSW4gdGhpcyBjYXNlIGEgcG9zaXRpdmUgRU5PREFUQSBpcyByZXR1cm5lZCAoVE9ETzogQ2hhbmdlIHRvCithdm9pZCB0aGlzIGNhc2UpLgorCitFcnJvciBjb2RlcyBhcmUgcmV0dXJuZWQgYXMgYSBuZWdhdGl2ZSAxLCBpZiBhbiBzcGVjaWZpYyBjb2RlIGlzIGV4cGVjdGVkLCBpdAorY2FuIGJlIHByb3BhZ2F0ZWQgdG8gdXNlciBzcGFjZSBieSByZWFkaW5nIGVycm5vIHN5bWJvbCBkZWZpbmVkIGluIGVycm5vLmgsIGZvcgorc3BlY2lmaWMgZGV0YWlscyBvbiB0aGUgaW1wbGVtZW50YXRpb24gYSBjb3B5IG9mIHRoZSBzdGFuZGFyZCB1c2VkIHNob3VsZCBiZQorcmVhZCBmaXJzdC4KKworVGhlIGVycm9yIGNvZGVzIHVzZWQgYnkgdGhpcyBkcml2ZXIgYXJlOgorCitbRVBFUk1dCisgICAgR2VuZXJhbCBkcml2ZXIgZmFpbHVyZS4KKworICAgIEFjY29yZGluZyB0byB0aGUgdXNlIGNhc2UgdGhlIGZvbGxvd2luZyBtaWdodCBhcHBseToKKyAgICAtIERldmljZSBpcyBpbiAnc2xlZXAvc3VzcGVuZCcgbW9kZSBkdWUgdG8gRFBNLgorICAgIC0gVXNlciBjYW5ub3QgbWFyayBlbmQgb2Ygc3RyZWFtIG9uIGFuIGlucHV0IGNoYW5uZWwuCisgICAgLSBSZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIGludmFsaWQgZm9yIHRoZSBub2RlIHR5cGUuCisgICAgLSBJbnZhbGlkIGFsaWdubWVudCBmb3IgdGhlIG5vZGUgbWVzc2FnaW5nIGJ1ZmZlci4KKyAgICAtIFRoZSBzcGVjaWZpZWQgZGlyZWN0aW9uIGlzIGludmFsaWQgZm9yIHRoZSBzdHJlYW0uCisgICAgLSBJbnZhbGlkIHN0cmVhbSBtb2RlLgorCitbRU5PRU5UXQorICAgIFRoZSBzcGVjaWZpZWQgb2JqZWN0IG9yIGZpbGUgd2FzIG5vdCBmb3VuZC4KKworW0VTUkNIXQorICAgIEEgc2hhcmVkIG1lbW9yeSBidWZmZXIgY29udGFpbmVkIGluIGEgbWVzc2FnZSBvciBzdHJlYW0gY291bGQgbm90IGJlIG1hcHBlZAorICAgIHRvIHRoZSBHUFAgY2xpZW50IHByb2Nlc3MncyB2aXJ0dWFsIHNwYWNlLgorCitbRUlPXQorICAgIERyaXZlciBpbnRlcmZhY2UgSS9PIGVycm9yLgorCisgICAgb3I6CisgICAgLSBVbmFibGUgdG8gcGx1ZyBjaGFubmVsIElTUiBmb3IgY29uZmlndXJlZCBJUlEuCisgICAgLSBObyBmcmVlIEkvTyByZXF1ZXN0IHBhY2tldHMgYXJlIGF2YWlsYWJsZS4KKworW0VOWElPXQorICAgIFVuYWJsZSB0byBmaW5kIGEgbmFtZWQgc2VjdGlvbiBpbiBEU1AgZXhlY3V0YWJsZSBvciBhIG5vbi1leGlzdGVudCBtZW1vcnkKKyAgICBzZWdtZW50IGlkZW50aWZpZXIgd2FzIHNwZWNpZmllZC4KKworW0VCQURGXQorICAgIEdlbmVyYWwgZXJyb3IgZm9yIGZpbGUgaGFuZGxpbmc6CisKKyAgICAtIFVuYWJsZSB0byBvcGVuIGZpbGUuCisgICAgLSBVbmFibGUgdG8gcmVhZCBmaWxlLgorICAgIC0gQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcGFyc2luZyB0aGUgRFNQIGV4ZWN1dGFibGUgZmlsZS4KKworW0VOT01FTV0KKyAgICBBIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgb2NjdXJyZWQuCisKK1tFQUNDRVNdCisgICAgLSBVbmFibGUgdG8gcmVhZCBjb250ZW50IG9mIERDRCBkYXRhIHNlY3Rpb247IHRoaXMgaXMgdHlwaWNhbGx5IGNhdXNlZCBieQorICAgIGltcHJvcGVybHkgY29uZmlndXJlZCBub2Rlcy4KKyAgICAtIFVuYWJsZSB0byBkZWNvZGUgRENEIGRhdGEgc2VjdGlvbiBjb250ZW50OyB0aGlzIGlzIHR5cGljYWxseSBjYXVzZWQgYnkKKyAgICBjaGFuZ2VzIHRvIERTUC9CSU9TIEJyaWRnZSBkYXRhIHN0cnVjdHVyZXMuCisgICAgLSBVbmFibGUgdG8gZ2V0IHBvaW50ZXIgdG8gRENEIGRhdGEgc2VjdGlvbjsgdGhpcyBpcyB0eXBpY2FsbHkgY2F1c2VkIGJ5CisgICAgaW1wcm9wZXJseSBjb25maWd1cmVkIFVVSURzLgorICAgIC0gVW5hYmxlIHRvIGxvYWQgZmlsZSBjb250YWluaW5nIERDRCBkYXRhIHNlY3Rpb247IHRoaXMgaXMgdHlwaWNhbGx5CisgICAgY2F1c2VkIGJ5IGEgbWlzc2luZyBDT0ZGIGZpbGUuCisgICAgLSBUaGUgc3BlY2lmaWVkIENPRkYgZmlsZSBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgbm9kZSByZWdpc3RyYXRpb24KKyAgICBzZWN0aW9uLgorCitbRUZBVUxUXQorICAgIEludmFsaWQgcG9pbnRlciBvciBoYW5kbGVyLgorCitbRUVYSVNUXQorICAgIEF0dGVtcHRlZCB0byBjcmVhdGUgYSBjaGFubmVsIG1hbmFnZXIgIHdoZW4gb25lIGFscmVhZHkgZXhpc3RzLgorCitbRUlOVkFMXQorICAgIEludmFsaWQgYXJndW1lbnQuCisKK1tFU1BJUEVdCisgICAgU3ltYm9sIG5vdCBmb3VuZCBpbiB0aGUgQ09GRiBmaWxlLiAgRFNQTm9kZV9DcmVhdGUgd2lsbCByZXR1cm4gdGhpcyBpZgorICAgIHRoZSBpQWxnIGZ1bmN0aW9uIHRhYmxlIGZvciBhbiB4REFJUyBzb2NrZXQgaXMgbm90IGZvdW5kIGluIHRoZSBDT0ZGIGZpbGUuCisgICAgSW4gdGhpcyBjYXNlLCBmb3JjZSB0aGUgc3ltYm9sIHRvIGJlIGxpbmtlZCBpbnRvIHRoZSBDT0ZGIGZpbGUuCisgICAgRFNQTm9kZV9DcmVhdGUsIERTUE5vZGVfRXhlY3V0ZSwgYW5kIERTUE5vZGVfRGVsZXRlIHdpbGwgcmV0dXJuIHRoaXMgaWYKKyAgICB0aGUgY3JlYXRlLCBleGVjdXRlLCBvciBkZWxldGUgcGhhc2UgZnVuY3Rpb24sIHJlc3BlY3RpdmVseSwgY291bGQgbm90IGJlCisgICAgZm91bmQgaW4gdGhlIENPRkYgZmlsZS4KKworICAgIC0gTm8gc3ltYm9sIHRhYmxlIGlzIGxvYWRlZC9mb3VuZCBmb3IgdGhpcyBib2FyZC4KKyAgICAtIFVuYWJsZSB0byBpbml0aWFsaXplIHRoZSBaTCBDT0ZGIHBhcnNpbmcgbW9kdWxlLgorCitbRVBJUEVdCisgICAgSS9PIGlzIGN1cnJlbnRseSBwZW5kaW5nLgorCisgICAgLSBFbmQgb2Ygc3RyZWFtIHdhcyBhbHJlYWR5IHJlcXVlc3RlZCBvbiB0aGlzIG91dHB1dCBjaGFubmVsLgorCitbRURPTV0KKyAgICBBIHBhcmFtZXRlciBpcyBzcGVjaWZpZWQgb3V0c2lkZSBpdHMgdmFsaWQgcmFuZ2UuCisKK1tFTk9TWVNdCisgICAgVGhlIGluZGljYXRlZCBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZC4KKworW0VJRFJNXQorICAgIER1cmluZyBlbnVtZXJhdGlvbiBhIGNoYW5nZSBpbiB0aGUgbnVtYmVyIG9yIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdHMKKyAgICBoYXMgb2NjdXJyZWQuCisKK1tFQ0hSTkddCisgICAgQXR0ZW1wdCB0byBjcmVhdGVkIGNoYW5uZWwgbWFuYWdlciB3aXRoIHRvbyBtYW55IGNoYW5uZWxzIG9yIGNoYW5uZWwgSUQgb3V0CisgICAgb2YgcmFuZ2UuCisKK1tFQkFEUl0KKyAgICBUaGUgc3RhdGUgb2YgdGhlIHNwZWNpZmllZCBvYmplY3QgaXMgaW5jb3JyZWN0IGZvciB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvbi4KKworICAgIC0gSW52YWxpZCBzZWdtZW50IElELgorCitbRU5PREFUQV0KKyAgICBVbmFibGUgdG8gcmV0cmlldmUgcmVzb3VyY2UgaW5mb3JtYXRpb24gZnJvbSB0aGUgcmVnaXN0cnkuCisKKyAgICAtIE5vIG1vcmUgcmVnaXN0cnkgdmFsdWVzLgorCitbRVRJTUVdCisgICAgQSB0aW1lb3V0IG9jY3VycmVkIGJlZm9yZSB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvbiBjb3VsZCBjb21wbGV0ZS4KKworW0VOT1NSXQorICAgIEEgc3RyZWFtIGhhcyBiZWVuIGlzc3VlZCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnVmZmVycyBhbGxvd2VkIGluIHRoZQorICAgIHN0cmVhbSBhdCBvbmNlOyBidWZmZXJzIG11c3QgYmUgcmVjbGFpbWVkIGZyb20gdGhlIHN0cmVhbSBiZWZvcmUgYW55IG1vcmUKKyAgICBjYW4gYmUgaXNzdWVkLgorCisgICAgLSBObyBmcmVlIGNoYW5uZWxzIGFyZSBhdmFpbGFibGUuCisKK1tFSUxTRVFdCisgICAgRXJyb3Igb2NjdXJyZWQgaW4gYSBkeW5hbWljIGxvYWRlciBsaWJyYXJ5IGZ1bmN0aW9uLgorCitbRUlTQ09OTl0KKyAgICBUaGUgU3BlY2lmaWVkIENvbm5lY3Rpb24gYWxyZWFkeSBleGlzdHMuCisKK1tFTk9UQ09OTl0KKyAgICBOb2RlcyBub3QgY29ubmVjdGVkLgorCitbRVRJTUVET1VUXQorICAgIFRpbWVvdXQgb2NjdXJyZWQgd2FpdGluZyBmb3IgYSByZXNwb25zZSBmcm9tIHRoZSBoYXJkd2FyZS4KKworICAgIC0gV2FpdCBmb3IgZmx1c2ggb3BlcmF0aW9uIG9uIGFuIG91dHB1dCBjaGFubmVsIHRpbWVkIG91dC4KKworW0VDT05OUkVGVVNFRF0KKyAgICBObyBtb3JlIGNvbm5lY3Rpb25zIGNhbiBiZSBtYWRlIGZvciB0aGlzIG5vZGUuCisKK1tFQUxSRUFEWV0KKyAgICBDaGFubmVsIGlzIGFscmVhZHkgaW4gdXNlLgorCitbRVJFTU9URUlPXQorICAgIGR3VGltZU91dCBwYXJhbWV0ZXIgd2FzIENITkxfSU9DTk9XQUlULCB5ZXQgbm8gSS9PIGNvbXBsZXRpb25zIHdlcmUKKyAgICBxdWV1ZWQuCisKK1tFQ0FOQ0VMRURdCisgICAgSS9PIGhhcyBiZWVuIGNhbmNlbGxlZCBvbiB0aGlzIGNoYW5uZWwuCisKK1tFTk9LRVldCisgICAgSW52YWxpZCBzdWJrZXkgcGFyYW1ldGVyLgorCisgICAgLSBVVUlEIG5vdCBmb3VuZCBpbiByZWdpc3RyeS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNkZTRmMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9LY29uZmlnCkBAIC0wLDAgKzEsOTAgQEAKKyMKKyMgRFNQIEJyaWRnZSBEcml2ZXIgU3VwcG9ydAorIworCittZW51Y29uZmlnIFRJRFNQQlJJREdFCisJdHJpc3RhdGUgIkRTUCBCcmlkZ2UgZHJpdmVyIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMworCXNlbGVjdCBPTUFQX01CT1hfRldLCisJaGVscAorCSAgRFNQL0JJT1MgQnJpZGdlIGlzIGRlc2lnbmVkIGZvciBwbGF0Zm9ybXMgdGhhdCBjb250YWluIGEgR1BQIGFuZAorCSAgb25lIG9yIG1vcmUgYXR0YWNoZWQgRFNQcy4gIFRoZSBHUFAgaXMgY29uc2lkZXJlZCB0aGUgbWFzdGVyIG9yCisJICAiaG9zdCIgcHJvY2Vzc29yLCBhbmQgdGhlIGF0dGFjaGVkIERTUHMgYXJlIHByb2Nlc3NpbmcgcmVzb3VyY2VzCisJICB0aGF0IGNhbiBiZSB1dGlsaXplZCBieSBhcHBsaWNhdGlvbnMgYW5kIGRyaXZlcnMgcnVubmluZyBvbiB0aGUgR1BQLgorCisJICBUaGlzIGRyaXZlciBkZXBlbmRzIG9uIE9NQVAgTWFpbGJveCAoT01BUF9NQk9YX0ZXSykuCisKK2NvbmZpZyBUSURTUEJSSURHRV9EVkZTCisJYm9vbCAiRW5hYmxlIEJyaWRnZSBEeW5hbWljIFZvbHRhZ2UgYW5kIEZyZXF1ZW5jeSBTY2FsaW5nIChEVkZTKSIKKwlkZXBlbmRzIG9uIFRJRFNQQlJJREdFICYmIE9NQVBfUE1fU1JGICYmIENQVV9GUkVRCisJaGVscAorCSAgRFZGUyBhbGxvd3MgRFNQIEJyaWRnZSB0byBpbml0aWF0ZSB0aGUgb3BlcmF0aW5nIHBvaW50IGNoYW5nZSB0bworCSAgc2NhbGUgdGhlIGNoaXAgdm9sdGFnZSBhbmQgZnJlcXVlbmN5IGluIG9yZGVyIHRvIG1hdGNoIHRoZQorCSAgcGVyZm9ybWFuY2UgYW5kIHBvd2VyIGNvbnN1bXB0aW9uIHRvIHRoZSBjdXJyZW50IHByb2Nlc3NpbmcKKwkgIHJlcXVpcmVtZW50cy4KKworY29uZmlnIFRJRFNQQlJJREdFX01FTVBPT0xfU0laRQorCWhleCAiUGh5c2ljYWwgbWVtb3J5IHBvb2wgc2l6ZSAoQnl0ZSkiCisJZGVwZW5kcyBvbiBUSURTUEJSSURHRQorCWRlZmF1bHQgMHg2MDAwMDAKKwloZWxwCisJICBBbGxvY2F0ZSBzcGVjaWZpZWQgc2l6ZSBvZiBtZW1vcnkgYXQgYm9vdGluZyB0aW1lIHRvIGF2b2lkIGFsbG9jYXRpb24KKwkgIGZhaWx1cmUgdW5kZXIgaGVhdnkgbWVtb3J5IGZyYWdtZW50YXRpb24gYWZ0ZXIgc29tZSB1c2UgdGltZS4KKworY29uZmlnIFRJRFNQQlJJREdFX0RFQlVHCisJYm9vbCAiRGVidWcgU3VwcG9ydCIKKwlkZXBlbmRzIG9uIFRJRFNQQlJJREdFCisJaGVscAorCSAgU2F5IFkgdG8gZW5hYmxlIEJyaWRnZSBkZWJ1Z2dpbmcgY2FwYWJpbGl0aWVzCisKK2NvbmZpZyBUSURTUEJSSURHRV9SRUNPVkVSWQorCWJvb2wgIlJlY292ZXJ5IFN1cHBvcnQiCisJZGVwZW5kcyBvbiBUSURTUEJSSURHRQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIEluIGNhc2Ugb2YgRFNQIGZhdGFsIGVycm9yLCBCUklER0UgZHJpdmVyIHdpbGwgdHJ5IHRvCisJICByZWNvdmVyIGl0c2VsZi4KKworY29uZmlnIFRJRFNQQlJJREdFX0NBQ0hFX0xJTkVfQ0hFQ0sKKwlib29sICJDaGVjayBidWZmZXJzIHRvIGJlIDEyOCBieXRlIGFsaWduZWQiCisJZGVwZW5kcyBvbiBUSURTUEJSSURHRQorCWhlbHAKKwkgIFdoZW4gdGhlIERTUCBwcm9jZXNzZXMgZGF0YSwgdGhlIERTUCBjYWNoZSBjb250cm9sbGVyIGxvYWRzIDEyOC1CeXRlCisJICBjaHVua3MgKGxpbmVzKSBmcm9tIFNEUkFNIGFuZCB3cml0ZXMgdGhlIGRhdGEgYmFjayBpbiAxMjgtQnl0ZSBjaHVua3MuCisJICBJZiBhIERNTSBidWZmZXIgZG9lcyBub3Qgc3RhcnQgYW5kIGVuZCBvbiBhIDEyOC1CeXRlIGJvdW5kYXJ5LCB0aGUgZGF0YQorCSAgcHJlY2VkaW5nIHRoZSBzdGFydCBhZGRyZXNzIChTQSkgZnJvbSB0aGUgMTI4LUJ5dGUgYm91bmRhcnkgdG8gdGhlIFNBCisJICBhbmQgdGhlIGRhdGEgYXQgYWRkcmVzc2VzIHRyYWlsaW5nIHRoZSBlbmQgYWRkcmVzcyAoRUEpIGZyb20gdGhlIEVBIHRvCisJICB0aGUgbmV4dCAxMjgtQnl0ZSBib3VuZGFyeSB3aWxsIGJlIGxvYWRlZCBhbmQgd3JpdHRlbiBiYWNrIGFzIHdlbGwuCisJICBUaGlzIGNhbiBsZWFkIHRvIGhlYXAgY29ycnVwdGlvbi4gU2F5IFksIHRvIGVuZm9yY2UgdGhlIGNoZWNrIGZvciAxMjgKKwkgIGJ5dGUgYWxpZ25tZW50LCBidWZmZXJzIGZhaWxpbmcgdGhpcyBjaGVjayB3aWxsIGJlIHJlamVjdGVkLgorCitjb25maWcgVElEU1BCUklER0VfV0RUMworCWJvb2wgIkVuYWJsZSB3YXRjaGRvZyB0aW1lciIKKwlkZXBlbmRzIG9uIFRJRFNQQlJJREdFCisJaGVscAorCSAgV1REMyBpcyBtYW5hZ2VkIGJ5IERTUCBhbmQgb25jZSBpdCBpcyBlbmFibGVkLCBEU1Agc2lkZSBicmlkZ2UgaXMgaW4KKwkgIGNoYXJnZSBvZiByZWZyZXNoaW5nIHRoZSB0aW1lciBiZWZvcmUgb3ZlcmZsb3csIGlmIHRoZSBEU1AgaGFuZ3MgTVBVCisJICB3aWxsIGNhdWdodCB0aGUgaW50ZXJydXB0IGFuZCB0cnkgdG8gcmVjb3ZlciBEU1AuCisKK2NvbmZpZyBUSURTUEJSSURHRV9XRFRfVElNRU9VVAorCWludCAiV2F0Y2hkb2cgdGltZXIgdGltZW91dCAoaW4gc2VjcykiCisJZGVwZW5kcyBvbiBUSURTUEJSSURHRSAmJiBUSURTUEJSSURHRV9XRFQzCisJZGVmYXVsdCA1CisJaGVscAorCSAgIFdhdGNoZG9nIHRpbWVyIHRpbWVvdXQgdmFsdWUsIGFmdGVyIHRoYXQgdGltZSBpZiB0aGUgd2F0Y2hkb2cgdGltZXIKKwkgICBjb3VudGVyIGlzIG5vdCByZXNldCB0aGUgd2R0IG92ZXJmbG93IGludGVycnVwdCB3aWxsIGJlIHRyaWdnZXJlZAorCitjb25maWcgVElEU1BCUklER0VfTlRGWV9QV1JFUlIKKwlib29sICJOb3RpZnkgcG93ZXIgZXJyb3JzIgorCWRlcGVuZHMgb24gVElEU1BCUklER0UKKwloZWxwCisJICBFbmFibGUgbm90aWZpY2F0aW9ucyB0byByZWdpc3RlcmVkIGNsaWVudHMgb24gdGhlIGV2ZW50IG9mIHBvd2VyIGVycnJvcgorCSAgdHJ5aW5nIHRvIHN1c3BlbmQgYnJpZGdlIGRyaXZlci4gU2F5IFksIHRvIHNpZ25hbCB0aGlzIGV2ZW50IGFzIGEgZmF0YWwKKwkgIGVycm9yLCB0aGlzIHdpbGwgcmVxdWlyZSBhIGJyaWRnZSByZXN0YXJ0IHRvIHJlY292ZXIuCisKK2NvbmZpZyBUSURTUEJSSURHRV9CQUNLVFJBQ0UKKwlib29sICJEdW1wIGJhY2t0cmFjZXMgb24gZmF0YWwgZXJyb3JzIgorCWRlcGVuZHMgb24gVElEU1BCUklER0UKKwloZWxwCisJICBFbmFibGUgdXNlZnVsIGluZm9ybWF0aW9uIHRvIGJhY2t0cmFjZSBmYXRhbCBlcnJvcnMuIFNheSBZIGlmIHlvdQorCSAgd2FudCB0byBkdW1wIGluZm9ybWF0aW9uIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NjcxNzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvTWFrZWZpbGUKQEAgLTAsMCArMSwzNCBAQAorb2JqLSQoQ09ORklHX1RJRFNQQlJJREdFKQkrPSBicmlkZ2Vkcml2ZXIubworCitsaWJnZW4gPSBnZW4vZ2IubyBnZW4vZ3MubyBnZW4vZ2gubyBnZW4vdXVpZHV0aWwubworbGlic2VydmljZXMgPSBzZXJ2aWNlcy9zeW5jLm8gc2VydmljZXMvY2ZnLm8gXAorCQlzZXJ2aWNlcy9udGZ5Lm8gc2VydmljZXMvc2VydmljZXMubworbGliY29yZSA9IGNvcmUvY2hubF9zbS5vIGNvcmUvbXNnX3NtLm8gY29yZS9pb19zbS5vIGNvcmUvdGlvbWFwMzQzMC5vIFwKKwkJY29yZS90aW9tYXAzNDMwX3B3ci5vIGNvcmUvdGlvbWFwX2lvLm8gXAorCQljb3JlL3VlX2RlaC5vIGNvcmUvd2R0Lm8gY29yZS9kc3AtY2xvY2subworbGlicG1nciA9IHBtZ3IvY2hubC5vIHBtZ3IvaW8ubyBwbWdyL21zZy5vIHBtZ3IvY29kLm8gcG1nci9kZXYubyBwbWdyL2RzcGFwaS5vIFwKKwkJcG1nci9kbW0ubyBwbWdyL2NtbS5vIHBtZ3IvZGJsbC5vCitsaWJybWdyID0gcm1nci9kYmRjZC5vIHJtZ3IvZGlzcC5vIHJtZ3IvZHJ2Lm8gcm1nci9tZ3IubyBybWdyL25vZGUubyBcCisJCXJtZ3IvcHJvYy5vIHJtZ3IvcHdyLm8gcm1nci9ybW0ubyBybWdyL3N0cm0ubyBybWdyL2RzcGRydi5vIFwKKwkJcm1nci9ubGRyLm8gcm1nci9kcnZfaW50ZXJmYWNlLm8KK2xpYmRsb2FkID0gZHlubG9hZC9jbG9hZC5vIGR5bmxvYWQvZ2V0c2VjdGlvbi5vIGR5bmxvYWQvcmVsb2MubyBcCisJCSBkeW5sb2FkL3RyYW1wLm8KK2xpYmh3ID0gaHcvaHdfbW11Lm8KKworYnJpZGdlZHJpdmVyLW9ianMgPSAkKGxpYmdlbikgJChsaWJzZXJ2aWNlcykgJChsaWJjb3JlKSAkKGxpYnBtZ3IpICQobGlicm1ncikgXAorCQkJJChsaWJkbG9hZCkgJChsaWJodykKKworI01hY2hpbmUgZGVwZW5kZW50CitjY2ZsYWdzLXkgKz0gLURfVElfIC1EX0RCX1RJT01BUCAtRFRNUzMyMDYwIFwKKwkJLURUSUNGR19QUk9DX1ZFUiAtRFRJQ0ZHX0VWTV9UWVBFIC1EQ0hOTF9TTUNMQVNTIFwKKwkJLURDSE5MX01FU1NBR0VTIC1EVVNFX0xFVkVMXzFfTUFDUk9TCisKK2NjZmxhZ3MteSArPSAtSWRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlCitjY2ZsYWdzLXkgKz0gLUlkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvc2VydmljZXMKK2NjZmxhZ3MteSArPSAtSWRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlCitjY2ZsYWdzLXkgKz0gLUlkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1ncgorY2NmbGFncy15ICs9IC1JZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IKK2NjZmxhZ3MteSArPSAtSWRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkCitjY2ZsYWdzLXkgKz0gLUlkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaHcKK2NjZmxhZ3MteSArPSAtSWFyY2gvYXJtCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL1RPRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRmNGEyOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9UT0RPCkBAIC0wLDAgKzEsMTggQEAKKyogTWlncmF0ZSB0byAoYW5kIGlmIG5lY2Vzc2FyeSwgZXh0ZW5kKSBleGlzdGluZyB1cHN0cmVhbSBjb2RlIHN1Y2ggYXMgCisgIGlvbW11LCB3ZHQsIG1jYnNwLCBncHRpbWVycworKiBEZWNvdXBsZSBoYXJkd2FyZS1zcGVjaWZpYyBjb2RlIChlLmcuIGJyaWRnZV9icmRfc3RhcnQvc3RvcC9kZWxldGUvbW9uaXRvcikKKyogRE9GRiBiaW5hcnkgbG9hZGVyOiBjb25zaWRlciBwdXNoaW5nIHRvIHVzZXIgc3BhY2UuIGF0IHRoZSB2ZXJ5IGxlYXN0CisgIGVsaW1pbmF0ZSB0aGUgZGlyZWN0IGZpbGVzeXN0ZW0gYWNjZXNzCisqIEVsaW1pbmF0ZSBnZW5lcmFsIHNlcnZpY2VzIGFuZCBsaWJyYXJpZXMgLSB1c2Ugb3IgZXh0ZW5kIGV4aXN0aW5nIGtlcm5lbAorICBsaWJyYXJpZXMgaW5zdGVhZCAoZS5nLiBnY2YvbGNtIGluIG5sZHIuYywgZ2xvYmFsIGhlbHBlcnMgaW4gZ2VuLykKKyogRWxpbWluYXRlIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgT01BUF9TWVNDX0JBU0UKKyogRWxpbWluYXRlIGxpc3QuaCA6IHNlZW0gbGlrZSBhIHJlZHVuZGFudCB3cmFwcGVyIHRvIGV4aXN0aW5nIGtlcm5lbCBsaXN0cworKiBFbGltaW5hdGUgRFNQX1NVQ0NFRURFRCBtYWNyb3MgYW5kIHRoZWlyIGltcG9zZWQgcmVkdW5kYW50IGluZGVudGF0aW9ucworICAoYWRvcHQgdGhlIGtlcm5lbCB3YXkgb2YgY2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZXMpCisqIEF1ZGl0IGludGVyZmFjZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlCisqIEF1ZGl0IGFuZCBjbGVhbiB1cCBoZWFkZXIgZmlsZXMgZm9sZGVyCisqIFVzZSBrZXJuZWwgY29kaW5nIHN0eWxlCisqIGNoZWNrcGF0Y2gucGwgZml4ZXMKKworUGxlYXNlIHNlbmQgYW55IHBhdGNoZXMgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KK2FuZCBPbWFyIFJhbWlyZXogTHVuYSA8b21hci5yYW1pcmV6QHRpLmNvbT4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9fY21tLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9fY21tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY2MGJlZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL19jbW0uaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogX2NtbS5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIFByaXZhdGUgaGVhZGVyIGZpbGUgZGVmaW5pbmcgQ01NIG1hbmFnZXIgb2JqZWN0cyBhbmQgZGVmaW5lcyBuZWVkZWQKKyAqIGJ5IElPIG1hbmFnZXIgdG8gcmVnaXN0ZXIgc2hhcmVkIG1lbW9yeSByZWdpb25zIHdoZW4gRFNQIGJhc2UgaW1hZ2UKKyAqIGlzIGxvYWRlZChicmlkZ2VfaW9fb25fbG9hZGVkKS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIF9DTU1fCisjZGVmaW5lIF9DTU1fCisKKy8qCisgKiAgVGhlc2UgdGFyZ2V0IHNpZGUgc3ltYm9scyBkZWZpbmUgdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nIGFkZHJlc3NlcworICogIG9mIHRoZSBzZWN0aW9uIG9mIHNoYXJlZCBtZW1vcnkgdXNlZCBmb3Igc2hhcmVkIG1lbW9yeSBtYW5hZ2VyIENNTS4KKyAqICBUaGV5IGFyZSBkZWZpbmVkIGluIHRoZSAqY2ZnLmNtZCBmaWxlIGJ5IGNkYiBjb2RlLgorICovCisjZGVmaW5lIFNITTBfU0hBUkVEX0JBU0VfU1lNICAgICAgICAgICAgICJfU0hNMF9CRUciCisjZGVmaW5lIFNITTBfU0hBUkVEX0VORF9TWU0gICAgICAgICAgICAgICJfU0hNMF9FTkQiCisjZGVmaW5lIFNITTBfU0hBUkVEX1JFU0VSVkVEX0JBU0VfU1lNICAgICJfU0hNMF9SU1ZEU1RSVCIKKworLyoKKyAqICBTaGFyZWQgTWVtb3J5IFJlZ2lvbiAjMChTSE1TRUcwKSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgd2F5OgorICoKKyAqICB8KF9TSE0wX0JFRykgICAgICAgICAgICAgICAgICB8IChfU0hNMF9SU1ZEU1RSVCkgICAgICAgICAgIHwgKF9TSE0wX0VORCkKKyAqICBWICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICB8ICAgICBEU1Atc2lkZSBhbGxvY2F0aW9ucyAgICB8ICAgIEdQUC1zaWRlIGFsbG9jYXRpb25zICAgIHwKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKgorICovCisKKyNlbmRpZiAvKiBfQ01NXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvX2RlaC5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvX2RlaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NzIzY2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9fZGVoLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIF9kZWguaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBQcml2YXRlIGhlYWRlciBmb3IgREVIIG1vZHVsZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEZlbGlwZSBDb250cmVyYXMKKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBfREVIXworI2RlZmluZSBfREVIXworCisjaW5jbHVkZSA8ZHNwYnJpZGdlL250ZnkuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwZGVmcy5oPgorCisvKiBERUggTWFuYWdlcjogb25seSBvbmUgY3JlYXRlZCBwZXIgYm9hcmQ6ICovCitzdHJ1Y3QgZGVoX21nciB7CisJc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqaGJyaWRnZV9jb250ZXh0OwkvKiBCcmlkZ2UgY29udGV4dC4gKi8KKwlzdHJ1Y3QgbnRmeV9vYmplY3QgKm50Znlfb2JqOwkvKiBOVEZZIG9iamVjdCAqLworCisJLyogTU1VIEZhdWx0IERQQyAqLworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBkcGNfdGFza2xldDsKK307CisKKyNlbmRpZiAvKiBfREVIXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvX21zZ19zbS5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvX21zZ19zbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NmRlNWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9fbXNnX3NtLmgKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBfbXNnX3NtLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogUHJpdmF0ZSBoZWFkZXIgZmlsZSBkZWZpbmluZyBtc2dfY3RybCBtYW5hZ2VyIG9iamVjdHMgYW5kIGRlZmluZXMgbmVlZGVkCisgKiBieSBJTyBtYW5hZ2VyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgX01TR19TTV8KKyNkZWZpbmUgX01TR19TTV8KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9saXN0Lmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL21zZ2RlZnMuaD4KKworLyoKKyAqICBUaGVzZSB0YXJnZXQgc2lkZSBzeW1ib2xzIGRlZmluZSB0aGUgYmVnaW5uaW5nIGFuZCBlbmRpbmcgYWRkcmVzc2VzCisgKiAgb2YgdGhlIHNlY3Rpb24gb2Ygc2hhcmVkIG1lbW9yeSB1c2VkIGZvciBtZXNzYWdlcy4gVGhleSBhcmUKKyAqICBkZWZpbmVkIGluIHRoZSAqY2ZnLmNtZCBmaWxlIGJ5IGNkYiBjb2RlLgorICovCisjZGVmaW5lIE1TR19TSEFSRURfQlVGRkVSX0JBU0VfU1lNICAgICAgIl9NU0dfQkVHIgorI2RlZmluZSBNU0dfU0hBUkVEX0JVRkZFUl9MSU1JVF9TWU0gICAgICJfTVNHX0VORCIKKworI2lmbmRlZiBfQ0hOTF9XT1JEU0laRQorI2RlZmluZSBfQ0hOTF9XT1JEU0laRSA0CS8qIGRlZmF1bHQgX0NITkxfV09SRFNJWkUgaXMgMiBieXRlcy93b3JkICovCisjZW5kaWYKKworLyoKKyAqICA9PT09PT09PSBtc2dfY3RybCA9PT09PT09PQorICogIFRoZXJlIGlzIGEgY29udHJvbCBzdHJ1Y3R1cmUgZm9yIG1lc3NhZ2VzIHRvIHRoZSBEU1AsIGFuZCBhIGNvbnRyb2wKKyAqICBzdHJ1Y3R1cmUgZm9yIG1lc3NhZ2VzIGZyb20gdGhlIERTUC4gVGhlIHNoYXJlZCBtZW1vcnkgcmVnaW9uIGZvcgorICogIHRyYW5zZmVycmluZyBtZXNzYWdlcyBpcyBwYXJ0aXRpb25lZCBhcyBmb2xsb3dzOgorICoKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgfENvbnRyb2wgfCBNZXNzYWdlcyBmcm9tIERTUCB8IENvbnRyb2wgfCBNZXNzYWdlcyB0byBEU1AgfAorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAgbXNnX2N0cmwgY29udHJvbCBzdHJ1Y3R1cmUgZm9yIG1lc3NhZ2VzIHRvIHRoZSBEU1AgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nCisgKiAgd2F5OgorICoKKyAqICBidWZfZW1wdHkgLSAgICAgIFRoaXMgZmxhZyBpcyBzZXQgdG8gRkFMU0UgYnkgdGhlIEdQUCBhZnRlciBpdCBoYXMgb3V0cHV0CisgKiAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzIGZvciB0aGUgRFNQLiBUaGUgRFNQIGhvc3QgZHJpdmVyIHNldHMgaXQgdG8KKyAqICAgICAgICAgICAgICAgICAgVFJVRSBhZnRlciBpdCBoYXMgY29waWVkIHRoZSBtZXNzYWdlcy4KKyAqICBwb3N0X3N3aSAtICAgICAgIFNldCB0byAxIGJ5IHRoZSBHUFAgYWZ0ZXIgaXQgaGFzIHdyaXR0ZW4gdGhlIG1lc3NhZ2VzLAorICogICAgICAgICAgICAgICAgICBzZXQgdGhlIHNpemUsIGFuZCBzZXQgYnVmX2VtcHR5IHRvIEZBTFNFLgorICogICAgICAgICAgICAgICAgICBUaGUgRFNQIEhvc3QgZHJpdmVyIHVzZXMgU1dJX2FuZG4gb2YgdGhlIHBvc3Rfc3dpIGZpZWxkCisgKiAgICAgICAgICAgICAgICAgIHdoZW4gYSBob3N0IGludGVycnVwdCBvY2N1cnMuIFRoZSBob3N0IGRyaXZlciBjbGVhcnMKKyAqICAgICAgICAgICAgICAgICAgdGhpcyBhZnRlciBwb3N0aW5nIHRoZSBTV0kuCisgKiAgc2l6ZSAtICAgICAgICAgIE51bWJlciBvZiBtZXNzYWdlcyB0byBiZSByZWFkIGJ5IHRoZSBEU1AuCisgKgorICogIEZvciBtZXNzYWdlcyBmcm9tIHRoZSBEU1A6CisgKiAgYnVmX2VtcHR5IC0gICAgICBUaGlzIGZsYWcgaXMgc2V0IHRvIEZBTFNFIGJ5IHRoZSBEU1AgYWZ0ZXIgaXQgaGFzIG91dHB1dAorICogICAgICAgICAgICAgICAgICBtZXNzYWdlcyBmb3IgdGhlIEdQUC4gVGhlIERQQyBvbiB0aGUgR1BQIHNldHMgaXQgdG8KKyAqICAgICAgICAgICAgICAgICAgVFJVRSBhZnRlciBpdCBoYXMgY29waWVkIHRoZSBtZXNzYWdlcy4KKyAqICBwb3N0X3N3aSAtICAgICAgIFNldCB0byAxIHRoZSBEUEMgb24gdGhlIEdQUCBhZnRlciBjb3B5aW5nIHRoZSBtZXNzYWdlcy4KKyAqICBzaXplIC0gICAgICAgICAgTnVtYmVyIG9mIG1lc3NhZ2VzIHRvIGJlIHJlYWQgYnkgdGhlIEdQUC4KKyAqLworc3RydWN0IG1zZ19jdHJsIHsKKwl1MzIgYnVmX2VtcHR5OwkJLyogdG8vZnJvbSBEU1AgYnVmZmVyIGlzIGVtcHR5ICovCisJdTMyIHBvc3Rfc3dpOwkJLyogU2V0IHRvICIxIiB0byBwb3N0IG1zZ19jdHJsIFNXSSAqLworCXUzMiBzaXplOwkJLyogTnVtYmVyIG9mIG1lc3NhZ2VzIHRvL2Zyb20gdGhlIERTUCAqLworCXUzMiByZXN2ZDsKK307CisKKy8qCisgKiAgPT09PT09PT0gbXNnX21nciA9PT09PT09PQorICogIFRoZSBtc2dfbWdyIG1haW50YWlucyBhIGxpc3Qgb2YgYWxsIE1TR19RVUVVRXMuIEVhY2ggTk9ERSBvYmplY3QgY2FuCisgKiAgaGF2ZSBtc2dfcXVldWUgdG8gaG9sZCBhbGwgbWVzc2FnZXMgdGhhdCBjb21lIHVwIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcKKyAqICBub2RlIG9uIHRoZSBEU1AuIFRoZSBtc2dfbWdyIGFsc28gaGFzIGEgc2hhcmVkIHF1ZXVlIG9mIG1lc3NhZ2VzCisgKiAgcmVhZHkgdG8gZ28gdG8gdGhlIERTUC4KKyAqLworc3RydWN0IG1zZ19tZ3IgeworCS8qIFRoZSBmaXJzdCBmaWVsZCBtdXN0IG1hdGNoIHRoYXQgaW4gbXNnb2JqLmggKi8KKworCS8qIEZ1bmN0aW9uIGludGVyZmFjZSB0byBCcmlkZ2UgZHJpdmVyICovCisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisKKwlzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyOwkvKiBJTyBtYW5hZ2VyICovCisJc3RydWN0IGxzdF9saXN0ICpxdWV1ZV9saXN0OwkvKiBMaXN0IG9mIE1TR19RVUVVRXMgKi8KKwlzcGlubG9ja190IG1zZ19tZ3JfbG9jazsJLyogRm9yIGNyaXRpY2FsIHNlY3Rpb25zICovCisJLyogU2lnbmFsbGVkIHdoZW4gTXNnRnJhbWUgaXMgYXZhaWxhYmxlICovCisJc3RydWN0IHN5bmNfb2JqZWN0ICpzeW5jX2V2ZW50OworCXN0cnVjdCBsc3RfbGlzdCAqbXNnX2ZyZWVfbGlzdDsJLyogRnJlZSBNc2dGcmFtZXMgcmVhZHkgdG8gYmUgZmlsbGVkICovCisJc3RydWN0IGxzdF9saXN0ICptc2dfdXNlZF9saXN0OwkvKiBNc2dGcmFtZXMgcmVhZHkgdG8gZ28gdG8gRFNQICovCisJdTMyIG1zZ3NfcGVuZGluZzsJLyogIyBvZiBxdWV1ZWQgbWVzc2FnZXMgdG8gZ28gdG8gRFNQICovCisJdTMyIG1heF9tc2dzOwkJLyogTWF4ICMgb2YgbXNncyB0aGF0IGZpdCBpbiBidWZmZXIgKi8KKwltc2dfb25leGl0IG9uX2V4aXQ7CS8qIGNhbGxlZCB3aGVuIFJNU19FWElUIGlzIHJlY2VpdmVkICovCit9OworCisvKgorICogID09PT09PT09IG1zZ19xdWV1ZSA9PT09PT09PQorICogIEVhY2ggTk9ERSBoYXMgYSBtc2dfcXVldWUgZm9yIHJlY2VpdmluZyBtZXNzYWdlcyBmcm9tIHRoZQorICogIGNvcnJlc3BvbmRpbmcgbm9kZSBvbiB0aGUgRFNQLiBUaGUgbXNnX3F1ZXVlIG9iamVjdCBtYWludGFpbnMgYSBsaXN0CisgKiAgb2YgbWVzc2FnZXMgdGhhdCBoYXZlIGJlZW4gc2VudCB0byB0aGUgaG9zdCwgYnV0IG5vdCB5ZXQgcmVhZCAoTVNHX0dldCksCisgKiAgYW5kIGEgbGlzdCBvZiBmcmVlIGZyYW1lcyB0aGF0IGNhbiBiZSBmaWxsZWQgd2hlbiBuZXcgbWVzc2FnZXMgYXJyaXZlCisgKiAgZnJvbSB0aGUgRFNQLgorICogIFRoZSBtc2dfcXVldWUncyBoU3luRXZlbnQgZ2V0cyBwb3N0ZWQgd2hlbiBhIG1lc3NhZ2UgaXMgcmVhZHkuCisgKi8KK3N0cnVjdCBtc2dfcXVldWUgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdF9lbGVtOworCXN0cnVjdCBtc2dfbWdyICpobXNnX21ncjsKKwl1MzIgbWF4X21zZ3M7CQkvKiBOb2RlIG1lc3NhZ2UgZGVwdGggKi8KKwl1MzIgbXNncV9pZDsJCS8qIE5vZGUgZW52aXJvbm1lbnQgcG9pbnRlciAqLworCXN0cnVjdCBsc3RfbGlzdCAqbXNnX2ZyZWVfbGlzdDsJLyogRnJlZSBNc2dGcmFtZXMgcmVhZHkgdG8gYmUgZmlsbGVkICovCisJLyogRmlsbGVkIE1zZ0ZyYW1lc3Mgd2FpdGluZyB0byBiZSByZWFkICovCisJc3RydWN0IGxzdF9saXN0ICptc2dfdXNlZF9saXN0OworCXZvaWQgKmFyZzsJCS8qIEhhbmRsZSBwYXNzZWQgdG8gbWdyIG9uX2V4aXQgY2FsbGJhY2sgKi8KKwlzdHJ1Y3Qgc3luY19vYmplY3QgKnN5bmNfZXZlbnQ7CS8qIFNpZ25hbGxlZCB3aGVuIG1lc3NhZ2UgaXMgcmVhZHkgKi8KKwlzdHJ1Y3Qgc3luY19vYmplY3QgKnN5bmNfZG9uZTsJLyogRm9yIHN5bmNocm9uaXppbmcgY2xlYW51cCAqLworCXN0cnVjdCBzeW5jX29iamVjdCAqc3luY19kb25lX2FjazsJLyogRm9yIHN5bmNocm9uaXppbmcgY2xlYW51cCAqLworCXN0cnVjdCBudGZ5X29iamVjdCAqbnRmeV9vYmo7CS8qIEZvciBub3RpZmljYXRpb24gb2YgbWVzc2FnZSByZWFkeSAqLworCWJvb2wgZG9uZTsJCS8qIFRSVUUgPD09PiBkZWxldGluZyB0aGUgb2JqZWN0ICovCisJdTMyIGlvX21zZ19wZW5kOwkvKiBOdW1iZXIgb2YgcGVuZGluZyBNU0dfZ2V0L3B1dCBjYWxscyAqLworfTsKKworLyoKKyAqICA9PT09PT09PSBtc2dfZHNwbXNnID09PT09PT09CisgKi8KK3N0cnVjdCBtc2dfZHNwbXNnIHsKKwlzdHJ1Y3QgZHNwX21zZyBtc2c7CisJdTMyIG1zZ3FfaWQ7CQkvKiBJZGVudGlmaWVzIHRoZSBub2RlIHRoZSBtZXNzYWdlIGdvZXMgdG8gKi8KK307CisKKy8qCisgKiAgPT09PT09PT0gbXNnX2ZyYW1lID09PT09PT09CisgKi8KK3N0cnVjdCBtc2dfZnJhbWUgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdF9lbGVtOworCXN0cnVjdCBtc2dfZHNwbXNnIG1zZ19kYXRhOworfTsKKworI2VuZGlmIC8qIF9NU0dfU01fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9fdGlvbWFwLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9fdGlvbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMxZjE1NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL190aW9tYXAuaApAQCAtMCwwICsxLDM3MSBAQAorLyoKKyAqIF90aW9tYXAuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBEZWZpbml0aW9ucyBhbmQgdHlwZXMgcHJpdmF0ZSB0byB0aGlzIEJyaWRnZSBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBfVElPTUFQXworI2RlZmluZSBfVElPTUFQXworCisjaW5jbHVkZSA8cGxhdC9wb3dlcmRvbWFpbi5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2tkb21haW4uaD4KKyNpbmNsdWRlIDxtYWNoLW9tYXAyL3BybS1yZWdiaXRzLTM0eHguaD4KKyNpbmNsdWRlIDxtYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMzR4eC5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXZkZWZzLmg+CisjaW5jbHVkZSA8aHdfZGVmcy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3Bpb2N0bC5oPgkvKiBmb3IgYnJpZGdlX2lvY3RsX2V4dHByb2MgZGVmbiAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9zeW5jLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Nsay5oPgorCitzdHJ1Y3QgbWFwX2w0X3BlcmlwaGVyYWwgeworCXUzMiBwaHlzX2FkZHI7CisJdTMyIGRzcF92aXJ0X2FkZHI7Cit9OworCisjZGVmaW5lIEFSTV9NQUlMQk9YX1NUQVJUICAgICAgICAgICAgICAgMHhmZmZjZjAwMAorI2RlZmluZSBBUk1fTUFJTEJPWF9MRU5HVEggICAgICAgICAgICAgIDB4ODAwCisKKy8qIE5ldyBSZWdpc3RlcnMgaW4gT01BUDMuMSAqLworCisjZGVmaW5lIFRFU1RCTE9DS19JRF9TVEFSVCAgICAgICAgICAgICAgMHhmZmZlZDQwMAorI2RlZmluZSBURVNUQkxPQ0tfSURfTEVOR1RIICAgICAgICAgICAgIDB4ZmYKKworLyogSUQgUmV0dXJuZWQgYnkgT01BUDE1MTAgKi8KKyNkZWZpbmUgVEJDX0lEX1ZBTFVFICAgICAgICAgICAgICAgICAgICAweEI0NzAwMkYKKworI2RlZmluZSBTUEFDRV9MRU5HVEggICAgICAgICAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBBUElfQ0xLTV9EUExMX0RNQSAgICAgICAgICAgICAgIDB4ZmZmZWMwMDAKKyNkZWZpbmUgQVJNX0lOVEVSUlVQVF9PRkZTRVQgICAgICAgICAgICAweGIwMAorCisjZGVmaW5lIEJJT1MyNFhYCisKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9OVUxMICAgICAgICAgIDB4MAorI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX05VTEwgICAgICAgMHgwCisKKyNkZWZpbmUgTUFYX0xPQ0tfVExCX0VOVFJJRVMgMTUKKworI2RlZmluZSBMNF9QRVJJUEhFUkFMX1BSTSAgICAgICAgMHg0ODMwNjAwMAkvKlBSTSBMNCBQZXJpcGhlcmFsICovCisjZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfUFJNICAgICAweDExODFlMDAwCisjZGVmaW5lIEw0X1BFUklQSEVSQUxfU0NNICAgICAgICAweDQ4MDAyMDAwCS8qU0NNIEw0IFBlcmlwaGVyYWwgKi8KKyNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9TQ00gICAgIDB4MTE4MWYwMDAKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9NTVUgICAgICAgIDB4NUQwMDAwMDAJLypNTVUgTDQgUGVyaXBoZXJhbCAqLworI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX01NVSAgICAgMHgxMTgyMDAwMAorI2RlZmluZSBMNF9QRVJJUEhFUkFMX0NNICAgICAgICAweDQ4MDA0MDAwCS8qIENvcmUgTDQsIENsb2NrIE1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9DTSAgICAgMHgxMTgxYzAwMAorI2RlZmluZSBMNF9QRVJJUEhFUkFMX1BFUiAgICAgICAgMHg0ODAwNTAwMAkvKiAgUEVSICovCisjZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfUEVSICAgICAweDExODFkMDAwCisKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9HUElPMSAgICAgICAweDQ4MzEwMDAwCisjZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfR1BJTzEgICAgMHgxMTgwOTAwMAorI2RlZmluZSBMNF9QRVJJUEhFUkFMX0dQSU8yICAgICAgIDB4NDkwNTAwMDAKKyNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9HUElPMiAgICAweDExODBhMDAwCisjZGVmaW5lIEw0X1BFUklQSEVSQUxfR1BJTzMgICAgICAgMHg0OTA1MjAwMAorI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX0dQSU8zICAgIDB4MTE4MGIwMDAKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9HUElPNCAgICAgICAweDQ5MDU0MDAwCisjZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfR1BJTzQgICAgMHgxMTgwYzAwMAorI2RlZmluZSBMNF9QRVJJUEhFUkFMX0dQSU81ICAgICAgIDB4NDkwNTYwMDAKKyNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9HUElPNSAgICAweDExODBkMDAwCisKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9JVkEyV0RUICAgICAgMHg0OTAzMDAwMAorI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX0lWQTJXRFQgICAweDExODBlMDAwCisKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9ESVNQTEFZICAgICAweDQ4MDUwMDAwCisjZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfRElTUExBWSAgMHgxMTgwZjAwMAorCisjZGVmaW5lIEw0X1BFUklQSEVSQUxfU1NJICAgICAgICAgMHg0ODA1ODAwMAorI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX1NTSSAgICAgIDB4MTE4MDQwMDAKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9HREQgICAgICAgICAweDQ4MDU5MDAwCisjZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfR0REICAgICAgMHgxMTgwNTAwMAorI2RlZmluZSBMNF9QRVJJUEhFUkFMX1NTMSAgICAgICAgIDB4NDgwNWEwMDAKKyNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9TUzEgICAgICAweDExODA2MDAwCisjZGVmaW5lIEw0X1BFUklQSEVSQUxfU1MyICAgICAgICAgMHg0ODA1YjAwMAorI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX1NTMiAgICAgIDB4MTE4MDcwMDAKKworI2RlZmluZSBMNF9QRVJJUEhFUkFMX0NBTUVSQSAgICAgIDB4NDgwQkMwMDAKKyNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9DQU1FUkEgICAweDExODE5MDAwCisKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9TRE1BICAgICAgICAweDQ4MDU2MDAwCisjZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfU0RNQSAgICAgMHgxMTgxMDAwMAkvKiAweDExODFkMDAwIGNvbmZsaWN0IHcvIFBFUiAqLworCisjZGVmaW5lIEw0X1BFUklQSEVSQUxfVUFSVDEgICAgICAgICAgICAgMHg0ODA2YTAwMAorI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX1VBUlQxICAgICAgICAgIDB4MTE4MTEwMDAKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9VQVJUMiAgICAgICAgICAgICAweDQ4MDZjMDAwCisjZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfVUFSVDIgICAgICAgICAgMHgxMTgxMjAwMAorI2RlZmluZSBMNF9QRVJJUEhFUkFMX1VBUlQzICAgICAgICAgICAgIDB4NDkwMjAwMDAKKyNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9VQVJUMyAgICAweDExODEzMDAwCisKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9NQ0JTUDEgICAgICAweDQ4MDc0MDAwCisjZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfTUNCU1AxICAgMHgxMTgxNDAwMAorI2RlZmluZSBMNF9QRVJJUEhFUkFMX01DQlNQMiAgICAgIDB4NDkwMjIwMDAKKyNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9NQ0JTUDIgICAweDExODE1MDAwCisjZGVmaW5lIEw0X1BFUklQSEVSQUxfTUNCU1AzICAgICAgMHg0OTAyNDAwMAorI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX01DQlNQMyAgIDB4MTE4MTYwMDAKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9NQ0JTUDQgICAgICAweDQ5MDI2MDAwCisjZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfTUNCU1A0ICAgMHgxMTgxNzAwMAorI2RlZmluZSBMNF9QRVJJUEhFUkFMX01DQlNQNSAgICAgIDB4NDgwOTYwMDAKKyNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9NQ0JTUDUgICAweDExODE4MDAwCisKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9HUFRJTUVSNSAgICAweDQ5MDM4MDAwCisjZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfR1BUSU1FUjUgMHgxMTgwMDAwMAorI2RlZmluZSBMNF9QRVJJUEhFUkFMX0dQVElNRVI2ICAgIDB4NDkwM2EwMDAKKyNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9HUFRJTUVSNiAweDExODAxMDAwCisjZGVmaW5lIEw0X1BFUklQSEVSQUxfR1BUSU1FUjcgICAgMHg0OTAzYzAwMAorI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX0dQVElNRVI3IDB4MTE4MDIwMDAKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9HUFRJTUVSOCAgICAweDQ5MDNlMDAwCisjZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfR1BUSU1FUjggMHgxMTgwMzAwMAorCisjZGVmaW5lIEw0X1BFUklQSEVSQUxfU1BJMSAgICAgIDB4NDgwOTgwMDAKKyNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9TUEkxICAgMHgxMTgxYTAwMAorI2RlZmluZSBMNF9QRVJJUEhFUkFMX1NQSTIgICAgICAweDQ4MDlhMDAwCisjZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfU1BJMiAgIDB4MTE4MWIwMDAKKworI2RlZmluZSBMNF9QRVJJUEhFUkFMX01CT1ggICAgICAgIDB4NDgwOTQwMDAKKyNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9NQk9YICAgICAweDExODA4MDAwCisKKyNkZWZpbmUgUE1fR1JQU0VMX0JBU0UgCQkJMHg0ODMwNzAwMAorI2RlZmluZSBEU1BWQV9HUlBTRUxfQkFTRSAJCTB4MTE4MjEwMDAKKworI2RlZmluZSBMNF9QRVJJUEhFUkFMX1NJREVUT05FX01DQlNQMiAgICAgICAgMHg0OTAyODAwMAorI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX1NJREVUT05FX01DQlNQMiAweDExODI0MDAwCisjZGVmaW5lIEw0X1BFUklQSEVSQUxfU0lERVRPTkVfTUNCU1AzICAgICAgICAweDQ5MDJhMDAwCisjZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfU0lERVRPTkVfTUNCU1AzIDB4MTE4MjUwMDAKKworLyogZGVmaW5lIGEgc3RhdGljIGFycmF5IHdpdGggTDQgbWFwcGluZ3MgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWFwX2w0X3BlcmlwaGVyYWwgbDRfcGVyaXBoZXJhbF90YWJsZVtdID0geworCXtMNF9QRVJJUEhFUkFMX01CT1gsIERTUFZBX1BFUklQSEVSQUxfTUJPWH0sCisJe0w0X1BFUklQSEVSQUxfU0NNLCBEU1BWQV9QRVJJUEhFUkFMX1NDTX0sCisJe0w0X1BFUklQSEVSQUxfTU1VLCBEU1BWQV9QRVJJUEhFUkFMX01NVX0sCisJe0w0X1BFUklQSEVSQUxfR1BUSU1FUjUsIERTUFZBX1BFUklQSEVSQUxfR1BUSU1FUjV9LAorCXtMNF9QRVJJUEhFUkFMX0dQVElNRVI2LCBEU1BWQV9QRVJJUEhFUkFMX0dQVElNRVI2fSwKKwl7TDRfUEVSSVBIRVJBTF9HUFRJTUVSNywgRFNQVkFfUEVSSVBIRVJBTF9HUFRJTUVSN30sCisJe0w0X1BFUklQSEVSQUxfR1BUSU1FUjgsIERTUFZBX1BFUklQSEVSQUxfR1BUSU1FUjh9LAorCXtMNF9QRVJJUEhFUkFMX0dQSU8xLCBEU1BWQV9QRVJJUEhFUkFMX0dQSU8xfSwKKwl7TDRfUEVSSVBIRVJBTF9HUElPMiwgRFNQVkFfUEVSSVBIRVJBTF9HUElPMn0sCisJe0w0X1BFUklQSEVSQUxfR1BJTzMsIERTUFZBX1BFUklQSEVSQUxfR1BJTzN9LAorCXtMNF9QRVJJUEhFUkFMX0dQSU80LCBEU1BWQV9QRVJJUEhFUkFMX0dQSU80fSwKKwl7TDRfUEVSSVBIRVJBTF9HUElPNSwgRFNQVkFfUEVSSVBIRVJBTF9HUElPNX0sCisJe0w0X1BFUklQSEVSQUxfSVZBMldEVCwgRFNQVkFfUEVSSVBIRVJBTF9JVkEyV0RUfSwKKwl7TDRfUEVSSVBIRVJBTF9ESVNQTEFZLCBEU1BWQV9QRVJJUEhFUkFMX0RJU1BMQVl9LAorCXtMNF9QRVJJUEhFUkFMX1NTSSwgRFNQVkFfUEVSSVBIRVJBTF9TU0l9LAorCXtMNF9QRVJJUEhFUkFMX0dERCwgRFNQVkFfUEVSSVBIRVJBTF9HRER9LAorCXtMNF9QRVJJUEhFUkFMX1NTMSwgRFNQVkFfUEVSSVBIRVJBTF9TUzF9LAorCXtMNF9QRVJJUEhFUkFMX1NTMiwgRFNQVkFfUEVSSVBIRVJBTF9TUzJ9LAorCXtMNF9QRVJJUEhFUkFMX1VBUlQxLCBEU1BWQV9QRVJJUEhFUkFMX1VBUlQxfSwKKwl7TDRfUEVSSVBIRVJBTF9VQVJUMiwgRFNQVkFfUEVSSVBIRVJBTF9VQVJUMn0sCisJe0w0X1BFUklQSEVSQUxfVUFSVDMsIERTUFZBX1BFUklQSEVSQUxfVUFSVDN9LAorCXtMNF9QRVJJUEhFUkFMX01DQlNQMSwgRFNQVkFfUEVSSVBIRVJBTF9NQ0JTUDF9LAorCXtMNF9QRVJJUEhFUkFMX01DQlNQMiwgRFNQVkFfUEVSSVBIRVJBTF9NQ0JTUDJ9LAorCXtMNF9QRVJJUEhFUkFMX01DQlNQMywgRFNQVkFfUEVSSVBIRVJBTF9NQ0JTUDN9LAorCXtMNF9QRVJJUEhFUkFMX01DQlNQNCwgRFNQVkFfUEVSSVBIRVJBTF9NQ0JTUDR9LAorCXtMNF9QRVJJUEhFUkFMX01DQlNQNSwgRFNQVkFfUEVSSVBIRVJBTF9NQ0JTUDV9LAorCXtMNF9QRVJJUEhFUkFMX0NBTUVSQSwgRFNQVkFfUEVSSVBIRVJBTF9DQU1FUkF9LAorCXtMNF9QRVJJUEhFUkFMX1NQSTEsIERTUFZBX1BFUklQSEVSQUxfU1BJMX0sCisJe0w0X1BFUklQSEVSQUxfU1BJMiwgRFNQVkFfUEVSSVBIRVJBTF9TUEkyfSwKKwl7TDRfUEVSSVBIRVJBTF9QUk0sIERTUFZBX1BFUklQSEVSQUxfUFJNfSwKKwl7TDRfUEVSSVBIRVJBTF9DTSwgRFNQVkFfUEVSSVBIRVJBTF9DTX0sCisJe0w0X1BFUklQSEVSQUxfUEVSLCBEU1BWQV9QRVJJUEhFUkFMX1BFUn0sCisJe1BNX0dSUFNFTF9CQVNFLCBEU1BWQV9HUlBTRUxfQkFTRX0sCisJe0w0X1BFUklQSEVSQUxfU0lERVRPTkVfTUNCU1AyLCBEU1BWQV9QRVJJUEhFUkFMX1NJREVUT05FX01DQlNQMn0sCisJe0w0X1BFUklQSEVSQUxfU0lERVRPTkVfTUNCU1AzLCBEU1BWQV9QRVJJUEhFUkFMX1NJREVUT05FX01DQlNQM30sCisJe0w0X1BFUklQSEVSQUxfTlVMTCwgRFNQVkFfUEVSSVBIRVJBTF9OVUxMfQorfTsKKworLyoKKyAqICAgMTUgICAgICAgICAxMCAgICAgICAgICAgICAgICAgIDAKKyAqICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgfDB8MHwxfDB8MHwwfGN8Y3xjfGl8aXxpfGl8aXxpfGl8CisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgfCAgKGNsYXNzKSAgfCAobW9kdWxlIHNwZWNpZmljKSB8CisgKgorICogIHdoZXJlICBjIC0+IEV4dGVybmVsIENsb2NrIENvbW1hbmQ6IENsayAmIEF1dG9pZGxlIERpc2FibGUvRW5hYmxlCisgKiAgaSAtPiBFeHRlcm5hbCBDbG9jayBJRCBUaW1lcnMgNSw2LDcsOCwgTWNCU1AxLDIgYW5kIFdEVDMKKyAqLworCisvKiBNQlhfUE1fQ0xLX0lETUFTSzogRFNQIEV4dGVybmFsIGNsb2NrIGlkIG1hc2suICovCisjZGVmaW5lIE1CWF9QTV9DTEtfSURNQVNLICAgMHg3RgorCisvKiBNQlhfUE1fQ0xLX0NNRFNISUZUOiBEU1AgRXh0ZXJuYWwgY2xvY2sgY29tbWFuZCBzaGlmdC4gKi8KKyNkZWZpbmUgTUJYX1BNX0NMS19DTURTSElGVCA3CisKKy8qIE1CWF9QTV9DTEtfQ01ETUFTSzogRFNQIEV4dGVybmFsIGNsb2NrIGNvbW1hbmQgbWFzay4gKi8KKyNkZWZpbmUgTUJYX1BNX0NMS19DTURNQVNLIDcKKworLyogTUJYX1BNX01BWF9SRVNPVVJDRVM6IENPUkUgMSBDbG9jayByZXNvdXJjZXMuICovCisjZGVmaW5lIE1CWF9DT1JFMV9SRVNPVVJDRVMgNworCisvKiBNQlhfUE1fTUFYX1JFU09VUkNFUzogQ09SRSAyIENsb2NrIFJlc291cmNlcy4gKi8KKyNkZWZpbmUgTUJYX0NPUkUyX1JFU09VUkNFUyAxCisKKy8qIE1CWF9QTV9NQVhfUkVTT1VSQ0VTOiBUT1RBTCBDbG9jayBSZW9zdXJjZXMuICovCisjZGVmaW5lIE1CWF9QTV9NQVhfUkVTT1VSQ0VTIDExCisKKy8qICBQb3dlciBNYW5hZ2VtZW50IENvbW1hbmRzICovCisjZGVmaW5lIEJQV1JfRElTQUJMRV9DTE9DSwkwCisjZGVmaW5lIEJQV1JfRU5BQkxFX0NMT0NLCTEKKworLyogT01BUDI0Mnggc3BlY2lmaWMgcmVzb3VyY2VzICovCitlbnVtIGJwd3JfZXh0X2Nsb2NrX2lkIHsKKwlCUFdSX0dQX1RJTUVSNSA9IDB4MTAsCisJQlBXUl9HUF9USU1FUjYsCisJQlBXUl9HUF9USU1FUjcsCisJQlBXUl9HUF9USU1FUjgsCisJQlBXUl9XRF9USU1FUjMsCisJQlBXUl9NQ0JTUDEsCisJQlBXUl9NQ0JTUDIsCisJQlBXUl9NQ0JTUDMsCisJQlBXUl9NQ0JTUDQsCisJQlBXUl9NQ0JTUDUsCisJQlBXUl9TU0kgPSAweDIwCit9OworCitzdGF0aWMgY29uc3QgdTMyIGJwd3JfY2xraWRbXSA9IHsKKwkodTMyKSBCUFdSX0dQX1RJTUVSNSwKKwkodTMyKSBCUFdSX0dQX1RJTUVSNiwKKwkodTMyKSBCUFdSX0dQX1RJTUVSNywKKwkodTMyKSBCUFdSX0dQX1RJTUVSOCwKKwkodTMyKSBCUFdSX1dEX1RJTUVSMywKKwkodTMyKSBCUFdSX01DQlNQMSwKKwkodTMyKSBCUFdSX01DQlNQMiwKKwkodTMyKSBCUFdSX01DQlNQMywKKwkodTMyKSBCUFdSX01DQlNQNCwKKwkodTMyKSBCUFdSX01DQlNQNSwKKwkodTMyKSBCUFdSX1NTSQorfTsKKworc3RydWN0IGJwd3JfY2xrX3QgeworCXUzMiBjbGtfaWQ7CisJZW51bSBkc3BfY2xrX2lkIGNsazsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnB3cl9jbGtfdCBicHdyX2Nsa3NbXSA9IHsKKwl7KHUzMikgQlBXUl9HUF9USU1FUjUsIERTUF9DTEtfR1BUNX0sCisJeyh1MzIpIEJQV1JfR1BfVElNRVI2LCBEU1BfQ0xLX0dQVDZ9LAorCXsodTMyKSBCUFdSX0dQX1RJTUVSNywgRFNQX0NMS19HUFQ3fSwKKwl7KHUzMikgQlBXUl9HUF9USU1FUjgsIERTUF9DTEtfR1BUOH0sCisJeyh1MzIpIEJQV1JfV0RfVElNRVIzLCBEU1BfQ0xLX1dEVDN9LAorCXsodTMyKSBCUFdSX01DQlNQMSwgRFNQX0NMS19NQ0JTUDF9LAorCXsodTMyKSBCUFdSX01DQlNQMiwgRFNQX0NMS19NQ0JTUDJ9LAorCXsodTMyKSBCUFdSX01DQlNQMywgRFNQX0NMS19NQ0JTUDN9LAorCXsodTMyKSBCUFdSX01DQlNQNCwgRFNQX0NMS19NQ0JTUDR9LAorCXsodTMyKSBCUFdSX01DQlNQNSwgRFNQX0NMS19NQ0JTUDV9LAorCXsodTMyKSBCUFdSX1NTSSwgRFNQX0NMS19TU0l9Cit9OworCisvKiBJbnRlcnJ1cHQgUmVnaXN0ZXIgT2Zmc2V0cyAqLworI2RlZmluZSBJTlRIX0lUX1JFR19PRkZTRVQgICAgICAgICAgICAgIDB4MDAJLyogSW50ZXJydXB0IHJlZ2lzdGVyIG9mZnNldCAqLworI2RlZmluZSBJTlRIX01BU0tfSVRfUkVHX09GRlNFVCAgICAgICAgIDB4MDQJLyogTWFzayBJbnRlcnJ1cHQgcmVnIG9mZnNldCAqLworCisjZGVmaW5lICAgRFNQX01BSUxCT1gxX0lOVCAgICAgICAgICAgICAgMTAKKy8qCisgKiAgQml0IGRlZmluaXRpb24gb2YgIEludGVycnVwdCAgTGV2ZWwgIFJlZ2lzdGVycworICovCisKKy8qIE1haWwgQm94IGRlZmluZXMgKi8KKyNkZWZpbmUgTUJfQVJNMkRTUDFfUkVHX09GRlNFVCAgICAgICAgICAweDAwCisKKyNkZWZpbmUgTUJfQVJNMkRTUDFCX1JFR19PRkZTRVQgICAgICAgICAweDA0CisKKyNkZWZpbmUgTUJfRFNQMkFSTTFCX1JFR19PRkZTRVQgICAgICAgICAweDBDCisKKyNkZWZpbmUgTUJfQVJNMkRTUDFfRkxBR19SRUdfT0ZGU0VUICAgICAweDE4CisKKyNkZWZpbmUgTUJfQVJNMkRTUF9GTEFHICAgICAgICAgICAgICAgICAweDAwMDEKKworI2RlZmluZSBNQk9YX0FSTTJEU1AgSFdfTUJPWF9JRDAKKyNkZWZpbmUgTUJPWF9EU1AyQVJNIEhXX01CT1hfSUQxCisjZGVmaW5lIE1CT1hfQVJNIEhXX01CT1hfVTBfQVJNCisjZGVmaW5lIE1CT1hfRFNQIEhXX01CT1hfVTFfRFNQMQorCisjZGVmaW5lIEVOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZQorI2RlZmluZSBESVNBQkxFICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlCisKKyNkZWZpbmUgSElHSF9MRVZFTCAgICAgICAgICAgICAgICAgICAgICB0cnVlCisjZGVmaW5lIExPV19MRVZFTCAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UKKworLyogTWFjcm8ncyAqLworI2RlZmluZSBDTEVBUl9CSVQocmVnLCBtYXNrKSAgICAgICAgICAgICAocmVnICY9IH5tYXNrKQorI2RlZmluZSBTRVRfQklUKHJlZywgbWFzaykgICAgICAgICAgICAgICAocmVnIHw9IG1hc2spCisKKyNkZWZpbmUgU0VUX0dST1VQX0JJVFMxNihyZWcsIHBvc2l0aW9uLCB3aWR0aCwgdmFsdWUpIFwKKwlkbyB7XAorCQlyZWcgJj0gfigoMHhGRkZGID4+ICgxNiAtICh3aWR0aCkpKSA8PCAocG9zaXRpb24pKSA7IFwKKwkJcmVnIHw9ICgodmFsdWUgJiAoMHhGRkZGID4+ICgxNiAtICh3aWR0aCkpKSkgPDwgKHBvc2l0aW9uKSk7IFwKKwl9IHdoaWxlICgwKTsKKworI2RlZmluZSBDTEVBUl9CSVRfSU5ERVgocmVnLCBpbmRleCkgICAocmVnICY9IH4oMSA8PCAoaW5kZXgpKSkKKworLyogVGhpcyBCcmlkZ2UgZHJpdmVyJ3MgZGV2aWNlIGNvbnRleHQ6ICovCitzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0IHsKKwlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmo7CS8qIEhhbmRsZSB0byBCcmlkZ2UgZGV2aWNlIG9iamVjdC4gKi8KKwl1MzIgZHdfZHNwX2Jhc2VfYWRkcjsJLyogQXJtJ3MgQVBJIHRvIERTUCB2aXJ0IGJhc2UgYWRkciAqLworCS8qCisJICogRFNQIEV4dGVybmFsIG1lbW9yeSBwcm9nIGFkZHJlc3MgYXMgc2VlbiB2aXJ0dWFsbHkgYnkgdGhlIE9TIG9uCisJICogdGhlIGhvc3Qgc2lkZS4KKwkgKi8KKwl1MzIgZHdfZHNwX2V4dF9iYXNlX2FkZHI7CS8qIFNlZSB0aGUgY29tbWVudCBhYm92ZSAqLworCXUzMiBkd19hcGlfcmVnX2Jhc2U7CS8qIEFQSSBtZW0gbWFwJ2QgcmVnaXN0ZXJzICovCisJdm9pZCBfX2lvbWVtICpkd19kc3BfbW11X2Jhc2U7CS8qIERTUCBNTVUgTWFwcGVkIHJlZ2lzdGVycyAqLworCXUzMiBkd19hcGlfY2xrX2Jhc2U7CS8qIENMSyBSZWdpc3RlcnMgKi8KKwl1MzIgZHdfZHNwX2Nsa19tMl9iYXNlOwkvKiBEU1AgQ2xvY2sgTW9kdWxlIG0yICovCisJdTMyIGR3X3B1YmxpY19yaGVhOwkvKiBQdWIgUmhlYSAqLworCXUzMiBkd19pbnRfYWRkcjsJLyogTUIgSU5UUiByZWcgKi8KKwl1MzIgZHdfdGNfZW5kaWFuaXNtOwkvKiBUQyBFbmRpYW5pc20gcmVnaXN0ZXIgKi8KKwl1MzIgZHdfdGVzdF9iYXNlOwkvKiBEU1AgTU1VIE1hcHBlZCByZWdpc3RlcnMgKi8KKwl1MzIgZHdfc2VsZl9sb29wOwkvKiBQb2ludGVyIHRvIHRoZSBzZWxmbG9vcCAqLworCXUzMiBkd19kc3Bfc3RhcnRfYWRkOwkvKiBBUEkgQm9vdCB2ZWN0b3IgKi8KKwl1MzIgZHdfaW50ZXJuYWxfc2l6ZTsJLyogSW50ZXJuYWwgbWVtb3J5IHNpemUgKi8KKworCXN0cnVjdCBvbWFwX21ib3ggKm1ib3g7CQkvKiBNYWlsIGJveCBoYW5kbGUgKi8KKworCXN0cnVjdCBjZmdfaG9zdHJlcyAqcmVzb3VyY2VzOwkvKiBIb3N0IFJlc291cmNlcyAqLworCisJLyoKKwkgKiBQcm9jZXNzb3Igc3BlY2lmaWMgaW5mbyBpcyBzZXQgd2hlbiBwcm9nIGxvYWRlZCBhbmQgcmVhZCBmcm9tIERDRC4KKwkgKiBbU2VlIGJyaWRnZV9kZXZfY3RybCgpXSAgUFJPQyBpbmZvIGNvbnRhaW5zIERTUC1NTVUgVExCIGVudHJpZXMuCisJICovCisJLyogRE1NVSBUTEIgZW50cmllcyAqLworCXN0cnVjdCBicmlkZ2VfaW9jdGxfZXh0cHJvYyBhdGxiX2VudHJ5W0JSRElPQ1RMX05VTU9GTU1VVExCXTsKKwl1MzIgZHdfYnJkX3N0YXRlOyAgICAgICAvKiBMYXN0IGtub3duIGJvYXJkIHN0YXRlLiAqLworCisJLyogVEMgU2V0dGluZ3MgKi8KKwlib29sIHRjX3dvcmRfc3dhcF9vbjsJLyogVHJhZmZpYyBDb250cm9sbGVyIFdvcmQgU3dhcCAqLworCXN0cnVjdCBwZ190YWJsZV9hdHRycyAqcHRfYXR0cnM7CisJdTMyIGRzcF9wZXJfY2xrczsKK307CisKKy8qCisgKiBJZiBkc3BfZGVidWcgaXMgdHJ1ZSwgZG8gbm90IGJyYW5jaCB0byB0aGUgRFNQIGVudHJ5CisgKiBwb2ludCBhbmQgd2FpdCBmb3IgRFNQIHRvIGJvb3QuCisgKi8KK2V4dGVybiBzMzIgZHNwX2RlYnVnOworCisvKgorICogID09PT09PT09IHNtX2ludGVycnVwdF9kc3AgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTZXQgaW50ZXJydXB0IHZhbHVlICYgc2VuZCBhbiBpbnRlcnJ1cHQgdG8gdGhlIERTUCBwcm9jZXNzb3IocykuCisgKiAgICAgIFRoaXMgaXMgdHlwaWNhbHkgdXNlZCB3aGVuIG1haWxib3ggaW50ZXJydXB0IG1lY2hhbmlzbXMgYWxsb3cgZGF0YQorICogICAgICB0byBiZSBhc3NvY2lhdGVkIHdpdGggaW50ZXJydXB0IHN1Y2ggYXMgZm9yIE9NQVAncyBDTUQvREFUQSByZWdzLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGRldl9jb250ZXh0OiAgICBIYW5kbGUgdG8gQnJpZGdlIGRyaXZlciBkZWZpbmVkIGRldmljZSBpbmZvLgorICogICAgICBtYl92YWw6ICAgICAgICAgVmFsdWUgYXNzb2NpYXRlZCB3aXRoIGludGVycnVwdChlLmcuIG1haWxib3ggdmFsdWUpLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBJbnRlcnJ1cHQgc2VudDsKKyAqICAgICAgZWxzZTogICAgICAgICAgIFVuYWJsZSB0byBzZW5kIGludGVycnVwdC4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICovCitpbnQgc21faW50ZXJydXB0X2RzcChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCwgdTE2IG1iX3ZhbCk7CisKKyNlbmRpZiAvKiBfVElPTUFQXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvX3Rpb21hcF9wd3IuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL190aW9tYXBfcHdyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQwMzU0ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL190aW9tYXBfcHdyLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIF90aW9tYXBfcHdyLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogRGVmaW5pdGlvbnMgYW5kIHR5cGVzIGZvciB0aGUgRFNQIHdha2Uvc2xlZXAgcm91dGluZXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBfVElPTUFQX1BXUl8KKyNkZWZpbmUgX1RJT01BUF9QV1JfCisKKyNpZmRlZiBDT05GSUdfUE0KK2V4dGVybiBzMzIgZHNwX3Rlc3Rfc2xlZXBzdGF0ZTsKKyNlbmRpZgorCitleHRlcm4gc3RydWN0IG1haWxib3hfY29udGV4dCBtYm94c2V0dGluZzsKKworLyoKKyAqID09PT09PT09IHdha2VfZHNwID09PT09PT09PQorICogV2FrZXMgdXAgdGhlIERTUCBmcm9tIERlZXBTbGVlcAorICovCitleHRlcm4gaW50IHdha2VfZHNwKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0LAorCQkJCQkJCXZvaWQgKnBhcmdzKTsKKworLyoKKyAqID09PT09PT09IHNsZWVwX2RzcCA9PT09PT09PT0KKyAqIFBsYWNlcyB0aGUgRFNQIGluIERlZXBTbGVlcC4KKyAqLworZXh0ZXJuIGludCBzbGVlcF9kc3Aoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQsCisJCQkgICAgdTMyIGR3X2NtZCwgdm9pZCAqcGFyZ3MpOworLyoKKyAqICA9PT09PT09PWludGVycnVwdF9kc3A9PT09PT09PQorICogIAkgIFNlbmRzIGFuIGludGVycnVwdCB0byBEU1AgdW5jb25kaXRpb25hbGx5LgorICovCitleHRlcm4gdm9pZCBpbnRlcnJ1cHRfZHNwKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0LAorCQkJCQkJCXUxNiBtYl92YWwpOworCisvKgorICogPT09PT09PT0gd2FrZV9kc3AgPT09PT09PT09CisgKiBXYWtlcyB1cCB0aGUgRFNQIGZyb20gRGVlcFNsZWVwCisgKi8KK2V4dGVybiBpbnQgZHNwX3BlcmlwaGVyYWxfY2xrX2N0cmwoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dAorCQkJCQkqZGV2X2NvbnRleHQsIHZvaWQgKnBhcmdzKTsKKy8qCisgKiAgPT09PT09PT0gaGFuZGxlX2hpYmVybmF0aW9uX2Zyb21fZHNwID09PT09PT09CisgKiAgCUhhbmRsZSBIaWJlcm5hdGlvbiByZXF1ZXN0ZWQgZnJvbSBEU1AKKyAqLworaW50IGhhbmRsZV9oaWJlcm5hdGlvbl9mcm9tX2RzcChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCk7CisvKgorICogID09PT09PT09IHBvc3Rfc2NhbGVfZHNwID09PT09PT09CisgKiAgCUhhbmRsZSBQb3N0IFNjYWxlIG5vdGlmaWNhdGlvbiB0byBEU1AKKyAqLworaW50IHBvc3Rfc2NhbGVfZHNwKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0LAorCQkJCQkJCXZvaWQgKnBhcmdzKTsKKy8qCisgKiAgPT09PT09PT0gcHJlX3NjYWxlX2RzcCA9PT09PT09PQorICogIAlIYW5kbGUgUHJlIFNjYWxlIG5vdGlmaWNhdGlvbiB0byBEU1AKKyAqLworaW50IHByZV9zY2FsZV9kc3Aoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQsCisJCQkJCQkJdm9pZCAqcGFyZ3MpOworLyoKKyAqICA9PT09PT09PSBoYW5kbGVfY29uc3RyYWludHNfc2V0ID09PT09PT09CisgKiAgCUhhbmRsZSBjb25zdHJhaW50cyByZXF1ZXN0IGZyb20gRFNQCisgKi8KK2ludCBoYW5kbGVfY29uc3RyYWludHNfc2V0KHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0LAorCQkJCSAgdm9pZCAqcGFyZ3MpOworCisvKgorICogID09PT09PT09IGRzcF9jbGtfd2FrZXVwX2V2ZW50X2N0cmwgPT09PT09PT0KKyAqICAgICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGdyb3VwIHNlbGN0aW9uIGJpdHMgZm9yIHdoaWxlCisgKiAgICAgZW5hYmxpbmcvZGlzYWJsaW5nLgorICovCit2b2lkIGRzcF9jbGtfd2FrZXVwX2V2ZW50X2N0cmwodTMyIGNsb2NrX2lkLCBib29sIGVuYWJsZSk7CisKKyNlbmRpZiAvKiBfVElPTUFQX1BXUl8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL2Nobmxfc20uYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL2Nobmxfc20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWUyYjIzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvY2hubF9zbS5jCkBAIC0wLDAgKzEsMTAxNCBAQAorLyoKKyAqIGNobmxfc20uYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBJbXBsZW1lbnRzIHVwcGVyIGVkZ2UgZnVuY3Rpb25zIGZvciBCcmlkZ2UgZHJpdmVyIGNoYW5uZWwgbW9kdWxlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKy8qCisgKiAgICAgIFRoZSBsb3dlciBlZGdlIGZ1bmN0aW9ucyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHRoZSBCcmlkZ2UgZHJpdmVyCisgKiAgICAgIHdyaXRlciwgYW5kIGFyZSBkZWNsYXJlZCBpbiBjaG5sX3NtLmguCisgKgorICogICAgICBDYXJlIGlzIHRha2VuIGluIHRoaXMgY29kZSB0byBwcmV2ZW50IHNpbXVsYXRhbmVvdXMgYWNjZXNzIHRvIGNoYW5uZWwKKyAqICAgICAgcXVldWVzIGZyb20KKyAqICAgICAgMS4gVGhyZWFkcy4KKyAqICAgICAgMi4gaW9fZHBjKCksIHNjaGVkdWxlZCBmcm9tIHRoZSBpb19pc3IoKSBhcyBhbiBldmVudC4KKyAqCisgKiAgICAgIFRoaXMgaXMgZG9uZSBwcmltYXJpbHkgYnk6CisgKiAgICAgIC0gU2VtYXBob3Jlcy4KKyAqICAgICAgLSBzdGF0ZSBmbGFncyBpbiB0aGUgY2hhbm5lbCBvYmplY3Q7IGFuZAorICogICAgICAtIGVuc3VyaW5nIHRoZSBJT19EaXNwYXRjaCgpIHJvdXRpbmUsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGJvdGgKKyAqICAgICAgICBDSE5MX0FkZElPUmVxKCkgYW5kIHRoZSBEUEMoaWYgaW1wbGVtZW50ZWQpLCBpcyBub3QgcmUtZW50ZXJlZC4KKyAqCisgKiAgQ2hhbm5lbCBJbnZhcmlhbnQ6CisgKiAgICAgIFRoZXJlIGlzIGFuIGltcG9ydGFudCBpbnZhcmlhbnQgY29uZGl0aW9uIHdoaWNoIG11c3QgYmUgbWFpbnRhaW5lZCBwZXIKKyAqICAgICAgY2hhbm5lbCBvdXRzaWRlIG9mIGJyaWRnZV9jaG5sX2dldF9pb2MoKSBhbmQgSU9fRGlzcGF0Y2goKSwgdmlvbGF0aW9uIG9mCisgKiAgICAgIHdoaWNoIG1heSBjYXVzZSB0aW1lb3V0cyBhbmQvb3IgZmFpbHVyZSBvZmZ1bmN0aW9uIHN5bmNfd2FpdF9vbl9ldmVudC4KKyAqICAgICAgVGhpcyBpbnZhcmlhbnQgY29uZGl0aW9uIGlzOgorICoKKyAqICAgICAgICAgIExTVF9FbXB0eShwY2hubC0+cGlvX2NvbXBsZXRpb25zKSA9PT4gcGNobmwtPnN5bmNfZXZlbnQgaXMgcmVzZXQKKyAqICAgICAgYW5kCisgKiAgICAgICAgICAhTFNUX0VtcHR5KHBjaG5sLT5waW9fY29tcGxldGlvbnMpID09PiBwY2hubC0+c3luY19ldmVudCBpcyBzZXQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPUyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEU1AvQklPUyBCcmlkZ2UgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcmFjZSAmIERlYnVnICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiYy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1MgQWRhcHRhdGlvbiBMYXllciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9jZmcuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvc3luYy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQnJpZGdlIERyaXZlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGNobmwuaD4KKyNpbmNsdWRlICJfdGlvbWFwLmgiCisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQbGF0Zm9ybSBNYW5hZ2VyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3RoZXJzICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2lvX3NtLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWZpbmUgZm9yIFRoaXMgKi8KKyNkZWZpbmUgVVNFUk1PREVfQUREUiAgIFBBR0VfT0ZGU0VUCisKKyNkZWZpbmUgTUFJTEJPWF9JUlEgSU5UX01BSUxfTVBVX0lSUQorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb24gUHJvdG90eXBlcyAqLworc3RhdGljIHN0cnVjdCBsc3RfbGlzdCAqY3JlYXRlX2NoaXJwX2xpc3QodTMyIGNoaXJwcyk7CisKK3N0YXRpYyB2b2lkIGZyZWVfY2hpcnBfbGlzdChzdHJ1Y3QgbHN0X2xpc3QgKmNoaXJwX2xpc3QpOworCitzdGF0aWMgc3RydWN0IGNobmxfaXJwICptYWtlX25ld19jaGlycCh2b2lkKTsKKworc3RhdGljIGludCBzZWFyY2hfZnJlZV9jaGFubmVsKHN0cnVjdCBjaG5sX21nciAqY2hubF9tZ3Jfb2JqLAorCQkJCSAgICAgIHUzMiAqY2hubCk7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2NobmxfYWRkX2lvX3JlcSA9PT09PT09PQorICogICAgICBFbnF1ZXVlIGFuIEkvTyByZXF1ZXN0IGZvciBkYXRhIHRyYW5zZmVyIG9uIGEgY2hhbm5lbCB0byB0aGUgRFNQLgorICogICAgICBUaGUgZGlyZWN0aW9uIChtb2RlKSBpcyBzcGVjaWZpZWQgaW4gdGhlIGNoYW5uZWwgb2JqZWN0LiBOb3RlIHRoZSBEU1AKKyAqICAgICAgYWRkcmVzcyBpcyBzcGVjaWZpZWQgZm9yIGNoYW5uZWxzIG9wZW5lZCBpbiBkaXJlY3QgSS9PIG1vZGUuCisgKi8KK2ludCBicmlkZ2VfY2hubF9hZGRfaW9fcmVxKHN0cnVjdCBjaG5sX29iamVjdCAqY2hubF9vYmosIHZvaWQgKmhvc3RfYnVmLAorCQkJICAgICAgIHUzMiBieXRlX3NpemUsIHUzMiBidWZfc2l6ZSwKKwkJCSAgICAgICB1MzIgZHdfZHNwX2FkZHIsIHUzMiBkd19hcmcpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGNobmxfb2JqZWN0ICpwY2hubCA9IChzdHJ1Y3QgY2hubF9vYmplY3QgKiljaG5sX29iajsKKwlzdHJ1Y3QgY2hubF9pcnAgKmNobmxfcGFja2V0X29iaiA9IE5VTEw7CisJc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQ7CisJc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmo7CisJdTggZHdfc3RhdGU7CisJYm9vbCBpc19lb3M7CisJc3RydWN0IGNobmxfbWdyICpjaG5sX21ncl9vYmogPSBwY2hubC0+Y2hubF9tZ3Jfb2JqOworCXU4ICpob3N0X3N5c19idWYgPSBOVUxMOworCWJvb2wgc2NoZWRfZHBjID0gZmFsc2U7CisJdTE2IG1iX3ZhbCA9IDA7CisKKwlpc19lb3MgPSAoYnl0ZV9zaXplID09IDApOworCisJLyogVmFsaWRhdGUgYXJncyAqLworCWlmICghaG9zdF9idWYgfHwgIXBjaG5sKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfSBlbHNlIGlmIChpc19lb3MgJiYgQ0hOTF9JU19JTlBVVChwY2hubC0+Y2hubF9tb2RlKSkgeworCQlzdGF0dXMgPSAtRVBFUk07CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQ2hlY2sgdGhlIGNoYW5uZWwgc3RhdGU6IG9ubHkgcXVldWUgY2hpcnAgaWYgY2hhbm5lbCBzdGF0ZQorCQkgKiBhbGxvd3MgaXQuCisJCSAqLworCQlkd19zdGF0ZSA9IHBjaG5sLT5kd19zdGF0ZTsKKwkJaWYgKGR3X3N0YXRlICE9IENITkxfU1RBVEVSRUFEWSkgeworCQkJaWYgKGR3X3N0YXRlICYgQ0hOTF9TVEFURUNBTkNFTCkKKwkJCQlzdGF0dXMgPSAtRUNBTkNFTEVEOworCQkJZWxzZSBpZiAoKGR3X3N0YXRlICYgQ0hOTF9TVEFURUVPUykgJiYKKwkJCQkgQ0hOTF9JU19PVVRQVVQocGNobmwtPmNobmxfbW9kZSkpCisJCQkJc3RhdHVzID0gLUVQSVBFOworCQkJZWxzZQorCQkJCS8qIE5vIG90aGVyIHBvc3NpYmxlIHN0YXRlcyBsZWZ0ICovCisJCQkJREJDX0FTU0VSVCgwKTsKKwkJfQorCX0KKworCWRldl9vYmogPSBkZXZfZ2V0X2ZpcnN0KCk7CisJZGV2X2dldF9icmlkZ2VfY29udGV4dChkZXZfb2JqLCAmZGV2X2N0eHQpOworCWlmICghZGV2X2N0eHQpCisJCXN0YXR1cyA9IC1FRkFVTFQ7CisKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJaWYgKHBjaG5sLT5jaG5sX3R5cGUgPT0gQ0hOTF9QQ1BZICYmIHBjaG5sLT5jaG5sX2lkID4gMSAmJiBob3N0X2J1ZikgeworCQlpZiAoIShob3N0X2J1ZiA8ICh2b2lkICopVVNFUk1PREVfQUREUikpIHsKKwkJCWhvc3Rfc3lzX2J1ZiA9IGhvc3RfYnVmOworCQkJZ290byBmdW5jX2NvbnQ7CisJCX0KKwkJLyogaWYgYWRkciBpbiB1c2VyIG1vZGUsIHRoZW4gY29weSB0byBrZXJuZWwgc3BhY2UgKi8KKwkJaG9zdF9zeXNfYnVmID0ga21hbGxvYyhidWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmIChob3N0X3N5c19idWYgPT0gTlVMTCkgeworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCWdvdG8gZnVuY19lbmQ7CisJCX0KKwkJaWYgKENITkxfSVNfT1VUUFVUKHBjaG5sLT5jaG5sX21vZGUpKSB7CisJCQlzdGF0dXMgPSBjb3B5X2Zyb21fdXNlcihob3N0X3N5c19idWYsIGhvc3RfYnVmLAorCQkJCQkJYnVmX3NpemUpOworCQkJaWYgKHN0YXR1cykgeworCQkJCWtmcmVlKGhvc3Rfc3lzX2J1Zik7CisJCQkJaG9zdF9zeXNfYnVmID0gTlVMTDsKKwkJCQlzdGF0dXMgPSAtRUZBVUxUOworCQkJCWdvdG8gZnVuY19lbmQ7CisJCQl9CisJCX0KKwl9CitmdW5jX2NvbnQ6CisJLyogTWFpbGJveCBJUlEgaXMgZGlzYWJsZWQgdG8gYXZvaWQgcmFjZSBjb25kaXRpb24gd2l0aCBETUEvWkNQWQorCSAqIGNoYW5uZWxzLiBEUENDUyBpcyBoZWxkIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aXRoIFBDUFkgY2hhbm5lbHMuCisJICogSWYgRFBDIGlzIHNjaGVkdWxlZCBpbiBwcm9jZXNzIGNvbnRleHQgKGlvc21fc2NoZWR1bGUpIGFuZCBhbnkKKwkgKiBub24tbWFpbGJveCBpbnRlcnJ1cHQgb2NjdXJzLCB0aGF0IERQQyB3aWxsIHJ1biBhbmQgYnJlYWsgQ1MuIEhlbmNlCisJICogd2UgZGlzYWJsZSBBTEwgRFBDcy4gV2Ugd2lsbCB0cnkgdG8gZGlzYWJsZSBPTkxZIElPIERQQyBsYXRlci4gKi8KKwlzcGluX2xvY2tfYmgoJmNobmxfbWdyX29iai0+Y2hubF9tZ3JfbG9jayk7CisJb21hcF9tYm94X2Rpc2FibGVfaXJxKGRldl9jdHh0LT5tYm94LCBJUlFfUlgpOworCWlmIChwY2hubC0+Y2hubF90eXBlID09IENITkxfUENQWSkgeworCQkvKiBUaGlzIGlzIGEgcHJvY2Vzc29yLWNvcHkgY2hhbm5lbC4gKi8KKwkJaWYgKCFzdGF0dXMgJiYgQ0hOTF9JU19PVVRQVVQocGNobmwtPmNobmxfbW9kZSkpIHsKKwkJCS8qIENoZWNrIGJ1ZmZlciBzaXplIG9uIG91dHB1dCBjaGFubmVscyBmb3IgZml0LiAqLworCQkJaWYgKGJ5dGVfc2l6ZSA+CisJCQkgICAgaW9fYnVmX3NpemUocGNobmwtPmNobmxfbWdyX29iai0+aGlvX21ncikpCisJCQkJc3RhdHVzID0gLUVJTlZBTDsKKworCQl9CisJfQorCWlmICghc3RhdHVzKSB7CisJCS8qIEdldCBhIGZyZWUgY2hpcnA6ICovCisJCWNobmxfcGFja2V0X29iaiA9CisJCSAgICAoc3RydWN0IGNobmxfaXJwICopbHN0X2dldF9oZWFkKHBjaG5sLT5mcmVlX3BhY2tldHNfbGlzdCk7CisJCWlmIChjaG5sX3BhY2tldF9vYmogPT0gTlVMTCkKKwkJCXN0YXR1cyA9IC1FSU87CisKKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJLyogRW5xdWV1ZSB0aGUgY2hpcnAgb24gdGhlIGNobmwncyBJT1JlcXVlc3QgcXVldWU6ICovCisJCWNobmxfcGFja2V0X29iai0+aG9zdF91c2VyX2J1ZiA9IGNobmxfcGFja2V0X29iai0+aG9zdF9zeXNfYnVmID0KKwkJICAgIGhvc3RfYnVmOworCQlpZiAocGNobmwtPmNobmxfdHlwZSA9PSBDSE5MX1BDUFkgJiYgcGNobmwtPmNobmxfaWQgPiAxKQorCQkJY2hubF9wYWNrZXRfb2JqLT5ob3N0X3N5c19idWYgPSBob3N0X3N5c19idWY7CisKKwkJLyoKKwkJICogTm90ZTogZm9yIGRtYSBjaGFucyBkd19kc3BfYWRkciBjb250YWlucyBkc3AgYWRkcmVzcworCQkgKiBvZiBTTSBidWZmZXIuCisJCSAqLworCQlEQkNfQVNTRVJUKGNobmxfbWdyX29iai0+d29yZF9zaXplICE9IDApOworCQkvKiBEU1AgYWRkcmVzcyAqLworCQljaG5sX3BhY2tldF9vYmotPmRzcF90eF9hZGRyID0KKwkJICAgIGR3X2RzcF9hZGRyIC8gY2hubF9tZ3Jfb2JqLT53b3JkX3NpemU7CisJCWNobmxfcGFja2V0X29iai0+Ynl0ZV9zaXplID0gYnl0ZV9zaXplOworCQljaG5sX3BhY2tldF9vYmotPmJ1Zl9zaXplID0gYnVmX3NpemU7CisJCS8qIE9ubHkgdmFsaWQgZm9yIG91dHB1dCBjaGFubmVsICovCisJCWNobmxfcGFja2V0X29iai0+ZHdfYXJnID0gZHdfYXJnOworCQljaG5sX3BhY2tldF9vYmotPnN0YXR1cyA9IChpc19lb3MgPyBDSE5MX0lPQ1NUQVRFT1MgOgorCQkJCQkgICBDSE5MX0lPQ1NUQVRDT01QTEVURSk7CisJCWxzdF9wdXRfdGFpbChwY2hubC0+cGlvX3JlcXVlc3RzLAorCQkJICAgICAoc3RydWN0IGxpc3RfaGVhZCAqKWNobmxfcGFja2V0X29iaik7CisJCXBjaG5sLT5jaW9fcmVxcysrOworCQlEQkNfQVNTRVJUKHBjaG5sLT5jaW9fcmVxcyA8PSBwY2hubC0+Y2hubF9wYWNrZXRzKTsKKwkJLyoKKwkJICogSWYgZW5kIG9mIHN0cmVhbSwgdXBkYXRlIHRoZSBjaGFubmVsIHN0YXRlIHRvIHByZXZlbnQKKwkJICogbW9yZSBJT1Incy4KKwkJICovCisJCWlmIChpc19lb3MpCisJCQlwY2hubC0+ZHdfc3RhdGUgfD0gQ0hOTF9TVEFURUVPUzsKKworCQkvKiBMZWdhY3kgRFNNIFByb2Nlc3Nvci1Db3B5ICovCisJCURCQ19BU1NFUlQocGNobmwtPmNobmxfdHlwZSA9PSBDSE5MX1BDUFkpOworCQkvKiBSZXF1ZXN0IElPIGZyb20gdGhlIERTUCAqLworCQlpb19yZXF1ZXN0X2NobmwoY2hubF9tZ3Jfb2JqLT5oaW9fbWdyLCBwY2hubCwKKwkJCQkoQ0hOTF9JU19JTlBVVChwY2hubC0+Y2hubF9tb2RlKSA/IElPX0lOUFVUIDoKKwkJCQkgSU9fT1VUUFVUKSwgJm1iX3ZhbCk7CisJCXNjaGVkX2RwYyA9IHRydWU7CisKKwl9CisJb21hcF9tYm94X2VuYWJsZV9pcnEoZGV2X2N0eHQtPm1ib3gsIElSUV9SWCk7CisJc3Bpbl91bmxvY2tfYmgoJmNobmxfbWdyX29iai0+Y2hubF9tZ3JfbG9jayk7CisJaWYgKG1iX3ZhbCAhPSAwKQorCQlzbV9pbnRlcnJ1cHRfZHNwKGRldl9jdHh0LCBtYl92YWwpOworCisJLyogU2NoZWR1bGUgYSBEUEMsIHRvIGRvIHRoZSBhY3R1YWwgZGF0YSB0cmFuc2ZlciAqLworCWlmIChzY2hlZF9kcGMpCisJCWlvc21fc2NoZWR1bGUoY2hubF9tZ3Jfb2JqLT5oaW9fbWdyKTsKKworZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfY2hubF9jYW5jZWxfaW8gPT09PT09PT0KKyAqICAgICAgUmV0dXJuIGFsbCBJL08gcmVxdWVzdHMgdG8gdGhlIGNsaWVudCB3aGljaCBoYXZlIG5vdCB5ZXQgYmVlbgorICogICAgICB0cmFuc2ZlcnJlZC4gIFRoZSBjaGFubmVsJ3MgSS9PIGNvbXBsZXRpb24gb2JqZWN0IGlzCisgKiAgICAgIHNpZ25hbGxlZCwgYW5kIGFsbCB0aGUgSS9PIHJlcXVlc3RzIGFyZSBxdWV1ZWQgYXMgSU9DJ3MsIHdpdGggdGhlCisgKiAgICAgIHN0YXR1cyBmaWVsZCBzZXQgdG8gQ0hOTF9JT0NTVEFUQ0FOQ0VMLgorICogICAgICBUaGlzIGNhbGwgaXMgdHlwaWNhbGx5IHVzZWQgaW4gYWJvcnQgc2l0dWF0aW9ucywgYW5kIGlzIGEgcHJlbHVkZSB0bworICogICAgICBjaG5sX2Nsb3NlKCk7CisgKi8KK2ludCBicmlkZ2VfY2hubF9jYW5jZWxfaW8oc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iaikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgY2hubF9vYmplY3QgKnBjaG5sID0gKHN0cnVjdCBjaG5sX29iamVjdCAqKWNobmxfb2JqOworCXUzMiBjaG5sX2lkID0gLTE7CisJczggY2hubF9tb2RlOworCXN0cnVjdCBjaG5sX2lycCAqY2hubF9wYWNrZXRfb2JqOworCXN0cnVjdCBjaG5sX21nciAqY2hubF9tZ3Jfb2JqID0gTlVMTDsKKworCS8qIENoZWNrIGFyZ3M6ICovCisJaWYgKHBjaG5sICYmIHBjaG5sLT5jaG5sX21ncl9vYmopIHsKKwkJY2hubF9pZCA9IHBjaG5sLT5jaG5sX2lkOworCQljaG5sX21vZGUgPSBwY2hubC0+Y2hubF9tb2RlOworCQljaG5sX21ncl9vYmogPSBwY2hubC0+Y2hubF9tZ3Jfb2JqOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisKKwkvKiAgTWFyayB0aGlzIGNoYW5uZWwgYXMgY2FuY2VsbGVkLCB0byBwcmV2ZW50IGZ1cnRoZXIgSU9SZXF1ZXN0cyBvcgorCSAqICBJT1JlcXVlc3RzIG9yIGRpc3BhdGNoaW5nLiAqLworCXNwaW5fbG9ja19iaCgmY2hubF9tZ3Jfb2JqLT5jaG5sX21ncl9sb2NrKTsKKwlwY2hubC0+ZHdfc3RhdGUgfD0gQ0hOTF9TVEFURUNBTkNFTDsKKwlpZiAoTFNUX0lTX0VNUFRZKHBjaG5sLT5waW9fcmVxdWVzdHMpKQorCQlnb3RvIGZ1bmNfY29udDsKKworCWlmIChwY2hubC0+Y2hubF90eXBlID09IENITkxfUENQWSkgeworCQkvKiBJbmRpY2F0ZSB3ZSBoYXZlIG5vIG1vcmUgYnVmZmVycyBhdmFpbGFibGUgZm9yIHRyYW5zZmVyOiAqLworCQlpZiAoQ0hOTF9JU19JTlBVVChwY2hubC0+Y2hubF9tb2RlKSkgeworCQkJaW9fY2FuY2VsX2NobmwoY2hubF9tZ3Jfb2JqLT5oaW9fbWdyLCBjaG5sX2lkKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFJlY29yZCB0aGF0IHdlIG5vIGxvbmdlciBoYXZlIG91dHB1dCBidWZmZXJzCisJCQkgKiBhdmFpbGFibGU6ICovCisJCQljaG5sX21ncl9vYmotPmR3X291dHB1dF9tYXNrICY9IH4oMSA8PCBjaG5sX2lkKTsKKwkJfQorCX0KKwkvKiBNb3ZlIGFsbCBJT1IncyB0byBJT0MgcXVldWU6ICovCisJd2hpbGUgKCFMU1RfSVNfRU1QVFkocGNobmwtPnBpb19yZXF1ZXN0cykpIHsKKwkJY2hubF9wYWNrZXRfb2JqID0KKwkJICAgIChzdHJ1Y3QgY2hubF9pcnAgKilsc3RfZ2V0X2hlYWQocGNobmwtPnBpb19yZXF1ZXN0cyk7CisJCWlmIChjaG5sX3BhY2tldF9vYmopIHsKKwkJCWNobmxfcGFja2V0X29iai0+Ynl0ZV9zaXplID0gMDsKKwkJCWNobmxfcGFja2V0X29iai0+c3RhdHVzIHw9IENITkxfSU9DU1RBVENBTkNFTDsKKwkJCWxzdF9wdXRfdGFpbChwY2hubC0+cGlvX2NvbXBsZXRpb25zLAorCQkJCSAgICAgKHN0cnVjdCBsaXN0X2hlYWQgKiljaG5sX3BhY2tldF9vYmopOworCQkJcGNobmwtPmNpb19jcysrOworCQkJcGNobmwtPmNpb19yZXFzLS07CisJCQlEQkNfQVNTRVJUKHBjaG5sLT5jaW9fcmVxcyA+PSAwKTsKKwkJfQorCX0KK2Z1bmNfY29udDoKKwlzcGluX3VubG9ja19iaCgmY2hubF9tZ3Jfb2JqLT5jaG5sX21ncl9sb2NrKTsKK2Z1bmNfZW5kOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2NobmxfY2xvc2UgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBFbnN1cmVzIGFsbCBwZW5kaW5nIEkvTyBvbiB0aGlzIGNoYW5uZWwgaXMgY2FuY2VsbGVkLCBkaXNjYXJkcyBhbGwKKyAqICAgICAgcXVldWVkIEkvTyBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbnMsIHRoZW4gZnJlZXMgdGhlIHJlc291cmNlcyBhbGxvY2F0ZWQKKyAqICAgICAgZm9yIHRoaXMgY2hhbm5lbCwgYW5kIG1ha2VzIHRoZSBjb3JyZXNwb25kaW5nIGxvZ2ljYWwgY2hhbm5lbCBpZAorICogICAgICBhdmFpbGFibGUgZm9yIHN1YnNlcXVlbnQgdXNlLgorICovCitpbnQgYnJpZGdlX2NobmxfY2xvc2Uoc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iaikKK3sKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBjaG5sX29iamVjdCAqcGNobmwgPSAoc3RydWN0IGNobmxfb2JqZWN0ICopY2hubF9vYmo7CisKKwkvKiBDaGVjayBhcmdzOiAqLworCWlmICghcGNobmwpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2NvbnQ7CisJfQorCXsKKwkJLyogQ2FuY2VsIElPOiB0aGlzIGVuc3VyZXMgbm8gZnVydGhlciBJTyByZXF1ZXN0cyBvcgorCQkgKiBub3RpZmljYXRpb25zLiAqLworCQlzdGF0dXMgPSBicmlkZ2VfY2hubF9jYW5jZWxfaW8oY2hubF9vYmopOworCX0KK2Z1bmNfY29udDoKKwlpZiAoIXN0YXR1cykgeworCQkvKiBBc3NlcnQgSS9PIG9uIHRoaXMgY2hhbm5lbCBpcyBub3cgY2FuY2VsbGVkOiBQcm90ZWN0cworCQkgKiBmcm9tIGlvX2RwYy4gKi8KKwkJREJDX0FTU0VSVCgocGNobmwtPmR3X3N0YXRlICYgQ0hOTF9TVEFURUNBTkNFTCkpOworCQkvKiBJbnZhbGlkYXRlIGNoYW5uZWwgb2JqZWN0OiBQcm90ZWN0cyBmcm9tCisJCSAqIENITkxfR2V0SU9Db21wbGV0aW9uKCkuICovCisJCS8qIEZyZWUgdGhlIHNsb3QgaW4gdGhlIGNoYW5uZWwgbWFuYWdlcjogKi8KKwkJcGNobmwtPmNobmxfbWdyX29iai0+YXBfY2hhbm5lbFtwY2hubC0+Y2hubF9pZF0gPSBOVUxMOworCQlzcGluX2xvY2tfYmgoJnBjaG5sLT5jaG5sX21ncl9vYmotPmNobmxfbWdyX2xvY2spOworCQlwY2hubC0+Y2hubF9tZ3Jfb2JqLT5vcGVuX2NoYW5uZWxzIC09IDE7CisJCXNwaW5fdW5sb2NrX2JoKCZwY2hubC0+Y2hubF9tZ3Jfb2JqLT5jaG5sX21ncl9sb2NrKTsKKwkJaWYgKHBjaG5sLT5udGZ5X29iaikgeworCQkJbnRmeV9kZWxldGUocGNobmwtPm50Znlfb2JqKTsKKwkJCWtmcmVlKHBjaG5sLT5udGZ5X29iaik7CisJCQlwY2hubC0+bnRmeV9vYmogPSBOVUxMOworCQl9CisJCS8qIFJlc2V0IGNoYW5uZWwgZXZlbnQ6IChOT1RFOiB1c2VyX2V2ZW50IGZyZWVkIGluIHVzZXIKKwkJICogY29udGV4dC4pLiAqLworCQlpZiAocGNobmwtPnN5bmNfZXZlbnQpIHsKKwkJCXN5bmNfcmVzZXRfZXZlbnQocGNobmwtPnN5bmNfZXZlbnQpOworCQkJa2ZyZWUocGNobmwtPnN5bmNfZXZlbnQpOworCQkJcGNobmwtPnN5bmNfZXZlbnQgPSBOVUxMOworCQl9CisJCS8qIEZyZWUgSS9PIHJlcXVlc3QgYW5kIEkvTyBjb21wbGV0aW9uIHF1ZXVlczogKi8KKwkJaWYgKHBjaG5sLT5waW9fY29tcGxldGlvbnMpIHsKKwkJCWZyZWVfY2hpcnBfbGlzdChwY2hubC0+cGlvX2NvbXBsZXRpb25zKTsKKwkJCXBjaG5sLT5waW9fY29tcGxldGlvbnMgPSBOVUxMOworCQkJcGNobmwtPmNpb19jcyA9IDA7CisJCX0KKwkJaWYgKHBjaG5sLT5waW9fcmVxdWVzdHMpIHsKKwkJCWZyZWVfY2hpcnBfbGlzdChwY2hubC0+cGlvX3JlcXVlc3RzKTsKKwkJCXBjaG5sLT5waW9fcmVxdWVzdHMgPSBOVUxMOworCQkJcGNobmwtPmNpb19yZXFzID0gMDsKKwkJfQorCQlpZiAocGNobmwtPmZyZWVfcGFja2V0c19saXN0KSB7CisJCQlmcmVlX2NoaXJwX2xpc3QocGNobmwtPmZyZWVfcGFja2V0c19saXN0KTsKKwkJCXBjaG5sLT5mcmVlX3BhY2tldHNfbGlzdCA9IE5VTEw7CisJCX0KKwkJLyogUmVsZWFzZSBjaGFubmVsIG9iamVjdC4gKi8KKwkJa2ZyZWUocGNobmwpOworCQlwY2hubCA9IE5VTEw7CisJfQorCURCQ19FTlNVUkUoc3RhdHVzIHx8ICFwY2hubCk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfY2hubF9jcmVhdGUgPT09PT09PT0KKyAqICAgICAgQ3JlYXRlIGEgY2hhbm5lbCBtYW5hZ2VyIG9iamVjdCwgcmVzcG9uc2libGUgZm9yIG9wZW5pbmcgbmV3IGNoYW5uZWxzCisgKiAgICAgIGFuZCBjbG9zaW5nIG9sZCBvbmVzIGZvciBhIGdpdmVuIGJvYXJkLgorICovCitpbnQgYnJpZGdlX2NobmxfY3JlYXRlKHN0cnVjdCBjaG5sX21nciAqKmNoYW5uZWxfbWdyLAorCQkJICAgICAgc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGNobmxfbWdyYXR0cnMgKm1ncl9hdHRydHMpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGNobmxfbWdyICpjaG5sX21ncl9vYmogPSBOVUxMOworCXU4IG1heF9jaGFubmVsczsKKworCS8qIENoZWNrIERCQyByZXF1aXJlbWVudHM6ICovCisJREJDX1JFUVVJUkUoY2hhbm5lbF9tZ3IgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUobWdyX2F0dHJ0cyAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShtZ3JfYXR0cnRzLT5tYXhfY2hhbm5lbHMgPiAwKTsKKwlEQkNfUkVRVUlSRShtZ3JfYXR0cnRzLT5tYXhfY2hhbm5lbHMgPD0gQ0hOTF9NQVhDSEFOTkVMUyk7CisJREJDX1JFUVVJUkUobWdyX2F0dHJ0cy0+d29yZF9zaXplICE9IDApOworCisJLyogQWxsb2NhdGUgY2hhbm5lbCBtYW5hZ2VyIG9iamVjdCAqLworCWNobmxfbWdyX29iaiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjaG5sX21nciksIEdGUF9LRVJORUwpOworCWlmIChjaG5sX21ncl9vYmopIHsKKwkJLyoKKwkJICogVGhlIG1heF9jaGFubmVscyBhdHRyIG11c3QgZXF1YWwgdGhlICMgb2Ygc3VwcG9ydGVkIGNobmxzIGZvcgorCQkgKiBlYWNoIHRyYW5zcG9ydCgjIGNobmxzIGZvciBQQ1BZID0gRERNQSA9IFpDUFkpOiBpLmUuCisJCSAqICAgICAgbWdyX2F0dHJ0cy0+bWF4X2NoYW5uZWxzID0gQ0hOTF9NQVhDSEFOTkVMUyA9CisJCSAqICAgICAgICAgICAgICAgICAgICAgICBERE1BX01BWERETUFDSE5MUyA9IERETUFfTUFYWkNQWUNITkxTLgorCQkgKi8KKwkJREJDX0FTU0VSVChtZ3JfYXR0cnRzLT5tYXhfY2hhbm5lbHMgPT0gQ0hOTF9NQVhDSEFOTkVMUyk7CisJCW1heF9jaGFubmVscyA9IENITkxfTUFYQ0hBTk5FTFMgKyBDSE5MX01BWENIQU5ORUxTICogQ0hOTF9QQ1BZOworCQkvKiBDcmVhdGUgYXJyYXkgb2YgY2hhbm5lbHMgKi8KKwkJY2hubF9tZ3Jfb2JqLT5hcF9jaGFubmVsID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNobmxfb2JqZWN0ICopCisJCQkJCQkqIG1heF9jaGFubmVscywgR0ZQX0tFUk5FTCk7CisJCWlmIChjaG5sX21ncl9vYmotPmFwX2NoYW5uZWwpIHsKKwkJCS8qIEluaXRpYWxpemUgY2hubF9tZ3Igb2JqZWN0ICovCisJCQljaG5sX21ncl9vYmotPmR3X3R5cGUgPSBDSE5MX1RZUEVTTTsKKwkJCWNobmxfbWdyX29iai0+d29yZF9zaXplID0gbWdyX2F0dHJ0cy0+d29yZF9zaXplOworCQkJLyogVG90YWwgIyBjaG5scyBzdXBwb3J0ZWQgKi8KKwkJCWNobmxfbWdyX29iai0+bWF4X2NoYW5uZWxzID0gbWF4X2NoYW5uZWxzOworCQkJY2hubF9tZ3Jfb2JqLT5vcGVuX2NoYW5uZWxzID0gMDsKKwkJCWNobmxfbWdyX29iai0+ZHdfb3V0cHV0X21hc2sgPSAwOworCQkJY2hubF9tZ3Jfb2JqLT5kd19sYXN0X291dHB1dCA9IDA7CisJCQljaG5sX21ncl9vYmotPmhkZXZfb2JqID0gaGRldl9vYmo7CisJCQlzcGluX2xvY2tfaW5pdCgmY2hubF9tZ3Jfb2JqLT5jaG5sX21ncl9sb2NrKTsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCX0KKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCX0KKworCWlmIChzdGF0dXMpIHsKKwkJYnJpZGdlX2NobmxfZGVzdHJveShjaG5sX21ncl9vYmopOworCQkqY2hhbm5lbF9tZ3IgPSBOVUxMOworCX0gZWxzZSB7CisJCS8qIFJldHVybiBjaGFubmVsIG1hbmFnZXIgb2JqZWN0IHRvIGNhbGxlci4uLiAqLworCQkqY2hhbm5lbF9tZ3IgPSBjaG5sX21ncl9vYmo7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2NobmxfZGVzdHJveSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENsb3NlIGFsbCBvcGVuIGNoYW5uZWxzLCBhbmQgZGVzdHJveSB0aGUgY2hhbm5lbCBtYW5hZ2VyLgorICovCitpbnQgYnJpZGdlX2NobmxfZGVzdHJveShzdHJ1Y3QgY2hubF9tZ3IgKmhjaG5sX21ncikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgY2hubF9tZ3IgKmNobmxfbWdyX29iaiA9IGhjaG5sX21ncjsKKwl1MzIgY2hubF9pZDsKKworCWlmIChoY2hubF9tZ3IpIHsKKwkJLyogQ2xvc2UgYWxsIG9wZW4gY2hhbm5lbHM6ICovCisJCWZvciAoY2hubF9pZCA9IDA7IGNobmxfaWQgPCBjaG5sX21ncl9vYmotPm1heF9jaGFubmVsczsKKwkJICAgICBjaG5sX2lkKyspIHsKKwkJCXN0YXR1cyA9CisJCQkgICAgYnJpZGdlX2NobmxfY2xvc2UoY2hubF9tZ3Jfb2JqLT5hcF9jaGFubmVsCisJCQkJCSAgICAgIFtjaG5sX2lkXSk7CisJCQlpZiAoc3RhdHVzKQorCQkJCWRldl9kYmcoYnJpZGdlLCAiJXM6IEVycm9yIHN0YXR1cyAweCV4XG4iLAorCQkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKKwkJfQorCisJCS8qIEZyZWUgY2hhbm5lbCBtYW5hZ2VyIG9iamVjdDogKi8KKwkJa2ZyZWUoY2hubF9tZ3Jfb2JqLT5hcF9jaGFubmVsKTsKKworCQkvKiBTZXQgaGNobmxfbWdyIHRvIE5VTEwgaW4gZGV2aWNlIG9iamVjdC4gKi8KKwkJZGV2X3NldF9jaG5sX21ncihjaG5sX21ncl9vYmotPmhkZXZfb2JqLCBOVUxMKTsKKwkJLyogRnJlZSB0aGlzIENobmwgTWdyIG9iamVjdDogKi8KKwkJa2ZyZWUoaGNobmxfbWdyKTsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGJyaWRnZV9jaG5sX2ZsdXNoX2lvID09PT09PT09CisgKiAgcHVycG9zZToKKyAqICAgICAgRmx1c2hlcyBhbGwgdGhlIG91dHN0YW5kaW5nIGRhdGEgcmVxdWVzdHMgb24gYSBjaGFubmVsLgorICovCitpbnQgYnJpZGdlX2NobmxfZmx1c2hfaW8oc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iaiwgdTMyIHRpbWVvdXQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGNobmxfb2JqZWN0ICpwY2hubCA9IChzdHJ1Y3QgY2hubF9vYmplY3QgKiljaG5sX29iajsKKwlzOCBjaG5sX21vZGUgPSAtMTsKKwlzdHJ1Y3QgY2hubF9tZ3IgKmNobmxfbWdyX29iajsKKwlzdHJ1Y3QgY2hubF9pb2MgY2hubF9pb2Nfb2JqOworCS8qIENoZWNrIGFyZ3M6ICovCisJaWYgKHBjaG5sKSB7CisJCWlmICgodGltZW91dCA9PSBDSE5MX0lPQ05PV0FJVCkKKwkJICAgICYmIENITkxfSVNfT1VUUFVUKHBjaG5sLT5jaG5sX21vZGUpKSB7CisJCQlzdGF0dXMgPSAtRUlOVkFMOworCQl9IGVsc2UgeworCQkJY2hubF9tb2RlID0gcGNobmwtPmNobmxfbW9kZTsKKwkJCWNobmxfbWdyX29iaiA9IHBjaG5sLT5jaG5sX21ncl9vYmo7CisJCX0KKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCX0KKwlpZiAoIXN0YXR1cykgeworCQkvKiBOb3RlOiBDdXJyZW50bHksIGlmIGFub3RoZXIgdGhyZWFkIGNvbnRpbnVlcyB0byBhZGQgSU8KKwkJICogcmVxdWVzdHMgdG8gdGhpcyBjaGFubmVsLCB0aGlzIGZ1bmN0aW9uIHdpbGwgY29udGludWUgdG8KKwkJICogZmx1c2ggYWxsIHN1Y2ggcXVldWVkIElPIHJlcXVlc3RzLiAqLworCQlpZiAoQ0hOTF9JU19PVVRQVVQoY2hubF9tb2RlKQorCQkgICAgJiYgKHBjaG5sLT5jaG5sX3R5cGUgPT0gQ0hOTF9QQ1BZKSkgeworCQkJLyogV2FpdCBmb3IgSU8gY29tcGxldGlvbnMsIHVwIHRvIHRoZSBzcGVjaWZpZWQKKwkJCSAqIHRpbWVvdXQ6ICovCisJCQl3aGlsZSAoIUxTVF9JU19FTVBUWShwY2hubC0+cGlvX3JlcXVlc3RzKSAmJiAhc3RhdHVzKSB7CisJCQkJc3RhdHVzID0gYnJpZGdlX2NobmxfZ2V0X2lvYyhjaG5sX29iaiwKKwkJCQkJCXRpbWVvdXQsICZjaG5sX2lvY19vYmopOworCQkJCWlmIChzdGF0dXMpCisJCQkJCWNvbnRpbnVlOworCisJCQkJaWYgKGNobmxfaW9jX29iai5zdGF0dXMgJiBDSE5MX0lPQ1NUQVRUSU1FT1VUKQorCQkJCQlzdGF0dXMgPSAtRVRJTUVET1VUOworCisJCQl9CisJCX0gZWxzZSB7CisJCQlzdGF0dXMgPSBicmlkZ2VfY2hubF9jYW5jZWxfaW8oY2hubF9vYmopOworCQkJLyogTm93LCBsZWF2ZSB0aGUgY2hhbm5lbCBpbiB0aGUgcmVhZHkgc3RhdGU6ICovCisJCQlwY2hubC0+ZHdfc3RhdGUgJj0gfkNITkxfU1RBVEVDQU5DRUw7CisJCX0KKwl9CisJREJDX0VOU1VSRShzdGF0dXMgfHwgTFNUX0lTX0VNUFRZKHBjaG5sLT5waW9fcmVxdWVzdHMpKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGJyaWRnZV9jaG5sX2dldF9pbmZvID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhIGNoYW5uZWwuCisgKi8KK2ludCBicmlkZ2VfY2hubF9nZXRfaW5mbyhzdHJ1Y3QgY2hubF9vYmplY3QgKmNobmxfb2JqLAorCQkJICAgICBzdHJ1Y3QgY2hubF9pbmZvICpjaGFubmVsX2luZm8pCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGNobmxfb2JqZWN0ICpwY2hubCA9IChzdHJ1Y3QgY2hubF9vYmplY3QgKiljaG5sX29iajsKKwlpZiAoY2hhbm5lbF9pbmZvICE9IE5VTEwpIHsKKwkJaWYgKHBjaG5sKSB7CisJCQkvKiBSZXR1cm4gdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbjogKi8KKwkJCWNoYW5uZWxfaW5mby0+aGNobmxfbWdyID0gcGNobmwtPmNobmxfbWdyX29iajsKKwkJCWNoYW5uZWxfaW5mby0+ZXZlbnRfb2JqID0gcGNobmwtPnVzZXJfZXZlbnQ7CisJCQljaGFubmVsX2luZm8tPmNuaGxfaWQgPSBwY2hubC0+Y2hubF9pZDsKKwkJCWNoYW5uZWxfaW5mby0+ZHdfbW9kZSA9IHBjaG5sLT5jaG5sX21vZGU7CisJCQljaGFubmVsX2luZm8tPmJ5dGVzX3R4ID0gcGNobmwtPmJ5dGVzX21vdmVkOworCQkJY2hhbm5lbF9pbmZvLT5wcm9jZXNzID0gcGNobmwtPnByb2Nlc3M7CisJCQljaGFubmVsX2luZm8tPnN5bmNfZXZlbnQgPSBwY2hubC0+c3luY19ldmVudDsKKwkJCWNoYW5uZWxfaW5mby0+Y2lvX2NzID0gcGNobmwtPmNpb19jczsKKwkJCWNoYW5uZWxfaW5mby0+Y2lvX3JlcXMgPSBwY2hubC0+Y2lvX3JlcXM7CisJCQljaGFubmVsX2luZm8tPmR3X3N0YXRlID0gcGNobmwtPmR3X3N0YXRlOworCQl9IGVsc2UgeworCQkJc3RhdHVzID0gLUVGQVVMVDsKKwkJfQorCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2NobmxfZ2V0X2lvYyA9PT09PT09PQorICogICAgICBPcHRpb25hbGx5IHdhaXQgZm9yIEkvTyBjb21wbGV0aW9uIG9uIGEgY2hhbm5lbC4gIERlcXVldWUgYW4gSS9PCisgKiAgICAgIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGxldGVkCisgKiAgICAgIEkvTyByZXF1ZXN0LgorICogICAgICBOb3RlOiBFbnN1cmVzIENoYW5uZWwgSW52YXJpYW50IChzZWUgbm90ZXMgYWJvdmUpLgorICovCitpbnQgYnJpZGdlX2NobmxfZ2V0X2lvYyhzdHJ1Y3QgY2hubF9vYmplY3QgKmNobmxfb2JqLCB1MzIgdGltZW91dCwKKwkJCSAgICBzdHJ1Y3QgY2hubF9pb2MgKmNoYW5faW9jKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBjaG5sX29iamVjdCAqcGNobmwgPSAoc3RydWN0IGNobmxfb2JqZWN0ICopY2hubF9vYmo7CisJc3RydWN0IGNobmxfaXJwICpjaG5sX3BhY2tldF9vYmo7CisJaW50IHN0YXRfc3luYzsKKwlib29sIGRlcXVldWVfaW9jID0gdHJ1ZTsKKwlzdHJ1Y3QgY2hubF9pb2MgaW9jID0geyBOVUxMLCAwLCAwLCAwLCAwIH07CisJdTggKmhvc3Rfc3lzX2J1ZiA9IE5VTEw7CisJc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQ7CisJc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmo7CisKKwkvKiBDaGVjayBhcmdzOiAqLworCWlmICghY2hhbl9pb2MgfHwgIXBjaG5sKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfSBlbHNlIGlmICh0aW1lb3V0ID09IENITkxfSU9DTk9XQUlUKSB7CisJCWlmIChMU1RfSVNfRU1QVFkocGNobmwtPnBpb19jb21wbGV0aW9ucykpCisJCQlzdGF0dXMgPSAtRVJFTU9URUlPOworCisJfQorCisJZGV2X29iaiA9IGRldl9nZXRfZmlyc3QoKTsKKwlkZXZfZ2V0X2JyaWRnZV9jb250ZXh0KGRldl9vYmosICZkZXZfY3R4dCk7CisJaWYgKCFkZXZfY3R4dCkKKwkJc3RhdHVzID0gLUVGQVVMVDsKKworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisKKwlpb2Muc3RhdHVzID0gQ0hOTF9JT0NTVEFUQ09NUExFVEU7CisJaWYgKHRpbWVvdXQgIT0KKwkgICAgQ0hOTF9JT0NOT1dBSVQgJiYgTFNUX0lTX0VNUFRZKHBjaG5sLT5waW9fY29tcGxldGlvbnMpKSB7CisJCWlmICh0aW1lb3V0ID09IENITkxfSU9DSU5GSU5JVEUpCisJCQl0aW1lb3V0ID0gU1lOQ19JTkZJTklURTsKKworCQlzdGF0X3N5bmMgPSBzeW5jX3dhaXRfb25fZXZlbnQocGNobmwtPnN5bmNfZXZlbnQsIHRpbWVvdXQpOworCQlpZiAoc3RhdF9zeW5jID09IC1FVElNRSkgeworCQkJLyogTm8gcmVzcG9uc2UgZnJvbSBEU1AgKi8KKwkJCWlvYy5zdGF0dXMgfD0gQ0hOTF9JT0NTVEFUVElNRU9VVDsKKwkJCWRlcXVldWVfaW9jID0gZmFsc2U7CisJCX0gZWxzZSBpZiAoc3RhdF9zeW5jID09IC1FUEVSTSkgeworCQkJLyogVGhpcyBjYW4gb2NjdXIgd2hlbiB0aGUgdXNlciBtb2RlIHRocmVhZCBpcworCQkJICogYWJvcnRlZCAoXkMpLCBvciB3aGVuIF9WV0lOMzJfV2FpdFNpbmdsZU9iamVjdCgpCisJCQkgKiBmYWlscyBkdWUgdG8gdW5rb3duIGNhdXNlcy4gKi8KKwkJCS8qIEV2ZW4gdGhvdWdoIFdhaXQgZmFpbGVkLCB0aGVyZSBtYXkgYmUgc29tZXRoaW5nIGluCisJCQkgKiB0aGUgUTogKi8KKwkJCWlmIChMU1RfSVNfRU1QVFkocGNobmwtPnBpb19jb21wbGV0aW9ucykpIHsKKwkJCQlpb2Muc3RhdHVzIHw9IENITkxfSU9DU1RBVENBTkNFTDsKKwkJCQlkZXF1ZXVlX2lvYyA9IGZhbHNlOworCQkJfQorCQl9CisJfQorCS8qIFNlZSBjb21tZW50IGluIEFkZElPUmVxICovCisJc3Bpbl9sb2NrX2JoKCZwY2hubC0+Y2hubF9tZ3Jfb2JqLT5jaG5sX21ncl9sb2NrKTsKKwlvbWFwX21ib3hfZGlzYWJsZV9pcnEoZGV2X2N0eHQtPm1ib3gsIElSUV9SWCk7CisJaWYgKGRlcXVldWVfaW9jKSB7CisJCS8qIERlcXVldWUgSU9DIGFuZCBzZXQgY2hhbl9pb2M7ICovCisJCURCQ19BU1NFUlQoIUxTVF9JU19FTVBUWShwY2hubC0+cGlvX2NvbXBsZXRpb25zKSk7CisJCWNobmxfcGFja2V0X29iaiA9CisJCSAgICAoc3RydWN0IGNobmxfaXJwICopbHN0X2dldF9oZWFkKHBjaG5sLT5waW9fY29tcGxldGlvbnMpOworCQkvKiBVcGRhdGUgY2hhbl9pb2MgZnJvbSBjaGFubmVsIHN0YXRlIGFuZCBjaGlycDogKi8KKwkJaWYgKGNobmxfcGFja2V0X29iaikgeworCQkJcGNobmwtPmNpb19jcy0tOworCQkJLyogIElmIHRoaXMgaXMgYSB6ZXJvLWNvcHkgY2hhbm5lbCwgdGhlbiBzZXQgSU9DJ3MgcGJ1ZgorCQkJICogIHRvIHRoZSBEU1AncyBhZGRyZXNzLiBUaGlzIERTUCBhZGRyZXNzIHdpbGwgZ2V0CisJCQkgKiAgdHJhbnNsYXRlZCB0byB1c2VyJ3MgdmlydHVhbCBhZGRyIGxhdGVyLiAqLworCQkJeworCQkJCWhvc3Rfc3lzX2J1ZiA9IGNobmxfcGFja2V0X29iai0+aG9zdF9zeXNfYnVmOworCQkJCWlvYy5wYnVmID0gY2hubF9wYWNrZXRfb2JqLT5ob3N0X3VzZXJfYnVmOworCQkJfQorCQkJaW9jLmJ5dGVfc2l6ZSA9IGNobmxfcGFja2V0X29iai0+Ynl0ZV9zaXplOworCQkJaW9jLmJ1Zl9zaXplID0gY2hubF9wYWNrZXRfb2JqLT5idWZfc2l6ZTsKKwkJCWlvYy5kd19hcmcgPSBjaG5sX3BhY2tldF9vYmotPmR3X2FyZzsKKwkJCWlvYy5zdGF0dXMgfD0gY2hubF9wYWNrZXRfb2JqLT5zdGF0dXM7CisJCQkvKiBQbGFjZSB0aGUgdXNlZCBjaGlycCBvbiB0aGUgZnJlZSBsaXN0OiAqLworCQkJbHN0X3B1dF90YWlsKHBjaG5sLT5mcmVlX3BhY2tldHNfbGlzdCwKKwkJCQkgICAgIChzdHJ1Y3QgbGlzdF9oZWFkICopY2hubF9wYWNrZXRfb2JqKTsKKwkJfSBlbHNlIHsKKwkJCWlvYy5wYnVmID0gTlVMTDsKKwkJCWlvYy5ieXRlX3NpemUgPSAwOworCQl9CisJfSBlbHNlIHsKKwkJaW9jLnBidWYgPSBOVUxMOworCQlpb2MuYnl0ZV9zaXplID0gMDsKKwkJaW9jLmR3X2FyZyA9IDA7CisJCWlvYy5idWZfc2l6ZSA9IDA7CisJfQorCS8qIEVuc3VyZSBpbnZhcmlhbnQ6IElmIGFueSBJT0MncyBhcmUgcXVldWVkIGZvciB0aGlzIGNoYW5uZWwuLi4gKi8KKwlpZiAoIUxTVF9JU19FTVBUWShwY2hubC0+cGlvX2NvbXBsZXRpb25zKSkgeworCQkvKiAgU2luY2UgRFNQU3RyZWFtX1JlY2xhaW0oKSBkb2VzIG5vdCB0YWtlIGEgdGltZW91dAorCQkgKiAgcGFyYW1ldGVyLCB3ZSBwYXNzIHRoZSBzdHJlYW0ncyB0aW1lb3V0IHZhbHVlIHRvCisJCSAqICBicmlkZ2VfY2hubF9nZXRfaW9jLiBXZSBjYW5ub3QgZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90CisJCSAqICB3ZSBoYXZlIHdhaXRlZCBpbiBVc2VyIG1vZGUuIFNpbmNlIHRoZSBzdHJlYW0ncyB0aW1lb3V0CisJCSAqICB2YWx1ZSBtYXkgYmUgbm9uLXplcm8sIHdlIHN0aWxsIGhhdmUgdG8gc2V0IHRoZSBldmVudC4KKwkJICogIFRoZXJlZm9yZSwgdGhpcyBvcHRpbWl6YXRpb24gaXMgdGFrZW4gb3V0LgorCQkgKgorCQkgKiAgaWYgKHRpbWVvdXQgPT0gQ0hOTF9JT0NOT1dBSVQpIHsKKwkJICogICAgLi4uIGVuc3VyZSBldmVudCBpcyBzZXQuLgorCQkgKiAgICAgIHN5bmNfc2V0X2V2ZW50KHBjaG5sLT5zeW5jX2V2ZW50KTsKKwkJICogIH0gKi8KKwkJc3luY19zZXRfZXZlbnQocGNobmwtPnN5bmNfZXZlbnQpOworCX0gZWxzZSB7CisJCS8qIGVsc2UsIGlmIGxpc3QgaXMgZW1wdHksIGVuc3VyZSBldmVudCBpcyByZXNldC4gKi8KKwkJc3luY19yZXNldF9ldmVudChwY2hubC0+c3luY19ldmVudCk7CisJfQorCW9tYXBfbWJveF9lbmFibGVfaXJxKGRldl9jdHh0LT5tYm94LCBJUlFfUlgpOworCXNwaW5fdW5sb2NrX2JoKCZwY2hubC0+Y2hubF9tZ3Jfb2JqLT5jaG5sX21ncl9sb2NrKTsKKwlpZiAoZGVxdWV1ZV9pb2MKKwkgICAgJiYgKHBjaG5sLT5jaG5sX3R5cGUgPT0gQ0hOTF9QQ1BZICYmIHBjaG5sLT5jaG5sX2lkID4gMSkpIHsKKwkJaWYgKCEoaW9jLnBidWYgPCAodm9pZCAqKVVTRVJNT0RFX0FERFIpKQorCQkJZ290byBmdW5jX2NvbnQ7CisKKwkJLyogSWYgdGhlIGFkZHIgaXMgaW4gdXNlciBtb2RlLCB0aGVuIGNvcHkgaXQgKi8KKwkJaWYgKCFob3N0X3N5c19idWYgfHwgIWlvYy5wYnVmKSB7CisJCQlzdGF0dXMgPSAtRUZBVUxUOworCQkJZ290byBmdW5jX2NvbnQ7CisJCX0KKwkJaWYgKCFDSE5MX0lTX0lOUFVUKHBjaG5sLT5jaG5sX21vZGUpKQorCQkJZ290byBmdW5jX2NvbnQxOworCisJCS8qaG9zdF91c2VyX2J1ZiAqLworCQlzdGF0dXMgPSBjb3B5X3RvX3VzZXIoaW9jLnBidWYsIGhvc3Rfc3lzX2J1ZiwgaW9jLmJ5dGVfc2l6ZSk7CisJCWlmIChzdGF0dXMpIHsKKwkJCWlmIChjdXJyZW50LT5mbGFncyAmIFBGX0VYSVRJTkcpCisJCQkJc3RhdHVzID0gMDsKKwkJfQorCQlpZiAoc3RhdHVzKQorCQkJc3RhdHVzID0gLUVGQVVMVDsKK2Z1bmNfY29udDE6CisJCWtmcmVlKGhvc3Rfc3lzX2J1Zik7CisJfQorZnVuY19jb250OgorCS8qIFVwZGF0ZSBVc2VyJ3MgSU9DIGJsb2NrOiAqLworCSpjaGFuX2lvYyA9IGlvYzsKK2Z1bmNfZW5kOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2NobmxfZ2V0X21ncl9pbmZvID09PT09PT09CisgKiAgICAgIFJldHJpZXZlIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIGNoYW5uZWwgbWFuYWdlci4KKyAqLworaW50IGJyaWRnZV9jaG5sX2dldF9tZ3JfaW5mbyhzdHJ1Y3QgY2hubF9tZ3IgKmhjaG5sX21nciwgdTMyIGNoX2lkLAorCQkJCSBzdHJ1Y3QgY2hubF9tZ3JpbmZvICptZ3JfaW5mbykKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgY2hubF9tZ3IgKmNobmxfbWdyX29iaiA9IChzdHJ1Y3QgY2hubF9tZ3IgKiloY2hubF9tZ3I7CisKKwlpZiAobWdyX2luZm8gIT0gTlVMTCkgeworCQlpZiAoY2hfaWQgPD0gQ0hOTF9NQVhDSEFOTkVMUykgeworCQkJaWYgKGhjaG5sX21ncikgeworCQkJCS8qIFJldHVybiB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uOiAqLworCQkJCW1ncl9pbmZvLT5jaG5sX29iaiA9CisJCQkJICAgIGNobmxfbWdyX29iai0+YXBfY2hhbm5lbFtjaF9pZF07CisJCQkJbWdyX2luZm8tPm9wZW5fY2hhbm5lbHMgPQorCQkJCSAgICBjaG5sX21ncl9vYmotPm9wZW5fY2hhbm5lbHM7CisJCQkJbWdyX2luZm8tPmR3X3R5cGUgPSBjaG5sX21ncl9vYmotPmR3X3R5cGU7CisJCQkJLyogdG90YWwgIyBvZiBjaG5scyAqLworCQkJCW1ncl9pbmZvLT5tYXhfY2hhbm5lbHMgPQorCQkJCSAgICBjaG5sX21ncl9vYmotPm1heF9jaGFubmVsczsKKwkJCX0gZWxzZSB7CisJCQkJc3RhdHVzID0gLUVGQVVMVDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IC1FQ0hSTkc7CisJCX0KKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2NobmxfaWRsZSA9PT09PT09PQorICogICAgICBJZGxlcyBhIHBhcnRpY3VsYXIgY2hhbm5lbC4KKyAqLworaW50IGJyaWRnZV9jaG5sX2lkbGUoc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iaiwgdTMyIHRpbWVvdXQsCisJCQkgICAgYm9vbCBmbHVzaF9kYXRhKQoreworCXM4IGNobmxfbW9kZTsKKwlzdHJ1Y3QgY2hubF9tZ3IgKmNobmxfbWdyX29iajsKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKGNobmxfb2JqKTsKKworCWNobmxfbW9kZSA9IGNobmxfb2JqLT5jaG5sX21vZGU7CisJY2hubF9tZ3Jfb2JqID0gY2hubF9vYmotPmNobmxfbWdyX29iajsKKworCWlmIChDSE5MX0lTX09VVFBVVChjaG5sX21vZGUpICYmICFmbHVzaF9kYXRhKSB7CisJCS8qIFdhaXQgZm9yIElPIGNvbXBsZXRpb25zLCB1cCB0byB0aGUgc3BlY2lmaWVkIHRpbWVvdXQ6ICovCisJCXN0YXR1cyA9IGJyaWRnZV9jaG5sX2ZsdXNoX2lvKGNobmxfb2JqLCB0aW1lb3V0KTsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSBicmlkZ2VfY2hubF9jYW5jZWxfaW8oY2hubF9vYmopOworCisJCS8qIFJlc2V0IHRoZSBieXRlIGNvdW50IGFuZCBwdXQgY2hhbm5lbCBiYWNrIGluIHJlYWR5IHN0YXRlLiAqLworCQljaG5sX29iai0+Ynl0ZXNfbW92ZWQgPSAwOworCQljaG5sX29iai0+ZHdfc3RhdGUgJj0gfkNITkxfU1RBVEVDQU5DRUw7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfY2hubF9vcGVuID09PT09PT09CisgKiAgICAgIE9wZW4gYSBuZXcgaGFsZi1kdXBsZXggY2hhbm5lbCB0byB0aGUgRFNQIGJvYXJkLgorICovCitpbnQgYnJpZGdlX2Nobmxfb3BlbihzdHJ1Y3QgY2hubF9vYmplY3QgKipjaG5sLAorCQkJICAgIHN0cnVjdCBjaG5sX21nciAqaGNobmxfbWdyLCBzOCBjaG5sX21vZGUsCisJCQkgICAgdTMyIGNoX2lkLCBjb25zdCBzdHJ1Y3QgY2hubF9hdHRyICpwYXR0cnMpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGNobmxfbWdyICpjaG5sX21ncl9vYmogPSBoY2hubF9tZ3I7CisJc3RydWN0IGNobmxfb2JqZWN0ICpwY2hubCA9IE5VTEw7CisJc3RydWN0IHN5bmNfb2JqZWN0ICpzeW5jX2V2ZW50ID0gTlVMTDsKKwkvKiBFbnN1cmUgREJDIHJlcXVpcmVtZW50czogKi8KKwlEQkNfUkVRVUlSRShjaG5sICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHBhdHRycyAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShoY2hubF9tZ3IgIT0gTlVMTCk7CisJKmNobmwgPSBOVUxMOworCS8qIFZhbGlkYXRlIEFyZ3M6ICovCisJaWYgKHBhdHRycy0+dWlvX3JlcXMgPT0gMCkgeworCQlzdGF0dXMgPSAtRUlOVkFMOworCX0gZWxzZSB7CisJCWlmICghaGNobmxfbWdyKSB7CisJCQlzdGF0dXMgPSAtRUZBVUxUOworCQl9IGVsc2UgeworCQkJaWYgKGNoX2lkICE9IENITkxfUElDS0ZSRUUpIHsKKwkJCQlpZiAoY2hfaWQgPj0gY2hubF9tZ3Jfb2JqLT5tYXhfY2hhbm5lbHMpCisJCQkJCXN0YXR1cyA9IC1FQ0hSTkc7CisJCQkJZWxzZSBpZiAoY2hubF9tZ3Jfb2JqLT5hcF9jaGFubmVsW2NoX2lkXSAhPQorCQkJCQkgTlVMTCkKKwkJCQkJc3RhdHVzID0gLUVBTFJFQURZOworCQkJfSBlbHNlIHsKKwkJCQkvKiBDaGVjayBmb3IgZnJlZSBjaGFubmVsICovCisJCQkJc3RhdHVzID0KKwkJCQkgICAgc2VhcmNoX2ZyZWVfY2hhbm5lbChjaG5sX21ncl9vYmosICZjaF9pZCk7CisJCQl9CisJCX0KKwl9CisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2VuZDsKKworCURCQ19BU1NFUlQoY2hfaWQgPCBjaG5sX21ncl9vYmotPm1heF9jaGFubmVscyk7CisJLyogQ3JlYXRlIGNoYW5uZWwgb2JqZWN0OiAqLworCXBjaG5sID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNobmxfb2JqZWN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwY2hubCkgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwkvKiBQcm90ZWN0IHF1ZXVlcyBmcm9tIGlvX2RwYzogKi8KKwlwY2hubC0+ZHdfc3RhdGUgPSBDSE5MX1NUQVRFQ0FOQ0VMOworCS8qIEFsbG9jYXRlIGluaXRpYWwgSU9SIGFuZCBJT0MgcXVldWVzOiAqLworCXBjaG5sLT5mcmVlX3BhY2tldHNfbGlzdCA9IGNyZWF0ZV9jaGlycF9saXN0KHBhdHRycy0+dWlvX3JlcXMpOworCXBjaG5sLT5waW9fcmVxdWVzdHMgPSBjcmVhdGVfY2hpcnBfbGlzdCgwKTsKKwlwY2hubC0+cGlvX2NvbXBsZXRpb25zID0gY3JlYXRlX2NoaXJwX2xpc3QoMCk7CisJcGNobmwtPmNobmxfcGFja2V0cyA9IHBhdHRycy0+dWlvX3JlcXM7CisJcGNobmwtPmNpb19jcyA9IDA7CisJcGNobmwtPmNpb19yZXFzID0gMDsKKwlzeW5jX2V2ZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN5bmNfb2JqZWN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN5bmNfZXZlbnQpCisJCXN5bmNfaW5pdF9ldmVudChzeW5jX2V2ZW50KTsKKwllbHNlCisJCXN0YXR1cyA9IC1FTk9NRU07CisKKwlpZiAoIXN0YXR1cykgeworCQlwY2hubC0+bnRmeV9vYmogPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbnRmeV9vYmplY3QpLAorCQkJCQkJCUdGUF9LRVJORUwpOworCQlpZiAocGNobmwtPm50Znlfb2JqKQorCQkJbnRmeV9pbml0KHBjaG5sLT5udGZ5X29iaik7CisJCWVsc2UKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJfQorCisJaWYgKCFzdGF0dXMpIHsKKwkJaWYgKHBjaG5sLT5waW9fY29tcGxldGlvbnMgJiYgcGNobmwtPnBpb19yZXF1ZXN0cyAmJgorCQkgICAgcGNobmwtPmZyZWVfcGFja2V0c19saXN0KSB7CisJCQkvKiBJbml0aWFsaXplIENITkwgb2JqZWN0IGZpZWxkczogKi8KKwkJCXBjaG5sLT5jaG5sX21ncl9vYmogPSBjaG5sX21ncl9vYmo7CisJCQlwY2hubC0+Y2hubF9pZCA9IGNoX2lkOworCQkJcGNobmwtPmNobmxfbW9kZSA9IGNobmxfbW9kZTsKKwkJCXBjaG5sLT51c2VyX2V2ZW50ID0gc3luY19ldmVudDsKKwkJCXBjaG5sLT5zeW5jX2V2ZW50ID0gc3luY19ldmVudDsKKwkJCS8qIEdldCB0aGUgcHJvY2VzcyBoYW5kbGUgKi8KKwkJCXBjaG5sLT5wcm9jZXNzID0gY3VycmVudC0+dGdpZDsKKwkJCXBjaG5sLT5wY2JfYXJnID0gMDsKKwkJCXBjaG5sLT5ieXRlc19tb3ZlZCA9IDA7CisJCQkvKiBEZWZhdWx0IHRvIHByb2MtY29weSAqLworCQkJcGNobmwtPmNobmxfdHlwZSA9IENITkxfUENQWTsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCX0KKwl9CisKKwlpZiAoc3RhdHVzKSB7CisJCS8qIEZyZWUgbWVtb3J5ICovCisJCWlmIChwY2hubC0+cGlvX2NvbXBsZXRpb25zKSB7CisJCQlmcmVlX2NoaXJwX2xpc3QocGNobmwtPnBpb19jb21wbGV0aW9ucyk7CisJCQlwY2hubC0+cGlvX2NvbXBsZXRpb25zID0gTlVMTDsKKwkJCXBjaG5sLT5jaW9fY3MgPSAwOworCQl9CisJCWlmIChwY2hubC0+cGlvX3JlcXVlc3RzKSB7CisJCQlmcmVlX2NoaXJwX2xpc3QocGNobmwtPnBpb19yZXF1ZXN0cyk7CisJCQlwY2hubC0+cGlvX3JlcXVlc3RzID0gTlVMTDsKKwkJfQorCQlpZiAocGNobmwtPmZyZWVfcGFja2V0c19saXN0KSB7CisJCQlmcmVlX2NoaXJwX2xpc3QocGNobmwtPmZyZWVfcGFja2V0c19saXN0KTsKKwkJCXBjaG5sLT5mcmVlX3BhY2tldHNfbGlzdCA9IE5VTEw7CisJCX0KKwkJa2ZyZWUoc3luY19ldmVudCk7CisJCXN5bmNfZXZlbnQgPSBOVUxMOworCisJCWlmIChwY2hubC0+bnRmeV9vYmopIHsKKwkJCW50ZnlfZGVsZXRlKHBjaG5sLT5udGZ5X29iaik7CisJCQlrZnJlZShwY2hubC0+bnRmeV9vYmopOworCQkJcGNobmwtPm50Znlfb2JqID0gTlVMTDsKKwkJfQorCQlrZnJlZShwY2hubCk7CisJfSBlbHNlIHsKKwkJLyogSW5zZXJ0IGNoYW5uZWwgb2JqZWN0IGluIGNoYW5uZWwgbWFuYWdlcjogKi8KKwkJY2hubF9tZ3Jfb2JqLT5hcF9jaGFubmVsW3BjaG5sLT5jaG5sX2lkXSA9IHBjaG5sOworCQlzcGluX2xvY2tfYmgoJmNobmxfbWdyX29iai0+Y2hubF9tZ3JfbG9jayk7CisJCWNobmxfbWdyX29iai0+b3Blbl9jaGFubmVscysrOworCQlzcGluX3VubG9ja19iaCgmY2hubF9tZ3Jfb2JqLT5jaG5sX21ncl9sb2NrKTsKKwkJLyogUmV0dXJuIHJlc3VsdC4uLiAqLworCQlwY2hubC0+ZHdfc3RhdGUgPSBDSE5MX1NUQVRFUkVBRFk7CisJCSpjaG5sID0gcGNobmw7CisJfQorZnVuY19lbmQ6CisJREJDX0VOU1VSRSgoIXN0YXR1cyAmJiBwY2hubCkgfHwgKCpjaG5sID09IE5VTEwpKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGJyaWRnZV9jaG5sX3JlZ2lzdGVyX25vdGlmeSA9PT09PT09PQorICogICAgICBSZWdpc3RlcnMgZm9yIGV2ZW50cyBvbiBhIHBhcnRpY3VsYXIgY2hhbm5lbC4KKyAqLworaW50IGJyaWRnZV9jaG5sX3JlZ2lzdGVyX25vdGlmeShzdHJ1Y3QgY2hubF9vYmplY3QgKmNobmxfb2JqLAorCQkJCSAgICB1MzIgZXZlbnRfbWFzaywgdTMyIG5vdGlmeV90eXBlLAorCQkJCSAgICBzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbiAqaG5vdGlmaWNhdGlvbikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19BU1NFUlQoIShldmVudF9tYXNrICYgfihEU1BfU1RSRUFNRE9ORSB8IERTUF9TVFJFQU1JT0NPTVBMRVRJT04pKSk7CisKKwlpZiAoZXZlbnRfbWFzaykKKwkJc3RhdHVzID0gbnRmeV9yZWdpc3RlcihjaG5sX29iai0+bnRmeV9vYmosIGhub3RpZmljYXRpb24sCisJCQkJCQlldmVudF9tYXNrLCBub3RpZnlfdHlwZSk7CisJZWxzZQorCQlzdGF0dXMgPSBudGZ5X3VucmVnaXN0ZXIoY2hubF9vYmotPm50Znlfb2JqLCBobm90aWZpY2F0aW9uKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY3JlYXRlX2NoaXJwX2xpc3QgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplIGEgcXVldWUgb2YgY2hhbm5lbCBJL08gUmVxdWVzdC9Db21wbGV0aW9uIHBhY2tldHMuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgY2hpcnBzOiAgICAgTnVtYmVyIG9mIENoaXJwcyB0byBhbGxvY2F0ZS4KKyAqICBSZXR1cm5zOgorICogICAgICBQb2ludGVyIHRvIHF1ZXVlIG9mIElSUHMsIG9yIE5VTEwuCisgKiAgUmVxdWlyZXM6CisgKiAgRW5zdXJlczoKKyAqLworc3RhdGljIHN0cnVjdCBsc3RfbGlzdCAqY3JlYXRlX2NoaXJwX2xpc3QodTMyIGNoaXJwcykKK3sKKwlzdHJ1Y3QgbHN0X2xpc3QgKmNoaXJwX2xpc3Q7CisJc3RydWN0IGNobmxfaXJwICpjaG5sX3BhY2tldF9vYmo7CisJdTMyIGk7CisKKwljaGlycF9saXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxzdF9saXN0KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoY2hpcnBfbGlzdCkgeworCQlJTklUX0xJU1RfSEVBRCgmY2hpcnBfbGlzdC0+aGVhZCk7CisJCS8qIE1ha2UgTiBjaGlycHMgYW5kIHBsYWNlIG9uIHF1ZXVlLiAqLworCQlmb3IgKGkgPSAwOyAoaSA8IGNoaXJwcykKKwkJICAgICAmJiAoKGNobmxfcGFja2V0X29iaiA9IG1ha2VfbmV3X2NoaXJwKCkpICE9IE5VTEwpOyBpKyspIHsKKwkJCWxzdF9wdXRfdGFpbChjaGlycF9saXN0LAorCQkJCSAgICAgKHN0cnVjdCBsaXN0X2hlYWQgKiljaG5sX3BhY2tldF9vYmopOworCQl9CisKKwkJLyogSWYgd2UgY291bGRuJ3QgYWxsb2NhdGUgYWxsIGNoaXJwcywgZnJlZSB0aG9zZSBhbGxvY2F0ZWQ6ICovCisJCWlmIChpICE9IGNoaXJwcykgeworCQkJZnJlZV9jaGlycF9saXN0KGNoaXJwX2xpc3QpOworCQkJY2hpcnBfbGlzdCA9IE5VTEw7CisJCX0KKwl9CisKKwlyZXR1cm4gY2hpcnBfbGlzdDsKK30KKworLyoKKyAqICA9PT09PT09PSBmcmVlX2NoaXJwX2xpc3QgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBGcmVlIHRoZSBxdWV1ZSBvZiBDaGlycHMuCisgKi8KK3N0YXRpYyB2b2lkIGZyZWVfY2hpcnBfbGlzdChzdHJ1Y3QgbHN0X2xpc3QgKmNoaXJwX2xpc3QpCit7CisJREJDX1JFUVVJUkUoY2hpcnBfbGlzdCAhPSBOVUxMKTsKKworCXdoaWxlICghTFNUX0lTX0VNUFRZKGNoaXJwX2xpc3QpKQorCQlrZnJlZShsc3RfZ2V0X2hlYWQoY2hpcnBfbGlzdCkpOworCisJa2ZyZWUoY2hpcnBfbGlzdCk7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbWFrZV9uZXdfY2hpcnAgPT09PT09PT0KKyAqICAgICAgQWxsb2NhdGUgdGhlIG1lbW9yeSBmb3IgYSBuZXcgY2hhbm5lbCBJUlAuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2hubF9pcnAgKm1ha2VfbmV3X2NoaXJwKHZvaWQpCit7CisJc3RydWN0IGNobmxfaXJwICpjaG5sX3BhY2tldF9vYmo7CisKKwljaG5sX3BhY2tldF9vYmogPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2hubF9pcnApLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2hubF9wYWNrZXRfb2JqICE9IE5VTEwpIHsKKwkJLyogbHN0X2luaXRfZWxlbSBvbmx5IHJlc2V0cyB0aGUgbGlzdCdzIG1lbWJlciB2YWx1ZXMuICovCisJCWxzdF9pbml0X2VsZW0oJmNobmxfcGFja2V0X29iai0+bGluayk7CisJfQorCisJcmV0dXJuIGNobmxfcGFja2V0X29iajsKK30KKworLyoKKyAqICA9PT09PT09PSBzZWFyY2hfZnJlZV9jaGFubmVsID09PT09PT09CisgKiAgICAgIFNlYXJjaCBmb3IgYSBmcmVlIGNoYW5uZWwgc2xvdCBpbiB0aGUgYXJyYXkgb2YgY2hhbm5lbCBwb2ludGVycy4KKyAqLworc3RhdGljIGludCBzZWFyY2hfZnJlZV9jaGFubmVsKHN0cnVjdCBjaG5sX21nciAqY2hubF9tZ3Jfb2JqLAorCQkJCSAgICAgIHUzMiAqY2hubCkKK3sKKwlpbnQgc3RhdHVzID0gLUVOT1NSOworCXUzMiBpOworCisJREJDX1JFUVVJUkUoY2hubF9tZ3Jfb2JqKTsKKworCWZvciAoaSA9IDA7IGkgPCBjaG5sX21ncl9vYmotPm1heF9jaGFubmVsczsgaSsrKSB7CisJCWlmIChjaG5sX21ncl9vYmotPmFwX2NoYW5uZWxbaV0gPT0gTlVMTCkgeworCQkJc3RhdHVzID0gMDsKKwkJCSpjaG5sID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL2RzcC1jbG9jay5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvZHNwLWNsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIxYTBjNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL2RzcC1jbG9jay5jCkBAIC0wLDAgKzEsNDIyIEBACisvKgorICogY2xrLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogQ2xvY2sgYW5kIFRpbWVyIHNlcnZpY2VzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSG9zdCBPUyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisjaW5jbHVkZSA8cGxhdC9kbXRpbWVyLmg+CisjaW5jbHVkZSA8cGxhdC9tY2JzcC5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRFNQL0JJT1MgQnJpZGdlICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9jZmcuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHJ2Lmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgorI2luY2x1ZGUgIl90aW9tYXAuaCIKKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRyYWNlICYgRGVidWcgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJjLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlzICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Nsay5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVmaW5lcywgRGF0YSBTdHJ1Y3R1cmVzLCBUeXBlZGVmcyAqLworCisjZGVmaW5lIE9NQVBfU1NJX09GRlNFVAkJCTB4NTgwMDAKKyNkZWZpbmUgT01BUF9TU0lfU0laRQkJCTB4MTAwMAorI2RlZmluZSBPTUFQX1NTSV9TWVNDT05GSUdfT0ZGU0VUCTB4MTAKKworI2RlZmluZSBTU0lfQVVUT0lETEUJCQkoMSA8PCAwKQorI2RlZmluZSBTU0lfU0lETEVfU01BUlRJRExFCQkoMiA8PCAzKQorI2RlZmluZSBTU0lfTUlETEVfTk9JRExFCQkoMSA8PCAxMikKKworLyogQ2xrIHR5cGVzIHJlcXVlc3RlZCBieSB0aGUgZHNwICovCisjZGVmaW5lIElWQTJfQ0xLCTAKKyNkZWZpbmUgR1BUX0NMSwkJMQorI2RlZmluZSBXRFRfQ0xLCQkyCisjZGVmaW5lIE1DQlNQX0NMSwkzCisjZGVmaW5lIFNTSV9DTEsJCTQKKworLyogQnJpZGdlIEdQVCBpZCAoMSAtIDQpLCBETSBUaW1lciBpZCAoNSAtIDgpICovCisjZGVmaW5lIERNVF9JRChpZCkgKChpZCkgKyA0KQorCisvKiBCcmlkZ2UgTUNCU1AgaWQgKDYgLSAxMCksIE9NQVAgTWNic3AgaWQgKDAgLSA0KSAqLworI2RlZmluZSBNQ0JTUF9JRChpZCkgKChpZCkgLSA2KQorCitzdGF0aWMgc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyWzRdOworCitzdHJ1Y3QgY2xrICppdmEyX2NsazsKKworc3RydWN0IGRzcF9zc2kgeworCXN0cnVjdCBjbGsgKnNzdF9mY2s7CisJc3RydWN0IGNsayAqc3NyX2ZjazsKKwlzdHJ1Y3QgY2xrICppY2s7Cit9OworCitzdGF0aWMgc3RydWN0IGRzcF9zc2kgc3NpOworCitzdGF0aWMgdTMyIGRzcF9jbG9ja3M7CisKK3N0YXRpYyBpbmxpbmUgdTMyIGlzX2RzcF9jbGtfYWN0aXZlKHUzMiBjbGssIHU4IGlkKQoreworCXJldHVybiBjbGsgJiAoMSA8PCBpZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZHNwX2Nsa19hY3RpdmUodTMyICpjbGssIHU4IGlkKQoreworCSpjbGsgfD0gKDEgPDwgaWQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2RzcF9jbGtfaW5hY3RpdmUodTMyICpjbGssIHU4IGlkKQoreworCSpjbGsgJj0gfigxIDw8IGlkKTsKK30KKworc3RhdGljIHM4IGdldF9jbGtfdHlwZSh1OCBpZCkKK3sKKwlzOCB0eXBlOworCisJaWYgKGlkID09IERTUF9DTEtfSVZBMikKKwkJdHlwZSA9IElWQTJfQ0xLOworCWVsc2UgaWYgKGlkIDw9IERTUF9DTEtfR1BUOCkKKwkJdHlwZSA9IEdQVF9DTEs7CisJZWxzZSBpZiAoaWQgPT0gRFNQX0NMS19XRFQzKQorCQl0eXBlID0gV0RUX0NMSzsKKwllbHNlIGlmIChpZCA8PSBEU1BfQ0xLX01DQlNQNSkKKwkJdHlwZSA9IE1DQlNQX0NMSzsKKwllbHNlIGlmIChpZCA9PSBEU1BfQ0xLX1NTSSkKKwkJdHlwZSA9IFNTSV9DTEs7CisJZWxzZQorCQl0eXBlID0gLTE7CisKKwlyZXR1cm4gdHlwZTsKK30KKworLyoKKyAqICA9PT09PT09PSBkc3BfY2xrX2V4aXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDbGVhbnVwIENMSyBtb2R1bGUuCisgKi8KK3ZvaWQgZHNwX2Nsa19leGl0KHZvaWQpCit7CisJZHNwX2Nsb2NrX2Rpc2FibGVfYWxsKGRzcF9jbG9ja3MpOworCisJY2xrX3B1dChpdmEyX2Nsayk7CisJY2xrX3B1dChzc2kuc3N0X2Zjayk7CisJY2xrX3B1dChzc2kuc3NyX2Zjayk7CisJY2xrX3B1dChzc2kuaWNrKTsKK30KKworLyoKKyAqICA9PT09PT09PSBkc3BfY2xrX2luaXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplIENMSyBtb2R1bGUuCisgKi8KK3ZvaWQgZHNwX2Nsa19pbml0KHZvaWQpCit7CisJc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZHNwYnJpZGdlX2RldmljZTsKKworCWRzcGJyaWRnZV9kZXZpY2UuZGV2LmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZTsKKworCWl2YTJfY2xrID0gY2xrX2dldCgmZHNwYnJpZGdlX2RldmljZS5kZXYsICJpdmEyX2NrIik7CisJaWYgKElTX0VSUihpdmEyX2NsaykpCisJCWRldl9lcnIoYnJpZGdlLCAiZmFpbGVkIHRvIGdldCBpdmEyIGNsb2NrICVwXG4iLCBpdmEyX2Nsayk7CisKKwlzc2kuc3N0X2ZjayA9IGNsa19nZXQoJmRzcGJyaWRnZV9kZXZpY2UuZGV2LCAic3NpX3NzdF9mY2siKTsKKwlzc2kuc3NyX2ZjayA9IGNsa19nZXQoJmRzcGJyaWRnZV9kZXZpY2UuZGV2LCAic3NpX3Nzcl9mY2siKTsKKwlzc2kuaWNrID0gY2xrX2dldCgmZHNwYnJpZGdlX2RldmljZS5kZXYsICJzc2lfaWNrIik7CisKKwlpZiAoSVNfRVJSKHNzaS5zc3RfZmNrKSB8fCBJU19FUlIoc3NpLnNzcl9mY2spIHx8IElTX0VSUihzc2kuaWNrKSkKKwkJZGV2X2VycihicmlkZ2UsICJmYWlsZWQgdG8gZ2V0IHNzaTogc3N0ICVwLCBzc3IgJXAsIGljayAlcFxuIiwKKwkJCQkJc3NpLnNzdF9mY2ssIHNzaS5zc3JfZmNrLCBzc2kuaWNrKTsKK30KKworI2lmZGVmIENPTkZJR19PTUFQX01DQlNQCitzdGF0aWMgdm9pZCBtY2JzcF9jbGtfcHJlcGFyZShib29sIGZsYWcsIHU4IGlkKQoreworCXN0cnVjdCBjZmdfaG9zdHJlcyAqcmVzb3VyY2VzOworCXN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iamVjdCA9IE5VTEw7CisJc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqYnJpZGdlX2NvbnRleHQgPSBOVUxMOworCXUzMiB2YWw7CisKKwloZGV2X29iamVjdCA9IChzdHJ1Y3QgZGV2X29iamVjdCAqKWRydl9nZXRfZmlyc3RfZGV2X29iamVjdCgpOworCWlmICghaGRldl9vYmplY3QpCisJCXJldHVybjsKKworCWRldl9nZXRfYnJpZGdlX2NvbnRleHQoaGRldl9vYmplY3QsICZicmlkZ2VfY29udGV4dCk7CisJaWYgKCFicmlkZ2VfY29udGV4dCkKKwkJcmV0dXJuOworCisJcmVzb3VyY2VzID0gYnJpZGdlX2NvbnRleHQtPnJlc291cmNlczsKKwlpZiAoIXJlc291cmNlcykKKwkJcmV0dXJuOworCisJaWYgKGZsYWcpIHsKKwkJaWYgKGlkID09IERTUF9DTEtfTUNCU1AxKSB7CisJCQkvKiBzZXQgTUNCU1AxX0NMS1MsIG9uIE1jQlNQMSBPTiAqLworCQkJdmFsID0gX19yYXdfcmVhZGwocmVzb3VyY2VzLT5kd19zeXNfY3RybF9iYXNlICsgMHgyNzQpOworCQkJdmFsIHw9IDEgPDwgMjsKKwkJCV9fcmF3X3dyaXRlbCh2YWwsIHJlc291cmNlcy0+ZHdfc3lzX2N0cmxfYmFzZSArIDB4Mjc0KTsKKwkJfSBlbHNlIGlmIChpZCA9PSBEU1BfQ0xLX01DQlNQMikgeworCQkJLyogc2V0IE1DQlNQMl9DTEtTLCBvbiBNY0JTUDIgT04gKi8KKwkJCXZhbCA9IF9fcmF3X3JlYWRsKHJlc291cmNlcy0+ZHdfc3lzX2N0cmxfYmFzZSArIDB4Mjc0KTsKKwkJCXZhbCB8PSAxIDw8IDY7CisJCQlfX3Jhd193cml0ZWwodmFsLCByZXNvdXJjZXMtPmR3X3N5c19jdHJsX2Jhc2UgKyAweDI3NCk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoaWQgPT0gRFNQX0NMS19NQ0JTUDEpIHsKKwkJCS8qIGNsZWFyIE1DQlNQMV9DTEtTLCBvbiBNY0JTUDEgT0ZGICovCisJCQl2YWwgPSBfX3Jhd19yZWFkbChyZXNvdXJjZXMtPmR3X3N5c19jdHJsX2Jhc2UgKyAweDI3NCk7CisJCQl2YWwgJj0gfigxIDw8IDIpOworCQkJX19yYXdfd3JpdGVsKHZhbCwgcmVzb3VyY2VzLT5kd19zeXNfY3RybF9iYXNlICsgMHgyNzQpOworCQl9IGVsc2UgaWYgKGlkID09IERTUF9DTEtfTUNCU1AyKSB7CisJCQkvKiBjbGVhciBNQ0JTUDJfQ0xLUywgb24gTWNCU1AyIE9GRiAqLworCQkJdmFsID0gX19yYXdfcmVhZGwocmVzb3VyY2VzLT5kd19zeXNfY3RybF9iYXNlICsgMHgyNzQpOworCQkJdmFsICY9IH4oMSA8PCA2KTsKKwkJCV9fcmF3X3dyaXRlbCh2YWwsIHJlc291cmNlcy0+ZHdfc3lzX2N0cmxfYmFzZSArIDB4Mjc0KTsKKwkJfQorCX0KK30KKyNlbmRpZgorCisvKioKKyAqIGRzcF9ncHRfd2FpdF9vdmVyZmxvdyAtIHNldCBncHQgb3ZlcmZsb3cgYW5kIHdhaXQgZm9yIGZpeGVkIHRpbWVvdXQKKyAqIEBjbGtfaWQ6ICAgICAgR1AgVGltZXIgY2xvY2sgaWQuCisgKiBAbG9hZDogICAgICAgIE92ZXJmbG93IHZhbHVlLgorICoKKyAqIFNldHMgYW4gb3ZlcmZsb3cgaW50ZXJydXB0IGZvciB0aGUgZGVzaXJlZCBHUFQgd2FpdGluZyBmb3IgYSB0aW1lb3V0CisgKiBvZiA1IG1zZWNzIGZvciB0aGUgaW50ZXJydXB0IHRvIG9jY3VyLgorICovCit2b2lkIGRzcF9ncHRfd2FpdF9vdmVyZmxvdyhzaG9ydCBpbnQgY2xrX2lkLCB1bnNpZ25lZCBpbnQgbG9hZCkKK3sKKwlzdHJ1Y3Qgb21hcF9kbV90aW1lciAqZ3B0ID0gdGltZXJbY2xrX2lkIC0gMV07CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCisJaWYgKCFncHQpCisJCXJldHVybjsKKworCS8qIEVuYWJsZSBvdmVyZmxvdyBpbnRlcnJ1cHQgKi8KKwlvbWFwX2RtX3RpbWVyX3NldF9pbnRfZW5hYmxlKGdwdCwgT01BUF9USU1FUl9JTlRfT1ZFUkZMT1cpOworCisJLyoKKwkgKiBTZXQgY291bnRlciB2YWx1ZSB0byBvdmVyZmxvdyBjb3VudGVyIGFmdGVyCisJICogb25lIHRpY2sgYW5kIHN0YXJ0IHRpbWVyLgorCSAqLworCW9tYXBfZG1fdGltZXJfc2V0X2xvYWRfc3RhcnQoZ3B0LCAwLCBsb2FkKTsKKworCS8qIFdhaXQgODB1cyBmb3IgdGltZXIgdG8gb3ZlcmZsb3cgKi8KKwl1ZGVsYXkoODApOworCisJdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoNSk7CisJLyogQ2hlY2sgaW50ZXJydXB0IHN0YXR1cyBhbmQgd2FpdCBmb3IgaW50ZXJydXB0ICovCisJd2hpbGUgKCEob21hcF9kbV90aW1lcl9yZWFkX3N0YXR1cyhncHQpICYgT01BUF9USU1FUl9JTlRfT1ZFUkZMT1cpKSB7CisJCWlmICh0aW1lX2lzX2FmdGVyX2ppZmZpZXModGltZW91dCkpIHsKKwkJCXByX2VycigiJXM6IEdQVGltZXIgaW50ZXJydXB0IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKy8qCisgKiAgPT09PT09PT0gZHNwX2Nsa19lbmFibGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBFbmFibGUgQ2xvY2sgLgorICoKKyAqLworaW50IGRzcF9jbGtfZW5hYmxlKGVudW0gZHNwX2Nsa19pZCBjbGtfaWQpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlpZiAoaXNfZHNwX2Nsa19hY3RpdmUoZHNwX2Nsb2NrcywgY2xrX2lkKSkgeworCQlkZXZfZXJyKGJyaWRnZSwgIldBUk46IGNsb2NrIGlkICVkIGFscmVhZHkgZW5hYmxlZFxuIiwgY2xrX2lkKTsKKwkJZ290byBvdXQ7CisJfQorCisJc3dpdGNoIChnZXRfY2xrX3R5cGUoY2xrX2lkKSkgeworCWNhc2UgSVZBMl9DTEs6CisJCWNsa19lbmFibGUoaXZhMl9jbGspOworCQlicmVhazsKKwljYXNlIEdQVF9DTEs6CisJCXRpbWVyW2Nsa19pZCAtIDFdID0KKwkJCQlvbWFwX2RtX3RpbWVyX3JlcXVlc3Rfc3BlY2lmaWMoRE1UX0lEKGNsa19pZCkpOworCQlicmVhazsKKyNpZmRlZiBDT05GSUdfT01BUF9NQ0JTUAorCWNhc2UgTUNCU1BfQ0xLOgorCQltY2JzcF9jbGtfcHJlcGFyZSh0cnVlLCBjbGtfaWQpOworCQlvbWFwX21jYnNwX3NldF9pb190eXBlKE1DQlNQX0lEKGNsa19pZCksIE9NQVBfTUNCU1BfUE9MTF9JTyk7CisJCW9tYXBfbWNic3BfcmVxdWVzdChNQ0JTUF9JRChjbGtfaWQpKTsKKwkJYnJlYWs7CisjZW5kaWYKKwljYXNlIFdEVF9DTEs6CisJCWRldl9lcnIoYnJpZGdlLCAiRVJST1I6IERTUCByZXF1ZXN0ZWQgdG8gZW5hYmxlIFdEVDMgY2xrXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBTU0lfQ0xLOgorCQljbGtfZW5hYmxlKHNzaS5zc3RfZmNrKTsKKwkJY2xrX2VuYWJsZShzc2kuc3NyX2Zjayk7CisJCWNsa19lbmFibGUoc3NpLmljayk7CisKKwkJLyoKKwkJICogVGhlIFNTSSBtb2R1bGUgbmVlZCB0byBjb25maWd1cmVkIG5vdCB0byBoYXZlIHRoZSBGb3JjZWQKKwkJICogaWRsZSBmb3IgbWFzdGVyIGludGVyZmFjZS4gSWYgaXQgaXMgc2V0IHRvIGZvcmNlZCBpZGxlLAorCQkgKiB0aGUgU1NJIG1vZHVsZSBpcyB0cmFuc2l0aW9uaW5nIHRvIHN0YW5kYnkgdGhlcmVieSBjYXVzaW5nCisJCSAqIHRoZSBjbGllbnQgaW4gdGhlIERTUCBoYW5nIHdhaXRpbmcgZm9yIHRoZSBTU0kgbW9kdWxlIHRvCisJCSAqIGJlIGFjdGl2ZSBhZnRlciBlbmFibGluZyB0aGUgY2xvY2tzCisJCSAqLworCQlzc2lfY2xrX3ByZXBhcmUodHJ1ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoYnJpZGdlLCAiSW52YWxpZCBjbG9jayBpZCBmb3IgZW5hYmxlXG4iKTsKKwkJc3RhdHVzID0gLUVQRVJNOworCX0KKworCWlmICghc3RhdHVzKQorCQlzZXRfZHNwX2Nsa19hY3RpdmUoJmRzcF9jbG9ja3MsIGNsa19pZCk7CisKK291dDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIGRzcF9jbG9ja19lbmFibGVfYWxsIC0gRW5hYmxlIGNsb2NrcyB1c2VkIGJ5IHRoZSBEU1AKKyAqIEBkZXZfY29udGV4dAkJRHJpdmVyJ3MgZGV2aWNlIGNvbnRleHQgc3RydWN1cmUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgYWxsIHRoZSBwZXJpcGhlcmFsIGNsb2NrcyB0aGF0IHdlcmUgcmVxdWVzdGVkIGJ5IERTUC4KKyAqLwordTMyIGRzcF9jbG9ja19lbmFibGVfYWxsKHUzMiBkc3BfcGVyX2Nsb2NrcykKK3sKKwl1MzIgY2xrX2lkOworCXUzMiBzdGF0dXMgPSAtRVBFUk07CisKKwlmb3IgKGNsa19pZCA9IDA7IGNsa19pZCA8IERTUF9DTEtfTk9UX0RFRklORUQ7IGNsa19pZCsrKSB7CisJCWlmIChpc19kc3BfY2xrX2FjdGl2ZShkc3BfcGVyX2Nsb2NrcywgY2xrX2lkKSkKKwkJCXN0YXR1cyA9IGRzcF9jbGtfZW5hYmxlKGNsa19pZCk7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkc3BfY2xrX2Rpc2FibGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEaXNhYmxlIHRoZSBjbG9jay4KKyAqCisgKi8KK2ludCBkc3BfY2xrX2Rpc2FibGUoZW51bSBkc3BfY2xrX2lkIGNsa19pZCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKworCWlmICghaXNfZHNwX2Nsa19hY3RpdmUoZHNwX2Nsb2NrcywgY2xrX2lkKSkgeworCQlkZXZfZXJyKGJyaWRnZSwgIkVSUjogY2xvY2sgaWQgJWQgYWxyZWFkeSBkaXNhYmxlZFxuIiwgY2xrX2lkKTsKKwkJZ290byBvdXQ7CisJfQorCisJc3dpdGNoIChnZXRfY2xrX3R5cGUoY2xrX2lkKSkgeworCWNhc2UgSVZBMl9DTEs6CisJCWNsa19kaXNhYmxlKGl2YTJfY2xrKTsKKwkJYnJlYWs7CisJY2FzZSBHUFRfQ0xLOgorCQlvbWFwX2RtX3RpbWVyX2ZyZWUodGltZXJbY2xrX2lkIC0gMV0pOworCQlicmVhazsKKyNpZmRlZiBDT05GSUdfT01BUF9NQ0JTUAorCWNhc2UgTUNCU1BfQ0xLOgorCQltY2JzcF9jbGtfcHJlcGFyZShmYWxzZSwgY2xrX2lkKTsKKwkJb21hcF9tY2JzcF9mcmVlKE1DQlNQX0lEKGNsa19pZCkpOworCQlicmVhazsKKyNlbmRpZgorCWNhc2UgV0RUX0NMSzoKKwkJZGV2X2VycihicmlkZ2UsICJFUlJPUjogRFNQIHJlcXVlc3RlZCB0byBkaXNhYmxlIFdEVDMgY2xrXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBTU0lfQ0xLOgorCQlzc2lfY2xrX3ByZXBhcmUoZmFsc2UpOworCQlzc2lfY2xrX3ByZXBhcmUoZmFsc2UpOworCQljbGtfZGlzYWJsZShzc2kuc3N0X2Zjayk7CisJCWNsa19kaXNhYmxlKHNzaS5zc3JfZmNrKTsKKwkJY2xrX2Rpc2FibGUoc3NpLmljayk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoYnJpZGdlLCAiSW52YWxpZCBjbG9jayBpZCBmb3IgZGlzYWJsZVxuIik7CisJCXN0YXR1cyA9IC1FUEVSTTsKKwl9CisKKwlpZiAoIXN0YXR1cykKKwkJc2V0X2RzcF9jbGtfaW5hY3RpdmUoJmRzcF9jbG9ja3MsIGNsa19pZCk7CisKK291dDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIGRzcF9jbG9ja19kaXNhYmxlX2FsbCAtIERpc2FibGUgYWxsIGFjdGl2ZSBjbG9ja3MKKyAqIEBkZXZfY29udGV4dAkJRHJpdmVyJ3MgZGV2aWNlIGNvbnRleHQgc3RydWN0dXJlCisgKgorICogVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyBhbGwgdGhlIHBlcmlwaGVyYWwgY2xvY2tzIHRoYXQgd2VyZSBlbmFibGVkIGJ5IERTUC4KKyAqIEl0IGlzIG1lYW50IHRvIGJlIGNhbGxlZCBvbmx5IHdoZW4gRFNQIGlzIGVudGVyaW5nIGhpYmVybmF0aW9uIG9yIHdoZW4gRFNQCisgKiBpcyBpbiBlcnJvciBzdGF0ZS4KKyAqLwordTMyIGRzcF9jbG9ja19kaXNhYmxlX2FsbCh1MzIgZHNwX3Blcl9jbG9ja3MpCit7CisJdTMyIGNsa19pZDsKKwl1MzIgc3RhdHVzID0gLUVQRVJNOworCisJZm9yIChjbGtfaWQgPSAwOyBjbGtfaWQgPCBEU1BfQ0xLX05PVF9ERUZJTkVEOyBjbGtfaWQrKykgeworCQlpZiAoaXNfZHNwX2Nsa19hY3RpdmUoZHNwX3Blcl9jbG9ja3MsIGNsa19pZCkpCisJCQlzdGF0dXMgPSBkc3BfY2xrX2Rpc2FibGUoY2xrX2lkKTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCit1MzIgZHNwX2Nsa19nZXRfaXZhMl9yYXRlKHZvaWQpCit7CisJdTMyIGNsa19zcGVlZF9raHo7CisKKwljbGtfc3BlZWRfa2h6ID0gY2xrX2dldF9yYXRlKGl2YTJfY2xrKTsKKwljbGtfc3BlZWRfa2h6IC89IDEwMDA7CisJZGV2X2RiZyhicmlkZ2UsICIlczogY2xrIHNwZWVkIEtoeiA9ICVkXG4iLCBfX2Z1bmNfXywgY2xrX3NwZWVkX2toeik7CisKKwlyZXR1cm4gY2xrX3NwZWVkX2toejsKK30KKwordm9pZCBzc2lfY2xrX3ByZXBhcmUoYm9vbCBGTEFHKQoreworCXZvaWQgX19pb21lbSAqc3NpX2Jhc2U7CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJc3NpX2Jhc2UgPSBpb3JlbWFwKEw0XzM0WFhfQkFTRSArIE9NQVBfU1NJX09GRlNFVCwgT01BUF9TU0lfU0laRSk7CisJaWYgKCFzc2lfYmFzZSkgeworCQlwcl9lcnIoIiVzOiBlcnJvciwgU1NJIG5vdCBjb25maWd1cmVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoRkxBRykgeworCQkvKiBTZXQgQXV0b2lkbGUsIFNJRExFTW9kZSB0byBzbWFydCBpZGxlLCBhbmQgTUlETEVtb2RlIHRvCisJCSAqIG5vIGlkbGUKKwkJICovCisJCXZhbHVlID0gU1NJX0FVVE9JRExFIHwgU1NJX1NJRExFX1NNQVJUSURMRSB8IFNTSV9NSURMRV9OT0lETEU7CisJfSBlbHNlIHsKKwkJLyogU2V0IEF1dG9pZGxlLCBTSURMRU1vZGUgdG8gZm9yY2VkIGlkbGUsIGFuZCBNSURMRW1vZGUgdG8KKwkJICogZm9yY2VkIGlkbGUKKwkJICovCisJCXZhbHVlID0gU1NJX0FVVE9JRExFOworCX0KKworCV9fcmF3X3dyaXRlbCh2YWx1ZSwgc3NpX2Jhc2UgKyBPTUFQX1NTSV9TWVNDT05GSUdfT0ZGU0VUKTsKKwlpb3VubWFwKHNzaV9iYXNlKTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvaW9fc20uYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL2lvX3NtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJjNjYwZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL2lvX3NtLmMKQEAgLTAsMCArMSwyMzMzIEBACisvKgorICogaW9fc20uYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBJTyBkaXNwYXRjaGVyIGZvciBhIHNoYXJlZCBtZW1vcnkgY2hhbm5lbCBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworLyoKKyAqIENoYW5uZWwgSW52YXJpYW50OgorICogVGhlcmUgaXMgYW4gaW1wb3J0YW50IGludmFyaWFudCBjb25kaXRpb24gd2hpY2ggbXVzdCBiZSBtYWludGFpbmVkIHBlcgorICogY2hhbm5lbCBvdXRzaWRlIG9mIGJyaWRnZV9jaG5sX2dldF9pb2MoKSBhbmQgSU9fRGlzcGF0Y2goKSwgdmlvbGF0aW9uIG9mCisgKiB3aGljaCBtYXkgY2F1c2UgdGltZW91dHMgYW5kL29yIGZhaWx1cmUgb2YgdGhlIHN5bmNfd2FpdF9vbl9ldmVudAorICogZnVuY3Rpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBIb3N0IE9TICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKworLyogVHJhY2UgJiBEZWJ1ZyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmMuaD4KKworLyogU2VydmljZXMgTGF5ZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY2ZnLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL250ZnkuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvc3luYy5oPgorCisvKiBIYXJkd2FyZSBBYnN0cmFjdGlvbiBMYXllciAqLworI2luY2x1ZGUgPGh3X2RlZnMuaD4KKyNpbmNsdWRlIDxod19tbXUuaD4KKworLyogQnJpZGdlIERyaXZlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BkZWguaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwaW8uaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwaW9jdGwuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvd2R0Lmg+CisjaW5jbHVkZSA8X3Rpb21hcC5oPgorI2luY2x1ZGUgPHRpb21hcF9pby5oPgorI2luY2x1ZGUgPF90aW9tYXBfcHdyLmg+CisKKy8qIFBsYXRmb3JtIE1hbmFnZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY29kLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL25vZGUuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2Lmg+CisKKy8qIE90aGVycyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9ybXNfc2guaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvbWdyLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rydi5oPgorI2luY2x1ZGUgIl9jbW0uaCIKKyNpbmNsdWRlICJtb2R1bGVfbGlzdC5oIgorCisvKiBUaGlzICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2lvX3NtLmg+CisjaW5jbHVkZSAiX21zZ19zbS5oIgorCisvKiBEZWZpbmVzLCBEYXRhIFN0cnVjdHVyZXMsIFR5cGVkZWZzICovCisjZGVmaW5lIE9VVFBVVE5PVFJFQURZICAweGZmZmYKKyNkZWZpbmUgTk9URU5BQkxFRCAgICAgIDB4ZmZmZgkvKiBDaGFubmVsKHMpIG5vdCBlbmFibGVkICovCisKKyNkZWZpbmUgRVhURU5EICAgICAgIl9FWFRfRU5EIgorCisjZGVmaW5lIFNXQVBfV09SRCh4KSAgICAgKHgpCisjZGVmaW5lIFVMX1BBR0VfQUxJR05fU0laRSAweDEwMDAwCS8qIFBhZ2UgQWxpZ24gU2l6ZSAqLworCisjZGVmaW5lIE1BWF9QTV9SRVFTIDMyCisKKyNkZWZpbmUgTU1VX0ZBVUxUX0hFQUQxIDB4YTVhNWE1YTUKKyNkZWZpbmUgTU1VX0ZBVUxUX0hFQUQyIDB4OTY5Njk2OTYKKyNkZWZpbmUgUE9MTF9NQVggMTAwMAorI2RlZmluZSBNQVhfTU1VX0RCR0JVRkYgMTAyNDAKKworLyogSU8gTWFuYWdlcjogb25seSBvbmUgY3JlYXRlZCBwZXIgYm9hcmQgKi8KK3N0cnVjdCBpb19tZ3IgeworCS8qIFRoZXNlIGZvdXIgZmllbGRzIG11c3QgYmUgdGhlIGZpcnN0IGZpZWxkcyBpbiBhIGlvX21ncl8gc3RydWN0ICovCisJLyogQnJpZGdlIGRldmljZSBjb250ZXh0ICovCisJc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqaGJyaWRnZV9jb250ZXh0OworCS8qIEZ1bmN0aW9uIGludGVyZmFjZSB0byBCcmlkZ2UgZHJpdmVyICovCisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisJc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqOwkvKiBEZXZpY2UgdGhpcyBib2FyZCByZXByZXNlbnRzICovCisKKwkvKiBUaGVzZSBmaWVsZHMgaW5pdGlhbGl6ZWQgaW4gYnJpZGdlX2lvX2NyZWF0ZSgpICovCisJc3RydWN0IGNobmxfbWdyICpoY2hubF9tZ3I7CisJc3RydWN0IHNobSAqc2hhcmVkX21lbTsJLyogU2hhcmVkIE1lbW9yeSBjb250cm9sICovCisJdTggKmlucHV0OwkJLyogQWRkcmVzcyBvZiBpbnB1dCBjaGFubmVsICovCisJdTggKm91dHB1dDsJCS8qIEFkZHJlc3Mgb2Ygb3V0cHV0IGNoYW5uZWwgKi8KKwlzdHJ1Y3QgbXNnX21nciAqaG1zZ19tZ3I7CS8qIE1lc3NhZ2UgbWFuYWdlciAqLworCS8qIE1zZyBjb250cm9sIGZvciBmcm9tIERTUCBtZXNzYWdlcyAqLworCXN0cnVjdCBtc2dfY3RybCAqbXNnX2lucHV0X2N0cmw7CisJLyogTXNnIGNvbnRyb2wgZm9yIHRvIERTUCBtZXNzYWdlcyAqLworCXN0cnVjdCBtc2dfY3RybCAqbXNnX291dHB1dF9jdHJsOworCXU4ICptc2dfaW5wdXQ7CQkvKiBBZGRyZXNzIG9mIGlucHV0IG1lc3NhZ2VzICovCisJdTggKm1zZ19vdXRwdXQ7CQkvKiBBZGRyZXNzIG9mIG91dHB1dCBtZXNzYWdlcyAqLworCXUzMiB1c21fYnVmX3NpemU7CS8qIFNpemUgb2YgYSBzaGFyZWQgbWVtb3J5IEkvTyBjaGFubmVsICovCisJYm9vbCBzaGFyZWRfaXJxOwkvKiBJcyB0aGlzIElSUSBzaGFyZWQ/ICovCisJdTMyIHdvcmRfc2l6ZTsJCS8qIFNpemUgaW4gYnl0ZXMgb2YgRFNQIHdvcmQgKi8KKwl1MTYgaW50cl92YWw7CQkvKiBJbnRlcnJ1cHQgdmFsdWUgKi8KKwkvKiBQcml2YXRlIGV4dG5kIHByb2MgaW5mbzsgbW11IHNldHVwICovCisJc3RydWN0IG1ncl9wcm9jZXNzb3JleHRpbmZvIGV4dF9wcm9jX2luZm87CisJc3RydWN0IGNtbV9vYmplY3QgKmhjbW1fbWdyOwkvKiBTaGFyZWQgTWVtIE1uZ3IgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaW9fd29ya3E7CS8qIHdvcmtxdWV1ZSAqLworI2lmIGRlZmluZWQoQ09ORklHX1RJRFNQQlJJREdFX0JBQ0tUUkFDRSkgfHwgZGVmaW5lZChDT05GSUdfVElEU1BCUklER0VfREVCVUcpCisJdTMyIHVsX3RyYWNlX2J1ZmZlcl9iZWdpbjsJLyogVHJhY2UgbWVzc2FnZSBzdGFydCBhZGRyZXNzICovCisJdTMyIHVsX3RyYWNlX2J1ZmZlcl9lbmQ7CS8qIFRyYWNlIG1lc3NhZ2UgZW5kIGFkZHJlc3MgKi8KKwl1MzIgdWxfdHJhY2VfYnVmZmVyX2N1cnJlbnQ7CS8qIFRyYWNlIG1lc3NhZ2UgY3VycmVudCBhZGRyZXNzICovCisJdTMyIHVsX2dwcF9yZWFkX3BvaW50ZXI7CS8qIEdQUCBSZWFkIHBvaW50ZXIgdG8gVHJhY2UgYnVmZmVyICovCisJdTggKnBtc2c7CisJdTMyIHVsX2dwcF92YTsKKwl1MzIgdWxfZHNwX3ZhOworI2VuZGlmCisJLyogSU8gRHBjICovCisJdTMyIGRwY19yZXE7CQkvKiBOdW1iZXIgb2YgcmVxdWVzdGVkIERQQydzLiAqLworCXUzMiBkcGNfc2NoZWQ7CQkvKiBOdW1iZXIgb2YgZXhlY3V0ZWQgRFBDJ3MuICovCisJc3RydWN0IHRhc2tsZXRfc3RydWN0IGRwY190YXNrbGV0OworCXNwaW5sb2NrX3QgZHBjX2xvY2s7CisKK307CisKKy8qIEZ1bmN0aW9uIFByb3RvdHlwZXMgKi8KK3N0YXRpYyB2b2lkIGlvX2Rpc3BhdGNoX3BtKHN0cnVjdCBpb19tZ3IgKnBpb19tZ3IpOworc3RhdGljIHZvaWQgbm90aWZ5X2NobmxfY29tcGxldGUoc3RydWN0IGNobmxfb2JqZWN0ICpwY2hubCwKKwkJCQkgc3RydWN0IGNobmxfaXJwICpjaG5sX3BhY2tldF9vYmopOworc3RhdGljIHZvaWQgaW5wdXRfY2hubChzdHJ1Y3QgaW9fbWdyICpwaW9fbWdyLCBzdHJ1Y3QgY2hubF9vYmplY3QgKnBjaG5sLAorCQkJdTggaW9fbW9kZSk7CitzdGF0aWMgdm9pZCBvdXRwdXRfY2hubChzdHJ1Y3QgaW9fbWdyICpwaW9fbWdyLCBzdHJ1Y3QgY2hubF9vYmplY3QgKnBjaG5sLAorCQkJdTggaW9fbW9kZSk7CitzdGF0aWMgdm9pZCBpbnB1dF9tc2coc3RydWN0IGlvX21nciAqcGlvX21nciwgc3RydWN0IG1zZ19tZ3IgKmhtc2dfbWdyKTsKK3N0YXRpYyB2b2lkIG91dHB1dF9tc2coc3RydWN0IGlvX21nciAqcGlvX21nciwgc3RydWN0IG1zZ19tZ3IgKmhtc2dfbWdyKTsKK3N0YXRpYyB1MzIgZmluZF9yZWFkeV9vdXRwdXQoc3RydWN0IGNobmxfbWdyICpjaG5sX21ncl9vYmosCisJCQkgICAgIHN0cnVjdCBjaG5sX29iamVjdCAqcGNobmwsIHUzMiBtYXNrKTsKKworLyogQnVzIEFkZHIgKGNhY2hlZCBrZXJuZWwpICovCitzdGF0aWMgaW50IHJlZ2lzdGVyX3NobV9zZWdzKHN0cnVjdCBpb19tZ3IgKmhpb19tZ3IsCisJCQkJICAgIHN0cnVjdCBjb2RfbWFuYWdlciAqY29kX21hbiwKKwkJCQkgICAgdTMyIGR3X2dwcF9iYXNlX3BhKTsKKworc3RhdGljIGlubGluZSB2b2lkIHNldF9jaG5sX2ZyZWUoc3RydWN0IHNobSAqc20sIHUzMiBjaG5sKQoreworCXNtLT5ob3N0X2ZyZWVfbWFzayAmPSB+KDEgPDwgY2hubCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY2hubF9idXN5KHN0cnVjdCBzaG0gKnNtLCB1MzIgY2hubCkKK3sKKwlzbS0+aG9zdF9mcmVlX21hc2sgfD0gMSA8PCBjaG5sOworfQorCisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2lvX2NyZWF0ZSA9PT09PT09PQorICogICAgICBDcmVhdGUgYW4gSU8gbWFuYWdlciBvYmplY3QuCisgKi8KK2ludCBicmlkZ2VfaW9fY3JlYXRlKHN0cnVjdCBpb19tZ3IgKippb19tYW4sCisJCQkgICAgc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAorCQkJICAgIGNvbnN0IHN0cnVjdCBpb19hdHRycyAqbWdyX2F0dHJ0cykKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgaW9fbWdyICpwaW9fbWdyID0gTlVMTDsKKwlzdHJ1Y3Qgc2htICpzaGFyZWRfbWVtID0gTlVMTDsKKwlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpoYnJpZGdlX2NvbnRleHQgPSBOVUxMOworCXN0cnVjdCBjZmdfZGV2bm9kZSAqZGV2X25vZGVfb2JqOworCXN0cnVjdCBjaG5sX21nciAqaGNobmxfbWdyOworCXU4IGRldl90eXBlOworCisJLyogQ2hlY2sgcmVxdWlyZW1lbnRzICovCisJaWYgKCFpb19tYW4gfHwgIW1ncl9hdHRydHMgfHwgbWdyX2F0dHJ0cy0+d29yZF9zaXplID09IDApIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJZGV2X2dldF9jaG5sX21ncihoZGV2X29iaiwgJmhjaG5sX21ncik7CisJaWYgKCFoY2hubF9tZ3IgfHwgaGNobmxfbWdyLT5oaW9fbWdyKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCS8qCisJICogTWVzc2FnZSBtYW5hZ2VyIHdpbGwgYmUgY3JlYXRlZCB3aGVuIGEgZmlsZSBpcyBsb2FkZWQsIHNpbmNlCisJICogc2l6ZSBvZiBtZXNzYWdlIGJ1ZmZlciBpbiBzaGFyZWQgbWVtb3J5IGlzIGNvbmZpZ3VyYWJsZSBpbgorCSAqIHRoZSBiYXNlIGltYWdlLgorCSAqLworCWRldl9nZXRfYnJpZGdlX2NvbnRleHQoaGRldl9vYmosICZoYnJpZGdlX2NvbnRleHQpOworCWlmICghaGJyaWRnZV9jb250ZXh0KSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCWRldl9nZXRfZGV2X3R5cGUoaGRldl9vYmosICZkZXZfdHlwZSk7CisJLyoKKwkgKiBEU1Agc2hhcmVkIG1lbW9yeSBhcmVhIHdpbGwgZ2V0IHNldCBwcm9wZXJseSB3aGVuCisJICogYSBwcm9ncmFtIGlzIGxvYWRlZC4gVGhleSBhcmUgdW5rbm93biB1bnRpbCBhIENPRkYgZmlsZSBpcworCSAqIGxvYWRlZC4gSSBjaG9zZSB0aGUgdmFsdWUgLTEgYmVjYXVzZSBpdCB3YXMgbGVzcyBsaWtlbHkgdG8gYmUKKwkgKiBhIHZhbGlkIGFkZHJlc3MgdGhhbiAwLgorCSAqLworCXNoYXJlZF9tZW0gPSAoc3RydWN0IHNobSAqKS0xOworCisJLyogQWxsb2NhdGUgSU8gbWFuYWdlciBvYmplY3QgKi8KKwlwaW9fbWdyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlvX21nciksIEdGUF9LRVJORUwpOworCWlmIChwaW9fbWdyID09IE5VTEwpIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwkvKiBJbml0aWFsaXplIGNobmxfbWdyIG9iamVjdCAqLworI2lmIGRlZmluZWQoQ09ORklHX1RJRFNQQlJJREdFX0JBQ0tUUkFDRSkgfHwgZGVmaW5lZChDT05GSUdfVElEU1BCUklER0VfREVCVUcpCisJcGlvX21nci0+cG1zZyA9IE5VTEw7CisjZW5kaWYKKwlwaW9fbWdyLT5oY2hubF9tZ3IgPSBoY2hubF9tZ3I7CisJcGlvX21nci0+d29yZF9zaXplID0gbWdyX2F0dHJ0cy0+d29yZF9zaXplOworCXBpb19tZ3ItPnNoYXJlZF9tZW0gPSBzaGFyZWRfbWVtOworCisJaWYgKGRldl90eXBlID09IERTUF9VTklUKSB7CisJCS8qIENyZWF0ZSBhbiBJTyBEUEMgKi8KKwkJdGFza2xldF9pbml0KCZwaW9fbWdyLT5kcGNfdGFza2xldCwgaW9fZHBjLCAodTMyKSBwaW9fbWdyKTsKKworCQkvKiBJbml0aWFsaXplIERQQyBjb3VudGVycyAqLworCQlwaW9fbWdyLT5kcGNfcmVxID0gMDsKKwkJcGlvX21nci0+ZHBjX3NjaGVkID0gMDsKKworCQlzcGluX2xvY2tfaW5pdCgmcGlvX21nci0+ZHBjX2xvY2spOworCisJCXN0YXR1cyA9IGRldl9nZXRfZGV2X25vZGUoaGRldl9vYmosICZkZXZfbm9kZV9vYmopOworCX0KKworCWlmICghc3RhdHVzKSB7CisJCXBpb19tZ3ItPmhicmlkZ2VfY29udGV4dCA9IGhicmlkZ2VfY29udGV4dDsKKwkJcGlvX21nci0+c2hhcmVkX2lycSA9IG1ncl9hdHRydHMtPmlycV9zaGFyZWQ7CisJCWlmIChkc3Bfd2R0X2luaXQoKSkKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRUlPOworCX0KK2Z1bmNfZW5kOgorCWlmIChzdGF0dXMpIHsKKwkJLyogQ2xlYW51cCAqLworCQlicmlkZ2VfaW9fZGVzdHJveShwaW9fbWdyKTsKKwkJaWYgKGlvX21hbikKKwkJCSppb19tYW4gPSBOVUxMOworCX0gZWxzZSB7CisJCS8qIFJldHVybiBJTyBtYW5hZ2VyIG9iamVjdCB0byBjYWxsZXIuLi4gKi8KKwkJaGNobmxfbWdyLT5oaW9fbWdyID0gcGlvX21ncjsKKwkJKmlvX21hbiA9IHBpb19tZ3I7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2lvX2Rlc3Ryb3kgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEaXNhYmxlIGludGVycnVwdHMsIGRlc3Ryb3kgdGhlIElPIG1hbmFnZXIuCisgKi8KK2ludCBicmlkZ2VfaW9fZGVzdHJveShzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyKQoreworCWludCBzdGF0dXMgPSAwOworCWlmIChoaW9fbWdyKSB7CisJCS8qIEZyZWUgSU8gRFBDIG9iamVjdCAqLworCQl0YXNrbGV0X2tpbGwoJmhpb19tZ3ItPmRwY190YXNrbGV0KTsKKworI2lmIGRlZmluZWQoQ09ORklHX1RJRFNQQlJJREdFX0JBQ0tUUkFDRSkgfHwgZGVmaW5lZChDT05GSUdfVElEU1BCUklER0VfREVCVUcpCisJCWtmcmVlKGhpb19tZ3ItPnBtc2cpOworI2VuZGlmCisJCWRzcF93ZHRfZXhpdCgpOworCQkvKiBGcmVlIHRoaXMgSU8gbWFuYWdlciBvYmplY3QgKi8KKwkJa2ZyZWUoaGlvX21ncik7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGJyaWRnZV9pb19vbl9sb2FkZWQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDYWxsZWQgd2hlbiBhIG5ldyBwcm9ncmFtIGlzIGxvYWRlZCB0byBnZXQgc2hhcmVkIG1lbW9yeSBidWZmZXIKKyAqICAgICAgcGFyYW1ldGVycyBmcm9tIENPRkYgZmlsZS4gdWxTaGFyZWRCdWZmZXJCYXNlIGFuZCB1bFNoYXJlZEJ1ZmZlckxpbWl0CisgKiAgICAgIGFyZSBpbiBEU1AgYWRkcmVzcyB1bml0cy4KKyAqLworaW50IGJyaWRnZV9pb19vbl9sb2FkZWQoc3RydWN0IGlvX21nciAqaGlvX21ncikKK3sKKwlzdHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tYW47CisJc3RydWN0IGNobmxfbWdyICpoY2hubF9tZ3I7CisJc3RydWN0IG1zZ19tZ3IgKmhtc2dfbWdyOworCXUzMiB1bF9zaG1fYmFzZTsKKwl1MzIgdWxfc2htX2Jhc2Vfb2Zmc2V0OworCXUzMiB1bF9zaG1fbGltaXQ7CisJdTMyIHVsX3NobV9sZW5ndGggPSAtMTsKKwl1MzIgdWxfbWVtX2xlbmd0aCA9IC0xOworCXUzMiB1bF9tc2dfYmFzZTsKKwl1MzIgdWxfbXNnX2xpbWl0OworCXUzMiB1bF9tc2dfbGVuZ3RoID0gLTE7CisJdTMyIHVsX2V4dF9lbmQ7CisJdTMyIHVsX2dwcF9wYSA9IDA7CisJdTMyIHVsX2dwcF92YSA9IDA7CisJdTMyIHVsX2RzcF92YSA9IDA7CisJdTMyIHVsX3NlZ19zaXplID0gMDsKKwl1MzIgdWxfcGFkX3NpemUgPSAwOworCXUzMiBpOworCWludCBzdGF0dXMgPSAwOworCXU4IG51bV9wcm9jcyA9IDA7CisJczMyIG5keCA9IDA7CisJLyogRFNQIE1NVSBzZXR1cCB0YWJsZSAqLworCXN0cnVjdCBicmlkZ2VfaW9jdGxfZXh0cHJvYyBhZV9wcm9jW0JSRElPQ1RMX05VTU9GTU1VVExCXTsKKwlzdHJ1Y3QgY2ZnX2hvc3RyZXMgKmhvc3RfcmVzOworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKnBicmlkZ2VfY29udGV4dDsKKwl1MzIgbWFwX2F0dHJzOworCXUzMiBzaG0wX2VuZDsKKwl1MzIgdWxfZHluX2V4dF9iYXNlOworCXUzMiB1bF9zZWcxX3NpemUgPSAwOworCXUzMiBwYV9jdXJyID0gMDsKKwl1MzIgdmFfY3VyciA9IDA7CisJdTMyIGdwcF92YV9jdXJyID0gMDsKKwl1MzIgbnVtX2J5dGVzID0gMDsKKwl1MzIgYWxsX2JpdHMgPSAwOworCXUzMiBwYWdlX3NpemVbXSA9IHsgSFdfUEFHRV9TSVpFMTZNQiwgSFdfUEFHRV9TSVpFMU1CLAorCQlIV19QQUdFX1NJWkU2NEtCLCBIV19QQUdFX1NJWkU0S0IKKwl9OworCisJc3RhdHVzID0gZGV2X2dldF9icmlkZ2VfY29udGV4dChoaW9fbWdyLT5oZGV2X29iaiwgJnBicmlkZ2VfY29udGV4dCk7CisJaWYgKCFwYnJpZGdlX2NvbnRleHQpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwlob3N0X3JlcyA9IHBicmlkZ2VfY29udGV4dC0+cmVzb3VyY2VzOworCWlmICghaG9zdF9yZXMpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJc3RhdHVzID0gZGV2X2dldF9jb2RfbWdyKGhpb19tZ3ItPmhkZXZfb2JqLCAmY29kX21hbik7CisJaWYgKCFjb2RfbWFuKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCWhjaG5sX21nciA9IGhpb19tZ3ItPmhjaG5sX21ncjsKKwkvKiBUaGUgbWVzc2FnZSBtYW5hZ2VyIGlzIGRlc3Ryb3llZCB3aGVuIHRoZSBib2FyZCBpcyBzdG9wcGVkLiAqLworCWRldl9nZXRfbXNnX21ncihoaW9fbWdyLT5oZGV2X29iaiwgJmhpb19tZ3ItPmhtc2dfbWdyKTsKKwlobXNnX21nciA9IGhpb19tZ3ItPmhtc2dfbWdyOworCWlmICghaGNobmxfbWdyIHx8ICFobXNnX21ncikgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlpZiAoaGlvX21nci0+c2hhcmVkX21lbSkKKwkJaGlvX21nci0+c2hhcmVkX21lbSA9IE5VTEw7CisKKwkvKiBHZXQgc3RhcnQgYW5kIGxlbmd0aCBvZiBjaGFubmVsIHBhcnQgb2Ygc2hhcmVkIG1lbW9yeSAqLworCXN0YXR1cyA9IGNvZF9nZXRfc3ltX3ZhbHVlKGNvZF9tYW4sIENITkxfU0hBUkVEX0JVRkZFUl9CQVNFX1NZTSwKKwkJCQkgICAmdWxfc2htX2Jhc2UpOworCWlmIChzdGF0dXMpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJc3RhdHVzID0gY29kX2dldF9zeW1fdmFsdWUoY29kX21hbiwgQ0hOTF9TSEFSRURfQlVGRkVSX0xJTUlUX1NZTSwKKwkJCQkgICAmdWxfc2htX2xpbWl0KTsKKwlpZiAoc3RhdHVzKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCWlmICh1bF9zaG1fbGltaXQgPD0gdWxfc2htX2Jhc2UpIHsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJLyogR2V0IHRvdGFsIGxlbmd0aCBpbiBieXRlcyAqLworCXVsX3NobV9sZW5ndGggPSAodWxfc2htX2xpbWl0IC0gdWxfc2htX2Jhc2UgKyAxKSAqIGhpb19tZ3ItPndvcmRfc2l6ZTsKKwkvKiBDYWxjdWxhdGUgc2l6ZSBvZiBhIFBST0NDT1BZIHNoYXJlZCBtZW1vcnkgcmVnaW9uICovCisJZGV2X2RiZyhicmlkZ2UsICIlczogKHByb2MpcHJvY2NvcHkgc2htbWVtIHNpemU6IDB4JXggYnl0ZXNcbiIsCisJCV9fZnVuY19fLCAodWxfc2htX2xlbmd0aCAtIHNpemVvZihzdHJ1Y3Qgc2htKSkpOworCisJLyogR2V0IHN0YXJ0IGFuZCBsZW5ndGggb2YgbWVzc2FnZSBwYXJ0IG9mIHNoYXJlZCBtZW1vcnkgKi8KKwlzdGF0dXMgPSBjb2RfZ2V0X3N5bV92YWx1ZShjb2RfbWFuLCBNU0dfU0hBUkVEX0JVRkZFUl9CQVNFX1NZTSwKKwkJCQkJICAgJnVsX21zZ19iYXNlKTsKKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPSBjb2RfZ2V0X3N5bV92YWx1ZShjb2RfbWFuLCBNU0dfU0hBUkVEX0JVRkZFUl9MSU1JVF9TWU0sCisJCQkJCSAgICZ1bF9tc2dfbGltaXQpOworCQlpZiAoIXN0YXR1cykgeworCQkJaWYgKHVsX21zZ19saW1pdCA8PSB1bF9tc2dfYmFzZSkgeworCQkJCXN0YXR1cyA9IC1FSU5WQUw7CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogTGVuZ3RoIChieXRlcykgb2YgbWVzc2FnaW5nIHBhcnQgb2Ygc2hhcmVkCisJCQkJICogbWVtb3J5LgorCQkJCSAqLworCQkJCXVsX21zZ19sZW5ndGggPQorCQkJCSAgICAodWxfbXNnX2xpbWl0IC0gdWxfbXNnX2Jhc2UgKworCQkJCSAgICAgMSkgKiBoaW9fbWdyLT53b3JkX3NpemU7CisJCQkJLyoKKwkJCQkgKiBUb3RhbCBsZW5ndGggKGJ5dGVzKSBvZiBzaGFyZWQgbWVtb3J5OgorCQkJCSAqIGNobmwgKyBtc2cuCisJCQkJICovCisJCQkJdWxfbWVtX2xlbmd0aCA9IHVsX3NobV9sZW5ndGggKyB1bF9tc2dfbGVuZ3RoOworCQkJfQorCQl9IGVsc2UgeworCQkJc3RhdHVzID0gLUVGQVVMVDsKKwkJfQorCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCWlmICghc3RhdHVzKSB7CisjaWYgZGVmaW5lZChDT05GSUdfVElEU1BCUklER0VfQkFDS1RSQUNFKSB8fCBkZWZpbmVkKENPTkZJR19USURTUEJSSURHRV9ERUJVRykKKwkJc3RhdHVzID0KKwkJICAgIGNvZF9nZXRfc3ltX3ZhbHVlKGNvZF9tYW4sIERTUF9UUkFDRVNFQ19FTkQsICZzaG0wX2VuZCk7CisjZWxzZQorCQlzdGF0dXMgPSBjb2RfZ2V0X3N5bV92YWx1ZShjb2RfbWFuLCBTSE0wX1NIQVJFRF9FTkRfU1lNLAorCQkJCQkgICAmc2htMF9lbmQpOworI2VuZGlmCisJCWlmIChzdGF0dXMpCisJCQlzdGF0dXMgPSAtRUZBVUxUOworCX0KKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPQorCQkgICAgY29kX2dldF9zeW1fdmFsdWUoY29kX21hbiwgRFlORVhUQkFTRSwgJnVsX2R5bl9leHRfYmFzZSk7CisJCWlmIChzdGF0dXMpCisJCQlzdGF0dXMgPSAtRUZBVUxUOworCX0KKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPSBjb2RfZ2V0X3N5bV92YWx1ZShjb2RfbWFuLCBFWFRFTkQsICZ1bF9leHRfZW5kKTsKKwkJaWYgKHN0YXR1cykKKwkJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCWlmICghc3RhdHVzKSB7CisJCS8qIEdldCBtZW1vcnkgcmVzZXJ2ZWQgaW4gaG9zdCByZXNvdXJjZXMgKi8KKwkJKHZvaWQpbWdyX2VudW1fcHJvY2Vzc29yX2luZm8oMCwgKHN0cnVjdCBkc3BfcHJvY2Vzc29yaW5mbyAqKQorCQkJCQkgICAgICAmaGlvX21nci0+ZXh0X3Byb2NfaW5mbywKKwkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdAorCQkJCQkJICAgICBtZ3JfcHJvY2Vzc29yZXh0aW5mbyksCisJCQkJCSAgICAgICZudW1fcHJvY3MpOworCisJCS8qIFRoZSBmaXJzdCBNTVUgVExCIGVudHJ5KFRMQl8wKSBpbiBEQ0QgaXMgU2htQmFzZS4gKi8KKwkJbmR4ID0gMDsKKwkJdWxfZ3BwX3BhID0gaG9zdF9yZXMtPmR3X21lbV9waHlzWzFdOworCQl1bF9ncHBfdmEgPSBob3N0X3Jlcy0+ZHdfbWVtX2Jhc2VbMV07CisJCS8qIFRoaXMgaXMgdGhlIHZpcnR1YWwgdW5jYWNoZWQgaW9yZW1hcHBlZCBhZGRyZXNzISEhICovCisJCS8qIFdoeSBjYW4ndCB3ZSBkaXJlY3RseSB0YWtlIHRoZSBEU1BWQSBmcm9tIHRoZSBzeW1ib2xzPyAqLworCQl1bF9kc3BfdmEgPSBoaW9fbWdyLT5leHRfcHJvY19pbmZvLnR5X3RsYlswXS51bF9kc3BfdmlydDsKKwkJdWxfc2VnX3NpemUgPSAoc2htMF9lbmQgLSB1bF9kc3BfdmEpICogaGlvX21nci0+d29yZF9zaXplOworCQl1bF9zZWcxX3NpemUgPQorCQkgICAgKHVsX2V4dF9lbmQgLSB1bF9keW5fZXh0X2Jhc2UpICogaGlvX21nci0+d29yZF9zaXplOworCQkvKiA0SyBhbGlnbiAqLworCQl1bF9zZWcxX3NpemUgPSAodWxfc2VnMV9zaXplICsgMHhGRkYpICYgKH4weEZGRlVMKTsKKwkJLyogNjRLIGFsaWduICovCisJCXVsX3NlZ19zaXplID0gKHVsX3NlZ19zaXplICsgMHhGRkZGKSAmICh+MHhGRkZGVUwpOworCQl1bF9wYWRfc2l6ZSA9IFVMX1BBR0VfQUxJR05fU0laRSAtICgodWxfZ3BwX3BhICsgdWxfc2VnMV9zaXplKSAlCisJCQkJCQkgICAgVUxfUEFHRV9BTElHTl9TSVpFKTsKKwkJaWYgKHVsX3BhZF9zaXplID09IFVMX1BBR0VfQUxJR05fU0laRSkKKwkJCXVsX3BhZF9zaXplID0gMHgwOworCisJCWRldl9kYmcoYnJpZGdlLCAiJXM6IHVsX2dwcF9wYSAleCwgdWxfZ3BwX3ZhICV4LCB1bF9kc3BfdmEgJXgsICIKKwkJCSJzaG0wX2VuZCAleCwgdWxfZHluX2V4dF9iYXNlICV4LCB1bF9leHRfZW5kICV4LCAiCisJCQkidWxfc2VnX3NpemUgJXggdWxfc2VnMV9zaXplICV4IFxuIiwgX19mdW5jX18sCisJCQl1bF9ncHBfcGEsIHVsX2dwcF92YSwgdWxfZHNwX3ZhLCBzaG0wX2VuZCwKKwkJCXVsX2R5bl9leHRfYmFzZSwgdWxfZXh0X2VuZCwgdWxfc2VnX3NpemUsIHVsX3NlZzFfc2l6ZSk7CisKKwkJaWYgKCh1bF9zZWdfc2l6ZSArIHVsX3NlZzFfc2l6ZSArIHVsX3BhZF9zaXplKSA+CisJCSAgICBob3N0X3Jlcy0+ZHdfbWVtX2xlbmd0aFsxXSkgeworCQkJcHJfZXJyKCIlczogc2htIEVycm9yLCByZXNlcnZlZCAweCV4IHJlcXVpcmVkIDB4JXhcbiIsCisJCQkgICAgICAgX19mdW5jX18sIGhvc3RfcmVzLT5kd19tZW1fbGVuZ3RoWzFdLAorCQkJICAgICAgIHVsX3NlZ19zaXplICsgdWxfc2VnMV9zaXplICsgdWxfcGFkX3NpemUpOworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJfQorCX0KKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJcGFfY3VyciA9IHVsX2dwcF9wYTsKKwl2YV9jdXJyID0gdWxfZHluX2V4dF9iYXNlICogaGlvX21nci0+d29yZF9zaXplOworCWdwcF92YV9jdXJyID0gdWxfZ3BwX3ZhOworCW51bV9ieXRlcyA9IHVsX3NlZzFfc2l6ZTsKKworCS8qCisJICogVHJ5IHRvIGZpdCBpbnRvIFRMQiBlbnRyaWVzLiBJZiBub3QgcG9zc2libGUsIHB1c2ggdGhlbSB0byBwYWdlCisJICogdGFibGVzLiBJdCBpcyBxdWl0ZSBwb3NzaWJsZSB0aGF0IGlmIHNlY3Rpb25zIGFyZSBub3Qgb24KKwkgKiBiaWdnZXIgcGFnZSBib3VuZGFyeSwgd2UgbWF5IGVuZCB1cCBtYWtpbmcgc2V2ZXJhbCBzbWFsbCBwYWdlcy4KKwkgKiBTbywgcHVzaCB0aGVtIG9udG8gcGFnZSB0YWJsZXMsIGlmIHRoYXQgaXMgdGhlIGNhc2UuCisJICovCisJbWFwX2F0dHJzID0gMHgwMDAwMDAwMDsKKwltYXBfYXR0cnMgPSBEU1BfTUFQTElUVExFRU5ESUFOOworCW1hcF9hdHRycyB8PSBEU1BfTUFQUEhZU0lDQUxBRERSOworCW1hcF9hdHRycyB8PSBEU1BfTUFQRUxFTVNJWkUzMjsKKwltYXBfYXR0cnMgfD0gRFNQX01BUERPTk9UTE9DSzsKKworCXdoaWxlIChudW1fYnl0ZXMpIHsKKwkJLyoKKwkJICogVG8gZmluZCB0aGUgbWF4LiBwYWdlIHNpemUgd2l0aCB3aGljaCBib3RoIFBBICYgVkEgYXJlCisJCSAqIGFsaWduZWQuCisJCSAqLworCQlhbGxfYml0cyA9IHBhX2N1cnIgfCB2YV9jdXJyOworCQlkZXZfZGJnKGJyaWRnZSwgImFsbF9iaXRzICV4LCBwYV9jdXJyICV4LCB2YV9jdXJyICV4LCAiCisJCQkibnVtX2J5dGVzICV4XG4iLCBhbGxfYml0cywgcGFfY3VyciwgdmFfY3VyciwKKwkJCW51bV9ieXRlcyk7CisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCWlmICgobnVtX2J5dGVzID49IHBhZ2Vfc2l6ZVtpXSkgJiYgKChhbGxfYml0cyAmCisJCQkJCQkJICAgICAocGFnZV9zaXplW2ldIC0KKwkJCQkJCQkgICAgICAxKSkgPT0gMCkpIHsKKwkJCQlzdGF0dXMgPQorCQkJCSAgICBoaW9fbWdyLT5pbnRmX2Z4bnMtPgorCQkJCSAgICBwZm5fYnJkX21lbV9tYXAoaGlvX21nci0+aGJyaWRnZV9jb250ZXh0LAorCQkJCQkJICAgIHBhX2N1cnIsIHZhX2N1cnIsCisJCQkJCQkgICAgcGFnZV9zaXplW2ldLCBtYXBfYXR0cnMsCisJCQkJCQkgICAgTlVMTCk7CisJCQkJaWYgKHN0YXR1cykKKwkJCQkJZ290byBmdW5jX2VuZDsKKwkJCQlwYV9jdXJyICs9IHBhZ2Vfc2l6ZVtpXTsKKwkJCQl2YV9jdXJyICs9IHBhZ2Vfc2l6ZVtpXTsKKwkJCQlncHBfdmFfY3VyciArPSBwYWdlX3NpemVbaV07CisJCQkJbnVtX2J5dGVzIC09IHBhZ2Vfc2l6ZVtpXTsKKwkJCQkvKgorCQkJCSAqIERvbid0IHRyeSBzbWFsbGVyIHNpemVzLiBIb3BlZnVsbHkgd2UgaGF2ZQorCQkJCSAqIHJlYWNoZWQgYW4gYWRkcmVzcyBhbGlnbmVkIHRvIGEgYmlnZ2VyIHBhZ2UKKwkJCQkgKiBzaXplLgorCQkJCSAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXBhX2N1cnIgKz0gdWxfcGFkX3NpemU7CisJdmFfY3VyciArPSB1bF9wYWRfc2l6ZTsKKwlncHBfdmFfY3VyciArPSB1bF9wYWRfc2l6ZTsKKworCS8qIENvbmZpZ3VyZSB0aGUgVExCIGVudHJpZXMgZm9yIHRoZSBuZXh0IGNhY2hlYWJsZSBzZWdtZW50ICovCisJbnVtX2J5dGVzID0gdWxfc2VnX3NpemU7CisJdmFfY3VyciA9IHVsX2RzcF92YSAqIGhpb19tZ3ItPndvcmRfc2l6ZTsKKwl3aGlsZSAobnVtX2J5dGVzKSB7CisJCS8qCisJCSAqIFRvIGZpbmQgdGhlIG1heC4gcGFnZSBzaXplIHdpdGggd2hpY2ggYm90aCBQQSAmIFZBIGFyZQorCQkgKiBhbGlnbmVkLgorCQkgKi8KKwkJYWxsX2JpdHMgPSBwYV9jdXJyIHwgdmFfY3VycjsKKwkJZGV2X2RiZyhicmlkZ2UsICJhbGxfYml0cyBmb3IgU2VnMSAleCwgcGFfY3VyciAleCwgIgorCQkJInZhX2N1cnIgJXgsIG51bV9ieXRlcyAleFxuIiwgYWxsX2JpdHMsIHBhX2N1cnIsCisJCQl2YV9jdXJyLCBudW1fYnl0ZXMpOworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQlpZiAoIShudW1fYnl0ZXMgPj0gcGFnZV9zaXplW2ldKSB8fAorCQkJICAgICEoKGFsbF9iaXRzICYgKHBhZ2Vfc2l6ZVtpXSAtIDEpKSA9PSAwKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChuZHggPCBNQVhfTE9DS19UTEJfRU5UUklFUykgeworCQkJCS8qCisJCQkJICogVGhpcyBpcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyB3cml0dGVuIHRvCisJCQkJICogRFNQIE1NVS4KKwkJCQkgKi8KKwkJCQlhZV9wcm9jW25keF0udWxfZ3BwX3BhID0gcGFfY3VycjsKKwkJCQkvKgorCQkJCSAqIFRoaXMgaXMgdGhlIHZpcnR1YWwgdW5jYWNoZWQgaW9yZW1hcHBlZAorCQkJCSAqIGFkZHJlc3MhISEKKwkJCQkgKi8KKwkJCQlhZV9wcm9jW25keF0udWxfZ3BwX3ZhID0gZ3BwX3ZhX2N1cnI7CisJCQkJYWVfcHJvY1tuZHhdLnVsX2RzcF92YSA9CisJCQkJICAgIHZhX2N1cnIgLyBoaW9fbWdyLT53b3JkX3NpemU7CisJCQkJYWVfcHJvY1tuZHhdLnVsX3NpemUgPSBwYWdlX3NpemVbaV07CisJCQkJYWVfcHJvY1tuZHhdLmVuZGlhbmlzbSA9IEhXX0xJVFRMRV9FTkRJQU47CisJCQkJYWVfcHJvY1tuZHhdLmVsZW1fc2l6ZSA9IEhXX0VMRU1fU0laRTE2QklUOworCQkJCWFlX3Byb2NbbmR4XS5taXhlZF9tb2RlID0gSFdfTU1VX0NQVUVTOworCQkJCWRldl9kYmcoYnJpZGdlLCAic2htIE1NVSBUTEIgZW50cnkgUEEgJXgiCisJCQkJCSIgVkEgJXggRFNQX1ZBICV4IFNpemUgJXhcbiIsCisJCQkJCWFlX3Byb2NbbmR4XS51bF9ncHBfcGEsCisJCQkJCWFlX3Byb2NbbmR4XS51bF9ncHBfdmEsCisJCQkJCWFlX3Byb2NbbmR4XS51bF9kc3BfdmEgKgorCQkJCQloaW9fbWdyLT53b3JkX3NpemUsIHBhZ2Vfc2l6ZVtpXSk7CisJCQkJbmR4Kys7CisJCQl9IGVsc2UgeworCQkJCXN0YXR1cyA9CisJCQkJICAgIGhpb19tZ3ItPmludGZfZnhucy0+CisJCQkJICAgIHBmbl9icmRfbWVtX21hcChoaW9fbWdyLT5oYnJpZGdlX2NvbnRleHQsCisJCQkJCQkgICAgcGFfY3VyciwgdmFfY3VyciwKKwkJCQkJCSAgICBwYWdlX3NpemVbaV0sIG1hcF9hdHRycywKKwkJCQkJCSAgICBOVUxMKTsKKwkJCQlkZXZfZGJnKGJyaWRnZSwKKwkJCQkJInNobSBNTVUgUFRFIGVudHJ5IFBBICV4IgorCQkJCQkiIFZBICV4IERTUF9WQSAleCBTaXplICV4XG4iLAorCQkJCQlhZV9wcm9jW25keF0udWxfZ3BwX3BhLAorCQkJCQlhZV9wcm9jW25keF0udWxfZ3BwX3ZhLAorCQkJCQlhZV9wcm9jW25keF0udWxfZHNwX3ZhICoKKwkJCQkJaGlvX21nci0+d29yZF9zaXplLCBwYWdlX3NpemVbaV0pOworCQkJCWlmIChzdGF0dXMpCisJCQkJCWdvdG8gZnVuY19lbmQ7CisJCQl9CisJCQlwYV9jdXJyICs9IHBhZ2Vfc2l6ZVtpXTsKKwkJCXZhX2N1cnIgKz0gcGFnZV9zaXplW2ldOworCQkJZ3BwX3ZhX2N1cnIgKz0gcGFnZV9zaXplW2ldOworCQkJbnVtX2J5dGVzIC09IHBhZ2Vfc2l6ZVtpXTsKKwkJCS8qCisJCQkgKiBEb24ndCB0cnkgc21hbGxlciBzaXplcy4gSG9wZWZ1bGx5IHdlIGhhdmUgcmVhY2hlZAorCQkJICogYW4gYWRkcmVzcyBhbGlnbmVkIHRvIGEgYmlnZ2VyIHBhZ2Ugc2l6ZS4KKwkJCSAqLworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKgorCSAqIENvcHkgcmVtYWluaW5nIGVudHJpZXMgZnJvbSBDREIuIEFsbCBlbnRyaWVzIGFyZSAxIE1CIGFuZAorCSAqIHNob3VsZCBub3QgY29uZmxpY3Qgd2l0aCBzaG0gZW50cmllcyBvbiBNUFUgb3IgRFNQIHNpZGUuCisJICovCisJZm9yIChpID0gMzsgaSA8IDcgJiYgbmR4IDwgQlJESU9DVExfTlVNT0ZNTVVUTEI7IGkrKykgeworCQlpZiAoaGlvX21nci0+ZXh0X3Byb2NfaW5mby50eV90bGJbaV0udWxfZ3BwX3BoeXMgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoaGlvX21nci0+ZXh0X3Byb2NfaW5mby50eV90bGJbaV0udWxfZ3BwX3BoeXMgPgorCQkgICAgIHVsX2dwcF9wYSAtIDB4MTAwMDAwCisJCSAgICAgJiYgaGlvX21nci0+ZXh0X3Byb2NfaW5mby50eV90bGJbaV0udWxfZ3BwX3BoeXMgPD0KKwkJICAgICB1bF9ncHBfcGEgKyB1bF9zZWdfc2l6ZSkKKwkJICAgIHx8IChoaW9fbWdyLT5leHRfcHJvY19pbmZvLnR5X3RsYltpXS51bF9kc3BfdmlydCA+CisJCQl1bF9kc3BfdmEgLSAweDEwMDAwMCAvIGhpb19tZ3ItPndvcmRfc2l6ZQorCQkJJiYgaGlvX21nci0+ZXh0X3Byb2NfaW5mby50eV90bGJbaV0udWxfZHNwX3ZpcnQgPD0KKwkJCXVsX2RzcF92YSArIHVsX3NlZ19zaXplIC8gaGlvX21nci0+d29yZF9zaXplKSkgeworCQkJZGV2X2RiZyhicmlkZ2UsCisJCQkJIkNEQiBNTVUgZW50cnkgJWQgY29uZmxpY3RzIHdpdGggIgorCQkJCSJzaG0uXG5cdENEQjogR3BwUGEgJXgsIERzcFZhICV4LlxuXHRTSE06ICIKKwkJCQkiR3BwUGEgJXgsIERzcFZhICV4LCBCeXRlcyAleC5cbiIsIGksCisJCQkJaGlvX21nci0+ZXh0X3Byb2NfaW5mby50eV90bGJbaV0udWxfZ3BwX3BoeXMsCisJCQkJaGlvX21nci0+ZXh0X3Byb2NfaW5mby50eV90bGJbaV0udWxfZHNwX3ZpcnQsCisJCQkJdWxfZ3BwX3BhLCB1bF9kc3BfdmEsIHVsX3NlZ19zaXplKTsKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJfSBlbHNlIHsKKwkJCWlmIChuZHggPCBNQVhfTE9DS19UTEJfRU5UUklFUykgeworCQkJCWFlX3Byb2NbbmR4XS51bF9kc3BfdmEgPQorCQkJCSAgICBoaW9fbWdyLT5leHRfcHJvY19pbmZvLnR5X3RsYltpXS4KKwkJCQkgICAgdWxfZHNwX3ZpcnQ7CisJCQkJYWVfcHJvY1tuZHhdLnVsX2dwcF9wYSA9CisJCQkJICAgIGhpb19tZ3ItPmV4dF9wcm9jX2luZm8udHlfdGxiW2ldLgorCQkJCSAgICB1bF9ncHBfcGh5czsKKwkJCQlhZV9wcm9jW25keF0udWxfZ3BwX3ZhID0gMDsKKwkJCQkvKiAxIE1CICovCisJCQkJYWVfcHJvY1tuZHhdLnVsX3NpemUgPSAweDEwMDAwMDsKKwkJCQlkZXZfZGJnKGJyaWRnZSwgInNobSBNTVUgZW50cnkgUEEgJXggIgorCQkJCQkiRFNQX1ZBIDB4JXhcbiIsIGFlX3Byb2NbbmR4XS51bF9ncHBfcGEsCisJCQkJCWFlX3Byb2NbbmR4XS51bF9kc3BfdmEpOworCQkJCW5keCsrOworCQkJfSBlbHNlIHsKKwkJCQlzdGF0dXMgPSBoaW9fbWdyLT5pbnRmX2Z4bnMtPnBmbl9icmRfbWVtX21hcAorCQkJCSAgICAoaGlvX21nci0+aGJyaWRnZV9jb250ZXh0LAorCQkJCSAgICAgaGlvX21nci0+ZXh0X3Byb2NfaW5mby50eV90bGJbaV0uCisJCQkJICAgICB1bF9ncHBfcGh5cywKKwkJCQkgICAgIGhpb19tZ3ItPmV4dF9wcm9jX2luZm8udHlfdGxiW2ldLgorCQkJCSAgICAgdWxfZHNwX3ZpcnQsIDB4MTAwMDAwLCBtYXBfYXR0cnMsCisJCQkJICAgICBOVUxMKTsKKwkJCX0KKwkJfQorCQlpZiAoc3RhdHVzKQorCQkJZ290byBmdW5jX2VuZDsKKwl9CisKKwltYXBfYXR0cnMgPSAweDAwMDAwMDAwOworCW1hcF9hdHRycyA9IERTUF9NQVBMSVRUTEVFTkRJQU47CisJbWFwX2F0dHJzIHw9IERTUF9NQVBQSFlTSUNBTEFERFI7CisJbWFwX2F0dHJzIHw9IERTUF9NQVBFTEVNU0laRTMyOworCW1hcF9hdHRycyB8PSBEU1BfTUFQRE9OT1RMT0NLOworCisJLyogTWFwIHRoZSBMNCBwZXJpcGhlcmFscyAqLworCWkgPSAwOworCXdoaWxlIChsNF9wZXJpcGhlcmFsX3RhYmxlW2ldLnBoeXNfYWRkcikgeworCQlzdGF0dXMgPSBoaW9fbWdyLT5pbnRmX2Z4bnMtPnBmbl9icmRfbWVtX21hcAorCQkgICAgKGhpb19tZ3ItPmhicmlkZ2VfY29udGV4dCwgbDRfcGVyaXBoZXJhbF90YWJsZVtpXS5waHlzX2FkZHIsCisJCSAgICAgbDRfcGVyaXBoZXJhbF90YWJsZVtpXS5kc3BfdmlydF9hZGRyLCBIV19QQUdFX1NJWkU0S0IsCisJCSAgICAgbWFwX2F0dHJzLCBOVUxMKTsKKwkJaWYgKHN0YXR1cykKKwkJCWdvdG8gZnVuY19lbmQ7CisJCWkrKzsKKwl9CisKKwlmb3IgKGkgPSBuZHg7IGkgPCBCUkRJT0NUTF9OVU1PRk1NVVRMQjsgaSsrKSB7CisJCWFlX3Byb2NbaV0udWxfZHNwX3ZhID0gMDsKKwkJYWVfcHJvY1tpXS51bF9ncHBfcGEgPSAwOworCQlhZV9wcm9jW2ldLnVsX2dwcF92YSA9IDA7CisJCWFlX3Byb2NbaV0udWxfc2l6ZSA9IDA7CisJfQorCS8qCisJICogU2V0IHRoZSBzaG0gcGh5c2ljYWwgYWRkcmVzcyBlbnRyeSAoZ3JheWVkIG91dCBpbiBDREIgZmlsZSkKKwkgKiB0byB0aGUgdmlydHVhbCB1bmNhY2hlZCBpb3JlbWFwcGVkIGFkZHJlc3Mgb2Ygc2htIHJlc2VydmVkCisJICogb24gTVBVLgorCSAqLworCWhpb19tZ3ItPmV4dF9wcm9jX2luZm8udHlfdGxiWzBdLnVsX2dwcF9waHlzID0KKwkgICAgKHVsX2dwcF92YSArIHVsX3NlZzFfc2l6ZSArIHVsX3BhZF9zaXplKTsKKworCS8qCisJICogTmVlZCBzaG0gUGh5cyBhZGRyLiBJTyBzdXBwb3J0cyBvbmx5IG9uZSBEU1AgZm9yIG5vdzoKKwkgKiBudW1fcHJvY3MgPSAxLgorCSAqLworCWlmICghaGlvX21nci0+ZXh0X3Byb2NfaW5mby50eV90bGJbMF0udWxfZ3BwX3BoeXMgfHwgbnVtX3Byb2NzICE9IDEpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9IGVsc2UgeworCQlpZiAoYWVfcHJvY1swXS51bF9kc3BfdmEgPiB1bF9zaG1fYmFzZSkgeworCQkJc3RhdHVzID0gLUVQRVJNOworCQkJZ290byBmdW5jX2VuZDsKKwkJfQorCQkvKiB1bF9zaG1fYmFzZSBtYXkgbm90IGJlIGF0IHVsX2RzcF92YSBhZGRyZXNzICovCisJCXVsX3NobV9iYXNlX29mZnNldCA9ICh1bF9zaG1fYmFzZSAtIGFlX3Byb2NbMF0udWxfZHNwX3ZhKSAqCisJCSAgICBoaW9fbWdyLT53b3JkX3NpemU7CisJCS8qCisJCSAqIGJyaWRnZV9kZXZfY3RybCgpIHdpbGwgc2V0IGRldiBjb250ZXh0IGRzcC1tbXUgaW5mby4gSW4KKwkJICogYnJpZGdlX2JyZF9zdGFydCgpIHRoZSBNTVUgd2lsbCBiZSByZS1wcm9ncmFtZWQgd2l0aCBNTVUKKwkJICogRFNQVmEtR1BQUGEgcGFpciBpbmZvIHdoaWxlIERTUCBpcyBpbiBhIGtub3duCisJCSAqIChyZXNldCkgc3RhdGUuCisJCSAqLworCisJCXN0YXR1cyA9CisJCSAgICBoaW9fbWdyLT5pbnRmX2Z4bnMtPnBmbl9kZXZfY250cmwoaGlvX21nci0+aGJyaWRnZV9jb250ZXh0LAorCQkJCQkJICAgICAgQlJESU9DVExfU0VUTU1VQ09ORklHLAorCQkJCQkJICAgICAgYWVfcHJvYyk7CisJCWlmIChzdGF0dXMpCisJCQlnb3RvIGZ1bmNfZW5kOworCQl1bF9zaG1fYmFzZSA9IGhpb19tZ3ItPmV4dF9wcm9jX2luZm8udHlfdGxiWzBdLnVsX2dwcF9waHlzOworCQl1bF9zaG1fYmFzZSArPSB1bF9zaG1fYmFzZV9vZmZzZXQ7CisJCXVsX3NobV9iYXNlID0gKHUzMikgTUVNX0xJTkVBUl9BRERSRVNTKCh2b2lkICopdWxfc2htX2Jhc2UsCisJCQkJCQkgICAgICAgdWxfbWVtX2xlbmd0aCk7CisJCWlmICh1bF9zaG1fYmFzZSA9PSAwKSB7CisJCQlzdGF0dXMgPSAtRUZBVUxUOworCQkJZ290byBmdW5jX2VuZDsKKwkJfQorCQkvKiBSZWdpc3RlciBTTSAqLworCQlzdGF0dXMgPQorCQkgICAgcmVnaXN0ZXJfc2htX3NlZ3MoaGlvX21nciwgY29kX21hbiwgYWVfcHJvY1swXS51bF9ncHBfcGEpOworCX0KKworCWhpb19tZ3ItPnNoYXJlZF9tZW0gPSAoc3RydWN0IHNobSAqKXVsX3NobV9iYXNlOworCWhpb19tZ3ItPmlucHV0ID0gKHU4ICopIGhpb19tZ3ItPnNoYXJlZF9tZW0gKyBzaXplb2Yoc3RydWN0IHNobSk7CisJaGlvX21nci0+b3V0cHV0ID0gaGlvX21nci0+aW5wdXQgKyAodWxfc2htX2xlbmd0aCAtCisJCQkJCSAgICBzaXplb2Yoc3RydWN0IHNobSkpIC8gMjsKKwloaW9fbWdyLT51c21fYnVmX3NpemUgPSBoaW9fbWdyLT5vdXRwdXQgLSBoaW9fbWdyLT5pbnB1dDsKKworCS8qICBTZXQgdXAgU2hhcmVkIG1lbW9yeSBhZGRyZXNzZXMgZm9yIG1lc3NhZ2luZy4gKi8KKwloaW9fbWdyLT5tc2dfaW5wdXRfY3RybCA9IChzdHJ1Y3QgbXNnX2N0cmwgKikoKHU4ICopIGhpb19tZ3ItPnNoYXJlZF9tZW0KKwkJCQkJCSAgICAgICsgdWxfc2htX2xlbmd0aCk7CisJaGlvX21nci0+bXNnX2lucHV0ID0KKwkgICAgKHU4ICopIGhpb19tZ3ItPm1zZ19pbnB1dF9jdHJsICsgc2l6ZW9mKHN0cnVjdCBtc2dfY3RybCk7CisJaGlvX21nci0+bXNnX291dHB1dF9jdHJsID0KKwkgICAgKHN0cnVjdCBtc2dfY3RybCAqKSgodTggKikgaGlvX21nci0+bXNnX2lucHV0X2N0cmwgKworCQkJCXVsX21zZ19sZW5ndGggLyAyKTsKKwloaW9fbWdyLT5tc2dfb3V0cHV0ID0KKwkgICAgKHU4ICopIGhpb19tZ3ItPm1zZ19vdXRwdXRfY3RybCArIHNpemVvZihzdHJ1Y3QgbXNnX2N0cmwpOworCWhtc2dfbWdyLT5tYXhfbXNncyA9CisJICAgICgodTggKikgaGlvX21nci0+bXNnX291dHB1dF9jdHJsIC0gaGlvX21nci0+bXNnX2lucHV0KQorCSAgICAvIHNpemVvZihzdHJ1Y3QgbXNnX2RzcG1zZyk7CisJZGV2X2RiZyhicmlkZ2UsICJJTyBNR1Igc2htIGRldGFpbHM6IHNoYXJlZF9tZW0gJXAsIGlucHV0ICVwLCAiCisJCSJvdXRwdXQgJXAsIG1zZ19pbnB1dF9jdHJsICVwLCBtc2dfaW5wdXQgJXAsICIKKwkJIm1zZ19vdXRwdXRfY3RybCAlcCwgbXNnX291dHB1dCAlcFxuIiwKKwkJKHU4ICopIGhpb19tZ3ItPnNoYXJlZF9tZW0sIGhpb19tZ3ItPmlucHV0LAorCQloaW9fbWdyLT5vdXRwdXQsICh1OCAqKSBoaW9fbWdyLT5tc2dfaW5wdXRfY3RybCwKKwkJaGlvX21nci0+bXNnX2lucHV0LCAodTggKikgaGlvX21nci0+bXNnX291dHB1dF9jdHJsLAorCQloaW9fbWdyLT5tc2dfb3V0cHV0KTsKKwlkZXZfZGJnKGJyaWRnZSwgIihwcm9jKSBNYXMgbXNncyBpbiBzaGFyZWQgbWVtb3J5OiAweCV4XG4iLAorCQlobXNnX21nci0+bWF4X21zZ3MpOworCW1lbXNldCgodm9pZCAqKWhpb19tZ3ItPnNoYXJlZF9tZW0sIDAsIHNpemVvZihzdHJ1Y3Qgc2htKSk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19USURTUEJSSURHRV9CQUNLVFJBQ0UpIHx8IGRlZmluZWQoQ09ORklHX1RJRFNQQlJJREdFX0RFQlVHKQorCS8qIEdldCB0aGUgc3RhcnQgYWRkcmVzcyBvZiB0cmFjZSBidWZmZXIgKi8KKwlzdGF0dXMgPSBjb2RfZ2V0X3N5bV92YWx1ZShjb2RfbWFuLCBTWVNfUFVUQ0JFRywKKwkJCQkgICAmaGlvX21nci0+dWxfdHJhY2VfYnVmZmVyX2JlZ2luKTsKKwlpZiAoc3RhdHVzKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCisJaGlvX21nci0+dWxfZ3BwX3JlYWRfcG9pbnRlciA9IGhpb19tZ3ItPnVsX3RyYWNlX2J1ZmZlcl9iZWdpbiA9CisJICAgICh1bF9ncHBfdmEgKyB1bF9zZWcxX3NpemUgKyB1bF9wYWRfc2l6ZSkgKworCSAgICAoaGlvX21nci0+dWxfdHJhY2VfYnVmZmVyX2JlZ2luIC0gdWxfZHNwX3ZhKTsKKwkvKiBHZXQgdGhlIGVuZCBhZGRyZXNzIG9mIHRyYWNlIGJ1ZmZlciAqLworCXN0YXR1cyA9IGNvZF9nZXRfc3ltX3ZhbHVlKGNvZF9tYW4sIFNZU19QVVRDRU5ELAorCQkJCSAgICZoaW9fbWdyLT51bF90cmFjZV9idWZmZXJfZW5kKTsKKwlpZiAoc3RhdHVzKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCWhpb19tZ3ItPnVsX3RyYWNlX2J1ZmZlcl9lbmQgPQorCSAgICAodWxfZ3BwX3ZhICsgdWxfc2VnMV9zaXplICsgdWxfcGFkX3NpemUpICsKKwkgICAgKGhpb19tZ3ItPnVsX3RyYWNlX2J1ZmZlcl9lbmQgLSB1bF9kc3BfdmEpOworCS8qIEdldCB0aGUgY3VycmVudCBhZGRyZXNzIG9mIERTUCB3cml0ZSBwb2ludGVyICovCisJc3RhdHVzID0gY29kX2dldF9zeW1fdmFsdWUoY29kX21hbiwgQlJJREdFX1NZU19QVVRDX0NVUlJFTlQsCisJCQkJICAgJmhpb19tZ3ItPnVsX3RyYWNlX2J1ZmZlcl9jdXJyZW50KTsKKwlpZiAoc3RhdHVzKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCWhpb19tZ3ItPnVsX3RyYWNlX2J1ZmZlcl9jdXJyZW50ID0KKwkgICAgKHVsX2dwcF92YSArIHVsX3NlZzFfc2l6ZSArIHVsX3BhZF9zaXplKSArCisJICAgIChoaW9fbWdyLT51bF90cmFjZV9idWZmZXJfY3VycmVudCAtIHVsX2RzcF92YSk7CisJLyogQ2FsY3VsYXRlIHRoZSBzaXplIG9mIHRyYWNlIGJ1ZmZlciAqLworCWtmcmVlKGhpb19tZ3ItPnBtc2cpOworCWhpb19tZ3ItPnBtc2cgPSBrbWFsbG9jKCgoaGlvX21nci0+dWxfdHJhY2VfYnVmZmVyX2VuZCAtCisJCQkJaGlvX21nci0+dWxfdHJhY2VfYnVmZmVyX2JlZ2luKSAqCisJCQkJaGlvX21nci0+d29yZF9zaXplKSArIDIsIEdGUF9LRVJORUwpOworCWlmICghaGlvX21nci0+cG1zZykKKwkJc3RhdHVzID0gLUVOT01FTTsKKworCWhpb19tZ3ItPnVsX2RzcF92YSA9IHVsX2RzcF92YTsKKwloaW9fbWdyLT51bF9ncHBfdmEgPSAodWxfZ3BwX3ZhICsgdWxfc2VnMV9zaXplICsgdWxfcGFkX3NpemUpOworCisjZW5kaWYKK2Z1bmNfZW5kOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gaW9fYnVmX3NpemUgPT09PT09PT0KKyAqICAgICAgU2l6ZSBvZiBzaGFyZWQgbWVtb3J5IEkvTyBjaGFubmVsLgorICovCit1MzIgaW9fYnVmX3NpemUoc3RydWN0IGlvX21nciAqaGlvX21ncikKK3sKKwlpZiAoaGlvX21ncikKKwkJcmV0dXJuIGhpb19tZ3ItPnVzbV9idWZfc2l6ZTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisvKgorICogID09PT09PT09IGlvX2NhbmNlbF9jaG5sID09PT09PT09CisgKiAgICAgIENhbmNlbCBJTyBvbiBhIGdpdmVuIFBDUFkgY2hhbm5lbC4KKyAqLwordm9pZCBpb19jYW5jZWxfY2hubChzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyLCB1MzIgY2hubCkKK3sKKwlzdHJ1Y3QgaW9fbWdyICpwaW9fbWdyID0gKHN0cnVjdCBpb19tZ3IgKiloaW9fbWdyOworCXN0cnVjdCBzaG0gKnNtOworCisJaWYgKCFoaW9fbWdyKQorCQlnb3RvIGZ1bmNfZW5kOworCXNtID0gaGlvX21nci0+c2hhcmVkX21lbTsKKworCS8qIEluZm9ybSBEU1AgdGhhdCB3ZSBoYXZlIG5vIG1vcmUgYnVmZmVycyBvbiB0aGlzIGNoYW5uZWwgKi8KKwlzZXRfY2hubF9mcmVlKHNtLCBjaG5sKTsKKworCXNtX2ludGVycnVwdF9kc3AocGlvX21nci0+aGJyaWRnZV9jb250ZXh0LCBNQlhfUENQWV9DTEFTUyk7CitmdW5jX2VuZDoKKwlyZXR1cm47Cit9CisKKworLyoKKyAqICA9PT09PT09PSBpb19kaXNwYXRjaF9wbSA9PT09PT09PQorICogICAgICBQZXJmb3JtcyBJL08gZGlzcGF0Y2ggb24gUE0gcmVsYXRlZCBtZXNzYWdlcyBmcm9tIERTUAorICovCitzdGF0aWMgdm9pZCBpb19kaXNwYXRjaF9wbShzdHJ1Y3QgaW9fbWdyICpwaW9fbWdyKQoreworCWludCBzdGF0dXM7CisJdTMyIHBhcmdbMl07CisKKwkvKiBQZXJmb3JtIFBvd2VyIG1lc3NhZ2UgcHJvY2Vzc2luZyBoZXJlICovCisJcGFyZ1swXSA9IHBpb19tZ3ItPmludHJfdmFsOworCisJLyogU2VuZCB0aGUgY29tbWFuZCB0byB0aGUgQnJpZGdlIGNsay9wd3IgbWFuYWdlciB0byBoYW5kbGUgKi8KKwlpZiAocGFyZ1swXSA9PSBNQlhfUE1fSElCRVJOQVRFX0VOKSB7CisJCWRldl9kYmcoYnJpZGdlLCAiUE06IEhpYmVybmF0ZSBjb21tYW5kXG4iKTsKKwkJc3RhdHVzID0gcGlvX21nci0+aW50Zl9meG5zLT4KKwkJCQlwZm5fZGV2X2NudHJsKHBpb19tZ3ItPmhicmlkZ2VfY29udGV4dCwKKwkJCQkJICAgICAgQlJESU9DVExfUFdSX0hJQkVSTkFURSwgcGFyZyk7CisJCWlmIChzdGF0dXMpCisJCQlwcl9lcnIoIiVzOiBoaWJlcm5hdGUgY21kIGZhaWxlZCAweCV4XG4iLAorCQkJCSAgICAgICBfX2Z1bmNfXywgc3RhdHVzKTsKKwl9IGVsc2UgaWYgKHBhcmdbMF0gPT0gTUJYX1BNX09QUF9SRVEpIHsKKwkJcGFyZ1sxXSA9IHBpb19tZ3ItPnNoYXJlZF9tZW0tPm9wcF9yZXF1ZXN0LnJxc3Rfb3BwX3B0OworCQlkZXZfZGJnKGJyaWRnZSwgIlBNOiBSZXF1ZXN0ZWQgT1BQID0gMHgleFxuIiwgcGFyZ1sxXSk7CisJCXN0YXR1cyA9IHBpb19tZ3ItPmludGZfZnhucy0+CisJCQkJcGZuX2Rldl9jbnRybChwaW9fbWdyLT5oYnJpZGdlX2NvbnRleHQsCisJCQkJCUJSRElPQ1RMX0NPTlNUUkFJTlRfUkVRVUVTVCwgcGFyZyk7CisJCWlmIChzdGF0dXMpCisJCQlkZXZfZGJnKGJyaWRnZSwgIlBNOiBGYWlsZWQgdG8gc2V0IGNvbnN0cmFpbnQgIgorCQkJCSI9IDB4JXhcbiIsIHBhcmdbMV0pOworCX0gZWxzZSB7CisJCWRldl9kYmcoYnJpZGdlLCAiUE06IGNsayBjb250cm9sIHZhbHVlIG9mIG1zZyA9IDB4JXhcbiIsCisJCQlwYXJnWzBdKTsKKwkJc3RhdHVzID0gcGlvX21nci0+aW50Zl9meG5zLT4KKwkJCQlwZm5fZGV2X2NudHJsKHBpb19tZ3ItPmhicmlkZ2VfY29udGV4dCwKKwkJCQkJICAgICAgQlJESU9DVExfQ0xLX0NUUkwsIHBhcmcpOworCQlpZiAoc3RhdHVzKQorCQkJZGV2X2RiZyhicmlkZ2UsICJQTTogRmFpbGVkIHRvIGN0cmwgdGhlIERTUCBjbGsiCisJCQkJIj0gMHgleFxuIiwgKnBhcmcpOworCX0KK30KKworLyoKKyAqICA9PT09PT09PSBpb19kcGMgPT09PT09PT0KKyAqICAgICAgRGVmZXJyZWQgcHJvY2VkdXJlIGNhbGwgZm9yIHNoYXJlZCBtZW1vcnkgY2hhbm5lbCBkcml2ZXIgSVNSLiAgQ2FycmllcworICogICAgICBvdXQgdGhlIGRpc3BhdGNoIG9mIEkvTyBhcyBhIG5vbi1wcmVlbXB0aWJsZSBldmVudC5JdCBjYW4gb25seSBiZQorICogICAgICBwcmUtZW1wdGVkICAgICAgYnkgYW4gSVNSLgorICovCit2b2lkIGlvX2RwYyh1bnNpZ25lZCBsb25nIHJlZl9kYXRhKQoreworCXN0cnVjdCBpb19tZ3IgKnBpb19tZ3IgPSAoc3RydWN0IGlvX21nciAqKXJlZl9kYXRhOworCXN0cnVjdCBjaG5sX21nciAqY2hubF9tZ3Jfb2JqOworCXN0cnVjdCBtc2dfbWdyICptc2dfbWdyX29iajsKKwlzdHJ1Y3QgZGVoX21nciAqaGRlaF9tZ3I7CisJdTMyIHJlcXVlc3RlZDsKKwl1MzIgc2VydmljZWQ7CisKKwlpZiAoIXBpb19tZ3IpCisJCWdvdG8gZnVuY19lbmQ7CisJY2hubF9tZ3Jfb2JqID0gcGlvX21nci0+aGNobmxfbWdyOworCWRldl9nZXRfbXNnX21ncihwaW9fbWdyLT5oZGV2X29iaiwgJm1zZ19tZ3Jfb2JqKTsKKwlkZXZfZ2V0X2RlaF9tZ3IocGlvX21nci0+aGRldl9vYmosICZoZGVoX21ncik7CisJaWYgKCFjaG5sX21ncl9vYmopCisJCWdvdG8gZnVuY19lbmQ7CisKKwlyZXF1ZXN0ZWQgPSBwaW9fbWdyLT5kcGNfcmVxOworCXNlcnZpY2VkID0gcGlvX21nci0+ZHBjX3NjaGVkOworCisJaWYgKHNlcnZpY2VkID09IHJlcXVlc3RlZCkKKwkJZ290byBmdW5jX2VuZDsKKworCS8qIFByb2Nlc3MgcGVuZGluZyBEUEMncyAqLworCWRvIHsKKwkJLyogQ2hlY2sgdmFsdWUgb2YgaW50ZXJydXB0IHJlZyB0byBlbnN1cmUgaXQncyBhIHZhbGlkIGVycm9yICovCisJCWlmICgocGlvX21nci0+aW50cl92YWwgPiBERUhfQkFTRSkgJiYKKwkJICAgIChwaW9fbWdyLT5pbnRyX3ZhbCA8IERFSF9MSU1JVCkpIHsKKwkJCS8qIE5vdGlmeSBEU1AvQklPUyBleGNlcHRpb24gKi8KKwkJCWlmIChoZGVoX21ncikgeworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9CQUNLVFJBQ0UKKwkJCQlwcmludF9kc3BfZGVidWdfdHJhY2UocGlvX21ncik7CisjZW5kaWYKKwkJCQlicmlkZ2VfZGVoX25vdGlmeShoZGVoX21nciwgRFNQX1NZU0VSUk9SLAorCQkJCQkJICBwaW9fbWdyLT5pbnRyX3ZhbCk7CisJCQl9CisJCX0KKwkJLyogUHJvYy1jb3B5IGNoYW5lbCBkaXNwYXRjaCAqLworCQlpbnB1dF9jaG5sKHBpb19tZ3IsIE5VTEwsIElPX1NFUlZJQ0UpOworCQlvdXRwdXRfY2hubChwaW9fbWdyLCBOVUxMLCBJT19TRVJWSUNFKTsKKworI2lmZGVmIENITkxfTUVTU0FHRVMKKwkJaWYgKG1zZ19tZ3Jfb2JqKSB7CisJCQkvKiBQZXJmb3JtIEkvTyBkaXNwYXRjaCBvbiBtZXNzYWdlIHF1ZXVlcyAqLworCQkJaW5wdXRfbXNnKHBpb19tZ3IsIG1zZ19tZ3Jfb2JqKTsKKwkJCW91dHB1dF9tc2cocGlvX21nciwgbXNnX21ncl9vYmopOworCQl9CisKKyNlbmRpZgorI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9ERUJVRworCQlpZiAocGlvX21nci0+aW50cl92YWwgJiBNQlhfREJHX1NZU1BSSU5URikgeworCQkJLyogTm90aWZ5IERTUCBUcmFjZSBtZXNzYWdlICovCisJCQlwcmludF9kc3BfZGVidWdfdHJhY2UocGlvX21ncik7CisJCX0KKyNlbmRpZgorCQlzZXJ2aWNlZCsrOworCX0gd2hpbGUgKHNlcnZpY2VkICE9IHJlcXVlc3RlZCk7CisJcGlvX21nci0+ZHBjX3NjaGVkID0gcmVxdWVzdGVkOworZnVuY19lbmQ6CisJcmV0dXJuOworfQorCisvKgorICogID09PT09PT09IGlvX21ib3hfbXNnID09PT09PT09CisgKiAgICAgIE1haW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBzaGFyZWQgbWVtb3J5IElPIG1hbmFnZXIuCisgKiAgICAgIENhbGxzIHRoZSBCcmlkZ2UncyBDSE5MX0lTUiB0byBkZXRlcm1pbmUgaWYgdGhpcyBpbnRlcnJ1cHQgaXMgb3VycywgdGhlbgorICogICAgICBzY2hlZHVsZXMgYSBEUEMgdG8gZGlzcGF0Y2ggSS9PLgorICovCit2b2lkIGlvX21ib3hfbXNnKHUzMiBtc2cpCit7CisJc3RydWN0IGlvX21nciAqcGlvX21ncjsKKwlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iajsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGV2X29iaiA9IGRldl9nZXRfZmlyc3QoKTsKKwlkZXZfZ2V0X2lvX21ncihkZXZfb2JqLCAmcGlvX21ncik7CisKKwlpZiAoIXBpb19tZ3IpCisJCXJldHVybjsKKworCXBpb19tZ3ItPmludHJfdmFsID0gKHUxNiltc2c7CisJaWYgKHBpb19tZ3ItPmludHJfdmFsICYgTUJYX1BNX0NMQVNTKQorCQlpb19kaXNwYXRjaF9wbShwaW9fbWdyKTsKKworCWlmIChwaW9fbWdyLT5pbnRyX3ZhbCA9PSBNQlhfREVIX1JFU0VUKSB7CisJCXBpb19tZ3ItPmludHJfdmFsID0gMDsKKwl9IGVsc2UgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGlvX21nci0+ZHBjX2xvY2ssIGZsYWdzKTsKKwkJcGlvX21nci0+ZHBjX3JlcSsrOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaW9fbWdyLT5kcGNfbG9jaywgZmxhZ3MpOworCQl0YXNrbGV0X3NjaGVkdWxlKCZwaW9fbWdyLT5kcGNfdGFza2xldCk7CisJfQorCXJldHVybjsKK30KKworLyoKKyAqICA9PT09PT09PSBpb19yZXF1ZXN0X2NobmwgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXF1ZXN0IGNoYW5lbmVsIEkvTyBmcm9tIHRoZSBEU1AuIFNldHMgZmxhZ3MgaW4gc2hhcmVkIG1lbW9yeSwgdGhlbgorICogICAgICBpbnRlcnJ1cHRzIHRoZSBEU1AuCisgKi8KK3ZvaWQgaW9fcmVxdWVzdF9jaG5sKHN0cnVjdCBpb19tZ3IgKmlvX21hbmFnZXIsIHN0cnVjdCBjaG5sX29iamVjdCAqcGNobmwsCisJCQl1OCBpb19tb2RlLCB1MTYgKm1ieF92YWwpCit7CisJc3RydWN0IGNobmxfbWdyICpjaG5sX21ncl9vYmo7CisJc3RydWN0IHNobSAqc207CisKKwlpZiAoIXBjaG5sIHx8ICFtYnhfdmFsKQorCQlnb3RvIGZ1bmNfZW5kOworCWNobmxfbWdyX29iaiA9IGlvX21hbmFnZXItPmhjaG5sX21ncjsKKwlzbSA9IGlvX21hbmFnZXItPnNoYXJlZF9tZW07CisJaWYgKGlvX21vZGUgPT0gSU9fSU5QVVQpIHsKKwkJLyoKKwkJICogQXNzZXJ0aW9uIGZpcmVzIGlmIENITkxfQWRkSU9SZXEoKSBjYWxsZWQgb24gYSBzdHJlYW0KKwkJICogd2hpY2ggd2FzIGNhbmNlbGxlZCwgb3IgYXR0YWNoZWQgdG8gYSBkZWFkIGJvYXJkLgorCQkgKi8KKwkJREJDX0FTU0VSVCgocGNobmwtPmR3X3N0YXRlID09IENITkxfU1RBVEVSRUFEWSkgfHwKKwkJCSAgIChwY2hubC0+ZHdfc3RhdGUgPT0gQ0hOTF9TVEFURUVPUykpOworCQkvKiBJbmRpY2F0ZSB0byB0aGUgRFNQIHdlIGhhdmUgYSBidWZmZXIgYXZhaWxhYmxlIGZvciBpbnB1dCAqLworCQlzZXRfY2hubF9idXN5KHNtLCBwY2hubC0+Y2hubF9pZCk7CisJCSptYnhfdmFsID0gTUJYX1BDUFlfQ0xBU1M7CisJfSBlbHNlIGlmIChpb19tb2RlID09IElPX09VVFBVVCkgeworCQkvKgorCQkgKiBUaGlzIGFzc2VydGlvbiBmYWlscyBpZiBDSE5MX0FkZElPUmVxKCkgd2FzIGNhbGxlZCBvbiBhCisJCSAqIHN0cmVhbSB3aGljaCB3YXMgY2FuY2VsbGVkLCBvciBhdHRhY2hlZCB0byBhIGRlYWQgYm9hcmQuCisJCSAqLworCQlEQkNfQVNTRVJUKChwY2hubC0+ZHdfc3RhdGUgJiB+Q0hOTF9TVEFURUVPUykgPT0KKwkJCSAgIENITkxfU1RBVEVSRUFEWSk7CisJCS8qCisJCSAqIFJlY29yZCB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgYSBidWZmZXIgYXZhaWxhYmxlIGZvcgorCQkgKiBvdXRwdXQuCisJCSAqLworCQljaG5sX21ncl9vYmotPmR3X291dHB1dF9tYXNrIHw9ICgxIDw8IHBjaG5sLT5jaG5sX2lkKTsKKwl9IGVsc2UgeworCQlEQkNfQVNTRVJUKGlvX21vZGUpOwkvKiBTaG91bGRuJ3QgZ2V0IGhlcmUuICovCisJfQorZnVuY19lbmQ6CisJcmV0dXJuOworfQorCisvKgorICogID09PT09PT09IGlvc21fc2NoZWR1bGUgPT09PT09PT0KKyAqICAgICAgU2NoZWR1bGUgRFBDIGZvciBJTy4KKyAqLwordm9pZCBpb3NtX3NjaGVkdWxlKHN0cnVjdCBpb19tZ3IgKmlvX21hbmFnZXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghaW9fbWFuYWdlcikKKwkJcmV0dXJuOworCisJLyogSW5jcmVtZW50IGNvdW50IG9mIERQQydzIHBlbmRpbmcuICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvX21hbmFnZXItPmRwY19sb2NrLCBmbGFncyk7CisJaW9fbWFuYWdlci0+ZHBjX3JlcSsrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvX21hbmFnZXItPmRwY19sb2NrLCBmbGFncyk7CisKKwkvKiBTY2hlZHVsZSBEUEMgKi8KKwl0YXNrbGV0X3NjaGVkdWxlKCZpb19tYW5hZ2VyLT5kcGNfdGFza2xldCk7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZmluZF9yZWFkeV9vdXRwdXQgPT09PT09PT0KKyAqICAgICAgU2VhcmNoIGZvciBhIGhvc3Qgb3V0cHV0IGNoYW5uZWwgd2hpY2ggaXMgcmVhZHkgdG8gc2VuZC4gIElmIHRoaXMgaXMKKyAqICAgICAgY2FsbGVkIGFzIGEgcmVzdWx0IG9mIHNlcnZpY2luZyB0aGUgRFBDLCB0aGVuIGltcGxlbWVudCBhIHJvdW5kCisgKiAgICAgIHJvYmluIHNlYXJjaDsgb3RoZXJ3aXNlLCB0aGlzIHdhcyBjYWxsZWQgYnkgYSBjbGllbnQgdGhyZWFkICh2aWEKKyAqICAgICAgSU9fRGlzcGF0Y2goKSksIHNvIGp1c3Qgc3RhcnQgc2VhcmNoaW5nIGZyb20gdGhlIGN1cnJlbnQgY2hhbm5lbCBpZC4KKyAqLworc3RhdGljIHUzMiBmaW5kX3JlYWR5X291dHB1dChzdHJ1Y3QgY2hubF9tZ3IgKmNobmxfbWdyX29iaiwKKwkJCSAgICAgc3RydWN0IGNobmxfb2JqZWN0ICpwY2hubCwgdTMyIG1hc2spCit7CisJdTMyIHJldCA9IE9VVFBVVE5PVFJFQURZOworCXUzMiBpZCwgc3RhcnRfaWQ7CisJdTMyIHNoaWZ0OworCisJaWQgPSAocGNobmwgIT0KKwkgICAgICBOVUxMID8gcGNobmwtPmNobmxfaWQgOiAoY2hubF9tZ3Jfb2JqLT5kd19sYXN0X291dHB1dCArIDEpKTsKKwlpZCA9ICgoaWQgPT0gQ0hOTF9NQVhDSEFOTkVMUykgPyAwIDogaWQpOworCWlmIChpZCA+PSBDSE5MX01BWENIQU5ORUxTKQorCQlnb3RvIGZ1bmNfZW5kOworCWlmIChtYXNrKSB7CisJCXNoaWZ0ID0gKDEgPDwgaWQpOworCQlzdGFydF9pZCA9IGlkOworCQlkbyB7CisJCQlpZiAobWFzayAmIHNoaWZ0KSB7CisJCQkJcmV0ID0gaWQ7CisJCQkJaWYgKHBjaG5sID09IE5VTEwpCisJCQkJCWNobmxfbWdyX29iai0+ZHdfbGFzdF9vdXRwdXQgPSBpZDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlkID0gaWQgKyAxOworCQkJaWQgPSAoKGlkID09IENITkxfTUFYQ0hBTk5FTFMpID8gMCA6IGlkKTsKKwkJCXNoaWZ0ID0gKDEgPDwgaWQpOworCQl9IHdoaWxlIChpZCAhPSBzdGFydF9pZCk7CisJfQorZnVuY19lbmQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqICA9PT09PT09PSBpbnB1dF9jaG5sID09PT09PT09CisgKiAgICAgIERpc3BhdGNoIGEgYnVmZmVyIG9uIGFuIGlucHV0IGNoYW5uZWwuCisgKi8KK3N0YXRpYyB2b2lkIGlucHV0X2Nobmwoc3RydWN0IGlvX21nciAqcGlvX21nciwgc3RydWN0IGNobmxfb2JqZWN0ICpwY2hubCwKKwkJCXU4IGlvX21vZGUpCit7CisJc3RydWN0IGNobmxfbWdyICpjaG5sX21ncl9vYmo7CisJc3RydWN0IHNobSAqc207CisJdTMyIGNobmxfaWQ7CisJdTMyIGJ5dGVzOworCXN0cnVjdCBjaG5sX2lycCAqY2hubF9wYWNrZXRfb2JqID0gTlVMTDsKKwl1MzIgZHdfYXJnOworCWJvb2wgY2xlYXJfY2hubCA9IGZhbHNlOworCWJvb2wgbm90aWZ5X2NsaWVudCA9IGZhbHNlOworCisJc20gPSBwaW9fbWdyLT5zaGFyZWRfbWVtOworCWNobmxfbWdyX29iaiA9IHBpb19tZ3ItPmhjaG5sX21ncjsKKworCS8qIEF0dGVtcHQgdG8gcGVyZm9ybSBpbnB1dCAqLworCWlmICghc20tPmlucHV0X2Z1bGwpCisJCWdvdG8gZnVuY19lbmQ7CisKKwlieXRlcyA9IHNtLT5pbnB1dF9zaXplICogY2hubF9tZ3Jfb2JqLT53b3JkX3NpemU7CisJY2hubF9pZCA9IHNtLT5pbnB1dF9pZDsKKwlkd19hcmcgPSBzbS0+YXJnOworCWlmIChjaG5sX2lkID49IENITkxfTUFYQ0hBTk5FTFMpIHsKKwkJLyogU2hvdWxkbid0IGJlIGhlcmU6IHdvdWxkIGluZGljYXRlIGNvcnJ1cHRlZCBzaG0uICovCisJCURCQ19BU1NFUlQoY2hubF9pZCk7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCXBjaG5sID0gY2hubF9tZ3Jfb2JqLT5hcF9jaGFubmVsW2NobmxfaWRdOworCWlmICgocGNobmwgIT0gTlVMTCkgJiYgQ0hOTF9JU19JTlBVVChwY2hubC0+Y2hubF9tb2RlKSkgeworCQlpZiAoKHBjaG5sLT5kd19zdGF0ZSAmIH5DSE5MX1NUQVRFRU9TKSA9PSBDSE5MX1NUQVRFUkVBRFkpIHsKKwkJCWlmICghcGNobmwtPnBpb19yZXF1ZXN0cykKKwkJCQlnb3RvIGZ1bmNfZW5kOworCQkJLyogR2V0IHRoZSBJL08gcmVxdWVzdCwgYW5kIGF0dGVtcHQgYSB0cmFuc2ZlciAqLworCQkJY2hubF9wYWNrZXRfb2JqID0gKHN0cnVjdCBjaG5sX2lycCAqKQorCQkJICAgIGxzdF9nZXRfaGVhZChwY2hubC0+cGlvX3JlcXVlc3RzKTsKKwkJCWlmIChjaG5sX3BhY2tldF9vYmopIHsKKwkJCQlwY2hubC0+Y2lvX3JlcXMtLTsKKwkJCQlpZiAocGNobmwtPmNpb19yZXFzIDwgMCkKKwkJCQkJZ290byBmdW5jX2VuZDsKKwkJCQkvKgorCQkJCSAqIEVuc3VyZSB3ZSBkb24ndCBvdmVyZmxvdyB0aGUgY2xpZW50J3MKKwkJCQkgKiBidWZmZXIuCisJCQkJICovCisJCQkJYnl0ZXMgPSBtaW4oYnl0ZXMsIGNobmxfcGFja2V0X29iai0+Ynl0ZV9zaXplKTsKKwkJCQltZW1jcHkoY2hubF9wYWNrZXRfb2JqLT5ob3N0X3N5c19idWYsCisJCQkJCQlwaW9fbWdyLT5pbnB1dCwgYnl0ZXMpOworCQkJCXBjaG5sLT5ieXRlc19tb3ZlZCArPSBieXRlczsKKwkJCQljaG5sX3BhY2tldF9vYmotPmJ5dGVfc2l6ZSA9IGJ5dGVzOworCQkJCWNobmxfcGFja2V0X29iai0+ZHdfYXJnID0gZHdfYXJnOworCQkJCWNobmxfcGFja2V0X29iai0+c3RhdHVzID0gQ0hOTF9JT0NTVEFUQ09NUExFVEU7CisKKwkJCQlpZiAoYnl0ZXMgPT0gMCkgeworCQkJCQkvKgorCQkJCQkgKiBUaGlzIGFzc2VydGlvbiBmYWlscyBpZiB0aGUgRFNQCisJCQkJCSAqIHNlbmRzIEVPUyBtb3JlIHRoYW4gb25jZSBvbiB0aGlzCisJCQkJCSAqIGNoYW5uZWwuCisJCQkJCSAqLworCQkJCQlpZiAocGNobmwtPmR3X3N0YXRlICYgQ0hOTF9TVEFURUVPUykKKwkJCQkJCWdvdG8gZnVuY19lbmQ7CisJCQkJCS8qCisJCQkJCSAqIFplcm8gYnl0ZXMgaW5kaWNhdGVzIEVPUy4gVXBkYXRlCisJCQkJCSAqIElPQyBzdGF0dXMgZm9yIHRoaXMgY2hpcnAsIGFuZCBhbHNvCisJCQkJCSAqIHRoZSBjaGFubmVsIHN0YXRlLgorCQkJCQkgKi8KKwkJCQkJY2hubF9wYWNrZXRfb2JqLT5zdGF0dXMgfD0KKwkJCQkJICAgIENITkxfSU9DU1RBVEVPUzsKKwkJCQkJcGNobmwtPmR3X3N0YXRlIHw9IENITkxfU1RBVEVFT1M7CisJCQkJCS8qCisJCQkJCSAqIE5vdGlmeSB0aGF0IGVuZCBvZiBzdHJlYW0gaGFzCisJCQkJCSAqIG9jY3VycmVkLgorCQkJCQkgKi8KKwkJCQkJbnRmeV9ub3RpZnkocGNobmwtPm50Znlfb2JqLAorCQkJCQkJICAgIERTUF9TVFJFQU1ET05FKTsKKwkJCQl9CisJCQkJLyogVGVsbCBEU1AgaWYgbm8gbW9yZSBJL08gYnVmZmVycyBhdmFpbGFibGUgKi8KKwkJCQlpZiAoIXBjaG5sLT5waW9fcmVxdWVzdHMpCisJCQkJCWdvdG8gZnVuY19lbmQ7CisJCQkJaWYgKExTVF9JU19FTVBUWShwY2hubC0+cGlvX3JlcXVlc3RzKSkgeworCQkJCQlzZXRfY2hubF9mcmVlKHNtLCBwY2hubC0+Y2hubF9pZCk7CisJCQkJfQorCQkJCWNsZWFyX2NobmwgPSB0cnVlOworCQkJCW5vdGlmeV9jbGllbnQgPSB0cnVlOworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIElucHV0IGZ1bGwgZm9yIHRoaXMgY2hhbm5lbCwgYnV0IHdlIGhhdmUgbm8KKwkJCQkgKiBidWZmZXJzIGF2YWlsYWJsZS4gIFRoZSBjaGFubmVsIG11c3QgYmUKKwkJCQkgKiAiaWRsaW5nIi4gQ2xlYXIgb3V0IHRoZSBwaHlzaWNhbCBpbnB1dAorCQkJCSAqIGNoYW5uZWwuCisJCQkJICovCisJCQkJY2xlYXJfY2hubCA9IHRydWU7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBJbnB1dCBjaGFubmVsIGNhbmNlbGxlZDogY2xlYXIgaW5wdXQgY2hhbm5lbCAqLworCQkJY2xlYXJfY2hubCA9IHRydWU7CisJCX0KKwl9IGVsc2UgeworCQkvKiBEUEMgZmlyZWQgYWZ0ZXIgaG9zdCBjbG9zZWQgY2hhbm5lbDogY2xlYXIgaW5wdXQgY2hhbm5lbCAqLworCQljbGVhcl9jaG5sID0gdHJ1ZTsKKwl9CisJaWYgKGNsZWFyX2NobmwpIHsKKwkJLyogSW5kaWNhdGUgdG8gdGhlIERTUCB3ZSBoYXZlIHJlYWQgdGhlIGlucHV0ICovCisJCXNtLT5pbnB1dF9mdWxsID0gMDsKKwkJc21faW50ZXJydXB0X2RzcChwaW9fbWdyLT5oYnJpZGdlX2NvbnRleHQsIE1CWF9QQ1BZX0NMQVNTKTsKKwl9CisJaWYgKG5vdGlmeV9jbGllbnQpIHsKKwkJLyogTm90aWZ5IGNsaWVudCB3aXRoIElPIGNvbXBsZXRpb24gcmVjb3JkICovCisJCW5vdGlmeV9jaG5sX2NvbXBsZXRlKHBjaG5sLCBjaG5sX3BhY2tldF9vYmopOworCX0KK2Z1bmNfZW5kOgorCXJldHVybjsKK30KKworLyoKKyAqICA9PT09PT09PSBpbnB1dF9tc2cgPT09PT09PT0KKyAqICAgICAgQ29waWVzIG1lc3NhZ2VzIGZyb20gc2hhcmVkIG1lbW9yeSB0byB0aGUgbWVzc2FnZSBxdWV1ZXMuCisgKi8KK3N0YXRpYyB2b2lkIGlucHV0X21zZyhzdHJ1Y3QgaW9fbWdyICpwaW9fbWdyLCBzdHJ1Y3QgbXNnX21nciAqaG1zZ19tZ3IpCit7CisJdTMyIG51bV9tc2dzOworCXUzMiBpOworCXU4ICptc2dfaW5wdXQ7CisJc3RydWN0IG1zZ19xdWV1ZSAqbXNnX3F1ZXVlX29iajsKKwlzdHJ1Y3QgbXNnX2ZyYW1lICpwbXNnOworCXN0cnVjdCBtc2dfZHNwbXNnIG1zZzsKKwlzdHJ1Y3QgbXNnX2N0cmwgKm1zZ19jdHJfb2JqOworCXUzMiBpbnB1dF9lbXB0eTsKKwl1MzIgYWRkcjsKKworCW1zZ19jdHJfb2JqID0gcGlvX21nci0+bXNnX2lucHV0X2N0cmw7CisJLyogR2V0IHRoZSBudW1iZXIgb2YgaW5wdXQgbWVzc2FnZXMgdG8gYmUgcmVhZCAqLworCWlucHV0X2VtcHR5ID0gbXNnX2N0cl9vYmotPmJ1Zl9lbXB0eTsKKwludW1fbXNncyA9IG1zZ19jdHJfb2JqLT5zaXplOworCWlmIChpbnB1dF9lbXB0eSkKKwkJZ290byBmdW5jX2VuZDsKKworCW1zZ19pbnB1dCA9IHBpb19tZ3ItPm1zZ19pbnB1dDsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX21zZ3M7IGkrKykgeworCQkvKiBSZWFkIHRoZSBuZXh0IG1lc3NhZ2UgKi8KKwkJYWRkciA9ICh1MzIpICYoKChzdHJ1Y3QgbXNnX2RzcG1zZyAqKW1zZ19pbnB1dCktPm1zZy5kd19jbWQpOworCQltc2cubXNnLmR3X2NtZCA9CisJCSAgICByZWFkX2V4dDMyX2JpdF9kc3BfZGF0YShwaW9fbWdyLT5oYnJpZGdlX2NvbnRleHQsIGFkZHIpOworCQlhZGRyID0gKHUzMikgJigoKHN0cnVjdCBtc2dfZHNwbXNnICopbXNnX2lucHV0KS0+bXNnLmR3X2FyZzEpOworCQltc2cubXNnLmR3X2FyZzEgPQorCQkgICAgcmVhZF9leHQzMl9iaXRfZHNwX2RhdGEocGlvX21nci0+aGJyaWRnZV9jb250ZXh0LCBhZGRyKTsKKwkJYWRkciA9ICh1MzIpICYoKChzdHJ1Y3QgbXNnX2RzcG1zZyAqKW1zZ19pbnB1dCktPm1zZy5kd19hcmcyKTsKKwkJbXNnLm1zZy5kd19hcmcyID0KKwkJICAgIHJlYWRfZXh0MzJfYml0X2RzcF9kYXRhKHBpb19tZ3ItPmhicmlkZ2VfY29udGV4dCwgYWRkcik7CisJCWFkZHIgPSAodTMyKSAmKCgoc3RydWN0IG1zZ19kc3Btc2cgKiltc2dfaW5wdXQpLT5tc2dxX2lkKTsKKwkJbXNnLm1zZ3FfaWQgPQorCQkgICAgcmVhZF9leHQzMl9iaXRfZHNwX2RhdGEocGlvX21nci0+aGJyaWRnZV9jb250ZXh0LCBhZGRyKTsKKwkJbXNnX2lucHV0ICs9IHNpemVvZihzdHJ1Y3QgbXNnX2RzcG1zZyk7CisJCWlmICghaG1zZ19tZ3ItPnF1ZXVlX2xpc3QpCisJCQlnb3RvIGZ1bmNfZW5kOworCisJCS8qIERldGVybWluZSB3aGljaCBxdWV1ZSB0byBwdXQgdGhlIG1lc3NhZ2UgaW4gKi8KKwkJbXNnX3F1ZXVlX29iaiA9CisJCSAgICAoc3RydWN0IG1zZ19xdWV1ZSAqKWxzdF9maXJzdChobXNnX21nci0+cXVldWVfbGlzdCk7CisJCWRldl9kYmcoYnJpZGdlLAkiaW5wdXQgbXNnOiBkd19jbWQ9MHgleCBkd19hcmcxPTB4JXggIgorCQkJImR3X2FyZzI9MHgleCBtc2dxX2lkPTB4JXggXG4iLCBtc2cubXNnLmR3X2NtZCwKKwkJCW1zZy5tc2cuZHdfYXJnMSwgbXNnLm1zZy5kd19hcmcyLCBtc2cubXNncV9pZCk7CisJCS8qCisJCSAqIEludGVycnVwdCBtYXkgb2NjdXIgYmVmb3JlIHNoYXJlZCBtZW1vcnkgYW5kIG1lc3NhZ2UKKwkJICogaW5wdXQgbG9jYXRpb25zIGhhdmUgYmVlbiBzZXQgdXAuIElmIGFsbCBub2RlcyB3ZXJlCisJCSAqIGNsZWFuZWQgdXAsIGhtc2dfbWdyLT5tYXhfbXNncyBzaG91bGQgYmUgMC4KKwkJICovCisJCXdoaWxlIChtc2dfcXVldWVfb2JqICE9IE5VTEwpIHsKKwkJCWlmIChtc2cubXNncV9pZCA9PSBtc2dfcXVldWVfb2JqLT5tc2dxX2lkKSB7CisJCQkJLyogRm91bmQgaXQgKi8KKwkJCQlpZiAobXNnLm1zZy5kd19jbWQgPT0gUk1TX0VYSVRBQ0spIHsKKwkJCQkJLyoKKwkJCQkJICogQ2FsbCB0aGUgbm9kZSBleGl0IG5vdGlmaWNhdGlvbi4KKwkJCQkJICogVGhlIGV4aXQgbWVzc2FnZSBkb2VzIG5vdCBnZXQKKwkJCQkJICogcXVldWVkLgorCQkJCQkgKi8KKwkJCQkJKCpobXNnX21nci0+b25fZXhpdCkgKCh2b2lkICopCisJCQkJCQkJICAgbXNnX3F1ZXVlX29iai0+YXJnLAorCQkJCQkJCSAgIG1zZy5tc2cuZHdfYXJnMSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyoKKwkJCQkJICogTm90IGFuIGV4aXQgYWNrbm93bGVkZ2VtZW50LCBxdWV1ZQorCQkJCQkgKiB0aGUgbWVzc2FnZS4KKwkJCQkJICovCisJCQkJCWlmICghbXNnX3F1ZXVlX29iai0+bXNnX2ZyZWVfbGlzdCkKKwkJCQkJCWdvdG8gZnVuY19lbmQ7CisJCQkJCXBtc2cgPSAoc3RydWN0IG1zZ19mcmFtZSAqKWxzdF9nZXRfaGVhZAorCQkJCQkgICAgKG1zZ19xdWV1ZV9vYmotPm1zZ19mcmVlX2xpc3QpOworCQkJCQlpZiAobXNnX3F1ZXVlX29iai0+bXNnX3VzZWRfbGlzdAorCQkJCQkgICAgJiYgcG1zZykgeworCQkJCQkJcG1zZy0+bXNnX2RhdGEgPSBtc2c7CisJCQkJCQlsc3RfcHV0X3RhaWwKKwkJCQkJCSAobXNnX3F1ZXVlX29iai0+bXNnX3VzZWRfbGlzdCwKKwkJCQkJCSAgICAgKHN0cnVjdCBsaXN0X2hlYWQgKilwbXNnKTsKKwkJCQkJCW50Znlfbm90aWZ5CisJCQkJCQkgICAgKG1zZ19xdWV1ZV9vYmotPm50Znlfb2JqLAorCQkJCQkJICAgICBEU1BfTk9ERU1FU1NBR0VSRUFEWSk7CisJCQkJCQlzeW5jX3NldF9ldmVudAorCQkJCQkJICAgIChtc2dfcXVldWVfb2JqLT5zeW5jX2V2ZW50KTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCS8qCisJCQkJCQkgKiBObyBmcmVlIGZyYW1lIHRvIGNvcHkgdGhlCisJCQkJCQkgKiBtZXNzYWdlIGludG8uCisJCQkJCQkgKi8KKwkJCQkJCXByX2VycigiJXM6IG5vIGZyZWUgbXNnIGZyYW1lcywiCisJCQkJCQkgICAgICAgIiBkaXNjYXJkaW5nIG1zZ1xuIiwKKwkJCQkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmICghaG1zZ19tZ3ItPnF1ZXVlX2xpc3QgfHwgIW1zZ19xdWV1ZV9vYmopCisJCQkJZ290byBmdW5jX2VuZDsKKwkJCW1zZ19xdWV1ZV9vYmogPQorCQkJICAgIChzdHJ1Y3QgbXNnX3F1ZXVlICopbHN0X25leHQoaG1zZ19tZ3ItPnF1ZXVlX2xpc3QsCisJCQkJCQkJIChzdHJ1Y3QgbGlzdF9oZWFkICopCisJCQkJCQkJIG1zZ19xdWV1ZV9vYmopOworCQl9CisJfQorCS8qIFNldCB0aGUgcG9zdCBTV0kgZmxhZyAqLworCWlmIChudW1fbXNncyA+IDApIHsKKwkJLyogVGVsbCB0aGUgRFNQIHdlJ3ZlIHJlYWQgdGhlIG1lc3NhZ2VzICovCisJCW1zZ19jdHJfb2JqLT5idWZfZW1wdHkgPSB0cnVlOworCQltc2dfY3RyX29iai0+cG9zdF9zd2kgPSB0cnVlOworCQlzbV9pbnRlcnJ1cHRfZHNwKHBpb19tZ3ItPmhicmlkZ2VfY29udGV4dCwgTUJYX1BDUFlfQ0xBU1MpOworCX0KK2Z1bmNfZW5kOgorCXJldHVybjsKK30KKworLyoKKyAqICA9PT09PT09PSBub3RpZnlfY2hubF9jb21wbGV0ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFNpZ25hbCB0aGUgY2hhbm5lbCBldmVudCwgbm90aWZ5aW5nIHRoZSBjbGllbnQgdGhhdCBJL08gaGFzIGNvbXBsZXRlZC4KKyAqLworc3RhdGljIHZvaWQgbm90aWZ5X2NobmxfY29tcGxldGUoc3RydWN0IGNobmxfb2JqZWN0ICpwY2hubCwKKwkJCQkgc3RydWN0IGNobmxfaXJwICpjaG5sX3BhY2tldF9vYmopCit7CisJYm9vbCBzaWduYWxfZXZlbnQ7CisKKwlpZiAoIXBjaG5sIHx8ICFwY2hubC0+c3luY19ldmVudCB8fAorCSAgICAhcGNobmwtPnBpb19jb21wbGV0aW9ucyB8fCAhY2hubF9wYWNrZXRfb2JqKQorCQlnb3RvIGZ1bmNfZW5kOworCisJLyoKKwkgKiBOb3RlOiB3ZSBzaWduYWwgdGhlIGNoYW5uZWwgZXZlbnQgb25seSBpZiB0aGUgcXVldWUgb2YgSU8KKwkgKiBjb21wbGV0aW9ucyBpcyBlbXB0eS4gIElmIGl0IGlzIG5vdCBlbXB0eSwgdGhlIGV2ZW50IGlzIHN1cmUgdG8gYmUKKwkgKiBzaWduYWxsZWQgYnkgdGhlIG9ubHkgSU8gY29tcGxldGlvbiBsaXN0IGNvbnN1bWVyOgorCSAqIGJyaWRnZV9jaG5sX2dldF9pb2MoKS4KKwkgKi8KKwlzaWduYWxfZXZlbnQgPSBMU1RfSVNfRU1QVFkocGNobmwtPnBpb19jb21wbGV0aW9ucyk7CisJLyogRW5xdWV1ZSB0aGUgSU8gY29tcGxldGlvbiBpbmZvIGZvciB0aGUgY2xpZW50ICovCisJbHN0X3B1dF90YWlsKHBjaG5sLT5waW9fY29tcGxldGlvbnMsCisJCSAgICAgKHN0cnVjdCBsaXN0X2hlYWQgKiljaG5sX3BhY2tldF9vYmopOworCXBjaG5sLT5jaW9fY3MrKzsKKworCWlmIChwY2hubC0+Y2lvX2NzID4gcGNobmwtPmNobmxfcGFja2V0cykKKwkJZ290byBmdW5jX2VuZDsKKwkvKiBTaWduYWwgdGhlIGNoYW5uZWwgZXZlbnQgKGlmIG5vdCBhbHJlYWR5IHNldCkgdGhhdCBJTyBpcyBjb21wbGV0ZSAqLworCWlmIChzaWduYWxfZXZlbnQpCisJCXN5bmNfc2V0X2V2ZW50KHBjaG5sLT5zeW5jX2V2ZW50KTsKKworCS8qIE5vdGlmeSB0aGF0IElPIGlzIGNvbXBsZXRlICovCisJbnRmeV9ub3RpZnkocGNobmwtPm50Znlfb2JqLCBEU1BfU1RSRUFNSU9DT01QTEVUSU9OKTsKK2Z1bmNfZW5kOgorCXJldHVybjsKK30KKworLyoKKyAqICA9PT09PT09PSBvdXRwdXRfY2hubCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERpc3BhdGNoIGEgYnVmZmVyIG9uIGFuIG91dHB1dCBjaGFubmVsLgorICovCitzdGF0aWMgdm9pZCBvdXRwdXRfY2hubChzdHJ1Y3QgaW9fbWdyICpwaW9fbWdyLCBzdHJ1Y3QgY2hubF9vYmplY3QgKnBjaG5sLAorCQkJdTggaW9fbW9kZSkKK3sKKwlzdHJ1Y3QgY2hubF9tZ3IgKmNobmxfbWdyX29iajsKKwlzdHJ1Y3Qgc2htICpzbTsKKwl1MzIgY2hubF9pZDsKKwlzdHJ1Y3QgY2hubF9pcnAgKmNobmxfcGFja2V0X29iajsKKwl1MzIgZHdfZHNwX2ZfbWFzazsKKworCWNobmxfbWdyX29iaiA9IHBpb19tZ3ItPmhjaG5sX21ncjsKKwlzbSA9IHBpb19tZ3ItPnNoYXJlZF9tZW07CisJLyogQXR0ZW1wdCB0byBwZXJmb3JtIG91dHB1dCAqLworCWlmIChzbS0+b3V0cHV0X2Z1bGwpCisJCWdvdG8gZnVuY19lbmQ7CisKKwlpZiAocGNobmwgJiYgISgocGNobmwtPmR3X3N0YXRlICYgfkNITkxfU1RBVEVFT1MpID09IENITkxfU1RBVEVSRUFEWSkpCisJCWdvdG8gZnVuY19lbmQ7CisKKwkvKiBMb29rIHRvIHNlZSBpZiBib3RoIGEgUEMgYW5kIERTUCBvdXRwdXQgY2hhbm5lbCBhcmUgcmVhZHkgKi8KKwlkd19kc3BfZl9tYXNrID0gc20tPmRzcF9mcmVlX21hc2s7CisJY2hubF9pZCA9CisJICAgIGZpbmRfcmVhZHlfb3V0cHV0KGNobmxfbWdyX29iaiwgcGNobmwsCisJCQkgICAgICAoY2hubF9tZ3Jfb2JqLT5kd19vdXRwdXRfbWFzayAmIGR3X2RzcF9mX21hc2spKTsKKwlpZiAoY2hubF9pZCA9PSBPVVRQVVROT1RSRUFEWSkKKwkJZ290byBmdW5jX2VuZDsKKworCXBjaG5sID0gY2hubF9tZ3Jfb2JqLT5hcF9jaGFubmVsW2NobmxfaWRdOworCWlmICghcGNobmwgfHwgIXBjaG5sLT5waW9fcmVxdWVzdHMpIHsKKwkJLyogU2hvdWxkbid0IGdldCBoZXJlICovCisJCWdvdG8gZnVuY19lbmQ7CisJfQorCS8qIEdldCB0aGUgSS9PIHJlcXVlc3QsIGFuZCBhdHRlbXB0IGEgdHJhbnNmZXIgKi8KKwljaG5sX3BhY2tldF9vYmogPSAoc3RydWN0IGNobmxfaXJwICopbHN0X2dldF9oZWFkKHBjaG5sLT5waW9fcmVxdWVzdHMpOworCWlmICghY2hubF9wYWNrZXRfb2JqKQorCQlnb3RvIGZ1bmNfZW5kOworCisJcGNobmwtPmNpb19yZXFzLS07CisJaWYgKHBjaG5sLT5jaW9fcmVxcyA8IDAgfHwgIXBjaG5sLT5waW9fcmVxdWVzdHMpCisJCWdvdG8gZnVuY19lbmQ7CisKKwkvKiBSZWNvcmQgZmFjdCB0aGF0IG5vIG1vcmUgSS9PIGJ1ZmZlcnMgYXZhaWxhYmxlICovCisJaWYgKExTVF9JU19FTVBUWShwY2hubC0+cGlvX3JlcXVlc3RzKSkKKwkJY2hubF9tZ3Jfb2JqLT5kd19vdXRwdXRfbWFzayAmPSB+KDEgPDwgY2hubF9pZCk7CisKKwkvKiBUcmFuc2ZlciBidWZmZXIgdG8gRFNQIHNpZGUgKi8KKwljaG5sX3BhY2tldF9vYmotPmJ5dGVfc2l6ZSA9IG1pbihwaW9fbWdyLT51c21fYnVmX3NpemUsCisJCQkJCWNobmxfcGFja2V0X29iai0+Ynl0ZV9zaXplKTsKKwltZW1jcHkocGlvX21nci0+b3V0cHV0LAljaG5sX3BhY2tldF9vYmotPmhvc3Rfc3lzX2J1ZiwKKwkJCQkJY2hubF9wYWNrZXRfb2JqLT5ieXRlX3NpemUpOworCXBjaG5sLT5ieXRlc19tb3ZlZCArPSBjaG5sX3BhY2tldF9vYmotPmJ5dGVfc2l6ZTsKKwkvKiBXcml0ZSBhbGwgMzIgYml0cyBvZiBhcmcgKi8KKwlzbS0+YXJnID0gY2hubF9wYWNrZXRfb2JqLT5kd19hcmc7CisjaWYgX0NITkxfV09SRFNJWkUgPT0gMgorCS8qIEFjY2VzcyBjYW4gYmUgZGlmZmVyZW50IFNNIGFjY2VzcyB3b3JkIHNpemUgKGUuZy4gMTYvMzIgYml0IHdvcmRzKSAqLworCXNtLT5vdXRwdXRfaWQgPSAodTE2KSBjaG5sX2lkOworCXNtLT5vdXRwdXRfc2l6ZSA9ICh1MTYpIChjaG5sX3BhY2tldF9vYmotPmJ5dGVfc2l6ZSArCisJCQkJY2hubF9tZ3Jfb2JqLT53b3JkX3NpemUgLSAxKSAvCisJCQkJKHUxNikgY2hubF9tZ3Jfb2JqLT53b3JkX3NpemU7CisjZWxzZQorCXNtLT5vdXRwdXRfaWQgPSBjaG5sX2lkOworCXNtLT5vdXRwdXRfc2l6ZSA9IChjaG5sX3BhY2tldF9vYmotPmJ5dGVfc2l6ZSArCisJCQljaG5sX21ncl9vYmotPndvcmRfc2l6ZSAtIDEpIC8gY2hubF9tZ3Jfb2JqLT53b3JkX3NpemU7CisjZW5kaWYKKwlzbS0+b3V0cHV0X2Z1bGwgPSAgMTsKKwkvKiBJbmRpY2F0ZSB0byB0aGUgRFNQIHdlIGhhdmUgd3JpdHRlbiB0aGUgb3V0cHV0ICovCisJc21faW50ZXJydXB0X2RzcChwaW9fbWdyLT5oYnJpZGdlX2NvbnRleHQsIE1CWF9QQ1BZX0NMQVNTKTsKKwkvKiBOb3RpZnkgY2xpZW50IHdpdGggSU8gY29tcGxldGlvbiByZWNvcmQgKGtlZXAgRU9TKSAqLworCWNobmxfcGFja2V0X29iai0+c3RhdHVzICY9IENITkxfSU9DU1RBVEVPUzsKKwlub3RpZnlfY2hubF9jb21wbGV0ZShwY2hubCwgY2hubF9wYWNrZXRfb2JqKTsKKwkvKiBOb3RpZnkgaWYgc3RyZWFtIGlzIGRvbmUuICovCisJaWYgKGNobmxfcGFja2V0X29iai0+c3RhdHVzICYgQ0hOTF9JT0NTVEFURU9TKQorCQludGZ5X25vdGlmeShwY2hubC0+bnRmeV9vYmosIERTUF9TVFJFQU1ET05FKTsKKworZnVuY19lbmQ6CisJcmV0dXJuOworfQorCisvKgorICogID09PT09PT09IG91dHB1dF9tc2cgPT09PT09PT0KKyAqICAgICAgQ29waWVzIG1lc3NhZ2VzIGZyb20gdGhlIG1lc3NhZ2UgcXVldWVzIHRvIHRoZSBzaGFyZWQgbWVtb3J5LgorICovCitzdGF0aWMgdm9pZCBvdXRwdXRfbXNnKHN0cnVjdCBpb19tZ3IgKnBpb19tZ3IsIHN0cnVjdCBtc2dfbWdyICpobXNnX21ncikKK3sKKwl1MzIgbnVtX21zZ3MgPSAwOworCXUzMiBpOworCXU4ICptc2dfb3V0cHV0OworCXN0cnVjdCBtc2dfZnJhbWUgKnBtc2c7CisJc3RydWN0IG1zZ19jdHJsICptc2dfY3RyX29iajsKKwl1MzIgb3V0cHV0X2VtcHR5OworCXUzMiB2YWw7CisJdTMyIGFkZHI7CisKKwltc2dfY3RyX29iaiA9IHBpb19tZ3ItPm1zZ19vdXRwdXRfY3RybDsKKworCS8qIENoZWNrIGlmIG91dHB1dCBoYXMgYmVlbiBjbGVhcmVkICovCisJb3V0cHV0X2VtcHR5ID0gbXNnX2N0cl9vYmotPmJ1Zl9lbXB0eTsKKwlpZiAob3V0cHV0X2VtcHR5KSB7CisJCW51bV9tc2dzID0gKGhtc2dfbWdyLT5tc2dzX3BlbmRpbmcgPiBobXNnX21nci0+bWF4X21zZ3MpID8KKwkJICAgIGhtc2dfbWdyLT5tYXhfbXNncyA6IGhtc2dfbWdyLT5tc2dzX3BlbmRpbmc7CisJCW1zZ19vdXRwdXQgPSBwaW9fbWdyLT5tc2dfb3V0cHV0OworCQkvKiBDb3B5IG51bV9tc2dzIG1lc3NhZ2VzIGludG8gc2hhcmVkIG1lbW9yeSAqLworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX21zZ3M7IGkrKykgeworCQkJaWYgKCFobXNnX21nci0+bXNnX3VzZWRfbGlzdCkgeworCQkJCXBtc2cgPSBOVUxMOworCQkJCWdvdG8gZnVuY19lbmQ7CisJCQl9IGVsc2UgeworCQkJCXBtc2cgPSAoc3RydWN0IG1zZ19mcmFtZSAqKQorCQkJCSAgICBsc3RfZ2V0X2hlYWQoaG1zZ19tZ3ItPm1zZ191c2VkX2xpc3QpOworCQkJfQorCQkJaWYgKHBtc2cgIT0gTlVMTCkgeworCQkJCXZhbCA9IChwbXNnLT5tc2dfZGF0YSkubXNncV9pZDsKKwkJCQlhZGRyID0gKHUzMikgJigoKHN0cnVjdCBtc2dfZHNwbXNnICopCisJCQkJCQkgbXNnX291dHB1dCktPm1zZ3FfaWQpOworCQkJCXdyaXRlX2V4dDMyX2JpdF9kc3BfZGF0YSgKKwkJCQkJcGlvX21nci0+aGJyaWRnZV9jb250ZXh0LCBhZGRyLCB2YWwpOworCQkJCXZhbCA9IChwbXNnLT5tc2dfZGF0YSkubXNnLmR3X2NtZDsKKwkJCQlhZGRyID0gKHUzMikgJigoKChzdHJ1Y3QgbXNnX2RzcG1zZyAqKQorCQkJCQkJICBtc2dfb3V0cHV0KS0+bXNnKS5kd19jbWQpOworCQkJCXdyaXRlX2V4dDMyX2JpdF9kc3BfZGF0YSgKKwkJCQkJcGlvX21nci0+aGJyaWRnZV9jb250ZXh0LCBhZGRyLCB2YWwpOworCQkJCXZhbCA9IChwbXNnLT5tc2dfZGF0YSkubXNnLmR3X2FyZzE7CisJCQkJYWRkciA9ICh1MzIpICYoKCgoc3RydWN0IG1zZ19kc3Btc2cgKikKKwkJCQkJCSAgbXNnX291dHB1dCktPm1zZykuZHdfYXJnMSk7CisJCQkJd3JpdGVfZXh0MzJfYml0X2RzcF9kYXRhKAorCQkJCQlwaW9fbWdyLT5oYnJpZGdlX2NvbnRleHQsIGFkZHIsIHZhbCk7CisJCQkJdmFsID0gKHBtc2ctPm1zZ19kYXRhKS5tc2cuZHdfYXJnMjsKKwkJCQlhZGRyID0gKHUzMikgJigoKChzdHJ1Y3QgbXNnX2RzcG1zZyAqKQorCQkJCQkJICBtc2dfb3V0cHV0KS0+bXNnKS5kd19hcmcyKTsKKwkJCQl3cml0ZV9leHQzMl9iaXRfZHNwX2RhdGEoCisJCQkJCXBpb19tZ3ItPmhicmlkZ2VfY29udGV4dCwgYWRkciwgdmFsKTsKKwkJCQltc2dfb3V0cHV0ICs9IHNpemVvZihzdHJ1Y3QgbXNnX2RzcG1zZyk7CisJCQkJaWYgKCFobXNnX21nci0+bXNnX2ZyZWVfbGlzdCkKKwkJCQkJZ290byBmdW5jX2VuZDsKKwkJCQlsc3RfcHV0X3RhaWwoaG1zZ19tZ3ItPm1zZ19mcmVlX2xpc3QsCisJCQkJCSAgICAgKHN0cnVjdCBsaXN0X2hlYWQgKilwbXNnKTsKKwkJCQlzeW5jX3NldF9ldmVudChobXNnX21nci0+c3luY19ldmVudCk7CisJCQl9CisJCX0KKworCQlpZiAobnVtX21zZ3MgPiAwKSB7CisJCQlobXNnX21nci0+bXNnc19wZW5kaW5nIC09IG51bV9tc2dzOworI2lmIF9DSE5MX1dPUkRTSVpFID09IDIKKwkJCS8qCisJCQkgKiBBY2Nlc3MgY2FuIGJlIGRpZmZlcmVudCBTTSBhY2Nlc3Mgd29yZCBzaXplCisJCQkgKiAoZS5nLiAxNi8zMiBiaXQgd29yZHMpCisJCQkgKi8KKwkJCW1zZ19jdHJfb2JqLT5zaXplID0gKHUxNikgbnVtX21zZ3M7CisjZWxzZQorCQkJbXNnX2N0cl9vYmotPnNpemUgPSBudW1fbXNnczsKKyNlbmRpZgorCQkJbXNnX2N0cl9vYmotPmJ1Zl9lbXB0eSA9IGZhbHNlOworCQkJLyogU2V0IHRoZSBwb3N0IFNXSSBmbGFnICovCisJCQltc2dfY3RyX29iai0+cG9zdF9zd2kgPSB0cnVlOworCQkJLyogVGVsbCB0aGUgRFNQIHdlIGhhdmUgd3JpdHRlbiB0aGUgb3V0cHV0LiAqLworCQkJc21faW50ZXJydXB0X2RzcChwaW9fbWdyLT5oYnJpZGdlX2NvbnRleHQsCisJCQkJCQlNQlhfUENQWV9DTEFTUyk7CisJCX0KKwl9CitmdW5jX2VuZDoKKwlyZXR1cm47Cit9CisKKy8qCisgKiAgPT09PT09PT0gcmVnaXN0ZXJfc2htX3NlZ3MgPT09PT09PT0KKyAqICBwdXJwb3NlOgorICogICAgICBSZWdpc3RlcnMgR1BQIFNNIHNlZ21lbnQgd2l0aCBDTU0uCisgKi8KK3N0YXRpYyBpbnQgcmVnaXN0ZXJfc2htX3NlZ3Moc3RydWN0IGlvX21nciAqaGlvX21nciwKKwkJCQkgICAgc3RydWN0IGNvZF9tYW5hZ2VyICpjb2RfbWFuLAorCQkJCSAgICB1MzIgZHdfZ3BwX2Jhc2VfcGEpCit7CisJaW50IHN0YXR1cyA9IDA7CisJdTMyIHVsX3NobTBfYmFzZSA9IDA7CisJdTMyIHNobTBfZW5kID0gMDsKKwl1MzIgdWxfc2htMF9yc3J2ZF9zdGFydCA9IDA7CisJdTMyIHVsX3JzcnZkX3NpemUgPSAwOworCXUzMiB1bF9ncHBfcGh5czsKKwl1MzIgdWxfZHNwX3ZpcnQ7CisJdTMyIHVsX3NobV9zZWdfaWQwID0gMDsKKwl1MzIgZHdfb2Zmc2V0LCBkd19ncHBfYmFzZV92YSwgdWxfZHNwX3NpemU7CisKKwkvKgorCSAqIFJlYWQgYWRkcmVzcyBhbmQgc2l6ZSBpbmZvIGZvciBmaXJzdCBTTSByZWdpb24uCisJICogR2V0IHN0YXJ0IG9mIDFzdCBTTSBIZWFwIHJlZ2lvbi4KKwkgKi8KKwlzdGF0dXMgPQorCSAgICBjb2RfZ2V0X3N5bV92YWx1ZShjb2RfbWFuLCBTSE0wX1NIQVJFRF9CQVNFX1NZTSwgJnVsX3NobTBfYmFzZSk7CisJaWYgKHVsX3NobTBfYmFzZSA9PSAwKSB7CisJCXN0YXR1cyA9IC1FUEVSTTsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJLyogR2V0IGVuZCBvZiAxc3QgU00gSGVhcCByZWdpb24gKi8KKwlpZiAoIXN0YXR1cykgeworCQkvKiBHZXQgc3RhcnQgYW5kIGxlbmd0aCBvZiBtZXNzYWdlIHBhcnQgb2Ygc2hhcmVkIG1lbW9yeSAqLworCQlzdGF0dXMgPSBjb2RfZ2V0X3N5bV92YWx1ZShjb2RfbWFuLCBTSE0wX1NIQVJFRF9FTkRfU1lNLAorCQkJCQkgICAmc2htMF9lbmQpOworCQlpZiAoc2htMF9lbmQgPT0gMCkgeworCQkJc3RhdHVzID0gLUVQRVJNOworCQkJZ290byBmdW5jX2VuZDsKKwkJfQorCX0KKwkvKiBTdGFydCBvZiBHcHAgcmVzZXJ2ZWQgcmVnaW9uICovCisJaWYgKCFzdGF0dXMpIHsKKwkJLyogR2V0IHN0YXJ0IGFuZCBsZW5ndGggb2YgbWVzc2FnZSBwYXJ0IG9mIHNoYXJlZCBtZW1vcnkgKi8KKwkJc3RhdHVzID0KKwkJICAgIGNvZF9nZXRfc3ltX3ZhbHVlKGNvZF9tYW4sIFNITTBfU0hBUkVEX1JFU0VSVkVEX0JBU0VfU1lNLAorCQkJCSAgICAgICZ1bF9zaG0wX3JzcnZkX3N0YXJ0KTsKKwkJaWYgKHVsX3NobTBfcnNydmRfc3RhcnQgPT0gMCkgeworCQkJc3RhdHVzID0gLUVQRVJNOworCQkJZ290byBmdW5jX2VuZDsKKwkJfQorCX0KKwkvKiBSZWdpc3RlciB3aXRoIENNTSAqLworCWlmICghc3RhdHVzKSB7CisJCXN0YXR1cyA9IGRldl9nZXRfY21tX21ncihoaW9fbWdyLT5oZGV2X29iaiwgJmhpb19tZ3ItPmhjbW1fbWdyKTsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCXN0YXR1cyA9IGNtbV91bl9yZWdpc3Rlcl9ncHBzbV9zZWcoaGlvX21nci0+aGNtbV9tZ3IsCisJCQkJCQkJICAgQ01NX0FMTFNFR01FTlRTKTsKKwkJfQorCX0KKwkvKiBSZWdpc3RlciBuZXcgU00gcmVnaW9uKHMpICovCisJaWYgKCFzdGF0dXMgJiYgKHNobTBfZW5kIC0gdWxfc2htMF9iYXNlKSA+IDApIHsKKwkJLyogQ2FsYyBzaXplIChieXRlcykgb2YgU00gdGhlIEdQUCBjYW4gYWxsb2MgZnJvbSAqLworCQl1bF9yc3J2ZF9zaXplID0KKwkJICAgIChzaG0wX2VuZCAtIHVsX3NobTBfcnNydmRfc3RhcnQgKyAxKSAqIGhpb19tZ3ItPndvcmRfc2l6ZTsKKwkJaWYgKHVsX3JzcnZkX3NpemUgPD0gMCkgeworCQkJc3RhdHVzID0gLUVQRVJNOworCQkJZ290byBmdW5jX2VuZDsKKwkJfQorCQkvKiBDYWxjIHNpemUgb2YgU00gRFNQIGNhbiBhbGxvYyBmcm9tICovCisJCXVsX2RzcF9zaXplID0KKwkJICAgICh1bF9zaG0wX3JzcnZkX3N0YXJ0IC0gdWxfc2htMF9iYXNlKSAqIGhpb19tZ3ItPndvcmRfc2l6ZTsKKwkJaWYgKHVsX2RzcF9zaXplIDw9IDApIHsKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCWdvdG8gZnVuY19lbmQ7CisJCX0KKwkJLyogRmlyc3QgVExCIGVudHJ5IHJlc2VydmVkIGZvciBCcmlkZ2UgU00gdXNlLiAqLworCQl1bF9ncHBfcGh5cyA9IGhpb19tZ3ItPmV4dF9wcm9jX2luZm8udHlfdGxiWzBdLnVsX2dwcF9waHlzOworCQkvKiBHZXQgc2l6ZSBpbiBieXRlcyAqLworCQl1bF9kc3BfdmlydCA9CisJCSAgICBoaW9fbWdyLT5leHRfcHJvY19pbmZvLnR5X3RsYlswXS51bF9kc3BfdmlydCAqCisJCSAgICBoaW9fbWdyLT53b3JkX3NpemU7CisJCS8qCisJCSAqIENhbGMgYnl0ZSBvZmZzZXQgdXNlZCB0byBjb252ZXJ0IEdQUCBwaHlzIDwtPiBEU1AgYnl0ZQorCQkgKiBhZGRyZXNzLgorCQkgKi8KKwkJaWYgKGR3X2dwcF9iYXNlX3BhID4gdWxfZHNwX3ZpcnQpCisJCQlkd19vZmZzZXQgPSBkd19ncHBfYmFzZV9wYSAtIHVsX2RzcF92aXJ0OworCQllbHNlCisJCQlkd19vZmZzZXQgPSB1bF9kc3BfdmlydCAtIGR3X2dwcF9iYXNlX3BhOworCisJCWlmICh1bF9zaG0wX3JzcnZkX3N0YXJ0ICogaGlvX21nci0+d29yZF9zaXplIDwgdWxfZHNwX3ZpcnQpIHsKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCWdvdG8gZnVuY19lbmQ7CisJCX0KKwkJLyoKKwkJICogQ2FsYyBHcHAgcGh5cyBiYXNlIG9mIFNNIHJlZ2lvbi4KKwkJICogVGhpcyBpcyBhY3R1YWxseSB1bmNhY2hlZCBrZXJuZWwgdmlydHVhbCBhZGRyZXNzLgorCQkgKi8KKwkJZHdfZ3BwX2Jhc2VfdmEgPQorCQkgICAgdWxfZ3BwX3BoeXMgKyB1bF9zaG0wX3JzcnZkX3N0YXJ0ICogaGlvX21nci0+d29yZF9zaXplIC0KKwkJICAgIHVsX2RzcF92aXJ0OworCQkvKgorCQkgKiBDYWxjIEdwcCBwaHlzIGJhc2Ugb2YgU00gcmVnaW9uLgorCQkgKiBUaGlzIGlzIHRoZSBwaHlzaWNhbCBhZGRyZXNzLgorCQkgKi8KKwkJZHdfZ3BwX2Jhc2VfcGEgPQorCQkgICAgZHdfZ3BwX2Jhc2VfcGEgKyB1bF9zaG0wX3JzcnZkX3N0YXJ0ICogaGlvX21nci0+d29yZF9zaXplIC0KKwkJICAgIHVsX2RzcF92aXJ0OworCQkvKiBSZWdpc3RlciBTTSBTZWdtZW50IDAuICovCisJCXN0YXR1cyA9CisJCSAgICBjbW1fcmVnaXN0ZXJfZ3Bwc21fc2VnKGhpb19tZ3ItPmhjbW1fbWdyLCBkd19ncHBfYmFzZV9wYSwKKwkJCQkJICAgdWxfcnNydmRfc2l6ZSwgZHdfb2Zmc2V0LAorCQkJCQkgICAoZHdfZ3BwX2Jhc2VfcGEgPgorCQkJCQkgICAgdWxfZHNwX3ZpcnQpID8gQ01NX0FERFRPRFNQUEEgOgorCQkJCQkgICBDTU1fU1VCRlJPTURTUFBBLAorCQkJCQkgICAodTMyKSAodWxfc2htMF9iYXNlICoKKwkJCQkJCSAgaGlvX21nci0+d29yZF9zaXplKSwKKwkJCQkJICAgdWxfZHNwX3NpemUsICZ1bF9zaG1fc2VnX2lkMCwKKwkJCQkJICAgZHdfZ3BwX2Jhc2VfdmEpOworCQkvKiBGaXJzdCBTTSByZWdpb24gaXMgc2VnX2lkID0gMSAqLworCQlpZiAodWxfc2htX3NlZ19pZDAgIT0gMSkKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwl9CitmdW5jX2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBaQ1BZIElPIHJvdXRpbmVzLiAqLworLyoKKyAqICA9PT09PT09PSBJT19TSE1jb250cm9sID09PT09PT09CisgKiAgICAgIFNldHMgdGhlIHJlcXVlc3RlZCBzaG0gc2V0dGluZy4KKyAqLworaW50IGlvX3NoX21zZXR0aW5nKHN0cnVjdCBpb19tZ3IgKmhpb19tZ3IsIHU4IGRlc2MsIHZvaWQgKnBhcmdzKQoreworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9EVkZTCisJdTMyIGk7CisJc3RydWN0IGRzcGJyaWRnZV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9CisJICAgIG9tYXBfZHNwYnJpZGdlX2Rldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlzd2l0Y2ggKGRlc2MpIHsKKwljYXNlIFNITV9DVVJST1BQOgorCQkvKiBVcGRhdGUgdGhlIHNoYXJlZCBtZW1vcnkgd2l0aCByZXF1ZXN0ZWQgT1BQIGluZm9ybWF0aW9uICovCisJCWlmIChwYXJncyAhPSBOVUxMKQorCQkJaGlvX21nci0+c2hhcmVkX21lbS0+b3BwX3RhYmxlX3N0cnVjdC5jdXJyX29wcF9wdCA9CisJCQkgICAgKih1MzIgKikgcGFyZ3M7CisJCWVsc2UKKwkJCXJldHVybiAtRVBFUk07CisJCWJyZWFrOworCWNhc2UgU0hNX09QUElORk86CisJCS8qCisJCSAqIFVwZGF0ZSB0aGUgc2hhcmVkIG1lbW9yeSB3aXRoIHRoZSB2b2x0YWdlLCBmcmVxdWVuY3ksCisJCSAqIG1pbiBhbmQgbWF4IGZyZXF1ZW5jeSB2YWx1ZXMgZm9yIGFuIE9QUC4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPD0gZHNwX21heF9vcHBzOyBpKyspIHsKKwkJCWhpb19tZ3ItPnNoYXJlZF9tZW0tPm9wcF90YWJsZV9zdHJ1Y3Qub3BwX3BvaW50W2ldLgorCQkJICAgIHZvbHRhZ2UgPSB2ZGQxX2RzcF9mcmVxW2ldWzBdOworCQkJZGV2X2RiZyhicmlkZ2UsICJPUFAtc2htOiB2b2x0YWdlOiAlZFxuIiwKKwkJCQl2ZGQxX2RzcF9mcmVxW2ldWzBdKTsKKwkJCWhpb19tZ3ItPnNoYXJlZF9tZW0tPm9wcF90YWJsZV9zdHJ1Y3QuCisJCQkgICAgb3BwX3BvaW50W2ldLmZyZXF1ZW5jeSA9IHZkZDFfZHNwX2ZyZXFbaV1bMV07CisJCQlkZXZfZGJnKGJyaWRnZSwgIk9QUC1zaG06IGZyZXF1ZW5jeTogJWRcbiIsCisJCQkJdmRkMV9kc3BfZnJlcVtpXVsxXSk7CisJCQloaW9fbWdyLT5zaGFyZWRfbWVtLT5vcHBfdGFibGVfc3RydWN0Lm9wcF9wb2ludFtpXS4KKwkJCSAgICBtaW5fZnJlcSA9IHZkZDFfZHNwX2ZyZXFbaV1bMl07CisJCQlkZXZfZGJnKGJyaWRnZSwgIk9QUC1zaG06IG1pbiBmcmVxOiAlZFxuIiwKKwkJCQl2ZGQxX2RzcF9mcmVxW2ldWzJdKTsKKwkJCWhpb19tZ3ItPnNoYXJlZF9tZW0tPm9wcF90YWJsZV9zdHJ1Y3Qub3BwX3BvaW50W2ldLgorCQkJICAgIG1heF9mcmVxID0gdmRkMV9kc3BfZnJlcVtpXVszXTsKKwkJCWRldl9kYmcoYnJpZGdlLCAiT1BQLXNobTogbWF4IGZyZXE6ICVkXG4iLAorCQkJCXZkZDFfZHNwX2ZyZXFbaV1bM10pOworCQl9CisJCWhpb19tZ3ItPnNoYXJlZF9tZW0tPm9wcF90YWJsZV9zdHJ1Y3QubnVtX29wcF9wdHMgPQorCQkgICAgZHNwX21heF9vcHBzOworCQlkZXZfZGJnKGJyaWRnZSwgIk9QUC1zaG06IG1heCBPUFAgbnVtYmVyOiAlZFxuIiwgZHNwX21heF9vcHBzKTsKKwkJLyogVXBkYXRlIHRoZSBjdXJyZW50IE9QUCBudW1iZXIgKi8KKwkJaWYgKHBkYXRhLT5kc3BfZ2V0X29wcCkKKwkJCWkgPSAoKnBkYXRhLT5kc3BfZ2V0X29wcCkgKCk7CisJCWhpb19tZ3ItPnNoYXJlZF9tZW0tPm9wcF90YWJsZV9zdHJ1Y3QuY3Vycl9vcHBfcHQgPSBpOworCQlkZXZfZGJnKGJyaWRnZSwgIk9QUC1zaG06IHZhbHVlIHByb2dyYW1tZWQgPSAlZFxuIiwgaSk7CisJCWJyZWFrOworCWNhc2UgU0hNX0dFVE9QUDoKKwkJLyogR2V0IHRoZSBPUFAgdGhhdCBEU1AgaGFzIHJlcXVlc3RlZCAqLworCQkqKHUzMiAqKSBwYXJncyA9IGhpb19tZ3ItPnNoYXJlZF9tZW0tPm9wcF9yZXF1ZXN0LnJxc3Rfb3BwX3B0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfaW9fZ2V0X3Byb2NfbG9hZCA9PT09PT09PQorICogICAgICBHZXRzIHRoZSBQcm9jZXNzb3IncyBMb2FkIGluZm9ybWF0aW9uCisgKi8KK2ludCBicmlkZ2VfaW9fZ2V0X3Byb2NfbG9hZChzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyLAorCQkJCXN0cnVjdCBkc3BfcHJvY2xvYWRzdGF0ICpwcm9jX2xzdGF0KQoreworCXByb2NfbHN0YXQtPmN1cnJfbG9hZCA9CisJCQloaW9fbWdyLT5zaGFyZWRfbWVtLT5sb2FkX21vbl9pbmZvLmN1cnJfZHNwX2xvYWQ7CisJcHJvY19sc3RhdC0+cHJlZGljdGVkX2xvYWQgPQorCSAgICBoaW9fbWdyLT5zaGFyZWRfbWVtLT5sb2FkX21vbl9pbmZvLnByZWRfZHNwX2xvYWQ7CisJcHJvY19sc3RhdC0+Y3Vycl9kc3BfZnJlcSA9CisJICAgIGhpb19tZ3ItPnNoYXJlZF9tZW0tPmxvYWRfbW9uX2luZm8uY3Vycl9kc3BfZnJlcTsKKwlwcm9jX2xzdGF0LT5wcmVkaWN0ZWRfZnJlcSA9CisJICAgIGhpb19tZ3ItPnNoYXJlZF9tZW0tPmxvYWRfbW9uX2luZm8ucHJlZF9kc3BfZnJlcTsKKworCWRldl9kYmcoYnJpZGdlLCAiQ3VyciBMb2FkID0gJWQsIFByZWQgTG9hZCA9ICVkLCBDdXJyIEZyZXEgPSAlZCwgIgorCQkiUHJlZCBGcmVxID0gJWRcbiIsIHByb2NfbHN0YXQtPmN1cnJfbG9hZCwKKwkJcHJvY19sc3RhdC0+cHJlZGljdGVkX2xvYWQsIHByb2NfbHN0YXQtPmN1cnJfZHNwX2ZyZXEsCisJCXByb2NfbHN0YXQtPnByZWRpY3RlZF9mcmVxKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBpb19zbV9pbml0KHZvaWQpCit7CisJLyogRG8gbm90aGluZyAqLworfQorCisjaWYgZGVmaW5lZChDT05GSUdfVElEU1BCUklER0VfQkFDS1RSQUNFKSB8fCBkZWZpbmVkKENPTkZJR19USURTUEJSSURHRV9ERUJVRykKK3ZvaWQgcHJpbnRfZHNwX2RlYnVnX3RyYWNlKHN0cnVjdCBpb19tZ3IgKmhpb19tZ3IpCit7CisJdTMyIHVsX25ld19tZXNzYWdlX2xlbmd0aCA9IDAsIHVsX2dwcF9jdXJfcG9pbnRlcjsKKworCXdoaWxlICh0cnVlKSB7CisJCS8qIEdldCB0aGUgRFNQIGN1cnJlbnQgcG9pbnRlciAqLworCQl1bF9ncHBfY3VyX3BvaW50ZXIgPQorCQkgICAgKih1MzIgKikgKGhpb19tZ3ItPnVsX3RyYWNlX2J1ZmZlcl9jdXJyZW50KTsKKwkJdWxfZ3BwX2N1cl9wb2ludGVyID0KKwkJICAgIGhpb19tZ3ItPnVsX2dwcF92YSArICh1bF9ncHBfY3VyX3BvaW50ZXIgLQorCQkJCQkgIGhpb19tZ3ItPnVsX2RzcF92YSk7CisKKwkJLyogTm8gbmV3IGRlYnVnIG1lc3NhZ2VzIGF2YWlsYWJsZSB5ZXQgKi8KKwkJaWYgKHVsX2dwcF9jdXJfcG9pbnRlciA9PSBoaW9fbWdyLT51bF9ncHBfcmVhZF9wb2ludGVyKSB7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmICh1bF9ncHBfY3VyX3BvaW50ZXIgPiBoaW9fbWdyLT51bF9ncHBfcmVhZF9wb2ludGVyKSB7CisJCQkvKiBDb250aW51b3VzIGRhdGEgKi8KKwkJCXVsX25ld19tZXNzYWdlX2xlbmd0aCA9CisJCQkgICAgdWxfZ3BwX2N1cl9wb2ludGVyIC0gaGlvX21nci0+dWxfZ3BwX3JlYWRfcG9pbnRlcjsKKworCQkJbWVtY3B5KGhpb19tZ3ItPnBtc2csCisJCQkgICAgICAgKGNoYXIgKiloaW9fbWdyLT51bF9ncHBfcmVhZF9wb2ludGVyLAorCQkJICAgICAgIHVsX25ld19tZXNzYWdlX2xlbmd0aCk7CisJCQloaW9fbWdyLT5wbXNnW3VsX25ld19tZXNzYWdlX2xlbmd0aF0gPSAnXDAnOworCQkJLyoKKwkJCSAqIEFkdmFuY2UgdGhlIEdQUCB0cmFjZSBwb2ludGVyIHRvIERTUCBjdXJyZW50CisJCQkgKiBwb2ludGVyLgorCQkJICovCisJCQloaW9fbWdyLT51bF9ncHBfcmVhZF9wb2ludGVyICs9IHVsX25ld19tZXNzYWdlX2xlbmd0aDsKKwkJCS8qIFByaW50IHRoZSB0cmFjZSBtZXNzYWdlcyAqLworCQkJcHJfaW5mbygiRFNQVHJhY2U6ICVzXG4iLCBoaW9fbWdyLT5wbXNnKTsKKwkJfSBlbHNlIGlmICh1bF9ncHBfY3VyX3BvaW50ZXIgPCBoaW9fbWdyLT51bF9ncHBfcmVhZF9wb2ludGVyKSB7CisJCQkvKiBIYW5kbGUgdHJhY2UgYnVmZmVyIHdyYXBhcm91bmQgKi8KKwkJCW1lbWNweShoaW9fbWdyLT5wbXNnLAorCQkJICAgICAgIChjaGFyICopaGlvX21nci0+dWxfZ3BwX3JlYWRfcG9pbnRlciwKKwkJCSAgICAgICBoaW9fbWdyLT51bF90cmFjZV9idWZmZXJfZW5kIC0KKwkJCSAgICAgICBoaW9fbWdyLT51bF9ncHBfcmVhZF9wb2ludGVyKTsKKwkJCXVsX25ld19tZXNzYWdlX2xlbmd0aCA9CisJCQkgICAgdWxfZ3BwX2N1cl9wb2ludGVyIC0gaGlvX21nci0+dWxfdHJhY2VfYnVmZmVyX2JlZ2luOworCQkJbWVtY3B5KCZoaW9fbWdyLT5wbXNnW2hpb19tZ3ItPnVsX3RyYWNlX2J1ZmZlcl9lbmQgLQorCQkJCQkgICAgICBoaW9fbWdyLT51bF9ncHBfcmVhZF9wb2ludGVyXSwKKwkJCSAgICAgICAoY2hhciAqKWhpb19tZ3ItPnVsX3RyYWNlX2J1ZmZlcl9iZWdpbiwKKwkJCSAgICAgICB1bF9uZXdfbWVzc2FnZV9sZW5ndGgpOworCQkJaGlvX21nci0+cG1zZ1toaW9fbWdyLT51bF90cmFjZV9idWZmZXJfZW5kIC0KKwkJCQkgICAgICBoaW9fbWdyLT51bF9ncHBfcmVhZF9wb2ludGVyICsKKwkJCQkgICAgICB1bF9uZXdfbWVzc2FnZV9sZW5ndGhdID0gJ1wwJzsKKwkJCS8qCisJCQkgKiBBZHZhbmNlIHRoZSBHUFAgdHJhY2UgcG9pbnRlciB0byBEU1AgY3VycmVudAorCQkJICogcG9pbnRlci4KKwkJCSAqLworCQkJaGlvX21nci0+dWxfZ3BwX3JlYWRfcG9pbnRlciA9CisJCQkgICAgaGlvX21nci0+dWxfdHJhY2VfYnVmZmVyX2JlZ2luICsKKwkJCSAgICB1bF9uZXdfbWVzc2FnZV9sZW5ndGg7CisJCQkvKiBQcmludCB0aGUgdHJhY2UgbWVzc2FnZXMgKi8KKwkJCXByX2luZm8oIkRTUFRyYWNlOiAlc1xuIiwgaGlvX21nci0+cG1zZyk7CisJCX0KKwl9Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9CQUNLVFJBQ0UKKy8qCisgKiAgPT09PT09PT0gcHJpbnRfZHNwX3RyYWNlX2J1ZmZlciA9PT09PT09PQorICogICAgICBQcmludHMgdGhlIHRyYWNlIGJ1ZmZlciByZXR1cm5lZCBmcm9tIHRoZSBEU1AgKGlmIERCR19UcmFjZSBpcyBlbmFibGVkKS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgaGRlaF9tZ3I6ICAgICAgICAgIEhhbmRsZSB0byBERUggbWFuYWdlciBvYmplY3QKKyAqICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBleHRyYSBjYXJyaWFnZSByZXR1cm5zIHRvIGdlbmVyYXRlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRU5PTUVNOiAgICBVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5LgorICogIFJlcXVpcmVzOgorICogICAgICBoZGVoX21nciBtdXNlIGJlIHZhbGlkLiBDaGVja2VkIGluIGJyaWRnZV9kZWhfbm90aWZ5LgorICovCitpbnQgcHJpbnRfZHNwX3RyYWNlX2J1ZmZlcihzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpoYnJpZGdlX2NvbnRleHQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGNvZF9tYW5hZ2VyICpjb2RfbWdyOworCXUzMiB1bF90cmFjZV9lbmQ7CisJdTMyIHVsX3RyYWNlX2JlZ2luOworCXUzMiB0cmFjZV9jdXJfcG9zOworCXUzMiB1bF9udW1fYnl0ZXMgPSAwOworCXUzMiB1bF9udW1fd29yZHMgPSAwOworCXUzMiB1bF93b3JkX3NpemUgPSAyOworCWNoYXIgKnBzel9idWY7CisJY2hhciAqc3RyX2JlZzsKKwljaGFyICp0cmFjZV9lbmQ7CisJY2hhciAqYnVmX2VuZDsKKwljaGFyICpuZXdfbGluZTsKKworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKnBicmlkZ2VfY29udGV4dCA9IGhicmlkZ2VfY29udGV4dDsKKwlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKKwlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaiA9IChzdHJ1Y3QgZGV2X29iamVjdCAqKQorCSAgICBwYnJpZGdlX2NvbnRleHQtPmhkZXZfb2JqOworCisJc3RhdHVzID0gZGV2X2dldF9jb2RfbWdyKGRldl9vYmosICZjb2RfbWdyKTsKKworCWlmIChjb2RfbWdyKSB7CisJCS8qIExvb2sgZm9yIFNZU19QVVRDQkVHL1NZU19QVVRDRU5EICovCisJCXN0YXR1cyA9CisJCSAgICBjb2RfZ2V0X3N5bV92YWx1ZShjb2RfbWdyLCBDT0RfVFJBQ0VCRUcsICZ1bF90cmFjZV9iZWdpbik7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisJaWYgKCFzdGF0dXMpCisJCXN0YXR1cyA9CisJCSAgICBjb2RfZ2V0X3N5bV92YWx1ZShjb2RfbWdyLCBDT0RfVFJBQ0VFTkQsICZ1bF90cmFjZV9lbmQpOworCisJaWYgKCFzdGF0dXMpCisJCS8qIHRyYWNlX2N1cl9wb3Mgd2lsbCBob2xkIHRoZSBhZGRyZXNzIG9mIGEgRFNQIHBvaW50ZXIgKi8KKwkJc3RhdHVzID0gY29kX2dldF9zeW1fdmFsdWUoY29kX21nciwgQ09EX1RSQUNFQ1VSUE9TLAorCQkJCQkJCSZ0cmFjZV9jdXJfcG9zKTsKKworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisKKwl1bF9udW1fYnl0ZXMgPSAodWxfdHJhY2VfZW5kIC0gdWxfdHJhY2VfYmVnaW4pOworCisJdWxfbnVtX3dvcmRzID0gdWxfbnVtX2J5dGVzICogdWxfd29yZF9zaXplOworCXN0YXR1cyA9IGRldl9nZXRfaW50Zl9meG5zKGRldl9vYmosICZpbnRmX2Z4bnMpOworCisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2VuZDsKKworCXBzel9idWYgPSBremFsbG9jKHVsX251bV9ieXRlcyArIDIsIEdGUF9BVE9NSUMpOworCWlmIChwc3pfYnVmICE9IE5VTEwpIHsKKwkJLyogUmVhZCB0cmFjZSBidWZmZXIgZGF0YSAqLworCQlzdGF0dXMgPSAoKmludGZfZnhucy0+cGZuX2JyZF9yZWFkKShwYnJpZGdlX2NvbnRleHQsCisJCQkodTggKilwc3pfYnVmLCAodTMyKXVsX3RyYWNlX2JlZ2luLAorCQkJdWxfbnVtX2J5dGVzLCAwKTsKKworCQlpZiAoc3RhdHVzKQorCQkJZ290byBmdW5jX2VuZDsKKworCQkvKiBQYWNrIGFuZCBkbyBuZXdsaW5lIGNvbnZlcnNpb24gKi8KKwkJcHJfZGVidWcoIlByaW50RHNwVHJhY2VCdWZmZXI6ICIKKwkJCSJiZWZvcmUgcGFjayBhbmQgdW5wYWNrLlxuIik7CisJCXByX2RlYnVnKCIlczogRFNQIFRyYWNlIEJ1ZmZlciBCZWdpbjpcbiIKKwkJCSI9PT09PT09PT09PT09PT09PT09PT09PVxuJXNcbiIsCisJCQlfX2Z1bmNfXywgcHN6X2J1Zik7CisKKwkJLyogUmVhZCB0aGUgdmFsdWUgYXQgdGhlIERTUCBhZGRyZXNzIGluIHRyYWNlX2N1cl9wb3MuICovCisJCXN0YXR1cyA9ICgqaW50Zl9meG5zLT5wZm5fYnJkX3JlYWQpKHBicmlkZ2VfY29udGV4dCwKKwkJCQkodTggKikmdHJhY2VfY3VyX3BvcywgKHUzMil0cmFjZV9jdXJfcG9zLAorCQkJCTQsIDApOworCQlpZiAoc3RhdHVzKQorCQkJZ290byBmdW5jX2VuZDsKKwkJLyogUGFjayBhbmQgZG8gbmV3bGluZSBjb252ZXJzaW9uICovCisJCXByX2luZm8oIkRTUCBUcmFjZSBCdWZmZXIgQmVnaW46XG4iCisJCQkiPT09PT09PT09PT09PT09PT09PT09PT1cbiVzXG4iLAorCQkJcHN6X2J1Zik7CisKKworCQkvKiBjb252ZXJ0IHRvIG9mZnNldCAqLworCQl0cmFjZV9jdXJfcG9zID0gdHJhY2VfY3VyX3BvcyAtIHVsX3RyYWNlX2JlZ2luOworCisJCWlmICh1bF9udW1fYnl0ZXMpIHsKKwkJCS8qCisJCQkgKiBUaGUgYnVmZmVyIGlzIG5vdCBmdWxsLCBmaW5kIHRoZSBlbmQgb2YgdGhlCisJCQkgKiBkYXRhIC0tIGJ1Zl9lbmQgd2lsbCBiZSA+PSBwc3pCdWYgYWZ0ZXIKKwkJCSAqIHdoaWxlLgorCQkJICovCisJCQlidWZfZW5kID0gJnBzel9idWZbdWxfbnVtX2J5dGVzKzFdOworCQkJLyogRFNQIHByaW50IHBvc2l0aW9uICovCisJCQl0cmFjZV9lbmQgPSAmcHN6X2J1Zlt0cmFjZV9jdXJfcG9zXTsKKworCQkJLyoKKwkJCSAqIFNlYXJjaCBidWZmZXIgZm9yIGEgbmV3X2xpbmUgYW5kIHJlcGxhY2UgaXQKKwkJCSAqIHdpdGggJ1wwJywgdGhlbiBwcmludCBhcyBzdHJpbmcuCisJCQkgKiBDb250aW51ZSB1bnRpbCBlbmQgb2YgYnVmZmVyIGlzIHJlYWNoZWQuCisJCQkgKi8KKwkJCXN0cl9iZWcgPSB0cmFjZV9lbmQ7CisJCQl1bF9udW1fYnl0ZXMgPSBidWZfZW5kIC0gc3RyX2JlZzsKKworCQkJd2hpbGUgKHN0cl9iZWcgPCBidWZfZW5kKSB7CisJCQkJbmV3X2xpbmUgPSBzdHJuY2hyKHN0cl9iZWcsIHVsX251bV9ieXRlcywKKwkJCQkJCQkJJ1xuJyk7CisJCQkJaWYgKG5ld19saW5lICYmIG5ld19saW5lIDwgYnVmX2VuZCkgeworCQkJCQkqbmV3X2xpbmUgPSAwOworCQkJCQlwcl9kZWJ1ZygiJXNcbiIsIHN0cl9iZWcpOworCQkJCQlzdHJfYmVnID0gKytuZXdfbGluZTsKKwkJCQkJdWxfbnVtX2J5dGVzID0gYnVmX2VuZCAtIHN0cl9iZWc7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyoKKwkJCQkJICogQXNzdW1lIGJ1ZmZlciBlbXB0eSBpZiBpdCBjb250YWlucworCQkJCQkgKiBhIHplcm8KKwkJCQkJICovCisJCQkJCWlmICgqc3RyX2JlZyAhPSAnXDAnKSB7CisJCQkJCQlzdHJfYmVnW3VsX251bV9ieXRlc10gPSAwOworCQkJCQkJcHJfZGVidWcoIiVzXG4iLCBzdHJfYmVnKTsKKwkJCQkJfQorCQkJCQlzdHJfYmVnID0gYnVmX2VuZDsKKwkJCQkJdWxfbnVtX2J5dGVzID0gMDsKKwkJCQl9CisJCQl9CisJCQkvKgorCQkJICogU2VhcmNoIGJ1ZmZlciBmb3IgYSBuTmV3TGluZSBhbmQgcmVwbGFjZSBpdAorCQkJICogd2l0aCAnXDAnLCB0aGVuIHByaW50IGFzIHN0cmluZy4KKwkJCSAqIENvbnRpbnVlIHVudGlsIGJ1ZmZlciBpcyBleGhhdXN0ZWQuCisJCQkgKi8KKwkJCXN0cl9iZWcgPSBwc3pfYnVmOworCQkJdWxfbnVtX2J5dGVzID0gdHJhY2VfZW5kIC0gc3RyX2JlZzsKKworCQkJd2hpbGUgKHN0cl9iZWcgPCB0cmFjZV9lbmQpIHsKKwkJCQluZXdfbGluZSA9IHN0cm5jaHIoc3RyX2JlZywgdWxfbnVtX2J5dGVzLCAnXG4nKTsKKwkJCQlpZiAobmV3X2xpbmUgIT0gTlVMTCAmJiBuZXdfbGluZSA8IHRyYWNlX2VuZCkgeworCQkJCQkqbmV3X2xpbmUgPSAwOworCQkJCQlwcl9kZWJ1ZygiJXNcbiIsIHN0cl9iZWcpOworCQkJCQlzdHJfYmVnID0gKytuZXdfbGluZTsKKwkJCQkJdWxfbnVtX2J5dGVzID0gdHJhY2VfZW5kIC0gc3RyX2JlZzsKKwkJCQl9IGVsc2UgeworCQkJCQkvKgorCQkJCQkgKiBBc3N1bWUgYnVmZmVyIGVtcHR5IGlmIGl0IGNvbnRhaW5zCisJCQkJCSAqIGEgemVybworCQkJCQkgKi8KKwkJCQkJaWYgKCpzdHJfYmVnICE9ICdcMCcpIHsKKwkJCQkJCXN0cl9iZWdbdWxfbnVtX2J5dGVzXSA9IDA7CisJCQkJCQlwcl9kZWJ1ZygiJXNcbiIsIHN0cl9iZWcpOworCQkJCQl9CisJCQkJCXN0cl9iZWcgPSB0cmFjZV9lbmQ7CisJCQkJCXVsX251bV9ieXRlcyA9IDA7CisJCQkJfQorCQkJfQorCQl9CisJCXByX2luZm8oIlxuPT09PT09PT09PT09PT09PT09PT09PT1cbiIKKwkJCSJEU1AgVHJhY2UgQnVmZmVyIEVuZDpcbiIpOworCQlrZnJlZShwc3pfYnVmKTsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCX0KK2Z1bmNfZW5kOgorCWlmIChzdGF0dXMpCisJCWRldl9kYmcoYnJpZGdlLCAiJXMgRmFpbGVkLCBzdGF0dXMgMHgleFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBkdW1wX2RzcF9zdGFjaygpIC0gVGhpcyBmdW5jdGlvbiBkdW1wcyB0aGUgZGF0YSBvbiB0aGUgRFNQIHN0YWNrLgorICogQGJyaWRnZV9jb250ZXh0OglCcmlkZ2UgZHJpdmVyJ3MgZGV2aWNlIGNvbnRleHQgcG9pbnRlci4KKyAqCisgKi8KK2ludCBkdW1wX2RzcF9zdGFjayhzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpicmlkZ2VfY29udGV4dCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgY29kX21hbmFnZXIgKmNvZGVfbWdyOworCXN0cnVjdCBub2RlX21nciAqbm9kZV9tZ3I7CisJdTMyIHRyYWNlX2JlZ2luOworCWNoYXIgbmFtZVsyNTZdOworCXN0cnVjdCB7CisJCXUzMiBoZWFkWzJdOworCQl1MzIgc2l6ZTsKKwl9IG1tdV9mYXVsdF9kYmdfaW5mbzsKKwl1MzIgKmJ1ZmZlcjsKKwl1MzIgKmJ1ZmZlcl9iZWc7CisJdTMyICpidWZmZXJfZW5kOworCXUzMiBleGNfdHlwZTsKKwl1MzIgZHluX2V4dF9iYXNlOworCXUzMiBpOworCXUzMiBvZmZzZXRfb3V0cHV0OworCXUzMiB0b3RhbF9zaXplOworCXUzMiBwb2xsX2NudDsKKwljb25zdCBjaGFyICpkc3BfcmVnc1tdID0geyJFRlIiLCAiSUVSUiIsICJJVFNSIiwgIk5UU1IiLAorCQkJCSJJUlAiLCAiTlJQIiwgIkFNUiIsICJTU1IiLAorCQkJCSJJTEMiLCAiUklMQyIsICJJRVIiLCAiQ1NSIn07CisJY29uc3QgY2hhciAqZXhlY19jdHh0W10gPSB7IlRhc2siLCAiU1dJIiwgIkhXSSIsICJVbmtub3duIn07CisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisJc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmplY3QgPSBicmlkZ2VfY29udGV4dC0+aGRldl9vYmo7CisKKwlzdGF0dXMgPSBkZXZfZ2V0X2NvZF9tZ3IoZGV2X29iamVjdCwgJmNvZGVfbWdyKTsKKwlpZiAoIWNvZGVfbWdyKSB7CisJCXByX2RlYnVnKCIlczogRmFpbGVkIG9uIGRldl9nZXRfY29kX21nci5cbiIsIF9fZnVuY19fKTsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisKKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPSBkZXZfZ2V0X25vZGVfbWFuYWdlcihkZXZfb2JqZWN0LCAmbm9kZV9tZ3IpOworCQlpZiAoIW5vZGVfbWdyKSB7CisJCQlwcl9kZWJ1ZygiJXM6IEZhaWxlZCBvbiBkZXZfZ2V0X25vZGVfbWFuYWdlci5cbiIsCisJCQkJCQkJCV9fZnVuY19fKTsKKwkJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCX0KKwl9CisKKwlpZiAoIXN0YXR1cykgeworCQkvKiBMb29rIGZvciBTWVNfUFVUQ0JFRy9TWVNfUFVUQ0VORDogKi8KKwkJc3RhdHVzID0KKwkJCWNvZF9nZXRfc3ltX3ZhbHVlKGNvZGVfbWdyLCBDT0RfVFJBQ0VCRUcsICZ0cmFjZV9iZWdpbik7CisJCXByX2RlYnVnKCIlczogdHJhY2VfYmVnaW4gVmFsdWUgMHgleFxuIiwKKwkJCV9fZnVuY19fLCB0cmFjZV9iZWdpbik7CisJCWlmIChzdGF0dXMpCisJCQlwcl9kZWJ1ZygiJXM6IEZhaWxlZCBvbiBjb2RfZ2V0X3N5bV92YWx1ZS5cbiIsCisJCQkJCQkJCV9fZnVuY19fKTsKKwl9CisJaWYgKCFzdGF0dXMpCisJCXN0YXR1cyA9IGRldl9nZXRfaW50Zl9meG5zKGRldl9vYmplY3QsICZpbnRmX2Z4bnMpOworCS8qCisJICogQ2hlY2sgZm9yIHRoZSAibWFnaWMgbnVtYmVyIiBpbiB0aGUgdHJhY2UgYnVmZmVyLiAgSWYgaXQgaGFzCisJICogeWV0IHRvIGFwcGVhciB0aGVuIHBvbGwgdGhlIHRyYWNlIGJ1ZmZlciB0byB3YWl0IGZvciBpdC4gIEl0cworCSAqIGFwcGVhcmFuY2Ugc2lnbmFscyB0aGF0IHRoZSBEU1AgaGFzIGZpbmlzaGVkIGR1bXBpbmcgaXRzIHN0YXRlLgorCSAqLworCW1tdV9mYXVsdF9kYmdfaW5mby5oZWFkWzBdID0gMDsKKwltbXVfZmF1bHRfZGJnX2luZm8uaGVhZFsxXSA9IDA7CisJaWYgKCFzdGF0dXMpIHsKKwkJcG9sbF9jbnQgPSAwOworCQl3aGlsZSAoKG1tdV9mYXVsdF9kYmdfaW5mby5oZWFkWzBdICE9IE1NVV9GQVVMVF9IRUFEMSB8fAorCQkJbW11X2ZhdWx0X2RiZ19pbmZvLmhlYWRbMV0gIT0gTU1VX0ZBVUxUX0hFQUQyKSAmJgorCQkJcG9sbF9jbnQgPCBQT0xMX01BWCkgeworCisJCQkvKiBSZWFkIERTUCBkdW1wIHNpemUgZnJvbSB0aGUgRFNQIHRyYWNlIGJ1ZmZlci4uLiAqLworCQkJc3RhdHVzID0gKCppbnRmX2Z4bnMtPnBmbl9icmRfcmVhZCkoYnJpZGdlX2NvbnRleHQsCisJCQkJKHU4ICopJm1tdV9mYXVsdF9kYmdfaW5mbywgKHUzMil0cmFjZV9iZWdpbiwKKwkJCQlzaXplb2YobW11X2ZhdWx0X2RiZ19pbmZvKSwgMCk7CisKKwkJCWlmIChzdGF0dXMpCisJCQkJYnJlYWs7CisKKwkJCXBvbGxfY250Kys7CisJCX0KKworCQlpZiAobW11X2ZhdWx0X2RiZ19pbmZvLmhlYWRbMF0gIT0gTU1VX0ZBVUxUX0hFQUQxICYmCisJCQltbXVfZmF1bHRfZGJnX2luZm8uaGVhZFsxXSAhPSBNTVVfRkFVTFRfSEVBRDIpIHsKKwkJCXN0YXR1cyA9IC1FVElNRTsKKwkJCXByX2VycigiJXM6Tm8gRFNQIE1NVS1GYXVsdCBpbmZvcm1hdGlvbiBhdmFpbGFibGUuXG4iLAorCQkJCQkJCV9fZnVuY19fKTsKKwkJfQorCX0KKworCWlmICghc3RhdHVzKSB7CisJCXRvdGFsX3NpemUgPSBtbXVfZmF1bHRfZGJnX2luZm8uc2l6ZTsKKwkJLyogTGltaXQgdGhlIHNpemUgaW4gY2FzZSBEU1Agd2VudCBjcmF6eSAqLworCQlpZiAodG90YWxfc2l6ZSA+IE1BWF9NTVVfREJHQlVGRikKKwkJCXRvdGFsX3NpemUgPSBNQVhfTU1VX0RCR0JVRkY7CisKKwkJYnVmZmVyID0ga3phbGxvYyh0b3RhbF9zaXplLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFidWZmZXIpIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlwcl9kZWJ1ZygiJXM6IEZhaWxlZCB0byAiCisJCQkJImFsbG9jYXRlIHN0YWNrIGR1bXAgYnVmZmVyLlxuIiwgX19mdW5jX18pOworCQkJZ290byBmdW5jX2VuZDsKKwkJfQorCisJCWJ1ZmZlcl9iZWcgPSBidWZmZXI7CisJCWJ1ZmZlcl9lbmQgPSAgYnVmZmVyICsgdG90YWxfc2l6ZSAvIDQ7CisKKwkJLyogUmVhZCBieXRlcyBmcm9tIHRoZSBEU1AgdHJhY2UgYnVmZmVyLi4uICovCisJCXN0YXR1cyA9ICgqaW50Zl9meG5zLT5wZm5fYnJkX3JlYWQpKGJyaWRnZV9jb250ZXh0LAorCQkJCSh1OCAqKWJ1ZmZlciwgKHUzMil0cmFjZV9iZWdpbiwKKwkJCQl0b3RhbF9zaXplLCAwKTsKKwkJaWYgKHN0YXR1cykgeworCQkJcHJfZGVidWcoIiVzOiBGYWlsZWQgdG8gUmVhZCBUcmFjZSBCdWZmZXIuXG4iLAorCQkJCQkJCQlfX2Z1bmNfXyk7CisJCQlnb3RvIGZ1bmNfZW5kOworCQl9CisKKwkJcHJfZXJyKCJcbkFwcm94aW1hdGUgQ3Jhc2ggUG9zaXRpb246XG4iCisJCQkiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCisJCWV4Y190eXBlID0gYnVmZmVyWzNdOworCQlpZiAoIWV4Y190eXBlKQorCQkJaSA9IGJ1ZmZlcls3OV07ICAgICAgICAgLyogSVJQICovCisJCWVsc2UKKwkJCWkgPSBidWZmZXJbODBdOyAgICAgICAgIC8qIE5SUCAqLworCisJCXN0YXR1cyA9CisJCSAgICBjb2RfZ2V0X3N5bV92YWx1ZShjb2RlX21nciwgRFlORVhUQkFTRSwgJmR5bl9leHRfYmFzZSk7CisJCWlmIChzdGF0dXMpIHsKKwkJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCQlnb3RvIGZ1bmNfZW5kOworCQl9CisKKwkJaWYgKChpID4gZHluX2V4dF9iYXNlKSAmJiAobm9kZV9maW5kX2FkZHIobm9kZV9tZ3IsIGksCisJCQkweDEwMDAsICZvZmZzZXRfb3V0cHV0LCBuYW1lKSA9PSAwKSkKKwkJCXByX2VycigiMHglLTh4IFtcIiVzXCIgKyAweCV4XVxuIiwgaSwgbmFtZSwKKwkJCQkJCQlpIC0gb2Zmc2V0X291dHB1dCk7CisJCWVsc2UKKwkJCXByX2VycigiMHglLTh4IFtVbmFibGUgdG8gbWF0Y2ggdG8gYSBzeW1ib2wuXVxuIiwgaSk7CisKKwkJYnVmZmVyICs9IDQ7CisKKwkJcHJfZXJyKCJcbkV4ZWN1dGlvbiBJbmZvOlxuIgorCQkJIi0tLS0tLS0tLS0tLS0tLVxuIik7CisKKwkJaWYgKCpidWZmZXIgPCBBUlJBWV9TSVpFKGV4ZWNfY3R4dCkpIHsKKwkJCXByX2VycigiRXhlY3V0aW9uIGNvbnRleHQgXHQlc1xuIiwKKwkJCQlleGVjX2N0eHRbKmJ1ZmZlcisrXSk7CisJCX0gZWxzZSB7CisJCQlwcl9lcnIoIkV4ZWN1dGlvbiBjb250ZXh0IGNvcnJ1cHRcbiIpOworCQkJa2ZyZWUoYnVmZmVyX2JlZyk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQlwcl9lcnIoIlRhc2sgSGFuZGxlXHRcdDB4JXhcbiIsICpidWZmZXIrKyk7CisJCXByX2VycigiU3RhY2sgUG9pbnRlclx0XHQweCV4XG4iLCAqYnVmZmVyKyspOworCQlwcl9lcnIoIlN0YWNrIFRvcFx0XHQweCV4XG4iLCAqYnVmZmVyKyspOworCQlwcl9lcnIoIlN0YWNrIEJvdHRvbVx0XHQweCV4XG4iLCAqYnVmZmVyKyspOworCQlwcl9lcnIoIlN0YWNrIFNpemVcdFx0MHgleFxuIiwgKmJ1ZmZlcisrKTsKKwkJcHJfZXJyKCJTdGFjayBTaXplIEluIFVzZVx0MHgleFxuIiwgKmJ1ZmZlcisrKTsKKworCQlwcl9lcnIoIlxuQ1BVIFJlZ2lzdGVyc1xuIgorCQkJIi0tLS0tLS0tLS0tLS0tLVxuIik7CisKKwkJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJCWlmIChpID09IDQgfHwgaSA9PSA2IHx8IGkgPT0gOCkKKwkJCQlwcl9lcnIoIkElZCAweCUtOHggW0Z1bmN0aW9uIEFyZ3VtZW50ICVkXVxuIiwKKwkJCQkJCQlpLCAqYnVmZmVyKyssIGktMyk7CisJCQllbHNlIGlmIChpID09IDE1KQorCQkJCXByX2VycigiQTE1IDB4JS04eCBbRnJhbWUgUG9pbnRlcl1cbiIsCisJCQkJCQkJCSpidWZmZXIrKyk7CisJCQllbHNlCisJCQkJcHJfZXJyKCJBJWQgMHgleFxuIiwgaSwgKmJ1ZmZlcisrKTsKKwkJfQorCisJCXByX2VycigiXG5CMCAweCV4XG4iLCAqYnVmZmVyKyspOworCQlwcl9lcnIoIkIxIDB4JXhcbiIsICpidWZmZXIrKyk7CisJCXByX2VycigiQjIgMHgleFxuIiwgKmJ1ZmZlcisrKTsKKworCQlpZiAoKCpidWZmZXIgPiBkeW5fZXh0X2Jhc2UpICYmIChub2RlX2ZpbmRfYWRkcihub2RlX21nciwKKwkJCSpidWZmZXIsIDB4MTAwMCwgJm9mZnNldF9vdXRwdXQsIG5hbWUpID09IDApKQorCisJCQlwcl9lcnIoIkIzIDB4JS04eCBbRnVuY3Rpb24gUmV0dXJuIFBvaW50ZXI6IgorCQkJCSIgXCIlc1wiICsgMHgleF1cbiIsICpidWZmZXIsIG5hbWUsCisJCQkJKmJ1ZmZlciAtIG9mZnNldF9vdXRwdXQpOworCQllbHNlCisJCQlwcl9lcnIoIkIzIDB4JS04eCBbRnVuY3Rpb24gUmV0dXJuIFBvaW50ZXI6IgorCQkJCSJVbmFibGUgdG8gbWF0Y2ggdG8gYSBzeW1ib2wuXVxuIiwgKmJ1ZmZlcik7CisKKwkJYnVmZmVyKys7CisKKwkJZm9yIChpID0gNDsgaSA8IDMyOyBpKyspIHsKKwkJCWlmIChpID09IDQgfHwgaSA9PSA2IHx8IGkgPT0gOCkKKwkJCQlwcl9lcnIoIkIlZCAweCUtOHggW0Z1bmN0aW9uIEFyZ3VtZW50ICVkXVxuIiwKKwkJCQkJCQlpLCAqYnVmZmVyKyssIGktMik7CisJCQllbHNlIGlmIChpID09IDE0KQorCQkJCXByX2VycigiQjE0IDB4JS04eCBbRGF0YSBQYWdlIFBvaW50ZXJdXG4iLAorCQkJCQkJCQkqYnVmZmVyKyspOworCQkJZWxzZQorCQkJCXByX2VycigiQiVkIDB4JXhcbiIsIGksICpidWZmZXIrKyk7CisJCX0KKworCQlwcl9lcnIoIlxuIik7CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHNwX3JlZ3MpOyBpKyspCisJCQlwcl9lcnIoIiVzIDB4JXhcbiIsIGRzcF9yZWdzW2ldLCAqYnVmZmVyKyspOworCisJCXByX2VycigiXG5TdGFjazpcbiIKKwkJCSItLS0tLS1cbiIpOworCisJCWZvciAoaSA9IDA7IGJ1ZmZlciA8IGJ1ZmZlcl9lbmQ7IGkrKywgYnVmZmVyKyspIHsKKwkJCWlmICgoKmJ1ZmZlciA+IGR5bl9leHRfYmFzZSkgJiYgKAorCQkJCW5vZGVfZmluZF9hZGRyKG5vZGVfbWdyLCAqYnVmZmVyICwgMHg2MDAsCisJCQkJJm9mZnNldF9vdXRwdXQsIG5hbWUpID09IDApKQorCQkJCXByX2VycigiWyVkXSAweCUtOHggW1wiJXNcIiArIDB4JXhdXG4iLAorCQkJCQlpLCAqYnVmZmVyLCBuYW1lLAorCQkJCQkqYnVmZmVyIC0gb2Zmc2V0X291dHB1dCk7CisJCQllbHNlCisJCQkJcHJfZXJyKCJbJWRdIDB4JXhcbiIsIGksICpidWZmZXIpOworCQl9CisJCWtmcmVlKGJ1ZmZlcl9iZWcpOworCX0KK2Z1bmNfZW5kOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogZHVtcF9kbF9tb2R1bGVzKCkgLSBUaGlzIGZ1bmN0aW9ucyBkdW1wcyB0aGUgX0RMTW9kdWxlcyBsb2FkZWQgaW4gRFNQIHNpZGUKKyAqIEBicmlkZ2VfY29udGV4dDoJCUJyaWRnZSBkcml2ZXIncyBkZXZpY2UgY29udGV4dCBwb2ludGVyLgorICoKKyAqLwordm9pZCBkdW1wX2RsX21vZHVsZXMoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqYnJpZGdlX2NvbnRleHQpCit7CisJc3RydWN0IGNvZF9tYW5hZ2VyICpjb2RlX21ncjsKKwlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKKwlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpicmlkZ2VfY3R4dCA9IGJyaWRnZV9jb250ZXh0OworCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqZWN0ID0gYnJpZGdlX2N0eHQtPmhkZXZfb2JqOworCXN0cnVjdCBtb2R1bGVzX2hlYWRlciBtb2R1bGVzX2hkcjsKKwlzdHJ1Y3QgZGxsX21vZHVsZSAqbW9kdWxlX3N0cnVjdCA9IE5VTEw7CisJdTMyIG1vZHVsZV9kc3BfYWRkcjsKKwl1MzIgbW9kdWxlX3NpemU7CisJdTMyIG1vZHVsZV9zdHJ1Y3Rfc2l6ZSA9IDA7CisJdTMyIHNlY3RfbmR4OworCWNoYXIgKnNlY3Rfc3RyIDsKKwlpbnQgc3RhdHVzID0gMDsKKworCXN0YXR1cyA9IGRldl9nZXRfaW50Zl9meG5zKGRldl9vYmplY3QsICZpbnRmX2Z4bnMpOworCWlmIChzdGF0dXMpIHsKKwkJcHJfZGVidWcoIiVzOiBGYWlsZWQgb24gZGV2X2dldF9pbnRmX2Z4bnMuXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCisJc3RhdHVzID0gZGV2X2dldF9jb2RfbWdyKGRldl9vYmplY3QsICZjb2RlX21ncik7CisJaWYgKCFjb2RlX21ncikgeworCQlwcl9kZWJ1ZygiJXM6IEZhaWxlZCBvbiBkZXZfZ2V0X2NvZF9tZ3IuXG4iLCBfX2Z1bmNfXyk7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCisJLyogTG9va3VwICB0aGUgYWRkcmVzcyBvZiB0aGUgbW9kdWxlc19oZWFkZXIgc3RydWN0dXJlICovCisJc3RhdHVzID0gY29kX2dldF9zeW1fdmFsdWUoY29kZV9tZ3IsICJfRExNb2R1bGVzIiwgJm1vZHVsZV9kc3BfYWRkcik7CisJaWYgKHN0YXR1cykgeworCQlwcl9kZWJ1ZygiJXM6IEZhaWxlZCBvbiBjb2RfZ2V0X3N5bV92YWx1ZSBmb3IgX0RMTW9kdWxlcy5cbiIsCisJCQlfX2Z1bmNfXyk7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCisJcHJfZGVidWcoIiVzOiBfRExNb2R1bGVzIGF0IDB4JXhcbiIsIF9fZnVuY19fLCBtb2R1bGVfZHNwX2FkZHIpOworCisJLyogQ29weSB0aGUgbW9kdWxlc19oZWFkZXIgc3RydWN0dXJlIGZyb20gRFNQIG1lbW9yeS4gKi8KKwlzdGF0dXMgPSAoKmludGZfZnhucy0+cGZuX2JyZF9yZWFkKShicmlkZ2VfY29udGV4dCwgKHU4ICopICZtb2R1bGVzX2hkciwKKwkJCQkodTMyKSBtb2R1bGVfZHNwX2FkZHIsIHNpemVvZihtb2R1bGVzX2hkciksIDApOworCisJaWYgKHN0YXR1cykgeworCQlwcl9kZWJ1ZygiJXM6IEZhaWxlZCBmYWlsZWQgdG8gcmVhZCBtb2R1bGVzIGhlYWRlci5cbiIsCisJCQkJCQkJCV9fZnVuY19fKTsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwltb2R1bGVfZHNwX2FkZHIgPSBtb2R1bGVzX2hkci5maXJzdF9tb2R1bGU7CisJbW9kdWxlX3NpemUgPSBtb2R1bGVzX2hkci5maXJzdF9tb2R1bGVfc2l6ZTsKKworCXByX2RlYnVnKCIlczogZGxsX21vZHVsZV9oZWFkZXIgMHgleCAlZFxuIiwgX19mdW5jX18sIG1vZHVsZV9kc3BfYWRkciwKKwkJCQkJCQkJbW9kdWxlX3NpemUpOworCisJcHJfZXJyKCJcbkR5bmFtaWNhbGx5IExvYWRlZCBNb2R1bGVzOlxuIgorCQkiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKworCS8qIEZvciBlYWNoIGRsbF9tb2R1bGUgc3RydWN0dXJlIGluIHRoZSBsaXN0Li4uICovCisJd2hpbGUgKG1vZHVsZV9zaXplKSB7CisJCS8qCisJCSAqIEFsbG9jYXRlL3JlLWFsbG9jYXRlIG1lbW9yeSB0byBob2xkIHRoZSBkbGxfbW9kdWxlCisJCSAqIHN0cnVjdHVyZS4gVGhlIG1lbW9yeSBpcyByZS1hbGxvY2F0ZWQgb25seSBpZiB0aGUgZXhpc3RpbmcKKwkJICogYWxsb2NhdGlvbiBpcyB0b28gc21hbGwuCisJCSAqLworCQlpZiAobW9kdWxlX3NpemUgPiBtb2R1bGVfc3RydWN0X3NpemUpIHsKKwkJCWtmcmVlKG1vZHVsZV9zdHJ1Y3QpOworCQkJbW9kdWxlX3N0cnVjdCA9IGt6YWxsb2MobW9kdWxlX3NpemUrMTI4LCBHRlBfQVRPTUlDKTsKKwkJCW1vZHVsZV9zdHJ1Y3Rfc2l6ZSA9IG1vZHVsZV9zaXplKzEyODsKKwkJCXByX2RlYnVnKCIlczogYWxsb2NhdGVkIG1vZHVsZSBzdHJ1Y3QgJXAgJWRcbiIsCisJCQkJX19mdW5jX18sIG1vZHVsZV9zdHJ1Y3QsIG1vZHVsZV9zdHJ1Y3Rfc2l6ZSk7CisJCQlpZiAoIW1vZHVsZV9zdHJ1Y3QpCisJCQkJZ290byBmdW5jX2VuZDsKKwkJfQorCQkvKiBDb3B5IHRoZSBkbGxfbW9kdWxlIHN0cnVjdHVyZSBmcm9tIERTUCBtZW1vcnkgKi8KKwkJc3RhdHVzID0gKCppbnRmX2Z4bnMtPnBmbl9icmRfcmVhZCkoYnJpZGdlX2NvbnRleHQsCisJCQkodTggKiltb2R1bGVfc3RydWN0LCBtb2R1bGVfZHNwX2FkZHIsIG1vZHVsZV9zaXplLCAwKTsKKworCQlpZiAoc3RhdHVzKSB7CisJCQlwcl9kZWJ1ZygKKwkJCSIlczogRmFpbGVkIHRvIHJlYWQgZGxsX21vZHVsZSBzdHVjdCBmb3IgMHgleC5cbiIsCisJCQlfX2Z1bmNfXywgbW9kdWxlX2RzcF9hZGRyKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogVXBkYXRlIGluZm8gcmVnYXJkaW5nIHRoZSBfbmV4dF8gbW9kdWxlIGluIHRoZSBsaXN0LiAqLworCQltb2R1bGVfZHNwX2FkZHIgPSBtb2R1bGVfc3RydWN0LT5uZXh0X21vZHVsZTsKKwkJbW9kdWxlX3NpemUgPSBtb2R1bGVfc3RydWN0LT5uZXh0X21vZHVsZV9zaXplOworCisJCXByX2RlYnVnKCIlczogbmV4dCBtb2R1bGUgMHgleCAlZCwgdGhpcyBtb2R1bGUgbnVtIHNlY3RzICVkXG4iLAorCQkJX19mdW5jX18sIG1vZHVsZV9kc3BfYWRkciwgbW9kdWxlX3NpemUsCisJCQltb2R1bGVfc3RydWN0LT5udW1fc2VjdHMpOworCisJCS8qCisJCSAqIFRoZSBzZWN0aW9uIG5hbWUgc3RyaW5ncyBzdGFydCBpbW1lZGlhbHR5IGZvbGxvd2luZworCQkgKiB0aGUgYXJyYXkgb2YgZGxsX3NlY3Qgc3RydWN0dXJlcy4KKwkJICovCisJCXNlY3Rfc3RyID0gKGNoYXIgKikgJm1vZHVsZV9zdHJ1Y3QtPgorCQkJCQlzZWN0c1ttb2R1bGVfc3RydWN0LT5udW1fc2VjdHNdOworCQlwcl9lcnIoIiVzXG4iLCBzZWN0X3N0cik7CisKKwkJLyoKKwkJICogQWR2YW5jZSB0byB0aGUgZmlyc3Qgc2VjdGlvbiBuYW1lIHN0cmluZy4KKwkJICogRWFjaCBzdHJpbmcgZm9sbG93cyB0aGUgb25lIGJlZm9yZS4KKwkJICovCisJCXNlY3Rfc3RyICs9IHN0cmxlbihzZWN0X3N0cikgKyAxOworCisJCS8qIEFjY2VzcyBlYWNoIGRsbF9zZWN0IHN0cnVjdHVyZSBhbmQgaXRzIG5hbWUgc3RyaW5nLiAqLworCQlmb3IgKHNlY3RfbmR4ID0gMDsKKwkJCXNlY3RfbmR4IDwgbW9kdWxlX3N0cnVjdC0+bnVtX3NlY3RzOyBzZWN0X25keCsrKSB7CisJCQlwcl9lcnIoIiAgICBTZWN0aW9uOiAweCV4ICIsCisJCQkJbW9kdWxlX3N0cnVjdC0+c2VjdHNbc2VjdF9uZHhdLnNlY3RfbG9hZF9hZHIpOworCisJCQlpZiAoKCh1MzIpIHNlY3Rfc3RyIC0gKHUzMikgbW9kdWxlX3N0cnVjdCkgPAorCQkJCW1vZHVsZV9zdHJ1Y3Rfc2l6ZSkgeworCQkJCXByX2VycigiJXNcbiIsIHNlY3Rfc3RyKTsKKwkJCQkvKiBFYWNoIHN0cmluZyBmb2xsb3dzIHRoZSBvbmUgYmVmb3JlLiAqLworCQkJCXNlY3Rfc3RyICs9IHN0cmxlbihzZWN0X3N0cikrMTsKKwkJCX0gZWxzZSB7CisJCQkJcHJfZXJyKCI8c3RyaW5nIGVycm9yPlxuIik7CisJCQkJcHJfZGVidWcoIiVzOiBzZWN0aW9uIG5hbWUgc3RpbmcgYWRkcmVzcyAiCisJCQkJCSJpcyBpbnZhbGlkICVwXG4iLCBfX2Z1bmNfXywgc2VjdF9zdHIpOworCQkJfQorCQl9CisJfQorZnVuY19lbmQ6CisJa2ZyZWUobW9kdWxlX3N0cnVjdCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL21zZ19zbS5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvbXNnX3NtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc3MTJlMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL21zZ19zbS5jCkBAIC0wLDAgKzEsNjczIEBACisvKgorICogbXNnX3NtLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogSW1wbGVtZW50cyB1cHBlciBlZGdlIGZ1bmN0aW9ucyBmb3IgQnJpZGdlIG1lc3NhZ2UgbW9kdWxlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRyYWNlICYgRGVidWcgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJjLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPUyBBZGFwdGF0aW9uIExheWVyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2xpc3QuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvc3luYy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhdGZvcm0gTWFuYWdlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXYuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE90aGVycyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9pb19zbS5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhpcyAqLworI2luY2x1ZGUgPF9tc2dfc20uaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwbXNnLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbiBQcm90b3R5cGVzICovCitzdGF0aWMgaW50IGFkZF9uZXdfbXNnKHN0cnVjdCBsc3RfbGlzdCAqbXNnX2xpc3QpOworc3RhdGljIHZvaWQgZGVsZXRlX21zZ19tZ3Ioc3RydWN0IG1zZ19tZ3IgKmhtc2dfbWdyKTsKK3N0YXRpYyB2b2lkIGRlbGV0ZV9tc2dfcXVldWUoc3RydWN0IG1zZ19xdWV1ZSAqbXNnX3F1ZXVlX29iaiwgdTMyIG51bV90b19kc3ApOworc3RhdGljIHZvaWQgZnJlZV9tc2dfbGlzdChzdHJ1Y3QgbHN0X2xpc3QgKm1zZ19saXN0KTsKKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfbXNnX2NyZWF0ZSA9PT09PT09PQorICogICAgICBDcmVhdGUgYW4gb2JqZWN0IHRvIG1hbmFnZSBtZXNzYWdlIHF1ZXVlcy4gT25seSBvbmUgb2YgdGhlc2Ugb2JqZWN0cworICogICAgICBjYW4gZXhpc3QgcGVyIGRldmljZSBvYmplY3QuCisgKi8KK2ludCBicmlkZ2VfbXNnX2NyZWF0ZShzdHJ1Y3QgbXNnX21nciAqKm1zZ19tYW4sCisJCQkgICAgIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCSAgICAgbXNnX29uZXhpdCBtc2dfY2FsbGJhY2spCit7CisJc3RydWN0IG1zZ19tZ3IgKm1zZ19tZ3Jfb2JqOworCXN0cnVjdCBpb19tZ3IgKmhpb19tZ3I7CisJaW50IHN0YXR1cyA9IDA7CisKKwlpZiAoIW1zZ19tYW4gfHwgIW1zZ19jYWxsYmFjayB8fCAhaGRldl9vYmopIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJZGV2X2dldF9pb19tZ3IoaGRldl9vYmosICZoaW9fbWdyKTsKKwlpZiAoIWhpb19tZ3IpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJKm1zZ19tYW4gPSBOVUxMOworCS8qIEFsbG9jYXRlIG1zZ19jdHJsIG1hbmFnZXIgb2JqZWN0ICovCisJbXNnX21ncl9vYmogPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXNnX21nciksIEdGUF9LRVJORUwpOworCisJaWYgKG1zZ19tZ3Jfb2JqKSB7CisJCW1zZ19tZ3Jfb2JqLT5vbl9leGl0ID0gbXNnX2NhbGxiYWNrOworCQltc2dfbWdyX29iai0+aGlvX21nciA9IGhpb19tZ3I7CisJCS8qIExpc3Qgb2YgTVNHX1FVRVVFcyAqLworCQltc2dfbWdyX29iai0+cXVldWVfbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsc3RfbGlzdCksCisJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCS8qICBRdWV1ZXMgb2YgbWVzc2FnZSBmcmFtZXMgZm9yIG1lc3NhZ2VzIHRvIHRoZSBEU1AuIE1lc3NhZ2UKKwkJICogZnJhbWVzIHdpbGwgb25seSBiZSBhZGRlZCB0byB0aGUgZnJlZSBxdWV1ZSB3aGVuIGEKKwkJICogbXNnX3F1ZXVlIG9iamVjdCBpcyBjcmVhdGVkLiAqLworCQltc2dfbWdyX29iai0+bXNnX2ZyZWVfbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsc3RfbGlzdCksCisJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCW1zZ19tZ3Jfb2JqLT5tc2dfdXNlZF9saXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxzdF9saXN0KSwKKwkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKG1zZ19tZ3Jfb2JqLT5xdWV1ZV9saXN0ID09IE5VTEwgfHwKKwkJICAgIG1zZ19tZ3Jfb2JqLT5tc2dfZnJlZV9saXN0ID09IE5VTEwgfHwKKwkJICAgIG1zZ19tZ3Jfb2JqLT5tc2dfdXNlZF9saXN0ID09IE5VTEwpIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCX0gZWxzZSB7CisJCQlJTklUX0xJU1RfSEVBRCgmbXNnX21ncl9vYmotPnF1ZXVlX2xpc3QtPmhlYWQpOworCQkJSU5JVF9MSVNUX0hFQUQoJm1zZ19tZ3Jfb2JqLT5tc2dfZnJlZV9saXN0LT5oZWFkKTsKKwkJCUlOSVRfTElTVF9IRUFEKCZtc2dfbWdyX29iai0+bXNnX3VzZWRfbGlzdC0+aGVhZCk7CisJCQlzcGluX2xvY2tfaW5pdCgmbXNnX21ncl9vYmotPm1zZ19tZ3JfbG9jayk7CisJCX0KKworCQkvKiAgQ3JlYXRlIGFuIGV2ZW50IHRvIGJlIHVzZWQgYnkgYnJpZGdlX21zZ19wdXQoKSBpbiB3YWl0aW5nCisJCSAqICBmb3IgYW4gYXZhaWxhYmxlIGZyZWUgZnJhbWUgZnJvbSB0aGUgbWVzc2FnZSBtYW5hZ2VyLiAqLworCQltc2dfbWdyX29iai0+c3luY19ldmVudCA9CisJCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHN5bmNfb2JqZWN0KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghbXNnX21ncl9vYmotPnN5bmNfZXZlbnQpCisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQllbHNlCisJCQlzeW5jX2luaXRfZXZlbnQobXNnX21ncl9vYmotPnN5bmNfZXZlbnQpOworCisJCWlmICghc3RhdHVzKQorCQkJKm1zZ19tYW4gPSBtc2dfbWdyX29iajsKKwkJZWxzZQorCQkJZGVsZXRlX21zZ19tZ3IobXNnX21ncl9vYmopOworCisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwl9CitmdW5jX2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGJyaWRnZV9tc2dfY3JlYXRlX3F1ZXVlID09PT09PT09CisgKiAgICAgIENyZWF0ZSBhIG1zZ19xdWV1ZSBmb3Igc2VuZGluZy9yZWNlaXZpbmcgbWVzc2FnZXMgdG8vZnJvbSBhIG5vZGUKKyAqICAgICAgb24gdGhlIERTUC4KKyAqLworaW50IGJyaWRnZV9tc2dfY3JlYXRlX3F1ZXVlKHN0cnVjdCBtc2dfbWdyICpobXNnX21nciwKKwkJCQlzdHJ1Y3QgbXNnX3F1ZXVlICoqbXNncSwKKwkJCQl1MzIgbXNncV9pZCwgdTMyIG1heF9tc2dzLCB2b2lkICphcmcpCit7CisJdTMyIGk7CisJdTMyIG51bV9hbGxvY2F0ZWQgPSAwOworCXN0cnVjdCBtc2dfcXVldWUgKm1zZ19xOworCWludCBzdGF0dXMgPSAwOworCisJaWYgKCFobXNnX21nciB8fCBtc2dxID09IE5VTEwgfHwgIWhtc2dfbWdyLT5tc2dfZnJlZV9saXN0KSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCisJKm1zZ3EgPSBOVUxMOworCS8qIEFsbG9jYXRlIG1zZ19xdWV1ZSBvYmplY3QgKi8KKwltc2dfcSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtc2dfcXVldWUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1zZ19xKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCWxzdF9pbml0X2VsZW0oKHN0cnVjdCBsaXN0X2hlYWQgKiltc2dfcSk7CisJbXNnX3EtPm1heF9tc2dzID0gbWF4X21zZ3M7CisJbXNnX3EtPmhtc2dfbWdyID0gaG1zZ19tZ3I7CisJbXNnX3EtPmFyZyA9IGFyZzsJLyogTm9kZSBoYW5kbGUgKi8KKwltc2dfcS0+bXNncV9pZCA9IG1zZ3FfaWQ7CS8qIE5vZGUgZW52IChub3QgdmFsaWQgeWV0KSAqLworCS8qIFF1ZXVlcyBvZiBNZXNzYWdlIGZyYW1lcyBmb3IgbWVzc2FnZXMgZnJvbSB0aGUgRFNQICovCisJbXNnX3EtPm1zZ19mcmVlX2xpc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbHN0X2xpc3QpLCBHRlBfS0VSTkVMKTsKKwltc2dfcS0+bXNnX3VzZWRfbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsc3RfbGlzdCksIEdGUF9LRVJORUwpOworCWlmIChtc2dfcS0+bXNnX2ZyZWVfbGlzdCA9PSBOVUxMIHx8IG1zZ19xLT5tc2dfdXNlZF9saXN0ID09IE5VTEwpCisJCXN0YXR1cyA9IC1FTk9NRU07CisJZWxzZSB7CisJCUlOSVRfTElTVF9IRUFEKCZtc2dfcS0+bXNnX2ZyZWVfbGlzdC0+aGVhZCk7CisJCUlOSVRfTElTVF9IRUFEKCZtc2dfcS0+bXNnX3VzZWRfbGlzdC0+aGVhZCk7CisJfQorCisJLyogIENyZWF0ZSBldmVudCB0aGF0IHdpbGwgYmUgc2lnbmFsbGVkIHdoZW4gYSBtZXNzYWdlIGZyb20KKwkgKiAgdGhlIERTUCBpcyBhdmFpbGFibGUuICovCisJaWYgKCFzdGF0dXMpIHsKKwkJbXNnX3EtPnN5bmNfZXZlbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3luY19vYmplY3QpLAorCQkJCQkJCUdGUF9LRVJORUwpOworCQlpZiAobXNnX3EtPnN5bmNfZXZlbnQpCisJCQlzeW5jX2luaXRfZXZlbnQobXNnX3EtPnN5bmNfZXZlbnQpOworCQllbHNlCisJCQlzdGF0dXMgPSAtRU5PTUVNOworCX0KKworCS8qIENyZWF0ZSBhIG5vdGlmaWNhdGlvbiBsaXN0IGZvciBtZXNzYWdlIHJlYWR5IG5vdGlmaWNhdGlvbi4gKi8KKwlpZiAoIXN0YXR1cykgeworCQltc2dfcS0+bnRmeV9vYmogPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbnRmeV9vYmplY3QpLAorCQkJCQkJCUdGUF9LRVJORUwpOworCQlpZiAobXNnX3EtPm50Znlfb2JqKQorCQkJbnRmeV9pbml0KG1zZ19xLT5udGZ5X29iaik7CisJCWVsc2UKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJfQorCisJLyogIENyZWF0ZSBldmVudHMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gc3luY2hyb25pemUgY2xlYW51cAorCSAqICB3aGVuIHRoZSBvYmplY3QgaXMgZGVsZXRlZC4gc3luY19kb25lIHdpbGwgYmUgc2V0IHRvCisJICogIHVuYmxvY2sgdGhyZWFkcyBpbiBNU0dfUHV0KCkgb3IgTVNHX0dldCgpLiBzeW5jX2RvbmVfYWNrCisJICogIHdpbGwgYmUgc2V0IGJ5IHRoZSB1bmJsb2NrZWQgdGhyZWFkIHRvIHNpZ25hbCB0aGF0IGl0CisJICogIGlzIHVuYmxvY2tlZCBhbmQgd2lsbCBubyBsb25nZXIgcmVmZXJlbmNlIHRoZSBvYmplY3QuICovCisJaWYgKCFzdGF0dXMpIHsKKwkJbXNnX3EtPnN5bmNfZG9uZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzeW5jX29iamVjdCksCisJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmIChtc2dfcS0+c3luY19kb25lKQorCQkJc3luY19pbml0X2V2ZW50KG1zZ19xLT5zeW5jX2RvbmUpOworCQllbHNlCisJCQlzdGF0dXMgPSAtRU5PTUVNOworCX0KKworCWlmICghc3RhdHVzKSB7CisJCW1zZ19xLT5zeW5jX2RvbmVfYWNrID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN5bmNfb2JqZWN0KSwKKwkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKG1zZ19xLT5zeW5jX2RvbmVfYWNrKQorCQkJc3luY19pbml0X2V2ZW50KG1zZ19xLT5zeW5jX2RvbmVfYWNrKTsKKwkJZWxzZQorCQkJc3RhdHVzID0gLUVOT01FTTsKKwl9CisKKwlpZiAoIXN0YXR1cykgeworCQkvKiBFbnRlciBjcml0aWNhbCBzZWN0aW9uICovCisJCXNwaW5fbG9ja19iaCgmaG1zZ19tZ3ItPm1zZ19tZ3JfbG9jayk7CisJCS8qIEluaXRpYWxpemUgbWVzc2FnZSBmcmFtZXMgYW5kIHB1dCBpbiBhcHByb3ByaWF0ZSBxdWV1ZXMgKi8KKwkJZm9yIChpID0gMDsgaSA8IG1heF9tc2dzICYmICFzdGF0dXM7IGkrKykgeworCQkJc3RhdHVzID0gYWRkX25ld19tc2coaG1zZ19tZ3ItPm1zZ19mcmVlX2xpc3QpOworCQkJaWYgKCFzdGF0dXMpIHsKKwkJCQludW1fYWxsb2NhdGVkKys7CisJCQkJc3RhdHVzID0gYWRkX25ld19tc2cobXNnX3EtPm1zZ19mcmVlX2xpc3QpOworCQkJfQorCQl9CisJCWlmIChzdGF0dXMpIHsKKwkJCS8qICBTdGF5IGluc2lkZSBDUyB0byBwcmV2ZW50IG90aGVycyBmcm9tIHRha2luZyBhbnkKKwkJCSAqICBvZiB0aGUgbmV3bHkgYWxsb2NhdGVkIG1lc3NhZ2UgZnJhbWVzLiAqLworCQkJZGVsZXRlX21zZ19xdWV1ZShtc2dfcSwgbnVtX2FsbG9jYXRlZCk7CisJCX0gZWxzZSB7CisJCQlsc3RfcHV0X3RhaWwoaG1zZ19tZ3ItPnF1ZXVlX2xpc3QsCisJCQkJICAgICAoc3RydWN0IGxpc3RfaGVhZCAqKW1zZ19xKTsKKwkJCSptc2dxID0gbXNnX3E7CisJCQkvKiBTaWduYWwgdGhhdCBmcmVlIGZyYW1lcyBhcmUgbm93IGF2YWlsYWJsZSAqLworCQkJaWYgKCFMU1RfSVNfRU1QVFkoaG1zZ19tZ3ItPm1zZ19mcmVlX2xpc3QpKQorCQkJCXN5bmNfc2V0X2V2ZW50KGhtc2dfbWdyLT5zeW5jX2V2ZW50KTsKKworCQl9CisJCS8qIEV4aXQgY3JpdGljYWwgc2VjdGlvbiAqLworCQlzcGluX3VubG9ja19iaCgmaG1zZ19tZ3ItPm1zZ19tZ3JfbG9jayk7CisJfSBlbHNlIHsKKwkJZGVsZXRlX21zZ19xdWV1ZShtc2dfcSwgMCk7CisJfQorZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfbXNnX2RlbGV0ZSA9PT09PT09PQorICogICAgICBEZWxldGUgYSBtc2dfY3RybCBtYW5hZ2VyIGFsbG9jYXRlZCBpbiBicmlkZ2VfbXNnX2NyZWF0ZSgpLgorICovCit2b2lkIGJyaWRnZV9tc2dfZGVsZXRlKHN0cnVjdCBtc2dfbWdyICpobXNnX21ncikKK3sKKwlpZiAoaG1zZ19tZ3IpCisJCWRlbGV0ZV9tc2dfbWdyKGhtc2dfbWdyKTsKK30KKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfbXNnX2RlbGV0ZV9xdWV1ZSA9PT09PT09PQorICogICAgICBEZWxldGUgYSBtc2dfY3RybCBxdWV1ZSBhbGxvY2F0ZWQgaW4gYnJpZGdlX21zZ19jcmVhdGVfcXVldWUuCisgKi8KK3ZvaWQgYnJpZGdlX21zZ19kZWxldGVfcXVldWUoc3RydWN0IG1zZ19xdWV1ZSAqbXNnX3F1ZXVlX29iaikKK3sKKwlzdHJ1Y3QgbXNnX21nciAqaG1zZ19tZ3I7CisJdTMyIGlvX21zZ19wZW5kOworCisJaWYgKCFtc2dfcXVldWVfb2JqIHx8ICFtc2dfcXVldWVfb2JqLT5obXNnX21ncikKKwkJZ290byBmdW5jX2VuZDsKKworCWhtc2dfbWdyID0gbXNnX3F1ZXVlX29iai0+aG1zZ19tZ3I7CisJbXNnX3F1ZXVlX29iai0+ZG9uZSA9IHRydWU7CisJLyogIFVuYmxvY2sgYWxsIHRocmVhZHMgYmxvY2tlZCBpbiBNU0dfR2V0KCkgb3IgTVNHX1B1dCgpLiAqLworCWlvX21zZ19wZW5kID0gbXNnX3F1ZXVlX29iai0+aW9fbXNnX3BlbmQ7CisJd2hpbGUgKGlvX21zZ19wZW5kKSB7CisJCS8qIFVuYmxvY2sgdGhyZWFkICovCisJCXN5bmNfc2V0X2V2ZW50KG1zZ19xdWV1ZV9vYmotPnN5bmNfZG9uZSk7CisJCS8qIFdhaXQgZm9yIGFja25vd2xlZGdlbWVudCAqLworCQlzeW5jX3dhaXRfb25fZXZlbnQobXNnX3F1ZXVlX29iai0+c3luY19kb25lX2FjaywgU1lOQ19JTkZJTklURSk7CisJCWlvX21zZ19wZW5kID0gbXNnX3F1ZXVlX29iai0+aW9fbXNnX3BlbmQ7CisJfQorCS8qIFJlbW92ZSBtZXNzYWdlIHF1ZXVlIGZyb20gaG1zZ19tZ3ItPnF1ZXVlX2xpc3QgKi8KKwlzcGluX2xvY2tfYmgoJmhtc2dfbWdyLT5tc2dfbWdyX2xvY2spOworCWxzdF9yZW1vdmVfZWxlbShobXNnX21nci0+cXVldWVfbGlzdCwKKwkJCShzdHJ1Y3QgbGlzdF9oZWFkICopbXNnX3F1ZXVlX29iaik7CisJLyogRnJlZSB0aGUgbWVzc2FnZSBxdWV1ZSBvYmplY3QgKi8KKwlkZWxldGVfbXNnX3F1ZXVlKG1zZ19xdWV1ZV9vYmosIG1zZ19xdWV1ZV9vYmotPm1heF9tc2dzKTsKKwlpZiAoIWhtc2dfbWdyLT5tc2dfZnJlZV9saXN0KQorCQlnb3RvIGZ1bmNfY29udDsKKwlpZiAoTFNUX0lTX0VNUFRZKGhtc2dfbWdyLT5tc2dfZnJlZV9saXN0KSkKKwkJc3luY19yZXNldF9ldmVudChobXNnX21nci0+c3luY19ldmVudCk7CitmdW5jX2NvbnQ6CisJc3Bpbl91bmxvY2tfYmgoJmhtc2dfbWdyLT5tc2dfbWdyX2xvY2spOworZnVuY19lbmQ6CisJcmV0dXJuOworfQorCisvKgorICogID09PT09PT09IGJyaWRnZV9tc2dfZ2V0ID09PT09PT09CisgKiAgICAgIEdldCBhIG1lc3NhZ2UgZnJvbSBhIG1zZ19jdHJsIHF1ZXVlLgorICovCitpbnQgYnJpZGdlX21zZ19nZXQoc3RydWN0IG1zZ19xdWV1ZSAqbXNnX3F1ZXVlX29iaiwKKwkJCSAgc3RydWN0IGRzcF9tc2cgKnBtc2csIHUzMiB1dGltZW91dCkKK3sKKwlzdHJ1Y3QgbXNnX2ZyYW1lICptc2dfZnJhbWVfb2JqOworCXN0cnVjdCBtc2dfbWdyICpobXNnX21ncjsKKwlib29sIGdvdF9tc2cgPSBmYWxzZTsKKwlzdHJ1Y3Qgc3luY19vYmplY3QgKnN5bmNzWzJdOworCXUzMiBpbmRleDsKKwlpbnQgc3RhdHVzID0gMDsKKworCWlmICghbXNnX3F1ZXVlX29iaiB8fCBwbXNnID09IE5VTEwpIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwlobXNnX21nciA9IG1zZ19xdWV1ZV9vYmotPmhtc2dfbWdyOworCWlmICghbXNnX3F1ZXVlX29iai0+bXNnX3VzZWRfbGlzdCkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCS8qIEVudGVyIGNyaXRpY2FsIHNlY3Rpb24gKi8KKwlzcGluX2xvY2tfYmgoJmhtc2dfbWdyLT5tc2dfbWdyX2xvY2spOworCS8qIElmIGEgbWVzc2FnZSBpcyBhbHJlYWR5IHRoZXJlLCBnZXQgaXQgKi8KKwlpZiAoIUxTVF9JU19FTVBUWShtc2dfcXVldWVfb2JqLT5tc2dfdXNlZF9saXN0KSkgeworCQltc2dfZnJhbWVfb2JqID0gKHN0cnVjdCBtc2dfZnJhbWUgKikKKwkJICAgIGxzdF9nZXRfaGVhZChtc2dfcXVldWVfb2JqLT5tc2dfdXNlZF9saXN0KTsKKwkJaWYgKG1zZ19mcmFtZV9vYmogIT0gTlVMTCkgeworCQkJKnBtc2cgPSBtc2dfZnJhbWVfb2JqLT5tc2dfZGF0YS5tc2c7CisJCQlsc3RfcHV0X3RhaWwobXNnX3F1ZXVlX29iai0+bXNnX2ZyZWVfbGlzdCwKKwkJCQkgICAgIChzdHJ1Y3QgbGlzdF9oZWFkICopbXNnX2ZyYW1lX29iaik7CisJCQlpZiAoTFNUX0lTX0VNUFRZKG1zZ19xdWV1ZV9vYmotPm1zZ191c2VkX2xpc3QpKQorCQkJCXN5bmNfcmVzZXRfZXZlbnQobXNnX3F1ZXVlX29iai0+c3luY19ldmVudCk7CisKKwkJCWdvdF9tc2cgPSB0cnVlOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG1zZ19xdWV1ZV9vYmotPmRvbmUpCisJCQlzdGF0dXMgPSAtRVBFUk07CisJCWVsc2UKKwkJCW1zZ19xdWV1ZV9vYmotPmlvX21zZ19wZW5kKys7CisKKwl9CisJLyogRXhpdCBjcml0aWNhbCBzZWN0aW9uICovCisJc3Bpbl91bmxvY2tfYmgoJmhtc2dfbWdyLT5tc2dfbWdyX2xvY2spOworCWlmICghc3RhdHVzICYmICFnb3RfbXNnKSB7CisJCS8qICBXYWl0IHRpbCBtZXNzYWdlIGlzIGF2YWlsYWJsZSwgdGltZW91dCwgb3IgZG9uZS4gV2UgZG9uJ3QKKwkJICogIGhhdmUgdG8gc2NoZWR1bGUgdGhlIERQQywgc2luY2UgdGhlIERTUCB3aWxsIHNlbmQgbWVzc2FnZXMKKwkJICogIHdoZW4gdGhleSBhcmUgYXZhaWxhYmxlLiAqLworCQlzeW5jc1swXSA9IG1zZ19xdWV1ZV9vYmotPnN5bmNfZXZlbnQ7CisJCXN5bmNzWzFdID0gbXNnX3F1ZXVlX29iai0+c3luY19kb25lOworCQlzdGF0dXMgPSBzeW5jX3dhaXRfb25fbXVsdGlwbGVfZXZlbnRzKHN5bmNzLCAyLCB1dGltZW91dCwKKwkJCQkJCSAgICAgICZpbmRleCk7CisJCS8qIEVudGVyIGNyaXRpY2FsIHNlY3Rpb24gKi8KKwkJc3Bpbl9sb2NrX2JoKCZobXNnX21nci0+bXNnX21ncl9sb2NrKTsKKwkJaWYgKG1zZ19xdWV1ZV9vYmotPmRvbmUpIHsKKwkJCW1zZ19xdWV1ZV9vYmotPmlvX21zZ19wZW5kLS07CisJCQkvKiBFeGl0IGNyaXRpY2FsIHNlY3Rpb24gKi8KKwkJCXNwaW5fdW5sb2NrX2JoKCZobXNnX21nci0+bXNnX21ncl9sb2NrKTsKKwkJCS8qICBTaWduYWwgdGhhdCB3ZSdyZSBub3QgZ29pbmcgdG8gYWNjZXNzIG1zZ19xdWV1ZV9vYmoKKwkJCSAqICBhbnltb3JlLCBzbyBpdCBjYW4gYmUgZGVsZXRlZC4gKi8KKwkJCSh2b2lkKXN5bmNfc2V0X2V2ZW50KG1zZ19xdWV1ZV9vYmotPnN5bmNfZG9uZV9hY2spOworCQkJc3RhdHVzID0gLUVQRVJNOworCQl9IGVsc2UgeworCQkJaWYgKCFzdGF0dXMpIHsKKwkJCQlEQkNfQVNTRVJUKCFMU1RfSVNfRU1QVFkKKwkJCQkJICAgKG1zZ19xdWV1ZV9vYmotPm1zZ191c2VkX2xpc3QpKTsKKwkJCQkvKiBHZXQgbXNnIGZyb20gdXNlZCBsaXN0ICovCisJCQkJbXNnX2ZyYW1lX29iaiA9IChzdHJ1Y3QgbXNnX2ZyYW1lICopCisJCQkJICAgIGxzdF9nZXRfaGVhZChtc2dfcXVldWVfb2JqLT5tc2dfdXNlZF9saXN0KTsKKwkJCQkvKiBDb3B5IG1lc3NhZ2UgaW50byBwbXNnIGFuZCBwdXQgZnJhbWUgb24gdGhlCisJCQkJICogZnJlZSBsaXN0ICovCisJCQkJaWYgKG1zZ19mcmFtZV9vYmogIT0gTlVMTCkgeworCQkJCQkqcG1zZyA9IG1zZ19mcmFtZV9vYmotPm1zZ19kYXRhLm1zZzsKKwkJCQkJbHN0X3B1dF90YWlsCisJCQkJCSAgICAobXNnX3F1ZXVlX29iai0+bXNnX2ZyZWVfbGlzdCwKKwkJCQkJICAgICAoc3RydWN0IGxpc3RfaGVhZCAqKQorCQkJCQkgICAgIG1zZ19mcmFtZV9vYmopOworCQkJCX0KKwkJCX0KKwkJCW1zZ19xdWV1ZV9vYmotPmlvX21zZ19wZW5kLS07CisJCQkvKiBSZXNldCB0aGUgZXZlbnQgaWYgdGhlcmUgYXJlIHN0aWxsIHF1ZXVlZCBtZXNzYWdlcyAqLworCQkJaWYgKCFMU1RfSVNfRU1QVFkobXNnX3F1ZXVlX29iai0+bXNnX3VzZWRfbGlzdCkpCisJCQkJc3luY19zZXRfZXZlbnQobXNnX3F1ZXVlX29iai0+c3luY19ldmVudCk7CisKKwkJCS8qIEV4aXQgY3JpdGljYWwgc2VjdGlvbiAqLworCQkJc3Bpbl91bmxvY2tfYmgoJmhtc2dfbWdyLT5tc2dfbWdyX2xvY2spOworCQl9CisJfQorZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfbXNnX3B1dCA9PT09PT09PQorICogICAgICBQdXQgYSBtZXNzYWdlIG9udG8gYSBtc2dfY3RybCBxdWV1ZS4KKyAqLworaW50IGJyaWRnZV9tc2dfcHV0KHN0cnVjdCBtc2dfcXVldWUgKm1zZ19xdWV1ZV9vYmosCisJCQkgIGNvbnN0IHN0cnVjdCBkc3BfbXNnICpwbXNnLCB1MzIgdXRpbWVvdXQpCit7CisJc3RydWN0IG1zZ19mcmFtZSAqbXNnX2ZyYW1lX29iajsKKwlzdHJ1Y3QgbXNnX21nciAqaG1zZ19tZ3I7CisJYm9vbCBwdXRfbXNnID0gZmFsc2U7CisJc3RydWN0IHN5bmNfb2JqZWN0ICpzeW5jc1syXTsKKwl1MzIgaW5kZXg7CisJaW50IHN0YXR1cyA9IDA7CisKKwlpZiAoIW1zZ19xdWV1ZV9vYmogfHwgIXBtc2cgfHwgIW1zZ19xdWV1ZV9vYmotPmhtc2dfbWdyKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCWhtc2dfbWdyID0gbXNnX3F1ZXVlX29iai0+aG1zZ19tZ3I7CisJaWYgKCFobXNnX21nci0+bXNnX2ZyZWVfbGlzdCkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCXNwaW5fbG9ja19iaCgmaG1zZ19tZ3ItPm1zZ19tZ3JfbG9jayk7CisKKwkvKiBJZiBhIG1lc3NhZ2UgZnJhbWUgaXMgYXZhaWxhYmxlLCB1c2UgaXQgKi8KKwlpZiAoIUxTVF9JU19FTVBUWShobXNnX21nci0+bXNnX2ZyZWVfbGlzdCkpIHsKKwkJbXNnX2ZyYW1lX29iaiA9CisJCSAgICAoc3RydWN0IG1zZ19mcmFtZSAqKWxzdF9nZXRfaGVhZChobXNnX21nci0+bXNnX2ZyZWVfbGlzdCk7CisJCWlmIChtc2dfZnJhbWVfb2JqICE9IE5VTEwpIHsKKwkJCW1zZ19mcmFtZV9vYmotPm1zZ19kYXRhLm1zZyA9ICpwbXNnOworCQkJbXNnX2ZyYW1lX29iai0+bXNnX2RhdGEubXNncV9pZCA9CisJCQkgICAgbXNnX3F1ZXVlX29iai0+bXNncV9pZDsKKwkJCWxzdF9wdXRfdGFpbChobXNnX21nci0+bXNnX3VzZWRfbGlzdCwKKwkJCQkgICAgIChzdHJ1Y3QgbGlzdF9oZWFkICopbXNnX2ZyYW1lX29iaik7CisJCQlobXNnX21nci0+bXNnc19wZW5kaW5nKys7CisJCQlwdXRfbXNnID0gdHJ1ZTsKKwkJfQorCQlpZiAoTFNUX0lTX0VNUFRZKGhtc2dfbWdyLT5tc2dfZnJlZV9saXN0KSkKKwkJCXN5bmNfcmVzZXRfZXZlbnQoaG1zZ19tZ3ItPnN5bmNfZXZlbnQpOworCisJCS8qIFJlbGVhc2UgY3JpdGljYWwgc2VjdGlvbiBiZWZvcmUgc2NoZWR1bGluZyBEUEMgKi8KKwkJc3Bpbl91bmxvY2tfYmgoJmhtc2dfbWdyLT5tc2dfbWdyX2xvY2spOworCQkvKiBTY2hlZHVsZSBhIERQQywgdG8gZG8gdGhlIGFjdHVhbCBkYXRhIHRyYW5zZmVyOiAqLworCQlpb3NtX3NjaGVkdWxlKGhtc2dfbWdyLT5oaW9fbWdyKTsKKwl9IGVsc2UgeworCQlpZiAobXNnX3F1ZXVlX29iai0+ZG9uZSkKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJZWxzZQorCQkJbXNnX3F1ZXVlX29iai0+aW9fbXNnX3BlbmQrKzsKKworCQlzcGluX3VubG9ja19iaCgmaG1zZ19tZ3ItPm1zZ19tZ3JfbG9jayk7CisJfQorCWlmICghc3RhdHVzICYmICFwdXRfbXNnKSB7CisJCS8qIFdhaXQgdGlsIGEgZnJlZSBtZXNzYWdlIGZyYW1lIGlzIGF2YWlsYWJsZSwgdGltZW91dCwKKwkJICogb3IgZG9uZSAqLworCQlzeW5jc1swXSA9IGhtc2dfbWdyLT5zeW5jX2V2ZW50OworCQlzeW5jc1sxXSA9IG1zZ19xdWV1ZV9vYmotPnN5bmNfZG9uZTsKKwkJc3RhdHVzID0gc3luY193YWl0X29uX211bHRpcGxlX2V2ZW50cyhzeW5jcywgMiwgdXRpbWVvdXQsCisJCQkJCQkgICAgICAmaW5kZXgpOworCQlpZiAoc3RhdHVzKQorCQkJZ290byBmdW5jX2VuZDsKKwkJLyogRW50ZXIgY3JpdGljYWwgc2VjdGlvbiAqLworCQlzcGluX2xvY2tfYmgoJmhtc2dfbWdyLT5tc2dfbWdyX2xvY2spOworCQlpZiAobXNnX3F1ZXVlX29iai0+ZG9uZSkgeworCQkJbXNnX3F1ZXVlX29iai0+aW9fbXNnX3BlbmQtLTsKKwkJCS8qIEV4aXQgY3JpdGljYWwgc2VjdGlvbiAqLworCQkJc3Bpbl91bmxvY2tfYmgoJmhtc2dfbWdyLT5tc2dfbWdyX2xvY2spOworCQkJLyogIFNpZ25hbCB0aGF0IHdlJ3JlIG5vdCBnb2luZyB0byBhY2Nlc3MgbXNnX3F1ZXVlX29iagorCQkJICogIGFueW1vcmUsIHNvIGl0IGNhbiBiZSBkZWxldGVkLiAqLworCQkJKHZvaWQpc3luY19zZXRfZXZlbnQobXNnX3F1ZXVlX29iai0+c3luY19kb25lX2Fjayk7CisJCQlzdGF0dXMgPSAtRVBFUk07CisJCX0gZWxzZSB7CisJCQlpZiAoTFNUX0lTX0VNUFRZKGhtc2dfbWdyLT5tc2dfZnJlZV9saXN0KSkgeworCQkJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCQkJZ290byBmdW5jX2NvbnQ7CisJCQl9CisJCQkvKiBHZXQgbXNnIGZyb20gZnJlZSBsaXN0ICovCisJCQltc2dfZnJhbWVfb2JqID0gKHN0cnVjdCBtc2dfZnJhbWUgKikKKwkJCSAgICBsc3RfZ2V0X2hlYWQoaG1zZ19tZ3ItPm1zZ19mcmVlX2xpc3QpOworCQkJLyoKKwkJCSAqIENvcHkgbWVzc2FnZSBpbnRvIHBtc2cgYW5kIHB1dCBmcmFtZSBvbiB0aGUKKwkJCSAqIHVzZWQgbGlzdC4KKwkJCSAqLworCQkJaWYgKG1zZ19mcmFtZV9vYmopIHsKKwkJCQltc2dfZnJhbWVfb2JqLT5tc2dfZGF0YS5tc2cgPSAqcG1zZzsKKwkJCQltc2dfZnJhbWVfb2JqLT5tc2dfZGF0YS5tc2dxX2lkID0KKwkJCQkgICAgbXNnX3F1ZXVlX29iai0+bXNncV9pZDsKKwkJCQlsc3RfcHV0X3RhaWwoaG1zZ19tZ3ItPm1zZ191c2VkX2xpc3QsCisJCQkJCSAgICAgKHN0cnVjdCBsaXN0X2hlYWQgKiltc2dfZnJhbWVfb2JqKTsKKwkJCQlobXNnX21nci0+bXNnc19wZW5kaW5nKys7CisJCQkJLyoKKwkJCQkgKiBTY2hlZHVsZSBhIERQQywgdG8gZG8gdGhlIGFjdHVhbAorCQkJCSAqIGRhdGEgdHJhbnNmZXIuCisJCQkJICovCisJCQkJaW9zbV9zY2hlZHVsZShobXNnX21nci0+aGlvX21ncik7CisJCQl9CisKKwkJCW1zZ19xdWV1ZV9vYmotPmlvX21zZ19wZW5kLS07CisJCQkvKiBSZXNldCBldmVudCBpZiB0aGVyZSBhcmUgc3RpbGwgZnJhbWVzIGF2YWlsYWJsZSAqLworCQkJaWYgKCFMU1RfSVNfRU1QVFkoaG1zZ19tZ3ItPm1zZ19mcmVlX2xpc3QpKQorCQkJCXN5bmNfc2V0X2V2ZW50KGhtc2dfbWdyLT5zeW5jX2V2ZW50KTsKK2Z1bmNfY29udDoKKwkJCS8qIEV4aXQgY3JpdGljYWwgc2VjdGlvbiAqLworCQkJc3Bpbl91bmxvY2tfYmgoJmhtc2dfbWdyLT5tc2dfbWdyX2xvY2spOworCQl9CisJfQorZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfbXNnX3JlZ2lzdGVyX25vdGlmeSA9PT09PT09PQorICovCitpbnQgYnJpZGdlX21zZ19yZWdpc3Rlcl9ub3RpZnkoc3RydWN0IG1zZ19xdWV1ZSAqbXNnX3F1ZXVlX29iaiwKKwkJCQkgICB1MzIgZXZlbnRfbWFzaywgdTMyIG5vdGlmeV90eXBlLAorCQkJCSAgIHN0cnVjdCBkc3Bfbm90aWZpY2F0aW9uICpobm90aWZpY2F0aW9uKQoreworCWludCBzdGF0dXMgPSAwOworCisJaWYgKCFtc2dfcXVldWVfb2JqIHx8ICFobm90aWZpY2F0aW9uKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCisJaWYgKCEoZXZlbnRfbWFzayA9PSBEU1BfTk9ERU1FU1NBR0VSRUFEWSB8fCBldmVudF9tYXNrID09IDApKSB7CisJCXN0YXR1cyA9IC1FUEVSTTsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwlpZiAobm90aWZ5X3R5cGUgIT0gRFNQX1NJR05BTEVWRU5UKSB7CisJCXN0YXR1cyA9IC1FQkFEUjsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwlpZiAoZXZlbnRfbWFzaykKKwkJc3RhdHVzID0gbnRmeV9yZWdpc3Rlcihtc2dfcXVldWVfb2JqLT5udGZ5X29iaiwgaG5vdGlmaWNhdGlvbiwKKwkJCQkJCWV2ZW50X21hc2ssIG5vdGlmeV90eXBlKTsKKwllbHNlCisJCXN0YXR1cyA9IG50ZnlfdW5yZWdpc3Rlcihtc2dfcXVldWVfb2JqLT5udGZ5X29iaiwKKwkJCQkJCQlobm90aWZpY2F0aW9uKTsKKworCWlmIChzdGF0dXMgPT0gLUVJTlZBTCkgeworCQkvKiAgTm90IHJlZ2lzdGVyZWQuIE9rLCBzaW5jZSB3ZSBjb3VsZG4ndCBoYXZlIGtub3duLiBOb2RlCisJCSAqICBub3RpZmljYXRpb25zIGFyZSBzcGxpdCBiZXR3ZWVuIG5vZGUgc3RhdGUgY2hhbmdlIGhhbmRsZWQKKwkJICogIGJ5IE5PREUsIGFuZCBtZXNzYWdlIHJlYWR5IGhhbmRsZWQgYnkgbXNnX2N0cmwuICovCisJCXN0YXR1cyA9IDA7CisJfQorZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfbXNnX3NldF9xdWV1ZV9pZCA9PT09PT09PQorICovCit2b2lkIGJyaWRnZV9tc2dfc2V0X3F1ZXVlX2lkKHN0cnVjdCBtc2dfcXVldWUgKm1zZ19xdWV1ZV9vYmosIHUzMiBtc2dxX2lkKQoreworCS8qCisJICogIEEgbWVzc2FnZSBxdWV1ZSBtdXN0IGJlIGNyZWF0ZWQgd2hlbiBhIG5vZGUgaXMgYWxsb2NhdGVkLAorCSAqICBzbyB0aGF0IG5vZGVfcmVnaXN0ZXJfbm90aWZ5KCkgY2FuIGJlIGNhbGxlZCBiZWZvcmUgdGhlIG5vZGUKKwkgKiAgaXMgY3JlYXRlZC4gU2luY2Ugd2UgZG9uJ3Qga25vdyB0aGUgbm9kZSBlbnZpcm9ubWVudCB1bnRpbCB0aGUKKwkgKiAgbm9kZSBpcyBjcmVhdGVkLCB3ZSBuZWVkIHRoaXMgZnVuY3Rpb24gdG8gc2V0IG1zZ19xdWV1ZV9vYmotPm1zZ3FfaWQKKwkgKiAgdG8gdGhlIG5vZGUgZW52aXJvbm1lbnQsIGFmdGVyIHRoZSBub2RlIGlzIGNyZWF0ZWQuCisJICovCisJaWYgKG1zZ19xdWV1ZV9vYmopCisJCW1zZ19xdWV1ZV9vYmotPm1zZ3FfaWQgPSBtc2dxX2lkOworfQorCisvKgorICogID09PT09PT09IGFkZF9uZXdfbXNnID09PT09PT09CisgKiAgICAgIE11c3QgYmUgY2FsbGVkIGluIG1lc3NhZ2UgbWFuYWdlciBjcml0aWNhbCBzZWN0aW9uLgorICovCitzdGF0aWMgaW50IGFkZF9uZXdfbXNnKHN0cnVjdCBsc3RfbGlzdCAqbXNnX2xpc3QpCit7CisJc3RydWN0IG1zZ19mcmFtZSAqcG1zZzsKKwlpbnQgc3RhdHVzID0gMDsKKworCXBtc2cgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXNnX2ZyYW1lKSwgR0ZQX0FUT01JQyk7CisJaWYgKHBtc2cgIT0gTlVMTCkgeworCQlsc3RfaW5pdF9lbGVtKChzdHJ1Y3QgbGlzdF9oZWFkICopcG1zZyk7CisJCWxzdF9wdXRfdGFpbChtc2dfbGlzdCwgKHN0cnVjdCBsaXN0X2hlYWQgKilwbXNnKTsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGVsZXRlX21zZ19tZ3IgPT09PT09PT0KKyAqLworc3RhdGljIHZvaWQgZGVsZXRlX21zZ19tZ3Ioc3RydWN0IG1zZ19tZ3IgKmhtc2dfbWdyKQoreworCWlmICghaG1zZ19tZ3IpCisJCWdvdG8gZnVuY19lbmQ7CisKKwlpZiAoaG1zZ19tZ3ItPnF1ZXVlX2xpc3QpIHsKKwkJaWYgKExTVF9JU19FTVBUWShobXNnX21nci0+cXVldWVfbGlzdCkpIHsKKwkJCWtmcmVlKGhtc2dfbWdyLT5xdWV1ZV9saXN0KTsKKwkJCWhtc2dfbWdyLT5xdWV1ZV9saXN0ID0gTlVMTDsKKwkJfQorCX0KKworCWlmIChobXNnX21nci0+bXNnX2ZyZWVfbGlzdCkgeworCQlmcmVlX21zZ19saXN0KGhtc2dfbWdyLT5tc2dfZnJlZV9saXN0KTsKKwkJaG1zZ19tZ3ItPm1zZ19mcmVlX2xpc3QgPSBOVUxMOworCX0KKworCWlmIChobXNnX21nci0+bXNnX3VzZWRfbGlzdCkgeworCQlmcmVlX21zZ19saXN0KGhtc2dfbWdyLT5tc2dfdXNlZF9saXN0KTsKKwkJaG1zZ19tZ3ItPm1zZ191c2VkX2xpc3QgPSBOVUxMOworCX0KKworCWtmcmVlKGhtc2dfbWdyLT5zeW5jX2V2ZW50KTsKKworCWtmcmVlKGhtc2dfbWdyKTsKK2Z1bmNfZW5kOgorCXJldHVybjsKK30KKworLyoKKyAqICA9PT09PT09PSBkZWxldGVfbXNnX3F1ZXVlID09PT09PT09CisgKi8KK3N0YXRpYyB2b2lkIGRlbGV0ZV9tc2dfcXVldWUoc3RydWN0IG1zZ19xdWV1ZSAqbXNnX3F1ZXVlX29iaiwgdTMyIG51bV90b19kc3ApCit7CisJc3RydWN0IG1zZ19tZ3IgKmhtc2dfbWdyOworCXN0cnVjdCBtc2dfZnJhbWUgKnBtc2c7CisJdTMyIGk7CisKKwlpZiAoIW1zZ19xdWV1ZV9vYmogfHwKKwkgICAgIW1zZ19xdWV1ZV9vYmotPmhtc2dfbWdyIHx8ICFtc2dfcXVldWVfb2JqLT5obXNnX21nci0+bXNnX2ZyZWVfbGlzdCkKKwkJZ290byBmdW5jX2VuZDsKKworCWhtc2dfbWdyID0gbXNnX3F1ZXVlX29iai0+aG1zZ19tZ3I7CisKKwkvKiBQdWxsIG9mZiBudW1fdG9fZHNwIG1lc3NhZ2UgZnJhbWVzIGZyb20gTXNnIG1hbmFnZXIgYW5kIGZyZWUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3RvX2RzcDsgaSsrKSB7CisKKwkJaWYgKCFMU1RfSVNfRU1QVFkoaG1zZ19tZ3ItPm1zZ19mcmVlX2xpc3QpKSB7CisJCQlwbXNnID0gKHN0cnVjdCBtc2dfZnJhbWUgKikKKwkJCSAgICBsc3RfZ2V0X2hlYWQoaG1zZ19tZ3ItPm1zZ19mcmVlX2xpc3QpOworCQkJa2ZyZWUocG1zZyk7CisJCX0gZWxzZSB7CisJCQkvKiBDYW5ub3QgZnJlZSBhbGwgb2YgdGhlIG1lc3NhZ2UgZnJhbWVzICovCisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChtc2dfcXVldWVfb2JqLT5tc2dfZnJlZV9saXN0KSB7CisJCWZyZWVfbXNnX2xpc3QobXNnX3F1ZXVlX29iai0+bXNnX2ZyZWVfbGlzdCk7CisJCW1zZ19xdWV1ZV9vYmotPm1zZ19mcmVlX2xpc3QgPSBOVUxMOworCX0KKworCWlmIChtc2dfcXVldWVfb2JqLT5tc2dfdXNlZF9saXN0KSB7CisJCWZyZWVfbXNnX2xpc3QobXNnX3F1ZXVlX29iai0+bXNnX3VzZWRfbGlzdCk7CisJCW1zZ19xdWV1ZV9vYmotPm1zZ191c2VkX2xpc3QgPSBOVUxMOworCX0KKworCWlmIChtc2dfcXVldWVfb2JqLT5udGZ5X29iaikgeworCQludGZ5X2RlbGV0ZShtc2dfcXVldWVfb2JqLT5udGZ5X29iaik7CisJCWtmcmVlKG1zZ19xdWV1ZV9vYmotPm50Znlfb2JqKTsKKwl9CisKKwlrZnJlZShtc2dfcXVldWVfb2JqLT5zeW5jX2V2ZW50KTsKKwlrZnJlZShtc2dfcXVldWVfb2JqLT5zeW5jX2RvbmUpOworCWtmcmVlKG1zZ19xdWV1ZV9vYmotPnN5bmNfZG9uZV9hY2spOworCisJa2ZyZWUobXNnX3F1ZXVlX29iaik7CitmdW5jX2VuZDoKKwlyZXR1cm47CisKK30KKworLyoKKyAqICA9PT09PT09PSBmcmVlX21zZ19saXN0ID09PT09PT09CisgKi8KK3N0YXRpYyB2b2lkIGZyZWVfbXNnX2xpc3Qoc3RydWN0IGxzdF9saXN0ICptc2dfbGlzdCkKK3sKKwlzdHJ1Y3QgbXNnX2ZyYW1lICpwbXNnOworCisJaWYgKCFtc2dfbGlzdCkKKwkJZ290byBmdW5jX2VuZDsKKworCXdoaWxlICgocG1zZyA9IChzdHJ1Y3QgbXNnX2ZyYW1lICopbHN0X2dldF9oZWFkKG1zZ19saXN0KSkgIT0gTlVMTCkKKwkJa2ZyZWUocG1zZyk7CisKKwlEQkNfQVNTRVJUKExTVF9JU19FTVBUWShtc2dfbGlzdCkpOworCisJa2ZyZWUobXNnX2xpc3QpOworZnVuY19lbmQ6CisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvdGlvbWFwMzQzMC5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvdGlvbWFwMzQzMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MTQ4MjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS90aW9tYXAzNDMwLmMKQEAgLTAsMCArMSwxODAyIEBACisvKgorICogdGlvbWFwLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogUHJvY2Vzc29yIE1hbmFnZXIgRHJpdmVyIGZvciBUSSBPTUFQMzQzMCBFVk0uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSG9zdCBPUyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KKyNpbmNsdWRlIDxwbGF0L2NvbnRyb2wuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRyYWNlICYgRGVidWcgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJjLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPUyBBZGFwdGF0aW9uIExheWVyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NmZy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kcnYuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvc3luYy5oPgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSGFyZHdhcmUgQWJzdHJhY3Rpb24gTGF5ZXIgKi8KKyNpbmNsdWRlIDxod19kZWZzLmg+CisjaW5jbHVkZSA8aHdfbW11Lmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMaW5rIERyaXZlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGNobmwuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwZGVoLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGlvLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcG1zZy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9wd3IuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvaW9fc20uaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBsYXRmb3JtIE1hbmFnZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2Lmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGFwaS5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kbW0uaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvd2R0Lmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb2NhbCAqLworI2luY2x1ZGUgIl90aW9tYXAuaCIKKyNpbmNsdWRlICJfdGlvbWFwX3B3ci5oIgorI2luY2x1ZGUgInRpb21hcF9pby5oIgorCisvKiBPZmZzZXQgaW4gc2hhcmVkIG1lbSB0byB3cml0ZSB0byBpbiBvcmRlciB0byBzeW5jaHJvbml6ZSBzdGFydCB3aXRoIERTUCAqLworI2RlZmluZSBTSE1TWU5DT0ZGU0VUIDQJCS8qIEdQUCBieXRlIG9mZnNldCAqLworCisjZGVmaW5lIEJVRkZFUlNJWkUgMTAyNAorCisjZGVmaW5lIFRJSEVMRU5fQUNLVElNRU9VVCAgMTAwMDAKKworI2RlZmluZSBNTVVfU0VDVElPTl9BRERSX01BU0sgICAgMHhGRkYwMDAwMAorI2RlZmluZSBNTVVfU1NFQ1RJT05fQUREUl9NQVNLICAgMHhGRjAwMDAwMAorI2RlZmluZSBNTVVfTEFSR0VfUEFHRV9NQVNLICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBNTVVfU01BTExfUEFHRV9NQVNLICAgICAgMHhGRkZGRjAwMAorI2RlZmluZSBPTUFQM19JVkEyX0JPT1RBRERSX01BU0sgMHhGRkZGRkMwMAorI2RlZmluZSBQQUdFU19JSV9MVkxfVEFCTEUgICA1MTIKKyNkZWZpbmUgUEhZU19UT19QQUdFKHBoeXMpICAgICAgcGZuX3RvX3BhZ2UoKHBoeXMpID4+IFBBR0VfU0hJRlQpCisKKy8qIEZvcndhcmQgRGVjbGFyYXRpb25zOiAqLworc3RhdGljIGludCBicmlkZ2VfYnJkX21vbml0b3Ioc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQpOworc3RhdGljIGludCBicmlkZ2VfYnJkX3JlYWQoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQsCisJCQkJICB1OCAqaG9zdF9idWZmLAorCQkJCSAgdTMyIGRzcF9hZGRyLCB1MzIgdWxfbnVtX2J5dGVzLAorCQkJCSAgdTMyIG1lbV90eXBlKTsKK3N0YXRpYyBpbnQgYnJpZGdlX2JyZF9zdGFydChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCwKKwkJCQkgICB1MzIgZHNwX2FkZHIpOworc3RhdGljIGludCBicmlkZ2VfYnJkX3N0YXR1cyhzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCwKKwkJCQkgICAgaW50ICpib2FyZF9zdGF0ZSk7CitzdGF0aWMgaW50IGJyaWRnZV9icmRfc3RvcChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCk7CitzdGF0aWMgaW50IGJyaWRnZV9icmRfd3JpdGUoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQsCisJCQkJICAgdTggKmhvc3RfYnVmZiwKKwkJCQkgICB1MzIgZHNwX2FkZHIsIHUzMiB1bF9udW1fYnl0ZXMsCisJCQkJICAgdTMyIG1lbV90eXBlKTsKK3N0YXRpYyBpbnQgYnJpZGdlX2JyZF9zZXRfc3RhdGUoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQsCisJCQkJICAgIHUzMiBicmRfc3RhdGUpOworc3RhdGljIGludCBicmlkZ2VfYnJkX21lbV9jb3B5KHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAorCQkJCSAgIHUzMiBkc3BfZGVzdF9hZGRyLCB1MzIgZHNwX3NyY19hZGRyLAorCQkJCSAgIHUzMiB1bF9udW1fYnl0ZXMsIHUzMiBtZW1fdHlwZSk7CitzdGF0aWMgaW50IGJyaWRnZV9icmRfbWVtX3dyaXRlKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAorCQkJCSAgICB1OCAqaG9zdF9idWZmLCB1MzIgZHNwX2FkZHIsCisJCQkJICAgIHUzMiB1bF9udW1fYnl0ZXMsIHUzMiBtZW1fdHlwZSk7CitzdGF0aWMgaW50IGJyaWRnZV9icmRfbWVtX21hcChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCwKKwkJCQkgIHUzMiB1bF9tcHVfYWRkciwgdTMyIHZpcnRfYWRkciwKKwkJCQkgIHUzMiB1bF9udW1fYnl0ZXMsIHUzMiB1bF9tYXBfYXR0ciwKKwkJCQkgIHN0cnVjdCBwYWdlICoqbWFwcGVkX3BhZ2VzKTsKK3N0YXRpYyBpbnQgYnJpZGdlX2JyZF9tZW1fdW5fbWFwKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAorCQkJCSAgICAgdTMyIHZpcnRfYWRkciwgdTMyIHVsX251bV9ieXRlcyk7CitzdGF0aWMgaW50IGJyaWRnZV9kZXZfY3JlYXRlKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQKKwkJCQkJKipkZXZfY250eHQsCisJCQkJCXN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCQkJc3RydWN0IGNmZ19ob3N0cmVzICpjb25maWdfcGFyYW0pOworc3RhdGljIGludCBicmlkZ2VfZGV2X2N0cmwoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQsCisJCQkJICB1MzIgZHdfY21kLCB2b2lkICpwYXJncyk7CitzdGF0aWMgaW50IGJyaWRnZV9kZXZfZGVzdHJveShzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCk7CitzdGF0aWMgdTMyIHVzZXJfdmEyX3BhKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1MzIgYWRkcmVzcyk7CitzdGF0aWMgaW50IHB0ZV91cGRhdGUoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQsIHUzMiBwYSwKKwkJCSAgICAgdTMyIHZhLCB1MzIgc2l6ZSwKKwkJCSAgICAgc3RydWN0IGh3X21tdV9tYXBfYXR0cnNfdCAqbWFwX2F0dHJzKTsKK3N0YXRpYyBpbnQgcHRlX3NldChzdHJ1Y3QgcGdfdGFibGVfYXR0cnMgKnB0LCB1MzIgcGEsIHUzMiB2YSwKKwkJCSAgdTMyIHNpemUsIHN0cnVjdCBod19tbXVfbWFwX2F0dHJzX3QgKmF0dHJzKTsKK3N0YXRpYyBpbnQgbWVtX21hcF92bWFsbG9jKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0LAorCQkJCSAgdTMyIHVsX21wdV9hZGRyLCB1MzIgdmlydF9hZGRyLAorCQkJCSAgdTMyIHVsX251bV9ieXRlcywKKwkJCQkgIHN0cnVjdCBod19tbXVfbWFwX2F0dHJzX3QgKmh3X2F0dHJzKTsKKworYm9vbCB3YWl0X2Zvcl9zdGFydChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCwgdTMyIGR3X3N5bmNfYWRkcik7CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHbG9iYWxzICovCisKKy8qIEF0dHJpYnV0ZXMgb2YgTDIgcGFnZSB0YWJsZXMgZm9yIERTUCBNTVUgKi8KK3N0cnVjdCBwYWdlX2luZm8geworCXUzMiBudW1fZW50cmllczsJLyogTnVtYmVyIG9mIHZhbGlkIFBURXMgaW4gdGhlIEwyIFBUICovCit9OworCisvKiBBdHRyaWJ1dGVzIHVzZWQgdG8gbWFuYWdlIHRoZSBEU1AgTU1VIHBhZ2UgdGFibGVzICovCitzdHJ1Y3QgcGdfdGFibGVfYXR0cnMgeworCXNwaW5sb2NrX3QgcGdfbG9jazsJLyogQ3JpdGljYWwgc2VjdGlvbiBvYmplY3QgaGFuZGxlICovCisKKwl1MzIgbDFfYmFzZV9wYTsJCS8qIFBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIEwxIFBUICovCisJdTMyIGwxX2Jhc2VfdmE7CQkvKiBWaXJ0dWFsICBhZGRyZXNzIG9mIHRoZSBMMSBQVCAqLworCXUzMiBsMV9zaXplOwkJLyogU2l6ZSBvZiB0aGUgTDEgUFQgKi8KKwl1MzIgbDFfdGJsX2FsbG9jX3BhOworCS8qIFBoeXNpY2FsIGFkZHJlc3Mgb2YgQWxsb2NhdGVkIG1lbSBmb3IgTDEgdGFibGUuIE1heSBub3QgYmUgYWxpZ25lZCAqLworCXUzMiBsMV90YmxfYWxsb2NfdmE7CisJLyogVmlydHVhbCBhZGRyZXNzIG9mIEFsbG9jYXRlZCBtZW0gZm9yIEwxIHRhYmxlLiBNYXkgbm90IGJlIGFsaWduZWQgKi8KKwl1MzIgbDFfdGJsX2FsbG9jX3N6OworCS8qIFNpemUgb2YgY29uc2lzdGVudCBtZW1vcnkgYWxsb2NhdGVkIGZvciBMMSB0YWJsZS4KKwkgKiBNYXkgbm90IGJlIGFsaWduZWQgKi8KKworCXUzMiBsMl9iYXNlX3BhOwkJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgTDIgUFQgKi8KKwl1MzIgbDJfYmFzZV92YTsJCS8qIFZpcnR1YWwgIGFkZHJlc3Mgb2YgdGhlIEwyIFBUICovCisJdTMyIGwyX3NpemU7CQkvKiBTaXplIG9mIHRoZSBMMiBQVCAqLworCXUzMiBsMl90YmxfYWxsb2NfcGE7CisJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiBBbGxvY2F0ZWQgbWVtIGZvciBMMiB0YWJsZS4gTWF5IG5vdCBiZSBhbGlnbmVkICovCisJdTMyIGwyX3RibF9hbGxvY192YTsKKwkvKiBWaXJ0dWFsIGFkZHJlc3Mgb2YgQWxsb2NhdGVkIG1lbSBmb3IgTDIgdGFibGUuIE1heSBub3QgYmUgYWxpZ25lZCAqLworCXUzMiBsMl90YmxfYWxsb2Nfc3o7CisJLyogU2l6ZSBvZiBjb25zaXN0ZW50IG1lbW9yeSBhbGxvY2F0ZWQgZm9yIEwyIHRhYmxlLgorCSAqIE1heSBub3QgYmUgYWxpZ25lZCAqLworCisJdTMyIGwyX251bV9wYWdlczsJLyogTnVtYmVyIG9mIGFsbG9jYXRlZCBMMiBQVCAqLworCS8qIEFycmF5IFtsMl9udW1fcGFnZXNdIG9mIEwyIFBUIGluZm8gc3RydWN0cyAqLworCXN0cnVjdCBwYWdlX2luZm8gKnBnX2luZm87Cit9OworCisvKgorICogIFRoaXMgQnJpZGdlIGRyaXZlcidzIGZ1bmN0aW9uIGludGVyZmFjZSB0YWJsZS4KKyAqLworc3RhdGljIHN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSBkcnZfaW50ZXJmYWNlX2Z4bnMgPSB7CisJLyogQnJpZGdlIEFQSSB2ZXIuIGZvciB3aGljaCB0aGlzIGJyaWRnZSBkcml2ZXIgaXMgYnVpbHQuICovCisJQlJEX0FQSV9NQUpPUl9WRVJTSU9OLAorCUJSRF9BUElfTUlOT1JfVkVSU0lPTiwKKwlicmlkZ2VfZGV2X2NyZWF0ZSwKKwlicmlkZ2VfZGV2X2Rlc3Ryb3ksCisJYnJpZGdlX2Rldl9jdHJsLAorCWJyaWRnZV9icmRfbW9uaXRvciwKKwlicmlkZ2VfYnJkX3N0YXJ0LAorCWJyaWRnZV9icmRfc3RvcCwKKwlicmlkZ2VfYnJkX3N0YXR1cywKKwlicmlkZ2VfYnJkX3JlYWQsCisJYnJpZGdlX2JyZF93cml0ZSwKKwlicmlkZ2VfYnJkX3NldF9zdGF0ZSwKKwlicmlkZ2VfYnJkX21lbV9jb3B5LAorCWJyaWRnZV9icmRfbWVtX3dyaXRlLAorCWJyaWRnZV9icmRfbWVtX21hcCwKKwlicmlkZ2VfYnJkX21lbV91bl9tYXAsCisJLyogVGhlIGZvbGxvd2luZyBDSE5MIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgYnkgY2hubF9pby5saWI6ICovCisJYnJpZGdlX2NobmxfY3JlYXRlLAorCWJyaWRnZV9jaG5sX2Rlc3Ryb3ksCisJYnJpZGdlX2Nobmxfb3BlbiwKKwlicmlkZ2VfY2hubF9jbG9zZSwKKwlicmlkZ2VfY2hubF9hZGRfaW9fcmVxLAorCWJyaWRnZV9jaG5sX2dldF9pb2MsCisJYnJpZGdlX2NobmxfY2FuY2VsX2lvLAorCWJyaWRnZV9jaG5sX2ZsdXNoX2lvLAorCWJyaWRnZV9jaG5sX2dldF9pbmZvLAorCWJyaWRnZV9jaG5sX2dldF9tZ3JfaW5mbywKKwlicmlkZ2VfY2hubF9pZGxlLAorCWJyaWRnZV9jaG5sX3JlZ2lzdGVyX25vdGlmeSwKKwkvKiBUaGUgZm9sbG93aW5nIElPIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgYnkgY2hubF9pby5saWI6ICovCisJYnJpZGdlX2lvX2NyZWF0ZSwKKwlicmlkZ2VfaW9fZGVzdHJveSwKKwlicmlkZ2VfaW9fb25fbG9hZGVkLAorCWJyaWRnZV9pb19nZXRfcHJvY19sb2FkLAorCS8qIFRoZSBmb2xsb3dpbmcgbXNnX2N0cmwgZnVuY3Rpb25zIGFyZSBwcm92aWRlZCBieSBjaG5sX2lvLmxpYjogKi8KKwlicmlkZ2VfbXNnX2NyZWF0ZSwKKwlicmlkZ2VfbXNnX2NyZWF0ZV9xdWV1ZSwKKwlicmlkZ2VfbXNnX2RlbGV0ZSwKKwlicmlkZ2VfbXNnX2RlbGV0ZV9xdWV1ZSwKKwlicmlkZ2VfbXNnX2dldCwKKwlicmlkZ2VfbXNnX3B1dCwKKwlicmlkZ2VfbXNnX3JlZ2lzdGVyX25vdGlmeSwKKwlicmlkZ2VfbXNnX3NldF9xdWV1ZV9pZCwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9hbGwoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQpCit7CisJaWYgKGRldl9jb250ZXh0LT5kd19icmRfc3RhdGUgPT0gQlJEX0RTUF9ISUJFUk5BVElPTiB8fAorCSAgICBkZXZfY29udGV4dC0+ZHdfYnJkX3N0YXRlID09IEJSRF9ISUJFUk5BVElPTikKKwkJd2FrZV9kc3AoZGV2X2NvbnRleHQsIE5VTEwpOworCisJaHdfbW11X3RsYl9mbHVzaF9hbGwoZGV2X2NvbnRleHQtPmR3X2RzcF9tbXVfYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIGJhZF9wYWdlX2R1bXAodTMyIHBhLCBzdHJ1Y3QgcGFnZSAqcGcpCit7CisJcHJfZW1lcmcoIkRTUEJSSURHRTogTUFQIGZ1bmN0aW9uOiBDT1VOVCAwIEZPUiBQQSAweCV4XG4iLCBwYSk7CisJcHJfZW1lcmcoIkJhZCBwYWdlIHN0YXRlIGluIHByb2Nlc3MgJyVzJ1xuIgorCQkgInBhZ2U6JXAgZmxhZ3M6MHglMCpseCBtYXBwaW5nOiVwIG1hcGNvdW50OiVkIGNvdW50OiVkXG4iCisJCSAiQmFja3RyYWNlOlxuIiwKKwkJIGN1cnJlbnQtPmNvbW0sIHBnLCAoaW50KSgyICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSwKKwkJICh1bnNpZ25lZCBsb25nKXBnLT5mbGFncywgcGctPm1hcHBpbmcsCisJCSBwYWdlX21hcGNvdW50KHBnKSwgcGFnZV9jb3VudChwZykpOworCWR1bXBfc3RhY2soKTsKK30KKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfZHJ2X2VudHJ5ID09PT09PT09CisgKiAgcHVycG9zZToKKyAqICAgICAgQnJpZGdlIERyaXZlciBlbnRyeSBwb2ludC4KKyAqLwordm9pZCBicmlkZ2VfZHJ2X2VudHJ5KHN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqKmRydl9pbnRmLAorCQkgICBjb25zdCBjaGFyICpkcml2ZXJfZmlsZV9uYW1lKQoreworCisJREJDX1JFUVVJUkUoZHJpdmVyX2ZpbGVfbmFtZSAhPSBOVUxMKTsKKworCWlvX3NtX2luaXQoKTsJCS8qIEluaXRpYWxpemF0aW9uIG9mIGlvX3NtIG1vZHVsZSAqLworCisJaWYgKHN0cmNtcChkcml2ZXJfZmlsZV9uYW1lLCAiVU1BIikgPT0gMCkKKwkJKmRydl9pbnRmID0gJmRydl9pbnRlcmZhY2VfZnhuczsKKwllbHNlCisJCWRldl9kYmcoYnJpZGdlLCAiJXMgVW5rbm93biBCcmlkZ2UgZmlsZSBuYW1lIiwgX19mdW5jX18pOworCit9CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2JyZF9tb25pdG9yID09PT09PT09CisgKiAgcHVycG9zZToKKyAqICAgICAgVGhpcyBicmlkZ2VfYnJkX21vbml0b3IgcHV0cyBEU1AgaW50byBhIExvYWRhYmxlIHN0YXRlLgorICogICAgICBpLmUgQXBwbGljYXRpb24gY2FuIGxvYWQgYW5kIHN0YXJ0IHRoZSBkZXZpY2UuCisgKgorICogIFByZWNvbmRpdGlvbnM6CisgKiAgICAgIERldmljZSBpbiAnT0ZGJyBzdGF0ZS4KKyAqLworc3RhdGljIGludCBicmlkZ2VfYnJkX21vbml0b3Ioc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQpCit7CisJc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQgPSBkZXZfY3R4dDsKKwl1MzIgdGVtcDsKKwlzdHJ1Y3QgZHNwYnJpZGdlX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0KKwkJCQkgICAgb21hcF9kc3BicmlkZ2VfZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCXRlbXAgPSAoKnBkYXRhLT5kc3BfcHJtX3JlYWQpKE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMl9QTV9QV1NUU1QpICYKKwkJCQkJT01BUF9QT1dFUlNUQVRFU1RfTUFTSzsKKwlpZiAoISh0ZW1wICYgMHgwMikpIHsKKwkJLyogSVZBMiBpcyBub3QgaW4gT04gc3RhdGUgKi8KKwkJLyogUmVhZCBhbmQgc2V0IFBNX1BXU1RDVFJMX0lWQTIgIHRvIE9OICovCisJCSgqcGRhdGEtPmRzcF9wcm1fcm13X2JpdHMpKE9NQVBfUE9XRVJTVEFURVNUX01BU0ssCisJCQlQV1JETV9QT1dFUl9PTiwgT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAyX1BNX1BXU1RDVFJMKTsKKwkJLyogU2V0IHRoZSBTVyBzdXBlcnZpc2VkIHN0YXRlIHRyYW5zaXRpb24gKi8KKwkJKCpwZGF0YS0+ZHNwX2NtX3dyaXRlKShPTUFQMzRYWF9DTEtTVENUUkxfRk9SQ0VfV0FLRVVQLAorCQkJCQlPTUFQMzQzMF9JVkEyX01PRCwgT01BUDJfQ01fQ0xLU1RDVFJMKTsKKworCQkvKiBXYWl0IHVudGlsIHRoZSBzdGF0ZSBoYXMgbW92ZWQgdG8gT04gKi8KKwkJd2hpbGUgKCgqcGRhdGEtPmRzcF9wcm1fcmVhZCkoT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAyX1BNX1BXU1RTVCkgJgorCQkJCQkJT01BUF9JTlRSQU5TSVRJT05fTUFTSykKKwkJCTsKKwkJLyogRGlzYWJsZSBBdXRvbWF0aWMgdHJhbnNpdGlvbiAqLworCQkoKnBkYXRhLT5kc3BfY21fd3JpdGUpKE9NQVAzNFhYX0NMS1NUQ1RSTF9ESVNBQkxFX0FVVE8sCisJCQkJCU9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOworCX0KKwkoKnBkYXRhLT5kc3BfcHJtX3Jtd19iaXRzKShPTUFQMzQzMF9SU1QyX0lWQTJfTUFTSywgMCwKKwkJCQkJT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAyX1JNX1JTVENUUkwpOworCWRzcF9jbGtfZW5hYmxlKERTUF9DTEtfSVZBMik7CisKKwkvKiBzZXQgdGhlIGRldmljZSBzdGF0ZSB0byBJRExFICovCisJZGV2X2NvbnRleHQtPmR3X2JyZF9zdGF0ZSA9IEJSRF9JRExFOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2JyZF9yZWFkID09PT09PT09CisgKiAgcHVycG9zZToKKyAqICAgICAgUmVhZHMgYnVmZmVycyBmb3IgRFNQIG1lbW9yeS4KKyAqLworc3RhdGljIGludCBicmlkZ2VfYnJkX3JlYWQoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQsCisJCQkJICB1OCAqaG9zdF9idWZmLCB1MzIgZHNwX2FkZHIsCisJCQkJICB1MzIgdWxfbnVtX2J5dGVzLCB1MzIgbWVtX3R5cGUpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQgPSBkZXZfY3R4dDsKKwl1MzIgb2Zmc2V0OworCXUzMiBkc3BfYmFzZV9hZGRyID0gZGV2X2N0eHQtPmR3X2RzcF9iYXNlX2FkZHI7CisKKwlpZiAoZHNwX2FkZHIgPCBkZXZfY29udGV4dC0+ZHdfZHNwX3N0YXJ0X2FkZCkgeworCQlzdGF0dXMgPSAtRVBFUk07CisJCXJldHVybiBzdGF0dXM7CisJfQorCS8qIGNoYW5nZSBoZXJlIHRvIGFjY291bnQgZm9yIHRoZSAzIGJhbmRzIG9mIHRoZSBEU1AgaW50ZXJuYWwgbWVtb3J5ICovCisJaWYgKChkc3BfYWRkciAtIGRldl9jb250ZXh0LT5kd19kc3Bfc3RhcnRfYWRkKSA8CisJICAgIGRldl9jb250ZXh0LT5kd19pbnRlcm5hbF9zaXplKSB7CisJCW9mZnNldCA9IGRzcF9hZGRyIC0gZGV2X2NvbnRleHQtPmR3X2RzcF9zdGFydF9hZGQ7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gcmVhZF9leHRfZHNwX2RhdGEoZGV2X2NvbnRleHQsIGhvc3RfYnVmZiwgZHNwX2FkZHIsCisJCQkJCSAgIHVsX251bV9ieXRlcywgbWVtX3R5cGUpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKwkvKiBjb3B5IHRoZSBkYXRhIGZyb20gIERTUCBtZW1vcnksICovCisJbWVtY3B5KGhvc3RfYnVmZiwgKHZvaWQgKikoZHNwX2Jhc2VfYWRkciArIG9mZnNldCksIHVsX251bV9ieXRlcyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfYnJkX3NldF9zdGF0ZSA9PT09PT09PQorICogIHB1cnBvc2U6CisgKiAgICAgIFRoaXMgcm91dGluZSB1cGRhdGVzIHRoZSBCb2FyZCBzdGF0dXMuCisgKi8KK3N0YXRpYyBpbnQgYnJpZGdlX2JyZF9zZXRfc3RhdGUoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQsCisJCQkJICAgIHUzMiBicmRfc3RhdGUpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQgPSBkZXZfY3R4dDsKKworCWRldl9jb250ZXh0LT5kd19icmRfc3RhdGUgPSBicmRfc3RhdGU7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfYnJkX3N0YXJ0ID09PT09PT09CisgKiAgcHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZXMgRFNQIE1NVSBhbmQgU3RhcnRzIERTUC4KKyAqCisgKiAgUHJlY29uZGl0aW9uczoKKyAqICBhKSBEU1AgZG9tYWluIGlzICdBQ1RJVkUnLgorICogIGIpIERTUF9SU1QxIGlzIGFzc2VydGVkLgorICogIGIpIERTUF9SU1QyIGlzIHJlbGVhc2VkLgorICovCitzdGF0aWMgaW50IGJyaWRnZV9icmRfc3RhcnQoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQsCisJCQkJICAgdTMyIGRzcF9hZGRyKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0ID0gZGV2X2N0eHQ7CisJdTMyIGR3X3N5bmNfYWRkciA9IDA7CisJdTMyIHVsX3NobV9iYXNlOwkvKiBHcHAgUGh5cyBTTSBiYXNlIGFkZHIoYnl0ZSkgKi8KKwl1MzIgdWxfc2htX2Jhc2VfdmlydDsJLyogRHNwIFZpcnQgU00gYmFzZSBhZGRyICovCisJdTMyIHVsX3RsYl9iYXNlX3ZpcnQ7CS8qIEJhc2Ugb2YgTU1VIFRMQiBlbnRyeSAqLworCS8qIE9mZnNldCBvZiBzaG1fYmFzZV92aXJ0IGZyb20gdGxiX2Jhc2VfdmlydCAqLworCXUzMiB1bF9zaG1fb2Zmc2V0X3ZpcnQ7CisJczMyIGVudHJ5X25keDsKKwlzMzIgaXRtcF9lbnRyeV9uZHggPSAwOwkvKiBEU1AtTU1VIFRMQiBlbnRyeSBiYXNlIGFkZHJlc3MgKi8KKwlzdHJ1Y3QgY2ZnX2hvc3RyZXMgKnJlc291cmNlcyA9IE5VTEw7CisJdTMyIHRlbXA7CisJdTMyIHVsX2RzcF9jbGtfcmF0ZTsKKwl1MzIgdWxfZHNwX2Nsa19hZGRyOworCXUzMiB1bF9iaW9zX2dwX3RpbWVyOworCXUzMiBjbGtfY21kOworCXN0cnVjdCBpb19tZ3IgKmhpb19tZ3I7CisJdTMyIHVsX2xvYWRfbW9uaXRvcl90aW1lcjsKKwlzdHJ1Y3QgZHNwYnJpZGdlX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0KKwkJCQlvbWFwX2RzcGJyaWRnZV9kZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJLyogVGhlIGRldmljZSBjb250ZXh0IGNvbnRhaW5zIGFsbCB0aGUgbW11IHNldHVwIGluZm8gZnJvbSB3aGVuIHRoZQorCSAqIGxhc3QgZHNwIGJhc2UgaW1hZ2Ugd2FzIGxvYWRlZC4gVGhlIGZpcnN0IGVudHJ5IGlzIGFsd2F5cworCSAqIFNITU1FTSBiYXNlLiAqLworCS8qIEdldCBTSE1fQkVHIC0gY29udmVydCB0byBieXRlIGFkZHJlc3MgKi8KKwkodm9pZClkZXZfZ2V0X3N5bWJvbChkZXZfY29udGV4dC0+aGRldl9vYmosIFNITUJBU0VOQU1FLAorCQkJICAgICAmdWxfc2htX2Jhc2VfdmlydCk7CisJdWxfc2htX2Jhc2VfdmlydCAqPSBEU1BXT1JEU0laRTsKKwlEQkNfQVNTRVJUKHVsX3NobV9iYXNlX3ZpcnQgIT0gMCk7CisJLyogRFNQIFZpcnR1YWwgYWRkcmVzcyAqLworCXVsX3RsYl9iYXNlX3ZpcnQgPSBkZXZfY29udGV4dC0+YXRsYl9lbnRyeVswXS51bF9kc3BfdmE7CisJREJDX0FTU0VSVCh1bF90bGJfYmFzZV92aXJ0IDw9IHVsX3NobV9iYXNlX3ZpcnQpOworCXVsX3NobV9vZmZzZXRfdmlydCA9CisJICAgIHVsX3NobV9iYXNlX3ZpcnQgLSAodWxfdGxiX2Jhc2VfdmlydCAqIERTUFdPUkRTSVpFKTsKKwkvKiBLZXJuZWwgbG9naWNhbCBhZGRyZXNzICovCisJdWxfc2htX2Jhc2UgPSBkZXZfY29udGV4dC0+YXRsYl9lbnRyeVswXS51bF9ncHBfdmEgKyB1bF9zaG1fb2Zmc2V0X3ZpcnQ7CisKKwlEQkNfQVNTRVJUKHVsX3NobV9iYXNlICE9IDApOworCS8qIDJuZCB3ZCBpcyB1c2VkIGFzIHN5bmMgZmllbGQgKi8KKwlkd19zeW5jX2FkZHIgPSB1bF9zaG1fYmFzZSArIFNITVNZTkNPRkZTRVQ7CisJLyogV3JpdGUgYSBzaWduYXR1cmUgaW50byB0aGUgc2htIGJhc2UgKyBvZmZzZXQ7IHRoaXMgd2lsbAorCSAqIGdldCBjbGVhcmVkIHdoZW4gdGhlIERTUCBwcm9ncmFtIHN0YXJ0cy4gKi8KKwlpZiAoKHVsX3NobV9iYXNlX3ZpcnQgPT0gMCkgfHwgKHVsX3NobV9iYXNlID09IDApKSB7CisJCXByX2VycigiJXM6IElsbGVnYWwgU00gYmFzZVxuIiwgX19mdW5jX18pOworCQlzdGF0dXMgPSAtRVBFUk07CisJfSBlbHNlCisJCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBkd19zeW5jX2FkZHIpOworCisJaWYgKCFzdGF0dXMpIHsKKwkJcmVzb3VyY2VzID0gZGV2X2NvbnRleHQtPnJlc291cmNlczsKKwkJaWYgKCFyZXNvdXJjZXMpCisJCQlzdGF0dXMgPSAtRVBFUk07CisKKwkJLyogQXNzZXJ0IFJTVDEgaS5lIG9ubHkgdGhlIFJTVCBvbmx5IGZvciBEU1AgbWVnYWNlbGwgKi8KKwkJaWYgKCFzdGF0dXMpIHsKKwkJCSgqcGRhdGEtPmRzcF9wcm1fcm13X2JpdHMpKE9NQVAzNDMwX1JTVDFfSVZBMl9NQVNLLAorCQkJCQlPTUFQMzQzMF9SU1QxX0lWQTJfTUFTSywgT01BUDM0MzBfSVZBMl9NT0QsCisJCQkJCU9NQVAyX1JNX1JTVENUUkwpOworCQkJLyogTWFzayBhZGRyZXNzIHdpdGggMUsgZm9yIGNvbXBhdGliaWxpdHkgKi8KKwkJCV9fcmF3X3dyaXRlbChkc3BfYWRkciAmIE9NQVAzX0lWQTJfQk9PVEFERFJfTUFTSywKKwkJCQkJT01BUDM0M1hfQ1RSTF9SRUdBRERSKAorCQkJCQlPTUFQMzQzWF9DT05UUk9MX0lWQTJfQk9PVEFERFIpKTsKKwkJCS8qCisJCQkgKiBTZXQgYm9vdG1vZGUgdG8gc2VsZiBsb29wIGlmIGRzcF9kZWJ1ZyBmbGFnIGlzIHRydWUKKwkJCSAqLworCQkJX19yYXdfd3JpdGVsKChkc3BfZGVidWcpID8gT01BUDNfSVZBMl9CT09UTU9EX0lETEUgOiAwLAorCQkJCQlPTUFQMzQzWF9DVFJMX1JFR0FERFIoCisJCQkJCU9NQVAzNDNYX0NPTlRST0xfSVZBMl9CT09UTU9EKSk7CisJCX0KKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJLyogUmVzZXQgYW5kIFVucmVzZXQgdGhlIFJTVDIsIHNvIHRoYXQgQk9PVEFERFIgaXMgY29waWVkIHRvCisJCSAqIElWQTIgU1lTQyByZWdpc3RlciAqLworCQkoKnBkYXRhLT5kc3BfcHJtX3Jtd19iaXRzKShPTUFQMzQzMF9SU1QyX0lWQTJfTUFTSywKKwkJCU9NQVAzNDMwX1JTVDJfSVZBMl9NQVNLLCBPTUFQMzQzMF9JVkEyX01PRCwgT01BUDJfUk1fUlNUQ1RSTCk7CisJCXVkZWxheSgxMDApOworCQkoKnBkYXRhLT5kc3BfcHJtX3Jtd19iaXRzKShPTUFQMzQzMF9SU1QyX0lWQTJfTUFTSywgMCwKKwkJCQkJT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAyX1JNX1JTVENUUkwpOworCQl1ZGVsYXkoMTAwKTsKKworCQkvKiBEaXNiYWxlIHRoZSBEU1AgTU1VICovCisJCWh3X21tdV9kaXNhYmxlKHJlc291cmNlcy0+ZHdfZG1tdV9iYXNlKTsKKwkJLyogRGlzYWJsZSBUV0wgKi8KKwkJaHdfbW11X3R3bF9kaXNhYmxlKHJlc291cmNlcy0+ZHdfZG1tdV9iYXNlKTsKKworCQkvKiBPbmx5IG1ha2UgVExCIGVudHJ5IGlmIGJvdGggYWRkcmVzc2VzIGFyZSBub24temVybyAqLworCQlmb3IgKGVudHJ5X25keCA9IDA7IGVudHJ5X25keCA8IEJSRElPQ1RMX05VTU9GTU1VVExCOworCQkgICAgIGVudHJ5X25keCsrKSB7CisJCQlzdHJ1Y3QgYnJpZGdlX2lvY3RsX2V4dHByb2MgKmUgPSAmZGV2X2NvbnRleHQtPmF0bGJfZW50cnlbZW50cnlfbmR4XTsKKwkJCXN0cnVjdCBod19tbXVfbWFwX2F0dHJzX3QgbWFwX2F0dHJzID0geworCQkJCS5lbmRpYW5pc20gPSBlLT5lbmRpYW5pc20sCisJCQkJLmVsZW1lbnRfc2l6ZSA9IGUtPmVsZW1fc2l6ZSwKKwkJCQkubWl4ZWRfc2l6ZSA9IGUtPm1peGVkX21vZGUsCisJCQl9OworCisJCQlpZiAoIWUtPnVsX2dwcF9wYSB8fCAhZS0+dWxfZHNwX3ZhKQorCQkJCWNvbnRpbnVlOworCisJCQlkZXZfZGJnKGJyaWRnZSwKKwkJCQkJIk1NVSAlZCwgcGE6IDB4JXgsIHZhOiAweCV4LCBzaXplOiAweCV4IiwKKwkJCQkJaXRtcF9lbnRyeV9uZHgsCisJCQkJCWUtPnVsX2dwcF9wYSwKKwkJCQkJZS0+dWxfZHNwX3ZhLAorCQkJCQllLT51bF9zaXplKTsKKworCQkJaHdfbW11X3RsYl9hZGQoZGV2X2NvbnRleHQtPmR3X2RzcF9tbXVfYmFzZSwKKwkJCQkJZS0+dWxfZ3BwX3BhLAorCQkJCQllLT51bF9kc3BfdmEsCisJCQkJCWUtPnVsX3NpemUsCisJCQkJCWl0bXBfZW50cnlfbmR4LAorCQkJCQkmbWFwX2F0dHJzLCAxLCAxKTsKKworCQkJaXRtcF9lbnRyeV9uZHgrKzsKKwkJfQorCX0KKworCS8qIExvY2sgdGhlIGFib3ZlIFRMQiBlbnRyaWVzIGFuZCBnZXQgdGhlIEJJT1MgYW5kIGxvYWQgbW9uaXRvciB0aW1lcgorCSAqIGluZm9ybWF0aW9uICovCisJaWYgKCFzdGF0dXMpIHsKKwkJaHdfbW11X251bV9sb2NrZWRfc2V0KHJlc291cmNlcy0+ZHdfZG1tdV9iYXNlLCBpdG1wX2VudHJ5X25keCk7CisJCWh3X21tdV92aWN0aW1fbnVtX3NldChyZXNvdXJjZXMtPmR3X2RtbXVfYmFzZSwgaXRtcF9lbnRyeV9uZHgpOworCQlod19tbXVfdHRiX3NldChyZXNvdXJjZXMtPmR3X2RtbXVfYmFzZSwKKwkJCSAgICAgICBkZXZfY29udGV4dC0+cHRfYXR0cnMtPmwxX2Jhc2VfcGEpOworCQlod19tbXVfdHdsX2VuYWJsZShyZXNvdXJjZXMtPmR3X2RtbXVfYmFzZSk7CisJCS8qIEVuYWJsZSB0aGUgU21hcnRJZGxlIGFuZCBBdXRvSWRsZSBiaXQgZm9yIE1NVV9TWVNDT05GSUcgKi8KKworCQl0ZW1wID0gX19yYXdfcmVhZGwoKHJlc291cmNlcy0+ZHdfZG1tdV9iYXNlKSArIDB4MTApOworCQl0ZW1wID0gKHRlbXAgJiAweEZGRkZGRkVGKSB8IDB4MTE7CisJCV9fcmF3X3dyaXRlbCh0ZW1wLCAocmVzb3VyY2VzLT5kd19kbW11X2Jhc2UpICsgMHgxMCk7CisKKwkJLyogTGV0IHRoZSBEU1AgTU1VIHJ1biAqLworCQlod19tbXVfZW5hYmxlKHJlc291cmNlcy0+ZHdfZG1tdV9iYXNlKTsKKworCQkvKiBFbmFibGUgdGhlIEJJT1MgY2xvY2sgKi8KKwkJKHZvaWQpZGV2X2dldF9zeW1ib2woZGV2X2NvbnRleHQtPmhkZXZfb2JqLAorCQkJCSAgICAgQlJJREdFSU5JVF9CSU9TR1BUSU1FUiwgJnVsX2Jpb3NfZ3BfdGltZXIpOworCQkodm9pZClkZXZfZ2V0X3N5bWJvbChkZXZfY29udGV4dC0+aGRldl9vYmosCisJCQkJICAgICBCUklER0VJTklUX0xPQURNT05fR1BUSU1FUiwKKwkJCQkgICAgICZ1bF9sb2FkX21vbml0b3JfdGltZXIpOworCX0KKworCWlmICghc3RhdHVzKSB7CisJCWlmICh1bF9sb2FkX21vbml0b3JfdGltZXIgIT0gMHhGRkZGKSB7CisJCQljbGtfY21kID0gKEJQV1JfRU5BQkxFX0NMT0NLIDw8IE1CWF9QTV9DTEtfQ01EU0hJRlQpIHwKKwkJCSAgICB1bF9sb2FkX21vbml0b3JfdGltZXI7CisJCQlkc3BfcGVyaXBoZXJhbF9jbGtfY3RybChkZXZfY29udGV4dCwgJmNsa19jbWQpOworCQl9IGVsc2UgeworCQkJZGV2X2RiZyhicmlkZ2UsICJOb3QgYWJsZSB0byBnZXQgdGhlIHN5bWJvbCBmb3IgTG9hZCAiCisJCQkJIk1vbml0b3IgVGltZXJcbiIpOworCQl9CisJfQorCisJaWYgKCFzdGF0dXMpIHsKKwkJaWYgKHVsX2Jpb3NfZ3BfdGltZXIgIT0gMHhGRkZGKSB7CisJCQljbGtfY21kID0gKEJQV1JfRU5BQkxFX0NMT0NLIDw8IE1CWF9QTV9DTEtfQ01EU0hJRlQpIHwKKwkJCSAgICB1bF9iaW9zX2dwX3RpbWVyOworCQkJZHNwX3BlcmlwaGVyYWxfY2xrX2N0cmwoZGV2X2NvbnRleHQsICZjbGtfY21kKTsKKwkJfSBlbHNlIHsKKwkJCWRldl9kYmcoYnJpZGdlLAorCQkJCSJOb3QgYWJsZSB0byBnZXQgdGhlIHN5bWJvbCBmb3IgQklPUyBUaW1lclxuIik7CisJCX0KKwl9CisKKwlpZiAoIXN0YXR1cykgeworCQkvKiBTZXQgdGhlIERTUCBjbG9jayByYXRlICovCisJCSh2b2lkKWRldl9nZXRfc3ltYm9sKGRldl9jb250ZXh0LT5oZGV2X29iaiwKKwkJCQkgICAgICJfQlJJREdFSU5JVF9EU1BfRlJFUSIsICZ1bF9kc3BfY2xrX2FkZHIpOworCQkvKlNldCBBdXRvaWRsZSBNb2RlIGZvciBJVkEyIFBMTCAqLworCQkoKnBkYXRhLT5kc3BfY21fd3JpdGUpKDEgPDwgT01BUDM0MzBfQVVUT19JVkEyX0RQTExfU0hJRlQsCisJCQkJT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAzNDMwX0NNX0FVVE9JRExFX1BMTCk7CisKKwkJaWYgKCh1bnNpZ25lZCBpbnQgKil1bF9kc3BfY2xrX2FkZHIgIT0gTlVMTCkgeworCQkJLyogR2V0IHRoZSBjbG9jayByYXRlICovCisJCQl1bF9kc3BfY2xrX3JhdGUgPSBkc3BfY2xrX2dldF9pdmEyX3JhdGUoKTsKKwkJCWRldl9kYmcoYnJpZGdlLCAiJXM6IERTUCBjbG9jayByYXRlIChLSFopOiAweCV4IFxuIiwKKwkJCQlfX2Z1bmNfXywgdWxfZHNwX2Nsa19yYXRlKTsKKwkJCSh2b2lkKWJyaWRnZV9icmRfd3JpdGUoZGV2X2NvbnRleHQsCisJCQkJCSAgICAgICAodTggKikgJnVsX2RzcF9jbGtfcmF0ZSwKKwkJCQkJICAgICAgIHVsX2RzcF9jbGtfYWRkciwgc2l6ZW9mKHUzMiksIDApOworCQl9CisJCS8qCisJCSAqIEVuYWJsZSBNYWlsYm94IGV2ZW50cyBhbmQgYWxzbyBkcmFpbiBhbnkgcGVuZGluZworCQkgKiBzdGFsZSBtZXNzYWdlcy4KKwkJICovCisJCWRldl9jb250ZXh0LT5tYm94ID0gb21hcF9tYm94X2dldCgiZHNwIik7CisJCWlmIChJU19FUlIoZGV2X2NvbnRleHQtPm1ib3gpKSB7CisJCQlkZXZfY29udGV4dC0+bWJveCA9IE5VTEw7CisJCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gZ2V0IGRzcCBtYWlsYm94IGhhbmRsZVxuIiwKKwkJCQkJCQkJX19mdW5jX18pOworCQkJc3RhdHVzID0gLUVQRVJNOworCQl9CisKKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJZGV2X2NvbnRleHQtPm1ib3gtPnJ4cS0+Y2FsbGJhY2sgPSAoaW50ICgqKSh2b2lkICopKWlvX21ib3hfbXNnOworCisvKlBNX0lWQTJHUlBTRUxfUEVSID0gMHhDMDsqLworCQl0ZW1wID0gcmVhZGwocmVzb3VyY2VzLT5kd19wZXJfcG1fYmFzZSArIDB4QTgpOworCQl0ZW1wID0gKHRlbXAgJiAweEZGRkZGRjMwKSB8IDB4QzA7CisJCXdyaXRlbCh0ZW1wLCByZXNvdXJjZXMtPmR3X3Blcl9wbV9iYXNlICsgMHhBOCk7CisKKy8qUE1fTVBVR1JQU0VMX1BFUiAmPSAweEZGRkZGRjNGOyAqLworCQl0ZW1wID0gcmVhZGwocmVzb3VyY2VzLT5kd19wZXJfcG1fYmFzZSArIDB4QTQpOworCQl0ZW1wID0gKHRlbXAgJiAweEZGRkZGRjNGKTsKKwkJd3JpdGVsKHRlbXAsIHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE0KTsKKy8qQ01fU0xFRVBERVBfUEVSIHw9IDB4MDQ7ICovCisJCXRlbXAgPSByZWFkbChyZXNvdXJjZXMtPmR3X3Blcl9iYXNlICsgMHg0NCk7CisJCXRlbXAgPSAodGVtcCAmIDB4RkZGRkZGRkIpIHwgMHgwNDsKKwkJd3JpdGVsKHRlbXAsIHJlc291cmNlcy0+ZHdfcGVyX2Jhc2UgKyAweDQ0KTsKKworLypDTV9DTEtTVENUUkxfSVZBMiA9IDB4MDAwMDAwMDMgLVRvIEFsbG93IGF1dG9tYXRpYyB0cmFuc2l0aW9ucyAqLworCQkoKnBkYXRhLT5kc3BfY21fd3JpdGUpKE9NQVAzNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTywKKwkJCQkJT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCk7CisKKwkJLyogTGV0IERTUCBnbyAqLworCQlkZXZfZGJnKGJyaWRnZSwgIiVzIFVucmVzZXRcbiIsIF9fZnVuY19fKTsKKwkJLyogRW5hYmxlIERTUCBNTVUgSW50ZXJydXB0cyAqLworCQlod19tbXVfZXZlbnRfZW5hYmxlKHJlc291cmNlcy0+ZHdfZG1tdV9iYXNlLAorCQkJCSAgICBIV19NTVVfQUxMX0lOVEVSUlVQVFMpOworCQkvKiByZWxlYXNlIHRoZSBSU1QxLCBEU1Agc3RhcnRzIGV4ZWN1dGluZyBub3cgLi4gKi8KKwkJKCpwZGF0YS0+ZHNwX3BybV9ybXdfYml0cykoT01BUDM0MzBfUlNUMV9JVkEyX01BU0ssIDAsCisJCQkJCU9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMl9STV9SU1RDVFJMKTsKKworCQlkZXZfZGJnKGJyaWRnZSwgIldhaXRpbmcgZm9yIFN5bmMgQCAweCV4XG4iLCBkd19zeW5jX2FkZHIpOworCQlkZXZfZGJnKGJyaWRnZSwgIkRTUCBjX2ludDAwIEFkZHJlc3MgPSAgMHgleFxuIiwgZHNwX2FkZHIpOworCQlpZiAoZHNwX2RlYnVnKQorCQkJd2hpbGUgKF9fcmF3X3JlYWR3KGR3X3N5bmNfYWRkcikpCisJCQkJOzsKKworCQkvKiBXYWl0IGZvciBEU1AgdG8gY2xlYXIgd29yZCBpbiBzaGFyZWQgbWVtb3J5ICovCisJCS8qIFJlYWQgdGhlIExvY2F0aW9uICovCisJCWlmICghd2FpdF9mb3Jfc3RhcnQoZGV2X2NvbnRleHQsIGR3X3N5bmNfYWRkcikpCisJCQlzdGF0dXMgPSAtRVRJTUVET1VUOworCisJCS8qIFN0YXJ0IHdkdCAqLworCQlkc3Bfd2R0X3NtX3NldCgodm9pZCAqKXVsX3NobV9iYXNlKTsKKwkJZHNwX3dkdF9lbmFibGUodHJ1ZSk7CisKKwkJc3RhdHVzID0gZGV2X2dldF9pb19tZ3IoZGV2X2NvbnRleHQtPmhkZXZfb2JqLCAmaGlvX21ncik7CisJCWlmIChoaW9fbWdyKSB7CisJCQlpb19zaF9tc2V0dGluZyhoaW9fbWdyLCBTSE1fT1BQSU5GTywgTlVMTCk7CisJCQkvKiBXcml0ZSB0aGUgc3luY2hyb25pemF0aW9uIGJpdCB0byBpbmRpY2F0ZSB0aGUKKwkJCSAqIGNvbXBsZXRpb24gb2YgT1BQIHRhYmxlIHVwZGF0ZSB0byBEU1AKKwkJCSAqLworCQkJX19yYXdfd3JpdGVsKDBYQ0FGRUNBRkUsIGR3X3N5bmNfYWRkcik7CisKKwkJCS8qIHVwZGF0ZSBib2FyZCBzdGF0ZSAqLworCQkJZGV2X2NvbnRleHQtPmR3X2JyZF9zdGF0ZSA9IEJSRF9SVU5OSU5HOworCQkJLyogKHZvaWQpY2hubHNtX2VuYWJsZV9pbnRlcnJ1cHQoZGV2X2NvbnRleHQpOyAqLworCQl9IGVsc2UgeworCQkJZGV2X2NvbnRleHQtPmR3X2JyZF9zdGF0ZSA9IEJSRF9VTktOT1dOOworCQl9CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2JyZF9zdG9wID09PT09PT09CisgKiAgcHVycG9zZToKKyAqICAgICAgUHV0cyBEU1AgaW4gc2VsZiBsb29wLgorICoKKyAqICBQcmVjb25kaXRpb25zIDoKKyAqICBhKSBOb25lCisgKi8KK3N0YXRpYyBpbnQgYnJpZGdlX2JyZF9zdG9wKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0KQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0ID0gZGV2X2N0eHQ7CisJc3RydWN0IHBnX3RhYmxlX2F0dHJzICpwdF9hdHRyczsKKwl1MzIgZHNwX3B3cl9zdGF0ZTsKKwlpbnQgY2xrX3N0YXR1czsKKwlzdHJ1Y3QgZHNwYnJpZGdlX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0KKwkJCQlvbWFwX2RzcGJyaWRnZV9kZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJaWYgKGRldl9jb250ZXh0LT5kd19icmRfc3RhdGUgPT0gQlJEX1NUT1BQRUQpCisJCXJldHVybiBzdGF0dXM7CisKKwkvKiBhcyBwZXIgVFJNLCBpdCBpcyBhZHZpc2VkIHRvIGZpcnN0IGRyaXZlIHRoZSBJVkEyIHRvICdTdGFuZGJ5JyBtb2RlLAorCSAqIGJlZm9yZSB0dXJuaW5nIG9mZiB0aGUgY2xvY2tzLi4gVGhpcyBpcyB0byBlbnN1cmUgdGhhdCB0aGVyZSBhcmUgbm8KKwkgKiBwZW5kaW5nIEwzIG9yIG90aGVyIHRyYW5zYWN0b25zIGZyb20gSVZBMiAqLworCWRzcF9wd3Jfc3RhdGUgPSAoKnBkYXRhLT5kc3BfcHJtX3JlYWQpKE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMl9QTV9QV1NUU1QpICYKKwkJCQkJT01BUF9QT1dFUlNUQVRFU1RfTUFTSzsKKwlpZiAoZHNwX3B3cl9zdGF0ZSAhPSBQV1JETV9QT1dFUl9PRkYpIHsKKwkJKCpwZGF0YS0+ZHNwX3BybV9ybXdfYml0cykoT01BUDM0MzBfUlNUMl9JVkEyX01BU0ssIDAsCisJCQkJCU9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMl9STV9SU1RDVFJMKTsKKwkJc21faW50ZXJydXB0X2RzcChkZXZfY29udGV4dCwgTUJYX1BNX0RTUElETEUpOworCQltZGVsYXkoMTApOworCisJCS8qIElWQTIgaXMgbm90IGluIE9GRiBzdGF0ZSAqLworCQkvKiBTZXQgUE1fUFdTVENUUkxfSVZBMiAgdG8gT0ZGICovCisJCSgqcGRhdGEtPmRzcF9wcm1fcm13X2JpdHMpKE9NQVBfUE9XRVJTVEFURVNUX01BU0ssCisJCQlQV1JETV9QT1dFUl9PRkYsIE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMl9QTV9QV1NUQ1RSTCk7CisJCS8qIFNldCB0aGUgU1cgc3VwZXJ2aXNlZCBzdGF0ZSB0cmFuc2l0aW9uIGZvciBTbGVlcCAqLworCQkoKnBkYXRhLT5kc3BfY21fd3JpdGUpKE9NQVAzNFhYX0NMS1NUQ1RSTF9GT1JDRV9TTEVFUCwKKwkJCQkJT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCk7CisJfQorCXVkZWxheSgxMCk7CisJLyogUmVsZWFzZSB0aGUgRXh0IEJhc2UgdmlydHVhbCBBZGRyZXNzIGFzIHRoZSBuZXh0IERTUCBQcm9ncmFtCisJICogbWF5IGhhdmUgYSBkaWZmZXJlbnQgbG9hZCBhZGRyZXNzICovCisJaWYgKGRldl9jb250ZXh0LT5kd19kc3BfZXh0X2Jhc2VfYWRkcikKKwkJZGV2X2NvbnRleHQtPmR3X2RzcF9leHRfYmFzZV9hZGRyID0gMDsKKworCWRldl9jb250ZXh0LT5kd19icmRfc3RhdGUgPSBCUkRfU1RPUFBFRDsJLyogdXBkYXRlIGJvYXJkIHN0YXRlICovCisKKwlkc3Bfd2R0X2VuYWJsZShmYWxzZSk7CisKKwkvKiBUaGlzIGlzIGEgZ29vZCBwbGFjZSB0byBjbGVhciB0aGUgTU1VIHBhZ2UgdGFibGVzIGFzIHdlbGwgKi8KKwlpZiAoZGV2X2NvbnRleHQtPnB0X2F0dHJzKSB7CisJCXB0X2F0dHJzID0gZGV2X2NvbnRleHQtPnB0X2F0dHJzOworCQltZW1zZXQoKHU4ICopIHB0X2F0dHJzLT5sMV9iYXNlX3ZhLCAweDAwLCBwdF9hdHRycy0+bDFfc2l6ZSk7CisJCW1lbXNldCgodTggKikgcHRfYXR0cnMtPmwyX2Jhc2VfdmEsIDB4MDAsIHB0X2F0dHJzLT5sMl9zaXplKTsKKwkJbWVtc2V0KCh1OCAqKSBwdF9hdHRycy0+cGdfaW5mbywgMHgwMCwKKwkJICAgICAgIChwdF9hdHRycy0+bDJfbnVtX3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlX2luZm8pKSk7CisJfQorCS8qIERpc2FibGUgdGhlIG1haWxib3ggaW50ZXJydXB0cyAqLworCWlmIChkZXZfY29udGV4dC0+bWJveCkgeworCQlvbWFwX21ib3hfZGlzYWJsZV9pcnEoZGV2X2NvbnRleHQtPm1ib3gsIElSUV9SWCk7CisJCW9tYXBfbWJveF9wdXQoZGV2X2NvbnRleHQtPm1ib3gpOworCQlkZXZfY29udGV4dC0+bWJveCA9IE5VTEw7CisJfQorCS8qIFJlc2V0IElWQTIgY2xvY2tzKi8KKwkoKnBkYXRhLT5kc3BfcHJtX3dyaXRlKShPTUFQMzQzMF9SU1QxX0lWQTJfTUFTSyB8IE9NQVAzNDMwX1JTVDJfSVZBMl9NQVNLIHwKKwkJCU9NQVAzNDMwX1JTVDNfSVZBMl9NQVNLLCBPTUFQMzQzMF9JVkEyX01PRCwgT01BUDJfUk1fUlNUQ1RSTCk7CisKKwljbGtfc3RhdHVzID0gZHNwX2Nsa19kaXNhYmxlKERTUF9DTEtfSVZBMik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGJyaWRnZV9icmRfc3RhdHVzID09PT09PT09CisgKiAgICAgIFJldHVybnMgdGhlIGJvYXJkIHN0YXR1cy4KKyAqLworc3RhdGljIGludCBicmlkZ2VfYnJkX3N0YXR1cyhzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCwKKwkJCQkgICAgaW50ICpib2FyZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCA9IGRldl9jdHh0OworCSpib2FyZF9zdGF0ZSA9IGRldl9jb250ZXh0LT5kd19icmRfc3RhdGU7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2JyZF93cml0ZSA9PT09PT09PQorICogICAgICBDb3BpZXMgdGhlIGJ1ZmZlcnMgdG8gRFNQIGludGVybmFsIG9yIGV4dGVybmFsIG1lbW9yeS4KKyAqLworc3RhdGljIGludCBicmlkZ2VfYnJkX3dyaXRlKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAorCQkJCSAgIHU4ICpob3N0X2J1ZmYsIHUzMiBkc3BfYWRkciwKKwkJCQkgICB1MzIgdWxfbnVtX2J5dGVzLCB1MzIgbWVtX3R5cGUpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQgPSBkZXZfY3R4dDsKKworCWlmIChkc3BfYWRkciA8IGRldl9jb250ZXh0LT5kd19kc3Bfc3RhcnRfYWRkKSB7CisJCXN0YXR1cyA9IC1FUEVSTTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJaWYgKChkc3BfYWRkciAtIGRldl9jb250ZXh0LT5kd19kc3Bfc3RhcnRfYWRkKSA8CisJICAgIGRldl9jb250ZXh0LT5kd19pbnRlcm5hbF9zaXplKSB7CisJCXN0YXR1cyA9IHdyaXRlX2RzcF9kYXRhKGRldl9jdHh0LCBob3N0X2J1ZmYsIGRzcF9hZGRyLAorCQkJCQl1bF9udW1fYnl0ZXMsIG1lbV90eXBlKTsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSB3cml0ZV9leHRfZHNwX2RhdGEoZGV2X2NvbnRleHQsIGhvc3RfYnVmZiwgZHNwX2FkZHIsCisJCQkJCSAgICB1bF9udW1fYnl0ZXMsIG1lbV90eXBlLCBmYWxzZSk7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfZGV2X2NyZWF0ZSA9PT09PT09PQorICogICAgICBDcmVhdGVzIGEgZHJpdmVyIG9iamVjdC4gUHV0cyBEU1AgaW4gc2VsZiBsb29wLgorICovCitzdGF0aWMgaW50IGJyaWRnZV9kZXZfY3JlYXRlKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQKKwkJCQkJKipkZXZfY250eHQsCisJCQkJCXN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCQkJc3RydWN0IGNmZ19ob3N0cmVzICpjb25maWdfcGFyYW0pCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQgPSBOVUxMOworCXMzMiBlbnRyeV9uZHg7CisJc3RydWN0IGNmZ19ob3N0cmVzICpyZXNvdXJjZXMgPSBjb25maWdfcGFyYW07CisJc3RydWN0IHBnX3RhYmxlX2F0dHJzICpwdF9hdHRyczsKKwl1MzIgcGdfdGJsX3BhOworCXUzMiBwZ190YmxfdmE7CisJdTMyIGFsaWduX3NpemU7CisJc3RydWN0IGRydl9kYXRhICpkcnZfZGF0YXAgPSBkZXZfZ2V0X2RydmRhdGEoYnJpZGdlKTsKKworCS8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgZGF0YSBzdHJ1Y3R1cmUgdG8gY29udGFpbiB0aGUgYnJpZGdlIGRyaXZlcgorCSAqICBzdGF0ZSwgd2hpY2ggYmVjb21lcyB0aGUgY29udGV4dCBmb3IgbGF0ZXIgY2FsbHMgaW50byB0aGlzIGRyaXZlciAqLworCWRldl9jb250ZXh0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCksIEdGUF9LRVJORUwpOworCWlmICghZGV2X2NvbnRleHQpIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwlkZXZfY29udGV4dC0+ZHdfZHNwX3N0YXJ0X2FkZCA9ICh1MzIpIE9NQVBfR0VNX0JBU0U7CisJZGV2X2NvbnRleHQtPmR3X3NlbGZfbG9vcCA9ICh1MzIpIE5VTEw7CisJZGV2X2NvbnRleHQtPmRzcF9wZXJfY2xrcyA9IDA7CisJZGV2X2NvbnRleHQtPmR3X2ludGVybmFsX3NpemUgPSBPTUFQX0RTUF9TSVpFOworCS8qICBDbGVhciBkZXYgY29udGV4dCBNTVUgdGFibGUgZW50cmllcy4KKwkgKiAgVGhlc2UgZ2V0IHNldCBvbiBicmlkZ2VfaW9fb25fbG9hZGVkKCkgY2FsbCBhZnRlciBwcm9ncmFtIGxvYWRlZC4gKi8KKwlmb3IgKGVudHJ5X25keCA9IDA7IGVudHJ5X25keCA8IEJSRElPQ1RMX05VTU9GTU1VVExCOyBlbnRyeV9uZHgrKykgeworCQlkZXZfY29udGV4dC0+YXRsYl9lbnRyeVtlbnRyeV9uZHhdLnVsX2dwcF9wYSA9CisJCSAgICBkZXZfY29udGV4dC0+YXRsYl9lbnRyeVtlbnRyeV9uZHhdLnVsX2RzcF92YSA9IDA7CisJfQorCWRldl9jb250ZXh0LT5kd19kc3BfYmFzZV9hZGRyID0gKHUzMikgTUVNX0xJTkVBUl9BRERSRVNTKCh2b2lkICopCisJCQkJCQkJCSAoY29uZmlnX3BhcmFtLT4KKwkJCQkJCQkJICBkd19tZW1fYmFzZQorCQkJCQkJCQkgIFszXSksCisJCQkJCQkJCSBjb25maWdfcGFyYW0tPgorCQkJCQkJCQkgZHdfbWVtX2xlbmd0aAorCQkJCQkJCQkgWzNdKTsKKwlpZiAoIWRldl9jb250ZXh0LT5kd19kc3BfYmFzZV9hZGRyKQorCQlzdGF0dXMgPSAtRVBFUk07CisKKwlwdF9hdHRycyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwZ190YWJsZV9hdHRycyksIEdGUF9LRVJORUwpOworCWlmIChwdF9hdHRycyAhPSBOVUxMKSB7CisJCS8qIEFzc3VtaW5nIHRoYXQgd2UgdXNlIG9ubHkgRFNQJ3MgbWVtb3J5IG1hcAorCQkgKiB1bnRpbCAweDQwMDA6MDAwMCAsIHdlIHdvdWxkIG5lZWQgb25seSAxMDI0CisJCSAqIEwxIGVudGllcyBpLmUgTDEgc2l6ZSA9IDRLICovCisJCXB0X2F0dHJzLT5sMV9zaXplID0gMHgxMDAwOworCQlhbGlnbl9zaXplID0gcHRfYXR0cnMtPmwxX3NpemU7CisJCS8qIEFsaWduIHNpemVzIGFyZSBleHBlY3RlZCB0byBiZSBwb3dlciBvZiAyICovCisJCS8qIHdlIGxpa2UgdG8gZ2V0IGFsaWduZWQgb24gTDEgdGFibGUgc2l6ZSAqLworCQlwZ190YmxfdmEgPSAodTMyKSBtZW1fYWxsb2NfcGh5c19tZW0ocHRfYXR0cnMtPmwxX3NpemUsCisJCQkJCQkgICAgIGFsaWduX3NpemUsICZwZ190YmxfcGEpOworCisJCS8qIENoZWNrIGlmIHRoZSBQQSBpcyBhbGlnbmVkIGZvciB1cyAqLworCQlpZiAoKHBnX3RibF9wYSkgJiAoYWxpZ25fc2l6ZSAtIDEpKSB7CisJCQkvKiBQQSBub3QgYWxpZ25lZCB0byBwYWdlIHRhYmxlIHNpemUgLAorCQkJICogdHJ5IHdpdGggbW9yZSBhbGxvY2F0aW9uIGFuZCBhbGlnbiAqLworCQkJbWVtX2ZyZWVfcGh5c19tZW0oKHZvaWQgKilwZ190YmxfdmEsIHBnX3RibF9wYSwKKwkJCQkJICBwdF9hdHRycy0+bDFfc2l6ZSk7CisJCQkvKiB3ZSBsaWtlIHRvIGdldCBhbGlnbmVkIG9uIEwxIHRhYmxlIHNpemUgKi8KKwkJCXBnX3RibF92YSA9CisJCQkgICAgKHUzMikgbWVtX2FsbG9jX3BoeXNfbWVtKChwdF9hdHRycy0+bDFfc2l6ZSkgKiAyLAorCQkJCQkJICAgICBhbGlnbl9zaXplLCAmcGdfdGJsX3BhKTsKKwkJCS8qIFdlIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhbGlnbmVkIHRhYmxlIG5vdyAqLworCQkJcHRfYXR0cnMtPmwxX3RibF9hbGxvY19wYSA9IHBnX3RibF9wYTsKKwkJCXB0X2F0dHJzLT5sMV90YmxfYWxsb2NfdmEgPSBwZ190YmxfdmE7CisJCQlwdF9hdHRycy0+bDFfdGJsX2FsbG9jX3N6ID0gcHRfYXR0cnMtPmwxX3NpemUgKiAyOworCQkJLyogQWxpZ24gdGhlIFBBIHRvIHRoZSBuZXh0ICdhbGlnbicgIGJvdW5kYXJ5ICovCisJCQlwdF9hdHRycy0+bDFfYmFzZV9wYSA9CisJCQkgICAgKChwZ190YmxfcGEpICsKKwkJCSAgICAgKGFsaWduX3NpemUgLSAxKSkgJiAofihhbGlnbl9zaXplIC0gMSkpOworCQkJcHRfYXR0cnMtPmwxX2Jhc2VfdmEgPQorCQkJICAgIHBnX3RibF92YSArIChwdF9hdHRycy0+bDFfYmFzZV9wYSAtIHBnX3RibF9wYSk7CisJCX0gZWxzZSB7CisJCQkvKiBXZSBnb3QgYWxpZ25lZCBQQSwgY29vbCAqLworCQkJcHRfYXR0cnMtPmwxX3RibF9hbGxvY19wYSA9IHBnX3RibF9wYTsKKwkJCXB0X2F0dHJzLT5sMV90YmxfYWxsb2NfdmEgPSBwZ190YmxfdmE7CisJCQlwdF9hdHRycy0+bDFfdGJsX2FsbG9jX3N6ID0gcHRfYXR0cnMtPmwxX3NpemU7CisJCQlwdF9hdHRycy0+bDFfYmFzZV9wYSA9IHBnX3RibF9wYTsKKwkJCXB0X2F0dHJzLT5sMV9iYXNlX3ZhID0gcGdfdGJsX3ZhOworCQl9CisJCWlmIChwdF9hdHRycy0+bDFfYmFzZV92YSkKKwkJCW1lbXNldCgodTggKikgcHRfYXR0cnMtPmwxX2Jhc2VfdmEsIDB4MDAsCisJCQkgICAgICAgcHRfYXR0cnMtPmwxX3NpemUpOworCisJCS8qIG51bWJlciBvZiBMMiBwYWdlIHRhYmxlcyA9IERNTSBwb29sIHVzZWQgKyBTSE1NRU0gK0VYVE1FTSArCisJCSAqIEw0IHBhZ2VzICovCisJCXB0X2F0dHJzLT5sMl9udW1fcGFnZXMgPSAoKERNTVBPT0xTSVpFID4+IDIwKSArIDYpOworCQlwdF9hdHRycy0+bDJfc2l6ZSA9IEhXX01NVV9DT0FSU0VfUEFHRV9TSVpFICoKKwkJICAgIHB0X2F0dHJzLT5sMl9udW1fcGFnZXM7CisJCWFsaWduX3NpemUgPSA0OwkvKiBNYWtlIGl0IHUzMiBhbGlnbmVkICovCisJCS8qIHdlIGxpa2UgdG8gZ2V0IGFsaWduZWQgb24gTDEgdGFibGUgc2l6ZSAqLworCQlwZ190YmxfdmEgPSAodTMyKSBtZW1fYWxsb2NfcGh5c19tZW0ocHRfYXR0cnMtPmwyX3NpemUsCisJCQkJCQkgICAgIGFsaWduX3NpemUsICZwZ190YmxfcGEpOworCQlwdF9hdHRycy0+bDJfdGJsX2FsbG9jX3BhID0gcGdfdGJsX3BhOworCQlwdF9hdHRycy0+bDJfdGJsX2FsbG9jX3ZhID0gcGdfdGJsX3ZhOworCQlwdF9hdHRycy0+bDJfdGJsX2FsbG9jX3N6ID0gcHRfYXR0cnMtPmwyX3NpemU7CisJCXB0X2F0dHJzLT5sMl9iYXNlX3BhID0gcGdfdGJsX3BhOworCQlwdF9hdHRycy0+bDJfYmFzZV92YSA9IHBnX3RibF92YTsKKworCQlpZiAocHRfYXR0cnMtPmwyX2Jhc2VfdmEpCisJCQltZW1zZXQoKHU4ICopIHB0X2F0dHJzLT5sMl9iYXNlX3ZhLCAweDAwLAorCQkJICAgICAgIHB0X2F0dHJzLT5sMl9zaXplKTsKKworCQlwdF9hdHRycy0+cGdfaW5mbyA9IGt6YWxsb2MocHRfYXR0cnMtPmwyX251bV9wYWdlcyAqCisJCQkJCXNpemVvZihzdHJ1Y3QgcGFnZV9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJCWRldl9kYmcoYnJpZGdlLAorCQkJIkwxIHBhICV4LCB2YSAleCwgc2l6ZSAleFxuIEwyIHBhICV4LCB2YSAiCisJCQkiJXgsIHNpemUgJXhcbiIsIHB0X2F0dHJzLT5sMV9iYXNlX3BhLAorCQkJcHRfYXR0cnMtPmwxX2Jhc2VfdmEsIHB0X2F0dHJzLT5sMV9zaXplLAorCQkJcHRfYXR0cnMtPmwyX2Jhc2VfcGEsIHB0X2F0dHJzLT5sMl9iYXNlX3ZhLAorCQkJcHRfYXR0cnMtPmwyX3NpemUpOworCQlkZXZfZGJnKGJyaWRnZSwgInB0X2F0dHJzICVwIEwyIE51bVBhZ2VzICV4IHBnX2luZm8gJXBcbiIsCisJCQlwdF9hdHRycywgcHRfYXR0cnMtPmwyX251bV9wYWdlcywgcHRfYXR0cnMtPnBnX2luZm8pOworCX0KKwlpZiAoKHB0X2F0dHJzICE9IE5VTEwpICYmIChwdF9hdHRycy0+bDFfYmFzZV92YSAhPSAwKSAmJgorCSAgICAocHRfYXR0cnMtPmwyX2Jhc2VfdmEgIT0gMCkgJiYgKHB0X2F0dHJzLT5wZ19pbmZvICE9IE5VTEwpKQorCQlkZXZfY29udGV4dC0+cHRfYXR0cnMgPSBwdF9hdHRyczsKKwllbHNlCisJCXN0YXR1cyA9IC1FTk9NRU07CisKKwlpZiAoIXN0YXR1cykgeworCQlzcGluX2xvY2tfaW5pdCgmcHRfYXR0cnMtPnBnX2xvY2spOworCQlkZXZfY29udGV4dC0+dGNfd29yZF9zd2FwX29uID0gZHJ2X2RhdGFwLT50Y193b3Jkc3dhcG9uOworCisJCS8qIFNldCB0aGUgQ2xvY2sgRGl2aXNvciBmb3IgdGhlIERTUCBtb2R1bGUgKi8KKwkJdWRlbGF5KDUpOworCQkvKiBNTVUgYWRkcmVzcyBpcyBvYnRhaW5lZCBmcm9tIHRoZSBob3N0CisJCSAqIHJlc291cmNlcyBzdHJ1Y3QgKi8KKwkJZGV2X2NvbnRleHQtPmR3X2RzcF9tbXVfYmFzZSA9IHJlc291cmNlcy0+ZHdfZG1tdV9iYXNlOworCX0KKwlpZiAoIXN0YXR1cykgeworCQlkZXZfY29udGV4dC0+aGRldl9vYmogPSBoZGV2X29iajsKKwkJLyogU3RvcmUgY3VycmVudCBib2FyZCBzdGF0ZS4gKi8KKwkJZGV2X2NvbnRleHQtPmR3X2JyZF9zdGF0ZSA9IEJSRF9VTktOT1dOOworCQlkZXZfY29udGV4dC0+cmVzb3VyY2VzID0gcmVzb3VyY2VzOworCQlkc3BfY2xrX2VuYWJsZShEU1BfQ0xLX0lWQTIpOworCQlicmlkZ2VfYnJkX3N0b3AoZGV2X2NvbnRleHQpOworCQkvKiBSZXR1cm4gcHRyIHRvIG91ciBkZXZpY2Ugc3RhdGUgdG8gdGhlIERTUCBBUEkgZm9yIHN0b3JhZ2UgKi8KKwkJKmRldl9jbnR4dCA9IGRldl9jb250ZXh0OworCX0gZWxzZSB7CisJCWlmIChwdF9hdHRycyAhPSBOVUxMKSB7CisJCQlrZnJlZShwdF9hdHRycy0+cGdfaW5mbyk7CisKKwkJCWlmIChwdF9hdHRycy0+bDJfdGJsX2FsbG9jX3ZhKSB7CisJCQkJbWVtX2ZyZWVfcGh5c19tZW0oKHZvaWQgKikKKwkJCQkJCSAgcHRfYXR0cnMtPmwyX3RibF9hbGxvY192YSwKKwkJCQkJCSAgcHRfYXR0cnMtPmwyX3RibF9hbGxvY19wYSwKKwkJCQkJCSAgcHRfYXR0cnMtPmwyX3RibF9hbGxvY19zeik7CisJCQl9CisJCQlpZiAocHRfYXR0cnMtPmwxX3RibF9hbGxvY192YSkgeworCQkJCW1lbV9mcmVlX3BoeXNfbWVtKCh2b2lkICopCisJCQkJCQkgIHB0X2F0dHJzLT5sMV90YmxfYWxsb2NfdmEsCisJCQkJCQkgIHB0X2F0dHJzLT5sMV90YmxfYWxsb2NfcGEsCisJCQkJCQkgIHB0X2F0dHJzLT5sMV90YmxfYWxsb2Nfc3opOworCQkJfQorCQl9CisJCWtmcmVlKHB0X2F0dHJzKTsKKwkJa2ZyZWUoZGV2X2NvbnRleHQpOworCX0KK2Z1bmNfZW5kOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2Rldl9jdHJsID09PT09PT09CisgKiAgICAgIFJlY2VpdmVzIGRldmljZSBzcGVjaWZpYyBjb21tYW5kcy4KKyAqLworc3RhdGljIGludCBicmlkZ2VfZGV2X2N0cmwoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQsCisJCQkJICB1MzIgZHdfY21kLCB2b2lkICpwYXJncykKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgYnJpZGdlX2lvY3RsX2V4dHByb2MgKnBhX2V4dF9wcm9jID0KKwkJCQkJKHN0cnVjdCBicmlkZ2VfaW9jdGxfZXh0cHJvYyAqKXBhcmdzOworCXMzMiBuZHg7CisKKwlzd2l0Y2ggKGR3X2NtZCkgeworCWNhc2UgQlJESU9DVExfQ0hOTFJFQUQ6CisJCWJyZWFrOworCWNhc2UgQlJESU9DVExfQ0hOTFdSSVRFOgorCQlicmVhazsKKwljYXNlIEJSRElPQ1RMX1NFVE1NVUNPTkZJRzoKKwkJLyogc3RvcmUgYXdheSBkc3AtbW11IHNldHVwIHZhbHVlcyBmb3IgbGF0ZXIgdXNlICovCisJCWZvciAobmR4ID0gMDsgbmR4IDwgQlJESU9DVExfTlVNT0ZNTVVUTEI7IG5keCsrLCBwYV9leHRfcHJvYysrKQorCQkJZGV2X2NvbnRleHQtPmF0bGJfZW50cnlbbmR4XSA9ICpwYV9leHRfcHJvYzsKKwkJYnJlYWs7CisJY2FzZSBCUkRJT0NUTF9ERUVQU0xFRVA6CisJY2FzZSBCUkRJT0NUTF9FTUVSR0VOQ1lTTEVFUDoKKwkJLyogQ3VycmVudGx5IG9ubHkgRFNQIElkbGUgaXMgc3VwcG9ydGVkIE5lZWQgdG8gdXBkYXRlIGZvcgorCQkgKiBsYXRlciByZWxlYXNlcyAqLworCQlzdGF0dXMgPSBzbGVlcF9kc3AoZGV2X2NvbnRleHQsIFBXUl9ERUVQU0xFRVAsIHBhcmdzKTsKKwkJYnJlYWs7CisJY2FzZSBCUkRJT0NUTF9XQUtFVVA6CisJCXN0YXR1cyA9IHdha2VfZHNwKGRldl9jb250ZXh0LCBwYXJncyk7CisJCWJyZWFrOworCWNhc2UgQlJESU9DVExfQ0xLX0NUUkw6CisJCXN0YXR1cyA9IDA7CisJCS8qIExvb2tpbmcgRm9yIEJhc2Vwb3J0IEZpeCBmb3IgQ2xvY2tzICovCisJCXN0YXR1cyA9IGRzcF9wZXJpcGhlcmFsX2Nsa19jdHJsKGRldl9jb250ZXh0LCBwYXJncyk7CisJCWJyZWFrOworCWNhc2UgQlJESU9DVExfUFdSX0hJQkVSTkFURToKKwkJc3RhdHVzID0gaGFuZGxlX2hpYmVybmF0aW9uX2Zyb21fZHNwKGRldl9jb250ZXh0KTsKKwkJYnJlYWs7CisJY2FzZSBCUkRJT0NUTF9QUkVTQ0FMRV9OT1RJRlk6CisJCXN0YXR1cyA9IHByZV9zY2FsZV9kc3AoZGV2X2NvbnRleHQsIHBhcmdzKTsKKwkJYnJlYWs7CisJY2FzZSBCUkRJT0NUTF9QT1NUU0NBTEVfTk9USUZZOgorCQlzdGF0dXMgPSBwb3N0X3NjYWxlX2RzcChkZXZfY29udGV4dCwgcGFyZ3MpOworCQlicmVhazsKKwljYXNlIEJSRElPQ1RMX0NPTlNUUkFJTlRfUkVRVUVTVDoKKwkJc3RhdHVzID0gaGFuZGxlX2NvbnN0cmFpbnRzX3NldChkZXZfY29udGV4dCwgcGFyZ3MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzdGF0dXMgPSAtRVBFUk07CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGJyaWRnZV9kZXZfZGVzdHJveSA9PT09PT09PQorICogICAgICBEZXN0cm95cyB0aGUgZHJpdmVyIG9iamVjdC4KKyAqLworc3RhdGljIGludCBicmlkZ2VfZGV2X2Rlc3Ryb3koc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQpCit7CisJc3RydWN0IHBnX3RhYmxlX2F0dHJzICpwdF9hdHRyczsKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCA9IChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICopCisJICAgIGRldl9jdHh0OworCXN0cnVjdCBjZmdfaG9zdHJlcyAqaG9zdF9yZXM7CisJdTMyIHNobV9zaXplOworCXN0cnVjdCBkcnZfZGF0YSAqZHJ2X2RhdGFwID0gZGV2X2dldF9kcnZkYXRhKGJyaWRnZSk7CisKKwkvKiBJdCBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisJaWYgKCFkZXZfY3R4dCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiBmaXJzdCBwdXQgdGhlIGRldmljZSB0byBzdG9wIHN0YXRlICovCisJYnJpZGdlX2JyZF9zdG9wKGRldl9jb250ZXh0KTsKKwlpZiAoZGV2X2NvbnRleHQtPnB0X2F0dHJzKSB7CisJCXB0X2F0dHJzID0gZGV2X2NvbnRleHQtPnB0X2F0dHJzOworCQlrZnJlZShwdF9hdHRycy0+cGdfaW5mbyk7CisKKwkJaWYgKHB0X2F0dHJzLT5sMl90YmxfYWxsb2NfdmEpIHsKKwkJCW1lbV9mcmVlX3BoeXNfbWVtKCh2b2lkICopcHRfYXR0cnMtPmwyX3RibF9hbGxvY192YSwKKwkJCQkJICBwdF9hdHRycy0+bDJfdGJsX2FsbG9jX3BhLAorCQkJCQkgIHB0X2F0dHJzLT5sMl90YmxfYWxsb2Nfc3opOworCQl9CisJCWlmIChwdF9hdHRycy0+bDFfdGJsX2FsbG9jX3ZhKSB7CisJCQltZW1fZnJlZV9waHlzX21lbSgodm9pZCAqKXB0X2F0dHJzLT5sMV90YmxfYWxsb2NfdmEsCisJCQkJCSAgcHRfYXR0cnMtPmwxX3RibF9hbGxvY19wYSwKKwkJCQkJICBwdF9hdHRycy0+bDFfdGJsX2FsbG9jX3N6KTsKKwkJfQorCQlrZnJlZShwdF9hdHRycyk7CisKKwl9CisKKwlpZiAoZGV2X2NvbnRleHQtPnJlc291cmNlcykgeworCQlob3N0X3JlcyA9IGRldl9jb250ZXh0LT5yZXNvdXJjZXM7CisJCXNobV9zaXplID0gZHJ2X2RhdGFwLT5zaG1fc2l6ZTsKKwkJaWYgKHNobV9zaXplID49IDB4MTAwMDApIHsKKwkJCWlmICgoaG9zdF9yZXMtPmR3X21lbV9iYXNlWzFdKSAmJgorCQkJICAgIChob3N0X3Jlcy0+ZHdfbWVtX3BoeXNbMV0pKSB7CisJCQkJbWVtX2ZyZWVfcGh5c19tZW0oKHZvaWQgKikKKwkJCQkJCSAgaG9zdF9yZXMtPmR3X21lbV9iYXNlCisJCQkJCQkgIFsxXSwKKwkJCQkJCSAgaG9zdF9yZXMtPmR3X21lbV9waHlzCisJCQkJCQkgIFsxXSwgc2htX3NpemUpOworCQkJfQorCQl9IGVsc2UgeworCQkJZGV2X2RiZyhicmlkZ2UsICIlczogRXJyb3IgZ2V0dGluZyBzaG0gc2l6ZSAiCisJCQkJImZyb20gcmVnaXN0cnk6ICV4LiBOb3QgY2FsbGluZyAiCisJCQkJIm1lbV9mcmVlX3BoeXNfbWVtXG4iLCBfX2Z1bmNfXywKKwkJCQlzdGF0dXMpOworCQl9CisJCWhvc3RfcmVzLT5kd19tZW1fYmFzZVsxXSA9IDA7CisJCWhvc3RfcmVzLT5kd19tZW1fcGh5c1sxXSA9IDA7CisKKwkJaWYgKGhvc3RfcmVzLT5kd19tZW1fYmFzZVswXSkKKwkJCWlvdW5tYXAoKHZvaWQgKilob3N0X3Jlcy0+ZHdfbWVtX2Jhc2VbMF0pOworCQlpZiAoaG9zdF9yZXMtPmR3X21lbV9iYXNlWzJdKQorCQkJaW91bm1hcCgodm9pZCAqKWhvc3RfcmVzLT5kd19tZW1fYmFzZVsyXSk7CisJCWlmIChob3N0X3Jlcy0+ZHdfbWVtX2Jhc2VbM10pCisJCQlpb3VubWFwKCh2b2lkICopaG9zdF9yZXMtPmR3X21lbV9iYXNlWzNdKTsKKwkJaWYgKGhvc3RfcmVzLT5kd19tZW1fYmFzZVs0XSkKKwkJCWlvdW5tYXAoKHZvaWQgKilob3N0X3Jlcy0+ZHdfbWVtX2Jhc2VbNF0pOworCQlpZiAoaG9zdF9yZXMtPmR3X2RtbXVfYmFzZSkKKwkJCWlvdW5tYXAoaG9zdF9yZXMtPmR3X2RtbXVfYmFzZSk7CisJCWlmIChob3N0X3Jlcy0+ZHdfcGVyX2Jhc2UpCisJCQlpb3VubWFwKGhvc3RfcmVzLT5kd19wZXJfYmFzZSk7CisJCWlmIChob3N0X3Jlcy0+ZHdfcGVyX3BtX2Jhc2UpCisJCQlpb3VubWFwKCh2b2lkICopaG9zdF9yZXMtPmR3X3Blcl9wbV9iYXNlKTsKKwkJaWYgKGhvc3RfcmVzLT5kd19jb3JlX3BtX2Jhc2UpCisJCQlpb3VubWFwKCh2b2lkICopaG9zdF9yZXMtPmR3X2NvcmVfcG1fYmFzZSk7CisJCWlmIChob3N0X3Jlcy0+ZHdfc3lzX2N0cmxfYmFzZSkKKwkJCWlvdW5tYXAoaG9zdF9yZXMtPmR3X3N5c19jdHJsX2Jhc2UpOworCisJCWhvc3RfcmVzLT5kd19tZW1fYmFzZVswXSA9ICh1MzIpIE5VTEw7CisJCWhvc3RfcmVzLT5kd19tZW1fYmFzZVsyXSA9ICh1MzIpIE5VTEw7CisJCWhvc3RfcmVzLT5kd19tZW1fYmFzZVszXSA9ICh1MzIpIE5VTEw7CisJCWhvc3RfcmVzLT5kd19tZW1fYmFzZVs0XSA9ICh1MzIpIE5VTEw7CisJCWhvc3RfcmVzLT5kd19kbW11X2Jhc2UgPSBOVUxMOworCQlob3N0X3Jlcy0+ZHdfc3lzX2N0cmxfYmFzZSA9IE5VTEw7CisKKwkJa2ZyZWUoaG9zdF9yZXMpOworCX0KKworCS8qIEZyZWUgdGhlIGRyaXZlcidzIGRldmljZSBjb250ZXh0OiAqLworCWtmcmVlKGRydl9kYXRhcC0+YmFzZV9pbWcpOworCWtmcmVlKGRydl9kYXRhcCk7CisJZGV2X3NldF9kcnZkYXRhKGJyaWRnZSwgTlVMTCk7CisJa2ZyZWUoKHZvaWQgKilkZXZfY3R4dCk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBicmlkZ2VfYnJkX21lbV9jb3B5KHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAorCQkJCSAgIHUzMiBkc3BfZGVzdF9hZGRyLCB1MzIgZHNwX3NyY19hZGRyLAorCQkJCSAgIHUzMiB1bF9udW1fYnl0ZXMsIHUzMiBtZW1fdHlwZSkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwl1MzIgc3JjX2FkZHIgPSBkc3Bfc3JjX2FkZHI7CisJdTMyIGRlc3RfYWRkciA9IGRzcF9kZXN0X2FkZHI7CisJdTMyIGNvcHlfYnl0ZXMgPSAwOworCXUzMiB0b3RhbF9ieXRlcyA9IHVsX251bV9ieXRlczsKKwl1OCBob3N0X2J1ZltCVUZGRVJTSVpFXTsKKwlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCA9IGRldl9jdHh0OworCXdoaWxlICh0b3RhbF9ieXRlcyA+IDAgJiYgIXN0YXR1cykgeworCQljb3B5X2J5dGVzID0KKwkJICAgIHRvdGFsX2J5dGVzID4gQlVGRkVSU0laRSA/IEJVRkZFUlNJWkUgOiB0b3RhbF9ieXRlczsKKwkJLyogUmVhZCBmcm9tIEV4dGVybmFsIG1lbW9yeSAqLworCQlzdGF0dXMgPSByZWFkX2V4dF9kc3BfZGF0YShkZXZfY3R4dCwgaG9zdF9idWYsIHNyY19hZGRyLAorCQkJCQkgICBjb3B5X2J5dGVzLCBtZW1fdHlwZSk7CisJCWlmICghc3RhdHVzKSB7CisJCQlpZiAoZGVzdF9hZGRyIDwgKGRldl9jb250ZXh0LT5kd19kc3Bfc3RhcnRfYWRkICsKKwkJCQkJIGRldl9jb250ZXh0LT5kd19pbnRlcm5hbF9zaXplKSkgeworCQkJCS8qIFdyaXRlIHRvIEludGVybmFsIG1lbW9yeSAqLworCQkJCXN0YXR1cyA9IHdyaXRlX2RzcF9kYXRhKGRldl9jdHh0LCBob3N0X2J1ZiwKKwkJCQkJCQlkZXN0X2FkZHIsIGNvcHlfYnl0ZXMsCisJCQkJCQkJbWVtX3R5cGUpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBXcml0ZSB0byBFeHRlcm5hbCBtZW1vcnkgKi8KKwkJCQlzdGF0dXMgPQorCQkJCSAgICB3cml0ZV9leHRfZHNwX2RhdGEoZGV2X2N0eHQsIGhvc3RfYnVmLAorCQkJCQkJICAgICAgIGRlc3RfYWRkciwgY29weV9ieXRlcywKKwkJCQkJCSAgICAgICBtZW1fdHlwZSwgZmFsc2UpOworCQkJfQorCQl9CisJCXRvdGFsX2J5dGVzIC09IGNvcHlfYnl0ZXM7CisJCXNyY19hZGRyICs9IGNvcHlfYnl0ZXM7CisJCWRlc3RfYWRkciArPSBjb3B5X2J5dGVzOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBNZW0gV3JpdGUgZG9lcyBub3QgaGFsdCB0aGUgRFNQIHRvIHdyaXRlIHVubGlrZSBicmlkZ2VfYnJkX3dyaXRlICovCitzdGF0aWMgaW50IGJyaWRnZV9icmRfbWVtX3dyaXRlKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAorCQkJCSAgICB1OCAqaG9zdF9idWZmLCB1MzIgZHNwX2FkZHIsCisJCQkJICAgIHUzMiB1bF9udW1fYnl0ZXMsIHUzMiBtZW1fdHlwZSkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCA9IGRldl9jdHh0OworCXUzMiB1bF9yZW1haW5fYnl0ZXMgPSAwOworCXUzMiB1bF9ieXRlcyA9IDA7CisJdWxfcmVtYWluX2J5dGVzID0gdWxfbnVtX2J5dGVzOworCXdoaWxlICh1bF9yZW1haW5fYnl0ZXMgPiAwICYmICFzdGF0dXMpIHsKKwkJdWxfYnl0ZXMgPQorCQkgICAgdWxfcmVtYWluX2J5dGVzID4gQlVGRkVSU0laRSA/IEJVRkZFUlNJWkUgOiB1bF9yZW1haW5fYnl0ZXM7CisJCWlmIChkc3BfYWRkciA8IChkZXZfY29udGV4dC0+ZHdfZHNwX3N0YXJ0X2FkZCArCisJCQkJIGRldl9jb250ZXh0LT5kd19pbnRlcm5hbF9zaXplKSkgeworCQkJc3RhdHVzID0KKwkJCSAgICB3cml0ZV9kc3BfZGF0YShkZXZfY3R4dCwgaG9zdF9idWZmLCBkc3BfYWRkciwKKwkJCQkJICAgdWxfYnl0ZXMsIG1lbV90eXBlKTsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IHdyaXRlX2V4dF9kc3BfZGF0YShkZXZfY3R4dCwgaG9zdF9idWZmLAorCQkJCQkJICAgIGRzcF9hZGRyLCB1bF9ieXRlcywKKwkJCQkJCSAgICBtZW1fdHlwZSwgdHJ1ZSk7CisJCX0KKwkJdWxfcmVtYWluX2J5dGVzIC09IHVsX2J5dGVzOworCQlkc3BfYWRkciArPSB1bF9ieXRlczsKKwkJaG9zdF9idWZmID0gaG9zdF9idWZmICsgdWxfYnl0ZXM7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2JyZF9tZW1fbWFwID09PT09PT09CisgKiAgICAgIFRoaXMgZnVuY3Rpb24gbWFwcyBNUFUgYnVmZmVyIHRvIHRoZSBEU1AgYWRkcmVzcyBzcGFjZS4gSXQgcGVyZm9ybXMKKyAqICBsaW5lYXIgdG8gcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbiBpZiByZXF1aXJlZC4gSXQgdHJhbnNsYXRlcyBlYWNoCisgKiAgcGFnZSBzaW5jZSBsaW5lYXIgYWRkcmVzc2VzIGNhbiBiZSBwaHlzaWNhbGx5IG5vbi1jb250aWd1b3VzCisgKiAgQWxsIGFkZHJlc3MgJiBzaXplIGFyZ3VtZW50cyBhcmUgYXNzdW1lZCB0byBiZSBwYWdlIGFsaWduZWQgKGluIHByb2MuYykKKyAqCisgKiAgVE9ETzogRGlzYWJsZSBNTVUgd2hpbGUgdXBkYXRpbmcgdGhlIHBhZ2UgdGFibGVzIChidXQgdGhhdCdsbCBzdGFsbCBEU1ApCisgKi8KK3N0YXRpYyBpbnQgYnJpZGdlX2JyZF9tZW1fbWFwKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAorCQkJCSAgdTMyIHVsX21wdV9hZGRyLCB1MzIgdmlydF9hZGRyLAorCQkJCSAgdTMyIHVsX251bV9ieXRlcywgdTMyIHVsX21hcF9hdHRyLAorCQkJCSAgc3RydWN0IHBhZ2UgKiptYXBwZWRfcGFnZXMpCit7CisJdTMyIGF0dHJzOworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0ID0gZGV2X2N0eHQ7CisJc3RydWN0IGh3X21tdV9tYXBfYXR0cnNfdCBod19hdHRyczsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCXUzMiB3cml0ZSA9IDA7CisJdTMyIG51bV91c3JfcGdzID0gMDsKKwlzdHJ1Y3QgcGFnZSAqbWFwcGVkX3BhZ2UsICpwZzsKKwlzMzIgcGdfbnVtOworCXUzMiB2YSA9IHZpcnRfYWRkcjsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnJfdGFzayA9IGN1cnJlbnQ7CisJdTMyIHBnX2kgPSAwOworCXUzMiBtcHVfYWRkciwgcGE7CisKKwlkZXZfZGJnKGJyaWRnZSwKKwkJIiVzIGhEZXZDdHh0ICVwLCBwYSAleCwgdmEgJXgsIHNpemUgJXgsIHVsX21hcF9hdHRyICV4XG4iLAorCQlfX2Z1bmNfXywgZGV2X2N0eHQsIHVsX21wdV9hZGRyLCB2aXJ0X2FkZHIsIHVsX251bV9ieXRlcywKKwkJdWxfbWFwX2F0dHIpOworCWlmICh1bF9udW1fYnl0ZXMgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodWxfbWFwX2F0dHIgJiBEU1BfTUFQX0RJUl9NQVNLKSB7CisJCWF0dHJzID0gdWxfbWFwX2F0dHI7CisJfSBlbHNlIHsKKwkJLyogQXNzaWduIGRlZmF1bHQgYXR0cmlidXRlcyAqLworCQlhdHRycyA9IHVsX21hcF9hdHRyIHwgKERTUF9NQVBWSVJUVUFMQUREUiB8IERTUF9NQVBFTEVNU0laRTE2KTsKKwl9CisJLyogVGFrZSBtYXBwaW5nIHByb3BlcnRpZXMgKi8KKwlpZiAoYXR0cnMgJiBEU1BfTUFQQklHRU5ESUFOKQorCQlod19hdHRycy5lbmRpYW5pc20gPSBIV19CSUdfRU5ESUFOOworCWVsc2UKKwkJaHdfYXR0cnMuZW5kaWFuaXNtID0gSFdfTElUVExFX0VORElBTjsKKworCWh3X2F0dHJzLm1peGVkX3NpemUgPSAoZW51bSBod19tbXVfbWl4ZWRfc2l6ZV90KQorCSAgICAoKGF0dHJzICYgRFNQX01BUE1JWEVERUxFTVNJWkUpID4+IDIpOworCS8qIElnbm9yZSBlbGVtZW50X3NpemUgaWYgbWl4ZWRfc2l6ZSBpcyBlbmFibGVkICovCisJaWYgKGh3X2F0dHJzLm1peGVkX3NpemUgPT0gMCkgeworCQlpZiAoYXR0cnMgJiBEU1BfTUFQRUxFTVNJWkU4KSB7CisJCQkvKiBTaXplIGlzIDggYml0ICovCisJCQlod19hdHRycy5lbGVtZW50X3NpemUgPSBIV19FTEVNX1NJWkU4QklUOworCQl9IGVsc2UgaWYgKGF0dHJzICYgRFNQX01BUEVMRU1TSVpFMTYpIHsKKwkJCS8qIFNpemUgaXMgMTYgYml0ICovCisJCQlod19hdHRycy5lbGVtZW50X3NpemUgPSBIV19FTEVNX1NJWkUxNkJJVDsKKwkJfSBlbHNlIGlmIChhdHRycyAmIERTUF9NQVBFTEVNU0laRTMyKSB7CisJCQkvKiBTaXplIGlzIDMyIGJpdCAqLworCQkJaHdfYXR0cnMuZWxlbWVudF9zaXplID0gSFdfRUxFTV9TSVpFMzJCSVQ7CisJCX0gZWxzZSBpZiAoYXR0cnMgJiBEU1BfTUFQRUxFTVNJWkU2NCkgeworCQkJLyogU2l6ZSBpcyA2NCBiaXQgKi8KKwkJCWh3X2F0dHJzLmVsZW1lbnRfc2l6ZSA9IEhXX0VMRU1fU0laRTY0QklUOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIE1peGVkc2l6ZSBpc24ndCBlbmFibGVkLCBzbyBzaXplIGNhbid0IGJlCisJCQkgKiB6ZXJvIGhlcmUKKwkJCSAqLworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJaWYgKGF0dHJzICYgRFNQX01BUERPTk9UTE9DSykKKwkJaHdfYXR0cnMuZG9ub3Rsb2NrbXB1cGFnZSA9IDE7CisJZWxzZQorCQlod19hdHRycy5kb25vdGxvY2ttcHVwYWdlID0gMDsKKworCWlmIChhdHRycyAmIERTUF9NQVBWTUFMTE9DQUREUikgeworCQlyZXR1cm4gbWVtX21hcF92bWFsbG9jKGRldl9jdHh0LCB1bF9tcHVfYWRkciwgdmlydF9hZGRyLAorCQkJCSAgICAgICB1bF9udW1fYnl0ZXMsICZod19hdHRycyk7CisJfQorCS8qCisJICogRG8gT1Mtc3BlY2lmaWMgdXNlci12YSB0byBwYSB0cmFuc2xhdGlvbi4KKwkgKiBDb21iaW5lIHBoeXNpY2FsbHkgY29udGlndW91cyByZWdpb25zIHRvIHJlZHVjZSBUTEJzLgorCSAqIFBhc3MgdGhlIHRyYW5zbGF0ZWQgcGEgdG8gcHRlX3VwZGF0ZS4KKwkgKi8KKwlpZiAoKGF0dHJzICYgRFNQX01BUFBIWVNJQ0FMQUREUikpIHsKKwkJc3RhdHVzID0gcHRlX3VwZGF0ZShkZXZfY29udGV4dCwgdWxfbXB1X2FkZHIsIHZpcnRfYWRkciwKKwkJCQkgICAgdWxfbnVtX2J5dGVzLCAmaHdfYXR0cnMpOworCQlnb3RvIGZ1bmNfY29udDsKKwl9CisKKwkvKgorCSAqIEltcG9ydGFudCBOb3RlOiB1bF9tcHVfYWRkciBpcyBtYXBwZWQgZnJvbSB1c2VyIGFwcGxpY2F0aW9uIHByb2Nlc3MKKwkgKiB0byBjdXJyZW50IHByb2Nlc3MgLSBpdCBtdXN0IGxpZSBjb21wbGV0ZWx5IHdpdGhpbiB0aGUgY3VycmVudAorCSAqIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3Mgc3BhY2UgaW4gb3JkZXIgdG8gYmUgb2YgdXNlIHRvIHVzIGhlcmUhCisJICovCisJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCXZtYSA9IGZpbmRfdm1hKG1tLCB1bF9tcHVfYWRkcik7CisJaWYgKHZtYSkKKwkJZGV2X2RiZyhicmlkZ2UsCisJCQkiVk1BZm9yIFVzZXJCdWY6IHVsX21wdV9hZGRyPSV4LCB1bF9udW1fYnl0ZXM9JXgsICIKKwkJCSJ2bV9zdGFydD0lbHgsIHZtX2VuZD0lbHgsIHZtX2ZsYWdzPSVseFxuIiwgdWxfbXB1X2FkZHIsCisJCQl1bF9udW1fYnl0ZXMsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kLAorCQkJdm1hLT52bV9mbGFncyk7CisKKwkvKgorCSAqIEl0IGlzIG9ic2VydmVkIHRoYXQgdW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzLCB0aGUgdXNlciBidWZmZXIgaXMKKwkgKiBzcHJlYWQgYWNyb3NzIHNldmVyYWwgVk1Bcy4gU28gbG9vcCB0aHJvdWdoIGFuZCBjaGVjayBpZiB0aGUgZW50aXJlCisJICogdXNlciBidWZmZXIgaXMgY292ZXJlZAorCSAqLworCXdoaWxlICgodm1hKSAmJiAodWxfbXB1X2FkZHIgKyB1bF9udW1fYnl0ZXMgPiB2bWEtPnZtX2VuZCkpIHsKKwkJLyoganVtcCB0byB0aGUgbmV4dCBWTUEgcmVnaW9uICovCisJCXZtYSA9IGZpbmRfdm1hKG1tLCB2bWEtPnZtX2VuZCArIDEpOworCQlkZXZfZGJnKGJyaWRnZSwKKwkJCSJWTUEgZm9yIFVzZXJCdWYgdWxfbXB1X2FkZHI9JXggdWxfbnVtX2J5dGVzPSV4LCAiCisJCQkidm1fc3RhcnQ9JWx4LCB2bV9lbmQ9JWx4LCB2bV9mbGFncz0lbHhcbiIsIHVsX21wdV9hZGRyLAorCQkJdWxfbnVtX2J5dGVzLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwKKwkJCXZtYS0+dm1fZmxhZ3MpOworCX0KKwlpZiAoIXZtYSkgeworCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gZ2V0IFZNQSByZWdpb24gZm9yIDB4JXggKCVkKVxuIiwKKwkJICAgICAgIF9fZnVuY19fLCB1bF9tcHVfYWRkciwgdWxfbnVtX2J5dGVzKTsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkJZ290byBmdW5jX2NvbnQ7CisJfQorCisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9JTykgeworCQludW1fdXNyX3BncyA9IHVsX251bV9ieXRlcyAvIFBHX1NJWkU0SzsKKwkJbXB1X2FkZHIgPSB1bF9tcHVfYWRkcjsKKworCQkvKiBHZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3NlcyBmb3IgdXNlciBidWZmZXIgKi8KKwkJZm9yIChwZ19pID0gMDsgcGdfaSA8IG51bV91c3JfcGdzOyBwZ19pKyspIHsKKwkJCXBhID0gdXNlcl92YTJfcGEobW0sIG1wdV9hZGRyKTsKKwkJCWlmICghcGEpIHsKKwkJCQlzdGF0dXMgPSAtRVBFUk07CisJCQkJcHJfZXJyKCJEU1BCUklER0U6IFZNX0lPIG1hcHBpbmcgcGh5c2ljYWwiCisJCQkJICAgICAgICJhZGRyZXNzIGlzIGludmFsaWRcbiIpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHBmbl92YWxpZChfX3BoeXNfdG9fcGZuKHBhKSkpIHsKKwkJCQlwZyA9IFBIWVNfVE9fUEFHRShwYSk7CisJCQkJZ2V0X3BhZ2UocGcpOworCQkJCWlmIChwYWdlX2NvdW50KHBnKSA8IDEpIHsKKwkJCQkJcHJfZXJyKCJCYWQgcGFnZSBpbiBWTV9JTyBidWZmZXJcbiIpOworCQkJCQliYWRfcGFnZV9kdW1wKHBhLCBwZyk7CisJCQkJfQorCQkJfQorCQkJc3RhdHVzID0gcHRlX3NldChkZXZfY29udGV4dC0+cHRfYXR0cnMsIHBhLAorCQkJCQkgdmEsIEhXX1BBR0VfU0laRTRLQiwgJmh3X2F0dHJzKTsKKwkJCWlmIChzdGF0dXMpCisJCQkJYnJlYWs7CisKKwkJCXZhICs9IEhXX1BBR0VfU0laRTRLQjsKKwkJCW1wdV9hZGRyICs9IEhXX1BBR0VfU0laRTRLQjsKKwkJCXBhICs9IEhXX1BBR0VfU0laRTRLQjsKKwkJfQorCX0gZWxzZSB7CisJCW51bV91c3JfcGdzID0gdWxfbnVtX2J5dGVzIC8gUEdfU0laRTRLOworCQlpZiAodm1hLT52bV9mbGFncyAmIChWTV9XUklURSB8IFZNX01BWVdSSVRFKSkKKwkJCXdyaXRlID0gMTsKKworCQlmb3IgKHBnX2kgPSAwOyBwZ19pIDwgbnVtX3Vzcl9wZ3M7IHBnX2krKykgeworCQkJcGdfbnVtID0gZ2V0X3VzZXJfcGFnZXMoY3Vycl90YXNrLCBtbSwgdWxfbXB1X2FkZHIsIDEsCisJCQkJCQl3cml0ZSwgMSwgJm1hcHBlZF9wYWdlLCBOVUxMKTsKKwkJCWlmIChwZ19udW0gPiAwKSB7CisJCQkJaWYgKHBhZ2VfY291bnQobWFwcGVkX3BhZ2UpIDwgMSkgeworCQkJCQlwcl9lcnIoIkJhZCBwYWdlIGNvdW50IGFmdGVyIGRvaW5nIgorCQkJCQkgICAgICAgImdldF91c2VyX3BhZ2VzIG9uIgorCQkJCQkgICAgICAgInVzZXIgYnVmZmVyXG4iKTsKKwkJCQkJYmFkX3BhZ2VfZHVtcChwYWdlX3RvX3BoeXMobWFwcGVkX3BhZ2UpLAorCQkJCQkJICAgICAgbWFwcGVkX3BhZ2UpOworCQkJCX0KKwkJCQlzdGF0dXMgPSBwdGVfc2V0KGRldl9jb250ZXh0LT5wdF9hdHRycywKKwkJCQkJCSBwYWdlX3RvX3BoeXMobWFwcGVkX3BhZ2UpLCB2YSwKKwkJCQkJCSBIV19QQUdFX1NJWkU0S0IsICZod19hdHRycyk7CisJCQkJaWYgKHN0YXR1cykKKwkJCQkJYnJlYWs7CisKKwkJCQlpZiAobWFwcGVkX3BhZ2VzKQorCQkJCQltYXBwZWRfcGFnZXNbcGdfaV0gPSBtYXBwZWRfcGFnZTsKKworCQkJCXZhICs9IEhXX1BBR0VfU0laRTRLQjsKKwkJCQl1bF9tcHVfYWRkciArPSBIV19QQUdFX1NJWkU0S0I7CisJCQl9IGVsc2UgeworCQkJCXByX2VycigiRFNQQlJJREdFOiBnZXRfdXNlcl9wYWdlcyBGQUlMRUQsIgorCQkJCSAgICAgICAiTVBVIGFkZHIgPSAweCV4LCIKKwkJCQkgICAgICAgInZtYS0+dm1fZmxhZ3MgPSAweCVseCwiCisJCQkJICAgICAgICJnZXRfdXNlcl9wYWdlcyBFcnIiCisJCQkJICAgICAgICJWYWx1ZSA9ICVkLCBCdWZmZXIiCisJCQkJICAgICAgICJzaXplPTB4JXhcbiIsIHVsX21wdV9hZGRyLAorCQkJCSAgICAgICB2bWEtPnZtX2ZsYWdzLCBwZ19udW0sIHVsX251bV9ieXRlcyk7CisJCQkJc3RhdHVzID0gLUVQRVJNOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CitmdW5jX2NvbnQ6CisJaWYgKHN0YXR1cykgeworCQkvKgorCQkgKiBSb2xsIG91dCB0aGUgbWFwcGVkIHBhZ2VzIGluY2FzZSBpdCBmYWlsZWQgaW4gbWlkZGxlIG9mCisJCSAqIG1hcHBpbmcKKwkJICovCisJCWlmIChwZ19pKSB7CisJCQlicmlkZ2VfYnJkX21lbV91bl9tYXAoZGV2X2NvbnRleHQsIHZpcnRfYWRkciwKKwkJCQkJICAgKHBnX2kgKiBQR19TSVpFNEspKTsKKwkJfQorCQlzdGF0dXMgPSAtRVBFUk07CisJfQorCS8qCisJICogSW4gYW55IGNhc2UsIGZsdXNoIHRoZSBUTEIKKwkgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGhlcmUgaW5zdGVhZCBmcm9tIHB0ZV91cGRhdGUgdG8gYXZvaWQgdW5uZWNlc3NhcnkKKwkgKiByZXBldGl0aW9uIHdoaWxlIG1hcHBpbmcgbm9uLWNvbnRpZ3VvdXMgcGh5c2ljYWwgcmVnaW9ucyBvZiBhIHZpcnR1YWwKKwkgKiByZWdpb24KKwkgKi8KKwlmbHVzaF9hbGwoZGV2X2NvbnRleHQpOworCWRldl9kYmcoYnJpZGdlLCAiJXMgc3RhdHVzICV4XG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGJyaWRnZV9icmRfbWVtX3VuX21hcCA9PT09PT09PQorICogICAgICBJbnZhbGlkYXRlIHRoZSBQVEVzIGZvciB0aGUgRFNQIFZBIGJsb2NrIHRvIGJlIHVubWFwcGVkLgorICoKKyAqICAgICAgUFRFcyBvZiBhIG1hcHBlZCBtZW1vcnkgYmxvY2sgYXJlIGNvbnRpZ3VvdXMgaW4gYW55IHBhZ2UgdGFibGUKKyAqICAgICAgU28sIGluc3RlYWQgb2YgbG9va2luZyB1cCB0aGUgUFRFIGFkZHJlc3MgZm9yIGV2ZXJ5IDRLIGJsb2NrLAorICogICAgICB3ZSBjbGVhciBjb25zZWN1dGl2ZSBQVEVzIHVudGlsIHdlIHVubWFwIGFsbCB0aGUgYnl0ZXMKKyAqLworc3RhdGljIGludCBicmlkZ2VfYnJkX21lbV91bl9tYXAoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQsCisJCQkJICAgICB1MzIgdmlydF9hZGRyLCB1MzIgdWxfbnVtX2J5dGVzKQoreworCXUzMiBsMV9iYXNlX3ZhOworCXUzMiBsMl9iYXNlX3ZhOworCXUzMiBsMl9iYXNlX3BhOworCXUzMiBsMl9wYWdlX251bTsKKwl1MzIgcHRlX3ZhbDsKKwl1MzIgcHRlX3NpemU7CisJdTMyIHB0ZV9jb3VudDsKKwl1MzIgcHRlX2FkZHJfbDE7CisJdTMyIHB0ZV9hZGRyX2wyID0gMDsKKwl1MzIgcmVtX2J5dGVzOworCXUzMiByZW1fYnl0ZXNfbDI7CisJdTMyIHZhX2N1cnI7CisJc3RydWN0IHBhZ2UgKnBnID0gTlVMTDsKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCA9IGRldl9jdHh0OworCXN0cnVjdCBwZ190YWJsZV9hdHRycyAqcHQgPSBkZXZfY29udGV4dC0+cHRfYXR0cnM7CisJdTMyIHRlbXA7CisJdTMyIHBhZGRyOworCXUzMiBudW1vZjRrX3BhZ2VzID0gMDsKKworCXZhX2N1cnIgPSB2aXJ0X2FkZHI7CisJcmVtX2J5dGVzID0gdWxfbnVtX2J5dGVzOworCXJlbV9ieXRlc19sMiA9IDA7CisJbDFfYmFzZV92YSA9IHB0LT5sMV9iYXNlX3ZhOworCXB0ZV9hZGRyX2wxID0gaHdfbW11X3B0ZV9hZGRyX2wxKGwxX2Jhc2VfdmEsIHZhX2N1cnIpOworCWRldl9kYmcoYnJpZGdlLCAiJXMgZGV2X2N0eHQgJXAsIHZhICV4LCBOdW1CeXRlcyAleCBsMV9iYXNlX3ZhICV4LCAiCisJCSJwdGVfYWRkcl9sMSAleFxuIiwgX19mdW5jX18sIGRldl9jdHh0LCB2aXJ0X2FkZHIsCisJCXVsX251bV9ieXRlcywgbDFfYmFzZV92YSwgcHRlX2FkZHJfbDEpOworCisJd2hpbGUgKHJlbV9ieXRlcyAmJiAhc3RhdHVzKSB7CisJCXUzMiB2YV9jdXJyX29yaWcgPSB2YV9jdXJyOworCQkvKiBGaW5kIHdoZXRoZXIgdGhlIEwxIFBURSBwb2ludHMgdG8gYSB2YWxpZCBMMiBQVCAqLworCQlwdGVfYWRkcl9sMSA9IGh3X21tdV9wdGVfYWRkcl9sMShsMV9iYXNlX3ZhLCB2YV9jdXJyKTsKKwkJcHRlX3ZhbCA9ICoodTMyICopIHB0ZV9hZGRyX2wxOworCQlwdGVfc2l6ZSA9IGh3X21tdV9wdGVfc2l6ZV9sMShwdGVfdmFsKTsKKworCQlpZiAocHRlX3NpemUgIT0gSFdfTU1VX0NPQVJTRV9QQUdFX1NJWkUpCisJCQlnb3RvIHNraXBfY29hcnNlX3BhZ2U7CisKKwkJLyoKKwkJICogR2V0IHRoZSBMMiBQQSBmcm9tIHRoZSBMMSBQVEUsIGFuZCBmaW5kCisJCSAqIGNvcnJlc3BvbmRpbmcgTDIgVkEKKwkJICovCisJCWwyX2Jhc2VfcGEgPSBod19tbXVfcHRlX2NvYXJzZV9sMShwdGVfdmFsKTsKKwkJbDJfYmFzZV92YSA9IGwyX2Jhc2VfcGEgLSBwdC0+bDJfYmFzZV9wYSArIHB0LT5sMl9iYXNlX3ZhOworCQlsMl9wYWdlX251bSA9CisJCSAgICAobDJfYmFzZV9wYSAtIHB0LT5sMl9iYXNlX3BhKSAvIEhXX01NVV9DT0FSU0VfUEFHRV9TSVpFOworCQkvKgorCQkgKiBGaW5kIHRoZSBMMiBQVEUgYWRkcmVzcyBmcm9tIHdoaWNoIHdlIHdpbGwgc3RhcnQKKwkJICogY2xlYXJpbmcsIHRoZSBudW1iZXIgb2YgUFRFcyB0byBiZSBjbGVhcmVkIG9uIHRoaXMKKwkJICogcGFnZSwgYW5kIHRoZSBzaXplIG9mIFZBIHNwYWNlIHRoYXQgbmVlZHMgdG8gYmUKKwkJICogY2xlYXJlZCBvbiB0aGlzIEwyIHBhZ2UKKwkJICovCisJCXB0ZV9hZGRyX2wyID0gaHdfbW11X3B0ZV9hZGRyX2wyKGwyX2Jhc2VfdmEsIHZhX2N1cnIpOworCQlwdGVfY291bnQgPSBwdGVfYWRkcl9sMiAmIChIV19NTVVfQ09BUlNFX1BBR0VfU0laRSAtIDEpOworCQlwdGVfY291bnQgPSAoSFdfTU1VX0NPQVJTRV9QQUdFX1NJWkUgLSBwdGVfY291bnQpIC8gc2l6ZW9mKHUzMik7CisJCWlmIChyZW1fYnl0ZXMgPCAocHRlX2NvdW50ICogUEdfU0laRTRLKSkKKwkJCXB0ZV9jb3VudCA9IHJlbV9ieXRlcyAvIFBHX1NJWkU0SzsKKwkJcmVtX2J5dGVzX2wyID0gcHRlX2NvdW50ICogUEdfU0laRTRLOworCisJCS8qCisJCSAqIFVubWFwIHRoZSBWQSBzcGFjZSBvbiB0aGlzIEwyIFBULiBBIHF1aWNrZXIgd2F5CisJCSAqIHdvdWxkIGJlIHRvIGNsZWFyIHB0ZV9jb3VudCBlbnRyaWVzIHN0YXJ0aW5nIGZyb20KKwkJICogcHRlX2FkZHJfbDIuIEhvd2V2ZXIsIGJlbG93IGNvZGUgY2hlY2tzIHRoYXQgd2UgZG9uJ3QKKwkJICogY2xlYXIgaW52YWxpZCBlbnRyaWVzIG9yIGxlc3MgdGhhbiA2NEtCIGZvciBhIDY0S0IKKwkJICogZW50cnkuIFNpbWlsYXIgY2hlY2tpbmcgaXMgZG9uZSBmb3IgTDEgUFRFcyB0b28KKwkJICogYmVsb3cKKwkJICovCisJCXdoaWxlIChyZW1fYnl0ZXNfbDIgJiYgIXN0YXR1cykgeworCQkJcHRlX3ZhbCA9ICoodTMyICopIHB0ZV9hZGRyX2wyOworCQkJcHRlX3NpemUgPSBod19tbXVfcHRlX3NpemVfbDIocHRlX3ZhbCk7CisJCQkvKiB2YV9jdXJyIGFsaWduZWQgdG8gcHRlX3NpemU/ICovCisJCQlpZiAocHRlX3NpemUgPT0gMCB8fCByZW1fYnl0ZXNfbDIgPCBwdGVfc2l6ZSB8fAorCQkJICAgIHZhX2N1cnIgJiAocHRlX3NpemUgLSAxKSkgeworCQkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyogQ29sbGVjdCBQaHlzaWNhbCBhZGRyZXNzZXMgZnJvbSBWQSAqLworCQkJcGFkZHIgPSAocHRlX3ZhbCAmIH4ocHRlX3NpemUgLSAxKSk7CisJCQlpZiAocHRlX3NpemUgPT0gSFdfUEFHRV9TSVpFNjRLQikKKwkJCQludW1vZjRrX3BhZ2VzID0gMTY7CisJCQllbHNlCisJCQkJbnVtb2Y0a19wYWdlcyA9IDE7CisJCQl0ZW1wID0gMDsKKwkJCXdoaWxlICh0ZW1wKysgPCBudW1vZjRrX3BhZ2VzKSB7CisJCQkJaWYgKCFwZm5fdmFsaWQoX19waHlzX3RvX3BmbihwYWRkcikpKSB7CisJCQkJCXBhZGRyICs9IEhXX1BBR0VfU0laRTRLQjsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCXBnID0gUEhZU19UT19QQUdFKHBhZGRyKTsKKwkJCQlpZiAocGFnZV9jb3VudChwZykgPCAxKSB7CisJCQkJCXByX2luZm8oIkRTUEJSSURHRTogVU5NQVAgZnVuY3Rpb246ICIKKwkJCQkJCSJDT1VOVCAwIEZPUiBQQSAweCV4LCBzaXplID0gIgorCQkJCQkJIjB4JXhcbiIsIHBhZGRyLCB1bF9udW1fYnl0ZXMpOworCQkJCQliYWRfcGFnZV9kdW1wKHBhZGRyLCBwZyk7CisJCQkJfSBlbHNlIHsKKwkJCQkJc2V0X3BhZ2VfZGlydHkocGcpOworCQkJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGcpOworCQkJCX0KKwkJCQlwYWRkciArPSBIV19QQUdFX1NJWkU0S0I7CisJCQl9CisJCQlpZiAoaHdfbW11X3B0ZV9jbGVhcihwdGVfYWRkcl9sMiwgdmFfY3VyciwgcHRlX3NpemUpKSB7CisJCQkJc3RhdHVzID0gLUVQRVJNOworCQkJCWdvdG8gRVhJVF9MT09QOworCQkJfQorCisJCQlzdGF0dXMgPSAwOworCQkJcmVtX2J5dGVzX2wyIC09IHB0ZV9zaXplOworCQkJdmFfY3VyciArPSBwdGVfc2l6ZTsKKwkJCXB0ZV9hZGRyX2wyICs9IChwdGVfc2l6ZSA+PiAxMikgKiBzaXplb2YodTMyKTsKKwkJfQorCQlzcGluX2xvY2soJnB0LT5wZ19sb2NrKTsKKwkJaWYgKHJlbV9ieXRlc19sMiA9PSAwKSB7CisJCQlwdC0+cGdfaW5mb1tsMl9wYWdlX251bV0ubnVtX2VudHJpZXMgLT0gcHRlX2NvdW50OworCQkJaWYgKHB0LT5wZ19pbmZvW2wyX3BhZ2VfbnVtXS5udW1fZW50cmllcyA9PSAwKSB7CisJCQkJLyoKKwkJCQkgKiBDbGVhciB0aGUgTDEgUFRFIHBvaW50aW5nIHRvIHRoZSBMMiBQVAorCQkJCSAqLworCQkJCWlmICghaHdfbW11X3B0ZV9jbGVhcihsMV9iYXNlX3ZhLCB2YV9jdXJyX29yaWcsCisJCQkJCQkgICAgIEhXX01NVV9DT0FSU0VfUEFHRV9TSVpFKSkKKwkJCQkJc3RhdHVzID0gMDsKKwkJCQllbHNlIHsKKwkJCQkJc3RhdHVzID0gLUVQRVJNOworCQkJCQlzcGluX3VubG9jaygmcHQtPnBnX2xvY2spOworCQkJCQlnb3RvIEVYSVRfTE9PUDsKKwkJCQl9CisJCQl9CisJCQlyZW1fYnl0ZXMgLT0gcHRlX2NvdW50ICogUEdfU0laRTRLOworCQl9IGVsc2UKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKworCQlzcGluX3VubG9jaygmcHQtPnBnX2xvY2spOworCQljb250aW51ZTsKK3NraXBfY29hcnNlX3BhZ2U6CisJCS8qIHZhX2N1cnIgYWxpZ25lZCB0byBwdGVfc2l6ZT8gKi8KKwkJLyogcHRlX3NpemUgPSAxIE1CIG9yIDE2IE1CICovCisJCWlmIChwdGVfc2l6ZSA9PSAwIHx8IHJlbV9ieXRlcyA8IHB0ZV9zaXplIHx8CisJCSAgICB2YV9jdXJyICYgKHB0ZV9zaXplIC0gMSkpIHsKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHB0ZV9zaXplID09IEhXX1BBR0VfU0laRTFNQikKKwkJCW51bW9mNGtfcGFnZXMgPSAyNTY7CisJCWVsc2UKKwkJCW51bW9mNGtfcGFnZXMgPSA0MDk2OworCQl0ZW1wID0gMDsKKwkJLyogQ29sbGVjdCBQaHlzaWNhbCBhZGRyZXNzZXMgZnJvbSBWQSAqLworCQlwYWRkciA9IChwdGVfdmFsICYgfihwdGVfc2l6ZSAtIDEpKTsKKwkJd2hpbGUgKHRlbXArKyA8IG51bW9mNGtfcGFnZXMpIHsKKwkJCWlmIChwZm5fdmFsaWQoX19waHlzX3RvX3BmbihwYWRkcikpKSB7CisJCQkJcGcgPSBQSFlTX1RPX1BBR0UocGFkZHIpOworCQkJCWlmIChwYWdlX2NvdW50KHBnKSA8IDEpIHsKKwkJCQkJcHJfaW5mbygiRFNQQlJJREdFOiBVTk1BUCBmdW5jdGlvbjogIgorCQkJCQkJIkNPVU5UIDAgRk9SIFBBIDB4JXgsIHNpemUgPSAiCisJCQkJCQkiMHgleFxuIiwgcGFkZHIsIHVsX251bV9ieXRlcyk7CisJCQkJCWJhZF9wYWdlX2R1bXAocGFkZHIsIHBnKTsKKwkJCQl9IGVsc2UgeworCQkJCQlzZXRfcGFnZV9kaXJ0eShwZyk7CisJCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwZyk7CisJCQkJfQorCQkJfQorCQkJcGFkZHIgKz0gSFdfUEFHRV9TSVpFNEtCOworCQl9CisJCWlmICghaHdfbW11X3B0ZV9jbGVhcihsMV9iYXNlX3ZhLCB2YV9jdXJyLCBwdGVfc2l6ZSkpIHsKKwkJCXN0YXR1cyA9IDA7CisJCQlyZW1fYnl0ZXMgLT0gcHRlX3NpemU7CisJCQl2YV9jdXJyICs9IHB0ZV9zaXplOworCQl9IGVsc2UgeworCQkJc3RhdHVzID0gLUVQRVJNOworCQkJZ290byBFWElUX0xPT1A7CisJCX0KKwl9CisJLyoKKwkgKiBJdCBpcyBiZXR0ZXIgdG8gZmx1c2ggdGhlIFRMQiBoZXJlLCBzbyB0aGF0IGFueSBzdGFsZSBvbGQgZW50cmllcworCSAqIGdldCBmbHVzaGVkCisJICovCitFWElUX0xPT1A6CisJZmx1c2hfYWxsKGRldl9jb250ZXh0KTsKKwlkZXZfZGJnKGJyaWRnZSwKKwkJIiVzOiB2YV9jdXJyICV4LCBwdGVfYWRkcl9sMSAleCBwdGVfYWRkcl9sMiAleCByZW1fYnl0ZXMgJXgsIgorCQkiIHJlbV9ieXRlc19sMiAleCBzdGF0dXMgJXhcbiIsIF9fZnVuY19fLCB2YV9jdXJyLCBwdGVfYWRkcl9sMSwKKwkJcHRlX2FkZHJfbDIsIHJlbV9ieXRlcywgcmVtX2J5dGVzX2wyLCBzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gdXNlcl92YTJfcGEgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBUaGlzIGZ1bmN0aW9uIHdhbGtzIHRocm91Z2ggdGhlIHBhZ2UgdGFibGVzIHRvIGNvbnZlcnQgYSB1c2VybGFuZAorICogICAgICB2aXJ0dWFsIGFkZHJlc3MgdG8gcGh5c2ljYWwgYWRkcmVzcworICovCitzdGF0aWMgdTMyIHVzZXJfdmEyX3BhKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1MzIgYWRkcmVzcykKK3sKKwlwZ2RfdCAqcGdkOworCXBtZF90ICpwbWQ7CisJcHRlX3QgKnB0ZXAsIHB0ZTsKKworCXBnZCA9IHBnZF9vZmZzZXQobW0sIGFkZHJlc3MpOworCWlmICghKHBnZF9ub25lKCpwZ2QpIHx8IHBnZF9iYWQoKnBnZCkpKSB7CisJCXBtZCA9IHBtZF9vZmZzZXQocGdkLCBhZGRyZXNzKTsKKwkJaWYgKCEocG1kX25vbmUoKnBtZCkgfHwgcG1kX2JhZCgqcG1kKSkpIHsKKwkJCXB0ZXAgPSBwdGVfb2Zmc2V0X21hcChwbWQsIGFkZHJlc3MpOworCQkJaWYgKHB0ZXApIHsKKwkJCQlwdGUgPSAqcHRlcDsKKwkJCQlpZiAocHRlX3ByZXNlbnQocHRlKSkKKwkJCQkJcmV0dXJuIHB0ZSAmIFBBR0VfTUFTSzsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKgorICogID09PT09PT09IHB0ZV91cGRhdGUgPT09PT09PT0KKyAqICAgICAgVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBvcHRpbXVtIHBhZ2UtYWxpZ25lZCBhZGRyZXNzZXMgYW5kIHNpemVzCisgKiAgICAgIENhbGxlciBtdXN0IHBhc3MgcGFnZS1hbGlnbmVkIHZhbHVlcworICovCitzdGF0aWMgaW50IHB0ZV91cGRhdGUoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQsIHUzMiBwYSwKKwkJCSAgICAgdTMyIHZhLCB1MzIgc2l6ZSwKKwkJCSAgICAgc3RydWN0IGh3X21tdV9tYXBfYXR0cnNfdCAqbWFwX2F0dHJzKQoreworCXUzMiBpOworCXUzMiBhbGxfYml0czsKKwl1MzIgcGFfY3VyciA9IHBhOworCXUzMiB2YV9jdXJyID0gdmE7CisJdTMyIG51bV9ieXRlcyA9IHNpemU7CisJc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQgPSBkZXZfY3R4dDsKKwlpbnQgc3RhdHVzID0gMDsKKwl1MzIgcGFnZV9zaXplW10gPSB7IEhXX1BBR0VfU0laRTE2TUIsIEhXX1BBR0VfU0laRTFNQiwKKwkJSFdfUEFHRV9TSVpFNjRLQiwgSFdfUEFHRV9TSVpFNEtCCisJfTsKKworCXdoaWxlIChudW1fYnl0ZXMgJiYgIXN0YXR1cykgeworCQkvKiBUbyBmaW5kIHRoZSBtYXguIHBhZ2Ugc2l6ZSB3aXRoIHdoaWNoIGJvdGggUEEgJiBWQSBhcmUKKwkJICogYWxpZ25lZCAqLworCQlhbGxfYml0cyA9IHBhX2N1cnIgfCB2YV9jdXJyOworCisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCWlmICgobnVtX2J5dGVzID49IHBhZ2Vfc2l6ZVtpXSkgJiYgKChhbGxfYml0cyAmCisJCQkJCQkJICAgICAocGFnZV9zaXplW2ldIC0KKwkJCQkJCQkgICAgICAxKSkgPT0gMCkpIHsKKwkJCQlzdGF0dXMgPQorCQkJCSAgICBwdGVfc2V0KGRldl9jb250ZXh0LT5wdF9hdHRycywgcGFfY3VyciwKKwkJCQkJICAgIHZhX2N1cnIsIHBhZ2Vfc2l6ZVtpXSwgbWFwX2F0dHJzKTsKKwkJCQlwYV9jdXJyICs9IHBhZ2Vfc2l6ZVtpXTsKKwkJCQl2YV9jdXJyICs9IHBhZ2Vfc2l6ZVtpXTsKKwkJCQludW1fYnl0ZXMgLT0gcGFnZV9zaXplW2ldOworCQkJCS8qIERvbid0IHRyeSBzbWFsbGVyIHNpemVzLiBIb3BlZnVsbHkgd2UgaGF2ZQorCQkJCSAqIHJlYWNoZWQgYW4gYWRkcmVzcyBhbGlnbmVkIHRvIGEgYmlnZ2VyIHBhZ2UKKwkJCQkgKiBzaXplICovCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHB0ZV9zZXQgPT09PT09PT0KKyAqICAgICAgVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIFBURSBhZGRyZXNzIChNUFUgdmlydHVhbCkgdG8gYmUgdXBkYXRlZAorICogICAgICBJdCBhbHNvIG1hbmFnZXMgdGhlIEwyIHBhZ2UgdGFibGVzCisgKi8KK3N0YXRpYyBpbnQgcHRlX3NldChzdHJ1Y3QgcGdfdGFibGVfYXR0cnMgKnB0LCB1MzIgcGEsIHUzMiB2YSwKKwkJCSAgdTMyIHNpemUsIHN0cnVjdCBod19tbXVfbWFwX2F0dHJzX3QgKmF0dHJzKQoreworCXUzMiBpOworCXUzMiBwdGVfdmFsOworCXUzMiBwdGVfYWRkcl9sMTsKKwl1MzIgcHRlX3NpemU7CisJLyogQmFzZSBhZGRyZXNzIG9mIHRoZSBQVCB0aGF0IHdpbGwgYmUgdXBkYXRlZCAqLworCXUzMiBwZ190YmxfdmE7CisJdTMyIGwxX2Jhc2VfdmE7CisJLyogQ29tcGlsZXIgd2FybnMgdGhhdCB0aGUgbmV4dCB0aHJlZSB2YXJpYWJsZXMgbWlnaHQgYmUgdXNlZAorCSAqIHVuaW5pdGlhbGl6ZWQgaW4gdGhpcyBmdW5jdGlvbi4gRG9lc24ndCBzZWVtIHNvLiBXb3JraW5nIGFyb3VuZCwKKwkgKiBhbnl3YXlzLiAqLworCXUzMiBsMl9iYXNlX3ZhID0gMDsKKwl1MzIgbDJfYmFzZV9wYSA9IDA7CisJdTMyIGwyX3BhZ2VfbnVtID0gMDsKKwlpbnQgc3RhdHVzID0gMDsKKworCWwxX2Jhc2VfdmEgPSBwdC0+bDFfYmFzZV92YTsKKwlwZ190YmxfdmEgPSBsMV9iYXNlX3ZhOworCWlmICgoc2l6ZSA9PSBIV19QQUdFX1NJWkU2NEtCKSB8fCAoc2l6ZSA9PSBIV19QQUdFX1NJWkU0S0IpKSB7CisJCS8qIEZpbmQgd2hldGhlciB0aGUgTDEgUFRFIHBvaW50cyB0byBhIHZhbGlkIEwyIFBUICovCisJCXB0ZV9hZGRyX2wxID0gaHdfbW11X3B0ZV9hZGRyX2wxKGwxX2Jhc2VfdmEsIHZhKTsKKwkJaWYgKHB0ZV9hZGRyX2wxIDw9IChwdC0+bDFfYmFzZV92YSArIHB0LT5sMV9zaXplKSkgeworCQkJcHRlX3ZhbCA9ICoodTMyICopIHB0ZV9hZGRyX2wxOworCQkJcHRlX3NpemUgPSBod19tbXVfcHRlX3NpemVfbDEocHRlX3ZhbCk7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gLUVQRVJNOworCQl9CisJCXNwaW5fbG9jaygmcHQtPnBnX2xvY2spOworCQlpZiAocHRlX3NpemUgPT0gSFdfTU1VX0NPQVJTRV9QQUdFX1NJWkUpIHsKKwkJCS8qIEdldCB0aGUgTDIgUEEgZnJvbSB0aGUgTDEgUFRFLCBhbmQgZmluZAorCQkJICogY29ycmVzcG9uZGluZyBMMiBWQSAqLworCQkJbDJfYmFzZV9wYSA9IGh3X21tdV9wdGVfY29hcnNlX2wxKHB0ZV92YWwpOworCQkJbDJfYmFzZV92YSA9CisJCQkgICAgbDJfYmFzZV9wYSAtIHB0LT5sMl9iYXNlX3BhICsgcHQtPmwyX2Jhc2VfdmE7CisJCQlsMl9wYWdlX251bSA9CisJCQkgICAgKGwyX2Jhc2VfcGEgLQorCQkJICAgICBwdC0+bDJfYmFzZV9wYSkgLyBIV19NTVVfQ09BUlNFX1BBR0VfU0laRTsKKwkJfSBlbHNlIGlmIChwdGVfc2l6ZSA9PSAwKSB7CisJCQkvKiBMMSBQVEUgaXMgaW52YWxpZC4gQWxsb2NhdGUgYSBMMiBQVCBhbmQKKwkJCSAqIHBvaW50IHRoZSBMMSBQVEUgdG8gaXQgKi8KKwkJCS8qIEZpbmQgYSBmcmVlIEwyIFBULiAqLworCQkJZm9yIChpID0gMDsgKGkgPCBwdC0+bDJfbnVtX3BhZ2VzKSAmJgorCQkJICAgICAocHQtPnBnX2luZm9baV0ubnVtX2VudHJpZXMgIT0gMCk7IGkrKykKKwkJCQk7OworCQkJaWYgKGkgPCBwdC0+bDJfbnVtX3BhZ2VzKSB7CisJCQkJbDJfcGFnZV9udW0gPSBpOworCQkJCWwyX2Jhc2VfcGEgPSBwdC0+bDJfYmFzZV9wYSArIChsMl9wYWdlX251bSAqCisJCQkJCQlIV19NTVVfQ09BUlNFX1BBR0VfU0laRSk7CisJCQkJbDJfYmFzZV92YSA9IHB0LT5sMl9iYXNlX3ZhICsgKGwyX3BhZ2VfbnVtICoKKwkJCQkJCUhXX01NVV9DT0FSU0VfUEFHRV9TSVpFKTsKKwkJCQkvKiBFbmRpYW5uZXNzIGF0dHJpYnV0ZXMgYXJlIGlnbm9yZWQgZm9yCisJCQkJICogSFdfTU1VX0NPQVJTRV9QQUdFX1NJWkUgKi8KKwkJCQlzdGF0dXMgPQorCQkJCSAgICBod19tbXVfcHRlX3NldChsMV9iYXNlX3ZhLCBsMl9iYXNlX3BhLCB2YSwKKwkJCQkJCSAgIEhXX01NVV9DT0FSU0VfUEFHRV9TSVpFLAorCQkJCQkJICAgYXR0cnMpOworCQkJfSBlbHNlIHsKKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogRm91bmQgdmFsaWQgTDEgUFRFIG9mIGFub3RoZXIgc2l6ZS4KKwkJCSAqIFNob3VsZCBub3Qgb3ZlcndyaXRlIGl0LiAqLworCQkJc3RhdHVzID0gLUVQRVJNOworCQl9CisJCWlmICghc3RhdHVzKSB7CisJCQlwZ190YmxfdmEgPSBsMl9iYXNlX3ZhOworCQkJaWYgKHNpemUgPT0gSFdfUEFHRV9TSVpFNjRLQikKKwkJCQlwdC0+cGdfaW5mb1tsMl9wYWdlX251bV0ubnVtX2VudHJpZXMgKz0gMTY7CisJCQllbHNlCisJCQkJcHQtPnBnX2luZm9bbDJfcGFnZV9udW1dLm51bV9lbnRyaWVzKys7CisJCQlkZXZfZGJnKGJyaWRnZSwgIlBURTogTDIgQmFzZVZhICV4LCBCYXNlUGEgJXgsIFBhZ2VOdW0gIgorCQkJCSIleCwgbnVtX2VudHJpZXMgJXhcbiIsIGwyX2Jhc2VfdmEsCisJCQkJbDJfYmFzZV9wYSwgbDJfcGFnZV9udW0sCisJCQkJcHQtPnBnX2luZm9bbDJfcGFnZV9udW1dLm51bV9lbnRyaWVzKTsKKwkJfQorCQlzcGluX3VubG9jaygmcHQtPnBnX2xvY2spOworCX0KKwlpZiAoIXN0YXR1cykgeworCQlkZXZfZGJnKGJyaWRnZSwgIlBURTogcGdfdGJsX3ZhICV4LCBwYSAleCwgdmEgJXgsIHNpemUgJXhcbiIsCisJCQlwZ190YmxfdmEsIHBhLCB2YSwgc2l6ZSk7CisJCWRldl9kYmcoYnJpZGdlLCAiUFRFOiBlbmRpYW5pc20gJXgsIGVsZW1lbnRfc2l6ZSAleCwgIgorCQkJIm1peGVkX3NpemUgJXhcbiIsIGF0dHJzLT5lbmRpYW5pc20sCisJCQlhdHRycy0+ZWxlbWVudF9zaXplLCBhdHRycy0+bWl4ZWRfc2l6ZSk7CisJCXN0YXR1cyA9IGh3X21tdV9wdGVfc2V0KHBnX3RibF92YSwgcGEsIHZhLCBzaXplLCBhdHRycyk7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyogTWVtb3J5IG1hcCBrZXJuZWwgVkEgLS0gbWVtb3J5IGFsbG9jYXRlZCB3aXRoIHZtYWxsb2MgKi8KK3N0YXRpYyBpbnQgbWVtX21hcF92bWFsbG9jKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0LAorCQkJCSAgdTMyIHVsX21wdV9hZGRyLCB1MzIgdmlydF9hZGRyLAorCQkJCSAgdTMyIHVsX251bV9ieXRlcywKKwkJCQkgIHN0cnVjdCBod19tbXVfbWFwX2F0dHJzX3QgKmh3X2F0dHJzKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBwYWdlICpwYWdlWzFdOworCXUzMiBpOworCXUzMiBwYV9jdXJyOworCXUzMiBwYV9uZXh0OworCXUzMiB2YV9jdXJyOworCXUzMiBzaXplX2N1cnI7CisJdTMyIG51bV9wYWdlczsKKwl1MzIgcGE7CisJdTMyIG51bV9vZjRrX3BhZ2VzOworCXUzMiB0ZW1wID0gMDsKKworCS8qCisJICogRG8gS2VybmVsIHZhIHRvIHBhIHRyYW5zbGF0aW9uLgorCSAqIENvbWJpbmUgcGh5c2ljYWxseSBjb250aWd1b3VzIHJlZ2lvbnMgdG8gcmVkdWNlIFRMQnMuCisJICogUGFzcyB0aGUgdHJhbnNsYXRlZCBwYSB0byBwdGVfdXBkYXRlLgorCSAqLworCW51bV9wYWdlcyA9IHVsX251bV9ieXRlcyAvIFBBR0VfU0laRTsJLyogUEFHRV9TSVpFID0gT1MgcGFnZSBzaXplICovCisJaSA9IDA7CisJdmFfY3VyciA9IHVsX21wdV9hZGRyOworCXBhZ2VbMF0gPSB2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKil2YV9jdXJyKTsKKwlwYV9uZXh0ID0gcGFnZV90b19waHlzKHBhZ2VbMF0pOworCXdoaWxlICghc3RhdHVzICYmIChpIDwgbnVtX3BhZ2VzKSkgeworCQkvKgorCQkgKiBSZXVzZSBwYV9uZXh0IGZyb20gdGhlIHByZXZpb3VzIGl0ZXJhaW9uIHRvIGF2b2lkCisJCSAqIGFuIGV4dHJhIHZhMnBhIGNhbGwKKwkJICovCisJCXBhX2N1cnIgPSBwYV9uZXh0OworCQlzaXplX2N1cnIgPSBQQUdFX1NJWkU7CisJCS8qCisJCSAqIElmIHRoZSBuZXh0IHBhZ2UgaXMgcGh5c2ljYWxseSBjb250aWd1b3VzLAorCQkgKiBtYXAgaXQgd2l0aCB0aGUgY3VycmVudCBvbmUgYnkgaW5jcmVhc2luZworCQkgKiB0aGUgc2l6ZSBvZiB0aGUgcmVnaW9uIHRvIGJlIG1hcHBlZAorCQkgKi8KKwkJd2hpbGUgKCsraSA8IG51bV9wYWdlcykgeworCQkJcGFnZVswXSA9CisJCQkgICAgdm1hbGxvY190b19wYWdlKCh2b2lkICopKHZhX2N1cnIgKyBzaXplX2N1cnIpKTsKKwkJCXBhX25leHQgPSBwYWdlX3RvX3BoeXMocGFnZVswXSk7CisKKwkJCWlmIChwYV9uZXh0ID09IChwYV9jdXJyICsgc2l6ZV9jdXJyKSkKKwkJCQlzaXplX2N1cnIgKz0gUEFHRV9TSVpFOworCQkJZWxzZQorCQkJCWJyZWFrOworCisJCX0KKwkJaWYgKHBhX25leHQgPT0gMCkgeworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisJCXBhID0gcGFfY3VycjsKKwkJbnVtX29mNGtfcGFnZXMgPSBzaXplX2N1cnIgLyBIV19QQUdFX1NJWkU0S0I7CisJCXdoaWxlICh0ZW1wKysgPCBudW1fb2Y0a19wYWdlcykgeworCQkJZ2V0X3BhZ2UoUEhZU19UT19QQUdFKHBhKSk7CisJCQlwYSArPSBIV19QQUdFX1NJWkU0S0I7CisJCX0KKwkJc3RhdHVzID0gcHRlX3VwZGF0ZShkZXZfY29udGV4dCwgcGFfY3VyciwgdmlydF9hZGRyICsKKwkJCQkgICAgKHZhX2N1cnIgLSB1bF9tcHVfYWRkciksIHNpemVfY3VyciwKKwkJCQkgICAgaHdfYXR0cnMpOworCQl2YV9jdXJyICs9IHNpemVfY3VycjsKKwl9CisJLyoKKwkgKiBJbiBhbnkgY2FzZSwgZmx1c2ggdGhlIFRMQgorCSAqIFRoaXMgaXMgY2FsbGVkIGZyb20gaGVyZSBpbnN0ZWFkIGZyb20gcHRlX3VwZGF0ZSB0byBhdm9pZCB1bm5lY2Vzc2FyeQorCSAqIHJlcGV0aXRpb24gd2hpbGUgbWFwcGluZyBub24tY29udGlndW91cyBwaHlzaWNhbCByZWdpb25zIG9mIGEgdmlydHVhbAorCSAqIHJlZ2lvbgorCSAqLworCWZsdXNoX2FsbChkZXZfY29udGV4dCk7CisJZGV2X2RiZyhicmlkZ2UsICIlcyBzdGF0dXMgJXhcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gd2FpdF9mb3Jfc3RhcnQgPT09PT09PT0KKyAqICAgICAgV2FpdCBmb3IgdGhlIHNpbmdhbCBmcm9tIERTUCB0aGF0IGl0IGhhcyBzdGFydGVkLCBvciB0aW1lIG91dC4KKyAqLworYm9vbCB3YWl0X2Zvcl9zdGFydChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCwgdTMyIGR3X3N5bmNfYWRkcikKK3sKKwl1MTYgdGltZW91dCA9IFRJSEVMRU5fQUNLVElNRU9VVDsKKworCS8qICBXYWl0IGZvciByZXNwb25zZSBmcm9tIGJvYXJkICovCisJd2hpbGUgKF9fcmF3X3JlYWR3KGR3X3N5bmNfYWRkcikgJiYgLS10aW1lb3V0KQorCQl1ZGVsYXkoMTApOworCisJLyogIElmIHRpbWVkIG91dDogcmV0dXJuIGZhbHNlICovCisJaWYgKCF0aW1lb3V0KSB7CisJCXByX2VycigiJXM6IFRpbWVkIG91dCB3YWl0aW5nIERTUCB0byBTdGFydFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvdGlvbWFwMzQzMF9wd3IuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL3Rpb21hcDM0MzBfcHdyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc4OWY4ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL3Rpb21hcDM0MzBfcHdyLmMKQEAgLTAsMCArMSw1NTAgQEAKKy8qCisgKiB0aW9tYXBfcHdyLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogSW1wbGVtZW50YXRpb24gb2YgRFNQIHdha2Uvc2xlZXAgcm91dGluZXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY2ZnLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rydi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9pb19zbS5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhdGZvcm0gTWFuYWdlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9icmRkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9pb2RlZnMuaD4KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhhcmR3YXJlIEFic3RyYWN0aW9uIExheWVyICovCisjaW5jbHVkZSA8aHdfZGVmcy5oPgorI2luY2x1ZGUgPGh3X21tdS5oPgorCisjaW5jbHVkZSA8ZHNwYnJpZGdlL3B3cl9zaC5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQnJpZGdlIERyaXZlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BkZWguaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvd2R0Lmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzcGVjaWZpYyB0byB0aGlzIGZpbGUgKi8KKyNpbmNsdWRlICJfdGlvbWFwLmgiCisjaW5jbHVkZSAiX3Rpb21hcF9wd3IuaCIKKyNpbmNsdWRlIDxtYWNoLW9tYXAyL3BybS1yZWdiaXRzLTM0eHguaD4KKyNpbmNsdWRlIDxtYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMzR4eC5oPgorCisjZGVmaW5lIFBXUlNUU1RfVElNRU9VVCAgICAgICAgICAyMDAKKworLyoKKyAqICA9PT09PT09PSBoYW5kbGVfY29uc3RyYWludHNfc2V0ID09PT09PT09CisgKiAgCVNldHMgbmV3IERTUCBjb25zdHJhaW50CisgKi8KK2ludCBoYW5kbGVfY29uc3RyYWludHNfc2V0KHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0LAorCQkJCSAgdm9pZCAqcGFyZ3MpCit7CisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0RWRlMKKwl1MzIgKmNvbnN0cmFpbnRfdmFsOworCXN0cnVjdCBkc3BicmlkZ2VfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPQorCSAgICBvbWFwX2RzcGJyaWRnZV9kZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJY29uc3RyYWludF92YWwgPSAodTMyICopIChwYXJncyk7CisJLyogUmVhZCB0aGUgdGFyZ2V0IHZhbHVlIHJlcXVlc3RlZCBieSBEU1AgKi8KKwlkZXZfZGJnKGJyaWRnZSwgIk9QUDogJXMgb3BwIHJlcXVlc3RlZCA9IDB4JXhcbiIsIF9fZnVuY19fLAorCQkodTMyKSAqKGNvbnN0cmFpbnRfdmFsICsgMSkpOworCisJLyogU2V0IHRoZSBuZXcgb3BwIHZhbHVlICovCisJaWYgKHBkYXRhLT5kc3Bfc2V0X21pbl9vcHApCisJCSgqcGRhdGEtPmRzcF9zZXRfbWluX29wcCkgKCh1MzIpICooY29uc3RyYWludF92YWwgKyAxKSk7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9EVkZTICovCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAgPT09PT09PT0gaGFuZGxlX2hpYmVybmF0aW9uX2Zyb21fZHNwID09PT09PT09CisgKiAgCUhhbmRsZSBIaWJlcm5hdGlvbiByZXF1ZXN0ZWQgZnJvbSBEU1AKKyAqLworaW50IGhhbmRsZV9oaWJlcm5hdGlvbl9mcm9tX2RzcChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKyNpZmRlZiBDT05GSUdfUE0KKwl1MTYgdGltZW91dCA9IFBXUlNUU1RfVElNRU9VVCAvIDEwOworCXUzMiBwd3Jfc3RhdGU7CisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0RWRlMKKwl1MzIgb3BwbGV2ZWw7CisJc3RydWN0IGlvX21nciAqaGlvX21ncjsKKyNlbmRpZgorCXN0cnVjdCBkc3BicmlkZ2VfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPQorCSAgICBvbWFwX2RzcGJyaWRnZV9kZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJcHdyX3N0YXRlID0gKCpwZGF0YS0+ZHNwX3BybV9yZWFkKShPTUFQMzQzMF9JVkEyX01PRCwgT01BUDJfUE1fUFdTVFNUKSAmCisJCQkJCQlPTUFQX1BPV0VSU1RBVEVTVF9NQVNLOworCS8qIFdhaXQgZm9yIERTUCB0byBtb3ZlIGludG8gT0ZGIHN0YXRlICovCisJd2hpbGUgKChwd3Jfc3RhdGUgIT0gUFdSRE1fUE9XRVJfT0ZGKSAmJiAtLXRpbWVvdXQpIHsKKwkJaWYgKG1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwKSkgeworCQkJcHJfZXJyKCJXYWl0aW5nIGZvciBEU1AgT0ZGIG1vZGUgaW50ZXJydXB0ZWRcbiIpOworCQkJcmV0dXJuIC1FUEVSTTsKKwkJfQorCQlwd3Jfc3RhdGUgPSAoKnBkYXRhLT5kc3BfcHJtX3JlYWQpKE9NQVAzNDMwX0lWQTJfTU9ELAorCQkJCQlPTUFQMl9QTV9QV1NUU1QpICYgT01BUF9QT1dFUlNUQVRFU1RfTUFTSzsKKwl9CisJaWYgKHRpbWVvdXQgPT0gMCkgeworCQlwcl9lcnIoIiVzOiBUaW1lZCBvdXQgd2FpdGluZyBmb3IgRFNQIG9mZiBtb2RlXG4iLCBfX2Z1bmNfXyk7CisJCXN0YXR1cyA9IC1FVElNRURPVVQ7CisJCXJldHVybiBzdGF0dXM7CisJfSBlbHNlIHsKKworCQkvKiBTYXZlIG1haWxib3ggc2V0dGluZ3MgKi8KKwkJb21hcF9tYm94X3NhdmVfY3R4KGRldl9jb250ZXh0LT5tYm94KTsKKworCQkvKiBUdXJuIG9mZiBEU1AgUGVyaXBoZXJhbCBjbG9ja3MgYW5kIERTUCBMb2FkIG1vbml0b3IgdGltZXIgKi8KKwkJc3RhdHVzID0gZHNwX2Nsb2NrX2Rpc2FibGVfYWxsKGRldl9jb250ZXh0LT5kc3BfcGVyX2Nsa3MpOworCisJCS8qIERpc2FibGUgd2R0IG9uIGhpYmVybmF0aW9uLiAqLworCQlkc3Bfd2R0X2VuYWJsZShmYWxzZSk7CisKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCS8qIFVwZGF0ZSB0aGUgQnJpZGdlciBEcml2ZXIgc3RhdGUgKi8KKwkJCWRldl9jb250ZXh0LT5kd19icmRfc3RhdGUgPSBCUkRfRFNQX0hJQkVSTkFUSU9OOworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9EVkZTCisJCQlzdGF0dXMgPQorCQkJICAgIGRldl9nZXRfaW9fbWdyKGRldl9jb250ZXh0LT5oZGV2X29iaiwgJmhpb19tZ3IpOworCQkJaWYgKCFoaW9fbWdyKSB7CisJCQkJc3RhdHVzID0gRFNQX0VIQU5ETEU7CisJCQkJcmV0dXJuIHN0YXR1czsKKwkJCX0KKwkJCWlvX3NoX21zZXR0aW5nKGhpb19tZ3IsIFNITV9HRVRPUFAsICZvcHBsZXZlbCk7CisKKwkJCS8qCisJCQkgKiBTZXQgdGhlIE9QUCB0byBsb3cgbGV2ZWwgYmVmb3JlIG1vdmluZyB0byBPRkYKKwkJCSAqIG1vZGUKKwkJCSAqLworCQkJaWYgKHBkYXRhLT5kc3Bfc2V0X21pbl9vcHApCisJCQkJKCpwZGF0YS0+ZHNwX3NldF9taW5fb3BwKSAoVkREMV9PUFAxKTsKKwkJCXN0YXR1cyA9IDA7CisjZW5kaWYgLyogQ09ORklHX1RJRFNQQlJJREdFX0RWRlMgKi8KKwkJfQorCX0KKyNlbmRpZgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gc2xlZXBfZHNwID09PT09PT09CisgKiAgCVB1dCBEU1AgaW4gbG93IHBvd2VyIGNvbnN1bWluZyBzdGF0ZS4KKyAqLworaW50IHNsZWVwX2RzcChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCwgdTMyIGR3X2NtZCwKKwkJICAgICB2b2lkICpwYXJncykKK3sKKwlpbnQgc3RhdHVzID0gMDsKKyNpZmRlZiBDT05GSUdfUE0KKyNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfTlRGWV9QV1JFUlIKKwlzdHJ1Y3QgZGVoX21nciAqaGRlaF9tZ3I7CisjZW5kaWYgLyogQ09ORklHX1RJRFNQQlJJREdFX05URllfUFdSRVJSICovCisJdTE2IHRpbWVvdXQgPSBQV1JTVFNUX1RJTUVPVVQgLyAxMDsKKwl1MzIgcHdyX3N0YXRlLCB0YXJnZXRfcHdyX3N0YXRlOworCXN0cnVjdCBkc3BicmlkZ2VfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPQorCQkJCW9tYXBfZHNwYnJpZGdlX2Rldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwkvKiBDaGVjayBpZiBzbGVlcCBjb2RlIGlzIHZhbGlkICovCisJaWYgKChkd19jbWQgIT0gUFdSX0RFRVBTTEVFUCkgJiYgKGR3X2NtZCAhPSBQV1JfRU1FUkdFTkNZREVFUFNMRUVQKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKGRldl9jb250ZXh0LT5kd19icmRfc3RhdGUpIHsKKwljYXNlIEJSRF9SVU5OSU5HOgorCQlvbWFwX21ib3hfc2F2ZV9jdHgoZGV2X2NvbnRleHQtPm1ib3gpOworCQlpZiAoZHNwX3Rlc3Rfc2xlZXBzdGF0ZSA9PSBQV1JETV9QT1dFUl9PRkYpIHsKKwkJCXNtX2ludGVycnVwdF9kc3AoZGV2X2NvbnRleHQsIE1CWF9QTV9EU1BISUJFUk5BVEUpOworCQkJZGV2X2RiZyhicmlkZ2UsICJQTTogJXMgLSBzZW50IGhpYmVybmF0ZSBjbWQgdG8gRFNQXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJCXRhcmdldF9wd3Jfc3RhdGUgPSBQV1JETV9QT1dFUl9PRkY7CisJCX0gZWxzZSB7CisJCQlzbV9pbnRlcnJ1cHRfZHNwKGRldl9jb250ZXh0LCBNQlhfUE1fRFNQUkVURU5USU9OKTsKKwkJCXRhcmdldF9wd3Jfc3RhdGUgPSBQV1JETV9QT1dFUl9SRVQ7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBCUkRfUkVURU5USU9OOgorCQlvbWFwX21ib3hfc2F2ZV9jdHgoZGV2X2NvbnRleHQtPm1ib3gpOworCQlpZiAoZHNwX3Rlc3Rfc2xlZXBzdGF0ZSA9PSBQV1JETV9QT1dFUl9PRkYpIHsKKwkJCXNtX2ludGVycnVwdF9kc3AoZGV2X2NvbnRleHQsIE1CWF9QTV9EU1BISUJFUk5BVEUpOworCQkJdGFyZ2V0X3B3cl9zdGF0ZSA9IFBXUkRNX1BPV0VSX09GRjsKKwkJfSBlbHNlCisJCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisJY2FzZSBCUkRfSElCRVJOQVRJT046CisJY2FzZSBCUkRfRFNQX0hJQkVSTkFUSU9OOgorCQkvKiBBbHJlYWR5IGluIEhpYmVybmF0aW9uLCBzbyBqdXN0IHJldHVybiAqLworCQlkZXZfZGJnKGJyaWRnZSwgIlBNOiAlcyAtIERTUCBhbHJlYWR5IGluIGhpYmVybmF0aW9uXG4iLAorCQkJX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwljYXNlIEJSRF9TVE9QUEVEOgorCQlkZXZfZGJnKGJyaWRnZSwgIlBNOiAlcyAtIEJvYXJkIGluIFNUT1Agc3RhdGVcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJZGV2X2RiZyhicmlkZ2UsICJQTTogJXMgLSBCcmlkZ2UgaW4gSWxsZWdhbCBzdGF0ZVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCS8qIEdldCB0aGUgUFJDTSBEU1AgcG93ZXIgZG9tYWluIHN0YXR1cyAqLworCXB3cl9zdGF0ZSA9ICgqcGRhdGEtPmRzcF9wcm1fcmVhZCkoT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAyX1BNX1BXU1RTVCkgJgorCQkJCQkJT01BUF9QT1dFUlNUQVRFU1RfTUFTSzsKKworCS8qIFdhaXQgZm9yIERTUCB0byBtb3ZlIGludG8gdGFyZ2V0IHBvd2VyIHN0YXRlICovCisJd2hpbGUgKChwd3Jfc3RhdGUgIT0gdGFyZ2V0X3B3cl9zdGF0ZSkgJiYgLS10aW1lb3V0KSB7CisJCWlmIChtc2xlZXBfaW50ZXJydXB0aWJsZSgxMCkpIHsKKwkJCXByX2VycigiV2FpdGluZyBmb3IgRFNQIHRvIFN1c3BlbmQgaW50ZXJydXB0ZWRcbiIpOworCQkJcmV0dXJuIC1FUEVSTTsKKwkJfQorCQlwd3Jfc3RhdGUgPSAoKnBkYXRhLT5kc3BfcHJtX3JlYWQpKE9NQVAzNDMwX0lWQTJfTU9ELAorCQkJCQlPTUFQMl9QTV9QV1NUU1QpICYgT01BUF9QT1dFUlNUQVRFU1RfTUFTSzsKKwl9CisKKwlpZiAoIXRpbWVvdXQpIHsKKwkJcHJfZXJyKCIlczogVGltZWQgb3V0IHdhaXRpbmcgZm9yIERTUCBvZmYgbW9kZSwgc3RhdGUgJXhcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgcHdyX3N0YXRlKTsKKyNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfTlRGWV9QV1JFUlIKKwkJZGV2X2dldF9kZWhfbWdyKGRldl9jb250ZXh0LT5oZGV2X29iaiwgJmhkZWhfbWdyKTsKKwkJYnJpZGdlX2RlaF9ub3RpZnkoaGRlaF9tZ3IsIERTUF9QV1JFUlJPUiwgMCk7CisjZW5kaWYgLyogQ09ORklHX1RJRFNQQlJJREdFX05URllfUFdSRVJSICovCisJCXJldHVybiAtRVRJTUVET1VUOworCX0gZWxzZSB7CisJCS8qIFVwZGF0ZSB0aGUgQnJpZGdlciBEcml2ZXIgc3RhdGUgKi8KKwkJaWYgKGRzcF90ZXN0X3NsZWVwc3RhdGUgPT0gUFdSRE1fUE9XRVJfT0ZGKQorCQkJZGV2X2NvbnRleHQtPmR3X2JyZF9zdGF0ZSA9IEJSRF9ISUJFUk5BVElPTjsKKwkJZWxzZQorCQkJZGV2X2NvbnRleHQtPmR3X2JyZF9zdGF0ZSA9IEJSRF9SRVRFTlRJT047CisKKwkJLyogRGlzYWJsZSB3ZHQgb24gaGliZXJuYXRpb24uICovCisJCWRzcF93ZHRfZW5hYmxlKGZhbHNlKTsKKworCQkvKiBUdXJuIG9mZiBEU1AgUGVyaXBoZXJhbCBjbG9ja3MgKi8KKwkJc3RhdHVzID0gZHNwX2Nsb2NrX2Rpc2FibGVfYWxsKGRldl9jb250ZXh0LT5kc3BfcGVyX2Nsa3MpOworCQlpZiAoc3RhdHVzKQorCQkJcmV0dXJuIHN0YXR1czsKKyNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfRFZGUworCQllbHNlIGlmICh0YXJnZXRfcHdyX3N0YXRlID09IFBXUkRNX1BPV0VSX09GRikgeworCQkJLyoKKwkJCSAqIFNldCB0aGUgT1BQIHRvIGxvdyBsZXZlbCBiZWZvcmUgbW92aW5nIHRvIE9GRiBtb2RlCisJCQkgKi8KKwkJCWlmIChwZGF0YS0+ZHNwX3NldF9taW5fb3BwKQorCQkJCSgqcGRhdGEtPmRzcF9zZXRfbWluX29wcCkgKFZERDFfT1BQMSk7CisJCX0KKyNlbmRpZiAvKiBDT05GSUdfVElEU1BCUklER0VfRFZGUyAqLworCX0KKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHdha2VfZHNwID09PT09PT09CisgKiAgCVdha2UgdXAgRFNQIGZyb20gc2xlZXAuCisgKi8KK2ludCB3YWtlX2RzcChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCwgdm9pZCAqcGFyZ3MpCit7CisJaW50IHN0YXR1cyA9IDA7CisjaWZkZWYgQ09ORklHX1BNCisKKwkvKiBDaGVjayB0aGUgYm9hcmQgc3RhdGUsIGlmIGl0IGlzIG5vdCAnU0xFRVAnIHRoZW4gcmV0dXJuICovCisJaWYgKGRldl9jb250ZXh0LT5kd19icmRfc3RhdGUgPT0gQlJEX1JVTk5JTkcgfHwKKwkgICAgZGV2X2NvbnRleHQtPmR3X2JyZF9zdGF0ZSA9PSBCUkRfU1RPUFBFRCkgeworCQkvKiBUaGUgRGV2aWNlIGlzIGluICdSRVQnIG9yICdPRkYnIHN0YXRlIGFuZCBCcmlkZ2Ugc3RhdGUgaXMgbm90CisJCSAqICdTTEVFUCcsIHRoaXMgbWVhbnMgc3RhdGUgaW5jb25zaXN0ZW5jeSwgc28gcmV0dXJuICovCisJCXJldHVybiAwOworCX0KKworCS8qIFNlbmQgYSB3YWtldXAgbWVzc2FnZSB0byBEU1AgKi8KKwlzbV9pbnRlcnJ1cHRfZHNwKGRldl9jb250ZXh0LCBNQlhfUE1fRFNQV0FLRVVQKTsKKworCS8qIFNldCB0aGUgZGV2aWNlIHN0YXRlIHRvIFJVTk5JRyAqLworCWRldl9jb250ZXh0LT5kd19icmRfc3RhdGUgPSBCUkRfUlVOTklORzsKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRzcF9wZXJpcGhlcmFsX2Nsa19jdHJsID09PT09PT09CisgKiAgCUVuYWJsZS9EaXNhYmxlIHRoZSBEU1AgcGVyaXBoZXJhbCBjbG9ja3MgYXMgbmVlZGVkLi4KKyAqLworaW50IGRzcF9wZXJpcGhlcmFsX2Nsa19jdHJsKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0LAorCQkJCSAgIHZvaWQgKnBhcmdzKQoreworCXUzMiBleHRfY2xrID0gMDsKKwl1MzIgZXh0X2Nsa19pZCA9IDA7CisJdTMyIGV4dF9jbGtfY21kID0gMDsKKwl1MzIgY2xrX2lkX2luZGV4ID0gTUJYX1BNX01BWF9SRVNPVVJDRVM7CisJdTMyIHRtcF9pbmRleDsKKwl1MzIgZHNwX3Blcl9jbGtzX2JlZm9yZTsKKwlpbnQgc3RhdHVzID0gMDsKKworCWRzcF9wZXJfY2xrc19iZWZvcmUgPSBkZXZfY29udGV4dC0+ZHNwX3Blcl9jbGtzOworCisJZXh0X2NsayA9ICh1MzIpICooKHUzMiAqKSBwYXJncyk7CisJZXh0X2Nsa19pZCA9IGV4dF9jbGsgJiBNQlhfUE1fQ0xLX0lETUFTSzsKKworCS8qIHByb2Nlc3MgdGhlIHBvd2VyIG1lc3NhZ2UgLS0gVE9ETywga2VlcCBpdCBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uICovCisJZm9yICh0bXBfaW5kZXggPSAwOyB0bXBfaW5kZXggPCBNQlhfUE1fTUFYX1JFU09VUkNFUzsgdG1wX2luZGV4KyspIHsKKwkJaWYgKGV4dF9jbGtfaWQgPT0gYnB3cl9jbGtpZFt0bXBfaW5kZXhdKSB7CisJCQljbGtfaWRfaW5kZXggPSB0bXBfaW5kZXg7CisJCQlicmVhazsKKwkJfQorCX0KKwkvKiBUT0RPIC0tIEFzc2VydCBtYXkgYmUgYSB0b28gaGFyZCByZXN0cmljdGlvbiBoZXJlLi4gTWF5IGJlIHdlIHNob3VsZAorCSAqIGp1c3QgcmV0dXJuIHdpdGggZmFpbHVyZSB3aGVuIHRoZSBDTEsgSUQgZG9lcyBub3QgbWF0Y2ggKi8KKwkvKiBEQkNfQVNTRVJUKGNsa19pZF9pbmRleCA8IE1CWF9QTV9NQVhfUkVTT1VSQ0VTKTsgKi8KKwlpZiAoY2xrX2lkX2luZGV4ID09IE1CWF9QTV9NQVhfUkVTT1VSQ0VTKSB7CisJCS8qIHJldHVybiB3aXRoIGEgbW9yZSBtZWFuaW5nZnVsbCBlcnJvciBjb2RlICovCisJCXJldHVybiAtRVBFUk07CisJfQorCWV4dF9jbGtfY21kID0gKGV4dF9jbGsgPj4gTUJYX1BNX0NMS19DTURTSElGVCkgJiBNQlhfUE1fQ0xLX0NNRE1BU0s7CisJc3dpdGNoIChleHRfY2xrX2NtZCkgeworCWNhc2UgQlBXUl9ESVNBQkxFX0NMT0NLOgorCQlzdGF0dXMgPSBkc3BfY2xrX2Rpc2FibGUoYnB3cl9jbGtzW2Nsa19pZF9pbmRleF0uY2xrKTsKKwkJZHNwX2Nsa193YWtldXBfZXZlbnRfY3RybChicHdyX2Nsa3NbY2xrX2lkX2luZGV4XS5jbGtfaWQsCisJCQkJCSAgZmFsc2UpOworCQlpZiAoIXN0YXR1cykgeworCQkJKGRldl9jb250ZXh0LT5kc3BfcGVyX2Nsa3MpICY9CisJCQkJKH4oKHUzMikgKDEgPDwgYnB3cl9jbGtzW2Nsa19pZF9pbmRleF0uY2xrKSkpOworCQl9CisJCWJyZWFrOworCWNhc2UgQlBXUl9FTkFCTEVfQ0xPQ0s6CisJCXN0YXR1cyA9IGRzcF9jbGtfZW5hYmxlKGJwd3JfY2xrc1tjbGtfaWRfaW5kZXhdLmNsayk7CisJCWRzcF9jbGtfd2FrZXVwX2V2ZW50X2N0cmwoYnB3cl9jbGtzW2Nsa19pZF9pbmRleF0uY2xrX2lkLCB0cnVlKTsKKwkJaWYgKCFzdGF0dXMpCisJCQkoZGV2X2NvbnRleHQtPmRzcF9wZXJfY2xrcykgfD0KKwkJCQkoMSA8PCBicHdyX2Nsa3NbY2xrX2lkX2luZGV4XS5jbGspOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBVbnN1cHBvcnRlZCBDTURcbiIsIF9fZnVuY19fKTsKKwkJLyogdW5zdXBwb3J0ZWQgY21kICovCisJCS8qIFRPRE8gLS0gcHJvdmlkZSBzdXBwb3J0IGZvciBBVVRPSURMRSBFbmFibGUvRGlzYWJsZQorCQkgKiBjb21tYW5kcyAqLworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09cHJlX3NjYWxlX2RzcD09PT09PT09CisgKiAgU2VuZHMgcHJlc2NhbGUgbm90aWZpY2F0aW9uIHRvIERTUAorICoKKyAqLworaW50IHByZV9zY2FsZV9kc3Aoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQsIHZvaWQgKnBhcmdzKQoreworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9EVkZTCisJdTMyIGxldmVsOworCXUzMiB2b2x0YWdlX2RvbWFpbjsKKworCXZvbHRhZ2VfZG9tYWluID0gKigodTMyICopIHBhcmdzKTsKKwlsZXZlbCA9ICooKHUzMiAqKSBwYXJncyArIDEpOworCisJZGV2X2RiZyhicmlkZ2UsICJPUFA6ICVzIHZvbHRhZ2VfZG9tYWluID0gJXgsIGxldmVsID0gMHgleFxuIiwKKwkJX19mdW5jX18sIHZvbHRhZ2VfZG9tYWluLCBsZXZlbCk7CisJaWYgKChkZXZfY29udGV4dC0+ZHdfYnJkX3N0YXRlID09IEJSRF9ISUJFUk5BVElPTikgfHwKKwkgICAgKGRldl9jb250ZXh0LT5kd19icmRfc3RhdGUgPT0gQlJEX1JFVEVOVElPTikgfHwKKwkgICAgKGRldl9jb250ZXh0LT5kd19icmRfc3RhdGUgPT0gQlJEX0RTUF9ISUJFUk5BVElPTikpIHsKKwkJZGV2X2RiZyhicmlkZ2UsICJPUFA6ICVzIElWQSBpbiBzbGVlcC4gTm8gbWVzc2FnZSB0byBEU1BcbiIpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKChkZXZfY29udGV4dC0+ZHdfYnJkX3N0YXRlID09IEJSRF9SVU5OSU5HKSkgeworCQkvKiBTZW5kIGEgcHJlbm90aWZpY2F0aW8gdG8gRFNQICovCisJCWRldl9kYmcoYnJpZGdlLCAiT1BQOiAlcyBzZW50IG5vdGlmaWNhdGlvbiB0byBEU1BcbiIsIF9fZnVuY19fKTsKKwkJc21faW50ZXJydXB0X2RzcChkZXZfY29udGV4dCwgTUJYX1BNX1NFVFBPSU5UX1BSRU5PVElGWSk7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXJldHVybiAtRVBFUk07CisJfQorI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfRFZGUyAqLworCXJldHVybiAwOworfQorCisvKgorICogID09PT09PT09cG9zdF9zY2FsZV9kc3A9PT09PT09PQorICogIFNlbmRzIHBvc3RzY2FsZSBub3RpZmljYXRpb24gdG8gRFNQCisgKgorICovCitpbnQgcG9zdF9zY2FsZV9kc3Aoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQsCisJCQkJCQkJdm9pZCAqcGFyZ3MpCit7CisJaW50IHN0YXR1cyA9IDA7CisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0RWRlMKKwl1MzIgbGV2ZWw7CisJdTMyIHZvbHRhZ2VfZG9tYWluOworCXN0cnVjdCBpb19tZ3IgKmhpb19tZ3I7CisKKwlzdGF0dXMgPSBkZXZfZ2V0X2lvX21ncihkZXZfY29udGV4dC0+aGRldl9vYmosICZoaW9fbWdyKTsKKwlpZiAoIWhpb19tZ3IpCisJCXJldHVybiAtRUZBVUxUOworCisJdm9sdGFnZV9kb21haW4gPSAqKCh1MzIgKikgcGFyZ3MpOworCWxldmVsID0gKigodTMyICopIHBhcmdzICsgMSk7CisJZGV2X2RiZyhicmlkZ2UsICJPUFA6ICVzIHZvbHRhZ2VfZG9tYWluID0gJXgsIGxldmVsID0gMHgleFxuIiwKKwkJX19mdW5jX18sIHZvbHRhZ2VfZG9tYWluLCBsZXZlbCk7CisJaWYgKChkZXZfY29udGV4dC0+ZHdfYnJkX3N0YXRlID09IEJSRF9ISUJFUk5BVElPTikgfHwKKwkgICAgKGRldl9jb250ZXh0LT5kd19icmRfc3RhdGUgPT0gQlJEX1JFVEVOVElPTikgfHwKKwkgICAgKGRldl9jb250ZXh0LT5kd19icmRfc3RhdGUgPT0gQlJEX0RTUF9ISUJFUk5BVElPTikpIHsKKwkJLyogVXBkYXRlIHRoZSBPUFAgdmFsdWUgaW4gc2hhcmVkIG1lbW9yeSAqLworCQlpb19zaF9tc2V0dGluZyhoaW9fbWdyLCBTSE1fQ1VSUk9QUCwgJmxldmVsKTsKKwkJZGV2X2RiZyhicmlkZ2UsICJPUFA6ICVzIElWQSBpbiBzbGVlcC4gV3JvdGUgdG8gc2htXG4iLAorCQkJX19mdW5jX18pOworCX0gZWxzZSBpZiAoKGRldl9jb250ZXh0LT5kd19icmRfc3RhdGUgPT0gQlJEX1JVTk5JTkcpKSB7CisJCS8qIFVwZGF0ZSB0aGUgT1BQIHZhbHVlIGluIHNoYXJlZCBtZW1vcnkgKi8KKwkJaW9fc2hfbXNldHRpbmcoaGlvX21nciwgU0hNX0NVUlJPUFAsICZsZXZlbCk7CisJCS8qIFNlbmQgYSBwb3N0IG5vdGlmaWNhdGlvbiB0byBEU1AgKi8KKwkJc21faW50ZXJydXB0X2RzcChkZXZfY29udGV4dCwgTUJYX1BNX1NFVFBPSU5UX1BPU1ROT1RJRlkpOworCQlkZXZfZGJnKGJyaWRnZSwgIk9QUDogJXMgd3JvdGUgdG8gc2htLiBTZW50IHBvc3Qgbm90aWZpY2F0aW9uICIKKwkJCSJ0byBEU1BcbiIsIF9fZnVuY19fKTsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRVBFUk07CisJfQorI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfRFZGUyAqLworCXJldHVybiBzdGF0dXM7Cit9CisKK3ZvaWQgZHNwX2Nsa193YWtldXBfZXZlbnRfY3RybCh1MzIgY2xvY2tfaWQsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBjZmdfaG9zdHJlcyAqcmVzb3VyY2VzOworCWludCBzdGF0dXMgPSAwOworCXUzMiBpdmEyX2dycHNlbDsKKwl1MzIgbXB1X2dycHNlbDsKKwlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmplY3QgPSBOVUxMOworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmJyaWRnZV9jb250ZXh0ID0gTlVMTDsKKworCWhkZXZfb2JqZWN0ID0gKHN0cnVjdCBkZXZfb2JqZWN0ICopZHJ2X2dldF9maXJzdF9kZXZfb2JqZWN0KCk7CisJaWYgKCFoZGV2X29iamVjdCkKKwkJcmV0dXJuOworCisJc3RhdHVzID0gZGV2X2dldF9icmlkZ2VfY29udGV4dChoZGV2X29iamVjdCwgJmJyaWRnZV9jb250ZXh0KTsKKwlpZiAoIWJyaWRnZV9jb250ZXh0KQorCQlyZXR1cm47CisKKwlyZXNvdXJjZXMgPSBicmlkZ2VfY29udGV4dC0+cmVzb3VyY2VzOworCWlmICghcmVzb3VyY2VzKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGNsb2NrX2lkKSB7CisJY2FzZSBCUFdSX0dQX1RJTUVSNToKKwkJaXZhMl9ncnBzZWwgPSByZWFkbChyZXNvdXJjZXMtPmR3X3Blcl9wbV9iYXNlICsgMHhBOCk7CisJCW1wdV9ncnBzZWwgPSByZWFkbChyZXNvdXJjZXMtPmR3X3Blcl9wbV9iYXNlICsgMHhBNCk7CisJCWlmIChlbmFibGUpIHsKKwkJCWl2YTJfZ3Jwc2VsIHw9IE9NQVAzNDMwX0dSUFNFTF9HUFQ1X01BU0s7CisJCQltcHVfZ3Jwc2VsICY9IH5PTUFQMzQzMF9HUlBTRUxfR1BUNV9NQVNLOworCQl9IGVsc2UgeworCQkJbXB1X2dycHNlbCB8PSBPTUFQMzQzMF9HUlBTRUxfR1BUNV9NQVNLOworCQkJaXZhMl9ncnBzZWwgJj0gfk9NQVAzNDMwX0dSUFNFTF9HUFQ1X01BU0s7CisJCX0KKwkJd3JpdGVsKGl2YTJfZ3Jwc2VsLCByZXNvdXJjZXMtPmR3X3Blcl9wbV9iYXNlICsgMHhBOCk7CisJCXdyaXRlbChtcHVfZ3Jwc2VsLCByZXNvdXJjZXMtPmR3X3Blcl9wbV9iYXNlICsgMHhBNCk7CisJCWJyZWFrOworCWNhc2UgQlBXUl9HUF9USU1FUjY6CisJCWl2YTJfZ3Jwc2VsID0gcmVhZGwocmVzb3VyY2VzLT5kd19wZXJfcG1fYmFzZSArIDB4QTgpOworCQltcHVfZ3Jwc2VsID0gcmVhZGwocmVzb3VyY2VzLT5kd19wZXJfcG1fYmFzZSArIDB4QTQpOworCQlpZiAoZW5hYmxlKSB7CisJCQlpdmEyX2dycHNlbCB8PSBPTUFQMzQzMF9HUlBTRUxfR1BUNl9NQVNLOworCQkJbXB1X2dycHNlbCAmPSB+T01BUDM0MzBfR1JQU0VMX0dQVDZfTUFTSzsKKwkJfSBlbHNlIHsKKwkJCW1wdV9ncnBzZWwgfD0gT01BUDM0MzBfR1JQU0VMX0dQVDZfTUFTSzsKKwkJCWl2YTJfZ3Jwc2VsICY9IH5PTUFQMzQzMF9HUlBTRUxfR1BUNl9NQVNLOworCQl9CisJCXdyaXRlbChpdmEyX2dycHNlbCwgcmVzb3VyY2VzLT5kd19wZXJfcG1fYmFzZSArIDB4QTgpOworCQl3cml0ZWwobXB1X2dycHNlbCwgcmVzb3VyY2VzLT5kd19wZXJfcG1fYmFzZSArIDB4QTQpOworCQlicmVhazsKKwljYXNlIEJQV1JfR1BfVElNRVI3OgorCQlpdmEyX2dycHNlbCA9IHJlYWRsKHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE4KTsKKwkJbXB1X2dycHNlbCA9IHJlYWRsKHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE0KTsKKwkJaWYgKGVuYWJsZSkgeworCQkJaXZhMl9ncnBzZWwgfD0gT01BUDM0MzBfR1JQU0VMX0dQVDdfTUFTSzsKKwkJCW1wdV9ncnBzZWwgJj0gfk9NQVAzNDMwX0dSUFNFTF9HUFQ3X01BU0s7CisJCX0gZWxzZSB7CisJCQltcHVfZ3Jwc2VsIHw9IE9NQVAzNDMwX0dSUFNFTF9HUFQ3X01BU0s7CisJCQlpdmEyX2dycHNlbCAmPSB+T01BUDM0MzBfR1JQU0VMX0dQVDdfTUFTSzsKKwkJfQorCQl3cml0ZWwoaXZhMl9ncnBzZWwsIHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE4KTsKKwkJd3JpdGVsKG1wdV9ncnBzZWwsIHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE0KTsKKwkJYnJlYWs7CisJY2FzZSBCUFdSX0dQX1RJTUVSODoKKwkJaXZhMl9ncnBzZWwgPSByZWFkbChyZXNvdXJjZXMtPmR3X3Blcl9wbV9iYXNlICsgMHhBOCk7CisJCW1wdV9ncnBzZWwgPSByZWFkbChyZXNvdXJjZXMtPmR3X3Blcl9wbV9iYXNlICsgMHhBNCk7CisJCWlmIChlbmFibGUpIHsKKwkJCWl2YTJfZ3Jwc2VsIHw9IE9NQVAzNDMwX0dSUFNFTF9HUFQ4X01BU0s7CisJCQltcHVfZ3Jwc2VsICY9IH5PTUFQMzQzMF9HUlBTRUxfR1BUOF9NQVNLOworCQl9IGVsc2UgeworCQkJbXB1X2dycHNlbCB8PSBPTUFQMzQzMF9HUlBTRUxfR1BUOF9NQVNLOworCQkJaXZhMl9ncnBzZWwgJj0gfk9NQVAzNDMwX0dSUFNFTF9HUFQ4X01BU0s7CisJCX0KKwkJd3JpdGVsKGl2YTJfZ3Jwc2VsLCByZXNvdXJjZXMtPmR3X3Blcl9wbV9iYXNlICsgMHhBOCk7CisJCXdyaXRlbChtcHVfZ3Jwc2VsLCByZXNvdXJjZXMtPmR3X3Blcl9wbV9iYXNlICsgMHhBNCk7CisJCWJyZWFrOworCWNhc2UgQlBXUl9NQ0JTUDE6CisJCWl2YTJfZ3Jwc2VsID0gcmVhZGwocmVzb3VyY2VzLT5kd19jb3JlX3BtX2Jhc2UgKyAweEE4KTsKKwkJbXB1X2dycHNlbCA9IHJlYWRsKHJlc291cmNlcy0+ZHdfY29yZV9wbV9iYXNlICsgMHhBNCk7CisJCWlmIChlbmFibGUpIHsKKwkJCWl2YTJfZ3Jwc2VsIHw9IE9NQVAzNDMwX0dSUFNFTF9NQ0JTUDFfTUFTSzsKKwkJCW1wdV9ncnBzZWwgJj0gfk9NQVAzNDMwX0dSUFNFTF9NQ0JTUDFfTUFTSzsKKwkJfSBlbHNlIHsKKwkJCW1wdV9ncnBzZWwgfD0gT01BUDM0MzBfR1JQU0VMX01DQlNQMV9NQVNLOworCQkJaXZhMl9ncnBzZWwgJj0gfk9NQVAzNDMwX0dSUFNFTF9NQ0JTUDFfTUFTSzsKKwkJfQorCQl3cml0ZWwoaXZhMl9ncnBzZWwsIHJlc291cmNlcy0+ZHdfY29yZV9wbV9iYXNlICsgMHhBOCk7CisJCXdyaXRlbChtcHVfZ3Jwc2VsLCByZXNvdXJjZXMtPmR3X2NvcmVfcG1fYmFzZSArIDB4QTQpOworCQlicmVhazsKKwljYXNlIEJQV1JfTUNCU1AyOgorCQlpdmEyX2dycHNlbCA9IHJlYWRsKHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE4KTsKKwkJbXB1X2dycHNlbCA9IHJlYWRsKHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE0KTsKKwkJaWYgKGVuYWJsZSkgeworCQkJaXZhMl9ncnBzZWwgfD0gT01BUDM0MzBfR1JQU0VMX01DQlNQMl9NQVNLOworCQkJbXB1X2dycHNlbCAmPSB+T01BUDM0MzBfR1JQU0VMX01DQlNQMl9NQVNLOworCQl9IGVsc2UgeworCQkJbXB1X2dycHNlbCB8PSBPTUFQMzQzMF9HUlBTRUxfTUNCU1AyX01BU0s7CisJCQlpdmEyX2dycHNlbCAmPSB+T01BUDM0MzBfR1JQU0VMX01DQlNQMl9NQVNLOworCQl9CisJCXdyaXRlbChpdmEyX2dycHNlbCwgcmVzb3VyY2VzLT5kd19wZXJfcG1fYmFzZSArIDB4QTgpOworCQl3cml0ZWwobXB1X2dycHNlbCwgcmVzb3VyY2VzLT5kd19wZXJfcG1fYmFzZSArIDB4QTQpOworCQlicmVhazsKKwljYXNlIEJQV1JfTUNCU1AzOgorCQlpdmEyX2dycHNlbCA9IHJlYWRsKHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE4KTsKKwkJbXB1X2dycHNlbCA9IHJlYWRsKHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE0KTsKKwkJaWYgKGVuYWJsZSkgeworCQkJaXZhMl9ncnBzZWwgfD0gT01BUDM0MzBfR1JQU0VMX01DQlNQM19NQVNLOworCQkJbXB1X2dycHNlbCAmPSB+T01BUDM0MzBfR1JQU0VMX01DQlNQM19NQVNLOworCQl9IGVsc2UgeworCQkJbXB1X2dycHNlbCB8PSBPTUFQMzQzMF9HUlBTRUxfTUNCU1AzX01BU0s7CisJCQlpdmEyX2dycHNlbCAmPSB+T01BUDM0MzBfR1JQU0VMX01DQlNQM19NQVNLOworCQl9CisJCXdyaXRlbChpdmEyX2dycHNlbCwgcmVzb3VyY2VzLT5kd19wZXJfcG1fYmFzZSArIDB4QTgpOworCQl3cml0ZWwobXB1X2dycHNlbCwgcmVzb3VyY2VzLT5kd19wZXJfcG1fYmFzZSArIDB4QTQpOworCQlicmVhazsKKwljYXNlIEJQV1JfTUNCU1A0OgorCQlpdmEyX2dycHNlbCA9IHJlYWRsKHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE4KTsKKwkJbXB1X2dycHNlbCA9IHJlYWRsKHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE0KTsKKwkJaWYgKGVuYWJsZSkgeworCQkJaXZhMl9ncnBzZWwgfD0gT01BUDM0MzBfR1JQU0VMX01DQlNQNF9NQVNLOworCQkJbXB1X2dycHNlbCAmPSB+T01BUDM0MzBfR1JQU0VMX01DQlNQNF9NQVNLOworCQl9IGVsc2UgeworCQkJbXB1X2dycHNlbCB8PSBPTUFQMzQzMF9HUlBTRUxfTUNCU1A0X01BU0s7CisJCQlpdmEyX2dycHNlbCAmPSB+T01BUDM0MzBfR1JQU0VMX01DQlNQNF9NQVNLOworCQl9CisJCXdyaXRlbChpdmEyX2dycHNlbCwgcmVzb3VyY2VzLT5kd19wZXJfcG1fYmFzZSArIDB4QTgpOworCQl3cml0ZWwobXB1X2dycHNlbCwgcmVzb3VyY2VzLT5kd19wZXJfcG1fYmFzZSArIDB4QTQpOworCQlicmVhazsKKwljYXNlIEJQV1JfTUNCU1A1OgorCQlpdmEyX2dycHNlbCA9IHJlYWRsKHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE4KTsKKwkJbXB1X2dycHNlbCA9IHJlYWRsKHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE0KTsKKwkJaWYgKGVuYWJsZSkgeworCQkJaXZhMl9ncnBzZWwgfD0gT01BUDM0MzBfR1JQU0VMX01DQlNQNV9NQVNLOworCQkJbXB1X2dycHNlbCAmPSB+T01BUDM0MzBfR1JQU0VMX01DQlNQNV9NQVNLOworCQl9IGVsc2UgeworCQkJbXB1X2dycHNlbCB8PSBPTUFQMzQzMF9HUlBTRUxfTUNCU1A1X01BU0s7CisJCQlpdmEyX2dycHNlbCAmPSB+T01BUDM0MzBfR1JQU0VMX01DQlNQNV9NQVNLOworCQl9CisJCXdyaXRlbChpdmEyX2dycHNlbCwgcmVzb3VyY2VzLT5kd19wZXJfcG1fYmFzZSArIDB4QTgpOworCQl3cml0ZWwobXB1X2dycHNlbCwgcmVzb3VyY2VzLT5kd19wZXJfcG1fYmFzZSArIDB4QTQpOworCQlicmVhazsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS90aW9tYXBfaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL3Rpb21hcF9pby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MGMwMjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS90aW9tYXBfaW8uYwpAQCAtMCwwICsxLDQ1NSBAQAorLyoKKyAqIHRpb21hcF9pby5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIEltcGxlbWVudGF0aW9uIGZvciB0aGUgaW8gcmVhZC93cml0ZSByb3V0aW5lcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRFNQL0JJT1MgQnJpZGdlICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHJhY2UgJiBEZWJ1ZyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBsYXRmb3JtIE1hbmFnZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2Lmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rydi5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1MgQWRhcHRhdGlvbiBMYXllciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9jZmcuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvd2R0Lmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzcGVjaWZpYyB0byB0aGlzIGZpbGUgKi8KKyNpbmNsdWRlICJfdGlvbWFwLmgiCisjaW5jbHVkZSAiX3Rpb21hcF9wd3IuaCIKKyNpbmNsdWRlICJ0aW9tYXBfaW8uaCIKKworc3RhdGljIHUzMiB1bF9leHRfYmFzZTsKK3N0YXRpYyB1MzIgdWxfZXh0X2VuZDsKKworc3RhdGljIHUzMiBzaG0wX2VuZDsKK3N0YXRpYyB1MzIgdWxfZHluX2V4dF9iYXNlOworc3RhdGljIHUzMiB1bF90cmFjZV9zZWNfYmVnOworc3RhdGljIHUzMiB1bF90cmFjZV9zZWNfZW5kOworc3RhdGljIHUzMiB1bF9zaG1fYmFzZV92aXJ0OworCitib29sIHN5bWJvbHNfcmVsb2FkZWQgPSB0cnVlOworCisvKgorICogID09PT09PT09IHJlYWRfZXh0X2RzcF9kYXRhID09PT09PT09CisgKiAgICAgIENvcGllcyBEU1AgZXh0ZXJuYWwgbWVtb3J5IGJ1ZmZlcnMgdG8gdGhlIGhvc3Qgc2lkZSBidWZmZXJzLgorICovCitpbnQgcmVhZF9leHRfZHNwX2RhdGEoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQsCisJCQkgICAgIHU4ICpob3N0X2J1ZmYsIHUzMiBkc3BfYWRkciwKKwkJCSAgICAgdTMyIHVsX251bV9ieXRlcywgdTMyIG1lbV90eXBlKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0ID0gZGV2X2N0eHQ7CisJdTMyIG9mZnNldDsKKwl1MzIgdWxfdGxiX2Jhc2VfdmlydCA9IDA7CisJdTMyIHVsX3NobV9vZmZzZXRfdmlydCA9IDA7CisJdTMyIGR3X2V4dF9wcm9nX3ZpcnRfbWVtOworCXUzMiBkd19iYXNlX2FkZHIgPSBkZXZfY29udGV4dC0+ZHdfZHNwX2V4dF9iYXNlX2FkZHI7CisJYm9vbCB0cmFjZV9yZWFkID0gZmFsc2U7CisKKwlpZiAoIXVsX3NobV9iYXNlX3ZpcnQpIHsKKwkJc3RhdHVzID0gZGV2X2dldF9zeW1ib2woZGV2X2NvbnRleHQtPmhkZXZfb2JqLAorCQkJCQlTSE1CQVNFTkFNRSwgJnVsX3NobV9iYXNlX3ZpcnQpOworCX0KKwlEQkNfQVNTRVJUKHVsX3NobV9iYXNlX3ZpcnQgIT0gMCk7CisKKwkvKiBDaGVjayBpZiBpdCBpcyBhIHJlYWQgb2YgVHJhY2Ugc2VjdGlvbiAqLworCWlmICghc3RhdHVzICYmICF1bF90cmFjZV9zZWNfYmVnKSB7CisJCXN0YXR1cyA9IGRldl9nZXRfc3ltYm9sKGRldl9jb250ZXh0LT5oZGV2X29iaiwKKwkJCQkJRFNQX1RSQUNFU0VDX0JFRywgJnVsX3RyYWNlX3NlY19iZWcpOworCX0KKwlEQkNfQVNTRVJUKHVsX3RyYWNlX3NlY19iZWcgIT0gMCk7CisKKwlpZiAoIXN0YXR1cyAmJiAhdWxfdHJhY2Vfc2VjX2VuZCkgeworCQlzdGF0dXMgPSBkZXZfZ2V0X3N5bWJvbChkZXZfY29udGV4dC0+aGRldl9vYmosCisJCQkJCURTUF9UUkFDRVNFQ19FTkQsICZ1bF90cmFjZV9zZWNfZW5kKTsKKwl9CisJREJDX0FTU0VSVCh1bF90cmFjZV9zZWNfZW5kICE9IDApOworCisJaWYgKCFzdGF0dXMpIHsKKwkJaWYgKChkc3BfYWRkciA8PSB1bF90cmFjZV9zZWNfZW5kKSAmJgorCQkgICAgKGRzcF9hZGRyID49IHVsX3RyYWNlX3NlY19iZWcpKQorCQkJdHJhY2VfcmVhZCA9IHRydWU7CisJfQorCisJLyogSWYgcmVhZGluZyBmcm9tIFRSQUNFLCBmb3JjZSByZW1hcC91bm1hcCAqLworCWlmICh0cmFjZV9yZWFkICYmIGR3X2Jhc2VfYWRkcikgeworCQlkd19iYXNlX2FkZHIgPSAwOworCQlkZXZfY29udGV4dC0+ZHdfZHNwX2V4dF9iYXNlX2FkZHIgPSAwOworCX0KKworCWlmICghZHdfYmFzZV9hZGRyKSB7CisJCS8qIEluaXRpYWxpemUgdWxfZXh0X2Jhc2UgYW5kIHVsX2V4dF9lbmQgKi8KKwkJdWxfZXh0X2Jhc2UgPSAwOworCQl1bF9leHRfZW5kID0gMDsKKworCQkvKiBHZXQgRFlORVhUX0JFRywgRVhUX0JFRyBhbmQgRVhUX0VORC4gKi8KKwkJaWYgKCFzdGF0dXMgJiYgIXVsX2R5bl9leHRfYmFzZSkgeworCQkJc3RhdHVzID0gZGV2X2dldF9zeW1ib2woZGV2X2NvbnRleHQtPmhkZXZfb2JqLAorCQkJCQkJRFlORVhUQkFTRSwgJnVsX2R5bl9leHRfYmFzZSk7CisJCX0KKwkJREJDX0FTU0VSVCh1bF9keW5fZXh0X2Jhc2UgIT0gMCk7CisKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCXN0YXR1cyA9IGRldl9nZXRfc3ltYm9sKGRldl9jb250ZXh0LT5oZGV2X29iaiwKKwkJCQkJCUVYVEJBU0UsICZ1bF9leHRfYmFzZSk7CisJCX0KKwkJREJDX0FTU0VSVCh1bF9leHRfYmFzZSAhPSAwKTsKKworCQlpZiAoIXN0YXR1cykgeworCQkJc3RhdHVzID0gZGV2X2dldF9zeW1ib2woZGV2X2NvbnRleHQtPmhkZXZfb2JqLAorCQkJCQkJRVhURU5ELCAmdWxfZXh0X2VuZCk7CisJCX0KKwkJREJDX0FTU0VSVCh1bF9leHRfZW5kICE9IDApOworCisJCS8qIFRyYWNlIGJ1ZmZlciBpcyByaWdodCBhZnRlciB0aGUgc2htIFNFRzAsCisJCSAqICBzbyBzZXQgdGhlIGJhc2UgYWRkcmVzcyB0byBTSE1CQVNFICovCisJCWlmICh0cmFjZV9yZWFkKSB7CisJCQl1bF9leHRfYmFzZSA9IHVsX3NobV9iYXNlX3ZpcnQ7CisJCQl1bF9leHRfZW5kID0gdWxfdHJhY2Vfc2VjX2VuZDsKKwkJfQorCisJCURCQ19BU1NFUlQodWxfZXh0X2VuZCAhPSAwKTsKKwkJREJDX0FTU0VSVCh1bF9leHRfZW5kID4gdWxfZXh0X2Jhc2UpOworCisJCWlmICh1bF9leHRfZW5kIDwgdWxfZXh0X2Jhc2UpCisJCQlzdGF0dXMgPSAtRVBFUk07CisKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCXVsX3RsYl9iYXNlX3ZpcnQgPQorCQkJICAgIGRldl9jb250ZXh0LT5hdGxiX2VudHJ5WzBdLnVsX2RzcF92YSAqIERTUFdPUkRTSVpFOworCQkJREJDX0FTU0VSVCh1bF90bGJfYmFzZV92aXJ0IDw9IHVsX3NobV9iYXNlX3ZpcnQpOworCQkJZHdfZXh0X3Byb2dfdmlydF9tZW0gPQorCQkJICAgIGRldl9jb250ZXh0LT5hdGxiX2VudHJ5WzBdLnVsX2dwcF92YTsKKworCQkJaWYgKCF0cmFjZV9yZWFkKSB7CisJCQkJdWxfc2htX29mZnNldF92aXJ0ID0KKwkJCQkgICAgdWxfc2htX2Jhc2VfdmlydCAtIHVsX3RsYl9iYXNlX3ZpcnQ7CisJCQkJdWxfc2htX29mZnNldF92aXJ0ICs9CisJCQkJICAgIFBHX0FMSUdOX0hJR0godWxfZXh0X2VuZCAtIHVsX2R5bl9leHRfYmFzZSArCisJCQkJCQkgIDEsIEhXX1BBR0VfU0laRTY0S0IpOworCQkJCWR3X2V4dF9wcm9nX3ZpcnRfbWVtIC09IHVsX3NobV9vZmZzZXRfdmlydDsKKwkJCQlkd19leHRfcHJvZ192aXJ0X21lbSArPQorCQkJCSAgICAodWxfZXh0X2Jhc2UgLSB1bF9keW5fZXh0X2Jhc2UpOworCQkJCWRldl9jb250ZXh0LT5kd19kc3BfZXh0X2Jhc2VfYWRkciA9CisJCQkJICAgIGR3X2V4dF9wcm9nX3ZpcnRfbWVtOworCisJCQkJLyoKKwkJCQkgKiBUaGlzIGR3X2RzcF9leHRfYmFzZV9hZGRyIHdpbGwgZ2V0IGNsZWFyZWQKKwkJCQkgKiBvbmx5IHdoZW4gdGhlIGJvYXJkIGlzIHN0b3BwZWQuCisJCQkJKi8KKwkJCQlpZiAoIWRldl9jb250ZXh0LT5kd19kc3BfZXh0X2Jhc2VfYWRkcikKKwkJCQkJc3RhdHVzID0gLUVQRVJNOworCQkJfQorCisJCQlkd19iYXNlX2FkZHIgPSBkd19leHRfcHJvZ192aXJ0X21lbTsKKwkJfQorCX0KKworCWlmICghZHdfYmFzZV9hZGRyIHx8ICF1bF9leHRfYmFzZSB8fCAhdWxfZXh0X2VuZCkKKwkJc3RhdHVzID0gLUVQRVJNOworCisJb2Zmc2V0ID0gZHNwX2FkZHIgLSB1bF9leHRfYmFzZTsKKworCWlmICghc3RhdHVzKQorCQltZW1jcHkoaG9zdF9idWZmLCAodTggKikgZHdfYmFzZV9hZGRyICsgb2Zmc2V0LCB1bF9udW1fYnl0ZXMpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSB3cml0ZV9kc3BfZGF0YSA9PT09PT09PQorICogIHB1cnBvc2U6CisgKiAgICAgIENvcGllcyBidWZmZXJzIHRvIHRoZSBEU1AgaW50ZXJuYWwvZXh0ZXJuYWwgbWVtb3J5LgorICovCitpbnQgd3JpdGVfZHNwX2RhdGEoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQsCisJCQkgIHU4ICpob3N0X2J1ZmYsIHUzMiBkc3BfYWRkciwgdTMyIHVsX251bV9ieXRlcywKKwkJCSAgdTMyIG1lbV90eXBlKQoreworCXUzMiBvZmZzZXQ7CisJdTMyIGR3X2Jhc2VfYWRkciA9IGRldl9jb250ZXh0LT5kd19kc3BfYmFzZV9hZGRyOworCXN0cnVjdCBjZmdfaG9zdHJlcyAqcmVzb3VyY2VzID0gZGV2X2NvbnRleHQtPnJlc291cmNlczsKKwlpbnQgc3RhdHVzID0gMDsKKwl1MzIgYmFzZTEsIGJhc2UyLCBiYXNlMzsKKwliYXNlMSA9IE9NQVBfRFNQX01FTTFfU0laRTsKKwliYXNlMiA9IE9NQVBfRFNQX01FTTJfQkFTRSAtIE9NQVBfRFNQX01FTTFfQkFTRTsKKwliYXNlMyA9IE9NQVBfRFNQX01FTTNfQkFTRSAtIE9NQVBfRFNQX01FTTFfQkFTRTsKKworCWlmICghcmVzb3VyY2VzKQorCQlyZXR1cm4gLUVQRVJNOworCisJb2Zmc2V0ID0gZHNwX2FkZHIgLSBkZXZfY29udGV4dC0+ZHdfZHNwX3N0YXJ0X2FkZDsKKwlpZiAob2Zmc2V0IDwgYmFzZTEpIHsKKwkJZHdfYmFzZV9hZGRyID0gTUVNX0xJTkVBUl9BRERSRVNTKHJlc291cmNlcy0+ZHdfbWVtX2Jhc2VbMl0sCisJCQkJCQkgIHJlc291cmNlcy0+ZHdfbWVtX2xlbmd0aFsyXSk7CisJfSBlbHNlIGlmIChvZmZzZXQgPiBiYXNlMSAmJiBvZmZzZXQgPCBiYXNlMiArIE9NQVBfRFNQX01FTTJfU0laRSkgeworCQlkd19iYXNlX2FkZHIgPSBNRU1fTElORUFSX0FERFJFU1MocmVzb3VyY2VzLT5kd19tZW1fYmFzZVszXSwKKwkJCQkJCSAgcmVzb3VyY2VzLT5kd19tZW1fbGVuZ3RoWzNdKTsKKwkJb2Zmc2V0ID0gb2Zmc2V0IC0gYmFzZTI7CisJfSBlbHNlIGlmIChvZmZzZXQgPj0gYmFzZTIgKyBPTUFQX0RTUF9NRU0yX1NJWkUgJiYKKwkJICAgb2Zmc2V0IDwgYmFzZTMgKyBPTUFQX0RTUF9NRU0zX1NJWkUpIHsKKwkJZHdfYmFzZV9hZGRyID0gTUVNX0xJTkVBUl9BRERSRVNTKHJlc291cmNlcy0+ZHdfbWVtX2Jhc2VbNF0sCisJCQkJCQkgIHJlc291cmNlcy0+ZHdfbWVtX2xlbmd0aFs0XSk7CisJCW9mZnNldCA9IG9mZnNldCAtIGJhc2UzOworCX0gZWxzZSB7CisJCXJldHVybiAtRVBFUk07CisJfQorCWlmICh1bF9udW1fYnl0ZXMpCisJCW1lbWNweSgodTggKikgKGR3X2Jhc2VfYWRkciArIG9mZnNldCksIGhvc3RfYnVmZiwgdWxfbnVtX2J5dGVzKTsKKwllbHNlCisJCSooKHUzMiAqKSBob3N0X2J1ZmYpID0gZHdfYmFzZV9hZGRyICsgb2Zmc2V0OworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSB3cml0ZV9leHRfZHNwX2RhdGEgPT09PT09PT0KKyAqICBwdXJwb3NlOgorICogICAgICBDb3BpZXMgYnVmZmVycyB0byB0aGUgZXh0ZXJuYWwgbWVtb3J5LgorICoKKyAqLworaW50IHdyaXRlX2V4dF9kc3BfZGF0YShzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCwKKwkJCSAgICAgIHU4ICpob3N0X2J1ZmYsIHUzMiBkc3BfYWRkciwKKwkJCSAgICAgIHUzMiB1bF9udW1fYnl0ZXMsIHUzMiBtZW1fdHlwZSwKKwkJCSAgICAgIGJvb2wgZHluYW1pY19sb2FkKQoreworCXUzMiBkd19iYXNlX2FkZHIgPSBkZXZfY29udGV4dC0+ZHdfZHNwX2V4dF9iYXNlX2FkZHI7CisJdTMyIGR3X29mZnNldCA9IDA7CisJdTggdGVtcF9ieXRlMSwgdGVtcF9ieXRlMjsKKwl1OCByZW1haW5fYnl0ZVs0XTsKKwlzMzIgaTsKKwlpbnQgcmV0ID0gMDsKKwl1MzIgZHdfZXh0X3Byb2dfdmlydF9tZW07CisJdTMyIHVsX3RsYl9iYXNlX3ZpcnQgPSAwOworCXUzMiB1bF9zaG1fb2Zmc2V0X3ZpcnQgPSAwOworCXN0cnVjdCBjZmdfaG9zdHJlcyAqaG9zdF9yZXMgPSBkZXZfY29udGV4dC0+cmVzb3VyY2VzOworCWJvb2wgdHJhY2VfbG9hZCA9IGZhbHNlOworCXRlbXBfYnl0ZTEgPSAweDA7CisJdGVtcF9ieXRlMiA9IDB4MDsKKworCWlmIChzeW1ib2xzX3JlbG9hZGVkKSB7CisJCS8qIENoZWNrIGlmIGl0IGlzIGEgbG9hZCB0byBUcmFjZSBzZWN0aW9uICovCisJCXJldCA9IGRldl9nZXRfc3ltYm9sKGRldl9jb250ZXh0LT5oZGV2X29iaiwKKwkJCQkgICAgIERTUF9UUkFDRVNFQ19CRUcsICZ1bF90cmFjZV9zZWNfYmVnKTsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSBkZXZfZ2V0X3N5bWJvbChkZXZfY29udGV4dC0+aGRldl9vYmosCisJCQkJCSAgICAgRFNQX1RSQUNFU0VDX0VORCwKKwkJCQkJICAgICAmdWxfdHJhY2Vfc2VjX2VuZCk7CisJfQorCWlmICghcmV0KSB7CisJCWlmICgoZHNwX2FkZHIgPD0gdWxfdHJhY2Vfc2VjX2VuZCkgJiYKKwkJICAgIChkc3BfYWRkciA+PSB1bF90cmFjZV9zZWNfYmVnKSkKKwkJCXRyYWNlX2xvYWQgPSB0cnVlOworCX0KKworCS8qIElmIGR5bmFtaWMsIGZvcmNlIHJlbWFwL3VubWFwICovCisJaWYgKChkeW5hbWljX2xvYWQgfHwgdHJhY2VfbG9hZCkgJiYgZHdfYmFzZV9hZGRyKSB7CisJCWR3X2Jhc2VfYWRkciA9IDA7CisJCU1FTV9VTk1BUF9MSU5FQVJfQUREUkVTUygodm9pZCAqKQorCQkJCQkgZGV2X2NvbnRleHQtPmR3X2RzcF9leHRfYmFzZV9hZGRyKTsKKwkJZGV2X2NvbnRleHQtPmR3X2RzcF9leHRfYmFzZV9hZGRyID0gMHgwOworCX0KKwlpZiAoIWR3X2Jhc2VfYWRkcikgeworCQlpZiAoc3ltYm9sc19yZWxvYWRlZCkKKwkJCS8qIEdldCBTSE1fQkVHICBFWFRfQkVHIGFuZCBFWFRfRU5ELiAqLworCQkJcmV0ID0gZGV2X2dldF9zeW1ib2woZGV2X2NvbnRleHQtPmhkZXZfb2JqLAorCQkJCQkgICAgIFNITUJBU0VOQU1FLCAmdWxfc2htX2Jhc2VfdmlydCk7CisJCURCQ19BU1NFUlQodWxfc2htX2Jhc2VfdmlydCAhPSAwKTsKKwkJaWYgKGR5bmFtaWNfbG9hZCkgeworCQkJaWYgKCFyZXQpIHsKKwkJCQlpZiAoc3ltYm9sc19yZWxvYWRlZCkKKwkJCQkJcmV0ID0KKwkJCQkJICAgIGRldl9nZXRfc3ltYm9sCisJCQkJCSAgICAoZGV2X2NvbnRleHQtPmhkZXZfb2JqLCBEWU5FWFRCQVNFLAorCQkJCQkgICAgICZ1bF9leHRfYmFzZSk7CisJCQl9CisJCQlEQkNfQVNTRVJUKHVsX2V4dF9iYXNlICE9IDApOworCQkJaWYgKCFyZXQpIHsKKwkJCQkvKiBEUiAgT01BUFMwMDAxMzIzNSA6IERMTW9kdWxlcyBhcnJheSBtYXkgYmUKKwkJCQkgKiBpbiBFWFRNRU0uIEl0IGlzIGV4cGVjdGVkIHRoYXQgRFlORVhUTUVNIGFuZAorCQkJCSAqIEVYVE1FTSBhcmUgY29udGlndW91cywgc28gY2hlY2tpbmcgZm9yIHRoZQorCQkJCSAqIHVwcGVyIGJvdW5kIGF0IEVYVEVORCBzaG91bGQgYmUgT2suICovCisJCQkJaWYgKHN5bWJvbHNfcmVsb2FkZWQpCisJCQkJCXJldCA9CisJCQkJCSAgICBkZXZfZ2V0X3N5bWJvbAorCQkJCQkgICAgKGRldl9jb250ZXh0LT5oZGV2X29iaiwgRVhURU5ELAorCQkJCQkgICAgICZ1bF9leHRfZW5kKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChzeW1ib2xzX3JlbG9hZGVkKSB7CisJCQkJaWYgKCFyZXQpCisJCQkJCXJldCA9CisJCQkJCSAgICBkZXZfZ2V0X3N5bWJvbAorCQkJCQkgICAgKGRldl9jb250ZXh0LT5oZGV2X29iaiwgRVhUQkFTRSwKKwkJCQkJICAgICAmdWxfZXh0X2Jhc2UpOworCQkJCURCQ19BU1NFUlQodWxfZXh0X2Jhc2UgIT0gMCk7CisJCQkJaWYgKCFyZXQpCisJCQkJCXJldCA9CisJCQkJCSAgICBkZXZfZ2V0X3N5bWJvbAorCQkJCQkgICAgKGRldl9jb250ZXh0LT5oZGV2X29iaiwgRVhURU5ELAorCQkJCQkgICAgICZ1bF9leHRfZW5kKTsKKwkJCX0KKwkJfQorCQkvKiBUcmFjZSBidWZmZXIgaXQgcmlnaHQgYWZ0ZXIgdGhlIHNobSBTRUcwLCBzbyBzZXQgdGhlCisJCSAqICAgICAgYmFzZSBhZGRyZXNzIHRvIFNITUJBU0UgKi8KKwkJaWYgKHRyYWNlX2xvYWQpCisJCQl1bF9leHRfYmFzZSA9IHVsX3NobV9iYXNlX3ZpcnQ7CisKKwkJREJDX0FTU0VSVCh1bF9leHRfZW5kICE9IDApOworCQlEQkNfQVNTRVJUKHVsX2V4dF9lbmQgPiB1bF9leHRfYmFzZSk7CisJCWlmICh1bF9leHRfZW5kIDwgdWxfZXh0X2Jhc2UpCisJCQlyZXQgPSAtRVBFUk07CisKKwkJaWYgKCFyZXQpIHsKKwkJCXVsX3RsYl9iYXNlX3ZpcnQgPQorCQkJICAgIGRldl9jb250ZXh0LT5hdGxiX2VudHJ5WzBdLnVsX2RzcF92YSAqIERTUFdPUkRTSVpFOworCQkJREJDX0FTU0VSVCh1bF90bGJfYmFzZV92aXJ0IDw9IHVsX3NobV9iYXNlX3ZpcnQpOworCisJCQlpZiAoc3ltYm9sc19yZWxvYWRlZCkgeworCQkJCXJldCA9IGRldl9nZXRfc3ltYm9sCisJCQkJCSAgICAoZGV2X2NvbnRleHQtPmhkZXZfb2JqLAorCQkJCQkgICAgIERTUF9UUkFDRVNFQ19FTkQsICZzaG0wX2VuZCk7CisJCQkJaWYgKCFyZXQpIHsKKwkJCQkJcmV0ID0KKwkJCQkJICAgIGRldl9nZXRfc3ltYm9sCisJCQkJCSAgICAoZGV2X2NvbnRleHQtPmhkZXZfb2JqLCBEWU5FWFRCQVNFLAorCQkJCQkgICAgICZ1bF9keW5fZXh0X2Jhc2UpOworCQkJCX0KKwkJCX0KKwkJCXVsX3NobV9vZmZzZXRfdmlydCA9CisJCQkgICAgdWxfc2htX2Jhc2VfdmlydCAtIHVsX3RsYl9iYXNlX3ZpcnQ7CisJCQlpZiAodHJhY2VfbG9hZCkgeworCQkJCWR3X2V4dF9wcm9nX3ZpcnRfbWVtID0KKwkJCQkgICAgZGV2X2NvbnRleHQtPmF0bGJfZW50cnlbMF0udWxfZ3BwX3ZhOworCQkJfSBlbHNlIHsKKwkJCQlkd19leHRfcHJvZ192aXJ0X21lbSA9IGhvc3RfcmVzLT5kd19tZW1fYmFzZVsxXTsKKwkJCQlkd19leHRfcHJvZ192aXJ0X21lbSArPQorCQkJCSAgICAodWxfZXh0X2Jhc2UgLSB1bF9keW5fZXh0X2Jhc2UpOworCQkJfQorCisJCQlkZXZfY29udGV4dC0+ZHdfZHNwX2V4dF9iYXNlX2FkZHIgPQorCQkJICAgICh1MzIpIE1FTV9MSU5FQVJfQUREUkVTUygodm9pZCAqKQorCQkJCQkJICAgICBkd19leHRfcHJvZ192aXJ0X21lbSwKKwkJCQkJCSAgICAgdWxfZXh0X2VuZCAtIHVsX2V4dF9iYXNlKTsKKwkJCWR3X2Jhc2VfYWRkciArPSBkZXZfY29udGV4dC0+ZHdfZHNwX2V4dF9iYXNlX2FkZHI7CisJCQkvKiBUaGlzIGR3X2RzcF9leHRfYmFzZV9hZGRyIHdpbGwgZ2V0IGNsZWFyZWQgb25seSB3aGVuCisJCQkgKiB0aGUgYm9hcmQgaXMgc3RvcHBlZC4gKi8KKwkJCWlmICghZGV2X2NvbnRleHQtPmR3X2RzcF9leHRfYmFzZV9hZGRyKQorCQkJCXJldCA9IC1FUEVSTTsKKwkJfQorCX0KKwlpZiAoIWR3X2Jhc2VfYWRkciB8fCAhdWxfZXh0X2Jhc2UgfHwgIXVsX2V4dF9lbmQpCisJCXJldCA9IC1FUEVSTTsKKworCWlmICghcmV0KSB7CisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCQlyZW1haW5fYnl0ZVtpXSA9IDB4MDsKKworCQlkd19vZmZzZXQgPSBkc3BfYWRkciAtIHVsX2V4dF9iYXNlOworCQkvKiBBbHNvIG1ha2Ugc3VyZSB0aGUgZHNwX2FkZHIgaXMgPCB1bF9leHRfZW5kICovCisJCWlmIChkc3BfYWRkciA+IHVsX2V4dF9lbmQgfHwgZHdfb2Zmc2V0ID4gZHNwX2FkZHIpCisJCQlyZXQgPSAtRVBFUk07CisJfQorCWlmICghcmV0KSB7CisJCWlmICh1bF9udW1fYnl0ZXMpCisJCQltZW1jcHkoKHU4ICopIGR3X2Jhc2VfYWRkciArIGR3X29mZnNldCwgaG9zdF9idWZmLAorCQkJICAgICAgIHVsX251bV9ieXRlcyk7CisJCWVsc2UKKwkJCSooKHUzMiAqKSBob3N0X2J1ZmYpID0gZHdfYmFzZV9hZGRyICsgZHdfb2Zmc2V0OworCX0KKwkvKiBVbm1hcCBoZXJlIHRvIGZvcmNlIHJlbWFwIGZvciBvdGhlciBFeHQgbG9hZHMgKi8KKwlpZiAoKGR5bmFtaWNfbG9hZCB8fCB0cmFjZV9sb2FkKSAmJiBkZXZfY29udGV4dC0+ZHdfZHNwX2V4dF9iYXNlX2FkZHIpIHsKKwkJTUVNX1VOTUFQX0xJTkVBUl9BRERSRVNTKCh2b2lkICopCisJCQkJCSBkZXZfY29udGV4dC0+ZHdfZHNwX2V4dF9iYXNlX2FkZHIpOworCQlkZXZfY29udGV4dC0+ZHdfZHNwX2V4dF9iYXNlX2FkZHIgPSAweDA7CisJfQorCXN5bWJvbHNfcmVsb2FkZWQgPSBmYWxzZTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgc21faW50ZXJydXB0X2RzcChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCwgdTE2IG1iX3ZhbCkKK3sKKyNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfRFZGUworCXUzMiBvcHBsZXZlbCA9IDA7CisjZW5kaWYKKwlzdHJ1Y3QgZHNwYnJpZGdlX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0KKwkJb21hcF9kc3BicmlkZ2VfZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgY2ZnX2hvc3RyZXMgKnJlc291cmNlcyA9IGRldl9jb250ZXh0LT5yZXNvdXJjZXM7CisJaW50IHN0YXR1cyA9IDA7CisJdTMyIHRlbXA7CisKKwlpZiAoIWRldl9jb250ZXh0LT5tYm94KQorCQlyZXR1cm4gMDsKKworCWlmICghcmVzb3VyY2VzKQorCQlyZXR1cm4gLUVQRVJNOworCisJaWYgKGRldl9jb250ZXh0LT5kd19icmRfc3RhdGUgPT0gQlJEX0RTUF9ISUJFUk5BVElPTiB8fAorCSAgICBkZXZfY29udGV4dC0+ZHdfYnJkX3N0YXRlID09IEJSRF9ISUJFUk5BVElPTikgeworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9EVkZTCisJCWlmIChwZGF0YS0+ZHNwX2dldF9vcHApCisJCQlvcHBsZXZlbCA9ICgqcGRhdGEtPmRzcF9nZXRfb3BwKSAoKTsKKwkJaWYgKG9wcGxldmVsID09IFZERDFfT1BQMSkgeworCQkJaWYgKHBkYXRhLT5kc3Bfc2V0X21pbl9vcHApCisJCQkJKCpwZGF0YS0+ZHNwX3NldF9taW5fb3BwKSAoVkREMV9PUFAyKTsKKwkJfQorI2VuZGlmCisJCS8qIFJlc3RhcnQgdGhlIHBlcmlwaGVyYWwgY2xvY2tzICovCisJCWRzcF9jbG9ja19lbmFibGVfYWxsKGRldl9jb250ZXh0LT5kc3BfcGVyX2Nsa3MpOworCQlkc3Bfd2R0X2VuYWJsZSh0cnVlKTsKKworCQkvKgorCQkgKiAyOjAgQVVUT19JVkEyX0RQTEwgLSBFbmFibGluZyBJVkEyIERQTEwgYXV0byBjb250cm9sCisJCSAqICAgICBpbiBDTV9BVVRPSURMRV9QTExfSVZBMiByZWdpc3RlcgorCQkgKi8KKwkJKCpwZGF0YS0+ZHNwX2NtX3dyaXRlKSgxIDw8IE9NQVAzNDMwX0FVVE9fSVZBMl9EUExMX1NISUZULAorCQkJCU9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMzQzMF9DTV9BVVRPSURMRV9QTEwpOworCisJCS8qCisJCSAqIDc6NCBJVkEyX0RQTExfRlJFUVNFTCAtIElWQTIgaW50ZXJuYWwgZnJxIHNldCB0bworCQkgKiAgICAgMC43NSBNSHogLSAxLjAgTUh6CisJCSAqIDI6MCBFTl9JVkEyX0RQTEwgLSBFbmFibGUgSVZBMiBEUExMIGluIGxvY2sgbW9kZQorCQkgKi8KKwkJKCpwZGF0YS0+ZHNwX2NtX3Jtd19iaXRzKShPTUFQMzQzMF9JVkEyX0RQTExfRlJFUVNFTF9NQVNLIHwKKwkJCQlPTUFQMzQzMF9FTl9JVkEyX0RQTExfTUFTSywKKwkJCQkweDMgPDwgT01BUDM0MzBfSVZBMl9EUExMX0ZSRVFTRUxfU0hJRlQgfAorCQkJCTB4NyA8PCBPTUFQMzQzMF9FTl9JVkEyX0RQTExfU0hJRlQsCisJCQkJT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAzNDMwX0NNX0NMS0VOX1BMTCk7CisKKwkJLyogUmVzdG9yZSBtYWlsYm94IHNldHRpbmdzICovCisJCW9tYXBfbWJveF9yZXN0b3JlX2N0eChkZXZfY29udGV4dC0+bWJveCk7CisKKwkJLyogQWNjZXNzIE1NVSBTWVMgQ09ORklHIHJlZ2lzdGVyIHRvIGdlbmVyYXRlIGEgc2hvcnQgd2FrZXVwICovCisJCXRlbXAgPSByZWFkbChyZXNvdXJjZXMtPmR3X2RtbXVfYmFzZSArIDB4MTApOworCisJCWRldl9jb250ZXh0LT5kd19icmRfc3RhdGUgPSBCUkRfUlVOTklORzsKKwl9IGVsc2UgaWYgKGRldl9jb250ZXh0LT5kd19icmRfc3RhdGUgPT0gQlJEX1JFVEVOVElPTikgeworCQkvKiBSZXN0YXJ0IHRoZSBwZXJpcGhlcmFsIGNsb2NrcyAqLworCQlkc3BfY2xvY2tfZW5hYmxlX2FsbChkZXZfY29udGV4dC0+ZHNwX3Blcl9jbGtzKTsKKwl9CisKKwlzdGF0dXMgPSBvbWFwX21ib3hfbXNnX3NlbmQoZGV2X2NvbnRleHQtPm1ib3gsIG1iX3ZhbCk7CisKKwlpZiAoc3RhdHVzKSB7CisJCXByX2Vycigib21hcF9tYm94X21zZ19zZW5kIEZhaWwgYW5kIHN0YXR1cyA9ICVkXG4iLCBzdGF0dXMpOworCQlzdGF0dXMgPSAtRVBFUk07CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS90aW9tYXBfaW8uaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL3Rpb21hcF9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZjE5YzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS90aW9tYXBfaW8uaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIHRpb21hcF9pby5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIERlZmluaXRpb25zLCB0eXBlcyBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgdGhlIGlvIChyL3cgZXh0ZXJuYWwgbWVtKS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIF9USU9NQVBfSU9fCisjZGVmaW5lIF9USU9NQVBfSU9fCisKKy8qCisgKiBTeW1ib2wgdGhhdCBkZWZpbmVzIGJlZ2lubmluZyBvZiBzaGFyZWQgbWVtb3J5LgorICogRm9yIE9NQVAgKEhlbGVuKSB0aGlzIGlzIHRoZSBEU1AgVmlydHVhbCBiYXNlIGFkZHJlc3Mgb2YgU0RSQU0uCisgKiBUaGlzIHdpbGwgYmUgdXNlZCB0byBwcm9ncmFtIERTUCBNTVUgdG8gbWFwIERTUCBWaXJ0IHRvIEdQUCBwaHlzLgorICogKHNlZSBkc3BNbXVUbGJFbnRyeSgpKS4KKyAqLworI2RlZmluZSBTSE1CQVNFTkFNRSAiU0hNX0JFRyIKKyNkZWZpbmUgRVhUQkFTRSAgICAgIkVYVF9CRUciCisjZGVmaW5lIEVYVEVORCAgICAgICJfRVhUX0VORCIKKyNkZWZpbmUgRFlORVhUQkFTRSAgIl9EWU5FWFRfQkVHIgorI2RlZmluZSBEWU5FWFRFTkQgICAiX0RZTkVYVF9FTkQiCisjZGVmaW5lIElWQUVYVE1FTUJBU0UgICAiX0lWQUVYVE1FTV9CRUciCisjZGVmaW5lIElWQUVYVE1FTUVORCAgICJfSVZBRVhUTUVNX0VORCIKKworI2RlZmluZSBEU1BfVFJBQ0VTRUNfQkVHICAiX0JSSURHRV9UUkFDRV9CRUciCisjZGVmaW5lIERTUF9UUkFDRVNFQ19FTkQgICJfQlJJREdFX1RSQUNFX0VORCIKKworI2RlZmluZSBTWVNfUFVUQ0JFRyAgICAgICAgICAgICAgICJfU1lTX1BVVENCRUciCisjZGVmaW5lIFNZU19QVVRDRU5EICAgICAgICAgICAgICAgIl9TWVNfUFVUQ0VORCIKKyNkZWZpbmUgQlJJREdFX1NZU19QVVRDX0NVUlJFTlQgICAiX0JSSURHRV9TWVNfUFVUQ19jdXJyZW50IgorCisjZGVmaW5lIFdPUkRTV0FQX0VOQUJMRSAweDMJLyogRW5hYmxlIHdvcmQgc3dhcCAqLworCisvKgorICogID09PT09PT09IHJlYWRfZXh0X2RzcF9kYXRhID09PT09PT09CisgKiAgUmVhZHMgaXQgZnJvbSBEU1AgRXh0ZXJuYWwgbWVtb3J5LiBUaGUgZXh0ZXJuYWwgbWVtb3J5IGZvciB0aGUgRFNQCisgKiBpcyBjb25maWd1cmVkIGJ5IHRoZSBjb21iaW5hdGlvbiBvZiBEU1AgTU1VIGFuZCBzaG0gTWVtb3J5IG1hbmFnZXIgaW4gdGhlIENEQgorICovCitleHRlcm4gaW50IHJlYWRfZXh0X2RzcF9kYXRhKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAorCQkJCSAgICB1OCAqaG9zdF9idWZmLCB1MzIgZHNwX2FkZHIsCisJCQkJICAgIHUzMiB1bF9udW1fYnl0ZXMsIHUzMiBtZW1fdHlwZSk7CisKKy8qCisgKiAgPT09PT09PT0gd3JpdGVfZHNwX2RhdGEgPT09PT09PT0KKyAqLworZXh0ZXJuIGludCB3cml0ZV9kc3BfZGF0YShzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCwKKwkJCQkgdTggKmhvc3RfYnVmZiwgdTMyIGRzcF9hZGRyLAorCQkJCSB1MzIgdWxfbnVtX2J5dGVzLCB1MzIgbWVtX3R5cGUpOworCisvKgorICogID09PT09PT09IHdyaXRlX2V4dF9kc3BfZGF0YSA9PT09PT09PQorICogIFdyaXRlcyB0byB0aGUgRFNQIEV4dGVybmFsIG1lbW9yeSBmb3IgZXh0ZXJuYWwgcHJvZ3JhbS4KKyAqICBUaGUgZXh0IG1lbSBmb3IgcHJvZ3JhIGlzIGNvbmZpZ3VyZWQgYnkgdGhlIGNvbWJpbmF0aW9uIG9mIERTUCBNTVUgYW5kCisgKiAgc2htIE1lbW9yeSBtYW5hZ2VyIGluIHRoZSBDREIKKyAqLworZXh0ZXJuIGludCB3cml0ZV9leHRfZHNwX2RhdGEoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQsCisJCQkJICAgICB1OCAqaG9zdF9idWZmLCB1MzIgZHNwX2FkZHIsCisJCQkJICAgICB1MzIgdWxfbnVtX2J5dGVzLCB1MzIgbWVtX3R5cGUsCisJCQkJICAgICBib29sIGR5bmFtaWNfbG9hZCk7CisKKy8qCisgKiA9PT09PT09PSB3cml0ZV9leHQzMl9iaXRfZHNwX2RhdGEgPT09PT09PT0KKyAqIFdyaXRlcyAzMiBiaXQgZGF0YSB0byB0aGUgZXh0ZXJuYWwgbWVtb3J5CisgKi8KK2V4dGVybiBpbmxpbmUgdm9pZCB3cml0ZV9leHQzMl9iaXRfZHNwX2RhdGEoY29uc3QKKwkJCQkJc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQsCisJCQkJCXUzMiBkc3BfYWRkciwgdTMyIHZhbCkKK3sKKwkqKHUzMiAqKSBkc3BfYWRkciA9ICgoZGV2X2NvbnRleHQtPnRjX3dvcmRfc3dhcF9vbikgPyAoKCh2YWwgPDwgMTYpICYKKwkJCQkJCQkJIDB4RkZGRjAwMDApIHwKKwkJCQkJCQkJKCh2YWwgPj4gMTYpICYKKwkJCQkJCQkJIDB4MDAwMEZGRkYpKSA6CisJCQkgICAgICB2YWwpOworfQorCisvKgorICogPT09PT09PT0gcmVhZF9leHQzMl9iaXRfZHNwX2RhdGEgPT09PT09PT0KKyAqIFJlYWRzIDMyIGJpdCBkYXRhIGZyb20gdGhlIGV4dGVybmFsIG1lbW9yeQorICovCitleHRlcm4gaW5saW5lIHUzMiByZWFkX2V4dDMyX2JpdF9kc3BfZGF0YShjb25zdCBzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0CisJCQkJCSAgKmRldl9jb250ZXh0LCB1MzIgZHNwX2FkZHIpCit7CisJdTMyIHJldDsKKwlyZXQgPSAqKHUzMiAqKSBkc3BfYWRkcjsKKworCXJldCA9ICgoZGV2X2NvbnRleHQtPnRjX3dvcmRfc3dhcF9vbikgPyAoKChyZXQgPDwgMTYpCisJCQkJCQkgICYgMHhGRkZGMDAwMCkgfCAoKHJldCA+PiAxNikgJgorCQkJCQkJCQkgICAweDAwMDBGRkZGKSkKKwkgICAgICAgOiByZXQpOworCXJldHVybiByZXQ7Cit9CisKKyNlbmRpZiAvKiBfVElPTUFQX0lPXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvdWVfZGVoLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS91ZV9kZWguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDMwNDE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvdWVfZGVoLmMKQEAgLTAsMCArMSwyNzMgQEAKKy8qCisgKiB1ZV9kZWguYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBJbXBsZW1lbnRzIHVwcGVyIGVkZ2UgRFNQIGV4Y2VwdGlvbiBoYW5kbGluZyAoREVIKSBmdW5jdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBGZWxpcGUgQ29udHJlcmFzCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxwbGF0L2RtdGltZXIuaD4KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwZGVoLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgorI2luY2x1ZGUgIl90aW9tYXAuaCIKKyNpbmNsdWRlICJfZGVoLmgiCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvaW9fc20uaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHJ2Lmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3dkdC5oPgorCitzdGF0aWMgdTMyIGZhdWx0X2FkZHI7CisKK3N0YXRpYyB2b2lkIG1tdV9mYXVsdF9kcGModW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBkZWhfbWdyICpkZWggPSAodm9pZCAqKWRhdGE7CisKKwlpZiAoIWRlaCkKKwkJcmV0dXJuOworCisJYnJpZGdlX2RlaF9ub3RpZnkoZGVoLCBEU1BfTU1VRkFVTFQsIDApOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbW11X2ZhdWx0X2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkZWhfbWdyICpkZWggPSBkYXRhOworCXN0cnVjdCBjZmdfaG9zdHJlcyAqcmVzb3VyY2VzOworCXUzMiBldmVudDsKKworCWlmICghZGVoKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwlyZXNvdXJjZXMgPSBkZWgtPmhicmlkZ2VfY29udGV4dC0+cmVzb3VyY2VzOworCWlmICghcmVzb3VyY2VzKSB7CisJCWRldl9kYmcoYnJpZGdlLCAiJXM6IEZhaWxlZCB0byBnZXQgSG9zdCBSZXNvdXJjZXNcbiIsCisJCQkJX19mdW5jX18pOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJaHdfbW11X2V2ZW50X3N0YXR1cyhyZXNvdXJjZXMtPmR3X2RtbXVfYmFzZSwgJmV2ZW50KTsKKwlpZiAoZXZlbnQgPT0gSFdfTU1VX1RSQU5TTEFUSU9OX0ZBVUxUKSB7CisJCWh3X21tdV9mYXVsdF9hZGRyX3JlYWQocmVzb3VyY2VzLT5kd19kbW11X2Jhc2UsICZmYXVsdF9hZGRyKTsKKwkJZGV2X2RiZyhicmlkZ2UsICIlczogZXZlbnQ9MHgleCwgZmF1bHRfYWRkcj0weCV4XG4iLCBfX2Z1bmNfXywKKwkJCQlldmVudCwgZmF1bHRfYWRkcik7CisJCS8qCisJCSAqIFNjaGVkdWxlIGEgRFBDIGRpcmVjdGx5LiBJbiB0aGUgZnV0dXJlLCBpdCBtYXkgYmUKKwkJICogbmVjZXNzYXJ5IHRvIGNoZWNrIGlmIERTUCBNTVUgZmF1bHQgaXMgaW50ZW5kZWQgZm9yCisJCSAqIEJyaWRnZS4KKwkJICovCisJCXRhc2tsZXRfc2NoZWR1bGUoJmRlaC0+ZHBjX3Rhc2tsZXQpOworCisJCS8qIERpc2FibGUgdGhlIE1NVSBldmVudHMsIGVsc2Ugb25jZSB3ZSBjbGVhciBpdCB3aWxsCisJCSAqIHN0YXJ0IHRvIHJhaXNlIElOVHMgYWdhaW4gKi8KKwkJaHdfbW11X2V2ZW50X2Rpc2FibGUocmVzb3VyY2VzLT5kd19kbW11X2Jhc2UsCisJCQkJSFdfTU1VX1RSQU5TTEFUSU9OX0ZBVUxUKTsKKwl9IGVsc2UgeworCQlod19tbXVfZXZlbnRfZGlzYWJsZShyZXNvdXJjZXMtPmR3X2RtbXVfYmFzZSwKKwkJCQlIV19NTVVfQUxMX0lOVEVSUlVQVFMpOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK2ludCBicmlkZ2VfZGVoX2NyZWF0ZShzdHJ1Y3QgZGVoX21nciAqKnJldF9kZWgsCisJCXN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaikKK3sKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBkZWhfbWdyICpkZWg7CisJc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqaGJyaWRnZV9jb250ZXh0ID0gTlVMTDsKKworCS8qICBNZXNzYWdlIG1hbmFnZXIgd2lsbCBiZSBjcmVhdGVkIHdoZW4gYSBmaWxlIGlzIGxvYWRlZCwgc2luY2UKKwkgKiAgc2l6ZSBvZiBtZXNzYWdlIGJ1ZmZlciBpbiBzaGFyZWQgbWVtb3J5IGlzIGNvbmZpZ3VyYWJsZSBpbgorCSAqICB0aGUgYmFzZSBpbWFnZS4gKi8KKwkvKiBHZXQgQnJpZGdlIGNvbnRleHQgaW5mby4gKi8KKwlkZXZfZ2V0X2JyaWRnZV9jb250ZXh0KGhkZXZfb2JqLCAmaGJyaWRnZV9jb250ZXh0KTsKKwkvKiBBbGxvY2F0ZSBJTyBtYW5hZ2VyIG9iamVjdDogKi8KKwlkZWggPSBremFsbG9jKHNpemVvZigqZGVoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZWgpIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJLyogQ3JlYXRlIGFuIE5URlkgb2JqZWN0IHRvIG1hbmFnZSBub3RpZmljYXRpb25zICovCisJZGVoLT5udGZ5X29iaiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBudGZ5X29iamVjdCksIEdGUF9LRVJORUwpOworCWlmICghZGVoLT5udGZ5X29iaikgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisJbnRmeV9pbml0KGRlaC0+bnRmeV9vYmopOworCisJLyogQ3JlYXRlIGEgTU1VZmF1bHQgRFBDICovCisJdGFza2xldF9pbml0KCZkZWgtPmRwY190YXNrbGV0LCBtbXVfZmF1bHRfZHBjLCAodTMyKSBkZWgpOworCisJLyogRmlsbCBpbiBjb250ZXh0IHN0cnVjdHVyZSAqLworCWRlaC0+aGJyaWRnZV9jb250ZXh0ID0gaGJyaWRnZV9jb250ZXh0OworCisJLyogSW5zdGFsbCBJU1IgZnVuY3Rpb24gZm9yIERTUCBNTVUgZmF1bHQgKi8KKwlzdGF0dXMgPSByZXF1ZXN0X2lycShJTlRfRFNQX01NVV9JUlEsIG1tdV9mYXVsdF9pc3IsIDAsCisJCQkiRHNwQnJpZGdlXHRpb21tdSBmYXVsdCIsIGRlaCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyOworCisJKnJldF9kZWggPSBkZWg7CisJcmV0dXJuIDA7CisKK2VycjoKKwlicmlkZ2VfZGVoX2Rlc3Ryb3koZGVoKTsKKwkqcmV0X2RlaCA9IE5VTEw7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGJyaWRnZV9kZWhfZGVzdHJveShzdHJ1Y3QgZGVoX21nciAqZGVoKQoreworCWlmICghZGVoKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qIElmIG5vdGlmaWNhdGlvbiBvYmplY3QgZXhpc3RzLCBkZWxldGUgaXQgKi8KKwlpZiAoZGVoLT5udGZ5X29iaikgeworCQludGZ5X2RlbGV0ZShkZWgtPm50Znlfb2JqKTsKKwkJa2ZyZWUoZGVoLT5udGZ5X29iaik7CisJfQorCS8qIERpc2FibGUgRFNQIE1NVSBmYXVsdCAqLworCWZyZWVfaXJxKElOVF9EU1BfTU1VX0lSUSwgZGVoKTsKKworCS8qIEZyZWUgRFBDIG9iamVjdCAqLworCXRhc2tsZXRfa2lsbCgmZGVoLT5kcGNfdGFza2xldCk7CisKKwkvKiBEZWFsbG9jYXRlIHRoZSBERUggbWFuYWdlciBvYmplY3QgKi8KKwlrZnJlZShkZWgpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBicmlkZ2VfZGVoX3JlZ2lzdGVyX25vdGlmeShzdHJ1Y3QgZGVoX21nciAqZGVoLCB1MzIgZXZlbnRfbWFzaywKKwkJdTMyIG5vdGlmeV90eXBlLAorCQlzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbiAqaG5vdGlmaWNhdGlvbikKK3sKKwlpZiAoIWRlaCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoZXZlbnRfbWFzaykKKwkJcmV0dXJuIG50ZnlfcmVnaXN0ZXIoZGVoLT5udGZ5X29iaiwgaG5vdGlmaWNhdGlvbiwKKwkJCQlldmVudF9tYXNrLCBub3RpZnlfdHlwZSk7CisJZWxzZQorCQlyZXR1cm4gbnRmeV91bnJlZ2lzdGVyKGRlaC0+bnRmeV9vYmosIGhub3RpZmljYXRpb24pOworfQorCisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0JBQ0tUUkFDRQorc3RhdGljIHZvaWQgbW11X2ZhdWx0X3ByaW50X3N0YWNrKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0KQoreworCXN0cnVjdCBjZmdfaG9zdHJlcyAqcmVzb3VyY2VzOworCXN0cnVjdCBod19tbXVfbWFwX2F0dHJzX3QgbWFwX2F0dHJzID0geworCQkuZW5kaWFuaXNtID0gSFdfTElUVExFX0VORElBTiwKKwkJLmVsZW1lbnRfc2l6ZSA9IEhXX0VMRU1fU0laRTE2QklULAorCQkubWl4ZWRfc2l6ZSA9IEhXX01NVV9DUFVFUywKKwl9OworCXZvaWQgKmR1bW15X3ZhX2FkZHI7CisKKwlyZXNvdXJjZXMgPSBkZXZfY29udGV4dC0+cmVzb3VyY2VzOworCWR1bW15X3ZhX2FkZHIgPSAodm9pZCopX19nZXRfZnJlZV9wYWdlKEdGUF9BVE9NSUMpOworCisJLyoKKwkgKiBCZWZvcmUgYWNraW5nIHRoZSBNTVUgZmF1bHQsIGxldCdzIG1ha2Ugc3VyZSBNTVUgY2FuIG9ubHkKKwkgKiBhY2Nlc3MgZW50cnkgIzAuIFRoZW4gYWRkIGEgbmV3IGVudHJ5IHNvIHRoYXQgdGhlIERTUCBPUworCSAqIGNhbiBjb250aW51ZSBpbiBvcmRlciB0byBkdW1wIHRoZSBzdGFjay4KKwkgKi8KKwlod19tbXVfdHdsX2Rpc2FibGUocmVzb3VyY2VzLT5kd19kbW11X2Jhc2UpOworCWh3X21tdV90bGJfZmx1c2hfYWxsKHJlc291cmNlcy0+ZHdfZG1tdV9iYXNlKTsKKworCWh3X21tdV90bGJfYWRkKHJlc291cmNlcy0+ZHdfZG1tdV9iYXNlLAorCQkJdmlydF90b19waHlzKGR1bW15X3ZhX2FkZHIpLCBmYXVsdF9hZGRyLAorCQkJSFdfUEFHRV9TSVpFNEtCLCAxLAorCQkJJm1hcF9hdHRycywgSFdfU0VULCBIV19TRVQpOworCisJZHNwX2Nsa19lbmFibGUoRFNQX0NMS19HUFQ4KTsKKworCWRzcF9ncHRfd2FpdF9vdmVyZmxvdyhEU1BfQ0xLX0dQVDgsIDB4ZmZmZmZmZmUpOworCisJLyogQ2xlYXIgTU1VIGludGVycnVwdCAqLworCWh3X21tdV9ldmVudF9hY2socmVzb3VyY2VzLT5kd19kbW11X2Jhc2UsCisJCQlIV19NTVVfVFJBTlNMQVRJT05fRkFVTFQpOworCWR1bXBfZHNwX3N0YWNrKGRldl9jb250ZXh0KTsKKwlkc3BfY2xrX2Rpc2FibGUoRFNQX0NMS19HUFQ4KTsKKworCWh3X21tdV9kaXNhYmxlKHJlc291cmNlcy0+ZHdfZG1tdV9iYXNlKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpZHVtbXlfdmFfYWRkcik7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpldmVudF90b19zdHJpbmcoaW50IGV2ZW50KQoreworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIERTUF9TWVNFUlJPUjogcmV0dXJuICJEU1BfU1lTRVJST1IiOyBicmVhazsKKwljYXNlIERTUF9NTVVGQVVMVDogcmV0dXJuICJEU1BfTU1VRkFVTFQiOyBicmVhazsKKwljYXNlIERTUF9QV1JFUlJPUjogcmV0dXJuICJEU1BfUFdSRVJST1IiOyBicmVhazsKKwljYXNlIERTUF9XRFRPVkVSRkxPVzogcmV0dXJuICJEU1BfV0RUT1ZFUkZMT1ciOyBicmVhazsKKwlkZWZhdWx0OiByZXR1cm4gInVua293biBldmVudCI7IGJyZWFrOworCX0KK30KKwordm9pZCBicmlkZ2VfZGVoX25vdGlmeShzdHJ1Y3QgZGVoX21nciAqZGVoLCBpbnQgZXZlbnQsIGludCBpbmZvKQoreworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0OworCWNvbnN0IGNoYXIgKnN0ciA9IGV2ZW50X3RvX3N0cmluZyhldmVudCk7CisKKwlpZiAoIWRlaCkKKwkJcmV0dXJuOworCisJZGV2X2RiZyhicmlkZ2UsICIlczogZGV2aWNlIGV4Y2VwdGlvbiIsIF9fZnVuY19fKTsKKwlkZXZfY29udGV4dCA9IGRlaC0+aGJyaWRnZV9jb250ZXh0OworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgRFNQX1NZU0VSUk9SOgorCQlkZXZfZXJyKGJyaWRnZSwgIiVzOiAlcywgaW5mbz0weCV4IiwgX19mdW5jX18sCisJCQkJc3RyLCBpbmZvKTsKKyNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfQkFDS1RSQUNFCisJCWR1bXBfZGxfbW9kdWxlcyhkZXZfY29udGV4dCk7CisJCWR1bXBfZHNwX3N0YWNrKGRldl9jb250ZXh0KTsKKyNlbmRpZgorCQlicmVhazsKKwljYXNlIERTUF9NTVVGQVVMVDoKKwkJZGV2X2VycihicmlkZ2UsICIlczogJXMsIGFkZHI9MHgleCIsIF9fZnVuY19fLAorCQkJCXN0ciwgZmF1bHRfYWRkcik7CisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0JBQ0tUUkFDRQorCQlwcmludF9kc3BfdHJhY2VfYnVmZmVyKGRldl9jb250ZXh0KTsKKwkJZHVtcF9kbF9tb2R1bGVzKGRldl9jb250ZXh0KTsKKwkJbW11X2ZhdWx0X3ByaW50X3N0YWNrKGRldl9jb250ZXh0KTsKKyNlbmRpZgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGJyaWRnZSwgIiVzOiAlcyIsIF9fZnVuY19fLCBzdHIpOworCQlicmVhazsKKwl9CisKKwkvKiBGaWx0ZXIgc3Vic2VxdWVudCBub3RpZmljYXRpb25zIHdoZW4gYW4gZXJyb3Igb2NjdXJzICovCisJaWYgKGRldl9jb250ZXh0LT5kd19icmRfc3RhdGUgIT0gQlJEX0VSUk9SKSB7CisJCW50Znlfbm90aWZ5KGRlaC0+bnRmeV9vYmosIGV2ZW50KTsKKyNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfUkVDT1ZFUlkKKwkJYnJpZGdlX3JlY292ZXJfc2NoZWR1bGUoKTsKKyNlbmRpZgorCX0KKworCS8qIFNldCB0aGUgQm9hcmQgc3RhdGUgYXMgRVJST1IgKi8KKwlkZXZfY29udGV4dC0+ZHdfYnJkX3N0YXRlID0gQlJEX0VSUk9SOworCS8qIERpc2FibGUgYWxsIHRoZSBjbG9ja3MgdGhhdCB3ZXJlIGVuYWJsZWQgYnkgRFNQICovCisJZHNwX2Nsb2NrX2Rpc2FibGVfYWxsKGRldl9jb250ZXh0LT5kc3BfcGVyX2Nsa3MpOworCS8qCisJICogQXZvaWQgdGhlIHN1YnNlcXVlbnQgV0RUIGlmIGl0IGhhcHBlbnMgb25jZSwKKwkgKiBhbHNvIGlmIGZhdGFsIGVycm9yIG9jY3Vycy4KKwkgKi8KKwlkc3Bfd2R0X2VuYWJsZShmYWxzZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS93ZHQuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL3dkdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMjZmNTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS93ZHQuYwpAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIHdkdC5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIElPIGRpc3BhdGNoZXIgZm9yIGEgc2hhcmVkIG1lbW9yeSBjaGFubmVsIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BkZWguaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2Lmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL19jaG5sX3NtLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3dkdC5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisKKworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9XRFQzCisKKyNkZWZpbmUgT01BUDM0WFhfV0RUM19CQVNFIAkJKEw0X1BFUl8zNFhYX0JBU0UgKyAweDMwMDAwKQorCitzdGF0aWMgc3RydWN0IGRzcF93ZHRfc2V0dGluZyBkc3Bfd2R0OworCit2b2lkIGRzcF93ZHRfZHBjKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgZGVoX21nciAqZGVoX21ncjsKKwlkZXZfZ2V0X2RlaF9tZ3IoZGV2X2dldF9maXJzdCgpLCAmZGVoX21ncik7CisJaWYgKGRlaF9tZ3IpCisJCWJyaWRnZV9kZWhfbm90aWZ5KGRlaF9tZ3IsIERTUF9XRFRPVkVSRkxPVywgMCk7Cit9CisKK2lycXJldHVybl90IGRzcF93ZHRfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJdTMyIHZhbHVlOworCS8qIGFjayB3ZHQzIGludGVycnVwdCAqLworCXZhbHVlID0gX19yYXdfcmVhZGwoZHNwX3dkdC5yZWdfYmFzZSArIE9NQVAzX1dEVDNfSVNSX09GRlNFVCk7CisJX19yYXdfd3JpdGVsKHZhbHVlLCBkc3Bfd2R0LnJlZ19iYXNlICsgT01BUDNfV0RUM19JU1JfT0ZGU0VUKTsKKworCXRhc2tsZXRfc2NoZWR1bGUoJmRzcF93ZHQud2R0M190YXNrbGV0KTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK2ludCBkc3Bfd2R0X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWRzcF93ZHQuc21fd2R0ID0gTlVMTDsKKwlkc3Bfd2R0LnJlZ19iYXNlID0gT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQMzRYWF9XRFQzX0JBU0UpOworCXRhc2tsZXRfaW5pdCgmZHNwX3dkdC53ZHQzX3Rhc2tsZXQsIGRzcF93ZHRfZHBjLCAwKTsKKworCWRzcF93ZHQuZmNsayA9IGNsa19nZXQoTlVMTCwgIndkdDNfZmNrIik7CisKKwlpZiAoZHNwX3dkdC5mY2xrKSB7CisJCWRzcF93ZHQuaWNsayA9IGNsa19nZXQoTlVMTCwgIndkdDNfaWNrIik7CisJCWlmICghZHNwX3dkdC5pY2xrKSB7CisJCQljbGtfcHV0KGRzcF93ZHQuZmNsayk7CisJCQlkc3Bfd2R0LmZjbGsgPSBOVUxMOworCQkJcmV0ID0gLUVGQVVMVDsKKwkJfQorCX0gZWxzZQorCQlyZXQgPSAtRUZBVUxUOworCisJaWYgKCFyZXQpCisJCXJldCA9IHJlcXVlc3RfaXJxKElOVF8zNFhYX1dEVDNfSVJRLCBkc3Bfd2R0X2lzciwgMCwKKwkJCQkJCQkiZHNwX3dkdCIsICZkc3Bfd2R0KTsKKworCS8qIERpc2FibGUgYXQgdGhpcyBtb21lbnQsIGl0IHdpbGwgYmUgZW5hYmxlZCB3aGVuIERTUCBzdGFydHMgKi8KKwlpZiAoIXJldCkKKwkJZGlzYWJsZV9pcnEoSU5UXzM0WFhfV0RUM19JUlEpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBkc3Bfd2R0X3NtX3NldCh2b2lkICpkYXRhKQoreworCWRzcF93ZHQuc21fd2R0ID0gZGF0YTsKKwlkc3Bfd2R0LnNtX3dkdC0+d2R0X292ZXJmbG93ID0gQ09ORklHX1RJRFNQQlJJREdFX1dEVF9USU1FT1VUOworfQorCisKK3ZvaWQgZHNwX3dkdF9leGl0KHZvaWQpCit7CisJZnJlZV9pcnEoSU5UXzM0WFhfV0RUM19JUlEsICZkc3Bfd2R0KTsKKwl0YXNrbGV0X2tpbGwoJmRzcF93ZHQud2R0M190YXNrbGV0KTsKKworCWlmIChkc3Bfd2R0LmZjbGspCisJCWNsa19wdXQoZHNwX3dkdC5mY2xrKTsKKwlpZiAoZHNwX3dkdC5pY2xrKQorCQljbGtfcHV0KGRzcF93ZHQuaWNsayk7CisKKwlkc3Bfd2R0LmZjbGsgPSBOVUxMOworCWRzcF93ZHQuaWNsayA9IE5VTEw7CisJZHNwX3dkdC5zbV93ZHQgPSBOVUxMOworCWRzcF93ZHQucmVnX2Jhc2UgPSBOVUxMOworfQorCit2b2lkIGRzcF93ZHRfZW5hYmxlKGJvb2wgZW5hYmxlKQoreworCXUzMiB0bXA7CisJc3RhdGljIGJvb2wgd2R0X2VuYWJsZTsKKworCWlmICh3ZHRfZW5hYmxlID09IGVuYWJsZSB8fCAhZHNwX3dkdC5mY2xrIHx8ICFkc3Bfd2R0LmljbGspCisJCXJldHVybjsKKworCXdkdF9lbmFibGUgPSBlbmFibGU7CisKKwlpZiAoZW5hYmxlKSB7CisJCWNsa19lbmFibGUoZHNwX3dkdC5mY2xrKTsKKwkJY2xrX2VuYWJsZShkc3Bfd2R0LmljbGspOworCQlkc3Bfd2R0LnNtX3dkdC0+d2R0X3NldGNsb2NrcyA9IDE7CisJCXRtcCA9IF9fcmF3X3JlYWRsKGRzcF93ZHQucmVnX2Jhc2UgKyBPTUFQM19XRFQzX0lTUl9PRkZTRVQpOworCQlfX3Jhd193cml0ZWwodG1wLCBkc3Bfd2R0LnJlZ19iYXNlICsgT01BUDNfV0RUM19JU1JfT0ZGU0VUKTsKKwkJZW5hYmxlX2lycShJTlRfMzRYWF9XRFQzX0lSUSk7CisJfSBlbHNlIHsKKwkJZGlzYWJsZV9pcnEoSU5UXzM0WFhfV0RUM19JUlEpOworCQlkc3Bfd2R0LnNtX3dkdC0+d2R0X3NldGNsb2NrcyA9IDA7CisJCWNsa19kaXNhYmxlKGRzcF93ZHQuaWNsayk7CisJCWNsa19kaXNhYmxlKGRzcF93ZHQuZmNsayk7CisJfQorfQorCisjZWxzZQordm9pZCBkc3Bfd2R0X2VuYWJsZShib29sIGVuYWJsZSkKK3sKK30KKwordm9pZCBkc3Bfd2R0X3NtX3NldCh2b2lkICpkYXRhKQoreworfQorCitpbnQgZHNwX3dkdF9pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZHNwX3dkdF9leGl0KHZvaWQpCit7Cit9CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvY2xvYWQuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL2Nsb2FkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg1YTVlOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL2Nsb2FkLmMKQEAgLTAsMCArMSwxOTUzIEBACisvKgorICogY2xvYWQuYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaW5jbHVkZSAiaGVhZGVyLmgiCisKKyNpbmNsdWRlICJtb2R1bGVfbGlzdC5oIgorI2RlZmluZSBMSU5LRVJfTU9EVUxFU19IRUFERVIgKCJfIiBNT0RVTEVTX0hFQURFUikKKworLyoKKyAqIGZvcndhcmQgcmVmZXJlbmNlcworICovCitzdGF0aWMgdm9pZCBkbG9hZF9zeW1ib2xzKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzKTsKK3N0YXRpYyB2b2lkIGRsb2FkX2RhdGEoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMpOworc3RhdGljIHZvaWQgYWxsb2NhdGVfc2VjdGlvbnMoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMpOworc3RhdGljIHZvaWQgc3RyaW5nX3RhYmxlX2ZyZWUoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMpOworc3RhdGljIHZvaWQgc3ltYm9sX3RhYmxlX2ZyZWUoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMpOworc3RhdGljIHZvaWQgc2VjdGlvbl90YWJsZV9mcmVlKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzKTsKK3N0YXRpYyB2b2lkIGluaXRfbW9kdWxlX2hhbmRsZShzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcyk7CisjaWYgQklUU19QRVJfQVUgPiBCSVRTX1BFUl9CWVRFCitzdGF0aWMgY2hhciAqdW5wYWNrX25hbWUoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsIHUzMiBzb2Zmc2V0KTsKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciBjaW5pdG5hbWVbXSA9IHsgIi5jaW5pdCIgfTsKK3N0YXRpYyBjb25zdCBjaGFyIGxvYWRlcl9kbGx2aWV3X3Jvb3RbXSA9IHsgIj9ETE1vZHVsZXM/IiB9OworCisvKgorICogRXJyb3Igc3RyaW5ncworICovCitzdGF0aWMgY29uc3QgY2hhciByZWFkc3RybVtdID0geyAiRXJyb3IgcmVhZGluZyAlcyBmcm9tIGlucHV0IHN0cmVhbSIgfTsKK3N0YXRpYyBjb25zdCBjaGFyIGVycl9hbGxvY1tdID0geyAiU3ltcy0+ZGxvYWRfYWxsb2NhdGUoICVkICkgZmFpbGVkIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgdGd0YWxsb2NbXSA9IHsKKwkiVGFyZ2V0IG1lbW9yeSBhbGxvY2F0ZSBmYWlsZWQsIHNlY3Rpb24gJXMgc2l6ZSAiIEZNVF9VSTMyIH07CitzdGF0aWMgY29uc3QgY2hhciBpbml0ZmFpbFtdID0geyAiJXMgdG8gdGFyZ2V0IGFkZHJlc3MgIiBGTVRfVUkzMiAiIGZhaWxlZCIgfTsKK3N0YXRpYyBjb25zdCBjaGFyIGRsdndyaXRlW10gPSB7ICJXcml0ZSB0byBETEx2aWV3IGxpc3QgZmFpbGVkIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgaWNvbm5lY3RbXSA9IHsgIkNvbm5lY3QgY2FsbCB0byBpbml0IGludGVyZmFjZSBmYWlsZWQiIH07CitzdGF0aWMgY29uc3QgY2hhciBlcnJfY2hlY2tzdW1bXSA9IHsgIkNoZWNrc3VtIGZhaWxlZCBvbiAlcyIgfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb2NlZHVyZSBkbG9hZF9lcnJvcgorICoKKyAqIFBhcmFtZXRlcnM6CisgKgllcnJ0eHQJZGVzY3JpcHRpb24gb2YgdGhlIGVycm9yLCBwcmludGYgc3R5bGUKKyAqCS4uLgkJYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICoKKyAqIEVmZmVjdDoKKyAqCVJlcG9ydHMgb3IgcmVjb3JkcyB0aGUgZXJyb3IgYXMgYXBwcm9wcmlhdGUuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KK3ZvaWQgZGxvYWRfZXJyb3Ioc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsIGNvbnN0IGNoYXIgKmVycnR4dCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKworCXZhX3N0YXJ0KGFyZ3MsIGVycnR4dCk7CisJZGx0aGlzLT5teXN5bS0+ZXJyb3JfcmVwb3J0KGRsdGhpcy0+bXlzeW0sIGVycnR4dCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCWRsdGhpcy0+ZGxvYWRfZXJyY291bnQgKz0gMTsKKworfQkJCQkvKiBkbG9hZF9lcnJvciAqLworCisjZGVmaW5lIERMX0VSUk9SKHp6YSwgenpiKSBkbG9hZF9lcnJvcihkbHRoaXMsIHp6YSwgenpiKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIGRsb2FkX3N5bXNfZXJyb3IKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJZXJydHh0CWRlc2NyaXB0aW9uIG9mIHRoZSBlcnJvciwgcHJpbnRmIHN0eWxlCisgKgkuLi4JCWFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqCisgKiBFZmZlY3Q6CisgKglSZXBvcnRzIG9yIHJlY29yZHMgdGhlIGVycm9yIGFzIGFwcHJvcHJpYXRlLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCit2b2lkIGRsb2FkX3N5bXNfZXJyb3Ioc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAqc3ltcywgY29uc3QgY2hhciAqZXJydHh0LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCisJdmFfc3RhcnQoYXJncywgZXJydHh0KTsKKwlzeW1zLT5lcnJvcl9yZXBvcnQoc3ltcywgZXJydHh0LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm9jZWR1cmUgZHluYW1pY19sb2FkX21vZHVsZQorICoKKyAqIFBhcmFtZXRlcnM6CisgKgltb2R1bGUJVGhlIGlucHV0IHN0cmVhbSB0aGF0IHN1cHBsaWVzIHRoZSBtb2R1bGUgaW1hZ2UKKyAqCXN5bXMJSG9zdC1zaWRlIHN5bWJvbCB0YWJsZSBhbmQgbWFsbG9jL2ZyZWUgZnVuY3Rpb25zCisgKglhbGxvYwlUYXJnZXQtc2lkZSBtZW1vcnkgYWxsb2NhdGlvbgorICoJaW5pdAlUYXJnZXQtc2lkZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24KKyAqCW9wdGlvbnMJT3B0aW9uIGZsYWdzIERMT0FEXyoKKyAqCW1oYW5kbGUJQSBtb2R1bGUgaGFuZGxlIGZvciB1c2Ugd2l0aCBEeW5hbWljX1VubG9hZAorICoKKyAqIEVmZmVjdDoKKyAqCVRoZSBtb2R1bGUgaW1hZ2UgaXMgcmVhZCB1c2luZyAqbW9kdWxlLiAgVGFyZ2V0IHN0b3JhZ2UgZm9yIHRoZSBuZXcKKyAqCWltYWdlIGlzCisgKiBvYnRhaW5lZCBmcm9tICphbGxvYy4gIFN5bWJvbHMgZGVmaW5lZCBhbmQgcmVmZXJlbmNlZCBieSB0aGUgbW9kdWxlIGFyZQorICogbWFuYWdlZCB1c2luZyAqc3ltcy4gIFRoZSBpbWFnZSBpcyB0aGVuIHJlbG9jYXRlZCBhbmQgcmVmZXJlbmNlcworICoJcmVzb2x2ZWQgYXMgbmVjZXNzYXJ5LCBhbmQgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIGJpdHMgYXJlIHBsYWNlZAorICoJaW50byB0YXJnZXQgbWVtb3J5IHVzaW5nICppbml0LgorICoKKyAqIFJldHVybnM6CisgKglPbiBhIHN1Y2Nlc3NmdWwgbG9hZCwgYSBtb2R1bGUgaGFuZGxlIGlzIHBsYWNlZCBpbiAqbWhhbmRsZSwKKyAqCWFuZCB6ZXJvIGlzIHJldHVybmVkLiAgT24gZXJyb3IsIHRoZSBudW1iZXIgb2YgZXJyb3JzIGRldGVjdGVkIGlzCisgKglyZXR1cm5lZC4gIEluZGl2aWR1YWwgZXJyb3JzIGFyZSByZXBvcnRlZCBkdXJpbmcgdGhlIGxvYWQgcHJvY2VzcworICoJdXNpbmcgc3ltcy0+ZXJyb3JfcmVwb3J0KCkuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworaW50IGR5bmFtaWNfbG9hZF9tb2R1bGUoc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N0cmVhbSAqbW9kdWxlLAorCQkJc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAqc3ltcywKKwkJCXN0cnVjdCBkeW5hbWljX2xvYWRlcl9hbGxvY2F0ZSAqYWxsb2MsCisJCQlzdHJ1Y3QgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqaW5pdCwKKwkJCXVuc2lnbmVkIG9wdGlvbnMsIHZvaWQgKiptaGFuZGxlKQoreworCXJlZ2lzdGVyIHVuc2lnbmVkICpkcCwgc3o7CisJc3RydWN0IGRsb2FkX3N0YXRlIGRsX3N0YXRlOwkvKiBpbnRlcm5hbCBzdGF0ZSBmb3IgdGhpcyBjYWxsICovCisKKwkvKiBibGFzdCBvdXIgaW50ZXJuYWwgc3RhdGUgKi8KKwlkcCA9ICh1bnNpZ25lZCAqKSZkbF9zdGF0ZTsKKwlmb3IgKHN6ID0gc2l6ZW9mKGRsX3N0YXRlKSAvIHNpemVvZih1bnNpZ25lZCk7IHN6ID4gMDsgc3ogLT0gMSkKKwkJKmRwKysgPSAwOworCisJLyogRW5hYmxlIF9vbmx5XyBCU1MgaW5pdGlhbGl6YXRpb24gaWYgZW5hYmxlZCBieSB1c2VyICovCisJaWYgKChvcHRpb25zICYgRExPQURfSU5JVEJTUykgPT0gRExPQURfSU5JVEJTUykKKwkJZGxfc3RhdGUubXlvcHRpb25zID0gRExPQURfSU5JVEJTUzsKKworCS8qIENoZWNrIHRoYXQgbWFuZGF0b3J5IGFyZ3VtZW50cyBhcmUgcHJlc2VudCAqLworCWlmICghbW9kdWxlIHx8ICFzeW1zKSB7CisJCWRsb2FkX2Vycm9yKCZkbF9zdGF0ZSwgIlJlcXVpcmVkIHBhcmFtZXRlciBpcyBOVUxMIik7CisJfSBlbHNlIHsKKwkJZGxfc3RhdGUuc3RybSA9IG1vZHVsZTsKKwkJZGxfc3RhdGUubXlzeW0gPSBzeW1zOworCQlkbG9hZF9oZWFkZXJzKCZkbF9zdGF0ZSk7CisJCWlmICghZGxfc3RhdGUuZGxvYWRfZXJyY291bnQpCisJCQlkbG9hZF9zdHJpbmdzKCZkbF9zdGF0ZSwgZmFsc2UpOworCQlpZiAoIWRsX3N0YXRlLmRsb2FkX2VycmNvdW50KQorCQkJZGxvYWRfc2VjdGlvbnMoJmRsX3N0YXRlKTsKKworCQlpZiAoaW5pdCAmJiAhZGxfc3RhdGUuZGxvYWRfZXJyY291bnQpIHsKKwkJCWlmIChpbml0LT5jb25uZWN0KGluaXQpKSB7CisJCQkJZGxfc3RhdGUubXlpbyA9IGluaXQ7CisJCQkJZGxfc3RhdGUubXlhbGxvYyA9IGFsbG9jOworCQkJCS8qIGRvIG5vdywgYmVmb3JlIHJlZHVjaW5nIHN5bWJvbHMgKi8KKwkJCQlhbGxvY2F0ZV9zZWN0aW9ucygmZGxfc3RhdGUpOworCQkJfSBlbHNlCisJCQkJZGxvYWRfZXJyb3IoJmRsX3N0YXRlLCBpY29ubmVjdCk7CisJCX0KKworCQlpZiAoIWRsX3N0YXRlLmRsb2FkX2VycmNvdW50KSB7CisJCQkvKiBmaXggdXAgZW50cnkgcG9pbnQgYWRkcmVzcyAqLworCQkJdW5zaWduZWQgc3JlZiA9IGRsX3N0YXRlLmRmaWxlX2hkci5kZl9lbnRyeV9zZWNuIC0gMTsKKwkJCWlmIChzcmVmIDwgZGxfc3RhdGUuYWxsb2NhdGVkX3NlY25fY291bnQpCisJCQkJZGxfc3RhdGUuZGZpbGVfaGRyLmRmX2VudHJ5cHQgKz0KKwkJCQkgICAgZGxfc3RhdGUubGRyX3NlY3Rpb25zW3NyZWZdLnJ1bl9hZGRyOworCisJCQlkbG9hZF9zeW1ib2xzKCZkbF9zdGF0ZSk7CisJCX0KKworCQlpZiAoaW5pdCAmJiAhZGxfc3RhdGUuZGxvYWRfZXJyY291bnQpCisJCQlkbG9hZF9kYXRhKCZkbF9zdGF0ZSk7CisKKwkJaW5pdF9tb2R1bGVfaGFuZGxlKCZkbF9zdGF0ZSk7CisKKwkJLyogZGxfc3RhdGUubXlpbyBpcyBpbml0IG9yIDAgYXQgdGhpcyBwb2ludC4gKi8KKwkJaWYgKGRsX3N0YXRlLm15aW8pIHsKKwkJCWlmICgoIWRsX3N0YXRlLmRsb2FkX2VycmNvdW50KSAmJgorCQkJICAgIChkbF9zdGF0ZS5kZmlsZV9oZHIuZGZfZW50cnlfc2VjbiAhPSBETl9VTkRFRikgJiYKKwkJCSAgICAoIWluaXQtPmV4ZWN1dGUoaW5pdCwKKwkJCQkJICAgIGRsX3N0YXRlLmRmaWxlX2hkci5kZl9lbnRyeXB0KSkpCisJCQkJZGxvYWRfZXJyb3IoJmRsX3N0YXRlLCAiSW5pdC0+RXhlY3V0ZSBGYWlsZWQiKTsKKwkJCWluaXQtPnJlbGVhc2UoaW5pdCk7CisJCX0KKworCQlzeW1ib2xfdGFibGVfZnJlZSgmZGxfc3RhdGUpOworCQlzZWN0aW9uX3RhYmxlX2ZyZWUoJmRsX3N0YXRlKTsKKwkJc3RyaW5nX3RhYmxlX2ZyZWUoJmRsX3N0YXRlKTsKKwkJZGxvYWRfdHJhbXBfY2xlYW51cCgmZGxfc3RhdGUpOworCisJCWlmIChkbF9zdGF0ZS5kbG9hZF9lcnJjb3VudCkgeworCQkJZHluYW1pY191bmxvYWRfbW9kdWxlKGRsX3N0YXRlLm15aGFuZGxlLCBzeW1zLCBhbGxvYywKKwkJCQkJICAgICAgaW5pdCk7CisJCQlkbF9zdGF0ZS5teWhhbmRsZSA9IE5VTEw7CisJCX0KKwl9CisKKwlpZiAobWhhbmRsZSkKKwkJKm1oYW5kbGUgPSBkbF9zdGF0ZS5teWhhbmRsZTsJLyogZ2l2ZSBiYWNrIHRoZSBoYW5kbGUgKi8KKworCXJldHVybiBkbF9zdGF0ZS5kbG9hZF9lcnJjb3VudDsKK30JCQkJLyogRExPQURfRmlsZSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIGR5bmFtaWNfb3Blbl9tb2R1bGUKKyAqCisgKiBQYXJhbWV0ZXJzOgorICogICAgICBtb2R1bGUgIFRoZSBpbnB1dCBzdHJlYW0gdGhhdCBzdXBwbGllcyB0aGUgbW9kdWxlIGltYWdlCisgKiAgICAgIHN5bXMgICAgSG9zdC1zaWRlIHN5bWJvbCB0YWJsZSBhbmQgbWFsbG9jL2ZyZWUgZnVuY3Rpb25zCisgKiAgICAgIGFsbG9jICAgVGFyZ2V0LXNpZGUgbWVtb3J5IGFsbG9jYXRpb24KKyAqICAgICAgaW5pdCAgICBUYXJnZXQtc2lkZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24KKyAqICAgICAgb3B0aW9ucyBPcHRpb24gZmxhZ3MgRExPQURfKgorICogICAgICBtaGFuZGxlIEEgbW9kdWxlIGhhbmRsZSBmb3IgdXNlIHdpdGggRHluYW1pY19VbmxvYWQKKyAqCisgKiBFZmZlY3Q6CisgKiAgICAgIFRoZSBtb2R1bGUgaW1hZ2UgaXMgcmVhZCB1c2luZyAqbW9kdWxlLiAgVGFyZ2V0IHN0b3JhZ2UgZm9yIHRoZSBuZXcKKyAqICAgICAgaW1hZ2UgaXMKKyAqIAlvYnRhaW5lZCBmcm9tICphbGxvYy4gIFN5bWJvbHMgZGVmaW5lZCBhbmQgcmVmZXJlbmNlZCBieSB0aGUgbW9kdWxlIGFyZQorICogCW1hbmFnZWQgdXNpbmcgKnN5bXMuICBUaGUgaW1hZ2UgaXMgdGhlbiByZWxvY2F0ZWQgYW5kIHJlZmVyZW5jZXMKKyAqICAgICAgcmVzb2x2ZWQgYXMgbmVjZXNzYXJ5LCBhbmQgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIGJpdHMgYXJlIHBsYWNlZAorICogICAgICBpbnRvIHRhcmdldCBtZW1vcnkgdXNpbmcgKmluaXQuCisgKgorICogUmV0dXJuczoKKyAqICAgICAgT24gYSBzdWNjZXNzZnVsIGxvYWQsIGEgbW9kdWxlIGhhbmRsZSBpcyBwbGFjZWQgaW4gKm1oYW5kbGUsCisgKiAgICAgIGFuZCB6ZXJvIGlzIHJldHVybmVkLiAgT24gZXJyb3IsIHRoZSBudW1iZXIgb2YgZXJyb3JzIGRldGVjdGVkIGlzCisgKiAgICAgIHJldHVybmVkLiAgSW5kaXZpZHVhbCBlcnJvcnMgYXJlIHJlcG9ydGVkIGR1cmluZyB0aGUgbG9hZCBwcm9jZXNzCisgKiAgICAgIHVzaW5nIHN5bXMtPmVycm9yX3JlcG9ydCgpLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KK2ludAorZHluYW1pY19vcGVuX21vZHVsZShzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3RyZWFtICptb2R1bGUsCisJCSAgICBzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3ltICpzeW1zLAorCQkgICAgc3RydWN0IGR5bmFtaWNfbG9hZGVyX2FsbG9jYXRlICphbGxvYywKKwkJICAgIHN0cnVjdCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICppbml0LAorCQkgICAgdW5zaWduZWQgb3B0aW9ucywgdm9pZCAqKm1oYW5kbGUpCit7CisJcmVnaXN0ZXIgdW5zaWduZWQgKmRwLCBzejsKKwlzdHJ1Y3QgZGxvYWRfc3RhdGUgZGxfc3RhdGU7CS8qIGludGVybmFsIHN0YXRlIGZvciB0aGlzIGNhbGwgKi8KKworCS8qIGJsYXN0IG91ciBpbnRlcm5hbCBzdGF0ZSAqLworCWRwID0gKHVuc2lnbmVkICopJmRsX3N0YXRlOworCWZvciAoc3ogPSBzaXplb2YoZGxfc3RhdGUpIC8gc2l6ZW9mKHVuc2lnbmVkKTsgc3ogPiAwOyBzeiAtPSAxKQorCQkqZHArKyA9IDA7CisKKwkvKiBFbmFibGUgX29ubHlfIEJTUyBpbml0aWFsaXphdGlvbiBpZiBlbmFibGVkIGJ5IHVzZXIgKi8KKwlpZiAoKG9wdGlvbnMgJiBETE9BRF9JTklUQlNTKSA9PSBETE9BRF9JTklUQlNTKQorCQlkbF9zdGF0ZS5teW9wdGlvbnMgPSBETE9BRF9JTklUQlNTOworCisJLyogQ2hlY2sgdGhhdCBtYW5kYXRvcnkgYXJndW1lbnRzIGFyZSBwcmVzZW50ICovCisJaWYgKCFtb2R1bGUgfHwgIXN5bXMpIHsKKwkJZGxvYWRfZXJyb3IoJmRsX3N0YXRlLCAiUmVxdWlyZWQgcGFyYW1ldGVyIGlzIE5VTEwiKTsKKwl9IGVsc2UgeworCQlkbF9zdGF0ZS5zdHJtID0gbW9kdWxlOworCQlkbF9zdGF0ZS5teXN5bSA9IHN5bXM7CisJCWRsb2FkX2hlYWRlcnMoJmRsX3N0YXRlKTsKKwkJaWYgKCFkbF9zdGF0ZS5kbG9hZF9lcnJjb3VudCkKKwkJCWRsb2FkX3N0cmluZ3MoJmRsX3N0YXRlLCBmYWxzZSk7CisJCWlmICghZGxfc3RhdGUuZGxvYWRfZXJyY291bnQpCisJCQlkbG9hZF9zZWN0aW9ucygmZGxfc3RhdGUpOworCisJCWlmIChpbml0ICYmICFkbF9zdGF0ZS5kbG9hZF9lcnJjb3VudCkgeworCQkJaWYgKGluaXQtPmNvbm5lY3QoaW5pdCkpIHsKKwkJCQlkbF9zdGF0ZS5teWlvID0gaW5pdDsKKwkJCQlkbF9zdGF0ZS5teWFsbG9jID0gYWxsb2M7CisJCQkJLyogZG8gbm93LCBiZWZvcmUgcmVkdWNpbmcgc3ltYm9scyAqLworCQkJCWFsbG9jYXRlX3NlY3Rpb25zKCZkbF9zdGF0ZSk7CisJCQl9IGVsc2UKKwkJCQlkbG9hZF9lcnJvcigmZGxfc3RhdGUsIGljb25uZWN0KTsKKwkJfQorCisJCWlmICghZGxfc3RhdGUuZGxvYWRfZXJyY291bnQpIHsKKwkJCS8qIGZpeCB1cCBlbnRyeSBwb2ludCBhZGRyZXNzICovCisJCQl1bnNpZ25lZCBzcmVmID0gZGxfc3RhdGUuZGZpbGVfaGRyLmRmX2VudHJ5X3NlY24gLSAxOworCQkJaWYgKHNyZWYgPCBkbF9zdGF0ZS5hbGxvY2F0ZWRfc2Vjbl9jb3VudCkKKwkJCQlkbF9zdGF0ZS5kZmlsZV9oZHIuZGZfZW50cnlwdCArPQorCQkJCSAgICBkbF9zdGF0ZS5sZHJfc2VjdGlvbnNbc3JlZl0ucnVuX2FkZHI7CisKKwkJCWRsb2FkX3N5bWJvbHMoJmRsX3N0YXRlKTsKKwkJfQorCisJCWluaXRfbW9kdWxlX2hhbmRsZSgmZGxfc3RhdGUpOworCisJCS8qIGRsX3N0YXRlLm15aW8gaXMgZWl0aGVyIDAgb3IgaW5pdCBhdCB0aGlzIHBvaW50LiAqLworCQlpZiAoZGxfc3RhdGUubXlpbykgeworCQkJaWYgKCghZGxfc3RhdGUuZGxvYWRfZXJyY291bnQpICYmCisJCQkgICAgKGRsX3N0YXRlLmRmaWxlX2hkci5kZl9lbnRyeV9zZWNuICE9IEROX1VOREVGKSAmJgorCQkJICAgICghaW5pdC0+ZXhlY3V0ZShpbml0LAorCQkJCQkgICAgZGxfc3RhdGUuZGZpbGVfaGRyLmRmX2VudHJ5cHQpKSkKKwkJCQlkbG9hZF9lcnJvcigmZGxfc3RhdGUsICJJbml0LT5FeGVjdXRlIEZhaWxlZCIpOworCQkJaW5pdC0+cmVsZWFzZShpbml0KTsKKwkJfQorCisJCXN5bWJvbF90YWJsZV9mcmVlKCZkbF9zdGF0ZSk7CisJCXNlY3Rpb25fdGFibGVfZnJlZSgmZGxfc3RhdGUpOworCQlzdHJpbmdfdGFibGVfZnJlZSgmZGxfc3RhdGUpOworCisJCWlmIChkbF9zdGF0ZS5kbG9hZF9lcnJjb3VudCkgeworCQkJZHluYW1pY191bmxvYWRfbW9kdWxlKGRsX3N0YXRlLm15aGFuZGxlLCBzeW1zLCBhbGxvYywKKwkJCQkJICAgICAgaW5pdCk7CisJCQlkbF9zdGF0ZS5teWhhbmRsZSA9IE5VTEw7CisJCX0KKwl9CisKKwlpZiAobWhhbmRsZSkKKwkJKm1oYW5kbGUgPSBkbF9zdGF0ZS5teWhhbmRsZTsJLyogZ2l2ZSBiYWNrIHRoZSBoYW5kbGUgKi8KKworCXJldHVybiBkbF9zdGF0ZS5kbG9hZF9lcnJjb3VudDsKK30JCQkJLyogRExPQURfRmlsZSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIGRsb2FkX2hlYWRlcnMKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJbm9uZQorICoKKyAqIEVmZmVjdDoKKyAqCUxvYWRzIHRoZSBET0ZGIGhlYWRlciBhbmQgdmVyaWZ5IHJlY29yZC4gIERlYWxzIHdpdGggYW55IGJ5dGUtb3JkZXIKKyAqIGlzc3VlcyBhbmQgY2hlY2tzIHRoZW0gZm9yIHZhbGlkaXR5LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lIENPTUJJTkVEX0hFQURFUl9TSVpFIChzaXplb2Yoc3RydWN0IGRvZmZfZmlsZWhkcl90KSsgXAorCQkJICAgICBzaXplb2Yoc3RydWN0IGRvZmZfdmVyaWZ5X3JlY190KSkKKwordm9pZCBkbG9hZF9oZWFkZXJzKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzKQoreworCXUzMiBtYXA7CisKKwkvKiBSZWFkIHRoZSBoZWFkZXIgYW5kIHRoZSB2ZXJpZnkgcmVjb3JkIGFzIG9uZS4gIElmIHdlIGRvbid0IGdldCBpdAorCSAgIGFsbCwgd2UncmUgZG9uZSAqLworCWlmIChkbHRoaXMtPnN0cm0tPnJlYWRfYnVmZmVyKGRsdGhpcy0+c3RybSwgJmRsdGhpcy0+ZGZpbGVfaGRyLAorCQkJCSAgICAgIENPTUJJTkVEX0hFQURFUl9TSVpFKSAhPQorCSAgICBDT01CSU5FRF9IRUFERVJfU0laRSkgeworCQlETF9FUlJPUihyZWFkc3RybSwgIkZpbGUgSGVhZGVycyIpOworCQlyZXR1cm47CisJfQorCS8qCisJICogVmVyaWZ5IHRoYXQgd2UgaGF2ZSB0aGUgYnl0ZSBvcmRlciBvZiB0aGUgZmlsZSBjb3JyZWN0LgorCSAqIElmIG5vdCwgbXVzdCBmaXggaXQgYmVmb3JlIHdlIGNhbiBjb250aW51ZQorCSAqLworCW1hcCA9IFJFT1JERVJfTUFQKGRsdGhpcy0+ZGZpbGVfaGRyLmRmX2J5dGVfcmVzaHVmZmxlKTsKKwlpZiAobWFwICE9IFJFT1JERVJfTUFQKEJZVEVfUkVTSFVGRkxFX1ZBTFVFKSkgeworCQkvKiBpbnB1dCBpcyBlaXRoZXIgYnl0ZS1zaHVmZmxlZCBvciBiYWQgKi8KKwkJaWYgKChtYXAgJiAweEZDRkNGQ0ZDKSA9PSAwKSB7CS8qIG5vIG9idmlvdXNseSBib2d1cyBiaXRzICovCisJCQlkbG9hZF9yZW9yZGVyKCZkbHRoaXMtPmRmaWxlX2hkciwgQ09NQklORURfSEVBREVSX1NJWkUsCisJCQkJICAgICAgbWFwKTsKKwkJfQorCQlpZiAoZGx0aGlzLT5kZmlsZV9oZHIuZGZfYnl0ZV9yZXNodWZmbGUgIT0KKwkJICAgIEJZVEVfUkVTSFVGRkxFX1ZBTFVFKSB7CisJCQkvKiBkaWRuJ3QgZml4IHRoZSBwcm9ibGVtLCB0aGUgYnl0ZSBzd2FwIG1hcCBpcyBiYWQgKi8KKwkJCWRsb2FkX2Vycm9yKGRsdGhpcywKKwkJCQkgICAgIkJhZCBieXRlIHN3YXAgbWFwICIgRk1UX1VJMzIgIiBpbiBoZWFkZXIiLAorCQkJCSAgICBkbHRoaXMtPmRmaWxlX2hkci5kZl9ieXRlX3Jlc2h1ZmZsZSk7CisJCQlyZXR1cm47CisJCX0KKwkJZGx0aGlzLT5yZW9yZGVyX21hcCA9IG1hcDsJLyoga2VlcCBtYXAgZm9yIGZ1dHVyZSB1c2UgKi8KKwl9CisKKwkvKgorCSAqIFZlcmlmeSBjaGVja3N1bSBvZiBoZWFkZXIgYW5kIHZlcmlmeSByZWNvcmQKKwkgKi8KKwlpZiAofmRsb2FkX2NoZWNrc3VtKCZkbHRoaXMtPmRmaWxlX2hkciwKKwkJCSAgICBzaXplb2Yoc3RydWN0IGRvZmZfZmlsZWhkcl90KSkgfHwKKwkgICAgfmRsb2FkX2NoZWNrc3VtKCZkbHRoaXMtPnZlcmlmeSwKKwkJCSAgICBzaXplb2Yoc3RydWN0IGRvZmZfdmVyaWZ5X3JlY190KSkpIHsKKwkJRExfRVJST1IoZXJyX2NoZWNrc3VtLCAiaGVhZGVyIG9yIHZlcmlmeSByZWNvcmQiKTsKKwkJcmV0dXJuOworCX0KKyNpZiBIT1NUX0VORElBTk5FU1MKKwlkbHRoaXMtPmRmaWxlX2hkci5kZl9ieXRlX3Jlc2h1ZmZsZSA9IG1hcDsJLyogcHV0IGJhY2sgZm9yIGxhdGVyICovCisjZW5kaWYKKworCS8qIENoZWNrIGZvciB2YWxpZCB0YXJnZXQgSUQgKi8KKwlpZiAoKGRsdGhpcy0+ZGZpbGVfaGRyLmRmX3RhcmdldF9pZCAhPSBUQVJHRVRfSUQpICYmCisJICAgIC0oZGx0aGlzLT5kZmlsZV9oZHIuZGZfdGFyZ2V0X2lkICE9IFRNUzQ3MF9JRCkpIHsKKwkJZGxvYWRfZXJyb3IoZGx0aGlzLCAiQmFkIHRhcmdldCBJRCAweCV4IGFuZCBUQVJHRVRfSUQgMHgleCIsCisJCQkgICAgZGx0aGlzLT5kZmlsZV9oZHIuZGZfdGFyZ2V0X2lkLCBUQVJHRVRfSUQpOworCQlyZXR1cm47CisJfQorCS8qIENoZWNrIGZvciB2YWxpZCBmaWxlIGZvcm1hdCAqLworCWlmICgoZGx0aGlzLT5kZmlsZV9oZHIuZGZfZG9mZl92ZXJzaW9uICE9IERPRkYwKSkgeworCQlkbG9hZF9lcnJvcihkbHRoaXMsICJCYWQgRE9GRiB2ZXJzaW9uIDB4JXgiLAorCQkJICAgIGRsdGhpcy0+ZGZpbGVfaGRyLmRmX2RvZmZfdmVyc2lvbik7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIEFwcGx5IHJlYXNvbmFibGVuZXNzIGNoZWNrcyB0byBjb3VudCBmaWVsZHMKKwkgKi8KKwlpZiAoZGx0aGlzLT5kZmlsZV9oZHIuZGZfc3RydGFiX3NpemUgPiBNQVhfUkVBU09OQUJMRV9TVFJJTkdUQUIpIHsKKwkJZGxvYWRfZXJyb3IoZGx0aGlzLCAiRXhjZXNzaXZlIHN0cmluZyB0YWJsZSBzaXplICIgRk1UX1VJMzIsCisJCQkgICAgZGx0aGlzLT5kZmlsZV9oZHIuZGZfc3RydGFiX3NpemUpOworCQlyZXR1cm47CisJfQorCWlmIChkbHRoaXMtPmRmaWxlX2hkci5kZl9ub19zY25zID4gTUFYX1JFQVNPTkFCTEVfU0VDVElPTlMpIHsKKwkJZGxvYWRfZXJyb3IoZGx0aGlzLCAiRXhjZXNzaXZlIHNlY3Rpb24gY291bnQgMHgleCIsCisJCQkgICAgZGx0aGlzLT5kZmlsZV9oZHIuZGZfbm9fc2Nucyk7CisJCXJldHVybjsKKwl9CisjaWZuZGVmIFRBUkdFVF9FTkRJQU5ORVNTCisJLyoKKwkgKiBDaGVjayB0aGF0IGVuZGlhbm5lc3MgZG9lcyBub3QgZGlzYWdyZWUgd2l0aCBleHBsaWNpdCBzcGVjaWZpY2F0aW9uCisJICovCisJaWYgKChkbHRoaXMtPmRmaWxlX2hkci5kZl9mbGFncyA+PiBBTElHTl9DT0ZGX0VORElBTk5FU1MpICYKKwkgICAgZGx0aGlzLT5teW9wdGlvbnMgJiBFTkRJQU5ORVNTX01BU0spIHsKKwkJZGxvYWRfZXJyb3IoZGx0aGlzLAorCQkJICAgICJJbnB1dCBlbmRpYW5uZXNzIGRpc2FncmVlcyB3aXRoIHNwZWNpZmllZCBvcHRpb24iKTsKKwkJcmV0dXJuOworCX0KKwlkbHRoaXMtPmJpZ19lX3RhcmdldCA9IGRsdGhpcy0+ZGZpbGVfaGRyLmRmX2ZsYWdzICYgREZfQklHOworI2VuZGlmCisKK30JCQkJLyogZGxvYWRfaGVhZGVycyAqLworCisvKglDT0ZGIFNlY3Rpb24gUHJvY2Vzc2luZworICoKKyAqCUNPRkYgc2VjdGlvbnMgYXJlIHJlYWQgaW4gYW5kIHJldGFpbmVkIGludGFjdC4gIEVhY2ggcmVjb3JkIGlzIGVtYmVkZGVkCisgKiAJaW4gYSBuZXcgc3RydWN0dXJlIHRoYXQgcmVjb3JkcyB0aGUgdXBkYXRlZCBsb2FkIGFuZAorICogCXJ1biBhZGRyZXNzZXMgb2YgdGhlIHNlY3Rpb24gKi8KKworc3RhdGljIGNvbnN0IGNoYXIgc2Vjbl9lcnJpZFtdID0geyAic2VjdGlvbiIgfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb2NlZHVyZSBkbG9hZF9zZWN0aW9ucworICoKKyAqIFBhcmFtZXRlcnM6CisgKglub25lCisgKgorICogRWZmZWN0OgorICoJTG9hZHMgdGhlIHNlY3Rpb24gcmVjb3JkcyBpbnRvIGFuIGludGVybmFsIHRhYmxlLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCit2b2lkIGRsb2FkX3NlY3Rpb25zKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzKQoreworCXMxNiBzaXo7CisJc3RydWN0IGRvZmZfc2NuaGRyX3QgKnNocDsKKwl1bnNpZ25lZCBuc2VjcyA9IGRsdGhpcy0+ZGZpbGVfaGRyLmRmX25vX3NjbnM7CisKKwkvKiBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIERPRkYgc2VjdGlvbiByZWNvcmRzICovCisJc2l6ID0gbnNlY3MgKiBzaXplb2Yoc3RydWN0IGRvZmZfc2NuaGRyX3QpOworCXNocCA9CisJICAgIChzdHJ1Y3QgZG9mZl9zY25oZHJfdCAqKWRsdGhpcy0+bXlzeW0tPmRsb2FkX2FsbG9jYXRlKGRsdGhpcy0+bXlzeW0sCisJCQkJCQkJCSAgc2l6KTsKKwlpZiAoIXNocCkgewkJLyogbm90IGVub3VnaCBzdG9yYWdlICovCisJCURMX0VSUk9SKGVycl9hbGxvYywgc2l6KTsKKwkJcmV0dXJuOworCX0KKwlkbHRoaXMtPnNlY3RfaGRycyA9IHNocDsKKworCS8qIHJlYWQgaW4gdGhlIHNlY3Rpb24gcmVjb3JkcyAqLworCWlmIChkbHRoaXMtPnN0cm0tPnJlYWRfYnVmZmVyKGRsdGhpcy0+c3RybSwgc2hwLCBzaXopICE9IHNpeikgeworCQlETF9FUlJPUihyZWFkc3RybSwgc2Vjbl9lcnJpZCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBpZiB3ZSBuZWVkIHRvIGZpeCB1cCBieXRlIG9yZGVyLCBkbyBpdCBub3cgKi8KKwlpZiAoZGx0aGlzLT5yZW9yZGVyX21hcCkKKwkJZGxvYWRfcmVvcmRlcihzaHAsIHNpeiwgZGx0aGlzLT5yZW9yZGVyX21hcCk7CisKKwkvKiBjaGVjayBmb3IgdmFsaWRpdHkgKi8KKwlpZiAofmRsb2FkX2NoZWNrc3VtKGRsdGhpcy0+c2VjdF9oZHJzLCBzaXopICE9CisJICAgIGRsdGhpcy0+dmVyaWZ5LmR2X3Njbl9yZWNfY2hlY2tzdW0pIHsKKwkJRExfRVJST1IoZXJyX2NoZWNrc3VtLCBzZWNuX2VycmlkKTsKKwkJcmV0dXJuOworCX0KKworfQkJCQkvKiBkbG9hZF9zZWN0aW9ucyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb2NlZHVyZSBhbGxvY2F0ZV9zZWN0aW9ucworICoKKyAqIFBhcmFtZXRlcnM6CisgKglhbGxvYwl0YXJnZXQgbWVtb3J5IGFsbG9jYXRvciBjbGFzcworICoKKyAqIEVmZmVjdDoKKyAqCUFzc2lnbnMgbmV3ICh0YXJnZXQpIGFkZHJlc3NlcyBmb3Igc2VjdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCitzdGF0aWMgdm9pZCBhbGxvY2F0ZV9zZWN0aW9ucyhzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcykKK3sKKwl1MTYgY3Vycl9zZWN0LCBuc2Vjcywgc2l6OworCXN0cnVjdCBkb2ZmX3Njbmhkcl90ICpzaHA7CisJc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKmFzZWNzOworCXN0cnVjdCBteV9oYW5kbGUgKmhuZGw7CisJbnNlY3MgPSBkbHRoaXMtPmRmaWxlX2hkci5kZl9ub19zY25zOworCWlmICghbnNlY3MpCisJCXJldHVybjsKKwlpZiAoKGRsdGhpcy0+bXlhbGxvYyA9PSBOVUxMKSAmJgorCSAgICAoZGx0aGlzLT5kZmlsZV9oZHIuZGZfdGFyZ2V0X3NjbnMgPiAwKSkgeworCQlETF9FUlJPUigiQXJnIDMgKGFsbG9jKSByZXF1aXJlZCBidXQgTlVMTCIsIDApOworCQlyZXR1cm47CisJfQorCS8qCisJICogYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBtb2R1bGUgaGFuZGxlLCB3aGljaCB3ZSB3aWxsIGtlZXAgZm9yIHVubG9hZAorCSAqIHB1cnBvc2VzIGluY2x1ZGUgYW4gYWRkaXRpb25hbCBzZWN0aW9uIHN0b3JlIGZvciBhbiBhdXRvLWdlbmVyYXRlZAorCSAqIHRyYW1wb2xpbmUgc2VjdGlvbiBpbiBjYXNlIHdlIG5lZWQgaXQuCisJICovCisJc2l6ID0gKGRsdGhpcy0+ZGZpbGVfaGRyLmRmX3RhcmdldF9zY25zICsgMSkgKgorCSAgICBzaXplb2Yoc3RydWN0IGxkcl9zZWN0aW9uX2luZm8pICsgTVlfSEFORExFX1NJWkU7CisKKwlobmRsID0KKwkgICAgKHN0cnVjdCBteV9oYW5kbGUgKilkbHRoaXMtPm15c3ltLT5kbG9hZF9hbGxvY2F0ZShkbHRoaXMtPm15c3ltLAorCQkJCQkJCSAgICAgIHNpeik7CisJaWYgKCFobmRsKSB7CQkvKiBub3QgZW5vdWdoIHN0b3JhZ2UgKi8KKwkJRExfRVJST1IoZXJyX2FsbG9jLCBzaXopOworCQlyZXR1cm47CisJfQorCS8qIGluaXRpYWxpemUgdGhlIGhhbmRsZSBoZWFkZXIgKi8KKwlobmRsLT5kbS5obmV4dCA9IGhuZGwtPmRtLmhwcmV2ID0gaG5kbDsJLyogY2lyY3VsYXIgbGlzdCAqLworCWhuZGwtPmRtLmhyb290ID0gTlVMTDsKKwlobmRsLT5kbS5kYnRoaXMgPSAwOworCWRsdGhpcy0+bXloYW5kbGUgPSBobmRsOwkvKiBzYXZlIGF3YXkgZm9yIHJldHVybiAqLworCS8qIHBvaW50ZXIgdG8gdGhlIHNlY3Rpb24gbGlzdCBvZiBhbGxvY2F0ZWQgc2VjdGlvbnMgKi8KKwlkbHRoaXMtPmxkcl9zZWN0aW9ucyA9IGFzZWNzID0gaG5kbC0+c2VjbnM7CisJLyogKiBJbnNlcnQgbmFtZXMgaW50byBhbGwgc2VjdGlvbnMsIG1ha2UgY29waWVzIG9mCisJICAgdGhlIHNlY3Rpb25zIHdlIGFsbG9jYXRlICovCisJc2hwID0gZGx0aGlzLT5zZWN0X2hkcnM7CisJZm9yIChjdXJyX3NlY3QgPSAwOyBjdXJyX3NlY3QgPCBuc2VjczsgY3Vycl9zZWN0KyspIHsKKwkJdTMyIHNvZmZzZXQgPSBzaHAtPmRzX29mZnNldDsKKyNpZiBCSVRTX1BFUl9BVSA8PSBCSVRTX1BFUl9CWVRFCisJCS8qIGF0dGVtcHQgdG8gaW5zZXJ0IHRoZSBuYW1lIG9mIHRoaXMgc2VjdGlvbiAqLworCQlpZiAoc29mZnNldCA8IGRsdGhpcy0+ZGZpbGVfaGRyLmRmX3N0cnRhYl9zaXplKQorCQkJKChzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqKXNocCktPm5hbWUgPQorCQkJCWRsdGhpcy0+c3RyX2hlYWQgKyBzb2Zmc2V0OworCQllbHNlIHsKKwkJCWRsb2FkX2Vycm9yKGRsdGhpcywgIkJhZCBuYW1lIG9mZnNldCBpbiBzZWN0aW9uICVkIiwKKwkJCQkgICAgY3Vycl9zZWN0KTsKKwkJCSgoc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKilzaHApLT5uYW1lID0gTlVMTDsKKwkJfQorI2VuZGlmCisJCS8qIGFsbG9jYXRlIHRhcmdldCBzdG9yYWdlIGZvciBzZWN0aW9ucyB0aGF0IHJlcXVpcmUgaXQgKi8KKwkJaWYgKGRzX25lZWRzX2FsbG9jYXRpb24oc2hwKSkgeworCQkJKmFzZWNzID0gKihzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqKXNocDsKKwkJCWFzZWNzLT5jb250ZXh0ID0gMDsJLyogemVybyB0aGUgY29udGV4dCBmaWVsZCAqLworI2lmIEJJVFNfUEVSX0FVID4gQklUU19QRVJfQllURQorCQkJYXNlY3MtPm5hbWUgPSB1bnBhY2tfbmFtZShkbHRoaXMsIHNvZmZzZXQpOworCQkJZGx0aGlzLT5kZWJ1Z19zdHJpbmdfc2l6ZSA9IHNvZmZzZXQgKyBkbHRoaXMtPnRlbXBfbGVuOworI2Vsc2UKKwkJCWRsdGhpcy0+ZGVidWdfc3RyaW5nX3NpemUgPSBzb2Zmc2V0OworI2VuZGlmCisJCQlpZiAoZGx0aGlzLT5teWFsbG9jICE9IE5VTEwpIHsKKwkJCQlpZiAoIWRsdGhpcy0+bXlhbGxvYy0+CisJCQkJICAgIGRsb2FkX2FsbG9jYXRlKGRsdGhpcy0+bXlhbGxvYywgYXNlY3MsCisJCQkJCQkgICBkc19hbGlnbm1lbnQoYXNlY3MtPnR5cGUpKSkgeworCQkJCQlkbG9hZF9lcnJvcihkbHRoaXMsIHRndGFsbG9jLAorCQkJCQkJICAgIGFzZWNzLT5uYW1lLCBhc2Vjcy0+c2l6ZSk7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQl9CisJCQkvKiBrZWVwIGFkZHJlc3MgZGVsdGFzIGluIG9yaWdpbmFsIHNlY3Rpb24gdGFibGUgKi8KKwkJCXNocC0+ZHNfdmFkZHIgPSBhc2Vjcy0+bG9hZF9hZGRyIC0gc2hwLT5kc192YWRkcjsKKwkJCXNocC0+ZHNfcGFkZHIgPSBhc2Vjcy0+cnVuX2FkZHIgLSBzaHAtPmRzX3BhZGRyOworCQkJZGx0aGlzLT5hbGxvY2F0ZWRfc2Vjbl9jb3VudCArPSAxOworCQl9CQkvKiBhbGxvY2F0ZSB0YXJnZXQgc3RvcmFnZSAqLworCQlzaHAgKz0gMTsKKwkJYXNlY3MgKz0gMTsKKwl9CisjaWYgQklUU19QRVJfQVUgPD0gQklUU19QRVJfQllURQorCWRsdGhpcy0+ZGVidWdfc3RyaW5nX3NpemUgKz0KKwkgICAgc3RybGVuKGRsdGhpcy0+c3RyX2hlYWQgKyBkbHRoaXMtPmRlYnVnX3N0cmluZ19zaXplKSArIDE7CisjZW5kaWYKK30JCQkJLyogYWxsb2NhdGUgc2VjdGlvbnMgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb2NlZHVyZSBzZWN0aW9uX3RhYmxlX2ZyZWUKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJbm9uZQorICoKKyAqIEVmZmVjdDoKKyAqCUZyZWVzIGFueSBzdGF0ZSB1c2VkIGJ5IHRoZSBzeW1ib2wgdGFibGUuCisgKgorICogV0FSTklORzoKKyAqCVRoaXMgcm91dGluZSBpcyBub3QgYWxsb3dlZCB0byBkZWNsYXJlIGVycm9ycyEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworc3RhdGljIHZvaWQgc2VjdGlvbl90YWJsZV9mcmVlKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzKQoreworCXN0cnVjdCBkb2ZmX3Njbmhkcl90ICpzaHA7CisKKwlzaHAgPSBkbHRoaXMtPnNlY3RfaGRyczsKKwlpZiAoc2hwKQorCQlkbHRoaXMtPm15c3ltLT5kbG9hZF9kZWFsbG9jYXRlKGRsdGhpcy0+bXlzeW0sIHNocCk7CisKK30JCQkJLyogc2VjdGlvbl90YWJsZV9mcmVlICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm9jZWR1cmUgZGxvYWRfc3RyaW5ncworICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgc2VjX25hbWVzX29ubHkgICBJZiB0cnVlIG9ubHkgcmVhZCBpbiB0aGUgInNlY3Rpb24gbmFtZXMiCisgKgkJICAgICBwb3J0aW9uIG9mIHRoZSBzdHJpbmcgdGFibGUKKyAqCisgKiBFZmZlY3Q6CisgKglMb2FkcyB0aGUgRE9GRiBzdHJpbmcgdGFibGUgaW50byBtZW1vcnkuIERPRkYga2VlcHMgYWxsIHN0cmluZ3MgaW4gYQorICogYmlnIHVuc29ydGVkIGFycmF5LiAgV2UganVzdCByZWFkIHRoYXQgYXJyYXkgaW50byBtZW1vcnkgaW4gYnVsay4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworc3RhdGljIGNvbnN0IGNoYXIgc3RyaW5ndGJsW10gPSB7ICJzdHJpbmcgdGFibGUiIH07CisKK3ZvaWQgZGxvYWRfc3RyaW5ncyhzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcywgYm9vbCBzZWNfbmFtZXNfb25seSkKK3sKKwl1MzIgc3NpejsKKwljaGFyICpzdHJidWY7CisKKwlpZiAoc2VjX25hbWVzX29ubHkpIHsKKwkJc3NpeiA9IEJZVEVfVE9fSE9TVChET0ZGX0FMSUdOCisJCQkJICAgIChkbHRoaXMtPmRmaWxlX2hkci5kZl9zY25fbmFtZV9zaXplKSk7CisJfSBlbHNlIHsKKwkJc3NpeiA9IEJZVEVfVE9fSE9TVChET0ZGX0FMSUdOCisJCQkJICAgIChkbHRoaXMtPmRmaWxlX2hkci5kZl9zdHJ0YWJfc2l6ZSkpOworCX0KKwlpZiAoc3NpeiA9PSAwKQorCQlyZXR1cm47CisKKwkvKiBnZXQgc29tZSBtZW1vcnkgZm9yIHRoZSBzdHJpbmcgdGFibGUgKi8KKyNpZiBCSVRTX1BFUl9BVSA+IEJJVFNfUEVSX0JZVEUKKwlzdHJidWYgPSAoY2hhciAqKWRsdGhpcy0+bXlzeW0tPmRsb2FkX2FsbG9jYXRlKGRsdGhpcy0+bXlzeW0sIHNzaXogKworCQkJCQkJICAgICAgIGRsdGhpcy0+ZGZpbGVfaGRyLgorCQkJCQkJICAgICAgIGRmX21heF9zdHJfbGVuKTsKKyNlbHNlCisJc3RyYnVmID0gKGNoYXIgKilkbHRoaXMtPm15c3ltLT5kbG9hZF9hbGxvY2F0ZShkbHRoaXMtPm15c3ltLCBzc2l6KTsKKyNlbmRpZgorCWlmIChzdHJidWYgPT0gTlVMTCkgeworCQlETF9FUlJPUihlcnJfYWxsb2MsIHNzaXopOworCQlyZXR1cm47CisJfQorCWRsdGhpcy0+c3RyX2hlYWQgPSBzdHJidWY7CisjaWYgQklUU19QRVJfQVUgPiBCSVRTX1BFUl9CWVRFCisJZGx0aGlzLT5zdHJfdGVtcCA9IHN0cmJ1ZiArIHNzaXo7CisjZW5kaWYKKwkvKiByZWFkIGluIHRoZSBzdHJpbmdzIGFuZCB2ZXJpZnkgdGhlbSAqLworCWlmICgodW5zaWduZWQpKGRsdGhpcy0+c3RybS0+cmVhZF9idWZmZXIoZGx0aGlzLT5zdHJtLCBzdHJidWYsCisJCQkJCQkgc3NpeikpICE9IHNzaXopIHsKKwkJRExfRVJST1IocmVhZHN0cm0sIHN0cmluZ3RibCk7CisJfQorCS8qIGlmIHdlIG5lZWQgdG8gZml4IHVwIGJ5dGUgb3JkZXIsIGRvIGl0IG5vdyAqLworI2lmbmRlZiBfQklHX0VORElBTgorCWlmIChkbHRoaXMtPnJlb3JkZXJfbWFwKQorCQlkbG9hZF9yZW9yZGVyKHN0cmJ1Ziwgc3NpeiwgZGx0aGlzLT5yZW9yZGVyX21hcCk7CisKKwlpZiAoKCFzZWNfbmFtZXNfb25seSkgJiYgKH5kbG9hZF9jaGVja3N1bShzdHJidWYsIHNzaXopICE9CisJCQkJICBkbHRoaXMtPnZlcmlmeS5kdl9zdHJfdGFiX2NoZWNrc3VtKSkgeworCQlETF9FUlJPUihlcnJfY2hlY2tzdW0sIHN0cmluZ3RibCk7CisJfQorI2Vsc2UKKwlpZiAoZGx0aGlzLT5kZmlsZV9oZHIuZGZfYnl0ZV9yZXNodWZmbGUgIT0KKwkgICAgSE9TVF9CWVRFX09SREVSKFJFT1JERVJfTUFQKEJZVEVfUkVTSFVGRkxFX1ZBTFVFKSkpIHsKKwkJLyogcHV0IHN0cmluZ3MgaW4gYmlnLWVuZGlhbiBvcmRlciwgbm90IGluIFBDIG9yZGVyICovCisJCWRsb2FkX3Jlb3JkZXIoc3RyYnVmLCBzc2l6LAorCQkJICAgICAgSE9TVF9CWVRFX09SREVSKGRsdGhpcy0+CisJCQkJCSAgICAgIGRmaWxlX2hkci5kZl9ieXRlX3Jlc2h1ZmZsZSkpOworCX0KKwlpZiAoKCFzZWNfbmFtZXNfb25seSkgJiYgKH5kbG9hZF9yZXZlcnNlX2NoZWNrc3VtKHN0cmJ1Ziwgc3NpeikgIT0KKwkJCQkgIGRsdGhpcy0+dmVyaWZ5LmR2X3N0cl90YWJfY2hlY2tzdW0pKSB7CisJCURMX0VSUk9SKGVycl9jaGVja3N1bSwgc3RyaW5ndGJsKTsKKwl9CisjZW5kaWYKK30JCQkJLyogZGxvYWRfc3RyaW5ncyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIHN0cmluZ190YWJsZV9mcmVlCisgKgorICogUGFyYW1ldGVyczoKKyAqCW5vbmUKKyAqCisgKiBFZmZlY3Q6CisgKglGcmVlcyBhbnkgc3RhdGUgdXNlZCBieSB0aGUgc3RyaW5nIHRhYmxlLgorICoKKyAqIFdBUk5JTkc6CisgKglUaGlzIHJvdXRpbmUgaXMgbm90IGFsbG93ZWQgdG8gZGVjbGFyZSBlcnJvcnMhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCitzdGF0aWMgdm9pZCBzdHJpbmdfdGFibGVfZnJlZShzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcykKK3sKKwlpZiAoZGx0aGlzLT5zdHJfaGVhZCkKKwkJZGx0aGlzLT5teXN5bS0+ZGxvYWRfZGVhbGxvY2F0ZShkbHRoaXMtPm15c3ltLAorCQkJCQkJZGx0aGlzLT5zdHJfaGVhZCk7CisKK30JCQkJLyogc3RyaW5nX3RhYmxlX2ZyZWUgKi8KKworLyoKKyAqIFN5bWJvbCBUYWJsZSBNYWludGVuYW5jZSBGdW5jdGlvbnMKKyAqCisgKiBDT0ZGIHN5bWJvbHMgYXJlIHJlYWQgYnkgZGxvYWRfc3ltYm9scygpLCB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIKKyAqIHNlY3Rpb25zIGhhdmUgYmVlbiBhbGxvY2F0ZWQuICBTeW1ib2xzIHdoaWNoIG1pZ2h0IGJlIHVzZWQgaW4KKyAqIHJlbG9jYXRpb24gKGllLCBub3QgZGVidWcgaW5mbykgYXJlIHJldGFpbmVkIGluIGFuIGludGVybmFsIHRlbXBvcmFyeQorICogY29tcHJlc3NlZCB0YWJsZSAodHlwZSBsb2NhbF9zeW1ib2wpLiBBIHBhcnRpY3VsYXIgc3ltYm9sIGlzIHJlY292ZXJlZAorICogYnkgaW5kZXggYnkgY2FsbGluZyBkbG9hZF9maW5kX3N5bWJvbCgpLiAgZGxvYWRfZmluZF9zeW1ib2wKKyAqIHJlY29uc3RydWN0cyBhIG1vcmUgZXhwbGljaXQgcmVwcmVzZW50YXRpb24gKHR5cGUgU0xPVFZFQykgd2hpY2ggaXMKKyAqIHVzZWQgYnkgcmVsb2MuYworICovCisvKiByZWFsIHNpemUgb2YgZGVidWcgaGVhZGVyICovCisjZGVmaW5lIERCR19IRFJfU0laRSAoc2l6ZW9mKHN0cnVjdCBkbGxfbW9kdWxlKSAtIHNpemVvZihzdHJ1Y3QgZGxsX3NlY3QpKQorCitzdGF0aWMgY29uc3QgY2hhciBzeW1fZXJyaWRbXSA9IHsgInN5bWJvbCIgfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm9jZWR1cmUgZGxvYWRfc3ltYm9scworICoKKyAqIFBhcmFtZXRlcnM6CisgKglub25lCisgKgorICogRWZmZWN0OgorICoJUmVhZHMgaW4gc3ltYm9scyBhbmQgcmV0YWlucyBvbmVzIHRoYXQgbWlnaHQgYmUgbmVlZGVkIGZvciByZWxvY2F0aW9uCisgKiBwdXJwb3Nlcy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogc2l6ZSBvZiBzeW1ib2wgYnVmZmVyIG5vIGJpZ2dlciB0aGFuIHRhcmdldCBkYXRhIGJ1ZmZlciwgdG8gbGltaXQgc3RhY2sKKyAqIHVzYWdlICovCisjZGVmaW5lIE1ZX1NZTV9CVUZfU0laIChCWVRFX1RPX0hPU1QoSU1BR0VfUEFDS0VUX1NJWkUpL1wKKwkJCXNpemVvZihzdHJ1Y3QgZG9mZl9zeW1lbnRfdCkpCisKK3N0YXRpYyB2b2lkIGRsb2FkX3N5bWJvbHMoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMpCit7CisJdTMyIHN5bV9jb3VudCwgc2l6LCBkc2l6LCBzeW1ib2xzX2xlZnQ7CisJdTMyIGNoZWNrczsKKwlzdHJ1Y3QgbG9jYWxfc3ltYm9sICpzcDsKKwlzdHJ1Y3QgZHlubG9hZF9zeW1ib2wgKnN5bXA7CisJc3RydWN0IGR5bmxvYWRfc3ltYm9sICpuZXdzeW07CisKKwlzeW1fY291bnQgPSBkbHRoaXMtPmRmaWxlX2hkci5kZl9ub19zeW1zOworCWlmIChzeW1fY291bnQgPT0gMCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBXZSBrZWVwIGEgbG9jYWwgc3ltYm9sIHRhYmxlIGZvciBhbGwgb2YgdGhlIHN5bWJvbHMgaW4gdGhlIGlucHV0LgorCSAqIFRoaXMgdGFibGUgY29udGFpbnMgb25seSBzZWN0aW9uICYgdmFsdWUgaW5mbywgYXMgd2UgZG8gbm90IGhhdmUKKwkgKiB0byBkbyBhbnkgbmFtZSBwcm9jZXNzaW5nIGZvciBsb2NhbHMuICBXZSByZXVzZSB0aGlzIHN0b3JhZ2UKKwkgKiBhcyBhIHRlbXBvcmFyeSBmb3IgLmRsbHZpZXcgcmVjb3JkIGNvbnN0cnVjdGlvbi4KKwkgKiBBbGxvY2F0ZSBzdG9yYWdlIGZvciB0aGUgd2hvbGUgdGFibGUuICBBZGQgMSB0byB0aGUgc2VjdGlvbiBjb3VudAorCSAqIGluIGNhc2UgYSB0cmFtcG9saW5lIHNlY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYXMgd2VsbCBhcyB0aGUKKwkgKiBzaXplIG9mIHRoZSB0cmFtcG9saW5lIHNlY3Rpb24gbmFtZSBzbyBETExWaWV3IGRvZW5zJ3QgZ2V0IGxvc3QuCisJICovCisKKwlzaXogPSBzeW1fY291bnQgKiBzaXplb2Yoc3RydWN0IGxvY2FsX3N5bWJvbCk7CisJZHNpeiA9IERCR19IRFJfU0laRSArCisJICAgIChzaXplb2Yoc3RydWN0IGRsbF9zZWN0KSAqIGRsdGhpcy0+YWxsb2NhdGVkX3NlY25fY291bnQpICsKKwkgICAgQllURV9UT19IT1NUX1JPVU5EKGRsdGhpcy0+ZGVidWdfc3RyaW5nX3NpemUgKyAxKTsKKwlpZiAoZHNpeiA+IHNpeikKKwkJc2l6ID0gZHNpejsJLyogbGFyZ2VyIG9mIHN5bWJvbHMgYW5kIC5kbGx2aWV3IHRlbXAgKi8KKwlzcCA9IChzdHJ1Y3QgbG9jYWxfc3ltYm9sICopZGx0aGlzLT5teXN5bS0+ZGxvYWRfYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwKKwkJCQkJCQkJICBzaXopOworCWlmICghc3ApIHsKKwkJRExfRVJST1IoZXJyX2FsbG9jLCBzaXopOworCQlyZXR1cm47CisJfQorCWRsdGhpcy0+bG9jYWxfc3ltdGFiID0gc3A7CisJLyogUmVhZCB0aGUgc3ltYm9scyBpbiB0aGUgaW5wdXQsIHN0b3JlIHRoZW0gaW4gdGhlIHRhYmxlLCBhbmQgcG9zdCBhbnkKKwkgKiBnbG9iYWxzIHRvIHRoZSBnbG9iYWwgc3ltYm9sIHRhYmxlLiAgSW4gdGhlIHByb2Nlc3MsIGV4dGVybmFscworCSBiZWNvbWUgZGVmaW5lZCBmcm9tIHRoZSBnbG9iYWwgc3ltYm9sIHRhYmxlICovCisJY2hlY2tzID0gZGx0aGlzLT52ZXJpZnkuZHZfc3ltX3RhYl9jaGVja3N1bTsKKwlzeW1ib2xzX2xlZnQgPSBzeW1fY291bnQ7CisJZG8gewkJCS8qIHJlYWQgYWxsIHN5bWJvbHMgKi8KKwkJY2hhciAqc25hbWU7CisJCXUzMiB2YWw7CisJCXMzMiBkZWx0YTsKKwkJc3RydWN0IGRvZmZfc3ltZW50X3QgKmlucHV0X3N5bTsKKwkJdW5zaWduZWQgc3ltc19pbl9idWY7CisJCXN0cnVjdCBkb2ZmX3N5bWVudF90IG15X3N5bV9idWZbTVlfU1lNX0JVRl9TSVpdOworCQlpbnB1dF9zeW0gPSBteV9zeW1fYnVmOworCQlzeW1zX2luX2J1ZiA9IHN5bWJvbHNfbGVmdCA+IE1ZX1NZTV9CVUZfU0laID8KKwkJICAgIE1ZX1NZTV9CVUZfU0laIDogc3ltYm9sc19sZWZ0OworCQlzaXogPSBzeW1zX2luX2J1ZiAqIHNpemVvZihzdHJ1Y3QgZG9mZl9zeW1lbnRfdCk7CisJCWlmIChkbHRoaXMtPnN0cm0tPnJlYWRfYnVmZmVyKGRsdGhpcy0+c3RybSwgaW5wdXRfc3ltLCBzaXopICE9CisJCSAgICBzaXopIHsKKwkJCURMX0VSUk9SKHJlYWRzdHJtLCBzeW1fZXJyaWQpOworCQkJcmV0dXJuOworCQl9CisJCWlmIChkbHRoaXMtPnJlb3JkZXJfbWFwKQorCQkJZGxvYWRfcmVvcmRlcihpbnB1dF9zeW0sIHNpeiwgZGx0aGlzLT5yZW9yZGVyX21hcCk7CisKKwkJY2hlY2tzICs9IGRsb2FkX2NoZWNrc3VtKGlucHV0X3N5bSwgc2l6KTsKKwkJZG8gewkJLyogcHJvY2VzcyBzeW1ib2xzIGluIGJ1ZmZlciAqLworCQkJc3ltYm9sc19sZWZ0IC09IDE7CisJCQkvKiBhdHRlbXB0IHRvIGRlcml2ZSB0aGUgbmFtZSBvZiB0aGlzIHN5bWJvbCAqLworCQkJc25hbWUgPSBOVUxMOworCQkJaWYgKGlucHV0X3N5bS0+ZG5fb2Zmc2V0ID4gMCkgeworI2lmIEJJVFNfUEVSX0FVIDw9IEJJVFNfUEVSX0JZVEUKKwkJCQlpZiAoKHUzMikgaW5wdXRfc3ltLT5kbl9vZmZzZXQgPAorCQkJCSAgICBkbHRoaXMtPmRmaWxlX2hkci5kZl9zdHJ0YWJfc2l6ZSkKKwkJCQkJc25hbWUgPSBkbHRoaXMtPnN0cl9oZWFkICsKKwkJCQkJICAgIEJZVEVfVE9fSE9TVChpbnB1dF9zeW0tPmRuX29mZnNldCk7CisJCQkJZWxzZQorCQkJCQlkbG9hZF9lcnJvcihkbHRoaXMsCisJCQkJCQkgICAgIkJhZCBuYW1lIG9mZnNldCBpbiBzeW1ib2wgIgorCQkJCQkJICAgICIgJWQiLCBzeW1ib2xzX2xlZnQpOworI2Vsc2UKKwkJCQlzbmFtZSA9IHVucGFja19uYW1lKGRsdGhpcywKKwkJCQkJCSAgICBpbnB1dF9zeW0tPmRuX29mZnNldCk7CisjZW5kaWYKKwkJCX0KKwkJCXZhbCA9IGlucHV0X3N5bS0+ZG5fdmFsdWU7CisJCQlkZWx0YSA9IDA7CisJCQlzcC0+c2NsYXNzID0gaW5wdXRfc3ltLT5kbl9zY2xhc3M7CisJCQlzcC0+c2Vjbm4gPSBpbnB1dF9zeW0tPmRuX3NjbnVtOworCQkJLyogaWYgdGhpcyBpcyBhbiB1bmRlZmluZWQgc3ltYm9sLAorCQkJICogZGVmaW5lIGl0IChvciBmYWlsKSBub3cgKi8KKwkJCWlmIChzcC0+c2Vjbm4gPT0gRE5fVU5ERUYpIHsKKwkJCQkvKiBwb2ludGxlc3MgZm9yIHN0YXRpYyB1bmRlZmluZWQgKi8KKwkJCQlpZiAoaW5wdXRfc3ltLT5kbl9zY2xhc3MgIT0gRE5fRVhUKQorCQkJCQlnb3RvIGxvb3BfY29udDsKKworCQkJCS8qIHRyeSB0byBkZWZpbmUgc3ltYm9sIGZyb20gcHJldmlvdXNseQorCQkJCSAqIGxvYWRlZCBpbWFnZXMgKi8KKwkJCQlzeW1wID0gZGx0aGlzLT5teXN5bS0+ZmluZF9tYXRjaGluZ19zeW1ib2wKKwkJCQkgICAgKGRsdGhpcy0+bXlzeW0sIHNuYW1lKTsKKwkJCQlpZiAoIXN5bXApIHsKKwkJCQkJRExfRVJST1IKKwkJCQkJICAgICgiVW5kZWZpbmVkIGV4dGVybmFsIHN5bWJvbCAlcyIsCisJCQkJCSAgICAgc25hbWUpOworCQkJCQlnb3RvIGxvb3BfY29udDsKKwkJCQl9CisJCQkJdmFsID0gZGVsdGEgPSBzeW1wLT52YWx1ZTsKKyNpZmRlZiBFTkFCTEVfVFJBTVBfREVCVUcKKwkJCQlkbG9hZF9zeW1zX2Vycm9yKGRsdGhpcy0+bXlzeW0sCisJCQkJCQkgIj09PT4gZXh0IHN5bSBbJXNdIGF0ICV4IiwKKwkJCQkJCSBzbmFtZSwgdmFsKTsKKyNlbmRpZgorCisJCQkJZ290byBsb29wX2NvbnQ7CisJCQl9CisJCQkvKiBzeW1ib2wgZGVmaW5lZCBieSB0aGlzIG1vZHVsZSAqLworCQkJaWYgKHNwLT5zZWNubiA+IDApIHsKKwkJCQkvKiBzeW1ib2wgcmVmZXJlbmNlcyBhIHNlY3Rpb24gKi8KKwkJCQlpZiAoKHVuc2lnbmVkKXNwLT5zZWNubiA8PQorCQkJCSAgICBkbHRoaXMtPmFsbG9jYXRlZF9zZWNuX2NvdW50KSB7CisJCQkJCS8qIHNlY3Rpb24gd2FzIGFsbG9jYXRlZCAqLworCQkJCQlzdHJ1Y3QgZG9mZl9zY25oZHJfdCAqc3JlZnAgPQorCQkJCQkgICAgJmRsdGhpcy0+c2VjdF9oZHJzW3NwLT5zZWNubiAtIDFdOworCisJCQkJCWlmIChpbnB1dF9zeW0tPmRuX3NjbGFzcyA9PQorCQkJCQkgICAgRE5fU1RBVExBQiB8fAorCQkJCQkgICAgaW5wdXRfc3ltLT5kbl9zY2xhc3MgPT0gRE5fRVhUTEFCKSB7CisJCQkJCQkvKiBsb2FkICovCisJCQkJCQlkZWx0YSA9IHNyZWZwLT5kc192YWRkcjsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCS8qIHJ1biAqLworCQkJCQkJZGVsdGEgPSBzcmVmcC0+ZHNfcGFkZHI7CisJCQkJCX0KKwkJCQkJdmFsICs9IGRlbHRhOworCQkJCX0KKwkJCQlnb3RvIGxvb3BfaXRyOworCQkJfQorCQkJLyogVGhpcyBzeW1ib2wgaXMgYW4gYWJzb2x1dGUgc3ltYm9sICovCisJCQlpZiAoc3AtPnNlY25uID09IEROX0FCUyAmJiAoKHNwLT5zY2xhc3MgPT0gRE5fRVhUKSB8fAorCQkJCQkJICAgIChzcC0+c2NsYXNzID09CisJCQkJCQkgICAgIEROX0VYVExBQikpKSB7CisJCQkJc3ltcCA9CisJCQkJICAgIGRsdGhpcy0+bXlzeW0tPmZpbmRfbWF0Y2hpbmdfc3ltYm9sKGRsdGhpcy0+CisJCQkJCQkJCQlteXN5bSwKKwkJCQkJCQkJCXNuYW1lKTsKKwkJCQlpZiAoIXN5bXApCisJCQkJCWdvdG8gbG9vcF9pdHI7CisJCQkJLyogVGhpcyBhYnNvbHV0ZSBzeW1ib2wgaXMgYWxyZWFkeSBkZWZpbmVkLiAqLworCQkJCWlmIChzeW1wLT52YWx1ZSA9PSBpbnB1dF9zeW0tPmRuX3ZhbHVlKSB7CisJCQkJCS8qIElmIHN5bWJvbCB2YWx1ZXMgYXJlIGVxdWFsLCBjb250aW51ZQorCQkJCQkgKiBidXQgZG9uJ3QgYWRkIHRvIHRoZSBnbG9iYWwgc3ltYm9sCisJCQkJCSAqIHRhYmxlICovCisJCQkJCXNwLT52YWx1ZSA9IHZhbDsKKwkJCQkJc3AtPmRlbHRhID0gZGVsdGE7CisJCQkJCXNwICs9IDE7CisJCQkJCWlucHV0X3N5bSArPSAxOworCQkJCQljb250aW51ZTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBJZiBzeW1ib2wgdmFsdWVzIGFyZSBub3QgZXF1YWwsCisJCQkJCSAqIHJldHVybiB3aXRoIHJlZGVmaW5pdGlvbiBlcnJvciAqLworCQkJCQlETF9FUlJPUigiQWJzb2x1dGUgc3ltYm9sICVzIGlzICIKKwkJCQkJCSAiZGVmaW5lZCBtdWx0aXBsZSB0aW1lcyB3aXRoICIKKwkJCQkJCSAiZGlmZmVyZW50IHZhbHVlcyIsIHNuYW1lKTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCX0KK2xvb3BfaXRyOgorCQkJLyogaWYgdGhpcyBpcyBhIGdsb2JhbCBzeW1ib2wsIHBvc3QgaXQgdG8gdGhlCisJCQkgKiBnbG9iYWwgdGFibGUgKi8KKwkJCWlmIChpbnB1dF9zeW0tPmRuX3NjbGFzcyA9PSBETl9FWFQgfHwKKwkJCSAgICBpbnB1dF9zeW0tPmRuX3NjbGFzcyA9PSBETl9FWFRMQUIpIHsKKwkJCQkvKiBLZWVwIHRoaXMgZ2xvYmFsIHN5bWJvbCBmb3Igc3Vic2VxdWVudAorCQkJCSAqIG1vZHVsZXMuIERvbid0IGNvbXBsYWluIG9uIGVycm9yLCB0byBhbGxvdworCQkJCSAqIHN5bWJvbCBBUEkgdG8gc3VwcHJlc3MgZ2xvYmFsIHN5bWJvbHMgKi8KKwkJCQlpZiAoIXNuYW1lKQorCQkJCQlnb3RvIGxvb3BfY29udDsKKworCQkJCW5ld3N5bSA9IGRsdGhpcy0+bXlzeW0tPmFkZF90b19zeW1ib2xfdGFibGUKKwkJCQkgICAgKGRsdGhpcy0+bXlzeW0sIHNuYW1lLAorCQkJCSAgICAgKHVuc2lnbmVkKWRsdGhpcy0+bXloYW5kbGUpOworCQkJCWlmIChuZXdzeW0pCisJCQkJCW5ld3N5bS0+dmFsdWUgPSB2YWw7CisKKwkJCX0JLyogZ2xvYmFsICovCitsb29wX2NvbnQ6CisJCQlzcC0+dmFsdWUgPSB2YWw7CisJCQlzcC0+ZGVsdGEgPSBkZWx0YTsKKwkJCXNwICs9IDE7CisJCQlpbnB1dF9zeW0gKz0gMTsKKwkJfSB3aGlsZSAoKHN5bXNfaW5fYnVmIC09IDEpID4gMCk7CS8qIHByb2Nlc3Mgc3ltIGluIGJ1ZiAqLworCX0gd2hpbGUgKHN5bWJvbHNfbGVmdCA+IDApOwkvKiByZWFkIGFsbCBzeW1ib2xzICovCisJaWYgKH5jaGVja3MpCisJCWRsb2FkX2Vycm9yKGRsdGhpcywgIkNoZWNrc3VtIG9mIHN5bWJvbHMgZmFpbGVkIik7CisKK30JCQkJLyogZGxvYWRfc3ltYm9scyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb2NlZHVyZSBzeW1ib2xfdGFibGVfZnJlZQorICoKKyAqIFBhcmFtZXRlcnM6CisgKglub25lCisgKgorICogRWZmZWN0OgorICoJRnJlZXMgYW55IHN0YXRlIHVzZWQgYnkgdGhlIHN5bWJvbCB0YWJsZS4KKyAqCisgKiBXQVJOSU5HOgorICoJVGhpcyByb3V0aW5lIGlzIG5vdCBhbGxvd2VkIHRvIGRlY2xhcmUgZXJyb3JzIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KK3N0YXRpYyB2b2lkIHN5bWJvbF90YWJsZV9mcmVlKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzKQoreworCWlmIChkbHRoaXMtPmxvY2FsX3N5bXRhYikgeworCQlpZiAoZGx0aGlzLT5kbG9hZF9lcnJjb3VudCkgewkvKiBibG93IG9mZiBvdXIgc3ltYm9scyAqLworCQkJZGx0aGlzLT5teXN5bS0+cHVyZ2Vfc3ltYm9sX3RhYmxlKGRsdGhpcy0+bXlzeW0sCisJCQkJCQkJICAodW5zaWduZWQpCisJCQkJCQkJICBkbHRoaXMtPm15aGFuZGxlKTsKKwkJfQorCQlkbHRoaXMtPm15c3ltLT5kbG9hZF9kZWFsbG9jYXRlKGRsdGhpcy0+bXlzeW0sCisJCQkJCQlkbHRoaXMtPmxvY2FsX3N5bXRhYik7CisJfQorfQkJCQkvKiBzeW1ib2xfdGFibGVfZnJlZSAqLworCisvKiAuY2luaXQgUHJvY2Vzc2luZworICoKKyAqIFRoZSBkeW5hbWljIGxvYWRlciBkb2VzIC5jaW5pdCBpbnRlcnByZXRhdGlvbi4gIGNsb2FkX2Npbml0KCkKKyAqIGFjdHMgYXMgYSBzcGVjaWFsIHdyaXRlLXRvLXRhcmdldCBmdW5jdGlvbiwgaW4gdGhhdCBpdCB0YWtlcyByZWxvY2F0ZWQKKyAqIGRhdGEgZnJvbSB0aGUgbm9ybWFsIGRhdGEgZmxvdywgYW5kIGludGVycHJldHMgaXQgYXMgLmNpbml0IGFjdGlvbnMuCisgKiBCZWNhdXNlIHRoZSBub3JtYWwgZGF0YSBmbG93IGRvZXMgbm90ICBuZWNlc3NhcmlseSBwcm9jZXNzIHRoZSB3aG9sZQorICogLmNpbml0IHNlY3Rpb24gaW4gb25lIGJ1ZmZlciwgY2xvYWRfY2luaXQoKSBtdXN0IGJlIHByZXBhcmVkIHRvCisgKiBpbnRlcnByZXQgdGhlIGRhdGEgcGllY2VtZWFsLiAgQSBzdGF0ZSBtYWNoaW5lIGlzIHVzZWQgZm9yIHRoaXMKKyAqIHB1cnBvc2UuCisgKi8KKworLyogVGhlIGZvbGxvd2luZyBhcmUgb25seSBmb3IgdXNlIGJ5IHJlbG9jLmMgYW5kIHRoaW5ncyBpdCBjYWxscyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvIGNpbml0X2luZm9faW5pdCA9IHsgY2luaXRuYW1lLCAwLCAwLAorCShsZHJfYWRkciktMSwgMCwgRExPQURfQlNTLCAwCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIGNsb2FkX2Npbml0CisgKgorICogUGFyYW1ldGVyczoKKyAqCWlwYWNrZXQJCVBvaW50ZXIgdG8gZGF0YSBwYWNrZXQgdG8gYmUgbG9hZGVkCisgKgorICogRWZmZWN0OgorICoJSW50ZXJwcmV0cyB0aGUgZGF0YSBpbiB0aGUgYnVmZmVyIGFzIC5jaW5pdCBkYXRhLCBhbmQgcGVyZm9ybXMgdGhlCisgKiBhcHByb3ByaWF0ZSBpbml0aWFsaXphdGlvbnMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KK3N0YXRpYyB2b2lkIGNsb2FkX2Npbml0KHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzLAorCQkJc3RydWN0IGltYWdlX3BhY2tldF90ICppcGFja2V0KQoreworI2lmIFREQVRBX1RPX0hPU1QoQ0lOSVRfQ09VTlQpKkJJVFNfUEVSX0FVID4gMTYKKwlzMzIgaW5pdF9jb3VudCwgbGVmdDsKKyNlbHNlCisJczE2IGluaXRfY291bnQsIGxlZnQ7CisjZW5kaWYKKwl1bnNpZ25lZCBjaGFyICpwa3RwID0gaXBhY2tldC0+aW1nX2RhdGE7CisJdW5zaWduZWQgY2hhciAqcGt0ZW5kID0gcGt0cCArIEJZVEVfVE9fSE9TVF9ST1VORChpcGFja2V0LT5wYWNrZXRfc2l6ZSk7CisJaW50IHRlbXA7CisJbGRyX2FkZHIgYXRtcDsKKwlzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyBjaW5pdF9pbmZvOworCisJLyogIFBST0NFU1MgQUxMIFRIRSBJTklUSUFMSVpBVElPTiBSRUNPUkRTIFRIRSBCVUZGRVIuICovCisJd2hpbGUgKHRydWUpIHsKKwkJbGVmdCA9IHBrdGVuZCAtIHBrdHA7CisJCXN3aXRjaCAoZGx0aGlzLT5jaW5pdF9zdGF0ZSkgeworCQljYXNlIENJX0NPVU5UOgkvKiBjb3VudCBmaWVsZCAqLworCQkJaWYgKGxlZnQgPCBUREFUQV9UT19IT1NUKENJTklUX0NPVU5UKSkKKwkJCQlnb3RvIGxvb3BleGl0OworCQkJdGVtcCA9IGRsb2FkX3VucGFjayhkbHRoaXMsICh0Z3RfYXVfdCAqKSBwa3RwLAorCQkJCQkgICAgQ0lOSVRfQ09VTlQgKiBUREFUQV9BVV9CSVRTLCAwLAorCQkJCQkgICAgUk9QX1NHTik7CisJCQlwa3RwICs9IFREQVRBX1RPX0hPU1QoQ0lOSVRfQ09VTlQpOworCQkJLyogbmVnYXRpdmUgc2lnbmlmaWVzIEJTUyB0YWJsZSwgemVybyBtZWFucyBkb25lICovCisJCQlpZiAodGVtcCA8PSAwKSB7CisJCQkJZGx0aGlzLT5jaW5pdF9zdGF0ZSA9IENJX0RPTkU7CisJCQkJYnJlYWs7CisJCQl9CisJCQlkbHRoaXMtPmNpbml0X2NvdW50ID0gdGVtcDsKKwkJCWRsdGhpcy0+Y2luaXRfc3RhdGUgPSBDSV9BRERSRVNTOworCQkJYnJlYWs7CisjaWYgQ0lOSVRfQUxJR04gPCBDSU5JVF9BRERSRVNTCisJCWNhc2UgQ0lfUEFSVEFERFJFU1M6CisJCQlwa3RwIC09IFREQVRBX1RPX0hPU1QoQ0lOSVRfQUxJR04pOworCQkJLyogYmFjayB1cCBwb2ludGVyIGludG8gc3BhY2UgY291cnRlc3kgb2YgY2FsbGVyICovCisJCQkqKHVpbnQxNl90ICopIHBrdHAgPSBkbHRoaXMtPmNpbml0X2FkZHI7CisJCQkvKiBzdHVmZiBpbiBzYXZlZCBiaXRzICAhISBGQUxMIFRIUlUgISEgKi8KKyNlbmRpZgorCQljYXNlIENJX0FERFJFU1M6CS8qIEFkZHJlc3MgZmllbGQgZm9yIGEgY29weSBwYWNrZXQgKi8KKwkJCWlmIChsZWZ0IDwgVERBVEFfVE9fSE9TVChDSU5JVF9BRERSRVNTKSkgeworI2lmIENJTklUX0FMSUdOIDwgQ0lOSVRfQUREUkVTUworCQkJCWlmIChsZWZ0ID09IFREQVRBX1RPX0hPU1QoQ0lOSVRfQUxJR04pKSB7CisJCQkJCS8qIGFkZHJlc3MgYnJva2VuIGludG8gaGFsdmVzICovCisJCQkJCWRsdGhpcy0+Y2luaXRfYWRkciA9ICoodWludDE2X3QgKikgcGt0cDsKKwkJCQkJLyogcmVtZW1iZXIgMXN0IGhhbGYgKi8KKwkJCQkJZGx0aGlzLT5jaW5pdF9zdGF0ZSA9IENJX1BBUlRBRERSRVNTOworCQkJCQlsZWZ0ID0gMDsKKwkJCQl9CisjZW5kaWYKKwkJCQlnb3RvIGxvb3BleGl0OworCQkJfQorCQkJYXRtcCA9IGRsb2FkX3VucGFjayhkbHRoaXMsICh0Z3RfYXVfdCAqKSBwa3RwLAorCQkJCQkgICAgQ0lOSVRfQUREUkVTUyAqIFREQVRBX0FVX0JJVFMsIDAsCisJCQkJCSAgICBST1BfVU5TKTsKKwkJCXBrdHAgKz0gVERBVEFfVE9fSE9TVChDSU5JVF9BRERSRVNTKTsKKyNpZiBDSU5JVF9QQUdFX0JJVFMgPiAwCisJCQlkbHRoaXMtPmNpbml0X3BhZ2UgPSBhdG1wICYKKwkJCSAgICAoKDEgPDwgQ0lOSVRfUEFHRV9CSVRTKSAtIDEpOworCQkJYXRtcCA+Pj0gQ0lOSVRfUEFHRV9CSVRTOworI2Vsc2UKKwkJCWRsdGhpcy0+Y2luaXRfcGFnZSA9IENJTklUX0RFRkFVTFRfUEFHRTsKKyNlbmRpZgorCQkJZGx0aGlzLT5jaW5pdF9hZGRyID0gYXRtcDsKKwkJCWRsdGhpcy0+Y2luaXRfc3RhdGUgPSBDSV9DT1BZOworCQkJYnJlYWs7CisJCWNhc2UgQ0lfQ09QWToJLyogY29weSBiaXRzIHRvIHRoZSB0YXJnZXQgKi8KKwkJCWluaXRfY291bnQgPSBIT1NUX1RPX1REQVRBKGxlZnQpOworCQkJaWYgKGluaXRfY291bnQgPiBkbHRoaXMtPmNpbml0X2NvdW50KQorCQkJCWluaXRfY291bnQgPSBkbHRoaXMtPmNpbml0X2NvdW50OworCQkJaWYgKGluaXRfY291bnQgPT0gMCkKKwkJCQlnb3RvIGxvb3BleGl0OwkvKiBnZXQgbW9yZSBiaXRzICovCisJCQljaW5pdF9pbmZvID0gY2luaXRfaW5mb19pbml0OworCQkJY2luaXRfaW5mby5wYWdlID0gZGx0aGlzLT5jaW5pdF9wYWdlOworCQkJaWYgKCFkbHRoaXMtPm15aW8tPndyaXRlbWVtKGRsdGhpcy0+bXlpbywgcGt0cCwKKwkJCQkJCSAgIFREQVRBX1RPX1RBRERSCisJCQkJCQkgICAoZGx0aGlzLT5jaW5pdF9hZGRyKSwKKwkJCQkJCSAgICZjaW5pdF9pbmZvLAorCQkJCQkJICAgVERBVEFfVE9fSE9TVChpbml0X2NvdW50KSkpIHsKKwkJCQlkbG9hZF9lcnJvcihkbHRoaXMsIGluaXRmYWlsLCAid3JpdGUiLAorCQkJCQkgICAgZGx0aGlzLT5jaW5pdF9hZGRyKTsKKwkJCX0KKwkJCWRsdGhpcy0+Y2luaXRfY291bnQgLT0gaW5pdF9jb3VudDsKKwkJCWlmIChkbHRoaXMtPmNpbml0X2NvdW50IDw9IDApIHsKKwkJCQlkbHRoaXMtPmNpbml0X3N0YXRlID0gQ0lfQ09VTlQ7CisJCQkJaW5pdF9jb3VudCA9IChpbml0X2NvdW50ICsgQ0lOSVRfQUxJR04gLSAxKSAmCisJCQkJICAgIC1DSU5JVF9BTElHTjsKKwkJCQkvKiBhbGlnbiB0byBuZXh0IGluaXQgKi8KKwkJCX0KKwkJCXBrdHAgKz0gVERBVEFfVE9fSE9TVChpbml0X2NvdW50KTsKKwkJCWRsdGhpcy0+Y2luaXRfYWRkciArPSBpbml0X2NvdW50OworCQkJYnJlYWs7CisJCWNhc2UgQ0lfRE9ORToJLyogbm8gbW9yZSAuY2luaXQgdG8gZG8gKi8KKwkJCXJldHVybjsKKwkJfQkJLyogc3dpdGNoIChjaW5pdF9zdGF0ZSkgKi8KKwl9CQkJLyogd2hpbGUgKi8KKworbG9vcGV4aXQ6CisJaWYgKGxlZnQgPiAwKSB7CisJCWRsb2FkX2Vycm9yKGRsdGhpcywgIiVkIGJ5dGVzIGxlZnQgb3ZlciBpbiBjaW5pdCBwYWNrZXQiLCBsZWZ0KTsKKwkJZGx0aGlzLT5jaW5pdF9zdGF0ZSA9IENJX0RPTkU7CS8qIGxlZnQgb3ZlciBieXRlcyBhcmUgYmFkICovCisJfQorfQkJCQkvKiBjbG9hZF9jaW5pdCAqLworCisvKglGdW5jdGlvbnMgdG8gaW50ZXJmYWNlIHRvIHJlbG9jLmMKKyAqCisgKiByZWxvYy5jIGlzIHRoZSByZWxvY2F0aW9uIG1vZHVsZSBib3Jyb3dlZCBmcm9tIHRoZSBsaW5rZXIsIHdpdGgKKyAqIG1pbmltYWwgKHdlIGhvcGUpIGNoYW5nZXMgZm9yIG91ciBwdXJwb3Nlcy4gIGNsb2FkX3NlY3RfZGF0YSgpIGludm9rZXMKKyAqIHRoaXMgbW9kdWxlIG9uIGEgc2VjdGlvbiB0byByZWxvY2F0ZSBhbmQgbG9hZCB0aGUgaW1hZ2UgZGF0YSBmb3IgdGhhdAorICogc2VjdGlvbi4gIFRoZSBhY3R1YWwgcmVhZCBhbmQgd3JpdGUgYWN0aW9ucyBhcmUgc3VwcGxpZWQgYnkgdGhlIGdsb2JhbAorICogcm91dGluZXMgYmVsb3cuCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIHJlbG9jYXRlX3BhY2tldAorICoKKyAqIFBhcmFtZXRlcnM6CisgKglpcGFja2V0CQlQb2ludGVyIHRvIGFuIGltYWdlIHBhY2tldCB0byByZWxvY2F0ZQorICoKKyAqIEVmZmVjdDoKKyAqCVBlcmZvcm1zIHRoZSByZXF1aXJlZCByZWxvY2F0aW9ucyBvbiB0aGUgcGFja2V0LiAgUmV0dXJucyBhIGNoZWNrc3VtCisgKiBvZiB0aGUgcmVsb2NhdGlvbiBvcGVyYXRpb25zLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisjZGVmaW5lIE1ZX1JFTE9DX0JVRl9TSVogOAorLyogY2FyZWZ1bCEgZXhpc3RzIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIGltYWdlIGJ1ZmZlciAqLworc3RhdGljIGludCByZWxvY2F0ZV9wYWNrZXQoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsCisJCQkgICBzdHJ1Y3QgaW1hZ2VfcGFja2V0X3QgKmlwYWNrZXQsCisJCQkgICB1MzIgKmNoZWNrcywgYm9vbCAqdHJhbXBzX2dlbmVyYXRlZCkKK3sKKwl1MzIgcm51bTsKKwkqdHJhbXBzX2dlbmVyYXRlZCA9IGZhbHNlOworCisJcm51bSA9IGlwYWNrZXQtPm51bV9yZWxvY3M7CisJZG8gewkJCS8qIGFsbCByZWxvY3MgKi8KKwkJdW5zaWduZWQgcmluYnVmOworCQlpbnQgc2l6OworCQlzdHJ1Y3QgcmVsb2NfcmVjb3JkX3QgKnJwLCBycmVjW01ZX1JFTE9DX0JVRl9TSVpdOworCQlycCA9IHJyZWM7CisJCXJpbmJ1ZiA9IHJudW0gPiBNWV9SRUxPQ19CVUZfU0laID8gTVlfUkVMT0NfQlVGX1NJWiA6IHJudW07CisJCXNpeiA9IHJpbmJ1ZiAqIHNpemVvZihzdHJ1Y3QgcmVsb2NfcmVjb3JkX3QpOworCQlpZiAoZGx0aGlzLT5zdHJtLT5yZWFkX2J1ZmZlcihkbHRoaXMtPnN0cm0sIHJwLCBzaXopICE9IHNpeikgeworCQkJRExfRVJST1IocmVhZHN0cm0sICJyZWxvY2F0aW9uIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQkvKiByZW9yZGVyIHRoZSBieXRlcyBpZiBuZWVkIGJlICovCisJCWlmIChkbHRoaXMtPnJlb3JkZXJfbWFwKQorCQkJZGxvYWRfcmVvcmRlcihycCwgc2l6LCBkbHRoaXMtPnJlb3JkZXJfbWFwKTsKKworCQkqY2hlY2tzICs9IGRsb2FkX2NoZWNrc3VtKHJwLCBzaXopOworCQlkbyB7CisJCQkvKiBwZXJmb3JtIHRoZSByZWxvY2F0aW9uIG9wZXJhdGlvbiAqLworCQkJZGxvYWRfcmVsb2NhdGUoZGx0aGlzLCAodGd0X2F1X3QgKikgaXBhY2tldC0+aW1nX2RhdGEsCisJCQkJICAgICAgIHJwLCB0cmFtcHNfZ2VuZXJhdGVkLCBmYWxzZSk7CisJCQlycCArPSAxOworCQkJcm51bSAtPSAxOworCQl9IHdoaWxlICgocmluYnVmIC09IDEpID4gMCk7CisJfSB3aGlsZSAocm51bSA+IDApOwkvKiBhbGwgcmVsb2NzICovCisJLyogSWYgdHJhbXBvbGluZShzKSB3ZXJlIGdlbmVyYXRlZCwgd2UgbmVlZCB0byBkbyBhbiB1cGRhdGUgb2YgdGhlCisJICogdHJhbXBvbGluZSBjb3B5IG9mIHRoZSBwYWNrZXQgc2luY2UgYSAybmQgcGhhc2UgcmVsbyB3aWxsIGJlIGRvbmUKKwkgKiBsYXRlci4gKi8KKwlpZiAoKnRyYW1wc19nZW5lcmF0ZWQgPT0gdHJ1ZSkgeworCQlkbG9hZF90cmFtcF9wa3RfdWRwYXRlKGRsdGhpcywKKwkJCQkgICAgICAgKGRsdGhpcy0+aW1hZ2Vfc2VjbiAtCisJCQkJCWRsdGhpcy0+bGRyX3NlY3Rpb25zKSwKKwkJCQkgICAgICAgZGx0aGlzLT5pbWFnZV9vZmZzZXQsIGlwYWNrZXQpOworCX0KKworCXJldHVybiAxOworfQkJCQkvKiBkbG9hZF9yZWFkX3JlbG9jICovCisKKyNkZWZpbmUgSVBIX1NJWkUgKHNpemVvZihzdHJ1Y3QgaW1hZ2VfcGFja2V0X3QpIC0gc2l6ZW9mKHUzMikpCisKKy8qIFZFUlkgZGFuZ2Vyb3VzICovCitzdGF0aWMgY29uc3QgY2hhciBpbWFnZXBha1tdID0geyAiaW1hZ2UgcGFja2V0IiB9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIGRsb2FkX2RhdGEKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJbm9uZQorICoKKyAqIEVmZmVjdDoKKyAqCVJlYWQgaW1hZ2UgZGF0YSBmcm9tIGlucHV0IGZpbGUsIHJlbG9jYXRlIGl0LCBhbmQgZG93bmxvYWQgaXQgdG8gdGhlCisgKgl0YXJnZXQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KK3N0YXRpYyB2b2lkIGRsb2FkX2RhdGEoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMpCit7CisJdTE2IGN1cnJfc2VjdDsKKwlzdHJ1Y3QgZG9mZl9zY25oZHJfdCAqc3B0ciA9IGRsdGhpcy0+c2VjdF9oZHJzOworCXN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICpscHRyID0gZGx0aGlzLT5sZHJfc2VjdGlvbnM7CisjaWZkZWYgT1BUX1pFUk9fQ09QWV9MT0FERVIKKwlib29sIHplcm9fY29weSA9IGZhbHNlOworI2VuZGlmCisJdTggKmRlc3Q7CisKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgaW1hZ2VfcGFja2V0X3QgaXBhY2tldDsKKwkJdTggYnVmcltCWVRFX1RPX0hPU1QoSU1BR0VfUEFDS0VUX1NJWkUpXTsKKwl9IGlidWY7CisKKwkvKiBJbmRpY2F0ZXMgd2hldGhlciBDSU5JVCBwcm9jZXNzaW5nIGhhcyBvY2N1cnJlZCAqLworCWJvb2wgY2luaXRfcHJvY2Vzc2VkID0gZmFsc2U7CisKKwkvKiBMb29wIHRocm91Z2ggdGhlIHNlY3Rpb25zIGFuZCBsb2FkIHRoZW0gb25lIGF0IGEgdGltZS4KKwkgKi8KKwlmb3IgKGN1cnJfc2VjdCA9IDA7IGN1cnJfc2VjdCA8IGRsdGhpcy0+ZGZpbGVfaGRyLmRmX25vX3NjbnM7CisJICAgICBjdXJyX3NlY3QgKz0gMSkgeworCQlpZiAoZHNfbmVlZHNfZG93bmxvYWQoc3B0cikpIHsKKwkJCXMzMiBuaXA7CisJCQlsZHJfYWRkciBpbWFnZV9vZmZzZXQgPSAwOworCQkJLyogc2V0IHJlbG9jYXRpb24gaW5mbyBmb3IgdGhpcyBzZWN0aW9uICovCisJCQlpZiAoY3Vycl9zZWN0IDwgZGx0aGlzLT5hbGxvY2F0ZWRfc2Vjbl9jb3VudCkKKwkJCQlkbHRoaXMtPmRlbHRhX3J1bmFkZHIgPSBzcHRyLT5kc19wYWRkcjsKKwkJCWVsc2UgeworCQkJCWxwdHIgPSAoc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKilzcHRyOworCQkJCWRsdGhpcy0+ZGVsdGFfcnVuYWRkciA9IDA7CisJCQl9CisJCQlkbHRoaXMtPmltYWdlX3NlY24gPSBscHRyOworI2lmIEJJVFNfUEVSX0FVID4gQklUU19QRVJfQllURQorCQkJbHB0ci0+bmFtZSA9IHVucGFja19uYW1lKGRsdGhpcywgc3B0ci0+ZHNfb2Zmc2V0KTsKKyNlbmRpZgorCQkJbmlwID0gc3B0ci0+ZHNfbmlwYWNrczsKKwkJCXdoaWxlICgobmlwIC09IDEpID49IDApIHsJLyogcHJvY2VzcyBwYWNrZXRzICovCisKKwkJCQlzMzIgaXBzaXplOworCQkJCXUzMiBjaGVja3M7CisJCQkJYm9vbCB0cmFtcF9nZW5lcmF0ZWQgPSBmYWxzZTsKKworCQkJCS8qIGdldCB0aGUgZml4ZWQgaGVhZGVyIGJpdHMgKi8KKwkJCQlpZiAoZGx0aGlzLT5zdHJtLT5yZWFkX2J1ZmZlcihkbHRoaXMtPnN0cm0sCisJCQkJCQkJICAgICAgJmlidWYuaXBhY2tldCwKKwkJCQkJCQkgICAgICBJUEhfU0laRSkgIT0KKwkJCQkgICAgSVBIX1NJWkUpIHsKKwkJCQkJRExfRVJST1IocmVhZHN0cm0sIGltYWdlcGFrKTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCQkvKiByZW9yZGVyIHRoZSBoZWFkZXIgaWYgbmVlZCBiZSAqLworCQkJCWlmIChkbHRoaXMtPnJlb3JkZXJfbWFwKSB7CisJCQkJCWRsb2FkX3Jlb3JkZXIoJmlidWYuaXBhY2tldCwgSVBIX1NJWkUsCisJCQkJCQkgICAgICBkbHRoaXMtPnJlb3JkZXJfbWFwKTsKKwkJCQl9CisJCQkJLyogbm93IHJlYWQgdGhlIHJlc3Qgb2YgdGhlIHBhY2tldCAqLworCQkJCWlwc2l6ZSA9CisJCQkJICAgIEJZVEVfVE9fSE9TVChET0ZGX0FMSUdOCisJCQkJCQkgKGlidWYuaXBhY2tldC5wYWNrZXRfc2l6ZSkpOworCQkJCWlmIChpcHNpemUgPiBCWVRFX1RPX0hPU1QoSU1BR0VfUEFDS0VUX1NJWkUpKSB7CisJCQkJCURMX0VSUk9SKCJCYWQgaW1hZ2UgcGFja2V0IHNpemUgJWQiLAorCQkJCQkJIGlwc2l6ZSk7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQkJZGVzdCA9IGlidWYuYnVmcjsKKyNpZmRlZiBPUFRfWkVST19DT1BZX0xPQURFUgorCQkJCXplcm9fY29weSA9IGZhbHNlOworCQkJCWlmICghZGxvYWRfY2hlY2tfdHlwZShzcHRyLCBETE9BRF9DSU5JVCkgeworCQkJCQlkbHRoaXMtPm15aW8tPndyaXRlbWVtKGRsdGhpcy0+bXlpbywKKwkJCQkJCQkgICAgICAgJmRlc3QsCisJCQkJCQkJICAgICAgIGxwdHItPmxvYWRfYWRkciArCisJCQkJCQkJICAgICAgIGltYWdlX29mZnNldCwKKwkJCQkJCQkgICAgICAgbHB0ciwgMCk7CisJCQkJCXplcm9fY29weSA9IChkZXN0ICE9IGlidWYuYnVmcik7CisJCQkJfQorI2VuZGlmCisJCQkJLyogRW5kIG9mIGRldGVybWluYXRpb24gKi8KKworCQkJCWlmIChkbHRoaXMtPnN0cm0tPnJlYWRfYnVmZmVyKGRsdGhpcy0+c3RybSwKKwkJCQkJCQkgICAgICBpYnVmLmJ1ZnIsCisJCQkJCQkJICAgICAgaXBzaXplKSAhPQorCQkJCSAgICBpcHNpemUpIHsKKwkJCQkJRExfRVJST1IocmVhZHN0cm0sIGltYWdlcGFrKTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCQlpYnVmLmlwYWNrZXQuaW1nX2RhdGEgPSBkZXN0OworCisJCQkJLyogcmVvcmRlciB0aGUgYnl0ZXMgaWYgbmVlZCBiZSAqLworI2lmICFkZWZpbmVkKF9CSUdfRU5ESUFOKSB8fCAoVEFSR0VUX0FVX0JJVFMgPiAxNikKKwkJCQlpZiAoZGx0aGlzLT5yZW9yZGVyX21hcCkgeworCQkJCQlkbG9hZF9yZW9yZGVyKGRlc3QsIGlwc2l6ZSwKKwkJCQkJCSAgICAgIGRsdGhpcy0+cmVvcmRlcl9tYXApOworCQkJCX0KKwkJCQljaGVja3MgPSBkbG9hZF9jaGVja3N1bShkZXN0LCBpcHNpemUpOworI2Vsc2UKKwkJCQlpZiAoZGx0aGlzLT5kZmlsZV9oZHIuZGZfYnl0ZV9yZXNodWZmbGUgIT0KKwkJCQkgICAgVEFSR0VUX09SREVSKFJFT1JERVJfTUFQCisJCQkJCQkgKEJZVEVfUkVTSFVGRkxFX1ZBTFVFKSkpIHsKKwkJCQkJLyogcHV0IGltYWdlIGJ5dGVzIGluIGJpZy1lbmRpYW4gb3JkZXIsCisJCQkJCSAqIG5vdCBQQyBvcmRlciAqLworCQkJCQlkbG9hZF9yZW9yZGVyKGRlc3QsIGlwc2l6ZSwKKwkJCQkJCSAgICAgIFRBUkdFVF9PUkRFUgorCQkJCQkJICAgICAgKGRsdGhpcy0+ZGZpbGVfaGRyLgorCQkJCQkJICAgICAgIGRmX2J5dGVfcmVzaHVmZmxlKSk7CisJCQkJfQorI2lmIFRBUkdFVF9BVV9CSVRTID4gOAorCQkJCWNoZWNrcyA9IGRsb2FkX3JldmVyc2VfY2hlY2tzdW0xNihkZXN0LCBpcHNpemUpOworI2Vsc2UKKwkJCQljaGVja3MgPSBkbG9hZF9yZXZlcnNlX2NoZWNrc3VtKGRlc3QsIGlwc2l6ZSk7CisjZW5kaWYKKyNlbmRpZgorCisJCQkJY2hlY2tzICs9IGRsb2FkX2NoZWNrc3VtKCZpYnVmLmlwYWNrZXQsCisJCQkJCQkJIElQSF9TSVpFKTsKKwkJCQkvKiByZWxvY2F0ZSB0aGUgaW1hZ2UgYml0cyBhcyBuZWVkZWQgKi8KKwkJCQlpZiAoaWJ1Zi5pcGFja2V0Lm51bV9yZWxvY3MpIHsKKwkJCQkJZGx0aGlzLT5pbWFnZV9vZmZzZXQgPSBpbWFnZV9vZmZzZXQ7CisJCQkJCWlmICghcmVsb2NhdGVfcGFja2V0KGRsdGhpcywKKwkJCQkJCQkgICAgICZpYnVmLmlwYWNrZXQsCisJCQkJCQkJICAgICAmY2hlY2tzLAorCQkJCQkJCSAgICAgJnRyYW1wX2dlbmVyYXRlZCkpCisJCQkJCQlyZXR1cm47CS8qIHNlcmlvdXMgZXJyb3IgKi8KKwkJCQl9CisJCQkJaWYgKH5jaGVja3MpCisJCQkJCURMX0VSUk9SKGVycl9jaGVja3N1bSwgaW1hZ2VwYWspOworCQkJCS8qIE9ubHkgd3JpdGUgdGhlIHJlc3VsdCB0byB0aGUgdGFyZ2V0IGlmIG5vCisJCQkJICogdHJhbXBvbGluZSB3YXMgZ2VuZXJhdGVkLiAgT3RoZXJ3aXNlIGl0CisJCQkJICp3aWxsIGJlIGRvbmUgZHVyaW5nIHRyYW1wb2xpbmUgZmluYWxpemUuICovCisKKwkJCQlpZiAodHJhbXBfZ2VuZXJhdGVkID09IGZhbHNlKSB7CisKKwkJCQkJLyogc3R1ZmYgdGhlIHJlc3VsdCBpbnRvIHRhcmdldAorCQkJCQkgKiBtZW1vcnkgKi8KKwkJCQkJaWYgKGRsb2FkX2NoZWNrX3R5cGUoc3B0ciwKKwkJCQkJCURMT0FEX0NJTklUKSkgeworCQkJCQkJY2xvYWRfY2luaXQoZGx0aGlzLAorCQkJCQkJCSAgICAmaWJ1Zi5pcGFja2V0KTsKKwkJCQkJCWNpbml0X3Byb2Nlc3NlZCA9IHRydWU7CisJCQkJCX0gZWxzZSB7CisjaWZkZWYgT1BUX1pFUk9fQ09QWV9MT0FERVIKKwkJCQkJCWlmICghemVyb19jb3B5KSB7CisjZW5kaWYKKwkJCQkJCQkvKiBGSVhNRSAqLworCQkJCQkJCWlmICghZGx0aGlzLT5teWlvLT4KKwkJCQkJCQkgICAgd3JpdGVtZW0oZGx0aGlzLT4KKwkJCQkJCQkJbXlpbywKKwkJCQkJCQkJaWJ1Zi5idWZyLAorCQkJCQkJCQlscHRyLT4KKwkJCQkJCQkJbG9hZF9hZGRyICsKKwkJCQkJCQkJaW1hZ2Vfb2Zmc2V0LAorCQkJCQkJCQlscHRyLAorCQkJCQkJCQlCWVRFX1RPX0hPU1QKKwkJCQkJCQkJKGlidWYuCisJCQkJCQkJCWlwYWNrZXQuCisJCQkJCQkJCXBhY2tldF9zaXplKSkpIHsKKwkJCQkJCQkJRExfRVJST1IKKwkJCQkJCQkJICAoIldyaXRlIHRvICIKKwkJCQkJCQkJICBGTVRfVUkzMgorCQkJCQkJCQkgICIgZmFpbGVkIiwKKwkJCQkJCQkJICBscHRyLT4KKwkJCQkJCQkJICBsb2FkX2FkZHIgKworCQkJCQkJCQkgIGltYWdlX29mZnNldCk7CisJCQkJCQkJfQorI2lmZGVmIE9QVF9aRVJPX0NPUFlfTE9BREVSCisJCQkJCQl9CisjZW5kaWYKKwkJCQkJfQorCQkJCX0KKwkJCQlpbWFnZV9vZmZzZXQgKz0KKwkJCQkgICAgQllURV9UT19UQUREUihpYnVmLmlwYWNrZXQucGFja2V0X3NpemUpOworCQkJfQkvKiBwcm9jZXNzIHBhY2tldHMgKi8KKwkJCS8qIGlmIHRoaXMgaXMgYSBCU1Mgc2VjdGlvbiwgd2UgbWF5IHdhbnQgdG8gZmlsbCBpdCAqLworCQkJaWYgKCFkbG9hZF9jaGVja190eXBlKHNwdHIsIERMT0FEX0JTUykpCisJCQkJZ290byBsb29wX2NvbnQ7CisKKwkJCWlmICghKGRsdGhpcy0+bXlvcHRpb25zICYgRExPQURfSU5JVEJTUykpCisJCQkJZ290byBsb29wX2NvbnQ7CisKKwkJCWlmIChjaW5pdF9wcm9jZXNzZWQpIHsKKwkJCQkvKiBEb24ndCBjbGVhciBCU1MgYWZ0ZXIgbG9hZC10aW1lCisJCQkJICogaW5pdGlhbGl6YXRpb24gKi8KKwkJCQlETF9FUlJPUgorCQkJCSAgICAoIlplcm8taW5pdGlhbGl6YXRpb24gYXQgIiBGTVRfVUkzMgorCQkJCSAgICAgIiBhZnRlciAiICJsb2FkLXRpbWUgaW5pdGlhbGl6YXRpb24hIiwKKwkJCQkgICAgIGxwdHItPmxvYWRfYWRkcik7CisJCQkJZ290byBsb29wX2NvbnQ7CisJCQl9CisJCQkvKiBmaWxsIHRoZSAuYnNzIGFyZWEgKi8KKwkJCWRsdGhpcy0+bXlpby0+ZmlsbG1lbShkbHRoaXMtPm15aW8sCisJCQkJCSAgICAgIFRBRERSX1RPX0hPU1QobHB0ci0+bG9hZF9hZGRyKSwKKwkJCQkJICAgICAgbHB0ciwgVEFERFJfVE9fSE9TVChscHRyLT5zaXplKSwKKwkJCQkJICAgICAgRExPQURfRklMTF9CU1MpOworCQkJZ290byBsb29wX2NvbnQ7CisJCX0KKwkJLyogaWYgRFNfRE9XTkxPQURfTUFTSyAqLworCQkvKiBJZiBub3QgbG9hZGluZywgYnV0IEJTUywgemVybyBpbml0aWFsaXplICovCisJCWlmICghZGxvYWRfY2hlY2tfdHlwZShzcHRyLCBETE9BRF9CU1MpKQorCQkJZ290byBsb29wX2NvbnQ7CisKKwkJaWYgKCEoZGx0aGlzLT5teW9wdGlvbnMgJiBETE9BRF9JTklUQlNTKSkKKwkJCWdvdG8gbG9vcF9jb250OworCisJCWlmIChjdXJyX3NlY3QgPj0gZGx0aGlzLT5hbGxvY2F0ZWRfc2Vjbl9jb3VudCkKKwkJCWxwdHIgPSAoc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKilzcHRyOworCisJCWlmIChjaW5pdF9wcm9jZXNzZWQpIHsKKwkJCS8qRG9uJ3QgY2xlYXIgQlNTIGFmdGVyIGxvYWQtdGltZSBpbml0aWFsaXphdGlvbiAqLworCQkJRExfRVJST1IoIlplcm8taW5pdGlhbGl6YXRpb24gYXQgIiBGTVRfVUkzMgorCQkJCSAiIGF0dGVtcHRlZCBhZnRlciAiCisJCQkJICJsb2FkLXRpbWUgaW5pdGlhbGl6YXRpb24hIiwgbHB0ci0+bG9hZF9hZGRyKTsKKwkJCWdvdG8gbG9vcF9jb250OworCQl9CisJCS8qIGZpbGwgdGhlIC5ic3MgYXJlYSAqLworCQlkbHRoaXMtPm15aW8tPmZpbGxtZW0oZGx0aGlzLT5teWlvLAorCQkJCSAgICAgIFRBRERSX1RPX0hPU1QobHB0ci0+bG9hZF9hZGRyKSwgbHB0ciwKKwkJCQkgICAgICBUQUREUl9UT19IT1NUKGxwdHItPnNpemUpLAorCQkJCSAgICAgIERMT0FEX0ZJTExfQlNTKTsKK2xvb3BfY29udDoKKwkJc3B0ciArPSAxOworCQlscHRyICs9IDE7CisJfQkJCS8qIGxvYWQgc2VjdGlvbnMgKi8KKworCS8qICBGaW5hbGl6ZSBhbnkgdHJhbXBvbGluZXMgdGhhdCB3ZXJlIGNyZWF0ZWQgZHVyaW5nIHRoZSBsb2FkICovCisJaWYgKGRsb2FkX3RyYW1wX2ZpbmFsaXplKGRsdGhpcykgPT0gMCkgeworCQlETF9FUlJPUigiRmluYWxpemF0aW9uIG9mIGF1dG8tdHJhbXBvbGluZXMgKHNpemUgPSAiIEZNVF9VSTMyCisJCQkgIikgZmFpbGVkIiwgZGx0aGlzLT50cmFtcC50cmFtcF9zZWN0X25leHRfYWRkcik7CisJfQorfQkJCQkvKiBkbG9hZF9kYXRhICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm9jZWR1cmUgZGxvYWRfcmVvcmRlcgorICoKKyAqIFBhcmFtZXRlcnM6CisgKglkYXRhCTMyLWJpdCBhbGlnbmVkIHBvaW50ZXIgdG8gZGF0YSB0byBiZSBieXRlLXN3YXBwZWQKKyAqCWRzaXoJc2l6ZSBvZiB0aGUgZGF0YSB0byBiZSByZW9yZGVyZWQgaW4gc2l6ZW9mKCkgdW5pdHMuCisgKgltYXAJCTMyLWJpdCBtYXAgZGVmaW5pbmcgaG93IHRvIHJlb3JkZXIgdGhlIGRhdGEuICBWYWx1ZQorICoJCQltdXN0IGJlIFJFT1JERVJfTUFQKCkgb2Ygc29tZSBwZXJtdXRhdGlvbgorICoJCQlvZiAweDAwIDAxIDAyIDAzCisgKgorICogRWZmZWN0OgorICoJUmUtYXJyYW5nZXMgdGhlIGJ5dGVzIGluIGVhY2ggd29yZCBhY2NvcmRpbmcgdG8gdGhlIG1hcCBzcGVjaWZpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBtYXNrIGZvciBieXRlIHNoaWZ0IGNvdW50ICovCisjZGVmaW5lIFNISUZUX0NPVU5UX01BU0sgKDMgPDwgTE9HX0JJVFNfUEVSX0JZVEUpCisKK3ZvaWQgZGxvYWRfcmVvcmRlcih2b2lkICpkYXRhLCBpbnQgZHNpeiwgdW5zaWduZWQgaW50IG1hcCkKK3sKKwlyZWdpc3RlciB1MzIgdG1wLCB0bWFwLCBkYXR2OworCXUzMiAqZHAgPSAodTMyICopIGRhdGE7CisKKwltYXAgPDw9IExPR19CSVRTX1BFUl9CWVRFOwkvKiBhbGlnbiBtYXAgd2l0aCBTSElGVF9DT1VOVF9NQVNLICovCisJZG8geworCQl0bXAgPSAwOworCQlkYXR2ID0gKmRwOworCQl0bWFwID0gbWFwOworCQlkbyB7CisJCQl0bXAgfD0gKGRhdHYgJiBCWVRFX01BU0spIDw8ICh0bWFwICYgU0hJRlRfQ09VTlRfTUFTSyk7CisJCQl0bWFwID4+PSBCSVRTX1BFUl9CWVRFOworCQl9IHdoaWxlIChkYXR2ID4+PSBCSVRTX1BFUl9CWVRFKTsKKwkJKmRwKysgPSB0bXA7CisJfSB3aGlsZSAoKGRzaXogLT0gc2l6ZW9mKHUzMikpID4gMCk7Cit9CQkJCS8qIGRsb2FkX3Jlb3JkZXIgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb2NlZHVyZSBkbG9hZF9jaGVja3N1bQorICoKKyAqIFBhcmFtZXRlcnM6CisgKglkYXRhCTMyLWJpdCBhbGlnbmVkIHBvaW50ZXIgdG8gZGF0YSB0byBiZSBjaGVja3N1bW1lZAorICoJc2l6CQlzaXplIG9mIHRoZSBkYXRhIHRvIGJlIGNoZWNrc3VtbWVkIGluIHNpemVvZigpIHVuaXRzLgorICoKKyAqIEVmZmVjdDoKKyAqCVJldHVybnMgYSBjaGVja3N1bSBvZiB0aGUgc3BlY2lmaWVkIGJsb2NrCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCit1MzIgZGxvYWRfY2hlY2tzdW0odm9pZCAqZGF0YSwgdW5zaWduZWQgc2l6KQoreworCXUzMiBzdW07CisJdTMyICpkcDsKKwlpbnQgbGVmdDsKKworCXN1bSA9IDA7CisJZHAgPSAodTMyICopIGRhdGE7CisJZm9yIChsZWZ0ID0gc2l6OyBsZWZ0ID4gMDsgbGVmdCAtPSBzaXplb2YodTMyKSkKKwkJc3VtICs9ICpkcCsrOworCXJldHVybiBzdW07Cit9CQkJCS8qIGRsb2FkX2NoZWNrc3VtICovCisKKyNpZiBIT1NUX0VORElBTk5FU1MKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm9jZWR1cmUgZGxvYWRfcmV2ZXJzZV9jaGVja3N1bQorICoKKyAqIFBhcmFtZXRlcnM6CisgKglkYXRhCTMyLWJpdCBhbGlnbmVkIHBvaW50ZXIgdG8gZGF0YSB0byBiZSBjaGVja3N1bW1lZAorICoJc2l6CQlzaXplIG9mIHRoZSBkYXRhIHRvIGJlIGNoZWNrc3VtbWVkIGluIHNpemVvZigpIHVuaXRzLgorICoKKyAqIEVmZmVjdDoKKyAqCVJldHVybnMgYSBjaGVja3N1bSBvZiB0aGUgc3BlY2lmaWVkIGJsb2NrLCB3aGljaCBpcyBhc3N1bWVkIHRvIGJlIGJ5dGVzCisgKiBpbiBiaWctZW5kaWFuIG9yZGVyLgorICoKKyAqIE5vdGVzOgorICoJSW4gYSBiaWctZW5kaWFuIGhvc3QsIHRoaW5ncyBsaWtlIHRoZSBzdHJpbmcgdGFibGUgYXJlIHN0b3JlZCBhcyBieXRlcworICogaW4gaG9zdCBvcmRlci4gQnV0IGRsbGNyZWF0ZSBhbHdheXMgY2hlY2tzdW1zIGluIGxpdHRsZS1lbmRpYW4gb3JkZXIuCisgKiBJdCBpcyBtb3N0IGVmZmljaWVudCB0byBqdXN0IGhhbmRsZSB0aGUgZGlmZmVyZW5jZSBhIHdvcmQgYXQgYSB0aW1lLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCit1MzIgZGxvYWRfcmV2ZXJzZV9jaGVja3N1bSh2b2lkICpkYXRhLCB1bnNpZ25lZCBzaXopCit7CisJdTMyIHN1bSwgdGVtcDsKKwl1MzIgKmRwOworCWludCBsZWZ0OworCisJc3VtID0gMDsKKwlkcCA9ICh1MzIgKikgZGF0YTsKKworCWZvciAobGVmdCA9IHNpejsgbGVmdCA+IDA7IGxlZnQgLT0gc2l6ZW9mKHUzMikpIHsKKwkJdGVtcCA9ICpkcCsrOworCQlzdW0gKz0gdGVtcCA8PCBCSVRTX1BFUl9CWVRFICogMzsKKwkJc3VtICs9IHRlbXAgPj4gQklUU19QRVJfQllURSAqIDM7CisJCXN1bSArPSAodGVtcCA+PiBCSVRTX1BFUl9CWVRFKSAmIChCWVRFX01BU0sgPDwgQklUU19QRVJfQllURSk7CisJCXN1bSArPSAodGVtcCAmIChCWVRFX01BU0sgPDwgQklUU19QRVJfQllURSkpIDw8IEJJVFNfUEVSX0JZVEU7CisJfQorCisJcmV0dXJuIHN1bTsKK30JCQkJLyogZGxvYWRfcmV2ZXJzZV9jaGVja3N1bSAqLworCisjaWYgKFRBUkdFVF9BVV9CSVRTID4gOCkgJiYgKFRBUkdFVF9BVV9CSVRTIDwgMzIpCit1MzIgZGxvYWRfcmV2ZXJzZV9jaGVja3N1bTE2KHZvaWQgKmRhdGEsIHVuc2lnbmVkIHNpeikKK3sKKwl1aW50X2Zhc3QzMl90IHN1bSwgdGVtcDsKKwl1MzIgKmRwOworCWludCBsZWZ0OworCisJc3VtID0gMDsKKwlkcCA9ICh1MzIgKikgZGF0YTsKKworCWZvciAobGVmdCA9IHNpejsgbGVmdCA+IDA7IGxlZnQgLT0gc2l6ZW9mKHUzMikpIHsKKwkJdGVtcCA9ICpkcCsrOworCQlzdW0gKz0gdGVtcCA8PCBCSVRTX1BFUl9CWVRFICogMjsKKwkJc3VtICs9IHRlbXAgPj4gQklUU19QRVJfQllURSAqIDI7CisJfQorCisJcmV0dXJuIHN1bTsKK30JCQkJLyogZGxvYWRfcmV2ZXJzZV9jaGVja3N1bTE2ICovCisjZW5kaWYKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIHN3YXBfd29yZHMKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJZGF0YQkzMi1iaXQgYWxpZ25lZCBwb2ludGVyIHRvIGRhdGEgdG8gYmUgc3dhcHBlZAorICoJc2l6CXNpemUgb2YgdGhlIGRhdGEgdG8gYmUgc3dhcHBlZC4KKyAqCWJpdG1hcAlCaXQgbWFwIG9mIGhvdyB0byBzd2FwIGVhY2ggMzItYml0IHdvcmQ7IDEgPT4gMiBzaG9ydHMsCisgKgkJMCA9PiAxIGxvbmcKKyAqCisgKiBFZmZlY3Q6CisgKglTd2FwcyB0aGUgc3BlY2lmaWVkIGRhdGEgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgbWFwCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCitzdGF0aWMgdm9pZCBzd2FwX3dvcmRzKHZvaWQgKmRhdGEsIHVuc2lnbmVkIHNpeiwgdW5zaWduZWQgYml0bWFwKQoreworCXJlZ2lzdGVyIGludCBpOworI2lmIFRBUkdFVF9BVV9CSVRTIDwgMTYKKwlyZWdpc3RlciB1MTYgKnNwOworI2VuZGlmCisJcmVnaXN0ZXIgdTMyICpscDsKKworCXNpeiAvPSBzaXplb2YodTE2KTsKKworI2lmIFRBUkdFVF9BVV9CSVRTIDwgMTYKKwkvKiBwYXNzIDE6IGRvIGFsbCB0aGUgYnl0ZXMgKi8KKwlpID0gc2l6OworCXNwID0gKHUxNiAqKSBkYXRhOworCWRvIHsKKwkJcmVnaXN0ZXIgdTE2IHRtcDsKKwkJdG1wID0gKnNwOworCQkqc3ArKyA9IFNXQVAxNkJZOCh0bXApOworCX0gd2hpbGUgKChpIC09IDEpID4gMCk7CisjZW5kaWYKKworI2lmIFRBUkdFVF9BVV9CSVRTIDwgMzIKKwkvKiBwYXNzIDI6IGZpeHVwIHRoZSAzMi1iaXQgd29yZHMgKi8KKwlpID0gc2l6ID4+IDE7CisJbHAgPSAodTMyICopIGRhdGE7CisJZG8geworCQlpZiAoKGJpdG1hcCAmIDEpID09IDApIHsKKwkJCXJlZ2lzdGVyIHUzMiB0bXA7CisJCQl0bXAgPSAqbHA7CisJCQkqbHAgPSBTV0FQMzJCWTE2KHRtcCk7CisJCX0KKwkJbHAgKz0gMTsKKwkJYml0bWFwID4+PSAxOworCX0gd2hpbGUgKChpIC09IDEpID4gMCk7CisjZW5kaWYKK30JCQkJLyogc3dhcF93b3JkcyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIGNvcHlfdGd0X3N0cmluZ3MKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJZHN0cAkJRGVzdGluYXRpb24gYWRkcmVzcy4gIEFzc3VtZWQgdG8gYmUgMzItYml0IGFsaWduZWQKKyAqCXNyY3AJCVNvdXJjZSBhZGRyZXNzLiAgQXNzdW1lZCB0byBiZSAzMi1iaXQgYWxpZ25lZAorICoJY2hhcmNvdW50CU51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGNvcHkuCisgKgorICogRWZmZWN0OgorICoJQ29waWVzIHN0cmluZ3MgZnJvbSB0aGUgc291cmNlICh3aGljaCBpcyBpbiB1c3VhbCAuZG9mIGZpbGUgb3JkZXIgb24KKyAqIHRoZSBsb2FkaW5nIHByb2Nlc3NvcikgdG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciAod2hpY2ggc2hvdWxkIGJlIGluIHByb3BlcgorICogdGFyZ2V0IGFkZHJlc3NhYmxlIHVuaXQgb3JkZXIpLiAgTWFrZXMgc3VyZSB0aGUgbGFzdCBzdHJpbmcgaW4gdGhlCisgKiBidWZmZXIgaXMgTlVMTCB0ZXJtaW5hdGVkIChmb3Igc2FmZXR5KS4KKyAqIFJldHVybnMgdGhlIGZpcnN0IHVudXNlZCBkZXN0aW5hdGlvbiBhZGRyZXNzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCitzdGF0aWMgY2hhciAqY29weV90Z3Rfc3RyaW5ncyh2b2lkICpkc3RwLCB2b2lkICpzcmNwLCB1bnNpZ25lZCBjaGFyY291bnQpCit7CisJcmVnaXN0ZXIgdGd0X2F1X3QgKnNyYyA9ICh0Z3RfYXVfdCAqKSBzcmNwOworCXJlZ2lzdGVyIHRndF9hdV90ICpkc3QgPSAodGd0X2F1X3QgKikgZHN0cDsKKwlyZWdpc3RlciBpbnQgY250ID0gY2hhcmNvdW50OworCWRvIHsKKyNpZiBUQVJHRVRfQVVfQklUUyA8PSBCSVRTX1BFUl9BVQorCQkvKiBieXRlLXN3YXBwaW5nIGlzc3VlcyBtYXkgZXhpc3QgZm9yIHN0cmluZ3Mgb24gdGFyZ2V0ICovCisJCSpkc3QrKyA9ICpzcmMrKzsKKyNlbHNlCisJCSpkc3QrKyA9ICpzcmMrKzsKKyNlbmRpZgorCX0gd2hpbGUgKChjbnQgLT0gKHNpemVvZih0Z3RfYXVfdCkgKiBCSVRTX1BFUl9BVSAvIEJJVFNfUEVSX0JZVEUpKSA+IDApOworCS8qYXBwbHkgZm9yY2UgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHN0cmluZyB0YWJsZSBoYXMgbnVsbCB0ZXJtaW5hdG9yICovCisjaWYgKEJJVFNfUEVSX0FVID09IEJJVFNfUEVSX0JZVEUpICYmIChUQVJHRVRfQVVfQklUUyA9PSBCSVRTX1BFUl9CWVRFKQorCWRzdFstMV0gPSAwOworI2Vsc2UKKwkvKiBsaXR0bGUgZW5kaWFuICovCisJZHN0Wy0xXSAmPSAoMSA8PCAoQklUU19QRVJfQVUgLSBCSVRTX1BFUl9CWVRFKSkgLSAxOworI2VuZGlmCisJcmV0dXJuIChjaGFyICopZHN0OworfQkJCQkvKiBjb3B5X3RndF9zdHJpbmdzICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm9jZWR1cmUgaW5pdF9tb2R1bGVfaGFuZGxlCisgKgorICogUGFyYW1ldGVyczoKKyAqCW5vbmUKKyAqCisgKiBFZmZlY3Q6CisgKglJbml0aWFsaXplcyB0aGUgbW9kdWxlIGhhbmRsZSB3ZSB1c2UgdG8gZW5hYmxlIHVubG9hZGluZywgYW5kIGluc3RhbGxzCisgKiB0aGUgZGVidWcgaW5mb3JtYXRpb24gcmVxdWlyZWQgYnkgdGhlIHRhcmdldC4KKyAqCisgKiBOb3RlczoKKyAqIFRoZSBoYW5kbGUgcmV0dXJuZWQgZnJvbSBkeW5hbWljX2xvYWRfbW9kdWxlIG5lZWRzIHRvIGVuY2Fwc3VsYXRlIGFsbCB0aGUKKyAqIGFsbG9jYXRpb25zIGRvbmUgZm9yIHRoZSBtb2R1bGUsIGFuZCBlbmFibGUgdGhlbSBwbHVzIHRoZSBtb2R1bGVzIHN5bWJvbHMgdG8KKyAqIGJlIGRlYWxsb2NhdGVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2lmbmRlZiBfQklHX0VORElBTgorc3RhdGljIGNvbnN0IHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvIGRsbHZpZXdfaW5mb19pbml0ID0geyAiLmRsbHZpZXciLCAwLCAwLAorCShsZHJfYWRkciktMSwgREJHX0xJU1RfUEFHRSwgRExPQURfREFUQSwgMAorfTsKKyNlbHNlCitzdGF0aWMgY29uc3Qgc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gZGxsdmlld19pbmZvX2luaXQgPSB7ICIuZGxsdmlldyIsIDAsIDAsCisJKGxkcl9hZGRyKS0xLCBETE9BRF9EQVRBLCBEQkdfTElTVF9QQUdFLCAwCit9OworI2VuZGlmCitzdGF0aWMgdm9pZCBpbml0X21vZHVsZV9oYW5kbGUoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMpCit7CisJc3RydWN0IG15X2hhbmRsZSAqaG5kbDsKKwl1MTYgY3Vycl9zZWN0OworCXN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICphc2VjczsKKwlzdHJ1Y3QgZGxsX21vZHVsZSAqZGJtb2Q7CisJc3RydWN0IGRsbF9zZWN0ICpkYnNlYzsKKwlzdHJ1Y3QgZGJnX21pcnJvcl9yb290ICptbGlzdDsKKwlyZWdpc3RlciBjaGFyICpjcDsKKwlzdHJ1Y3QgbW9kdWxlc19oZWFkZXIgbWhkcjsKKwlzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyBkbGx2aWV3X2luZm87CisJc3RydWN0IGR5bmxvYWRfc3ltYm9sICpkZWJ1Z19taXJyb3Jfc3ltOworCWhuZGwgPSBkbHRoaXMtPm15aGFuZGxlOworCWlmICghaG5kbCkKKwkJcmV0dXJuOwkJLyogbXVzdCBiZSBlcnJvcnMgZGV0ZWN0ZWQsIHNvIGZvcmdldCBpdCAqLworCisJLyogIFN0b3JlIHRoZSBzZWN0aW9uIGNvdW50ICovCisJaG5kbC0+c2Vjbl9jb3VudCA9IGRsdGhpcy0+YWxsb2NhdGVkX3NlY25fY291bnQ7CisKKwkvKiAgSWYgYSB0cmFtcG9saW5lIHNlY3Rpb24gd2FzIGNyZWF0ZWQsIGFkZCBpdCBpbiAqLworCWlmIChkbHRoaXMtPnRyYW1wLnRyYW1wX3NlY3RfbmV4dF9hZGRyICE9IDApCisJCWhuZGwtPnNlY25fY291bnQgKz0gMTsKKworCWhuZGwtPnNlY25fY291bnQgPSBobmRsLT5zZWNuX2NvdW50IDw8IDE7CisKKwlobmRsLT5zZWNuX2NvdW50ID0gZGx0aGlzLT5hbGxvY2F0ZWRfc2Vjbl9jb3VudCA8PCAxOworI2lmbmRlZiBUQVJHRVRfRU5ESUFOTkVTUworCWlmIChkbHRoaXMtPmJpZ19lX3RhcmdldCkKKwkJaG5kbC0+c2Vjbl9jb3VudCArPSAxOwkvKiBmbGFnIGZvciBiaWctZW5kaWFuICovCisjZW5kaWYKKwlpZiAoZGx0aGlzLT5kbG9hZF9lcnJjb3VudCkKKwkJcmV0dXJuOwkJLyogYWJhbmRvbiBpZiBlcnJvcnMgZGV0ZWN0ZWQgKi8KKwkvKiBMb2NhdGUgdGhlIHN5bWJvbCB0aGF0IG5hbWVzIHRoZSBoZWFkZXIgZm9yIHRoZSBDQ1MgZGVidWcgbGlzdAorCSAgIG9mIG1vZHVsZXMuIElmIG5vdCBmb3VuZCwgd2UganVzdCBkb24ndCBnZW5lcmF0ZSB0aGUgZGVidWcgcmVjb3JkLgorCSAgIElmIGZvdW5kLCB3ZSBjcmVhdGUgb3VyIG1vZHVsZXMgbGlzdC4gIFdlIG1ha2Ugc3VyZSB0byBjcmVhdGUgdGhlCisJICAgbG9hZGVyX2RsbHZpZXdfcm9vdCBldmVuIGlmIHRoZXJlIGlzIG5vIHJlbG9jYXRpb24gaW5mbyB0byByZWNvcmQsCisJICAganVzdCB0byB0cnkgdG8gcHV0IGJvdGggc3ltYm9scyBpbiB0aGUgc2FtZSBzeW1ib2wgdGFibGUgYW5kCisJICAgbW9kdWxlLiAqLworCWRlYnVnX21pcnJvcl9zeW0gPSBkbHRoaXMtPm15c3ltLT5maW5kX21hdGNoaW5nX3N5bWJvbChkbHRoaXMtPm15c3ltLAorCQkJCQkJCWxvYWRlcl9kbGx2aWV3X3Jvb3QpOworCWlmICghZGVidWdfbWlycm9yX3N5bSkgeworCQlzdHJ1Y3QgZHlubG9hZF9zeW1ib2wgKmRsbW9kc3ltOworCQlzdHJ1Y3QgZGJnX21pcnJvcl9yb290ICptbHN0OworCisJCS8qIG91ciByb290IHN5bWJvbCBpcyBub3QgeWV0IHByZXNlbnQ7CisJCSAgIGNoZWNrIGlmIHdlIGhhdmUgRExNb2R1bGVzIGRlZmluZWQgKi8KKwkJZGxtb2RzeW0gPSBkbHRoaXMtPm15c3ltLT5maW5kX21hdGNoaW5nX3N5bWJvbChkbHRoaXMtPm15c3ltLAorCQkJCQkJCUxJTktFUl9NT0RVTEVTX0hFQURFUik7CisJCWlmICghZGxtb2RzeW0pCisJCQlyZXR1cm47CS8qIG5vIERMTW9kdWxlcyBsaXN0IHNvIG5vIGRlYnVnIGluZm8gKi8KKwkJLyogaWYgd2UgaGF2ZSBETE1vZHVsZXMgZGVmaW5lZCwgY29uc3RydWN0IG91ciBoZWFkZXIgKi8KKwkJbWxzdCA9IChzdHJ1Y3QgZGJnX21pcnJvcl9yb290ICopCisJCSAgICBkbHRoaXMtPm15c3ltLT5kbG9hZF9hbGxvY2F0ZShkbHRoaXMtPm15c3ltLAorCQkJCQkJICBzaXplb2Yoc3RydWN0CisJCQkJCQkJIGRiZ19taXJyb3Jfcm9vdCkpOworCQlpZiAoIW1sc3QpIHsKKwkJCURMX0VSUk9SKGVycl9hbGxvYywgc2l6ZW9mKHN0cnVjdCBkYmdfbWlycm9yX3Jvb3QpKTsKKwkJCXJldHVybjsKKwkJfQorCQltbHN0LT5obmV4dCA9IE5VTEw7CisJCW1sc3QtPmNoYW5nZXMgPSAwOworCQltbHN0LT5yZWZjb3VudCA9IDA7CisJCW1sc3QtPmRidGhpcyA9IFREQVRBX1RPX1RBRERSKGRsbW9kc3ltLT52YWx1ZSk7CisJCS8qIGFkZCBvdXIgcm9vdCBzeW1ib2wgKi8KKwkJZGVidWdfbWlycm9yX3N5bSA9IGRsdGhpcy0+bXlzeW0tPmFkZF90b19zeW1ib2xfdGFibGUKKwkJICAgIChkbHRoaXMtPm15c3ltLCBsb2FkZXJfZGxsdmlld19yb290LAorCQkgICAgICh1bnNpZ25lZClkbHRoaXMtPm15aGFuZGxlKTsKKwkJaWYgKCFkZWJ1Z19taXJyb3Jfc3ltKSB7CisJCQkvKiBmYWlsZWQsIHJlY292ZXIgbWVtb3J5ICovCisJCQlkbHRoaXMtPm15c3ltLT5kbG9hZF9kZWFsbG9jYXRlKGRsdGhpcy0+bXlzeW0sIG1sc3QpOworCQkJcmV0dXJuOworCQl9CisJCWRlYnVnX21pcnJvcl9zeW0tPnZhbHVlID0gKHUzMikgbWxzdDsKKwl9CisJLyogRmlyc3QgY3JlYXRlIHRoZSBETEx2aWV3IHJlY29yZCBhbmQgc3R1ZmYgaXQgaW50byB0aGUgYnVmZmVyLgorCSAgIFRoZW4gd3JpdGUgaXQgdG8gdGhlIERTUC4gIFJlY29yZCBwZXJ0aW5lbnQgbG9jYXRpb25zIGluIG91ciBobmRsLAorCSAgIGFuZCBhZGQgaXQgdG8gdGhlIHBlci1wcm9jZXNzb3IgbGlzdCBvZiBoYW5kbGVzIHdpdGggZGVidWcgaW5mby4gKi8KKyNpZm5kZWYgREVCVUdfSEVBREVSX0lOX0xPQURFUgorCW1saXN0ID0gKHN0cnVjdCBkYmdfbWlycm9yX3Jvb3QgKilkZWJ1Z19taXJyb3Jfc3ltLT52YWx1ZTsKKwlpZiAoIW1saXN0KQorCQlyZXR1cm47CisjZWxzZQorCW1saXN0ID0gKHN0cnVjdCBkYmdfbWlycm9yX3Jvb3QgKikmZGVidWdfbGlzdF9oZWFkZXI7CisjZW5kaWYKKwlobmRsLT5kbS5ocm9vdCA9IG1saXN0OwkvKiBzZXQgcG9pbnRlciB0byByb290IGludG8gb3VyIGhhbmRsZSAqLworCWlmICghZGx0aGlzLT5hbGxvY2F0ZWRfc2Vjbl9jb3VudCkKKwkJcmV0dXJuOwkJLyogbm8gbG9hZCBhZGRyZXNzZXMgdG8gYmUgcmVjb3JkZWQgKi8KKwkvKiByZXVzZSB0ZW1wb3Jhcnkgc3ltYm9sIHN0b3JhZ2UgKi8KKwlkYm1vZCA9IChzdHJ1Y3QgZGxsX21vZHVsZSAqKWRsdGhpcy0+bG9jYWxfc3ltdGFiOworCS8qIENyZWF0ZSB0aGUgRExMdmlldyByZWNvcmQgaW4gdGhlIG1lbW9yeSB3ZSByZXRhaW4gZm9yIG91ciBoYW5kbGUgKi8KKwlkYm1vZC0+bnVtX3NlY3RzID0gZGx0aGlzLT5hbGxvY2F0ZWRfc2Vjbl9jb3VudDsKKwlkYm1vZC0+dGltZXN0YW1wID0gZGx0aGlzLT52ZXJpZnkuZHZfdGltZGF0OworCWRibW9kLT52ZXJzaW9uID0gSU5JVF9WRVJTSU9OOworCWRibW9kLT52ZXJpZmljYXRpb24gPSBWRVJJRklDQVRJT047CisJYXNlY3MgPSBkbHRoaXMtPmxkcl9zZWN0aW9uczsKKwlkYnNlYyA9IGRibW9kLT5zZWN0czsKKwlmb3IgKGN1cnJfc2VjdCA9IGRsdGhpcy0+YWxsb2NhdGVkX3NlY25fY291bnQ7CisJICAgICBjdXJyX3NlY3QgPiAwOyBjdXJyX3NlY3QgLT0gMSkgeworCQlkYnNlYy0+c2VjdF9sb2FkX2FkciA9IGFzZWNzLT5sb2FkX2FkZHI7CisJCWRic2VjLT5zZWN0X3J1bl9hZHIgPSBhc2Vjcy0+cnVuX2FkZHI7CisJCWRic2VjICs9IDE7CisJCWFzZWNzICs9IDE7CisJfQorCisJLyogIElmIGEgdHJhbXBvbGluZSBzZWN0aW9uIHdhcyBjcmVhdGVkIGdvIGFoZWFkIGFuZCBhZGQgaXRzIGluZm8gKi8KKwlpZiAoZGx0aGlzLT50cmFtcC50cmFtcF9zZWN0X25leHRfYWRkciAhPSAwKSB7CisJCWRibW9kLT5udW1fc2VjdHMrKzsKKwkJZGJzZWMtPnNlY3RfbG9hZF9hZHIgPSBhc2Vjcy0+bG9hZF9hZGRyOworCQlkYnNlYy0+c2VjdF9ydW5fYWRyID0gYXNlY3MtPnJ1bl9hZGRyOworCQlkYnNlYysrOworCQlhc2VjcysrOworCX0KKworCS8qIG5vdyBjcmFtIGluIHRoZSBuYW1lcyAqLworCWNwID0gY29weV90Z3Rfc3RyaW5ncyhkYnNlYywgZGx0aGlzLT5zdHJfaGVhZCwKKwkJCSAgICAgIGRsdGhpcy0+ZGVidWdfc3RyaW5nX3NpemUpOworCisJLyogSWYgYSB0cmFtcG9saW5lIHNlY3Rpb24gd2FzIGNyZWF0ZWQsIGFkZCBpdHMgbmFtZSBzbyBETExWaWV3CisJICogY2FuIHNob3cgdGhlIHVzZXIgdGhlIHNlY3Rpb24gaW5mby4gKi8KKwlpZiAoZGx0aGlzLT50cmFtcC50cmFtcF9zZWN0X25leHRfYWRkciAhPSAwKSB7CisJCWNwID0gY29weV90Z3Rfc3RyaW5ncyhjcCwKKwkJCQkgICAgICBkbHRoaXMtPnRyYW1wLmZpbmFsX3N0cmluZ190YWJsZSwKKwkJCQkgICAgICBzdHJsZW4oZGx0aGlzLT50cmFtcC5maW5hbF9zdHJpbmdfdGFibGUpICsKKwkJCQkgICAgICAxKTsKKwl9CisKKwkvKiByb3VuZCBvZmYgdGhlIHNpemUgb2YgdGhlIGRlYnVnIHJlY29yZCwgYW5kIHJlbWVtYmVyIHNhbWUgKi8KKwlobmRsLT5kbS5kYnNpeiA9IEhPU1RfVE9fVERBVEFfUk9VTkQoY3AgLSAoY2hhciAqKWRibW9kKTsKKwkqY3AgPSAwOwkJLyogc3RyaWN0bHkgdG8gbWFrZSBvdXIgdGVzdCBoYXJuZXNzIGhhcHB5ICovCisJZGxsdmlld19pbmZvID0gZGxsdmlld19pbmZvX2luaXQ7CisJZGxsdmlld19pbmZvLnNpemUgPSBUREFUQV9UT19UQUREUihobmRsLT5kbS5kYnNpeik7CisJLyogSW5pdGlhbGl6ZSBtZW1vcnkgY29udGV4dCB0byBkZWZhdWx0IGhlYXAgKi8KKwlkbGx2aWV3X2luZm8uY29udGV4dCA9IDA7CisJaG5kbC0+ZG0uY29udGV4dCA9IDA7CisJLyogZmlsbCBpbiBuZXh0IHBvaW50ZXIgYW5kIHNpemUgKi8KKwlpZiAobWxpc3QtPmhuZXh0KSB7CisJCWRibW9kLT5uZXh0X21vZHVsZSA9IFRBRERSX1RPX1REQVRBKG1saXN0LT5obmV4dC0+ZG0uZGJ0aGlzKTsKKwkJZGJtb2QtPm5leHRfbW9kdWxlX3NpemUgPSBtbGlzdC0+aG5leHQtPmRtLmRic2l6OworCX0gZWxzZSB7CisJCWRibW9kLT5uZXh0X21vZHVsZV9zaXplID0gMDsKKwkJZGJtb2QtPm5leHRfbW9kdWxlID0gMDsKKwl9CisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvbi1EU1AgRExMdmlldyBkZWJ1ZyByZWNvcmQgKi8KKwlpZiAoIWRsdGhpcy0+bXlhbGxvYykKKwkJcmV0dXJuOworCWlmICghZGx0aGlzLT5teWFsbG9jLT5kbG9hZF9hbGxvY2F0ZShkbHRoaXMtPm15YWxsb2MsICZkbGx2aWV3X2luZm8sCisJCQkJCSAgICAgSE9TVF9UT19UQUREUihzaXplb2YodTMyKSkpKSB7CisJCXJldHVybjsKKwl9CisJLyogU3RvcmUgbG9hZCBhZGRyZXNzIG9mIC5kbGx2aWV3IHNlY3Rpb24gKi8KKwlobmRsLT5kbS5kYnRoaXMgPSBkbGx2aWV3X2luZm8ubG9hZF9hZGRyOworCS8qIFN0b3JlIG1lbW9yeSBjb250ZXh0IChzZWdpZCkgaW4gd2hpY2ggLmRsbHZpZXcgc2VjdGlvbgorCSAqIHdhcyAgYWxsb2NhdGVkICovCisJaG5kbC0+ZG0uY29udGV4dCA9IGRsbHZpZXdfaW5mby5jb250ZXh0OworCW1saXN0LT5yZWZjb3VudCArPSAxOworCS8qIHN3YXAgYnl0ZXMgaW4gdGhlIGVudGlyZSBkZWJ1ZyByZWNvcmQsIGJ1dCBub3QgdGhlIHN0cmluZyB0YWJsZSAqLworCWlmIChUQVJHRVRfRU5ESUFOTkVTU19ESUZGRVJTKFRBUkdFVF9CSUdfRU5ESUFOKSkgeworCQlzd2FwX3dvcmRzKGRibW9kLCAoY2hhciAqKWRic2VjIC0gKGNoYXIgKilkYm1vZCwKKwkJCSAgIERMTF9NT0RVTEVfQklUTUFQKTsKKwl9CisJLyogVXBkYXRlIHRoZSBETEx2aWV3IGxpc3Qgb24gdGhlIERTUCB3cml0ZSBuZXcgcmVjb3JkICovCisJaWYgKCFkbHRoaXMtPm15aW8tPndyaXRlbWVtKGRsdGhpcy0+bXlpbywgZGJtb2QsCisJCQkJICAgIGRsbHZpZXdfaW5mby5sb2FkX2FkZHIsICZkbGx2aWV3X2luZm8sCisJCQkJICAgIFRBRERSX1RPX0hPU1QoZGxsdmlld19pbmZvLnNpemUpKSkgeworCQlyZXR1cm47CisJfQorCS8qIHdyaXRlIG5ldyBoZWFkZXIgKi8KKwltaGRyLmZpcnN0X21vZHVsZV9zaXplID0gaG5kbC0+ZG0uZGJzaXo7CisJbWhkci5maXJzdF9tb2R1bGUgPSBUQUREUl9UT19UREFUQShkbGx2aWV3X2luZm8ubG9hZF9hZGRyKTsKKwkvKiBzd2FwIGJ5dGVzIGluIHRoZSBtb2R1bGUgaGVhZGVyLCBpZiBuZWVkZWQgKi8KKwlpZiAoVEFSR0VUX0VORElBTk5FU1NfRElGRkVSUyhUQVJHRVRfQklHX0VORElBTikpIHsKKwkJc3dhcF93b3JkcygmbWhkciwgc2l6ZW9mKHN0cnVjdCBtb2R1bGVzX2hlYWRlcikgLSBzaXplb2YodTE2KSwKKwkJCSAgIE1PRFVMRVNfSEVBREVSX0JJVE1BUCk7CisJfQorCWRsbHZpZXdfaW5mbyA9IGRsbHZpZXdfaW5mb19pbml0OworCWlmICghZGx0aGlzLT5teWlvLT53cml0ZW1lbShkbHRoaXMtPm15aW8sICZtaGRyLCBtbGlzdC0+ZGJ0aGlzLAorCQkJCSAgICAmZGxsdmlld19pbmZvLAorCQkJCSAgICBzaXplb2Yoc3RydWN0IG1vZHVsZXNfaGVhZGVyKSAtCisJCQkJICAgIHNpemVvZih1MTYpKSkgeworCQlyZXR1cm47CisJfQorCS8qIEFkZCB0aGUgbW9kdWxlIGhhbmRsZSB0byB0aGlzIHByb2Nlc3NvcidzIGxpc3QKKwkgICBvZiBoYW5kbGVzIHdpdGggZGVidWcgaW5mbyAqLworCWhuZGwtPmRtLmhuZXh0ID0gbWxpc3QtPmhuZXh0OworCWlmIChobmRsLT5kbS5obmV4dCkKKwkJaG5kbC0+ZG0uaG5leHQtPmRtLmhwcmV2ID0gaG5kbDsKKwlobmRsLT5kbS5ocHJldiA9IChzdHJ1Y3QgbXlfaGFuZGxlICopbWxpc3Q7CisJbWxpc3QtPmhuZXh0ID0gaG5kbDsJLyogaW5zZXJ0IGFmdGVyIHJvb3QgKi8KK30JCQkJLyogaW5pdF9tb2R1bGVfaGFuZGxlICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm9jZWR1cmUgZHluYW1pY191bmxvYWRfbW9kdWxlCisgKgorICogUGFyYW1ldGVyczoKKyAqCW1oYW5kbGUJQSBtb2R1bGUgaGFuZGxlIGZyb20gZHluYW1pY19sb2FkX21vZHVsZQorICoJc3ltcwlIb3N0LXNpZGUgc3ltYm9sIHRhYmxlIGFuZCBtYWxsb2MvZnJlZSBmdW5jdGlvbnMKKyAqCWFsbG9jCVRhcmdldC1zaWRlIG1lbW9yeSBhbGxvY2F0aW9uCisgKgorICogRWZmZWN0OgorICoJVGhlIG1vZHVsZSBzcGVjaWZpZWQgYnkgbWhhbmRsZSBpcyB1bmxvYWRlZC4gIFVubG9hZGluZyBjYXVzZXMgYWxsCisgKiB0YXJnZXQgbWVtb3J5IHRvIGJlIGRlYWxsb2NhdGVkLCBhbGwgc3ltYm9scyBkZWZpbmVkIGJ5IHRoZSBtb2R1bGUgdG8KKyAqIGJlIHB1cmdlZCwgYW5kIGFueSBob3N0LXNpZGUgc3RvcmFnZSB1c2VkIGJ5IHRoZSBkeW5hbWljIGxvYWRlciBmb3IKKyAqIHRoaXMgbW9kdWxlIHRvIGJlIHJlbGVhc2VkLgorICoKKyAqIFJldHVybnM6CisgKglaZXJvIGZvciBzdWNjZXNzLiBPbiBlcnJvciwgdGhlIG51bWJlciBvZiBlcnJvcnMgZGV0ZWN0ZWQgaXMgcmV0dXJuZWQuCisgKiBJbmRpdmlkdWFsIGVycm9ycyBhcmUgcmVwb3J0ZWQgdXNpbmcgc3ltcy0+ZXJyb3JfcmVwb3J0KCkuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KK2ludCBkeW5hbWljX3VubG9hZF9tb2R1bGUodm9pZCAqbWhhbmRsZSwKKwkJCSAgc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAqc3ltcywKKwkJCSAgc3RydWN0IGR5bmFtaWNfbG9hZGVyX2FsbG9jYXRlICphbGxvYywKKwkJCSAgc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemUgKmluaXQpCit7CisJczE2IGN1cnJfc2VjdDsKKwlzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqYXNlY3M7CisJc3RydWN0IG15X2hhbmRsZSAqaG5kbDsKKwlzdHJ1Y3QgZGJnX21pcnJvcl9yb290ICpyb290OworCXVuc2lnbmVkIGVycmNvdW50ID0gMDsKKwlzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyBkbGx2aWV3X2luZm8gPSBkbGx2aWV3X2luZm9faW5pdDsKKwlzdHJ1Y3QgbW9kdWxlc19oZWFkZXIgbWhkcjsKKworCWhuZGwgPSAoc3RydWN0IG15X2hhbmRsZSAqKW1oYW5kbGU7CisJaWYgKCFobmRsKQorCQlyZXR1cm4gMDsJLyogaWYgaGFuZGxlIGlzIG51bGwsIG5vdGhpbmcgdG8gZG8gKi8KKwkvKiBDbGVhciBvdXQgdGhlIG1vZHVsZSBzeW1ib2xzCisJICogTm90ZSB0aGF0IGlmIHRoaXMgaXMgdGhlIG1vZHVsZSB0aGF0IGRlZmluZWQgTU9EVUxFU19IRUFERVIKKwkgKHRoZSBoZWFkIG9mIHRoZSB0YXJnZXQgZGVidWcgbGlzdCkKKwkgKiB0aGVuIHRoaXMgb3BlcmF0aW9uIHdpbGwgYmxvdyBhd2F5IHRoYXQgc3ltYm9sLgorCSBJdCB3aWxsIHRoZXJlZm9yZSBiZSBpbXBvc3NpYmxlIGZvciBzdWJzZXF1ZW50CisJICogb3BlcmF0aW9ucyB0byBhZGQgZW50cmllcyB0byB0aGlzIHVuLXJlZmVyZW5jZWFibGUgbGlzdC4gKi8KKwlpZiAoIXN5bXMpCisJCXJldHVybiAxOworCXN5bXMtPnB1cmdlX3N5bWJvbF90YWJsZShzeW1zLCAodW5zaWduZWQpaG5kbCk7CisJLyogRGVhbGxvY2F0ZSB0YXJnZXQgbWVtb3J5IGZvciBzZWN0aW9ucworCSAqIE5PVEU6IFRoZSB0cmFtcG9saW5lIHNlY3Rpb24sIGlmIGNyZWF0ZWQsIGdldHMgZGVsZXRlZCBoZXJlLCB0b28gKi8KKworCWFzZWNzID0gaG5kbC0+c2VjbnM7CisJaWYgKGFsbG9jKQorCQlmb3IgKGN1cnJfc2VjdCA9IChobmRsLT5zZWNuX2NvdW50ID4+IDEpOyBjdXJyX3NlY3QgPiAwOworCQkgICAgIGN1cnJfc2VjdCAtPSAxKSB7CisJCQlhc2Vjcy0+bmFtZSA9IE5VTEw7CisJCQlhbGxvYy0+ZGxvYWRfZGVhbGxvY2F0ZShhbGxvYywgYXNlY3MrKyk7CisJCX0KKwlyb290ID0gaG5kbC0+ZG0uaHJvb3Q7CisJaWYgKCFyb290KSB7CisJCS8qIHRoZXJlIGlzIGEgZGVidWcgbGlzdCBjb250YWluaW5nIHRoaXMgbW9kdWxlICovCisJCWdvdG8gZnVuY19lbmQ7CisJfQorCWlmICghaG5kbC0+ZG0uZGJ0aGlzKSB7CS8qIHRhcmdldC1zaWRlIGRsbHZpZXcgcmVjb3JkIGV4aXN0cyAqLworCQlnb3RvIGxvb3BfZW5kOworCX0KKwkvKiBSZXRyaWV2ZSBtZW1vcnkgY29udGV4dCBpbiB3aGljaCAuZGxsdmlldyB3YXMgYWxsb2NhdGVkICovCisJZGxsdmlld19pbmZvLmNvbnRleHQgPSBobmRsLT5kbS5jb250ZXh0OworCWlmIChobmRsLT5kbS5ocHJldiA9PSBobmRsKQorCQlnb3RvIGV4aXR1bmx0Z3Q7CisKKwkvKiB0YXJnZXQtc2lkZSBkbGx2aWV3IHJlY29yZCBpcyBpbiBsaXN0ICovCisJLyogZGVxdWV1ZSB0aGlzIHJlY29yZCBmcm9tIG91ciBHUFAtc2lkZSBtaXJyb3IgbGlzdCAqLworCWhuZGwtPmRtLmhwcmV2LT5kbS5obmV4dCA9IGhuZGwtPmRtLmhuZXh0OworCWlmIChobmRsLT5kbS5obmV4dCkKKwkJaG5kbC0+ZG0uaG5leHQtPmRtLmhwcmV2ID0gaG5kbC0+ZG0uaHByZXY7CisJLyogVXBkYXRlIG5leHRfbW9kdWxlIG9mIHByZXZpb3VzIGVudHJ5IGluIHRhcmdldCBsaXN0CisJICogV2UgYXJlIHVzaW5nIG1oZHIgaGVyZSBhcyBhIHN1cnJvZ2F0ZSBmb3IgZWl0aGVyIGEKKwkgc3RydWN0IG1vZHVsZXNfaGVhZGVyIG9yIGEgZGxsX21vZHVsZSAqLworCWlmIChobmRsLT5kbS5obmV4dCkgeworCQltaGRyLmZpcnN0X21vZHVsZSA9IFRBRERSX1RPX1REQVRBKGhuZGwtPmRtLmhuZXh0LT5kbS5kYnRoaXMpOworCQltaGRyLmZpcnN0X21vZHVsZV9zaXplID0gaG5kbC0+ZG0uaG5leHQtPmRtLmRic2l6OworCX0gZWxzZSB7CisJCW1oZHIuZmlyc3RfbW9kdWxlID0gMDsKKwkJbWhkci5maXJzdF9tb2R1bGVfc2l6ZSA9IDA7CisJfQorCWlmICghaW5pdCkKKwkJZ290byBleGl0dW5sdGd0OworCisJaWYgKCFpbml0LT5jb25uZWN0KGluaXQpKSB7CisJCWRsb2FkX3N5bXNfZXJyb3Ioc3ltcywgaWNvbm5lY3QpOworCQllcnJjb3VudCArPSAxOworCQlnb3RvIGV4aXR1bmx0Z3Q7CisJfQorCS8qIHN3YXAgYnl0ZXMgaW4gdGhlIG1vZHVsZSBoZWFkZXIsIGlmIG5lZWRlZCAqLworCWlmIChUQVJHRVRfRU5ESUFOTkVTU19ESUZGRVJTKGhuZGwtPnNlY25fY291bnQgJiAweDEpKSB7CisJCXN3YXBfd29yZHMoJm1oZHIsIHNpemVvZihzdHJ1Y3QgbW9kdWxlc19oZWFkZXIpIC0gc2l6ZW9mKHUxNiksCisJCQkgICBNT0RVTEVTX0hFQURFUl9CSVRNQVApOworCX0KKwlpZiAoIWluaXQtPndyaXRlbWVtKGluaXQsICZtaGRyLCBobmRsLT5kbS5ocHJldi0+ZG0uZGJ0aGlzLAorCQkJICAgICZkbGx2aWV3X2luZm8sIHNpemVvZihzdHJ1Y3QgbW9kdWxlc19oZWFkZXIpIC0KKwkJCSAgICBzaXplb2YobWhkci51cGRhdGVfZmxhZykpKSB7CisJCWRsb2FkX3N5bXNfZXJyb3Ioc3ltcywgZGx2d3JpdGUpOworCQllcnJjb3VudCArPSAxOworCX0KKwkvKiB1cGRhdGUgY2hhbmdlIGNvdW50ZXIgKi8KKwlyb290LT5jaGFuZ2VzICs9IDE7CisJaWYgKCFpbml0LT53cml0ZW1lbShpbml0LCAmKHJvb3QtPmNoYW5nZXMpLAorCQkJICAgIHJvb3QtPmRidGhpcyArIEhPU1RfVE9fVEFERFIKKwkJCSAgICAoc2l6ZW9mKG1oZHIuZmlyc3RfbW9kdWxlKSArCisJCQkgICAgIHNpemVvZihtaGRyLmZpcnN0X21vZHVsZV9zaXplKSksCisJCQkgICAgJmRsbHZpZXdfaW5mbywgc2l6ZW9mKG1oZHIudXBkYXRlX2ZsYWcpKSkgeworCQlkbG9hZF9zeW1zX2Vycm9yKHN5bXMsIGRsdndyaXRlKTsKKwkJZXJyY291bnQgKz0gMTsKKwl9CisJaW5pdC0+cmVsZWFzZShpbml0KTsKK2V4aXR1bmx0Z3Q6CisJLyogcmVsZWFzZSB0YXJnZXQgc3RvcmFnZSAqLworCWRsbHZpZXdfaW5mby5zaXplID0gVERBVEFfVE9fVEFERFIoaG5kbC0+ZG0uZGJzaXopOworCWRsbHZpZXdfaW5mby5sb2FkX2FkZHIgPSBobmRsLT5kbS5kYnRoaXM7CisJaWYgKGFsbG9jKQorCQlhbGxvYy0+ZGxvYWRfZGVhbGxvY2F0ZShhbGxvYywgJmRsbHZpZXdfaW5mbyk7CisJcm9vdC0+cmVmY291bnQgLT0gMTsKKwkvKiB0YXJnZXQtc2lkZSBkbGx2aWV3IHJlY29yZCBleGlzdHMgKi8KK2xvb3BfZW5kOgorI2lmbmRlZiBERUJVR19IRUFERVJfSU5fTE9BREVSCisJaWYgKHJvb3QtPnJlZmNvdW50IDw9IDApIHsKKwkJLyogaWYgYWxsIHJlZmVyZW5jZXMgZ29uZSwgYmxvdyBvZmYgdGhlIGhlYWRlciAqLworCQkvKiBvdXIgcm9vdCBzeW1ib2wgbWF5IGJlIGdvbmUgZHVlIHRvIHRoZSBQdXJnZSBhYm92ZSwKKwkJICAgYnV0IGlmIG5vdCwgZG8gbm90IGRlc3Ryb3kgdGhlIHJvb3QgKi8KKwkJaWYgKHN5bXMtPmZpbmRfbWF0Y2hpbmdfc3ltYm9sCisJCSAgICAoc3ltcywgbG9hZGVyX2RsbHZpZXdfcm9vdCkgPT0gTlVMTCkKKwkJCXN5bXMtPmRsb2FkX2RlYWxsb2NhdGUoc3ltcywgcm9vdCk7CisJfQorI2VuZGlmCitmdW5jX2VuZDoKKwkvKiB0aGVyZSBpcyBhIGRlYnVnIGxpc3QgY29udGFpbmluZyB0aGlzIG1vZHVsZSAqLworCXN5bXMtPmRsb2FkX2RlYWxsb2NhdGUoc3ltcywgbWhhbmRsZSk7CS8qIHJlbGVhc2Ugb3VyIHN0b3JhZ2UgKi8KKwlyZXR1cm4gZXJyY291bnQ7Cit9CQkJCS8qIGR5bmFtaWNfdW5sb2FkX21vZHVsZSAqLworCisjaWYgQklUU19QRVJfQVUgPiBCSVRTX1BFUl9CWVRFCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIHVucGFja19uYW1lCisgKgorICogUGFyYW1ldGVyczoKKyAqCXNvZmZzZXQJQnl0ZSBvZmZzZXQgaW50byB0aGUgc3RyaW5nIHRhYmxlCisgKgorICogRWZmZWN0OgorICoJUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHN0cmluZyBzcGVjaWZpZWQgYnkgdGhlIG9mZnNldCBzdXBwbGllZCwgb3IKKyAqIE5VTEwgZm9yIGVycm9yLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworc3RhdGljIGNoYXIgKnVucGFja19uYW1lKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzLCB1MzIgc29mZnNldCkKK3sKKwl1OCB0bXAsICpzcmM7CisJY2hhciAqZHN0OworCisJaWYgKHNvZmZzZXQgPj0gZGx0aGlzLT5kZmlsZV9oZHIuZGZfc3RydGFiX3NpemUpIHsKKwkJZGxvYWRfZXJyb3IoZGx0aGlzLCAiQmFkIHN0cmluZyB0YWJsZSBvZmZzZXQgIiBGTVRfVUkzMiwKKwkJCSAgICBzb2Zmc2V0KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXNyYyA9ICh1aW50X2xlYXN0OF90ICopIGRsdGhpcy0+c3RyX2hlYWQgKworCSAgICAoc29mZnNldCA+PiAoTE9HX0JJVFNfUEVSX0FVIC0gTE9HX0JJVFNfUEVSX0JZVEUpKTsKKwlkc3QgPSBkbHRoaXMtPnN0cl90ZW1wOworCWlmIChzb2Zmc2V0ICYgMSkKKwkJKmRzdCsrID0gKnNyYysrOwkvKiBvbmx5IDEgY2hhcmFjdGVyIGluIGZpcnN0IHdvcmQgKi8KKwlkbyB7CisJCXRtcCA9ICpzcmMrKzsKKwkJKmRzdCA9ICh0bXAgPj4gQklUU19QRVJfQllURSk7CisJCWlmICghKCpkc3QrKykpCisJCQlicmVhazsKKwl9IHdoaWxlICgoKmRzdCsrID0gdG1wICYgQllURV9NQVNLKSk7CisJZGx0aGlzLT50ZW1wX2xlbiA9IGRzdCAtIGRsdGhpcy0+c3RyX3RlbXA7CisJLyogc3F1aXJyZWwgYXdheSBsZW5ndGggaW5jbHVkaW5nIHRlcm1pbmF0aW5nIG51bGwgKi8KKwlyZXR1cm4gZGx0aGlzLT5zdHJfdGVtcDsKK30JCQkJLyogdW5wYWNrX25hbWUgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvZGxvYWRfaW50ZXJuYWwuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL2Rsb2FkX2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAyYTdjNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL2Rsb2FkX2ludGVybmFsLmgKQEAgLTAsMCArMSwzNDQgQEAKKy8qCisgKiBkbG9hZF9pbnRlcm5hbC5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgX0RMT0FEX0lOVEVSTkFMXworI2RlZmluZSBfRExPQURfSU5URVJOQUxfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICogSW50ZXJuYWwgc3RhdGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBkeW5hbWljIGxvYWRlcgorICovCisKKy8qIHR5cGUgdXNlZCBmb3IgcmVsb2NhdGlvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyAqLwordHlwZWRlZiBzMzIgcnZhbHVlOworCisvKiB1bnNpZ25lZCB2ZXJzaW9uIG9mIHNhbWU7IG11c3QgaGF2ZSBhdCBsZWFzdCBhcyBtYW55IGJpdHMgKi8KK3R5cGVkZWYgdTMyIHVydmFsdWU7CisKKy8qCisgKiBEeW5hbWljIGxvYWRlciBjb25maWd1cmF0aW9uIGNvbnN0YW50cworICovCisvKiBlcnJvciBpc3N1ZWQgaWYgaW5wdXQgaGFzIG1vcmUgc2VjdGlvbnMgdGhhbiB0aGlzIGxpbWl0ICovCisjZGVmaW5lIFJFQVNPTkFCTEVfU0VDVElPTl9MSU1JVCAxMDAKKworLyogKEFkZHJlc3NhYmxlIHVuaXQpIHZhbHVlIHVzZWQgdG8gY2xlYXIgQlNTIHNlY3Rpb24gKi8KKyNkZWZpbmUgRExPQURfRklMTF9CU1MgMAorCisvKgorICogUmVvcmRlciBtYXBzIGV4cGxhaW5lZCAoPykKKyAqCisgKiBUaGUgZG9mZiBmaWxlIGZvcm1hdCBkZWZpbmVzIGEgMzItYml0IHBhdHRlcm4gdXNlZCB0byBkZXRlcm1pbmUgdGhlCisgKiBieXRlIG9yZGVyIG9mIGFuIGltYWdlIGJlaW5nIHJlYWQuICBUaGF0IHZhbHVlIGlzCisgKiBCWVRFX1JFU0hVRkZMRV9WQUxVRSA9PSAweDAwMDEwMjAzCisgKiBGb3IgcHVycG9zZXMgb2YgdGhlIHJlb3JkZXIgcm91dGluZSwgd2Ugd291bGQgcmF0aGVyIGhhdmUgdGhlIGFsbC1pcy1PSworICogZm9yIDMyLWJpdHMgcGF0dGVybiBiZSAweDAzMDIwMTAwLiAgVGhpcyBmaXJzdCBtYWNybyBtYWtlcyB0aGUKKyAqIHRyYW5zbGF0aW9uIGZyb20gZG9mZiBmaWxlIGhlYWRlciB2YWx1ZSB0byBNQVAgdmFsdWU6ICovCisjZGVmaW5lIFJFT1JERVJfTUFQKHJhd21hcCkgKChyYXdtYXApIF4gMHgzMDMwMzAzKQorLyogVGhpcyB0cmFuc2xhdGlvbiBpcyBtYWRlIGluIGRsb2FkX2hlYWRlcnMuICBUaGVyZWFmdGVyLCB0aGUgYWxsLWlzLU9LCisgKiB2YWx1ZSBmb3IgdGhlIG1hcHMgc3RvcmVkIGluIGRsdGhpcyBpcyBSRU9SREVSX01BUChCWVRFX1JFU0hVRkZMRV9WQUxVRSkuCisgKiBCdXQgc2FkbHksIG5vdCBhbGwgYml0cyBvZiB0aGUgZG9mZiBmaWxlIGFyZSAzMi1iaXQgaW50ZWdlcnMuCisgKiBUaGUgbm90YWJsZSBleGNlcHRpb25zIGFyZSBzdHJpbmdzIGFuZCBpbWFnZSBiaXRzLgorICogU3RyaW5ncyBvYmV5IGhvc3QgYnl0ZSBvcmRlcjogKi8KKyNpZiBkZWZpbmVkKF9CSUdfRU5ESUFOKQorI2RlZmluZSBIT1NUX0JZVEVfT1JERVIoY29va2VkbWFwKSAoKGNvb2tlZG1hcCkgXiAweDMwMzAzMDMpCisjZWxzZQorI2RlZmluZSBIT1NUX0JZVEVfT1JERVIoY29va2VkbWFwKSAoY29va2VkbWFwKQorI2VuZGlmCisvKiBUYXJnZXQgYml0cyBjb25zaXN0IG9mIHRhcmdldCBBVXMgKGNvdWxkIGJlIGJ5dGVzLCBvciAxNi1iaXRzLAorICogb3IgMzItYml0cykgc3RvcmVkIGFzIGFuIGFycmF5IGluIGhvc3Qgb3JkZXIuICBBIHRhcmdldCBvcmRlcgorICogbWFwIGlzIGRlZmluZWQgYnk6ICovCisjaWYgIWRlZmluZWQoX0JJR19FTkRJQU4pIHx8IFRBUkdFVF9BVV9CSVRTID4gMTYKKyNkZWZpbmUgVEFSR0VUX09SREVSKGNvb2tlZG1hcCkgKGNvb2tlZG1hcCkKKyNlbGlmIFRBUkdFVF9BVV9CSVRTID4gOAorI2RlZmluZSBUQVJHRVRfT1JERVIoY29va2VkbWFwKSAoKGNvb2tlZG1hcCkgXiAweDIwMjAyMDIpCisjZWxzZQorI2RlZmluZSBUQVJHRVRfT1JERVIoY29va2VkbWFwKSAoKGNvb2tlZG1hcCkgXiAweDMwMzAzMDMpCisjZW5kaWYKKworLyogZm9yd2FyZCBkZWNsYXJhdGlvbiBmb3IgaGFuZGxlIHJldHVybmVkIGJ5IGR5bmFtaWMgbG9hZGVyICovCitzdHJ1Y3QgbXlfaGFuZGxlOworCisvKgorICogYSBsaXN0IG9mIG1vZHVsZSBoYW5kbGVzLCB3aGljaCBtaXJyb3JzIHRoZSBkZWJ1ZyBsaXN0IG9uIHRoZSB0YXJnZXQKKyAqLworc3RydWN0IGRiZ19taXJyb3Jfcm9vdCB7CisJLyogbXVzdCBiZSBzYW1lIGFzIGRiZ19taXJyb3JfbGlzdDsgX19ETE1vZHVsZXMgYWRkcmVzcyBvbiB0YXJnZXQgKi8KKwl1MzIgZGJ0aGlzOworCXN0cnVjdCBteV9oYW5kbGUgKmhuZXh0OwkvKiBtdXN0IGJlIHNhbWUgYXMgZGJnX21pcnJvcl9saXN0ICovCisJdTE2IGNoYW5nZXM7CQkvKiBjaGFuZ2UgY291bnRlciAqLworCXUxNiByZWZjb3VudDsJCS8qIG51bWJlciBvZiBtb2R1bGVzIHJlZmVyZW5jaW5nIHRoaXMgcm9vdCAqLworfTsKKworc3RydWN0IGRiZ19taXJyb3JfbGlzdCB7CisJdTMyIGRidGhpczsKKwlzdHJ1Y3QgbXlfaGFuZGxlICpobmV4dCwgKmhwcmV2OworCXN0cnVjdCBkYmdfbWlycm9yX3Jvb3QgKmhyb290OworCXUxNiBkYnNpejsKKwl1MzIgY29udGV4dDsJLyogU2F2ZSBjb250ZXh0IGZvciAuZGxsdmlldyBtZW1vcnkgYWxsb2NhdGlvbiAqLworfTsKKworI2RlZmluZSBWQVJJQUJMRV9TSVpFIDEKKy8qCisgKiB0aGUgc3RydWN0dXJlIHdlIGFjdHVhbGx5IHJldHVybiBhcyBhbiBvcGFxdWUgbW9kdWxlIGhhbmRsZQorICovCitzdHJ1Y3QgbXlfaGFuZGxlIHsKKwlzdHJ1Y3QgZGJnX21pcnJvcl9saXN0IGRtOwkvKiAhISEgbXVzdCBiZSBmaXJzdCAhISEgKi8KKwkvKiBzZWN0aW9ucyBmb2xsb3dpbmcgPDwgMSwgTFNCIGlzIHNldCBmb3IgYmlnLWVuZGlhbiB0YXJnZXQgKi8KKwl1MTYgc2Vjbl9jb3VudDsKKwlzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyBzZWNuc1tWQVJJQUJMRV9TSVpFXTsKK307CisjZGVmaW5lIE1ZX0hBTkRMRV9TSVpFIChzaXplb2Yoc3RydWN0IG15X2hhbmRsZSkgLVwKKwkJCXNpemVvZihzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbykpCisvKiByZWFsIHNpemUgb2YgbXlfaGFuZGxlICovCisKKy8qCisgKiByZWR1Y2VkIHN5bWJvbCBzdHJ1Y3R1cmUgdXNlZCBmb3Igc3ltYm9scyBkdXJpbmcgcmVsb2NhdGlvbgorICovCitzdHJ1Y3QgbG9jYWxfc3ltYm9sIHsKKwlzMzIgdmFsdWU7CQkvKiBSZWxvY2F0ZWQgc3ltYm9sIHZhbHVlICovCisJczMyIGRlbHRhOwkJLyogT3JpZ2luYWwgdmFsdWUgaW4gaW5wdXQgZmlsZSAqLworCXMxNiBzZWNubjsJCS8qIHNlY3Rpb24gbnVtYmVyICovCisJczE2IHNjbGFzczsJCS8qIHN5bWJvbCBjbGFzcyAqLworfTsKKworLyoKKyAqIFRyYW1wb2xpbmUgZGF0YSBzdHJ1Y3R1cmVzCisgKi8KKyNkZWZpbmUgVFJBTVBfTk9fR0VOX0FWQUlMICAgICAgICAgICAgICA2NTUzNQorI2RlZmluZSBUUkFNUF9TWU1fUFJFRklYICAgICAgICAgICAgICAgICJfXyRkYlRSX18iCisjZGVmaW5lIFRSQU1QX1NFQ1RfTkFNRSAgICAgICAgICAgICAgICAgIi5kYlRSIgorLyogTVVTVCBNQVRDSCBUSEUgTEVOR1RIIEFCT1ZFISEgKi8KKyNkZWZpbmUgVFJBTVBfU1lNX1BSRUZJWF9MRU4gICAgICAgICAgICA5CisvKiBJbmNsdWRlcyBOVUxMIHRlcm1pbmF0aW9uICovCisjZGVmaW5lIFRSQU1QX1NZTV9IRVhfQVNDSUlfTEVOICAgICAgICAgOQorCisjZGVmaW5lIEdFVF9DT05UQUlORVIocHRyLCB0eXBlLCBmaWVsZCkgKCh0eXBlICopKCh1bnNpZ25lZCBsb25nKXB0ciAtXAorCQkJCSh1bnNpZ25lZCBsb25nKSgmKCh0eXBlICopMCktPmZpZWxkKSkpCisjaWZuZGVmIEZJRUxEX09GRlNFVAorI2RlZmluZSBGSUVMRF9PRkZTRVQodHlwZSwgZmllbGQpICAgICAgICgodW5zaWduZWQgbG9uZykoJigodHlwZSAqKTApLT5maWVsZCkpCisjZW5kaWYKKworLyoKKyAgICBUaGUgdHJhbXBvbGluZSBjb2RlIGZvciB0aGUgdGFyZ2V0IGlzIGxvY2F0ZWQgaW4gYSB0YWJsZSBjYWxsZWQKKyAgICAidHJhbXBfZ2VuX2luZm8iIHdpdGggaXMgaW5kZXhlZCBieSBsb29raW5nIHVwIHRoZSBpbmRleCBpbiB0aGUgdGFibGUKKyAgICAidHJhbXBfbWFwIi4gIFRoZSB0cmFtcF9tYXAgaW5kZXggaXMgYWNxdWlyZWQgdXNpbmcgdGhlIHRhcmdldAorICAgIEhBU0hfRlVOQyBvbiB0aGUgcmVsb2NhdGlvbiB0eXBlIHRoYXQgY2F1c2VkIHRoZSB0cmFtcG9saW5lLiAgRWFjaAorICAgIHRyYW1wb2xpbmUgY29kZSB0YWJsZSBlbnRyeSBNVVNUIGZvbGxvdyB0aGlzIGZvcm1hdDoKKworICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICAgIHwgIHRyYW1wX2dlbl9jb2RlX2hkciAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICAgIHwgIFRyYW1wb2xpbmUgaW1hZ2UgY29kZSAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIHwgICh0aGUgcmF3IGluc3RydWN0aW9uIGNvZGUgZm9yIHRoZSB0YXJnZXQpICAgfAorICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICAgIHwgIFJlbG9jYXRpb24gZW50cmllcyBmb3IgdGhlIGltYWdlIGNvZGUgICAgICAgfAorICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorCisgICAgVGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gaG93IGltYWdlIGRhdGEgaXMgbGFpZCBvdXQgaW4gdGhlIERPRkYgZmlsZQorICAgIGl0c2VsZi4KKyAqLworc3RydWN0IHRyYW1wX2dlbl9jb2RlX2hkciB7CisJdTMyIHRyYW1wX2NvZGVfc2l6ZTsJLyogIGluIEJZVEVTICovCisJdTMyIG51bV9yZWxvczsKKwl1MzIgcmVsb19vZmZzZXQ7CS8qICBpbiBCWVRFUyAqLworfTsKKworc3RydWN0IHRyYW1wX2ltZ19wa3QgeworCXN0cnVjdCB0cmFtcF9pbWdfcGt0ICpuZXh0OwkvKiAgTVVTVCBCRSBGSVJTVCAqLworCXUzMiBiYXNlOworCXN0cnVjdCB0cmFtcF9nZW5fY29kZV9oZHIgaGRyOworCXU4IHBheWxvYWRbVkFSSUFCTEVfU0laRV07Cit9OworCitzdHJ1Y3QgdHJhbXBfaW1nX2R1cF9yZWxvIHsKKwlzdHJ1Y3QgdHJhbXBfaW1nX2R1cF9yZWxvICpuZXh0OworCXN0cnVjdCByZWxvY19yZWNvcmRfdCByZWxvOworfTsKKworc3RydWN0IHRyYW1wX2ltZ19kdXBfcGt0IHsKKwlzdHJ1Y3QgdHJhbXBfaW1nX2R1cF9wa3QgKm5leHQ7CS8qICBNVVNUIEJFIEZJUlNUICovCisJczE2IHNlY25uOworCXUzMiBvZmZzZXQ7CisJc3RydWN0IGltYWdlX3BhY2tldF90IGltZ19wa3Q7CisJc3RydWN0IHRyYW1wX2ltZ19kdXBfcmVsbyAqcmVsb19jaGFpbjsKKworCS8qICBQQVlMT0FEIE9GIElNRyBQS1QgRk9MTE9XUyAqLworfTsKKworc3RydWN0IHRyYW1wX3N5bSB7CisJc3RydWN0IHRyYW1wX3N5bSAqbmV4dDsJLyogIE1VU1QgQkUgRklSU1QgKi8KKwl1MzIgaW5kZXg7CisJdTMyIHN0cl9pbmRleDsKKwlzdHJ1Y3QgbG9jYWxfc3ltYm9sIHN5bV9pbmZvOworfTsKKworc3RydWN0IHRyYW1wX3N0cmluZyB7CisJc3RydWN0IHRyYW1wX3N0cmluZyAqbmV4dDsJLyogIE1VU1QgQkUgRklSU1QgKi8KKwl1MzIgaW5kZXg7CisJY2hhciBzdHJbVkFSSUFCTEVfU0laRV07CS8qICBOVUxMIHRlcm1pbmF0ZWQgKi8KK307CisKK3N0cnVjdCB0cmFtcF9pbmZvIHsKKwl1MzIgdHJhbXBfc2VjdF9uZXh0X2FkZHI7CisJc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gc2VjdF9pbmZvOworCisJc3RydWN0IHRyYW1wX3N5bSAqc3ltYm9sX2hlYWQ7CisJc3RydWN0IHRyYW1wX3N5bSAqc3ltYm9sX3RhaWw7CisJdTMyIHRyYW1wX3N5bV9uZXh0X2luZGV4OworCXN0cnVjdCBsb2NhbF9zeW1ib2wgKmZpbmFsX3N5bV90YWJsZTsKKworCXN0cnVjdCB0cmFtcF9zdHJpbmcgKnN0cmluZ19oZWFkOworCXN0cnVjdCB0cmFtcF9zdHJpbmcgKnN0cmluZ190YWlsOworCXUzMiB0cmFtcF9zdHJpbmdfbmV4dF9pbmRleDsKKwl1MzIgdHJhbXBfc3RyaW5nX3NpemU7CisJY2hhciAqZmluYWxfc3RyaW5nX3RhYmxlOworCisJc3RydWN0IHRyYW1wX2ltZ19wa3QgKnRyYW1wX3BrdHM7CisJc3RydWN0IHRyYW1wX2ltZ19kdXBfcGt0ICpkdXBfcGt0czsKK307CisKKy8qCisgKiBTdGF0ZXMgb2YgdGhlIC5jaW5pdCBzdGF0ZSBtYWNoaW5lCisgKi8KK2VudW0gY2luaXRfbW9kZSB7CisJQ0lfQ09VTlQgPSAwLAkJLyogZXhwZWN0aW5nIGEgY291bnQgKi8KKwlDSV9BRERSRVNTLAkJLyogZXhwZWN0aW5nIGFuIGFkZHJlc3MgKi8KKyNpZiBDSU5JVF9BTElHTiA8IENJTklUX0FERFJFU1MJLyogaGFuZGxlIGNhc2Ugb2YgcGFydGlhbCBhZGRyZXNzIGZpZWxkICovCisJQ0lfUEFSVEFERFJFU1MsCQkvKiBoYXZlIG9ubHkgcGFydCBvZiB0aGUgYWRkcmVzcyAqLworI2VuZGlmCisJQ0lfQ09QWSwJCS8qIGluIHRoZSBtaWRkbGUgb2YgY29weWluZyBkYXRhICovCisJQ0lfRE9ORQkJCS8qIGVuZCBvZiAuY2luaXQgdGFibGUgKi8KK307CisKKy8qCisgKiBUaGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGR5bmFtaWMgbG9hZGVyLCB3aGljaCBpcyBwYXNzZWQgYXJvdW5kIGFzCisgKiBhbiBvYmplY3QKKyAqLworc3RydWN0IGRsb2FkX3N0YXRlIHsKKwlzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3RyZWFtICpzdHJtOwkvKiBUaGUgbW9kdWxlIGlucHV0IHN0cmVhbSAqLworCXN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0gKm15c3ltOwkvKiBTeW1ib2xzIGZvciB0aGlzIHNlc3Npb24gKi8KKwkvKiB0YXJnZXQgbWVtb3J5IGFsbG9jYXRvciAqLworCXN0cnVjdCBkeW5hbWljX2xvYWRlcl9hbGxvY2F0ZSAqbXlhbGxvYzsKKwlzdHJ1Y3QgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqbXlpbzsJLyogdGFyZ2V0IG1lbW9yeSBpbml0aWFsaXplciAqLworCXVuc2lnbmVkIG15b3B0aW9uczsJLyogT3B0aW9ucyBwYXJhbWV0ZXIgZHluYW1pY19sb2FkX21vZHVsZSAqLworCisJY2hhciAqc3RyX2hlYWQ7CQkvKiBQb2ludGVyIHRvIHN0cmluZyB0YWJsZSAqLworI2lmIEJJVFNfUEVSX0FVID4gQklUU19QRVJfQllURQorCWNoYXIgKnN0cl90ZW1wOwkJLyogUG9pbnRlciB0byB0ZW1wb3JhcnkgYnVmZmVyIGZvciBzdHJpbmdzICovCisJLyogYmlnIGVub3VnaCB0byBob2xkIGxvbmdlc3Qgc3RyaW5nICovCisJdW5zaWduZWQgdGVtcF9sZW47CS8qIGxlbmd0aCBvZiBsYXN0IHRlbXBvcmFyeSBzdHJpbmcgKi8KKwljaGFyICp4c3RyaW5nczsJCS8qIFBvaW50ZXIgdG8gYnVmZmVyIGZvciBleHBhbmRlZCAqLworCS8qIHN0cmluZ3MgZm9yIHNlYyBuYW1lcyAqLworI2VuZGlmCisJLyogVG90YWwgc2l6ZSBvZiBzdHJpbmdzIGZvciBETExWaWV3IHNlY3Rpb24gbmFtZXMgKi8KKwl1bnNpZ25lZCBkZWJ1Z19zdHJpbmdfc2l6ZTsKKwkvKiBQb2ludGVyIHRvIHBhcmFsbGVsIHNlY3Rpb24gaW5mbyBmb3IgYWxsb2NhdGVkIHNlY3Rpb25zIG9ubHkgKi8KKwlzdHJ1Y3QgZG9mZl9zY25oZHJfdCAqc2VjdF9oZHJzOwkvKiBQb2ludGVyIHRvIHNlY3Rpb24gdGFibGUgKi8KKwlzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqbGRyX3NlY3Rpb25zOworI2lmIFRNUzMyMDYwCisJLyogVGhlIGFkZHJlc3Mgb2YgdGhlIHN0YXJ0IG9mIHRoZSAuYnNzIHNlY3Rpb24gKi8KKwlsZHJfYWRkciBic3NfcnVuX2Jhc2U7CisjZW5kaWYKKwlzdHJ1Y3QgbG9jYWxfc3ltYm9sICpsb2NhbF9zeW10YWI7CS8qIFJlbG9jYXRpb24gc3ltYm9sIHRhYmxlICovCisKKwkvKiBwb2ludGVyIHRvIERMIHNlY3Rpb24gaW5mbyBmb3IgdGhlIHNlY3Rpb24gYmVpbmcgcmVsb2NhdGVkICovCisJc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKmltYWdlX3NlY247CisJLyogY2hhbmdlIGluIHJ1biBhZGRyZXNzIGZvciBjdXJyZW50IHNlY3Rpb24gZHVyaW5nIHJlbG9jYXRpb24gKi8KKwlsZHJfYWRkciBkZWx0YV9ydW5hZGRyOworCWxkcl9hZGRyIGltYWdlX29mZnNldDsJLyogb2Zmc2V0IG9mIGN1cnJlbnQgcGFja2V0IGluIHNlY3Rpb24gKi8KKwllbnVtIGNpbml0X21vZGUgY2luaXRfc3RhdGU7CS8qIGN1cnJlbnQgc3RhdGUgb2YgY2xvYWRfY2luaXQoKSAqLworCWludCBjaW5pdF9jb3VudDsJLyogdGhlIGN1cnJlbnQgY291bnQgKi8KKwlsZHJfYWRkciBjaW5pdF9hZGRyOwkvKiB0aGUgY3VycmVudCBhZGRyZXNzICovCisJczE2IGNpbml0X3BhZ2U7CQkvKiB0aGUgY3VycmVudCBwYWdlICovCisJLyogSGFuZGxlIHRvIGJlIHJldHVybmVkIGJ5IGR5bmFtaWNfbG9hZF9tb2R1bGUgKi8KKwlzdHJ1Y3QgbXlfaGFuZGxlICpteWhhbmRsZTsKKwl1bnNpZ25lZCBkbG9hZF9lcnJjb3VudDsJLyogVG90YWwgIyBvZiBlcnJvcnMgcmVwb3J0ZWQgc28gZmFyICovCisJLyogTnVtYmVyIG9mIHRhcmdldCBzZWN0aW9ucyB0aGF0IHJlcXVpcmUgYWxsb2NhdGlvbiBhbmQgcmVsb2NhdGlvbiAqLworCXVuc2lnbmVkIGFsbG9jYXRlZF9zZWNuX2NvdW50OworI2lmbmRlZiBUQVJHRVRfRU5ESUFOTkVTUworCWludCBiaWdfZV90YXJnZXQ7CS8qIFRhcmdldCBkYXRhIGluIGJpZy1lbmRpYW4gZm9ybWF0ICovCisjZW5kaWYKKwkvKiBtYXAgZm9yIHJlb3JkZXJpbmcgYnl0ZXMsIDAgaWYgbm90IG5lZWRlZCAqLworCXUzMiByZW9yZGVyX21hcDsKKwlzdHJ1Y3QgZG9mZl9maWxlaGRyX3QgZGZpbGVfaGRyOwkvKiBET0ZGIGZpbGUgaGVhZGVyIHN0cnVjdHVyZSAqLworCXN0cnVjdCBkb2ZmX3ZlcmlmeV9yZWNfdCB2ZXJpZnk7CS8qIFZlcmlmeSByZWNvcmQgKi8KKworCXN0cnVjdCB0cmFtcF9pbmZvIHRyYW1wOwkvKiBUcmFtcG9saW5lIGRhdGEsIGlmIG5lZWRlZCAqLworCisJaW50IHJlbHN0a2lkeDsJCS8qIGluZGV4IGludG8gcmVsb2NhdGlvbiB2YWx1ZSBzdGFjayAqLworCS8qIHJlbG9jYXRpb24gdmFsdWUgc3RhY2sgdXNlZCBpbiByZWxleHAuYyAqLworCXJ2YWx1ZSByZWxzdGtbU1RBVElDX0VYUFJfU1RLX1NJWkVdOworCit9OworCisjaWZkZWYgVEFSR0VUX0VORElBTk5FU1MKKyNkZWZpbmUgVEFSR0VUX0JJR19FTkRJQU4gVEFSR0VUX0VORElBTk5FU1MKKyNlbHNlCisjZGVmaW5lIFRBUkdFVF9CSUdfRU5ESUFOIChkbHRoaXMtPmJpZ19lX3RhcmdldCkKKyNlbmRpZgorCisvKgorICogRXhwb3J0cyBmcm9tIGNsb2FkLmMgdG8gcmVzdCBvZiB0aGUgd29ybGQKKyAqLworZXh0ZXJuIHZvaWQgZGxvYWRfZXJyb3Ioc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsIGNvbnN0IGNoYXIgKmVycnR4dCwgLi4uKTsKK2V4dGVybiB2b2lkIGRsb2FkX3N5bXNfZXJyb3Ioc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAqc3ltcywKKwkJCSAgICAgY29uc3QgY2hhciAqZXJydHh0LCAuLi4pOworZXh0ZXJuIHZvaWQgZGxvYWRfaGVhZGVycyhzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcyk7CitleHRlcm4gdm9pZCBkbG9hZF9zdHJpbmdzKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzLCBib29sIHNlY19uYW1lc19vbmx5KTsKK2V4dGVybiB2b2lkIGRsb2FkX3NlY3Rpb25zKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzKTsKK2V4dGVybiB2b2lkIGRsb2FkX3Jlb3JkZXIodm9pZCAqZGF0YSwgaW50IGRzaXosIHUzMiBtYXApOworZXh0ZXJuIHUzMiBkbG9hZF9jaGVja3N1bSh2b2lkICpkYXRhLCB1bnNpZ25lZCBzaXopOworCisjaWYgSE9TVF9FTkRJQU5ORVNTCitleHRlcm4gdWludDMyX3QgZGxvYWRfcmV2ZXJzZV9jaGVja3N1bSh2b2lkICpkYXRhLCB1bnNpZ25lZCBzaXopOworI2lmIChUQVJHRVRfQVVfQklUUyA+IDgpICYmIChUQVJHRVRfQVVfQklUUyA8IDMyKQorZXh0ZXJuIHVpbnQzMl90IGRsb2FkX3JldmVyc2VfY2hlY2tzdW0xNih2b2lkICpkYXRhLCB1bnNpZ25lZCBzaXopOworI2VuZGlmCisjZW5kaWYKKworLyoKKyAqIGV4cG9ydGVkIGJ5IHJlbG9jLmMKKyAqLworZXh0ZXJuIHZvaWQgZGxvYWRfcmVsb2NhdGUoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsIHRndF9hdV90ICogZGF0YSwKKwkJCSAgIHN0cnVjdCByZWxvY19yZWNvcmRfdCAqcnAsIGJvb2wgKiB0cmFtcHNfZ2VuZXJhdGVkLAorCQkJICAgYm9vbCBzZWNvbmRfcGFzcyk7CisKK2V4dGVybiBydmFsdWUgZGxvYWRfdW5wYWNrKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzLCB0Z3RfYXVfdCAqIGRhdGEsCisJCQkgICBpbnQgZmllbGRzeiwgaW50IG9mZnNldCwgdW5zaWduZWQgc2duKTsKKworZXh0ZXJuIGludCBkbG9hZF9yZXBhY2soc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsIHJ2YWx1ZSB2YWwsIHRndF9hdV90ICogZGF0YSwKKwkJCWludCBmaWVsZHN6LCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBzZ24pOworCisvKgorICogZXhwb3J0ZWQgYnkgdHJhbXAuYworICovCitleHRlcm4gYm9vbCBkbG9hZF90cmFtcF9hdmFpbChzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcywKKwkJCSAgICAgIHN0cnVjdCByZWxvY19yZWNvcmRfdCAqcnApOworCitpbnQgZGxvYWRfdHJhbXBfZ2VuZXJhdGUoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsIHMxNiBzZWNubiwKKwkJCSB1MzIgaW1hZ2Vfb2Zmc2V0LCBzdHJ1Y3QgaW1hZ2VfcGFja2V0X3QgKmlwYWNrZXQsCisJCQkgc3RydWN0IHJlbG9jX3JlY29yZF90ICpycCk7CisKK2V4dGVybiBpbnQgZGxvYWRfdHJhbXBfcGt0X3VkcGF0ZShzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcywKKwkJCQkgIHMxNiBzZWNubiwgdTMyIGltYWdlX29mZnNldCwKKwkJCQkgIHN0cnVjdCBpbWFnZV9wYWNrZXRfdCAqaXBhY2tldCk7CisKK2V4dGVybiBpbnQgZGxvYWRfdHJhbXBfZmluYWxpemUoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMpOworCitleHRlcm4gdm9pZCBkbG9hZF90cmFtcF9jbGVhbnVwKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzKTsKKworI2VuZGlmIC8qIF9ETE9BRF9JTlRFUk5BTF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL2RvZmYuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL2RvZmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2MzMTQ1NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL2RvZmYuaApAQCAtMCwwICsxLDM1NCBAQAorLyoKKyAqIGRvZmYuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBTdHJ1Y3R1cmVzICYgZGVmaW5pdGlvbnMgdXNlZCBmb3IgZHluYW1pY2FsbHkgbG9hZGVkIG1vZHVsZXMgZmlsZSBmb3JtYXQuCisgKiBUaGlzIGZvcm1hdCBpcyBhIHJlZm9ybWF0dGVkIHZlcnNpb24gb2YgQ09GRi4gSXQgb3B0aW1pemVzIHRoZSBsYXlvdXQgZm9yCisgKiB0aGUgZHluYW1pYyBsb2FkZXIuCisgKgorICogLmRvZiBmaWxlcywgd2hlbiB2aWV3ZWQgYXMgYSBzZXF1ZW5jZSBvZiAzMi1iaXQgaW50ZWdlcnMsIGxvb2sgdGhlIHNhbWUKKyAqIG9uIGJpZy1lbmRpYW4gYW5kIGxpdHRsZS1lbmRpYW4gbWFjaGluZXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBfRE9GRl9ICisjZGVmaW5lIF9ET0ZGX0gKKworCisjZGVmaW5lIEJZVEVfUkVTSFVGRkxFX1ZBTFVFIDB4MDAwMTAyMDMKKworLyogRE9GRiBmaWxlIGhlYWRlciBjb250YWluaW5nIGZpZWxkcyBjYXRlZ29yaXppbmcgdGhlIHJlbWFpbmRlciBvZiB0aGUgZmlsZSAqLworc3RydWN0IGRvZmZfZmlsZWhkcl90IHsKKworCS8qIHN0cmluZyB0YWJsZSBzaXplLCBpbmNsdWRpbmcgZmlsZW5hbWUsIGluIGJ5dGVzICovCisJdTMyIGRmX3N0cnRhYl9zaXplOworCisJLyogZW50cnkgcG9pbnQgaWYgb25lIGV4aXN0cyAqLworCXUzMiBkZl9lbnRyeXB0OworCisJLyogaWRlbnRpZmllcyBieXRlIG9yZGVyaW5nIG9mIGZpbGU7CisJICogYWx3YXlzIHNldCB0byBCWVRFX1JFU0hVRkZMRV9WQUxVRSAqLworCXUzMiBkZl9ieXRlX3Jlc2h1ZmZsZTsKKworCS8qIFNpemUgb2YgdGhlIHN0cmluZyB0YWJsZSB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBsYXN0IHNlY3Rpb24gbmFtZSAqLworCS8qIFNpemUgaW5jbHVkZXMgdGhlIG5hbWUgb2YgdGhlIENPRkYgZmlsZSBhbHNvICovCisJdTMyIGRmX3Njbl9uYW1lX3NpemU7CisKKyNpZm5kZWYgX0JJR19FTkRJQU4KKwkvKiBudW1iZXIgb2Ygc3ltYm9scyAqLworCXUxNiBkZl9ub19zeW1zOworCisJLyogbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBsb25nZXN0IHN0cmluZywgaW5jbHVkaW5nIHRlcm1pbmF0aW5nIE5VTEwgKi8KKwkvKiBleGNsdWRlcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSAqLworCXUxNiBkZl9tYXhfc3RyX2xlbjsKKworCS8qIHRvdGFsIG51bWJlciBvZiBzZWN0aW9ucyBpbmNsdWRpbmcgbm8tbG9hZCBvbmVzICovCisJdTE2IGRmX25vX3NjbnM7CisKKwkvKiBudW1iZXIgb2Ygc2VjdGlvbnMgY29udGFpbmluZyB0YXJnZXQgY29kZSBhbGxvY2F0ZWQgb3IgZG93bmxvYWRlZCAqLworCXUxNiBkZl90YXJnZXRfc2NuczsKKworCS8qIHVuaXF1ZSBpZCBmb3IgZGxsIGZpbGUgZm9ybWF0ICYgdmVyc2lvbiAqLworCXUxNiBkZl9kb2ZmX3ZlcnNpb247CisKKwkvKiBpZGVudGlmaWVzIElTQSAqLworCXUxNiBkZl90YXJnZXRfaWQ7CisKKwkvKiB1c2VmdWwgZmlsZSBmbGFncyAqLworCXUxNiBkZl9mbGFnczsKKworCS8qIHNlY3Rpb24gcmVmZXJlbmNlIGZvciBlbnRyeSBwb2ludCwgTl9VTkRFRiBmb3Igbm9uZSwgKi8KKwkvKiBOX0FCUyBmb3IgYWJzb2x1dGUgYWRkcmVzcyAqLworCXMxNiBkZl9lbnRyeV9zZWNuOworI2Vsc2UKKwkvKiBsZW5ndGggb2YgdGhlIGxvbmdlc3Qgc3RyaW5nLCBpbmNsdWRpbmcgdGVybWluYXRpbmcgTlVMTCAqLworCXUxNiBkZl9tYXhfc3RyX2xlbjsKKworCS8qIG51bWJlciBvZiBzeW1ib2xzICovCisJdTE2IGRmX25vX3N5bXM7CisKKwkvKiBudW1iZXIgb2Ygc2VjdGlvbnMgY29udGFpbmluZyB0YXJnZXQgY29kZSBhbGxvY2F0ZWQgb3IgZG93bmxvYWRlZCAqLworCXUxNiBkZl90YXJnZXRfc2NuczsKKworCS8qIHRvdGFsIG51bWJlciBvZiBzZWN0aW9ucyBpbmNsdWRpbmcgbm8tbG9hZCBvbmVzICovCisJdTE2IGRmX25vX3NjbnM7CisKKwkvKiBpZGVudGlmaWVzIElTQSAqLworCXUxNiBkZl90YXJnZXRfaWQ7CisKKwkvKiB1bmlxdWUgaWQgZm9yIGRsbCBmaWxlIGZvcm1hdCAmIHZlcnNpb24gKi8KKwl1MTYgZGZfZG9mZl92ZXJzaW9uOworCisJLyogc2VjdGlvbiByZWZlcmVuY2UgZm9yIGVudHJ5IHBvaW50LCBOX1VOREVGIGZvciBub25lLCAqLworCS8qIE5fQUJTIGZvciBhYnNvbHV0ZSBhZGRyZXNzICovCisJczE2IGRmX2VudHJ5X3NlY247CisKKwkvKiB1c2VmdWwgZmlsZSBmbGFncyAqLworCXUxNiBkZl9mbGFnczsKKyNlbmRpZgorCS8qIGNoZWNrc3VtIGZvciBmaWxlIGhlYWRlciByZWNvcmQgKi8KKwl1MzIgZGZfY2hlY2tzdW07CisKK307CisKKy8qIGZsYWdzIGluIHRoZSBkZl9mbGFncyBmaWVsZCAqLworI2RlZmluZSAgREZfTElUVExFICAgMHgxMDAKKyNkZWZpbmUgIERGX0JJRyAgICAgIDB4MjAwCisjZGVmaW5lICBERl9CWVRFX09SREVSIChERl9MSVRUTEUgfCBERl9CSUcpCisKKy8qIFN1cHBvcnRlZCBwcm9jZXNzb3JzICovCisjZGVmaW5lIFRNUzQ3MF9JRCAgIDB4OTcKKyNkZWZpbmUgTEVBRF9JRCAgICAgMHg5OAorI2RlZmluZSBUTVMzMjA2MF9JRCAweDk5CisjZGVmaW5lIExFQUQzX0lEICAgIDB4OWMKKworLyogUHJpbWFyeSBwcm9jZXNzb3IgZm9yIGxvYWRpbmcgKi8KKyNpZiBUTVMzMjA2MAorI2RlZmluZSBUQVJHRVRfSUQgICBUTVMzMjA2MF9JRAorI2VuZGlmCisKKy8qIFZlcmlmaWNhdGlvbiByZWNvcmQgY29udGFpbmluZyB2YWx1ZXMgdXNlZCB0byB0ZXN0IGludGVncml0eSBvZiB0aGUgYml0cyAqLworc3RydWN0IGRvZmZfdmVyaWZ5X3JlY190IHsKKworCS8qIHRpbWUgYW5kIGRhdGUgc3RhbXAgKi8KKwl1MzIgZHZfdGltZGF0OworCisJLyogY2hlY2tzdW0gZm9yIGFsbCBzZWN0aW9uIHJlY29yZHMgKi8KKwl1MzIgZHZfc2NuX3JlY19jaGVja3N1bTsKKworCS8qIGNoZWNrc3VtIGZvciBzdHJpbmcgdGFibGUgKi8KKwl1MzIgZHZfc3RyX3RhYl9jaGVja3N1bTsKKworCS8qIGNoZWNrc3VtIGZvciBzeW1ib2wgdGFibGUgKi8KKwl1MzIgZHZfc3ltX3RhYl9jaGVja3N1bTsKKworCS8qIGNoZWNrc3VtIGZvciB2ZXJpZmljYXRpb24gcmVjb3JkICovCisJdTMyIGR2X3ZlcmlmeV9yZWNfY2hlY2tzdW07CisKK307CisKKy8qIFN0cmluZyB0YWJsZSBpcyBhbiBhcnJheSBvZiBudWxsLXRlcm1pbmF0ZWQgc3RyaW5ncy4gIFRoZSBmaXJzdCBlbnRyeSBpcworICogdGhlIGZpbGVuYW1lLCB3aGljaCBpcyBhZGRlZCBieSBETExjcmVhdGUuICBObyBuZXcgc3RydWN0dXJlIGRlZmluaXRpb25zCisgKiBhcmUgcmVxdWlyZWQuCisgKi8KKworLyogU2VjdGlvbiBSZWNvcmRzIGluY2x1ZGluZyBpbmZvcm1hdGlvbiBvbiB0aGUgY29ycmVzcG9uZGluZyBpbWFnZSBwYWNrZXRzICovCisvKgorICogICAgICAhIVdBUk5JTkchIQorICoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIGV4cGVjdGVkIHRvIG1hdGNoIGluIGZvcm0gbGRyX3NlY3Rpb25faW5mbyBpbgorICogZHluYW1pY19sb2FkZXIuaAorICovCisKK3N0cnVjdCBkb2ZmX3Njbmhkcl90IHsKKworCXMzMiBkc19vZmZzZXQ7CQkvKiBvZmZzZXQgaW50byBzdHJpbmcgdGFibGUgb2YgbmFtZSAqLworCXMzMiBkc19wYWRkcjsJCS8qIFJVTiBhZGRyZXNzLCBpbiB0YXJnZXQgQVUgKi8KKwlzMzIgZHNfdmFkZHI7CQkvKiBMT0FEIGFkZHJlc3MsIGluIHRhcmdldCBBVSAqLworCXMzMiBkc19zaXplOwkJLyogc2VjdGlvbiBzaXplLCBpbiB0YXJnZXQgQVUgKi8KKyNpZm5kZWYgX0JJR19FTkRJQU4KKwl1MTYgZHNfcGFnZTsJCS8qIG1lbW9yeSBwYWdlIGlkICovCisJdTE2IGRzX2ZsYWdzOwkJLyogc2VjdGlvbiBmbGFncyAqLworI2Vsc2UKKwl1MTYgZHNfZmxhZ3M7CQkvKiBzZWN0aW9uIGZsYWdzICovCisJdTE2IGRzX3BhZ2U7CQkvKiBtZW1vcnkgcGFnZSBpZCAqLworI2VuZGlmCisJdTMyIGRzX2ZpcnN0X3BrdF9vZmZzZXQ7CisJLyogQWJzb2x1dGUgYnl0ZSBvZmZzZXQgaW50byB0aGUgZmlsZSAqLworCS8qIHdoZXJlIHRoZSBmaXJzdCBpbWFnZSByZWNvcmQgcmVzaWRlcyAqLworCisJczMyIGRzX25pcGFja3M7CQkvKiBudW1iZXIgb2YgaW1hZ2UgcGFja2V0cyAqLworCit9OworCisvKiBTeW1ib2wgdGFibGUgZW50cnkgKi8KK3N0cnVjdCBkb2ZmX3N5bWVudF90IHsKKworCXMzMiBkbl9vZmZzZXQ7CQkvKiBvZmZzZXQgaW50byBzdHJpbmcgdGFibGUgb2YgbmFtZSAqLworCXMzMiBkbl92YWx1ZTsJCS8qIHZhbHVlIG9mIHN5bWJvbCAqLworI2lmbmRlZiBfQklHX0VORElBTgorCXMxNiBkbl9zY251bTsJCS8qIHNlY3Rpb24gbnVtYmVyICovCisJczE2IGRuX3NjbGFzczsJCS8qIHN0b3JhZ2UgY2xhc3MgKi8KKyNlbHNlCisJczE2IGRuX3NjbGFzczsJCS8qIHN0b3JhZ2UgY2xhc3MgKi8KKwlzMTYgZG5fc2NudW07CQkvKiBzZWN0aW9uIG51bWJlciwgMS1iYXNlZCAqLworI2VuZGlmCisKK307CisKKy8qIHNwZWNpYWwgdmFsdWVzIGZvciBkbl9zY251bSAqLworI2RlZmluZSAgRE5fVU5ERUYgIDAJCS8qIHVuZGVmaW5lZCBzeW1ib2wgKi8KKyNkZWZpbmUgIEROX0FCUyAgICAoLTEpCQkvKiB2YWx1ZSBvZiBzeW1ib2wgaXMgYWJzb2x1dGUgKi8KKy8qIHNwZWNpYWwgdmFsdWVzIGZvciBkbl9zY2xhc3MgKi8KKyNkZWZpbmUgRE5fRVhUICAgICAyCisjZGVmaW5lIEROX1NUQVRMQUIgMjAKKyNkZWZpbmUgRE5fRVhUTEFCICAyMQorCisvKiBEZWZhdWx0IHZhbHVlIG9mIGltYWdlIGJpdHMgaW4gcGFja2V0ICovCisvKiBDb25maWd1cmFibGUgYnkgdXNlciBvbiB0aGUgY29tbWFuZCBsaW5lICovCisjZGVmaW5lIElNQUdFX1BBQ0tFVF9TSVpFIDEwMjQKKworLyogQW4gaW1hZ2UgcGFja2V0IGNvbnRhaW5zIGEgY2h1bmsgb2YgZGF0YSBmcm9tIGEgc2VjdGlvbiBhbG9uZyB3aXRoICovCisvKiBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIGl0cyBwcm9jZXNzaW5nLiAqLworc3RydWN0IGltYWdlX3BhY2tldF90IHsKKworCXMzMiBudW1fcmVsb2NzOwkJLyogbnVtYmVyIG9mIHJlbG9jYXRpb25zIGZvciAqLworCS8qIHRoaXMgcGFja2V0ICovCisKKwlzMzIgcGFja2V0X3NpemU7CS8qIG51bWJlciBvZiBieXRlcyBpbiBhcnJheSAqLworCS8qICJiaXRzIiBvY2N1cGllZCAgYnkgKi8KKwkvKiB2YWxpZCBkYXRhLiAgQ291bGQgYmUgKi8KKwkvKiA8IElNQUdFX1BBQ0tFVF9TSVpFIHRvICovCisJLyogcHJldmVudCBzcGxpdHRpbmcgYSAqLworCS8qIHJlbG9jYXRpb24gYWNyb3NzIHBhY2tldHMuICovCisJLyogTGFzdCBwYWNrZXQgb2YgYSBzZWN0aW9uICovCisJLyogd2lsbCBtb3N0IGxpa2VseSBjb250YWluICovCisJLyogPCBJTUFHRV9QQUNLRVRfU0laRSBieXRlcyAqLworCS8qIG9mIHZhbGlkIGRhdGEgKi8KKworCXMzMiBpbWdfY2hrc3VtOwkJLyogQ2hlY2tzdW0gZm9yIGltYWdlIHBhY2tldCAqLworCS8qIGFuZCB0aGUgY29ycmVzcG9uZGluZyAqLworCS8qIHJlbG9jYXRpb24gcmVjb3JkcyAqLworCisJdTggKmltZ19kYXRhOwkJLyogQWN0dWFsIGRhdGEgaW4gc2VjdGlvbiAqLworCit9OworCisvKiBUaGUgcmVsb2NhdGlvbiBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBtYXRjaGVzIHRoZSBDT0ZGIHZlcnNpb24uICBPZmZzZXRzICovCisvKiBob3dldmVyIGFyZSByZWxhdGl2ZSB0byB0aGUgaW1hZ2UgcGFja2V0IGJhc2Ugbm90IHRoZSBzZWN0aW9uIGJhc2UuICovCitzdHJ1Y3QgcmVsb2NfcmVjb3JkX3QgeworCisJczMyIHZhZGRyOworCisJLyogZXhwcmVzc2VkIGluIHRhcmdldCBBVXMgKi8KKworCXVuaW9uIHsKKwkJc3RydWN0IHsKKyNpZm5kZWYgX0JJR19FTkRJQU4KKwkJCXU4IF9vZmZzZXQ7CS8qIGJpdCBvZmZzZXQgb2YgcmVsIGZsZCAqLworCQkJdTggX2ZpZWxkc3o7CS8qIHNpemUgb2YgcmVsIGZsZCAqLworCQkJdTggX3dvcmRzejsJLyogIyBieXRlcyBjb250YWluaW5nIHJlbCBmbGQgKi8KKwkJCXU4IF9kdW0xOworCQkJdTE2IF9kdW0yOworCQkJdTE2IF90eXBlOworI2Vsc2UKKwkJCXVuc2lnbmVkIF9kdW0xOjg7CisJCQl1bnNpZ25lZCBfd29yZHN6Ojg7CS8qICMgYnl0ZXMgY29udGFpbmluZyByZWwgZmxkICovCisJCQl1bnNpZ25lZCBfZmllbGRzejo4OwkvKiBzaXplIG9mIHJlbCBmbGQgKi8KKwkJCXVuc2lnbmVkIF9vZmZzZXQ6ODsJLyogYml0IG9mZnNldCBvZiByZWwgZmxkICovCisJCQl1MTYgX3R5cGU7CisJCQl1MTYgX2R1bTI7CisjZW5kaWYKKwkJfSBfcl9maWVsZDsKKworCQlzdHJ1Y3QgeworCQkJdTMyIF9zcGM7CS8qIGltYWdlIHBhY2tldCByZWxhdGl2ZSBQQyAqLworI2lmbmRlZiBfQklHX0VORElBTgorCQkJdTE2IF9kdW07CisJCQl1MTYgX3R5cGU7CS8qIHJlbG9jYXRpb24gdHlwZSAqLworI2Vsc2UKKwkJCXUxNiBfdHlwZTsJLyogcmVsb2NhdGlvbiB0eXBlICovCisJCQl1MTYgX2R1bTsKKyNlbmRpZgorCQl9IF9yX3NwYzsKKworCQlzdHJ1Y3QgeworCQkJdTMyIF91dmFsOwkvKiBjb25zdGFudCB2YWx1ZSAqLworI2lmbmRlZiBfQklHX0VORElBTgorCQkJdTE2IF9kdW07CisJCQl1MTYgX3R5cGU7CS8qIHJlbG9jYXRpb24gdHlwZSAqLworI2Vsc2UKKwkJCXUxNiBfdHlwZTsJLyogcmVsb2NhdGlvbiB0eXBlICovCisJCQl1MTYgX2R1bTsKKyNlbmRpZgorCQl9IF9yX3V2YWw7CisKKwkJc3RydWN0IHsKKwkJCXMzMiBfc3ltbmR4OwkvKiAzMi1iaXQgc3ltIHRibCBpbmRleCAqLworI2lmbmRlZiBfQklHX0VORElBTgorCQkJdTE2IF9kaXNwOwkvKiBleHRyYSBhZGRyIGVuY29kZSBkYXRhICovCisJCQl1MTYgX3R5cGU7CS8qIHJlbG9jYXRpb24gdHlwZSAqLworI2Vsc2UKKwkJCXUxNiBfdHlwZTsJLyogcmVsb2NhdGlvbiB0eXBlICovCisJCQl1MTYgX2Rpc3A7CS8qIGV4dHJhIGFkZHIgZW5jb2RlIGRhdGEgKi8KKyNlbmRpZgorCQl9IF9yX3N5bTsKKwl9IF91X3JlbG9jOworCit9OworCisvKiBhYmJyZXZpYXRpb25zIGZvciBjb252ZW5pZW5jZSAqLworI2lmbmRlZiBUWVBFCisjZGVmaW5lIFRZUEUgICAgICBfdV9yZWxvYy5fcl9zeW0uX3R5cGUKKyNkZWZpbmUgVVZBTCAgICAgIF91X3JlbG9jLl9yX3V2YWwuX3V2YWwKKyNkZWZpbmUgU1lNTkRYICAgIF91X3JlbG9jLl9yX3N5bS5fc3ltbmR4CisjZGVmaW5lIE9GRlNFVCAgICBfdV9yZWxvYy5fcl9maWVsZC5fb2Zmc2V0CisjZGVmaW5lIEZJRUxEU1ogICBfdV9yZWxvYy5fcl9maWVsZC5fZmllbGRzegorI2RlZmluZSBXT1JEU1ogICAgX3VfcmVsb2MuX3JfZmllbGQuX3dvcmRzegorI2RlZmluZSBSX0RJU1AgICAgICBfdV9yZWxvYy5fcl9zeW0uX2Rpc3AKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogKi8KKy8qIEltcG9ydGFudCBET0ZGIG1hY3JvcyB1c2VkIGZvciBmaWxlIHByb2Nlc3NpbmcgKi8KKy8qICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisvKiBET0ZGIFZlcnNpb25zICovCisjZGVmaW5lICAgICAgICAgRE9GRjAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLyogUmV0dXJuIHRoZSBhZGRyZXNzL3NpemUgPj0gdG8gYWRkciB0aGF0IGlzIGF0IGEgMzItYml0IGJvdW5kYXJ5ICovCisvKiBUaGlzIGFzc3VtZXMgdGhhdCBhIGJ5dGUgaXMgOCBiaXRzICovCisjZGVmaW5lICAgICAgICAgRE9GRl9BTElHTihhZGRyKSAgICAgICAgICAgICgoKGFkZHIpICsgMykgJiB+M1VMKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogKi8KKy8qIFRoZSBET0ZGIHNlY3Rpb24gaGVhZGVyIGZsYWdzIGZpZWxkIGlzIGxhaWQgb3V0IGFzIGZvbGxvd3M6ICovCisvKiAqLworLyogIEJpdHMgMC0zIDogU2VjdGlvbiBUeXBlICovCisvKiAgQml0ICAgIDQgOiBTZXQgd2hlbiBzZWN0aW9uIHJlcXVpcmVzIHRhcmdldCBtZW1vcnkgdG8gYmUgYWxsb2NhdGVkIGJ5IERMICovCisvKiAgQml0ICAgIDUgOiBTZXQgd2hlbiBzZWN0aW9uIHJlcXVpcmVzIGRvd25sb2FkaW5nICovCisvKiAgQml0cyA4LTExOiBBbGlnbm1lbnQsIHNhbWUgYXMgQ09GRiAqLworLyogKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKy8qIEVudW0gZm9yIERPRkYgc2VjdGlvbiB0eXBlcyAoYml0cyAwLTMgb2YgZmxhZyk6IFNlZSBkeW5hbWljX2xvYWRlci5oICovCisjZGVmaW5lIERTX1NFQ1RJT05fVFlQRV9NQVNLCTB4RgorLyogRFNfQUxMT0NBVEUgaW5kaWNhdGVzIHdoZXRoZXIgYSBzZWN0aW9uIG5lZWRzIHNwYWNlIG9uIHRoZSB0YXJnZXQgKi8KKyNkZWZpbmUgRFNfQUxMT0NBVEVfTUFTSyAgICAgICAgICAgIDB4MTAKKy8qIERTX0RPV05MT0FEIGluZGljYXRlcyB0aGF0IHRoZSBsb2FkZXIgbmVlZHMgdG8gY29weSBiaXRzICovCisjZGVmaW5lIERTX0RPV05MT0FEX01BU0sgICAgICAgICAgICAweDIwCisvKiBTZWN0aW9uIGFsaWdubWVudCByZXF1aXJlbWVudCBpbiBBVXMgKi8KKyNkZWZpbmUgRFNfQUxJR05NRU5UX1NISUZUCTgKKworc3RhdGljIGlubGluZSBib29sIGRsb2FkX2NoZWNrX3R5cGUoc3RydWN0IGRvZmZfc2NuaGRyX3QgKnNwdHIsIHUzMiBmbGFnKQoreworCXJldHVybiAoc3B0ci0+ZHNfZmxhZ3MgJiBEU19TRUNUSU9OX1RZUEVfTUFTSykgPT0gZmxhZzsKK30KK3N0YXRpYyBpbmxpbmUgYm9vbCBkc19uZWVkc19hbGxvY2F0aW9uKHN0cnVjdCBkb2ZmX3Njbmhkcl90ICpzcHRyKQoreworCXJldHVybiBzcHRyLT5kc19mbGFncyAmIERTX0FMTE9DQVRFX01BU0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBkc19uZWVkc19kb3dubG9hZChzdHJ1Y3QgZG9mZl9zY25oZHJfdCAqc3B0cikKK3sKKwlyZXR1cm4gc3B0ci0+ZHNfZmxhZ3MgJiBEU19ET1dOTE9BRF9NQVNLOworfQorCitzdGF0aWMgaW5saW5lIGludCBkc19hbGlnbm1lbnQodTE2IGRzX2ZsYWdzKQoreworCXJldHVybiAxIDw8ICgoZHNfZmxhZ3MgPj4gRFNfQUxJR05NRU5UX1NISUZUKSAmIERTX1NFQ1RJT05fVFlQRV9NQVNLKTsKK30KKworCisjZW5kaWYgLyogX0RPRkZfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvZ2V0c2VjdGlvbi5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvZ2V0c2VjdGlvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYjM3NzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9nZXRzZWN0aW9uLmMKQEAgLTAsMCArMSw0MDcgQEAKKy8qCisgKiBnZXRzZWN0aW9uLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9nZXRzZWN0aW9uLmg+CisjaW5jbHVkZSAiaGVhZGVyLmgiCisKKy8qCisgKiBFcnJvciBzdHJpbmdzCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyIHJlYWRzdHJtW10gPSB7ICJFcnJvciByZWFkaW5nICVzIGZyb20gaW5wdXQgc3RyZWFtIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgc2Vla1tdID0geyAiU2V0IGZpbGUgcG9zaXRpb24gdG8gJWQgZmFpbGVkIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgaXNpeltdID0geyAiQmFkIGltYWdlIHBhY2tldCBzaXplICVkIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgZXJyX2NoZWNrc3VtW10gPSB7ICJDaGVja3N1bSBmYWlsZWQgb24gJXMiIH07CisKK3N0YXRpYyBjb25zdCBjaGFyIGVycl9yZWxvY1tdID0geyAiZGxvYWRfZ2V0X3NlY3Rpb24gdW5hYmxlIHRvIHJlYWQiCisJICAgICJzZWN0aW9ucyBjb250YWluaW5nIHJlbG9jYXRpb24gZW50cmllcyIKK307CisKKyNpZiBCSVRTX1BFUl9BVSA+IEJJVFNfUEVSX0JZVEUKK3N0YXRpYyBjb25zdCBjaGFyIGVycl9hbGxvY1tdID0geyAiU3ltcy0+ZGxvYWRfYWxsb2NhdGUoICVkICkgZmFpbGVkIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgc3RibFtdID0geyAiQmFkIHN0cmluZyB0YWJsZSBvZmZzZXQgIiBGTVRfVUkzMiB9OworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyoqKioqKioqKioqKioqKioqKioqKiBTVVBQT1JUIEZVTkNUSU9OUyAqKioqKioqKioqKioqKioqKioqKioqICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworI2lmIEJJVFNfUEVSX0FVID4gQklUU19QRVJfQllURQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm9jZWR1cmUgdW5wYWNrX3NlY19uYW1lCisgKgorICogUGFyYW1ldGVyczoKKyAqICBkbHRoaXMJCUhhbmRsZSBmcm9tIGRsb2FkX21vZHVsZV9vcGVuIGZvciB0aGlzIG1vZHVsZQorICoJc29mZnNldAkgICAgQnl0ZSBvZmZzZXQgaW50byB0aGUgc3RyaW5nIHRhYmxlCisgKiAgZHN0ICAgICAgICAgUGxhY2UgdG8gc3RvcmUgdGhlIGV4cGFuZGVkIHN0cmluZworICoKKyAqIEVmZmVjdDoKKyAqCVN0b3JlcyBhIHN0cmluZyBmcm9tIHRoZSBzdHJpbmcgdGFibGUgaW50byB0aGUgZGVzdGluYXRpb24sIGV4cGFuZGluZworICogaXQgaW4gdGhlIHByb2Nlc3MuICBSZXR1cm5zIGEgcG9pbnRlciBqdXN0IHBhc3QgdGhlIGVuZCBvZiB0aGUgc3RvcmVkCisgKiBzdHJpbmcgb24gc3VjY2Vzcywgb3IgTlVMTCBvbiBmYWlsdXJlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KK3N0YXRpYyBjaGFyICp1bnBhY2tfc2VjX25hbWUoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsIHUzMiBzb2Zmc2V0LCBjaGFyICpkc3QpCit7CisJdTggdG1wLCAqc3JjOworCisJaWYgKHNvZmZzZXQgPj0gZGx0aGlzLT5kZmlsZV9oZHIuZGZfc2NuX25hbWVfc2l6ZSkgeworCQlkbG9hZF9lcnJvcihkbHRoaXMsIHN0YmwsIHNvZmZzZXQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJc3JjID0gKHU4ICopIGRsdGhpcy0+c3RyX2hlYWQgKworCSAgICAoc29mZnNldCA+PiAoTE9HX0JJVFNfUEVSX0FVIC0gTE9HX0JJVFNfUEVSX0JZVEUpKTsKKwlpZiAoc29mZnNldCAmIDEpCisJCSpkc3QrKyA9ICpzcmMrKzsJLyogb25seSAxIGNoYXJhY3RlciBpbiBmaXJzdCB3b3JkICovCisJZG8geworCQl0bXAgPSAqc3JjKys7CisJCSpkc3QgPSAodG1wID4+IEJJVFNfUEVSX0JZVEUpCisJCSAgICBpZiAoISgqZHN0KyspKQorCQkJYnJlYWs7CisJfSB3aGlsZSAoKCpkc3QrKyA9IHRtcCAmIEJZVEVfTUFTSykpOworCisJcmV0dXJuIGRzdDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm9jZWR1cmUgZXhwYW5kX3NlY19uYW1lcworICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgZGx0aGlzCQlIYW5kbGUgZnJvbSBkbG9hZF9tb2R1bGVfb3BlbiBmb3IgdGhpcyBtb2R1bGUKKyAqCisgKiBFZmZlY3Q6CisgKiAgICBBbGxvY2F0ZXMgYSBidWZmZXIsIHVucGFja3MgYW5kIGNvcGllcyBzdHJpbmdzIGZyb20gc3RyaW5nIHRhYmxlIGludG8gaXQuCisgKiBTdG9yZXMgYSBwb2ludGVyIHRvIHRoZSBidWZmZXIgaW50byBhIHN0YXRlIHZhcmlhYmxlLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KK3N0YXRpYyB2b2lkIGV4cGFuZF9zZWNfbmFtZXMoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMpCit7CisJY2hhciAqeHN0cmluZ3MsICpjdXJyLCAqbmV4dDsKKwl1MzIgeHNpemU7CisJdTE2IHNlYzsKKwlzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqc2hwOworCS8qIGFzc3VtZSB3b3JzdC1jYXNlIHNpemUgcmVxdWlyZW1lbnQgKi8KKwl4c2l6ZSA9IGRsdGhpcy0+ZGZpbGVfaGRyLmRmX21heF9zdHJfbGVuICogZGx0aGlzLT5kZmlsZV9oZHIuZGZfbm9fc2NuczsKKwl4c3RyaW5ncyA9IChjaGFyICopZGx0aGlzLT5teXN5bS0+ZGxvYWRfYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwgeHNpemUpOworCWlmICh4c3RyaW5ncyA9PSBOVUxMKSB7CisJCWRsb2FkX2Vycm9yKGRsdGhpcywgZXJyX2FsbG9jLCB4c2l6ZSk7CisJCXJldHVybjsKKwl9CisJZGx0aGlzLT54c3RyaW5ncyA9IHhzdHJpbmdzOworCS8qIEZvciBlYWNoIHNlYywgY29weSBhbmQgZXhwYW5kIGl0cyBuYW1lICovCisJY3VyciA9IHhzdHJpbmdzOworCWZvciAoc2VjID0gMDsgc2VjIDwgZGx0aGlzLT5kZmlsZV9oZHIuZGZfbm9fc2Nuczsgc2VjKyspIHsKKwkJc2hwID0gKHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICopJmRsdGhpcy0+c2VjdF9oZHJzW3NlY107CisJCW5leHQgPSB1bnBhY2tfc2VjX25hbWUoZGx0aGlzLCAqKHUzMiAqKSAmc2hwLT5uYW1lLCBjdXJyKTsKKwkJaWYgKG5leHQgPT0gTlVMTCkKKwkJCWJyZWFrOwkvKiBlcnJvciAqLworCQlzaHAtPm5hbWUgPSBjdXJyOworCQljdXJyID0gbmV4dDsKKwl9Cit9CisKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qKioqKioqKioqKioqKioqKioqKiogRVhQT1JURUQgRlVOQ1RJT05TICoqKioqKioqKioqKioqKioqKioqKiAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIGRsb2FkX21vZHVsZV9vcGVuCisgKgorICogUGFyYW1ldGVyczoKKyAqCW1vZHVsZQlUaGUgaW5wdXQgc3RyZWFtIHRoYXQgc3VwcGxpZXMgdGhlIG1vZHVsZSBpbWFnZQorICoJc3ltcwlIb3N0LXNpZGUgbWFsbG9jL2ZyZWUgYW5kIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbnMuCisgKgkJCU90aGVyIG1ldGhvZHMgYXJlIHVudXNlZC4KKyAqCisgKiBFZmZlY3Q6CisgKglSZWFkcyBoZWFkZXIgaW5mb3JtYXRpb24gZnJvbSBhIGR5bmFtaWMgbG9hZGVyIG1vZHVsZSB1c2luZyB0aGUKKyAgICBzcGVjaWZpZWQKKyAqIHN0cmVhbSBvYmplY3QsIGFuZCByZXR1cm5zIGEgaGFuZGxlIGZvciB0aGUgbW9kdWxlIGluZm9ybWF0aW9uLiAgVGhpcworICogaGFuZGxlIG1heSBiZSB1c2VkIGluIHN1YnNlcXVlbnQgcXVlcnkgY2FsbHMgdG8gb2J0YWluIGluZm9ybWF0aW9uCisgKiBjb250YWluZWQgaW4gdGhlIG1vZHVsZS4KKyAqCisgKiBSZXR1cm5zOgorICoJTlVMTCBpZiBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZCwgb3RoZXJ3aXNlIGEgbW9kdWxlIGhhbmRsZSBmb3IgdXNlCisgKiBpbiBzdWJzZXF1ZW50IG9wZXJhdGlvbnMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwordm9pZCAqZGxvYWRfbW9kdWxlX29wZW4oc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N0cmVhbSAqbW9kdWxlLAorCQkJCSAgICBzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3ltICpzeW1zKQoreworCXN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzOwkvKiBpbnRlcm5hbCBzdGF0ZSBmb3IgdGhpcyBjYWxsICovCisJdW5zaWduZWQgKmRwLCBzejsKKwl1MzIgc2VjX3N0YXJ0OworI2lmIEJJVFNfUEVSX0FVIDw9IEJJVFNfUEVSX0JZVEUKKwl1MTYgc2VjOworI2VuZGlmCisKKwkvKiBDaGVjayB0aGF0IG1hbmRhdG9yeSBhcmd1bWVudHMgYXJlIHByZXNlbnQgKi8KKwlpZiAoIW1vZHVsZSB8fCAhc3ltcykgeworCQlpZiAoc3ltcyAhPSBOVUxMKQorCQkJZGxvYWRfc3ltc19lcnJvcihzeW1zLCAiUmVxdWlyZWQgcGFyYW1ldGVyIGlzIE5VTEwiKTsKKworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlkbHRoaXMgPSAoc3RydWN0IGRsb2FkX3N0YXRlICopCisJICAgIHN5bXMtPmRsb2FkX2FsbG9jYXRlKHN5bXMsIHNpemVvZihzdHJ1Y3QgZGxvYWRfc3RhdGUpKTsKKwlpZiAoIWRsdGhpcykgeworCQkvKiBub3QgZW5vdWdoIHN0b3JhZ2UgKi8KKwkJZGxvYWRfc3ltc19lcnJvcihzeW1zLCAiQ2FuJ3QgYWxsb2NhdGUgbW9kdWxlIGluZm8iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogY2xlYXIgb3VyIGludGVybmFsIHN0YXRlICovCisJZHAgPSAodW5zaWduZWQgKilkbHRoaXM7CisJZm9yIChzeiA9IHNpemVvZihzdHJ1Y3QgZGxvYWRfc3RhdGUpIC8gc2l6ZW9mKHVuc2lnbmVkKTsKKwkgICAgIHN6ID4gMDsgc3ogLT0gMSkKKwkJKmRwKysgPSAwOworCisJZGx0aGlzLT5zdHJtID0gbW9kdWxlOworCWRsdGhpcy0+bXlzeW0gPSBzeW1zOworCisJLyogcmVhZCBpbiB0aGUgZG9mZiBpbWFnZSBhbmQgc3RvcmUgaW4gb3VyIHN0YXRlIHZhcmlhYmxlICovCisJZGxvYWRfaGVhZGVycyhkbHRoaXMpOworCisJaWYgKCFkbHRoaXMtPmRsb2FkX2VycmNvdW50KQorCQlkbG9hZF9zdHJpbmdzKGRsdGhpcywgdHJ1ZSk7CisKKwkvKiBza2lwIGFoZWFkIHBhc3QgdGhlIHVucmVhZCBwb3J0aW9uIG9mIHRoZSBzdHJpbmcgdGFibGUgKi8KKwlzZWNfc3RhcnQgPSBzaXplb2Yoc3RydWN0IGRvZmZfZmlsZWhkcl90KSArCisJICAgIHNpemVvZihzdHJ1Y3QgZG9mZl92ZXJpZnlfcmVjX3QpICsKKwkgICAgQllURV9UT19IT1NUKERPRkZfQUxJR04oZGx0aGlzLT5kZmlsZV9oZHIuZGZfc3RydGFiX3NpemUpKTsKKworCWlmIChkbHRoaXMtPnN0cm0tPnNldF9maWxlX3Bvc24oZGx0aGlzLT5zdHJtLCBzZWNfc3RhcnQpICE9IDApIHsKKwkJZGxvYWRfZXJyb3IoZGx0aGlzLCBzZWVrLCBzZWNfc3RhcnQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoIWRsdGhpcy0+ZGxvYWRfZXJyY291bnQpCisJCWRsb2FkX3NlY3Rpb25zKGRsdGhpcyk7CisKKwlpZiAoZGx0aGlzLT5kbG9hZF9lcnJjb3VudCkgeworCQlkbG9hZF9tb2R1bGVfY2xvc2UoZGx0aGlzKTsJLyogZXJyb3JzLCBibG93IG9mZiBvdXIgc3RhdGUgKi8KKwkJZGx0aGlzID0gTlVMTDsKKwkJcmV0dXJuIE5VTEw7CisJfQorI2lmIEJJVFNfUEVSX0FVID4gQklUU19QRVJfQllURQorCS8qIEV4cGFuZCBhbGwgc2VjdGlvbiBuYW1lcyBmcm9tIHRoZSBzdHJpbmcgdGFibGUgaW50byB0aGUgKi8KKwkvKiBzdGF0ZSB2YXJpYWJsZSwgYW5kIGNvbnZlcnQgc2VjdGlvbiBuYW1lcyBmcm9tIGEgcmVsYXRpdmUgKi8KKwkvKiBzdHJpbmcgdGFibGUgb2Zmc2V0IHRvIGEgcG9pbnRlcnMgdG8gdGhlIGV4cGFuZGVkIHN0cmluZy4gKi8KKwlleHBhbmRfc2VjX25hbWVzKGRsdGhpcyk7CisjZWxzZQorCS8qIENvbnZlcnQgc2VjdGlvbiBuYW1lcyBmcm9tIGEgcmVsYXRpdmUgc3RyaW5nIHRhYmxlIG9mZnNldCAqLworCS8qIHRvIGEgcG9pbnRlciBpbnRvIHRoZSBzdHJpbmcgdGFibGUuICovCisJZm9yIChzZWMgPSAwOyBzZWMgPCBkbHRoaXMtPmRmaWxlX2hkci5kZl9ub19zY25zOyBzZWMrKykgeworCQlzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqc2hwID0KKwkJICAgIChzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqKSZkbHRoaXMtPnNlY3RfaGRyc1tzZWNdOworCQlzaHAtPm5hbWUgPSBkbHRoaXMtPnN0cl9oZWFkICsgKih1MzIgKikgJnNocC0+bmFtZTsKKwl9CisjZW5kaWYKKworCXJldHVybiBkbHRoaXM7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb2NlZHVyZSBkbG9hZF9nZXRfc2VjdGlvbl9pbmZvCisgKgorICogUGFyYW1ldGVyczoKKyAqICBtaW5mbwkJSGFuZGxlIGZyb20gZGxvYWRfbW9kdWxlX29wZW4gZm9yIHRoaXMgbW9kdWxlCisgKglzZWN0aW9uX25hbWUJUG9pbnRlciB0byB0aGUgc3RyaW5nIG5hbWUgb2YgdGhlIHNlY3Rpb24gZGVzaXJlZAorICoJc2VjdGlvbl9pbmZvCUFkZHJlc3Mgb2YgYSBzZWN0aW9uIGluZm8gc3RydWN0dXJlIHBvaW50ZXIgdG8gYmUKKyAqCQkJaW5pdGlhbGl6ZWQKKyAqCisgKiBFZmZlY3Q6CisgKglGaW5kcyB0aGUgc3BlY2lmaWVkIHNlY3Rpb24gaW4gdGhlIG1vZHVsZSBpbmZvcm1hdGlvbiwgYW5kIGluaXRpYWxpemVzCisgKiB0aGUgcHJvdmlkZWQgc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gcG9pbnRlci4KKyAqCisgKiBSZXR1cm5zOgorICoJdHJ1ZSBmb3Igc3VjY2VzcywgZmFsc2UgZm9yIHNlY3Rpb24gbm90IGZvdW5kCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworaW50IGRsb2FkX2dldF9zZWN0aW9uX2luZm8odm9pZCAqbWluZm8sIGNvbnN0IGNoYXIgKnNlY3Rpb25fbmFtZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICoqY29uc3Qgc2VjdGlvbl9pbmZvKQoreworCXN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzOworCXN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICpzaHA7CisJdTE2IHNlYzsKKworCWRsdGhpcyA9IChzdHJ1Y3QgZGxvYWRfc3RhdGUgKiltaW5mbzsKKwlpZiAoIWRsdGhpcykKKwkJcmV0dXJuIGZhbHNlOworCisJZm9yIChzZWMgPSAwOyBzZWMgPCBkbHRoaXMtPmRmaWxlX2hkci5kZl9ub19zY25zOyBzZWMrKykgeworCQlzaHAgPSAoc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKikmZGx0aGlzLT5zZWN0X2hkcnNbc2VjXTsKKwkJaWYgKHN0cmNtcChzZWN0aW9uX25hbWUsIHNocC0+bmFtZSkgPT0gMCkgeworCQkJKnNlY3Rpb25faW5mbyA9IHNocDsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisjZGVmaW5lIElQSF9TSVpFIChzaXplb2Yoc3RydWN0IGltYWdlX3BhY2tldF90KSAtIHNpemVvZih1MzIpKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb2NlZHVyZSBkbG9hZF9nZXRfc2VjdGlvbgorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgbWluZm8JCUhhbmRsZSBmcm9tIGRsb2FkX21vZHVsZV9vcGVuIGZvciB0aGlzIG1vZHVsZQorICoJc2VjdGlvbl9pbmZvCVBvaW50ZXIgdG8gYSBzZWN0aW9uIGluZm8gc3RydWN0dXJlIGZvciB0aGUgZGVzaXJlZAorICoJCQlzZWN0aW9uCisgKglzZWN0aW9uX2RhdGEJQnVmZmVyIHRvIGNvbnRhaW4gdGhlIHNlY3Rpb24gaW5pdGlhbGl6ZWQgZGF0YQorICoKKyAqIEVmZmVjdDoKKyAqCUNvcGllcyB0aGUgaW5pdGlhbGl6ZWQgZGF0YSBmb3IgdGhlIHNwZWNpZmllZCBzZWN0aW9uIGludG8gdGhlCisgKiBzdXBwbGllZCBidWZmZXIuCisgKgorICogUmV0dXJuczoKKyAqCXRydWUgZm9yIHN1Y2Nlc3MsIGZhbHNlIGZvciBzZWN0aW9uIG5vdCBmb3VuZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KK2ludCBkbG9hZF9nZXRfc2VjdGlvbih2b2lkICptaW5mbywKKwkJICAgICAgY29uc3Qgc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKnNlY3Rpb25faW5mbywKKwkJICAgICAgdm9pZCAqc2VjdGlvbl9kYXRhKQoreworCXN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzOworCXUzMiBwb3M7CisJc3RydWN0IGRvZmZfc2NuaGRyX3QgKnNwdHIgPSBOVUxMOworCXMzMiBuaXA7CisJc3RydWN0IGltYWdlX3BhY2tldF90IGlwYWNrZXQ7CisJczMyIGlwc2l6ZTsKKwl1MzIgY2hlY2tzOworCXM4ICpkZXN0ID0gKHM4ICopIHNlY3Rpb25fZGF0YTsKKworCWRsdGhpcyA9IChzdHJ1Y3QgZGxvYWRfc3RhdGUgKiltaW5mbzsKKwlpZiAoIWRsdGhpcykKKwkJcmV0dXJuIGZhbHNlOworCXNwdHIgPSAoc3RydWN0IGRvZmZfc2NuaGRyX3QgKilzZWN0aW9uX2luZm87CisJaWYgKHNwdHIgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogc2tpcCBhaGVhZCB0byB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IHBhY2tldCAqLworCXBvcyA9IEJZVEVfVE9fSE9TVChET0ZGX0FMSUdOKCh1MzIpIHNwdHItPmRzX2ZpcnN0X3BrdF9vZmZzZXQpKTsKKwlpZiAoZGx0aGlzLT5zdHJtLT5zZXRfZmlsZV9wb3NuKGRsdGhpcy0+c3RybSwgcG9zKSAhPSAwKSB7CisJCWRsb2FkX2Vycm9yKGRsdGhpcywgc2VlaywgcG9zKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCW5pcCA9IHNwdHItPmRzX25pcGFja3M7CisJd2hpbGUgKChuaXAgLT0gMSkgPj0gMCkgewkvKiBmb3IgZWFjaCBwYWNrZXQgKi8KKwkJLyogZ2V0IHRoZSBmaXhlZCBoZWFkZXIgYml0cyAqLworCQlpZiAoZGx0aGlzLT5zdHJtLT5yZWFkX2J1ZmZlcihkbHRoaXMtPnN0cm0sICZpcGFja2V0LAorCQkJCQkgICAgICBJUEhfU0laRSkgIT0gSVBIX1NJWkUpIHsKKwkJCWRsb2FkX2Vycm9yKGRsdGhpcywgcmVhZHN0cm0sICJpbWFnZSBwYWNrZXQiKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQkvKiByZW9yZGVyIHRoZSBoZWFkZXIgaWYgbmVlZCBiZSAqLworCQlpZiAoZGx0aGlzLT5yZW9yZGVyX21hcCkKKwkJCWRsb2FkX3Jlb3JkZXIoJmlwYWNrZXQsIElQSF9TSVpFLCBkbHRoaXMtPnJlb3JkZXJfbWFwKTsKKworCQkvKiBOb3cgcmVhZCB0aGUgcGFja2V0IGltYWdlIGJpdHMuIE5vdGU6IHJvdW5kIHRoZSBzaXplIHVwIHRvCisJCSAqIHRoZSBuZXh0IG11bHRpcGxlIG9mIDQgYnl0ZXM7IHRoaXMgaXMgd2hhdCBjaGVja3N1bQorCQkgKiByb3V0aW5lcyB3YW50LiAqLworCQlpcHNpemUgPSBCWVRFX1RPX0hPU1QoRE9GRl9BTElHTihpcGFja2V0LnBhY2tldF9zaXplKSk7CisJCWlmIChpcHNpemUgPiBCWVRFX1RPX0hPU1QoSU1BR0VfUEFDS0VUX1NJWkUpKSB7CisJCQlkbG9hZF9lcnJvcihkbHRoaXMsIGlzaXosIGlwc2l6ZSk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJaWYgKGRsdGhpcy0+c3RybS0+cmVhZF9idWZmZXIKKwkJICAgIChkbHRoaXMtPnN0cm0sIGRlc3QsIGlwc2l6ZSkgIT0gaXBzaXplKSB7CisJCQlkbG9hZF9lcnJvcihkbHRoaXMsIHJlYWRzdHJtLCAiaW1hZ2UgcGFja2V0Iik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJLyogcmVvcmRlciB0aGUgYnl0ZXMgaWYgbmVlZCBiZSAqLworI2lmICFkZWZpbmVkKF9CSUdfRU5ESUFOKSB8fCAoVEFSR0VUX0FVX0JJVFMgPiAxNikKKwkJaWYgKGRsdGhpcy0+cmVvcmRlcl9tYXApCisJCQlkbG9hZF9yZW9yZGVyKGRlc3QsIGlwc2l6ZSwgZGx0aGlzLT5yZW9yZGVyX21hcCk7CisKKwkJY2hlY2tzID0gZGxvYWRfY2hlY2tzdW0oZGVzdCwgaXBzaXplKTsKKyNlbHNlCisJCWlmIChkbHRoaXMtPmRmaWxlX2hkci5kZl9ieXRlX3Jlc2h1ZmZsZSAhPQorCQkgICAgVEFSR0VUX09SREVSKFJFT1JERVJfTUFQKEJZVEVfUkVTSFVGRkxFX1ZBTFVFKSkpIHsKKwkJCS8qIHB1dCBpbWFnZSBieXRlcyBpbiBiaWctZW5kaWFuIG9yZGVyLCBub3QgUEMgb3JkZXIgKi8KKwkJCWRsb2FkX3Jlb3JkZXIoZGVzdCwgaXBzaXplLAorCQkJCSAgICAgIFRBUkdFVF9PUkRFUihkbHRoaXMtPgorCQkJCQkJZGZpbGVfaGRyLmRmX2J5dGVfcmVzaHVmZmxlKSk7CisJCX0KKyNpZiBUQVJHRVRfQVVfQklUUyA+IDgKKwkJY2hlY2tzID0gZGxvYWRfcmV2ZXJzZV9jaGVja3N1bTE2KGRlc3QsIGlwc2l6ZSk7CisjZWxzZQorCQljaGVja3MgPSBkbG9hZF9yZXZlcnNlX2NoZWNrc3VtKGRlc3QsIGlwc2l6ZSk7CisjZW5kaWYKKyNlbmRpZgorCQljaGVja3MgKz0gZGxvYWRfY2hlY2tzdW0oJmlwYWNrZXQsIElQSF9TSVpFKTsKKworCQkvKiBOWUk6IHVuYWJsZSB0byBoYW5kbGUgcmVsb2NhdGlvbiBlbnRyaWVzIGhlcmUuICBSZWxvYworCQkgKiBlbnRyaWVzIHJlZmVycmluZyB0byBmaWVsZHMgdGhhdCBzcGFuIHRoZSBwYWNrZXQgYm91bmRhcmllcworCQkgKiBtYXkgcmVzdWx0IGluIHBhY2tldHMgb2Ygc2l6ZXMgdGhhdCBhcmUgbm90IG11bHRpcGxlIG9mCisJCSAqIDQgYnl0ZXMuIE91ciBjaGVja3N1bSBpbXBsZW1lbnRhdGlvbiB3b3JrcyBvbiAzMi1iaXQgd29yZHMKKwkJICogb25seS4gKi8KKwkJaWYgKGlwYWNrZXQubnVtX3JlbG9jcyAhPSAwKSB7CisJCQlkbG9hZF9lcnJvcihkbHRoaXMsIGVycl9yZWxvYywgaXBzaXplKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCWlmICh+Y2hlY2tzKSB7CisJCQlkbG9hZF9lcnJvcihkbHRoaXMsIGVycl9jaGVja3N1bSwgImltYWdlIHBhY2tldCIpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLypBZHZhbmNlIGRlc3RpbmF0aW9uIHB0ciBieSB0aGUgc2l6ZSBvZiB0aGUganVzdC1yZWFkIHBhY2tldCAqLworCQlkZXN0ICs9IGlwc2l6ZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIGRsb2FkX21vZHVsZV9jbG9zZQorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgbWluZm8JCUhhbmRsZSBmcm9tIGRsb2FkX21vZHVsZV9vcGVuIGZvciB0aGlzIG1vZHVsZQorICoKKyAqIEVmZmVjdDoKKyAqCVJlbGVhc2VzIGFueSBzdG9yYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbW9kdWxlIGhhbmRsZS4gIE9uIHJldHVybiwKKyAqIHRoZSBtb2R1bGUgaGFuZGxlIGlzIGludmFsaWQuCisgKgorICogUmV0dXJuczoKKyAqCVplcm8gZm9yIHN1Y2Nlc3MuIE9uIGVycm9yLCB0aGUgbnVtYmVyIG9mIGVycm9ycyBkZXRlY3RlZCBpcyByZXR1cm5lZC4KKyAqIEluZGl2aWR1YWwgZXJyb3JzIGFyZSByZXBvcnRlZCB1c2luZyBzeW1zLT5lcnJvcl9yZXBvcnQoKSwgd2hlcmUgc3ltcyB3YXMKKyAqIGFuIGFyZ3VtZW50IHRvIGRsb2FkX21vZHVsZV9vcGVuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwordm9pZCBkbG9hZF9tb2R1bGVfY2xvc2Uodm9pZCAqbWluZm8pCit7CisJc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXM7CisKKwlkbHRoaXMgPSAoc3RydWN0IGRsb2FkX3N0YXRlICopbWluZm87CisJaWYgKCFkbHRoaXMpCisJCXJldHVybjsKKworCWlmIChkbHRoaXMtPnN0cl9oZWFkKQorCQlkbHRoaXMtPm15c3ltLT5kbG9hZF9kZWFsbG9jYXRlKGRsdGhpcy0+bXlzeW0sCisJCQkJCQlkbHRoaXMtPnN0cl9oZWFkKTsKKworCWlmIChkbHRoaXMtPnNlY3RfaGRycykKKwkJZGx0aGlzLT5teXN5bS0+ZGxvYWRfZGVhbGxvY2F0ZShkbHRoaXMtPm15c3ltLAorCQkJCQkJZGx0aGlzLT5zZWN0X2hkcnMpOworCisjaWYgQklUU19QRVJfQVUgPiBCSVRTX1BFUl9CWVRFCisJaWYgKGRsdGhpcy0+eHN0cmluZ3MpCisJCWRsdGhpcy0+bXlzeW0tPmRsb2FkX2RlYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwKKwkJCQkJCWRsdGhpcy0+eHN0cmluZ3MpOworCisjZW5kaWYKKworCWRsdGhpcy0+bXlzeW0tPmRsb2FkX2RlYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwgZGx0aGlzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL2hlYWRlci5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvaGVhZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI1MGExNWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9oZWFkZXIuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogaGVhZGVyLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2RlZmluZSBETF9TVFJDTVAgIHN0cmNtcAorCisvKiBtYXhpbXVtIHBhcmVudGhlc2lzIG5lc3RpbmcgaW4gcmVsb2NhdGlvbiBzdGFjayBleHByZXNzaW9ucyAqLworI2RlZmluZSBTVEFUSUNfRVhQUl9TVEtfU0laRSAxMAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgImRvZmYuaCIKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHluYW1pY19sb2FkZXIuaD4KKyNpbmNsdWRlICJwYXJhbXMuaCIKKyNpbmNsdWRlICJkbG9hZF9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInJlbG9jX3RhYmxlLmgiCisKKy8qCisgKiBQbGF1c2liaWxpdHkgbGltaXRzCisgKgorICogVGhlc2UgbGltaXRzIGFyZSBpbXBvc2VkIHVwb24gdGhlIGlucHV0IERPRkYgZmlsZSBhcyBhIGNoZWNrIGZvciB2YWxpZGl0eS4KKyAqIFRoZXkgYXJlIGhhcmQgbGltaXRzLCBpbiB0aGF0IHRoZSBsb2FkIHdpbGwgZmFpbCBpZiB0aGV5IGFyZSBleGNlZWRlZC4KKyAqIFRoZSBudW1iZXJzIHNlbGVjdGVkIGFyZSBhcmJpdHJhcnksIGluIHRoYXQgdGhlIGxvYWRlciBpbXBsZW1lbnRhdGlvbiBkb2VzCisgKiBub3QgcmVxdWlyZSB0aGVzZSBsaW1pdHMuCisgKi8KKworLyogbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gc3RyaW5nIHRhYmxlICovCisjZGVmaW5lIE1BWF9SRUFTT05BQkxFX1NUUklOR1RBQiAoMHgxMDAwMDApCisvKiBtYXhpbXVtIG51bWJlciBvZiBjb2RlLGRhdGEsZXRjLiBzZWN0aW9ucyAqLworI2RlZmluZSBNQVhfUkVBU09OQUJMRV9TRUNUSU9OUyAoMjAwKQorLyogbWF4aW11bSBudW1iZXIgb2YgbGlua2VyIHN5bWJvbHMgKi8KKyNkZWZpbmUgTUFYX1JFQVNPTkFCTEVfU1lNQk9MUyAoMTAwMDAwKQorCisvKiBzaGlmdCBjb3VudCB0byBhbGlnbiBGX0JJRyB3aXRoIERMT0FEX0xJVFRMRSAqLworI2RlZmluZSBBTElHTl9DT0ZGX0VORElBTk5FU1MgNworI2RlZmluZSBFTkRJQU5ORVNTX01BU0sgKERGX0JZVEVfT1JERVIgPj4gQUxJR05fQ09GRl9FTkRJQU5ORVNTKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvbW9kdWxlX2xpc3QuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL21vZHVsZV9saXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIxNmJiMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL21vZHVsZV9saXN0LmgKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBkc3BicmlkZ2UvbXB1X2RyaXZlci9zcmMvZHlubG9hZC9tb2R1bGVfbGlzdC5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisvKgorICogVGhpcyBDIGhlYWRlciBmaWxlIGdpdmVzIHRoZSBsYXlvdXQgb2YgdGhlIGRhdGEgc3RydWN0dXJlIGNyZWF0ZWQgYnkgdGhlCisgKiBkeW5hbWljIGxvYWRlciB0byBkZXNjcmliZSB0aGUgc2V0IG9mIG1vZHVsZXMgbG9hZGVkIGludG8gdGhlIERTUC4KKyAqCisgKiBMaW5rZWQgTGlzdCBTdHJ1Y3R1cmU6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgZGVmaW5lZCBoZXJlIGlzIGEgc2luZ2x5LWxpbmtlZCBsaXN0LiAgVGhlIGxpc3QKKyAqIHJlcHJlc2VudHMgdGhlIHNldCBvZiBtb2R1bGVzIHdoaWNoIGFyZSBjdXJyZW50bHkgbG9hZGVkIGluIHRoZSBEU1AgbWVtb3J5LgorICogVGhlIGZpcnN0IGVudHJ5IGluIHRoZSBsaXN0IGlzIGEgaGVhZGVyIHJlY29yZCB3aGljaCBjb250YWlucyBhIGZsYWcKKyAqIHJlcHJlc2VudGluZyB0aGUgc3RhdGUgb2YgdGhlIGxpc3QuICBUaGUgcmVzdCBvZiB0aGUgZW50cmllcyBpbiB0aGUgbGlzdAorICogYXJlIG1vZHVsZSByZWNvcmRzLgorICoKKyAqIEdsb2JhbCBzeW1ib2wgIF9ETE1vZHVsZXMgZGVzaWduYXRlcyB0aGUgZmlyc3QgcmVjb3JkIGluIHRoZSBsaXN0IChpLmUuIHRoZQorICogaGVhZGVyIHJlY29yZCkuICBUaGlzIHN5bWJvbCBtdXN0IGJlIGRlZmluZWQgaW4gYW55IHByb2dyYW0gdGhhdCB3aXNoZXMgdG8KKyAqIHVzZSBETEx2aWV3IHBsdWctaW4uCisgKgorICogU3RyaW5nIFJlcHJlc2VudGF0aW9uOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVGhlIHN0cmluZyBuYW1lcyBvZiB0aGUgbW9kdWxlIGFuZCBpdHMgc2VjdGlvbnMgYXJlIHN0b3JlZCBpbiBhIGJsb2NrIG9mCisgKiBtZW1vcnkgd2hpY2ggZm9sbG93cyB0aGUgbW9kdWxlIHJlY29yZCBpdHNlbGYuICBUaGUgc3RyaW5ncyBhcmUgb3JkZXJlZDoKKyAqIG1vZHVsZSBuYW1lIGZpcnN0LCBmb2xsb3dlZCBieSBzZWN0aW9uIG5hbWVzIGluIG9yZGVyIGZyb20gdGhlIGZpcnN0CisgKiBzZWN0aW9uIHRvIHRoZSBsYXN0LiAgU3RyaW5nIG5hbWVzIGFyZSB0aWdodGx5IHBhY2tlZCBhcnJheXMgb2YgOC1iaXQKKyAqIGNoYXJhY3RlcnMgKHR3byBjaGFyYWN0ZXJzIHBlciAxNi1iaXQgd29yZCBvbiB0aGUgQzU1eCkuICBTdHJpbmdzIGFyZQorICogemVyby1ieXRlLXRlcm1pbmF0ZWQuCisgKgorICogQ3JlYXRpbmcgYW5kIHVwZGF0aW5nIHRoZSBsaXN0OgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBvbiBsb2FkaW5nIGEgbmV3IG1vZHVsZSBpbnRvIHRoZSBEU1AgbWVtb3J5IHRoZSBkeW5hbWljIGxvYWRlciBpbnNlcnRzIGEKKyAqIG5ldyBtb2R1bGUgcmVjb3JkIGFzIHRoZSBmaXJzdCBtb2R1bGUgcmVjb3JkIGluIHRoZSBsaXN0LiAgVGhlIGZpZWxkcyBvZgorICogdGhpcyBtb2R1bGUgcmVjb3JkIGFyZSBpbml0aWFsaXplZCB0byByZWZsZWN0IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBtb2R1bGUuCisgKiBUaGUgZHluYW1pYyBsb2FkZXIgZG9lcyBOT1QgaW5jcmVtZW50IHRoZSBmbGFnL2NvdW50ZXIgaW4gdGhlIGxpc3QncyBoZWFkZXIKKyAqIHJlY29yZC4KKyAqCisgKiBVcG9uIHVubG9hZGluZyBhIG1vZHVsZSBmcm9tIHRoZSBEU1AgbWVtb3J5IHRoZSBkeW5hbWljIGxvYWRlciByZW1vdmVzIHRoZQorICogbW9kdWxlJ3MgcmVjb3JkIGZyb20gdGhpcyBsaXN0LiAgVGhlIGR5bmFtaWMgbG9hZGVyIGFsc28gaW5jcmVtZW50cyB0aGUKKyAqIGZsYWcvY291bnRlciBpbiB0aGUgbGlzdCdzIGhlYWRlciByZWNvcmQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbGlzdCBoYXMgYmVlbgorICogY2hhbmdlZC4KKyAqLworCisjaWZuZGVmIF9NT0RVTEVfTElTVF9IXworI2RlZmluZSBfTU9EVUxFX0xJU1RfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIEdsb2JhbCBwb2ludGVyIHRvIHRoZSBtb2R1bGVzX2hlYWRlciBzdHJ1Y3R1cmUgKi8KKyNkZWZpbmUgTU9EVUxFU19IRUFERVIgIl9ETE1vZHVsZXMiCisjZGVmaW5lIE1PRFVMRVNfSEVBREVSX05PX1VOREVSU0NPUkUgIkRMTW9kdWxlcyIKKworLyogSW5pdGlhbCB2ZXJzaW9uIG51bWJlciAqLworI2RlZmluZSBJTklUX1ZFUlNJT04gMQorCisvKiBWZXJpZmljYXRpb24gbnVtYmVyIC0tIHRvIGJlIHJlY29yZGVkIGluIGVhY2ggbW9kdWxlIHJlY29yZCAqLworI2RlZmluZSBWRVJJRklDQVRJT04gMHg3OQorCisvKiBmb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworc3RydWN0IGRsbF9tb2R1bGU7CitzdHJ1Y3QgZGxsX3NlY3Q7CisKKy8qIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgbGlzdCBpcyB0aGUgbW9kdWxlc19oZWFkZXIgcmVjb3JkOworICogaXRzIGFkZHJlc3MgaXMgY29udGFpbmVkIGluIHRoZSBnbG9iYWwgX0RMTW9kdWxlcyBwb2ludGVyICovCitzdHJ1Y3QgbW9kdWxlc19oZWFkZXIgeworCisJLyoKKwkgKiBBZGRyZXNzIG9mIHRoZSBmaXJzdCBkbGxfbW9kdWxlIHJlY29yZCBpbiB0aGUgbGlzdCBvciBOVUxMLgorCSAqIE5vdGU6IGZvciBDNTV4IHRoaXMgaXMgYSB3b3JkIGFkZHJlc3MgKEM1NXggZGF0YSBpcworCSAqIHdvcmQtYWRkcmVzc2FibGUpCisJICovCisJdTMyIGZpcnN0X21vZHVsZTsKKworCS8qIENvbWJpbmVkIHN0b3JhZ2Ugc2l6ZSAoaW4gdGFyZ2V0IGFkZHJlc3NhYmxlIHVuaXRzKSBvZiB0aGUKKwkgKiBkbGxfbW9kdWxlIHJlY29yZCB3aGljaCBmb2xsb3dzIHRoaXMgaGVhZGVyIHJlY29yZCwgb3IgemVybworCSAqIGlmIHRoZSBsaXN0IGlzIGVtcHR5LiAgVGhpcyBzaXplIGluY2x1ZGVzIHRoZSBtb2R1bGUncyBzdHJpbmcgdGFibGUuCisJICogTm90ZTogZm9yIEM1NXggdGhlIHVuaXQgaXMgYSAxNi1iaXQgd29yZCAqLworCXUxNiBmaXJzdF9tb2R1bGVfc2l6ZTsKKworCS8qIENvdW50ZXIgaXMgaW5jcmVtZW50ZWQgd2hlbmV2ZXIgYSBtb2R1bGUgcmVjb3JkIGlzIHJlbW92ZWQgZnJvbQorCSAqIHRoZSBsaXN0ICovCisJdTE2IHVwZGF0ZV9mbGFnOworCit9OworCisvKiBmb3IgZWFjaCAzMi1iaXRzIGluIGFib3ZlIHN0cnVjdHVyZSwgYSBiaXRtYXAsIExTQiBmaXJzdCwgd2hvc2UgYml0cyBhcmU6CisgKiAwID0+IGEgMzItYml0IHZhbHVlLCAxID0+IDIgMTYtYml0IHZhbHVlcyAqLworLyogc3dhcHBpbmcgYml0bWFwIGZvciB0eXBlIG1vZHVsZXNfaGVhZGVyICovCisjZGVmaW5lIE1PRFVMRVNfSEVBREVSX0JJVE1BUCAweDIKKworLyogaW5mb3JtYXRpb24gcmVjb3JkZWQgYWJvdXQgZWFjaCBzZWN0aW9uIGluIGEgbW9kdWxlICovCitzdHJ1Y3QgZGxsX3NlY3QgeworCisJLyogTG9hZC10aW1lIGFkZHJlc3Mgb2YgdGhlIHNlY3Rpb24uCisJICogTm90ZTogZm9yIEM1NXggdGhpcyBpcyBhIGJ5dGUgYWRkcmVzcyBmb3IgcHJvZ3JhbSBzZWN0aW9ucywgYW5kCisJICogYSB3b3JkIGFkZHJlc3MgZm9yIGRhdGEgc2VjdGlvbnMuICBDNTV4IHByb2dyYW0gbWVtb3J5IGlzCisJICogYnl0ZS1hZGRyZXNzYWJsZSwgd2hpbGUgZGF0YSBtZW1vcnkgaXMgd29yZC1hZGRyZXNzYWJsZS4gKi8KKwl1MzIgc2VjdF9sb2FkX2FkcjsKKworCS8qIFJ1bi10aW1lIGFkZHJlc3Mgb2YgdGhlIHNlY3Rpb24uCisJICogTm90ZSAxOiBmb3IgQzU1eCB0aGlzIGlzIGEgYnl0ZSBhZGRyZXNzIGZvciBwcm9ncmFtIHNlY3Rpb25zLCBhbmQKKwkgKiBhIHdvcmQgYWRkcmVzcyBmb3IgZGF0YSBzZWN0aW9ucy4KKwkgKiBOb3RlIDI6IGZvciBDNTV4IHR3byBtb3N0IHNpZ25pZmljYW50IGJpdHMgb2YgdGhpcyBmaWVsZCBpbmRpY2F0ZQorCSAqIHRoZSBzZWN0aW9uIHR5cGU6ICcwMCcgZm9yIGEgY29kZSBzZWN0aW9uLCAnMTEnIGZvciBhIGRhdGEgc2VjdGlvbgorCSAqIChDNTUgYWRkcmVzc2VzIGFyZSByZWFsbHkgb25seSAyNC1iaXRzIHdpZGUpLiAqLworCXUzMiBzZWN0X3J1bl9hZHI7CisKK307CisKKy8qIHRoZSByZXN0IG9mIHRoZSBlbnRyaWVzIGluIHRoZSBsaXN0IGFyZSBtb2R1bGUgcmVjb3JkcyAqLworc3RydWN0IGRsbF9tb2R1bGUgeworCisJLyogQWRkcmVzcyBvZiB0aGUgbmV4dCBkbGxfbW9kdWxlIHJlY29yZCBpbiB0aGUgbGlzdCwgb3IgMCBpZiB0aGlzIGlzCisJICogdGhlIGxhc3QgcmVjb3JkIGluIHRoZSBsaXN0LgorCSAqIE5vdGU6IGZvciBDNTV4IHRoaXMgaXMgYSB3b3JkIGFkZHJlc3MgKEM1NXggZGF0YSBpcworCSAqIHdvcmQtYWRkcmVzc2FibGUpICovCisJdTMyIG5leHRfbW9kdWxlOworCisJLyogQ29tYmluZWQgc3RvcmFnZSBzaXplIChpbiB0YXJnZXQgYWRkcmVzc2FibGUgdW5pdHMpIG9mIHRoZQorCSAqIGRsbF9tb2R1bGUgcmVjb3JkIHdoaWNoIGZvbGxvd3MgdGhpcyBvbmUsIG9yIHplcm8gaWYgdGhpcyBpcyB0aGUKKwkgKiBsYXN0IHJlY29yZCBpbiB0aGUgbGlzdC4gIFRoaXMgc2l6ZSBpbmNsdWRlcyB0aGUgbW9kdWxlJ3Mgc3RyaW5nCisJICogdGFibGUuCisJICogTm90ZTogZm9yIEM1NXggdGhlIHVuaXQgaXMgYSAxNi1iaXQgd29yZC4gKi8KKwl1MTYgbmV4dF9tb2R1bGVfc2l6ZTsKKworCS8qIHZlcnNpb24gbnVtYmVyIG9mIHRoZSB0b29saW5nOyBzZXQgdG8gSU5JVF9WRVJTSU9OIGZvciBQaGFzZSAxICovCisJdTE2IHZlcnNpb247CisKKwkvKiB0aGUgdmVyaWZpY2F0aW9uIHdvcmQ7IHNldCB0byBWRVJJRklDQVRJT04gKi8KKwl1MTYgdmVyaWZpY2F0aW9uOworCisJLyogTnVtYmVyIG9mIHNlY3Rpb25zIGluIHRoZSBzZWN0cyBhcnJheSAqLworCXUxNiBudW1fc2VjdHM7CisKKwkvKiBNb2R1bGUncyAidW5pcXVlIiBpZDsgY29weSBvZiB0aGUgdGltZXN0YW1wIGZyb20gdGhlIGhvc3QKKwkgKiBDT0ZGIGZpbGUgKi8KKwl1MzIgdGltZXN0YW1wOworCisJLyogQXJyYXkgb2YgbnVtX3NlY3RzIGVsZW1lbnRzIG9mIHRoZSBtb2R1bGUncyBzZWN0aW9uIHJlY29yZHMgKi8KKwlzdHJ1Y3QgZGxsX3NlY3Qgc2VjdHNbMV07Cit9OworCisvKiBmb3IgZWFjaCAzMiBiaXRzIGluIGFib3ZlIHN0cnVjdHVyZSwgYSBiaXRtYXAsIExTQiBmaXJzdCwgd2hvc2UgYml0cyBhcmU6CisgKiAwID0+IGEgMzItYml0IHZhbHVlLCAxID0+IDIgMTYtYml0IHZhbHVlcyAqLworI2RlZmluZSBETExfTU9EVUxFX0JJVE1BUCAweDYJLyogc3dhcHBpbmcgYml0bWFwIGZvciB0eXBlIGRsbF9tb2R1bGUgKi8KKworI2VuZGlmIC8qIF9NT0RVTEVfTElTVF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvcGFyYW1zLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9wYXJhbXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzk3ZmNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvcGFyYW1zLmgKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBwYXJhbXMuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBUaGlzIGZpbGUgZGVmaW5lcyBob3N0IGFuZCB0YXJnZXQgcHJvcGVydGllcyBmb3IgYWxsIG1hY2hpbmVzCisgKiBzdXBwb3J0ZWQgYnkgdGhlIGR5bmFtaWMgbG9hZGVyLiAgVG8gYmUgdGVkaW91cy4uLgorICoKKyAqIGhvc3Q6IHRoZSBtYWNoaW5lIG9uIHdoaWNoIHRoZSBkeW5hbWljIGxvYWRlciBydW5zCisgKiB0YXJnZXQ6IHRoZSBtYWNoaW5lIHRoYXQgdGhlIGR5bmFtaWMgbG9hZGVyIGlzIGxvYWRpbmcKKyAqCisgKiBIb3N0IGFuZCB0YXJnZXQgbWF5IG9yIG1heSBub3QgYmUgdGhlIHNhbWUsIGRlcGVuZGluZyB1cG9uIHRoZSBwYXJ0aWN1bGFyCisgKiB1c2UuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCQkJCQkJCUhvc3QgUHJvcGVydGllcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKyNkZWZpbmUgQklUU19QRVJfQllURSA4CQkvKiBiaXRzIGluIHRoZSBzdGFuZGFyZCBQQy9TVU4gYnl0ZSAqLworI2RlZmluZSBMT0dfQklUU19QRVJfQllURSAzCS8qIGxvZyBiYXNlIDIgb2Ygc2FtZSAqLworI2RlZmluZSBCWVRFX01BU0sgKCgxVTw8QklUU19QRVJfQllURSktMSkKKworI2lmIGRlZmluZWQoX19UTVMzMjBDNTVYX18pIHx8IGRlZmluZWQoX1RNUzMyMEM1WFgpCisjZGVmaW5lIEJJVFNfUEVSX0FVIDE2CisjZGVmaW5lIExPR19CSVRTX1BFUl9BVSA0CisgLyogdXNlIHRoaXMgcHJpbnQgc3RyaW5nIGluIGVycm9yIG1lc3NhZ2VzIGZvciB1aW50MzJfdCAqLworI2RlZmluZSBGTVRfVUkzMiAiMHglbHgiCisjZGVmaW5lIEZNVDhfVUkzMiAiJTA4bHgiCS8qIHNhbWUgYnV0IG5vIDB4LCBmaXhlZCB3aWR0aCBmaWVsZCAqLworI2Vsc2UKKy8qIGJpdHMgaW4gdGhlIHNtYWxsZXN0IGFkZHJlc3NhYmxlIGRhdGEgc3RvcmFnZSB1bml0ICovCisjZGVmaW5lIEJJVFNfUEVSX0FVIDgKKy8qIGxvZyBiYXNlIDIgb2YgdGhlIHNhbWU7IHVzZWZ1bCBmb3Igc2hpZnQgY291bnRzICovCisjZGVmaW5lIExPR19CSVRTX1BFUl9BVSAzCisjZGVmaW5lIEZNVF9VSTMyICIweCV4IgorI2RlZmluZSBGTVQ4X1VJMzIgIiUwOHgiCisjZW5kaWYKKworLyogZ2VuZXJpYyBmYXN0ZXN0IG1ldGhvZCBmb3Igc3dhcHBpbmcgYnl0ZXMgYW5kIHNob3J0cyAqLworI2RlZmluZSBTV0FQMzJCWTE2KHp6KSAoKCh6eikgPDwgMTYpIHwgKCh6eikgPj4gMTYpKQorI2RlZmluZSBTV0FQMTZCWTgoenopICgoKHp6KSA8PCA4KSB8ICgoenopID4+IDgpKQorCisvKiAhISBkb24ndCBiZSB0ZW1wdGVkIHRvIGluc2VydCB0eXBlIGRlZmluaXRpb25zIGhlcmU7IHVzZSA8c3RkaW50Lmg+ICEhICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKgkJCQkJCQlUYXJnZXQgUHJvcGVydGllcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFRNUzMyMEM2eCBUYXJnZXQgU3BlY2lmaWMgUGFyYW1ldGVycyAoYnl0ZS1hZGRyZXNzYWJsZSkgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpZiBUTVMzMjA2MAorI2RlZmluZSBNRU1PUkcgICAgICAgICAgMHgwTAkvKiBTaXplIG9mIGNvbmZpZ3VyZWQgbWVtb3J5ICovCisjZGVmaW5lIE1FTVNJWkUgICAgICAgICAweDBMCS8qIChmdWxsIGFkZHJlc3Mgc3BhY2UpICovCisKKyNkZWZpbmUgQ0lOSVRfQUxJR04gICAgIDgJLyogYWxpZ25tZW50IG9mIGNpbml0IHJlY29yZCBpbiBUREFUQSBBVXMgKi8KKyNkZWZpbmUgQ0lOSVRfQ09VTlQJNAkvKiB3aWR0aCBvZiBjb3VudCBmaWVsZCBpbiBUREFUQSBBVXMgKi8KKyNkZWZpbmUgQ0lOSVRfQUREUkVTUwk0CS8qIHdpZHRoIG9mIGFkZHJlc3MgZmllbGQgaW4gVERBVEEgQVVzICovCisjZGVmaW5lIENJTklUX1BBR0VfQklUUwkwCS8qIE51bWJlciBvZiBMU0JzIG9mIGFkZHJlc3MgdGhhdAorCQkJCSAqIGFyZSBwYWdlIG51bWJlciAqLworCisjZGVmaW5lIExFTklFTlRfU0lHTkVEX1JFTEVYUFMgMAkvKiBET0VTIFNJR05FRCBBTExPVyBNQVggVU5TSUdORUQgKi8KKworI3VuZGVmIFRBUkdFVF9FTkRJQU5ORVNTCS8qIG1heSBiZSBiaWcgb3IgbGl0dGxlIGVuZGlhbiAqLworCisvKiBhbGlnbiBhIHRhcmdldCBhZGRyZXNzIHRvIGEgd29yZCBib3VuZGFyeSAqLworI2RlZmluZSBUQVJHRVRfV09SRF9BTElHTih6eikgKCgoenopICsgMHgzKSAmIC0weDQpCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqCQkJREVGQVVMVCBTRVRUSU5HUyBhbmQgREVSSVZFRCBQUk9QRVJUSUVTCisgKgorICogVGhpcyBzZWN0aW9uIGVzdGFibGlzaGVzIGRlZmF1bHRzIGZvciB2YWx1ZXMgbm90IHNwZWNpZmllZCBhYm92ZQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2lmbmRlZiBUQVJHRVRfQVVfQklUUworI2RlZmluZSBUQVJHRVRfQVVfQklUUyA4CS8qIHdpZHRoIG9mIHRoZSB0YXJnZXQgYWRkcmVzc2FibGUgdW5pdCAqLworI2RlZmluZSBMT0dfVEFSR0VUX0FVX0JJVFMgMwkvKiBsb2cyIG9mIHNhbWUgKi8KKyNlbmRpZgorCisjaWZuZGVmIENJTklUX0RFRkFVTFRfUEFHRQorI2RlZmluZSBDSU5JVF9ERUZBVUxUX1BBR0UgMAkvKiBkZWZhdWx0IC5jaW5pdCBwYWdlIG51bWJlciAqLworI2VuZGlmCisKKyNpZm5kZWYgREFUQV9SVU4yTE9BRAorI2RlZmluZSBEQVRBX1JVTjJMT0FEKHp6KSAoenopCS8qIHRyYW5zbGF0ZSBkYXRhIHJ1biBhZGRyZXNzIHRvIGxvYWQgYWRkcmVzcyAqLworI2VuZGlmCisKKyNpZm5kZWYgREJHX0xJU1RfUEFHRQorI2RlZmluZSBEQkdfTElTVF9QQUdFIDAJCS8qIHBhZ2UgbnVtYmVyIGZvciAuZGxsdmlldyBzZWN0aW9uICovCisjZW5kaWYKKworI2lmbmRlZiBUQVJHRVRfV09SRF9BTElHTgorLyogYWxpZ24gYSB0YXJnZXQgYWRkcmVzcyB0byBhIHdvcmQgYm91bmRhcnkgKi8KKyNkZWZpbmUgVEFSR0VUX1dPUkRfQUxJR04oenopICh6eikKKyNlbmRpZgorCisjaWZuZGVmIFREQVRBX1RPX1RBRERSCisjZGVmaW5lIFREQVRBX1RPX1RBRERSKHp6KSAoenopCS8qIHRhcmdldCBkYXRhIGFkZHJlc3MgdG8gdGFyZ2V0IEFVIGFkZHJlc3MgKi8KKyNkZWZpbmUgVEFERFJfVE9fVERBVEEoenopICh6eikJLyogdGFyZ2V0IEFVIGFkZHJlc3MgdG8gdGFyZ2V0IGRhdGEgYWRkcmVzcyAqLworI2RlZmluZSBUREFUQV9BVV9CSVRTCVRBUkdFVF9BVV9CSVRTCS8qIGJpdHMgcGVyIGRhdGEgQVUgKi8KKyNkZWZpbmUgTE9HX1REQVRBX0FVX0JJVFMJTE9HX1RBUkdFVF9BVV9CSVRTCisjZW5kaWYKKworLyoKKyAqCisgKiBVc2VmdWwgcHJvcGVydGllcyBhbmQgY29udmVyc2lvbnMgZGVyaXZlZCBmcm9tIHRoZSBhYm92ZQorICoKKyAqLworCisvKgorICogQ29udmVyc2lvbnMgYmV0d2VlbiBob3N0IGFuZCB0YXJnZXQgYWRkcmVzc2VzCisgKi8KKyNpZiBMT0dfQklUU19QRVJfQVUgPT0gTE9HX1RBUkdFVF9BVV9CSVRTCisvKiB0cmFuc2xhdGUgdGFyZ2V0IGFkZHJlc3NhYmxlIHVuaXQgdG8gaG9zdCBhZGRyZXNzICovCisjZGVmaW5lIFRBRERSX1RPX0hPU1QoeCkgKHgpCisvKiB0cmFuc2xhdGUgaG9zdCBhZGRyZXNzIHRvIHRhcmdldCBhZGRyZXNzYWJsZSB1bml0ICovCisjZGVmaW5lIEhPU1RfVE9fVEFERFIoeCkgKHgpCisjZWxpZiBMT0dfQklUU19QRVJfQVUgPiBMT0dfVEFSR0VUX0FVX0JJVFMKKyNkZWZpbmUgVEFERFJfVE9fSE9TVCh4KSAoKHgpID4+IChMT0dfQklUU19QRVJfQVUtTE9HX1RBUkdFVF9BVV9CSVRTKSkKKyNkZWZpbmUgSE9TVF9UT19UQUREUih4KSAoKHgpIDw8IChMT0dfQklUU19QRVJfQVUtTE9HX1RBUkdFVF9BVV9CSVRTKSkKKyNlbHNlCisjZGVmaW5lIFRBRERSX1RPX0hPU1QoeCkgKCh4KSA8PCAoTE9HX1RBUkdFVF9BVV9CSVRTLUxPR19CSVRTX1BFUl9BVSkpCisjZGVmaW5lIEhPU1RfVE9fVEFERFIoeCkgKCh4KSA+PiAoTE9HX1RBUkdFVF9BVV9CSVRTLUxPR19CSVRTX1BFUl9BVSkpCisjZW5kaWYKKworI2lmIExPR19CSVRTX1BFUl9BVSA9PSBMT0dfVERBVEFfQVVfQklUUworLyogdHJhbnNsYXRlIHRhcmdldCBhZGRyZXNzYWJsZSB1bml0IHRvIGhvc3QgYWRkcmVzcyAqLworI2RlZmluZSBUREFUQV9UT19IT1NUKHgpICh4KQorLyogdHJhbnNsYXRlIGhvc3QgYWRkcmVzcyB0byB0YXJnZXQgYWRkcmVzc2FibGUgdW5pdCAqLworI2RlZmluZSBIT1NUX1RPX1REQVRBKHgpICh4KQorLyogdHJhbnNsYXRlIGhvc3QgYWRkcmVzcyB0byB0YXJnZXQgYWRkcmVzc2FibGUgdW5pdCwgcm91bmQgdXAgKi8KKyNkZWZpbmUgSE9TVF9UT19UREFUQV9ST1VORCh4KSAoeCkKKy8qIGJ5dGUgb2Zmc2V0IHRvIGhvc3Qgb2Zmc2V0LCByb3VuZGVkIHVwIGZvciBUREFUQSBzaXplICovCisjZGVmaW5lIEJZVEVfVE9fSE9TVF9UREFUQV9ST1VORCh4KSBCWVRFX1RPX0hPU1RfUk9VTkQoeCkKKyNlbGlmIExPR19CSVRTX1BFUl9BVSA+IExPR19UREFUQV9BVV9CSVRTCisjZGVmaW5lIFREQVRBX1RPX0hPU1QoeCkgKCh4KSA+PiAoTE9HX0JJVFNfUEVSX0FVLUxPR19UREFUQV9BVV9CSVRTKSkKKyNkZWZpbmUgSE9TVF9UT19UREFUQSh4KSAoKHgpIDw8IChMT0dfQklUU19QRVJfQVUtTE9HX1REQVRBX0FVX0JJVFMpKQorI2RlZmluZSBIT1NUX1RPX1REQVRBX1JPVU5EKHgpICgoeCkgPDwgKExPR19CSVRTX1BFUl9BVS1MT0dfVERBVEFfQVVfQklUUykpCisjZGVmaW5lIEJZVEVfVE9fSE9TVF9UREFUQV9ST1VORCh4KSBCWVRFX1RPX0hPU1RfUk9VTkQoeCkKKyNlbHNlCisjZGVmaW5lIFREQVRBX1RPX0hPU1QoeCkgKCh4KSA8PCAoTE9HX1REQVRBX0FVX0JJVFMtTE9HX0JJVFNfUEVSX0FVKSkKKyNkZWZpbmUgSE9TVF9UT19UREFUQSh4KSAoKHgpID4+IChMT0dfVERBVEFfQVVfQklUUy1MT0dfQklUU19QRVJfQVUpKQorI2RlZmluZSBIT1NUX1RPX1REQVRBX1JPVU5EKHgpICgoKHgpICtcCisJCQkJKDE8PChMT0dfVERBVEFfQVVfQklUUy1MT0dfQklUU19QRVJfQVUpKS0xKSA+PlwKKwkJCQkoTE9HX1REQVRBX0FVX0JJVFMtTE9HX0JJVFNfUEVSX0FVKSkKKyNkZWZpbmUgQllURV9UT19IT1NUX1REQVRBX1JPVU5EKHgpIChCWVRFX1RPX0hPU1QoKHgpICtcCisJKDE8PChMT0dfVERBVEFfQVVfQklUUy1MT0dfQklUU19QRVJfQllURSkpLTEpICZcCisJLShUREFUQV9BVV9CSVRTL0JJVFNfUEVSX0FVKSkKKyNlbmRpZgorCisvKgorICogSW5wdXQgaW4gRE9GRiBmb3JtYXQgaXMgYWx3YXlzIGV4cHJlc2VkIGluIGJ5dGVzLCByZWdhcmRsZXNzIG9mIGxvYWRpbmcgaG9zdAorICogc28gd2Ugd2luZCB1cCBjb252ZXJ0aW5nIGZyb20gYnl0ZXMgdG8gdGFyZ2V0IGFuZCBob3N0IHVuaXRzIGV2ZW4gd2hlbiB0aGUKKyAqIGhvc3QgaXMgbm90IGEgYnl0ZSBtYWNoaW5lLgorICovCisjaWYgTE9HX0JJVFNfUEVSX0FVID09IExPR19CSVRTX1BFUl9CWVRFCisjZGVmaW5lIEJZVEVfVE9fSE9TVCh4KSAoeCkKKyNkZWZpbmUgQllURV9UT19IT1NUX1JPVU5EKHgpICh4KQorI2RlZmluZSBIT1NUX1RPX0JZVEUoeCkgKHgpCisjZWxpZiBMT0dfQklUU19QRVJfQVUgPj0gTE9HX0JJVFNfUEVSX0JZVEUKKyNkZWZpbmUgQllURV9UT19IT1NUKHgpICgoeCkgPj4gKExPR19CSVRTX1BFUl9BVSAtIExPR19CSVRTX1BFUl9CWVRFKSkKKyNkZWZpbmUgQllURV9UT19IT1NUX1JPVU5EKHgpICgoeCArIChCSVRTX1BFUl9BVS9CSVRTX1BFUl9CWVRFLTEpKSA+PlwKKwkJCSAgICAgIChMT0dfQklUU19QRVJfQVUgLSBMT0dfQklUU19QRVJfQllURSkpCisjZGVmaW5lIEhPU1RfVE9fQllURSh4KSAoKHgpIDw8IChMT0dfQklUU19QRVJfQVUgLSBMT0dfQklUU19QRVJfQllURSkpCisjZWxzZQorLyogbGV0cyBub3QgdHJ5IHRvIGRlYWwgd2l0aCBzdWItOC1iaXQgYnl0ZSBtYWNoaW5lcyAqLworI2VuZGlmCisKKyNpZiBMT0dfVEFSR0VUX0FVX0JJVFMgPT0gTE9HX0JJVFNfUEVSX0JZVEUKKy8qIHRyYW5zbGF0ZSB0YXJnZXQgYWRkcmVzc2FibGUgdW5pdCB0byBieXRlIGFkZHJlc3MgKi8KKyNkZWZpbmUgVEFERFJfVE9fQllURSh4KSAoeCkKKy8qIHRyYW5zbGF0ZSBieXRlIGFkZHJlc3MgdG8gdGFyZ2V0IGFkZHJlc3NhYmxlIHVuaXQgKi8KKyNkZWZpbmUgQllURV9UT19UQUREUih4KSAoeCkKKyNlbGlmIExPR19UQVJHRVRfQVVfQklUUyA+IExPR19CSVRTX1BFUl9CWVRFCisjZGVmaW5lIFRBRERSX1RPX0JZVEUoeCkgKCh4KSA8PCAoTE9HX1RBUkdFVF9BVV9CSVRTLUxPR19CSVRTX1BFUl9CWVRFKSkKKyNkZWZpbmUgQllURV9UT19UQUREUih4KSAoKHgpID4+IChMT0dfVEFSR0VUX0FVX0JJVFMtTE9HX0JJVFNfUEVSX0JZVEUpKQorI2Vsc2UKKy8qIGxldHMgbm90IHRyeSB0byBkZWFsIHdpdGggc3ViLTgtYml0IGJ5dGUgbWFjaGluZXMgKi8KKyNlbmRpZgorCisjaWZkZWYgX0JJR19FTkRJQU4KKyNkZWZpbmUgSE9TVF9FTkRJQU5ORVNTIDEKKyNlbHNlCisjZGVmaW5lIEhPU1RfRU5ESUFOTkVTUyAwCisjZW5kaWYKKworI2lmZGVmIFRBUkdFVF9FTkRJQU5ORVNTCisjZGVmaW5lIFRBUkdFVF9FTkRJQU5ORVNTX0RJRkZFUlMocnRlbmQpIChIT1NUX0VORElBTk5FU1NeVEFSR0VUX0VORElBTk5FU1MpCisjZWxpZiBIT1NUX0VORElBTk5FU1MKKyNkZWZpbmUgVEFSR0VUX0VORElBTk5FU1NfRElGRkVSUyhydGVuZCkgKCEocnRlbmQpKQorI2Vsc2UKKyNkZWZpbmUgVEFSR0VUX0VORElBTk5FU1NfRElGRkVSUyhydGVuZCkgKHJ0ZW5kKQorI2VuZGlmCisKKy8qIHRoZSB1bml0IGluIHdoaWNoIHdlIHByb2Nlc3MgdGFyZ2V0IGltYWdlIGRhdGEgKi8KKyNpZiBUQVJHRVRfQVVfQklUUyA8PSA4Cit0eXBlZGVmIHU4IHRndF9hdV90OworI2VsaWYgVEFSR0VUX0FVX0JJVFMgPD0gMTYKK3R5cGVkZWYgdTE2IHRndF9hdV90OworI2Vsc2UKK3R5cGVkZWYgdTMyIHRndF9hdV90OworI2VuZGlmCisKKy8qIHNpemUgb2YgdGhhdCB1bml0ICovCisjaWYgVEFSR0VUX0FVX0JJVFMgPCBCSVRTX1BFUl9BVQorI2RlZmluZSBUR1RBVV9CSVRTIEJJVFNfUEVSX0FVCisjZGVmaW5lIExPR19UR1RBVV9CSVRTIExPR19CSVRTX1BFUl9BVQorI2Vsc2UKKyNkZWZpbmUgVEdUQVVfQklUUyBUQVJHRVRfQVVfQklUUworI2RlZmluZSBMT0dfVEdUQVVfQklUUyBMT0dfVEFSR0VUX0FVX0JJVFMKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvcmVsb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL3JlbG9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IyOGMwNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL3JlbG9jLmMKQEAgLTAsMCArMSw0ODQgQEAKKy8qCisgKiByZWxvYy5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpbmNsdWRlICJoZWFkZXIuaCIKKworI2lmIFRNUzMyMDYwCisvKiB0aGUgbWFnaWMgc3ltYm9sIGZvciB0aGUgc3RhcnQgb2YgQlNTICovCitzdGF0aWMgY29uc3QgY2hhciBic3NzeW1ib2xbXSA9IHsgIi5ic3MiIH07CisjZW5kaWYKKworI2lmIFRNUzMyMDYwCisjaW5jbHVkZSAicmVsb2NfdGFibGVfYzYwMDAuYyIKKyNlbmRpZgorCisjaWYgVE1TMzIwNjAKKy8qIEZyb20gY29mZi5oIC0gaWdub3JlIHRoZXNlIHJlbG9jYXRpb24gb3BlcmF0aW9ucyAqLworI2RlZmluZSBSX0M2MEFMSUdOICAgICAweDc2CS8qIEM2MDogQWxpZ25tZW50IGluZm8gZm9yIGNvbXByZXNzb3IgKi8KKyNkZWZpbmUgUl9DNjBGUEhFQUQgICAgMHg3NwkvKiBDNjA6IEV4cGxpY2l0IGFzc2VtYmx5IGRpcmVjdGl2ZSAqLworI2RlZmluZSBSX0M2ME5PQ01QICAgIDB4MTAwCS8qIEM2MDogRG9uJ3QgY29tcHJlc3MgdGhpcyBjb2RlIHNjbiAqLworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIGRsb2FkX3VucGFjaworICoKKyAqIFBhcmFtZXRlcnM6CisgKglkYXRhCXBvaW50ZXIgdG8gc3RvcmFnZSB1bml0IGNvbnRhaW5pbmcgbG93ZXN0IGhvc3QgYWRkcmVzcyBvZgorICoJCWltYWdlIGRhdGEKKyAqCWZpZWxkc3oJU2l6ZSBvZiBiaXQgZmllbGQsIDAgPCBmaWVsZHN6IDw9IHNpemVvZihydmFsdWUpKkJJVFNfUEVSX0FVCisgKglvZmZzZXQJT2Zmc2V0IGZyb20gTFNCLCAwIDw9IG9mZnNldCA8IEJJVFNfUEVSX0FVCisgKglzZ24JU2lnbmVkbmVzcyBvZiB0aGUgZmllbGQgKFJPUF9TR04sIFJPUF9VTlMsIFJPUF9NQVgsIFJPUF9BTlkpCisgKgorICogRWZmZWN0OgorICoJRXh0cmFjdHMgdGhlIHNwZWNpZmllZCBmaWVsZCBhbmQgcmV0dXJucyBpdC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCitydmFsdWUgZGxvYWRfdW5wYWNrKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzLCB0Z3RfYXVfdCAqIGRhdGEsIGludCBmaWVsZHN6LAorCQkgICAgaW50IG9mZnNldCwgdW5zaWduZWQgc2duKQoreworCXJlZ2lzdGVyIHJ2YWx1ZSBvYmp2YWw7CisJcmVnaXN0ZXIgaW50IHNoaWZ0LCBkaXJlY3Rpb247CisJcmVnaXN0ZXIgdGd0X2F1X3QgKmRwID0gZGF0YTsKKworCWZpZWxkc3ogLT0gMTsJLyogYXZvaWQgbmFzdGluZXNzIHdpdGggMzItYml0IHNoaWZ0IG9mIDMyLWJpdCB2YWx1ZSAqLworCS8qICogY29sbGVjdCB1cCBlbm91Z2ggYml0cyB0byBjb250YWluIHRoZSBkZXNpcmVkIGZpZWxkICovCisJaWYgKFRBUkdFVF9CSUdfRU5ESUFOKSB7CisJCWRwICs9IChmaWVsZHN6ICsgb2Zmc2V0KSA+PiBMT0dfVEdUQVVfQklUUzsKKwkJZGlyZWN0aW9uID0gLTE7CisJfSBlbHNlCisJCWRpcmVjdGlvbiA9IDE7CisJb2JqdmFsID0gKmRwID4+IG9mZnNldDsKKwlzaGlmdCA9IFRHVEFVX0JJVFMgLSBvZmZzZXQ7CisJd2hpbGUgKHNoaWZ0IDw9IGZpZWxkc3opIHsKKwkJZHAgKz0gZGlyZWN0aW9uOworCQlvYmp2YWwgKz0gKHJ2YWx1ZSkgKmRwIDw8IHNoaWZ0OworCQlzaGlmdCArPSBUR1RBVV9CSVRTOworCX0KKworCS8qICogc2lnbiBvciB6ZXJvIGV4dGVuZCB0aGUgdmFsdWUgYXBwcm9wcmlhdGVseSAqLworCWlmIChzZ24gPT0gUk9QX1VOUykKKwkJb2JqdmFsICY9ICgyIDw8IGZpZWxkc3opIC0gMTsKKwllbHNlIHsKKwkJc2hpZnQgPSBzaXplb2YocnZhbHVlKSAqIEJJVFNfUEVSX0FVIC0gMSAtIGZpZWxkc3o7CisJCW9ianZhbCA9IChvYmp2YWwgPDwgc2hpZnQpID4+IHNoaWZ0OworCX0KKworCXJldHVybiBvYmp2YWw7CisKK30JCQkJLyogZGxvYWRfdW5wYWNrICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIGRsb2FkX3JlcGFjaworICoKKyAqIFBhcmFtZXRlcnM6CisgKgl2YWwJCVZhbHVlIHRvIGluc2VydAorICoJZGF0YQlQb2ludGVyIHRvIHN0b3JhZ2UgdW5pdCBjb250YWluaW5nIGxvd2VzdCBob3N0IGFkZHJlc3Mgb2YKKyAqIAkJaW1hZ2UgZGF0YQorICoJZmllbGRzeglTaXplIG9mIGJpdCBmaWVsZCwgMCA8IGZpZWxkc3ogPD0gc2l6ZW9mKHJ2YWx1ZSkqQklUU19QRVJfQVUKKyAqCW9mZnNldAlPZmZzZXQgZnJvbSBMU0IsIDAgPD0gb2Zmc2V0IDwgQklUU19QRVJfQVUKKyAqCXNnbglTaWduZWRuZXNzIG9mIHRoZSBmaWVsZCAoUk9QX1NHTiwgUk9QX1VOUywgUk9QX01BWCwgUk9QX0FOWSkKKyAqCisgKiBFZmZlY3Q6CisgKglTdHVmZnMgdGhlIHNwZWNpZmllZCB2YWx1ZSBpbiB0aGUgc3BlY2lmaWVkIGZpZWxkLiAgUmV0dXJucyAwIGZvcgorICoJc3VjY2VzcworICogb3IgMSBpZiB0aGUgdmFsdWUgd2lsbCBub3QgZml0IGluIHRoZSBzcGVjaWZpZWQgZmllbGQgYWNjb3JkaW5nIHRvIHRoZQorICogc3BlY2lmaWVkIHNpZ25lZG5lc3MgcnVsZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBvdmZfbGltaXRbXSA9IHsgMSwgMiwgMiB9OworCitpbnQgZGxvYWRfcmVwYWNrKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzLCBydmFsdWUgdmFsLCB0Z3RfYXVfdCAqIGRhdGEsCisJCSBpbnQgZmllbGRzeiwgaW50IG9mZnNldCwgdW5zaWduZWQgc2duKQoreworCXJlZ2lzdGVyIHVydmFsdWUgb2JqdmFsLCBtYXNrOworCXJlZ2lzdGVyIGludCBzaGlmdCwgZGlyZWN0aW9uOworCXJlZ2lzdGVyIHRndF9hdV90ICpkcCA9IGRhdGE7CisKKwlmaWVsZHN6IC09IDE7CS8qIGF2b2lkIG5hc3RpbmVzcyB3aXRoIDMyLWJpdCBzaGlmdCBvZiAzMi1iaXQgdmFsdWUgKi8KKwkvKiBjbGlwIHRoZSBiaXRzICovCisJbWFzayA9ICgyVUwgPDwgZmllbGRzeikgLSAxOworCW9ianZhbCA9ICh2YWwgJiBtYXNrKTsKKwkvKiAqIHN0b3JlIHRoZSBiaXRzIHRocm91Z2ggdGhlIHNwZWNpZmllZCBtYXNrICovCisJaWYgKFRBUkdFVF9CSUdfRU5ESUFOKSB7CisJCWRwICs9IChmaWVsZHN6ICsgb2Zmc2V0KSA+PiBMT0dfVEdUQVVfQklUUzsKKwkJZGlyZWN0aW9uID0gLTE7CisJfSBlbHNlCisJCWRpcmVjdGlvbiA9IDE7CisKKwkvKiBpbnNlcnQgTFNCcyAqLworCSpkcCA9ICgqZHAgJiB+KG1hc2sgPDwgb2Zmc2V0KSkgKyAob2JqdmFsIDw8IG9mZnNldCk7CisJc2hpZnQgPSBUR1RBVV9CSVRTIC0gb2Zmc2V0OworCS8qIGFsaWduIG1hc2sgYW5kIG9ianZhbCB3aXRoIEFVIGJvdW5kYXJ5ICovCisJb2JqdmFsID4+PSBzaGlmdDsKKwltYXNrID4+PSBzaGlmdDsKKworCXdoaWxlIChtYXNrKSB7CisJCWRwICs9IGRpcmVjdGlvbjsKKwkJKmRwID0gKCpkcCAmIH5tYXNrKSArIG9ianZhbDsKKwkJb2JqdmFsID4+PSBUR1RBVV9CSVRTOworCQltYXNrID4+PSBUR1RBVV9CSVRTOworCX0KKworCS8qCisJICogY2hlY2sgZm9yIG92ZXJmbG93CisJICovCisJaWYgKHNnbikgeworCQl1bnNpZ25lZCB0bXAgPSAodmFsID4+IGZpZWxkc3opICsgKHNnbiAmIDB4MSk7CisJCWlmICh0bXAgPiBvdmZfbGltaXRbc2duIC0gMV0pCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7CisKK30JCQkJLyogZGxvYWRfcmVwYWNrICovCisKKy8qIGxvb2t1cCB0YWJsZSBmb3IgdGhlIHNjYWxpbmcgYW1vdW50IGluIGEgQzZ4IGluc3RydWN0aW9uICovCisjaWYgVE1TMzIwNjAKKyNkZWZpbmUgU0NBTEVfQklUUyA0CQkvKiB0aGVyZSBhcmUgNCBiaXRzIGluIHRoZSBzY2FsZSBmaWVsZCAqLworI2RlZmluZSBTQ0FMRV9NQVNLIDB4NwkJLyogd2UgcmVhbGx5IG9ubHkgdXNlIHRoZSBib3R0b20gMyBiaXRzICovCitzdGF0aWMgY29uc3QgdTggYzYwX3NjYWxlW1NDQUxFX01BU0sgKyAxXSA9IHsKKwkxLCAwLCAwLCAwLCAxLCAxLCAyLCAyCit9OworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIGRsb2FkX3JlbG9jYXRlCisgKgorICogUGFyYW1ldGVyczoKKyAqCWRhdGEJUG9pbnRlciB0byBiYXNlIG9mIGltYWdlIGRhdGEKKyAqCXJwCQlQb2ludGVyIHRvIHJlbG9jYXRpb24gb3BlcmF0aW9uCisgKgorICogRWZmZWN0OgorICoJUGVyZm9ybXMgdGhlIHNwZWNpZmllZCByZWxvY2F0aW9uIG9wZXJhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KK3ZvaWQgZGxvYWRfcmVsb2NhdGUoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsIHRndF9hdV90ICogZGF0YSwKKwkJICAgIHN0cnVjdCByZWxvY19yZWNvcmRfdCAqcnAsIGJvb2wgKnRyYW1wc19nZW5lcmF0ZWQsCisJCSAgICBib29sIHNlY29uZF9wYXNzKQoreworCXJ2YWx1ZSB2YWwsIHJlbG9jX2FtdCwgb3JpZ192YWwgPSAwOworCXVuc2lnbmVkIGludCBmaWVsZHN6ID0gMDsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMDsKKwl1bnNpZ25lZCBpbnQgcmVsb2NfaW5mbyA9IDA7CisJdW5zaWduZWQgaW50IHJlbG9jX2FjdGlvbiA9IDA7CisJcmVnaXN0ZXIgaW50IHJ4ID0gMDsKKwlydmFsdWUgKnN0YWNrcCA9IE5VTEw7CisJaW50IHRvcDsKKwlzdHJ1Y3QgbG9jYWxfc3ltYm9sICpzdnAgPSBOVUxMOworI2lmZGVmIFJGVl9TQ0FMRQorCXVuc2lnbmVkIGludCBzY2FsZSA9IDA7CisjZW5kaWYKKwlzdHJ1Y3QgaW1hZ2VfcGFja2V0X3QgKmltZ19wa3QgPSBOVUxMOworCisJLyogVGhlIGltYWdlIHBhY2tldCBkYXRhIHN0cnVjdCBpcyBvbmx5IHVzZWQgZHVyaW5nIGZpcnN0IHBhc3MKKwkgKiByZWxvY2F0aW9uIGluIHRoZSBldmVudCB0aGF0IGEgdHJhbXBvbGluZSBpcyBuZWVkZWQuICAybmQgcGFzcworCSAqIHJlbG9jYXRpb24gZG9lc24ndCBndWFyYW50ZWUgdGhhdCBkYXRhIGlzIGNvbWluZyBmcm9tIGFuCisJICogaW1hZ2VfcGFja2V0X3Qgc3RydWN0dXJlLiBTZWUgY2xvYWQuYywgZGxvYWRfZGF0YSBmb3IgaG93IGltZ19kYXRhIGlzCisJICogc2V0LiBJZiB0aGF0IGNoYW5nZXMgdGhpcyBuZWVkcyB0byBiZSB1cGRhdGVkISEhICovCisJaWYgKHNlY29uZF9wYXNzID09IGZhbHNlKQorCQlpbWdfcGt0ID0gKHN0cnVjdCBpbWFnZV9wYWNrZXRfdCAqKSgodTggKikgZGF0YSAtCisJCQkJCQkgICAgc2l6ZW9mKHN0cnVjdAorCQkJCQkJCSAgIGltYWdlX3BhY2tldF90KSk7CisKKwlyeCA9IEhBU0hfRlVOQyhycC0+VFlQRSk7CisJd2hpbGUgKHJvcF9tYXAxW3J4XSAhPSBycC0+VFlQRSkgeworCQlyeCA9IEhBU0hfTChyb3BfbWFwMltyeF0pOworCQlpZiAocnggPCAwKSB7CisjaWYgVE1TMzIwNjAKKwkJCXN3aXRjaCAocnAtPlRZUEUpIHsKKwkJCWNhc2UgUl9DNjBBTElHTjoKKwkJCWNhc2UgUl9DNjBOT0NNUDoKKwkJCWNhc2UgUl9DNjBGUEhFQUQ6CisJCQkJLyogSWdub3JlIHRoZXNlIHJlbG9jIHR5cGVzIGFuZCByZXR1cm4gKi8KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJLyogVW5rbm93biByZWxvYyB0eXBlLCBwcmludCBlcnJvciBhbmQgcmV0dXJuICovCisJCQkJZGxvYWRfZXJyb3IoZGx0aGlzLCAiQmFkIGNvZmYgb3BlcmF0b3IgMHgleCIsCisJCQkJCSAgICBycC0+VFlQRSk7CisJCQl9CisjZWxzZQorCQkJZGxvYWRfZXJyb3IoZGx0aGlzLCAiQmFkIGNvZmYgb3BlcmF0b3IgMHgleCIsIHJwLT5UWVBFKTsKKyNlbmRpZgorCQkJcmV0dXJuOworCQl9CisJfQorCXJ4ID0gSEFTSF9JKHJvcF9tYXAyW3J4XSk7CisJaWYgKChyeCA8IChzaXplb2Yocm9wX2FjdGlvbikgLyBzaXplb2YodTE2KSkpCisJICAgICYmIChyeCA8IChzaXplb2Yocm9wX2luZm8pIC8gc2l6ZW9mKHUxNikpKSAmJiAocnggPiAwKSkgeworCQlyZWxvY19hY3Rpb24gPSByb3BfYWN0aW9uW3J4XTsKKwkJcmVsb2NfaW5mbyA9IHJvcF9pbmZvW3J4XTsKKwl9IGVsc2UgeworCQlkbG9hZF9lcnJvcihkbHRoaXMsICJCdWZmZXIgT3ZlcmZsb3cgLSBBcnJheSBJbmRleCBPdXQgIgorCQkJICAgICJvZiBCb3VuZHMiKTsKKwl9CisKKwkvKiBDb21wdXRlIHRoZSByZWxvY2F0aW9uIGFtb3VudCBmb3IgdGhlIHJlZmVyZW5jZWQgc3ltYm9sLCBpZiBhbnkgKi8KKwlyZWxvY19hbXQgPSBycC0+VVZBTDsKKwlpZiAoUkZWX1NZTShyZWxvY19pbmZvKSkgewkvKiByZWxvY2F0aW9uIHVzZXMgYSBzeW1ib2wgcmVmZXJlbmNlICovCisJCS8qIElmIHRoaXMgaXMgZmlyc3QgcGFzcywgdXNlIHRoZSBtb2R1bGUgbG9jYWwgc3ltYm9sIHRhYmxlLAorCQkgKiBlbHNlIHVzZSB0aGUgdHJhbXBvbGluZSBzeW1ib2wgdGFibGUuICovCisJCWlmIChzZWNvbmRfcGFzcyA9PSBmYWxzZSkgeworCQkJaWYgKCh1MzIpIHJwLT5TWU1ORFggPCBkbHRoaXMtPmRmaWxlX2hkci5kZl9ub19zeW1zKSB7CisJCQkJLyogcmVhbCBzeW1ib2wgcmVmZXJlbmNlICovCisJCQkJc3ZwID0gJmRsdGhpcy0+bG9jYWxfc3ltdGFiW3JwLT5TWU1ORFhdOworCQkJCXJlbG9jX2FtdCA9IChSRlZfU1lNKHJlbG9jX2luZm8pID09IFJPUF9TWU1EKSA/CisJCQkJICAgIHN2cC0+ZGVsdGEgOiBzdnAtPnZhbHVlOworCQkJfQorCQkJLyogcmVsb2MgcmVmZXJlbmNlcyBjdXJyZW50IHNlY3Rpb24gKi8KKwkJCWVsc2UgaWYgKHJwLT5TWU1ORFggPT0gLTEpIHsKKwkJCQlyZWxvY19hbXQgPSAoUkZWX1NZTShyZWxvY19pbmZvKSA9PSBST1BfU1lNRCkgPworCQkJCSAgICBkbHRoaXMtPmRlbHRhX3J1bmFkZHIgOgorCQkJCSAgICBkbHRoaXMtPmltYWdlX3NlY24tPnJ1bl9hZGRyOworCQkJfQorCQl9CisJfQorCS8qIHJlbG9jYXRpb24gdXNlcyBhIHN5bWJvbCByZWZlcmVuY2UgKi8KKwkvKiBIYW5kbGUgc3RhY2sgYWRqdXN0bWVudCAqLworCXZhbCA9IDA7CisJdG9wID0gUkZWX1NUSyhyZWxvY19pbmZvKTsKKwlpZiAodG9wKSB7CisJCXRvcCArPSBkbHRoaXMtPnJlbHN0a2lkeCAtIFJTVEtfVU9QOworCQlpZiAodG9wID49IFNUQVRJQ19FWFBSX1NUS19TSVpFKSB7CisJCQlkbG9hZF9lcnJvcihkbHRoaXMsCisJCQkJICAgICJFeHByZXNzaW9uIHN0YWNrIG92ZXJmbG93IGluICVzIGF0IG9mZnNldCAiCisJCQkJICAgIEZNVF9VSTMyLCBkbHRoaXMtPmltYWdlX3NlY24tPm5hbWUsCisJCQkJICAgIHJwLT52YWRkciArIGRsdGhpcy0+aW1hZ2Vfb2Zmc2V0KTsKKwkJCXJldHVybjsKKwkJfQorCQl2YWwgPSBkbHRoaXMtPnJlbHN0a1tkbHRoaXMtPnJlbHN0a2lkeF07CisJCWRsdGhpcy0+cmVsc3RraWR4ID0gdG9wOworCQlzdGFja3AgPSAmZGx0aGlzLT5yZWxzdGtbdG9wXTsKKwl9CisJLyogRGVyaXZlIGZpZWxkIHBvc2l0aW9uIGFuZCBzaXplLCBpZiB3ZSBuZWVkIHRoZW0gKi8KKwlpZiAocmVsb2NfaW5mbyAmIFJPUF9SVykgewkvKiByZWFkIG9yIHdyaXRlIGFjdGlvbiBpbiBvdXIgZnV0dXJlICovCisJCWZpZWxkc3ogPSBSRlZfV0lEVEgocmVsb2NfYWN0aW9uKTsKKwkJaWYgKGZpZWxkc3opIHsJLyogZmllbGQgaW5mbyBmcm9tIHRhYmxlICovCisJCQlvZmZzZXQgPSBSRlZfUE9TTihyZWxvY19hY3Rpb24pOworCQkJaWYgKFRBUkdFVF9CSUdfRU5ESUFOKQorCQkJCS8qIG1ha2Ugc3VyZSB2YWRkciBpcyB0aGUgbG93ZXN0IHRhcmdldAorCQkJCSAqIGFkZHJlc3MgY29udGFpbmluZyBiaXRzICovCisJCQkJcnAtPnZhZGRyICs9IFJGVl9CSUdPRkYocmVsb2NfaW5mbyk7CisJCX0gZWxzZSB7CS8qIGZpZWxkIGluZm8gZnJvbSByZWxvY2F0aW9uIG9wICovCisJCQlmaWVsZHN6ID0gcnAtPkZJRUxEU1o7CisJCQlvZmZzZXQgPSBycC0+T0ZGU0VUOworCQkJaWYgKFRBUkdFVF9CSUdfRU5ESUFOKQorCQkJCS8qIG1ha2Ugc3VyZSB2YWRkciBpcyB0aGUgbG93ZXN0IHRhcmdldAorCQkJCSAgIGFkZHJlc3MgY29udGFpbmluZyBiaXRzICovCisJCQkJcnAtPnZhZGRyICs9IChycC0+V09SRFNaIC0gb2Zmc2V0IC0gZmllbGRzeikKKwkJCQkgICAgPj4gTE9HX1RBUkdFVF9BVV9CSVRTOworCQl9CisJCWRhdGEgPSAodGd0X2F1X3QgKikgKChjaGFyICopZGF0YSArIFRBRERSX1RPX0hPU1QocnAtPnZhZGRyKSk7CisJCS8qIGNvbXB1dGUgbG93ZXN0IGhvc3QgbG9jYXRpb24gb2YgcmVmZXJlbmNlZCBkYXRhICovCisjaWYgQklUU19QRVJfQVUgPiBUQVJHRVRfQVVfQklUUworCQkvKiBjb252ZXJzaW9uIGZyb20gdGFyZ2V0IGFkZHJlc3MgdG8gaG9zdCBhZGRyZXNzIG1heSBsb3NlCisJCSAgIGFkZHJlc3MgYml0czsgYWRkIGxvc3MgdG8gb2Zmc2V0ICovCisJCWlmIChUQVJHRVRfQklHX0VORElBTikgeworCQkJb2Zmc2V0ICs9IC0oKHJwLT52YWRkciA8PCBMT0dfVEFSR0VUX0FVX0JJVFMpICsKKwkJCQkgICAgb2Zmc2V0ICsgZmllbGRzeikgJgorCQkJICAgIChCSVRTX1BFUl9BVSAtIFRBUkdFVF9BVV9CSVRTKTsKKwkJfSBlbHNlIHsKKwkJCW9mZnNldCArPSAocnAtPnZhZGRyIDw8IExPR19UQVJHRVRfQVVfQklUUykgJgorCQkJICAgIChCSVRTX1BFUl9BVSAtIDEpOworCQl9CisjZW5kaWYKKyNpZmRlZiBSRlZfU0NBTEUKKwkJc2NhbGUgPSBSRlZfU0NBTEUocmVsb2NfaW5mbyk7CisjZW5kaWYKKwl9CisJLyogcmVhZCB0aGUgb2JqZWN0IHZhbHVlIGZyb20gdGhlIGN1cnJlbnQgaW1hZ2UsIGlmIHNvIG9yZGVyZWQgKi8KKwlpZiAocmVsb2NfaW5mbyAmIFJPUF9SKSB7CisJCS8qIHJlbG9jYXRpb24gcmVhZHMgY3VycmVudCBpbWFnZSB2YWx1ZSAqLworCQl2YWwgPSBkbG9hZF91bnBhY2soZGx0aGlzLCBkYXRhLCBmaWVsZHN6LCBvZmZzZXQsCisJCQkJICAgUkZWX1NJR04ocmVsb2NfaW5mbykpOworCQkvKiBTYXZlIG9mZiB0aGUgb3JpZ2luYWwgdmFsdWUgaW4gY2FzZSB0aGUgcmVsbyBvdmVyZmxvd3MgYW5kCisJCSAqIHdlIGNhbiB0cmFtcG9saW5lIGl0LiAqLworCQlvcmlnX3ZhbCA9IHZhbDsKKworI2lmZGVmIFJGVl9TQ0FMRQorCQl2YWwgPDw9IHNjYWxlOworI2VuZGlmCisJfQorCS8qIHBlcmZvcm0gdGhlIG5lY2Vzc2FyeSBhcml0aG1ldGljICovCisJc3dpdGNoIChSRlZfQUNUSU9OKHJlbG9jX2FjdGlvbikpIHsJLyogcmVsb2NhdGlvbiBhY3Rpb25zICovCisJY2FzZSBSQUNUX1ZBTDoKKwkJYnJlYWs7CisJY2FzZSBSQUNUX0FTR046CisJCXZhbCA9IHJlbG9jX2FtdDsKKwkJYnJlYWs7CisJY2FzZSBSQUNUX0FERDoKKwkJdmFsICs9IHJlbG9jX2FtdDsKKwkJYnJlYWs7CisJY2FzZSBSQUNUX1BDUjoKKwkJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkgKiBIYW5kbGUgc3BlY2lhbCBjYXNlcyBvZiBqdW1waW5nIGZyb20gYWJzb2x1dGUgc2VjdGlvbnMKKwkJICogKHNwZWNpYWwgcmVsb2MgdHlwZSkgb3IgdG8gYWJzb2x1dGUgZGVzdGluYXRpb24KKwkJICogKHN5bW5keCA9PSAtMSkuICBJbiBlaXRoZXIgY2FzZSwgc2V0IHRoZSBhcHByb3ByaWF0ZQorCQkgKiByZWxvY2F0aW9uIGFtb3VudCB0byAwLgorCQkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJCWlmIChycC0+U1lNTkRYID09IC0xKQorCQkJcmVsb2NfYW10ID0gMDsKKwkJdmFsICs9IHJlbG9jX2FtdCAtIGRsdGhpcy0+ZGVsdGFfcnVuYWRkcjsKKwkJYnJlYWs7CisJY2FzZSBSQUNUX0FERElTUDoKKwkJdmFsICs9IHJwLT5SX0RJU1AgKyByZWxvY19hbXQ7CisJCWJyZWFrOworCWNhc2UgUkFDVF9BU0dQQzoKKwkJdmFsID0gZGx0aGlzLT5pbWFnZV9zZWNuLT5ydW5fYWRkciArIHJlbG9jX2FtdDsKKwkJYnJlYWs7CisJY2FzZSBSQUNUX1BMVVM6CisJCWlmIChzdGFja3AgIT0gTlVMTCkKKwkJCXZhbCArPSAqc3RhY2twOworCQlicmVhazsKKwljYXNlIFJBQ1RfU1VCOgorCQlpZiAoc3RhY2twICE9IE5VTEwpCisJCQl2YWwgPSAqc3RhY2twIC0gdmFsOworCQlicmVhazsKKwljYXNlIFJBQ1RfTkVHOgorCQl2YWwgPSAtdmFsOworCQlicmVhazsKKwljYXNlIFJBQ1RfTVBZOgorCQlpZiAoc3RhY2twICE9IE5VTEwpCisJCQl2YWwgKj0gKnN0YWNrcDsKKwkJYnJlYWs7CisJY2FzZSBSQUNUX0RJVjoKKwkJaWYgKHN0YWNrcCAhPSBOVUxMKQorCQkJdmFsID0gKnN0YWNrcCAvIHZhbDsKKwkJYnJlYWs7CisJY2FzZSBSQUNUX01PRDoKKwkJaWYgKHN0YWNrcCAhPSBOVUxMKQorCQkJdmFsID0gKnN0YWNrcCAlIHZhbDsKKwkJYnJlYWs7CisJY2FzZSBSQUNUX1NSOgorCQlpZiAodmFsID49IHNpemVvZihydmFsdWUpICogQklUU19QRVJfQVUpCisJCQl2YWwgPSAwOworCQllbHNlIGlmIChzdGFja3AgIT0gTlVMTCkKKwkJCXZhbCA9ICh1cnZhbHVlKSAqc3RhY2twID4+IHZhbDsKKwkJYnJlYWs7CisJY2FzZSBSQUNUX0FTUjoKKwkJaWYgKHZhbCA+PSBzaXplb2YocnZhbHVlKSAqIEJJVFNfUEVSX0FVKQorCQkJdmFsID0gc2l6ZW9mKHJ2YWx1ZSkgKiBCSVRTX1BFUl9BVSAtIDE7CisJCWVsc2UgaWYgKHN0YWNrcCAhPSBOVUxMKQorCQkJdmFsID0gKnN0YWNrcCA+PiB2YWw7CisJCWJyZWFrOworCWNhc2UgUkFDVF9TTDoKKwkJaWYgKHZhbCA+PSBzaXplb2YocnZhbHVlKSAqIEJJVFNfUEVSX0FVKQorCQkJdmFsID0gMDsKKwkJZWxzZSBpZiAoc3RhY2twICE9IE5VTEwpCisJCQl2YWwgPSAqc3RhY2twIDw8IHZhbDsKKwkJYnJlYWs7CisJY2FzZSBSQUNUX0FORDoKKwkJaWYgKHN0YWNrcCAhPSBOVUxMKQorCQkJdmFsICY9ICpzdGFja3A7CisJCWJyZWFrOworCWNhc2UgUkFDVF9PUjoKKwkJaWYgKHN0YWNrcCAhPSBOVUxMKQorCQkJdmFsIHw9ICpzdGFja3A7CisJCWJyZWFrOworCWNhc2UgUkFDVF9YT1I6CisJCWlmIChzdGFja3AgIT0gTlVMTCkKKwkJCXZhbCBePSAqc3RhY2twOworCQlicmVhazsKKwljYXNlIFJBQ1RfTk9UOgorCQl2YWwgPSB+dmFsOworCQlicmVhazsKKyNpZiBUTVMzMjA2MAorCWNhc2UgUkFDVF9DNlNFQ1Q6CisJCS8qIGFjdHVhbGx5IG5lZWRlZCBhZGRyZXNzIG9mIHNlY24gY29udGFpbmluZyBzeW1ib2wgKi8KKwkJaWYgKHN2cCAhPSBOVUxMKSB7CisJCQlpZiAocnAtPlNZTU5EWCA+PSAwKQorCQkJCWlmIChzdnAtPnNlY25uID4gMCkKKwkJCQkJcmVsb2NfYW10ID0gZGx0aGlzLT5sZHJfc2VjdGlvbnMKKwkJCQkJICAgIFtzdnAtPnNlY25uIC0gMV0ucnVuX2FkZHI7CisJCX0KKwkJLyogISEhIEZBTEwgVEhSVSAhISEgKi8KKwljYXNlIFJBQ1RfQzZCQVNFOgorCQlpZiAoZGx0aGlzLT5ic3NfcnVuX2Jhc2UgPT0gMCkgeworCQkJc3RydWN0IGR5bmxvYWRfc3ltYm9sICpzeW1wOworCQkJc3ltcCA9IGRsdGhpcy0+bXlzeW0tPmZpbmRfbWF0Y2hpbmdfc3ltYm9sCisJCQkgICAgKGRsdGhpcy0+bXlzeW0sIGJzc3N5bWJvbCk7CisJCQkvKiBsb29rdXAgdmFsdWUgb2YgZ2xvYmFsIEJTUyBiYXNlICovCisJCQlpZiAoc3ltcCkKKwkJCQlkbHRoaXMtPmJzc19ydW5fYmFzZSA9IHN5bXAtPnZhbHVlOworCQkJZWxzZQorCQkJCWRsb2FkX2Vycm9yKGRsdGhpcywKKwkJCQkJICAgICJHbG9iYWwgQlNTIGJhc2UgcmVmZXJlbmNlZCBpbiAlcyAiCisJCQkJCSAgICAib2Zmc2V0IiBGTVRfVUkzMiAiIGJ1dCBub3QgIgorCQkJCQkgICAgImRlZmluZWQiLAorCQkJCQkgICAgZGx0aGlzLT5pbWFnZV9zZWNuLT5uYW1lLAorCQkJCQkgICAgcnAtPnZhZGRyICsgZGx0aGlzLT5pbWFnZV9vZmZzZXQpOworCQl9CisJCXJlbG9jX2FtdCAtPSBkbHRoaXMtPmJzc19ydW5fYmFzZTsKKwkJLyogISEhIEZBTEwgVEhSVSAhISEgKi8KKwljYXNlIFJBQ1RfQzZEU1BMOgorCQkvKiBzY2FsZSBmYWN0b3IgZGV0ZXJtaW5lZCBieSAzIExTQnMgb2YgZmllbGQgKi8KKwkJc2NhbGUgPSBjNjBfc2NhbGVbdmFsICYgU0NBTEVfTUFTS107CisJCW9mZnNldCArPSBTQ0FMRV9CSVRTOworCQlmaWVsZHN6IC09IFNDQUxFX0JJVFM7CisJCXZhbCA+Pj0gU0NBTEVfQklUUzsJLyogaWdub3JlIHRoZSBzY2FsZSBmaWVsZCBoZXJlYWZ0ZXIgKi8KKwkJdmFsIDw8PSBzY2FsZTsKKwkJdmFsICs9IHJlbG9jX2FtdDsJLyogZG8gdGhlIHVzdWFsIHJlbG9jYXRpb24gKi8KKwkJaWYgKCgoMSA8PCBzY2FsZSkgLSAxKSAmIHZhbCkKKwkJCWRsb2FkX2Vycm9yKGRsdGhpcywKKwkJCQkgICAgIlVuYWxpZ25lZCByZWZlcmVuY2UgaW4gJXMgb2Zmc2V0ICIKKwkJCQkgICAgRk1UX1VJMzIsIGRsdGhpcy0+aW1hZ2Vfc2Vjbi0+bmFtZSwKKwkJCQkgICAgcnAtPnZhZGRyICsgZGx0aGlzLT5pbWFnZV9vZmZzZXQpOworCQlicmVhazsKKyNlbmRpZgorCX0JCQkvKiByZWxvY2F0aW9uIGFjdGlvbnMgKi8KKwkvKiAqIFB1dCBiYWNrIHJlc3VsdCBhcyByZXF1aXJlZCAqLworCWlmIChyZWxvY19pbmZvICYgUk9QX1cpIHsJLyogcmVsb2NhdGlvbiB3cml0ZXMgaW1hZ2UgdmFsdWUgKi8KKyNpZmRlZiBSRlZfU0NBTEUKKwkJdmFsID4+PSBzY2FsZTsKKyNlbmRpZgorCQlpZiAoZGxvYWRfcmVwYWNrKGRsdGhpcywgdmFsLCBkYXRhLCBmaWVsZHN6LCBvZmZzZXQsCisJCQkJIFJGVl9TSUdOKHJlbG9jX2luZm8pKSkgeworCQkJLyogQ2hlY2sgdG8gc2VlIGlmIHRoaXMgcmVsbyBjYW4gYmUgdHJhbXBvbGluZWQsCisJCQkgKiBidXQgb25seSBpbiBmaXJzdCBwaGFzZSByZWxvY2F0aW9uLiAgMm5kIHBoYXNlCisJCQkgKiByZWxvY2F0aW9uIGNhbm5vdCB0cmFtcG9saW5lLiAqLworCQkJaWYgKChzZWNvbmRfcGFzcyA9PSBmYWxzZSkgJiYKKwkJCSAgICAoZGxvYWRfdHJhbXBfYXZhaWwoZGx0aGlzLCBycCkgPT0gdHJ1ZSkpIHsKKworCQkJCS8qIEJlZm9yZSBnZW5lcmF0aW5nIHRoZSB0cmFtcG9saW5lLCByZXN0b3JlCisJCQkJICogdGhlIHZhbHVlIHRvIGl0cyBvcmlnaW5hbCBzbyB0aGUgMm5kIHBhc3MKKwkJCQkgKiAgcmVsbyB3aWxsIHdvcmsuICovCisJCQkJZGxvYWRfcmVwYWNrKGRsdGhpcywgb3JpZ192YWwsIGRhdGEsIGZpZWxkc3osCisJCQkJCSAgICAgb2Zmc2V0LCBSRlZfU0lHTihyZWxvY19pbmZvKSk7CisJCQkJaWYgKCFkbG9hZF90cmFtcF9nZW5lcmF0ZShkbHRoaXMsCisJCQkJCQkJKGRsdGhpcy0+aW1hZ2Vfc2VjbiAtCisJCQkJCQkJIGRsdGhpcy0+bGRyX3NlY3Rpb25zKSwKKwkJCQkJCQkgZGx0aGlzLT5pbWFnZV9vZmZzZXQsCisJCQkJCQkJIGltZ19wa3QsIHJwKSkgeworCQkJCQlkbG9hZF9lcnJvcihkbHRoaXMsCisJCQkJCQkgICAgIkZhaWxlZCB0byAiCisJCQkJCQkgICAgImdlbmVyYXRlIHRyYW1wb2xpbmUgZm9yICIKKwkJCQkJCSAgICAiYml0IG92ZXJmbG93Iik7CisJCQkJCWRsb2FkX2Vycm9yKGRsdGhpcywKKwkJCQkJCSAgICAiUmVsb2NhdGlvbiB2YWwgIiBGTVRfVUkzMgorCQkJCQkJICAgICIgb3ZlcmZsb3dzICVkIGJpdHMgaW4gJXMgIgorCQkJCQkJICAgICJvZmZzZXQgIiBGTVRfVUkzMiwgdmFsLAorCQkJCQkJICAgIGZpZWxkc3osCisJCQkJCQkgICAgZGx0aGlzLT5pbWFnZV9zZWNuLT5uYW1lLAorCQkJCQkJICAgIGRsdGhpcy0+aW1hZ2Vfb2Zmc2V0ICsKKwkJCQkJCSAgICBycC0+dmFkZHIpOworCQkJCX0gZWxzZQorCQkJCQkqdHJhbXBzX2dlbmVyYXRlZCA9IHRydWU7CisJCQl9IGVsc2UgeworCQkJCWRsb2FkX2Vycm9yKGRsdGhpcywgIlJlbG9jYXRpb24gdmFsdWUgIgorCQkJCQkgICAgRk1UX1VJMzIgIiBvdmVyZmxvd3MgJWQgYml0cyBpbiAlcyIKKwkJCQkJICAgICIgb2Zmc2V0ICIgRk1UX1VJMzIsIHZhbCwgZmllbGRzeiwKKwkJCQkJICAgIGRsdGhpcy0+aW1hZ2Vfc2Vjbi0+bmFtZSwKKwkJCQkJICAgIGRsdGhpcy0+aW1hZ2Vfb2Zmc2V0ICsgcnAtPnZhZGRyKTsKKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAodG9wKQorCQkqc3RhY2twID0gdmFsOworfQkJCQkvKiByZWxvY192YWx1ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvcmVsb2NfdGFibGUuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL3JlbG9jX3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFhYjAzZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL3JlbG9jX3RhYmxlLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiByZWxvY190YWJsZS5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgX1JFTE9DX1RBQkxFX0hfCisjZGVmaW5lIF9SRUxPQ19UQUJMRV9IXworLyoKKyAqIFRhYmxlIG9mIHJlbG9jYXRpb24gb3BlcmF0b3IgcHJvcGVydGllcworICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogSG93IGRvZXMgdGhpcyByZWxvY2F0aW9uIG9wZXJhdGlvbiBhY2Nlc3MgdGhlIHByb2dyYW0gaW1hZ2U/ICovCisjZGVmaW5lIFJPUF9OCTAJCS8qIGRvZXMgbm90IGFjY2VzcyBpbWFnZSAqLworI2RlZmluZSBST1BfUgkxCQkvKiByZWFkIGZyb20gaW1hZ2UgKi8KKyNkZWZpbmUgUk9QX1cJMgkJLyogd3JpdGUgdG8gaW1hZ2UgKi8KKyNkZWZpbmUgUk9QX1JXCTMJCS8qIHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gaW1hZ2UgKi8KKworLyogRm9yIHByb2dyYW0gaW1hZ2UgYWNjZXNzLCB3aGF0IGFyZSB0aGUgb3ZlcmZsb3cgcnVsZXMgZm9yIHRoZSBiaXQgZmllbGQ/ICovCisvKiBCZXdhcmUhIFByb2NlZHVyZSByZXBhY2sgZGVwZW5kcyBvbiB0aGlzIGVuY29kaW5nICovCisjZGVmaW5lIFJPUF9BTlkJMAkJLyogbm8gb3ZlcmZsb3cgZXZlciwganVzdCB0cnVuY2F0ZSB0aGUgdmFsdWUgKi8KKyNkZWZpbmUgUk9QX1NHTgkxCQkvKiBzaWduZWQgZmllbGQgKi8KKyNkZWZpbmUgUk9QX1VOUwkyCQkvKiB1bnNpZ25lZCBmaWVsZCAqLworI2RlZmluZSBST1BfTUFYIDMJLyogYWxsb3cgbWF4aW11bSByYW5nZSBvZiBlaXRoZXIgc2lnbmVkIG9yIHVuc2lnbmVkICovCisKKy8qIEhvdyBkb2VzIHRoZSByZWxvY2F0aW9uIG9wZXJhdGlvbiB1c2UgdGhlIHN5bWJvbCByZWZlcmVuY2UgKi8KKyNkZWZpbmUgUk9QX0lHTgkwCQkvKiBubyBzeW1ib2wgaXMgcmVmZXJlbmNlZCAqLworI2RlZmluZSBST1BfTElUIDAJCS8qIHVzZSBycC0+VVZBTCBsaXRlcmFsIGZpZWxkICovCisjZGVmaW5lIFJPUF9TWU0JMQkJLyogc3ltYm9sIHZhbHVlIGlzIHVzZWQgaW4gcmVsb2NhdGlvbiAqLworI2RlZmluZSBST1BfU1lNRCAyCQkvKiBkZWx0YSB2YWx1ZSB2cyBsYXN0IGxpbmsgaXMgdXNlZCAqLworCisvKiBIb3cgZG9lcyB0aGUgcmVsb2Mgb3AgdXNlIHRoZSBzdGFjaz8gKi8KKyNkZWZpbmUgUlNUS19OIDAJCS8qIERvZXMgbm90IHVzZSAqLworI2RlZmluZSBSU1RLX1BPUCAxCQkvKiBEb2VzIGEgUE9QICovCisjZGVmaW5lIFJTVEtfVU9QIDIJCS8qIFVuYXJ5IG9wLCBzdGFjayBwb3NpdGlvbiB1bmFmZmVjdGVkICovCisjZGVmaW5lIFJTVEtfUFNIIDMJCS8qIERvZXMgYSBwdXNoICovCisKKy8qCisgKiBDb21wdXRhdGlvbmFsIGFjdGlvbnMgcGVyZm9ybWVkIGJ5IHRoZSBkeW5hbWljIGxvYWRlcgorICovCitlbnVtIGRsb2FkX2FjdGlvbnMgeworCS8qIGRvbid0IGFsdGVyIHRoZSBjdXJyZW50IHZhbCAoZnJvbSBzdGFjayBvciBtZW0gZmV0Y2gpICovCisJUkFDVF9WQUwsCisJLyogc2V0IHZhbHVlIHRvIHJlZmVyZW5jZSBhbW91bnQgKGZyb20gc3ltYm9sIHJlZmVyZW5jZSkgKi8KKwlSQUNUX0FTR04sCisJUkFDVF9BREQsCQkvKiBhZGQgcmVmZXJlbmNlIHRvIHZhbHVlICovCisJUkFDVF9QQ1IsCQkvKiBhZGQgcmVmZXJlbmNlIG1pbnVzIFBDIGRlbHRhIHRvIHZhbHVlICovCisJUkFDVF9BRERJU1AsCQkvKiBhZGQgcmVmZXJlbmNlIHBsdXMgUl9ESVNQICovCisJUkFDVF9BU0dQQywJCS8qIHNldCB2YWx1ZSB0byBzZWN0aW9uIGFkZHIgcGx1cyByZWZlcmVuY2UgKi8KKworCVJBQ1RfUExVUywJCS8qIHN0YWNrICsgKi8KKwlSQUNUX1NVQiwJCS8qIHN0YWNrIC0gKi8KKwlSQUNUX05FRywJCS8qIHN0YWNrIHVuYXJ5IC0gKi8KKworCVJBQ1RfTVBZLAkJLyogc3RhY2sgKiAqLworCVJBQ1RfRElWLAkJLyogc3RhY2sgLyAqLworCVJBQ1RfTU9ELAkJLyogc3RhY2sgJSAqLworCisJUkFDVF9TUiwJCS8qIHN0YWNrIHVuc2lnbmVkID4+ICovCisJUkFDVF9BU1IsCQkvKiBzdGFjayBzaWduZWQgPj4gKi8KKwlSQUNUX1NMLAkJLyogc3RhY2sgPDwgKi8KKwlSQUNUX0FORCwJCS8qIHN0YWNrICYgKi8KKwlSQUNUX09SLAkJLyogc3RhY2sgfCAqLworCVJBQ1RfWE9SLAkJLyogc3RhY2sgXiAqLworCVJBQ1RfTk9ULAkJLyogc3RhY2sgfiAqLworCVJBQ1RfQzZTRUNULAkJLyogZm9yIEM2MCBSX1NFQ1Qgb3AgKi8KKwlSQUNUX0M2QkFTRSwJCS8qIGZvciBDNjAgUl9CQVNFIG9wICovCisJUkFDVF9DNkRTUEwsCQkvKiBmb3IgQzYwIHNjYWxlZCAxNS1iaXQgZGlzcGxhY2VtZW50ICovCisJUkFDVF9QQ1IyM1QJCS8qIGZvciBBUk0gVGh1bWIgbG9uZyBicmFuY2ggKi8KK307CisKKy8qCisgKiBtYWNyb3MgdXNlZCB0byBleHRyYWN0IHZhbHVlcworICovCisjZGVmaW5lIFJGVl9QT1NOKGFhYSkgKChhYWEpICYgMHhGKQorI2RlZmluZSBSRlZfV0lEVEgoYWFhKSAoKChhYWEpID4+IDQpICYgMHgzRikKKyNkZWZpbmUgUkZWX0FDVElPTihhYWEpICgoYWFhKSA+PiAxMCkKKworI2RlZmluZSBSRlZfU0lHTihpaWkpICgoKGlpaSkgPj4gMikgJiAweDMpCisjZGVmaW5lIFJGVl9TWU0oaWlpKSAoKChpaWkpID4+IDQpICYgMHgzKQorI2RlZmluZSBSRlZfU1RLKGlpaSkgKCgoaWlpKSA+PiA2KSAmIDB4MykKKyNkZWZpbmUgUkZWX0FDQ1MoaWlpKSAoKGlpaSkgJiAweDMpCisKKyNpZiAoVE1TMzIwNjApCisjZGVmaW5lIFJGVl9TQ0FMRShpaWkpICgoaWlpKSA+PiAxMSkKKyNkZWZpbmUgUkZWX0JJR09GRihpaWkpICgoKGlpaSkgPj4gOCkgJiAweDcpCisjZWxzZQorI2RlZmluZSBSRlZfQklHT0ZGKGlpaSkgKChpaWkpID4+IDgpCisjZW5kaWYKKworI2VuZGlmIC8qIF9SRUxPQ19UQUJMRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvcmVsb2NfdGFibGVfYzYwMDAuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL3JlbG9jX3RhYmxlX2M2MDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI4YmMwNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL3JlbG9jX3RhYmxlX2M2MDAwLmMKQEAgLTAsMCArMSwyNTcgQEAKKy8qCisgKiByZWxvY190YWJsZV9jNjAwMC5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKy8qIFRhYmxlcyBnZW5lcmF0ZWQgZm9yIGM2MDAwICovCisKKyNkZWZpbmUgSEFTSF9GVU5DKHp6KSAoKCgoKHp6KSArIDEpICogMTg0NVVMKSA+PiAxMSkgJiA2MykKKyNkZWZpbmUgSEFTSF9MKHp6KSAoKHp6KSA+PiA4KQorI2RlZmluZSBIQVNIX0koenopICgoenopICYgMHhGRikKKworc3RhdGljIGNvbnN0IHUxNiByb3BfbWFwMVtdID0geworCTAsCisJMSwKKwkyLAorCTIwLAorCTQsCisJNSwKKwk2LAorCTE1LAorCTgwLAorCTgxLAorCTgyLAorCTgzLAorCTg0LAorCTg1LAorCTg2LAorCTg3LAorCTE3LAorCTE4LAorCTE5LAorCTIxLAorCTE2LAorCTE2Mzk0LAorCTE2NDA0LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTMyLAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTQwLAorCTExMiwKKwkxMTMsCisJNjU1MzUsCisJMTYzODQsCisJMTYzODUsCisJMTYzODYsCisJMTYzODcsCisJMTYzODgsCisJMTYzODksCisJMTYzOTAsCisJMTYzOTEsCisJMTYzOTIsCisJMTYzOTMsCisJMTYzOTUsCisJMTYzOTYsCisJMTYzOTcsCisJMTYzOTgsCisJMTYzOTksCisJMTY0MDAsCisJMTY0MDEsCisJMTY0MDIsCisJMTY0MDMsCisJMTY0MDUsCisJMTY0MDYsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUKK307CisKK3N0YXRpYyBjb25zdCBzMTYgcm9wX21hcDJbXSA9IHsKKwktMjU2LAorCS0yNTUsCisJLTI1NCwKKwktMjQ1LAorCS0yNTMsCisJLTI1MiwKKwktMjUxLAorCS0yNTAsCisJLTI0MSwKKwktMjQwLAorCS0yMzksCisJLTIzOCwKKwktMjM3LAorCS0yMzYsCisJMTgxMywKKwk1MTQyLAorCS0yNDgsCisJLTI0NywKKwk3NzgsCisJLTI0NCwKKwktMjQ5LAorCS0yMjEsCisJLTIxMSwKKwktMSwKKwktMSwKKwktMSwKKwktMSwKKwktMSwKKwktMSwKKwktMjQzLAorCS0xLAorCS0xLAorCS0xLAorCS0xLAorCS0xLAorCS0xLAorCS0yNDIsCisJLTIzMywKKwktMjMyLAorCS0xLAorCS0yMzEsCisJLTIzMCwKKwktMjI5LAorCS0yMjgsCisJLTIyNywKKwktMjI2LAorCS0yMjUsCisJLTIyNCwKKwktMjIzLAorCTU0MTAsCisJLTIyMCwKKwktMjE5LAorCS0yMTgsCisJLTIxNywKKwktMjE2LAorCS0yMTUsCisJLTIxNCwKKwktMjEzLAorCTU2NzYsCisJLTIxMCwKKwktMjA5LAorCS0xLAorCS0xLAorCS0xCit9OworCitzdGF0aWMgY29uc3QgdTE2IHJvcF9hY3Rpb25bXSA9IHsKKwkyNTYwLAorCTIzMDQsCisJMjMwNCwKKwkyNDMyLAorCTI0MzIsCisJMjU2MCwKKwkyMTc2LAorCTIzMDQsCisJMjU2MCwKKwkzMjAwLAorCTMzMjgsCisJMzU4NCwKKwkzNDU2LAorCTIzMDQsCisJNDIwOCwKKwkyMDc4OCwKKwkyMTgxMiwKKwkzNDE1LAorCTMyNDUsCisJMjMxMSwKKwk0MzU5LAorCTE5NzY0LAorCTIzMTEsCisJMzE5MSwKKwkzMjgwLAorCTY2NTYsCisJNzY4MCwKKwk4NzA0LAorCTk3MjgsCisJMTA3NTIsCisJMTE3NzYsCisJMTI4MDAsCisJMTM4MjQsCisJMTQ4NDgsCisJMTU4NzIsCisJMTY4OTYsCisJMTc5MjAsCisJMTg5NDQsCisJMCwKKwkwLAorCTAsCisJMCwKKwkxNTM2LAorCTE1MzYsCisJMTUzNiwKKwk1NjMyLAorCTUxMiwKKwkwCit9OworCitzdGF0aWMgY29uc3QgdTE2IHJvcF9pbmZvW10gPSB7CisJMCwKKwkzNSwKKwkzNSwKKwkzNSwKKwkzNSwKKwkzNSwKKwkzNSwKKwkzNSwKKwkzNSwKKwkzOSwKKwkzOSwKKwkzOSwKKwkzOSwKKwkzNSwKKwkzNCwKKwkyODMsCisJMjk5LAorCTQxMzUsCisJNDM5MSwKKwkyOTEsCisJMzMwNTksCisJMjgzLAorCTI5NSwKKwk0NjQ3LAorCTQxMzUsCisJNjQsCisJNjQsCisJMTI4LAorCTY0LAorCTY0LAorCTY0LAorCTY0LAorCTY0LAorCTY0LAorCTY0LAorCTY0LAorCTY0LAorCTEyOCwKKwkyMDEsCisJMTk3LAorCTc0LAorCTcwLAorCTIwOCwKKwkxOTYsCisJMjAwLAorCTE5MiwKKwkxOTIsCisJNjYKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC90cmFtcC5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvdHJhbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGQyMmVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvdHJhbXAuYwpAQCAtMCwwICsxLDExNDMgQEAKKy8qCisgKiB0cmFtcC5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaW5jbHVkZSAiaGVhZGVyLmgiCisKKyNpZiBUTVMzMjA2MAorI2luY2x1ZGUgInRyYW1wX3RhYmxlX2M2MDAwLmMiCisjZW5kaWYKKworI2RlZmluZSBNQVhfUkVMT1NfUEVSX1BBU1MJNAorCisvKgorICogRnVuY3Rpb246CXByaXZfdHJhbXBfc2VjdF90Z3RfYWxsb2MKKyAqIERlc2NyaXB0aW9uOiBBbGxvY2F0ZSB0YXJnZXQgbWVtb3J5IGZvciB0aGUgdHJhbXBvbGluZSBzZWN0aW9uLiAgVGhlCisgKgkgIHRhcmdldCBtZW0gc2l6ZSBpcyBlYXNpbHkgb2J0YWluZWQgYXMgdGhlIG5leHQgYXZhaWxhYmxlIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbnQgcHJpdl90cmFtcF9zZWN0X3RndF9hbGxvYyhzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcykKK3sKKwlpbnQgcmV0X3ZhbCA9IDA7CisJc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKnNlY3RfaW5mbzsKKworCS8qICBQb3B1bGF0ZSB0aGUgdHJhbXBvbGluZSBsb2FkZXIgc2VjdGlvbiBhbmQgYWxsb2NhdGUgaXQgb24gdGhlCisJICogdGFyZ2V0LiAgVGhlIHNlY3Rpb24gbmFtZSBpcyBBTFdBWVMgdGhlIGZpcnN0IHN0cmluZyBpbiB0aGUgZmluYWwKKwkgKiBzdHJpbmcgdGFibGUgZm9yIHRyYW1wb2xpbmVzLiAgVGhlIHRyYW1wb2xpbmUgc2VjdGlvbiBpcyBhbHdheXMKKwkgKiAxIGJleW9uZCB0aGUgdG90YWwgbnVtYmVyIG9mIGFsbG9jYXRlZCBzZWN0aW9ucy4gKi8KKwlzZWN0X2luZm8gPSAmZGx0aGlzLT5sZHJfc2VjdGlvbnNbZGx0aGlzLT5hbGxvY2F0ZWRfc2Vjbl9jb3VudF07CisKKwlzZWN0X2luZm8tPm5hbWUgPSBkbHRoaXMtPnRyYW1wLmZpbmFsX3N0cmluZ190YWJsZTsKKwlzZWN0X2luZm8tPnNpemUgPSBkbHRoaXMtPnRyYW1wLnRyYW1wX3NlY3RfbmV4dF9hZGRyOworCXNlY3RfaW5mby0+Y29udGV4dCA9IDA7CisJc2VjdF9pbmZvLT50eXBlID0KKwkgICAgKDQgPDwgOCkgfCBETE9BRF9URVhUIHwgRFNfQUxMT0NBVEVfTUFTSyB8IERTX0RPV05MT0FEX01BU0s7CisJc2VjdF9pbmZvLT5wYWdlID0gMDsKKwlzZWN0X2luZm8tPnJ1bl9hZGRyID0gMDsKKwlzZWN0X2luZm8tPmxvYWRfYWRkciA9IDA7CisJcmV0X3ZhbCA9IGRsdGhpcy0+bXlhbGxvYy0+ZGxvYWRfYWxsb2NhdGUoZGx0aGlzLT5teWFsbG9jLAorCQkJCQkJICBzZWN0X2luZm8sCisJCQkJCQkgIGRzX2FsaWdubWVudAorCQkJCQkJICAoc2VjdF9pbmZvLT50eXBlKSk7CisKKwlpZiAocmV0X3ZhbCA9PSAwKQorCQlkbG9hZF9lcnJvcihkbHRoaXMsICJGYWlsZWQgdG8gYWxsb2NhdGUgdGFyZ2V0IG1lbW9yeSBmb3IiCisJCQkgICAgIiB0cmFtcG9saW5lIik7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoKKyAqIEZ1bmN0aW9uOglwcml2X2gyYQorICogRGVzY3JpcHRpb246IEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGEgaGV4IHZhbHVlIHRvIGl0cyBBU0NJSQorICoJICByZXByZXNlbnRhdGlvbi4gIFVzZWQgZm9yIHRyYW1wb2xpbmUgc3ltYm9sIG5hbWUgZ2VuZXJhdGlvbi4KKyAqLworc3RhdGljIHU4IHByaXZfaDJhKHU4IHZhbHVlKQoreworCWlmICh2YWx1ZSA+IDB4RikKKwkJcmV0dXJuIDB4RkY7CisKKwlpZiAodmFsdWUgPD0gOSkKKwkJdmFsdWUgKz0gMHgzMDsKKwllbHNlCisJCXZhbHVlICs9IDB4Mzc7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKKy8qCisgKiBGdW5jdGlvbjoJcHJpdl90cmFtcF9zeW1fZ2VuX25hbWUKKyAqIERlc2NyaXB0aW9uOiBHZW5lcmF0ZSBhIHRyYW1wb2xpbmUgc3ltYm9sIG5hbWUgKEFTQ0lJKSB1c2luZyB0aGUgdmFsdWUKKyAqCSAgb2YgdGhlIHN5bWJvbC4gIFRoaXMgcGxhY2VzIHRoZSBuZXcgbmFtZSBpbnRvIHRoZSB1c2VyIGJ1ZmZlci4KKyAqCSAgVGhlIG5hbWUgaXMgZml4ZWQgaW4gbGVuZ3RoIGFuZCBvZiB0aGUgZm9ybTogX18kZGJUUl9feHh4eHh4eHgKKyAqCSAgKHdoZXJlICJ4eHh4eHh4eCIgaXMgdGhlIGhleCB2YWx1ZS4KKyAqLworc3RhdGljIHZvaWQgcHJpdl90cmFtcF9zeW1fZ2VuX25hbWUodTMyIHZhbHVlLCBjaGFyICpkc3QpCit7CisJdTMyIGk7CisJY2hhciAqcHJlZml4ID0gVFJBTVBfU1lNX1BSRUZJWDsKKwljaGFyICpkc3RfbG9jYWwgPSBkc3Q7CisJdTggdG1wOworCisJLyogIENsZWFyIG91dCB0aGUgZGVzdGluYXRpb24sIGluY2x1ZGluZyB0aGUgZW5kaW5nIE5VTEwgKi8KKwlmb3IgKGkgPSAwOyBpIDwgKFRSQU1QX1NZTV9QUkVGSVhfTEVOICsgVFJBTVBfU1lNX0hFWF9BU0NJSV9MRU4pOyBpKyspCisJCSooZHN0X2xvY2FsICsgaSkgPSAwOworCisJLyogIENvcHkgdGhlIHByZWZpeCB0byBzdGFydCAqLworCWZvciAoaSA9IDA7IGkgPCBzdHJsZW4oVFJBTVBfU1lNX1BSRUZJWCk7IGkrKykgeworCQkqZHN0X2xvY2FsID0gKihwcmVmaXggKyBpKTsKKwkJZHN0X2xvY2FsKys7CisJfQorCisJLyogIE5vdyBjb252ZXJ0IHRoZSB2YWx1ZSBwYXNzZWQgaW4gdG8gYSBzdHJpbmcgZXF1aXYgb2YgdGhlIGhleCAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YodmFsdWUpOyBpKyspIHsKKyNpZm5kZWYgX0JJR19FTkRJQU4KKwkJdG1wID0gKigoKHU4ICopICZ2YWx1ZSkgKyAoc2l6ZW9mKHZhbHVlKSAtIDEpIC0gaSk7CisJCSpkc3RfbG9jYWwgPSBwcml2X2gyYSgodG1wICYgMHhGMCkgPj4gNCk7CisJCWRzdF9sb2NhbCsrOworCQkqZHN0X2xvY2FsID0gcHJpdl9oMmEodG1wICYgMHgwRik7CisJCWRzdF9sb2NhbCsrOworI2Vsc2UKKwkJdG1wID0gKigoKHU4ICopICZ2YWx1ZSkgKyBpKTsKKwkJKmRzdF9sb2NhbCA9IHByaXZfaDJhKCh0bXAgJiAweEYwKSA+PiA0KTsKKwkJZHN0X2xvY2FsKys7CisJCSpkc3RfbG9jYWwgPSBwcml2X2gyYSh0bXAgJiAweDBGKTsKKwkJZHN0X2xvY2FsKys7CisjZW5kaWYKKwl9CisKKwkvKiAgTlVMTCB0ZXJtaW5hdGUgKi8KKwkqZHN0X2xvY2FsID0gMDsKK30KKworLyoKKyAqIEZ1bmN0aW9uOglwcml2X3RyYW1wX3N0cmluZ19jcmVhdGUKKyAqIERlc2NyaXB0aW9uOiBDcmVhdGUgYSBuZXcgc3RyaW5nIHNwZWNpZmljIHRvIHRoZSB0cmFtcG9saW5lIGxvYWRpbmcgYW5kIGFkZAorICoJICBpdCB0byB0aGUgdHJhbXBvbGluZSBzdHJpbmcgbGlzdC4gIFRoaXMgbGlzdCBjb250YWlucyB0aGUKKyAqCSAgdHJhbXBvbGluZSBzZWN0aW9uIG5hbWUgYW5kIHRyYW1wb2xpbmUgcG9pbnQgc3ltYm9scy4KKyAqLworc3RhdGljIHN0cnVjdCB0cmFtcF9zdHJpbmcgKnByaXZfdHJhbXBfc3RyaW5nX2NyZWF0ZShzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcywKKwkJCQkJCSAgICAgdTMyIHN0cl9sZW4sIGNoYXIgKnN0cikKK3sKKwlzdHJ1Y3QgdHJhbXBfc3RyaW5nICpuZXdfc3RyaW5nID0gTlVMTDsKKwl1MzIgaTsKKworCS8qICBDcmVhdGUgYSBuZXcgc3RyaW5nIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgc2l6ZS4gKi8KKwluZXdfc3RyaW5nID0KKwkgICAgKHN0cnVjdCB0cmFtcF9zdHJpbmcgKilkbHRoaXMtPm15c3ltLT5kbG9hZF9hbGxvY2F0ZShkbHRoaXMtPm15c3ltLAorCQkJCQkJCQkgKHNpemVvZgorCQkJCQkJCQkgIChzdHJ1Y3QKKwkJCQkJCQkJICAgdHJhbXBfc3RyaW5nKQorCQkJCQkJCQkgICsgc3RyX2xlbiArCisJCQkJCQkJCSAgMSkpOworCWlmIChuZXdfc3RyaW5nICE9IE5VTEwpIHsKKwkJLyogIENsZWFyIHRoZSBzdHJpbmcgZmlyc3QuICBUaGlzIGVuc3VyZXMgdGhlIGVuZGluZyBOVUxMIGlzCisJCSAqIHByZXNlbnQgYW5kIHRoZSBvcHRpbWl6ZXIgd29uJ3QgdG91Y2ggaXQuICovCisJCWZvciAoaSA9IDA7IGkgPCAoc2l6ZW9mKHN0cnVjdCB0cmFtcF9zdHJpbmcpICsgc3RyX2xlbiArIDEpOworCQkgICAgIGkrKykKKwkJCSooKHU4ICopIG5ld19zdHJpbmcgKyBpKSA9IDA7CisKKwkJLyogIEFkZCB0aGlzIHN0cmluZyB0byBvdXIgdmlydHVhbCB0YWJsZSBieSBhc3NpZ25pbmcgaXQgdGhlCisJCSAqIG5leHQgaW5kZXggYW5kIHB1c2hpbmcgaXQgdG8gdGhlIHRhaWwgb2YgdGhlIGxpc3QuICovCisJCW5ld19zdHJpbmctPmluZGV4ID0gZGx0aGlzLT50cmFtcC50cmFtcF9zdHJpbmdfbmV4dF9pbmRleDsKKwkJZGx0aGlzLT50cmFtcC50cmFtcF9zdHJpbmdfbmV4dF9pbmRleCsrOworCQlkbHRoaXMtPnRyYW1wLnRyYW1wX3N0cmluZ19zaXplICs9IHN0cl9sZW4gKyAxOworCisJCW5ld19zdHJpbmctPm5leHQgPSBOVUxMOworCQlpZiAoZGx0aGlzLT50cmFtcC5zdHJpbmdfaGVhZCA9PSBOVUxMKQorCQkJZGx0aGlzLT50cmFtcC5zdHJpbmdfaGVhZCA9IG5ld19zdHJpbmc7CisJCWVsc2UKKwkJCWRsdGhpcy0+dHJhbXAuc3RyaW5nX3RhaWwtPm5leHQgPSBuZXdfc3RyaW5nOworCisJCWRsdGhpcy0+dHJhbXAuc3RyaW5nX3RhaWwgPSBuZXdfc3RyaW5nOworCisJCS8qICBDb3B5IHRoZSBzdHJpbmcgb3ZlciB0byB0aGUgbmV3IG9iamVjdCAqLworCQlmb3IgKGkgPSAwOyBpIDwgc3RyX2xlbjsgaSsrKQorCQkJbmV3X3N0cmluZy0+c3RyW2ldID0gc3RyW2ldOworCX0KKworCXJldHVybiBuZXdfc3RyaW5nOworfQorCisvKgorICogRnVuY3Rpb246CXByaXZfdHJhbXBfc3RyaW5nX2ZpbmQKKyAqIERlc2NyaXB0aW9uOiBXYWxrIHRoZSB0cmFtcG9saW5lIHN0cmluZyBsaXN0IGFuZCBmaW5kIGEgbWF0Y2ggZm9yIHRoZQorICoJICBwcm92aWRlZCBzdHJpbmcuICBJZiBub3QgbWF0Y2ggaXMgZm91bmQsIE5VTEwgaXMgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdHJhbXBfc3RyaW5nICpwcml2X3RyYW1wX3N0cmluZ19maW5kKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzLAorCQkJCQkJICAgY2hhciAqc3RyKQoreworCXN0cnVjdCB0cmFtcF9zdHJpbmcgKmN1cl9zdHIgPSBOVUxMOworCXN0cnVjdCB0cmFtcF9zdHJpbmcgKnJldF92YWwgPSBOVUxMOworCXUzMiBpOworCXUzMiBzdHJfbGVuID0gc3RybGVuKHN0cik7CisKKwlmb3IgKGN1cl9zdHIgPSBkbHRoaXMtPnRyYW1wLnN0cmluZ19oZWFkOworCSAgICAgKHJldF92YWwgPT0gTlVMTCkgJiYgKGN1cl9zdHIgIT0gTlVMTCk7IGN1cl9zdHIgPSBjdXJfc3RyLT5uZXh0KSB7CisJCS8qICBJZiB0aGUgc3RyaW5nIGxlbmd0aHMgYXJlbid0IGVxdWFsLCBkb24ndCBib3RoZXIKKwkJICogY29tcGFyaW5nICovCisJCWlmIChzdHJfbGVuICE9IHN0cmxlbihjdXJfc3RyLT5zdHIpKQorCQkJY29udGludWU7CisKKwkJLyogIFdhbGsgdGhlIHN0cmluZ3MgdW50aWwgb25lIG9mIHRoZW0gZW5kcyAqLworCQlmb3IgKGkgPSAwOyBpIDwgc3RyX2xlbjsgaSsrKSB7CisJCQkvKiAgSWYgdGhleSBkb24ndCBtYXRjaCBpbiB0aGUgY3VycmVudCBwb3NpdGlvbiB0aGVuCisJCQkgKiBicmVhayBvdXQgbm93LCBubyBzZW5zZSBpbiBjb250aW51aW5nIHRvIGxvb2sgYXQKKwkJCSAqIHRoaXMgc3RyaW5nLiAqLworCQkJaWYgKHN0cltpXSAhPSBjdXJfc3RyLT5zdHJbaV0pCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaSA9PSBzdHJfbGVuKQorCQkJcmV0X3ZhbCA9IGN1cl9zdHI7CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qCisgKiBGdW5jdGlvbjoJcHJpdl9zdHJpbmdfdGJsX2ZpbmFsaXplCisgKiBEZXNjcmlwdGlvbjogRmxhdHRlbiB0aGUgdHJhbXBvbGluZSBzdHJpbmcgbGlzdCBpbnRvIGEgdGFibGUgb2YgTlVMTAorICoJICB0ZXJtaW5hdGVkIHN0cmluZ3MuICBUaGlzIGlzIHRoZSBzYW1lIGZvcm1hdCBvZiBzdHJpbmcgdGFibGUKKyAqCSAgYXMgdXNlZCBieSB0aGUgQ09GRi9ET0ZGIGZpbGUuCisgKi8KK3N0YXRpYyBpbnQgcHJpdl9zdHJpbmdfdGJsX2ZpbmFsaXplKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzKQoreworCWludCByZXRfdmFsID0gMDsKKwlzdHJ1Y3QgdHJhbXBfc3RyaW5nICpjdXJfc3RyaW5nOworCWNoYXIgKmN1cl9sb2M7CisJY2hhciAqdG1wOworCisJLyogIEFsbG9jYXRlIGVub3VnaCBzcGFjZSBmb3IgYWxsIHN0cmluZ3MgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gIFRoZQorCSAqIHRhYmxlIGlzIHNpbXBseSBhbGwgc3RyaW5ncyBjb25jYXRlbmF0ZWQgdG9nZXRoZXIgd2lsbCBOVUxMCisJICogZW5kaW5ncy4gKi8KKwlkbHRoaXMtPnRyYW1wLmZpbmFsX3N0cmluZ190YWJsZSA9CisJICAgIChjaGFyICopZGx0aGlzLT5teXN5bS0+ZGxvYWRfYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwKKwkJCQkJCSAgZGx0aGlzLT50cmFtcC4KKwkJCQkJCSAgdHJhbXBfc3RyaW5nX3NpemUpOworCWlmIChkbHRoaXMtPnRyYW1wLmZpbmFsX3N0cmluZ190YWJsZSAhPSBOVUxMKSB7CisJCS8qICBXZSBnb3Qgb3VyIGJ1ZmZlciwgd2FsayB0aGUgbGlzdCBhbmQgcmVsZWFzZSB0aGUgbm9kZXMgYXMqCisJCSAqIHdlIGdvICovCisJCWN1cl9sb2MgPSBkbHRoaXMtPnRyYW1wLmZpbmFsX3N0cmluZ190YWJsZTsKKwkJY3VyX3N0cmluZyA9IGRsdGhpcy0+dHJhbXAuc3RyaW5nX2hlYWQ7CisJCXdoaWxlIChjdXJfc3RyaW5nICE9IE5VTEwpIHsKKwkJCS8qICBNb3ZlIHRoZSBoZWFkL3RhaWwgcG9pbnRlcnMgKi8KKwkJCWRsdGhpcy0+dHJhbXAuc3RyaW5nX2hlYWQgPSBjdXJfc3RyaW5nLT5uZXh0OworCQkJaWYgKGRsdGhpcy0+dHJhbXAuc3RyaW5nX3RhaWwgPT0gY3VyX3N0cmluZykKKwkJCQlkbHRoaXMtPnRyYW1wLnN0cmluZ190YWlsID0gTlVMTDsKKworCQkJLyogIENvcHkgdGhlIHN0cmluZyBjb250ZW50cyAqLworCQkJZm9yICh0bXAgPSBjdXJfc3RyaW5nLT5zdHI7CisJCQkgICAgICp0bXAgIT0gJ1wwJzsgdG1wKyssIGN1cl9sb2MrKykKKwkJCQkqY3VyX2xvYyA9ICp0bXA7CisKKwkJCS8qICBQaWNrIHVwIHRoZSBOVUxMIHRlcm1pbmF0aW9uIHNpbmNlIGl0IHdhcyBtaXNzZWQgYnkKKwkJCSAqIGJyZWFraW5nIHVzaW5nIGl0IHRvIGVuZCB0aGUgYWJvdmUgbG9vcC4gKi8KKwkJCSpjdXJfbG9jID0gJ1wwJzsKKwkJCWN1cl9sb2MrKzsKKworCQkJLyogIEZyZWUgdGhlIHN0cmluZyBub2RlLCB3ZSBkb24ndCBuZWVkIGl0IGFueSBtb3JlLiAqLworCQkJZGx0aGlzLT5teXN5bS0+ZGxvYWRfZGVhbGxvY2F0ZShkbHRoaXMtPm15c3ltLAorCQkJCQkJCWN1cl9zdHJpbmcpOworCisJCQkvKiAgTW92ZSBvdXIgcG9pbnRlciB0byB0aGUgbmV4dCBvbmUgKi8KKwkJCWN1cl9zdHJpbmcgPSBkbHRoaXMtPnRyYW1wLnN0cmluZ19oZWFkOworCQl9CisKKwkJLyogIFVwZGF0ZSBvdXIgcmV0dXJuIHZhbHVlIHRvIHN1Y2Nlc3MgKi8KKwkJcmV0X3ZhbCA9IDE7CisJfSBlbHNlCisJCWRsb2FkX2Vycm9yKGRsdGhpcywgIkZhaWxlZCB0byBhbGxvY2F0ZSB0cmFtcG9saW5lICIKKwkJCSAgICAic3RyaW5nIHRhYmxlIik7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoKKyAqIEZ1bmN0aW9uOglwcml2X3RyYW1wX3NlY3RfYWxsb2MKKyAqIERlc2NyaXB0aW9uOiBWaXJ0dWFsbHkgYWxsb2NhdGUgc3BhY2UgZnJvbSB0aGUgdHJhbXBvbGluZSBzZWN0aW9uLiAgVGhpcworICoJICBmdW5jdGlvbiByZXR1cm5zIHRoZSBuZXh0IG9mZnNldCB3aXRoaW4gdGhlIHRyYW1wb2xpbmUgc2VjdGlvbgorICoJICB0aGF0IGlzIGF2YWlsYWJsZSBhbmQgbW92ZWQgdGhlIG5leHQgYXZhaWxhYmxlIG9mZnNldCBieSB0aGUKKyAqCSAgcmVxdWVzdGVkIHNpemUuICBOTyBUQVJHRVQgQUxMT0NBVElPTiBJUyBET05FIEFUIFRISVMgVElNRS4KKyAqLworc3RhdGljIHUzMiBwcml2X3RyYW1wX3NlY3RfYWxsb2Moc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsIHUzMiB0cmFtcF9zaXplKQoreworCXUzMiByZXRfdmFsOworCisJLyogIElmIHRoZSBuZXh0IGF2YWlsYWJsZSBhZGRyZXNzIGlzIDAsIHRoaXMgaXMgb3VyIGZpcnN0IGFsbG9jYXRpb24uCisJICogQ3JlYXRlIGEgc2VjdGlvbiBuYW1lIHN0cmluZyB0byBnbyBpbnRvIHRoZSBzdHJpbmcgdGFibGUgLiAqLworCWlmIChkbHRoaXMtPnRyYW1wLnRyYW1wX3NlY3RfbmV4dF9hZGRyID09IDApIHsKKwkJZGxvYWRfc3ltc19lcnJvcihkbHRoaXMtPm15c3ltLCAiKioqIFdBUk5JTkcgKioqICBjcmVhdGVkICIKKwkJCQkgImR5bmFtaWMgVFJBTVBPTElORSBzZWN0aW9uIGZvciBtb2R1bGUgJXMiLAorCQkJCSBkbHRoaXMtPnN0cl9oZWFkKTsKKwl9CisKKwkvKiAgUmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIG5ldyB0cmFtcG9saW5lICovCisJcmV0X3ZhbCA9IGRsdGhpcy0+dHJhbXAudHJhbXBfc2VjdF9uZXh0X2FkZHI7CisJZGx0aGlzLT50cmFtcC50cmFtcF9zZWN0X25leHRfYWRkciArPSB0cmFtcF9zaXplOworCXJldHVybiByZXRfdmFsOworfQorCisvKgorICogRnVuY3Rpb246CXByaXZfdHJhbXBfc3ltX2NyZWF0ZQorICogRGVzY3JpcHRpb246IEFsbG9jYXRlIGFuZCBjcmVhdGUgYSBuZXcgdHJhbXBvbGluZSBzcGVjaWZpYyBzeW1ib2wgYW5kIGFkZAorICoJICBpdCB0byB0aGUgdHJhbXBvbGluZSBzeW1ib2wgbGlzdC4gIFRoZXNlIHN5bWJvbHMgd2lsbCBpbmNsdWRlCisgKgkgIHRyYW1wb2xpbmUgcG9pbnRzIGFzIHdlbGwgYXMgdGhlIGV4dGVybmFsIHN5bWJvbHMgdGhleQorICoJICByZWZlcmVuY2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdHJhbXBfc3ltICpwcml2X3RyYW1wX3N5bV9jcmVhdGUoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsCisJCQkJCSAgICAgICB1MzIgc3RyX2luZGV4LAorCQkJCQkgICAgICAgc3RydWN0IGxvY2FsX3N5bWJvbCAqdG1wX3N5bSkKK3sKKwlzdHJ1Y3QgdHJhbXBfc3ltICpuZXdfc3ltID0gTlVMTDsKKwl1MzIgaTsKKworCS8qICBBbGxvY2F0ZSBuZXcgc3BhY2UgZm9yIHRoZSBzeW1ib2wgaW4gdGhlIHN5bWJvbCB0YWJsZS4gKi8KKwluZXdfc3ltID0KKwkgICAgKHN0cnVjdCB0cmFtcF9zeW0gKilkbHRoaXMtPm15c3ltLT5kbG9hZF9hbGxvY2F0ZShkbHRoaXMtPm15c3ltLAorCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IHRyYW1wX3N5bSkpOworCWlmIChuZXdfc3ltICE9IE5VTEwpIHsKKwkJZm9yIChpID0gMDsgaSAhPSBzaXplb2Yoc3RydWN0IHRyYW1wX3N5bSk7IGkrKykKKwkJCSooKGNoYXIgKiluZXdfc3ltICsgaSkgPSAwOworCisJCS8qICBBc3NpZ24gdGhpcyBzeW1ib2wgdGhlIG5leHQgc3ltYm9sIGluZGV4IGZvciBlYXNpZXIKKwkJICogcmVmZXJlbmNlIGxhdGVyIGR1cmluZyByZWxvY2F0aW9uLiAqLworCQluZXdfc3ltLT5pbmRleCA9IGRsdGhpcy0+dHJhbXAudHJhbXBfc3ltX25leHRfaW5kZXg7CisJCWRsdGhpcy0+dHJhbXAudHJhbXBfc3ltX25leHRfaW5kZXgrKzsKKworCQkvKiAgUG9wdWxhdGUgdGhlIHN5bWJvbCBpbmZvcm1hdGlvbi4gIEF0IHRoaXMgcG9pbnQgYW55CisJCSAqIHRyYW1wb2xpbmUgc3ltYm9scyB3aWxsIGJlIHRoZSBvZmZzZXQgbG9jYXRpb24sIG5vdCB0aGUKKwkJICogZmluYWwuICBDb3B5IG92ZXIgdGhlIHN5bWJvbCBpbmZvIHRvIHN0YXJ0LCB0aGVuIGJlIHN1cmUgdG8KKwkJICogZ2V0IHRoZSBzdHJpbmcgaW5kZXggZnJvbSB0aGUgdHJhbXBvbGluZSBzdHJpbmcgdGFibGUuICovCisJCW5ld19zeW0tPnN5bV9pbmZvID0gKnRtcF9zeW07CisJCW5ld19zeW0tPnN0cl9pbmRleCA9IHN0cl9pbmRleDsKKworCQkvKiAgUHVzaCB0aGUgbmV3IHN5bWJvbCB0byB0aGUgdGFpbCBvZiB0aGUgc3ltYm9sIHRhYmxlIGxpc3QgKi8KKwkJbmV3X3N5bS0+bmV4dCA9IE5VTEw7CisJCWlmIChkbHRoaXMtPnRyYW1wLnN5bWJvbF9oZWFkID09IE5VTEwpCisJCQlkbHRoaXMtPnRyYW1wLnN5bWJvbF9oZWFkID0gbmV3X3N5bTsKKwkJZWxzZQorCQkJZGx0aGlzLT50cmFtcC5zeW1ib2xfdGFpbC0+bmV4dCA9IG5ld19zeW07CisKKwkJZGx0aGlzLT50cmFtcC5zeW1ib2xfdGFpbCA9IG5ld19zeW07CisJfQorCisJcmV0dXJuIG5ld19zeW07Cit9CisKKy8qCisgKiBGdW5jdGlvbjoJcHJpdl90cmFtcF9zeW1fZ2V0CisgKiBEZXNjcmlwdGlvbjogU2VhcmNoIGZvciB0aGUgc3ltYm9sIHdpdGggdGhlIG1hdGNoaW5nIHN0cmluZyBpbmRleCAoZnJvbQorICoJICB0aGUgdHJhbXBvbGluZSBzdHJpbmcgdGFibGUpIGFuZCByZXR1cm4gdGhlIHRyYW1wb2xpbmUKKyAqCSAgc3ltYm9sIG9iamVjdCwgaWYgZm91bmQuICBPdGhlcndpc2UgcmV0dXJuIE5VTEwuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdHJhbXBfc3ltICpwcml2X3RyYW1wX3N5bV9nZXQoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsCisJCQkJCSAgICB1MzIgc3RyaW5nX2luZGV4KQoreworCXN0cnVjdCB0cmFtcF9zeW0gKnN5bV9mb3VuZCA9IE5VTEw7CisKKwkvKiAgV2FsayB0aGUgc3ltYm9sIHRhYmxlIGxpc3QgYW5kIHNlYXJjaCB2cy4gdGhlIHN0cmluZyBpbmRleCAqLworCWZvciAoc3ltX2ZvdW5kID0gZGx0aGlzLT50cmFtcC5zeW1ib2xfaGVhZDsKKwkgICAgIHN5bV9mb3VuZCAhPSBOVUxMOyBzeW1fZm91bmQgPSBzeW1fZm91bmQtPm5leHQpIHsKKwkJaWYgKHN5bV9mb3VuZC0+c3RyX2luZGV4ID09IHN0cmluZ19pbmRleCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBzeW1fZm91bmQ7Cit9CisKKy8qCisgKiBGdW5jdGlvbjoJcHJpdl90cmFtcF9zeW1fZmluZAorICogRGVzY3JpcHRpb246IFNlYXJjaCBmb3IgYSB0cmFtcG9saW5lIHN5bWJvbCBiYXNlZCBvbiB0aGUgc3RyaW5nIG5hbWUgb2YKKyAqCSAgdGhlIHN5bWJvbC4gIFJldHVybiB0aGUgc3ltYm9sIG9iamVjdCwgaWYgZm91bmQsIG90aGVyd2lzZQorICoJICByZXR1cm4gTlVMTC4KKyAqLworc3RhdGljIHN0cnVjdCB0cmFtcF9zeW0gKnByaXZfdHJhbXBfc3ltX2ZpbmQoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsCisJCQkJCSAgICAgY2hhciAqc3RyaW5nKQoreworCXN0cnVjdCB0cmFtcF9zeW0gKnN5bV9mb3VuZCA9IE5VTEw7CisJc3RydWN0IHRyYW1wX3N0cmluZyAqc3RyX2ZvdW5kID0gTlVMTDsKKworCS8qICBGaXJzdCwgc2VhcmNoIGZvciB0aGUgc3RyaW5nLCB0aGVuIHNlYXJjaCBmb3IgdGhlIHN5bSBiYXNlZCBvbiB0aGUKKwkgICBzdHJpbmcgaW5kZXguICovCisJc3RyX2ZvdW5kID0gcHJpdl90cmFtcF9zdHJpbmdfZmluZChkbHRoaXMsIHN0cmluZyk7CisJaWYgKHN0cl9mb3VuZCAhPSBOVUxMKQorCQlzeW1fZm91bmQgPSBwcml2X3RyYW1wX3N5bV9nZXQoZGx0aGlzLCBzdHJfZm91bmQtPmluZGV4KTsKKworCXJldHVybiBzeW1fZm91bmQ7Cit9CisKKy8qCisgKiBGdW5jdGlvbjoJcHJpdl90cmFtcF9zeW1fZmluYWxpemUKKyAqIERlc2NyaXB0aW9uOiBBbGxvY2F0ZSBhIGZsYXQgc3ltYm9sIHRhYmxlIGZvciB0aGUgdHJhbXBvbGluZSBzZWN0aW9uLAorICoJICBwdXQgZWFjaCB0cmFtcG9saW5lIHN5bWJvbCBpbnRvIHRoZSB0YWJsZSwgYWRqdXN0IHRoZQorICoJICBzeW1ib2wgdmFsdWUgYmFzZWQgb24gdGhlIHNlY3Rpb24gYWRkcmVzcyBvbiB0aGUgdGFyZ2V0IGFuZAorICoJICBmcmVlIHRoZSB0cmFtcG9saW5lIHN5bWJvbCBsaXN0IG5vZGVzLgorICovCitzdGF0aWMgaW50IHByaXZfdHJhbXBfc3ltX2ZpbmFsaXplKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzKQoreworCWludCByZXRfdmFsID0gMDsKKwlzdHJ1Y3QgdHJhbXBfc3ltICpjdXJfc3ltOworCXN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICp0cmFtcF9zZWN0ID0KKwkgICAgJmRsdGhpcy0+bGRyX3NlY3Rpb25zW2RsdGhpcy0+YWxsb2NhdGVkX3NlY25fY291bnRdOworCXN0cnVjdCBsb2NhbF9zeW1ib2wgKm5ld19zeW07CisKKwkvKiAgQWxsb2NhdGUgYSB0YWJsZSB0byBob2xkIGEgZmxhdHRlbmVkIHZlcnNpb24gb2YgYWxsIHN5bWJvbHMKKwkgKiBjcmVhdGVkLiAqLworCWRsdGhpcy0+dHJhbXAuZmluYWxfc3ltX3RhYmxlID0KKwkgICAgKHN0cnVjdCBsb2NhbF9zeW1ib2wgKilkbHRoaXMtPm15c3ltLT5kbG9hZF9hbGxvY2F0ZShkbHRoaXMtPm15c3ltLAorCQkJCSAoc2l6ZW9mKHN0cnVjdCBsb2NhbF9zeW1ib2wpICogZGx0aGlzLT50cmFtcC4KKwkJCQkJCSAgdHJhbXBfc3ltX25leHRfaW5kZXgpKTsKKwlpZiAoZGx0aGlzLT50cmFtcC5maW5hbF9zeW1fdGFibGUgIT0gTlVMTCkgeworCQkvKiAgV2FsayB0aGUgbGlzdCBvZiBhbGwgc3ltYm9scywgY29weSBpdCBvdmVyIHRvIHRoZSBmbGF0dGVuZWQKKwkJICogdGFibGUuIEFmdGVyIGl0IGhhcyBiZWVuIGNvcGllZCwgdGhlIG5vZGUgY2FuIGJlIGZyZWVkIGFzCisJCSAqIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuICovCisJCW5ld19zeW0gPSBkbHRoaXMtPnRyYW1wLmZpbmFsX3N5bV90YWJsZTsKKwkJY3VyX3N5bSA9IGRsdGhpcy0+dHJhbXAuc3ltYm9sX2hlYWQ7CisJCXdoaWxlIChjdXJfc3ltICE9IE5VTEwpIHsKKwkJCS8qICBQb3AgaXQgb2ZmIHRoZSBsaXN0ICovCisJCQlkbHRoaXMtPnRyYW1wLnN5bWJvbF9oZWFkID0gY3VyX3N5bS0+bmV4dDsKKwkJCWlmIChjdXJfc3ltID09IGRsdGhpcy0+dHJhbXAuc3ltYm9sX3RhaWwpCisJCQkJZGx0aGlzLT50cmFtcC5zeW1ib2xfdGFpbCA9IE5VTEw7CisKKwkJCS8qICBDb3B5IHRoZSBzeW1ib2wgY29udGVudHMgaW50byB0aGUgZmxhdCB0YWJsZSAqLworCQkJKm5ld19zeW0gPSBjdXJfc3ltLT5zeW1faW5mbzsKKworCQkJLyogIE5vdyBmaW5haXplIHRoZSBzeW1ib2wuICBJZiBpdCBpcyBpbiB0aGUgdHJhbXAKKwkJCSAqIHNlY3Rpb24sIHdlIG5lZWQgdG8gYWRqdXN0IGZvciB0aGUgc2VjdGlvbiBzdGFydC4KKwkJCSAqIElmIGl0IGlzIGV4dGVybmFsIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBhZGp1c3QgYXQKKwkJCSAqIGFsbC4KKwkJCSAqIE5PVEU6IFRISVMgQ09ERSBBU1NVTUVTIFRIQVQgVEhFIFRSQU1QT0xJTkUgSVMKKwkJCSAqIFJFRkVSRU5DRUQgTElLRSBBIENBTEwgVE8gQU4gRVhURVJOQUwgU08gVkFMVUUgQU5ECisJCQkgKiBERUxUQSBBUkUgVEhFIFNBTUUuICBTRUUgVEhFIEZVTkNUSU9OIGRsb2FkX3N5bWJvbHMKKwkJCSAqIFdIRVJFIEROX1VOREVGIElTIEhBTkRMRUQgRk9SIE1PUkUgUkVGRVJFTkNFLiAqLworCQkJaWYgKG5ld19zeW0tPnNlY25uIDwgMCkgeworCQkJCW5ld19zeW0tPnZhbHVlICs9IHRyYW1wX3NlY3QtPmxvYWRfYWRkcjsKKwkJCQluZXdfc3ltLT5kZWx0YSA9IG5ld19zeW0tPnZhbHVlOworCQkJfQorCisJCQkvKiAgTGV0IGdvIG9mIHRoZSBzeW1ib2wgbm9kZSAqLworCQkJZGx0aGlzLT5teXN5bS0+ZGxvYWRfZGVhbGxvY2F0ZShkbHRoaXMtPm15c3ltLCBjdXJfc3ltKTsKKworCQkJLyogIE1vdmUgdG8gdGhlIG5leHQgbm9kZSAqLworCQkJY3VyX3N5bSA9IGRsdGhpcy0+dHJhbXAuc3ltYm9sX2hlYWQ7CisJCQluZXdfc3ltKys7CisJCX0KKworCQlyZXRfdmFsID0gMTsKKwl9IGVsc2UKKwkJZGxvYWRfZXJyb3IoZGx0aGlzLCAiRmFpbGVkIHRvIGFsbG9jIHRyYW1wb2xpbmUgc3ltIHRhYmxlIik7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoKKyAqIEZ1bmN0aW9uOglwcml2X3RndF9pbWdfZ2VuCisgKiBEZXNjcmlwdGlvbjogQWxsb2NhdGUgc3RvcmFnZSBmb3IgYW5kIGNvcHkgdGhlIHRhcmdldCBzcGVjaWZpYyBpbWFnZSBkYXRhCisgKglhbmQgZml4IHVwIGl0cyByZWxvY2F0aW9ucyBmb3IgdGhlIG5ldyBleHRlcm5hbCBzeW1ib2wuICBJZgorICoJYSB0cmFtcG9saW5lIGltYWdlIHBhY2tldCB3YXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgaXQgaXMgYWRkZWQKKyAqCXRvIHRoZSB0cmFtcG9saW5lIGxpc3QuCisgKi8KK3N0YXRpYyBpbnQgcHJpdl90Z3RfaW1nX2dlbihzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcywgdTMyIGJhc2UsCisJCQkgICAgdTMyIGdlbl9pbmRleCwgc3RydWN0IHRyYW1wX3N5bSAqbmV3X2V4dF9zeW0pCit7CisJc3RydWN0IHRyYW1wX2ltZ19wa3QgKm5ld19pbWdfcGt0ID0gTlVMTDsKKwl1MzIgaTsKKwl1MzIgcGt0X3NpemUgPSB0cmFtcF9pbWdfcGt0X3NpemVfZ2V0KCk7CisJdTggKmdlbl90YmxfZW50cnk7CisJdTggKnBrdF9kYXRhOworCXN0cnVjdCByZWxvY19yZWNvcmRfdCAqY3VyX3JlbG87CisJaW50IHJldF92YWwgPSAwOworCisJLyogIEFsbG9jYXRlIGEgbmV3IGltYWdlIHBhY2tldCBhbmQgc2V0IGl0IHVwLiAqLworCW5ld19pbWdfcGt0ID0KKwkgICAgKHN0cnVjdCB0cmFtcF9pbWdfcGt0ICopZGx0aGlzLT5teXN5bS0+ZGxvYWRfYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwKKwkJCQkJCQkJICBwa3Rfc2l6ZSk7CisJaWYgKG5ld19pbWdfcGt0ICE9IE5VTEwpIHsKKwkJLyogIFNhdmUgdGhlIGJhc2UsIHRoaXMgaXMgd2hlcmUgaXQgZ29lcyBpbiB0aGUgc2VjdGlvbiAqLworCQluZXdfaW1nX3BrdC0+YmFzZSA9IGJhc2U7CisKKwkJLyogIENvcHkgb3ZlciB0aGUgaW1hZ2UgZGF0YSBhbmQgcmVsb3MgZnJvbSB0aGUgdGFyZ2V0IHRhYmxlICovCisJCXBrdF9kYXRhID0gKHU4ICopICZuZXdfaW1nX3BrdC0+aGRyOworCQlnZW5fdGJsX2VudHJ5ID0gKHU4ICopICZ0cmFtcF9nZW5faW5mb1tnZW5faW5kZXhdOworCQlmb3IgKGkgPSAwOyBpIDwgcGt0X3NpemU7IGkrKykgeworCQkJKnBrdF9kYXRhID0gKmdlbl90YmxfZW50cnk7CisJCQlwa3RfZGF0YSsrOworCQkJZ2VuX3RibF9lbnRyeSsrOworCQl9CisKKwkJLyogIFVwZGF0ZSB0aGUgcmVsb2NhdGlvbnMgdG8gcG9pbnQgdG8gdGhlIGV4dGVybmFsIHN5bWJvbCAqLworCQljdXJfcmVsbyA9CisJCSAgICAoc3RydWN0IHJlbG9jX3JlY29yZF90ICopKCh1OCAqKSAmbmV3X2ltZ19wa3QtPmhkciArCisJCQkJCSAgICAgIG5ld19pbWdfcGt0LT5oZHIucmVsb19vZmZzZXQpOworCQlmb3IgKGkgPSAwOyBpIDwgbmV3X2ltZ19wa3QtPmhkci5udW1fcmVsb3M7IGkrKykKKwkJCWN1cl9yZWxvW2ldLlNZTU5EWCA9IG5ld19leHRfc3ltLT5pbmRleDsKKworCQkvKiAgQWRkIGl0IHRvIHRoZSB0cmFtcG9saW5lIGxpc3QuICovCisJCW5ld19pbWdfcGt0LT5uZXh0ID0gZGx0aGlzLT50cmFtcC50cmFtcF9wa3RzOworCQlkbHRoaXMtPnRyYW1wLnRyYW1wX3BrdHMgPSBuZXdfaW1nX3BrdDsKKworCQlyZXRfdmFsID0gMTsKKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoKKyAqIEZ1bmN0aW9uOglwcml2X3BrdF9yZWxvCisgKiBEZXNjcmlwdGlvbjogVGFrZSB0aGUgcHJvdmlkZWQgaW1hZ2UgZGF0YSBhbmQgdGhlIGNvbGxlY3Rpb24gb2YgcmVsb2NhdGlvbnMKKyAqCSAgZm9yIGl0IGFuZCBwZXJmb3JtIHRoZSByZWxvY2F0aW9ucy4gIE5vdGUgdGhhdCBhbGwgcmVsb2NhdGlvbnMKKyAqCSAgYXQgdGhpcyBzdGFnZSBhcmUgY29uc2lkZXJlZCBTRUNPTkQgUEFTUyBzaW5jZSB0aGUgb3JpZ2luYWwKKyAqCSAgaW1hZ2UgaGFzIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQgaW4gdGhlIGZpcnN0IHBhc3MuICBUaGlzIG1lYW5zCisgKgkgIFRSQU1QT0xJTkVTIEFSRSBUUkVBVEVEIEFTIDJORCBQQVNTIGV2ZW4gdGhvdWdoIHRoaXMgaXMgcmVhbGx5CisgKgkgIHRoZSBmaXJzdCAoYW5kIG9ubHkpIHJlbG9jYXRpb24gdGhhdCB3aWxsIGJlIHBlcmZvcm1lZCBvbiB0aGVtLgorICovCitzdGF0aWMgaW50IHByaXZfcGt0X3JlbG8oc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsIHRndF9hdV90ICogZGF0YSwKKwkJCSBzdHJ1Y3QgcmVsb2NfcmVjb3JkX3QgKnJwW10sIHUzMiByZWxvX2NvdW50KQoreworCWludCByZXRfdmFsID0gMTsKKwl1MzIgaTsKKwlib29sIHRtcDsKKworCS8qICBXYWxrIHRocm91Z2ggYWxsIG9mIHRoZSByZWxvcyBhbmQgcHJvY2VzcyB0aGVtLiAgVGhpcyBmdW5jdGlvbiBpcworCSAqIHRoZSBlcXVpdmFsZW50IG9mIHJlbG9jYXRlX3BhY2tldCgpIGZyb20gY2xvYWQuYywgYnV0IHNwZWNpYWxpemVkCisJICogZm9yIHRyYW1wb2xpbmVzIGFuZCAybmQgcGhhc2UgcmVsb2NhdGlvbnMuICovCisJZm9yIChpID0gMDsgaSA8IHJlbG9fY291bnQ7IGkrKykKKwkJZGxvYWRfcmVsb2NhdGUoZGx0aGlzLCBkYXRhLCBycFtpXSwgJnRtcCwgdHJ1ZSk7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoKKyAqIEZ1bmN0aW9uOglwcml2X3RyYW1wX3BrdF9maW5hbGl6ZQorICogRGVzY3JpcHRpb246IFdhbGsgdGhlIGxpc3Qgb2YgYWxsIHRyYW1wb2xpbmUgcGFja2V0cyBhbmQgZmluYWxpemUgdGhlbS4KKyAqCSAgRWFjaCB0cmFtcG9saW5lIGltYWdlIHBhY2tldCB3aWxsIGJlIHJlbG9jYXRlZCBub3cgdGhhdCB0aGUKKyAqCSAgdHJhbXBvbGluZSBzZWN0aW9uIGhhcyBiZWVuIGFsbG9jYXRlZCBvbiB0aGUgdGFyZ2V0LiAgT25jZQorICoJICBhbGwgb2YgdGhlIHJlbG9jYXRpb25zIGFyZSBkb25lIHRoZSB0cmFtcG9saW5lIGltYWdlIGRhdGEKKyAqCSAgaXMgd3JpdHRlbiBpbnRvIHRhcmdldCBtZW1vcnkgYW5kIHRoZSB0cmFtcG9saW5lIHBhY2tldAorICoJICBpcyBmcmVlZDogaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZCBhZnRlciB0aGlzIHBvaW50LgorICovCitzdGF0aWMgaW50IHByaXZfdHJhbXBfcGt0X2ZpbmFsaXplKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzKQoreworCWludCByZXRfdmFsID0gMTsKKwlzdHJ1Y3QgdHJhbXBfaW1nX3BrdCAqY3VyX3BrdCA9IE5VTEw7CisJc3RydWN0IHJlbG9jX3JlY29yZF90ICpyZWxvc1tNQVhfUkVMT1NfUEVSX1BBU1NdOworCXUzMiByZWxvc19kb25lOworCXUzMiBpOworCXN0cnVjdCByZWxvY19yZWNvcmRfdCAqY3VyX3JlbG87CisJc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKnNlY3RfaW5mbyA9CisJICAgICZkbHRoaXMtPmxkcl9zZWN0aW9uc1tkbHRoaXMtPmFsbG9jYXRlZF9zZWNuX2NvdW50XTsKKworCS8qICBXYWxrIHRoZSBsaXN0IG9mIHRyYW1wb2xpbmUgcGFja2V0cyBhbmQgcmVsb2NhdGUgZWFjaCBwYWNrZXQuICBUaGlzCisJICogZnVuY3Rpb24gaXMgdGhlIHRyYW1wb2xpbmUgZXF1aXZhbGVudCBvZiBkbG9hZF9kYXRhKCkgZnJvbQorCSAqIGNsb2FkLmMuICovCisJY3VyX3BrdCA9IGRsdGhpcy0+dHJhbXAudHJhbXBfcGt0czsKKwl3aGlsZSAoKHJldF92YWwgIT0gMCkgJiYgKGN1cl9wa3QgIT0gTlVMTCkpIHsKKwkJLyogIFJlbW92ZSB0aGUgcGt0IGZyb20gdGhlIGxpc3QgKi8KKwkJZGx0aGlzLT50cmFtcC50cmFtcF9wa3RzID0gY3VyX3BrdC0+bmV4dDsKKworCQkvKiAgU2V0dXAgc2VjdGlvbiBhbmQgaW1hZ2Ugb2Zmc2V0IGluZm9ybWF0aW9uIGZvciB0aGUgcmVsbyAqLworCQlkbHRoaXMtPmltYWdlX3NlY24gPSBzZWN0X2luZm87CisJCWRsdGhpcy0+aW1hZ2Vfb2Zmc2V0ID0gY3VyX3BrdC0+YmFzZTsKKwkJZGx0aGlzLT5kZWx0YV9ydW5hZGRyID0gc2VjdF9pbmZvLT5ydW5fYWRkcjsKKworCQkvKiAgV2FsayB0aHJvdWdoIGFsbCByZWxvcyBmb3IgdGhlIHBhY2tldCAqLworCQlyZWxvc19kb25lID0gMDsKKwkJY3VyX3JlbG8gPSAoc3RydWN0IHJlbG9jX3JlY29yZF90ICopKCh1OCAqKSAmY3VyX3BrdC0+aGRyICsKKwkJCQkJCSAgICAgY3VyX3BrdC0+aGRyLnJlbG9fb2Zmc2V0KTsKKwkJd2hpbGUgKHJlbG9zX2RvbmUgPCBjdXJfcGt0LT5oZHIubnVtX3JlbG9zKSB7CisjaWZkZWYgRU5BQkxFX1RSQU1QX0RFQlVHCisJCQlkbG9hZF9zeW1zX2Vycm9yKGRsdGhpcy0+bXlzeW0sCisJCQkJCSAiPT09PiBUcmFtcG9saW5lICV4IGJyYW5jaGVzIHRvICV4IiwKKwkJCQkJIHNlY3RfaW5mby0+cnVuX2FkZHIgKworCQkJCQkgZGx0aGlzLT5pbWFnZV9vZmZzZXQsCisJCQkJCSBkbHRoaXMtPgorCQkJCQkgdHJhbXAuZmluYWxfc3ltX3RhYmxlW2N1cl9yZWxvLT4KKwkJCQkJCQkgICAgICAgU1lNTkRYXS52YWx1ZSk7CisjZW5kaWYKKworCQkJZm9yIChpID0gMDsKKwkJCSAgICAgKChpIDwgTUFYX1JFTE9TX1BFUl9QQVNTKSAmJgorCQkJICAgICAgKChpICsgcmVsb3NfZG9uZSkgPCBjdXJfcGt0LT5oZHIubnVtX3JlbG9zKSk7IGkrKykKKwkJCQlyZWxvc1tpXSA9IGN1cl9yZWxvICsgaTsKKworCQkJLyogIERvIHRoZSBhY3R1YWwgcmVsbyAqLworCQkJcmV0X3ZhbCA9IHByaXZfcGt0X3JlbG8oZGx0aGlzLAorCQkJCQkJKHRndF9hdV90ICopICZjdXJfcGt0LT5wYXlsb2FkLAorCQkJCQkJcmVsb3MsIGkpOworCQkJaWYgKHJldF92YWwgPT0gMCkgeworCQkJCWRsb2FkX2Vycm9yKGRsdGhpcywKKwkJCQkJICAgICJSZWxvY2F0aW9uIG9mIHRyYW1wb2xpbmUgcGt0IGF0ICV4IgorCQkJCQkgICAgIiBmYWlsZWQiLCBjdXJfcGt0LT5iYXNlICsKKwkJCQkJICAgIHNlY3RfaW5mby0+cnVuX2FkZHIpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlyZWxvc19kb25lICs9IGk7CisJCQljdXJfcmVsbyArPSBpOworCQl9CisKKwkJLyogIE1ha2Ugc3VyZSB3ZSBkaWRuJ3QgaGl0IGEgcHJvYmxlbSAqLworCQlpZiAocmV0X3ZhbCAhPSAwKSB7CisJCQkvKiAgUmVsb3MgYXJlIGRvbmUgZm9yIHRoZSBwYWNrZXQsIHdyaXRlIGl0IHRvIHRoZQorCQkJICogdGFyZ2V0ICovCisJCQlyZXRfdmFsID0gZGx0aGlzLT5teWlvLT53cml0ZW1lbShkbHRoaXMtPm15aW8sCisJCQkJCQkJICZjdXJfcGt0LT5wYXlsb2FkLAorCQkJCQkJCSBzZWN0X2luZm8tPmxvYWRfYWRkciArCisJCQkJCQkJIGN1cl9wa3QtPmJhc2UsCisJCQkJCQkJIHNlY3RfaW5mbywKKwkJCQkJCQkgQllURV9UT19IT1NUCisJCQkJCQkJIChjdXJfcGt0LT5oZHIuCisJCQkJCQkJICB0cmFtcF9jb2RlX3NpemUpKTsKKwkJCWlmIChyZXRfdmFsID09IDApIHsKKwkJCQlkbG9hZF9lcnJvcihkbHRoaXMsCisJCQkJCSAgICAiV3JpdGUgdG8gIiBGTVRfVUkzMiAiIGZhaWxlZCIsCisJCQkJCSAgICBzZWN0X2luZm8tPmxvYWRfYWRkciArCisJCQkJCSAgICBjdXJfcGt0LT5iYXNlKTsKKwkJCX0KKworCQkJLyogIERvbmUgd2l0aCB0aGUgcGt0LCBsZXQgaXQgZ28gKi8KKwkJCWRsdGhpcy0+bXlzeW0tPmRsb2FkX2RlYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwgY3VyX3BrdCk7CisKKwkJCS8qICBHZXQgdGhlIG5leHQgcGFja2V0IHRvIHByb2Nlc3MgKi8KKwkJCWN1cl9wa3QgPSBkbHRoaXMtPnRyYW1wLnRyYW1wX3BrdHM7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoKKyAqIEZ1bmN0aW9uOglwcml2X2R1cF9wa3RfZmluYWxpemUKKyAqIERlc2NyaXB0aW9uOiBXYWxrIHRoZSBsaXN0IG9mIGR1cGxpY2F0ZSBpbWFnZSBwYWNrZXRzIGFuZCBmaW5hbGl6ZSB0aGVtLgorICoJICBFYWNoIGR1cGxpY2F0ZSBwYWNrZXQgd2lsbCBiZSByZWxvY2F0ZWQgYWdhaW4gZm9yIHRoZQorICoJICByZWxvY2F0aW9ucyB0aGF0IHByZXZpb3VzbHkgZmFpbGVkIGFuZCBoYXZlIGJlZW4gYWRqdXN0ZWQKKyAqCSAgdG8gcG9pbnQgYXQgYSB0cmFtcG9saW5lLiAgT25jZSBhbGwgcmVsb2NhdGlvbnMgZm9yIGEgcGFja2V0CisgKgkgIGhhdmUgYmVlbiBkb25lLCB3cml0ZSB0aGUgcGFja2V0IGludG8gdGFyZ2V0IG1lbW9yeS4gIFRoZQorICoJICBkdXBsaWNhdGUgcGFja2V0IGFuZCBpdHMgcmVsb2NhdGlvbiBjaGFpbiBhcmUgYWxsIGZyZWVkCisgKgkgIGFmdGVyIHVzZSBoZXJlIGFzIHRoZXkgYXJlIG5vIGxvbmdlciBuZWVkZWQgYWZ0ZXIgdGhpcy4KKyAqLworc3RhdGljIGludCBwcml2X2R1cF9wa3RfZmluYWxpemUoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMpCit7CisJaW50IHJldF92YWwgPSAxOworCXN0cnVjdCB0cmFtcF9pbWdfZHVwX3BrdCAqY3VyX3BrdDsKKwlzdHJ1Y3QgdHJhbXBfaW1nX2R1cF9yZWxvICpjdXJfcmVsbzsKKwlzdHJ1Y3QgcmVsb2NfcmVjb3JkX3QgKnJlbG9zW01BWF9SRUxPU19QRVJfUEFTU107CisJc3RydWN0IGRvZmZfc2NuaGRyX3QgKnNlY3RfaGRyID0gTlVMTDsKKwlzMzIgaTsKKworCS8qIFNpbWlsYXIgdG8gdGhlIHRyYW1wb2xpbmUgcGt0IGZpbmFsaXplLCB0aGlzIGZ1bmN0aW9uIHdhbGtzIGVhY2ggZHVwCisJICogcGt0IHRoYXQgd2FzIGdlbmVyYXRlZCBhbmQgcGVyZm9ybXMgYWxsIHJlbG9jYXRpb25zIHRoYXQgd2VyZQorCSAqIGRlZmVycmVkIHRvIGEgMm5kIHBhc3MuICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIGRsb2FkX2RhdGEoKSBmcm9tCisJICogY2xvYWQuYywgYnV0IGRvZXMgbm90IG5lZWQgdGhlIGFkZGl0aW9uYWwgcmVvcmRlciBhbmQgY2hlY2tzdW0KKwkgKiBwcm9jZXNzaW5nIGFzIGl0IGhhcyBhbHJlYWR5IGJlZW4gZG9uZS4gKi8KKwljdXJfcGt0ID0gZGx0aGlzLT50cmFtcC5kdXBfcGt0czsKKwl3aGlsZSAoKHJldF92YWwgIT0gMCkgJiYgKGN1cl9wa3QgIT0gTlVMTCkpIHsKKwkJLyogIFJlbW92ZSB0aGUgbm9kZSBmcm9tIHRoZSBsaXN0LCB3ZSdsbCBiZSBmcmVlaW5nIGl0CisJCSAqIHNob3J0bHkgKi8KKwkJZGx0aGlzLT50cmFtcC5kdXBfcGt0cyA9IGN1cl9wa3QtPm5leHQ7CisKKwkJLyogIFNldHVwIHRoZSBzZWN0aW9uIGFuZCBpbWFnZSBvZmZzZXQgZm9yIHJlbG9jYXRpb24gKi8KKwkJZGx0aGlzLT5pbWFnZV9zZWNuID0gJmRsdGhpcy0+bGRyX3NlY3Rpb25zW2N1cl9wa3QtPnNlY25uXTsKKwkJZGx0aGlzLT5pbWFnZV9vZmZzZXQgPSBjdXJfcGt0LT5vZmZzZXQ7CisKKwkJLyogIEluIG9yZGVyIHRvIGdldCB0aGUgZGVsdGEgcnVuIGFkZHJlc3MsIHdlIG5lZWQgdG8gcmVmZXJlbmNlCisJCSAqIHRoZSBvcmlnaW5hbCBzZWN0aW9uIGhlYWRlci4gIEl0J3MgYSBiaXQgdWdseSwgYnV0IG5lZWRlZAorCQkgKiBmb3IgcmVsby4gKi8KKwkJaSA9IChzMzIpIChkbHRoaXMtPmltYWdlX3NlY24gLSBkbHRoaXMtPmxkcl9zZWN0aW9ucyk7CisJCXNlY3RfaGRyID0gZGx0aGlzLT5zZWN0X2hkcnMgKyBpOworCQlkbHRoaXMtPmRlbHRhX3J1bmFkZHIgPSBzZWN0X2hkci0+ZHNfcGFkZHI7CisKKwkJLyogIFdhbGsgYWxsIHJlbG9zIGluIHRoZSBjaGFpbiBhbmQgcHJvY2VzcyBlYWNoLiAqLworCQljdXJfcmVsbyA9IGN1cl9wa3QtPnJlbG9fY2hhaW47CisJCXdoaWxlIChjdXJfcmVsbyAhPSBOVUxMKSB7CisJCQkvKiAgUHJvY2VzcyB0aGVtIGEgY2h1bmsgYXQgYSB0aW1lIHRvIGJlIGVmZmljaWVudCAqLworCQkJZm9yIChpID0gMDsgKGkgPCBNQVhfUkVMT1NfUEVSX1BBU1MpCisJCQkgICAgICYmIChjdXJfcmVsbyAhPSBOVUxMKTsKKwkJCSAgICAgaSsrLCBjdXJfcmVsbyA9IGN1cl9yZWxvLT5uZXh0KSB7CisJCQkJcmVsb3NbaV0gPSAmY3VyX3JlbG8tPnJlbG87CisJCQkJY3VyX3BrdC0+cmVsb19jaGFpbiA9IGN1cl9yZWxvLT5uZXh0OworCQkJfQorCisJCQkvKiAgRG8gdGhlIGFjdHVhbCByZWxvICovCisJCQlyZXRfdmFsID0gcHJpdl9wa3RfcmVsbyhkbHRoaXMsCisJCQkJCQljdXJfcGt0LT5pbWdfcGt0LmltZ19kYXRhLAorCQkJCQkJcmVsb3MsIGkpOworCQkJaWYgKHJldF92YWwgPT0gMCkgeworCQkJCWRsb2FkX2Vycm9yKGRsdGhpcywKKwkJCQkJICAgICJSZWxvY2F0aW9uIG9mIGR1cCBwa3QgYXQgJXgiCisJCQkJCSAgICAiIGZhaWxlZCIsIGN1cl9wa3QtPm9mZnNldCArCisJCQkJCSAgICBkbHRoaXMtPmltYWdlX3NlY24tPnJ1bl9hZGRyKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyogIFJlbGVhc2UgYWxsIG9mIHRoZXNlIHJlbG9zLCB3ZSdyZSBkb25lIHdpdGggdGhlbSAqLworCQkJd2hpbGUgKGkgPiAwKSB7CisJCQkJZGx0aGlzLT5teXN5bS0+ZGxvYWRfZGVhbGxvY2F0ZShkbHRoaXMtPm15c3ltLAorCQkJCQkJR0VUX0NPTlRBSU5FUgorCQkJCQkJKHJlbG9zW2kgLSAxXSwKKwkJCQkJCSBzdHJ1Y3QgdHJhbXBfaW1nX2R1cF9yZWxvLAorCQkJCQkJIHJlbG8pKTsKKwkJCQlpLS07CisJCQl9CisKKwkJCS8qICBETyBOT1QgQURWQU5DRSBjdXJfcmVsbywgSVQgSVMgQUxSRUFEWSBSRUFEWSBUTworCQkJICogR08hICovCisJCX0KKworCQkvKiBEb25lIHdpdGggYWxsIHJlbG9zLiAgTWFrZSBzdXJlIHdlIGRpZG4ndCBoYXZlIGEgcHJvYmxlbSBhbmQKKwkJICogd3JpdGUgaXQgb3V0IHRvIHRoZSB0YXJnZXQgKi8KKwkJaWYgKHJldF92YWwgIT0gMCkgeworCQkJcmV0X3ZhbCA9IGRsdGhpcy0+bXlpby0+d3JpdGVtZW0oZGx0aGlzLT5teWlvLAorCQkJCQkJCSBjdXJfcGt0LT5pbWdfcGt0LgorCQkJCQkJCSBpbWdfZGF0YSwKKwkJCQkJCQkgZGx0aGlzLT5pbWFnZV9zZWNuLT4KKwkJCQkJCQkgbG9hZF9hZGRyICsKKwkJCQkJCQkgY3VyX3BrdC0+b2Zmc2V0LAorCQkJCQkJCSBkbHRoaXMtPmltYWdlX3NlY24sCisJCQkJCQkJIEJZVEVfVE9fSE9TVAorCQkJCQkJCSAoY3VyX3BrdC0+aW1nX3BrdC4KKwkJCQkJCQkgIHBhY2tldF9zaXplKSk7CisJCQlpZiAocmV0X3ZhbCA9PSAwKSB7CisJCQkJZGxvYWRfZXJyb3IoZGx0aGlzLAorCQkJCQkgICAgIldyaXRlIHRvICIgRk1UX1VJMzIgIiBmYWlsZWQiLAorCQkJCQkgICAgZGx0aGlzLT5pbWFnZV9zZWNuLT5sb2FkX2FkZHIgKworCQkJCQkgICAgY3VyX3BrdC0+b2Zmc2V0KTsKKwkJCX0KKworCQkJZGx0aGlzLT5teXN5bS0+ZGxvYWRfZGVhbGxvY2F0ZShkbHRoaXMtPm15c3ltLCBjdXJfcGt0KTsKKworCQkJLyogIEFkdmFuY2UgdG8gdGhlIG5leHQgcGFja2V0ICovCisJCQljdXJfcGt0ID0gZGx0aGlzLT50cmFtcC5kdXBfcGt0czsKKwkJfQorCX0KKworCXJldHVybiByZXRfdmFsOworfQorCisvKgorICogRnVuY3Rpb246CXByaXZfZHVwX2ZpbmQKKyAqIERlc2NyaXB0aW9uOiBXYWxrIHRoZSBsaXN0IG9mIGV4aXN0aW5nIGR1cGxpY2F0ZSBwYWNrZXRzIGFuZCBmaW5kIGEKKyAqCSAgbWF0Y2ggYmFzZWQgb24gdGhlIHNlY3Rpb24gbnVtYmVyIGFuZCBpbWFnZSBvZmZzZXQuICBSZXR1cm4KKyAqCSAgdGhlIGR1cGxpY2F0ZSBwYWNrZXQgaWYgZm91bmQsIG90aGVyd2lzZSBOVUxMLgorICovCitzdGF0aWMgc3RydWN0IHRyYW1wX2ltZ19kdXBfcGt0ICpwcml2X2R1cF9maW5kKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzLAorCQkJCQkgICAgICAgczE2IHNlY25uLCB1MzIgaW1hZ2Vfb2Zmc2V0KQoreworCXN0cnVjdCB0cmFtcF9pbWdfZHVwX3BrdCAqY3VyX3BrdCA9IE5VTEw7CisKKwlmb3IgKGN1cl9wa3QgPSBkbHRoaXMtPnRyYW1wLmR1cF9wa3RzOworCSAgICAgY3VyX3BrdCAhPSBOVUxMOyBjdXJfcGt0ID0gY3VyX3BrdC0+bmV4dCkgeworCQlpZiAoKGN1cl9wa3QtPnNlY25uID09IHNlY25uKSAmJgorCQkgICAgKGN1cl9wa3QtPm9mZnNldCA9PSBpbWFnZV9vZmZzZXQpKSB7CisJCQkvKiAgRm91bmQgYSBtYXRjaCwgYnJlYWsgb3V0ICovCisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBjdXJfcGt0OworfQorCisvKgorICogRnVuY3Rpb246CXByaXZfaW1nX3BrdF9kdXAKKyAqIERlc2NyaXB0aW9uOiBEdXBsaWNhdGUgdGhlIG9yaWdpbmFsIGltYWdlIHBhY2tldC4gIElmIHRoaXMgaXMgdGhlIGZpcnN0CisgKgkgIHRpbWUgdGhpcyBpbWFnZSBwYWNrZXQgaGFzIGJlZW4gc2VlbiAoYmFzZWQgb24gc2VjdGlvbiBudW1iZXIKKyAqCSAgYW5kIGltYWdlIG9mZnNldCksIGNyZWF0ZSBhIG5ldyBkdXBsaWNhdGUgcGFja2V0IGFuZCBhZGQgaXQKKyAqCSAgdG8gdGhlIGR1cCBwYWNrZXQgbGlzdC4gIElmIG5vdCwganVzdCBnZXQgdGhlIGV4aXN0aW5nIG9uZSBhbmQKKyAqCSAgdXBkYXRlIGl0IHdpdGggdGhlIGN1cnJlbnQgcGFja2V0IGNvbnRlbnRzIChzaW5jZSByZWxvY2F0aW9uCisgKgkgIG9uIHRoZSBwYWNrZXQgaXMgc3RpbGwgb25nb2luZyBpbiBmaXJzdCBwYXNzLikgIENyZWF0ZSBhCisgKgkgIGR1cGxpY2F0ZSBvZiB0aGUgcHJvdmlkZWQgcmVsb2NhdGlvbiwgYnV0IHVwZGF0ZSBpdCB0byBwb2ludAorICoJICB0byB0aGUgbmV3IHRyYW1wb2xpbmUgc3ltYm9sLiAgQWRkIHRoZSBuZXcgcmVsb2NhdGlvbiBkdXAgdG8KKyAqCSAgdGhlIGR1cCBwYWNrZXQncyByZWxvIGNoYWluIGZvciAybmQgcGFzcyByZWxvY2F0aW9uIGxhdGVyLgorICovCitzdGF0aWMgaW50IHByaXZfaW1nX3BrdF9kdXAoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsCisJCQkgICAgczE2IHNlY25uLCB1MzIgaW1hZ2Vfb2Zmc2V0LAorCQkJICAgIHN0cnVjdCBpbWFnZV9wYWNrZXRfdCAqaXBhY2tldCwKKwkJCSAgICBzdHJ1Y3QgcmVsb2NfcmVjb3JkX3QgKnJwLAorCQkJICAgIHN0cnVjdCB0cmFtcF9zeW0gKm5ld190cmFtcF9zeW0pCit7CisJc3RydWN0IHRyYW1wX2ltZ19kdXBfcGt0ICpkdXBfcGt0ID0gTlVMTDsKKwl1MzIgbmV3X2R1cF9zaXplOworCXMzMiBpOworCWludCByZXRfdmFsID0gMDsKKwlzdHJ1Y3QgdHJhbXBfaW1nX2R1cF9yZWxvICpkdXBfcmVsbyA9IE5VTEw7CisKKwkvKiAgRGV0ZXJtaW5uZSBpZiB0aGlzIGltYWdlIHBhY2tldCBpcyBhbHJlYWR5IGJlaW5nIHRyYWNrZWQgaW4gdGhlCisJICAgZHVwIGxpc3QgZm9yIG90aGVyIHRyYW1wb2xpbmVzLiAqLworCWR1cF9wa3QgPSBwcml2X2R1cF9maW5kKGRsdGhpcywgc2Vjbm4sIGltYWdlX29mZnNldCk7CisKKwlpZiAoZHVwX3BrdCA9PSBOVUxMKSB7CisJCS8qICBUaGlzIGltYWdlIHBhY2tldCBkb2VzIG5vdCBleGlzdCBpbiBvdXIgdHJhY2tpbmcsIHNvIGNyZWF0ZQorCQkgKiBhIG5ldyBvbmUgYW5kIGFkZCBpdCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdC4gKi8KKwkJbmV3X2R1cF9zaXplID0gc2l6ZW9mKHN0cnVjdCB0cmFtcF9pbWdfZHVwX3BrdCkgKworCQkgICAgaXBhY2tldC0+cGFja2V0X3NpemU7CisKKwkJZHVwX3BrdCA9IChzdHJ1Y3QgdHJhbXBfaW1nX2R1cF9wa3QgKikKKwkJICAgIGRsdGhpcy0+bXlzeW0tPmRsb2FkX2FsbG9jYXRlKGRsdGhpcy0+bXlzeW0sIG5ld19kdXBfc2l6ZSk7CisJCWlmIChkdXBfcGt0ICE9IE5VTEwpIHsKKwkJCS8qICBTYXZlIG9mZiB0aGUgc2VjdGlvbiBhbmQgb2Zmc2V0IGluZm9ybWF0aW9uICovCisJCQlkdXBfcGt0LT5zZWNubiA9IHNlY25uOworCQkJZHVwX3BrdC0+b2Zmc2V0ID0gaW1hZ2Vfb2Zmc2V0OworCQkJZHVwX3BrdC0+cmVsb19jaGFpbiA9IE5VTEw7CisKKwkJCS8qICBDb3B5IHRoZSBvcmlnaW5hbCBwYWNrZXQgY29udGVudCAqLworCQkJZHVwX3BrdC0+aW1nX3BrdCA9ICppcGFja2V0OworCQkJZHVwX3BrdC0+aW1nX3BrdC5pbWdfZGF0YSA9ICh1OCAqKSAoZHVwX3BrdCArIDEpOworCQkJZm9yIChpID0gMDsgaSA8IGlwYWNrZXQtPnBhY2tldF9zaXplOyBpKyspCisJCQkJKihkdXBfcGt0LT5pbWdfcGt0LmltZ19kYXRhICsgaSkgPQorCQkJCSAgICAqKGlwYWNrZXQtPmltZ19kYXRhICsgaSk7CisKKwkJCS8qICBBZGQgdGhlIHBhY2tldCB0byB0aGUgZHVwIGxpc3QgKi8KKwkJCWR1cF9wa3QtPm5leHQgPSBkbHRoaXMtPnRyYW1wLmR1cF9wa3RzOworCQkJZGx0aGlzLT50cmFtcC5kdXBfcGt0cyA9IGR1cF9wa3Q7CisJCX0gZWxzZQorCQkJZGxvYWRfZXJyb3IoZGx0aGlzLCAiRmFpbGVkIHRvIGNyZWF0ZSBkdXAgcGFja2V0ISIpOworCX0gZWxzZSB7CisJCS8qICBUaGUgaW1hZ2UgcGFja2V0IGNvbnRlbnRzIGNvdWxkIGhhdmUgY2hhbmdlZCBzaW5jZQorCQkgKiB0cmFtcG9saW5lIGRldGVjdGlvbiBoYXBwZW5zIGR1cmluZyByZWxvY2F0aW9uIG9mIHRoZSBpbWFnZQorCQkgKiBwYWNrZXRzLiAgU28sIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBpbWFnZSBwYWNrZXQgY29udGVudHMKKwkJICogYmVmb3JlIGFkZGluZyByZWxvIGluZm9ybWF0aW9uLiAqLworCQlmb3IgKGkgPSAwOyBpIDwgZHVwX3BrdC0+aW1nX3BrdC5wYWNrZXRfc2l6ZTsgaSsrKQorCQkJKihkdXBfcGt0LT5pbWdfcGt0LmltZ19kYXRhICsgaSkgPQorCQkJICAgICooaXBhY2tldC0+aW1nX2RhdGEgKyBpKTsKKwl9CisKKwkvKiAgU2luY2UgdGhlIHByZXZpb3VzIGNvZGUgbWF5IGhhdmUgYWxsb2NhdGVkIGEgbmV3IGR1cCBwYWNrZXQgZm9yIHVzLAorCSAgIGRvdWJsZSBjaGVjayB0aGF0IHdlIGFjdHVhbGx5IGhhdmUgb25lLiAqLworCWlmIChkdXBfcGt0ICE9IE5VTEwpIHsKKwkJLyogIEFsbG9jYXRlIGEgbmV3IG5vZGUgZm9yIHRoZSByZWxvIGNoYWluLiAgRWFjaCBpbWFnZSBwYWNrZXQKKwkJICogY2FuIHBvdGVudGlhbGx5IGhhdmUgbXVsdGlwbGUgcmVsb2NhdGlvbnMgdGhhdCBjYXVzZSBhCisJCSAqIHRyYW1wb2xpbmUgdG8gYmUgZ2VuZXJhdGVkLiAgU28sIHdlIGtlZXAgdGhlbSBpbiBhIGNoYWluLAorCQkgKiBvcmRlciBpcyBub3QgaW1wb3J0YW50LiAqLworCQlkdXBfcmVsbyA9IGRsdGhpcy0+bXlzeW0tPmRsb2FkX2FsbG9jYXRlKGRsdGhpcy0+bXlzeW0sCisJCQkJCSBzaXplb2Yoc3RydWN0IHRyYW1wX2ltZ19kdXBfcmVsbykpOworCQlpZiAoZHVwX3JlbG8gIT0gTlVMTCkgeworCQkJLyogIENvcHkgdGhlIHJlbG8gY29udGVudHMsIGFkanVzdCBmb3IgdGhlIG5ldworCQkJICogdHJhbXBvbGluZSBhbmQgYWRkIGl0IHRvIHRoZSBsaXN0LiAqLworCQkJZHVwX3JlbG8tPnJlbG8gPSAqcnA7CisJCQlkdXBfcmVsby0+cmVsby5TWU1ORFggPSBuZXdfdHJhbXBfc3ltLT5pbmRleDsKKworCQkJZHVwX3JlbG8tPm5leHQgPSBkdXBfcGt0LT5yZWxvX2NoYWluOworCQkJZHVwX3BrdC0+cmVsb19jaGFpbiA9IGR1cF9yZWxvOworCisJCQkvKiAgVGhhdCdzIGl0LCB3ZSdyZSBkb25lLiAgTWFrZSBzdXJlIHdlIHVwZGF0ZSBvdXIKKwkJCSAqIHJldHVybiB2YWx1ZSB0byBiZSBzdWNjZXNzIHNpbmNlIGV2ZXJ5dGhpbmcgZmluaXNoZWQKKwkJCSAqIG9rICovCisJCQlyZXRfdmFsID0gMTsKKwkJfSBlbHNlCisJCQlkbG9hZF9lcnJvcihkbHRoaXMsICJVbmFibGUgdG8gYWxsb2MgZHVwIHJlbG8iKTsKKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoKKyAqIEZ1bmN0aW9uOglkbG9hZF90cmFtcF9hdmFpbAorICogRGVzY3JpcHRpb246IENoZWNrIHRvIHNlZSBpZiB0aGUgdGFyZ2V0IHN1cHBvcnRzIGEgdHJhbXBvbGluZSBmb3IgdGhpcyB0eXBlCisgKgkgIG9mIHJlbG9jYXRpb24uICBSZXR1cm4gdHJ1ZSBpZiBpdCBkb2VzLCBvdGhlcndpc2UgZmFsc2UuCisgKi8KK2Jvb2wgZGxvYWRfdHJhbXBfYXZhaWwoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsIHN0cnVjdCByZWxvY19yZWNvcmRfdCAqcnApCit7CisJYm9vbCByZXRfdmFsID0gZmFsc2U7CisJdTE2IG1hcF9pbmRleDsKKwl1MTYgZ2VuX2luZGV4OworCisJLyogIENoZWNrIHR5cGUgaGFzaCB2cy4gdGFyZ2V0IHRyYW1wIHRhYmxlICovCisJbWFwX2luZGV4ID0gSEFTSF9GVU5DKHJwLT5UWVBFKTsKKwlnZW5faW5kZXggPSB0cmFtcF9tYXBbbWFwX2luZGV4XTsKKwlpZiAoZ2VuX2luZGV4ICE9IFRSQU1QX05PX0dFTl9BVkFJTCkKKwkJcmV0X3ZhbCA9IHRydWU7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoKKyAqIEZ1bmN0aW9uOglkbG9hZF90cmFtcF9nZW5lcmF0ZQorICogRGVzY3JpcHRpb246IENyZWF0ZSBhIG5ldyB0cmFtcG9saW5lIGZvciB0aGUgcHJvdmlkZWQgaW1hZ2UgcGFja2V0IGFuZAorICoJICByZWxvY2F0aW9uIGNhdXNpbmcgcHJvYmxlbXMuICBUaGlzIHdpbGwgY3JlYXRlIHRoZSB0cmFtcG9saW5lCisgKgkgIGFzIHdlbGwgYXMgZHVwbGljYXRlL3VwZGF0ZSB0aGUgaW1hZ2UgcGFja2V0IGFuZCByZWxvY2F0aW9uCisgKgkgIGNhdXNpbmcgdGhlIHByb2JsZW0sIHdoaWNoIHdpbGwgYmUgcmVsbydkIGFnYWluIGR1cmluZworICoJICBmaW5hbGl6YXRpb24uCisgKi8KK2ludCBkbG9hZF90cmFtcF9nZW5lcmF0ZShzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcywgczE2IHNlY25uLAorCQkJIHUzMiBpbWFnZV9vZmZzZXQsIHN0cnVjdCBpbWFnZV9wYWNrZXRfdCAqaXBhY2tldCwKKwkJCSBzdHJ1Y3QgcmVsb2NfcmVjb3JkX3QgKnJwKQoreworCXUxNiBtYXBfaW5kZXg7CisJdTE2IGdlbl9pbmRleDsKKwlpbnQgcmV0X3ZhbCA9IDE7CisJY2hhciB0cmFtcF9zeW1fc3RyW1RSQU1QX1NZTV9QUkVGSVhfTEVOICsgVFJBTVBfU1lNX0hFWF9BU0NJSV9MRU5dOworCXN0cnVjdCBsb2NhbF9zeW1ib2wgKnJlZl9zeW07CisJc3RydWN0IHRyYW1wX3N5bSAqbmV3X3RyYW1wX3N5bTsKKwlzdHJ1Y3QgdHJhbXBfc3ltICpuZXdfZXh0X3N5bTsKKwlzdHJ1Y3QgdHJhbXBfc3RyaW5nICpuZXdfdHJhbXBfc3RyOworCXUzMiBuZXdfdHJhbXBfYmFzZTsKKwlzdHJ1Y3QgbG9jYWxfc3ltYm9sIHRtcF9zeW07CisJc3RydWN0IGxvY2FsX3N5bWJvbCBleHRfdG1wX3N5bTsKKworCS8qICBIYXNoIHRoZSByZWxvIHR5cGUgdG8gZ2V0IG91ciBnZW5lcmF0b3IgaW5mb3JtYXRpb24gKi8KKwltYXBfaW5kZXggPSBIQVNIX0ZVTkMocnAtPlRZUEUpOworCWdlbl9pbmRleCA9IHRyYW1wX21hcFttYXBfaW5kZXhdOworCWlmIChnZW5faW5kZXggIT0gVFJBTVBfTk9fR0VOX0FWQUlMKSB7CisJCS8qICBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0cmFtcG9saW5lLCBjcmVhdGUgdGhlIHNlY3Rpb24gbmFtZSBpbgorCQkgKiBvdXIgc3RyaW5nIHRhYmxlIGZvciBkZWJ1ZyBoZWxwIGxhdGVyLiAqLworCQlpZiAoZGx0aGlzLT50cmFtcC5zdHJpbmdfaGVhZCA9PSBOVUxMKSB7CisJCQlwcml2X3RyYW1wX3N0cmluZ19jcmVhdGUoZGx0aGlzLAorCQkJCQkJIHN0cmxlbihUUkFNUF9TRUNUX05BTUUpLAorCQkJCQkJIFRSQU1QX1NFQ1RfTkFNRSk7CisJCX0KKyNpZmRlZiBFTkFCTEVfVFJBTVBfREVCVUcKKwkJZGxvYWRfc3ltc19lcnJvcihkbHRoaXMtPm15c3ltLAorCQkJCSAiVHJhbXBvbGluZSBhdCBpbWcgbG9jICV4LCByZWZlcmVuY2VzICV4IiwKKwkJCQkgZGx0aGlzLT5sZHJfc2VjdGlvbnNbc2Vjbm5dLnJ1bl9hZGRyICsKKwkJCQkgaW1hZ2Vfb2Zmc2V0ICsgcnAtPnZhZGRyLAorCQkJCSBkbHRoaXMtPmxvY2FsX3N5bXRhYltycC0+U1lNTkRYXS52YWx1ZSk7CisjZW5kaWYKKworCQkvKiAgR2VuZXJhdGUgdGhlIHRyYW1wb2xpbmUgc3RyaW5nLCBjaGVjayBpZiBhbHJlYWR5IGRlZmluZWQuCisJCSAqIElmIHRoZSByZWxvIHN5bWJvbCBpbmRleCBpcyAtMSwgaXQgbWVhbnMgd2UgbmVlZCB0aGUgc2VjdGlvbgorCQkgKiBpbmZvIGZvciByZWxvIGxhdGVyLiAgVG8gZG8gdGhpcyB3ZSdsbCBkdW1teSB1cCBhIHN5bWJvbAorCQkgKiB3aXRoIHRoZSBzZWN0aW9uIGRlbHRhIGFuZCBydW4gYWRkcmVzc2VzLiAqLworCQlpZiAocnAtPlNZTU5EWCA9PSAtMSkgeworCQkJZXh0X3RtcF9zeW0udmFsdWUgPQorCQkJICAgIGRsdGhpcy0+bGRyX3NlY3Rpb25zW3NlY25uXS5ydW5fYWRkcjsKKwkJCWV4dF90bXBfc3ltLmRlbHRhID0gZGx0aGlzLT5zZWN0X2hkcnNbc2Vjbm5dLmRzX3BhZGRyOworCQkJcmVmX3N5bSA9ICZleHRfdG1wX3N5bTsKKwkJfSBlbHNlCisJCQlyZWZfc3ltID0gJihkbHRoaXMtPmxvY2FsX3N5bXRhYltycC0+U1lNTkRYXSk7CisKKwkJcHJpdl90cmFtcF9zeW1fZ2VuX25hbWUocmVmX3N5bS0+dmFsdWUsIHRyYW1wX3N5bV9zdHIpOworCQluZXdfdHJhbXBfc3ltID0gcHJpdl90cmFtcF9zeW1fZmluZChkbHRoaXMsIHRyYW1wX3N5bV9zdHIpOworCQlpZiAobmV3X3RyYW1wX3N5bSA9PSBOVUxMKSB7CisJCQkvKiAgSWYgdHJhbXAgc3RyaW5nIG5vdCBkZWZpbmVkLCBjcmVhdGUgaXQgYW5kIGEgbmV3CisJCQkgKiBzdHJpbmcsIGFuZCBzeW1ib2wgZm9yIGl0IGFzIHdlbGwgYXMgdGhlIG9yaWdpbmFsCisJCQkgKiBzeW1ib2wgd2hpY2ggY2F1c2VkIHRoZSB0cmFtcG9saW5lLiAqLworCQkJbmV3X3RyYW1wX3N0ciA9IHByaXZfdHJhbXBfc3RyaW5nX2NyZWF0ZShkbHRoaXMsCisJCQkJCQkJCXN0cmxlbgorCQkJCQkJCQkodHJhbXBfc3ltX3N0ciksCisJCQkJCQkJCSB0cmFtcF9zeW1fc3RyKTsKKwkJCWlmIChuZXdfdHJhbXBfc3RyID09IE5VTEwpIHsKKwkJCQlkbG9hZF9lcnJvcihkbHRoaXMsICJGYWlsZWQgdG8gY3JlYXRlIG5ldyAiCisJCQkJCSAgICAidHJhbXBvbGluZSBzdHJpbmdcbiIpOworCQkJCXJldF92YWwgPSAwOworCQkJfSBlbHNlIHsKKwkJCQkvKiAgQWxsb2NhdGUgdHJhbXAgc2VjdGlvbiBzcGFjZSBmb3IgdGhlIG5ldworCQkJCSAqIHRyYW1wIGZyb20gdGhlIHRhcmdldCAqLworCQkJCW5ld190cmFtcF9iYXNlID0gcHJpdl90cmFtcF9zZWN0X2FsbG9jKGRsdGhpcywKKwkJCQkJCSAgICAgICB0cmFtcF9zaXplX2dldCgpKTsKKworCQkJCS8qICBXZSBoYXZlIGEgc3RyaW5nLCBjcmVhdGUgdGhlIG5ldyBzeW1ib2wgYW5kCisJCQkJICogZHVwbGljYXRlIHRoZSBleHRlcm5hbC4gKi8KKwkJCQl0bXBfc3ltLnZhbHVlID0gbmV3X3RyYW1wX2Jhc2U7CisJCQkJdG1wX3N5bS5kZWx0YSA9IDA7CisJCQkJdG1wX3N5bS5zZWNubiA9IC0xOworCQkJCXRtcF9zeW0uc2NsYXNzID0gMDsKKwkJCQluZXdfdHJhbXBfc3ltID0gcHJpdl90cmFtcF9zeW1fY3JlYXRlKGRsdGhpcywKKwkJCQkJCQkgICAgICBuZXdfdHJhbXBfc3RyLT4KKwkJCQkJCQkgICAgICBpbmRleCwKKwkJCQkJCQkgICAgICAmdG1wX3N5bSk7CisKKwkJCQluZXdfZXh0X3N5bSA9IHByaXZfdHJhbXBfc3ltX2NyZWF0ZShkbHRoaXMsIC0xLAorCQkJCQkJCQkgICAgcmVmX3N5bSk7CisKKwkJCQlpZiAoKG5ld190cmFtcF9zeW0gIT0gTlVMTCkgJiYKKwkJCQkgICAgKG5ld19leHRfc3ltICE9IE5VTEwpKSB7CisJCQkJCS8qICBDYWxsIHRoZSBpbWFnZSBnZW5lcmF0b3IgdG8gZ2V0IHRoZQorCQkJCQkgKiBuZXcgaW1hZ2UgZGF0YSBhbmQgZml4IHVwIGl0cworCQkJCQkgKiByZWxvY2F0aW9ucyBmb3IgdGhlIGV4dGVybmFsCisJCQkJCSAqIHN5bWJvbC4gKi8KKwkJCQkJcmV0X3ZhbCA9IHByaXZfdGd0X2ltZ19nZW4oZGx0aGlzLAorCQkJCQkJCQkgbmV3X3RyYW1wX2Jhc2UsCisJCQkJCQkJCSBnZW5faW5kZXgsCisJCQkJCQkJCSBuZXdfZXh0X3N5bSk7CisKKwkJCQkJLyogIEFkZCBnZW5lcmF0ZWQgaW1hZ2UgZGF0YSB0byB0cmFtcAorCQkJCQkgKiBpbWFnZSBsaXN0ICovCisJCQkJCWlmIChyZXRfdmFsICE9IDEpIHsKKwkJCQkJCWRsb2FkX2Vycm9yKGRsdGhpcywgIkZhaWxlZCB0byAiCisJCQkJCQkJICAgICJjcmVhdGUgaW1nIHBrdCBmb3IiCisJCQkJCQkJICAgICIgdHJhbXBvbGluZVxuIik7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlkbG9hZF9lcnJvcihkbHRoaXMsICJGYWlsZWQgdG8gY3JlYXRlICIKKwkJCQkJCSAgICAibmV3IHRyYW1wIHN5bXMgIgorCQkJCQkJICAgICIoJTguOFgsICU4LjhYKVxuIiwKKwkJCQkJCSAgICBuZXdfdHJhbXBfc3ltLCBuZXdfZXh0X3N5bSk7CisJCQkJCXJldF92YWwgPSAwOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qICBEdXBsaWNhdGUgdGhlIGltYWdlIGRhdGEgYW5kIHJlbG8gcmVjb3JkIHRoYXQgY2F1c2VkIHRoZQorCQkgKiB0cmFtcCwgaW5jbHVkaW5nIHVwZGF0ZSB0aGUgcmVsbyBkYXRhIHRvIHBvaW50IHRvIHRoZSB0cmFtcAorCQkgKiBzeW1ib2wuICovCisJCWlmIChyZXRfdmFsID09IDEpIHsKKwkJCXJldF92YWwgPSBwcml2X2ltZ19wa3RfZHVwKGRsdGhpcywgc2Vjbm4sIGltYWdlX29mZnNldCwKKwkJCQkJCSAgIGlwYWNrZXQsIHJwLCBuZXdfdHJhbXBfc3ltKTsKKwkJCWlmIChyZXRfdmFsICE9IDEpIHsKKwkJCQlkbG9hZF9lcnJvcihkbHRoaXMsICJGYWlsZWQgdG8gY3JlYXRlIGR1cCBvZiAiCisJCQkJCSAgICAib3JpZ2luYWwgaW1nIHBrdFxuIik7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoKKyAqIEZ1bmN0aW9uOglkbG9hZF90cmFtcF9wa3RfdXBkYXRlCisgKiBEZXNjcmlwdGlvbjogVXBkYXRlIHRoZSBkdXBsaWNhdGUgY29weSBvZiB0aGlzIGltYWdlIHBhY2tldCwgd2hpY2ggdGhlCisgKgkgIHRyYW1wb2xpbmUgbGF5ZXIgaXMgYWxyZWFkeSB0cmFja2luZy4gIFRoaXMgaXMgY2FsbCBpcyBjcml0aWNhbAorICoJICB0byBtYWtlIGlmIHRyYW1wb2xpbmVzIHdlcmUgZ2VuZXJhdGVkIGFueXdoZXJlIHdpdGhpbiB0aGUKKyAqCSAgcGFja2V0IGFuZCBmaXJzdCBwYXNzIHJlbG8gY29udGludWVkIG9uIHRoZSByZW1haW5kZXIuICBUaGUKKyAqCSAgdHJhbXBvbGluZSBsYXllciBuZWVkcyB0aGUgdXBkYXRlcyBpbWFnZSBkYXRhIHNvIHdoZW4gMm5kCisgKgkgIHBhc3MgcmVsbyBpcyBkb25lIGR1cmluZyBmaW5hbGl6ZSB0aGUgaW1hZ2UgcGFja2V0IGNhbiBiZQorICoJICB3cml0dGVuIHRvIHRoZSB0YXJnZXQgc2luY2UgYWxsIHJlbG8gaXMgZG9uZS4KKyAqLworaW50IGRsb2FkX3RyYW1wX3BrdF91ZHBhdGUoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsIHMxNiBzZWNubiwKKwkJCSAgIHUzMiBpbWFnZV9vZmZzZXQsIHN0cnVjdCBpbWFnZV9wYWNrZXRfdCAqaXBhY2tldCkKK3sKKwlzdHJ1Y3QgdHJhbXBfaW1nX2R1cF9wa3QgKmR1cF9wa3QgPSBOVUxMOworCXMzMiBpOworCWludCByZXRfdmFsID0gMDsKKworCS8qICBGaW5kIHRoZSBpbWFnZSBwYWNrZXQgaW4gcXVlc3Rpb24sIHRoZSBjYWxsZXIgbmVlZHMgdXMgdG8gdXBkYXRlIGl0CisJICAgc2luY2UgYSB0cmFtcG9saW5lIHdhcyBwcmV2aW91c2x5IGdlbmVyYXRlZC4gKi8KKwlkdXBfcGt0ID0gcHJpdl9kdXBfZmluZChkbHRoaXMsIHNlY25uLCBpbWFnZV9vZmZzZXQpOworCWlmIChkdXBfcGt0ICE9IE5VTEwpIHsKKwkJZm9yIChpID0gMDsgaSA8IGR1cF9wa3QtPmltZ19wa3QucGFja2V0X3NpemU7IGkrKykKKwkJCSooZHVwX3BrdC0+aW1nX3BrdC5pbWdfZGF0YSArIGkpID0KKwkJCSAgICAqKGlwYWNrZXQtPmltZ19kYXRhICsgaSk7CisKKwkJcmV0X3ZhbCA9IDE7CisJfSBlbHNlIHsKKwkJZGxvYWRfZXJyb3IoZGx0aGlzLAorCQkJICAgICJVbmFibGUgdG8gZmluZCBleGlzdGluZyBEVVAgcGt0IGZvciAleCwgb2Zmc2V0ICV4IiwKKwkJCSAgICBzZWNubiwgaW1hZ2Vfb2Zmc2V0KTsKKworCX0KKworCXJldHVybiByZXRfdmFsOworfQorCisvKgorICogRnVuY3Rpb246CWRsb2FkX3RyYW1wX2ZpbmFsaXplCisgKiBEZXNjcmlwdGlvbjogSWYgYW55IHRyYW1wb2xpbmVzIHdlcmUgY3JlYXRlZCwgZmluYWxpemUgZXZlcnl0aGluZyBvbiB0aGUKKyAqCSAgdGFyZ2V0IGJ5IGFsbG9jYXRpbmcgdGhlIHRyYW1wb2xpbmUgc2VjdGlvbiBvbiB0aGUgdGFyZ2V0LAorICoJICBmaW5hbGl6aW5nIHRoZSB0cmFtcG9saW5lIHN5bWJvbHMsIGZpbmFsaXppbmcgdGhlIHRyYW1wb2xpbmUKKyAqCSAgcGFja2V0cyAod3JpdGUgdGhlIG5ldyBzZWN0aW9uIHRvIHRhcmdldCBtZW1vcnkpIGFuZCBmaW5hbGl6ZQorICoJICB0aGUgZHVwbGljYXRlIHBhY2tldHMgYnkgZG9pbmcgMm5kIHBhc3MgcmVsbyBvdmVyIHRoZW0uCisgKi8KK2ludCBkbG9hZF90cmFtcF9maW5hbGl6ZShzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcykKK3sKKwlpbnQgcmV0X3ZhbCA9IDE7CisKKwlpZiAoZGx0aGlzLT50cmFtcC50cmFtcF9zZWN0X25leHRfYWRkciAhPSAwKSB7CisJCS8qICBGaW5hbGl6ZSBzdHJpbmdzIGludG8gYSBmbGF0IHRhYmxlLiAgVGhpcyBpcyBuZWVkZWQgc28gaXQKKwkJICogY2FuIGJlIGFkZGVkIHRvIHRoZSBkZWJ1ZyBzdHJpbmcgdGFibGUgbGF0ZXIuICovCisJCXJldF92YWwgPSBwcml2X3N0cmluZ190YmxfZmluYWxpemUoZGx0aGlzKTsKKworCQkvKiAgRG8gdGFyZ2V0IGFsbG9jYXRpb24gZm9yIHNlY3Rpb24gQkVGT1JFIGZpbmFsaXppbmcKKwkJICogc3ltYm9scy4gKi8KKwkJaWYgKHJldF92YWwgIT0gMCkKKwkJCXJldF92YWwgPSBwcml2X3RyYW1wX3NlY3RfdGd0X2FsbG9jKGRsdGhpcyk7CisKKwkJLyogIEZpbmFsaXplIHN5bWJvbHMgd2l0aCB0aGVpciBjb3JyZWN0IHRhcmdldCBpbmZvcm1hdGlvbiBhbmQKKwkJICogZmxhdHRlbiAqLworCQlpZiAocmV0X3ZhbCAhPSAwKQorCQkJcmV0X3ZhbCA9IHByaXZfdHJhbXBfc3ltX2ZpbmFsaXplKGRsdGhpcyk7CisKKwkJLyogIEZpbmFsaXplIGFsbCB0cmFtcG9saW5lIHBhY2tldHMuICBUaGlzIHBlcmZvcm1zIHRoZQorCQkgKiByZWxvY2F0aW9uIG9uIHRoZSBwYWNrZXRzIGFzIHdlbGwgYXMgd3JpdGluZyB0aGVtIHRvIHRhcmdldAorCQkgKiBtZW1vcnkuICovCisJCWlmIChyZXRfdmFsICE9IDApCisJCQlyZXRfdmFsID0gcHJpdl90cmFtcF9wa3RfZmluYWxpemUoZGx0aGlzKTsKKworCQkvKiAgUGVyZm9ybSBhIDJuZCBwYXNzIHJlbG9jYXRpb24gb24gdGhlIGR1cCBsaXN0LiAqLworCQlpZiAocmV0X3ZhbCAhPSAwKQorCQkJcmV0X3ZhbCA9IHByaXZfZHVwX3BrdF9maW5hbGl6ZShkbHRoaXMpOworCX0KKworCXJldHVybiByZXRfdmFsOworfQorCisvKgorICogRnVuY3Rpb246CWRsb2FkX3RyYW1wX2NsZWFudXAKKyAqIERlc2NyaXB0aW9uOiBSZWxlYXNlIGFsbCB0ZW1wb3JhcnkgcmVzb3VyY2VzIHVzZWQgaW4gdGhlIHRyYW1wb2xpbmUgbGF5ZXIuCisgKgkgIE5vdGUgdGhhdCB0aGUgdGFyZ2V0IG1lbW9yeSB3aGljaCBtYXkgaGF2ZSBiZWVuIGFsbG9jYXRlZCBhbmQKKyAqCSAgd3JpdHRlbiB0byBzdG9yZSB0aGUgdHJhbXBvbGluZXMgaXMgTk9UIFJFTEVBU0VEIEhFUkUgc2luY2UgaXQKKyAqCSAgaXMgcG90ZW50aWFsbHkgc3RpbGwgaW4gdXNlLiAgSXQgaXMgYXV0b21hdGljYWxseSByZWxlYXNlZAorICoJICB3aGVuIHRoZSBtb2R1bGUgaXMgdW5sb2FkZWQuCisgKi8KK3ZvaWQgZGxvYWRfdHJhbXBfY2xlYW51cChzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcykKK3sKKwlzdHJ1Y3QgdHJhbXBfaW5mbyAqdHJhbXAgPSAmZGx0aGlzLT50cmFtcDsKKwlzdHJ1Y3QgdHJhbXBfc3ltICpjdXJfc3ltOworCXN0cnVjdCB0cmFtcF9zdHJpbmcgKmN1cl9zdHJpbmc7CisJc3RydWN0IHRyYW1wX2ltZ19wa3QgKmN1cl90cmFtcF9wa3Q7CisJc3RydWN0IHRyYW1wX2ltZ19kdXBfcGt0ICpjdXJfZHVwX3BrdDsKKwlzdHJ1Y3QgdHJhbXBfaW1nX2R1cF9yZWxvICpjdXJfZHVwX3JlbG87CisKKwkvKiAgSWYgdGhlcmUgd2VyZSBubyB0cmFtcHMgZ2VuZXJhdGVkLCBqdXN0IHJldHVybiAqLworCWlmICh0cmFtcC0+dHJhbXBfc2VjdF9uZXh0X2FkZHIgPT0gMCkKKwkJcmV0dXJuOworCisJLyogIERlc3Ryb3kgYWxsIHRyYW1wIGluZm9ybWF0aW9uICovCisJZm9yIChjdXJfc3ltID0gdHJhbXAtPnN5bWJvbF9oZWFkOworCSAgICAgY3VyX3N5bSAhPSBOVUxMOyBjdXJfc3ltID0gdHJhbXAtPnN5bWJvbF9oZWFkKSB7CisJCXRyYW1wLT5zeW1ib2xfaGVhZCA9IGN1cl9zeW0tPm5leHQ7CisJCWlmICh0cmFtcC0+c3ltYm9sX3RhaWwgPT0gY3VyX3N5bSkKKwkJCXRyYW1wLT5zeW1ib2xfdGFpbCA9IE5VTEw7CisKKwkJZGx0aGlzLT5teXN5bS0+ZGxvYWRfZGVhbGxvY2F0ZShkbHRoaXMtPm15c3ltLCBjdXJfc3ltKTsKKwl9CisKKwlpZiAodHJhbXAtPmZpbmFsX3N5bV90YWJsZSAhPSBOVUxMKQorCQlkbHRoaXMtPm15c3ltLT5kbG9hZF9kZWFsbG9jYXRlKGRsdGhpcy0+bXlzeW0sCisJCQkJCQl0cmFtcC0+ZmluYWxfc3ltX3RhYmxlKTsKKworCWZvciAoY3VyX3N0cmluZyA9IHRyYW1wLT5zdHJpbmdfaGVhZDsKKwkgICAgIGN1cl9zdHJpbmcgIT0gTlVMTDsgY3VyX3N0cmluZyA9IHRyYW1wLT5zdHJpbmdfaGVhZCkgeworCQl0cmFtcC0+c3RyaW5nX2hlYWQgPSBjdXJfc3RyaW5nLT5uZXh0OworCQlpZiAodHJhbXAtPnN0cmluZ190YWlsID09IGN1cl9zdHJpbmcpCisJCQl0cmFtcC0+c3RyaW5nX3RhaWwgPSBOVUxMOworCisJCWRsdGhpcy0+bXlzeW0tPmRsb2FkX2RlYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwgY3VyX3N0cmluZyk7CisJfQorCisJaWYgKHRyYW1wLT5maW5hbF9zdHJpbmdfdGFibGUgIT0gTlVMTCkKKwkJZGx0aGlzLT5teXN5bS0+ZGxvYWRfZGVhbGxvY2F0ZShkbHRoaXMtPm15c3ltLAorCQkJCQkJdHJhbXAtPmZpbmFsX3N0cmluZ190YWJsZSk7CisKKwlmb3IgKGN1cl90cmFtcF9wa3QgPSB0cmFtcC0+dHJhbXBfcGt0czsKKwkgICAgIGN1cl90cmFtcF9wa3QgIT0gTlVMTDsgY3VyX3RyYW1wX3BrdCA9IHRyYW1wLT50cmFtcF9wa3RzKSB7CisJCXRyYW1wLT50cmFtcF9wa3RzID0gY3VyX3RyYW1wX3BrdC0+bmV4dDsKKwkJZGx0aGlzLT5teXN5bS0+ZGxvYWRfZGVhbGxvY2F0ZShkbHRoaXMtPm15c3ltLCBjdXJfdHJhbXBfcGt0KTsKKwl9CisKKwlmb3IgKGN1cl9kdXBfcGt0ID0gdHJhbXAtPmR1cF9wa3RzOworCSAgICAgY3VyX2R1cF9wa3QgIT0gTlVMTDsgY3VyX2R1cF9wa3QgPSB0cmFtcC0+ZHVwX3BrdHMpIHsKKwkJdHJhbXAtPmR1cF9wa3RzID0gY3VyX2R1cF9wa3QtPm5leHQ7CisKKwkJZm9yIChjdXJfZHVwX3JlbG8gPSBjdXJfZHVwX3BrdC0+cmVsb19jaGFpbjsKKwkJICAgICBjdXJfZHVwX3JlbG8gIT0gTlVMTDsKKwkJICAgICBjdXJfZHVwX3JlbG8gPSBjdXJfZHVwX3BrdC0+cmVsb19jaGFpbikgeworCQkJY3VyX2R1cF9wa3QtPnJlbG9fY2hhaW4gPSBjdXJfZHVwX3JlbG8tPm5leHQ7CisJCQlkbHRoaXMtPm15c3ltLT5kbG9hZF9kZWFsbG9jYXRlKGRsdGhpcy0+bXlzeW0sCisJCQkJCQkJY3VyX2R1cF9yZWxvKTsKKwkJfQorCisJCWRsdGhpcy0+bXlzeW0tPmRsb2FkX2RlYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwgY3VyX2R1cF9wa3QpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL3RyYW1wX3RhYmxlX2M2MDAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC90cmFtcF90YWJsZV9jNjAwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5Y2M2NGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC90cmFtcF90YWJsZV9jNjAwMC5jCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogdHJhbXBfdGFibGVfYzYwMDAuYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaW5jbHVkZSAiZGxvYWRfaW50ZXJuYWwuaCIKKworLyogIFRoZXNlIGFyZSBkZWZpbmVkIGluIGNvZmYuaCwgYnV0IG1heSBub3QgYmUgYXZhaWxhYmxlIG9uIGFsbCBwbGF0Zm9ybXMKKwlzbyB3ZSdsbCBnbyBhaGVhZCBhbmQgZGVmaW5lIHRoZW0gaGVyZS4gKi8KKyNpZm5kZWYgUl9DNjBMTzE2CisjZGVmaW5lIFJfQzYwTE8xNgkgIDB4NTQJLyogQzYwOiBNVksgTG93IEhhbGYgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUl9DNjBISTE2CSAgMHg1NQkvKiBDNjA6IE1WS0gvTVZLTEggSGlnaCBIYWxmIFJlZ2lzdGVyICovCisjZW5kaWYKKworI2RlZmluZSBDNlhfVFJBTVBfV09SRF9DT1VOVAkJCTgKKyNkZWZpbmUgQzZYX1RSQU1QX01BWF9SRUxPUwkJCSA4CisKKy8qICBUSElTIEhBU0ggRlVOQ1RJT04gTVVTVCBNQVRDSCBUSEUgT05FIHJlbG9jX3RhYmxlX2M2MDAwLmMgKi8KKyNkZWZpbmUgSEFTSF9GVU5DKHp6KSAoKCgoKHp6KSArIDEpICogMTg0NVVMKSA+PiAxMSkgJiA2MykKKworLyogIFRISVMgTVVTVCBNQVRDSCByZWxvY19yZWNvcmRfdCBGT1IgQSBTWU1CT0wgQkFTRUQgUkVMTyAqLworc3RydWN0IGM2MDAwX3JlbG9fcmVjb3JkIHsKKwlzMzIgdmFkZHI7CisJczMyIHN5bW5keDsKKyNpZm5kZWYgX0JJR19FTkRJQU4KKwl1MTYgZGlzcDsKKwl1MTYgdHlwZTsKKyNlbHNlCisJdTE2IHR5cGU7CisJdTE2IGRpc3A7CisjZW5kaWYKK307CisKK3N0cnVjdCBjNjAwMF9nZW5fY29kZSB7CisJc3RydWN0IHRyYW1wX2dlbl9jb2RlX2hkciBoZHI7CisJdTMyIHRyYW1wX2luc3Ryc1tDNlhfVFJBTVBfV09SRF9DT1VOVF07CisJc3RydWN0IGM2MDAwX3JlbG9fcmVjb3JkIHJlbG9zW0M2WF9UUkFNUF9NQVhfUkVMT1NdOworfTsKKworLyogIEhhc2ggbWFwcGluZyBmb3IgcmVsb3MgdGhhdCBjYW4gY2F1c2UgdHJhbXBvbGluZXMuICovCitzdGF0aWMgY29uc3QgdTE2IHRyYW1wX21hcFtdID0geworCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTAsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYzYwMDBfZ2VuX2NvZGUgdHJhbXBfZ2VuX2luZm9bXSA9IHsKKwkvKiAgVHJhbXAgY2F1c2VkIGJ5IFJfQzYwUENSMjEgKi8KKwl7CisJIC8qICBIZWFkZXIgLSA4IGluc3RydWN0aW9ucywgMiByZWxvcyAqLworCSB7CisJICBzaXplb2YodTMyKSAqIEM2WF9UUkFNUF9XT1JEX0NPVU5ULAorCSAgMiwKKwkgIEZJRUxEX09GRlNFVChzdHJ1Y3QgYzYwMDBfZ2VuX2NvZGUsIHJlbG9zKQorCSAgfSwKKworCSAvKiAgVHJhbXBvbGluZSBpbnN0cnVjdGlvbnMgKi8KKwkgeworCSAgMHgwNTNDNTRGNywJCS8qICAgICAgIFNUVy5EMlQyICBCMTAsICpzcC0tWzJdICovCisJICAweDA1MDAwMDJBLAkJLyogIHx8IE1WSy5TMiAgIDxibGFuaz4sIEIxMCAqLworCSAgMHgwNTAwMDA2QSwJCS8qICAgICAgIE1WS0guUzIgICA8Ymxhbms+LCBCMTAgKi8KKwkgIDB4MDAyODAzNjIsCQkvKiAgICAgICBCLlMyICAgICBCMTAgKi8KKwkgIDB4MDUzQzUyRTYsCQkvKiAgICAgICBMRFcuRDJUMiAgKisrc3BbMl0sIEIxMCAqLworCSAgMHgwMDAwNjAwMCwJCS8qICAgICAgIE5PUCAgICAgICA0ICovCisJICAweDAwMDAwMDAwLAkJLyogICAgICAgTk9QICovCisJICAweDAwMDAwMDAwCQkvKiAgICAgICBOT1AgKi8KKwkgIH0sCisKKwkgLyogIFJlbG9jYXRpb25zICovCisJIHsKKwkgIHs0LCAwLCAwLCBSX0M2MExPMTZ9LAorCSAgezgsIDAsIDAsIFJfQzYwSEkxNn0sCisJICB7MCwgMCwgMCwgMHgwMDAwfSwKKwkgIHswLCAwLCAwLCAweDAwMDB9LAorCSAgezAsIDAsIDAsIDB4MDAwMH0sCisJICB7MCwgMCwgMCwgMHgwMDAwfSwKKwkgIHswLCAwLCAwLCAweDAwMDB9LAorCSAgezAsIDAsIDAsIDB4MDAwMH0KKwkgIH0KKwkgfQorfTsKKworLyogIFRBUkdFVCBTUEVDSUZJQyBGVU5DVElPTlMgVEhBVCBNVVNUIEJFIERFRklORUQgKi8KK3N0YXRpYyB1MzIgdHJhbXBfc2l6ZV9nZXQodm9pZCkKK3sKKwlyZXR1cm4gc2l6ZW9mKHUzMikgKiBDNlhfVFJBTVBfV09SRF9DT1VOVDsKK30KKworc3RhdGljIHUzMiB0cmFtcF9pbWdfcGt0X3NpemVfZ2V0KHZvaWQpCit7CisJcmV0dXJuIHNpemVvZihzdHJ1Y3QgYzYwMDBfZ2VuX2NvZGUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2dlbi9nYi5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2dlbi9nYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZWIzZDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZ2VuL2diLmMKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBnYi5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIEdlbmVyaWMgYml0bWFwIG9wZXJhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRFNQL0JJT1MgQnJpZGdlICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlzICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2dzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2diLmg+CisKK3N0cnVjdCBnYl90X21hcCB7CisJdTMyIGxlbjsKKwl1MzIgd2NudDsKKwl1MzIgKndvcmRzOworfTsKKworLyoKKyAqICA9PT09PT09PSBnYl9jbGVhciA9PT09PT09PQorICogIHB1cnBvc2U6CisgKiAgICAgIENsZWFycyBhIGJpdCBpbiB0aGUgYml0IG1hcC4KKyAqLworCit2b2lkIGdiX2NsZWFyKHN0cnVjdCBnYl90X21hcCAqbWFwLCB1MzIgYml0bikKK3sKKwl1MzIgbWFzazsKKworCW1hc2sgPSAxTCA8PCAoYml0biAlIEJJVFNfUEVSX0xPTkcpOworCW1hcC0+d29yZHNbYml0biAvIEJJVFNfUEVSX0xPTkddICY9IH5tYXNrOworfQorCisvKgorICogID09PT09PT09IGdiX2NyZWF0ZSA9PT09PT09PQorICogIHB1cnBvc2U6CisgKiAgICAgIENyZWF0ZXMgYSBiaXQgbWFwLgorICovCisKK3N0cnVjdCBnYl90X21hcCAqZ2JfY3JlYXRlKHUzMiBsZW4pCit7CisJc3RydWN0IGdiX3RfbWFwICptYXA7CisJdTMyIGk7CisJbWFwID0gKHN0cnVjdCBnYl90X21hcCAqKWdzX2FsbG9jKHNpemVvZihzdHJ1Y3QgZ2JfdF9tYXApKTsKKwlpZiAobWFwICE9IE5VTEwpIHsKKwkJbWFwLT5sZW4gPSBsZW47CisJCW1hcC0+d2NudCA9IGxlbiAvIEJJVFNfUEVSX0xPTkcgKyAxOworCQltYXAtPndvcmRzID0gKHUzMiAqKSBnc19hbGxvYyhtYXAtPndjbnQgKiBzaXplb2YodTMyKSk7CisJCWlmIChtYXAtPndvcmRzICE9IE5VTEwpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBtYXAtPndjbnQ7IGkrKykKKwkJCQltYXAtPndvcmRzW2ldID0gMEw7CisKKwkJfSBlbHNlIHsKKwkJCWdzX2ZyZWVzKG1hcCwgc2l6ZW9mKHN0cnVjdCBnYl90X21hcCkpOworCQkJbWFwID0gTlVMTDsKKwkJfQorCX0KKworCXJldHVybiBtYXA7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZ2JfZGVsZXRlID09PT09PT09CisgKiAgcHVycG9zZToKKyAqICAgICAgRnJlZXMgYSBiaXQgbWFwLgorICovCisKK3ZvaWQgZ2JfZGVsZXRlKHN0cnVjdCBnYl90X21hcCAqbWFwKQoreworCWdzX2ZyZWVzKG1hcC0+d29yZHMsIG1hcC0+d2NudCAqIHNpemVvZih1MzIpKTsKKwlnc19mcmVlcyhtYXAsIHNpemVvZihzdHJ1Y3QgZ2JfdF9tYXApKTsKK30KKworLyoKKyAqICA9PT09PT09PSBnYl9maW5kYW5kc2V0ID09PT09PT09CisgKiAgcHVycG9zZToKKyAqICAgICAgRmluZHMgYSBmcmVlIGJpdCBhbmQgc2V0cyBpdC4KKyAqLwordTMyIGdiX2ZpbmRhbmRzZXQoc3RydWN0IGdiX3RfbWFwICptYXApCit7CisJdTMyIGJpdG47CisKKwliaXRuID0gZ2JfbWluY2xlYXIobWFwKTsKKworCWlmIChiaXRuICE9IEdCX05PQklUUykKKwkJZ2Jfc2V0KG1hcCwgYml0bik7CisKKwlyZXR1cm4gYml0bjsKK30KKworLyoKKyAqICA9PT09PT09PSBnYl9taW5jbGVhciA9PT09PT09PQorICogIHB1cnBvc2U6CisgKiAgICAgIHJldHVybnMgdGhlIGxvY2F0aW9uIG9mIHRoZSBmaXJzdCB1bnNldCBiaXQgaW4gdGhlIGJpdCBtYXAuCisgKi8KK3UzMiBnYl9taW5jbGVhcihzdHJ1Y3QgZ2JfdF9tYXAgKm1hcCkKK3sKKwl1MzIgYml0X2xvY2F0aW9uID0gMDsKKwl1MzIgYml0X2FjYyA9IDA7CisJdTMyIGk7CisJdTMyIGJpdDsKKwl1MzIgKndvcmQ7CisKKwlmb3IgKHdvcmQgPSBtYXAtPndvcmRzLCBpID0gMDsgaSA8IG1hcC0+d2NudDsgd29yZCsrLCBpKyspIHsKKwkJaWYgKH4qd29yZCkgeworCQkJZm9yIChiaXQgPSAwOyBiaXQgPCBCSVRTX1BFUl9MT05HOyBiaXQrKywgYml0X2FjYysrKSB7CisJCQkJaWYgKGJpdF9hY2MgPT0gbWFwLT5sZW4pCisJCQkJCXJldHVybiBHQl9OT0JJVFM7CisKKwkJCQlpZiAofip3b3JkICYgKDFMIDw8IGJpdCkpIHsKKwkJCQkJYml0X2xvY2F0aW9uID0gaSAqIEJJVFNfUEVSX0xPTkcgKyBiaXQ7CisJCQkJCXJldHVybiBiaXRfbG9jYXRpb247CisJCQkJfQorCisJCQl9CisJCX0gZWxzZSB7CisJCQliaXRfYWNjICs9IEJJVFNfUEVSX0xPTkc7CisJCX0KKwl9CisKKwlyZXR1cm4gR0JfTk9CSVRTOworfQorCisvKgorICogID09PT09PT09IGdiX3NldCA9PT09PT09PQorICogIHB1cnBvc2U6CisgKiAgICAgIFNldHMgYSBiaXQgaW4gdGhlIGJpdCBtYXAuCisgKi8KKwordm9pZCBnYl9zZXQoc3RydWN0IGdiX3RfbWFwICptYXAsIHUzMiBiaXRuKQoreworCXUzMiBtYXNrOworCisJbWFzayA9IDFMIDw8IChiaXRuICUgQklUU19QRVJfTE9ORyk7CisJbWFwLT53b3Jkc1tiaXRuIC8gQklUU19QRVJfTE9OR10gfD0gbWFzazsKK30KKworLyoKKyAqICA9PT09PT09PSBnYl90ZXN0ID09PT09PT09CisgKiAgcHVycG9zZToKKyAqICAgICAgUmV0dXJucyB0cnVlIGlmIHRoZSBiaXQgaXMgc2V0IGluIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uCisgKi8KKworYm9vbCBnYl90ZXN0KHN0cnVjdCBnYl90X21hcCAqbWFwLCB1MzIgYml0bikKK3sKKwlib29sIHN0YXRlOworCXUzMiBtYXNrOworCXUzMiB3b3JkOworCisJbWFzayA9IDFMIDw8IChiaXRuICUgQklUU19QRVJfTE9ORyk7CisJd29yZCA9IG1hcC0+d29yZHNbYml0biAvIEJJVFNfUEVSX0xPTkddOworCXN0YXRlID0gd29yZCAmIG1hc2sgPyB0cnVlIDogZmFsc2U7CisKKwlyZXR1cm4gc3RhdGU7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZ2VuL2doLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZ2VuL2doLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcyZDk0MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9nZW4vZ2guYwpAQCAtMCwwICsxLDIxNSBAQAorLyoKKyAqIGdoLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgorCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2dzLmg+CisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZ2guaD4KKworc3RydWN0IGVsZW1lbnQgeworCXN0cnVjdCBlbGVtZW50ICpuZXh0OworCXU4IGRhdGFbMV07Cit9OworCitzdHJ1Y3QgZ2hfdF9oYXNoX3RhYiB7CisJdTE2IG1heF9idWNrZXQ7CisJdTE2IHZhbF9zaXplOworCXN0cnVjdCBlbGVtZW50ICoqYnVja2V0czsKKwkgdTE2KCpoYXNoKSAodm9pZCAqLCB1MTYpOworCSBib29sKCptYXRjaCkgKHZvaWQgKiwgdm9pZCAqKTsKKwl2b2lkICgqZGVsZXRlKSAodm9pZCAqKTsKK307CisKK3N0YXRpYyB2b2lkIG5vb3Aodm9pZCAqcCk7CitzdGF0aWMgczMyIGN1cl9pbml0Oworc3RhdGljIHZvaWQgbXlmcmVlKHZvaWQgKnB0ciwgczMyIHNpemUpOworCisvKgorICogID09PT09PT09IGdoX2NyZWF0ZSA9PT09PT09PQorICovCisKK3N0cnVjdCBnaF90X2hhc2hfdGFiICpnaF9jcmVhdGUodTE2IG1heF9idWNrZXQsIHUxNiB2YWxfc2l6ZSwKKwkJCQl1MTYoKmhhc2gpICh2b2lkICosIHUxNiksIGJvb2woKm1hdGNoKSAodm9pZCAqLAorCQkJCQkJCQkJdm9pZCAqKSwKKwkJCQl2b2lkICgqZGVsZXRlKSAodm9pZCAqKSkKK3sKKwlzdHJ1Y3QgZ2hfdF9oYXNoX3RhYiAqaGFzaF90YWI7CisJdTE2IGk7CisJaGFzaF90YWIgPQorCSAgICAoc3RydWN0IGdoX3RfaGFzaF90YWIgKilnc19hbGxvYyhzaXplb2Yoc3RydWN0IGdoX3RfaGFzaF90YWIpKTsKKwlpZiAoaGFzaF90YWIgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJaGFzaF90YWItPm1heF9idWNrZXQgPSBtYXhfYnVja2V0OworCWhhc2hfdGFiLT52YWxfc2l6ZSA9IHZhbF9zaXplOworCWhhc2hfdGFiLT5oYXNoID0gaGFzaDsKKwloYXNoX3RhYi0+bWF0Y2ggPSBtYXRjaDsKKwloYXNoX3RhYi0+ZGVsZXRlID0gZGVsZXRlID09IE5VTEwgPyBub29wIDogZGVsZXRlOworCisJaGFzaF90YWItPmJ1Y2tldHMgPSAoc3RydWN0IGVsZW1lbnQgKiopCisJICAgIGdzX2FsbG9jKHNpemVvZihzdHJ1Y3QgZWxlbWVudCAqKSAqIG1heF9idWNrZXQpOworCWlmIChoYXNoX3RhYi0+YnVja2V0cyA9PSBOVUxMKSB7CisJCWdoX2RlbGV0ZShoYXNoX3RhYik7CisJCXJldHVybiBOVUxMOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBtYXhfYnVja2V0OyBpKyspCisJCWhhc2hfdGFiLT5idWNrZXRzW2ldID0gTlVMTDsKKworCXJldHVybiBoYXNoX3RhYjsKK30KKworLyoKKyAqICA9PT09PT09PSBnaF9kZWxldGUgPT09PT09PT0KKyAqLwordm9pZCBnaF9kZWxldGUoc3RydWN0IGdoX3RfaGFzaF90YWIgKmhhc2hfdGFiKQoreworCXN0cnVjdCBlbGVtZW50ICplbGVtLCAqbmV4dDsKKwl1MTYgaTsKKworCWlmIChoYXNoX3RhYiAhPSBOVUxMKSB7CisJCWlmIChoYXNoX3RhYi0+YnVja2V0cyAhPSBOVUxMKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgaGFzaF90YWItPm1heF9idWNrZXQ7IGkrKykgeworCQkJCWZvciAoZWxlbSA9IGhhc2hfdGFiLT5idWNrZXRzW2ldOyBlbGVtICE9IE5VTEw7CisJCQkJICAgICBlbGVtID0gbmV4dCkgeworCQkJCQluZXh0ID0gZWxlbS0+bmV4dDsKKwkJCQkJKCpoYXNoX3RhYi0+ZGVsZXRlKSAoZWxlbS0+ZGF0YSk7CisJCQkJCW15ZnJlZShlbGVtLAorCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBlbGVtZW50KSAtIDEgKworCQkJCQkgICAgICAgaGFzaF90YWItPnZhbF9zaXplKTsKKwkJCQl9CisJCQl9CisKKwkJCW15ZnJlZShoYXNoX3RhYi0+YnVja2V0cywgc2l6ZW9mKHN0cnVjdCBlbGVtZW50ICopCisJCQkgICAgICAgKiBoYXNoX3RhYi0+bWF4X2J1Y2tldCk7CisJCX0KKworCQlteWZyZWUoaGFzaF90YWIsIHNpemVvZihzdHJ1Y3QgZ2hfdF9oYXNoX3RhYikpOworCX0KK30KKworLyoKKyAqICA9PT09PT09PSBnaF9leGl0ID09PT09PT09CisgKi8KKwordm9pZCBnaF9leGl0KHZvaWQpCit7CisJaWYgKGN1cl9pbml0LS0gPT0gMSkKKwkJZ3NfZXhpdCgpOworCit9CisKKy8qCisgKiAgPT09PT09PT0gZ2hfZmluZCA9PT09PT09PQorICovCisKK3ZvaWQgKmdoX2ZpbmQoc3RydWN0IGdoX3RfaGFzaF90YWIgKmhhc2hfdGFiLCB2b2lkICprZXkpCit7CisJc3RydWN0IGVsZW1lbnQgKmVsZW07CisKKwllbGVtID0gaGFzaF90YWItPmJ1Y2tldHNbKCpoYXNoX3RhYi0+aGFzaCkgKGtleSwgaGFzaF90YWItPm1heF9idWNrZXQpXTsKKworCWZvciAoOyBlbGVtOyBlbGVtID0gZWxlbS0+bmV4dCkgeworCQlpZiAoKCpoYXNoX3RhYi0+bWF0Y2gpIChrZXksIGVsZW0tPmRhdGEpKQorCQkJcmV0dXJuIGVsZW0tPmRhdGE7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZ2hfaW5pdCA9PT09PT09PQorICovCisKK3ZvaWQgZ2hfaW5pdCh2b2lkKQoreworCWlmIChjdXJfaW5pdCsrID09IDApCisJCWdzX2luaXQoKTsKK30KKworLyoKKyAqICA9PT09PT09PSBnaF9pbnNlcnQgPT09PT09PT0KKyAqLworCit2b2lkICpnaF9pbnNlcnQoc3RydWN0IGdoX3RfaGFzaF90YWIgKmhhc2hfdGFiLCB2b2lkICprZXksIHZvaWQgKnZhbHVlKQoreworCXN0cnVjdCBlbGVtZW50ICplbGVtOworCXUxNiBpOworCWNoYXIgKnNyYywgKmRzdDsKKworCWVsZW0gPSAoc3RydWN0IGVsZW1lbnQgKilnc19hbGxvYyhzaXplb2Yoc3RydWN0IGVsZW1lbnQpIC0gMSArCisJCQkJCSAgaGFzaF90YWItPnZhbF9zaXplKTsKKwlpZiAoZWxlbSAhPSBOVUxMKSB7CisKKwkJZHN0ID0gKGNoYXIgKillbGVtLT5kYXRhOworCQlzcmMgPSAoY2hhciAqKXZhbHVlOworCQlmb3IgKGkgPSAwOyBpIDwgaGFzaF90YWItPnZhbF9zaXplOyBpKyspCisJCQkqZHN0KysgPSAqc3JjKys7CisKKwkJaSA9ICgqaGFzaF90YWItPmhhc2gpIChrZXksIGhhc2hfdGFiLT5tYXhfYnVja2V0KTsKKwkJZWxlbS0+bmV4dCA9IGhhc2hfdGFiLT5idWNrZXRzW2ldOworCQloYXNoX3RhYi0+YnVja2V0c1tpXSA9IGVsZW07CisKKwkJcmV0dXJuIGVsZW0tPmRhdGE7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9vcCA9PT09PT09PQorICovCisvKiBBUkdTVVNFRCAqLworc3RhdGljIHZvaWQgbm9vcCh2b2lkICpwKQoreworCXAgPSBwOwkJCS8qIHN0aWZsZSBjb21waWxlciB3YXJuaW5nICovCit9CisKKy8qCisgKiAgPT09PT09PT0gbXlmcmVlID09PT09PT09CisgKi8KK3N0YXRpYyB2b2lkIG15ZnJlZSh2b2lkICpwdHIsIHMzMiBzaXplKQoreworCWdzX2ZyZWUocHRyKTsKK30KKworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9CQUNLVFJBQ0UKKy8qKgorICogZ2hfaXRlcmF0ZSgpIC0gVGhpcyBmdW5jdGlvbiBnb2VzIHRocm91Z2ggYWxsIHRoZSBlbGVtZW50cyBpbiB0aGUgaGFzaCB0YWJsZQorICoJCWxvb2tpbmcgZm9yIHRoZSBkc3Agc3ltYm9scy4KKyAqIEBoYXNoX3RhYjoJSGFzaCB0YWJsZQorICogQGNhbGxiYWNrOglwb2ludGVyIHRvIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBAdXNlcl9kYXRhOglVc2VyIGRhdGEsIGNvbnRhaW5zIHRoZSBmaW5kX3N5bWJvbF9jb250ZXh0IHBvaW50ZXIKKyAqCisgKi8KK3ZvaWQgZ2hfaXRlcmF0ZShzdHJ1Y3QgZ2hfdF9oYXNoX3RhYiAqaGFzaF90YWIsCisJCXZvaWQgKCpjYWxsYmFjaykodm9pZCAqLCB2b2lkICopLCB2b2lkICp1c2VyX2RhdGEpCit7CisJc3RydWN0IGVsZW1lbnQgKmVsZW07CisJdTMyIGk7CisKKwlpZiAoaGFzaF90YWIgJiYgaGFzaF90YWItPmJ1Y2tldHMpCisJCWZvciAoaSA9IDA7IGkgPCBoYXNoX3RhYi0+bWF4X2J1Y2tldDsgaSsrKSB7CisJCQllbGVtID0gaGFzaF90YWItPmJ1Y2tldHNbaV07CisJCQl3aGlsZSAoZWxlbSkgeworCQkJCWNhbGxiYWNrKCZlbGVtLT5kYXRhLCB1c2VyX2RhdGEpOworCQkJCWVsZW0gPSBlbGVtLT5uZXh0OworCQkJfQorCQl9Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9nZW4vZ3MuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9nZW4vZ3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmM2MTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2dlbi9ncy5jCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBncy5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIEdlbmVyYWwgc3RvcmFnZSBtZW1vcnkgYWxsb2NhdG9yIHNlcnZpY2VzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhpcyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9ncy5oPgorCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFscyAqLworc3RhdGljIHUzMiBjdW1zaXplOworCisvKgorICogID09PT09PT09IGdzX2FsbG9jID09PT09PT09CisgKiAgcHVycG9zZToKKyAqICAgICAgQWxsb2NhdGVzIG1lbW9yeSBvZiB0aGUgc3BlY2lmaWVkIHNpemUuCisgKi8KK3ZvaWQgKmdzX2FsbG9jKHUzMiBzaXplKQoreworCXZvaWQgKnA7CisKKwlwID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAocCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwljdW1zaXplICs9IHNpemU7CisJcmV0dXJuIHA7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZ3NfZXhpdCA9PT09PT09PQorICogIHB1cnBvc2U6CisgKiAgICAgIERpc2NvbnRpbnVlIHRoZSB1c2FnZSBvZiB0aGUgR1MgbW9kdWxlLgorICovCit2b2lkIGdzX2V4aXQodm9pZCkKK3sKKwkvKiBEbyBub3RoaW5nICovCit9CisKKy8qCisgKiAgPT09PT09PT0gZ3NfZnJlZSA9PT09PT09PQorICogIHB1cnBvc2U6CisgKiAgICAgIEZyZWVzIHRoZSBtZW1vcnkuCisgKi8KK3ZvaWQgZ3NfZnJlZSh2b2lkICpwdHIpCit7CisJa2ZyZWUocHRyKTsKKwkvKiBhY2shIG5vIHNpemUgaW5mbyAqLworCS8qIGN1bXNpemUgLT0gc2l6ZTsgKi8KK30KKworLyoKKyAqICA9PT09PT09PSBnc19mcmVlcyA9PT09PT09PQorICogIHB1cnBvc2U6CisgKiAgICAgIEZyZWVzIHRoZSBtZW1vcnkuCisgKi8KK3ZvaWQgZ3NfZnJlZXModm9pZCAqcHRyLCB1MzIgc2l6ZSkKK3sKKwlrZnJlZShwdHIpOworCWN1bXNpemUgLT0gc2l6ZTsKK30KKworLyoKKyAqICA9PT09PT09PSBnc19pbml0ID09PT09PT09CisgKiAgcHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZXMgdGhlIEdTIG1vZHVsZS4KKyAqLwordm9pZCBnc19pbml0KHZvaWQpCit7CisJLyogRG8gbm90aGluZyAqLworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2dlbi91dWlkdXRpbC5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2dlbi91dWlkdXRpbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMzljNGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZ2VuL3V1aWR1dGlsLmMKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiB1dWlkdXRpbC5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaW1wbGVtZW50YXRpb24gb2YgVVVJRCBoZWxwZXIgZnVuY3Rpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhvc3QgT1MgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRFNQL0JJT1MgQnJpZGdlICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHJhY2UgJiBEZWJ1ZyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvdXVpZHV0aWwuaD4KKworLyoKKyAqICA9PT09PT09PSB1dWlkX3V1aWRfdG9fc3RyaW5nID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ29udmVydHMgYSBzdHJ1Y3QgZHNwX3V1aWQgdG8gYSBzdHJpbmcuCisgKiAgICAgIE5vdGU6IHNucHJpbnRmIGZvcm1hdCBzcGVjaWZpZXIgaXM6CisgKiAgICAgICVbZmxhZ3NdIFt3aWR0aF0gWy5wcmVjaXNpb25dIFt7aCB8IGwgfCBJNjQgfCBMfV10eXBlCisgKi8KK3ZvaWQgdXVpZF91dWlkX3RvX3N0cmluZyhzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqLCBjaGFyICpzel91dWlkLAorCQkJIHMzMiBzaXplKQoreworCXMzMiBpOwkJCS8qIHJldHVybiByZXN1bHQgZnJvbSBzbnByaW50Zi4gKi8KKworCURCQ19SRVFVSVJFKHV1aWRfb2JqICYmIHN6X3V1aWQpOworCisJaSA9IHNucHJpbnRmKHN6X3V1aWQsIHNpemUsCisJCSAgICAgIiUuOFhfJS40WF8lLjRYXyUuMlglLjJYXyUuMlglLjJYJS4yWCUuMlglLjJYJS4yWCIsCisJCSAgICAgdXVpZF9vYmotPnVsX2RhdGExLCB1dWlkX29iai0+dXNfZGF0YTIsIHV1aWRfb2JqLT51c19kYXRhMywKKwkJICAgICB1dWlkX29iai0+dWNfZGF0YTQsIHV1aWRfb2JqLT51Y19kYXRhNSwKKwkJICAgICB1dWlkX29iai0+dWNfZGF0YTZbMF0sIHV1aWRfb2JqLT51Y19kYXRhNlsxXSwKKwkJICAgICB1dWlkX29iai0+dWNfZGF0YTZbMl0sIHV1aWRfb2JqLT51Y19kYXRhNlszXSwKKwkJICAgICB1dWlkX29iai0+dWNfZGF0YTZbNF0sIHV1aWRfb2JqLT51Y19kYXRhNls1XSk7CisKKwlEQkNfRU5TVVJFKGkgIT0gLTEpOworfQorCitzdGF0aWMgczMyIHV1aWRfaGV4X3RvX2JpbihjaGFyICpidWYsIHMzMiBsZW4pCit7CisJczMyIGk7CisJczMyIHJlc3VsdCA9IDA7CisJaW50IHZhbHVlOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCXZhbHVlID0gaGV4X3RvX2JpbigqYnVmKyspOworCQlyZXN1bHQgKj0gMTY7CisJCWlmICh2YWx1ZSA+IDApCisJCQlyZXN1bHQgKz0gdmFsdWU7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqICA9PT09PT09PSB1dWlkX3V1aWRfZnJvbV9zdHJpbmcgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDb252ZXJ0cyBhIHN0cmluZyB0byBhIHN0cnVjdCBkc3BfdXVpZC4KKyAqLwordm9pZCB1dWlkX3V1aWRfZnJvbV9zdHJpbmcoY2hhciAqc3pfdXVpZCwgc3RydWN0IGRzcF91dWlkICp1dWlkX29iaikKK3sKKwlzMzIgajsKKworCXV1aWRfb2JqLT51bF9kYXRhMSA9IHV1aWRfaGV4X3RvX2Jpbihzel91dWlkLCA4KTsKKwlzel91dWlkICs9IDg7CisKKwkvKiBTdGVwIG92ZXIgdW5kZXJzY29yZSAqLworCXN6X3V1aWQrKzsKKworCXV1aWRfb2JqLT51c19kYXRhMiA9ICh1MTYpIHV1aWRfaGV4X3RvX2Jpbihzel91dWlkLCA0KTsKKwlzel91dWlkICs9IDQ7CisKKwkvKiBTdGVwIG92ZXIgdW5kZXJzY29yZSAqLworCXN6X3V1aWQrKzsKKworCXV1aWRfb2JqLT51c19kYXRhMyA9ICh1MTYpIHV1aWRfaGV4X3RvX2Jpbihzel91dWlkLCA0KTsKKwlzel91dWlkICs9IDQ7CisKKwkvKiBTdGVwIG92ZXIgdW5kZXJzY29yZSAqLworCXN6X3V1aWQrKzsKKworCXV1aWRfb2JqLT51Y19kYXRhNCA9ICh1OCkgdXVpZF9oZXhfdG9fYmluKHN6X3V1aWQsIDIpOworCXN6X3V1aWQgKz0gMjsKKworCXV1aWRfb2JqLT51Y19kYXRhNSA9ICh1OCkgdXVpZF9oZXhfdG9fYmluKHN6X3V1aWQsIDIpOworCXN6X3V1aWQgKz0gMjsKKworCS8qIFN0ZXAgb3ZlciB1bmRlcnNjb3JlICovCisJc3pfdXVpZCsrOworCisJZm9yIChqID0gMDsgaiA8IDY7IGorKykgeworCQl1dWlkX29iai0+dWNfZGF0YTZbal0gPSAodTgpIHV1aWRfaGV4X3RvX2Jpbihzel91dWlkLCAyKTsKKwkJc3pfdXVpZCArPSAyOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ody9FYXNpR2xvYmFsLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaHcvRWFzaUdsb2JhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0OGQ3ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaHcvRWFzaUdsb2JhbC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBFYXNpR2xvYmFsLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgX0VBU0lHTE9CQUxfSAorI2RlZmluZSBfRUFTSUdMT0JBTF9ICisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIERFRklORTogICAgICAgIFJFQURfT05MWSwgV1JJVEVfT05MWSAmICBSRUFEX1dSSVRFCisgKgorICogREVTQ1JJUFRJT046IERlZmluZXMgdXNlZCB0byBkZXNjcmliZSByZWdpc3RlciB0eXBlcyBmb3IgRUFTSS1jaGVja2VyIHRlc3RzLgorICovCisKKyNkZWZpbmUgUkVBRF9PTkxZICAgIDEKKyNkZWZpbmUgV1JJVEVfT05MWSAgIDIKKyNkZWZpbmUgUkVBRF9XUklURSAgIDMKKworLyoKKyAqIE1BQ1JPOiAgICAgICAgX0RFQlVHX0xFVkVMMV9FQVNJCisgKgorICogREVTQ1JJUFRJT046ICBBIE1BQ1JPIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgYSBwYXJ0aWN1bGFyIGJlYWNoCisgKiAgICAgICAgICAgICAgIHJlZ2lzdGVyIGFjY2VzcyBmdW5jdGlvbiB3YXMgY2FsbGVkLgorICoKKyAqIE5PVEU6ICAgICAgICAgV2UgY3VycmVudGx5IGRvbnQgdXNlIHRoaXMgZnVuY3Rpb25hbGl0eS4KKyAqLworI2RlZmluZSBfREVCVUdfTEVWRUwxX0VBU0koZWFzaV9udW0pICAgICAoKHZvaWQpMCkKKworI2VuZGlmIC8qIF9FQVNJR0xPQkFMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ody9NTVVBY2NJbnQuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ody9NTVVBY2NJbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2VmY2EzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2h3L01NVUFjY0ludC5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBNTVVBY2NJbnQuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBfTU1VX0FDQ19JTlRfSAorI2RlZmluZSBfTU1VX0FDQ19JTlRfSAorCisvKiBNYXBwaW5ncyBvZiBsZXZlbCAxIEVBU0kgZnVuY3Rpb24gbnVtYmVycyB0byBmdW5jdGlvbiBuYW1lcyAqLworCisjZGVmaW5lIEVBU0lMMV9NTVVNTVVfU1lTQ09ORklHX1JFQURfUkVHSVNURVIzMiAoTU1VX0JBU0VfRUFTSUwxICsgMykKKyNkZWZpbmUgRUFTSUwxX01NVU1NVV9TWVNDT05GSUdfSURMRV9NT0RFX1dSSVRFMzIgIChNTVVfQkFTRV9FQVNJTDEgKyAxNykKKyNkZWZpbmUgRUFTSUwxX01NVU1NVV9TWVNDT05GSUdfQVVUT19JRExFX1dSSVRFMzIgICAgKE1NVV9CQVNFX0VBU0lMMSArIDM5KQorI2RlZmluZSBFQVNJTDFfTU1VTU1VX0lSUVNUQVRVU19XUklURV9SRUdJU1RFUjMyICAgKE1NVV9CQVNFX0VBU0lMMSArIDUxKQorI2RlZmluZSBFQVNJTDFfTU1VTU1VX0lSUUVOQUJMRV9SRUFEX1JFR0lTVEVSMzIgKE1NVV9CQVNFX0VBU0lMMSArIDEwMikKKyNkZWZpbmUgRUFTSUwxX01NVU1NVV9JUlFFTkFCTEVfV1JJVEVfUkVHSVNURVIzMiAoTU1VX0JBU0VfRUFTSUwxICsgMTAzKQorI2RlZmluZSBFQVNJTDFfTU1VTU1VX1dBTEtJTkdfU1RUV0xfUlVOTklOR19SRUFEMzIgKE1NVV9CQVNFX0VBU0lMMSArIDE1NikKKyNkZWZpbmUgRUFTSUwxX01NVU1NVV9DTlRMVFdMX0VOQUJMRV9SRUFEMzIgKE1NVV9CQVNFX0VBU0lMMSArIDE3NCkKKyNkZWZpbmUgRUFTSUwxX01NVU1NVV9DTlRMVFdMX0VOQUJMRV9XUklURTMyICAgKE1NVV9CQVNFX0VBU0lMMSArIDE4MCkKKyNkZWZpbmUgRUFTSUwxX01NVU1NVV9DTlRMTU1VX0VOQUJMRV9XUklURTMyICAgICAoTU1VX0JBU0VfRUFTSUwxICsgMTkwKQorI2RlZmluZSBFQVNJTDFfTU1VTU1VX0ZBVUxUX0FEX1JFQURfUkVHSVNURVIzMiAgIChNTVVfQkFTRV9FQVNJTDEgKyAxOTQpCisjZGVmaW5lIEVBU0lMMV9NTVVNTVVfVFRCX1dSSVRFX1JFR0lTVEVSMzIgIChNTVVfQkFTRV9FQVNJTDEgKyAxOTgpCisjZGVmaW5lIEVBU0lMMV9NTVVNTVVfTE9DS19SRUFEX1JFR0lTVEVSMzIgICAoTU1VX0JBU0VfRUFTSUwxICsgMjAzKQorI2RlZmluZSBFQVNJTDFfTU1VTU1VX0xPQ0tfV1JJVEVfUkVHSVNURVIzMiAgKE1NVV9CQVNFX0VBU0lMMSArIDIwNCkKKyNkZWZpbmUgRUFTSUwxX01NVU1NVV9MT0NLX0JBU0VfVkFMVUVfUkVBRDMyICAoTU1VX0JBU0VfRUFTSUwxICsgMjA1KQorI2RlZmluZSBFQVNJTDFfTU1VTU1VX0xPQ0tfQ1VSUkVOVF9WSUNUSU1fUkVBRDMyIChNTVVfQkFTRV9FQVNJTDEgKyAyMDkpCisjZGVmaW5lIEVBU0lMMV9NTVVNTVVfTE9DS19DVVJSRU5UX1ZJQ1RJTV9XUklURTMyIChNTVVfQkFTRV9FQVNJTDEgKyAyMTEpCisjZGVmaW5lIEVBU0lMMV9NTVVNTVVfTE9DS19DVVJSRU5UX1ZJQ1RJTV9TRVQzMiAgKE1NVV9CQVNFX0VBU0lMMSArIDIxMikKKyNkZWZpbmUgRUFTSUwxX01NVU1NVV9MRF9UTEJfUkVBRF9SRUdJU1RFUjMyICAgIChNTVVfQkFTRV9FQVNJTDEgKyAyMTMpCisjZGVmaW5lIEVBU0lMMV9NTVVNTVVfTERfVExCX1dSSVRFX1JFR0lTVEVSMzIgICAoTU1VX0JBU0VfRUFTSUwxICsgMjE0KQorI2RlZmluZSBFQVNJTDFfTU1VTU1VX0NBTV9XUklURV9SRUdJU1RFUjMyICAgKE1NVV9CQVNFX0VBU0lMMSArIDIyNikKKyNkZWZpbmUgRUFTSUwxX01NVU1NVV9SQU1fV1JJVEVfUkVHSVNURVIzMiAoTU1VX0JBU0VfRUFTSUwxICsgMjY4KQorI2RlZmluZSBFQVNJTDFfTU1VTU1VX0ZMVVNIX0VOVFJZX1dSSVRFX1JFR0lTVEVSMzIgIChNTVVfQkFTRV9FQVNJTDEgKyAzMjIpCisKKy8qIFJlZ2lzdGVyIG9mZnNldCBhZGRyZXNzIGRlZmluaXRpb25zICovCisjZGVmaW5lIE1NVV9NTVVfU1lTQ09ORklHX09GRlNFVCAgIDB4MTAKKyNkZWZpbmUgTU1VX01NVV9JUlFTVEFUVVNfT0ZGU0VUICAweDE4CisjZGVmaW5lIE1NVV9NTVVfSVJRRU5BQkxFX09GRlNFVCAgICAweDFjCisjZGVmaW5lIE1NVV9NTVVfV0FMS0lOR19TVF9PRkZTRVQgMHg0MAorI2RlZmluZSBNTVVfTU1VX0NOVExfT0ZGU0VUICAgMHg0NAorI2RlZmluZSBNTVVfTU1VX0ZBVUxUX0FEX09GRlNFVCAgMHg0OAorI2RlZmluZSBNTVVfTU1VX1RUQl9PRkZTRVQgIDB4NGMKKyNkZWZpbmUgTU1VX01NVV9MT0NLX09GRlNFVCAgIDB4NTAKKyNkZWZpbmUgTU1VX01NVV9MRF9UTEJfT0ZGU0VUICAweDU0CisjZGVmaW5lIE1NVV9NTVVfQ0FNX09GRlNFVCAgIDB4NTgKKyNkZWZpbmUgTU1VX01NVV9SQU1fT0ZGU0VUICAgMHg1YworI2RlZmluZSBNTVVfTU1VX0dGTFVTSF9PRkZTRVQgIDB4NjAKKyNkZWZpbmUgTU1VX01NVV9GTFVTSF9FTlRSWV9PRkZTRVQgIDB4NjQKKy8qIEJpdGZpZWxkIG1hc2sgYW5kIG9mZnNldCBkZWNsYXJhdGlvbnMgKi8KKyNkZWZpbmUgTU1VX01NVV9TWVNDT05GSUdfSURMRV9NT0RFX01BU0sgIDB4MTgKKyNkZWZpbmUgTU1VX01NVV9TWVNDT05GSUdfSURMRV9NT0RFX09GRlNFVCAgMworI2RlZmluZSBNTVVfTU1VX1NZU0NPTkZJR19BVVRPX0lETEVfTUFTSyAgMHgxCisjZGVmaW5lIE1NVV9NTVVfU1lTQ09ORklHX0FVVE9fSURMRV9PRkZTRVQgICAwCisjZGVmaW5lIE1NVV9NTVVfV0FMS0lOR19TVF9UV0xfUlVOTklOR19NQVNLIDB4MQorI2RlZmluZSBNTVVfTU1VX1dBTEtJTkdfU1RfVFdMX1JVTk5JTkdfT0ZGU0VUICAwCisjZGVmaW5lIE1NVV9NTVVfQ05UTF9UV0xfRU5BQkxFX01BU0sgMHg0CisjZGVmaW5lIE1NVV9NTVVfQ05UTF9UV0xfRU5BQkxFX09GRlNFVCAyCisjZGVmaW5lIE1NVV9NTVVfQ05UTF9NTVVfRU5BQkxFX01BU0sgICAgMHgyCisjZGVmaW5lIE1NVV9NTVVfQ05UTF9NTVVfRU5BQkxFX09GRlNFVCAgIDEKKyNkZWZpbmUgTU1VX01NVV9MT0NLX0JBU0VfVkFMVUVfTUFTSyAweGZjMDAKKyNkZWZpbmUgTU1VX01NVV9MT0NLX0JBU0VfVkFMVUVfT0ZGU0VUICAgMTAKKyNkZWZpbmUgTU1VX01NVV9MT0NLX0NVUlJFTlRfVklDVElNX01BU0sgICAweDNmMAorI2RlZmluZSBNTVVfTU1VX0xPQ0tfQ1VSUkVOVF9WSUNUSU1fT0ZGU0VUICAgIDQKKworI2VuZGlmIC8qIF9NTVVfQUNDX0lOVF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaHcvTU1VUmVnQWNNLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaHcvTU1VUmVnQWNNLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIxYTE2ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ody9NTVVSZWdBY00uaApAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIE1NVVJlZ0FjTS5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIF9NTVVfUkVHX0FDTV9ICisjZGVmaW5lIF9NTVVfUkVHX0FDTV9ICisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPEVhc2lHbG9iYWwuaD4KKworI2luY2x1ZGUgIk1NVUFjY0ludC5oIgorCisjaWYgZGVmaW5lZChVU0VfTEVWRUxfMV9NQUNST1MpCisKKyNkZWZpbmUgTU1VTU1VX1NZU0NPTkZJR19SRUFEX1JFR0lTVEVSMzIoYmFzZV9hZGRyZXNzKVwKKyAgICAoX0RFQlVHX0xFVkVMMV9FQVNJKEVBU0lMMV9NTVVNTVVfU1lTQ09ORklHX1JFQURfUkVHSVNURVIzMiksXAorICAgICAgX19yYXdfcmVhZGwoKGJhc2VfYWRkcmVzcykrTU1VX01NVV9TWVNDT05GSUdfT0ZGU0VUKSkKKworI2RlZmluZSBNTVVNTVVfU1lTQ09ORklHX0lETEVfTU9ERV9XUklURTMyKGJhc2VfYWRkcmVzcywgdmFsdWUpXAore1wKKyAgICBjb25zdCB1MzIgb2Zmc2V0ID0gTU1VX01NVV9TWVNDT05GSUdfT0ZGU0VUO1wKKyAgICByZWdpc3RlciB1MzIgZGF0YSA9IF9fcmF3X3JlYWRsKChiYXNlX2FkZHJlc3MpK29mZnNldCk7XAorICAgIHJlZ2lzdGVyIHUzMiBuZXdfdmFsdWUgPSAodmFsdWUpO1wKKyAgICBfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9TWVNDT05GSUdfSURMRV9NT0RFX1dSSVRFMzIpO1wKKyAgICBkYXRhICY9IH4oTU1VX01NVV9TWVNDT05GSUdfSURMRV9NT0RFX01BU0spO1wKKyAgICBuZXdfdmFsdWUgPDw9IE1NVV9NTVVfU1lTQ09ORklHX0lETEVfTU9ERV9PRkZTRVQ7XAorICAgIG5ld192YWx1ZSAmPSBNTVVfTU1VX1NZU0NPTkZJR19JRExFX01PREVfTUFTSztcCisgICAgbmV3X3ZhbHVlIHw9IGRhdGE7XAorICAgIF9fcmF3X3dyaXRlbChuZXdfdmFsdWUsIGJhc2VfYWRkcmVzcytvZmZzZXQpO1wKK30KKworI2RlZmluZSBNTVVNTVVfU1lTQ09ORklHX0FVVE9fSURMRV9XUklURTMyKGJhc2VfYWRkcmVzcywgdmFsdWUpXAore1wKKyAgICBjb25zdCB1MzIgb2Zmc2V0ID0gTU1VX01NVV9TWVNDT05GSUdfT0ZGU0VUO1wKKyAgICByZWdpc3RlciB1MzIgZGF0YSA9IF9fcmF3X3JlYWRsKChiYXNlX2FkZHJlc3MpK29mZnNldCk7XAorICAgIHJlZ2lzdGVyIHUzMiBuZXdfdmFsdWUgPSAodmFsdWUpO1wKKyAgICBfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9TWVNDT05GSUdfQVVUT19JRExFX1dSSVRFMzIpO1wKKyAgICBkYXRhICY9IH4oTU1VX01NVV9TWVNDT05GSUdfQVVUT19JRExFX01BU0spO1wKKyAgICBuZXdfdmFsdWUgPDw9IE1NVV9NTVVfU1lTQ09ORklHX0FVVE9fSURMRV9PRkZTRVQ7XAorICAgIG5ld192YWx1ZSAmPSBNTVVfTU1VX1NZU0NPTkZJR19BVVRPX0lETEVfTUFTSztcCisgICAgbmV3X3ZhbHVlIHw9IGRhdGE7XAorICAgIF9fcmF3X3dyaXRlbChuZXdfdmFsdWUsIGJhc2VfYWRkcmVzcytvZmZzZXQpO1wKK30KKworI2RlZmluZSBNTVVNTVVfSVJRU1RBVFVTX1JFQURfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MpXAorICAgIChfREVCVUdfTEVWRUwxX0VBU0koZWFzaWwxX21tdW1tdV9pcnFzdGF0dXNfcmVhZF9yZWdpc3RlcjMyKSxcCisgICAgICBfX3Jhd19yZWFkbCgoYmFzZV9hZGRyZXNzKStNTVVfTU1VX0lSUVNUQVRVU19PRkZTRVQpKQorCisjZGVmaW5lIE1NVU1NVV9JUlFTVEFUVVNfV1JJVEVfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MsIHZhbHVlKVwKK3tcCisgICAgY29uc3QgdTMyIG9mZnNldCA9IE1NVV9NTVVfSVJRU1RBVFVTX09GRlNFVDtcCisgICAgcmVnaXN0ZXIgdTMyIG5ld192YWx1ZSA9ICh2YWx1ZSk7XAorICAgIF9ERUJVR19MRVZFTDFfRUFTSShFQVNJTDFfTU1VTU1VX0lSUVNUQVRVU19XUklURV9SRUdJU1RFUjMyKTtcCisgICAgX19yYXdfd3JpdGVsKG5ld192YWx1ZSwgKGJhc2VfYWRkcmVzcykrb2Zmc2V0KTtcCit9CisKKyNkZWZpbmUgTU1VTU1VX0lSUUVOQUJMRV9SRUFEX1JFR0lTVEVSMzIoYmFzZV9hZGRyZXNzKVwKKyAgICAoX0RFQlVHX0xFVkVMMV9FQVNJKEVBU0lMMV9NTVVNTVVfSVJRRU5BQkxFX1JFQURfUkVHSVNURVIzMiksXAorICAgICAgX19yYXdfcmVhZGwoKGJhc2VfYWRkcmVzcykrTU1VX01NVV9JUlFFTkFCTEVfT0ZGU0VUKSkKKworI2RlZmluZSBNTVVNTVVfSVJRRU5BQkxFX1dSSVRFX1JFR0lTVEVSMzIoYmFzZV9hZGRyZXNzLCB2YWx1ZSlcCit7XAorICAgIGNvbnN0IHUzMiBvZmZzZXQgPSBNTVVfTU1VX0lSUUVOQUJMRV9PRkZTRVQ7XAorICAgIHJlZ2lzdGVyIHUzMiBuZXdfdmFsdWUgPSAodmFsdWUpO1wKKyAgICBfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9JUlFFTkFCTEVfV1JJVEVfUkVHSVNURVIzMik7XAorICAgIF9fcmF3X3dyaXRlbChuZXdfdmFsdWUsIChiYXNlX2FkZHJlc3MpK29mZnNldCk7XAorfQorCisjZGVmaW5lIE1NVU1NVV9XQUxLSU5HX1NUVFdMX1JVTk5JTkdfUkVBRDMyKGJhc2VfYWRkcmVzcylcCisgICAgKF9ERUJVR19MRVZFTDFfRUFTSShFQVNJTDFfTU1VTU1VX1dBTEtJTkdfU1RUV0xfUlVOTklOR19SRUFEMzIpLFwKKyAgICAgICgoKF9fcmF3X3JlYWRsKCgoYmFzZV9hZGRyZXNzKSsoTU1VX01NVV9XQUxLSU5HX1NUX09GRlNFVCkpKSlcCisgICAgICAmIE1NVV9NTVVfV0FMS0lOR19TVF9UV0xfUlVOTklOR19NQVNLKSA+PlwKKyAgICAgIE1NVV9NTVVfV0FMS0lOR19TVF9UV0xfUlVOTklOR19PRkZTRVQpKQorCisjZGVmaW5lIE1NVU1NVV9DTlRMVFdMX0VOQUJMRV9SRUFEMzIoYmFzZV9hZGRyZXNzKVwKKyAgICAoX0RFQlVHX0xFVkVMMV9FQVNJKEVBU0lMMV9NTVVNTVVfQ05UTFRXTF9FTkFCTEVfUkVBRDMyKSxcCisgICAgICAoKChfX3Jhd19yZWFkbCgoKGJhc2VfYWRkcmVzcykrKE1NVV9NTVVfQ05UTF9PRkZTRVQpKSkpICZcCisgICAgICBNTVVfTU1VX0NOVExfVFdMX0VOQUJMRV9NQVNLKSA+PlwKKyAgICAgIE1NVV9NTVVfQ05UTF9UV0xfRU5BQkxFX09GRlNFVCkpCisKKyNkZWZpbmUgTU1VTU1VX0NOVExUV0xfRU5BQkxFX1dSSVRFMzIoYmFzZV9hZGRyZXNzLCB2YWx1ZSlcCit7XAorICAgIGNvbnN0IHUzMiBvZmZzZXQgPSBNTVVfTU1VX0NOVExfT0ZGU0VUO1wKKyAgICByZWdpc3RlciB1MzIgZGF0YSA9IF9fcmF3X3JlYWRsKChiYXNlX2FkZHJlc3MpK29mZnNldCk7XAorICAgIHJlZ2lzdGVyIHUzMiBuZXdfdmFsdWUgPSAodmFsdWUpO1wKKyAgICBfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9DTlRMVFdMX0VOQUJMRV9XUklURTMyKTtcCisgICAgZGF0YSAmPSB+KE1NVV9NTVVfQ05UTF9UV0xfRU5BQkxFX01BU0spO1wKKyAgICBuZXdfdmFsdWUgPDw9IE1NVV9NTVVfQ05UTF9UV0xfRU5BQkxFX09GRlNFVDtcCisgICAgbmV3X3ZhbHVlICY9IE1NVV9NTVVfQ05UTF9UV0xfRU5BQkxFX01BU0s7XAorICAgIG5ld192YWx1ZSB8PSBkYXRhO1wKKyAgICBfX3Jhd193cml0ZWwobmV3X3ZhbHVlLCBiYXNlX2FkZHJlc3Mrb2Zmc2V0KTtcCit9CisKKyNkZWZpbmUgTU1VTU1VX0NOVExNTVVfRU5BQkxFX1dSSVRFMzIoYmFzZV9hZGRyZXNzLCB2YWx1ZSlcCit7XAorICAgIGNvbnN0IHUzMiBvZmZzZXQgPSBNTVVfTU1VX0NOVExfT0ZGU0VUO1wKKyAgICByZWdpc3RlciB1MzIgZGF0YSA9IF9fcmF3X3JlYWRsKChiYXNlX2FkZHJlc3MpK29mZnNldCk7XAorICAgIHJlZ2lzdGVyIHUzMiBuZXdfdmFsdWUgPSAodmFsdWUpO1wKKyAgICBfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9DTlRMTU1VX0VOQUJMRV9XUklURTMyKTtcCisgICAgZGF0YSAmPSB+KE1NVV9NTVVfQ05UTF9NTVVfRU5BQkxFX01BU0spO1wKKyAgICBuZXdfdmFsdWUgPDw9IE1NVV9NTVVfQ05UTF9NTVVfRU5BQkxFX09GRlNFVDtcCisgICAgbmV3X3ZhbHVlICY9IE1NVV9NTVVfQ05UTF9NTVVfRU5BQkxFX01BU0s7XAorICAgIG5ld192YWx1ZSB8PSBkYXRhO1wKKyAgICBfX3Jhd193cml0ZWwobmV3X3ZhbHVlLCBiYXNlX2FkZHJlc3Mrb2Zmc2V0KTtcCit9CisKKyNkZWZpbmUgTU1VTU1VX0ZBVUxUX0FEX1JFQURfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MpXAorICAgIChfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9GQVVMVF9BRF9SRUFEX1JFR0lTVEVSMzIpLFwKKyAgICAgIF9fcmF3X3JlYWRsKChiYXNlX2FkZHJlc3MpK01NVV9NTVVfRkFVTFRfQURfT0ZGU0VUKSkKKworI2RlZmluZSBNTVVNTVVfVFRCX1dSSVRFX1JFR0lTVEVSMzIoYmFzZV9hZGRyZXNzLCB2YWx1ZSlcCit7XAorICAgIGNvbnN0IHUzMiBvZmZzZXQgPSBNTVVfTU1VX1RUQl9PRkZTRVQ7XAorICAgIHJlZ2lzdGVyIHUzMiBuZXdfdmFsdWUgPSAodmFsdWUpO1wKKyAgICBfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9UVEJfV1JJVEVfUkVHSVNURVIzMik7XAorICAgIF9fcmF3X3dyaXRlbChuZXdfdmFsdWUsIChiYXNlX2FkZHJlc3MpK29mZnNldCk7XAorfQorCisjZGVmaW5lIE1NVU1NVV9MT0NLX1JFQURfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MpXAorICAgIChfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9MT0NLX1JFQURfUkVHSVNURVIzMiksXAorICAgICAgX19yYXdfcmVhZGwoKGJhc2VfYWRkcmVzcykrTU1VX01NVV9MT0NLX09GRlNFVCkpCisKKyNkZWZpbmUgTU1VTU1VX0xPQ0tfV1JJVEVfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MsIHZhbHVlKVwKK3tcCisgICAgY29uc3QgdTMyIG9mZnNldCA9IE1NVV9NTVVfTE9DS19PRkZTRVQ7XAorICAgIHJlZ2lzdGVyIHUzMiBuZXdfdmFsdWUgPSAodmFsdWUpO1wKKyAgICBfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9MT0NLX1dSSVRFX1JFR0lTVEVSMzIpO1wKKyAgICBfX3Jhd193cml0ZWwobmV3X3ZhbHVlLCAoYmFzZV9hZGRyZXNzKStvZmZzZXQpO1wKK30KKworI2RlZmluZSBNTVVNTVVfTE9DS19CQVNFX1ZBTFVFX1JFQUQzMihiYXNlX2FkZHJlc3MpXAorICAgIChfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9MT0NLX0JBU0VfVkFMVUVfUkVBRDMyKSxcCisgICAgICAoKChfX3Jhd19yZWFkbCgoKGJhc2VfYWRkcmVzcykrKE1NVV9NTVVfTE9DS19PRkZTRVQpKSkpICZcCisgICAgICBNTVVfTU1VX0xPQ0tfQkFTRV9WQUxVRV9NQVNLKSA+PlwKKyAgICAgIE1NVV9NTVVfTE9DS19CQVNFX1ZBTFVFX09GRlNFVCkpCisKKyNkZWZpbmUgTU1VTU1VX0xPQ0tfQkFTRV9WQUxVRV9XUklURTMyKGJhc2VfYWRkcmVzcywgdmFsdWUpXAore1wKKyAgICBjb25zdCB1MzIgb2Zmc2V0ID0gTU1VX01NVV9MT0NLX09GRlNFVDtcCisgICAgcmVnaXN0ZXIgdTMyIGRhdGEgPSBfX3Jhd19yZWFkbCgoYmFzZV9hZGRyZXNzKStvZmZzZXQpO1wKKyAgICByZWdpc3RlciB1MzIgbmV3X3ZhbHVlID0gKHZhbHVlKTtcCisgICAgX0RFQlVHX0xFVkVMMV9FQVNJKGVhc2lsMV9tbXVtbXVfbG9ja19iYXNlX3ZhbHVlX3dyaXRlMzIpO1wKKyAgICBkYXRhICY9IH4oTU1VX01NVV9MT0NLX0JBU0VfVkFMVUVfTUFTSyk7XAorICAgIG5ld192YWx1ZSA8PD0gTU1VX01NVV9MT0NLX0JBU0VfVkFMVUVfT0ZGU0VUO1wKKyAgICBuZXdfdmFsdWUgJj0gTU1VX01NVV9MT0NLX0JBU0VfVkFMVUVfTUFTSztcCisgICAgbmV3X3ZhbHVlIHw9IGRhdGE7XAorICAgIF9fcmF3X3dyaXRlbChuZXdfdmFsdWUsIGJhc2VfYWRkcmVzcytvZmZzZXQpO1wKK30KKworI2RlZmluZSBNTVVNTVVfTE9DS19DVVJSRU5UX1ZJQ1RJTV9SRUFEMzIoYmFzZV9hZGRyZXNzKVwKKyAgICAoX0RFQlVHX0xFVkVMMV9FQVNJKEVBU0lMMV9NTVVNTVVfTE9DS19DVVJSRU5UX1ZJQ1RJTV9SRUFEMzIpLFwKKyAgICAgICgoKF9fcmF3X3JlYWRsKCgoYmFzZV9hZGRyZXNzKSsoTU1VX01NVV9MT0NLX09GRlNFVCkpKSkgJlwKKyAgICAgIE1NVV9NTVVfTE9DS19DVVJSRU5UX1ZJQ1RJTV9NQVNLKSA+PlwKKyAgICAgIE1NVV9NTVVfTE9DS19DVVJSRU5UX1ZJQ1RJTV9PRkZTRVQpKQorCisjZGVmaW5lIE1NVU1NVV9MT0NLX0NVUlJFTlRfVklDVElNX1dSSVRFMzIoYmFzZV9hZGRyZXNzLCB2YWx1ZSlcCit7XAorICAgIGNvbnN0IHUzMiBvZmZzZXQgPSBNTVVfTU1VX0xPQ0tfT0ZGU0VUO1wKKyAgICByZWdpc3RlciB1MzIgZGF0YSA9IF9fcmF3X3JlYWRsKChiYXNlX2FkZHJlc3MpK29mZnNldCk7XAorICAgIHJlZ2lzdGVyIHUzMiBuZXdfdmFsdWUgPSAodmFsdWUpO1wKKyAgICBfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9MT0NLX0NVUlJFTlRfVklDVElNX1dSSVRFMzIpO1wKKyAgICBkYXRhICY9IH4oTU1VX01NVV9MT0NLX0NVUlJFTlRfVklDVElNX01BU0spO1wKKyAgICBuZXdfdmFsdWUgPDw9IE1NVV9NTVVfTE9DS19DVVJSRU5UX1ZJQ1RJTV9PRkZTRVQ7XAorICAgIG5ld192YWx1ZSAmPSBNTVVfTU1VX0xPQ0tfQ1VSUkVOVF9WSUNUSU1fTUFTSztcCisgICAgbmV3X3ZhbHVlIHw9IGRhdGE7XAorICAgIF9fcmF3X3dyaXRlbChuZXdfdmFsdWUsIGJhc2VfYWRkcmVzcytvZmZzZXQpO1wKK30KKworI2RlZmluZSBNTVVNTVVfTE9DS19DVVJSRU5UX1ZJQ1RJTV9TRVQzMih2YXIsIHZhbHVlKVwKKyAgICAoX0RFQlVHX0xFVkVMMV9FQVNJKEVBU0lMMV9NTVVNTVVfTE9DS19DVVJSRU5UX1ZJQ1RJTV9TRVQzMiksXAorICAgICAgKCgodmFyKSAmIH4oTU1VX01NVV9MT0NLX0NVUlJFTlRfVklDVElNX01BU0spKSB8XAorICAgICAgKCgodmFsdWUpIDw8IE1NVV9NTVVfTE9DS19DVVJSRU5UX1ZJQ1RJTV9PRkZTRVQpICZcCisgICAgICBNTVVfTU1VX0xPQ0tfQ1VSUkVOVF9WSUNUSU1fTUFTSykpKQorCisjZGVmaW5lIE1NVU1NVV9MRF9UTEJfUkVBRF9SRUdJU1RFUjMyKGJhc2VfYWRkcmVzcylcCisgICAgKF9ERUJVR19MRVZFTDFfRUFTSShFQVNJTDFfTU1VTU1VX0xEX1RMQl9SRUFEX1JFR0lTVEVSMzIpLFwKKyAgICAgIF9fcmF3X3JlYWRsKChiYXNlX2FkZHJlc3MpK01NVV9NTVVfTERfVExCX09GRlNFVCkpCisKKyNkZWZpbmUgTU1VTU1VX0xEX1RMQl9XUklURV9SRUdJU1RFUjMyKGJhc2VfYWRkcmVzcywgdmFsdWUpXAore1wKKyAgICBjb25zdCB1MzIgb2Zmc2V0ID0gTU1VX01NVV9MRF9UTEJfT0ZGU0VUO1wKKyAgICByZWdpc3RlciB1MzIgbmV3X3ZhbHVlID0gKHZhbHVlKTtcCisgICAgX0RFQlVHX0xFVkVMMV9FQVNJKEVBU0lMMV9NTVVNTVVfTERfVExCX1dSSVRFX1JFR0lTVEVSMzIpO1wKKyAgICBfX3Jhd193cml0ZWwobmV3X3ZhbHVlLCAoYmFzZV9hZGRyZXNzKStvZmZzZXQpO1wKK30KKworI2RlZmluZSBNTVVNTVVfQ0FNX1dSSVRFX1JFR0lTVEVSMzIoYmFzZV9hZGRyZXNzLCB2YWx1ZSlcCit7XAorICAgIGNvbnN0IHUzMiBvZmZzZXQgPSBNTVVfTU1VX0NBTV9PRkZTRVQ7XAorICAgIHJlZ2lzdGVyIHUzMiBuZXdfdmFsdWUgPSAodmFsdWUpO1wKKyAgICBfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9DQU1fV1JJVEVfUkVHSVNURVIzMik7XAorICAgIF9fcmF3X3dyaXRlbChuZXdfdmFsdWUsIChiYXNlX2FkZHJlc3MpK29mZnNldCk7XAorfQorCisjZGVmaW5lIE1NVU1NVV9SQU1fV1JJVEVfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MsIHZhbHVlKVwKK3tcCisgICAgY29uc3QgdTMyIG9mZnNldCA9IE1NVV9NTVVfUkFNX09GRlNFVDtcCisgICAgcmVnaXN0ZXIgdTMyIG5ld192YWx1ZSA9ICh2YWx1ZSk7XAorICAgIF9ERUJVR19MRVZFTDFfRUFTSShFQVNJTDFfTU1VTU1VX1JBTV9XUklURV9SRUdJU1RFUjMyKTtcCisgICAgX19yYXdfd3JpdGVsKG5ld192YWx1ZSwgKGJhc2VfYWRkcmVzcykrb2Zmc2V0KTtcCit9CisKKyNkZWZpbmUgTU1VTU1VX0ZMVVNIX0VOVFJZX1dSSVRFX1JFR0lTVEVSMzIoYmFzZV9hZGRyZXNzLCB2YWx1ZSlcCit7XAorICAgIGNvbnN0IHUzMiBvZmZzZXQgPSBNTVVfTU1VX0ZMVVNIX0VOVFJZX09GRlNFVDtcCisgICAgcmVnaXN0ZXIgdTMyIG5ld192YWx1ZSA9ICh2YWx1ZSk7XAorICAgIF9ERUJVR19MRVZFTDFfRUFTSShFQVNJTDFfTU1VTU1VX0ZMVVNIX0VOVFJZX1dSSVRFX1JFR0lTVEVSMzIpO1wKKyAgICBfX3Jhd193cml0ZWwobmV3X3ZhbHVlLCAoYmFzZV9hZGRyZXNzKStvZmZzZXQpO1wKK30KKworI2VuZGlmIC8qIFVTRV9MRVZFTF8xX01BQ1JPUyAqLworCisjZW5kaWYgLyogX01NVV9SRUdfQUNNX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ody9od19kZWZzLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaHcvaHdfZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MjY2ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaHcvaHdfZGVmcy5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBod19kZWZzLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogR2xvYmFsIEhXIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgX0hXX0RFRlNfSAorI2RlZmluZSBfSFdfREVGU19ICisKKy8qIFBhZ2Ugc2l6ZSAqLworI2RlZmluZSBIV19QQUdFX1NJWkU0S0IgICAweDEwMDAKKyNkZWZpbmUgSFdfUEFHRV9TSVpFNjRLQiAgMHgxMDAwMAorI2RlZmluZSBIV19QQUdFX1NJWkUxTUIgICAweDEwMDAwMAorI2RlZmluZSBIV19QQUdFX1NJWkUxNk1CICAweDEwMDAwMDAKKworLyogaHdfc3RhdHVzOiAgcmV0dXJuIHR5cGUgZm9yIEhXIEFQSSAqLwordHlwZWRlZiBsb25nIGh3X3N0YXR1czsKKworLyogIE1hY3JvIHVzZWQgdG8gc2V0IGFuZCBjbGVhciBhbnkgYml0ICovCisjZGVmaW5lIEhXX0NMRUFSCTAKKyNkZWZpbmUgSFdfU0VUCQkxCisKKy8qIGh3X2VuZGlhbmlzbV90OiAgRW51bWVyYXRlZCBUeXBlIHVzZWQgdG8gc3BlY2lmeSB0aGUgZW5kaWFuaXNtCisgKgkJRG8gTk9UIGNoYW5nZSB0aGVzZSB2YWx1ZXMuIFRoZXkgYXJlIHVzZWQgYXMgYml0IGZpZWxkcy4gKi8KK2VudW0gaHdfZW5kaWFuaXNtX3QgeworCUhXX0xJVFRMRV9FTkRJQU4sCisJSFdfQklHX0VORElBTgorfTsKKworLyogaHdfZWxlbWVudF9zaXplX3Q6ICBFbnVtZXJhdGVkIFR5cGUgdXNlZCB0byBzcGVjaWZ5IHRoZSBlbGVtZW50IHNpemUKKyAqCQlEbyBOT1QgY2hhbmdlIHRoZXNlIHZhbHVlcy4gVGhleSBhcmUgdXNlZCBhcyBiaXQgZmllbGRzLiAqLworZW51bSBod19lbGVtZW50X3NpemVfdCB7CisJSFdfRUxFTV9TSVpFOEJJVCwKKwlIV19FTEVNX1NJWkUxNkJJVCwKKwlIV19FTEVNX1NJWkUzMkJJVCwKKwlIV19FTEVNX1NJWkU2NEJJVAorfTsKKworLyogaHdfaWRsZV9tb2RlX3Q6ICBFbnVtZXJhdGVkIFR5cGUgdXNlZCB0byBzcGVjaWZ5IElkbGUgbW9kZXMgKi8KK2VudW0gaHdfaWRsZV9tb2RlX3QgeworCUhXX0ZPUkNFX0lETEUsCisJSFdfTk9fSURMRSwKKwlIV19TTUFSVF9JRExFCit9OworCisjZW5kaWYgLyogX0hXX0RFRlNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2h3L2h3X21tdS5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2h3L2h3X21tdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNGY1ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaHcvaHdfbW11LmMKQEAgLTAsMCArMSw1NjIgQEAKKy8qCisgKiBod19tbXUuYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBBUEkgZGVmaW5pdGlvbnMgdG8gc2V0dXAgTU1VIFRMQiBhbmQgUFRFCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgIk1NVVJlZ0FjTS5oIgorI2luY2x1ZGUgPGh3X2RlZnMuaD4KKyNpbmNsdWRlIDxod19tbXUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisjZGVmaW5lIE1NVV9CQVNFX1ZBTF9NQVNLCTB4RkMwMAorI2RlZmluZSBNTVVfUEFHRV9NQVgJICAgICAzCisjZGVmaW5lIE1NVV9FTEVNRU5UU0laRV9NQVggICAgICAzCisjZGVmaW5lIE1NVV9BRERSX01BU0sJICAgIDB4RkZGRkYwMDAKKyNkZWZpbmUgTU1VX1RUQl9NQVNLCSAgICAgMHhGRkZGQzAwMAorI2RlZmluZSBNTVVfU0VDVElPTl9BRERSX01BU0sgICAgMHhGRkYwMDAwMAorI2RlZmluZSBNTVVfU1NFQ1RJT05fQUREUl9NQVNLICAgMHhGRjAwMDAwMAorI2RlZmluZSBNTVVfUEFHRV9UQUJMRV9NQVNLICAgICAgMHhGRkZGRkMwMAorI2RlZmluZSBNTVVfTEFSR0VfUEFHRV9NQVNLICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBNTVVfU01BTExfUEFHRV9NQVNLICAgICAgMHhGRkZGRjAwMAorCisjZGVmaW5lIE1NVV9MT0FEX1RMQgkweDAwMDAwMDAxCisjZGVmaW5lIE1NVV9HRkxVU0gJMHg2MAorCisvKgorICogaHdfbW11X3BhZ2Vfc2l6ZV90OiBFbnVtZXJhdGVkIFR5cGUgdXNlZCB0byBzcGVjaWZ5IHRoZSBNTVUgUGFnZSBTaXplKFNMU1MpCisgKi8KK2VudW0gaHdfbW11X3BhZ2Vfc2l6ZV90IHsKKwlIV19NTVVfU0VDVElPTiwKKwlIV19NTVVfTEFSR0VfUEFHRSwKKwlIV19NTVVfU01BTExfUEFHRSwKKwlIV19NTVVfU1VQRVJTRUNUSU9OCit9OworCisvKgorICogRlVOQ1RJT04JICAgICAgOiBtbXVfZmx1c2hfZW50cnkKKyAqCisgKiBJTlBVVFM6CisgKgorICogICAgICAgSWRlbnRpZmllciAgICAgIDogYmFzZV9hZGRyZXNzCisgKiAgICAgICBUeXBlCQk6IGNvbnN0IHUzMgorICogICAgICAgRGVzY3JpcHRpb24gICAgIDogQmFzZSBBZGRyZXNzIG9mIGluc3RhbmNlIG9mIE1NVSBtb2R1bGUKKyAqCisgKiBSRVRVUk5TOgorICoKKyAqICAgICAgIFR5cGUJCTogaHdfc3RhdHVzCisgKiAgICAgICBEZXNjcmlwdGlvbiAgICAgOiAwCQkgLS0gTm8gZXJyb3JzIG9jY3VyZWQKKyAqCQkJIFJFVF9CQURfTlVMTF9QQVJBTSAgICAgLS0gQSBQb2ludGVyCisgKgkJCQkJCVBhcmFtYXRlciB3YXMgc2V0IHRvIE5VTEwKKyAqCisgKiBQVVJQT1NFOgkgICAgICA6IEZsdXNoIHRoZSBUTEIgZW50cnkgcG9pbnRlZCBieSB0aGUKKyAqCQkJbG9jayBjb3VudGVyIHJlZ2lzdGVyCisgKgkJCWV2ZW4gaWYgdGhpcyBlbnRyeSBpcyBzZXQgcHJvdGVjdGVkCisgKgorICogTUVUSE9EOgkgICAgICAgOiBDaGVjayB0aGUgSW5wdXQgcGFyYW1ldGVyIGFuZCBGbHVzaCBhCisgKgkJCSBzaW5nbGUgZW50cnkgaW4gdGhlIFRMQi4KKyAqLworc3RhdGljIGh3X3N0YXR1cyBtbXVfZmx1c2hfZW50cnkoY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MpOworCisvKgorICogRlVOQ1RJT04JICAgICAgOiBtbXVfc2V0X2NhbV9lbnRyeQorICoKKyAqIElOUFVUUzoKKyAqCisgKiAgICAgICBJZGVudGlmaWVyICAgICAgOiBiYXNlX2FkZHJlc3MKKyAqICAgICAgIFR5cEUJCTogY29uc3QgdTMyCisgKiAgICAgICBEZXNjcmlwdGlvbiAgICAgOiBCYXNlIEFkZHJlc3Mgb2YgaW5zdGFuY2Ugb2YgTU1VIG1vZHVsZQorICoKKyAqICAgICAgIElkZW50aWZpZXIgICAgICA6IHBhZ2Vfc3oKKyAqICAgICAgIFR5cEUJCTogY29uc3QgdTMyCisgKiAgICAgICBEZXNjcmlwdGlvbiAgICAgOiBJdCBpbmRpY2F0ZXMgdGhlIHBhZ2Ugc2l6ZQorICoKKyAqICAgICAgIElkZW50aWZpZXIgICAgICA6IHByZXNlcnZlZF9iaXQKKyAqICAgICAgIFR5cGUJCTogY29uc3QgdTMyCisgKiAgICAgICBEZXNjcmlwdGlvbiAgICAgOiBJdCBpbmRpY2F0ZXMgdGhlIFRMQiBlbnRyeSBpcyBwcmVzZXJ2ZWQgZW50cnkKKyAqCQkJCQkJCW9yIG5vdAorICoKKyAqICAgICAgIElkZW50aWZpZXIgICAgICA6IHZhbGlkX2JpdAorICogICAgICAgVHlwZQkJOiBjb25zdCB1MzIKKyAqICAgICAgIERlc2NyaXB0aW9uICAgICA6IEl0IGluZGljYXRlcyB0aGUgVExCIGVudHJ5IGlzIHZhbGlkIGVudHJ5IG9yIG5vdAorICoKKyAqCisgKiAgICAgICBJZGVudGlmaWVyICAgICAgOiB2aXJ0dWFsX2FkZHJfdGFnCisgKiAgICAgICBUeXBlCSAgICAJOiBjb25zdCB1MzIKKyAqICAgICAgIERlc2NyaXB0aW9uICAgICA6IHZpcnR1YWwgQWRkcmVzcworICoKKyAqIFJFVFVSTlM6CisgKgorICogICAgICAgVHlwZQkgICAgCTogaHdfc3RhdHVzCisgKiAgICAgICBEZXNjcmlwdGlvbiAgICAgOiAwCQkgLS0gTm8gZXJyb3JzIG9jY3VyZWQKKyAqCQkJIFJFVF9CQURfTlVMTF9QQVJBTSAgICAgLS0gQSBQb2ludGVyIFBhcmFtYXRlcgorICoJCQkJCQkgICB3YXMgc2V0IHRvIE5VTEwKKyAqCQkJIFJFVF9QQVJBTV9PVVRfT0ZfUkFOR0UgLS0gSW5wdXQgUGFyYW1ldGVyIG91dAorICoJCQkJCQkgICBvZiBSYW5nZQorICoKKyAqIFBVUlBPU0U6CSAgICAgIAk6IFNldCBNTVVfQ0FNIHJlZworICoKKyAqIE1FVEhPRDoJICAgICAgIAk6IENoZWNrIHRoZSBJbnB1dCBwYXJhbWV0ZXJzIGFuZCBzZXQgdGhlIENBTSBlbnRyeS4KKyAqLworc3RhdGljIGh3X3N0YXR1cyBtbXVfc2V0X2NhbV9lbnRyeShjb25zdCB2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcywKKwkJCQkgICBjb25zdCB1MzIgcGFnZV9zeiwKKwkJCQkgICBjb25zdCB1MzIgcHJlc2VydmVkX2JpdCwKKwkJCQkgICBjb25zdCB1MzIgdmFsaWRfYml0LAorCQkJCSAgIGNvbnN0IHUzMiB2aXJ0dWFsX2FkZHJfdGFnKTsKKworLyoKKyAqIEZVTkNUSU9OCSAgICAgIDogbW11X3NldF9yYW1fZW50cnkKKyAqCisgKiBJTlBVVFM6CisgKgorICogICAgICAgSWRlbnRpZmllciAgICAgIDogYmFzZV9hZGRyZXNzCisgKiAgICAgICBUeXBlCSAgICAJOiBjb25zdCB1MzIKKyAqICAgICAgIERlc2NyaXB0aW9uICAgICA6IEJhc2UgQWRkcmVzcyBvZiBpbnN0YW5jZSBvZiBNTVUgbW9kdWxlCisgKgorICogICAgICAgSWRlbnRpZmllciAgICAgIDogcGh5c2ljYWxfYWRkcgorICogICAgICAgVHlwZQkgICAgCTogY29uc3QgdTMyCisgKiAgICAgICBEZXNjcmlwdGlvbiAgICAgOiBQaHlzaWNhbCBBZGRyZXNzIHRvIHdoaWNoIHRoZSBjb3JyZXNwb25kaW5nCisgKgkJCSB2aXJ0dWFsICAgQWRkcmVzcyBzaG91bGRwb2ludAorICoKKyAqICAgICAgIElkZW50aWZpZXIgICAgICA6IGVuZGlhbmlzbQorICogICAgICAgVHlwZQkgICAgCTogaHdfZW5kaWFuaXNtX3QKKyAqICAgICAgIERlc2NyaXB0aW9uICAgICA6IGVuZGlhbmlzbSBmb3IgdGhlIGdpdmVuIHBhZ2UKKyAqCisgKiAgICAgICBJZGVudGlmaWVyICAgICAgOiBlbGVtZW50X3NpemUKKyAqICAgICAgIFR5cGUJICAgIAk6IGh3X2VsZW1lbnRfc2l6ZV90CisgKiAgICAgICBEZXNjcmlwdGlvbiAgICAgOiBUaGUgZWxlbWVudCBzaXplICggOCwxNiwgMzIgb3IgNjQgYml0KQorICoKKyAqICAgICAgIElkZW50aWZpZXIgICAgICA6IG1peGVkX3NpemUKKyAqICAgICAgIFR5cGUJICAgIAk6IGh3X21tdV9taXhlZF9zaXplX3QKKyAqICAgICAgIERlc2NyaXB0aW9uICAgICA6IEVsZW1lbnQgU2l6ZSB0byBmb2xsb3cgQ1BVIG9yIFRMQgorICoKKyAqIFJFVFVSTlM6CisgKgorICogICAgICAgVHlwZQkgICAgCTogaHdfc3RhdHVzCisgKiAgICAgICBEZXNjcmlwdGlvbiAgICAgOiAwCQkgLS0gTm8gZXJyb3JzIG9jY3VyZWQKKyAqCQkJIFJFVF9CQURfTlVMTF9QQVJBTSAgICAgLS0gQSBQb2ludGVyIFBhcmFtYXRlcgorICoJCQkJCQkJd2FzIHNldCB0byBOVUxMCisgKgkJCSBSRVRfUEFSQU1fT1VUX09GX1JBTkdFIC0tIElucHV0IFBhcmFtZXRlcgorICoJCQkJCQkJb3V0IG9mIFJhbmdlCisgKgorICogUFVSUE9TRToJICAgICAgOiBTZXQgTU1VX0NBTSByZWcKKyAqCisgKiBNRVRIT0Q6CSAgICAgICA6IENoZWNrIHRoZSBJbnB1dCBwYXJhbWV0ZXJzIGFuZCBzZXQgdGhlIFJBTSBlbnRyeS4KKyAqLworc3RhdGljIGh3X3N0YXR1cyBtbXVfc2V0X3JhbV9lbnRyeShjb25zdCB2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcywKKwkJCQkgICBjb25zdCB1MzIgcGh5c2ljYWxfYWRkciwKKwkJCQkgICBlbnVtIGh3X2VuZGlhbmlzbV90IGVuZGlhbmlzbSwKKwkJCQkgICBlbnVtIGh3X2VsZW1lbnRfc2l6ZV90IGVsZW1lbnRfc2l6ZSwKKwkJCQkgICBlbnVtIGh3X21tdV9taXhlZF9zaXplX3QgbWl4ZWRfc2l6ZSk7CisKKy8qIEhXIEZVTkNUSU9OUyAqLworCitod19zdGF0dXMgaHdfbW11X2VuYWJsZShjb25zdCB2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcykKK3sKKwlod19zdGF0dXMgc3RhdHVzID0gMDsKKworCU1NVU1NVV9DTlRMTU1VX0VOQUJMRV9XUklURTMyKGJhc2VfYWRkcmVzcywgSFdfU0VUKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK2h3X3N0YXR1cyBod19tbXVfZGlzYWJsZShjb25zdCB2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcykKK3sKKwlod19zdGF0dXMgc3RhdHVzID0gMDsKKworCU1NVU1NVV9DTlRMTU1VX0VOQUJMRV9XUklURTMyKGJhc2VfYWRkcmVzcywgSFdfQ0xFQVIpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworaHdfc3RhdHVzIGh3X21tdV9udW1fbG9ja2VkX3NldChjb25zdCB2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcywKKwkJCQl1MzIgbnVtX2xvY2tlZF9lbnRyaWVzKQoreworCWh3X3N0YXR1cyBzdGF0dXMgPSAwOworCisJTU1VTU1VX0xPQ0tfQkFTRV9WQUxVRV9XUklURTMyKGJhc2VfYWRkcmVzcywgbnVtX2xvY2tlZF9lbnRyaWVzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK2h3X3N0YXR1cyBod19tbXVfdmljdGltX251bV9zZXQoY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsCisJCQkJdTMyIHZpY3RpbV9lbnRyeV9udW0pCit7CisJaHdfc3RhdHVzIHN0YXR1cyA9IDA7CisKKwlNTVVNTVVfTE9DS19DVVJSRU5UX1ZJQ1RJTV9XUklURTMyKGJhc2VfYWRkcmVzcywgdmljdGltX2VudHJ5X251bSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitod19zdGF0dXMgaHdfbW11X2V2ZW50X2Fjayhjb25zdCB2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcywgdTMyIGlycV9tYXNrKQoreworCWh3X3N0YXR1cyBzdGF0dXMgPSAwOworCisJTU1VTU1VX0lSUVNUQVRVU19XUklURV9SRUdJU1RFUjMyKGJhc2VfYWRkcmVzcywgaXJxX21hc2spOworCisJcmV0dXJuIHN0YXR1czsKK30KKworaHdfc3RhdHVzIGh3X21tdV9ldmVudF9kaXNhYmxlKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzLCB1MzIgaXJxX21hc2spCit7CisJaHdfc3RhdHVzIHN0YXR1cyA9IDA7CisJdTMyIGlycV9yZWc7CisKKwlpcnFfcmVnID0gTU1VTU1VX0lSUUVOQUJMRV9SRUFEX1JFR0lTVEVSMzIoYmFzZV9hZGRyZXNzKTsKKworCU1NVU1NVV9JUlFFTkFCTEVfV1JJVEVfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MsIGlycV9yZWcgJiB+aXJxX21hc2spOworCisJcmV0dXJuIHN0YXR1czsKK30KKworaHdfc3RhdHVzIGh3X21tdV9ldmVudF9lbmFibGUoY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsIHUzMiBpcnFfbWFzaykKK3sKKwlod19zdGF0dXMgc3RhdHVzID0gMDsKKwl1MzIgaXJxX3JlZzsKKworCWlycV9yZWcgPSBNTVVNTVVfSVJRRU5BQkxFX1JFQURfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MpOworCisJTU1VTU1VX0lSUUVOQUJMRV9XUklURV9SRUdJU1RFUjMyKGJhc2VfYWRkcmVzcywgaXJxX3JlZyB8IGlycV9tYXNrKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK2h3X3N0YXR1cyBod19tbXVfZXZlbnRfc3RhdHVzKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzLCB1MzIgKmlycV9tYXNrKQoreworCWh3X3N0YXR1cyBzdGF0dXMgPSAwOworCisJKmlycV9tYXNrID0gTU1VTU1VX0lSUVNUQVRVU19SRUFEX1JFR0lTVEVSMzIoYmFzZV9hZGRyZXNzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK2h3X3N0YXR1cyBod19tbXVfZmF1bHRfYWRkcl9yZWFkKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzLCB1MzIgKmFkZHIpCit7CisJaHdfc3RhdHVzIHN0YXR1cyA9IDA7CisKKwkvKiByZWFkIHZhbHVlcyBmcm9tIHJlZ2lzdGVyICovCisJKmFkZHIgPSBNTVVNTVVfRkFVTFRfQURfUkVBRF9SRUdJU1RFUjMyKGJhc2VfYWRkcmVzcyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitod19zdGF0dXMgaHdfbW11X3R0Yl9zZXQoY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsIHUzMiB0dGJfcGh5c19hZGRyKQoreworCWh3X3N0YXR1cyBzdGF0dXMgPSAwOworCXUzMiBsb2FkX3R0YjsKKworCWxvYWRfdHRiID0gdHRiX3BoeXNfYWRkciAmIH4weDdGVUw7CisJLyogd3JpdGUgdmFsdWVzIHRvIHJlZ2lzdGVyICovCisJTU1VTU1VX1RUQl9XUklURV9SRUdJU1RFUjMyKGJhc2VfYWRkcmVzcywgbG9hZF90dGIpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworaHdfc3RhdHVzIGh3X21tdV90d2xfZW5hYmxlKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzKQoreworCWh3X3N0YXR1cyBzdGF0dXMgPSAwOworCisJTU1VTU1VX0NOVExUV0xfRU5BQkxFX1dSSVRFMzIoYmFzZV9hZGRyZXNzLCBIV19TRVQpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworaHdfc3RhdHVzIGh3X21tdV90d2xfZGlzYWJsZShjb25zdCB2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcykKK3sKKwlod19zdGF0dXMgc3RhdHVzID0gMDsKKworCU1NVU1NVV9DTlRMVFdMX0VOQUJMRV9XUklURTMyKGJhc2VfYWRkcmVzcywgSFdfQ0xFQVIpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworaHdfc3RhdHVzIGh3X21tdV90bGJfZmx1c2goY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsIHUzMiB2aXJ0dWFsX2FkZHIsCisJCQkgICB1MzIgcGFnZV9zeikKK3sKKwlod19zdGF0dXMgc3RhdHVzID0gMDsKKwl1MzIgdmlydHVhbF9hZGRyX3RhZzsKKwllbnVtIGh3X21tdV9wYWdlX3NpemVfdCBwZ19zaXplX2JpdHM7CisKKwlzd2l0Y2ggKHBhZ2Vfc3opIHsKKwljYXNlIEhXX1BBR0VfU0laRTRLQjoKKwkJcGdfc2l6ZV9iaXRzID0gSFdfTU1VX1NNQUxMX1BBR0U7CisJCWJyZWFrOworCisJY2FzZSBIV19QQUdFX1NJWkU2NEtCOgorCQlwZ19zaXplX2JpdHMgPSBIV19NTVVfTEFSR0VfUEFHRTsKKwkJYnJlYWs7CisKKwljYXNlIEhXX1BBR0VfU0laRTFNQjoKKwkJcGdfc2l6ZV9iaXRzID0gSFdfTU1VX1NFQ1RJT047CisJCWJyZWFrOworCisJY2FzZSBIV19QQUdFX1NJWkUxNk1COgorCQlwZ19zaXplX2JpdHMgPSBIV19NTVVfU1VQRVJTRUNUSU9OOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEdlbmVyYXRlIHRoZSAyMC1iaXQgdGFnIGZyb20gdmlydHVhbCBhZGRyZXNzICovCisJdmlydHVhbF9hZGRyX3RhZyA9ICgodmlydHVhbF9hZGRyICYgTU1VX0FERFJfTUFTSykgPj4gMTIpOworCisJbW11X3NldF9jYW1fZW50cnkoYmFzZV9hZGRyZXNzLCBwZ19zaXplX2JpdHMsIDAsIDAsIHZpcnR1YWxfYWRkcl90YWcpOworCisJbW11X2ZsdXNoX2VudHJ5KGJhc2VfYWRkcmVzcyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitod19zdGF0dXMgaHdfbW11X3RsYl9hZGQoY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsCisJCQkgdTMyIHBoeXNpY2FsX2FkZHIsCisJCQkgdTMyIHZpcnR1YWxfYWRkciwKKwkJCSB1MzIgcGFnZV9zeiwKKwkJCSB1MzIgZW50cnlfbnVtLAorCQkJIHN0cnVjdCBod19tbXVfbWFwX2F0dHJzX3QgKm1hcF9hdHRycywKKwkJCSBzOCBwcmVzZXJ2ZWRfYml0LCBzOCB2YWxpZF9iaXQpCit7CisJaHdfc3RhdHVzIHN0YXR1cyA9IDA7CisJdTMyIGxvY2tfcmVnOworCXUzMiB2aXJ0dWFsX2FkZHJfdGFnOworCWVudW0gaHdfbW11X3BhZ2Vfc2l6ZV90IG1tdV9wZ19zaXplOworCisJLypDaGVjayB0aGUgaW5wdXQgUGFyYW1ldGVycyAqLworCXN3aXRjaCAocGFnZV9zeikgeworCWNhc2UgSFdfUEFHRV9TSVpFNEtCOgorCQltbXVfcGdfc2l6ZSA9IEhXX01NVV9TTUFMTF9QQUdFOworCQlicmVhazsKKworCWNhc2UgSFdfUEFHRV9TSVpFNjRLQjoKKwkJbW11X3BnX3NpemUgPSBIV19NTVVfTEFSR0VfUEFHRTsKKwkJYnJlYWs7CisKKwljYXNlIEhXX1BBR0VfU0laRTFNQjoKKwkJbW11X3BnX3NpemUgPSBIV19NTVVfU0VDVElPTjsKKwkJYnJlYWs7CisKKwljYXNlIEhXX1BBR0VfU0laRTE2TUI6CisJCW1tdV9wZ19zaXplID0gSFdfTU1VX1NVUEVSU0VDVElPTjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlsb2NrX3JlZyA9IE1NVU1NVV9MT0NLX1JFQURfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MpOworCisJLyogR2VuZXJhdGUgdGhlIDIwLWJpdCB0YWcgZnJvbSB2aXJ0dWFsIGFkZHJlc3MgKi8KKwl2aXJ0dWFsX2FkZHJfdGFnID0gKCh2aXJ0dWFsX2FkZHIgJiBNTVVfQUREUl9NQVNLKSA+PiAxMik7CisKKwkvKiBXcml0ZSB0aGUgZmllbGRzIGluIHRoZSBDQU0gRW50cnkgUmVnaXN0ZXIgKi8KKwltbXVfc2V0X2NhbV9lbnRyeShiYXNlX2FkZHJlc3MsIG1tdV9wZ19zaXplLCBwcmVzZXJ2ZWRfYml0LCB2YWxpZF9iaXQsCisJCQkgIHZpcnR1YWxfYWRkcl90YWcpOworCisJLyogV3JpdGUgdGhlIGRpZmZlcmVudCBmaWVsZHMgb2YgdGhlIFJBTSBFbnRyeSBSZWdpc3RlciAqLworCS8qIGVuZGlhbmlzbSBvZiB0aGUgcGFnZSxFbGVtZW50IFNpemUgb2YgdGhlIHBhZ2UgKDgsIDE2LCAzMiwgNjQgYml0KSAqLworCW1tdV9zZXRfcmFtX2VudHJ5KGJhc2VfYWRkcmVzcywgcGh5c2ljYWxfYWRkciwgbWFwX2F0dHJzLT5lbmRpYW5pc20sCisJCQkgIG1hcF9hdHRycy0+ZWxlbWVudF9zaXplLCBtYXBfYXR0cnMtPm1peGVkX3NpemUpOworCisJLyogVXBkYXRlIHRoZSBNTVUgTG9jayBSZWdpc3RlciAqLworCS8qIGN1cnJlbnRWaWN0aW0gYmV0d2VlbiBsb2NrZWRCYXNlVmFsdWUgYW5kIChNTVVfRW50cmllc19OdW1iZXIgLSAxKSAqLworCU1NVU1NVV9MT0NLX0NVUlJFTlRfVklDVElNX1dSSVRFMzIoYmFzZV9hZGRyZXNzLCBlbnRyeV9udW0pOworCisJLyogRW5hYmxlIGxvYWRpbmcgb2YgYW4gZW50cnkgaW4gVExCIGJ5IHdyaXRpbmcgMQorCSAgIGludG8gTERfVExCX1JFRyByZWdpc3RlciAqLworCU1NVU1NVV9MRF9UTEJfV1JJVEVfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MsIE1NVV9MT0FEX1RMQik7CisKKwlNTVVNTVVfTE9DS19XUklURV9SRUdJU1RFUjMyKGJhc2VfYWRkcmVzcywgbG9ja19yZWcpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworaHdfc3RhdHVzIGh3X21tdV9wdGVfc2V0KGNvbnN0IHUzMiBwZ190YmxfdmEsCisJCQkgdTMyIHBoeXNpY2FsX2FkZHIsCisJCQkgdTMyIHZpcnR1YWxfYWRkciwKKwkJCSB1MzIgcGFnZV9zeiwgc3RydWN0IGh3X21tdV9tYXBfYXR0cnNfdCAqbWFwX2F0dHJzKQoreworCWh3X3N0YXR1cyBzdGF0dXMgPSAwOworCXUzMiBwdGVfYWRkciwgcHRlX3ZhbDsKKwlzMzIgbnVtX2VudHJpZXMgPSAxOworCisJc3dpdGNoIChwYWdlX3N6KSB7CisJY2FzZSBIV19QQUdFX1NJWkU0S0I6CisJCXB0ZV9hZGRyID0gaHdfbW11X3B0ZV9hZGRyX2wyKHBnX3RibF92YSwKKwkJCQkJICAgICAgdmlydHVhbF9hZGRyICYKKwkJCQkJICAgICAgTU1VX1NNQUxMX1BBR0VfTUFTSyk7CisJCXB0ZV92YWwgPQorCQkgICAgKChwaHlzaWNhbF9hZGRyICYgTU1VX1NNQUxMX1BBR0VfTUFTSykgfAorCQkgICAgIChtYXBfYXR0cnMtPmVuZGlhbmlzbSA8PCA5KSB8IChtYXBfYXR0cnMtPgorCQkJCQkJICAgIGVsZW1lbnRfc2l6ZSA8PCA0KSB8CisJCSAgICAgKG1hcF9hdHRycy0+bWl4ZWRfc2l6ZSA8PCAxMSkgfCAyKTsKKwkJYnJlYWs7CisKKwljYXNlIEhXX1BBR0VfU0laRTY0S0I6CisJCW51bV9lbnRyaWVzID0gMTY7CisJCXB0ZV9hZGRyID0gaHdfbW11X3B0ZV9hZGRyX2wyKHBnX3RibF92YSwKKwkJCQkJICAgICAgdmlydHVhbF9hZGRyICYKKwkJCQkJICAgICAgTU1VX0xBUkdFX1BBR0VfTUFTSyk7CisJCXB0ZV92YWwgPQorCQkgICAgKChwaHlzaWNhbF9hZGRyICYgTU1VX0xBUkdFX1BBR0VfTUFTSykgfAorCQkgICAgIChtYXBfYXR0cnMtPmVuZGlhbmlzbSA8PCA5KSB8IChtYXBfYXR0cnMtPgorCQkJCQkJICAgIGVsZW1lbnRfc2l6ZSA8PCA0KSB8CisJCSAgICAgKG1hcF9hdHRycy0+bWl4ZWRfc2l6ZSA8PCAxMSkgfCAxKTsKKwkJYnJlYWs7CisKKwljYXNlIEhXX1BBR0VfU0laRTFNQjoKKwkJcHRlX2FkZHIgPSBod19tbXVfcHRlX2FkZHJfbDEocGdfdGJsX3ZhLAorCQkJCQkgICAgICB2aXJ0dWFsX2FkZHIgJgorCQkJCQkgICAgICBNTVVfU0VDVElPTl9BRERSX01BU0spOworCQlwdGVfdmFsID0KKwkJICAgICgoKChwaHlzaWNhbF9hZGRyICYgTU1VX1NFQ1RJT05fQUREUl9NQVNLKSB8CisJCSAgICAgICAobWFwX2F0dHJzLT5lbmRpYW5pc20gPDwgMTUpIHwgKG1hcF9hdHRycy0+CisJCQkJCQkgICAgICAgZWxlbWVudF9zaXplIDw8IDEwKSB8CisJCSAgICAgICAobWFwX2F0dHJzLT5taXhlZF9zaXplIDw8IDE3KSkgJiB+MHg0MDAwMCkgfCAweDIpOworCQlicmVhazsKKworCWNhc2UgSFdfUEFHRV9TSVpFMTZNQjoKKwkJbnVtX2VudHJpZXMgPSAxNjsKKwkJcHRlX2FkZHIgPSBod19tbXVfcHRlX2FkZHJfbDEocGdfdGJsX3ZhLAorCQkJCQkgICAgICB2aXJ0dWFsX2FkZHIgJgorCQkJCQkgICAgICBNTVVfU1NFQ1RJT05fQUREUl9NQVNLKTsKKwkJcHRlX3ZhbCA9CisJCSAgICAoKChwaHlzaWNhbF9hZGRyICYgTU1VX1NTRUNUSU9OX0FERFJfTUFTSykgfAorCQkgICAgICAobWFwX2F0dHJzLT5lbmRpYW5pc20gPDwgMTUpIHwgKG1hcF9hdHRycy0+CisJCQkJCQkgICAgICBlbGVtZW50X3NpemUgPDwgMTApIHwKKwkJICAgICAgKG1hcF9hdHRycy0+bWl4ZWRfc2l6ZSA8PCAxNykKKwkJICAgICApIHwgMHg0MDAwMCB8IDB4Mik7CisJCWJyZWFrOworCisJY2FzZSBIV19NTVVfQ09BUlNFX1BBR0VfU0laRToKKwkJcHRlX2FkZHIgPSBod19tbXVfcHRlX2FkZHJfbDEocGdfdGJsX3ZhLAorCQkJCQkgICAgICB2aXJ0dWFsX2FkZHIgJgorCQkJCQkgICAgICBNTVVfU0VDVElPTl9BRERSX01BU0spOworCQlwdGVfdmFsID0gKHBoeXNpY2FsX2FkZHIgJiBNTVVfUEFHRV9UQUJMRV9NQVNLKSB8IDE7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd2hpbGUgKC0tbnVtX2VudHJpZXMgPj0gMCkKKwkJKCh1MzIgKikgcHRlX2FkZHIpW251bV9lbnRyaWVzXSA9IHB0ZV92YWw7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitod19zdGF0dXMgaHdfbW11X3B0ZV9jbGVhcihjb25zdCB1MzIgcGdfdGJsX3ZhLCB1MzIgdmlydHVhbF9hZGRyLCB1MzIgcGFnZV9zaXplKQoreworCWh3X3N0YXR1cyBzdGF0dXMgPSAwOworCXUzMiBwdGVfYWRkcjsKKwlzMzIgbnVtX2VudHJpZXMgPSAxOworCisJc3dpdGNoIChwYWdlX3NpemUpIHsKKwljYXNlIEhXX1BBR0VfU0laRTRLQjoKKwkJcHRlX2FkZHIgPSBod19tbXVfcHRlX2FkZHJfbDIocGdfdGJsX3ZhLAorCQkJCQkgICAgICB2aXJ0dWFsX2FkZHIgJgorCQkJCQkgICAgICBNTVVfU01BTExfUEFHRV9NQVNLKTsKKwkJYnJlYWs7CisKKwljYXNlIEhXX1BBR0VfU0laRTY0S0I6CisJCW51bV9lbnRyaWVzID0gMTY7CisJCXB0ZV9hZGRyID0gaHdfbW11X3B0ZV9hZGRyX2wyKHBnX3RibF92YSwKKwkJCQkJICAgICAgdmlydHVhbF9hZGRyICYKKwkJCQkJICAgICAgTU1VX0xBUkdFX1BBR0VfTUFTSyk7CisJCWJyZWFrOworCisJY2FzZSBIV19QQUdFX1NJWkUxTUI6CisJY2FzZSBIV19NTVVfQ09BUlNFX1BBR0VfU0laRToKKwkJcHRlX2FkZHIgPSBod19tbXVfcHRlX2FkZHJfbDEocGdfdGJsX3ZhLAorCQkJCQkgICAgICB2aXJ0dWFsX2FkZHIgJgorCQkJCQkgICAgICBNTVVfU0VDVElPTl9BRERSX01BU0spOworCQlicmVhazsKKworCWNhc2UgSFdfUEFHRV9TSVpFMTZNQjoKKwkJbnVtX2VudHJpZXMgPSAxNjsKKwkJcHRlX2FkZHIgPSBod19tbXVfcHRlX2FkZHJfbDEocGdfdGJsX3ZhLAorCQkJCQkgICAgICB2aXJ0dWFsX2FkZHIgJgorCQkJCQkgICAgICBNTVVfU1NFQ1RJT05fQUREUl9NQVNLKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3aGlsZSAoLS1udW1fZW50cmllcyA+PSAwKQorCQkoKHUzMiAqKSBwdGVfYWRkcilbbnVtX2VudHJpZXNdID0gMDsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIG1tdV9mbHVzaF9lbnRyeSAqLworc3RhdGljIGh3X3N0YXR1cyBtbXVfZmx1c2hfZW50cnkoY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MpCit7CisJaHdfc3RhdHVzIHN0YXR1cyA9IDA7CisJdTMyIGZsdXNoX2VudHJ5X2RhdGEgPSAweDE7CisKKwkvKiB3cml0ZSB2YWx1ZXMgdG8gcmVnaXN0ZXIgKi8KKwlNTVVNTVVfRkxVU0hfRU5UUllfV1JJVEVfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MsIGZsdXNoX2VudHJ5X2RhdGEpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyogbW11X3NldF9jYW1fZW50cnkgKi8KK3N0YXRpYyBod19zdGF0dXMgbW11X3NldF9jYW1fZW50cnkoY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsCisJCQkJICAgY29uc3QgdTMyIHBhZ2Vfc3osCisJCQkJICAgY29uc3QgdTMyIHByZXNlcnZlZF9iaXQsCisJCQkJICAgY29uc3QgdTMyIHZhbGlkX2JpdCwKKwkJCQkgICBjb25zdCB1MzIgdmlydHVhbF9hZGRyX3RhZykKK3sKKwlod19zdGF0dXMgc3RhdHVzID0gMDsKKwl1MzIgbW11X2NhbV9yZWc7CisKKwltbXVfY2FtX3JlZyA9ICh2aXJ0dWFsX2FkZHJfdGFnIDw8IDEyKTsKKwltbXVfY2FtX3JlZyA9IChtbXVfY2FtX3JlZykgfCAocGFnZV9zeikgfCAodmFsaWRfYml0IDw8IDIpIHwKKwkgICAgKHByZXNlcnZlZF9iaXQgPDwgMyk7CisKKwkvKiB3cml0ZSB2YWx1ZXMgdG8gcmVnaXN0ZXIgKi8KKwlNTVVNTVVfQ0FNX1dSSVRFX1JFR0lTVEVSMzIoYmFzZV9hZGRyZXNzLCBtbXVfY2FtX3JlZyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBtbXVfc2V0X3JhbV9lbnRyeSAqLworc3RhdGljIGh3X3N0YXR1cyBtbXVfc2V0X3JhbV9lbnRyeShjb25zdCB2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcywKKwkJCQkgICBjb25zdCB1MzIgcGh5c2ljYWxfYWRkciwKKwkJCQkgICBlbnVtIGh3X2VuZGlhbmlzbV90IGVuZGlhbmlzbSwKKwkJCQkgICBlbnVtIGh3X2VsZW1lbnRfc2l6ZV90IGVsZW1lbnRfc2l6ZSwKKwkJCQkgICBlbnVtIGh3X21tdV9taXhlZF9zaXplX3QgbWl4ZWRfc2l6ZSkKK3sKKwlod19zdGF0dXMgc3RhdHVzID0gMDsKKwl1MzIgbW11X3JhbV9yZWc7CisKKwltbXVfcmFtX3JlZyA9IChwaHlzaWNhbF9hZGRyICYgTU1VX0FERFJfTUFTSyk7CisJbW11X3JhbV9yZWcgPSAobW11X3JhbV9yZWcpIHwgKChlbmRpYW5pc20gPDwgOSkgfCAoZWxlbWVudF9zaXplIDw8IDcpIHwKKwkJCQkgICAgICAgKG1peGVkX3NpemUgPDwgNikpOworCisJLyogd3JpdGUgdmFsdWVzIHRvIHJlZ2lzdGVyICovCisJTU1VTU1VX1JBTV9XUklURV9SRUdJU1RFUjMyKGJhc2VfYWRkcmVzcywgbW11X3JhbV9yZWcpOworCisJcmV0dXJuIHN0YXR1czsKKworfQorCit2b2lkIGh3X21tdV90bGJfZmx1c2hfYWxsKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZSkKK3sKKwlfX3Jhd193cml0ZWIoMSwgYmFzZSArIE1NVV9HRkxVU0gpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2h3L2h3X21tdS5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2h3L2h3X21tdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NThhMmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaHcvaHdfbW11LmgKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBod19tbXUuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBNTVUgdHlwZXMgYW5kIEFQSSBkZWNsYXJhdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBfSFdfTU1VX0gKKyNkZWZpbmUgX0hXX01NVV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBCaXRtYXNrcyBmb3IgaW50ZXJydXB0IHNvdXJjZXMgKi8KKyNkZWZpbmUgSFdfTU1VX1RSQU5TTEFUSU9OX0ZBVUxUICAgMHgyCisjZGVmaW5lIEhXX01NVV9BTExfSU5URVJSVVBUUyAgICAgIDB4MUYKKworI2RlZmluZSBIV19NTVVfQ09BUlNFX1BBR0VfU0laRSAweDQwMAorCisvKiBod19tbXVfbWl4ZWRfc2l6ZV90OiAgRW51bWVyYXRlZCBUeXBlIHVzZWQgdG8gc3BlY2lmeSB3aGV0aGVyIHRvIGZvbGxvdworCQkJQ1BVL1RMQiBFbGVtZW50IHNpemUgKi8KK2VudW0gaHdfbW11X21peGVkX3NpemVfdCB7CisJSFdfTU1VX1RMQkVTLAorCUhXX01NVV9DUFVFUworfTsKKworLyogaHdfbW11X21hcF9hdHRyc190OiAgU3RydWN0IGNvbnRhaW5pbmcgTU1VIG1hcHBpbmcgYXR0cmlidXRlcyAqLworc3RydWN0IGh3X21tdV9tYXBfYXR0cnNfdCB7CisJZW51bSBod19lbmRpYW5pc21fdCBlbmRpYW5pc207CisJZW51bSBod19lbGVtZW50X3NpemVfdCBlbGVtZW50X3NpemU7CisJZW51bSBod19tbXVfbWl4ZWRfc2l6ZV90IG1peGVkX3NpemU7CisJYm9vbCBkb25vdGxvY2ttcHVwYWdlOworfTsKKworZXh0ZXJuIGh3X3N0YXR1cyBod19tbXVfZW5hYmxlKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzKTsKKworZXh0ZXJuIGh3X3N0YXR1cyBod19tbXVfZGlzYWJsZShjb25zdCB2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcyk7CisKK2V4dGVybiBod19zdGF0dXMgaHdfbW11X251bV9sb2NrZWRfc2V0KGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzLAorCQkJCSAgICAgICB1MzIgbnVtX2xvY2tlZF9lbnRyaWVzKTsKKworZXh0ZXJuIGh3X3N0YXR1cyBod19tbXVfdmljdGltX251bV9zZXQoY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsCisJCQkJICAgICAgIHUzMiB2aWN0aW1fZW50cnlfbnVtKTsKKworLyogRm9yIE1NVSBmYXVsdHMgKi8KK2V4dGVybiBod19zdGF0dXMgaHdfbW11X2V2ZW50X2Fjayhjb25zdCB2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcywKKwkJCQkgIHUzMiBpcnFfbWFzayk7CisKK2V4dGVybiBod19zdGF0dXMgaHdfbW11X2V2ZW50X2Rpc2FibGUoY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsCisJCQkJICAgICAgdTMyIGlycV9tYXNrKTsKKworZXh0ZXJuIGh3X3N0YXR1cyBod19tbXVfZXZlbnRfZW5hYmxlKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzLAorCQkJCSAgICAgdTMyIGlycV9tYXNrKTsKKworZXh0ZXJuIGh3X3N0YXR1cyBod19tbXVfZXZlbnRfc3RhdHVzKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzLAorCQkJCSAgICAgdTMyICppcnFfbWFzayk7CisKK2V4dGVybiBod19zdGF0dXMgaHdfbW11X2ZhdWx0X2FkZHJfcmVhZChjb25zdCB2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcywKKwkJCQkJdTMyICphZGRyKTsKKworLyogU2V0IHRoZSBUVCBiYXNlIGFkZHJlc3MgKi8KK2V4dGVybiBod19zdGF0dXMgaHdfbW11X3R0Yl9zZXQoY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsCisJCQkJdTMyIHR0Yl9waHlzX2FkZHIpOworCitleHRlcm4gaHdfc3RhdHVzIGh3X21tdV90d2xfZW5hYmxlKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzKTsKKworZXh0ZXJuIGh3X3N0YXR1cyBod19tbXVfdHdsX2Rpc2FibGUoY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MpOworCitleHRlcm4gaHdfc3RhdHVzIGh3X21tdV90bGJfZmx1c2goY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsCisJCQkJICB1MzIgdmlydHVhbF9hZGRyLCB1MzIgcGFnZV9zeik7CisKK2V4dGVybiBod19zdGF0dXMgaHdfbW11X3RsYl9hZGQoY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsCisJCQkJdTMyIHBoeXNpY2FsX2FkZHIsCisJCQkJdTMyIHZpcnR1YWxfYWRkciwKKwkJCQl1MzIgcGFnZV9zeiwKKwkJCQl1MzIgZW50cnlfbnVtLAorCQkJCXN0cnVjdCBod19tbXVfbWFwX2F0dHJzX3QgKm1hcF9hdHRycywKKwkJCQlzOCBwcmVzZXJ2ZWRfYml0LCBzOCB2YWxpZF9iaXQpOworCisvKiBGb3IgUFRFcyAqLworZXh0ZXJuIGh3X3N0YXR1cyBod19tbXVfcHRlX3NldChjb25zdCB1MzIgcGdfdGJsX3ZhLAorCQkJCXUzMiBwaHlzaWNhbF9hZGRyLAorCQkJCXUzMiB2aXJ0dWFsX2FkZHIsCisJCQkJdTMyIHBhZ2Vfc3osCisJCQkJc3RydWN0IGh3X21tdV9tYXBfYXR0cnNfdCAqbWFwX2F0dHJzKTsKKworZXh0ZXJuIGh3X3N0YXR1cyBod19tbXVfcHRlX2NsZWFyKGNvbnN0IHUzMiBwZ190YmxfdmEsCisJCQkJICB1MzIgdmlydHVhbF9hZGRyLCB1MzIgcGFnZV9zaXplKTsKKwordm9pZCBod19tbXVfdGxiX2ZsdXNoX2FsbChjb25zdCB2b2lkIF9faW9tZW0gKmJhc2UpOworCitzdGF0aWMgaW5saW5lIHUzMiBod19tbXVfcHRlX2FkZHJfbDEodTMyIGwxX2Jhc2UsIHUzMiB2YSkKK3sKKwl1MzIgcHRlX2FkZHI7CisJdTMyIHZhMzFfdG8yMDsKKworCXZhMzFfdG8yMCA9IHZhID4+ICgyMCAtIDIpOwkvKiBMZWZ0LXNoaWZ0IGJ5IDIgaGVyZSBpdHNlbGYgKi8KKwl2YTMxX3RvMjAgJj0gMHhGRkZGRkZGQ1VMOworCXB0ZV9hZGRyID0gbDFfYmFzZSArIHZhMzFfdG8yMDsKKworCXJldHVybiBwdGVfYWRkcjsKK30KKworc3RhdGljIGlubGluZSB1MzIgaHdfbW11X3B0ZV9hZGRyX2wyKHUzMiBsMl9iYXNlLCB1MzIgdmEpCit7CisJdTMyIHB0ZV9hZGRyOworCisJcHRlX2FkZHIgPSAobDJfYmFzZSAmIDB4RkZGRkZDMDApIHwgKCh2YSA+PiAxMCkgJiAweDNGQyk7CisKKwlyZXR1cm4gcHRlX2FkZHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGh3X21tdV9wdGVfY29hcnNlX2wxKHUzMiBwdGVfdmFsKQoreworCXUzMiBwdGVfY29hcnNlOworCisJcHRlX2NvYXJzZSA9IHB0ZV92YWwgJiAweEZGRkZGQzAwOworCisJcmV0dXJuIHB0ZV9jb2Fyc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGh3X21tdV9wdGVfc2l6ZV9sMSh1MzIgcHRlX3ZhbCkKK3sKKwl1MzIgcHRlX3NpemUgPSAwOworCisJaWYgKChwdGVfdmFsICYgMHgzKSA9PSAweDEpIHsKKwkJLyogUG9pbnRzIHRvIEwyIFBUICovCisJCXB0ZV9zaXplID0gSFdfTU1VX0NPQVJTRV9QQUdFX1NJWkU7CisJfQorCisJaWYgKChwdGVfdmFsICYgMHgzKSA9PSAweDIpIHsKKwkJaWYgKHB0ZV92YWwgJiAoMSA8PCAxOCkpCisJCQlwdGVfc2l6ZSA9IEhXX1BBR0VfU0laRTE2TUI7CisJCWVsc2UKKwkJCXB0ZV9zaXplID0gSFdfUEFHRV9TSVpFMU1COworCX0KKworCXJldHVybiBwdGVfc2l6ZTsKK30KKworc3RhdGljIGlubGluZSB1MzIgaHdfbW11X3B0ZV9zaXplX2wyKHUzMiBwdGVfdmFsKQoreworCXUzMiBwdGVfc2l6ZSA9IDA7CisKKwlpZiAocHRlX3ZhbCAmIDB4MikKKwkJcHRlX3NpemUgPSBIV19QQUdFX1NJWkU0S0I7CisJZWxzZSBpZiAocHRlX3ZhbCAmIDB4MSkKKwkJcHRlX3NpemUgPSBIV19QQUdFX1NJWkU2NEtCOworCisJcmV0dXJuIHB0ZV9zaXplOworfQorCisjZW5kaWYgLyogX0hXX01NVV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvX2Nobmxfc20uaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9fY2hubF9zbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZmQxZmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvX2Nobmxfc20uaApAQCAtMCwwICsxLDE4MSBAQAorLyoKKyAqIF9jaG5sX3NtLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogUHJpdmF0ZSBoZWFkZXIgZmlsZSBkZWZpbmluZyBjaGFubmVsIG1hbmFnZXIgYW5kIGNoYW5uZWwgb2JqZWN0cyBmb3IKKyAqIGEgc2hhcmVkIG1lbW9yeSBjaGFubmVsIGRyaXZlci4KKyAqCisgKiBTaGFyZWQgYmV0d2VlbiB0aGUgbW9kdWxlcyBpbXBsZW1lbnRpbmcgdGhlIHNoYXJlZCBtZW1vcnkgY2hhbm5lbCBjbGFzcworICogbGlicmFyeS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIF9DSE5MX1NNXworI2RlZmluZSBfQ0hOTF9TTV8KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BhcGkuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwZGVmcy5oPgorCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2xpc3QuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvbnRmeS5oPgorCisvKgorICogIFRoZXNlIHRhcmdldCBzaWRlIHN5bWJvbHMgZGVmaW5lIHRoZSBiZWdpbm5pbmcgYW5kIGVuZGluZyBhZGRyZXNzZXMKKyAqICBvZiBzaGFyZWQgbWVtb3J5IGJ1ZmZlci4gVGhleSBhcmUgZGVmaW5lZCBpbiB0aGUgKmNmZy5jbWQgZmlsZSBieQorICogIGNkYiBjb2RlLgorICovCisjZGVmaW5lIENITkxfU0hBUkVEX0JVRkZFUl9CQVNFX1NZTSAiX1NITV9CRUciCisjZGVmaW5lIENITkxfU0hBUkVEX0JVRkZFUl9MSU1JVF9TWU0gIl9TSE1fRU5EIgorI2RlZmluZSBCUklER0VJTklUX0JJT1NHUFRJTUVSICJfQlJJREdFSU5JVF9CSU9TR1BUSU1FUiIKKyNkZWZpbmUgQlJJREdFSU5JVF9MT0FETU9OX0dQVElNRVIgIl9CUklER0VJTklUX0xPQURNT05fR1BUSU1FUiIKKworI2lmbmRlZiBfQ0hOTF9XT1JEU0laRQorI2RlZmluZSBfQ0hOTF9XT1JEU0laRSA0CS8qIGRlZmF1bHQgX0NITkxfV09SRFNJWkUgaXMgMiBieXRlcy93b3JkICovCisjZW5kaWYKKworI2RlZmluZSBNQVhPUFBTIDE2CisKKy8qIFNoYXJlZCBtZW1vcnkgY29uZmlnIG9wdGlvbnMgKi8KKyNkZWZpbmUgU0hNX0NVUlJPUFAJMAkvKiBTZXQgY3VycmVudCBPUFAgaW4gc2htICovCisjZGVmaW5lIFNITV9PUFBJTkZPCTEJLyogU2V0IGRzcCB2b2x0YWdlIGFuZCBmcmVxIHRhYmxlIHZhbHVlcyAqLworI2RlZmluZSBTSE1fR0VUT1BQCTIJLyogR2V0IG9wcCByZXF1ZXN0ZWQgYnkgRFNQICovCisKK3N0cnVjdCBvcHBfdGFibGVfZW50cnkgeworCXUzMiB2b2x0YWdlOworCXUzMiBmcmVxdWVuY3k7CisJdTMyIG1pbl9mcmVxOworCXUzMiBtYXhfZnJlcTsKK307CisKK3N0cnVjdCBvcHBfc3RydWN0IHsKKwl1MzIgY3Vycl9vcHBfcHQ7CisJdTMyIG51bV9vcHBfcHRzOworCXN0cnVjdCBvcHBfdGFibGVfZW50cnkgb3BwX3BvaW50W01BWE9QUFNdOworfTsKKworLyogUmVxdWVzdCB0byBNUFUgKi8KK3N0cnVjdCBvcHBfcnFzdF9zdHJ1Y3QgeworCXUzMiBycXN0X2RzcF9mcmVxOworCXUzMiBycXN0X29wcF9wdDsKK307CisKKy8qIEluZm8gdG8gTVBVICovCitzdHJ1Y3QgbG9hZF9tb25fc3RydWN0IHsKKwl1MzIgY3Vycl9kc3BfbG9hZDsKKwl1MzIgY3Vycl9kc3BfZnJlcTsKKwl1MzIgcHJlZF9kc3BfbG9hZDsKKwl1MzIgcHJlZF9kc3BfZnJlcTsKK307CisKKy8qIFN0cnVjdHVyZSBpbiBzaGFyZWQgYmV0d2VlbiBEU1AgYW5kIFBDIGZvciBjb21tdW5pY2F0aW9uLiAqLworc3RydWN0IHNobSB7CisJdTMyIGRzcF9mcmVlX21hc2s7CS8qIFdyaXR0ZW4gYnkgRFNQLCByZWFkIGJ5IFBDLiAqLworCXUzMiBob3N0X2ZyZWVfbWFzazsJLyogV3JpdHRlbiBieSBQQywgcmVhZCBieSBEU1AgKi8KKworCXUzMiBpbnB1dF9mdWxsOwkJLyogSW5wdXQgY2hhbm5lbCBoYXMgdW5yZWFkIGRhdGEuICovCisJdTMyIGlucHV0X2lkOwkJLyogQ2hhbm5lbCBmb3Igd2hpY2ggaW5wdXQgaXMgYXZhaWxhYmxlLiAqLworCXUzMiBpbnB1dF9zaXplOwkJLyogU2l6ZSBvZiBkYXRhIGJsb2NrIChpbiBEU1Agd29yZHMpLiAqLworCisJdTMyIG91dHB1dF9mdWxsOwkvKiBPdXRwdXQgY2hhbm5lbCBoYXMgdW5yZWFkIGRhdGEuICovCisJdTMyIG91dHB1dF9pZDsJCS8qIENoYW5uZWwgZm9yIHdoaWNoIG91dHB1dCBpcyBhdmFpbGFibGUuICovCisJdTMyIG91dHB1dF9zaXplOwkvKiBTaXplIG9mIGRhdGEgYmxvY2sgKGluIERTUCB3b3JkcykuICovCisKKwl1MzIgYXJnOwkJLyogQXJnIGZvciBJc3N1ZS9SZWNsYWltICgyMyBiaXRzIGZvciA1NXgpLiAqLworCXUzMiByZXN2ZDsJCS8qIEtlZXAgc3RydWN0dXJlIHNpemUgZXZlbiBmb3IgMzItYml0IERTUHMgKi8KKworCS8qIE9wZXJhdGluZyBQb2ludCBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3Qgb3BwX3N0cnVjdCBvcHBfdGFibGVfc3RydWN0OworCS8qIE9wZXJhdGluZyBQb2ludCBSZXF1ZXN0IHN0cnVjdHVyZSAqLworCXN0cnVjdCBvcHBfcnFzdF9zdHJ1Y3Qgb3BwX3JlcXVlc3Q7CisJLyogbG9hZCBtb25pdG9yIGluZm9ybWF0aW9uIHN0cnVjdHVyZSAqLworCXN0cnVjdCBsb2FkX21vbl9zdHJ1Y3QgbG9hZF9tb25faW5mbzsKKyNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfV0RUMworCS8qIEZsYWcgZm9yIFdEVCBlbmFibGUvZGlzYWJsZSBGL0kgY2xvY2tzICovCisJdTMyIHdkdF9zZXRjbG9ja3M7CisJdTMyIHdkdF9vdmVyZmxvdzsJLyogV0RUIG92ZXJmbG93IHRpbWUgKi8KKwljaGFyIGR1bW15WzE3Nl07CS8qIHBhZGRpbmcgdG8gMjU2IGJ5dGUgYm91bmRhcnkgKi8KKyNlbHNlCisJY2hhciBkdW1teVsxODRdOwkvKiBwYWRkaW5nIHRvIDI1NiBieXRlIGJvdW5kYXJ5ICovCisjZW5kaWYKKwl1MzIgc2htX2RiZ192YXJbNjRdOwkvKiBzaGFyZWQgbWVtb3J5IGRlYnVnIHZhcmlhYmxlcyAqLworfTsKKworCS8qIENoYW5uZWwgTWFuYWdlcjogb25seSBvbmUgY3JlYXRlZCBwZXIgYm9hcmQ6ICovCitzdHJ1Y3QgY2hubF9tZ3IgeworCS8qIEZ1bmN0aW9uIGludGVyZmFjZSB0byBCcmlkZ2UgZHJpdmVyICovCisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisJc3RydWN0IGlvX21nciAqaGlvX21ncjsJLyogSU8gbWFuYWdlciAqLworCS8qIERldmljZSB0aGlzIGJvYXJkIHJlcHJlc2VudHMgKi8KKwlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmo7CisKKwkvKiBUaGVzZSBmaWVsZHMgaW5pdGlhbGl6ZWQgaW4gYnJpZGdlX2NobmxfY3JlYXRlKCk6ICovCisJdTMyIGR3X291dHB1dF9tYXNrOwkvKiBIb3N0IG91dHB1dCBjaGFubmVscyB3LyBmdWxsIGJ1ZmZlcnMgKi8KKwl1MzIgZHdfbGFzdF9vdXRwdXQ7CS8qIExhc3Qgb3V0cHV0IGNoYW5uZWwgZmlyZWQgZnJvbSBEUEMgKi8KKwkvKiBDcml0aWNhbCBzZWN0aW9uIG9iamVjdCBoYW5kbGUgKi8KKwlzcGlubG9ja190IGNobmxfbWdyX2xvY2s7CisJdTMyIHdvcmRfc2l6ZTsJCS8qIFNpemUgaW4gYnl0ZXMgb2YgRFNQIHdvcmQgKi8KKwl1OCBtYXhfY2hhbm5lbHM7CS8qIFRvdGFsIG51bWJlciBvZiBjaGFubmVscyAqLworCXU4IG9wZW5fY2hhbm5lbHM7CS8qIFRvdGFsIG51bWJlciBvZiBvcGVuIGNoYW5uZWxzICovCisJc3RydWN0IGNobmxfb2JqZWN0ICoqYXBfY2hhbm5lbDsJLyogQXJyYXkgb2YgY2hhbm5lbHMgKi8KKwl1OCBkd190eXBlOwkJLyogVHlwZSBvZiBjaGFubmVsIGNsYXNzIGxpYnJhcnkgKi8KKwkvKiBJZiBubyBzaG0gc3ltcywgcmV0dXJuIGZvciBDSE5MX09wZW4gKi8KKwlpbnQgY2hubF9vcGVuX3N0YXR1czsKK307CisKKy8qCisgKiAgQ2hhbm5lbDogdXAgdG8gQ0hOTF9NQVhDSEFOTkVMUyBwZXIgYm9hcmQgb3IgaWYgRFNQLURNQSBzdXBwb3J0ZWQgdGhlbgorICogICAgIHVwIHRvIENITkxfTUFYQ0hBTk5FTFMgKyBDSE5MX01BWERETUFDSE5MUyBwZXIgYm9hcmQuCisgKi8KK3N0cnVjdCBjaG5sX29iamVjdCB7CisJLyogUG9pbnRlciBiYWNrIHRvIGNoYW5uZWwgbWFuYWdlciAqLworCXN0cnVjdCBjaG5sX21nciAqY2hubF9tZ3Jfb2JqOworCXUzMiBjaG5sX2lkOwkJLyogQ2hhbm5lbCBpZCAqLworCXU4IGR3X3N0YXRlOwkJLyogQ3VycmVudCBjaGFubmVsIHN0YXRlICovCisJczggY2hubF9tb2RlOwkJLyogQ2hubCBtb2RlIGFuZCBhdHRyaWJ1dGVzICovCisJLyogQ2hubCBJL08gY29tcGxldGlvbiBldmVudCAodXNlciBtb2RlKSAqLworCXZvaWQgKnVzZXJfZXZlbnQ7CisJLyogQWJzdHJhY3Qgc3luY3Jvbml6YXRpb24gb2JqZWN0ICovCisJc3RydWN0IHN5bmNfb2JqZWN0ICpzeW5jX2V2ZW50OworCXUzMiBwcm9jZXNzOwkJLyogUHJvY2VzcyB3aGljaCBjcmVhdGVkIHRoaXMgY2hhbm5lbCAqLworCXUzMiBwY2JfYXJnOwkJLyogQXJndW1lbnQgdG8gdXNlIHdpdGggY2FsbGJhY2sgKi8KKwlzdHJ1Y3QgbHN0X2xpc3QgKnBpb19yZXF1ZXN0czsJLyogTGlzdCBvZiBJT1IncyB0byBkcml2ZXIgKi8KKwlzMzIgY2lvX2NzOwkJLyogTnVtYmVyIG9mIElPQydzIGluIHF1ZXVlICovCisJczMyIGNpb19yZXFzOwkJLyogTnVtYmVyIG9mIElPUmVxdWVzdHMgaW4gcXVldWUgKi8KKwlzMzIgY2hubF9wYWNrZXRzOwkvKiBJbml0aWFsIG51bWJlciBvZiBmcmVlIElycHMgKi8KKwkvKiBMaXN0IG9mIElPQydzIGZyb20gZHJpdmVyICovCisJc3RydWN0IGxzdF9saXN0ICpwaW9fY29tcGxldGlvbnM7CisJc3RydWN0IGxzdF9saXN0ICpmcmVlX3BhY2tldHNfbGlzdDsJLyogTGlzdCBvZiBmcmVlIElycHMgKi8KKwlzdHJ1Y3QgbnRmeV9vYmplY3QgKm50Znlfb2JqOworCXUzMiBieXRlc19tb3ZlZDsJLyogVG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVyZWQgKi8KKworCS8qIEZvciBEU1AtRE1BICovCisKKwkvKiBUeXBlIG9mIGNobmwgdHJhbnNwb3J0OkNITkxfW1BDUFldW0RETUFdICovCisJdTMyIGNobmxfdHlwZTsKK307CisKKy8qIEkvTyBSZXF1ZXN0L2NvbXBsZXRpb24gcGFja2V0OiAqLworc3RydWN0IGNobmxfaXJwIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CS8qIExpbmsgdG8gbmV4dCBDSElSUCBpbiBxdWV1ZS4gKi8KKwkvKiBCdWZmZXIgdG8gYmUgZmlsbGVkL2VtcHRpZWQuIChVc2VyKSAqLworCXU4ICpob3N0X3VzZXJfYnVmOworCS8qIEJ1ZmZlciB0byBiZSBmaWxsZWQvZW1wdGllZC4gKFN5c3RlbSkgKi8KKwl1OCAqaG9zdF9zeXNfYnVmOworCXUzMiBkd19hcmc7CQkvKiBJc3N1ZS9SZWNsYWltIGFyZ3VtZW50LiAqLworCXUzMiBkc3BfdHhfYWRkcjsJLyogVHJhbnNmZXIgYWRkcmVzcyBvbiBEU1Agc2lkZS4gKi8KKwl1MzIgYnl0ZV9zaXplOwkJLyogQnl0ZXMgdHJhbnNmZXJyZWQuICovCisJdTMyIGJ1Zl9zaXplOwkJLyogQWN0dWFsIGJ1ZmZlciBzaXplIHdoZW4gYWxsb2NhdGVkLiAqLworCXUzMiBzdGF0dXM7CQkvKiBTdGF0dXMgb2YgSU8gY29tcGxldGlvbi4gKi8KK307CisKKyNlbmRpZiAvKiBfQ0hOTF9TTV8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9icmRkZWZzLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvYnJkZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MGQ5YTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvYnJkZGVmcy5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBicmRkZWZzLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogR2xvYmFsIEJSRCBjb25zdGFudHMgYW5kIHR5cGVzLCBzaGFyZWQgYmV0d2VlbiBEU1AgQVBJIGFuZCBCcmlkZ2UgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgQlJEREVGU18KKyNkZWZpbmUgQlJEREVGU18KKworLyogcGxhdGZvcm0gc3RhdHVzIHZhbHVlcyAqLworI2RlZmluZSBCUkRfU1RPUFBFRCAgICAgMHgwCS8qIE5vIE1vbml0b3IgTG9hZGVkLCBOb3QgcnVubmluZy4gKi8KKyNkZWZpbmUgQlJEX0lETEUgICAgICAgIDB4MQkvKiBNb25pdG9yIExvYWRlZCwgYnV0IHN1c3BlbmRlZC4gKi8KKyNkZWZpbmUgQlJEX1JVTk5JTkcgICAgIDB4MgkvKiBNb25pdG9yIGxvYWRlZCwgYW5kIGV4ZWN1dGluZy4gKi8KKyNkZWZpbmUgQlJEX1VOS05PV04gICAgIDB4MwkvKiBCb2FyZCBzdGF0ZSBpcyBpbmRldGVybWluYXRlLiAqLworI2RlZmluZSBCUkRfU1lOQ0lOSVQgICAgMHg0CisjZGVmaW5lIEJSRF9MT0FERUQgICAgICAweDUKKyNkZWZpbmUgQlJEX0xBU1RTVEFURSAgIEJSRF9MT0FERUQJLyogU2V0IHRvIGhpZ2hlc3QgbGVnYWwgYm9hcmQgc3RhdGUuICovCisjZGVmaW5lIEJSRF9TTEVFUF9UUkFOU0lUSU9OIDB4NgkvKiBTbGVlcCB0cmFuc2l0aW9uIGluIHByb2dyZXNzICovCisjZGVmaW5lIEJSRF9ISUJFUk5BVElPTiAweDcJLyogTVBVIGluaXRpYXRlZCBoaWJlcm5hdGlvbiAqLworI2RlZmluZSBCUkRfUkVURU5USU9OICAgICAweDgJLyogUmV0ZW50aW9uIG1vZGUgKi8KKyNkZWZpbmUgQlJEX0RTUF9ISUJFUk5BVElPTiAgICAgMHg5CS8qIERTUCBpbml0aWF0ZWQgaGliZXJuYXRpb24gKi8KKyNkZWZpbmUgQlJEX0VSUk9SCQkweEEJLyogQm9hcmQgc3RhdGUgaXMgRXJyb3IgKi8KKworLyogQlJEIE9iamVjdCAqLworc3RydWN0IGJyZF9vYmplY3Q7CisKKyNlbmRpZiAvKiBCUkRERUZTXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2NmZy5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2NmZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YTg5OTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY2ZnLmgKQEAgLTAsMCArMSwyMjIgQEAKKy8qCisgKiBjZmcuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBQTSBDb25maWd1cmF0aW9uIG1vZHVsZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIENGR18KKyNkZWZpbmUgQ0ZHXworI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NmZ2RlZnMuaD4KKworLyoKKyAqICA9PT09PT09PSBjZmdfZXhpdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERpc2NvbnRpbnVlIHVzYWdlIG9mIHRoZSBDRkcgbW9kdWxlLgorICogIFBhcmFtZXRlcnM6CisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgY2ZnX2luaXQodm9pZCkgd2FzIHByZXZpb3VzbHkgY2FsbGVkLgorICogIEVuc3VyZXM6CisgKiAgICAgIFJlc291cmNlcyBhY3F1aXJlZCBpbiBjZmdfaW5pdCh2b2lkKSBhcmUgZnJlZWQuCisgKi8KK2V4dGVybiB2b2lkIGNmZ19leGl0KHZvaWQpOworCisvKgorICogID09PT09PT09IGNmZ19nZXRfYXV0b19zdGFydCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJlaXZlIHRoZSBhdXRvc3RhcnQgbWFzaywgaWYgYW55LCBmb3IgdGhpcyBib2FyZC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkZXZfbm9kZV9vYmo6ICBIYW5kbGUgdG8gdGhlIGRldl9ub2RlIHdobydzIGRyaXZlciB3ZSBhcmUgcXVlcnlpbmcuCisgKiAgICAgIGF1dG9fc3RhcnQ6ICAgUHRyIHRvIGxvY2F0aW9uIGZvciAzMiBiaXQgYXV0b3N0YXJ0IG1hc2suCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogIGRldl9ub2RlX29iaiBpcyBpbnZhbGlkLgorICogICAgICAtRU5PREFUQTogVW5hYmxlIHRvIHJldHJlaXZlIHJlc291cmNlLgorICogIFJlcXVpcmVzOgorICogICAgICBDRkcgaW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgICphdXRvX3N0YXJ0IGNvbnRhaW5zIGF1dG9zdGFydCBtYXNrIGZvciB0aGlzIGRldm5vZGUuCisgKi8KK2V4dGVybiBpbnQgY2ZnX2dldF9hdXRvX3N0YXJ0KHN0cnVjdCBjZmdfZGV2bm9kZSAqZGV2X25vZGVfb2JqLAorCQkJCSAgICAgdTMyICphdXRvX3N0YXJ0KTsKKworLyoKKyAqICA9PT09PT09PSBjZmdfZ2V0X2NkX3ZlcnNpb24gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZXMgdGhlIHZlcnNpb24gb2YgdGhlIFBNIENsYXNzIERyaXZlci4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICB2ZXJzaW9uOiAgICBQdHIgdG8gdTMyIHRvIGNvbnRhaW4gdmVyc2lvbiBudW1iZXIgdXBvbiByZXR1cm4uCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgU3VjY2Vzcy4gIHZlcnNpb24gY29udGFpbnMgQ2xhc3MgRHJpdmVyIHZlcnNpb24gaW4KKyAqICAgICAgICAgICAgICAgICAgdGhlIGZvcm06IDB4QUFCQkNDREQgd2hlcmUgQUFCQiBpcyBNYWpvciB2ZXJzaW9uIGFuZAorICogICAgICAgICAgICAgICAgICBDQ0REIGlzIE1pbm9yLgorICogICAgICAtRVBFUk06ICBGYWlsdXJlLgorICogIFJlcXVpcmVzOgorICogICAgICBDRkcgaW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgU3VjY2Vzcy4KKyAqICAgICAgZWxzZTogICAgICAgKnZlcnNpb24gaXMgTlVMTC4KKyAqLworZXh0ZXJuIGludCBjZmdfZ2V0X2NkX3ZlcnNpb24odTMyICp2ZXJzaW9uKTsKKworLyoKKyAqICA9PT09PT09PSBjZmdfZ2V0X2Rldl9vYmplY3QgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgRGV2aWNlIE9iamVjdCBoYW5kbGUgZm9yIGEgZ2l2ZW4gZGV2bm9kZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkZXZfbm9kZV9vYmo6CVBsYXRmb3JtJ3MgZGV2X25vZGUgaGFuZGxlIGZyb20gd2hpY2ggdG8gcmV0cmlldmUKKyAqICAgICAgCQl2YWx1ZS4KKyAqICAgICAgdmFsdWU6ICAgICAgICAgIFB0ciB0byBsb2NhdGlvbiB0byBzdG9yZSB0aGUgdmFsdWUuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogZGV2X25vZGVfb2JqIGlzIGludmFsaWQgb3IgZGV2aWNlX29iaiBpcyBpbnZhbGlkLgorICogICAgICAtRU5PREFUQTogVGhlIHJlc291cmNlIGlzIG5vdCBhdmFpbGFibGUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIENGRyBpbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAqdmFsdWUgaXMgc2V0IHRvIHRoZSByZXRyaWV2ZWQgdTMyLgorICogICAgICBlbHNlOiAgICAgICAqdmFsdWUgaXMgc2V0IHRvIDBMLgorICovCitleHRlcm4gaW50IGNmZ19nZXRfZGV2X29iamVjdChzdHJ1Y3QgY2ZnX2Rldm5vZGUgKmRldl9ub2RlX29iaiwKKwkJCQkgICAgIHUzMiAqdmFsdWUpOworCisvKgorICogID09PT09PT09IGNmZ19nZXRfZXhlY19maWxlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmVpdmUgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSwgaWYgYW55LCBmb3IgdGhpcyBib2FyZC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkZXZfbm9kZV9vYmo6IEhhbmRsZSB0byB0aGUgZGV2X25vZGUgd2hvJ3MgZHJpdmVyIHdlIGFyZSBxdWVyeWluZy4KKyAqICAgICAgYnVmX3NpemU6ICAgICAgIFNpemUgb2YgYnVmZmVyLgorICogICAgICBzdHJfZXhlY19maWxlOiAgUHRyIHRvIGNoYXJhY3RlciBidWYgdG8gaG9sZCBFeGVjRmlsZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgZGV2X25vZGVfb2JqIGlzIGludmFsaWQgb3Igc3RyX2V4ZWNfZmlsZSBpcyBpbnZhbGlkLgorICogICAgICAtRU5PREFUQTogVGhlIHJlc291cmNlIGlzIG5vdCBhdmFpbGFibGUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIENGRyBpbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICBOb3QgbW9yZSB0aGFuIGJ1Zl9zaXplIGJ5dGVzIHdlcmUgY29waWVkIGludG8gc3RyX2V4ZWNfZmlsZSwKKyAqICAgICAgICAgICAgICAgICAgYW5kICpzdHJfZXhlY19maWxlIGNvbnRhaW5zIGRlZmF1bHQgZXhlY3V0YWJsZSBmb3IgdGhpcworICogICAgICAgICAgICAgICAgICBkZXZub2RlLgorICovCitleHRlcm4gaW50IGNmZ19nZXRfZXhlY19maWxlKHN0cnVjdCBjZmdfZGV2bm9kZSAqZGV2X25vZGVfb2JqLAorCQkJCSAgICB1MzIgYnVmX3NpemUsIGNoYXIgKnN0cl9leGVjX2ZpbGUpOworCisvKgorICogID09PT09PT09IGNmZ19nZXRfb2JqZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIERyaXZlciBPYmplY3QgaGFuZGxlIEZyb20gdGhlIFJlZ2lzdHJ5CisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgdmFsdWU6ICAgICAgUHRyIHRvIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSB2YWx1ZS4KKyAqICAgICAgZHdfdHlwZSAgICAgIFR5cGUgb2YgT2JqZWN0IHRvIEdldAorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgIFN1Y2Nlc3MuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIENGRyBpbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAqdmFsdWUgaXMgc2V0IHRvIHRoZSByZXRyaWV2ZWQgdTMyKG5vbi1aZXJvKS4KKyAqICAgICAgZWxzZTogICAgICAgKnZhbHVlIGlzIHNldCB0byAwTC4KKyAqLworZXh0ZXJuIGludCBjZmdfZ2V0X29iamVjdCh1MzIgKnZhbHVlLCB1OCBkd190eXBlKTsKKworLyoKKyAqICA9PT09PT09PSBjZmdfZ2V0X3BlcmZfdmFsdWUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSBhIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIFBFUkYgc2hvdWxkIGxvZyBzdGF0aXN0aWNzIGZvciB0aGUKKyAqICAgICAgUE0gY2xhc3MgZHJpdmVyLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGVuYWJsZV9wZXJmOiAgICBMb2NhdGlvbiB0byBzdG9yZSBmbGFnLiAgMCBpbmRpY2F0ZXMgdGhlIGtleSB3YXMKKyAqICAgICAgICAgICAgICAgICAgICAgIG5vdCBmb3VuZCwgb3IgaGFkIGEgemVybyB2YWx1ZS4gIEEgbm9uemVybyB2YWx1ZQorICogICAgICAgICAgICAgICAgICAgICAgbWVhbnMgdGhlIGtleSB3YXMgZm91bmQgYW5kIGhhZCBhIG5vbnplcm8gdmFsdWUuCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgZW5hYmxlX3BlcmYgIT0gTlVMTDsKKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gdm9pZCBjZmdfZ2V0X3BlcmZfdmFsdWUoYm9vbCAqZW5hYmxlX3BlcmYpOworCisvKgorICogID09PT09PT09IGNmZ19nZXRfemxfZmlsZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJlaXZlIHRoZSBaTEZpbGUsIGlmIGFueSwgZm9yIHRoaXMgYm9hcmQuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgZGV2X25vZGVfb2JqOiBIYW5kbGUgdG8gdGhlIGRldl9ub2RlIHdobydzIGRyaXZlciB3ZSBhcmUgcXVlcnlpbmcuCisgKiAgICAgIGJ1Zl9zaXplOiAgICAgICBTaXplIG9mIGJ1ZmZlci4KKyAqICAgICAgc3RyX3psX2ZpbGVfbmFtZTogUHRyIHRvIGNoYXJhY3RlciBidWYgdG8gaG9sZCBaTEZpbGVOYW1lLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6IHN0cl96bF9maWxlX25hbWUgaXMgaW52YWxpZCBvciBkZXZfbm9kZV9vYmogaXMgaW52YWxpZC4KKyAqICAgICAgLUVOT0RBVEE6IGNvdWxkbid0IGZpbmQgdGhlIFpMRmlsZU5hbWUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIENGRyBpbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICBOb3QgbW9yZSB0aGFuIGJ1Zl9zaXplIGJ5dGVzIHdlcmUgY29waWVkIGludG8KKyAqICAgICAgICAgICAgICAgICAgc3RyX3psX2ZpbGVfbmFtZSwgYW5kICpzdHJfemxfZmlsZV9uYW1lIGNvbnRhaW5zIFpMRmlsZU5hbWUKKyAqICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgZGV2bm9kZS4KKyAqLworZXh0ZXJuIGludCBjZmdfZ2V0X3psX2ZpbGUoc3RydWN0IGNmZ19kZXZub2RlICpkZXZfbm9kZV9vYmosCisJCQkJICB1MzIgYnVmX3NpemUsIGNoYXIgKnN0cl96bF9maWxlX25hbWUpOworCisvKgorICogID09PT09PT09IGNmZ19pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZSB0aGUgQ0ZHIG1vZHVsZSdzIHByaXZhdGUgc3RhdGUuCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogICAgICBUUlVFIGlmIGluaXRpYWxpemVkOyBGQUxTRSBpZiBlcnJvciBvY2N1cmVkLgorICogIFJlcXVpcmVzOgorICogIEVuc3VyZXM6CisgKiAgICAgIEEgcmVxdWlyZW1lbnQgZm9yIGVhY2ggb2YgdGhlIG90aGVyIHB1YmxpYyBDRkcgZnVuY3Rpb25zLgorICovCitleHRlcm4gYm9vbCBjZmdfaW5pdCh2b2lkKTsKKworLyoKKyAqICA9PT09PT09PSBjZmdfc2V0X2Rldl9vYmplY3QgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTdG9yZSB0aGUgRGV2aWNlIE9iamVjdCBoYW5kbGUgZm9yIGEgZ2l2ZW4gZGV2bm9kZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkZXZfbm9kZV9vYmo6ICAgUGxhdGZvcm0ncyBkZXZfbm9kZSBoYW5kbGUgd2UgYXJlIHN0b3JpbmcgdmFsdWUgd2l0aC4KKyAqICAgICAgdmFsdWU6ICAgIEFyYml0cmFyeSB2YWx1ZSB0byBzdG9yZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgZGV2X25vZGVfb2JqIGlzIGludmFsaWQuCisgKiAgICAgIC1FUEVSTTogICAgICAgICAgICAgIEludGVybmFsIEVycm9yLgorICogIFJlcXVpcmVzOgorICogICAgICBDRkcgaW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgVGhlIFByaXZhdGUgdTMyIHdhcyBzdWNjZXNzZnVsbHkgc2V0LgorICovCitleHRlcm4gaW50IGNmZ19zZXRfZGV2X29iamVjdChzdHJ1Y3QgY2ZnX2Rldm5vZGUgKmRldl9ub2RlX29iaiwKKwkJCQkgICAgIHUzMiB2YWx1ZSk7CisKKy8qCisgKiAgPT09PT09PT0gQ0ZHX1NldERydk9iamVjdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFN0b3JlIHRoZSBEcml2ZXIgT2JqZWN0IGhhbmRsZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICB2YWx1ZTogICAgICAgICAgQXJiaXRyYXJ5IHZhbHVlIHRvIHN0b3JlLgorICogICAgICBkd190eXBlICAgICAgICAgIFR5cGUgb2YgT2JqZWN0IHRvIFN0b3JlCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FUEVSTTogICAgICBJbnRlcm5hbCBFcnJvci4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgQ0ZHIGluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAgICAgICBUaGUgUHJpdmF0ZSB1MzIgd2FzIHN1Y2Nlc3NmdWxseSBzZXQuCisgKi8KK2V4dGVybiBpbnQgY2ZnX3NldF9vYmplY3QodTMyIHZhbHVlLCB1OCBkd190eXBlKTsKKworI2VuZGlmIC8qIENGR18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jZmdkZWZzLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY2ZnZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MTIyZGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY2ZnZGVmcy5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBjZmdkZWZzLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogR2xvYmFsIENGRyBjb25zdGFudHMgYW5kIHR5cGVzLCBzaGFyZWQgYmV0d2VlbiBEU1AgQVBJIGFuZCBCcmlkZ2UgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgQ0ZHREVGU18KKyNkZWZpbmUgQ0ZHREVGU18KKworLyogTWF4aW11bSBsZW5ndGggb2YgbW9kdWxlIHNlYXJjaCBwYXRoLiAqLworI2RlZmluZSBDRkdfTUFYU0VBUkNIUEFUSExFTiAgICAyNTUKKworLyogTWF4aW11bSBsZW5ndGggb2YgZ2VuZXJhbCBwYXRocy4gKi8KKyNkZWZpbmUgQ0ZHX01BWFBBVEggICAgICAgICAgICAgMjU1CisKKy8qIEhvc3QgUmVzb3VyY2VzOiAqLworI2RlZmluZSBDRkdfTUFYTUVNUkVHSVNURVJTICAgICA5CisjZGVmaW5lIENGR19NQVhJT1BPUlRTICAgICAgICAgIDIwCisjZGVmaW5lIENGR19NQVhJUlFTICAgICAgICAgICAgIDcKKyNkZWZpbmUgQ0ZHX01BWERNQUNIQU5ORUxTICAgICAgNworCisvKiBJUlEgZmxhZyAqLworI2RlZmluZSBDRkdfSVJRU0hBUkVEICAgICAgICAgICAweDAxCS8qIElSUSBjYW4gYmUgc2hhcmVkICovCisKKy8qIERTUCBSZXNvdXJjZXM6ICovCisjZGVmaW5lIENGR19EU1BNQVhNRU1UWVBFUyAgICAgIDEwCisjZGVmaW5lIENGR19ERUZBVUxUX05VTV9XSU5ET1dTIDEJLyogV2Ugc3VwcG9ydCBvbmx5IG9uZSB3aW5kb3cuICovCisKKy8qIEEgcGxhdGZvcm0tcmVsYXRlZCBkZXZpY2UgaGFuZGxlOiAqLworc3RydWN0IGNmZ19kZXZub2RlOworCisvKgorICogIEhvc3QgcmVzb3VyY2Ugc3RydWN0dXJlLgorICovCitzdHJ1Y3QgY2ZnX2hvc3RyZXMgeworCXUzMiBudW1fbWVtX3dpbmRvd3M7CS8qIFNldCB0byBkZWZhdWx0ICovCisJLyogVGhpcyBpcyB0aGUgYmFzZS5tZW1vcnkgKi8KKwl1MzIgZHdfbWVtX2Jhc2VbQ0ZHX01BWE1FTVJFR0lTVEVSU107CS8qIHNobSB2aXJ0dWFsIGFkZHJlc3MgKi8KKwl1MzIgZHdfbWVtX2xlbmd0aFtDRkdfTUFYTUVNUkVHSVNURVJTXTsJLyogTGVuZ3RoIG9mIHRoZSBCYXNlICovCisJdTMyIGR3X21lbV9waHlzW0NGR19NQVhNRU1SRUdJU1RFUlNdOwkvKiBzaG0gUGh5c2ljYWwgYWRkcmVzcyAqLworCXU4IGJpcnFfcmVnaXN0ZXJzOwkvKiBJUlEgTnVtYmVyICovCisJdTggYmlycV9hdHRyaWI7CQkvKiBJUlEgQXR0cmlidXRlICovCisJdTMyIGR3X29mZnNldF9mb3JfbW9uaXRvcjsJLyogVGhlIFNoYXJlZCBtZW1vcnkgc3RhcnRzIGZyb20KKwkJCQkJICogZHdfbWVtX2Jhc2UgKyB0aGlzIG9mZnNldCAqLworCS8qCisJICogIEluZm8gbmVlZGVkIGJ5IE5PREUgZm9yIGFsbG9jYXRpbmcgY2hhbm5lbHMgdG8gY29tbXVuaWNhdGUgd2l0aCBSTVM6CisJICogICAgICBkd19jaG5sX29mZnNldDogICAgICAgT2Zmc2V0IG9mIFJNUyBjaGFubmVscy4gTG93ZXIgY2hhbm5lbHMgYXJlCisJICogICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkLgorCSAqICAgICAgZHdfY2hubF9idWZfc2l6ZTogICAgICBTaXplIG9mIGNoYW5uZWwgYnVmZmVyIHRvIHNlbmQgdG8gUk1TCisJICogICAgICBkd19udW1fY2hubHM6CQlUb3RhbCBudW1iZXIgb2YgY2hhbm5lbHMKKwkgKiAgICAgIAkJCShpbmNsdWRpbmcgcmVzZXJ2ZWQpLgorCSAqLworCXUzMiBkd19jaG5sX29mZnNldDsKKwl1MzIgZHdfY2hubF9idWZfc2l6ZTsKKwl1MzIgZHdfbnVtX2NobmxzOworCXZvaWQgX19pb21lbSAqZHdfcGVyX2Jhc2U7CisJdTMyIGR3X3Blcl9wbV9iYXNlOworCXUzMiBkd19jb3JlX3BtX2Jhc2U7CisJdm9pZCBfX2lvbWVtICpkd19kbW11X2Jhc2U7CisJdm9pZCBfX2lvbWVtICpkd19zeXNfY3RybF9iYXNlOworfTsKKworc3RydWN0IGNmZ19kc3BtZW1kZXNjIHsKKwl1MzIgbWVtX3R5cGU7CQkvKiBUeXBlIG9mIG1lbW9yeS4gKi8KKwl1MzIgdWxfbWluOwkJLyogTWluaW11bSBhbW91bnQgb2YgbWVtb3J5IG9mIHRoaXMgdHlwZS4gKi8KKwl1MzIgdWxfbWF4OwkJLyogTWF4aW11bSBhbW91bnQgb2YgbWVtb3J5IG9mIHRoaXMgdHlwZS4gKi8KK307CisKKyNlbmRpZiAvKiBDRkdERUZTXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2NobmwuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jaG5sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODczM2IzYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jaG5sLmgKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBjaG5sLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogRFNQIEFQSSBjaGFubmVsIGludGVyZmFjZTogbXVsdGlwbGV4ZXMgZGF0YSBzdHJlYW1zIHRocm91Z2ggdGhlIHNpbmdsZQorICogcGh5c2ljYWwgbGluayBtYW5hZ2VkIGJ5IGEgQnJpZGdlIGRyaXZlci4KKyAqCisgKiBTZWUgRFNQIEFQSSBjaG5sLmggZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIENITkxfCisjZGVmaW5lIENITkxfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvY2hubHByaXYuaD4KKworLyoKKyAqICA9PT09PT09PSBjaG5sX2Nsb3NlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRW5zdXJlcyBhbGwgcGVuZGluZyBJL08gb24gdGhpcyBjaGFubmVsIGlzIGNhbmNlbGxlZCwgZGlzY2FyZHMgYWxsCisgKiAgICAgIHF1ZXVlZCBJL08gY29tcGxldGlvbiBub3RpZmljYXRpb25zLCB0aGVuIGZyZWVzIHRoZSByZXNvdXJjZXMgYWxsb2NhdGVkCisgKiAgICAgIGZvciB0aGlzIGNoYW5uZWwsIGFuZCBtYWtlcyB0aGUgY29ycmVzcG9uZGluZyBsb2dpY2FsIGNoYW5uZWwgaWQKKyAqICAgICAgYXZhaWxhYmxlIGZvciBzdWJzZXF1ZW50IHVzZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBjaG5sX29iajogICAgICAgICAgQ2hhbm5lbCBvYmplY3QgaGFuZGxlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzOworICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGNobmxfb2JqLgorICogIFJlcXVpcmVzOgorICogICAgICBjaG5sX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBObyB0aHJlYWQgbXVzdCBiZSBibG9ja2VkIG9uIHRoaXMgY2hhbm5lbCdzIEkvTyBjb21wbGV0aW9uIGV2ZW50LgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAgICAgICBUaGUgSS9PIGNvbXBsZXRpb24gZXZlbnQgZm9yIHRoaXMgY2hhbm5lbCBpcyBmcmVlZC4KKyAqICAgICAgICAgICAgICAgICAgICAgIGNobmxfb2JqIGlzIG5vIGxvbmdlciB2YWxpZC4KKyAqLworZXh0ZXJuIGludCBjaG5sX2Nsb3NlKHN0cnVjdCBjaG5sX29iamVjdCAqY2hubF9vYmopOworCisvKgorICogID09PT09PT09IGNobmxfY3JlYXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ3JlYXRlIGEgY2hhbm5lbCBtYW5hZ2VyIG9iamVjdCwgcmVzcG9uc2libGUgZm9yIG9wZW5pbmcgbmV3IGNoYW5uZWxzCisgKiAgICAgIGFuZCBjbG9zaW5nIG9sZCBvbmVzIGZvciBhIGdpdmVuIGJvYXJkLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGNoYW5uZWxfbWdyOiAgICBMb2NhdGlvbiB0byBzdG9yZSBhIGNoYW5uZWwgbWFuYWdlciBvYmplY3Qgb24gb3V0cHV0LgorICogICAgICBoZGV2X29iajogICAgIEhhbmRsZSB0byBhIGRldmljZSBvYmplY3QuCisgKiAgICAgIG1ncl9hdHRydHM6ICAgICAgQ2hhbm5lbCBtYW5hZ2VyIGF0dHJpYnV0ZXMuCisgKiAgICAgIG1ncl9hdHRydHMtPm1heF9jaGFubmVsczogICBNYXggY2hhbm5lbHMKKyAqICAgICAgbWdyX2F0dHJ0cy0+YmlycTogICAgICAgIENoYW5uZWwncyBJL08gSVJRIG51bWJlci4KKyAqICAgICAgbWdyX2F0dHJ0cy0+aXJxX3NoYXJlZDogICAgIFRSVUUgaWYgdGhlIElSUSBpcyBzaGFyZWFibGUuCisgKiAgICAgIG1ncl9hdHRydHMtPndvcmRfc2l6ZTogICBEU1AgV29yZCBzaXplIGluIGVxdWl2YWxlbnQgUEMgYnl0ZXMuLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgICAgIFN1Y2Nlc3M7CisgKiAgICAgIC1FRkFVTFQ6ICAgICAgICAgICAgaGRldl9vYmogaXMgaW52YWxpZC4KKyAqICAgICAgLUVJTlZBTDogbWF4X2NoYW5uZWxzIGlzIDAuCisgKiAgICAgICAgICAgICAgIEludmFsaWQgRFNQIHdvcmQgc2l6ZSAobXVzdCBiZSA+IDApLgorICogICAgICAgICAgICAgICBJbnZhbGlkIGJhc2UgYWRkcmVzcyBmb3IgRFNQIGNvbW11bmljYXRpb25zLgorICogICAgICAtRU5PTUVNOiAgICAgICAgICAgIEluc3VmZmljaWVudCBtZW1vcnkgZm9yIHJlcXVlc3RlZCByZXNvdXJjZXMuCisgKiAgICAgIC1FSU86ICAgICAgICAgICAgIFVuYWJsZSB0byBwbHVnIGNoYW5uZWwgSVNSIGZvciBjb25maWd1cmVkIElSUS4KKyAqICAgICAgLUVDSFJORzogICAgIFRoaXMgbWFuYWdlciBjYW5ub3QgaGFuZGxlIHRoaXMgbWFueSBjaGFubmVscy4KKyAqICAgICAgLUVFWElTVDogICAgICAgQ2hhbm5lbCBtYW5hZ2VyIGFscmVhZHkgZXhpc3RzIGZvciB0aGlzIGRldmljZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgY2hubF9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgY2hhbm5lbF9tZ3IgIT0gTlVMTC4KKyAqICAgICAgbWdyX2F0dHJ0cyAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAgICAgICAgICAgICAgIFN1YnNlcXVlbnQgY2FsbHMgdG8gY2hubF9jcmVhdGUoKSBmb3IgdGhlIHNhbWUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9hcmQgd2l0aG91dCBhbiBpbnRlcnZlbmluZyBjYWxsIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNobmxfZGVzdHJveSgpIHdpbGwgZmFpbC4KKyAqLworZXh0ZXJuIGludCBjaG5sX2NyZWF0ZShzdHJ1Y3QgY2hubF9tZ3IgKipjaGFubmVsX21nciwKKwkJCSAgICAgIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBjaG5sX21ncmF0dHJzICptZ3JfYXR0cnRzKTsKKworLyoKKyAqICA9PT09PT09PSBjaG5sX2Rlc3Ryb3kgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDbG9zZSBhbGwgb3BlbiBjaGFubmVscywgYW5kIGRlc3Ryb3kgdGhlIGNoYW5uZWwgbWFuYWdlci4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoY2hubF9tZ3I6ICAgICAgICAgICBDaGFubmVsIG1hbmFnZXIgb2JqZWN0LgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogICAgICAgIGhjaG5sX21nciB3YXMgaW52YWxpZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgY2hubF9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgICAgIENhbmNlbHMgSS9PIG9uIGVhY2ggb3BlbiBjaGFubmVsLgorICogICAgICAgICAgICAgICAgICAgICAgICAgIENsb3NlcyBlYWNoIG9wZW4gY2hhbm5lbC4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBjaG5sX2NyZWF0ZSBtYXkgc3Vic2VxdWVudGx5IGJlIGNhbGxlZCBmb3IgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtZSBib2FyZC4KKyAqLworZXh0ZXJuIGludCBjaG5sX2Rlc3Ryb3koc3RydWN0IGNobmxfbWdyICpoY2hubF9tZ3IpOworCisvKgorICogID09PT09PT09IGNobmxfZXhpdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERpc2NvbnRpbnVlIHVzYWdlIG9mIHRoZSBDSE5MIG1vZHVsZS4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGNobmxfaW5pdCh2b2lkKSBwcmV2aW91c2x5IGNhbGxlZC4KKyAqICBFbnN1cmVzOgorICogICAgICBSZXNvdXJjZXMsIGlmIGFueSBhY3F1aXJlZCBpbiBjaG5sX2luaXQodm9pZCksIGFyZSBmcmVlZCB3aGVuIHRoZSBsYXN0CisgKiAgICAgIGNsaWVudCBvZiBDSE5MIGNhbGxzIGNobmxfZXhpdCh2b2lkKS4KKyAqLworZXh0ZXJuIHZvaWQgY2hubF9leGl0KHZvaWQpOworCisvKgorICogID09PT09PT09IGNobmxfaW5pdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEluaXRpYWxpemUgdGhlIENITkwgbW9kdWxlJ3MgcHJpdmF0ZSBzdGF0ZS4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgICAgIFRSVUUgaWYgaW5pdGlhbGl6ZWQ7IEZBTFNFIGlmIGVycm9yIG9jY3VycmVkLgorICogIFJlcXVpcmVzOgorICogIEVuc3VyZXM6CisgKiAgICAgIEEgcmVxdWlyZW1lbnQgZm9yIGVhY2ggb2YgdGhlIG90aGVyIHB1YmxpYyBDSE5MIGZ1bmN0aW9ucy4KKyAqLworZXh0ZXJuIGJvb2wgY2hubF9pbml0KHZvaWQpOworCisjZW5kaWYgLyogQ0hOTF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jaG5sZGVmcy5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2NobmxkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJmNWY2YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jaG5sZGVmcy5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBjaG5sZGVmcy5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIFN5c3RlbS13aWRlIGNoYW5uZWwgb2JqZWN0cyBhbmQgY29uc3RhbnRzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgQ0hOTERFRlNfCisjZGVmaW5lIENITkxERUZTXworCisvKiBDaGFubmVsIGlkIG9wdGlvbi4gKi8KKyNkZWZpbmUgQ0hOTF9QSUNLRlJFRSAgICAgICAofjBVTCkJLyogTGV0IG1hbmFnZXIgcGljayBhIGZyZWUgY2hhbm5lbC4gKi8KKworLyogQ2hhbm5lbCBtYW5hZ2VyIGxpbWl0czogKi8KKyNkZWZpbmUgQ0hOTF9JTklUSU9SRVFTICAgICAgNAkvKiBEZWZhdWx0ICMgb2YgSS9PIHJlcXVlc3RzLiAqLworCisvKiBDaGFubmVsIG1vZGVzICovCisjZGVmaW5lIENITkxfTU9ERVRPRFNQCQkwCS8qIERhdGEgc3RyZWFtaW5nIHRvIHRoZSBEU1AuICovCisjZGVmaW5lIENITkxfTU9ERUZST01EU1AJMQkvKiBEYXRhIHN0cmVhbWluZyBmcm9tIHRoZSBEU1AuICovCisKKy8qIEdldElPQ29tcGxldGlvbiBmbGFncyAqLworI2RlZmluZSBDSE5MX0lPQ0lORklOSVRFICAgICAweGZmZmZmZmZmCS8qIFdhaXQgZm9yZXZlciBmb3IgSU8gY29tcGxldGlvbi4gKi8KKyNkZWZpbmUgQ0hOTF9JT0NOT1dBSVQgICAgICAgMHgwCS8qIERlcXVldWUgYW4gSU9DLCBpZiBhdmFpbGFibGUuICovCisKKy8qIElPIENvbXBsZXRpb24gUmVjb3JkIHN0YXR1czogKi8KKyNkZWZpbmUgQ0hOTF9JT0NTVEFUQ09NUExFVEUgMHgwMDAwCS8qIElPIENvbXBsZXRlZC4gKi8KKyNkZWZpbmUgQ0hOTF9JT0NTVEFUQ0FOQ0VMICAgMHgwMDAyCS8qIElPIHdhcyBjYW5jZWxsZWQgKi8KKyNkZWZpbmUgQ0hOTF9JT0NTVEFUVElNRU9VVCAgMHgwMDA4CS8qIFdhaXQgZm9yIElPQyB0aW1lZCBvdXQuICovCisjZGVmaW5lIENITkxfSU9DU1RBVEVPUyAgICAgIDB4ODAwMAkvKiBFbmQgT2YgU3RyZWFtIHJlYWNoZWQuICovCisKKy8qIE1hY3JvcyBmb3IgY2hlY2tpbmcgSS9PIENvbXBsZXRpb24gc3RhdHVzOiAqLworI2RlZmluZSBDSE5MX0lTX0lPX0NPTVBMRVRFKGlvYykgICghKGlvYy5zdGF0dXMgJiB+Q0hOTF9JT0NTVEFURU9TKSkKKyNkZWZpbmUgQ0hOTF9JU19JT19DQU5DRUxMRUQoaW9jKSAoaW9jLnN0YXR1cyAmIENITkxfSU9DU1RBVENBTkNFTCkKKyNkZWZpbmUgQ0hOTF9JU19USU1FRF9PVVQoaW9jKSAgICAoaW9jLnN0YXR1cyAmIENITkxfSU9DU1RBVFRJTUVPVVQpCisKKy8qIENoYW5uZWwgYXR0cmlidXRlczogKi8KK3N0cnVjdCBjaG5sX2F0dHIgeworCXUzMiB1aW9fcmVxczsJCS8qIE1heCAjIG9mIHByZWFsbG9jYXRlZCBJL08gcmVxdWVzdHMuICovCisJdm9pZCAqZXZlbnRfb2JqOwkvKiBVc2VyIHN1cHBsaWVkIGF1dG8tcmVzZXQgZXZlbnQgb2JqZWN0LiAqLworCWNoYXIgKnBzdHJfZXZlbnRfbmFtZTsJLyogUHRyIHRvIG5hbWUgb2YgdXNlciBldmVudCBvYmplY3QuICovCisJdm9pZCAqcmVzZXJ2ZWQxOwkvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gKi8KKwl1MzIgcmVzZXJ2ZWQyOwkJLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuICovCisKK307CisKKy8qIEkvTyBjb21wbGV0aW9uIHJlY29yZDogKi8KK3N0cnVjdCBjaG5sX2lvYyB7CisJdm9pZCAqcGJ1ZjsJCS8qIEJ1ZmZlciB0byBiZSBmaWxsZWQvZW1wdGllZC4gKi8KKwl1MzIgYnl0ZV9zaXplOwkJLyogQnl0ZXMgdHJhbnNmZXJyZWQuICovCisJdTMyIGJ1Zl9zaXplOwkJLyogQWN0dWFsIGJ1ZmZlciBzaXplIGluIGJ5dGVzICovCisJdTMyIHN0YXR1czsJCS8qIFN0YXR1cyBvZiBJTyBjb21wbGV0aW9uLiAqLworCXUzMiBkd19hcmc7CQkvKiBVc2VyIGFyZ3VtZW50IGFzc29jaWF0ZWQgd2l0aCBwYnVmLiAqLworfTsKKworI2VuZGlmIC8qIENITkxERUZTXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2Nobmxwcml2LmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY2hubHByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjkyMTAwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2Nobmxwcml2LmgKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIGNobmxwcml2LmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogUHJpdmF0ZSBjaGFubmVsIGhlYWRlciBzaGFyZWQgYmV0d2VlbiBEU1BTWVMsIERTUEFQSSBhbmQKKyAqIEJyaWRnZSBkcml2ZXIgbW9kdWxlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIENITkxQUklWXworI2RlZmluZSBDSE5MUFJJVl8KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9jaG5sZGVmcy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXZkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3N5bmMuaD4KKworLyogQ2hhbm5lbCBtYW5hZ2VyIGxpbWl0czogKi8KKyNkZWZpbmUgQ0hOTF9NQVhDSEFOTkVMUyAgICAzMgkvKiBNYXggY2hhbm5lbHMgYXZhaWxhYmxlIHBlciB0cmFuc3BvcnQgKi8KKworLyoKKyAqICBUcmFucyBwb3J0IGNoYW5uZWwgSWQgZGVmaW5pdGlvbnM6KG11c3QgbWF0Y2ggZHNwLXNpZGUpLgorICoKKyAqICBGb3IgQ0hOTF9NQVhDSEFOTkVMUyA9IDE2OgorICoKKyAqICBDaG5sSWRzOgorICogICAgICAwLTE1ICAoUENQWSkgLSB0cmFuc3BvcnQgMCkKKyAqICAgICAgMTYtMzEgKERETUEpIC0gdHJhbnNwb3J0IDEpCisgKiAgICAgIDMyLTQ3IChaQ1BZKSAtIHRyYW5zcG9ydCAyKQorICovCisjZGVmaW5lIENITkxfUENQWSAgICAgICAwCS8qIFByb2MtY29weSB0cmFuc3BvcnQgMCAqLworCisjZGVmaW5lIENITkxfTUFYSVJRICAgICAweGZmCS8qIEFyYml0cmFyaWx5IGxhcmdlIG51bWJlci4gKi8KKworLyogVGhlIGZvbGxvd2luZyBtb2RlcyBhcmUgcHJpdmF0ZTogKi8KKyNkZWZpbmUgQ0hOTF9NT0RFVVNFUkVWRU5UICAweDEwMDAJLyogVXNlciBwcm92aWRlZCB0aGUgY2hhbm5lbCBldmVudC4gKi8KKyNkZWZpbmUgQ0hOTF9NT0RFTUFTSyAgICAgICAweDEwMDEKKworLyogSGlnaGVyIGxldmVsIGNoYW5uZWwgc3RhdGVzOiAqLworI2RlZmluZSBDSE5MX1NUQVRFUkVBRFkJCTAJLyogQ2hhbm5lbCByZWFkeSBmb3IgSS9PLiAqLworI2RlZmluZSBDSE5MX1NUQVRFQ0FOQ0VMCTEJLyogSS9PIHdhcyBjYW5jZWxsZWQuICovCisjZGVmaW5lIENITkxfU1RBVEVFT1MJCTIJLyogRW5kIE9mIFN0cmVhbSByZWFjaGVkLiAqLworCisvKiBNYWNyb3MgZm9yIGNoZWNraW5nIG1vZGU6ICovCisjZGVmaW5lIENITkxfSVNfSU5QVVQobW9kZSkgICAgICAobW9kZSAmIENITkxfTU9ERUZST01EU1ApCisjZGVmaW5lIENITkxfSVNfT1VUUFVUKG1vZGUpICAgICAoIUNITkxfSVNfSU5QVVQobW9kZSkpCisKKy8qIFR5cGVzIG9mIGNoYW5uZWwgY2xhc3MgbGlicmFyaWVzOiAqLworI2RlZmluZSBDSE5MX1RZUEVTTSAgICAgICAgIDEJLyogU2hhcmVkIG1lbW9yeSBkcml2ZXIuICovCisjZGVmaW5lIENITkxfVFlQRUJNICAgICAgICAgMgkvKiBCdXMgTWFzdGVyaW5nIGRyaXZlci4gKi8KKworLyogTWF4IHN0cmluZyBsZW5ndGggb2YgY2hhbm5lbCBJL08gY29tcGxldGlvbiBldmVudCBuYW1lIC0gY2hhbmdlIGlmIG5lZWRlZCAqLworI2RlZmluZSBDSE5MX01BWEVWVE5BTUVMRU4gIDMyCisKKy8qIE1heCBtZW1vcnkgcGFnZXMgbG9ja2FibGUgaW4gQ0hOTF9QcmVwYXJlQnVmZmVyKCkgLSBjaGFuZ2UgaWYgbmVlZGVkICovCisjZGVmaW5lIENITkxfTUFYTE9DS1BBR0VTICAgNjQKKworLyogQ2hhbm5lbCBpbmZvLiAqLworc3RydWN0IGNobmxfaW5mbyB7CisJc3RydWN0IGNobmxfbWdyICpoY2hubF9tZ3I7CS8qIE93bmluZyBjaGFubmVsIG1hbmFnZXIuICovCisJdTMyIGNuaGxfaWQ7CQkvKiBDaGFubmVsIElELiAqLworCXZvaWQgKmV2ZW50X29iajsJLyogQ2hhbm5lbCBJL08gY29tcGxldGlvbiBldmVudC4gKi8KKwkvKkFic3RyYWN0aW9uIG9mIEkvTyBjb21wbGV0aW9uIGV2ZW50LiAqLworCXN0cnVjdCBzeW5jX29iamVjdCAqc3luY19ldmVudDsKKwlzOCBkd19tb2RlOwkJLyogQ2hhbm5lbCBtb2RlLiAqLworCXU4IGR3X3N0YXRlOwkJLyogQ3VycmVudCBjaGFubmVsIHN0YXRlLiAqLworCXUzMiBieXRlc190eDsJCS8qIFRvdGFsIGJ5dGVzIHRyYW5zZmVycmVkLiAqLworCXUzMiBjaW9fY3M7CQkvKiBOdW1iZXIgb2YgSU9DcyBpbiBxdWV1ZS4gKi8KKwl1MzIgY2lvX3JlcXM7CQkvKiBOdW1iZXIgb2YgSU8gUmVxdWVzdHMgaW4gcXVldWUuICovCisJdTMyIHByb2Nlc3M7CQkvKiBQcm9jZXNzIG93bmluZyB0aGlzIGNoYW5uZWwuICovCit9OworCisvKiBDaGFubmVsIG1hbmFnZXIgaW5mbzogKi8KK3N0cnVjdCBjaG5sX21ncmluZm8geworCXU4IGR3X3R5cGU7CQkvKiBUeXBlIG9mIGNoYW5uZWwgY2xhc3MgbGlicmFyeS4gKi8KKwkvKiBDaGFubmVsIGhhbmRsZSwgZ2l2ZW4gdGhlIGNoYW5uZWwgaWQuICovCisJc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iajsKKwl1OCBvcGVuX2NoYW5uZWxzOwkvKiBOdW1iZXIgb2Ygb3BlbiBjaGFubmVscy4gKi8KKwl1OCBtYXhfY2hhbm5lbHM7CS8qIHRvdGFsICMgb2YgY2hubHMgc3VwcG9ydGVkICovCit9OworCisvKiBDaGFubmVsIE1hbmFnZXIgQXR0cnM6ICovCitzdHJ1Y3QgY2hubF9tZ3JhdHRycyB7CisJLyogTWF4IG51bWJlciBvZiBjaGFubmVscyB0aGlzIG1hbmFnZXIgY2FuIHVzZS4gKi8KKwl1OCBtYXhfY2hhbm5lbHM7CisJdTMyIHdvcmRfc2l6ZTsJCS8qIERTUCBXb3JkIHNpemUuICovCit9OworCisjZW5kaWYgLyogQ0hOTFBSSVZfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY2xrLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY2xrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIzOTUwMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jbGsuaApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIGNsay5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIFByb3ZpZGVzIENsb2NrIGZ1bmN0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIF9DTEtfSAorI2RlZmluZSBfQ0xLX0gKKworZW51bSBkc3BfY2xrX2lkIHsKKwlEU1BfQ0xLX0lWQTIgPSAwLAorCURTUF9DTEtfR1BUNSwKKwlEU1BfQ0xLX0dQVDYsCisJRFNQX0NMS19HUFQ3LAorCURTUF9DTEtfR1BUOCwKKwlEU1BfQ0xLX1dEVDMsCisJRFNQX0NMS19NQ0JTUDEsCisJRFNQX0NMS19NQ0JTUDIsCisJRFNQX0NMS19NQ0JTUDMsCisJRFNQX0NMS19NQ0JTUDQsCisJRFNQX0NMS19NQ0JTUDUsCisJRFNQX0NMS19TU0ksCisJRFNQX0NMS19OT1RfREVGSU5FRAorfTsKKworLyoKKyAqICA9PT09PT09PSBkc3BfY2xrX2V4aXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEaXNjb250aW51ZSB1c2FnZSBvZiBtb2R1bGU7IGZyZWUgcmVzb3VyY2VzIHdoZW4gcmVmZXJlbmNlIGNvdW50CisgKiAgICAgIHJlYWNoZXMgMC4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIENMSyBpbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogICAgICBSZXNvdXJjZXMgdXNlZCBieSBtb2R1bGUgYXJlIGZyZWVkIHdoZW4gY1JlZiByZWFjaGVzIHplcm8uCisgKi8KK2V4dGVybiB2b2lkIGRzcF9jbGtfZXhpdCh2b2lkKTsKKworLyoKKyAqICA9PT09PT09PSBkc3BfY2xrX2luaXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplcyBwcml2YXRlIHN0YXRlIG9mIENMSyBtb2R1bGUuCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogICAgICBUUlVFIGlmIGluaXRpYWxpemVkOyBGQUxTRSBpZiBlcnJvciBvY2N1cmVkLgorICogIFJlcXVpcmVzOgorICogIEVuc3VyZXM6CisgKiAgICAgIENMSyBpbml0aWFsaXplZC4KKyAqLworZXh0ZXJuIHZvaWQgZHNwX2Nsa19pbml0KHZvaWQpOworCit2b2lkIGRzcF9ncHRfd2FpdF9vdmVyZmxvdyhzaG9ydCBpbnQgY2xrX2lkLCB1bnNpZ25lZCBpbnQgbG9hZCk7CisKKy8qCisgKiAgPT09PT09PT0gZHNwX2Nsa19lbmFibGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBFbmFibGVzIHRoZSBjbG9jayByZXF1ZXN0ZWQuCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogICAgICAwOglTdWNjZXNzLgorICoJLUVQRVJNOglFcnJvciBvY2N1cmVkIHdoaWxlIGVuYWJsaW5nIHRoZSBjbG9jay4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IGRzcF9jbGtfZW5hYmxlKGVudW0gZHNwX2Nsa19pZCBjbGtfaWQpOworCit1MzIgZHNwX2Nsb2NrX2VuYWJsZV9hbGwodTMyIGRzcF9wZXJfY2xvY2tzKTsKKworLyoKKyAqICA9PT09PT09PSBkc3BfY2xrX2Rpc2FibGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEaXNhYmxlcyB0aGUgY2xvY2sgcmVxdWVzdGVkLgorICogIFBhcmFtZXRlcnM6CisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FUEVSTTogICAgICBFcnJvciBvY2N1cmVkIHdoaWxlIGRpc2FibGluZyB0aGUgY2xvY2suCisgKiAgUmVxdWlyZXM6CisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBkc3BfY2xrX2Rpc2FibGUoZW51bSBkc3BfY2xrX2lkIGNsa19pZCk7CisKK2V4dGVybiB1MzIgZHNwX2Nsa19nZXRfaXZhMl9yYXRlKHZvaWQpOworCit1MzIgZHNwX2Nsb2NrX2Rpc2FibGVfYWxsKHUzMiBkc3BfcGVyX2Nsb2Nrcyk7CisKK2V4dGVybiB2b2lkIHNzaV9jbGtfcHJlcGFyZShib29sIEZMQUcpOworCisjZW5kaWYgLyogX1NZTkNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2NtbS5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2NtbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MjFmMWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY21tLmgKQEAgLTAsMCArMSwzODYgQEAKKy8qCisgKiBjbW0uaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBUaGUgQ29tbXVuaWNhdGlvbiBNZW1vcnkgTWFuYWdlbWVudChDTU0pIG1vZHVsZSBwcm92aWRlcyBzaGFyZWQgbWVtb3J5CisgKiBtYW5hZ2VtZW50IHNlcnZpY2VzIGZvciBEU1AvQklPUyBCcmlkZ2UgZGF0YSBzdHJlYW1pbmcgYW5kIG1lc3NhZ2luZy4KKyAqIE11bHRpcGxlIHNoYXJlZCBtZW1vcnkgc2VnbWVudHMgY2FuIGJlIHJlZ2lzdGVyZWQgd2l0aCBDTU0uIE1lbW9yeSBpcworICogY29lbGVzY2VkIGJhY2sgdG8gdGhlIGFwcHJvcHJpYXRlIHBvb2wgd2hlbiBhIGJ1ZmZlciBpcyBmcmVlZC4KKyAqCisgKiBUaGUgQ01NX1hsYXRvclt4eHhdIGZ1bmN0aW9ucyBhcmUgdXNlZCBmb3Igbm9kZSBtZXNzYWdpbmcgYW5kIGRhdGEKKyAqIHN0cmVhbWluZyBhZGRyZXNzIHRyYW5zbGF0aW9uIHRvIHBlcmZvcm0gemVyby1jb3B5IGludGVyLXByb2Nlc3NvcgorICogZGF0YSB0cmFuc2ZlcihHUFA8LT5EU1ApLiBBICJ0cmFuc2xhdG9yIiBvYmplY3QgaXMgY3JlYXRlZCBmb3IgYSBub2RlIG9yCisgKiBzdHJlYW0gb2JqZWN0IHRoYXQgY29udGFpbnMgcGVyIHRocmVhZCB2aXJ0dWFsIGFkZHJlc3MgaW5mb3JtYXRpb24uIFRoaXMKKyAqIHRyYW5zbGF0b3IgaW5mbyBpcyB1c2VkIGF0IHJ1bnRpbWUgdG8gcGVyZm9ybSBTTSBhZGRyZXNzIHRyYW5zbGF0aW9uCisgKiB0by9mcm9tIHRoZSBEU1AgYWRkcmVzcyBzcGFjZS4KKyAqCisgKiBOb3RlczoKKyAqICAgY21tX3hsYXRvcl9hbGxvY19idWYgLSBVc2VkIGJ5IE5vZGUgYW5kIFN0cmVhbSBtb2R1bGVzIGZvciBTTSBhZGRyZXNzCisgKgkJCSAgdHJhbnNsYXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgQ01NXworI2RlZmluZSBDTU1fCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2ZGVmcy5oPgorCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NtbWRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgorCisvKgorICogID09PT09PT09IGNtbV9jYWxsb2NfYnVmID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQWxsb2NhdGUgbWVtb3J5IGJ1ZmZlcnMgdGhhdCBjYW4gYmUgdXNlZCBmb3IgZGF0YSBzdHJlYW1pbmcgb3IKKyAqICAgICAgbWVzc2FnaW5nLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhjbW1fbWdyOiAgIENtbSBNZ3IgaGFuZGxlLgorICogICAgICB1c2l6ZTogICAgIE51bWJlciBvZiBieXRlcyB0byBhbGxvY2F0ZS4KKyAqICAgICAgcGF0dHI6ICAgICBBdHRyaWJ1dGVzIG9mIG1lbW9yeSB0byBhbGxvY2F0ZS4KKyAqICAgICAgcHBfYnVmX3ZhOiAgIEFkZHJlc3Mgb2Ygd2hlcmUgdG8gcGxhY2UgVkEuCisgKiAgUmV0dXJuczoKKyAqICAgICAgUG9pbnRlciB0byBhIHplcm8nZCBibG9jayBvZiBTTSBtZW1vcnk7CisgKiAgICAgIE5VTEwgaWYgbWVtb3J5IGNvdWxkbid0IGJlIGFsbG9jYXRlZCwKKyAqICAgICAgb3IgaWYgYnl0ZV9zaXplID09IDAsCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIFZhbGlkIGhjbW1fbWdyLgorICogICAgICBDTU0gaW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgVGhlIHJldHVybmVkIHBvaW50ZXIsIGlmIG5vdCBOVUxMLCBwb2ludHMgdG8gYSB2YWxpZCBtZW1vcnkgYmxvY2sgb2YKKyAqICAgICAgdGhlIHNpemUgcmVxdWVzdGVkLgorICoKKyAqLworZXh0ZXJuIHZvaWQgKmNtbV9jYWxsb2NfYnVmKHN0cnVjdCBjbW1fb2JqZWN0ICpoY21tX21nciwKKwkJCSAgICB1MzIgdXNpemUsIHN0cnVjdCBjbW1fYXR0cnMgKnBhdHRycywKKwkJCSAgICB2b2lkICoqcHBfYnVmX3ZhKTsKKworLyoKKyAqICA9PT09PT09PSBjbW1fY3JlYXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ3JlYXRlIGEgY29tbXVuaWNhdGlvbiBtZW1vcnkgbWFuYWdlciBvYmplY3QuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgcGhfY21tX21ncjoJTG9jYXRpb24gdG8gc3RvcmUgYSBjb21tdW5pY2F0aW9uIG1hbmFnZXIgaGFuZGxlIG9uCisgKiAgICAgIAkJb3V0cHV0LgorICogICAgICBoZGV2X29iajogSGFuZGxlIHRvIGEgZGV2aWNlIG9iamVjdC4KKyAqICAgICAgbWdyX2F0dHJ0czogQ29tbSBtZW0gbWFuYWdlciBhdHRyaWJ1dGVzLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzOworICogICAgICAtRU5PTUVNOiAgICBJbnN1ZmZpY2llbnQgbWVtb3J5IGZvciByZXF1ZXN0ZWQgcmVzb3VyY2VzLgorICogICAgICAtRVBFUk06ICAgICAgRmFpbGVkIHRvIGluaXRpYWxpemUgY3JpdGljYWwgc2VjdCBzeW5jIG9iamVjdC4KKyAqCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGNtbV9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgcGhfY21tX21nciAhPSBOVUxMLgorICogICAgICBtZ3JfYXR0cnRzLT51bF9taW5fYmxvY2tfc2l6ZSA+PSA0IGJ5dGVzLgorICogIEVuc3VyZXM6CisgKgorICovCitleHRlcm4gaW50IGNtbV9jcmVhdGUoc3RydWN0IGNtbV9vYmplY3QgKipwaF9jbW1fbWdyLAorCQkJICAgICBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkgICAgIGNvbnN0IHN0cnVjdCBjbW1fbWdyYXR0cnMgKm1ncl9hdHRydHMpOworCisvKgorICogID09PT09PT09IGNtbV9kZXN0cm95ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGVzdHJveSB0aGUgY29tbXVuaWNhdGlvbiBtZW1vcnkgbWFuYWdlciBvYmplY3QuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGNtbV9tZ3I6ICAgQ21tIE1nciBoYW5kbGUuCisgKiAgICAgIGZvcmNlOiAgICAgRm9yY2UgZGVhbGxvY2F0aW9uIG9mIGFsbCBjbW0gbWVtb3J5IGltbWVkaWF0ZWx5IGlmIHNldCBUUlVFLgorICogICAgICAgICAgICAgICAgIElmIEZBTFNFLCBhbmQgb3V0c3RhbmRpbmcgYWxsb2NhdGlvbnMgd2lsbCByZXR1cm4gLUVQRVJNCisgKiAgICAgICAgICAgICAgICAgc3RhdHVzLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBDTU0gb2JqZWN0ICYgcmVzb3VyY2VzIGRlbGV0ZWQuCisgKiAgICAgIC1FUEVSTTogICAgICBVbmFibGUgdG8gZnJlZSBDTU0gb2JqZWN0IGR1ZSB0byBvdXRzdGFuZGluZyBhbGxvY2F0aW9uLgorICogICAgICAtRUZBVUxUOiAgICBVbmFibGUgdG8gZnJlZSBDTU0gZHVlIHRvIGJhZCBoYW5kbGUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIENNTSBpcyBpbml0aWFsaXplZC4KKyAqICAgICAgaGNtbV9tZ3IgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICogICAgICBNZW1vcnkgcmVzb3VyY2VzIHVzZWQgYnkgQ21tIE1nciBhcmUgZnJlZWQuCisgKi8KK2V4dGVybiBpbnQgY21tX2Rlc3Ryb3koc3RydWN0IGNtbV9vYmplY3QgKmhjbW1fbWdyLCBib29sIGZvcmNlKTsKKworLyoKKyAqICA9PT09PT09PSBjbW1fZXhpdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgRGlzY29udGludWUgdXNhZ2Ugb2YgbW9kdWxlLiBDbGVhbnVwIENNTSBtb2R1bGUgaWYgQ01NIGNSZWYgcmVhY2hlcyB6ZXJvLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgbi9hCisgKiAgUmV0dXJuczoKKyAqICAgICBuL2EKKyAqICBSZXF1aXJlczoKKyAqICAgICBDTU0gaXMgaW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIHZvaWQgY21tX2V4aXQodm9pZCk7CisKKy8qCisgKiAgPT09PT09PT0gY21tX2ZyZWVfYnVmID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRnJlZSB0aGUgZ2l2ZW4gYnVmZmVyLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhjbW1fbWdyOiAgICBDbW0gTWdyIGhhbmRsZS4KKyAqICAgICAgcGJ1ZjogICAgICAgUG9pbnRlciB0byBtZW1vcnkgYWxsb2NhdGVkIGJ5IGNtbV9jYWxsb2NfYnVmKCkuCisgKiAgICAgIHVsX3NlZ19pZDogICAgU00gc2VnbWVudCBJZCB1c2VkIGluIENNTV9DYWxsb2MoKSBhdHRycy4KKyAqICAgICAgICAgICAgICAgICAgU2V0IHRvIDAgdG8gdXNlIGRlZmF1bHQgc2VnbWVudC4KKyAqICBSZXR1cm5zOgorICogICAgICAwCisgKiAgICAgIC1FUEVSTQorICogIFJlcXVpcmVzOgorICogICAgICBDTU0gaW5pdGlhbGl6ZWQuCisgKiAgICAgIGJ1Zl9wYSAhPSBOVUxMCisgKiAgRW5zdXJlczoKKyAqCisgKi8KK2V4dGVybiBpbnQgY21tX2ZyZWVfYnVmKHN0cnVjdCBjbW1fb2JqZWN0ICpoY21tX21nciwKKwkJCSAgICAgICB2b2lkICpidWZfcGEsIHUzMiB1bF9zZWdfaWQpOworCisvKgorICogID09PT09PT09IGNtbV9nZXRfaGFuZGxlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0dXJuIHRoZSBoYW5kbGUgdG8gdGhlIGNtbSBtZ3IgZm9yIHRoZSBnaXZlbiBkZXZpY2Ugb2JqLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhwcm9jZXNzb3I6ICAgSGFuZGxlIHRvIGEgUHJvY2Vzc29yLgorICogICAgICBwaF9jbW1fbWdyOglMb2NhdGlvbiB0byBzdG9yZSB0aGUgc2hhcmVkIG1lbW9yeSBtZ3IgaGFuZGxlIG9uCisgKiAgICAgIAkJb3V0cHV0LgorICoKKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgQ21tIE1nciBvcGFxdWUgaGFuZGxlIHJldHVybmVkLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGhhbmRsZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgcGhfY21tX21nciAhPSBOVUxMCisgKiAgICAgIGhkZXZfb2JqICE9IE5VTEwKKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IGNtbV9nZXRfaGFuZGxlKHZvaWQgKmhwcm9jZXNzb3IsCisJCQkJIHN0cnVjdCBjbW1fb2JqZWN0ICoqcGhfY21tX21ncik7CisKKy8qCisgKiAgPT09PT09PT0gY21tX2dldF9pbmZvID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0dXJuIHRoZSBjdXJyZW50IFNNIGFuZCBWTSB1dGlsaXphdGlvbiBpbmZvcm1hdGlvbi4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoY21tX21ncjogICAgIEhhbmRsZSB0byBhIENtbSBNZ3IuCisgKiAgICAgIGNtbV9pbmZvX29iajogICAgTG9jYXRpb24gdG8gc3RvcmUgdGhlIENtbSBpbmZvcm1hdGlvbiBvbiBvdXRwdXQuCisgKgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGhhbmRsZS4KKyAqICAgICAgLUVJTlZBTCBJbnZhbGlkIGlucHV0IGFyZ3VtZW50LgorICogIFJlcXVpcmVzOgorICogIEVuc3VyZXM6CisgKgorICovCitleHRlcm4gaW50IGNtbV9nZXRfaW5mbyhzdHJ1Y3QgY21tX29iamVjdCAqaGNtbV9tZ3IsCisJCQkgICAgICAgc3RydWN0IGNtbV9pbmZvICpjbW1faW5mb19vYmopOworCisvKgorICogID09PT09PT09IGNtbV9pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZXMgcHJpdmF0ZSBzdGF0ZSBvZiBDTU0gbW9kdWxlLgorICogIFBhcmFtZXRlcnM6CisgKiAgUmV0dXJuczoKKyAqICAgICAgVFJVRSBpZiBpbml0aWFsaXplZDsgRkFMU0UgaWYgZXJyb3Igb2NjdXJlZC4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICogICAgICBDTU0gaW5pdGlhbGl6ZWQuCisgKi8KK2V4dGVybiBib29sIGNtbV9pbml0KHZvaWQpOworCisvKgorICogID09PT09PT09IGNtbV9yZWdpc3Rlcl9ncHBzbV9zZWcgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZWdpc3RlciBhIGJsb2NrIG9mIFNNIHdpdGggdGhlIENNTS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoY21tX21ncjogICAgICAgICBIYW5kbGUgdG8gYSBDbW0gTWdyLgorICogICAgICBscEdQUEJhc2VQQTogICAgIEdQUCBCYXNlIFBoeXNpY2FsIGFkZHJlc3MuCisgKiAgICAgIHVsX3NpemU6ICAgICAgICAgIFNpemUgaW4gR1BQIGJ5dGVzLgorICogICAgICBkc3BfYWRkcl9vZmZzZXQgIEdQUCBQQSB0byBEU1AgUEEgT2Zmc2V0LgorICogICAgICBjX2ZhY3RvcjogICAgICAgICBBZGQgb2Zmc2V0IGlmIENNTV9BRERUT0RTUFBBLCBzdWIgaWYgQ01NX1NVQkZST01EU1BQQS4KKyAqICAgICAgZHdfZHNwX2Jhc2U6ICAgICAgIERTUCB2aXJ0dWFsIGJhc2UgYnl0ZSBhZGRyZXNzLgorICogICAgICB1bF9kc3Bfc2l6ZTogICAgICAgU2l6ZSBvZiBEU1Agc2VnbWVudCBpbiBieXRlcy4KKyAqICAgICAgc2dtdF9pZDogICAgICAgICBBZGRyZXNzIHRvIHN0b3JlIHNlZ21lbnQgSWQuCisgKgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogICAgIEludmFsaWQgaGNtbV9tZ3IgaGFuZGxlLgorICogICAgICAtRUlOVkFMOiBJbnZhbGlkIGlucHV0IGFyZ3VtZW50LgorICogICAgICAtRVBFUk06ICAgICAgIFVuYWJsZSB0byByZWdpc3Rlci4KKyAqICAgICAgLSBPbiBzdWNjZXNzICpzZ210X2lkIGlzIGEgdmFsaWQgU00gc2VnbWVudCBJRC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgdWxfc2l6ZSA+IDAKKyAqICAgICAgc2dtdF9pZCAhPSBOVUxMCisgKiAgICAgIGR3X2dwcF9iYXNlX3BhICE9IDAKKyAqICAgICAgY19mYWN0b3IgPSBDTU1fQUREVE9EU1BQQSB8fCBjX2ZhY3RvciA9IENNTV9TVUJGUk9NRFNQUEEKKyAqICBFbnN1cmVzOgorICoKKyAqLworZXh0ZXJuIGludCBjbW1fcmVnaXN0ZXJfZ3Bwc21fc2VnKHN0cnVjdCBjbW1fb2JqZWN0ICpoY21tX21nciwKKwkJCQkJIHVuc2lnbmVkIGludCBkd19ncHBfYmFzZV9wYSwKKwkJCQkJIHUzMiB1bF9zaXplLAorCQkJCQkgdTMyIGRzcF9hZGRyX29mZnNldCwKKwkJCQkJIHM4IGNfZmFjdG9yLAorCQkJCQkgdW5zaWduZWQgaW50IGR3X2RzcF9iYXNlLAorCQkJCQkgdTMyIHVsX2RzcF9zaXplLAorCQkJCQkgdTMyICpzZ210X2lkLCB1MzIgZ3BwX2Jhc2VfdmEpOworCisvKgorICogID09PT09PT09IGNtbV91bl9yZWdpc3Rlcl9ncHBzbV9zZWcgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBVbnJlZ2lzdGVyIHRoZSBnaXZlbiBtZW1vcnkgc2VnbWVudCB0aGF0IHdhcyBwcmV2aW91c2x5IHJlZ2lzdGVyZWQKKyAqICAgICAgYnkgY21tX3JlZ2lzdGVyX2dwcHNtX3NlZy4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoY21tX21ncjogICAgSGFuZGxlIHRvIGEgQ21tIE1nci4KKyAqICAgICAgdWxfc2VnX2lkICAgICBTZWdtZW50IGlkZW50aWZpZXIgcmV0dXJuZWQgYnkgY21tX3JlZ2lzdGVyX2dwcHNtX3NlZy4KKyAqICBSZXR1cm5zOgorICogICAgICAgMDogICAgICAgICBTdWNjZXNzLgorICogICAgICAgLUVGQVVMVDogICAgIEludmFsaWQgaGFuZGxlLgorICogICAgICAgLUVJTlZBTDogSW52YWxpZCB1bF9zZWdfaWQuCisgKiAgICAgICAtRVBFUk06ICAgICAgIFVuYWJsZSB0byB1bnJlZ2lzdGVyIGZvciB1bmtub3duIHJlYXNvbi4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICoKKyAqLworZXh0ZXJuIGludCBjbW1fdW5fcmVnaXN0ZXJfZ3Bwc21fc2VnKHN0cnVjdCBjbW1fb2JqZWN0ICpoY21tX21nciwKKwkJCQkJICAgIHUzMiB1bF9zZWdfaWQpOworCisvKgorICogID09PT09PT09IGNtbV94bGF0b3JfYWxsb2NfYnVmID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQWxsb2NhdGUgdGhlIHNwZWNpZmllZCBTTSBidWZmZXIgYW5kIGNyZWF0ZSBhIGxvY2FsIG1lbW9yeSBkZXNjcmlwdG9yLgorICogICAgICBQbGFjZSBvbiB0aGUgZGVzY3JpcHRvciBvbiB0aGUgdHJhbnNsYXRvcidzIEhhUSAoSG9zdCBBbGxvYydkIFF1ZXVlKS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICB4bGF0b3I6ICAgIEhhbmRsZSB0byBhIFhsYXRvciBvYmplY3QuCisgKiAgICAgIHZhX2J1ZjogICAgIFZpcnR1YWwgYWRkcmVzcyBwdHIoY2xpZW50IGNvbnRleHQpCisgKiAgICAgIHBhX3NpemU6ICAgIFNpemUgb2YgU00gbWVtb3J5IHRvIGFsbG9jYXRlLgorICogIFJldHVybnM6CisgKiAgICAgIFB0ciB0byB2YWxpZCBwaHlzaWNhbCBhZGRyZXNzKFBhKSBvZiBwYV9zaXplIGJ5dGVzLCBOVUxMIGlmIGZhaWxlZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgdmFfYnVmICE9IDAuCisgKiAgICAgIHBhX3NpemUgIT0gMC4KKyAqICBFbnN1cmVzOgorICoKKyAqLworZXh0ZXJuIHZvaWQgKmNtbV94bGF0b3JfYWxsb2NfYnVmKHN0cnVjdCBjbW1feGxhdG9yb2JqZWN0ICp4bGF0b3IsCisJCQkJICB2b2lkICp2YV9idWYsIHUzMiBwYV9zaXplKTsKKworLyoKKyAqICA9PT09PT09PSBjbW1feGxhdG9yX2NyZWF0ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgQ3JlYXRlIGEgdHJhbnNsYXRvcih4bGF0b3IpIG9iamVjdCB1c2VkIGZvciBwcm9jZXNzIHNwZWNpZmljIFZhPC0+UGEKKyAqICAgICBhZGRyZXNzIHRyYW5zbGF0aW9uLiBOb2RlIG1lc3NhZ2luZyBhbmQgc3RyZWFtcyB1c2UgdGhpcyB0byBwZXJmb3JtCisgKiAgICAgaW50ZXItcHJvY2Vzc29yKEdQUDwtPkRTUCkgemVyby1jb3B5IGRhdGEgdHJhbnNmZXIuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICB4bGF0b3I6ICAgICAgICAgQWRkcmVzcyB0byBwbGFjZSBoYW5kbGUgdG8gYSBuZXcgWGxhdG9yIGhhbmRsZS4KKyAqICAgICBoY21tX21ncjogICAgICAgIEhhbmRsZSB0byBDbW0gTWdyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRyYW5zbGF0b3IuCisgKiAgICAgeGxhdG9yX2F0dHJzOiAgIFRyYW5zbGF0b3IgYXR0cmlidXRlcyB1c2VkIGZvciB0aGUgY2xpZW50IE5PREUgb3IgU1RSRUFNLgorICogIFJldHVybnM6CisgKiAgICAgMDogICAgICAgICAgICBTdWNjZXNzLgorICogICAgIC1FSU5WQUw6ICAgIEJhZCBpbnB1dCBBdHRycy4KKyAqICAgICAtRU5PTUVNOiAgIEluc3VmZmljaWVudCBtZW1vcnkobG9jYWwpIGZvciByZXF1ZXN0ZWQgcmVzb3VyY2VzLgorICogIFJlcXVpcmVzOgorICogICAgIHhsYXRvciAhPSBOVUxMCisgKiAgICAgaGNtbV9tZ3IgIT0gTlVMTAorICogICAgIHhsYXRvcl9hdHRycyAhPSBOVUxMCisgKiAgRW5zdXJlczoKKyAqCisgKi8KK2V4dGVybiBpbnQgY21tX3hsYXRvcl9jcmVhdGUoc3RydWN0IGNtbV94bGF0b3JvYmplY3QgKip4bGF0b3IsCisJCQkJICAgIHN0cnVjdCBjbW1fb2JqZWN0ICpoY21tX21nciwKKwkJCQkgICAgc3RydWN0IGNtbV94bGF0b3JhdHRycyAqeGxhdG9yX2F0dHJzKTsKKworLyoKKyAqICA9PT09PT09PSBjbW1feGxhdG9yX2RlbGV0ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERlbGV0ZSB0cmFuc2xhdG9yIHJlc291cmNlcworICogIFBhcmFtZXRlcnM6CisgKiAgICAgIHhsYXRvcjogICAgaGFuZGxlIHRvIHRyYW5zbGF0b3IuCisgKiAgICAgIGZvcmNlOiAgICAgZm9yY2UgPSBUUlVFIHdpbGwgZnJlZSBYTGF0b3JzIFNNIGJ1ZmZlcnMvZHNjcmlwdHJzLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBCYWQgdHJhbnNsYXRvciBoYW5kbGUuCisgKiAgICAgIC1FUEVSTTogICAgICBVbmFibGUgdG8gZnJlZSB0cmFuc2xhdG9yIHJlc291cmNlcy4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgcmVmcyA+IDAKKyAqICBFbnN1cmVzOgorICoKKyAqLworZXh0ZXJuIGludCBjbW1feGxhdG9yX2RlbGV0ZShzdHJ1Y3QgY21tX3hsYXRvcm9iamVjdCAqeGxhdG9yLAorCQkJCSAgICBib29sIGZvcmNlKTsKKworLyoKKyAqICA9PT09PT09PSBjbW1feGxhdG9yX2ZyZWVfYnVmID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRnJlZSBTTSBidWZmZXIgYW5kIGRlc2NyaXB0b3IuCisgKiAgICAgIERvZXMgbm90IGZyZWUgY2xpZW50IHByb2Nlc3MgVk0uCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgeGxhdG9yOiAgICBoYW5kbGUgdG8gdHJhbnNsYXRvci4KKyAqICAgICAgYnVmX3ZhICAgICAgVmlydHVhbCBhZGRyZXNzIG9mIFBBIHRvIGZyZWUuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6ICAgIEJhZCB0cmFuc2xhdG9yIGhhbmRsZS4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICoKKyAqLworZXh0ZXJuIGludCBjbW1feGxhdG9yX2ZyZWVfYnVmKHN0cnVjdCBjbW1feGxhdG9yb2JqZWN0ICp4bGF0b3IsCisJCQkJICAgICAgdm9pZCAqYnVmX3ZhKTsKKworLyoKKyAqICA9PT09PT09PSBjbW1feGxhdG9yX2luZm8gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTZXQvR2V0IHByb2Nlc3Mgc3BlY2lmaWMgInRyYW5zbGF0b3IiIGFkZHJlc3MgaW5mby4KKyAqICAgICAgVGhpcyBpcyB1c2VkIHRvIHBlcmZvcm0gZmFzdCB2aXJ0YXVsIGFkZHJlc3MgdHJhbnNsYXRpb24KKyAqICAgICAgZm9yIHNoYXJlZCBtZW1vcnkgYnVmZmVycyBiZXR3ZWVuIHRoZSBHUFAgYW5kIERTUC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgIHhsYXRvcjogICAgIGhhbmRsZSB0byB0cmFuc2xhdG9yLgorICogICAgIHBhZGRyOiAgICAgICBWaXJ0dWFsIGJhc2UgYWRkcmVzcyBvZiBzZWdtZW50LgorICogICAgIHVsX3NpemU6ICAgICAgU2l6ZSBpbiBieXRlcy4KKyAqICAgICBzZWdtX2lkOiAgICAgU2VnbWVudCBpZGVudGlmaWVyIG9mIFNNIHNlZ21lbnQocykKKyAqICAgICBzZXRfaW5mbyAgICAgU2V0IHhsYXRvciBmaWVsZHMgaWYgVFJVRSwgZWxzZSByZXR1cm4gYmFzZSBhZGRyCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6ICAgIEJhZCB0cmFuc2xhdG9yIGhhbmRsZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgKHJlZnMgPiAwKQorICogICAgICAocGFkZHIgIT0gTlVMTCkKKyAqICAgICAgKHVsX3NpemUgPiAwKQorICogIEVuc3VyZXM6CisgKgorICovCitleHRlcm4gaW50IGNtbV94bGF0b3JfaW5mbyhzdHJ1Y3QgY21tX3hsYXRvcm9iamVjdCAqeGxhdG9yLAorCQkJCSAgdTggKipwYWRkciwKKwkJCQkgIHUzMiB1bF9zaXplLCB1MzIgc2VnbV9pZCwgYm9vbCBzZXRfaW5mbyk7CisKKy8qCisgKiAgPT09PT09PT0gY21tX3hsYXRvcl90cmFuc2xhdGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBQZXJmb3JtIGFkZHJlc3MgdHJhbnNsYXRpb24gVkE8LT5QQSBmb3IgdGhlIHNwZWNpZmllZCBzdHJlYW0gb3IKKyAqICAgICAgbWVzc2FnZSBzaGFyZWQgbWVtb3J5IGJ1ZmZlci4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgIHhsYXRvcjogaGFuZGxlIHRvIHRyYW5zbGF0b3IuCisgKiAgICAgcGFkZHIgICAgYWRkcmVzcyBvZiBidWZmZXIgdG8gdHJhbnNsYXRlLgorICogICAgIHh0eXBlICAgIFR5cGUgb2YgYWRkcmVzcyB4bGF0aW9uLiBDTU1fUEEyVkEgb3IgQ01NX1ZBMlBBLgorICogIFJldHVybnM6CisgKiAgICAgVmFsaWQgYWRkcmVzcyBvbiBzdWNjZXNzLCBlbHNlIE5VTEwuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIHJlZnMgPiAwCisgKiAgICAgIHBhZGRyICE9IE5VTEwKKyAqICAgICAgeHR5cGUgPj0gQ01NX1ZBMlBBKSAmJiAoeHR5cGUgPD0gQ01NX0RTUFBBMlBBKQorICogIEVuc3VyZXM6CisgKgorICovCitleHRlcm4gdm9pZCAqY21tX3hsYXRvcl90cmFuc2xhdGUoc3RydWN0IGNtbV94bGF0b3JvYmplY3QgKnhsYXRvciwKKwkJCQkgIHZvaWQgKnBhZGRyLCBlbnVtIGNtbV94bGF0ZXR5cGUgeHR5cGUpOworCisjZW5kaWYgLyogQ01NXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2NtbWRlZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jbW1kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJmZjM3MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jbW1kZWZzLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBjbW1kZWZzLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogR2xvYmFsIE1FTSBjb25zdGFudHMgYW5kIHR5cGVzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIENNTURFRlNfCisjZGVmaW5lIENNTURFRlNfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvbGlzdC5oPgorCisvKiBDbW0gYXR0cmlidXRlcyB1c2VkIGluIGNtbV9jcmVhdGUoKSAqLworc3RydWN0IGNtbV9tZ3JhdHRycyB7CisJLyogTWluaW11bSBTTSBhbGxvY2F0aW9uOyBkZWZhdWx0IDMyIGJ5dGVzLiAqLworCXUzMiB1bF9taW5fYmxvY2tfc2l6ZTsKK307CisKKy8qIEF0dHJpYnV0ZXMgZm9yIENNTV9BbGxvY0J1ZigpICYgQ01NX0FsbG9jRGVzYygpICovCitzdHJ1Y3QgY21tX2F0dHJzIHsKKwl1MzIgdWxfc2VnX2lkOwkJLyogIDEsMi4uLiBhcmUgU00gc2VnbWVudHMuIDAgaXMgbm90LiAqLworCXUzMiB1bF9hbGlnbm1lbnQ7CS8qICAwLDEsMiw0Li4uLnVsX21pbl9ibG9ja19zaXplICovCit9OworCisvKgorICogIERTUFBhIHRvIEdQUFBhIENvbnZlcnNpb24gRmFjdG9yLgorICoKKyAqICBGb3IgdHlwaWNhbCBwbGF0Zm9ybXM6CisgKiAgICAgIGNvbnZlcnRlZCBBZGRyZXNzID0gUGFEU1AgKyAoIGNfZmFjdG9yICogYWRkcmVzc1RvQ29udmVydCkuCisgKi8KKyNkZWZpbmUgQ01NX1NVQkZST01EU1BQQQktMQorI2RlZmluZSBDTU1fQUREVE9EU1BQQQkJMQorCisjZGVmaW5lIENNTV9BTExTRUdNRU5UUyAgICAgICAgIDB4RkZGRkZGCS8qIEFsbCBTZWdJZHMgKi8KKyNkZWZpbmUgQ01NX01BWEdQUFNFR1MgICAgICAgICAgMQkvKiBNYXhpbXVtICMgb2YgU00gc2VncyAqLworCisvKgorICogIFNNU0VHcyBhcmUgU00gc2VnbWVudHMgdGhlIERTUCBhbGxvY2F0ZXMgZnJvbS4KKyAqCisgKiAgVGhpcyBpbmZvIGlzIHVzZWQgYnkgdGhlIEdQUCB0byB4bGF0ZSBEU1AgYWxsb2NhdGVkIFBBcy4KKyAqLworCitzdHJ1Y3QgY21tX3NlZ2luZm8geworCXUzMiBkd19zZWdfYmFzZV9wYTsJLyogU3RhcnQgUGh5cyBhZGRyZXNzIG9mIFNNIHNlZ21lbnQgKi8KKwkvKiBUb3RhbCBzaXplIGluIGJ5dGVzIG9mIHNlZ21lbnQ6IERTUCtHUFAgKi8KKwl1MzIgdWxfdG90YWxfc2VnX3NpemU7CisJdTMyIGR3X2dwcF9iYXNlX3BhOwkvKiBTdGFydCBQaHlzIGFkZHIgb2YgR3BwIFNNIHNlZyAqLworCXUzMiB1bF9ncHBfc2l6ZTsJLyogU2l6ZSBvZiBHcHAgU00gc2VnIGluIGJ5dGVzICovCisJdTMyIGR3X2RzcF9iYXNlX3ZhOwkvKiBEU1AgdmlydCBiYXNlIGJ5dGUgYWRkcmVzcyAqLworCXUzMiB1bF9kc3Bfc2l6ZTsJLyogRFNQIHNlZyBzaXplIGluIGJ5dGVzICovCisJLyogIyBvZiBjdXJyZW50IEdQUCBhbGxvY2F0aW9ucyBmcm9tIHRoaXMgc2VnbWVudCAqLworCXUzMiB1bF9pbl91c2VfY250OworCXUzMiBkd19zZWdfYmFzZV92YTsJLyogU3RhcnQgVmlydCBhZGRyZXNzIG9mIFNNIHNlZyAqLworCit9OworCisvKiBDTU0gdXNlZnVsIGluZm9ybWF0aW9uICovCitzdHJ1Y3QgY21tX2luZm8geworCS8qICMgb2YgU00gc2VnbWVudHMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgQ21tLiAqLworCXUzMiB1bF9udW1fZ3Bwc21fc2VnczsKKwkvKiBUb3RhbCAjIG9mIGFsbG9jYXRpb25zIG91dHN0YW5kaW5nIGZvciBDTU0gKi8KKwl1MzIgdWxfdG90YWxfaW5fdXNlX2NudDsKKwkvKiBNaW4gU00gYmxvY2sgc2l6ZSBhbGxvY2F0aW9uIGZyb20gY21tX2NyZWF0ZSgpICovCisJdTMyIHVsX21pbl9ibG9ja19zaXplOworCS8qIEluZm8gcGVyIHJlZ2lzdGVyZWQgU00gc2VnbWVudC4gKi8KKwlzdHJ1Y3QgY21tX3NlZ2luZm8gc2VnX2luZm9bQ01NX01BWEdQUFNFR1NdOworfTsKKworLyogWGxhdG9yQ3JlYXRlIGF0dHJpYnV0ZXMgKi8KK3N0cnVjdCBjbW1feGxhdG9yYXR0cnMgeworCXUzMiB1bF9zZWdfaWQ7CQkvKiBzZWdtZW50IElkIHVzZWQgZm9yIFNNIGFsbG9jYXRpb25zICovCisJdTMyIGR3X2RzcF9idWZzOwkvKiAjIG9mIERTUC1zaWRlIGJ1ZnMgKi8KKwl1MzIgZHdfZHNwX2J1Zl9zaXplOwkvKiBzaXplIG9mIERTUC1zaWRlIGJ1ZnMgaW4gR1BQIGJ5dGVzICovCisJLyogVm0gYmFzZSBhZGRyZXNzIGFsbG9jJ2QgaW4gY2xpZW50IHByb2Nlc3MgY29udGV4dCAqLworCXZvaWQgKnZtX2Jhc2U7CisJLyogZHdfdm1fc2l6ZSBtdXN0IGJlID49IChkd01heE51bUJ1ZnMgKiBkd01heFNpemUpICovCisJdTMyIGR3X3ZtX3NpemU7Cit9OworCisvKgorICogQ21tIHRyYW5zbGF0aW9uIHR5cGVzLiBVc2UgdG8gbWFwIFNNIGFkZHJlc3NlcyB0byBwcm9jZXNzIGNvbnRleHQuCisgKi8KK2VudW0gY21tX3hsYXRldHlwZSB7CisJQ01NX1ZBMlBBID0gMCwJCS8qIFZpcnR1YWwgdG8gR1BQIHBoeXNpY2FsIGFkZHJlc3MgeGxhdGlvbiAqLworCUNNTV9QQTJWQSA9IDEsCQkvKiBHUFAgUGh5c2ljYWwgdG8gdmlydHVhbCAqLworCUNNTV9WQTJEU1BQQSA9IDIsCS8qIFZhIHRvIERTUCBQYSAqLworCUNNTV9QQTJEU1BQQSA9IDMsCS8qIEdQUCBQYSB0byBEU1AgUGEgKi8KKwlDTU1fRFNQUEEyUEEgPSA0LAkvKiBEU1AgUGEgdG8gR1BQIFBhICovCit9OworCitzdHJ1Y3QgY21tX29iamVjdDsKK3N0cnVjdCBjbW1feGxhdG9yb2JqZWN0OworCisjZW5kaWYgLyogQ01NREVGU18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jb2QuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jb2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmJjZTJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2NvZC5oCkBAIC0wLDAgKzEsMzY5IEBACisvKgorICogY29kLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogQ29kZSBtYW5hZ2VtZW50IG1vZHVsZSBmb3IgRFNQcy4gVGhpcyBtb2R1bGUgcHJvdmlkZXMgYW4gaW50ZXJmYWNlCisgKiBpbnRlcmZhY2UgZm9yIGxvYWRpbmcgYm90aCBzdGF0aWMgYW5kIGR5bmFtaWMgY29kZSBvYmplY3RzIG9udG8gRFNQCisgKiBzeXN0ZW1zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgQ09EXworI2RlZmluZSBDT0RfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJsbGRlZnMuaD4KKworI2RlZmluZSBDT0RfTUFYUEFUSExFTkdUSCAgICAgICAyNTUKKyNkZWZpbmUgQ09EX1RSQUNFQkVHICAgICAgICAgICAgIlNZU19QVVRDQkVHIgorI2RlZmluZSBDT0RfVFJBQ0VFTkQgICAgICAgICAgICAiU1lTX1BVVENFTkQiCisjZGVmaW5lIENPRF9UUkFDRUNVUlBPUwkiQlJJREdFX1NZU19QVVRDX2N1cnJlbnQiCisjZGVmaW5lIENPRF9UUkFDRVNFQ1QgICAgICAgICAgICJ0cmFjZSIKKyNkZWZpbmUgQ09EX1RSQUNFQkVHT0xEICAgICAgICAgIlBVVENCRUciCisjZGVmaW5lIENPRF9UUkFDRUVORE9MRCAgICAgICAgICJQVVRDRU5EIgorCisjZGVmaW5lIENPRF9OT0xPQUQgICAgICAgICAgICAgIERCTExfTk9MT0FECisjZGVmaW5lIENPRF9TWU1CICAgICAgICAgICAgICAgIERCTExfU1lNQgorCisvKiBDT0QgY29kZSBtYW5hZ2VyIGhhbmRsZSAqLworc3RydWN0IGNvZF9tYW5hZ2VyOworCisvKiBDT0QgbGlicmFyeSBoYW5kbGUgKi8KK3N0cnVjdCBjb2RfbGlicmFyeW9iajsKKworLyogQ09EIGF0dHJpYnV0ZXMgKi8KK3N0cnVjdCBjb2RfYXR0cnMgeworCXUzMiB1bF9yZXNlcnZlZDsKK307CisKKy8qCisgKiAgRnVuY3Rpb24gcHJvdG90eXBlcyBmb3Igd3JpdGluZyBtZW1vcnkgdG8gYSBEU1Agc3lzdGVtLCBhbGxvY2F0aW5nCisgKiAgYW5kIGZyZWVpbmcgRFNQIG1lbW9yeS4KKyAqLwordHlwZWRlZiB1MzIoKmNvZF93cml0ZWZ4bikgKHZvaWQgKnByaXZfcmVmLCB1MzIgZHNwX2FkZCwKKwkJCSAgICB2b2lkICpwYnVmLCB1MzIgdWxfbnVtX2J5dGVzLCB1MzIgbWVtX3NwYWNlKTsKKworLyoKKyAqICA9PT09PT09PSBjb2RfY2xvc2UgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDbG9zZSBhIGxpYnJhcnkgb3BlbmVkIHdpdGggY29kX29wZW4oKS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBsaWIgICAgICAgICAgICAgLSBMaWJyYXJ5IGhhbmRsZSByZXR1cm5lZCBieSBjb2Rfb3BlbigpLgorICogIFJldHVybnM6CisgKiAgICAgIE5vbmUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIENPRCBtb2R1bGUgaW5pdGlhbGl6ZWQuCisgKiAgICAgIHZhbGlkIGxpYi4KKyAqICBFbnN1cmVzOgorICoKKyAqLworZXh0ZXJuIHZvaWQgY29kX2Nsb3NlKHN0cnVjdCBjb2RfbGlicmFyeW9iaiAqbGliKTsKKworLyoKKyAqICA9PT09PT09PSBjb2RfY3JlYXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ3JlYXRlIGFuIG9iamVjdCB0byBtYW5hZ2UgY29kZSBvbiBhIERTUCBzeXN0ZW0uIFRoaXMgb2JqZWN0IGNhbiBiZQorICogICAgICB1c2VkIHRvIGxvYWQgYW4gaW5pdGlhbCBwcm9ncmFtIGltYWdlIHdpdGggYXJndW1lbnRzIHRoYXQgY2FuIGxhdGVyCisgKiAgICAgIGJlIGV4cGFuZGVkIHdpdGggZHluYW1pY2FsbHkgbG9hZGVkIG9iamVjdCBmaWxlcy4KKyAqICAgICAgU3ltYm9sIHRhYmxlIGluZm9ybWF0aW9uIGlzIG1hbmFnZWQgYnkgdGhpcyBvYmplY3QgYW5kIGNhbiBiZSByZXRyaWV2ZWQKKyAqICAgICAgdXNpbmcgdGhlIGNvZF9nZXRfc3ltX3ZhbHVlKCkgZnVuY3Rpb24uCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbWFuYWdlcjogICAgICAgIGNyZWF0ZWQgbWFuYWdlciBvYmplY3QKKyAqICAgICAgc3RyX3psX2ZpbGU6ICAgIFpMIERMTCBmaWxlbmFtZSwgb2YgbGVuZ3RoIDwgQ09EX01BWFBBVEhMRU5HVEguCisgKiAgICAgIGF0dHJzOiAgICAgICAgICBhdHRyaWJ1dGVzIHRvIGJlIHVzZWQgYnkgdGhpcyBvYmplY3QuIEEgTlVMTCB2YWx1ZQorICogICAgICAgICAgICAgICAgICAgICAgd2lsbCBjYXVzZSBkZWZhdWx0IGF0dHJzIHRvIGJlIHVzZWQuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVTUElQRTogICBaTF9DcmVhdGUgZmFpbGVkLgorICogICAgICAtRU5PU1lTOiAgICAgICAgICAgYXR0cnMgd2FzIG5vdCBOVUxMLiAgV2UgZG9uJ3QgeWV0IHN1cHBvcnQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uIGRlZmF1bHQgdmFsdWVzIG9mIGF0dHJzLgorICogIFJlcXVpcmVzOgorICogICAgICBDT0QgbW9kdWxlIGluaXRpYWxpemVkLgorICogICAgICBzdHJfemxfZmlsZSAhPSBOVUxMCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBjb2RfY3JlYXRlKHN0cnVjdCBjb2RfbWFuYWdlciAqKm1nciwKKwkJCSAgICAgY2hhciAqc3RyX3psX2ZpbGUsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBjb2RfYXR0cnMgKmF0dHJzKTsKKworLyoKKyAqICA9PT09PT09PSBjb2RfZGVsZXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGVsZXRlIGEgY29kZSBtYW5hZ2VyIG9iamVjdC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBjb2RfbWdyX29iajogICBoYW5kbGUgb2YgbWFuYWdlciB0byBiZSBkZWxldGVkCisgKiAgUmV0dXJuczoKKyAqICAgICAgTm9uZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgQ09EIG1vZHVsZSBpbml0aWFsaXplZC4KKyAqICAgICAgdmFsaWQgY29kX21ncl9vYmouCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIHZvaWQgY29kX2RlbGV0ZShzdHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tZ3Jfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBjb2RfZXhpdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERpc2NvbnRpbnVlIHVzYWdlIG9mIHRoZSBDT0QgbW9kdWxlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIE5vbmUuCisgKiAgUmV0dXJuczoKKyAqICAgICAgTm9uZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgQ09EIGluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgICAgIFJlc291cmNlcyBhY3F1aXJlZCBpbiBjb2RfaW5pdCh2b2lkKSBhcmUgZnJlZWQuCisgKi8KK2V4dGVybiB2b2lkIGNvZF9leGl0KHZvaWQpOworCisvKgorICogID09PT09PT09IGNvZF9nZXRfYmFzZV9saWIgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBHZXQgaGFuZGxlIHRvIHRoZSBiYXNlIGltYWdlIERCTCBsaWJyYXJ5LgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGNvZF9tZ3Jfb2JqOiAgIGhhbmRsZSBvZiBtYW5hZ2VyIHRvIGJlIGRlbGV0ZWQKKyAqICAgICAgcGxpYjogICAgICAgbG9jYXRpb24gdG8gc3RvcmUgbGlicmFyeSBoYW5kbGUgb24gb3V0cHV0LgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgIFN1Y2Nlc3MuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIENPRCBtb2R1bGUgaW5pdGlhbGl6ZWQuCisgKiAgICAgIHZhbGlkIGNvZF9tZ3Jfb2JqLgorICogICAgICBwbGliICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBjb2RfZ2V0X2Jhc2VfbGliKHN0cnVjdCBjb2RfbWFuYWdlciAqY29kX21ncl9vYmosCisJCQkJICAgc3RydWN0IGRibGxfbGlicmFyeV9vYmogKipwbGliKTsKKworLyoKKyAqICA9PT09PT09PSBjb2RfZ2V0X2Jhc2VfbmFtZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEdldCB0aGUgbmFtZSBvZiB0aGUgYmFzZSBpbWFnZSBEQkwgbGlicmFyeS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBjb2RfbWdyX29iajogICBoYW5kbGUgb2YgbWFuYWdlciB0byBiZSBkZWxldGVkCisgKiAgICAgIHN6X25hbWU6ICAgIGxvY2F0aW9uIHRvIHN0b3JlIGxpYnJhcnkgbmFtZSBvbiBvdXRwdXQuCisgKiAgICAgIHVzaXplOiAgICAgICBzaXplIG9mIG5hbWUgYnVmZmVyLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FUEVSTTogIEJ1ZmZlciB0b28gc21hbGwuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIENPRCBtb2R1bGUgaW5pdGlhbGl6ZWQuCisgKiAgICAgIHZhbGlkIGNvZF9tZ3Jfb2JqLgorICogICAgICBzel9uYW1lICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBjb2RfZ2V0X2Jhc2VfbmFtZShzdHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tZ3Jfb2JqLAorCQkJCSAgICBjaGFyICpzel9uYW1lLCB1MzIgdXNpemUpOworCisvKgorICogID09PT09PT09IGNvZF9nZXRfZW50cnkgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgZW50cnkgcG9pbnQgb2YgYSBsb2FkZWQgRFNQIHByb2dyYW0gaW1hZ2UKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBjb2RfbWdyX29iajogICBoYW5kbGUgb2YgbWFuYWdlciB0byBiZSBkZWxldGVkCisgKiAgICAgIGVudHJ5X3B0OiAgIHBvaW50ZXIgdG8gbG9jYXRpb24gZm9yIGVudHJ5IHBvaW50CisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgU3VjY2Vzcy4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgQ09EIG1vZHVsZSBpbml0aWFsaXplZC4KKyAqICAgICAgdmFsaWQgY29kX21ncl9vYmouCisgKiAgICAgIGVudHJ5X3B0ICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBjb2RfZ2V0X2VudHJ5KHN0cnVjdCBjb2RfbWFuYWdlciAqY29kX21ncl9vYmosCisJCQkJdTMyICplbnRyeV9wdCk7CisKKy8qCisgKiAgPT09PT09PT0gY29kX2dldF9sb2FkZXIgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBHZXQgaGFuZGxlIHRvIHRoZSBEQkwgbG9hZGVyLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGNvZF9tZ3Jfb2JqOiAgIGhhbmRsZSBvZiBtYW5hZ2VyIHRvIGJlIGRlbGV0ZWQKKyAqICAgICAgbG9hZGVyOiAgICAgbG9jYXRpb24gdG8gc3RvcmUgbG9hZGVyIGhhbmRsZSBvbiBvdXRwdXQuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgU3VjY2Vzcy4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgQ09EIG1vZHVsZSBpbml0aWFsaXplZC4KKyAqICAgICAgdmFsaWQgY29kX21ncl9vYmouCisgKiAgICAgIGxvYWRlciAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgY29kX2dldF9sb2FkZXIoc3RydWN0IGNvZF9tYW5hZ2VyICpjb2RfbWdyX29iaiwKKwkJCQkgc3RydWN0IGRibGxfdGFyX29iaiAqKmxvYWRlcik7CisKKy8qCisgKiAgPT09PT09PT0gY29kX2dldF9zZWN0aW9uID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIHN0YXJ0aW5nIGFkZHJlc3MgYW5kIGxlbmd0aCBvZiBhIHNlY3Rpb24gaW4gdGhlIENPRkYgZmlsZQorICogICAgICBnaXZlbiB0aGUgc2VjdGlvbiBuYW1lLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGxpYiAgICAgICAgIExpYnJhcnkgaGFuZGxlIHJldHVybmVkIGZyb20gY29kX29wZW4oKS4KKyAqICAgICAgc3RyX3NlY3Q6ICAgbmFtZSBvZiB0aGUgc2VjdGlvbiwgd2l0aCBvciB3aXRob3V0IGxlYWRpbmcgIi4iCisgKiAgICAgIGFkZHI6ICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIGFkZHJlc3MuCisgKiAgICAgIGxlbjogICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIGxlbmd0aC4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgICAgICBTdWNjZXNzCisgKiAgICAgIC1FU1BJUEU6ICBTeW1ib2xzIGNvdWxkIG5vdCBiZSBmb3VuZCBvciBoYXZlIG5vdCBiZWVuIGxvYWRlZCBvbnRvCisgKiAgICAgICAgICAgICAgICB0aGUgYm9hcmQuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIENPRCBtb2R1bGUgaW5pdGlhbGl6ZWQuCisgKiAgICAgIHZhbGlkIGNvZF9tZ3Jfb2JqLgorICogICAgICBzdHJfc2VjdCAhPSBOVUxMOworICogICAgICBhZGRyICE9IE5VTEw7CisgKiAgICAgIGxlbiAhPSBOVUxMOworICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAqYWRkciBhbmQgKmxlbiBjb250YWluIHRoZSBhZGRyZXNzIGFuZCBsZW5ndGggb2YgdGhlCisgKiAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAqICAgICAgZWxzZTogICphZGRyID09IDAgYW5kICpsZW4gPT0gMDsKKyAqCisgKi8KK2V4dGVybiBpbnQgY29kX2dldF9zZWN0aW9uKHN0cnVjdCBjb2RfbGlicmFyeW9iaiAqbGliLAorCQkJCSAgY2hhciAqc3RyX3NlY3QsCisJCQkJICB1MzIgKmFkZHIsIHUzMiAqbGVuKTsKKworLyoKKyAqICA9PT09PT09PSBjb2RfZ2V0X3N5bV92YWx1ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIHRoZSB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBzeW1ib2wuIFRoZSBzeW1ib2wgaXMgZmlyc3QKKyAqICAgICAgc2VhcmNoZWQgZm9yIGxpdGVyYWxseSBhbmQgdGhlbiwgaWYgbm90IGZvdW5kLCBzZWFyY2hlZCBmb3IgYXMgYQorICogICAgICBDIHN5bWJvbC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBsaWI6ICAgICAgICBsaWJyYXJ5IGhhbmRsZSByZXR1cm5lZCBmcm9tIGNvZF9vcGVuKCkuCisgKiAgICAgIHBzdHJTeW1ib2w6IG5hbWUgb2YgdGhlIHN5bWJvbAorICogICAgICB2YWx1ZTogICAgICB2YWx1ZSBvZiB0aGUgc3ltYm9sCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVTUElQRTogIFN5bWJvbHMgY291bGQgbm90IGJlIGZvdW5kIG9yIGhhdmUgbm90IGJlZW4gbG9hZGVkIG9udG8KKyAqICAgICAgICAgICAgICAgIHRoZSBib2FyZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgQ09EIG1vZHVsZSBpbml0aWFsaXplZC4KKyAqICAgICAgVmFsaWQgY29kX21ncl9vYmouCisgKiAgICAgIHN0cl9zeW0gIT0gTlVMTC4KKyAqICAgICAgcHVsX3ZhbHVlICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBjb2RfZ2V0X3N5bV92YWx1ZShzdHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tZ3Jfb2JqLAorCQkJCSAgICBjaGFyICpzdHJfc3ltLCB1MzIgKiBwdWxfdmFsdWUpOworCisvKgorICogID09PT09PT09IGNvZF9pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZSB0aGUgQ09EIG1vZHVsZSdzIHByaXZhdGUgc3RhdGUuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgTm9uZS4KKyAqICBSZXR1cm5zOgorICogICAgICBUUlVFIGlmIGluaXRpYWxpemVkOyBGQUxTRSBpZiBlcnJvciBvY2N1cmVkLgorICogIFJlcXVpcmVzOgorICogIEVuc3VyZXM6CisgKiAgICAgIEEgcmVxdWlyZW1lbnQgZm9yIGVhY2ggb2YgdGhlIG90aGVyIHB1YmxpYyBDT0QgZnVuY3Rpb25zLgorICovCitleHRlcm4gYm9vbCBjb2RfaW5pdCh2b2lkKTsKKworLyoKKyAqICA9PT09PT09PSBjb2RfbG9hZF9iYXNlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgTG9hZCB0aGUgaW5pdGlhbCBwcm9ncmFtIGltYWdlLCBvcHRpb25hbGx5IHdpdGggY29tbWFuZC1saW5lIGFyZ3VtZW50cywKKyAqICAgICAgb24gdGhlIERTUCBzeXN0ZW0gbWFuYWdlZCBieSB0aGUgc3VwcGxpZWQgaGFuZGxlLiBUaGUgcHJvZ3JhbSB0byBiZQorICogICAgICBsb2FkZWQgbXVzdCBiZSB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgYXJncyBhcnJheSBhbmQgbXVzdCBiZSBhIGZ1bGx5CisgKiAgICAgIHF1YWxpZmllZCBwYXRobmFtZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBobWdyOiAgICAgICBtYW5hZ2VyIHRvIGxvYWQgdGhlIGNvZGUgd2l0aAorICogICAgICBudW1fYXJnYzogICBudW1iZXIgb2YgYXJndW1lbnRzIGluIHRoZSBhcmdzIGFycmF5CisgKiAgICAgIGFyZ3M6ICAgICAgIGFycmF5IG9mIHN0cmluZ3MgZm9yIGFyZ3VtZW50cyB0byBEU1AgcHJvZ3JhbQorICogICAgICB3cml0ZV9meG46ICAgYm9hcmQtc3BlY2lmaWMgZnVuY3Rpb24gdG8gd3JpdGUgZGF0YSB0byBEU1Agc3lzdGVtCisgKiAgICAgIGFyYjogICAgICAgYXJiaXRyYXJ5IHBvaW50ZXIgdG8gYmUgcGFzc2VkIGFzIGZpcnN0IGFyZyB0byB3cml0ZV9meG4KKyAqICAgICAgZW52cDogICAgICAgYXJyYXkgb2YgZW52aXJvbm1lbnQgc3RyaW5ncyBmb3IgRFNQIGV4ZWMuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVCQURGOiAgICAgICBGYWlsZWQgdG8gb3BlbiB0YXJnZXQgY29kZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgQ09EIG1vZHVsZSBpbml0aWFsaXplZC4KKyAqICAgICAgaG1nciBpcyB2YWxpZC4KKyAqICAgICAgbnVtX2FyZ2MgPiAwLgorICogICAgICBhcmdzICE9IE5VTEwuCisgKiAgICAgIGFyZ3NbMF0gIT0gTlVMTC4KKyAqICAgICAgcGZuX3dyaXRlICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBjb2RfbG9hZF9iYXNlKHN0cnVjdCBjb2RfbWFuYWdlciAqY29kX21ncl9vYmosCisJCQkJdTMyIG51bV9hcmdjLCBjaGFyICphcmdzW10sCisJCQkJY29kX3dyaXRlZnhuIHBmbl93cml0ZSwgdm9pZCAqYXJiLAorCQkJCWNoYXIgKmVudnBbXSk7CisKKy8qCisgKiAgPT09PT09PT0gY29kX29wZW4gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBPcGVuIGEgbGlicmFyeSBmb3IgcmVhZGluZyBzZWN0aW9ucy4gRG9lcyBub3QgbG9hZCBvciBzZXQgdGhlIGJhc2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaG1ncjogICAgICAgICAgIG1hbmFnZXIgdG8gbG9hZCB0aGUgY29kZSB3aXRoCisgKiAgICAgIHN6X2NvZmZfcGF0aDogICBDb2ZmIGZpbGUgdG8gb3Blbi4KKyAqICAgICAgZmxhZ3M6ICAgICAgICAgIENPRF9OT0xPQUQgKGRvbid0IGxvYWQgc3ltYm9scykgb3IgQ09EX1NZTUIgKGxvYWQKKyAqICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbHMpLgorICogICAgICBsaWJfb2JqOiAgICAgICAgSGFuZGxlIHJldHVybmVkIHRoYXQgY2FuIGJlIHVzZWQgaW4gY2FsbHMgdG8gY29kX2Nsb3NlCisgKiAgICAgICAgICAgICAgICAgICAgICBhbmQgY29kX2dldF9zZWN0aW9uLgorICogIFJldHVybnM6CisgKiAgICAgIFNfT0s6ICAgICAgICAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FQkFERjogICAgICAgRmFpbGVkIHRvIG9wZW4gdGFyZ2V0IGNvZGUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIENPRCBtb2R1bGUgaW5pdGlhbGl6ZWQuCisgKiAgICAgIGhtZ3IgaXMgdmFsaWQuCisgKiAgICAgIGZsYWdzID09IENPRF9OT0xPQUQgfHwgZmxhZ3MgPT0gQ09EX1NZTUIuCisgKiAgICAgIHN6X2NvZmZfcGF0aCAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgY29kX29wZW4oc3RydWN0IGNvZF9tYW5hZ2VyICpobWdyLAorCQkJICAgY2hhciAqc3pfY29mZl9wYXRoLAorCQkJICAgdTMyIGZsYWdzLCBzdHJ1Y3QgY29kX2xpYnJhcnlvYmogKipsaWJfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBjb2Rfb3Blbl9iYXNlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgT3BlbiBiYXNlIGltYWdlIGZvciByZWFkaW5nIHNlY3Rpb25zLiBEb2VzIG5vdCBsb2FkIHRoZSBiYXNlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhtZ3I6ICAgICAgICAgICBtYW5hZ2VyIHRvIGxvYWQgdGhlIGNvZGUgd2l0aAorICogICAgICBzel9jb2ZmX3BhdGg6ICAgQ29mZiBmaWxlIHRvIG9wZW4uCisgKiAgICAgIGZsYWdzOiAgICAgICAgICBTcGVjaWZpZXMgd2hldGhlciB0byBsb2FkIHN5bWJvbHMuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUJBREY6ICAgRmFpbGVkIHRvIG9wZW4gdGFyZ2V0IGNvZGUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIENPRCBtb2R1bGUgaW5pdGlhbGl6ZWQuCisgKiAgICAgIGhtZ3IgaXMgdmFsaWQuCisgKiAgICAgIHN6X2NvZmZfcGF0aCAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgY29kX29wZW5fYmFzZShzdHJ1Y3QgY29kX21hbmFnZXIgKmhtZ3IsIGNoYXIgKnN6X2NvZmZfcGF0aCwKKwkJCQlkYmxsX2ZsYWdzIGZsYWdzKTsKKworLyoKKyAqICA9PT09PT09PSBjb2RfcmVhZF9zZWN0aW9uID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIGNvbnRlbnQgb2YgYSBjb2RlIHNlY3Rpb24gZ2l2ZW4gdGhlIHNlY3Rpb24gbmFtZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBjb2RfbWdyX29iaiAgICAtIG1hbmFnZXIgaW4gd2hpY2ggdG8gc2VhcmNoIGZvciB0aGUgc3ltYm9sCisgKiAgICAgIHN0cl9zZWN0ICAgIC0gbmFtZSBvZiB0aGUgc2VjdGlvbiwgd2l0aCBvciB3aXRob3V0IGxlYWRpbmcgIi4iCisgKiAgICAgIHN0cl9jb250ZW50IC0gYnVmZmVyIHRvIHN0b3JlIGNvbnRlbnQgb2YgdGhlIHNlY3Rpb24uCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogb24gc3VjY2VzcywgZXJyb3IgY29kZSBvbiBmYWlsdXJlCisgKiAgICAgIC1FU1BJUEU6ICBTeW1ib2xzIGhhdmUgbm90IGJlZW4gbG9hZGVkIG9udG8gdGhlIGJvYXJkLgorICogIFJlcXVpcmVzOgorICogICAgICBDT0QgbW9kdWxlIGluaXRpYWxpemVkLgorICogICAgICB2YWxpZCBjb2RfbWdyX29iai4KKyAqICAgICAgc3RyX3NlY3QgIT0gTlVMTDsKKyAqICAgICAgc3RyX2NvbnRlbnQgIT0gTlVMTDsKKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgKnN0cl9jb250ZW50IHN0b3JlcyB0aGUgY29udGVudCBvZiB0aGUgbmFtZWQgc2VjdGlvbi4KKyAqLworZXh0ZXJuIGludCBjb2RfcmVhZF9zZWN0aW9uKHN0cnVjdCBjb2RfbGlicmFyeW9iaiAqbGliLAorCQkJCSAgIGNoYXIgKnN0cl9zZWN0LAorCQkJCSAgIGNoYXIgKnN0cl9jb250ZW50LCB1MzIgY29udGVudF9zaXplKTsKKworI2VuZGlmIC8qIENPRF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kYmMuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kYmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjM3NjBmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RiYy5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBkYmMuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiAiRGVzaWduIGJ5IENvbnRyYWN0IiBwcm9ncmFtbWluZyBtYWNyb3MuCisgKgorICogTm90ZXM6CisgKiAgIFJlcXVpcmVzIHRoYXQgdGhlIEdULT5FUlJPUiBmdW5jdGlvbiBoYXMgYmVlbiBkZWZhdWx0ZWQgdG8gYSB2YWxpZAorICogICBlcnJvciBoYW5kbGVyIGZvciB0aGUgZ2l2ZW4gZXhlY3V0aW9uIGVudmlyb25tZW50LgorICoKKyAqICAgRG9lcyBub3QgcmVxdWlyZSB0aGF0IEdUX2luaXQoKSBiZSBjYWxsZWQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgREJDXworI2RlZmluZSBEQkNfCisKKy8qIEFzc2VydGlvbiBNYWNyb3M6ICovCisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0RFQlVHCisKKyNkZWZpbmUgREJDX0FTU0VSVChleHApIFwKKyAgICBpZiAoIShleHApKSBcCisJcHJfZXJyKCIlcywgbGluZSAlZDogQXNzZXJ0aW9uICgiICNleHAgIikgZmFpbGVkLlxuIiwgXAorCV9fRklMRV9fLCBfX0xJTkVfXykKKyNkZWZpbmUgREJDX1JFUVVJUkUgREJDX0FTU0VSVAkvKiBGdW5jdGlvbiBQcmVjb25kaXRpb24uICovCisjZGVmaW5lIERCQ19FTlNVUkUgIERCQ19BU1NFUlQJLyogRnVuY3Rpb24gUG9zdGNvbmRpdGlvbi4gKi8KKworI2Vsc2UKKworI2RlZmluZSBEQkNfQVNTRVJUKGV4cCkge30KKyNkZWZpbmUgREJDX1JFUVVJUkUoZXhwKSB7fQorI2RlZmluZSBEQkNfRU5TVVJFKGV4cCkge30KKworI2VuZGlmIC8qIERFQlVHICovCisKKyNlbmRpZiAvKiBEQkNfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZGJkY2QuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kYmRjZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYzNlMTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZGJkY2QuaApAQCAtMCwwICsxLDM1OCBAQAorLyoKKyAqIGRiZGNkLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogRGVmaW5lcyB0aGUgRFNQL0JJT1MgQnJpZGdlIENvbmZpZ3VyYXRpb24gRGF0YWJhc2UgKERDRCkgQVBJLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIERCRENEXworI2RlZmluZSBEQkRDRF8KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRjZGRlZi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL25sZHJkZWZzLmg+CisKKy8qCisgKiAgPT09PT09PT0gZGNkX2F1dG9fcmVnaXN0ZXIgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBUaGlzIGZ1bmN0aW9uIGF1dG9tYXRpY2FsbHkgcmVnaXN0ZXJzIERDRCBvYmplY3RzIHNwZWNpZmllZCBpbiBhCisgKiAgICAgIHNwZWNpYWwgQ09GRiBzZWN0aW9uIGNhbGxlZCAiLmRjZF9yZWdpc3RlciIKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoZGNkX21ncjogICAgICAgICAgICAgICAgQSBEQ0QgbWFuYWdlciBoYW5kbGUuCisgKiAgICAgIHN6X2NvZmZfcGF0aDogICAgICAgICAgIFBvaW50ZXIgdG8gbmFtZSBvZiBDT0ZGIGZpbGUgY29udGFpbmluZyBEQ0QKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cyB0byBiZSByZWdpc3RlcmVkLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FQUNDRVM6IFVuYWJsZSB0byBmaW5kIGF1dG8tcmVnaXN0cmF0aW9uL3JlYWQvbG9hZCBzZWN0aW9uLgorICogICAgICAtRUZBVUxUOiAgICAgICAgICAgIEludmFsaWQgRENEX0hNQU5BR0VSIGhhbmRsZS4uCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIERDRCBpbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogIE5vdGU6CisgKiAgICAgIER1ZSB0byB0aGUgRENEIGRhdGFiYXNlIGNvbnN0cnVjdGlvbiwgaXQgaXMgZXNzZW50aWFsIGZvciBhIERDRC1lbmFibGVkCisgKiAgICAgIENPRkYgZmlsZSB0byBjb250YWluIHRoZSByaWdodCBDT0ZGIHNlY3Rpb25zLCBlc3BlY2lhbGx5CisgKiAgICAgICIuZGNkX3JlZ2lzdGVyIiwgd2hpY2ggaXMgdXNlZCBmb3IgYXV0byByZWdpc3RyYXRpb24uCisgKi8KK2V4dGVybiBpbnQgZGNkX2F1dG9fcmVnaXN0ZXIoc3RydWN0IGRjZF9tYW5hZ2VyICpoZGNkX21nciwKKwkJCQkgICAgY2hhciAqc3pfY29mZl9wYXRoKTsKKworLyoKKyAqICA9PT09PT09PSBkY2RfYXV0b191bnJlZ2lzdGVyID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgVGhpcyBmdW5jdGlvbiBhdXRvbWF0aWNhbGx5IHVucmVnaXN0ZXJzIERDRCBvYmplY3RzIHNwZWNpZmllZCBpbiBhCisgKiAgICAgIHNwZWNpYWwgQ09GRiBzZWN0aW9uIGNhbGxlZCAiLmRjZF9yZWdpc3RlciIKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoZGNkX21ncjogICAgICAgICAgICAgICAgQSBEQ0QgbWFuYWdlciBoYW5kbGUuCisgKiAgICAgIHN6X2NvZmZfcGF0aDogICAgICAgICAgIFBvaW50ZXIgdG8gbmFtZSBvZiBDT0ZGIGZpbGUgY29udGFpbmluZworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQ0Qgb2JqZWN0cyB0byBiZSB1bnJlZ2lzdGVyZWQuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVBQ0NFUzogVW5hYmxlIHRvIGZpbmQgYXV0by1yZWdpc3RyYXRpb24vcmVhZC9sb2FkIHNlY3Rpb24uCisgKiAgICAgIC1FRkFVTFQ6ICAgICAgICAgICAgSW52YWxpZCBEQ0RfSE1BTkFHRVIgaGFuZGxlLi4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgRENEIGluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgTm90ZToKKyAqICAgICAgRHVlIHRvIHRoZSBEQ0QgZGF0YWJhc2UgY29uc3RydWN0aW9uLCBpdCBpcyBlc3NlbnRpYWwgZm9yIGEgRENELWVuYWJsZWQKKyAqICAgICAgQ09GRiBmaWxlIHRvIGNvbnRhaW4gdGhlIHJpZ2h0IENPRkYgc2VjdGlvbnMsIGVzcGVjaWFsbHkKKyAqICAgICAgIi5kY2RfcmVnaXN0ZXIiLCB3aGljaCBpcyB1c2VkIGZvciBhdXRvIHVucmVnaXN0cmF0aW9uLgorICovCitleHRlcm4gaW50IGRjZF9hdXRvX3VucmVnaXN0ZXIoc3RydWN0IGRjZF9tYW5hZ2VyICpoZGNkX21nciwKKwkJCQkgICAgICBjaGFyICpzel9jb2ZmX3BhdGgpOworCisvKgorICogID09PT09PT09IGRjZF9jcmVhdGVfbWFuYWdlciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIERDRCBtb2R1bGUgbWFuYWdlci4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBzel96bF9kbGxfbmFtZTogUG9pbnRlciB0byBhIERMTCBuYW1lIHN0cmluZy4KKyAqICAgICAgZGNkX21ncjogICAgICAgIEEgcG9pbnRlciB0byBhIERDRCBtYW5hZ2VyIGhhbmRsZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVOT01FTTogICAgVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgRENEIG1hbmFnZXIgaGFuZGxlLgorICogICAgICAtRVBFUk06ICAgICAgR2VuZXJhbCBmYWlsdXJlLgorICogIFJlcXVpcmVzOgorICogICAgICBEQ0QgaW5pdGlhbGl6ZWQuCisgKiAgICAgIHN6X3psX2RsbF9uYW1lIGlzIG5vbi1OVUxMLgorICogICAgICBkY2RfbWdyIGlzIG5vbi1OVUxMLgorICogIEVuc3VyZXM6CisgKiAgICAgIEEgRENEIG1hbmFnZXIgaGFuZGxlIGlzIGNyZWF0ZWQuCisgKi8KK2V4dGVybiBpbnQgZGNkX2NyZWF0ZV9tYW5hZ2VyKGNoYXIgKnN6X3psX2RsbF9uYW1lLAorCQkJCSAgICAgc3RydWN0IGRjZF9tYW5hZ2VyICoqZGNkX21ncik7CisKKy8qCisgKiAgPT09PT09PT0gZGNkX2Rlc3Ryb3lfbWFuYWdlciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFRoaXMgZnVuY3Rpb24gZGVzdHJveXMgYSBEQ0QgbW9kdWxlIG1hbmFnZXIuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGRjZF9tZ3I6ICAgICAgICBBIERDRCBtYW5hZ2VyIGhhbmRsZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBEQ0QgbWFuYWdlciBoYW5kbGUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIERDRCBpbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IGRjZF9kZXN0cm95X21hbmFnZXIoc3RydWN0IGRjZF9tYW5hZ2VyICpoZGNkX21ncik7CisKKy8qCisgKiAgPT09PT09PT0gZGNkX2VudW1lcmF0ZV9vYmplY3QgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBUaGlzIGZ1bmN0aW9uIGVudW1lcmF0ZXMgY3VycmVudGx5IHZpc2libGUgRFNQL0JJT1MgQnJpZGdlIG9iamVjdHMKKyAqICAgICAgYW5kIHJldHVybnMgdGhlIFVVSUQgYW5kIHR5cGUgb2YgZWFjaCBlbnVtZXJhdGVkIG9iamVjdC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBpbmRleDogICAgICAgICAgICAgIFRoZSBvYmplY3QgZW51bWVyYXRpb24gaW5kZXguCisgKiAgICAgIG9ial90eXBlOiAgICAgICAgICAgIFR5cGUgb2Ygb2JqZWN0IHRvIGVudW1lcmF0ZS4KKyAqICAgICAgdXVpZF9vYmo6ICAgICAgICAgICAgICBQb2ludGVyIHRvIGEgZHNwX3V1aWQgb2JqZWN0LgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVQRVJNOiAgICAgICAgICBVbmFibGUgdG8gZW51bWVyYXRlIHRocm91Z2ggdGhlIERDRCBkYXRhYmFzZS4KKyAqICAgICAgRU5PREFUQTogIEVudW1lcmF0aW9uIGNvbXBsZXRlZC4gVGhpcyBpcyBub3QgYW4gZXJyb3IgY29kZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgRENEIGluaXRpYWxpemVkLgorICogICAgICB1dWlkX29iaiBpcyBhIHZhbGlkIHBvaW50ZXIuCisgKiAgRW5zdXJlczoKKyAqICBEZXRhaWxzOgorICogICAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggZGNkX2dldF9vYmplY3RfZGVmIHRvCisgKiAgICAgIHJldHJpZXZlIG9iamVjdCBwcm9wZXJ0aWVzLgorICovCitleHRlcm4gaW50IGRjZF9lbnVtZXJhdGVfb2JqZWN0KHMzMiBpbmRleCwKKwkJCQkgICAgICAgZW51bSBkc3BfZGNkb2JqdHlwZSBvYmpfdHlwZSwKKwkJCQkgICAgICAgc3RydWN0IGRzcF91dWlkICp1dWlkX29iaik7CisKKy8qCisgKiAgPT09PT09PT0gZGNkX2V4aXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBUaGlzIGZ1bmN0aW9uIGNsZWFucyB1cCB0aGUgRENEIG1vZHVsZS4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIERDRCBpbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gdm9pZCBkY2RfZXhpdCh2b2lkKTsKKworLyoKKyAqICA9PT09PT09PSBkY2RfZ2V0X2RlcF9saWJzID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgR2l2ZW4gdGhlIHV1aWQgb2YgYSBsaWJyYXJ5IGFuZCBzaXplIG9mIGFycmF5IG9mIHV1aWRzLCB0aGlzIGZ1bmN0aW9uCisgKiAgICAgIGZpbGxzIHRoZSBhcnJheSB3aXRoIHRoZSB1dWlkcyBvZiBhbGwgZGVwZW5kZW50IGxpYnJhcmllcyBvZiB0aGUgaW5wdXQKKyAqICAgICAgbGlicmFyeS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoZGNkX21ncjogQSBEQ0QgbWFuYWdlciBoYW5kbGUuCisgKiAgICAgIHV1aWRfb2JqOiBQb2ludGVyIHRvIGEgZHNwX3V1aWQgZm9yIGEgbGlicmFyeS4KKyAqICAgICAgbnVtX2xpYnM6IFNpemUgb2YgdXVpZCBhcnJheSAobnVtYmVyIG9mIGxpYnJhcnkgdXVpZHMpLgorICogICAgICBkZXBfbGliX3V1aWRzOiBBcnJheSBvZiBkZXBlbmRlbnQgbGlicmFyeSB1dWlkcyB0byBiZSBmaWxsZWQgaW4uCisgKiAgICAgIHByc3RudF9kZXBfbGliczogICAgQXJyYXkgaW5kaWNhdGluZyBpZiBjb3JyZXNwb25kaW5nIGxpYiBpcyBwZXJzaXN0ZW50LgorICogICAgICBwaGFzZTogcGhhc2UgdG8gb2J0YWluIGNvcnJlY3QgaW5wdXQgbGlicmFyeQorICogIFJldHVybnM6CisgKiAgICAgIDA6IFN1Y2Nlc3MuCisgKiAgICAgIC1FTk9NRU06IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuCisgKiAgICAgIC1FQUNDRVM6IEZhaWx1cmUgdG8gcmVhZCBzZWN0aW9uIGNvbnRhaW5pbmcgbGlicmFyeSBpbmZvLgorICogICAgICAtRVBFUk06IEdlbmVyYWwgZmFpbHVyZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgRENEIGluaXRpYWxpemVkLgorICogICAgICBWYWxpZCBoZGNkX21nci4KKyAqICAgICAgdXVpZF9vYmogIT0gTlVMTAorICogICAgICBkZXBfbGliX3V1aWRzICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBkY2RfZ2V0X2RlcF9saWJzKHN0cnVjdCBkY2RfbWFuYWdlciAqaGRjZF9tZ3IsCisJCQkJICAgc3RydWN0IGRzcF91dWlkICp1dWlkX29iaiwKKwkJCQkgICB1MTYgbnVtX2xpYnMsCisJCQkJICAgc3RydWN0IGRzcF91dWlkICpkZXBfbGliX3V1aWRzLAorCQkJCSAgIGJvb2wgKnByc3RudF9kZXBfbGlicywKKwkJCQkgICBlbnVtIG5sZHJfcGhhc2UgcGhhc2UpOworCisvKgorICogID09PT09PT09IGRjZF9nZXRfbnVtX2RlcF9saWJzID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgR2l2ZW4gdGhlIHV1aWQgb2YgYSBsaWJyYXJ5LCBkZXRlcm1pbmUgaXRzIG51bWJlciBvZiBkZXBlbmRlbnQKKyAqICAgICAgbGlicmFyaWVzLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhkY2RfbWdyOiAgICAgICAgQSBEQ0QgbWFuYWdlciBoYW5kbGUuCisgKiAgICAgIHV1aWRfb2JqOiAgICAgICAgICBQb2ludGVyIHRvIGEgZHNwX3V1aWQgZm9yIGEgbGlicmFyeS4KKyAqICAgICAgbnVtX2xpYnM6ICAgICAgIFNpemUgb2YgdXVpZCBhcnJheSAobnVtYmVyIG9mIGxpYnJhcnkgdXVpZHMpLgorICogICAgICBudW1fcGVyc19saWJzOiAgbnVtYmVyIG9mIHBlcnNpc3RlbnQgZGVwZW5kZW50IGxpYnJhcnkuCisgKiAgICAgIHBoYXNlOiAgICAgICAgICBQaGFzZSB0byBvYnRhaW4gY29ycmVjdCBpbnB1dCBsaWJyYXJ5CisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogU3VjY2Vzcy4KKyAqICAgICAgLUVOT01FTTogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4KKyAqICAgICAgLUVBQ0NFUzogRmFpbHVyZSB0byByZWFkIHNlY3Rpb24gY29udGFpbmluZyBsaWJyYXJ5IGluZm8uCisgKiAgICAgIC1FUEVSTTogR2VuZXJhbCBmYWlsdXJlLgorICogIFJlcXVpcmVzOgorICogICAgICBEQ0QgaW5pdGlhbGl6ZWQuCisgKiAgICAgIFZhbGlkIGhkY2RfbWdyLgorICogICAgICB1dWlkX29iaiAhPSBOVUxMCisgKiAgICAgIG51bV9saWJzICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBkY2RfZ2V0X251bV9kZXBfbGlicyhzdHJ1Y3QgZGNkX21hbmFnZXIgKmhkY2RfbWdyLAorCQkJCSAgICAgICBzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqLAorCQkJCSAgICAgICB1MTYgKm51bV9saWJzLAorCQkJCSAgICAgICB1MTYgKm51bV9wZXJzX2xpYnMsCisJCQkJICAgICAgIGVudW0gbmxkcl9waGFzZSBwaGFzZSk7CisKKy8qCisgKiAgPT09PT09PT0gZGNkX2dldF9saWJyYXJ5X25hbWUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG5hbWUgb2YgYSAoZHluYW1pYykgbGlicmFyeSBmb3IgYSBnaXZlbgorICogICAgICBVVUlELgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhkY2RfbWdyOiBBIERDRCBtYW5hZ2VyIGhhbmRsZS4KKyAqICAgICAgdXVpZF9vYmo6CVBvaW50ZXIgdG8gYSBkc3BfdXVpZCB0aGF0IHJlcHJlc2VudHMgYSB1bmlxdWUgRFNQL0JJT1MKKyAqICAgICAgICAgICAgICAgICAgICAgIEJyaWRnZSBvYmplY3QuCisgKiAgICAgIHN0cl9saWJfbmFtZTogQnVmZmVyIHRvIGhvbGQgbGlicmFyeSBuYW1lLgorICogICAgICBidWZmX3NpemU6IENvbnRhaW5zIGJ1ZmZlciBzaXplLiBTZXQgdG8gc3RyaW5nIHNpemUgb24gb3V0cHV0LgorICogICAgICBwaGFzZTogICAgICAgICAgV2hpY2ggcGhhc2UgdG8gbG9hZAorICogICAgICBwaGFzZV9zcGxpdDogICAgQXJlIHBoYXNlcyBpbiBtdWx0aXBsZSBsaWJyYXJpZXMKKyAqICBSZXR1cm5zOgorICogICAgICAwOiBTdWNjZXNzLgorICogICAgICAtRVBFUk06IEdlbmVyYWwgZmFpbHVyZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgRENEIGluaXRpYWxpemVkLgorICogICAgICBWYWxpZCBoZGNkX21nci4KKyAqICAgICAgc3RyX2xpYl9uYW1lICE9IE5VTEwuCisgKiAgICAgIHV1aWRfb2JqICE9IE5VTEwKKyAqICAgICAgYnVmZl9zaXplICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBkY2RfZ2V0X2xpYnJhcnlfbmFtZShzdHJ1Y3QgZGNkX21hbmFnZXIgKmhkY2RfbWdyLAorCQkJCSAgICAgICBzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqLAorCQkJCSAgICAgICBjaGFyICpzdHJfbGliX25hbWUsCisJCQkJICAgICAgIHUzMiAqYnVmZl9zaXplLAorCQkJCSAgICAgICBlbnVtIG5sZHJfcGhhc2UgcGhhc2UsCisJCQkJICAgICAgIGJvb2wgKnBoYXNlX3NwbGl0KTsKKworLyoKKyAqICA9PT09PT09PSBkY2RfZ2V0X29iamVjdF9kZWYgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHByb3BlcnRpZXMvYXR0cmlidXRlcyBvZiBhIERTUC9CSU9TIEJyaWRnZQorICogICAgICBvYmplY3QuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGRjZF9tZ3I6ICAgICAgICAgICAgQSBEQ0QgbWFuYWdlciBoYW5kbGUuCisgKiAgICAgIHV1aWRfb2JqOiAgICAgICAgICAgICAgUG9pbnRlciB0byBhIGRzcF91dWlkIHRoYXQgcmVwcmVzZW50cyBhIHVuaXF1ZQorICogICAgICAgICAgICAgICAgICAgICAgICAgIERTUC9CSU9TIEJyaWRnZSBvYmplY3QuCisgKiAgICAgIG9ial90eXBlOiAgICAgICAgICAgIFRoZSB0eXBlIG9mIERTUC9CSU9TIEJyaWRnZSBvYmplY3QgdG8gYmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VkIChub2RlLCBwcm9jZXNzb3IsIGV0YykuCisgKiAgICAgIG9ial9kZWY6ICAgICAgICAgICAgUG9pbnRlciB0byBhbiBvYmplY3QgZGVmaW5pdGlvbiBzdHJ1Y3R1cmUuIEEKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiBvZiB2YXJpb3VzIHBvc3NpYmxlIERDRCBvYmplY3QgdHlwZXMuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogU3VjY2Vzcy4KKyAqICAgICAgLUVBQ0NFUzogVW5hYmxlIHRvIGFjY2Vzcy9yZWFkL3BhcnNlL2xvYWQgY29udGVudCBvZiBvYmplY3QgY29kZQorICogICAgICAgICAgICAgICBzZWN0aW9uLgorICogICAgICAtRVBFUk06ICAgICAgICAgIEdlbmVyYWwgZmFpbHVyZS4KKyAqICAgICAgLUVGQVVMVDogICAgICAgIEludmFsaWQgRENEX0hNQU5BR0VSIGhhbmRsZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgRENEIGluaXRpYWxpemVkLgorICogICAgICBvYmpfdXVpZCBpcyBub24tTlVMTC4KKyAqICAgICAgb2JqX2RlZiBpcyBub24tTlVMTC4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IGRjZF9nZXRfb2JqZWN0X2RlZihzdHJ1Y3QgZGNkX21hbmFnZXIgKmhkY2RfbWdyLAorCQkJCSAgICAgc3RydWN0IGRzcF91dWlkICpvYmpfdXVpZCwKKwkJCQkgICAgIGVudW0gZHNwX2RjZG9ianR5cGUgb2JqX3R5cGUsCisJCQkJICAgICBzdHJ1Y3QgZGNkX2dlbmVyaWNvYmogKm9ial9kZWYpOworCisvKgorICogID09PT09PT09IGRjZF9nZXRfb2JqZWN0cyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFRoaXMgZnVuY3Rpb24gZmluZHMgYWxsIERDRCBvYmplY3RzIHNwZWNpZmllZCBpbiBhIHNwZWNpYWwKKyAqICAgICAgQ09GRiBzZWN0aW9uIGNhbGxlZCAiLmRjZF9yZWdpc3RlciIsIGFuZCBmb3IgZWFjaCBvYmplY3QsCisgKiAgICAgIGNhbGwgYSAicmVnaXN0ZXIiIGZ1bmN0aW9uLiAgVGhlICJyZWdpc3RlciIgZnVuY3Rpb24gbWF5IHBlcmZvcm0KKyAqICAgICAgdmFyaW91cyBhY3Rpb25zLCBzdWNoIGFzIDEpIHJlZ2lzdGVyIG5vZGVzIGluIHRoZSBub2RlIGRhdGFiYXNlLCAyKQorICogICAgICB1bnJlZ2lzdGVyIG5vZGVzIGZyb20gdGhlIG5vZGUgZGF0YWJhc2UsIGFuZCAzKSBhZGQgb3ZlcmxheSBub2Rlcy4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoZGNkX21ncjogICAgICAgICAgICAgICAgQSBEQ0QgbWFuYWdlciBoYW5kbGUuCisgKiAgICAgIHN6X2NvZmZfcGF0aDogICAgICAgICAgIFBvaW50ZXIgdG8gbmFtZSBvZiBDT0ZGIGZpbGUgY29udGFpbmluZyBEQ0QKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cy4KKyAqICAgICAgcmVnaXN0ZXJfZnhuOiAgICAgICAgICAgQ2FsbGJhY2sgZnhuIHRvIGJlIGFwcGxpZWQgb24gZWFjaCBsb2NhdGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERDRCBvYmplY3QuCisgKiAgICAgIGhhbmRsZTogICAgICAgICAgICAgICAgIEhhbmRsZSB0byBwYXNzIHRvIGNhbGxiYWNrLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FQUNDRVM6IFVuYWJsZSB0byBhY2Nlc3MvcmVhZC9wYXJzZS9sb2FkIGNvbnRlbnQgb2Ygb2JqZWN0IGNvZGUKKyAqICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAqICAgICAgLUVGQVVMVDogICAgICAgICAgICBJbnZhbGlkIERDRF9ITUFOQUdFUiBoYW5kbGUuLgorICogIFJlcXVpcmVzOgorICogICAgICBEQ0QgaW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICBOb3RlOgorICogICAgICBEdWUgdG8gdGhlIERDRCBkYXRhYmFzZSBjb25zdHJ1Y3Rpb24sIGl0IGlzIGVzc2VudGlhbCBmb3IgYSBEQ0QtZW5hYmxlZAorICogICAgICBDT0ZGIGZpbGUgdG8gY29udGFpbiB0aGUgcmlnaHQgQ09GRiBzZWN0aW9ucywgZXNwZWNpYWxseQorICogICAgICAiLmRjZF9yZWdpc3RlciIsIHdoaWNoIGlzIHVzZWQgZm9yIGF1dG8gcmVnaXN0cmF0aW9uLgorICovCitleHRlcm4gaW50IGRjZF9nZXRfb2JqZWN0cyhzdHJ1Y3QgZGNkX21hbmFnZXIgKmhkY2RfbWdyLAorCQkJCSAgY2hhciAqc3pfY29mZl9wYXRoLAorCQkJCSAgZGNkX3JlZ2lzdGVyZnhuIHJlZ2lzdGVyX2Z4biwgdm9pZCAqaGFuZGxlKTsKKworLyoKKyAqICA9PT09PT09PSBkY2RfaW5pdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgRENELgorICogIFBhcmFtZXRlcnM6CisgKiAgUmV0dXJuczoKKyAqICAgICAgRkFMU0U6ICBJbml0aWFsaXphdGlvbiBmYWlsZWQuCisgKiAgICAgIFRSVUU6ICAgSW5pdGlhbGl6YXRpb24gc3VjY2VlZGVkLgorICogIFJlcXVpcmVzOgorICogIEVuc3VyZXM6CisgKiAgICAgIERDRCBpbml0aWFsaXplZC4KKyAqLworZXh0ZXJuIGJvb2wgZGNkX2luaXQodm9pZCk7CisKKy8qCisgKiAgPT09PT09PT0gZGNkX3JlZ2lzdGVyX29iamVjdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGEgRFNQL0JJT1MgQnJpZGdlIG9iamVjdCBpbiB0aGUgRENEIGRhdGFiYXNlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIHV1aWRfb2JqOiAgICAgICAgICBQb2ludGVyIHRvIGEgZHNwX3V1aWQgdGhhdCBpZGVudGlmaWVzIGEgRFNQL0JJT1MKKyAqICAgICAgICAgICAgICAgICAgICAgIEJyaWRnZSBvYmplY3QuCisgKiAgICAgIG9ial90eXBlOiAgICAgICAgVHlwZSBvZiBvYmplY3QuCisgKiAgICAgIHBzel9wYXRoX25hbWU6ICAgIFBhdGggdG8gdGhlIG9iamVjdCdzIENPRkYgZmlsZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVQRVJNOiAgICAgIEZhaWxlZCB0byByZWdpc3RlciBvYmplY3QuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIERDRCBpbml0aWFsaXplZC4KKyAqICAgICAgdXVpZF9vYmogYW5kIHN6UGF0aE5hbWUgYXJlIG5vbi1OVUxMIHZhbHVlcy4KKyAqICAgICAgb2JqX3R5cGUgaXMgYSB2YWxpZCB0eXBlIHZhbHVlLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgZGNkX3JlZ2lzdGVyX29iamVjdChzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqLAorCQkJCSAgICAgIGVudW0gZHNwX2RjZG9ianR5cGUgb2JqX3R5cGUsCisJCQkJICAgICAgY2hhciAqcHN6X3BhdGhfbmFtZSk7CisKKy8qCisgKiAgPT09PT09PT0gZGNkX3VucmVnaXN0ZXJfb2JqZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgVGhpcyBmdW5jdGlvbiBkZS1yZWdpc3RlcnMgYSB2YWxpZCBEU1AvQklPUyBCcmlkZ2Ugb2JqZWN0IGZyb20gdGhlIERDRAorICogICAgICBkYXRhYmFzZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICB1dWlkX29iajogICAgICBQb2ludGVyIHRvIGEgZHNwX3V1aWQgdGhhdCBpZGVudGlmaWVzIGEgRFNQL0JJT1MgQnJpZGdlCisgKiAgICAgICAgICAgICAgICAgIG9iamVjdC4KKyAqICAgICAgb2JqX3R5cGU6ICAgIFR5cGUgb2Ygb2JqZWN0LgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FUEVSTTogIFVuYWJsZSB0byBkZS1yZWdpc3RlciB0aGUgc3BlY2lmaWVkIG9iamVjdC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgRENEIGluaXRpYWxpemVkLgorICogICAgICB1dWlkX29iaiBpcyBhIG5vbi1OVUxMIHZhbHVlLgorICogICAgICBvYmpfdHlwZSBpcyBhIHZhbGlkIHR5cGUgdmFsdWUuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBkY2RfdW5yZWdpc3Rlcl9vYmplY3Qoc3RydWN0IGRzcF91dWlkICp1dWlkX29iaiwKKwkJCQkJZW51bSBkc3BfZGNkb2JqdHlwZSBvYmpfdHlwZSk7CisKKyNlbmRpZiAvKiBfREJEQ0RfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RiZGNkZGVmLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZGJkY2RkZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGFhNGI1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RiZGNkZGVmLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIGRiZGNkZGVmLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogRENEIChEU1AvQklPUyBCcmlkZ2UgQ29uZmlndXJhdGlvbiBEYXRhYmFzZSkgY29uc3RhbnRzIGFuZCB0eXBlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBEQkRDRERFRl8KKyNkZWZpbmUgREJEQ0RERUZfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL21ncnByaXYuaD4JLyogZm9yIG1ncl9wcm9jZXNzb3JleHRpbmZvICovCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBjcml0aWNhbCBlbGVtZW50cyBmb3IgdGhlIERDRCBtb2R1bGU6CisgKgorICogLSBEQ0RfUkVHS0VZIGVuYWJsZXMgRENEIGZ1bmN0aW9ucyB0byBsb2NhdGUgcmVnaXN0ZXJlZCBEQ0Qgb2JqZWN0cy4KKyAqIC0gRENEX1JFR0lTVEVSX1NFQ1RJT04gaWRlbnRpZmllcyB0aGUgQ09GRiBzZWN0aW9uIHdoZXJlIHRoZSBVVUlEIG9mCisgKiAgIHJlZ2lzdGVyZWQgRENEIG9iamVjdHMgYXJlIHN0b3JlZC4KKyAqLworI2RlZmluZSBEQ0RfUkVHS0VZICAgICAgICAgICAgICAiU29mdHdhcmVcXFRleGFzSW5zdHJ1bWVudHNcXERzcEJyaWRnZVxcRENEIgorI2RlZmluZSBEQ0RfUkVHSVNURVJfU0VDVElPTiAgICAiLmRjZF9yZWdpc3RlciIKKworI2RlZmluZSBEQ0RfTUFYUEFUSExFTkdUSCAgICAyNTUKKworLyogRENEIE1hbmFnZXIgT2JqZWN0ICovCitzdHJ1Y3QgZGNkX21hbmFnZXI7CisKK3N0cnVjdCBkY2Rfa2V5X2VsZW0geworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsJLyogTWFrZSBpdCBsaW5rZWQgdG8gYSBsaXN0ICovCisJY2hhciBuYW1lW0RDRF9NQVhQQVRITEVOR1RIXTsJLyogIE5hbWUgb2YgYSBnaXZlbiB2YWx1ZSBlbnRyeSAqLworCWNoYXIgKnBhdGg7CQkvKiAgUG9pbnRlciB0byB0aGUgYWN0dWFsIGRhdGEgKi8KK307CisKKy8qIERDRCBOb2RlIFByb3BlcnRpZXMgKi8KK3N0cnVjdCBkY2Rfbm9kZXByb3BzIHsKKwlzdHJ1Y3QgZHNwX25kYnByb3BzIG5kYl9wcm9wczsKKwl1MzIgbXNnX3NlZ2lkOworCXUzMiBtc2dfbm90aWZ5X3R5cGU7CisJY2hhciAqcHN0cl9jcmVhdGVfcGhhc2VfZnhuOworCWNoYXIgKnBzdHJfZGVsZXRlX3BoYXNlX2Z4bjsKKwljaGFyICpwc3RyX2V4ZWN1dGVfcGhhc2VfZnhuOworCWNoYXIgKnBzdHJfaV9hbGdfbmFtZTsKKworCS8qIER5bmFtaWMgbG9hZCBwcm9wZXJ0aWVzICovCisJdTE2IHVzX2xvYWRfdHlwZTsJLyogU3RhdGljLCBkeW5hbWljLCBvdmVybGF5ICovCisJdTMyIHVsX2RhdGFfbWVtX3NlZ19tYXNrOwkvKiBEYXRhIG1lbW9yeSByZXF1aXJlbWVudHMgKi8KKwl1MzIgdWxfY29kZV9tZW1fc2VnX21hc2s7CS8qIENvZGUgbWVtb3J5IHJlcXVpcmVtZW50cyAqLworfTsKKworLyogRENEIEdlbmVyaWMgT2JqZWN0IFR5cGUgKi8KK3N0cnVjdCBkY2RfZ2VuZXJpY29iaiB7CisJdW5pb24gZGNkX29iaiB7CisJCXN0cnVjdCBkY2Rfbm9kZXByb3BzIG5vZGVfb2JqOwkvKiBub2RlIG9iamVjdC4gKi8KKwkJLyogcHJvY2Vzc29yIG9iamVjdC4gKi8KKwkJc3RydWN0IGRzcF9wcm9jZXNzb3JpbmZvIHByb2NfaW5mbzsKKwkJLyogZXh0ZW5kZWQgcHJvYyBvYmplY3QgKHByaXZhdGUpICovCisJCXN0cnVjdCBtZ3JfcHJvY2Vzc29yZXh0aW5mbyBleHRfcHJvY19vYmo7CisJfSBvYmpfZGF0YTsKK307CisKKy8qIERDRCBJbnRlcm5hbCBDYWxsYmFjayBUeXBlICovCit0eXBlZGVmIGludCgqZGNkX3JlZ2lzdGVyZnhuKSAoc3RydWN0IGRzcF91dWlkICp1dWlkX29iaiwKKwkJCQkgICAgICBlbnVtIGRzcF9kY2RvYmp0eXBlIG9ial90eXBlLAorCQkJCSAgICAgIHZvaWQgKmhhbmRsZSk7CisKKyNlbmRpZiAvKiBEQkRDRERFRl8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kYmRlZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kYmRlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWYwNzVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RiZGVmcy5oCkBAIC0wLDAgKzEsNTE0IEBACisvKgorICogZGJkZWZzLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogR2xvYmFsIGRlZmluaXRpb25zIGFuZCBjb25zdGFudHMgZm9yIERTUC9CSU9TIEJyaWRnZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIERCREVGU18KKyNkZWZpbmUgREJERUZTXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9ybXNfc2guaD4JLyogVHlwZXMgc2hhcmVkIGJldHdlZW4gR1BQIGFuZCBEU1AgKi8KKworI2RlZmluZSBQR19TSVpFNEsgNDA5NgorI2RlZmluZSBQR19NQVNLKHBnX3NpemUpICh+KChwZ19zaXplKS0xKSkKKyNkZWZpbmUgUEdfQUxJR05fTE9XKGFkZHIsIHBnX3NpemUpICgoYWRkcikgJiBQR19NQVNLKHBnX3NpemUpKQorI2RlZmluZSBQR19BTElHTl9ISUdIKGFkZHIsIHBnX3NpemUpICgoKGFkZHIpKyhwZ19zaXplKS0xKSAmIFBHX01BU0socGdfc2l6ZSkpCisKKy8qIEFQSSByZXR1cm4gdmFsdWUgYW5kIGNhbGxpbmcgY29udmVudGlvbiAqLworI2RlZmluZSBEQkFQSSAgICAgICAgICAgICAgICAgICAgICAgaW50CisKKy8qIEluZmluaXRlIHRpbWUgdmFsdWUgZm9yIHRoZSB1dGltZW91dCBwYXJhbWV0ZXIgdG8gRFNQU3RyZWFtX1NlbGVjdCgpICovCisjZGVmaW5lIERTUF9GT1JFVkVSICAgICAgICAgICAgICAgICAoLTEpCisKKy8qIE1heGltdW0gbGVuZ3RoIG9mIG5vZGUgbmFtZSwgdXNlZCBpbiBkc3BfbmRicHJvcHMgKi8KKyNkZWZpbmUgRFNQX01BWE5BTUVMRU4gICAgICAgICAgICAgIDMyCisKKy8qIG5vdGlmeV90eXBlIHZhbHVlcyBmb3IgdGhlIFJlZ2lzdGVyTm90aWZ5KCkgZnVuY3Rpb25zLiAqLworI2RlZmluZSBEU1BfU0lHTkFMRVZFTlQgICAgICAgICAgICAgMHgwMDAwMDAwMQorCisvKiBUeXBlcyBvZiBldmVudHMgZm9yIHByb2Nlc3NvcnMgKi8KKyNkZWZpbmUgRFNQX1BST0NFU1NPUlNUQVRFQ0hBTkdFICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRFNQX1BST0NFU1NPUkFUVEFDSCAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRFNQX1BST0NFU1NPUkRFVEFDSCAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRFNQX1BST0NFU1NPUlJFU1RBUlQgICAgICAgIDB4MDAwMDAwMDgKKworLyogRFNQIGV4Y2VwdGlvbiBldmVudHMgKERTUC9CSU9TIGFuZCBEU1AgTU1VIGZhdWx0KSAqLworI2RlZmluZSBEU1BfTU1VRkFVTFQgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBEU1BfU1lTRVJST1IgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBEU1BfRVhDRVBUSU9OQUJPUlQgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBEU1BfUFdSRVJST1IgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBEU1BfV0RUT1ZFUkZMT1cJMHgwMDAwMDA0MAorCisvKiBJVkEgZXhjZXB0aW9uIGV2ZW50cyAoSVZBIE1NVSBmYXVsdCkgKi8KKyNkZWZpbmUgSVZBX01NVUZBVUxUICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKy8qIFR5cGVzIG9mIGV2ZW50cyBmb3Igbm9kZXMgKi8KKyNkZWZpbmUgRFNQX05PREVTVEFURUNIQU5HRSAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgRFNQX05PREVNRVNTQUdFUkVBRFkgICAgICAgIDB4MDAwMDAyMDAKKworLyogVHlwZXMgb2YgZXZlbnRzIGZvciBzdHJlYW1zICovCisjZGVmaW5lIERTUF9TVFJFQU1ET05FICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIERTUF9TVFJFQU1JT0NPTVBMRVRJT04gICAgICAweDAwMDAyMDAwCisKKy8qIEhhbmRsZSBkZWZpbml0aW9uIHJlcHJlc2VudGluZyB0aGUgR1BQIG5vZGUgaW4gRFNQTm9kZV9Db25uZWN0KCkgY2FsbHMgKi8KKyNkZWZpbmUgRFNQX0hHUFBOT0RFICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKworLyogTm9kZSBkaXJlY3Rpb25zIHVzZWQgaW4gRFNQTm9kZV9Db25uZWN0KCkgKi8KKyNkZWZpbmUgRFNQX1RPTk9ERSAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRFNQX0ZST01OT0RFICAgICAgICAgICAgICAgIDIKKworLyogRGVmaW5lIE5vZGUgTWluaW11bSBhbmQgTWF4aW11bSBQcmlvcml0aWVzICovCisjZGVmaW5lIERTUF9OT0RFX01JTl9QUklPUklUWSAgICAgICAxCisjZGVmaW5lIERTUF9OT0RFX01BWF9QUklPUklUWSAgICAgICAxNQorCisvKiBQcmUtRGVmaW5lZCBNZXNzYWdlIENvbW1hbmQgQ29kZXMgYXZhaWxhYmxlIHRvIHVzZXI6ICovCisjZGVmaW5lIERTUF9STVNVU0VSQ09ERVNUQVJUIFJNU19VU0VSCS8qIFN0YXJ0IG9mIFJNUyB1c2VyIGNtZCBjb2RlcyAqLworLyogZW5kIG9mIHVzZXIgY29kZXMgKi8KKyNkZWZpbmUgRFNQX1JNU1VTRVJDT0RFRU5EIChSTVNfVVNFUiArIFJNU19NQVhVU0VSQ09ERVMpOworLyogbXNnX2N0cmwgY29udGFpbnMgU00gYnVmZmVyIGRlc2NyaXB0aW9uICovCisjZGVmaW5lIERTUF9STVNCVUZERVNDIFJNU19CVUZERVNDCisKKy8qIFNoYXJlZCBtZW1vcnkgaWRlbnRpZmllciBmb3IgTUVNIHNlZ21lbnQgbmFtZWQgIlNITVNFRzAiICovCisjZGVmaW5lIERTUF9TSE1TRUcwICAgICAodTMyKSgtMSkKKworLyogUHJvY2Vzc29yIElEIG51bWJlcnMgKi8KKyNkZWZpbmUgRFNQX1VOSVQgICAgMAorI2RlZmluZSBJVkFfVU5JVCAgICAxCisKKyNkZWZpbmUgRFNQV09SRCAgICAgICB1bnNpZ25lZCBjaGFyCisjZGVmaW5lIERTUFdPUkRTSVpFICAgICBzaXplb2YoRFNQV09SRCkKKworLyogUG93ZXIgY29udHJvbCBlbnVtZXJhdGlvbnMgKi8KKyNkZWZpbmUgUFJPQ19QV1JDT05UUk9MICAgICAgICAgICAgIDB4ODA3MAorCisjZGVmaW5lIFBST0NfUFdSTUdUX0VOQUJMRSAgICAgICAgICAoUFJPQ19QV1JDT05UUk9MICsgMHgzKQorI2RlZmluZSBQUk9DX1BXUk1HVF9ESVNBQkxFICAgICAgICAgKFBST0NfUFdSQ09OVFJPTCArIDB4NCkKKworLyogQnJpZGdlIENvZGUgVmVyc2lvbiAqLworI2RlZmluZSBCUklER0VfVkVSU0lPTl9DT0RFICAgICAgICAgMzMzCisKKyNkZWZpbmUgICAgTUFYX1BST0ZJTEVTICAgICAxNgorCisvKiBEU1AgY2hpcCB0eXBlICovCisjZGVmaW5lIERTUFRZUEU2NAkweDk5CisKKy8qIEhhbmR5IE1hY3JvcyAqLworI2RlZmluZSBWQUxJRF9QUk9DX0VWRU5UIChEU1BfUFJPQ0VTU09SU1RBVEVDSEFOR0UgfCBEU1BfUFJPQ0VTU09SQVRUQUNIIHwgXAorCURTUF9QUk9DRVNTT1JERVRBQ0ggfCBEU1BfUFJPQ0VTU09SUkVTVEFSVCB8IERTUF9OT0RFU1RBVEVDSEFOR0UgfCBcCisJRFNQX1NUUkVBTURPTkUgfCBEU1BfU1RSRUFNSU9DT01QTEVUSU9OIHwgRFNQX01NVUZBVUxUIHwgXAorCURTUF9TWVNFUlJPUiB8IERTUF9XRFRPVkVSRkxPVyB8IERTUF9QV1JFUlJPUikKKworc3RhdGljIGlubGluZSBib29sIGlzX3ZhbGlkX3Byb2NfZXZlbnQodTMyIHgpCit7CisJcmV0dXJuICh4ID09IDAgfHwgKHggJiBWQUxJRF9QUk9DX0VWRU5UICYmICEoeCAmIH5WQUxJRF9QUk9DX0VWRU5UKSkpOworfQorCisvKiBUaGUgTm9kZSBVVUlEIHN0cnVjdHVyZSAqLworc3RydWN0IGRzcF91dWlkIHsKKwl1MzIgdWxfZGF0YTE7CisJdTE2IHVzX2RhdGEyOworCXUxNiB1c19kYXRhMzsKKwl1OCB1Y19kYXRhNDsKKwl1OCB1Y19kYXRhNTsKKwl1OCB1Y19kYXRhNls2XTsKK307CisKKy8qIERDRCB0eXBlcyAqLworZW51bSBkc3BfZGNkb2JqdHlwZSB7CisJRFNQX0RDRE5PREVUWVBFLAorCURTUF9EQ0RQUk9DRVNTT1JUWVBFLAorCURTUF9EQ0RMSUJSQVJZVFlQRSwKKwlEU1BfRENEQ1JFQVRFTElCVFlQRSwKKwlEU1BfRENERVhFQ1VURUxJQlRZUEUsCisJRFNQX0RDRERFTEVURUxJQlRZUEUsCisJLyogRFNQX0RDRE1BWE9CSlRZUEUgaXMgbWVhbnQgdG8gYmUgdGhlIGxhc3QgRENEIG9iamVjdCB0eXBlICovCisJRFNQX0RDRE1BWE9CSlRZUEUKK307CisKKy8qIFByb2Nlc3NvciBzdGF0ZXMgKi8KK2VudW0gZHNwX3Byb2NzdGF0ZSB7CisJUFJPQ19TVE9QUEVELAorCVBST0NfTE9BREVELAorCVBST0NfUlVOTklORywKKwlQUk9DX0VSUk9SCit9OworCisvKgorICogIE5vZGUgdHlwZXM6IE1lc3NhZ2Ugbm9kZSwgdGFzayBub2RlLCB4REFJUyBzb2NrZXQgbm9kZSwgYW5kCisgKiAgZGV2aWNlIG5vZGUuIF9OT0RFX0dQUCBpcyB1c2VkIHdoZW4gZGVmaW5pbmcgYSBzdHJlYW0gY29ubmVjdGlvbgorICogIGJldHdlZW4gYSB0YXNrIG9yIHNvY2tldCBub2RlIGFuZCB0aGUgR1BQLgorICoKKyAqLworZW51bSBub2RlX3R5cGUgeworCU5PREVfREVWSUNFLAorCU5PREVfVEFTSywKKwlOT0RFX0RBSVNTT0NLRVQsCisJTk9ERV9NRVNTQUdFLAorCU5PREVfR1BQCit9OworCisvKgorICogID09PT09PT09IG5vZGVfc3RhdGUgPT09PT09PT0KKyAqICBJbnRlcm5hbCBub2RlIHN0YXRlcy4KKyAqLworZW51bSBub2RlX3N0YXRlIHsKKwlOT0RFX0FMTE9DQVRFRCwKKwlOT0RFX0NSRUFURUQsCisJTk9ERV9SVU5OSU5HLAorCU5PREVfUEFVU0VELAorCU5PREVfRE9ORSwKKwlOT0RFX0NSRUFUSU5HLAorCU5PREVfU1RBUlRJTkcsCisJTk9ERV9QQVVTSU5HLAorCU5PREVfVEVSTUlOQVRJTkcsCisJTk9ERV9ERUxFVElORywKK307CisKKy8qIFN0cmVhbSBzdGF0ZXMgKi8KK2VudW0gZHNwX3N0cmVhbXN0YXRlIHsKKwlTVFJFQU1fSURMRSwKKwlTVFJFQU1fUkVBRFksCisJU1RSRUFNX1BFTkRJTkcsCisJU1RSRUFNX0RPTkUKK307CisKKy8qIFN0cmVhbSBjb25uZWN0IHR5cGVzICovCitlbnVtIGRzcF9jb25uZWN0dHlwZSB7CisJQ09OTkVDVFRZUEVfTk9ERU9VVFBVVCwKKwlDT05ORUNUVFlQRV9HUFBPVVRQVVQsCisJQ09OTkVDVFRZUEVfTk9ERUlOUFVULAorCUNPTk5FQ1RUWVBFX0dQUElOUFVUCit9OworCisvKiBTdHJlYW0gbW9kZSB0eXBlcyAqLworZW51bSBkc3Bfc3RybW1vZGUgeworCVNUUk1NT0RFX1BST0NDT1BZLAkvKiBQcm9jZXNzb3IocykgY29weSBzdHJlYW0gZGF0YSBwYXlsb2FkcyAqLworCVNUUk1NT0RFX1pFUk9DT1BZLAkvKiBTdHJtIGJ1ZmZlciBwdHJzIHN3YXBwZWQgbm8gZGF0YSBjb3BpZWQgKi8KKwlTVFJNTU9ERV9MRE1BLAkJLyogTG9jYWwgRE1BIDogT01BUCdzIFN5c3RlbS1ETUEgZGV2aWNlICovCisJU1RSTU1PREVfUkRNQQkJLyogUmVtb3RlIERNQTogT01BUCdzIERTUC1ETUEgZGV2aWNlICovCit9OworCisvKiBSZXNvdXJjZSBUeXBlcyAqLworZW51bSBkc3BfcmVzb3VyY2VpbmZvdHlwZSB7CisJRFNQX1JFU09VUkNFX0RZTkRBUkFNID0gMCwKKwlEU1BfUkVTT1VSQ0VfRFlOU0FSQU0sCisJRFNQX1JFU09VUkNFX0RZTkVYVEVSTkFMLAorCURTUF9SRVNPVVJDRV9EWU5TUkFNLAorCURTUF9SRVNPVVJDRV9QUk9DTE9BRAorfTsKKworLyogTWVtb3J5IFNlZ21lbnQgVHlwZXMgKi8KK2VudW0gZHNwX21lbXR5cGUgeworCURTUF9EWU5EQVJBTSA9IDAsCisJRFNQX0RZTlNBUkFNLAorCURTUF9EWU5FWFRFUk5BTCwKKwlEU1BfRFlOU1JBTQorfTsKKworLyogTWVtb3J5IEZsdXNoIFR5cGVzICovCitlbnVtIGRzcF9mbHVzaHR5cGUgeworCVBST0NfSU5WQUxJREFURV9NRU0gPSAwLAorCVBST0NfV1JJVEVCQUNLX01FTSwKKwlQUk9DX1dSSVRFQkFDS19JTlZBTElEQVRFX01FTSwKK307CisKKy8qIE1lbW9yeSBTZWdtZW50IFN0YXR1cyBWYWx1ZXMgKi8KK3N0cnVjdCBkc3BfbWVtc3RhdCB7CisJdTMyIHVsX3NpemU7CisJdTMyIHVsX3RvdGFsX2ZyZWVfc2l6ZTsKKwl1MzIgdWxfbGVuX21heF9mcmVlX2Jsb2NrOworCXUzMiB1bF9udW1fZnJlZV9ibG9ja3M7CisJdTMyIHVsX251bV9hbGxvY19ibG9ja3M7Cit9OworCisvKiBQcm9jZXNzb3IgTG9hZCBpbmZvcm1hdGlvbiBWYWx1ZXMgKi8KK3N0cnVjdCBkc3BfcHJvY2xvYWRzdGF0IHsKKwl1MzIgY3Vycl9sb2FkOworCXUzMiBwcmVkaWN0ZWRfbG9hZDsKKwl1MzIgY3Vycl9kc3BfZnJlcTsKKwl1MzIgcHJlZGljdGVkX2ZyZXE7Cit9OworCisvKiBBdHRyaWJ1dGVzIGZvciBTVFJNIGNvbm5lY3Rpb25zIGJldHdlZW4gbm9kZXMgKi8KK3N0cnVjdCBkc3Bfc3RybWF0dHIgeworCXUzMiBzZWdfaWQ7CQkvKiBNZW1vcnkgc2VnbWVudCBvbiBEU1AgdG8gYWxsb2NhdGUgYnVmZmVycyAqLworCXUzMiBidWZfc2l6ZTsJCS8qIEJ1ZmZlciBzaXplIChEU1Agd29yZHMpICovCisJdTMyIG51bV9idWZzOwkJLyogTnVtYmVyIG9mIGJ1ZmZlcnMgKi8KKwl1MzIgYnVmX2FsaWdubWVudDsJLyogQnVmZmVyIGFsaWdubWVudCAqLworCXUzMiB1dGltZW91dDsJCS8qIFRpbWVvdXQgZm9yIGJsb2NraW5nIFNUUk0gY2FsbHMgKi8KKwllbnVtIGRzcF9zdHJtbW9kZSBzdHJtX21vZGU7CS8qIG1vZGUgb2Ygc3RyZWFtIHdoZW4gb3BlbmVkICovCisJLyogRE1BIGNobmwgaWQgaWYgZHNwX3N0cm1tb2RlIGlzIExETUEgb3IgUkRNQSAqLworCXUzMiB1ZG1hX2NobmxfaWQ7CisJdTMyIHVkbWFfcHJpb3JpdHk7CS8qIERNQSBjaGFubmVsIHByaW9yaXR5IDA9bG93ZXN0LCA+MD1oaWdoICovCit9OworCisvKiBUaGUgZHNwX2NiZGF0YSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBkc3BfY2JkYXRhIHsKKwl1MzIgY2JfZGF0YTsKKwl1OCBub2RlX2RhdGFbMV07Cit9OworCisvKiBUaGUgZHNwX21zZyBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBkc3BfbXNnIHsKKwl1MzIgZHdfY21kOworCXUzMiBkd19hcmcxOworCXUzMiBkd19hcmcyOworfTsKKworLyogVGhlIGRzcF9yZXNvdXJjZXJlcW10cyBzdHJ1Y3R1cmUgZm9yIG5vZGUncyByZXNvdXJjZSByZXF1aXJlbWVudHMgKi8KK3N0cnVjdCBkc3BfcmVzb3VyY2VyZXFtdHMgeworCXUzMiBjYl9zdHJ1Y3Q7CisJdTMyIHN0YXRpY19kYXRhX3NpemU7CisJdTMyIGdsb2JhbF9kYXRhX3NpemU7CisJdTMyIHByb2dyYW1fbWVtX3NpemU7CisJdTMyIHV3Y19leGVjdXRpb25fdGltZTsKKwl1MzIgdXdjX3BlcmlvZDsKKwl1MzIgdXdjX2RlYWRsaW5lOworCXUzMiBhdmdfZXhlY3Rpb25fdGltZTsKKwl1MzIgbWluaW11bV9wZXJpb2Q7Cit9OworCisvKgorICogVGhlIGRzcF9zdHJlYW1jb25uZWN0IHN0cnVjdHVyZSBkZXNjcmliZXMgYSBzdHJlYW0gY29ubmVjdGlvbgorICogYmV0d2VlbiB0d28gbm9kZXMsIG9yIGJldHdlZW4gYSBub2RlIGFuZCB0aGUgR1BQCisgKi8KK3N0cnVjdCBkc3Bfc3RyZWFtY29ubmVjdCB7CisJdTMyIGNiX3N0cnVjdDsKKwllbnVtIGRzcF9jb25uZWN0dHlwZSBjb25uZWN0X3R5cGU7CisJdTMyIHRoaXNfbm9kZV9zdHJlYW1faW5kZXg7CisJdm9pZCAqY29ubmVjdGVkX25vZGU7CisJc3RydWN0IGRzcF91dWlkIHVpX2Nvbm5lY3RlZF9ub2RlX2lkOworCXUzMiBjb25uZWN0ZWRfbm9kZV9zdHJlYW1faW5kZXg7Cit9OworCitzdHJ1Y3QgZHNwX25vZGVwcm9mcyB7CisJdTMyIHVsX2hlYXBfc2l6ZTsKK307CisKKy8qIFRoZSBkc3BfbmRicHJvcHMgc3RydWN0dXJlIHJlcG9ydHMgdGhlIGF0dHJpYnV0ZXMgb2YgYSBub2RlICovCitzdHJ1Y3QgZHNwX25kYnByb3BzIHsKKwl1MzIgY2Jfc3RydWN0OworCXN0cnVjdCBkc3BfdXVpZCB1aV9ub2RlX2lkOworCWNoYXIgYWNfbmFtZVtEU1BfTUFYTkFNRUxFTl07CisJZW51bSBub2RlX3R5cGUgbnR5cGU7CisJdTMyIGNhY2hlX29uX2dwcDsKKwlzdHJ1Y3QgZHNwX3Jlc291cmNlcmVxbXRzIGRzcF9yZXNvdXJjZV9yZXFtdHM7CisJczMyIHByaW87CisJdTMyIHN0YWNrX3NpemU7CisJdTMyIHN5c19zdGFja19zaXplOworCXUzMiBzdGFja19zZWc7CisJdTMyIG1lc3NhZ2VfZGVwdGg7CisJdTMyIG51bV9pbnB1dF9zdHJlYW1zOworCXUzMiBudW1fb3V0cHV0X3N0cmVhbXM7CisJdTMyIHV0aW1lb3V0OworCXUzMiBjb3VudF9wcm9maWxlczsJLyogTnVtYmVyIG9mIHN1cHBvcnRlZCBwcm9maWxlcyAqLworCS8qIEFycmF5IG9mIHByb2ZpbGVzICovCisJc3RydWN0IGRzcF9ub2RlcHJvZnMgbm9kZV9wcm9maWxlc1tNQVhfUFJPRklMRVNdOworCXUzMiBzdGFja19zZWdfbmFtZTsJLyogU3RhY2sgU2VnbWVudCBOYW1lICovCit9OworCisJLyogVGhlIGRzcF9ub2RlYXR0cmluIHN0cnVjdHVyZSBkZXNjcmliZXMgdGhlIGF0dHJpYnV0ZXMgb2YgYQorCSAqIG5vZGUgY2xpZW50ICovCitzdHJ1Y3QgZHNwX25vZGVhdHRyaW4geworCXUzMiBjYl9zdHJ1Y3Q7CisJczMyIHByaW87CisJdTMyIHV0aW1lb3V0OworCXUzMiBwcm9maWxlX2lkOworCS8qIFJlc2VydmVkLCBmb3IgQnJpZGdlIEludGVybmFsIHVzZSBvbmx5ICovCisJdTMyIGhlYXBfc2l6ZTsKKwl2b2lkICpwZ3BwX3ZpcnRfYWRkcjsJLyogUmVzZXJ2ZWQsIGZvciBCcmlkZ2UgSW50ZXJuYWwgdXNlIG9ubHkgKi8KK307CisKKwkvKiBUaGUgZHNwX25vZGVpbmZvIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHJldHJpZXZlIGluZm9ybWF0aW9uCisJICogYWJvdXQgYSBub2RlICovCitzdHJ1Y3QgZHNwX25vZGVpbmZvIHsKKwl1MzIgY2Jfc3RydWN0OworCXN0cnVjdCBkc3BfbmRicHJvcHMgbmJfbm9kZV9kYXRhYmFzZV9wcm9wczsKKwl1MzIgZXhlY3V0aW9uX3ByaW9yaXR5OworCWVudW0gbm9kZV9zdGF0ZSBuc19leGVjdXRpb25fc3RhdGU7CisJdm9pZCAqZGV2aWNlX293bmVyOworCXUzMiBudW1iZXJfc3RyZWFtczsKKwlzdHJ1Y3QgZHNwX3N0cmVhbWNvbm5lY3Qgc2Nfc3RyZWFtX2Nvbm5lY3Rpb25bMTZdOworCXUzMiBub2RlX2VudjsKK307CisKKwkvKiBUaGUgZHNwX25vZGVhdHRyIHN0cnVjdHVyZSBkZXNjcmliZXMgdGhlIGF0dHJpYnV0ZXMgb2YgYSBub2RlICovCitzdHJ1Y3QgZHNwX25vZGVhdHRyIHsKKwl1MzIgY2Jfc3RydWN0OworCXN0cnVjdCBkc3Bfbm9kZWF0dHJpbiBpbl9ub2RlX2F0dHJfaW47CisJdTMyIG5vZGVfYXR0cl9pbnB1dHM7CisJdTMyIG5vZGVfYXR0cl9vdXRwdXRzOworCXN0cnVjdCBkc3Bfbm9kZWluZm8gbm9kZV9pbmZvOworfTsKKworLyoKKyAqICBOb3RpZmljYXRpb24gdHlwZTogZWl0aGVyIHRoZSBuYW1lIG9mIGFuIG9wZW5lZCBldmVudCwgb3IgYW4gZXZlbnQgb3IKKyAqICB3aW5kb3cgaGFuZGxlLgorICovCitzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbiB7CisJY2hhciAqcHNfbmFtZTsKKwl2b2lkICpoYW5kbGU7Cit9OworCisvKiBUaGUgZHNwX3Byb2Nlc3NvcmF0dHJpbiBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBhdHRyaWJ1dGVzIG9mIGEgcHJvY2Vzc29yICovCitzdHJ1Y3QgZHNwX3Byb2Nlc3NvcmF0dHJpbiB7CisJdTMyIGNiX3N0cnVjdDsKKwl1MzIgdXRpbWVvdXQ7Cit9OworLyoKKyAqIFRoZSBkc3BfcHJvY2Vzc29yaW5mbyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGJhc2ljIGNhcGFiaWxpdGllcyBvZiBhCisgKiBEU1AgcHJvY2Vzc29yCisgKi8KK3N0cnVjdCBkc3BfcHJvY2Vzc29yaW5mbyB7CisJdTMyIGNiX3N0cnVjdDsKKwlpbnQgcHJvY2Vzc29yX2ZhbWlseTsKKwlpbnQgcHJvY2Vzc29yX3R5cGU7CisJdTMyIGNsb2NrX3JhdGU7CisJdTMyIHVsX2ludGVybmFsX21lbV9zaXplOworCXUzMiB1bF9leHRlcm5hbF9tZW1fc2l6ZTsKKwl1MzIgcHJvY2Vzc29yX2lkOworCWludCB0eV9ydW5uaW5nX3J0b3M7CisJczMyIG5vZGVfbWluX3ByaW9yaXR5OworCXMzMiBub2RlX21heF9wcmlvcml0eTsKK307CisKKy8qIEVycm9yIGluZm9ybWF0aW9uIG9mIGxhc3QgRFNQIGV4Y2VwdGlvbiBzaWduYWxsZWQgdG8gdGhlIEdQUCAqLworc3RydWN0IGRzcF9lcnJvcmluZm8geworCXUzMiBkd19lcnJfbWFzazsKKwl1MzIgZHdfdmFsMTsKKwl1MzIgZHdfdmFsMjsKKwl1MzIgZHdfdmFsMzsKK307CisKKy8qIFRoZSBkc3BfcHJvY2Vzc29yc3RhdGUgc3RydWN0dXJlIGRlc2NyaWJlcyB0aGUgc3RhdGUgb2YgYSBEU1AgcHJvY2Vzc29yICovCitzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0YXRlIHsKKwl1MzIgY2Jfc3RydWN0OworCWVudW0gZHNwX3Byb2NzdGF0ZSBwcm9jX3N0YXRlOworfTsKKworLyoKKyAqIFRoZSBkc3BfcmVzb3VyY2VpbmZvIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IGEKKyAqIHByb2Nlc3NvcidzIHJlc291cmNlcworICovCitzdHJ1Y3QgZHNwX3Jlc291cmNlaW5mbyB7CisJdTMyIGNiX3N0cnVjdDsKKwllbnVtIGRzcF9yZXNvdXJjZWluZm90eXBlIHJlc291cmNlX3R5cGU7CisJdW5pb24geworCQl1MzIgdWxfcmVzb3VyY2U7CisJCXN0cnVjdCBkc3BfbWVtc3RhdCBtZW1fc3RhdDsKKwkJc3RydWN0IGRzcF9wcm9jbG9hZHN0YXQgcHJvY19sb2FkX3N0YXQ7CisJfSByZXN1bHQ7Cit9OworCisvKgorICogVGhlIGRzcF9zdHJlYW1hdHRyaW4gc3RydWN0dXJlIGRlc2NyaWJlcyB0aGUgYXR0cmlidXRlcyBvZiBhIHN0cmVhbSwKKyAqIGluY2x1ZGluZyBzZWdtZW50IGFuZCBhbGlnbm1lbnQgb2YgZGF0YSBidWZmZXJzIGFsbG9jYXRlZCB3aXRoCisgKiBEU1BTdHJlYW1fQWxsb2NhdGVCdWZmZXJzKCksIGlmIGFwcGxpY2FibGUKKyAqLworc3RydWN0IGRzcF9zdHJlYW1hdHRyaW4geworCXUzMiBjYl9zdHJ1Y3Q7CisJdTMyIHV0aW1lb3V0OworCXUzMiBzZWdtZW50X2lkOworCXUzMiBidWZfYWxpZ25tZW50OworCXUzMiBudW1fYnVmczsKKwllbnVtIGRzcF9zdHJtbW9kZSBzdHJtX21vZGU7CisJdTMyIHVkbWFfY2hubF9pZDsKKwl1MzIgdWRtYV9wcmlvcml0eTsKK307CisKKy8qIFRoZSBkc3BfYnVmZmVyYXR0ciBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBhdHRyaWJ1dGVzIG9mIGEgZGF0YSBidWZmZXIgKi8KK3N0cnVjdCBkc3BfYnVmZmVyYXR0ciB7CisJdTMyIGNiX3N0cnVjdDsKKwl1MzIgc2VnbWVudF9pZDsKKwl1MzIgYnVmX2FsaWdubWVudDsKK307CisKKy8qCisgKiAgVGhlIGRzcF9zdHJlYW1pbmZvIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHJldHJpZXZlIGluZm9ybWF0aW9uCisgKiAgYWJvdXQgYSBzdHJlYW0uCisgKi8KK3N0cnVjdCBkc3Bfc3RyZWFtaW5mbyB7CisJdTMyIGNiX3N0cnVjdDsKKwl1MzIgbnVtYmVyX2J1ZnNfYWxsb3dlZDsKKwl1MzIgbnVtYmVyX2J1ZnNfaW5fc3RyZWFtOworCXUzMiB1bF9udW1iZXJfYnl0ZXM7CisJdm9pZCAqc3luY19vYmplY3RfaGFuZGxlOworCWVudW0gZHNwX3N0cmVhbXN0YXRlIHNzX3N0cmVhbV9zdGF0ZTsKK307CisKKy8qIERNTSBNQVAgYXR0cmlidXRlcworSXQgaXMgYSBiaXQgbWFzayB3aXRoIGVhY2ggYml0IHZhbHVlIGluZGljYXRpbmcgYSBzcGVjaWZpYyBhdHRyaWJ1dGUKK2JpdCAwIC0gR1BQIGFkZHJlc3MgdHlwZSAodXNlciB2aXJ0dWFsPTAsIHBoeXNpY2FsPTEpCitiaXQgMSAtIE1NVSBFbmRpYW5pc20gKEJpZyBFbmRpYW49MSwgTGl0dGxlIEVuZGlhbj0wKQorYml0IDIgLSBNTVUgbWl4ZWQgcGFnZSBhdHRyaWJ1dGUgKE1peGVkLyBDUFVFUz0xLCBUTEJFUyA9MCkKK2JpdCAzIC0gTU1VIGVsZW1lbnQgc2l6ZSA9IDhiaXQgKHZhbGlkIG9ubHkgZm9yIG5vbiBtaXhlZCBwYWdlIGVudHJpZXMpCitiaXQgNCAtIE1NVSBlbGVtZW50IHNpemUgPSAxNmJpdCAodmFsaWQgb25seSBmb3Igbm9uIG1peGVkIHBhZ2UgZW50cmllcykKK2JpdCA1IC0gTU1VIGVsZW1lbnQgc2l6ZSA9IDMyYml0ICh2YWxpZCBvbmx5IGZvciBub24gbWl4ZWQgcGFnZSBlbnRyaWVzKQorYml0IDYgLSBNTVUgZWxlbWVudCBzaXplID0gNjRiaXQgKHZhbGlkIG9ubHkgZm9yIG5vbiBtaXhlZCBwYWdlIGVudHJpZXMpCisKK2JpdCAxNCAtIElucHV0IChyZWFkIG9ubHkpIGJ1ZmZlcgorYml0IDE1IC0gT3V0cHV0ICh3cml0ZWFibGUpIGJ1ZmZlcgorKi8KKworLyogVHlwZXMgb2YgbWFwcGluZyBhdHRyaWJ1dGVzICovCisKKy8qIE1QVSBhZGRyZXNzIGlzIHZpcnR1YWwgYW5kIG5lZWRzIHRvIGJlIHRyYW5zbGF0ZWQgdG8gcGh5c2ljYWwgYWRkciAqLworI2RlZmluZSBEU1BfTUFQVklSVFVBTEFERFIgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBEU1BfTUFQUEhZU0lDQUxBRERSICAgICAgICAgMHgwMDAwMDAwMQorCisvKiBNYXBwZWQgZGF0YSBpcyBiaWcgZW5kaWFuICovCisjZGVmaW5lIERTUF9NQVBCSUdFTkRJQU4gICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIERTUF9NQVBMSVRUTEVFTkRJQU4gICAgICAgICAweDAwMDAwMDAwCisKKy8qIEVsZW1lbnQgc2l6ZSBpcyBiYXNlZCBvbiBEU1Agci93IGFjY2VzcyBzaXplICovCisjZGVmaW5lIERTUF9NQVBNSVhFREVMRU1TSVpFICAgICAgICAweDAwMDAwMDA0CisKKy8qCisgKiBFbGVtZW50IHNpemUgZm9yIE1NVSBtYXBwaW5nICg4LCAxNiwgMzIsIG9yIDY0IGJpdCkKKyAqIElnbm9yZWQgaWYgRFNQX01BUE1JWEVERUxFTVNJWkUgZW5hYmxlZAorICovCisjZGVmaW5lIERTUF9NQVBFTEVNU0laRTggICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIERTUF9NQVBFTEVNU0laRTE2ICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIERTUF9NQVBFTEVNU0laRTMyICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIERTUF9NQVBFTEVNU0laRTY0ICAgICAgICAgICAweDAwMDAwMDQwCisKKyNkZWZpbmUgRFNQX01BUFZNQUxMT0NBRERSICAgICAgICAgMHgwMDAwMDA4MAorCisjZGVmaW5lIERTUF9NQVBET05PVExPQ0sJICAgMHgwMDAwMDEwMAorCisjZGVmaW5lIERTUF9NQVBfRElSX01BU0sJCTB4M0ZGRgorCisjZGVmaW5lIEdFTV9DQUNIRV9MSU5FX1NJWkUgICAgIDEyOAorI2RlZmluZSBHRU1fTDFQX1BSRUZFVENIX1NJWkUgICAxMjgKKworLyoKKyAqIERlZmluaXRpb25zIGZyb20gZGJyZWcuaAorICovCisKKyNkZWZpbmUgRFNQUFJPQ1RZUEVfQzY0CQk2NDEwCisjZGVmaW5lIElWQVBST0NUWVBFX0FSTTcJNDcwCisKKyNkZWZpbmUgUkVHX01HUl9PQkpFQ1QJMQorI2RlZmluZSBSRUdfRFJWX09CSkVDVAkyCisKKy8qIHJlZ2lzdHJ5ICovCisjZGVmaW5lIERSVk9CSkVDVAkiRHJ2T2JqZWN0IgorI2RlZmluZSBNR1JPQkpFQ1QJIk1nck9iamVjdCIKKworLyogTWF4IHJlZ2lzdHJ5IHBhdGggbGVuZ3RoLiBBbHNvIHRoZSBtYXggcmVnaXN0cnkgdmFsdWUgbGVuZ3RoLiAqLworI2RlZmluZSBNQVhSRUdQQVRITEVOR1RICTI1NQorCisjZW5kaWYgLyogREJERUZTXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RibGRlZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kYmxkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY0ZmI5OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kYmxkZWZzLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBkYmxkZWZzLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBEQkxERUZTXworI2RlZmluZSBEQkxERUZTXworCisvKgorICogIEJpdCBtYXNrcyBmb3IgZGJsX2ZsYWdzLgorICovCisjZGVmaW5lIERCTF9OT0xPQUQgICAweDAJLyogRG9uJ3QgbG9hZCBzeW1ib2xzLCBjb2RlLCBvciBkYXRhICovCisjZGVmaW5lIERCTF9TWU1CICAgICAweDEJLyogbG9hZCBzeW1ib2xzICovCisjZGVmaW5lIERCTF9DT0RFICAgICAweDIJLyogbG9hZCBjb2RlICovCisjZGVmaW5lIERCTF9EQVRBICAgICAweDQJLyogbG9hZCBkYXRhICovCisjZGVmaW5lIERCTF9EWU5BTUlDICAweDgJLyogZHluYW1pYyBsb2FkICovCisjZGVmaW5lIERCTF9CU1MgICAgICAweDIwCS8qIFVuaXRpYWxpemVkIHNlY3Rpb24gKi8KKworI2RlZmluZSBEQkxfTUFYUEFUSExFTkdUSCAgICAgICAyNTUKKworLyoKKyAqICA9PT09PT09PSBkYmxfZmxhZ3MgPT09PT09PT0KKyAqICBTcGVjaWZpZXMgd2hldGhlciB0byBsb2FkIGNvZGUsIGRhdGEsIG9yIHN5bWJvbHMKKyAqLwordHlwZWRlZiBzMzIgZGJsX2ZsYWdzOworCisvKgorICogID09PT09PT09IGRibF9zZWN0X2luZm8gPT09PT09PT0KKyAqICBGb3IgY29sbGVjdGluZyBpbmZvIG9uIG92ZXJsYXkgc2VjdGlvbnMKKyAqLworc3RydWN0IGRibF9zZWN0X2luZm8geworCWNvbnN0IGNoYXIgKm5hbWU7CS8qIG5hbWUgb2Ygc2VjdGlvbiAqLworCXUzMiBzZWN0X3J1bl9hZGRyOwkvKiBydW4gYWRkcmVzcyBvZiBzZWN0aW9uICovCisJdTMyIHNlY3RfbG9hZF9hZGRyOwkvKiBsb2FkIGFkZHJlc3Mgb2Ygc2VjdGlvbiAqLworCXUzMiBzaXplOwkJLyogc2l6ZSBvZiBzZWN0aW9uICh0YXJnZXQgTUFVcykgKi8KKwlkYmxfZmxhZ3MgdHlwZTsJCS8qIENvZGUsIGRhdGEsIG9yIEJTUyAqLworfTsKKworLyoKKyAqICA9PT09PT09PSBkYmxfc3ltYm9sID09PT09PT09CisgKiAgKE5lZWRlZCBmb3IgZHluYW1pYyBsb2FkIGxpYnJhcnkpCisgKi8KK3N0cnVjdCBkYmxfc3ltYm9sIHsKKwl1MzIgdmFsdWU7Cit9OworCisvKgorICogID09PT09PT09IGRibF9hbGxvY19meG4gPT09PT09PT0KKyAqICBBbGxvY2F0ZSBtZW1vcnkgZnVuY3Rpb24uICBBbGxvY2F0ZSBvciByZXNlcnZlIChpZiByZXNlcnZlZCA9PSBUUlVFKQorICogICJzaXplIiBieXRlcyBvZiBtZW1vcnkgZnJvbSBzZWdtZW50ICJzcGFjZSIgYW5kIHJldHVybiB0aGUgYWRkcmVzcyBpbgorICogICpkc3BfYWRkcmVzcyAob3Igc3RhcnRpbmcgYXQgKmRzcF9hZGRyZXNzIGlmIHJlc2VydmUgPT0gVFJVRSkuIFJldHVybnMgMCBvbgorICogIHN1Y2Nlc3MsIG9yIGFuIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLwordHlwZWRlZiBzMzIoKmRibF9hbGxvY19meG4pICh2b2lkICpoZGwsIHMzMiBzcGFjZSwgdTMyIHNpemUsIHUzMiBhbGlnbiwKKwkJCSAgICAgdTMyICpkc3BfYWRkcmVzcywgczMyIHNlZ19pZCwgczMyIHJlcSwKKwkJCSAgICAgYm9vbCByZXNlcnZlZCk7CisKKy8qCisgKiAgPT09PT09PT0gZGJsX2ZyZWVfZnhuID09PT09PT09CisgKiAgRnJlZSBtZW1vcnkgZnVuY3Rpb24uICBGcmVlLCBvciB1bnJlc2VydmUgKGlmIHJlc2VydmVkID09IFRSVUUpICJzaXplIgorICogIGJ5dGVzIG9mIG1lbW9yeSBmcm9tIHNlZ21lbnQgInNwYWNlIgorICovCit0eXBlZGVmIGJvb2woKmRibF9mcmVlX2Z4bikgKHZvaWQgKmhkbCwgdTMyIGFkZHIsIHMzMiBzcGFjZSwgdTMyIHNpemUsCisJCQkgICAgIGJvb2wgcmVzZXJ2ZWQpOworCisvKgorICogID09PT09PT09IGRibF9sb2dfd3JpdGVfZnhuID09PT09PT09CisgKiAgRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHdyaXRpbmcgZGF0YSBmcm9tIGEgc2VjdGlvbiwgdG8gbG9nIHRoZSBpbmZvLgorICogIENhbiBiZSBOVUxMIGlmIG5vIGxvZ2dpbmcgaXMgcmVxdWlyZWQuCisgKi8KK3R5cGVkZWYgaW50KCpkYmxfbG9nX3dyaXRlX2Z4bikgKHZvaWQgKmhhbmRsZSwKKwkJCQkJc3RydWN0IGRibF9zZWN0X2luZm8gKnNlY3QsIHUzMiBhZGRyLAorCQkJCQl1MzIgYnl0ZXMpOworCisvKgorICogID09PT09PT09IGRibF9zeW1fbG9va3VwID09PT09PT09CisgKiAgU3ltYm9sIGxvb2t1cCBmdW5jdGlvbiAtIEZpbmQgdGhlIHN5bWJvbCBuYW1lIGFuZCByZXR1cm4gaXRzIHZhbHVlLgorICoKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoYW5kbGUgICAgICAgICAgLSBPcGFxdWUgaGFuZGxlCisgKiAgICAgIHBhcmcgICAgICAgICAgICAtIE9wYXF1ZSBhcmd1bWVudC4KKyAqICAgICAgbmFtZSAgICAgICAgICAgIC0gTmFtZSBvZiBzeW1ib2wgdG8gbG9va3VwLgorICogICAgICBzeW0gICAgICAgICAgICAgLSBMb2NhdGlvbiB0byBzdG9yZSBhZGRyZXNzIG9mIHN5bWJvbCBzdHJ1Y3R1cmUuCisgKgorICogIFJldHVybnM6CisgKiAgICAgIFRSVUU6ICAgICAgICAgICBTdWNjZXNzIChzeW1ib2wgd2FzIGZvdW5kKS4KKyAqICAgICAgRkFMU0U6ICAgICAgICAgIEZhaWxlZCB0byBmaW5kIHN5bWJvbC4KKyAqLwordHlwZWRlZiBib29sKCpkYmxfc3ltX2xvb2t1cCkgKHZvaWQgKmhhbmRsZSwgdm9pZCAqcGFyZywgdm9pZCAqcm1tX2hhbmRsZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZGJsX3N5bWJvbCAqKiBzeW0pOworCisvKgorICogID09PT09PT09IGRibF93cml0ZV9meG4gPT09PT09PT0KKyAqICBXcml0ZSBtZW1vcnkgZnVuY3Rpb24uICBXcml0ZSAibiIgSE9TVCBieXRlcyBvZiBtZW1vcnkgdG8gc2VnbWVudCAibXR5cGUiCisgKiAgc3RhcnRpbmcgYXQgYWRkcmVzcyAiZHNwX2FkZHJlc3MiIGZyb20gdGhlIGJ1ZmZlciAiYnVmIi4gIFRoZSBidWZmZXIgaXMKKyAqICBmb3JtYXR0ZWQgYXMgYW4gYXJyYXkgb2Ygd29yZHMgYXBwcm9wcmlhdGUgZm9yIHRoZSBEU1AuCisgKi8KK3R5cGVkZWYgczMyKCpkYmxfd3JpdGVfZnhuKSAodm9pZCAqaGRsLCB1MzIgZHNwX2FkZHJlc3MsIHZvaWQgKmJ1ZiwKKwkJCSAgICAgdTMyIG4sIHMzMiBtdHlwZSk7CisKKy8qCisgKiAgPT09PT09PT0gZGJsX2F0dHJzID09PT09PT09CisgKi8KK3N0cnVjdCBkYmxfYXR0cnMgeworCWRibF9hbGxvY19meG4gYWxsb2M7CisJZGJsX2ZyZWVfZnhuIGZyZWU7CisJdm9pZCAqcm1tX2hhbmRsZTsJLyogSGFuZGxlIHRvIHBhc3MgdG8gYWxsb2MsIGZyZWUgZnVuY3Rpb25zICovCisJZGJsX3dyaXRlX2Z4biB3cml0ZTsKKwl2b2lkICppbnB1dF9wYXJhbXM7CS8qIEhhbmRsZSB0byBwYXNzIHRvIHdyaXRlLCBjaW5pdCBmdW5jdGlvbiAqLworCisJZGJsX2xvZ193cml0ZV9meG4gbG9nX3dyaXRlOworCXZvaWQgKmxvZ193cml0ZV9oYW5kbGU7CisKKwkvKiBTeW1ib2wgbWF0Y2hpbmcgZnVuY3Rpb24gYW5kIGhhbmRsZSB0byBwYXNzIHRvIGl0ICovCisJZGJsX3N5bV9sb29rdXAgc3ltX2xvb2t1cDsKKwl2b2lkICpzeW1faGFuZGxlOworCXZvaWQgKnN5bV9hcmc7CisKKwkvKgorCSAqICBUaGVzZSBmaWxlIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgc2hvdWxkIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUKKwkgKiAgIkMiIHJ1biB0aW1lIGxpYnJhcnkgZnVuY3Rpb25zIG9mIHRoZSBzYW1lIG5hbWUuCisJICovCisJIHMzMigqZnJlYWQpICh2b2lkICosIHNpemVfdCwgc2l6ZV90LCB2b2lkICopOworCSBzMzIoKmZzZWVrKSAodm9pZCAqLCBsb25nLCBpbnQpOworCSBzMzIoKmZ0ZWxsKSAodm9pZCAqKTsKKwkgczMyKCpmY2xvc2UpICh2b2lkICopOworCXZvaWQgKigqZm9wZW4pIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7Cit9OworCisjZW5kaWYgLyogREJMREVGU18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kYmxsLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZGJsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMTg2NzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZGJsbC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBkYmxsLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogIERTUC9CSU9TIEJyaWRnZSBEeW5hbWljIGxvYWQgbGlicmFyeSBtb2R1bGUgaW50ZXJmYWNlLiBGdW5jdGlvbiBoZWFkZXIKKyAqICBjb21tZW50cyBhcmUgaW4gdGhlIGZpbGUgZGJsbGRlZnMuaC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIERCTExfCisjZGVmaW5lIERCTExfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RibGxkZWZzLmg+CisKK2V4dGVybiBib29sIHN5bWJvbHNfcmVsb2FkZWQ7CisKK2V4dGVybiB2b2lkIGRibGxfY2xvc2Uoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKnpsX2xpYik7CitleHRlcm4gaW50IGRibGxfY3JlYXRlKHN0cnVjdCBkYmxsX3Rhcl9vYmogKip0YXJnZXRfb2JqLAorCQkJICAgICAgc3RydWN0IGRibGxfYXR0cnMgKnBhdHRycyk7CitleHRlcm4gdm9pZCBkYmxsX2RlbGV0ZShzdHJ1Y3QgZGJsbF90YXJfb2JqICp0YXJnZXQpOworZXh0ZXJuIHZvaWQgZGJsbF9leGl0KHZvaWQpOworZXh0ZXJuIGJvb2wgZGJsbF9nZXRfYWRkcihzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqemxfbGliLCBjaGFyICpuYW1lLAorCQkJICBzdHJ1Y3QgZGJsbF9zeW1fdmFsICoqc3ltX3ZhbCk7CitleHRlcm4gdm9pZCBkYmxsX2dldF9hdHRycyhzdHJ1Y3QgZGJsbF90YXJfb2JqICp0YXJnZXQsCisJCQkgICBzdHJ1Y3QgZGJsbF9hdHRycyAqcGF0dHJzKTsKK2V4dGVybiBib29sIGRibGxfZ2V0X2NfYWRkcihzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqemxfbGliLCBjaGFyICpuYW1lLAorCQkJICAgIHN0cnVjdCBkYmxsX3N5bV92YWwgKipzeW1fdmFsKTsKK2V4dGVybiBpbnQgZGJsbF9nZXRfc2VjdChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliLCBjaGFyICpuYW1lLAorCQkJCXUzMiAqcGFkZHIsIHUzMiAqcHNpemUpOworZXh0ZXJuIGJvb2wgZGJsbF9pbml0KHZvaWQpOworZXh0ZXJuIGludCBkYmxsX2xvYWQoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYiwKKwkJCSAgICBkYmxsX2ZsYWdzIGZsYWdzLAorCQkJICAgIHN0cnVjdCBkYmxsX2F0dHJzICphdHRycywgdTMyICogZW50cnkpOworZXh0ZXJuIGludCBkYmxsX2xvYWRfc2VjdChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqemxfbGliLAorCQkJCSBjaGFyICpzZWNfbmFtZSwgc3RydWN0IGRibGxfYXR0cnMgKmF0dHJzKTsKK2V4dGVybiBpbnQgZGJsbF9vcGVuKHN0cnVjdCBkYmxsX3Rhcl9vYmogKnRhcmdldCwgY2hhciAqZmlsZSwKKwkJCSAgICBkYmxsX2ZsYWdzIGZsYWdzLAorCQkgICAgICAgc3RydWN0IGRibGxfbGlicmFyeV9vYmogKipsaWJfb2JqKTsKK2V4dGVybiBpbnQgZGJsbF9yZWFkX3NlY3Qoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYiwKKwkJCQkgY2hhciAqbmFtZSwgY2hhciAqYnVmLCB1MzIgc2l6ZSk7CitleHRlcm4gdm9pZCBkYmxsX3NldF9hdHRycyhzdHJ1Y3QgZGJsbF90YXJfb2JqICp0YXJnZXQsCisJCQkgICBzdHJ1Y3QgZGJsbF9hdHRycyAqcGF0dHJzKTsKK2V4dGVybiB2b2lkIGRibGxfdW5sb2FkKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWIsIHN0cnVjdCBkYmxsX2F0dHJzICphdHRycyk7CitleHRlcm4gaW50IGRibGxfdW5sb2FkX3NlY3Qoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYiwKKwkJCQkgICBjaGFyICpzZWN0X25hbWUsIHN0cnVjdCBkYmxsX2F0dHJzICphdHRycyk7CisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0JBQ0tUUkFDRQorYm9vbCBkYmxsX2ZpbmRfZHNwX3N5bWJvbChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqemxfbGliLCB1MzIgYWRkcmVzcywKKwkJdTMyIG9mZnNldF9yYW5nZSwgdTMyICpzeW1fYWRkcl9vdXRwdXQsIGNoYXIgKm5hbWVfb3V0cHV0KTsKKyNlbmRpZgorCisjZW5kaWYgLyogREJMTF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kYmxsZGVmcy5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RibGxkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJiNGZkYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kYmxsZGVmcy5oCkBAIC0wLDAgKzEsNDk2IEBACisvKgorICogZGJsbGRlZnMuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIERCTExERUZTXworI2RlZmluZSBEQkxMREVGU18KKworLyoKKyAqICBCaXQgbWFza3MgZm9yIGRibF9mbGFncy4KKyAqLworI2RlZmluZSBEQkxMX05PTE9BRCAgIDB4MAkvKiBEb24ndCBsb2FkIHN5bWJvbHMsIGNvZGUsIG9yIGRhdGEgKi8KKyNkZWZpbmUgREJMTF9TWU1CICAgICAweDEJLyogbG9hZCBzeW1ib2xzICovCisjZGVmaW5lIERCTExfQ09ERSAgICAgMHgyCS8qIGxvYWQgY29kZSAqLworI2RlZmluZSBEQkxMX0RBVEEgICAgIDB4NAkvKiBsb2FkIGRhdGEgKi8KKyNkZWZpbmUgREJMTF9EWU5BTUlDICAweDgJLyogZHluYW1pYyBsb2FkICovCisjZGVmaW5lIERCTExfQlNTICAgICAgMHgyMAkvKiBVbml0aWFsaXplZCBzZWN0aW9uICovCisKKyNkZWZpbmUgREJMTF9NQVhQQVRITEVOR1RIICAgICAgIDI1NQorCisvKgorICogID09PT09PT09IERCTExfVGFyZ2V0ID09PT09PT09CisgKgorICovCitzdHJ1Y3QgZGJsbF90YXJfb2JqOworCisvKgorICogID09PT09PT09IGRibGxfZmxhZ3MgPT09PT09PT0KKyAqICBTcGVjaWZpZXMgd2hldGhlciB0byBsb2FkIGNvZGUsIGRhdGEsIG9yIHN5bWJvbHMKKyAqLwordHlwZWRlZiBzMzIgZGJsbF9mbGFnczsKKworLyoKKyAqICA9PT09PT09PSBEQkxMX0xpYnJhcnkgPT09PT09PT0KKyAqCisgKi8KK3N0cnVjdCBkYmxsX2xpYnJhcnlfb2JqOworCisvKgorICogID09PT09PT09IGRibGxfc2VjdF9pbmZvID09PT09PT09CisgKiAgRm9yIGNvbGxlY3RpbmcgaW5mbyBvbiBvdmVybGF5IHNlY3Rpb25zCisgKi8KK3N0cnVjdCBkYmxsX3NlY3RfaW5mbyB7CisJY29uc3QgY2hhciAqbmFtZTsJLyogbmFtZSBvZiBzZWN0aW9uICovCisJdTMyIHNlY3RfcnVuX2FkZHI7CS8qIHJ1biBhZGRyZXNzIG9mIHNlY3Rpb24gKi8KKwl1MzIgc2VjdF9sb2FkX2FkZHI7CS8qIGxvYWQgYWRkcmVzcyBvZiBzZWN0aW9uICovCisJdTMyIHNpemU7CQkvKiBzaXplIG9mIHNlY3Rpb24gKHRhcmdldCBNQVVzKSAqLworCWRibGxfZmxhZ3MgdHlwZTsJLyogQ29kZSwgZGF0YSwgb3IgQlNTICovCit9OworCisvKgorICogID09PT09PT09IGRibGxfc3ltX3ZhbCA9PT09PT09PQorICogIChOZWVkZWQgZm9yIGR5bmFtaWMgbG9hZCBsaWJyYXJ5KQorICovCitzdHJ1Y3QgZGJsbF9zeW1fdmFsIHsKKwl1MzIgdmFsdWU7Cit9OworCisvKgorICogID09PT09PT09IGRibGxfYWxsb2NfZnhuID09PT09PT09CisgKiAgQWxsb2NhdGUgbWVtb3J5IGZ1bmN0aW9uLiAgQWxsb2NhdGUgb3IgcmVzZXJ2ZSAoaWYgcmVzZXJ2ZWQgPT0gVFJVRSkKKyAqICAic2l6ZSIgYnl0ZXMgb2YgbWVtb3J5IGZyb20gc2VnbWVudCAic3BhY2UiIGFuZCByZXR1cm4gdGhlIGFkZHJlc3MgaW4KKyAqICAqZHNwX2FkZHJlc3MgKG9yIHN0YXJ0aW5nIGF0ICpkc3BfYWRkcmVzcyBpZiByZXNlcnZlID09IFRSVUUpLiBSZXR1cm5zIDAgb24KKyAqICBzdWNjZXNzLCBvciBhbiBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK3R5cGVkZWYgczMyKCpkYmxsX2FsbG9jX2Z4bikgKHZvaWQgKmhkbCwgczMyIHNwYWNlLCB1MzIgc2l6ZSwgdTMyIGFsaWduLAorCQkJICAgICAgdTMyICpkc3BfYWRkcmVzcywgczMyIHNlZ19pZCwgczMyIHJlcSwKKwkJCSAgICAgIGJvb2wgcmVzZXJ2ZWQpOworCisvKgorICogID09PT09PT09IGRibGxfY2xvc2VfZnhuID09PT09PT09CisgKi8KK3R5cGVkZWYgczMyKCpkYmxsX2ZfY2xvc2VfZnhuKSAodm9pZCAqKTsKKworLyoKKyAqICA9PT09PT09PSBkYmxsX2ZyZWVfZnhuID09PT09PT09CisgKiAgRnJlZSBtZW1vcnkgZnVuY3Rpb24uICBGcmVlLCBvciB1bnJlc2VydmUgKGlmIHJlc2VydmVkID09IFRSVUUpICJzaXplIgorICogIGJ5dGVzIG9mIG1lbW9yeSBmcm9tIHNlZ21lbnQgInNwYWNlIgorICovCit0eXBlZGVmIGJvb2woKmRibGxfZnJlZV9meG4pICh2b2lkICpoZGwsIHUzMiBhZGRyLCBzMzIgc3BhY2UsIHUzMiBzaXplLAorCQkJICAgICAgYm9vbCByZXNlcnZlZCk7CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF9mX29wZW5fZnhuID09PT09PT09CisgKi8KK3R5cGVkZWYgdm9pZCAqKCpkYmxsX2Zfb3Blbl9meG4pIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF9sb2dfd3JpdGVfZnhuID09PT09PT09CisgKiAgRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHdyaXRpbmcgZGF0YSBmcm9tIGEgc2VjdGlvbiwgdG8gbG9nIHRoZSBpbmZvLgorICogIENhbiBiZSBOVUxMIGlmIG5vIGxvZ2dpbmcgaXMgcmVxdWlyZWQuCisgKi8KK3R5cGVkZWYgaW50KCpkYmxsX2xvZ193cml0ZV9meG4pICh2b2lkICpoYW5kbGUsCisJCQkJCSBzdHJ1Y3QgZGJsbF9zZWN0X2luZm8gKnNlY3QsIHUzMiBhZGRyLAorCQkJCQkgdTMyIGJ5dGVzKTsKKworLyoKKyAqICA9PT09PT09PSBkYmxsX3JlYWRfZnhuID09PT09PT09CisgKi8KK3R5cGVkZWYgczMyKCpkYmxsX3JlYWRfZnhuKSAodm9pZCAqLCBzaXplX3QsIHNpemVfdCwgdm9pZCAqKTsKKworLyoKKyAqICA9PT09PT09PSBkYmxsX3NlZWtfZnhuID09PT09PT09CisgKi8KK3R5cGVkZWYgczMyKCpkYmxsX3NlZWtfZnhuKSAodm9pZCAqLCBsb25nLCBpbnQpOworCisvKgorICogID09PT09PT09IGRibGxfc3ltX2xvb2t1cCA9PT09PT09PQorICogIFN5bWJvbCBsb29rdXAgZnVuY3Rpb24gLSBGaW5kIHRoZSBzeW1ib2wgbmFtZSBhbmQgcmV0dXJuIGl0cyB2YWx1ZS4KKyAqCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGFuZGxlICAgICAgICAgIC0gT3BhcXVlIGhhbmRsZQorICogICAgICBwYXJnICAgICAgICAgICAgLSBPcGFxdWUgYXJndW1lbnQuCisgKiAgICAgIG5hbWUgICAgICAgICAgICAtIE5hbWUgb2Ygc3ltYm9sIHRvIGxvb2t1cC4KKyAqICAgICAgc3ltICAgICAgICAgICAgIC0gTG9jYXRpb24gdG8gc3RvcmUgYWRkcmVzcyBvZiBzeW1ib2wgc3RydWN0dXJlLgorICoKKyAqICBSZXR1cm5zOgorICogICAgICBUUlVFOiAgICAgICAgICAgU3VjY2VzcyAoc3ltYm9sIHdhcyBmb3VuZCkuCisgKiAgICAgIEZBTFNFOiAgICAgICAgICBGYWlsZWQgdG8gZmluZCBzeW1ib2wuCisgKi8KK3R5cGVkZWYgYm9vbCgqZGJsbF9zeW1fbG9va3VwKSAodm9pZCAqaGFuZGxlLCB2b2lkICpwYXJnLCB2b2lkICpybW1faGFuZGxlLAorCQkJCWNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkYmxsX3N5bV92YWwgKiogc3ltKTsKKworLyoKKyAqICA9PT09PT09PSBkYmxsX3RlbGxfZnhuID09PT09PT09CisgKi8KK3R5cGVkZWYgczMyKCpkYmxsX3RlbGxfZnhuKSAodm9pZCAqKTsKKworLyoKKyAqICA9PT09PT09PSBkYmxsX3dyaXRlX2Z4biA9PT09PT09PQorICogIFdyaXRlIG1lbW9yeSBmdW5jdGlvbi4gIFdyaXRlICJuIiBIT1NUIGJ5dGVzIG9mIG1lbW9yeSB0byBzZWdtZW50ICJtdHlwZSIKKyAqICBzdGFydGluZyBhdCBhZGRyZXNzICJkc3BfYWRkcmVzcyIgZnJvbSB0aGUgYnVmZmVyICJidWYiLiAgVGhlIGJ1ZmZlciBpcworICogIGZvcm1hdHRlZCBhcyBhbiBhcnJheSBvZiB3b3JkcyBhcHByb3ByaWF0ZSBmb3IgdGhlIERTUC4KKyAqLwordHlwZWRlZiBzMzIoKmRibGxfd3JpdGVfZnhuKSAodm9pZCAqaGRsLCB1MzIgZHNwX2FkZHJlc3MsIHZvaWQgKmJ1ZiwKKwkJCSAgICAgIHUzMiBuLCBzMzIgbXR5cGUpOworCisvKgorICogID09PT09PT09IGRibGxfYXR0cnMgPT09PT09PT0KKyAqLworc3RydWN0IGRibGxfYXR0cnMgeworCWRibGxfYWxsb2NfZnhuIGFsbG9jOworCWRibGxfZnJlZV9meG4gZnJlZTsKKwl2b2lkICpybW1faGFuZGxlOwkvKiBIYW5kbGUgdG8gcGFzcyB0byBhbGxvYywgZnJlZSBmdW5jdGlvbnMgKi8KKwlkYmxsX3dyaXRlX2Z4biB3cml0ZTsKKwl2b2lkICppbnB1dF9wYXJhbXM7CS8qIEhhbmRsZSB0byBwYXNzIHRvIHdyaXRlLCBjaW5pdCBmdW5jdGlvbiAqLworCWJvb2wgYmFzZV9pbWFnZTsKKwlkYmxsX2xvZ193cml0ZV9meG4gbG9nX3dyaXRlOworCXZvaWQgKmxvZ193cml0ZV9oYW5kbGU7CisKKwkvKiBTeW1ib2wgbWF0Y2hpbmcgZnVuY3Rpb24gYW5kIGhhbmRsZSB0byBwYXNzIHRvIGl0ICovCisJZGJsbF9zeW1fbG9va3VwIHN5bV9sb29rdXA7CisJdm9pZCAqc3ltX2hhbmRsZTsKKwl2b2lkICpzeW1fYXJnOworCisJLyoKKwkgKiAgVGhlc2UgZmlsZSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIHNob3VsZCBiZSBjb21wYXRpYmxlIHdpdGggdGhlCisJICogICJDIiBydW4gdGltZSBsaWJyYXJ5IGZ1bmN0aW9ucyBvZiB0aGUgc2FtZSBuYW1lLgorCSAqLworCSBzMzIoKmZyZWFkKSAodm9pZCAqLCBzaXplX3QsIHNpemVfdCwgdm9pZCAqKTsKKwkgczMyKCpmc2VlaykgKHZvaWQgKiwgbG9uZywgaW50KTsKKwkgczMyKCpmdGVsbCkgKHZvaWQgKik7CisJIHMzMigqZmNsb3NlKSAodm9pZCAqKTsKKwl2b2lkICooKmZvcGVuKSAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworfTsKKworLyoKKyAqICA9PT09PT09PSBkYmxsX2Nsb3NlID09PT09PT09CisgKiAgQ2xvc2UgbGlicmFyeSBvcGVuZWQgd2l0aCBkYmxsX29wZW4uCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbGliICAgICAgICAgICAgIC0gSGFuZGxlIHJldHVybmVkIGZyb20gZGJsbF9vcGVuKCkuCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgREJMIGluaXRpYWxpemVkLgorICogICAgICBWYWxpZCBsaWIuCisgKiAgRW5zdXJlczoKKyAqLwordHlwZWRlZiB2b2lkICgqZGJsbF9jbG9zZV9meG4pIChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGlicmFyeSk7CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF9jcmVhdGUgPT09PT09PT0KKyAqICBDcmVhdGUgYSB0YXJnZXQgb2JqZWN0LCBzcGVjaWZ5aW5nIHRoZSBhbGxvYywgZnJlZSwgYW5kIHdyaXRlIGZ1bmN0aW9ucy4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICB0YXJnZXRfb2JqICAgICAgICAgLSBMb2NhdGlvbiB0byBzdG9yZSB0YXJnZXQgaGFuZGxlIG9uIG91dHB1dC4KKyAqICAgICAgcGF0dHJzICAgICAgICAgIC0gQXR0cmlidXRlcy4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVOT01FTTogICAgTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLgorICogIFJlcXVpcmVzOgorICogICAgICBEQkwgaW5pdGlhbGl6ZWQuCisgKiAgICAgIHBhdHRycyAhPSBOVUxMLgorICogICAgICB0YXJnZXRfb2JqICE9IE5VTEw7CisgKiAgRW5zdXJlczoKKyAqICAgICAgU3VjY2VzczogICAgICAgICp0YXJnZXRfb2JqICE9IE5VTEwuCisgKiAgICAgIEZhaWx1cmU6ICAgICAgICAqdGFyZ2V0X29iaiA9PSBOVUxMLgorICovCit0eXBlZGVmIGludCgqZGJsbF9jcmVhdGVfZnhuKSAoc3RydWN0IGRibGxfdGFyX29iaiAqKnRhcmdldF9vYmosCisJCQkJICAgICAgc3RydWN0IGRibGxfYXR0cnMgKmF0dHJzKTsKKworLyoKKyAqICA9PT09PT09PSBkYmxsX2RlbGV0ZSA9PT09PT09PQorICogIERlbGV0ZSB0YXJnZXQgb2JqZWN0IGFuZCBmcmVlIHJlc291cmNlcyBmb3IgYW55IGxvYWRlZCBsaWJyYXJpZXMuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgdGFyZ2V0ICAgICAgICAgIC0gSGFuZGxlIHJldHVybmVkIGZyb20gREJMTF9DcmVhdGUoKS4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBEQkwgaW5pdGlhbGl6ZWQuCisgKiAgICAgIFZhbGlkIHRhcmdldC4KKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIHZvaWQgKCpkYmxsX2RlbGV0ZV9meG4pIChzdHJ1Y3QgZGJsbF90YXJfb2JqICp0YXJnZXQpOworCisvKgorICogID09PT09PT09IGRibGxfZXhpdCA9PT09PT09PQorICogIERpc2NvbnRpbnVlIHVzZSBvZiBEQkwgbW9kdWxlLgorICogIFBhcmFtZXRlcnM6CisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgcmVmcyA+IDAuCisgKiAgRW5zdXJlczoKKyAqICAgICAgcmVmcyA+PSAwLgorICovCit0eXBlZGVmIHZvaWQgKCpkYmxsX2V4aXRfZnhuKSAodm9pZCk7CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF9nZXRfYWRkciA9PT09PT09PQorICogIEdldCBhZGRyZXNzIG9mIG5hbWUgaW4gdGhlIHNwZWNpZmllZCBsaWJyYXJ5LgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGxpYiAgICAgICAgICAgICAtIEhhbmRsZSByZXR1cm5lZCBmcm9tIGRibGxfb3BlbigpLgorICogICAgICBuYW1lICAgICAgICAgICAgLSBOYW1lIG9mIHN5bWJvbAorICogICAgICBzeW1fdmFsICAgICAgICAgLSBMb2NhdGlvbiB0byBzdG9yZSBzeW1ib2wgYWRkcmVzcyBvbiBvdXRwdXQuCisgKiAgUmV0dXJuczoKKyAqICAgICAgVFJVRTogICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIEZBTFNFOiAgICAgICAgICBTeW1ib2wgbm90IGZvdW5kLgorICogIFJlcXVpcmVzOgorICogICAgICBEQkwgaW5pdGlhbGl6ZWQuCisgKiAgICAgIFZhbGlkIGxpYnJhcnkuCisgKiAgICAgIG5hbWUgIT0gTlVMTC4KKyAqICAgICAgc3ltX3ZhbCAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK3R5cGVkZWYgYm9vbCgqZGJsbF9nZXRfYWRkcl9meG4pIChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliLCBjaGFyICpuYW1lLAorCQkJCSAgc3RydWN0IGRibGxfc3ltX3ZhbCAqKnN5bV92YWwpOworCisvKgorICogID09PT09PT09IGRibGxfZ2V0X2F0dHJzID09PT09PT09CisgKiAgUmV0cmlldmUgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIHRhcmdldC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICB0YXJnZXQgICAgICAgICAgLSBIYW5kbGUgcmV0dXJuZWQgZnJvbSBEQkxMX0NyZWF0ZSgpLgorICogICAgICBwYXR0cnMgICAgICAgICAgLSBMb2NhdGlvbiB0byBzdG9yZSBhdHRyaWJ1dGVzIG9uIG91dHB1dC4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBEQkwgaW5pdGlhbGl6ZWQuCisgKiAgICAgIFZhbGlkIHRhcmdldC4KKyAqICAgICAgcGF0dHJzICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLwordHlwZWRlZiB2b2lkICgqZGJsbF9nZXRfYXR0cnNfZnhuKSAoc3RydWN0IGRibGxfdGFyX29iaiAqdGFyZ2V0LAorCQkJCSAgICBzdHJ1Y3QgZGJsbF9hdHRycyAqYXR0cnMpOworCisvKgorICogID09PT09PT09IGRibGxfZ2V0X2NfYWRkciA9PT09PT09PQorICogIEdldCBhZGRyZXNzIG9mICJDIiBuYW1lIG9uIHRoZSBzcGVjaWZpZWQgbGlicmFyeS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBsaWIgICAgICAgICAgICAgLSBIYW5kbGUgcmV0dXJuZWQgZnJvbSBkYmxsX29wZW4oKS4KKyAqICAgICAgbmFtZSAgICAgICAgICAgIC0gTmFtZSBvZiBzeW1ib2wKKyAqICAgICAgc3ltX3ZhbCAgICAgICAgIC0gTG9jYXRpb24gdG8gc3RvcmUgc3ltYm9sIGFkZHJlc3Mgb24gb3V0cHV0LgorICogIFJldHVybnM6CisgKiAgICAgIFRSVUU6ICAgICAgICAgICBTdWNjZXNzLgorICogICAgICBGQUxTRTogICAgICAgICAgU3ltYm9sIG5vdCBmb3VuZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgREJMIGluaXRpYWxpemVkLgorICogICAgICBWYWxpZCB0YXJnZXQuCisgKiAgICAgIG5hbWUgIT0gTlVMTC4KKyAqICAgICAgc3ltX3ZhbCAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK3R5cGVkZWYgYm9vbCgqZGJsbF9nZXRfY19hZGRyX2Z4bikgKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWIsIGNoYXIgKm5hbWUsCisJCQkJICAgIHN0cnVjdCBkYmxsX3N5bV92YWwgKipzeW1fdmFsKTsKKworLyoKKyAqICA9PT09PT09PSBkYmxsX2dldF9zZWN0ID09PT09PT09CisgKiAgR2V0IGFkZHJlc3MgYW5kIHNpemUgb2YgYSBuYW1lZCBzZWN0aW9uLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGxpYiAgICAgICAgICAgICAtIExpYnJhcnkgaGFuZGxlIHJldHVybmVkIGZyb20gZGJsbF9vcGVuKCkuCisgKiAgICAgIG5hbWUgICAgICAgICAgICAtIE5hbWUgb2Ygc2VjdGlvbi4KKyAqICAgICAgcGFkZHIgICAgICAgICAgIC0gTG9jYXRpb24gdG8gc3RvcmUgc2VjdGlvbiBhZGRyZXNzIG9uIG91dHB1dC4KKyAqICAgICAgcHNpemUgICAgICAgICAgIC0gTG9jYXRpb24gdG8gc3RvcmUgc2VjdGlvbiBzaXplIG9uIG91dHB1dC4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVOWElPOiAgICBTZWN0aW9uIG5vdCBmb3VuZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgREJMIGluaXRpYWxpemVkLgorICogICAgICBWYWxpZCBsaWIuCisgKiAgICAgIG5hbWUgIT0gTlVMTC4KKyAqICAgICAgcGFkZHIgIT0gTlVMTDsKKyAqICAgICAgcHNpemUgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIGludCgqZGJsbF9nZXRfc2VjdF9meG4pIChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliLAorCQkJCQljaGFyICpuYW1lLCB1MzIgKiBhZGRyLCB1MzIgKiBzaXplKTsKKworLyoKKyAqICA9PT09PT09PSBkYmxsX2luaXQgPT09PT09PT0KKyAqICBJbml0aWFsaXplIERCTCBtb2R1bGUuCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogICAgICBUUlVFOiAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgRkFMU0U6ICAgICAgICAgIEZhaWx1cmUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIHJlZnMgPj0gMC4KKyAqICBFbnN1cmVzOgorICogICAgICBTdWNjZXNzOiAgICAgICAgcmVmcyA+IDAuCisgKiAgICAgIEZhaWx1cmU6ICAgICAgICByZWZzID49IDAuCisgKi8KK3R5cGVkZWYgYm9vbCgqZGJsbF9pbml0X2Z4bikgKHZvaWQpOworCisvKgorICogID09PT09PT09IGRibGxfbG9hZCA9PT09PT09PQorICogIExvYWQgbGlicmFyeSBvbnRvIHRoZSB0YXJnZXQuCisgKgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGxpYiAgICAgICAgICAgICAtIExpYnJhcnkgaGFuZGxlIHJldHVybmVkIGZyb20gZGJsbF9vcGVuKCkuCisgKiAgICAgIGZsYWdzICAgICAgICAgICAtIExvYWQgY29kZSwgZGF0YSBhbmQvb3Igc3ltYm9scy4KKyAqICAgICAgYXR0cnMgICAgICAgICAgIC0gTWF5IGNvbnRhaW4gYWxsb2MsIGZyZWUsIGFuZCB3cml0ZSBmdW5jdGlvbi4KKyAqICAgICAgZW50cnlfcHQgICAgICAgIC0gTG9jYXRpb24gdG8gc3RvcmUgcHJvZ3JhbSBlbnRyeSBvbiBvdXRwdXQuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FQkFERjogICAgIEZpbGUgcmVhZCBmYWlsZWQuCisgKiAgICAgIC1FSUxTRVE6ICAgRmFpbHVyZSBpbiBkeW5hbWljIGxvYWRlciBsaWJyYXJ5LgorICogIFJlcXVpcmVzOgorICogICAgICBEQkwgaW5pdGlhbGl6ZWQuCisgKiAgICAgIFZhbGlkIGxpYi4KKyAqICAgICAgZW50cnkgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIGludCgqZGJsbF9sb2FkX2Z4bikgKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWIsCisJCQkJICAgIGRibGxfZmxhZ3MgZmxhZ3MsCisJCQkJICAgIHN0cnVjdCBkYmxsX2F0dHJzICphdHRycywgdTMyICplbnRyeSk7CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF9sb2FkX3NlY3QgPT09PT09PT0KKyAqICBMb2FkIGEgbmFtZWQgc2VjdGlvbiBmcm9tIGFuIGxpYnJhcnkgKGZvciBvdmVybGF5IHN1cHBvcnQpLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGxpYiAgICAgICAgICAgICAtIEhhbmRsZSByZXR1cm5lZCBmcm9tIGRibGxfb3BlbigpLgorICogICAgICBzZWNfbmFtZSAgICAgICAgLSBOYW1lIG9mIHNlY3Rpb24gdG8gbG9hZC4KKyAqICAgICAgYXR0cnMgICAgICAgICAgIC0gQ29udGFpbnMgd3JpdGUgZnVuY3Rpb24gYW5kIGhhbmRsZSB0byBwYXNzIHRvIGl0LgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRU5YSU86ICAgIFNlY3Rpb24gbm90IGZvdW5kLgorICogICAgICAtRU5PU1lTOiAgIEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgVmFsaWQgbGliLgorICogICAgICBzZWNfbmFtZSAhPSBOVUxMLgorICogICAgICBhdHRycyAhPSBOVUxMLgorICogICAgICBhdHRycy0+d3JpdGUgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIGludCgqZGJsbF9sb2FkX3NlY3RfZnhuKSAoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYiwKKwkJCQkJIGNoYXIgKnN6X3NlY3RfbmFtZSwKKwkJCQkJIHN0cnVjdCBkYmxsX2F0dHJzICphdHRycyk7CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF9vcGVuID09PT09PT09CisgKiAgZGJsbF9vcGVuKCkgcmV0dXJucyBhIGxpYnJhcnkgaGFuZGxlIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9hZC91bmxvYWQKKyAqICB0aGUgc3ltYm9scy9jb2RlL2RhdGEgdmlhIGRibGxfbG9hZCgpL2RibGxfdW5sb2FkKCkuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgdGFyZ2V0ICAgICAgICAgIC0gSGFuZGxlIHJldHVybmVkIGZyb20gZGJsbF9jcmVhdGUoKS4KKyAqICAgICAgZmlsZSAgICAgICAgICAgIC0gTmFtZSBvZiBmaWxlIHRvIG9wZW4uCisgKiAgICAgIGZsYWdzICAgICAgICAgICAtIElmIGZsYWdzICYgREJMTF9TWU1CLCBsb2FkIHN5bWJvbHMuCisgKiAgICAgIGxpYl9vYmogICAgICAgICAtIExvY2F0aW9uIHRvIHN0b3JlIGxpYnJhcnkgaGFuZGxlIG9uIG91dHB1dC4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FTk9NRU06ICAgICAgICBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLgorICogICAgICAtRUJBREY6ICAgICAgICAgRmlsZSBvcGVuL3JlYWQgZmFpbHVyZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIFVuYWJsZSB0byBkZXRlcm1pbmUgdGFyZ2V0IHR5cGUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIERCTCBpbml0aWFsaXplZC4KKyAqICAgICAgVmFsaWQgdGFyZ2V0LgorICogICAgICBmaWxlICE9IE5VTEwuCisgKiAgICAgIGxpYl9vYmogIT0gTlVMTC4KKyAqICAgICAgZGJsbF9hdHRycyBmb3BlbiBmdW5jdGlvbiBub24tTlVMTC4KKyAqICBFbnN1cmVzOgorICogICAgICBTdWNjZXNzOiAgICAgICAgVmFsaWQgKmxpYl9vYmouCisgKiAgICAgIEZhaWx1cmU6ICAgICAgICAqbGliX29iaiA9PSBOVUxMLgorICovCit0eXBlZGVmIGludCgqZGJsbF9vcGVuX2Z4bikgKHN0cnVjdCBkYmxsX3Rhcl9vYmogKnRhcmdldCwgY2hhciAqZmlsZSwKKwkJCQkgICAgZGJsbF9mbGFncyBmbGFncywKKwkJCQkgICAgc3RydWN0IGRibGxfbGlicmFyeV9vYmogKipsaWJfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBkYmxsX3JlYWRfc2VjdCA9PT09PT09PQorICogIFJlYWQgQ09GRiBzZWN0aW9uIGludG8gYSBjaGFyYWN0ZXIgYnVmZmVyLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGxpYiAgICAgICAgICAgICAtIExpYnJhcnkgaGFuZGxlIHJldHVybmVkIGZyb20gZGJsbF9vcGVuKCkuCisgKiAgICAgIG5hbWUgICAgICAgICAgICAtIE5hbWUgb2Ygc2VjdGlvbi4KKyAqICAgICAgcGJ1ZiAgICAgICAgICAgIC0gQnVmZmVyIHRvIHdyaXRlIHNlY3Rpb24gY29udGVudHMgaW50by4KKyAqICAgICAgc2l6ZSAgICAgICAgICAgIC0gQnVmZmVyIHNpemUKKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVOWElPOiAgICBOYW1lZCBzZWN0aW9uIGRvZXMgbm90IGV4aXN0cy4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgREJMIGluaXRpYWxpemVkLgorICogICAgICBWYWxpZCBsaWIuCisgKiAgICAgIG5hbWUgIT0gTlVMTC4KKyAqICAgICAgcGJ1ZiAhPSBOVUxMLgorICogICAgICBzaXplICE9IDAuCisgKiAgRW5zdXJlczoKKyAqLwordHlwZWRlZiBpbnQoKmRibGxfcmVhZF9zZWN0X2Z4bikgKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWIsCisJCQkJCSBjaGFyICpuYW1lLCBjaGFyICpjb250ZW50LAorCQkJCQkgdTMyIGNvbnRfc2l6ZSk7CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF9zZXRfYXR0cnMgPT09PT09PT0KKyAqICBTZXQgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIHRhcmdldC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICB0YXJnZXQgICAgICAgICAgLSBIYW5kbGUgcmV0dXJuZWQgZnJvbSBkYmxsX2NyZWF0ZSgpLgorICogICAgICBwYXR0cnMgICAgICAgICAgLSBOZXcgYXR0cmlidXRlcy4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBEQkwgaW5pdGlhbGl6ZWQuCisgKiAgICAgIFZhbGlkIHRhcmdldC4KKyAqICAgICAgcGF0dHJzICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLwordHlwZWRlZiB2b2lkICgqZGJsbF9zZXRfYXR0cnNfZnhuKSAoc3RydWN0IGRibGxfdGFyX29iaiAqdGFyZ2V0LAorCQkJCSAgICBzdHJ1Y3QgZGJsbF9hdHRycyAqYXR0cnMpOworCisvKgorICogID09PT09PT09IGRibGxfdW5sb2FkID09PT09PT09CisgKiAgVW5sb2FkIGxpYnJhcnkgbG9hZGVkIHdpdGggZGJsbF9sb2FkKCkuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbGliICAgICAgICAgICAgIC0gSGFuZGxlIHJldHVybmVkIGZyb20gZGJsbF9vcGVuKCkuCisgKiAgICAgIGF0dHJzICAgICAgICAgICAtIENvbnRhaW5zIGZyZWUoKSBmdW5jdGlvbiBhbmQgaGFuZGxlIHRvIHBhc3MgdG8gaXQuCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgREJMIGluaXRpYWxpemVkLgorICogICAgICBWYWxpZCBsaWIuCisgKiAgRW5zdXJlczoKKyAqLwordHlwZWRlZiB2b2lkICgqZGJsbF91bmxvYWRfZnhuKSAoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYnJhcnksCisJCQkJIHN0cnVjdCBkYmxsX2F0dHJzICphdHRycyk7CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF91bmxvYWRfc2VjdCA9PT09PT09PQorICogIFVubG9hZCBhIG5hbWVkIHNlY3Rpb24gZnJvbSBhbiBsaWJyYXJ5IChmb3Igb3ZlcmxheSBzdXBwb3J0KS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBsaWIgICAgICAgICAgICAgLSBIYW5kbGUgcmV0dXJuZWQgZnJvbSBkYmxsX29wZW4oKS4KKyAqICAgICAgc2VjX25hbWUgICAgICAgIC0gTmFtZSBvZiBzZWN0aW9uIHRvIGxvYWQuCisgKiAgICAgIGF0dHJzICAgICAgICAgICAtIENvbnRhaW5zIGZyZWUoKSBmdW5jdGlvbiBhbmQgaGFuZGxlIHRvIHBhc3MgdG8gaXQuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FTlhJTzogICAgTmFtZWQgc2VjdGlvbiBub3QgZm91bmQuCisgKiAgICAgIC1FTk9TWVMKKyAqICBSZXF1aXJlczoKKyAqICAgICAgREJMIGluaXRpYWxpemVkLgorICogICAgICBWYWxpZCBsaWIuCisgKiAgICAgIHNlY19uYW1lICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLwordHlwZWRlZiBpbnQoKmRibGxfdW5sb2FkX3NlY3RfZnhuKSAoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYiwKKwkJCQkJICAgY2hhciAqc3pfc2VjdF9uYW1lLAorCQkJCQkgICBzdHJ1Y3QgZGJsbF9hdHRycyAqYXR0cnMpOworCitzdHJ1Y3QgZGJsbF9meG5zIHsKKwlkYmxsX2Nsb3NlX2Z4biBjbG9zZV9meG47CisJZGJsbF9jcmVhdGVfZnhuIGNyZWF0ZV9meG47CisJZGJsbF9kZWxldGVfZnhuIGRlbGV0ZV9meG47CisJZGJsbF9leGl0X2Z4biBleGl0X2Z4bjsKKwlkYmxsX2dldF9hdHRyc19meG4gZ2V0X2F0dHJzX2Z4bjsKKwlkYmxsX2dldF9hZGRyX2Z4biBnZXRfYWRkcl9meG47CisJZGJsbF9nZXRfY19hZGRyX2Z4biBnZXRfY19hZGRyX2Z4bjsKKwlkYmxsX2dldF9zZWN0X2Z4biBnZXRfc2VjdF9meG47CisJZGJsbF9pbml0X2Z4biBpbml0X2Z4bjsKKwlkYmxsX2xvYWRfZnhuIGxvYWRfZnhuOworCWRibGxfbG9hZF9zZWN0X2Z4biBsb2FkX3NlY3RfZnhuOworCWRibGxfb3Blbl9meG4gb3Blbl9meG47CisJZGJsbF9yZWFkX3NlY3RfZnhuIHJlYWRfc2VjdF9meG47CisJZGJsbF9zZXRfYXR0cnNfZnhuIHNldF9hdHRyc19meG47CisJZGJsbF91bmxvYWRfZnhuIHVubG9hZF9meG47CisJZGJsbF91bmxvYWRfc2VjdF9meG4gdW5sb2FkX3NlY3RfZnhuOworfTsKKworI2VuZGlmIC8qIERCTERFRlNfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZGVoZGVmcy5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RlaGRlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWY4YmY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RlaGRlZnMuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogZGVoZGVmcy5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIERlZmluaXRpb24gZm9yIEJyaWRnZSBkcml2ZXIgbW9kdWxlIERFSC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIERFSERFRlNfCisjZGVmaW5lIERFSERFRlNfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvbWJ4X3NoLmg+CS8qIHNoYXJlZCBtYWlsYm94IGNvZGVzICovCisKKy8qIERFSCBvYmplY3QgbWFuYWdlciAqLworc3RydWN0IGRlaF9tZ3I7CisKKy8qIE1hZ2ljIGNvZGUgdXNlZCB0byBkZXRlcm1pbmUgaWYgRFNQIHNpZ25hbGVkIGV4Y2VwdGlvbi4gKi8KKyNkZWZpbmUgREVIX0JBU0UgICAgICAgIE1CWF9ERUhfQkFTRQorI2RlZmluZSBERUhfVVNFUlNfQkFTRSAgTUJYX0RFSF9VU0VSU19CQVNFCisjZGVmaW5lIERFSF9MSU1JVCAgICAgICBNQlhfREVIX0xJTUlUCisKKyNlbmRpZiAvKiBfREVIREVGU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZGV2LmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU3NDU4ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kZXYuaApAQCAtMCwwICsxLDcwMiBAQAorLyoKKyAqIGRldi5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIEJyaWRnZSBCcmlkZ2UgZHJpdmVyIGRldmljZSBvcGVyYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgREVWXworI2RlZmluZSBERVZfCisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNb2R1bGUgRGVwZW5kZW50IEhlYWRlcnMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY2hubGRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY21tLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NvZC5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kZWhkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL25vZGVkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rpc3BkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZG1tLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2ZGVmcy5oPgorCisvKgorICogID09PT09PT09IGRldl9icmRfd3JpdGVfZnhuID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRXhwb3J0ZWQgZnVuY3Rpb24gdG8gYmUgdXNlZCBhcyB0aGUgQ09EIHdyaXRlIGZ1bmN0aW9uLiAgVGhpcyBmdW5jdGlvbgorICogICAgICBpcyBwYXNzZWQgYSBoYW5kbGUgdG8gYSBERVZfaE9iamVjdCBieSBaTCBpbiBhcmIsIHRoZW4gY2FsbHMgdGhlCisgKiAgICAgIGRldmljZSdzIGJyaWRnZV9icmRfd3JpdGUoKSBmdW5jdGlvbi4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBhcmI6ICAgICAgICAgICBIYW5kbGUgdG8gYSBEZXZpY2UgT2JqZWN0LgorICogICAgICBkZXZfY3R4dDogICAgSGFuZGxlIHRvIEJyaWRnZSBkcml2ZXIgZGVmaW5lZCBkZXZpY2UgaW5mby4KKyAqICAgICAgZHNwX2FkZHI6ICAgICAgIEFkZHJlc3Mgb24gRFNQIGJvYXJkIChEZXN0aW5hdGlvbikuCisgKiAgICAgIGhvc3RfYnVmOiAgICAgICBQb2ludGVyIHRvIGhvc3QgYnVmZmVyIChTb3VyY2UpLgorICogICAgICB1bF9udW1fYnl0ZXM6ICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIuCisgKiAgICAgIG1lbV90eXBlOiAgICAgICBNZW1vcnkgc3BhY2Ugb24gRFNQIHRvIHdoaWNoIHRvIHRyYW5zZmVyLgorICogIFJldHVybnM6CisgKiAgICAgIE51bWJlciBvZiBieXRlcyB3cml0dGVuLiAgUmV0dXJucyAwIGlmIHRoZSBERVZfaE9iamVjdCBwYXNzZWQgaW4gdmlhCisgKiAgICAgIGFyYiBpcyBpbnZhbGlkLgorICogIFJlcXVpcmVzOgorICogICAgICBERVYgSW5pdGlhbGl6ZWQuCisgKiAgICAgIGhvc3RfYnVmICE9IE5VTEwKKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gdTMyIGRldl9icmRfd3JpdGVfZnhuKHZvaWQgKmFyYiwKKwkJCSAgICAgdTMyIGRzcF9hZGQsCisJCQkgICAgIHZvaWQgKmhvc3RfYnVmLCB1MzIgdWxfbnVtX2J5dGVzLCB1MzIgbWVtX3NwYWNlKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfY3JlYXRlX2RldmljZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENhbGxlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSB0byBsb2FkIHRoZSBCcmlkZ2UgRHJpdmVyIGZvciBhCisgKiAgICAgICdCcmlkZ2UgZGV2aWNlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGRldmljZV9vYmo6ICAgICBQdHIgdG8gbG9jYXRpb24gdG8gcmVjZWl2ZSB0aGUgZGV2aWNlIG9iamVjdCBoYW5kbGUuCisgKiAgICAgIGRyaXZlcl9maWxlX25hbWU6IE5hbWUgb2YgQnJpZGdlIGRyaXZlciBQRSBETEwgZmlsZSB0byBsb2FkLiAgSWYgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZSBwYXRoIGlzIG5vdCBwcm92aWRlZCwgdGhlIGZpbGUgaXMgbG9hZGVkCisgKiAgICAgICAgICAgICAgICAgICAgICB0aHJvdWdoICdCcmlkZ2UncyBtb2R1bGUgc2VhcmNoIHBhdGguCisgKiAgICAgIGhvc3RfY29uZmlnOiAgICBIb3N0IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24sIHRvIGJlIHBhc3NlZCBkb3duCisgKiAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgQnJpZGdlIGRyaXZlciB3aGVuIGJyaWRnZV9kZXZfY3JlYXRlKCkgaXMgY2FsbGVkLgorICogICAgICBwRHNwQ29uZmlnOiAgICAgRFNQIHJlc291cmNlcywgdG8gYmUgcGFzc2VkIGRvd24gdG8gdGhlIEJyaWRnZSBkcml2ZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnJpZGdlX2Rldl9jcmVhdGUoKSBpcyBjYWxsZWQuCisgKiAgICAgIGRldl9ub2RlX29iajogICAgICAgUGxhdGZvcm0gc3BlY2lmaWMgZGV2aWNlIG5vZGUuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICBNb2R1bGUgaXMgbG9hZGVkLCBkZXZpY2Ugb2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQKKyAqICAgICAgLUVOT01FTTogICAgICAgIEluc3VmZmljaWVudCBtZW1vcnkgdG8gY3JlYXRlIG5lZWRlZCByZXNvdXJjZXMuCisgKiAgICAgIC1FUEVSTTogICAgICAgICAgICAgIFVuYWJsZSB0byBmaW5kIEJyaWRnZSBkcml2ZXIgZW50cnkgcG9pbnQgZnVuY3Rpb24uCisgKiAgICAgIC1FU1BJUEU6ICAgVW5hYmxlIHRvIGxvYWQgWkwgRExMLgorICogIFJlcXVpcmVzOgorICogICAgICBERVYgSW5pdGlhbGl6ZWQuCisgKiAgICAgIGRldmljZV9vYmogIT0gTlVMTC4KKyAqICAgICAgZHJpdmVyX2ZpbGVfbmFtZSAhPSBOVUxMLgorICogICAgICBob3N0X2NvbmZpZyAhPSBOVUxMLgorICogICAgICBwRHNwQ29uZmlnICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICpkZXZpY2Vfb2JqIHdpbGwgY29udGFpbiBoYW5kbGUgdG8gdGhlIG5ldyBkZXZpY2Ugb2JqZWN0LgorICogICAgICBPdGhlcndpc2UsIGRvZXMgbm90IGNyZWF0ZSB0aGUgZGV2aWNlIG9iamVjdCwgZW5zdXJlcyB0aGUgQnJpZGdlIGRyaXZlcgorICogICAgICBtb2R1bGUgaXMgdW5sb2FkZWQsIGFuZCBzZXRzICpkZXZpY2Vfb2JqIHRvIE5VTEwuCisgKi8KK2V4dGVybiBpbnQgZGV2X2NyZWF0ZV9kZXZpY2Uoc3RydWN0IGRldl9vYmplY3QKKwkJCQkgICAgKipkZXZpY2Vfb2JqLAorCQkJCSAgICBjb25zdCBjaGFyICpkcml2ZXJfZmlsZV9uYW1lLAorCQkJCSAgICBzdHJ1Y3QgY2ZnX2Rldm5vZGUgKmRldl9ub2RlX29iaik7CisKKy8qCisgKiAgPT09PT09PT0gZGV2X2NyZWF0ZV9pdmFfZGV2aWNlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ2FsbGVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIHRvIGxvYWQgdGhlIEJyaWRnZSBEcml2ZXIgZm9yIElWQS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkZXZpY2Vfb2JqOiAgICAgUHRyIHRvIGxvY2F0aW9uIHRvIHJlY2VpdmUgdGhlIGRldmljZSBvYmplY3QgaGFuZGxlLgorICogICAgICBkcml2ZXJfZmlsZV9uYW1lOiBOYW1lIG9mIEJyaWRnZSBkcml2ZXIgUEUgRExMIGZpbGUgdG8gbG9hZC4gIElmIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGUgcGF0aCBpcyBub3QgcHJvdmlkZWQsIHRoZSBmaWxlIGlzIGxvYWRlZAorICogICAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCAnQnJpZGdlJ3MgbW9kdWxlIHNlYXJjaCBwYXRoLgorICogICAgICBob3N0X2NvbmZpZzogICAgSG9zdCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLCB0byBiZSBwYXNzZWQgZG93bgorICogICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIEJyaWRnZSBkcml2ZXIgd2hlbiBicmlkZ2VfZGV2X2NyZWF0ZSgpIGlzIGNhbGxlZC4KKyAqICAgICAgcERzcENvbmZpZzogICAgIERTUCByZXNvdXJjZXMsIHRvIGJlIHBhc3NlZCBkb3duIHRvIHRoZSBCcmlkZ2UgZHJpdmVyCisgKiAgICAgICAgICAgICAgICAgICAgICB3aGVuIGJyaWRnZV9kZXZfY3JlYXRlKCkgaXMgY2FsbGVkLgorICogICAgICBkZXZfbm9kZV9vYmo6ICAgICAgIFBsYXRmb3JtIHNwZWNpZmljIGRldmljZSBub2RlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgTW9kdWxlIGlzIGxvYWRlZCwgZGV2aWNlIG9iamVjdCBoYXMgYmVlbiBjcmVhdGVkCisgKiAgICAgIC1FTk9NRU06ICAgICAgICBJbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGNyZWF0ZSBuZWVkZWQgcmVzb3VyY2VzLgorICogICAgICAtRVBFUk06ICAgICAgICAgICAgICBVbmFibGUgdG8gZmluZCBCcmlkZ2UgZHJpdmVyIGVudHJ5IHBvaW50IGZ1bmN0aW9uLgorICogICAgICAtRVNQSVBFOiAgIFVuYWJsZSB0byBsb2FkIFpMIERMTC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgREVWIEluaXRpYWxpemVkLgorICogICAgICBkZXZpY2Vfb2JqICE9IE5VTEwuCisgKiAgICAgIGRyaXZlcl9maWxlX25hbWUgIT0gTlVMTC4KKyAqICAgICAgaG9zdF9jb25maWcgIT0gTlVMTC4KKyAqICAgICAgcERzcENvbmZpZyAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAqZGV2aWNlX29iaiB3aWxsIGNvbnRhaW4gaGFuZGxlIHRvIHRoZSBuZXcgZGV2aWNlIG9iamVjdC4KKyAqICAgICAgT3RoZXJ3aXNlLCBkb2VzIG5vdCBjcmVhdGUgdGhlIGRldmljZSBvYmplY3QsIGVuc3VyZXMgdGhlIEJyaWRnZSBkcml2ZXIKKyAqICAgICAgbW9kdWxlIGlzIHVubG9hZGVkLCBhbmQgc2V0cyAqZGV2aWNlX29iaiB0byBOVUxMLgorICovCitleHRlcm4gaW50IGRldl9jcmVhdGVfaXZhX2RldmljZShzdHJ1Y3QgZGV2X29iamVjdAorCQkJCQkqKmRldmljZV9vYmosCisJCQkJCWNvbnN0IGNoYXIgKmRyaXZlcl9maWxlX25hbWUsCisJCQkJCWNvbnN0IHN0cnVjdCBjZmdfaG9zdHJlcworCQkJCQkqaG9zdF9jb25maWcsCisJCQkJCXN0cnVjdCBjZmdfZGV2bm9kZSAqZGV2X25vZGVfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfY3JlYXRlMiA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEFmdGVyIHN1Y2Nlc3NmdWwgbG9hZGluZyBvZiB0aGUgaW1hZ2UgZnJvbSBhcGlfaW5pdF9jb21wbGV0ZTIKKyAqICAgICAgKFBST0MgQXV0b19TdGFydCkgb3IgcHJvY19sb2FkIHRoaXMgZnhuIGlzIGNhbGxlZC4gVGhpcyBjcmVhdGVzCisgKiAgICAgIHRoZSBOb2RlIE1hbmFnZXIgYW5kIHVwZGF0ZXMgdGhlIERFViBPYmplY3QuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGRldl9vYmo6IEhhbmRsZSB0byBkZXZpY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aCBkZXZfY3JlYXRlX2RldmljZSgpLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgIFN1Y2Nlc3NmdWwgQ3JlYXRpb24gb2YgTm9kZSBNYW5hZ2VyCisgKiAgICAgIC1FUEVSTTogIFNvbWUgRXJyb3IgT2NjdXJyZWQuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIERFViBJbml0aWFsaXplZAorICogICAgICBWYWxpZCBoZGV2X29iagorICogIEVuc3VyZXM6CisgKiAgICAgIDAgYW5kIGhkZXZfb2JqLT5obm9kZV9tZ3IgIT0gTlVMTAorICogICAgICBlbHNlICAgIGhkZXZfb2JqLT5obm9kZV9tZ3IgPT0gTlVMTAorICovCitleHRlcm4gaW50IGRldl9jcmVhdGUyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaik7CisKKy8qCisgKiAgPT09PT09PT0gZGV2X2Rlc3Ryb3kyID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGVzdHJveXMgdGhlIE5vZGUgbWFuYWdlciBmb3IgdGhpcyBkZXZpY2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGRldl9vYmo6IEhhbmRsZSB0byBkZXZpY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aCBkZXZfY3JlYXRlX2RldmljZSgpLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgIFN1Y2Nlc3NmdWwgQ3JlYXRpb24gb2YgTm9kZSBNYW5hZ2VyCisgKiAgICAgIC1FUEVSTTogIFNvbWUgRXJyb3IgT2NjdXJyZWQuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIERFViBJbml0aWFsaXplZAorICogICAgICBWYWxpZCBoZGV2X29iagorICogIEVuc3VyZXM6CisgKiAgICAgIDAgYW5kIGhkZXZfb2JqLT5obm9kZV9tZ3IgPT0gTlVMTAorICogICAgICBlbHNlICAgIC1FUEVSTS4KKyAqLworZXh0ZXJuIGludCBkZXZfZGVzdHJveTIoc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfZGVzdHJveV9kZXZpY2UgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEZXN0cm95cyB0aGUgY2hhbm5lbCBtYW5hZ2VyIGZvciB0aGlzIGRldmljZSwgaWYgYW55LCBjYWxscworICogICAgICBicmlkZ2VfZGV2X2Rlc3Ryb3koKSwgYW5kIHRoZW4gYXR0ZW1wdHMgdG8gdW5sb2FkIHRoZSBCcmlkZ2UgbW9kdWxlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhkZXZfb2JqOiAgICAgSGFuZGxlIHRvIGRldmljZSBvYmplY3QgY3JlYXRlZCB3aXRoCisgKiAgICAgICAgICAgICAgICAgICAgICBkZXZfY3JlYXRlX2RldmljZSgpLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGhkZXZfb2JqLgorICogICAgICAtRVBFUk06ICAgICBUaGUgQnJpZGdlIGRyaXZlciBmYWlsZWQgaXQncyBicmlkZ2VfZGV2X2Rlc3Ryb3koKSBmdW5jdGlvbi4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgREVWIEluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgZGV2X2Rlc3Ryb3lfZGV2aWNlKHN0cnVjdCBkZXZfb2JqZWN0CisJCQkJICAgICAqaGRldl9vYmopOworCisvKgorICogID09PT09PT09IGRldl9nZXRfY2hubF9tZ3IgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgaGFuZGxlIHRvIHRoZSBjaGFubmVsIG1hbmFnZXIgY3JlYXRlZCBmb3IgdGhpcyBkZXZpY2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGRldl9vYmo6ICAgICBIYW5kbGUgdG8gZGV2aWNlIG9iamVjdCBjcmVhdGVkIHdpdGgKKyAqICAgICAgICAgICAgICAgICAgICAgIGRldl9jcmVhdGVfZGV2aWNlKCkuCisgKiAgICAgICptZ3I6ICAgICAgICAgICBQdHIgdG8gbG9jYXRpb24gdG8gc3RvcmUgaGFuZGxlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGhkZXZfb2JqLgorICogIFJlcXVpcmVzOgorICogICAgICBtZ3IgIT0gTlVMTC4KKyAqICAgICAgREVWIEluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAgICAgICAqbWdyIGNvbnRhaW5zIGEgaGFuZGxlIHRvIGEgY2hhbm5lbCBtYW5hZ2VyIG9iamVjdCwKKyAqICAgICAgICAgICAgICAgICAgICAgIG9yIE5VTEwuCisgKiAgICAgIGVsc2U6ICAgICAgICAgICAqbWdyIGlzIE5VTEwuCisgKi8KK2V4dGVybiBpbnQgZGV2X2dldF9jaG5sX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkJICAgc3RydWN0IGNobmxfbWdyICoqbWdyKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfZ2V0X2NtbV9tZ3IgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgaGFuZGxlIHRvIHRoZSBzaGFyZWQgbWVtb3J5IG1hbmFnZXIgY3JlYXRlZCBmb3IgdGhpcworICogICAgICBkZXZpY2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGRldl9vYmo6ICAgICBIYW5kbGUgdG8gZGV2aWNlIG9iamVjdCBjcmVhdGVkIHdpdGgKKyAqICAgICAgICAgICAgICAgICAgICAgIGRldl9jcmVhdGVfZGV2aWNlKCkuCisgKiAgICAgICptZ3I6ICAgICAgICAgICBQdHIgdG8gbG9jYXRpb24gdG8gc3RvcmUgaGFuZGxlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGhkZXZfb2JqLgorICogIFJlcXVpcmVzOgorICogICAgICBtZ3IgIT0gTlVMTC4KKyAqICAgICAgREVWIEluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAgICAgICAqbWdyIGNvbnRhaW5zIGEgaGFuZGxlIHRvIGEgY2hhbm5lbCBtYW5hZ2VyIG9iamVjdCwKKyAqICAgICAgICAgICAgICAgICAgICAgIG9yIE5VTEwuCisgKiAgICAgIGVsc2U6ICAgICAgICAgICAqbWdyIGlzIE5VTEwuCisgKi8KK2V4dGVybiBpbnQgZGV2X2dldF9jbW1fbWdyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCQkgIHN0cnVjdCBjbW1fb2JqZWN0ICoqbWdyKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfZ2V0X2RtbV9tZ3IgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgaGFuZGxlIHRvIHRoZSBkeW5hbWljIG1lbW9yeSBtYW5hZ2VyIGNyZWF0ZWQgZm9yIHRoaXMKKyAqICAgICAgZGV2aWNlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhkZXZfb2JqOiAgICAgSGFuZGxlIHRvIGRldmljZSBvYmplY3QgY3JlYXRlZCB3aXRoCisgKiAgICAgICAgICAgICAgICAgICAgICBkZXZfY3JlYXRlX2RldmljZSgpLgorICogICAgICAqbWdyOiAgICAgICAgICAgUHRyIHRvIGxvY2F0aW9uIHRvIHN0b3JlIGhhbmRsZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBoZGV2X29iai4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgbWdyICE9IE5VTEwuCisgKiAgICAgIERFViBJbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgKm1nciBjb250YWlucyBhIGhhbmRsZSB0byBhIGNoYW5uZWwgbWFuYWdlciBvYmplY3QsCisgKiAgICAgICAgICAgICAgICAgICAgICBvciBOVUxMLgorICogICAgICBlbHNlOiAgICAgICAgICAgKm1nciBpcyBOVUxMLgorICovCitleHRlcm4gaW50IGRldl9nZXRfZG1tX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkJICBzdHJ1Y3QgZG1tX29iamVjdCAqKm1ncik7CisKKy8qCisgKiAgPT09PT09PT0gZGV2X2dldF9jb2RfbWdyID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIENPRCBtYW5hZ2VyIGNyZWF0ZSBmb3IgdGhpcyBkZXZpY2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGRldl9vYmo6ICAgICBIYW5kbGUgdG8gZGV2aWNlIG9iamVjdCBjcmVhdGVkIHdpdGgKKyAqICAgICAgICAgICAgICAgICAgICAgIGRldl9jcmVhdGVfZGV2aWNlKCkuCisgKiAgICAgICpjb2RfbWdyOiAgICAgICBQdHIgdG8gbG9jYXRpb24gdG8gc3RvcmUgaGFuZGxlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGhkZXZfb2JqLgorICogIFJlcXVpcmVzOgorICogICAgICBjb2RfbWdyICE9IE5VTEwuCisgKiAgICAgIERFViBJbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgKmNvZF9tZ3IgY29udGFpbnMgYSBoYW5kbGUgdG8gYSBDT0QgbWFuYWdlciBvYmplY3QuCisgKiAgICAgIGVsc2U6ICAgICAgICAgICAqY29kX21nciBpcyBOVUxMLgorICovCitleHRlcm4gaW50IGRldl9nZXRfY29kX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkJICBzdHJ1Y3QgY29kX21hbmFnZXIgKipjb2RfbWdyKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfZ2V0X2RlaF9tZ3IgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgREVIIG1hbmFnZXIgY3JlYXRlZCBmb3IgdGhpcyBkZXZpY2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGRldl9vYmo6IEhhbmRsZSB0byBkZXZpY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aCBkZXZfY3JlYXRlX2RldmljZSgpLgorICogICAgICAqZGVoX21hbmFnZXI6ICBQdHIgdG8gbG9jYXRpb24gdG8gc3RvcmUgaGFuZGxlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6ICAgSW52YWxpZCBoZGV2X29iai4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGVoX21hbmFnZXIgIT0gTlVMTC4KKyAqICAgICAgREVIIEluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAgICpkZWhfbWFuYWdlciBjb250YWlucyBhIGhhbmRsZSB0byBhIERFSCBtYW5hZ2VyIG9iamVjdC4KKyAqICAgICAgZWxzZTogICAgICAgKmRlaF9tYW5hZ2VyIGlzIE5VTEwuCisgKi8KK2V4dGVybiBpbnQgZGV2X2dldF9kZWhfbWdyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCQkgIHN0cnVjdCBkZWhfbWdyICoqZGVoX21hbmFnZXIpOworCisvKgorICogID09PT09PT09IGRldl9nZXRfZGV2X25vZGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgZGV2aWNlIElEIGZvciB0aGlzIGRldmljZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoZGV2X29iajogICAgIEhhbmRsZSB0byBkZXZpY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aAorICogICAgICAgICAgICAgICAgICAgICAgZGV2X2NyZWF0ZV9kZXZpY2UoKS4KKyAqICAgICAgZGV2X25kZTogICAgICAgIFB0ciB0byBsb2NhdGlvbiB0byBnZXQgdGhlIGRldmljZSBub2RlIGhhbmRsZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgUmV0dXJucyBhIERFVk5PREUgaW4gKmRldl9ub2RlX29iai4KKyAqICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBoZGV2X29iai4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGV2X25kZSAhPSBOVUxMLgorICogICAgICBERVYgSW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgICpkZXZfbmRlIGNvbnRhaW5zIGEgcGxhdGZvcm0gc3BlY2lmaWMgZGV2aWNlIElEOworICogICAgICBlbHNlOiAgICAgICAgICAgKmRldl9uZGUgaXMgTlVMTC4KKyAqLworZXh0ZXJuIGludCBkZXZfZ2V0X2Rldl9ub2RlKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCQkgICBzdHJ1Y3QgY2ZnX2Rldm5vZGUgKipkZXZfbmRlKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfZ2V0X2Rldl90eXBlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIHBsYXRmb3JtIHNwZWNpZmljIGRldmljZSBJRCBmb3IgdGhpcyBkZXZpY2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGRldl9vYmo6ICAgICBIYW5kbGUgdG8gZGV2aWNlIG9iamVjdCBjcmVhdGVkIHdpdGgKKyAqICAgICAgICAgICAgICAgICAgICAgIGRldl9jcmVhdGVfZGV2aWNlKCkuCisgKiAgICAgIGRldl9uZGU6ICAgICAgICBQdHIgdG8gbG9jYXRpb24gdG8gZ2V0IHRoZSBkZXZpY2Ugbm9kZSBoYW5kbGUuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MKKyAqICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBoZGV2X29iai4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGV2X25kZSAhPSBOVUxMLgorICogICAgICBERVYgSW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgICpkZXZfbmRlIGNvbnRhaW5zIGEgcGxhdGZvcm0gc3BlY2lmaWMgZGV2aWNlIElEOworICogICAgICBlbHNlOiAgICAgICAgICAgKmRldl9uZGUgaXMgTlVMTC4KKyAqLworZXh0ZXJuIGludCBkZXZfZ2V0X2Rldl90eXBlKHN0cnVjdCBkZXZfb2JqZWN0ICpkZXZpY2Vfb2JqLAorCQkJCQl1OCAqZGV2X3R5cGUpOworCisvKgorICogID09PT09PT09IGRldl9nZXRfZmlyc3QgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgZmlyc3QgRGV2aWNlIE9iamVjdCBoYW5kbGUgZnJvbSBhbiBpbnRlcm5hbCBsaW5rZWQgbGlzdCBvZgorICogICAgICBvZiBERVZfT0JKRUNUcyBtYWludGFpbmVkIGJ5IERFVi4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgICAgIE5VTEwgaWYgdGhlcmUgYXJlIG5vIGRldmljZSBvYmplY3RzIHN0b3JlZDsgZWxzZQorICogICAgICBhIHZhbGlkIERFVl9IT0JKRUNULgorICogIFJlcXVpcmVzOgorICogICAgICBObyBjYWxscyB0byBkZXZfY3JlYXRlX2RldmljZSBvciBkZXZfZGVzdHJveV9kZXZpY2UgKHdoaWNoIG15IG1vZGlmeSB0aGUKKyAqICAgICAgaW50ZXJuYWwgZGV2aWNlIG9iamVjdCBsaXN0KSBtYXkgb2NjdXIgYmV0d2VlbiBjYWxscyB0byBkZXZfZ2V0X2ZpcnN0CisgKiAgICAgIGFuZCBkZXZfZ2V0X25leHQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgVGhlIERFVl9IT0JKRUNUIHJldHVybmVkIGlzIHZhbGlkLgorICogICAgICBBIHN1YnNlcXVlbnQgY2FsbCB0byBkZXZfZ2V0X25leHQgd2lsbCByZXR1cm4gdGhlIG5leHQgZGV2aWNlIG9iamVjdCBpbgorICogICAgICB0aGUgbGlzdC4KKyAqLworZXh0ZXJuIHN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfZ2V0X2ZpcnN0KHZvaWQpOworCisvKgorICogID09PT09PT09IGRldl9nZXRfaW50Zl9meG5zID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIEJyaWRnZSBkcml2ZXIgaW50ZXJmYWNlIGZ1bmN0aW9uIHN0cnVjdHVyZSBmb3IgdGhlCisgKiAgICAgIGxvYWRlZCBCcmlkZ2UgZHJpdmVyLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhkZXZfb2JqOiAgICAgSGFuZGxlIHRvIGRldmljZSBvYmplY3QgY3JlYXRlZCB3aXRoCisgKiAgICAgICAgICAgICAgICAgICAgICBkZXZfY3JlYXRlX2RldmljZSgpLgorICogICAgICAqaWZfZnhuczogICAgICAgUHRyIHRvIGxvY2F0aW9uIHRvIHN0b3JlIGZ4biBpbnRlcmZhY2UuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6ICAgIEludmFsaWQgaGRldl9vYmouCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGlmX2Z4bnMgIT0gTlVMTC4KKyAqICAgICAgREVWIEluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAgICAgICAqaWZfZnhucyBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlIEJyaWRnZQorICogICAgICAgICAgICAgICAgICAgICAgZHJpdmVyIGludGVyZmFjZTsKKyAqICAgICAgZWxzZTogICAgICAgICAgICppZl9meG5zIGlzIE5VTEwuCisgKi8KK2V4dGVybiBpbnQgZGV2X2dldF9pbnRmX2Z4bnMoc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAorCQkJICAgIHN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqKmlmX2Z4bnMpOworCisvKgorICogID09PT09PT09IGRldl9nZXRfaW9fbWdyID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIGhhbmRsZSB0byB0aGUgSU8gbWFuYWdlciBjcmVhdGVkIGZvciB0aGlzIGRldmljZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoZGV2X29iajogICAgIEhhbmRsZSB0byBkZXZpY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aAorICogICAgICAgICAgICAgICAgICAgICAgZGV2X2NyZWF0ZV9kZXZpY2UoKS4KKyAqICAgICAgKm1ncjogICAgICAgICAgIFB0ciB0byBsb2NhdGlvbiB0byBzdG9yZSBoYW5kbGUuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6ICAgIEludmFsaWQgaGRldl9vYmouCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIG1nciAhPSBOVUxMLgorICogICAgICBERVYgSW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgICptZ3IgY29udGFpbnMgYSBoYW5kbGUgdG8gYW4gSU8gbWFuYWdlciBvYmplY3QuCisgKiAgICAgIGVsc2U6ICAgICAgICAgICAqbWdyIGlzIE5VTEwuCisgKi8KK2V4dGVybiBpbnQgZGV2X2dldF9pb19tZ3Ioc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAorCQkJCSBzdHJ1Y3QgaW9fbWdyICoqbWdyKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfZ2V0X25leHQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgbmV4dCBEZXZpY2UgT2JqZWN0IGhhbmRsZSBmcm9tIGFuIGludGVybmFsIGxpbmtlZCBsaXN0IG9mCisgKiAgICAgIG9mIERFVl9PQkpFQ1RzIG1haW50YWluZWQgYnkgREVWLCBhZnRlciBoYXZpbmcgcHJldmlvdXNseSBjYWxsZWQKKyAqICAgICAgZGV2X2dldF9maXJzdCgpIGFuZCB6ZXJvIG9yIG1vcmUgZGV2X2dldF9uZXh0CisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGRldl9vYmo6IEhhbmRsZSB0byB0aGUgZGV2aWNlIG9iamVjdCByZXR1cm5lZCBmcm9tIGEgcHJldmlvdXMKKyAqICAgICAgICAgICAgICAgICAgY2FsbCB0byBkZXZfZ2V0X2ZpcnN0KCkgb3IgZGV2X2dldF9uZXh0KCkuCisgKiAgUmV0dXJuczoKKyAqICAgICAgTlVMTCBpZiB0aGVyZSBhcmUgbm8gZnVydGhlciBkZXZpY2Ugb2JqZWN0cyBvbiB0aGUgbGlzdCBvciBoZGV2X29iagorICogICAgICB3YXMgaW52YWxpZDsKKyAqICAgICAgZWxzZSB0aGUgbmV4dCB2YWxpZCBERVZfSE9CSkVDVCBpbiB0aGUgbGlzdC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgTm8gY2FsbHMgdG8gZGV2X2NyZWF0ZV9kZXZpY2Ugb3IgZGV2X2Rlc3Ryb3lfZGV2aWNlICh3aGljaCBteSBtb2RpZnkgdGhlCisgKiAgICAgIGludGVybmFsIGRldmljZSBvYmplY3QgbGlzdCkgbWF5IG9jY3VyIGJldHdlZW4gY2FsbHMgdG8gZGV2X2dldF9maXJzdAorICogICAgICBhbmQgZGV2X2dldF9uZXh0LgorICogIEVuc3VyZXM6CisgKiAgICAgIFRoZSBERVZfSE9CSkVDVCByZXR1cm5lZCBpcyB2YWxpZC4KKyAqICAgICAgQSBzdWJzZXF1ZW50IGNhbGwgdG8gZGV2X2dldF9uZXh0IHdpbGwgcmV0dXJuIHRoZSBuZXh0IGRldmljZSBvYmplY3QgaW4KKyAqICAgICAgdGhlIGxpc3QuCisgKi8KK2V4dGVybiBzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X2dldF9uZXh0KHN0cnVjdCBkZXZfb2JqZWN0CisJCQkJICAgICAgICpoZGV2X29iaik7CisKKy8qCisgKiAgPT09PT09PT09IGRldl9nZXRfbXNnX21nciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIHRoZSBtc2dfY3RybCBNYW5hZ2VyIEhhbmRsZSBmcm9tIHRoZSBEZXZPYmplY3QuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGRldl9vYmo6IEhhbmRsZSB0byB0aGUgRGV2IE9iamVjdAorICogICAgICBtc2dfbWFuOiAgICBMb2NhdGlvbiB3aGVyZSBtc2dfY3RybCBNYW5hZ2VyIGhhbmRsZSB3aWxsIGJlIHJldHVybmVkLgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIERFViBJbml0aWFsaXplZC4KKyAqICAgICAgVmFsaWQgaGRldl9vYmouCisgKiAgICAgIG5vZGVfbWFuICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIHZvaWQgZGV2X2dldF9tc2dfbWdyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCSAgICBzdHJ1Y3QgbXNnX21nciAqKm1zZ19tYW4pOworCisvKgorICogID09PT09PT09PSBkZXZfZ2V0X25vZGVfbWFuYWdlciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIHRoZSBOb2RlIE1hbmFnZXIgSGFuZGxlIGZyb20gdGhlIERldk9iamVjdC4gSXQgaXMgYW4KKyAqICAgICAgYWNjZXNzb3IgZnVuY3Rpb24KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoZGV2X29iajogICAgIEhhbmRsZSB0byB0aGUgRGV2IE9iamVjdAorICogICAgICBub2RlX21hbjogICAgICAgTG9jYXRpb24gd2hlcmUgSGFuZGxlIHRvIHRoZSBOb2RlIE1hbmFnZXIgd2lsbCBiZQorICogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQuLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzCisgKiAgICAgIC1FRkFVTFQ6ICAgIEludmFsaWQgRGV2IE9iamVjdCBoYW5kbGUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIERFViBJbml0aWFsaXplZC4KKyAqICAgICAgbm9kZV9tYW4gaXMgbm90IG51bGwKKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgKm5vZGVfbWFuIGNvbnRhaW5zIGEgaGFuZGxlIHRvIGEgTm9kZSBtYW5hZ2VyIG9iamVjdC4KKyAqICAgICAgZWxzZTogICAgICAgICAgICpub2RlX21hbiBpcyBOVUxMLgorICovCitleHRlcm4gaW50IGRldl9nZXRfbm9kZV9tYW5hZ2VyKHN0cnVjdCBkZXZfb2JqZWN0CisJCQkJICAgICAgICpoZGV2X29iaiwKKwkJCQkgICAgICAgc3RydWN0IG5vZGVfbWdyICoqbm9kZV9tYW4pOworCisvKgorICogID09PT09PT09IGRldl9nZXRfc3ltYm9sID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgR2V0IHRoZSB2YWx1ZSBvZiBhIHN5bWJvbCBpbiB0aGUgY3VycmVudGx5IGxvYWRlZCBwcm9ncmFtLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhkZXZfb2JqOiAgICAgSGFuZGxlIHRvIGRldmljZSBvYmplY3QgY3JlYXRlZCB3aXRoCisgKiAgICAgICAgICAgICAgICAgICAgICBkZXZfY3JlYXRlX2RldmljZSgpLgorICogICAgICBzdHJfc3ltOiAgICAgICAgTmFtZSBvZiBzeW1ib2wgdG8gbG9vayB1cC4KKyAqICAgICAgcHVsX3ZhbHVlOiAgICAgICBQdHIgdG8gc3ltYm9sIHZhbHVlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGhkZXZfb2JqLgorICogICAgICAtRVNQSVBFOiBTeW1ib2xzIGNvdWxkbiBub3QgYmUgZm91bmQgb3IgaGF2ZSBub3QgYmVlbiBsb2FkZWQgb250bworICogICAgICAgICAgICAgICB0aGUgYm9hcmQuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIHN0cl9zeW0gIT0gTlVMTC4KKyAqICAgICAgcHVsX3ZhbHVlICE9IE5VTEwuCisgKiAgICAgIERFViBJbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgKnB1bF92YWx1ZSBjb250YWlucyB0aGUgc3ltYm9sIHZhbHVlOworICovCitleHRlcm4gaW50IGRldl9nZXRfc3ltYm9sKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCQkgY29uc3QgY2hhciAqc3RyX3N5bSwgdTMyICogcHVsX3ZhbHVlKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfZ2V0X2JyaWRnZV9jb250ZXh0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIEJyaWRnZSBDb250ZXh0IGhhbmRsZSwgYXMgcmV0dXJuZWQgYnkgdGhlCisgKiAgICAgIGJyaWRnZV9kZXZfY3JlYXRlIGZ4bi4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoZGV2X29iajogICAgIEhhbmRsZSB0byBkZXZpY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aCBkZXZfY3JlYXRlX2RldmljZSgpCisgKiAgICAgICpwaGJyaWRnZV9jb250ZXh0OiAgUHRyIHRvIGxvY2F0aW9uIHRvIHN0b3JlIGNvbnRleHQgaGFuZGxlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGhkZXZfb2JqLgorICogIFJlcXVpcmVzOgorICogICAgICBwaGJyaWRnZV9jb250ZXh0ICE9IE5VTEwuCisgKiAgICAgIERFViBJbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgKnBoYnJpZGdlX2NvbnRleHQgY29udGFpbnMgY29udGV4dCBoYW5kbGU7CisgKiAgICAgIGVsc2U6ICAgICAgICAgICAqcGhicmlkZ2VfY29udGV4dCBpcyBOVUxMOworICovCitleHRlcm4gaW50IGRldl9nZXRfYnJpZGdlX2NvbnRleHQoc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAorCQkJCSAgICAgIHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQKKwkJCQkgICAgICAqKnBoYnJpZGdlX2NvbnRleHQpOworCisvKgorICogID09PT09PT09IGRldl9leGl0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGVjcmVtZW50IHJlZmVyZW5jZSBjb3VudCwgYW5kIGZyZWUgcmVzb3VyY2VzIHdoZW4gcmVmZXJlbmNlIGNvdW50IGlzCisgKiAgICAgIDAuCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBERVYgaXMgaW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgV2hlbiByZWZlcmVuY2UgY291bnQgPT0gMCwgREVWJ3MgcHJpdmF0ZSByZXNvdXJjZXMgYXJlIGZyZWVkLgorICovCitleHRlcm4gdm9pZCBkZXZfZXhpdCh2b2lkKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfaW5pdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEluaXRpYWxpemUgREVWJ3MgcHJpdmF0ZSBzdGF0ZSwga2VlcGluZyBhIHJlZmVyZW5jZSBjb3VudCBvbiBlYWNoIGNhbGwuCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogICAgICBUUlVFIGlmIGluaXRpYWxpemVkOyBGQUxTRSBpZiBlcnJvciBvY2N1cmVkLgorICogIFJlcXVpcmVzOgorICogIEVuc3VyZXM6CisgKiAgICAgIFRSVUU6IEEgcmVxdWlyZW1lbnQgZm9yIHRoZSBvdGhlciBwdWJsaWMgREVWIGZ1bmN0aW9ucy4KKyAqLworZXh0ZXJuIGJvb2wgZGV2X2luaXQodm9pZCk7CisKKy8qCisgKiAgPT09PT09PT0gZGV2X2lzX2xvY2tlZCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFByZWRpY2F0ZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgdGhlIGRldmljZSBoYXMgYmVlbgorICogICAgICBsb2NrZWQgYnkgYSBjbGllbnQgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGRldl9vYmo6ICAgICBIYW5kbGUgdG8gZGV2aWNlIG9iamVjdCBjcmVhdGVkIHdpdGgKKyAqICAgICAgICAgICAgICAgICAgICAgIGRldl9jcmVhdGVfZGV2aWNlKCkuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFRSVUU6IGRldmljZSBoYXMgYmVlbiBsb2NrZWQuCisgKiAgICAgIDA6ICAgICBGQUxTRTogZGV2aWNlIG5vdCBsb2NrZWQuCisgKiAgICAgIC1FRkFVTFQ6ICAgIGhkZXZfb2JqIHdhcyBpbnZhbGlkLgorICogIFJlcXVpcmVzOgorICogICAgICBERVYgSW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBkZXZfaXNfbG9ja2VkKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaik7CisKKy8qCisgKiAgPT09PT09PT0gZGV2X2luc2VydF9wcm9jX29iamVjdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEluc2VydHMgdGhlIFByb2Nlc3NvciBPYmplY3QgaW50byB0aGUgTGlzdCBvZiBQUk9DIE9iamVjdHMKKyAqICAgICAga2VwdCBpbiB0aGUgREVWIE9iamVjdAorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIHByb2Nfb2JqOiAgICBIYW5kbGUgdG8gdGhlIFByb2MgT2JqZWN0CisgKiAgICAgIGhkZXZfb2JqICAgICAgSGFuZGxlIHRvIHRoZSBEZXYgT2JqZWN0CisgKiAgICAgIGJBdHRhY2hlZE5ldyAgICBTcGVjaWZpZXMgaWYgdGhlcmUgYXJlIGFscmVhZHkgcHJvY2Vzc29ycyBhdHRhY2hlZAorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzZnVsbHkgaW5zZXJ0ZWQgaW50byB0aGUgbGlzdAorICogIFJlcXVpcmVzOgorICogICAgICBwcm9jX29iaiBpcyBub3QgTlVMTAorICogICAgICBoZGV2X29iaiBpcyBhIHZhbGlkIGhhbmRsZSB0byB0aGUgREVWLgorICogICAgICBERVYgSW5pdGlhbGl6ZWQuCisgKiAgICAgIExpc3Qob2YgUHJvYyBvYmplY3QgaW4gRGV2KSBFeGlzdHMuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMCAmIHRoZSBQUk9DIE9iamVjdCBpcyBpbnNlcnRlZCBhbmQgdGhlIGxpc3QgaXMgbm90IGVtcHR5CisgKiAgRGV0YWlsczoKKyAqICAgICAgSWYgdGhlIExpc3Qgb2YgUHJvYyBPYmplY3QgaXMgZW1wdHkgYkF0dGFjaGVkTmV3IGlzIFRSVUUsIGl0IGluZGljYXRlZAorICogICAgICB0aGlzIGlzIHRoZSBmaXJzdCBQcm9jZXNzb3IgYXR0YWNoaW5nLgorICogICAgICBJZiBpdCBpcyBGYWxzZSwgdGhlcmUgYXJlIGFscmVhZHkgcHJvY2Vzc29ycyBhdHRhY2hlZC4KKyAqLworZXh0ZXJuIGludCBkZXZfaW5zZXJ0X3Byb2Nfb2JqZWN0KHN0cnVjdCBkZXZfb2JqZWN0CisJCQkJCSAqaGRldl9vYmosCisJCQkJCSB1MzIgcHJvY19vYmosCisJCQkJCSBib29sICphbHJlYWR5X2F0dGFjaGVkKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfcmVtb3ZlX3Byb2Nfb2JqZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgU2VhcmNoIGZvciBhbmQgcmVtb3ZlIGEgUHJvYyBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gbGlzdCBtYWludGFpbmVkCisgKiAgICAgIGJ5IHRoZSBERVYKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBwX3Byb2Nfb2JqZWN0OiAgICAgICAgUHRyIHRvIFByb2NPYmplY3QgdG8gaW5zZXJ0LgorICogICAgICBkZXZfb2JqOiAgICAgICAgIFB0ciB0byBEZXYgT2JqZWN0IHdoZXJlIHRoZSBsaXN0IGlzLgorICogICAgICBhbHJlYWR5X2F0dGFjaGVkOiAgUHRyIHRvIHJldHVybiB0aGUgYm9vbAorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgSWYgc3VjY2Vzc2Z1bC4KKyAqICAgICAgLUVQRVJNICAgICAgICAgICBGYWlsdXJlIHRvIFJlbW92ZSB0aGUgUFJPQyBPYmplY3QgZnJvbSB0aGUgbGlzdAorICogIFJlcXVpcmVzOgorICogICAgICBEZXZPYmplY3QgaXMgVmFsaWQKKyAqICAgICAgcHJvY19vYmogIT0gMAorICogICAgICBkZXZfb2JqLT5wcm9jX2xpc3QgIT0gTlVMTAorICogICAgICAhTFNUX0lTX0VNUFRZKGRldl9vYmotPnByb2NfbGlzdCkKKyAqICAgICAgYWxyZWFkeV9hdHRhY2hlZCAhPU5VTEwKKyAqICBFbnN1cmVzOgorICogIERldGFpbHM6CisgKiAgICAgIExpc3Qgd2lsbCBiZSBkZWxldGVkIHdoZW4gdGhlIERFViBpcyBkZXN0cm95ZWQuCisgKgorICovCitleHRlcm4gaW50IGRldl9yZW1vdmVfcHJvY19vYmplY3Qoc3RydWN0IGRldl9vYmplY3QKKwkJCQkJICpoZGV2X29iaiwgdTMyIHByb2Nfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfbm90aWZ5X2NsaWVudHMgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBOb3RpZnkgYWxsIGNsaWVudHMgb2YgdGhpcyBkZXZpY2Ugb2YgYSBjaGFuZ2UgaW4gZGV2aWNlIHN0YXR1cy4KKyAqICAgICAgQ2xpZW50cyBtYXkgaW5jbHVkZSBtdWx0aXBsZSB1c2VycyBvZiBCUkQsIGFzIHdlbGwgYXMgQ0hOTC4KKyAqICAgICAgVGhpcyBmdW5jdGlvbiBpcyBhc3ljaHJvbm91cywgYW5kIG1heSBiZSBjYWxsZWQgYnkgYSB0aW1lciBldmVudAorICogICAgICBzZXQgdXAgYnkgYSB3YXRjaGRvZyB0aW1lci4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoZGV2X29iajogIEhhbmRsZSB0byBkZXZpY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aCBkZXZfY3JlYXRlX2RldmljZSgpLgorICogICAgICByZXQ6ICAgICAgICAgQSBzdGF0dXMgd29yZCwgbW9zdCBsaWtlbHkgYSBCUkRfU1RBVFVTLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICBBbGwgcmVnaXN0ZXJlZCBjbGllbnRzIHdlcmUgYXN5bmNocm9ub3VzbHkgbm90aWZpZWQuCisgKiAgICAgIC1FSU5WQUw6ICAgSW52YWxpZCBoZGV2X29iai4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgREVWIEluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6IE5vdGlmaWNhdGlvbnMgYXJlIHF1ZXVlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSB0byBiZQorICogICAgICBkZWxpdmVyZWQgdG8gY2xpZW50cy4gIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgZW5zdXJlIHRoYXQKKyAqICAgICAgdGhlIG5vdGlmaWNhdGlvbnMgd2lsbCBldmVyIGJlIGRlbGl2ZXJlZC4KKyAqLworZXh0ZXJuIGludCBkZXZfbm90aWZ5X2NsaWVudHMoc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLCB1MzIgcmV0KTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfcmVtb3ZlX2RldmljZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERlc3Ryb3lzIHRoZSBEZXZpY2UgT2JqZWN0IGNyZWF0ZWQgYnkgZGV2X3N0YXJ0X2RldmljZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkZXZfbm9kZV9vYmo6ICAgICAgIERldmljZSBub2RlIGFzIGl0IGlzIGtub3cgdG8gT1MuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIElmIHN1Y2Nlc3M7CisgKiAgICAgIDxlcnJvciBjb2RlPiAgICBPdGhlcndpc2UuCisgKiAgUmVxdWlyZXM6CisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBkZXZfcmVtb3ZlX2RldmljZShzdHJ1Y3QgY2ZnX2Rldm5vZGUgKmRldl9ub2RlX29iaik7CisKKy8qCisgKiAgPT09PT09PT0gZGV2X3NldF9jaG5sX21nciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFNldCB0aGUgY2hhbm5lbCBtYW5hZ2VyIGZvciB0aGlzIGRldmljZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoZGV2X29iajogICAgIEhhbmRsZSB0byBkZXZpY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aAorICogICAgICAgICAgICAgICAgICAgICAgZGV2X2NyZWF0ZV9kZXZpY2UoKS4KKyAqICAgICAgaG1ncjogICAgICAgICAgIEhhbmRsZSB0byBhIGNoYW5uZWwgbWFuYWdlciwgb3IgTlVMTC4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBoZGV2X29iai4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgREVWIEluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgZGV2X3NldF9jaG5sX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkJICAgc3RydWN0IGNobmxfbWdyICpobWdyKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfc2V0X21zZ19tZ3IgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTZXQgdGhlIE1lc3NhZ2UgbWFuYWdlciBmb3IgdGhpcyBkZXZpY2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGRldl9vYmo6IEhhbmRsZSB0byBkZXZpY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aCBkZXZfY3JlYXRlX2RldmljZSgpLgorICogICAgICBobWdyOiAgICAgICBIYW5kbGUgdG8gYSBtZXNzYWdlIG1hbmFnZXIsIG9yIE5VTEwuCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgREVWIEluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiB2b2lkIGRldl9zZXRfbXNnX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosIHN0cnVjdCBtc2dfbWdyICpobWdyKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfc3RhcnRfZGV2aWNlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZXMgdGhlIG5ldyBkZXZpY2Ugd2l0aCBicmlkZ2UgZW52aXJvbm1lbnQuICBUaGlzIGludm9sdmVzCisgKiAgICAgIHF1ZXJ5aW5nIENNIGZvciBhbGxvY2F0ZWQgcmVzb3VyY2VzLCBxdWVyeWluZyB0aGUgcmVnaXN0cnkgZm9yCisgKiAgICAgIG5lY2Vzc2FyeSBkc3AgcmVzb3VyY2VzIChyZXF1ZXN0ZWQgaW4gdGhlIElORiBmaWxlKSwgYW5kIHVzaW5nIHRoaXMKKyAqICAgICAgaW5mb3JtYXRpb24gdG8gY3JlYXRlIGEgYnJpZGdlIGRldmljZSBvYmplY3QuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgZGV2X25vZGVfb2JqOiAgICAgICBEZXZpY2Ugbm9kZSBhcyBpdCBpcyBrbm93IHRvIE9TLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBJZiBzdWNjZXNzOworICogICAgICA8ZXJyb3IgY29kZT4gICAgT3RoZXJ3aXNlLgorICogIFJlcXVpcmVzOgorICogICAgICBERVYgaW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBkZXZfc3RhcnRfZGV2aWNlKHN0cnVjdCBjZmdfZGV2bm9kZSAqZGV2X25vZGVfb2JqKTsKKworI2VuZGlmIC8qIERFVl8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kZXZkZWZzLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZGV2ZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZjkyNDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZGV2ZGVmcy5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBkZXZkZWZzLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogRGVmaW5pdGlvbiBvZiBjb21tb24gaW5jbHVkZSB0eXBlZGVmIGJldHdlZW4gZHNwZGVmcy5oIGFuZCBkZXYuaC4gUmVxdWlyZWQKKyAqIHRvIGJyZWFrIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbiBCcmlkZ2UgZHJpdmVyIGFuZCBERVYgaW5jbHVkZSBmaWxlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBERVZERUZTXworI2RlZmluZSBERVZERUZTXworCisvKiBCcmlkZ2UgRGV2aWNlIE9iamVjdCAqLworc3RydWN0IGRldl9vYmplY3Q7CisKKyNlbmRpZiAvKiBERVZERUZTXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2Rpc3AuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kaXNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJiZjcyMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kaXNwLmgKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisgKiBkaXNwLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogRFNQL0JJT1MgQnJpZGdlIE5vZGUgRGlzcGF0Y2hlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIERJU1BfCisjZGVmaW5lIERJU1BfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL25vZGVkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL25vZGVwcml2Lmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rpc3BkZWZzLmg+CisKKy8qCisgKiAgPT09PT09PT0gZGlzcF9jcmVhdGUgPT09PT09PT0KKyAqICBDcmVhdGUgYSBOT0RFIERpc3BhdGNoZXIgb2JqZWN0LiBUaGlzIG9iamVjdCBoYW5kbGVzIHRoZSBjcmVhdGlvbiwKKyAqICBkZWxldGlvbiwgYW5kIGV4ZWN1dGlvbiBvZiBub2RlcyBvbiB0aGUgRFNQIHRhcmdldCwgdGhyb3VnaCBjb21tdW5pY2F0aW9uCisgKiAgd2l0aCB0aGUgUmVzb3VyY2UgTWFuYWdlciBTZXJ2ZXIgcnVubmluZyBvbiB0aGUgdGFyZ2V0LiBFYWNoIE5PREUKKyAqICBNYW5hZ2VyIG9iamVjdCBzaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBOT0RFIERpc3BhdGNoZXIuCisgKgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGRpc3BhdGNoX29iajogICBMb2NhdGlvbiB0byBzdG9yZSBub2RlIGRpc3BhdGNoZXIgb2JqZWN0IG9uIG91dHB1dC4KKyAqICAgICAgaGRldl9vYmo6ICAgICBEZXZpY2UgZm9yIHRoaXMgcHJvY2Vzc29yLgorICogICAgICBkaXNwX2F0dHJzOiAgICAgTm9kZSBkaXNwYXRjaGVyIGF0dHJpYnV0ZXMuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICAgICAgU3VjY2VzczsKKyAqICAgICAgLUVOT01FTTogICAgICAgICAgICBJbnN1ZmZpY2llbnQgbWVtb3J5IGZvciByZXF1ZXN0ZWQgcmVzb3VyY2VzLgorICogICAgICAtRVBFUk06ICAgICAgICAgICAgICBVbmFibGUgdG8gY3JlYXRlIGRpc3BhdGNoZXIuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGRpc3BfaW5pdCh2b2lkKSBjYWxsZWQuCisgKiAgICAgIGRpc3BfYXR0cnMgIT0gTlVMTC4KKyAqICAgICAgaGRldl9vYmogIT0gTlVMTC4KKyAqICAgICAgZGlzcGF0Y2hfb2JqICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgIElTX1ZBTElEKCpkaXNwYXRjaF9vYmopLgorICogICAgICBlcnJvcjogICAgICAgICAgKmRpc3BhdGNoX29iaiA9PSBOVUxMLgorICovCitleHRlcm4gaW50IGRpc3BfY3JlYXRlKHN0cnVjdCBkaXNwX29iamVjdCAqKmRpc3BhdGNoX29iaiwKKwkJCSAgICAgIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBkaXNwX2F0dHIgKmRpc3BfYXR0cnMpOworCisvKgorICogID09PT09PT09IGRpc3BfZGVsZXRlID09PT09PT09CisgKiAgRGVsZXRlIHRoZSBOT0RFIERpc3BhdGNoZXIuCisgKgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGRpc3Bfb2JqOiAgTm9kZSBEaXNwYXRjaGVyIG9iamVjdC4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBkaXNwX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBWYWxpZCBkaXNwX29iai4KKyAqICBFbnN1cmVzOgorICogICAgICBkaXNwX29iaiBpcyBpbnZhbGlkLgorICovCitleHRlcm4gdm9pZCBkaXNwX2RlbGV0ZShzdHJ1Y3QgZGlzcF9vYmplY3QgKmRpc3Bfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBkaXNwX2V4aXQgPT09PT09PT0KKyAqICBEaXNjb250aW51ZSB1c2FnZSBvZiBESVNQIG1vZHVsZS4KKyAqCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBkaXNwX2luaXQodm9pZCkgcHJldmlvdXNseSBjYWxsZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgQW55IHJlc291cmNlcyBhY3F1aXJlZCBpbiBkaXNwX2luaXQodm9pZCkgd2lsbCBiZSBmcmVlZCB3aGVuIGxhc3QgRElTUAorICogICAgICBjbGllbnQgY2FsbHMgZGlzcF9leGl0KHZvaWQpLgorICovCitleHRlcm4gdm9pZCBkaXNwX2V4aXQodm9pZCk7CisKKy8qCisgKiAgPT09PT09PT0gZGlzcF9pbml0ID09PT09PT09CisgKiAgSW5pdGlhbGl6ZSB0aGUgRElTUCBtb2R1bGUuCisgKgorICogIFBhcmFtZXRlcnM6CisgKiAgUmV0dXJuczoKKyAqICAgICAgVFJVRSBpZiBpbml0aWFsaXphdGlvbiBzdWNjZWVkZWQsIEZBTFNFIG90aGVyd2lzZS4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gYm9vbCBkaXNwX2luaXQodm9pZCk7CisKKy8qCisgKiAgPT09PT09PT0gZGlzcF9ub2RlX2NoYW5nZV9wcmlvcml0eSA9PT09PT09PQorICogIENoYW5nZSB0aGUgcHJpb3JpdHkgb2YgYSBub2RlIGN1cnJlbnRseSBydW5uaW5nIG9uIHRoZSB0YXJnZXQuCisgKgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGRpc3Bfb2JqOiAgICAgICAgICAgIE5vZGUgRGlzcGF0Y2hlciBvYmplY3QuCisgKiAgICAgIGhub2RlOiAgICAgICAgICAgICAgICAgIE5vZGUgb2JqZWN0IHJlcHJlc2VudGluZyBhIG5vZGUgY3VycmVudGx5CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRlZCBvciBydW5uaW5nIG9uIHRoZSBEU1AuCisgKiAgICAgIHVsRnhuQWRkcmVzczogICAgICAgICAgIEFkZHJlc3Mgb2YgUk1TIGZ1bmN0aW9uIGZvciBjaGFuZ2luZyBwcmlvcml0eS4KKyAqICAgICAgbm9kZV9lbnY6ICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Ygbm9kZSdzIGVudmlyb25tZW50IHN0cnVjdHVyZS4KKyAqICAgICAgcHJpbzogICAgICAgICAgICAgIE5ldyBwcmlvcml0eSBsZXZlbCB0byBzZXQgbm9kZSdzIHByaW9yaXR5IHRvLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FVElNRTogICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBiZWZvcmUgdGhlIERTUCByZXNwb25kZWQuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGRpc3BfaW5pdCh2b2lkKSBjYWxsZWQuCisgKiAgICAgIFZhbGlkIGRpc3Bfb2JqLgorICogICAgICBobm9kZSAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgZGlzcF9ub2RlX2NoYW5nZV9wcmlvcml0eShzdHJ1Y3QgZGlzcF9vYmplY3QKKwkJCQkJICAgICpkaXNwX29iaiwKKwkJCQkJICAgIHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQkJCSAgICB1MzIgcm1zX2Z4biwKKwkJCQkJICAgIG5vZGVlbnYgbm9kZV9lbnYsIHMzMiBwcmlvKTsKKworLyoKKyAqICA9PT09PT09PSBkaXNwX25vZGVfY3JlYXRlID09PT09PT09CisgKiAgQ3JlYXRlIGEgbm9kZSBvbiB0aGUgRFNQIGJ5IHJlbW90ZWx5IGNhbGxpbmcgdGhlIG5vZGUncyBjcmVhdGUgZnVuY3Rpb24uCisgKgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGRpc3Bfb2JqOiAgICBOb2RlIERpc3BhdGNoZXIgb2JqZWN0LgorICogICAgICBobm9kZTogICAgICAgICAgTm9kZSBoYW5kbGUgb2J0YWluZWQgZnJvbSBub2RlX2FsbG9jYXRlKCkuCisgKiAgICAgIHVsX2Z4bl9hZGRyOiAgICAgIEFkZHJlc3Mgb3IgUk1TIGNyZWF0ZSBub2RlIGZ1bmN0aW9uLgorICogICAgICB1bF9jcmVhdGVfZnhuOiAgICBBZGRyZXNzIG9mIG5vZGUncyBjcmVhdGUgZnVuY3Rpb24uCisgKiAgICAgIHBhcmdzOiAgICAgICAgICBBcmd1bWVudHMgdG8gcGFzcyB0byBSTVMgbm9kZSBjcmVhdGUgZnVuY3Rpb24uCisgKiAgICAgIG5vZGVfZW52OiAgICAgICBMb2NhdGlvbiB0byBzdG9yZSBub2RlIGVudmlyb25tZW50IHBvaW50ZXIgb24KKyAqICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVUSU1FOiAgIEEgdGltZW91dCBvY2N1cnJlZCBiZWZvcmUgdGhlIERTUCByZXNwb25kZWQuCisgKiAgICAgIC1FUEVSTTogICAgICBBIGZhaWx1cmUgb2NjdXJyZWQsIHVuYWJsZSB0byBjcmVhdGUgbm9kZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGlzcF9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgVmFsaWQgZGlzcF9vYmouCisgKiAgICAgIHBhcmdzICE9IE5VTEwuCisgKiAgICAgIGhub2RlICE9IE5VTEwuCisgKiAgICAgIG5vZGVfZW52ICE9IE5VTEwuCisgKiAgICAgIG5vZGVfZ2V0X3R5cGUoaG5vZGUpICE9IE5PREVfREVWSUNFLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgZGlzcF9ub2RlX2NyZWF0ZShzdHJ1Y3QgZGlzcF9vYmplY3QgKmRpc3Bfb2JqLAorCQkJCSAgIHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQkJICAgdTMyIHJtc19meG4sCisJCQkJICAgdTMyIHVsX2NyZWF0ZV9meG4sCisJCQkJICAgY29uc3Qgc3RydWN0IG5vZGVfY3JlYXRlYXJncworCQkJCSAgICpwYXJncywgbm9kZWVudiAqbm9kZV9lbnYpOworCisvKgorICogID09PT09PT09IGRpc3Bfbm9kZV9kZWxldGUgPT09PT09PT0KKyAqICBEZWxldGUgYSBub2RlIG9uIHRoZSBEU1AgYnkgcmVtb3RlbHkgY2FsbGluZyB0aGUgbm9kZSdzIGRlbGV0ZSBmdW5jdGlvbi4KKyAqCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgZGlzcF9vYmo6ICAgIE5vZGUgRGlzcGF0Y2hlciBvYmplY3QuCisgKiAgICAgIGhub2RlOiAgICAgICAgICBOb2RlIG9iamVjdCByZXByZXNlbnRpbmcgYSBub2RlIGN1cnJlbnRseQorICogICAgICAgICAgICAgICAgICAgICAgbG9hZGVkIG9uIHRoZSBEU1AuCisgKiAgICAgIHVsX2Z4bl9hZGRyOiAgICAgIEFkZHJlc3Mgb3IgUk1TIGRlbGV0ZSBub2RlIGZ1bmN0aW9uLgorICogICAgICB1bF9kZWxldGVfZnhuOiAgICBBZGRyZXNzIG9mIG5vZGUncyBkZWxldGUgZnVuY3Rpb24uCisgKiAgICAgIG5vZGVfZW52OiAgICAgICAgQWRkcmVzcyBvZiBub2RlJ3MgZW52aXJvbm1lbnQgc3RydWN0dXJlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRVRJTUU6ICAgQSB0aW1lb3V0IG9jY3VycmVkIGJlZm9yZSB0aGUgRFNQIHJlc3BvbmRlZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGlzcF9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgVmFsaWQgZGlzcF9vYmouCisgKiAgICAgIGhub2RlICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBkaXNwX25vZGVfZGVsZXRlKHN0cnVjdCBkaXNwX29iamVjdCAqZGlzcF9vYmosCisJCQkJICAgc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwKKwkJCQkgICB1MzIgcm1zX2Z4biwKKwkJCQkgICB1MzIgdWxfZGVsZXRlX2Z4biwgbm9kZWVudiBub2RlX2Vudik7CisKKy8qCisgKiAgPT09PT09PT0gZGlzcF9ub2RlX3J1biA9PT09PT09PQorICogIFN0YXJ0IGV4ZWN1dGlvbiBvZiBhIG5vZGUncyBleGVjdXRlIHBoYXNlLCBvciByZXN1bWUgZXhlY3V0aW9uIG9mIGEgbm9kZQorICogIHRoYXQgaGFzIGJlZW4gc3VzcGVuZGVkICh2aWEgRElTUF9Ob2RlUGF1c2UoKSkgb24gdGhlIERTUC4KKyAqCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgZGlzcF9vYmo6ICAgIE5vZGUgRGlzcGF0Y2hlciBvYmplY3QuCisgKiAgICAgIGhub2RlOiAgICAgICAgICBOb2RlIG9iamVjdCByZXByZXNlbnRpbmcgYSBub2RlIHRvIGJlIGV4ZWN1dGVkCisgKiAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgRFNQLgorICogICAgICB1bF9meG5fYWRkcjogICAgICBBZGRyZXNzIG9yIFJNUyBub2RlIGV4ZWN1dGUgZnVuY3Rpb24uCisgKiAgICAgIHVsX2V4ZWN1dGVfZnhuOiAgIEFkZHJlc3Mgb2Ygbm9kZSdzIGV4ZWN1dGUgZnVuY3Rpb24uCisgKiAgICAgIG5vZGVfZW52OiAgICAgICAgQWRkcmVzcyBvZiBub2RlJ3MgZW52aXJvbm1lbnQgc3RydWN0dXJlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRVRJTUU6ICAgQSB0aW1lb3V0IG9jY3VycmVkIGJlZm9yZSB0aGUgRFNQIHJlc3BvbmRlZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGlzcF9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgVmFsaWQgZGlzcF9vYmouCisgKiAgICAgIGhub2RlICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBkaXNwX25vZGVfcnVuKHN0cnVjdCBkaXNwX29iamVjdCAqZGlzcF9vYmosCisJCQkJc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwKKwkJCQl1MzIgcm1zX2Z4biwKKwkJCQl1MzIgdWxfZXhlY3V0ZV9meG4sIG5vZGVlbnYgbm9kZV9lbnYpOworCisjZW5kaWYgLyogRElTUF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kaXNwZGVmcy5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2Rpc3BkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ2NTUxYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kaXNwZGVmcy5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBkaXNwZGVmcy5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIEdsb2JhbCBESVNQIGNvbnN0YW50cyBhbmQgdHlwZXMsIHNoYXJlZCBieSBQUk9DRVNTT1IsIE5PREUsIGFuZCBESVNQLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgRElTUERFRlNfCisjZGVmaW5lIERJU1BERUZTXworCitzdHJ1Y3QgZGlzcF9vYmplY3Q7CisKKy8qIE5vZGUgRGlzcGF0Y2hlciBhdHRyaWJ1dGVzICovCitzdHJ1Y3QgZGlzcF9hdHRyIHsKKwl1MzIgdWxfY2hubF9vZmZzZXQ7CS8qIE9mZnNldCBvZiBjaGFubmVsIGlkcyByZXNlcnZlZCBmb3IgUk1TICovCisJLyogU2l6ZSBvZiBidWZmZXIgZm9yIHNlbmRpbmcgZGF0YSB0byBSTVMgKi8KKwl1MzIgdWxfY2hubF9idWZfc2l6ZTsKKwlpbnQgcHJvY19mYW1pbHk7CS8qIGVnLCA1MDAwICovCisJaW50IHByb2NfdHlwZTsJCS8qIGVnLCA1NTEwICovCisJdm9pZCAqcmVzZXJ2ZWQxOwkvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gKi8KKwl1MzIgcmVzZXJ2ZWQyOwkJLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuICovCit9OworCisjZW5kaWYgLyogRElTUERFRlNfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZG1tLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZG1tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM1ODMzNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kbW0uaApAQCAtMCwwICsxLDc1IEBACisvKgorICogZG1tLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogVGhlIER5bmFtaWMgTWVtb3J5IE1hcHBpbmcoRE1NKSBtb2R1bGUgbWFuYWdlcyB0aGUgRFNQIFZpcnR1YWwgYWRkcmVzcworICogc3BhY2UgdGhhdCBjYW4gYmUgZGlyZWN0bHkgbWFwcGVkIHRvIGFueSBNUFUgYnVmZmVyIG9yIG1lbW9yeSByZWdpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBETU1fCisjZGVmaW5lIERNTV8KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKworc3RydWN0IGRtbV9vYmplY3Q7CisKKy8qIERNTSBhdHRyaWJ1dGVzIHVzZWQgaW4gZG1tX2NyZWF0ZSgpICovCitzdHJ1Y3QgZG1tX21ncmF0dHJzIHsKKwl1MzIgcmVzZXJ2ZWQ7Cit9OworCisjZGVmaW5lIERNTVBPT0xTSVpFICAgICAgMHg0MDAwMDAwCisKKy8qCisgKiAgPT09PT09PT0gZG1tX2dldF9oYW5kbGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXR1cm4gdGhlIGR5bmFtaWMgbWVtb3J5IG1hbmFnZXIgb2JqZWN0IGZvciB0aGlzIGRldmljZS4KKyAqICAgICAgVGhpcyBpcyB0eXBpY2FsbHkgY2FsbGVkIGZyb20gdGhlIGNsaWVudCBwcm9jZXNzLgorICovCisKK2V4dGVybiBpbnQgZG1tX2dldF9oYW5kbGUodm9pZCAqaHByb2Nlc3NvciwKKwkJCQkgc3RydWN0IGRtbV9vYmplY3QgKipkbW1fbWFuYWdlcik7CisKK2V4dGVybiBpbnQgZG1tX3Jlc2VydmVfbWVtb3J5KHN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fbWdyLAorCQkJCSAgICAgdTMyIHNpemUsIHUzMiAqcHJzdl9hZGRyKTsKKworZXh0ZXJuIGludCBkbW1fdW5fcmVzZXJ2ZV9tZW1vcnkoc3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3IsCisJCQkJCXUzMiByc3ZfYWRkcik7CisKK2V4dGVybiBpbnQgZG1tX21hcF9tZW1vcnkoc3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3IsIHUzMiBhZGRyLAorCQkJCSB1MzIgc2l6ZSk7CisKK2V4dGVybiBpbnQgZG1tX3VuX21hcF9tZW1vcnkoc3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3IsCisJCQkJICAgIHUzMiBhZGRyLCB1MzIgKnBzaXplKTsKKworZXh0ZXJuIGludCBkbW1fZGVzdHJveShzdHJ1Y3QgZG1tX29iamVjdCAqZG1tX21ncik7CisKK2V4dGVybiBpbnQgZG1tX2RlbGV0ZV90YWJsZXMoc3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3IpOworCitleHRlcm4gaW50IGRtbV9jcmVhdGUoc3RydWN0IGRtbV9vYmplY3QgKipkbW1fbWFuYWdlciwKKwkJCSAgICAgc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgZG1tX21ncmF0dHJzICptZ3JfYXR0cnRzKTsKKworZXh0ZXJuIGJvb2wgZG1tX2luaXQodm9pZCk7CisKK2V4dGVybiB2b2lkIGRtbV9leGl0KHZvaWQpOworCitleHRlcm4gaW50IGRtbV9jcmVhdGVfdGFibGVzKHN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fbWdyLAorCQkJCSAgICB1MzIgYWRkciwgdTMyIHNpemUpOworCisjaWZkZWYgRFNQX0RNTV9ERUJVRwordTMyIGRtbV9tZW1fbWFwX2R1bXAoc3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3IpOworI2VuZGlmCisKKyNlbmRpZiAvKiBETU1fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHJ2LmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM2NTAxNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kcnYuaApAQCAtMCwwICsxLDUyMSBAQAorLyoKKyAqIGRydi5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIERSViBSZXNvdXJjZSBhbGxvY2F0aW9uIG1vZHVsZS4gRHJpdmVyIE9iamVjdCBnZXRzIENyZWF0ZWQKKyAqIGF0IHRoZSB0aW1lIG9mIExvYWRpbmcuIEl0IGhvbGRzIHRoZSBMaXN0IG9mIERldmljZSBPYmplY3RzCisgKiBpbiB0aGUgc3lzdGVtLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgRFJWXworI2RlZmluZSBEUlZfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2ZGVmcy5oPgorCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RydmRlZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKworI2RlZmluZSBEUlZfQVNTSUdOICAgICAxCisjZGVmaW5lIERSVl9SRUxFQVNFICAgIDAKKworLyogUHJvdmlkZSB0aGUgRFNQIEludGVybmFsIG1lbW9yeSB3aW5kb3dzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGZyb20gTDMgYWRkcmVzcworICogc3BhY2UgKi8KKworI2RlZmluZSBPTUFQX0dFTV9CQVNFICAgMHgxMDdGODAwMAorI2RlZmluZSBPTUFQX0RTUF9TSVpFICAgMHgwMDcyMDAwMAorCisvKiBNRU0xIGlzIEwyIFJBTSArIEwyIENhY2hlIHNwYWNlICovCisjZGVmaW5lIE9NQVBfRFNQX01FTTFfQkFTRSAweDVDN0Y4MDAwCisjZGVmaW5lIE9NQVBfRFNQX01FTTFfU0laRSAweDE4MDAwCisjZGVmaW5lIE9NQVBfRFNQX0dFTTFfQkFTRSAweDEwN0Y4MDAwCisKKy8qIE1FTTIgaXMgTDFQIFJBTS9DQUNIRSBzcGFjZSAqLworI2RlZmluZSBPTUFQX0RTUF9NRU0yX0JBU0UgMHg1Q0UwMDAwMAorI2RlZmluZSBPTUFQX0RTUF9NRU0yX1NJWkUgMHg4MDAwCisjZGVmaW5lIE9NQVBfRFNQX0dFTTJfQkFTRSAweDEwRTAwMDAwCisKKy8qIE1FTTMgaXMgTDFEIFJBTS9DQUNIRSBzcGFjZSAqLworI2RlZmluZSBPTUFQX0RTUF9NRU0zX0JBU0UgMHg1Q0YwNDAwMAorI2RlZmluZSBPTUFQX0RTUF9NRU0zX1NJWkUgMHgxNDAwMAorI2RlZmluZSBPTUFQX0RTUF9HRU0zX0JBU0UgMHgxMEYwNDAwMAorCisjZGVmaW5lIE9NQVBfSVZBMl9QUk1fQkFTRSAweDQ4MzA2MDAwCisjZGVmaW5lIE9NQVBfSVZBMl9QUk1fU0laRSAweDEwMDAKKworI2RlZmluZSBPTUFQX0lWQTJfQ01fQkFTRSAweDQ4MDA0MDAwCisjZGVmaW5lIE9NQVBfSVZBMl9DTV9TSVpFIDB4MTAwMAorCisjZGVmaW5lIE9NQVBfUEVSX0NNX0JBU0UgMHg0ODAwNTAwMAorI2RlZmluZSBPTUFQX1BFUl9DTV9TSVpFIDB4MTAwMAorCisjZGVmaW5lIE9NQVBfUEVSX1BSTV9CQVNFIDB4NDgzMDcwMDAKKyNkZWZpbmUgT01BUF9QRVJfUFJNX1NJWkUgMHgxMDAwCisKKyNkZWZpbmUgT01BUF9DT1JFX1BSTV9CQVNFIDB4NDgzMDZBMDAKKyNkZWZpbmUgT01BUF9DT1JFX1BSTV9TSVpFIDB4MTAwMAorCisjZGVmaW5lIE9NQVBfU1lTQ19CQVNFIDB4NDgwMDIwMDAKKyNkZWZpbmUgT01BUF9TWVNDX1NJWkUgMHgxMDAwCisKKyNkZWZpbmUgT01BUF9ETU1VX0JBU0UgMHg1RDAwMDAwMAorI2RlZmluZSBPTUFQX0RNTVVfU0laRSAweDEwMDAKKworI2RlZmluZSBPTUFQX1BSQ01fVkREMV9ET01BSU4gMQorI2RlZmluZSBPTUFQX1BSQ01fVkREMl9ET01BSU4gMgorCisvKiBHUFAgUFJPQ0VTUyBDTEVBTlVQIERhdGEgc3RydWN0dXJlcyAqLworCisvKiBOZXcgc3RydWN0dXJlIChtZW1iZXIgb2YgcHJvY2VzcyBjb250ZXh0KSBhYnN0cmFjdHMgTk9ERSByZXNvdXJjZSBpbmZvICovCitzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0IHsKKwl2b2lkICpobm9kZTsKKwlzMzIgbm9kZV9hbGxvY2F0ZWQ7CS8qIE5vZGUgc3RhdHVzICovCisJczMyIGhlYXBfYWxsb2NhdGVkOwkvKiBIZWFwIHN0YXR1cyAqLworCXMzMiBzdHJlYW1zX2FsbG9jYXRlZDsJLyogU3RyZWFtcyBzdGF0dXMgKi8KKwlpbnQgaWQ7Cit9OworCisvKiB1c2VkIHRvIGNhY2hlIGRtYSBtYXBwaW5nIGluZm9ybWF0aW9uICovCitzdHJ1Y3QgYnJpZGdlX2RtYV9tYXBfaW5mbyB7CisJLyogZGlyZWN0aW9uIG9mIERNQSBpbiBhY3Rpb24sIG9yIERNQV9OT05FICovCisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyOworCS8qIG51bWJlciBvZiBlbGVtZW50cyByZXF1ZXN0ZWQgYnkgdXMgKi8KKwlpbnQgbnVtX3BhZ2VzOworCS8qIG51bWJlciBvZiBlbGVtZW50cyByZXR1cm5lZCBmcm9tIGRtYV9tYXBfc2cgKi8KKwlpbnQgc2dfbnVtOworCS8qIGxpc3Qgb2YgYnVmZmVycyB1c2VkIGluIHRoaXMgRE1BIGFjdGlvbiAqLworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Cit9OworCisvKiBVc2VkIGZvciBETU0gbWFwcGVkIG1lbW9yeSBhY2NvdW50aW5nICovCitzdHJ1Y3QgZG1tX21hcF9vYmplY3QgeworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKKwl1MzIgZHNwX2FkZHI7CisJdTMyIG1wdV9hZGRyOworCXUzMiBzaXplOworCXUzMiBudW1fdXNyX3BnczsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOworCXN0cnVjdCBicmlkZ2VfZG1hX21hcF9pbmZvIGRtYV9pbmZvOworfTsKKworLyogVXNlZCBmb3IgRE1NIHJlc2VydmVkIG1lbW9yeSBhY2NvdW50aW5nICovCitzdHJ1Y3QgZG1tX3Jzdl9vYmplY3QgeworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKKwl1MzIgZHNwX3Jlc2VydmVkX2FkZHI7Cit9OworCisvKiBOZXcgc3RydWN0dXJlIChtZW1iZXIgb2YgcHJvY2VzcyBjb250ZXh0KSBhYnN0cmFjdHMgRE1NIHJlc291cmNlIGluZm8gKi8KK3N0cnVjdCBkc3BoZWFwX3Jlc19vYmplY3QgeworCXMzMiBoZWFwX2FsbG9jYXRlZDsJLyogRE1NIHN0YXR1cyAqLworCXUzMiB1bF9tcHVfYWRkcjsKKwl1MzIgdWxfZHNwX2FkZHI7CisJdTMyIHVsX2RzcF9yZXNfYWRkcjsKKwl1MzIgaGVhcF9zaXplOworCXZvaWQgKmhwcm9jZXNzb3I7CisJc3RydWN0IGRzcGhlYXBfcmVzX29iamVjdCAqbmV4dDsKK307CisKKy8qIE5ldyBzdHJ1Y3R1cmUgKG1lbWJlciBvZiBwcm9jZXNzIGNvbnRleHQpIGFic3RyYWN0cyBzdHJlYW0gcmVzb3VyY2UgaW5mbyAqLworc3RydWN0IHN0cm1fcmVzX29iamVjdCB7CisJczMyIHN0cmVhbV9hbGxvY2F0ZWQ7CS8qIFN0cmVhbSBzdGF0dXMgKi8KKwl2b2lkICpoc3RyZWFtOworCXUzMiBudW1fYnVmczsKKwl1MzIgZGlyOworCWludCBpZDsKK307CisKKy8qIE92ZXJhbGwgQnJpZGdlIHByb2Nlc3MgcmVzb3VyY2UgdXNhZ2Ugc3RhdGUgKi8KK2VudW0gZ3BwX3Byb2NfcmVzX3N0YXRlIHsKKwlQUk9DX1JFU19BTExPQ0FURUQsCisJUFJPQ19SRVNfRlJFRUQKK307CisKKy8qIEJyaWRnZSBEYXRhICovCitzdHJ1Y3QgZHJ2X2RhdGEgeworCWNoYXIgKmJhc2VfaW1nOworCXMzMiBzaG1fc2l6ZTsKKwlpbnQgdGNfd29yZHN3YXBvbjsKKwl2b2lkICpkcnZfb2JqZWN0OworCXZvaWQgKmRldl9vYmplY3Q7CisJdm9pZCAqbWdyX29iamVjdDsKK307CisKKy8qIFByb2Nlc3MgQ29udGV4dCAqLworc3RydWN0IHByb2Nlc3NfY29udGV4dCB7CisJLyogUHJvY2VzcyBTdGF0ZSAqLworCWVudW0gZ3BwX3Byb2NfcmVzX3N0YXRlIHJlc19zdGF0ZTsKKworCS8qIEhhbmRsZSB0byBQcm9jZXNzb3IgKi8KKwl2b2lkICpocHJvY2Vzc29yOworCisJLyogRFNQIE5vZGUgcmVzb3VyY2VzICovCisJc3RydWN0IGlkciAqbm9kZV9pZDsKKworCS8qIERNTSBtYXBwZWQgbWVtb3J5IHJlc291cmNlcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgZG1tX21hcF9saXN0OworCXNwaW5sb2NrX3QgZG1tX21hcF9sb2NrOworCisJLyogRE1NIHJlc2VydmVkIG1lbW9yeSByZXNvdXJjZXMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGRtbV9yc3ZfbGlzdDsKKwlzcGlubG9ja190IGRtbV9yc3ZfbG9jazsKKworCS8qIERTUCBIZWFwIHJlc291cmNlcyAqLworCXN0cnVjdCBkc3BoZWFwX3Jlc19vYmplY3QgKnBkc3BoZWFwX2xpc3Q7CisKKwkvKiBTdHJlYW0gcmVzb3VyY2VzICovCisJc3RydWN0IGlkciAqc3RyZWFtX2lkOworfTsKKworLyoKKyAqICA9PT09PT09PSBkcnZfY3JlYXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ3JlYXRlcyB0aGUgRHJpdmVyIE9iamVjdC4gVGhpcyBpcyBkb25lIGR1cmluZyB0aGUgZHJpdmVyIGxvYWRpbmcuCisgKiAgICAgIFRoZXJlIGlzIG9ubHkgb25lIERyaXZlciBPYmplY3QgaW4gdGhlIERTUC9CSU9TIEJyaWRnZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkcnZfb2JqOiAgICAgICAgTG9jYXRpb24gdG8gc3RvcmUgY3JlYXRlZCBEUlYgT2JqZWN0IGhhbmRsZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjZXNzCisgKiAgICAgIC1FTk9NRU06ICAgIEZhaWxlZCBpbiBNZW1vcnkgYWxsb2NhdGlvbgorICogICAgICAtRVBFUk06ICAgICAgR2VuZXJhbCBGYWlsdXJlCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIERSViBJbml0aWFsaXplZCAocmVmcyA+IDAgKQorICogICAgICBkcnZfb2JqICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgIC0gKmRydl9vYmogaXMgYSB2YWxpZCBEUlYgaW50ZXJmYWNlIHRvIHRoZSBkZXZpY2UuCisgKiAgICAgICAgICAgICAgICAgICAgICAtIExpc3Qgb2YgRGV2T2JqZWN0IENyZWF0ZWQgYW5kIEluaXRpYWxpemVkLgorICogICAgICAgICAgICAgICAgICAgICAgLSBMaXN0IG9mIGRldl9ub2RlIFN0cmluZyBjcmVhdGVkIGFuZCBpbnRpYWxpemVkLgorICogICAgICAgICAgICAgICAgICAgICAgLSBSZWdpc3RyeSBpcyB1cGRhdGVkIHdpdGggdGhlIERSViBPYmplY3QuCisgKiAgICAgICEwOiAgICAgICBEUlYgT2JqZWN0IG5vdCBjcmVhdGVkCisgKiAgRGV0YWlsczoKKyAqICAgICAgVGhlcmUgaXMgb25lIERyaXZlciBPYmplY3QgZm9yIHRoZSBEcml2ZXIgcmVwcmVzZW50aW5nCisgKiAgICAgIHRoZSBkcml2ZXIgaXRzZWxmLiBJdCBjb250YWlucyB0aGUgbGlzdCBvZiBkZXZpY2UKKyAqICAgICAgT2JqZWN0cyBhbmQgdGhlIGxpc3Qgb2YgRGV2aWNlIEV4dGVuc2lvbnMgaW4gdGhlIHN5c3RlbS4KKyAqICAgICAgQWxzbyBpdCBjYW4gaG9sZCBvdGhlciBuZWNjZXNzYXJ5CisgKiAgICAgIGluZm9ybWF0aW9uIGluIGl0cyBzdG9yYWdlIGFyZWEuCisgKi8KK2V4dGVybiBpbnQgZHJ2X2NyZWF0ZShzdHJ1Y3QgZHJ2X29iamVjdCAqKmRydl9vYmopOworCisvKgorICogID09PT09PT09IGRydl9kZXN0cm95ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgZGVzdHJveXMgdGhlIERldiBPYmplY3QgbGlzdCwgRHJ2RXh0IGxpc3QKKyAqICAgICAgYW5kIGRlc3Ryb3kgdGhlIERSViBvYmplY3QKKyAqICAgICAgQ2FsbGVkIHVwb24gZHJpdmVyIHVuTG9hZGluZy5vciB1bnN1Y2Nlc2Z1bCBsb2FkaW5nIG9mIHRoZSBkcml2ZXIuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgZHJpdmVyX29iajogICAgIEhhbmRsZSB0byBEcml2ZXIgb2JqZWN0IC4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVQRVJNOiAgICAgIEZhaWxlZCB0byBkZXN0cm95IERSViBPYmplY3QKKyAqICBSZXF1aXJlczoKKyAqICAgICAgRFJWIEluaXRpYWxpemVkIChjUmVncyA+IDAgKQorICogICAgICBoZHJ2X29iaiBpcyBub3QgTlVMTCBhbmQgYSB2YWxpZCBEUlYgaGFuZGxlIC4KKyAqICAgICAgTGlzdCBvZiBEZXZPYmplY3QgaXMgRW1wdHkuCisgKiAgICAgIExpc3Qgb2YgRHJ2RXh0IGlzIEVtcHR5CisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgIC0gRFJWIE9iamVjdCBkZXN0cm95ZWQgYW5kIGhkcnZfb2JqIGlzIG5vdCBhIHZhbGlkCisgKiAgICAgICAgICAgICAgICAgICAgICAgIERSViBoYW5kbGUuCisgKiAgICAgICAgICAgICAgICAgICAgICAtIFJlZ2lzdHJ5IGlzIHVwZGF0ZWQgd2l0aCAiMCIgYXMgdGhlIERSViBPYmplY3QuCisgKi8KK2V4dGVybiBpbnQgZHJ2X2Rlc3Ryb3koc3RydWN0IGRydl9vYmplY3QgKmRyaXZlcl9vYmopOworCisvKgorICogID09PT09PT09IGRydl9leGl0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRXhpdCB0aGUgRFJWIG1vZHVsZSwgZnJlZWluZyBhbnkgbW9kdWxlcyBpbml0aWFsaXplZCBpbiBkcnZfaW5pdC4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIHZvaWQgZHJ2X2V4aXQodm9pZCk7CisKKy8qCisgKiAgPT09PT09PT0gZHJ2X2dldF9maXJzdF9kZXZfb2JqZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0dXJucyB0aGUgUHRyIHRvIHRoZSBGaXJzdERldiBPYmplY3QgaW4gdGhlIExpc3QKKyAqICBQYXJhbWV0ZXJzOgorICogIFJlcXVpcmVzOgorICogICAgICBEUlYgSW5pdGlhbGl6ZWQKKyAqICBSZXR1cm5zOgorICogICAgICBkd19kZXZfb2JqZWN0OiAgUHRyIHRvIHRoZSBGaXJzdCBEZXYgT2JqZWN0IGFzIGEgdTMyCisgKiAgICAgIDAgaWYgaXQgZmFpbHMgdG8gcmV0cmlldmUgdGhlIEZpcnN0IERldiBPYmplY3QKKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gdTMyIGRydl9nZXRfZmlyc3RfZGV2X29iamVjdCh2b2lkKTsKKworLyoKKyAqICA9PT09PT09PSBkcnZfZ2V0X2ZpcnN0X2Rldl9leHRlbnNpb24gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXR1cm5zIHRoZSBQdHIgdG8gdGhlIEZpcnN0IERldmljZSBFeHRlbnNpb24gaW4gdGhlIExpc3QKKyAqICBQYXJhbWV0ZXJzOgorICogIFJlcXVpcmVzOgorICogICAgICBEUlYgSW5pdGlhbGl6ZWQKKyAqICBSZXR1cm5zOgorICogICAgICBkd19kZXZfZXh0ZW5zaW9uOiAgICAgUHRyIHRvIHRoZSBGaXJzdCBEZXZpY2UgRXh0ZW5zaW9uIGFzIGEgdTMyCisgKiAgICAgIDA6ICAgICAgICAgICAgICAgICAgRmFpbGVkIHRvIEdldCB0aGUgRGV2aWNlIEV4dGVuc2lvbgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiB1MzIgZHJ2X2dldF9maXJzdF9kZXZfZXh0ZW5zaW9uKHZvaWQpOworCisvKgorICogID09PT09PT09IGRydl9nZXRfZGV2X29iamVjdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEdpdmVuIGEgaW5kZXgsIHJldHVybnMgYSBoYW5kbGUgdG8gRGV2T2JqZWN0IGZyb20gdGhlIGxpc3QKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoZHJ2X29iajogICAgIEhhbmRsZSB0byB0aGUgTWFuYWdlcgorICogICAgICBkZXZpY2Vfb2JqOiAgICAgTG9jYXRpb24gdG8gc3RvcmUgdGhlIERldiBIYW5kbGUKKyAqICBSZXF1aXJlczoKKyAqICAgICAgRFJWIEluaXRpYWxpemVkCisgKiAgICAgIGluZGV4ID49IDAKKyAqICAgICAgaGRydl9vYmogaXMgbm90IE5VTEwgYW5kIFZhbGlkIERSViBPYmplY3QKKyAqICAgICAgZGV2aWNlX29iaiBpcyBub3QgTlVMTAorICogICAgICBEZXZpY2UgT2JqZWN0IExpc3Qgbm90IEVtcHR5CisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MKKyAqICAgICAgLUVQRVJNOiAgICAgIEZhaWxlZCB0byBHZXQgdGhlIERldiBPYmplY3QKKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgKmRldmljZV9vYmogIT0gTlVMTAorICogICAgICAtRVBFUk06ICAgICAgKmRldmljZV9vYmogPSBOVUxMCisgKi8KK2V4dGVybiBpbnQgZHJ2X2dldF9kZXZfb2JqZWN0KHUzMiBpbmRleCwKKwkJCQkgICAgIHN0cnVjdCBkcnZfb2JqZWN0ICpoZHJ2X29iaiwKKwkJCQkgICAgIHN0cnVjdCBkZXZfb2JqZWN0ICoqZGV2aWNlX29iaik7CisKKy8qCisgKiAgPT09PT09PT0gZHJ2X2dldF9uZXh0X2Rldl9vYmplY3QgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXR1cm5zIHRoZSBQdHIgdG8gdGhlIE5leHQgRGV2aWNlIE9iamVjdCBmcm9tIHRoZSB0aGUgTGlzdAorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhkZXZfb2JqOiAgICAgSGFuZGxlIHRvIHRoZSBEZXZpY2UgT2JqZWN0CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIERSViBJbml0aWFsaXplZAorICogICAgICBoZGV2X29iaiAhPSAwCisgKiAgUmV0dXJuczoKKyAqICAgICAgZHdfZGV2X29iamVjdDogICAgUHRyIHRvIHRoZSBOZXh0IERldiBPYmplY3QgYXMgYSB1MzIKKyAqICAgICAgMDogICAgICAgICAgICAgIElmIGl0IGZhaWwgdG8gZ2V0IHRoZSBuZXh0IERldiBPYmplY3QuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIHUzMiBkcnZfZ2V0X25leHRfZGV2X29iamVjdCh1MzIgaGRldl9vYmopOworCisvKgorICogID09PT09PT09IGRydl9nZXRfbmV4dF9kZXZfZXh0ZW5zaW9uID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0dXJucyB0aGUgUHRyIHRvIHRoZSBOZXh0IERldmljZSBFeHRlbnNpb24gZnJvbSB0aGUgdGhlIExpc3QKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkZXZfZXh0ZW5zaW9uOiAgICAgIEhhbmRsZSB0byB0aGUgRGV2aWNlIEV4dGVuc2lvbgorICogIFJlcXVpcmVzOgorICogICAgICBEUlYgSW5pdGlhbGl6ZWQKKyAqICAgICAgZGV2X2V4dGVuc2lvbiAhPSAwLgorICogIFJldHVybnM6CisgKiAgICAgIGR3X2Rldl9leHRlbnNpb246ICAgICBQdHIgdG8gdGhlIE5leHQgRGV2IEV4dGVuc2lvbgorICogICAgICAwOiAgICAgICAgICAgICAgICAgIElmIGl0IGZhaWwgdG8gR2V0IHRoZSBuZXh0IERldiBFeHRlbnNpb24KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gdTMyIGRydl9nZXRfbmV4dF9kZXZfZXh0ZW5zaW9uKHUzMiBkZXZfZXh0ZW5zaW9uKTsKKworLyoKKyAqICA9PT09PT09PSBkcnZfaW5pdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEluaXRpYWxpemUgdGhlIERSViBtb2R1bGUuCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogICAgICBUUlVFIGlmIHN1Y2Nlc3M7IEZBTFNFIG90aGVyd2lzZS4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IGRydl9pbml0KHZvaWQpOworCisvKgorICogID09PT09PT09IGRydl9pbnNlcnRfZGV2X29iamVjdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEluc2VydCBhIERldmljZU9iamVjdCBpbnRvIHRoZSBsaXN0IG9mIERyaXZlciBvYmplY3QuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgZHJpdmVyX29iajogICAgIEhhbmRsZSB0byBEcnZPYmplY3QKKyAqICAgICAgaGRldl9vYmo6ICAgICBIYW5kbGUgdG8gRGV2aWNlT2JqZWN0IHRvIGluc2VydC4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgSWYgc3VjY2Vzc2Z1bC4KKyAqICAgICAgLUVQRVJNOiAgICAgIEdlbmVyYWwgRmFpbHVyZToKKyAqICBSZXF1aXJlczoKKyAqICAgICAgaGRydl9vYmogIT0gTlVMTCBhbmQgVmFsaWQgRFJWIEhhbmRsZS4KKyAqICAgICAgaGRldl9vYmogIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgRGV2aWNlIE9iamVjdCBpcyBpbnNlcnRlZCBhbmQgdGhlIExpc3QgaXMgbm90IGVtcHR5LgorICovCitleHRlcm4gaW50IGRydl9pbnNlcnRfZGV2X29iamVjdChzdHJ1Y3QgZHJ2X29iamVjdCAqZHJpdmVyX29iaiwKKwkJCQkJc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBkcnZfcmVtb3ZlX2Rldl9vYmplY3QgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTZWFyY2ggZm9yIGFuZCByZW1vdmUgYSBEZXZpY2Ugb2JqZWN0IGZyb20gdGhlIGdpdmVuIGxpc3Qgb2YgRGV2aWNlIE9iagorICogICAgICBvYmplY3RzLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGRyaXZlcl9vYmo6ICAgICBIYW5kbGUgdG8gRHJ2T2JqZWN0CisgKiAgICAgIGhkZXZfb2JqOiAgICAgSGFuZGxlIHRvIERldk9iamVjdCB0byBSZW1vdmUKKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVQRVJNOiAgICAgIFVuYWJsZSB0byBmaW5kIGRldl9vYmouCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGhkcnZfb2JqICE9IE5VTEwgYW5kIGEgVmFsaWQgRFJWIEhhbmRsZS4KKyAqICAgICAgaGRldl9vYmogIT0gTlVMTC4KKyAqICAgICAgTGlzdCBleGlzdHMgYW5kIGlzIG5vdCBlbXB0eS4KKyAqICBFbnN1cmVzOgorICogICAgICBMaXN0IGVpdGhlciBkb2VzIG5vdCBleGlzdCAoTlVMTCksIG9yIGlzIG5vdCBlbXB0eSBpZiBpdCBkb2VzIGV4aXN0LgorICovCitleHRlcm4gaW50IGRydl9yZW1vdmVfZGV2X29iamVjdChzdHJ1Y3QgZHJ2X29iamVjdCAqZHJpdmVyX29iaiwKKwkJCQkJc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBkcnZfcmVxdWVzdF9yZXNvdXJjZXMgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBBc3NpZ25zIHRoZSBSZXNvdXJjZXMgb3IgUmVsZWFzZXMgdGhlbS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkd19jb250ZXh0OiAgICAgICAgICBQYXRoIHRvIHRoZSBkcml2ZXIgUmVnaXN0cnkgS2V5LgorICogICAgICBkZXZfbm9kZV9zdHJnOiAgICAgUHRyIHRvIGRldl9ub2RlIFN0cmluZyBzdG9yZWQgaW4gdGhlIERldmljZSBFeHQuCisgKiAgUmV0dXJuczoKKyAqICAgICAgVFJVRSBpZiBzdWNjZXNzOyBGQUxTRSBvdGhlcndpc2UuCisgKiAgUmVxdWlyZXM6CisgKiAgRW5zdXJlczoKKyAqICAgICAgVGhlIFJlc291cmNlcyBhcmUgYXNzaWduZWQgYmFzZWQgb24gQnVzIHR5cGUuCisgKiAgICAgIFRoZSBoYXJkd2FyZSBpcyBpbml0aWFsaXplZC4gUmVzb3VyY2UgaW5mb3JtYXRpb24gaXMKKyAqICAgICAgZ2F0aGVyZWQgZnJvbSB0aGUgUmVnaXN0cnkoSVNBLCBQQ01DSUEpb3Igc2Nhbm5lZChQQ0kpCisgKiAgICAgIFJlc291cmNlIHN0cnVjdHVyZSBpcyBzdG9yZWQgaW4gdGhlIHJlZ2lzdHJ5IHdoaWNoIHdpbGwgYmUKKyAqICAgICAgbGF0ZXIgdXNlZCBieSB0aGUgQ0ZHIG1vZHVsZS4KKyAqLworZXh0ZXJuIGludCBkcnZfcmVxdWVzdF9yZXNvdXJjZXModTMyIGR3X2NvbnRleHQsCisJCQkJCXUzMiAqZGV2X25vZGVfc3RyZyk7CisKKy8qCisgKiAgPT09PT09PT0gZHJ2X3JlbGVhc2VfcmVzb3VyY2VzID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQXNzaWducyB0aGUgUmVzb3VyY2VzIG9yIFJlbGVhc2VzIHRoZW0uCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgZHdfY29udGV4dDogICAgICBQYXRoIHRvIHRoZSBkcml2ZXIgUmVnaXN0cnkgS2V5LgorICogICAgICBoZHJ2X29iajogICAgIEhhbmRsZSB0byB0aGUgRHJpdmVyIE9iamVjdC4KKyAqICBSZXR1cm5zOgorICogICAgICBUUlVFIGlmIHN1Y2Nlc3M7IEZBTFNFIG90aGVyd2lzZS4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICogICAgICBUaGUgUmVzb3VyY2VzIGFyZSByZWxlYXNlZCBiYXNlZCBvbiBCdXMgdHlwZS4KKyAqICAgICAgUmVzb3VyY2Ugc3RydWN0dXJlIGlzIGRlbGV0ZWQgZnJvbSB0aGUgcmVnaXN0cnkKKyAqLworZXh0ZXJuIGludCBkcnZfcmVsZWFzZV9yZXNvdXJjZXModTMyIGR3X2NvbnRleHQsCisJCQkJCXN0cnVjdCBkcnZfb2JqZWN0ICpoZHJ2X29iaik7CisKKy8qKgorICogZHJ2X3JlcXVlc3RfYnJpZGdlX3Jlc19kc3AoKSAtIFJlc2VydmVzIHNoYXJlZCBtZW1vcnkgZm9yIGJyaWRnZS4KKyAqIEBwaG9zdF9yZXNvdXJjZXM6ICBwb2ludGVyIHRvIGhvc3QgcmVzb3VyY2VzLgorICovCitpbnQgZHJ2X3JlcXVlc3RfYnJpZGdlX3Jlc19kc3Aodm9pZCAqKnBob3N0X3Jlc291cmNlcyk7CisKKyNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfUkVDT1ZFUlkKK3ZvaWQgYnJpZGdlX3JlY292ZXJfc2NoZWR1bGUodm9pZCk7CisjZW5kaWYKKworLyoKKyAqICA9PT09PT09PSBtZW1fZXh0X3BoeXNfcG9vbF9pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgVXNlcyB0aGUgcGh5c2ljYWwgbWVtb3J5IGNodW5rIHBhc3NlZCBmb3IgaW50ZXJuYWwgY29uc2l0ZW50IG1lbW9yeQorICogICAgICBhbGxvY2F0aW9ucy4KKyAqICAgICAgcGh5c2ljYWwgYWRkcmVzcyBiYXNlZCBvbiB0aGUgcGFnZSBmcmFtZSBhZGRyZXNzLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIHBvb2xfcGh5c19iYXNlICBzdGFydGluZyBhZGRyZXNzIG9mIHRoZSBwaHlzaWNhbCBtZW1vcnkgcG9vbC4KKyAqICAgICAgcG9vbF9zaXplICAgICAgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgbWVtb3J5IHBvb2wuCisgKiAgUmV0dXJuczoKKyAqICAgICAgbm9uZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgLSBNRU0gaW5pdGlhbGl6ZWQuCisgKiAgICAgIC0gdmFsaWQgcGh5c2ljYWwgYWRkcmVzcyBmb3IgdGhlIGJhc2UgYW5kIHNpemUgPiAwCisgKi8KK2V4dGVybiB2b2lkIG1lbV9leHRfcGh5c19wb29sX2luaXQodTMyIHBvb2xfcGh5c19iYXNlLCB1MzIgcG9vbF9zaXplKTsKKworLyoKKyAqICA9PT09PT09PSBtZW1fZXh0X3BoeXNfcG9vbF9yZWxlYXNlID09PT09PT09CisgKi8KK2V4dGVybiB2b2lkIG1lbV9leHRfcGh5c19wb29sX3JlbGVhc2Uodm9pZCk7CisKKy8qICA9PT09PT09PSBtZW1fYWxsb2NfcGh5c19tZW0gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBBbGxvY2F0ZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMsIHVuY2FjaGVkIG1lbW9yeQorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGJ5dGVfc2l6ZTogICAgIE51bWJlciBvZiBieXRlcyB0byBhbGxvY2F0ZS4KKyAqICAgICAgYWxpZ25fbWFzazogICAgQWxpZ25tZW50IE1hc2suCisgKiAgICAgIHBoeXNpY2FsX2FkZHJlc3M6IFBoeXNpY2FsIGFkZHJlc3Mgb2YgYWxsb2NhdGVkIG1lbW9yeS4KKyAqICBSZXR1cm5zOgorICogICAgICBQb2ludGVyIHRvIGEgYmxvY2sgb2YgbWVtb3J5OworICogICAgICBOVUxMIGlmIG1lbW9yeSBjb3VsZG4ndCBiZSBhbGxvY2F0ZWQsIG9yIGlmIGJ5dGVfc2l6ZSA9PSAwLgorICogIFJlcXVpcmVzOgorICogICAgICBNRU0gaW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgVGhlIHJldHVybmVkIHBvaW50ZXIsIGlmIG5vdCBOVUxMLCBwb2ludHMgdG8gYSB2YWxpZCBtZW1vcnkgYmxvY2sgb2YKKyAqICAgICAgdGhlIHNpemUgcmVxdWVzdGVkLiAgUmV0dXJuZWQgcGh5c2ljYWwgYWRkcmVzcyByZWZlcnMgdG8gcGh5c2ljYWwKKyAqICAgICAgbG9jYXRpb24gb2YgbWVtb3J5LgorICovCitleHRlcm4gdm9pZCAqbWVtX2FsbG9jX3BoeXNfbWVtKHUzMiBieXRlX3NpemUsCisJCQkJdTMyIGFsaWduX21hc2ssIHUzMiAqcGh5c2ljYWxfYWRkcmVzcyk7CisKKy8qCisgKiAgPT09PT09PT0gbWVtX2ZyZWVfcGh5c19tZW0gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBGcmVlIHRoZSBnaXZlbiBibG9jayBvZiBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5LgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIHZpcnR1YWxfYWRkcmVzczogIFBvaW50ZXIgdG8gdmlydHVhbCBtZW1vcnkgcmVnaW9uIGFsbG9jYXRlZAorICogICAgICBieSBtZW1fYWxsb2NfcGh5c19tZW0oKS4KKyAqICAgICAgcGh5c2ljYWxfYWRkcmVzczogIFBvaW50ZXIgdG8gcGh5c2ljYWwgbWVtb3J5IHJlZ2lvbiAgYWxsb2NhdGVkCisgKiAgICAgIGJ5IG1lbV9hbGxvY19waHlzX21lbSgpLgorICogICAgICBieXRlX3NpemU6ICBTaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIGFsbG9jYXRlZCBieSBtZW1fYWxsb2NfcGh5c19tZW0oKS4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBNRU0gaW5pdGlhbGl6ZWQuCisgKiAgICAgIHZpcnR1YWxfYWRkcmVzcyBpcyBhIHZhbGlkIG1lbW9yeSBhZGRyZXNzIHJldHVybmVkIGJ5CisgKiAgICAgICAgICBtZW1fYWxsb2NfcGh5c19tZW0oKQorICogIEVuc3VyZXM6CisgKiAgICAgIHZpcnR1YWxfYWRkcmVzcyBpcyBubyBsb25nZXIgYSB2YWxpZCBwb2ludGVyIHRvIG1lbW9yeS4KKyAqLworZXh0ZXJuIHZvaWQgbWVtX2ZyZWVfcGh5c19tZW0odm9pZCAqdmlydHVhbF9hZGRyZXNzLAorCQkJICAgICAgdTMyIHBoeXNpY2FsX2FkZHJlc3MsIHUzMiBieXRlX3NpemUpOworCisvKgorICogID09PT09PT09IE1FTV9MSU5FQVJfQUREUkVTUyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEdldCB0aGUgbGluZWFyIGFkZHJlc3MgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gcGh5c2ljYWwgYWRkcmVzcy4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBwaHlzX2FkZHI6ICBQaHlzaWNhbCBhZGRyZXNzIHRvIGJlIG1hcHBlZC4KKyAqICAgICAgYnl0ZV9zaXplOiAgICAgTnVtYmVyIG9mIGJ5dGVzIGluIHBoeXNpY2FsIHJhbmdlIHRvIG1hcC4KKyAqICBSZXR1cm5zOgorICogICAgICBUaGUgY29ycmVzcG9uZGluZyBsaW5lYXIgYWRkcmVzcywgb3IgTlVMTCBpZiB1bnN1Y2Nlc3NmdWwuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIE1FTSBpbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogIE5vdGVzOgorICogICAgICBJZiB2YWxpZCBsaW5lYXIgYWRkcmVzcyBpcyByZXR1cm5lZCwgYmUgc3VyZSB0byBjYWxsCisgKiAgICAgIE1FTV9VTk1BUF9MSU5FQVJfQUREUkVTUygpLgorICovCisjZGVmaW5lIE1FTV9MSU5FQVJfQUREUkVTUyhwaHlfYWRkciwgYnl0ZV9zaXplKSBwaHlfYWRkcgorCisvKgorICogID09PT09PT09IE1FTV9VTk1BUF9MSU5FQVJfQUREUkVTUyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFVubWFwIHRoZSBsaW5lYXIgYWRkcmVzcyBtYXBwZWQgaW4gTUVNX0xJTkVBUl9BRERSRVNTLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGJhc2VfYWRkcjogUHRyIHRvIG1hcHBlZCBtZW1vcnkgKGFzIHJldHVybmVkIGJ5IE1FTV9MSU5FQVJfQUREUkVTUygpKS4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICAtIE1FTSBpbml0aWFsaXplZC4KKyAqICAgICAgLSBiYXNlX2FkZHIgaXMgYSB2YWxpZCBsaW5lYXIgYWRkcmVzcyBtYXBwZWQgaW4gTUVNX0xJTkVBUl9BRERSRVNTLgorICogIEVuc3VyZXM6CisgKiAgICAgIC0gYmFzZV9hZGRyIG5vIGxvbmdlciBwb2ludHMgdG8gYSB2YWxpZCBsaW5lYXIgYWRkcmVzcy4KKyAqLworI2RlZmluZSBNRU1fVU5NQVBfTElORUFSX0FERFJFU1MoYmFzZV9hZGRyKSB7fQorCisjZW5kaWYgLyogRFJWXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RydmRlZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kcnZkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkyMDkxNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kcnZkZWZzLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIGRydmRlZnMuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBEZWZpbml0aW9uIG9mIGNvbW1vbiBzdHJ1Y3QgYmV0d2VlbiBkc3BkZWZzLmggYW5kIGRydi5oLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgRFJWREVGU18KKyNkZWZpbmUgRFJWREVGU18KKworLyogQnJpZGdlIERyaXZlciBPYmplY3QgKi8KK3N0cnVjdCBkcnZfb2JqZWN0OworCisjZW5kaWYgLyogRFJWREVGU18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3BhcGktaW9jdGwuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3BhcGktaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGE1YmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGFwaS1pb2N0bC5oCkBAIC0wLDAgKzEsNDc1IEBACisvKgorICogZHNwYXBpLWlvY3RsLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogQ29udGFpbnMgc3RydWN0dXJlcyBhbmQgY29tbWFuZHMgdGhhdCBhcmUgdXNlZCBmb3IgaW50ZXJhY3Rpb24KKyAqIGJldHdlZW4gdGhlIEREU1AgQVBJIGFuZCBCcmlkZ2UgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIERTUEFQSUlPQ1RMXworI2RlZmluZSBEU1BBUElJT0NUTF8KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9jbW0uaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvc3RybWRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkY2QuaD4KKwordW5pb24gdHJhcHBlZF9hcmdzIHsKKworCS8qIE1HUiBNb2R1bGUgKi8KKwlzdHJ1Y3QgeworCQl1MzIgbm9kZV9pZDsKKwkJc3RydWN0IGRzcF9uZGJwcm9wcyBfX3VzZXIgKnBuZGJfcHJvcHM7CisJCXUzMiB1bmRiX3Byb3BzX3NpemU7CisJCXUzMiBfX3VzZXIgKnB1X251bV9ub2RlczsKKwl9IGFyZ3NfbWdyX2VudW1ub2RlX2luZm87CisKKwlzdHJ1Y3QgeworCQl1MzIgcHJvY2Vzc29yX2lkOworCQlzdHJ1Y3QgZHNwX3Byb2Nlc3NvcmluZm8gX191c2VyICpwcm9jZXNzb3JfaW5mbzsKKwkJdTMyIHByb2Nlc3Nvcl9pbmZvX3NpemU7CisJCXUzMiBfX3VzZXIgKnB1X251bV9wcm9jczsKKwl9IGFyZ3NfbWdyX2VudW1wcm9jX2luZm87CisKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqOworCQllbnVtIGRzcF9kY2RvYmp0eXBlIG9ial90eXBlOworCQljaGFyICpwc3pfcGF0aF9uYW1lOworCX0gYXJnc19tZ3JfcmVnaXN0ZXJvYmplY3Q7CisKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqOworCQllbnVtIGRzcF9kY2RvYmp0eXBlIG9ial90eXBlOworCX0gYXJnc19tZ3JfdW5yZWdpc3Rlcm9iamVjdDsKKworCXN0cnVjdCB7CisJCXN0cnVjdCBkc3Bfbm90aWZpY2F0aW9uIF9fdXNlciAqX191c2VyICphbm90aWZpY2F0aW9uczsKKwkJdTMyIGNvdW50OworCQl1MzIgX191c2VyICpwdV9pbmRleDsKKwkJdTMyIHV0aW1lb3V0OworCX0gYXJnc19tZ3Jfd2FpdDsKKworCS8qIFBST0MgTW9kdWxlICovCisJc3RydWN0IHsKKwkJdTMyIHByb2Nlc3Nvcl9pZDsKKwkJc3RydWN0IGRzcF9wcm9jZXNzb3JhdHRyaW4gX191c2VyICphdHRyX2luOworCQl2b2lkICpfX3VzZXIgKnBoX3Byb2Nlc3NvcjsKKwl9IGFyZ3NfcHJvY19hdHRhY2g7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpocHJvY2Vzc29yOworCQl1MzIgZHdfY21kOworCQlzdHJ1Y3QgZHNwX2NiZGF0YSBfX3VzZXIgKnBhcmdzOworCX0gYXJnc19wcm9jX2N0cmw7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpocHJvY2Vzc29yOworCX0gYXJnc19wcm9jX2RldGFjaDsKKworCXN0cnVjdCB7CisJCXZvaWQgKmhwcm9jZXNzb3I7CisJCXZvaWQgKl9fdXNlciAqbm9kZV90YWI7CisJCXUzMiBub2RlX3RhYl9zaXplOworCQl1MzIgX191c2VyICpwdV9udW1fbm9kZXM7CisJCXUzMiBfX3VzZXIgKnB1X2FsbG9jYXRlZDsKKwl9IGFyZ3NfcHJvY19lbnVtbm9kZV9pbmZvOworCisJc3RydWN0IHsKKwkJdm9pZCAqaHByb2Nlc3NvcjsKKwkJdTMyIHJlc291cmNlX3R5cGU7CisJCXN0cnVjdCBkc3BfcmVzb3VyY2VpbmZvICpyZXNvdXJjZV9pbmZvOworCQl1MzIgcmVzb3VyY2VfaW5mb19zaXplOworCX0gYXJnc19wcm9jX2VudW1yZXNvdXJjZXM7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpocHJvY2Vzc29yOworCQlzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0YXRlIF9fdXNlciAqcHJvY19zdGF0ZV9vYmo7CisJCXUzMiBzdGF0ZV9pbmZvX3NpemU7CisJfSBhcmdzX3Byb2NfZ2V0c3RhdGU7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpocHJvY2Vzc29yOworCQl1OCBfX3VzZXIgKnBidWY7CisJCXU4IF9fdXNlciAqcHNpemU7CisJCXUzMiBtYXhfc2l6ZTsKKwl9IGFyZ3NfcHJvY19nZXR0cmFjZTsKKworCXN0cnVjdCB7CisJCXZvaWQgKmhwcm9jZXNzb3I7CisJCXMzMiBhcmdjX2luZGV4OworCQljaGFyIF9fdXNlciAqX191c2VyICp1c2VyX2FyZ3M7CisJCWNoYXIgKl9fdXNlciAqdXNlcl9lbnZwOworCX0gYXJnc19wcm9jX2xvYWQ7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpocHJvY2Vzc29yOworCQl1MzIgZXZlbnRfbWFzazsKKwkJdTMyIG5vdGlmeV90eXBlOworCQlzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbiBfX3VzZXIgKmhub3RpZmljYXRpb247CisJfSBhcmdzX3Byb2NfcmVnaXN0ZXJfbm90aWZ5OworCisJc3RydWN0IHsKKwkJdm9pZCAqaHByb2Nlc3NvcjsKKwl9IGFyZ3NfcHJvY19zdGFydDsKKworCXN0cnVjdCB7CisJCXZvaWQgKmhwcm9jZXNzb3I7CisJCXUzMiB1bF9zaXplOworCQl2b2lkICpfX3VzZXIgKnBwX3Jzdl9hZGRyOworCX0gYXJnc19wcm9jX3Jzdm1lbTsKKworCXN0cnVjdCB7CisJCXZvaWQgKmhwcm9jZXNzb3I7CisJCXUzMiB1bF9zaXplOworCQl2b2lkICpwcnN2X2FkZHI7CisJfSBhcmdzX3Byb2NfdW5yc3ZtZW07CisKKwlzdHJ1Y3QgeworCQl2b2lkICpocHJvY2Vzc29yOworCQl2b2lkICpwbXB1X2FkZHI7CisJCXUzMiB1bF9zaXplOworCQl2b2lkICpyZXFfYWRkcjsKKwkJdm9pZCAqX191c2VyICpwcF9tYXBfYWRkcjsKKwkJdTMyIHVsX21hcF9hdHRyOworCX0gYXJnc19wcm9jX21hcG1lbTsKKworCXN0cnVjdCB7CisJCXZvaWQgKmhwcm9jZXNzb3I7CisJCXUzMiB1bF9zaXplOworCQl2b2lkICptYXBfYWRkcjsKKwl9IGFyZ3NfcHJvY191bm1hcG1lbTsKKworCXN0cnVjdCB7CisJCXZvaWQgKmhwcm9jZXNzb3I7CisJCXZvaWQgKnBtcHVfYWRkcjsKKwkJdTMyIHVsX3NpemU7CisJCXUzMiBkaXI7CisJfSBhcmdzX3Byb2NfZG1hOworCisJc3RydWN0IHsKKwkJdm9pZCAqaHByb2Nlc3NvcjsKKwkJdm9pZCAqcG1wdV9hZGRyOworCQl1MzIgdWxfc2l6ZTsKKwkJdTMyIHVsX2ZsYWdzOworCX0gYXJnc19wcm9jX2ZsdXNobWVtb3J5OworCisJc3RydWN0IHsKKwkJdm9pZCAqaHByb2Nlc3NvcjsKKwl9IGFyZ3NfcHJvY19zdG9wOworCisJc3RydWN0IHsKKwkJdm9pZCAqaHByb2Nlc3NvcjsKKwkJdm9pZCAqcG1wdV9hZGRyOworCQl1MzIgdWxfc2l6ZTsKKwl9IGFyZ3NfcHJvY19pbnZhbGlkYXRlbWVtb3J5OworCisJLyogTk9ERSBNb2R1bGUgKi8KKwlzdHJ1Y3QgeworCQl2b2lkICpocHJvY2Vzc29yOworCQlzdHJ1Y3QgZHNwX3V1aWQgX191c2VyICpub2RlX2lkX3B0cjsKKwkJc3RydWN0IGRzcF9jYmRhdGEgX191c2VyICpwYXJnczsKKwkJc3RydWN0IGRzcF9ub2RlYXR0cmluIF9fdXNlciAqYXR0cl9pbjsKKwkJdm9pZCAqX191c2VyICpwaF9ub2RlOworCX0gYXJnc19ub2RlX2FsbG9jYXRlOworCisJc3RydWN0IHsKKwkJdm9pZCAqaG5vZGU7CisJCXUzMiB1c2l6ZTsKKwkJc3RydWN0IGRzcF9idWZmZXJhdHRyIF9fdXNlciAqcGF0dHI7CisJCXU4ICpfX3VzZXIgKnBidWZmZXI7CisJfSBhcmdzX25vZGVfYWxsb2Ntc2didWY7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpobm9kZTsKKwkJczMyIHByaW87CisJfSBhcmdzX25vZGVfY2hhbmdlcHJpb3JpdHk7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpobm9kZTsKKwkJdTMyIHN0cmVhbV9pZDsKKwkJdm9pZCAqb3RoZXJfbm9kZTsKKwkJdTMyIG90aGVyX3N0cmVhbTsKKwkJc3RydWN0IGRzcF9zdHJtYXR0ciBfX3VzZXIgKnBhdHRyczsKKwkJc3RydWN0IGRzcF9jYmRhdGEgX191c2VyICpjb25uX3BhcmFtOworCX0gYXJnc19ub2RlX2Nvbm5lY3Q7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpobm9kZTsKKwl9IGFyZ3Nfbm9kZV9jcmVhdGU7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpobm9kZTsKKwl9IGFyZ3Nfbm9kZV9kZWxldGU7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpobm9kZTsKKwkJc3RydWN0IGRzcF9idWZmZXJhdHRyIF9fdXNlciAqcGF0dHI7CisJCXU4ICpwYnVmZmVyOworCX0gYXJnc19ub2RlX2ZyZWVtc2didWY7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpobm9kZTsKKwkJc3RydWN0IGRzcF9ub2RlYXR0ciBfX3VzZXIgKnBhdHRyOworCQl1MzIgYXR0cl9zaXplOworCX0gYXJnc19ub2RlX2dldGF0dHI7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpobm9kZTsKKwkJc3RydWN0IGRzcF9tc2cgX191c2VyICptZXNzYWdlOworCQl1MzIgdXRpbWVvdXQ7CisJfSBhcmdzX25vZGVfZ2V0bWVzc2FnZTsKKworCXN0cnVjdCB7CisJCXZvaWQgKmhub2RlOworCX0gYXJnc19ub2RlX3BhdXNlOworCisJc3RydWN0IHsKKwkJdm9pZCAqaG5vZGU7CisJCXN0cnVjdCBkc3BfbXNnIF9fdXNlciAqbWVzc2FnZTsKKwkJdTMyIHV0aW1lb3V0OworCX0gYXJnc19ub2RlX3B1dG1lc3NhZ2U7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpobm9kZTsKKwkJdTMyIGV2ZW50X21hc2s7CisJCXUzMiBub3RpZnlfdHlwZTsKKwkJc3RydWN0IGRzcF9ub3RpZmljYXRpb24gX191c2VyICpobm90aWZpY2F0aW9uOworCX0gYXJnc19ub2RlX3JlZ2lzdGVybm90aWZ5OworCisJc3RydWN0IHsKKwkJdm9pZCAqaG5vZGU7CisJfSBhcmdzX25vZGVfcnVuOworCisJc3RydWN0IHsKKwkJdm9pZCAqaG5vZGU7CisJCWludCBfX3VzZXIgKnBzdGF0dXM7CisJfSBhcmdzX25vZGVfdGVybWluYXRlOworCisJc3RydWN0IHsKKwkJdm9pZCAqaHByb2Nlc3NvcjsKKwkJc3RydWN0IGRzcF91dWlkIF9fdXNlciAqbm9kZV9pZF9wdHI7CisJCXN0cnVjdCBkc3BfbmRicHJvcHMgX191c2VyICpub2RlX3Byb3BzOworCX0gYXJnc19ub2RlX2dldHV1aWRwcm9wczsKKworCS8qIFNUUk0gbW9kdWxlICovCisKKwlzdHJ1Y3QgeworCQl2b2lkICpoc3RyZWFtOworCQl1MzIgdXNpemU7CisJCXU4ICpfX3VzZXIgKmFwX2J1ZmZlcjsKKwkJdTMyIG51bV9idWZzOworCX0gYXJnc19zdHJtX2FsbG9jYXRlYnVmZmVyOworCisJc3RydWN0IHsKKwkJdm9pZCAqaHN0cmVhbTsKKwl9IGFyZ3Nfc3RybV9jbG9zZTsKKworCXN0cnVjdCB7CisJCXZvaWQgKmhzdHJlYW07CisJCXU4ICpfX3VzZXIgKmFwX2J1ZmZlcjsKKwkJdTMyIG51bV9idWZzOworCX0gYXJnc19zdHJtX2ZyZWVidWZmZXI7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpoc3RyZWFtOworCQl2b2lkICoqcGhfZXZlbnQ7CisJfSBhcmdzX3N0cm1fZ2V0ZXZlbnRoYW5kbGU7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpoc3RyZWFtOworCQlzdHJ1Y3Qgc3RyZWFtX2luZm8gX191c2VyICpzdHJlYW1faW5mbzsKKwkJdTMyIHN0cmVhbV9pbmZvX3NpemU7CisJfSBhcmdzX3N0cm1fZ2V0aW5mbzsKKworCXN0cnVjdCB7CisJCXZvaWQgKmhzdHJlYW07CisJCWJvb2wgZmx1c2hfZmxhZzsKKwl9IGFyZ3Nfc3RybV9pZGxlOworCisJc3RydWN0IHsKKwkJdm9pZCAqaHN0cmVhbTsKKwkJdTggKnBidWZmZXI7CisJCXUzMiBkd19ieXRlczsKKwkJdTMyIGR3X2J1Zl9zaXplOworCQl1MzIgZHdfYXJnOworCX0gYXJnc19zdHJtX2lzc3VlOworCisJc3RydWN0IHsKKwkJdm9pZCAqaG5vZGU7CisJCXUzMiBkaXJlY3Rpb247CisJCXUzMiBpbmRleDsKKwkJc3RydWN0IHN0cm1fYXR0ciBfX3VzZXIgKmF0dHJfaW47CisJCXZvaWQgKl9fdXNlciAqcGhfc3RyZWFtOworCX0gYXJnc19zdHJtX29wZW47CisKKwlzdHJ1Y3QgeworCQl2b2lkICpoc3RyZWFtOworCQl1OCAqX191c2VyICpidWZfcHRyOworCQl1MzIgX191c2VyICpieXRlczsKKwkJdTMyIF9fdXNlciAqYnVmX3NpemVfcHRyOworCQl1MzIgX191c2VyICpwZHdfYXJnOworCX0gYXJnc19zdHJtX3JlY2xhaW07CisKKwlzdHJ1Y3QgeworCQl2b2lkICpoc3RyZWFtOworCQl1MzIgZXZlbnRfbWFzazsKKwkJdTMyIG5vdGlmeV90eXBlOworCQlzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbiBfX3VzZXIgKmhub3RpZmljYXRpb247CisJfSBhcmdzX3N0cm1fcmVnaXN0ZXJub3RpZnk7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpfX3VzZXIgKnN0cmVhbV90YWI7CisJCXUzMiBzdHJtX251bTsKKwkJdTMyIF9fdXNlciAqcG1hc2s7CisJCXUzMiB1dGltZW91dDsKKwl9IGFyZ3Nfc3RybV9zZWxlY3Q7CisKKwkvKiBDTU0gTW9kdWxlICovCisJc3RydWN0IHsKKwkJc3RydWN0IGNtbV9vYmplY3QgKmhjbW1fbWdyOworCQl1MzIgdXNpemU7CisJCXN0cnVjdCBjbW1fYXR0cnMgKnBhdHRyczsKKwkJdm9pZCAqKnBwX2J1Zl92YTsKKwl9IGFyZ3NfY21tX2FsbG9jYnVmOworCisJc3RydWN0IHsKKwkJc3RydWN0IGNtbV9vYmplY3QgKmhjbW1fbWdyOworCQl2b2lkICpidWZfcGE7CisJCXUzMiB1bF9zZWdfaWQ7CisJfSBhcmdzX2NtbV9mcmVlYnVmOworCisJc3RydWN0IHsKKwkJdm9pZCAqaHByb2Nlc3NvcjsKKwkJc3RydWN0IGNtbV9vYmplY3QgKl9fdXNlciAqcGhfY21tX21ncjsKKwl9IGFyZ3NfY21tX2dldGhhbmRsZTsKKworCXN0cnVjdCB7CisJCXN0cnVjdCBjbW1fb2JqZWN0ICpoY21tX21ncjsKKwkJc3RydWN0IGNtbV9pbmZvIF9fdXNlciAqY21tX2luZm9fb2JqOworCX0gYXJnc19jbW1fZ2V0aW5mbzsKKworCS8qIFVUSUwgbW9kdWxlICovCisJc3RydWN0IHsKKwkJczMyIHV0aWxfYXJnYzsKKwkJY2hhciAqKnBwX2FyZ3Y7CisJfSBhcmdzX3V0aWxfdGVzdGRsbDsKK307CisKKy8qCisgKiBEc3BicmlkZ2UgSW9jdGwgbnVtYmVyaW5nIHNjaGVtZQorICoKKyAqICAgIDcgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgfCAgTW9kdWxlICAgfCAgIElvY3RsIE51bWJlciAgICB8CisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgfCB4IHwgeCB8IHggfCAwIHwgMCB8IDAgfCAwIHwgMCB8CisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyogSW9jdGwgZHJpdmVyIGlkZW50aWZpZXIgKi8KKyNkZWZpbmUgREIJCTB4REIKKworLyoKKyAqIEZvbGxvd2luZyBhcmUgdXNlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIG1vZHVsZSBpb2N0bHMsIHRoaXMgaXMgbmVlZGVkCisgKiBpbiBjYXNlIG5ldyBpb2N0bHMgYXJlIGludHJvZHVjZWQuCisgKi8KKyNkZWZpbmUgREJfTU9EVUxFX01BU0sJCTB4RTAKKyNkZWZpbmUgREJfSU9DX01BU0sJCTB4MUYKKworLyogSW9jdGwgbW9kdWxlIG1hc2tzICovCisjZGVmaW5lIERCX01HUgkJMHgwCisjZGVmaW5lIERCX1BST0MJCTB4MjAKKyNkZWZpbmUgREJfTk9ERQkJMHg0MAorI2RlZmluZSBEQl9TVFJNCQkweDYwCisjZGVmaW5lIERCX0NNTQkJMHg4MAorCisjZGVmaW5lIERCX01PRFVMRV9TSElGVAkJNQorCisvKiBVc2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW9jdGwgcGVyIGRzcGJyaWRnZSBtb2R1bGUgKi8KKyNkZWZpbmUgREJfSU9DKG1vZHVsZSwgbnVtKSBcCisJCQkoKChtb2R1bGUpICYgREJfTU9EVUxFX01BU0spIHwgKChudW0pICYgREJfSU9DX01BU0spKQorLyogVXNlZCB0byBnZXQgZHNwYnJpZGdlIGlvY3RsIG1vZHVsZSAqLworI2RlZmluZSBEQl9HRVRfTU9EVUxFKGNtZCkJKChjbWQpICYgREJfTU9EVUxFX01BU0spCisvKiBVc2VkIHRvIGdldCBkc3BicmlkZ2UgaW9jdGwgbnVtYmVyICovCisjZGVmaW5lIERCX0dFVF9JT0MoY21kKQkJKChjbWQpICYgREJfSU9DX01BU0spCisKKy8qIFRPRE86IFJlbW92ZSBkZXByZWNhdGVkIGFuZCBub3QgaW1wbGVtZW50ZWQgKi8KKworLyogTUdSIE1vZHVsZSAqLworI2RlZmluZSBNR1JfRU5VTU5PREVfSU5GTwlfSU9XUihEQiwgREJfSU9DKERCX01HUiwgMCksIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIE1HUl9FTlVNUFJPQ19JTkZPCV9JT1dSKERCLCBEQl9JT0MoREJfTUdSLCAxKSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgTUdSX1JFR0lTVEVST0JKRUNUCV9JT1dSKERCLCBEQl9JT0MoREJfTUdSLCAyKSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgTUdSX1VOUkVHSVNURVJPQkpFQ1QJX0lPV1IoREIsIERCX0lPQyhEQl9NR1IsIDMpLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBNR1JfV0FJVAkJX0lPV1IoREIsIERCX0lPQyhEQl9NR1IsIDQpLCB1bnNpZ25lZCBsb25nKQorLyogTUdSX0dFVF9QUk9DX1JFUyBEZXByZWNhdGVkICovCisjZGVmaW5lIE1HUl9HRVRfUFJPQ19SRVMJX0lPUihEQiwgREJfSU9DKERCX01HUiwgNSksIHVuc2lnbmVkIGxvbmcpCisKKy8qIFBST0MgTW9kdWxlICovCisjZGVmaW5lIFBST0NfQVRUQUNICQlfSU9XUihEQiwgREJfSU9DKERCX1BST0MsIDApLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBQUk9DX0NUUkwJCV9JT1IoREIsIERCX0lPQyhEQl9QUk9DLCAxKSwgdW5zaWduZWQgbG9uZykKKy8qIFBST0NfREVUQUNIIERlcHJlY2F0ZWQgKi8KKyNkZWZpbmUgUFJPQ19ERVRBQ0gJCV9JT1IoREIsIERCX0lPQyhEQl9QUk9DLCAyKSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgUFJPQ19FTlVNTk9ERQkJX0lPV1IoREIsIERCX0lPQyhEQl9QUk9DLCAzKSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgUFJPQ19FTlVNUkVTT1VSQ0VTCV9JT1dSKERCLCBEQl9JT0MoREJfUFJPQywgNCksIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIFBST0NfR0VUX1NUQVRFCQlfSU9XUihEQiwgREJfSU9DKERCX1BST0MsIDUpLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBQUk9DX0dFVF9UUkFDRQkJX0lPV1IoREIsIERCX0lPQyhEQl9QUk9DLCA2KSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgUFJPQ19MT0FECQlfSU9XKERCLCBEQl9JT0MoREJfUFJPQywgNyksIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIFBST0NfUkVHSVNURVJOT1RJRlkJX0lPV1IoREIsIERCX0lPQyhEQl9QUk9DLCA4KSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgUFJPQ19TVEFSVAkJX0lPVyhEQiwgREJfSU9DKERCX1BST0MsIDkpLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBQUk9DX1JTVk1FTQkJX0lPV1IoREIsIERCX0lPQyhEQl9QUk9DLCAxMCksIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIFBST0NfVU5SU1ZNRU0JCV9JT1coREIsIERCX0lPQyhEQl9QUk9DLCAxMSksIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIFBST0NfTUFQTUVNCQlfSU9XUihEQiwgREJfSU9DKERCX1BST0MsIDEyKSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgUFJPQ19VTk1BUE1FTQkJX0lPUihEQiwgREJfSU9DKERCX1BST0MsIDEzKSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgUFJPQ19GTFVTSE1FTU9SWQlfSU9XKERCLCBEQl9JT0MoREJfUFJPQywgMTQpLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBQUk9DX1NUT1AJCV9JT1dSKERCLCBEQl9JT0MoREJfUFJPQywgMTUpLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBQUk9DX0lOVkFMSURBVEVNRU1PUlkJX0lPVyhEQiwgREJfSU9DKERCX1BST0MsIDE2KSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgUFJPQ19CRUdJTkRNQQkJX0lPVyhEQiwgREJfSU9DKERCX1BST0MsIDE3KSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgUFJPQ19FTkRETUEJCV9JT1coREIsIERCX0lPQyhEQl9QUk9DLCAxOCksIHVuc2lnbmVkIGxvbmcpCisKKy8qIE5PREUgTW9kdWxlICovCisjZGVmaW5lIE5PREVfQUxMT0NBVEUJCV9JT1dSKERCLCBEQl9JT0MoREJfTk9ERSwgMCksIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIE5PREVfQUxMT0NNU0dCVUYJX0lPV1IoREIsIERCX0lPQyhEQl9OT0RFLCAxKSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgTk9ERV9DSEFOR0VQUklPUklUWQlfSU9XKERCLCBEQl9JT0MoREJfTk9ERSwgMiksIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIE5PREVfQ09OTkVDVAkJX0lPVyhEQiwgREJfSU9DKERCX05PREUsIDMpLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBOT0RFX0NSRUFURQkJX0lPVyhEQiwgREJfSU9DKERCX05PREUsIDQpLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBOT0RFX0RFTEVURQkJX0lPVyhEQiwgREJfSU9DKERCX05PREUsIDUpLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBOT0RFX0ZSRUVNU0dCVUYJCV9JT1coREIsIERCX0lPQyhEQl9OT0RFLCA2KSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgTk9ERV9HRVRBVFRSCQlfSU9XUihEQiwgREJfSU9DKERCX05PREUsIDcpLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBOT0RFX0dFVE1FU1NBR0UJCV9JT1dSKERCLCBEQl9JT0MoREJfTk9ERSwgOCksIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIE5PREVfUEFVU0UJCV9JT1coREIsIERCX0lPQyhEQl9OT0RFLCA5KSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgTk9ERV9QVVRNRVNTQUdFCQlfSU9XKERCLCBEQl9JT0MoREJfTk9ERSwgMTApLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBOT0RFX1JFR0lTVEVSTk9USUZZCV9JT1dSKERCLCBEQl9JT0MoREJfTk9ERSwgMTEpLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBOT0RFX1JVTgkJX0lPVyhEQiwgREJfSU9DKERCX05PREUsIDEyKSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgTk9ERV9URVJNSU5BVEUJCV9JT1dSKERCLCBEQl9JT0MoREJfTk9ERSwgMTMpLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBOT0RFX0dFVFVVSURQUk9QUwlfSU9XUihEQiwgREJfSU9DKERCX05PREUsIDE0KSwgdW5zaWduZWQgbG9uZykKKworLyogU1RSTSBNb2R1bGUgKi8KKyNkZWZpbmUgU1RSTV9BTExPQ0FURUJVRkZFUglfSU9XUihEQiwgREJfSU9DKERCX1NUUk0sIDApLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBTVFJNX0NMT1NFCQlfSU9XKERCLCBEQl9JT0MoREJfU1RSTSwgMSksIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIFNUUk1fRlJFRUJVRkZFUgkJX0lPV1IoREIsIERCX0lPQyhEQl9TVFJNLCAyKSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgU1RSTV9HRVRFVkVOVEhBTkRMRQlfSU8oREIsIERCX0lPQyhEQl9TVFJNLCAzKSkJLyogTm90IEltcGwnZCAqLworI2RlZmluZSBTVFJNX0dFVElORk8JCV9JT1dSKERCLCBEQl9JT0MoREJfU1RSTSwgNCksIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIFNUUk1fSURMRQkJX0lPVyhEQiwgREJfSU9DKERCX1NUUk0sIDUpLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBTVFJNX0lTU1VFCQlfSU9XKERCLCBEQl9JT0MoREJfU1RSTSwgNiksIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIFNUUk1fT1BFTgkJX0lPV1IoREIsIERCX0lPQyhEQl9TVFJNLCA3KSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgU1RSTV9SRUNMQUlNCQlfSU9XUihEQiwgREJfSU9DKERCX1NUUk0sIDgpLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBTVFJNX1JFR0lTVEVSTk9USUZZCV9JT1dSKERCLCBEQl9JT0MoREJfU1RSTSwgOSksIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIFNUUk1fU0VMRUNUCQlfSU9XUihEQiwgREJfSU9DKERCX1NUUk0sIDEwKSwgdW5zaWduZWQgbG9uZykKKworLyogQ01NIE1vZHVsZSAqLworI2RlZmluZSBDTU1fQUxMT0NCVUYJCV9JTyhEQiwgREJfSU9DKERCX0NNTSwgMCkpCS8qIE5vdCBJbXBsJ2QgKi8KKyNkZWZpbmUgQ01NX0ZSRUVCVUYJCV9JTyhEQiwgREJfSU9DKERCX0NNTSwgMSkpCS8qIE5vdCBJbXBsJ2QgKi8KKyNkZWZpbmUgQ01NX0dFVEhBTkRMRQkJX0lPUihEQiwgREJfSU9DKERCX0NNTSwgMiksIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIENNTV9HRVRJTkZPCQlfSU9SKERCLCBEQl9JT0MoREJfQ01NLCAzKSwgdW5zaWduZWQgbG9uZykKKworI2VuZGlmIC8qIERTUEFQSUlPQ1RMXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGFwaS5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGFwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5OWM2ODcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwYXBpLmgKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBkc3BhcGkuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBJbmNsdWRlcyB0aGUgd3JhcHBlciBmdW5jdGlvbnMgY2FsbGVkIGRpcmVjdGx5IGJ5IHRoZQorICogRGV2aWNlSU9Db250cm9sIGludGVyZmFjZS4KKyAqCisgKiBOb3RlczoKKyAqICAgQnJpZGdlIHNlcnZpY2VzIGV4cG9ydGVkIHRvIEJyaWRnZSBkcml2ZXIgYXJlIGluaXRpYWxpemVkIGJ5IHRoZSBEU1BBUEkgb24KKyAqICAgYmVoYWxmIG9mIHRoZSBCcmlkZ2UgZHJpdmVyLiBCcmlkZ2UgZHJpdmVyIG11c3Qgbm90IGNhbGwgbW9kdWxlIEluaXQvRXhpdAorICogICBmdW5jdGlvbnMuCisgKgorICogICBUbyBlbnN1cmUgQnJpZGdlIGRyaXZlciBiaW5hcnkgY29tcGF0aWJpbGl0eSBhY3Jvc3MgZGlmZmVyZW50IHBsYXRmb3JtcywKKyAqICAgZm9yIHRoZSBzYW1lIHByb2Nlc3NvciwgYSBCcmlkZ2UgZHJpdmVyIG11c3QgcmVzdHJpY3QgaXRzIHVzYWdlIG9mIHN5c3RlbQorICogICBzZXJ2aWNlcyB0byB0aG9zZSBleHBvcnRlZCBieSB0aGUgRFNQQVBJIGxpYnJhcnkuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBEU1BBUElfCisjZGVmaW5lIERTUEFQSV8KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BhcGktaW9jdGwuaD4KKworLyogVGhpcyBCUkQgQVBJIExpYnJhcnkgVmVyc2lvbjogKi8KKyNkZWZpbmUgQlJEX0FQSV9NQUpPUl9WRVJTSU9OICAgKHUzMik4CS8qIC44eCAtIEFscGhhLCAuOXggLSBCZXRhLCAxLnggRkNTICovCisjZGVmaW5lIEJSRF9BUElfTUlOT1JfVkVSU0lPTiAgICh1MzIpMAorCisvKgorICogID09PT09PT09IGFwaV9jYWxsX2Rldl9pb2N0bCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENhbGwgdGhlICh3cmFwcGVyKSBmdW5jdGlvbiBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgQVBJIElPQ1RMLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGNtZDogICAgICAgIElPQ1RMIGlkLCBiYXNlIDAuCisgKiAgICAgIGFyZ3M6ICAgICAgIEFyZ3VtZW50IHN0cnVjdHVyZS4KKyAqICAgICAgcmVzdWx0OgorICogIFJldHVybnM6CisgKiAgICAgIDAgaWYgY29tbWFuZCBjYWxsZWQ7IC1FSU5WQUwgaWYgY29tbWFuZCBub3QgaW4gSU9DVEwKKyAqICAgICAgdGFibGUuCisgKiAgUmVxdWlyZXM6CisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBhcGlfY2FsbF9kZXZfaW9jdGwodW5zaWduZWQgaW50IGNtZCwKKwkJCQkgICAgICB1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsCisJCQkJICAgICAgdTMyICpyZXN1bHQsIHZvaWQgKnByX2N0eHQpOworCisvKgorICogID09PT09PT09IGFwaV9pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZSBtb2R1bGVzIHVzZWQgYnkgQnJpZGdlIEFQSS4KKyAqICAgICAgVGhpcyBwcm9jZWR1cmUgaXMgY2FsbGVkIHdoZW4gdGhlIGRyaXZlciBpcyBsb2FkZWQuCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogICAgICBUUlVFIGlmIHN1Y2Nlc3M7IEZBTFNFIG90aGVyd2lzZS4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gYm9vbCBhcGlfaW5pdCh2b2lkKTsKKworLyoKKyAqICA9PT09PT09PSBhcGlfaW5pdF9jb21wbGV0ZTIgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBQZXJmb3JtIGFueSByZXF1aXJlZCBicmlkZ2UgaW5pdGlhbGl6YXRpb24gd2hpY2ggY2Fubm90CisgKiAgICAgIGJlIHBlcmZvcm1lZCBpbiBhcGlfaW5pdCgpIG9yIGRldl9zdGFydF9kZXZpY2UoKSBkdWUKKyAqICAgICAgdG8gdGhlIGZhY3QgdGhhdCBzb21lIHNlcnZpY2VzIGFyZSBub3QgeWV0CisgKiAgICAgIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQuCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgQWxsb3cgdGhpcyBkZXZpY2UgdG8gbG9hZAorICogICAgICAtRVBFUk06ICAgICAgRmFpbHVyZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgQnJpZGdlIEFQSSBpbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IGFwaV9pbml0X2NvbXBsZXRlMih2b2lkKTsKKworLyoKKyAqICA9PT09PT09PSBhcGlfZXhpdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEV4aXQgYWxsIG1vZHVsZXMgaW5pdGlhbGl6ZWQgaW4gYXBpX2luaXQodm9pZCkuCisgKiAgICAgIFRoaXMgcHJvY2VkdXJlIGlzIGNhbGxlZCB3aGVuIHRoZSBkcml2ZXIgaXMgdW5sb2FkZWQuCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBhcGlfaW5pdCh2b2lkKSB3YXMgcHJldmlvdXNseSBjYWxsZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgUmVzb3VyY2VzIGFjcXVpcmVkIGluIGFwaV9pbml0KHZvaWQpIGFyZSBmcmVlZC4KKyAqLworZXh0ZXJuIHZvaWQgYXBpX2V4aXQodm9pZCk7CisKKy8qIE1HUiB3cmFwcGVyIGZ1bmN0aW9ucyAqLworZXh0ZXJuIHUzMiBtZ3J3cmFwX2VudW1fbm9kZV9pbmZvKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7CitleHRlcm4gdTMyIG1ncndyYXBfZW51bV9wcm9jX2luZm8odW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgbWdyd3JhcF9yZWdpc3Rlcl9vYmplY3QodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgbWdyd3JhcF91bnJlZ2lzdGVyX29iamVjdCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBtZ3J3cmFwX3dhaXRfZm9yX2JyaWRnZV9ldmVudHModW5pb24gdHJhcHBlZF9hcmdzICphcmdzLAorCQkJCQkgIHZvaWQgKnByX2N0eHQpOworCitleHRlcm4gdTMyIG1ncndyYXBfZ2V0X3Byb2Nlc3NfcmVzb3VyY2VzX2luZm8odW5pb24gdHJhcHBlZF9hcmdzICphcmdzLAorCQkJCQkgICAgICB2b2lkICpwcl9jdHh0KTsKKworLyogQ1BSQyAoUHJvY2Vzc29yKSB3cmFwcGVyIEZ1bmN0aW9ucyAqLworZXh0ZXJuIHUzMiBwcm9jd3JhcF9hdHRhY2godW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgcHJvY3dyYXBfY3RybCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBwcm9jd3JhcF9kZXRhY2godW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgcHJvY3dyYXBfZW51bV9ub2RlX2luZm8odW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgcHJvY3dyYXBfZW51bV9yZXNvdXJjZXModW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgcHJvY3dyYXBfZ2V0X3N0YXRlKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7CitleHRlcm4gdTMyIHByb2N3cmFwX2dldF90cmFjZSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBwcm9jd3JhcF9sb2FkKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7CitleHRlcm4gdTMyIHByb2N3cmFwX3JlZ2lzdGVyX25vdGlmeSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBwcm9jd3JhcF9zdGFydCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBwcm9jd3JhcF9yZXNlcnZlX21lbW9yeSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBwcm9jd3JhcF91bl9yZXNlcnZlX21lbW9yeSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBwcm9jd3JhcF9tYXAodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgcHJvY3dyYXBfdW5fbWFwKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7CitleHRlcm4gdTMyIHByb2N3cmFwX2ZsdXNoX21lbW9yeSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBwcm9jd3JhcF9zdG9wKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7CitleHRlcm4gdTMyIHByb2N3cmFwX2ludmFsaWRhdGVfbWVtb3J5KHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7CitleHRlcm4gdTMyIHByb2N3cmFwX2JlZ2luX2RtYSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBwcm9jd3JhcF9lbmRfZG1hKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7CisKKy8qIE5PREUgd3JhcHBlciBmdW5jdGlvbnMgKi8KK2V4dGVybiB1MzIgbm9kZXdyYXBfYWxsb2NhdGUodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgbm9kZXdyYXBfYWxsb2NfbXNnX2J1Zih1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBub2Rld3JhcF9jaGFuZ2VfcHJpb3JpdHkodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgbm9kZXdyYXBfY29ubmVjdCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBub2Rld3JhcF9jcmVhdGUodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgbm9kZXdyYXBfZGVsZXRlKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7CitleHRlcm4gdTMyIG5vZGV3cmFwX2ZyZWVfbXNnX2J1Zih1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBub2Rld3JhcF9nZXRfYXR0cih1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBub2Rld3JhcF9nZXRfbWVzc2FnZSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBub2Rld3JhcF9wYXVzZSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBub2Rld3JhcF9wdXRfbWVzc2FnZSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBub2Rld3JhcF9yZWdpc3Rlcl9ub3RpZnkodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgbm9kZXdyYXBfcnVuKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7CitleHRlcm4gdTMyIG5vZGV3cmFwX3Rlcm1pbmF0ZSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBub2Rld3JhcF9nZXRfdXVpZF9wcm9wcyh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworCisvKiBTVFJNIHdyYXBwZXIgZnVuY3Rpb25zICovCitleHRlcm4gdTMyIHN0cm13cmFwX2FsbG9jYXRlX2J1ZmZlcih1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBzdHJtd3JhcF9jbG9zZSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBzdHJtd3JhcF9mcmVlX2J1ZmZlcih1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBzdHJtd3JhcF9nZXRfZXZlbnRfaGFuZGxlKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7CitleHRlcm4gdTMyIHN0cm13cmFwX2dldF9pbmZvKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7CitleHRlcm4gdTMyIHN0cm13cmFwX2lkbGUodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgc3RybXdyYXBfaXNzdWUodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgc3RybXdyYXBfb3Blbih1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBzdHJtd3JhcF9yZWNsYWltKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7CitleHRlcm4gdTMyIHN0cm13cmFwX3JlZ2lzdGVyX25vdGlmeSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBzdHJtd3JhcF9zZWxlY3QodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKKworZXh0ZXJuIHUzMiBjbW13cmFwX2NhbGxvY19idWYodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgY21td3JhcF9mcmVlX2J1Zih1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBjbW13cmFwX2dldF9oYW5kbGUodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgY21td3JhcF9nZXRfaW5mbyh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworCisjZW5kaWYgLyogRFNQQVBJXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGNobmwuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3BjaG5sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE0NmE1MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3BjaG5sLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIGRzcGNobmwuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBEZWNsYXJlcyB0aGUgdXBwZXIgZWRnZSBjaGFubmVsIGNsYXNzIGxpYnJhcnkgZnVuY3Rpb25zIHJlcXVpcmVkIGJ5CisgKiBhbGwgQnJpZGdlIGRyaXZlciAvIERTUCBBUEkgZHJpdmVyIGludGVyZmFjZSB0YWJsZXMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUKKyAqIGltcGxlbWVudGVkIGJ5IGV2ZXJ5IGNsYXNzIG9mIEJyaWRnZSBjaGFubmVsIGxpYnJhcnkuCisgKgorICogTm90ZXM6CisgKiAgIFRoZSBmdW5jdGlvbiBjb21tZW50IGhlYWRlcnMgcmVzaWRlIGluIGRzcGRlZnMuaC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIERTUENITkxfCisjZGVmaW5lIERTUENITkxfCisKK2V4dGVybiBpbnQgYnJpZGdlX2NobmxfY3JlYXRlKHN0cnVjdCBjaG5sX21nciAqKmNoYW5uZWxfbWdyLAorCQkJCSAgICAgc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGNobmxfbWdyYXR0cnMKKwkJCQkgICAgICptZ3JfYXR0cnRzKTsKKworZXh0ZXJuIGludCBicmlkZ2VfY2hubF9kZXN0cm95KHN0cnVjdCBjaG5sX21nciAqaGNobmxfbWdyKTsKKworZXh0ZXJuIGludCBicmlkZ2VfY2hubF9vcGVuKHN0cnVjdCBjaG5sX29iamVjdCAqKmNobmwsCisJCQkJICAgc3RydWN0IGNobmxfbWdyICpoY2hubF9tZ3IsCisJCQkJICAgczggY2hubF9tb2RlLAorCQkJCSAgIHUzMiBjaF9pZCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgY2hubF9hdHRyCisJCQkJICAgKnBhdHRycyk7CisKK2V4dGVybiBpbnQgYnJpZGdlX2NobmxfY2xvc2Uoc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iaik7CisKK2V4dGVybiBpbnQgYnJpZGdlX2NobmxfYWRkX2lvX3JlcShzdHJ1Y3QgY2hubF9vYmplY3QgKmNobmxfb2JqLAorCQkJCSAgICAgIHZvaWQgKmhvc3RfYnVmLAorCQkJCSAgICAgIHUzMiBieXRlX3NpemUsIHUzMiBidWZfc2l6ZSwKKwkJCQkgICAgICB1MzIgZHdfZHNwX2FkZHIsIHUzMiBkd19hcmcpOworCitleHRlcm4gaW50IGJyaWRnZV9jaG5sX2dldF9pb2Moc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iaiwKKwkJCQkgICB1MzIgdGltZW91dCwgc3RydWN0IGNobmxfaW9jICpjaGFuX2lvYyk7CisKK2V4dGVybiBpbnQgYnJpZGdlX2NobmxfY2FuY2VsX2lvKHN0cnVjdCBjaG5sX29iamVjdCAqY2hubF9vYmopOworCitleHRlcm4gaW50IGJyaWRnZV9jaG5sX2ZsdXNoX2lvKHN0cnVjdCBjaG5sX29iamVjdCAqY2hubF9vYmosCisJCQkJICAgIHUzMiB0aW1lb3V0KTsKKworZXh0ZXJuIGludCBicmlkZ2VfY2hubF9nZXRfaW5mbyhzdHJ1Y3QgY2hubF9vYmplY3QgKmNobmxfb2JqLAorCQkJCSAgICBzdHJ1Y3QgY2hubF9pbmZvICpjaGFubmVsX2luZm8pOworCitleHRlcm4gaW50IGJyaWRnZV9jaG5sX2dldF9tZ3JfaW5mbyhzdHJ1Y3QgY2hubF9tZ3IgKmhjaG5sX21nciwKKwkJCQkJdTMyIGNoX2lkLCBzdHJ1Y3QgY2hubF9tZ3JpbmZvCisJCQkJCSptZ3JfaW5mbyk7CisKK2V4dGVybiBpbnQgYnJpZGdlX2NobmxfaWRsZShzdHJ1Y3QgY2hubF9vYmplY3QgKmNobmxfb2JqLAorCQkJCSAgIHUzMiB0aW1lb3V0LCBib29sIGZsdXNoX2RhdGEpOworCitleHRlcm4gaW50IGJyaWRnZV9jaG5sX3JlZ2lzdGVyX25vdGlmeShzdHJ1Y3QgY2hubF9vYmplY3QgKmNobmxfb2JqLAorCQkJCQkgICB1MzIgZXZlbnRfbWFzaywKKwkJCQkJICAgdTMyIG5vdGlmeV90eXBlLAorCQkJCQkgICBzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbgorCQkJCQkgICAqaG5vdGlmaWNhdGlvbik7CisKKyNlbmRpZiAvKiBEU1BDSE5MXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGRlZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3BkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFlN2QxNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3BkZWZzLmgKQEAgLTAsMCArMSwxMDU0IEBACisvKgorICogZHNwZGVmcy5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIEJyaWRnZSBkcml2ZXIgZW50cnkgcG9pbnQgYW5kIGludGVyZmFjZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCisgKgorICogTm90ZXM6CisgKiAgIFRoZSBEU1AgQVBJIG9idGFpbnMgaXQncyBmdW5jdGlvbiBpbnRlcmZhY2UgdG8KKyAqICAgdGhlIEJyaWRnZSBkcml2ZXIgdmlhIGEgY2FsbCB0byBicmlkZ2VfZHJ2X2VudHJ5KCkuCisgKgorICogICBCcmlkZ2Ugc2VydmljZXMgZXhwb3J0ZWQgdG8gQnJpZGdlIGRyaXZlcnMgYXJlIGluaXRpYWxpemVkIGJ5IHRoZQorICogICBEU1AgQVBJIG9uIGJlaGFsZiBvZiB0aGUgQnJpZGdlIGRyaXZlci4KKyAqCisgKiAgIEJyaWRnZSBmdW5jdGlvbiBEQkMgUmVxdWlyZXMgYW5kIEVuc3VyZXMgYXJlIGFsc28gbWFkZSBieSB0aGUgRFNQIEFQSSBvbgorICogICBiZWhhbGYgb2YgdGhlIEJyaWRnZSBkcml2ZXIsIHRvIHNpbXBsaWZ5IHRoZSBCcmlkZ2UgZHJpdmVyIGNvZGUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBEU1BERUZTXworI2RlZmluZSBEU1BERUZTXworCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2JyZGRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY2ZnZGVmcy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9jaG5scHJpdi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kZWhkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RldmRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvaW9kZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL21zZ2RlZnMuaD4KKworLyoKKyAqICBBbnkgSU9DVExTIGF0IG9yIGFib3ZlIHRoaXMgdmFsdWUgYXJlIHJlc2VydmVkIGZvciBzdGFuZGFyZCBCcmlkZ2UgZHJpdmVyCisgKiAgaW50ZXJmYWNlcy4KKyAqLworI2RlZmluZSBCUkRfUkVTRVJWRURJT0NUTEJBU0UgICAweDgwMDAKKworLyogSGFuZGxlIHRvIEJyaWRnZSBkcml2ZXIncyBwcml2YXRlIGRldmljZSBjb250ZXh0LiAqLworc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIEJSSURHRSBEUklWRVIgRlVOQ1RJT04gVFlQRVMgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2JyZF9tb25pdG9yID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQnJpbmcgdGhlIGJvYXJkIHRvIHRoZSBCUkRfSURMRSAobW9uaXRvcikgc3RhdGUuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgZGV2X2N0eHQ6ICAgIEhhbmRsZSB0byBCcmlkZ2UgZHJpdmVyIGRlZmluZWQgZGV2aWNlIGNvbnRleHQuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FVElNRURPVVQ6ICBUaW1lb3V0IG9jY3VyZWQgd2FpdGluZyBmb3IgYSByZXNwb25zZSBmcm9tIGhhcmR3YXJlLgorICogICAgICAtRVBFUk06ICAgICAgT3RoZXIsIHVuc3BlY2lmaWVkIGVycm9yLgorICogIFJlcXVpcmVzOgorICogICAgICBkZXZfY3R4dCAhPSBOVUxMCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgIEJvYXJkIGlzIGluIEJSRF9JRExFIHN0YXRlOworICogICAgICBlbHNlOiAgICAgICAgICAgQm9hcmQgc3RhdGUgaXMgaW5kZXRlcm1pbmF0ZS4KKyAqLwordHlwZWRlZiBpbnQoKmZ4bl9icmRfbW9uaXRvcikgKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0KTsKKworLyoKKyAqICA9PT09PT09PSBmeG5fYnJkX3NldHN0YXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgU2V0cyB0aGUgQnJpZGdlIGRyaXZlciBzdGF0ZQorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGRldl9jdHh0OiAgICBIYW5kbGUgdG8gQnJpZGdlIGRyaXZlciBkZWZpbmVkIGRldmljZSBpbmZvLgorICogICAgICBicmRfc3RhdGU6ICAgICAgQm9hcmQgc3RhdGUKKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVQRVJNOiAgICAgIE90aGVyLCB1bnNwZWNpZmllZCBlcnJvci4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGV2X2N0eHQgIT0gTlVMTDsKKyAqICAgICAgYnJkX3N0YXRlICA8PSBCUkRfTEFTVFNUQVRFLgorICogIEVuc3VyZXM6CisgKiAgICAgIGJyZF9zdGF0ZSAgPD0gQlJEX0xBU1RTVEFURS4KKyAqICBVcGRhdGUgdGhlIEJvYXJkIHN0YXRlIHRvIHRoZSBzcGVjaWZpZWQgc3RhdGUuCisgKi8KK3R5cGVkZWYgaW50KCpmeG5fYnJkX3NldHN0YXRlKSAoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dAorCQkJCSAgICAgICAqIGRldl9jdHh0LCB1MzIgYnJkX3N0YXRlKTsKKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfYnJkX3N0YXJ0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQnJpbmcgYm9hcmQgdG8gdGhlIEJSRF9SVU5OSU5HIChzdGFydCkgc3RhdGUuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgZGV2X2N0eHQ6ICAgIEhhbmRsZSB0byBCcmlkZ2UgZHJpdmVyIGRlZmluZWQgZGV2aWNlIGNvbnRleHQuCisgKiAgICAgIGRzcF9hZGRyOiAgICAgICBEU1AgYWRkcmVzcyBhdCB3aGljaCB0byBzdGFydCBleGVjdXRpb24uCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FVElNRURPVVQ6ICBUaW1lb3V0IG9jY3VyZWQgd2FpdGluZyBmb3IgYSByZXNwb25zZSBmcm9tIGhhcmR3YXJlLgorICogICAgICAtRVBFUk06ICAgICAgT3RoZXIsIHVuc3BlY2lmaWVkIGVycm9yLgorICogIFJlcXVpcmVzOgorICogICAgICBkZXZfY3R4dCAhPSBOVUxMCisgKiAgICAgIEJvYXJkIGlzIGluIG1vbml0b3IgKEJSRF9JRExFKSBzdGF0ZS4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgQm9hcmQgaXMgaW4gQlJEX1JVTk5JTkcgc3RhdGUuCisgKiAgICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHRzIHRvIHRoZSBQQyBhcmUgZW5hYmxlZC4KKyAqICAgICAgZWxzZTogICAgICAgICAgIEJvYXJkIHN0YXRlIGlzIGluZGV0ZXJtaW5hdGUuCisgKi8KK3R5cGVkZWYgaW50KCpmeG5fYnJkX3N0YXJ0KSAoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dAorCQkJCSAgICAqIGRldl9jdHh0LCB1MzIgZHNwX2FkZHIpOworCisvKgorICogID09PT09PT09IGJyaWRnZV9icmRfbWVtX2NvcHkgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogIENvcHkgbWVtb3J5IGZyb20gb25lIERTUCBhZGRyZXNzIHRvIGFub3RoZXIKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkZXZfY29udGV4dDogICAgUG9pbnRlciB0byBjb250ZXh0IGhhbmRsZQorICogIGRzcF9kZXN0X2FkZHI6ICBEU1AgYWRkcmVzcyB0byBjb3B5IHRvCisgKiAgZHNwX3NyY19hZGRyOiAgIERTUCBhZGRyZXNzIHRvIGNvcHkgZnJvbQorICogIHVsX251bV9ieXRlczogTnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKKyAqICBtZW1fdHlwZTogICBXaGF0IHNlY3Rpb24gb2YgbWVtb3J5IHRvIGNvcHkgdG8KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVQRVJNOiAgICAgIE90aGVyLCB1bnNwZWNpZmllZCBlcnJvci4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGV2X2NvbnRleHQgIT0gTlVMTAorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAgICAgICBCb2FyZCBpcyBpbiBCUkRfUlVOTklORyBzdGF0ZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdHMgdG8gdGhlIFBDIGFyZSBlbmFibGVkLgorICogICAgICBlbHNlOiAgICAgICAgICAgQm9hcmQgc3RhdGUgaXMgaW5kZXRlcm1pbmF0ZS4KKyAqLwordHlwZWRlZiBpbnQoKmZ4bl9icmRfbWVtY29weSkgKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQKKwkJCQkgICAgICAqIGRldl9jdHh0LAorCQkJCSAgICAgIHUzMiBkc3BfZGVzdF9hZGRyLAorCQkJCSAgICAgIHUzMiBkc3Bfc3JjX2FkZHIsCisJCQkJICAgICAgdTMyIHVsX251bV9ieXRlcywgdTMyIG1lbV90eXBlKTsKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2JyZF9tZW1fd3JpdGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBXcml0ZSBhIGJsb2NrIG9mIGhvc3QgbWVtb3J5IGludG8gYSBEU1AgYWRkcmVzcywgaW50byBhIGdpdmVuIG1lbW9yeQorICogICAgICBzcGFjZS4gIFVubGlrZSBicmlkZ2VfYnJkX3dyaXRlLCB0aGlzIEFQSSBkb2VzIHJlc2V0IHRoZSBEU1AKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkZXZfY3R4dDogICAgSGFuZGxlIHRvIEJyaWRnZSBkcml2ZXIgZGVmaW5lZCBkZXZpY2UgaW5mby4KKyAqICAgICAgZHNwX2FkZHI6ICAgICAgIEFkZHJlc3Mgb24gRFNQIGJvYXJkIChEZXN0aW5hdGlvbikuCisgKiAgICAgIGhvc3RfYnVmOiAgICAgICBQb2ludGVyIHRvIGhvc3QgYnVmZmVyIChTb3VyY2UpLgorICogICAgICB1bF9udW1fYnl0ZXM6ICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIuCisgKiAgICAgIG1lbV90eXBlOiAgICAgICBNZW1vcnkgc3BhY2Ugb24gRFNQIHRvIHdoaWNoIHRvIHRyYW5zZmVyLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRVRJTUVET1VUOiAgVGltZW91dCBvY2N1cmVkIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgZnJvbSBoYXJkd2FyZS4KKyAqICAgICAgLUVQRVJNOiAgICAgIE90aGVyLCB1bnNwZWNpZmllZCBlcnJvci4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGV2X2N0eHQgIT0gTlVMTDsKKyAqICAgICAgaG9zdF9idWYgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIGludCgqZnhuX2JyZF9tZW13cml0ZSkgKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQKKwkJCQkgICAgICAgKiBkZXZfY3R4dCwKKwkJCQkgICAgICAgdTggKmhvc3RfYnVmLAorCQkJCSAgICAgICB1MzIgZHNwX2FkZHIsIHUzMiB1bF9udW1fYnl0ZXMsCisJCQkJICAgICAgIHUzMiBtZW1fdHlwZSk7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2JyZF9tZW1fbWFwID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgTWFwIGEgTVBVIG1lbW9yeSByZWdpb24gdG8gYSBEU1AvSVZBIG1lbW9yeSBzcGFjZQorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGRldl9jdHh0OiAgICBIYW5kbGUgdG8gQnJpZGdlIGRyaXZlciBkZWZpbmVkIGRldmljZSBpbmZvLgorICogICAgICB1bF9tcHVfYWRkcjogICAgICBNUFUgbWVtb3J5IHJlZ2lvbiBzdGFydCBhZGRyZXNzLgorICogICAgICB2aXJ0X2FkZHI6ICAgICAgRFNQL0lWQSBtZW1vcnkgcmVnaW9uIHU4IGFkZHJlc3MuCisgKiAgICAgIHVsX251bV9ieXRlczogICAgIE51bWJlciBvZiBieXRlcyB0byBtYXAuCisgKiAgICAgIG1hcF9hdHRyczogICAgICAgTWFwcGluZyBhdHRyaWJ1dGVzIChlLmcuIGVuZGlhbm5lc3MpLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRVBFUk06ICAgICAgT3RoZXIsIHVuc3BlY2lmaWVkIGVycm9yLgorICogIFJlcXVpcmVzOgorICogICAgICBkZXZfY3R4dCAhPSBOVUxMOworICogIEVuc3VyZXM6CisgKi8KK3R5cGVkZWYgaW50KCpmeG5fYnJkX21lbW1hcCkgKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQKKwkJCQkgICAgICogZGV2X2N0eHQsIHUzMiB1bF9tcHVfYWRkciwKKwkJCQkgICAgIHUzMiB2aXJ0X2FkZHIsIHUzMiB1bF9udW1fYnl0ZXMsCisJCQkJICAgICB1MzIgbWFwX2F0dHIsCisJCQkJICAgICBzdHJ1Y3QgcGFnZSAqKm1hcHBlZF9wYWdlcyk7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2JyZF9tZW1fdW5fbWFwID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgVW5NYXAgYW4gTVBVIG1lbW9yeSByZWdpb24gZnJvbSBEU1AvSVZBIG1lbW9yeSBzcGFjZQorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGRldl9jdHh0OiAgICBIYW5kbGUgdG8gQnJpZGdlIGRyaXZlciBkZWZpbmVkIGRldmljZSBpbmZvLgorICogICAgICB2aXJ0X2FkZHI6ICAgICAgRFNQL0lWQSBtZW1vcnkgcmVnaW9uIHU4IGFkZHJlc3MuCisgKiAgICAgIHVsX251bV9ieXRlczogICAgIE51bWJlciBvZiBieXRlcyB0byB1bm1hcC4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVQRVJNOiAgICAgIE90aGVyLCB1bnNwZWNpZmllZCBlcnJvci4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGV2X2N0eHQgIT0gTlVMTDsKKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIGludCgqZnhuX2JyZF9tZW11bm1hcCkgKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQKKwkJCQkgICAgICAgKiBkZXZfY3R4dCwKKwkJCQkgICAgICAgdTMyIHZpcnRfYWRkciwgdTMyIHVsX251bV9ieXRlcyk7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2JyZF9zdG9wID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQnJpbmcgYm9hcmQgdG8gdGhlIEJSRF9TVE9QUEVEIHN0YXRlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGRldl9jdHh0OiAgICBIYW5kbGUgdG8gQnJpZGdlIGRyaXZlciBkZWZpbmVkIGRldmljZSBjb250ZXh0LgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRVRJTUVET1VUOiAgVGltZW91dCBvY2N1cmVkIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgZnJvbSBoYXJkd2FyZS4KKyAqICAgICAgLUVQRVJNOiAgICAgIE90aGVyLCB1bnNwZWNpZmllZCBlcnJvci4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGV2X2N0eHQgIT0gTlVMTAorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAgICAgICBCb2FyZCBpcyBpbiBCUkRfU1RPUFBFRCAoc3RvcCkgc3RhdGU7CisgKiAgICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHRzIHRvIHRoZSBQQyBhcmUgZGlzYWJsZWQuCisgKiAgICAgIGVsc2U6ICAgICAgICAgICBCb2FyZCBzdGF0ZSBpcyBpbmRldGVybWluYXRlLgorICovCit0eXBlZGVmIGludCgqZnhuX2JyZF9zdG9wKSAoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQpOworCisvKgorICogID09PT09PT09IGJyaWRnZV9icmRfc3RhdHVzID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmVwb3J0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBib2FyZC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkZXZfY3R4dDogICAgSGFuZGxlIHRvIEJyaWRnZSBkcml2ZXIgZGVmaW5lZCBkZXZpY2UgY29udGV4dC4KKyAqICAgICAgYm9hcmRfc3RhdGU6ICAgIFB0ciB0byBCUkQgc3RhdHVzIHZhcmlhYmxlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGJvYXJkX3N0YXRlICE9IE5VTEw7CisgKiAgICAgIGRldl9jdHh0ICE9IE5VTEwKKyAqICBFbnN1cmVzOgorICogICAgICAqYm9hcmRfc3RhdGUgaXMgb25lIG9mCisgKiAgICAgICB7QlJEX1NUT1BQRUQsIEJSRF9JRExFLCBCUkRfUlVOTklORywgQlJEX1VOS05PV059OworICovCit0eXBlZGVmIGludCgqZnhuX2JyZF9zdGF0dXMpIChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCwKKwkJCQkgICAgIGludCAqYm9hcmRfc3RhdGUpOworCisvKgorICogID09PT09PT09IGJyaWRnZV9icmRfcmVhZCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlYWQgYSBibG9jayBvZiBEU1AgbWVtb3J5LCBmcm9tIGEgZ2l2ZW4gbWVtb3J5IHNwYWNlLCBpbnRvIGEgaG9zdAorICogICAgICBidWZmZXIuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgZGV2X2N0eHQ6ICAgIEhhbmRsZSB0byBCcmlkZ2UgZHJpdmVyIGRlZmluZWQgZGV2aWNlIGluZm8uCisgKiAgICAgIGhvc3RfYnVmOiAgICAgICBQb2ludGVyIHRvIGhvc3QgYnVmZmVyIChEZXN0aW5hdGlvbikuCisgKiAgICAgIGRzcF9hZGRyOiAgICAgICBBZGRyZXNzIG9uIERTUCBib2FyZCAoU291cmNlKS4KKyAqICAgICAgdWxfbnVtX2J5dGVzOiAgICAgTnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyLgorICogICAgICBtZW1fdHlwZTogICAgICAgTWVtb3J5IHNwYWNlIG9uIERTUCBmcm9tIHdoaWNoIHRvIHRyYW5zZmVyLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRVRJTUVET1VUOiAgVGltZW91dCBvY2N1cmVkIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgZnJvbSBoYXJkd2FyZS4KKyAqICAgICAgLUVQRVJNOiAgICAgIE90aGVyLCB1bnNwZWNpZmllZCBlcnJvci4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGV2X2N0eHQgIT0gTlVMTDsKKyAqICAgICAgaG9zdF9idWYgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICogIFdpbGwgbm90IHdyaXRlIG1vcmUgdGhhbiB1bF9udW1fYnl0ZXMgYnl0ZXMgaW50byBob3N0X2J1Zi4KKyAqLwordHlwZWRlZiBpbnQoKmZ4bl9icmRfcmVhZCkgKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAorCQkJCSAgIHU4ICpob3N0X2J1ZiwKKwkJCQkgICB1MzIgZHNwX2FkZHIsCisJCQkJICAgdTMyIHVsX251bV9ieXRlcywgdTMyIG1lbV90eXBlKTsKKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfYnJkX3dyaXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgV3JpdGUgYSBibG9jayBvZiBob3N0IG1lbW9yeSBpbnRvIGEgRFNQIGFkZHJlc3MsIGludG8gYSBnaXZlbiBtZW1vcnkKKyAqICAgICAgc3BhY2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgZGV2X2N0eHQ6ICAgIEhhbmRsZSB0byBCcmlkZ2UgZHJpdmVyIGRlZmluZWQgZGV2aWNlIGluZm8uCisgKiAgICAgIGRzcF9hZGRyOiAgICAgICBBZGRyZXNzIG9uIERTUCBib2FyZCAoRGVzdGluYXRpb24pLgorICogICAgICBob3N0X2J1ZjogICAgICAgUG9pbnRlciB0byBob3N0IGJ1ZmZlciAoU291cmNlKS4KKyAqICAgICAgdWxfbnVtX2J5dGVzOiAgICAgTnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyLgorICogICAgICBtZW1fdHlwZTogICAgICAgTWVtb3J5IHNwYWNlIG9uIERTUCB0byB3aGljaCB0byB0cmFuc2Zlci4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVUSU1FRE9VVDogIFRpbWVvdXQgb2NjdXJlZCB3YWl0aW5nIGZvciBhIHJlc3BvbnNlIGZyb20gaGFyZHdhcmUuCisgKiAgICAgIC1FUEVSTTogICAgICBPdGhlciwgdW5zcGVjaWZpZWQgZXJyb3IuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGRldl9jdHh0ICE9IE5VTEw7CisgKiAgICAgIGhvc3RfYnVmICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLwordHlwZWRlZiBpbnQoKmZ4bl9icmRfd3JpdGUpIChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCwKKwkJCQkgICAgdTggKmhvc3RfYnVmLAorCQkJCSAgICB1MzIgZHNwX2FkZHIsCisJCQkJICAgIHUzMiB1bF9udW1fYnl0ZXMsIHUzMiBtZW1fdHlwZSk7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2NobmxfY3JlYXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ3JlYXRlIGEgY2hhbm5lbCBtYW5hZ2VyIG9iamVjdCwgcmVzcG9uc2libGUgZm9yIG9wZW5pbmcgbmV3IGNoYW5uZWxzCisgKiAgICAgIGFuZCBjbG9zaW5nIG9sZCBvbmVzIGZvciBhIGdpdmVuICdCcmlkZ2UgYm9hcmQuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgY2hhbm5lbF9tZ3I6ICAgIExvY2F0aW9uIHRvIHN0b3JlIGEgY2hhbm5lbCBtYW5hZ2VyIG9iamVjdCBvbiBvdXRwdXQuCisgKiAgICAgIGhkZXZfb2JqOiAgICAgSGFuZGxlIHRvIGEgZGV2aWNlIG9iamVjdC4KKyAqICAgICAgbWdyX2F0dHJ0czogICAgICBDaGFubmVsIG1hbmFnZXIgYXR0cmlidXRlcy4KKyAqICAgICAgbWdyX2F0dHJ0cy0+bWF4X2NoYW5uZWxzOiBNYXggY2hhbm5lbHMKKyAqICAgICAgbWdyX2F0dHJ0cy0+YmlycTogICAgICBDaGFubmVsJ3MgSS9PIElSUSBudW1iZXIuCisgKiAgICAgIG1ncl9hdHRydHMtPmlycV9zaGFyZWQ6ICAgVFJVRSBpZiB0aGUgSVJRIGlzIHNoYXJlYWJsZS4KKyAqICAgICAgbWdyX2F0dHJ0cy0+d29yZF9zaXplOiBEU1AgV29yZCBzaXplIGluIGVxdWl2YWxlbnQgUEMgYnl0ZXMuLgorICogICAgICBtZ3JfYXR0cnRzLT5zaG1fYmFzZTogIEJhc2UgcGh5c2ljYWwgYWRkcmVzcyBvZiBzaGFyZWQgbWVtb3J5LCBpZiBhbnkuCisgKiAgICAgIG1ncl9hdHRydHMtPnVzbV9sZW5ndGg6IEJ5dGVzIG9mIHNoYXJlZCBtZW1vcnkgYmxvY2suCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICBTdWNjZXNzOworICogICAgICAtRU5PTUVNOiAgICAgICAgSW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgcmVxdWVzdGVkIHJlc291cmNlcy4KKyAqICAgICAgLUVJTzogICAgICAgICBVbmFibGUgdG8gcGx1ZyBJU1IgZm9yIGdpdmVuIElSUS4KKyAqICAgICAgLUVGQVVMVDogICAgQ291bGRuJ3QgbWFwIHBoeXNpY2FsIGFkZHJlc3MgdG8gYSB2aXJ0dWFsIG9uZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgY2hhbm5lbF9tZ3IgIT0gTlVMTC4KKyAqICAgICAgbWdyX2F0dHJ0cyAhPSBOVUxMCisgKiAgICAgIG1ncl9hdHRydHMgZmllbGQgYXJlIGFsbCB2YWxpZDoKKyAqICAgICAgICAgIDAgPCBtYXhfY2hhbm5lbHMgPD0gQ0hOTF9NQVhDSEFOTkVMUy4KKyAqICAgICAgICAgIGJpcnEgPD0gMTUuCisgKiAgICAgICAgICB3b3JkX3NpemUgPiAwLgorICogICAgICBoZGV2X29iaiAhPSBOVUxMCisgKiAgICAgIE5vIGNoYW5uZWwgbWFuYWdlciBleGlzdHMgZm9yIHRoaXMgYm9hcmQuCisgKiAgRW5zdXJlczoKKyAqLwordHlwZWRlZiBpbnQoKmZ4bl9jaG5sX2NyZWF0ZSkgKHN0cnVjdCBjaG5sX21ncgorCQkJCSAgICAgICoqY2hhbm5lbF9tZ3IsCisJCQkJICAgICAgc3RydWN0IGRldl9vYmplY3QKKwkJCQkgICAgICAqIGhkZXZfb2JqLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdAorCQkJCSAgICAgIGNobmxfbWdyYXR0cnMgKiBtZ3JfYXR0cnRzKTsKKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfY2hubF9kZXN0cm95ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ2xvc2UgYWxsIG9wZW4gY2hhbm5lbHMsIGFuZCBkZXN0cm95IHRoZSBjaGFubmVsIG1hbmFnZXIuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGNobmxfbWdyOiAgICAgICBDaGFubmVsIG1hbmFnZXIgb2JqZWN0LgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBoY2hubF9tZ3Igd2FzIGludmFsaWQuCisgKiAgUmVxdWlyZXM6CisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogQ2FuY2VscyBJL08gb24gZWFjaCBvcGVuIGNoYW5uZWwuIENsb3NlcyBlYWNoIG9wZW4gY2hhbm5lbC4KKyAqICAgICAgICAgIGNobmxfY3JlYXRlIG1heSBzdWJzZXF1ZW50bHkgYmUgY2FsbGVkIGZvciB0aGUgc2FtZSBkZXZpY2UuCisgKi8KK3R5cGVkZWYgaW50KCpmeG5fY2hubF9kZXN0cm95KSAoc3RydWN0IGNobmxfbWdyICpoY2hubF9tZ3IpOworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfZGVoX25vdGlmeSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFdoZW4gbm90aWZpZWQgb2YgRFNQIGVycm9yLCB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbi4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoZGVoX21ncjogICAgICAgIEhhbmRsZSB0byBERUggbWFuYWdlciBvYmplY3QuCisgKiAgICAgIGV2bnRfbWFzazogICAgSW5kaWNhdGUgdGhlIHR5cGUgb2YgZXhjZXB0aW9uCisgKiAgICAgIGVycm9yX2luZm86ICAgIEVycm9yIGluZm9ybWF0aW9uCisgKiAgUmV0dXJuczoKKyAqCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGhkZWhfbWdyICE9IE5VTEw7CisgKiAgICAgZXZudF9tYXNrIHdpdGggYSB2YWxpZCBleGNlcHRpb24KKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIHZvaWQgKCpmeG5fZGVoX25vdGlmeSkgKHN0cnVjdCBkZWhfbWdyICpoZGVoX21nciwKKwkJCQl1MzIgZXZudF9tYXNrLCB1MzIgZXJyb3JfaW5mbyk7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2Nobmxfb3BlbiA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIE9wZW4gYSBuZXcgaGFsZi1kdXBsZXggY2hhbm5lbCB0byB0aGUgRFNQIGJvYXJkLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGNobmw6ICAgICAgICAgICBMb2NhdGlvbiB0byBzdG9yZSBhIGNoYW5uZWwgb2JqZWN0IGhhbmRsZS4KKyAqICAgICAgaGNobmxfbWdyOglIYW5kbGUgdG8gY2hhbm5lbCBtYW5hZ2VyLCBhcyByZXR1cm5lZCBieQorICogICAgICAJCUNITkxfR2V0TWdyKCkuCisgKiAgICAgIGNobmxfbW9kZTogICAgICAgICAgT25lIG9mIHtDSE5MX01PREVUT0RTUCwgQ0hOTF9NT0RFRlJPTURTUH0gc3BlY2lmaWVzCisgKiAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gb2YgZGF0YSB0cmFuc2Zlci4KKyAqICAgICAgY2hfaWQ6ICAgICAgICBJZiBDSE5MX1BJQ0tGUkVFIGlzIHNwZWNpZmllZCwgdGhlIGNoYW5uZWwgbWFuYWdlciB3aWxsCisgKiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QgYSBmcmVlIGNoYW5uZWwgaWQgKGRlZmF1bHQpOworICogICAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIHRoaXMgZmllbGQgc3BlY2lmaWVzIHRoZSBpZCBvZiB0aGUgY2hhbm5lbC4KKyAqICAgICAgcGF0dHJzOiAgICAgICAgIENoYW5uZWwgYXR0cmlidXRlcy4gIEF0dHJpYnV0ZSBmaWVsZHMgYXJlIGFzIGZvbGxvd3M6CisgKiAgICAgIHBhdHRycy0+dWlvX3JlcXM6IFNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgSS9PIHJlcXVlc3RzIHdoaWNoIGNhbgorICogICAgICAgICAgICAgICAgICAgICAgYmUgcGVuZGluZyBhdCBhbnkgZ2l2ZW4gdGltZS4gQWxsIHJlcXVlc3QgcGFja2V0cyBhcmUKKyAqICAgICAgICAgICAgICAgICAgICAgIHByZWFsbG9jYXRlZCB3aGVuIHRoZSBjaGFubmVsIGlzIG9wZW5lZC4KKyAqICAgICAgcGF0dHJzLT5ldmVudF9vYmo6IFRoaXMgZmllbGQgYWxsb3dzIHRoZSB1c2VyIHRvIHN1cHBseSBhbiBhdXRvIHJlc2V0CisgKiAgICAgICAgICAgICAgICAgICAgICBldmVudCBvYmplY3QgZm9yIGNoYW5uZWwgSS9PIGNvbXBsZXRpb24gbm90aWZpY2F0aW9ucy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgdXNlciB0byBkZXN0cm95IHRoaXMKKyAqICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCBBRlRFUiBjbG9zaW5nIHRoZSBjaGFubmVsLgorICogICAgICAgICAgICAgICAgICAgICAgVGhpcyBjaGFubmVsIGV2ZW50IG9iamVjdCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nCisgKiAgICAgICAgICAgICAgICAgICAgICBDSE5MX0dldEV2ZW50SGFuZGxlKCkuCisgKiAgICAgIHBhdHRycy0+aFJlc2VydmVkOiBUaGUga2VybmVsIG1vZGUgaGFuZGxlIG9mIHRoaXMgZXZlbnQgb2JqZWN0LgorICoKKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICAgICAgICAgIGhjaG5sX21nciBpcyBpbnZhbGlkLgorICogICAgICAtRU5PTUVNOiAgICAgICAgICAgIEluc3VmZmljaWVudCBtZW1vcnkgZm9yIHJlcXVlc3RlZCByZXNvdXJjZXMuCisgKiAgICAgIC1FSU5WQUw6ICAgICAgICBJbnZhbGlkIG51bWJlciBvZiBJT1JlcXMuCisgKiAgICAgIC1FTk9TUjogICAgTm8gZnJlZSBjaGFubmVscyBhdmFpbGFibGUuCisgKiAgICAgIC1FQ0hSTkc6ICAgICAgIENoYW5uZWwgSUQgaXMgb3V0IG9mIHJhbmdlLgorICogICAgICAtRUFMUkVBRFk6ICAgICAgICBDaGFubmVsIGlzIGluIHVzZS4KKyAqICAgICAgLUVJTzogICAgICAgICBObyBmcmVlIElPIHJlcXVlc3QgcGFja2V0cyBhdmFpbGFibGUgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVpbmcuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGNobmwgIT0gTlVMTC4KKyAqICAgICAgcGF0dHJzICE9IE5VTEwuCisgKiAgICAgIHBhdHRycy0+ZXZlbnRfb2JqIGlzIGEgdmFsaWQgZXZlbnQgaGFuZGxlLgorICogICAgICBwYXR0cnMtPmhSZXNlcnZlZCBpcyB0aGUga2VybmVsIG1vZGUgaGFuZGxlIGZvciBwYXR0cnMtPmV2ZW50X29iai4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgICAgICAgICAqY2hubCBpcyBhIHZhbGlkIGNoYW5uZWwuCisgKiAgICAgIGVsc2U6ICAgICAgICAgICAgICAgICAgICpjaG5sIGlzIHNldCB0byBOVUxMIGlmIChjaG5sICE9IE5VTEwpOworICovCit0eXBlZGVmIGludCgqZnhuX2Nobmxfb3BlbikgKHN0cnVjdCBjaG5sX29iamVjdAorCQkJCSAgICAqKmNobmwsCisJCQkJICAgIHN0cnVjdCBjaG5sX21nciAqaGNobmxfbWdyLAorCQkJCSAgICBzOCBjaG5sX21vZGUsCisJCQkJICAgIHUzMiBjaF9pZCwKKwkJCQkgICAgY29uc3Qgc3RydWN0CisJCQkJICAgIGNobmxfYXR0ciAqIHBhdHRycyk7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2NobmxfY2xvc2UgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBFbnN1cmVzIGFsbCBwZW5kaW5nIEkvTyBvbiB0aGlzIGNoYW5uZWwgaXMgY2FuY2VsbGVkLCBkaXNjYXJkcyBhbGwKKyAqICAgICAgcXVldWVkIEkvTyBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbnMsIHRoZW4gZnJlZXMgdGhlIHJlc291cmNlcyBhbGxvY2F0ZWQKKyAqICAgICAgZm9yIHRoaXMgY2hhbm5lbCwgYW5kIG1ha2VzIHRoZSBjb3JyZXNwb25kaW5nIGxvZ2ljYWwgY2hhbm5lbCBpZAorICogICAgICBhdmFpbGFibGUgZm9yIHN1YnNlcXVlbnQgdXNlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGNobmxfb2JqOiAgICAgICAgICBIYW5kbGUgdG8gYSBjaGFubmVsIG9iamVjdC4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2VzczsKKyAqICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBjaG5sX29iai4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgTm8gdGhyZWFkIG11c3QgYmUgYmxvY2tlZCBvbiB0aGlzIGNoYW5uZWwncyBJL08gY29tcGxldGlvbiBldmVudC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgY2hubF9vYmogaXMgbm8gbG9uZ2VyIHZhbGlkLgorICovCit0eXBlZGVmIGludCgqZnhuX2NobmxfY2xvc2UpIChzdHJ1Y3QgY2hubF9vYmplY3QgKmNobmxfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfY2hubF9hZGRfaW9fcmVxID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRW5xdWV1ZSBhbiBJL08gcmVxdWVzdCBmb3IgZGF0YSB0cmFuc2ZlciBvbiBhIGNoYW5uZWwgdG8gdGhlIERTUC4KKyAqICAgICAgVGhlIGRpcmVjdGlvbiAobW9kZSkgaXMgc3BlY2lmaWVkIGluIHRoZSBjaGFubmVsIG9iamVjdC4gTm90ZSB0aGUgRFNQCisgKiAgICAgIGFkZHJlc3MgaXMgc3BlY2lmaWVkIGZvciBjaGFubmVscyBvcGVuZWQgaW4gZGlyZWN0IEkvTyBtb2RlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGNobmxfb2JqOiAgICAgICAgICBDaGFubmVsIG9iamVjdCBoYW5kbGUuCisgKiAgICAgIGhvc3RfYnVmOiAgICAgICBIb3N0IGJ1ZmZlciBhZGRyZXNzIHNvdXJjZS4KKyAqICAgICAgYnl0ZV9zaXplOglOdW1iZXIgb2YgUEMgYnl0ZXMgdG8gdHJhbnNmZXIuIEEgemVybyB2YWx1ZSBpbmRpY2F0ZXMKKyAqICAgICAgICAgICAgICAgICAgICAgIHRoYXQgdGhpcyBidWZmZXIgaXMgdGhlIGxhc3QgaW4gdGhlIG91dHB1dCBjaGFubmVsLgorICogICAgICAgICAgICAgICAgICAgICAgQSB6ZXJvIHZhbHVlIGlzIGludmFsaWQgZm9yIGFuIGlucHV0IGNoYW5uZWwuCisgKiEgICAgIGJ1Zl9zaXplOiAgICAgICBBY3R1YWwgYnVmZmVyIHNpemUgaW4gaG9zdCBieXRlcy4KKyAqICAgICAgZHdfZHNwX2FkZHI6ICAgICAgRFNQIGFkZHJlc3MgZm9yIHRyYW5zZmVyLiAgKEN1cnJlbnRseSBpZ25vcmVkKS4KKyAqICAgICAgZHdfYXJnOiAgICAgICAgICBBIHVzZXIgYXJndW1lbnQgdGhhdCB0cmF2ZWxzIHdpdGggdGhlIGJ1ZmZlci4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2VzczsKKyAqICAgICAgLUVGQVVMVDogSW52YWxpZCBjaG5sX29iaiBvciBob3N0X2J1Zi4KKyAqICAgICAgLUVQRVJNOiAgIFVzZXIgY2Fubm90IG1hcmsgRU9TIG9uIGFuIGlucHV0IGNoYW5uZWwuCisgKiAgICAgIC1FQ0FOQ0VMRUQ6IEkvTyBoYXMgYmVlbiBjYW5jZWxsZWQgb24gdGhpcyBjaGFubmVsLiAgTm8gZnVydGhlcgorICogICAgICAgICAgICAgICAgICAgICAgSS9PIGlzIGFsbG93ZWQuCisgKiAgICAgIC1FUElQRTogICAgIEVuZCBvZiBzdHJlYW0gd2FzIGFscmVhZHkgbWFya2VkIG9uIGEgcHJldmlvdXMKKyAqICAgICAgICAgICAgICAgICAgICAgIElPUmVxdWVzdCBvbiB0aGlzIGNoYW5uZWwuICBObyBmdXJ0aGVyIEkvTyBpcyBleHBlY3RlZC4KKyAqICAgICAgLUVJTlZBTDogQnVmZmVyIHN1Ym1pdHRlZCB0byB0aGlzIG91dHB1dCBjaGFubmVsIGlzIGxhcmdlciB0aGFuCisgKiAgICAgICAgICAgICAgICAgICAgICB0aGUgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgc2hhcmVkIG1lbW9yeSBvdXRwdXQgd2luZG93LgorICogIFJlcXVpcmVzOgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6IFRoZSBidWZmZXIgd2lsbCBiZSB0cmFuc2ZlcnJlZCBpZiB0aGUgY2hhbm5lbCBpcyByZWFkeTsKKyAqICAgICAgICAgIG90aGVyd2lzZSwgd2lsbCBiZSBxdWV1ZWQgZm9yIHRyYW5zZmVyIHdoZW4gdGhlIGNoYW5uZWwgYmVjb21lcworICogICAgICAgICAgcmVhZHkuICBJbiBhbnkgY2FzZSwgbm90aWZpY2F0aW9ucyBvZiBJL08gY29tcGxldGlvbiBhcmUKKyAqICAgICAgICAgIGFzeW5jaHJvbm91cy4KKyAqICAgICAgICAgIElmIGJ5dGVfc2l6ZSBpcyAwIGZvciBhbiBvdXRwdXQgY2hhbm5lbCwgc3Vic2VxdWVudCBDSE5MX0FkZElPUmVxJ3MKKyAqICAgICAgICAgIG9uIHRoaXMgY2hhbm5lbCB3aWxsIGZhaWwgd2l0aCBlcnJvciBjb2RlIC1FUElQRS4gIFRoZQorICogICAgICAgICAgY29ycmVzcG9uZGluZyBJT0MgZm9yIHRoaXMgSS9PIHJlcXVlc3Qgd2lsbCBoYXZlIGl0cyBzdGF0dXMgZmxhZworICogICAgICAgICAgc2V0IHRvIENITkxfSU9DU1RBVEVPUy4KKyAqLwordHlwZWRlZiBpbnQoKmZ4bl9jaG5sX2FkZGlvcmVxKSAoc3RydWN0IGNobmxfb2JqZWN0CisJCQkJCSogY2hubF9vYmosCisJCQkJCXZvaWQgKmhvc3RfYnVmLAorCQkJCQl1MzIgYnl0ZV9zaXplLAorCQkJCQl1MzIgYnVmX3NpemUsCisJCQkJCXUzMiBkd19kc3BfYWRkciwgdTMyIGR3X2FyZyk7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2NobmxfZ2V0X2lvYyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERlcXVldWUgYW4gSS9PIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAqICAgICAgY29tcGxldGVkIEkvTyByZXF1ZXN0LgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGNobmxfb2JqOiAgICAgICAgICBDaGFubmVsIG9iamVjdCBoYW5kbGUuCisgKiAgICAgIHRpbWVvdXQ6ICAgICAgICBBIHZhbHVlIG9mIENITkxfSU9DTk9XQUlUIHdpbGwgc2ltcGx5IGRlcXVldWUgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBmaXJzdCBhdmFpbGFibGUgSU9DLgorICogICAgICBjaGFuX2lvYzogICAgICAgT24gb3V0cHV0LCBjb250YWlucyBob3N0IGJ1ZmZlciBhZGRyZXNzLCBieXRlcworICogICAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXJyZWQsIGFuZCBzdGF0dXMgb2YgSS9PIGNvbXBsZXRpb24uCisgKiAgICAgIGNoYW5faW9jLT5zdGF0dXM6ICAgU2VlIGNobmxkZWZzLmguCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6IEludmFsaWQgY2hubF9vYmogb3IgY2hhbl9pb2MuCisgKiAgICAgIC1FUkVNT1RFSU86ICAgQ0hOTF9JT0NOT1dBSVQgd2FzIHNwZWNpZmllZCBhcyB0aGUgdGltZW91dCBwYXJhbWV0ZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIHlldCBubyBJL08gY29tcGxldGlvbnMgd2VyZSBxdWV1ZWQuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIHRpbWVvdXQgPT0gQ0hOTF9JT0NOT1dBSVQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogaWYgdGhlcmUgYXJlIGFueSByZW1haW5pbmcgSU9DJ3MgcXVldWVkIGJlZm9yZSB0aGlzIGNhbGwKKyAqICAgICAgICAgIHJldHVybnMsIHRoZSBjaGFubmVsIGV2ZW50IG9iamVjdCB3aWxsIGJlIGxlZnQgaW4gYSBzaWduYWxsZWQKKyAqICAgICAgICAgIHN0YXRlLgorICovCit0eXBlZGVmIGludCgqZnhuX2NobmxfZ2V0aW9jKSAoc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iaiwKKwkJCQkgICAgICB1MzIgdGltZW91dCwKKwkJCQkgICAgICBzdHJ1Y3QgY2hubF9pb2MgKmNoYW5faW9jKTsKKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfY2hubF9jYW5jZWxfaW8gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXR1cm4gYWxsIEkvTyByZXF1ZXN0cyB0byB0aGUgY2xpZW50IHdoaWNoIGhhdmUgbm90IHlldCBiZWVuCisgKiAgICAgIHRyYW5zZmVycmVkLiAgVGhlIGNoYW5uZWwncyBJL08gY29tcGxldGlvbiBvYmplY3QgaXMKKyAqICAgICAgc2lnbmFsbGVkLCBhbmQgYWxsIHRoZSBJL08gcmVxdWVzdHMgYXJlIHF1ZXVlZCBhcyBJT0Mncywgd2l0aCB0aGUKKyAqICAgICAgc3RhdHVzIGZpZWxkIHNldCB0byBDSE5MX0lPQ1NUQVRDQU5DRUwuCisgKiAgICAgIFRoaXMgY2FsbCBpcyB0eXBpY2FsbHkgdXNlZCBpbiBhYm9ydCBzaXR1YXRpb25zLCBhbmQgaXMgYSBwcmVsdWRlIHRvCisgKiAgICAgIGNobmxfY2xvc2UoKTsKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBjaG5sX29iajogICAgICAgICAgQ2hhbm5lbCBvYmplY3QgaGFuZGxlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzOworICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGNobmxfb2JqLgorICogIFJlcXVpcmVzOgorICogIEVuc3VyZXM6CisgKiAgICAgIFN1YnNlcXVlbnQgSS9PIHJlcXVlc3RzIHRvIHRoaXMgY2hhbm5lbCB3aWxsIG5vdCBiZSBhY2NlcHRlZC4KKyAqLwordHlwZWRlZiBpbnQoKmZ4bl9jaG5sX2NhbmNlbGlvKSAoc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iaik7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2NobmxfZmx1c2hfaW8gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBGb3IgYW4gb3V0cHV0IHN0cmVhbSAodG8gdGhlIERTUCksIGluZGljYXRlcyBpZiBhbnkgSU8gcmVxdWVzdHMgYXJlIGluCisgKiAgICAgIHRoZSBvdXRwdXQgcmVxdWVzdCBxdWV1ZS4gIEZvciBpbnB1dCBzdHJlYW1zIChmcm9tIHRoZSBEU1ApLCB3aWxsCisgKiAgICAgIGNhbmNlbCBhbGwgcGVuZGluZyBJTyByZXF1ZXN0cy4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBjaG5sX29iajogICAgICAgICAgICAgIENoYW5uZWwgb2JqZWN0IGhhbmRsZS4KKyAqICAgICAgdGltZW91dDogICAgICAgICAgICBUaW1lb3V0IHZhbHVlIGZvciBmbHVzaCBvcGVyYXRpb24uCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICBTdWNjZXNzOworICogICAgICBTX0NITkxJT1JFUVVFU1Q6ICAgIFJldHVybmVkIGlmIGFueSBJT1JlcXVlc3RzIGFyZSBpbiB0aGUgb3V0cHV0IHF1ZXVlLgorICogICAgICAtRUZBVUxUOiAgICAgICAgSW52YWxpZCBjaG5sX29iai4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgICAgIE5vIEkvTyByZXF1ZXN0cyB3aWxsIGJlIHBlbmRpbmcgb24gdGhpcyBjaGFubmVsLgorICovCit0eXBlZGVmIGludCgqZnhuX2NobmxfZmx1c2hpbykgKHN0cnVjdCBjaG5sX29iamVjdCAqY2hubF9vYmosCisJCQkJICAgICAgIHUzMiB0aW1lb3V0KTsKKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfY2hubF9nZXRfaW5mbyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gYSBjaGFubmVsLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGNobmxfb2JqOiAgICAgICAgICBIYW5kbGUgdG8gYSB2YWxpZCBjaGFubmVsIG9iamVjdCwgb3IgTlVMTC4KKyAqICAgICAgY2hhbm5lbF9pbmZvOiAgIExvY2F0aW9uIHRvIHN0b3JlIGNoYW5uZWwgaW5mby4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2VzczsKKyAqICAgICAgLUVGQVVMVDogSW52YWxpZCBjaG5sX29iaiBvciBjaGFubmVsX2luZm8uCisgKiAgUmVxdWlyZXM6CisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgIGNoYW5uZWxfaW5mbyBwb2ludHMgdG8gYSBmaWxsZWQgaW4gY2hubF9pbmZvIHN0cnVjdCwKKyAqICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFubmVsX2luZm8gIT0gTlVMTCkuCisgKi8KK3R5cGVkZWYgaW50KCpmeG5fY2hubF9nZXRpbmZvKSAoc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iaiwKKwkJCQkgICAgICAgc3RydWN0IGNobmxfaW5mbyAqY2hhbm5lbF9pbmZvKTsKKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfY2hubF9nZXRfbWdyX2luZm8gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZSBjaGFubmVsIG1hbmFnZXIuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGNobmxfbWdyOiAgICAgICAgICAgSGFuZGxlIHRvIGEgdmFsaWQgY2hhbm5lbCBtYW5hZ2VyLCBvciBOVUxMLgorICogICAgICBjaF9pZDogICAgICAgICAgICBDaGFubmVsIElELgorICogICAgICBtZ3JfaW5mbzogICAgICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIGNoYW5uZWwgbWFuYWdlciBpbmZvLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2VzczsKKyAqICAgICAgLUVGQVVMVDogSW52YWxpZCBoY2hubF9tZ3Igb3IgbWdyX2luZm8uCisgKiAgICAgIC1FQ0hSTkc6ICAgSW52YWxpZCBjaGFubmVsIElELgorICogIFJlcXVpcmVzOgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAgICAgICAgICAgbWdyX2luZm8gcG9pbnRzIHRvIGEgZmlsbGVkIGluIGNobmxfbWdyaW5mbworICogICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCwgaWYgKG1ncl9pbmZvICE9IE5VTEwpLgorICovCit0eXBlZGVmIGludCgqZnhuX2NobmxfZ2V0bWdyaW5mbykgKHN0cnVjdCBjaG5sX21ncgorCQkJCQkgICogaGNobmxfbWdyLAorCQkJCQkgIHUzMiBjaF9pZCwKKwkJCQkJICBzdHJ1Y3QgY2hubF9tZ3JpbmZvICptZ3JfaW5mbyk7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2NobmxfaWRsZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIElkbGUgYSBjaGFubmVsLiBJZiB0aGlzIGlzIGFuIGlucHV0IGNoYW5uZWwsIG9yIGlmIHRoaXMgaXMgYW4gb3V0cHV0CisgKiAgICAgIGNoYW5uZWwgYW5kIGZsdXNoX2RhdGEgaXMgVFJVRSwgYWxsIGN1cnJlbnRseSBlbnF1ZXVlZCBidWZmZXJzIHdpbGwgYmUKKyAqICAgICAgZGVxdWV1ZWQgKGRhdGEgZGlzY2FyZGVkIGZvciBvdXRwdXQgY2hhbm5lbCkuCisgKiAgICAgIElmIHRoaXMgaXMgYW4gb3V0cHV0IGNoYW5uZWwgYW5kIGZsdXNoX2RhdGEgaXMgRkFMU0UsIHRoaXMgZnVuY3Rpb24KKyAqICAgICAgd2lsbCBibG9jayB1bnRpbCBhbGwgY3VycmVudGx5IGJ1ZmZlcmVkIGRhdGEgaXMgb3V0cHV0LCBvciB0aGUgdGltZW91dAorICogICAgICBzcGVjaWZpZWQgaGFzIGJlZW4gcmVhY2hlZC4KKyAqCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgY2hubF9vYmo6ICAgICAgICAgIENoYW5uZWwgb2JqZWN0IGhhbmRsZS4KKyAqICAgICAgdGltZW91dDogICAgICAgIElmIG91dHB1dCBjaGFubmVsIGFuZCBmbHVzaF9kYXRhIGlzIEZBTFNFLCB0aW1lb3V0IHZhbHVlCisgKiAgICAgICAgICAgICAgICAgICAgICB0byB3YWl0IGZvciBidWZmZXJzIHRvIGJlIG91dHB1dC4gKE5vdCB1c2VkIGZvcgorICogICAgICAgICAgICAgICAgICAgICAgaW5wdXQgY2hhbm5lbCkuCisgKiAgICAgIGZsdXNoX2RhdGE6ICAgICBJZiBvdXRwdXQgY2hhbm5lbCBhbmQgZmx1c2hfZGF0YSBpcyBUUlVFLCBkaXNjYXJkIGFueQorICogICAgICAgICAgICAgICAgICAgICAgY3VycmVudGx5IGJ1ZmZlcmVkIGRhdGEuIElmIEZBTFNFLCB3YWl0IGZvciBjdXJyZW50bHkKKyAqICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcmVkIGRhdGEgdG8gYmUgb3V0cHV0LCBvciB0aW1lb3V0LCB3aGljaGV2ZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIG9jY3VycyBmaXJzdC4gZmx1c2hfZGF0YSBpcyBpZ25vcmVkIGZvciBpbnB1dCBjaGFubmVsLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2VzczsKKyAqICAgICAgLUVGQVVMVDogICAgICAgIEludmFsaWQgY2hubF9vYmouCisgKiAgICAgIC1FVElNRURPVVQ6IFRpbWVvdXQgb2NjdXJlZCBiZWZvcmUgY2hhbm5lbCBjb3VsZCBiZSBpZGxlZC4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIGludCgqZnhuX2NobmxfaWRsZSkgKHN0cnVjdCBjaG5sX29iamVjdCAqY2hubF9vYmosCisJCQkJICAgIHUzMiB0aW1lb3V0LCBib29sIGZsdXNoX2RhdGEpOworCisvKgorICogID09PT09PT09IGJyaWRnZV9jaG5sX3JlZ2lzdGVyX25vdGlmeSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlZ2lzdGVyIGZvciBub3RpZmljYXRpb24gb2YgZXZlbnRzIG9uIGEgY2hhbm5lbC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBjaG5sX29iajogICAgICAgICAgQ2hhbm5lbCBvYmplY3QgaGFuZGxlLgorICogICAgICBldmVudF9tYXNrOiAgICAgVHlwZSBvZiBldmVudHMgdG8gYmUgbm90aWZpZWQgYWJvdXQ6IElPIGNvbXBsZXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgIChEU1BfU1RSRUFNSU9DT01QTEVUSU9OKSBvciBlbmQgb2Ygc3RyZWFtCisgKiAgICAgICAgICAgICAgICAgICAgICAoRFNQX1NUUkVBTURPTkUpLgorICogICAgICBub3RpZnlfdHlwZTogICAgRFNQX1NJR05BTEVWRU5ULgorICogICAgICBobm90aWZpY2F0aW9uOiAgSGFuZGxlIG9mIGEgZHNwX25vdGlmaWNhdGlvbiBvYmplY3QuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FTk9NRU06ICAgIEluc3VmZmljaWVudCBtZW1vcnkuCisgKiAgICAgIC1FSU5WQUw6ICAgICBldmVudF9tYXNrIGlzIDAgYW5kIGhub3RpZmljYXRpb24gd2FzIG5vdAorICogICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNseSByZWdpc3RlcmVkLgorICogICAgICAtRUZBVUxUOiAgICBOVUxMIGhub3RpZmljYXRpb24sIGhub3RpZmljYXRpb24gZXZlbnQgbmFtZQorICogICAgICAgICAgICAgICAgICAgICAgdG9vIGxvbmcsIG9yIGhub3RpZmljYXRpb24gZXZlbnQgbmFtZSBOVUxMLgorICogIFJlcXVpcmVzOgorICogICAgICBWYWxpZCBjaG5sX29iai4KKyAqICAgICAgaG5vdGlmaWNhdGlvbiAhPSBOVUxMLgorICogICAgICAoZXZlbnRfbWFzayAmIH4oRFNQX1NUUkVBTUlPQ09NUExFVElPTiB8IERTUF9TVFJFQU1ET05FKSkgPT0gMC4KKyAqICAgICAgbm90aWZ5X3R5cGUgPT0gRFNQX1NJR05BTEVWRU5ULgorICogIEVuc3VyZXM6CisgKi8KK3R5cGVkZWYgaW50KCpmeG5fY2hubF9yZWdpc3Rlcm5vdGlmeSkKKyAoc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iaiwKKyAgdTMyIGV2ZW50X21hc2ssIHUzMiBub3RpZnlfdHlwZSwgc3RydWN0IGRzcF9ub3RpZmljYXRpb24gKmhub3RpZmljYXRpb24pOworCisvKgorICogID09PT09PT09IGJyaWRnZV9kZXZfY3JlYXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ29tcGxldGUgY3JlYXRpb24gb2YgdGhlIGRldmljZSBvYmplY3QgZm9yIHRoaXMgYm9hcmQuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgZGV2aWNlX2N0eDogICAgIFB0ciB0byBsb2NhdGlvbiB0byBzdG9yZSBhIEJyaWRnZSBkZXZpY2UgY29udGV4dC4KKyAqICAgICAgaGRldl9vYmo6ICAgICBIYW5kbGUgdG8gYSBEZXZpY2UgT2JqZWN0LCBjcmVhdGVkIGFuZCBtYW5hZ2VkIGJ5IERTUCBBUEkuCisgKiAgICAgIGNvbmZpZ19wYXJhbTogICAgICAgIFB0ciB0byBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgcHJvdmlkZWQgYnkgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uIE1hbmFnZXIgZHVyaW5nIGRldmljZSBsb2FkaW5nLgorICogICAgICBwRHNwQ29uZmlnOiAgICAgRFNQIHJlc291cmNlcywgYXMgc3BlY2lmaWVkIGluIHRoZSByZWdpc3RyeSBrZXkgZm9yIHRoaXMKKyAqICAgICAgICAgICAgICAgICAgICAgIGRldmljZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FTk9NRU06ICAgICAgICBVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBkZXZpY2UgY29udGV4dC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGV2aWNlX2N0eCAhPSBOVUxMOworICogICAgICBoZGV2X29iaiAhPSBOVUxMOworICogICAgICBjb25maWdfcGFyYW0gIT0gTlVMTDsKKyAqICAgICAgcERzcENvbmZpZyAhPSBOVUxMOworICogICAgICBGaWVsZHMgaW4gY29uZmlnX3BhcmFtIGFuZCBwRHNwQ29uZmlnIGNvbnRhaW4gdmFsaWQgdmFsdWVzLgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAgICAgICBBbGwgQnJpZGdlIGRyaXZlciBzcGVjaWZpYyBEU1AgcmVzb3VyY2UgYW5kIG90aGVyCisgKiAgICAgICAgICAgICAgICAgICAgICBib2FyZCBjb250ZXh0IGhhcyBiZWVuIGFsbG9jYXRlZC4KKyAqICAgICAgLUVOT01FTTogICAgQnJpZGdlIGZhaWxlZCB0byBhbGxvY2F0ZSByZXNvdXJjZXMuCisgKiAgICAgICAgICAgICAgICAgICAgICBBbnkgYWNxdWlyZWQgcmVzb3VyY2VzIGhhdmUgYmVlbiBmcmVlZC4gIFRoZSBEU1AgQVBJCisgKiAgICAgICAgICAgICAgICAgICAgICB3aWxsIG5vdCBjYWxsIGJyaWRnZV9kZXZfZGVzdHJveSgpIGlmCisgKiAgICAgICAgICAgICAgICAgICAgICBicmlkZ2VfZGV2X2NyZWF0ZSgpIGZhaWxzLgorICogIERldGFpbHM6CisgKiAgICAgIENhbGxlZCBkdXJpbmcgdGhlIENPTkZJR01HJ3MgRGV2aWNlX0luaXQgcGhhc2UuIEJhc2VkIG9uIGhvc3QgYW5kCisgKiAgICAgIERTUCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLCBjcmVhdGUgYSBib2FyZCBjb250ZXh0LCBhIGhhbmRsZSB0bworICogICAgICB3aGljaCBpcyBwYXNzZWQgaW50byBvdGhlciBCcmlkZ2UgQlJEIGFuZCBDSE5MIGZ1bmN0aW9ucy4gIFRoZQorICogICAgICBib2FyZCBjb250ZXh0IGNvbnRhaW5zIHN0YXRlIGluZm9ybWF0aW9uIGZvciB0aGUgZGV2aWNlLiBTaW5jZSB0aGUKKyAqICAgICAgYWRkcmVzc2VzIG9mIGFsbCBwb2ludGVyIHBhcmFtZXRlcnMgbWF5IGJlIGludmFsaWQgd2hlbiB0aGlzCisgKiAgICAgIGZ1bmN0aW9uIHJldHVybnMsIHRoZXkgbXVzdCBub3QgYmUgc3RvcmVkIGludG8gdGhlIGRldmljZSBjb250ZXh0CisgKiAgICAgIHN0cnVjdHVyZS4KKyAqLwordHlwZWRlZiBpbnQoKmZ4bl9kZXZfY3JlYXRlKSAoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dAorCQkJCSAgICAgKipkZXZpY2VfY3R4LAorCQkJCSAgICAgc3RydWN0IGRldl9vYmplY3QKKwkJCQkgICAgICogaGRldl9vYmosCisJCQkJICAgICBzdHJ1Y3QgY2ZnX2hvc3RyZXMKKwkJCQkgICAgICogY29uZmlnX3BhcmFtKTsKKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfZGV2X2N0cmwgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBCcmlkZ2UgZHJpdmVyIHNwZWNpZmljIGludGVyZmFjZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkZXZfY3R4dDogICAgSGFuZGxlIHRvIEJyaWRnZSBkcml2ZXIgZGVmaW5lZCBkZXZpY2UgaW5mby4KKyAqICAgICAgZHdfY21kOiAgICAgICAgICBCcmlkZ2UgZHJpdmVyIGRlZmluZWQgY29tbWFuZCBjb2RlLgorICogICAgICBwYXJnczogICAgICAgICAgUG9pbnRlciB0byBhbiBhcmJpdHJhcnkgYXJndW1lbnQgc3RydWN0dXJlLgorICogIFJldHVybnM6CisgKiAgICAgIDAgb3IgLUVQRVJNLiBBY3R1YWwgY29tbWFuZCBlcnJvciBjb2RlcyBzaG91bGQgYmUgcGFzc2VkIGJhY2sgaW4KKyAqICAgICAgdGhlIHBhcmdzIHN0cnVjdHVyZSwgYW5kIGFyZSBkZWZpbmVkIGJ5IHRoZSBCcmlkZ2UgZHJpdmVyIGltcGxlbWVudG9yLgorICogIFJlcXVpcmVzOgorICogICAgICBBbGwgY2FsbHMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGJlIHN5bmNocm9ub3VzLiAgVGhlcmUgYXJlIG5vCisgKiAgICAgIElPQ1RMIGNvbXBsZXRpb24gcm91dGluZXMgcHJvdmlkZWQuCisgKiAgRW5zdXJlczoKKyAqLwordHlwZWRlZiBpbnQoKmZ4bl9kZXZfY3RybCkgKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAorCQkJCSAgIHUzMiBkd19jbWQsIHZvaWQgKnBhcmdzKTsKKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfZGV2X2Rlc3Ryb3kgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEZWFsbG9jYXRlIEJyaWRnZSBkZXZpY2UgZXh0ZW5zaW9uIHN0cnVjdHVyZXMgYW5kIGFsbCBvdGhlciByZXNvdXJjZXMKKyAqICAgICAgYWNxdWlyZWQgYnkgdGhlIEJyaWRnZSBkcml2ZXIuCisgKiAgICAgIE5vIGNhbGxzIHRvIG90aGVyIEJyaWRnZSBkcml2ZXIgZnVuY3Rpb25zIG1heSBzdWJzZXF1ZW50bHkKKyAqICAgICAgb2NjdXIsIGV4Y2VwdCBmb3IgYnJpZGdlX2Rldl9jcmVhdGUoKS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkZXZfY3R4dDogICAgSGFuZGxlIHRvIEJyaWRnZSBkcml2ZXIgZGVmaW5lZCBkZXZpY2UgaW5mb3JtYXRpb24uCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FUEVSTTogICAgICBGYWlsZWQgdG8gcmVsZWFzZSBhIHJlc291cmNlIHByZXZpb3VzbHkgYWNxdWlyZWQuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGRldl9jdHh0ICE9IE5VTEw7CisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogRGV2aWNlIGNvbnRleHQgaXMgZnJlZWQuCisgKi8KK3R5cGVkZWYgaW50KCpmeG5fZGV2X2Rlc3Ryb3kpIChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCk7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2lvX2NyZWF0ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENyZWF0ZSBhbiBvYmplY3QgdGhhdCBtYW5hZ2VzIEkvTyBiZXR3ZWVuIENITkwgYW5kIG1zZ19jdHJsLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGlvX21hbjogICAgICAgICBMb2NhdGlvbiB0byBzdG9yZSBJTyBtYW5hZ2VyIG9uIG91dHB1dC4KKyAqICAgICAgaGNobmxfbWdyOiAgICAgICBIYW5kbGUgdG8gY2hhbm5lbCBtYW5hZ2VyLgorICogICAgICBobXNnX21ncjogICAgICAgIEhhbmRsZSB0byBtZXNzYWdlIG1hbmFnZXIuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FTk9NRU06ICAgIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuCisgKiAgICAgIC1FUEVSTTogICAgICBDcmVhdGlvbiBmYWlsZWQuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGhkZXZfb2JqICE9IE5VTEw7CisgKiAgICAgIENoYW5uZWwgbWFuYWdlciBhbHJlYWR5IGNyZWF0ZWQ7CisgKiAgICAgIE1lc3NhZ2UgbWFuYWdlciBhbHJlYWR5IGNyZWF0ZWQ7CisgKiAgICAgIG1ncl9hdHRydHMgIT0gTlVMTDsKKyAqICAgICAgaW9fbWFuICE9IE5VTEw7CisgKiAgRW5zdXJlczoKKyAqLwordHlwZWRlZiBpbnQoKmZ4bl9pb19jcmVhdGUpIChzdHJ1Y3QgaW9fbWdyICoqaW9fbWFuLAorCQkJCSAgICBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkJICAgIGNvbnN0IHN0cnVjdCBpb19hdHRycyAqbWdyX2F0dHJ0cyk7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2lvX2Rlc3Ryb3kgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEZXN0cm95IG9iamVjdCBjcmVhdGVkIGluIGJyaWRnZV9pb19jcmVhdGUuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGlvX21ncjogICAgICAgICBJTyBNYW5hZ2VyLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRU5PTUVNOiAgICBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLgorICogICAgICAtRVBFUk06ICAgICAgQ3JlYXRpb24gZmFpbGVkLgorICogIFJlcXVpcmVzOgorICogICAgICBWYWxpZCBoaW9fbWdyOworICogIEVuc3VyZXM6CisgKi8KK3R5cGVkZWYgaW50KCpmeG5faW9fZGVzdHJveSkgKHN0cnVjdCBpb19tZ3IgKmhpb19tZ3IpOworCisvKgorICogID09PT09PT09IGJyaWRnZV9pb19vbl9sb2FkZWQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDYWxsZWQgd2hlbmV2ZXIgYSBwcm9ncmFtIGlzIGxvYWRlZCB0byB1cGRhdGUgaW50ZXJuYWwgZGF0YS4gRm9yCisgKiAgICAgIGV4YW1wbGUsIGlmIHNoYXJlZCBtZW1vcnkgaXMgdXNlZCwgdGhpcyBmdW5jdGlvbiB3b3VsZCB1cGRhdGUgdGhlCisgKiAgICAgIHNoYXJlZCBtZW1vcnkgbG9jYXRpb24gYW5kIGFkZHJlc3MuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGlvX21ncjogICAgIElPIE1hbmFnZXIuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgU3VjY2Vzcy4KKyAqICAgICAgLUVQRVJNOiAgSW50ZXJuYWwgZmFpbHVyZSBvY2N1cnJlZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgVmFsaWQgaGlvX21ncjsKKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIGludCgqZnhuX2lvX29ubG9hZGVkKSAoc3RydWN0IGlvX21nciAqaGlvX21ncik7CisKKy8qCisgKiAgPT09PT09PT0gZnhuX2lvX2dldHByb2Nsb2FkID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ2FsbGVkIHRvIGdldCB0aGUgUHJvY2Vzc29yJ3MgY3VycmVudCBhbmQgcHJlZGljdGVkIGxvYWQKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoaW9fbWdyOiAgICAgSU8gTWFuYWdlci4KKyAqICAgICAgcHJvY19sb2FkX3N0YXQgICBQcm9jZXNzb3IgTG9hZCBzdGF0aXN0aWNzCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgU3VjY2Vzcy4KKyAqICAgICAgLUVQRVJNOiAgSW50ZXJuYWwgZmFpbHVyZSBvY2N1cnJlZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgVmFsaWQgaGlvX21ncjsKKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIGludCgqZnhuX2lvX2dldHByb2Nsb2FkKSAoc3RydWN0IGlvX21nciAqaGlvX21nciwKKwkJCQkJIHN0cnVjdCBkc3BfcHJvY2xvYWRzdGF0ICoKKwkJCQkJIHByb2NfbG9hZF9zdGF0KTsKKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfbXNnX2NyZWF0ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENyZWF0ZSBhbiBvYmplY3QgdG8gbWFuYWdlIG1lc3NhZ2UgcXVldWVzLiBPbmx5IG9uZSBvZiB0aGVzZSBvYmplY3RzCisgKiAgICAgIGNhbiBleGlzdCBwZXIgZGV2aWNlIG9iamVjdC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBtc2dfbWFuOiAgICAgICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIG1zZ19jdHJsIG1hbmFnZXIgb24gb3V0cHV0LgorICogICAgICBoZGV2X29iajogICAgICAgICBIYW5kbGUgdG8gYSBkZXZpY2Ugb2JqZWN0LgorICogICAgICBtc2dfY2FsbGJhY2s6ICAgICAgICBDYWxsZWQgd2hlbmV2ZXIgYW4gUk1TX0VYSVQgbWVzc2FnZSBpcyByZWNlaXZlZC4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FTk9NRU06ICAgICAgICBJbnN1ZmZpY2llbnQgbWVtb3J5LgorICogIFJlcXVpcmVzOgorICogICAgICBtc2dfbWFuICE9IE5VTEwuCisgKiAgICAgIG1zZ19jYWxsYmFjayAhPSBOVUxMLgorICogICAgICBoZGV2X29iaiAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK3R5cGVkZWYgaW50KCpmeG5fbXNnX2NyZWF0ZSkKKyAoc3RydWN0IG1zZ19tZ3IgKiptc2dfbWFuLAorICBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosIG1zZ19vbmV4aXQgbXNnX2NhbGxiYWNrKTsKKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfbXNnX2NyZWF0ZV9xdWV1ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENyZWF0ZSBhIG1zZ19jdHJsIHF1ZXVlIGZvciBzZW5kaW5nIG9yIHJlY2VpdmluZyBtZXNzYWdlcyBmcm9tIGEgTWVzc2FnZQorICogICAgICBub2RlIG9uIHRoZSBEU1AuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaG1zZ19tZ3I6ICAgICAgICAgICAgbXNnX2N0cmwgcXVldWUgbWFuYWdlciBoYW5kbGUgcmV0dXJuZWQgZnJvbQorICogICAgICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZV9tc2dfY3JlYXRlLgorICogICAgICBtc2dxOiAgICAgICAgICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIG1zZ19jdHJsIHF1ZXVlIG9uIG91dHB1dC4KKyAqICAgICAgbXNncV9pZDoJICAgIElkZW50aWZpZXIgZm9yIG1lc3NhZ2VzIChub2RlIGVudmlyb25tZW50IHBvaW50ZXIpLgorICogICAgICBtYXhfbXNnczogICAgICAgICAgIE1heCBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIG1lc3NhZ2VzIGZvciB0aGUgbm9kZS4KKyAqICAgICAgaDogICAgICAgICAgICAgICAgICBIYW5kbGUgcGFzc2VkIHRvIGhtc2dfbWdyLT5tc2dfY2FsbGJhY2soKS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FTk9NRU06ICAgICAgICBJbnN1ZmZpY2llbnQgbWVtb3J5LgorICogIFJlcXVpcmVzOgorICogICAgICBtc2dxICE9IE5VTEwuCisgKiAgICAgIGggIT0gTlVMTC4KKyAqICAgICAgbWF4X21zZ3MgPiAwLgorICogIEVuc3VyZXM6CisgKiAgICAgIG1zZ3EgIT1OVUxMIDw9PT4gMC4KKyAqLwordHlwZWRlZiBpbnQoKmZ4bl9tc2dfY3JlYXRlcXVldWUpCisgKHN0cnVjdCBtc2dfbWdyICpobXNnX21nciwKKyAgc3RydWN0IG1zZ19xdWV1ZSAqKm1zZ3EsIHUzMiBtc2dxX2lkLCB1MzIgbWF4X21zZ3MsIHZvaWQgKmgpOworCisvKgorICogID09PT09PT09IGJyaWRnZV9tc2dfZGVsZXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGVsZXRlIGEgbXNnX2N0cmwgbWFuYWdlciBhbGxvY2F0ZWQgaW4gYnJpZGdlX21zZ19jcmVhdGUoKS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBobXNnX21ncjogICAgSGFuZGxlIHJldHVybmVkIGZyb20gYnJpZGdlX21zZ19jcmVhdGUoKS4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBWYWxpZCBobXNnX21nci4KKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIHZvaWQgKCpmeG5fbXNnX2RlbGV0ZSkgKHN0cnVjdCBtc2dfbWdyICpobXNnX21ncik7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX21zZ19kZWxldGVfcXVldWUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEZWxldGUgYSBtc2dfY3RybCBxdWV1ZSBhbGxvY2F0ZWQgaW4gYnJpZGdlX21zZ19jcmVhdGVfcXVldWUuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbXNnX3F1ZXVlX29iajogIEhhbmRsZSB0byBtc2dfY3RybCBxdWV1ZSByZXR1cm5lZCBmcm9tCisgKiAgICAgICAgICAgICAgICAgIGJyaWRnZV9tc2dfY3JlYXRlX3F1ZXVlLgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIFZhbGlkIG1zZ19xdWV1ZV9vYmouCisgKiAgRW5zdXJlczoKKyAqLwordHlwZWRlZiB2b2lkICgqZnhuX21zZ19kZWxldGVxdWV1ZSkgKHN0cnVjdCBtc2dfcXVldWUgKm1zZ19xdWV1ZV9vYmopOworCisvKgorICogID09PT09PT09IGJyaWRnZV9tc2dfZ2V0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgR2V0IGEgbWVzc2FnZSBmcm9tIGEgbXNnX2N0cmwgcXVldWUuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbXNnX3F1ZXVlX29iajogICAgIEhhbmRsZSB0byBtc2dfY3RybCBxdWV1ZSByZXR1cm5lZCBmcm9tCisgKiAgICAgICAgICAgICAgICAgICAgIGJyaWRnZV9tc2dfY3JlYXRlX3F1ZXVlLgorICogICAgICBwbXNnOiAgICAgICAgICBMb2NhdGlvbiB0byBjb3B5IG1lc3NhZ2UgaW50by4KKyAqICAgICAgdXRpbWVvdXQ6ICAgICAgVGltZW91dCB0byB3YWl0IGZvciBhIG1lc3NhZ2UuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVUSU1FOiAgVGltZW91dCBvY2N1cnJlZC4KKyAqICAgICAgLUVQRVJNOiAgICAgTm8gZnJhbWVzIGF2YWlsYWJsZSBmb3IgbWVzc2FnZSAobWF4X21zZ3MgdG9vCisgKiAgICAgICAgICAgICAgICAgICAgIHNtYWxsKS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgVmFsaWQgbXNnX3F1ZXVlX29iai4KKyAqICAgICAgcG1zZyAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK3R5cGVkZWYgaW50KCpmeG5fbXNnX2dldCkgKHN0cnVjdCBtc2dfcXVldWUgKm1zZ19xdWV1ZV9vYmosCisJCQkJICBzdHJ1Y3QgZHNwX21zZyAqcG1zZywgdTMyIHV0aW1lb3V0KTsKKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfbXNnX3B1dCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFB1dCBhIG1lc3NhZ2Ugb250byBhIG1zZ19jdHJsIHF1ZXVlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIG1zZ19xdWV1ZV9vYmo6ICAgICAgSGFuZGxlIHRvIG1zZ19jdHJsIHF1ZXVlIHJldHVybmVkIGZyb20KKyAqICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZV9tc2dfY3JlYXRlX3F1ZXVlLgorICogICAgICBwbXNnOiAgICAgICAgICAgUG9pbnRlciB0byBtZXNzYWdlLgorICogICAgICB1dGltZW91dDogICAgICAgVGltZW91dCB0byB3YWl0IGZvciBhIG1lc3NhZ2UuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FVElNRTogICBUaW1lb3V0IG9jY3VycmVkLgorICogICAgICAtRVBFUk06ICAgICAgTm8gZnJhbWVzIGF2YWlsYWJsZSBmb3IgbWVzc2FnZSAobWF4X21zZ3MgdG9vCisgKiAgICAgICAgICAgICAgICAgICAgICBzbWFsbCkuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIFZhbGlkIG1zZ19xdWV1ZV9vYmouCisgKiAgICAgIHBtc2cgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIGludCgqZnhuX21zZ19wdXQpIChzdHJ1Y3QgbXNnX3F1ZXVlICptc2dfcXVldWVfb2JqLAorCQkJCSAgY29uc3Qgc3RydWN0IGRzcF9tc2cgKnBtc2csIHUzMiB1dGltZW91dCk7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX21zZ19yZWdpc3Rlcl9ub3RpZnkgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZWdpc3RlciBub3RpZmljYXRpb24gZm9yIHdoZW4gYSBtZXNzYWdlIGlzIHJlYWR5LgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIG1zZ19xdWV1ZV9vYmo6ICAgICAgSGFuZGxlIHRvIG1zZ19jdHJsIHF1ZXVlIHJldHVybmVkIGZyb20KKyAqICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZV9tc2dfY3JlYXRlX3F1ZXVlLgorICogICAgICBldmVudF9tYXNrOiAgICAgVHlwZSBvZiBldmVudHMgdG8gYmUgbm90aWZpZWQgYWJvdXQ6IE11c3QgYmUKKyAqICAgICAgICAgICAgICAgICAgICAgIERTUF9OT0RFTUVTU0FHRVJFQURZLCBvciAwIHRvIHVucmVnaXN0ZXIuCisgKiAgICAgIG5vdGlmeV90eXBlOiAgICBEU1BfU0lHTkFMRVZFTlQuCisgKiAgICAgIGhub3RpZmljYXRpb246ICBIYW5kbGUgb2Ygbm90aWZpY2F0aW9uIG9iamVjdC4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVOT01FTTogICAgSW5zdWZmaWNpZW50IG1lbW9yeS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgVmFsaWQgbXNnX3F1ZXVlX29iai4KKyAqICAgICAgaG5vdGlmaWNhdGlvbiAhPSBOVUxMLgorICogICAgICBub3RpZnlfdHlwZSA9PSBEU1BfU0lHTkFMRVZFTlQuCisgKiAgICAgIGV2ZW50X21hc2sgPT0gRFNQX05PREVNRVNTQUdFUkVBRFkgfHwgZXZlbnRfbWFzayA9PSAwLgorICogIEVuc3VyZXM6CisgKi8KK3R5cGVkZWYgaW50KCpmeG5fbXNnX3JlZ2lzdGVybm90aWZ5KQorIChzdHJ1Y3QgbXNnX3F1ZXVlICptc2dfcXVldWVfb2JqLAorICB1MzIgZXZlbnRfbWFzaywgdTMyIG5vdGlmeV90eXBlLCBzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbiAqaG5vdGlmaWNhdGlvbik7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX21zZ19zZXRfcXVldWVfaWQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTZXQgbWVzc2FnZSBxdWV1ZSBpZCB0byBub2RlIGVudmlyb25tZW50LiBBbGxvd3MgYnJpZGdlX21zZ19jcmVhdGVfcXVldWUKKyAqICAgICAgdG8gYmUgY2FsbGVkIGluIG5vZGVfYWxsb2NhdGUsIGJlZm9yZSB0aGUgbm9kZSBlbnZpcm9ubWVudCBpcyBrbm93bi4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBtc2dfcXVldWVfb2JqOiAgSGFuZGxlIHRvIG1zZ19jdHJsIHF1ZXVlIHJldHVybmVkIGZyb20KKyAqICAgICAgICAgICAgICAgICAgYnJpZGdlX21zZ19jcmVhdGVfcXVldWUuCisgKiAgICAgIG1zZ3FfaWQ6ICAgICAgIE5vZGUgZW52aXJvbm1lbnQgcG9pbnRlci4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBWYWxpZCBtc2dfcXVldWVfb2JqLgorICogICAgICBtc2dxX2lkICE9IDAuCisgKiAgRW5zdXJlczoKKyAqLwordHlwZWRlZiB2b2lkICgqZnhuX21zZ19zZXRxdWV1ZWlkKSAoc3RydWN0IG1zZ19xdWV1ZSAqbXNnX3F1ZXVlX29iaiwKKwkJCQkgICAgdTMyIG1zZ3FfaWQpOworCisvKgorICogIEJyaWRnZSBEcml2ZXIgaW50ZXJmYWNlIGZ1bmN0aW9uIHRhYmxlLgorICoKKyAqICBUaGUgaW5mb3JtYXRpb24gaW4gdGhpcyB0YWJsZSBpcyBmaWxsZWQgaW4gYnkgdGhlIHNwZWNpZmljIEJyaWRnZSBkcml2ZXIsCisgKiAgYW5kIGNvcGllZCBpbnRvIHRoZSBEU1AgQVBJJ3Mgb3duIHNwYWNlLiAgSWYgYW55IGludGVyZmFjZQorICogIGZ1bmN0aW9uIGZpZWxkIGlzIHNldCB0byBhIHZhbHVlIG9mIE5VTEwsIHRoZW4gdGhlIERTUCBBUEkgd2lsbAorICogIGNvbnNpZGVyIHRoYXQgZnVuY3Rpb24gbm90IGltcGxlbWVudGVkLCBhbmQgcmV0dXJuIHRoZSBlcnJvciBjb2RlCisgKiAgLUVOT1NZUyB3aGVuIGEgQnJpZGdlIGRyaXZlciBjbGllbnQgYXR0ZW1wdHMgdG8gY2FsbCB0aGF0IGZ1bmN0aW9uLgorICoKKyAqICBUaGlzIGZ1bmN0aW9uIHRhYmxlIGNvbnRhaW5zIERTUCBBUEkgdmVyc2lvbiBudW1iZXJzLCB3aGljaCBhcmUgdXNlZCBieSB0aGUKKyAqICBCcmlkZ2UgZHJpdmVyIGxvYWRlciB0byBoZWxwIGVuc3VyZSBiYWNrd2FyZHMgY29tcGF0aWxpdHkgYmV0d2VlbiBvbGRlcgorICogIEJyaWRnZSBkcml2ZXJzIGFuZCBuZXdlciBEU1AgQVBJLiAgVGhlc2UgbXVzdCBiZSBzZXQgdG8KKyAqICBCUkRfQVBJX01BSk9SX1ZFUlNJT04gYW5kIEJSRF9BUElfTUlOT1JfVkVSU0lPTiwgcmVzcGVjdGl2ZWx5LgorICoKKyAqICBBIEJyaWRnZSBkcml2ZXIgbmVlZCBub3QgZXhwb3J0IGEgQ0hOTCBpbnRlcmZhY2UuICBJbiB0aGlzIGNhc2UsICphbGwqIG9mCisgKiAgdGhlIGJyaWRnZV9jaG5sXyogZW50cmllcyBtdXN0IGJlIHNldCB0byBOVUxMLgorICovCitzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgeworCXUzMiBicmRfYXBpX21ham9yX3ZlcnNpb247CS8qIFNldCB0byBCUkRfQVBJX01BSk9SX1ZFUlNJT04uICovCisJdTMyIGJyZF9hcGlfbWlub3JfdmVyc2lvbjsJLyogU2V0IHRvIEJSRF9BUElfTUlOT1JfVkVSU0lPTi4gKi8KKwlmeG5fZGV2X2NyZWF0ZSBwZm5fZGV2X2NyZWF0ZTsJLyogQ3JlYXRlIGRldmljZSBjb250ZXh0ICovCisJZnhuX2Rldl9kZXN0cm95IHBmbl9kZXZfZGVzdHJveTsJLyogRGVzdHJveSBkZXZpY2UgY29udGV4dCAqLworCWZ4bl9kZXZfY3RybCBwZm5fZGV2X2NudHJsOwkvKiBPcHRpb25hbCB2ZW5kb3IgaW50ZXJmYWNlICovCisJZnhuX2JyZF9tb25pdG9yIHBmbl9icmRfbW9uaXRvcjsJLyogTG9hZCBhbmQvb3Igc3RhcnQgbW9uaXRvciAqLworCWZ4bl9icmRfc3RhcnQgcGZuX2JyZF9zdGFydDsJLyogU3RhcnQgRFNQIHByb2dyYW0uICovCisJZnhuX2JyZF9zdG9wIHBmbl9icmRfc3RvcDsJLyogU3RvcC9yZXNldCBib2FyZC4gKi8KKwlmeG5fYnJkX3N0YXR1cyBwZm5fYnJkX3N0YXR1czsJLyogR2V0IGN1cnJlbnQgYm9hcmQgc3RhdHVzLiAqLworCWZ4bl9icmRfcmVhZCBwZm5fYnJkX3JlYWQ7CS8qIFJlYWQgYm9hcmQgbWVtb3J5ICovCisJZnhuX2JyZF93cml0ZSBwZm5fYnJkX3dyaXRlOwkvKiBXcml0ZSBib2FyZCBtZW1vcnkuICovCisJZnhuX2JyZF9zZXRzdGF0ZSBwZm5fYnJkX3NldF9zdGF0ZTsJLyogU2V0cyB0aGUgQm9hcmQgU3RhdGUgKi8KKwlmeG5fYnJkX21lbWNvcHkgcGZuX2JyZF9tZW1fY29weTsJLyogQ29waWVzIERTUCBNZW1vcnkgKi8KKwlmeG5fYnJkX21lbXdyaXRlIHBmbl9icmRfbWVtX3dyaXRlOwkvKiBXcml0ZSBEU1AgTWVtb3J5IHcvbyBoYWx0ICovCisJZnhuX2JyZF9tZW1tYXAgcGZuX2JyZF9tZW1fbWFwOwkvKiBNYXBzIE1QVSBtZW0gdG8gRFNQIG1lbSAqLworCWZ4bl9icmRfbWVtdW5tYXAgcGZuX2JyZF9tZW1fdW5fbWFwOwkvKiBVbm1hcHMgTVBVIG1lbSB0byBEU1AgbWVtICovCisJZnhuX2NobmxfY3JlYXRlIHBmbl9jaG5sX2NyZWF0ZTsJLyogQ3JlYXRlIGNoYW5uZWwgbWFuYWdlci4gKi8KKwlmeG5fY2hubF9kZXN0cm95IHBmbl9jaG5sX2Rlc3Ryb3k7CS8qIERlc3Ryb3kgY2hhbm5lbCBtYW5hZ2VyLiAqLworCWZ4bl9jaG5sX29wZW4gcGZuX2Nobmxfb3BlbjsJLyogQ3JlYXRlIGEgbmV3IGNoYW5uZWwuICovCisJZnhuX2NobmxfY2xvc2UgcGZuX2NobmxfY2xvc2U7CS8qIENsb3NlIGEgY2hhbm5lbC4gKi8KKwlmeG5fY2hubF9hZGRpb3JlcSBwZm5fY2hubF9hZGRfaW9fcmVxOwkvKiBSZXEgSS9PIG9uIGEgY2hhbm5lbC4gKi8KKwlmeG5fY2hubF9nZXRpb2MgcGZuX2NobmxfZ2V0X2lvYzsJLyogV2FpdCBmb3IgSS9PIGNvbXBsZXRpb24uICovCisJZnhuX2NobmxfY2FuY2VsaW8gcGZuX2NobmxfY2FuY2VsX2lvOwkvKiBDYW5jbCBJL08gb24gYSBjaGFubmVsLiAqLworCWZ4bl9jaG5sX2ZsdXNoaW8gcGZuX2NobmxfZmx1c2hfaW87CS8qIEZsdXNoIEkvTy4gKi8KKwlmeG5fY2hubF9nZXRpbmZvIHBmbl9jaG5sX2dldF9pbmZvOwkvKiBHZXQgY2hhbm5lbCBzcGVjaWZpYyBpbmZvICovCisJLyogR2V0IGNoYW5uZWwgbWFuYWdlciBpbmZvLiAqLworCWZ4bl9jaG5sX2dldG1ncmluZm8gcGZuX2NobmxfZ2V0X21ncl9pbmZvOworCWZ4bl9jaG5sX2lkbGUgcGZuX2NobmxfaWRsZTsJLyogSWRsZSB0aGUgY2hhbm5lbCAqLworCS8qIFJlZ2lzdGVyIGZvciBub3RpZi4gKi8KKwlmeG5fY2hubF9yZWdpc3Rlcm5vdGlmeSBwZm5fY2hubF9yZWdpc3Rlcl9ub3RpZnk7CisJZnhuX2lvX2NyZWF0ZSBwZm5faW9fY3JlYXRlOwkvKiBDcmVhdGUgSU8gbWFuYWdlciAqLworCWZ4bl9pb19kZXN0cm95IHBmbl9pb19kZXN0cm95OwkvKiBEZXN0cm95IElPIG1hbmFnZXIgKi8KKwlmeG5faW9fb25sb2FkZWQgcGZuX2lvX29uX2xvYWRlZDsJLyogTm90aWZ5IG9mIHByb2dyYW0gbG9hZGVkICovCisJLyogR2V0IFByb2Nlc3NvcidzIGN1cnJlbnQgYW5kIHByZWRpY3RlZCBsb2FkICovCisJZnhuX2lvX2dldHByb2Nsb2FkIHBmbl9pb19nZXRfcHJvY19sb2FkOworCWZ4bl9tc2dfY3JlYXRlIHBmbl9tc2dfY3JlYXRlOwkvKiBDcmVhdGUgbWVzc2FnZSBtYW5hZ2VyICovCisJLyogQ3JlYXRlIG1lc3NhZ2UgcXVldWUgKi8KKwlmeG5fbXNnX2NyZWF0ZXF1ZXVlIHBmbl9tc2dfY3JlYXRlX3F1ZXVlOworCWZ4bl9tc2dfZGVsZXRlIHBmbl9tc2dfZGVsZXRlOwkvKiBEZWxldGUgbWVzc2FnZSBtYW5hZ2VyICovCisJLyogRGVsZXRlIG1lc3NhZ2UgcXVldWUgKi8KKwlmeG5fbXNnX2RlbGV0ZXF1ZXVlIHBmbl9tc2dfZGVsZXRlX3F1ZXVlOworCWZ4bl9tc2dfZ2V0IHBmbl9tc2dfZ2V0OwkvKiBHZXQgYSBtZXNzYWdlICovCisJZnhuX21zZ19wdXQgcGZuX21zZ19wdXQ7CS8qIFNlbmQgYSBtZXNzYWdlICovCisJLyogUmVnaXN0ZXIgZm9yIG5vdGlmLiAqLworCWZ4bl9tc2dfcmVnaXN0ZXJub3RpZnkgcGZuX21zZ19yZWdpc3Rlcl9ub3RpZnk7CisJLyogU2V0IG1lc3NhZ2UgcXVldWUgaWQgKi8KKwlmeG5fbXNnX3NldHF1ZXVlaWQgcGZuX21zZ19zZXRfcXVldWVfaWQ7Cit9OworCisvKgorICogID09PT09PT09IGJyaWRnZV9kcnZfZW50cnkgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZWdpc3RlcnMgQnJpZGdlIGRyaXZlciBmdW5jdGlvbnMgd2l0aCB0aGUgRFNQIEFQSS4gQ2FsbGVkIG9ubHkgb25jZQorICogICAgICBieSB0aGUgRFNQIEFQSS4gIFRoZSBjYWxsZXIgd2lsbCBmaXJzdCBjaGVjayBEU1AgQVBJIHZlcnNpb24KKyAqICAgICAgY29tcGF0aWJpbGl0eSwgYW5kIHRoZW4gY29weSB0aGUgaW50ZXJmYWNlIGZ1bmN0aW9ucyBpbnRvIGl0cyBvd24KKyAqICAgICAgbWVtb3J5IHNwYWNlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGRydl9pbnRmICBQb2ludGVyIHRvIGEgbG9jYXRpb24gdG8gcmVjZWl2ZSBhIHBvaW50ZXIgdG8gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBCcmlkZ2UgZHJpdmVyIGludGVyZmFjZS4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBUaGUgY29kZSBzZWdtZW50IHRoaXMgZnVuY3Rpb24gcmVzaWRlcyBpbiBtdXN0IGV4cGVjdCB0byBiZSBkaXNjYXJkZWQKKyAqICAgICAgYWZ0ZXIgY29tcGxldGlvbi4KKyAqICBFbnN1cmVzOgorICogICAgICBkcnZfaW50ZiBwb2ludGVyIGluaXRpYWxpemVkIHRvIEJyaWRnZSBkcml2ZXIncyBmdW5jdGlvbgorICogICAgICBpbnRlcmZhY2UuIE5vIHN5c3RlbSByZXNvdXJjZXMgYXJlIGFjcXVpcmVkIGJ5IHRoaXMgZnVuY3Rpb24uCisgKiAgRGV0YWlsczoKKyAqICAgICAgQ2FsbGVkIGR1cmluZyB0aGUgRGV2aWNlX0luaXQgcGhhc2UuCisgKi8KK3ZvaWQgYnJpZGdlX2Rydl9lbnRyeShzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKipkcnZfaW50ZiwKKwkJICAgY29uc3QgY2hhciAqZHJpdmVyX2ZpbGVfbmFtZSk7CisKKyNlbmRpZiAvKiBEU1BERUZTXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGRlaC5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGRlaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNThhYjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwZGVoLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIGRzcGRlaC5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIERlZmluZXMgdXBwZXIgZWRnZSBERUggZnVuY3Rpb25zIHJlcXVpcmVkIGJ5IGFsbCBCcmlkZ2UgZHJpdmVyL0RTUCBBUEkKKyAqIGludGVyZmFjZSB0YWJsZXMuCisgKgorICogTm90ZXM6CisgKiAgIEZ1bmN0aW9uIGNvbW1lbnQgaGVhZGVycyByZXNpZGUgd2l0aCB0aGUgZnVuY3Rpb24gdHlwZWRlZnMgaW4gZHNwZGVmcy5oLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRmVsaXBlIENvbnRyZXJhcworICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIERTUERFSF8KKyNkZWZpbmUgRFNQREVIXworCitzdHJ1Y3QgZGVoX21ncjsKK3N0cnVjdCBkZXZfb2JqZWN0Oworc3RydWN0IGRzcF9ub3RpZmljYXRpb247CisKK2ludCBicmlkZ2VfZGVoX2NyZWF0ZShzdHJ1Y3QgZGVoX21nciAqKnJldF9kZWgsCisJCXN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaik7CisKK2ludCBicmlkZ2VfZGVoX2Rlc3Ryb3koc3RydWN0IGRlaF9tZ3IgKmRlaCk7CisKK2ludCBicmlkZ2VfZGVoX3JlZ2lzdGVyX25vdGlmeShzdHJ1Y3QgZGVoX21nciAqZGVoLAorCQl1MzIgZXZlbnRfbWFzaywKKwkJdTMyIG5vdGlmeV90eXBlLAorCQlzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbiAqaG5vdGlmaWNhdGlvbik7CisKK3ZvaWQgYnJpZGdlX2RlaF9ub3RpZnkoc3RydWN0IGRlaF9tZ3IgKmRlaCwgaW50IGV2ZW50LCBpbnQgaW5mbyk7CisKKyNlbmRpZiAvKiBEU1BERUhfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwZHJ2LmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJiMjUwZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3BkcnYuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogZHNwZHJ2LmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogVGhpcyBpcyB0aGUgU3RyZWFtIEludGVyZmFjZSBmb3IgdGhlIERTcCBBUEkuCisgKiBBbGwgRGV2aWNlIG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCB2aWEgRGV2aWNlSU9Db250cm9sLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZiAhZGVmaW5lZCBfRFNQRFJWX0hfCisjZGVmaW5lIF9EU1BEUlZfSF8KKworI2RlZmluZSBNQVhfREVWICAgICAxMAkJLyogTWF4IHN1cHBvcnQgb2YgMTAgZGV2aWNlcyAqLworCisvKgorICogID09PT09PT09IGRzcF9kZWluaXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBEZXZpY2UgTWFuYWdlciB0byBkZS1pbml0aWFsaXplIGEgZGV2aWNlLgorICogICAgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQgYnkgYXBwbGljYXRpb25zLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGRldmljZV9jb250ZXh0OkhhbmRsZSB0byB0aGUgZGV2aWNlIGNvbnRleHQuIFRoZSBYWFhfSW5pdCBmdW5jdGlvbgorICogICAgICBjcmVhdGVzIGFuZCByZXR1cm5zIHRoaXMgaWRlbnRpZmllci4KKyAqICBSZXR1cm5zOgorICogICAgICBUUlVFIGluZGljYXRlcyB0aGUgZGV2aWNlIHN1Y2Nlc3NmdWxseSBkZS1pbml0aWFsaXplZC4gT3RoZXJ3aXNlIGl0CisgKiAgICAgIHJldHVybnMgRkFMU0UuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGRldmljZV9jb250ZXh0IT0gTlVMTC4gRm9yIGEgYnVpbHQgaW4gZGV2aWNlIHRoaXMgc2hvdWxkIG5ldmVyCisgKiAgICAgIGdldCBjYWxsZWQuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGJvb2wgZHNwX2RlaW5pdCh1MzIgZGV2aWNlX2NvbnRleHQpOworCisvKgorICogID09PT09PT09IGRzcF9pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgRGV2aWNlIE1hbmFnZXIgdG8gaW5pdGlhbGl6ZSBhIGRldmljZS4KKyAqICAgICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIGJ5IGFwcGxpY2F0aW9ucworICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGR3X2NvbnRleHQ6ICBTcGVjaWZpZXMgYSBwb2ludGVyIHRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHJlZ2lzdHJ5CisgKiAgICAgICAgICAgICAgICAgIHBhdGggdG8gdGhlIGFjdGl2ZSBrZXkgZm9yIHRoZSBzdHJlYW0gaW50ZXJmYWNlIGRyaXZlci4KKyAqICAgICAgICAgICAgICAgICAgSEtFWV9MT0NBTF9NQUNISU5FXERyaXZlcnNcQWN0aXZlCisgKiAgUmV0dXJuczoKKyAqICAgICAgUmV0dXJucyBhIGhhbmRsZSB0byB0aGUgZGV2aWNlIGNvbnRleHQgY3JlYXRlZC4gVGhpcyBpcyB0aGUgb3VyIGFjdHVhbAorICogICAgICBEZXZpY2UgT2JqZWN0IHJlcHJlc2VudGluZyB0aGUgRFNQIERldmljZSBpbnN0YW5jZS4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICogICAgICBTdWNjZWVkZWQ6ICBkZXZpY2UgY29udGV4dCA+IDAKKyAqICAgICAgRmFpbGVkOiAgICAgZGV2aWNlIENvbnRleHQgPSAwCisgKi8KK2V4dGVybiB1MzIgZHNwX2luaXQodTMyICppbml0X3N0YXR1cyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGlvLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGY1ZjkwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGlvLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIGRzcGlvLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogRGVjbGFyZXMgdGhlIHVwcGVyIGVkZ2UgSU8gZnVuY3Rpb25zIHJlcXVpcmVkIGJ5IGFsbCBCcmlkZ2UgZHJpdmVyIC9EU1AgQVBJCisgKiBpbnRlcmZhY2UgdGFibGVzLgorICoKKyAqIE5vdGVzOgorICogICBGdW5jdGlvbiBjb21tZW50IGhlYWRlcnMgcmVzaWRlIGluIGRzcGRlZnMuaC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIERTUElPXworI2RlZmluZSBEU1BJT18KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXZkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2lvZGVmcy5oPgorCitleHRlcm4gaW50IGJyaWRnZV9pb19jcmVhdGUoc3RydWN0IGlvX21nciAqKmlvX21hbiwKKwkJCQkgICBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkJICAgY29uc3Qgc3RydWN0IGlvX2F0dHJzICptZ3JfYXR0cnRzKTsKKworZXh0ZXJuIGludCBicmlkZ2VfaW9fZGVzdHJveShzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyKTsKKworZXh0ZXJuIGludCBicmlkZ2VfaW9fb25fbG9hZGVkKHN0cnVjdCBpb19tZ3IgKmhpb19tZ3IpOworCitleHRlcm4gaW50IGl2YV9pb19vbl9sb2FkZWQoc3RydWN0IGlvX21nciAqaGlvX21ncik7CitleHRlcm4gaW50IGJyaWRnZV9pb19nZXRfcHJvY19sb2FkKHN0cnVjdCBpb19tZ3IgKmhpb19tZ3IsCisJCQkJICAgICAgIHN0cnVjdCBkc3BfcHJvY2xvYWRzdGF0ICpwcm9jX2xzdGF0KTsKKworI2VuZGlmIC8qIERTUElPXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGlvY3RsLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWUwNTk0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGlvY3RsLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIGRzcGlvY3RsLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogQnJpZGdlIGRyaXZlciBCUkRfSU9DdGwgcmVzZXJ2ZWQgY29tbWFuZCBkZWZpbml0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIERTUElPQ1RMXworI2RlZmluZSBEU1BJT0NUTF8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhhcmR3YXJlIEFic3RyYWN0aW9uIExheWVyICovCisjaW5jbHVkZSA8aHdfZGVmcy5oPgorI2luY2x1ZGUgPGh3X21tdS5oPgorCisvKgorICogQW55IElPQ1RMUyBhdCBvciBhYm92ZSB0aGlzIHZhbHVlIGFyZSByZXNlcnZlZCBmb3Igc3RhbmRhcmQgQnJpZGdlIGRyaXZlcgorICogaW50ZXJmYWNlcy4KKyAqLworI2RlZmluZSBCUkRJT0NUTF9SRVNFUlZFREJBU0UgICAgICAgMHg4MDAwCisKKyNkZWZpbmUgQlJESU9DVExfQ0hOTFJFQUQgICAgICAgICAgIChCUkRJT0NUTF9SRVNFUlZFREJBU0UgKyAweDEwKQorI2RlZmluZSBCUkRJT0NUTF9DSE5MV1JJVEUgICAgICAgICAgKEJSRElPQ1RMX1JFU0VSVkVEQkFTRSArIDB4MjApCisjZGVmaW5lIEJSRElPQ1RMX0dFVElOVFJDT1VOVCAgICAgICAoQlJESU9DVExfUkVTRVJWRURCQVNFICsgMHgzMCkKKyNkZWZpbmUgQlJESU9DVExfUkVTRVRJTlRSQ09VTlQgICAgIChCUkRJT0NUTF9SRVNFUlZFREJBU0UgKyAweDQwKQorI2RlZmluZSBCUkRJT0NUTF9JTlRFUlJVUFREU1AgICAgICAgKEJSRElPQ1RMX1JFU0VSVkVEQkFTRSArIDB4NTApCisvKiBETU1VICovCisjZGVmaW5lIEJSRElPQ1RMX1NFVE1NVUNPTkZJRyAgICAgICAoQlJESU9DVExfUkVTRVJWRURCQVNFICsgMHg2MCkKKy8qIFBXUiAqLworI2RlZmluZSBCUkRJT0NUTF9QV1JDT05UUk9MICAgICAgICAgKEJSRElPQ1RMX1JFU0VSVkVEQkFTRSArIDB4NzApCisKKy8qIGF0dGVudGlvbiwgbW9kaWZpZXJzOgorICogU29tZSBvZiB0aGVzZSBjb250cm9sIGVudW1lcmF0aW9ucyBhcmUgbWFkZSB2aXNpYmxlIHRvIHVzZXIgZm9yIHBvd2VyCisgKiBjb250cm9sLCBzbyBhbnkgY2hhbmdlcyB0byB0aGlzIGxpc3QsIHNob3VsZCBhbHNvIGJlIHVwZGF0ZWQgaW4gdGhlIHVzZXIKKyAqIGhlYWRlciBmaWxlICdkYmRlZnMuaCcgKioqLworLyogVGhlc2UgaW9jdGxzIGFyZSByZXNlcnZlZCBmb3IgUFdSIHBvd2VyIGNvbW1hbmRzIGZvciB0aGUgRFNQICovCisjZGVmaW5lIEJSRElPQ1RMX0RFRVBTTEVFUCAgICAgICAgICAoQlJESU9DVExfUFdSQ09OVFJPTCArIDB4MCkKKyNkZWZpbmUgQlJESU9DVExfRU1FUkdFTkNZU0xFRVAgICAgIChCUkRJT0NUTF9QV1JDT05UUk9MICsgMHgxKQorI2RlZmluZSBCUkRJT0NUTF9XQUtFVVAgICAgICAgICAgICAgKEJSRElPQ1RMX1BXUkNPTlRST0wgKyAweDIpCisjZGVmaW5lIEJSRElPQ1RMX1BXUkVOQUJMRSAgICAgICAgICAoQlJESU9DVExfUFdSQ09OVFJPTCArIDB4MykKKyNkZWZpbmUgQlJESU9DVExfUFdSRElTQUJMRSAgICAgICAgIChCUkRJT0NUTF9QV1JDT05UUk9MICsgMHg0KQorI2RlZmluZSBCUkRJT0NUTF9DTEtfQ1RSTAkJICAgIChCUkRJT0NUTF9QV1JDT05UUk9MICsgMHg3KQorLyogRFNQIEluaXRpYXRlZCBIaWJlcm5hdGUgKi8KKyNkZWZpbmUgQlJESU9DVExfUFdSX0hJQkVSTkFURQkoQlJESU9DVExfUFdSQ09OVFJPTCArIDB4OCkKKyNkZWZpbmUgQlJESU9DVExfUFJFU0NBTEVfTk9USUZZIChCUkRJT0NUTF9QV1JDT05UUk9MICsgMHg5KQorI2RlZmluZSBCUkRJT0NUTF9QT1NUU0NBTEVfTk9USUZZIChCUkRJT0NUTF9QV1JDT05UUk9MICsgMHhBKQorI2RlZmluZSBCUkRJT0NUTF9DT05TVFJBSU5UX1JFUVVFU1QgKEJSRElPQ1RMX1BXUkNPTlRST0wgKyAweEIpCisKKy8qIE51bWJlciBvZiBhY3R1YWwgRFNQLU1NVSBUTEIgZW50cnJpZXMgKi8KKyNkZWZpbmUgQlJESU9DVExfTlVNT0ZNTVVUTEIgICAgICAgIDMyCisKK3N0cnVjdCBicmlkZ2VfaW9jdGxfZXh0cHJvYyB7CisJdTMyIHVsX2RzcF92YTsJCS8qIERTUCB2aXJ0dWFsIGFkZHJlc3MgKi8KKwl1MzIgdWxfZ3BwX3BhOwkJLyogR1BQIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwkvKiBHUFAgdmlydHVhbCBhZGRyZXNzLiBfX3ZhIGRvZXMgbm90IHdvcmsgZm9yIGlvcmVtYXBwZWQgYWRkcmVzc2VzICovCisJdTMyIHVsX2dwcF92YTsKKwl1MzIgdWxfc2l6ZTsJCS8qIFNpemUgb2YgdGhlIG1hcHBlZCBtZW1vcnkgaW4gYnl0ZXMgKi8KKwllbnVtIGh3X2VuZGlhbmlzbV90IGVuZGlhbmlzbTsKKwllbnVtIGh3X21tdV9taXhlZF9zaXplX3QgbWl4ZWRfbW9kZTsKKwllbnVtIGh3X2VsZW1lbnRfc2l6ZV90IGVsZW1fc2l6ZTsKK307CisKKyNlbmRpZiAvKiBEU1BJT0NUTF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3Btc2cuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3Btc2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGJkNDU4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcG1zZy5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBkc3Btc2cuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBEZWNsYXJlcyB0aGUgdXBwZXIgZWRnZSBtZXNzYWdlIGNsYXNzIGxpYnJhcnkgZnVuY3Rpb25zIHJlcXVpcmVkIGJ5CisgKiBhbGwgQnJpZGdlIGRyaXZlciAvIERTUCBBUEkgaW50ZXJmYWNlIHRhYmxlcy4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUKKyAqIGltcGxlbWVudGVkIGJ5IGV2ZXJ5IGNsYXNzIG9mIEJyaWRnZSBkcml2ZXIgY2hhbm5lbCBsaWJyYXJ5LgorICoKKyAqIE5vdGVzOgorICogICBGdW5jdGlvbiBjb21tZW50IGhlYWRlcnMgcmVzaWRlIGluIGRzcGRlZnMuaC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIERTUE1TR18KKyNkZWZpbmUgRFNQTVNHXworCisjaW5jbHVkZSA8ZHNwYnJpZGdlL21zZ2RlZnMuaD4KKworZXh0ZXJuIGludCBicmlkZ2VfbXNnX2NyZWF0ZShzdHJ1Y3QgbXNnX21nciAqKm1zZ19tYW4sCisJCQkJICAgIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCQkgICAgbXNnX29uZXhpdCBtc2dfY2FsbGJhY2spOworCitleHRlcm4gaW50IGJyaWRnZV9tc2dfY3JlYXRlX3F1ZXVlKHN0cnVjdCBtc2dfbWdyICpobXNnX21nciwKKwkJCQkgICAgICAgc3RydWN0IG1zZ19xdWV1ZSAqKm1zZ3EsCisJCQkJICAgICAgIHUzMiBtc2dxX2lkLCB1MzIgbWF4X21zZ3MsIHZvaWQgKmFyZyk7CisKK2V4dGVybiB2b2lkIGJyaWRnZV9tc2dfZGVsZXRlKHN0cnVjdCBtc2dfbWdyICpobXNnX21ncik7CisKK2V4dGVybiB2b2lkIGJyaWRnZV9tc2dfZGVsZXRlX3F1ZXVlKHN0cnVjdCBtc2dfcXVldWUgKm1zZ19xdWV1ZV9vYmopOworCitleHRlcm4gaW50IGJyaWRnZV9tc2dfZ2V0KHN0cnVjdCBtc2dfcXVldWUgKm1zZ19xdWV1ZV9vYmosCisJCQkJIHN0cnVjdCBkc3BfbXNnICpwbXNnLCB1MzIgdXRpbWVvdXQpOworCitleHRlcm4gaW50IGJyaWRnZV9tc2dfcHV0KHN0cnVjdCBtc2dfcXVldWUgKm1zZ19xdWV1ZV9vYmosCisJCQkJIGNvbnN0IHN0cnVjdCBkc3BfbXNnICpwbXNnLCB1MzIgdXRpbWVvdXQpOworCitleHRlcm4gaW50IGJyaWRnZV9tc2dfcmVnaXN0ZXJfbm90aWZ5KHN0cnVjdCBtc2dfcXVldWUgKm1zZ19xdWV1ZV9vYmosCisJCQkJCSAgdTMyIGV2ZW50X21hc2ssCisJCQkJCSAgdTMyIG5vdGlmeV90eXBlLAorCQkJCQkgIHN0cnVjdCBkc3Bfbm90aWZpY2F0aW9uCisJCQkJCSAgKmhub3RpZmljYXRpb24pOworCitleHRlcm4gdm9pZCBicmlkZ2VfbXNnX3NldF9xdWV1ZV9pZChzdHJ1Y3QgbXNnX3F1ZXVlICptc2dfcXVldWVfb2JqLAorCQkJCQl1MzIgbXNncV9pZCk7CisKKyNlbmRpZiAvKiBEU1BNU0dfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHluYW1pY19sb2FkZXIuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9keW5hbWljX2xvYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMTA5ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHluYW1pY19sb2FkZXIuaApAQCAtMCwwICsxLDQ5MiBAQAorLyoKKyAqIGR5bmFtaWNfbG9hZGVyLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgX0RZTkFNSUNfTE9BREVSX0hfCisjZGVmaW5lIF9EWU5BTUlDX0xPQURFUl9IXworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBEeW5hbWljIExvYWRlcgorICoKKyAqIFRoZSBmdW5jdGlvbiBvZiB0aGUgZHluYW1pYyBsb2FkZXIgaXMgdG8gbG9hZCBhICJtb2R1bGUiIGNvbnRhaW5pbmcKKyAqIGluc3RydWN0aW9ucyBmb3IgYSAidGFyZ2V0IiBwcm9jZXNzb3IgaW50byB0aGF0IHByb2Nlc3Nvci4gIEluIHRoZSBwcm9jZXNzCisgKiBpdCBhc3NpZ25zIG1lbW9yeSBmb3IgdGhlIG1vZHVsZSwgcmVzb2x2ZXMgc3ltYm9sIHJlZmVyZW5jZXMgbWFkZSBieSB0aGUKKyAqIG1vZHVsZSwgYW5kIHJlbWVtYmVycyBzeW1ib2xzIGRlZmluZWQgYnkgdGhlIG1vZHVsZS4KKyAqCisgKiBUaGUgZHluYW1pYyBsb2FkZXIgaXMgcGFyYW1ldGVyaXplZCBmb3IgYSBwYXJ0aWN1bGFyIHN5c3RlbSBieSA0IGNsYXNzZXMKKyAqIHRoYXQgc3VwcGx5IHRoZSBtb2R1bGUgYW5kIHN5c3RlbSBzcGVjaWZpYyBmdW5jdGlvbnMgaXQgcmVxdWlyZXMKKyAqLworCS8qIFRoZSByZWFkIGZ1bmN0aW9ucyBmb3IgdGhlIG1vZHVsZSBpbWFnZSB0byBiZSBsb2FkZWQgKi8KK3N0cnVjdCBkeW5hbWljX2xvYWRlcl9zdHJlYW07CisKKwkvKiBUaGlzIGNsYXNzIGRlZmluZXMgImhvc3QiIHN5bWJvbCBhbmQgc3VwcG9ydCBmdW5jdGlvbnMgKi8KK3N0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW07CisKKwkvKiBUaGlzIGNsYXNzIGRlZmluZXMgdGhlIGFsbG9jYXRvciBmb3IgInRhcmdldCIgbWVtb3J5ICovCitzdHJ1Y3QgZHluYW1pY19sb2FkZXJfYWxsb2NhdGU7CisKKwkvKiBUaGlzIGNsYXNzIGRlZmluZXMgdGhlIGNvcHktaW50by10YXJnZXQtbWVtb3J5IGZ1bmN0aW9ucyAqLworc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemU7CisKKy8qCisgKiBPcHRpb24gZmxhZ3MgdG8gbW9kaWZ5IHRoZSBiZWhhdmlvciBvZiBtb2R1bGUgbG9hZGluZworICovCisjZGVmaW5lIERMT0FEX0lOSVRCU1MgMHgxCS8qIGluaXRpYWxpemUgQlNTIHNlY3Rpb25zIHRvIHplcm8gKi8KKyNkZWZpbmUgRExPQURfQklHRU5EIDB4MgkvKiByZXF1aXJlIGJpZy1lbmRpYW4gbG9hZCBtb2R1bGUgKi8KKyNkZWZpbmUgRExPQURfTElUVExFIDB4NAkvKiByZXF1aXJlIGxpdHRsZS1lbmRpYW4gbG9hZCBtb2R1bGUgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm9jZWR1cmUgZHluYW1pY19sb2FkX21vZHVsZQorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgbW9kdWxlICBUaGUgaW5wdXQgc3RyZWFtIHRoYXQgc3VwcGxpZXMgdGhlIG1vZHVsZSBpbWFnZQorICogIHN5bXMgICAgSG9zdC1zaWRlIHN5bWJvbCB0YWJsZSBhbmQgbWFsbG9jL2ZyZWUgZnVuY3Rpb25zCisgKiAgYWxsb2MgICBUYXJnZXQtc2lkZSBtZW1vcnkgYWxsb2NhdGlvbgorICogIGluaXQgICAgVGFyZ2V0LXNpZGUgbWVtb3J5IGluaXRpYWxpemF0aW9uLCBvciBOVUxMIGZvciBzeW1ib2wgcmVhZCBvbmx5CisgKiAgb3B0aW9ucyBPcHRpb24gZmxhZ3MgRExPQURfKgorICogIG1oYW5kbGUgQSBtb2R1bGUgaGFuZGxlIGZvciB1c2Ugd2l0aCBEeW5hbWljX1VubG9hZAorICoKKyAqIEVmZmVjdDoKKyAqICBUaGUgbW9kdWxlIGltYWdlIGlzIHJlYWQgdXNpbmcgKm1vZHVsZS4gIFRhcmdldCBzdG9yYWdlIGZvciB0aGUgbmV3IGltYWdlIGlzCisgKiBvYnRhaW5lZCBmcm9tICphbGxvYy4gIFN5bWJvbHMgZGVmaW5lZCBhbmQgcmVmZXJlbmNlZCBieSB0aGUgbW9kdWxlIGFyZQorICogbWFuYWdlZCB1c2luZyAqc3ltcy4gIFRoZSBpbWFnZSBpcyB0aGVuIHJlbG9jYXRlZCBhbmQgcmVmZXJlbmNlcyByZXNvbHZlZAorICogYXMgbmVjZXNzYXJ5LCBhbmQgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIGJpdHMgYXJlIHBsYWNlZCBpbnRvIHRhcmdldCBtZW1vcnkKKyAqIHVzaW5nICppbml0LgorICoKKyAqIFJldHVybnM6CisgKiAgT24gYSBzdWNjZXNzZnVsIGxvYWQsIGEgbW9kdWxlIGhhbmRsZSBpcyBwbGFjZWQgaW4gKm1oYW5kbGUsIGFuZCB6ZXJvIGlzCisgKiByZXR1cm5lZC4gIE9uIGVycm9yLCB0aGUgbnVtYmVyIG9mIGVycm9ycyBkZXRlY3RlZCBpcyByZXR1cm5lZC4gIEluZGl2aWR1YWwKKyAqIGVycm9ycyBhcmUgcmVwb3J0ZWQgZHVyaW5nIHRoZSBsb2FkIHByb2Nlc3MgdXNpbmcgc3ltcy0+ZXJyb3JfcmVwb3J0KCkuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworZXh0ZXJuIGludCBkeW5hbWljX2xvYWRfbW9kdWxlKAorCQkJCSAgICAgIC8qIHRoZSBzb3VyY2UgZm9yIHRoZSBtb2R1bGUgaW1hZ2UgKi8KKwkJCQkgICAgICBzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3RyZWFtICptb2R1bGUsCisJCQkJICAgICAgLyogaG9zdCBzdXBwb3J0IGZvciBzeW1ib2xzIGFuZCBzdG9yYWdlICovCisJCQkJICAgICAgc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAqc3ltcywKKwkJCQkgICAgICAvKiB0aGUgdGFyZ2V0IG1lbW9yeSBhbGxvY2F0b3IgKi8KKwkJCQkgICAgICBzdHJ1Y3QgZHluYW1pY19sb2FkZXJfYWxsb2NhdGUgKmFsbG9jLAorCQkJCSAgICAgIC8qIHRoZSB0YXJnZXQgbWVtb3J5IGluaXRpYWxpemVyICovCisJCQkJICAgICAgc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemUgKmluaXQsCisJCQkJICAgICAgdW5zaWduZWQgb3B0aW9ucywJLyogb3B0aW9uIGZsYWdzICovCisJCQkJICAgICAgLyogdGhlIHJldHVybmVkIG1vZHVsZSBoYW5kbGUgKi8KKwkJCQkgICAgICB2b2lkICoqbWhhbmRsZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIGR5bmFtaWNfb3Blbl9tb2R1bGUKKyAqCisgKiBQYXJhbWV0ZXJzOgorICogIG1vZHVsZSAgVGhlIGlucHV0IHN0cmVhbSB0aGF0IHN1cHBsaWVzIHRoZSBtb2R1bGUgaW1hZ2UKKyAqICBzeW1zICAgIEhvc3Qtc2lkZSBzeW1ib2wgdGFibGUgYW5kIG1hbGxvYy9mcmVlIGZ1bmN0aW9ucworICogIGFsbG9jICAgVGFyZ2V0LXNpZGUgbWVtb3J5IGFsbG9jYXRpb24KKyAqICBpbml0ICAgIFRhcmdldC1zaWRlIG1lbW9yeSBpbml0aWFsaXphdGlvbiwgb3IgTlVMTCBmb3Igc3ltYm9sIHJlYWQgb25seQorICogIG9wdGlvbnMgT3B0aW9uIGZsYWdzIERMT0FEXyoKKyAqICBtaGFuZGxlIEEgbW9kdWxlIGhhbmRsZSBmb3IgdXNlIHdpdGggRHluYW1pY19VbmxvYWQKKyAqCisgKiBFZmZlY3Q6CisgKiAgVGhlIG1vZHVsZSBpbWFnZSBpcyByZWFkIHVzaW5nICptb2R1bGUuICBUYXJnZXQgc3RvcmFnZSBmb3IgdGhlIG5ldyBpbWFnZSBpcworICogb2J0YWluZWQgZnJvbSAqYWxsb2MuICBTeW1ib2xzIGRlZmluZWQgYW5kIHJlZmVyZW5jZWQgYnkgdGhlIG1vZHVsZSBhcmUKKyAqIG1hbmFnZWQgdXNpbmcgKnN5bXMuICBUaGUgaW1hZ2UgaXMgdGhlbiByZWxvY2F0ZWQgYW5kIHJlZmVyZW5jZXMgcmVzb2x2ZWQKKyAqIGFzIG5lY2Vzc2FyeSwgYW5kIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSBiaXRzIGFyZSBwbGFjZWQgaW50byB0YXJnZXQgbWVtb3J5CisgKiB1c2luZyAqaW5pdC4KKyAqCisgKiBSZXR1cm5zOgorICogIE9uIGEgc3VjY2Vzc2Z1bCBsb2FkLCBhIG1vZHVsZSBoYW5kbGUgaXMgcGxhY2VkIGluICptaGFuZGxlLCBhbmQgemVybyBpcworICogcmV0dXJuZWQuICBPbiBlcnJvciwgdGhlIG51bWJlciBvZiBlcnJvcnMgZGV0ZWN0ZWQgaXMgcmV0dXJuZWQuICBJbmRpdmlkdWFsCisgKiBlcnJvcnMgYXJlIHJlcG9ydGVkIGR1cmluZyB0aGUgbG9hZCBwcm9jZXNzIHVzaW5nIHN5bXMtPmVycm9yX3JlcG9ydCgpLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KK2V4dGVybiBpbnQgZHluYW1pY19vcGVuX21vZHVsZSgKKwkJCQkgICAgICAvKiB0aGUgc291cmNlIGZvciB0aGUgbW9kdWxlIGltYWdlICovCisJCQkJICAgICAgc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N0cmVhbSAqbW9kdWxlLAorCQkJCSAgICAgIC8qIGhvc3Qgc3VwcG9ydCBmb3Igc3ltYm9scyBhbmQgc3RvcmFnZSAqLworCQkJCSAgICAgIHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0gKnN5bXMsCisJCQkJICAgICAgLyogdGhlIHRhcmdldCBtZW1vcnkgYWxsb2NhdG9yICovCisJCQkJICAgICAgc3RydWN0IGR5bmFtaWNfbG9hZGVyX2FsbG9jYXRlICphbGxvYywKKwkJCQkgICAgICAvKiB0aGUgdGFyZ2V0IG1lbW9yeSBpbml0aWFsaXplciAqLworCQkJCSAgICAgIHN0cnVjdCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICppbml0LAorCQkJCSAgICAgIHVuc2lnbmVkIG9wdGlvbnMsCS8qIG9wdGlvbiBmbGFncyAqLworCQkJCSAgICAgIC8qIHRoZSByZXR1cm5lZCBtb2R1bGUgaGFuZGxlICovCisJCQkJICAgICAgdm9pZCAqKm1oYW5kbGUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb2NlZHVyZSBkeW5hbWljX3VubG9hZF9tb2R1bGUKKyAqCisgKiBQYXJhbWV0ZXJzOgorICogIG1oYW5kbGUgQSBtb2R1bGUgaGFuZGxlIGZyb20gZHluYW1pY19sb2FkX21vZHVsZQorICogIHN5bXMgICAgSG9zdC1zaWRlIHN5bWJvbCB0YWJsZSBhbmQgbWFsbG9jL2ZyZWUgZnVuY3Rpb25zCisgKiAgYWxsb2MgICBUYXJnZXQtc2lkZSBtZW1vcnkgYWxsb2NhdGlvbgorICoKKyAqIEVmZmVjdDoKKyAqICBUaGUgbW9kdWxlIHNwZWNpZmllZCBieSBtaGFuZGxlIGlzIHVubG9hZGVkLiAgVW5sb2FkaW5nIGNhdXNlcyBhbGwKKyAqIHRhcmdldCBtZW1vcnkgdG8gYmUgZGVhbGxvY2F0ZWQsIGFsbCBzeW1ib2xzIGRlZmluZWQgYnkgdGhlIG1vZHVsZSB0bworICogYmUgcHVyZ2VkLCBhbmQgYW55IGhvc3Qtc2lkZSBzdG9yYWdlIHVzZWQgYnkgdGhlIGR5bmFtaWMgbG9hZGVyIGZvcgorICogdGhpcyBtb2R1bGUgdG8gYmUgcmVsZWFzZWQuCisgKgorICogUmV0dXJuczoKKyAqICBaZXJvIGZvciBzdWNjZXNzLiBPbiBlcnJvciwgdGhlIG51bWJlciBvZiBlcnJvcnMgZGV0ZWN0ZWQgaXMgcmV0dXJuZWQuCisgKiBJbmRpdmlkdWFsIGVycm9ycyBhcmUgcmVwb3J0ZWQgdXNpbmcgc3ltcy0+ZXJyb3JfcmVwb3J0KCkuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworZXh0ZXJuIGludCBkeW5hbWljX3VubG9hZF9tb2R1bGUodm9pZCAqbWhhbmRsZSwJLyogdGhlIG1vZHVsZQorCQkJCQkJCSAqIGhhbmRsZSAqLworCQkJCSAvKiBob3N0IHN1cHBvcnQgZm9yIHN5bWJvbHMgYW5kCisJCQkJICAqIHN0b3JhZ2UgKi8KKwkJCQkgc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAqc3ltcywKKwkJCQkgLyogdGhlIHRhcmdldCBtZW1vcnkgYWxsb2NhdG9yICovCisJCQkJIHN0cnVjdCBkeW5hbWljX2xvYWRlcl9hbGxvY2F0ZSAqYWxsb2MsCisJCQkJIC8qIHRoZSB0YXJnZXQgbWVtb3J5IGluaXRpYWxpemVyICovCisJCQkJIHN0cnVjdCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICppbml0KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEEgY2xhc3MgdXNlZCBieSB0aGUgZHluYW1pYyBsb2FkZXIgZm9yIGlucHV0IG9mIHRoZSBtb2R1bGUgaW1hZ2UKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KK3N0cnVjdCBkeW5hbWljX2xvYWRlcl9zdHJlYW0geworLyogcHVibGljOiAqLworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogcmVhZF9idWZmZXIKKyAgICAgKgorICAgICAqIFBBUkFNRVRFUlMgOgorICAgICAqICBidWZmZXIgIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byBmaWxsCisgICAgICogIGJ1ZnNpeiAgQW1vdW50IG9mIGRhdGEgZGVzaXJlZCBpbiBzaXplb2YoKSB1bml0cworICAgICAqCisgICAgICogRUZGRUNUIDoKKyAgICAgKiAgUmVhZHMgdGhlIHNwZWNpZmllZCBhbW91bnQgb2YgZGF0YSBmcm9tIHRoZSBtb2R1bGUgaW5wdXQgc3RyZWFtCisgICAgICogaW50byB0aGUgc3BlY2lmaWVkIGJ1ZmZlci4gIFJldHVybnMgdGhlIGFtb3VudCBvZiBkYXRhIHJlYWQgaW4gc2l6ZW9mKCkKKyAgICAgKiB1bml0cyAod2hpY2ggaWYgbGVzcyB0aGFuIHRoZSBzcGVjaWZpY2F0aW9uLCByZXByZXNlbnRzIGFuIGVycm9yKS4KKyAgICAgKgorICAgICAqIE5PVEVTOgorICAgICAqICBJbiByZWxlYXNlIDEgaW5jcmVtZW50cyB0aGUgZmlsZSBwb3NpdGlvbiBieSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQKKyAgICAgKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwlpbnQgKCpyZWFkX2J1ZmZlcikgKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zdHJlYW0gKnRoaXNwdHIsCisJCQkgICAgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBidWZzaXopOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBzZXRfZmlsZV9wb3NuIChyZWxlYXNlIDEgb25seSkKKyAgICAgKgorICAgICAqIFBBUkFNRVRFUlMgOgorICAgICAqICBwb3NuICBEZXNpcmVkIGZpbGUgcG9zaXRpb24gcmVsYXRpdmUgdG8gc3RhcnQgb2YgZmlsZSBpbiBzaXplb2YoKSB1bml0cy4KKyAgICAgKgorICAgICAqIEVGRkVDVCA6CisgICAgICogIEFkanVzdHMgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBzdHJlYW0gb2JqZWN0IHNvIHRoYXQgdGhlIG5leHQKKyAgICAgKiByZWFkX2J1ZmZlciBjYWxsIHdpbGwgYmVnaW4gdG8gcmVhZCBhdCB0aGUgc3BlY2lmaWVkIG9mZnNldCBmcm9tCisgICAgICogdGhlIGJlZ2lubmluZyBvZiB0aGUgaW5wdXQgbW9kdWxlLiAgUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybworICAgICAqIGZvciBmYWlsdXJlLgorICAgICAqCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCWludCAoKnNldF9maWxlX3Bvc24pIChzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3RyZWFtICp0aGlzcHRyLAorCQkJICAgICAgLyogdG8gYmUgZWxpbWluYXRlZCBpbiByZWxlYXNlIDIgKi8KKwkJCSAgICAgIHVuc2lnbmVkIGludCBwb3NuKTsKKworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEEgY2xhc3MgdXNlZCBieSB0aGUgZHluYW1pYyBsb2FkZXIgZm9yIHN5bWJvbCB0YWJsZSBzdXBwb3J0IGFuZAorICogbWlzY2VsbGFuZW91cyBob3N0LXNpZGUgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKK3R5cGVkZWYgdTMyIGxkcl9hZGRyOworCisvKgorICogdGhlIHN0cnVjdHVyZSBvZiBhIHN5bWJvbCBrbm93biB0byB0aGUgZHluYW1pYyBsb2FkZXIKKyAqLworc3RydWN0IGR5bmxvYWRfc3ltYm9sIHsKKwlsZHJfYWRkciB2YWx1ZTsKK307CisKK3N0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0geworLyogcHVibGljOiAqLworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogZmluZF9tYXRjaGluZ19zeW1ib2wKKyAgICAgKgorICAgICAqIFBBUkFNRVRFUlMgOgorICAgICAqICBuYW1lICAgIFRoZSBuYW1lIG9mIHRoZSBkZXNpcmVkIHN5bWJvbAorICAgICAqCisgICAgICogRUZGRUNUIDoKKyAgICAgKiAgTG9jYXRlcyBhIHN5bWJvbCBtYXRjaGluZyB0aGUgbmFtZSBzcGVjaWZpZWQuICBBIHBvaW50ZXIgdG8gdGhlCisgICAgICogc3ltYm9sIGlzIHJldHVybmVkIGlmIGl0IGV4aXN0czsgMCBpcyByZXR1cm5lZCBpZiBubyBzdWNoIHN5bWJvbCBpcworICAgICAqIGZvdW5kLgorICAgICAqCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCXN0cnVjdCBkeW5sb2FkX3N5bWJvbCAqKCpmaW5kX21hdGNoaW5nX3N5bWJvbCkKKwkgKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0gKnRoaXNwdHIsIGNvbnN0IGNoYXIgKm5hbWUpOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBhZGRfdG9fc3ltYm9sX3RhYmxlCisgICAgICoKKyAgICAgKiBQQVJBTUVURVJTIDoKKyAgICAgKiAgbm5hbWUgICAgICAgUG9pbnRlciB0byB0aGUgbmFtZSBvZiB0aGUgbmV3IHN5bWJvbAorICAgICAqICBtb2R1bGVpZCAgICBBbiBvcGFxdWUgbW9kdWxlIGlkIGFzc2lnbmVkIGJ5IHRoZSBkeW5hbWljIGxvYWRlcgorICAgICAqCisgICAgICogRUZGRUNUIDoKKyAgICAgKiAgVGhlIG5ldyBzeW1ib2wgaXMgYWRkZWQgdG8gdGhlIHRhYmxlLiAgQSBwb2ludGVyIHRvIHRoZSBzeW1ib2wgaXMKKyAgICAgKiByZXR1cm5lZCwgb3IgTlVMTCBpcyByZXR1cm5lZCBmb3IgZmFpbHVyZS4KKyAgICAgKgorICAgICAqIE5PVEVTOgorICAgICAqICBJdCBpcyBwZXJtaXNzaWJsZSBmb3IgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4gTlVMTDsgdGhlIGVmZmVjdCBpcyB0aGF0CisgICAgICogdGhlIG5hbWVkIHN5bWJvbCB3aWxsIG5vdCBiZSBhdmFpbGFibGUgdG8gcmVzb2x2ZSByZWZlcmVuY2VzIGluCisgICAgICogc3Vic2VxdWVudCBsb2Fkcy4gIFJldHVybmluZyBOVUxMIHdpbGwgbm90IGNhdXNlIHRoZSBjdXJyZW50IGxvYWQKKyAgICAgKiB0byBmYWlsLgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwlzdHJ1Y3QgZHlubG9hZF9zeW1ib2wgKigqYWRkX3RvX3N5bWJvbF90YWJsZSkKKwkgKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0gKgorCSAgdGhpc3B0ciwgY29uc3QgY2hhciAqbm5hbWUsIHVuc2lnbmVkIG1vZHVsZWlkKTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogcHVyZ2Vfc3ltYm9sX3RhYmxlCisgICAgICoKKyAgICAgKiBQQVJBTUVURVJTIDoKKyAgICAgKiAgbW9kdWxlaWQgICAgQW4gb3BhcXVlIG1vZHVsZSBpZCBhc3NpZ25lZCBieSB0aGUgZHluYW1pYyBsb2FkZXIKKyAgICAgKgorICAgICAqIEVGRkVDVCA6CisgICAgICogIEVhY2ggc3ltYm9sIGluIHRoZSBzeW1ib2wgdGFibGUgd2hvc2UgbW9kdWxlaWQgbWF0Y2hlcyB0aGUgYXJndW1lbnQKKyAgICAgKiBpcyByZW1vdmVkIGZyb20gdGhlIHRhYmxlLgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwl2b2lkICgqcHVyZ2Vfc3ltYm9sX3RhYmxlKSAoc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAqdGhpc3B0ciwKKwkJCQkgICAgdW5zaWduZWQgbW9kdWxlaWQpOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBkbG9hZF9hbGxvY2F0ZQorICAgICAqCisgICAgICogUEFSQU1FVEVSUyA6CisgICAgICogIG1lbXNpeiAgc2l6ZSBvZiBkZXNpcmVkIG1lbW9yeSBpbiBzaXplb2YoKSB1bml0cworICAgICAqCisgICAgICogRUZGRUNUIDoKKyAgICAgKiAgUmV0dXJucyBhIHBvaW50ZXIgdG8gc29tZSAiaG9zdCIgbWVtb3J5IGZvciB1c2UgYnkgdGhlIGR5bmFtaWMKKyAgICAgKiBsb2FkZXIsIG9yIE5VTEwgZm9yIGZhaWx1cmUuCisgICAgICogVGhpcyBmdW5jdGlvbiBpcyBzZXJ2ZXMgYXMgYSByZXBsYWNlYWJsZSBmb3JtIG9mICJtYWxsb2MiIHRvCisgICAgICogYWxsb3cgdGhlIHVzZXIgdG8gY29uZmlndXJlIHRoZSBtZW1vcnkgdXNhZ2Ugb2YgdGhlIGR5bmFtaWMgbG9hZGVyLgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwl2b2lkICooKmRsb2FkX2FsbG9jYXRlKSAoc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAqdGhpc3B0ciwKKwkJCQkgdW5zaWduZWQgbWVtc2l6KTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogZGxvYWRfZGVhbGxvY2F0ZQorICAgICAqCisgICAgICogUEFSQU1FVEVSUyA6CisgICAgICogIG1lbXB0ciAgcG9pbnRlciB0byBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkKKyAgICAgKgorICAgICAqIEVGRkVDVCA6CisgICAgICogIFJlbGVhc2VzIHRoZSBwcmV2aW91c2x5IGFsbG9jYXRlZCAiaG9zdCIgbWVtb3J5LgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwl2b2lkICgqZGxvYWRfZGVhbGxvY2F0ZSkgKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0gKnRoaXNwdHIsCisJCQkJICB2b2lkICptZW1wdHIpOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBlcnJvcl9yZXBvcnQKKyAgICAgKgorICAgICAqIFBBUkFNRVRFUlMgOgorICAgICAqICBlcnJzdHIgIHBvaW50ZXIgdG8gYW4gZXJyb3Igc3RyaW5nCisgICAgICogIGFyZ3MgICAgYWRkaXRpb25hbCBhcmd1bWVudHMKKyAgICAgKgorICAgICAqIEVGRkVDVCA6CisgICAgICogIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYW4gZXJyb3IgcmVwb3J0aW5nIGludGVyZmFjZSBmb3IgdGhlIGR5bmFtaWMKKyAgICAgKiBsb2FkZXIuICBUaGUgZXJyb3Igc3RyaW5nIGFuZCBhcmd1bWVudHMgYXJlIGRlc2lnbmVkIGFzIGZvciB0aGUKKyAgICAgKiBsaWJyYXJ5IGZ1bmN0aW9uIHZwcmludGYuCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCXZvaWQgKCplcnJvcl9yZXBvcnQpIChzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3ltICp0aGlzcHRyLAorCQkJICAgICAgY29uc3QgY2hhciAqZXJyc3RyLCB2YV9saXN0IGFyZ3MpOworCit9OwkJCQkvKiBjbGFzcyBkeW5hbWljX2xvYWRlcl9zeW0gKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEEgY2xhc3MgdXNlZCBieSB0aGUgZHluYW1pYyBsb2FkZXIgdG8gYWxsb2NhdGUgYW5kIGRlYWxsb2NhdGUgdGFyZ2V0IG1lbW9yeS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworc3RydWN0IGxkcl9zZWN0aW9uX2luZm8geworCS8qIE5hbWUgb2YgdGhlIG1lbW9yeSBzZWN0aW9uIGFzc2lnbmVkIGF0IGJ1aWxkIHRpbWUgKi8KKwljb25zdCBjaGFyICpuYW1lOworCWxkcl9hZGRyIHJ1bl9hZGRyOwkvKiBleGVjdXRpb24gYWRkcmVzcyBvZiB0aGUgc2VjdGlvbiAqLworCWxkcl9hZGRyIGxvYWRfYWRkcjsJLyogbG9hZCBhZGRyZXNzIG9mIHRoZSBzZWN0aW9uICovCisJbGRyX2FkZHIgc2l6ZTsJCS8qIHNpemUgb2YgdGhlIHNlY3Rpb24gaW4gYWRkcmVzc2FibGUgdW5pdHMgKi8KKyNpZm5kZWYgX0JJR19FTkRJQU4KKwl1MTYgcGFnZTsJCS8qIG1lbW9yeSBwYWdlIG9yIHZpZXcgKi8KKwl1MTYgdHlwZTsJCS8qIG9uZSBvZiB0aGUgc2VjdGlvbiB0eXBlcyBiZWxvdyAqLworI2Vsc2UKKwl1MTYgdHlwZTsJCS8qIG9uZSBvZiB0aGUgc2VjdGlvbiB0eXBlcyBiZWxvdyAqLworCXUxNiBwYWdlOwkJLyogbWVtb3J5IHBhZ2Ugb3IgdmlldyAqLworI2VuZGlmCisJLyogYSBjb250ZXh0IGZpZWxkIGZvciB1c2UgYnkgZHluYW1pY19sb2FkZXJfYWxsb2NhdGU7CisJICogICBpZ25vcmVkIGJ1dCBtYWludGFpbmVkIGJ5IHRoZSBkeW5hbWljIGxvYWRlciAqLworCXUzMiBjb250ZXh0OworfTsKKworLyogdXNlIHRoaXMgbWFjcm8gdG8gZXh0cmFjdCB0eXBlIG9mIHNlY3Rpb24gZnJvbSBsZHJfc2VjdGlvbl9pbmZvLnR5cGUgZmllbGQgKi8KKyNkZWZpbmUgRExPQURfU0VDVElPTl9UWVBFKHR5cGVpbmZvKSAodHlwZWluZm8gJiAweEYpCisKKy8qIHR5cGUgb2Ygc2VjdGlvbiB0byBiZSBhbGxvY2F0ZWQgKi8KKyNkZWZpbmUgRExPQURfVEVYVCAwCisjZGVmaW5lIERMT0FEX0RBVEEgMQorI2RlZmluZSBETE9BRF9CU1MgMgorCS8qIGludGVybmFsIHVzZSBvbmx5LCBydW4tdGltZSBjaW5pdCB3aWxsIGJlIG9mIHR5cGUgRExPQURfREFUQSAqLworI2RlZmluZSBETE9BRF9DSU5JVCAzCisKK3N0cnVjdCBkeW5hbWljX2xvYWRlcl9hbGxvY2F0ZSB7CisvKiBwdWJsaWM6ICovCisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICogRnVuY3Rpb24gYWxsb2NhdGUKKyAgICAqCisgICAgKiBQYXJhbWV0ZXJzOgorICAgICogICBpbmZvICAgICAgICBBIHBvaW50ZXIgdG8gYW4gaW5mb3JtYXRpb24gYmxvY2sgZm9yIHRoZSBzZWN0aW9uCisgICAgKiAgIGFsaWduICAgICAgIFRoZSBhbGlnbm1lbnQgb2YgdGhlIHN0b3JhZ2UgaW4gdGFyZ2V0IEFVcworICAgICoKKyAgICAqIEVmZmVjdDoKKyAgICAqICAgQWxsb2NhdGVzIHRhcmdldCBtZW1vcnkgZm9yIHRoZSBzcGVjaWZpZWQgc2VjdGlvbiBhbmQgZmlsbHMgaW4gdGhlCisgICAgKiBsb2FkX2FkZHIgYW5kIHJ1bl9hZGRyIGZpZWxkcyBvZiB0aGUgc2VjdGlvbiBpbmZvIHN0cnVjdHVyZS4gUmV0dXJucyBUUlVFCisgICAgKiBmb3Igc3VjY2VzcywgRkFMU0UgZm9yIGZhaWx1cmUuCisgICAgKgorICAgICogTm90ZXM6CisgICAgKiAgIEZyZXF1ZW50bHkgbG9hZF9hZGRyIGFuZCBydW5fYWRkciBhcmUgdGhlIHNhbWUsIGJ1dCBpZiB0aGV5IGFyZSBub3QKKyAgICAqIGxvYWRfYWRkciBpcyB1c2VkIHdpdGggZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSwgYW5kIHJ1bl9hZGRyIGlzCisgICAgKiB1c2VkIGZvciBhbG1vc3QgYWxsIHJlbG9jYXRpb25zLiAgVGhpcyBmdW5jdGlvbiBzaG91bGQgYWx3YXlzIGluaXRpYWxpemUKKyAgICAqIGJvdGggZmllbGRzLgorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCWludCAoKmRsb2FkX2FsbG9jYXRlKSAoc3RydWN0IGR5bmFtaWNfbG9hZGVyX2FsbG9jYXRlICp0aGlzcHRyLAorCQkJICAgICAgIHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICppbmZvLCB1bnNpZ25lZCBhbGlnbik7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICogRnVuY3Rpb24gZGVhbGxvY2F0ZQorICAgICoKKyAgICAqIFBhcmFtZXRlcnM6CisgICAgKiAgIGluZm8gICAgICAgIEEgcG9pbnRlciB0byBhbiBpbmZvcm1hdGlvbiBibG9jayBmb3IgdGhlIHNlY3Rpb24KKyAgICAqCisgICAgKiBFZmZlY3Q6CisgICAgKiAgIFJlbGVhc2VzIHRoZSB0YXJnZXQgbWVtb3J5IHByZXZpb3VzbHkgYWxsb2NhdGVkLgorICAgICoKKyAgICAqIE5vdGVzOgorICAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGluZm8tPm5hbWUgZmllbGQgaXMgdW5kZWZpbmVkIG9uIGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwl2b2lkICgqZGxvYWRfZGVhbGxvY2F0ZSkgKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9hbGxvY2F0ZSAqdGhpc3B0ciwKKwkJCQkgIHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICppbmZvKTsKKworfTsJCQkJLyogY2xhc3MgZHluYW1pY19sb2FkZXJfYWxsb2NhdGUgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEEgY2xhc3MgdXNlZCBieSB0aGUgZHluYW1pYyBsb2FkZXIgdG8gbG9hZCBkYXRhIGludG8gYSB0YXJnZXQuICBUaGlzIGNsYXNzCisgKiBwcm92aWRlcyB0aGUgaW50ZXJmYWNlLXNwZWNpZmljIGZ1bmN0aW9ucyBuZWVkZWQgdG8gbG9hZCBkYXRhLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCitzdHJ1Y3QgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSB7CisvKiBwdWJsaWM6ICovCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAqIEZ1bmN0aW9uIGNvbm5lY3QKKyAgICAqCisgICAgKiBQYXJhbWV0ZXJzOgorICAgICogICBub25lCisgICAgKgorICAgICogRWZmZWN0OgorICAgICogICBDb25uZWN0IHRvIHRoZSBpbml0aWFsaXphdGlvbiBpbnRlcmZhY2UuIFJldHVybnMgVFJVRSBmb3Igc3VjY2VzcywKKyAgICAqIEZBTFNFIGZvciBmYWlsdXJlLgorICAgICoKKyAgICAqIE5vdGVzOgorICAgICogICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBwcmlvciB0byB1c2Ugb2YgYW55IG90aGVyIGZ1bmN0aW9ucyBpbgorICAgICogdGhpcyBpbnRlcmZhY2UuCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisJaW50ICgqY29ubmVjdCkgKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICp0aGlzcHRyKTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgKiBGdW5jdGlvbiByZWFkbWVtCisgICAgKgorICAgICogUGFyYW1ldGVyczoKKyAgICAqICAgYnVmciAgICAgICAgUG9pbnRlciB0byBhIHdvcmQtYWxpZ25lZCBidWZmZXIgZm9yIHRoZSByZXN1bHQKKyAgICAqICAgbG9jbiAgICAgICAgVGFyZ2V0IGFkZHJlc3Mgb2YgZmlyc3QgZGF0YSBlbGVtZW50CisgICAgKiAgIGluZm8gICAgICAgIFNlY3Rpb24gaW5mbyBmb3IgdGhlIHNlY3Rpb24gaW4gd2hpY2ggdGhlIGFkZHJlc3MgcmVzaWRlcworICAgICogICBieXRzaXogICAgICBTaXplIG9mIHRoZSBkYXRhIHRvIGJlIHJlYWQgaW4gc2l6ZW9mKCkgdW5pdHMKKyAgICAqCisgICAgKiBFZmZlY3Q6CisgICAgKiAgIEZpbGxzIHRoZSBzcGVjaWZpZWQgYnVmZmVyIHdpdGggZGF0YSBmcm9tIHRoZSB0YXJnZXQuICBSZXR1cm5zIFRSVUUgZm9yCisgICAgKiBzdWNjZXNzLCBGQUxTRSBmb3IgZmFpbHVyZS4KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwlpbnQgKCpyZWFkbWVtKSAoc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemUgKnRoaXNwdHIsCisJCQl2b2lkICpidWZyLAorCQkJbGRyX2FkZHIgbG9jbiwKKwkJCXN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICppbmZvLCB1bnNpZ25lZCBieXRzaXopOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAqIEZ1bmN0aW9uIHdyaXRlbWVtCisgICAgKgorICAgICogUGFyYW1ldGVyczoKKyAgICAqICAgYnVmciAgICAgICAgUG9pbnRlciB0byBhIHdvcmQtYWxpZ25lZCBidWZmZXIgb2YgZGF0YQorICAgICogICBsb2NuICAgICAgICBUYXJnZXQgYWRkcmVzcyBvZiBmaXJzdCBkYXRhIGVsZW1lbnQgdG8gYmUgd3JpdHRlbgorICAgICogICBpbmZvICAgICAgICBTZWN0aW9uIGluZm8gZm9yIHRoZSBzZWN0aW9uIGluIHdoaWNoIHRoZSBhZGRyZXNzIHJlc2lkZXMKKyAgICAqICAgYnl0c2l6ICAgICAgU2l6ZSBvZiB0aGUgZGF0YSB0byBiZSB3cml0dGVuIGluIHNpemVvZigpIHVuaXRzCisgICAgKgorICAgICogRWZmZWN0OgorICAgICogICBXcml0ZXMgdGhlIHNwZWNpZmllZCBidWZmZXIgdG8gdGhlIHRhcmdldC4gIFJldHVybnMgVFJVRSBmb3Igc3VjY2VzcywKKyAgICAqIEZBTFNFIGZvciBmYWlsdXJlLgorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCWludCAoKndyaXRlbWVtKSAoc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemUgKnRoaXNwdHIsCisJCQkgdm9pZCAqYnVmciwKKwkJCSBsZHJfYWRkciBsb2NuLAorCQkJIHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICppbmZvLCB1bnNpZ25lZCBieXRzaXopOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAqIEZ1bmN0aW9uIGZpbGxtZW0KKyAgICAqCisgICAgKiBQYXJhbWV0ZXJzOgorICAgICogICBsb2NuICAgICAgICBUYXJnZXQgYWRkcmVzcyBvZiBmaXJzdCBkYXRhIGVsZW1lbnQgdG8gYmUgd3JpdHRlbgorICAgICogICBpbmZvICAgICAgICBTZWN0aW9uIGluZm8gZm9yIHRoZSBzZWN0aW9uIGluIHdoaWNoIHRoZSBhZGRyZXNzIHJlc2lkZXMKKyAgICAqICAgYnl0c2l6ICAgICAgU2l6ZSBvZiB0aGUgZGF0YSB0byBiZSB3cml0dGVuIGluIHNpemVvZigpIHVuaXRzCisgICAgKiAgIHZhbCAgICAgICAgIFZhbHVlIHRvIGJlIHdyaXR0ZW4gaW4gZWFjaCBieXRlCisgICAgKiBFZmZlY3Q6CisgICAgKiAgIEZpbGxzIHRoZSBzcGVjaWZpZWQgYXJlYSBvZiB0YXJnZXQgbWVtb3J5LiAgUmV0dXJucyBUUlVFIGZvciBzdWNjZXNzLAorICAgICogRkFMU0UgZm9yIGZhaWx1cmUuCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisJaW50ICgqZmlsbG1lbSkgKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICp0aGlzcHRyLAorCQkJbGRyX2FkZHIgbG9jbiwgc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKmluZm8sCisJCQl1bnNpZ25lZCBieXRzaXosIHVuc2lnbmVkIHZhbCk7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICogRnVuY3Rpb24gZXhlY3V0ZQorICAgICoKKyAgICAqIFBhcmFtZXRlcnM6CisgICAgKiAgIHN0YXJ0ICAgICAgIFN0YXJ0aW5nIGFkZHJlc3MKKyAgICAqCisgICAgKiBFZmZlY3Q6CisgICAgKiAgIFRoZSB0YXJnZXQgY29kZSBhdCB0aGUgc3BlY2lmaWVkIHN0YXJ0aW5nIGFkZHJlc3MgaXMgZXhlY3V0ZWQuCisgICAgKgorICAgICogTm90ZXM6CisgICAgKiAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHRoZSBlbmQgb2YgdGhlIGR5bmFtaWMgbG9hZCBwcm9jZXNzCisgICAgKiBpZiB0aGUgaW5wdXQgbW9kdWxlIGhhcyBzcGVjaWZpZWQgYSBzdGFydGluZyBhZGRyZXNzLgorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCWludCAoKmV4ZWN1dGUpIChzdHJ1Y3QgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqdGhpc3B0ciwKKwkJCWxkcl9hZGRyIHN0YXJ0KTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgKiBGdW5jdGlvbiByZWxlYXNlCisgICAgKgorICAgICogUGFyYW1ldGVyczoKKyAgICAqICAgbm9uZQorICAgICoKKyAgICAqIEVmZmVjdDoKKyAgICAqICAgUmVsZWFzZXMgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGxvYWQgaW50ZXJmYWNlLgorICAgICoKKyAgICAqIE5vdGVzOgorICAgICogICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCB0aGUgZW5kIG9mIHRoZSBkeW5hbWljIGxvYWQgcHJvY2Vzcy4KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwl2b2lkICgqcmVsZWFzZSkgKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICp0aGlzcHRyKTsKKworfTsJCQkJLyogY2xhc3MgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqLworCisjZW5kaWYgLyogX0RZTkFNSUNfTE9BREVSX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZ2IuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9nYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYTc4M2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZ2IuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogZ2IuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBHZW5lcmljIGJpdG1hcCBtYW5hZ2VyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgR0JfCisjZGVmaW5lIEdCXworCisjZGVmaW5lIEdCX05PQklUUyAofjApCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KKworc3RydWN0IGdiX3RfbWFwOworCisvKgorICogID09PT09PT09IGdiX2NsZWFyID09PT09PT09CisgKiAgQ2xlYXIgdGhlIGJpdCBpbiBwb3NpdGlvbiBiaXRuIGluIHRoZSBiaXRtYXAgbWFwLiAgQml0IHBvc2l0aW9ucyBhcmUKKyAqICB6ZXJvIGJhc2VkLgorICovCisKK2V4dGVybiB2b2lkIGdiX2NsZWFyKHN0cnVjdCBnYl90X21hcCAqbWFwLCB1MzIgYml0bik7CisKKy8qCisgKiAgPT09PT09PT0gZ2JfY3JlYXRlID09PT09PT09CisgKiAgQ3JlYXRlIGEgYml0IG1hcCB3aXRoIGxlbiBiaXRzLiAgSW5pdGlhbGx5IGFsbCBiaXRzIGFyZSBjbGVhcmVkLgorICovCisKK2V4dGVybiBzdHJ1Y3QgZ2JfdF9tYXAgKmdiX2NyZWF0ZSh1MzIgbGVuKTsKKworLyoKKyAqICA9PT09PT09PSBnYl9kZWxldGUgPT09PT09PT0KKyAqICBEZWxldGUgcHJldmlvdXNseSBjcmVhdGVkIGJpdCBtYXAKKyAqLworCitleHRlcm4gdm9pZCBnYl9kZWxldGUoc3RydWN0IGdiX3RfbWFwICptYXApOworCisvKgorICogID09PT09PT09IGdiX2ZpbmRhbmRzZXQgPT09PT09PT0KKyAqICBGaW5kcyBhIGNsZWFyIGJpdCwgc2V0cyBpdCwgYW5kIHJldHVybnMgdGhlIHBvc2l0aW9uCisgKi8KKworZXh0ZXJuIHUzMiBnYl9maW5kYW5kc2V0KHN0cnVjdCBnYl90X21hcCAqbWFwKTsKKworLyoKKyAqICA9PT09PT09PSBnYl9taW5jbGVhciA9PT09PT09PQorICogIGdiX21pbmNsZWFyIHJldHVybnMgdGhlIG1pbmltdW0gY2xlYXIgYml0IHBvc2l0aW9uLiAgSWYgbm8gYml0IGlzCisgKiAgY2xlYXIsIGdiX21pbmNsZWFyIHJldHVybnMgLTEuCisgKi8KK2V4dGVybiB1MzIgZ2JfbWluY2xlYXIoc3RydWN0IGdiX3RfbWFwICptYXApOworCisvKgorICogID09PT09PT09IGdiX3NldCA9PT09PT09PQorICogIFNldCB0aGUgYml0IGluIHBvc2l0aW9uIGJpdG4gaW4gdGhlIGJpdG1hcCBtYXAuICBCaXQgcG9zaXRpb25zIGFyZQorICogIHplcm8gYmFzZWQuCisgKi8KKworZXh0ZXJuIHZvaWQgZ2Jfc2V0KHN0cnVjdCBnYl90X21hcCAqbWFwLCB1MzIgYml0bik7CisKKy8qCisgKiAgPT09PT09PT0gZ2JfdGVzdCA9PT09PT09PQorICogIFJldHVybnMgVFJVRSBpZiB0aGUgYml0IGluIHBvc2l0aW9uIGJpdG4gaXMgc2V0IGluIG1hcDsgb3RoZXJ3aXNlCisgKiAgZ2JfdGVzdCByZXR1cm5zIEZBTFNFLiAgQml0IHBvc2l0aW9ucyBhcmUgemVybyBiYXNlZC4KKyAqLworCitleHRlcm4gYm9vbCBnYl90ZXN0KHN0cnVjdCBnYl90X21hcCAqbWFwLCB1MzIgYml0bik7CisKKyNlbmRpZiAvKkdCXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2dldHNlY3Rpb24uaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9nZXRzZWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI2MDYzZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9nZXRzZWN0aW9uLmgKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBnZXRzZWN0aW9uLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogVGhpcyBmaWxlIHByb3ZpZGVzIGFuIEFQSSBhZGQtb24gdG8gdGhlIGR5bmFtaWMgbG9hZGVyIHRoYXQgYWxsb3dzIHRoZSB1c2VyCisgKiB0byBxdWVyeSBzZWN0aW9uIGluZm9ybWF0aW9uIGFuZCBleHRyYWN0IHNlY3Rpb24gZGF0YSBmcm9tIGR5bmFtaWMgbG9hZAorICogbW9kdWxlcy4KKyAqCisgKiBOb3RlczoKKyAqICAgRnVuY3Rpb25zIGluIHRoaXMgQVBJIGFzc3VtZSB0aGF0IHRoZSBzdXBwbGllZCBkeW5hbWljX2xvYWRlcl9zdHJlYW0KKyAqICAgb2JqZWN0IHN1cHBvcnRzIHRoZSBzZXRfZmlsZV9wb3NuIG1ldGhvZC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBfR0VUU0VDVElPTl9IXworI2RlZmluZSBfR0VUU0VDVElPTl9IXworCisjaW5jbHVkZSAiZHluYW1pY19sb2FkZXIuaCIKKworLyoKKyAqIFByb2NlZHVyZSBkbG9hZF9tb2R1bGVfb3BlbgorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgbW9kdWxlICBUaGUgaW5wdXQgc3RyZWFtIHRoYXQgc3VwcGxpZXMgdGhlIG1vZHVsZSBpbWFnZQorICogIHN5bXMgICAgSG9zdC1zaWRlIG1hbGxvYy9mcmVlIGFuZCBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb25zLgorICogICAgICAgICAgT3RoZXIgbWV0aG9kcyBhcmUgdW51c2VkLgorICoKKyAqIEVmZmVjdDoKKyAqICBSZWFkcyBoZWFkZXIgaW5mb3JtYXRpb24gZnJvbSBhIGR5bmFtaWMgbG9hZGVyIG1vZHVsZSB1c2luZyB0aGUgc3BlY2lmaWVkCisgKiBzdHJlYW0gb2JqZWN0LCBhbmQgcmV0dXJucyBhIGhhbmRsZSBmb3IgdGhlIG1vZHVsZSBpbmZvcm1hdGlvbi4gIFRoaXMKKyAqIGhhbmRsZSBtYXkgYmUgdXNlZCBpbiBzdWJzZXF1ZW50IHF1ZXJ5IGNhbGxzIHRvIG9idGFpbiBpbmZvcm1hdGlvbgorICogY29udGFpbmVkIGluIHRoZSBtb2R1bGUuCisgKgorICogUmV0dXJuczoKKyAqICBOVUxMIGlmIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLCBvdGhlcndpc2UgYSBtb2R1bGUgaGFuZGxlIGZvciB1c2UKKyAqIGluIHN1YnNlcXVlbnQgb3BlcmF0aW9ucy4KKyAqLworZXh0ZXJuIHZvaWQgKmRsb2FkX21vZHVsZV9vcGVuKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zdHJlYW0KKwkJCQkJICAgKm1vZHVsZSwgc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bQorCQkJCQkgICAqc3ltcyk7CisKKy8qCisgKiBQcm9jZWR1cmUgZGxvYWRfZ2V0X3NlY3Rpb25faW5mbworICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgbWluZm8gICAgICAgSGFuZGxlIGZyb20gZGxvYWRfbW9kdWxlX29wZW4gZm9yIHRoaXMgbW9kdWxlCisgKiAgc2VjdGlvbl9uYW1lIFBvaW50ZXIgdG8gdGhlIHN0cmluZyBuYW1lIG9mIHRoZSBzZWN0aW9uIGRlc2lyZWQKKyAqICBzZWN0aW9uX2luZm8gQWRkcmVzcyBvZiBhIHNlY3Rpb24gaW5mbyBzdHJ1Y3R1cmUgcG9pbnRlciB0byBiZSBpbml0aWFsaXplZAorICoKKyAqIEVmZmVjdDoKKyAqICBGaW5kcyB0aGUgc3BlY2lmaWVkIHNlY3Rpb24gaW4gdGhlIG1vZHVsZSBpbmZvcm1hdGlvbiwgYW5kIGZpbGxzIGluCisgKiB0aGUgcHJvdmlkZWQgbGRyX3NlY3Rpb25faW5mbyBzdHJ1Y3R1cmUuCisgKgorICogUmV0dXJuczoKKyAqICBUUlVFIGZvciBzdWNjZXNzLCBGQUxTRSBmb3Igc2VjdGlvbiBub3QgZm91bmQKKyAqLworZXh0ZXJuIGludCBkbG9hZF9nZXRfc2VjdGlvbl9pbmZvKHZvaWQgKm1pbmZvLAorCQkJCSAgY29uc3QgY2hhciAqc2VjdGlvbl9uYW1lLAorCQkJCSAgY29uc3Qgc3RydWN0IGxkcl9zZWN0aW9uX2luZm8KKwkJCQkgICoqY29uc3Qgc2VjdGlvbl9pbmZvKTsKKworLyoKKyAqIFByb2NlZHVyZSBkbG9hZF9nZXRfc2VjdGlvbgorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgbWluZm8gICAgICAgSGFuZGxlIGZyb20gZGxvYWRfbW9kdWxlX29wZW4gZm9yIHRoaXMgbW9kdWxlCisgKiAgc2VjdGlvbl9pbmZvIFBvaW50ZXIgdG8gYSBzZWN0aW9uIGluZm8gc3RydWN0dXJlIGZvciB0aGUgZGVzaXJlZCBzZWN0aW9uCisgKiAgc2VjdGlvbl9kYXRhIEJ1ZmZlciB0byBjb250YWluIHRoZSBzZWN0aW9uIGluaXRpYWxpemVkIGRhdGEKKyAqCisgKiBFZmZlY3Q6CisgKiAgQ29waWVzIHRoZSBpbml0aWFsaXplZCBkYXRhIGZvciB0aGUgc3BlY2lmaWVkIHNlY3Rpb24gaW50byB0aGUKKyAqIHN1cHBsaWVkIGJ1ZmZlci4KKyAqCisgKiBSZXR1cm5zOgorICogIFRSVUUgZm9yIHN1Y2Nlc3MsIEZBTFNFIGZvciBzZWN0aW9uIG5vdCBmb3VuZAorICovCitleHRlcm4gaW50IGRsb2FkX2dldF9zZWN0aW9uKHZvaWQgKm1pbmZvLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqc2VjdGlvbl9pbmZvLAorCQkJICAgICB2b2lkICpzZWN0aW9uX2RhdGEpOworCisvKgorICogUHJvY2VkdXJlIGRsb2FkX21vZHVsZV9jbG9zZQorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgbWluZm8gICAgICAgSGFuZGxlIGZyb20gZGxvYWRfbW9kdWxlX29wZW4gZm9yIHRoaXMgbW9kdWxlCisgKgorICogRWZmZWN0OgorICogIFJlbGVhc2VzIGFueSBzdG9yYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbW9kdWxlIGhhbmRsZS4gIE9uIHJldHVybiwKKyAqIHRoZSBtb2R1bGUgaGFuZGxlIGlzIGludmFsaWQuCisgKgorICogUmV0dXJuczoKKyAqICBaZXJvIGZvciBzdWNjZXNzLiBPbiBlcnJvciwgdGhlIG51bWJlciBvZiBlcnJvcnMgZGV0ZWN0ZWQgaXMgcmV0dXJuZWQuCisgKiBJbmRpdmlkdWFsIGVycm9ycyBhcmUgcmVwb3J0ZWQgdXNpbmcgc3ltcy0+ZXJyb3JfcmVwb3J0KCksIHdoZXJlIHN5bXMgd2FzCisgKiBhbiBhcmd1bWVudCB0byBkbG9hZF9tb2R1bGVfb3BlbgorICovCitleHRlcm4gdm9pZCBkbG9hZF9tb2R1bGVfY2xvc2Uodm9pZCAqbWluZm8pOworCisjZW5kaWYgLyogX0dFVFNFQ1RJT05fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9naC5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2doLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlMjkxZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9naC5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBnaC5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgR0hfCisjZGVmaW5lIEdIXworI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisKK2V4dGVybiBzdHJ1Y3QgZ2hfdF9oYXNoX3RhYiAqZ2hfY3JlYXRlKHUxNiBtYXhfYnVja2V0LCB1MTYgdmFsX3NpemUsCisJCQkJICAgICAgIHUxNigqaGFzaCkgKHZvaWQgKiwgdTE2KSwKKwkJCQkgICAgICAgYm9vbCgqbWF0Y2gpICh2b2lkICosIHZvaWQgKiksCisJCQkJICAgICAgIHZvaWQgKCpkZWxldGUpICh2b2lkICopKTsKK2V4dGVybiB2b2lkIGdoX2RlbGV0ZShzdHJ1Y3QgZ2hfdF9oYXNoX3RhYiAqaGFzaF90YWIpOworZXh0ZXJuIHZvaWQgZ2hfZXhpdCh2b2lkKTsKK2V4dGVybiB2b2lkICpnaF9maW5kKHN0cnVjdCBnaF90X2hhc2hfdGFiICpoYXNoX3RhYiwgdm9pZCAqa2V5KTsKK2V4dGVybiB2b2lkIGdoX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCAqZ2hfaW5zZXJ0KHN0cnVjdCBnaF90X2hhc2hfdGFiICpoYXNoX3RhYiwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSk7CisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0JBQ0tUUkFDRQordm9pZCBnaF9pdGVyYXRlKHN0cnVjdCBnaF90X2hhc2hfdGFiICpoYXNoX3RhYiwKKwl2b2lkICgqY2FsbGJhY2spKHZvaWQgKiwgdm9pZCAqKSwgdm9pZCAqdXNlcl9kYXRhKTsKKyNlbmRpZgorI2VuZGlmIC8qIEdIXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2dzLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzJkOGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2dzLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIGdzLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogTWVtb3J5IGFsbG9jYXRpb24vcmVsZWFzZSB3cmFwcGVycy4gIFRoaXMgbW9kdWxlIGFsbG93cyBjbGllbnRzIHRvCisgKiBhdm9pZCBPUyBzcGFjaWZpYyBpc3N1ZXMgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbi4gIEl0IGFsc28gcHJvdmlkZXMKKyAqIHNpbXBsZSBkaWFnbm9zdGljIGNhcGFiaWxpdGllcyB0byBhc3Npc3QgaW4gdGhlIGRldGVjdGlvbiBvZiBtZW1vcnkKKyAqIGxlYWtzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgR1NfCisjZGVmaW5lIEdTXworCisvKgorICogID09PT09PT09IGdzX2FsbG9jID09PT09PT09CisgKiAgQWxsb2Mgc2l6ZSBieXRlcyBvZiBzcGFjZS4gIFJldHVybnMgcG9pbnRlciB0byBzcGFjZQorICogIGFsbG9jYXRlZCwgb3RoZXJ3aXNlIE5VTEwuCisgKi8KK2V4dGVybiB2b2lkICpnc19hbGxvYyh1MzIgc2l6ZSk7CisKKy8qCisgKiAgPT09PT09PT0gZ3NfZXhpdCA9PT09PT09PQorICogIE1vZHVsZSBleGl0LiAgRG8gbm90IGNoYW5nZSB0byAiI2RlZmluZSBnc19pbml0KCkiOyBpbgorICogIHNvbWUgZW52aXJvbm1lbnRzIHRoaXMgb3BlcmF0aW9uIG11c3QgYWN0dWFsbHkgZG8gc29tZSB3b3JrIQorICovCitleHRlcm4gdm9pZCBnc19leGl0KHZvaWQpOworCisvKgorICogID09PT09PT09IGdzX2ZyZWUgPT09PT09PT0KKyAqICBGcmVlIHNwYWNlIGFsbG9jYXRlZCBieSBnc19hbGxvYygpIG9yIEdTX2NhbGxvYygpLgorICovCitleHRlcm4gdm9pZCBnc19mcmVlKHZvaWQgKnB0cik7CisKKy8qCisgKiAgPT09PT09PT0gZ3NfZnJlZXMgPT09PT09PT0KKyAqICBGcmVlIHNwYWNlIGFsbG9jYXRlZCBieSBnc19hbGxvYygpIG9yIEdTX2NhbGxvYygpIGFuZCBhc3NlcnQgdGhhdAorICogIHRoZSBzaXplIG9mIHRoZSBhbGxvY2F0aW9uIGlzIHNpemUgYnl0ZXMuCisgKi8KK2V4dGVybiB2b2lkIGdzX2ZyZWVzKHZvaWQgKnB0ciwgdTMyIHNpemUpOworCisvKgorICogID09PT09PT09IGdzX2luaXQgPT09PT09PT0KKyAqICBNb2R1bGUgaW5pdGlhbGl6YXRpb24uICBEbyBub3QgY2hhbmdlIHRvICIjZGVmaW5lIGdzX2luaXQoKSI7IGluCisgKiAgc29tZSBlbnZpcm9ubWVudHMgdGhpcyBvcGVyYXRpb24gbXVzdCBhY3R1YWxseSBkbyBzb21lIHdvcmshCisgKi8KK2V4dGVybiB2b2lkIGdzX2luaXQodm9pZCk7CisKKyNlbmRpZiAvKkdTXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2hvc3Rfb3MuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ob3N0X29zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI0ZmViNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ob3N0X29zLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIGhvc3Rfb3MuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBfSE9TVF9PU19IXworI2RlZmluZSBfSE9TVF9PU19IXworCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxwbGF0L21haWxib3guaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisvKiBUT0RPIC0tIFJlbW92ZSwgb25jZSBCUCBkZWZpbmVzIHRoZW0gKi8KKyNkZWZpbmUgSU5UX0RTUF9NTVVfSVJRICAgICAgICAyOAorCitzdHJ1Y3QgZHNwYnJpZGdlX3BsYXRmb3JtX2RhdGEgeworCXZvaWQgKCpkc3Bfc2V0X21pbl9vcHApICh1OCBvcHBfaWQpOworCSB1OCgqZHNwX2dldF9vcHApICh2b2lkKTsKKwl2b2lkICgqY3B1X3NldF9mcmVxKSAodW5zaWduZWQgbG9uZyBmKTsKKwl1bnNpZ25lZCBsb25nICgqY3B1X2dldF9mcmVxKSAodm9pZCk7CisJdW5zaWduZWQgbG9uZyBtcHVfc3BlZWRbNl07CisKKwkvKiBmdW5jdGlvbnMgdG8gd3JpdGUgYW5kIHJlYWQgUFJDTSByZWdpc3RlcnMgKi8KKwl2b2lkICgqZHNwX3BybV93cml0ZSkodTMyLCBzMTYgLCB1MTYpOworCXUzMiAoKmRzcF9wcm1fcmVhZCkoczE2ICwgdTE2KTsKKwl1MzIgKCpkc3BfcHJtX3Jtd19iaXRzKSh1MzIsIHUzMiwgczE2LCBzMTYpOworCXZvaWQgKCpkc3BfY21fd3JpdGUpKHUzMiwgczE2ICwgdTE2KTsKKwl1MzIgKCpkc3BfY21fcmVhZCkoczE2ICwgdTE2KTsKKwl1MzIgKCpkc3BfY21fcm13X2JpdHMpKHUzMiwgdTMyLCBzMTYsIHMxNik7CisKKwl1MzIgcGh5c19tZW1wb29sX2Jhc2U7CisJdTMyIHBoeXNfbWVtcG9vbF9zaXplOworfTsKKworI2RlZmluZSBQUkNNX1ZERDEgMQorCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb21hcF9kc3BicmlkZ2VfZGV2OworZXh0ZXJuIHN0cnVjdCBkZXZpY2UgKmJyaWRnZTsKKworI2lmIGRlZmluZWQoQ09ORklHX1RJRFNQQlJJREdFKSB8fCBkZWZpbmVkKENPTkZJR19USURTUEJSSURHRV9NT0RVTEUpCitleHRlcm4gdm9pZCBkc3BicmlkZ2VfcmVzZXJ2ZV9zZHJhbSh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZHNwYnJpZGdlX3Jlc2VydmVfc2RyYW0odm9pZCkKK3sKK30KKyNlbmRpZgorCitleHRlcm4gdW5zaWduZWQgbG9uZyBkc3BicmlkZ2VfZ2V0X21lbXBvb2xfYmFzZSh2b2lkKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2lvLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzM0NmY5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2lvLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBpby5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIFRoZSBpbyBtb2R1bGUgbWFuYWdlcyBJTyBiZXR3ZWVuIENITkwgYW5kIG1zZ19jdHJsLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgSU9fCisjZGVmaW5lIElPXworCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NmZ2RlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2ZGVmcy5oPgorCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2lvZGVmcy5oPgorCisvKgorICogID09PT09PT09IGlvX2NyZWF0ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENyZWF0ZSBhbiBJTyBtYW5hZ2VyIG9iamVjdCwgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIElPIGJldHdlZW4KKyAqICAgICAgQ0hOTCBhbmQgbXNnX2N0cmwuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgY2hhbm5lbF9tZ3I6ICAgICAgICAgICAgTG9jYXRpb24gdG8gc3RvcmUgYSBjaGFubmVsIG1hbmFnZXIgb2JqZWN0IG9uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC4KKyAqICAgICAgaGRldl9vYmo6ICAgICAgICAgICAgIEhhbmRsZSB0byBhIGRldmljZSBvYmplY3QuCisgKiAgICAgIG1ncl9hdHRydHM6ICAgICAgICAgICAgICBJTyBtYW5hZ2VyIGF0dHJpYnV0ZXMuCisgKiAgICAgIG1ncl9hdHRydHMtPmJpcnE6ICAgICAgICBJL08gSVJRIG51bWJlci4KKyAqICAgICAgbWdyX2F0dHJ0cy0+aXJxX3NoYXJlZDogICAgIFRSVUUgaWYgdGhlIElSUSBpcyBzaGFyZWFibGUuCisgKiAgICAgIG1ncl9hdHRydHMtPndvcmRfc2l6ZTogICBEU1AgV29yZCBzaXplIGluIGVxdWl2YWxlbnQgUEMgYnl0ZXMuLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgICAgIFN1Y2Nlc3M7CisgKiAgICAgIC1FTk9NRU06ICAgICAgICAgICAgSW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgcmVxdWVzdGVkIHJlc291cmNlcy4KKyAqICAgICAgLUVJTzogICAgICAgICAgICAgVW5hYmxlIHRvIHBsdWcgY2hhbm5lbCBJU1IgZm9yIGNvbmZpZ3VyZWQgSVJRLgorICogICAgICAtRUlOVkFMOiBJbnZhbGlkIERTUCB3b3JkIHNpemUgKG11c3QgYmUgPiAwKS4KKyAqICAgICAgICAgICAgICAgSW52YWxpZCBiYXNlIGFkZHJlc3MgZm9yIERTUCBjb21tdW5pY2F0aW9ucy4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgaW9faW5pdCh2b2lkKSBjYWxsZWQuCisgKiAgICAgIGlvX21hbiAhPSBOVUxMLgorICogICAgICBtZ3JfYXR0cnRzICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBpb19jcmVhdGUoc3RydWN0IGlvX21nciAqKmlvX21hbiwKKwkJCSAgICBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkgICAgY29uc3Qgc3RydWN0IGlvX2F0dHJzICptZ3JfYXR0cnRzKTsKKworLyoKKyAqICA9PT09PT09PSBpb19kZXN0cm95ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGVzdHJveSB0aGUgSU8gbWFuYWdlci4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoaW9fbWdyOiAgICAgICAgIElPbWFuYWdlciBvYmplY3QuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6ICAgIGhpb19tZ3Igd2FzIGludmFsaWQuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGlvX2luaXQodm9pZCkgY2FsbGVkLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgaW9fZGVzdHJveShzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyKTsKKworLyoKKyAqICA9PT09PT09PSBpb19leGl0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGlzY29udGludWUgdXNhZ2Ugb2YgdGhlIElPIG1vZHVsZS4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGlvX2luaXQodm9pZCkgcHJldmlvdXNseSBjYWxsZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgUmVzb3VyY2VzLCBpZiBhbnkgYWNxdWlyZWQgaW4gaW9faW5pdCh2b2lkKSwgYXJlIGZyZWVkIHdoZW4gdGhlIGxhc3QKKyAqICAgICAgY2xpZW50IG9mIElPIGNhbGxzIGlvX2V4aXQodm9pZCkuCisgKi8KK2V4dGVybiB2b2lkIGlvX2V4aXQodm9pZCk7CisKKy8qCisgKiAgPT09PT09PT0gaW9faW5pdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEluaXRpYWxpemUgdGhlIElPIG1vZHVsZSdzIHByaXZhdGUgc3RhdGUuCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogICAgICBUUlVFIGlmIGluaXRpYWxpemVkOyBGQUxTRSBpZiBlcnJvciBvY2N1cnJlZC4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICogICAgICBBIHJlcXVpcmVtZW50IGZvciBlYWNoIG9mIHRoZSBvdGhlciBwdWJsaWMgQ0hOTCBmdW5jdGlvbnMuCisgKi8KK2V4dGVybiBib29sIGlvX2luaXQodm9pZCk7CisKKy8qCisgKiAgPT09PT09PT0gaW9fb25fbG9hZGVkID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ2FsbGVkIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZCBzbyBJTyBtYW5hZ2VyIGNhbiB1cGRhdGUgaXRzCisgKiAgICAgIGludGVybmFsIHN0YXRlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhpb19tZ3I6ICAgICAgICAgSU9tYW5hZ2VyIG9iamVjdC4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogICAgaGlvX21nciB3YXMgaW52YWxpZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgaW9faW5pdCh2b2lkKSBjYWxsZWQuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBpb19vbl9sb2FkZWQoc3RydWN0IGlvX21nciAqaGlvX21ncik7CisKKyNlbmRpZiAvKiBDSE5MXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2lvX3NtLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvaW9fc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGFlYzU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2lvX3NtLmgKQEAgLTAsMCArMSwyOTggQEAKKy8qCisgKiBpb19zbS5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIElPIGRpc3BhdGNoZXIgZm9yIGEgc2hhcmVkIG1lbW9yeSBjaGFubmVsIGRyaXZlci4KKyAqIEFsc28sIGluY2x1ZGVzIG1hY3JvcyB0byBzaW11bGF0ZSBzaG0gdmlhIHBvcnQgaW8gY2FsbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBJT1NNXworI2RlZmluZSBJT1NNXworCisjaW5jbHVkZSA8ZHNwYnJpZGdlL19jaG5sX3NtLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9pb2RlZnMuaD4KKworI2RlZmluZSBJT19JTlBVVCAgICAgICAgICAgIDAKKyNkZWZpbmUgSU9fT1VUUFVUICAgICAgICAgICAxCisjZGVmaW5lIElPX1NFUlZJQ0UgICAgICAgICAgMgorI2RlZmluZSBJT19NQVhTRVJWSUNFICAgICAgIElPX1NFUlZJQ0UKKworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9EVkZTCisvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgT1BQcyB0aGF0IGFyZSBzdXBwb3J0ZWQgKi8KK2V4dGVybiBzMzIgZHNwX21heF9vcHBzOworLyogVGhlIFZkZDEgb3BwIHRhYmxlIGluZm9ybWF0aW9uICovCitleHRlcm4gdTMyIHZkZDFfZHNwX2ZyZXFbNl1bNF07CisjZW5kaWYKKworLyoKKyAqICA9PT09PT09PSBpb19jYW5jZWxfY2hubCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENhbmNlbCBJTyBvbiBhIGdpdmVuIGNoYW5uZWwuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGlvX21ncjogICAgIElPIE1hbmFnZXIuCisgKiAgICAgIGNobmw6ICAgICAgIEluZGV4IG9mIGNoYW5uZWwgdG8gY2FuY2VsIElPIG9uLgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIFZhbGlkIGhpb19tZ3IuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIHZvaWQgaW9fY2FuY2VsX2Nobmwoc3RydWN0IGlvX21nciAqaGlvX21nciwgdTMyIGNobmwpOworCisvKgorICogID09PT09PT09IGlvX2RwYyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERlZmVycmVkIHByb2NlZHVyZSBjYWxsIGZvciBzaGFyZWQgbWVtb3J5IGNoYW5uZWwgZHJpdmVyIElTUi4gIENhcnJpZXMKKyAqICAgICAgb3V0IHRoZSBkaXNwYXRjaCBvZiBJL08uCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgcmVmX2RhdGE6ICAgUG9pbnRlciB0byByZWZlcmVuY2UgZGF0YSByZWdpc3RlcmVkIHZpYSBhIGNhbGwgdG8KKyAqICAgICAgICAgICAgICAgICAgRFBDX0NyZWF0ZSgpLgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIE11c3Qgbm90IGJsb2NrLgorICogICAgICBNdXN0IG5vdCBhY3F1aXJlIHJlc291cmNlcy4KKyAqICAgICAgQWxsIGRhdGEgdG91Y2hlZCBtdXN0IGJlIGxvY2tlZCBpbiBtZW1vcnkgaWYgcnVubmluZyBpbiBrZXJuZWwgbW9kZS4KKyAqICBFbnN1cmVzOgorICogICAgICBOb24tcHJlZW1wdGlibGUgKGJ1dCBpbnRlcnJ1cHRpYmxlKS4KKyAqLworZXh0ZXJuIHZvaWQgaW9fZHBjKHVuc2lnbmVkIGxvbmcgcmVmX2RhdGEpOworCisvKgorICogID09PT09PT09IGlvX21ib3hfbXNnID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgTWFpbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIHNoYXJlZCBtZW1vcnkgQnJpZGdlIGNoYW5uZWwgbWFuYWdlci4KKyAqICAgICAgQ2FsbHMgdGhlIEJyaWRnZSdzIGNobmxzbV9pc3IgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaW50ZXJydXB0IGlzIG91cnMsCisgKiAgICAgIHRoZW4gc2NoZWR1bGVzIGEgRFBDIHRvIGRpc3BhdGNoIEkvTy4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICByZWZfZGF0YTogICBQb2ludGVyIHRvIHRoZSBjaGFubmVsIG1hbmFnZXIgb2JqZWN0IGZvciB0aGlzIGJvYXJkLgorICogICAgICAgICAgICAgICAgICBTZXQgaW4gYW4gaW5pdGlhbCBjYWxsIHRvIElTUl9JbnN0YWxsKCkuCisgKiAgUmV0dXJuczoKKyAqICAgICAgVFJVRSBpZiBpbnRlcnJ1cHQgaGFuZGxlZDsgRkFMU0Ugb3RoZXJ3aXNlLgorICogIFJlcXVpcmVzOgorICogICAgICBNdXN0IGJlIGluIGxvY2tlZCBtZW1vcnkgaWYgZXhlY3V0aW5nIGluIGtlcm5lbCBtb2RlLgorICogICAgICBNdXN0IG9ubHkgY2FsbCBmdW5jdGlvbnMgd2hpY2ggYXJlIGluIGxvY2tlZCBtZW1vcnkgaWYgS2VybmVsIG1vZGUuCisgKiAgICAgIE11c3Qgb25seSBjYWxsIGFzeW5jaHJvbm91cyBzZXJ2aWNlcy4KKyAqICAgICAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgYW5kIEVPSSBmb3IgdGhpcyBpbnRlcnJ1cHQgaGFzIGJlZW4gc2VudC4KKyAqICBFbnN1cmVzOgorICovCit2b2lkIGlvX21ib3hfbXNnKHUzMiBtc2cpOworCisvKgorICogID09PT09PT09IGlvX3JlcXVlc3RfY2hubCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlcXVlc3QgSS9PIGZyb20gdGhlIERTUC4gU2V0cyBmbGFncyBpbiBzaGFyZWQgbWVtb3J5LCB0aGVuIGludGVycnVwdHMKKyAqICAgICAgdGhlIERTUC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoaW9fbWdyOiAgICAgSU8gbWFuYWdlciBoYW5kbGUuCisgKiAgICAgIHBjaG5sOiAgICAgIFB0ciB0byB0aGUgY2hhbm5lbCByZXF1ZXN0aW5nIEkvTy4KKyAqICAgICAgaW9fbW9kZTogICAgICBNb2RlIG9mIGNoYW5uZWw6IHtJT19JTlBVVCB8IElPX09VVFBVVH0uCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgcGNobmwgIT0gTlVMTAorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiB2b2lkIGlvX3JlcXVlc3RfY2hubChzdHJ1Y3QgaW9fbWdyICppb19tYW5hZ2VyLAorCQkJICAgIHN0cnVjdCBjaG5sX29iamVjdCAqcGNobmwsCisJCQkgICAgdTggaW9fbW9kZSwgdTE2ICptYnhfdmFsKTsKKworLyoKKyAqICA9PT09PT09PSBpb3NtX3NjaGVkdWxlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgU2NoZWR1bGUgRFBDIGZvciBJTy4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBwaW9fbWdyOiAgICAgUHRyIHRvIGEgSS9PIG1hbmFnZXIuCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgcGNobmwgIT0gTlVMTAorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiB2b2lkIGlvc21fc2NoZWR1bGUoc3RydWN0IGlvX21nciAqaW9fbWFuYWdlcik7CisKKy8qCisgKiBEU1AtRE1BIElPIGZ1bmN0aW9ucworICovCisKKy8qCisgKiAgPT09PT09PT0gaW9fZGRtYV9pbml0X2NobmxfZGVzYyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEluaXRpYWxpemUgRFNQIERNQSBjaGFubmVsIGRlc2NyaXB0b3IuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGlvX21ncjogICAgICAgICBIYW5kbGUgdG8gYSBJL08gbWFuYWdlci4KKyAqICAgICAgZGRtYV9jaG5sX2lkOiAgICBERE1BIGNoYW5uZWwgaWRlbnRpZmllci4KKyAqICAgICAgbnVtX2Rlc2M6ICAgICAgIE51bWJlciBvZiBidWZmZXIgZGVzY3JpcHRvcnMoZXF1YWxzICMgb2YgSU9SZXFzICYKKyAqICAgICAgICAgICAgICAgICAgICAgIENoaXJwcykKKyAqICAgICAgZHNwOiAgICAgICAgICAgRHNwIGFkZHJlc3M7CisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICBkZG1hX2NobmxfaWQgPCBERE1BX01BWERETUFDSE5MUworICogICAgIG51bV9kZXNjID4gMAorICogICAgIHBWYSAhPSBOVUxMCisgKiAgICAgcERzcFBhICE9IE5VTEwKKyAqCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIHZvaWQgaW9fZGRtYV9pbml0X2NobmxfZGVzYyhzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyLCB1MzIgZGRtYV9jaG5sX2lkLAorCQkJCSAgIHUzMiBudW1fZGVzYywgdm9pZCAqZHNwKTsKKworLyoKKyAqICA9PT09PT09PSBpb19kZG1hX2NsZWFyX2NobmxfZGVzYyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENsZWFyIERTUCBETUEgY2hhbm5lbCBkZXNjcmlwdG9yLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhpb19tZ3I6ICAgICAgICAgSGFuZGxlIHRvIGEgSS9PIG1hbmFnZXIuCisgKiAgICAgIGRkbWFfY2hubF9pZDogICAgRERNQSBjaGFubmVsIGlkZW50aWZpZXIuCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICBkZG1hX2NobmxfaWQgPCBERE1BX01BWERETUFDSE5MUworICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiB2b2lkIGlvX2RkbWFfY2xlYXJfY2hubF9kZXNjKHN0cnVjdCBpb19tZ3IgKmhpb19tZ3IsIHUzMiBkZG1hX2NobmxfaWQpOworCisvKgorICogID09PT09PT09IGlvX2RkbWFfcmVxdWVzdF9jaG5sID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmVxdWVzdCBjaGFubmVsIERTUC1ETUEgZnJvbSB0aGUgRFNQLiBTZXRzIHVwIFNNIGRlc2NyaXB0b3JzIGFuZAorICogICAgICBjb250cm9sIGZpZWxkcyBpbiBzaGFyZWQgbWVtb3J5LgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhpb19tZ3I6ICAgICBIYW5kbGUgdG8gYSBJL08gbWFuYWdlci4KKyAqICAgICAgcGNobmw6ICAgICAgUHRyIHRvIGNoYW5uZWwgb2JqZWN0CisgKiAgICAgIGNobmxfcGFja2V0X29iajogICAgIFB0ciB0byBjaGFubmVsIGkvbyByZXF1ZXN0IHBhY2tldC4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBwY2hubCAhPSBOVUxMCisgKiAgICAgIHBjaG5sLT5jaW9fcmVxcyA+IDAKKyAqICAgICAgY2hubF9wYWNrZXRfb2JqICE9IE5VTEwKKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gdm9pZCBpb19kZG1hX3JlcXVlc3RfY2hubChzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyLAorCQkJCSBzdHJ1Y3QgY2hubF9vYmplY3QgKnBjaG5sLAorCQkJCSBzdHJ1Y3QgY2hubF9pcnAgKmNobmxfcGFja2V0X29iaiwKKwkJCQkgdTE2ICptYnhfdmFsKTsKKworLyoKKyAqIFplcm8tY29weSBJTyBmdW5jdGlvbnMKKyAqLworCisvKgorICogID09PT09PT09IGlvX2RkemNfaW5pdF9jaG5sX2Rlc2MgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplIFpDUFkgY2hhbm5lbCBkZXNjcmlwdG9yLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhpb19tZ3I6ICAgICBIYW5kbGUgdG8gYSBJL08gbWFuYWdlci4KKyAqICAgICAgemlkOiAgICAgICAgemVyby1jb3B5IGNoYW5uZWwgaWRlbnRpZmllci4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgIGRkbWFfY2hubF9pZCA8IERETUFfTUFYWkNQWUNITkxTCisgKiAgICAgaGlvX21nciAhPSBOdWxsCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIHZvaWQgaW9fZGR6Y19pbml0X2NobmxfZGVzYyhzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyLCB1MzIgemlkKTsKKworLyoKKyAqICA9PT09PT09PSBpb19kZHpjX2NsZWFyX2NobmxfZGVzYyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENsZWFyIERTUCBaQyBjaGFubmVsIGRlc2NyaXB0b3IuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGlvX21ncjogICAgICAgICBIYW5kbGUgdG8gYSBJL08gbWFuYWdlci4KKyAqICAgICAgY2hfaWQ6ICAgICAgICBaQyBjaGFubmVsIGlkZW50aWZpZXIuCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgaGlvX21nciBpcyB2YWxpZAorICogICAgICBjaF9pZCA8IERETUFfTUFYWkNQWUNITkxTCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIHZvaWQgaW9fZGR6Y19jbGVhcl9jaG5sX2Rlc2Moc3RydWN0IGlvX21nciAqaGlvX21nciwgdTMyIGNoX2lkKTsKKworLyoKKyAqICA9PT09PT09PSBpb19kZHpjX3JlcXVlc3RfY2hubCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlcXVlc3QgemVyby1jb3B5IGNoYW5uZWwgdHJhbnNmZXIuIFNldHMgdXAgU00gZGVzY3JpcHRvcnMgYW5kCisgKiAgICAgIGNvbnRyb2wgZmllbGRzIGluIHNoYXJlZCBtZW1vcnkuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGlvX21ncjogICAgICAgICBIYW5kbGUgdG8gYSBJL08gbWFuYWdlci4KKyAqICAgICAgcGNobmw6ICAgICAgICAgIFB0ciB0byBjaGFubmVsIG9iamVjdAorICogICAgICBjaG5sX3BhY2tldF9vYmo6ICAgICAgICAgUHRyIHRvIGNoYW5uZWwgaS9vIHJlcXVlc3QgcGFja2V0LgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIHBjaG5sICE9IE5VTEwKKyAqICAgICAgcGNobmwtPmNpb19yZXFzID4gMAorICogICAgICBjaG5sX3BhY2tldF9vYmogIT0gTlVMTAorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiB2b2lkIGlvX2RkemNfcmVxdWVzdF9jaG5sKHN0cnVjdCBpb19tZ3IgKmhpb19tZ3IsCisJCQkJIHN0cnVjdCBjaG5sX29iamVjdCAqcGNobmwsCisJCQkJIHN0cnVjdCBjaG5sX2lycCAqY2hubF9wYWNrZXRfb2JqLAorCQkJCSB1MTYgKm1ieF92YWwpOworCisvKgorICogID09PT09PT09IGlvX3NoX21zZXR0aW5nID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgU2V0cyB0aGUgc2hhcmVkIG1lbW9yeSBzZXR0aW5nCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGlvX21ncjogICAgICAgICBIYW5kbGUgdG8gYSBJL08gbWFuYWdlci4KKyAqICAgICAgZGVzYzogICAgICAgICAgICAgU2hhcmVkIG1lbW9yeSB0eXBlCisgKiAgICAgIHBhcmdzOiAgICAgICAgICBQdHIgdG8gc2htIHNldHRpbmcKKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBoaW9fbWdyICE9IE5VTEwKKyAqICAgICAgcGFyZ3MgIT0gTlVMTAorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgaW9fc2hfbXNldHRpbmcoc3RydWN0IGlvX21nciAqaGlvX21nciwgdTggZGVzYywgdm9pZCAqcGFyZ3MpOworCisvKgorICogIE1pc2MgZnVuY3Rpb25zIGZvciB0aGUgQ0hOTF9JTyBzaGFyZWQgbWVtb3J5IGxpYnJhcnk6CisgKi8KKworLyogTWF4aW11bSBjaGFubmVsIGJ1ZnNpemUgdGhhdCBjYW4gYmUgdXNlZC4gKi8KK2V4dGVybiB1MzIgaW9fYnVmX3NpemUoc3RydWN0IGlvX21nciAqaGlvX21ncik7CisKK2V4dGVybiB1MzIgaW9fcmVhZF92YWx1ZShzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCwgdTMyIGRzcF9hZGRyKTsKKworZXh0ZXJuIHZvaWQgaW9fd3JpdGVfdmFsdWUoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQsCisJCQkgICB1MzIgZHNwX2FkZHIsIHUzMiB2YWx1ZSk7CisKK2V4dGVybiB1MzIgaW9fcmVhZF92YWx1ZV9sb25nKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAorCQkJICAgICAgdTMyIGRzcF9hZGRyKTsKKworZXh0ZXJuIHZvaWQgaW9fd3JpdGVfdmFsdWVfbG9uZyhzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCwKKwkJCQl1MzIgZHNwX2FkZHIsIHUzMiB2YWx1ZSk7CisKK2V4dGVybiB2b2lkIGlvX29yX3NldF92YWx1ZShzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCwKKwkJCSAgICB1MzIgZHNwX2FkZHIsIHUzMiB2YWx1ZSk7CisKK2V4dGVybiB2b2lkIGlvX2FuZF9zZXRfdmFsdWUoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQsCisJCQkgICAgIHUzMiBkc3BfYWRkciwgdTMyIHZhbHVlKTsKKworZXh0ZXJuIHZvaWQgaW9fc21faW5pdCh2b2lkKTsKKworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9CQUNLVFJBQ0UKKy8qCisgKiAgPT09PT09PT1wcmludF9kc3BfdHJhY2VfYnVmZmVyID09PT09PT09CisgKiAgICAgIFByaW50IERTUCB0cmFjZWJ1ZmZlci4KKyAqLworZXh0ZXJuIGludCBwcmludF9kc3BfdHJhY2VfYnVmZmVyKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQKKwkJCQkJICpoYnJpZGdlX2NvbnRleHQpOworCitpbnQgZHVtcF9kc3Bfc3RhY2soc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqYnJpZGdlX2NvbnRleHQpOworCit2b2lkIGR1bXBfZGxfbW9kdWxlcyhzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpicmlkZ2VfY29udGV4dCk7CisKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1RJRFNQQlJJREdFX0JBQ0tUUkFDRSkgfHwgZGVmaW5lZChDT05GSUdfVElEU1BCUklER0VfREVCVUcpCit2b2lkIHByaW50X2RzcF9kZWJ1Z190cmFjZShzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyKTsKKyNlbmRpZgorCisjZW5kaWYgLyogSU9TTV8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9pb2RlZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9pb2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmQxMGEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2lvZGVmcy5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBpb2RlZnMuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBTeXN0ZW0td2lkZSBjaGFubmVsIG9iamVjdHMgYW5kIGNvbnN0YW50cy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIElPREVGU18KKyNkZWZpbmUgSU9ERUZTXworCisjZGVmaW5lIElPX01BWElSUSAgIDB4ZmYJLyogQXJiaXRyYXJpbHkgbGFyZ2UgbnVtYmVyLiAqLworCisvKiBJTyBPYmplY3RzOiAqLworc3RydWN0IGlvX21ncjsKKworLyogSU8gbWFuYWdlciBhdHRyaWJ1dGVzOiAqLworc3RydWN0IGlvX2F0dHJzIHsKKwl1OCBiaXJxOwkJLyogQ2hhbm5lbCdzIEkvTyBJUlEgbnVtYmVyLiAqLworCWJvb2wgaXJxX3NoYXJlZDsJLyogVFJVRSBpZiB0aGUgSVJRIGlzIHNoYXJlYWJsZS4gKi8KKwl1MzIgd29yZF9zaXplOwkJLyogRFNQIFdvcmQgc2l6ZS4gKi8KKwl1MzIgc2htX2Jhc2U7CQkvKiBQaHlzaWNhbCBiYXNlIGFkZHJlc3Mgb2Ygc2hhcmVkIG1lbW9yeS4gKi8KKwl1MzIgdXNtX2xlbmd0aDsJCS8qIFNpemUgKGluIGJ5dGVzKSBvZiBzaGFyZWQgbWVtb3J5LiAqLworfTsKKworI2VuZGlmIC8qIElPREVGU18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9sZHIuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9sZHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTAyNjljCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2xkci5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBsZHIuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBQcm92aWRlIG1vZHVsZSBsb2FkaW5nIHNlcnZpY2VzIGFuZCBzeW1ib2wgZXhwb3J0IHNlcnZpY2VzLgorICoKKyAqIE5vdGVzOgorICogICBUaGlzIHNlcnZpY2UgaXMgbWVhbnQgdG8gYmUgdXNlZCBieSBtb2R1bGVzIG9mIHRoZSBEU1AvQklPUyBCcmlkZ2UKKyAqICAgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgTERSXworI2RlZmluZSBMRFJfCisKKy8qIExvYWRlciBvYmplY3RzOiAqLworc3RydWN0IGxkcl9tb2R1bGU7CisKKyNlbmRpZiAvKiBMRFJfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvbGlzdC5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2xpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODM3YjYxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2xpc3QuaApAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIGxpc3QuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBEZWNsYXJhdGlvbnMgb2YgbGlzdCBtYW5hZ2VtZW50IGNvbnRyb2wgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMKKyAqIG9mIGlubGluZSBsaXN0IG1hbmFnZW1lbnQgZnVuY3Rpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIExJU1RfCisjZGVmaW5lIExJU1RfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworI2RlZmluZSBMU1RfSVNfRU1QVFkobCkgICAgICBsaXN0X2VtcHR5KCYobCktPmhlYWQpCisKK3N0cnVjdCBsc3RfbGlzdCB7CisJc3RydWN0IGxpc3RfaGVhZCBoZWFkOworfTsKKworLyoKKyAqICA9PT09PT09PSBsc3RfZmlyc3QgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgbGlzdCwgb3IgTlVMTCBpZiB0aGUgbGlzdAorICogICAgICBpcyBlbXB0eS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBsc3Q6ICBQb2ludGVyIHRvIGxpc3QgY29udHJvbCBzdHJ1Y3R1cmUuCisgKiAgUmV0dXJuczoKKyAqICAgICAgUG9pbnRlciB0byBmaXJzdCBsaXN0IGVsZW1lbnQsIG9yIE5VTEwuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIC0gTFNUIGluaXRpYWxpemVkLgorICogICAgICAtIGxzdCAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfaGVhZCAqbHN0X2ZpcnN0KHN0cnVjdCBsc3RfbGlzdCAqbHN0KQoreworCWlmIChsc3QgJiYgIWxpc3RfZW1wdHkoJmxzdC0+aGVhZCkpCisJCXJldHVybiBsc3QtPmhlYWQubmV4dDsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqICA9PT09PT09PSBsc3RfZ2V0X2hlYWQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBQb3BzIHRoZSBoZWFkIG9mZiB0aGUgbGlzdCBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gaXQuCisgKiAgRGV0YWlsczoKKyAqICAgICAgSWYgdGhlIGxpc3QgaXMgZW1wdHksIHJldHVybnMgTlVMTC4KKyAqICAgICAgRWxzZSwgcmVtb3ZlcyB0aGUgZWxlbWVudCBhdCB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgbWFraW5nIHRoZSBuZXh0CisgKiAgICAgIGVsZW1lbnQgdGhlIGhlYWQgb2YgdGhlIGxpc3QuCisgKiAgICAgIFRoZSBoZWFkIGlzIHJlbW92ZWQgYnkgbWFraW5nIHRoZSB0YWlsIGVsZW1lbnQgb2YgdGhlIGxpc3QgcG9pbnQgaXRzCisgKiAgICAgICJuZXh0IiBwb2ludGVyIGF0IHRoZSBuZXh0IGVsZW1lbnQgYWZ0ZXIgdGhlIGhlYWQsIGFuZCBieSBtYWtpbmcgdGhlCisgKiAgICAgICJwcmV2IiBwb2ludGVyIG9mIHRoZSBuZXh0IGVsZW1lbnQgYWZ0ZXIgdGhlIGhlYWQgcG9pbnQgYXQgdGhlIHRhaWwKKyAqICAgICAgZWxlbWVudC4gIFNvIHRoZSBuZXh0IGVsZW1lbnQgYWZ0ZXIgdGhlIGhlYWQgYmVjb21lcyB0aGUgbmV3IGhlYWQgb2YKKyAqICAgICAgdGhlIGxpc3QuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbHN0OiAgICBQb2ludGVyIHRvIGxpc3QgY29udHJvbCBzdHJ1Y3R1cmUgb2YgbGlzdCB3aG9zZSBoZWFkCisgKiAgICAgICAgICAgICAgZWxlbWVudCBpcyB0byBiZSByZW1vdmVkCisgKiAgUmV0dXJuczoKKyAqICAgICAgUG9pbnRlciB0byBlbGVtZW50IHRoYXQgd2FzIGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0IChzdWNjZXNzKQorICogICAgICBOVUxMICAgICAgICAgIE5vIGVsZW1lbnRzIGluIGxpc3QKKyAqICBSZXF1aXJlczoKKyAqICAgICAgLSBMU1QgaW5pdGlhbGl6ZWQuCisgKiAgICAgIC0gbHN0ICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqICBOb3RlczoKKyAqICAgICAgQmVjYXVzZSB0aGUgdGFpbCBvZiB0aGUgbGlzdCBwb2ludHMgZm9yd2FyZCAoaXRzICJuZXh0IiBwb2ludGVyKSB0bworICogICAgICB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgYW5kIHRoZSBoZWFkIG9mIHRoZSBsaXN0IHBvaW50cyBiYWNrd2FyZCAoaXRzCisgKiAgICAgICJwcmV2IiBwb2ludGVyKSB0byB0aGUgdGFpbCBvZiB0aGUgbGlzdCwgdGhpcyBsaXN0IGlzIGNpcmN1bGFyLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsaXN0X2hlYWQgKmxzdF9nZXRfaGVhZChzdHJ1Y3QgbHN0X2xpc3QgKmxzdCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtX2xpc3Q7CisKKwlpZiAoIWxzdCB8fCBsaXN0X2VtcHR5KCZsc3QtPmhlYWQpKQorCQlyZXR1cm4gTlVMTDsKKworCWVsZW1fbGlzdCA9IGxzdC0+aGVhZC5uZXh0OworCWxzdC0+aGVhZC5uZXh0ID0gZWxlbV9saXN0LT5uZXh0OworCWVsZW1fbGlzdC0+bmV4dC0+cHJldiA9ICZsc3QtPmhlYWQ7CisKKwlyZXR1cm4gZWxlbV9saXN0OworfQorCisvKgorICogID09PT09PT09IGxzdF9pbml0X2VsZW0gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplcyBhIGxpc3QgZWxlbWVudCB0byBkZWZhdWx0IChjbGVhcmVkKSB2YWx1ZXMKKyAqICBEZXRhaWxzOgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGVsZW1fbGlzdDogIFBvaW50ZXIgdG8gbGlzdCBlbGVtZW50IHRvIGJlIHJlc2V0CisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgTFNUIGluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgTm90ZXM6CisgKiAgICAgIFRoaXMgZnVuY3Rpb24gbXVzdCBub3QgYmUgY2FsbGVkIHRvICJyZXNldCIgYW4gZWxlbWVudCBpbiB0aGUgbWlkZGxlCisgKiAgICAgIG9mIGEgbGlzdCBjaGFpbiAtLSB0aGF0IHdvdWxkIGJyZWFrIHRoZSBjaGFpbi4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsc3RfaW5pdF9lbGVtKHN0cnVjdCBsaXN0X2hlYWQgKmVsZW1fbGlzdCkKK3sKKwlpZiAoZWxlbV9saXN0KSB7CisJCWVsZW1fbGlzdC0+bmV4dCA9IE5VTEw7CisJCWVsZW1fbGlzdC0+cHJldiA9IE5VTEw7CisJfQorfQorCisvKgorICogID09PT09PT09IGxzdF9pbnNlcnRfYmVmb3JlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICBJbnNlcnQgdGhlIGVsZW1lbnQgYmVmb3JlIHRoZSBleGlzdGluZyBlbGVtZW50LgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGxzdDogICAgICAgICAgICBQb2ludGVyIHRvIGxpc3QgY29udHJvbCBzdHJ1Y3R1cmUuCisgKiAgICAgIGVsZW1fbGlzdDogICAgICAgICAgUG9pbnRlciB0byBlbGVtZW50IGluIGxpc3QgdG8gaW5zZXJ0LgorICogICAgICBlbGVtX2V4aXN0aW5nOiAgUG9pbnRlciB0byBleGlzdGluZyBsaXN0IGVsZW1lbnQuCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgLSBMU1QgaW5pdGlhbGl6ZWQuCisgKiAgICAgIC0gbHN0ICE9IE5VTEwuCisgKiAgICAgIC0gZWxlbV9saXN0ICE9IE5VTEwuCisgKiAgICAgIC0gZWxlbV9leGlzdGluZyAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsc3RfaW5zZXJ0X2JlZm9yZShzdHJ1Y3QgbHN0X2xpc3QgKmxzdCwKKwkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmVsZW1fbGlzdCwKKwkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmVsZW1fZXhpc3RpbmcpCit7CisJaWYgKGxzdCAmJiBlbGVtX2xpc3QgJiYgZWxlbV9leGlzdGluZykKKwkJbGlzdF9hZGRfdGFpbChlbGVtX2xpc3QsIGVsZW1fZXhpc3RpbmcpOworfQorCisvKgorICogID09PT09PT09IGxzdF9uZXh0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG5leHQgZWxlbWVudCBvZiB0aGUgbGlzdCwgb3IgTlVMTCBpZiB0aGUgbmV4dAorICogICAgICBlbGVtZW50IGlzIHRoZSBoZWFkIG9mIHRoZSBsaXN0IG9yIHRoZSBsaXN0IGlzIGVtcHR5LgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGxzdDogICAgICAgIFBvaW50ZXIgdG8gbGlzdCBjb250cm9sIHN0cnVjdHVyZS4KKyAqICAgICAgY3VyX2VsZW06ICAgUG9pbnRlciB0byBlbGVtZW50IGluIGxpc3QgdG8gcmVtb3ZlLgorICogIFJldHVybnM6CisgKiAgICAgIFBvaW50ZXIgdG8gbGlzdCBlbGVtZW50LCBvciBOVUxMLgorICogIFJlcXVpcmVzOgorICogICAgICAtIExTVCBpbml0aWFsaXplZC4KKyAqICAgICAgLSBsc3QgIT0gTlVMTC4KKyAqICAgICAgLSBjdXJfZWxlbSAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfaGVhZCAqbHN0X25leHQoc3RydWN0IGxzdF9saXN0ICpsc3QsCisJCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpjdXJfZWxlbSkKK3sKKwlpZiAobHN0ICYmICFsaXN0X2VtcHR5KCZsc3QtPmhlYWQpICYmIGN1cl9lbGVtICYmCisJICAgIChjdXJfZWxlbS0+bmV4dCAhPSAmbHN0LT5oZWFkKSkKKwkJcmV0dXJuIGN1cl9lbGVtLT5uZXh0OworCXJldHVybiBOVUxMOworfQorCisvKgorICogID09PT09PT09IGxzdF9wdXRfdGFpbCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEFkZHMgdGhlIHNwZWNpZmllZCBlbGVtZW50IHRvIHRoZSB0YWlsIG9mIHRoZSBsaXN0CisgKiAgRGV0YWlsczoKKyAqICAgICAgU2V0cyBuZXcgZWxlbWVudCdzICJwcmV2IiBwb2ludGVyIHRvIHRoZSBhZGRyZXNzIHByZXZpb3VzbHkgaGVsZCBieQorICogICAgICB0aGUgaGVhZCBlbGVtZW50J3MgcHJldiBwb2ludGVyLiAgVGhpcyBpcyB0aGUgcHJldmlvdXMgdGFpbCBtZW1iZXIgb2YKKyAqICAgICAgdGhlIGxpc3QuCisgKiAgICAgIFNldHMgdGhlIG5ldyBoZWFkJ3MgcHJldiBwb2ludGVyIHRvIHRoZSBhZGRyZXNzIG9mIHRoZSBlbGVtZW50LgorICogICAgICBTZXRzIG5leHQgcG9pbnRlciBvZiB0aGUgcHJldmlvdXMgdGFpbCBtZW1iZXIgb2YgdGhlIGxpc3QgdG8gcG9pbnQgdG8KKyAqICAgICAgdGhlIG5ldyBlbGVtZW50IChyYXRoZXIgdGhhbiB0aGUgaGVhZCwgd2hpY2ggaXQgaGFkIGJlZW4gcG9pbnRpbmcgYXQpLgorICogICAgICBTZXRzIG5ldyBlbGVtZW50J3MgbmV4dCBwb2ludGVyIHRvIHRoZSBhZGRyZXNzIG9mIHRoZSBoZWFkIGVsZW1lbnQuCisgKiAgICAgIFNldHMgaGVhZCdzIHByZXYgcG9pbnRlciB0byB0aGUgYWRkcmVzcyBvZiB0aGUgbmV3IGVsZW1lbnQuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbHN0OiAgICBQb2ludGVyIHRvIGxpc3QgY29udHJvbCBzdHJ1Y3R1cmUgdG8gd2hpY2ggKmVsZW1fbGlzdCB3aWxsIGJlCisgKiAgICAgICAgICAgICAgYWRkZWQKKyAqICAgICAgZWxlbV9saXN0OiAgUG9pbnRlciB0byBsaXN0IGVsZW1lbnQgdG8gYmUgYWRkZWQKKyAqICBSZXR1cm5zOgorICogICAgICBWb2lkCisgKiAgUmVxdWlyZXM6CisgKiAgICAgICplbGVtX2xpc3QgYW5kICpsc3QgbXVzdCBib3RoIGV4aXN0LgorICogICAgICBMU1QgaW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICBOb3RlczoKKyAqICAgICAgQmVjYXVzZSB0aGUgdGFpbCBpcyBhbHdheXMgImp1c3QgYmVmb3JlIiB0aGUgaGVhZCBvZiB0aGUgbGlzdCAodGhlCisgKiAgICAgIHRhaWwncyAibmV4dCIgcG9pbnRlciBwb2ludHMgYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QsIGFuZCB0aGUgaGVhZCdzCisgKiAgICAgICJwcmV2IiBwb2ludGVyIHBvaW50cyBhdCB0aGUgdGFpbCBvZiB0aGUgbGlzdCksIHRoZSBsaXN0IGlzIGNpcmN1bGFyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbHN0X3B1dF90YWlsKHN0cnVjdCBsc3RfbGlzdCAqbHN0LAorCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1fbGlzdCkKK3sKKwlpZiAobHN0ICYmIGVsZW1fbGlzdCkKKwkJbGlzdF9hZGRfdGFpbChlbGVtX2xpc3QsICZsc3QtPmhlYWQpOworfQorCisvKgorICogID09PT09PT09IGxzdF9yZW1vdmVfZWxlbSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlbW92ZXMgKHVubGlua3MpIHRoZSBnaXZlbiBlbGVtZW50IGZyb20gdGhlIGxpc3QsIGlmIHRoZSBsaXN0IGlzIG5vdAorICogICAgICBlbXB0eS4gIERvZXMgbm90IGZyZWUgdGhlIGxpc3QgZWxlbWVudC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBsc3Q6ICAgICAgICBQb2ludGVyIHRvIGxpc3QgY29udHJvbCBzdHJ1Y3R1cmUuCisgKiAgICAgIGN1cl9lbGVtOiAgIFBvaW50ZXIgdG8gZWxlbWVudCBpbiBsaXN0IHRvIHJlbW92ZS4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICAtIExTVCBpbml0aWFsaXplZC4KKyAqICAgICAgLSBsc3QgIT0gTlVMTC4KKyAqICAgICAgLSBjdXJfZWxlbSAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsc3RfcmVtb3ZlX2VsZW0oc3RydWN0IGxzdF9saXN0ICpsc3QsCisJCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqY3VyX2VsZW0pCit7CisJaWYgKGxzdCAmJiAhbGlzdF9lbXB0eSgmbHN0LT5oZWFkKSAmJiBjdXJfZWxlbSkKKwkJbGlzdF9kZWxfaW5pdChjdXJfZWxlbSk7Cit9CisKKyNlbmRpZiAvKiBMSVNUXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL21ieF9zaC5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL21ieF9zaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMTY1Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvbWJ4X3NoLmgKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBtYnhfc2guaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBEZWZpbml0aW9ucyBmb3Igc2hhcmVkIG1haWxib3ggY21kL2RhdGEgdmFsdWVzLih1c2VkIG9uIGJvdGgKKyAqIHRoZSBHUFAgYW5kIERTUCBzaWRlcykuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKy8qCisgKiAgQnJpZGdlIHVzYWdlIG9mIE9NQVAgbWFpbGJveCAxIGlzIGRldGVybWluZWQgYnkgdGhlICJjbGFzcyIgb2YgdGhlCisgKiAgbWFpbGJveCBpbnRlcnJ1cHQncyBjbWQgdmFsdWUgcmVjZWl2ZWQuIFRoZSBjbGFzcyB2YWx1ZSBhcmUgZGVmaW5lZAorICogIGFzIGEgYml0ICgxMCB0aHJ1IDE1KSBiZWluZyBzZXQuCisgKgorICogIE5vdGU6IE9ubHkgMTYgYml0cyBvZiBlYWNoICBpcyB1c2VkLiBPdGhlciAxNiBiaXQgZGF0YSByZWcgYXZhaWxhYmxlLgorICoKKyAqICAgMTYgYml0IE1ieCBiaXQgZGVmbnM6CisgKgorICogQSkuIEV4Y2VwdGlvbi9FcnJvciBoYW5kbGluZyAoTW9kdWxlIERFSCkgOiBjbGFzcyA9IDAuCisgKgorICogICAgMTUgICAgICAgICAxMCAgICAgICAgICAgICAgICAgIDAKKyAqICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIHwwfDB8MHwwfDB8MHx4fHh8eHx4fHh8eHx4fHh8eHx4fAorICogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgfCAgKGNsYXNzKSAgfCAobW9kdWxlIHNwZWNpZmljKSB8CisgKgorICoKKyAqIEI6IERTUC1ETUEgbGluayBkcml2ZXIgY2hhbm5lbHMgKERETUEpIDogY2xhc3MgPSAxLgorICoKKyAqICAgIDE1ICAgICAgICAgMTAgICAgICAgICAgICAgICAgICAwCisgKiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICB8MHwwfDB8MHwwfDF8YnxifGJ8YnxifGN8Y3xjfGN8Y3wKKyAqICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIHwgIChjbGFzcykgIHwgKG1vZHVsZSBzcGVjaWZpYykgfAorICoKKyAqICAgd2hlcmUgYiAtPiBidWZmZXIgaW5kZXggICgzMiBERE1BIGJ1ZmZlcnMvY2hubCBtYXgpCisgKiAgICAgICAgIGMgLT4gY2hhbm5lbCBJZCAgICAoMzIgRERNQSBjaG5scyBtYXgpCisgKgorICoKKyAqIEM6IFByb2MtY29weSBsaW5rIGRyaXZlciBjaGFubmVscyAoUENQWSkgOiBjbGFzcyA9IDIuCisgKgorICogICAgMTUgICAgICAgICAxMCAgICAgICAgICAgICAgICAgIDAKKyAqICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIHwwfDB8MHwwfDF8MHx4fHh8eHx4fHh8eHx4fHh8eHx4fAorICogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgfCAgKGNsYXNzKSAgfCAobW9kdWxlIHNwZWNpZmljKSB8CisgKgorICoKKyAqIEQ6IFplcm8tY29weSBsaW5rIGRyaXZlciBjaGFubmVscyAoRERaQykgOiBjbGFzcyA9IDQuCisgKgorICogICAgMTUgICAgICAgICAxMCAgICAgICAgICAgICAgICAgIDAKKyAqICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIHwwfDB8MHwxfDB8MHx4fHh8eHx4fHh8Y3xjfGN8Y3xjfAorICogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgfCAgKGNsYXNzKSAgfCAobW9kdWxlIHNwZWNpZmljKSB8CisgKgorICogICB3aGVyZSB4IC0+IG5vdCB1c2VkCisgKiAgICAgICAgIGMgLT4gY2hhbm5lbCBJZCAgICAoMzIgWkNQWSBjaG5scyBtYXgpCisgKgorICoKKyAqIEU6IFBvd2VyIG1hbmFnZW1lbnQgOiBjbGFzcyA9IDguCisgKgorICogICAgMTUgICAgICAgICAxMCAgICAgICAgICAgICAgICAgIDAKKyAqICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIHwwfDB8MXwwfDB8MHx4fHh8eHx4fHh8Y3xjfGN8Y3xjfAorCisgKiAJMDAxMCAwMHh4IHh4eGMgY2NjYworICoJMDAxMCAwMG5uIHBwcHAgcXFxcQorICoJbm46CisgKgkwMCA9IHJlc2VydmVkCisgKgkwMSA9IHB3ciBzdGF0ZSBjaGFuZ2UKKyAqCTEwID0gb3BwIHByZS1jaGFuZ2UKKyAqCTExID0gb3BwIHBvc3QtY2hhbmdlCisgKgorICoJaWYgbm4gPSBwd3Igc3RhdGUgY2hhbmdlOgorICoJcHBwcCA9IGRvbid0IGNhcmUKKyAqCXFxcXE6CisgKgkwMDEwID0gaGliZXJuYXRlCisgKgkwMDEwIDAwMDEgMDAwMCAwMDEwCisgKgkwMTEwID0gcmV0ZW50aW9uCisgKgkwMDEwIDAwMDEgMDAwMCAwMTEwCisgKglvdGhlcnMgcmVzZXJ2ZWQKKyAqCisgKglpZiBubiA9IG9wcCBwcmUtY2hhbmdlOgorICoJcHBwcCA9IGN1cnJlbnQgb3BwCisgKglxcXFxID0gbmV4dCBvcHAKKyAqCisgKglpZiBubiA9IG9wcCBwb3N0LWNoYW5nZToKKyAqCXBwcHAgPSBwcmV2IG9wcAorICoJcXFxcSA9IGN1cnJlbnQgb3BwCisgKgorICogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgfCAgKGNsYXNzKSAgfCAobW9kdWxlIHNwZWNpZmljKSB8CisgKgorICogICB3aGVyZSB4IC0+IG5vdCB1c2VkCisgKiAgICAgICAgIGMgLT4gUG93ZXIgbWFuYWdlbWVudCBjb21tYW5kCisgKgorICovCisKKyNpZm5kZWYgX01CWF9TSF9ICisjZGVmaW5lIF9NQlhfU0hfSAorCisjZGVmaW5lIE1CWF9DTEFTU19NU0sgICAgICAweEZDMDAJLyogQ2xhc3MgYml0cyBhcmUgMTAgdGhydSAxNSAqLworI2RlZmluZSBNQlhfVkFMVUVfTVNLICAgICAgMHgwM0ZGCS8qIFZhbHVlIGlzIDAgdGhydSA5ICovCisKKyNkZWZpbmUgTUJYX0RFSF9DTEFTUyAgICAgIDB4MDAwMAkvKiBERUggb3ducyBNYnggSU5UUiAqLworI2RlZmluZSBNQlhfRERNQV9DTEFTUyAgICAgMHgwNDAwCS8qIERTUC1ETUEgbGluayBkcnZyIGNobmxzIG93bnMgSU5UUiAqLworI2RlZmluZSBNQlhfUENQWV9DTEFTUyAgICAgMHgwODAwCS8qIFBST0MtQ09QWSAgIiAqLworI2RlZmluZSBNQlhfWkNQWV9DTEFTUyAgICAgMHgxMDAwCS8qIFpFUk8tQ09QWSAgIiAqLworI2RlZmluZSBNQlhfUE1fQ0xBU1MgICAgICAgMHgyMDAwCS8qIFBvd2VyIE1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgTUJYX0RCR19DTEFTUyAgICAgIDB4NDAwMAkvKiBGb3IgZGVidWdnaW5nIHB1cnBvc2UgKi8KKworLyoKKyAqIEV4Y2VwdGlvbiBIYW5kbGVyIGNvZGVzCisgKiBNYWdpYyBjb2RlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIERTUCBzaWduYWxlZCBleGNlcHRpb24uCisgKi8KKyNkZWZpbmUgTUJYX0RFSF9CQVNFICAgICAgICAweDAKKyNkZWZpbmUgTUJYX0RFSF9VU0VSU19CQVNFICAweDEwMAkvKiAyNTYgKi8KKyNkZWZpbmUgTUJYX0RFSF9MSU1JVCAgICAgICAweDNGRgkvKiAxMDIzICovCisjZGVmaW5lIE1CWF9ERUhfUkVTRVQgICAgICAgMHgxMDEJLyogRFNQIFJFU0VUIChERUgpICovCisjZGVmaW5lIE1CWF9ERUhfRU1NVSAgICAgICAgMFgxMDMJLypEU1AgTU1VIEZBVUxUIFJFQ09WRVJZICovCisKKy8qCisgKiAgTGluayBkcml2ZXIgY29tbWFuZC9zdGF0dXMgY29kZXMuCisgKi8KKy8qIERTUC1ETUEgKi8KKyNkZWZpbmUgTUJYX0RETUFfTlVNQ0hOTEJJVFMgNQkvKiAjIGNobmwgSWQ6ICMgYml0cyBhdmFpbGFibGUgKi8KKyNkZWZpbmUgTUJYX0RETUFfQ0hOTFNISUZUICAgMAkvKiAjIG9mIGJpdHMgdG8gc2hpZnQgKi8KKyNkZWZpbmUgTUJYX0RETUFfQ0hOTE1TSyAgICAgMHgwMUYJLyogYml0cyAwIHRocnUgNCAqLworCisjZGVmaW5lIE1CWF9ERE1BX05VTUJVRkJJVFMgIDUJLyogYnVmZmVyIGluZGV4OiAjIG9mIGJpdHMgYXZhaWwgKi8KKyNkZWZpbmUgTUJYX0RETUFfQlVGU0hJRlQgICAgKE1CWF9ERE1BX05VTUNITkxCSVRTICsgTUJYX0RETUFfQ0hOTFNISUZUKQorI2RlZmluZSBNQlhfRERNQV9CVUZNU0sgICAgICAweDNFMAkvKiBiaXRzIDUgdGhydSA5ICovCisKKy8qIFplcm8tQ29weSAqLworI2RlZmluZSBNQlhfWkNQWV9OVU1DSE5MQklUUyA1CS8qICMgY2hubCBJZDogIyBiaXRzIGF2YWlsYWJsZSAqLworI2RlZmluZSBNQlhfWkNQWV9DSE5MU0hJRlQgICAwCS8qICMgb2YgYml0cyB0byBzaGlmdCAqLworI2RlZmluZSBNQlhfWkNQWV9DSE5MTVNLICAgICAweDAxRgkvKiBiaXRzIDAgdGhydSA0ICovCisKKy8qICBQb3dlciBNYW5hZ2VtZW50IENvbW1hbmRzICovCisjZGVmaW5lIE1CWF9QTV9EU1BJRExFICAgICAgICAgICAgICAgICAgKE1CWF9QTV9DTEFTUyArIDB4MCkKKyNkZWZpbmUgTUJYX1BNX0RTUFdBS0VVUCAgICAgICAgICAgICAgICAoTUJYX1BNX0NMQVNTICsgMHgxKQorI2RlZmluZSBNQlhfUE1fRU1FUkdFTkNZU0xFRVAgICAgICAgICAgIChNQlhfUE1fQ0xBU1MgKyAweDIpCisjZGVmaW5lIE1CWF9QTV9TTEVFUFVOVElMUkVTVEFSVCAgICAgICAgKE1CWF9QTV9DTEFTUyArIDB4MykKKyNkZWZpbmUgTUJYX1BNX0RTUEdMT0JBTElETEVfT0ZGICAgICAgICAoTUJYX1BNX0NMQVNTICsgMHg0KQorI2RlZmluZSBNQlhfUE1fRFNQR0xPQkFMSURMRV9PTiAgICAgICAgIChNQlhfUE1fQ0xBU1MgKyAweDUpCisjZGVmaW5lIE1CWF9QTV9TRVRQT0lOVF9QUkVOT1RJRlkgICAgICAgKE1CWF9QTV9DTEFTUyArIDB4NikKKyNkZWZpbmUgTUJYX1BNX1NFVFBPSU5UX1BPU1ROT1RJRlkgICAgICAoTUJYX1BNX0NMQVNTICsgMHg3KQorI2RlZmluZSBNQlhfUE1fRFNQUkVUTiAgICAgICAgICAgICAgICAgIChNQlhfUE1fQ0xBU1MgKyAweDgpCisjZGVmaW5lIE1CWF9QTV9EU1BSRVRFTlRJT04gICAgICAgIChNQlhfUE1fQ0xBU1MgKyAweDgpCisjZGVmaW5lIE1CWF9QTV9EU1BISUJFUk5BVEUgICAgICAgIChNQlhfUE1fQ0xBU1MgKyAweDkpCisjZGVmaW5lIE1CWF9QTV9ISUJFUk5BVEVfRU4gICAgICAgIChNQlhfUE1fQ0xBU1MgKyAweEEpCisjZGVmaW5lIE1CWF9QTV9PUFBfUkVRICAgICAgICAgICAgICAgICAgKE1CWF9QTV9DTEFTUyArIDB4QikKKyNkZWZpbmUgTUJYX1BNX09QUF9DSEcgICAgICAgICAgICAgICAgICAoTUJYX1BNX0NMQVNTICsgMHhDKQorCisjZGVmaW5lIE1CWF9QTV9UWVBFX01BU0sgMHgwMzAwCisjZGVmaW5lIE1CWF9QTV9UWVBFX1BXUl9DSE5HIDB4MDEwMAorI2RlZmluZSBNQlhfUE1fVFlQRV9PUFBfUFJFQ0hORyAweDAyMDAKKyNkZWZpbmUgTUJYX1BNX1RZUEVfT1BQX1BPU1RDSE5HIDB4MDMwMAorI2RlZmluZSBNQlhfUE1fVFlQRV9PUFBfTUFTSyAweDAzMDAKKyNkZWZpbmUgTUJYX1BNX09QUF9QUkVDSE5HIChNQlhfUE1fQ0xBU1MgfCBNQlhfUE1fVFlQRV9PUFBfUFJFQ0hORykKKy8qIERTUCB0byBNUFUgKi8KKyNkZWZpbmUgTUJYX1BNX09QUF9DSE5HKE9QUCkgKE1CWF9QTV9DTEFTUyB8IE1CWF9QTV9UWVBFX09QUF9QUkVDSE5HIHwgKE9QUCkpCisjZGVmaW5lIE1CWF9QTV9SRVQgKE1CWF9QTV9DTEFTUyB8IE1CWF9QTV9UWVBFX1BXUl9DSE5HIHwgMHgwMDA2KQorI2RlZmluZSBNQlhfUE1fSElCIChNQlhfUE1fQ0xBU1MgfCBNQlhfUE1fVFlQRV9QV1JfQ0hORyB8IDB4MDAwMikKKyNkZWZpbmUgTUJYX1BNX09QUDEgMAorI2RlZmluZSBNQlhfUE1fT1BQMiAxCisjZGVmaW5lIE1CWF9QTV9PUFAzIDIKKyNkZWZpbmUgTUJYX1BNX09QUDQgMworCisvKiBCcmlkZ2UgRGVidWcgQ29tbWFuZHMgKi8KKyNkZWZpbmUgTUJYX0RCR19TWVNQUklOVEYgICAgICAgKE1CWF9EQkdfQ0xBU1MgKyAweDApCisKKyNlbmRpZiAvKiBfTUJYX1NIX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9tZW1kZWZzLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvbWVtZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ZDJjNWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvbWVtZGVmcy5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBtZW1kZWZzLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogR2xvYmFsIE1FTSBjb25zdGFudHMgYW5kIHR5cGVzLCBzaGFyZWQgYmV0d2VlbiBCcmlkZ2UgZHJpdmVyIGFuZCBEU1AgQVBJLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIE1FTURFRlNfCisjZGVmaW5lIE1FTURFRlNfCisKKy8qCisgKiAgTUVNX1ZJUlRVQUxTRUdJRCBpcyB1c2VkIGJ5IE5vZGUgJiBTdHJtIHRvIGFjY2VzcyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgaW4KKyAqICB0aGUgY29ycmVjdCBjbGllbnQgcHJvY2VzcyBjb250ZXh0LgorICovCisjZGVmaW5lIE1FTV9TRVRWSVJUVUFMU0VHSUQgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgTUVNX0dFVFZJUlRVQUxTRUdJRCAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBNRU1fTUFTS1ZJUlRVQUxTRUdJRCAgICAoTUVNX1NFVFZJUlRVQUxTRUdJRCB8IE1FTV9HRVRWSVJUVUFMU0VHSUQpCisKKyNlbmRpZiAvKiBNRU1ERUZTXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL21nci5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL21nci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZjdkYzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvbWdyLmgKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBtZ3IuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBUaGlzIGlzIHRoZSBEU1AgQVBJIFJNIG1vZHVsZSBpbnRlcmZhY2UuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBNR1JfCisjZGVmaW5lIE1HUl8KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9tZ3Jwcml2Lmg+CisKKyNkZWZpbmUgTUFYX0VWRU5UUyAzMgorCisvKgorICogID09PT09PT09IG1ncl93YWl0X2Zvcl9icmlkZ2VfZXZlbnRzID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQmxvY2sgb24gYW55IEJyaWRnZSBldmVudChzKQorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGFub3RpZmljYXRpb25zICA6IGFycmF5IG9mIHBvaW50ZXJzIHRvIG5vdGlmaWNhdGlvbiBvYmplY3RzLgorICogICAgICBjb3VudCAgICAgICAgICA6IG51bWJlciBvZiBlbGVtZW50cyBpbiBhYm92ZSBhcnJheQorICogICAgICBwdV9pbmRleCAgICAgICAgIDogaW5kZXggb2Ygc2lnbmFsZWQgZXZlbnQgb2JqZWN0CisgKiAgICAgIHV0aW1lb3V0ICAgICAgICA6IHRpbWVvdXQgaW50ZXJ2YWwgaW4gbWlsbGlzZW9jbmRzCisgKiAgUmV0dXJuczoKKyAqICAgICAgMCAgICAgICAgIDogU3VjY2Vzcy4KKyAqICAgICAgLUVUSU1FICAgIDogV2FpdCB0aW1lZCBvdXQuICpwdV9pbmRleCBpcyB1bmRldGVybWluZWQuCisgKiAgRGV0YWlsczoKKyAqLworCitpbnQgbWdyX3dhaXRfZm9yX2JyaWRnZV9ldmVudHMoc3RydWN0IGRzcF9ub3RpZmljYXRpb24KKwkJCQkgICAgICAqKmFub3RpZmljYXRpb25zLAorCQkJCSAgICAgIHUzMiBjb3VudCwgdTMyICpwdV9pbmRleCwKKwkJCQkgICAgICB1MzIgdXRpbWVvdXQpOworCisvKgorICogID09PT09PT09IG1ncl9jcmVhdGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDcmVhdGVzIHRoZSBNYW5hZ2VyIE9iamVjdC4gVGhpcyBpcyBkb25lIGR1cmluZyB0aGUgZHJpdmVyIGxvYWRpbmcuCisgKiAgICAgIFRoZXJlIGlzIG9ubHkgb25lIE1hbmFnZXIgT2JqZWN0IGluIHRoZSBEU1AvQklPUyBCcmlkZ2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbWdyX29iajogICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIGNyZWF0ZWQgTUdSIE9iamVjdCBoYW5kbGUuCisgKiAgICAgIGRldl9ub2RlX29iajogICAgICAgRGV2aWNlIG9iamVjdCBhcyBrbm93biB0byB0aGUgc3lzdGVtLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzCisgKiAgICAgIC1FTk9NRU06ICAgIEZhaWxlZCB0byBDcmVhdGUgdGhlIE9iamVjdAorICogICAgICAtRVBFUk06ICAgICAgR2VuZXJhbCBGYWlsdXJlCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIE1HUiBJbml0aWFsaXplZCAocmVmcyA+IDAgKQorICogICAgICBtZ3Jfb2JqICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgICptZ3Jfb2JqIGlzIGEgdmFsaWQgTUdSIGludGVyZmFjZSB0byB0aGUgZGV2aWNlLgorICogICAgICAgICAgICAgICAgICAgICAgTUdSIE9iamVjdCBzdG9yZXMgdGhlIERDRCBNYW5hZ2VyIEhhbmRsZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1HUiBPYmplY3Qgc3RvcmVkIGluIHRoZSBSZWdzaXRyeS4KKyAqICAgICAgITA6ICAgICAgIE1HUiBPYmplY3Qgbm90IGNyZWF0ZWQKKyAqICBEZXRhaWxzOgorICogICAgICBEQ0QgRGxsIGlzIGxvYWRlZCBhbmQgTUdSIE9iamVjdCBzdG9yZXMgdGhlIGhhbmRsZSBvZiB0aGUgRExMLgorICovCitleHRlcm4gaW50IG1ncl9jcmVhdGUoc3RydWN0IG1ncl9vYmplY3QgKiptZ3Jfb2JqLAorCQkJICAgICBzdHJ1Y3QgY2ZnX2Rldm5vZGUgKmRldl9ub2RlX29iaik7CisKKy8qCisgKiAgPT09PT09PT0gbWdyX2Rlc3Ryb3kgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEZXN0cm95cyB0aGUgTUdSIG9iamVjdC4gQ2FsbGVkIHVwb24gZHJpdmVyIHVubG9hZGluZy4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBobWdyX29iajogICAgIEhhbmRsZSB0byBNYW5hZ2VyIG9iamVjdCAuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgICAgICAgICAgICAgICAgICBEQ0QgTWFuYWdlciBmcmVlZDsgTUdSIE9iamVjdCBkZXN0cm95ZWQ7CisgKiAgICAgICAgICAgICAgICAgICAgICBNR1IgT2JqZWN0IGRlbGV0ZWQgZnJvbSB0aGUgUmVnaXN0cnkuCisgKiAgICAgIC1FUEVSTTogICAgICBGYWlsZWQgdG8gZGVzdHJveSBNR1IgT2JqZWN0CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIE1HUiBJbml0aWFsaXplZCAocmVmcyA+IDAgKQorICogICAgICBobWdyX29iaiBpcyBhIHZhbGlkIE1HUiBoYW5kbGUgLgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAgICAgICBNR1IgT2JqZWN0IGRlc3Ryb3llZCBhbmQgaG1ncl9vYmogaXMgSW52YWxpZCBNR1IKKyAqICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZS4KKyAqLworZXh0ZXJuIGludCBtZ3JfZGVzdHJveShzdHJ1Y3QgbWdyX29iamVjdCAqaG1ncl9vYmopOworCisvKgorICogID09PT09PT09IG1ncl9lbnVtX25vZGVfaW5mbyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEVudW1lcmF0ZSBhbmQgZ2V0IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYWJvdXQgbm9kZXMgY29uZmlndXJlZAorICogICAgICBpbiB0aGUgbm9kZSBkYXRhYmFzZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBub2RlX2lkOiAgICAgICAgICAgICAgVGhlIG5vZGUgaW5kZXggKGJhc2UgMCkuCisgKiAgICAgIHBuZGJfcHJvcHM6ICAgICAgICAgIFB0ciB0byB0aGUgZHNwX25kYnByb3BzIHN0cnVjdHVyZSBmb3Igb3V0cHV0LgorICogICAgICB1bmRiX3Byb3BzX3NpemU6ICAgICAgU2l6ZSBvZiB0aGUgZHNwX25kYnByb3BzIHN0cnVjdHVyZS4KKyAqICAgICAgcHVfbnVtX25vZGVzOiAgICAgICAgIExvY2F0aW9uIHdoZXJlIHRoZSBudW1iZXIgb2Ygbm9kZXMgY29uZmlndXJlZAorICogICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBkYXRhYmFzZSB3aWxsIGJlIHJldHVybmVkLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVJTlZBTDogICAgUGFyYW1ldGVyIG5vZGVfaWQgaXMgPiB0aGFuIHRoZSBudW1iZXIgb2Ygbm9kZXMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXRyZWQgaW4gdGhlIHN5c3RlbQorICogICAgICAtRUlEUk06ICBEdXJpbmcgRW51bWVyYXRpb24gdGhlcmUgaGFzIGJlZW4gYSBjaGFuZ2UgaW4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG51bWJlciBvZiBub2RlcyBjb25maWd1cmVkIG9yIGluIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJvcGVydGllcyBvZiB0aGUgZW51bWVyYXRlZCBub2Rlcy4KKyAqICAgICAgLUVQRVJNOiAgICAgICAgICBGYWlsZWQgdG8gcXVlcnJ5IHRoZSBOb2RlIERhdGEgQmFzZQorICogIFJlcXVpcmVzOgorICogICAgICBwTkRCUFJPUFMgaXMgbm90IG51bGwKKyAqICAgICAgdW5kYl9wcm9wc19zaXplID49IHNpemVvZihkc3BfbmRicHJvcHMpCisgKiAgICAgIHB1X251bV9ub2RlcyBpcyBub3QgbnVsbAorICogICAgICBNR1IgSW5pdGlhbGl6ZWQgKHJlZnMgPiAwICkKKyAqICBFbnN1cmVzOgorICogICAgICBTVUNDRVNTIG9uIHN1Y2Nlc3NmdWwgcmV0cmVpdmFsIG9mIGRhdGEgYW5kICpwdV9udW1fbm9kZXMgPiAwIE9SCisgKiAgICAgIERTUF9GQUlMRUQgICYmICpwdV9udW1fbm9kZXMgPT0gMC4KKyAqICBEZXRhaWxzOgorICovCitleHRlcm4gaW50IG1ncl9lbnVtX25vZGVfaW5mbyh1MzIgbm9kZV9pZCwKKwkJCQkgICAgIHN0cnVjdCBkc3BfbmRicHJvcHMgKnBuZGJfcHJvcHMsCisJCQkJICAgICB1MzIgdW5kYl9wcm9wc19zaXplLAorCQkJCSAgICAgdTMyICpwdV9udW1fbm9kZXMpOworCisvKgorICogID09PT09PT09IG1ncl9lbnVtX3Byb2Nlc3Nvcl9pbmZvID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRW51bWVyYXRlIGFuZCBnZXQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhYm91dCBhdmFpbGFibGUgRFNQCisgKiAgICAgIHByb2Nlc3NvcnMKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBwcm9jZXNzb3JfaWQ6ICAgICAgICAgVGhlIHByb2Nlc3NvciBpbmRleCAoemVyby1iYXNlZCkuCisgKiAgICAgIHByb2Nlc3Nvcl9pbmZvOiAgICAgUHRyIHRvIHRoZSBkc3BfcHJvY2Vzc29yaW5mbyBzdHJ1Y3R1cmUgLgorICogICAgICBwcm9jZXNzb3JfaW5mb19zaXplOiBTaXplIG9mIGRzcF9wcm9jZXNzb3JpbmZvIHN0cnVjdHVyZS4KKyAqICAgICAgcHVfbnVtX3Byb2NzOiAgICAgICAgIExvY2F0aW9uIHdoZXJlIHRoZSBudW1iZXIgb2YgRFNQcyBjb25maWd1cmVkCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGRhdGFiYXNlIHdpbGwgYmUgcmV0dXJuZWQKKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FSU5WQUw6ICAgIFBhcmFtZXRlciBwcm9jZXNzb3JfaWQgaXMgPiB0aGFuIHRoZSBudW1iZXIgb2YKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBEU1AgUHJvY2Vzc29ycyBpbiB0aGUgc3lzdGVtLgorICogICAgICAtRVBFUk06ICAgICAgICAgIEZhaWxlZCB0byBxdWVycnkgdGhlIE5vZGUgRGF0YSBCYXNlCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIHByb2Nlc3Nvcl9pbmZvIGlzIG5vdCBudWxsCisgKiAgICAgIHB1X251bV9wcm9jcyBpcyBub3QgbnVsbAorICogICAgICBwcm9jZXNzb3JfaW5mb19zaXplID49IHNpemVvZihkc3BfcHJvY2Vzc29yaW5mbykKKyAqICAgICAgTUdSIEluaXRpYWxpemVkIChyZWZzID4gMCApCisgKiAgRW5zdXJlczoKKyAqICAgICAgU1VDQ0VTUyBvbiBzdWNjZXNzZnVsIHJldHJlaXZhbCBvZiBkYXRhIGFuZCAqcHVfbnVtX3Byb2NzID4gMCBPUgorICogICAgICBEU1BfRkFJTEVEICYmICpwdV9udW1fcHJvY3MgPT0gMC4KKyAqICBEZXRhaWxzOgorICovCitleHRlcm4gaW50IG1ncl9lbnVtX3Byb2Nlc3Nvcl9pbmZvKHUzMiBwcm9jZXNzb3JfaWQsCisJCQkJCSAgc3RydWN0IGRzcF9wcm9jZXNzb3JpbmZvCisJCQkJCSAgKnByb2Nlc3Nvcl9pbmZvLAorCQkJCQkgIHUzMiBwcm9jZXNzb3JfaW5mb19zaXplLAorCQkJCQkgIHU4ICpwdV9udW1fcHJvY3MpOworLyoKKyAqICA9PT09PT09PSBtZ3JfZXhpdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERlY3JlbWVudCByZWZlcmVuY2UgY291bnQsIGFuZCBmcmVlIHJlc291cmNlcyB3aGVuIHJlZmVyZW5jZSBjb3VudCBpcworICogICAgICAwLgorICogIFBhcmFtZXRlcnM6CisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgTUdSIGlzIGluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgICAgIFdoZW4gcmVmZXJlbmNlIGNvdW50ID09IDAsIE1HUidzIHByaXZhdGUgcmVzb3VyY2VzIGFyZSBmcmVlZC4KKyAqLworZXh0ZXJuIHZvaWQgbWdyX2V4aXQodm9pZCk7CisKKy8qCisgKiAgPT09PT09PT0gbWdyX2dldF9kY2RfaGFuZGxlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmVzIHRoZSBNR1IgaGFuZGxlLiBBY2Nlc3NvciBGdW5jdGlvbgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIG1ncl9oYW5kbGU6ICAgICBIYW5kbGUgdG8gdGhlIE1hbmFnZXIgT2JqZWN0CisgKiAgICAgIGRjZF9oYW5kbGU6ICAgICBQdHIgdG8gcmVjZWl2ZSB0aGUgRENEIEhhbmRsZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjZXNzCisgKiAgICAgIC1FUEVSTTogICAgICBGYWlsdXJlIHRvIGdldCB0aGUgSGFuZGxlCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIE1HUiBpcyBpbml0aWFsaXplZC4KKyAqICAgICAgZGNkX2hhbmRsZSAhPSBOVUxMCisgKiAgRW5zdXJlczoKKyAqICAgICAgMCBhbmQgKmRjZF9oYW5kbGUgIT0gTlVMTCB8fAorICogICAgICAtRVBFUk0gYW5kICpkY2RfaGFuZGxlID09IE5VTEwKKyAqLworZXh0ZXJuIGludCBtZ3JfZ2V0X2RjZF9oYW5kbGUoc3RydWN0IG1ncl9vYmplY3QKKwkJCQkgICAgICptZ3JfaGFuZGxlLCB1MzIgKmRjZF9oYW5kbGUpOworCisvKgorICogID09PT09PT09IG1ncl9pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZSBNR1IncyBwcml2YXRlIHN0YXRlLCBrZWVwaW5nIGEgcmVmZXJlbmNlIGNvdW50IG9uIGVhY2gKKyAqICAgICAgY2FsbC4gSW50aWFsaXplcyB0aGUgRENELgorICogIFBhcmFtZXRlcnM6CisgKiAgUmV0dXJuczoKKyAqICAgICAgVFJVRSBpZiBpbml0aWFsaXplZDsgRkFMU0UgaWYgZXJyb3Igb2NjdXJlZC4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICogICAgICBUUlVFOiBBIHJlcXVpcmVtZW50IGZvciB0aGUgb3RoZXIgcHVibGljIE1HUiBmdW5jdGlvbnMuCisgKi8KK2V4dGVybiBib29sIG1ncl9pbml0KHZvaWQpOworCisjZW5kaWYgLyogTUdSXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL21ncnByaXYuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9tZ3Jwcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNhNGUxMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9tZ3Jwcml2LmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIG1ncnByaXYuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBHbG9iYWwgTUdSIGNvbnN0YW50cyBhbmQgdHlwZXMsIHNoYXJlZCBieSBQUk9DLCBNR1IsIGFuZCBEU1AgQVBJLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIE1HUlBSSVZfCisjZGVmaW5lIE1HUlBSSVZfCisKKy8qCisgKiBPTUFQMTUxMCBzcGVjaWZpYworICovCisjZGVmaW5lIE1HUl9NQVhUTEJFTlRSSUVTICAzMgorCisvKiBSTSBNR1IgT2JqZWN0ICovCitzdHJ1Y3QgbWdyX29iamVjdDsKKworc3RydWN0IG1ncl90bGJlbnRyeSB7CisJdTMyIHVsX2RzcF92aXJ0OwkvKiBEU1AgdmlydHVhbCBhZGRyZXNzICovCisJdTMyIHVsX2dwcF9waHlzOwkvKiBHUFAgcGh5c2ljYWwgYWRkcmVzcyAqLworfTsKKworLyoKKyAqICBUaGUgRFNQX1BST0NFU1NPUkVYVElORk8gc3RydWN0dXJlIGRlc2NyaWJlcyBhZGRpdGlvbmFsIGV4dGVuZGVkCisgKiAgY2FwYWJpbGl0aWVzIG9mIGEgRFNQIHByb2Nlc3NvciBub3QgZXhwb3NlZCB0byB1c2VyLgorICovCitzdHJ1Y3QgbWdyX3Byb2Nlc3NvcmV4dGluZm8geworCXN0cnVjdCBkc3BfcHJvY2Vzc29yaW5mbyB0eV9iYXNpYzsJLyogdXNlciBwcm9jZXNzb3IgaW5mbyAqLworCS8qIHByaXZhdGUgZHNwIG1tdSBlbnRyaWVzICovCisJc3RydWN0IG1ncl90bGJlbnRyeSB0eV90bGJbTUdSX01BWFRMQkVOVFJJRVNdOworfTsKKworI2VuZGlmIC8qIE1HUlBSSVZfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvbXNnLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvbXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU3NzhiYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9tc2cuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogbXNnLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogRFNQL0JJT1MgQnJpZGdlIG1zZ19jdHJsIE1vZHVsZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIE1TR18KKyNkZWZpbmUgTVNHXworCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RldmRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvbXNnZGVmcy5oPgorCisvKgorICogID09PT09PT09IG1zZ19jcmVhdGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDcmVhdGUgYW4gb2JqZWN0IHRvIG1hbmFnZSBtZXNzYWdlIHF1ZXVlcy4gT25seSBvbmUgb2YgdGhlc2Ugb2JqZWN0cworICogICAgICBjYW4gZXhpc3QgcGVyIGRldmljZSBvYmplY3QuIFRoZSBtc2dfY3RybCBtYW5hZ2VyIG11c3QgYmUgY3JlYXRlZCBiZWZvcmUKKyAqICAgICAgdGhlIElPIE1hbmFnZXIuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbXNnX21hbjogICAgICAgICAgICBMb2NhdGlvbiB0byBzdG9yZSBtc2dfY3RybCBtYW5hZ2VyIGhhbmRsZSBvbiBvdXRwdXQuCisgKiAgICAgIGhkZXZfb2JqOiAgICAgICAgIFRoZSBkZXZpY2Ugb2JqZWN0LgorICogICAgICBtc2dfY2FsbGJhY2s6ICAgICAgICBDYWxsZWQgd2hlbmV2ZXIgYW4gUk1TX0VYSVQgbWVzc2FnZSBpcyByZWNlaXZlZC4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBtc2dfbW9kX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBtc2dfbWFuICE9IE5VTEwuCisgKiAgICAgIGhkZXZfb2JqICE9IE5VTEwuCisgKiAgICAgIG1zZ19jYWxsYmFjayAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgbXNnX2NyZWF0ZShzdHJ1Y3QgbXNnX21nciAqKm1zZ19tYW4sCisJCQkgICAgIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCSAgICAgbXNnX29uZXhpdCBtc2dfY2FsbGJhY2spOworCisvKgorICogID09PT09PT09IG1zZ19kZWxldGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEZWxldGUgYSBtc2dfY3RybCBtYW5hZ2VyIGFsbG9jYXRlZCBpbiBtc2dfY3JlYXRlKCkuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaG1zZ19tZ3I6ICAgICAgICAgICAgSGFuZGxlIHJldHVybmVkIGZyb20gbXNnX2NyZWF0ZSgpLgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIG1zZ19tb2RfaW5pdCh2b2lkKSBjYWxsZWQuCisgKiAgICAgIFZhbGlkIGhtc2dfbWdyLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiB2b2lkIG1zZ19kZWxldGUoc3RydWN0IG1zZ19tZ3IgKmhtc2dfbWdyKTsKKworLyoKKyAqICA9PT09PT09PSBtc2dfZXhpdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERpc2NvbnRpbnVlIHVzYWdlIG9mIG1zZ19jdHJsIG1vZHVsZS4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIG1zZ19tb2RfaW5pdCh2b2lkKSBzdWNjZXNzZnVsbHkgY2FsbGVkIGJlZm9yZS4KKyAqICBFbnN1cmVzOgorICogICAgICBBbnkgcmVzb3VyY2VzIGFjcXVpcmVkIGluIG1zZ19tb2RfaW5pdCh2b2lkKSB3aWxsIGJlIGZyZWVkIHdoZW4gbGFzdAorICogICAgICBtc2dfY3RybCBjbGllbnQgY2FsbHMgbXNnX2V4aXQodm9pZCkuCisgKi8KK2V4dGVybiB2b2lkIG1zZ19leGl0KHZvaWQpOworCisvKgorICogID09PT09PT09IG1zZ19tb2RfaW5pdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEluaXRpYWxpemUgdGhlIG1zZ19jdHJsIG1vZHVsZS4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgICAgIFRSVUUgaWYgaW5pdGlhbGl6YXRpb24gc3VjY2VlZGVkLCBGQUxTRSBvdGhlcndpc2UuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGJvb2wgbXNnX21vZF9pbml0KHZvaWQpOworCisjZW5kaWYgLyogTVNHXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL21zZ2RlZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9tc2dkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBhM2ZhMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9tc2dkZWZzLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIG1zZ2RlZnMuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBHbG9iYWwgbXNnX2N0cmwgY29uc3RhbnRzIGFuZCB0eXBlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIE1TR0RFRlNfCisjZGVmaW5lIE1TR0RFRlNfCisKKy8qIG1zZ19jdHJsIE9iamVjdHM6ICovCitzdHJ1Y3QgbXNnX21ncjsKK3N0cnVjdCBtc2dfcXVldWU7CisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZSBmb3IgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIFJNU19FWElUIG1lc3NhZ2UgcmVjZWl2ZWQgKi8KK3R5cGVkZWYgdm9pZCAoKm1zZ19vbmV4aXQpICh2b2lkICpoLCBzMzIgbm9kZV9zdGF0dXMpOworCisjZW5kaWYgLyogTVNHREVGU18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ubGRyLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvbmxkci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NjUzZWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvbmxkci5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBubGRyLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogRFNQL0JJT1MgQnJpZGdlIGR5bmFtaWMgbG9hZGVyIGludGVyZmFjZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRjZGRlZi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXYuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvcm1tLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL25sZHJkZWZzLmg+CisKKyNpZm5kZWYgTkxEUl8KKyNkZWZpbmUgTkxEUl8KKworZXh0ZXJuIGludCBubGRyX2FsbG9jYXRlKHN0cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmosCisJCQkJdm9pZCAqcHJpdl9yZWYsIGNvbnN0IHN0cnVjdCBkY2Rfbm9kZXByb3BzCisJCQkJKm5vZGVfcHJvcHMsCisJCQkJc3RydWN0IG5sZHJfbm9kZW9iamVjdCAqKm5sZHJfbm9kZW9iaiwKKwkJCQlib29sICpwZl9waGFzZV9zcGxpdCk7CisKK2V4dGVybiBpbnQgbmxkcl9jcmVhdGUoc3RydWN0IG5sZHJfb2JqZWN0ICoqbmxkciwKKwkJCSAgICAgIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBubGRyX2F0dHJzICpwYXR0cnMpOworCitleHRlcm4gdm9pZCBubGRyX2RlbGV0ZShzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqKTsKK2V4dGVybiB2b2lkIG5sZHJfZXhpdCh2b2lkKTsKKworZXh0ZXJuIGludCBubGRyX2dldF9meG5fYWRkcihzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICpubGRyX25vZGVfb2JqLAorCQkJCSAgICBjaGFyICpzdHJfZnhuLCB1MzIgKiBhZGRyKTsKKworZXh0ZXJuIGludCBubGRyX2dldF9ybW1fbWFuYWdlcihzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHIsCisJCQkJICAgICAgIHN0cnVjdCBybW1fdGFyZ2V0X29iaiAqKnJtbV9tZ3IpOworCitleHRlcm4gYm9vbCBubGRyX2luaXQodm9pZCk7CitleHRlcm4gaW50IG5sZHJfbG9hZChzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICpubGRyX25vZGVfb2JqLAorCQkJICAgIGVudW0gbmxkcl9waGFzZSBwaGFzZSk7CitleHRlcm4gaW50IG5sZHJfdW5sb2FkKHN0cnVjdCBubGRyX25vZGVvYmplY3QgKm5sZHJfbm9kZV9vYmosCisJCQkgICAgICBlbnVtIG5sZHJfcGhhc2UgcGhhc2UpOworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9CQUNLVFJBQ0UKK2ludCBubGRyX2ZpbmRfYWRkcihzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICpubGRyX25vZGUsIHUzMiBzeW1fYWRkciwKKwl1MzIgb2Zmc2V0X3JhbmdlLCB2b2lkICpvZmZzZXRfb3V0cHV0LCBjaGFyICpzeW1fbmFtZSk7CisjZW5kaWYKKworI2VuZGlmIC8qIE5MRFJfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvbmxkcmRlZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ubGRyZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NWQzZGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvbmxkcmRlZnMuaApAQCAtMCwwICsxLDI5MyBAQAorLyoKKyAqIG5sZHJkZWZzLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogR2xvYmFsIER5bmFtaWMgKyBzdGF0aWMvb3ZlcmxheSBOb2RlIGxvYWRlciAoTkxEUikgY29uc3RhbnRzIGFuZCB0eXBlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBOTERSREVGU18KKyNkZWZpbmUgTkxEUkRFRlNfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkY2RkZWYuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2ZGVmcy5oPgorCisjZGVmaW5lIE5MRFJfTUFYUEFUSExFTkdUSCAgICAgICAyNTUKKy8qIE5MRFIgT2JqZWN0czogKi8KK3N0cnVjdCBubGRyX29iamVjdDsKK3N0cnVjdCBubGRyX25vZGVvYmplY3Q7CisKKy8qCisgKiAgPT09PT09PT0gbmxkcl9sb2FkdHlwZSA9PT09PT09PQorICogIExvYWQgdHlwZXMgZm9yIGEgbm9kZS4gTXVzdCBtYXRjaCB2YWx1ZXMgaW4gbm9kZS5oNTUuCisgKi8KK2VudW0gbmxkcl9sb2FkdHlwZSB7CisJTkxEUl9TVEFUSUNMT0FELAkvKiBMaW5rZWQgaW4gYmFzZSBpbWFnZSwgbm90IG92ZXJsYXkgKi8KKwlOTERSX0RZTkFNSUNMT0FELAkvKiBEeW5hbWljYWxseSBsb2FkZWQgbm9kZSAqLworCU5MRFJfT1ZMWUxPQUQJCS8qIExpbmtlZCBpbiBiYXNlIGltYWdlLCBvdmVybGF5IG5vZGUgKi8KK307CisKKy8qCisgKiAgPT09PT09PT0gbmxkcl9vdmx5ZnhuID09PT09PT09CisgKiAgQ2F1c2VzIGNvZGUgb3IgZGF0YSB0byBiZSBjb3BpZWQgZnJvbSBsb2FkIGFkZHJlc3MgdG8gcnVuIGFkZHJlc3MuIFRoaXMKKyAqICBpcyB0aGUgImNvZF93cml0ZWZ4biIgdGhhdCBnZXRzIHBhc3NlZCB0byB0aGUgREJMTF9MaWJyYXJ5IGFuZCBpcyB1c2VkIGFzCisgKiAgdGhlIFpMIHdyaXRlIGZ1bmN0aW9uLgorICoKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBwcml2X3JlZjogICAgICAgSGFuZGxlIHRvIGlkZW50aWZ5IHRoZSBub2RlLgorICogICAgICBkc3BfcnVuX2FkZHI6ICAgUnVuIGFkZHJlc3Mgb2YgY29kZSBvciBkYXRhLgorICogICAgICBkc3BfbG9hZF9hZGRyOiAgTG9hZCBhZGRyZXNzIG9mIGNvZGUgb3IgZGF0YS4KKyAqICAgICAgdWxfbnVtX2J5dGVzOiAgICAgTnVtYmVyIG9mIChHUFApIGJ5dGVzIHRvIGNvcHkuCisgKiAgICAgIG1lbV9zcGFjZTogICAgICBSTVNfQ09ERSBvciBSTVNfREFUQS4KKyAqICBSZXR1cm5zOgorICogICAgICB1bF9udW1fYnl0ZXM6ICAgICBTdWNjZXNzLgorICogICAgICAwOiAgICAgICAgICAgICAgRmFpbHVyZS4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIHUzMigqbmxkcl9vdmx5ZnhuKSAodm9pZCAqcHJpdl9yZWYsIHUzMiBkc3BfcnVuX2FkZHIsCisJCQkgICAgdTMyIGRzcF9sb2FkX2FkZHIsIHUzMiB1bF9udW1fYnl0ZXMsIHUzMiBtZW1fc3BhY2UpOworCisvKgorICogID09PT09PT09IG5sZHJfd3JpdGVmeG4gPT09PT09PT0KKyAqICBXcml0ZSBtZW1vcnkgZnVuY3Rpb24uIFVzZWQgZm9yIGR5bmFtaWMgbG9hZCB3cml0ZXMuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgcHJpdl9yZWY6ICAgICAgIEhhbmRsZSB0byBpZGVudGlmeSB0aGUgbm9kZS4KKyAqICAgICAgZHNwX2FkZDogICAgICAgIEFkZHJlc3Mgb2YgY29kZSBvciBkYXRhLgorICogICAgICBwYnVmOiAgICAgICAgICAgQ29kZSBvciBkYXRhIHRvIGJlIHdyaXR0ZW4KKyAqICAgICAgdWxfbnVtX2J5dGVzOiAgICAgTnVtYmVyIG9mIChHUFApIGJ5dGVzIHRvIHdyaXRlLgorICogICAgICBtZW1fc3BhY2U6ICAgICAgREJMTF9EQVRBIG9yIERCTExfQ09ERS4KKyAqICBSZXR1cm5zOgorICogICAgICB1bF9udW1fYnl0ZXM6ICAgICBTdWNjZXNzLgorICogICAgICAwOiAgICAgICAgICAgICAgRmFpbHVyZS4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIHUzMigqbmxkcl93cml0ZWZ4bikgKHZvaWQgKnByaXZfcmVmLAorCQkJICAgICB1MzIgZHNwX2FkZCwgdm9pZCAqcGJ1ZiwKKwkJCSAgICAgdTMyIHVsX251bV9ieXRlcywgdTMyIG1lbV9zcGFjZSk7CisKKy8qCisgKiAgPT09PT09PT0gbmxkcl9hdHRycyA9PT09PT09PQorICogIEF0dHJpYnV0ZXMgcGFzc2VkIHRvIG5sZHJfY3JlYXRlIGZ1bmN0aW9uLgorICovCitzdHJ1Y3Qgbmxkcl9hdHRycyB7CisJbmxkcl9vdmx5ZnhuIHBmbl9vdmx5OworCW5sZHJfd3JpdGVmeG4gcGZuX3dyaXRlOworCXUxNiB1c19kc3Bfd29yZF9zaXplOworCXUxNiB1c19kc3BfbWF1X3NpemU7Cit9OworCisvKgorICogID09PT09PT09IG5sZHJfcGhhc2UgPT09PT09PT0KKyAqICBJbmRpY2F0ZXMgbm9kZSBjcmVhdGUsIGRlbGV0ZSwgb3IgZXhlY3V0ZSBwaGFzZSBmdW5jdGlvbi4KKyAqLworZW51bSBubGRyX3BoYXNlIHsKKwlOTERSX0NSRUFURSwKKwlOTERSX0RFTEVURSwKKwlOTERSX0VYRUNVVEUsCisJTkxEUl9OT1BIQVNFCit9OworCisvKgorICogIFR5cGVkZWZzIG9mIGxvYWRlciBmdW5jdGlvbnMgaW1wb3J0ZWQgZnJvbSBhIERMTCwgb3IgZGVmaW5lZCBpbiBhCisgKiAgZnVuY3Rpb24gdGFibGUuCisgKi8KKworLyoKKyAqICA9PT09PT09PSBubGRyX2FsbG9jYXRlID09PT09PT09CisgKiAgQWxsb2NhdGUgcmVzb3VyY2VzIHRvIG1hbmFnZSB0aGUgbG9hZGluZyBvZiBhIG5vZGUgb24gdGhlIERTUC4KKyAqCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbmxkcl9vYmo6ICAgICAgICAgIEhhbmRsZSBvZiBsb2FkZXIgdGhhdCB3aWxsIGxvYWQgdGhlIG5vZGUuCisgKiAgICAgIHByaXZfcmVmOiAgICAgICBIYW5kbGUgdG8gaWRlbnRpZnkgdGhlIG5vZGUuCisgKiAgICAgIG5vZGVfcHJvcHM6ICAgICBQb2ludGVyIHRvIGEgZGNkX25vZGVwcm9wcyBmb3IgdGhlIG5vZGUuCisgKiAgICAgIG5sZHJfbm9kZW9iajogICBMb2NhdGlvbiB0byBzdG9yZSBub2RlIGhhbmRsZSBvbiBvdXRwdXQuIFRoaXMgaGFuZGxlCisgKiAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHBhc3NlZCB0byBubGRyX2xvYWQvbmxkcl91bmxvYWQuCisgKiAgICAgIHBmX3BoYXNlX3NwbGl0OiAgIHBvaW50ZXIgdG8gaW50IHZhcmlhYmxlIHJlZmVyZW5jZWQgaW4gbm9kZS5jCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FTk9NRU06ICAgIEluc3VmZmljaWVudCBtZW1vcnkgb24gR1BQLgorICogIFJlcXVpcmVzOgorICogICAgICBubGRyX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBWYWxpZCBubGRyX29iai4KKyAqICAgICAgbm9kZV9wcm9wcyAhPSBOVUxMLgorICogICAgICBubGRyX25vZGVvYmogIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgSXNWYWxpZE5vZGUoKm5sZHJfbm9kZW9iaikuCisgKiAgICAgIGVycm9yOiAgICAgICAgICAqbmxkcl9ub2Rlb2JqID09IE5VTEwuCisgKi8KK3R5cGVkZWYgaW50KCpubGRyX2FsbG9jYXRlZnhuKSAoc3RydWN0IG5sZHJfb2JqZWN0ICpubGRyX29iaiwKKwkJCQkgICAgICAgdm9pZCAqcHJpdl9yZWYsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkY2Rfbm9kZXByb3BzCisJCQkJICAgICAgICogbm9kZV9wcm9wcywKKwkJCQkgICAgICAgc3RydWN0IG5sZHJfbm9kZW9iamVjdAorCQkJCSAgICAgICAqKm5sZHJfbm9kZW9iaiwKKwkJCQkgICAgICAgYm9vbCAqcGZfcGhhc2Vfc3BsaXQpOworCisvKgorICogID09PT09PT09IG5sZHJfY3JlYXRlID09PT09PT09CisgKiAgQ3JlYXRlIGEgbG9hZGVyIG9iamVjdC4gVGhpcyBvYmplY3QgaGFuZGxlcyB0aGUgbG9hZGluZyBhbmQgdW5sb2FkaW5nIG9mCisgKiAgY3JlYXRlLCBkZWxldGUsIGFuZCBleGVjdXRlIHBoYXNlIGZ1bmN0aW9ucyBvZiBub2RlcyBvbiB0aGUgRFNQIHRhcmdldC4KKyAqCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbmxkcjogICAgICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIGxvYWRlciBoYW5kbGUgb24gb3V0cHV0LgorICogICAgICBoZGV2X29iajogICAgIERldmljZSBmb3IgdGhpcyBwcm9jZXNzb3IuCisgKiAgICAgIHBhdHRyczogICAgICAgICBMb2FkZXIgYXR0cmlidXRlcy4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2VzczsKKyAqICAgICAgLUVOT01FTTogICAgSW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgcmVxdWVzdGVkIHJlc291cmNlcy4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgbmxkcl9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgbmxkciAhPSBOVUxMLgorICogICAgICBoZGV2X29iaiAhPSBOVUxMLgorICoJcGF0dHJzICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgIFZhbGlkICpubGRyLgorICogICAgICBlcnJvcjogICAgICAgICAgKm5sZHIgPT0gTlVMTC4KKyAqLwordHlwZWRlZiBpbnQoKm5sZHJfY3JlYXRlZnhuKSAoc3RydWN0IG5sZHJfb2JqZWN0ICoqbmxkciwKKwkJCQkgICAgIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBubGRyX2F0dHJzICpwYXR0cnMpOworCisvKgorICogID09PT09PT09IG5sZHJfZGVsZXRlID09PT09PT09CisgKiAgRGVsZXRlIHRoZSBOTERSIGxvYWRlci4KKyAqCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbmxkcl9vYmo6ICAgICAgICAgIE5vZGUgbWFuYWdlciBvYmplY3QuCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgbmxkcl9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgVmFsaWQgbmxkcl9vYmouCisgKiAgRW5zdXJlczoKKyAqCW5sZHJfb2JqIGludmFsaWQKKyAqLwordHlwZWRlZiB2b2lkICgqbmxkcl9kZWxldGVmeG4pIChzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBubGRyX2V4aXQgPT09PT09PT0KKyAqICBEaXNjb250aW51ZSB1c2FnZSBvZiBOTERSIG1vZHVsZS4KKyAqCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBubGRyX2luaXQodm9pZCkgc3VjY2Vzc2Z1bGx5IGNhbGxlZCBiZWZvcmUuCisgKiAgRW5zdXJlczoKKyAqICAgICAgQW55IHJlc291cmNlcyBhY3F1aXJlZCBpbiBubGRyX2luaXQodm9pZCkgd2lsbCBiZSBmcmVlZCB3aGVuIGxhc3QgTkxEUgorICogICAgICBjbGllbnQgY2FsbHMgbmxkcl9leGl0KHZvaWQpLgorICovCit0eXBlZGVmIHZvaWQgKCpubGRyX2V4aXRmeG4pICh2b2lkKTsKKworLyoKKyAqICA9PT09PT09PSBOTERSX0ZyZWUgPT09PT09PT0KKyAqICBGcmVlIHJlc291cmNlcyBhbGxvY2F0ZWQgaW4gbmxkcl9hbGxvY2F0ZS4KKyAqCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbmxkcl9ub2RlX29iajogICAgICBIYW5kbGUgcmV0dXJuZWQgZnJvbSBubGRyX2FsbG9jYXRlKCkuCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgbmxkcl9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgVmFsaWQgbmxkcl9ub2RlX29iai4KKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIHZvaWQgKCpubGRyX2ZyZWVmeG4pIChzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICpubGRyX25vZGVfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBubGRyX2dldF9meG5fYWRkciA9PT09PT09PQorICogIEdldCBhZGRyZXNzIG9mIGNyZWF0ZSwgZGVsZXRlLCBvciBleGVjdXRlIHBoYXNlIGZ1bmN0aW9uIG9mIGEgbm9kZSBvbgorICogIHRoZSBEU1AuCisgKgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIG5sZHJfbm9kZV9vYmo6ICAgICAgSGFuZGxlIHJldHVybmVkIGZyb20gbmxkcl9hbGxvY2F0ZSgpLgorICogICAgICBzdHJfZnhuOiAgICAgICAgTmFtZSBvZiBmdW5jdGlvbi4KKyAqICAgICAgYWRkcjogICAgICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIGZ1bmN0aW9uIGFkZHJlc3MuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FU1BJUEU6ICAgIEFkZHJlc3Mgb2YgZnVuY3Rpb24gbm90IGZvdW5kLgorICogIFJlcXVpcmVzOgorICogICAgICBubGRyX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBWYWxpZCBubGRyX25vZGVfb2JqLgorICogICAgICBhZGRyICE9IE5VTEw7CisgKiAgICAgIHN0cl9meG4gIT0gTlVMTDsKKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIGludCgqbmxkcl9nZXRmeG5hZGRyZnhuKSAoc3RydWN0IG5sZHJfbm9kZW9iamVjdAorCQkJCQkgKiBubGRyX25vZGVfb2JqLAorCQkJCQkgY2hhciAqc3RyX2Z4biwgdTMyICogYWRkcik7CisKKy8qCisgKiAgPT09PT09PT0gbmxkcl9pbml0ID09PT09PT09CisgKiAgSW5pdGlhbGl6ZSB0aGUgTkxEUiBtb2R1bGUuCisgKgorICogIFBhcmFtZXRlcnM6CisgKiAgUmV0dXJuczoKKyAqICAgICAgVFJVRSBpZiBpbml0aWFsaXphdGlvbiBzdWNjZWVkZWQsIEZBTFNFIG90aGVyd2lzZS4KKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIGJvb2woKm5sZHJfaW5pdGZ4bikgKHZvaWQpOworCisvKgorICogID09PT09PT09IG5sZHJfbG9hZCA9PT09PT09PQorICogIExvYWQgY3JlYXRlLCBkZWxldGUsIG9yIGV4ZWN1dGUgcGhhc2UgZnVuY3Rpb24gb2YgYSBub2RlIG9uIHRoZSBEU1AuCisgKgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIG5sZHJfbm9kZV9vYmo6ICAgICAgSGFuZGxlIHJldHVybmVkIGZyb20gbmxkcl9hbGxvY2F0ZSgpLgorICogICAgICBwaGFzZTogICAgICAgICAgVHlwZSBvZiBmdW5jdGlvbiB0byBsb2FkIChjcmVhdGUsIGRlbGV0ZSwgb3IgZXhlY3V0ZSkuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVOT01FTTogICAgICAgICAgICBJbnN1ZmZpY2llbnQgbWVtb3J5IG9uIEdQUC4KKyAqICAgICAgLUVOWElPOiAgICAgQ2FuJ3Qgb3ZlcmxheSBwaGFzZSBiZWNhdXNlIG92ZXJsYXkgbWVtb3J5CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFscmVhZHkgaW4gdXNlLgorICogICAgICAtRUlMU0VROiAgICAgICAgICAgRmFpbHVyZSBpbiBkeW5hbWljIGxvYWRlciBsaWJyYXJ5LgorICogIFJlcXVpcmVzOgorICogICAgICBubGRyX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBWYWxpZCBubGRyX25vZGVfb2JqLgorICogIEVuc3VyZXM6CisgKi8KK3R5cGVkZWYgaW50KCpubGRyX2xvYWRmeG4pIChzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICpubGRyX25vZGVfb2JqLAorCQkJCSAgIGVudW0gbmxkcl9waGFzZSBwaGFzZSk7CisKKy8qCisgKiAgPT09PT09PT0gbmxkcl91bmxvYWQgPT09PT09PT0KKyAqICBVbmxvYWQgY3JlYXRlLCBkZWxldGUsIG9yIGV4ZWN1dGUgcGhhc2UgZnVuY3Rpb24gb2YgYSBub2RlIG9uIHRoZSBEU1AuCisgKgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIG5sZHJfbm9kZV9vYmo6ICAgICAgSGFuZGxlIHJldHVybmVkIGZyb20gbmxkcl9hbGxvY2F0ZSgpLgorICogICAgICBwaGFzZTogICAgICAgICAgTm9kZSBmdW5jdGlvbiB0byB1bmxvYWQgKGNyZWF0ZSwgZGVsZXRlLCBvciBleGVjdXRlKS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVOT01FTTogICAgSW5zdWZmaWNpZW50IG1lbW9yeSBvbiBHUFAuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIG5sZHJfaW5pdCh2b2lkKSBjYWxsZWQuCisgKiAgICAgIFZhbGlkIG5sZHJfbm9kZV9vYmouCisgKiAgRW5zdXJlczoKKyAqLwordHlwZWRlZiBpbnQoKm5sZHJfdW5sb2FkZnhuKSAoc3RydWN0IG5sZHJfbm9kZW9iamVjdCAqbmxkcl9ub2RlX29iaiwKKwkJCQkgICAgIGVudW0gbmxkcl9waGFzZSBwaGFzZSk7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9sZHJfZnhucyA9PT09PT09PQorICovCitzdHJ1Y3Qgbm9kZV9sZHJfZnhucyB7CisJbmxkcl9hbGxvY2F0ZWZ4biBwZm5fYWxsb2NhdGU7CisJbmxkcl9jcmVhdGVmeG4gcGZuX2NyZWF0ZTsKKwlubGRyX2RlbGV0ZWZ4biBwZm5fZGVsZXRlOworCW5sZHJfZXhpdGZ4biBwZm5fZXhpdDsKKwlubGRyX2dldGZ4bmFkZHJmeG4gcGZuX2dldF9meG5fYWRkcjsKKwlubGRyX2luaXRmeG4gcGZuX2luaXQ7CisJbmxkcl9sb2FkZnhuIHBmbl9sb2FkOworCW5sZHJfdW5sb2FkZnhuIHBmbl91bmxvYWQ7Cit9OworCisjZW5kaWYgLyogTkxEUkRFRlNfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvbm9kZS5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL25vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWVkNWMxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL25vZGUuaApAQCAtMCwwICsxLDU4MyBAQAorLyoKKyAqIG5vZGUuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBEU1AvQklPUyBCcmlkZ2UgTm9kZSBNYW5hZ2VyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgTk9ERV8KKyNkZWZpbmUgTk9ERV8KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9wcm9jcHJpdi5oPgorCisjaW5jbHVkZSA8ZHNwYnJpZGdlL25vZGVkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rpc3BkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL25sZHJkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rydi5oPgorCisvKgorICogID09PT09PT09IG5vZGVfYWxsb2NhdGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBBbGxvY2F0ZSBHUFAgcmVzb3VyY2VzIHRvIG1hbmFnZSBhIG5vZGUgb24gdGhlIERTUC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBocHJvY2Vzc29yOiAgICAgICAgIEhhbmRsZSBvZiBwcm9jZXNzb3IgdGhhdCBpcyBhbGxvY2F0aW5nIHRoZSBub2RlLgorICogICAgICBub2RlX3V1aWQ6ICAgICAgICAgIFBvaW50ZXIgdG8gYSBkc3BfdXVpZCBmb3IgdGhlIG5vZGUuCisgKiAgICAgIHBhcmdzOiAgICAgICAgICAgICAgT3B0aW9uYWwgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgbm9kZS4KKyAqICAgICAgYXR0cl9pbjogICAgICAgICAgICBPcHRpb25hbCBwb2ludGVyIHRvIG5vZGUgYXR0cmlidXRlcyAocHJpb3JpdHksCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dC4uLikKKyAqICAgICAgbm9kZXJlczogICAgICAgICAgICAgTG9jYXRpb24gdG8gc3RvcmUgbm9kZSByZXNvdXJjZSBpbmZvLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVOT01FTTogICAgICAgIEluc3VmZmljaWVudCBtZW1vcnkgb24gR1BQLgorICogICAgICAtRU5PS0VZOiAgICAgICAgICBOb2RlIFVVSUQgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQuCisgKiAgICAgIC1FU1BJUEU6ICAgICAgICBpQWxnIGZ1bmN0aW9ucyBub3QgZm91bmQgZm9yIGEgREFJUyBub2RlLgorICogICAgICAtRURPTTogICAgICAgICBhdHRyX2luICE9IE5VTEwgYW5kIGF0dHJfaW4tPnByaW8gb3V0IG9mCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UuCisgKiAgICAgIC1FUEVSTTogICAgICAgICAgQSBmYWlsdXJlIG9jY3VyZWQsIHVuYWJsZSB0byBhbGxvY2F0ZSBub2RlLgorICogICAgICAtRUJBRFI6ICAgIFByb2NjZXNzb3IgaXMgbm90IGluIHRoZSBydW5uaW5nIHN0YXRlLgorICogIFJlcXVpcmVzOgorICogICAgICBub2RlX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBocHJvY2Vzc29yICE9IE5VTEwuCisgKiAgICAgIG5vZGVfdXVpZCAhPSBOVUxMLgorICogICAgICBub2RlcmVzICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgICAgICBJc1ZhbGlkTm9kZSgqcGhfbm9kZSkuCisgKiAgICAgIGVycm9yOiAgICAgICAgICAgICAgKm5vZGVyZXMgPT0gTlVMTC4KKyAqLworZXh0ZXJuIGludCBub2RlX2FsbG9jYXRlKHN0cnVjdCBwcm9jX29iamVjdCAqaHByb2Nlc3NvciwKKwkJCQljb25zdCBzdHJ1Y3QgZHNwX3V1aWQgKm5vZGVfdXVpZCwKKwkJCQljb25zdCBzdHJ1Y3QgZHNwX2NiZGF0YQorCQkJCSpwYXJncywgY29uc3Qgc3RydWN0IGRzcF9ub2RlYXR0cmluCisJCQkJKmF0dHJfaW4sCisJCQkJc3RydWN0IG5vZGVfcmVzX29iamVjdCAqKm5vZGVyZXMsCisJCQkJc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCk7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9hbGxvY19tc2dfYnVmID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQWxsb2NhdGUgYW5kIFByZXBhcmUgYSBidWZmZXIgd2hvc2UgZGVzY3JpcHRvciB3aWxsIGJlIHBhc3NlZCB0byBhCisgKiAgICAgIE5vZGUgd2l0aGluIGEgKGRzcF9tc2cpbWVzc2FnZQorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhub2RlOiAgICAgICAgICBUaGUgbm9kZSBoYW5kbGUuCisgKiAgICAgIHVzaXplOiAgICAgICAgICBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHRvIGJlIGFsbG9jYXRlZC4KKyAqICAgICAgcGF0dHI6ICAgICAgICAgIFBvaW50ZXIgdG8gYSBkc3BfYnVmZmVyYXR0ciBzdHJ1Y3R1cmUuCisgKiAgICAgIHBidWZmZXI6ICAgICAgICBMb2NhdGlvbiB0byBzdG9yZSB0aGUgYWRkcmVzcyBvZiB0aGUgYWxsb2NhdGVkCisgKiAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgb24gb3V0cHV0LgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIG5vZGUgaGFuZGxlLgorICogICAgICAtRU5PTUVNOiAgICBJbnN1ZmZpY2VudCBtZW1vcnkuCisgKiAgICAgIC1FUEVSTTogICAgICBHZW5lcmFsIEZhaWx1cmUuCisgKiAgICAgIC1FSU5WQUw6ICAgICAgSW52YWxpZCBTaXplLgorICogIFJlcXVpcmVzOgorICogICAgICBub2RlX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBwYnVmZmVyICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBub2RlX2FsbG9jX21zZ19idWYoc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwKKwkJCQkgICAgIHUzMiB1c2l6ZSwgc3RydWN0IGRzcF9idWZmZXJhdHRyCisJCQkJICAgICAqcGF0dHIsIHU4ICoqcGJ1ZmZlcik7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9jaGFuZ2VfcHJpb3JpdHkgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDaGFuZ2UgdGhlIHByaW9yaXR5IG9mIGFuIGFsbG9jYXRlZCBub2RlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhub2RlOiAgICAgICAgICAgICAgTm9kZSBoYW5kbGUgcmV0dXJuZWQgZnJvbSBub2RlX2FsbG9jYXRlLgorICogICAgICBwcmlvOiAgICAgICAgICBOZXcgcHJpb3JpdHkgbGV2ZWwgdG8gc2V0IG5vZGUncyBwcmlvcml0eSB0by4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6ICAgICAgICBJbnZhbGlkIGhub2RlLgorICogICAgICAtRURPTTogICAgICAgICBwcmlvIGlzIG91dCBvZiByYW5nZS4KKyAqICAgICAgLUVQRVJNOiBUaGUgc3BlY2lmaWVkIG5vZGUgaXMgbm90IGEgdGFzayBub2RlLgorICogICAgICAgICAgICAgIFVuYWJsZSB0byBjaGFuZ2Ugbm9kZSdzIHJ1bnRpbWUgcHJpb3JpdHkgbGV2ZWwuCisgKiAgICAgIC1FQkFEUjogICAgTm9kZSBpcyBub3QgaW4gdGhlIE5PREVfQUxMT0NBVEVELCBOT0RFX1BBVVNFRCwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBvciBOT0RFX1JVTk5JTkcgc3RhdGUuCisgKiAgICAgIC1FVElNRTogICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGJlZm9yZSB0aGUgRFNQIHJlc3BvbmRlZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgbm9kZV9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICBFbnN1cmVzOgorICogICAgICAwICYmIChOb2RlJ3MgY3VycmVudCBwcmlvcml0eSA9PSBwcmlvKQorICovCitleHRlcm4gaW50IG5vZGVfY2hhbmdlX3ByaW9yaXR5KHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsIHMzMiBwcmlvKTsKKworLyoKKyAqICA9PT09PT09PSBub2RlX2Nsb3NlX29ycGhhbnMgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEZWxldGUgYWxsIG5vZGVzIHdob3NlIG93bmluZyBwcm9jZXNzb3IgaXMgYmVpbmcgZGVzdHJveWVkLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhub2RlX21ncjogICAgICAgTm9kZSBtYW5hZ2VyIG9iamVjdC4KKyAqICAgICAgcHJvYzogICAgICAgICAgSGFuZGxlIHRvIHByb2Nlc3NvciBvYmplY3QgYmVpbmcgZGVzdHJveWVkLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRVBFUk06ICAgICAgVW5hYmxlIHRvIGRlbGV0ZSBhbGwgbm9kZXMgYmVsb25naW5nIHRvIHByb2MuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIFZhbGlkIGhub2RlX21nci4KKyAqICAgICAgcHJvYyAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgbm9kZV9jbG9zZV9vcnBoYW5zKHN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyLAorCQkJCSAgICAgc3RydWN0IHByb2Nfb2JqZWN0ICpwcm9jKTsKKworLyoKKyAqICA9PT09PT09PSBub2RlX2Nvbm5lY3QgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDb25uZWN0IHR3byBub2RlcyBvbiB0aGUgRFNQLCBvciBhIG5vZGUgb24gdGhlIERTUCB0byB0aGUgR1BQLiBJbiB0aGUKKyAqICAgICAgY2FzZSB0aGF0IHRoZSBjb25ubmVjdGlvbiBpcyBiZWluZyBtYWRlIGJldHdlZW4gYSBub2RlIG9uIHRoZSBEU1AgYW5kCisgKiAgICAgIHRoZSBHUFAsIG9uZSBvZiB0aGUgbm9kZSBoYW5kbGVzIChlaXRoZXIgbm9kZTEgb3Igbm9kZTIpIG11c3QgYmUKKyAqICAgICAgdGhlIGNvbnN0YW50IE5PREVfSEdQUE5PREUuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbm9kZTE6ICAgICAgICAgSGFuZGxlIG9mIGZpcnN0IG5vZGUgdG8gY29ubmVjdCB0byBzZWNvbmQgbm9kZS4gSWYKKyAqICAgICAgICAgICAgICAgICAgICAgIHRoaXMgaXMgYSBjb25uZWN0aW9uIGZyb20gdGhlIEdQUCB0byBub2RlMiwgbm9kZTEKKyAqICAgICAgICAgICAgICAgICAgICAgIG11c3QgYmUgdGhlIGNvbnN0YW50IE5PREVfSEdQUE5PREUuIE90aGVyd2lzZSwgbm9kZTEKKyAqICAgICAgICAgICAgICAgICAgICAgIG11c3QgYmUgYSBub2RlIGhhbmRsZSByZXR1cm5lZCBmcm9tIGEgc3VjY2Vzc2Z1bCBjYWxsCisgKiAgICAgICAgICAgICAgICAgICAgICB0byBOb2RlX0FsbG9jYXRlKCkuCisgKiAgICAgIG5vZGUyOiAgICAgICAgIEhhbmRsZSBvZiBzZWNvbmQgbm9kZS4gTXVzdCBiZSBlaXRoZXIgTk9ERV9IR1BQTk9ERQorICogICAgICAgICAgICAgICAgICAgICAgaWYgdGhpcyBpcyBhIGNvbm5lY3Rpb24gZnJvbSBEU1Agbm9kZSB0byBHUFAsIG9yIGEKKyAqICAgICAgICAgICAgICAgICAgICAgIG5vZGUgaGFuZGxlIHJldHVybmVkIGZyb20gYSBzdWNjZXNzZnVsIGNhbGwgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIG5vZGVfYWxsb2NhdGUoKS4KKyAqICAgICAgc3RyZWFtMTogICAgICAgIE91dHB1dCBzdHJlYW0gaW5kZXggb24gZmlyc3Qgbm9kZSwgdG8gYmUgY29ubmVjdGVkCisgKiAgICAgICAgICAgICAgICAgICAgICB0byBzZWNvbmQgbm9kZSdzIGlucHV0IHN0cmVhbS4gVmFsdWUgbXVzdCByYW5nZSBmcm9tCisgKiAgICAgICAgICAgICAgICAgICAgICAwIDw9IHN0cmVhbTEgPCBudW1iZXIgb2Ygb3V0cHV0IHN0cmVhbXMuCisgKiAgICAgIHN0cmVhbTI6ICAgICAgICBJbnB1dCBzdHJlYW0gaW5kZXggb24gc2Vjb25kIG5vZGUuIFZhbHVlIG11c3QgcmFuZ2UKKyAqICAgICAgICAgICAgICAgICAgICAgIGZyb20gMCA8PSBzdHJlYW0yIDwgbnVtYmVyIG9mIGlucHV0IHN0cmVhbXMuCisgKiAgICAgIHBhdHRyczogICAgICAgICBTdHJlYW0gYXR0cmlidXRlcyAoTlVMTCA9PT4gdXNlIGRlZmF1bHRzKS4KKyAqICAgICAgY29ubl9wYXJhbTogICAgIEEgcG9pbnRlciB0byBhIGRzcF9jYmRhdGEgc3RydWN0dXJlIHRoYXQgZGVmaW5lcworICogICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBwYXJhbWV0ZXIgZm9yIGRldmljZSBub2RlcyB0byBwYXNzIHRvIERTUAorICogICAgICAgICAgICAgICAgICAgICAgc2lkZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSB2YWx1ZSBvZiB0aGlzIHBhcmFtZXRlciBpcyBOVUxMLCB0aGVuIHRoaXMgQVBJCisgKiAgICAgICAgICAgICAgICAgICAgICBiZWhhdmVzIGxpa2UgRFNQTm9kZV9Db25uZWN0LiBUaGlzIHBhcmFtZXRlciB3aWxsIGhhdmUKKyAqICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGFuZCB0aGUgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZyBpbgorICogICAgICAgICAgICAgICAgICAgICAgZHNwX2NiZGF0YSBzdHJ1Y3QuIFRoaXMgY2FuIGJlIGV4dGVuZGVkIGluIGZ1dHVyZSB0cAorICogICAgICAgICAgICAgICAgICAgICAgcGFzcyBiaW5hcnkgZGF0YS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICAgICAgICAgIEludmFsaWQgbm9kZTEgb3Igbm9kZTIuCisgKiAgICAgIC1FTk9NRU06ICAgICAgICAgICAgSW5zdWZmaWNpZW50IGhvc3QgbWVtb3J5LgorICogICAgICAtRUlOVkFMOiAgICAgICAgICAgICBBIHN0cmVhbSBpbmRleCBwYXJhbWV0ZXIgaXMgaW52YWxpZC4KKyAqICAgICAgLUVJU0NPTk46ICBBIGNvbm5lY3Rpb24gYWxyZWFkeSBleGlzdHMgZm9yIG9uZSBvZiB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlcyBzdHJlYW0xIG9yIHN0cmVhbTIuCisgKiAgICAgIC1FQkFEUjogICAgICAgIEVpdGhlciBub2RlMSBvciBub2RlMiBpcyBub3QgaW4gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PREVfQUxMT0NBVEVEIHN0YXRlLgorICogICAgICAtRUNPTk5SRUZVU0VEOiBObyBtb3JlIGNvbm5lY3Rpb25zIGF2YWlsYWJsZS4KKyAqICAgICAgLUVQRVJNOiAgICAgICAgICAgICAgQXR0ZW1wdCB0byBtYWtlIGFuIGlsbGVnYWwgY29ubmVjdGlvbiAoZWcsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldmljZSBub2RlIHRvIGRldmljZSBub2RlLCBvciBkZXZpY2Ugbm9kZSB0bworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUFApLCB0aGUgdHdvIG5vZGVzIGFyZSBvbiBkaWZmZXJlbnQgRFNQcy4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgbm9kZV9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IG5vZGVfY29ubmVjdChzdHJ1Y3Qgbm9kZV9vYmplY3QgKm5vZGUxLAorCQkJICAgICAgIHUzMiBzdHJlYW0xLAorCQkJICAgICAgIHN0cnVjdCBub2RlX29iamVjdCAqbm9kZTIsCisJCQkgICAgICAgdTMyIHN0cmVhbTIsCisJCQkgICAgICAgc3RydWN0IGRzcF9zdHJtYXR0ciAqcGF0dHJzLAorCQkJICAgICAgIHN0cnVjdCBkc3BfY2JkYXRhCisJCQkgICAgICAgKmNvbm5fcGFyYW0pOworCisvKgorICogID09PT09PT09IG5vZGVfY3JlYXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ3JlYXRlIGEgbm9kZSBvbiB0aGUgRFNQIGJ5IHJlbW90ZWx5IGNhbGxpbmcgdGhlIG5vZGUncyBjcmVhdGUKKyAqICAgICAgZnVuY3Rpb24uIElmIG5lY2Vzc2FyeSwgbG9hZCBjb2RlIHRoYXQgY29udGFpbnMgdGhlIG5vZGUncyBjcmVhdGUKKyAqICAgICAgZnVuY3Rpb24uCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaG5vZGU6ICAgICAgICAgICAgICBOb2RlIGhhbmRsZSByZXR1cm5lZCBmcm9tIG5vZGVfYWxsb2NhdGUoKS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6ICAgICAgICBJbnZhbGlkIGhub2RlLgorICogICAgICAtRVNQSVBFOiAgICAgICAgQ3JlYXRlIGZ1bmN0aW9uIG5vdCBmb3VuZCBpbiB0aGUgQ09GRiBmaWxlLgorICogICAgICAtRUJBRFI6ICAgIE5vZGUgaXMgbm90IGluIHRoZSBOT0RFX0FMTE9DQVRFRCBzdGF0ZS4KKyAqICAgICAgLUVOT01FTTogICAgICAgIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgb24gdGhlIERTUC4KKyAqICAgICAgLUVUSU1FOiAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgYmVmb3JlIHRoZSBEU1AgcmVzcG9uZGVkLgorICogICAgICAtRVBFUk06ICAgICAgICAgIEEgZmFpbHVyZSBvY2N1cnJlZCwgdW5hYmxlIHRvIGNyZWF0ZSBub2RlLgorICogIFJlcXVpcmVzOgorICogICAgICBub2RlX2luaXQodm9pZCkgY2FsbGVkLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgbm9kZV9jcmVhdGUoc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSk7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9jcmVhdGVfbWdyID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ3JlYXRlIGEgTk9ERSBNYW5hZ2VyIG9iamVjdC4gVGhpcyBvYmplY3QgaGFuZGxlcyB0aGUgY3JlYXRpb24sCisgKiAgICAgIGRlbGV0aW9uLCBhbmQgZXhlY3V0aW9uIG9mIG5vZGVzIG9uIHRoZSBEU1AgdGFyZ2V0LiBUaGUgTk9ERSBNYW5hZ2VyCisgKiAgICAgIGFsc28gbWFpbnRhaW5zIGEgcGlwZSBtYXAgb2YgdXNlZCBhbmQgYXZhaWxhYmxlIG5vZGUgY29ubmVjdGlvbnMuCisgKiAgICAgIEVhY2ggREVWIG9iamVjdCBzaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBOT0RFIE1hbmFnZXIgb2JqZWN0LgorICoKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBub2RlX21hbjogICAgICAgTG9jYXRpb24gdG8gc3RvcmUgbm9kZSBtYW5hZ2VyIGhhbmRsZSBvbiBvdXRwdXQuCisgKiAgICAgIGhkZXZfb2JqOiAgICAgRGV2aWNlIGZvciB0aGlzIHByb2Nlc3Nvci4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2VzczsKKyAqICAgICAgLUVOT01FTTogICAgSW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgcmVxdWVzdGVkIHJlc291cmNlcy4KKyAqICAgICAgLUVQRVJNOiAgICAgIEdlbmVyYWwgZmFpbHVyZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgbm9kZV9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgbm9kZV9tYW4gIT0gTlVMTC4KKyAqICAgICAgaGRldl9vYmogIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgVmFsaWRlICpub2RlX21hbi4KKyAqICAgICAgZXJyb3I6ICAgICAgICAgICpub2RlX21hbiA9PSBOVUxMLgorICovCitleHRlcm4gaW50IG5vZGVfY3JlYXRlX21ncihzdHJ1Y3Qgbm9kZV9tZ3IgKipub2RlX21hbiwKKwkJCQkgIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaik7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9kZWxldGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEZWxldGUgcmVzb3VyY2VzIGFsbG9jYXRlZCBpbiBub2RlX2FsbG9jYXRlKCkuIElmIHRoZSBub2RlIHdhcworICogICAgICBjcmVhdGVkLCBkZWxldGUgdGhlIG5vZGUgb24gdGhlIERTUCBieSByZW1vdGVseSBjYWxsaW5nIHRoZSBub2RlJ3MKKyAqICAgICAgZGVsZXRlIGZ1bmN0aW9uLiBMb2FkcyB0aGUgbm9kZSdzIGRlbGV0ZSBmdW5jdGlvbiBpZiBuZWNlc3NhcnkuCisgKiAgICAgIEdQUCBzaWRlIHJlc291cmNlcyBhcmUgZnJlZWQgYWZ0ZXIgbm9kZSdzIGRlbGV0ZSBmdW5jdGlvbiByZXR1cm5zLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIG5vZGVyZXM6ICAgICAgICAgICAgICBOb2RlIHJlc291cmNlIGluZm8gaGFuZGxlIHJldHVybmVkIGZyb20KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZV9hbGxvY2F0ZSgpLgorICogICAgICBwcl9jdHh0OiAgICAgICAgICAgICAgICBQb25pbnRlciB0byBwcm9jZXNzIGNvbnRleHQgZGF0YS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6ICAgICAgICBJbnZhbGlkIGhub2RlLgorICogICAgICAtRVRJTUU6ICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBiZWZvcmUgdGhlIERTUCByZXNwb25kZWQuCisgKiAgICAgIC1FUEVSTTogICAgICAgICAgQSBmYWlsdXJlIG9jY3VycmVkIGluIGRlbGV0aW5nIHRoZSBub2RlLgorICogICAgICAtRVNQSVBFOiAgICAgICAgRGVsZXRlIGZ1bmN0aW9uIG5vdCBmb3VuZCBpbiB0aGUgQ09GRiBmaWxlLgorICogIFJlcXVpcmVzOgorICogICAgICBub2RlX2luaXQodm9pZCkgY2FsbGVkLgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAgICAgICAgICAgaG5vZGUgaXMgaW52YWxpZC4KKyAqLworZXh0ZXJuIGludCBub2RlX2RlbGV0ZShzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICpub2RlcmVzLAorCQkJICAgICAgc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCk7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9kZWxldGVfbWdyID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGVsZXRlIHRoZSBOT0RFIE1hbmFnZXIuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaG5vZGVfbWdyOiAgICAgICBOb2RlIG1hbmFnZXIgb2JqZWN0LgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogIFJlcXVpcmVzOgorICogICAgICBub2RlX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBWYWxpZCBobm9kZV9tZ3IuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBub2RlX2RlbGV0ZV9tZ3Ioc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3IpOworCisvKgorICogID09PT09PT09IG5vZGVfZW51bV9ub2RlcyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEVudW1lcmF0ZSB0aGUgbm9kZXMgY3VycmVudGx5IGFsbG9jYXRlZCBmb3IgdGhlIERTUC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBobm9kZV9tZ3I6ICAgICAgIE5vZGUgbWFuYWdlciByZXR1cm5lZCBmcm9tIG5vZGVfY3JlYXRlX21ncigpLgorICogICAgICBub2RlX3RhYjogICAgICAgQXJyYXkgdG8gY29weSBub2RlIGhhbmRsZXMgaW50by4KKyAqICAgICAgbm9kZV90YWJfc2l6ZTogICBOdW1iZXIgb2YgaGFuZGxlcyB0aGF0IGNhbiBiZSB3cml0dGVuIHRvIG5vZGVfdGFiLgorICogICAgICBwdV9udW1fbm9kZXM6ICAgICBMb2NhdGlvbiB3aGVyZSBudW1iZXIgb2Ygbm9kZSBoYW5kbGVzIHdyaXR0ZW4gdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIG5vZGVfdGFiIHdpbGwgYmUgd3JpdHRlbi4KKyAqICAgICAgcHVfYWxsb2NhdGVkOiAgICBMb2NhdGlvbiB0byB3cml0ZSB0b3RhbCBudW1iZXIgb2YgYWxsb2NhdGVkIG5vZGVzLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUlOVkFMOiAgICAgIG5vZGVfdGFiIGlzIHRvbyBzbWFsbCB0byBob2xkIGFsbCBub2RlIGhhbmRsZXMuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIFZhbGlkIGhub2RlX21nci4KKyAqICAgICAgbm9kZV90YWIgIT0gTlVMTCB8fCBub2RlX3RhYl9zaXplID09IDAuCisgKiAgICAgIHB1X251bV9ub2RlcyAhPSBOVUxMLgorICogICAgICBwdV9hbGxvY2F0ZWQgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICogICAgICAtICgtRUlOVkFMICYmICpwdV9udW1fbm9kZXMgPT0gMCkKKyAqICAgICAgLSB8fCAoMCAmJiAqcHVfbnVtX25vZGVzIDw9IG5vZGVfdGFiX3NpemUpICAmJgorICogICAgICAgICgqcHVfYWxsb2NhdGVkID09ICpwdV9udW1fbm9kZXMpCisgKi8KK2V4dGVybiBpbnQgbm9kZV9lbnVtX25vZGVzKHN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyLAorCQkJCSAgdm9pZCAqKm5vZGVfdGFiLAorCQkJCSAgdTMyIG5vZGVfdGFiX3NpemUsCisJCQkJICB1MzIgKnB1X251bV9ub2RlcywKKwkJCQkgIHUzMiAqcHVfYWxsb2NhdGVkKTsKKworLyoKKyAqICA9PT09PT09PSBub2RlX2V4aXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEaXNjb250aW51ZSB1c2FnZSBvZiBOT0RFIG1vZHVsZS4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIG5vZGVfaW5pdCh2b2lkKSBzdWNjZXNzZnVsbHkgY2FsbGVkIGJlZm9yZS4KKyAqICBFbnN1cmVzOgorICogICAgICBBbnkgcmVzb3VyY2VzIGFjcXVpcmVkIGluIG5vZGVfaW5pdCh2b2lkKSB3aWxsIGJlIGZyZWVkIHdoZW4gbGFzdCBOT0RFCisgKiAgICAgIGNsaWVudCBjYWxscyBub2RlX2V4aXQodm9pZCkuCisgKi8KK2V4dGVybiB2b2lkIG5vZGVfZXhpdCh2b2lkKTsKKworLyoKKyAqICA9PT09PT09PSBub2RlX2ZyZWVfbXNnX2J1ZiA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEZyZWUgYSBtZXNzYWdlIGJ1ZmZlciBwcmV2aW91c2x5IGFsbG9jYXRlZCB3aXRoIG5vZGVfYWxsb2NfbXNnX2J1Zi4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBobm9kZTogICAgICAgICAgVGhlIG5vZGUgaGFuZGxlLgorICogICAgICBwYnVmZmVyOiAgICAgICAgKEFkZHJlc3MpIEJ1ZmZlciBhbGxvY2F0ZWQgYnkgbm9kZV9hbGxvY19tc2dfYnVmLgorICogICAgICBwYXR0cjogICAgICAgICAgU2FtZSBidWZmZXIgYXR0cmlidXRlcyBwYXNzZWQgdG8gbm9kZV9hbGxvY19tc2dfYnVmLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIG5vZGUgaGFuZGxlLgorICogICAgICAtRVBFUk06ICAgICAgRmFpbHVyZSB0byBmcmVlIHRoZSBidWZmZXIuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIG5vZGVfaW5pdCh2b2lkKSBjYWxsZWQuCisgKiAgICAgIHBidWZmZXIgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IG5vZGVfZnJlZV9tc2dfYnVmKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQkJICAgIHU4ICpwYnVmZmVyLAorCQkJCSAgICBzdHJ1Y3QgZHNwX2J1ZmZlcmF0dHIKKwkJCQkgICAgKnBhdHRyKTsKKworLyoKKyAqICA9PT09PT09PSBub2RlX2dldF9hdHRyID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ29weSB0aGUgY3VycmVudCBhdHRyaWJ1dGVzIG9mIHRoZSBzcGVjaWZpZWQgbm9kZSBpbnRvIGEgZHNwX25vZGVhdHRyCisgKiAgICAgIHN0cnVjdHVyZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBobm9kZTogICAgICAgICAgTm9kZSBvYmplY3QgYWxsb2NhdGVkIGZyb20gbm9kZV9hbGxvY2F0ZSgpLgorICogICAgICBwYXR0cjogICAgICAgICAgUG9pbnRlciB0byBkc3Bfbm9kZWF0dHIgc3RydWN0dXJlIHRvIGNvcHkgbm9kZSdzCisgKiAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLgorICogICAgICBhdHRyX3NpemU6ICAgICAgU2l6ZSBvZiBwYXR0ci4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBobm9kZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgbm9kZV9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgcGF0dHIgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgKnBhdHRycyBjb250YWlucyB0aGUgbm9kZSdzIGN1cnJlbnQgYXR0cmlidXRlcy4KKyAqLworZXh0ZXJuIGludCBub2RlX2dldF9hdHRyKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQkJc3RydWN0IGRzcF9ub2RlYXR0ciAqcGF0dHIsIHUzMiBhdHRyX3NpemUpOworCisvKgorICogID09PT09PT09IG5vZGVfZ2V0X21lc3NhZ2UgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSBhIG1lc3NhZ2UgZnJvbSBhIG5vZGUgb24gdGhlIERTUC4gVGhlIG5vZGUgbXVzdCBiZSBlaXRoZXIgYQorICogICAgICBtZXNzYWdlIG5vZGUsIHRhc2sgbm9kZSwgb3IgWERBSVMgc29ja2V0IG5vZGUuCisgKiAgICAgIElmIGEgbWVzc2FnZSBpcyBub3QgYXZhaWxhYmxlLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdW50aWwgYQorICogICAgICBtZXNzYWdlIGlzIGF2YWlsYWJsZSwgb3IgdGhlIG5vZGUncyB0aW1lb3V0IHZhbHVlIGlzIHJlYWNoZWQuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaG5vZGU6ICAgICAgICAgIE5vZGUgaGFuZGxlIHJldHVybmVkIGZyb20gbm9kZV9hbGxvY2F0ZSgpLgorICogICAgICBtZXNzYWdlOiAgICAgICBQb2ludGVyIHRvIGRzcF9tc2cgc3RydWN0dXJlIHRvIGNvcHkgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIGludG8uCisgKiAgICAgIHV0aW1lb3V0OiAgICAgICBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciBtZXNzYWdlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGhub2RlLgorICogICAgICAtRVBFUk06IENhbm5vdCByZXRyaWV2ZSBtZXNzYWdlcyBmcm9tIHRoaXMgdHlwZSBvZiBub2RlLgorICogICAgICAgICAgICAgIEVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byByZXRyaWV2ZSBhIG1lc3NhZ2UuCisgKiAgICAgIC1FVElNRTogICBUaW1lb3V0IG9jY3VycmVkIGFuZCBubyBtZXNzYWdlIGlzIGF2YWlsYWJsZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgbm9kZV9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgbWVzc2FnZSAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgbm9kZV9nZXRfbWVzc2FnZShzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLAorCQkJCSAgIHN0cnVjdCBkc3BfbXNnICptZXNzYWdlLCB1MzIgdXRpbWVvdXQpOworCisvKgorICogID09PT09PT09IG5vZGVfZ2V0X25sZHJfb2JqID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIE5sZHIgbWFuYWdlcgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhub2RlX21ncjogICAgICAgTm9kZSBNYW5hZ2VyCisgKiAgICAgIG5sZHJfb3ZseW9iajogICBQb2ludGVyIHRvIGEgTmxkciBtYW5hZ2VyIGhhbmRsZQorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGhub2RlLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgbm9kZV9nZXRfbmxkcl9vYmooc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3IsCisJCQkJICAgIHN0cnVjdCBubGRyX29iamVjdCAqKm5sZHJfb3ZseW9iaik7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZSB0aGUgTk9ERSBtb2R1bGUuCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogICAgICBUUlVFIGlmIGluaXRpYWxpemF0aW9uIHN1Y2NlZWRlZCwgRkFMU0Ugb3RoZXJ3aXNlLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBib29sIG5vZGVfaW5pdCh2b2lkKTsKKworLyoKKyAqICA9PT09PT09PSBub2RlX29uX2V4aXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBHZXRzIGNhbGxlZCB3aGVuIFJNU19FWElUIGlzIHJlY2VpdmVkIGZvciBhIG5vZGUuIFBST0MgbmVlZHMgdG8gcGFzcworICogICAgICB0aGlzIGZ1bmN0aW9uIGFzIGEgcGFyYW1ldGVyIHRvIG1zZ19jcmVhdGUoKS4gVGhpcyBmdW5jdGlvbiB0aGVuIGdldHMKKyAqICAgICAgY2FsbGVkIGJ5IHRoZSBCcmlkZ2UgZHJpdmVyIHdoZW4gYW4gZXhpdCBtZXNzYWdlIGZvciBhIG5vZGUgaXMgcmVjZWl2ZWQuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaG5vZGU6ICAgICAgSGFuZGxlIG9mIHRoZSBub2RlIHRoYXQgdGhlIGV4aXQgbWVzc2FnZSBpcyBmb3IuCisgKiAgICAgIG5vZGVfc3RhdHVzOiAgICBSZXR1cm4gc3RhdHVzIG9mIHRoZSBub2RlJ3MgZXhlY3V0ZSBwaGFzZS4KKyAqICBSZXR1cm5zOgorICogIEVuc3VyZXM6CisgKi8KK3ZvaWQgbm9kZV9vbl9leGl0KHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsIHMzMiBub2RlX3N0YXR1cyk7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9wYXVzZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFN1c3BlbmQgZXhlY3V0aW9uIG9mIGEgbm9kZSBjdXJyZW50bHkgcnVubmluZyBvbiB0aGUgRFNQLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhub2RlOiAgICAgICAgICAgICAgTm9kZSBvYmplY3QgcmVwcmVzZW50aW5nIGEgbm9kZSBjdXJyZW50bHkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIG9uIHRoZSBEU1AuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICAgICAgSW52YWxpZCBobm9kZS4KKyAqICAgICAgLUVQRVJNOiBOb2RlIGlzIG5vdCBhIHRhc2sgb3Igc29ja2V0IG5vZGUuCisgKiAgICAgICAgICAgICAgRmFpbGVkIHRvIHBhdXNlIG5vZGUuCisgKiAgICAgIC1FVElNRTogICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGJlZm9yZSB0aGUgRFNQIHJlc3BvbmRlZC4KKyAqICAgICAgRFNQX0VXUk9OR1NUU0FURTogICBOb2RlIGlzIG5vdCBpbiBOT0RFX1JVTk5JTkcgc3RhdGUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIG5vZGVfaW5pdCh2b2lkKSBjYWxsZWQuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBub2RlX3BhdXNlKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUpOworCisvKgorICogID09PT09PT09IG5vZGVfcHV0X21lc3NhZ2UgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTZW5kIGEgbWVzc2FnZSB0byBhIG1lc3NhZ2Ugbm9kZSwgdGFzayBub2RlLCBvciBYREFJUyBzb2NrZXQgbm9kZS4KKyAqICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGJsb2NrIHVudGlsIHRoZSBtZXNzYWdlIHN0cmVhbSBjYW4gYWNjb21tb2RhdGUKKyAqICAgICAgdGhlIG1lc3NhZ2UsIG9yIGEgdGltZW91dCBvY2N1cnMuIFRoZSBtZXNzYWdlIHdpbGwgYmUgY29waWVkLCBzbyBNc2cKKyAqICAgICAgY2FuIGJlIHJlLXVzZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgcmV0dXJuLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhub2RlOiAgICAgICAgICAgICAgTm9kZSBoYW5kbGUgcmV0dXJuZWQgYnkgbm9kZV9hbGxvY2F0ZSgpLgorICogICAgICBwbXNnOiAgICAgICAgICAgICAgIExvY2F0aW9uIG9mIG1lc3NhZ2UgdG8gYmUgc2VudCB0byB0aGUgbm9kZS4KKyAqICAgICAgdXRpbWVvdXQ6ICAgICAgICAgICBUaW1lb3V0IGluIG1zZWNzIHRvIHdhaXQuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICAgICAgSW52YWxpZCBobm9kZS4KKyAqICAgICAgLUVQRVJNOiBNZXNzYWdlcyBjYW4ndCBiZSBzZW50IHRvIHRoaXMgdHlwZSBvZiBub2RlLgorICogICAgICAgICAgICAgIFVuYWJsZSB0byBzZW5kIG1lc3NhZ2UuCisgKiAgICAgIC1FVElNRTogICAgICAgVGltZW91dCBvY2N1cnJlZCBiZWZvcmUgbWVzc2FnZSBjb3VsZCBiZSBzZXQuCisgKiAgICAgIC1FQkFEUjogICAgTm9kZSBpcyBpbiBpbnZhbGlkIHN0YXRlIGZvciBzZW5kaW5nIG1lc3NhZ2VzLgorICogIFJlcXVpcmVzOgorICogICAgICBub2RlX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBwbXNnICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBub2RlX3B1dF9tZXNzYWdlKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQkJICAgY29uc3Qgc3RydWN0IGRzcF9tc2cgKnBtc2csIHUzMiB1dGltZW91dCk7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9yZWdpc3Rlcl9ub3RpZnkgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZWdpc3RlciB0byBiZSBub3RpZmllZCBvbiBzcGVjaWZpYyBldmVudHMgZm9yIHRoaXMgbm9kZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBobm9kZTogICAgICAgICAgTm9kZSBoYW5kbGUgcmV0dXJuZWQgYnkgbm9kZV9hbGxvY2F0ZSgpLgorICogICAgICBldmVudF9tYXNrOiAgICAgTWFzayBvZiB0eXBlcyBvZiBldmVudHMgdG8gYmUgbm90aWZpZWQgYWJvdXQuCisgKiAgICAgIG5vdGlmeV90eXBlOiAgICBUeXBlIG9mIG5vdGlmaWNhdGlvbiB0byBiZSBzZW50LgorICogICAgICBobm90aWZpY2F0aW9uOiAgSGFuZGxlIHRvIGJlIHVzZWQgZm9yIG5vdGlmaWNhdGlvbi4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBobm9kZS4KKyAqICAgICAgLUVOT01FTTogICAgSW5zdWZmaWNpZW50IG1lbW9yeSBvbiBHUFAuCisgKiAgICAgIC1FSU5WQUw6ICAgICBldmVudF9tYXNrIGlzIGludmFsaWQuCisgKiAgICAgIC1FTk9TWVM6ICAgTm90aWZpY2F0aW9uIHR5cGUgc3BlY2lmaWVkIGJ5IG5vdGlmeV90eXBlIGlzIG5vdAorICogICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkLgorICogIFJlcXVpcmVzOgorICogICAgICBub2RlX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBobm90aWZpY2F0aW9uICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBub2RlX3JlZ2lzdGVyX25vdGlmeShzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLAorCQkJCSAgICAgICB1MzIgZXZlbnRfbWFzaywgdTMyIG5vdGlmeV90eXBlLAorCQkJCSAgICAgICBzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbgorCQkJCSAgICAgICAqaG5vdGlmaWNhdGlvbik7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9ydW4gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTdGFydCBleGVjdXRpb24gb2YgYSBub2RlJ3MgZXhlY3V0ZSBwaGFzZSwgb3IgcmVzdW1lIGV4ZWN1dGlvbiBvZgorICogICAgICBhIG5vZGUgdGhhdCBoYXMgYmVlbiBzdXNwZW5kZWQgKHZpYSBub2RlX3BhdXNlKCkpIG9uIHRoZSBEU1AuIExvYWQKKyAqICAgICAgdGhlIG5vZGUncyBleGVjdXRlIGZ1bmN0aW9uIGlmIG5lY2Vzc2FyeS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBobm9kZTogICAgICAgICAgICAgIE5vZGUgb2JqZWN0IHJlcHJlc2VudGluZyBhIG5vZGUgY3VycmVudGx5CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyBvbiB0aGUgRFNQLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogICAgICAgIEludmFsaWQgaG5vZGUuCisgKiAgICAgIC1FUEVSTTogaG5vZGUgZG9lc24ndCByZXByZXNlbnQgYSBtZXNzYWdlLCB0YXNrIG9yIGRhaXMgc29ja2V0IG5vZGUuCisgKiAgICAgICAgICAgICAgVW5hYmxlIHRvIHN0YXJ0IG9yIHJlc3VtZSBleGVjdXRpb24uCisgKiAgICAgIC1FVElNRTogICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGJlZm9yZSB0aGUgRFNQIHJlc3BvbmRlZC4KKyAqICAgICAgRFNQX0VXUk9OR1NUU0FURTogICBOb2RlIGlzIG5vdCBpbiBOT0RFX1BBVVNFRCBvciBOT0RFX0NSRUFURUQgc3RhdGUuCisgKiAgICAgIC1FU1BJUEU6ICAgICAgICBFeGVjdXRlIGZ1bmN0aW9uIG5vdCBmb3VuZCBpbiB0aGUgQ09GRiBmaWxlLgorICogIFJlcXVpcmVzOgorICogICAgICBub2RlX2luaXQodm9pZCkgY2FsbGVkLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgbm9kZV9ydW4oc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSk7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV90ZXJtaW5hdGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTaWduYWwgYSBub2RlIHJ1bm5pbmcgb24gdGhlIERTUCB0aGF0IGl0IHNob3VsZCBleGl0IGl0cyBleGVjdXRlCisgKiAgICAgIHBoYXNlIGZ1bmN0aW9uLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhub2RlOiAgICAgICAgICAgICAgTm9kZSBvYmplY3QgcmVwcmVzZW50aW5nIGEgbm9kZSBjdXJyZW50bHkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIG9uIHRoZSBEU1AuCisgKiAgICAgIHBzdGF0dXM6ICAgICAgICAgICAgTG9jYXRpb24gdG8gc3RvcmUgZXhlY3V0ZS1waGFzZSBmdW5jdGlvbiByZXR1cm4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6ICAgICAgICBJbnZhbGlkIGhub2RlLgorICogICAgICAtRVRJTUU6ICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBiZWZvcmUgdGhlIERTUCByZXNwb25kZWQuCisgKiAgICAgIC1FUEVSTTogVHlwZSBvZiBub2RlIHNwZWNpZmllZCBjYW5ub3QgYmUgdGVybWluYXRlZC4KKyAqICAgICAgICAgICAgICBVbmFibGUgdG8gdGVybWluYXRlIHRoZSBub2RlLgorICogICAgICAtRUJBRFI6ICAgIE9wZXJhdGlvbiBub3QgdmFsaWQgZm9yIHRoZSBjdXJyZW50IG5vZGUgc3RhdGUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIG5vZGVfaW5pdCh2b2lkKSBjYWxsZWQuCisgKiAgICAgIHBzdGF0dXMgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IG5vZGVfdGVybWluYXRlKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQkJIGludCAqcHN0YXR1cyk7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9nZXRfdXVpZF9wcm9wcyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEZldGNoIE5vZGUgcHJvcGVydGllcyBnaXZlbiB0aGUgVVVJRAorICogIFBhcmFtZXRlcnM6CisgKgorICovCitleHRlcm4gaW50IG5vZGVfZ2V0X3V1aWRfcHJvcHModm9pZCAqaHByb2Nlc3NvciwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgZHNwX3V1aWQgKm5vZGVfdXVpZCwKKwkJCQkgICAgICBzdHJ1Y3QgZHNwX25kYnByb3BzCisJCQkJICAgICAgKm5vZGVfcHJvcHMpOworCisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0JBQ0tUUkFDRQorLyoqCisgKiBub2RlX2ZpbmRfYWRkcigpIC0gRmluZCB0aGUgY2xvc2VzdCBzeW1ib2wgdG8gdGhlIGdpdmVuIGFkZHJlc3MuCisgKgorICogQG5vZGVfbWdyOgkJTm9kZSBtYW5hZ2VyIGhhbmRsZQorICogQHN5bV9hZGRyOgkJR2l2ZW4gYWRkcmVzcyB0byBmaW5kIHRoZSBjbG9zZXN0IHN5bWJvbAorICogQG9mZnNldF9yYW5nZToJCW9mZnNldCByYW5nZSB0byBsb29rIGZvIHRoZSBjbG9zZXN0IHN5bWJvbAorICogQHN5bV9hZGRyX291dHB1dDoJU3ltYm9sIE91dHB1dCBhZGRyZXNzCisgKiBAc3ltX25hbWU6CQlTdHJpbmcgd2l0aCB0aGUgc3ltYm9sIG5hbWUgb2YgdGhlIGNsb3Nlc3Qgc3ltYm9sCisgKgorICogCVRoaXMgZnVuY3Rpb24gZmluZHMgdGhlIGNsb3Nlc3Qgc3ltYm9sIHRvIHRoZSBhZGRyZXNzIHdoZXJlIGEgTU1VCisgKglGYXVsdCBvY2N1cnJlZCBvbiB0aGUgRFNQIHNpZGUuCisgKi8KK2ludCBub2RlX2ZpbmRfYWRkcihzdHJ1Y3Qgbm9kZV9tZ3IgKm5vZGVfbWdyLCB1MzIgc3ltX2FkZHIsCisJCQkJdTMyIG9mZnNldF9yYW5nZSwgdm9pZCAqc3ltX2FkZHJfb3V0cHV0LAorCQkJCWNoYXIgKnN5bV9uYW1lKTsKKworZW51bSBub2RlX3N0YXRlIG5vZGVfZ2V0X3N0YXRlKHZvaWQgKmhub2RlKTsKKyNlbmRpZgorCisjZW5kaWYgLyogTk9ERV8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ub2RlZGVmcy5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL25vZGVkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI5NjIzZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ub2RlZGVmcy5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBub2RlZGVmcy5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIEdsb2JhbCBOT0RFIGNvbnN0YW50cyBhbmQgdHlwZXMsIHNoYXJlZCBieSBQUk9DRVNTT1IsIE5PREUsIGFuZCBESVNQLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgTk9ERURFRlNfCisjZGVmaW5lIE5PREVERUZTXworCisjZGVmaW5lIE5PREVfU1VTUEVOREVEUFJJIC0xCisKKy8qIE5PREUgT2JqZWN0czogKi8KK3N0cnVjdCBub2RlX21ncjsKK3N0cnVjdCBub2RlX29iamVjdDsKKworI2VuZGlmIC8qIE5PREVERUZTXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL25vZGVwcml2LmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvbm9kZXByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmIwMjMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL25vZGVwcml2LmgKQEAgLTAsMCArMSwxODIgQEAKKy8qCisgKiBub2RlcHJpdi5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIFByaXZhdGUgbm9kZSBoZWFkZXIgc2hhcmVkIGJ5IE5PREUgYW5kIERJU1AuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBOT0RFUFJJVl8KKyNkZWZpbmUgTk9ERVBSSVZfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2Uvc3RybWRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvbm9kZWRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvbmxkcmRlZnMuaD4KKworLyogRFNQIGFkZHJlc3Mgb2Ygbm9kZSBlbnZpcm9ubWVudCBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgdTMyIG5vZGVlbnY7CisKKy8qCisgKiAgTm9kZSBjcmVhdGUgc3RydWN0dXJlcworICovCisKKy8qIE1lc3NhZ2Ugbm9kZSAqLworc3RydWN0IG5vZGVfbXNnYXJncyB7CisJdTMyIG1heF9tc2dzOwkJLyogTWF4ICMgb2Ygc2ltdWx0YW5lb3VzIG1lc3NhZ2VzIGZvciBub2RlICovCisJdTMyIHNlZ19pZDsJCS8qIFNlZ21lbnQgZm9yIGFsbG9jYXRpbmcgbWVzc2FnZSBidWZmZXJzICovCisJdTMyIG5vdGlmeV90eXBlOwkvKiBOb3RpZnkgdHlwZSAoU0VNX3Bvc3QsIFNXSV9wb3N0LCBldGMuKSAqLworCXUzMiBhcmdfbGVuZ3RoOwkJLyogTGVuZ3RoIGluIDMyLWJpdCB3b3JkcyBvZiBhcmcgZGF0YSBibG9jayAqLworCXU4ICpwZGF0YTsJCS8qIEFyZ3VtZW50IGRhdGEgZm9yIG5vZGUgKi8KK307CisKK3N0cnVjdCBub2RlX3N0cm1kZWYgeworCXUzMiBidWZfc2l6ZTsJCS8qIFNpemUgb2YgYnVmZmVycyBmb3IgU0lPIHN0cmVhbSAqLworCXUzMiBudW1fYnVmczsJCS8qIG1heCAjIG9mIGJ1ZmZlcnMgaW4gU0lPIHN0cmVhbSBhdCBvbmNlICovCisJdTMyIHNlZ19pZDsJCS8qIE1lbW9yeSBzZWdtZW50IGlkIHRvIGFsbG9jYXRlIGJ1ZmZlcnMgKi8KKwl1MzIgdXRpbWVvdXQ7CQkvKiBUaW1lb3V0IGZvciBibG9ja2luZyBTSU8gY2FsbHMgKi8KKwl1MzIgYnVmX2FsaWdubWVudDsJLyogQnVmZmVyIGFsaWdubWVudCAqLworCWNoYXIgKnN6X2RldmljZTsJLyogRGV2aWNlIG5hbWUgZm9yIHN0cmVhbSAqLworfTsKKworLyogVGFzayBub2RlICovCitzdHJ1Y3Qgbm9kZV90YXNrYXJncyB7CisJc3RydWN0IG5vZGVfbXNnYXJncyBub2RlX21zZ19hcmdzOworCXMzMiBwcmlvOworCXUzMiBzdGFja19zaXplOworCXUzMiBzeXNfc3RhY2tfc2l6ZTsKKwl1MzIgc3RhY2tfc2VnOworCXUzMiB1ZHNwX2hlYXBfcmVzX2FkZHI7CS8qIERTUCB2aXJ0dWFsIGhlYXAgYWRkcmVzcyAqLworCXUzMiB1ZHNwX2hlYXBfYWRkcjsJLyogRFNQIHZpcnR1YWwgaGVhcCBhZGRyZXNzICovCisJdTMyIGhlYXBfc2l6ZTsJCS8qIEhlYXAgc2l6ZSAqLworCXUzMiB1Z3BwX2hlYXBfYWRkcjsJLyogR1BQIHZpcnR1YWwgaGVhcCBhZGRyZXNzICovCisJdTMyIHByb2ZpbGVfaWQ7CQkvKiBQcm9maWxlIElEICovCisJdTMyIG51bV9pbnB1dHM7CisJdTMyIG51bV9vdXRwdXRzOworCXUzMiB1bF9kYWlzX2FyZzsJLyogQWRkcmVzcyBvZiBpQWxnIG9iamVjdCAqLworCXN0cnVjdCBub2RlX3N0cm1kZWYgKnN0cm1faW5fZGVmOworCXN0cnVjdCBub2RlX3N0cm1kZWYgKnN0cm1fb3V0X2RlZjsKK307CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9jcmVhdGVhcmdzID09PT09PT09CisgKi8KK3N0cnVjdCBub2RlX2NyZWF0ZWFyZ3MgeworCXVuaW9uIHsKKwkJc3RydWN0IG5vZGVfbXNnYXJncyBub2RlX21zZ19hcmdzOworCQlzdHJ1Y3Qgbm9kZV90YXNrYXJncyB0YXNrX2FyZ19vYmo7CisJfSBhc2E7Cit9OworCisvKgorICogID09PT09PT09IG5vZGVfZ2V0X2NoYW5uZWxfaWQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBHZXQgdGhlIGNoYW5uZWwgaW5kZXggcmVzZXJ2ZWQgZm9yIGEgc3RyZWFtIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUKKyAqICAgICAgaG9zdCBhbmQgYSBub2RlLiBUaGlzIGluZGV4IGlzIHJlc2VydmVkIHdoZW4gbm9kZV9jb25uZWN0KCkgaXMgY2FsbGVkCisgKiAgICAgIHRvIGNvbm5lY3QgdGhlIG5vZGUgd2l0aCB0aGUgaG9zdC4gVGhpcyBpbmRleCBzaG91bGQgYmUgcGFzc2VkIHRvCisgKiAgICAgIHRoZSBDSE5MX09wZW4gZnVuY3Rpb24gd2hlbiB0aGUgc3RyZWFtIGlzIGFjdHVhbGx5IG9wZW5lZC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBobm9kZTogICAgICAgICAgTm9kZSBvYmplY3QgYWxsb2NhdGVkIGZyb20gbm9kZV9hbGxvY2F0ZSgpLgorICogICAgICBkaXI6ICAgICAgICAgICBJbnB1dCAoRFNQX1RPTk9ERSkgb3Igb3V0cHV0IChEU1BfRlJPTU5PREUpLgorICogICAgICBpbmRleDogICAgICAgICBTdHJlYW0gaW5kZXguCisgKiAgICAgIGNoYW5faWQ6ICAgICAgICBMb2NhdGlvbiB0byBzdG9yZSBjaGFubmVsIGluZGV4LgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGhub2RlLgorICogICAgICAtRVBFUk06ICBOb3QgYSB0YXNrIG9yIERBSVMgc29ja2V0IG5vZGUuCisgKiAgICAgIC1FSU5WQUw6ICAgICBUaGUgbm9kZSdzIHN0cmVhbSBjb3JyZXNwb25kaW5nIHRvIGluZGV4IGFuZCBkaXIKKyAqICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBhIHN0cmVhbSB0byBvciBmcm9tIHRoZSBob3N0LgorICogIFJlcXVpcmVzOgorICogICAgICBub2RlX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBWYWxpZCBkaXIuCisgKiAgICAgIGNoYW5faWQgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IG5vZGVfZ2V0X2NoYW5uZWxfaWQoc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwKKwkJCQkgICAgICB1MzIgZGlyLCB1MzIgaW5kZXgsIHUzMiAqY2hhbl9pZCk7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9nZXRfc3RybV9tZ3IgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBHZXQgdGhlIFNUUk0gbWFuYWdlciBmb3IgYSBub2RlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhub2RlOiAgICAgICAgICBOb2RlIGFsbG9jYXRlZCB3aXRoIG5vZGVfYWxsb2NhdGUoKS4KKyAqICAgICAgc3RybV9tYW46ICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIFNUUk0gbWFuYWdlciBvbiBvdXRwdXQuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6ICAgIEludmFsaWQgaG5vZGUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIHN0cm1fbWFuICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBub2RlX2dldF9zdHJtX21ncihzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLAorCQkJCSAgICBzdHJ1Y3Qgc3RybV9tZ3IgKipzdHJtX21hbik7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9nZXRfdGltZW91dCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEdldCB0aGUgdGltZW91dCB2YWx1ZSBvZiBhIG5vZGUuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaG5vZGU6ICAgICAgTm9kZSBhbGxvY2F0ZWQgd2l0aCBub2RlX2FsbG9jYXRlKCksIG9yIERTUF9IR1BQTk9ERS4KKyAqICBSZXR1cm5zOgorICogICAgICBOb2RlJ3MgdGltZW91dCB2YWx1ZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgVmFsaWQgaG5vZGUuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIHUzMiBub2RlX2dldF90aW1lb3V0KHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUpOworCisvKgorICogID09PT09PT09IG5vZGVfZ2V0X3R5cGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBHZXQgdGhlIHR5cGUgKGRldmljZSwgbWVzc2FnZSwgdGFzaywgb3IgWERBSVMgc29ja2V0KSBvZiBhIG5vZGUuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaG5vZGU6ICAgICAgTm9kZSBhbGxvY2F0ZWQgd2l0aCBub2RlX2FsbG9jYXRlKCksIG9yIERTUF9IR1BQTk9ERS4KKyAqICBSZXR1cm5zOgorICogICAgICBOb2RlIHR5cGU6ICBOT0RFX0RFVklDRSwgTk9ERV9UQVNLLCBOT0RFX1hEQUlTLCBvciBOT0RFX0dQUC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgVmFsaWQgaG5vZGUuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGVudW0gbm9kZV90eXBlIG5vZGVfZ2V0X3R5cGUoc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSk7CisKKy8qCisgKiAgPT09PT09PT0gZ2V0X25vZGVfaW5mbyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEdldCBub2RlIGluZm9ybWF0aW9uIHdpdGhvdXQgaG9sZGluZyBzZW1hcGhvcmUuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaG5vZGU6ICAgICAgTm9kZSBhbGxvY2F0ZWQgd2l0aCBub2RlX2FsbG9jYXRlKCksIG9yIERTUF9IR1BQTk9ERS4KKyAqICBSZXR1cm5zOgorICogICAgICBOb2RlIGluZm86ICBwcmlvcml0eSwgZGV2aWNlIG93bmVyLCBuby4gb2Ygc3RyZWFtcywgZXhlY3V0aW9uIHN0YXRlCisgKiAgICAgICAgICAgICAgICAgIE5EQiBwcm9wZXJ0aWVzLgorICogIFJlcXVpcmVzOgorICogICAgICBWYWxpZCBobm9kZS4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gdm9pZCBnZXRfbm9kZV9pbmZvKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQkgIHN0cnVjdCBkc3Bfbm9kZWluZm8gKm5vZGVfaW5mbyk7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9nZXRfbG9hZF90eXBlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgR2V0IHRoZSBsb2FkIHR5cGUgKGR5bmFtaWMsIG92ZXJsYXksIHN0YXRpYykgb2YgYSBub2RlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhub2RlOiAgICAgIE5vZGUgYWxsb2NhdGVkIHdpdGggbm9kZV9hbGxvY2F0ZSgpLCBvciBEU1BfSEdQUE5PREUuCisgKiAgUmV0dXJuczoKKyAqICAgICAgTm9kZSB0eXBlOiAgTkxEUl9EWU5BTUlDTE9BRCwgTkxEUl9PVkxZTE9BRCwgTkxEUl9TVEFUSUNMT0FECisgKiAgUmVxdWlyZXM6CisgKiAgICAgIFZhbGlkIGhub2RlLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBlbnVtIG5sZHJfbG9hZHR5cGUgbm9kZV9nZXRfbG9hZF90eXBlKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUpOworCisjZW5kaWYgLyogTk9ERVBSSVZfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvbnRmeS5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL250ZnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmM4ODE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL250ZnkuaApAQCAtMCwwICsxLDIxNyBAQAorLyoKKyAqIG50ZnkuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBNYW5hZ2UgbGlzdHMgb2Ygbm90aWZpY2F0aW9uIGV2ZW50cy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIE5URllfCisjZGVmaW5lIE5URllfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvc3luYy5oPgorCisvKioKKyAqIG50Znlfb2JqZWN0IC0gaGVhZCBzdHJ1Y3R1cmUgdG8gbm9maWZ5IGRzcGJyaWRnZSBldmVudHMKKyAqIEBoZWFkOglMaXN0IG9mIG5vdGlmeSBvYmplY3RzCisgKiBAbnRmeV9sb2NrOglsb2NrIGZvciBsaXN0IGFjY2Vzcy4KKyAqCisgKi8KK3N0cnVjdCBudGZ5X29iamVjdCB7CisJc3RydWN0IHJhd19ub3RpZmllcl9oZWFkIGhlYWQ7LyogTGlzdCBvZiBub3RpZmllciBvYmplY3RzICovCisJc3BpbmxvY2tfdCBudGZ5X2xvY2s7CS8qIEZvciBjcml0aWNhbCBzZWN0aW9ucyAqLworfTsKKworLyoqCisgKiBudGZ5X2V2ZW50IC0gc3RydWN0dXJlIHN0b3JlIHNwZWNpZnkgZXZlbnQgdG8gYmUgbm90aWZpZWQKKyAqIEBub3RpX2Jsb2NrOglMaXN0IG9mIG5vdGlmeSBvYmplY3RzCisgKiBAZXZlbnQ6CWV2ZW50IHRoYXQgaXQgcmVzcG9uZAorICogQHR5cGU6IAlldmVudCB0eXBlIChvbmx5IERTUF9TSUdOQUxFVkVOVCBzdXBwb3J0ZWQpCisgKiBAc3luY19vYmo6CXN5bmNfZXZlbnQgdXNlZCB0byBzZXQgdGhlIGV2ZW50CisgKgorICovCitzdHJ1Y3QgbnRmeV9ldmVudCB7CisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG5vdGlfYmxvY2s7CisJdTMyIGV2ZW50OwkvKiBFdmVudHMgdG8gYmUgbm90aWZpZWQgYWJvdXQgKi8KKwl1MzIgdHlwZTsJLyogVHlwZSBvZiBub3RpZmljYXRpb24gdG8gYmUgc2VudCAqLworCXN0cnVjdCBzeW5jX29iamVjdCBzeW5jX29iajsKK307CisKKworLyoqCisgKiBkc3Bfbm90aWZpZXJfZXZlbnQoKSAtIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIG5vZml0eSBldmVudHMKKyAqIEB0aGlzOgkJcG9pbnRlciB0byBpdHNlbGYgc3RydWN0IG5vdGlmaWVyX2Jsb2NrCisgKiBAZXZlbnQ6CWV2ZW50IHRvIGJlIG5vdGlmaWVkLgorICogQGRhdGE6CQlDdXJyZW50bHkgbm90IHVzZWQuCisgKgorICovCitpbnQgZHNwX25vdGlmaWVyX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwKKwkJCSAgIHZvaWQgKmRhdGEpOworCisvKioKKyAqIG50ZnlfaW5pdCgpIC0gU2V0IHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBudGZ5X29iamVjdCBzdHJ1Y3R1cmUuCisgKiBAbm86CQlwb2ludGVyIHRvIG50Znlfb2JqZWN0IHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIG50Znlfb2JqZWN0IGluIG9yZGVyIGl0CisgKiBjYW4gYmUgdXNlZCBieSB0aGUgb3RoZXIgbnRmeSBmdW5jdGlvbnMuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIG50ZnlfaW5pdChzdHJ1Y3QgbnRmeV9vYmplY3QgKm5vKQoreworCXNwaW5fbG9ja19pbml0KCZuby0+bnRmeV9sb2NrKTsKKwlSQVdfSU5JVF9OT1RJRklFUl9IRUFEKCZuby0+aGVhZCk7Cit9CisKKy8qKgorICogbnRmeV9kZWxldGUoKSAtIGRlbGV0ZSBsaXN0IG9mIG5vZnkgZXZlbnRzIHJlZ2lzdGVyZWQuCisgKiBAbnRmeV9vYmo6CVBvaW50ZXIgdG8gdGhlIG50Znkgb2JqZWN0IHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVtb3ZlIGFsbCB0aGUgbm90aWZ5IGV2ZW50cyAgcmVnaXN0ZXJlZC4KKyAqIHVucmVnaXN0ZXIgZnVuY3Rpb24gaXMgbm90IG5lZWRlZCBpbiB0aGlzIGZ1bmN0aW9uLCB0byB1bnJlZ2lzdGVyCisgKiBhIG50ZnlfZXZlbnQgcGxlYXNlIGxvb2sgYXQgbnRmeV9yZWdpc3RlciBmdW5jdGlvbi4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBudGZ5X2RlbGV0ZShzdHJ1Y3QgbnRmeV9vYmplY3QgKm50Znlfb2JqKQoreworCXN0cnVjdCBudGZ5X2V2ZW50ICpuZTsKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iOworCisJc3Bpbl9sb2NrX2JoKCZudGZ5X29iai0+bnRmeV9sb2NrKTsKKwluYiA9IG50Znlfb2JqLT5oZWFkLmhlYWQ7CisJd2hpbGUgKG5iKSB7CisJCW5lID0gY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgbnRmeV9ldmVudCwgbm90aV9ibG9jayk7CisJCW5iID0gbmItPm5leHQ7CisJCWtmcmVlKG5lKTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJm50Znlfb2JqLT5udGZ5X2xvY2spOworfQorCisvKioKKyAqIG50Znlfbm90aWZ5KCkgLSBub2ZpdHkgYWxsIGV2ZW50IHJlZ2lzdGVyIGZvciBhbiBzcGVjaWZpYyBldmVudC4KKyAqIEBudGZ5X29iajoJUG9pbnRlciB0byB0aGUgbnRmeV9vYmplY3Qgc3RydWN0dXJlLgorICogQGV2ZW50OglldmVudCB0byBiZSBub3RpZmllZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyBhbGwgdGhlIG50ZnkgZXZlbnRzIHJlZ2lzdGVycyBhbmQKKyAqIHNldCB0aGUgZXZlbnQgd2l0aCBtYWNoIHdpdGggQGV2ZW50LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbnRmeV9ub3RpZnkoc3RydWN0IG50Znlfb2JqZWN0ICpudGZ5X29iaiwgdTMyIGV2ZW50KQoreworCXNwaW5fbG9ja19iaCgmbnRmeV9vYmotPm50ZnlfbG9jayk7CisJcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oJm50Znlfb2JqLT5oZWFkLCBldmVudCwgTlVMTCk7CisJc3Bpbl91bmxvY2tfYmgoJm50Znlfb2JqLT5udGZ5X2xvY2spOworfQorCisKKworLyoqCisgKiBudGZ5X2luaXQoKSAtIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIG50ZnlfZXZlbnQgc3RydWN0dXJlLgorICogQGV2ZW50OglldmVudCB0aGF0IHRoZSBudGZ5IGV2ZW50IHdpbGwgcmVzcG9uZAorICogQHR5cGUJCWV2ZW50IHR5cGUgKG9ubHkgRFNQX1NJR05BTEVWRU5UIHN1cHBvcnRlZCkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZSBhIG50ZnlfZXZlbnQgZWxlbWVudCBhbmQgc2V0cyB0aGUgZXZlbnQgaXQgd2lsbAorICogcmVzcG9uZCB0aGUgbnRmeV9ldmVudCBpbiBvcmRlciBpdCBjYW4gYmUgdXNlZCBieSB0aGUgb3RoZXIgbnRmeSBmdW5jdGlvbnMuCisgKiBJbiBjYXNlIG9mIHN1Y2Nlc3MgaXQgd2lsbCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBudGZ5X2V2ZW50IHN0cnVjdAorICogY3JlYXRlZC4gT3RoZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIE5VTEw7CisgKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbnRmeV9ldmVudCAqbnRmeV9ldmVudF9jcmVhdGUodTMyIGV2ZW50LCB1MzIgdHlwZSkKK3sKKwlzdHJ1Y3QgbnRmeV9ldmVudCAqbmU7CisJbmUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbnRmeV9ldmVudCksIEdGUF9LRVJORUwpOworCWlmIChuZSkgeworCQlzeW5jX2luaXRfZXZlbnQoJm5lLT5zeW5jX29iaik7CisJCW5lLT5ub3RpX2Jsb2NrLm5vdGlmaWVyX2NhbGwgPSBkc3Bfbm90aWZpZXJfZXZlbnQ7CisJCW5lLT5ldmVudCA9IGV2ZW50OworCQluZS0+dHlwZSA9IHR5cGU7CisJfQorCXJldHVybiBuZTsKK30KKworLyoqCisgKiBudGZ5X3JlZ2lzdGVyKCkgLSByZWdpc3RlciBuZXcgbnRmeV9ldmVudCBpbnRvIGEgZ2l2ZW4gbnRmeV9vYmplY3QKKyAqIEBudGZ5X29iajoJUG9pbnRlciB0byB0aGUgbnRmeV9vYmplY3Qgc3RydWN0dXJlLgorICogQG5vdGk6CQlQb2ludGVyIHRvIHRoZSBoYW5kbGUgdG8gYmUgcmV0dXJuZWQgdG8gdGhlIHVzZXIgc3BhY2UuCisgKiBAZXZlbnQJZXZlbnQgdGhhdCB0aGUgbnRmeSBldmVudCB3aWxsIHJlc3BvbmQKKyAqIEB0eXBlCQlldmVudCB0eXBlIChvbmx5IERTUF9TSUdOQUxFVkVOVCBzdXBwb3J0ZWQpCisgKgorICogVGhpcyBmdW5jdGlvbiByZWdpc3RlciBhIG5ldyBudGZ5X2V2ZW50IGludG8gdGhlIG50Znlfb2JqZWN0IGxpc3QsCisgKiB3aGljaCB3aWxsIHJlc3BvbmQgdG8gdGhlIEBldmVudCBwYXNzZWQuCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDAgaW4gY2FzZSBvZiBlcnJvci4KKyAqIC1FRkFVTFQgaW4gY2FzZSBvZiBiYWQgcG9pbnRlcnMgYW5kCisgKiBEU1BfRU1lbW9yeSBpbiBjYXNlIG9mIG5vIG1lbW9yeSB0byBjcmVhdGUgbnRmeV9ldmVudC4KKyAqLworc3RhdGljICBpbmxpbmUgaW50IG50ZnlfcmVnaXN0ZXIoc3RydWN0IG50Znlfb2JqZWN0ICpudGZ5X29iaiwKKwkJCSBzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbiAqbm90aSwKKwkJCSB1MzIgZXZlbnQsIHUzMiB0eXBlKQoreworCXN0cnVjdCBudGZ5X2V2ZW50ICpuZTsKKwlpbnQgc3RhdHVzID0gMDsKKworCWlmICghbm90aSB8fCAhbnRmeV9vYmopIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJaWYgKCFldmVudCkgeworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwluZSA9IG50ZnlfZXZlbnRfY3JlYXRlKGV2ZW50LCB0eXBlKTsKKwlpZiAoIW5lKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCW5vdGktPmhhbmRsZSA9ICZuZS0+c3luY19vYmo7CisKKwlzcGluX2xvY2tfYmgoJm50Znlfb2JqLT5udGZ5X2xvY2spOworCXJhd19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmbnRmeV9vYmotPmhlYWQsICZuZS0+bm90aV9ibG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJm50Znlfb2JqLT5udGZ5X2xvY2spOworZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBudGZ5X3VucmVnaXN0ZXIoKSAtIHVucmVnaXN0ZXIgYSBudGZ5X2V2ZW50IGZyb20gYSBnaXZlbiBudGZ5X29iamVjdAorICogQG50Znlfb2JqOglQb2ludGVyIHRvIHRoZSBudGZ5X29iamVjdCBzdHJ1Y3R1cmUuCisgKiBAbm90aToJCVBvaW50ZXIgdG8gdGhlIGV2ZW50IHRoYXQgd2lsbCBiZSByZW1vdmVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdW5yZWdpc3RlciBhIG50ZnlfZXZlbnQgZnJvbSB0aGUgbnRmeV9vYmplY3QgbGlzdCwKKyAqIEBub3RpIGNvbnRhaW5zIHRoZSBldmVudCB3aGljaCBpcyB3YW50ZWQgdG8gYmUgcmVtb3ZlZC4KKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gMCBpbiBjYXNlIG9mIGVycm9yLgorICogLUVGQVVMVCBpbiBjYXNlIG9mIGJhZCBwb2ludGVycyBhbmQKKyAqIERTUF9FTWVtb3J5IGluIGNhc2Ugb2Ygbm8gbWVtb3J5IHRvIGNyZWF0ZSBudGZ5X2V2ZW50LgorICovCitzdGF0aWMgIGlubGluZSBpbnQgbnRmeV91bnJlZ2lzdGVyKHN0cnVjdCBudGZ5X29iamVjdCAqbnRmeV9vYmosCisJCQkgc3RydWN0IGRzcF9ub3RpZmljYXRpb24gKm5vdGkpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IG50ZnlfZXZlbnQgKm5lOworCisJaWYgKCFub3RpIHx8ICFudGZ5X29iaikgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCW5lID0gY29udGFpbmVyX29mKChzdHJ1Y3Qgc3luY19vYmplY3QgKilub3RpLCBzdHJ1Y3QgbnRmeV9ldmVudCwKKwkJCQkJCQkJc3luY19vYmopOworCXNwaW5fbG9ja19iaCgmbnRmeV9vYmotPm50ZnlfbG9jayk7CisJcmF3X25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJm50Znlfb2JqLT5oZWFkLAorCQkJCQkJJm5lLT5ub3RpX2Jsb2NrKTsKKwlrZnJlZShuZSk7CisJc3Bpbl91bmxvY2tfYmgoJm50Znlfb2JqLT5udGZ5X2xvY2spOworZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworI2VuZGlmCQkJCS8qIE5URllfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvcHJvYy5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3Byb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTA5ZmQxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3Byb2MuaApAQCAtMCwwICsxLDYyMSBAQAorLyoKKyAqIHByb2MuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBUaGlzIGlzIHRoZSBEU1AgQVBJIFJNIG1vZHVsZSBpbnRlcmZhY2UuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBQUk9DXworI2RlZmluZSBQUk9DXworCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NmZ2RlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2ZGVmcy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kcnYuaD4KKworZXh0ZXJuIGNoYXIgKml2YV9pbWc7CisKKy8qCisgKiAgPT09PT09PT0gcHJvY19hdHRhY2ggPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBQcmVwYXJlIGZvciBjb21tdW5pY2F0aW9uIHdpdGggYSBwYXJ0aWN1bGFyIERTUCBwcm9jZXNzb3IsIGFuZCByZXR1cm4KKyAqICAgICAgYSBoYW5kbGUgdG8gdGhlIHByb2Nlc3NvciBvYmplY3QuIFRoZSBQUk9DIE9iamVjdCBnZXRzIGNyZWF0ZWQKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBwcm9jZXNzb3JfaWQgIDoJICAgVGhlIHByb2Nlc3NvciBpbmRleCAoemVyby1iYXNlZCkuCisgKiAgICAgIGhtZ3Jfb2JqICA6CSAgIEhhbmRsZSB0byB0aGUgTWFuYWdlciBPYmplY3QKKyAqICAgICAgYXR0cl9pbiAgICAgOgkgICBQdHIgdG8gdGhlIGRzcF9wcm9jZXNzb3JhdHRyaW4gc3RydWN0dXJlLgorICoJCQkgICAgICBBIE5VTEwgdmFsdWUgbWVhbnMgdXNlIGRlZmF1bHQgdmFsdWVzLgorICogICAgICBwaF9wcm9jZXNzb3IgOgkgICBQdHIgdG8gbG9jYXRpb24gdG8gc3RvcmUgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwICAgICA6CSAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FUEVSTSAgIDoJICAgR2VuZXJhbCBmYWlsdXJlLgorICogICAgICAtRUZBVUxUIDoJICAgSW52YWxpZCBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICAwOiAgIFN1Y2Nlc3M7IFByb2Nlc3NvciBhbHJlYWR5IGF0dGFjaGVkLgorICogIFJlcXVpcmVzOgorICogICAgICBwaF9wcm9jZXNzb3IgIT0gTlVMTC4KKyAqICAgICAgUFJPQyBJbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogICAgICAtRVBFUk0sIGFuZCAqcGhfcHJvY2Vzc29yID09IE5VTEwsIE9SCisgKiAgICAgIFN1Y2Nlc3MgYW5kICpwaF9wcm9jZXNzb3IgaXMgYSBWYWxpZCBQcm9jZXNzb3IgaGFuZGxlIE9SCisgKiAgICAgIDAgYW5kICpwaF9wcm9jZXNzb3IgaXMgYSBWYWxpZCBQcm9jZXNzb3IuCisgKiAgRGV0YWlsczoKKyAqICAgICAgV2hlbiBhdHRyX2luIGlzIE5VTEwsIHRoZSBkZWZhdWx0IHRpbWVvdXQgdmFsdWUgaXMgMTAgc2Vjb25kcy4KKyAqLworZXh0ZXJuIGludCBwcm9jX2F0dGFjaCh1MzIgcHJvY2Vzc29yX2lkLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGRzcF9wcm9jZXNzb3JhdHRyaW4KKwkJCSAgICAgICphdHRyX2luLCB2b2lkICoqcGhfcHJvY2Vzc29yLAorCQkJICAgICAgc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCk7CisKKy8qCisgKiAgPT09PT09PT0gcHJvY19hdXRvX3N0YXJ0ID09PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEEgUGFydGljdWxhciBkZXZpY2UgZ2V0cyBsb2FkZWQgd2l0aCB0aGUgZGVmYXVsdCBpbWFnZQorICogICAgICBpZiB0aGUgQXV0b1N0YXJ0IGZsYWcgaXMgc2V0LgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhkZXZfb2JqICA6ICAgSGFuZGxlIHRvIHRoZSBEZXZpY2UKKyAqICBSZXR1cm5zOgorICogICAgICAwICAgICA6ICAgT24gU3VjY2Vzc2Z1bCBMb2FkaW5nCisgKiAgICAgIC1FTk9FTlQgICA6ICAgTm8gRFNQIGV4ZWMgZmlsZSBmb3VuZC4KKyAqICAgICAgLUVQRVJNICAgOiAgIEdlbmVyYWwgRmFpbHVyZQorICogIFJlcXVpcmVzOgorICogICAgICBoZGV2X29iaiAhPSBOVUxMLgorICogICAgICBkZXZfbm9kZV9vYmogIT0gTlVMTC4KKyAqICAgICAgUFJPQyBJbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IHByb2NfYXV0b19zdGFydChzdHJ1Y3QgY2ZnX2Rldm5vZGUgKmRldl9ub2RlX29iaiwKKwkJCQkgIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaik7CisKKy8qCisgKiAgPT09PT09PT0gcHJvY19jdHJsID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUGFzcyBjb250cm9sIGluZm9ybWF0aW9uIHRvIHRoZSBHUFAgZGV2aWNlIGRyaXZlciBtYW5hZ2luZyB0aGUgRFNQCisgKiAgICAgIHByb2Nlc3Nvci4gVGhpcyB3aWxsIGJlIGFuIE9FTS1vbmx5IGZ1bmN0aW9uLCBhbmQgbm90IHBhcnQgb2YgdGhlCisgKiAgICAgICdCcmlkZ2UgYXBwbGljYXRpb24gZGV2ZWxvcGVyJ3MgQVBJLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhwcm9jZXNzb3IgIDogICAgICAgVGhlIHByb2Nlc3NvciBoYW5kbGUuCisgKiAgICAgIGR3X2NtZCAgICAgICA6ICAgICAgIFByaXZhdGUgZHJpdmVyIElPQ1RMIGNtZCBJRC4KKyAqICAgICAgcGFyZ3MgICAgICAgOiAgICAgICBQdHIgdG8gYW4gZHJpdmVyIGRlZmluZWQgYXJndW1lbnQgc3RydWN0dXJlLgorICogIFJldHVybnM6CisgKiAgICAgIDAgICAgIDogICAgICAgU1VDQ0VTUworICogICAgICAtRUZBVUxUIDogICAgICAgSW52YWxpZCBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICAtRVRJTUU6ICAgICAgIEEgVGltZW91dCBPY2N1cmVkIGJlZm9yZSB0aGUgQ29udHJvbCBpbmZvcm1hdGlvbgorICoJCQkgIGNvdWxkIGJlIHNlbnQuCisgKiAgICAgIC1FUEVSTSAgIDogICAgICAgR2VuZXJhbCBGYWlsdXJlLgorICogIFJlcXVpcmVzOgorICogICAgICBQUk9DIEluaXRpYWxpemVkLgorICogIEVuc3VyZXMKKyAqICBEZXRhaWxzOgorICogICAgICBUaGlzIGZ1bmN0aW9uIENhbGxzIGJyaWRnZV9kZXZfY3RybC4KKyAqLworZXh0ZXJuIGludCBwcm9jX2N0cmwodm9pZCAqaHByb2Nlc3NvciwKKwkJCSAgICB1MzIgZHdfY21kLCBzdHJ1Y3QgZHNwX2NiZGF0YSAqYXJnKTsKKworLyoKKyAqICA9PT09PT09PSBwcm9jX2RldGFjaCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENsb3NlIGEgRFNQIHByb2Nlc3NvciBhbmQgZGUtYWxsb2NhdGUgYWxsIChHUFApIHJlc291cmNlcyByZXNlcnZlZAorICogICAgICBmb3IgaXQuIFRoZSBQcm9jZXNzb3IgT2JqZWN0IGlzIGRlbGV0ZWQuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgcHJfY3R4dCAgICAgOiAgIFRoZSBwcm9jZXNzb3IgaGFuZGxlLgorICogIFJldHVybnM6CisgKiAgICAgIDAgICAgIDogICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUIDogICBJblZhbGlkIEhhbmRsZS4KKyAqICAgICAgLUVQRVJNICAgOiAgIEdlbmVyYWwgZmFpbHVyZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgUFJPQyBJbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogICAgICBQUk9DIE9iamVjdCBpcyBkZXN0cm95ZWQuCisgKi8KK2V4dGVybiBpbnQgcHJvY19kZXRhY2goc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCk7CisKKy8qCisgKiAgPT09PT09PT0gcHJvY19lbnVtX25vZGVzID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRW51bWVyYXRlIHRoZSBub2RlcyBjdXJyZW50bHkgYWxsb2NhdGVkIG9uIGEgcHJvY2Vzc29yLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhwcm9jZXNzb3IgIDogICBUaGUgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICAgICAgbm9kZV90YWIgICAgOiAgIFRoZSBmaXJzdCBMb2NhdGlvbiBvZiBhbiBhcnJheSBhbGxvY2F0ZWQgZm9yIG5vZGUKKyAqCQkgICAgICBoYW5kbGVzLgorICogICAgICBub2RlX3RhYl9zaXplOiAgIFRoZSBudW1iZXIgb2YgKERTUF9ITk9ERSkgaGFuZGxlcyB0aGF0IGNhbiBiZSBoZWxkCisgKgkJICAgICAgdG8gdGhlIG1lbW9yeSB0aGUgY2xpZW50IGhhcyBhbGxvY2F0ZWQgZm9yIG5vZGVfdGFiCisgKiAgICAgIHB1X251bV9ub2RlcyAgOiAgIExvY2F0aW9uIHdoZXJlIERTUFByb2Nlc3Nvcl9FbnVtTm9kZXMgd2lsbCByZXR1cm4KKyAqCQkgICAgICB0aGUgbnVtYmVyIG9mIHZhbGlkIGhhbmRsZXMgd3JpdHRlbiB0byBub2RlX3RhYgorICogICAgICBwdV9hbGxvY2F0ZWQgOiAgIExvY2F0aW9uIHdoZXJlIERTUFByb2Nlc3Nvcl9FbnVtTm9kZXMgd2lsbCByZXR1cm4KKyAqCQkgICAgICB0aGUgbnVtYmVyIG9mIG5vZGVzIHRoYXQgYXJlIGFsbG9jYXRlZCBvbiB0aGUgRFNQLgorICogIFJldHVybnM6CisgKiAgICAgIDAgICAgIDogICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUIDogICBJbnZhbGlkIHByb2Nlc3NvciBoYW5kbGUuCisgKiAgICAgIC1FSU5WQUwgICA6ICAgVGhlIGFtb3VudCBvZiBtZW1vcnkgYWxsb2NhdGVkIGZvciBub2RlX3RhYiBpcworICoJCSAgICAgIGluc3VmZmljZW50LiBUaGF0IGlzIHRoZSBudW1iZXIgb2Ygbm9kZXMgYWN0dWFsbHkKKyAqCQkgICAgICBhbGxvY2F0ZWQgb24gdGhlIERTUCBpcyBncmVhdGVyIHRoYW4gdGhlIHZhbHVlCisgKgkJICAgICAgc3BlY2lmaWVkIGZvciBub2RlX3RhYl9zaXplLgorICogICAgICAtRVBFUk0gICA6ICAgVW5hYmxlIHRvIGdldCBSZXNvdXJjZSBJbmZvcm1hdGlvbi4KKyAqICBEZXRhaWxzOgorICogIFJlcXVpcmVzCisgKiAgICAgIHB1X251bV9ub2RlcyBpcyBub3QgTlVMTC4KKyAqICAgICAgcHVfYWxsb2NhdGVkIGlzIG5vdCBOVUxMLgorICogICAgICBub2RlX3RhYiBpcyBub3QgTlVMTC4KKyAqICAgICAgUFJPQyBJbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogIERldGFpbHM6CisgKi8KK2V4dGVybiBpbnQgcHJvY19lbnVtX25vZGVzKHZvaWQgKmhwcm9jZXNzb3IsCisJCQkJICB2b2lkICoqbm9kZV90YWIsCisJCQkJICB1MzIgbm9kZV90YWJfc2l6ZSwKKwkJCQkgIHUzMiAqcHVfbnVtX25vZGVzLAorCQkJCSAgdTMyICpwdV9hbGxvY2F0ZWQpOworCisvKgorICogID09PT09PT09IHByb2NfZ2V0X3Jlc291cmNlX2luZm8gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBFbnVtZXJhdGUgdGhlIHJlc291cmNlcyBjdXJyZW50bHkgYXZhaWxhYmxlIG9uIGEgcHJvY2Vzc29yLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhwcm9jZXNzb3IgIDogICAgICAgVGhlIHByb2Nlc3NvciBoYW5kbGUuCisgKiAgICAgIHJlc291cmNlX3R5cGU6ICAgICAgVHlwZSBvZiByZXNvdXJjZSAuCisgKiAgICAgIHJlc291cmNlX2luZm86ICAgICAgUHRyIHRvIHRoZSBkc3BfcmVzb3VyY2VpbmZvIHN0cnVjdHVyZS4KKyAqICAgICAgcmVzb3VyY2VfaW5mb19zaXplOiAgU2l6ZSBvZiB0aGUgc3RydWN0dXJlLgorICogIFJldHVybnM6CisgKiAgICAgIDAgICAgIDogICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVCA6ICAgICAgIEludmFsaWQgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICAgICAgLUVCQURSOiAgICBUaGUgcHJvY2Vzc29yIGlzIG5vdCBpbiB0aGUgUFJPQ19SVU5OSU5HIHN0YXRlLgorICogICAgICAtRVRJTUU6ICAgICAgIEEgdGltZW91dCBvY2N1cmVkIGJlZm9yZSB0aGUgRFNQIHJlc3BvbmRlZCB0byB0aGUKKyAqCQkJICBxdWVycnkuCisgKiAgICAgIC1FUEVSTSAgIDogICAgICAgVW5hYmxlIHRvIGdldCBSZXNvdXJjZSBJbmZvcm1hdGlvbgorICogIFJlcXVpcmVzOgorICogICAgICByZXNvdXJjZV9pbmZvIGlzIG5vdCBOVUxMLgorICogICAgICBQYXJhbWV0ZXIgcmVzb3VyY2VfdHlwZSBpcyBWYWxpZC5bVEJEXQorICogICAgICByZXNvdXJjZV9pbmZvX3NpemUgaXMgPj0gc2l6ZW9mIGRzcF9yZXNvdXJjZWluZm8gc3RydWN0LgorICogICAgICBQUk9DIEluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgRGV0YWlsczoKKyAqICAgICAgVGhpcyBmdW5jdGlvbiBjdXJyZW50bHkgcmV0dXJucworICogICAgICAtRU5PU1lTLCBhbmQgZG9lcyBub3Qgd3JpdGUgYW55IGRhdGEgdG8gdGhlIHJlc291cmNlX2luZm8gc3RydWN0LgorICovCitleHRlcm4gaW50IHByb2NfZ2V0X3Jlc291cmNlX2luZm8odm9pZCAqaHByb2Nlc3NvciwKKwkJCQkJIHUzMiByZXNvdXJjZV90eXBlLAorCQkJCQkgc3RydWN0IGRzcF9yZXNvdXJjZWluZm8KKwkJCQkJICpyZXNvdXJjZV9pbmZvLAorCQkJCQkgdTMyIHJlc291cmNlX2luZm9fc2l6ZSk7CisKKy8qCisgKiAgPT09PT09PT0gcHJvY19leGl0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGVjcmVtZW50IHJlZmVyZW5jZSBjb3VudCwgYW5kIGZyZWUgcmVzb3VyY2VzIHdoZW4gcmVmZXJlbmNlIGNvdW50IGlzCisgKiAgICAgIDAuCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBQUk9DIGlzIGluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgICAgIFdoZW4gcmVmZXJlbmNlIGNvdW50ID09IDAsIFBST0MncyBwcml2YXRlIHJlc291cmNlcyBhcmUgZnJlZWQuCisgKi8KK2V4dGVybiB2b2lkIHByb2NfZXhpdCh2b2lkKTsKKworLyoKKyAqID09PT09PT09IHByb2NfZ2V0X2Rldl9vYmplY3QgPT09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0dXJucyB0aGUgREVWIEhhbmxkZSBmb3IgYSBnaXZlbiBQcm9jZXNzb3IgaGFuZGxlCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaHByb2Nlc3NvciAgOiAgIFByb2Nlc3NvciBIYW5kbGUKKyAqICAgICAgZGV2aWNlX29iaiA6ICAgIExvY2F0aW9uIHRvIHN0b3JlIHRoZSBERVYgSGFuZGxlLgorICogIFJldHVybnM6CisgKiAgICAgIDAgICAgIDogICBTdWNjZXNzOyAqZGV2aWNlX29iaiBoYXMgRGV2IGhhbmRsZQorICogICAgICAtRVBFUk0gICA6ICAgRmFpbHVyZTsgKmRldmljZV9vYmogaXMgemVyby4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGV2aWNlX29iaiBpcyBub3QgTlVMTAorICogICAgICBQUk9DIEluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgICAgIDAgICAgIDogICAqZGV2aWNlX29iaiBpcyBub3QgTlVMTAorICogICAgICAtRVBFUk0gICA6ICAgKmRldmljZV9vYmogaXMgTlVMTC4KKyAqLworZXh0ZXJuIGludCBwcm9jX2dldF9kZXZfb2JqZWN0KHZvaWQgKmhwcm9jZXNzb3IsCisJCQkJICAgICAgc3RydWN0IGRldl9vYmplY3QgKipkZXZpY2Vfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBwcm9jX2luaXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplIFBST0MncyBwcml2YXRlIHN0YXRlLCBrZWVwaW5nIGEgcmVmZXJlbmNlIGNvdW50IG9uIGVhY2gKKyAqICAgICAgY2FsbC4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgICAgIFRSVUUgaWYgaW5pdGlhbGl6ZWQ7IEZBTFNFIGlmIGVycm9yIG9jY3VyZWQuCisgKiAgUmVxdWlyZXM6CisgKiAgRW5zdXJlczoKKyAqICAgICAgVFJVRTogQSByZXF1aXJlbWVudCBmb3IgdGhlIG90aGVyIHB1YmxpYyBQUk9DIGZ1bmN0aW9ucy4KKyAqLworZXh0ZXJuIGJvb2wgcHJvY19pbml0KHZvaWQpOworCisvKgorICogID09PT09PT09IHByb2NfZ2V0X3N0YXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmVwb3J0IHRoZSBzdGF0ZSBvZiB0aGUgc3BlY2lmaWVkIERTUCBwcm9jZXNzb3IuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaHByb2Nlc3NvciAgOiAgIFRoZSBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICBwcm9jX3N0YXRlX29iaiA6ICAgUHRyIHRvIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBkc3BfcHJvY2Vzc29yc3RhdGUKKyAqCQkgICAgICBzdHJ1Y3R1cmUuCisgKiAgICAgIHN0YXRlX2luZm9fc2l6ZTogU2l6ZSBvZiBkc3BfcHJvY2Vzc29yc3RhdGUuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMCAgICAgOiAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQgOiAgIEludmFsaWQgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICAgICAgLUVQRVJNICAgOiAgIEdlbmVyYWwgZmFpbHVyZSB3aGlsZSBxdWVyeWluZyBwcm9jZXNzb3Igc3RhdGUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIHByb2Nfc3RhdGVfb2JqIGlzIG5vdCBOVUxMCisgKiAgICAgIHN0YXRlX2luZm9fc2l6ZSBpcyA+PSB0aGFuIHRoZSBzaXplIG9mIGRzcF9wcm9jZXNzb3JzdGF0ZSBzdHJ1Y3R1cmUuCisgKiAgICAgIFBST0MgSW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICBEZXRhaWxzOgorICovCitleHRlcm4gaW50IHByb2NfZ2V0X3N0YXRlKHZvaWQgKmhwcm9jZXNzb3IsIHN0cnVjdCBkc3BfcHJvY2Vzc29yc3RhdGUKKwkJCQkgKnByb2Nfc3RhdGVfb2JqLCB1MzIgc3RhdGVfaW5mb19zaXplKTsKKworLyoKKyAqICA9PT09PT09PSBQUk9DX0dldFByb2Nlc3NvcklEID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmVwb3J0IHRoZSBzdGF0ZSBvZiB0aGUgc3BlY2lmaWVkIERTUCBwcm9jZXNzb3IuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaHByb2Nlc3NvciAgOiAgIFRoZSBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICBwcm9jX2lkICAgICAgOiAgIFByb2Nlc3NvciBJRAorICoKKyAqICBSZXR1cm5zOgorICogICAgICAwICAgICA6ICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVCA6ICAgSW52YWxpZCBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICAtRVBFUk0gICA6ICAgR2VuZXJhbCBmYWlsdXJlIHdoaWxlIHF1ZXJ5aW5nIHByb2Nlc3NvciBzdGF0ZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgcHJvY19zdGF0ZV9vYmogaXMgbm90IE5VTEwKKyAqICAgICAgc3RhdGVfaW5mb19zaXplIGlzID49IHRoYW4gdGhlIHNpemUgb2YgZHNwX3Byb2Nlc3NvcnN0YXRlIHN0cnVjdHVyZS4KKyAqICAgICAgUFJPQyBJbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogIERldGFpbHM6CisgKi8KK2V4dGVybiBpbnQgcHJvY19nZXRfcHJvY2Vzc29yX2lkKHZvaWQgKnByb2MsIHUzMiAqIHByb2NfaWQpOworCisvKgorICogID09PT09PT09IHByb2NfZ2V0X3RyYWNlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIHRyYWNlIGJ1ZmZlciBmcm9tIHRoZSBzcGVjaWZpZWQgRFNQIHByb2Nlc3Nvci4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBocHJvY2Vzc29yICA6ICAgVGhlIHByb2Nlc3NvciBoYW5kbGUuCisgKiAgICAgIHBidWYJOiAgIFB0ciB0byBidWZmZXIgdG8gaG9sZCB0cmFjZSBvdXRwdXQuCisgKiAgICAgIG1heF9zaXplICAgIDogICBNYXhpbXVtIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMCAgICAgOiAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQgOiAgIEludmFsaWQgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICAgICAgLUVQRVJNICAgOiAgIEdlbmVyYWwgZmFpbHVyZSB3aGlsZSByZXRpcmV2aW5nIHByb2Nlc3NvciB0cmFjZQorICoJCSAgICAgIEJ1ZmZlci4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgcGJ1ZiBpcyBub3QgTlVMTAorICogICAgICBtYXhfc2l6ZSBpcyA+IDAuCisgKiAgICAgIFBST0MgSW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICBEZXRhaWxzOgorICovCitleHRlcm4gaW50IHByb2NfZ2V0X3RyYWNlKHZvaWQgKmhwcm9jZXNzb3IsIHU4ICogcGJ1ZiwgdTMyIG1heF9zaXplKTsKKworLyoKKyAqICA9PT09PT09PSBwcm9jX2xvYWQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXNldCBhIHByb2Nlc3NvciBhbmQgbG9hZCBhIG5ldyBiYXNlIHByb2dyYW0gaW1hZ2UuCisgKiAgICAgIFRoaXMgd2lsbCBiZSBhbiBPRU0tb25seSBmdW5jdGlvbi4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBocHJvY2Vzc29yOiAgICAgICBUaGUgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICAgICAgYXJnY19pbmRleDogICAgICAgVGhlIG51bWJlciBvZiBBcmd1bWVudHMoc3RyaW5ncylpbiB0aGUgYUFyZ1ZbXQorICogICAgICB1c2VyX2FyZ3M6ICAgICAgIEFuIEFycmF5IG9mIEFyZ3VtZW50cyhVbmljb2RlIFN0cmluZ3MpCisgKiAgICAgIHVzZXJfZW52cDogICAgICAgQW4gQXJyYXkgb2YgRW52aXJvbm1lbnQgc2V0dGluZ3MoVW5pY29kZSBTdHJpbmdzKQorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FTk9FTlQ6ICAgICAgIFRoZSBEU1AgRXhlY3VldGFibGUgd2FzIG5vdCBmb3VuZC4KKyAqICAgICAgLUVGQVVMVDogICAgICAgSW52YWxpZCBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICAtRVBFUk0gICA6ICAgICAgIFVuYWJsZSB0byBMb2FkIHRoZSBQcm9jZXNzb3IKKyAqICBSZXF1aXJlczoKKyAqICAgICAgdXNlcl9hcmdzIGlzIG5vdCBOVUxMCisgKiAgICAgIGFyZ2NfaW5kZXggaXMgPiAwCisgKiAgICAgIFBST0MgSW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgU3VjY2VzcyBhbmQgUHJvY1N0YXRlID09IFBST0NfTE9BREVECisgKiAgICAgIG9yIERTUF9GQUlMRUQgc3RhdHVzLgorICogIERldGFpbHM6CisgKiAgICAgIERvZXMgbm90IGltcGxlbWVudCBhY2Nlc3MgcmlnaHRzIHRvIGNvbnRyb2wgd2hpY2ggR1BQIGFwcGxpY2F0aW9uCisgKiAgICAgIGNhbiBsb2FkIHRoZSBwcm9jZXNzb3IuCisgKi8KK2V4dGVybiBpbnQgcHJvY19sb2FkKHZvaWQgKmhwcm9jZXNzb3IsCisJCQkgICAgY29uc3QgczMyIGFyZ2NfaW5kZXgsIGNvbnN0IGNoYXIgKip1c2VyX2FyZ3MsCisJCQkgICAgY29uc3QgY2hhciAqKnVzZXJfZW52cCk7CisKKy8qCisgKiAgPT09PT09PT0gcHJvY19yZWdpc3Rlcl9ub3RpZnkgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZWdpc3RlciB0byBiZSBub3RpZmllZCBvZiBzcGVjaWZpYyBwcm9jZXNzb3IgZXZlbnRzCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaHByb2Nlc3NvciAgOiAgIFRoZSBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICBldmVudF9tYXNrICA6ICAgTWFzayBvZiB0eXBlcyBvZiBldmVudHMgdG8gYmUgbm90aWZpZWQgYWJvdXQuCisgKiAgICAgIG5vdGlmeV90eXBlIDogICBUeXBlIG9mIG5vdGlmaWNhdGlvbiB0byBiZSBzZW50LgorICogICAgICBobm90aWZpY2F0aW9uOiAgSGFuZGxlIHRvIGJlIHVzZWQgZm9yIG5vdGlmaWNhdGlvbi4KKyAqICBSZXR1cm5zOgorICogICAgICAwICAgICA6ICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVCA6ICAgSW52YWxpZCBwcm9jZXNzb3IgaGFuZGxlIG9yIGhub3RpZmljYXRpb24uCisgKiAgICAgIC1FSU5WQUwgIDogICBQYXJhbWV0ZXIgZXZlbnRfbWFzayBpcyBJbnZhbGlkCisgKiAgICAgIERTUF9FTk9USU1QIDogICBUaGUgbm90aWZpY2F0aW9uIHR5cGUgc3BlY2lmaWVkIGluIHVOb3RpZnlNYXNrCisgKgkJICAgICAgaXMgbm90IHN1cHBvcnRlZC4KKyAqICAgICAgLUVQRVJNICAgOiAgIFVuYWJsZSB0byByZWdpc3RlciBmb3Igbm90aWZpY2F0aW9uLgorICogIFJlcXVpcmVzOgorICogICAgICBobm90aWZpY2F0aW9uIGlzIG5vdCBOVUxMCisgKiAgICAgIFBST0MgSW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICBEZXRhaWxzOgorICovCitleHRlcm4gaW50IHByb2NfcmVnaXN0ZXJfbm90aWZ5KHZvaWQgKmhwcm9jZXNzb3IsCisJCQkJICAgICAgIHUzMiBldmVudF9tYXNrLCB1MzIgbm90aWZ5X3R5cGUsCisJCQkJICAgICAgIHN0cnVjdCBkc3Bfbm90aWZpY2F0aW9uCisJCQkJICAgICAgICpobm90aWZpY2F0aW9uKTsKKworLyoKKyAqICA9PT09PT09PSBwcm9jX25vdGlmeV9jbGllbnRzID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgTm90aWZ5IHRoZSBQcm9jZXNzb3IgQ2xpZW50cworICogIFBhcmFtZXRlcnM6CisgKiAgICAgIHByb2MgICAgICAgOiAgIFRoZSBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICBldmVudHMgICAgIDogICBFdmVudCB0byBiZSBub3RpZmllZCBhYm91dC4KKyAqICBSZXR1cm5zOgorICogICAgICAwICAgICA6ICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVCA6ICAgSW52YWxpZCBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICAtRVBFUk0gICA6ICAgRmFpbHVyZSB0byBTZXQgb3IgUmVzZXQgdGhlIEV2ZW50CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGV2ZW50cyBpcyBTdXBwb3J0ZWQgb3IgVmFsaWQgdHlwZSBvZiBFdmVudAorICogICAgICBwcm9jIGlzIGEgdmFsaWQgaGFuZGxlCisgKiAgICAgIFBST0MgSW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBwcm9jX25vdGlmeV9jbGllbnRzKHZvaWQgKnByb2MsIHUzMiBldmVudHMpOworCisvKgorICogID09PT09PT09IHByb2Nfbm90aWZ5X2FsbF9jbGllbnRzID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgTm90aWZ5IHRoZSBQcm9jZXNzb3IgQ2xpZW50cworICogIFBhcmFtZXRlcnM6CisgKiAgICAgIHByb2MgICAgICAgOiAgIFRoZSBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICBldmVudHMgICAgIDogICBFdmVudCB0byBiZSBub3RpZmllZCBhYm91dC4KKyAqICBSZXR1cm5zOgorICogICAgICAwICAgICA6ICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVCA6ICAgSW52YWxpZCBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICAtRVBFUk0gICA6ICAgRmFpbHVyZSB0byBTZXQgb3IgUmVzZXQgdGhlIEV2ZW50CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGV2ZW50cyBpcyBTdXBwb3J0ZWQgb3IgVmFsaWQgdHlwZSBvZiBFdmVudAorICogICAgICBwcm9jIGlzIGEgdmFsaWQgaGFuZGxlCisgKiAgICAgIFBST0MgSW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICBEZXRhaWxzOgorICogICAgICBOT0RFIEFuZCBTVFJNIHdvdWxkIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIG5vdGlmeSB0aGVpciBjbGllbnRzCisgKiAgICAgIGFib3V0IHRoZSBzdGF0ZSBjaGFuZ2VzIGluIE5PREUgb3IgU1RSTS4KKyAqLworZXh0ZXJuIGludCBwcm9jX25vdGlmeV9hbGxfY2xpZW50cyh2b2lkICpwcm9jLCB1MzIgZXZlbnRzKTsKKworLyoKKyAqICA9PT09PT09PSBwcm9jX3N0YXJ0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgU3RhcnQgYSBwcm9jZXNzb3IgcnVubmluZy4KKyAqICAgICAgUHJvY2Vzc29yIG11c3QgYmUgaW4gUFJPQ19MT0FERUQgc3RhdGUuCisgKiAgICAgIFRoaXMgd2lsbCBiZSBhbiBPRU0tb25seSBmdW5jdGlvbiwgYW5kIG5vdCBwYXJ0IG9mIHRoZSAnQnJpZGdlCisgKiAgICAgIGFwcGxpY2F0aW9uIGRldmVsb3BlcidzIEFQSS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBocHJvY2Vzc29yICA6ICAgICAgIFRoZSBwcm9jZXNzb3IgaGFuZGxlLgorICogIFJldHVybnM6CisgKiAgICAgIDAgICAgIDogICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVCA6ICAgICAgIEludmFsaWQgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICAgICAgLUVCQURSOiAgICBQcm9jZXNzb3IgaXMgbm90IGluIFBST0NfTE9BREVEIHN0YXRlLgorICogICAgICAtRVBFUk0gICA6ICAgICAgIFVuYWJsZSB0byBzdGFydCB0aGUgcHJvY2Vzc29yLgorICogIFJlcXVpcmVzOgorICogICAgICBQUk9DIEluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgICAgIFN1Y2Nlc3MgYW5kIFByb2NTdGF0ZSA9PSBQUk9DX1JVTk5JTkcgb3IgRFNQX0ZBSUxFRCBzdGF0dXMuCisgKiAgRGV0YWlsczoKKyAqLworZXh0ZXJuIGludCBwcm9jX3N0YXJ0KHZvaWQgKmhwcm9jZXNzb3IpOworCisvKgorICogID09PT09PT09IHByb2Nfc3RvcCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFN0YXJ0IGEgcHJvY2Vzc29yIHJ1bm5pbmcuCisgKiAgICAgIFByb2Nlc3NvciBtdXN0IGJlIGluIFBST0NfTE9BREVEIHN0YXRlLgorICogICAgICBUaGlzIHdpbGwgYmUgYW4gT0VNLW9ubHkgZnVuY3Rpb24sIGFuZCBub3QgcGFydCBvZiB0aGUgJ0JyaWRnZQorICogICAgICBhcHBsaWNhdGlvbiBkZXZlbG9wZXIncyBBUEkuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaHByb2Nlc3NvciAgOiAgICAgICBUaGUgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwICAgICA6ICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQgOiAgICAgICBJbnZhbGlkIHByb2Nlc3NvciBoYW5kbGUuCisgKiAgICAgIC1FQkFEUjogICAgUHJvY2Vzc29yIGlzIG5vdCBpbiBQUk9DX0xPQURFRCBzdGF0ZS4KKyAqICAgICAgLUVQRVJNICAgOiAgICAgICBVbmFibGUgdG8gc3RhcnQgdGhlIHByb2Nlc3Nvci4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgUFJPQyBJbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogICAgICBTdWNjZXNzIGFuZCBQcm9jU3RhdGUgPT0gUFJPQ19SVU5OSU5HIG9yIERTUF9GQUlMRUQgc3RhdHVzLgorICogIERldGFpbHM6CisgKi8KK2V4dGVybiBpbnQgcHJvY19zdG9wKHZvaWQgKmhwcm9jZXNzb3IpOworCisvKgorICogID09PT09PT09IHByb2NfZW5kX2RtYSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEJlZ2luIGEgRE1BIHRyYW5zZmVyCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaHByb2Nlc3NvciAgICAgIDogICBUaGUgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICAgICAgcG1wdV9hZGRyCTogICBCdWZmZXIgc3RhcnQgYWRkcmVzcworICogICAgICB1bF9zaXplCQk6ICAgQnVmZmVyIHNpemUKKyAqICAgICAgZGlyCQk6ICAgVGhlIGRpcmVjdGlvbiBvZiB0aGUgdHJhbnNmZXIKKyAqICBSZXF1aXJlczoKKyAqICAgICAgTWVtb3J5IHdhcyBwcmV2aW91c2x5IG1hcHBlZC4KKyAqLworZXh0ZXJuIGludCBwcm9jX2VuZF9kbWEodm9pZCAqaHByb2Nlc3Nvciwgdm9pZCAqcG1wdV9hZGRyLCB1MzIgdWxfc2l6ZSwKKwkJCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7CisvKgorICogID09PT09PT09IHByb2NfYmVnaW5fZG1hID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQmVnaW4gYSBETUEgdHJhbnNmZXIKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBocHJvY2Vzc29yICAgICAgOiAgIFRoZSBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICBwbXB1X2FkZHIJOiAgIEJ1ZmZlciBzdGFydCBhZGRyZXNzCisgKiAgICAgIHVsX3NpemUJCTogICBCdWZmZXIgc2l6ZQorICogICAgICBkaXIJCTogICBUaGUgZGlyZWN0aW9uIG9mIHRoZSB0cmFuc2ZlcgorICogIFJlcXVpcmVzOgorICogICAgICBNZW1vcnkgd2FzIHByZXZpb3VzbHkgbWFwcGVkLgorICovCitleHRlcm4gaW50IHByb2NfYmVnaW5fZG1hKHZvaWQgKmhwcm9jZXNzb3IsIHZvaWQgKnBtcHVfYWRkciwgdTMyIHVsX3NpemUsCisJCQkJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpOworCisvKgorICogID09PT09PT09IHByb2NfZmx1c2hfbWVtb3J5ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRmx1c2hlcyBhIGJ1ZmZlciBmcm9tIHRoZSBNUFUgZGF0YSBjYWNoZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBocHJvY2Vzc29yICAgICAgOiAgIFRoZSBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICBwbXB1X2FkZHIJOiAgIEJ1ZmZlciBzdGFydCBhZGRyZXNzCisgKiAgICAgIHVsX3NpemUJICA6ICAgQnVmZmVyIHNpemUKKyAqICAgICAgdWxfZmxhZ3MJIDogICBSZXNlcnZlZC4KKyAqICBSZXR1cm5zOgorICogICAgICAwCSA6ICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVCAgICAgOiAgIEludmFsaWQgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICAgICAgLUVQRVJNICAgICAgIDogICBHZW5lcmFsIGZhaWx1cmUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIFBST0MgSW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICBEZXRhaWxzOgorICogICAgICBBbGwgdGhlIGFyZ3VtZW50cyBhcmUgY3VycmVudGx5IGlnbm9yZWQuCisgKi8KK2V4dGVybiBpbnQgcHJvY19mbHVzaF9tZW1vcnkodm9pZCAqaHByb2Nlc3NvciwKKwkJCQkgICAgdm9pZCAqcG1wdV9hZGRyLCB1MzIgdWxfc2l6ZSwgdTMyIHVsX2ZsYWdzKTsKKworLyoKKyAqICA9PT09PT09PSBwcm9jX2ludmFsaWRhdGVfbWVtb3J5ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW52YWxpZGF0ZXMgYSBidWZmZXIgZnJvbSB0aGUgTVBVIGRhdGEgY2FjaGUuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaHByb2Nlc3NvciAgICAgIDogICBUaGUgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICAgICAgcG1wdV9hZGRyCTogICBCdWZmZXIgc3RhcnQgYWRkcmVzcworICogICAgICB1bF9zaXplCSAgOiAgIEJ1ZmZlciBzaXplCisgKiAgUmV0dXJuczoKKyAqICAgICAgMAkgOiAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQgICAgIDogICBJbnZhbGlkIHByb2Nlc3NvciBoYW5kbGUuCisgKiAgICAgIC1FUEVSTSAgICAgICA6ICAgR2VuZXJhbCBmYWlsdXJlLgorICogIFJlcXVpcmVzOgorICogICAgICBQUk9DIEluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgRGV0YWlsczoKKyAqICAgICAgQWxsIHRoZSBhcmd1bWVudHMgYXJlIGN1cnJlbnRseSBpZ25vcmVkLgorICovCitleHRlcm4gaW50IHByb2NfaW52YWxpZGF0ZV9tZW1vcnkodm9pZCAqaHByb2Nlc3NvciwKKwkJCQkJIHZvaWQgKnBtcHVfYWRkciwgdTMyIHVsX3NpemUpOworCisvKgorICogID09PT09PT09IHByb2NfbWFwID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgTWFwcyBhIE1QVSBidWZmZXIgdG8gRFNQIGFkZHJlc3Mgc3BhY2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaHByb2Nlc3NvciAgICAgIDogICBUaGUgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICAgICAgcG1wdV9hZGRyCTogICBTdGFydGluZyBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIG1hcC4KKyAqICAgICAgdWxfc2l6ZQkgIDogICBTaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIG1hcC4KKyAqICAgICAgcmVxX2FkZHIJOiAgIFJlcXVlc3RlZCBEU1Agc3RhcnQgYWRkcmVzcy4gT2Zmc2V0LWFkanVzdGVkIGFjdHVhbAorICoJCQkgIG1hcHBlZCBhZGRyZXNzIGlzIGluIHRoZSBsYXN0IGFyZ3VtZW50LgorICogICAgICBwcF9tYXBfYWRkciAgICAgICA6ICAgUHRyIHRvIERTUCBzaWRlIG1hcHBlZCB1OCBhZGRyZXNzLgorICogICAgICB1bF9tYXBfYXR0ciAgICAgICA6ICAgT3B0aW9uYWwgZW5kaWFubmVzcyBhdHRyaWJ1dGVzLCB2aXJ0IHRvIHBoeXMgZmxhZy4KKyAqICBSZXR1cm5zOgorICogICAgICAwCSA6ICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVCAgICAgOiAgIEludmFsaWQgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICAgICAgLUVQRVJNICAgICAgIDogICBHZW5lcmFsIGZhaWx1cmUuCisgKiAgICAgIC1FTk9NRU0gICAgIDogICBNUFUgc2lkZSBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvci4KKyAqICAgICAgLUVOT0VOVCAgIDogICBDYW5ub3QgZmluZCBhIHJlc2VydmVkIHJlZ2lvbiBzdGFydGluZyB3aXRoIHRoaXMKKyAqCQkgICAgICA6ICAgYWRkcmVzcy4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgcG1wdV9hZGRyIGlzIG5vdCBOVUxMCisgKiAgICAgIHVsX3NpemUgaXMgbm90IHplcm8KKyAqICAgICAgcHBfbWFwX2FkZHIgaXMgbm90IE5VTEwKKyAqICAgICAgUFJPQyBJbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogIERldGFpbHM6CisgKi8KK2V4dGVybiBpbnQgcHJvY19tYXAodm9pZCAqaHByb2Nlc3NvciwKKwkJCSAgIHZvaWQgKnBtcHVfYWRkciwKKwkJCSAgIHUzMiB1bF9zaXplLAorCQkJICAgdm9pZCAqcmVxX2FkZHIsCisJCQkgICB2b2lkICoqcHBfbWFwX2FkZHIsIHUzMiB1bF9tYXBfYXR0ciwKKwkJCSAgIHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQpOworCisvKgorICogID09PT09PT09IHByb2NfcmVzZXJ2ZV9tZW1vcnkgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXNlcnZlIGEgdmlydHVhbGx5IGNvbnRpZ3VvdXMgcmVnaW9uIG9mIERTUCBhZGRyZXNzIHNwYWNlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhwcm9jZXNzb3IgICAgICA6ICAgVGhlIHByb2Nlc3NvciBoYW5kbGUuCisgKiAgICAgIHVsX3NpemUJICA6ICAgU2l6ZSBvZiB0aGUgYWRkcmVzcyBzcGFjZSB0byByZXNlcnZlLgorICogICAgICBwcF9yc3ZfYWRkciAgICAgICA6ICAgUHRyIHRvIERTUCBzaWRlIHJlc2VydmVkIHU4IGFkZHJlc3MuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMAkgOiAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQgICAgIDogICBJbnZhbGlkIHByb2Nlc3NvciBoYW5kbGUuCisgKiAgICAgIC1FUEVSTSAgICAgICA6ICAgR2VuZXJhbCBmYWlsdXJlLgorICogICAgICAtRU5PTUVNICAgICA6ICAgQ2Fubm90IHJlc2VydmUgY2h1bmsgb2YgdGhpcyBzaXplLgorICogIFJlcXVpcmVzOgorICogICAgICBwcF9yc3ZfYWRkciBpcyBub3QgTlVMTAorICogICAgICBQUk9DIEluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgRGV0YWlsczoKKyAqLworZXh0ZXJuIGludCBwcm9jX3Jlc2VydmVfbWVtb3J5KHZvaWQgKmhwcm9jZXNzb3IsCisJCQkJICAgICAgdTMyIHVsX3NpemUsIHZvaWQgKipwcF9yc3ZfYWRkciwKKwkJCQkgICAgICBzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0KTsKKworLyoKKyAqICA9PT09PT09PSBwcm9jX3VuX21hcCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlbW92ZXMgYSBNUFUgYnVmZmVyIG1hcHBpbmcgZnJvbSB0aGUgRFNQIGFkZHJlc3Mgc3BhY2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaHByb2Nlc3NvciAgICAgIDogICBUaGUgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICAgICAgbWFwX2FkZHIJOiAgIFN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlIG1hcHBlZCBtZW1vcnkgcmVnaW9uLgorICogIFJldHVybnM6CisgKiAgICAgIDAJIDogICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUICAgICA6ICAgSW52YWxpZCBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICAtRVBFUk0gICAgICAgOiAgIEdlbmVyYWwgZmFpbHVyZS4KKyAqICAgICAgLUVOT0VOVCAgIDogICBDYW5ub3QgZmluZCBhIG1hcHBlZCByZWdpb24gc3RhcnRpbmcgd2l0aCB0aGlzCisgKgkJICAgICAgOiAgIGFkZHJlc3MuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIG1hcF9hZGRyIGlzIG5vdCBOVUxMCisgKiAgICAgIFBST0MgSW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICBEZXRhaWxzOgorICovCitleHRlcm4gaW50IHByb2NfdW5fbWFwKHZvaWQgKmhwcm9jZXNzb3IsIHZvaWQgKm1hcF9hZGRyLAorCQkJICAgICAgc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCk7CisKKy8qCisgKiAgPT09PT09PT0gcHJvY191bl9yZXNlcnZlX21lbW9yeSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEZyZWVzIGEgcHJldmlvdXNseSByZXNlcnZlZCByZWdpb24gb2YgRFNQIGFkZHJlc3Mgc3BhY2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaHByb2Nlc3NvciAgICAgIDogICBUaGUgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICAgICAgcHJzdl9hZGRyCTogICBQdHIgdG8gRFNQIHNpZGUgcmVzZXJ2ZWRCWVRFIGFkZHJlc3MuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMAkgOiAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQgICAgIDogICBJbnZhbGlkIHByb2Nlc3NvciBoYW5kbGUuCisgKiAgICAgIC1FUEVSTSAgICAgICA6ICAgR2VuZXJhbCBmYWlsdXJlLgorICogICAgICAtRU5PRU5UICAgOiAgIENhbm5vdCBmaW5kIGEgcmVzZXJ2ZWQgcmVnaW9uIHN0YXJ0aW5nIHdpdGggdGhpcworICoJCSAgICAgIDogICBhZGRyZXNzLgorICogIFJlcXVpcmVzOgorICogICAgICBwcnN2X2FkZHIgaXMgbm90IE5VTEwKKyAqICAgICAgUFJPQyBJbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogIERldGFpbHM6CisgKi8KK2V4dGVybiBpbnQgcHJvY191bl9yZXNlcnZlX21lbW9yeSh2b2lkICpocHJvY2Vzc29yLAorCQkJCQkgdm9pZCAqcHJzdl9hZGRyLAorCQkJCQkgc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCk7CisKKyNlbmRpZiAvKiBQUk9DXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3Byb2Nwcml2LmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvcHJvY3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2QxZjBlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3Byb2Nwcml2LmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIHByb2Nwcml2LmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogR2xvYmFsIFBST0MgY29uc3RhbnRzIGFuZCB0eXBlcywgc2hhcmVkIGJ5IFBST0MsIE1HUiBhbmQgRFNQIEFQSS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIFBST0NQUklWXworI2RlZmluZSBQUk9DUFJJVl8KKworLyogUk0gUFJPQyBPYmplY3QgKi8KK3N0cnVjdCBwcm9jX29iamVjdDsKKworI2VuZGlmIC8qIFBST0NQUklWXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3B3ci5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3B3ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZGM3ODMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvcHdyLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBwd3IuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIFBXUl8KKyNkZWZpbmUgUFdSXworCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9wd3Jfc2guaD4KKworLyoKKyAqICA9PT09PT09PSBwd3Jfc2xlZXBfZHNwID09PT09PT09CisgKiAgICAgIFNpZ25hbCB0aGUgRFNQIHRvIGdvIHRvIHNsZWVwLgorICoKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBzbGVlcF9jb2RlOiAgICAgICAgICBOZXcgc2xlZXAgc3RhdGUgZm9yIERTUC4gIChJbml0aWFsbHksIHZhbGlkIGNvZGVzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIFBXUl9ERUVQU0xFRVAgb3IgUFdSX0VNRVJHRU5DWURFRVBTTEVFUDsgYm90aCBvZgorICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXNlIGNvZGVzIHdpbGwgc2ltcGx5IHB1dCB0aGUgRFNQIGluIGRlZXAgc2xlZXAuKQorICoKKyAqCXRpbWVvdXQ6ICAgICAgICAgICAgTWF4aW11bSB0aW1lIChtc2VjKSB0aGF0IFBXUiBzaG91bGQgd2FpdCBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtYXRpb24gdGhhdCB0aGUgRFNQIHNsZWVwIHN0YXRlIGhhcyBiZWVuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhY2hlZC4gIElmIFBXUiBzaG91bGQgc2ltcGx5IHNlbmQgdGhlIGNvbW1hbmQgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgRFNQIHRvIGdvIHRvIHNsZWVwIGFuZCB0aGVuIHJldHVybiAoaS5lLiwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luY2hyb3Vub3VzIHNsZWVwKSwgdGhlIHRpbWVvdXQgc2hvdWxkIGJlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGFzIHplcm8uCisgKgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgMDogU3VjY2VzcywgYnV0IHRoZSBEU1Agd2FzIGFscmVhZHkgYXNsZWVwLgorICogICAgICAtRUlOVkFMOiAgICBUaGUgc3BlY2lmaWVkIHNsZWVwX2NvZGUgaXMgbm90IHN1cHBvcnRlZC4KKyAqICAgICAgLUVUSU1FOiAgICAgICBBIHRpbWVvdXQgb2NjdXJlZCB3aGlsZSB3YWl0aW5nIGZvciBEU1Agc2xlZXAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtYXRpb24uCisgKiAgICAgIC1FUEVSTTogICAgICAgICAgR2VuZXJhbCBmYWlsdXJlLCB1bmFibGUgdG8gc2VuZCBzbGVlcCBjb21tYW5kIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIERTUC4KKyAqLworZXh0ZXJuIGludCBwd3Jfc2xlZXBfZHNwKGNvbnN0IHUzMiBzbGVlcF9jb2RlLCBjb25zdCB1MzIgdGltZW91dCk7CisKKy8qCisgKiAgPT09PT09PT0gcHdyX3dha2VfZHNwID09PT09PT09CisgKiAgICBTaWduYWwgdGhlIERTUCB0byB3YWtlIGZyb20gc2xlZXAuCisgKgorICogIFBhcmFtZXRlcnM6CisgKgl0aW1lb3V0OiAgICAgICAgICAgIE1heGltdW0gdGltZSAobXNlYykgdGhhdCBQV1Igc2hvdWxkIHdhaXQgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybWF0aW9uIHRoYXQgdGhlIERTUCBpcyBhd2FrZS4gIElmIFBXUiBzaG91bGQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBzaW1wbHkgc2VuZCBhIGNvbW1hbmQgdG8gdGhlIERTUCB0byB3YWtlIGFuZCB0aGVuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpLmUuLCBhc3luY2hyb3Vub3VzIHdha2UpLCB0aW1lb3V0IHNob3VsZAorICogICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHNwZWNpZmllZCBhcyB6ZXJvLgorICoKKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIDA6ICBTdWNjZXNzLCBidXQgdGhlIERTUCB3YXMgYWxyZWFkeSBhd2FrZS4KKyAqICAgICAgLUVUSU1FOiAgICAgICBBIHRpbWVvdXQgb2NjdXJlZCB3aGlsZSB3YWl0aW5nIGZvciB3YWtlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybWF0aW9uLgorICogICAgICAtRVBFUk06ICAgICAgICAgIEdlbmVyYWwgZmFpbHVyZSwgdW5hYmxlIHRvIHNlbmQgd2FrZSBjb21tYW5kIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIERTUC4KKyAqLworZXh0ZXJuIGludCBwd3Jfd2FrZV9kc3AoY29uc3QgdTMyIHRpbWVvdXQpOworCisvKgorICogID09PT09PT09IHB3cl9wbV9wcmVfc2NhbGUgPT09PT09PT0KKyAqICAgIFByZXNjYWxlIG5vdGlmaWNhdGlvbiB0byBEU1AuCisgKgorICogIFBhcmFtZXRlcnM6CisgKgl2b2x0YWdlX2RvbWFpbjogICBUaGUgdm9sdGFnZSBkb21haW4gZm9yIHdoaWNoIG5vdGlmaWNhdGlvbiBpcyBzZW50CisgKiAgICBsZXZlbDoJCQlUaGUgbGV2ZWwgb2Ygdm9sdGFnZSBkb21haW4KKyAqCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICBTdWNjZXNzLgorICogICAgICAwOiAgU3VjY2VzcywgYnV0IHRoZSBEU1Agd2FzIGFscmVhZHkgYXdha2UuCisgKiAgICAgIC1FVElNRTogICAgICAgQSB0aW1lb3V0IG9jY3VyZWQgd2hpbGUgd2FpdGluZyBmb3Igd2FrZQorICogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1hdGlvbi4KKyAqICAgICAgLUVQRVJNOiAgICAgICAgICBHZW5lcmFsIGZhaWx1cmUsIHVuYWJsZSB0byBzZW5kIHdha2UgY29tbWFuZCB0bworICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBEU1AuCisgKi8KK2V4dGVybiBpbnQgcHdyX3BtX3ByZV9zY2FsZSh1MTYgdm9sdGFnZV9kb21haW4sIHUzMiBsZXZlbCk7CisKKy8qCisgKiAgPT09PT09PT0gcHdyX3BtX3Bvc3Rfc2NhbGUgPT09PT09PT0KKyAqICAgIFBvc3RTY2FsZSBub3RpZmljYXRpb24gdG8gRFNQLgorICoKKyAqICBQYXJhbWV0ZXJzOgorICoJdm9sdGFnZV9kb21haW46ICAgVGhlIHZvbHRhZ2UgZG9tYWluIGZvciB3aGljaCBub3RpZmljYXRpb24gaXMgc2VudAorICogICAgbGV2ZWw6CQkJVGhlIGxldmVsIG9mIHZvbHRhZ2UgZG9tYWluCisgKgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgMDogIFN1Y2Nlc3MsIGJ1dCB0aGUgRFNQIHdhcyBhbHJlYWR5IGF3YWtlLgorICogICAgICAtRVRJTUU6ICAgICAgIEEgdGltZW91dCBvY2N1cmVkIHdoaWxlIHdhaXRpbmcgZm9yIHdha2UKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtYXRpb24uCisgKiAgICAgIC1FUEVSTTogICAgICAgICAgR2VuZXJhbCBmYWlsdXJlLCB1bmFibGUgdG8gc2VuZCB3YWtlIGNvbW1hbmQgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgRFNQLgorICovCitleHRlcm4gaW50IHB3cl9wbV9wb3N0X3NjYWxlKHUxNiB2b2x0YWdlX2RvbWFpbiwgdTMyIGxldmVsKTsKKworI2VuZGlmIC8qIFBXUl8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9wd3Jfc2guaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9wd3Jfc2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjRhMDkwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3B3cl9zaC5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBwd3Jfc2guaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBQb3dlciBNYW5hZ2VyIHNoYXJlZCBkZWZpbml0aW9ucyAodXNlZCBvbiBib3RoIEdQUCBhbmQgRFNQIHNpZGVzKS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBQV1JfU0hfCisjZGVmaW5lIFBXUl9TSF8KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9tYnhfc2guaD4KKworLyogdmFsaWQgc2xlZXAgY29tbWFuZCBjb2RlcyB0aGF0IGNhbiBiZSBzZW50IGJ5IEdQUCB2aWEgbWFpbGJveDogKi8KKyNkZWZpbmUgUFdSX0RFRVBTTEVFUCAgICAgICAgICAgTUJYX1BNX0RTUElETEUKKyNkZWZpbmUgUFdSX0VNRVJHRU5DWURFRVBTTEVFUCAgTUJYX1BNX0VNRVJHRU5DWVNMRUVQCisjZGVmaW5lIFBXUl9TTEVFUFVOVElMUkVTVEFSVCAgIE1CWF9QTV9TTEVFUFVOVElMUkVTVEFSVAorI2RlZmluZSBQV1JfV0FLRVVQICAgICAgICAgICAgICBNQlhfUE1fRFNQV0FLRVVQCisjZGVmaW5lIFBXUl9BVVRPRU5BQkxFICAgICAgICAgIE1CWF9QTV9QV1JFTkFCTEUKKyNkZWZpbmUgUFdSX0FVVE9ESVNBQkxFICAgICAgICAgTUJYX1BNX1BXUkRJU0FCTEUKKyNkZWZpbmUgUFdSX1JFVEVOVElPTiAgICAgICAgICAgICBNQlhfUE1fRFNQUkVUTgorCisjZW5kaWYgLyogUFdSX1NIXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3Jlc291cmNlY2xlYW51cC5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3Jlc291cmNlY2xlYW51cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYWYwYzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvcmVzb3VyY2VjbGVhbnVwLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIHJlc291cmNlY2xlYW51cC5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpbmNsdWRlIDxkc3BicmlkZ2Uvbm9kZXByaXYuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHJ2Lmg+CisKK2V4dGVybiBpbnQgZHJ2X2dldF9wcm9jX2N0eHRfbGlzdChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICoqcGN0eHQsCisJCQkJCSBzdHJ1Y3QgZHJ2X29iamVjdCAqaGRydl9vYmopOworCitleHRlcm4gaW50IGRydl9pbnNlcnRfcHJvY19jb250ZXh0KHN0cnVjdCBkcnZfb2JqZWN0ICpkcml2ZXJfb2JqLAorCQkJCQkgIHZvaWQgKnByb2Nlc3NfY3R4dCk7CisKK2V4dGVybiBpbnQgZHJ2X3JlbW92ZV9hbGxfZG1tX3Jlc19lbGVtZW50cyh2b2lkICpwcm9jZXNzX2N0eHQpOworCitleHRlcm4gaW50IGRydl9yZW1vdmVfYWxsX25vZGVfcmVzX2VsZW1lbnRzKHZvaWQgKnByb2Nlc3NfY3R4dCk7CisKK2V4dGVybiBpbnQgZHJ2X3Byb2Nfc2V0X3BpZCh2b2lkICpjdHh0LCBzMzIgcHJvY2Vzcyk7CisKK2V4dGVybiBpbnQgZHJ2X3JlbW92ZV9hbGxfcmVzb3VyY2VzKHZvaWQgKnByb2Nlc3NfY3R4dCk7CisKK2V4dGVybiBpbnQgZHJ2X3JlbW92ZV9wcm9jX2NvbnRleHQoc3RydWN0IGRydl9vYmplY3QgKmRyaXZlcl9vYmosCisJCQkJCSAgdm9pZCAqcHJfY3R4dCk7CisKK2V4dGVybiBpbnQgZHJ2X2luc2VydF9ub2RlX3Jlc19lbGVtZW50KHZvaWQgKmhub2RlLCB2b2lkICpub2RlX3Jlc291cmNlLAorCQkJCQkgICAgICB2b2lkICpwcm9jZXNzX2N0eHQpOworCitleHRlcm4gdm9pZCBkcnZfcHJvY19ub2RlX3VwZGF0ZV9oZWFwX3N0YXR1cyh2b2lkICpub2RlX3Jlc291cmNlLCBzMzIgc3RhdHVzKTsKKworZXh0ZXJuIHZvaWQgZHJ2X3Byb2Nfbm9kZV91cGRhdGVfc3RhdHVzKHZvaWQgKm5vZGVfcmVzb3VyY2UsIHMzMiBzdGF0dXMpOworCitleHRlcm4gaW50IGRydl9wcm9jX3VwZGF0ZV9zdHJtX3Jlcyh1MzIgbnVtX2J1ZnMsIHZvaWQgKnN0cm1fcmVzb3VyY2VzKTsKKworZXh0ZXJuIGludCBkcnZfcHJvY19pbnNlcnRfc3RybV9yZXNfZWxlbWVudCh2b2lkICpzdHJlYW1fb2JqLAorCQkJCQkJICAgdm9pZCAqc3RybV9yZXMsCisJCQkJCQkgICB2b2lkICpwcm9jZXNzX2N0eHQpOworCitleHRlcm4gaW50IGRydl9yZW1vdmVfYWxsX3N0cm1fcmVzX2VsZW1lbnRzKHZvaWQgKnByb2Nlc3NfY3R4dCk7CisKK2V4dGVybiBlbnVtIG5vZGVfc3RhdGUgbm9kZV9nZXRfc3RhdGUodm9pZCAqaG5vZGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3JtbS5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3JtbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZWE1MzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvcm1tLmgKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiBybW0uaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBUaGlzIG1lbW9yeSBtYW5hZ2VyIHByb3ZpZGVzIGdlbmVyYWwgaGVhcCBtYW5hZ2VtZW50IGFuZCBhcmJpdHJhcnkKKyAqIGFsaWdubWVudCBmb3IgYW55IG51bWJlciBvZiBtZW1vcnkgc2VnbWVudHMsIGFuZCBtYW5hZ2VtZW50IG9mIG92ZXJsYXkKKyAqIG1lbW9yeS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIFJNTV8KKyNkZWZpbmUgUk1NXworCisvKgorICogID09PT09PT09IHJtbV9hZGRyID09PT09PT09CisgKiAgRFNQIGFkZHJlc3MgKyBzZWdpZAorICovCitzdHJ1Y3Qgcm1tX2FkZHIgeworCXUzMiBhZGRyOworCXMzMiBzZWdpZDsKK307CisKKy8qCisgKiAgPT09PT09PT0gcm1tX3NlZ21lbnQgPT09PT09PT0KKyAqICBNZW1vcnkgc2VnbWVudCBvbiB0aGUgRFNQIGF2YWlsYWJsZSBmb3IgcmVtb3RlIGFsbG9jYXRpb25zLgorICovCitzdHJ1Y3Qgcm1tX3NlZ21lbnQgeworCXUzMiBiYXNlOwkJLyogQmFzZSBvZiB0aGUgc2VnbWVudCAqLworCXUzMiBsZW5ndGg7CQkvKiBTaXplIG9mIHRoZSBzZWdtZW50ICh0YXJnZXQgTUFVcykgKi8KKwlzMzIgc3BhY2U7CQkvKiBDb2RlIG9yIGRhdGEgKi8KKwl1MzIgbnVtYmVyOwkJLyogTnVtYmVyIG9mIEFsbG9jYXRlZCBCbG9ja3MgKi8KK307CisKKy8qCisgKiAgPT09PT09PT0gUk1NX1RhcmdldCA9PT09PT09PQorICovCitzdHJ1Y3Qgcm1tX3RhcmdldF9vYmo7CisKKy8qCisgKiAgPT09PT09PT0gcm1tX2FsbG9jID09PT09PT09CisgKgorICogIHJtbV9hbGxvYyBpcyB1c2VkIHRvIHJlbW90ZWx5IGFsbG9jYXRlIG9yIHJlc2VydmUgbWVtb3J5IG9uIHRoZSBEU1AuCisgKgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIHRhcmdldCAgICAgICAgICAtIFRhcmdldCByZXR1cm5lZCBmcm9tIHJtbV9jcmVhdGUoKS4KKyAqICAgICAgc2VnaWQgICAgICAgICAgIC0gTWVtb3J5IHNlZ21lbnQgdG8gYWxsb2NhdGUgZnJvbS4KKyAqICAgICAgc2l6ZSAgICAgICAgICAgIC0gU2l6ZSAodGFyZ2V0IE1BVVMpIHRvIGFsbG9jYXRlLgorICogICAgICBhbGlnbiAgICAgICAgICAgLSBhbGlnbm1lbnQuCisgKiAgICAgIGRzcF9hZGRyZXNzICAgICAtIElmIHJlc2VydmUgaXMgRkFMU0UsIHRoZSBsb2NhdGlvbiB0byBzdG9yZSBhbGxvY2F0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcyBvbiBvdXRwdXQsIG90aGVyd2lzZSwgdGhlIERTUCBhZGRyZXNzIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmUuCisgKiAgICAgIHJlc2VydmUgICAgICAgICAtIElmIFRSVUUsIHJlc2VydmUgdGhlIG1lbW9yeSBzcGVjaWZpZWQgYnkgZHNwX2FkZHJlc3MuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVOT01FTTogICAgICAgICAgICBNZW1vcnkgYWxsb2NhdGlvbiBvbiBHUFAgZmFpbGVkLgorICogICAgICAtRU5YSU86ICAgICBDYW5ub3QgImFsbG9jYXRlIiBvdmVybGF5IG1lbW9yeSBiZWNhdXNlIGl0J3MKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBpbiB1c2UuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIFJNTSBpbml0aWFsaXplZC4KKyAqICAgICAgVmFsaWQgdGFyZ2V0LgorICogICAgICBkc3BfYWRkcmVzcyAhPSBOVUxMLgorICogICAgICBzaXplID4gMAorICogICAgICByZXNlcnZlIHx8IHRhcmdldC0+bnVtX3NlZ3MgPiAwLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgcm1tX2FsbG9jKHN0cnVjdCBybW1fdGFyZ2V0X29iaiAqdGFyZ2V0LCB1MzIgc2VnaWQsIHUzMiBzaXplLAorCQkJdTMyIGFsaWduLCB1MzIgKmRzcF9hZGRyZXNzLCBib29sIHJlc2VydmUpOworCisvKgorICogID09PT09PT09IHJtbV9jcmVhdGUgPT09PT09PT0KKyAqICBDcmVhdGUgYSB0YXJnZXQgb2JqZWN0IHdpdGggbWVtb3J5IHNlZ21lbnRzIGZvciByZW1vdGUgYWxsb2NhdGlvbi4gSWYKKyAqICBzZWdfdGFiID09IE5VTEwgb3IgbnVtX3NlZ3MgPT0gMCwgbWVtb3J5IGNhbiBvbmx5IGJlIHJlc2VydmVkIHRocm91Z2gKKyAqICBybW1fYWxsb2MoKS4KKyAqCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgdGFyZ2V0X29iajogICAgICAgIC0gTG9jYXRpb24gdG8gc3RvcmUgdGFyZ2V0IG9uIG91dHB1dC4KKyAqICAgICAgc2VnX3RhYjogICAgICAgICAtIFRhYmxlIG9mIG1lbW9yeSBzZWdtZW50cy4KKyAqICAgICAgbnVtX3NlZ3M6ICAgICAgICAtIE51bWJlciBvZiBtZW1vcnkgc2VnbWVudHMuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FTk9NRU06ICAgIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgUk1NIGluaXRpYWxpemVkLgorICogICAgICB0YXJnZXRfb2JqICE9IE5VTEwuCisgKiAgICAgIG51bV9zZWdzID09IDAgfHwgc2VnX3RhYiAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKiAgICAgIFN1Y2Nlc3M6ICAgICAgICBWYWxpZCAqdGFyZ2V0X29iai4KKyAqICAgICAgRmFpbHVyZTogICAgICAgICp0YXJnZXRfb2JqID09IE5VTEwuCisgKi8KK2V4dGVybiBpbnQgcm1tX2NyZWF0ZShzdHJ1Y3Qgcm1tX3RhcmdldF9vYmogKip0YXJnZXRfb2JqLAorCQkJICAgICBzdHJ1Y3Qgcm1tX3NlZ21lbnQgc2VnX3RhYltdLCB1MzIgbnVtX3NlZ3MpOworCisvKgorICogID09PT09PT09IHJtbV9kZWxldGUgPT09PT09PT0KKyAqICBEZWxldGUgdGFyZ2V0IGFsbG9jYXRlZCBpbiBybW1fY3JlYXRlKCkuCisgKgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIHRhcmdldCAgICAgICAgICAtIFRhcmdldCByZXR1cm5lZCBmcm9tIHJtbV9jcmVhdGUoKS4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBSTU0gaW5pdGlhbGl6ZWQuCisgKiAgICAgIFZhbGlkIHRhcmdldC4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gdm9pZCBybW1fZGVsZXRlKHN0cnVjdCBybW1fdGFyZ2V0X29iaiAqdGFyZ2V0KTsKKworLyoKKyAqICA9PT09PT09PSBybW1fZXhpdCA9PT09PT09PQorICogIEV4aXQgdGhlIFJNTSBtb2R1bGUKKyAqCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBybW1faW5pdCBzdWNjZXNzZnVsbHkgY2FsbGVkLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiB2b2lkIHJtbV9leGl0KHZvaWQpOworCisvKgorICogID09PT09PT09IHJtbV9mcmVlID09PT09PT09CisgKiAgRnJlZSBvciB1bnJlc2VydmUgbWVtb3J5IGFsbG9jYXRlZCB0aHJvdWdoIHJtbV9hbGxvYygpLgorICoKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICB0YXJnZXQ6ICAgICAgICAgLSBUYXJnZXQgcmV0dXJuZWQgZnJvbSBybW1fY3JlYXRlKCkuCisgKiAgICAgIHNlZ2lkOiAgICAgICAgICAtIFNlZ21lbnQgb2YgbWVtb3J5IHRvIGZyZWUuCisgKiAgICAgIGRzcF9hZGRyZXNzOiAgICAtIEFkZHJlc3MgdG8gZnJlZSBvciB1bnJlc2VydmUuCisgKiAgICAgIHNpemU6ICAgICAgICAgICAtIFNpemUgb2YgbWVtb3J5IHRvIGZyZWUgb3IgdW5yZXNlcnZlLgorICogICAgICByZXNlcnZlZDogICAgICAgLSBUUlVFIGlmIG1lbW9yeSB3YXMgcmVzZXJ2ZWQgb25seSwgb3RoZXJ3aXNlIEZBTFNFLgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIFJNTSBpbml0aWFsaXplZC4KKyAqICAgICAgVmFsaWQgdGFyZ2V0LgorICogICAgICByZXNlcnZlZCB8fCBzZWdpZCA8IHRhcmdldC0+bnVtX3NlZ3MuCisgKiAgICAgIHJlc2VydmUgfHwgW2RzcF9hZGRyZXNzLCBkc3BfYWRkcmVzcyArIHNpemVdIGlzIGEgdmFsaWQgbWVtb3J5IHJhbmdlLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBib29sIHJtbV9mcmVlKHN0cnVjdCBybW1fdGFyZ2V0X29iaiAqdGFyZ2V0LCB1MzIgc2VnaWQsIHUzMiBkc3BfYWRkciwKKwkJICAgICB1MzIgc2l6ZSwgYm9vbCByZXNlcnZlZCk7CisKKy8qCisgKiAgPT09PT09PT0gcm1tX2luaXQgPT09PT09PT0KKyAqICBJbml0aWFsaXplIHRoZSBSTU0gbW9kdWxlCisgKgorICogIFBhcmFtZXRlcnM6CisgKiAgUmV0dXJuczoKKyAqICAgICAgVFJVRTogICBTdWNjZXNzLgorICogICAgICBGQUxTRTogIEZhaWx1cmUuCisgKiAgUmVxdWlyZXM6CisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGJvb2wgcm1tX2luaXQodm9pZCk7CisKKy8qCisgKiAgPT09PT09PT0gcm1tX3N0YXQgPT09PT09PT0KKyAqICBPYnRhaW4gIG1lbW9yeSBzZWdtZW50IHN0YXR1cworICoKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBzZWdpZDogICAgICAgU2VnbWVudCBJRCBvZiB0aGUgZHluYW1pYyBsb2FkaW5nIHNlZ21lbnQuCisgKiAgICAgIG1lbV9zdGF0X2J1ZjogUG9pbnRlciB0byBhbGxvY2F0ZWQgYnVmZmVyIGludG8gd2hpY2ggbWVtb3J5IHN0YXRzIGFyZQorICogICAgICAgICAgICAgICAgICAgcGxhY2VkLgorICogIFJldHVybnM6CisgKiAgICAgIFRSVUU6ICAgU3VjY2Vzcy4KKyAqICAgICAgRkFMU0U6ICBGYWlsdXJlLgorICogIFJlcXVpcmVzOgorICogICAgICBzZWdpZCA8IHRhcmdldC0+bnVtX3NlZ3MKKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gYm9vbCBybW1fc3RhdChzdHJ1Y3Qgcm1tX3RhcmdldF9vYmogKnRhcmdldCwgZW51bSBkc3BfbWVtdHlwZSBzZWdpZCwKKwkJICAgICBzdHJ1Y3QgZHNwX21lbXN0YXQgKm1lbV9zdGF0X2J1Zik7CisKKyNlbmRpZiAvKiBSTU1fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvcm1zX3NoLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvcm1zX3NoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JjNTU3NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ybXNfc2guaApAQCAtMCwwICsxLDk1IEBACisvKgorICogcm1zX3NoLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogRFNQL0JJT1MgQnJpZGdlIFJlc291cmNlIE1hbmFnZXIgU2VydmVyIHNoYXJlZCBkZWZpbml0aW9ucyAodXNlZCBvbiBib3RoCisgKiBHUFAgYW5kIERTUCBzaWRlcykuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgUk1TX1NIXworI2RlZmluZSBSTVNfU0hfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2Uvcm1zdHlwZXMuaD4KKworLyogTm9kZSBUeXBlczogKi8KKyNkZWZpbmUgUk1TX1RBU0sgICAgICAgICAgICAgICAgMQkvKiBUYXNrIG5vZGUgKi8KKyNkZWZpbmUgUk1TX0RBSVMgICAgICAgICAgICAgICAgMgkvKiB4REFJUyBzb2NrZXQgbm9kZSAqLworI2RlZmluZSBSTVNfTVNHICAgICAgICAgICAgICAgICAzCS8qIE1lc3NhZ2Ugbm9kZSAqLworCisvKiBNZW1vcnkgVHlwZXM6ICovCisjZGVmaW5lIFJNU19DT0RFICAgICAgICAgICAgICAgIDAJLyogUHJvZ3JhbSBzcGFjZSAqLworI2RlZmluZSBSTVNfREFUQSAgICAgICAgICAgICAgICAxCS8qIERhdGEgc3BhY2UgKi8KKyNkZWZpbmUgUk1TX0lPICAgICAgICAgICAgICAgIAkyCS8qIEkvTyBzcGFjZSAqLworCisvKiBSTSBTZXJ2ZXIgQ29tbWFuZCBhbmQgUmVzcG9uc2UgQnVmZmVyIFNpemVzOiAqLworI2RlZmluZSBSTVNfQ09NTUFOREJVRlNJWkUgICAgIDI1NgkvKiBTaXplIG9mIGNvbW1hbmQgYnVmZmVyICovCisjZGVmaW5lIFJNU19SRVNQT05TRUJVRlNJWkUgICAgMTYJLyogU2l6ZSBvZiByZXNwb25zZSBidWZmZXIgKi8KKworLyogUHJlLURlZmluZWQgQ29tbWFuZC9SZXNwb25zZSBDb2RlczogKi8KKyNkZWZpbmUgUk1TX0VYSVQgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAkvKiBHUFAtPk5vZGU6IHNodXRkb3duICovCisjZGVmaW5lIFJNU19FWElUQUNLICAgICAgICAgICAgIDB4NDAwMDAwMDAJLyogTm9kZS0+R1BQOiBhY2sgc2h1dGRvd24gKi8KKyNkZWZpbmUgUk1TX0JVRkRFU0MgICAgICAgICAgICAgMHgyMDAwMDAwMAkvKiBBcmcxIFNNIGJ1ZiwgQXJnMiBTTSBzaXplICovCisjZGVmaW5lIFJNU19LSUxMVEFTSyAgICAgICAgICAgIDB4MTAwMDAwMDAJLyogR1BQLT5Ob2RlOiBLaWxsIFRhc2sgKi8KKyNkZWZpbmUgUk1TX1VTRVIgICAgICAgICAgICAgICAgMHgwCS8qIFN0YXJ0IG9mIHVzZXItZGVmaW5lZCBtc2cgY29kZXMgKi8KKyNkZWZpbmUgUk1TX01BWFVTRVJDT0RFUyAgICAgICAgMHhmZmYJLyogTWF4aW11bSB1c2VyIGRlZmluZWQgQy9SIENvZGVzICovCisKKy8qIFJNIFNlcnZlciBSUEMgQ29tbWFuZCBTdHJ1Y3R1cmU6ICovCitzdHJ1Y3Qgcm1zX2NvbW1hbmQgeworCXJtc193b3JkIGZ4bjsJCS8qIFNlcnZlciBmdW5jdGlvbiBhZGRyZXNzICovCisJcm1zX3dvcmQgYXJnMTsJCS8qIEZpcnN0IGFyZ3VtZW50ICovCisJcm1zX3dvcmQgYXJnMjsJCS8qIFNlY29uZCBhcmd1bWVudCAqLworCXJtc193b3JkIGRhdGE7CQkvKiBGdW5jdGlvbi1zcGVjaWZpYyBkYXRhIGFycmF5ICovCit9OworCisvKgorICogIFRoZSBybXNfc3RybV9kZWYgc3RydWN0dXJlIGRlZmluZXMgdGhlIHBhcmFtZXRlcnMgZm9yIGJvdGggaW5wdXQgYW5kIG91dHB1dAorICogIHN0cmVhbXMsIGFuZCBpcyBwYXNzZWQgdG8gYSBub2RlJ3MgY3JlYXRlIGZ1bmN0aW9uLgorICovCitzdHJ1Y3Qgcm1zX3N0cm1fZGVmIHsKKwlybXNfd29yZCBidWZzaXplOwkvKiBCdWZmZXIgc2l6ZSAoaW4gRFNQIHdvcmRzKSAqLworCXJtc193b3JkIG5idWZzOwkJLyogTWF4IG51bWJlciBvZiBidWZzIGluIHN0cmVhbSAqLworCXJtc193b3JkIHNlZ2lkOwkJLyogU2VnbWVudCB0byBhbGxvY2F0ZSBidWZmZXJzICovCisJcm1zX3dvcmQgYWxpZ247CQkvKiBBbGlnbm1lbnQgZm9yIGFsbG9jYXRlZCBidWZmZXJzICovCisJcm1zX3dvcmQgdGltZW91dDsJLyogVGltZW91dCAobXNlYykgZm9yIGJsb2NraW5nIGNhbGxzICovCisJY2hhciBuYW1lWzFdOwkvKiBEZXZpY2UgTmFtZSAodGVybWluYXRlZCBieSAnXDAnKSAqLworfTsKKworLyogTWVzc2FnZSBub2RlIGNyZWF0ZSBhcmdzIHN0cnVjdHVyZTogKi8KK3N0cnVjdCBybXNfbXNnX2FyZ3MgeworCXJtc193b3JkIG1heF9tc2dzOwkvKiBNYXggIyBzaW11bHRhbmVvdXMgbXNncyB0byBub2RlICovCisJcm1zX3dvcmQgc2VnaWQ7CQkvKiBNZW0gc2VnbWVudCBmb3IgTk9ERV9hbGxvY01zZ0J1ZiAqLworCXJtc193b3JkIG5vdGlmeV90eXBlOwkvKiBUeXBlIG9mIG1lc3NhZ2Ugbm90aWZpY2F0aW9uICovCisJcm1zX3dvcmQgYXJnX2xlbmd0aDsJLyogTGVuZ3RoIChpbiBEU1AgY2hhcnMpIG9mIGFyZyBkYXRhICovCisJcm1zX3dvcmQgYXJnX2RhdGE7CS8qIEFyZyBkYXRhIGZvciBub2RlICovCit9OworCisvKiBQYXJ0aWFsIHRhc2sgY3JlYXRlIGFyZ3Mgc3RydWN0dXJlICovCitzdHJ1Y3Qgcm1zX21vcmVfdGFza19hcmdzIHsKKwlybXNfd29yZCBwcmlvcml0eTsJLyogVGFzaydzIHJ1bnRpbWUgcHJpb3JpdHkgbGV2ZWwgKi8KKwlybXNfd29yZCBzdGFja19zaXplOwkvKiBUYXNrJ3Mgc3RhY2sgc2l6ZSAqLworCXJtc193b3JkIHN5c3N0YWNrX3NpemU7CS8qIFRhc2sncyBzeXN0ZW0gc3RhY2sgc2l6ZSAoNTV4KSAqLworCXJtc193b3JkIHN0YWNrX3NlZzsJLyogTWVtb3J5IHNlZ21lbnQgZm9yIHRhc2sncyBzdGFjayAqLworCXJtc193b3JkIGhlYXBfYWRkcjsJLyogYmFzZSBhZGRyZXNzIG9mIHRoZSBub2RlIG1lbW9yeSBoZWFwIGluCisJCQkJICogZXh0ZXJuYWwgbWVtb3J5IChEU1AgdmlydHVhbCBhZGRyZXNzKSAqLworCXJtc193b3JkIGhlYXBfc2l6ZTsJLyogc2l6ZSBpbiBNQVVzIG9mIHRoZSBub2RlIG1lbW9yeSBoZWFwIGluCisJCQkJICogZXh0ZXJuYWwgbWVtb3J5ICovCisJcm1zX3dvcmQgbWlzYzsJCS8qIE1pc2MgZmllbGQuICBOb3QgdXNlZCBmb3IgJ25vcm1hbCcKKwkJCQkgKiB0YXNrIG5vZGVzOyBmb3IgeERBSVMgc29ja2V0IG5vZGVzCisJCQkJICogc3BlY2lmaWVzIHRoZSBJQUxHX0Z4biBwb2ludGVyLgorCQkJCSAqLworCS8qICMgaW5wdXQgU1RSTSBkZWZpbml0aW9uIHN0cnVjdHVyZXMgKi8KKwlybXNfd29yZCBudW1faW5wdXRfc3RyZWFtczsKK307CisKKyNlbmRpZiAvKiBSTVNfU0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvcm1zdHlwZXMuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ybXN0eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYzBmMWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvcm1zdHlwZXMuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogcm1zdHlwZXMuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBEU1AvQklPUyBCcmlkZ2UgUmVzb3VyY2UgTWFuYWdlciBTZXJ2ZXIgc2hhcmVkIGRhdGEgdHlwZSBkZWZpbml0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBSTVNUWVBFU18KKyNkZWZpbmUgUk1TVFlQRVNfCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KK3R5cGVkZWYgdTMyIHJtc193b3JkOworCisjZW5kaWYgLyogUk1TVFlQRVNfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvc2VydmljZXMuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9zZXJ2aWNlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMjZjODYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvc2VydmljZXMuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogc2VydmljZXMuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBQcm92aWRlIGxvYWRpbmcgYW5kIHVubG9hZGluZyBvZiBTRVJWSUNFUyBtb2R1bGVzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgU0VSVklDRVNfCisjZGVmaW5lIFNFUlZJQ0VTXworCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KKy8qCisgKiAgPT09PT09PT0gc2VydmljZXNfZXhpdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERpc2NvbnRpbnVlIHVzYWdlIG9mIG1vZHVsZTsgZnJlZSByZXNvdXJjZXMgd2hlbiByZWZlcmVuY2UgY291bnQKKyAqICAgICAgcmVhY2hlcyAwLgorICogIFBhcmFtZXRlcnM6CisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgU0VSVklDRVMgaW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgUmVzb3VyY2VzIHVzZWQgYnkgbW9kdWxlIGFyZSBmcmVlZCB3aGVuIGNSZWYgcmVhY2hlcyB6ZXJvLgorICovCitleHRlcm4gdm9pZCBzZXJ2aWNlc19leGl0KHZvaWQpOworCisvKgorICogID09PT09PT09IHNlcnZpY2VzX2luaXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplcyBTRVJWSUNFUyBtb2R1bGVzLgorICogIFBhcmFtZXRlcnM6CisgKiAgUmV0dXJuczoKKyAqICAgICAgVFJVRSBpZiBhbGwgbW9kdWxlcyBpbml0aWFsaXplZDsgb3RoZXJ3aXNlIEZBTFNFLgorICogIFJlcXVpcmVzOgorICogIEVuc3VyZXM6CisgKiAgICAgIFNFUlZJQ0VTIG1vZHVsZXMgaW5pdGlhbGl6ZWQuCisgKi8KK2V4dGVybiBib29sIHNlcnZpY2VzX2luaXQodm9pZCk7CisKKyNlbmRpZiAvKiBTRVJWSUNFU18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9zdHJtLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvc3RybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNDY3MWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvc3RybS5oCkBAIC0wLDAgKzEsNDA0IEBACisvKgorICogc3RybS5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIERTUEJyaWRnZSBTdHJlYW0gTWFuYWdlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIFNUUk1fCisjZGVmaW5lIFNUUk1fCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2Lmg+CisKKyNpbmNsdWRlIDxkc3BicmlkZ2Uvc3RybWRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvcHJvYy5oPgorCisvKgorICogID09PT09PT09IHN0cm1fYWxsb2NhdGVfYnVmZmVyID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQWxsb2NhdGUgZGF0YSBidWZmZXIocykgZm9yIHVzZSB3aXRoIGEgc3RyZWFtLgorICogIFBhcmFtZXRlcjoKKyAqICAgICAgc3RybXJlczogICAgIFN0cmVhbSByZXNvdXJjZSBpbmZvIGhhbmRsZSByZXR1cm5lZCBmcm9tIHN0cm1fb3BlbigpLgorICogICAgICB1c2l6ZTogICAgICAgICAgU2l6ZSAoR1BQIGJ5dGVzKSBvZiB0aGUgYnVmZmVyKHMpLgorICogICAgICBudW1fYnVmczogICAgICAgTnVtYmVyIG9mIGJ1ZmZlcnMgdG8gYWxsb2NhdGUuCisgKiAgICAgIGFwX2J1ZmZlcjogICAgICAgQXJyYXkgdG8gaG9sZCBidWZmZXIgYWRkcmVzc2VzLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIHN0cmVhbV9vYmouCisgKiAgICAgIC1FTk9NRU06ICAgIEluc3VmZmljaWVudCBtZW1vcnkuCisgKiAgICAgIC1FUEVSTTogICAgICBGYWlsdXJlIG9jY3VycmVkLCB1bmFibGUgdG8gYWxsb2NhdGUgYnVmZmVycy4KKyAqICAgICAgLUVJTlZBTDogICAgICB1c2l6ZSBtdXN0IGJlID4gMCBieXRlcy4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgc3RybV9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgYXBfYnVmZmVyICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBzdHJtX2FsbG9jYXRlX2J1ZmZlcihzdHJ1Y3Qgc3RybV9yZXNfb2JqZWN0ICpzdHJtcmVzLAorCQkJCSAgICAgICB1MzIgdXNpemUsCisJCQkJICAgICAgIHU4ICoqYXBfYnVmZmVyLAorCQkJCSAgICAgICB1MzIgbnVtX2J1ZnMsCisJCQkJICAgICAgIHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQpOworCisvKgorICogID09PT09PT09IHN0cm1fY2xvc2UgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDbG9zZSBhIHN0cmVhbSBvcGVuZWQgd2l0aCBzdHJtX29wZW4oKS4KKyAqICBQYXJhbWV0ZXI6CisgKiAgICAgIHN0cm1yZXM6ICAgICAgICAgIFN0cmVhbSByZXNvdXJjZSBpbmZvIGhhbmRsZSByZXR1cm5lZCBmcm9tIHN0cm1fb3BlbigpLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIHN0cmVhbV9vYmouCisgKiAgICAgIC1FUElQRTogICBTb21lIGRhdGEgYnVmZmVycyBpc3N1ZWQgdG8gdGhlIHN0cmVhbSBoYXZlIG5vdAorICogICAgICAgICAgICAgICAgICAgICAgYmVlbiByZWNsYWltZWQuCisgKiAgICAgIC1FUEVSTTogICAgICBGYWlsdXJlIHRvIGNsb3NlIHN0cmVhbS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgc3RybV9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IHN0cm1fY2xvc2Uoc3RydWN0IHN0cm1fcmVzX29iamVjdCAqc3RybXJlcywKKwkJCSAgICAgc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCk7CisKKy8qCisgKiAgPT09PT09PT0gc3RybV9jcmVhdGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDcmVhdGUgYSBTVFJNIG1hbmFnZXIgb2JqZWN0LiBUaGlzIG9iamVjdCBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAqICAgICAgZGV2aWNlIG5lZWRlZCB0byBvcGVuIHN0cmVhbXMuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgc3RybV9tYW46ICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIGhhbmRsZSB0byBTVFJNIG1hbmFnZXIgb2JqZWN0IG9uCisgKiAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuCisgKiAgICAgIGRldl9vYmo6ICAgICAgICAgICBEZXZpY2UgZm9yIHRoaXMgcHJvY2Vzc29yLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzOworICogICAgICAtRU5PTUVNOiAgICBJbnN1ZmZpY2llbnQgbWVtb3J5IGZvciByZXF1ZXN0ZWQgcmVzb3VyY2VzLgorICogICAgICAtRVBFUk06ICAgICAgR2VuZXJhbCBmYWlsdXJlLgorICogIFJlcXVpcmVzOgorICogICAgICBzdHJtX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBzdHJtX21hbiAhPSBOVUxMLgorICogICAgICBkZXZfb2JqICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgIFZhbGlkICpzdHJtX21hbi4KKyAqICAgICAgZXJyb3I6ICAgICAgICAgICpzdHJtX21hbiA9PSBOVUxMLgorICovCitleHRlcm4gaW50IHN0cm1fY3JlYXRlKHN0cnVjdCBzdHJtX21nciAqKnN0cm1fbWFuLAorCQkJICAgICAgc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmopOworCisvKgorICogID09PT09PT09IHN0cm1fZGVsZXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGVsZXRlIHRoZSBTVFJNIE9iamVjdC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBzdHJtX21ncl9vYmo6ICAgICAgIEhhbmRsZSB0byBTVFJNIG1hbmFnZXIgb2JqZWN0IGZyb20gc3RybV9jcmVhdGUuCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgc3RybV9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgVmFsaWQgc3RybV9tZ3Jfb2JqLgorICogIEVuc3VyZXM6CisgKiAgICAgIHN0cm1fbWdyX29iaiBpcyBub3QgdmFsaWQuCisgKi8KK2V4dGVybiB2b2lkIHN0cm1fZGVsZXRlKHN0cnVjdCBzdHJtX21nciAqc3RybV9tZ3Jfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBzdHJtX2V4aXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEaXNjb250aW51ZSB1c2FnZSBvZiBTVFJNIG1vZHVsZS4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIHN0cm1faW5pdCh2b2lkKSBzdWNjZXNzZnVsbHkgY2FsbGVkIGJlZm9yZS4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gdm9pZCBzdHJtX2V4aXQodm9pZCk7CisKKy8qCisgKiAgPT09PT09PT0gc3RybV9mcmVlX2J1ZmZlciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEZyZWUgYnVmZmVyKHMpIGFsbG9jYXRlZCB3aXRoIHN0cm1fYWxsb2NhdGVfYnVmZmVyLgorICogIFBhcmFtZXRlcjoKKyAqICAgICAgc3RybXJlczogICAgIFN0cmVhbSByZXNvdXJjZSBpbmZvIGhhbmRsZSByZXR1cm5lZCBmcm9tIHN0cm1fb3BlbigpLgorICogICAgICBhcF9idWZmZXI6ICAgICAgIEFycmF5IGNvbnRhaW5pbmcgYnVmZmVyIGFkZHJlc3Nlcy4KKyAqICAgICAgbnVtX2J1ZnM6ICAgICAgIE51bWJlciBvZiBidWZmZXJzIHRvIGJlIGZyZWVkLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIHN0cmVhbSBoYW5kbGUuCisgKiAgICAgIC1FUEVSTTogICAgICBGYWlsdXJlIG9jY3VycmVkLCB1bmFibGUgdG8gZnJlZSBidWZmZXJzLgorICogIFJlcXVpcmVzOgorICogICAgICBzdHJtX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBhcF9idWZmZXIgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IHN0cm1fZnJlZV9idWZmZXIoc3RydWN0IHN0cm1fcmVzX29iamVjdCAqc3RybXJlcywKKwkJCQkgICB1OCAqKmFwX2J1ZmZlciwgdTMyIG51bV9idWZzLAorCQkJCSAgIHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQpOworCisvKgorICogID09PT09PT09IHN0cm1fZ2V0X2V2ZW50X2hhbmRsZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEdldCBzdHJlYW0ncyB1c2VyIGV2ZW50IGhhbmRsZS4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdoZW4gY2xvc2luZworICogICAgICBhIHN0cmVhbSwgc28gdGhlIGV2ZW50IGNhbiBiZSBjbG9zZWQuCisgKiAgUGFyYW1ldGVyOgorICogICAgICBzdHJlYW1fb2JqOiAgICAgIFN0cmVhbSBoYW5kbGUgcmV0dXJuZWQgZnJvbSBzdHJtX29wZW4oKS4KKyAqICAgICAgcGhfZXZlbnQ6ICAgICAgICBMb2NhdGlvbiB0byBzdG9yZSBldmVudCBoYW5kbGUgb24gb3V0cHV0LgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIHN0cmVhbV9vYmouCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIHN0cm1faW5pdCh2b2lkKSBjYWxsZWQuCisgKiAgICAgIHBoX2V2ZW50ICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBzdHJtX2dldF9ldmVudF9oYW5kbGUoc3RydWN0IHN0cm1fb2JqZWN0ICpzdHJlYW1fb2JqLAorCQkJCQl2b2lkICoqcGhfZXZlbnQpOworCisvKgorICogID09PT09PT09IHN0cm1fZ2V0X2luZm8gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBHZXQgaW5mb3JtYXRpb24gYWJvdXQgYSBzdHJlYW0uIFVzZXIncyBkc3Bfc3RyZWFtaW5mbyBpcyBjb250YWluZWQKKyAqICAgICAgaW4gc3RyZWFtX2luZm8gc3RydWN0LiBzdHJlYW1faW5mbyBhbHNvIGNvbnRhaW5zIEJyaWRnZSBwcml2YXRlIGluZm8uCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgc3RyZWFtX29iajogICAgICAgICBTdHJlYW0gaGFuZGxlIHJldHVybmVkIGZyb20gc3RybV9vcGVuKCkuCisgKiAgICAgIHN0cmVhbV9pbmZvOiAgICAgICAgTG9jYXRpb24gdG8gc3RvcmUgc3RyZWFtIGluZm8gb24gb3V0cHV0LgorICogICAgICB1U3RlYW1JbmZvU2l6ZTogICAgIFNpemUgb2YgdXNlcidzIGRzcF9zdHJlYW1pbmZvIHN0cnVjdHVyZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6ICAgICAgICBJbnZhbGlkIHN0cmVhbV9vYmouCisgKiAgICAgIC1FSU5WQUw6ICAgICAgICAgIHN0cmVhbV9pbmZvX3NpemUgPCBzaXplb2YoZHNwX3N0cmVhbWluZm8pLgorICogICAgICAtRVBFUk06ICAgICAgICAgIFVuYWJsZSB0byBnZXQgc3RyZWFtIGluZm8uCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIHN0cm1faW5pdCh2b2lkKSBjYWxsZWQuCisgKiAgICAgIHN0cmVhbV9pbmZvICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBzdHJtX2dldF9pbmZvKHN0cnVjdCBzdHJtX29iamVjdCAqc3RyZWFtX29iaiwKKwkJCQlzdHJ1Y3Qgc3RyZWFtX2luZm8gKnN0cmVhbV9pbmZvLAorCQkJCXUzMiBzdHJlYW1faW5mb19zaXplKTsKKworLyoKKyAqICA9PT09PT09PSBzdHJtX2lkbGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJZGxlIGEgc3RyZWFtIGFuZCBvcHRpb25hbGx5IGZsdXNoIG91dHB1dCBkYXRhIGJ1ZmZlcnMuCisgKiAgICAgIElmIHRoaXMgaXMgYW4gb3V0cHV0IHN0cmVhbSBhbmQgZmx1c2hfZGF0YSBpcyBUUlVFLCBhbGwgZGF0YSBjdXJyZW50bHkKKyAqICAgICAgZW5xdWV1ZWQgd2lsbCBiZSBkaXNjYXJkZWQuCisgKiAgICAgIElmIHRoaXMgaXMgYW4gb3V0cHV0IHN0cmVhbSBhbmQgZmx1c2hfZGF0YSBpcyBGQUxTRSwgdGhpcyBmdW5jdGlvbgorICogICAgICB3aWxsIGJsb2NrIHVudGlsIGFsbCBjdXJyZW50bHkgYnVmZmVyZWQgZGF0YSBpcyBvdXRwdXQsIG9yIHRoZSB0aW1lb3V0CisgKiAgICAgIHNwZWNpZmllZCBoYXMgYmVlbiByZWFjaGVkLgorICogICAgICBBZnRlciBhIHN1Y2Nlc3NmdWwgY2FsbCB0byBzdHJtX2lkbGUoKSwgYWxsIGJ1ZmZlcnMgY2FuIGltbWVkaWF0ZWx5CisgKiAgICAgIGJlIHJlY2xhaW1lZC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBzdHJlYW1fb2JqOiAgICAgU3RyZWFtIGhhbmRsZSByZXR1cm5lZCBmcm9tIHN0cm1fb3BlbigpLgorICogICAgICBmbHVzaF9kYXRhOiAgICAgSWYgVFJVRSwgZGlzY2FyZCBvdXRwdXQgYnVmZmVycy4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBzdHJlYW1fb2JqLgorICogICAgICAtRVRJTUU6ICAgQSB0aW1lb3V0IG9jY3VycmVkIGJlZm9yZSB0aGUgc3RyZWFtIGNvdWxkIGJlIGlkbGVkLgorICogICAgICAtRVBFUk06ICAgICAgVW5hYmxlIHRvIGlkbGUgc3RyZWFtLgorICogIFJlcXVpcmVzOgorICogICAgICBzdHJtX2luaXQodm9pZCkgY2FsbGVkLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgc3RybV9pZGxlKHN0cnVjdCBzdHJtX29iamVjdCAqc3RyZWFtX29iaiwgYm9vbCBmbHVzaF9kYXRhKTsKKworLyoKKyAqICA9PT09PT09PSBzdHJtX2luaXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplIHRoZSBTVFJNIG1vZHVsZS4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgICAgIFRSVUUgaWYgaW5pdGlhbGl6YXRpb24gc3VjY2VlZGVkLCBGQUxTRSBvdGhlcndpc2UuCisgKiAgUmVxdWlyZXM6CisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGJvb2wgc3RybV9pbml0KHZvaWQpOworCisvKgorICogID09PT09PT09IHN0cm1faXNzdWUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTZW5kIGEgYnVmZmVyIG9mIGRhdGEgdG8gYSBzdHJlYW0uCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgc3RyZWFtX29iajogICAgICAgICBTdHJlYW0gaGFuZGxlIHJldHVybmVkIGZyb20gc3RybV9vcGVuKCkuCisgKiAgICAgIHBidWY6ICAgICAgICAgICAgICAgUG9pbnRlciB0byBidWZmZXIgb2YgZGF0YSB0byBiZSBzZW50IHRvIHRoZSBzdHJlYW0uCisgKiAgICAgIHVsX2J5dGVzOiAgICAgICAgICAgIE51bWJlciBvZiBieXRlcyBvZiBkYXRhIGluIHRoZSBidWZmZXIuCisgKiAgICAgIHVsX2J1Zl9zaXplOiAgICAgICAgICBBY3R1YWwgYnVmZmVyIHNpemUgaW4gYnl0ZXMuCisgKiAgICAgIGR3X2FyZzogICAgICAgICAgICAgIEEgdXNlciBhcmd1bWVudCB0aGF0IHRyYXZlbHMgd2l0aCB0aGUgYnVmZmVyLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogICAgICAgIEludmFsaWQgc3RyZWFtX29iai4KKyAqICAgICAgLUVOT1NSOiAgICBUaGUgc3RyZWFtIGlzIGZ1bGwuCisgKiAgICAgIC1FUEVSTTogICAgICAgICAgRmFpbHVyZSBvY2N1cnJlZCwgdW5hYmxlIHRvIGlzc3VlIGJ1ZmZlci4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgc3RybV9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgcGJ1ZiAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgc3RybV9pc3N1ZShzdHJ1Y3Qgc3RybV9vYmplY3QgKnN0cmVhbV9vYmosIHU4ICogcGJ1ZiwKKwkJCSAgICAgdTMyIHVsX2J5dGVzLCB1MzIgdWxfYnVmX3NpemUsIHUzMiBkd19hcmcpOworCisvKgorICogID09PT09PT09IHN0cm1fb3BlbiA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIE9wZW4gYSBzdHJlYW0gZm9yIHNlbmRpbmcvcmVjZWl2aW5nIGRhdGEgYnVmZmVycyB0by9mcm9tIGEgdGFzayBvZgorICogICAgICBEQUlTIHNvY2tldCBub2RlIG9uIHRoZSBEU1AuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaG5vZGU6ICAgICAgICAgIE5vZGUgaGFuZGxlIHJldHVybmVkIGZyb20gbm9kZV9hbGxvY2F0ZSgpLgorICogICAgICBkaXI6ICAgICAgICAgICBEU1BfVE9OT0RFIG9yIERTUF9GUk9NTk9ERS4KKyAqICAgICAgaW5kZXg6ICAgICAgICAgU3RyZWFtIGluZGV4LgorICogICAgICBwYXR0cjogICAgICAgICAgUG9pbnRlciB0byBzdHJ1Y3R1cmUgY29udGFpbmluZyBhdHRyaWJ1dGVzIHRvIGJlCisgKiAgICAgICAgICAgICAgICAgICAgICBhcHBsaWVkIHRvIHN0cmVhbS4gQ2Fubm90IGJlIE5VTEwuCisgKiAgICAgIHN0cm1yZXM6ICAgICBMb2NhdGlvbiB0byBzdG9yZSBzdHJlYW0gcmVzdW9yY2UgaW5mbyBoYW5kbGUgb24gb3V0cHV0LgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGhub2RlLgorICogICAgICAtRVBFUk06IEludmFsaWQgZGlyZWN0aW9uLgorICogICAgICAgICAgICAgIGhub2RlIGlzIG5vdCBhIHRhc2sgb3IgREFJUyBzb2NrZXQgbm9kZS4KKyAqICAgICAgICAgICAgICBVbmFibGUgdG8gb3BlbiBzdHJlYW0uCisgKiAgICAgIC1FSU5WQUw6ICAgICBJbnZhbGlkIGluZGV4LgorICogIFJlcXVpcmVzOgorICogICAgICBzdHJtX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBzdHJtcmVzICE9IE5VTEwuCisgKiAgICAgIHBhdHRyICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgICpzdHJtcmVzIGlzIHZhbGlkLgorICogICAgICBlcnJvcjogICAgICAgICAgKnN0cm1yZXMgPT0gTlVMTC4KKyAqLworZXh0ZXJuIGludCBzdHJtX29wZW4oc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwgdTMyIGRpciwKKwkJCSAgICB1MzIgaW5kZXgsIHN0cnVjdCBzdHJtX2F0dHIgKnBhdHRyLAorCQkJICAgIHN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKipzdHJtcmVzLAorCQkJICAgIHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQpOworCisvKgorICogID09PT09PT09IHN0cm1fcHJlcGFyZV9idWZmZXIgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBQcmVwYXJlIGEgZGF0YSBidWZmZXIgbm90IGFsbG9jYXRlZCBieSBEU1BTdHJlYW1fQWxsb2NhdGVCdWZmZXJzKCkKKyAqICAgICAgZm9yIHVzZSB3aXRoIGEgc3RyZWFtLgorICogIFBhcmFtZXRlcjoKKyAqICAgICAgc3RyZWFtX29iajogICAgIFN0cmVhbSBoYW5kbGUgcmV0dXJuZWQgZnJvbSBzdHJtX29wZW4oKS4KKyAqICAgICAgdXNpemU6ICAgICAgICAgIFNpemUgKEdQUCBieXRlcykgb2YgdGhlIGJ1ZmZlci4KKyAqICAgICAgcGJ1ZmZlcjogICAgICAgIEJ1ZmZlciBhZGRyZXNzLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIHN0cmVhbV9vYmouCisgKiAgICAgIC1FUEVSTTogICAgICBGYWlsdXJlIG9jY3VycmVkLCB1bmFibGUgdG8gcHJlcGFyZSBidWZmZXIuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIHN0cm1faW5pdCh2b2lkKSBjYWxsZWQuCisgKiAgICAgIHBidWZmZXIgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IHN0cm1fcHJlcGFyZV9idWZmZXIoc3RydWN0IHN0cm1fb2JqZWN0ICpzdHJlYW1fb2JqLAorCQkJCSAgICAgIHUzMiB1c2l6ZSwgdTggKnBidWZmZXIpOworCisvKgorICogID09PT09PT09IHN0cm1fcmVjbGFpbSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlcXVlc3QgYSBidWZmZXIgYmFjayBmcm9tIGEgc3RyZWFtLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIHN0cmVhbV9vYmo6ICAgICAgICAgIFN0cmVhbSBoYW5kbGUgcmV0dXJuZWQgZnJvbSBzdHJtX29wZW4oKS4KKyAqICAgICAgYnVmX3B0cjogICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIHBvaW50ZXIgdG8gcmVjbGFpbWVkIGJ1ZmZlci4KKyAqICAgICAgbmJ5dGVzOiAgICAgICAgIExvY2F0aW9uIHdoZXJlIG51bWJlciBvZiBieXRlcyBvZiBkYXRhIGluIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgYnVmZmVyIHdpbGwgYmUgd3JpdHRlbi4KKyAqICAgICAgYnVmZl9zaXplOiAgICAgIExvY2F0aW9uIHdoZXJlIGFjdHVhbCBidWZmZXIgc2l6ZSB3aWxsIGJlIHdyaXR0ZW4uCisgKiAgICAgIHBkd19hcmc6ICAgICAgICAgTG9jYXRpb24gd2hlcmUgdXNlciBhcmd1bWVudCB0aGF0IHRyYXZlbHMgd2l0aAorICogICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZlciB3aWxsIGJlIHdyaXR0ZW4uCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6ICAgIEludmFsaWQgc3RyZWFtX29iai4KKyAqICAgICAgLUVUSU1FOiAgIEEgdGltZW91dCBvY2N1cnJlZCBiZWZvcmUgYSBidWZmZXIgY291bGQgYmUKKyAqICAgICAgICAgICAgICAgICAgICAgIHJldHJpZXZlZC4KKyAqICAgICAgLUVQRVJNOiAgICAgIEZhaWx1cmUgb2NjdXJyZWQsIHVuYWJsZSB0byByZWNsYWltIGJ1ZmZlci4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgc3RybV9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgYnVmX3B0ciAhPSBOVUxMLgorICogICAgICBuYnl0ZXMgIT0gTlVMTC4KKyAqICAgICAgcGR3X2FyZyAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgc3RybV9yZWNsYWltKHN0cnVjdCBzdHJtX29iamVjdCAqc3RyZWFtX29iaiwKKwkJCSAgICAgICB1OCAqKmJ1Zl9wdHIsIHUzMiAqIG5ieXRlcywKKwkJCSAgICAgICB1MzIgKmJ1ZmZfc2l6ZSwgdTMyICpwZHdfYXJnKTsKKworLyoKKyAqICA9PT09PT09PSBzdHJtX3JlZ2lzdGVyX25vdGlmeSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlZ2lzdGVyIHRvIGJlIG5vdGlmaWVkIG9uIHNwZWNpZmljIGV2ZW50cyBmb3IgdGhpcyBzdHJlYW0uCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgc3RyZWFtX29iajogICAgIFN0cmVhbSBoYW5kbGUgcmV0dXJuZWQgYnkgc3RybV9vcGVuKCkuCisgKiAgICAgIGV2ZW50X21hc2s6ICAgICBNYXNrIG9mIHR5cGVzIG9mIGV2ZW50cyB0byBiZSBub3RpZmllZCBhYm91dC4KKyAqICAgICAgbm90aWZ5X3R5cGU6ICAgIFR5cGUgb2Ygbm90aWZpY2F0aW9uIHRvIGJlIHNlbnQuCisgKiAgICAgIGhub3RpZmljYXRpb246ICBIYW5kbGUgdG8gYmUgdXNlZCBmb3Igbm90aWZpY2F0aW9uLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIHN0cmVhbV9vYmouCisgKiAgICAgIC1FTk9NRU06ICAgIEluc3VmZmljaWVudCBtZW1vcnkgb24gR1BQLgorICogICAgICAtRUlOVkFMOiAgICAgZXZlbnRfbWFzayBpcyBpbnZhbGlkLgorICogICAgICAtRU5PU1lTOiAgIE5vdGlmaWNhdGlvbiB0eXBlIHNwZWNpZmllZCBieSBub3RpZnlfdHlwZSBpcyBub3QKKyAqICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgc3RybV9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgaG5vdGlmaWNhdGlvbiAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgc3RybV9yZWdpc3Rlcl9ub3RpZnkoc3RydWN0IHN0cm1fb2JqZWN0ICpzdHJlYW1fb2JqLAorCQkJCSAgICAgICB1MzIgZXZlbnRfbWFzaywgdTMyIG5vdGlmeV90eXBlLAorCQkJCSAgICAgICBzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbgorCQkJCSAgICAgICAqaG5vdGlmaWNhdGlvbik7CisKKy8qCisgKiAgPT09PT09PT0gc3RybV9zZWxlY3QgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTZWxlY3QgYSByZWFkeSBzdHJlYW0uCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgc3RybV90YWI6ICAgICAgIEFycmF5IG9mIHN0cmVhbSBoYW5kbGVzIHJldHVybmVkIGZyb20gc3RybV9vcGVuKCkuCisgKiAgICAgIHN0cm1zOiAgICAgICAgICBOdW1iZXIgb2Ygc3RyZWFtIGhhbmRsZXMgaW4gYXJyYXkuCisgKiAgICAgIHBtYXNrOiAgICAgICAgICBMb2NhdGlvbiB0byBzdG9yZSBtYXNrIG9mIHJlYWR5IHN0cmVhbXMgb24gb3V0cHV0LgorICogICAgICB1dGltZW91dDogICAgICAgVGltZW91dCB2YWx1ZSAobWlsbGlzZWNvbmRzKS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVET006ICAgICBzdHJtcyBvdXQgb2YgcmFuZ2UuCisKKyAqICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBzdHJlYW0gaGFuZGxlIGluIGFycmF5LgorICogICAgICAtRVRJTUU6ICAgQSB0aW1lb3V0IG9jY3VycmVkIGJlZm9yZSBhIHN0cmVhbSBiZWNhbWUgcmVhZHkuCisgKiAgICAgIC1FUEVSTTogICAgICBGYWlsdXJlIG9jY3VycmVkLCB1bmFibGUgdG8gc2VsZWN0IGEgc3RyZWFtLgorICogIFJlcXVpcmVzOgorICogICAgICBzdHJtX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBzdHJtX3RhYiAhPSBOVUxMLgorICogICAgICBzdHJtcyA+IDAuCisgKiAgICAgIHBtYXNrICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgICpwbWFzayAhPSAwIHx8IHV0aW1lb3V0ID09IDAuCisgKiAgICAgIEVycm9yOiAgICAgICAgICAqcG1hc2sgPT0gMC4KKyAqLworZXh0ZXJuIGludCBzdHJtX3NlbGVjdChzdHJ1Y3Qgc3RybV9vYmplY3QgKipzdHJtX3RhYiwKKwkJCSAgICAgIHUzMiBzdHJtcywgdTMyICpwbWFzaywgdTMyIHV0aW1lb3V0KTsKKworLyoKKyAqICA9PT09PT09PSBzdHJtX3VucHJlcGFyZV9idWZmZXIgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBVbnByZXBhcmUgYSBkYXRhIGJ1ZmZlciB0aGF0IHdhcyBwcmV2aW91c2x5IHByZXBhcmVkIGZvciBhIHN0cmVhbQorICogICAgICB3aXRoIERTUFN0cmVhbV9QcmVwYXJlQnVmZmVyKCksIGFuZCB0aGF0IHdpbGwgbm8gbG9uZ2VyIGJlIHVzZWQgd2l0aAorICogICAgICB0aGUgc3RyZWFtLgorICogIFBhcmFtZXRlcjoKKyAqICAgICAgc3RyZWFtX29iajogICAgIFN0cmVhbSBoYW5kbGUgcmV0dXJuZWQgZnJvbSBzdHJtX29wZW4oKS4KKyAqICAgICAgdXNpemU6ICAgICAgICAgIFNpemUgKEdQUCBieXRlcykgb2YgdGhlIGJ1ZmZlci4KKyAqICAgICAgcGJ1ZmZlcjogICAgICAgIEJ1ZmZlciBhZGRyZXNzLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIHN0cmVhbV9vYmouCisgKiAgICAgIC1FUEVSTTogICAgICBGYWlsdXJlIG9jY3VycmVkLCB1bmFibGUgdG8gdW5wcmVwYXJlIGJ1ZmZlci4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgc3RybV9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgcGJ1ZmZlciAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgc3RybV91bnByZXBhcmVfYnVmZmVyKHN0cnVjdCBzdHJtX29iamVjdCAqc3RyZWFtX29iaiwKKwkJCQkJdTMyIHVzaXplLCB1OCAqcGJ1ZmZlcik7CisKKyNlbmRpZiAvKiBTVFJNXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3N0cm1kZWZzLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvc3RybWRlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzYzZjc5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3N0cm1kZWZzLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIHN0cm1kZWZzLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogR2xvYmFsIFNUUk0gY29uc3RhbnRzIGFuZCB0eXBlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIFNUUk1ERUZTXworI2RlZmluZSBTVFJNREVGU18KKworI2RlZmluZSBTVFJNX01BWEVWVE5BTUVMRU4gICAgICAzMgorCitzdHJ1Y3Qgc3RybV9tZ3I7CisKK3N0cnVjdCBzdHJtX29iamVjdDsKKworc3RydWN0IHN0cm1fYXR0ciB7CisJdm9pZCAqdXNlcl9ldmVudDsKKwljaGFyICpwc3RyX2V2ZW50X25hbWU7CisJdm9pZCAqdmlydF9iYXNlOwkvKiBQcm9jZXNzIHZpcnR1YWwgYmFzZSBhZGRyZXNzIG9mCisJCQkJICogbWFwcGVkIFNNICovCisJdTMyIHVsX3ZpcnRfc2l6ZTsJLyogU2l6ZSBvZiB2aXJ0dWFsIHNwYWNlIGluIGJ5dGVzICovCisJc3RydWN0IGRzcF9zdHJlYW1hdHRyaW4gKnN0cmVhbV9hdHRyX2luOworfTsKKworc3RydWN0IHN0cmVhbV9pbmZvIHsKKwllbnVtIGRzcF9zdHJtbW9kZSBzdHJtX21vZGU7CS8qIHRyYW5zcG9ydCBtb2RlIG9mCisJCQkJCSAqIHN0cmVhbShETUEsIFpFUk9DT1BZLi4pICovCisJdTMyIHNlZ21lbnRfaWQ7CQkvKiBTZWdtZW50IHN0cm0gYWxsb2NzIGZyb20uIDAgaXMgbG9jYWwgbWVtICovCisJdm9pZCAqdmlydF9iYXNlOwkvKiAiICAgICAgIiBTdHJlYW0ncHJvY2VzcyB2aXJ0IGJhc2UgKi8KKwlzdHJ1Y3QgZHNwX3N0cmVhbWluZm8gKnVzZXJfc3RybTsJLyogVXNlcidzIHN0cmVhbSBpbmZvcm1hdGlvbgorCQkJCQkJICogcmV0dXJuZWQgKi8KK307CisKKyNlbmRpZiAvKiBTVFJNREVGU18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9zeW5jLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvc3luYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNjUxZTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvc3luYy5oCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogc3luYy5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIFByb3ZpZGUgc3luY2hyb25pemF0aW9uIHNlcnZpY2VzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgX1NZTkNfSAorI2RlZmluZSBfU1lOQ19ICisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisKKworLyogU3BlY2lhbCB0aW1lb3V0IHZhbHVlIGluZGljYXRpbmcgYW4gaW5maW5pdGUgd2FpdDogKi8KKyNkZWZpbmUgU1lOQ19JTkZJTklURSAgMHhmZmZmZmZmZgorCisvKioKKyAqIHN0cnVjdCBzeW5jX29iamVjdCAtIHRoZSBiYXNpYyBzeW5jX29iamVjdCBzdHJ1Y3R1cmUKKyAqIEBjb21wOgl1c2UgdG8gc2lnbmFsIGV2ZW50cworICogQG11bHRpX2NvbXA6CXVzZSB0byBzaWduYWwgbXVsdGlwbGUgZXZlbnRzLgorICoKKyAqLworc3RydWN0IHN5bmNfb2JqZWN0eworCXN0cnVjdCBjb21wbGV0aW9uIGNvbXA7CisJc3RydWN0IGNvbXBsZXRpb24gKm11bHRpX2NvbXA7Cit9OworCisvKioKKyAqIHN5bmNfaW5pdF9ldmVudCgpIC0gc2V0IGluaXRpYWwgc3RhdGUgZm9yIGEgc3luY19ldmVudCBlbGVtZW50CisgKiBAZXZlbnQ6CWV2ZW50IHRvIGJlIGluaXRpYWxpemVkLgorICoKKyAqIFNldCB0aGUgaW5pdGlhbCBzdGF0ZSBmb3IgYSBzeW5jX2V2ZW50IGVsZW1lbnQuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHN5bmNfaW5pdF9ldmVudChzdHJ1Y3Qgc3luY19vYmplY3QgKmV2ZW50KQoreworCWluaXRfY29tcGxldGlvbigmZXZlbnQtPmNvbXApOworCWV2ZW50LT5tdWx0aV9jb21wID0gTlVMTDsKK30KKworLyoqCisgKiBzeW5jX3Jlc2V0X2V2ZW50KCkgLSByZXNldCBhIHN5bmNfZXZlbnQgZWxlbWVudAorICogQGV2ZW50OglldmVudCB0byBiZSByZXNldC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlc2V0IHRvIHRoZSBpbml0aWFsIHN0YXRlIHRvIEBldmVudC4KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgc3luY19yZXNldF9ldmVudChzdHJ1Y3Qgc3luY19vYmplY3QgKmV2ZW50KQoreworCUlOSVRfQ09NUExFVElPTihldmVudC0+Y29tcCk7CisJZXZlbnQtPm11bHRpX2NvbXAgPSBOVUxMOworfQorCisvKioKKyAqIHN5bmNfc2V0X2V2ZW50KCkgLSBzZXQgb3Igc2lnbmFsIGFuZCBzcGVjaWZpZWQgZXZlbnQKKyAqIEBldmVudDoJRXZlbnQgdG8gYmUgc2V0Li4KKyAqCisgKiBzZXQgdGhlIEBldmVudCwgaWYgdGhlcmUgaXMgYW4gdGhyZWFkIHdhaXRpbmcgZm9yIHRoZSBldmVudAorICogaXQgd2lsbCBiZSB3YWtlbiB1cCwgdGhpcyBmdW5jdGlvbiBvbmx5IHdha2VzIG9uZSB0aHJlYWQuCisgKi8KKwordm9pZCBzeW5jX3NldF9ldmVudChzdHJ1Y3Qgc3luY19vYmplY3QgKmV2ZW50KTsKKworLyoqCisgKiBzeW5jX3dhaXRfb25fZXZlbnQoKSAtIHdhaXRzIGZvciBhIGV2ZW50IHRvIGJlIHNldC4KKyAqIEBldmVudDoJZXZlbnRzIHRvIHdhaXQgZm9yIGl0LgorICogQHRpbWVvdXQJdGltZW91dCBvbiB3YWl0aW5nIGZvciB0aGUgZXZldG4uCisgKgorICogVGhpcyBmdW5jdGlvcyB3aWxsIHdhaXQgdW50aWwgQGV2ZW50IGlzIHNldCBvciB1bnRpbCB0aW1lb3V0LiBJbiBjYXNlIG9mCisgKiBzdWNjZXNzIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAwIGFuZAorICogaW4gY2FzZSBvZiB0aW1lb3V0IHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAtRVRJTUUKKyAqLworCitzdGF0aWMgaW5saW5lIGludCBzeW5jX3dhaXRfb25fZXZlbnQoc3RydWN0IHN5bmNfb2JqZWN0ICpldmVudCwKKwkJCQkJCQl1bnNpZ25lZCB0aW1lb3V0KQoreworCXJldHVybiB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmV2ZW50LT5jb21wLAorCQltc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpKSA/IDAgOiAtRVRJTUU7Cit9CisKKy8qKgorICogc3luY193YWl0X29uX211bHRpcGxlX2V2ZW50cygpIC0gd2FpdHMgZm9yIG11bHRpcGxlIGV2ZW50cyB0byBiZSBzZXQuCisgKiBAZXZlbnRzOglBcnJheSBvZiBldmVudHMgdG8gd2FpdCBmb3IgdGhlbS4KKyAqIEBjb3VudDoJbnVtYmVyIG9mIGVsZW1lbnRzIG9mIHRoZSBhcnJheS4KKyAqIEB0aW1lb3V0CXRpbWVvdXQgb24gd2FpdGluZyBmb3IgdGhlIGV2ZXRucy4KKyAqIEBwdV9pbmRleAlpbmRleCBvZiB0aGUgZXZlbnQgc2V0LgorICoKKyAqIFRoaXMgZnVuY3Rpb3Mgd2lsbCB3YWl0IHVudGlsIGFueSBvZiB0aGUgYXJyYXkgZWxlbWVudCBpcyBzZXQgb3IgdW50aWwKKyAqIHRpbWVvdXQuIEluIGNhc2Ugb2Ygc3VjY2VzcyB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gMCBhbmQKKyAqIEBwdV9pbmRleCB3aWxsIHN0b3JlIHRoZSBpbmRleCBvZiB0aGUgYXJyYXkgZWxlbWVudCBzZXQgYW5kIGluIGNhc2UKKyAqIG9mIHRpbWVvdXQgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIC1FVElNRS4KKyAqLworCitpbnQgc3luY193YWl0X29uX211bHRpcGxlX2V2ZW50cyhzdHJ1Y3Qgc3luY19vYmplY3QgKipldmVudHMsCisJCQkJICAgICB1bnNpZ25lZCBjb3VudCwgdW5zaWduZWQgdGltZW91dCwKKwkJCQkgICAgIHVuc2lnbmVkICppbmRleCk7CisKKyNlbmRpZiAvKiBfU1lOQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvdXRpbGRlZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS91dGlsZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZTU0MTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvdXRpbGRlZnMuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogdXRpbGRlZnMuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBHbG9iYWwgVVRJTCBjb25zdGFudHMgYW5kIHR5cGVzLCBzaGFyZWQgYmV0d2VlbiBEU1AgQVBJIGFuZCBEU1BTWVMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBVVElMREVGU18KKyNkZWZpbmUgVVRJTERFRlNfCisKKy8qIGNvbnN0YW50cyB0YWtlbiBmcm9tIGNvbmZpZ21nLmggKi8KKyNkZWZpbmUgVVRJTF9NQVhNRU1SRUdTICAgICA5CisjZGVmaW5lIFVUSUxfTUFYSU9QT1JUUyAgICAgMjAKKyNkZWZpbmUgVVRJTF9NQVhJUlFTICAgICAgICA3CisjZGVmaW5lIFVUSUxfTUFYRE1BQ0hOTFMgICAgNworCisvKiBtaXNjLiBjb25zdGFudHMgKi8KKyNkZWZpbmUgVVRJTF9NQVhBUkdWUyAgICAgICAxMAorCisvKiBQbGF0Zm9ybSBzcGVjaWZpYyBpbXBvcnRhbnQgaW5mbyAqLworc3RydWN0IHV0aWxfc3lzaW5mbyB7CisJLyogR3JhbnVsYXJpdHkgb2YgcGFnZSBwcm90ZWN0aW9uOyB1c3VhbGx5IDFrIG9yIDRrICovCisJdTMyIGR3X3BhZ2Vfc2l6ZTsKKwl1MzIgZHdfYWxsb2NhdGlvbl9ncmFudWxhcml0eTsJLyogVk0gZ3JhbnVsYXJpdHksIHVzdWFsbHkgNjRLICovCisJdTMyIGR3X251bWJlcl9vZl9wcm9jZXNzb3JzOwkvKiBVc2VkIGFzIHNhbml0eSBjaGVjayAqLworfTsKKworI2VuZGlmIC8qIFVUSUxERUZTXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3V1aWR1dGlsLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvdXVpZHV0aWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTk5NDc1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3V1aWR1dGlsLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIHV1aWR1dGlsLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzcGVjaWZpY2F0aW9uIG9mIFVVSUQgaGVscGVyIGZ1bmN0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIFVVSURVVElMXworI2RlZmluZSBVVUlEVVRJTF8KKworI2RlZmluZSBNQVhVVUlETEVOICAzNworCisvKgorICogID09PT09PT09IHV1aWRfdXVpZF90b19zdHJpbmcgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDb252ZXJ0cyBhIGRzcF91dWlkIHRvIGFuIEFOU0kgc3RyaW5nLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIHV1aWRfb2JqOiAgICAgIFBvaW50ZXIgdG8gYSBkc3BfdXVpZCBvYmplY3QuCisgKiAgICAgIHN6X3V1aWQ6ICAgIFBvaW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSBhIE5VTEwtdGVybWluYXRlZCBVVUlECisgKiAgICAgICAgICAgICAgICAgIHN0cmluZy4KKyAqICAgICAgc2l6ZToJICAgIE1heGltdW0gc2l6ZSBvZiB0aGUgc3pfdXVpZCBzdHJpbmcuCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgdXVpZF9vYmogJiBzel91dWlkIGFyZSBub24tTlVMTCB2YWx1ZXMuCisgKiAgRW5zdXJlczoKKyAqICAgICAgTGVuZ2h0aCBvZiBzel91dWlkIGlzIGxlc3MgdGhhbiBNQVhVVUlETEVOLgorICogIERldGFpbHM6CisgKiAgICAgIFVVSUQgc3RyaW5nIGxpbWl0IGN1cnJlbnRseSBzZXQgYXQgTUFYVVVJRExFTi4KKyAqLwordm9pZCB1dWlkX3V1aWRfdG9fc3RyaW5nKHN0cnVjdCBkc3BfdXVpZCAqdXVpZF9vYmosIGNoYXIgKnN6X3V1aWQsCisJCQkgczMyIHNpemUpOworCisvKgorICogID09PT09PT09IHV1aWRfdXVpZF9mcm9tX3N0cmluZyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENvbnZlcnRzIGFuIEFOU0kgc3RyaW5nIHRvIGEgZHNwX3V1aWQuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgc3pfdXVpZDogICAgUG9pbnRlciB0byBhIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgYSBkc3BfdXVpZCBvYmplY3QuCisgKiAgICAgIHV1aWRfb2JqOiAgICAgIFBvaW50ZXIgdG8gYSBkc3BfdXVpZCBvYmplY3QuCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgdXVpZF9vYmogJiBzel91dWlkIGFyZSBub24tTlVMTCB2YWx1ZXMuCisgKiAgRW5zdXJlczoKKyAqICBEZXRhaWxzOgorICogICAgICBXZSBhc3N1bWUgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIFVVSUQgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorICogICAgICAiMTIzNDU2NzhfMTIzNF8xMjM0XzEyMzRfMTIzNDU2Nzg5YWJjIi4KKyAqLworZXh0ZXJuIHZvaWQgdXVpZF91dWlkX2Zyb21fc3RyaW5nKGNoYXIgKnN6X3V1aWQsCisJCQkJICBzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqKTsKKworI2VuZGlmIC8qIFVVSURVVElMXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3dkdC5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3dkdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMDBiYTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvd2R0LmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIHdkdC5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIElPIGRpc3BhdGNoZXIgZm9yIGEgc2hhcmVkIG1lbW9yeSBjaGFubmVsIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKyNpZm5kZWYgX19EU1BfV0RUM19IXworI2RlZmluZSBfX0RTUF9XRFQzX0hfCisKKy8qIFdEVCBkZWZpbmVzICovCisjZGVmaW5lIE9NQVAzX1dEVDNfSVNSX09GRlNFVAkweDAwMTgKKworCisvKioKKyAqIHN0cnVjdCBkc3Bfd2R0X3NldHRpbmcgLSB0aGUgYmFzaWMgZHNwX3dkdF9zZXR0aW5nIHN0cnVjdHVyZQorICogQHJlZ19iYXNlOglwb2ludGVyIHRvIHRoZSBiYXNlIG9mIHRoZSB3ZHQgcmVnaXN0ZXJzCisgKiBAc21fd2R0Oglwb2ludGVyIHRvIGZsYWdzIGluIHNoYXJlZCBtZW1vcnkKKyAqIEB3ZHQzX3Rhc2tsZXQJdGFza2xldCB0byBtYW5hZ2Ugd2R0IGV2ZW50CisgKiBAZmNsawkJaGFuZGxlIHRvIHdkdDMgZnVuY3Rpb25hbCBjbG9jaworICogQGljbGsJCWhhbmRsZSB0byB3ZHQzIGludGVyZmFjZSBjbG9jaworICoKKyAqIFRoaXMgc3RydWN0IGlzIHVzZWQgaW4gdGhlIGZ1bmN0aW9uIHRvIG1hbmFnZSB3ZHQzLgorICovCisKK3N0cnVjdCBkc3Bfd2R0X3NldHRpbmcgeworCXZvaWQgX19pb21lbSAqcmVnX2Jhc2U7CisJc3RydWN0IHNobSAqc21fd2R0OworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB3ZHQzX3Rhc2tsZXQ7CisJc3RydWN0IGNsayAqZmNsazsKKwlzdHJ1Y3QgY2xrICppY2xrOworfTsKKworLyoqCisgKiBkc3Bfd2R0X2luaXQoKSAtIGluaXRpYWxpemUgd2R0MyBtb2R1bGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWxpemUgdG8gd2R0MyBtb2R1bGUsIHNvIHRoYXQKKyAqIG90aGVyIHdkdDMgZnVuY3Rpb24gY2FuIGJlIHVzZWQuCisgKi8KK2ludCBkc3Bfd2R0X2luaXQodm9pZCk7CisKKy8qKgorICogZHNwX3dkdF9leGl0KCkgLSBpbml0aWFsaXplIHdkdDMgbW9kdWxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZnJlZXMgYWxsIHJlc291cmNlcyBhbGxvY2F0ZWQgZm9yIHdkdDMgbW9kdWxlLgorICovCit2b2lkIGRzcF93ZHRfZXhpdCh2b2lkKTsKKworLyoqCisgKiBkc3Bfd2R0X2VuYWJsZSgpIC0gZW5hYmxlL2Rpc2FibGUgd2R0MworICogQGVuYWJsZToJYm9vbCB2YWx1ZSB0byBlbmFibGUvZGlzYWJsZSB3ZHQzCisgKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzIG9yIGRpc2FibGVzIHdkdDMgYmFzZSBvbiBAZW5hYmxlIHZhbHVlLgorICoKKyAqLwordm9pZCBkc3Bfd2R0X2VuYWJsZShib29sIGVuYWJsZSk7CisKKy8qKgorICogZHNwX3dkdF9zbV9zZXQoKSAtIHN0b3JlIHBvaW50ZXIgdG8gdGhlIHNoYXJlIG1lbW9yeQorICogQGRhdGE6CQlwb2ludGVyIHRvIGRzcGJyaWRnZSBzaGFyZSBtZW1vcnkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFzcyBhIHZhbGlkIHBvaW50ZXIgdG8gc2hhcmUgbWVtb3J5LAorICogc28gdGhhdCB0aGUgZmxhZ3MgY2FuIGJlIHNldCBpbiBvcmRlciBEU1Agc2lkZSBjYW4gcmVhZCB0aGVtLgorICoKKyAqLwordm9pZCBkc3Bfd2R0X3NtX3NldCh2b2lkICpkYXRhKTsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2NobmwuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2NobmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDMxN2I1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvY2hubC5jCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogY2hubC5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIERTUCBBUEkgY2hhbm5lbCBpbnRlcmZhY2U6IG11bHRpcGxleGVzIGRhdGEgc3RyZWFtcyB0aHJvdWdoIHRoZSBzaW5nbGUKKyAqIHBoeXNpY2FsIGxpbmsgbWFuYWdlZCBieSBhIEJyaWRnZSBCcmlkZ2UgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhvc3QgT1MgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRFNQL0JJT1MgQnJpZGdlICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHJhY2UgJiBEZWJ1ZyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9TIEFkYXB0YXRpb24gTGF5ZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY2ZnLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3N5bmMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBsYXRmb3JtIE1hbmFnZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvcHJvYy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXYuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE90aGVycyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9jaG5scHJpdi5oPgorI2luY2x1ZGUgPGNobmxvYmouaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY2hubC5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFscyAqLworc3RhdGljIHUzMiByZWZzOworCisvKgorICogID09PT09PT09IGNobmxfY3JlYXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ3JlYXRlIGEgY2hhbm5lbCBtYW5hZ2VyIG9iamVjdCwgcmVzcG9uc2libGUgZm9yIG9wZW5pbmcgbmV3IGNoYW5uZWxzCisgKiAgICAgIGFuZCBjbG9zaW5nIG9sZCBvbmVzIGZvciBhIGdpdmVuICdCcmlkZ2UgYm9hcmQuCisgKi8KK2ludCBjaG5sX2NyZWF0ZShzdHJ1Y3QgY2hubF9tZ3IgKipjaGFubmVsX21nciwKKwkJICAgICAgIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBjaG5sX21ncmF0dHJzICptZ3JfYXR0cnRzKQoreworCWludCBzdGF0dXM7CisJc3RydWN0IGNobmxfbWdyICpoY2hubF9tZ3I7CisJc3RydWN0IGNobmxfbWdyXyAqY2hubF9tZ3Jfb2JqID0gTlVMTDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShjaGFubmVsX21nciAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShtZ3JfYXR0cnRzICE9IE5VTEwpOworCisJKmNoYW5uZWxfbWdyID0gTlVMTDsKKworCS8qIFZhbGlkYXRlIGFyZ3M6ICovCisJaWYgKCgwIDwgbWdyX2F0dHJ0cy0+bWF4X2NoYW5uZWxzKSAmJgorCSAgICAobWdyX2F0dHJ0cy0+bWF4X2NoYW5uZWxzIDw9IENITkxfTUFYQ0hBTk5FTFMpKQorCQlzdGF0dXMgPSAwOworCWVsc2UgaWYgKG1ncl9hdHRydHMtPm1heF9jaGFubmVscyA9PSAwKQorCQlzdGF0dXMgPSAtRUlOVkFMOworCWVsc2UKKwkJc3RhdHVzID0gLUVDSFJORzsKKworCWlmIChtZ3JfYXR0cnRzLT53b3JkX3NpemUgPT0gMCkKKwkJc3RhdHVzID0gLUVJTlZBTDsKKworCWlmICghc3RhdHVzKSB7CisJCXN0YXR1cyA9IGRldl9nZXRfY2hubF9tZ3IoaGRldl9vYmosICZoY2hubF9tZ3IpOworCQlpZiAoIXN0YXR1cyAmJiBoY2hubF9tZ3IgIT0gTlVMTCkKKwkJCXN0YXR1cyA9IC1FRVhJU1Q7CisKKwl9CisKKwlpZiAoIXN0YXR1cykgeworCQlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKKwkJZGV2X2dldF9pbnRmX2Z4bnMoaGRldl9vYmosICZpbnRmX2Z4bnMpOworCQkvKiBMZXQgQnJpZGdlIGNoYW5uZWwgbW9kdWxlIGZpbmlzaCB0aGUgY3JlYXRlOiAqLworCQlzdGF0dXMgPSAoKmludGZfZnhucy0+cGZuX2NobmxfY3JlYXRlKSAoJmhjaG5sX21nciwgaGRldl9vYmosCisJCQkJCQkJbWdyX2F0dHJ0cyk7CisJCWlmICghc3RhdHVzKSB7CisJCQkvKiBGaWxsIGluIERTUCBBUEkgY2hhbm5lbCBtb2R1bGUncyBmaWVsZHMgb2YgdGhlCisJCQkgKiBjaG5sX21nciBzdHJ1Y3R1cmUgKi8KKwkJCWNobmxfbWdyX29iaiA9IChzdHJ1Y3QgY2hubF9tZ3JfICopaGNobmxfbWdyOworCQkJY2hubF9tZ3Jfb2JqLT5pbnRmX2Z4bnMgPSBpbnRmX2Z4bnM7CisJCQkvKiBGaW5hbGx5LCByZXR1cm4gdGhlIG5ldyBjaGFubmVsIG1hbmFnZXIgaGFuZGxlOiAqLworCQkJKmNoYW5uZWxfbWdyID0gaGNobmxfbWdyOworCQl9CisJfQorCisJREJDX0VOU1VSRShzdGF0dXMgfHwgY2hubF9tZ3Jfb2JqKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY2hubF9kZXN0cm95ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ2xvc2UgYWxsIG9wZW4gY2hhbm5lbHMsIGFuZCBkZXN0cm95IHRoZSBjaGFubmVsIG1hbmFnZXIuCisgKi8KK2ludCBjaG5sX2Rlc3Ryb3koc3RydWN0IGNobmxfbWdyICpoY2hubF9tZ3IpCit7CisJc3RydWN0IGNobmxfbWdyXyAqY2hubF9tZ3Jfb2JqID0gKHN0cnVjdCBjaG5sX21ncl8gKiloY2hubF9tZ3I7CisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisJaW50IHN0YXR1czsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKworCWlmIChjaG5sX21ncl9vYmopIHsKKwkJaW50Zl9meG5zID0gY2hubF9tZ3Jfb2JqLT5pbnRmX2Z4bnM7CisJCS8qIExldCBCcmlkZ2UgY2hhbm5lbCBtb2R1bGUgZGVzdHJveSB0aGUgY2hubF9tZ3I6ICovCisJCXN0YXR1cyA9ICgqaW50Zl9meG5zLT5wZm5fY2hubF9kZXN0cm95KSAoaGNobmxfbWdyKTsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY2hubF9leGl0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGlzY29udGludWUgdXNhZ2Ugb2YgdGhlIENITkwgbW9kdWxlLgorICovCit2b2lkIGNobmxfZXhpdCh2b2lkKQoreworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKworCXJlZnMtLTsKKworCURCQ19FTlNVUkUocmVmcyA+PSAwKTsKK30KKworLyoKKyAqICA9PT09PT09PSBjaG5sX2luaXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplIHRoZSBDSE5MIG1vZHVsZSdzIHByaXZhdGUgc3RhdGUuCisgKi8KK2Jvb2wgY2hubF9pbml0KHZvaWQpCit7CisJYm9vbCByZXQgPSB0cnVlOworCisJREJDX1JFUVVJUkUocmVmcyA+PSAwKTsKKworCWlmIChyZXQpCisJCXJlZnMrKzsKKworCURCQ19FTlNVUkUoKHJldCAmJiAocmVmcyA+IDApKSB8fCAoIXJldCAmJiAocmVmcyA+PSAwKSkpOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2NobmxvYmouaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2NobmxvYmouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Nzk1ZTBhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvY2hubG9iai5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBjaG5sb2JqLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogU3RydWN0dXJlIHN1YmNvbXBvbmVudHMgb2YgY2hhbm5lbCBjbGFzcyBsaWJyYXJ5IGNoYW5uZWwgb2JqZWN0cyB3aGljaAorICogYXJlIGV4cG9zZWQgdG8gRFNQIEFQSSBmcm9tIEJyaWRnZSBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBDSE5MT0JKXworI2RlZmluZSBDSE5MT0JKXworCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NobmxkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGRlZnMuaD4KKworLyoKKyAqICBUaGlzIHN0cnVjdCBpcyB0aGUgZmlyc3QgZmllbGQgaW4gYSBjaG5sX21nciBzdHJ1Y3QuIE90aGVyLiBpbXBsZW1lbnRhdGlvbgorICogIHNwZWNpZmljIGZpZWxkcyBmb2xsb3cgdGhpcyBzdHJ1Y3R1cmUgaW4gbWVtb3J5LgorICovCitzdHJ1Y3QgY2hubF9tZ3JfIHsKKwkvKiBUaGVzZSBtdXN0IGJlIHRoZSBmaXJzdCBmaWVsZHMgaW4gYSBjaG5sX21nciBzdHJ1Y3Q6ICovCisKKwkvKiBGdW5jdGlvbiBpbnRlcmZhY2UgdG8gQnJpZGdlIGRyaXZlci4gKi8KKwlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKK307CisKKy8qCisgKiAgVGhpcyBzdHJ1Y3QgaXMgdGhlIGZpcnN0IGZpZWxkIGluIGEgY2hubF9vYmplY3Qgc3RydWN0LiBPdGhlciwKKyAqICBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBmaWVsZHMgZm9sbG93IHRoaXMgc3RydWN0dXJlIGluIG1lbW9yeS4KKyAqLworc3RydWN0IGNobmxfb2JqZWN0XyB7CisJLyogVGhlc2UgbXVzdCBiZSB0aGUgZmlyc3QgZmllbGRzIGluIGEgY2hubF9vYmplY3Qgc3RydWN0OiAqLworCXN0cnVjdCBjaG5sX21ncl8gKmNobmxfbWdyX29iajsJLyogUG9pbnRlciBiYWNrIHRvIGNoYW5uZWwgbWFuYWdlci4gKi8KK307CisKKyNlbmRpZiAvKiBDSE5MT0JKXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvY21tLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9jbW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTNkYzg4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvY21tLmMKQEAgLTAsMCArMSwxMTU0IEBACisvKgorICogY21tLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogVGhlIENvbW11bmljYXRpb24oU2hhcmVkKSBNZW1vcnkgTWFuYWdlbWVudChDTU0pIG1vZHVsZSBwcm92aWRlcworICogc2hhcmVkIG1lbW9yeSBtYW5hZ2VtZW50IHNlcnZpY2VzIGZvciBEU1AvQklPUyBCcmlkZ2UgZGF0YSBzdHJlYW1pbmcKKyAqIGFuZCBtZXNzYWdpbmcuCisgKgorICogTXVsdGlwbGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50cyBjYW4gYmUgcmVnaXN0ZXJlZCB3aXRoIENNTS4KKyAqIEVhY2ggcmVnaXN0ZXJlZCBTTSBzZWdtZW50IGlzIHJlcHJlc2VudGVkIGJ5IGEgU00gImFsbG9jYXRvciIgdGhhdAorICogZGVzY3JpYmVzIGEgYmxvY2sgb2YgcGh5c2ljYWxseSBjb250aWd1b3VzIHNoYXJlZCBtZW1vcnkgdXNlZCBmb3IKKyAqIGZ1dHVyZSBhbGxvY2F0aW9ucyBieSBDTU0uCisgKgorICogTWVtb3J5IGlzIGNvZWxlc2NlZCBiYWNrIHRvIHRoZSBhcHByb3ByaWF0ZSBoZWFwIHdoZW4gYSBidWZmZXIgaXMKKyAqIGZyZWVkLgorICoKKyAqIE5vdGVzOgorICogICBWYTogVmlydHVhbCBhZGRyZXNzLgorICogICBQYTogUGh5c2ljYWwgb3Iga2VybmVsIHN5c3RlbSBhZGRyZXNzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRyYWNlICYgRGVidWcgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJjLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPUyBBZGFwdGF0aW9uIExheWVyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NmZy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9saXN0Lmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3N5bmMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvdXRpbGRlZnMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBsYXRmb3JtIE1hbmFnZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2Lmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3Byb2MuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY21tLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWZpbmVzLCBEYXRhIFN0cnVjdHVyZXMsIFR5cGVkZWZzICovCisjZGVmaW5lIE5FWFRfUEEocG5vZGUpICAgKHBub2RlLT5kd19wYSArIHBub2RlLT51bF9zaXplKQorCisvKiBPdGhlciBidXMvcGxhdGZvcm0gdHJhbnNsYXRpb25zICovCisjZGVmaW5lIERTUFBBMkdQUFBBKGJhc2UsIHgsIHkpICAoKHgpKyh5KSkKKyNkZWZpbmUgR1BQUEEyRFNQUEEoYmFzZSwgeCwgeSkgICgoeCktKHkpKQorCisvKgorICogIEFsbG9jYXRvcnMgZGVmaW5lIGEgYmxvY2sgb2YgY29udGlndW91cyBtZW1vcnkgdXNlZCBmb3IgZnV0dXJlIGFsbG9jYXRpb25zLgorICoKKyAqICAgICAgc21hIC0gc2hhcmVkIG1lbW9yeSBhbGxvY2F0b3IuCisgKiAgICAgIHZtYSAtIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRvci4obm90IHVzZWQpLgorICovCitzdHJ1Y3QgY21tX2FsbG9jYXRvciB7CQkvKiBzbWEgKi8KKwl1bnNpZ25lZCBpbnQgc2htX2Jhc2U7CS8qIFN0YXJ0IG9mIHBoeXNpY2FsIFNNIGJsb2NrICovCisJdTMyIHVsX3NtX3NpemU7CQkvKiBTaXplIG9mIFNNIGJsb2NrIGluIGJ5dGVzICovCisJdW5zaWduZWQgaW50IGR3X3ZtX2Jhc2U7CS8qIFN0YXJ0IG9mIFZNIGJsb2NrLiAoRGV2IGRyaXZlcgorCQkJCQkgKiBjb250ZXh0IGZvciAnc21hJykgKi8KKwl1MzIgZHdfZHNwX3BoeXNfYWRkcl9vZmZzZXQ7CS8qIERTUCBQQSB0byBHUFAgUEEgb2Zmc2V0IGZvciB0aGlzCisJCQkJCSAqIFNNIHNwYWNlICovCisJczggY19mYWN0b3I7CQkvKiBEU1BQYSB0byBHUFBQYSBDb252ZXJzaW9uIEZhY3RvciAqLworCXVuc2lnbmVkIGludCBkd19kc3BfYmFzZTsJLyogRFNQIHZpcnQgYmFzZSBieXRlIGFkZHJlc3MgKi8KKwl1MzIgdWxfZHNwX3NpemU7CS8qIERTUCBzZWcgc2l6ZSBpbiBieXRlcyAqLworCXN0cnVjdCBjbW1fb2JqZWN0ICpoY21tX21ncjsJLyogYmFjayByZWYgdG8gcGFyZW50IG1nciAqLworCS8qIG5vZGUgbGlzdCBvZiBhdmFpbGFibGUgbWVtb3J5ICovCisJc3RydWN0IGxzdF9saXN0ICpmcmVlX2xpc3RfaGVhZDsKKwkvKiBub2RlIGxpc3Qgb2YgbWVtb3J5IGluIHVzZSAqLworCXN0cnVjdCBsc3RfbGlzdCAqaW5fdXNlX2xpc3RfaGVhZDsKK307CisKK3N0cnVjdCBjbW1feGxhdG9yIHsJCS8qIFBhPC0+VmEgdHJhbnNsYXRvciBvYmplY3QgKi8KKwkvKiBDTU0gb2JqZWN0IHRoaXMgdHJhbnNsYXRvciBhc3NvY2lhdGVkICovCisJc3RydWN0IGNtbV9vYmplY3QgKmhjbW1fbWdyOworCS8qCisJICogIENsaWVudCBwcm9jZXNzIHZpcnR1YWwgYmFzZSBhZGRyZXNzIHRoYXQgY29ycmVzcG9uZHMgdG8gcGh5cyBTTQorCSAqICBiYXNlIGFkZHJlc3MgZm9yIHRyYW5zbGF0b3IncyB1bF9zZWdfaWQuCisJICogIE9ubHkgMSBzZWdtZW50IElEIGN1cnJlbnRseSBzdXBwb3J0ZWQuCisJICovCisJdW5zaWduZWQgaW50IGR3X3ZpcnRfYmFzZTsJLyogdmlydHVhbCBiYXNlIGFkZHJlc3MgKi8KKwl1MzIgdWxfdmlydF9zaXplOwkvKiBzaXplIG9mIHZpcnQgc3BhY2UgaW4gYnl0ZXMgKi8KKwl1MzIgdWxfc2VnX2lkOwkJLyogU2VnbWVudCBJZCAqLworfTsKKworLyogQ01NIE1nciAqLworc3RydWN0IGNtbV9vYmplY3QgeworCS8qCisJICogQ21tIExvY2sgaXMgdXNlZCB0byBzZXJpYWxpemUgYWNjZXNzIG1lbSBtYW5hZ2VyIGZvciBtdWx0aS10aHJlYWRzLgorCSAqLworCXN0cnVjdCBtdXRleCBjbW1fbG9jazsJLyogTG9jayB0byBhY2Nlc3MgY21tIG1nciAqLworCXN0cnVjdCBsc3RfbGlzdCAqbm9kZV9mcmVlX2xpc3RfaGVhZDsJLyogRnJlZSBsaXN0IG9mIG1lbW9yeSBub2RlcyAqLworCXUzMiB1bF9taW5fYmxvY2tfc2l6ZTsJLyogTWluIFNNIGJsb2NrOyBkZWZhdWx0IDE2IGJ5dGVzICovCisJdTMyIGR3X3BhZ2Vfc2l6ZTsJLyogTWVtb3J5IFBhZ2Ugc2l6ZSAoMWsvNGspICovCisJLyogR1BQIFNNIHNlZ21lbnQgcHRycyAqLworCXN0cnVjdCBjbW1fYWxsb2NhdG9yICpwYV9ncHBzbV9zZWdfdGFiW0NNTV9NQVhHUFBTRUdTXTsKK307CisKKy8qIERlZmF1bHQgQ01NIE1nciBhdHRyaWJ1dGVzICovCitzdGF0aWMgc3RydWN0IGNtbV9tZ3JhdHRycyBjbW1fZGZsdG1ncmF0dHJzID0geworCS8qIHVsX21pbl9ibG9ja19zaXplLCBtaW4gYmxvY2sgc2l6ZShieXRlcykgYWxsb2NhdGVkIGJ5IGNtbSBtZ3IgKi8KKwkxNgorfTsKKworLyogRGVmYXVsdCBhbGxvY2F0aW9uIGF0dHJpYnV0ZXMgKi8KK3N0YXRpYyBzdHJ1Y3QgY21tX2F0dHJzIGNtbV9kZmx0YWxjdGF0dHJzID0geworCTEJCS8qIHVsX3NlZ19pZCwgZGVmYXVsdCBzZWdtZW50IElkIGZvciBhbGxvY2F0b3IgKi8KK307CisKKy8qIEFkZHJlc3MgdHJhbnNsYXRvciBkZWZhdWx0IGF0dHJzICovCitzdGF0aWMgc3RydWN0IGNtbV94bGF0b3JhdHRycyBjbW1fZGZsdHhsYXRvcmF0dHJzID0geworCS8qIHVsX3NlZ19pZCwgZG9lcyBub3QgaGF2ZSB0byBtYXRjaCBjbW1fZGZsdGFsY3RhdHRycyB1bF9zZWdfaWQgKi8KKwkxLAorCTAsCQkJLyogZHdfZHNwX2J1ZnMgKi8KKwkwLAkJCS8qIGR3X2RzcF9idWZfc2l6ZSAqLworCU5VTEwsCQkJLyogdm1fYmFzZSAqLworCTAsCQkJLyogZHdfdm1fc2l6ZSAqLworfTsKKworLyogU00gbm9kZSByZXByZXNlbnRpbmcgYSBibG9jayBvZiBtZW1vcnkuICovCitzdHJ1Y3QgY21tX21ub2RlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CS8qIG11c3QgYmUgMXN0IGVsZW1lbnQgKi8KKwl1MzIgZHdfcGE7CQkvKiBQaHlzIGFkZHIgKi8KKwl1MzIgZHdfdmE7CQkvKiBWaXJ0dWFsIGFkZHJlc3MgaW4gZGV2aWNlIHByb2Nlc3MgY29udGV4dCAqLworCXUzMiB1bF9zaXplOwkJLyogU00gYmxvY2sgc2l6ZSBpbiBieXRlcyAqLworCXUzMiBjbGllbnRfcHJvYzsJLyogUHJvY2VzcyB0aGF0IGFsbG9jYXRlZCB0aGlzIG1lbSBibG9jayAqLworfTsKKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdsb2JhbHMgKi8KK3N0YXRpYyB1MzIgcmVmczsJCS8qIG1vZHVsZSByZWZlcmVuY2UgY291bnQgKi8KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uIFByb3RvdHlwZXMgKi8KK3N0YXRpYyB2b2lkIGFkZF90b19mcmVlX2xpc3Qoc3RydWN0IGNtbV9hbGxvY2F0b3IgKmFsbG9jYXRvciwKKwkJCSAgICAgc3RydWN0IGNtbV9tbm9kZSAqcG5vZGUpOworc3RhdGljIHN0cnVjdCBjbW1fYWxsb2NhdG9yICpnZXRfYWxsb2NhdG9yKHN0cnVjdCBjbW1fb2JqZWN0ICpjbW1fbWdyX29iaiwKKwkJCQkJICAgdTMyIHVsX3NlZ19pZCk7CitzdGF0aWMgc3RydWN0IGNtbV9tbm9kZSAqZ2V0X2ZyZWVfYmxvY2soc3RydWN0IGNtbV9hbGxvY2F0b3IgKmFsbG9jYXRvciwKKwkJCQkJdTMyIHVzaXplKTsKK3N0YXRpYyBzdHJ1Y3QgY21tX21ub2RlICpnZXRfbm9kZShzdHJ1Y3QgY21tX29iamVjdCAqY21tX21ncl9vYmosIHUzMiBkd19wYSwKKwkJCQkgIHUzMiBkd192YSwgdTMyIHVsX3NpemUpOworLyogZ2V0IGF2YWlsYWJsZSBzbG90IGZvciBuZXcgYWxsb2NhdG9yICovCitzdGF0aWMgczMyIGdldF9zbG90KHN0cnVjdCBjbW1fb2JqZWN0ICpjbW1fbWdyX29iaik7CitzdGF0aWMgdm9pZCB1bl9yZWdpc3Rlcl9ncHBzbV9zZWcoc3RydWN0IGNtbV9hbGxvY2F0b3IgKnBzbWEpOworCisvKgorICogID09PT09PT09IGNtbV9jYWxsb2NfYnVmID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQWxsb2NhdGUgYSBTTSBidWZmZXIsIHplcm8gY29udGVudHMsIGFuZCByZXR1cm4gdGhlIHBoeXNpY2FsIGFkZHJlc3MKKyAqICAgICAgYW5kIG9wdGlvbmFsIGRyaXZlciBjb250ZXh0IHZpcnR1YWwgYWRkcmVzcyhwcF9idWZfdmEpLgorICoKKyAqICAgICAgVGhlIGZyZWVsaXN0IGlzIHNvcnRlZCBpbiBpbmNyZWFzaW5nIHNpemUgb3JkZXIuIEdldCB0aGUgZmlyc3QKKyAqICAgICAgYmxvY2sgdGhhdCBzYXRpZmllcyB0aGUgcmVxdWVzdCBhbmQgc29ydCB0aGUgcmVtYWluaW5nIGJhY2sgb24KKyAqICAgICAgdGhlIGZyZWVsaXN0OyBpZiBsYXJnZSBlbm91Z2guIFRoZSBrZXB0IGJsb2NrIGlzIHBsYWNlZCBvbiB0aGUKKyAqICAgICAgaW5Vc2VMaXN0LgorICovCit2b2lkICpjbW1fY2FsbG9jX2J1ZihzdHJ1Y3QgY21tX29iamVjdCAqaGNtbV9tZ3IsIHUzMiB1c2l6ZSwKKwkJICAgICBzdHJ1Y3QgY21tX2F0dHJzICpwYXR0cnMsIHZvaWQgKipwcF9idWZfdmEpCit7CisJc3RydWN0IGNtbV9vYmplY3QgKmNtbV9tZ3Jfb2JqID0gKHN0cnVjdCBjbW1fb2JqZWN0ICopaGNtbV9tZ3I7CisJdm9pZCAqYnVmX3BhID0gTlVMTDsKKwlzdHJ1Y3QgY21tX21ub2RlICpwbm9kZSA9IE5VTEw7CisJc3RydWN0IGNtbV9tbm9kZSAqbmV3X25vZGUgPSBOVUxMOworCXN0cnVjdCBjbW1fYWxsb2NhdG9yICphbGxvY2F0b3IgPSBOVUxMOworCXUzMiBkZWx0YV9zaXplOworCXU4ICpwYnl0ZSA9IE5VTEw7CisJczMyIGNudDsKKworCWlmIChwYXR0cnMgPT0gTlVMTCkKKwkJcGF0dHJzID0gJmNtbV9kZmx0YWxjdGF0dHJzOworCisJaWYgKHBwX2J1Zl92YSAhPSBOVUxMKQorCQkqcHBfYnVmX3ZhID0gTlVMTDsKKworCWlmIChjbW1fbWdyX29iaiAmJiAodXNpemUgIT0gMCkpIHsKKwkJaWYgKHBhdHRycy0+dWxfc2VnX2lkID4gMCkgeworCQkJLyogU2VnSWQgPiAwIGlzIFNNICovCisJCQkvKiBnZXQgdGhlIGFsbG9jYXRvciBvYmplY3QgZm9yIHRoaXMgc2VnbWVudCBpZCAqLworCQkJYWxsb2NhdG9yID0KKwkJCSAgICBnZXRfYWxsb2NhdG9yKGNtbV9tZ3Jfb2JqLCBwYXR0cnMtPnVsX3NlZ19pZCk7CisJCQkvKiBrZWVwIGJsb2NrIHNpemUgYSBtdWx0aXBsZSBvZiB1bF9taW5fYmxvY2tfc2l6ZSAqLworCQkJdXNpemUgPQorCQkJICAgICgodXNpemUgLSAxKSAmIH4oY21tX21ncl9vYmotPnVsX21pbl9ibG9ja19zaXplIC0KKwkJCQkJICAgICAxKSkKKwkJCSAgICArIGNtbV9tZ3Jfb2JqLT51bF9taW5fYmxvY2tfc2l6ZTsKKwkJCW11dGV4X2xvY2soJmNtbV9tZ3Jfb2JqLT5jbW1fbG9jayk7CisJCQlwbm9kZSA9IGdldF9mcmVlX2Jsb2NrKGFsbG9jYXRvciwgdXNpemUpOworCQl9CisJCWlmIChwbm9kZSkgeworCQkJZGVsdGFfc2l6ZSA9IChwbm9kZS0+dWxfc2l6ZSAtIHVzaXplKTsKKwkJCWlmIChkZWx0YV9zaXplID49IGNtbV9tZ3Jfb2JqLT51bF9taW5fYmxvY2tfc2l6ZSkgeworCQkJCS8qIGNyZWF0ZSBhIG5ldyBibG9jayB3aXRoIHRoZSBsZWZ0b3ZlcnMgYW5kCisJCQkJICogYWRkIHRvIGZyZWVsaXN0ICovCisJCQkJbmV3X25vZGUgPQorCQkJCSAgICBnZXRfbm9kZShjbW1fbWdyX29iaiwgcG5vZGUtPmR3X3BhICsgdXNpemUsCisJCQkJCSAgICAgcG5vZGUtPmR3X3ZhICsgdXNpemUsCisJCQkJCSAgICAgKHUzMikgZGVsdGFfc2l6ZSk7CisJCQkJLyogbGVmdG92ZXJzIGdvIGZyZWUgKi8KKwkJCQlhZGRfdG9fZnJlZV9saXN0KGFsbG9jYXRvciwgbmV3X25vZGUpOworCQkJCS8qIGFkanVzdCBvdXIgbm9kZSdzIHNpemUgKi8KKwkJCQlwbm9kZS0+dWxfc2l6ZSA9IHVzaXplOworCQkJfQorCQkJLyogVGFnIG5vZGUgd2l0aCBjbGllbnQgcHJvY2VzcyByZXF1ZXN0aW5nIGFsbG9jYXRpb24KKwkJCSAqIFdlJ2xsIG5lZWQgdG8gZnJlZSB1cCBhIHByb2Nlc3MncyBhbGxvYydkIFNNIGlmIHRoZQorCQkJICogY2xpZW50IHByb2Nlc3MgZ29lcyBhd2F5LgorCQkJICovCisJCQkvKiBSZXR1cm4gVEdJRCBpbnN0ZWFkIG9mIHByb2Nlc3MgaGFuZGxlICovCisJCQlwbm9kZS0+Y2xpZW50X3Byb2MgPSBjdXJyZW50LT50Z2lkOworCisJCQkvKiBwdXQgb3VyIG5vZGUgb24gSW5Vc2UgbGlzdCAqLworCQkJbHN0X3B1dF90YWlsKGFsbG9jYXRvci0+aW5fdXNlX2xpc3RfaGVhZCwKKwkJCQkgICAgIChzdHJ1Y3QgbGlzdF9oZWFkICopcG5vZGUpOworCQkJYnVmX3BhID0gKHZvaWQgKilwbm9kZS0+ZHdfcGE7CS8qIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwkJCS8qIGNsZWFyIG1lbSAqLworCQkJcGJ5dGUgPSAodTggKikgcG5vZGUtPmR3X3ZhOworCQkJZm9yIChjbnQgPSAwOyBjbnQgPCAoczMyKSB1c2l6ZTsgY250KyssIHBieXRlKyspCisJCQkJKnBieXRlID0gMDsKKworCQkJaWYgKHBwX2J1Zl92YSAhPSBOVUxMKSB7CisJCQkJLyogVmlydHVhbCBhZGRyZXNzICovCisJCQkJKnBwX2J1Zl92YSA9ICh2b2lkICopcG5vZGUtPmR3X3ZhOworCQkJfQorCQl9CisJCW11dGV4X3VubG9jaygmY21tX21ncl9vYmotPmNtbV9sb2NrKTsKKwl9CisJcmV0dXJuIGJ1Zl9wYTsKK30KKworLyoKKyAqICA9PT09PT09PSBjbW1fY3JlYXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ3JlYXRlIGEgY29tbXVuaWNhdGlvbiBtZW1vcnkgbWFuYWdlciBvYmplY3QuCisgKi8KK2ludCBjbW1fY3JlYXRlKHN0cnVjdCBjbW1fb2JqZWN0ICoqcGhfY21tX21nciwKKwkJICAgICAgc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgY21tX21ncmF0dHJzICptZ3JfYXR0cnRzKQoreworCXN0cnVjdCBjbW1fb2JqZWN0ICpjbW1fb2JqID0gTlVMTDsKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgdXRpbF9zeXNpbmZvIHN5c19pbmZvOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKHBoX2NtbV9tZ3IgIT0gTlVMTCk7CisKKwkqcGhfY21tX21nciA9IE5VTEw7CisJLyogY3JlYXRlLCB6ZXJvLCBhbmQgdGFnIGEgY21tIG1nciBvYmplY3QgKi8KKwljbW1fb2JqID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNtbV9vYmplY3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21tX29iaiAhPSBOVUxMKSB7CisJCWlmIChtZ3JfYXR0cnRzID09IE5VTEwpCisJCQltZ3JfYXR0cnRzID0gJmNtbV9kZmx0bWdyYXR0cnM7CS8qIHNldCBkZWZhdWx0cyAqLworCisJCS8qIDQgYnl0ZXMgbWluaW11bSAqLworCQlEQkNfQVNTRVJUKG1ncl9hdHRydHMtPnVsX21pbl9ibG9ja19zaXplID49IDQpOworCQkvKiBzYXZlIGF3YXkgc21hbGxlc3QgYmxvY2sgYWxsb2NhdGlvbiBmb3IgdGhpcyBjbW0gbWdyICovCisJCWNtbV9vYmotPnVsX21pbl9ibG9ja19zaXplID0gbWdyX2F0dHJ0cy0+dWxfbWluX2Jsb2NrX3NpemU7CisJCS8qIHNhdmUgYXdheSB0aGUgc3lzdGVtcyBtZW1vcnkgcGFnZSBzaXplICovCisJCXN5c19pbmZvLmR3X3BhZ2Vfc2l6ZSA9IFBBR0VfU0laRTsKKwkJc3lzX2luZm8uZHdfYWxsb2NhdGlvbl9ncmFudWxhcml0eSA9IFBBR0VfU0laRTsKKwkJc3lzX2luZm8uZHdfbnVtYmVyX29mX3Byb2Nlc3NvcnMgPSAxOworCisJCWNtbV9vYmotPmR3X3BhZ2Vfc2l6ZSA9IHN5c19pbmZvLmR3X3BhZ2Vfc2l6ZTsKKworCQkvKiBOb3RlOiBEU1AgU00gc2VnIHRhYmxlKGFEU1BTTVNlZ1RhYltdKSB6ZXJvJ2QgYnkKKwkJICogTUVNX0FMTE9DX09CSkVDVCAqLworCisJCS8qIGNyZWF0ZSBub2RlIGZyZWUgbGlzdCAqLworCQljbW1fb2JqLT5ub2RlX2ZyZWVfbGlzdF9oZWFkID0KKwkJCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgbHN0X2xpc3QpLAorCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmIChjbW1fb2JqLT5ub2RlX2ZyZWVfbGlzdF9oZWFkID09IE5VTEwpIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQljbW1fZGVzdHJveShjbW1fb2JqLCB0cnVlKTsKKwkJfSBlbHNlIHsKKwkJCUlOSVRfTElTVF9IRUFEKCZjbW1fb2JqLT4KKwkJCQkgICAgICAgbm9kZV9mcmVlX2xpc3RfaGVhZC0+aGVhZCk7CisJCQltdXRleF9pbml0KCZjbW1fb2JqLT5jbW1fbG9jayk7CisJCQkqcGhfY21tX21nciA9IGNtbV9vYmo7CisJCX0KKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGNtbV9kZXN0cm95ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmVsZWFzZSB0aGUgY29tbXVuaWNhdGlvbiBtZW1vcnkgbWFuYWdlciByZXNvdXJjZXMuCisgKi8KK2ludCBjbW1fZGVzdHJveShzdHJ1Y3QgY21tX29iamVjdCAqaGNtbV9tZ3IsIGJvb2wgZm9yY2UpCit7CisJc3RydWN0IGNtbV9vYmplY3QgKmNtbV9tZ3Jfb2JqID0gKHN0cnVjdCBjbW1fb2JqZWN0ICopaGNtbV9tZ3I7CisJc3RydWN0IGNtbV9pbmZvIHRlbXBfaW5mbzsKKwlpbnQgc3RhdHVzID0gMDsKKwlzMzIgc2xvdF9zZWc7CisJc3RydWN0IGNtbV9tbm9kZSAqcG5vZGU7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJaWYgKCFoY21tX21ncikgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlyZXR1cm4gc3RhdHVzOworCX0KKwltdXRleF9sb2NrKCZjbW1fbWdyX29iai0+Y21tX2xvY2spOworCS8qIElmIG5vdCBmb3JjZSB0aGVuIGZhaWwgaWYgb3V0c3RhbmRpbmcgYWxsb2NhdGlvbnMgZXhpc3QgKi8KKwlpZiAoIWZvcmNlKSB7CisJCS8qIENoZWNrIGZvciBvdXRzdGFuZGluZyBtZW1vcnkgYWxsb2NhdGlvbnMgKi8KKwkJc3RhdHVzID0gY21tX2dldF9pbmZvKGhjbW1fbWdyLCAmdGVtcF9pbmZvKTsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCWlmICh0ZW1wX2luZm8udWxfdG90YWxfaW5fdXNlX2NudCA+IDApIHsKKwkJCQkvKiBvdXRzdGFuZGluZyBhbGxvY2F0aW9ucyAqLworCQkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoIXN0YXR1cykgeworCQkvKiBVblJlZ2lzdGVyIFNNIGFsbG9jYXRvciAqLworCQlmb3IgKHNsb3Rfc2VnID0gMDsgc2xvdF9zZWcgPCBDTU1fTUFYR1BQU0VHUzsgc2xvdF9zZWcrKykgeworCQkJaWYgKGNtbV9tZ3Jfb2JqLT5wYV9ncHBzbV9zZWdfdGFiW3Nsb3Rfc2VnXSAhPSBOVUxMKSB7CisJCQkJdW5fcmVnaXN0ZXJfZ3Bwc21fc2VnCisJCQkJICAgIChjbW1fbWdyX29iai0+cGFfZ3Bwc21fc2VnX3RhYltzbG90X3NlZ10pOworCQkJCS8qIFNldCBzbG90IHRvIE5VTEwgZm9yIGZ1dHVyZSByZXVzZSAqLworCQkJCWNtbV9tZ3Jfb2JqLT5wYV9ncHBzbV9zZWdfdGFiW3Nsb3Rfc2VnXSA9IE5VTEw7CisJCQl9CisJCX0KKwl9CisJaWYgKGNtbV9tZ3Jfb2JqLT5ub2RlX2ZyZWVfbGlzdF9oZWFkICE9IE5VTEwpIHsKKwkJLyogRnJlZSB0aGUgZnJlZSBub2RlcyAqLworCQl3aGlsZSAoIUxTVF9JU19FTVBUWShjbW1fbWdyX29iai0+bm9kZV9mcmVlX2xpc3RfaGVhZCkpIHsKKwkJCXBub2RlID0gKHN0cnVjdCBjbW1fbW5vZGUgKikKKwkJCSAgICBsc3RfZ2V0X2hlYWQoY21tX21ncl9vYmotPm5vZGVfZnJlZV9saXN0X2hlYWQpOworCQkJa2ZyZWUocG5vZGUpOworCQl9CisJCS8qIGRlbGV0ZSBOb2RlRnJlZUxpc3QgbGlzdCAqLworCQlrZnJlZShjbW1fbWdyX29iai0+bm9kZV9mcmVlX2xpc3RfaGVhZCk7CisJfQorCW11dGV4X3VubG9jaygmY21tX21ncl9vYmotPmNtbV9sb2NrKTsKKwlpZiAoIXN0YXR1cykgeworCQkvKiBkZWxldGUgQ1MgJiBjbW0gbWdyIG9iamVjdCAqLworCQltdXRleF9kZXN0cm95KCZjbW1fbWdyX29iai0+Y21tX2xvY2spOworCQlrZnJlZShjbW1fbWdyX29iaik7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY21tX2V4aXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEaXNjb250aW51ZSB1c2FnZSBvZiBtb2R1bGU7IGZyZWUgcmVzb3VyY2VzIHdoZW4gcmVmZXJlbmNlIGNvdW50CisgKiAgICAgIHJlYWNoZXMgMC4KKyAqLwordm9pZCBjbW1fZXhpdCh2b2lkKQoreworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKworCXJlZnMtLTsKK30KKworLyoKKyAqICA9PT09PT09PSBjbW1fZnJlZV9idWYgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBGcmVlIHRoZSBnaXZlbiBidWZmZXIuCisgKi8KK2ludCBjbW1fZnJlZV9idWYoc3RydWN0IGNtbV9vYmplY3QgKmhjbW1fbWdyLCB2b2lkICpidWZfcGEsCisJCQl1MzIgdWxfc2VnX2lkKQoreworCXN0cnVjdCBjbW1fb2JqZWN0ICpjbW1fbWdyX29iaiA9IChzdHJ1Y3QgY21tX29iamVjdCAqKWhjbW1fbWdyOworCWludCBzdGF0dXMgPSAtRUZBVUxUOworCXN0cnVjdCBjbW1fbW5vZGUgKm1ub2RlX29iaiA9IE5VTEw7CisJc3RydWN0IGNtbV9hbGxvY2F0b3IgKmFsbG9jYXRvciA9IE5VTEw7CisJc3RydWN0IGNtbV9hdHRycyAqcGF0dHJzOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGJ1Zl9wYSAhPSBOVUxMKTsKKworCWlmICh1bF9zZWdfaWQgPT0gMCkgeworCQlwYXR0cnMgPSAmY21tX2RmbHRhbGN0YXR0cnM7CisJCXVsX3NlZ19pZCA9IHBhdHRycy0+dWxfc2VnX2lkOworCX0KKwlpZiAoIWhjbW1fbWdyIHx8ICEodWxfc2VnX2lkID4gMCkpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJLyogZ2V0IHRoZSBhbGxvY2F0b3IgZm9yIHRoaXMgc2VnbWVudCBpZCAqLworCWFsbG9jYXRvciA9IGdldF9hbGxvY2F0b3IoY21tX21ncl9vYmosIHVsX3NlZ19pZCk7CisJaWYgKGFsbG9jYXRvciAhPSBOVUxMKSB7CisJCW11dGV4X2xvY2soJmNtbV9tZ3Jfb2JqLT5jbW1fbG9jayk7CisJCW1ub2RlX29iaiA9CisJCSAgICAoc3RydWN0IGNtbV9tbm9kZSAqKWxzdF9maXJzdChhbGxvY2F0b3ItPmluX3VzZV9saXN0X2hlYWQpOworCQl3aGlsZSAobW5vZGVfb2JqKSB7CisJCQlpZiAoKHUzMikgYnVmX3BhID09IG1ub2RlX29iai0+ZHdfcGEpIHsKKwkJCQkvKiBGb3VuZCBpdCAqLworCQkJCWxzdF9yZW1vdmVfZWxlbShhbGxvY2F0b3ItPmluX3VzZV9saXN0X2hlYWQsCisJCQkJCQkoc3RydWN0IGxpc3RfaGVhZCAqKW1ub2RlX29iaik7CisJCQkJLyogYmFjayB0byBmcmVlbGlzdCAqLworCQkJCWFkZF90b19mcmVlX2xpc3QoYWxsb2NhdG9yLCBtbm9kZV9vYmopOworCQkJCXN0YXR1cyA9IDA7CS8qIGFsbCByaWdodCEgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIG5leHQgbm9kZS4gKi8KKwkJCW1ub2RlX29iaiA9IChzdHJ1Y3QgY21tX21ub2RlICopCisJCQkgICAgbHN0X25leHQoYWxsb2NhdG9yLT5pbl91c2VfbGlzdF9oZWFkLAorCQkJCSAgICAgKHN0cnVjdCBsaXN0X2hlYWQgKiltbm9kZV9vYmopOworCQl9CisJCW11dGV4X3VubG9jaygmY21tX21ncl9vYmotPmNtbV9sb2NrKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBjbW1fZ2V0X2hhbmRsZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHVybiB0aGUgY29tbXVuaWNhdGlvbiBtZW1vcnkgbWFuYWdlciBvYmplY3QgZm9yIHRoaXMgZGV2aWNlLgorICogICAgICBUaGlzIGlzIHR5cGljYWxseSBjYWxsZWQgZnJvbSB0aGUgY2xpZW50IHByb2Nlc3MuCisgKi8KK2ludCBjbW1fZ2V0X2hhbmRsZSh2b2lkICpocHJvY2Vzc29yLCBzdHJ1Y3QgY21tX29iamVjdCAqKiBwaF9jbW1fbWdyKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iajsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShwaF9jbW1fbWdyICE9IE5VTEwpOworCWlmIChocHJvY2Vzc29yICE9IE5VTEwpCisJCXN0YXR1cyA9IHByb2NfZ2V0X2Rldl9vYmplY3QoaHByb2Nlc3NvciwgJmhkZXZfb2JqKTsKKwllbHNlCisJCWhkZXZfb2JqID0gZGV2X2dldF9maXJzdCgpOwkvKiBkZWZhdWx0ICovCisKKwlpZiAoIXN0YXR1cykKKwkJc3RhdHVzID0gZGV2X2dldF9jbW1fbWdyKGhkZXZfb2JqLCBwaF9jbW1fbWdyKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY21tX2dldF9pbmZvID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0dXJuIHRoZSBjdXJyZW50IG1lbW9yeSB1dGlsaXphdGlvbiBpbmZvcm1hdGlvbi4KKyAqLworaW50IGNtbV9nZXRfaW5mbyhzdHJ1Y3QgY21tX29iamVjdCAqaGNtbV9tZ3IsCisJCQlzdHJ1Y3QgY21tX2luZm8gKmNtbV9pbmZvX29iaikKK3sKKwlzdHJ1Y3QgY21tX29iamVjdCAqY21tX21ncl9vYmogPSAoc3RydWN0IGNtbV9vYmplY3QgKiloY21tX21ncjsKKwl1MzIgdWxfc2VnOworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBjbW1fYWxsb2NhdG9yICphbHRyOworCXN0cnVjdCBjbW1fbW5vZGUgKm1ub2RlX29iaiA9IE5VTEw7CisKKwlEQkNfUkVRVUlSRShjbW1faW5mb19vYmogIT0gTlVMTCk7CisKKwlpZiAoIWhjbW1fbWdyKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCXJldHVybiBzdGF0dXM7CisJfQorCW11dGV4X2xvY2soJmNtbV9tZ3Jfb2JqLT5jbW1fbG9jayk7CisJY21tX2luZm9fb2JqLT51bF9udW1fZ3Bwc21fc2VncyA9IDA7CS8qICMgb2YgU00gc2VnbWVudHMgKi8KKwkvKiBUb3RhbCAjIG9mIG91dHN0YW5kaW5nIGFsbG9jICovCisJY21tX2luZm9fb2JqLT51bF90b3RhbF9pbl91c2VfY250ID0gMDsKKwkvKiBtaW4gYmxvY2sgc2l6ZSAqLworCWNtbV9pbmZvX29iai0+dWxfbWluX2Jsb2NrX3NpemUgPSBjbW1fbWdyX29iai0+dWxfbWluX2Jsb2NrX3NpemU7CisJLyogY2hlY2sgU00gbWVtb3J5IHNlZ21lbnRzICovCisJZm9yICh1bF9zZWcgPSAxOyB1bF9zZWcgPD0gQ01NX01BWEdQUFNFR1M7IHVsX3NlZysrKSB7CisJCS8qIGdldCB0aGUgYWxsb2NhdG9yIG9iamVjdCBmb3IgdGhpcyBzZWdtZW50IGlkICovCisJCWFsdHIgPSBnZXRfYWxsb2NhdG9yKGNtbV9tZ3Jfb2JqLCB1bF9zZWcpOworCQlpZiAoYWx0ciAhPSBOVUxMKSB7CisJCQljbW1faW5mb19vYmotPnVsX251bV9ncHBzbV9zZWdzKys7CisJCQljbW1faW5mb19vYmotPnNlZ19pbmZvW3VsX3NlZyAtIDFdLmR3X3NlZ19iYXNlX3BhID0KKwkJCSAgICBhbHRyLT5zaG1fYmFzZSAtIGFsdHItPnVsX2RzcF9zaXplOworCQkJY21tX2luZm9fb2JqLT5zZWdfaW5mb1t1bF9zZWcgLSAxXS51bF90b3RhbF9zZWdfc2l6ZSA9CisJCQkgICAgYWx0ci0+dWxfZHNwX3NpemUgKyBhbHRyLT51bF9zbV9zaXplOworCQkJY21tX2luZm9fb2JqLT5zZWdfaW5mb1t1bF9zZWcgLSAxXS5kd19ncHBfYmFzZV9wYSA9CisJCQkgICAgYWx0ci0+c2htX2Jhc2U7CisJCQljbW1faW5mb19vYmotPnNlZ19pbmZvW3VsX3NlZyAtIDFdLnVsX2dwcF9zaXplID0KKwkJCSAgICBhbHRyLT51bF9zbV9zaXplOworCQkJY21tX2luZm9fb2JqLT5zZWdfaW5mb1t1bF9zZWcgLSAxXS5kd19kc3BfYmFzZV92YSA9CisJCQkgICAgYWx0ci0+ZHdfZHNwX2Jhc2U7CisJCQljbW1faW5mb19vYmotPnNlZ19pbmZvW3VsX3NlZyAtIDFdLnVsX2RzcF9zaXplID0KKwkJCSAgICBhbHRyLT51bF9kc3Bfc2l6ZTsKKwkJCWNtbV9pbmZvX29iai0+c2VnX2luZm9bdWxfc2VnIC0gMV0uZHdfc2VnX2Jhc2VfdmEgPQorCQkJICAgIGFsdHItPmR3X3ZtX2Jhc2UgLSBhbHRyLT51bF9kc3Bfc2l6ZTsKKwkJCWNtbV9pbmZvX29iai0+c2VnX2luZm9bdWxfc2VnIC0gMV0udWxfaW5fdXNlX2NudCA9IDA7CisJCQltbm9kZV9vYmogPSAoc3RydWN0IGNtbV9tbm9kZSAqKQorCQkJICAgIGxzdF9maXJzdChhbHRyLT5pbl91c2VfbGlzdF9oZWFkKTsKKwkJCS8qIENvdW50IGluVXNlIGJsb2NrcyAqLworCQkJd2hpbGUgKG1ub2RlX29iaikgeworCQkJCWNtbV9pbmZvX29iai0+dWxfdG90YWxfaW5fdXNlX2NudCsrOworCQkJCWNtbV9pbmZvX29iai0+c2VnX2luZm9bdWxfc2VnIC0KKwkJCQkJCSAgICAgICAxXS51bF9pbl91c2VfY250Kys7CisJCQkJLyogbmV4dCBub2RlLiAqLworCQkJCW1ub2RlX29iaiA9IChzdHJ1Y3QgY21tX21ub2RlICopCisJCQkJICAgIGxzdF9uZXh0KGFsdHItPmluX3VzZV9saXN0X2hlYWQsCisJCQkJCSAgICAgKHN0cnVjdCBsaXN0X2hlYWQgKiltbm9kZV9vYmopOworCQkJfQorCQl9CisJfQkJCS8qIGVuZCBmb3IgKi8KKwltdXRleF91bmxvY2soJmNtbV9tZ3Jfb2JqLT5jbW1fbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBjbW1faW5pdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEluaXRpYWxpemVzIHByaXZhdGUgc3RhdGUgb2YgQ01NIG1vZHVsZS4KKyAqLworYm9vbCBjbW1faW5pdCh2b2lkKQoreworCWJvb2wgcmV0ID0gdHJ1ZTsKKworCURCQ19SRVFVSVJFKHJlZnMgPj0gMCk7CisJaWYgKHJldCkKKwkJcmVmcysrOworCisJREJDX0VOU1VSRSgocmV0ICYmIChyZWZzID4gMCkpIHx8ICghcmV0ICYmIChyZWZzID49IDApKSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogID09PT09PT09IGNtbV9yZWdpc3Rlcl9ncHBzbV9zZWcgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZWdpc3RlciBhIGJsb2NrIG9mIFNNIHdpdGggdGhlIENNTSB0byBiZSB1c2VkIGZvciBsYXRlciBHUFAgU00KKyAqICAgICAgYWxsb2NhdGlvbnMuCisgKi8KK2ludCBjbW1fcmVnaXN0ZXJfZ3Bwc21fc2VnKHN0cnVjdCBjbW1fb2JqZWN0ICpoY21tX21nciwKKwkJCQkgIHUzMiBkd19ncHBfYmFzZV9wYSwgdTMyIHVsX3NpemUsCisJCQkJICB1MzIgZHNwX2FkZHJfb2Zmc2V0LCBzOCBjX2ZhY3RvciwKKwkJCQkgIHUzMiBkd19kc3BfYmFzZSwgdTMyIHVsX2RzcF9zaXplLAorCQkJCSAgdTMyICpzZ210X2lkLCB1MzIgZ3BwX2Jhc2VfdmEpCit7CisJc3RydWN0IGNtbV9vYmplY3QgKmNtbV9tZ3Jfb2JqID0gKHN0cnVjdCBjbW1fb2JqZWN0ICopaGNtbV9tZ3I7CisJc3RydWN0IGNtbV9hbGxvY2F0b3IgKnBzbWEgPSBOVUxMOworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBjbW1fbW5vZGUgKm5ld19ub2RlOworCXMzMiBzbG90X3NlZzsKKworCURCQ19SRVFVSVJFKHVsX3NpemUgPiAwKTsKKwlEQkNfUkVRVUlSRShzZ210X2lkICE9IE5VTEwpOworCURCQ19SRVFVSVJFKGR3X2dwcF9iYXNlX3BhICE9IDApOworCURCQ19SRVFVSVJFKGdwcF9iYXNlX3ZhICE9IDApOworCURCQ19SRVFVSVJFKChjX2ZhY3RvciA8PSBDTU1fQUREVE9EU1BQQSkgJiYKKwkJICAgIChjX2ZhY3RvciA+PSBDTU1fU1VCRlJPTURTUFBBKSk7CisJZGV2X2RiZyhicmlkZ2UsICIlczogZHdfZ3BwX2Jhc2VfcGEgJXggdWxfc2l6ZSAleCBkc3BfYWRkcl9vZmZzZXQgJXggIgorCQkiZHdfZHNwX2Jhc2UgJXggdWxfZHNwX3NpemUgJXggZ3BwX2Jhc2VfdmEgJXhcbiIsIF9fZnVuY19fLAorCQlkd19ncHBfYmFzZV9wYSwgdWxfc2l6ZSwgZHNwX2FkZHJfb2Zmc2V0LCBkd19kc3BfYmFzZSwKKwkJdWxfZHNwX3NpemUsIGdwcF9iYXNlX3ZhKTsKKwlpZiAoIWhjbW1fbWdyKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCXJldHVybiBzdGF0dXM7CisJfQorCS8qIG1ha2Ugc3VyZSB3ZSBoYXZlIHJvb20gZm9yIGFub3RoZXIgYWxsb2NhdG9yICovCisJbXV0ZXhfbG9jaygmY21tX21ncl9vYmotPmNtbV9sb2NrKTsKKwlzbG90X3NlZyA9IGdldF9zbG90KGNtbV9tZ3Jfb2JqKTsKKwlpZiAoc2xvdF9zZWcgPCAwKSB7CisJCS8qIGdldCBhIHNsb3QgbnVtYmVyICovCisJCXN0YXR1cyA9IC1FUEVSTTsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJLyogQ2hlY2sgaWYgaW5wdXQgdWxfc2l6ZSBpcyBiaWcgZW5vdWdoIHRvIGFsbG9jIGF0IGxlYXN0IG9uZSBibG9jayAqLworCWlmICh1bF9zaXplIDwgY21tX21ncl9vYmotPnVsX21pbl9ibG9ja19zaXplKSB7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCisJLyogY3JlYXRlLCB6ZXJvLCBhbmQgdGFnIGFuIFNNIGFsbG9jYXRvciBvYmplY3QgKi8KKwlwc21hID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNtbV9hbGxvY2F0b3IpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHNtYSAhPSBOVUxMKSB7CisJCXBzbWEtPmhjbW1fbWdyID0gaGNtbV9tZ3I7CS8qIHJlZiB0byBwYXJlbnQgKi8KKwkJcHNtYS0+c2htX2Jhc2UgPSBkd19ncHBfYmFzZV9wYTsJLyogU00gQmFzZSBwaHlzICovCisJCXBzbWEtPnVsX3NtX3NpemUgPSB1bF9zaXplOwkvKiBTTSBzZWdtZW50IHNpemUgaW4gYnl0ZXMgKi8KKwkJcHNtYS0+ZHdfdm1fYmFzZSA9IGdwcF9iYXNlX3ZhOworCQlwc21hLT5kd19kc3BfcGh5c19hZGRyX29mZnNldCA9IGRzcF9hZGRyX29mZnNldDsKKwkJcHNtYS0+Y19mYWN0b3IgPSBjX2ZhY3RvcjsKKwkJcHNtYS0+ZHdfZHNwX2Jhc2UgPSBkd19kc3BfYmFzZTsKKwkJcHNtYS0+dWxfZHNwX3NpemUgPSB1bF9kc3Bfc2l6ZTsKKwkJaWYgKHBzbWEtPmR3X3ZtX2Jhc2UgPT0gMCkgeworCQkJc3RhdHVzID0gLUVQRVJNOworCQkJZ290byBmdW5jX2VuZDsKKwkJfQorCQkvKiByZXR1cm4gdGhlIGFjdHVhbCBzZWdtZW50IGlkZW50aWZpZXIgKi8KKwkJKnNnbXRfaWQgPSAodTMyKSBzbG90X3NlZyArIDE7CisJCS8qIGNyZWF0ZSBtZW1vcnkgZnJlZSBsaXN0ICovCisJCXBzbWEtPmZyZWVfbGlzdF9oZWFkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxzdF9saXN0KSwKKwkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKHBzbWEtPmZyZWVfbGlzdF9oZWFkID09IE5VTEwpIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlnb3RvIGZ1bmNfZW5kOworCQl9CisJCUlOSVRfTElTVF9IRUFEKCZwc21hLT5mcmVlX2xpc3RfaGVhZC0+aGVhZCk7CisKKwkJLyogY3JlYXRlIG1lbW9yeSBpbi11c2UgbGlzdCAqLworCQlwc21hLT5pbl91c2VfbGlzdF9oZWFkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0CisJCQkJCQlsc3RfbGlzdCksIEdGUF9LRVJORUwpOworCQlpZiAocHNtYS0+aW5fdXNlX2xpc3RfaGVhZCA9PSBOVUxMKSB7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJZ290byBmdW5jX2VuZDsKKwkJfQorCQlJTklUX0xJU1RfSEVBRCgmcHNtYS0+aW5fdXNlX2xpc3RfaGVhZC0+aGVhZCk7CisKKwkJLyogR2V0IGEgbWVtIG5vZGUgZm9yIHRoaXMgaHVuay1vLW1lbW9yeSAqLworCQluZXdfbm9kZSA9IGdldF9ub2RlKGNtbV9tZ3Jfb2JqLCBkd19ncHBfYmFzZV9wYSwKKwkJCQkgICAgcHNtYS0+ZHdfdm1fYmFzZSwgdWxfc2l6ZSk7CisJCS8qIFBsYWNlIG5vZGUgb24gdGhlIFNNIGFsbG9jYXRvcidzIGZyZWUgbGlzdCAqLworCQlpZiAobmV3X25vZGUpIHsKKwkJCWxzdF9wdXRfdGFpbChwc21hLT5mcmVlX2xpc3RfaGVhZCwKKwkJCQkgICAgIChzdHJ1Y3QgbGlzdF9oZWFkICopbmV3X25vZGUpOworCQl9IGVsc2UgeworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCWdvdG8gZnVuY19lbmQ7CisJCX0KKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwkvKiBtYWtlIGVudHJ5ICovCisJY21tX21ncl9vYmotPnBhX2dwcHNtX3NlZ190YWJbc2xvdF9zZWddID0gcHNtYTsKKworZnVuY19lbmQ6CisJaWYgKHN0YXR1cyAmJiBwc21hKSB7CisJCS8qIENsZWFudXAgYWxsb2NhdG9yICovCisJCXVuX3JlZ2lzdGVyX2dwcHNtX3NlZyhwc21hKTsKKwl9CisKKwltdXRleF91bmxvY2soJmNtbV9tZ3Jfb2JqLT5jbW1fbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBjbW1fdW5fcmVnaXN0ZXJfZ3Bwc21fc2VnID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgVW5SZWdpc3RlciBHUFAgU00gc2VnbWVudHMgd2l0aCB0aGUgQ01NLgorICovCitpbnQgY21tX3VuX3JlZ2lzdGVyX2dwcHNtX3NlZyhzdHJ1Y3QgY21tX29iamVjdCAqaGNtbV9tZ3IsCisJCQkJICAgICB1MzIgdWxfc2VnX2lkKQoreworCXN0cnVjdCBjbW1fb2JqZWN0ICpjbW1fbWdyX29iaiA9IChzdHJ1Y3QgY21tX29iamVjdCAqKWhjbW1fbWdyOworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBjbW1fYWxsb2NhdG9yICpwc21hOworCXUzMiB1bF9pZCA9IHVsX3NlZ19pZDsKKworCURCQ19SRVFVSVJFKHVsX3NlZ19pZCA+IDApOworCWlmIChoY21tX21ncikgeworCQlpZiAodWxfc2VnX2lkID09IENNTV9BTExTRUdNRU5UUykKKwkJCXVsX2lkID0gMTsKKworCQlpZiAoKHVsX2lkID4gMCkgJiYgKHVsX2lkIDw9IENNTV9NQVhHUFBTRUdTKSkgeworCQkJd2hpbGUgKHVsX2lkIDw9IENNTV9NQVhHUFBTRUdTKSB7CisJCQkJbXV0ZXhfbG9jaygmY21tX21ncl9vYmotPmNtbV9sb2NrKTsKKwkJCQkvKiBzbG90ID0gc2VnX2lkLTEgKi8KKwkJCQlwc21hID0gY21tX21ncl9vYmotPnBhX2dwcHNtX3NlZ190YWJbdWxfaWQgLSAxXTsKKwkJCQlpZiAocHNtYSAhPSBOVUxMKSB7CisJCQkJCXVuX3JlZ2lzdGVyX2dwcHNtX3NlZyhwc21hKTsKKwkJCQkJLyogU2V0IGFsY3RyIHB0ciB0byBOVUxMIGZvciBmdXR1cmUKKwkJCQkJICogcmV1c2UgKi8KKwkJCQkJY21tX21ncl9vYmotPnBhX2dwcHNtX3NlZ190YWJbdWxfaWQgLQorCQkJCQkJCQkgICAgICAxXSA9IE5VTEw7CisJCQkJfSBlbHNlIGlmICh1bF9zZWdfaWQgIT0gQ01NX0FMTFNFR01FTlRTKSB7CisJCQkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCQl9CisJCQkJbXV0ZXhfdW5sb2NrKCZjbW1fbWdyX29iai0+Y21tX2xvY2spOworCQkJCWlmICh1bF9zZWdfaWQgIT0gQ01NX0FMTFNFR01FTlRTKQorCQkJCQlicmVhazsKKworCQkJCXVsX2lkKys7CisJCQl9CS8qIGVuZCB3aGlsZSAqLworCQl9IGVsc2UgeworCQkJc3RhdHVzID0gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gdW5fcmVnaXN0ZXJfZ3Bwc21fc2VnID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgVW5SZWdpc3RlciB0aGUgU00gYWxsb2NhdG9yIGJ5IGZyZWVpbmcgYWxsIGl0cyByZXNvdXJjZXMgYW5kCisgKiAgICAgIG51bGxpbmcgY21tIG1nciB0YWJsZSBlbnRyeS4KKyAqICBOb3RlOgorICogICAgICBUaGlzIHJvdXRpbmUgaXMgYWx3YXlzIGNhbGxlZCB3aXRoaW4gY21tIGxvY2sgY3JpdCBzZWN0LgorICovCitzdGF0aWMgdm9pZCB1bl9yZWdpc3Rlcl9ncHBzbV9zZWcoc3RydWN0IGNtbV9hbGxvY2F0b3IgKnBzbWEpCit7CisJc3RydWN0IGNtbV9tbm9kZSAqbW5vZGVfb2JqID0gTlVMTDsKKwlzdHJ1Y3QgY21tX21ub2RlICpuZXh0X25vZGUgPSBOVUxMOworCisJREJDX1JFUVVJUkUocHNtYSAhPSBOVUxMKTsKKwlpZiAocHNtYS0+ZnJlZV9saXN0X2hlYWQgIT0gTlVMTCkgeworCQkvKiBmcmVlIG5vZGVzIG9uIGZyZWUgbGlzdCAqLworCQltbm9kZV9vYmogPSAoc3RydWN0IGNtbV9tbm9kZSAqKWxzdF9maXJzdChwc21hLT5mcmVlX2xpc3RfaGVhZCk7CisJCXdoaWxlIChtbm9kZV9vYmopIHsKKwkJCW5leHRfbm9kZSA9CisJCQkgICAgKHN0cnVjdCBjbW1fbW5vZGUgKilsc3RfbmV4dChwc21hLT5mcmVlX2xpc3RfaGVhZCwKKwkJCQkJCQkgKHN0cnVjdCBsaXN0X2hlYWQgKikKKwkJCQkJCQkgbW5vZGVfb2JqKTsKKwkJCWxzdF9yZW1vdmVfZWxlbShwc21hLT5mcmVlX2xpc3RfaGVhZCwKKwkJCQkJKHN0cnVjdCBsaXN0X2hlYWQgKiltbm9kZV9vYmopOworCQkJa2ZyZWUoKHZvaWQgKiltbm9kZV9vYmopOworCQkJLyogbmV4dCBub2RlLiAqLworCQkJbW5vZGVfb2JqID0gbmV4dF9ub2RlOworCQl9CisJCWtmcmVlKHBzbWEtPmZyZWVfbGlzdF9oZWFkKTsJLyogZGVsZXRlIGZyZWVsaXN0ICovCisJCS8qIGZyZWUgbm9kZXMgb24gSW5Vc2UgbGlzdCAqLworCQltbm9kZV9vYmogPQorCQkgICAgKHN0cnVjdCBjbW1fbW5vZGUgKilsc3RfZmlyc3QocHNtYS0+aW5fdXNlX2xpc3RfaGVhZCk7CisJCXdoaWxlIChtbm9kZV9vYmopIHsKKwkJCW5leHRfbm9kZSA9CisJCQkgICAgKHN0cnVjdCBjbW1fbW5vZGUgKilsc3RfbmV4dChwc21hLT5pbl91c2VfbGlzdF9oZWFkLAorCQkJCQkJCSAoc3RydWN0IGxpc3RfaGVhZCAqKQorCQkJCQkJCSBtbm9kZV9vYmopOworCQkJbHN0X3JlbW92ZV9lbGVtKHBzbWEtPmluX3VzZV9saXN0X2hlYWQsCisJCQkJCShzdHJ1Y3QgbGlzdF9oZWFkICopbW5vZGVfb2JqKTsKKwkJCWtmcmVlKCh2b2lkICopbW5vZGVfb2JqKTsKKwkJCS8qIG5leHQgbm9kZS4gKi8KKwkJCW1ub2RlX29iaiA9IG5leHRfbm9kZTsKKwkJfQorCQlrZnJlZShwc21hLT5pbl91c2VfbGlzdF9oZWFkKTsJLyogZGVsZXRlIEluVXNlIGxpc3QgKi8KKwl9CisJaWYgKCh2b2lkICopcHNtYS0+ZHdfdm1fYmFzZSAhPSBOVUxMKQorCQlNRU1fVU5NQVBfTElORUFSX0FERFJFU1MoKHZvaWQgKilwc21hLT5kd192bV9iYXNlKTsKKworCS8qIEZyZWUgYWxsb2NhdG9yIGl0c2VsZiAqLworCWtmcmVlKHBzbWEpOworfQorCisvKgorICogID09PT09PT09IGdldF9zbG90ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQW4gYXZhaWxhYmxlIHNsb3QgIyBpcyByZXR1cm5lZC4gUmV0dXJucyBuZWdhdGl2ZSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgczMyIGdldF9zbG90KHN0cnVjdCBjbW1fb2JqZWN0ICpjbW1fbWdyX29iaikKK3sKKwlzMzIgc2xvdF9zZWcgPSAtMTsJLyogbmVnIG9uIGZhaWx1cmUgKi8KKwlEQkNfUkVRVUlSRShjbW1fbWdyX29iaiAhPSBOVUxMKTsKKwkvKiBnZXQgZmlyc3QgYXZhaWxhYmxlIHNsb3QgaW4gY21tIG1nciBTTVNlZ1RhYltdICovCisJZm9yIChzbG90X3NlZyA9IDA7IHNsb3Rfc2VnIDwgQ01NX01BWEdQUFNFR1M7IHNsb3Rfc2VnKyspIHsKKwkJaWYgKGNtbV9tZ3Jfb2JqLT5wYV9ncHBzbV9zZWdfdGFiW3Nsb3Rfc2VnXSA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwl9CisJaWYgKHNsb3Rfc2VnID09IENNTV9NQVhHUFBTRUdTKQorCQlzbG90X3NlZyA9IC0xOwkvKiBmYWlsZWQgKi8KKworCXJldHVybiBzbG90X3NlZzsKK30KKworLyoKKyAqICA9PT09PT09PSBnZXRfbm9kZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEdldCBhIG1lbW9yeSBub2RlIGZyb20gZnJlZWxpc3Qgb3IgY3JlYXRlIGEgbmV3IG9uZS4KKyAqLworc3RhdGljIHN0cnVjdCBjbW1fbW5vZGUgKmdldF9ub2RlKHN0cnVjdCBjbW1fb2JqZWN0ICpjbW1fbWdyX29iaiwgdTMyIGR3X3BhLAorCQkJCSAgdTMyIGR3X3ZhLCB1MzIgdWxfc2l6ZSkKK3sKKwlzdHJ1Y3QgY21tX21ub2RlICpwbm9kZSA9IE5VTEw7CisKKwlEQkNfUkVRVUlSRShjbW1fbWdyX29iaiAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShkd19wYSAhPSAwKTsKKwlEQkNfUkVRVUlSRShkd192YSAhPSAwKTsKKwlEQkNfUkVRVUlSRSh1bF9zaXplICE9IDApOworCS8qIENoZWNrIGNtbSBtZ3IncyBub2RlIGZyZWVsaXN0ICovCisJaWYgKExTVF9JU19FTVBUWShjbW1fbWdyX29iai0+bm9kZV9mcmVlX2xpc3RfaGVhZCkpIHsKKwkJcG5vZGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY21tX21ub2RlKSwgR0ZQX0tFUk5FTCk7CisJfSBlbHNlIHsKKwkJLyogc3VyZWx5IGEgdmFsaWQgZWxlbWVudCAqLworCQlwbm9kZSA9IChzdHJ1Y3QgY21tX21ub2RlICopCisJCSAgICBsc3RfZ2V0X2hlYWQoY21tX21ncl9vYmotPm5vZGVfZnJlZV9saXN0X2hlYWQpOworCX0KKwlpZiAocG5vZGUpIHsKKwkJbHN0X2luaXRfZWxlbSgoc3RydWN0IGxpc3RfaGVhZCAqKXBub2RlKTsJLyogc2V0IHNlbGYgKi8KKwkJcG5vZGUtPmR3X3BhID0gZHdfcGE7CS8qIFBoeXNpY2FsIGFkZHIgb2Ygc3RhcnQgb2YgYmxvY2sgKi8KKwkJcG5vZGUtPmR3X3ZhID0gZHdfdmE7CS8qIFZpcnR1YWwgICAiICAgICAgICAgICAgIiAqLworCQlwbm9kZS0+dWxfc2l6ZSA9IHVsX3NpemU7CS8qIFNpemUgb2YgYmxvY2sgKi8KKwl9CisJcmV0dXJuIHBub2RlOworfQorCisvKgorICogID09PT09PT09IGRlbGV0ZV9ub2RlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUHV0IGEgbWVtb3J5IG5vZGUgb24gdGhlIGNtbSBub2RlbGlzdCBmb3IgbGF0ZXIgdXNlLgorICogICAgICBEb2Vzbid0IGFjdHVhbGx5IGRlbGV0ZSB0aGUgbm9kZS4gSGVhcCB0aHJhc2hpbmcgZnJpZW5kbHkuCisgKi8KK3N0YXRpYyB2b2lkIGRlbGV0ZV9ub2RlKHN0cnVjdCBjbW1fb2JqZWN0ICpjbW1fbWdyX29iaiwgc3RydWN0IGNtbV9tbm9kZSAqcG5vZGUpCit7CisJREJDX1JFUVVJUkUocG5vZGUgIT0gTlVMTCk7CisJbHN0X2luaXRfZWxlbSgoc3RydWN0IGxpc3RfaGVhZCAqKXBub2RlKTsJLyogaW5pdCAuc2VsZiBwdHIgKi8KKwlsc3RfcHV0X3RhaWwoY21tX21ncl9vYmotPm5vZGVfZnJlZV9saXN0X2hlYWQsCisJCSAgICAgKHN0cnVjdCBsaXN0X2hlYWQgKilwbm9kZSk7Cit9CisKKy8qCisgKiA9PT09PT0gZ2V0X2ZyZWVfYmxvY2sgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTY2FuIHRoZSBmcmVlIGJsb2NrIGxpc3QgYW5kIHJldHVybiB0aGUgZmlyc3QgYmxvY2sgdGhhdCBzYXRpc2ZpZXMKKyAqICAgICAgdGhlIHNpemUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY21tX21ub2RlICpnZXRfZnJlZV9ibG9jayhzdHJ1Y3QgY21tX2FsbG9jYXRvciAqYWxsb2NhdG9yLAorCQkJCQl1MzIgdXNpemUpCit7CisJaWYgKGFsbG9jYXRvcikgeworCQlzdHJ1Y3QgY21tX21ub2RlICptbm9kZV9vYmogPSAoc3RydWN0IGNtbV9tbm9kZSAqKQorCQkgICAgbHN0X2ZpcnN0KGFsbG9jYXRvci0+ZnJlZV9saXN0X2hlYWQpOworCQl3aGlsZSAobW5vZGVfb2JqKSB7CisJCQlpZiAodXNpemUgPD0gKHUzMikgbW5vZGVfb2JqLT51bF9zaXplKSB7CisJCQkJbHN0X3JlbW92ZV9lbGVtKGFsbG9jYXRvci0+ZnJlZV9saXN0X2hlYWQsCisJCQkJCQkoc3RydWN0IGxpc3RfaGVhZCAqKW1ub2RlX29iaik7CisJCQkJcmV0dXJuIG1ub2RlX29iajsKKwkJCX0KKwkJCS8qIG5leHQgbm9kZS4gKi8KKwkJCW1ub2RlX29iaiA9IChzdHJ1Y3QgY21tX21ub2RlICopCisJCQkgICAgbHN0X25leHQoYWxsb2NhdG9yLT5mcmVlX2xpc3RfaGVhZCwKKwkJCQkgICAgIChzdHJ1Y3QgbGlzdF9oZWFkICopbW5vZGVfb2JqKTsKKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqICA9PT09PT09PSBhZGRfdG9fZnJlZV9saXN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ29lbGVzY2Ugbm9kZSBpbnRvIHRoZSBmcmVlbGlzdCBpbiBhc2NlbmRpbmcgc2l6ZSBvcmRlci4KKyAqLworc3RhdGljIHZvaWQgYWRkX3RvX2ZyZWVfbGlzdChzdHJ1Y3QgY21tX2FsbG9jYXRvciAqYWxsb2NhdG9yLAorCQkJICAgICBzdHJ1Y3QgY21tX21ub2RlICpwbm9kZSkKK3sKKwlzdHJ1Y3QgY21tX21ub2RlICpub2RlX3ByZXYgPSBOVUxMOworCXN0cnVjdCBjbW1fbW5vZGUgKm5vZGVfbmV4dCA9IE5VTEw7CisJc3RydWN0IGNtbV9tbm9kZSAqbW5vZGVfb2JqOworCXUzMiBkd190aGlzX3BhOworCXUzMiBkd19uZXh0X3BhOworCisJREJDX1JFUVVJUkUocG5vZGUgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoYWxsb2NhdG9yICE9IE5VTEwpOworCWR3X3RoaXNfcGEgPSBwbm9kZS0+ZHdfcGE7CisJZHdfbmV4dF9wYSA9IE5FWFRfUEEocG5vZGUpOworCW1ub2RlX29iaiA9IChzdHJ1Y3QgY21tX21ub2RlICopbHN0X2ZpcnN0KGFsbG9jYXRvci0+ZnJlZV9saXN0X2hlYWQpOworCXdoaWxlIChtbm9kZV9vYmopIHsKKwkJaWYgKGR3X3RoaXNfcGEgPT0gTkVYVF9QQShtbm9kZV9vYmopKSB7CisJCQkvKiBmb3VuZCB0aGUgYmxvY2sgYWhlYWQgb2YgdGhpcyBvbmUgKi8KKwkJCW5vZGVfcHJldiA9IG1ub2RlX29iajsKKwkJfSBlbHNlIGlmIChkd19uZXh0X3BhID09IG1ub2RlX29iai0+ZHdfcGEpIHsKKwkJCW5vZGVfbmV4dCA9IG1ub2RlX29iajsKKwkJfQorCQlpZiAoKG5vZGVfcHJldiA9PSBOVUxMKSB8fCAobm9kZV9uZXh0ID09IE5VTEwpKSB7CisJCQkvKiBuZXh0IG5vZGUuICovCisJCQltbm9kZV9vYmogPSAoc3RydWN0IGNtbV9tbm9kZSAqKQorCQkJICAgIGxzdF9uZXh0KGFsbG9jYXRvci0+ZnJlZV9saXN0X2hlYWQsCisJCQkJICAgICAoc3RydWN0IGxpc3RfaGVhZCAqKW1ub2RlX29iaik7CisJCX0gZWxzZSB7CisJCQkvKiBnb3QgJ2VtICovCisJCQlicmVhazsKKwkJfQorCX0JCQkvKiB3aGlsZSAqLworCWlmIChub2RlX3ByZXYgIT0gTlVMTCkgeworCQkvKiBjb21iaW5lIHdpdGggcHJldmlvdXMgYmxvY2sgKi8KKwkJbHN0X3JlbW92ZV9lbGVtKGFsbG9jYXRvci0+ZnJlZV9saXN0X2hlYWQsCisJCQkJKHN0cnVjdCBsaXN0X2hlYWQgKilub2RlX3ByZXYpOworCQkvKiBncm93IG5vZGUgdG8gaG9sZCBib3RoICovCisJCXBub2RlLT51bF9zaXplICs9IG5vZGVfcHJldi0+dWxfc2l6ZTsKKwkJcG5vZGUtPmR3X3BhID0gbm9kZV9wcmV2LT5kd19wYTsKKwkJcG5vZGUtPmR3X3ZhID0gbm9kZV9wcmV2LT5kd192YTsKKwkJLyogcGxhY2Ugbm9kZSBvbiBtZ3Igbm9kZUZyZWVMaXN0ICovCisJCWRlbGV0ZV9ub2RlKChzdHJ1Y3QgY21tX29iamVjdCAqKWFsbG9jYXRvci0+aGNtbV9tZ3IsCisJCQkgICAgbm9kZV9wcmV2KTsKKwl9CisJaWYgKG5vZGVfbmV4dCAhPSBOVUxMKSB7CisJCS8qIGNvbWJpbmUgd2l0aCBuZXh0IGJsb2NrICovCisJCWxzdF9yZW1vdmVfZWxlbShhbGxvY2F0b3ItPmZyZWVfbGlzdF9oZWFkLAorCQkJCShzdHJ1Y3QgbGlzdF9oZWFkICopbm9kZV9uZXh0KTsKKwkJLyogZ3JvdyBkYSBub2RlICovCisJCXBub2RlLT51bF9zaXplICs9IG5vZGVfbmV4dC0+dWxfc2l6ZTsKKwkJLyogcGxhY2Ugbm9kZSBvbiBtZ3Igbm9kZUZyZWVMaXN0ICovCisJCWRlbGV0ZV9ub2RlKChzdHJ1Y3QgY21tX29iamVjdCAqKWFsbG9jYXRvci0+aGNtbV9tZ3IsCisJCQkgICAgbm9kZV9uZXh0KTsKKwl9CisJLyogTm93LCBsZXQncyBhZGQgdG8gZnJlZWxpc3QgaW4gaW5jcmVhc2luZyBzaXplIG9yZGVyICovCisJbW5vZGVfb2JqID0gKHN0cnVjdCBjbW1fbW5vZGUgKilsc3RfZmlyc3QoYWxsb2NhdG9yLT5mcmVlX2xpc3RfaGVhZCk7CisJd2hpbGUgKG1ub2RlX29iaikgeworCQlpZiAocG5vZGUtPnVsX3NpemUgPD0gbW5vZGVfb2JqLT51bF9zaXplKQorCQkJYnJlYWs7CisKKwkJLyogbmV4dCBub2RlLiAqLworCQltbm9kZV9vYmogPQorCQkgICAgKHN0cnVjdCBjbW1fbW5vZGUgKilsc3RfbmV4dChhbGxvY2F0b3ItPmZyZWVfbGlzdF9oZWFkLAorCQkJCQkJIChzdHJ1Y3QgbGlzdF9oZWFkICopbW5vZGVfb2JqKTsKKwl9CisJLyogaWYgbW5vZGVfb2JqIGlzIE5VTEwgdGhlbiBhZGQgb3VyIHBub2RlIHRvIHRoZSBlbmQgb2YgdGhlIGZyZWVsaXN0ICovCisJaWYgKG1ub2RlX29iaiA9PSBOVUxMKSB7CisJCWxzdF9wdXRfdGFpbChhbGxvY2F0b3ItPmZyZWVfbGlzdF9oZWFkLAorCQkJICAgICAoc3RydWN0IGxpc3RfaGVhZCAqKXBub2RlKTsKKwl9IGVsc2UgeworCQkvKiBpbnNlcnQgb3VyIG5vZGUgYmVmb3JlIHRoZSBjdXJyZW50IHRyYXZlcnNlZCBub2RlICovCisJCWxzdF9pbnNlcnRfYmVmb3JlKGFsbG9jYXRvci0+ZnJlZV9saXN0X2hlYWQsCisJCQkJICAoc3RydWN0IGxpc3RfaGVhZCAqKXBub2RlLAorCQkJCSAgKHN0cnVjdCBsaXN0X2hlYWQgKiltbm9kZV9vYmopOworCX0KK30KKworLyoKKyAqID09PT09PT09IGdldF9hbGxvY2F0b3IgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXR1cm4gdGhlIGFsbG9jYXRvciBmb3IgdGhlIGdpdmVuIFNNIFNlZ2lkLgorICogICAgICBTZWdJZHM6ICAxLDIsMy4ubWF4LgorICovCitzdGF0aWMgc3RydWN0IGNtbV9hbGxvY2F0b3IgKmdldF9hbGxvY2F0b3Ioc3RydWN0IGNtbV9vYmplY3QgKmNtbV9tZ3Jfb2JqLAorCQkJCQkgICB1MzIgdWxfc2VnX2lkKQoreworCXN0cnVjdCBjbW1fYWxsb2NhdG9yICphbGxvY2F0b3IgPSBOVUxMOworCisJREJDX1JFUVVJUkUoY21tX21ncl9vYmogIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoKHVsX3NlZ19pZCA+IDApICYmICh1bF9zZWdfaWQgPD0gQ01NX01BWEdQUFNFR1MpKTsKKwlhbGxvY2F0b3IgPSBjbW1fbWdyX29iai0+cGFfZ3Bwc21fc2VnX3RhYlt1bF9zZWdfaWQgLSAxXTsKKwlpZiAoYWxsb2NhdG9yICE9IE5VTEwpIHsKKwkJLyogbWFrZSBzdXJlIGl0J3MgZm9yIHJlYWwgKi8KKwkJaWYgKCFhbGxvY2F0b3IpIHsKKwkJCWFsbG9jYXRvciA9IE5VTEw7CisJCQlEQkNfQVNTRVJUKGZhbHNlKTsKKwkJfQorCX0KKwlyZXR1cm4gYWxsb2NhdG9yOworfQorCisvKgorICogIFRoZSBDTU1fWGxhdG9yW3h4eF0gcm91dGluZXMgYmVsb3cgYXJlIHVzZWQgYnkgTm9kZSBhbmQgU3RyZWFtCisgKiAgdG8gcGVyZm9ybSBTTSBhZGRyZXNzIHRyYW5zbGF0aW9uIHRvIHRoZSBjbGllbnQgcHJvY2VzcyBhZGRyZXNzIHNwYWNlLgorICogIEEgInRyYW5zbGF0b3IiIG9iamVjdCBpcyBjcmVhdGVkIGJ5IGEgbm9kZS9zdHJlYW0gZm9yIGVhY2ggU00gc2VnIHVzZWQuCisgKi8KKworLyoKKyAqICA9PT09PT09PSBjbW1feGxhdG9yX2NyZWF0ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENyZWF0ZSBhbiBhZGRyZXNzIHRyYW5zbGF0b3Igb2JqZWN0LgorICovCitpbnQgY21tX3hsYXRvcl9jcmVhdGUoc3RydWN0IGNtbV94bGF0b3JvYmplY3QgKip4bGF0b3IsCisJCQkgICAgIHN0cnVjdCBjbW1fb2JqZWN0ICpoY21tX21nciwKKwkJCSAgICAgc3RydWN0IGNtbV94bGF0b3JhdHRycyAqeGxhdG9yX2F0dHJzKQoreworCXN0cnVjdCBjbW1feGxhdG9yICp4bGF0b3Jfb2JqZWN0ID0gTlVMTDsKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRSh4bGF0b3IgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoaGNtbV9tZ3IgIT0gTlVMTCk7CisKKwkqeGxhdG9yID0gTlVMTDsKKwlpZiAoeGxhdG9yX2F0dHJzID09IE5VTEwpCisJCXhsYXRvcl9hdHRycyA9ICZjbW1fZGZsdHhsYXRvcmF0dHJzOwkvKiBzZXQgZGVmYXVsdHMgKi8KKworCXhsYXRvcl9vYmplY3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY21tX3hsYXRvciksIEdGUF9LRVJORUwpOworCWlmICh4bGF0b3Jfb2JqZWN0ICE9IE5VTEwpIHsKKwkJeGxhdG9yX29iamVjdC0+aGNtbV9tZ3IgPSBoY21tX21ncjsJLyogcmVmIGJhY2sgdG8gQ01NICovCisJCS8qIFNNIHNlZ19pZCAqLworCQl4bGF0b3Jfb2JqZWN0LT51bF9zZWdfaWQgPSB4bGF0b3JfYXR0cnMtPnVsX3NlZ19pZDsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCX0KKwlpZiAoIXN0YXR1cykKKwkJKnhsYXRvciA9IChzdHJ1Y3QgY21tX3hsYXRvcm9iamVjdCAqKXhsYXRvcl9vYmplY3Q7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGNtbV94bGF0b3JfZGVsZXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRnJlZSB0aGUgWGxhdG9yIHJlc291cmNlcy4KKyAqICAgICAgVk0gZ2V0cyBmcmVlZCBsYXRlci4KKyAqLworaW50IGNtbV94bGF0b3JfZGVsZXRlKHN0cnVjdCBjbW1feGxhdG9yb2JqZWN0ICp4bGF0b3IsIGJvb2wgZm9yY2UpCit7CisJc3RydWN0IGNtbV94bGF0b3IgKnhsYXRvcl9vYmogPSAoc3RydWN0IGNtbV94bGF0b3IgKil4bGF0b3I7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlrZnJlZSh4bGF0b3Jfb2JqKTsKKworCXJldHVybiAwOworfQorCisvKgorICogID09PT09PT09IGNtbV94bGF0b3JfYWxsb2NfYnVmID09PT09PT09CisgKi8KK3ZvaWQgKmNtbV94bGF0b3JfYWxsb2NfYnVmKHN0cnVjdCBjbW1feGxhdG9yb2JqZWN0ICp4bGF0b3IsIHZvaWQgKnZhX2J1ZiwKKwkJCSAgIHUzMiBwYV9zaXplKQoreworCXN0cnVjdCBjbW1feGxhdG9yICp4bGF0b3Jfb2JqID0gKHN0cnVjdCBjbW1feGxhdG9yICopeGxhdG9yOworCXZvaWQgKnBidWYgPSBOVUxMOworCXZvaWQgKnRtcF92YV9idWZmOworCXN0cnVjdCBjbW1fYXR0cnMgYXR0cnM7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoeGxhdG9yICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHhsYXRvcl9vYmotPmhjbW1fbWdyICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHZhX2J1ZiAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShwYV9zaXplID4gMCk7CisJREJDX1JFUVVJUkUoeGxhdG9yX29iai0+dWxfc2VnX2lkID4gMCk7CisKKwlpZiAoeGxhdG9yX29iaikgeworCQlhdHRycy51bF9zZWdfaWQgPSB4bGF0b3Jfb2JqLT51bF9zZWdfaWQ7CisJCV9fcmF3X3dyaXRlbCgwLCB2YV9idWYpOworCQkvKiBBbGxvYyBTTSAqLworCQlwYnVmID0KKwkJICAgIGNtbV9jYWxsb2NfYnVmKHhsYXRvcl9vYmotPmhjbW1fbWdyLCBwYV9zaXplLCAmYXR0cnMsIE5VTEwpOworCQlpZiAocGJ1ZikgeworCQkJLyogY29udmVydCB0byB0cmFuc2xhdG9yKG5vZGUvc3RybSkgcHJvY2VzcyBWaXJ0dWFsCisJCQkgKiBhZGRyZXNzICovCisJCQkgdG1wX3ZhX2J1ZmYgPSBjbW1feGxhdG9yX3RyYW5zbGF0ZSh4bGF0b3IsCisJCQkJCQkJIHBidWYsIENNTV9QQTJWQSk7CisJCQlfX3Jhd193cml0ZWwoKHUzMil0bXBfdmFfYnVmZiwgdmFfYnVmKTsKKwkJfQorCX0KKwlyZXR1cm4gcGJ1ZjsKK30KKworLyoKKyAqICA9PT09PT09PSBjbW1feGxhdG9yX2ZyZWVfYnVmID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRnJlZSB0aGUgZ2l2ZW4gU00gYnVmZmVyIGFuZCBkZXNjcmlwdG9yLgorICogICAgICBEb2VzIG5vdCBmcmVlIHZpcnR1YWwgbWVtb3J5LgorICovCitpbnQgY21tX3hsYXRvcl9mcmVlX2J1ZihzdHJ1Y3QgY21tX3hsYXRvcm9iamVjdCAqeGxhdG9yLCB2b2lkICpidWZfdmEpCit7CisJc3RydWN0IGNtbV94bGF0b3IgKnhsYXRvcl9vYmogPSAoc3RydWN0IGNtbV94bGF0b3IgKil4bGF0b3I7CisJaW50IHN0YXR1cyA9IC1FUEVSTTsKKwl2b2lkICpidWZfcGEgPSBOVUxMOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGJ1Zl92YSAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRSh4bGF0b3Jfb2JqLT51bF9zZWdfaWQgPiAwKTsKKworCWlmICh4bGF0b3Jfb2JqKSB7CisJCS8qIGNvbnZlcnQgVmEgdG8gUGEgc28gd2UgY2FuIGZyZWUgaXQuICovCisJCWJ1Zl9wYSA9IGNtbV94bGF0b3JfdHJhbnNsYXRlKHhsYXRvciwgYnVmX3ZhLCBDTU1fVkEyUEEpOworCQlpZiAoYnVmX3BhKSB7CisJCQlzdGF0dXMgPSBjbW1fZnJlZV9idWYoeGxhdG9yX29iai0+aGNtbV9tZ3IsIGJ1Zl9wYSwKKwkJCQkJICAgICAgeGxhdG9yX29iai0+dWxfc2VnX2lkKTsKKwkJCWlmIChzdGF0dXMpIHsKKwkJCQkvKiBVaCBvaCwgdGhpcyBzaG91bGRuJ3QgaGFwcGVuLiBEZXNjcmlwdG9yCisJCQkJICogZ29uZSEgKi8KKwkJCQlEQkNfQVNTRVJUKGZhbHNlKTsJLyogQ01NIGlzIGxlYWtpbmcgbWVtICovCisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBjbW1feGxhdG9yX2luZm8gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTZXQvR2V0IHRyYW5zbGF0b3IgaW5mby4KKyAqLworaW50IGNtbV94bGF0b3JfaW5mbyhzdHJ1Y3QgY21tX3hsYXRvcm9iamVjdCAqeGxhdG9yLCB1OCAqKiBwYWRkciwKKwkJCSAgIHUzMiB1bF9zaXplLCB1MzIgc2VnbV9pZCwgYm9vbCBzZXRfaW5mbykKK3sKKwlzdHJ1Y3QgY21tX3hsYXRvciAqeGxhdG9yX29iaiA9IChzdHJ1Y3QgY21tX3hsYXRvciAqKXhsYXRvcjsKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShwYWRkciAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRSgoc2VnbV9pZCA+IDApICYmIChzZWdtX2lkIDw9IENNTV9NQVhHUFBTRUdTKSk7CisKKwlpZiAoeGxhdG9yX29iaikgeworCQlpZiAoc2V0X2luZm8pIHsKKwkJCS8qIHNldCB0cmFuc2xhdG9ycyB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UgKi8KKwkJCXhsYXRvcl9vYmotPmR3X3ZpcnRfYmFzZSA9ICh1MzIpICpwYWRkcjsKKwkJCXhsYXRvcl9vYmotPnVsX3ZpcnRfc2l6ZSA9IHVsX3NpemU7CisJCX0gZWxzZSB7CS8qIHJldHVybiB2aXJ0IGJhc2UgYWRkcmVzcyAqLworCQkJKnBhZGRyID0gKHU4ICopIHhsYXRvcl9vYmotPmR3X3ZpcnRfYmFzZTsKKwkJfQorCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY21tX3hsYXRvcl90cmFuc2xhdGUgPT09PT09PT0KKyAqLwordm9pZCAqY21tX3hsYXRvcl90cmFuc2xhdGUoc3RydWN0IGNtbV94bGF0b3JvYmplY3QgKnhsYXRvciwgdm9pZCAqcGFkZHIsCisJCQkgICBlbnVtIGNtbV94bGF0ZXR5cGUgeHR5cGUpCit7CisJdTMyIGR3X2FkZHJfeGxhdGUgPSAwOworCXN0cnVjdCBjbW1feGxhdG9yICp4bGF0b3Jfb2JqID0gKHN0cnVjdCBjbW1feGxhdG9yICopeGxhdG9yOworCXN0cnVjdCBjbW1fb2JqZWN0ICpjbW1fbWdyX29iaiA9IE5VTEw7CisJc3RydWN0IGNtbV9hbGxvY2F0b3IgKmFsbG9jYXRvciA9IE5VTEw7CisJdTMyIGR3X29mZnNldCA9IDA7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUocGFkZHIgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoKHh0eXBlID49IENNTV9WQTJQQSkgJiYgKHh0eXBlIDw9IENNTV9EU1BQQTJQQSkpOworCisJaWYgKCF4bGF0b3Jfb2JqKQorCQlnb3RvIGxvb3BfY29udDsKKworCWNtbV9tZ3Jfb2JqID0gKHN0cnVjdCBjbW1fb2JqZWN0ICopeGxhdG9yX29iai0+aGNtbV9tZ3I7CisJLyogZ2V0IHRoaXMgdHJhbnNsYXRvcidzIGRlZmF1bHQgU00gYWxsb2NhdG9yICovCisJREJDX0FTU0VSVCh4bGF0b3Jfb2JqLT51bF9zZWdfaWQgPiAwKTsKKwlhbGxvY2F0b3IgPSBjbW1fbWdyX29iai0+cGFfZ3Bwc21fc2VnX3RhYlt4bGF0b3Jfb2JqLT51bF9zZWdfaWQgLSAxXTsKKwlpZiAoIWFsbG9jYXRvcikKKwkJZ290byBsb29wX2NvbnQ7CisKKwlpZiAoKHh0eXBlID09IENNTV9WQTJEU1BQQSkgfHwgKHh0eXBlID09IENNTV9WQTJQQSkgfHwKKwkgICAgKHh0eXBlID09IENNTV9QQTJWQSkpIHsKKwkJaWYgKHh0eXBlID09IENNTV9QQTJWQSkgeworCQkJLyogR3BwIFZhID0gVmEgQmFzZSArIG9mZnNldCAqLworCQkJZHdfb2Zmc2V0ID0gKHU4ICopIHBhZGRyIC0gKHU4ICopIChhbGxvY2F0b3ItPnNobV9iYXNlIC0KKwkJCQkJCQkgICBhbGxvY2F0b3ItPgorCQkJCQkJCSAgIHVsX2RzcF9zaXplKTsKKwkJCWR3X2FkZHJfeGxhdGUgPSB4bGF0b3Jfb2JqLT5kd192aXJ0X2Jhc2UgKyBkd19vZmZzZXQ7CisJCQkvKiBDaGVjayBpZiB0cmFuc2xhdGVkIFZhIGJhc2UgaXMgaW4gcmFuZ2UgKi8KKwkJCWlmICgoZHdfYWRkcl94bGF0ZSA8IHhsYXRvcl9vYmotPmR3X3ZpcnRfYmFzZSkgfHwKKwkJCSAgICAoZHdfYWRkcl94bGF0ZSA+PQorCQkJICAgICAoeGxhdG9yX29iai0+ZHdfdmlydF9iYXNlICsKKwkJCSAgICAgIHhsYXRvcl9vYmotPnVsX3ZpcnRfc2l6ZSkpKSB7CisJCQkJZHdfYWRkcl94bGF0ZSA9IDA7CS8qIGJhZCBhZGRyZXNzICovCisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBHcHAgUEEgPSAgR3BwIEJhc2UgKyBvZmZzZXQgKi8KKwkJCWR3X29mZnNldCA9CisJCQkgICAgKHU4ICopIHBhZGRyIC0gKHU4ICopIHhsYXRvcl9vYmotPmR3X3ZpcnRfYmFzZTsKKwkJCWR3X2FkZHJfeGxhdGUgPQorCQkJICAgIGFsbG9jYXRvci0+c2htX2Jhc2UgLSBhbGxvY2F0b3ItPnVsX2RzcF9zaXplICsKKwkJCSAgICBkd19vZmZzZXQ7CisJCX0KKwl9IGVsc2UgeworCQlkd19hZGRyX3hsYXRlID0gKHUzMikgcGFkZHI7CisJfQorCS8qTm93IGNvbnZlcnQgYWRkcmVzcyB0byBwcm9wZXIgdGFyZ2V0IHBoeXNpY2FsIGFkZHJlc3MgaWYgbmVlZGVkICovCisJaWYgKCh4dHlwZSA9PSBDTU1fVkEyRFNQUEEpIHx8ICh4dHlwZSA9PSBDTU1fUEEyRFNQUEEpKSB7CisJCS8qIEdvdCBHcHAgUGEgbm93LCBjb252ZXJ0IHRvIERTUCBQYSAqLworCQlkd19hZGRyX3hsYXRlID0KKwkJICAgIEdQUFBBMkRTUFBBKChhbGxvY2F0b3ItPnNobV9iYXNlIC0gYWxsb2NhdG9yLT51bF9kc3Bfc2l6ZSksCisJCQkJZHdfYWRkcl94bGF0ZSwKKwkJCQlhbGxvY2F0b3ItPmR3X2RzcF9waHlzX2FkZHJfb2Zmc2V0ICoKKwkJCQlhbGxvY2F0b3ItPmNfZmFjdG9yKTsKKwl9IGVsc2UgaWYgKHh0eXBlID09IENNTV9EU1BQQTJQQSkgeworCQkvKiBHb3QgRFNQIFBhLCBjb252ZXJ0IHRvIEdQUCBQYSAqLworCQlkd19hZGRyX3hsYXRlID0KKwkJICAgIERTUFBBMkdQUFBBKGFsbG9jYXRvci0+c2htX2Jhc2UgLSBhbGxvY2F0b3ItPnVsX2RzcF9zaXplLAorCQkJCWR3X2FkZHJfeGxhdGUsCisJCQkJYWxsb2NhdG9yLT5kd19kc3BfcGh5c19hZGRyX29mZnNldCAqCisJCQkJYWxsb2NhdG9yLT5jX2ZhY3Rvcik7CisJfQorbG9vcF9jb250OgorCXJldHVybiAodm9pZCAqKWR3X2FkZHJfeGxhdGU7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9jb2QuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2NvZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyOTg5YWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9jb2QuYwpAQCAtMCwwICsxLDY1MiBAQAorLyoKKyAqIGNvZC5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgRFNQIGNvZGUgbWFuYWdlbWVudCBmb3IgdGhlIERTUC9CSU9TIEJyaWRnZQorICogZW52aXJvbm1lbnQuIEl0IGlzIG1vc3RseSBhIHRoaW4gd3JhcHBlci4KKyAqCisgKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBhbiBpbnRlcmZhY2UgZm9yIGxvYWRpbmcgYm90aCBzdGF0aWMgYW5kCisgKiBkeW5hbWljIGNvZGUgb2JqZWN0cyBvbnRvIERTUCBzeXN0ZW1zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSG9zdCBPUyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEU1AvQklPUyBCcmlkZ2UgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcmFjZSAmIERlYnVnICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiYy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1MgQWRhcHRhdGlvbiBMYXllciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9sZHIuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBsYXRmb3JtIE1hbmFnZXIgKi8KKy8qIEluY2x1ZGUgYXBwcm9wcmlhdGUgbG9hZGVyIGhlYWRlciBmaWxlICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RibGwuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY29kLmg+CisKKy8qCisgKiAgPT09PT09PT0gY29kX21hbmFnZXIgPT09PT09PT0KKyAqLworc3RydWN0IGNvZF9tYW5hZ2VyIHsKKwlzdHJ1Y3QgZGJsbF90YXJfb2JqICp0YXJnZXQ7CisJc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmJhc2VfbGliOworCWJvb2wgbG9hZGVkOwkJLyogQmFzZSBsaWJyYXJ5IGxvYWRlZD8gKi8KKwl1MzIgdWxfZW50cnk7CisJc3RydWN0IGxkcl9tb2R1bGUgKmRsbF9vYmo7CisJc3RydWN0IGRibGxfZnhucyBmeG5zOworCXN0cnVjdCBkYmxsX2F0dHJzIGF0dHJzOworCWNoYXIgc3pfemxfZmlsZVtDT0RfTUFYUEFUSExFTkdUSF07Cit9OworCisvKgorICogID09PT09PT09IGNvZF9saWJyYXJ5b2JqID09PT09PT09CisgKi8KK3N0cnVjdCBjb2RfbGlicmFyeW9iaiB7CisJc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmRibGxfbGliOworCXN0cnVjdCBjb2RfbWFuYWdlciAqY29kX21ncjsKK307CisKK3N0YXRpYyB1MzIgcmVmcyA9IDBMOworCitzdGF0aWMgc3RydWN0IGRibGxfZnhucyBsZHJfZnhucyA9IHsKKwkoZGJsbF9jbG9zZV9meG4pIGRibGxfY2xvc2UsCisJKGRibGxfY3JlYXRlX2Z4bikgZGJsbF9jcmVhdGUsCisJKGRibGxfZGVsZXRlX2Z4bikgZGJsbF9kZWxldGUsCisJKGRibGxfZXhpdF9meG4pIGRibGxfZXhpdCwKKwkoZGJsbF9nZXRfYXR0cnNfZnhuKSBkYmxsX2dldF9hdHRycywKKwkoZGJsbF9nZXRfYWRkcl9meG4pIGRibGxfZ2V0X2FkZHIsCisJKGRibGxfZ2V0X2NfYWRkcl9meG4pIGRibGxfZ2V0X2NfYWRkciwKKwkoZGJsbF9nZXRfc2VjdF9meG4pIGRibGxfZ2V0X3NlY3QsCisJKGRibGxfaW5pdF9meG4pIGRibGxfaW5pdCwKKwkoZGJsbF9sb2FkX2Z4bikgZGJsbF9sb2FkLAorCShkYmxsX2xvYWRfc2VjdF9meG4pIGRibGxfbG9hZF9zZWN0LAorCShkYmxsX29wZW5fZnhuKSBkYmxsX29wZW4sCisJKGRibGxfcmVhZF9zZWN0X2Z4bikgZGJsbF9yZWFkX3NlY3QsCisJKGRibGxfc2V0X2F0dHJzX2Z4bikgZGJsbF9zZXRfYXR0cnMsCisJKGRibGxfdW5sb2FkX2Z4bikgZGJsbF91bmxvYWQsCisJKGRibGxfdW5sb2FkX3NlY3RfZnhuKSBkYmxsX3VubG9hZF9zZWN0LAorfTsKKworc3RhdGljIGJvb2wgbm9fb3Aodm9pZCk7CisKKy8qCisgKiBGaWxlIG9wZXJhdGlvbnMgKG9yaWdpbmFsbHkgd2VyZSB1bmRlciBrZmlsZS5jKQorICovCitzdGF0aWMgczMyIGNvZF9mX2Nsb3NlKHN0cnVjdCBmaWxlICpmaWxwKQoreworCS8qIENoZWNrIGZvciB2YWxpZCBoYW5kbGUgKi8KKwlpZiAoIWZpbHApCisJCXJldHVybiAtRUZBVUxUOworCisJZmlscF9jbG9zZShmaWxwLCBOVUxMKTsKKworCS8qIHdlIGNhbid0IHVzZSAwIGhlcmUgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlICpjb2RfZl9vcGVuKGNvbnN0IGNoYXIgKnBzel9maWxlX25hbWUsIGNvbnN0IGNoYXIgKnN6X21vZGUpCit7CisJbW1fc2VnbWVudF90IGZzOworCXN0cnVjdCBmaWxlICpmaWxwOworCisJZnMgPSBnZXRfZnMoKTsKKwlzZXRfZnMoZ2V0X2RzKCkpOworCisJLyogaWdub3JlIGdpdmVuIG1vZGUgYW5kIG9wZW4gZmlsZSBhcyByZWFkLW9ubHkgKi8KKwlmaWxwID0gZmlscF9vcGVuKHBzel9maWxlX25hbWUsIE9fUkRPTkxZLCAwKTsKKworCWlmIChJU19FUlIoZmlscCkpCisJCWZpbHAgPSBOVUxMOworCisJc2V0X2ZzKGZzKTsKKworCXJldHVybiBmaWxwOworfQorCitzdGF0aWMgczMyIGNvZF9mX3JlYWQodm9pZCBfX3VzZXIgKnBidWZmZXIsIHMzMiBzaXplLCBzMzIgY291bnQsCisJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxwKQoreworCS8qIGNoZWNrIGZvciB2YWxpZCBmaWxlIGhhbmRsZSAqLworCWlmICghZmlscCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoKHNpemUgPiAwKSAmJiAoY291bnQgPiAwKSAmJiBwYnVmZmVyKSB7CisJCXUzMiBkd19ieXRlc19yZWFkOworCQltbV9zZWdtZW50X3QgZnM7CisKKwkJLyogcmVhZCBmcm9tIGZpbGUgKi8KKwkJZnMgPSBnZXRfZnMoKTsKKwkJc2V0X2ZzKGdldF9kcygpKTsKKwkJZHdfYnl0ZXNfcmVhZCA9IGZpbHAtPmZfb3AtPnJlYWQoZmlscCwgcGJ1ZmZlciwgc2l6ZSAqIGNvdW50LAorCQkJCQkJICYoZmlscC0+Zl9wb3MpKTsKKwkJc2V0X2ZzKGZzKTsKKworCQlpZiAoIWR3X2J5dGVzX3JlYWQpCisJCQlyZXR1cm4gLUVCQURGOworCisJCXJldHVybiBkd19ieXRlc19yZWFkIC8gc2l6ZTsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHMzMiBjb2RfZl9zZWVrKHN0cnVjdCBmaWxlICpmaWxwLCBzMzIgb2Zmc2V0LCBzMzIgb3JpZ2luKQoreworCWxvZmZfdCBkd19jdXJfcG9zOworCisJLyogY2hlY2sgZm9yIHZhbGlkIGZpbGUgaGFuZGxlICovCisJaWYgKCFmaWxwKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qIGJhc2VkIG9uIHRoZSBvcmlnaW4gZmxhZywgbW92ZSB0aGUgaW50ZXJuYWwgcG9pbnRlciAqLworCWR3X2N1cl9wb3MgPSBmaWxwLT5mX29wLT5sbHNlZWsoZmlscCwgb2Zmc2V0LCBvcmlnaW4pOworCisJaWYgKChzMzIpIGR3X2N1cl9wb3MgPCAwKQorCQlyZXR1cm4gLUVQRVJNOworCisJLyogd2UgY2FuJ3QgdXNlIDAgaGVyZSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgczMyIGNvZF9mX3RlbGwoc3RydWN0IGZpbGUgKmZpbHApCit7CisJbG9mZl90IGR3X2N1cl9wb3M7CisKKwlpZiAoIWZpbHApCisJCXJldHVybiAtRUZBVUxUOworCisJLyogR2V0IGN1cnJlbnQgcG9zaXRpb24gKi8KKwlkd19jdXJfcG9zID0gZmlscC0+Zl9vcC0+bGxzZWVrKGZpbHAsIDAsIFNFRUtfQ1VSKTsKKworCWlmICgoczMyKSBkd19jdXJfcG9zIDwgMCkKKwkJcmV0dXJuIC1FUEVSTTsKKworCXJldHVybiBkd19jdXJfcG9zOworfQorCisvKgorICogID09PT09PT09IGNvZF9jbG9zZSA9PT09PT09PQorICovCit2b2lkIGNvZF9jbG9zZShzdHJ1Y3QgY29kX2xpYnJhcnlvYmogKmxpYikKK3sKKwlzdHJ1Y3QgY29kX21hbmFnZXIgKmhtZ3I7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUobGliICE9IE5VTEwpOworCURCQ19SRVFVSVJFKGxpYi0+Y29kX21ncik7CisKKwlobWdyID0gbGliLT5jb2RfbWdyOworCWhtZ3ItPmZ4bnMuY2xvc2VfZnhuKGxpYi0+ZGJsbF9saWIpOworCisJa2ZyZWUobGliKTsKK30KKworLyoKKyAqICA9PT09PT09PSBjb2RfY3JlYXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ3JlYXRlIGFuIG9iamVjdCB0byBtYW5hZ2UgY29kZSBvbiBhIERTUCBzeXN0ZW0uCisgKiAgICAgIFRoaXMgb2JqZWN0IGNhbiBiZSB1c2VkIHRvIGxvYWQgYW4gaW5pdGlhbCBwcm9ncmFtIGltYWdlIHdpdGgKKyAqICAgICAgYXJndW1lbnRzIHRoYXQgY2FuIGxhdGVyIGJlIGV4cGFuZGVkIHdpdGgKKyAqICAgICAgZHluYW1pY2FsbHkgbG9hZGVkIG9iamVjdCBmaWxlcy4KKyAqCisgKi8KK2ludCBjb2RfY3JlYXRlKHN0cnVjdCBjb2RfbWFuYWdlciAqKm1nciwgY2hhciAqc3RyX3psX2ZpbGUsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBjb2RfYXR0cnMgKmF0dHJzKQoreworCXN0cnVjdCBjb2RfbWFuYWdlciAqbWdyX25ldzsKKwlzdHJ1Y3QgZGJsbF9hdHRycyB6bF9hdHRyczsKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShtZ3IgIT0gTlVMTCk7CisKKwkvKiBhc3N1bWUgZmFpbHVyZSAqLworCSptZ3IgPSBOVUxMOworCisJLyogd2UgZG9uJ3Qgc3VwcG9ydCBub24tZGVmYXVsdCBhdHRycyB5ZXQgKi8KKwlpZiAoYXR0cnMgIT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwltZ3JfbmV3ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNvZF9tYW5hZ2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG1ncl9uZXcgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBTZXQgdXAgbG9hZGVyIGZ1bmN0aW9ucyAqLworCW1ncl9uZXctPmZ4bnMgPSBsZHJfZnhuczsKKworCS8qIGluaXRpYWxpemUgdGhlIFpMIG1vZHVsZSAqLworCW1ncl9uZXctPmZ4bnMuaW5pdF9meG4oKTsKKworCXpsX2F0dHJzLmFsbG9jID0gKGRibGxfYWxsb2NfZnhuKSBub19vcDsKKwl6bF9hdHRycy5mcmVlID0gKGRibGxfZnJlZV9meG4pIG5vX29wOworCXpsX2F0dHJzLmZyZWFkID0gKGRibGxfcmVhZF9meG4pIGNvZF9mX3JlYWQ7CisJemxfYXR0cnMuZnNlZWsgPSAoZGJsbF9zZWVrX2Z4bikgY29kX2Zfc2VlazsKKwl6bF9hdHRycy5mdGVsbCA9IChkYmxsX3RlbGxfZnhuKSBjb2RfZl90ZWxsOworCXpsX2F0dHJzLmZjbG9zZSA9IChkYmxsX2ZfY2xvc2VfZnhuKSBjb2RfZl9jbG9zZTsKKwl6bF9hdHRycy5mb3BlbiA9IChkYmxsX2Zfb3Blbl9meG4pIGNvZF9mX29wZW47CisJemxfYXR0cnMuc3ltX2xvb2t1cCA9IE5VTEw7CisJemxfYXR0cnMuYmFzZV9pbWFnZSA9IHRydWU7CisJemxfYXR0cnMubG9nX3dyaXRlID0gTlVMTDsKKwl6bF9hdHRycy5sb2dfd3JpdGVfaGFuZGxlID0gTlVMTDsKKwl6bF9hdHRycy53cml0ZSA9IE5VTEw7CisJemxfYXR0cnMucm1tX2hhbmRsZSA9IE5VTEw7CisJemxfYXR0cnMuaW5wdXRfcGFyYW1zID0gTlVMTDsKKwl6bF9hdHRycy5zeW1faGFuZGxlID0gTlVMTDsKKwl6bF9hdHRycy5zeW1fYXJnID0gTlVMTDsKKworCW1ncl9uZXctPmF0dHJzID0gemxfYXR0cnM7CisKKwlzdGF0dXMgPSBtZ3JfbmV3LT5meG5zLmNyZWF0ZV9meG4oJm1ncl9uZXctPnRhcmdldCwgJnpsX2F0dHJzKTsKKworCWlmIChzdGF0dXMpIHsKKwkJY29kX2RlbGV0ZShtZ3JfbmV3KTsKKwkJcmV0dXJuIC1FU1BJUEU7CisJfQorCisJLyogcmV0dXJuIHRoZSBuZXcgbWFuYWdlciAqLworCSptZ3IgPSBtZ3JfbmV3OworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY29kX2RlbGV0ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERlbGV0ZSBhIGNvZGUgbWFuYWdlciBvYmplY3QuCisgKi8KK3ZvaWQgY29kX2RlbGV0ZShzdHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tZ3Jfb2JqKQoreworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShjb2RfbWdyX29iaik7CisKKwlpZiAoY29kX21ncl9vYmotPmJhc2VfbGliKSB7CisJCWlmIChjb2RfbWdyX29iai0+bG9hZGVkKQorCQkJY29kX21ncl9vYmotPmZ4bnMudW5sb2FkX2Z4bihjb2RfbWdyX29iai0+YmFzZV9saWIsCisJCQkJCQkJJmNvZF9tZ3Jfb2JqLT5hdHRycyk7CisKKwkJY29kX21ncl9vYmotPmZ4bnMuY2xvc2VfZnhuKGNvZF9tZ3Jfb2JqLT5iYXNlX2xpYik7CisJfQorCWlmIChjb2RfbWdyX29iai0+dGFyZ2V0KSB7CisJCWNvZF9tZ3Jfb2JqLT5meG5zLmRlbGV0ZV9meG4oY29kX21ncl9vYmotPnRhcmdldCk7CisJCWNvZF9tZ3Jfb2JqLT5meG5zLmV4aXRfZnhuKCk7CisJfQorCWtmcmVlKGNvZF9tZ3Jfb2JqKTsKK30KKworLyoKKyAqICA9PT09PT09PSBjb2RfZXhpdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERpc2NvbnRpbnVlIHVzYWdlIG9mIHRoZSBDT0QgbW9kdWxlLgorICoKKyAqLwordm9pZCBjb2RfZXhpdCh2b2lkKQoreworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKworCXJlZnMtLTsKKworCURCQ19FTlNVUkUocmVmcyA+PSAwKTsKK30KKworLyoKKyAqICA9PT09PT09PSBjb2RfZ2V0X2Jhc2VfbGliID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgR2V0IGhhbmRsZSB0byB0aGUgYmFzZSBpbWFnZSBEQkwgbGlicmFyeS4KKyAqLworaW50IGNvZF9nZXRfYmFzZV9saWIoc3RydWN0IGNvZF9tYW5hZ2VyICpjb2RfbWdyX29iaiwKKwkJCSAgICBzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqKnBsaWIpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoY29kX21ncl9vYmopOworCURCQ19SRVFVSVJFKHBsaWIgIT0gTlVMTCk7CisKKwkqcGxpYiA9IChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqKWNvZF9tZ3Jfb2JqLT5iYXNlX2xpYjsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY29kX2dldF9iYXNlX25hbWUgPT09PT09PT0KKyAqLworaW50IGNvZF9nZXRfYmFzZV9uYW1lKHN0cnVjdCBjb2RfbWFuYWdlciAqY29kX21ncl9vYmosIGNoYXIgKnN6X25hbWUsCisJCQkgICAgIHUzMiB1c2l6ZSkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShjb2RfbWdyX29iaik7CisJREJDX1JFUVVJUkUoc3pfbmFtZSAhPSBOVUxMKTsKKworCWlmICh1c2l6ZSA8PSBDT0RfTUFYUEFUSExFTkdUSCkKKwkJc3RybmNweShzel9uYW1lLCBjb2RfbWdyX29iai0+c3pfemxfZmlsZSwgdXNpemUpOworCWVsc2UKKwkJc3RhdHVzID0gLUVQRVJNOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBjb2RfZ2V0X2VudHJ5ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIGVudHJ5IHBvaW50IG9mIGEgbG9hZGVkIERTUCBwcm9ncmFtIGltYWdlCisgKgorICovCitpbnQgY29kX2dldF9lbnRyeShzdHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tZ3Jfb2JqLCB1MzIgKmVudHJ5X3B0KQoreworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShjb2RfbWdyX29iaik7CisJREJDX1JFUVVJUkUoZW50cnlfcHQgIT0gTlVMTCk7CisKKwkqZW50cnlfcHQgPSBjb2RfbWdyX29iai0+dWxfZW50cnk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICA9PT09PT09PSBjb2RfZ2V0X2xvYWRlciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEdldCBoYW5kbGUgdG8gdGhlIERCTEwgbG9hZGVyLgorICovCitpbnQgY29kX2dldF9sb2FkZXIoc3RydWN0IGNvZF9tYW5hZ2VyICpjb2RfbWdyX29iaiwKKwkJCSAgc3RydWN0IGRibGxfdGFyX29iaiAqKmxvYWRlcikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShjb2RfbWdyX29iaik7CisJREJDX1JFUVVJUkUobG9hZGVyICE9IE5VTEwpOworCisJKmxvYWRlciA9IChzdHJ1Y3QgZGJsbF90YXJfb2JqICopY29kX21ncl9vYmotPnRhcmdldDsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY29kX2dldF9zZWN0aW9uID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIHN0YXJ0aW5nIGFkZHJlc3MgYW5kIGxlbmd0aCBvZiBhIHNlY3Rpb24gaW4gdGhlIENPRkYgZmlsZQorICogICAgICBnaXZlbiB0aGUgc2VjdGlvbiBuYW1lLgorICovCitpbnQgY29kX2dldF9zZWN0aW9uKHN0cnVjdCBjb2RfbGlicmFyeW9iaiAqbGliLCBjaGFyICpzdHJfc2VjdCwKKwkJCSAgIHUzMiAqYWRkciwgdTMyICpsZW4pCit7CisJc3RydWN0IGNvZF9tYW5hZ2VyICpjb2RfbWdyX29iajsKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShsaWIgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUobGliLT5jb2RfbWdyKTsKKwlEQkNfUkVRVUlSRShzdHJfc2VjdCAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShhZGRyICE9IE5VTEwpOworCURCQ19SRVFVSVJFKGxlbiAhPSBOVUxMKTsKKworCSphZGRyID0gMDsKKwkqbGVuID0gMDsKKwlpZiAobGliICE9IE5VTEwpIHsKKwkJY29kX21ncl9vYmogPSBsaWItPmNvZF9tZ3I7CisJCXN0YXR1cyA9IGNvZF9tZ3Jfb2JqLT5meG5zLmdldF9zZWN0X2Z4bihsaWItPmRibGxfbGliLCBzdHJfc2VjdCwKKwkJCQkJCQlhZGRyLCBsZW4pOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FU1BJUEU7CisJfQorCisJREJDX0VOU1VSRSghc3RhdHVzIHx8ICgoKmFkZHIgPT0gMCkgJiYgKCpsZW4gPT0gMCkpKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY29kX2dldF9zeW1fdmFsdWUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgc3ltYm9sLiBUaGUgc3ltYm9sIGlzIGZpcnN0CisgKiAgICAgIHNlYXJjaGVkIGZvciBsaXRlcmFsbHkgYW5kIHRoZW4sIGlmIG5vdCBmb3VuZCwgc2VhcmNoZWQgZm9yIGFzIGEKKyAqICAgICAgQyBzeW1ib2wuCisgKgorICovCitpbnQgY29kX2dldF9zeW1fdmFsdWUoc3RydWN0IGNvZF9tYW5hZ2VyICpjb2RfbWdyX29iaiwgY2hhciAqc3RyX3N5bSwKKwkJCSAgICAgdTMyICpwdWxfdmFsdWUpCit7CisJc3RydWN0IGRibGxfc3ltX3ZhbCAqZGJsbF9zeW07CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoY29kX21ncl9vYmopOworCURCQ19SRVFVSVJFKHN0cl9zeW0gIT0gTlVMTCk7CisJREJDX1JFUVVJUkUocHVsX3ZhbHVlICE9IE5VTEwpOworCisJZGV2X2RiZyhicmlkZ2UsICIlczogY29kX21ncl9vYmo6ICVwIHN0cl9zeW06ICVzIHB1bF92YWx1ZTogJXBcbiIsCisJCV9fZnVuY19fLCBjb2RfbWdyX29iaiwgc3RyX3N5bSwgcHVsX3ZhbHVlKTsKKwlpZiAoY29kX21ncl9vYmotPmJhc2VfbGliKSB7CisJCWlmICghY29kX21ncl9vYmotPmZ4bnMuCisJCSAgICBnZXRfYWRkcl9meG4oY29kX21ncl9vYmotPmJhc2VfbGliLCBzdHJfc3ltLCAmZGJsbF9zeW0pKSB7CisJCQlpZiAoIWNvZF9tZ3Jfb2JqLT5meG5zLgorCQkJICAgIGdldF9jX2FkZHJfZnhuKGNvZF9tZ3Jfb2JqLT5iYXNlX2xpYiwgc3RyX3N5bSwKKwkJCQkJCSZkYmxsX3N5bSkpCisJCQkJcmV0dXJuIC1FU1BJUEU7CisJCX0KKwl9IGVsc2UgeworCQlyZXR1cm4gLUVTUElQRTsKKwl9CisKKwkqcHVsX3ZhbHVlID0gZGJsbF9zeW0tPnZhbHVlOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY29kX2luaXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplIHRoZSBDT0QgbW9kdWxlJ3MgcHJpdmF0ZSBzdGF0ZS4KKyAqCisgKi8KK2Jvb2wgY29kX2luaXQodm9pZCkKK3sKKwlib29sIHJldCA9IHRydWU7CisKKwlEQkNfUkVRVUlSRShyZWZzID49IDApOworCisJaWYgKHJldCkKKwkJcmVmcysrOworCisJREJDX0VOU1VSRSgocmV0ICYmIHJlZnMgPiAwKSB8fCAoIXJldCAmJiByZWZzID49IDApKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogID09PT09PT09IGNvZF9sb2FkX2Jhc2UgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBMb2FkIHRoZSBpbml0aWFsIHByb2dyYW0gaW1hZ2UsIG9wdGlvbmFsbHkgd2l0aCBjb21tYW5kLWxpbmUgYXJndW1lbnRzLAorICogICAgICBvbiB0aGUgRFNQIHN5c3RlbSBtYW5hZ2VkIGJ5IHRoZSBzdXBwbGllZCBoYW5kbGUuIFRoZSBwcm9ncmFtIHRvIGJlCisgKiAgICAgIGxvYWRlZCBtdXN0IGJlIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBhcmdzIGFycmF5IGFuZCBtdXN0IGJlIGEgZnVsbHkKKyAqICAgICAgcXVhbGlmaWVkIHBhdGhuYW1lLgorICogIERldGFpbHM6CisgKiAgICAgIGlmIG51bV9hcmdjIGRvZXNuJ3QgbWF0Y2ggdGhlIG51bWJlciBvZiBhcmd1bWVudHMgaW4gdGhlIGFyZ3MgYXJyYXksIHRoZQorICogICAgICBhcmdzIGFycmF5IGlzIHNlYXJjaGVkIGZvciBhIE5VTEwgdGVybWluYXRpbmcgZW50cnksIGFuZCBhcmdjIGlzCisgKiAgICAgIHJlY2FsY3VsYXRlZCB0byByZWZsZWN0IHRoaXMuICBJbiB0aGlzIHdheSwgd2UgY2FuIHN1cHBvcnQgTlVMTAorICogICAgICB0ZXJtaW5hdGluZyBhcmdzIGFycmF5cywgaWYgbnVtX2FyZ2MgaXMgdmVyeSBsYXJnZS4KKyAqLworaW50IGNvZF9sb2FkX2Jhc2Uoc3RydWN0IGNvZF9tYW5hZ2VyICpjb2RfbWdyX29iaiwgdTMyIG51bV9hcmdjLCBjaGFyICphcmdzW10sCisJCQkgY29kX3dyaXRlZnhuIHBmbl93cml0ZSwgdm9pZCAqYXJiLCBjaGFyICplbnZwW10pCit7CisJZGJsbF9mbGFncyBmbGFnczsKKwlzdHJ1Y3QgZGJsbF9hdHRycyBzYXZlX2F0dHJzOworCXN0cnVjdCBkYmxsX2F0dHJzIG5ld19hdHRyczsKKwlpbnQgc3RhdHVzOworCXUzMiBpOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGNvZF9tZ3Jfb2JqKTsKKwlEQkNfUkVRVUlSRShudW1fYXJnYyA+IDApOworCURCQ19SRVFVSVJFKGFyZ3MgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoYXJnc1swXSAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShwZm5fd3JpdGUgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoY29kX21ncl9vYmotPmJhc2VfbGliICE9IE5VTEwpOworCisJLyoKKwkgKiAgTWFrZSBzdXJlIGV2ZXJ5IGFyZ3ZbXSBzdGF0ZWQgaW4gYXJnYyBoYXMgYSB2YWx1ZSwgb3IgY2hhbmdlIGFyZ2MgdG8KKwkgKiAgcmVmbGVjdCB0cnVlIG51bWJlciBpbiBOVUxMIHRlcm1pbmF0ZWQgYXJndiBhcnJheS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2FyZ2M7IGkrKykgeworCQlpZiAoYXJnc1tpXSA9PSBOVUxMKSB7CisJCQludW1fYXJnYyA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIHNldCB0aGUgd3JpdGUgZnVuY3Rpb24gZm9yIHRoaXMgb3BlcmF0aW9uICovCisJY29kX21ncl9vYmotPmZ4bnMuZ2V0X2F0dHJzX2Z4bihjb2RfbWdyX29iai0+dGFyZ2V0LCAmc2F2ZV9hdHRycyk7CisKKwluZXdfYXR0cnMgPSBzYXZlX2F0dHJzOworCW5ld19hdHRycy53cml0ZSA9IChkYmxsX3dyaXRlX2Z4bikgcGZuX3dyaXRlOworCW5ld19hdHRycy5pbnB1dF9wYXJhbXMgPSBhcmI7CisJbmV3X2F0dHJzLmFsbG9jID0gKGRibGxfYWxsb2NfZnhuKSBub19vcDsKKwluZXdfYXR0cnMuZnJlZSA9IChkYmxsX2ZyZWVfZnhuKSBub19vcDsKKwluZXdfYXR0cnMubG9nX3dyaXRlID0gTlVMTDsKKwluZXdfYXR0cnMubG9nX3dyaXRlX2hhbmRsZSA9IE5VTEw7CisKKwkvKiBMb2FkIHRoZSBpbWFnZSAqLworCWZsYWdzID0gREJMTF9DT0RFIHwgREJMTF9EQVRBIHwgREJMTF9TWU1COworCXN0YXR1cyA9IGNvZF9tZ3Jfb2JqLT5meG5zLmxvYWRfZnhuKGNvZF9tZ3Jfb2JqLT5iYXNlX2xpYiwgZmxhZ3MsCisJCQkJCSAgICAmbmV3X2F0dHJzLAorCQkJCQkgICAgJmNvZF9tZ3Jfb2JqLT51bF9lbnRyeSk7CisJaWYgKHN0YXR1cykKKwkJY29kX21ncl9vYmotPmZ4bnMuY2xvc2VfZnhuKGNvZF9tZ3Jfb2JqLT5iYXNlX2xpYik7CisKKwlpZiAoIXN0YXR1cykKKwkJY29kX21ncl9vYmotPmxvYWRlZCA9IHRydWU7CisJZWxzZQorCQljb2RfbWdyX29iai0+YmFzZV9saWIgPSBOVUxMOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBjb2Rfb3BlbiA9PT09PT09PQorICogICAgICBPcGVuIGxpYnJhcnkgZm9yIHJlYWRpbmcgc2VjdGlvbnMuCisgKi8KK2ludCBjb2Rfb3BlbihzdHJ1Y3QgY29kX21hbmFnZXIgKmhtZ3IsIGNoYXIgKnN6X2NvZmZfcGF0aCwKKwkJICAgIHUzMiBmbGFncywgc3RydWN0IGNvZF9saWJyYXJ5b2JqICoqbGliX29iaikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgY29kX2xpYnJhcnlvYmogKmxpYiA9IE5VTEw7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoaG1ncik7CisJREJDX1JFUVVJUkUoc3pfY29mZl9wYXRoICE9IE5VTEwpOworCURCQ19SRVFVSVJFKGZsYWdzID09IENPRF9OT0xPQUQgfHwgZmxhZ3MgPT0gQ09EX1NZTUIpOworCURCQ19SRVFVSVJFKGxpYl9vYmogIT0gTlVMTCk7CisKKwkqbGliX29iaiA9IE5VTEw7CisKKwlsaWIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY29kX2xpYnJhcnlvYmopLCBHRlBfS0VSTkVMKTsKKwlpZiAobGliID09IE5VTEwpCisJCXN0YXR1cyA9IC1FTk9NRU07CisKKwlpZiAoIXN0YXR1cykgeworCQlsaWItPmNvZF9tZ3IgPSBobWdyOworCQlzdGF0dXMgPSBobWdyLT5meG5zLm9wZW5fZnhuKGhtZ3ItPnRhcmdldCwgc3pfY29mZl9wYXRoLCBmbGFncywKKwkJCQkJICAgICAmbGliLT5kYmxsX2xpYik7CisJCWlmICghc3RhdHVzKQorCQkJKmxpYl9vYmogPSBsaWI7CisJfQorCisJaWYgKHN0YXR1cykKKwkJcHJfZXJyKCIlczogZXJyb3Igc3RhdHVzIDB4JXgsIHN6X2NvZmZfcGF0aDogJXMgZmxhZ3M6IDB4JXhcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgc3RhdHVzLCBzel9jb2ZmX3BhdGgsIGZsYWdzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGNvZF9vcGVuX2Jhc2UgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBPcGVuIGJhc2UgaW1hZ2UgZm9yIHJlYWRpbmcgc2VjdGlvbnMuCisgKi8KK2ludCBjb2Rfb3Blbl9iYXNlKHN0cnVjdCBjb2RfbWFuYWdlciAqaG1nciwgY2hhciAqc3pfY29mZl9wYXRoLAorCQkJIGRibGxfZmxhZ3MgZmxhZ3MpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYjsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShobWdyKTsKKwlEQkNfUkVRVUlSRShzel9jb2ZmX3BhdGggIT0gTlVMTCk7CisKKwkvKiBpZiB3ZSBwcmV2aW91c2x5IG9wZW5lZCBhIGJhc2UgaW1hZ2UsIGNsb3NlIGl0IG5vdyAqLworCWlmIChobWdyLT5iYXNlX2xpYikgeworCQlpZiAoaG1nci0+bG9hZGVkKSB7CisJCQlobWdyLT5meG5zLnVubG9hZF9meG4oaG1nci0+YmFzZV9saWIsICZobWdyLT5hdHRycyk7CisJCQlobWdyLT5sb2FkZWQgPSBmYWxzZTsKKwkJfQorCQlobWdyLT5meG5zLmNsb3NlX2Z4bihobWdyLT5iYXNlX2xpYik7CisJCWhtZ3ItPmJhc2VfbGliID0gTlVMTDsKKwl9CisJc3RhdHVzID0gaG1nci0+Znhucy5vcGVuX2Z4bihobWdyLT50YXJnZXQsIHN6X2NvZmZfcGF0aCwgZmxhZ3MsICZsaWIpOworCWlmICghc3RhdHVzKSB7CisJCS8qIGhhbmcgb250byB0aGUgbGlicmFyeSBmb3Igc3Vic2VxdWVudCBzeW0gdGFibGUgdXNhZ2UgKi8KKwkJaG1nci0+YmFzZV9saWIgPSBsaWI7CisJCXN0cm5jcHkoaG1nci0+c3pfemxfZmlsZSwgc3pfY29mZl9wYXRoLCBDT0RfTUFYUEFUSExFTkdUSCAtIDEpOworCQlobWdyLT5zel96bF9maWxlW0NPRF9NQVhQQVRITEVOR1RIIC0gMV0gPSAnXDAnOworCX0KKworCWlmIChzdGF0dXMpCisJCXByX2VycigiJXM6IGVycm9yIHN0YXR1cyAweCV4IHN6X2NvZmZfcGF0aDogJXNcbiIsIF9fZnVuY19fLAorCQkgICAgICAgc3RhdHVzLCBzel9jb2ZmX3BhdGgpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY29kX3JlYWRfc2VjdGlvbiA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIHRoZSBjb250ZW50IG9mIGEgY29kZSBzZWN0aW9uIGdpdmVuIHRoZSBzZWN0aW9uIG5hbWUuCisgKi8KK2ludCBjb2RfcmVhZF9zZWN0aW9uKHN0cnVjdCBjb2RfbGlicmFyeW9iaiAqbGliLCBjaGFyICpzdHJfc2VjdCwKKwkJCSAgICBjaGFyICpzdHJfY29udGVudCwgdTMyIGNvbnRlbnRfc2l6ZSkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShsaWIgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUobGliLT5jb2RfbWdyKTsKKwlEQkNfUkVRVUlSRShzdHJfc2VjdCAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShzdHJfY29udGVudCAhPSBOVUxMKTsKKworCWlmIChsaWIgIT0gTlVMTCkKKwkJc3RhdHVzID0KKwkJICAgIGxpYi0+Y29kX21nci0+Znhucy5yZWFkX3NlY3RfZnhuKGxpYi0+ZGJsbF9saWIsIHN0cl9zZWN0LAorCQkJCQkJICAgICBzdHJfY29udGVudCwgY29udGVudF9zaXplKTsKKwllbHNlCisJCXN0YXR1cyA9IC1FU1BJUEU7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IG5vX29wID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgTm8gT3BlcmF0aW9uLgorICoKKyAqLworc3RhdGljIGJvb2wgbm9fb3Aodm9pZCkKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2RibGwuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2RibGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzQwNjM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvZGJsbC5jCkBAIC0wLDAgKzEsMTU4NSBAQAorLyoKKyAqIGRibGwuYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSG9zdCBPUyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEU1AvQklPUyBCcmlkZ2UgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcmFjZSAmIERlYnVnICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiYy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9naC5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1MgQWRhcHRhdGlvbiBMYXllciAqLworCisvKiBEeW5hbWljIGxvYWRlciBsaWJyYXJ5IGludGVyZmFjZSAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9keW5hbWljX2xvYWRlci5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9nZXRzZWN0aW9uLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlzICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RibGwuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvcm1tLmg+CisKKy8qIE51bWJlciBvZiBidWNrZXRzIGZvciBzeW1ib2wgaGFzaCB0YWJsZSAqLworI2RlZmluZSBNQVhCVUNLRVRTIDIxMQorCisvKiBNYXggYnVmZmVyIGxlbmd0aCAqLworI2RlZmluZSBNQVhFWFBSIDEyOAorCisjZGVmaW5lIERPRkZfQUxJR04oeCkgKCgoeCkgKyAzKSAmIH4zVUwpCisKKy8qCisgKiAgPT09PT09PT0gc3RydWN0IGRibGxfdGFyX29iaiogPT09PT09PT0KKyAqICBBIHRhcmdldCBtYXkgaGF2ZSBvbmUgb3IgbW9yZSBsaWJyYXJpZXMgb2Ygc3ltYm9scy9jb2RlL2RhdGEgbG9hZGVkCisgKiAgb250byBpdCwgd2hlcmUgYSBsaWJyYXJ5IGlzIHNpbXBseSB0aGUgc3ltYm9scy9jb2RlL2RhdGEgY29udGFpbmVkCisgKiAgaW4gYSBET0ZGIGZpbGUuCisgKi8KKy8qCisgKiAgPT09PT09PT0gZGJsbF90YXJfb2JqID09PT09PT09CisgKi8KK3N0cnVjdCBkYmxsX3Rhcl9vYmogeworCXN0cnVjdCBkYmxsX2F0dHJzIGF0dHJzOworCXN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpoZWFkOwkvKiBMaXN0IG9mIGFsbCBvcGVuZWQgbGlicmFyaWVzICovCit9OworCisvKgorICogIFRoZSBmb2xsb3dpbmcgNCB0eXBlZGVmcyBhcmUgInN1cGVyIGNsYXNzZXMiIG9mIHRoZSBkeW5hbWljIGxvYWRlcgorICogIGxpYnJhcnkgdHlwZXMgdXNlZCBpbiBkeW5hbWljIGxvYWRlciBmdW5jdGlvbnMgKGR5bmFtaWNfbG9hZGVyLmgpLgorICovCisvKgorICogID09PT09PT09IGRibGxfc3RyZWFtID09PT09PT09CisgKiAgQ29udGFpbnMgZHluYW1pY19sb2FkZXJfc3RyZWFtCisgKi8KK3N0cnVjdCBkYmxsX3N0cmVhbSB7CisJc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N0cmVhbSBkbF9zdHJlYW07CisJc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYjsKK307CisKKy8qCisgKiAgPT09PT09PT0gbGRyX3N5bWJvbCA9PT09PT09PQorICovCitzdHJ1Y3QgbGRyX3N5bWJvbCB7CisJc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSBkbF9zeW1ib2w7CisJc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYjsKK307CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF9hbGxvYyA9PT09PT09PQorICovCitzdHJ1Y3QgZGJsbF9hbGxvYyB7CisJc3RydWN0IGR5bmFtaWNfbG9hZGVyX2FsbG9jYXRlIGRsX2FsbG9jOworCXN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWI7Cit9OworCisvKgorICogID09PT09PT09IGRibGxfaW5pdF9vYmogPT09PT09PT0KKyAqLworc3RydWN0IGRibGxfaW5pdF9vYmogeworCXN0cnVjdCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplIGRsX2luaXQ7CisJc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYjsKK307CisKKy8qCisgKiAgPT09PT09PT0gREJMTF9MaWJyYXJ5ID09PT09PT09CisgKiAgQSBsaWJyYXJ5IGhhbmRsZSBpcyByZXR1cm5lZCBieSBEQkxMX09wZW4oKSBhbmQgaXMgcGFzc2VkIHRvIGRibGxfbG9hZCgpCisgKiAgdG8gbG9hZCBzeW1ib2xzL2NvZGUvZGF0YSwgYW5kIHRvIGRibGxfdW5sb2FkKCksIHRvIHJlbW92ZSB0aGUKKyAqICBzeW1ib2xzL2NvZGUvZGF0YSBsb2FkZWQgYnkgZGJsbF9sb2FkKCkuCisgKi8KKworLyoKKyAqICA9PT09PT09PSBkYmxsX2xpYnJhcnlfb2JqID09PT09PT09CisgKi8KK3N0cnVjdCBkYmxsX2xpYnJhcnlfb2JqIHsKKwlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbmV4dDsJLyogTmV4dCBsaWJyYXJ5IGluIHRhcmdldCdzIGxpc3QgKi8KKwlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqcHJldjsJLyogUHJldmlvdXMgaW4gdGhlIGxpc3QgKi8KKwlzdHJ1Y3QgZGJsbF90YXJfb2JqICp0YXJnZXRfb2JqOwkvKiB0YXJnZXQgZm9yIHRoaXMgbGlicmFyeSAqLworCisJLyogT2JqZWN0cyBuZWVkZWQgYnkgZHluYW1pYyBsb2FkZXIgKi8KKwlzdHJ1Y3QgZGJsbF9zdHJlYW0gc3RyZWFtOworCXN0cnVjdCBsZHJfc3ltYm9sIHN5bWJvbDsKKwlzdHJ1Y3QgZGJsbF9hbGxvYyBhbGxvY2F0ZTsKKwlzdHJ1Y3QgZGJsbF9pbml0X29iaiBpbml0OworCXZvaWQgKmRsb2FkX21vZF9vYmo7CisKKwljaGFyICpmaWxlX25hbWU7CS8qIENPRkYgZmlsZSBuYW1lICovCisJdm9pZCAqZnA7CQkvKiBPcGFxdWUgZmlsZSBoYW5kbGUgKi8KKwl1MzIgZW50cnk7CQkvKiBFbnRyeSBwb2ludCAqLworCXZvaWQgKmRlc2M7CS8qIGRlc2Mgb2YgRE9GRiBmaWxlIGxvYWRlZCAqLworCXUzMiBvcGVuX3JlZjsJCS8qIE51bWJlciBvZiB0aW1lcyBvcGVuZWQgKi8KKwl1MzIgbG9hZF9yZWY7CQkvKiBOdW1iZXIgb2YgdGltZXMgbG9hZGVkICovCisJc3RydWN0IGdoX3RfaGFzaF90YWIgKnN5bV90YWI7CS8qIEhhc2ggdGFibGUgb2Ygc3ltYm9scyAqLworCXUzMiB1bF9wb3M7Cit9OworCisvKgorICogID09PT09PT09IGRibGxfc3ltYm9sID09PT09PT09CisgKi8KK3N0cnVjdCBkYmxsX3N5bWJvbCB7CisJc3RydWN0IGRibGxfc3ltX3ZhbCB2YWx1ZTsKKwljaGFyICpuYW1lOworfTsKKworc3RhdGljIHZvaWQgZG9mX2Nsb3NlKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICp6bF9saWIpOworc3RhdGljIGludCBkb2Zfb3BlbihzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqemxfbGliKTsKK3N0YXRpYyBzMzIgbm9fb3Aoc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemUgKnRoaXNwdHIsIHZvaWQgKmJ1ZnIsCisJCSBsZHJfYWRkciBsb2NuLCBzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqaW5mbywKKwkJIHVuc2lnbmVkIGJ5dHNpemUpOworCisvKgorICogIEZ1bmN0aW9ucyBjYWxsZWQgYnkgZHluYW1pYyBsb2FkZXIKKyAqCisgKi8KKy8qIGR5bmFtaWNfbG9hZGVyX3N0cmVhbSAqLworc3RhdGljIGludCBkYmxsX3JlYWRfYnVmZmVyKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zdHJlYW0gKnRoaXMsIHZvaWQgKmJ1ZmZlciwKKwkJCSAgICB1bnNpZ25lZCBidWZzaXplKTsKK3N0YXRpYyBpbnQgZGJsbF9zZXRfZmlsZV9wb3NuKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zdHJlYW0gKnRoaXMsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgcG9zKTsKKy8qIGR5bmFtaWNfbG9hZGVyX3N5bSAqLworc3RhdGljIHN0cnVjdCBkeW5sb2FkX3N5bWJvbCAqZGJsbF9maW5kX3N5bWJvbChzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3ltICp0aGlzLAorCQkJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSk7CitzdGF0aWMgc3RydWN0IGR5bmxvYWRfc3ltYm9sICpkYmxsX2FkZF90b19zeW1ib2xfdGFibGUoc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bQorCQkJCQkJICAgICAgICp0aGlzLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkJICAgICAgIHVuc2lnbmVkIG1vZHVsZV9pZCk7CitzdGF0aWMgc3RydWN0IGR5bmxvYWRfc3ltYm9sICpmaW5kX2luX3N5bWJvbF90YWJsZShzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3ltCisJCQkJCQkgICAqdGhpcywgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJCSAgIHVuc2lnbmVkIG1vZHVsZWlkKTsKK3N0YXRpYyB2b2lkIGRibGxfcHVyZ2Vfc3ltYm9sX3RhYmxlKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0gKnRoaXMsCisJCQkJICAgIHVuc2lnbmVkIG1vZHVsZV9pZCk7CitzdGF0aWMgdm9pZCAqYWxsb2NhdGUoc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAqdGhpcywgdW5zaWduZWQgbWVtc2l6ZSk7CitzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0gKnRoaXMsIHZvaWQgKm1lbV9wdHIpOworc3RhdGljIHZvaWQgZGJsbF9lcnJfcmVwb3J0KHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0gKnRoaXMsIGNvbnN0IGNoYXIgKmVycnN0ciwKKwkJCSAgICB2YV9saXN0IGFyZ3MpOworLyogZHluYW1pY19sb2FkZXJfYWxsb2NhdGUgKi8KK3N0YXRpYyBpbnQgZGJsbF9ybW1fYWxsb2Moc3RydWN0IGR5bmFtaWNfbG9hZGVyX2FsbG9jYXRlICp0aGlzLAorCQkJICBzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqaW5mbywgdW5zaWduZWQgYWxpZ24pOworc3RhdGljIHZvaWQgcm1tX2RlYWxsb2Moc3RydWN0IGR5bmFtaWNfbG9hZGVyX2FsbG9jYXRlICp0aGlzLAorCQkJc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKmluZm8pOworCisvKiBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICovCitzdGF0aWMgaW50IGNvbm5lY3Qoc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemUgKnRoaXMpOworc3RhdGljIGludCByZWFkX21lbShzdHJ1Y3QgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqdGhpcywgdm9pZCAqYnVmLAorCQkgICAgbGRyX2FkZHIgYWRkciwgc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKmluZm8sCisJCSAgICB1bnNpZ25lZCBieXRlcyk7CitzdGF0aWMgaW50IHdyaXRlX21lbShzdHJ1Y3QgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqdGhpcywgdm9pZCAqYnVmLAorCQkgICAgIGxkcl9hZGRyIGFkZHIsIHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICppbmZvLAorCQkgICAgIHVuc2lnbmVkIG5ieXRlcyk7CitzdGF0aWMgaW50IGZpbGxfbWVtKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICp0aGlzLCBsZHJfYWRkciBhZGRyLAorCQkgICAgc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKmluZm8sIHVuc2lnbmVkIGJ5dGVzLAorCQkgICAgdW5zaWduZWQgdmFsKTsKK3N0YXRpYyBpbnQgZXhlY3V0ZShzdHJ1Y3QgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqdGhpcywgbGRyX2FkZHIgc3RhcnQpOworc3RhdGljIHZvaWQgcmVsZWFzZShzdHJ1Y3QgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqdGhpcyk7CisKKy8qIHN5bWJvbCB0YWJsZSBoYXNoIGZ1bmN0aW9ucyAqLworc3RhdGljIHUxNiBuYW1lX2hhc2godm9pZCAqa2V5LCB1MTYgbWF4X2J1Y2tldCk7CitzdGF0aWMgYm9vbCBuYW1lX21hdGNoKHZvaWQgKmtleSwgdm9pZCAqc3ApOworc3RhdGljIHZvaWQgc3ltX2RlbGV0ZSh2b2lkICp2YWx1ZSk7CisKK3N0YXRpYyB1MzIgcmVmczsJCS8qIG1vZHVsZSByZWZlcmVuY2UgY291bnQgKi8KKworLyogU3ltYm9sIFJlZGVmaW5pdGlvbiAqLworc3RhdGljIGludCByZWRlZmluZWRfc3ltYm9sOworc3RhdGljIGludCBnYmxfc2VhcmNoID0gMTsKKworLyoKKyAqICA9PT09PT09PSBkYmxsX2Nsb3NlID09PT09PT09CisgKi8KK3ZvaWQgZGJsbF9jbG9zZShzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqemxfbGliKQoreworCXN0cnVjdCBkYmxsX3Rhcl9vYmogKnpsX3RhcmdldDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRSh6bF9saWIpOworCURCQ19SRVFVSVJFKHpsX2xpYi0+b3Blbl9yZWYgPiAwKTsKKwl6bF90YXJnZXQgPSB6bF9saWItPnRhcmdldF9vYmo7CisJemxfbGliLT5vcGVuX3JlZi0tOworCWlmICh6bF9saWItPm9wZW5fcmVmID09IDApIHsKKwkJLyogUmVtb3ZlIGxpYnJhcnkgZnJvbSBsaXN0ICovCisJCWlmICh6bF90YXJnZXQtPmhlYWQgPT0gemxfbGliKQorCQkJemxfdGFyZ2V0LT5oZWFkID0gemxfbGliLT5uZXh0OworCisJCWlmICh6bF9saWItPnByZXYpCisJCQkoemxfbGliLT5wcmV2KS0+bmV4dCA9IHpsX2xpYi0+bmV4dDsKKworCQlpZiAoemxfbGliLT5uZXh0KQorCQkJKHpsX2xpYi0+bmV4dCktPnByZXYgPSB6bF9saWItPnByZXY7CisKKwkJLyogRnJlZSBET0YgcmVzb3VyY2VzICovCisJCWRvZl9jbG9zZSh6bF9saWIpOworCQlrZnJlZSh6bF9saWItPmZpbGVfbmFtZSk7CisKKwkJLyogcmVtb3ZlIHN5bWJvbHMgZnJvbSBzeW1ib2wgdGFibGUgKi8KKwkJaWYgKHpsX2xpYi0+c3ltX3RhYikKKwkJCWdoX2RlbGV0ZSh6bF9saWItPnN5bV90YWIpOworCisJCS8qIHJlbW92ZSB0aGUgbGlicmFyeSBvYmplY3QgaXRzZWxmICovCisJCWtmcmVlKHpsX2xpYik7CisJCXpsX2xpYiA9IE5VTEw7CisJfQorfQorCisvKgorICogID09PT09PT09IGRibGxfY3JlYXRlID09PT09PT09CisgKi8KK2ludCBkYmxsX2NyZWF0ZShzdHJ1Y3QgZGJsbF90YXJfb2JqICoqdGFyZ2V0X29iaiwKKwkJICAgICAgIHN0cnVjdCBkYmxsX2F0dHJzICpwYXR0cnMpCit7CisJc3RydWN0IGRibGxfdGFyX29iaiAqcHpsX3RhcmdldDsKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShwYXR0cnMgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUodGFyZ2V0X29iaiAhPSBOVUxMKTsKKworCS8qIEFsbG9jYXRlIERCTCB0YXJnZXQgb2JqZWN0ICovCisJcHpsX3RhcmdldCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYmxsX3Rhcl9vYmopLCBHRlBfS0VSTkVMKTsKKwlpZiAodGFyZ2V0X29iaiAhPSBOVUxMKSB7CisJCWlmIChwemxfdGFyZ2V0ID09IE5VTEwpIHsKKwkJCSp0YXJnZXRfb2JqID0gTlVMTDsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCX0gZWxzZSB7CisJCQlwemxfdGFyZ2V0LT5hdHRycyA9ICpwYXR0cnM7CisJCQkqdGFyZ2V0X29iaiA9IChzdHJ1Y3QgZGJsbF90YXJfb2JqICopcHpsX3RhcmdldDsKKwkJfQorCQlEQkNfRU5TVVJFKCghc3RhdHVzICYmICp0YXJnZXRfb2JqKSB8fAorCQkJCShzdGF0dXMgJiYgKnRhcmdldF9vYmogPT0gTlVMTCkpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF9kZWxldGUgPT09PT09PT0KKyAqLwordm9pZCBkYmxsX2RlbGV0ZShzdHJ1Y3QgZGJsbF90YXJfb2JqICp0YXJnZXQpCit7CisJc3RydWN0IGRibGxfdGFyX29iaiAqemxfdGFyZ2V0ID0gKHN0cnVjdCBkYmxsX3Rhcl9vYmogKil0YXJnZXQ7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoemxfdGFyZ2V0KTsKKworCWlmICh6bF90YXJnZXQgIT0gTlVMTCkKKwkJa2ZyZWUoemxfdGFyZ2V0KTsKKworfQorCisvKgorICogID09PT09PT09IGRibGxfZXhpdCA9PT09PT09PQorICogIERpc2NvbnRpbnVlIHVzYWdlIG9mIERCTCBtb2R1bGUuCisgKi8KK3ZvaWQgZGJsbF9leGl0KHZvaWQpCit7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJcmVmcy0tOworCisJaWYgKHJlZnMgPT0gMCkKKwkJZ2hfZXhpdCgpOworCisJREJDX0VOU1VSRShyZWZzID49IDApOworfQorCisvKgorICogID09PT09PT09IGRibGxfZ2V0X2FkZHIgPT09PT09PT0KKyAqICBHZXQgYWRkcmVzcyBvZiBuYW1lIGluIHRoZSBzcGVjaWZpZWQgbGlicmFyeS4KKyAqLworYm9vbCBkYmxsX2dldF9hZGRyKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICp6bF9saWIsIGNoYXIgKm5hbWUsCisJCSAgIHN0cnVjdCBkYmxsX3N5bV92YWwgKipzeW1fdmFsKQoreworCXN0cnVjdCBkYmxsX3N5bWJvbCAqc3ltOworCWJvb2wgc3RhdHVzID0gZmFsc2U7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoemxfbGliKTsKKwlEQkNfUkVRVUlSRShuYW1lICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHN5bV92YWwgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoemxfbGliLT5zeW1fdGFiICE9IE5VTEwpOworCisJc3ltID0gKHN0cnVjdCBkYmxsX3N5bWJvbCAqKWdoX2ZpbmQoemxfbGliLT5zeW1fdGFiLCBuYW1lKTsKKwlpZiAoc3ltICE9IE5VTEwpIHsKKwkJKnN5bV92YWwgPSAmc3ltLT52YWx1ZTsKKwkJc3RhdHVzID0gdHJ1ZTsKKwl9CisKKwlkZXZfZGJnKGJyaWRnZSwgIiVzOiBsaWI6ICVwIG5hbWU6ICVzIHBhZGRyOiAlcCwgc3RhdHVzIDB4JXhcbiIsCisJCV9fZnVuY19fLCB6bF9saWIsIG5hbWUsIHN5bV92YWwsIHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkYmxsX2dldF9hdHRycyA9PT09PT09PQorICogIFJldHJpZXZlIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSB0YXJnZXQuCisgKi8KK3ZvaWQgZGJsbF9nZXRfYXR0cnMoc3RydWN0IGRibGxfdGFyX29iaiAqdGFyZ2V0LCBzdHJ1Y3QgZGJsbF9hdHRycyAqcGF0dHJzKQoreworCXN0cnVjdCBkYmxsX3Rhcl9vYmogKnpsX3RhcmdldCA9IChzdHJ1Y3QgZGJsbF90YXJfb2JqICopdGFyZ2V0OworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKHpsX3RhcmdldCk7CisJREJDX1JFUVVJUkUocGF0dHJzICE9IE5VTEwpOworCisJaWYgKChwYXR0cnMgIT0gTlVMTCkgJiYgKHpsX3RhcmdldCAhPSBOVUxMKSkKKwkJKnBhdHRycyA9IHpsX3RhcmdldC0+YXR0cnM7CisKK30KKworLyoKKyAqICA9PT09PT09PSBkYmxsX2dldF9jX2FkZHIgPT09PT09PT0KKyAqICBHZXQgYWRkcmVzcyBvZiBhICJDIiBuYW1lIGluIHRoZSBzcGVjaWZpZWQgbGlicmFyeS4KKyAqLworYm9vbCBkYmxsX2dldF9jX2FkZHIoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKnpsX2xpYiwgY2hhciAqbmFtZSwKKwkJICAgICBzdHJ1Y3QgZGJsbF9zeW1fdmFsICoqc3ltX3ZhbCkKK3sKKwlzdHJ1Y3QgZGJsbF9zeW1ib2wgKnN5bTsKKwljaGFyIGNuYW1lW01BWEVYUFIgKyAxXTsKKwlib29sIHN0YXR1cyA9IGZhbHNlOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKHpsX2xpYik7CisJREJDX1JFUVVJUkUoc3ltX3ZhbCAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRSh6bF9saWItPnN5bV90YWIgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUobmFtZSAhPSBOVUxMKTsKKworCWNuYW1lWzBdID0gJ18nOworCisJc3RybmNweShjbmFtZSArIDEsIG5hbWUsIHNpemVvZihjbmFtZSkgLSAyKTsKKwljbmFtZVtNQVhFWFBSXSA9ICdcMCc7CS8qIGluc3VyZSAnXDAnIHN0cmluZyB0ZXJtaW5hdGlvbiAqLworCisJLyogQ2hlY2sgZm9yIEMgbmFtZSwgaWYgbm90IGZvdW5kICovCisJc3ltID0gKHN0cnVjdCBkYmxsX3N5bWJvbCAqKWdoX2ZpbmQoemxfbGliLT5zeW1fdGFiLCBjbmFtZSk7CisKKwlpZiAoc3ltICE9IE5VTEwpIHsKKwkJKnN5bV92YWwgPSAmc3ltLT52YWx1ZTsKKwkJc3RhdHVzID0gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRibGxfZ2V0X3NlY3QgPT09PT09PT0KKyAqICBHZXQgdGhlIGJhc2UgYWRkcmVzcyBhbmQgc2l6ZSAoaW4gYnl0ZXMpIG9mIGEgQ09GRiBzZWN0aW9uLgorICovCitpbnQgZGJsbF9nZXRfc2VjdChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliLCBjaGFyICpuYW1lLCB1MzIgKnBhZGRyLAorCQkJIHUzMiAqcHNpemUpCit7CisJdTMyIGJ5dGVfc2l6ZTsKKwlib29sIG9wZW5lZF9kb2ZmID0gZmFsc2U7CisJY29uc3Qgc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKnNlY3QgPSBOVUxMOworCXN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICp6bF9saWIgPSAoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKilsaWI7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUobmFtZSAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShwYWRkciAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShwc2l6ZSAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRSh6bF9saWIpOworCisJLyogSWYgRE9GRiBmaWxlIGlzIG5vdCBvcGVuLCB3ZSBvcGVuIGl0LiAqLworCWlmICh6bF9saWIgIT0gTlVMTCkgeworCQlpZiAoemxfbGliLT5mcCA9PSBOVUxMKSB7CisJCQlzdGF0dXMgPSBkb2Zfb3Blbih6bF9saWIpOworCQkJaWYgKCFzdGF0dXMpCisJCQkJb3BlbmVkX2RvZmYgPSB0cnVlOworCisJCX0gZWxzZSB7CisJCQkoKih6bF9saWItPnRhcmdldF9vYmotPmF0dHJzLmZzZWVrKSkgKHpsX2xpYi0+ZnAsCisJCQkJCQkJICAgICAgemxfbGliLT51bF9wb3MsCisJCQkJCQkJICAgICAgU0VFS19TRVQpOworCQl9CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJYnl0ZV9zaXplID0gMTsKKwkJaWYgKGRsb2FkX2dldF9zZWN0aW9uX2luZm8oemxfbGliLT5kZXNjLCBuYW1lLCAmc2VjdCkpIHsKKwkJCSpwYWRkciA9IHNlY3QtPmxvYWRfYWRkcjsKKwkJCSpwc2l6ZSA9IHNlY3QtPnNpemUgKiBieXRlX3NpemU7CisJCQkvKiBNYWtlIHN1cmUgc2l6ZSBpcyBldmVuIGZvciBnb29kIHN3YXAgKi8KKwkJCWlmICgqcHNpemUgJSAyKQorCQkJCSgqcHNpemUpKys7CisKKwkJCS8qIEFsaWduIHNpemUgKi8KKwkJCSpwc2l6ZSA9IERPRkZfQUxJR04oKnBzaXplKTsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IC1FTlhJTzsKKwkJfQorCX0KKwlpZiAob3BlbmVkX2RvZmYpIHsKKwkJZG9mX2Nsb3NlKHpsX2xpYik7CisJCW9wZW5lZF9kb2ZmID0gZmFsc2U7CisJfQorCisJZGV2X2RiZyhicmlkZ2UsICIlczogbGliOiAlcCBuYW1lOiAlcyBwYWRkcjogJXAgcHNpemU6ICVwLCAiCisJCSJzdGF0dXMgMHgleFxuIiwgX19mdW5jX18sIGxpYiwgbmFtZSwgcGFkZHIsIHBzaXplLCBzdGF0dXMpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkYmxsX2luaXQgPT09PT09PT0KKyAqLworYm9vbCBkYmxsX2luaXQodm9pZCkKK3sKKwlEQkNfUkVRVUlSRShyZWZzID49IDApOworCisJaWYgKHJlZnMgPT0gMCkKKwkJZ2hfaW5pdCgpOworCisJcmVmcysrOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF9sb2FkID09PT09PT09CisgKi8KK2ludCBkYmxsX2xvYWQoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYiwgZGJsbF9mbGFncyBmbGFncywKKwkJICAgICBzdHJ1Y3QgZGJsbF9hdHRycyAqYXR0cnMsIHUzMiAqZW50cnkpCit7CisJc3RydWN0IGRibGxfbGlicmFyeV9vYmogKnpsX2xpYiA9IChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqKWxpYjsKKwlzdHJ1Y3QgZGJsbF90YXJfb2JqICpkYnpsOworCWJvb2wgZ290X3N5bWJvbHMgPSB0cnVlOworCXMzMiBlcnI7CisJaW50IHN0YXR1cyA9IDA7CisJYm9vbCBvcGVuZWRfZG9mZiA9IGZhbHNlOworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRSh6bF9saWIpOworCURCQ19SRVFVSVJFKGVudHJ5ICE9IE5VTEwpOworCURCQ19SRVFVSVJFKGF0dHJzICE9IE5VTEwpOworCisJLyoKKwkgKiAgTG9hZCBpZiBub3QgYWxyZWFkeSBsb2FkZWQuCisJICovCisJaWYgKHpsX2xpYi0+bG9hZF9yZWYgPT0gMCB8fCAhKGZsYWdzICYgREJMTF9EWU5BTUlDKSkgeworCQlkYnpsID0gemxfbGliLT50YXJnZXRfb2JqOworCQlkYnpsLT5hdHRycyA9ICphdHRyczsKKwkJLyogQ3JlYXRlIGEgaGFzaCB0YWJsZSBmb3Igc3ltYm9scyBpZiBub3QgYWxyZWFkeSBjcmVhdGVkICovCisJCWlmICh6bF9saWItPnN5bV90YWIgPT0gTlVMTCkgeworCQkJZ290X3N5bWJvbHMgPSBmYWxzZTsKKwkJCXpsX2xpYi0+c3ltX3RhYiA9IGdoX2NyZWF0ZShNQVhCVUNLRVRTLAorCQkJCQkJICAgIHNpemVvZihzdHJ1Y3QgZGJsbF9zeW1ib2wpLAorCQkJCQkJICAgIG5hbWVfaGFzaCwKKwkJCQkJCSAgICBuYW1lX21hdGNoLCBzeW1fZGVsZXRlKTsKKwkJCWlmICh6bF9saWItPnN5bV90YWIgPT0gTlVMTCkKKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCisJCX0KKwkJLyoKKwkJICogIFNldCB1cCBvYmplY3RzIG5lZWRlZCBieSB0aGUgZHluYW1pYyBsb2FkZXIKKwkJICovCisJCS8qIFN0cmVhbSAqLworCQl6bF9saWItPnN0cmVhbS5kbF9zdHJlYW0ucmVhZF9idWZmZXIgPSBkYmxsX3JlYWRfYnVmZmVyOworCQl6bF9saWItPnN0cmVhbS5kbF9zdHJlYW0uc2V0X2ZpbGVfcG9zbiA9IGRibGxfc2V0X2ZpbGVfcG9zbjsKKwkJemxfbGliLT5zdHJlYW0ubGliID0gemxfbGliOworCQkvKiBTeW1ib2wgKi8KKwkJemxfbGliLT5zeW1ib2wuZGxfc3ltYm9sLmZpbmRfbWF0Y2hpbmdfc3ltYm9sID0KKwkJICAgIGRibGxfZmluZF9zeW1ib2w7CisJCWlmIChnb3Rfc3ltYm9scykgeworCQkJemxfbGliLT5zeW1ib2wuZGxfc3ltYm9sLmFkZF90b19zeW1ib2xfdGFibGUgPQorCQkJICAgIGZpbmRfaW5fc3ltYm9sX3RhYmxlOworCQl9IGVsc2UgeworCQkJemxfbGliLT5zeW1ib2wuZGxfc3ltYm9sLmFkZF90b19zeW1ib2xfdGFibGUgPQorCQkJICAgIGRibGxfYWRkX3RvX3N5bWJvbF90YWJsZTsKKwkJfQorCQl6bF9saWItPnN5bWJvbC5kbF9zeW1ib2wucHVyZ2Vfc3ltYm9sX3RhYmxlID0KKwkJICAgIGRibGxfcHVyZ2Vfc3ltYm9sX3RhYmxlOworCQl6bF9saWItPnN5bWJvbC5kbF9zeW1ib2wuZGxvYWRfYWxsb2NhdGUgPSBhbGxvY2F0ZTsKKwkJemxfbGliLT5zeW1ib2wuZGxfc3ltYm9sLmRsb2FkX2RlYWxsb2NhdGUgPSBkZWFsbG9jYXRlOworCQl6bF9saWItPnN5bWJvbC5kbF9zeW1ib2wuZXJyb3JfcmVwb3J0ID0gZGJsbF9lcnJfcmVwb3J0OworCQl6bF9saWItPnN5bWJvbC5saWIgPSB6bF9saWI7CisJCS8qIEFsbG9jYXRlICovCisJCXpsX2xpYi0+YWxsb2NhdGUuZGxfYWxsb2MuZGxvYWRfYWxsb2NhdGUgPSBkYmxsX3JtbV9hbGxvYzsKKwkJemxfbGliLT5hbGxvY2F0ZS5kbF9hbGxvYy5kbG9hZF9kZWFsbG9jYXRlID0gcm1tX2RlYWxsb2M7CisJCXpsX2xpYi0+YWxsb2NhdGUubGliID0gemxfbGliOworCQkvKiBJbml0ICovCisJCXpsX2xpYi0+aW5pdC5kbF9pbml0LmNvbm5lY3QgPSBjb25uZWN0OworCQl6bF9saWItPmluaXQuZGxfaW5pdC5yZWFkbWVtID0gcmVhZF9tZW07CisJCXpsX2xpYi0+aW5pdC5kbF9pbml0LndyaXRlbWVtID0gd3JpdGVfbWVtOworCQl6bF9saWItPmluaXQuZGxfaW5pdC5maWxsbWVtID0gZmlsbF9tZW07CisJCXpsX2xpYi0+aW5pdC5kbF9pbml0LmV4ZWN1dGUgPSBleGVjdXRlOworCQl6bF9saWItPmluaXQuZGxfaW5pdC5yZWxlYXNlID0gcmVsZWFzZTsKKwkJemxfbGliLT5pbml0LmxpYiA9IHpsX2xpYjsKKwkJLyogSWYgQ09GRiBmaWxlIGlzIG5vdCBvcGVuLCB3ZSBvcGVuIGl0LiAqLworCQlpZiAoemxfbGliLT5mcCA9PSBOVUxMKSB7CisJCQlzdGF0dXMgPSBkb2Zfb3Blbih6bF9saWIpOworCQkJaWYgKCFzdGF0dXMpCisJCQkJb3BlbmVkX2RvZmYgPSB0cnVlOworCisJCX0KKwkJaWYgKCFzdGF0dXMpIHsKKwkJCXpsX2xpYi0+dWxfcG9zID0gKCooemxfbGliLT50YXJnZXRfb2JqLT5hdHRycy5mdGVsbCkpCisJCQkgICAgKHpsX2xpYi0+ZnApOworCQkJLyogUmVzZXQgZmlsZSBjdXJzb3IgKi8KKwkJCSgqKHpsX2xpYi0+dGFyZ2V0X29iai0+YXR0cnMuZnNlZWspKSAoemxfbGliLT5mcCwKKwkJCQkJCQkgICAgICAobG9uZykwLAorCQkJCQkJCSAgICAgIFNFRUtfU0VUKTsKKwkJCXN5bWJvbHNfcmVsb2FkZWQgPSB0cnVlOworCQkJLyogVGhlIDV0aCBhcmd1bWVudCwgRExPQURfSU5JVEJTUywgdGVsbHMgdGhlIERMTAorCQkJICogbW9kdWxlIHRvIHplcm8taW5pdCBhbGwgQlNTIHNlY3Rpb25zLiAgSW4gZ2VuZXJhbCwKKwkJCSAqIHRoaXMgaXMgbm90IG5lY2Vzc2FyeSBhbmQgYWxzbyBpbmNyZWFzZXMgbG9hZCB0aW1lLgorCQkJICogV2UgbWF5IHdhbnQgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZSBieSB0aGUgdXNlciAqLworCQkJZXJyID0gZHluYW1pY19sb2FkX21vZHVsZSgmemxfbGliLT5zdHJlYW0uZGxfc3RyZWFtLAorCQkJCQkJICAmemxfbGliLT5zeW1ib2wuZGxfc3ltYm9sLAorCQkJCQkJICAmemxfbGliLT5hbGxvY2F0ZS5kbF9hbGxvYywKKwkJCQkJCSAgJnpsX2xpYi0+aW5pdC5kbF9pbml0LAorCQkJCQkJICBETE9BRF9JTklUQlNTLAorCQkJCQkJICAmemxfbGliLT5kbG9hZF9tb2Rfb2JqKTsKKworCQkJaWYgKGVyciAhPSAwKSB7CisJCQkJc3RhdHVzID0gLUVJTFNFUTsKKwkJCX0gZWxzZSBpZiAocmVkZWZpbmVkX3N5bWJvbCkgeworCQkJCXpsX2xpYi0+bG9hZF9yZWYrKzsKKwkJCQlkYmxsX3VubG9hZCh6bF9saWIsIChzdHJ1Y3QgZGJsbF9hdHRycyAqKWF0dHJzKTsKKwkJCQlyZWRlZmluZWRfc3ltYm9sID0gZmFsc2U7CisJCQkJc3RhdHVzID0gLUVJTFNFUTsKKwkJCX0gZWxzZSB7CisJCQkJKmVudHJ5ID0gemxfbGliLT5lbnRyeTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoIXN0YXR1cykKKwkJemxfbGliLT5sb2FkX3JlZisrOworCisJLyogQ2xlYW4gdXAgRE9GRiByZXNvdXJjZXMgKi8KKwlpZiAob3BlbmVkX2RvZmYpCisJCWRvZl9jbG9zZSh6bF9saWIpOworCisJREJDX0VOU1VSRShzdGF0dXMgfHwgemxfbGliLT5sb2FkX3JlZiA+IDApOworCisJZGV2X2RiZyhicmlkZ2UsICIlczogbGliOiAlcCBmbGFnczogMHgleCBlbnRyeTogJXAsIHN0YXR1cyAweCV4XG4iLAorCQlfX2Z1bmNfXywgbGliLCBmbGFncywgZW50cnksIHN0YXR1cyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRibGxfbG9hZF9zZWN0ID09PT09PT09CisgKiAgTm90IHN1cHBvcnRlZCBmb3IgQ09GRi4KKyAqLworaW50IGRibGxfbG9hZF9zZWN0KHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICp6bF9saWIsIGNoYXIgKnNlY19uYW1lLAorCQkJICBzdHJ1Y3QgZGJsbF9hdHRycyAqYXR0cnMpCit7CisJREJDX1JFUVVJUkUoemxfbGliKTsKKworCXJldHVybiAtRU5PU1lTOworfQorCisvKgorICogID09PT09PT09IGRibGxfb3BlbiA9PT09PT09PQorICovCitpbnQgZGJsbF9vcGVuKHN0cnVjdCBkYmxsX3Rhcl9vYmogKnRhcmdldCwgY2hhciAqZmlsZSwgZGJsbF9mbGFncyBmbGFncywKKwkJICAgICBzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqKmxpYl9vYmopCit7CisJc3RydWN0IGRibGxfdGFyX29iaiAqemxfdGFyZ2V0ID0gKHN0cnVjdCBkYmxsX3Rhcl9vYmogKil0YXJnZXQ7CisJc3RydWN0IGRibGxfbGlicmFyeV9vYmogKnpsX2xpYiA9IE5VTEw7CisJczMyIGVycjsKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRSh6bF90YXJnZXQpOworCURCQ19SRVFVSVJFKHpsX3RhcmdldC0+YXR0cnMuZm9wZW4gIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoZmlsZSAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShsaWJfb2JqICE9IE5VTEwpOworCisJemxfbGliID0gemxfdGFyZ2V0LT5oZWFkOworCXdoaWxlICh6bF9saWIgIT0gTlVMTCkgeworCQlpZiAoc3RyY21wKHpsX2xpYi0+ZmlsZV9uYW1lLCBmaWxlKSA9PSAwKSB7CisJCQkvKiBMaWJyYXJ5IGlzIGFscmVhZHkgb3BlbmVkICovCisJCQl6bF9saWItPm9wZW5fcmVmKys7CisJCQlicmVhazsKKwkJfQorCQl6bF9saWIgPSB6bF9saWItPm5leHQ7CisJfQorCWlmICh6bF9saWIgPT0gTlVMTCkgeworCQkvKiBBbGxvY2F0ZSBEQkwgbGlicmFyeSBvYmplY3QgKi8KKwkJemxfbGliID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRibGxfbGlicmFyeV9vYmopLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHpsX2xpYiA9PSBOVUxMKSB7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQl9IGVsc2UgeworCQkJemxfbGliLT51bF9wb3MgPSAwOworCQkJLyogSW5jcmVtZW50IHJlZiBjb3VudCB0byBhbGxvdyBjbG9zZSBvbiBmYWlsdXJlCisJCQkgKiBsYXRlciBvbiAqLworCQkJemxfbGliLT5vcGVuX3JlZisrOworCQkJemxfbGliLT50YXJnZXRfb2JqID0gemxfdGFyZ2V0OworCQkJLyogS2VlcCBhIGNvcHkgb2YgdGhlIGZpbGUgbmFtZSAqLworCQkJemxfbGliLT5maWxlX25hbWUgPSBremFsbG9jKHN0cmxlbihmaWxlKSArIDEsCisJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCQlpZiAoemxfbGliLT5maWxlX25hbWUgPT0gTlVMTCkgeworCQkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQl9IGVsc2UgeworCQkJCXN0cm5jcHkoemxfbGliLT5maWxlX25hbWUsIGZpbGUsCisJCQkJCXN0cmxlbihmaWxlKSArIDEpOworCQkJfQorCQkJemxfbGliLT5zeW1fdGFiID0gTlVMTDsKKwkJfQorCX0KKwkvKgorCSAqICBTZXQgdXAgb2JqZWN0cyBuZWVkZWQgYnkgdGhlIGR5bmFtaWMgbG9hZGVyCisJICovCisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2NvbnQ7CisKKwkvKiBTdHJlYW0gKi8KKwl6bF9saWItPnN0cmVhbS5kbF9zdHJlYW0ucmVhZF9idWZmZXIgPSBkYmxsX3JlYWRfYnVmZmVyOworCXpsX2xpYi0+c3RyZWFtLmRsX3N0cmVhbS5zZXRfZmlsZV9wb3NuID0gZGJsbF9zZXRfZmlsZV9wb3NuOworCXpsX2xpYi0+c3RyZWFtLmxpYiA9IHpsX2xpYjsKKwkvKiBTeW1ib2wgKi8KKwl6bF9saWItPnN5bWJvbC5kbF9zeW1ib2wuYWRkX3RvX3N5bWJvbF90YWJsZSA9IGRibGxfYWRkX3RvX3N5bWJvbF90YWJsZTsKKwl6bF9saWItPnN5bWJvbC5kbF9zeW1ib2wuZmluZF9tYXRjaGluZ19zeW1ib2wgPSBkYmxsX2ZpbmRfc3ltYm9sOworCXpsX2xpYi0+c3ltYm9sLmRsX3N5bWJvbC5wdXJnZV9zeW1ib2xfdGFibGUgPSBkYmxsX3B1cmdlX3N5bWJvbF90YWJsZTsKKwl6bF9saWItPnN5bWJvbC5kbF9zeW1ib2wuZGxvYWRfYWxsb2NhdGUgPSBhbGxvY2F0ZTsKKwl6bF9saWItPnN5bWJvbC5kbF9zeW1ib2wuZGxvYWRfZGVhbGxvY2F0ZSA9IGRlYWxsb2NhdGU7CisJemxfbGliLT5zeW1ib2wuZGxfc3ltYm9sLmVycm9yX3JlcG9ydCA9IGRibGxfZXJyX3JlcG9ydDsKKwl6bF9saWItPnN5bWJvbC5saWIgPSB6bF9saWI7CisJLyogQWxsb2NhdGUgKi8KKwl6bF9saWItPmFsbG9jYXRlLmRsX2FsbG9jLmRsb2FkX2FsbG9jYXRlID0gZGJsbF9ybW1fYWxsb2M7CisJemxfbGliLT5hbGxvY2F0ZS5kbF9hbGxvYy5kbG9hZF9kZWFsbG9jYXRlID0gcm1tX2RlYWxsb2M7CisJemxfbGliLT5hbGxvY2F0ZS5saWIgPSB6bF9saWI7CisJLyogSW5pdCAqLworCXpsX2xpYi0+aW5pdC5kbF9pbml0LmNvbm5lY3QgPSBjb25uZWN0OworCXpsX2xpYi0+aW5pdC5kbF9pbml0LnJlYWRtZW0gPSByZWFkX21lbTsKKwl6bF9saWItPmluaXQuZGxfaW5pdC53cml0ZW1lbSA9IHdyaXRlX21lbTsKKwl6bF9saWItPmluaXQuZGxfaW5pdC5maWxsbWVtID0gZmlsbF9tZW07CisJemxfbGliLT5pbml0LmRsX2luaXQuZXhlY3V0ZSA9IGV4ZWN1dGU7CisJemxfbGliLT5pbml0LmRsX2luaXQucmVsZWFzZSA9IHJlbGVhc2U7CisJemxfbGliLT5pbml0LmxpYiA9IHpsX2xpYjsKKwlpZiAoIXN0YXR1cyAmJiB6bF9saWItPmZwID09IE5VTEwpCisJCXN0YXR1cyA9IGRvZl9vcGVuKHpsX2xpYik7CisKKwl6bF9saWItPnVsX3BvcyA9ICgqKHpsX2xpYi0+dGFyZ2V0X29iai0+YXR0cnMuZnRlbGwpKSAoemxfbGliLT5mcCk7CisJKCooemxfbGliLT50YXJnZXRfb2JqLT5hdHRycy5mc2VlaykpICh6bF9saWItPmZwLCAobG9uZykwLCBTRUVLX1NFVCk7CisJLyogQ3JlYXRlIGEgaGFzaCB0YWJsZSBmb3Igc3ltYm9scyBpZiBmbGFnIGlzIHNldCAqLworCWlmICh6bF9saWItPnN5bV90YWIgIT0gTlVMTCB8fCAhKGZsYWdzICYgREJMTF9TWU1CKSkKKwkJZ290byBmdW5jX2NvbnQ7CisKKwl6bF9saWItPnN5bV90YWIgPQorCSAgICBnaF9jcmVhdGUoTUFYQlVDS0VUUywgc2l6ZW9mKHN0cnVjdCBkYmxsX3N5bWJvbCksIG5hbWVfaGFzaCwKKwkJICAgICAgbmFtZV9tYXRjaCwgc3ltX2RlbGV0ZSk7CisJaWYgKHpsX2xpYi0+c3ltX3RhYiA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJfSBlbHNlIHsKKwkJLyogRG8gYSBmYWtlIGxvYWQgdG8gZ2V0IHN5bWJvbHMgLSBzZXQgd3JpdGUgZnVuYyB0byBub19vcCAqLworCQl6bF9saWItPmluaXQuZGxfaW5pdC53cml0ZW1lbSA9IG5vX29wOworCQllcnIgPSBkeW5hbWljX29wZW5fbW9kdWxlKCZ6bF9saWItPnN0cmVhbS5kbF9zdHJlYW0sCisJCQkJCSAgJnpsX2xpYi0+c3ltYm9sLmRsX3N5bWJvbCwKKwkJCQkJICAmemxfbGliLT5hbGxvY2F0ZS5kbF9hbGxvYywKKwkJCQkJICAmemxfbGliLT5pbml0LmRsX2luaXQsIDAsCisJCQkJCSAgJnpsX2xpYi0+ZGxvYWRfbW9kX29iaik7CisJCWlmIChlcnIgIT0gMCkgeworCQkJc3RhdHVzID0gLUVJTFNFUTsKKwkJfSBlbHNlIHsKKwkJCS8qIE5vdyB0aGF0IHdlIGhhdmUgdGhlIHN5bWJvbCB0YWJsZSwgd2UgY2FuIHVubG9hZCAqLworCQkJZXJyID0gZHluYW1pY191bmxvYWRfbW9kdWxlKHpsX2xpYi0+ZGxvYWRfbW9kX29iaiwKKwkJCQkJCSAgICAmemxfbGliLT5zeW1ib2wuZGxfc3ltYm9sLAorCQkJCQkJICAgICZ6bF9saWItPmFsbG9jYXRlLmRsX2FsbG9jLAorCQkJCQkJICAgICZ6bF9saWItPmluaXQuZGxfaW5pdCk7CisJCQlpZiAoZXJyICE9IDApCisJCQkJc3RhdHVzID0gLUVJTFNFUTsKKworCQkJemxfbGliLT5kbG9hZF9tb2Rfb2JqID0gTlVMTDsKKwkJfQorCX0KK2Z1bmNfY29udDoKKwlpZiAoIXN0YXR1cykgeworCQlpZiAoemxfbGliLT5vcGVuX3JlZiA9PSAxKSB7CisJCQkvKiBGaXJzdCB0aW1lIG9wZW5lZCAtIGluc2VydCBpbiBsaXN0ICovCisJCQlpZiAoemxfdGFyZ2V0LT5oZWFkKQorCQkJCSh6bF90YXJnZXQtPmhlYWQpLT5wcmV2ID0gemxfbGliOworCisJCQl6bF9saWItPnByZXYgPSBOVUxMOworCQkJemxfbGliLT5uZXh0ID0gemxfdGFyZ2V0LT5oZWFkOworCQkJemxfdGFyZ2V0LT5oZWFkID0gemxfbGliOworCQl9CisJCSpsaWJfb2JqID0gKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICopemxfbGliOworCX0gZWxzZSB7CisJCSpsaWJfb2JqID0gTlVMTDsKKwkJaWYgKHpsX2xpYiAhPSBOVUxMKQorCQkJZGJsbF9jbG9zZSgoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKil6bF9saWIpOworCisJfQorCURCQ19FTlNVUkUoKCFzdGF0dXMgJiYgKHpsX2xpYi0+b3Blbl9yZWYgPiAwKSAmJiAqbGliX29iaikKKwkJCQl8fCAoc3RhdHVzICYmICpsaWJfb2JqID09IE5VTEwpKTsKKworCWRldl9kYmcoYnJpZGdlLCAiJXM6IHRhcmdldDogJXAgZmlsZTogJXMgbGliX29iajogJXAsIHN0YXR1cyAweCV4XG4iLAorCQlfX2Z1bmNfXywgdGFyZ2V0LCBmaWxlLCBsaWJfb2JqLCBzdGF0dXMpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkYmxsX3JlYWRfc2VjdCA9PT09PT09PQorICogIEdldCB0aGUgY29udGVudCBvZiBhIENPRkYgc2VjdGlvbi4KKyAqLworaW50IGRibGxfcmVhZF9zZWN0KHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWIsIGNoYXIgKm5hbWUsCisJCQkgIGNoYXIgKmJ1ZiwgdTMyIHNpemUpCit7CisJc3RydWN0IGRibGxfbGlicmFyeV9vYmogKnpsX2xpYiA9IChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqKWxpYjsKKwlib29sIG9wZW5lZF9kb2ZmID0gZmFsc2U7CisJdTMyIGJ5dGVfc2l6ZTsJCS8qIHNpemUgb2YgYnl0ZXMgKi8KKwl1MzIgdWxfc2VjdF9zaXplOwkvKiBzaXplIG9mIHNlY3Rpb24gKi8KKwljb25zdCBzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqc2VjdCA9IE5VTEw7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoemxfbGliKTsKKwlEQkNfUkVRVUlSRShuYW1lICE9IE5VTEwpOworCURCQ19SRVFVSVJFKGJ1ZiAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShzaXplICE9IDApOworCisJLyogSWYgRE9GRiBmaWxlIGlzIG5vdCBvcGVuLCB3ZSBvcGVuIGl0LiAqLworCWlmICh6bF9saWIgIT0gTlVMTCkgeworCQlpZiAoemxfbGliLT5mcCA9PSBOVUxMKSB7CisJCQlzdGF0dXMgPSBkb2Zfb3Blbih6bF9saWIpOworCQkJaWYgKCFzdGF0dXMpCisJCQkJb3BlbmVkX2RvZmYgPSB0cnVlOworCisJCX0gZWxzZSB7CisJCQkoKih6bF9saWItPnRhcmdldF9vYmotPmF0dHJzLmZzZWVrKSkgKHpsX2xpYi0+ZnAsCisJCQkJCQkJICAgICAgemxfbGliLT51bF9wb3MsCisJCQkJCQkJICAgICAgU0VFS19TRVQpOworCQl9CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2NvbnQ7CisKKwlieXRlX3NpemUgPSAxOworCWlmICghZGxvYWRfZ2V0X3NlY3Rpb25faW5mbyh6bF9saWItPmRlc2MsIG5hbWUsICZzZWN0KSkgeworCQlzdGF0dXMgPSAtRU5YSU87CisJCWdvdG8gZnVuY19jb250OworCX0KKwkvKgorCSAqIEVuc3VyZSB0aGUgc3VwcGxpZWQgYnVmZmVyIHNpemUgaXMgc3VmZmljaWVudCB0byBzdG9yZQorCSAqIHRoZSBzZWN0aW9uIGJ1ZiB0byBiZSByZWFkLgorCSAqLworCXVsX3NlY3Rfc2l6ZSA9IHNlY3QtPnNpemUgKiBieXRlX3NpemU7CisJLyogTWFrZSBzdXJlIHNpemUgaXMgZXZlbiBmb3IgZ29vZCBzd2FwICovCisJaWYgKHVsX3NlY3Rfc2l6ZSAlIDIpCisJCXVsX3NlY3Rfc2l6ZSsrOworCisJLyogQWxpZ24gc2l6ZSAqLworCXVsX3NlY3Rfc2l6ZSA9IERPRkZfQUxJR04odWxfc2VjdF9zaXplKTsKKwlpZiAodWxfc2VjdF9zaXplID4gc2l6ZSkgeworCQlzdGF0dXMgPSAtRVBFUk07CisJfSBlbHNlIHsKKwkJaWYgKCFkbG9hZF9nZXRfc2VjdGlvbih6bF9saWItPmRlc2MsIHNlY3QsIGJ1ZikpCisJCQlzdGF0dXMgPSAtRUJBREY7CisKKwl9CitmdW5jX2NvbnQ6CisJaWYgKG9wZW5lZF9kb2ZmKSB7CisJCWRvZl9jbG9zZSh6bF9saWIpOworCQlvcGVuZWRfZG9mZiA9IGZhbHNlOworCX0KKworCWRldl9kYmcoYnJpZGdlLCAiJXM6IGxpYjogJXAgbmFtZTogJXMgYnVmOiAlcCBzaXplOiAweCV4LCAiCisJCSJzdGF0dXMgMHgleFxuIiwgX19mdW5jX18sIGxpYiwgbmFtZSwgYnVmLCBzaXplLCBzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF9zZXRfYXR0cnMgPT09PT09PT0KKyAqICBTZXQgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIHRhcmdldC4KKyAqLwordm9pZCBkYmxsX3NldF9hdHRycyhzdHJ1Y3QgZGJsbF90YXJfb2JqICp0YXJnZXQsIHN0cnVjdCBkYmxsX2F0dHJzICpwYXR0cnMpCit7CisJc3RydWN0IGRibGxfdGFyX29iaiAqemxfdGFyZ2V0ID0gKHN0cnVjdCBkYmxsX3Rhcl9vYmogKil0YXJnZXQ7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKHpsX3RhcmdldCk7CisJREJDX1JFUVVJUkUocGF0dHJzICE9IE5VTEwpOworCisJaWYgKChwYXR0cnMgIT0gTlVMTCkgJiYgKHpsX3RhcmdldCAhPSBOVUxMKSkKKwkJemxfdGFyZ2V0LT5hdHRycyA9ICpwYXR0cnM7CisKK30KKworLyoKKyAqICA9PT09PT09PSBkYmxsX3VubG9hZCA9PT09PT09PQorICovCit2b2lkIGRibGxfdW5sb2FkKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWIsIHN0cnVjdCBkYmxsX2F0dHJzICphdHRycykKK3sKKwlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqemxfbGliID0gKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICopbGliOworCXMzMiBlcnIgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKHpsX2xpYik7CisJREJDX1JFUVVJUkUoemxfbGliLT5sb2FkX3JlZiA+IDApOworCWRldl9kYmcoYnJpZGdlLCAiJXM6IGxpYjogJXBcbiIsIF9fZnVuY19fLCBsaWIpOworCXpsX2xpYi0+bG9hZF9yZWYtLTsKKwkvKiBVbmxvYWQgb25seSBpZiByZWZlcmVuY2UgY291bnQgaXMgMCAqLworCWlmICh6bF9saWItPmxvYWRfcmVmICE9IDApCisJCWdvdG8gZnVuY19lbmQ7CisKKwl6bF9saWItPnRhcmdldF9vYmotPmF0dHJzID0gKmF0dHJzOworCWlmICh6bF9saWItPmRsb2FkX21vZF9vYmopIHsKKwkJZXJyID0gZHluYW1pY191bmxvYWRfbW9kdWxlKHpsX2xpYi0+ZGxvYWRfbW9kX29iaiwKKwkJCQkJICAgICZ6bF9saWItPnN5bWJvbC5kbF9zeW1ib2wsCisJCQkJCSAgICAmemxfbGliLT5hbGxvY2F0ZS5kbF9hbGxvYywKKwkJCQkJICAgICZ6bF9saWItPmluaXQuZGxfaW5pdCk7CisJCWlmIChlcnIgIT0gMCkKKwkJCWRldl9kYmcoYnJpZGdlLCAiJXM6IGZhaWxlZDogMHgleFxuIiwgX19mdW5jX18sIGVycik7CisJfQorCS8qIHJlbW92ZSBzeW1ib2xzIGZyb20gc3ltYm9sIHRhYmxlICovCisJaWYgKHpsX2xpYi0+c3ltX3RhYiAhPSBOVUxMKSB7CisJCWdoX2RlbGV0ZSh6bF9saWItPnN5bV90YWIpOworCQl6bF9saWItPnN5bV90YWIgPSBOVUxMOworCX0KKwkvKiBkZWxldGUgRE9GRiBkZXNjIHNpbmNlIGl0IGhvbGRzICpsb3RzKiBvZiBob3N0IE9TCisJICogcmVzb3VyY2VzICovCisJZG9mX2Nsb3NlKHpsX2xpYik7CitmdW5jX2VuZDoKKwlEQkNfRU5TVVJFKHpsX2xpYi0+bG9hZF9yZWYgPj0gMCk7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF91bmxvYWRfc2VjdCA9PT09PT09PQorICogIE5vdCBzdXBwb3J0ZWQgZm9yIENPRkYuCisgKi8KK2ludCBkYmxsX3VubG9hZF9zZWN0KHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWIsIGNoYXIgKnNlY19uYW1lLAorCQkJICAgIHN0cnVjdCBkYmxsX2F0dHJzICphdHRycykKK3sKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoc2VjX25hbWUgIT0gTlVMTCk7CisKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworLyoKKyAqICA9PT09PT09PSBkb2ZfY2xvc2UgPT09PT09PT0KKyAqLworc3RhdGljIHZvaWQgZG9mX2Nsb3NlKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICp6bF9saWIpCit7CisJaWYgKHpsX2xpYi0+ZGVzYykgeworCQlkbG9hZF9tb2R1bGVfY2xvc2UoemxfbGliLT5kZXNjKTsKKwkJemxfbGliLT5kZXNjID0gTlVMTDsKKwl9CisJLyogY2xvc2UgZmlsZSAqLworCWlmICh6bF9saWItPmZwKSB7CisJCSh6bF9saWItPnRhcmdldF9vYmotPmF0dHJzLmZjbG9zZSkgKHpsX2xpYi0+ZnApOworCQl6bF9saWItPmZwID0gTlVMTDsKKwl9Cit9CisKKy8qCisgKiAgPT09PT09PT0gZG9mX29wZW4gPT09PT09PT0KKyAqLworc3RhdGljIGludCBkb2Zfb3BlbihzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqemxfbGliKQoreworCXZvaWQgKm9wZW4gPSAqKHpsX2xpYi0+dGFyZ2V0X29iai0+YXR0cnMuZm9wZW4pOworCWludCBzdGF0dXMgPSAwOworCisJLyogRmlyc3Qgb3BlbiB0aGUgZmlsZSBmb3IgdGhlIGR5bmFtaWMgbG9hZGVyLCB0aGVuIG9wZW4gQ09GICovCisJemxfbGliLT5mcCA9CisJICAgICh2b2lkICopKChkYmxsX2Zfb3Blbl9meG4pIChvcGVuKSkgKHpsX2xpYi0+ZmlsZV9uYW1lLCAicmIiKTsKKworCS8qIE9wZW4gRE9GRiBtb2R1bGUgKi8KKwlpZiAoemxfbGliLT5mcCAmJiB6bF9saWItPmRlc2MgPT0gTlVMTCkgeworCQkoKih6bF9saWItPnRhcmdldF9vYmotPmF0dHJzLmZzZWVrKSkgKHpsX2xpYi0+ZnAsIChsb25nKTAsCisJCQkJCQkgICAgICBTRUVLX1NFVCk7CisJCXpsX2xpYi0+ZGVzYyA9CisJCSAgICBkbG9hZF9tb2R1bGVfb3BlbigmemxfbGliLT5zdHJlYW0uZGxfc3RyZWFtLAorCQkJCSAgICAgICZ6bF9saWItPnN5bWJvbC5kbF9zeW1ib2wpOworCQlpZiAoemxfbGliLT5kZXNjID09IE5VTEwpIHsKKwkJCSh6bF9saWItPnRhcmdldF9vYmotPmF0dHJzLmZjbG9zZSkgKHpsX2xpYi0+ZnApOworCQkJemxfbGliLT5mcCA9IE5VTEw7CisJCQlzdGF0dXMgPSAtRUJBREY7CisJCX0KKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRUJBREY7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBuYW1lX2hhc2ggPT09PT09PT0KKyAqLworc3RhdGljIHUxNiBuYW1lX2hhc2godm9pZCAqa2V5LCB1MTYgbWF4X2J1Y2tldCkKK3sKKwl1MTYgcmV0OworCXUxNiBoYXNoOworCWNoYXIgKm5hbWUgPSAoY2hhciAqKWtleTsKKworCURCQ19SRVFVSVJFKG5hbWUgIT0gTlVMTCk7CisKKwloYXNoID0gMDsKKworCXdoaWxlICgqbmFtZSkgeworCQloYXNoIDw8PSAxOworCQloYXNoIF49ICpuYW1lKys7CisJfQorCisJcmV0ID0gaGFzaCAlIG1heF9idWNrZXQ7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogID09PT09PT09IG5hbWVfbWF0Y2ggPT09PT09PT0KKyAqLworc3RhdGljIGJvb2wgbmFtZV9tYXRjaCh2b2lkICprZXksIHZvaWQgKnNwKQoreworCURCQ19SRVFVSVJFKGtleSAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShzcCAhPSBOVUxMKTsKKworCWlmICgoa2V5ICE9IE5VTEwpICYmIChzcCAhPSBOVUxMKSkgeworCQlpZiAoc3RyY21wKChjaGFyICopa2V5LCAoKHN0cnVjdCBkYmxsX3N5bWJvbCAqKXNwKS0+bmFtZSkgPT0KKwkJICAgIDApCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogID09PT09PT09IG5vX29wID09PT09PT09CisgKi8KK3N0YXRpYyBpbnQgbm9fb3Aoc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemUgKnRoaXNwdHIsIHZvaWQgKmJ1ZnIsCisJCSBsZHJfYWRkciBsb2NuLCBzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqaW5mbywgdW5zaWduZWQgYnl0c2l6ZSkKK3sKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqICA9PT09PT09PSBzeW1fZGVsZXRlID09PT09PT09CisgKi8KK3N0YXRpYyB2b2lkIHN5bV9kZWxldGUodm9pZCAqdmFsdWUpCit7CisJc3RydWN0IGRibGxfc3ltYm9sICpzcCA9IChzdHJ1Y3QgZGJsbF9zeW1ib2wgKil2YWx1ZTsKKworCWtmcmVlKHNwLT5uYW1lKTsKK30KKworLyoKKyAqICBEeW5hbWljIExvYWRlciBGdW5jdGlvbnMKKyAqLworCisvKiBkeW5hbWljX2xvYWRlcl9zdHJlYW0gKi8KKy8qCisgKiAgPT09PT09PT0gZGJsbF9yZWFkX2J1ZmZlciA9PT09PT09PQorICovCitzdGF0aWMgaW50IGRibGxfcmVhZF9idWZmZXIoc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N0cmVhbSAqdGhpcywgdm9pZCAqYnVmZmVyLAorCQkJICAgIHVuc2lnbmVkIGJ1ZnNpemUpCit7CisJc3RydWN0IGRibGxfc3RyZWFtICpwc3RyZWFtID0gKHN0cnVjdCBkYmxsX3N0cmVhbSAqKXRoaXM7CisJc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYjsKKwlpbnQgYnl0ZXNfcmVhZCA9IDA7CisKKwlEQkNfUkVRVUlSRSh0aGlzICE9IE5VTEwpOworCWxpYiA9IHBzdHJlYW0tPmxpYjsKKwlEQkNfUkVRVUlSRShsaWIpOworCisJaWYgKGxpYiAhPSBOVUxMKSB7CisJCWJ5dGVzX3JlYWQgPQorCQkgICAgKCoobGliLT50YXJnZXRfb2JqLT5hdHRycy5mcmVhZCkpIChidWZmZXIsIDEsIGJ1ZnNpemUsCisJCQkJCQkgICAgICAgbGliLT5mcCk7CisJfQorCXJldHVybiBieXRlc19yZWFkOworfQorCisvKgorICogID09PT09PT09IGRibGxfc2V0X2ZpbGVfcG9zbiA9PT09PT09PQorICovCitzdGF0aWMgaW50IGRibGxfc2V0X2ZpbGVfcG9zbihzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3RyZWFtICp0aGlzLAorCQkJICAgICAgdW5zaWduZWQgaW50IHBvcykKK3sKKwlzdHJ1Y3QgZGJsbF9zdHJlYW0gKnBzdHJlYW0gPSAoc3RydWN0IGRibGxfc3RyZWFtICopdGhpczsKKwlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliOworCWludCBzdGF0dXMgPSAwOwkJLyogU3VjY2VzcyAqLworCisJREJDX1JFUVVJUkUodGhpcyAhPSBOVUxMKTsKKwlsaWIgPSBwc3RyZWFtLT5saWI7CisJREJDX1JFUVVJUkUobGliKTsKKworCWlmIChsaWIgIT0gTlVMTCkgeworCQlzdGF0dXMgPSAoKihsaWItPnRhcmdldF9vYmotPmF0dHJzLmZzZWVrKSkgKGxpYi0+ZnAsIChsb25nKXBvcywKKwkJCQkJCQkgICAgU0VFS19TRVQpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIGR5bmFtaWNfbG9hZGVyX3N5bSAqLworCisvKgorICogID09PT09PT09IGRibGxfZmluZF9zeW1ib2wgPT09PT09PT0KKyAqLworc3RhdGljIHN0cnVjdCBkeW5sb2FkX3N5bWJvbCAqZGJsbF9maW5kX3N5bWJvbChzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3ltICp0aGlzLAorCQkJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZHlubG9hZF9zeW1ib2wgKnJldF9zeW07CisJc3RydWN0IGxkcl9zeW1ib2wgKmxkcl9zeW0gPSAoc3RydWN0IGxkcl9zeW1ib2wgKil0aGlzOworCXN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWI7CisJc3RydWN0IGRibGxfc3ltX3ZhbCAqZGJsbF9zeW0gPSBOVUxMOworCWJvb2wgc3RhdHVzID0gZmFsc2U7CS8qIFN5bWJvbCBub3QgZm91bmQgeWV0ICovCisKKwlEQkNfUkVRVUlSRSh0aGlzICE9IE5VTEwpOworCWxpYiA9IGxkcl9zeW0tPmxpYjsKKwlEQkNfUkVRVUlSRShsaWIpOworCisJaWYgKGxpYiAhPSBOVUxMKSB7CisJCWlmIChsaWItPnRhcmdldF9vYmotPmF0dHJzLnN5bV9sb29rdXApIHsKKwkJCS8qIENoZWNrIGN1cnJlbnQgbGliICsgYmFzZSBsaWIgKyBkZXAgbGliICsKKwkJCSAqIHBlcnNpc3RlbnQgbGliICovCisJCQlzdGF0dXMgPSAoKihsaWItPnRhcmdldF9vYmotPmF0dHJzLnN5bV9sb29rdXApKQorCQkJICAgIChsaWItPnRhcmdldF9vYmotPmF0dHJzLnN5bV9oYW5kbGUsCisJCQkgICAgIGxpYi0+dGFyZ2V0X29iai0+YXR0cnMuc3ltX2FyZywKKwkJCSAgICAgbGliLT50YXJnZXRfb2JqLT5hdHRycy5ybW1faGFuZGxlLCBuYW1lLAorCQkJICAgICAmZGJsbF9zeW0pOworCQl9IGVsc2UgeworCQkJLyogSnVzdCBjaGVjayBjdXJyZW50IGxpYiBmb3Igc3ltYm9sICovCisJCQlzdGF0dXMgPSBkYmxsX2dldF9hZGRyKChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqKWxpYiwKKwkJCQkJICAgICAgIChjaGFyICopbmFtZSwgJmRibGxfc3ltKTsKKwkJCWlmICghc3RhdHVzKSB7CisJCQkJc3RhdHVzID0KKwkJCQkgICAgZGJsbF9nZXRfY19hZGRyKChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqKQorCQkJCQkJICAgIGxpYiwgKGNoYXIgKiluYW1lLAorCQkJCQkJICAgICZkYmxsX3N5bSk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoIXN0YXR1cyAmJiBnYmxfc2VhcmNoKQorCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBTeW1ib2wgbm90IGZvdW5kOiAlc1xuIiwgX19mdW5jX18sIG5hbWUpOworCisJREJDX0FTU0VSVCgoc3RhdHVzICYmIChkYmxsX3N5bSAhPSBOVUxMKSkKKwkJICAgfHwgKCFzdGF0dXMgJiYgKGRibGxfc3ltID09IE5VTEwpKSk7CisKKwlyZXRfc3ltID0gKHN0cnVjdCBkeW5sb2FkX3N5bWJvbCAqKWRibGxfc3ltOworCXJldHVybiByZXRfc3ltOworfQorCisvKgorICogID09PT09PT09IGZpbmRfaW5fc3ltYm9sX3RhYmxlID09PT09PT09CisgKi8KK3N0YXRpYyBzdHJ1Y3QgZHlubG9hZF9zeW1ib2wgKmZpbmRfaW5fc3ltYm9sX3RhYmxlKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0KKwkJCQkJCSAgICp0aGlzLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkJICAgdW5zaWduZWQgbW9kdWxlaWQpCit7CisJc3RydWN0IGR5bmxvYWRfc3ltYm9sICpyZXRfc3ltOworCXN0cnVjdCBsZHJfc3ltYm9sICpsZHJfc3ltID0gKHN0cnVjdCBsZHJfc3ltYm9sICopdGhpczsKKwlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliOworCXN0cnVjdCBkYmxsX3N5bWJvbCAqc3ltOworCisJREJDX1JFUVVJUkUodGhpcyAhPSBOVUxMKTsKKwlsaWIgPSBsZHJfc3ltLT5saWI7CisJREJDX1JFUVVJUkUobGliKTsKKwlEQkNfUkVRVUlSRShsaWItPnN5bV90YWIgIT0gTlVMTCk7CisKKwlzeW0gPSAoc3RydWN0IGRibGxfc3ltYm9sICopZ2hfZmluZChsaWItPnN5bV90YWIsIChjaGFyICopbmFtZSk7CisKKwlyZXRfc3ltID0gKHN0cnVjdCBkeW5sb2FkX3N5bWJvbCAqKSZzeW0tPnZhbHVlOworCXJldHVybiByZXRfc3ltOworfQorCisvKgorICogID09PT09PT09IGRibGxfYWRkX3RvX3N5bWJvbF90YWJsZSA9PT09PT09PQorICovCitzdGF0aWMgc3RydWN0IGR5bmxvYWRfc3ltYm9sICpkYmxsX2FkZF90b19zeW1ib2xfdGFibGUoc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bQorCQkJCQkJICAgICAgICp0aGlzLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkJICAgICAgIHVuc2lnbmVkIG1vZHVsZV9pZCkKK3sKKwlzdHJ1Y3QgZGJsbF9zeW1ib2wgKnN5bV9wdHIgPSBOVUxMOworCXN0cnVjdCBkYmxsX3N5bWJvbCBzeW1ib2w7CisJc3RydWN0IGR5bmxvYWRfc3ltYm9sICpkYmxsX3N5bSA9IE5VTEw7CisJc3RydWN0IGxkcl9zeW1ib2wgKmxkcl9zeW0gPSAoc3RydWN0IGxkcl9zeW1ib2wgKil0aGlzOworCXN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWI7CisJc3RydWN0IGR5bmxvYWRfc3ltYm9sICpyZXQ7CisKKwlEQkNfUkVRVUlSRSh0aGlzICE9IE5VTEwpOworCURCQ19SRVFVSVJFKG5hbWUpOworCWxpYiA9IGxkcl9zeW0tPmxpYjsKKwlEQkNfUkVRVUlSRShsaWIpOworCisJLyogQ2hlY2sgdG8gc2VlIGlmIHN5bWJvbCBpcyBhbHJlYWR5IGRlZmluZWQgaW4gc3ltYm9sIHRhYmxlICovCisJaWYgKCEobGliLT50YXJnZXRfb2JqLT5hdHRycy5iYXNlX2ltYWdlKSkgeworCQlnYmxfc2VhcmNoID0gZmFsc2U7CisJCWRibGxfc3ltID0gZGJsbF9maW5kX3N5bWJvbCh0aGlzLCBuYW1lKTsKKwkJZ2JsX3NlYXJjaCA9IHRydWU7CisJCWlmIChkYmxsX3N5bSkgeworCQkJcmVkZWZpbmVkX3N5bWJvbCA9IHRydWU7CisJCQlkZXZfZGJnKGJyaWRnZSwgIiVzIGFscmVhZHkgZGVmaW5lZCBpbiBzeW1ib2wgdGFibGVcbiIsCisJCQkJbmFtZSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKwkvKiBBbGxvY2F0ZSBzdHJpbmcgdG8gY29weSBzeW1ib2wgbmFtZSAqLworCXN5bWJvbC5uYW1lID0ga3phbGxvYyhzdHJsZW4oKGNoYXIgKmNvbnN0KW5hbWUpICsgMSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN5bWJvbC5uYW1lID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJaWYgKHN5bWJvbC5uYW1lICE9IE5VTEwpIHsKKwkJLyogSnVzdCBjb3B5IG5hbWUgKHZhbHVlIHdpbGwgYmUgZmlsbGVkIGluIGJ5IGR5bmFtaWMgbG9hZGVyKSAqLworCQlzdHJuY3B5KHN5bWJvbC5uYW1lLCAoY2hhciAqY29uc3QpbmFtZSwKKwkJCXN0cmxlbigoY2hhciAqY29uc3QpbmFtZSkgKyAxKTsKKworCQkvKiBBZGQgc3ltYm9sIHRvIHN5bWJvbCB0YWJsZSAqLworCQlzeW1fcHRyID0KKwkJICAgIChzdHJ1Y3QgZGJsbF9zeW1ib2wgKilnaF9pbnNlcnQobGliLT5zeW1fdGFiLCAodm9pZCAqKW5hbWUsCisJCQkJCQkgICAgKHZvaWQgKikmc3ltYm9sKTsKKwkJaWYgKHN5bV9wdHIgPT0gTlVMTCkKKwkJCWtmcmVlKHN5bWJvbC5uYW1lKTsKKworCX0KKwlpZiAoc3ltX3B0ciAhPSBOVUxMKQorCQlyZXQgPSAoc3RydWN0IGR5bmxvYWRfc3ltYm9sICopJnN5bV9wdHItPnZhbHVlOworCWVsc2UKKwkJcmV0ID0gTlVMTDsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF9wdXJnZV9zeW1ib2xfdGFibGUgPT09PT09PT0KKyAqLworc3RhdGljIHZvaWQgZGJsbF9wdXJnZV9zeW1ib2xfdGFibGUoc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAqdGhpcywKKwkJCQkgICAgdW5zaWduZWQgbW9kdWxlX2lkKQoreworCXN0cnVjdCBsZHJfc3ltYm9sICpsZHJfc3ltID0gKHN0cnVjdCBsZHJfc3ltYm9sICopdGhpczsKKwlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliOworCisJREJDX1JFUVVJUkUodGhpcyAhPSBOVUxMKTsKKwlsaWIgPSBsZHJfc3ltLT5saWI7CisJREJDX1JFUVVJUkUobGliKTsKKworCS8qIE1heSBub3QgbmVlZCB0byBkbyBhbnl0aGluZyAqLworfQorCisvKgorICogID09PT09PT09IGFsbG9jYXRlID09PT09PT09CisgKi8KK3N0YXRpYyB2b2lkICphbGxvY2F0ZShzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3ltICp0aGlzLCB1bnNpZ25lZCBtZW1zaXplKQoreworCXN0cnVjdCBsZHJfc3ltYm9sICpsZHJfc3ltID0gKHN0cnVjdCBsZHJfc3ltYm9sICopdGhpczsKKwlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliOworCXZvaWQgKmJ1ZjsKKworCURCQ19SRVFVSVJFKHRoaXMgIT0gTlVMTCk7CisJbGliID0gbGRyX3N5bS0+bGliOworCURCQ19SRVFVSVJFKGxpYik7CisKKwlidWYgPSBremFsbG9jKG1lbXNpemUsIEdGUF9LRVJORUwpOworCisJcmV0dXJuIGJ1ZjsKK30KKworLyoKKyAqICA9PT09PT09PSBkZWFsbG9jYXRlID09PT09PT09CisgKi8KK3N0YXRpYyB2b2lkIGRlYWxsb2NhdGUoc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAqdGhpcywgdm9pZCAqbWVtX3B0cikKK3sKKwlzdHJ1Y3QgbGRyX3N5bWJvbCAqbGRyX3N5bSA9IChzdHJ1Y3QgbGRyX3N5bWJvbCAqKXRoaXM7CisJc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYjsKKworCURCQ19SRVFVSVJFKHRoaXMgIT0gTlVMTCk7CisJbGliID0gbGRyX3N5bS0+bGliOworCURCQ19SRVFVSVJFKGxpYik7CisKKwlrZnJlZShtZW1fcHRyKTsKK30KKworLyoKKyAqICA9PT09PT09PSBkYmxsX2Vycl9yZXBvcnQgPT09PT09PT0KKyAqLworc3RhdGljIHZvaWQgZGJsbF9lcnJfcmVwb3J0KHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0gKnRoaXMsIGNvbnN0IGNoYXIgKmVycnN0ciwKKwkJCSAgICB2YV9saXN0IGFyZ3MpCit7CisJc3RydWN0IGxkcl9zeW1ib2wgKmxkcl9zeW0gPSAoc3RydWN0IGxkcl9zeW1ib2wgKil0aGlzOworCXN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWI7CisJY2hhciB0ZW1wX2J1ZltNQVhFWFBSXTsKKworCURCQ19SRVFVSVJFKHRoaXMgIT0gTlVMTCk7CisJbGliID0gbGRyX3N5bS0+bGliOworCURCQ19SRVFVSVJFKGxpYik7CisJdnNucHJpbnRmKChjaGFyICopdGVtcF9idWYsIE1BWEVYUFIsIChjaGFyICopZXJyc3RyLCBhcmdzKTsKKwlkZXZfZGJnKGJyaWRnZSwgIiVzXG4iLCB0ZW1wX2J1Zik7Cit9CisKKy8qIGR5bmFtaWNfbG9hZGVyX2FsbG9jYXRlICovCisKKy8qCisgKiAgPT09PT09PT0gZGJsbF9ybW1fYWxsb2MgPT09PT09PT0KKyAqLworc3RhdGljIGludCBkYmxsX3JtbV9hbGxvYyhzdHJ1Y3QgZHluYW1pY19sb2FkZXJfYWxsb2NhdGUgKnRoaXMsCisJCQkgIHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICppbmZvLCB1bnNpZ25lZCBhbGlnbikKK3sKKwlzdHJ1Y3QgZGJsbF9hbGxvYyAqZGJsbF9hbGxvY19vYmogPSAoc3RydWN0IGRibGxfYWxsb2MgKil0aGlzOworCXN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWI7CisJaW50IHN0YXR1cyA9IDA7CisJdTMyIG1lbV9zZWN0X3R5cGU7CisJc3RydWN0IHJtbV9hZGRyIHJtbV9hZGRyX29iajsKKwlzMzIgcmV0ID0gdHJ1ZTsKKwl1bnNpZ25lZCBzdHlwZSA9IERMT0FEX1NFQ1RJT05fVFlQRShpbmZvLT50eXBlKTsKKwljaGFyICp0b2tlbiA9IE5VTEw7CisJY2hhciAqc3pfc2VjX2xhc3RfdG9rZW4gPSBOVUxMOworCWNoYXIgKnN6X2xhc3RfdG9rZW4gPSBOVUxMOworCWNoYXIgKnN6X3NlY3RfbmFtZSA9IE5VTEw7CisJY2hhciAqcHN6X2N1cjsKKwlzMzIgdG9rZW5fbGVuID0gMDsKKwlzMzIgc2VnX2lkID0gLTE7CisJczMyIHJlcSA9IC0xOworCXMzMiBjb3VudCA9IDA7CisJdTMyIGFsbG9jX3NpemUgPSAwOworCXUzMiBydW5fYWRkcl9mbGFnID0gMDsKKworCURCQ19SRVFVSVJFKHRoaXMgIT0gTlVMTCk7CisJbGliID0gZGJsbF9hbGxvY19vYmotPmxpYjsKKwlEQkNfUkVRVUlSRShsaWIpOworCisJbWVtX3NlY3RfdHlwZSA9CisJICAgIChzdHlwZSA9PSBETE9BRF9URVhUKSA/IERCTExfQ09ERSA6IChzdHlwZSA9PQorCQkJCQkJIERMT0FEX0JTUykgPyBEQkxMX0JTUyA6CisJICAgIERCTExfREFUQTsKKworCS8qIEF0dGVtcHQgdG8gZXh0cmFjdCB0aGUgc2VnbWVudCBJRCBhbmQgcmVxdWlyZW1lbnQgaW5mb3JtYXRpb24gZnJvbQorCSAgIHRoZSBuYW1lIG9mIHRoZSBzZWN0aW9uICovCisJREJDX1JFUVVJUkUoaW5mby0+bmFtZSk7CisJdG9rZW5fbGVuID0gc3RybGVuKChjaGFyICopKGluZm8tPm5hbWUpKSArIDE7CisKKwlzel9zZWN0X25hbWUgPSBremFsbG9jKHRva2VuX2xlbiwgR0ZQX0tFUk5FTCk7CisJc3pfbGFzdF90b2tlbiA9IGt6YWxsb2ModG9rZW5fbGVuLCBHRlBfS0VSTkVMKTsKKwlzel9zZWNfbGFzdF90b2tlbiA9IGt6YWxsb2ModG9rZW5fbGVuLCBHRlBfS0VSTkVMKTsKKworCWlmIChzel9zZWN0X25hbWUgPT0gTlVMTCB8fCBzel9zZWNfbGFzdF90b2tlbiA9PSBOVUxMIHx8CisJICAgIHN6X2xhc3RfdG9rZW4gPT0gTlVMTCkgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGZ1bmNfY29udDsKKwl9CisJc3RybmNweShzel9zZWN0X25hbWUsIChjaGFyICopKGluZm8tPm5hbWUpLCB0b2tlbl9sZW4pOworCXBzel9jdXIgPSBzel9zZWN0X25hbWU7CisJd2hpbGUgKCh0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgIjoiKSkgJiYgKnRva2VuICE9ICdcMCcpIHsKKwkJc3RybmNweShzel9zZWNfbGFzdF90b2tlbiwgc3pfbGFzdF90b2tlbiwKKwkJCXN0cmxlbihzel9sYXN0X3Rva2VuKSArIDEpOworCQlzdHJuY3B5KHN6X2xhc3RfdG9rZW4sIHRva2VuLCBzdHJsZW4odG9rZW4pICsgMSk7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCAiOiIpOworCQljb3VudCsrOwkvKiBvcHRpbWl6ZXMgcHJvY2Vzc2luZyAqLworCX0KKwkvKiBJZiB0b2tlbiBpcyAwIG9yIDEsIGFuZCBzel9zZWNfbGFzdF90b2tlbiBpcyBEWU5fREFSQU0gb3IgRFlOX1NBUkFNLAorCSAgIG9yIERZTl9FWFRFUk5BTCwgdGhlbiBtZW0gZ3JhbnVsYXJpdHkgaW5mb3JtYXRpb24gaXMgcHJlc2VudAorCSAgIHdpdGhpbiB0aGUgc2VjdGlvbiBuYW1lIC0gb25seSBwcm9jZXNzIGlmIHRoZXJlIGFyZSBhdCBsZWFzdCB0aHJlZQorCSAgIHRva2VucyB3aXRoaW4gdGhlIHNlY3Rpb24gbmFtZSAoanVzdCBhIG1pbm9yIG9wdGltaXphdGlvbikgKi8KKwlpZiAoY291bnQgPj0gMykKKwkJc3RyaWN0X3N0cnRvbChzel9sYXN0X3Rva2VuLCAxMCwgKGxvbmcgKikmcmVxKTsKKworCWlmICgocmVxID09IDApIHx8IChyZXEgPT0gMSkpIHsKKwkJaWYgKHN0cmNtcChzel9zZWNfbGFzdF90b2tlbiwgIkRZTl9EQVJBTSIpID09IDApIHsKKwkJCXNlZ19pZCA9IDA7CisJCX0gZWxzZSB7CisJCQlpZiAoc3RyY21wKHN6X3NlY19sYXN0X3Rva2VuLCAiRFlOX1NBUkFNIikgPT0gMCkgeworCQkJCXNlZ19pZCA9IDE7CisJCQl9IGVsc2UgeworCQkJCWlmIChzdHJjbXAoc3pfc2VjX2xhc3RfdG9rZW4sCisJCQkJCSAgICJEWU5fRVhURVJOQUwiKSA9PSAwKQorCQkJCQlzZWdfaWQgPSAyOworCQkJfQorCQl9CisJfQorZnVuY19jb250OgorCWtmcmVlKHN6X3NlY3RfbmFtZSk7CisJc3pfc2VjdF9uYW1lID0gTlVMTDsKKwlrZnJlZShzel9sYXN0X3Rva2VuKTsKKwlzel9sYXN0X3Rva2VuID0gTlVMTDsKKwlrZnJlZShzel9zZWNfbGFzdF90b2tlbik7CisJc3pfc2VjX2xhc3RfdG9rZW4gPSBOVUxMOworCisJaWYgKG1lbV9zZWN0X3R5cGUgPT0gREJMTF9DT0RFKQorCQlhbGxvY19zaXplID0gaW5mby0+c2l6ZSArIEdFTV9MMVBfUFJFRkVUQ0hfU0laRTsKKwllbHNlCisJCWFsbG9jX3NpemUgPSBpbmZvLT5zaXplOworCisJaWYgKGluZm8tPmxvYWRfYWRkciAhPSBpbmZvLT5ydW5fYWRkcikKKwkJcnVuX2FkZHJfZmxhZyA9IDE7CisJLyogVE9ETyAtIGlkZWFsbHksIHdlIGNhbiBwYXNzIHRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgYWxzbworCSAqIGZyb20gaGVyZSAqLworCWlmIChsaWIgIT0gTlVMTCkgeworCQlzdGF0dXMgPQorCQkgICAgKGxpYi0+dGFyZ2V0X29iai0+YXR0cnMuYWxsb2MpIChsaWItPnRhcmdldF9vYmotPmF0dHJzLgorCQkJCQkJICAgIHJtbV9oYW5kbGUsIG1lbV9zZWN0X3R5cGUsCisJCQkJCQkgICAgYWxsb2Nfc2l6ZSwgYWxpZ24sCisJCQkJCQkgICAgKHUzMiAqKSAmcm1tX2FkZHJfb2JqLAorCQkJCQkJICAgIHNlZ19pZCwgcmVxLCBmYWxzZSk7CisJfQorCWlmIChzdGF0dXMpIHsKKwkJcmV0ID0gZmFsc2U7CisJfSBlbHNlIHsKKwkJLyogUk1NIGdpdmVzIHdvcmQgYWRkcmVzcy4gTmVlZCB0byBjb252ZXJ0IHRvIGJ5dGUgYWRkcmVzcyAqLworCQlpbmZvLT5sb2FkX2FkZHIgPSBybW1fYWRkcl9vYmouYWRkciAqIERTUFdPUkRTSVpFOworCQlpZiAoIXJ1bl9hZGRyX2ZsYWcpCisJCQlpbmZvLT5ydW5fYWRkciA9IGluZm8tPmxvYWRfYWRkcjsKKwkJaW5mby0+Y29udGV4dCA9ICh1MzIpIHJtbV9hZGRyX29iai5zZWdpZDsKKwkJZGV2X2RiZyhicmlkZ2UsICIlczogJXMgYmFzZSA9IDB4JXggbGVuID0gMHgleCwgIgorCQkJImluZm8tPnJ1bl9hZGRyIDB4JXgsIGluZm8tPmxvYWRfYWRkciAweCV4XG4iLAorCQkJX19mdW5jX18sIGluZm8tPm5hbWUsIGluZm8tPmxvYWRfYWRkciAvIERTUFdPUkRTSVpFLAorCQkJaW5mby0+c2l6ZSAvIERTUFdPUkRTSVpFLCBpbmZvLT5ydW5fYWRkciwKKwkJCWluZm8tPmxvYWRfYWRkcik7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiAgPT09PT09PT0gcm1tX2RlYWxsb2MgPT09PT09PT0KKyAqLworc3RhdGljIHZvaWQgcm1tX2RlYWxsb2Moc3RydWN0IGR5bmFtaWNfbG9hZGVyX2FsbG9jYXRlICp0aGlzLAorCQkJc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKmluZm8pCit7CisJc3RydWN0IGRibGxfYWxsb2MgKmRibGxfYWxsb2Nfb2JqID0gKHN0cnVjdCBkYmxsX2FsbG9jICopdGhpczsKKwlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliOworCXUzMiBzZWdpZDsKKwlpbnQgc3RhdHVzID0gMDsKKwl1bnNpZ25lZCBzdHlwZSA9IERMT0FEX1NFQ1RJT05fVFlQRShpbmZvLT50eXBlKTsKKwl1MzIgbWVtX3NlY3RfdHlwZTsKKwl1MzIgZnJlZV9zaXplID0gMDsKKworCW1lbV9zZWN0X3R5cGUgPQorCSAgICAoc3R5cGUgPT0gRExPQURfVEVYVCkgPyBEQkxMX0NPREUgOiAoc3R5cGUgPT0KKwkJCQkJCSBETE9BRF9CU1MpID8gREJMTF9CU1MgOgorCSAgICBEQkxMX0RBVEE7CisJREJDX1JFUVVJUkUodGhpcyAhPSBOVUxMKTsKKwlsaWIgPSBkYmxsX2FsbG9jX29iai0+bGliOworCURCQ19SRVFVSVJFKGxpYik7CisJLyogc2VnaWQgd2FzIHNldCBieSBhbGxvYyBmdW5jdGlvbiAqLworCXNlZ2lkID0gKHUzMikgaW5mby0+Y29udGV4dDsKKwlpZiAobWVtX3NlY3RfdHlwZSA9PSBEQkxMX0NPREUpCisJCWZyZWVfc2l6ZSA9IGluZm8tPnNpemUgKyBHRU1fTDFQX1BSRUZFVENIX1NJWkU7CisJZWxzZQorCQlmcmVlX3NpemUgPSBpbmZvLT5zaXplOworCWlmIChsaWIgIT0gTlVMTCkgeworCQlzdGF0dXMgPQorCQkgICAgKGxpYi0+dGFyZ2V0X29iai0+YXR0cnMuZnJlZSkgKGxpYi0+dGFyZ2V0X29iai0+YXR0cnMuCisJCQkJCQkgICBzeW1faGFuZGxlLCBzZWdpZCwKKwkJCQkJCSAgIGluZm8tPmxvYWRfYWRkciAvCisJCQkJCQkgICBEU1BXT1JEU0laRSwgZnJlZV9zaXplLAorCQkJCQkJICAgZmFsc2UpOworCX0KK30KKworLyogZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqLworLyoKKyAqICA9PT09PT09PSBjb25uZWN0ID09PT09PT09CisgKi8KK3N0YXRpYyBpbnQgY29ubmVjdChzdHJ1Y3QgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqdGhpcykKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqICA9PT09PT09PSByZWFkX21lbSA9PT09PT09PQorICogIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgbmVlZCB0byBiZSBpbXBsZW1lbnRlZC4KKyAqLworc3RhdGljIGludCByZWFkX21lbShzdHJ1Y3QgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqdGhpcywgdm9pZCAqYnVmLAorCQkgICAgbGRyX2FkZHIgYWRkciwgc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKmluZm8sCisJCSAgICB1bnNpZ25lZCBuYnl0ZXMpCit7CisJc3RydWN0IGRibGxfaW5pdF9vYmogKmluaXRfb2JqID0gKHN0cnVjdCBkYmxsX2luaXRfb2JqICopdGhpczsKKwlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliOworCWludCBieXRlc19yZWFkID0gMDsKKworCURCQ19SRVFVSVJFKHRoaXMgIT0gTlVMTCk7CisJbGliID0gaW5pdF9vYmotPmxpYjsKKwlEQkNfUkVRVUlSRShsaWIpOworCS8qIE5lZWQgYnJpZGdlX2JyZF9yZWFkIGZ1bmN0aW9uICovCisJcmV0dXJuIGJ5dGVzX3JlYWQ7Cit9CisKKy8qCisgKiAgPT09PT09PT0gd3JpdGVfbWVtID09PT09PT09CisgKi8KK3N0YXRpYyBpbnQgd3JpdGVfbWVtKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICp0aGlzLCB2b2lkICpidWYsCisJCSAgICAgbGRyX2FkZHIgYWRkciwgc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKmluZm8sCisJCSAgICAgdW5zaWduZWQgYnl0ZXMpCit7CisJc3RydWN0IGRibGxfaW5pdF9vYmogKmluaXRfb2JqID0gKHN0cnVjdCBkYmxsX2luaXRfb2JqICopdGhpczsKKwlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliOworCXN0cnVjdCBkYmxsX3Rhcl9vYmogKnRhcmdldF9vYmo7CisJc3RydWN0IGRibGxfc2VjdF9pbmZvIHNlY3RfaW5mbzsKKwl1MzIgbWVtX3NlY3RfdHlwZTsKKwlib29sIHJldCA9IHRydWU7CisKKwlEQkNfUkVRVUlSRSh0aGlzICE9IE5VTEwpOworCWxpYiA9IGluaXRfb2JqLT5saWI7CisJaWYgKCFsaWIpCisJCXJldHVybiBmYWxzZTsKKworCXRhcmdldF9vYmogPSBsaWItPnRhcmdldF9vYmo7CisKKwltZW1fc2VjdF90eXBlID0KKwkgICAgKERMT0FEX1NFQ1RJT05fVFlQRShpbmZvLT50eXBlKSA9PQorCSAgICAgRExPQURfVEVYVCkgPyBEQkxMX0NPREUgOiBEQkxMX0RBVEE7CisJaWYgKHRhcmdldF9vYmogJiYgdGFyZ2V0X29iai0+YXR0cnMud3JpdGUpIHsKKwkJcmV0ID0KKwkJICAgICgqdGFyZ2V0X29iai0+YXR0cnMud3JpdGUpICh0YXJnZXRfb2JqLT5hdHRycy5pbnB1dF9wYXJhbXMsCisJCQkJCQlhZGRyLCBidWYsIGJ5dGVzLAorCQkJCQkJbWVtX3NlY3RfdHlwZSk7CisKKwkJaWYgKHRhcmdldF9vYmotPmF0dHJzLmxvZ193cml0ZSkgeworCQkJc2VjdF9pbmZvLm5hbWUgPSBpbmZvLT5uYW1lOworCQkJc2VjdF9pbmZvLnNlY3RfcnVuX2FkZHIgPSBpbmZvLT5ydW5fYWRkcjsKKwkJCXNlY3RfaW5mby5zZWN0X2xvYWRfYWRkciA9IGluZm8tPmxvYWRfYWRkcjsKKwkJCXNlY3RfaW5mby5zaXplID0gaW5mby0+c2l6ZTsKKwkJCXNlY3RfaW5mby50eXBlID0gbWVtX3NlY3RfdHlwZTsKKwkJCS8qIFBhc3MgdGhlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgd2UndmUgd3JpdHRlbiB0bworCQkJICogYW5vdGhlciBtb2R1bGUgKi8KKwkJCSgqdGFyZ2V0X29iai0+YXR0cnMubG9nX3dyaXRlKSAodGFyZ2V0X29iai0+YXR0cnMuCisJCQkJCQkJbG9nX3dyaXRlX2hhbmRsZSwKKwkJCQkJCQkmc2VjdF9pbmZvLCBhZGRyLAorCQkJCQkJCWJ5dGVzKTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCisvKgorICogID09PT09PT09IGZpbGxfbWVtID09PT09PT09CisgKiAgRmlsbCBieXRlcyBvZiBtZW1vcnkgYXQgYSBnaXZlbiBhZGRyZXNzIHdpdGggYSBnaXZlbiB2YWx1ZSBieQorICogIHdyaXRpbmcgZnJvbSBhIGJ1ZmZlciBjb250YWluaW5nIHRoZSBnaXZlbiB2YWx1ZS4gIFdyaXRlIGluCisgKiAgc2V0cyBvZiBNQVhFWFBSICgxMjgpIGJ5dGVzIHRvIGF2b2lkIGxhcmdlIHN0YWNrIGJ1ZmZlciBpc3N1ZXMuCisgKi8KK3N0YXRpYyBpbnQgZmlsbF9tZW0oc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemUgKnRoaXMsIGxkcl9hZGRyIGFkZHIsCisJCSAgICBzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqaW5mbywgdW5zaWduZWQgYnl0ZXMsIHVuc2lnbmVkIHZhbCkKK3sKKwlib29sIHJldCA9IHRydWU7CisJY2hhciAqcGJ1ZjsKKwlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliOworCXN0cnVjdCBkYmxsX2luaXRfb2JqICppbml0X29iaiA9IChzdHJ1Y3QgZGJsbF9pbml0X29iaiAqKXRoaXM7CisKKwlEQkNfUkVRVUlSRSh0aGlzICE9IE5VTEwpOworCWxpYiA9IGluaXRfb2JqLT5saWI7CisJcGJ1ZiA9IE5VTEw7CisJLyogUGFzcyB0aGUgTlVMTCBwb2ludGVyIHRvIHdyaXRlX21lbSB0byBnZXQgdGhlIHN0YXJ0IGFkZHJlc3Mgb2YgU2hhcmVkCisJICAgbWVtb3J5LiBUaGlzIGlzIGEgdHJpY2sgdG8ganVzdCBnZXQgdGhlIHN0YXJ0IGFkZHJlc3MsIHRoZXJlIGlzIG5vCisJICAgd3JpdGluZyB0YWtpbmcgcGxhY2Ugd2l0aCB0aGlzIFdyaXRlbWVtCisJICovCisJaWYgKChsaWItPnRhcmdldF9vYmotPmF0dHJzLndyaXRlKSAhPSAoZGJsbF93cml0ZV9meG4pIG5vX29wKQorCQl3cml0ZV9tZW0odGhpcywgJnBidWYsIGFkZHIsIGluZm8sIDApOworCWlmIChwYnVmKQorCQltZW1zZXQocGJ1ZiwgdmFsLCBieXRlcyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogID09PT09PT09IGV4ZWN1dGUgPT09PT09PT0KKyAqLworc3RhdGljIGludCBleGVjdXRlKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICp0aGlzLCBsZHJfYWRkciBzdGFydCkKK3sKKwlzdHJ1Y3QgZGJsbF9pbml0X29iaiAqaW5pdF9vYmogPSAoc3RydWN0IGRibGxfaW5pdF9vYmogKil0aGlzOworCXN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWI7CisJYm9vbCByZXQgPSB0cnVlOworCisJREJDX1JFUVVJUkUodGhpcyAhPSBOVUxMKTsKKwlsaWIgPSBpbml0X29iai0+bGliOworCURCQ19SRVFVSVJFKGxpYik7CisJLyogU2F2ZSBlbnRyeSBwb2ludCAqLworCWlmIChsaWIgIT0gTlVMTCkKKwkJbGliLT5lbnRyeSA9ICh1MzIpIHN0YXJ0OworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqICA9PT09PT09PSByZWxlYXNlID09PT09PT09CisgKi8KK3N0YXRpYyB2b2lkIHJlbGVhc2Uoc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemUgKnRoaXMpCit7Cit9CisKKyNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfQkFDS1RSQUNFCisvKioKKyAqICBmaW5kX3N5bWJvbF9jb250ZXh0IC0gQmFzaWMgc3ltYm9sIGNvbnRleHQgc3RydWN0dXJlCisgKiBAYWRkcmVzczoJCVN5bWJvbCBBZHJlc3MKKyAqIEBvZmZzZXRfcmFuZ2U6CQlPZmZzZXQgcmFuZ2Ugd2hlcmUgdGhlIHNlYXJjaCBmb3IgdGhlIERTUCBzeW1ib2wKKyAqCQkJc3RhcnRlZC4KKyAqIEBjdXJfYmVzdF9vZmZzZXQ6CUJlc3Qgb2Zmc2V0IHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSBEU1Agc3ltYm9sCisgKiBAc3ltX2FkZHI6CQlBZGRyZXNzIG9mIHRoZSBEU1Agc3ltYm9sCisgKiBAbmFtZToJCVN5bWJvbCBuYW1lCisgKgorICovCitzdHJ1Y3QgZmluZF9zeW1ib2xfY29udGV4dCB7CisJLyogaW5wdXQgKi8KKwl1MzIgYWRkcmVzczsKKwl1MzIgb2Zmc2V0X3JhbmdlOworCS8qIHN0YXRlICovCisJdTMyIGN1cl9iZXN0X29mZnNldDsKKwkvKiBvdXRwdXQgKi8KKwl1MzIgc3ltX2FkZHI7CisJY2hhciBuYW1lWzEyMF07Cit9OworCisvKioKKyAqIGZpbmRfc3ltYm9sX2NhbGxiYWNrKCkgLSBWYWxpZGF0ZXMgc3ltYm9sIGFkZHJlc3MgYW5kIGNvcGllcyB0aGUgc3ltYm9sIG5hbWUKKyAqCQkJdG8gdGhlIHVzZXIgZGF0YS4KKyAqIEBlbGVtOgkJZHNwIGxpYnJhcnkgY29udGV4dAorICogQHVzZXJfZGF0YToJCUZpbmQgc3ltYm9sIGNvbnRleHQKKyAqCisgKi8KK3ZvaWQgZmluZF9zeW1ib2xfY2FsbGJhY2sodm9pZCAqZWxlbSwgdm9pZCAqdXNlcl9kYXRhKQoreworCXN0cnVjdCBkYmxsX3N5bWJvbCAqc3ltYm9sID0gZWxlbTsKKwlzdHJ1Y3QgZmluZF9zeW1ib2xfY29udGV4dCAqY29udGV4dCA9IHVzZXJfZGF0YTsKKwl1MzIgc3ltYm9sX2FkZHIgPSBzeW1ib2wtPnZhbHVlLnZhbHVlOworCXUzMiBvZmZzZXQgPSBjb250ZXh0LT5hZGRyZXNzIC0gc3ltYm9sX2FkZHI7CisKKwkvKgorCSAqIEFkZHJlc3MgZ2l2ZW4gc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiBzeW1ib2wgYWRkcmVzcywKKwkgKiBzeW1ib2wgYWRkcmVzcyBzaG91bGQgYmUgIHdpdGhpbiBzcGVjaWZpZWQgcmFuZ2UKKwkgKiBhbmQgdGhlIG9mZnNldCBzaG91bGQgYmUgYmV0dGVyIHRoYW4gcHJldmlvdXMgb25lCisJICovCisJaWYgKGNvbnRleHQtPmFkZHJlc3MgPj0gc3ltYm9sX2FkZHIgJiYgc3ltYm9sX2FkZHIgPCAodTMyKS0xICYmCisJCW9mZnNldCA8IGNvbnRleHQtPmN1cl9iZXN0X29mZnNldCkgeworCQljb250ZXh0LT5jdXJfYmVzdF9vZmZzZXQgPSBvZmZzZXQ7CisJCWNvbnRleHQtPnN5bV9hZGRyID0gc3ltYm9sX2FkZHI7CisJCXN0cm5jcHkoY29udGV4dC0+bmFtZSwgc3ltYm9sLT5uYW1lLCBzaXplb2YoY29udGV4dC0+bmFtZSkpOworCX0KKworCXJldHVybjsKK30KKworLyoqCisgKiBkYmxsX2ZpbmRfZHNwX3N5bWJvbCgpIC0gVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIGRzcCBzeW1ib2wgZnJvbSB0aGUgZHNwIGJpbmFyeS4KKyAqIEB6bF9saWI6CQlEU1AgYmluYXJ5IG9iaiBsaWJyYXJ5IHBvaW50ZXIKKyAqIEBhZGRyZXNzOgkJR2l2ZW4gYWRkcmVzcyB0byBmaW5kIHRoZSBkc3Agc3ltYm9sCisgKiBAb2Zmc2V0X3JhbmdlOgkJb2Zmc2V0IHJhbmdlIHRvIGxvb2sgZm9yIGRzcCBzeW1ib2wKKyAqIEBzeW1fYWRkcl9vdXRwdXQ6CVN5bWJvbCBPdXRwdXQgYWRkcmVzcworICogQG5hbWVfb3V0cHV0OgkJU3RyaW5nIHdpdGggdGhlIGRzcCBzeW1ib2wKKyAqCisgKiAJVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIGRzcCBzeW1ib2wgZnJvbSB0aGUgZHNwIGJpbmFyeS4KKyAqLworYm9vbCBkYmxsX2ZpbmRfZHNwX3N5bWJvbChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqemxfbGliLCB1MzIgYWRkcmVzcywKKwkJCQl1MzIgb2Zmc2V0X3JhbmdlLCB1MzIgKnN5bV9hZGRyX291dHB1dCwKKwkJCQljaGFyICpuYW1lX291dHB1dCkKK3sKKwlib29sIHN0YXR1cyA9IGZhbHNlOworCXN0cnVjdCBmaW5kX3N5bWJvbF9jb250ZXh0IGNvbnRleHQ7CisKKwljb250ZXh0LmFkZHJlc3MgPSBhZGRyZXNzOworCWNvbnRleHQub2Zmc2V0X3JhbmdlID0gb2Zmc2V0X3JhbmdlOworCWNvbnRleHQuY3VyX2Jlc3Rfb2Zmc2V0ID0gb2Zmc2V0X3JhbmdlOworCWNvbnRleHQuc3ltX2FkZHIgPSAwOworCWNvbnRleHQubmFtZVswXSA9ICdcMCc7CisKKwlnaF9pdGVyYXRlKHpsX2xpYi0+c3ltX3RhYiwgZmluZF9zeW1ib2xfY2FsbGJhY2ssICZjb250ZXh0KTsKKworCWlmIChjb250ZXh0Lm5hbWVbMF0pIHsKKwkJc3RhdHVzID0gdHJ1ZTsKKwkJc3RyY3B5KG5hbWVfb3V0cHV0LCBjb250ZXh0Lm5hbWUpOworCQkqc3ltX2FkZHJfb3V0cHV0ID0gY29udGV4dC5zeW1fYWRkcjsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2Rldi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZGYwM2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9kZXYuYwpAQCAtMCwwICsxLDExNTEgQEAKKy8qCisgKiBkZXYuYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBCcmlkZ2UgQnJpZGdlIGRyaXZlciBkZXZpY2Ugb3BlcmF0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIb3N0IE9TICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRyYWNlICYgRGVidWcgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJjLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPUyBBZGFwdGF0aW9uIExheWVyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NmZy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9sZHIuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvbGlzdC5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhdGZvcm0gTWFuYWdlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9jb2QuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHJ2Lmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3Byb2MuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZG1tLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZXNvdXJjZSBNYW5hZ2VyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL21nci5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9ub2RlLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPdGhlcnMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwYXBpLmg+CS8qIERTUCBBUEkgdmVyc2lvbiBpbmZvLiAqLworCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NobmwuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvaW8uaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvbXNnLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NtbS5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BkZWguaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2Lmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWZpbmVzLCBEYXRhIFN0cnVjdHVyZXMsIFR5cGVkZWZzICovCisKKyNkZWZpbmUgTUFLRVZFUlNJT04obWFqb3IsIG1pbm9yKSAgIChtYWpvciAqIDEwICsgbWlub3IpCisjZGVmaW5lIEJSRF9BUElfVkVSU0lPTgkJTUFLRVZFUlNJT04oQlJEX0FQSV9NQUpPUl9WRVJTSU9OLAlcCisJCQkJQlJEX0FQSV9NSU5PUl9WRVJTSU9OKQorCisvKiBUaGUgQnJpZGdlIGRldmljZSBvYmplY3Q6ICovCitzdHJ1Y3QgZGV2X29iamVjdCB7CisJLyogTFNUIHJlcXVpcmVzICJsaW5rIiB0byBiZSBmaXJzdCBmaWVsZCEgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CS8qIExpbmsgdG8gbmV4dCBkZXZfb2JqZWN0LiAqLworCXU4IGRldl90eXBlOwkJLyogRGV2aWNlIFR5cGUgKi8KKwlzdHJ1Y3QgY2ZnX2Rldm5vZGUgKmRldl9ub2RlX29iajsJLyogUGxhdGZvcm0gc3BlY2lmaWMgZGV2IGlkICovCisJLyogQnJpZGdlIENvbnRleHQgSGFuZGxlICovCisJc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqaGJyaWRnZV9jb250ZXh0OworCS8qIEZ1bmN0aW9uIGludGVyZmFjZSB0byBCcmlkZ2UgZHJpdmVyLiAqLworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSBicmlkZ2VfaW50ZXJmYWNlOworCXN0cnVjdCBicmRfb2JqZWN0ICpsb2NrX293bmVyOwkvKiBDbGllbnQgd2l0aCBleGNsdXNpdmUgYWNjZXNzLiAqLworCXN0cnVjdCBjb2RfbWFuYWdlciAqY29kX21ncjsJLyogQ29kZSBtYW5hZ2VyIGhhbmRsZS4gKi8KKwlzdHJ1Y3QgY2hubF9tZ3IgKmhjaG5sX21ncjsJLyogQ2hhbm5lbCBtYW5hZ2VyLiAqLworCXN0cnVjdCBkZWhfbWdyICpoZGVoX21ncjsJLyogREVIIG1hbmFnZXIuICovCisJc3RydWN0IG1zZ19tZ3IgKmhtc2dfbWdyOwkvKiBNZXNzYWdlIG1hbmFnZXIuICovCisJc3RydWN0IGlvX21nciAqaGlvX21ncjsJLyogSU8gbWFuYWdlciAoQ0hOTCwgbXNnX2N0cmwpICovCisJc3RydWN0IGNtbV9vYmplY3QgKmhjbW1fbWdyOwkvKiBTTSBtZW1vcnkgbWFuYWdlci4gKi8KKwlzdHJ1Y3QgZG1tX29iamVjdCAqZG1tX21ncjsJLyogRHluYW1pYyBtZW1vcnkgbWFuYWdlci4gKi8KKwlzdHJ1Y3QgbGRyX21vZHVsZSAqbW9kdWxlX29iajsJLyogQnJpZGdlIE1vZHVsZSBoYW5kbGUuICovCisJdTMyIHdvcmRfc2l6ZTsJCS8qIERTUCB3b3JkIHNpemU6IHF1aWNrIGFjY2Vzcy4gKi8KKwlzdHJ1Y3QgZHJ2X29iamVjdCAqaGRydl9vYmo7CS8qIERyaXZlciBPYmplY3QgKi8KKwlzdHJ1Y3QgbHN0X2xpc3QgKnByb2NfbGlzdDsJLyogTGlzdCBvZiBQcm9jZWVvc3IgYXR0YWNoZWQgdG8KKwkJCQkJICogdGhpcyBkZXZpY2UgKi8KKwlzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21ncjsKK307CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHbG9iYWxzICovCitzdGF0aWMgdTMyIHJlZnM7CQkvKiBNb2R1bGUgcmVmZXJlbmNlIGNvdW50ICovCisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbiBQcm90b3R5cGVzICovCitzdGF0aWMgaW50IGZ4bl9ub3RfaW1wbGVtZW50ZWQoaW50IGFyZywgLi4uKTsKK3N0YXRpYyBpbnQgaW5pdF9jb2RfbWdyKHN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqKTsKK3N0YXRpYyB2b2lkIHN0b3JlX2ludGVyZmFjZV9meG5zKHN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqZHJ2X2Z4bnMsCisJCQkJIHN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zKTsKKy8qCisgKiAgPT09PT09PT0gZGV2X2JyZF93cml0ZV9meG4gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBFeHBvcnRlZCBmdW5jdGlvbiB0byBiZSB1c2VkIGFzIHRoZSBDT0Qgd3JpdGUgZnVuY3Rpb24uICBUaGlzIGZ1bmN0aW9uCisgKiAgICAgIGlzIHBhc3NlZCBhIGhhbmRsZSB0byBhIERFVl9oT2JqZWN0LCB0aGVuIGNhbGxzIHRoZQorICogICAgICBkZXZpY2UncyBicmlkZ2VfYnJkX3dyaXRlKCkgZnVuY3Rpb24uCisgKi8KK3UzMiBkZXZfYnJkX3dyaXRlX2Z4bih2b2lkICphcmIsIHUzMiBkc3BfYWRkLCB2b2lkICpob3N0X2J1ZiwKKwkJICAgICAgdTMyIHVsX251bV9ieXRlcywgdTMyIG1lbV9zcGFjZSkKK3sKKwlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaiA9IChzdHJ1Y3QgZGV2X29iamVjdCAqKWFyYjsKKwl1MzIgdWxfd3JpdHRlbiA9IDA7CisJaW50IHN0YXR1czsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShob3N0X2J1ZiAhPSBOVUxMKTsJLyogUmVxdWlyZWQgb2YgQnJkV3JpdGUoKS4gKi8KKwlpZiAoZGV2X29iaikgeworCQkvKiBSZXF1aXJlIG9mIEJyZFdyaXRlKCkgKi8KKwkJREJDX0FTU0VSVChkZXZfb2JqLT5oYnJpZGdlX2NvbnRleHQgIT0gTlVMTCk7CisJCXN0YXR1cyA9ICgqZGV2X29iai0+YnJpZGdlX2ludGVyZmFjZS5wZm5fYnJkX3dyaXRlKSAoCisJCQkJCWRldl9vYmotPmhicmlkZ2VfY29udGV4dCwgaG9zdF9idWYsCisJCQkJCWRzcF9hZGQsIHVsX251bV9ieXRlcywgbWVtX3NwYWNlKTsKKwkJLyogU3BlY2lhbCBjYXNlIG9mIGdldHRpbmcgdGhlIGFkZHJlc3Mgb25seSAqLworCQlpZiAodWxfbnVtX2J5dGVzID09IDApCisJCQl1bF9udW1fYnl0ZXMgPSAxOworCQlpZiAoIXN0YXR1cykKKwkJCXVsX3dyaXR0ZW4gPSB1bF9udW1fYnl0ZXM7CisKKwl9CisJcmV0dXJuIHVsX3dyaXR0ZW47Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGV2X2NyZWF0ZV9kZXZpY2UgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDYWxsZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0gdG8gbG9hZCB0aGUgUE0gQnJpZGdlIERyaXZlciBmb3IgYQorICogICAgICBQTSBib2FyZCAoZGV2aWNlKS4KKyAqLworaW50IGRldl9jcmVhdGVfZGV2aWNlKHN0cnVjdCBkZXZfb2JqZWN0ICoqZGV2aWNlX29iaiwKKwkJCSAgICAgY29uc3QgY2hhciAqZHJpdmVyX2ZpbGVfbmFtZSwKKwkJCSAgICAgc3RydWN0IGNmZ19kZXZub2RlICpkZXZfbm9kZV9vYmopCit7CisJc3RydWN0IGNmZ19ob3N0cmVzICpob3N0X3JlczsKKwlzdHJ1Y3QgbGRyX21vZHVsZSAqbW9kdWxlX29iaiA9IE5VTEw7CisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICpkcnZfZnhucyA9IE5VTEw7CisJc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmogPSBOVUxMOworCXN0cnVjdCBjaG5sX21ncmF0dHJzIG1ncl9hdHRyczsKKwlzdHJ1Y3QgaW9fYXR0cnMgaW9fbWdyX2F0dHJzOworCXUzMiBudW1fd2luZG93czsKKwlzdHJ1Y3QgZHJ2X29iamVjdCAqaGRydl9vYmogPSBOVUxMOworCWludCBzdGF0dXMgPSAwOworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShkZXZpY2Vfb2JqICE9IE5VTEwpOworCURCQ19SRVFVSVJFKGRyaXZlcl9maWxlX25hbWUgIT0gTlVMTCk7CisKKwlzdGF0dXMgPSBkcnZfcmVxdWVzdF9icmlkZ2VfcmVzX2RzcCgodm9pZCAqKSZob3N0X3Jlcyk7CisKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9kYmcoYnJpZGdlLCAiJXM6IEZhaWxlZCB0byByZXNlcnZlIGJyaWRnZSByZXNvdXJjZXNcbiIsCisJCQlfX2Z1bmNfXyk7CisJCWdvdG8gbGVhdmU7CisJfQorCisJLyogIEdldCB0aGUgQnJpZGdlIGRyaXZlciBpbnRlcmZhY2UgZnVuY3Rpb25zICovCisJYnJpZGdlX2Rydl9lbnRyeSgmZHJ2X2Z4bnMsIGRyaXZlcl9maWxlX25hbWUpOworCWlmIChjZmdfZ2V0X29iamVjdCgodTMyICopICZoZHJ2X29iaiwgUkVHX0RSVl9PQkpFQ1QpKSB7CisJCS8qIGRvbid0IHByb3BvZ2F0ZSBDRkcgZXJyb3JzIGZyb20gdGhpcyBQUk9DIGZ1bmN0aW9uICovCisJCXN0YXR1cyA9IC1FUEVSTTsKKwl9CisJLyogQ3JlYXRlIHRoZSBkZXZpY2Ugb2JqZWN0LCBhbmQgcGFzcyBhIGhhbmRsZSB0byB0aGUgQnJpZGdlIGRyaXZlciBmb3IKKwkgKiBzdG9yYWdlLiAqLworCWlmICghc3RhdHVzKSB7CisJCURCQ19BU1NFUlQoZHJ2X2Z4bnMpOworCQlkZXZfb2JqID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRldl9vYmplY3QpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGRldl9vYmopIHsKKwkJCS8qIEZpbGwgb3V0IHRoZSByZXN0IG9mIHRoZSBEZXYgT2JqZWN0IHN0cnVjdHVyZTogKi8KKwkJCWRldl9vYmotPmRldl9ub2RlX29iaiA9IGRldl9ub2RlX29iajsKKwkJCWRldl9vYmotPm1vZHVsZV9vYmogPSBtb2R1bGVfb2JqOworCQkJZGV2X29iai0+Y29kX21nciA9IE5VTEw7CisJCQlkZXZfb2JqLT5oY2hubF9tZ3IgPSBOVUxMOworCQkJZGV2X29iai0+aGRlaF9tZ3IgPSBOVUxMOworCQkJZGV2X29iai0+bG9ja19vd25lciA9IE5VTEw7CisJCQlkZXZfb2JqLT53b3JkX3NpemUgPSBEU1BXT1JEU0laRTsKKwkJCWRldl9vYmotPmhkcnZfb2JqID0gaGRydl9vYmo7CisJCQlkZXZfb2JqLT5kZXZfdHlwZSA9IERTUF9VTklUOworCQkJLyogU3RvcmUgdGhpcyBCcmlkZ2UncyBpbnRlcmZhY2UgZnVuY3Rpb25zLCBiYXNlZCBvbiBpdHMKKwkJCSAqIHZlcnNpb24uICovCisJCQlzdG9yZV9pbnRlcmZhY2VfZnhucyhkcnZfZnhucywKKwkJCQkJCSZkZXZfb2JqLT5icmlkZ2VfaW50ZXJmYWNlKTsKKworCQkJLyogQ2FsbCBmeG5fZGV2X2NyZWF0ZSgpIHRvIGdldCB0aGUgQnJpZGdlJ3MgZGV2aWNlCisJCQkgKiBjb250ZXh0IGhhbmRsZS4gKi8KKwkJCXN0YXR1cyA9IChkZXZfb2JqLT5icmlkZ2VfaW50ZXJmYWNlLnBmbl9kZXZfY3JlYXRlKQorCQkJICAgICgmZGV2X29iai0+aGJyaWRnZV9jb250ZXh0LCBkZXZfb2JqLAorCQkJICAgICBob3N0X3Jlcyk7CisJCQkvKiBBc3NlcnQgYnJpZGdlX2Rldl9jcmVhdGUoKSdzIGVuc3VyZSBjbGF1c2U6ICovCisJCQlEQkNfQVNTRVJUKHN0YXR1cworCQkJCSAgIHx8IChkZXZfb2JqLT5oYnJpZGdlX2NvbnRleHQgIT0gTlVMTCkpOworCQl9IGVsc2UgeworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJfQorCX0KKwkvKiBBdHRlbXB0IHRvIGNyZWF0ZSB0aGUgQ09EIG1hbmFnZXIgZm9yIHRoaXMgZGV2aWNlOiAqLworCWlmICghc3RhdHVzKQorCQlzdGF0dXMgPSBpbml0X2NvZF9tZ3IoZGV2X29iaik7CisKKwkvKiBBdHRlbXB0IHRvIGNyZWF0ZSB0aGUgY2hhbm5lbCBtYW5hZ2VyIGZvciB0aGlzIGRldmljZTogKi8KKwlpZiAoIXN0YXR1cykgeworCQltZ3JfYXR0cnMubWF4X2NoYW5uZWxzID0gQ0hOTF9NQVhDSEFOTkVMUzsKKwkJaW9fbWdyX2F0dHJzLmJpcnEgPSBob3N0X3Jlcy0+YmlycV9yZWdpc3RlcnM7CisJCWlvX21ncl9hdHRycy5pcnFfc2hhcmVkID0KKwkJICAgIChob3N0X3Jlcy0+YmlycV9hdHRyaWIgJiBDRkdfSVJRU0hBUkVEKTsKKwkJaW9fbWdyX2F0dHJzLndvcmRfc2l6ZSA9IERTUFdPUkRTSVpFOworCQltZ3JfYXR0cnMud29yZF9zaXplID0gRFNQV09SRFNJWkU7CisJCW51bV93aW5kb3dzID0gaG9zdF9yZXMtPm51bV9tZW1fd2luZG93czsKKwkJaWYgKG51bV93aW5kb3dzKSB7CisJCQkvKiBBc3N1bWUgbGFzdCBtZW1vcnkgd2luZG93IGlzIGZvciBDSE5MICovCisJCQlpb19tZ3JfYXR0cnMuc2htX2Jhc2UgPSBob3N0X3Jlcy0+ZHdfbWVtX2Jhc2VbMV0gKworCQkJICAgIGhvc3RfcmVzLT5kd19vZmZzZXRfZm9yX21vbml0b3I7CisJCQlpb19tZ3JfYXR0cnMudXNtX2xlbmd0aCA9CisJCQkgICAgaG9zdF9yZXMtPmR3X21lbV9sZW5ndGhbMV0gLQorCQkJICAgIGhvc3RfcmVzLT5kd19vZmZzZXRfZm9yX21vbml0b3I7CisJCX0gZWxzZSB7CisJCQlpb19tZ3JfYXR0cnMuc2htX2Jhc2UgPSAwOworCQkJaW9fbWdyX2F0dHJzLnVzbV9sZW5ndGggPSAwOworCQkJcHJfZXJyKCIlczogTm8gbWVtb3J5IHJlc2VydmVkIGZvciBzaGFyZWQgc3RydWN0dXJlc1xuIiwKKwkJCSAgICAgICBfX2Z1bmNfXyk7CisJCX0KKwkJc3RhdHVzID0gY2hubF9jcmVhdGUoJmRldl9vYmotPmhjaG5sX21nciwgZGV2X29iaiwgJm1ncl9hdHRycyk7CisJCWlmIChzdGF0dXMgPT0gLUVOT1NZUykgeworCQkJLyogSXQncyBPSyBmb3IgYSBkZXZpY2Ugbm90IHRvIGhhdmUgYSBjaGFubmVsCisJCQkgKiBtYW5hZ2VyOiAqLworCQkJc3RhdHVzID0gMDsKKwkJfQorCQkvKiBDcmVhdGUgQ01NIG1nciBldmVuIGlmIE1zZyBNZ3Igbm90IGltcGwuICovCisJCXN0YXR1cyA9IGNtbV9jcmVhdGUoJmRldl9vYmotPmhjbW1fbWdyLAorCQkJCSAgICAoc3RydWN0IGRldl9vYmplY3QgKilkZXZfb2JqLCBOVUxMKTsKKwkJLyogT25seSBjcmVhdGUgSU8gbWFuYWdlciBpZiB3ZSBoYXZlIGEgY2hhbm5lbCBtYW5hZ2VyICovCisJCWlmICghc3RhdHVzICYmIGRldl9vYmotPmhjaG5sX21ncikgeworCQkJc3RhdHVzID0gaW9fY3JlYXRlKCZkZXZfb2JqLT5oaW9fbWdyLCBkZXZfb2JqLAorCQkJCQkgICAmaW9fbWdyX2F0dHJzKTsKKwkJfQorCQkvKiBPbmx5IGNyZWF0ZSBERUggbWFuYWdlciBpZiB3ZSBoYXZlIGFuIElPIG1hbmFnZXIgKi8KKwkJaWYgKCFzdGF0dXMpIHsKKwkJCS8qIEluc3RhbnRpYXRlIHRoZSBERUggbW9kdWxlICovCisJCQlzdGF0dXMgPSBicmlkZ2VfZGVoX2NyZWF0ZSgmZGV2X29iai0+aGRlaF9tZ3IsIGRldl9vYmopOworCQl9CisJCS8qIENyZWF0ZSBETU0gbWdyIC4gKi8KKwkJc3RhdHVzID0gZG1tX2NyZWF0ZSgmZGV2X29iai0+ZG1tX21nciwKKwkJCQkgICAgKHN0cnVjdCBkZXZfb2JqZWN0ICopZGV2X29iaiwgTlVMTCk7CisJfQorCS8qIEFkZCB0aGUgbmV3IERFVl9PYmplY3QgdG8gdGhlIGdsb2JhbCBsaXN0OiAqLworCWlmICghc3RhdHVzKSB7CisJCWxzdF9pbml0X2VsZW0oJmRldl9vYmotPmxpbmspOworCQlzdGF0dXMgPSBkcnZfaW5zZXJ0X2Rldl9vYmplY3QoaGRydl9vYmosIGRldl9vYmopOworCX0KKwkvKiBDcmVhdGUgdGhlIFByb2Nlc3NvciBMaXN0ICovCisJaWYgKCFzdGF0dXMpIHsKKwkJZGV2X29iai0+cHJvY19saXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxzdF9saXN0KSwKKwkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKCEoZGV2X29iai0+cHJvY19saXN0KSkKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJZWxzZQorCQkJSU5JVF9MSVNUX0hFQUQoJmRldl9vYmotPnByb2NfbGlzdC0+aGVhZCk7CisJfQorbGVhdmU6CisJLyogIElmIGFsbCB3ZW50IHdlbGwsIHJldHVybiBhIGhhbmRsZSB0byB0aGUgZGV2IG9iamVjdDsKKwkgKiAgZWxzZSwgY2xlYW51cCBhbmQgcmV0dXJuIE5VTEwgaW4gdGhlIE9VVCBwYXJhbWV0ZXIuICovCisJaWYgKCFzdGF0dXMpIHsKKwkJKmRldmljZV9vYmogPSBkZXZfb2JqOworCX0gZWxzZSB7CisJCWlmIChkZXZfb2JqKSB7CisJCQlrZnJlZShkZXZfb2JqLT5wcm9jX2xpc3QpOworCQkJaWYgKGRldl9vYmotPmNvZF9tZ3IpCisJCQkJY29kX2RlbGV0ZShkZXZfb2JqLT5jb2RfbWdyKTsKKwkJCWlmIChkZXZfb2JqLT5kbW1fbWdyKQorCQkJCWRtbV9kZXN0cm95KGRldl9vYmotPmRtbV9tZ3IpOworCQkJa2ZyZWUoZGV2X29iaik7CisJCX0KKworCQkqZGV2aWNlX29iaiA9IE5VTEw7CisJfQorCisJREJDX0VOU1VSRSgoIXN0YXR1cyAmJiAqZGV2aWNlX29iaikgfHwgKHN0YXR1cyAmJiAhKmRldmljZV9vYmopKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRldl9jcmVhdGUyID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQWZ0ZXIgc3VjY2Vzc2Z1bCBsb2FkaW5nIG9mIHRoZSBpbWFnZSBmcm9tIGFwaV9pbml0X2NvbXBsZXRlMgorICogICAgICAoUFJPQyBBdXRvX1N0YXJ0KSBvciBwcm9jX2xvYWQgdGhpcyBmeG4gaXMgY2FsbGVkLiBUaGlzIGNyZWF0ZXMKKyAqICAgICAgdGhlIE5vZGUgTWFuYWdlciBhbmQgdXBkYXRlcyB0aGUgREVWIE9iamVjdC4KKyAqLworaW50IGRldl9jcmVhdGUyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaiA9IGhkZXZfb2JqOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGhkZXZfb2JqKTsKKworCS8qIFRoZXJlIGNhbiBiZSBvbmx5IG9uZSBOb2RlIE1hbmFnZXIgcGVyIERFViBvYmplY3QgKi8KKwlEQkNfQVNTRVJUKCFkZXZfb2JqLT5obm9kZV9tZ3IpOworCXN0YXR1cyA9IG5vZGVfY3JlYXRlX21ncigmZGV2X29iai0+aG5vZGVfbWdyLCBoZGV2X29iaik7CisJaWYgKHN0YXR1cykKKwkJZGV2X29iai0+aG5vZGVfbWdyID0gTlVMTDsKKworCURCQ19FTlNVUkUoKCFzdGF0dXMgJiYgZGV2X29iai0+aG5vZGVfbWdyICE9IE5VTEwpCisJCSAgIHx8IChzdGF0dXMgJiYgZGV2X29iai0+aG5vZGVfbWdyID09IE5VTEwpKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRldl9kZXN0cm95MiA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERlc3Ryb3lzIHRoZSBOb2RlIG1hbmFnZXIgZm9yIHRoaXMgZGV2aWNlLgorICovCitpbnQgZGV2X2Rlc3Ryb3kyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaiA9IGhkZXZfb2JqOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGhkZXZfb2JqKTsKKworCWlmIChkZXZfb2JqLT5obm9kZV9tZ3IpIHsKKwkJaWYgKG5vZGVfZGVsZXRlX21ncihkZXZfb2JqLT5obm9kZV9tZ3IpKQorCQkJc3RhdHVzID0gLUVQRVJNOworCQllbHNlCisJCQlkZXZfb2JqLT5obm9kZV9tZ3IgPSBOVUxMOworCisJfQorCisJREJDX0VOU1VSRSgoIXN0YXR1cyAmJiBkZXZfb2JqLT5obm9kZV9tZ3IgPT0gTlVMTCkgfHwgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRldl9kZXN0cm95X2RldmljZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERlc3Ryb3lzIHRoZSBjaGFubmVsIG1hbmFnZXIgZm9yIHRoaXMgZGV2aWNlLCBpZiBhbnksIGNhbGxzCisgKiAgICAgIGJyaWRnZV9kZXZfZGVzdHJveSgpLCBhbmQgdGhlbiBhdHRlbXB0cyB0byB1bmxvYWQgdGhlIEJyaWRnZSBtb2R1bGUuCisgKi8KK2ludCBkZXZfZGVzdHJveV9kZXZpY2Uoc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqID0gaGRldl9vYmo7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlpZiAoaGRldl9vYmopIHsKKwkJaWYgKGRldl9vYmotPmNvZF9tZ3IpIHsKKwkJCWNvZF9kZWxldGUoZGV2X29iai0+Y29kX21ncik7CisJCQlkZXZfb2JqLT5jb2RfbWdyID0gTlVMTDsKKwkJfQorCisJCWlmIChkZXZfb2JqLT5obm9kZV9tZ3IpIHsKKwkJCW5vZGVfZGVsZXRlX21ncihkZXZfb2JqLT5obm9kZV9tZ3IpOworCQkJZGV2X29iai0+aG5vZGVfbWdyID0gTlVMTDsKKwkJfQorCisJCS8qIEZyZWUgdGhlIGlvLCBjaGFubmVsLCBhbmQgbWVzc2FnZSBtYW5hZ2VycyBmb3IgdGhpcyBib2FyZDogKi8KKwkJaWYgKGRldl9vYmotPmhpb19tZ3IpIHsKKwkJCWlvX2Rlc3Ryb3koZGV2X29iai0+aGlvX21ncik7CisJCQlkZXZfb2JqLT5oaW9fbWdyID0gTlVMTDsKKwkJfQorCQlpZiAoZGV2X29iai0+aGNobmxfbWdyKSB7CisJCQljaG5sX2Rlc3Ryb3koZGV2X29iai0+aGNobmxfbWdyKTsKKwkJCWRldl9vYmotPmhjaG5sX21nciA9IE5VTEw7CisJCX0KKwkJaWYgKGRldl9vYmotPmhtc2dfbWdyKSB7CisJCQltc2dfZGVsZXRlKGRldl9vYmotPmhtc2dfbWdyKTsKKwkJCWRldl9vYmotPmhtc2dfbWdyID0gTlVMTDsKKwkJfQorCisJCWlmIChkZXZfb2JqLT5oZGVoX21ncikgeworCQkJLyogVW5pbml0aWFsaXplIERFSCBtb2R1bGUuICovCisJCQlicmlkZ2VfZGVoX2Rlc3Ryb3koZGV2X29iai0+aGRlaF9tZ3IpOworCQkJZGV2X29iai0+aGRlaF9tZ3IgPSBOVUxMOworCQl9CisJCWlmIChkZXZfb2JqLT5oY21tX21ncikgeworCQkJY21tX2Rlc3Ryb3koZGV2X29iai0+aGNtbV9tZ3IsIHRydWUpOworCQkJZGV2X29iai0+aGNtbV9tZ3IgPSBOVUxMOworCQl9CisKKwkJaWYgKGRldl9vYmotPmRtbV9tZ3IpIHsKKwkJCWRtbV9kZXN0cm95KGRldl9vYmotPmRtbV9tZ3IpOworCQkJZGV2X29iai0+ZG1tX21nciA9IE5VTEw7CisJCX0KKworCQkvKiBDYWxsIHRoZSBkcml2ZXIncyBicmlkZ2VfZGV2X2Rlc3Ryb3koKSBmdW5jdGlvbjogKi8KKwkJLyogUmVxdWlyZSBvZiBEZXZEZXN0cm95ICovCisJCWlmIChkZXZfb2JqLT5oYnJpZGdlX2NvbnRleHQpIHsKKwkJCXN0YXR1cyA9ICgqZGV2X29iai0+YnJpZGdlX2ludGVyZmFjZS5wZm5fZGV2X2Rlc3Ryb3kpCisJCQkgICAgKGRldl9vYmotPmhicmlkZ2VfY29udGV4dCk7CisJCQlkZXZfb2JqLT5oYnJpZGdlX2NvbnRleHQgPSBOVUxMOworCQl9IGVsc2UKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCWtmcmVlKGRldl9vYmotPnByb2NfbGlzdCk7CisJCQlkZXZfb2JqLT5wcm9jX2xpc3QgPSBOVUxMOworCisJCQkvKiBSZW1vdmUgdGhpcyBERVZfT2JqZWN0IGZyb20gdGhlIGdsb2JhbCBsaXN0OiAqLworCQkJZHJ2X3JlbW92ZV9kZXZfb2JqZWN0KGRldl9vYmotPmhkcnZfb2JqLCBkZXZfb2JqKTsKKwkJCS8qIEZyZWUgVGhlIGxpYnJhcnkgKiBMRFJfRnJlZU1vZHVsZQorCQkJICogKGRldl9vYmotPm1vZHVsZV9vYmopOyAqLworCQkJLyogRnJlZSB0aGlzIGRldiBvYmplY3Q6ICovCisJCQlrZnJlZShkZXZfb2JqKTsKKwkJCWRldl9vYmogPSBOVUxMOworCQl9CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRldl9nZXRfY2hubF9tZ3IgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgaGFuZGxlIHRvIHRoZSBjaGFubmVsIG1hbmFnZXIgaGFuZGxlIGNyZWF0ZWQgZm9yIHRoaXMKKyAqICAgICAgZGV2aWNlLgorICovCitpbnQgZGV2X2dldF9jaG5sX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkgICAgc3RydWN0IGNobmxfbWdyICoqbWdyKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqID0gaGRldl9vYmo7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUobWdyICE9IE5VTEwpOworCisJaWYgKGhkZXZfb2JqKSB7CisJCSptZ3IgPSBkZXZfb2JqLT5oY2hubF9tZ3I7CisJfSBlbHNlIHsKKwkJKm1nciA9IE5VTEw7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCisJREJDX0VOU1VSRSghc3RhdHVzIHx8IChtZ3IgIT0gTlVMTCAmJiAqbWdyID09IE5VTEwpKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRldl9nZXRfY21tX21nciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIHRoZSBoYW5kbGUgdG8gdGhlIHNoYXJlZCBtZW1vcnkgbWFuYWdlciBjcmVhdGVkIGZvciB0aGlzCisgKiAgICAgIGRldmljZS4KKyAqLworaW50IGRldl9nZXRfY21tX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkgICBzdHJ1Y3QgY21tX29iamVjdCAqKm1ncikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaiA9IGhkZXZfb2JqOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKG1nciAhPSBOVUxMKTsKKworCWlmIChoZGV2X29iaikgeworCQkqbWdyID0gZGV2X29iai0+aGNtbV9tZ3I7CisJfSBlbHNlIHsKKwkJKm1nciA9IE5VTEw7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCisJREJDX0VOU1VSRSghc3RhdHVzIHx8IChtZ3IgIT0gTlVMTCAmJiAqbWdyID09IE5VTEwpKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRldl9nZXRfZG1tX21nciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIHRoZSBoYW5kbGUgdG8gdGhlIGR5bmFtaWMgbWVtb3J5IG1hbmFnZXIgY3JlYXRlZCBmb3IgdGhpcworICogICAgICBkZXZpY2UuCisgKi8KK2ludCBkZXZfZ2V0X2RtbV9tZ3Ioc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAorCQkJICAgc3RydWN0IGRtbV9vYmplY3QgKiptZ3IpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmogPSBoZGV2X29iajsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShtZ3IgIT0gTlVMTCk7CisKKwlpZiAoaGRldl9vYmopIHsKKwkJKm1nciA9IGRldl9vYmotPmRtbV9tZ3I7CisJfSBlbHNlIHsKKwkJKm1nciA9IE5VTEw7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCisJREJDX0VOU1VSRSghc3RhdHVzIHx8IChtZ3IgIT0gTlVMTCAmJiAqbWdyID09IE5VTEwpKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRldl9nZXRfY29kX21nciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIHRoZSBDT0QgbWFuYWdlciBjcmVhdGUgZm9yIHRoaXMgZGV2aWNlLgorICovCitpbnQgZGV2X2dldF9jb2RfbWdyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCSAgIHN0cnVjdCBjb2RfbWFuYWdlciAqKmNvZF9tZ3IpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmogPSBoZGV2X29iajsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShjb2RfbWdyICE9IE5VTEwpOworCisJaWYgKGhkZXZfb2JqKSB7CisJCSpjb2RfbWdyID0gZGV2X29iai0+Y29kX21ncjsKKwl9IGVsc2UgeworCQkqY29kX21nciA9IE5VTEw7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCisJREJDX0VOU1VSRSghc3RhdHVzIHx8IChjb2RfbWdyICE9IE5VTEwgJiYgKmNvZF9tZ3IgPT0gTlVMTCkpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT09IGRldl9nZXRfZGVoX21nciA9PT09PT09PQorICovCitpbnQgZGV2X2dldF9kZWhfbWdyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCSAgIHN0cnVjdCBkZWhfbWdyICoqZGVoX21hbmFnZXIpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoZGVoX21hbmFnZXIgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoaGRldl9vYmopOworCWlmIChoZGV2X29iaikgeworCQkqZGVoX21hbmFnZXIgPSBoZGV2X29iai0+aGRlaF9tZ3I7CisJfSBlbHNlIHsKKwkJKmRlaF9tYW5hZ2VyID0gTlVMTDsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkZXZfZ2V0X2Rldl9ub2RlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIHBsYXRmb3JtIHNwZWNpZmljIGRldmljZSBJRCBmb3IgdGhpcyBkZXZpY2UuCisgKi8KK2ludCBkZXZfZ2V0X2Rldl9ub2RlKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCSAgICBzdHJ1Y3QgY2ZnX2Rldm5vZGUgKipkZXZfbmRlKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqID0gaGRldl9vYmo7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoZGV2X25kZSAhPSBOVUxMKTsKKworCWlmIChoZGV2X29iaikgeworCQkqZGV2X25kZSA9IGRldl9vYmotPmRldl9ub2RlX29iajsKKwl9IGVsc2UgeworCQkqZGV2X25kZSA9IE5VTEw7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCisJREJDX0VOU1VSRSghc3RhdHVzIHx8IChkZXZfbmRlICE9IE5VTEwgJiYgKmRldl9uZGUgPT0gTlVMTCkpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGV2X2dldF9maXJzdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIHRoZSBmaXJzdCBEZXZpY2UgT2JqZWN0IGhhbmRsZSBmcm9tIGFuIGludGVybmFsIGxpbmtlZCBsaXN0CisgKiAgICAgIERFVl9PQkpFQ1RzIG1haW50YWluZWQgYnkgREVWLgorICovCitzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X2dldF9maXJzdCh2b2lkKQoreworCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqID0gTlVMTDsKKworCWRldl9vYmogPSAoc3RydWN0IGRldl9vYmplY3QgKilkcnZfZ2V0X2ZpcnN0X2Rldl9vYmplY3QoKTsKKworCXJldHVybiBkZXZfb2JqOworfQorCisvKgorICogID09PT09PT09IGRldl9nZXRfaW50Zl9meG5zID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIEJyaWRnZSBpbnRlcmZhY2UgZnVuY3Rpb24gc3RydWN0dXJlIGZvciB0aGUgbG9hZGVkIGRyaXZlci4KKyAqICAgICAgaWZfZnhucyAhPSBOVUxMLgorICovCitpbnQgZGV2X2dldF9pbnRmX2Z4bnMoc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAorCQkJICAgICBzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKippZl9meG5zKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqID0gaGRldl9vYmo7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoaWZfZnhucyAhPSBOVUxMKTsKKworCWlmIChoZGV2X29iaikgeworCQkqaWZfZnhucyA9ICZkZXZfb2JqLT5icmlkZ2VfaW50ZXJmYWNlOworCX0gZWxzZSB7CisJCSppZl9meG5zID0gTlVMTDsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisKKwlEQkNfRU5TVVJFKCFzdGF0dXMgfHwgKChpZl9meG5zICE9IE5VTEwpICYmICgqaWZfZnhucyA9PSBOVUxMKSkpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT09IGRldl9nZXRfaW9fbWdyID09PT09PT09CisgKi8KK2ludCBkZXZfZ2V0X2lvX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkgIHN0cnVjdCBpb19tZ3IgKippb19tYW4pCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoaW9fbWFuICE9IE5VTEwpOworCURCQ19SRVFVSVJFKGhkZXZfb2JqKTsKKworCWlmIChoZGV2X29iaikgeworCQkqaW9fbWFuID0gaGRldl9vYmotPmhpb19tZ3I7CisJfSBlbHNlIHsKKwkJKmlvX21hbiA9IE5VTEw7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkZXZfZ2V0X25leHQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgbmV4dCBEZXZpY2UgT2JqZWN0IGhhbmRsZSBmcm9tIGFuIGludGVybmFsIGxpbmtlZCBsaXN0CisgKiAgICAgIG9mIERFVl9PQkpFQ1RzIG1haW50YWluZWQgYnkgREVWLCBhZnRlciBoYXZpbmcgcHJldmlvdXNseSBjYWxsZWQKKyAqICAgICAgZGV2X2dldF9maXJzdCgpIGFuZCB6ZXJvIG9yIG1vcmUgZGV2X2dldF9uZXh0CisgKi8KK3N0cnVjdCBkZXZfb2JqZWN0ICpkZXZfZ2V0X25leHQoc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqKQoreworCXN0cnVjdCBkZXZfb2JqZWN0ICpuZXh0X2Rldl9vYmplY3QgPSBOVUxMOworCisJaWYgKGhkZXZfb2JqKSB7CisJCW5leHRfZGV2X29iamVjdCA9IChzdHJ1Y3QgZGV2X29iamVjdCAqKQorCQkgICAgZHJ2X2dldF9uZXh0X2Rldl9vYmplY3QoKHUzMikgaGRldl9vYmopOworCX0KKworCXJldHVybiBuZXh0X2Rldl9vYmplY3Q7Cit9CisKKy8qCisgKiAgPT09PT09PT09IGRldl9nZXRfbXNnX21nciA9PT09PT09PQorICovCit2b2lkIGRldl9nZXRfbXNnX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosIHN0cnVjdCBtc2dfbWdyICoqbXNnX21hbikKK3sKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUobXNnX21hbiAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShoZGV2X29iaik7CisKKwkqbXNnX21hbiA9IGhkZXZfb2JqLT5obXNnX21ncjsKK30KKworLyoKKyAqICA9PT09PT09PSBkZXZfZ2V0X25vZGVfbWFuYWdlciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIHRoZSBOb2RlIE1hbmFnZXIgSGFuZGxlCisgKi8KK2ludCBkZXZfZ2V0X25vZGVfbWFuYWdlcihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkJc3RydWN0IG5vZGVfbWdyICoqbm9kZV9tYW4pCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmogPSBoZGV2X29iajsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShub2RlX21hbiAhPSBOVUxMKTsKKworCWlmIChoZGV2X29iaikgeworCQkqbm9kZV9tYW4gPSBkZXZfb2JqLT5obm9kZV9tZ3I7CisJfSBlbHNlIHsKKwkJKm5vZGVfbWFuID0gTlVMTDsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisKKwlEQkNfRU5TVVJFKCFzdGF0dXMgfHwgKG5vZGVfbWFuICE9IE5VTEwgJiYgKm5vZGVfbWFuID09IE5VTEwpKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRldl9nZXRfc3ltYm9sID09PT09PT09CisgKi8KK2ludCBkZXZfZ2V0X3N5bWJvbChzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkgIGNvbnN0IGNoYXIgKnN0cl9zeW0sIHUzMiAqIHB1bF92YWx1ZSkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tZ3I7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoc3RyX3N5bSAhPSBOVUxMICYmIHB1bF92YWx1ZSAhPSBOVUxMKTsKKworCWlmIChoZGV2X29iaikgeworCQlzdGF0dXMgPSBkZXZfZ2V0X2NvZF9tZ3IoaGRldl9vYmosICZjb2RfbWdyKTsKKwkJaWYgKGNvZF9tZ3IpCisJCQlzdGF0dXMgPSBjb2RfZ2V0X3N5bV92YWx1ZShjb2RfbWdyLCAoY2hhciAqKXN0cl9zeW0sCisJCQkJCQkgICBwdWxfdmFsdWUpOworCQllbHNlCisJCQlzdGF0dXMgPSAtRUZBVUxUOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGV2X2dldF9icmlkZ2VfY29udGV4dCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIHRoZSBCcmlkZ2UgQ29udGV4dCBoYW5kbGUsIGFzIHJldHVybmVkIGJ5IHRoZQorICogICAgICBicmlkZ2VfZGV2X2NyZWF0ZSBmeG4uCisgKi8KK2ludCBkZXZfZ2V0X2JyaWRnZV9jb250ZXh0KHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCSAgICAgICBzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICoqcGhicmlkZ2VfY29udGV4dCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaiA9IGhkZXZfb2JqOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKHBoYnJpZGdlX2NvbnRleHQgIT0gTlVMTCk7CisKKwlpZiAoaGRldl9vYmopIHsKKwkJKnBoYnJpZGdlX2NvbnRleHQgPSBkZXZfb2JqLT5oYnJpZGdlX2NvbnRleHQ7CisJfSBlbHNlIHsKKwkJKnBoYnJpZGdlX2NvbnRleHQgPSBOVUxMOworCQlzdGF0dXMgPSAtRUZBVUxUOworCX0KKworCURCQ19FTlNVUkUoIXN0YXR1cyB8fCAoKHBoYnJpZGdlX2NvbnRleHQgIT0gTlVMTCkgJiYKKwkJCQkJICAgICAoKnBoYnJpZGdlX2NvbnRleHQgPT0gTlVMTCkpKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRldl9leGl0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGVjcmVtZW50IHJlZmVyZW5jZSBjb3VudCwgYW5kIGZyZWUgcmVzb3VyY2VzIHdoZW4gcmVmZXJlbmNlIGNvdW50IGlzCisgKiAgICAgIDAuCisgKi8KK3ZvaWQgZGV2X2V4aXQodm9pZCkKK3sKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlyZWZzLS07CisKKwlpZiAocmVmcyA9PSAwKSB7CisJCWNtbV9leGl0KCk7CisJCWRtbV9leGl0KCk7CisJfQorCisJREJDX0VOU1VSRShyZWZzID49IDApOworfQorCisvKgorICogID09PT09PT09IGRldl9pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZSBERVYncyBwcml2YXRlIHN0YXRlLCBrZWVwaW5nIGEgcmVmZXJlbmNlIGNvdW50IG9uIGVhY2ggY2FsbC4KKyAqLworYm9vbCBkZXZfaW5pdCh2b2lkKQoreworCWJvb2wgY21tX3JldCwgZG1tX3JldCwgcmV0ID0gdHJ1ZTsKKworCURCQ19SRVFVSVJFKHJlZnMgPj0gMCk7CisKKwlpZiAocmVmcyA9PSAwKSB7CisJCWNtbV9yZXQgPSBjbW1faW5pdCgpOworCQlkbW1fcmV0ID0gZG1tX2luaXQoKTsKKworCQlyZXQgPSBjbW1fcmV0ICYmIGRtbV9yZXQ7CisKKwkJaWYgKCFyZXQpIHsKKwkJCWlmIChjbW1fcmV0KQorCQkJCWNtbV9leGl0KCk7CisKKwkJCWlmIChkbW1fcmV0KQorCQkJCWRtbV9leGl0KCk7CisKKwkJfQorCX0KKworCWlmIChyZXQpCisJCXJlZnMrKzsKKworCURCQ19FTlNVUkUoKHJldCAmJiAocmVmcyA+IDApKSB8fCAoIXJldCAmJiAocmVmcyA+PSAwKSkpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqICA9PT09PT09PSBkZXZfbm90aWZ5X2NsaWVudHMgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBOb3RpZnkgYWxsIGNsaWVudHMgb2YgdGhpcyBkZXZpY2Ugb2YgYSBjaGFuZ2UgaW4gZGV2aWNlIHN0YXR1cy4KKyAqLworaW50IGRldl9ub3RpZnlfY2xpZW50cyhzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosIHUzMiByZXQpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaiA9IGhkZXZfb2JqOworCXZvaWQgKnByb2Nfb2JqOworCisJZm9yIChwcm9jX29iaiA9ICh2b2lkICopbHN0X2ZpcnN0KGRldl9vYmotPnByb2NfbGlzdCk7CisJICAgICBwcm9jX29iaiAhPSBOVUxMOworCSAgICAgcHJvY19vYmogPSAodm9pZCAqKWxzdF9uZXh0KGRldl9vYmotPnByb2NfbGlzdCwKKwkJCQkJIChzdHJ1Y3QgbGlzdF9oZWFkICopcHJvY19vYmopKQorCQlwcm9jX25vdGlmeV9jbGllbnRzKHByb2Nfb2JqLCAodTMyKSByZXQpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkZXZfcmVtb3ZlX2RldmljZSA9PT09PT09PQorICovCitpbnQgZGV2X3JlbW92ZV9kZXZpY2Uoc3RydWN0IGNmZ19kZXZub2RlICpkZXZfbm9kZV9vYmopCit7CisJc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqOwkvKiBoYW5kbGUgdG8gZGV2aWNlIG9iamVjdCAqLworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqOworCisJLyogUmV0cmlldmUgdGhlIGRldmljZSBvYmplY3QgaGFuZGxlIG9yaWdpbmFseSBzdG9yZWQgd2l0aAorCSAqIHRoZSBkZXZfbm9kZTogKi8KKwlzdGF0dXMgPSBjZmdfZ2V0X2Rldl9vYmplY3QoZGV2X25vZGVfb2JqLCAodTMyICopICZoZGV2X29iaik7CisJaWYgKCFzdGF0dXMpIHsKKwkJLyogUmVtb3ZlIHRoZSBQcm9jZXNzb3IgTGlzdCAqLworCQlkZXZfb2JqID0gKHN0cnVjdCBkZXZfb2JqZWN0ICopaGRldl9vYmo7CisJCS8qIERlc3Ryb3kgdGhlIGRldmljZSBvYmplY3QuICovCisJCXN0YXR1cyA9IGRldl9kZXN0cm95X2RldmljZShoZGV2X29iaik7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkZXZfc2V0X2NobmxfbWdyID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgU2V0IHRoZSBjaGFubmVsIG1hbmFnZXIgZm9yIHRoaXMgZGV2aWNlLgorICovCitpbnQgZGV2X3NldF9jaG5sX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkgICAgc3RydWN0IGNobmxfbWdyICpobWdyKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqID0gaGRldl9vYmo7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlpZiAoaGRldl9vYmopCisJCWRldl9vYmotPmhjaG5sX21nciA9IGhtZ3I7CisJZWxzZQorCQlzdGF0dXMgPSAtRUZBVUxUOworCisJREJDX0VOU1VSRShzdGF0dXMgfHwgKGRldl9vYmotPmhjaG5sX21nciA9PSBobWdyKSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkZXZfc2V0X21zZ19tZ3IgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTZXQgdGhlIG1lc3NhZ2UgbWFuYWdlciBmb3IgdGhpcyBkZXZpY2UuCisgKi8KK3ZvaWQgZGV2X3NldF9tc2dfbWdyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwgc3RydWN0IG1zZ19tZ3IgKmhtZ3IpCit7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGhkZXZfb2JqKTsKKworCWhkZXZfb2JqLT5obXNnX21nciA9IGhtZ3I7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGV2X3N0YXJ0X2RldmljZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEluaXRpYWxpemVzIHRoZSBuZXcgZGV2aWNlIHdpdGggdGhlIEJSSURHRSBlbnZpcm9ubWVudC4KKyAqLworaW50IGRldl9zdGFydF9kZXZpY2Uoc3RydWN0IGNmZ19kZXZub2RlICpkZXZfbm9kZV9vYmopCit7CisJc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqID0gTlVMTDsJLyogaGFuZGxlIHRvICdCcmlkZ2UgRGV2aWNlICovCisJLyogQnJpZGdlIGRyaXZlciBmaWxlbmFtZSAqLworCWNoYXIgYnJpZGdlX2ZpbGVfbmFtZVtDRkdfTUFYU0VBUkNIUEFUSExFTl0gPSAiVU1BIjsKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBtZ3Jfb2JqZWN0ICpobWdyX29iaiA9IE5VTEw7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwkvKiBHaXZlbiBhbGwgcmVzb3VyY2VzLCBjcmVhdGUgYSBkZXZpY2Ugb2JqZWN0LiAqLworCXN0YXR1cyA9IGRldl9jcmVhdGVfZGV2aWNlKCZoZGV2X29iaiwgYnJpZGdlX2ZpbGVfbmFtZSwKKwkJCQkgICBkZXZfbm9kZV9vYmopOworCWlmICghc3RhdHVzKSB7CisJCS8qIFN0b3JlIGF3YXkgdGhlIGhkZXZfb2JqIHdpdGggdGhlIERFVk5PREUgKi8KKwkJc3RhdHVzID0gY2ZnX3NldF9kZXZfb2JqZWN0KGRldl9ub2RlX29iaiwgKHUzMikgaGRldl9vYmopOworCQlpZiAoc3RhdHVzKSB7CisJCQkvKiBDbGVhbiB1cCAqLworCQkJZGV2X2Rlc3Ryb3lfZGV2aWNlKGhkZXZfb2JqKTsKKwkJCWhkZXZfb2JqID0gTlVMTDsKKwkJfQorCX0KKwlpZiAoIXN0YXR1cykgeworCQkvKiBDcmVhdGUgdGhlIE1hbmFnZXIgT2JqZWN0ICovCisJCXN0YXR1cyA9IG1ncl9jcmVhdGUoJmhtZ3Jfb2JqLCBkZXZfbm9kZV9vYmopOworCX0KKwlpZiAoc3RhdHVzKSB7CisJCWlmIChoZGV2X29iaikKKwkJCWRldl9kZXN0cm95X2RldmljZShoZGV2X29iaik7CisKKwkJLyogRW5zdXJlIHRoZSBkZXZpY2UgZXh0ZW5zaW9uIGlzIE5VTEwgKi8KKwkJY2ZnX3NldF9kZXZfb2JqZWN0KGRldl9ub2RlX29iaiwgMEwpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZnhuX25vdF9pbXBsZW1lbnRlZCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFRha2VzIHRoZSBwbGFjZSBvZiBhIEJyaWRnZSBOdWxsIEZ1bmN0aW9uLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIE11bHRpcGxlLCBvcHRpb25hbC4KKyAqICBSZXR1cm5zOgorICogICAgICAtRU5PU1lTOiAgIEFsd2F5cy4KKyAqLworc3RhdGljIGludCBmeG5fbm90X2ltcGxlbWVudGVkKGludCBhcmcsIC4uLikKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworLyoKKyAqICA9PT09PT09PSBpbml0X2NvZF9tZ3IgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDcmVhdGUgYSBDT0QgbWFuYWdlciBmb3IgdGhpcyBkZXZpY2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgZGV2X29iajogICAgICAgICAgICAgUG9pbnRlciB0byBkZXZpY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfY3JlYXRlX2RldmljZSgpCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogICAgICAgICAgICBJbnZhbGlkIGhkZXZfb2JqLgorICogIFJlcXVpcmVzOgorICogICAgICBTaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSBieSBkZXZfY3JlYXRlX2RldmljZSgpIGZvciBhIGdpdmVuIERldk9iamVjdC4KKyAqICBFbnN1cmVzOgorICovCitzdGF0aWMgaW50IGluaXRfY29kX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwljaGFyICpzel9kdW1teV9maWxlID0gImR1bW15IjsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRSghZGV2X29iaiB8fCAoZGV2X29iai0+Y29kX21nciA9PSBOVUxMKSk7CisKKwlzdGF0dXMgPSBjb2RfY3JlYXRlKCZkZXZfb2JqLT5jb2RfbWdyLCBzel9kdW1teV9maWxlLCBOVUxMKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGV2X2luc2VydF9wcm9jX29iamVjdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEluc2VydCBhIFByb2NPYmplY3QgaW50byB0aGUgbGlzdCBtYWludGFpbmVkIGJ5IERFVi4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBwX3Byb2Nfb2JqZWN0OiAgICAgICAgUHRyIHRvIFByb2NPYmplY3QgdG8gaW5zZXJ0LgorICogICAgICBkZXZfb2JqOiAgICAgICAgIFB0ciB0byBEZXYgT2JqZWN0IHdoZXJlIHRoZSBsaXN0IGlzLgorICAqICAgICBhbHJlYWR5X2F0dGFjaGVkOiAgUHRyIHRvIHJldHVybiB0aGUgYm9vbAorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICBJZiBzdWNjZXNzZnVsLgorICogIFJlcXVpcmVzOgorICogICAgICBMaXN0IEV4aXN0cworICogICAgICBoZGV2X29iaiBpcyBWYWxpZCBoYW5kbGUKKyAqICAgICAgREVWIEluaXRpYWxpemVkCisgKiAgICAgIGFscmVhZHlfYXR0YWNoZWQgIT0gTlVMTAorICogICAgICBwcm9jX29iaiAhPSAwCisgKiAgRW5zdXJlczoKKyAqICAgICAgMCBhbmQgTGlzdCBpcyBub3QgRW1wdHkuCisgKi8KK2ludCBkZXZfaW5zZXJ0X3Byb2Nfb2JqZWN0KHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCQkgIHUzMiBwcm9jX29iaiwgYm9vbCAqYWxyZWFkeV9hdHRhY2hlZCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaiA9IChzdHJ1Y3QgZGV2X29iamVjdCAqKWhkZXZfb2JqOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGRldl9vYmopOworCURCQ19SRVFVSVJFKHByb2Nfb2JqICE9IDApOworCURCQ19SRVFVSVJFKGRldl9vYmotPnByb2NfbGlzdCAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShhbHJlYWR5X2F0dGFjaGVkICE9IE5VTEwpOworCWlmICghTFNUX0lTX0VNUFRZKGRldl9vYmotPnByb2NfbGlzdCkpCisJCSphbHJlYWR5X2F0dGFjaGVkID0gdHJ1ZTsKKworCS8qIEFkZCBEZXZPYmplY3QgdG8gdGFpbC4gKi8KKwlsc3RfcHV0X3RhaWwoZGV2X29iai0+cHJvY19saXN0LCAoc3RydWN0IGxpc3RfaGVhZCAqKXByb2Nfb2JqKTsKKworCURCQ19FTlNVUkUoIXN0YXR1cyAmJiAhTFNUX0lTX0VNUFRZKGRldl9vYmotPnByb2NfbGlzdCkpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkZXZfcmVtb3ZlX3Byb2Nfb2JqZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgU2VhcmNoIGZvciBhbmQgcmVtb3ZlIGEgUHJvYyBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gbGlzdCBtYWludGFpbmVkCisgKiAgICAgIGJ5IHRoZSBERVYKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBwX3Byb2Nfb2JqZWN0OiAgICAgICAgUHRyIHRvIFByb2NPYmplY3QgdG8gaW5zZXJ0LgorICogICAgICBkZXZfb2JqICAgICAgICAgIFB0ciB0byBEZXYgT2JqZWN0IHdoZXJlIHRoZSBsaXN0IGlzLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgSWYgc3VjY2Vzc2Z1bC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgTGlzdCBleGlzdHMgYW5kIGlzIG5vdCBlbXB0eQorICogICAgICBwcm9jX29iaiAhPSAwCisgKiAgICAgIGhkZXZfb2JqIGlzIGEgdmFsaWQgRGV2IGhhbmRsZS4KKyAqICBFbnN1cmVzOgorICogIERldGFpbHM6CisgKiAgICAgIExpc3Qgd2lsbCBiZSBkZWxldGVkIHdoZW4gdGhlIERFViBpcyBkZXN0cm95ZWQuCisgKi8KK2ludCBkZXZfcmVtb3ZlX3Byb2Nfb2JqZWN0KHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwgdTMyIHByb2Nfb2JqKQoreworCWludCBzdGF0dXMgPSAtRVBFUk07CisJc3RydWN0IGxpc3RfaGVhZCAqY3VyX2VsZW07CisJc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmogPSAoc3RydWN0IGRldl9vYmplY3QgKiloZGV2X29iajsKKworCURCQ19SRVFVSVJFKGRldl9vYmopOworCURCQ19SRVFVSVJFKHByb2Nfb2JqICE9IDApOworCURCQ19SRVFVSVJFKGRldl9vYmotPnByb2NfbGlzdCAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRSghTFNUX0lTX0VNUFRZKGRldl9vYmotPnByb2NfbGlzdCkpOworCisJLyogU2VhcmNoIGxpc3QgZm9yIGRldl9vYmo6ICovCisJZm9yIChjdXJfZWxlbSA9IGxzdF9maXJzdChkZXZfb2JqLT5wcm9jX2xpc3QpOyBjdXJfZWxlbSAhPSBOVUxMOworCSAgICAgY3VyX2VsZW0gPSBsc3RfbmV4dChkZXZfb2JqLT5wcm9jX2xpc3QsIGN1cl9lbGVtKSkgeworCQkvKiBJZiBmb3VuZCwgcmVtb3ZlIGl0LiAqLworCQlpZiAoKHUzMikgY3VyX2VsZW0gPT0gcHJvY19vYmopIHsKKwkJCWxzdF9yZW1vdmVfZWxlbShkZXZfb2JqLT5wcm9jX2xpc3QsIGN1cl9lbGVtKTsKKwkJCXN0YXR1cyA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBkZXZfZ2V0X2Rldl90eXBlKHN0cnVjdCBkZXZfb2JqZWN0ICpkZXZpY2Vfb2JqLCB1OCAqZGV2X3R5cGUpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmogPSAoc3RydWN0IGRldl9vYmplY3QgKilkZXZpY2Vfb2JqOworCisJKmRldl90eXBlID0gZGV2X29iai0+ZGV2X3R5cGU7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHN0b3JlX2ludGVyZmFjZV9meG5zID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ29weSB0aGUgQnJpZGdlJ3MgaW50ZXJmYWNlIGZ1bmN0aW9ucyBpbnRvIHRoZSBkZXZpY2Ugb2JqZWN0LAorICogICAgICBlbnN1cmluZyB0aGF0IGZ4bl9ub3RfaW1wbGVtZW50ZWQoKSBpcyBzZXQgZm9yOgorICoKKyAqICAgICAgMS4gQWxsIEJyaWRnZSBmdW5jdGlvbiBwb2ludGVycyB3aGljaCBhcmUgTlVMTDsgYW5kCisgKiAgICAgIDIuIEFsbCBmdW5jdGlvbiBzbG90cyBpbiB0aGUgc3RydWN0IGRldl9vYmplY3Qgc3RydWN0dXJlIHdoaWNoIGhhdmUgbm8KKyAqICAgICAgICAgY29ycmVzcG9uZGluZyBzbG90cyBpbiB0aGUgdGhlIEJyaWRnZSdzIGludGVyZmFjZSwgYmVjYXVzZSB0aGUgQnJpZGdlCisgKiAgICAgICAgIGlzIG9mIGFuICpvbGRlciogdmVyc2lvbi4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBpbnRmX2Z4bnM6ICAgICAgSW50ZXJmYWNlIGZ4biBTdHJ1Y3R1cmUgb2YgdGhlIEJyaWRnZSdzIERldiBPYmplY3QuCisgKiAgICAgIGRydl9meG5zOiAgICAgIEludGVyZmFjZSBGeG5zIG9mZmVyZWQgYnkgdGhlIEJyaWRnZSBkdXJpbmcgREVWX0NyZWF0ZSgpLgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIElucHV0IHBvaW50ZXJzIGFyZSB2YWxpZC4KKyAqICAgICAgQnJpZGdlIGRyaXZlciBpcyAqbm90KiB3cml0dGVuIGZvciBhIG5ld2VyIERTUCBBUEkuCisgKiAgRW5zdXJlczoKKyAqICAgICAgQWxsIGZ1bmN0aW9uIHBvaW50ZXJzIGluIHRoZSBkZXYgb2JqZWN0J3MgZnhuIGludGVyZmFjZSBhcmUgbm90IE5VTEwuCisgKi8KK3N0YXRpYyB2b2lkIHN0b3JlX2ludGVyZmFjZV9meG5zKHN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqZHJ2X2Z4bnMsCisJCQkJIHN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zKQoreworCXUzMiBicmlkZ2VfdmVyc2lvbjsKKworCS8qIExvY2FsIGhlbHBlciBtYWNybzogKi8KKyNkZWZpbmUgIFNUT1JFX0ZYTihjYXN0LCBwZm4pIFwKKyAgICAoaW50Zl9meG5zLT5wZm4gPSAoKGRydl9meG5zLT5wZm4gIT0gTlVMTCkgPyBkcnZfZnhucy0+cGZuIDogXAorICAgIChjYXN0KWZ4bl9ub3RfaW1wbGVtZW50ZWQpKQorCisJREJDX1JFUVVJUkUoaW50Zl9meG5zICE9IE5VTEwpOworCURCQ19SRVFVSVJFKGRydl9meG5zICE9IE5VTEwpOworCURCQ19SRVFVSVJFKE1BS0VWRVJTSU9OKGRydl9meG5zLT5icmRfYXBpX21ham9yX3ZlcnNpb24sCisJCQlkcnZfZnhucy0+YnJkX2FwaV9taW5vcl92ZXJzaW9uKSA8PSBCUkRfQVBJX1ZFUlNJT04pOworCWJyaWRnZV92ZXJzaW9uID0gTUFLRVZFUlNJT04oZHJ2X2Z4bnMtPmJyZF9hcGlfbWFqb3JfdmVyc2lvbiwKKwkJCQkgICAgIGRydl9meG5zLT5icmRfYXBpX21pbm9yX3ZlcnNpb24pOworCWludGZfZnhucy0+YnJkX2FwaV9tYWpvcl92ZXJzaW9uID0gZHJ2X2Z4bnMtPmJyZF9hcGlfbWFqb3JfdmVyc2lvbjsKKwlpbnRmX2Z4bnMtPmJyZF9hcGlfbWlub3JfdmVyc2lvbiA9IGRydl9meG5zLT5icmRfYXBpX21pbm9yX3ZlcnNpb247CisJLyogSW5zdGFsbCBmdW5jdGlvbnMgdXAgdG8gRFNQIEFQSSB2ZXJzaW9uIC44MCAoZmlyc3QgYWxwaGEpOiAqLworCWlmIChicmlkZ2VfdmVyc2lvbiA+IDApIHsKKwkJU1RPUkVfRlhOKGZ4bl9kZXZfY3JlYXRlLCBwZm5fZGV2X2NyZWF0ZSk7CisJCVNUT1JFX0ZYTihmeG5fZGV2X2Rlc3Ryb3ksIHBmbl9kZXZfZGVzdHJveSk7CisJCVNUT1JFX0ZYTihmeG5fZGV2X2N0cmwsIHBmbl9kZXZfY250cmwpOworCQlTVE9SRV9GWE4oZnhuX2JyZF9tb25pdG9yLCBwZm5fYnJkX21vbml0b3IpOworCQlTVE9SRV9GWE4oZnhuX2JyZF9zdGFydCwgcGZuX2JyZF9zdGFydCk7CisJCVNUT1JFX0ZYTihmeG5fYnJkX3N0b3AsIHBmbl9icmRfc3RvcCk7CisJCVNUT1JFX0ZYTihmeG5fYnJkX3N0YXR1cywgcGZuX2JyZF9zdGF0dXMpOworCQlTVE9SRV9GWE4oZnhuX2JyZF9yZWFkLCBwZm5fYnJkX3JlYWQpOworCQlTVE9SRV9GWE4oZnhuX2JyZF93cml0ZSwgcGZuX2JyZF93cml0ZSk7CisJCVNUT1JFX0ZYTihmeG5fYnJkX3NldHN0YXRlLCBwZm5fYnJkX3NldF9zdGF0ZSk7CisJCVNUT1JFX0ZYTihmeG5fYnJkX21lbWNvcHksIHBmbl9icmRfbWVtX2NvcHkpOworCQlTVE9SRV9GWE4oZnhuX2JyZF9tZW13cml0ZSwgcGZuX2JyZF9tZW1fd3JpdGUpOworCQlTVE9SRV9GWE4oZnhuX2JyZF9tZW1tYXAsIHBmbl9icmRfbWVtX21hcCk7CisJCVNUT1JFX0ZYTihmeG5fYnJkX21lbXVubWFwLCBwZm5fYnJkX21lbV91bl9tYXApOworCQlTVE9SRV9GWE4oZnhuX2NobmxfY3JlYXRlLCBwZm5fY2hubF9jcmVhdGUpOworCQlTVE9SRV9GWE4oZnhuX2NobmxfZGVzdHJveSwgcGZuX2NobmxfZGVzdHJveSk7CisJCVNUT1JFX0ZYTihmeG5fY2hubF9vcGVuLCBwZm5fY2hubF9vcGVuKTsKKwkJU1RPUkVfRlhOKGZ4bl9jaG5sX2Nsb3NlLCBwZm5fY2hubF9jbG9zZSk7CisJCVNUT1JFX0ZYTihmeG5fY2hubF9hZGRpb3JlcSwgcGZuX2NobmxfYWRkX2lvX3JlcSk7CisJCVNUT1JFX0ZYTihmeG5fY2hubF9nZXRpb2MsIHBmbl9jaG5sX2dldF9pb2MpOworCQlTVE9SRV9GWE4oZnhuX2NobmxfY2FuY2VsaW8sIHBmbl9jaG5sX2NhbmNlbF9pbyk7CisJCVNUT1JFX0ZYTihmeG5fY2hubF9mbHVzaGlvLCBwZm5fY2hubF9mbHVzaF9pbyk7CisJCVNUT1JFX0ZYTihmeG5fY2hubF9nZXRpbmZvLCBwZm5fY2hubF9nZXRfaW5mbyk7CisJCVNUT1JFX0ZYTihmeG5fY2hubF9nZXRtZ3JpbmZvLCBwZm5fY2hubF9nZXRfbWdyX2luZm8pOworCQlTVE9SRV9GWE4oZnhuX2NobmxfaWRsZSwgcGZuX2NobmxfaWRsZSk7CisJCVNUT1JFX0ZYTihmeG5fY2hubF9yZWdpc3Rlcm5vdGlmeSwgcGZuX2NobmxfcmVnaXN0ZXJfbm90aWZ5KTsKKwkJU1RPUkVfRlhOKGZ4bl9pb19jcmVhdGUsIHBmbl9pb19jcmVhdGUpOworCQlTVE9SRV9GWE4oZnhuX2lvX2Rlc3Ryb3ksIHBmbl9pb19kZXN0cm95KTsKKwkJU1RPUkVfRlhOKGZ4bl9pb19vbmxvYWRlZCwgcGZuX2lvX29uX2xvYWRlZCk7CisJCVNUT1JFX0ZYTihmeG5faW9fZ2V0cHJvY2xvYWQsIHBmbl9pb19nZXRfcHJvY19sb2FkKTsKKwkJU1RPUkVfRlhOKGZ4bl9tc2dfY3JlYXRlLCBwZm5fbXNnX2NyZWF0ZSk7CisJCVNUT1JFX0ZYTihmeG5fbXNnX2NyZWF0ZXF1ZXVlLCBwZm5fbXNnX2NyZWF0ZV9xdWV1ZSk7CisJCVNUT1JFX0ZYTihmeG5fbXNnX2RlbGV0ZSwgcGZuX21zZ19kZWxldGUpOworCQlTVE9SRV9GWE4oZnhuX21zZ19kZWxldGVxdWV1ZSwgcGZuX21zZ19kZWxldGVfcXVldWUpOworCQlTVE9SRV9GWE4oZnhuX21zZ19nZXQsIHBmbl9tc2dfZ2V0KTsKKwkJU1RPUkVfRlhOKGZ4bl9tc2dfcHV0LCBwZm5fbXNnX3B1dCk7CisJCVNUT1JFX0ZYTihmeG5fbXNnX3JlZ2lzdGVybm90aWZ5LCBwZm5fbXNnX3JlZ2lzdGVyX25vdGlmeSk7CisJCVNUT1JFX0ZYTihmeG5fbXNnX3NldHF1ZXVlaWQsIHBmbl9tc2dfc2V0X3F1ZXVlX2lkKTsKKwl9CisJLyogQWRkIGNvZGUgZm9yIGFueSBhZGRpdGlvbmFsIGZ1bmN0aW9ucyBpbiBuZXdlckJyaWRnZSB2ZXJzaW9ucyBoZXJlICovCisJLyogRW5zdXJlIHBvc3Rjb25kaXRpb246ICovCisJREJDX0VOU1VSRShpbnRmX2Z4bnMtPnBmbl9kZXZfY3JlYXRlICE9IE5VTEwpOworCURCQ19FTlNVUkUoaW50Zl9meG5zLT5wZm5fZGV2X2Rlc3Ryb3kgIT0gTlVMTCk7CisJREJDX0VOU1VSRShpbnRmX2Z4bnMtPnBmbl9kZXZfY250cmwgIT0gTlVMTCk7CisJREJDX0VOU1VSRShpbnRmX2Z4bnMtPnBmbl9icmRfbW9uaXRvciAhPSBOVUxMKTsKKwlEQkNfRU5TVVJFKGludGZfZnhucy0+cGZuX2JyZF9zdGFydCAhPSBOVUxMKTsKKwlEQkNfRU5TVVJFKGludGZfZnhucy0+cGZuX2JyZF9zdG9wICE9IE5VTEwpOworCURCQ19FTlNVUkUoaW50Zl9meG5zLT5wZm5fYnJkX3N0YXR1cyAhPSBOVUxMKTsKKwlEQkNfRU5TVVJFKGludGZfZnhucy0+cGZuX2JyZF9yZWFkICE9IE5VTEwpOworCURCQ19FTlNVUkUoaW50Zl9meG5zLT5wZm5fYnJkX3dyaXRlICE9IE5VTEwpOworCURCQ19FTlNVUkUoaW50Zl9meG5zLT5wZm5fY2hubF9jcmVhdGUgIT0gTlVMTCk7CisJREJDX0VOU1VSRShpbnRmX2Z4bnMtPnBmbl9jaG5sX2Rlc3Ryb3kgIT0gTlVMTCk7CisJREJDX0VOU1VSRShpbnRmX2Z4bnMtPnBmbl9jaG5sX29wZW4gIT0gTlVMTCk7CisJREJDX0VOU1VSRShpbnRmX2Z4bnMtPnBmbl9jaG5sX2Nsb3NlICE9IE5VTEwpOworCURCQ19FTlNVUkUoaW50Zl9meG5zLT5wZm5fY2hubF9hZGRfaW9fcmVxICE9IE5VTEwpOworCURCQ19FTlNVUkUoaW50Zl9meG5zLT5wZm5fY2hubF9nZXRfaW9jICE9IE5VTEwpOworCURCQ19FTlNVUkUoaW50Zl9meG5zLT5wZm5fY2hubF9jYW5jZWxfaW8gIT0gTlVMTCk7CisJREJDX0VOU1VSRShpbnRmX2Z4bnMtPnBmbl9jaG5sX2ZsdXNoX2lvICE9IE5VTEwpOworCURCQ19FTlNVUkUoaW50Zl9meG5zLT5wZm5fY2hubF9nZXRfaW5mbyAhPSBOVUxMKTsKKwlEQkNfRU5TVVJFKGludGZfZnhucy0+cGZuX2NobmxfZ2V0X21ncl9pbmZvICE9IE5VTEwpOworCURCQ19FTlNVUkUoaW50Zl9meG5zLT5wZm5fY2hubF9pZGxlICE9IE5VTEwpOworCURCQ19FTlNVUkUoaW50Zl9meG5zLT5wZm5fY2hubF9yZWdpc3Rlcl9ub3RpZnkgIT0gTlVMTCk7CisJREJDX0VOU1VSRShpbnRmX2Z4bnMtPnBmbl9pb19jcmVhdGUgIT0gTlVMTCk7CisJREJDX0VOU1VSRShpbnRmX2Z4bnMtPnBmbl9pb19kZXN0cm95ICE9IE5VTEwpOworCURCQ19FTlNVUkUoaW50Zl9meG5zLT5wZm5faW9fb25fbG9hZGVkICE9IE5VTEwpOworCURCQ19FTlNVUkUoaW50Zl9meG5zLT5wZm5faW9fZ2V0X3Byb2NfbG9hZCAhPSBOVUxMKTsKKwlEQkNfRU5TVVJFKGludGZfZnhucy0+cGZuX21zZ19zZXRfcXVldWVfaWQgIT0gTlVMTCk7CisKKyN1bmRlZiAgU1RPUkVfRlhOCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9kbW0uYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2RtbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ODUyMzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9kbW0uYwpAQCAtMCwwICsxLDUzMyBAQAorLyoKKyAqIGRtbS5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIFRoZSBEeW5hbWljIE1lbW9yeSBNYW5hZ2VyIChETU0pIG1vZHVsZSBtYW5hZ2VzIHRoZSBEU1AgVmlydHVhbCBhZGRyZXNzCisgKiBzcGFjZSB0aGF0IGNhbiBiZSBkaXJlY3RseSBtYXBwZWQgdG8gYW55IE1QVSBidWZmZXIgb3IgbWVtb3J5IHJlZ2lvbgorICoKKyAqIE5vdGVzOgorICogICBSZWdpb246IEdlbmVyaWMgbWVtb3J5IGVudGl0aXkgaGF2aW5nIGEgc3RhcnQgYWRkcmVzcyBhbmQgYSBzaXplCisgKiAgIENodW5rOiAgUmVzZXJ2ZWQgcmVnaW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSG9zdCBPUyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEU1AvQklPUyBCcmlkZ2UgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcmFjZSAmIERlYnVnICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiYy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1MgQWRhcHRhdGlvbiBMYXllciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9zeW5jLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQbGF0Zm9ybSBNYW5hZ2VyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9wcm9jLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlzICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RtbS5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVmaW5lcywgRGF0YSBTdHJ1Y3R1cmVzLCBUeXBlZGVmcyAqLworI2RlZmluZSBETU1fQUREUl9WSVJUVUFMKGEpIFwKKwkoKChzdHJ1Y3QgbWFwX3BhZ2UgKikoYSkgLSB2aXJ0dWFsX21hcHBpbmdfdGFibGUpICogUEdfU0laRTRLICtcCisJZHluX21lbV9tYXBfYmVnKQorI2RlZmluZSBETU1fQUREUl9UT19JTkRFWChhKSAoKChhKSAtIGR5bl9tZW1fbWFwX2JlZykgLyBQR19TSVpFNEspCisKKy8qIERNTSBNZ3IgKi8KK3N0cnVjdCBkbW1fb2JqZWN0IHsKKwkvKiBEbW0gTG9jayBpcyB1c2VkIHRvIHNlcmlhbGl6ZSBhY2Nlc3MgbWVtIG1hbmFnZXIgZm9yCisJICogbXVsdGktdGhyZWFkcy4gKi8KKwlzcGlubG9ja190IGRtbV9sb2NrOwkvKiBMb2NrIHRvIGFjY2VzcyBkbW0gbWdyICovCit9OworCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFscyAqLworc3RhdGljIHUzMiByZWZzOwkJLyogbW9kdWxlIHJlZmVyZW5jZSBjb3VudCAqLworc3RydWN0IG1hcF9wYWdlIHsKKwl1MzIgcmVnaW9uX3NpemU6MTU7CisJdTMyIG1hcHBlZF9zaXplOjE1OworCXUzMiByZXNlcnZlZDoxOworCXUzMiBtYXBwZWQ6MTsKK307CisKKy8qICBDcmVhdGUgdGhlIGZyZWUgbGlzdCAqLworc3RhdGljIHN0cnVjdCBtYXBfcGFnZSAqdmlydHVhbF9tYXBwaW5nX3RhYmxlOworc3RhdGljIHUzMiBmcmVlX3JlZ2lvbjsJCS8qIFRoZSBpbmRleCBvZiBmcmVlIHJlZ2lvbiAqLworc3RhdGljIHUzMiBmcmVlX3NpemU7CitzdGF0aWMgdTMyIGR5bl9tZW1fbWFwX2JlZzsJLyogVGhlIEJlZ2lubmluZyBvZiBkeW5hbWljIG1lbW9yeSBtYXBwaW5nICovCitzdGF0aWMgdTMyIHRhYmxlX3NpemU7CQkvKiBUaGUgc2l6ZSBvZiB2aXJ0IGFuZCBwaHlzIHBhZ2VzIHRhYmxlcyAqLworCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb24gUHJvdG90eXBlcyAqLworc3RhdGljIHN0cnVjdCBtYXBfcGFnZSAqZ2V0X3JlZ2lvbih1MzIgYWRkcik7CitzdGF0aWMgc3RydWN0IG1hcF9wYWdlICpnZXRfZnJlZV9yZWdpb24odTMyIGxlbik7CitzdGF0aWMgc3RydWN0IG1hcF9wYWdlICpnZXRfbWFwcGVkX3JlZ2lvbih1MzIgYWRkcnMpOworCisvKiAgPT09PT09PT0gZG1tX2NyZWF0ZV90YWJsZXMgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDcmVhdGUgdGFibGUgdG8gaG9sZCB0aGUgaW5mb3JtYXRpb24gb2YgcGh5c2ljYWwgYWRkcmVzcworICogICAgICB0aGUgYnVmZmVyIHBhZ2VzIHRoYXQgaXMgcGFzc2VkIGJ5IHRoZSB1c2VyLCBhbmQgdGhlIHRhYmxlCisgKiAgICAgIHRvIGhvbGQgdGhlIGluZm9ybWF0aW9uIG9mIHRoZSB2aXJ0dWFsIG1lbW9yeSB0aGF0IGlzIHJlc2VydmVkCisgKiAgICAgIGZvciBEU1AuCisgKi8KK2ludCBkbW1fY3JlYXRlX3RhYmxlcyhzdHJ1Y3QgZG1tX29iamVjdCAqZG1tX21nciwgdTMyIGFkZHIsIHUzMiBzaXplKQoreworCXN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fb2JqID0gKHN0cnVjdCBkbW1fb2JqZWN0ICopZG1tX21ncjsKKwlpbnQgc3RhdHVzID0gMDsKKworCXN0YXR1cyA9IGRtbV9kZWxldGVfdGFibGVzKGRtbV9vYmopOworCWlmICghc3RhdHVzKSB7CisJCWR5bl9tZW1fbWFwX2JlZyA9IGFkZHI7CisJCXRhYmxlX3NpemUgPSBQR19BTElHTl9ISUdIKHNpemUsIFBHX1NJWkU0SykgLyBQR19TSVpFNEs7CisJCS8qICBDcmVhdGUgdGhlIGZyZWUgbGlzdCAqLworCQl2aXJ0dWFsX21hcHBpbmdfdGFibGUgPSBfX3ZtYWxsb2ModGFibGVfc2l6ZSAqCisJCQkJc2l6ZW9mKHN0cnVjdCBtYXBfcGFnZSksIEdGUF9LRVJORUwgfAorCQkJCV9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9aRVJPLCBQQUdFX0tFUk5FTCk7CisJCWlmICh2aXJ0dWFsX21hcHBpbmdfdGFibGUgPT0gTlVMTCkKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCWVsc2UgeworCQkJLyogT24gc3VjY2Vzc2Z1bCBhbGxvY2F0aW9uLAorCQkJICogYWxsIGVudHJpZXMgYXJlIHplcm8gKCdmcmVlJykgKi8KKwkJCWZyZWVfcmVnaW9uID0gMDsKKwkJCWZyZWVfc2l6ZSA9IHRhYmxlX3NpemUgKiBQR19TSVpFNEs7CisJCQl2aXJ0dWFsX21hcHBpbmdfdGFibGVbMF0ucmVnaW9uX3NpemUgPSB0YWJsZV9zaXplOworCQl9CisJfQorCisJaWYgKHN0YXR1cykKKwkJcHJfZXJyKCIlczogZmFpbHVyZSwgc3RhdHVzIDB4JXhcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkbW1fY3JlYXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ3JlYXRlIGEgZHluYW1pYyBtZW1vcnkgbWFuYWdlciBvYmplY3QuCisgKi8KK2ludCBkbW1fY3JlYXRlKHN0cnVjdCBkbW1fb2JqZWN0ICoqZG1tX21hbmFnZXIsCisJCSAgICAgIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJICAgICAgY29uc3Qgc3RydWN0IGRtbV9tZ3JhdHRycyAqbWdyX2F0dHJ0cykKK3sKKwlzdHJ1Y3QgZG1tX29iamVjdCAqZG1tX29iaiA9IE5VTEw7CisJaW50IHN0YXR1cyA9IDA7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGRtbV9tYW5hZ2VyICE9IE5VTEwpOworCisJKmRtbV9tYW5hZ2VyID0gTlVMTDsKKwkvKiBjcmVhdGUsIHplcm8sIGFuZCB0YWcgYSBjbW0gbWdyIG9iamVjdCAqLworCWRtbV9vYmogPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZG1tX29iamVjdCksIEdGUF9LRVJORUwpOworCWlmIChkbW1fb2JqICE9IE5VTEwpIHsKKwkJc3Bpbl9sb2NrX2luaXQoJmRtbV9vYmotPmRtbV9sb2NrKTsKKwkJKmRtbV9tYW5hZ2VyID0gZG1tX29iajsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZG1tX2Rlc3Ryb3kgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZWxlYXNlIHRoZSBjb21tdW5pY2F0aW9uIG1lbW9yeSBtYW5hZ2VyIHJlc291cmNlcy4KKyAqLworaW50IGRtbV9kZXN0cm95KHN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fbWdyKQoreworCXN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fb2JqID0gKHN0cnVjdCBkbW1fb2JqZWN0ICopZG1tX21ncjsKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlpZiAoZG1tX21ncikgeworCQlzdGF0dXMgPSBkbW1fZGVsZXRlX3RhYmxlcyhkbW1fb2JqKTsKKwkJaWYgKCFzdGF0dXMpCisJCQlrZnJlZShkbW1fb2JqKTsKKwl9IGVsc2UKKwkJc3RhdHVzID0gLUVGQVVMVDsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZG1tX2RlbGV0ZV90YWJsZXMgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEZWxldGUgRE1NIFRhYmxlcy4KKyAqLworaW50IGRtbV9kZWxldGVfdGFibGVzKHN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fbWdyKQoreworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCS8qIERlbGV0ZSBhbGwgRE1NIHRhYmxlcyAqLworCWlmIChkbW1fbWdyKQorCQl2ZnJlZSh2aXJ0dWFsX21hcHBpbmdfdGFibGUpOworCWVsc2UKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRtbV9leGl0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGlzY29udGludWUgdXNhZ2Ugb2YgbW9kdWxlOyBmcmVlIHJlc291cmNlcyB3aGVuIHJlZmVyZW5jZSBjb3VudAorICogICAgICByZWFjaGVzIDAuCisgKi8KK3ZvaWQgZG1tX2V4aXQodm9pZCkKK3sKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlyZWZzLS07Cit9CisKKy8qCisgKiAgPT09PT09PT0gZG1tX2dldF9oYW5kbGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXR1cm4gdGhlIGR5bmFtaWMgbWVtb3J5IG1hbmFnZXIgb2JqZWN0IGZvciB0aGlzIGRldmljZS4KKyAqICAgICAgVGhpcyBpcyB0eXBpY2FsbHkgY2FsbGVkIGZyb20gdGhlIGNsaWVudCBwcm9jZXNzLgorICovCitpbnQgZG1tX2dldF9oYW5kbGUodm9pZCAqaHByb2Nlc3Nvciwgc3RydWN0IGRtbV9vYmplY3QgKipkbW1fbWFuYWdlcikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmo7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoZG1tX21hbmFnZXIgIT0gTlVMTCk7CisJaWYgKGhwcm9jZXNzb3IgIT0gTlVMTCkKKwkJc3RhdHVzID0gcHJvY19nZXRfZGV2X29iamVjdChocHJvY2Vzc29yLCAmaGRldl9vYmopOworCWVsc2UKKwkJaGRldl9vYmogPSBkZXZfZ2V0X2ZpcnN0KCk7CS8qIGRlZmF1bHQgKi8KKworCWlmICghc3RhdHVzKQorCQlzdGF0dXMgPSBkZXZfZ2V0X2RtbV9tZ3IoaGRldl9vYmosIGRtbV9tYW5hZ2VyKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZG1tX2luaXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplcyBwcml2YXRlIHN0YXRlIG9mIERNTSBtb2R1bGUuCisgKi8KK2Jvb2wgZG1tX2luaXQodm9pZCkKK3sKKwlib29sIHJldCA9IHRydWU7CisKKwlEQkNfUkVRVUlSRShyZWZzID49IDApOworCisJaWYgKHJldCkKKwkJcmVmcysrOworCisJREJDX0VOU1VSRSgocmV0ICYmIChyZWZzID4gMCkpIHx8ICghcmV0ICYmIChyZWZzID49IDApKSk7CisKKwl2aXJ0dWFsX21hcHBpbmdfdGFibGUgPSBOVUxMOworCXRhYmxlX3NpemUgPSAwOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqICA9PT09PT09PSBkbW1fbWFwX21lbW9yeSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEFkZCBhIG1hcHBpbmcgYmxvY2sgdG8gdGhlIHJlc2VydmVkIGNodW5rLiBETU0gYXNzdW1lcyB0aGF0IHRoaXMgYmxvY2sKKyAqICB3aWxsIGJlIG1hcHBlZCBpbiB0aGUgRFNQL0lWQSdzIGFkZHJlc3Mgc3BhY2UuIERNTSByZXR1cm5zIGFuIGVycm9yIGlmIGEKKyAqICBtYXBwaW5nIG92ZXJsYXBzIGFub3RoZXIgb25lLiBUaGlzIGZ1bmN0aW9uIHN0b3JlcyB0aGUgaW5mbyB0aGF0IHdpbGwgYmUKKyAqICByZXF1aXJlZCBsYXRlciB3aGlsZSB1bm1hcHBpbmcgdGhlIGJsb2NrLgorICovCitpbnQgZG1tX21hcF9tZW1vcnkoc3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3IsIHUzMiBhZGRyLCB1MzIgc2l6ZSkKK3sKKwlzdHJ1Y3QgZG1tX29iamVjdCAqZG1tX29iaiA9IChzdHJ1Y3QgZG1tX29iamVjdCAqKWRtbV9tZ3I7CisJc3RydWN0IG1hcF9wYWdlICpjaHVuazsKKwlpbnQgc3RhdHVzID0gMDsKKworCXNwaW5fbG9jaygmZG1tX29iai0+ZG1tX2xvY2spOworCS8qIEZpbmQgdGhlIFJlc2VydmVkIG1lbW9yeSBjaHVuayBjb250YWluaW5nIHRoZSBEU1AgYmxvY2sgdG8KKwkgKiBiZSBtYXBwZWQgKi8KKwljaHVuayA9IChzdHJ1Y3QgbWFwX3BhZ2UgKilnZXRfcmVnaW9uKGFkZHIpOworCWlmIChjaHVuayAhPSBOVUxMKSB7CisJCS8qIE1hcmsgdGhlIHJlZ2lvbiAnbWFwcGVkJywgbGVhdmUgdGhlICdyZXNlcnZlZCcgaW5mbyBhcy1pcyAqLworCQljaHVuay0+bWFwcGVkID0gdHJ1ZTsKKwkJY2h1bmstPm1hcHBlZF9zaXplID0gKHNpemUgLyBQR19TSVpFNEspOworCX0gZWxzZQorCQlzdGF0dXMgPSAtRU5PRU5UOworCXNwaW5fdW5sb2NrKCZkbW1fb2JqLT5kbW1fbG9jayk7CisKKwlkZXZfZGJnKGJyaWRnZSwgIiVzIGRtbV9tZ3IgJXAsIGFkZHIgJXgsIHNpemUgJXhcblx0c3RhdHVzICV4LCAiCisJCSJjaHVuayAlcCIsIF9fZnVuY19fLCBkbW1fbWdyLCBhZGRyLCBzaXplLCBzdGF0dXMsIGNodW5rKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZG1tX3Jlc2VydmVfbWVtb3J5ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmVzZXJ2ZSBhIGNodW5rIG9mIHZpcnR1YWxseSBjb250aWd1b3VzIERTUC9JVkEgYWRkcmVzcyBzcGFjZS4KKyAqLworaW50IGRtbV9yZXNlcnZlX21lbW9yeShzdHJ1Y3QgZG1tX29iamVjdCAqZG1tX21nciwgdTMyIHNpemUsCisJCQkgICAgICB1MzIgKnByc3ZfYWRkcikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZG1tX29iamVjdCAqZG1tX29iaiA9IChzdHJ1Y3QgZG1tX29iamVjdCAqKWRtbV9tZ3I7CisJc3RydWN0IG1hcF9wYWdlICpub2RlOworCXUzMiByc3ZfYWRkciA9IDA7CisJdTMyIHJzdl9zaXplID0gMDsKKworCXNwaW5fbG9jaygmZG1tX29iai0+ZG1tX2xvY2spOworCisJLyogVHJ5IHRvIGdldCBhIERTUCBjaHVuayBmcm9tIHRoZSBmcmVlIGxpc3QgKi8KKwlub2RlID0gZ2V0X2ZyZWVfcmVnaW9uKHNpemUpOworCWlmIChub2RlICE9IE5VTEwpIHsKKwkJLyogIERTUCBjaHVuayBvZiBnaXZlbiBzaXplIGlzIGF2YWlsYWJsZS4gKi8KKwkJcnN2X2FkZHIgPSBETU1fQUREUl9WSVJUVUFMKG5vZGUpOworCQkvKiBDYWxjdWxhdGUgdGhlIG51bWJlciBlbnRyaWVzIHRvIHVzZSAqLworCQlyc3Zfc2l6ZSA9IHNpemUgLyBQR19TSVpFNEs7CisJCWlmIChyc3Zfc2l6ZSA8IG5vZGUtPnJlZ2lvbl9zaXplKSB7CisJCQkvKiBNYXJrIHJlbWFpbmRlciBvZiBmcmVlIHJlZ2lvbiAqLworCQkJbm9kZVtyc3Zfc2l6ZV0ubWFwcGVkID0gZmFsc2U7CisJCQlub2RlW3Jzdl9zaXplXS5yZXNlcnZlZCA9IGZhbHNlOworCQkJbm9kZVtyc3Zfc2l6ZV0ucmVnaW9uX3NpemUgPQorCQkJICAgIG5vZGUtPnJlZ2lvbl9zaXplIC0gcnN2X3NpemU7CisJCQlub2RlW3Jzdl9zaXplXS5tYXBwZWRfc2l6ZSA9IDA7CisJCX0KKwkJLyogIGdldF9yZWdpb24gd2lsbCByZXR1cm4gZmlyc3QgZml0IGNodW5rLiBCdXQgd2Ugb25seSB1c2Ugd2hhdAorCQkgICBpcyByZXF1ZXN0ZWQuICovCisJCW5vZGUtPm1hcHBlZCA9IGZhbHNlOworCQlub2RlLT5yZXNlcnZlZCA9IHRydWU7CisJCW5vZGUtPnJlZ2lvbl9zaXplID0gcnN2X3NpemU7CisJCW5vZGUtPm1hcHBlZF9zaXplID0gMDsKKwkJLyogUmV0dXJuIHRoZSBjaHVuaydzIHN0YXJ0aW5nIGFkZHJlc3MgKi8KKwkJKnByc3ZfYWRkciA9IHJzdl9hZGRyOworCX0gZWxzZQorCQkvKmRTUCBjaHVuayBvZiBnaXZlbiBzaXplIGlzIG5vdCBhdmFpbGFibGUgKi8KKwkJc3RhdHVzID0gLUVOT01FTTsKKworCXNwaW5fdW5sb2NrKCZkbW1fb2JqLT5kbW1fbG9jayk7CisKKwlkZXZfZGJnKGJyaWRnZSwgIiVzIGRtbV9tZ3IgJXAsIHNpemUgJXgsIHByc3ZfYWRkciAlcFxuXHRzdGF0dXMgJXgsICIKKwkJInJzdl9hZGRyICV4LCByc3Zfc2l6ZSAleFxuIiwgX19mdW5jX18sIGRtbV9tZ3IsIHNpemUsCisJCXByc3ZfYWRkciwgc3RhdHVzLCByc3ZfYWRkciwgcnN2X3NpemUpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkbW1fdW5fbWFwX21lbW9yeSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlbW92ZSB0aGUgbWFwcGVkIGJsb2NrIGZyb20gdGhlIHJlc2VydmVkIGNodW5rLgorICovCitpbnQgZG1tX3VuX21hcF9tZW1vcnkoc3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3IsIHUzMiBhZGRyLCB1MzIgKnBzaXplKQoreworCXN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fb2JqID0gKHN0cnVjdCBkbW1fb2JqZWN0ICopZG1tX21ncjsKKwlzdHJ1Y3QgbWFwX3BhZ2UgKmNodW5rOworCWludCBzdGF0dXMgPSAwOworCisJc3Bpbl9sb2NrKCZkbW1fb2JqLT5kbW1fbG9jayk7CisJY2h1bmsgPSBnZXRfbWFwcGVkX3JlZ2lvbihhZGRyKTsKKwlpZiAoY2h1bmsgPT0gTlVMTCkKKwkJc3RhdHVzID0gLUVOT0VOVDsKKworCWlmICghc3RhdHVzKSB7CisJCS8qIFVubWFwIHRoZSByZWdpb24gKi8KKwkJKnBzaXplID0gY2h1bmstPm1hcHBlZF9zaXplICogUEdfU0laRTRLOworCQljaHVuay0+bWFwcGVkID0gZmFsc2U7CisJCWNodW5rLT5tYXBwZWRfc2l6ZSA9IDA7CisJfQorCXNwaW5fdW5sb2NrKCZkbW1fb2JqLT5kbW1fbG9jayk7CisKKwlkZXZfZGJnKGJyaWRnZSwgIiVzOiBkbW1fbWdyICVwLCBhZGRyICV4LCBwc2l6ZSAlcFxuXHRzdGF0dXMgJXgsICIKKwkJImNodW5rICVwXG4iLCBfX2Z1bmNfXywgZG1tX21nciwgYWRkciwgcHNpemUsIHN0YXR1cywgY2h1bmspOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkbW1fdW5fcmVzZXJ2ZV9tZW1vcnkgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBGcmVlIGEgY2h1bmsgb2YgcmVzZXJ2ZWQgRFNQL0lWQSBhZGRyZXNzIHNwYWNlLgorICovCitpbnQgZG1tX3VuX3Jlc2VydmVfbWVtb3J5KHN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fbWdyLCB1MzIgcnN2X2FkZHIpCit7CisJc3RydWN0IGRtbV9vYmplY3QgKmRtbV9vYmogPSAoc3RydWN0IGRtbV9vYmplY3QgKilkbW1fbWdyOworCXN0cnVjdCBtYXBfcGFnZSAqY2h1bms7CisJdTMyIGk7CisJaW50IHN0YXR1cyA9IDA7CisJdTMyIGNodW5rX3NpemU7CisKKwlzcGluX2xvY2soJmRtbV9vYmotPmRtbV9sb2NrKTsKKworCS8qIEZpbmQgdGhlIGNodW5rIGNvbnRhaW5pbmcgdGhlIHJlc2VydmVkIGFkZHJlc3MgKi8KKwljaHVuayA9IGdldF9tYXBwZWRfcmVnaW9uKHJzdl9hZGRyKTsKKwlpZiAoY2h1bmsgPT0gTlVMTCkKKwkJc3RhdHVzID0gLUVOT0VOVDsKKworCWlmICghc3RhdHVzKSB7CisJCS8qIEZyZWUgYWxsIHRoZSBtYXBwZWQgcGFnZXMgZm9yIHRoaXMgcmVzZXJ2ZWQgcmVnaW9uICovCisJCWkgPSAwOworCQl3aGlsZSAoaSA8IGNodW5rLT5yZWdpb25fc2l6ZSkgeworCQkJaWYgKGNodW5rW2ldLm1hcHBlZCkgeworCQkJCS8qIFJlbW92ZSBtYXBwaW5nIGZyb20gdGhlIHBhZ2UgdGFibGVzLiAqLworCQkJCWNodW5rX3NpemUgPSBjaHVua1tpXS5tYXBwZWRfc2l6ZTsKKwkJCQkvKiBDbGVhciB0aGUgbWFwcGluZyBmbGFncyAqLworCQkJCWNodW5rW2ldLm1hcHBlZCA9IGZhbHNlOworCQkJCWNodW5rW2ldLm1hcHBlZF9zaXplID0gMDsKKwkJCQlpICs9IGNodW5rX3NpemU7CisJCQl9IGVsc2UKKwkJCQlpKys7CisJCX0KKwkJLyogQ2xlYXIgdGhlIGZsYWdzIChtYXJrIHRoZSByZWdpb24gJ2ZyZWUnKSAqLworCQljaHVuay0+cmVzZXJ2ZWQgPSBmYWxzZTsKKwkJLyogTk9URTogV2UgZG8gTk9UIGNvYWxlc2NlIGZyZWUgcmVnaW9ucyBoZXJlLgorCQkgKiBGcmVlIHJlZ2lvbnMgYXJlIGNvYWxlc2NlZCBpbiBnZXRfcmVnaW9uKCksIGFzIGl0IHRyYXZlcnNlcworCQkgKnRoZSB3aG9sZSBtYXBwaW5nIHRhYmxlCisJCSAqLworCX0KKwlzcGluX3VubG9jaygmZG1tX29iai0+ZG1tX2xvY2spOworCisJZGV2X2RiZyhicmlkZ2UsICIlczogZG1tX21nciAlcCwgcnN2X2FkZHIgJXhcblx0c3RhdHVzICV4IGNodW5rICVwIiwKKwkJX19mdW5jX18sIGRtbV9tZ3IsIHJzdl9hZGRyLCBzdGF0dXMsIGNodW5rKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZ2V0X3JlZ2lvbiA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHVybnMgYSByZWdpb24gY29udGFpbmluZyB0aGUgc3BlY2lmaWVkIG1lbW9yeSByZWdpb24KKyAqLworc3RhdGljIHN0cnVjdCBtYXBfcGFnZSAqZ2V0X3JlZ2lvbih1MzIgYWRkcikKK3sKKwlzdHJ1Y3QgbWFwX3BhZ2UgKmN1cnJfcmVnaW9uID0gTlVMTDsKKwl1MzIgaSA9IDA7CisKKwlpZiAodmlydHVhbF9tYXBwaW5nX3RhYmxlICE9IE5VTEwpIHsKKwkJLyogZmluZCBwYWdlIG1hcHBlZCBieSB0aGlzIGFkZHJlc3MgKi8KKwkJaSA9IERNTV9BRERSX1RPX0lOREVYKGFkZHIpOworCQlpZiAoaSA8IHRhYmxlX3NpemUpCisJCQljdXJyX3JlZ2lvbiA9IHZpcnR1YWxfbWFwcGluZ190YWJsZSArIGk7CisJfQorCisJZGV2X2RiZyhicmlkZ2UsICIlczogY3Vycl9yZWdpb24gJXAsIGZyZWVfcmVnaW9uICVkLCBmcmVlX3NpemUgJWRcbiIsCisJCV9fZnVuY19fLCBjdXJyX3JlZ2lvbiwgZnJlZV9yZWdpb24sIGZyZWVfc2l6ZSk7CisJcmV0dXJuIGN1cnJfcmVnaW9uOworfQorCisvKgorICogID09PT09PT09IGdldF9mcmVlX3JlZ2lvbiA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgUmV0dXJucyB0aGUgcmVxdWVzdGVkIGZyZWUgcmVnaW9uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbWFwX3BhZ2UgKmdldF9mcmVlX3JlZ2lvbih1MzIgbGVuKQoreworCXN0cnVjdCBtYXBfcGFnZSAqY3Vycl9yZWdpb24gPSBOVUxMOworCXUzMiBpID0gMDsKKwl1MzIgcmVnaW9uX3NpemUgPSAwOworCXUzMiBuZXh0X2kgPSAwOworCisJaWYgKHZpcnR1YWxfbWFwcGluZ190YWJsZSA9PSBOVUxMKQorCQlyZXR1cm4gY3Vycl9yZWdpb247CisJaWYgKGxlbiA+IGZyZWVfc2l6ZSkgeworCQkvKiBGaW5kIHRoZSBsYXJnZXN0IGZyZWUgcmVnaW9uCisJCSAqIChjb2FsZXNjZSBkdXJpbmcgdGhlIHRyYXZlcnNhbCkgKi8KKwkJd2hpbGUgKGkgPCB0YWJsZV9zaXplKSB7CisJCQlyZWdpb25fc2l6ZSA9IHZpcnR1YWxfbWFwcGluZ190YWJsZVtpXS5yZWdpb25fc2l6ZTsKKwkJCW5leHRfaSA9IGkgKyByZWdpb25fc2l6ZTsKKwkJCWlmICh2aXJ0dWFsX21hcHBpbmdfdGFibGVbaV0ucmVzZXJ2ZWQgPT0gZmFsc2UpIHsKKwkJCQkvKiBDb2FsZXNjZSwgaWYgcG9zc2libGUgKi8KKwkJCQlpZiAobmV4dF9pIDwgdGFibGVfc2l6ZSAmJgorCQkJCSAgICB2aXJ0dWFsX21hcHBpbmdfdGFibGVbbmV4dF9pXS5yZXNlcnZlZAorCQkJCSAgICA9PSBmYWxzZSkgeworCQkJCQl2aXJ0dWFsX21hcHBpbmdfdGFibGVbaV0ucmVnaW9uX3NpemUgKz0KKwkJCQkJICAgIHZpcnR1YWxfbWFwcGluZ190YWJsZQorCQkJCQkgICAgW25leHRfaV0ucmVnaW9uX3NpemU7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlyZWdpb25fc2l6ZSAqPSBQR19TSVpFNEs7CisJCQkJaWYgKHJlZ2lvbl9zaXplID4gZnJlZV9zaXplKSB7CisJCQkJCWZyZWVfcmVnaW9uID0gaTsKKwkJCQkJZnJlZV9zaXplID0gcmVnaW9uX3NpemU7CisJCQkJfQorCQkJfQorCQkJaSA9IG5leHRfaTsKKwkJfQorCX0KKwlpZiAobGVuIDw9IGZyZWVfc2l6ZSkgeworCQljdXJyX3JlZ2lvbiA9IHZpcnR1YWxfbWFwcGluZ190YWJsZSArIGZyZWVfcmVnaW9uOworCQlmcmVlX3JlZ2lvbiArPSAobGVuIC8gUEdfU0laRTRLKTsKKwkJZnJlZV9zaXplIC09IGxlbjsKKwl9CisJcmV0dXJuIGN1cnJfcmVnaW9uOworfQorCisvKgorICogID09PT09PT09IGdldF9tYXBwZWRfcmVnaW9uID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICBSZXR1cm5zIHRoZSByZXF1ZXN0ZWRtYXBwZWQgcmVnaW9uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbWFwX3BhZ2UgKmdldF9tYXBwZWRfcmVnaW9uKHUzMiBhZGRycykKK3sKKwl1MzIgaSA9IDA7CisJc3RydWN0IG1hcF9wYWdlICpjdXJyX3JlZ2lvbiA9IE5VTEw7CisKKwlpZiAodmlydHVhbF9tYXBwaW5nX3RhYmxlID09IE5VTEwpCisJCXJldHVybiBjdXJyX3JlZ2lvbjsKKworCWkgPSBETU1fQUREUl9UT19JTkRFWChhZGRycyk7CisJaWYgKGkgPCB0YWJsZV9zaXplICYmICh2aXJ0dWFsX21hcHBpbmdfdGFibGVbaV0ubWFwcGVkIHx8CisJCQkgICAgICAgdmlydHVhbF9tYXBwaW5nX3RhYmxlW2ldLnJlc2VydmVkKSkKKwkJY3Vycl9yZWdpb24gPSB2aXJ0dWFsX21hcHBpbmdfdGFibGUgKyBpOworCXJldHVybiBjdXJyX3JlZ2lvbjsKK30KKworI2lmZGVmIERTUF9ETU1fREVCVUcKK3UzMiBkbW1fbWVtX21hcF9kdW1wKHN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fbWdyKQoreworCXN0cnVjdCBtYXBfcGFnZSAqY3Vycl9ub2RlID0gTlVMTDsKKwl1MzIgaTsKKwl1MzIgZnJlZW1lbSA9IDA7CisJdTMyIGJpZ3NpemUgPSAwOworCisJc3Bpbl9sb2NrKCZkbW1fbWdyLT5kbW1fbG9jayk7CisKKwlpZiAodmlydHVhbF9tYXBwaW5nX3RhYmxlICE9IE5VTEwpIHsKKwkJZm9yIChpID0gMDsgaSA8IHRhYmxlX3NpemU7IGkgKz0KKwkJICAgICB2aXJ0dWFsX21hcHBpbmdfdGFibGVbaV0ucmVnaW9uX3NpemUpIHsKKwkJCWN1cnJfbm9kZSA9IHZpcnR1YWxfbWFwcGluZ190YWJsZSArIGk7CisJCQlpZiAoY3Vycl9ub2RlLT5yZXNlcnZlZCkgeworCQkJCS8qcHJpbnRrKCJSRVNFUlZFRCBzaXplID0gMHgleCwgIgorCQkJCSAgICJNYXAgc2l6ZSA9IDB4JXhcbiIsCisJCQkJICAgKGN1cnJfbm9kZS0+cmVnaW9uX3NpemUgKiBQR19TSVpFNEspLAorCQkJCSAgIChjdXJyX25vZGUtPm1hcHBlZCA9PSBmYWxzZSkgPyAwIDoKKwkJCQkgICAoY3Vycl9ub2RlLT5tYXBwZWRfc2l6ZSAqIFBHX1NJWkU0SykpOworCQkJCSAqLworCQkJfSBlbHNlIHsKKy8qCQkJCXByaW50aygiVU5SRVNFUlZFRCBzaXplID0gMHgleFxuIiwKKwkJCQkJKGN1cnJfbm9kZS0+cmVnaW9uX3NpemUgKiBQR19TSVpFNEspKTsKKyAqLworCQkJCWZyZWVtZW0gKz0gKGN1cnJfbm9kZS0+cmVnaW9uX3NpemUgKiBQR19TSVpFNEspOworCQkJCWlmIChjdXJyX25vZGUtPnJlZ2lvbl9zaXplID4gYmlnc2l6ZSkKKwkJCQkJYmlnc2l6ZSA9IGN1cnJfbm9kZS0+cmVnaW9uX3NpemU7CisJCQl9CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJmRtbV9tZ3ItPmRtbV9sb2NrKTsKKwlwcmludGsoS0VSTl9JTkZPICJUb3RhbCBEU1AgVkEgRlJFRSBtZW1vcnkgPSAlZCBNYnl0ZXNcbiIsCisJICAgICAgIGZyZWVtZW0gLyAoMTAyNCAqIDEwMjQpKTsKKwlwcmludGsoS0VSTl9JTkZPICJUb3RhbCBEU1AgVkEgVVNFRCBtZW1vcnk9ICVkIE1ieXRlcyBcbiIsCisJICAgICAgICgoKHRhYmxlX3NpemUgKiBQR19TSVpFNEspIC0gZnJlZW1lbSkpIC8gKDEwMjQgKiAxMDI0KSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiRFNQIFZBIC0gQmlnZ2VzdCBGUkVFIGJsb2NrID0gJWQgTWJ5dGVzIFxuXG4iLAorCSAgICAgICAoYmlnc2l6ZSAqIFBHX1NJWkU0SyAvICgxMDI0ICogMTAyNCkpKTsKKworCXJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9kc3BhcGkuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2RzcGFwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNDJmNzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9kc3BhcGkuYwpAQCAtMCwwICsxLDE5MDYgQEAKKy8qCisgKiBkc3BhcGkuYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBDb21tb24gRFNQIEFQSSBmdW5jdGlvbnMsIGFsc28gaW5jbHVkZXMgdGhlIHdyYXBwZXIKKyAqIGZ1bmN0aW9ucyBjYWxsZWQgZGlyZWN0bHkgYnkgdGhlIERldmljZUlPQ29udHJvbCBpbnRlcmZhY2UuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSG9zdCBPUyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEU1AvQklPUyBCcmlkZ2UgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcmFjZSAmIERlYnVnICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiYy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1MgQWRhcHRhdGlvbiBMYXllciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9jZmcuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvbnRmeS5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9zZXJ2aWNlcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhdGZvcm0gTWFuYWdlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9jaG5sLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kcnYuaD4KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9wcm9jLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3N0cm0uaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlc291cmNlIE1hbmFnZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGlzcC5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9tZ3IuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvbm9kZS5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9ybW0uaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE90aGVycyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9tc2cuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY21tLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2lvLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlzICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGFwaS5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRjZC5oPgorCisjaW5jbHVkZSA8ZHNwYnJpZGdlL3Jlc291cmNlY2xlYW51cC5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVmaW5lcywgRGF0YSBTdHJ1Y3R1cmVzLCBUeXBlZGVmcyAqLworI2RlZmluZSBNQVhfVFJBQ0VCVUZMRU4gMjU1CisjZGVmaW5lIE1BWF9MT0FEQVJHUyAgICAxNgorI2RlZmluZSBNQVhfTk9ERVMgICAgICAgNjQKKyNkZWZpbmUgTUFYX1NUUkVBTVMgICAgIDE2CisjZGVmaW5lIE1BWF9CVUZTCTY0CisKKy8qIFVzZWQgdG8gZ2V0IGRzcGJyaWRnZSBpb2N0bCB0YWJsZSAqLworI2RlZmluZSBEQl9HRVRfSU9DX1RBQkxFKGNtZCkJKERCX0dFVF9NT0RVTEUoY21kKSA+PiBEQl9NT0RVTEVfU0hJRlQpCisKKy8qIERldmljZSBJT0N0bCBmdW5jdGlvbiBwb2ludGVyICovCitzdHJ1Y3QgYXBpX2NtZCB7CisJdTMyKCpmeG4pICh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworCXUzMiBkd19pbmRleDsKK307CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHbG9iYWxzICovCitzdGF0aWMgdTMyIGFwaV9jX3JlZnM7CisKKy8qCisgKiAgRnVuY3Rpb24gdGFibGVzLgorICogIFRoZSBvcmRlciBvZiB0aGVzZSBmdW5jdGlvbnMgTVVTVCBiZSB0aGUgc2FtZSBhcyB0aGUgb3JkZXIgb2YgdGhlIGNvbW1hbmQKKyAqICBudW1iZXJzIGRlZmluZWQgaW4gZHNwYXBpLWlvY3RsLmggIFRoaXMgaXMgaG93IGFuIElPQ1RMIG51bWJlciBpbiB1c2VyIG1vZGUKKyAqICB0dXJucyBpbnRvIGEgZnVuY3Rpb24gY2FsbCBpbiBrZXJuZWwgbW9kZS4KKyAqLworCisvKiBNR1Igd3JhcHBlciBmdW5jdGlvbnMgKi8KK3N0YXRpYyBzdHJ1Y3QgYXBpX2NtZCBtZ3JfY21kW10gPSB7CisJe21ncndyYXBfZW51bV9ub2RlX2luZm99LAkvKiBNR1JfRU5VTU5PREVfSU5GTyAqLworCXttZ3J3cmFwX2VudW1fcHJvY19pbmZvfSwJLyogTUdSX0VOVU1QUk9DX0lORk8gKi8KKwl7bWdyd3JhcF9yZWdpc3Rlcl9vYmplY3R9LAkvKiBNR1JfUkVHSVNURVJPQkpFQ1QgKi8KKwl7bWdyd3JhcF91bnJlZ2lzdGVyX29iamVjdH0sCS8qIE1HUl9VTlJFR0lTVEVST0JKRUNUICovCisJe21ncndyYXBfd2FpdF9mb3JfYnJpZGdlX2V2ZW50c30sCS8qIE1HUl9XQUlUICovCisJe21ncndyYXBfZ2V0X3Byb2Nlc3NfcmVzb3VyY2VzX2luZm99LAkvKiBNR1JfR0VUX1BST0NfUkVTICovCit9OworCisvKiBQUk9DIHdyYXBwZXIgZnVuY3Rpb25zICovCitzdGF0aWMgc3RydWN0IGFwaV9jbWQgcHJvY19jbWRbXSA9IHsKKwl7cHJvY3dyYXBfYXR0YWNofSwJLyogUFJPQ19BVFRBQ0ggKi8KKwl7cHJvY3dyYXBfY3RybH0sCS8qIFBST0NfQ1RSTCAqLworCXtwcm9jd3JhcF9kZXRhY2h9LAkvKiBQUk9DX0RFVEFDSCAqLworCXtwcm9jd3JhcF9lbnVtX25vZGVfaW5mb30sCS8qIFBST0NfRU5VTU5PREUgKi8KKwl7cHJvY3dyYXBfZW51bV9yZXNvdXJjZXN9LAkvKiBQUk9DX0VOVU1SRVNPVVJDRVMgKi8KKwl7cHJvY3dyYXBfZ2V0X3N0YXRlfSwJLyogUFJPQ19HRVRfU1RBVEUgKi8KKwl7cHJvY3dyYXBfZ2V0X3RyYWNlfSwJLyogUFJPQ19HRVRfVFJBQ0UgKi8KKwl7cHJvY3dyYXBfbG9hZH0sCS8qIFBST0NfTE9BRCAqLworCXtwcm9jd3JhcF9yZWdpc3Rlcl9ub3RpZnl9LAkvKiBQUk9DX1JFR0lTVEVSTk9USUZZICovCisJe3Byb2N3cmFwX3N0YXJ0fSwJLyogUFJPQ19TVEFSVCAqLworCXtwcm9jd3JhcF9yZXNlcnZlX21lbW9yeX0sCS8qIFBST0NfUlNWTUVNICovCisJe3Byb2N3cmFwX3VuX3Jlc2VydmVfbWVtb3J5fSwJLyogUFJPQ19VTlJTVk1FTSAqLworCXtwcm9jd3JhcF9tYXB9LAkJLyogUFJPQ19NQVBNRU0gKi8KKwl7cHJvY3dyYXBfdW5fbWFwfSwJLyogUFJPQ19VTk1BUE1FTSAqLworCXtwcm9jd3JhcF9mbHVzaF9tZW1vcnl9LAkvKiBQUk9DX0ZMVVNITUVNT1JZICovCisJe3Byb2N3cmFwX3N0b3B9LAkvKiBQUk9DX1NUT1AgKi8KKwl7cHJvY3dyYXBfaW52YWxpZGF0ZV9tZW1vcnl9LAkvKiBQUk9DX0lOVkFMSURBVEVNRU1PUlkgKi8KKwl7cHJvY3dyYXBfYmVnaW5fZG1hfSwJLyogUFJPQ19CRUdJTkRNQSAqLworCXtwcm9jd3JhcF9lbmRfZG1hfSwJLyogUFJPQ19FTkRETUEgKi8KK307CisKKy8qIE5PREUgd3JhcHBlciBmdW5jdGlvbnMgKi8KK3N0YXRpYyBzdHJ1Y3QgYXBpX2NtZCBub2RlX2NtZFtdID0geworCXtub2Rld3JhcF9hbGxvY2F0ZX0sCS8qIE5PREVfQUxMT0NBVEUgKi8KKwl7bm9kZXdyYXBfYWxsb2NfbXNnX2J1Zn0sCS8qIE5PREVfQUxMT0NNU0dCVUYgKi8KKwl7bm9kZXdyYXBfY2hhbmdlX3ByaW9yaXR5fSwJLyogTk9ERV9DSEFOR0VQUklPUklUWSAqLworCXtub2Rld3JhcF9jb25uZWN0fSwJLyogTk9ERV9DT05ORUNUICovCisJe25vZGV3cmFwX2NyZWF0ZX0sCS8qIE5PREVfQ1JFQVRFICovCisJe25vZGV3cmFwX2RlbGV0ZX0sCS8qIE5PREVfREVMRVRFICovCisJe25vZGV3cmFwX2ZyZWVfbXNnX2J1Zn0sCS8qIE5PREVfRlJFRU1TR0JVRiAqLworCXtub2Rld3JhcF9nZXRfYXR0cn0sCS8qIE5PREVfR0VUQVRUUiAqLworCXtub2Rld3JhcF9nZXRfbWVzc2FnZX0sCS8qIE5PREVfR0VUTUVTU0FHRSAqLworCXtub2Rld3JhcF9wYXVzZX0sCS8qIE5PREVfUEFVU0UgKi8KKwl7bm9kZXdyYXBfcHV0X21lc3NhZ2V9LAkvKiBOT0RFX1BVVE1FU1NBR0UgKi8KKwl7bm9kZXdyYXBfcmVnaXN0ZXJfbm90aWZ5fSwJLyogTk9ERV9SRUdJU1RFUk5PVElGWSAqLworCXtub2Rld3JhcF9ydW59LAkJLyogTk9ERV9SVU4gKi8KKwl7bm9kZXdyYXBfdGVybWluYXRlfSwJLyogTk9ERV9URVJNSU5BVEUgKi8KKwl7bm9kZXdyYXBfZ2V0X3V1aWRfcHJvcHN9LAkvKiBOT0RFX0dFVFVVSURQUk9QUyAqLworfTsKKworLyogU1RSTSB3cmFwcGVyIGZ1bmN0aW9ucyAqLworc3RhdGljIHN0cnVjdCBhcGlfY21kIHN0cm1fY21kW10gPSB7CisJe3N0cm13cmFwX2FsbG9jYXRlX2J1ZmZlcn0sCS8qIFNUUk1fQUxMT0NBVEVCVUZGRVIgKi8KKwl7c3RybXdyYXBfY2xvc2V9LAkvKiBTVFJNX0NMT1NFICovCisJe3N0cm13cmFwX2ZyZWVfYnVmZmVyfSwJLyogU1RSTV9GUkVFQlVGRkVSICovCisJe3N0cm13cmFwX2dldF9ldmVudF9oYW5kbGV9LAkvKiBTVFJNX0dFVEVWRU5USEFORExFICovCisJe3N0cm13cmFwX2dldF9pbmZvfSwJLyogU1RSTV9HRVRJTkZPICovCisJe3N0cm13cmFwX2lkbGV9LAkvKiBTVFJNX0lETEUgKi8KKwl7c3RybXdyYXBfaXNzdWV9LAkvKiBTVFJNX0lTU1VFICovCisJe3N0cm13cmFwX29wZW59LAkvKiBTVFJNX09QRU4gKi8KKwl7c3RybXdyYXBfcmVjbGFpbX0sCS8qIFNUUk1fUkVDTEFJTSAqLworCXtzdHJtd3JhcF9yZWdpc3Rlcl9ub3RpZnl9LAkvKiBTVFJNX1JFR0lTVEVSTk9USUZZICovCisJe3N0cm13cmFwX3NlbGVjdH0sCS8qIFNUUk1fU0VMRUNUICovCit9OworCisvKiBDTU0gd3JhcHBlciBmdW5jdGlvbnMgKi8KK3N0YXRpYyBzdHJ1Y3QgYXBpX2NtZCBjbW1fY21kW10gPSB7CisJe2NtbXdyYXBfY2FsbG9jX2J1Zn0sCS8qIENNTV9BTExPQ0JVRiAqLworCXtjbW13cmFwX2ZyZWVfYnVmfSwJLyogQ01NX0ZSRUVCVUYgKi8KKwl7Y21td3JhcF9nZXRfaGFuZGxlfSwJLyogQ01NX0dFVEhBTkRMRSAqLworCXtjbW13cmFwX2dldF9pbmZvfSwJLyogQ01NX0dFVElORk8gKi8KK307CisKKy8qIEFycmF5IHVzZWQgdG8gc3RvcmUgaW9jdGwgdGFibGUgc2l6ZXMuIEl0IGNhbiBob2xkIHVwIHRvIDggZW50cmllcyAqLworc3RhdGljIHU4IHNpemVfY21kW10gPSB7CisJQVJSQVlfU0laRShtZ3JfY21kKSwKKwlBUlJBWV9TSVpFKHByb2NfY21kKSwKKwlBUlJBWV9TSVpFKG5vZGVfY21kKSwKKwlBUlJBWV9TSVpFKHN0cm1fY21kKSwKKwlBUlJBWV9TSVpFKGNtbV9jbWQpLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIF9jcF9mbV91c3Iodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICogZnJvbSwKKwkJCSAgICAgIGludCAqZXJyLCB1bnNpZ25lZCBsb25nIGJ5dGVzKQoreworCWlmICgqZXJyKQorCQlyZXR1cm47CisKKwlpZiAodW5saWtlbHkoIWZyb20pKSB7CisJCSplcnIgPSAtRUZBVUxUOworCQlyZXR1cm47CisJfQorCisJaWYgKHVubGlrZWx5KGNvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBieXRlcykpKQorCQkqZXJyID0gLUVGQVVMVDsKK30KKworI2RlZmluZSBDUF9GTV9VU1IodG8sIGZyb20sIGVyciwgbikJCQkJXAorCV9jcF9mbV91c3IodG8sIGZyb20sICYoZXJyKSwgKG4pICogc2l6ZW9mKCoodG8pKSkKKworc3RhdGljIGlubGluZSB2b2lkIF9jcF90b191c3Iodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkICpmcm9tLAorCQkJICAgICAgaW50ICplcnIsIHVuc2lnbmVkIGxvbmcgYnl0ZXMpCit7CisJaWYgKCplcnIpCisJCXJldHVybjsKKworCWlmICh1bmxpa2VseSghdG8pKSB7CisJCSplcnIgPSAtRUZBVUxUOworCQlyZXR1cm47CisJfQorCisJaWYgKHVubGlrZWx5KGNvcHlfdG9fdXNlcih0bywgZnJvbSwgYnl0ZXMpKSkKKwkJKmVyciA9IC1FRkFVTFQ7Cit9CisKKyNkZWZpbmUgQ1BfVE9fVVNSKHRvLCBmcm9tLCBlcnIsIG4pCQkJCVwKKwlfY3BfdG9fdXNyKHRvLCBmcm9tLCAmKGVyciksIChuKSAqIHNpemVvZigqKGZyb20pKSkKKworLyoKKyAqICA9PT09PT09PSBhcGlfY2FsbF9kZXZfaW9jdGwgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDYWxsIHRoZSAod3JhcHBlcikgZnVuY3Rpb24gZm9yIHRoZSBjb3JyZXNwb25kaW5nIEFQSSBJT0NUTC4KKyAqLworaW5saW5lIGludCBhcGlfY2FsbF9kZXZfaW9jdGwodTMyIGNtZCwgdW5pb24gdHJhcHBlZF9hcmdzICphcmdzLAorCQkJCSAgICAgIHUzMiAqcmVzdWx0LCB2b2lkICpwcl9jdHh0KQoreworCXUzMigqaW9jdGxfY21kKSAodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KSA9IE5VTEw7CisJaW50IGk7CisKKwlpZiAoX0lPQ19UWVBFKGNtZCkgIT0gREIpIHsKKwkJcHJfZXJyKCIlczogSW5jb21wYXRpYmxlIGRzcGJyaWRnZSBpb2N0bCBudW1iZXJcbiIsIF9fZnVuY19fKTsKKwkJZ290byBlcnI7CisJfQorCisJaWYgKERCX0dFVF9JT0NfVEFCTEUoY21kKSA+IEFSUkFZX1NJWkUoc2l6ZV9jbWQpKSB7CisJCXByX2VycigiJXM6IHVuZGVmaW5lZCBpb2N0bCBtb2R1bGVcbiIsIF9fZnVuY19fKTsKKwkJZ290byBlcnI7CisJfQorCisJLyogQ2hlY2sgdGhlIHNpemUgb2YgdGhlIHJlcXVpcmVkIGNtZCB0YWJsZSAqLworCWkgPSBEQl9HRVRfSU9DKGNtZCk7CisJaWYgKGkgPiBzaXplX2NtZFtEQl9HRVRfSU9DX1RBQkxFKGNtZCldKSB7CisJCXByX2VycigiJXM6IHJlcXVlc3RlZCBpb2N0bCAlZCBvdXQgb2YgYm91bmRzIGZvciB0YWJsZSAlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBpLCBEQl9HRVRfSU9DX1RBQkxFKGNtZCkpOworCQlnb3RvIGVycjsKKwl9CisKKwlzd2l0Y2ggKERCX0dFVF9NT0RVTEUoY21kKSkgeworCWNhc2UgREJfTUdSOgorCQlpb2N0bF9jbWQgPSBtZ3JfY21kW2ldLmZ4bjsKKwkJYnJlYWs7CisJY2FzZSBEQl9QUk9DOgorCQlpb2N0bF9jbWQgPSBwcm9jX2NtZFtpXS5meG47CisJCWJyZWFrOworCWNhc2UgREJfTk9ERToKKwkJaW9jdGxfY21kID0gbm9kZV9jbWRbaV0uZnhuOworCQlicmVhazsKKwljYXNlIERCX1NUUk06CisJCWlvY3RsX2NtZCA9IHN0cm1fY21kW2ldLmZ4bjsKKwkJYnJlYWs7CisJY2FzZSBEQl9DTU06CisJCWlvY3RsX2NtZCA9IGNtbV9jbWRbaV0uZnhuOworCQlicmVhazsKKwl9CisKKwlpZiAoIWlvY3RsX2NtZCkgeworCQlwcl9lcnIoIiVzOiByZXF1ZXN0ZWQgaW9jdGwgbm90IGRlZmluZWRcbiIsIF9fZnVuY19fKTsKKwkJZ290byBlcnI7CisJfSBlbHNlIHsKKwkJKnJlc3VsdCA9ICgqaW9jdGxfY21kKSAoYXJncywgcHJfY3R4dCk7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqICA9PT09PT09PSBhcGlfZXhpdCA9PT09PT09PQorICovCit2b2lkIGFwaV9leGl0KHZvaWQpCit7CisJREJDX1JFUVVJUkUoYXBpX2NfcmVmcyA+IDApOworCWFwaV9jX3JlZnMtLTsKKworCWlmIChhcGlfY19yZWZzID09IDApIHsKKwkJLyogUmVsZWFzZSBhbGwgbW9kdWxlcyBpbml0aWFsaXplZCBpbiBhcGlfaW5pdCgpLiAqLworCQljb2RfZXhpdCgpOworCQlkZXZfZXhpdCgpOworCQljaG5sX2V4aXQoKTsKKwkJbXNnX2V4aXQoKTsKKwkJaW9fZXhpdCgpOworCQlzdHJtX2V4aXQoKTsKKwkJZGlzcF9leGl0KCk7CisJCW5vZGVfZXhpdCgpOworCQlwcm9jX2V4aXQoKTsKKwkJbWdyX2V4aXQoKTsKKwkJcm1tX2V4aXQoKTsKKwkJZHJ2X2V4aXQoKTsKKwl9CisJREJDX0VOU1VSRShhcGlfY19yZWZzID49IDApOworfQorCisvKgorICogID09PT09PT09IGFwaV9pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgTW9kdWxlIGluaXRpYWxpemF0aW9uIHVzZWQgYnkgQnJpZGdlIEFQSS4KKyAqLworYm9vbCBhcGlfaW5pdCh2b2lkKQoreworCWJvb2wgcmV0ID0gdHJ1ZTsKKwlib29sIGZkcnYsIGZkZXYsIGZjb2QsIGZjaG5sLCBmbXNnLCBmaW87CisJYm9vbCBmbWdyLCBmcHJvYywgZm5vZGUsIGZkaXNwLCBmc3RybSwgZnJtbTsKKworCWlmIChhcGlfY19yZWZzID09IDApIHsKKwkJLyogaW5pdGlhbGl6ZSBkcml2ZXIgYW5kIG90aGVyIG1vZHVsZXMgKi8KKwkJZmRydiA9IGRydl9pbml0KCk7CisJCWZtZ3IgPSBtZ3JfaW5pdCgpOworCQlmcHJvYyA9IHByb2NfaW5pdCgpOworCQlmbm9kZSA9IG5vZGVfaW5pdCgpOworCQlmZGlzcCA9IGRpc3BfaW5pdCgpOworCQlmc3RybSA9IHN0cm1faW5pdCgpOworCQlmcm1tID0gcm1tX2luaXQoKTsKKwkJZmNobmwgPSBjaG5sX2luaXQoKTsKKwkJZm1zZyA9IG1zZ19tb2RfaW5pdCgpOworCQlmaW8gPSBpb19pbml0KCk7CisJCWZkZXYgPSBkZXZfaW5pdCgpOworCQlmY29kID0gY29kX2luaXQoKTsKKwkJcmV0ID0gZmRydiAmJiBmZGV2ICYmIGZjaG5sICYmIGZjb2QgJiYgZm1zZyAmJiBmaW87CisJCXJldCA9IHJldCAmJiBmbWdyICYmIGZwcm9jICYmIGZybW07CisJCWlmICghcmV0KSB7CisJCQlpZiAoZmRydikKKwkJCQlkcnZfZXhpdCgpOworCisJCQlpZiAoZm1ncikKKwkJCQltZ3JfZXhpdCgpOworCisJCQlpZiAoZnN0cm0pCisJCQkJc3RybV9leGl0KCk7CisKKwkJCWlmIChmcHJvYykKKwkJCQlwcm9jX2V4aXQoKTsKKworCQkJaWYgKGZub2RlKQorCQkJCW5vZGVfZXhpdCgpOworCisJCQlpZiAoZmRpc3ApCisJCQkJZGlzcF9leGl0KCk7CisKKwkJCWlmIChmY2hubCkKKwkJCQljaG5sX2V4aXQoKTsKKworCQkJaWYgKGZtc2cpCisJCQkJbXNnX2V4aXQoKTsKKworCQkJaWYgKGZpbykKKwkJCQlpb19leGl0KCk7CisKKwkJCWlmIChmZGV2KQorCQkJCWRldl9leGl0KCk7CisKKwkJCWlmIChmY29kKQorCQkJCWNvZF9leGl0KCk7CisKKwkJCWlmIChmcm1tKQorCQkJCXJtbV9leGl0KCk7CisKKwkJfQorCX0KKwlpZiAocmV0KQorCQlhcGlfY19yZWZzKys7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogID09PT09PT09IGFwaV9pbml0X2NvbXBsZXRlMiA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFBlcmZvcm0gYW55IHJlcXVpcmVkIGJyaWRnZSBpbml0aWFsaXphdGlvbiB3aGljaCBjYW5ub3QKKyAqICAgICAgYmUgcGVyZm9ybWVkIGluIGFwaV9pbml0KCkgb3IgZGV2X3N0YXJ0X2RldmljZSgpIGR1ZQorICogICAgICB0byB0aGUgZmFjdCB0aGF0IHNvbWUgc2VydmljZXMgYXJlIG5vdCB5ZXQKKyAqICAgICAgY29tcGxldGVseSBpbml0aWFsaXplZC4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgICAgIDA6CUFsbG93IHRoaXMgZGV2aWNlIHRvIGxvYWQKKyAqICAgICAgLUVQRVJNOiAgICAgIEZhaWx1cmUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIEJyaWRnZSBBUEkgaW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqLworaW50IGFwaV9pbml0X2NvbXBsZXRlMih2b2lkKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBjZmdfZGV2bm9kZSAqZGV2X25vZGU7CisJc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqOworCXU4IGRldl90eXBlOworCXUzMiB0bXA7CisKKwlEQkNfUkVRVUlSRShhcGlfY19yZWZzID4gMCk7CisKKwkvKiAgV2FsayB0aGUgbGlzdCBvZiBEZXZPYmplY3RzLCBnZXQgZWFjaCBkZXZub2RlLCBhbmQgYXR0ZW1wdGluZyB0bworCSAqICBhdXRvc3RhcnQgdGhlIGJvYXJkLiBOb3RlIHRoYXQgdGhpcyByZXF1aXJlcyBDT0YgbG9hZGluZywgd2hpY2gKKwkgKiAgcmVxdWlyZXMgS0ZJTEUuICovCisJZm9yIChoZGV2X29iaiA9IGRldl9nZXRfZmlyc3QoKTsgaGRldl9vYmogIT0gTlVMTDsKKwkgICAgIGhkZXZfb2JqID0gZGV2X2dldF9uZXh0KGhkZXZfb2JqKSkgeworCQlpZiAoZGV2X2dldF9kZXZfbm9kZShoZGV2X29iaiwgJmRldl9ub2RlKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChkZXZfZ2V0X2Rldl90eXBlKGhkZXZfb2JqLCAmZGV2X3R5cGUpKQorCQkJY29udGludWU7CisKKwkJaWYgKChkZXZfdHlwZSA9PSBEU1BfVU5JVCkgfHwgKGRldl90eXBlID09IElWQV9VTklUKSkKKwkJCWlmIChjZmdfZ2V0X2F1dG9fc3RhcnQoZGV2X25vZGUsICZ0bXApID09IDAKKwkJCQkJCQkJCSYmIHRtcCkKKwkJCQlwcm9jX2F1dG9fc3RhcnQoZGV2X25vZGUsIGhkZXZfb2JqKTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBUT0RPOiBSZW1vdmUgZGVwcmVjYXRlZCBhbmQgbm90IGltcGxlbWVudGVkIGlvY3RsIHdyYXBwZXJzICovCisKKy8qCisgKiA9PT09PT09PSBtZ3J3cmFwX2VudW1fbm9kZV9pbmZvID09PT09PT09CisgKi8KK3UzMiBtZ3J3cmFwX2VudW1fbm9kZV9pbmZvKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKK3sKKwl1OCAqcG5kYl9wcm9wczsKKwl1MzIgbnVtX25vZGVzOworCWludCBzdGF0dXMgPSAwOworCXUzMiBzaXplID0gYXJncy0+YXJnc19tZ3JfZW51bW5vZGVfaW5mby51bmRiX3Byb3BzX3NpemU7CisKKwlpZiAoc2l6ZSA8IHNpemVvZihzdHJ1Y3QgZHNwX25kYnByb3BzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwbmRiX3Byb3BzID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAocG5kYl9wcm9wcyA9PSBOVUxMKQorCQlzdGF0dXMgPSAtRU5PTUVNOworCisJaWYgKCFzdGF0dXMpIHsKKwkJc3RhdHVzID0KKwkJICAgIG1ncl9lbnVtX25vZGVfaW5mbyhhcmdzLT5hcmdzX21ncl9lbnVtbm9kZV9pbmZvLm5vZGVfaWQsCisJCQkJICAgICAgIChzdHJ1Y3QgZHNwX25kYnByb3BzICopcG5kYl9wcm9wcywgc2l6ZSwKKwkJCQkgICAgICAgJm51bV9ub2Rlcyk7CisJfQorCUNQX1RPX1VTUihhcmdzLT5hcmdzX21ncl9lbnVtbm9kZV9pbmZvLnBuZGJfcHJvcHMsIHBuZGJfcHJvcHMsIHN0YXR1cywKKwkJICBzaXplKTsKKwlDUF9UT19VU1IoYXJncy0+YXJnc19tZ3JfZW51bW5vZGVfaW5mby5wdV9udW1fbm9kZXMsICZudW1fbm9kZXMsIHN0YXR1cywKKwkJICAxKTsKKwlrZnJlZShwbmRiX3Byb3BzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiA9PT09PT09PSBtZ3J3cmFwX2VudW1fcHJvY19pbmZvID09PT09PT09CisgKi8KK3UzMiBtZ3J3cmFwX2VudW1fcHJvY19pbmZvKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKK3sKKwl1OCAqcHJvY2Vzc29yX2luZm87CisJdTggbnVtX3Byb2NzOworCWludCBzdGF0dXMgPSAwOworCXUzMiBzaXplID0gYXJncy0+YXJnc19tZ3JfZW51bXByb2NfaW5mby5wcm9jZXNzb3JfaW5mb19zaXplOworCisJaWYgKHNpemUgPCBzaXplb2Yoc3RydWN0IGRzcF9wcm9jZXNzb3JpbmZvKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcm9jZXNzb3JfaW5mbyA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHByb2Nlc3Nvcl9pbmZvID09IE5VTEwpCisJCXN0YXR1cyA9IC1FTk9NRU07CisKKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPQorCQkgICAgbWdyX2VudW1fcHJvY2Vzc29yX2luZm8oYXJncy0+YXJnc19tZ3JfZW51bXByb2NfaW5mby4KKwkJCQkJICAgIHByb2Nlc3Nvcl9pZCwKKwkJCQkJICAgIChzdHJ1Y3QgZHNwX3Byb2Nlc3NvcmluZm8gKikKKwkJCQkJICAgIHByb2Nlc3Nvcl9pbmZvLCBzaXplLCAmbnVtX3Byb2NzKTsKKwl9CisJQ1BfVE9fVVNSKGFyZ3MtPmFyZ3NfbWdyX2VudW1wcm9jX2luZm8ucHJvY2Vzc29yX2luZm8sIHByb2Nlc3Nvcl9pbmZvLAorCQkgIHN0YXR1cywgc2l6ZSk7CisJQ1BfVE9fVVNSKGFyZ3MtPmFyZ3NfbWdyX2VudW1wcm9jX2luZm8ucHVfbnVtX3Byb2NzLCAmbnVtX3Byb2NzLAorCQkgIHN0YXR1cywgMSk7CisJa2ZyZWUocHJvY2Vzc29yX2luZm8pOworCisJcmV0dXJuIHN0YXR1czsKK30KKworI2RlZmluZSBXUkFQX01BUDJDQUxMRVIoeCkgeAorLyoKKyAqID09PT09PT09IG1ncndyYXBfcmVnaXN0ZXJfb2JqZWN0ID09PT09PT09CisgKi8KK3UzMiBtZ3J3cmFwX3JlZ2lzdGVyX29iamVjdCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJdTMyIHJldDsKKwlzdHJ1Y3QgZHNwX3V1aWQgdXVpZF9vYmo7CisJdTMyIHBhdGhfc2l6ZSA9IDA7CisJY2hhciAqcHN6X3BhdGhfbmFtZSA9IE5VTEw7CisJaW50IHN0YXR1cyA9IDA7CisKKwlDUF9GTV9VU1IoJnV1aWRfb2JqLCBhcmdzLT5hcmdzX21ncl9yZWdpc3Rlcm9iamVjdC51dWlkX29iaiwgc3RhdHVzLCAxKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCS8qIHBhdGhfc2l6ZSBpcyBpbmNyZWFzZWQgYnkgMSB0byBhY2NvbW1vZGF0ZSBOVUxMICovCisJcGF0aF9zaXplID0gc3RybGVuX3VzZXIoKGNoYXIgKikKKwkJCQlhcmdzLT5hcmdzX21ncl9yZWdpc3Rlcm9iamVjdC5wc3pfcGF0aF9uYW1lKSArCisJICAgIDE7CisJcHN6X3BhdGhfbmFtZSA9IGttYWxsb2MocGF0aF9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBzel9wYXRoX25hbWUpCisJCWdvdG8gZnVuY19lbmQ7CisJcmV0ID0gc3RybmNweV9mcm9tX3VzZXIocHN6X3BhdGhfbmFtZSwKKwkJCQkoY2hhciAqKWFyZ3MtPmFyZ3NfbWdyX3JlZ2lzdGVyb2JqZWN0LgorCQkJCXBzel9wYXRoX25hbWUsIHBhdGhfc2l6ZSk7CisJaWYgKCFyZXQpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwlpZiAoYXJncy0+YXJnc19tZ3JfcmVnaXN0ZXJvYmplY3Qub2JqX3R5cGUgPj0gRFNQX0RDRE1BWE9CSlRZUEUpCisJCXJldHVybiAtRUlOVkFMOworCisJc3RhdHVzID0gZGNkX3JlZ2lzdGVyX29iamVjdCgmdXVpZF9vYmosCisJCQkJICAgICBhcmdzLT5hcmdzX21ncl9yZWdpc3Rlcm9iamVjdC5vYmpfdHlwZSwKKwkJCQkgICAgIChjaGFyICopcHN6X3BhdGhfbmFtZSk7CitmdW5jX2VuZDoKKwlrZnJlZShwc3pfcGF0aF9uYW1lKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogPT09PT09PT0gbWdyd3JhcF91bnJlZ2lzdGVyX29iamVjdCA9PT09PT09PQorICovCit1MzIgbWdyd3JhcF91bnJlZ2lzdGVyX29iamVjdCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRzcF91dWlkIHV1aWRfb2JqOworCisJQ1BfRk1fVVNSKCZ1dWlkX29iaiwgYXJncy0+YXJnc19tZ3JfcmVnaXN0ZXJvYmplY3QudXVpZF9vYmosIHN0YXR1cywgMSk7CisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2VuZDsKKworCXN0YXR1cyA9IGRjZF91bnJlZ2lzdGVyX29iamVjdCgmdXVpZF9vYmosCisJCQkJICAgICAgIGFyZ3MtPmFyZ3NfbWdyX3VucmVnaXN0ZXJvYmplY3QuCisJCQkJICAgICAgIG9ial90eXBlKTsKK2Z1bmNfZW5kOgorCXJldHVybiBzdGF0dXM7CisKK30KKworLyoKKyAqID09PT09PT09IG1ncndyYXBfd2FpdF9mb3JfYnJpZGdlX2V2ZW50cyA9PT09PT09PQorICovCit1MzIgbWdyd3JhcF93YWl0X2Zvcl9icmlkZ2VfZXZlbnRzKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbiAqYW5vdGlmaWNhdGlvbnNbTUFYX0VWRU5UU107CisJc3RydWN0IGRzcF9ub3RpZmljYXRpb24gbm90aWZpY2F0aW9uc1tNQVhfRVZFTlRTXTsKKwl1MzIgaW5kZXgsIGk7CisJdTMyIGNvdW50ID0gYXJncy0+YXJnc19tZ3Jfd2FpdC5jb3VudDsKKworCWlmIChjb3VudCA+IE1BWF9FVkVOVFMpCisJCXN0YXR1cyA9IC1FSU5WQUw7CisKKwkvKiBnZXQgdGhlIGFycmF5IG9mIHBvaW50ZXJzIHRvIHVzZXIgc3RydWN0dXJlcyAqLworCUNQX0ZNX1VTUihhbm90aWZpY2F0aW9ucywgYXJncy0+YXJnc19tZ3Jfd2FpdC5hbm90aWZpY2F0aW9ucywKKwkJICBzdGF0dXMsIGNvdW50KTsKKwkvKiBnZXQgdGhlIGV2ZW50cyAqLworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCUNQX0ZNX1VTUigmbm90aWZpY2F0aW9uc1tpXSwgYW5vdGlmaWNhdGlvbnNbaV0sIHN0YXR1cywgMSk7CisJCWlmIChzdGF0dXMgfHwgIW5vdGlmaWNhdGlvbnNbaV0uaGFuZGxlKSB7CisJCQlzdGF0dXMgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJLyogc2V0IHRoZSBhcnJheSBvZiBwb2ludGVycyB0byBrZXJuZWwgc3RydWN0dXJlcyAqLworCQlhbm90aWZpY2F0aW9uc1tpXSA9ICZub3RpZmljYXRpb25zW2ldOworCX0KKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPSBtZ3Jfd2FpdF9mb3JfYnJpZGdlX2V2ZW50cyhhbm90aWZpY2F0aW9ucywgY291bnQsCisJCQkJCQkJICZpbmRleCwKKwkJCQkJCQkgYXJncy0+YXJnc19tZ3Jfd2FpdC4KKwkJCQkJCQkgdXRpbWVvdXQpOworCX0KKwlDUF9UT19VU1IoYXJncy0+YXJnc19tZ3Jfd2FpdC5wdV9pbmRleCwgJmluZGV4LCBzdGF0dXMsIDEpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiA9PT09PT09PSBNR1JXUkFQX0dldFByb2Nlc3NSZXNvdXJjZUluZm8gPT09PT09PT0KKyAqLwordTMyIF9fZGVwcmVjYXRlZCBtZ3J3cmFwX2dldF9wcm9jZXNzX3Jlc291cmNlc19pbmZvKHVuaW9uIHRyYXBwZWRfYXJncyAqIGFyZ3MsCisJCQkJCQkgICAgdm9pZCAqcHJfY3R4dCkKK3sKKwlwcl9lcnIoIiVzOiBkZXByZWNhdGVkIGRzcGJyaWRnZSBpb2N0bFxuIiwgX19mdW5jX18pOworCXJldHVybiAwOworfQorCisvKgorICogPT09PT09PT0gcHJvY3dyYXBfYXR0YWNoID09PT09PT09CisgKi8KK3UzMiBwcm9jd3JhcF9hdHRhY2godW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCXZvaWQgKnByb2Nlc3NvcjsKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZHNwX3Byb2Nlc3NvcmF0dHJpbiBwcm9jX2F0dHJfaW4sICphdHRyX2luID0gTlVMTDsKKworCS8qIE9wdGlvbmFsIGFyZ3VtZW50ICovCisJaWYgKGFyZ3MtPmFyZ3NfcHJvY19hdHRhY2guYXR0cl9pbikgeworCQlDUF9GTV9VU1IoJnByb2NfYXR0cl9pbiwgYXJncy0+YXJnc19wcm9jX2F0dGFjaC5hdHRyX2luLCBzdGF0dXMsCisJCQkgIDEpOworCQlpZiAoIXN0YXR1cykKKwkJCWF0dHJfaW4gPSAmcHJvY19hdHRyX2luOworCQllbHNlCisJCQlnb3RvIGZ1bmNfZW5kOworCisJfQorCXN0YXR1cyA9IHByb2NfYXR0YWNoKGFyZ3MtPmFyZ3NfcHJvY19hdHRhY2gucHJvY2Vzc29yX2lkLCBhdHRyX2luLAorCQkJICAgICAmcHJvY2Vzc29yLCBwcl9jdHh0KTsKKwlDUF9UT19VU1IoYXJncy0+YXJnc19wcm9jX2F0dGFjaC5waF9wcm9jZXNzb3IsICZwcm9jZXNzb3IsIHN0YXR1cywgMSk7CitmdW5jX2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogPT09PT09PT0gcHJvY3dyYXBfY3RybCA9PT09PT09PQorICovCit1MzIgcHJvY3dyYXBfY3RybCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJdTMyIGNiX2RhdGFfc2l6ZSwgX191c2VyICogcHNpemUgPSAodTMyIF9fdXNlciAqKQorCSAgICBhcmdzLT5hcmdzX3Byb2NfY3RybC5wYXJnczsKKwl1OCAqcGFyZ3MgPSBOVUxMOworCWludCBzdGF0dXMgPSAwOworCXZvaWQgKmhwcm9jZXNzb3IgPSAoKHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKilwcl9jdHh0KS0+aHByb2Nlc3NvcjsKKworCWlmIChwc2l6ZSkgeworCQlpZiAoZ2V0X3VzZXIoY2JfZGF0YV9zaXplLCBwc2l6ZSkpIHsKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCWdvdG8gZnVuY19lbmQ7CisJCX0KKwkJY2JfZGF0YV9zaXplICs9IHNpemVvZih1MzIpOworCQlwYXJncyA9IGttYWxsb2MoY2JfZGF0YV9zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHBhcmdzID09IE5VTEwpIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlnb3RvIGZ1bmNfZW5kOworCQl9CisKKwkJQ1BfRk1fVVNSKHBhcmdzLCBhcmdzLT5hcmdzX3Byb2NfY3RybC5wYXJncywgc3RhdHVzLAorCQkJICBjYl9kYXRhX3NpemUpOworCX0KKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPSBwcm9jX2N0cmwoaHByb2Nlc3NvciwKKwkJCQkgICBhcmdzLT5hcmdzX3Byb2NfY3RybC5kd19jbWQsCisJCQkJICAgKHN0cnVjdCBkc3BfY2JkYXRhICopcGFyZ3MpOworCX0KKworCS8qIENQX1RPX1VTUihhcmdzLT5hcmdzX3Byb2NfY3RybC5wYXJncywgcGFyZ3MsIHN0YXR1cywgMSk7ICovCisJa2ZyZWUocGFyZ3MpOworZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqID09PT09PT09IHByb2N3cmFwX2RldGFjaCA9PT09PT09PQorICovCit1MzIgX19kZXByZWNhdGVkIHByb2N3cmFwX2RldGFjaCh1bmlvbiB0cmFwcGVkX2FyZ3MgKiBhcmdzLCB2b2lkICpwcl9jdHh0KQoreworCS8qIHByb2NfZGV0YWNoIGNhbGxlZCBhdCBicmlkZ2VfcmVsZWFzZSBvbmx5ICovCisJcHJfZXJyKCIlczogZGVwcmVjYXRlZCBkc3BicmlkZ2UgaW9jdGxcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqID09PT09PT09IHByb2N3cmFwX2VudW1fbm9kZV9pbmZvID09PT09PT09CisgKi8KK3UzMiBwcm9jd3JhcF9lbnVtX25vZGVfaW5mbyh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1czsKKwl2b2lkICpub2RlX3RhYltNQVhfTk9ERVNdOworCXUzMiBudW1fbm9kZXM7CisJdTMyIGFsbG9jX2NudDsKKwl2b2lkICpocHJvY2Vzc29yID0gKChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICopcHJfY3R4dCktPmhwcm9jZXNzb3I7CisKKwlpZiAoIWFyZ3MtPmFyZ3NfcHJvY19lbnVtbm9kZV9pbmZvLm5vZGVfdGFiX3NpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJc3RhdHVzID0gcHJvY19lbnVtX25vZGVzKGhwcm9jZXNzb3IsCisJCQkJIG5vZGVfdGFiLAorCQkJCSBhcmdzLT5hcmdzX3Byb2NfZW51bW5vZGVfaW5mby5ub2RlX3RhYl9zaXplLAorCQkJCSAmbnVtX25vZGVzLCAmYWxsb2NfY250KTsKKwlDUF9UT19VU1IoYXJncy0+YXJnc19wcm9jX2VudW1ub2RlX2luZm8ubm9kZV90YWIsIG5vZGVfdGFiLCBzdGF0dXMsCisJCSAgbnVtX25vZGVzKTsKKwlDUF9UT19VU1IoYXJncy0+YXJnc19wcm9jX2VudW1ub2RlX2luZm8ucHVfbnVtX25vZGVzLCAmbnVtX25vZGVzLAorCQkgIHN0YXR1cywgMSk7CisJQ1BfVE9fVVNSKGFyZ3MtPmFyZ3NfcHJvY19lbnVtbm9kZV9pbmZvLnB1X2FsbG9jYXRlZCwgJmFsbG9jX2NudCwKKwkJICBzdGF0dXMsIDEpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3UzMiBwcm9jd3JhcF9lbmRfZG1hKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKK3sKKwlpbnQgc3RhdHVzOworCisJaWYgKGFyZ3MtPmFyZ3NfcHJvY19kbWEuZGlyID49IERNQV9OT05FKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0YXR1cyA9IHByb2NfZW5kX2RtYShwcl9jdHh0LAorCQkJCSAgIGFyZ3MtPmFyZ3NfcHJvY19kbWEucG1wdV9hZGRyLAorCQkJCSAgIGFyZ3MtPmFyZ3NfcHJvY19kbWEudWxfc2l6ZSwKKwkJCQkgICBhcmdzLT5hcmdzX3Byb2NfZG1hLmRpcik7CisJcmV0dXJuIHN0YXR1czsKK30KKwordTMyIHByb2N3cmFwX2JlZ2luX2RtYSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1czsKKworCWlmIChhcmdzLT5hcmdzX3Byb2NfZG1hLmRpciA+PSBETUFfTk9ORSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdGF0dXMgPSBwcm9jX2JlZ2luX2RtYShwcl9jdHh0LAorCQkJCSAgIGFyZ3MtPmFyZ3NfcHJvY19kbWEucG1wdV9hZGRyLAorCQkJCSAgIGFyZ3MtPmFyZ3NfcHJvY19kbWEudWxfc2l6ZSwKKwkJCQkgICBhcmdzLT5hcmdzX3Byb2NfZG1hLmRpcik7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqID09PT09PT09IHByb2N3cmFwX2ZsdXNoX21lbW9yeSA9PT09PT09PQorICovCit1MzIgcHJvY3dyYXBfZmx1c2hfbWVtb3J5KHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKK3sKKwlpbnQgc3RhdHVzOworCisJaWYgKGFyZ3MtPmFyZ3NfcHJvY19mbHVzaG1lbW9yeS51bF9mbGFncyA+CisJICAgIFBST0NfV1JJVEVCQUNLX0lOVkFMSURBVEVfTUVNKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0YXR1cyA9IHByb2NfZmx1c2hfbWVtb3J5KHByX2N0eHQsCisJCQkJICAgYXJncy0+YXJnc19wcm9jX2ZsdXNobWVtb3J5LnBtcHVfYWRkciwKKwkJCQkgICBhcmdzLT5hcmdzX3Byb2NfZmx1c2htZW1vcnkudWxfc2l6ZSwKKwkJCQkgICBhcmdzLT5hcmdzX3Byb2NfZmx1c2htZW1vcnkudWxfZmxhZ3MpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiA9PT09PT09PSBwcm9jd3JhcF9pbnZhbGlkYXRlX21lbW9yeSA9PT09PT09PQorICovCit1MzIgcHJvY3dyYXBfaW52YWxpZGF0ZV9tZW1vcnkodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPQorCSAgICBwcm9jX2ludmFsaWRhdGVfbWVtb3J5KHByX2N0eHQsCisJCQkJICAgYXJncy0+YXJnc19wcm9jX2ludmFsaWRhdGVtZW1vcnkucG1wdV9hZGRyLAorCQkJCSAgIGFyZ3MtPmFyZ3NfcHJvY19pbnZhbGlkYXRlbWVtb3J5LnVsX3NpemUpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiA9PT09PT09PSBwcm9jd3JhcF9lbnVtX3Jlc291cmNlcyA9PT09PT09PQorICovCit1MzIgcHJvY3dyYXBfZW51bV9yZXNvdXJjZXModW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBkc3BfcmVzb3VyY2VpbmZvIHJlc291cmNlX2luZm87CisJdm9pZCAqaHByb2Nlc3NvciA9ICgoc3RydWN0IHByb2Nlc3NfY29udGV4dCAqKXByX2N0eHQpLT5ocHJvY2Vzc29yOworCisJaWYgKGFyZ3MtPmFyZ3NfcHJvY19lbnVtcmVzb3VyY2VzLnJlc291cmNlX2luZm9fc2l6ZSA8CisJICAgIHNpemVvZihzdHJ1Y3QgZHNwX3Jlc291cmNlaW5mbykpCisJCXJldHVybiAtRUlOVkFMOworCisJc3RhdHVzID0KKwkgICAgcHJvY19nZXRfcmVzb3VyY2VfaW5mbyhocHJvY2Vzc29yLAorCQkJCSAgIGFyZ3MtPmFyZ3NfcHJvY19lbnVtcmVzb3VyY2VzLnJlc291cmNlX3R5cGUsCisJCQkJICAgJnJlc291cmNlX2luZm8sCisJCQkJICAgYXJncy0+YXJnc19wcm9jX2VudW1yZXNvdXJjZXMuCisJCQkJICAgcmVzb3VyY2VfaW5mb19zaXplKTsKKworCUNQX1RPX1VTUihhcmdzLT5hcmdzX3Byb2NfZW51bXJlc291cmNlcy5yZXNvdXJjZV9pbmZvLCAmcmVzb3VyY2VfaW5mbywKKwkJICBzdGF0dXMsIDEpOworCisJcmV0dXJuIHN0YXR1czsKKworfQorCisvKgorICogPT09PT09PT0gcHJvY3dyYXBfZ2V0X3N0YXRlID09PT09PT09CisgKi8KK3UzMiBwcm9jd3JhcF9nZXRfc3RhdGUodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCWludCBzdGF0dXM7CisJc3RydWN0IGRzcF9wcm9jZXNzb3JzdGF0ZSBwcm9jX3N0YXRlOworCXZvaWQgKmhwcm9jZXNzb3IgPSAoKHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKilwcl9jdHh0KS0+aHByb2Nlc3NvcjsKKworCWlmIChhcmdzLT5hcmdzX3Byb2NfZ2V0c3RhdGUuc3RhdGVfaW5mb19zaXplIDwKKwkgICAgc2l6ZW9mKHN0cnVjdCBkc3BfcHJvY2Vzc29yc3RhdGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0YXR1cyA9IHByb2NfZ2V0X3N0YXRlKGhwcm9jZXNzb3IsICZwcm9jX3N0YXRlLAorCQkJICAgYXJncy0+YXJnc19wcm9jX2dldHN0YXRlLnN0YXRlX2luZm9fc2l6ZSk7CisJQ1BfVE9fVVNSKGFyZ3MtPmFyZ3NfcHJvY19nZXRzdGF0ZS5wcm9jX3N0YXRlX29iaiwgJnByb2Nfc3RhdGUsIHN0YXR1cywKKwkJICAxKTsKKwlyZXR1cm4gc3RhdHVzOworCit9CisKKy8qCisgKiA9PT09PT09PSBwcm9jd3JhcF9nZXRfdHJhY2UgPT09PT09PT0KKyAqLwordTMyIHByb2N3cmFwX2dldF90cmFjZSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1czsKKwl1OCAqcGJ1ZjsKKwl2b2lkICpocHJvY2Vzc29yID0gKChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICopcHJfY3R4dCktPmhwcm9jZXNzb3I7CisKKwlpZiAoYXJncy0+YXJnc19wcm9jX2dldHRyYWNlLm1heF9zaXplID4gTUFYX1RSQUNFQlVGTEVOKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBidWYgPSBremFsbG9jKGFyZ3MtPmFyZ3NfcHJvY19nZXR0cmFjZS5tYXhfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBidWYgIT0gTlVMTCkgeworCQlzdGF0dXMgPSBwcm9jX2dldF90cmFjZShocHJvY2Vzc29yLCBwYnVmLAorCQkJCQlhcmdzLT5hcmdzX3Byb2NfZ2V0dHJhY2UubWF4X3NpemUpOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJfQorCUNQX1RPX1VTUihhcmdzLT5hcmdzX3Byb2NfZ2V0dHJhY2UucGJ1ZiwgcGJ1Ziwgc3RhdHVzLAorCQkgIGFyZ3MtPmFyZ3NfcHJvY19nZXR0cmFjZS5tYXhfc2l6ZSk7CisJa2ZyZWUocGJ1Zik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogPT09PT09PT0gcHJvY3dyYXBfbG9hZCA9PT09PT09PQorICovCit1MzIgcHJvY3dyYXBfbG9hZCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJczMyIGksIGxlbjsKKwlpbnQgc3RhdHVzID0gMDsKKwljaGFyICp0ZW1wOworCXMzMiBjb3VudCA9IGFyZ3MtPmFyZ3NfcHJvY19sb2FkLmFyZ2NfaW5kZXg7CisJdTggKiphcmd2ID0gTlVMTCwgKiplbnZwID0gTlVMTDsKKwl2b2lkICpocHJvY2Vzc29yID0gKChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICopcHJfY3R4dCktPmhwcm9jZXNzb3I7CisKKwlpZiAoY291bnQgPD0gMCB8fCBjb3VudCA+IE1BWF9MT0FEQVJHUykgeworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGZ1bmNfY29udDsKKwl9CisKKwlhcmd2ID0ga21hbGxvYyhjb3VudCAqIHNpemVvZih1OCAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhcmd2KSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZnVuY19jb250OworCX0KKworCUNQX0ZNX1VTUihhcmd2LCBhcmdzLT5hcmdzX3Byb2NfbG9hZC51c2VyX2FyZ3MsIHN0YXR1cywgY291bnQpOworCWlmIChzdGF0dXMpIHsKKwkJa2ZyZWUoYXJndik7CisJCWFyZ3YgPSBOVUxMOworCQlnb3RvIGZ1bmNfY29udDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpZiAoYXJndltpXSkgeworCQkJLyogVXNlciBzcGFjZSBwb2ludGVyIHRvIGFyZ3VtZW50ICovCisJCQl0ZW1wID0gKGNoYXIgKilhcmd2W2ldOworCQkJLyogbGVuIGlzIGluY3JlYXNlZCBieSAxIHRvIGFjY29tbW9kYXRlIE5VTEwgKi8KKwkJCWxlbiA9IHN0cmxlbl91c2VyKChjaGFyICopdGVtcCkgKyAxOworCQkJLyogS2VybmVsIHNwYWNlIHBvaW50ZXIgdG8gYXJndW1lbnQgKi8KKwkJCWFyZ3ZbaV0gPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoYXJndltpXSkgeworCQkJCUNQX0ZNX1VTUihhcmd2W2ldLCB0ZW1wLCBzdGF0dXMsIGxlbik7CisJCQkJaWYgKHN0YXR1cykgeworCQkJCQlrZnJlZShhcmd2W2ldKTsKKwkJCQkJYXJndltpXSA9IE5VTEw7CisJCQkJCWdvdG8gZnVuY19jb250OworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCQlnb3RvIGZ1bmNfY29udDsKKwkJCX0KKwkJfQorCX0KKwkvKiBUT0RPOiB2YWxpZGF0ZSB0aGlzICovCisJaWYgKGFyZ3MtPmFyZ3NfcHJvY19sb2FkLnVzZXJfZW52cCkgeworCQkvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGVudnAgYXJyYXkgaW5jbHVkaW5nIE5VTEwgKi8KKwkJY291bnQgPSAwOworCQlkbyB7CisJCQlnZXRfdXNlcih0ZW1wLCBhcmdzLT5hcmdzX3Byb2NfbG9hZC51c2VyX2VudnAgKyBjb3VudCk7CisJCQljb3VudCsrOworCQl9IHdoaWxlICh0ZW1wKTsKKwkJZW52cCA9IGttYWxsb2MoY291bnQgKiBzaXplb2YodTggKiksIEdGUF9LRVJORUwpOworCQlpZiAoIWVudnApIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlnb3RvIGZ1bmNfY29udDsKKwkJfQorCisJCUNQX0ZNX1VTUihlbnZwLCBhcmdzLT5hcmdzX3Byb2NfbG9hZC51c2VyX2VudnAsIHN0YXR1cywgY291bnQpOworCQlpZiAoc3RhdHVzKSB7CisJCQlrZnJlZShlbnZwKTsKKwkJCWVudnAgPSBOVUxMOworCQkJZ290byBmdW5jX2NvbnQ7CisJCX0KKwkJZm9yIChpID0gMDsgZW52cFtpXTsgaSsrKSB7CisJCQkvKiBVc2VyIHNwYWNlIHBvaW50ZXIgdG8gYXJndW1lbnQgKi8KKwkJCXRlbXAgPSAoY2hhciAqKWVudnBbaV07CisJCQkvKiBsZW4gaXMgaW5jcmVhc2VkIGJ5IDEgdG8gYWNjb21tb2RhdGUgTlVMTCAqLworCQkJbGVuID0gc3RybGVuX3VzZXIoKGNoYXIgKil0ZW1wKSArIDE7CisJCQkvKiBLZXJuZWwgc3BhY2UgcG9pbnRlciB0byBhcmd1bWVudCAqLworCQkJZW52cFtpXSA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwkJCWlmIChlbnZwW2ldKSB7CisJCQkJQ1BfRk1fVVNSKGVudnBbaV0sIHRlbXAsIHN0YXR1cywgbGVuKTsKKwkJCQlpZiAoc3RhdHVzKSB7CisJCQkJCWtmcmVlKGVudnBbaV0pOworCQkJCQllbnZwW2ldID0gTlVMTDsKKwkJCQkJZ290byBmdW5jX2NvbnQ7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJCWdvdG8gZnVuY19jb250OworCQkJfQorCQl9CisJfQorCisJaWYgKCFzdGF0dXMpIHsKKwkJc3RhdHVzID0gcHJvY19sb2FkKGhwcm9jZXNzb3IsCisJCQkJICAgYXJncy0+YXJnc19wcm9jX2xvYWQuYXJnY19pbmRleCwKKwkJCQkgICAoY29uc3QgY2hhciAqKilhcmd2LCAoY29uc3QgY2hhciAqKillbnZwKTsKKwl9CitmdW5jX2NvbnQ6CisJaWYgKGVudnApIHsKKwkJaSA9IDA7CisJCXdoaWxlIChlbnZwW2ldKQorCQkJa2ZyZWUoZW52cFtpKytdKTsKKworCQlrZnJlZShlbnZwKTsKKwl9CisKKwlpZiAoYXJndikgeworCQljb3VudCA9IGFyZ3MtPmFyZ3NfcHJvY19sb2FkLmFyZ2NfaW5kZXg7CisJCWZvciAoaSA9IDA7IChpIDwgY291bnQpICYmIGFyZ3ZbaV07IGkrKykKKwkJCWtmcmVlKGFyZ3ZbaV0pOworCisJCWtmcmVlKGFyZ3YpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiA9PT09PT09PSBwcm9jd3JhcF9tYXAgPT09PT09PT0KKyAqLwordTMyIHByb2N3cmFwX21hcCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1czsKKwl2b2lkICptYXBfYWRkcjsKKwl2b2lkICpocHJvY2Vzc29yID0gKChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICopcHJfY3R4dCktPmhwcm9jZXNzb3I7CisKKwlpZiAoIWFyZ3MtPmFyZ3NfcHJvY19tYXBtZW0udWxfc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdGF0dXMgPSBwcm9jX21hcChhcmdzLT5hcmdzX3Byb2NfbWFwbWVtLmhwcm9jZXNzb3IsCisJCQkgIGFyZ3MtPmFyZ3NfcHJvY19tYXBtZW0ucG1wdV9hZGRyLAorCQkJICBhcmdzLT5hcmdzX3Byb2NfbWFwbWVtLnVsX3NpemUsCisJCQkgIGFyZ3MtPmFyZ3NfcHJvY19tYXBtZW0ucmVxX2FkZHIsICZtYXBfYWRkciwKKwkJCSAgYXJncy0+YXJnc19wcm9jX21hcG1lbS51bF9tYXBfYXR0ciwgcHJfY3R4dCk7CisJaWYgKCFzdGF0dXMpIHsKKwkJaWYgKHB1dF91c2VyKG1hcF9hZGRyLCBhcmdzLT5hcmdzX3Byb2NfbWFwbWVtLnBwX21hcF9hZGRyKSkgeworCQkJc3RhdHVzID0gLUVJTlZBTDsKKwkJCXByb2NfdW5fbWFwKGhwcm9jZXNzb3IsIG1hcF9hZGRyLCBwcl9jdHh0KTsKKwkJfQorCisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiA9PT09PT09PSBwcm9jd3JhcF9yZWdpc3Rlcl9ub3RpZnkgPT09PT09PT0KKyAqLwordTMyIHByb2N3cmFwX3JlZ2lzdGVyX25vdGlmeSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbiBub3RpZmljYXRpb247CisJdm9pZCAqaHByb2Nlc3NvciA9ICgoc3RydWN0IHByb2Nlc3NfY29udGV4dCAqKXByX2N0eHQpLT5ocHJvY2Vzc29yOworCisJLyogSW5pdGlhbGl6ZSB0aGUgbm90aWZpY2F0aW9uIGRhdGEgc3RydWN0dXJlICovCisJbm90aWZpY2F0aW9uLnBzX25hbWUgPSBOVUxMOworCW5vdGlmaWNhdGlvbi5oYW5kbGUgPSBOVUxMOworCisJc3RhdHVzID0gcHJvY19yZWdpc3Rlcl9ub3RpZnkoaHByb2Nlc3NvciwKKwkJCQkgYXJncy0+YXJnc19wcm9jX3JlZ2lzdGVyX25vdGlmeS5ldmVudF9tYXNrLAorCQkJCSBhcmdzLT5hcmdzX3Byb2NfcmVnaXN0ZXJfbm90aWZ5Lm5vdGlmeV90eXBlLAorCQkJCSAmbm90aWZpY2F0aW9uKTsKKwlDUF9UT19VU1IoYXJncy0+YXJnc19wcm9jX3JlZ2lzdGVyX25vdGlmeS5obm90aWZpY2F0aW9uLCAmbm90aWZpY2F0aW9uLAorCQkgIHN0YXR1cywgMSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqID09PT09PT09IHByb2N3cmFwX3Jlc2VydmVfbWVtb3J5ID09PT09PT09CisgKi8KK3UzMiBwcm9jd3JhcF9yZXNlcnZlX21lbW9yeSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1czsKKwl2b2lkICpwcnN2X2FkZHI7CisJdm9pZCAqaHByb2Nlc3NvciA9ICgoc3RydWN0IHByb2Nlc3NfY29udGV4dCAqKXByX2N0eHQpLT5ocHJvY2Vzc29yOworCisJaWYgKChhcmdzLT5hcmdzX3Byb2NfcnN2bWVtLnVsX3NpemUgPD0gMCkgfHwKKwkgICAgKGFyZ3MtPmFyZ3NfcHJvY19yc3ZtZW0udWxfc2l6ZSAmIChQR19TSVpFNEsgLSAxKSkgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdGF0dXMgPSBwcm9jX3Jlc2VydmVfbWVtb3J5KGhwcm9jZXNzb3IsCisJCQkJICAgICBhcmdzLT5hcmdzX3Byb2NfcnN2bWVtLnVsX3NpemUsICZwcnN2X2FkZHIsCisJCQkJICAgICBwcl9jdHh0KTsKKwlpZiAoIXN0YXR1cykgeworCQlpZiAocHV0X3VzZXIocHJzdl9hZGRyLCBhcmdzLT5hcmdzX3Byb2NfcnN2bWVtLnBwX3Jzdl9hZGRyKSkgeworCQkJc3RhdHVzID0gLUVJTlZBTDsKKwkJCXByb2NfdW5fcmVzZXJ2ZV9tZW1vcnkoYXJncy0+YXJnc19wcm9jX3Jzdm1lbS4KKwkJCQkJICAgICAgIGhwcm9jZXNzb3IsIHByc3ZfYWRkciwgcHJfY3R4dCk7CisJCX0KKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqID09PT09PT09IHByb2N3cmFwX3N0YXJ0ID09PT09PT09CisgKi8KK3UzMiBwcm9jd3JhcF9zdGFydCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJdTMyIHJldDsKKworCXJldCA9IHByb2Nfc3RhcnQoKChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICopcHJfY3R4dCktPmhwcm9jZXNzb3IpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiA9PT09PT09PSBwcm9jd3JhcF91bl9tYXAgPT09PT09PT0KKyAqLwordTMyIHByb2N3cmFwX3VuX21hcCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IHByb2NfdW5fbWFwKCgoc3RydWN0IHByb2Nlc3NfY29udGV4dCAqKXByX2N0eHQpLT5ocHJvY2Vzc29yLAorCQkJICAgICBhcmdzLT5hcmdzX3Byb2NfdW5tYXBtZW0ubWFwX2FkZHIsIHByX2N0eHQpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiA9PT09PT09PSBwcm9jd3JhcF91bl9yZXNlcnZlX21lbW9yeSA9PT09PT09PQorICovCit1MzIgcHJvY3dyYXBfdW5fcmVzZXJ2ZV9tZW1vcnkodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCWludCBzdGF0dXM7CisJdm9pZCAqaHByb2Nlc3NvciA9ICgoc3RydWN0IHByb2Nlc3NfY29udGV4dCAqKXByX2N0eHQpLT5ocHJvY2Vzc29yOworCisJc3RhdHVzID0gcHJvY191bl9yZXNlcnZlX21lbW9yeShocHJvY2Vzc29yLAorCQkJCQlhcmdzLT5hcmdzX3Byb2NfdW5yc3ZtZW0ucHJzdl9hZGRyLAorCQkJCQlwcl9jdHh0KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogPT09PT09PT0gcHJvY3dyYXBfc3RvcCA9PT09PT09PQorICovCit1MzIgcHJvY3dyYXBfc3RvcCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJdTMyIHJldDsKKworCXJldCA9IHByb2Nfc3RvcCgoKHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKilwcl9jdHh0KS0+aHByb2Nlc3Nvcik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogPT09PT09PT0gZmluZF9oYW5kbGUgPT09PT09PT09CisgKi8KK2lubGluZSB2b2lkIGZpbmRfbm9kZV9oYW5kbGUoc3RydWN0IG5vZGVfcmVzX29iamVjdCAqKm5vZGVyZXMsCisJCQkJdm9pZCAqcHJfY3R4dCwgdm9pZCAqaG5vZGUpCit7CisJcmN1X3JlYWRfbG9jaygpOworCSpub2RlcmVzID0gaWRyX2ZpbmQoKChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICopcHJfY3R4dCktPm5vZGVfaWQsCisJCQkJCQkJCShpbnQpaG5vZGUgLSAxKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm47Cit9CisKKworLyoKKyAqID09PT09PT09IG5vZGV3cmFwX2FsbG9jYXRlID09PT09PT09CisgKi8KK3UzMiBub2Rld3JhcF9hbGxvY2F0ZSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRzcF91dWlkIG5vZGVfdXVpZDsKKwl1MzIgY2JfZGF0YV9zaXplID0gMDsKKwl1MzIgX191c2VyICpwc2l6ZSA9ICh1MzIgX191c2VyICopIGFyZ3MtPmFyZ3Nfbm9kZV9hbGxvY2F0ZS5wYXJnczsKKwl1OCAqcGFyZ3MgPSBOVUxMOworCXN0cnVjdCBkc3Bfbm9kZWF0dHJpbiBwcm9jX2F0dHJfaW4sICphdHRyX2luID0gTlVMTDsKKwlzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICpub2RlX3JlczsKKwlpbnQgbm9kZWlkOworCXZvaWQgKmhwcm9jZXNzb3IgPSAoKHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKilwcl9jdHh0KS0+aHByb2Nlc3NvcjsKKworCS8qIE9wdGlvbmFsIGFyZ3VtZW50ICovCisJaWYgKHBzaXplKSB7CisJCWlmIChnZXRfdXNlcihjYl9kYXRhX3NpemUsIHBzaXplKSkKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKworCQljYl9kYXRhX3NpemUgKz0gc2l6ZW9mKHUzMik7CisJCWlmICghc3RhdHVzKSB7CisJCQlwYXJncyA9IGttYWxsb2MoY2JfZGF0YV9zaXplLCBHRlBfS0VSTkVMKTsKKwkJCWlmIChwYXJncyA9PSBOVUxMKQorCQkJCXN0YXR1cyA9IC1FTk9NRU07CisKKwkJfQorCQlDUF9GTV9VU1IocGFyZ3MsIGFyZ3MtPmFyZ3Nfbm9kZV9hbGxvY2F0ZS5wYXJncywgc3RhdHVzLAorCQkJICBjYl9kYXRhX3NpemUpOworCX0KKwlDUF9GTV9VU1IoJm5vZGVfdXVpZCwgYXJncy0+YXJnc19ub2RlX2FsbG9jYXRlLm5vZGVfaWRfcHRyLCBzdGF0dXMsIDEpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19jb250OworCS8qIE9wdGlvbmFsIGFyZ3VtZW50ICovCisJaWYgKGFyZ3MtPmFyZ3Nfbm9kZV9hbGxvY2F0ZS5hdHRyX2luKSB7CisJCUNQX0ZNX1VTUigmcHJvY19hdHRyX2luLCBhcmdzLT5hcmdzX25vZGVfYWxsb2NhdGUuYXR0cl9pbiwKKwkJCSAgc3RhdHVzLCAxKTsKKwkJaWYgKCFzdGF0dXMpCisJCQlhdHRyX2luID0gJnByb2NfYXR0cl9pbjsKKwkJZWxzZQorCQkJc3RhdHVzID0gLUVOT01FTTsKKworCX0KKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPSBub2RlX2FsbG9jYXRlKGhwcm9jZXNzb3IsCisJCQkJICAgICAgICZub2RlX3V1aWQsIChzdHJ1Y3QgZHNwX2NiZGF0YSAqKXBhcmdzLAorCQkJCSAgICAgICBhdHRyX2luLCAmbm9kZV9yZXMsIHByX2N0eHQpOworCX0KKwlpZiAoIXN0YXR1cykgeworCQlub2RlaWQgPSBub2RlX3Jlcy0+aWQgKyAxOworCQlDUF9UT19VU1IoYXJncy0+YXJnc19ub2RlX2FsbG9jYXRlLnBoX25vZGUsICZub2RlaWQsCisJCQlzdGF0dXMsIDEpOworCQlpZiAoc3RhdHVzKSB7CisJCQlzdGF0dXMgPSAtRUZBVUxUOworCQkJbm9kZV9kZWxldGUobm9kZV9yZXMsIHByX2N0eHQpOworCQl9CisJfQorZnVuY19jb250OgorCWtmcmVlKHBhcmdzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZXdyYXBfYWxsb2NfbXNnX2J1ZiA9PT09PT09PQorICovCit1MzIgbm9kZXdyYXBfYWxsb2NfbXNnX2J1Zih1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRzcF9idWZmZXJhdHRyICpwYXR0ciA9IE5VTEw7CisJc3RydWN0IGRzcF9idWZmZXJhdHRyIGF0dHI7CisJdTggKnBidWZmZXIgPSBOVUxMOworCXN0cnVjdCBub2RlX3Jlc19vYmplY3QgKm5vZGVfcmVzOworCisJZmluZF9ub2RlX2hhbmRsZSgmbm9kZV9yZXMsICBwcl9jdHh0LAorCQkJCWFyZ3MtPmFyZ3Nfbm9kZV9hbGxvY21zZ2J1Zi5obm9kZSk7CisKKwlpZiAoIW5vZGVfcmVzKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmICghYXJncy0+YXJnc19ub2RlX2FsbG9jbXNnYnVmLnVzaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhcmdzLT5hcmdzX25vZGVfYWxsb2Ntc2didWYucGF0dHIpIHsJLyogT3B0aW9uYWwgYXJndW1lbnQgKi8KKwkJQ1BfRk1fVVNSKCZhdHRyLCBhcmdzLT5hcmdzX25vZGVfYWxsb2Ntc2didWYucGF0dHIsIHN0YXR1cywgMSk7CisJCWlmICghc3RhdHVzKQorCQkJcGF0dHIgPSAmYXR0cjsKKworCX0KKwkvKiBhcmd1bWVudCAqLworCUNQX0ZNX1VTUigmcGJ1ZmZlciwgYXJncy0+YXJnc19ub2RlX2FsbG9jbXNnYnVmLnBidWZmZXIsIHN0YXR1cywgMSk7CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RhdHVzID0gbm9kZV9hbGxvY19tc2dfYnVmKG5vZGVfcmVzLT5obm9kZSwKKwkJCQkJICAgIGFyZ3MtPmFyZ3Nfbm9kZV9hbGxvY21zZ2J1Zi51c2l6ZSwKKwkJCQkJICAgIHBhdHRyLCAmcGJ1ZmZlcik7CisJfQorCUNQX1RPX1VTUihhcmdzLT5hcmdzX25vZGVfYWxsb2Ntc2didWYucGJ1ZmZlciwgJnBidWZmZXIsIHN0YXR1cywgMSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqID09PT09PT09IG5vZGV3cmFwX2NoYW5nZV9wcmlvcml0eSA9PT09PT09PQorICovCit1MzIgbm9kZXdyYXBfY2hhbmdlX3ByaW9yaXR5KHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKK3sKKwl1MzIgcmV0OworCXN0cnVjdCBub2RlX3Jlc19vYmplY3QgKm5vZGVfcmVzOworCisJZmluZF9ub2RlX2hhbmRsZSgmbm9kZV9yZXMsIHByX2N0eHQsCisJCQkJYXJncy0+YXJnc19ub2RlX2NoYW5nZXByaW9yaXR5Lmhub2RlKTsKKworCWlmICghbm9kZV9yZXMpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0ID0gbm9kZV9jaGFuZ2VfcHJpb3JpdHkobm9kZV9yZXMtPmhub2RlLAorCQkJCSAgIGFyZ3MtPmFyZ3Nfbm9kZV9jaGFuZ2Vwcmlvcml0eS5wcmlvKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiA9PT09PT09PSBub2Rld3JhcF9jb25uZWN0ID09PT09PT09CisgKi8KK3UzMiBub2Rld3JhcF9jb25uZWN0KHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZHNwX3N0cm1hdHRyIGF0dHJzOworCXN0cnVjdCBkc3Bfc3RybWF0dHIgKnBhdHRycyA9IE5VTEw7CisJdTMyIGNiX2RhdGFfc2l6ZTsKKwl1MzIgX191c2VyICpwc2l6ZSA9ICh1MzIgX191c2VyICopIGFyZ3MtPmFyZ3Nfbm9kZV9jb25uZWN0LmNvbm5fcGFyYW07CisJdTggKnBhcmdzID0gTlVMTDsKKwlzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICpub2RlX3JlczEsICpub2RlX3JlczI7CisJc3RydWN0IG5vZGVfb2JqZWN0ICpub2RlMSA9IE5VTEwsICpub2RlMiA9IE5VTEw7CisKKwlpZiAoKGludClhcmdzLT5hcmdzX25vZGVfY29ubmVjdC5obm9kZSAhPSBEU1BfSEdQUE5PREUpIHsKKwkJZmluZF9ub2RlX2hhbmRsZSgmbm9kZV9yZXMxLCBwcl9jdHh0LAorCQkJCWFyZ3MtPmFyZ3Nfbm9kZV9jb25uZWN0Lmhub2RlKTsKKwkJaWYgKG5vZGVfcmVzMSkKKwkJCW5vZGUxID0gbm9kZV9yZXMxLT5obm9kZTsKKwl9IGVsc2UgeworCQlub2RlMSA9IGFyZ3MtPmFyZ3Nfbm9kZV9jb25uZWN0Lmhub2RlOworCX0KKworCWlmICgoaW50KWFyZ3MtPmFyZ3Nfbm9kZV9jb25uZWN0Lm90aGVyX25vZGUgIT0gRFNQX0hHUFBOT0RFKSB7CisJCWZpbmRfbm9kZV9oYW5kbGUoJm5vZGVfcmVzMiwgcHJfY3R4dCwKKwkJCQlhcmdzLT5hcmdzX25vZGVfY29ubmVjdC5vdGhlcl9ub2RlKTsKKwkJaWYgKG5vZGVfcmVzMikKKwkJCW5vZGUyID0gbm9kZV9yZXMyLT5obm9kZTsKKwl9IGVsc2UgeworCQlub2RlMiA9IGFyZ3MtPmFyZ3Nfbm9kZV9jb25uZWN0Lm90aGVyX25vZGU7CisJfQorCisJaWYgKCFub2RlMSB8fCAhbm9kZTIpCisJCXJldHVybiAtRUZBVUxUOworCisJLyogT3B0aW9uYWwgYXJndW1lbnQgKi8KKwlpZiAocHNpemUpIHsKKwkJaWYgKGdldF91c2VyKGNiX2RhdGFfc2l6ZSwgcHNpemUpKQorCQkJc3RhdHVzID0gLUVQRVJNOworCisJCWNiX2RhdGFfc2l6ZSArPSBzaXplb2YodTMyKTsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCXBhcmdzID0ga21hbGxvYyhjYl9kYXRhX3NpemUsIEdGUF9LRVJORUwpOworCQkJaWYgKHBhcmdzID09IE5VTEwpIHsKKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJCWdvdG8gZnVuY19jb250OworCQkJfQorCisJCX0KKwkJQ1BfRk1fVVNSKHBhcmdzLCBhcmdzLT5hcmdzX25vZGVfY29ubmVjdC5jb25uX3BhcmFtLCBzdGF0dXMsCisJCQkgIGNiX2RhdGFfc2l6ZSk7CisJCWlmIChzdGF0dXMpCisJCQlnb3RvIGZ1bmNfY29udDsKKwl9CisJaWYgKGFyZ3MtPmFyZ3Nfbm9kZV9jb25uZWN0LnBhdHRycykgewkvKiBPcHRpb25hbCBhcmd1bWVudCAqLworCQlDUF9GTV9VU1IoJmF0dHJzLCBhcmdzLT5hcmdzX25vZGVfY29ubmVjdC5wYXR0cnMsIHN0YXR1cywgMSk7CisJCWlmICghc3RhdHVzKQorCQkJcGF0dHJzID0gJmF0dHJzOworCisJfQorCWlmICghc3RhdHVzKSB7CisJCXN0YXR1cyA9IG5vZGVfY29ubmVjdChub2RlMSwKKwkJCQkgICAgICBhcmdzLT5hcmdzX25vZGVfY29ubmVjdC5zdHJlYW1faWQsCisJCQkJICAgICAgbm9kZTIsCisJCQkJICAgICAgYXJncy0+YXJnc19ub2RlX2Nvbm5lY3Qub3RoZXJfc3RyZWFtLAorCQkJCSAgICAgIHBhdHRycywgKHN0cnVjdCBkc3BfY2JkYXRhICopcGFyZ3MpOworCX0KK2Z1bmNfY29udDoKKwlrZnJlZShwYXJncyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogPT09PT09PT0gbm9kZXdyYXBfY3JlYXRlID09PT09PT09CisgKi8KK3UzMiBub2Rld3JhcF9jcmVhdGUodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCXUzMiByZXQ7CisJc3RydWN0IG5vZGVfcmVzX29iamVjdCAqbm9kZV9yZXM7CisKKwlmaW5kX25vZGVfaGFuZGxlKCZub2RlX3JlcywgcHJfY3R4dCwgYXJncy0+YXJnc19ub2RlX2NyZWF0ZS5obm9kZSk7CisKKwlpZiAoIW5vZGVfcmVzKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldCA9IG5vZGVfY3JlYXRlKG5vZGVfcmVzLT5obm9kZSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogPT09PT09PT0gbm9kZXdyYXBfZGVsZXRlID09PT09PT09CisgKi8KK3UzMiBub2Rld3JhcF9kZWxldGUodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCXUzMiByZXQ7CisJc3RydWN0IG5vZGVfcmVzX29iamVjdCAqbm9kZV9yZXM7CisKKwlmaW5kX25vZGVfaGFuZGxlKCZub2RlX3JlcywgcHJfY3R4dCwgYXJncy0+YXJnc19ub2RlX2RlbGV0ZS5obm9kZSk7CisKKwlpZiAoIW5vZGVfcmVzKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldCA9IG5vZGVfZGVsZXRlKG5vZGVfcmVzLCBwcl9jdHh0KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZXdyYXBfZnJlZV9tc2dfYnVmID09PT09PT09CisgKi8KK3UzMiBub2Rld3JhcF9mcmVlX21zZ19idWYodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBkc3BfYnVmZmVyYXR0ciAqcGF0dHIgPSBOVUxMOworCXN0cnVjdCBkc3BfYnVmZmVyYXR0ciBhdHRyOworCXN0cnVjdCBub2RlX3Jlc19vYmplY3QgKm5vZGVfcmVzOworCisJZmluZF9ub2RlX2hhbmRsZSgmbm9kZV9yZXMsIHByX2N0eHQsIGFyZ3MtPmFyZ3Nfbm9kZV9mcmVlbXNnYnVmLmhub2RlKTsKKworCWlmICghbm9kZV9yZXMpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKGFyZ3MtPmFyZ3Nfbm9kZV9mcmVlbXNnYnVmLnBhdHRyKSB7CS8qIE9wdGlvbmFsIGFyZ3VtZW50ICovCisJCUNQX0ZNX1VTUigmYXR0ciwgYXJncy0+YXJnc19ub2RlX2ZyZWVtc2didWYucGF0dHIsIHN0YXR1cywgMSk7CisJCWlmICghc3RhdHVzKQorCQkJcGF0dHIgPSAmYXR0cjsKKworCX0KKworCWlmICghYXJncy0+YXJnc19ub2RlX2ZyZWVtc2didWYucGJ1ZmZlcikKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPSBub2RlX2ZyZWVfbXNnX2J1Zihub2RlX3Jlcy0+aG5vZGUsCisJCQkJCSAgIGFyZ3MtPmFyZ3Nfbm9kZV9mcmVlbXNnYnVmLnBidWZmZXIsCisJCQkJCSAgIHBhdHRyKTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogPT09PT09PT0gbm9kZXdyYXBfZ2V0X2F0dHIgPT09PT09PT0KKyAqLwordTMyIG5vZGV3cmFwX2dldF9hdHRyKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZHNwX25vZGVhdHRyIGF0dHI7CisJc3RydWN0IG5vZGVfcmVzX29iamVjdCAqbm9kZV9yZXM7CisKKwlmaW5kX25vZGVfaGFuZGxlKCZub2RlX3JlcywgcHJfY3R4dCwgYXJncy0+YXJnc19ub2RlX2dldGF0dHIuaG5vZGUpOworCisJaWYgKCFub2RlX3JlcykKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlzdGF0dXMgPSBub2RlX2dldF9hdHRyKG5vZGVfcmVzLT5obm9kZSwgJmF0dHIsCisJCQkgICAgICAgYXJncy0+YXJnc19ub2RlX2dldGF0dHIuYXR0cl9zaXplKTsKKwlDUF9UT19VU1IoYXJncy0+YXJnc19ub2RlX2dldGF0dHIucGF0dHIsICZhdHRyLCBzdGF0dXMsIDEpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqID09PT09PT09IG5vZGV3cmFwX2dldF9tZXNzYWdlID09PT09PT09CisgKi8KK3UzMiBub2Rld3JhcF9nZXRfbWVzc2FnZSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgZHNwX21zZyBtc2c7CisJc3RydWN0IG5vZGVfcmVzX29iamVjdCAqbm9kZV9yZXM7CisKKwlmaW5kX25vZGVfaGFuZGxlKCZub2RlX3JlcywgcHJfY3R4dCwgYXJncy0+YXJnc19ub2RlX2dldG1lc3NhZ2UuaG5vZGUpOworCisJaWYgKCFub2RlX3JlcykKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlzdGF0dXMgPSBub2RlX2dldF9tZXNzYWdlKG5vZGVfcmVzLT5obm9kZSwgJm1zZywKKwkJCQkgIGFyZ3MtPmFyZ3Nfbm9kZV9nZXRtZXNzYWdlLnV0aW1lb3V0KTsKKworCUNQX1RPX1VTUihhcmdzLT5hcmdzX25vZGVfZ2V0bWVzc2FnZS5tZXNzYWdlLCAmbXNnLCBzdGF0dXMsIDEpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqID09PT09PT09IG5vZGV3cmFwX3BhdXNlID09PT09PT09CisgKi8KK3UzMiBub2Rld3JhcF9wYXVzZSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJdTMyIHJldDsKKwlzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICpub2RlX3JlczsKKworCWZpbmRfbm9kZV9oYW5kbGUoJm5vZGVfcmVzLCBwcl9jdHh0LCBhcmdzLT5hcmdzX25vZGVfcGF1c2UuaG5vZGUpOworCisJaWYgKCFub2RlX3JlcykKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXQgPSBub2RlX3BhdXNlKG5vZGVfcmVzLT5obm9kZSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogPT09PT09PT0gbm9kZXdyYXBfcHV0X21lc3NhZ2UgPT09PT09PT0KKyAqLwordTMyIG5vZGV3cmFwX3B1dF9tZXNzYWdlKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZHNwX21zZyBtc2c7CisJc3RydWN0IG5vZGVfcmVzX29iamVjdCAqbm9kZV9yZXM7CisKKwlmaW5kX25vZGVfaGFuZGxlKCZub2RlX3JlcywgcHJfY3R4dCwgYXJncy0+YXJnc19ub2RlX3B1dG1lc3NhZ2UuaG5vZGUpOworCisJaWYgKCFub2RlX3JlcykKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlDUF9GTV9VU1IoJm1zZywgYXJncy0+YXJnc19ub2RlX3B1dG1lc3NhZ2UubWVzc2FnZSwgc3RhdHVzLCAxKTsKKworCWlmICghc3RhdHVzKSB7CisJCXN0YXR1cyA9CisJCSAgICBub2RlX3B1dF9tZXNzYWdlKG5vZGVfcmVzLT5obm9kZSwgJm1zZywKKwkJCQkgICAgIGFyZ3MtPmFyZ3Nfbm9kZV9wdXRtZXNzYWdlLnV0aW1lb3V0KTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogPT09PT09PT0gbm9kZXdyYXBfcmVnaXN0ZXJfbm90aWZ5ID09PT09PT09CisgKi8KK3UzMiBub2Rld3JhcF9yZWdpc3Rlcl9ub3RpZnkodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBkc3Bfbm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbjsKKwlzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICpub2RlX3JlczsKKworCWZpbmRfbm9kZV9oYW5kbGUoJm5vZGVfcmVzLCBwcl9jdHh0LAorCQkJYXJncy0+YXJnc19ub2RlX3JlZ2lzdGVybm90aWZ5Lmhub2RlKTsKKworCWlmICghbm9kZV9yZXMpCisJCXJldHVybiAtRUZBVUxUOworCisJLyogSW5pdGlhbGl6ZSB0aGUgbm90aWZpY2F0aW9uIGRhdGEgc3RydWN0dXJlICovCisJbm90aWZpY2F0aW9uLnBzX25hbWUgPSBOVUxMOworCW5vdGlmaWNhdGlvbi5oYW5kbGUgPSBOVUxMOworCisJaWYgKCFhcmdzLT5hcmdzX3Byb2NfcmVnaXN0ZXJfbm90aWZ5LmV2ZW50X21hc2spCisJCUNQX0ZNX1VTUigmbm90aWZpY2F0aW9uLAorCQkJICBhcmdzLT5hcmdzX3Byb2NfcmVnaXN0ZXJfbm90aWZ5Lmhub3RpZmljYXRpb24sCisJCQkgIHN0YXR1cywgMSk7CisKKwlzdGF0dXMgPSBub2RlX3JlZ2lzdGVyX25vdGlmeShub2RlX3Jlcy0+aG5vZGUsCisJCQkJICAgICAgYXJncy0+YXJnc19ub2RlX3JlZ2lzdGVybm90aWZ5LmV2ZW50X21hc2ssCisJCQkJICAgICAgYXJncy0+YXJnc19ub2RlX3JlZ2lzdGVybm90aWZ5LgorCQkJCSAgICAgIG5vdGlmeV90eXBlLCAmbm90aWZpY2F0aW9uKTsKKwlDUF9UT19VU1IoYXJncy0+YXJnc19ub2RlX3JlZ2lzdGVybm90aWZ5Lmhub3RpZmljYXRpb24sICZub3RpZmljYXRpb24sCisJCSAgc3RhdHVzLCAxKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogPT09PT09PT0gbm9kZXdyYXBfcnVuID09PT09PT09CisgKi8KK3UzMiBub2Rld3JhcF9ydW4odW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCXUzMiByZXQ7CisJc3RydWN0IG5vZGVfcmVzX29iamVjdCAqbm9kZV9yZXM7CisKKwlmaW5kX25vZGVfaGFuZGxlKCZub2RlX3JlcywgcHJfY3R4dCwgYXJncy0+YXJnc19ub2RlX3J1bi5obm9kZSk7CisKKwlpZiAoIW5vZGVfcmVzKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldCA9IG5vZGVfcnVuKG5vZGVfcmVzLT5obm9kZSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogPT09PT09PT0gbm9kZXdyYXBfdGVybWluYXRlID09PT09PT09CisgKi8KK3UzMiBub2Rld3JhcF90ZXJtaW5hdGUodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCWludCBzdGF0dXM7CisJaW50IHRlbXBzdGF0dXM7CisJc3RydWN0IG5vZGVfcmVzX29iamVjdCAqbm9kZV9yZXM7CisKKwlmaW5kX25vZGVfaGFuZGxlKCZub2RlX3JlcywgcHJfY3R4dCwgYXJncy0+YXJnc19ub2RlX3Rlcm1pbmF0ZS5obm9kZSk7CisKKwlpZiAoIW5vZGVfcmVzKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXN0YXR1cyA9IG5vZGVfdGVybWluYXRlKG5vZGVfcmVzLT5obm9kZSwgJnRlbXBzdGF0dXMpOworCisJQ1BfVE9fVVNSKGFyZ3MtPmFyZ3Nfbm9kZV90ZXJtaW5hdGUucHN0YXR1cywgJnRlbXBzdGF0dXMsIHN0YXR1cywgMSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogPT09PT09PT0gbm9kZXdyYXBfZ2V0X3V1aWRfcHJvcHMgPT09PT09PT0KKyAqLwordTMyIG5vZGV3cmFwX2dldF91dWlkX3Byb3BzKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZHNwX3V1aWQgbm9kZV91dWlkOworCXN0cnVjdCBkc3BfbmRicHJvcHMgKnBub2RlX3Byb3BzID0gTlVMTDsKKwl2b2lkICpocHJvY2Vzc29yID0gKChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICopcHJfY3R4dCktPmhwcm9jZXNzb3I7CisKKwlDUF9GTV9VU1IoJm5vZGVfdXVpZCwgYXJncy0+YXJnc19ub2RlX2dldHV1aWRwcm9wcy5ub2RlX2lkX3B0ciwgc3RhdHVzLAorCQkgIDEpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19jb250OworCXBub2RlX3Byb3BzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRzcF9uZGJwcm9wcyksIEdGUF9LRVJORUwpOworCWlmIChwbm9kZV9wcm9wcyAhPSBOVUxMKSB7CisJCXN0YXR1cyA9CisJCSAgICBub2RlX2dldF91dWlkX3Byb3BzKGhwcm9jZXNzb3IsICZub2RlX3V1aWQsIHBub2RlX3Byb3BzKTsKKwkJQ1BfVE9fVVNSKGFyZ3MtPmFyZ3Nfbm9kZV9nZXR1dWlkcHJvcHMubm9kZV9wcm9wcywgcG5vZGVfcHJvcHMsCisJCQkgIHN0YXR1cywgMSk7CisJfSBlbHNlCisJCXN0YXR1cyA9IC1FTk9NRU07CitmdW5jX2NvbnQ6CisJa2ZyZWUocG5vZGVfcHJvcHMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiA9PT09PT09PSBmaW5kX3N0cm1faGFuZGxlID09PT09PT09PQorICovCitpbmxpbmUgdm9pZCBmaW5kX3N0cm1faGFuZGxlKHN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKipzdHJtcmVzLAorCQkJCXZvaWQgKnByX2N0eHQsIHZvaWQgKmhzdHJlYW0pCit7CisJcmN1X3JlYWRfbG9jaygpOworCSpzdHJtcmVzID0gaWRyX2ZpbmQoKChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICopcHJfY3R4dCktPnN0cmVhbV9pZCwKKwkJCQkJCQkoaW50KWhzdHJlYW0gLSAxKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm47Cit9CisKKy8qCisgKiA9PT09PT09PSBzdHJtd3JhcF9hbGxvY2F0ZV9idWZmZXIgPT09PT09PT0KKyAqLwordTMyIHN0cm13cmFwX2FsbG9jYXRlX2J1ZmZlcih1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1czsKKwl1OCAqKmFwX2J1ZmZlciA9IE5VTEw7CisJdTMyIG51bV9idWZzID0gYXJncy0+YXJnc19zdHJtX2FsbG9jYXRlYnVmZmVyLm51bV9idWZzOworCXN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKnN0cm1fcmVzOworCisJZmluZF9zdHJtX2hhbmRsZSgmc3RybV9yZXMsIHByX2N0eHQsCisJCWFyZ3MtPmFyZ3Nfc3RybV9hbGxvY2F0ZWJ1ZmZlci5oc3RyZWFtKTsKKworCWlmICghc3RybV9yZXMpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKG51bV9idWZzID4gTUFYX0JVRlMpCisJCXJldHVybiAtRUlOVkFMOworCisJYXBfYnVmZmVyID0ga21hbGxvYygobnVtX2J1ZnMgKiBzaXplb2YodTggKikpLCBHRlBfS0VSTkVMKTsKKwlpZiAoYXBfYnVmZmVyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc3RhdHVzID0gc3RybV9hbGxvY2F0ZV9idWZmZXIoc3RybV9yZXMsCisJCQkJICAgICAgYXJncy0+YXJnc19zdHJtX2FsbG9jYXRlYnVmZmVyLnVzaXplLAorCQkJCSAgICAgIGFwX2J1ZmZlciwgbnVtX2J1ZnMsIHByX2N0eHQpOworCWlmICghc3RhdHVzKSB7CisJCUNQX1RPX1VTUihhcmdzLT5hcmdzX3N0cm1fYWxsb2NhdGVidWZmZXIuYXBfYnVmZmVyLCBhcF9idWZmZXIsCisJCQkgIHN0YXR1cywgbnVtX2J1ZnMpOworCQlpZiAoc3RhdHVzKSB7CisJCQlzdGF0dXMgPSAtRUZBVUxUOworCQkJc3RybV9mcmVlX2J1ZmZlcihzdHJtX3JlcywKKwkJCQkJIGFwX2J1ZmZlciwgbnVtX2J1ZnMsIHByX2N0eHQpOworCQl9CisJfQorCWtmcmVlKGFwX2J1ZmZlcik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogPT09PT09PT0gc3RybXdyYXBfY2xvc2UgPT09PT09PT0KKyAqLwordTMyIHN0cm13cmFwX2Nsb3NlKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKK3sKKwlzdHJ1Y3Qgc3RybV9yZXNfb2JqZWN0ICpzdHJtX3JlczsKKworCWZpbmRfc3RybV9oYW5kbGUoJnN0cm1fcmVzLCBwcl9jdHh0LCBhcmdzLT5hcmdzX3N0cm1fY2xvc2UuaHN0cmVhbSk7CisKKwlpZiAoIXN0cm1fcmVzKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiBzdHJtX2Nsb3NlKHN0cm1fcmVzLCBwcl9jdHh0KTsKK30KKworLyoKKyAqID09PT09PT09IHN0cm13cmFwX2ZyZWVfYnVmZmVyID09PT09PT09CisgKi8KK3UzMiBzdHJtd3JhcF9mcmVlX2J1ZmZlcih1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJdTggKiphcF9idWZmZXIgPSBOVUxMOworCXUzMiBudW1fYnVmcyA9IGFyZ3MtPmFyZ3Nfc3RybV9mcmVlYnVmZmVyLm51bV9idWZzOworCXN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKnN0cm1fcmVzOworCisJZmluZF9zdHJtX2hhbmRsZSgmc3RybV9yZXMsIHByX2N0eHQsCisJCQlhcmdzLT5hcmdzX3N0cm1fZnJlZWJ1ZmZlci5oc3RyZWFtKTsKKworCWlmICghc3RybV9yZXMpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKG51bV9idWZzID4gTUFYX0JVRlMpCisJCXJldHVybiAtRUlOVkFMOworCisJYXBfYnVmZmVyID0ga21hbGxvYygobnVtX2J1ZnMgKiBzaXplb2YodTggKikpLCBHRlBfS0VSTkVMKTsKKwlpZiAoYXBfYnVmZmVyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJQ1BfRk1fVVNSKGFwX2J1ZmZlciwgYXJncy0+YXJnc19zdHJtX2ZyZWVidWZmZXIuYXBfYnVmZmVyLCBzdGF0dXMsCisJCSAgbnVtX2J1ZnMpOworCisJaWYgKCFzdGF0dXMpCisJCXN0YXR1cyA9IHN0cm1fZnJlZV9idWZmZXIoc3RybV9yZXMsCisJCQkJCSAgYXBfYnVmZmVyLCBudW1fYnVmcywgcHJfY3R4dCk7CisKKwlDUF9UT19VU1IoYXJncy0+YXJnc19zdHJtX2ZyZWVidWZmZXIuYXBfYnVmZmVyLCBhcF9idWZmZXIsIHN0YXR1cywKKwkJICBudW1fYnVmcyk7CisJa2ZyZWUoYXBfYnVmZmVyKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiA9PT09PT09PSBzdHJtd3JhcF9nZXRfZXZlbnRfaGFuZGxlID09PT09PT09CisgKi8KK3UzMiBfX2RlcHJlY2F0ZWQgc3RybXdyYXBfZ2V0X2V2ZW50X2hhbmRsZSh1bmlvbiB0cmFwcGVkX2FyZ3MgKiBhcmdzLAorCQkJCQkgICB2b2lkICpwcl9jdHh0KQoreworCXByX2VycigiJXM6IGRlcHJlY2F0ZWQgZHNwYnJpZGdlIGlvY3RsXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKKy8qCisgKiA9PT09PT09PSBzdHJtd3JhcF9nZXRfaW5mbyA9PT09PT09PQorICovCit1MzIgc3RybXdyYXBfZ2V0X2luZm8odW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBzdHJlYW1faW5mbyBzdHJtX2luZm87CisJc3RydWN0IGRzcF9zdHJlYW1pbmZvIHVzZXI7CisJc3RydWN0IGRzcF9zdHJlYW1pbmZvICp0ZW1wOworCXN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKnN0cm1fcmVzOworCisJZmluZF9zdHJtX2hhbmRsZSgmc3RybV9yZXMsIHByX2N0eHQsCisJCQlhcmdzLT5hcmdzX3N0cm1fZ2V0aW5mby5oc3RyZWFtKTsKKworCWlmICghc3RybV9yZXMpCisJCXJldHVybiAtRUZBVUxUOworCisJQ1BfRk1fVVNSKCZzdHJtX2luZm8sIGFyZ3MtPmFyZ3Nfc3RybV9nZXRpbmZvLnN0cmVhbV9pbmZvLCBzdGF0dXMsIDEpOworCXRlbXAgPSBzdHJtX2luZm8udXNlcl9zdHJtOworCisJc3RybV9pbmZvLnVzZXJfc3RybSA9ICZ1c2VyOworCisJaWYgKCFzdGF0dXMpIHsKKwkJc3RhdHVzID0gc3RybV9nZXRfaW5mbyhzdHJtX3Jlcy0+aHN0cmVhbSwKKwkJCQkgICAgICAgJnN0cm1faW5mbywKKwkJCQkgICAgICAgYXJncy0+YXJnc19zdHJtX2dldGluZm8uCisJCQkJICAgICAgIHN0cmVhbV9pbmZvX3NpemUpOworCX0KKwlDUF9UT19VU1IodGVtcCwgc3RybV9pbmZvLnVzZXJfc3RybSwgc3RhdHVzLCAxKTsKKwlzdHJtX2luZm8udXNlcl9zdHJtID0gdGVtcDsKKwlDUF9UT19VU1IoYXJncy0+YXJnc19zdHJtX2dldGluZm8uc3RyZWFtX2luZm8sICZzdHJtX2luZm8sIHN0YXR1cywgMSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqID09PT09PT09IHN0cm13cmFwX2lkbGUgPT09PT09PT0KKyAqLwordTMyIHN0cm13cmFwX2lkbGUodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCXUzMiByZXQ7CisJc3RydWN0IHN0cm1fcmVzX29iamVjdCAqc3RybV9yZXM7CisKKwlmaW5kX3N0cm1faGFuZGxlKCZzdHJtX3JlcywgcHJfY3R4dCwgYXJncy0+YXJnc19zdHJtX2lkbGUuaHN0cmVhbSk7CisKKwlpZiAoIXN0cm1fcmVzKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldCA9IHN0cm1faWRsZShzdHJtX3Jlcy0+aHN0cmVhbSwgYXJncy0+YXJnc19zdHJtX2lkbGUuZmx1c2hfZmxhZyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogPT09PT09PT0gc3RybXdyYXBfaXNzdWUgPT09PT09PT0KKyAqLwordTMyIHN0cm13cmFwX2lzc3VlKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3Qgc3RybV9yZXNfb2JqZWN0ICpzdHJtX3JlczsKKworCWZpbmRfc3RybV9oYW5kbGUoJnN0cm1fcmVzLCBwcl9jdHh0LCBhcmdzLT5hcmdzX3N0cm1faXNzdWUuaHN0cmVhbSk7CisKKwlpZiAoIXN0cm1fcmVzKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmICghYXJncy0+YXJnc19zdHJtX2lzc3VlLnBidWZmZXIpCisJCXJldHVybiAtRUZBVUxUOworCisJLyogTm8gbmVlZCBvZiBkb2luZyBDUF9GTV9VU1IgZm9yIHRoZSB1c2VyIGJ1ZmZlciAocGJ1ZmZlcikKKwkgICBhcyB0aGlzIGlzIGRvbmUgaW4gQnJpZGdlIGludGVybmFsIGZ1bmN0aW9uIGJyaWRnZV9jaG5sX2FkZF9pb19yZXEKKwkgICBpbiBjaG5sX3NtLmMgKi8KKwlzdGF0dXMgPSBzdHJtX2lzc3VlKHN0cm1fcmVzLT5oc3RyZWFtLAorCQkJICAgIGFyZ3MtPmFyZ3Nfc3RybV9pc3N1ZS5wYnVmZmVyLAorCQkJICAgIGFyZ3MtPmFyZ3Nfc3RybV9pc3N1ZS5kd19ieXRlcywKKwkJCSAgICBhcmdzLT5hcmdzX3N0cm1faXNzdWUuZHdfYnVmX3NpemUsCisJCQkgICAgYXJncy0+YXJnc19zdHJtX2lzc3VlLmR3X2FyZyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogPT09PT09PT0gc3RybXdyYXBfb3BlbiA9PT09PT09PQorICovCit1MzIgc3RybXdyYXBfb3Blbih1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IHN0cm1fYXR0ciBhdHRyOworCXN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKnN0cm1fcmVzX29iajsKKwlzdHJ1Y3QgZHNwX3N0cmVhbWF0dHJpbiBzdHJtX2F0dHJfaW47CisJc3RydWN0IG5vZGVfcmVzX29iamVjdCAqbm9kZV9yZXM7CisJaW50IHN0cm1pZDsKKworCWZpbmRfbm9kZV9oYW5kbGUoJm5vZGVfcmVzLCBwcl9jdHh0LCBhcmdzLT5hcmdzX3N0cm1fb3Blbi5obm9kZSk7CisKKwlpZiAoIW5vZGVfcmVzKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCUNQX0ZNX1VTUigmYXR0ciwgYXJncy0+YXJnc19zdHJtX29wZW4uYXR0cl9pbiwgc3RhdHVzLCAxKTsKKworCWlmIChhdHRyLnN0cmVhbV9hdHRyX2luICE9IE5VTEwpIHsJLyogT3B0aW9uYWwgYXJndW1lbnQgKi8KKwkJQ1BfRk1fVVNSKCZzdHJtX2F0dHJfaW4sIGF0dHIuc3RyZWFtX2F0dHJfaW4sIHN0YXR1cywgMSk7CisJCWlmICghc3RhdHVzKSB7CisJCQlhdHRyLnN0cmVhbV9hdHRyX2luID0gJnN0cm1fYXR0cl9pbjsKKwkJCWlmIChhdHRyLnN0cmVhbV9hdHRyX2luLT5zdHJtX21vZGUgPT0gU1RSTU1PREVfTERNQSkKKwkJCQlyZXR1cm4gLUVOT1NZUzsKKwkJfQorCisJfQorCXN0YXR1cyA9IHN0cm1fb3Blbihub2RlX3Jlcy0+aG5vZGUsCisJCQkgICBhcmdzLT5hcmdzX3N0cm1fb3Blbi5kaXJlY3Rpb24sCisJCQkgICBhcmdzLT5hcmdzX3N0cm1fb3Blbi5pbmRleCwgJmF0dHIsICZzdHJtX3Jlc19vYmosCisJCQkgICBwcl9jdHh0KTsKKwlpZiAoIXN0YXR1cykgeworCQlzdHJtaWQgPSBzdHJtX3Jlc19vYmotPmlkICsgMTsKKwkJQ1BfVE9fVVNSKGFyZ3MtPmFyZ3Nfc3RybV9vcGVuLnBoX3N0cmVhbSwgJnN0cm1pZCwgc3RhdHVzLCAxKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqID09PT09PT09IHN0cm13cmFwX3JlY2xhaW0gPT09PT09PT0KKyAqLwordTMyIHN0cm13cmFwX3JlY2xhaW0odW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCWludCBzdGF0dXMgPSAwOworCXU4ICpidWZfcHRyOworCXUzMiB1bF9ieXRlczsKKwl1MzIgZHdfYXJnOworCXUzMiB1bF9idWZfc2l6ZTsKKwlzdHJ1Y3Qgc3RybV9yZXNfb2JqZWN0ICpzdHJtX3JlczsKKworCWZpbmRfc3RybV9oYW5kbGUoJnN0cm1fcmVzLCBwcl9jdHh0LCBhcmdzLT5hcmdzX3N0cm1fcmVjbGFpbS5oc3RyZWFtKTsKKworCWlmICghc3RybV9yZXMpCisJCXJldHVybiAtRUZBVUxUOworCisJc3RhdHVzID0gc3RybV9yZWNsYWltKHN0cm1fcmVzLT5oc3RyZWFtLCAmYnVmX3B0ciwKKwkJCSAgICAgICZ1bF9ieXRlcywgJnVsX2J1Zl9zaXplLCAmZHdfYXJnKTsKKwlDUF9UT19VU1IoYXJncy0+YXJnc19zdHJtX3JlY2xhaW0uYnVmX3B0ciwgJmJ1Zl9wdHIsIHN0YXR1cywgMSk7CisJQ1BfVE9fVVNSKGFyZ3MtPmFyZ3Nfc3RybV9yZWNsYWltLmJ5dGVzLCAmdWxfYnl0ZXMsIHN0YXR1cywgMSk7CisJQ1BfVE9fVVNSKGFyZ3MtPmFyZ3Nfc3RybV9yZWNsYWltLnBkd19hcmcsICZkd19hcmcsIHN0YXR1cywgMSk7CisKKwlpZiAoYXJncy0+YXJnc19zdHJtX3JlY2xhaW0uYnVmX3NpemVfcHRyICE9IE5VTEwpIHsKKwkJQ1BfVE9fVVNSKGFyZ3MtPmFyZ3Nfc3RybV9yZWNsYWltLmJ1Zl9zaXplX3B0ciwgJnVsX2J1Zl9zaXplLAorCQkJICBzdGF0dXMsIDEpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiA9PT09PT09PSBzdHJtd3JhcF9yZWdpc3Rlcl9ub3RpZnkgPT09PT09PT0KKyAqLwordTMyIHN0cm13cmFwX3JlZ2lzdGVyX25vdGlmeSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRzcF9ub3RpZmljYXRpb24gbm90aWZpY2F0aW9uOworCXN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKnN0cm1fcmVzOworCisJZmluZF9zdHJtX2hhbmRsZSgmc3RybV9yZXMsIHByX2N0eHQsCisJCQlhcmdzLT5hcmdzX3N0cm1fcmVnaXN0ZXJub3RpZnkuaHN0cmVhbSk7CisKKwlpZiAoIXN0cm1fcmVzKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qIEluaXRpYWxpemUgdGhlIG5vdGlmaWNhdGlvbiBkYXRhIHN0cnVjdHVyZSAqLworCW5vdGlmaWNhdGlvbi5wc19uYW1lID0gTlVMTDsKKwlub3RpZmljYXRpb24uaGFuZGxlID0gTlVMTDsKKworCXN0YXR1cyA9IHN0cm1fcmVnaXN0ZXJfbm90aWZ5KHN0cm1fcmVzLT5oc3RyZWFtLAorCQkJCSAgICAgIGFyZ3MtPmFyZ3Nfc3RybV9yZWdpc3Rlcm5vdGlmeS5ldmVudF9tYXNrLAorCQkJCSAgICAgIGFyZ3MtPmFyZ3Nfc3RybV9yZWdpc3Rlcm5vdGlmeS4KKwkJCQkgICAgICBub3RpZnlfdHlwZSwgJm5vdGlmaWNhdGlvbik7CisJQ1BfVE9fVVNSKGFyZ3MtPmFyZ3Nfc3RybV9yZWdpc3Rlcm5vdGlmeS5obm90aWZpY2F0aW9uLCAmbm90aWZpY2F0aW9uLAorCQkgIHN0YXR1cywgMSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogPT09PT09PT0gc3RybXdyYXBfc2VsZWN0ID09PT09PT09CisgKi8KK3UzMiBzdHJtd3JhcF9zZWxlY3QodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCXUzMiBtYXNrOworCXN0cnVjdCBzdHJtX29iamVjdCAqc3RybV90YWJbTUFYX1NUUkVBTVNdOworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKnN0cm1fcmVzOworCWludCAqaWRzW01BWF9TVFJFQU1TXTsKKwlpbnQgaTsKKworCWlmIChhcmdzLT5hcmdzX3N0cm1fc2VsZWN0LnN0cm1fbnVtID4gTUFYX1NUUkVBTVMpCisJCXJldHVybiAtRUlOVkFMOworCisJQ1BfRk1fVVNSKGlkcywgYXJncy0+YXJnc19zdHJtX3NlbGVjdC5zdHJlYW1fdGFiLCBzdGF0dXMsCisJCWFyZ3MtPmFyZ3Nfc3RybV9zZWxlY3Quc3RybV9udW0pOworCisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5hcmdzX3N0cm1fc2VsZWN0LnN0cm1fbnVtOyBpKyspIHsKKwkJZmluZF9zdHJtX2hhbmRsZSgmc3RybV9yZXMsIHByX2N0eHQsIGlkc1tpXSk7CisKKwkJaWYgKCFzdHJtX3JlcykKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXN0cm1fdGFiW2ldID0gc3RybV9yZXMtPmhzdHJlYW07CisJfQorCisJaWYgKCFzdGF0dXMpIHsKKwkJc3RhdHVzID0gc3RybV9zZWxlY3Qoc3RybV90YWIsIGFyZ3MtPmFyZ3Nfc3RybV9zZWxlY3Quc3RybV9udW0sCisJCQkJICAgICAmbWFzaywgYXJncy0+YXJnc19zdHJtX3NlbGVjdC51dGltZW91dCk7CisJfQorCUNQX1RPX1VTUihhcmdzLT5hcmdzX3N0cm1fc2VsZWN0LnBtYXNrLCAmbWFzaywgc3RhdHVzLCAxKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBDTU0gKi8KKworLyoKKyAqID09PT09PT09IGNtbXdyYXBfY2FsbG9jX2J1ZiA9PT09PT09PQorICovCit1MzIgX19kZXByZWNhdGVkIGNtbXdyYXBfY2FsbG9jX2J1Zih1bmlvbiB0cmFwcGVkX2FyZ3MgKiBhcmdzLCB2b2lkICpwcl9jdHh0KQoreworCS8qIFRoaXMgb3BlcmF0aW9uIGlzIGRvbmUgaW4ga2VybmVsICovCisJcHJfZXJyKCIlczogZGVwcmVjYXRlZCBkc3BicmlkZ2UgaW9jdGxcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworLyoKKyAqID09PT09PT09IGNtbXdyYXBfZnJlZV9idWYgPT09PT09PT0KKyAqLwordTMyIF9fZGVwcmVjYXRlZCBjbW13cmFwX2ZyZWVfYnVmKHVuaW9uIHRyYXBwZWRfYXJncyAqIGFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJLyogVGhpcyBvcGVyYXRpb24gaXMgZG9uZSBpbiBrZXJuZWwgKi8KKwlwcl9lcnIoIiVzOiBkZXByZWNhdGVkIGRzcGJyaWRnZSBpb2N0bFxuIiwgX19mdW5jX18pOworCXJldHVybiAtRU5PU1lTOworfQorCisvKgorICogPT09PT09PT0gY21td3JhcF9nZXRfaGFuZGxlID09PT09PT09CisgKi8KK3UzMiBjbW13cmFwX2dldF9oYW5kbGUodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBjbW1fb2JqZWN0ICpoY21tX21ncjsKKwl2b2lkICpocHJvY2Vzc29yID0gKChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICopcHJfY3R4dCktPmhwcm9jZXNzb3I7CisKKwlzdGF0dXMgPSBjbW1fZ2V0X2hhbmRsZShocHJvY2Vzc29yLCAmaGNtbV9tZ3IpOworCisJQ1BfVE9fVVNSKGFyZ3MtPmFyZ3NfY21tX2dldGhhbmRsZS5waF9jbW1fbWdyLCAmaGNtbV9tZ3IsIHN0YXR1cywgMSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogPT09PT09PT0gY21td3JhcF9nZXRfaW5mbyA9PT09PT09PQorICovCit1MzIgY21td3JhcF9nZXRfaW5mbyh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGNtbV9pbmZvIGNtbV9pbmZvX29iajsKKworCXN0YXR1cyA9IGNtbV9nZXRfaW5mbyhhcmdzLT5hcmdzX2NtbV9nZXRpbmZvLmhjbW1fbWdyLCAmY21tX2luZm9fb2JqKTsKKworCUNQX1RPX1VTUihhcmdzLT5hcmdzX2NtbV9nZXRpbmZvLmNtbV9pbmZvX29iaiwgJmNtbV9pbmZvX29iaiwgc3RhdHVzLAorCQkgIDEpOworCisJcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2lvLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9pby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NzBmZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9pby5jCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogaW8uYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBJTyBtYW5hZ2VyIGludGVyZmFjZTogTWFuYWdlcyBJTyBiZXR3ZWVuIENITkwgYW5kIG1zZ19jdHJsLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhvc3QgT1MgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRFNQL0JJT1MgQnJpZGdlICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHJhY2UgJiBEZWJ1ZyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9TIEFkYXB0YXRpb24gTGF5ZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY2ZnLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQbGF0Zm9ybSBNYW5hZ2VyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhpcyAqLworI2luY2x1ZGUgPGlvb2JqLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2lvZGVmcy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9pby5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFscyAqLworc3RhdGljIHUzMiByZWZzOworCisvKgorICogID09PT09PT09IGlvX2NyZWF0ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENyZWF0ZSBhbiBJTyBtYW5hZ2VyIG9iamVjdCwgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIElPIGJldHdlZW4KKyAqICAgICAgQ0hOTCBhbmQgbXNnX2N0cmwKKyAqLworaW50IGlvX2NyZWF0ZShzdHJ1Y3QgaW9fbWdyICoqaW9fbWFuLCBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCSAgICAgY29uc3Qgc3RydWN0IGlvX2F0dHJzICptZ3JfYXR0cnRzKQoreworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCXN0cnVjdCBpb19tZ3IgKmhpb19tZ3IgPSBOVUxMOworCXN0cnVjdCBpb19tZ3JfICpwaW9fbWdyID0gTlVMTDsKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShpb19tYW4gIT0gTlVMTCk7CisJREJDX1JFUVVJUkUobWdyX2F0dHJ0cyAhPSBOVUxMKTsKKworCSppb19tYW4gPSBOVUxMOworCisJLyogQSBtZW1vcnkgYmFzZSBvZiAwIGltcGxpZXMgbm8gbWVtb3J5IGJhc2U6ICovCisJaWYgKChtZ3JfYXR0cnRzLT5zaG1fYmFzZSAhPSAwKSAmJiAobWdyX2F0dHJ0cy0+dXNtX2xlbmd0aCA9PSAwKSkKKwkJc3RhdHVzID0gLUVJTlZBTDsKKworCWlmIChtZ3JfYXR0cnRzLT53b3JkX3NpemUgPT0gMCkKKwkJc3RhdHVzID0gLUVJTlZBTDsKKworCWlmICghc3RhdHVzKSB7CisJCWRldl9nZXRfaW50Zl9meG5zKGhkZXZfb2JqLCAmaW50Zl9meG5zKTsKKworCQkvKiBMZXQgQnJpZGdlIGNoYW5uZWwgbW9kdWxlIGZpbmlzaCB0aGUgY3JlYXRlOiAqLworCQlzdGF0dXMgPSAoKmludGZfZnhucy0+cGZuX2lvX2NyZWF0ZSkgKCZoaW9fbWdyLCBoZGV2X29iaiwKKwkJCQkJCSAgICAgIG1ncl9hdHRydHMpOworCisJCWlmICghc3RhdHVzKSB7CisJCQlwaW9fbWdyID0gKHN0cnVjdCBpb19tZ3JfICopaGlvX21ncjsKKwkJCXBpb19tZ3ItPmludGZfZnhucyA9IGludGZfZnhuczsKKwkJCXBpb19tZ3ItPmhkZXZfb2JqID0gaGRldl9vYmo7CisKKwkJCS8qIFJldHVybiB0aGUgbmV3IGNoYW5uZWwgbWFuYWdlciBoYW5kbGU6ICovCisJCQkqaW9fbWFuID0gaGlvX21ncjsKKwkJfQorCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gaW9fZGVzdHJveSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERlbGV0ZSBJTyBtYW5hZ2VyLgorICovCitpbnQgaW9fZGVzdHJveShzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyKQoreworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCXN0cnVjdCBpb19tZ3JfICpwaW9fbWdyID0gKHN0cnVjdCBpb19tZ3JfICopaGlvX21ncjsKKwlpbnQgc3RhdHVzOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJaW50Zl9meG5zID0gcGlvX21nci0+aW50Zl9meG5zOworCisJLyogTGV0IEJyaWRnZSBjaGFubmVsIG1vZHVsZSBkZXN0cm95IHRoZSBpb19tZ3I6ICovCisJc3RhdHVzID0gKCppbnRmX2Z4bnMtPnBmbl9pb19kZXN0cm95KSAoaGlvX21ncik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGlvX2V4aXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEaXNjb250aW51ZSB1c2FnZSBvZiB0aGUgSU8gbW9kdWxlLgorICovCit2b2lkIGlvX2V4aXQodm9pZCkKK3sKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlyZWZzLS07CisKKwlEQkNfRU5TVVJFKHJlZnMgPj0gMCk7Cit9CisKKy8qCisgKiAgPT09PT09PT0gaW9faW5pdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEluaXRpYWxpemUgdGhlIElPIG1vZHVsZSdzIHByaXZhdGUgc3RhdGUuCisgKi8KK2Jvb2wgaW9faW5pdCh2b2lkKQoreworCWJvb2wgcmV0ID0gdHJ1ZTsKKworCURCQ19SRVFVSVJFKHJlZnMgPj0gMCk7CisKKwlpZiAocmV0KQorCQlyZWZzKys7CisKKwlEQkNfRU5TVVJFKChyZXQgJiYgKHJlZnMgPiAwKSkgfHwgKCFyZXQgJiYgKHJlZnMgPj0gMCkpKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9pb29iai5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvaW9vYmouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDYzNTVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvaW9vYmouaApAQCAtMCwwICsxLDM4IEBACisvKgorICogaW9vYmouaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBTdHJ1Y3R1cmUgc3ViY29tcG9uZW50cyBvZiBjaGFubmVsIGNsYXNzIGxpYnJhcnkgSU8gb2JqZWN0cyB3aGljaAorICogYXJlIGV4cG9zZWQgdG8gRFNQIEFQSSBmcm9tIEJyaWRnZSBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBJT09CSl8KKyNkZWZpbmUgSU9PQkpfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2ZGVmcy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BkZWZzLmg+CisKKy8qCisgKiAgVGhpcyBzdHJ1Y3QgaXMgdGhlIGZpcnN0IGZpZWxkIGluIGEgaW9fbWdyIHN0cnVjdC4gT3RoZXIsIGltcGxlbWVudGF0aW9uCisgKiAgc3BlY2lmaWMgZmllbGRzIGZvbGxvdyB0aGlzIHN0cnVjdHVyZSBpbiBtZW1vcnkuCisgKi8KK3N0cnVjdCBpb19tZ3JfIHsKKwkvKiBUaGVzZSBtdXN0IGJlIHRoZSBmaXJzdCBmaWVsZHMgaW4gYSBpb19tZ3Igc3RydWN0OiAqLworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmhicmlkZ2VfY29udGV4dDsJLyogQnJpZGdlIGNvbnRleHQuICovCisJLyogRnVuY3Rpb24gaW50ZXJmYWNlIHRvIEJyaWRnZSBkcml2ZXIuICovCisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisJc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqOwkvKiBEZXZpY2UgdGhpcyBib2FyZCByZXByZXNlbnRzLiAqLworfTsKKworI2VuZGlmIC8qIElPT0JKXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvbXNnLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9tc2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmQ0MzY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvbXNnLmMKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBtc2cuYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBEU1AvQklPUyBCcmlkZ2UgbXNnX2N0cmwgTW9kdWxlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhvc3QgT1MgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRFNQL0JJT1MgQnJpZGdlICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHJhY2UgJiBEZWJ1ZyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJyaWRnZSBEcml2ZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwZGVmcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhdGZvcm0gTWFuYWdlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXYuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KKyNpbmNsdWRlIDxtc2dvYmouaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvbXNnLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHbG9iYWxzICovCitzdGF0aWMgdTMyIHJlZnM7CQkvKiBtb2R1bGUgcmVmZXJlbmNlIGNvdW50ICovCisKKy8qCisgKiAgPT09PT09PT0gbXNnX2NyZWF0ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENyZWF0ZSBhbiBvYmplY3QgdG8gbWFuYWdlIG1lc3NhZ2UgcXVldWVzLiBPbmx5IG9uZSBvZiB0aGVzZSBvYmplY3RzCisgKiAgICAgIGNhbiBleGlzdCBwZXIgZGV2aWNlIG9iamVjdC4KKyAqLworaW50IG1zZ19jcmVhdGUoc3RydWN0IG1zZ19tZ3IgKiptc2dfbWFuLAorCQkgICAgICBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosIG1zZ19vbmV4aXQgbXNnX2NhbGxiYWNrKQoreworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCXN0cnVjdCBtc2dfbWdyXyAqbXNnX21ncl9vYmo7CisJc3RydWN0IG1zZ19tZ3IgKmhtc2dfbWdyOworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKG1zZ19tYW4gIT0gTlVMTCk7CisJREJDX1JFUVVJUkUobXNnX2NhbGxiYWNrICE9IE5VTEwpOworCURCQ19SRVFVSVJFKGhkZXZfb2JqICE9IE5VTEwpOworCisJKm1zZ19tYW4gPSBOVUxMOworCisJZGV2X2dldF9pbnRmX2Z4bnMoaGRldl9vYmosICZpbnRmX2Z4bnMpOworCisJLyogTGV0IEJyaWRnZSBtZXNzYWdlIG1vZHVsZSBmaW5pc2ggdGhlIGNyZWF0ZTogKi8KKwlzdGF0dXMgPQorCSAgICAoKmludGZfZnhucy0+cGZuX21zZ19jcmVhdGUpICgmaG1zZ19tZ3IsIGhkZXZfb2JqLCBtc2dfY2FsbGJhY2spOworCisJaWYgKCFzdGF0dXMpIHsKKwkJLyogRmlsbCBpbiBEU1AgQVBJIG1lc3NhZ2UgbW9kdWxlJ3MgZmllbGRzIG9mIHRoZSBtc2dfbWdyCisJCSAqIHN0cnVjdHVyZSAqLworCQltc2dfbWdyX29iaiA9IChzdHJ1Y3QgbXNnX21ncl8gKilobXNnX21ncjsKKwkJbXNnX21ncl9vYmotPmludGZfZnhucyA9IGludGZfZnhuczsKKworCQkvKiBGaW5hbGx5LCByZXR1cm4gdGhlIG5ldyBtZXNzYWdlIG1hbmFnZXIgaGFuZGxlOiAqLworCQkqbXNnX21hbiA9IGhtc2dfbWdyOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FUEVSTTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBtc2dfZGVsZXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGVsZXRlIGEgbXNnX2N0cmwgbWFuYWdlciBhbGxvY2F0ZWQgaW4gbXNnX2NyZWF0ZSgpLgorICovCit2b2lkIG1zZ19kZWxldGUoc3RydWN0IG1zZ19tZ3IgKmhtc2dfbWdyKQoreworCXN0cnVjdCBtc2dfbWdyXyAqbXNnX21ncl9vYmogPSAoc3RydWN0IG1zZ19tZ3JfICopaG1zZ19tZ3I7CisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlpZiAobXNnX21ncl9vYmopIHsKKwkJaW50Zl9meG5zID0gbXNnX21ncl9vYmotPmludGZfZnhuczsKKworCQkvKiBMZXQgQnJpZGdlIG1lc3NhZ2UgbW9kdWxlIGRlc3Ryb3kgdGhlIG1zZ19tZ3I6ICovCisJCSgqaW50Zl9meG5zLT5wZm5fbXNnX2RlbGV0ZSkgKGhtc2dfbWdyKTsKKwl9IGVsc2UgeworCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBFcnJvciBobXNnX21nciBoYW5kbGU6ICVwXG4iLAorCQkJX19mdW5jX18sIGhtc2dfbWdyKTsKKwl9Cit9CisKKy8qCisgKiAgPT09PT09PT0gbXNnX2V4aXQgPT09PT09PT0KKyAqLwordm9pZCBtc2dfZXhpdCh2b2lkKQoreworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlyZWZzLS07CisKKwlEQkNfRU5TVVJFKHJlZnMgPj0gMCk7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbXNnX21vZF9pbml0ID09PT09PT09CisgKi8KK2Jvb2wgbXNnX21vZF9pbml0KHZvaWQpCit7CisJREJDX1JFUVVJUkUocmVmcyA+PSAwKTsKKworCXJlZnMrKzsKKworCURCQ19FTlNVUkUocmVmcyA+PSAwKTsKKworCXJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvbXNnb2JqLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9tc2dvYmouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGNhNjMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvbXNnb2JqLmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIG1zZ29iai5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIFN0cnVjdHVyZSBzdWJjb21wb25lbnRzIG9mIGNoYW5uZWwgY2xhc3MgbGlicmFyeSBtc2dfY3RybCBvYmplY3RzIHdoaWNoCisgKiBhcmUgZXhwb3NlZCB0byBEU1AgQVBJIGZyb20gQnJpZGdlIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIE1TR09CSl8KKyNkZWZpbmUgTVNHT0JKXworCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGRlZnMuaD4KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9tc2dkZWZzLmg+CisKKy8qCisgKiAgVGhpcyBzdHJ1Y3QgaXMgdGhlIGZpcnN0IGZpZWxkIGluIGEgbXNnX21nciBzdHJ1Y3QuIE90aGVyLCBpbXBsZW1lbnRhdGlvbgorICogIHNwZWNpZmljIGZpZWxkcyBmb2xsb3cgdGhpcyBzdHJ1Y3R1cmUgaW4gbWVtb3J5LgorICovCitzdHJ1Y3QgbXNnX21ncl8geworCS8qIFRoZSBmaXJzdCBmaWVsZCBtdXN0IG1hdGNoIHRoYXQgaW4gX21zZ19zbS5oICovCisKKwkvKiBGdW5jdGlvbiBpbnRlcmZhY2UgdG8gQnJpZGdlIGRyaXZlci4gKi8KKwlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKK307CisKKyNlbmRpZiAvKiBNU0dPQkpfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9kYmRjZC5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZGJkY2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzFlODYwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZGJkY2QuYwpAQCAtMCwwICsxLDE1MTIgQEAKKy8qCisgKiBkYmRjZC5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIERTUC9CSU9TIEJyaWRnZQorICogQ29uZmlndXJhdGlvbiBEYXRhYmFzZSAoRENEKS4KKyAqCisgKiBOb3RlczoKKyAqICAgVGhlIGZ4biBkY2RfZ2V0X29iamVjdHMgY2FuIGFwcGx5IGEgY2FsbGJhY2sgZnhuIHRvIGVhY2ggRENEIG9iamVjdAorICogICB0aGF0IGlzIGxvY2F0ZWQgaW4gYSBzcGVjaWZpZWQgQ09GRiBmaWxlLiAgQXQgdGhlIG1vbWVudCwKKyAqICAgZGNkX2F1dG9fcmVnaXN0ZXIsIGRjZF9hdXRvX3VucmVnaXN0ZXIsIGFuZCBOTERSIG1vZHVsZSBhbGwgdXNlCisgKiAgIGRjZF9nZXRfb2JqZWN0cy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIb3N0IE9TICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcmFjZSAmIERlYnVnICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiYy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhdGZvcm0gTWFuYWdlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9jb2QuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE90aGVycyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS91dWlkdXRpbC5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhpcyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRjZC5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFsIGRlZmluZXMuICovCisjZGVmaW5lIE1BWF9JTlQyQ0hBUl9MRU5HVEggICAgIDE2CS8qIE1heCBpbnQyY2hhciBsZW4gb2YgMzIgYml0IGludCAqLworCisvKiBOYW1lIG9mIHNlY3Rpb24gY29udGFpbmluZyBkZXBlbmRlbnQgbGlicmFyaWVzICovCisjZGVmaW5lIERFUExJQlNFQ1QJCSIuZHNwYnJpZGdlX2RlcGxpYnMiCisKKy8qIERDRCBzcGVjaWZpYyBzdHJ1Y3R1cmVzLiAqLworc3RydWN0IGRjZF9tYW5hZ2VyIHsKKwlzdHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tZ3I7CS8qIEhhbmRsZSB0byBDT0QgbWFuYWdlciBvYmplY3QuICovCit9OworCisvKiAgUG9pbnRlciB0byB0aGUgcmVnaXN0cnkgc3VwcG9ydCBrZXkgKi8KK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIHJlZ19rZXlfbGlzdDsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZGJkY2RfbG9jayk7CisKKy8qIEdsb2JhbCByZWZlcmVuY2UgdmFyaWFibGVzLiAqLworc3RhdGljIHUzMiByZWZzOworc3RhdGljIHUzMiBlbnVtX3JlZnM7CisKKy8qIEhlbHBlciBmdW5jdGlvbiBwcm90b3R5cGVzLiAqLworc3RhdGljIHMzMiBhdG9pKGNoYXIgKnBzel9idWYpOworc3RhdGljIGludCBnZXRfYXR0cnNfZnJvbV9idWYoY2hhciAqcHN6X2J1ZiwgdTMyIHVsX2J1Zl9zaXplLAorCQkJCSAgICAgZW51bSBkc3BfZGNkb2JqdHlwZSBvYmpfdHlwZSwKKwkJCQkgICAgIHN0cnVjdCBkY2RfZ2VuZXJpY29iaiAqZ2VuX29iaik7CitzdGF0aWMgdm9pZCBjb21wcmVzc19idWYoY2hhciAqcHN6X2J1ZiwgdTMyIHVsX2J1Zl9zaXplLCBzMzIgY2hhcl9zaXplKTsKK3N0YXRpYyBjaGFyIGRzcF9jaGFyMl9ncHBfY2hhcihjaGFyICp3b3JkLCBzMzIgZHNwX2NoYXJfc2l6ZSk7CitzdGF0aWMgaW50IGdldF9kZXBfbGliX2luZm8oc3RydWN0IGRjZF9tYW5hZ2VyICpoZGNkX21nciwKKwkJCQkgICBzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqLAorCQkJCSAgIHUxNiAqbnVtX2xpYnMsCisJCQkJICAgdTE2ICpudW1fcGVyc19saWJzLAorCQkJCSAgIHN0cnVjdCBkc3BfdXVpZCAqZGVwX2xpYl91dWlkcywKKwkJCQkgICBib29sICpwcnN0bnRfZGVwX2xpYnMsCisJCQkJICAgZW51bSBubGRyX3BoYXNlIHBoYXNlKTsKKworLyoKKyAqICA9PT09PT09PSBkY2RfYXV0b19yZWdpc3RlciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFBhcnNlcyB0aGUgc3VwcGxpZWQgaW1hZ2UgYW5kIHJlc2lnc3RlcnMgd2l0aCBEQ0QuCisgKi8KK2ludCBkY2RfYXV0b19yZWdpc3RlcihzdHJ1Y3QgZGNkX21hbmFnZXIgKmhkY2RfbWdyLAorCQkJICAgICBjaGFyICpzel9jb2ZmX3BhdGgpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlpZiAoaGRjZF9tZ3IpCisJCXN0YXR1cyA9IGRjZF9nZXRfb2JqZWN0cyhoZGNkX21nciwgc3pfY29mZl9wYXRoLAorCQkJCQkgKGRjZF9yZWdpc3RlcmZ4bikgZGNkX3JlZ2lzdGVyX29iamVjdCwKKwkJCQkJICh2b2lkICopc3pfY29mZl9wYXRoKTsKKwllbHNlCisJCXN0YXR1cyA9IC1FRkFVTFQ7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRjZF9hdXRvX3VucmVnaXN0ZXIgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBQYXJzZXMgdGhlIHN1cHBsaWVkIERTUCBpbWFnZSBhbmQgdW5yZXNpdGVycyBmcm9tIERDRC4KKyAqLworaW50IGRjZF9hdXRvX3VucmVnaXN0ZXIoc3RydWN0IGRjZF9tYW5hZ2VyICpoZGNkX21nciwKKwkJCSAgICAgICBjaGFyICpzel9jb2ZmX3BhdGgpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlpZiAoaGRjZF9tZ3IpCisJCXN0YXR1cyA9IGRjZF9nZXRfb2JqZWN0cyhoZGNkX21nciwgc3pfY29mZl9wYXRoLAorCQkJCQkgKGRjZF9yZWdpc3RlcmZ4bikgZGNkX3JlZ2lzdGVyX29iamVjdCwKKwkJCQkJIE5VTEwpOworCWVsc2UKKwkJc3RhdHVzID0gLUVGQVVMVDsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGNkX2NyZWF0ZV9tYW5hZ2VyID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ3JlYXRlcyBEQ0QgbWFuYWdlci4KKyAqLworaW50IGRjZF9jcmVhdGVfbWFuYWdlcihjaGFyICpzel96bF9kbGxfbmFtZSwKKwkJCSAgICAgIHN0cnVjdCBkY2RfbWFuYWdlciAqKmRjZF9tZ3IpCit7CisJc3RydWN0IGNvZF9tYW5hZ2VyICpjb2RfbWdyOwkvKiBDT0QgbWFuYWdlciBoYW5kbGUgKi8KKwlzdHJ1Y3QgZGNkX21hbmFnZXIgKmRjZF9tZ3Jfb2JqID0gTlVMTDsJLyogRENEIE1hbmFnZXIgcG9pbnRlciAqLworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+PSAwKTsKKwlEQkNfUkVRVUlSRShkY2RfbWdyKTsKKworCXN0YXR1cyA9IGNvZF9jcmVhdGUoJmNvZF9tZ3IsIHN6X3psX2RsbF9uYW1lLCBOVUxMKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJLyogQ3JlYXRlIGEgRENEIG9iamVjdC4gKi8KKwlkY2RfbWdyX29iaiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkY2RfbWFuYWdlciksIEdGUF9LRVJORUwpOworCWlmIChkY2RfbWdyX29iaiAhPSBOVUxMKSB7CisJCS8qIEZpbGwgb3V0IHRoZSBvYmplY3QuICovCisJCWRjZF9tZ3Jfb2JqLT5jb2RfbWdyID0gY29kX21ncjsKKworCQkvKiBSZXR1cm4gaGFuZGxlIHRvIHRoaXMgRENEIGludGVyZmFjZS4gKi8KKwkJKmRjZF9tZ3IgPSBkY2RfbWdyX29iajsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCisJCS8qCisJCSAqIElmIGFsbG9jYXRpb24gb2YgRGNkTWFuYWdlciBvYmplY3QgZmFpbGVkLCBkZWxldGUgdGhlCisJCSAqIENPRCBtYW5hZ2VyLgorCQkgKi8KKwkJY29kX2RlbGV0ZShjb2RfbWdyKTsKKwl9CisKKwlEQkNfRU5TVVJFKCghc3RhdHVzKSB8fAorCQkJKChkY2RfbWdyX29iaiA9PSBOVUxMKSAmJiAoc3RhdHVzID09IC1FTk9NRU0pKSk7CisKK2Z1bmNfZW5kOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGNkX2Rlc3Ryb3lfbWFuYWdlciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEZyZWVzIERDRCBNYW5hZ2VyIG9iamVjdC4KKyAqLworaW50IGRjZF9kZXN0cm95X21hbmFnZXIoc3RydWN0IGRjZF9tYW5hZ2VyICpoZGNkX21ncikKK3sKKwlzdHJ1Y3QgZGNkX21hbmFnZXIgKmRjZF9tZ3Jfb2JqID0gaGRjZF9tZ3I7CisJaW50IHN0YXR1cyA9IC1FRkFVTFQ7CisKKwlEQkNfUkVRVUlSRShyZWZzID49IDApOworCisJaWYgKGhkY2RfbWdyKSB7CisJCS8qIERlbGV0ZSB0aGUgQ09EIG1hbmFnZXIuICovCisJCWNvZF9kZWxldGUoZGNkX21ncl9vYmotPmNvZF9tZ3IpOworCisJCS8qIERlYWxsb2NhdGUgYSBEQ0QgbWFuYWdlciBvYmplY3QuICovCisJCWtmcmVlKGRjZF9tZ3Jfb2JqKTsKKworCQlzdGF0dXMgPSAwOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGNkX2VudW1lcmF0ZV9vYmplY3QgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBFbnVtZXJhdGVzIG9iamVjdHMgaW4gdGhlIERDRC4KKyAqLworaW50IGRjZF9lbnVtZXJhdGVfb2JqZWN0KHMzMiBpbmRleCwgZW51bSBkc3BfZGNkb2JqdHlwZSBvYmpfdHlwZSwKKwkJCQlzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqKQoreworCWludCBzdGF0dXMgPSAwOworCWNoYXIgc3pfcmVnX2tleVtEQ0RfTUFYUEFUSExFTkdUSF07CisJY2hhciBzel92YWx1ZVtEQ0RfTUFYUEFUSExFTkdUSF07CisJc3RydWN0IGRzcF91dWlkIGRzcF91dWlkX29iajsKKwljaGFyIHN6X29ial90eXBlW01BWF9JTlQyQ0hBUl9MRU5HVEhdOwkvKiBzdHIuIHJlcC4gb2Ygb2JqX3R5cGUuICovCisJdTMyIGR3X2tleV9sZW4gPSAwOworCXN0cnVjdCBkY2Rfa2V5X2VsZW0gKmRjZF9rZXk7CisJaW50IGxlbjsKKworCURCQ19SRVFVSVJFKHJlZnMgPj0gMCk7CisJREJDX1JFUVVJUkUoaW5kZXggPj0gMCk7CisJREJDX1JFUVVJUkUodXVpZF9vYmogIT0gTlVMTCk7CisKKwlpZiAoKGluZGV4ICE9IDApICYmIChlbnVtX3JlZnMgPT0gMCkpIHsKKwkJLyoKKwkJICogSWYgYW4gZW51bWVyYXRpb24gaXMgYmVpbmcgcGVyZm9ybWVkIG9uIGFuIGluZGV4IGdyZWF0ZXIKKwkJICogdGhhbiB6ZXJvLCB0aGVuIHRoZSBjdXJyZW50IGVudW1fcmVmcyBtdXN0IGhhdmUgYmVlbgorCQkgKiBpbmNyZW1lbnRlZCB0byBncmVhdGVyIHRoYW4gemVyby4KKwkJICovCisJCXN0YXR1cyA9IC1FSURSTTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBQcmUtZGV0ZXJtaW5lIGZpbmFsIGtleSBsZW5ndGguIEl0J3MgbGVuZ3RoIG9mIERDRF9SRUdLRVkgKworCQkgKiAgIl9cMCIgKyBsZW5ndGggb2Ygc3pfb2JqX3R5cGUgc3RyaW5nICsgdGVybWluYXRpbmcgTlVMTC4KKwkJICovCisJCWR3X2tleV9sZW4gPSBzdHJsZW4oRENEX1JFR0tFWSkgKyAxICsgc2l6ZW9mKHN6X29ial90eXBlKSArIDE7CisJCURCQ19BU1NFUlQoZHdfa2V5X2xlbiA8IERDRF9NQVhQQVRITEVOR1RIKTsKKworCQkvKiBDcmVhdGUgcHJvcGVyIFJFRyBrZXk7IGNvbmNhdGVuYXRlIERDRF9SRUdLRVkgd2l0aAorCQkgKiBvYmpfdHlwZS4gKi8KKwkJc3RybmNweShzel9yZWdfa2V5LCBEQ0RfUkVHS0VZLCBzdHJsZW4oRENEX1JFR0tFWSkgKyAxKTsKKwkJaWYgKChzdHJsZW4oc3pfcmVnX2tleSkgKyBzdHJsZW4oIl9cMCIpKSA8CisJCSAgICBEQ0RfTUFYUEFUSExFTkdUSCkgeworCQkJc3RybmNhdChzel9yZWdfa2V5LCAiX1wwIiwgMik7CisJCX0gZWxzZSB7CisJCQlzdGF0dXMgPSAtRVBFUk07CisJCX0KKworCQkvKiBUaGlzIHNucHJpbnRmIGlzIGd1YXJhbnRlZWQgbm90IHRvIGV4Y2VlZCBtYXggc2l6ZSBvZiBhbgorCQkgKiBpbnRlZ2VyLiAqLworCQlzdGF0dXMgPSBzbnByaW50Zihzel9vYmpfdHlwZSwgTUFYX0lOVDJDSEFSX0xFTkdUSCwgIiVkIiwKKwkJCQkgIG9ial90eXBlKTsKKworCQlpZiAoc3RhdHVzID09IC0xKSB7CisJCQlzdGF0dXMgPSAtRVBFUk07CisJCX0gZWxzZSB7CisJCQlzdGF0dXMgPSAwOworCQkJaWYgKChzdHJsZW4oc3pfcmVnX2tleSkgKyBzdHJsZW4oc3pfb2JqX3R5cGUpKSA8CisJCQkgICAgRENEX01BWFBBVEhMRU5HVEgpIHsKKwkJCQlzdHJuY2F0KHN6X3JlZ19rZXksIHN6X29ial90eXBlLAorCQkJCQlzdHJsZW4oc3pfb2JqX3R5cGUpICsgMSk7CisJCQl9IGVsc2UgeworCQkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCX0KKwkJfQorCisJCWlmICghc3RhdHVzKSB7CisJCQlsZW4gPSBzdHJsZW4oc3pfcmVnX2tleSk7CisJCQlzcGluX2xvY2soJmRiZGNkX2xvY2spOworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShkY2Rfa2V5LCAmcmVnX2tleV9saXN0LCBsaW5rKSB7CisJCQkJaWYgKCFzdHJuY21wKGRjZF9rZXktPm5hbWUsIHN6X3JlZ19rZXksIGxlbikKKwkJCQkJCSYmICFpbmRleC0tKSB7CisJCQkJCXN0cm5jcHkoc3pfdmFsdWUsICZkY2Rfa2V5LT5uYW1lW2xlbl0sCisJCQkJCSAgICAgICBzdHJsZW4oJmRjZF9rZXktPm5hbWVbbGVuXSkgKyAxKTsKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCXNwaW5fdW5sb2NrKCZkYmRjZF9sb2NrKTsKKworCQkJaWYgKCZkY2Rfa2V5LT5saW5rID09ICZyZWdfa2V5X2xpc3QpCisJCQkJc3RhdHVzID0gLUVOT0RBVEE7CisJCX0KKworCQlpZiAoIXN0YXR1cykgeworCQkJLyogQ3JlYXRlIFVVSUQgdmFsdWUgdXNpbmcgc3RyaW5nIHJldHJpZXZlZCBmcm9tCisJCQkgKiByZWdpc3RyeS4gKi8KKwkJCXV1aWRfdXVpZF9mcm9tX3N0cmluZyhzel92YWx1ZSwgJmRzcF91dWlkX29iaik7CisKKwkJCSp1dWlkX29iaiA9IGRzcF91dWlkX29iajsKKworCQkJLyogSW5jcmVtZW50IGVudW1fcmVmcyB0byB1cGRhdGUgcmVmZXJlbmNlIGNvdW50LiAqLworCQkJZW51bV9yZWZzKys7CisKKwkJCXN0YXR1cyA9IDA7CisJCX0gZWxzZSBpZiAoc3RhdHVzID09IC1FTk9EQVRBKSB7CisJCQkvKiBBdCB0aGUgZW5kIG9mIGVudW1lcmF0aW9uLiBSZXNldCBlbnVtX3JlZnMuICovCisJCQllbnVtX3JlZnMgPSAwOworCisJCQkvKgorCQkJICogVE9ETzogUmV2aXNpdCwgdGhpcyBpcyBub3QgYW4gZXJycm9yIGNhc2UgYnV0IGNvZGUKKwkJCSAqIGV4cGVjdHMgbm9uLXplcm8gdmFsdWUuCisJCQkgKi8KKwkJCXN0YXR1cyA9IEVOT0RBVEE7CisJCX0gZWxzZSB7CisJCQlzdGF0dXMgPSAtRVBFUk07CisJCX0KKwl9CisKKwlEQkNfRU5TVVJFKHV1aWRfb2JqIHx8IChzdGF0dXMgPT0gLUVQRVJNKSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRjZF9leGl0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGlzY29udGludWUgdXNhZ2Ugb2YgdGhlIERDRCBtb2R1bGUuCisgKi8KK3ZvaWQgZGNkX2V4aXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGNkX2tleV9lbGVtICpydiwgKnJ2X3RtcDsKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlyZWZzLS07CisJaWYgKHJlZnMgPT0gMCkgeworCQljb2RfZXhpdCgpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnYsIHJ2X3RtcCwgJnJlZ19rZXlfbGlzdCwgbGluaykgeworCQkJbGlzdF9kZWwoJnJ2LT5saW5rKTsKKwkJCWtmcmVlKHJ2LT5wYXRoKTsKKwkJCWtmcmVlKHJ2KTsKKwkJfQorCX0KKworCURCQ19FTlNVUkUocmVmcyA+PSAwKTsKK30KKworLyoKKyAqICA9PT09PT09PSBkY2RfZ2V0X2RlcF9saWJzID09PT09PT09CisgKi8KK2ludCBkY2RfZ2V0X2RlcF9saWJzKHN0cnVjdCBkY2RfbWFuYWdlciAqaGRjZF9tZ3IsCisJCQkgICAgc3RydWN0IGRzcF91dWlkICp1dWlkX29iaiwKKwkJCSAgICB1MTYgbnVtX2xpYnMsIHN0cnVjdCBkc3BfdXVpZCAqZGVwX2xpYl91dWlkcywKKwkJCSAgICBib29sICpwcnN0bnRfZGVwX2xpYnMsCisJCQkgICAgZW51bSBubGRyX3BoYXNlIHBoYXNlKQoreworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGhkY2RfbWdyKTsKKwlEQkNfUkVRVUlSRSh1dWlkX29iaiAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShkZXBfbGliX3V1aWRzICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHByc3RudF9kZXBfbGlicyAhPSBOVUxMKTsKKworCXN0YXR1cyA9CisJICAgIGdldF9kZXBfbGliX2luZm8oaGRjZF9tZ3IsIHV1aWRfb2JqLCAmbnVtX2xpYnMsIE5VTEwsIGRlcF9saWJfdXVpZHMsCisJCQkgICAgIHByc3RudF9kZXBfbGlicywgcGhhc2UpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkY2RfZ2V0X251bV9kZXBfbGlicyA9PT09PT09PQorICovCitpbnQgZGNkX2dldF9udW1fZGVwX2xpYnMoc3RydWN0IGRjZF9tYW5hZ2VyICpoZGNkX21nciwKKwkJCQlzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqLAorCQkJCXUxNiAqbnVtX2xpYnMsIHUxNiAqbnVtX3BlcnNfbGlicywKKwkJCQllbnVtIG5sZHJfcGhhc2UgcGhhc2UpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoaGRjZF9tZ3IpOworCURCQ19SRVFVSVJFKG51bV9saWJzICE9IE5VTEwpOworCURCQ19SRVFVSVJFKG51bV9wZXJzX2xpYnMgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUodXVpZF9vYmogIT0gTlVMTCk7CisKKwlzdGF0dXMgPSBnZXRfZGVwX2xpYl9pbmZvKGhkY2RfbWdyLCB1dWlkX29iaiwgbnVtX2xpYnMsIG51bV9wZXJzX2xpYnMsCisJCQkJICBOVUxMLCBOVUxMLCBwaGFzZSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRjZF9nZXRfb2JqZWN0X2RlZiA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlcyB0aGUgcHJvcGVydGllcyBvZiBhIG5vZGUgb3IgcHJvY2Vzc29yIGJhc2VkIG9uIHRoZSBVVUlEIGFuZAorICogICAgICBvYmplY3QgdHlwZS4KKyAqLworaW50IGRjZF9nZXRfb2JqZWN0X2RlZihzdHJ1Y3QgZGNkX21hbmFnZXIgKmhkY2RfbWdyLAorCQkJICAgICAgc3RydWN0IGRzcF91dWlkICpvYmpfdXVpZCwKKwkJCSAgICAgIGVudW0gZHNwX2RjZG9ianR5cGUgb2JqX3R5cGUsCisJCQkgICAgICBzdHJ1Y3QgZGNkX2dlbmVyaWNvYmogKm9ial9kZWYpCit7CisJc3RydWN0IGRjZF9tYW5hZ2VyICpkY2RfbWdyX29iaiA9IGhkY2RfbWdyOwkvKiBwdHIgdG8gRENEIG1nciAqLworCXN0cnVjdCBjb2RfbGlicmFyeW9iaiAqbGliID0gTlVMTDsKKwlpbnQgc3RhdHVzID0gMDsKKwl1MzIgdWxfYWRkciA9IDA7CS8qIFVzZWQgYnkgY29kX2dldF9zZWN0aW9uICovCisJdTMyIHVsX2xlbiA9IDA7CQkvKiBVc2VkIGJ5IGNvZF9nZXRfc2VjdGlvbiAqLworCXUzMiBkd19idWZfc2l6ZTsJLyogVXNlZCBieSBSRUcgZnVuY3Rpb25zICovCisJY2hhciBzel9yZWdfa2V5W0RDRF9NQVhQQVRITEVOR1RIXTsKKwljaGFyICpzel91dWlkOwkJLypbTUFYVVVJRExFTl07ICovCisJc3RydWN0IGRjZF9rZXlfZWxlbSAqZGNkX2tleSA9IE5VTEw7CisJY2hhciBzel9zZWN0X25hbWVbTUFYVVVJRExFTiArIDJdOwkvKiAiLltVVUlEXVwwIiAqLworCWNoYXIgKnBzel9jb2ZmX2J1ZjsKKwl1MzIgZHdfa2V5X2xlbjsJCS8qIExlbiBvZiBSRUcga2V5LiAqLworCWNoYXIgc3pfb2JqX3R5cGVbTUFYX0lOVDJDSEFSX0xFTkdUSF07CS8qIHN0ci4gcmVwLiBvZiBvYmpfdHlwZS4gKi8KKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShvYmpfZGVmICE9IE5VTEwpOworCURCQ19SRVFVSVJFKG9ial91dWlkICE9IE5VTEwpOworCisJc3pfdXVpZCA9IGt6YWxsb2MoTUFYVVVJRExFTiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzel91dWlkKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCisJaWYgKCFoZGNkX21ncikgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCS8qIFByZS1kZXRlcm1pbmUgZmluYWwga2V5IGxlbmd0aC4gSXQncyBsZW5ndGggb2YgRENEX1JFR0tFWSArCisJICogICJfXDAiICsgbGVuZ3RoIG9mIHN6X29ial90eXBlIHN0cmluZyArIHRlcm1pbmF0aW5nIE5VTEwgKi8KKwlkd19rZXlfbGVuID0gc3RybGVuKERDRF9SRUdLRVkpICsgMSArIHNpemVvZihzel9vYmpfdHlwZSkgKyAxOworCURCQ19BU1NFUlQoZHdfa2V5X2xlbiA8IERDRF9NQVhQQVRITEVOR1RIKTsKKworCS8qIENyZWF0ZSBwcm9wZXIgUkVHIGtleTsgY29uY2F0ZW5hdGUgRENEX1JFR0tFWSB3aXRoIG9ial90eXBlLiAqLworCXN0cm5jcHkoc3pfcmVnX2tleSwgRENEX1JFR0tFWSwgc3RybGVuKERDRF9SRUdLRVkpICsgMSk7CisKKwlpZiAoKHN0cmxlbihzel9yZWdfa2V5KSArIHN0cmxlbigiX1wwIikpIDwgRENEX01BWFBBVEhMRU5HVEgpCisJCXN0cm5jYXQoc3pfcmVnX2tleSwgIl9cMCIsIDIpOworCWVsc2UKKwkJc3RhdHVzID0gLUVQRVJNOworCisJc3RhdHVzID0gc25wcmludGYoc3pfb2JqX3R5cGUsIE1BWF9JTlQyQ0hBUl9MRU5HVEgsICIlZCIsIG9ial90eXBlKTsKKwlpZiAoc3RhdHVzID09IC0xKSB7CisJCXN0YXR1cyA9IC1FUEVSTTsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSAwOworCisJCWlmICgoc3RybGVuKHN6X3JlZ19rZXkpICsgc3RybGVuKHN6X29ial90eXBlKSkgPAorCQkgICAgRENEX01BWFBBVEhMRU5HVEgpIHsKKwkJCXN0cm5jYXQoc3pfcmVnX2tleSwgc3pfb2JqX3R5cGUsCisJCQkJc3RybGVuKHN6X29ial90eXBlKSArIDEpOworCQl9IGVsc2UgeworCQkJc3RhdHVzID0gLUVQRVJNOworCQl9CisKKwkJLyogQ3JlYXRlIFVVSUQgdmFsdWUgdG8gc2V0IGluIHJlZ2lzdHJ5LiAqLworCQl1dWlkX3V1aWRfdG9fc3RyaW5nKG9ial91dWlkLCBzel91dWlkLCBNQVhVVUlETEVOKTsKKworCQlpZiAoKHN0cmxlbihzel9yZWdfa2V5KSArIE1BWFVVSURMRU4pIDwgRENEX01BWFBBVEhMRU5HVEgpCisJCQlzdHJuY2F0KHN6X3JlZ19rZXksIHN6X3V1aWQsIE1BWFVVSURMRU4pOworCQllbHNlCisJCQlzdGF0dXMgPSAtRVBFUk07CisKKwkJLyogUmV0cmlldmUgcGF0aHMgZnJvbSB0aGUgcmVnaXN0cnkgYmFzZWQgb24gc3RydWN0IGRzcF91dWlkICovCisJCWR3X2J1Zl9zaXplID0gRENEX01BWFBBVEhMRU5HVEg7CisJfQorCWlmICghc3RhdHVzKSB7CisJCXNwaW5fbG9jaygmZGJkY2RfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZGNkX2tleSwgJnJlZ19rZXlfbGlzdCwgbGluaykgeworCQkJaWYgKCFzdHJuY21wKGRjZF9rZXktPm5hbWUsIHN6X3JlZ19rZXksCisJCQkJCQlzdHJsZW4oc3pfcmVnX2tleSkgKyAxKSkKKwkJCQlicmVhazsKKwkJfQorCQlzcGluX3VubG9jaygmZGJkY2RfbG9jayk7CisJCWlmICgmZGNkX2tleS0+bGluayA9PSAmcmVnX2tleV9saXN0KSB7CisJCQlzdGF0dXMgPSAtRU5PS0VZOworCQkJZ290byBmdW5jX2VuZDsKKwkJfQorCX0KKworCisJLyogT3BlbiBDT0ZGIGZpbGUuICovCisJc3RhdHVzID0gY29kX29wZW4oZGNkX21ncl9vYmotPmNvZF9tZ3IsIGRjZF9rZXktPnBhdGgsCisJCQkJCQkJQ09EX05PTE9BRCwgJmxpYik7CisJaWYgKHN0YXR1cykgeworCQlzdGF0dXMgPSAtRUFDQ0VTOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCS8qIEVuc3VyZSBzel91dWlkICsgMSBpcyBub3QgZ3JlYXRlciB0aGFuIHNpemVvZiBzel9zZWN0X25hbWUuICovCisJREJDX0FTU0VSVCgoc3RybGVuKHN6X3V1aWQpICsgMSkgPCBzaXplb2Yoc3pfc2VjdF9uYW1lKSk7CisKKwkvKiBDcmVhdGUgc2VjdGlvbiBuYW1lIGJhc2VkIG9uIG5vZGUgVVVJRC4gQSBwZXJpb2QgaXMKKwkgKiBwcmUtcGVuZGVkIHRvIHRoZSBVVUlEIHN0cmluZyB0byBmb3JtIHRoZSBzZWN0aW9uIG5hbWUuCisJICogSS5lLiAiLjI0QkM4RDkwX0JCNDVfMTFkNF9CNzU2XzAwNjAwOEJEQjY2RiIgKi8KKwlzdHJuY3B5KHN6X3NlY3RfbmFtZSwgIi4iLCAyKTsKKwlzdHJuY2F0KHN6X3NlY3RfbmFtZSwgc3pfdXVpZCwgc3RybGVuKHN6X3V1aWQpKTsKKworCS8qIEdldCBzZWN0aW9uIGluZm9ybWF0aW9uLiAqLworCXN0YXR1cyA9IGNvZF9nZXRfc2VjdGlvbihsaWIsIHN6X3NlY3RfbmFtZSwgJnVsX2FkZHIsICZ1bF9sZW4pOworCWlmIChzdGF0dXMpIHsKKwkJc3RhdHVzID0gLUVBQ0NFUzsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwkvKiBBbGxvY2F0ZSB6ZXJvZWQgYnVmZmVyLiAqLworCXBzel9jb2ZmX2J1ZiA9IGt6YWxsb2ModWxfbGVuICsgNCwgR0ZQX0tFUk5FTCk7CisjaWZkZWYgX0RCX1RJT01BUAorCWlmIChzdHJzdHIoZGNkX2tleS0+cGF0aCwgIml2YSIpID09IE5VTEwpIHsKKwkJLyogTG9jYXRlIHNlY3Rpb24gYnkgb2JqZWN0SUQgYW5kIHJlYWQgaXRzIGNvbnRlbnQuICovCisJCXN0YXR1cyA9CisJCSAgICBjb2RfcmVhZF9zZWN0aW9uKGxpYiwgc3pfc2VjdF9uYW1lLCBwc3pfY29mZl9idWYsIHVsX2xlbik7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0KKwkJICAgIGNvZF9yZWFkX3NlY3Rpb24obGliLCBzel9zZWN0X25hbWUsIHBzel9jb2ZmX2J1ZiwgdWxfbGVuKTsKKwkJZGV2X2RiZyhicmlkZ2UsICIlczogU2tpcHBlZCBCeXRlIHN3YXAgZm9yIElWQSEhXG4iLCBfX2Z1bmNfXyk7CisJfQorI2Vsc2UKKwlzdGF0dXMgPSBjb2RfcmVhZF9zZWN0aW9uKGxpYiwgc3pfc2VjdF9uYW1lLCBwc3pfY29mZl9idWYsIHVsX2xlbik7CisjZW5kaWYKKwlpZiAoIXN0YXR1cykgeworCQkvKiBDb21wcmVzIERTUCBidWZmZXIgdG8gY29uZm9ybSB0byBQQyBmb3JtYXQuICovCisJCWlmIChzdHJzdHIoZGNkX2tleS0+cGF0aCwgIml2YSIpID09IE5VTEwpIHsKKwkJCWNvbXByZXNzX2J1Zihwc3pfY29mZl9idWYsIHVsX2xlbiwgRFNQV09SRFNJWkUpOworCQl9IGVsc2UgeworCQkJY29tcHJlc3NfYnVmKHBzel9jb2ZmX2J1ZiwgdWxfbGVuLCAxKTsKKwkJCWRldl9kYmcoYnJpZGdlLCAiJXM6IENvbXByZXNzaW5nIElWQSBDT0ZGIGJ1ZmZlciBieSAxICIKKwkJCQkiZm9yIElWQSEhXG4iLCBfX2Z1bmNfXyk7CisJCX0KKworCQkvKiBQYXJzZSB0aGUgY29udGVudCBvZiB0aGUgQ09GRiBidWZmZXIuICovCisJCXN0YXR1cyA9CisJCSAgICBnZXRfYXR0cnNfZnJvbV9idWYocHN6X2NvZmZfYnVmLCB1bF9sZW4sIG9ial90eXBlLCBvYmpfZGVmKTsKKwkJaWYgKHN0YXR1cykKKwkJCXN0YXR1cyA9IC1FQUNDRVM7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVBQ0NFUzsKKwl9CisKKwkvKiBGcmVlIHRoZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBkeW5hbWljIGJ1ZmZlci4gKi8KKwlrZnJlZShwc3pfY29mZl9idWYpOworZnVuY19lbmQ6CisJaWYgKGxpYikKKwkJY29kX2Nsb3NlKGxpYik7CisKKwlrZnJlZShzel91dWlkKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGNkX2dldF9vYmplY3RzID09PT09PT09CisgKi8KK2ludCBkY2RfZ2V0X29iamVjdHMoc3RydWN0IGRjZF9tYW5hZ2VyICpoZGNkX21nciwKKwkJCSAgIGNoYXIgKnN6X2NvZmZfcGF0aCwgZGNkX3JlZ2lzdGVyZnhuIHJlZ2lzdGVyX2Z4biwKKwkJCSAgIHZvaWQgKmhhbmRsZSkKK3sKKwlzdHJ1Y3QgZGNkX21hbmFnZXIgKmRjZF9tZ3Jfb2JqID0gaGRjZF9tZ3I7CisJaW50IHN0YXR1cyA9IDA7CisJY2hhciAqcHN6X2NvZmZfYnVmOworCWNoYXIgKnBzel9jdXI7CisJc3RydWN0IGNvZF9saWJyYXJ5b2JqICpsaWIgPSBOVUxMOworCXUzMiB1bF9hZGRyID0gMDsJLyogVXNlZCBieSBjb2RfZ2V0X3NlY3Rpb24gKi8KKwl1MzIgdWxfbGVuID0gMDsJCS8qIFVzZWQgYnkgY29kX2dldF9zZWN0aW9uICovCisJY2hhciBzZXBzW10gPSAiOiwgIjsKKwljaGFyICp0b2tlbiA9IE5VTEw7CisJc3RydWN0IGRzcF91dWlkIGRzcF91dWlkX29iajsKKwlzMzIgb2JqZWN0X3R5cGU7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJaWYgKCFoZGNkX21ncikgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCS8qIE9wZW4gRFNQIGNvZmYgZmlsZSwgZG9uJ3QgbG9hZCBzeW1ib2xzLiAqLworCXN0YXR1cyA9IGNvZF9vcGVuKGRjZF9tZ3Jfb2JqLT5jb2RfbWdyLCBzel9jb2ZmX3BhdGgsIENPRF9OT0xPQUQsICZsaWIpOworCWlmIChzdGF0dXMpIHsKKwkJc3RhdHVzID0gLUVBQ0NFUzsKKwkJZ290byBmdW5jX2NvbnQ7CisJfQorCisJLyogR2V0IERDRF9SRVNJR0VSX1NFQ1RJT04gc2VjdGlvbiBpbmZvcm1hdGlvbi4gKi8KKwlzdGF0dXMgPSBjb2RfZ2V0X3NlY3Rpb24obGliLCBEQ0RfUkVHSVNURVJfU0VDVElPTiwgJnVsX2FkZHIsICZ1bF9sZW4pOworCWlmIChzdGF0dXMgfHwgISh1bF9sZW4gPiAwKSkgeworCQlzdGF0dXMgPSAtRUFDQ0VTOworCQlnb3RvIGZ1bmNfY29udDsKKwl9CisKKwkvKiBBbGxvY2F0ZSB6ZXJvZWQgYnVmZmVyLiAqLworCXBzel9jb2ZmX2J1ZiA9IGt6YWxsb2ModWxfbGVuICsgNCwgR0ZQX0tFUk5FTCk7CisjaWZkZWYgX0RCX1RJT01BUAorCWlmIChzdHJzdHIoc3pfY29mZl9wYXRoLCAiaXZhIikgPT0gTlVMTCkgeworCQkvKiBMb2NhdGUgc2VjdGlvbiBieSBvYmplY3RJRCBhbmQgcmVhZCBpdHMgY29udGVudC4gKi8KKwkJc3RhdHVzID0gY29kX3JlYWRfc2VjdGlvbihsaWIsIERDRF9SRUdJU1RFUl9TRUNUSU9OLAorCQkJCQkgIHBzel9jb2ZmX2J1ZiwgdWxfbGVuKTsKKwl9IGVsc2UgeworCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBTa2lwcGVkIEJ5dGUgc3dhcCBmb3IgSVZBISFcbiIsIF9fZnVuY19fKTsKKwkJc3RhdHVzID0gY29kX3JlYWRfc2VjdGlvbihsaWIsIERDRF9SRUdJU1RFUl9TRUNUSU9OLAorCQkJCQkgIHBzel9jb2ZmX2J1ZiwgdWxfbGVuKTsKKwl9CisjZWxzZQorCXN0YXR1cyA9CisJICAgIGNvZF9yZWFkX3NlY3Rpb24obGliLCBEQ0RfUkVHSVNURVJfU0VDVElPTiwgcHN6X2NvZmZfYnVmLCB1bF9sZW4pOworI2VuZGlmCisJaWYgKCFzdGF0dXMpIHsKKwkJLyogQ29tcHJlc3MgRFNQIGJ1ZmZlciB0byBjb25mb3JtIHRvIFBDIGZvcm1hdC4gKi8KKwkJaWYgKHN0cnN0cihzel9jb2ZmX3BhdGgsICJpdmEiKSA9PSBOVUxMKSB7CisJCQljb21wcmVzc19idWYocHN6X2NvZmZfYnVmLCB1bF9sZW4sIERTUFdPUkRTSVpFKTsKKwkJfSBlbHNlIHsKKwkJCWNvbXByZXNzX2J1Zihwc3pfY29mZl9idWYsIHVsX2xlbiwgMSk7CisJCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBDb21wcmVzcyBDT0ZGIGJ1ZmZlciB3aXRoIDEgd29yZCAiCisJCQkJImZvciBJVkEhIVxuIiwgX19mdW5jX18pOworCQl9CisKKwkJLyogUmVhZCBmcm9tIGJ1ZmZlciBhbmQgcmVnaXN0ZXIgb2JqZWN0IGluIGJ1ZmZlci4gKi8KKwkJcHN6X2N1ciA9IHBzel9jb2ZmX2J1ZjsKKwkJd2hpbGUgKCh0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2VwcykpICYmICp0b2tlbiAhPSAnXDAnKSB7CisJCQkvKiAgUmV0cmlldmUgVVVJRCBzdHJpbmcuICovCisJCQl1dWlkX3V1aWRfZnJvbV9zdHJpbmcodG9rZW4sICZkc3BfdXVpZF9vYmopOworCisJCQkvKiAgUmV0cmlldmUgb2JqZWN0IHR5cGUgKi8KKwkJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKworCQkJLyogIFJldHJpZXZlIG9iamVjdCB0eXBlICovCisJCQlvYmplY3RfdHlwZSA9IGF0b2kodG9rZW4pOworCisJCQkvKgorCQkJICogIEFwcGx5IHJlZ2lzdGVyX2Z4biB0byB0aGUgZm91bmQgRENEIG9iamVjdC4KKwkJCSAqICBQb3NzaWJsZSBhY3Rpb25zIGluY2x1ZGU6CisJCQkgKgorCQkJICogIDEpIFJlZ2lzdGVyIGZvdW5kIERDRCBvYmplY3QuCisJCQkgKiAgMikgVW5yZWdpc3RlciBmb3VuZCBEQ0Qgb2JqZWN0ICh3aGVuIGhhbmRsZSA9PSBOVUxMKQorCQkJICogIDMpIEFkZCBvdmVybGF5IG5vZGUuCisJCQkgKi8KKwkJCXN0YXR1cyA9CisJCQkgICAgcmVnaXN0ZXJfZnhuKCZkc3BfdXVpZF9vYmosIG9iamVjdF90eXBlLCBoYW5kbGUpOworCQkJaWYgKHN0YXR1cykgeworCQkJCS8qIGlmIGVycm9yIG9jY3VycywgYnJlYWsgZnJvbSB3aGlsZSBsb29wLiAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVBQ0NFUzsKKwl9CisKKwkvKiBGcmVlIHRoZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBkeW5hbWljIGJ1ZmZlci4gKi8KKwlrZnJlZShwc3pfY29mZl9idWYpOworZnVuY19jb250OgorCWlmIChsaWIpCisJCWNvZF9jbG9zZShsaWIpOworCitmdW5jX2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRjZF9nZXRfbGlicmFyeV9uYW1lID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmVzIHRoZSBsaWJyYXJ5IG5hbWUgZm9yIHRoZSBnaXZlbiBVVUlELgorICoKKyAqLworaW50IGRjZF9nZXRfbGlicmFyeV9uYW1lKHN0cnVjdCBkY2RfbWFuYWdlciAqaGRjZF9tZ3IsCisJCQkJc3RydWN0IGRzcF91dWlkICp1dWlkX29iaiwKKwkJCQljaGFyICpzdHJfbGliX25hbWUsCisJCQkJdTMyICpidWZmX3NpemUsCisJCQkJZW51bSBubGRyX3BoYXNlIHBoYXNlLCBib29sICpwaGFzZV9zcGxpdCkKK3sKKwljaGFyIHN6X3JlZ19rZXlbRENEX01BWFBBVEhMRU5HVEhdOworCWNoYXIgc3pfdXVpZFtNQVhVVUlETEVOXTsKKwl1MzIgZHdfa2V5X2xlbjsJCS8qIExlbiBvZiBSRUcga2V5LiAqLworCWNoYXIgc3pfb2JqX3R5cGVbTUFYX0lOVDJDSEFSX0xFTkdUSF07CS8qIHN0ci4gcmVwLiBvZiBvYmpfdHlwZS4gKi8KKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZGNkX2tleV9lbGVtICpkY2Rfa2V5ID0gTlVMTDsKKworCURCQ19SRVFVSVJFKHV1aWRfb2JqICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHN0cl9saWJfbmFtZSAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShidWZmX3NpemUgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoaGRjZF9tZ3IpOworCisJZGV2X2RiZyhicmlkZ2UsICIlczogaGRjZF9tZ3IgJXAsIHV1aWRfb2JqICVwLCBzdHJfbGliX25hbWUgJXAsIgorCQkiIGJ1ZmZfc2l6ZSAlcFxuIiwgX19mdW5jX18sIGhkY2RfbWdyLCB1dWlkX29iaiwgc3RyX2xpYl9uYW1lLAorCQlidWZmX3NpemUpOworCisJLyoKKwkgKiAgUHJlLWRldGVybWluZSBmaW5hbCBrZXkgbGVuZ3RoLiBJdCdzIGxlbmd0aCBvZiBEQ0RfUkVHS0VZICsKKwkgKiAgIl9cMCIgKyBsZW5ndGggb2Ygc3pfb2JqX3R5cGUgc3RyaW5nICsgdGVybWluYXRpbmcgTlVMTC4KKwkgKi8KKwlkd19rZXlfbGVuID0gc3RybGVuKERDRF9SRUdLRVkpICsgMSArIHNpemVvZihzel9vYmpfdHlwZSkgKyAxOworCURCQ19BU1NFUlQoZHdfa2V5X2xlbiA8IERDRF9NQVhQQVRITEVOR1RIKTsKKworCS8qIENyZWF0ZSBwcm9wZXIgUkVHIGtleTsgY29uY2F0ZW5hdGUgRENEX1JFR0tFWSB3aXRoIG9ial90eXBlLiAqLworCXN0cm5jcHkoc3pfcmVnX2tleSwgRENEX1JFR0tFWSwgc3RybGVuKERDRF9SRUdLRVkpICsgMSk7CisJaWYgKChzdHJsZW4oc3pfcmVnX2tleSkgKyBzdHJsZW4oIl9cMCIpKSA8IERDRF9NQVhQQVRITEVOR1RIKQorCQlzdHJuY2F0KHN6X3JlZ19rZXksICJfXDAiLCAyKTsKKwllbHNlCisJCXN0YXR1cyA9IC1FUEVSTTsKKworCXN3aXRjaCAocGhhc2UpIHsKKwljYXNlIE5MRFJfQ1JFQVRFOgorCQkvKiBjcmVhdGUgcGhhc2UgdHlwZSAqLworCQlzcHJpbnRmKHN6X29ial90eXBlLCAiJWQiLCBEU1BfRENEQ1JFQVRFTElCVFlQRSk7CisJCWJyZWFrOworCWNhc2UgTkxEUl9FWEVDVVRFOgorCQkvKiBleGVjdXRlIHBoYXNlIHR5cGUgKi8KKwkJc3ByaW50Zihzel9vYmpfdHlwZSwgIiVkIiwgRFNQX0RDREVYRUNVVEVMSUJUWVBFKTsKKwkJYnJlYWs7CisJY2FzZSBOTERSX0RFTEVURToKKwkJLyogZGVsZXRlIHBoYXNlIHR5cGUgKi8KKwkJc3ByaW50Zihzel9vYmpfdHlwZSwgIiVkIiwgRFNQX0RDRERFTEVURUxJQlRZUEUpOworCQlicmVhazsKKwljYXNlIE5MRFJfTk9QSEFTRToKKwkJLyoga25vd24gdG8gYmUgYSBkZXBlbmRlbnQgbGlicmFyeSAqLworCQlzcHJpbnRmKHN6X29ial90eXBlLCAiJWQiLCBEU1BfRENETElCUkFSWVRZUEUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzdGF0dXMgPSAtRUlOVkFMOworCQlEQkNfQVNTRVJUKGZhbHNlKTsKKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJaWYgKChzdHJsZW4oc3pfcmVnX2tleSkgKyBzdHJsZW4oc3pfb2JqX3R5cGUpKSA8CisJCSAgICBEQ0RfTUFYUEFUSExFTkdUSCkgeworCQkJc3RybmNhdChzel9yZWdfa2V5LCBzel9vYmpfdHlwZSwKKwkJCQlzdHJsZW4oc3pfb2JqX3R5cGUpICsgMSk7CisJCX0gZWxzZSB7CisJCQlzdGF0dXMgPSAtRVBFUk07CisJCX0KKwkJLyogQ3JlYXRlIFVVSUQgdmFsdWUgdG8gZmluZCBtYXRjaCBpbiByZWdpc3RyeS4gKi8KKwkJdXVpZF91dWlkX3RvX3N0cmluZyh1dWlkX29iaiwgc3pfdXVpZCwgTUFYVVVJRExFTik7CisJCWlmICgoc3RybGVuKHN6X3JlZ19rZXkpICsgTUFYVVVJRExFTikgPCBEQ0RfTUFYUEFUSExFTkdUSCkKKwkJCXN0cm5jYXQoc3pfcmVnX2tleSwgc3pfdXVpZCwgTUFYVVVJRExFTik7CisJCWVsc2UKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJc3Bpbl9sb2NrKCZkYmRjZF9sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShkY2Rfa2V5LCAmcmVnX2tleV9saXN0LCBsaW5rKSB7CisJCQkvKiAgU2VlIGlmIHRoZSBuYW1lIG1hdGNoZXMuICovCisJCQlpZiAoIXN0cm5jbXAoZGNkX2tleS0+bmFtZSwgc3pfcmVnX2tleSwKKwkJCQkJCXN0cmxlbihzel9yZWdfa2V5KSArIDEpKQorCQkJCWJyZWFrOworCQl9CisJCXNwaW5fdW5sb2NrKCZkYmRjZF9sb2NrKTsKKwl9CisKKwlpZiAoJmRjZF9rZXktPmxpbmsgPT0gJnJlZ19rZXlfbGlzdCkKKwkJc3RhdHVzID0gLUVOT0tFWTsKKworCS8qIElmIGNhbid0IGZpbmQsIHBoYXNlcyBtaWdodCBiZSByZWdpc3RlcmVkIGFzIGdlbmVyaWMgTElCUkFSWVRZUEUgKi8KKwlpZiAoc3RhdHVzICYmIHBoYXNlICE9IE5MRFJfTk9QSEFTRSkgeworCQlpZiAocGhhc2Vfc3BsaXQpCisJCQkqcGhhc2Vfc3BsaXQgPSBmYWxzZTsKKworCQlzdHJuY3B5KHN6X3JlZ19rZXksIERDRF9SRUdLRVksIHN0cmxlbihEQ0RfUkVHS0VZKSArIDEpOworCQlpZiAoKHN0cmxlbihzel9yZWdfa2V5KSArIHN0cmxlbigiX1wwIikpIDwKKwkJICAgIERDRF9NQVhQQVRITEVOR1RIKSB7CisJCQlzdHJuY2F0KHN6X3JlZ19rZXksICJfXDAiLCAyKTsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJfQorCQlzcHJpbnRmKHN6X29ial90eXBlLCAiJWQiLCBEU1BfRENETElCUkFSWVRZUEUpOworCQlpZiAoKHN0cmxlbihzel9yZWdfa2V5KSArIHN0cmxlbihzel9vYmpfdHlwZSkpCisJCSAgICA8IERDRF9NQVhQQVRITEVOR1RIKSB7CisJCQlzdHJuY2F0KHN6X3JlZ19rZXksIHN6X29ial90eXBlLAorCQkJCXN0cmxlbihzel9vYmpfdHlwZSkgKyAxKTsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJfQorCQl1dWlkX3V1aWRfdG9fc3RyaW5nKHV1aWRfb2JqLCBzel91dWlkLCBNQVhVVUlETEVOKTsKKwkJaWYgKChzdHJsZW4oc3pfcmVnX2tleSkgKyBNQVhVVUlETEVOKSA8IERDRF9NQVhQQVRITEVOR1RIKQorCQkJc3RybmNhdChzel9yZWdfa2V5LCBzel91dWlkLCBNQVhVVUlETEVOKTsKKwkJZWxzZQorCQkJc3RhdHVzID0gLUVQRVJNOworCisJCXNwaW5fbG9jaygmZGJkY2RfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZGNkX2tleSwgJnJlZ19rZXlfbGlzdCwgbGluaykgeworCQkJLyogIFNlZSBpZiB0aGUgbmFtZSBtYXRjaGVzLiAqLworCQkJaWYgKCFzdHJuY21wKGRjZF9rZXktPm5hbWUsIHN6X3JlZ19rZXksCisJCQkJCQlzdHJsZW4oc3pfcmVnX2tleSkgKyAxKSkKKwkJCQlicmVhazsKKwkJfQorCQlzcGluX3VubG9jaygmZGJkY2RfbG9jayk7CisKKwkJc3RhdHVzID0gKCZkY2Rfa2V5LT5saW5rICE9ICZyZWdfa2V5X2xpc3QpID8KKwkJCQkJCTAgOiAtRU5PS0VZOworCX0KKworCWlmICghc3RhdHVzKQorCQltZW1jcHkoc3RyX2xpYl9uYW1lLCBkY2Rfa2V5LT5wYXRoLCBzdHJsZW4oZGNkX2tleS0+cGF0aCkgKyAxKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRjZF9pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZSB0aGUgRENEIG1vZHVsZS4KKyAqLworYm9vbCBkY2RfaW5pdCh2b2lkKQoreworCWJvb2wgaW5pdF9jb2Q7CisJYm9vbCByZXQgPSB0cnVlOworCisJREJDX1JFUVVJUkUocmVmcyA+PSAwKTsKKworCWlmIChyZWZzID09IDApIHsKKwkJLyogSW5pdGlhbGl6ZSByZXF1aXJlZCBtb2R1bGVzLiAqLworCQlpbml0X2NvZCA9IGNvZF9pbml0KCk7CisKKwkJaWYgKCFpbml0X2NvZCkgeworCQkJcmV0ID0gZmFsc2U7CisJCQkvKiBFeGl0IGluaXRpYWxpemVkIG1vZHVsZXMuICovCisJCQlpZiAoaW5pdF9jb2QpCisJCQkJY29kX2V4aXQoKTsKKwkJfQorCisJCUlOSVRfTElTVF9IRUFEKCZyZWdfa2V5X2xpc3QpOworCX0KKworCWlmIChyZXQpCisJCXJlZnMrKzsKKworCURCQ19FTlNVUkUoKHJldCAmJiAocmVmcyA+IDApKSB8fCAoIXJldCAmJiAocmVmcyA9PSAwKSkpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqICA9PT09PT09PSBkY2RfcmVnaXN0ZXJfb2JqZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmVnaXN0ZXJzIGEgbm9kZSBvciBhIHByb2Nlc3NvciB3aXRoIHRoZSBEQ0QuCisgKiAgICAgIElmIHBzel9wYXRoX25hbWUgPT0gTlVMTCwgdW5yZWdpc3RlciB0aGUgc3BlY2lmaWVkIERDRCBvYmplY3QuCisgKi8KK2ludCBkY2RfcmVnaXN0ZXJfb2JqZWN0KHN0cnVjdCBkc3BfdXVpZCAqdXVpZF9vYmosCisJCQkgICAgICAgZW51bSBkc3BfZGNkb2JqdHlwZSBvYmpfdHlwZSwKKwkJCSAgICAgICBjaGFyICpwc3pfcGF0aF9uYW1lKQoreworCWludCBzdGF0dXMgPSAwOworCWNoYXIgc3pfcmVnX2tleVtEQ0RfTUFYUEFUSExFTkdUSF07CisJY2hhciBzel91dWlkW01BWFVVSURMRU4gKyAxXTsKKwl1MzIgZHdfcGF0aF9zaXplID0gMDsKKwl1MzIgZHdfa2V5X2xlbjsJCS8qIExlbiBvZiBSRUcga2V5LiAqLworCWNoYXIgc3pfb2JqX3R5cGVbTUFYX0lOVDJDSEFSX0xFTkdUSF07CS8qIHN0ci4gcmVwLiBvZiBvYmpfdHlwZS4gKi8KKwlzdHJ1Y3QgZGNkX2tleV9lbGVtICpkY2Rfa2V5ID0gTlVMTDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRSh1dWlkX29iaiAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRSgob2JqX3R5cGUgPT0gRFNQX0RDRE5PREVUWVBFKSB8fAorCQkgICAgKG9ial90eXBlID09IERTUF9EQ0RQUk9DRVNTT1JUWVBFKSB8fAorCQkgICAgKG9ial90eXBlID09IERTUF9EQ0RMSUJSQVJZVFlQRSkgfHwKKwkJICAgIChvYmpfdHlwZSA9PSBEU1BfRENEQ1JFQVRFTElCVFlQRSkgfHwKKwkJICAgIChvYmpfdHlwZSA9PSBEU1BfRENERVhFQ1VURUxJQlRZUEUpIHx8CisJCSAgICAob2JqX3R5cGUgPT0gRFNQX0RDRERFTEVURUxJQlRZUEUpKTsKKworCWRldl9kYmcoYnJpZGdlLCAiJXM6IG9iamVjdCBVVUlEICVwLCBvYmpfdHlwZSAlZCwgc3pQYXRoTmFtZSAlc1xuIiwKKwkJX19mdW5jX18sIHV1aWRfb2JqLCBvYmpfdHlwZSwgcHN6X3BhdGhfbmFtZSk7CisKKwkvKgorCSAqIFByZS1kZXRlcm1pbmUgZmluYWwga2V5IGxlbmd0aC4gSXQncyBsZW5ndGggb2YgRENEX1JFR0tFWSArCisJICogICJfXDAiICsgbGVuZ3RoIG9mIHN6X29ial90eXBlIHN0cmluZyArIHRlcm1pbmF0aW5nIE5VTEwuCisJICovCisJZHdfa2V5X2xlbiA9IHN0cmxlbihEQ0RfUkVHS0VZKSArIDEgKyBzaXplb2Yoc3pfb2JqX3R5cGUpICsgMTsKKwlEQkNfQVNTRVJUKGR3X2tleV9sZW4gPCBEQ0RfTUFYUEFUSExFTkdUSCk7CisKKwkvKiBDcmVhdGUgcHJvcGVyIFJFRyBrZXk7IGNvbmNhdGVuYXRlIERDRF9SRUdLRVkgd2l0aCBvYmpfdHlwZS4gKi8KKwlzdHJuY3B5KHN6X3JlZ19rZXksIERDRF9SRUdLRVksIHN0cmxlbihEQ0RfUkVHS0VZKSArIDEpOworCWlmICgoc3RybGVuKHN6X3JlZ19rZXkpICsgc3RybGVuKCJfXDAiKSkgPCBEQ0RfTUFYUEFUSExFTkdUSCkKKwkJc3RybmNhdChzel9yZWdfa2V5LCAiX1wwIiwgMik7CisJZWxzZSB7CisJCXN0YXR1cyA9IC1FUEVSTTsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwlzdGF0dXMgPSBzbnByaW50Zihzel9vYmpfdHlwZSwgTUFYX0lOVDJDSEFSX0xFTkdUSCwgIiVkIiwgb2JqX3R5cGUpOworCWlmIChzdGF0dXMgPT0gLTEpIHsKKwkJc3RhdHVzID0gLUVQRVJNOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IDA7CisJCWlmICgoc3RybGVuKHN6X3JlZ19rZXkpICsgc3RybGVuKHN6X29ial90eXBlKSkgPAorCQkgICAgRENEX01BWFBBVEhMRU5HVEgpIHsKKwkJCXN0cm5jYXQoc3pfcmVnX2tleSwgc3pfb2JqX3R5cGUsCisJCQkJc3RybGVuKHN6X29ial90eXBlKSArIDEpOworCQl9IGVsc2UKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKworCQkvKiBDcmVhdGUgVVVJRCB2YWx1ZSB0byBzZXQgaW4gcmVnaXN0cnkuICovCisJCXV1aWRfdXVpZF90b19zdHJpbmcodXVpZF9vYmosIHN6X3V1aWQsIE1BWFVVSURMRU4pOworCQlpZiAoKHN0cmxlbihzel9yZWdfa2V5KSArIE1BWFVVSURMRU4pIDwgRENEX01BWFBBVEhMRU5HVEgpCisJCQlzdHJuY2F0KHN6X3JlZ19rZXksIHN6X3V1aWQsIE1BWFVVSURMRU4pOworCQllbHNlCisJCQlzdGF0dXMgPSAtRVBFUk07CisJfQorCisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2VuZDsKKworCS8qCisJICogSWYgcHN6X3BhdGhfbmFtZSAhPSBOVUxMLCBwZXJmb3JtIHJlZ2lzdHJhdGlvbiwgb3RoZXJ3aXNlLAorCSAqIHBlcmZvcm0gdW5yZWdpc3RyYXRpb24uCisJICovCisKKwlpZiAocHN6X3BhdGhfbmFtZSkgeworCQlkd19wYXRoX3NpemUgPSBzdHJsZW4ocHN6X3BhdGhfbmFtZSkgKyAxOworCQlzcGluX2xvY2soJmRiZGNkX2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRjZF9rZXksICZyZWdfa2V5X2xpc3QsIGxpbmspIHsKKwkJCS8qICBTZWUgaWYgdGhlIG5hbWUgbWF0Y2hlcy4gKi8KKwkJCWlmICghc3RybmNtcChkY2Rfa2V5LT5uYW1lLCBzel9yZWdfa2V5LAorCQkJCQkJc3RybGVuKHN6X3JlZ19rZXkpICsgMSkpCisJCQkJYnJlYWs7CisJCX0KKwkJc3Bpbl91bmxvY2soJmRiZGNkX2xvY2spOworCQlpZiAoJmRjZF9rZXktPmxpbmsgPT0gJnJlZ19rZXlfbGlzdCkgeworCQkJLyoKKwkJCSAqIEFkZCBuZXcgcmVnIHZhbHVlIChVVUlEK29ial90eXBlKQorCQkJICogd2l0aCBDT0ZGIHBhdGggaW5mbworCQkJICovCisKKwkJCWRjZF9rZXkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGNkX2tleV9lbGVtKSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWRjZF9rZXkpIHsKKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJCWdvdG8gZnVuY19lbmQ7CisJCQl9CisKKwkJCWRjZF9rZXktPnBhdGggPSBrbWFsbG9jKHN0cmxlbihzel9yZWdfa2V5KSArIDEsCisJCQkJCQkJCUdGUF9LRVJORUwpOworCisJCQlpZiAoIWRjZF9rZXktPnBhdGgpIHsKKwkJCQlrZnJlZShkY2Rfa2V5KTsKKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJCWdvdG8gZnVuY19lbmQ7CisJCQl9CisKKwkJCXN0cm5jcHkoZGNkX2tleS0+bmFtZSwgc3pfcmVnX2tleSwKKwkJCQkJCXN0cmxlbihzel9yZWdfa2V5KSArIDEpOworCQkJc3RybmNweShkY2Rfa2V5LT5wYXRoLCBwc3pfcGF0aF9uYW1lICwKKwkJCQkJCWR3X3BhdGhfc2l6ZSk7CisJCQlzcGluX2xvY2soJmRiZGNkX2xvY2spOworCQkJbGlzdF9hZGRfdGFpbCgmZGNkX2tleS0+bGluaywgJnJlZ19rZXlfbGlzdCk7CisJCQlzcGluX3VubG9jaygmZGJkY2RfbG9jayk7CisJCX0gZWxzZSB7CisJCQkvKiAgTWFrZSBzdXJlIHRoZSBuZXcgZGF0YSBpcyB0aGUgc2FtZS4gKi8KKwkJCWlmIChzdHJuY21wKGRjZF9rZXktPnBhdGgsIHBzel9wYXRoX25hbWUsCisJCQkJCQkJZHdfcGF0aF9zaXplKSkgeworCQkJCS8qICBUaGUgY2FsbGVyIG5lZWRzIGEgZGlmZmVyZW50IGRhdGEgc2l6ZSEgKi8KKwkJCQlrZnJlZShkY2Rfa2V5LT5wYXRoKTsKKwkJCQlkY2Rfa2V5LT5wYXRoID0ga21hbGxvYyhkd19wYXRoX3NpemUsCisJCQkJCQkJCUdGUF9LRVJORUwpOworCQkJCWlmIChkY2Rfa2V5LT5wYXRoID09IE5VTEwpIHsKKwkJCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCQkJZ290byBmdW5jX2VuZDsKKwkJCQl9CisJCQl9CisKKwkJCS8qICBXZSBoYXZlIGEgbWF0Y2ghICBDb3B5IG91dCB0aGUgZGF0YS4gKi8KKwkJCW1lbWNweShkY2Rfa2V5LT5wYXRoLCBwc3pfcGF0aF9uYW1lLCBkd19wYXRoX3NpemUpOworCQl9CisJCWRldl9kYmcoYnJpZGdlLCAiJXM6IHBzel9wYXRoX25hbWU9JXMsIGR3X3BhdGhfc2l6ZT0lZFxuIiwKKwkJCV9fZnVuY19fLCBwc3pfcGF0aF9uYW1lLCBkd19wYXRoX3NpemUpOworCX0gZWxzZSB7CisJCS8qIERlcmVnaXN0ZXIgYW4gZXhpc3Rpbmcgb2JqZWN0ICovCisJCXNwaW5fbG9jaygmZGJkY2RfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZGNkX2tleSwgJnJlZ19rZXlfbGlzdCwgbGluaykgeworCQkJaWYgKCFzdHJuY21wKGRjZF9rZXktPm5hbWUsIHN6X3JlZ19rZXksCisJCQkJCQlzdHJsZW4oc3pfcmVnX2tleSkgKyAxKSkgeworCQkJCWxpc3RfZGVsKCZkY2Rfa2V5LT5saW5rKTsKKwkJCQlrZnJlZShkY2Rfa2V5LT5wYXRoKTsKKwkJCQlrZnJlZShkY2Rfa2V5KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlzcGluX3VubG9jaygmZGJkY2RfbG9jayk7CisJCWlmICgmZGNkX2tleS0+bGluayA9PSAmcmVnX2tleV9saXN0KQorCQkJc3RhdHVzID0gLUVQRVJNOworCX0KKworCWlmICghc3RhdHVzKSB7CisJCS8qCisJCSAqICBCZWNhdXNlIHRoZSBub2RlIGRhdGFiYXNlIGhhcyBiZWVuIHVwZGF0ZWQgdGhyb3VnaCBhCisJCSAqICBzdWNjZXNzZnVsIG9iamVjdCByZWdpc3RyYXRpb24vZGUtcmVnaXN0cmF0aW9uIG9wZXJhdGlvbiwKKwkJICogIHdlIG5lZWQgdG8gcmVzZXQgdGhlIG9iamVjdCBlbnVtZXJhdGlvbiBjb3VudGVyIHRvIGFsbG93CisJCSAqICBjdXJyZW50IGVudW1lcmF0aW9ucyB0byByZWZsZWN0IHRoaXMgdXBkYXRlIGluIHRoZSBub2RlCisJCSAqICBkYXRhYmFzZS4KKwkJICovCisJCWVudW1fcmVmcyA9IDA7CisJfQorZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkY2RfdW5yZWdpc3Rlcl9vYmplY3QgPT09PT09PT0KKyAqICBDYWxsIERDRF9SZWdpc3RlciBvYmplY3Qgd2l0aCBwc3pfcGF0aF9uYW1lIHNldCB0byBOVUxMIHRvCisgKiAgcGVyZm9ybSBhY3R1YWwgb2JqZWN0IGRlLXJlZ2lzdHJhdGlvbi4KKyAqLworaW50IGRjZF91bnJlZ2lzdGVyX29iamVjdChzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqLAorCQkJCSBlbnVtIGRzcF9kY2RvYmp0eXBlIG9ial90eXBlKQoreworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKHV1aWRfb2JqICE9IE5VTEwpOworCURCQ19SRVFVSVJFKChvYmpfdHlwZSA9PSBEU1BfRENETk9ERVRZUEUpIHx8CisJCSAgICAob2JqX3R5cGUgPT0gRFNQX0RDRFBST0NFU1NPUlRZUEUpIHx8CisJCSAgICAob2JqX3R5cGUgPT0gRFNQX0RDRExJQlJBUllUWVBFKSB8fAorCQkgICAgKG9ial90eXBlID09IERTUF9EQ0RDUkVBVEVMSUJUWVBFKSB8fAorCQkgICAgKG9ial90eXBlID09IERTUF9EQ0RFWEVDVVRFTElCVFlQRSkgfHwKKwkJICAgIChvYmpfdHlwZSA9PSBEU1BfRENEREVMRVRFTElCVFlQRSkpOworCisJLyoKKwkgKiAgV2hlbiBkY2RfcmVnaXN0ZXJfb2JqZWN0IGlzIGNhbGxlZCB3aXRoIE5VTEwgYXMgcGF0aG5hbWUsCisJICogIGl0IGluZGljYXRlcyBhbiB1bnJlZ2lzdGVyIG9iamVjdCBvcGVyYXRpb24uCisJICovCisJc3RhdHVzID0gZGNkX3JlZ2lzdGVyX29iamVjdCh1dWlkX29iaiwgb2JqX3R5cGUsIE5VTEwpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0QgSGVscGVyIEZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKgorICogID09PT09PT09IGF0b2kgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHN0cmluZ3MgaW4gZGVjaW1hbCBvciBoZXggZm9ybWF0IHRvIGludGVnZXJzLgorICovCitzdGF0aWMgczMyIGF0b2koY2hhciAqcHN6X2J1ZikKK3sKKwljaGFyICpwY2ggPSBwc3pfYnVmOworCXMzMiBiYXNlID0gMDsKKwl1bnNpZ25lZCBsb25nIHJlczsKKwlpbnQgcmV0X3ZhbDsKKworCXdoaWxlIChpc3NwYWNlKCpwY2gpKQorCQlwY2grKzsKKworCWlmICgqcGNoID09ICctJyB8fCAqcGNoID09ICcrJykgeworCQliYXNlID0gMTA7CisJCXBjaCsrOworCX0gZWxzZSBpZiAoKnBjaCAmJiB0b2xvd2VyKHBjaFtzdHJsZW4ocGNoKSAtIDFdKSA9PSAnaCcpIHsKKwkJYmFzZSA9IDE2OworCX0KKworCXJldF92YWwgPSBzdHJpY3Rfc3RydG91bChwY2gsIGJhc2UsICZyZXMpOworCisJcmV0dXJuIHJldF92YWwgPyA6IHJlczsKK30KKworLyoKKyAqICA9PT09PT09PSBnZXRfYXR0cnNfZnJvbV9idWYgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBQYXJzZSB0aGUgY29udGVudCBvZiBhIGJ1ZmZlciBmaWxsZWQgd2l0aCBEU1Atc2lkZSBkYXRhIGFuZAorICogICAgICByZXRyaWV2ZSBhbiBvYmplY3QncyBhdHRyaWJ1dGVzIGZyb20gaXQuIElNUE9SVEFOVDogQXNzdW1lIHRoZQorICogICAgICBidWZmZXIgaGFzIGJlZW4gY29udmVydGVkIGZyb20gRFNQIGZvcm1hdCB0byBHUFAgZm9ybWF0LgorICovCitzdGF0aWMgaW50IGdldF9hdHRyc19mcm9tX2J1ZihjaGFyICpwc3pfYnVmLCB1MzIgdWxfYnVmX3NpemUsCisJCQkJICAgICBlbnVtIGRzcF9kY2RvYmp0eXBlIG9ial90eXBlLAorCQkJCSAgICAgc3RydWN0IGRjZF9nZW5lcmljb2JqICpnZW5fb2JqKQoreworCWludCBzdGF0dXMgPSAwOworCWNoYXIgc2Vwc1tdID0gIiwgIjsKKwljaGFyICpwc3pfY3VyOworCWNoYXIgKnRva2VuOworCXMzMiB0b2tlbl9sZW4gPSAwOworCXUzMiBpID0gMDsKKyNpZmRlZiBfREJfVElPTUFQCisJczMyIGVudHJ5X2lkOworI2VuZGlmCisKKwlEQkNfUkVRVUlSRShwc3pfYnVmICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHVsX2J1Zl9zaXplICE9IDApOworCURCQ19SRVFVSVJFKChvYmpfdHlwZSA9PSBEU1BfRENETk9ERVRZUEUpCisJCSAgICB8fCAob2JqX3R5cGUgPT0gRFNQX0RDRFBST0NFU1NPUlRZUEUpKTsKKwlEQkNfUkVRVUlSRShnZW5fb2JqICE9IE5VTEwpOworCisJc3dpdGNoIChvYmpfdHlwZSkgeworCWNhc2UgRFNQX0RDRE5PREVUWVBFOgorCQkvKgorCQkgKiBQYXJzZSBDT0ZGIHNlY3QgYnVmZmVyIHRvIHJldHJpZXZlIGluZGl2aWR1YWwgdG9rZW5zIHVzZWQKKwkJICogdG8gZmlsbCBpbiBvYmplY3QgYXR0cnMuCisJCSAqLworCQlwc3pfY3VyID0gcHN6X2J1ZjsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCisJCS8qIHUzMiBjYl9zdHJ1Y3QgKi8KKwkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzLmNiX3N0cnVjdCA9CisJCSAgICAodTMyKSBhdG9pKHRva2VuKTsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCisJCS8qIGRzcF91dWlkIHVpX25vZGVfaWQgKi8KKwkJdXVpZF91dWlkX2Zyb21fc3RyaW5nKHRva2VuLAorCQkJCSAgICAgICZnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMuCisJCQkJICAgICAgdWlfbm9kZV9pZCk7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKworCQkvKiBhY19uYW1lICovCisJCURCQ19SRVFVSVJFKHRva2VuKTsKKwkJdG9rZW5fbGVuID0gc3RybGVuKHRva2VuKTsKKwkJaWYgKHRva2VuX2xlbiA+IERTUF9NQVhOQU1FTEVOIC0gMSkKKwkJCXRva2VuX2xlbiA9IERTUF9NQVhOQU1FTEVOIC0gMTsKKworCQlzdHJuY3B5KGdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy5hY19uYW1lLAorCQkJdG9rZW4sIHRva2VuX2xlbik7CisJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy5hY19uYW1lW3Rva2VuX2xlbl0gPSAnXDAnOworCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7CisJCS8qIHUzMiBudHlwZSAqLworCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMubnR5cGUgPSBhdG9pKHRva2VuKTsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCQkvKiB1MzIgY2FjaGVfb25fZ3BwICovCisJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy5jYWNoZV9vbl9ncHAgPSBhdG9pKHRva2VuKTsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCQkvKiBkc3BfcmVzb3VyY2VyZXFtdHMgZHNwX3Jlc291cmNlX3JlcW10cyAqLworCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMuZHNwX3Jlc291cmNlX3JlcW10cy4KKwkJICAgIGNiX3N0cnVjdCA9ICh1MzIpIGF0b2kodG9rZW4pOworCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7CisKKwkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzLgorCQkgICAgZHNwX3Jlc291cmNlX3JlcW10cy5zdGF0aWNfZGF0YV9zaXplID0gYXRvaSh0b2tlbik7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKwkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzLgorCQkgICAgZHNwX3Jlc291cmNlX3JlcW10cy5nbG9iYWxfZGF0YV9zaXplID0gYXRvaSh0b2tlbik7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKwkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzLgorCQkgICAgZHNwX3Jlc291cmNlX3JlcW10cy5wcm9ncmFtX21lbV9zaXplID0gYXRvaSh0b2tlbik7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKwkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzLgorCQkgICAgZHNwX3Jlc291cmNlX3JlcW10cy51d2NfZXhlY3V0aW9uX3RpbWUgPSBhdG9pKHRva2VuKTsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMuCisJCSAgICBkc3BfcmVzb3VyY2VfcmVxbXRzLnV3Y19wZXJpb2QgPSBhdG9pKHRva2VuKTsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCisJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy4KKwkJICAgIGRzcF9yZXNvdXJjZV9yZXFtdHMudXdjX2RlYWRsaW5lID0gYXRvaSh0b2tlbik7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKworCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMuCisJCSAgICBkc3BfcmVzb3VyY2VfcmVxbXRzLmF2Z19leGVjdGlvbl90aW1lID0gYXRvaSh0b2tlbik7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKworCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMuCisJCSAgICBkc3BfcmVzb3VyY2VfcmVxbXRzLm1pbmltdW1fcGVyaW9kID0gYXRvaSh0b2tlbik7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKworCQkvKiBzMzIgcHJpbyAqLworCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMucHJpbyA9IGF0b2kodG9rZW4pOworCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7CisKKwkJLyogdTMyIHN0YWNrX3NpemUgKi8KKwkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzLnN0YWNrX3NpemUgPSBhdG9pKHRva2VuKTsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCisJCS8qIHUzMiBzeXNfc3RhY2tfc2l6ZSAqLworCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMuc3lzX3N0YWNrX3NpemUgPQorCQkgICAgYXRvaSh0b2tlbik7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKworCQkvKiB1MzIgc3RhY2tfc2VnICovCisJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy5zdGFja19zZWcgPSBhdG9pKHRva2VuKTsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCisJCS8qIHUzMiBtZXNzYWdlX2RlcHRoICovCisJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy5tZXNzYWdlX2RlcHRoID0KKwkJICAgIGF0b2kodG9rZW4pOworCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7CisKKwkJLyogdTMyIG51bV9pbnB1dF9zdHJlYW1zICovCisJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy5udW1faW5wdXRfc3RyZWFtcyA9CisJCSAgICBhdG9pKHRva2VuKTsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCisJCS8qIHUzMiBudW1fb3V0cHV0X3N0cmVhbXMgKi8KKwkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzLm51bV9vdXRwdXRfc3RyZWFtcyA9CisJCSAgICBhdG9pKHRva2VuKTsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCisJCS8qIHUzMiB1dGltZW91dCAqLworCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMudXRpbWVvdXQgPSBhdG9pKHRva2VuKTsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCisJCS8qIGNoYXIgKnBzdHJfY3JlYXRlX3BoYXNlX2Z4biAqLworCQlEQkNfUkVRVUlSRSh0b2tlbik7CisJCXRva2VuX2xlbiA9IHN0cmxlbih0b2tlbik7CisJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLnBzdHJfY3JlYXRlX3BoYXNlX2Z4biA9CisJCQkJCWt6YWxsb2ModG9rZW5fbGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJCXN0cm5jcHkoZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoucHN0cl9jcmVhdGVfcGhhc2VfZnhuLAorCQkJdG9rZW4sIHRva2VuX2xlbik7CisJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLnBzdHJfY3JlYXRlX3BoYXNlX2Z4blt0b2tlbl9sZW5dID0KKwkJICAgICdcMCc7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKworCQkvKiBjaGFyICpwc3RyX2V4ZWN1dGVfcGhhc2VfZnhuICovCisJCURCQ19SRVFVSVJFKHRva2VuKTsKKwkJdG9rZW5fbGVuID0gc3RybGVuKHRva2VuKTsKKwkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoucHN0cl9leGVjdXRlX3BoYXNlX2Z4biA9CisJCQkJCWt6YWxsb2ModG9rZW5fbGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJCXN0cm5jcHkoZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoucHN0cl9leGVjdXRlX3BoYXNlX2Z4biwKKwkJCXRva2VuLCB0b2tlbl9sZW4pOworCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5wc3RyX2V4ZWN1dGVfcGhhc2VfZnhuW3Rva2VuX2xlbl0gPQorCQkgICAgJ1wwJzsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCisJCS8qIGNoYXIgKnBzdHJfZGVsZXRlX3BoYXNlX2Z4biAqLworCQlEQkNfUkVRVUlSRSh0b2tlbik7CisJCXRva2VuX2xlbiA9IHN0cmxlbih0b2tlbik7CisJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLnBzdHJfZGVsZXRlX3BoYXNlX2Z4biA9CisJCQkJCWt6YWxsb2ModG9rZW5fbGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJCXN0cm5jcHkoZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoucHN0cl9kZWxldGVfcGhhc2VfZnhuLAorCQkJdG9rZW4sIHRva2VuX2xlbik7CisJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLnBzdHJfZGVsZXRlX3BoYXNlX2Z4blt0b2tlbl9sZW5dID0KKwkJICAgICdcMCc7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKworCQkvKiBTZWdtZW50IGlkIGZvciBtZXNzYWdlIGJ1ZmZlcnMgKi8KKwkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoubXNnX3NlZ2lkID0gYXRvaSh0b2tlbik7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKworCQkvKiBNZXNzYWdlIG5vdGlmaWNhdGlvbiB0eXBlICovCisJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLm1zZ19ub3RpZnlfdHlwZSA9IGF0b2kodG9rZW4pOworCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7CisKKwkJLyogY2hhciAqcHN0cl9pX2FsZ19uYW1lICovCisJCWlmICh0b2tlbikgeworCQkJdG9rZW5fbGVuID0gc3RybGVuKHRva2VuKTsKKwkJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLnBzdHJfaV9hbGdfbmFtZSA9CisJCQkJCWt6YWxsb2ModG9rZW5fbGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJCQlzdHJuY3B5KGdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLnBzdHJfaV9hbGdfbmFtZSwKKwkJCQl0b2tlbiwgdG9rZW5fbGVuKTsKKwkJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLnBzdHJfaV9hbGdfbmFtZVt0b2tlbl9sZW5dID0KKwkJCSAgICAnXDAnOworCQkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCQl9CisKKwkJLyogTG9hZCB0eXBlIChzdGF0aWMsIGR5bmFtaWMsIG9yIG92ZXJsYXkpICovCisJCWlmICh0b2tlbikgeworCQkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoudXNfbG9hZF90eXBlID0gYXRvaSh0b2tlbik7CisJCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7CisJCX0KKworCQkvKiBEeW5hbWljIGxvYWQgZGF0YSByZXF1aXJlbWVudHMgKi8KKwkJaWYgKHRva2VuKSB7CisJCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai51bF9kYXRhX21lbV9zZWdfbWFzayA9CisJCQkgICAgYXRvaSh0b2tlbik7CisJCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7CisJCX0KKworCQkvKiBEeW5hbWljIGxvYWQgY29kZSByZXF1aXJlbWVudHMgKi8KKwkJaWYgKHRva2VuKSB7CisJCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai51bF9jb2RlX21lbV9zZWdfbWFzayA9CisJCQkgICAgYXRvaSh0b2tlbik7CisJCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7CisJCX0KKworCQkvKiBFeHRyYWN0IG5vZGUgcHJvZmlsZXMgaW50byBub2RlIHByb3BlcnRpZXMgKi8KKwkJaWYgKHRva2VuKSB7CisKKwkJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy5jb3VudF9wcm9maWxlcyA9CisJCQkgICAgYXRvaSh0b2tlbik7CisJCQlmb3IgKGkgPSAwOworCQkJICAgICBpIDwKKwkJCSAgICAgZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmouCisJCQkgICAgIG5kYl9wcm9wcy5jb3VudF9wcm9maWxlczsgaSsrKSB7CisJCQkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCQkJCWlmICh0b2tlbikgeworCQkJCQkvKiBIZWFwIFNpemUgZm9yIHRoZSBub2RlICovCisJCQkJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLgorCQkJCQkgICAgbmRiX3Byb3BzLm5vZGVfcHJvZmlsZXNbaV0uCisJCQkJCSAgICB1bF9oZWFwX3NpemUgPSBhdG9pKHRva2VuKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCQlpZiAodG9rZW4pIHsKKwkJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy5zdGFja19zZWdfbmFtZSA9CisJCQkgICAgKHUzMikgKHRva2VuKTsKKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBEU1BfRENEUFJPQ0VTU09SVFlQRToKKwkJLyoKKwkJICogUGFyc2UgQ09GRiBzZWN0IGJ1ZmZlciB0byByZXRyaWV2ZSBpbmRpdmlkdWFsIHRva2VucyB1c2VkCisJCSAqIHRvIGZpbGwgaW4gb2JqZWN0IGF0dHJzLgorCQkgKi8KKwkJcHN6X2N1ciA9IHBzel9idWY7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKworCQlnZW5fb2JqLT5vYmpfZGF0YS5wcm9jX2luZm8uY2Jfc3RydWN0ID0gYXRvaSh0b2tlbik7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKworCQlnZW5fb2JqLT5vYmpfZGF0YS5wcm9jX2luZm8ucHJvY2Vzc29yX2ZhbWlseSA9IGF0b2kodG9rZW4pOworCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7CisKKwkJZ2VuX29iai0+b2JqX2RhdGEucHJvY19pbmZvLnByb2Nlc3Nvcl90eXBlID0gYXRvaSh0b2tlbik7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKworCQlnZW5fb2JqLT5vYmpfZGF0YS5wcm9jX2luZm8uY2xvY2tfcmF0ZSA9IGF0b2kodG9rZW4pOworCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7CisKKwkJZ2VuX29iai0+b2JqX2RhdGEucHJvY19pbmZvLnVsX2ludGVybmFsX21lbV9zaXplID0gYXRvaSh0b2tlbik7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKworCQlnZW5fb2JqLT5vYmpfZGF0YS5wcm9jX2luZm8udWxfZXh0ZXJuYWxfbWVtX3NpemUgPSBhdG9pKHRva2VuKTsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCisJCWdlbl9vYmotPm9ial9kYXRhLnByb2NfaW5mby5wcm9jZXNzb3JfaWQgPSBhdG9pKHRva2VuKTsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCisJCWdlbl9vYmotPm9ial9kYXRhLnByb2NfaW5mby50eV9ydW5uaW5nX3J0b3MgPSBhdG9pKHRva2VuKTsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCisJCWdlbl9vYmotPm9ial9kYXRhLnByb2NfaW5mby5ub2RlX21pbl9wcmlvcml0eSA9IGF0b2kodG9rZW4pOworCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7CisKKwkJZ2VuX29iai0+b2JqX2RhdGEucHJvY19pbmZvLm5vZGVfbWF4X3ByaW9yaXR5ID0gYXRvaSh0b2tlbik7CisKKyNpZmRlZiBfREJfVElPTUFQCisJCS8qIFByb2Mgb2JqZWN0IG1heSBjb250YWluIGFkZGl0aW9uYWwoZXh0ZW5kZWQpIGF0dHJpYnV0ZXMuICovCisJCS8qIGF0dHIgbXVzdCBtYXRjaCBwcm9jLmh4eCAqLworCQlmb3IgKGVudHJ5X2lkID0gMDsgZW50cnlfaWQgPCA3OyBlbnRyeV9pZCsrKSB7CisJCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7CisJCQlnZW5fb2JqLT5vYmpfZGF0YS5leHRfcHJvY19vYmoudHlfdGxiW2VudHJ5X2lkXS4KKwkJCSAgICB1bF9ncHBfcGh5cyA9IGF0b2kodG9rZW4pOworCisJCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7CisJCQlnZW5fb2JqLT5vYmpfZGF0YS5leHRfcHJvY19vYmoudHlfdGxiW2VudHJ5X2lkXS4KKwkJCSAgICB1bF9kc3BfdmlydCA9IGF0b2kodG9rZW4pOworCQl9CisjZW5kaWYKKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXN0YXR1cyA9IC1FUEVSTTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBDb21wcmVzc0J1ZmZlciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENvbXByZXNzIHRoZSBEU1AgYnVmZmVyLCBpZiBuZWNlc3NhcnksIHRvIGNvbmZvcm0gdG8gUEMgZm9ybWF0LgorICovCitzdGF0aWMgdm9pZCBjb21wcmVzc19idWYoY2hhciAqcHN6X2J1ZiwgdTMyIHVsX2J1Zl9zaXplLCBzMzIgY2hhcl9zaXplKQoreworCWNoYXIgKnA7CisJY2hhciBjaDsKKwljaGFyICpxOworCisJcCA9IHBzel9idWY7CisJaWYgKHAgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZm9yIChxID0gcHN6X2J1ZjsgcSA8IChwc3pfYnVmICsgdWxfYnVmX3NpemUpOykgeworCQljaCA9IGRzcF9jaGFyMl9ncHBfY2hhcihxLCBjaGFyX3NpemUpOworCQlpZiAoY2ggPT0gJ1xcJykgeworCQkJcSArPSBjaGFyX3NpemU7CisJCQljaCA9IGRzcF9jaGFyMl9ncHBfY2hhcihxLCBjaGFyX3NpemUpOworCQkJc3dpdGNoIChjaCkgeworCQkJY2FzZSAndCc6CisJCQkJKnAgPSAnXHQnOworCQkJCWJyZWFrOworCisJCQljYXNlICduJzoKKwkJCQkqcCA9ICdcbic7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgJ3InOgorCQkJCSpwID0gJ1xyJzsKKwkJCQlicmVhazsKKworCQkJY2FzZSAnMCc6CisJCQkJKnAgPSAnXDAnOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCSpwID0gY2g7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQkqcCA9IGNoOworCQl9CisJCXArKzsKKwkJcSArPSBjaGFyX3NpemU7CisJfQorCisJLyogTlVMTCBvdXQgcmVtYWluZGVyIG9mIGJ1ZmZlci4gKi8KKwl3aGlsZSAocCA8IHEpCisJCSpwKysgPSAnXDAnOworfQorCisvKgorICogID09PT09PT09IGRzcF9jaGFyMl9ncHBfY2hhciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENvbnZlcnQgRFNQIGNoYXIgdG8gaG9zdCBHUFAgY2hhciBpbiBhIHBvcnRhYmxlIG1hbm5lcgorICovCitzdGF0aWMgY2hhciBkc3BfY2hhcjJfZ3BwX2NoYXIoY2hhciAqd29yZCwgczMyIGRzcF9jaGFyX3NpemUpCit7CisJY2hhciBjaCA9ICdcMCc7CisJY2hhciAqY2hfc3JjOworCXMzMiBpOworCisJZm9yIChjaF9zcmMgPSB3b3JkLCBpID0gZHNwX2NoYXJfc2l6ZTsgaSA+IDA7IGktLSkKKwkJY2ggfD0gKmNoX3NyYysrOworCisJcmV0dXJuIGNoOworfQorCisvKgorICogID09PT09PT09IGdldF9kZXBfbGliX2luZm8gPT09PT09PT0KKyAqLworc3RhdGljIGludCBnZXRfZGVwX2xpYl9pbmZvKHN0cnVjdCBkY2RfbWFuYWdlciAqaGRjZF9tZ3IsCisJCQkJICAgc3RydWN0IGRzcF91dWlkICp1dWlkX29iaiwKKwkJCQkgICB1MTYgKm51bV9saWJzLAorCQkJCSAgIHUxNiAqbnVtX3BlcnNfbGlicywKKwkJCQkgICBzdHJ1Y3QgZHNwX3V1aWQgKmRlcF9saWJfdXVpZHMsCisJCQkJICAgYm9vbCAqcHJzdG50X2RlcF9saWJzLAorCQkJCSAgIGVudW0gbmxkcl9waGFzZSBwaGFzZSkKK3sKKwlzdHJ1Y3QgZGNkX21hbmFnZXIgKmRjZF9tZ3Jfb2JqID0gaGRjZF9tZ3I7CisJY2hhciAqcHN6X2NvZmZfYnVmID0gTlVMTDsKKwljaGFyICpwc3pfY3VyOworCWNoYXIgKnBzel9maWxlX25hbWUgPSBOVUxMOworCXN0cnVjdCBjb2RfbGlicmFyeW9iaiAqbGliID0gTlVMTDsKKwl1MzIgdWxfYWRkciA9IDA7CS8qIFVzZWQgYnkgY29kX2dldF9zZWN0aW9uICovCisJdTMyIHVsX2xlbiA9IDA7CQkvKiBVc2VkIGJ5IGNvZF9nZXRfc2VjdGlvbiAqLworCXUzMiBkd19kYXRhX3NpemUgPSBDT0RfTUFYUEFUSExFTkdUSDsKKwljaGFyIHNlcHNbXSA9ICIsICI7CisJY2hhciAqdG9rZW4gPSBOVUxMOworCWJvb2wgZ2V0X3V1aWRzID0gKGRlcF9saWJfdXVpZHMgIT0gTlVMTCk7CisJdTE2IGRlcF9saWJzID0gMDsKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKworCURCQ19SRVFVSVJFKGhkY2RfbWdyKTsKKwlEQkNfUkVRVUlSRShudW1fbGlicyAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRSh1dWlkX29iaiAhPSBOVUxMKTsKKworCS8qICBJbml0aWFsaXplIHRvIDAgZGVwZW5kZW50IGxpYnJhcmllcywgaWYgb25seSBjb3VudGluZyBudW1iZXIgb2YKKwkgKiAgZGVwZW5kZW50IGxpYnJhcmllcyAqLworCWlmICghZ2V0X3V1aWRzKSB7CisJCSpudW1fbGlicyA9IDA7CisJCSpudW1fcGVyc19saWJzID0gMDsKKwl9CisKKwkvKiBBbGxvY2F0ZSBhIGJ1ZmZlciBmb3IgZmlsZSBuYW1lICovCisJcHN6X2ZpbGVfbmFtZSA9IGt6YWxsb2MoZHdfZGF0YV9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAocHN6X2ZpbGVfbmFtZSA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJfSBlbHNlIHsKKwkJLyogR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5ICovCisJCXN0YXR1cyA9IGRjZF9nZXRfbGlicmFyeV9uYW1lKGhkY2RfbWdyLCB1dWlkX29iaiwgcHN6X2ZpbGVfbmFtZSwKKwkJCQkJICAgICAgJmR3X2RhdGFfc2l6ZSwgcGhhc2UsIE5VTEwpOworCX0KKworCS8qIE9wZW4gdGhlIGxpYnJhcnkgKi8KKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPSBjb2Rfb3BlbihkY2RfbWdyX29iai0+Y29kX21nciwgcHN6X2ZpbGVfbmFtZSwKKwkJCQkgIENPRF9OT0xPQUQsICZsaWIpOworCX0KKwlpZiAoIXN0YXR1cykgeworCQkvKiBHZXQgZGVwZW5kZW50IGxpYnJhcnkgc2VjdGlvbiBpbmZvcm1hdGlvbi4gKi8KKwkJc3RhdHVzID0gY29kX2dldF9zZWN0aW9uKGxpYiwgREVQTElCU0VDVCwgJnVsX2FkZHIsICZ1bF9sZW4pOworCisJCWlmIChzdGF0dXMpIHsKKwkJCS8qIE9rLCBubyBkZXBlbmRlbnQgbGlicmFyaWVzICovCisJCQl1bF9sZW4gPSAwOworCQkJc3RhdHVzID0gMDsKKwkJfQorCX0KKworCWlmIChzdGF0dXMgfHwgISh1bF9sZW4gPiAwKSkKKwkJZ290byBmdW5jX2NvbnQ7CisKKwkvKiBBbGxvY2F0ZSB6ZXJvZWQgYnVmZmVyLiAqLworCXBzel9jb2ZmX2J1ZiA9IGt6YWxsb2ModWxfbGVuICsgNCwgR0ZQX0tFUk5FTCk7CisJaWYgKHBzel9jb2ZmX2J1ZiA9PSBOVUxMKQorCQlzdGF0dXMgPSAtRU5PTUVNOworCisJLyogUmVhZCBzZWN0aW9uIGNvbnRlbnRzLiAqLworCXN0YXR1cyA9IGNvZF9yZWFkX3NlY3Rpb24obGliLCBERVBMSUJTRUNULCBwc3pfY29mZl9idWYsIHVsX2xlbik7CisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2NvbnQ7CisKKwkvKiBDb21wcmVzcyBhbmQgZm9ybWF0IERTUCBidWZmZXIgdG8gY29uZm9ybSB0byBQQyBmb3JtYXQuICovCisJY29tcHJlc3NfYnVmKHBzel9jb2ZmX2J1ZiwgdWxfbGVuLCBEU1BXT1JEU0laRSk7CisKKwkvKiBSZWFkIGZyb20gYnVmZmVyICovCisJcHN6X2N1ciA9IHBzel9jb2ZmX2J1ZjsKKwl3aGlsZSAoKHRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKSkgJiYgKnRva2VuICE9ICdcMCcpIHsKKwkJaWYgKGdldF91dWlkcykgeworCQkJaWYgKGRlcF9saWJzID49ICpudW1fbGlicykgeworCQkJCS8qIEdvbmUgYmV5b25kIHRoZSBsaW1pdCAqLworCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQkvKiBSZXRyaWV2ZSBVVUlEIHN0cmluZy4gKi8KKwkJCQl1dWlkX3V1aWRfZnJvbV9zdHJpbmcodG9rZW4sCisJCQkJCQkgICAgICAmKGRlcF9saWJfdXVpZHMKKwkJCQkJCQlbZGVwX2xpYnNdKSk7CisJCQkJLyogSXMgdGhpcyBsaWJyYXJ5IHBlcnNpc3RlbnQ/ICovCisJCQkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCQkJCXByc3RudF9kZXBfbGlic1tkZXBfbGlic10gPSBhdG9pKHRva2VuKTsKKwkJCQlkZXBfbGlicysrOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogQWR2YW5jIHRvIG5leHQgdG9rZW4gKi8KKwkJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKwkJCWlmIChhdG9pKHRva2VuKSkKKwkJCQkoKm51bV9wZXJzX2xpYnMpKys7CisKKwkJCS8qIEp1c3QgY291bnRpbmcgbnVtYmVyIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMgKi8KKwkJCSgqbnVtX2xpYnMpKys7CisJCX0KKwl9CitmdW5jX2NvbnQ6CisJaWYgKGxpYikKKwkJY29kX2Nsb3NlKGxpYik7CisKKwkvKiBGcmVlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGR5bmFtaWMgYnVmZmVycy4gKi8KKwlrZnJlZShwc3pfZmlsZV9uYW1lKTsKKworCWtmcmVlKHBzel9jb2ZmX2J1Zik7CisKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZGlzcC5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZGlzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3Y2U0MzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9kaXNwLmMKQEAgLTAsMCArMSw3NTIgQEAKKy8qCisgKiBkaXNwLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogTm9kZSBEaXNwYXRjaGVyIGludGVyZmFjZS4gQ29tbXVuaWNhdGVzIHdpdGggUmVzb3VyY2UgTWFuYWdlciBTZXJ2ZXIKKyAqIChSTVMpIG9uIERTUC4gQWNjZXNzIHRvIFJNUyBpcyBzeW5jaHJvbml6ZWQgaW4gTk9ERS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSG9zdCBPUyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEU1AvQklPUyBCcmlkZ2UgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcmFjZSAmIERlYnVnICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiYy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1MgQWRhcHRhdGlvbiBMYXllciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9zeW5jLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMaW5rIERyaXZlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BkZWZzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQbGF0Zm9ybSBNYW5hZ2VyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9jaG5sZGVmcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVzb3VyY2UgTWFuYWdlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9ub2RlZGVmcy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9ub2RlcHJpdi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9ybXNfc2guaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGlzcC5oPgorCisvKiBTaXplIG9mIGEgcmVwbHkgZnJvbSBSTVMgKi8KKyNkZWZpbmUgUkVQTFlTSVpFICgzICogc2l6ZW9mKHJtc193b3JkKSkKKworLyogUmVzZXJ2ZWQgY2hhbm5lbCBvZmZzZXRzIGZvciBjb21tdW5pY2F0aW9uIHdpdGggUk1TICovCisjZGVmaW5lIENITkxUT1JNU09GRlNFVCAgICAgICAwCisjZGVmaW5lIENITkxGUk9NUk1TT0ZGU0VUICAgICAxCisKKyNkZWZpbmUgQ0hOTElPUkVRUyAgICAgIDEKKworLyoKKyAqICA9PT09PT09PSBkaXNwX29iamVjdCA9PT09PT09PQorICovCitzdHJ1Y3QgZGlzcF9vYmplY3QgeworCXN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iajsJLyogRGV2aWNlIGZvciB0aGlzIHByb2Nlc3NvciAqLworCS8qIEZ1bmN0aW9uIGludGVyZmFjZSB0byBCcmlkZ2UgZHJpdmVyICovCisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisJc3RydWN0IGNobmxfbWdyICpoY2hubF9tZ3I7CS8qIENoYW5uZWwgbWFuYWdlciAqLworCXN0cnVjdCBjaG5sX29iamVjdCAqY2hubF90b19kc3A7CS8qIENobmwgZm9yIGNvbW1hbmRzIHRvIFJNUyAqLworCXN0cnVjdCBjaG5sX29iamVjdCAqY2hubF9mcm9tX2RzcDsJLyogQ2hubCBmb3IgcmVwbGllcyBmcm9tIFJNUyAqLworCXU4ICpwYnVmOwkJLyogQnVmZmVyIGZvciBjb21tYW5kcywgcmVwbGllcyAqLworCXUzMiB1bF9idWZzaXplOwkJLyogcGJ1ZiBzaXplIGluIGJ5dGVzICovCisJdTMyIHVsX2J1ZnNpemVfcm1zOwkvKiBwYnVmIHNpemUgaW4gUk1TIHdvcmRzICovCisJdTMyIGNoYXJfc2l6ZTsJCS8qIFNpemUgb2YgRFNQIGNoYXJhY3RlciAqLworCXUzMiB3b3JkX3NpemU7CQkvKiBTaXplIG9mIERTUCB3b3JkICovCisJdTMyIGRhdGFfbWF1X3NpemU7CS8qIFNpemUgb2YgRFNQIERhdGEgTUFVICovCit9OworCitzdGF0aWMgdTMyIHJlZnM7CisKK3N0YXRpYyB2b2lkIGRlbGV0ZV9kaXNwKHN0cnVjdCBkaXNwX29iamVjdCAqZGlzcF9vYmopOworc3RhdGljIGludCBmaWxsX3N0cmVhbV9kZWYocm1zX3dvcmQgKnBkd19idWYsIHUzMiAqcHRvdGFsLCB1MzIgb2Zmc2V0LAorCQkJCSAgc3RydWN0IG5vZGVfc3RybWRlZiBzdHJtX2RlZiwgdTMyIG1heCwKKwkJCQkgIHUzMiBjaGFyc19pbl9ybXNfd29yZCk7CitzdGF0aWMgaW50IHNlbmRfbWVzc2FnZShzdHJ1Y3QgZGlzcF9vYmplY3QgKmRpc3Bfb2JqLCB1MzIgdGltZW91dCwKKwkJCSAgICAgICB1MzIgdWxfYnl0ZXMsIHUzMiAqcGR3X2FyZyk7CisKKy8qCisgKiAgPT09PT09PT0gZGlzcF9jcmVhdGUgPT09PT09PT0KKyAqICBDcmVhdGUgYSBOT0RFIERpc3BhdGNoZXIgb2JqZWN0LgorICovCitpbnQgZGlzcF9jcmVhdGUoc3RydWN0IGRpc3Bfb2JqZWN0ICoqZGlzcGF0Y2hfb2JqLAorCQkgICAgICAgc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGRpc3BfYXR0ciAqZGlzcF9hdHRycykKK3sKKwlzdHJ1Y3QgZGlzcF9vYmplY3QgKmRpc3Bfb2JqOworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCXUzMiB1bF9jaG5sX2lkOworCXN0cnVjdCBjaG5sX2F0dHIgY2hubF9hdHRyX29iajsKKwlpbnQgc3RhdHVzID0gMDsKKwl1OCBkZXZfdHlwZTsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShkaXNwYXRjaF9vYmogIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoZGlzcF9hdHRycyAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShoZGV2X29iaiAhPSBOVUxMKTsKKworCSpkaXNwYXRjaF9vYmogPSBOVUxMOworCisJLyogQWxsb2NhdGUgTm9kZSBEaXNwYXRjaGVyIG9iamVjdCAqLworCWRpc3Bfb2JqID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRpc3Bfb2JqZWN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRpc3Bfb2JqID09IE5VTEwpCisJCXN0YXR1cyA9IC1FTk9NRU07CisJZWxzZQorCQlkaXNwX29iai0+aGRldl9vYmogPSBoZGV2X29iajsKKworCS8qIEdldCBDaGFubmVsIG1hbmFnZXIgYW5kIEJyaWRnZSBmdW5jdGlvbiBpbnRlcmZhY2UgKi8KKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPSBkZXZfZ2V0X2NobmxfbWdyKGhkZXZfb2JqLCAmKGRpc3Bfb2JqLT5oY2hubF9tZ3IpKTsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCSh2b2lkKWRldl9nZXRfaW50Zl9meG5zKGhkZXZfb2JqLCAmaW50Zl9meG5zKTsKKwkJCWRpc3Bfb2JqLT5pbnRmX2Z4bnMgPSBpbnRmX2Z4bnM7CisJCX0KKwl9CisKKwkvKiBjaGVjayBkZXZpY2UgdHlwZSBhbmQgZGVjaWRlIGlmIHN0cmVhbXMgb3IgbWVzc2FnJ2luZyBpcyB1c2VkIGZvcgorCSAqIFJNUy9FRFMgKi8KKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfY29udDsKKworCXN0YXR1cyA9IGRldl9nZXRfZGV2X3R5cGUoaGRldl9vYmosICZkZXZfdHlwZSk7CisKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfY29udDsKKworCWlmIChkZXZfdHlwZSAhPSBEU1BfVU5JVCkgeworCQlzdGF0dXMgPSAtRVBFUk07CisJCWdvdG8gZnVuY19jb250OworCX0KKworCWRpc3Bfb2JqLT5jaGFyX3NpemUgPSBEU1BXT1JEU0laRTsKKwlkaXNwX29iai0+d29yZF9zaXplID0gRFNQV09SRFNJWkU7CisJZGlzcF9vYmotPmRhdGFfbWF1X3NpemUgPSBEU1BXT1JEU0laRTsKKwkvKiBPcGVuIGNoYW5uZWxzIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIFJNUyAqLworCWNobmxfYXR0cl9vYmoudWlvX3JlcXMgPSBDSE5MSU9SRVFTOworCWNobmxfYXR0cl9vYmouZXZlbnRfb2JqID0gTlVMTDsKKwl1bF9jaG5sX2lkID0gZGlzcF9hdHRycy0+dWxfY2hubF9vZmZzZXQgKyBDSE5MVE9STVNPRkZTRVQ7CisJc3RhdHVzID0gKCppbnRmX2Z4bnMtPnBmbl9jaG5sX29wZW4pICgmKGRpc3Bfb2JqLT5jaG5sX3RvX2RzcCksCisJCQkJCSAgICAgIGRpc3Bfb2JqLT5oY2hubF9tZ3IsCisJCQkJCSAgICAgIENITkxfTU9ERVRPRFNQLCB1bF9jaG5sX2lkLAorCQkJCQkgICAgICAmY2hubF9hdHRyX29iaik7CisKKwlpZiAoIXN0YXR1cykgeworCQl1bF9jaG5sX2lkID0gZGlzcF9hdHRycy0+dWxfY2hubF9vZmZzZXQgKyBDSE5MRlJPTVJNU09GRlNFVDsKKwkJc3RhdHVzID0KKwkJICAgICgqaW50Zl9meG5zLT5wZm5fY2hubF9vcGVuKSAoJihkaXNwX29iai0+Y2hubF9mcm9tX2RzcCksCisJCQkJCQkgZGlzcF9vYmotPmhjaG5sX21nciwKKwkJCQkJCSBDSE5MX01PREVGUk9NRFNQLCB1bF9jaG5sX2lkLAorCQkJCQkJICZjaG5sX2F0dHJfb2JqKTsKKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJLyogQWxsb2NhdGUgYnVmZmVyIGZvciBjb21tYW5kcywgcmVwbGllcyAqLworCQlkaXNwX29iai0+dWxfYnVmc2l6ZSA9IGRpc3BfYXR0cnMtPnVsX2NobmxfYnVmX3NpemU7CisJCWRpc3Bfb2JqLT51bF9idWZzaXplX3JtcyA9IFJNU19DT01NQU5EQlVGU0laRTsKKwkJZGlzcF9vYmotPnBidWYgPSBremFsbG9jKGRpc3Bfb2JqLT51bF9idWZzaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGRpc3Bfb2JqLT5wYnVmID09IE5VTEwpCisJCQlzdGF0dXMgPSAtRU5PTUVNOworCX0KK2Z1bmNfY29udDoKKwlpZiAoIXN0YXR1cykKKwkJKmRpc3BhdGNoX29iaiA9IGRpc3Bfb2JqOworCWVsc2UKKwkJZGVsZXRlX2Rpc3AoZGlzcF9vYmopOworCisJREJDX0VOU1VSRSgoc3RhdHVzICYmICpkaXNwYXRjaF9vYmogPT0gTlVMTCkgfHwKKwkJCQkoIXN0YXR1cyAmJiAqZGlzcGF0Y2hfb2JqKSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkaXNwX2RlbGV0ZSA9PT09PT09PQorICogIERlbGV0ZSB0aGUgTk9ERSBEaXNwYXRjaGVyLgorICovCit2b2lkIGRpc3BfZGVsZXRlKHN0cnVjdCBkaXNwX29iamVjdCAqZGlzcF9vYmopCit7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGRpc3Bfb2JqKTsKKworCWRlbGV0ZV9kaXNwKGRpc3Bfb2JqKTsKK30KKworLyoKKyAqICA9PT09PT09PSBkaXNwX2V4aXQgPT09PT09PT0KKyAqICBEaXNjb250aW51ZSB1c2FnZSBvZiBESVNQIG1vZHVsZS4KKyAqLwordm9pZCBkaXNwX2V4aXQodm9pZCkKK3sKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlyZWZzLS07CisKKwlEQkNfRU5TVVJFKHJlZnMgPj0gMCk7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGlzcF9pbml0ID09PT09PT09CisgKiAgSW5pdGlhbGl6ZSB0aGUgRElTUCBtb2R1bGUuCisgKi8KK2Jvb2wgZGlzcF9pbml0KHZvaWQpCit7CisJYm9vbCByZXQgPSB0cnVlOworCisJREJDX1JFUVVJUkUocmVmcyA+PSAwKTsKKworCWlmIChyZXQpCisJCXJlZnMrKzsKKworCURCQ19FTlNVUkUoKHJldCAmJiAocmVmcyA+IDApKSB8fCAoIXJldCAmJiAocmVmcyA+PSAwKSkpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGlzcF9ub2RlX2NoYW5nZV9wcmlvcml0eSA9PT09PT09PQorICogIENoYW5nZSB0aGUgcHJpb3JpdHkgb2YgYSBub2RlIGN1cnJlbnRseSBydW5uaW5nIG9uIHRoZSB0YXJnZXQuCisgKi8KK2ludCBkaXNwX25vZGVfY2hhbmdlX3ByaW9yaXR5KHN0cnVjdCBkaXNwX29iamVjdCAqZGlzcF9vYmosCisJCQkJICAgICBzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLAorCQkJCSAgICAgdTMyIHJtc19meG4sIG5vZGVlbnYgbm9kZV9lbnYsIHMzMiBwcmlvKQoreworCXUzMiBkd19hcmc7CisJc3RydWN0IHJtc19jb21tYW5kICpybXNfY21kOworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGRpc3Bfb2JqKTsKKwlEQkNfUkVRVUlSRShobm9kZSAhPSBOVUxMKTsKKworCS8qIFNlbmQgbWVzc2FnZSB0byBSTVMgdG8gY2hhbmdlIHByaW9yaXR5ICovCisJcm1zX2NtZCA9IChzdHJ1Y3Qgcm1zX2NvbW1hbmQgKikoZGlzcF9vYmotPnBidWYpOworCXJtc19jbWQtPmZ4biA9IChybXNfd29yZCkgKHJtc19meG4pOworCXJtc19jbWQtPmFyZzEgPSAocm1zX3dvcmQpIG5vZGVfZW52OworCXJtc19jbWQtPmFyZzIgPSBwcmlvOworCXN0YXR1cyA9IHNlbmRfbWVzc2FnZShkaXNwX29iaiwgbm9kZV9nZXRfdGltZW91dChobm9kZSksCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHJtc19jb21tYW5kKSwgJmR3X2FyZyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRpc3Bfbm9kZV9jcmVhdGUgPT09PT09PT0KKyAqICBDcmVhdGUgYSBub2RlIG9uIHRoZSBEU1AgYnkgcmVtb3RlbHkgY2FsbGluZyB0aGUgbm9kZSdzIGNyZWF0ZSBmdW5jdGlvbi4KKyAqLworaW50IGRpc3Bfbm9kZV9jcmVhdGUoc3RydWN0IGRpc3Bfb2JqZWN0ICpkaXNwX29iaiwKKwkJCSAgICBzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLCB1MzIgcm1zX2Z4biwKKwkJCSAgICB1MzIgdWxfY3JlYXRlX2Z4biwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgbm9kZV9jcmVhdGVhcmdzICpwYXJncywKKwkJCSAgICBub2RlZW52ICpub2RlX2VudikKK3sKKwlzdHJ1Y3Qgbm9kZV9tc2dhcmdzIG5vZGVfbXNnX2FyZ3M7CisJc3RydWN0IG5vZGVfdGFza2FyZ3MgdGFza19hcmdfb2JqOworCXN0cnVjdCBybXNfY29tbWFuZCAqcm1zX2NtZDsKKwlzdHJ1Y3Qgcm1zX21zZ19hcmdzICpwbXNnX2FyZ3M7CisJc3RydWN0IHJtc19tb3JlX3Rhc2tfYXJncyAqbW9yZV90YXNrX2FyZ3M7CisJZW51bSBub2RlX3R5cGUgbm9kZV90eXBlOworCXUzMiBkd19sZW5ndGg7CisJcm1zX3dvcmQgKnBkd19idWYgPSBOVUxMOworCXUzMiB1bF9ieXRlczsKKwl1MzIgaTsKKwl1MzIgdG90YWw7CisJdTMyIGNoYXJzX2luX3Jtc193b3JkOworCXMzMiB0YXNrX2FyZ3Nfb2Zmc2V0OworCXMzMiBzaW9faW5fZGVmX29mZnNldDsKKwlzMzIgc2lvX291dF9kZWZfb2Zmc2V0OworCXMzMiBzaW9fZGVmc19vZmZzZXQ7CisJczMyIGFyZ3Nfb2Zmc2V0ID0gLTE7CisJczMyIG9mZnNldDsKKwlzdHJ1Y3Qgbm9kZV9zdHJtZGVmIHN0cm1fZGVmOworCXUzMiBtYXg7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRzcF9ub2RlaW5mbyBub2RlX2luZm87CisJdTggZGV2X3R5cGU7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoZGlzcF9vYmopOworCURCQ19SRVFVSVJFKGhub2RlICE9IE5VTEwpOworCURCQ19SRVFVSVJFKG5vZGVfZ2V0X3R5cGUoaG5vZGUpICE9IE5PREVfREVWSUNFKTsKKwlEQkNfUkVRVUlSRShub2RlX2VudiAhPSBOVUxMKTsKKworCXN0YXR1cyA9IGRldl9nZXRfZGV2X3R5cGUoZGlzcF9vYmotPmhkZXZfb2JqLCAmZGV2X3R5cGUpOworCisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2VuZDsKKworCWlmIChkZXZfdHlwZSAhPSBEU1BfVU5JVCkgeworCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiB1bmtub3duIGRldmljZSB0eXBlID0gMHgleFxuIiwKKwkJCV9fZnVuY19fLCBkZXZfdHlwZSk7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCURCQ19SRVFVSVJFKHBhcmdzICE9IE5VTEwpOworCW5vZGVfdHlwZSA9IG5vZGVfZ2V0X3R5cGUoaG5vZGUpOworCW5vZGVfbXNnX2FyZ3MgPSBwYXJncy0+YXNhLm5vZGVfbXNnX2FyZ3M7CisJbWF4ID0gZGlzcF9vYmotPnVsX2J1ZnNpemVfcm1zOwkvKk1heCAjIG9mIFJNUyB3b3JkcyB0aGF0IGNhbiBiZSBzZW50ICovCisJREJDX0FTU0VSVChtYXggPT0gUk1TX0NPTU1BTkRCVUZTSVpFKTsKKwljaGFyc19pbl9ybXNfd29yZCA9IHNpemVvZihybXNfd29yZCkgLyBkaXNwX29iai0+Y2hhcl9zaXplOworCS8qIE51bWJlciBvZiBSTVMgd29yZHMgbmVlZGVkIHRvIGhvbGQgYXJnIGRhdGEgKi8KKwlkd19sZW5ndGggPQorCSAgICAobm9kZV9tc2dfYXJncy5hcmdfbGVuZ3RoICsgY2hhcnNfaW5fcm1zX3dvcmQgLQorCSAgICAgMSkgLyBjaGFyc19pbl9ybXNfd29yZDsKKwkvKiBNYWtlIHN1cmUgbXNnIGFyZ3MgYW5kIGNvbW1hbmQgZml0IGluIGJ1ZmZlciAqLworCXRvdGFsID0gc2l6ZW9mKHN0cnVjdCBybXNfY29tbWFuZCkgLyBzaXplb2Yocm1zX3dvcmQpICsKKwkgICAgc2l6ZW9mKHN0cnVjdCBybXNfbXNnX2FyZ3MpCisJICAgIC8gc2l6ZW9mKHJtc193b3JkKSAtIDEgKyBkd19sZW5ndGg7CisJaWYgKHRvdGFsID49IG1heCkgeworCQlzdGF0dXMgPSAtRVBFUk07CisJCWRldl9kYmcoYnJpZGdlLCAiJXM6IE1lc3NhZ2UgYXJncyB0b28gbGFyZ2UgZm9yIGJ1ZmZlciEgc2l6ZSAiCisJCQkiPSAlZCwgbWF4ID0gJWRcbiIsIF9fZnVuY19fLCB0b3RhbCwgbWF4KTsKKwl9CisJLyoKKwkgKiAgRmlsbCBpbiBidWZmZXIgdG8gc2VuZCB0byBSTVMuCisJICogIFRoZSBidWZmZXIgd2lsbCBoYXZlIHRoZSBmb2xsb3dpbmcgIGZvcm1hdDoKKwkgKgorCSAqICBSTVMgY29tbWFuZDoKKwkgKiAgICAgIEFkZHJlc3Mgb2YgUk1TX0NyZWF0ZU5vZGUoKQorCSAqICAgICAgQWRkcmVzcyBvZiBub2RlJ3MgY3JlYXRlIGZ1bmN0aW9uCisJICogICAgICBkdW1teSBhcmd1bWVudAorCSAqICAgICAgbm9kZSB0eXBlCisJICoKKwkgKiAgTWVzc2FnZSBBcmdzOgorCSAqICAgICAgbWF4IG51bWJlciBvZiBtZXNzYWdlcworCSAqICAgICAgc2VnaWQgZm9yIG1lc3NhZ2UgYnVmZmVyIGFsbG9jYXRpb24KKwkgKiAgICAgIG5vdGlmaWNhdGlvbiB0eXBlIHRvIHVzZSB3aGVuIG1lc3NhZ2UgaXMgcmVjZWl2ZWQKKwkgKiAgICAgIGxlbmd0aCBvZiBtZXNzYWdlIGFyZyBkYXRhCisJICogICAgICBtZXNzYWdlIGFyZ3MgZGF0YQorCSAqCisJICogIFRhc2sgQXJncyAoaWYgdGFzayBvciBzb2NrZXQgbm9kZSk6CisJICogICAgICBwcmlvcml0eQorCSAqICAgICAgc3RhY2sgc2l6ZQorCSAqICAgICAgc3lzdGVtIHN0YWNrIHNpemUKKwkgKiAgICAgIHN0YWNrIHNlZ21lbnQKKwkgKiAgICAgIG1pc2MKKwkgKiAgICAgIG51bWJlciBvZiBpbnB1dCBzdHJlYW1zCisJICogICAgICBwU1RSTUluRGVmW10gLSBvZmZzZXRzIG9mIFNUUk0gZGVmaW5pdGlvbnMgZm9yIGlucHV0IHN0cmVhbXMKKwkgKiAgICAgIG51bWJlciBvZiBvdXRwdXQgc3RyZWFtcworCSAqICAgICAgcFNUUk1PdXREZWZbXSAtIG9mZnNldHMgb2YgU1RSTSBkZWZpbml0aW9ucyBmb3Igb3V0cHV0CisJICogICAgICBzdHJlYW1zCisJICogICAgICBTVFJNSW5EZWZbXSAtIGFycmF5IG9mIFNUUk0gZGVmaW5pdGlvbnMgZm9yIGlucHV0IHN0cmVhbXMKKwkgKiAgICAgIFNUUk1PdXREZWZbXSAtIGFycmF5IG9mIFNUUk0gZGVmaW5pdGlvbnMgZm9yIG91dHB1dCBzdHJlYW1zCisJICoKKwkgKiAgU29ja2V0IEFyZ3MgKGlmIERBSVMgc29ja2V0IG5vZGUpOgorCSAqCisJICovCisJaWYgKCFzdGF0dXMpIHsKKwkJdG90YWwgPSAwOwkvKiBUb3RhbCBudW1iZXIgb2Ygd29yZHMgaW4gYnVmZmVyIHNvIGZhciAqLworCQlwZHdfYnVmID0gKHJtc193b3JkICopIGRpc3Bfb2JqLT5wYnVmOworCQlybXNfY21kID0gKHN0cnVjdCBybXNfY29tbWFuZCAqKXBkd19idWY7CisJCXJtc19jbWQtPmZ4biA9IChybXNfd29yZCkgKHJtc19meG4pOworCQlybXNfY21kLT5hcmcxID0gKHJtc193b3JkKSAodWxfY3JlYXRlX2Z4bik7CisJCWlmIChub2RlX2dldF9sb2FkX3R5cGUoaG5vZGUpID09IE5MRFJfRFlOQU1JQ0xPQUQpIHsKKwkJCS8qIEZsdXNoIElDQUNIRSBvbiBMb2FkICovCisJCQlybXNfY21kLT5hcmcyID0gMTsJLyogZHVtbXkgYXJndW1lbnQgKi8KKwkJfSBlbHNlIHsKKwkJCS8qIERvIG5vdCBmbHVzaCBJQ0FDSEUgKi8KKwkJCXJtc19jbWQtPmFyZzIgPSAwOwkvKiBkdW1teSBhcmd1bWVudCAqLworCQl9CisJCXJtc19jbWQtPmRhdGEgPSBub2RlX2dldF90eXBlKGhub2RlKTsKKwkJLyoKKwkJICogIGFyZ3Nfb2Zmc2V0IGlzIHRoZSBvZmZzZXQgb2YgdGhlIGRhdGEgZmllbGQgaW4gc3RydWN0CisJCSAqICBybXNfY29tbWFuZCBzdHJ1Y3R1cmUuIFdlIG5lZWQgdGhpcyB0byBjYWxjdWxhdGUgc3RyZWFtCisJCSAqICBkZWZpbml0aW9uIG9mZnNldHMuCisJCSAqLworCQlhcmdzX29mZnNldCA9IDM7CisJCXRvdGFsICs9IHNpemVvZihzdHJ1Y3Qgcm1zX2NvbW1hbmQpIC8gc2l6ZW9mKHJtc193b3JkKTsKKwkJLyogTWVzc2FnZSBhcmdzICovCisJCXBtc2dfYXJncyA9IChzdHJ1Y3Qgcm1zX21zZ19hcmdzICopKHBkd19idWYgKyB0b3RhbCk7CisJCXBtc2dfYXJncy0+bWF4X21zZ3MgPSBub2RlX21zZ19hcmdzLm1heF9tc2dzOworCQlwbXNnX2FyZ3MtPnNlZ2lkID0gbm9kZV9tc2dfYXJncy5zZWdfaWQ7CisJCXBtc2dfYXJncy0+bm90aWZ5X3R5cGUgPSBub2RlX21zZ19hcmdzLm5vdGlmeV90eXBlOworCQlwbXNnX2FyZ3MtPmFyZ19sZW5ndGggPSBub2RlX21zZ19hcmdzLmFyZ19sZW5ndGg7CisJCXRvdGFsICs9IHNpemVvZihzdHJ1Y3Qgcm1zX21zZ19hcmdzKSAvIHNpemVvZihybXNfd29yZCkgLSAxOworCQltZW1jcHkocGR3X2J1ZiArIHRvdGFsLCBub2RlX21zZ19hcmdzLnBkYXRhLAorCQkgICAgICAgbm9kZV9tc2dfYXJncy5hcmdfbGVuZ3RoKTsKKwkJdG90YWwgKz0gZHdfbGVuZ3RoOworCX0KKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJLyogSWYgbm9kZSBpcyBhIHRhc2sgbm9kZSwgY29weSB0YXNrIGNyZWF0ZSBhcmd1bWVudHMgaW50byAgYnVmZmVyICovCisJaWYgKG5vZGVfdHlwZSA9PSBOT0RFX1RBU0sgfHwgbm9kZV90eXBlID09IE5PREVfREFJU1NPQ0tFVCkgeworCQl0YXNrX2FyZ19vYmogPSBwYXJncy0+YXNhLnRhc2tfYXJnX29iajsKKwkJdGFza19hcmdzX29mZnNldCA9IHRvdGFsOworCQl0b3RhbCArPSBzaXplb2Yoc3RydWN0IHJtc19tb3JlX3Rhc2tfYXJncykgLyBzaXplb2Yocm1zX3dvcmQpICsKKwkJICAgIDEgKyB0YXNrX2FyZ19vYmoubnVtX2lucHV0cyArIHRhc2tfYXJnX29iai5udW1fb3V0cHV0czsKKwkJLyogQ29weSB0YXNrIGFyZ3VtZW50cyAqLworCQlpZiAodG90YWwgPCBtYXgpIHsKKwkJCXRvdGFsID0gdGFza19hcmdzX29mZnNldDsKKwkJCW1vcmVfdGFza19hcmdzID0gKHN0cnVjdCBybXNfbW9yZV90YXNrX2FyZ3MgKikocGR3X2J1ZiArCisJCQkJCQkJCSAgICAgICB0b3RhbCk7CisJCQkvKgorCQkJICogR2V0IHNvbWUgaW1wb3J0YW50IGluZm8gYWJvdXQgdGhlIG5vZGUuIE5vdGUgdGhhdCB3ZQorCQkJICogZG9uJ3QganVzdCByZWFjaCBpbnRvIHRoZSBobm9kZSBzdHJ1Y3QgYmVjYXVzZQorCQkJICogdGhhdCB3b3VsZCBicmVhayB0aGUgbm9kZSBvYmplY3QncyBhYnN0cmFjdGlvbi4KKwkJCSAqLworCQkJZ2V0X25vZGVfaW5mbyhobm9kZSwgJm5vZGVfaW5mbyk7CisJCQltb3JlX3Rhc2tfYXJncy0+cHJpb3JpdHkgPSBub2RlX2luZm8uZXhlY3V0aW9uX3ByaW9yaXR5OworCQkJbW9yZV90YXNrX2FyZ3MtPnN0YWNrX3NpemUgPSB0YXNrX2FyZ19vYmouc3RhY2tfc2l6ZTsKKwkJCW1vcmVfdGFza19hcmdzLT5zeXNzdGFja19zaXplID0KKwkJCSAgICB0YXNrX2FyZ19vYmouc3lzX3N0YWNrX3NpemU7CisJCQltb3JlX3Rhc2tfYXJncy0+c3RhY2tfc2VnID0gdGFza19hcmdfb2JqLnN0YWNrX3NlZzsKKwkJCW1vcmVfdGFza19hcmdzLT5oZWFwX2FkZHIgPSB0YXNrX2FyZ19vYmoudWRzcF9oZWFwX2FkZHI7CisJCQltb3JlX3Rhc2tfYXJncy0+aGVhcF9zaXplID0gdGFza19hcmdfb2JqLmhlYXBfc2l6ZTsKKwkJCW1vcmVfdGFza19hcmdzLT5taXNjID0gdGFza19hcmdfb2JqLnVsX2RhaXNfYXJnOworCQkJbW9yZV90YXNrX2FyZ3MtPm51bV9pbnB1dF9zdHJlYW1zID0KKwkJCSAgICB0YXNrX2FyZ19vYmoubnVtX2lucHV0czsKKwkJCXRvdGFsICs9CisJCQkgICAgc2l6ZW9mKHN0cnVjdCBybXNfbW9yZV90YXNrX2FyZ3MpIC8KKwkJCSAgICBzaXplb2Yocm1zX3dvcmQpOworCQkJZGV2X2RiZyhicmlkZ2UsICIlczogdWRzcF9oZWFwX2FkZHIgJXgsIGhlYXBfc2l6ZSAleFxuIiwKKwkJCQlfX2Z1bmNfXywgdGFza19hcmdfb2JqLnVkc3BfaGVhcF9hZGRyLAorCQkJCXRhc2tfYXJnX29iai5oZWFwX3NpemUpOworCQkJLyogS2VlcCB0cmFjayBvZiBwU0lPSW5EZWZbXSBhbmQgcFNJT091dERlZltdCisJCQkgKiBwb3NpdGlvbnMgaW4gdGhlIGJ1ZmZlciwgc2luY2UgdGhpcyBuZWVkcyB0byBiZQorCQkJICogZmlsbGVkIGluIGxhdGVyLiAqLworCQkJc2lvX2luX2RlZl9vZmZzZXQgPSB0b3RhbDsKKwkJCXRvdGFsICs9IHRhc2tfYXJnX29iai5udW1faW5wdXRzOworCQkJcGR3X2J1Zlt0b3RhbCsrXSA9IHRhc2tfYXJnX29iai5udW1fb3V0cHV0czsKKwkJCXNpb19vdXRfZGVmX29mZnNldCA9IHRvdGFsOworCQkJdG90YWwgKz0gdGFza19hcmdfb2JqLm51bV9vdXRwdXRzOworCQkJc2lvX2RlZnNfb2Zmc2V0ID0gdG90YWw7CisJCQkvKiBGaWxsIFNJTyBkZWZzIGFuZCBvZmZzZXRzICovCisJCQlvZmZzZXQgPSBzaW9fZGVmc19vZmZzZXQ7CisJCQlmb3IgKGkgPSAwOyBpIDwgdGFza19hcmdfb2JqLm51bV9pbnB1dHM7IGkrKykgeworCQkJCWlmIChzdGF0dXMpCisJCQkJCWJyZWFrOworCisJCQkJcGR3X2J1ZltzaW9faW5fZGVmX29mZnNldCArIGldID0KKwkJCQkgICAgKG9mZnNldCAtIGFyZ3Nfb2Zmc2V0KQorCQkJCSAgICAqIChzaXplb2Yocm1zX3dvcmQpIC8gRFNQV09SRFNJWkUpOworCQkJCXN0cm1fZGVmID0gdGFza19hcmdfb2JqLnN0cm1faW5fZGVmW2ldOworCQkJCXN0YXR1cyA9CisJCQkJICAgIGZpbGxfc3RyZWFtX2RlZihwZHdfYnVmLCAmdG90YWwsIG9mZnNldCwKKwkJCQkJCSAgICBzdHJtX2RlZiwgbWF4LAorCQkJCQkJICAgIGNoYXJzX2luX3Jtc193b3JkKTsKKwkJCQlvZmZzZXQgPSB0b3RhbDsKKwkJCX0KKwkJCWZvciAoaSA9IDA7IChpIDwgdGFza19hcmdfb2JqLm51bV9vdXRwdXRzKSAmJgorCQkJICAgICAoIXN0YXR1cyk7IGkrKykgeworCQkJCXBkd19idWZbc2lvX291dF9kZWZfb2Zmc2V0ICsgaV0gPQorCQkJCSAgICAob2Zmc2V0IC0gYXJnc19vZmZzZXQpCisJCQkJICAgICogKHNpemVvZihybXNfd29yZCkgLyBEU1BXT1JEU0laRSk7CisJCQkJc3RybV9kZWYgPSB0YXNrX2FyZ19vYmouc3RybV9vdXRfZGVmW2ldOworCQkJCXN0YXR1cyA9CisJCQkJICAgIGZpbGxfc3RyZWFtX2RlZihwZHdfYnVmLCAmdG90YWwsIG9mZnNldCwKKwkJCQkJCSAgICBzdHJtX2RlZiwgbWF4LAorCQkJCQkJICAgIGNoYXJzX2luX3Jtc193b3JkKTsKKwkJCQlvZmZzZXQgPSB0b3RhbDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIEFyZ3Mgd29uJ3QgZml0ICovCisJCQlzdGF0dXMgPSAtRVBFUk07CisJCX0KKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJdWxfYnl0ZXMgPSB0b3RhbCAqIHNpemVvZihybXNfd29yZCk7CisJCURCQ19BU1NFUlQodWxfYnl0ZXMgPCAoUk1TX0NPTU1BTkRCVUZTSVpFICogc2l6ZW9mKHJtc193b3JkKSkpOworCQlzdGF0dXMgPSBzZW5kX21lc3NhZ2UoZGlzcF9vYmosIG5vZGVfZ2V0X3RpbWVvdXQoaG5vZGUpLAorCQkJCSAgICAgIHVsX2J5dGVzLCBub2RlX2Vudik7CisJCWlmIChzdGF0dXMgPj0gMCkgeworCQkJLyoKKwkJCSAqIE1lc3NhZ2Ugc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGZyb20gUk1TLgorCQkJICogUmV0dXJuIHRoZSBzdGF0dXMgb2YgdGhlIE5vZGUncyBjcmVhdGUgZnVuY3Rpb24KKwkJCSAqIG9uIHRoZSBEU1Atc2lkZQorCQkJICovCisJCQlzdGF0dXMgPSAoKChybXNfd29yZCAqKSAoZGlzcF9vYmotPnBidWYpKVswXSk7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBEU1Atc2lkZSBmYWlsZWQ6IDB4JXhcbiIsCisJCQkJCV9fZnVuY19fLCBzdGF0dXMpOworCQl9CisJfQorZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkaXNwX25vZGVfZGVsZXRlID09PT09PT09CisgKiAgcHVycG9zZToKKyAqICAgICAgRGVsZXRlIGEgbm9kZSBvbiB0aGUgRFNQIGJ5IHJlbW90ZWx5IGNhbGxpbmcgdGhlIG5vZGUncyBkZWxldGUgZnVuY3Rpb24uCisgKgorICovCitpbnQgZGlzcF9ub2RlX2RlbGV0ZShzdHJ1Y3QgZGlzcF9vYmplY3QgKmRpc3Bfb2JqLAorCQkJICAgIHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsIHUzMiBybXNfZnhuLAorCQkJICAgIHUzMiB1bF9kZWxldGVfZnhuLCBub2RlZW52IG5vZGVfZW52KQoreworCXUzMiBkd19hcmc7CisJc3RydWN0IHJtc19jb21tYW5kICpybXNfY21kOworCWludCBzdGF0dXMgPSAwOworCXU4IGRldl90eXBlOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGRpc3Bfb2JqKTsKKwlEQkNfUkVRVUlSRShobm9kZSAhPSBOVUxMKTsKKworCXN0YXR1cyA9IGRldl9nZXRfZGV2X3R5cGUoZGlzcF9vYmotPmhkZXZfb2JqLCAmZGV2X3R5cGUpOworCisJaWYgKCFzdGF0dXMpIHsKKworCQlpZiAoZGV2X3R5cGUgPT0gRFNQX1VOSVQpIHsKKworCQkJLyoKKwkJCSAqICBGaWxsIGluIGJ1ZmZlciB0byBzZW5kIHRvIFJNUworCQkJICovCisJCQlybXNfY21kID0gKHN0cnVjdCBybXNfY29tbWFuZCAqKWRpc3Bfb2JqLT5wYnVmOworCQkJcm1zX2NtZC0+ZnhuID0gKHJtc193b3JkKSAocm1zX2Z4bik7CisJCQlybXNfY21kLT5hcmcxID0gKHJtc193b3JkKSBub2RlX2VudjsKKwkJCXJtc19jbWQtPmFyZzIgPSAocm1zX3dvcmQpICh1bF9kZWxldGVfZnhuKTsKKwkJCXJtc19jbWQtPmRhdGEgPSBub2RlX2dldF90eXBlKGhub2RlKTsKKworCQkJc3RhdHVzID0gc2VuZF9tZXNzYWdlKGRpc3Bfb2JqLCBub2RlX2dldF90aW1lb3V0KGhub2RlKSwKKwkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBybXNfY29tbWFuZCksCisJCQkJCSAgICAgICZkd19hcmcpOworCQkJaWYgKHN0YXR1cyA+PSAwKSB7CisJCQkJLyoKKwkJCQkgKiBNZXNzYWdlIHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBmcm9tIFJNUy4KKwkJCQkgKiBSZXR1cm4gdGhlIHN0YXR1cyBvZiB0aGUgTm9kZSdzIGRlbGV0ZQorCQkJCSAqIGZ1bmN0aW9uIG9uIHRoZSBEU1Atc2lkZQorCQkJCSAqLworCQkJCXN0YXR1cyA9ICgoKHJtc193b3JkICopIChkaXNwX29iai0+cGJ1ZikpWzBdKTsKKwkJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQkJZGV2X2RiZyhicmlkZ2UsICIlczogRFNQLXNpZGUgZmFpbGVkOiAiCisJCQkJCQkiMHgleFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJCQl9CisKKwkJfQorCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRpc3Bfbm9kZV9ydW4gPT09PT09PT0KKyAqICBwdXJwb3NlOgorICogICAgICBTdGFydCBleGVjdXRpb24gb2YgYSBub2RlJ3MgZXhlY3V0ZSBwaGFzZSwgb3IgcmVzdW1lIGV4ZWN1dGlvbiBvZiBhIG5vZGUKKyAqICAgICAgdGhhdCBoYXMgYmVlbiBzdXNwZW5kZWQgKHZpYSBESVNQX05vZGVQYXVzZSgpKSBvbiB0aGUgRFNQLgorICovCitpbnQgZGlzcF9ub2RlX3J1bihzdHJ1Y3QgZGlzcF9vYmplY3QgKmRpc3Bfb2JqLAorCQkJIHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsIHUzMiBybXNfZnhuLAorCQkJIHUzMiB1bF9leGVjdXRlX2Z4biwgbm9kZWVudiBub2RlX2VudikKK3sKKwl1MzIgZHdfYXJnOworCXN0cnVjdCBybXNfY29tbWFuZCAqcm1zX2NtZDsKKwlpbnQgc3RhdHVzID0gMDsKKwl1OCBkZXZfdHlwZTsKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoZGlzcF9vYmopOworCURCQ19SRVFVSVJFKGhub2RlICE9IE5VTEwpOworCisJc3RhdHVzID0gZGV2X2dldF9kZXZfdHlwZShkaXNwX29iai0+aGRldl9vYmosICZkZXZfdHlwZSk7CisKKwlpZiAoIXN0YXR1cykgeworCisJCWlmIChkZXZfdHlwZSA9PSBEU1BfVU5JVCkgeworCisJCQkvKgorCQkJICogIEZpbGwgaW4gYnVmZmVyIHRvIHNlbmQgdG8gUk1TLgorCQkJICovCisJCQlybXNfY21kID0gKHN0cnVjdCBybXNfY29tbWFuZCAqKWRpc3Bfb2JqLT5wYnVmOworCQkJcm1zX2NtZC0+ZnhuID0gKHJtc193b3JkKSAocm1zX2Z4bik7CisJCQlybXNfY21kLT5hcmcxID0gKHJtc193b3JkKSBub2RlX2VudjsKKwkJCXJtc19jbWQtPmFyZzIgPSAocm1zX3dvcmQpICh1bF9leGVjdXRlX2Z4bik7CisJCQlybXNfY21kLT5kYXRhID0gbm9kZV9nZXRfdHlwZShobm9kZSk7CisKKwkJCXN0YXR1cyA9IHNlbmRfbWVzc2FnZShkaXNwX29iaiwgbm9kZV9nZXRfdGltZW91dChobm9kZSksCisJCQkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgcm1zX2NvbW1hbmQpLAorCQkJCQkgICAgICAmZHdfYXJnKTsKKwkJCWlmIChzdGF0dXMgPj0gMCkgeworCQkJCS8qCisJCQkJICogTWVzc2FnZSBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgZnJvbSBSTVMuCisJCQkJICogUmV0dXJuIHRoZSBzdGF0dXMgb2YgdGhlIE5vZGUncyBleGVjdXRlCisJCQkJICogZnVuY3Rpb24gb24gdGhlIERTUC1zaWRlCisJCQkJICovCisJCQkJc3RhdHVzID0gKCgocm1zX3dvcmQgKikgKGRpc3Bfb2JqLT5wYnVmKSlbMF0pOworCQkJCWlmIChzdGF0dXMgPCAwKQorCQkJCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBEU1Atc2lkZSBmYWlsZWQ6ICIKKwkJCQkJCSIweCV4XG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJCX0KKworCQl9CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkZWxldGVfZGlzcCA9PT09PT09PQorICogIHB1cnBvc2U6CisgKiAgICAgIEZyZWVzIHRoZSByZXNvdXJjZXMgYWxsb2NhdGVkIGZvciB0aGUgZGlzcGF0Y2hlci4KKyAqLworc3RhdGljIHZvaWQgZGVsZXRlX2Rpc3Aoc3RydWN0IGRpc3Bfb2JqZWN0ICpkaXNwX29iaikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKKworCWlmIChkaXNwX29iaikgeworCQlpbnRmX2Z4bnMgPSBkaXNwX29iai0+aW50Zl9meG5zOworCisJCS8qIEZyZWUgTm9kZSBEaXNwYXRjaGVyIHJlc291cmNlcyAqLworCQlpZiAoZGlzcF9vYmotPmNobmxfZnJvbV9kc3ApIHsKKwkJCS8qIENoYW5uZWwgY2xvc2UgY2FuIGZhaWwgb25seSBpZiB0aGUgY2hhbm5lbCBoYW5kbGUKKwkJCSAqIGlzIGludmFsaWQuICovCisJCQlzdGF0dXMgPSAoKmludGZfZnhucy0+cGZuX2NobmxfY2xvc2UpCisJCQkgICAgKGRpc3Bfb2JqLT5jaG5sX2Zyb21fZHNwKTsKKwkJCWlmIChzdGF0dXMpIHsKKwkJCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBGYWlsZWQgdG8gY2xvc2UgY2hhbm5lbCAiCisJCQkJCSJmcm9tIFJNUzogMHgleFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJCQl9CisJCX0KKwkJaWYgKGRpc3Bfb2JqLT5jaG5sX3RvX2RzcCkgeworCQkJc3RhdHVzID0KKwkJCSAgICAoKmludGZfZnhucy0+cGZuX2NobmxfY2xvc2UpIChkaXNwX29iai0+CisJCQkJCQkJICBjaG5sX3RvX2RzcCk7CisJCQlpZiAoc3RhdHVzKSB7CisJCQkJZGV2X2RiZyhicmlkZ2UsICIlczogRmFpbGVkIHRvIGNsb3NlIGNoYW5uZWwgdG8iCisJCQkJCSIgUk1TOiAweCV4XG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJCX0KKwkJfQorCQlrZnJlZShkaXNwX29iai0+cGJ1Zik7CisKKwkJa2ZyZWUoZGlzcF9vYmopOworCX0KK30KKworLyoKKyAqICA9PT09PT09PSBmaWxsX3N0cmVhbV9kZWYgPT09PT09PT0KKyAqICBwdXJwb3NlOgorICogICAgICBGaWxscyBzdHJlYW0gZGVmaW5pdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQgZmlsbF9zdHJlYW1fZGVmKHJtc193b3JkICpwZHdfYnVmLCB1MzIgKnB0b3RhbCwgdTMyIG9mZnNldCwKKwkJCQkgIHN0cnVjdCBub2RlX3N0cm1kZWYgc3RybV9kZWYsIHUzMiBtYXgsCisJCQkJICB1MzIgY2hhcnNfaW5fcm1zX3dvcmQpCit7CisJc3RydWN0IHJtc19zdHJtX2RlZiAqc3RybV9kZWZfb2JqOworCXUzMiB0b3RhbCA9ICpwdG90YWw7CisJdTMyIG5hbWVfbGVuOworCXUzMiBkd19sZW5ndGg7CisJaW50IHN0YXR1cyA9IDA7CisKKwlpZiAodG90YWwgKyBzaXplb2Yoc3RydWN0IHJtc19zdHJtX2RlZikgLyBzaXplb2Yocm1zX3dvcmQpID49IG1heCkgeworCQlzdGF0dXMgPSAtRVBFUk07CisJfSBlbHNlIHsKKwkJc3RybV9kZWZfb2JqID0gKHN0cnVjdCBybXNfc3RybV9kZWYgKikocGR3X2J1ZiArIHRvdGFsKTsKKwkJc3RybV9kZWZfb2JqLT5idWZzaXplID0gc3RybV9kZWYuYnVmX3NpemU7CisJCXN0cm1fZGVmX29iai0+bmJ1ZnMgPSBzdHJtX2RlZi5udW1fYnVmczsKKwkJc3RybV9kZWZfb2JqLT5zZWdpZCA9IHN0cm1fZGVmLnNlZ19pZDsKKwkJc3RybV9kZWZfb2JqLT5hbGlnbiA9IHN0cm1fZGVmLmJ1Zl9hbGlnbm1lbnQ7CisJCXN0cm1fZGVmX29iai0+dGltZW91dCA9IHN0cm1fZGVmLnV0aW1lb3V0OworCX0KKworCWlmICghc3RhdHVzKSB7CisJCS8qCisJCSAqICBTaW5jZSB3ZSBoYXZlbid0IGFkZGVkIHRoZSBkZXZpY2UgbmFtZSB5ZXQsIHN1YnRyYWN0CisJCSAqICAxIGZyb20gdG90YWwuCisJCSAqLworCQl0b3RhbCArPSBzaXplb2Yoc3RydWN0IHJtc19zdHJtX2RlZikgLyBzaXplb2Yocm1zX3dvcmQpIC0gMTsKKwkJREJDX1JFUVVJUkUoc3RybV9kZWYuc3pfZGV2aWNlKTsKKwkJZHdfbGVuZ3RoID0gc3RybGVuKHN0cm1fZGVmLnN6X2RldmljZSkgKyAxOworCisJCS8qIE51bWJlciBvZiBSTVNfV09SRFMgbmVlZGVkIHRvIGhvbGQgZGV2aWNlIG5hbWUgKi8KKwkJbmFtZV9sZW4gPQorCQkgICAgKGR3X2xlbmd0aCArIGNoYXJzX2luX3Jtc193b3JkIC0gMSkgLyBjaGFyc19pbl9ybXNfd29yZDsKKworCQlpZiAodG90YWwgKyBuYW1lX2xlbiA+PSBtYXgpIHsKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiAgWmVybyBvdXQgbGFzdCB3b3JkLCBzaW5jZSB0aGUgZGV2aWNlIG5hbWUgbWF5IG5vdAorCQkJICogIGV4dGVuZCB0byBjb21wbGV0ZWx5IGZpbGwgdGhpcyB3b3JkLgorCQkJICovCisJCQlwZHdfYnVmW3RvdGFsICsgbmFtZV9sZW4gLSAxXSA9IDA7CisJCQkvKiogVE9ETyBVU0UgU0VSVklDRVMgKiAqLworCQkJbWVtY3B5KHBkd19idWYgKyB0b3RhbCwgc3RybV9kZWYuc3pfZGV2aWNlLCBkd19sZW5ndGgpOworCQkJdG90YWwgKz0gbmFtZV9sZW47CisJCQkqcHRvdGFsID0gdG90YWw7CisJCX0KKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHNlbmRfbWVzc2FnZSA9PT09PT0KKyAqICBTZW5kIGNvbW1hbmQgbWVzc2FnZSB0byBSTVMsIGdldCByZXBseSBmcm9tIFJNUy4KKyAqLworc3RhdGljIGludCBzZW5kX21lc3NhZ2Uoc3RydWN0IGRpc3Bfb2JqZWN0ICpkaXNwX29iaiwgdTMyIHRpbWVvdXQsCisJCQkgICAgICAgdTMyIHVsX2J5dGVzLCB1MzIgKnBkd19hcmcpCit7CisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisJc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iajsKKwl1MzIgZHdfYXJnID0gMDsKKwl1OCAqcGJ1ZjsKKwlzdHJ1Y3QgY2hubF9pb2MgY2hubF9pb2Nfb2JqOworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocGR3X2FyZyAhPSBOVUxMKTsKKworCSpwZHdfYXJnID0gKHUzMikgTlVMTDsKKwlpbnRmX2Z4bnMgPSBkaXNwX29iai0+aW50Zl9meG5zOworCWNobmxfb2JqID0gZGlzcF9vYmotPmNobmxfdG9fZHNwOworCXBidWYgPSBkaXNwX29iai0+cGJ1ZjsKKworCS8qIFNlbmQgdGhlIGNvbW1hbmQgKi8KKwlzdGF0dXMgPSAoKmludGZfZnhucy0+cGZuX2NobmxfYWRkX2lvX3JlcSkgKGNobmxfb2JqLCBwYnVmLCB1bF9ieXRlcywgMCwKKwkJCQkJCSAgICAwTCwgZHdfYXJnKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJc3RhdHVzID0KKwkgICAgKCppbnRmX2Z4bnMtPnBmbl9jaG5sX2dldF9pb2MpIChjaG5sX29iaiwgdGltZW91dCwgJmNobmxfaW9jX29iaik7CisJaWYgKCFzdGF0dXMpIHsKKwkJaWYgKCFDSE5MX0lTX0lPX0NPTVBMRVRFKGNobmxfaW9jX29iaikpIHsKKwkJCWlmIChDSE5MX0lTX1RJTUVEX09VVChjaG5sX2lvY19vYmopKQorCQkJCXN0YXR1cyA9IC1FVElNRTsKKwkJCWVsc2UKKwkJCQlzdGF0dXMgPSAtRVBFUk07CisJCX0KKwl9CisJLyogR2V0IHRoZSByZXBseSAqLworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisKKwljaG5sX29iaiA9IGRpc3Bfb2JqLT5jaG5sX2Zyb21fZHNwOworCXVsX2J5dGVzID0gUkVQTFlTSVpFOworCXN0YXR1cyA9ICgqaW50Zl9meG5zLT5wZm5fY2hubF9hZGRfaW9fcmVxKSAoY2hubF9vYmosIHBidWYsIHVsX2J5dGVzLAorCQkJCQkJICAgIDAsIDBMLCBkd19hcmcpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisKKwlzdGF0dXMgPQorCSAgICAoKmludGZfZnhucy0+cGZuX2NobmxfZ2V0X2lvYykgKGNobmxfb2JqLCB0aW1lb3V0LCAmY2hubF9pb2Nfb2JqKTsKKwlpZiAoIXN0YXR1cykgeworCQlpZiAoQ0hOTF9JU19USU1FRF9PVVQoY2hubF9pb2Nfb2JqKSkgeworCQkJc3RhdHVzID0gLUVUSU1FOworCQl9IGVsc2UgaWYgKGNobmxfaW9jX29iai5ieXRlX3NpemUgPCB1bF9ieXRlcykgeworCQkJLyogRGlkIG5vdCBnZXQgYWxsIG9mIHRoZSByZXBseSBmcm9tIHRoZSBSTVMgKi8KKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJfSBlbHNlIHsKKwkJCWlmIChDSE5MX0lTX0lPX0NPTVBMRVRFKGNobmxfaW9jX29iaikpIHsKKwkJCQlEQkNfQVNTRVJUKGNobmxfaW9jX29iai5wYnVmID09IHBidWYpOworCQkJCXN0YXR1cyA9ICgqKChybXNfd29yZCAqKSBjaG5sX2lvY19vYmoucGJ1ZikpOworCQkJCSpwZHdfYXJnID0KKwkJCQkgICAgKCgocm1zX3dvcmQgKikgKGNobmxfaW9jX29iai5wYnVmKSlbMV0pOworCQkJfSBlbHNlIHsKKwkJCQlzdGF0dXMgPSAtRVBFUk07CisJCQl9CisJCX0KKwl9CitmdW5jX2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YThkZWE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZHJ2LmMKQEAgLTAsMCArMSw5MjkgQEAKKy8qCisgKiBkcnYuYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBEU1AvQklPUyBCcmlkZ2UgcmVzb3VyY2UgYWxsb2NhdGlvbiBtb2R1bGUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSG9zdCBPUyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEU1AvQklPUyBCcmlkZ2UgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcmFjZSAmIERlYnVnICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiYy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1MgQWRhcHRhdGlvbiBMYXllciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9jZmcuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvbGlzdC5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhpcyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kcnYuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2Lmg+CisKKyNpbmNsdWRlIDxkc3BicmlkZ2Uvbm9kZS5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9wcm9jLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3N0cm0uaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvbm9kZXByaXYuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwY2hubC5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9yZXNvdXJjZWNsZWFudXAuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlZmluZXMsIERhdGEgU3RydWN0dXJlcywgVHlwZWRlZnMgKi8KK3N0cnVjdCBkcnZfb2JqZWN0IHsKKwlzdHJ1Y3QgbHN0X2xpc3QgKmRldl9saXN0OworCXN0cnVjdCBsc3RfbGlzdCAqZGV2X25vZGVfc3RyaW5nOworfTsKKworLyoKKyAqICBUaGlzIGlzIHRoZSBEZXZpY2UgRXh0ZW5zaW9uLiBOYW1lZCB3aXRoIHRoZSBQcmVmaXgKKyAqICBEUlZfIHNpbmNlIGl0IGlzIGxpdmluZyBpbiB0aGlzIG1vZHVsZQorICovCitzdHJ1Y3QgZHJ2X2V4dCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworCWNoYXIgc3pfc3RyaW5nW01BWFJFR1BBVEhMRU5HVEhdOworfTsKKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdsb2JhbHMgKi8KK3N0YXRpYyBzMzIgcmVmczsKK3N0YXRpYyBib29sIGV4dF9waHlzX21lbV9wb29sX2VuYWJsZWQ7CitzdHJ1Y3QgZXh0X3BoeXNfbWVtX3Bvb2wgeworCXUzMiBwaHlzX21lbV9iYXNlOworCXUzMiBwaHlzX21lbV9zaXplOworCXUzMiB2aXJ0X21lbV9iYXNlOworCXUzMiBuZXh0X3BoeXNfYWxsb2NfcHRyOworfTsKK3N0YXRpYyBzdHJ1Y3QgZXh0X3BoeXNfbWVtX3Bvb2wgZXh0X21lbV9wb29sOworCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb24gUHJvdG90eXBlcyAqLworc3RhdGljIGludCByZXF1ZXN0X2JyaWRnZV9yZXNvdXJjZXMoc3RydWN0IGNmZ19ob3N0cmVzICpyZXMpOworCisKKy8qIEdQUCBQUk9DRVNTIENMRUFOVVAgQ09ERSAqLworCitzdGF0aWMgaW50IGRydl9wcm9jX2ZyZWVfbm9kZV9yZXMoaW50IGlkLCB2b2lkICpwLCB2b2lkICpkYXRhKTsKKworLyogQWxsb2NhdGUgYW5kIGFkZCBhIG5vZGUgcmVzb3VyY2UgZWxlbWVudAorKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIC5Ob2RlX0FsbG9jYXRlLiAqLworaW50IGRydl9pbnNlcnRfbm9kZV9yZXNfZWxlbWVudCh2b2lkICpobm9kZSwgdm9pZCAqbm9kZV9yZXNvdXJjZSwKKwkJCQkgICAgICAgdm9pZCAqcHJvY2Vzc19jdHh0KQoreworCXN0cnVjdCBub2RlX3Jlc19vYmplY3QgKipub2RlX3Jlc19vYmogPQorCSAgICAoc3RydWN0IG5vZGVfcmVzX29iamVjdCAqKilub2RlX3Jlc291cmNlOworCXN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKmN0eHQgPSAoc3RydWN0IHByb2Nlc3NfY29udGV4dCAqKXByb2Nlc3NfY3R4dDsKKwlpbnQgc3RhdHVzID0gMDsKKwlpbnQgcmV0dmFsOworCisJKm5vZGVfcmVzX29iaiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBub2RlX3Jlc19vYmplY3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoISpub2RlX3Jlc19vYmopIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwkoKm5vZGVfcmVzX29iaiktPmhub2RlID0gaG5vZGU7CisJcmV0dmFsID0gaWRyX2dldF9uZXcoY3R4dC0+bm9kZV9pZCwgKm5vZGVfcmVzX29iaiwKKwkJCQkJCSYoKm5vZGVfcmVzX29iaiktPmlkKTsKKwlpZiAocmV0dmFsID09IC1FQUdBSU4pIHsKKwkJaWYgKCFpZHJfcHJlX2dldChjdHh0LT5ub2RlX2lkLCBHRlBfS0VSTkVMKSkgeworCQkJcHJfZXJyKCIlczogT1VUIE9GIE1FTU9SWVxuIiwgX19mdW5jX18pOworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCWdvdG8gZnVuY19lbmQ7CisJCX0KKworCQlyZXR2YWwgPSBpZHJfZ2V0X25ldyhjdHh0LT5ub2RlX2lkLCAqbm9kZV9yZXNfb2JqLAorCQkJCQkJJigqbm9kZV9yZXNfb2JqKS0+aWQpOworCX0KKwlpZiAocmV0dmFsKSB7CisJCXByX2VycigiJXM6IEZBSUxFRCwgSURSIGlzIEZVTExcbiIsIF9fZnVuY19fKTsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CitmdW5jX2VuZDoKKwlpZiAoc3RhdHVzKQorCQlrZnJlZSgqbm9kZV9yZXNfb2JqKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIFJlbGVhc2UgYWxsIE5vZGUgcmVzb3VyY2VzIGFuZCBpdHMgY29udGV4dAorICogQWN0dWFsIE5vZGUgRGUtQWxsb2NhdGlvbiAqLworc3RhdGljIGludCBkcnZfcHJvY19mcmVlX25vZGVfcmVzKGludCBpZCwgdm9pZCAqcCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpjdHh0ID0gZGF0YTsKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBub2RlX3Jlc19vYmplY3QgKm5vZGVfcmVzX29iaiA9IHA7CisJdTMyIG5vZGVfc3RhdGU7CisKKwlpZiAobm9kZV9yZXNfb2JqLT5ub2RlX2FsbG9jYXRlZCkgeworCQlub2RlX3N0YXRlID0gbm9kZV9nZXRfc3RhdGUobm9kZV9yZXNfb2JqLT5obm9kZSk7CisJCWlmIChub2RlX3N0YXRlIDw9IE5PREVfREVMRVRJTkcpIHsKKwkJCWlmICgobm9kZV9zdGF0ZSA9PSBOT0RFX1JVTk5JTkcpIHx8CisJCQkgICAgKG5vZGVfc3RhdGUgPT0gTk9ERV9QQVVTRUQpIHx8CisJCQkgICAgKG5vZGVfc3RhdGUgPT0gTk9ERV9URVJNSU5BVElORykpCisJCQkJbm9kZV90ZXJtaW5hdGUKKwkJCQkgICAgKG5vZGVfcmVzX29iai0+aG5vZGUsICZzdGF0dXMpOworCisJCQlub2RlX2RlbGV0ZShub2RlX3Jlc19vYmosIGN0eHQpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIFJlbGVhc2UgYWxsIE1hcHBlZCBhbmQgUmVzZXJ2ZWQgRE1NIHJlc291cmNlcyAqLworaW50IGRydl9yZW1vdmVfYWxsX2RtbV9yZXNfZWxlbWVudHModm9pZCAqcHJvY2Vzc19jdHh0KQoreworCXN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKmN0eHQgPSAoc3RydWN0IHByb2Nlc3NfY29udGV4dCAqKXByb2Nlc3NfY3R4dDsKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZG1tX21hcF9vYmplY3QgKnRlbXBfbWFwLCAqbWFwX29iajsKKwlzdHJ1Y3QgZG1tX3Jzdl9vYmplY3QgKnRlbXBfcnN2LCAqcnN2X29iajsKKworCS8qIEZyZWUgRE1NIG1hcHBlZCBtZW1vcnkgcmVzb3VyY2VzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1hcF9vYmosIHRlbXBfbWFwLCAmY3R4dC0+ZG1tX21hcF9saXN0LCBsaW5rKSB7CisJCXN0YXR1cyA9IHByb2NfdW5fbWFwKGN0eHQtPmhwcm9jZXNzb3IsCisJCQkJICAgICAodm9pZCAqKW1hcF9vYmotPmRzcF9hZGRyLCBjdHh0KTsKKwkJaWYgKHN0YXR1cykKKwkJCXByX2VycigiJXM6IHByb2NfdW5fbWFwIGZhaWxlZCEiCisJCQkgICAgICAgIiBzdGF0dXMgPSAweCV4biIsIF9fZnVuY19fLCBzdGF0dXMpOworCX0KKworCS8qIEZyZWUgRE1NIHJlc2VydmVkIG1lbW9yeSByZXNvdXJjZXMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnN2X29iaiwgdGVtcF9yc3YsICZjdHh0LT5kbW1fcnN2X2xpc3QsIGxpbmspIHsKKwkJc3RhdHVzID0gcHJvY191bl9yZXNlcnZlX21lbW9yeShjdHh0LT5ocHJvY2Vzc29yLCAodm9pZCAqKQorCQkJCQkJcnN2X29iai0+ZHNwX3Jlc2VydmVkX2FkZHIsCisJCQkJCQljdHh0KTsKKwkJaWYgKHN0YXR1cykKKwkJCXByX2VycigiJXM6IHByb2NfdW5fcmVzZXJ2ZV9tZW1vcnkgZmFpbGVkISIKKwkJCSAgICAgICAiIHN0YXR1cyA9IDB4JXhuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIFVwZGF0ZSBOb2RlIGFsbG9jYXRpb24gc3RhdHVzICovCit2b2lkIGRydl9wcm9jX25vZGVfdXBkYXRlX3N0YXR1cyh2b2lkICpub2RlX3Jlc291cmNlLCBzMzIgc3RhdHVzKQoreworCXN0cnVjdCBub2RlX3Jlc19vYmplY3QgKm5vZGVfcmVzX29iaiA9CisJICAgIChzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICopbm9kZV9yZXNvdXJjZTsKKwlEQkNfQVNTRVJUKG5vZGVfcmVzb3VyY2UgIT0gTlVMTCk7CisJbm9kZV9yZXNfb2JqLT5ub2RlX2FsbG9jYXRlZCA9IHN0YXR1czsKK30KKworLyogVXBkYXRlIE5vZGUgSGVhcCBzdGF0dXMgKi8KK3ZvaWQgZHJ2X3Byb2Nfbm9kZV91cGRhdGVfaGVhcF9zdGF0dXModm9pZCAqbm9kZV9yZXNvdXJjZSwgczMyIHN0YXR1cykKK3sKKwlzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICpub2RlX3Jlc19vYmogPQorCSAgICAoc3RydWN0IG5vZGVfcmVzX29iamVjdCAqKW5vZGVfcmVzb3VyY2U7CisJREJDX0FTU0VSVChub2RlX3Jlc291cmNlICE9IE5VTEwpOworCW5vZGVfcmVzX29iai0+aGVhcF9hbGxvY2F0ZWQgPSBzdGF0dXM7Cit9CisKKy8qIFJlbGVhc2UgYWxsIE5vZGUgcmVzb3VyY2VzIGFuZCBpdHMgY29udGV4dAorKiBUaGlzIGlzIGNhbGxlZCBmcm9tIC5icmlkZ2VfcmVsZWFzZS4KKyAqLworaW50IGRydl9yZW1vdmVfYWxsX25vZGVfcmVzX2VsZW1lbnRzKHZvaWQgKnByb2Nlc3NfY3R4dCkKK3sKKwlzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpjdHh0ID0gcHJvY2Vzc19jdHh0OworCisJaWRyX2Zvcl9lYWNoKGN0eHQtPm5vZGVfaWQsIGRydl9wcm9jX2ZyZWVfbm9kZV9yZXMsIGN0eHQpOworCWlkcl9kZXN0cm95KGN0eHQtPm5vZGVfaWQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEFsbG9jYXRlIHRoZSBTVFJNIHJlc291cmNlIGVsZW1lbnQKKyogVGhpcyBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGFjdHVhbCByZXNvdXJjZSBpcyBhbGxvY2F0ZWQKKyAqLworaW50IGRydl9wcm9jX2luc2VydF9zdHJtX3Jlc19lbGVtZW50KHZvaWQgKnN0cmVhbV9vYmosCisJCQkJCSAgICB2b2lkICpzdHJtX3Jlcywgdm9pZCAqcHJvY2Vzc19jdHh0KQoreworCXN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKipwc3RybV9yZXMgPQorCSAgICAoc3RydWN0IHN0cm1fcmVzX29iamVjdCAqKilzdHJtX3JlczsKKwlzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpjdHh0ID0gKHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKilwcm9jZXNzX2N0eHQ7CisJaW50IHN0YXR1cyA9IDA7CisJaW50IHJldHZhbDsKKworCSpwc3RybV9yZXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RybV9yZXNfb2JqZWN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCpwc3RybV9yZXMgPT0gTlVMTCkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCSgqcHN0cm1fcmVzKS0+aHN0cmVhbSA9IHN0cmVhbV9vYmo7CisJcmV0dmFsID0gaWRyX2dldF9uZXcoY3R4dC0+c3RyZWFtX2lkLCAqcHN0cm1fcmVzLAorCQkJCQkJJigqcHN0cm1fcmVzKS0+aWQpOworCWlmIChyZXR2YWwgPT0gLUVBR0FJTikgeworCQlpZiAoIWlkcl9wcmVfZ2V0KGN0eHQtPnN0cmVhbV9pZCwgR0ZQX0tFUk5FTCkpIHsKKwkJCXByX2VycigiJXM6IE9VVCBPRiBNRU1PUllcbiIsIF9fZnVuY19fKTsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlnb3RvIGZ1bmNfZW5kOworCQl9CisKKwkJcmV0dmFsID0gaWRyX2dldF9uZXcoY3R4dC0+c3RyZWFtX2lkLCAqcHN0cm1fcmVzLAorCQkJCQkJJigqcHN0cm1fcmVzKS0+aWQpOworCX0KKwlpZiAocmV0dmFsKSB7CisJCXByX2VycigiJXM6IEZBSUxFRCwgSURSIGlzIEZVTExcbiIsIF9fZnVuY19fKTsKKwkJc3RhdHVzID0gLUVQRVJNOworCX0KKworZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBkcnZfcHJvY19mcmVlX3N0cm1fcmVzKGludCBpZCwgdm9pZCAqcCwgdm9pZCAqcHJvY2Vzc19jdHh0KQoreworCXN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKmN0eHQgPSBwcm9jZXNzX2N0eHQ7CisJc3RydWN0IHN0cm1fcmVzX29iamVjdCAqc3RybV9yZXMgPSBwOworCXN0cnVjdCBzdHJlYW1faW5mbyBzdHJtX2luZm87CisJc3RydWN0IGRzcF9zdHJlYW1pbmZvIHVzZXI7CisJdTggKiphcF9idWZmZXIgPSBOVUxMOworCXU4ICpidWZfcHRyOworCXUzMiB1bF9ieXRlczsKKwl1MzIgZHdfYXJnOworCXMzMiB1bF9idWZfc2l6ZTsKKworCWlmIChzdHJtX3Jlcy0+bnVtX2J1ZnMpIHsKKwkJYXBfYnVmZmVyID0ga21hbGxvYygoc3RybV9yZXMtPm51bV9idWZzICoKKwkJCQkgICAgICAgc2l6ZW9mKHU4ICopKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChhcF9idWZmZXIpIHsKKwkJCXN0cm1fZnJlZV9idWZmZXIoc3RybV9yZXMsCisJCQkJCQkgIGFwX2J1ZmZlciwKKwkJCQkJCSAgc3RybV9yZXMtPm51bV9idWZzLAorCQkJCQkJICBjdHh0KTsKKwkJCWtmcmVlKGFwX2J1ZmZlcik7CisJCX0KKwl9CisJc3RybV9pbmZvLnVzZXJfc3RybSA9ICZ1c2VyOworCXVzZXIubnVtYmVyX2J1ZnNfaW5fc3RyZWFtID0gMDsKKwlzdHJtX2dldF9pbmZvKHN0cm1fcmVzLT5oc3RyZWFtLCAmc3RybV9pbmZvLCBzaXplb2Yoc3RybV9pbmZvKSk7CisJd2hpbGUgKHVzZXIubnVtYmVyX2J1ZnNfaW5fc3RyZWFtLS0pCisJCXN0cm1fcmVjbGFpbShzdHJtX3Jlcy0+aHN0cmVhbSwgJmJ1Zl9wdHIsICZ1bF9ieXRlcywKKwkJCSAgICAgKHUzMiAqKSAmdWxfYnVmX3NpemUsICZkd19hcmcpOworCXN0cm1fY2xvc2Uoc3RybV9yZXMsIGN0eHQpOworCXJldHVybiAwOworfQorCisvKiBSZWxlYXNlIGFsbCBTdHJlYW0gcmVzb3VyY2VzIGFuZCBpdHMgY29udGV4dAorKiBUaGlzIGlzIGNhbGxlZCBmcm9tIC5icmlkZ2VfcmVsZWFzZS4KKyAqLworaW50IGRydl9yZW1vdmVfYWxsX3N0cm1fcmVzX2VsZW1lbnRzKHZvaWQgKnByb2Nlc3NfY3R4dCkKK3sKKwlzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpjdHh0ID0gcHJvY2Vzc19jdHh0OworCisJaWRyX2Zvcl9lYWNoKGN0eHQtPnN0cmVhbV9pZCwgZHJ2X3Byb2NfZnJlZV9zdHJtX3JlcywgY3R4dCk7CisJaWRyX2Rlc3Ryb3koY3R4dC0+c3RyZWFtX2lkKTsKKworCXJldHVybiAwOworfQorCisvKiBVcGRhdGluZyB0aGUgc3RyZWFtIHJlc291cmNlIGVsZW1lbnQgKi8KK2ludCBkcnZfcHJvY191cGRhdGVfc3RybV9yZXModTMyIG51bV9idWZzLCB2b2lkICpzdHJtX3Jlc291cmNlcykKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3Qgc3RybV9yZXNfb2JqZWN0ICoqc3RybV9yZXMgPQorCSAgICAoc3RydWN0IHN0cm1fcmVzX29iamVjdCAqKilzdHJtX3Jlc291cmNlczsKKworCSgqc3RybV9yZXMpLT5udW1fYnVmcyA9IG51bV9idWZzOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIEdQUCBQUk9DRVNTIENMRUFOVVAgQ09ERSBFTkQgKi8KKworLyoKKyAqICA9PT09PT09PSA9IGRydl9jcmVhdGUgPT09PT09PT0gPQorICogIFB1cnBvc2U6CisgKiAgICAgIERSViBPYmplY3QgZ2V0cyBjcmVhdGVkIG9ubHkgb25jZSBkdXJpbmcgRHJpdmVyIExvYWRpbmcuCisgKi8KK2ludCBkcnZfY3JlYXRlKHN0cnVjdCBkcnZfb2JqZWN0ICoqZHJ2X29iaikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZHJ2X29iamVjdCAqcGRydl9vYmplY3QgPSBOVUxMOworCisJREJDX1JFUVVJUkUoZHJ2X29iaiAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlwZHJ2X29iamVjdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcnZfb2JqZWN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBkcnZfb2JqZWN0KSB7CisJCS8qIENyZWF0ZSBhbmQgSW5pdGlhbGl6ZSBMaXN0IG9mIGRldmljZSBvYmplY3RzICovCisJCXBkcnZfb2JqZWN0LT5kZXZfbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsc3RfbGlzdCksCisJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmIChwZHJ2X29iamVjdC0+ZGV2X2xpc3QpIHsKKwkJCS8qIENyZWF0ZSBhbmQgSW5pdGlhbGl6ZSBMaXN0IG9mIGRldmljZSBFeHRlbnNpb24gKi8KKwkJCXBkcnZfb2JqZWN0LT5kZXZfbm9kZV9zdHJpbmcgPQorCQkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsc3RfbGlzdCksIEdGUF9LRVJORUwpOworCQkJaWYgKCEocGRydl9vYmplY3QtPmRldl9ub2RlX3N0cmluZykpIHsKKwkJCQlzdGF0dXMgPSAtRVBFUk07CisJCQl9IGVsc2UgeworCQkJCUlOSVRfTElTVF9IRUFEKCZwZHJ2X29iamVjdC0+CisJCQkJCSAgICAgICBkZXZfbm9kZV9zdHJpbmctPmhlYWQpOworCQkJCUlOSVRfTElTVF9IRUFEKCZwZHJ2X29iamVjdC0+ZGV2X2xpc3QtPmhlYWQpOworCQkJfQorCQl9IGVsc2UgeworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJfQorCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJfQorCS8qIFN0b3JlIHRoZSBEUlYgT2JqZWN0IGluIHRoZSBSZWdpc3RyeSAqLworCWlmICghc3RhdHVzKQorCQlzdGF0dXMgPSBjZmdfc2V0X29iamVjdCgodTMyKSBwZHJ2X29iamVjdCwgUkVHX0RSVl9PQkpFQ1QpOworCWlmICghc3RhdHVzKSB7CisJCSpkcnZfb2JqID0gcGRydl9vYmplY3Q7CisJfSBlbHNlIHsKKwkJa2ZyZWUocGRydl9vYmplY3QtPmRldl9saXN0KTsKKwkJa2ZyZWUocGRydl9vYmplY3QtPmRldl9ub2RlX3N0cmluZyk7CisJCS8qIEZyZWUgdGhlIERSViBPYmplY3QgKi8KKwkJa2ZyZWUocGRydl9vYmplY3QpOworCX0KKworCURCQ19FTlNVUkUoc3RhdHVzIHx8IHBkcnZfb2JqZWN0KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRydl9leGl0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGlzY29udGludWUgdXNhZ2Ugb2YgdGhlIERSViBtb2R1bGUuCisgKi8KK3ZvaWQgZHJ2X2V4aXQodm9pZCkKK3sKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlyZWZzLS07CisKKwlEQkNfRU5TVVJFKHJlZnMgPj0gMCk7Cit9CisKKy8qCisgKiAgPT09PT09PT0gPSBkcnZfZGVzdHJveSA9PT09PT09PSA9CisgKiAgcHVycG9zZToKKyAqICAgICAgSW52b2tlZCBkdXJpbmcgYnJpZGdlIGRlLWluaXRpYWxpemF0aW9uCisgKi8KK2ludCBkcnZfZGVzdHJveShzdHJ1Y3QgZHJ2X29iamVjdCAqZHJpdmVyX29iaikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZHJ2X29iamVjdCAqcGRydl9vYmplY3QgPSAoc3RydWN0IGRydl9vYmplY3QgKilkcml2ZXJfb2JqOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKHBkcnZfb2JqZWN0KTsKKworCS8qCisJICogIERlbGV0ZSB0aGUgTGlzdCBpZiBpdCBleGlzdHMuU2hvdWxkIG5vdCBjb21lIGhlcmUKKwkgKiAgYXMgdGhlIGRydl9yZW1vdmVfZGV2X29iamVjdCBhbmQgdGhlIExhc3QgZHJ2X3JlcXVlc3RfcmVzb3VyY2VzCisJICogIHJlbW92ZXMgdGhlIGxpc3QgaWYgdGhlIGxpc3RzIGFyZSBlbXB0eS4KKwkgKi8KKwlrZnJlZShwZHJ2X29iamVjdC0+ZGV2X2xpc3QpOworCWtmcmVlKHBkcnZfb2JqZWN0LT5kZXZfbm9kZV9zdHJpbmcpOworCWtmcmVlKHBkcnZfb2JqZWN0KTsKKwkvKiBVcGRhdGUgdGhlIERSViBPYmplY3QgaW4gUmVnaXN0cnkgdG8gYmUgMCAqLworCSh2b2lkKWNmZ19zZXRfb2JqZWN0KDAsIFJFR19EUlZfT0JKRUNUKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZHJ2X2dldF9kZXZfb2JqZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgR2l2ZW4gYSBpbmRleCwgcmV0dXJucyBhIGhhbmRsZSB0byBEZXZPYmplY3QgZnJvbSB0aGUgbGlzdC4KKyAqLworaW50IGRydl9nZXRfZGV2X29iamVjdCh1MzIgaW5kZXgsIHN0cnVjdCBkcnZfb2JqZWN0ICpoZHJ2X29iaiwKKwkJCSAgICAgIHN0cnVjdCBkZXZfb2JqZWN0ICoqZGV2aWNlX29iaikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKyNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfREVCVUcKKwkvKiB1c2VkIG9ubHkgZm9yIEFzc2VydGlvbnMgYW5kIGRlYnVnIG1lc3NhZ2VzICovCisJc3RydWN0IGRydl9vYmplY3QgKnBkcnZfb2JqID0gKHN0cnVjdCBkcnZfb2JqZWN0ICopaGRydl9vYmo7CisjZW5kaWYKKwlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iajsKKwl1MzIgaTsKKwlEQkNfUkVRVUlSRShwZHJ2X29iaik7CisJREJDX1JFUVVJUkUoZGV2aWNlX29iaiAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShpbmRleCA+PSAwKTsKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX0FTU0VSVCghKExTVF9JU19FTVBUWShwZHJ2X29iai0+ZGV2X2xpc3QpKSk7CisKKwlkZXZfb2JqID0gKHN0cnVjdCBkZXZfb2JqZWN0ICopZHJ2X2dldF9maXJzdF9kZXZfb2JqZWN0KCk7CisJZm9yIChpID0gMDsgaSA8IGluZGV4OyBpKyspIHsKKwkJZGV2X29iaiA9CisJCSAgICAoc3RydWN0IGRldl9vYmplY3QgKilkcnZfZ2V0X25leHRfZGV2X29iamVjdCgodTMyKSBkZXZfb2JqKTsKKwl9CisJaWYgKGRldl9vYmopIHsKKwkJKmRldmljZV9vYmogPSAoc3RydWN0IGRldl9vYmplY3QgKilkZXZfb2JqOworCX0gZWxzZSB7CisJCSpkZXZpY2Vfb2JqID0gTlVMTDsKKwkJc3RhdHVzID0gLUVQRVJNOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZHJ2X2dldF9maXJzdF9kZXZfb2JqZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIGZpcnN0IERldmljZSBPYmplY3QgaGFuZGxlIGZyb20gYW4gaW50ZXJuYWwgbGlua2VkIGxpc3Qgb2YKKyAqICAgICAgb2YgREVWX09CSkVDVHMgbWFpbnRhaW5lZCBieSBEUlYuCisgKi8KK3UzMiBkcnZfZ2V0X2ZpcnN0X2Rldl9vYmplY3Qodm9pZCkKK3sKKwl1MzIgZHdfZGV2X29iamVjdCA9IDA7CisJc3RydWN0IGRydl9vYmplY3QgKnBkcnZfb2JqOworCisJaWYgKCFjZmdfZ2V0X29iamVjdCgodTMyICopICZwZHJ2X29iaiwgUkVHX0RSVl9PQkpFQ1QpKSB7CisJCWlmICgocGRydl9vYmotPmRldl9saXN0ICE9IE5VTEwpICYmCisJCSAgICAhTFNUX0lTX0VNUFRZKHBkcnZfb2JqLT5kZXZfbGlzdCkpCisJCQlkd19kZXZfb2JqZWN0ID0gKHUzMikgbHN0X2ZpcnN0KHBkcnZfb2JqLT5kZXZfbGlzdCk7CisJfQorCisJcmV0dXJuIGR3X2Rldl9vYmplY3Q7Cit9CisKKy8qCisgKiAgPT09PT09PT0gRFJWX0dldEZpcnN0RGV2Tm9kZVN0cmluZyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIHRoZSBmaXJzdCBEZXZpY2UgRXh0ZW5zaW9uIGZyb20gYW4gaW50ZXJuYWwgbGlua2VkIGxpc3Qgb2YKKyAqICAgICAgb2YgUG9pbnRlciB0byBkZXZfbm9kZSBTdHJpbmdzIG1haW50YWluZWQgYnkgRFJWLgorICovCit1MzIgZHJ2X2dldF9maXJzdF9kZXZfZXh0ZW5zaW9uKHZvaWQpCit7CisJdTMyIGR3X2Rldl9leHRlbnNpb24gPSAwOworCXN0cnVjdCBkcnZfb2JqZWN0ICpwZHJ2X29iajsKKworCWlmICghY2ZnX2dldF9vYmplY3QoKHUzMiAqKSAmcGRydl9vYmosIFJFR19EUlZfT0JKRUNUKSkgeworCisJCWlmICgocGRydl9vYmotPmRldl9ub2RlX3N0cmluZyAhPSBOVUxMKSAmJgorCQkgICAgIUxTVF9JU19FTVBUWShwZHJ2X29iai0+ZGV2X25vZGVfc3RyaW5nKSkgeworCQkJZHdfZGV2X2V4dGVuc2lvbiA9CisJCQkgICAgKHUzMikgbHN0X2ZpcnN0KHBkcnZfb2JqLT5kZXZfbm9kZV9zdHJpbmcpOworCQl9CisJfQorCisJcmV0dXJuIGR3X2Rldl9leHRlbnNpb247Cit9CisKKy8qCisgKiAgPT09PT09PT0gZHJ2X2dldF9uZXh0X2Rldl9vYmplY3QgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgbmV4dCBEZXZpY2UgT2JqZWN0IGhhbmRsZSBmcm9tIGFuIGludGVybmFsIGxpbmtlZCBsaXN0IG9mCisgKiAgICAgIG9mIERFVl9PQkpFQ1RzIG1haW50YWluZWQgYnkgRFJWLCBhZnRlciBoYXZpbmcgcHJldmlvdXNseSBjYWxsZWQKKyAqICAgICAgZHJ2X2dldF9maXJzdF9kZXZfb2JqZWN0KCkgYW5kIHplcm8gb3IgbW9yZSBEUlZfR2V0TmV4dC4KKyAqLwordTMyIGRydl9nZXRfbmV4dF9kZXZfb2JqZWN0KHUzMiBoZGV2X29iaikKK3sKKwl1MzIgZHdfbmV4dF9kZXZfb2JqZWN0ID0gMDsKKwlzdHJ1Y3QgZHJ2X29iamVjdCAqcGRydl9vYmo7CisKKwlEQkNfUkVRVUlSRShoZGV2X29iaiAhPSAwKTsKKworCWlmICghY2ZnX2dldF9vYmplY3QoKHUzMiAqKSAmcGRydl9vYmosIFJFR19EUlZfT0JKRUNUKSkgeworCisJCWlmICgocGRydl9vYmotPmRldl9saXN0ICE9IE5VTEwpICYmCisJCSAgICAhTFNUX0lTX0VNUFRZKHBkcnZfb2JqLT5kZXZfbGlzdCkpIHsKKwkJCWR3X25leHRfZGV2X29iamVjdCA9ICh1MzIpIGxzdF9uZXh0KHBkcnZfb2JqLT5kZXZfbGlzdCwKKwkJCQkJCQkgICAgKHN0cnVjdCBsaXN0X2hlYWQgKikKKwkJCQkJCQkgICAgaGRldl9vYmopOworCQl9CisJfQorCXJldHVybiBkd19uZXh0X2Rldl9vYmplY3Q7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZHJ2X2dldF9uZXh0X2Rldl9leHRlbnNpb24gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgbmV4dCBEZXZpY2UgRXh0ZW5zaW9uIGZyb20gYW4gaW50ZXJuYWwgbGlua2VkIGxpc3Qgb2YKKyAqICAgICAgb2YgcG9pbnRlciB0byBEZXZOb2RlU3RyaW5nIG1haW50YWluZWQgYnkgRFJWLCBhZnRlciBoYXZpbmcgcHJldmlvdXNseQorICogICAgICBjYWxsZWQgZHJ2X2dldF9maXJzdF9kZXZfZXh0ZW5zaW9uKCkgYW5kIHplcm8gb3IgbW9yZQorICogICAgICBkcnZfZ2V0X25leHRfZGV2X2V4dGVuc2lvbigpLgorICovCit1MzIgZHJ2X2dldF9uZXh0X2Rldl9leHRlbnNpb24odTMyIGRldl9leHRlbnNpb24pCit7CisJdTMyIGR3X2Rldl9leHRlbnNpb24gPSAwOworCXN0cnVjdCBkcnZfb2JqZWN0ICpwZHJ2X29iajsKKworCURCQ19SRVFVSVJFKGRldl9leHRlbnNpb24gIT0gMCk7CisKKwlpZiAoIWNmZ19nZXRfb2JqZWN0KCh1MzIgKikgJnBkcnZfb2JqLCBSRUdfRFJWX09CSkVDVCkpIHsKKwkJaWYgKChwZHJ2X29iai0+ZGV2X25vZGVfc3RyaW5nICE9IE5VTEwpICYmCisJCSAgICAhTFNUX0lTX0VNUFRZKHBkcnZfb2JqLT5kZXZfbm9kZV9zdHJpbmcpKSB7CisJCQlkd19kZXZfZXh0ZW5zaW9uID0KKwkJCSAgICAodTMyKSBsc3RfbmV4dChwZHJ2X29iai0+ZGV2X25vZGVfc3RyaW5nLAorCQkJCQkgICAoc3RydWN0IGxpc3RfaGVhZCAqKWRldl9leHRlbnNpb24pOworCQl9CisJfQorCisJcmV0dXJuIGR3X2Rldl9leHRlbnNpb247Cit9CisKKy8qCisgKiAgPT09PT09PT0gZHJ2X2luaXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplIERSViBtb2R1bGUgcHJpdmF0ZSBzdGF0ZS4KKyAqLworaW50IGRydl9pbml0KHZvaWQpCit7CisJczMyIHJldCA9IDE7CQkvKiBmdW5jdGlvbiByZXR1cm4gdmFsdWUgKi8KKworCURCQ19SRVFVSVJFKHJlZnMgPj0gMCk7CisKKwlpZiAocmV0KQorCQlyZWZzKys7CisKKwlEQkNfRU5TVVJFKChyZXQgJiYgKHJlZnMgPiAwKSkgfHwgKCFyZXQgJiYgKHJlZnMgPj0gMCkpKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZHJ2X2luc2VydF9kZXZfb2JqZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW5zZXJ0IGEgRGV2T2JqZWN0IGludG8gdGhlIGxpc3Qgb2YgTWFuYWdlciBvYmplY3QuCisgKi8KK2ludCBkcnZfaW5zZXJ0X2Rldl9vYmplY3Qoc3RydWN0IGRydl9vYmplY3QgKmRyaXZlcl9vYmosCisJCQkJIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaikKK3sKKwlzdHJ1Y3QgZHJ2X29iamVjdCAqcGRydl9vYmplY3QgPSAoc3RydWN0IGRydl9vYmplY3QgKilkcml2ZXJfb2JqOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGhkZXZfb2JqICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHBkcnZfb2JqZWN0KTsKKwlEQkNfQVNTRVJUKHBkcnZfb2JqZWN0LT5kZXZfbGlzdCk7CisKKwlsc3RfcHV0X3RhaWwocGRydl9vYmplY3QtPmRldl9saXN0LCAoc3RydWN0IGxpc3RfaGVhZCAqKWhkZXZfb2JqKTsKKworCURCQ19FTlNVUkUoIUxTVF9JU19FTVBUWShwZHJ2X29iamVjdC0+ZGV2X2xpc3QpKTsKKworCXJldHVybiAwOworfQorCisvKgorICogID09PT09PT09IGRydl9yZW1vdmVfZGV2X29iamVjdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFNlYXJjaCBmb3IgYW5kIHJlbW92ZSBhIERldmljZU9iamVjdCBmcm9tIHRoZSBnaXZlbiBsaXN0IG9mIERSVgorICogICAgICBvYmplY3RzLgorICovCitpbnQgZHJ2X3JlbW92ZV9kZXZfb2JqZWN0KHN0cnVjdCBkcnZfb2JqZWN0ICpkcml2ZXJfb2JqLAorCQkJCSBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmopCit7CisJaW50IHN0YXR1cyA9IC1FUEVSTTsKKwlzdHJ1Y3QgZHJ2X29iamVjdCAqcGRydl9vYmplY3QgPSAoc3RydWN0IGRydl9vYmplY3QgKilkcml2ZXJfb2JqOworCXN0cnVjdCBsaXN0X2hlYWQgKmN1cl9lbGVtOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKHBkcnZfb2JqZWN0KTsKKwlEQkNfUkVRVUlSRShoZGV2X29iaiAhPSBOVUxMKTsKKworCURCQ19SRVFVSVJFKHBkcnZfb2JqZWN0LT5kZXZfbGlzdCAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRSghTFNUX0lTX0VNUFRZKHBkcnZfb2JqZWN0LT5kZXZfbGlzdCkpOworCisJLyogU2VhcmNoIGxpc3QgZm9yIHBfcHJvY19vYmplY3Q6ICovCisJZm9yIChjdXJfZWxlbSA9IGxzdF9maXJzdChwZHJ2X29iamVjdC0+ZGV2X2xpc3QpOyBjdXJfZWxlbSAhPSBOVUxMOworCSAgICAgY3VyX2VsZW0gPSBsc3RfbmV4dChwZHJ2X29iamVjdC0+ZGV2X2xpc3QsIGN1cl9lbGVtKSkgeworCQkvKiBJZiBmb3VuZCwgcmVtb3ZlIGl0LiAqLworCQlpZiAoKHN0cnVjdCBkZXZfb2JqZWN0ICopY3VyX2VsZW0gPT0gaGRldl9vYmopIHsKKwkJCWxzdF9yZW1vdmVfZWxlbShwZHJ2X29iamVjdC0+ZGV2X2xpc3QsIGN1cl9lbGVtKTsKKwkJCXN0YXR1cyA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKwkvKiBSZW1vdmUgbGlzdCBpZiBlbXB0eS4gKi8KKwlpZiAoTFNUX0lTX0VNUFRZKHBkcnZfb2JqZWN0LT5kZXZfbGlzdCkpIHsKKwkJa2ZyZWUocGRydl9vYmplY3QtPmRldl9saXN0KTsKKwkJcGRydl9vYmplY3QtPmRldl9saXN0ID0gTlVMTDsKKwl9CisJREJDX0VOU1VSRSgocGRydl9vYmplY3QtPmRldl9saXN0ID09IE5VTEwpIHx8CisJCSAgICFMU1RfSVNfRU1QVFkocGRydl9vYmplY3QtPmRldl9saXN0KSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRydl9yZXF1ZXN0X3Jlc291cmNlcyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlcXVlc3RzICByZXNvdXJjZXMgZnJvbSB0aGUgT1MuCisgKi8KK2ludCBkcnZfcmVxdWVzdF9yZXNvdXJjZXModTMyIGR3X2NvbnRleHQsIHUzMiAqZGV2X25vZGVfc3RyZykKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZHJ2X29iamVjdCAqcGRydl9vYmplY3Q7CisJc3RydWN0IGRydl9leHQgKnBzemRldl9ub2RlOworCisJREJDX1JFUVVJUkUoZHdfY29udGV4dCAhPSAwKTsKKwlEQkNfUkVRVUlSRShkZXZfbm9kZV9zdHJnICE9IE5VTEwpOworCisJLyoKKwkgKiAgQWxsb2NhdGUgbWVtb3J5IHRvIGhvbGQgdGhlIHN0cmluZy4gVGhpcyB3aWxsIGxpdmUgdW50aWxsCisJICogIGl0IGlzIGZyZWVkIGluIHRoZSBSZWxlYXNlIHJlc291cmNlcy4gVXBkYXRlIHRoZSBkcml2ZXIgb2JqZWN0CisJICogIGxpc3QuCisJICovCisKKwlzdGF0dXMgPSBjZmdfZ2V0X29iamVjdCgodTMyICopICZwZHJ2X29iamVjdCwgUkVHX0RSVl9PQkpFQ1QpOworCWlmICghc3RhdHVzKSB7CisJCXBzemRldl9ub2RlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRydl9leHQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHBzemRldl9ub2RlKSB7CisJCQlsc3RfaW5pdF9lbGVtKCZwc3pkZXZfbm9kZS0+bGluayk7CisJCQlzdHJuY3B5KHBzemRldl9ub2RlLT5zel9zdHJpbmcsCisJCQkJKGNoYXIgKilkd19jb250ZXh0LCBNQVhSRUdQQVRITEVOR1RIIC0gMSk7CisJCQlwc3pkZXZfbm9kZS0+c3pfc3RyaW5nW01BWFJFR1BBVEhMRU5HVEggLSAxXSA9ICdcMCc7CisJCQkvKiBVcGRhdGUgdGhlIERyaXZlciBPYmplY3QgTGlzdCAqLworCQkJKmRldl9ub2RlX3N0cmcgPSAodTMyKSBwc3pkZXZfbm9kZS0+c3pfc3RyaW5nOworCQkJbHN0X3B1dF90YWlsKHBkcnZfb2JqZWN0LT5kZXZfbm9kZV9zdHJpbmcsCisJCQkJICAgICAoc3RydWN0IGxpc3RfaGVhZCAqKXBzemRldl9ub2RlKTsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQkqZGV2X25vZGVfc3RyZyA9IDA7CisJCX0KKwl9IGVsc2UgeworCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBGYWlsZWQgdG8gZ2V0IERyaXZlciBPYmplY3QgZnJvbSBSZWdpc3RyeSIsCisJCQlfX2Z1bmNfXyk7CisJCSpkZXZfbm9kZV9zdHJnID0gMDsKKwl9CisKKwlEQkNfRU5TVVJFKCghc3RhdHVzICYmIGRldl9ub2RlX3N0cmcgIT0gTlVMTCAmJgorCQkgICAgIUxTVF9JU19FTVBUWShwZHJ2X29iamVjdC0+ZGV2X25vZGVfc3RyaW5nKSkgfHwKKwkJICAgKHN0YXR1cyAmJiAqZGV2X25vZGVfc3RyZyA9PSAwKSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRydl9yZWxlYXNlX3Jlc291cmNlcyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlbGVhc2VzICByZXNvdXJjZXMgZnJvbSB0aGUgT1MuCisgKi8KK2ludCBkcnZfcmVsZWFzZV9yZXNvdXJjZXModTMyIGR3X2NvbnRleHQsIHN0cnVjdCBkcnZfb2JqZWN0ICpoZHJ2X29iaikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZHJ2X29iamVjdCAqcGRydl9vYmplY3QgPSAoc3RydWN0IGRydl9vYmplY3QgKiloZHJ2X29iajsKKwlzdHJ1Y3QgZHJ2X2V4dCAqcHN6ZGV2X25vZGU7CisKKwkvKgorCSAqICBJcnJlc3BlY3RpdmUgb2YgdGhlIHN0YXR1cyBnbyBhaGVhZCBhbmQgY2xlYW4gaXQKKwkgKiAgVGhlIGZvbGxvd2luZyB3aWxsIG92ZXIgd3JpdGUgdGhlIHN0YXR1cy4KKwkgKi8KKwlmb3IgKHBzemRldl9ub2RlID0gKHN0cnVjdCBkcnZfZXh0ICopZHJ2X2dldF9maXJzdF9kZXZfZXh0ZW5zaW9uKCk7CisJICAgICBwc3pkZXZfbm9kZSAhPSBOVUxMOyBwc3pkZXZfbm9kZSA9IChzdHJ1Y3QgZHJ2X2V4dCAqKQorCSAgICAgZHJ2X2dldF9uZXh0X2Rldl9leHRlbnNpb24oKHUzMikgcHN6ZGV2X25vZGUpKSB7CisJCWlmICghcGRydl9vYmplY3QtPmRldl9ub2RlX3N0cmluZykgeworCQkJLyogV2hlbiB0aGlzIGNvdWxkIGhhcHBlbj8gKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICgodTMyKSBwc3pkZXZfbm9kZSA9PSBkd19jb250ZXh0KSB7CisJCQkvKiBGb3VuZCBpdCAqLworCQkJLyogRGVsZXRlIGZyb20gdGhlIERyaXZlciBvYmplY3QgbGlzdCAqLworCQkJbHN0X3JlbW92ZV9lbGVtKHBkcnZfb2JqZWN0LT5kZXZfbm9kZV9zdHJpbmcsCisJCQkJCShzdHJ1Y3QgbGlzdF9oZWFkICopcHN6ZGV2X25vZGUpOworCQkJa2ZyZWUoKHZvaWQgKilwc3pkZXZfbm9kZSk7CisJCQlicmVhazsKKwkJfQorCQkvKiBEZWxldGUgdGhlIExpc3QgaWYgaXQgaXMgZW1wdHkgKi8KKwkJaWYgKExTVF9JU19FTVBUWShwZHJ2X29iamVjdC0+ZGV2X25vZGVfc3RyaW5nKSkgeworCQkJa2ZyZWUocGRydl9vYmplY3QtPmRldl9ub2RlX3N0cmluZyk7CisJCQlwZHJ2X29iamVjdC0+ZGV2X25vZGVfc3RyaW5nID0gTlVMTDsKKwkJfQorCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHJlcXVlc3RfYnJpZGdlX3Jlc291cmNlcyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlc2VydmVzIHNoYXJlZCBtZW1vcnkgZm9yIGJyaWRnZS4KKyAqLworc3RhdGljIGludCByZXF1ZXN0X2JyaWRnZV9yZXNvdXJjZXMoc3RydWN0IGNmZ19ob3N0cmVzICpyZXMpCit7CisJc3RydWN0IGNmZ19ob3N0cmVzICpob3N0X3JlcyA9IHJlczsKKworCS8qIG51bV9tZW1fd2luZG93cyBtdXN0IG5vdCBiZSBtb3JlIHRoYW4gQ0ZHX01BWE1FTVJFR0lTVEVSUyAqLworCWhvc3RfcmVzLT5udW1fbWVtX3dpbmRvd3MgPSAyOworCisJLyogRmlyc3Qgd2luZG93IGlzIGZvciBEU1AgaW50ZXJuYWwgbWVtb3J5ICovCisJaG9zdF9yZXMtPmR3X3N5c19jdHJsX2Jhc2UgPSBpb3JlbWFwKE9NQVBfU1lTQ19CQVNFLCBPTUFQX1NZU0NfU0laRSk7CisJZGV2X2RiZyhicmlkZ2UsICJkd19tZW1fYmFzZVswXSAweCV4XG4iLCBob3N0X3Jlcy0+ZHdfbWVtX2Jhc2VbMF0pOworCWRldl9kYmcoYnJpZGdlLCAiZHdfbWVtX2Jhc2VbM10gMHgleFxuIiwgaG9zdF9yZXMtPmR3X21lbV9iYXNlWzNdKTsKKwlkZXZfZGJnKGJyaWRnZSwgImR3X2RtbXVfYmFzZSAlcFxuIiwgaG9zdF9yZXMtPmR3X2RtbXVfYmFzZSk7CisKKwkvKiBmb3IgMjR4eCBiYXNlIHBvcnQgaXMgbm90IG1hcHBpbmcgdGhlIG1hbW9yeSBmb3IgRFNQCisJICogaW50ZXJuYWwgbWVtb3J5IFRPRE8gRG8gYSBpb3JlbWFwIGhlcmUgKi8KKwkvKiBTZWNvbmQgd2luZG93IGlzIGZvciBEU1AgZXh0ZXJuYWwgbWVtb3J5IHNoYXJlZCB3aXRoIE1QVSAqLworCisJLyogVGhlc2UgYXJlIGhhcmQtY29kZWQgdmFsdWVzICovCisJaG9zdF9yZXMtPmJpcnFfcmVnaXN0ZXJzID0gMDsKKwlob3N0X3Jlcy0+YmlycV9hdHRyaWIgPSAwOworCWhvc3RfcmVzLT5kd19vZmZzZXRfZm9yX21vbml0b3IgPSAwOworCWhvc3RfcmVzLT5kd19jaG5sX29mZnNldCA9IDA7CisJLyogQ0hOTF9NQVhDSEFOTkVMUyAqLworCWhvc3RfcmVzLT5kd19udW1fY2hubHMgPSBDSE5MX01BWENIQU5ORUxTOworCWhvc3RfcmVzLT5kd19jaG5sX2J1Zl9zaXplID0gMHg0MDA7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICA9PT09PT09PSBkcnZfcmVxdWVzdF9icmlkZ2VfcmVzX2RzcCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlc2VydmVzIHNoYXJlZCBtZW1vcnkgZm9yIGJyaWRnZS4KKyAqLworaW50IGRydl9yZXF1ZXN0X2JyaWRnZV9yZXNfZHNwKHZvaWQgKipwaG9zdF9yZXNvdXJjZXMpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGNmZ19ob3N0cmVzICpob3N0X3JlczsKKwl1MzIgZHdfYnVmZl9zaXplOworCXUzMiBkbWFfYWRkcjsKKwl1MzIgc2htX3NpemU7CisJc3RydWN0IGRydl9kYXRhICpkcnZfZGF0YXAgPSBkZXZfZ2V0X2RydmRhdGEoYnJpZGdlKTsKKworCWR3X2J1ZmZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY2ZnX2hvc3RyZXMpOworCisJaG9zdF9yZXMgPSBremFsbG9jKGR3X2J1ZmZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoaG9zdF9yZXMgIT0gTlVMTCkgeworCQlyZXF1ZXN0X2JyaWRnZV9yZXNvdXJjZXMoaG9zdF9yZXMpOworCQkvKiBudW1fbWVtX3dpbmRvd3MgbXVzdCBub3QgYmUgbW9yZSB0aGFuIENGR19NQVhNRU1SRUdJU1RFUlMgKi8KKwkJaG9zdF9yZXMtPm51bV9tZW1fd2luZG93cyA9IDQ7CisKKwkJaG9zdF9yZXMtPmR3X21lbV9iYXNlWzBdID0gMDsKKwkJaG9zdF9yZXMtPmR3X21lbV9iYXNlWzJdID0gKHUzMikgaW9yZW1hcChPTUFQX0RTUF9NRU0xX0JBU0UsCisJCQkJCQkJIE9NQVBfRFNQX01FTTFfU0laRSk7CisJCWhvc3RfcmVzLT5kd19tZW1fYmFzZVszXSA9ICh1MzIpIGlvcmVtYXAoT01BUF9EU1BfTUVNMl9CQVNFLAorCQkJCQkJCSBPTUFQX0RTUF9NRU0yX1NJWkUpOworCQlob3N0X3Jlcy0+ZHdfbWVtX2Jhc2VbNF0gPSAodTMyKSBpb3JlbWFwKE9NQVBfRFNQX01FTTNfQkFTRSwKKwkJCQkJCQkgT01BUF9EU1BfTUVNM19TSVpFKTsKKwkJaG9zdF9yZXMtPmR3X3Blcl9iYXNlID0gaW9yZW1hcChPTUFQX1BFUl9DTV9CQVNFLAorCQkJCQkJT01BUF9QRVJfQ01fU0laRSk7CisJCWhvc3RfcmVzLT5kd19wZXJfcG1fYmFzZSA9ICh1MzIpIGlvcmVtYXAoT01BUF9QRVJfUFJNX0JBU0UsCisJCQkJCQkJIE9NQVBfUEVSX1BSTV9TSVpFKTsKKwkJaG9zdF9yZXMtPmR3X2NvcmVfcG1fYmFzZSA9ICh1MzIpIGlvcmVtYXAoT01BUF9DT1JFX1BSTV9CQVNFLAorCQkJCQkJCSAgT01BUF9DT1JFX1BSTV9TSVpFKTsKKwkJaG9zdF9yZXMtPmR3X2RtbXVfYmFzZSA9IGlvcmVtYXAoT01BUF9ETU1VX0JBU0UsCisJCQkJCQkgT01BUF9ETU1VX1NJWkUpOworCisJCWRldl9kYmcoYnJpZGdlLCAiZHdfbWVtX2Jhc2VbMF0gMHgleFxuIiwKKwkJCWhvc3RfcmVzLT5kd19tZW1fYmFzZVswXSk7CisJCWRldl9kYmcoYnJpZGdlLCAiZHdfbWVtX2Jhc2VbMV0gMHgleFxuIiwKKwkJCWhvc3RfcmVzLT5kd19tZW1fYmFzZVsxXSk7CisJCWRldl9kYmcoYnJpZGdlLCAiZHdfbWVtX2Jhc2VbMl0gMHgleFxuIiwKKwkJCWhvc3RfcmVzLT5kd19tZW1fYmFzZVsyXSk7CisJCWRldl9kYmcoYnJpZGdlLCAiZHdfbWVtX2Jhc2VbM10gMHgleFxuIiwKKwkJCWhvc3RfcmVzLT5kd19tZW1fYmFzZVszXSk7CisJCWRldl9kYmcoYnJpZGdlLCAiZHdfbWVtX2Jhc2VbNF0gMHgleFxuIiwKKwkJCWhvc3RfcmVzLT5kd19tZW1fYmFzZVs0XSk7CisJCWRldl9kYmcoYnJpZGdlLCAiZHdfZG1tdV9iYXNlICVwXG4iLCBob3N0X3Jlcy0+ZHdfZG1tdV9iYXNlKTsKKworCQlzaG1fc2l6ZSA9IGRydl9kYXRhcC0+c2htX3NpemU7CisJCWlmIChzaG1fc2l6ZSA+PSAweDEwMDAwKSB7CisJCQkvKiBBbGxvY2F0ZSBQaHlzaWNhbGx5IGNvbnRpZ3VvdXMsCisJCQkgKiBub24tY2FjaGVhYmxlICBtZW1vcnkgKi8KKwkJCWhvc3RfcmVzLT5kd19tZW1fYmFzZVsxXSA9CisJCQkgICAgKHUzMikgbWVtX2FsbG9jX3BoeXNfbWVtKHNobV9zaXplLCAweDEwMDAwMCwKKwkJCQkJCSAgICAgJmRtYV9hZGRyKTsKKwkJCWlmIChob3N0X3Jlcy0+ZHdfbWVtX2Jhc2VbMV0gPT0gMCkgeworCQkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQkJcHJfZXJyKCJzaG0gcmVzZXJ2YXRpb24gRmFpbGVkXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJaG9zdF9yZXMtPmR3X21lbV9sZW5ndGhbMV0gPSBzaG1fc2l6ZTsKKwkJCQlob3N0X3Jlcy0+ZHdfbWVtX3BoeXNbMV0gPSBkbWFfYWRkcjsKKworCQkJCWRldl9kYmcoYnJpZGdlLCAiJXM6IEJyaWRnZSBzaG0gYWRkcmVzcyAweCV4ICIKKwkJCQkJImRtYV9hZGRyICV4IHNpemUgJXhcbiIsIF9fZnVuY19fLAorCQkJCQlob3N0X3Jlcy0+ZHdfbWVtX2Jhc2VbMV0sCisJCQkJCWRtYV9hZGRyLCBzaG1fc2l6ZSk7CisJCQl9CisJCX0KKwkJaWYgKCFzdGF0dXMpIHsKKwkJCS8qIFRoZXNlIGFyZSBoYXJkLWNvZGVkIHZhbHVlcyAqLworCQkJaG9zdF9yZXMtPmJpcnFfcmVnaXN0ZXJzID0gMDsKKwkJCWhvc3RfcmVzLT5iaXJxX2F0dHJpYiA9IDA7CisJCQlob3N0X3Jlcy0+ZHdfb2Zmc2V0X2Zvcl9tb25pdG9yID0gMDsKKwkJCWhvc3RfcmVzLT5kd19jaG5sX29mZnNldCA9IDA7CisJCQkvKiBDSE5MX01BWENIQU5ORUxTICovCisJCQlob3N0X3Jlcy0+ZHdfbnVtX2NobmxzID0gQ0hOTF9NQVhDSEFOTkVMUzsKKwkJCWhvc3RfcmVzLT5kd19jaG5sX2J1Zl9zaXplID0gMHg0MDA7CisJCQlkd19idWZmX3NpemUgPSBzaXplb2Yoc3RydWN0IGNmZ19ob3N0cmVzKTsKKwkJfQorCQkqcGhvc3RfcmVzb3VyY2VzID0gaG9zdF9yZXM7CisJfQorCS8qIEVuZCBNZW0gYWxsb2MgKi8KKwlyZXR1cm4gc3RhdHVzOworfQorCit2b2lkIG1lbV9leHRfcGh5c19wb29sX2luaXQodTMyIHBvb2xfcGh5c19iYXNlLCB1MzIgcG9vbF9zaXplKQoreworCXUzMiBwb29sX3ZpcnRfYmFzZTsKKworCS8qIGdldCB0aGUgdmlydHVhbCBhZGRyZXNzIGZvciB0aGUgcGh5c2ljYWwgbWVtb3J5IHBvb2wgcGFzc2VkICovCisJcG9vbF92aXJ0X2Jhc2UgPSAodTMyKSBpb3JlbWFwKHBvb2xfcGh5c19iYXNlLCBwb29sX3NpemUpOworCisJaWYgKCh2b2lkICoqKXBvb2xfdmlydF9iYXNlID09IE5VTEwpIHsKKwkJcHJfZXJyKCIlczogZXh0ZXJuYWwgcGh5c2ljYWwgbWVtb3J5IG1hcCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJZXh0X3BoeXNfbWVtX3Bvb2xfZW5hYmxlZCA9IGZhbHNlOworCX0gZWxzZSB7CisJCWV4dF9tZW1fcG9vbC5waHlzX21lbV9iYXNlID0gcG9vbF9waHlzX2Jhc2U7CisJCWV4dF9tZW1fcG9vbC5waHlzX21lbV9zaXplID0gcG9vbF9zaXplOworCQlleHRfbWVtX3Bvb2wudmlydF9tZW1fYmFzZSA9IHBvb2xfdmlydF9iYXNlOworCQlleHRfbWVtX3Bvb2wubmV4dF9waHlzX2FsbG9jX3B0ciA9IHBvb2xfcGh5c19iYXNlOworCQlleHRfcGh5c19tZW1fcG9vbF9lbmFibGVkID0gdHJ1ZTsKKwl9Cit9CisKK3ZvaWQgbWVtX2V4dF9waHlzX3Bvb2xfcmVsZWFzZSh2b2lkKQoreworCWlmIChleHRfcGh5c19tZW1fcG9vbF9lbmFibGVkKSB7CisJCWlvdW5tYXAoKHZvaWQgKikoZXh0X21lbV9wb29sLnZpcnRfbWVtX2Jhc2UpKTsKKwkJZXh0X3BoeXNfbWVtX3Bvb2xfZW5hYmxlZCA9IGZhbHNlOworCX0KK30KKworLyoKKyAqICA9PT09PT09PSBtZW1fZXh0X3BoeXNfbWVtX2FsbG9jID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICBBbGxvY2F0ZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMsIHVuY2FjaGVkIG1lbW9yeSBmcm9tIGV4dGVybmFsIG1lbW9yeSBwb29sCisgKi8KKworc3RhdGljIHZvaWQgKm1lbV9leHRfcGh5c19tZW1fYWxsb2ModTMyIGJ5dGVzLCB1MzIgYWxpZ24sIHUzMiAqIHBoeXNfYWRkcikKK3sKKwl1MzIgbmV3X2FsbG9jX3B0cjsKKwl1MzIgb2Zmc2V0OworCXUzMiB2aXJ0X2FkZHI7CisKKwlpZiAoYWxpZ24gPT0gMCkKKwkJYWxpZ24gPSAxOworCisJaWYgKGJ5dGVzID4gKChleHRfbWVtX3Bvb2wucGh5c19tZW1fYmFzZSArIGV4dF9tZW1fcG9vbC5waHlzX21lbV9zaXplKQorCQkgICAgIC0gZXh0X21lbV9wb29sLm5leHRfcGh5c19hbGxvY19wdHIpKSB7CisJCXBoeXNfYWRkciA9IE5VTEw7CisJCXJldHVybiBOVUxMOworCX0gZWxzZSB7CisJCW9mZnNldCA9IChleHRfbWVtX3Bvb2wubmV4dF9waHlzX2FsbG9jX3B0ciAmIChhbGlnbiAtIDEpKTsKKwkJaWYgKG9mZnNldCA9PSAwKQorCQkJbmV3X2FsbG9jX3B0ciA9IGV4dF9tZW1fcG9vbC5uZXh0X3BoeXNfYWxsb2NfcHRyOworCQllbHNlCisJCQluZXdfYWxsb2NfcHRyID0gKGV4dF9tZW1fcG9vbC5uZXh0X3BoeXNfYWxsb2NfcHRyKSArCisJCQkgICAgKGFsaWduIC0gb2Zmc2V0KTsKKwkJaWYgKChuZXdfYWxsb2NfcHRyICsgYnl0ZXMpIDw9CisJCSAgICAoZXh0X21lbV9wb29sLnBoeXNfbWVtX2Jhc2UgKyBleHRfbWVtX3Bvb2wucGh5c19tZW1fc2l6ZSkpIHsKKwkJCS8qIHdlIGNhbiBhbGxvY2F0ZSAqLworCQkJKnBoeXNfYWRkciA9IG5ld19hbGxvY19wdHI7CisJCQlleHRfbWVtX3Bvb2wubmV4dF9waHlzX2FsbG9jX3B0ciA9CisJCQkgICAgbmV3X2FsbG9jX3B0ciArIGJ5dGVzOworCQkJdmlydF9hZGRyID0KKwkJCSAgICBleHRfbWVtX3Bvb2wudmlydF9tZW1fYmFzZSArIChuZXdfYWxsb2NfcHRyIC0KKwkJCQkJCQkgIGV4dF9tZW1fcG9vbC4KKwkJCQkJCQkgIHBoeXNfbWVtX2Jhc2UpOworCQkJcmV0dXJuICh2b2lkICopdmlydF9hZGRyOworCQl9IGVsc2UgeworCQkJKnBoeXNfYWRkciA9IDA7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KK30KKworLyoKKyAqICA9PT09PT09PSBtZW1fYWxsb2NfcGh5c19tZW0gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBBbGxvY2F0ZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMsIHVuY2FjaGVkIG1lbW9yeQorICovCit2b2lkICptZW1fYWxsb2NfcGh5c19tZW0odTMyIGJ5dGVfc2l6ZSwgdTMyIGFsaWduX21hc2ssCisJCQkJdTMyICpwaHlzaWNhbF9hZGRyZXNzKQoreworCXZvaWQgKnZhX21lbSA9IE5VTEw7CisJZG1hX2FkZHJfdCBwYV9tZW07CisKKwlpZiAoYnl0ZV9zaXplID4gMCkgeworCQlpZiAoZXh0X3BoeXNfbWVtX3Bvb2xfZW5hYmxlZCkgeworCQkJdmFfbWVtID0gbWVtX2V4dF9waHlzX21lbV9hbGxvYyhieXRlX3NpemUsIGFsaWduX21hc2ssCisJCQkJCQkJKHUzMiAqKSAmcGFfbWVtKTsKKwkJfSBlbHNlCisJCQl2YV9tZW0gPSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgYnl0ZV9zaXplLCAmcGFfbWVtLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKHZhX21lbSA9PSBOVUxMKQorCQkJKnBoeXNpY2FsX2FkZHJlc3MgPSAwOworCQllbHNlCisJCQkqcGh5c2ljYWxfYWRkcmVzcyA9IHBhX21lbTsKKwl9CisJcmV0dXJuIHZhX21lbTsKK30KKworLyoKKyAqICA9PT09PT09PSBtZW1fZnJlZV9waHlzX21lbSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEZyZWUgdGhlIGdpdmVuIGJsb2NrIG9mIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkuCisgKi8KK3ZvaWQgbWVtX2ZyZWVfcGh5c19tZW0odm9pZCAqdmlydHVhbF9hZGRyZXNzLCB1MzIgcGh5c2ljYWxfYWRkcmVzcywKKwkJICAgICAgIHUzMiBieXRlX3NpemUpCit7CisJREJDX1JFUVVJUkUodmlydHVhbF9hZGRyZXNzICE9IE5VTEwpOworCisJaWYgKCFleHRfcGh5c19tZW1fcG9vbF9lbmFibGVkKQorCQlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBieXRlX3NpemUsIHZpcnR1YWxfYWRkcmVzcywKKwkJCQkgIHBoeXNpY2FsX2FkZHJlc3MpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZHJ2X2ludGVyZmFjZS5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZHJ2X2ludGVyZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZTg5NDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9kcnZfaW50ZXJmYWNlLmMKQEAgLTAsMCArMSw2NTYgQEAKKy8qCisgKiBkcnZfaW50ZXJmYWNlLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogRFNQL0JJT1MgQnJpZGdlIGRyaXZlciBpbnRlcmZhY2UuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhvc3QgT1MgKi8KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorCisjaWZkZWYgTU9EVUxFCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRyYWNlICYgRGVidWcgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJjLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPUyBBZGFwdGF0aW9uIExheWVyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL3NlcnZpY2VzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Nsay5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9zeW5jLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQbGF0Zm9ybSBNYW5hZ2VyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGFwaS1pb2N0bC5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BhcGkuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwZHJ2Lmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZXNvdXJjZSBNYW5hZ2VyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL3B3ci5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhpcyAqLworI2luY2x1ZGUgPGRydl9pbnRlcmZhY2UuaD4KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9jZmcuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvcmVzb3VyY2VjbGVhbnVwLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NobmwuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvcHJvYy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXYuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHJ2ZGVmcy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kcnYuaD4KKworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9EVkZTCisjaW5jbHVkZSA8bWFjaC1vbWFwMi9vbWFwMy1vcHAuaD4KKyNlbmRpZgorCisjZGVmaW5lIEJSSURHRV9OQU1FICJDNjQxMCIKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHbG9iYWxzICovCisjZGVmaW5lIERSSVZFUl9OQU1FICAiRHNwQnJpZGdlIgorI2RlZmluZSBEU1BCUklER0VfVkVSU0lPTgkiMC4zIgorczMyIGRzcF9kZWJ1ZzsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb21hcF9kc3BicmlkZ2VfZGV2Oworc3RydWN0IGRldmljZSAqYnJpZGdlOworCisvKiBUaGlzIGlzIGEgdGVzdCB2YXJpYWJsZSB1c2VkIGJ5IEJyaWRnZSB0byB0ZXN0IGRpZmZlcmVudCBzbGVlcCBzdGF0ZXMgKi8KK3MzMiBkc3BfdGVzdF9zbGVlcHN0YXRlOworCitzdGF0aWMgc3RydWN0IGNkZXYgYnJpZGdlX2NkZXY7CisKK3N0YXRpYyBzdHJ1Y3QgY2xhc3MgKmJyaWRnZV9jbGFzczsKKworc3RhdGljIHUzMiBkcml2ZXJfY29udGV4dDsKK3N0YXRpYyBzMzIgZHJpdmVyX21ham9yOworc3RhdGljIGNoYXIgKmJhc2VfaW1nOworY2hhciAqaXZhX2ltZzsKK3N0YXRpYyBzMzIgc2htX3NpemUgPSAweDUwMDAwMDsJLyogNSBNQiAqLworc3RhdGljIGludCB0Y193b3Jkc3dhcG9uOwkvKiBEZWZhdWx0IHZhbHVlIGlzIGFsd2F5cyBmYWxzZSAqLworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9SRUNPVkVSWQorI2RlZmluZSBSRUNfVElNRU9VVCA1MDAwCS8qcmVjb3ZlcnkgdGltZW91dCBpbiBtc2VjcyAqLworc3RhdGljIGF0b21pY190IGJyaWRnZV9jcmVmOwkvKiBudW1iZXIgb2YgYnJpZGdlIG9wZW4gaGFuZGxlcyAqLworc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpicmlkZ2VfcmVjX3F1ZXVlOworc3RhdGljIHN0cnVjdCB3b3JrX3N0cnVjdCBicmlkZ2VfcmVjb3Zlcnlfd29yazsKK3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oYnJpZGdlX2NvbXApOworc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihicmlkZ2Vfb3Blbl9jb21wKTsKK3N0YXRpYyBib29sIHJlY292ZXI7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QTQorc3RydWN0IG9tYXAzNF94eF9icmlkZ2Vfc3VzcGVuZF9kYXRhIHsKKwlpbnQgc3VzcGVuZGVkOworCXdhaXRfcXVldWVfaGVhZF90IHN1c3BlbmRfd3E7Cit9OworCitzdGF0aWMgc3RydWN0IG9tYXAzNF94eF9icmlkZ2Vfc3VzcGVuZF9kYXRhIGJyaWRnZV9zdXNwZW5kX2RhdGE7CisKK3N0YXRpYyBpbnQgb21hcDM0X3h4YnJpZGdlX3N1c3BlbmRfbG9ja291dChzdHJ1Y3Qgb21hcDM0X3h4X2JyaWRnZV9zdXNwZW5kX2RhdGEKKwkJCQkJICAgKnMsIHN0cnVjdCBmaWxlICpmKQoreworCWlmICgocyktPnN1c3BlbmRlZCkgeworCQlpZiAoKGYpLT5mX2ZsYWdzICYgT19OT05CTE9DSykKKwkJCXJldHVybiAtRVBFUk07CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSgocyktPnN1c3BlbmRfd3EsIChzKS0+c3VzcGVuZGVkID09IDApOworCX0KKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCittb2R1bGVfcGFyYW0oZHNwX2RlYnVnLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhkc3BfZGVidWcsICJXYWl0IGFmdGVyIGxvYWRpbmcgRFNQIGltYWdlLiBkZWZhdWx0ID0gZmFsc2UiKTsKKworbW9kdWxlX3BhcmFtKGRzcF90ZXN0X3NsZWVwc3RhdGUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRzcF90ZXN0X3NsZWVwc3RhdGUsICJEU1AgU2xlZXAgc3RhdGUgPSAwIik7CisKK21vZHVsZV9wYXJhbShiYXNlX2ltZywgY2hhcnAsIDApOworTU9EVUxFX1BBUk1fREVTQyhiYXNlX2ltZywgIkRTUCBiYXNlIGltYWdlLCBkZWZhdWx0ID0gTlVMTCIpOworCittb2R1bGVfcGFyYW0oc2htX3NpemUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHNobV9zaXplLCAic2htIHNpemUsIGRlZmF1bHQgPSA0IE1CLCBtaW5pbXVtID0gNjQgS0IiKTsKKworbW9kdWxlX3BhcmFtKHRjX3dvcmRzd2Fwb24sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHRjX3dvcmRzd2Fwb24sICJUQyBXb3JkIFN3YXAgT3B0aW9uLiBkZWZhdWx0ID0gMCIpOworCitNT0RVTEVfQVVUSE9SKCJUZXhhcyBJbnN0cnVtZW50cyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oRFNQQlJJREdFX1ZFUlNJT04pOworCitzdGF0aWMgY2hhciAqZHJpdmVyX25hbWUgPSBEUklWRVJfTkFNRTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnJpZGdlX2ZvcHMgPSB7CisJLm9wZW4gPSBicmlkZ2Vfb3BlbiwKKwkucmVsZWFzZSA9IGJyaWRnZV9yZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bCA9IGJyaWRnZV9pb2N0bCwKKwkubW1hcCA9IGJyaWRnZV9tbWFwLAorfTsKKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIHUzMiB0aW1lX291dCA9IDEwMDA7CisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0RWRlMKK3MzMiBkc3BfbWF4X29wcHMgPSBWREQxX09QUDU7CisjZW5kaWYKKworLyogTWF4aW11bSBPcHBzIHRoYXQgY2FuIGJlIHJlcXVlc3RlZCBieSBJVkEgKi8KKy8qdmRkMSByYXRlIHRhYmxlICovCisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0RWRlMKK2NvbnN0IHN0cnVjdCBvbWFwX29wcCB2ZGQxX3JhdGVfdGFibGVfYnJpZGdlW10gPSB7CisJezAsIDAsIDB9LAorCS8qT1BQMSAqLworCXtTMTI1TSwgVkREMV9PUFAxLCAwfSwKKwkvKk9QUDIgKi8KKwl7UzI1ME0sIFZERDFfT1BQMiwgMH0sCisJLypPUFAzICovCisJe1M1MDBNLCBWREQxX09QUDMsIDB9LAorCS8qT1BQNCAqLworCXtTNTUwTSwgVkREMV9PUFA0LCAwfSwKKwkvKk9QUDUgKi8KKwl7UzYwME0sIFZERDFfT1BQNSwgMH0sCit9OworI2VuZGlmCisjZW5kaWYKKworc3RydWN0IGRzcGJyaWRnZV9wbGF0Zm9ybV9kYXRhICpvbWFwX2RzcGJyaWRnZV9wZGF0YTsKKwordTMyIHZkZDFfZHNwX2ZyZXFbNl1bNF0gPSB7CisJezAsIDAsIDAsIDB9LAorCS8qT1BQMSAqLworCXswLCA5MDAwMCwgMCwgODYwMDB9LAorCS8qT1BQMiAqLworCXswLCAxODAwMDAsIDgwMDAwLCAxNzAwMDB9LAorCS8qT1BQMyAqLworCXswLCAzNjAwMDAsIDE2MDAwMCwgMzQwMDAwfSwKKwkvKk9QUDQgKi8KKwl7MCwgMzk2MDAwLCAzMjUwMDAsIDM3NjAwMH0sCisJLypPUFA1ICovCisJezAsIDQzMDAwMCwgMzU1MDAwLCA0MzAwMDB9LAorfTsKKworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9SRUNPVkVSWQorc3RhdGljIHZvaWQgYnJpZGdlX3JlY292ZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXY7CisJc3RydWN0IGNmZ19kZXZub2RlICpkZXZfbm9kZTsKKwlpZiAoYXRvbWljX3JlYWQoJmJyaWRnZV9jcmVmKSkgeworCQlJTklUX0NPTVBMRVRJT04oYnJpZGdlX2NvbXApOworCQl3aGlsZSAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmYnJpZGdlX2NvbXAsCisJCQkJCQltc2Vjc190b19qaWZmaWVzKFJFQ19USU1FT1VUKSkpCisJCQlwcl9pbmZvKCIlczolZCBoYW5kbGUocykgc3RpbGwgb3BlbmVkXG4iLAorCQkJCQlfX2Z1bmNfXywgYXRvbWljX3JlYWQoJmJyaWRnZV9jcmVmKSk7CisJfQorCWRldiA9IGRldl9nZXRfZmlyc3QoKTsKKwlkZXZfZ2V0X2Rldl9ub2RlKGRldiwgJmRldl9ub2RlKTsKKwlpZiAoIWRldl9ub2RlIHx8IHByb2NfYXV0b19zdGFydChkZXZfbm9kZSwgZGV2KSkKKwkJcHJfZXJyKCJEU1AgY291bGQgbm90IGJlIHJlc3RhcnRlZFxuIik7CisJcmVjb3ZlciA9IGZhbHNlOworCWNvbXBsZXRlX2FsbCgmYnJpZGdlX29wZW5fY29tcCk7Cit9CisKK3ZvaWQgYnJpZGdlX3JlY292ZXJfc2NoZWR1bGUodm9pZCkKK3sKKwlJTklUX0NPTVBMRVRJT04oYnJpZGdlX29wZW5fY29tcCk7CisJcmVjb3ZlciA9IHRydWU7CisJcXVldWVfd29yayhicmlkZ2VfcmVjX3F1ZXVlLCAmYnJpZGdlX3JlY292ZXJ5X3dvcmspOworfQorI2VuZGlmCisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0RWRlMKK3N0YXRpYyBpbnQgZHNwYnJpZGdlX3NjYWxlX25vdGlmaWNhdGlvbihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm9wLAorCQl1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqcHRyKQoreworCXN0cnVjdCBkc3BicmlkZ2VfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPQorCQkJCQlvbWFwX2RzcGJyaWRnZV9kZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJaWYgKENQVUZSRVFfUE9TVENIQU5HRSA9PSB2YWwgJiYgcGRhdGEtPmRzcF9nZXRfb3BwKQorCQlwd3JfcG1fcG9zdF9zY2FsZShQUkNNX1ZERDEsIHBkYXRhLT5kc3BfZ2V0X29wcCgpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGl2YV9jbGtfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBkc3BicmlkZ2Vfc2NhbGVfbm90aWZpY2F0aW9uLAorCU5VTEwsCit9OworI2VuZGlmCisKKy8qKgorICogb21hcDNfYnJpZGdlX3N0YXJ0dXAoKSAtIHBlcmZvcm0gbG93IGxldmVyIGluaXRpYWxpemF0aW9ucworICogQHBkZXY6ICAgICAgcG9pbnRlciB0byBwbGF0Zm9ybSBkZXZpY2UKKyAqCisgKiBJbml0aWFsaXplcyByZWNvdmVyeSwgUE0gYW5kIERWRlMgcmVxdWlyZWQgZGF0YSwgYmVmb3JlIGNhbGxpbmcKKyAqIGNsayBhbmQgbWVtb3J5IGluaXQgcm91dGluZXMuCisgKi8KK3N0YXRpYyBpbnQgb21hcDNfYnJpZGdlX3N0YXJ0dXAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZHNwYnJpZGdlX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGRydl9kYXRhICpkcnZfZGF0YXAgPSBOVUxMOworCXUzMiBwaHlzX21lbWJhc2UsIHBoeXNfbWVtc2l6ZTsKKwlpbnQgZXJyOworCisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX1JFQ09WRVJZCisJYnJpZGdlX3JlY19xdWV1ZSA9IGNyZWF0ZV93b3JrcXVldWUoImJyaWRnZV9yZWNfcXVldWUiKTsKKwlJTklUX1dPUksoJmJyaWRnZV9yZWNvdmVyeV93b3JrLCBicmlkZ2VfcmVjb3Zlcik7CisJSU5JVF9DT01QTEVUSU9OKGJyaWRnZV9jb21wKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BNCisJLyogSW5pdGlhbGl6ZSB0aGUgd2FpdCBxdWV1ZSAqLworCWJyaWRnZV9zdXNwZW5kX2RhdGEuc3VzcGVuZGVkID0gMDsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZicmlkZ2Vfc3VzcGVuZF9kYXRhLnN1c3BlbmRfd3EpOworCisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0RWRlMKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQlwZGF0YS0+bXB1X3NwZWVkW2ldID0gdmRkMV9yYXRlX3RhYmxlX2JyaWRnZVtpXS5yYXRlOworCisJZXJyID0gY3B1ZnJlcV9yZWdpc3Rlcl9ub3RpZmllcigmaXZhX2Nsa19ub3RpZmllciwKKwkJCQkJQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKKwlpZiAoZXJyKQorCQlwcl9lcnIoIiVzOiBjbGtfbm90aWZpZXJfcmVnaXN0ZXIgZmFpbGVkIGZvciBpdmEyX2NrXG4iLAorCQkJCQkJCQlfX2Z1bmNfXyk7CisjZW5kaWYKKyNlbmRpZgorCisJZHNwX2Nsa19pbml0KCk7CisJc2VydmljZXNfaW5pdCgpOworCisJZHJ2X2RhdGFwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRydl9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkcnZfZGF0YXApIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnIxOworCX0KKworCWRydl9kYXRhcC0+c2htX3NpemUgPSBzaG1fc2l6ZTsKKwlkcnZfZGF0YXAtPnRjX3dvcmRzd2Fwb24gPSB0Y193b3Jkc3dhcG9uOworCisJaWYgKGJhc2VfaW1nKSB7CisJCWRydl9kYXRhcC0+YmFzZV9pbWcgPSBrbWFsbG9jKHN0cmxlbihiYXNlX2ltZykgKyAxLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFkcnZfZGF0YXAtPmJhc2VfaW1nKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBlcnIyOworCQl9CisJCXN0cm5jcHkoZHJ2X2RhdGFwLT5iYXNlX2ltZywgYmFzZV9pbWcsIHN0cmxlbihiYXNlX2ltZykgKyAxKTsKKwl9CisKKwlkZXZfc2V0X2RydmRhdGEoYnJpZGdlLCBkcnZfZGF0YXApOworCisJaWYgKHNobV9zaXplIDwgMHgxMDAwMCkgewkvKiA2NCBLQiAqLworCQllcnIgPSAtRUlOVkFMOworCQlwcl9lcnIoIiVzOiBzaG0gc2l6ZSBtdXN0IGJlIGF0IGxlYXN0IDY0IEtCXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyMzsKKwl9CisJZGV2X2RiZyhicmlkZ2UsICIlczogcmVxdWVzdGVkIHNobV9zaXplID0gMHgleFxuIiwgX19mdW5jX18sIHNobV9zaXplKTsKKworCXBoeXNfbWVtYmFzZSA9IHBkYXRhLT5waHlzX21lbXBvb2xfYmFzZTsKKwlwaHlzX21lbXNpemUgPSBwZGF0YS0+cGh5c19tZW1wb29sX3NpemU7CisJaWYgKHBoeXNfbWVtYmFzZSA+IDAgJiYgcGh5c19tZW1zaXplID4gMCkKKwkJbWVtX2V4dF9waHlzX3Bvb2xfaW5pdChwaHlzX21lbWJhc2UsIHBoeXNfbWVtc2l6ZSk7CisKKwlpZiAodGNfd29yZHN3YXBvbikKKwkJZGV2X2RiZyhicmlkZ2UsICIlczogVEMgV29yZCBTd2FwIGlzIGVuYWJsZWRcbiIsIF9fZnVuY19fKTsKKworCWRyaXZlcl9jb250ZXh0ID0gZHNwX2luaXQoJmVycik7CisJaWYgKGVycikgeworCQlwcl9lcnIoIkRTUCBCcmlkZ2UgZHJpdmVyIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyNDsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyNDoKKwltZW1fZXh0X3BoeXNfcG9vbF9yZWxlYXNlKCk7CitlcnIzOgorCWtmcmVlKGRydl9kYXRhcC0+YmFzZV9pbWcpOworZXJyMjoKKwlrZnJlZShkcnZfZGF0YXApOworZXJyMToKKyNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfRFZGUworCWNwdWZyZXFfdW5yZWdpc3Rlcl9ub3RpZmllcigmaXZhX2Nsa19ub3RpZmllciwKKwkJCQkJQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKKyNlbmRpZgorCWRzcF9jbGtfZXhpdCgpOworCXNlcnZpY2VzX2V4aXQoKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG9tYXAzNF94eF9icmlkZ2VfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgZXJyOworCWRldl90IGRldiA9IDA7CisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0RWRlMKKwlpbnQgaSA9IDA7CisjZW5kaWYKKworCW9tYXBfZHNwYnJpZGdlX2RldiA9IHBkZXY7CisKKwkvKiBHbG9iYWwgYnJpZGdlIGRldmljZSAqLworCWJyaWRnZSA9ICZvbWFwX2RzcGJyaWRnZV9kZXYtPmRldjsKKworCS8qIEJyaWRnZSBsb3cgbGV2ZWwgaW5pdGlhbGl6YXRpb25zICovCisJZXJyID0gb21hcDNfYnJpZGdlX3N0YXJ0dXAocGRldik7CisJaWYgKGVycikKKwkJZ290byBlcnIxOworCisJLyogdXNlIDIuNiBkZXZpY2UgbW9kZWwgKi8KKwllcnIgPSBhbGxvY19jaHJkZXZfcmVnaW9uKCZkZXYsIDAsIDEsIGRyaXZlcl9uYW1lKTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigiJXM6IENhbid0IGdldCBtYWpvciAlZFxuIiwgX19mdW5jX18sIGRyaXZlcl9tYWpvcik7CisJCWdvdG8gZXJyMTsKKwl9CisKKwljZGV2X2luaXQoJmJyaWRnZV9jZGV2LCAmYnJpZGdlX2ZvcHMpOworCWJyaWRnZV9jZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7CisKKwllcnIgPSBjZGV2X2FkZCgmYnJpZGdlX2NkZXYsIGRldiwgMSk7CisJaWYgKGVycikgeworCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gYWRkIGJyaWRnZSBkZXZpY2VcbiIsIF9fZnVuY19fKTsKKwkJZ290byBlcnIyOworCX0KKworCS8qIHVkZXYgc3VwcG9ydCAqLworCWJyaWRnZV9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInRpX2JyaWRnZSIpOworCWlmIChJU19FUlIoYnJpZGdlX2NsYXNzKSkgeworCQlwcl9lcnIoIiVzOiBFcnJvciBjcmVhdGluZyBicmlkZ2UgY2xhc3NcbiIsIF9fZnVuY19fKTsKKwkJZ290byBlcnIzOworCX0KKworCWRyaXZlcl9tYWpvciA9IE1BSk9SKGRldik7CisJZGV2aWNlX2NyZWF0ZShicmlkZ2VfY2xhc3MsIE5VTEwsIE1LREVWKGRyaXZlcl9tYWpvciwgMCksCisJCSAgICAgIE5VTEwsICJEc3BCcmlkZ2UiKTsKKwlwcl9pbmZvKCJEU1AgQnJpZGdlIGRyaXZlciBsb2FkZWRcbiIpOworCisJcmV0dXJuIDA7CisKK2VycjM6CisJY2Rldl9kZWwoJmJyaWRnZV9jZGV2KTsKK2VycjI6CisJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldiwgMSk7CitlcnIxOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG9tYXAzNF94eF9icmlkZ2VfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJZGV2X3QgZGV2bm87CisJYm9vbCByZXQ7CisJaW50IHN0YXR1cyA9IDA7CisJdm9pZCAqaGRydl9vYmogPSBOVUxMOworCisJc3RhdHVzID0gY2ZnX2dldF9vYmplY3QoKHUzMiAqKSAmaGRydl9vYmosIFJFR19EUlZfT0JKRUNUKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfY29udDsKKworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9EVkZTCisJaWYgKGNwdWZyZXFfdW5yZWdpc3Rlcl9ub3RpZmllcigmaXZhX2Nsa19ub3RpZmllciwKKwkJCQkJCUNQVUZSRVFfVFJBTlNJVElPTl9OT1RJRklFUikpCisJCXByX2VycigiJXM6IGNwdWZyZXFfdW5yZWdpc3Rlcl9ub3RpZmllciBmYWlsZWQgZm9yIGl2YTJfY2tcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9EVkZTICovCisKKwlpZiAoZHJpdmVyX2NvbnRleHQpIHsKKwkJLyogUHV0IHRoZSBEU1AgaW4gcmVzZXQgc3RhdGUgKi8KKwkJcmV0ID0gZHNwX2RlaW5pdChkcml2ZXJfY29udGV4dCk7CisJCWRyaXZlcl9jb250ZXh0ID0gMDsKKwkJREJDX0FTU0VSVChyZXQgPT0gdHJ1ZSk7CisJfQorCitmdW5jX2NvbnQ6CisJbWVtX2V4dF9waHlzX3Bvb2xfcmVsZWFzZSgpOworCisJZHNwX2Nsa19leGl0KCk7CisJc2VydmljZXNfZXhpdCgpOworCisJZGV2bm8gPSBNS0RFVihkcml2ZXJfbWFqb3IsIDApOworCWNkZXZfZGVsKCZicmlkZ2VfY2Rldik7CisJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldm5vLCAxKTsKKwlpZiAoYnJpZGdlX2NsYXNzKSB7CisJCS8qIHJlbW92ZSB0aGUgZGV2aWNlIGZyb20gc3lzZnMgKi8KKwkJZGV2aWNlX2Rlc3Ryb3koYnJpZGdlX2NsYXNzLCBNS0RFVihkcml2ZXJfbWFqb3IsIDApKTsKKwkJY2xhc3NfZGVzdHJveShicmlkZ2VfY2xhc3MpOworCisJfQorCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IEJSSURHRV9TVVNQRU5EKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwl1MzIgc3RhdHVzOworCXUzMiBjb21tYW5kID0gUFdSX0VNRVJHRU5DWURFRVBTTEVFUDsKKworCXN0YXR1cyA9IHB3cl9zbGVlcF9kc3AoY29tbWFuZCwgdGltZV9vdXQpOworCWlmIChzdGF0dXMpCisJCXJldHVybiAtMTsKKworCWJyaWRnZV9zdXNwZW5kX2RhdGEuc3VzcGVuZGVkID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBCUklER0VfUkVTVU1FKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJdTMyIHN0YXR1czsKKworCXN0YXR1cyA9IHB3cl93YWtlX2RzcCh0aW1lX291dCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIC0xOworCisJYnJpZGdlX3N1c3BlbmRfZGF0YS5zdXNwZW5kZWQgPSAwOworCXdha2VfdXAoJmJyaWRnZV9zdXNwZW5kX2RhdGEuc3VzcGVuZF93cSk7CisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBCUklER0VfU1VTUEVORCBOVUxMCisjZGVmaW5lIEJSSURHRV9SRVNVTUUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJyaWRnZV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSBCUklER0VfTkFNRSwKKwkJICAgfSwKKwkucHJvYmUgPSBvbWFwMzRfeHhfYnJpZGdlX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChvbWFwMzRfeHhfYnJpZGdlX3JlbW92ZSksCisJLnN1c3BlbmQgPSBCUklER0VfU1VTUEVORCwKKwkucmVzdW1lID0gQlJJREdFX1JFU1VNRSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGJyaWRnZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYnJpZGdlX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBicmlkZ2VfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZicmlkZ2VfZHJpdmVyKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gYXBwbGljYXRpb24gb3BlbnMgaGFuZGxlIHRvIHRoZQorICogYnJpZGdlIGRyaXZlci4KKyAqLworc3RhdGljIGludCBicmlkZ2Vfb3BlbihzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0ID0gTlVMTDsKKworCS8qCisJICogQWxsb2NhdGUgYSBuZXcgcHJvY2VzcyBjb250ZXh0IGFuZCBpbnNlcnQgaXQgaW50byBnbG9iYWwKKwkgKiBwcm9jZXNzIGNvbnRleHQgbGlzdC4KKwkgKi8KKworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9SRUNPVkVSWQorCWlmIChyZWNvdmVyKSB7CisJCWlmIChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSyB8fAorCQkJd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZicmlkZ2Vfb3Blbl9jb21wKSkKKwkJCXJldHVybiAtRUJVU1k7CisJfQorI2VuZGlmCisJcHJfY3R4dCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9jZXNzX2NvbnRleHQpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJfY3R4dCkgeworCQlwcl9jdHh0LT5yZXNfc3RhdGUgPSBQUk9DX1JFU19BTExPQ0FURUQ7CisJCXNwaW5fbG9ja19pbml0KCZwcl9jdHh0LT5kbW1fbWFwX2xvY2spOworCQlJTklUX0xJU1RfSEVBRCgmcHJfY3R4dC0+ZG1tX21hcF9saXN0KTsKKwkJc3Bpbl9sb2NrX2luaXQoJnByX2N0eHQtPmRtbV9yc3ZfbG9jayk7CisJCUlOSVRfTElTVF9IRUFEKCZwcl9jdHh0LT5kbW1fcnN2X2xpc3QpOworCisJCXByX2N0eHQtPm5vZGVfaWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWRyKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChwcl9jdHh0LT5ub2RlX2lkKSB7CisJCQlpZHJfaW5pdChwcl9jdHh0LT5ub2RlX2lkKTsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlnb3RvIGVycjsKKwkJfQorCisJCXByX2N0eHQtPnN0cmVhbV9pZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpZHIpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHByX2N0eHQtPnN0cmVhbV9pZCkKKwkJCWlkcl9pbml0KHByX2N0eHQtPnN0cmVhbV9pZCk7CisJCWVsc2UKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwl9CitlcnI6CisJZmlscC0+cHJpdmF0ZV9kYXRhID0gcHJfY3R4dDsKKyNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfUkVDT1ZFUlkKKwlpZiAoIXN0YXR1cykKKwkJYXRvbWljX2luYygmYnJpZGdlX2NyZWYpOworI2VuZGlmCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gYXBwbGljYXRpb24gY2xvc2VzIGhhbmRsZSB0byB0aGUgYnJpZGdlCisgKiBkcml2ZXIuCisgKi8KK3N0YXRpYyBpbnQgYnJpZGdlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppcCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dDsKKworCWlmICghZmlscC0+cHJpdmF0ZV9kYXRhKSB7CisJCXN0YXR1cyA9IC1FSU87CisJCWdvdG8gZXJyOworCX0KKworCXByX2N0eHQgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJZmx1c2hfc2lnbmFscyhjdXJyZW50KTsKKwlkcnZfcmVtb3ZlX2FsbF9yZXNvdXJjZXMocHJfY3R4dCk7CisJcHJvY19kZXRhY2gocHJfY3R4dCk7CisJa2ZyZWUocHJfY3R4dCk7CisKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCitlcnI6CisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX1JFQ09WRVJZCisJaWYgKCFhdG9taWNfZGVjX3JldHVybigmYnJpZGdlX2NyZWYpKQorCQljb21wbGV0ZSgmYnJpZGdlX2NvbXApOworI2VuZGlmCisJcmV0dXJuIHN0YXR1czsKK30KKworLyogVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBJTyBpbnRlcmZhY2UgdG8gdGhlIGJyaWRnZSBkcml2ZXIuICovCitzdGF0aWMgbG9uZyBicmlkZ2VfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjb2RlLAorCQkJIHVuc2lnbmVkIGxvbmcgYXJncykKK3sKKwlpbnQgc3RhdHVzOworCXUzMiByZXR2YWwgPSAwOworCXVuaW9uIHRyYXBwZWRfYXJncyBidWZfaW47CisKKwlEQkNfUkVRVUlSRShmaWxwICE9IE5VTEwpOworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9SRUNPVkVSWQorCWlmIChyZWNvdmVyKSB7CisJCXN0YXR1cyA9IC1FSU87CisJCWdvdG8gZXJyOworCX0KKyNlbmRpZgorI2lmZGVmIENPTkZJR19QTQorCXN0YXR1cyA9IG9tYXAzNF94eGJyaWRnZV9zdXNwZW5kX2xvY2tvdXQoJmJyaWRnZV9zdXNwZW5kX2RhdGEsIGZpbHApOworCWlmIChzdGF0dXMgIT0gMCkKKwkJcmV0dXJuIHN0YXR1czsKKyNlbmRpZgorCisJaWYgKCFmaWxwLT5wcml2YXRlX2RhdGEpIHsKKwkJc3RhdHVzID0gLUVJTzsKKwkJZ290byBlcnI7CisJfQorCisJc3RhdHVzID0gY29weV9mcm9tX3VzZXIoJmJ1Zl9pbiwgKHVuaW9uIHRyYXBwZWRfYXJncyAqKWFyZ3MsCisJCQkJc2l6ZW9mKHVuaW9uIHRyYXBwZWRfYXJncykpOworCisJaWYgKCFzdGF0dXMpIHsKKwkJc3RhdHVzID0gYXBpX2NhbGxfZGV2X2lvY3RsKGNvZGUsICZidWZfaW4sICZyZXR2YWwsCisJCQkJCSAgICAgZmlscC0+cHJpdmF0ZV9kYXRhKTsKKworCQlpZiAoIXN0YXR1cykgeworCQkJc3RhdHVzID0gcmV0dmFsOworCQl9IGVsc2UgeworCQkJZGV2X2RiZyhicmlkZ2UsICIlczogSU9DVEwgRmFpbGVkLCBjb2RlOiAweCV4ICIKKwkJCQkic3RhdHVzIDB4JXhcbiIsIF9fZnVuY19fLCBjb2RlLCBzdGF0dXMpOworCQkJc3RhdHVzID0gLTE7CisJCX0KKworCX0KKworZXJyOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gbWFwcyBrZXJuZWwgc3BhY2UgbWVtb3J5IHRvIHVzZXIgc3BhY2UgbWVtb3J5LiAqLworc3RhdGljIGludCBicmlkZ2VfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJdTMyIG9mZnNldCA9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKKwl1MzIgc3RhdHVzOworCisJREJDX0FTU0VSVCh2bWEtPnZtX3N0YXJ0IDwgdm1hLT52bV9lbmQpOworCisJdm1hLT52bV9mbGFncyB8PSBWTV9SRVNFUlZFRCB8IFZNX0lPOworCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWEtPnZtX3BhZ2VfcHJvdCk7CisKKwlkZXZfZGJnKGJyaWRnZSwgIiVzOiB2bSBmaWxwICVwIG9mZnNldCAleCBzdGFydCAlbHggZW5kICVseCBwYWdlX3Byb3QgIgorCQkiJWx4IGZsYWdzICVseFxuIiwgX19mdW5jX18sIGZpbHAsIG9mZnNldCwKKwkJdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsIHZtYS0+dm1fcGFnZV9wcm90LCB2bWEtPnZtX2ZsYWdzKTsKKworCXN0YXR1cyA9IHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fcGdvZmYsCisJCQkJIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKKwkJCQkgdm1hLT52bV9wYWdlX3Byb3QpOworCWlmIChzdGF0dXMgIT0gMCkKKwkJc3RhdHVzID0gLUVBR0FJTjsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIFRvIHJlbW92ZSBhbGwgcHJvY2VzcyByZXNvdXJjZXMgYmVmb3JlIHJlbW92aW5nIHRoZSBwcm9jZXNzIGZyb20gdGhlCisgKiBwcm9jZXNzIGNvbnRleHQgbGlzdCAqLworaW50IGRydl9yZW1vdmVfYWxsX3Jlc291cmNlcyh2b2lkICpwcm9jZXNzX2N0eHQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IHByb2Nlc3NfY29udGV4dCAqY3R4dCA9IChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICopcHJvY2Vzc19jdHh0OworCWRydl9yZW1vdmVfYWxsX3N0cm1fcmVzX2VsZW1lbnRzKGN0eHQpOworCWRydl9yZW1vdmVfYWxsX25vZGVfcmVzX2VsZW1lbnRzKGN0eHQpOworCWRydl9yZW1vdmVfYWxsX2RtbV9yZXNfZWxlbWVudHMoY3R4dCk7CisJY3R4dC0+cmVzX3N0YXRlID0gUFJPQ19SRVNfRlJFRUQ7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogQnJpZGdlIGRyaXZlciBpbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICovCittb2R1bGVfaW5pdChicmlkZ2VfaW5pdCk7Cittb2R1bGVfZXhpdChicmlkZ2VfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9kcnZfaW50ZXJmYWNlLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9kcnZfaW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIwNzA2MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL2Rydl9pbnRlcmZhY2UuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogZHJ2X2ludGVyZmFjZS5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYJX0RSVl9JTlRFUkZBQ0VfSF8KKyNkZWZpbmUgX0RSVl9JTlRFUkZBQ0VfSF8KKworLyogUHJvdG90eXBlcyBmb3IgYWxsIGZ1bmN0aW9ucyBpbiB0aGlzIGJyaWRnZSAqLworc3RhdGljIGludCBfX2luaXQgYnJpZGdlX2luaXQodm9pZCk7CS8qIEluaXRpYWxpemUgYnJpZGdlICovCitzdGF0aWMgdm9pZCBfX2V4aXQgYnJpZGdlX2V4aXQodm9pZCk7CS8qIE9wcG9zaXRlIG9mIGluaXRpYWxpemUgKi8KK3N0YXRpYyBpbnQgYnJpZGdlX29wZW4oc3RydWN0IGlub2RlICppcCwgc3RydWN0IGZpbGUgKmZpbHApOwkvKiBPcGVuICovCitzdGF0aWMgaW50IGJyaWRnZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBmaWxlICpmaWxwKTsJLyogUmVsZWFzZSAqLworc3RhdGljIGxvbmcgYnJpZGdlX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY29kZSwKKwkJCQl1bnNpZ25lZCBsb25nIGFyZ3MpOworc3RhdGljIGludCBicmlkZ2VfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworI2VuZGlmIC8qIGlmbmRlZiBfRFJWX0lOVEVSRkFDRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZHNwZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9kc3BkcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTRmMzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZHNwZHJ2LmMKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBkc3BkcnYuYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBJbnRlcmZhY2UgdG8gYWxsb2NhdGUgYW5kIGZyZWUgYnJpZGdlIHJlc291cmNlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSG9zdCBPUyAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRyYWNlICYgRGVidWcgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJjLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPUyBBZGFwdGF0aW9uIExheWVyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NmZy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhdGZvcm0gTWFuYWdlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kcnYuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2Lmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGFwaS5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVzb3VyY2UgTWFuYWdlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9tZ3IuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwZHJ2Lmg+CisKKy8qCisgKiAgPT09PT09PT0gZHNwX2luaXQgPT09PT09PT0KKyAqICAJQWxsb2NhdGVzIGJyaWRnZSByZXNvdXJjZXMuIExvYWRzIGEgYmFzZSBpbWFnZSBvbnRvIERTUCwgaWYgc3BlY2lmaWVkLgorICovCit1MzIgZHNwX2luaXQodTMyICppbml0X3N0YXR1cykKK3sKKwljaGFyIGRldl9ub2RlW01BWFJFR1BBVEhMRU5HVEhdID0gIlRJT01BUDE1MTAiOworCWludCBzdGF0dXMgPSAtRVBFUk07CisJc3RydWN0IGRydl9vYmplY3QgKmRydl9vYmogPSBOVUxMOworCXUzMiBkZXZpY2Vfbm9kZTsKKwl1MzIgZGV2aWNlX25vZGVfc3RyaW5nOworCisJaWYgKCFhcGlfaW5pdCgpKQorCQlnb3RvIGZ1bmNfY29udDsKKworCXN0YXR1cyA9IGRydl9jcmVhdGUoJmRydl9vYmopOworCWlmIChzdGF0dXMpIHsKKwkJYXBpX2V4aXQoKTsKKwkJZ290byBmdW5jX2NvbnQ7CisJfQorCisJLyogRW5kIGRydl9jcmVhdGUgKi8KKwkvKiBSZXF1ZXN0IFJlc291cmNlcyAqLworCXN0YXR1cyA9IGRydl9yZXF1ZXN0X3Jlc291cmNlcygodTMyKSAmZGV2X25vZGUsICZkZXZpY2Vfbm9kZV9zdHJpbmcpOworCWlmICghc3RhdHVzKSB7CisJCS8qIEF0dGVtcHQgdG8gU3RhcnQgdGhlIERldmljZSAqLworCQlzdGF0dXMgPSBkZXZfc3RhcnRfZGV2aWNlKChzdHJ1Y3QgY2ZnX2Rldm5vZGUgKikKKwkJCQkJICBkZXZpY2Vfbm9kZV9zdHJpbmcpOworCQlpZiAoc3RhdHVzKQorCQkJKHZvaWQpZHJ2X3JlbGVhc2VfcmVzb3VyY2VzCisJCQkgICAgKCh1MzIpIGRldmljZV9ub2RlX3N0cmluZywgZHJ2X29iaik7CisJfSBlbHNlIHsKKwkJZGV2X2RiZyhicmlkZ2UsICIlczogZHJ2X3JlcXVlc3RfcmVzb3VyY2VzIEZhaWxlZFxuIiwgX19mdW5jX18pOworCQlzdGF0dXMgPSAtRVBFUk07CisJfQorCisJLyogVW53aW5kIHdoYXRldmVyIHdhcyBsb2FkZWQgKi8KKwlpZiAoc3RhdHVzKSB7CisJCS8qIGlycmVzcGVjdGl2ZSBvZiB0aGUgc3RhdHVzIG9mIGRldl9yZW1vdmVfZGV2aWNlIHdlIGNvbml0aW51ZQorCQkgKiB1bmxvYWRpbmcuIEdldCB0aGUgRHJpdmVyIE9iamVjdCBpdGVyYXRlIHRocm91Z2ggYW5kIHJlbW92ZS4KKwkJICogUmVzZXQgdGhlIHN0YXR1cyB0byBFX0ZBSUwgdG8gYXZvaWQgZ29pbmcgdGhyb3VnaAorCQkgKiBhcGlfaW5pdF9jb21wbGV0ZTIuICovCisJCWZvciAoZGV2aWNlX25vZGUgPSBkcnZfZ2V0X2ZpcnN0X2Rldl9leHRlbnNpb24oKTsKKwkJICAgICBkZXZpY2Vfbm9kZSAhPSAwOworCQkgICAgIGRldmljZV9ub2RlID0gZHJ2X2dldF9uZXh0X2Rldl9leHRlbnNpb24oZGV2aWNlX25vZGUpKSB7CisJCQkodm9pZClkZXZfcmVtb3ZlX2RldmljZSgoc3RydWN0IGNmZ19kZXZub2RlICopCisJCQkJCQlkZXZpY2Vfbm9kZSk7CisJCQkodm9pZClkcnZfcmVsZWFzZV9yZXNvdXJjZXMoKHUzMikgZGV2aWNlX25vZGUsIGRydl9vYmopOworCQl9CisJCS8qIFJlbW92ZSB0aGUgRHJpdmVyIE9iamVjdCAqLworCQkodm9pZClkcnZfZGVzdHJveShkcnZfb2JqKTsKKwkJZHJ2X29iaiA9IE5VTEw7CisJCWFwaV9leGl0KCk7CisJCWRldl9kYmcoYnJpZGdlLCAiJXM6IExvZ2ljYWwgZGV2aWNlIGZhaWxlZCBpbml0XG4iLCBfX2Z1bmNfXyk7CisJfQkJCS8qIFVud2luZGluZyB0aGUgbG9hZGVkIGRyaXZlcnMgKi8KK2Z1bmNfY29udDoKKwkvKiBBdHRlbXB0IHRvIFN0YXJ0IHRoZSBCb2FyZCAqLworCWlmICghc3RhdHVzKSB7CisJCS8qIEJSRF9BdXRvU3RhcnQgY291bGQgZmFpbCBpZiB0aGUgZHNwIGV4ZWN1ZXRhYmxlIGlzIG5vdCB0aGUKKwkJICogY29ycmVjdCBvbmUuIFdlIHNob3VsZCBub3QgcHJvcGFnYXRlIHRoYXQgZXJyb3IKKwkJICogaW50byB0aGUgZGV2aWNlIGxvYWRlci4gKi8KKwkJKHZvaWQpYXBpX2luaXRfY29tcGxldGUyKCk7CisJfSBlbHNlIHsKKwkJZGV2X2RiZyhicmlkZ2UsICIlczogRmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJfQkJCS8qIEVuZCBhcGlfaW5pdF9jb21wbGV0ZTIgKi8KKwlEQkNfRU5TVVJFKCghc3RhdHVzICYmIGRydl9vYmogIT0gTlVMTCkgfHwKKwkJICAgKHN0YXR1cyAmJiBkcnZfb2JqID09IE5VTEwpKTsKKwkqaW5pdF9zdGF0dXMgPSBzdGF0dXM7CisJLyogUmV0dXJuIHRoZSBEcml2ZXIgT2JqZWN0ICovCisJcmV0dXJuICh1MzIpIGRydl9vYmo7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZHNwX2RlaW5pdCA9PT09PT09PQorICogIAlGcmVlcyB0aGUgcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgYnJpZGdlLgorICovCitib29sIGRzcF9kZWluaXQodTMyIGRldmljZV9jb250ZXh0KQoreworCWJvb2wgcmV0ID0gdHJ1ZTsKKwl1MzIgZGV2aWNlX25vZGU7CisJc3RydWN0IG1ncl9vYmplY3QgKm1ncl9vYmogPSBOVUxMOworCisJd2hpbGUgKChkZXZpY2Vfbm9kZSA9IGRydl9nZXRfZmlyc3RfZGV2X2V4dGVuc2lvbigpKSAhPSAwKSB7CisJCSh2b2lkKWRldl9yZW1vdmVfZGV2aWNlKChzdHJ1Y3QgY2ZnX2Rldm5vZGUgKilkZXZpY2Vfbm9kZSk7CisKKwkJKHZvaWQpZHJ2X3JlbGVhc2VfcmVzb3VyY2VzKCh1MzIpIGRldmljZV9ub2RlLAorCQkJCQkoc3RydWN0IGRydl9vYmplY3QgKilkZXZpY2VfY29udGV4dCk7CisJfQorCisJKHZvaWQpZHJ2X2Rlc3Ryb3koKHN0cnVjdCBkcnZfb2JqZWN0ICopZGV2aWNlX2NvbnRleHQpOworCisJLyogR2V0IHRoZSBNYW5hZ2VyIE9iamVjdCBmcm9tIFJlZ2lzdHJ5CisJICogTUdSIERlc3Ryb3kgd2lsbCB1bmxvYWQgdGhlIERDRCBkbGwgKi8KKwlpZiAoIWNmZ19nZXRfb2JqZWN0KCh1MzIgKikgJm1ncl9vYmosIFJFR19NR1JfT0JKRUNUKSkKKwkJKHZvaWQpbWdyX2Rlc3Ryb3kobWdyX29iaik7CisKKwlhcGlfZXhpdCgpOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL21nci5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvbWdyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdhMzliOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL21nci5jCkBAIC0wLDAgKzEsMzc1IEBACisvKgorICogbWdyLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogSW1wbGVtZW50YXRpb24gb2YgTWFuYWdlciBpbnRlcmZhY2UgdG8gdGhlIGRldmljZSBvYmplY3QgYXQgdGhlCisgKiBkcml2ZXIgbGV2ZWwuIFRoaXMgcXVlcmllcyB0aGUgTkRCIGRhdGEgYmFzZSBhbmQgcmV0cmlldmVzIHRoZQorICogZGF0YSBhYm91dCBOb2RlIGFuZCBQcm9jZXNzb3IuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEU1AvQklPUyBCcmlkZ2UgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcmFjZSAmIERlYnVnICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiYy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1MgQWRhcHRhdGlvbiBMYXllciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9jZmcuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvc3luYy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3RoZXJzICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGNkLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rydi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXYuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvbWdyLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWZpbmVzLCBEYXRhIFN0cnVjdHVyZXMsIFR5cGVkZWZzICovCisjZGVmaW5lIFpMRExMTkFNRSAgICAgICAgICAgICAgICIiCisKK3N0cnVjdCBtZ3Jfb2JqZWN0IHsKKwlzdHJ1Y3QgZGNkX21hbmFnZXIgKmhkY2RfbWdyOwkvKiBQcm9jL05vZGUgZGF0YSBtYW5hZ2VyICovCit9OworCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFscyAqLworc3RhdGljIHUzMiByZWZzOworCisvKgorICogID09PT09PT09PSBtZ3JfY3JlYXRlID09PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIE1HUiBPYmplY3QgZ2V0cyBjcmVhdGVkIG9ubHkgb25jZSBkdXJpbmcgZHJpdmVyIExvYWRpbmcuCisgKi8KK2ludCBtZ3JfY3JlYXRlKHN0cnVjdCBtZ3Jfb2JqZWN0ICoqbWdyX29iaiwKKwkJICAgICAgc3RydWN0IGNmZ19kZXZub2RlICpkZXZfbm9kZV9vYmopCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IG1ncl9vYmplY3QgKnBtZ3Jfb2JqID0gTlVMTDsKKworCURCQ19SRVFVSVJFKG1ncl9vYmogIT0gTlVMTCk7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJcG1ncl9vYmogPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWdyX29iamVjdCksIEdGUF9LRVJORUwpOworCWlmIChwbWdyX29iaikgeworCQlzdGF0dXMgPSBkY2RfY3JlYXRlX21hbmFnZXIoWkxETExOQU1FLCAmcG1ncl9vYmotPmhkY2RfbWdyKTsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCS8qIElmIHN1Y2NlZWRlZCBzdG9yZSB0aGUgaGFuZGxlIGluIHRoZSBNR1IgT2JqZWN0ICovCisJCQlzdGF0dXMgPSBjZmdfc2V0X29iamVjdCgodTMyKSBwbWdyX29iaiwgUkVHX01HUl9PQkpFQ1QpOworCQkJaWYgKCFzdGF0dXMpIHsKKwkJCQkqbWdyX29iaiA9IHBtZ3Jfb2JqOworCQkJfSBlbHNlIHsKKwkJCQlkY2RfZGVzdHJveV9tYW5hZ2VyKHBtZ3Jfb2JqLT5oZGNkX21ncik7CisJCQkJa2ZyZWUocG1ncl9vYmopOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogZmFpbGVkIHRvIENyZWF0ZSBEQ0QgTWFuYWdlciAqLworCQkJa2ZyZWUocG1ncl9vYmopOworCQl9CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwl9CisKKwlEQkNfRU5TVVJFKHN0YXR1cyB8fCBwbWdyX29iaik7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PT0gbWdyX2Rlc3Ryb3kgPT09PT09PT09CisgKiAgICAgVGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGR1cmluZyBicmlkZ2UgZHJpdmVyIHVubG9hZGluZy5GcmVlcyBNR1Igb2JqZWN0LgorICovCitpbnQgbWdyX2Rlc3Ryb3koc3RydWN0IG1ncl9vYmplY3QgKmhtZ3Jfb2JqKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBtZ3Jfb2JqZWN0ICpwbWdyX29iaiA9IChzdHJ1Y3QgbWdyX29iamVjdCAqKWhtZ3Jfb2JqOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGhtZ3Jfb2JqKTsKKworCS8qIEZyZWUgcmVzb3VyY2VzICovCisJaWYgKGhtZ3Jfb2JqLT5oZGNkX21ncikKKwkJZGNkX2Rlc3Ryb3lfbWFuYWdlcihobWdyX29iai0+aGRjZF9tZ3IpOworCisJa2ZyZWUocG1ncl9vYmopOworCS8qIFVwZGF0ZSB0aGUgUmVnaXN0cnkgd2l0aCBOVUxMIGZvciBNR1IgT2JqZWN0ICovCisJKHZvaWQpY2ZnX3NldF9vYmplY3QoMCwgUkVHX01HUl9PQkpFQ1QpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBtZ3JfZW51bV9ub2RlX2luZm8gPT09PT09PT0KKyAqICAgICAgRW51bWVyYXRlIGFuZCBnZXQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhYm91dCBub2RlcyBjb25maWd1cmVkCisgKiAgICAgIGluIHRoZSBub2RlIGRhdGFiYXNlLgorICovCitpbnQgbWdyX2VudW1fbm9kZV9pbmZvKHUzMiBub2RlX2lkLCBzdHJ1Y3QgZHNwX25kYnByb3BzICpwbmRiX3Byb3BzLAorCQkJICAgICAgdTMyIHVuZGJfcHJvcHNfc2l6ZSwgdTMyICpwdV9udW1fbm9kZXMpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRzcF91dWlkIG5vZGVfdXVpZCwgdGVtcF91dWlkOworCXUzMiB0ZW1wX2luZGV4ID0gMDsKKwl1MzIgbm9kZV9pbmRleCA9IDA7CisJc3RydWN0IGRjZF9nZW5lcmljb2JqIGdlbl9vYmo7CisJc3RydWN0IG1ncl9vYmplY3QgKnBtZ3Jfb2JqID0gTlVMTDsKKworCURCQ19SRVFVSVJFKHBuZGJfcHJvcHMgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUocHVfbnVtX25vZGVzICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHVuZGJfcHJvcHNfc2l6ZSA+PSBzaXplb2Yoc3RydWN0IGRzcF9uZGJwcm9wcykpOworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKworCSpwdV9udW1fbm9kZXMgPSAwOworCS8qIEdldCBUaGUgTWFuYWdlciBPYmplY3QgZnJvbSB0aGUgUmVnaXN0cnkgKi8KKwlzdGF0dXMgPSBjZmdfZ2V0X29iamVjdCgodTMyICopICZwbWdyX29iaiwgUkVHX01HUl9PQkpFQ1QpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19jb250OworCisJREJDX0FTU0VSVChwbWdyX29iaik7CisJLyogRm9yZXZlciBsb29wIHRpbGwgd2UgaGl0IGZhaWxlZCBvciBubyBtb3JlIGl0ZW1zIGluIHRoZQorCSAqIEVudW1lcmF0aW9uLiBXZSB3aWxsIGV4aXQgdGhlIGxvb3Agb3RoZXIgdGhhbiAwOyAqLworCXdoaWxlIChzdGF0dXMgPT0gMCkgeworCQlzdGF0dXMgPSBkY2RfZW51bWVyYXRlX29iamVjdCh0ZW1wX2luZGV4KyssIERTUF9EQ0ROT0RFVFlQRSwKKwkJCQkJICAgICAgJnRlbXBfdXVpZCk7CisJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJbm9kZV9pbmRleCsrOworCQkJaWYgKG5vZGVfaWQgPT0gKG5vZGVfaW5kZXggLSAxKSkKKwkJCQlub2RlX3V1aWQgPSB0ZW1wX3V1aWQ7CisKKwkJfQorCX0KKwlpZiAoIXN0YXR1cykgeworCQlpZiAobm9kZV9pZCA+IChub2RlX2luZGV4IC0gMSkpIHsKKwkJCXN0YXR1cyA9IC1FSU5WQUw7CisJCX0gZWxzZSB7CisJCQlzdGF0dXMgPSBkY2RfZ2V0X29iamVjdF9kZWYocG1ncl9vYmotPmhkY2RfbWdyLAorCQkJCQkJICAgIChzdHJ1Y3QgZHNwX3V1aWQgKikKKwkJCQkJCSAgICAmbm9kZV91dWlkLCBEU1BfRENETk9ERVRZUEUsCisJCQkJCQkgICAgJmdlbl9vYmopOworCQkJaWYgKCFzdGF0dXMpIHsKKwkJCQkvKiBHZXQgdGhlIE9iaiBkZWYgKi8KKwkJCQkqcG5kYl9wcm9wcyA9CisJCQkJICAgIGdlbl9vYmoub2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzOworCQkJCSpwdV9udW1fbm9kZXMgPSBub2RlX2luZGV4OworCQkJfQorCQl9CisJfQorCitmdW5jX2NvbnQ6CisJREJDX0VOU1VSRSgoIXN0YXR1cyAmJiAqcHVfbnVtX25vZGVzID4gMCkgfHwKKwkJICAgKHN0YXR1cyAmJiAqcHVfbnVtX25vZGVzID09IDApKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbWdyX2VudW1fcHJvY2Vzc29yX2luZm8gPT09PT09PT0KKyAqICAgICAgRW51bWVyYXRlIGFuZCBnZXQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhYm91dCBhdmFpbGFibGUKKyAqICAgICAgRFNQIHByb2Nlc3NvcnMuCisgKi8KK2ludCBtZ3JfZW51bV9wcm9jZXNzb3JfaW5mbyh1MzIgcHJvY2Vzc29yX2lkLAorCQkJCSAgIHN0cnVjdCBkc3BfcHJvY2Vzc29yaW5mbyAqCisJCQkJICAgcHJvY2Vzc29yX2luZm8sIHUzMiBwcm9jZXNzb3JfaW5mb19zaXplLAorCQkJCSAgIHU4ICpwdV9udW1fcHJvY3MpCit7CisJaW50IHN0YXR1cyA9IDA7CisJaW50IHN0YXR1czEgPSAwOworCWludCBzdGF0dXMyID0gMDsKKwlzdHJ1Y3QgZHNwX3V1aWQgdGVtcF91dWlkOworCXUzMiB0ZW1wX2luZGV4ID0gMDsKKwl1MzIgcHJvY19pbmRleCA9IDA7CisJc3RydWN0IGRjZF9nZW5lcmljb2JqIGdlbl9vYmo7CisJc3RydWN0IG1ncl9vYmplY3QgKnBtZ3Jfb2JqID0gTlVMTDsKKwlzdHJ1Y3QgbWdyX3Byb2Nlc3NvcmV4dGluZm8gKmV4dF9pbmZvOworCXN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iajsKKwlzdHJ1Y3QgZHJ2X29iamVjdCAqaGRydl9vYmo7CisJdTggZGV2X3R5cGU7CisJc3RydWN0IGNmZ19kZXZub2RlICpkZXZfbm9kZTsKKwlib29sIHByb2NfZGV0ZWN0ID0gZmFsc2U7CisKKwlEQkNfUkVRVUlSRShwcm9jZXNzb3JfaW5mbyAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShwdV9udW1fcHJvY3MgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUocHJvY2Vzc29yX2luZm9fc2l6ZSA+PSBzaXplb2Yoc3RydWN0IGRzcF9wcm9jZXNzb3JpbmZvKSk7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJKnB1X251bV9wcm9jcyA9IDA7CisJc3RhdHVzID0gY2ZnX2dldF9vYmplY3QoKHUzMiAqKSAmaGRydl9vYmosIFJFR19EUlZfT0JKRUNUKTsKKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPSBkcnZfZ2V0X2Rldl9vYmplY3QocHJvY2Vzc29yX2lkLCBoZHJ2X29iaiwgJmhkZXZfb2JqKTsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCXN0YXR1cyA9IGRldl9nZXRfZGV2X3R5cGUoaGRldl9vYmosICh1OCAqKSAmZGV2X3R5cGUpOworCQkJc3RhdHVzID0gZGV2X2dldF9kZXZfbm9kZShoZGV2X29iaiwgJmRldl9ub2RlKTsKKwkJCWlmIChkZXZfdHlwZSAhPSBEU1BfVU5JVCkKKwkJCQlzdGF0dXMgPSAtRVBFUk07CisKKwkJCWlmICghc3RhdHVzKQorCQkJCXByb2Nlc3Nvcl9pbmZvLT5wcm9jZXNzb3JfdHlwZSA9IERTUFRZUEU2NDsKKwkJfQorCX0KKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJLyogR2V0IFRoZSBNYW5hZ2VyIE9iamVjdCBmcm9tIHRoZSBSZWdpc3RyeSAqLworCWlmIChjZmdfZ2V0X29iamVjdCgodTMyICopICZwbWdyX29iaiwgUkVHX01HUl9PQkpFQ1QpKSB7CisJCWRldl9kYmcoYnJpZGdlLCAiJXM6IEZhaWxlZCB0byBnZXQgTUdSIE9iamVjdFxuIiwgX19mdW5jX18pOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlEQkNfQVNTRVJUKHBtZ3Jfb2JqKTsKKwkvKiBGb3JldmVyIGxvb3AgdGlsbCB3ZSBoaXQgbm8gbW9yZSBpdGVtcyBpbiB0aGUKKwkgKiBFbnVtZXJhdGlvbi4gV2Ugd2lsbCBleGl0IHRoZSBsb29wIG90aGVyIHRoYW4gMDsgKi8KKwl3aGlsZSAoc3RhdHVzMSA9PSAwKSB7CisJCXN0YXR1czEgPSBkY2RfZW51bWVyYXRlX29iamVjdCh0ZW1wX2luZGV4KyssCisJCQkJCSAgICAgICBEU1BfRENEUFJPQ0VTU09SVFlQRSwKKwkJCQkJICAgICAgICZ0ZW1wX3V1aWQpOworCQlpZiAoc3RhdHVzMSAhPSAwKQorCQkJYnJlYWs7CisKKwkJcHJvY19pbmRleCsrOworCQkvKiBHZXQgdGhlIE9iamVjdCBwcm9wZXJ0aWVzIHRvIGZpbmQgdGhlIERldmljZS9Qcm9jZXNzb3IKKwkJICogVHlwZSAqLworCQlpZiAocHJvY19kZXRlY3QgIT0gZmFsc2UpCisJCQljb250aW51ZTsKKworCQlzdGF0dXMyID0gZGNkX2dldF9vYmplY3RfZGVmKHBtZ3Jfb2JqLT5oZGNkX21nciwKKwkJCQkJICAgICAoc3RydWN0IGRzcF91dWlkICopJnRlbXBfdXVpZCwKKwkJCQkJICAgICBEU1BfRENEUFJPQ0VTU09SVFlQRSwgJmdlbl9vYmopOworCQlpZiAoIXN0YXR1czIpIHsKKwkJCS8qIEdldCB0aGUgT2JqIGRlZiAqLworCQkJaWYgKHByb2Nlc3Nvcl9pbmZvX3NpemUgPAorCQkJICAgIHNpemVvZihzdHJ1Y3QgbWdyX3Byb2Nlc3NvcmV4dGluZm8pKSB7CisJCQkJKnByb2Nlc3Nvcl9pbmZvID0gZ2VuX29iai5vYmpfZGF0YS5wcm9jX2luZm87CisJCQl9IGVsc2UgeworCQkJCS8qIGV4dGVuZGVkIGluZm8gKi8KKwkJCQlleHRfaW5mbyA9IChzdHJ1Y3QgbWdyX3Byb2Nlc3NvcmV4dGluZm8gKikKKwkJCQkgICAgcHJvY2Vzc29yX2luZm87CisJCQkJKmV4dF9pbmZvID0gZ2VuX29iai5vYmpfZGF0YS5leHRfcHJvY19vYmo7CisJCQl9CisJCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBHb3QgcHJvY3R5cGUgIGZyb20gRENEICV4XG4iLAorCQkJCV9fZnVuY19fLCBwcm9jZXNzb3JfaW5mby0+cHJvY2Vzc29yX3R5cGUpOworCQkJLyogU2VlIGlmIHdlIGdvdCB0aGUgbmVlZGVkIHByb2Nlc3NvciAqLworCQkJaWYgKGRldl90eXBlID09IERTUF9VTklUKSB7CisJCQkJaWYgKHByb2Nlc3Nvcl9pbmZvLT5wcm9jZXNzb3JfdHlwZSA9PQorCQkJCSAgICBEU1BQUk9DVFlQRV9DNjQpCisJCQkJCXByb2NfZGV0ZWN0ID0gdHJ1ZTsKKwkJCX0gZWxzZSBpZiAoZGV2X3R5cGUgPT0gSVZBX1VOSVQpIHsKKwkJCQlpZiAocHJvY2Vzc29yX2luZm8tPnByb2Nlc3Nvcl90eXBlID09CisJCQkJICAgIElWQVBST0NUWVBFX0FSTTcpCisJCQkJCXByb2NfZGV0ZWN0ID0gdHJ1ZTsKKwkJCX0KKwkJCS8qIFVzZXIgYXBwbGNpYXRpdW9ucyBhb25seSBjaGVjayBmb3IgY2hpcCB0eXBlLCBzbworCQkJICogdGhpcyBjbHVtc3kgb3ZlcndyaXRlICovCisJCQlwcm9jZXNzb3JfaW5mby0+cHJvY2Vzc29yX3R5cGUgPSBEU1BUWVBFNjQ7CisJCX0gZWxzZSB7CisJCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBGYWlsZWQgdG8gZ2V0IERDRCBwcm9jZXNzb3IgaW5mbyAiCisJCQkJIiV4XG4iLCBfX2Z1bmNfXywgc3RhdHVzMik7CisJCQlzdGF0dXMgPSAtRVBFUk07CisJCX0KKwl9CisJKnB1X251bV9wcm9jcyA9IHByb2NfaW5kZXg7CisJaWYgKHByb2NfZGV0ZWN0ID09IGZhbHNlKSB7CisJCWRldl9kYmcoYnJpZGdlLCAiJXM6IEZhaWxlZCB0byBnZXQgcHJvYyBpbmZvIGZyb20gRENELCBzbyB1c2UgIgorCQkJIkNGRyByZWdpc3RyeVxuIiwgX19mdW5jX18pOworCQlwcm9jZXNzb3JfaW5mby0+cHJvY2Vzc29yX3R5cGUgPSBEU1BUWVBFNjQ7CisJfQorZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBtZ3JfZXhpdCA9PT09PT09PQorICogICAgICBEZWNyZW1lbnQgcmVmZXJlbmNlIGNvdW50LCBhbmQgZnJlZSByZXNvdXJjZXMgd2hlbiByZWZlcmVuY2UgY291bnQgaXMKKyAqICAgICAgMC4KKyAqLwordm9pZCBtZ3JfZXhpdCh2b2lkKQoreworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlyZWZzLS07CisJaWYgKHJlZnMgPT0gMCkKKwkJZGNkX2V4aXQoKTsKKworCURCQ19FTlNVUkUocmVmcyA+PSAwKTsKK30KKworLyoKKyAqICA9PT09PT09PSBtZ3JfZ2V0X2RjZF9oYW5kbGUgPT09PT09PT0KKyAqICAgICAgUmV0cmlldmVzIHRoZSBNR1IgaGFuZGxlLiBBY2Nlc3NvciBGdW5jdGlvbi4KKyAqLworaW50IG1ncl9nZXRfZGNkX2hhbmRsZShzdHJ1Y3QgbWdyX29iamVjdCAqbWdyX2hhbmRsZSwKKwkJCSAgICAgIHUzMiAqZGNkX2hhbmRsZSkKK3sKKwlpbnQgc3RhdHVzID0gLUVQRVJNOworCXN0cnVjdCBtZ3Jfb2JqZWN0ICpwbWdyX29iaiA9IChzdHJ1Y3QgbWdyX29iamVjdCAqKW1ncl9oYW5kbGU7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoZGNkX2hhbmRsZSAhPSBOVUxMKTsKKworCSpkY2RfaGFuZGxlID0gKHUzMikgTlVMTDsKKwlpZiAocG1ncl9vYmopIHsKKwkJKmRjZF9oYW5kbGUgPSAodTMyKSBwbWdyX29iai0+aGRjZF9tZ3I7CisJCXN0YXR1cyA9IDA7CisJfQorCURCQ19FTlNVUkUoKCFzdGF0dXMgJiYgKmRjZF9oYW5kbGUgIT0gKHUzMikgTlVMTCkgfHwKKwkJICAgKHN0YXR1cyAmJiAqZGNkX2hhbmRsZSA9PSAodTMyKSBOVUxMKSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IG1ncl9pbml0ID09PT09PT09CisgKiAgICAgIEluaXRpYWxpemUgTUdSJ3MgcHJpdmF0ZSBzdGF0ZSwga2VlcGluZyBhIHJlZmVyZW5jZSBjb3VudCBvbiBlYWNoIGNhbGwuCisgKi8KK2Jvb2wgbWdyX2luaXQodm9pZCkKK3sKKwlib29sIHJldCA9IHRydWU7CisJYm9vbCBpbml0X2RjZCA9IGZhbHNlOworCisJREJDX1JFUVVJUkUocmVmcyA+PSAwKTsKKworCWlmIChyZWZzID09IDApIHsKKwkJaW5pdF9kY2QgPSBkY2RfaW5pdCgpOwkvKiAgRENEIE1vZHVsZSAqLworCisJCWlmICghaW5pdF9kY2QpCisJCQlyZXQgPSBmYWxzZTsKKwl9CisKKwlpZiAocmV0KQorCQlyZWZzKys7CisKKwlEQkNfRU5TVVJFKChyZXQgJiYgKHJlZnMgPiAwKSkgfHwgKCFyZXQgJiYgKHJlZnMgPj0gMCkpKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbWdyX3dhaXRfZm9yX2JyaWRnZV9ldmVudHMgPT09PT09PT0KKyAqICAgICAgQmxvY2sgb24gYW55IEJyaWRnZSBldmVudChzKQorICovCitpbnQgbWdyX3dhaXRfZm9yX2JyaWRnZV9ldmVudHMoc3RydWN0IGRzcF9ub3RpZmljYXRpb24gKiphbm90aWZpY2F0aW9ucywKKwkJCQkgICAgICB1MzIgY291bnQsIHUzMiAqcHVfaW5kZXgsCisJCQkJICAgICAgdTMyIHV0aW1lb3V0KQoreworCWludCBzdGF0dXM7CisJc3RydWN0IHN5bmNfb2JqZWN0ICpzeW5jX2V2ZW50c1tNQVhfRVZFTlRTXTsKKwl1MzIgaTsKKworCURCQ19SRVFVSVJFKGNvdW50IDwgTUFYX0VWRU5UUyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKwkJc3luY19ldmVudHNbaV0gPSBhbm90aWZpY2F0aW9uc1tpXS0+aGFuZGxlOworCisJc3RhdHVzID0gc3luY193YWl0X29uX211bHRpcGxlX2V2ZW50cyhzeW5jX2V2ZW50cywgY291bnQsIHV0aW1lb3V0LAorCQkJCQkgICAgICBwdV9pbmRleCk7CisKKwlyZXR1cm4gc3RhdHVzOworCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9ubGRyLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9ubGRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhmNGVlYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL25sZHIuYwpAQCAtMCwwICsxLDE5NzQgQEAKKy8qCisgKiBubGRyLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogRFNQL0JJT1MgQnJpZGdlIGR5bmFtaWMgKyBvdmVybGF5IE5vZGUgbG9hZGVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmMuaD4KKworLyogUGxhdGZvcm0gbWFuYWdlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9jb2QuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2Lmg+CisKKy8qIFJlc291cmNlIG1hbmFnZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJsbC5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRjZC5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9ybW0uaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvdXVpZHV0aWwuaD4KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9ubGRyLmg+CisjaW5jbHVkZSA8bGludXgvZ2NkLmg+CisKKy8qIE5hbWUgb2Ygc2VjdGlvbiBjb250YWluaW5nIGR5bmFtaWMgbG9hZCBtZW0gKi8KKyNkZWZpbmUgRFlOTUVNU0VDVCAgIi5kc3BicmlkZ2VfbWVtIgorCisvKiBOYW1lIG9mIHNlY3Rpb24gY29udGFpbmluZyBkZXBlbmRlbnQgbGlicmFyeSBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBERVBMSUJTRUNUICAiLmRzcGJyaWRnZV9kZXBsaWJzIgorCisvKiBNYXggZGVwdGggb2YgcmVjdXJzaW9uIGZvciBsb2FkaW5nIG5vZGUncyBkZXBlbmRlbnQgbGlicmFyaWVzICovCisjZGVmaW5lIE1BWERFUFRICSAgICA1CisKKy8qIE1heCBudW1iZXIgb2YgcGVyc2lzdGVudCBsaWJyYXJpZXMga2VwdCBieSBhIG5vZGUgKi8KKyNkZWZpbmUgTUFYTElCUwkgNQorCisvKgorICogIERlZmluZXMgZm9yIGV4dHJhY3RpbmcgcGFja2VkIGR5bmFtaWMgbG9hZCBtZW1vcnkgcmVxdWlyZW1lbnRzIGZyb20gdHdvCisgKiAgbWFza3MuCisgKiAgVGhlc2UgZGVmaW5lcyBtdXN0IG1hdGNoIG5vZGUuY2RiIGFuZCBkeW5tLmNkYgorICogIEZvcm1hdCBvZiBkYXRhL2NvZGUgbWFzayBpczoKKyAqICAgdXV1dXV1dXV8ZnVlZWVlZWV8ZnVkZGRkZGR8ZnVjY2NjY2N8CisgKiAgd2hlcmUKKyAqICAgICAgdSA9IHVudXNlZAorICogICAgICBjY2NjY2MgPSBwcmVmZXJlZC9yZXF1aXJlZCBkeW5hbWljIG1lbSBzZWdpZCBmb3IgY3JlYXRlIHBoYXNlIGRhdGEvY29kZQorICogICAgICBkZGRkZGQgPSBwcmVmZXJlZC9yZXF1aXJlZCBkeW5hbWljIG1lbSBzZWdpZCBmb3IgZGVsZXRlIHBoYXNlIGRhdGEvY29kZQorICogICAgICBlZWVlZWUgPSBwcmVmZXJlZC9yZXEuIGR5bmFtaWMgbWVtIHNlZ2lkIGZvciBleGVjdXRlIHBoYXNlIGRhdGEvY29kZQorICogICAgICBmID0gZmxhZyBpbmRpY2F0aW5nIGlmIG1lbW9yeSBpcyBwcmVmZXJyZWQgb3IgcmVxdWlyZWQ6CisgKgkgIGYgPSAxIGlmIHJlcXVpcmVkLCBmID0gMCBpZiBwcmVmZXJyZWQuCisgKgorICogIFRoZSA2IGJpdHMgb2YgdGhlIHNlZ2lkIGFyZSBpbnRlcnByZXRlZCBhcyBmb2xsb3dzOgorICoKKyAqICBJZiB0aGUgNnRoIGJpdCAoYml0IDUpIGlzIG5vdCBzZXQsIHRoZW4gdGhpcyBzcGVjaWZpZXMgYSBtZW1vcnkgc2VnbWVudAorICogIGJldHdlZW4gMCBhbmQgMzEgKGEgbWF4aW11bSBvZiAzMiBkeW5hbWljIGxvYWRpbmcgbWVtb3J5IHNlZ21lbnRzKS4KKyAqICBJZiB0aGUgNnRoIGJpdCAoYml0IDUpIGlzIHNldCwgc2VnaWQgaGFzIHRoZSBmb2xsb3dpbmcgaW50ZXJwcmV0YXRpb246CisgKiAgICAgIHNlZ2lkID0gMzIgLSBBbnkgaW50ZXJuYWwgbWVtb3J5IHNlZ21lbnQgY2FuIGJlIHVzZWQuCisgKiAgICAgIHNlZ2lkID0gMzMgLSBBbnkgZXh0ZXJuYWwgbWVtb3J5IHNlZ21lbnQgY2FuIGJlIHVzZWQuCisgKiAgICAgIHNlZ2lkID0gNjMgLSBBbnkgbWVtb3J5IHNlZ21lbnQgY2FuIGJlIHVzZWQgKGluIHRoaXMgY2FzZSB0aGUKKyAqCQkgICByZXF1aXJlZC9wcmVmZXJyZWQgZmxhZyBpcyBpcnJlbGV2YW50KS4KKyAqCisgKi8KKy8qIE1heGltdW0gYWxsb3dlZCBkeW5hbWljIGxvYWRpbmcgbWVtb3J5IHNlZ21lbnRzICovCisjZGVmaW5lIE1BWE1FTVNFR1MgICAgICAzMgorCisjZGVmaW5lIE1BWFNFR0lECTMJLyogTGFyZ2VzdCBwb3NzaWJsZSAocmVhbCkgc2VnaWQgKi8KKyNkZWZpbmUgTUVNSU5URVJOQUxJRCAgIDMyCS8qIFNlZ2lkIG1lYW5pbmcgdXNlIGludGVybmFsIG1lbSAqLworI2RlZmluZSBNRU1FWFRFUk5BTElEICAgMzMJLyogU2VnaWQgbWVhbmluZyB1c2UgZXh0ZXJuYWwgbWVtICovCisjZGVmaW5lIE5VTExJRAkgIDYzCQkvKiBTZWdpZCBtZWFuaW5nIG5vIG1lbW9yeSByZXEvcHJlZiAqLworI2RlZmluZSBGTEFHQklUCSA3CQkvKiA3dGggYml0IGlzIHByZWYuL3JlcS4gZmxhZyAqLworI2RlZmluZSBTRUdNQVNLCSAweDNmCQkvKiBCaXRzIDAgLSA1ICovCisKKyNkZWZpbmUgQ1JFQVRFQklUCTAJLyogQ3JlYXRlIHNlZ2lkIHN0YXJ0cyBhdCBiaXQgMCAqLworI2RlZmluZSBERUxFVEVCSVQJOAkvKiBEZWxldGUgc2VnaWQgc3RhcnRzIGF0IGJpdCA4ICovCisjZGVmaW5lIEVYRUNVVEVCSVQgICAgICAxNgkvKiBFeGVjdXRlIHNlZ2lkIHN0YXJ0cyBhdCBiaXQgMTYgKi8KKworLyoKKyAqICBNYXNrcyB0aGF0IGRlZmluZSBtZW1vcnkgdHlwZS4gIE11c3QgbWF0Y2ggZGVmaW5lcyBpbiBkeW5tLmNkYi4KKyAqLworI2RlZmluZSBEWU5NX0NPREUJMHgyCisjZGVmaW5lIERZTk1fREFUQQkweDQKKyNkZWZpbmUgRFlOTV9DT0RFREFUQSAgIChEWU5NX0NPREUgfCBEWU5NX0RBVEEpCisjZGVmaW5lIERZTk1fSU5URVJOQUwgICAweDgKKyNkZWZpbmUgRFlOTV9FWFRFUk5BTCAgIDB4MTAKKworLyoKKyAqICBEZWZpbmVzIGZvciBwYWNraW5nIG1lbW9yeSByZXF1aXJlbWVudC9wcmVmZXJlbmNlIGZsYWdzIGZvciBjb2RlIGFuZAorICogIGRhdGEgb2YgZWFjaCBvZiB0aGUgbm9kZSdzIHBoYXNlcyBpbnRvIG9uZSBtYXNrLgorICogIFRoZSBiaXQgaXMgc2V0IGlmIHRoZSBzZWdpZCBpcyByZXF1aXJlZCBmb3IgbG9hZGluZyBjb2RlL2RhdGEgb2YgdGhlCisgKiAgZ2l2ZW4gcGhhc2UuIFRoZSBiaXQgaXMgbm90IHNldCwgaWYgdGhlIHNlZ2lkIGlzIHByZWZlcnJlZCBvbmx5LgorICoKKyAqICBUaGVzZSBkZWZpbmVzIGFyZSBhbHNvIHVzZWQgYXMgaW5kZWNlcyBpbnRvIGEgc2VnaWQgYXJyYXkgZm9yIHRoZSBub2RlLgorICogIGVnIG5vZGUncyBzZWdpZFtDUkVBVEVEQVRBRkxBR0JJVF0gaXMgdGhlIG1lbW9yeSBzZWdtZW50IGlkIHRoYXQgdGhlCisgKiAgY3JlYXRlIHBoYXNlIGRhdGEgaXMgcmVxdWlyZWQgb3IgcHJlZmVycmVkIHRvIGJlIGxvYWRlZCBpbnRvLgorICovCisjZGVmaW5lIENSRUFURURBVEFGTEFHQklUICAgMAorI2RlZmluZSBDUkVBVEVDT0RFRkxBR0JJVCAgIDEKKyNkZWZpbmUgRVhFQ1VURURBVEFGTEFHQklUICAyCisjZGVmaW5lIEVYRUNVVEVDT0RFRkxBR0JJVCAgMworI2RlZmluZSBERUxFVEVEQVRBRkxBR0JJVCAgIDQKKyNkZWZpbmUgREVMRVRFQ09ERUZMQUdCSVQgICA1CisjZGVmaW5lIE1BWEZMQUdTCSAgICA2CisKKyAgICAvKgorICAgICAqICBUaGVzZSBuYW1lcyBtYXkgYmUgZW1iZWRkZWQgaW4gb3ZlcmxheSBzZWN0aW9ucyB0byBpZGVudGlmeSB3aGljaAorICAgICAqICBub2RlIHBoYXNlIHRoZSBzZWN0aW9uIHNob3VsZCBiZSBvdmVybGF5ZWQuCisgKi8KKyNkZWZpbmUgUENSRUFURQkgImNyZWF0ZSIKKyNkZWZpbmUgUERFTEVURQkgImRlbGV0ZSIKKyNkZWZpbmUgUEVYRUNVVEUJImV4ZWN1dGUiCisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19lcXVhbF91dWlkKHN0cnVjdCBkc3BfdXVpZCAqdXVpZDEsCisJCQkJCQkJc3RydWN0IGRzcF91dWlkICp1dWlkMikKK3sKKwlyZXR1cm4gIW1lbWNtcCh1dWlkMSwgdXVpZDIsIHNpemVvZihzdHJ1Y3QgZHNwX3V1aWQpKTsKK30KKworICAgIC8qCisgICAgICogID09PT09PT09IG1lbV9zZWdfaW5mbyA9PT09PT09PQorICAgICAqICBGb3JtYXQgb2YgZHluYW1pYyBsb2FkaW5nIG1lbW9yeSBzZWdtZW50IGluZm8gaW4gY29mZiBmaWxlLgorICAgICAqICBNdXN0IG1hdGNoIGR5bm0uaDU1LgorICovCitzdHJ1Y3QgbWVtX3NlZ19pbmZvIHsKKwl1MzIgc2VnaWQ7CQkvKiBEeW5hbWljIGxvYWRpbmcgbWVtb3J5IHNlZ21lbnQgbnVtYmVyICovCisJdTMyIGJhc2U7CisJdTMyIGxlbjsKKwl1MzIgdHlwZTsJCS8qIE1hc2sgb2YgRFlOTV9DT0RFLCBEWU5NX0lOVEVSTkFMLCBldGMuICovCit9OworCisvKgorICogID09PT09PT09IGxpYl9ub2RlID09PT09PT09CisgKiAgRm9yIG1haW50YWluaW5nIGEgdHJlZSBvZiBsaWJyYXJ5IGRlcGVuZGVuY2llcy4KKyAqLworc3RydWN0IGxpYl9ub2RlIHsKKwlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliOwkvKiBUaGUgbGlicmFyeSAqLworCXUxNiBkZXBfbGliczsJCS8qIE51bWJlciBvZiBkZXBlbmRlbnQgbGlicmFyaWVzICovCisJc3RydWN0IGxpYl9ub2RlICpkZXBfbGlic190cmVlOwkvKiBEZXBlbmRlbnQgbGlicmFyaWVzIG9mIGxpYiAqLworfTsKKworLyoKKyAqICA9PT09PT09PSBvdmx5X3NlY3QgPT09PT09PT0KKyAqICBJbmZvcm1hdGlvbiBuZWVkZWQgdG8gb3ZlcmxheSBhIHNlY3Rpb24uCisgKi8KK3N0cnVjdCBvdmx5X3NlY3QgeworCXN0cnVjdCBvdmx5X3NlY3QgKm5leHRfc2VjdDsKKwl1MzIgc2VjdF9sb2FkX2FkZHI7CS8qIExvYWQgYWRkcmVzcyBvZiBzZWN0aW9uICovCisJdTMyIHNlY3RfcnVuX2FkZHI7CS8qIFJ1biBhZGRyZXNzIG9mIHNlY3Rpb24gKi8KKwl1MzIgc2l6ZTsJCS8qIFNpemUgb2Ygc2VjdGlvbiAqLworCXUxNiBwYWdlOwkJLyogREJMX0NPREUsIERCTF9EQVRBICovCit9OworCisvKgorICogID09PT09PT09IG92bHlfbm9kZSA9PT09PT09PQorICogIEZvciBtYWludGFpbmluZyBhIGxpc3Qgb2Ygb3ZlcmxheSBub2Rlcywgd2l0aCBzZWN0aW9ucyB0aGF0IG5lZWQgdG8gYmUKKyAqICBvdmVybGF5ZWQgZm9yIGVhY2ggb2YgdGhlIG5vZGVzIHBoYXNlcy4KKyAqLworc3RydWN0IG92bHlfbm9kZSB7CisJc3RydWN0IGRzcF91dWlkIHV1aWQ7CisJY2hhciAqbm9kZV9uYW1lOworCXN0cnVjdCBvdmx5X3NlY3QgKmNyZWF0ZV9zZWN0c19saXN0OworCXN0cnVjdCBvdmx5X3NlY3QgKmRlbGV0ZV9zZWN0c19saXN0OworCXN0cnVjdCBvdmx5X3NlY3QgKmV4ZWN1dGVfc2VjdHNfbGlzdDsKKwlzdHJ1Y3Qgb3ZseV9zZWN0ICpvdGhlcl9zZWN0c19saXN0OworCXUxNiBjcmVhdGVfc2VjdHM7CisJdTE2IGRlbGV0ZV9zZWN0czsKKwl1MTYgZXhlY3V0ZV9zZWN0czsKKwl1MTYgb3RoZXJfc2VjdHM7CisJdTE2IGNyZWF0ZV9yZWY7CisJdTE2IGRlbGV0ZV9yZWY7CisJdTE2IGV4ZWN1dGVfcmVmOworCXUxNiBvdGhlcl9yZWY7Cit9OworCisvKgorICogID09PT09PT09IG5sZHJfb2JqZWN0ID09PT09PT09CisgKiAgT3ZlcmxheSBsb2FkZXIgb2JqZWN0LgorICovCitzdHJ1Y3Qgbmxkcl9vYmplY3QgeworCXN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iajsJLyogRGV2aWNlIG9iamVjdCAqLworCXN0cnVjdCBkY2RfbWFuYWdlciAqaGRjZF9tZ3I7CS8qIFByb2MvTm9kZSBkYXRhIG1hbmFnZXIgKi8KKwlzdHJ1Y3QgZGJsbF90YXJfb2JqICpkYmxsOwkvKiBUaGUgREJMIGxvYWRlciAqLworCXN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpiYXNlX2xpYjsJLyogQmFzZSBpbWFnZSBsaWJyYXJ5ICovCisJc3RydWN0IHJtbV90YXJnZXRfb2JqICpybW07CS8qIFJlbW90ZSBtZW1vcnkgbWFuYWdlciBmb3IgRFNQICovCisJc3RydWN0IGRibGxfZnhucyBsZHJfZnhuczsJLyogTG9hZGVyIGZ1bmN0aW9uIHRhYmxlICovCisJc3RydWN0IGRibGxfYXR0cnMgbGRyX2F0dHJzOwkvKiBhdHRycyB0byBwYXNzIHRvIGxvYWRlciBmdW5jdGlvbnMgKi8KKwlubGRyX292bHlmeG4gb3ZseV9meG47CS8qICJ3cml0ZSIgZm9yIG92ZXJsYXkgbm9kZXMgKi8KKwlubGRyX3dyaXRlZnhuIHdyaXRlX2Z4bjsJLyogIndyaXRlIiBmb3IgZHluYW1pYyBub2RlcyAqLworCXN0cnVjdCBvdmx5X25vZGUgKm92bHlfdGFibGU7CS8qIFRhYmxlIG9mIG92ZXJsYXkgbm9kZXMgKi8KKwl1MTYgb3ZseV9ub2RlczsJCS8qIE51bWJlciBvZiBvdmVybGF5IG5vZGVzIGluIGJhc2UgKi8KKwl1MTYgb3ZseV9uaWQ7CQkvKiBJbmRleCBmb3IgdHJhY2tpbmcgb3ZlcmxheSBub2RlcyAqLworCXUxNiBkbG9hZF9zZWdzOwkJLyogTnVtYmVyIG9mIGR5bmFtaWMgbG9hZCBtZW0gc2VncyAqLworCXUzMiAqc2VnX3RhYmxlOwkJLyogbWVtdHlwZXMgb2YgZHluYW1pYyBtZW1vcnkgc2VncworCQkJCSAqIGluZGV4ZWQgYnkgc2VnaWQKKwkJCQkgKi8KKwl1MTYgdXNfZHNwX21hdV9zaXplOwkvKiBTaXplIG9mIERTUCBNQVUgKi8KKwl1MTYgdXNfZHNwX3dvcmRfc2l6ZTsJLyogU2l6ZSBvZiBEU1Agd29yZCAqLworfTsKKworLyoKKyAqICA9PT09PT09PSBubGRyX25vZGVvYmplY3QgPT09PT09PT0KKyAqICBEeW5hbWljIG5vZGUgb2JqZWN0LiBUaGlzIG9iamVjdCBpcyBjcmVhdGVkIHdoZW4gYSBub2RlIGlzIGFsbG9jYXRlZC4KKyAqLworc3RydWN0IG5sZHJfbm9kZW9iamVjdCB7CisJc3RydWN0IG5sZHJfb2JqZWN0ICpubGRyX29iajsJLyogRHluYW1pYyBsb2FkZXIgaGFuZGxlICovCisJdm9pZCAqcHJpdl9yZWY7CQkvKiBIYW5kbGUgdG8gcGFzcyB0byBkYmxfd3JpdGVfZnhuICovCisJc3RydWN0IGRzcF91dWlkIHV1aWQ7CS8qIE5vZGUncyBVVUlEICovCisJYm9vbCBkeW5hbWljOwkJLyogRHluYW1pY2FsbHkgbG9hZGVkIG5vZGU/ICovCisJYm9vbCBvdmVybGF5OwkJLyogT3ZlcmxheSBub2RlPyAqLworCWJvb2wgKnBmX3BoYXNlX3NwbGl0OwkvKiBNdWx0aXBsZSBwaGFzZSBsaWJyYXJpZXM/ICovCisJc3RydWN0IGxpYl9ub2RlIHJvb3Q7CS8qIExpYnJhcnkgY29udGFpbmluZyBub2RlIHBoYXNlICovCisJc3RydWN0IGxpYl9ub2RlIGNyZWF0ZV9saWI7CS8qIExpYnJhcnkgd2l0aCBjcmVhdGUgcGhhc2UgbGliICovCisJc3RydWN0IGxpYl9ub2RlIGV4ZWN1dGVfbGliOwkvKiBMaWJyYXJ5IHdpdGggZXhlY3V0ZSBwaGFzZSBsaWIgKi8KKwlzdHJ1Y3QgbGliX25vZGUgZGVsZXRlX2xpYjsJLyogTGlicmFyeSB3aXRoIGRlbGV0ZSBwaGFzZSBsaWIgKi8KKwkvKiBsaWJzIHJlbWFpbiBsb2FkZWQgdW50aWwgRGVsZXRlICovCisJc3RydWN0IGxpYl9ub2RlIHBlcnNfbGliX3RhYmxlW01BWExJQlNdOworCXMzMiBwZXJzX2xpYnM7CQkvKiBOdW1iZXIgb2YgcGVyc2lzdGVudCBsaWJyYXJpZXMgKi8KKwkvKiBQYXRoIGluIGxpYiBkZXBlbmRlbmN5IHRyZWUgKi8KKwlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliX3BhdGhbTUFYREVQVEggKyAxXTsKKwllbnVtIG5sZHJfcGhhc2UgcGhhc2U7CS8qIE5vZGUgcGhhc2UgY3VycmVudGx5IGJlaW5nIGxvYWRlZCAqLworCisJLyoKKwkgKiAgRHluYW1pYyBsb2FkaW5nIG1lbW9yeSBzZWdtZW50cyBmb3IgZGF0YSBhbmQgY29kZSBvZiBlYWNoIHBoYXNlLgorCSAqLworCXUxNiBzZWdfaWRbTUFYRkxBR1NdOworCisJLyoKKwkgKiAgTWFzayBpbmRpY2F0aW5nIHdoZXRoZXIgZWFjaCBtZW0gc2VnbWVudCBzcGVjaWZpZWQgaW4gc2VnX2lkW10KKwkgKiAgaXMgcHJlZmVycmVkIG9yIHJlcXVpcmVkLgorCSAqICBGb3IgZXhhbXBsZQorCSAqICAJaWYgKGNvZGVfZGF0YV9mbGFnX21hc2sgJiAoMSA8PCBFWEVDVVRFREFUQUZMQUdCSVQpKSAhPSAwLAorCSAqICB0aGVuIGl0IGlzIHJlcXVpcmVkIHRvIGxvYWQgZXhlY3V0ZSBwaGFzZSBkYXRhIGludG8gdGhlIG1lbW9yeQorCSAqICBzcGVjaWZpZWQgYnkgc2VnX2lkW0VYRUNVVEVEQVRBRkxBR0JJVF0uCisJICovCisJdTMyIGNvZGVfZGF0YV9mbGFnX21hc2s7Cit9OworCisvKiBEeW5hbWljIGxvYWRlciBmdW5jdGlvbiB0YWJsZSAqLworc3RhdGljIHN0cnVjdCBkYmxsX2Z4bnMgbGRyX2Z4bnMgPSB7CisJKGRibGxfY2xvc2VfZnhuKSBkYmxsX2Nsb3NlLAorCShkYmxsX2NyZWF0ZV9meG4pIGRibGxfY3JlYXRlLAorCShkYmxsX2RlbGV0ZV9meG4pIGRibGxfZGVsZXRlLAorCShkYmxsX2V4aXRfZnhuKSBkYmxsX2V4aXQsCisJKGRibGxfZ2V0X2F0dHJzX2Z4bikgZGJsbF9nZXRfYXR0cnMsCisJKGRibGxfZ2V0X2FkZHJfZnhuKSBkYmxsX2dldF9hZGRyLAorCShkYmxsX2dldF9jX2FkZHJfZnhuKSBkYmxsX2dldF9jX2FkZHIsCisJKGRibGxfZ2V0X3NlY3RfZnhuKSBkYmxsX2dldF9zZWN0LAorCShkYmxsX2luaXRfZnhuKSBkYmxsX2luaXQsCisJKGRibGxfbG9hZF9meG4pIGRibGxfbG9hZCwKKwkoZGJsbF9sb2FkX3NlY3RfZnhuKSBkYmxsX2xvYWRfc2VjdCwKKwkoZGJsbF9vcGVuX2Z4bikgZGJsbF9vcGVuLAorCShkYmxsX3JlYWRfc2VjdF9meG4pIGRibGxfcmVhZF9zZWN0LAorCShkYmxsX3NldF9hdHRyc19meG4pIGRibGxfc2V0X2F0dHJzLAorCShkYmxsX3VubG9hZF9meG4pIGRibGxfdW5sb2FkLAorCShkYmxsX3VubG9hZF9zZWN0X2Z4bikgZGJsbF91bmxvYWRfc2VjdCwKK307CisKK3N0YXRpYyB1MzIgcmVmczsJCS8qIG1vZHVsZSByZWZlcmVuY2UgY291bnQgKi8KKworc3RhdGljIGludCBhZGRfb3ZseV9pbmZvKHZvaWQgKmhhbmRsZSwgc3RydWN0IGRibGxfc2VjdF9pbmZvICpzZWN0X2luZm8sCisJCQkJdTMyIGFkZHIsIHUzMiBieXRlcyk7CitzdGF0aWMgaW50IGFkZF9vdmx5X25vZGUoc3RydWN0IGRzcF91dWlkICp1dWlkX29iaiwKKwkJCQllbnVtIGRzcF9kY2RvYmp0eXBlIG9ial90eXBlLCB2b2lkICpoYW5kbGUpOworc3RhdGljIGludCBhZGRfb3ZseV9zZWN0KHN0cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmosCisJCQkJc3RydWN0IG92bHlfc2VjdCAqKmxzdCwKKwkJCQlzdHJ1Y3QgZGJsbF9zZWN0X2luZm8gKnNlY3RfaW5mLAorCQkJCWJvb2wgKmV4aXN0cywgdTMyIGFkZHIsIHUzMiBieXRlcyk7CitzdGF0aWMgczMyIGZha2Vfb3ZseV93cml0ZSh2b2lkICpoYW5kbGUsIHUzMiBkc3BfYWRkcmVzcywgdm9pZCAqYnVmLCB1MzIgYnl0ZXMsCisJCQkgICBzMzIgbXR5cGUpOworc3RhdGljIHZvaWQgZnJlZV9zZWN0cyhzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqLAorCQkgICAgICAgc3RydWN0IG92bHlfc2VjdCAqcGhhc2Vfc2VjdHMsIHUxNiBhbGxvY19udW0pOworc3RhdGljIGJvb2wgZ2V0X3N5bWJvbF92YWx1ZSh2b2lkICpoYW5kbGUsIHZvaWQgKnBhcmcsIHZvaWQgKnJtbV9oYW5kbGUsCisJCQkgICAgIGNoYXIgKnN5bV9uYW1lLCBzdHJ1Y3QgZGJsbF9zeW1fdmFsICoqc3ltKTsKK3N0YXRpYyBpbnQgbG9hZF9saWIoc3RydWN0IG5sZHJfbm9kZW9iamVjdCAqbmxkcl9ub2RlX29iaiwKKwkJCSAgIHN0cnVjdCBsaWJfbm9kZSAqcm9vdCwgc3RydWN0IGRzcF91dWlkIHV1aWQsCisJCQkgICBib29sIHJvb3RfcHJzdG50LAorCQkJICAgc3RydWN0IGRibGxfbGlicmFyeV9vYmogKipsaWJfcGF0aCwKKwkJCSAgIGVudW0gbmxkcl9waGFzZSBwaGFzZSwgdTE2IGRlcHRoKTsKK3N0YXRpYyBpbnQgbG9hZF9vdmx5KHN0cnVjdCBubGRyX25vZGVvYmplY3QgKm5sZHJfbm9kZV9vYmosCisJCQkgICAgZW51bSBubGRyX3BoYXNlIHBoYXNlKTsKK3N0YXRpYyBpbnQgcmVtb3RlX2FsbG9jKHZvaWQgKipyZWYsIHUxNiBtZW1fc2VjdCwgdTMyIHNpemUsCisJCQkgICAgICAgdTMyIGFsaWduLCB1MzIgKmRzcF9hZGRyZXNzLAorCQkJICAgICAgIHMzMiBzZWdtbnRfaWQsCisJCQkgICAgICAgczMyIHJlcSwgYm9vbCByZXNlcnZlKTsKK3N0YXRpYyBpbnQgcmVtb3RlX2ZyZWUodm9pZCAqKnJlZiwgdTE2IHNwYWNlLCB1MzIgZHNwX2FkZHJlc3MsIHUzMiBzaXplLAorCQkJICAgICAgYm9vbCByZXNlcnZlKTsKKworc3RhdGljIHZvaWQgdW5sb2FkX2xpYihzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICpubGRyX25vZGVfb2JqLAorCQkgICAgICAgc3RydWN0IGxpYl9ub2RlICpyb290KTsKK3N0YXRpYyB2b2lkIHVubG9hZF9vdmx5KHN0cnVjdCBubGRyX25vZGVvYmplY3QgKm5sZHJfbm9kZV9vYmosCisJCQllbnVtIG5sZHJfcGhhc2UgcGhhc2UpOworc3RhdGljIGJvb2wgZmluZF9pbl9wZXJzaXN0ZW50X2xpYl9hcnJheShzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICpubGRyX25vZGVfb2JqLAorCQkJCQkgc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYik7CitzdGF0aWMgdTMyIGZpbmRfbGNtKHUzMiBhLCB1MzIgYik7CisKKy8qCisgKiAgPT09PT09PT0gbmxkcl9hbGxvY2F0ZSA9PT09PT09PQorICovCitpbnQgbmxkcl9hbGxvY2F0ZShzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqLCB2b2lkICpwcml2X3JlZiwKKwkJCSBjb25zdCBzdHJ1Y3QgZGNkX25vZGVwcm9wcyAqbm9kZV9wcm9wcywKKwkJCSBzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICoqbmxkcl9ub2Rlb2JqLAorCQkJIGJvb2wgKnBmX3BoYXNlX3NwbGl0KQoreworCXN0cnVjdCBubGRyX25vZGVvYmplY3QgKm5sZHJfbm9kZV9vYmogPSBOVUxMOworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKG5vZGVfcHJvcHMgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUobmxkcl9ub2Rlb2JqICE9IE5VTEwpOworCURCQ19SRVFVSVJFKG5sZHJfb2JqKTsKKworCS8qIEluaXRpYWxpemUgaGFuZGxlIGluIGNhc2Ugb2YgZmFpbHVyZSAqLworCSpubGRyX25vZGVvYmogPSBOVUxMOworCS8qIEFsbG9jYXRlIG5vZGUgb2JqZWN0ICovCisJbmxkcl9ub2RlX29iaiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBubGRyX25vZGVvYmplY3QpLCBHRlBfS0VSTkVMKTsKKworCWlmIChubGRyX25vZGVfb2JqID09IE5VTEwpIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwl9IGVsc2UgeworCQlubGRyX25vZGVfb2JqLT5wZl9waGFzZV9zcGxpdCA9IHBmX3BoYXNlX3NwbGl0OworCQlubGRyX25vZGVfb2JqLT5wZXJzX2xpYnMgPSAwOworCQlubGRyX25vZGVfb2JqLT5ubGRyX29iaiA9IG5sZHJfb2JqOworCQlubGRyX25vZGVfb2JqLT5wcml2X3JlZiA9IHByaXZfcmVmOworCQkvKiBTYXZlIG5vZGUncyBVVUlELiAqLworCQlubGRyX25vZGVfb2JqLT51dWlkID0gbm9kZV9wcm9wcy0+bmRiX3Byb3BzLnVpX25vZGVfaWQ7CisJCS8qCisJCSAqICBEZXRlcm1pbmUgaWYgbm9kZSBpcyBhIGR5bmFtaWNhbGx5IGxvYWRlZCBub2RlIGZyb20KKwkJICogIG5kYl9wcm9wcy4KKwkJICovCisJCWlmIChub2RlX3Byb3BzLT51c19sb2FkX3R5cGUgPT0gTkxEUl9EWU5BTUlDTE9BRCkgeworCQkJLyogRHluYW1pYyBub2RlICovCisJCQlubGRyX25vZGVfb2JqLT5keW5hbWljID0gdHJ1ZTsKKwkJCS8qCisJCQkgKiAgRXh0cmFjdCBtZW1vcnkgcmVxdWlyZW1lbnRzIGZyb20gbmRiX3Byb3BzIG1hc2tzCisJCQkgKi8KKwkJCS8qIENyZWF0ZSBwaGFzZSAqLworCQkJbmxkcl9ub2RlX29iai0+c2VnX2lkW0NSRUFURURBVEFGTEFHQklUXSA9ICh1MTYpCisJCQkgICAgKG5vZGVfcHJvcHMtPnVsX2RhdGFfbWVtX3NlZ19tYXNrID4+IENSRUFURUJJVCkgJgorCQkJICAgIFNFR01BU0s7CisJCQlubGRyX25vZGVfb2JqLT5jb2RlX2RhdGFfZmxhZ19tYXNrIHw9CisJCQkgICAgKChub2RlX3Byb3BzLT51bF9kYXRhX21lbV9zZWdfbWFzayA+PgorCQkJICAgICAgKENSRUFURUJJVCArIEZMQUdCSVQpKSAmIDEpIDw8IENSRUFURURBVEFGTEFHQklUOworCQkJbmxkcl9ub2RlX29iai0+c2VnX2lkW0NSRUFURUNPREVGTEFHQklUXSA9ICh1MTYpCisJCQkgICAgKG5vZGVfcHJvcHMtPnVsX2NvZGVfbWVtX3NlZ19tYXNrID4+CisJCQkgICAgIENSRUFURUJJVCkgJiBTRUdNQVNLOworCQkJbmxkcl9ub2RlX29iai0+Y29kZV9kYXRhX2ZsYWdfbWFzayB8PQorCQkJICAgICgobm9kZV9wcm9wcy0+dWxfY29kZV9tZW1fc2VnX21hc2sgPj4KKwkJCSAgICAgIChDUkVBVEVCSVQgKyBGTEFHQklUKSkgJiAxKSA8PCBDUkVBVEVDT0RFRkxBR0JJVDsKKwkJCS8qIEV4ZWN1dGUgcGhhc2UgKi8KKwkJCW5sZHJfbm9kZV9vYmotPnNlZ19pZFtFWEVDVVRFREFUQUZMQUdCSVRdID0gKHUxNikKKwkJCSAgICAobm9kZV9wcm9wcy0+dWxfZGF0YV9tZW1fc2VnX21hc2sgPj4KKwkJCSAgICAgRVhFQ1VURUJJVCkgJiBTRUdNQVNLOworCQkJbmxkcl9ub2RlX29iai0+Y29kZV9kYXRhX2ZsYWdfbWFzayB8PQorCQkJICAgICgobm9kZV9wcm9wcy0+dWxfZGF0YV9tZW1fc2VnX21hc2sgPj4KKwkJCSAgICAgIChFWEVDVVRFQklUICsgRkxBR0JJVCkpICYgMSkgPDwKKwkJCSAgICBFWEVDVVRFREFUQUZMQUdCSVQ7CisJCQlubGRyX25vZGVfb2JqLT5zZWdfaWRbRVhFQ1VURUNPREVGTEFHQklUXSA9ICh1MTYpCisJCQkgICAgKG5vZGVfcHJvcHMtPnVsX2NvZGVfbWVtX3NlZ19tYXNrID4+CisJCQkgICAgIEVYRUNVVEVCSVQpICYgU0VHTUFTSzsKKwkJCW5sZHJfbm9kZV9vYmotPmNvZGVfZGF0YV9mbGFnX21hc2sgfD0KKwkJCSAgICAoKG5vZGVfcHJvcHMtPnVsX2NvZGVfbWVtX3NlZ19tYXNrID4+CisJCQkgICAgICAoRVhFQ1VURUJJVCArIEZMQUdCSVQpKSAmIDEpIDw8CisJCQkgICAgRVhFQ1VURUNPREVGTEFHQklUOworCQkJLyogRGVsZXRlIHBoYXNlICovCisJCQlubGRyX25vZGVfb2JqLT5zZWdfaWRbREVMRVRFREFUQUZMQUdCSVRdID0gKHUxNikKKwkJCSAgICAobm9kZV9wcm9wcy0+dWxfZGF0YV9tZW1fc2VnX21hc2sgPj4gREVMRVRFQklUKSAmCisJCQkgICAgU0VHTUFTSzsKKwkJCW5sZHJfbm9kZV9vYmotPmNvZGVfZGF0YV9mbGFnX21hc2sgfD0KKwkJCSAgICAoKG5vZGVfcHJvcHMtPnVsX2RhdGFfbWVtX3NlZ19tYXNrID4+CisJCQkgICAgICAoREVMRVRFQklUICsgRkxBR0JJVCkpICYgMSkgPDwgREVMRVRFREFUQUZMQUdCSVQ7CisJCQlubGRyX25vZGVfb2JqLT5zZWdfaWRbREVMRVRFQ09ERUZMQUdCSVRdID0gKHUxNikKKwkJCSAgICAobm9kZV9wcm9wcy0+dWxfY29kZV9tZW1fc2VnX21hc2sgPj4KKwkJCSAgICAgREVMRVRFQklUKSAmIFNFR01BU0s7CisJCQlubGRyX25vZGVfb2JqLT5jb2RlX2RhdGFfZmxhZ19tYXNrIHw9CisJCQkgICAgKChub2RlX3Byb3BzLT51bF9jb2RlX21lbV9zZWdfbWFzayA+PgorCQkJICAgICAgKERFTEVURUJJVCArIEZMQUdCSVQpKSAmIDEpIDw8IERFTEVURUNPREVGTEFHQklUOworCQl9IGVsc2UgeworCQkJLyogTm9uLWR5bmFtaWNhbGx5IGxvYWRlZCBub2RlcyBhcmUgcGFydCBvZiB0aGUKKwkJCSAqIGJhc2UgaW1hZ2UgKi8KKwkJCW5sZHJfbm9kZV9vYmotPnJvb3QubGliID0gbmxkcl9vYmotPmJhc2VfbGliOworCQkJLyogQ2hlY2sgZm9yIG92ZXJsYXkgbm9kZSAqLworCQkJaWYgKG5vZGVfcHJvcHMtPnVzX2xvYWRfdHlwZSA9PSBOTERSX09WTFlMT0FEKQorCQkJCW5sZHJfbm9kZV9vYmotPm92ZXJsYXkgPSB0cnVlOworCisJCX0KKwkJKm5sZHJfbm9kZW9iaiA9IChzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICopbmxkcl9ub2RlX29iajsKKwl9CisJLyogQ2xlYW51cCBvbiBmYWlsdXJlICovCisJaWYgKHN0YXR1cyAmJiBubGRyX25vZGVfb2JqKQorCQlrZnJlZShubGRyX25vZGVfb2JqKTsKKworCURCQ19FTlNVUkUoKCFzdGF0dXMgJiYgKm5sZHJfbm9kZW9iaikKKwkJICAgfHwgKHN0YXR1cyAmJiAqbmxkcl9ub2Rlb2JqID09IE5VTEwpKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IG5sZHJfY3JlYXRlID09PT09PT09CisgKi8KK2ludCBubGRyX2NyZWF0ZShzdHJ1Y3Qgbmxkcl9vYmplY3QgKipubGRyLAorCQkgICAgICAgc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAorCQkgICAgICAgY29uc3Qgc3RydWN0IG5sZHJfYXR0cnMgKnBhdHRycykKK3sKKwlzdHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tZ3I7CS8qIENPRCBtYW5hZ2VyICovCisJY2hhciAqcHN6X2NvZmZfYnVmID0gTlVMTDsKKwljaGFyIHN6X3psX2ZpbGVbQ09EX01BWFBBVEhMRU5HVEhdOworCXN0cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmogPSBOVUxMOworCXN0cnVjdCBkYmxsX2F0dHJzIHNhdmVfYXR0cnM7CisJc3RydWN0IGRibGxfYXR0cnMgbmV3X2F0dHJzOworCWRibGxfZmxhZ3MgZmxhZ3M7CisJdTMyIHVsX2VudHJ5OworCXUxNiBkbG9hZF9zZWdzID0gMDsKKwlzdHJ1Y3QgbWVtX3NlZ19pbmZvICptZW1faW5mb19vYmo7CisJdTMyIHVsX2xlbiA9IDA7CisJdTMyIHVsX2FkZHI7CisJc3RydWN0IHJtbV9zZWdtZW50ICpybW1fc2VncyA9IE5VTEw7CisJdTE2IGk7CisJaW50IHN0YXR1cyA9IDA7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKG5sZHIgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoaGRldl9vYmogIT0gTlVMTCk7CisJREJDX1JFUVVJUkUocGF0dHJzICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHBhdHRycy0+cGZuX292bHkgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUocGF0dHJzLT5wZm5fd3JpdGUgIT0gTlVMTCk7CisKKwkvKiBBbGxvY2F0ZSBkeW5hbWljIGxvYWRlciBvYmplY3QgKi8KKwlubGRyX29iaiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBubGRyX29iamVjdCksIEdGUF9LRVJORUwpOworCWlmIChubGRyX29iaikgeworCQlubGRyX29iai0+aGRldl9vYmogPSBoZGV2X29iajsKKwkJLyogd2FybmluZywgbGF6eSBzdGF0dXMgY2hlY2tpbmcgYWxlcnQhICovCisJCWRldl9nZXRfY29kX21ncihoZGV2X29iaiwgJmNvZF9tZ3IpOworCQlpZiAoY29kX21ncikgeworCQkJc3RhdHVzID0gY29kX2dldF9sb2FkZXIoY29kX21nciwgJm5sZHJfb2JqLT5kYmxsKTsKKwkJCURCQ19BU1NFUlQoIXN0YXR1cyk7CisJCQlzdGF0dXMgPSBjb2RfZ2V0X2Jhc2VfbGliKGNvZF9tZ3IsICZubGRyX29iai0+YmFzZV9saWIpOworCQkJREJDX0FTU0VSVCghc3RhdHVzKTsKKwkJCXN0YXR1cyA9CisJCQkgICAgY29kX2dldF9iYXNlX25hbWUoY29kX21nciwgc3pfemxfZmlsZSwKKwkJCQkJCQlDT0RfTUFYUEFUSExFTkdUSCk7CisJCQlEQkNfQVNTRVJUKCFzdGF0dXMpOworCQl9CisJCXN0YXR1cyA9IDA7CisJCS8qIGVuZCBsYXp5IHN0YXR1cyBjaGVja2luZyAqLworCQlubGRyX29iai0+dXNfZHNwX21hdV9zaXplID0gcGF0dHJzLT51c19kc3BfbWF1X3NpemU7CisJCW5sZHJfb2JqLT51c19kc3Bfd29yZF9zaXplID0gcGF0dHJzLT51c19kc3Bfd29yZF9zaXplOworCQlubGRyX29iai0+bGRyX2Z4bnMgPSBsZHJfZnhuczsKKwkJaWYgKCEobmxkcl9vYmotPmxkcl9meG5zLmluaXRfZnhuKCkpKQorCQkJc3RhdHVzID0gLUVOT01FTTsKKworCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJfQorCS8qIENyZWF0ZSB0aGUgRENEIE1hbmFnZXIgKi8KKwlpZiAoIXN0YXR1cykKKwkJc3RhdHVzID0gZGNkX2NyZWF0ZV9tYW5hZ2VyKE5VTEwsICZubGRyX29iai0+aGRjZF9tZ3IpOworCisJLyogR2V0IGR5bmFtaWMgbG9hZGluZyBtZW1vcnkgc2VjdGlvbnMgZnJvbSBiYXNlIGxpYiAqLworCWlmICghc3RhdHVzKSB7CisJCXN0YXR1cyA9CisJCSAgICBubGRyX29iai0+bGRyX2Z4bnMuZ2V0X3NlY3RfZnhuKG5sZHJfb2JqLT5iYXNlX2xpYiwKKwkJCQkJCSAgICBEWU5NRU1TRUNULCAmdWxfYWRkciwKKwkJCQkJCSAgICAmdWxfbGVuKTsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCXBzel9jb2ZmX2J1ZiA9CisJCQkJa3phbGxvYyh1bF9sZW4gKiBubGRyX29iai0+dXNfZHNwX21hdV9zaXplLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJCWlmICghcHN6X2NvZmZfYnVmKQorCQkJCXN0YXR1cyA9IC1FTk9NRU07CisJCX0gZWxzZSB7CisJCQkvKiBPayB0byBub3QgaGF2ZSBkeW5hbWljIGxvYWRpbmcgbWVtb3J5ICovCisJCQlzdGF0dXMgPSAwOworCQkJdWxfbGVuID0gMDsKKwkJCWRldl9kYmcoYnJpZGdlLCAiJXM6IGZhaWxlZCAtIG5vIGR5bmFtaWMgbG9hZGluZyBtZW0gIgorCQkJCSJzZWdtZW50czogMHgleFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJCX0KKwl9CisJaWYgKCFzdGF0dXMgJiYgdWxfbGVuID4gMCkgeworCQkvKiBSZWFkIHNlY3Rpb24gY29udGFpbmluZyBkeW5hbWljIGxvYWQgbWVtIHNlZ21lbnRzICovCisJCXN0YXR1cyA9CisJCSAgICBubGRyX29iai0+bGRyX2Z4bnMucmVhZF9zZWN0X2Z4bihubGRyX29iai0+YmFzZV9saWIsCisJCQkJCQkgICAgIERZTk1FTVNFQ1QsIHBzel9jb2ZmX2J1ZiwKKwkJCQkJCSAgICAgdWxfbGVuKTsKKwl9CisJaWYgKCFzdGF0dXMgJiYgdWxfbGVuID4gMCkgeworCQkvKiBQYXJzZSBtZW1vcnkgc2VnbWVudCBkYXRhICovCisJCWRsb2FkX3NlZ3MgPSAodTE2KSAoKigodTMyICopIHBzel9jb2ZmX2J1ZikpOworCQlpZiAoZGxvYWRfc2VncyA+IE1BWE1FTVNFR1MpCisJCQlzdGF0dXMgPSAtRUJBREY7CisJfQorCS8qIFBhcnNlIGR5bmFtaWMgbG9hZCBtZW1vcnkgc2VnbWVudHMgKi8KKwlpZiAoIXN0YXR1cyAmJiBkbG9hZF9zZWdzID4gMCkgeworCQlybW1fc2VncyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBybW1fc2VnbWVudCkgKiBkbG9hZF9zZWdzLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJbmxkcl9vYmotPnNlZ190YWJsZSA9CisJCQkJa3phbGxvYyhzaXplb2YodTMyKSAqIGRsb2FkX3NlZ3MsIEdGUF9LRVJORUwpOworCQlpZiAocm1tX3NlZ3MgPT0gTlVMTCB8fCBubGRyX29iai0+c2VnX3RhYmxlID09IE5VTEwpIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCX0gZWxzZSB7CisJCQlubGRyX29iai0+ZGxvYWRfc2VncyA9IGRsb2FkX3NlZ3M7CisJCQltZW1faW5mb19vYmogPSAoc3RydWN0IG1lbV9zZWdfaW5mbyAqKShwc3pfY29mZl9idWYgKworCQkJCQkJCSAgICAgICBzaXplb2YodTMyKSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgZGxvYWRfc2VnczsgaSsrKSB7CisJCQkJcm1tX3NlZ3NbaV0uYmFzZSA9IChtZW1faW5mb19vYmogKyBpKS0+YmFzZTsKKwkJCQlybW1fc2Vnc1tpXS5sZW5ndGggPSAobWVtX2luZm9fb2JqICsgaSktPmxlbjsKKwkJCQlybW1fc2Vnc1tpXS5zcGFjZSA9IDA7CisJCQkJbmxkcl9vYmotPnNlZ190YWJsZVtpXSA9CisJCQkJICAgIChtZW1faW5mb19vYmogKyBpKS0+dHlwZTsKKwkJCQlkZXZfZGJnKGJyaWRnZSwKKwkJCQkJIihwcm9jKSBETEwgTUVNU0VHTUVOVDogJWQsICIKKwkJCQkJIkJhc2U6IDB4JXgsIExlbmd0aDogMHgleFxuIiwgaSwKKwkJCQkJcm1tX3NlZ3NbaV0uYmFzZSwgcm1tX3NlZ3NbaV0ubGVuZ3RoKTsKKwkJCX0KKwkJfQorCX0KKwkvKiBDcmVhdGUgUmVtb3RlIG1lbW9yeSBtYW5hZ2VyICovCisJaWYgKCFzdGF0dXMpCisJCXN0YXR1cyA9IHJtbV9jcmVhdGUoJm5sZHJfb2JqLT5ybW0sIHJtbV9zZWdzLCBkbG9hZF9zZWdzKTsKKworCWlmICghc3RhdHVzKSB7CisJCS8qIHNldCB0aGUgYWxsb2MsIGZyZWUsIHdyaXRlIGZ1bmN0aW9ucyBmb3IgbG9hZGVyICovCisJCW5sZHJfb2JqLT5sZHJfZnhucy5nZXRfYXR0cnNfZnhuKG5sZHJfb2JqLT5kYmxsLCAmc2F2ZV9hdHRycyk7CisJCW5ld19hdHRycyA9IHNhdmVfYXR0cnM7CisJCW5ld19hdHRycy5hbGxvYyA9IChkYmxsX2FsbG9jX2Z4bikgcmVtb3RlX2FsbG9jOworCQluZXdfYXR0cnMuZnJlZSA9IChkYmxsX2ZyZWVfZnhuKSByZW1vdGVfZnJlZTsKKwkJbmV3X2F0dHJzLnN5bV9sb29rdXAgPSAoZGJsbF9zeW1fbG9va3VwKSBnZXRfc3ltYm9sX3ZhbHVlOworCQluZXdfYXR0cnMuc3ltX2hhbmRsZSA9IG5sZHJfb2JqOworCQluZXdfYXR0cnMud3JpdGUgPSAoZGJsbF93cml0ZV9meG4pIHBhdHRycy0+cGZuX3dyaXRlOworCQlubGRyX29iai0+b3ZseV9meG4gPSBwYXR0cnMtPnBmbl9vdmx5OworCQlubGRyX29iai0+d3JpdGVfZnhuID0gcGF0dHJzLT5wZm5fd3JpdGU7CisJCW5sZHJfb2JqLT5sZHJfYXR0cnMgPSBuZXdfYXR0cnM7CisJfQorCWtmcmVlKHJtbV9zZWdzKTsKKworCWtmcmVlKHBzel9jb2ZmX2J1Zik7CisKKwkvKiBHZXQgb3ZlcmxheSBub2RlcyAqLworCWlmICghc3RhdHVzKSB7CisJCXN0YXR1cyA9CisJCSAgICBjb2RfZ2V0X2Jhc2VfbmFtZShjb2RfbWdyLCBzel96bF9maWxlLCBDT0RfTUFYUEFUSExFTkdUSCk7CisJCS8qIGxhenkgY2hlY2sgKi8KKwkJREJDX0FTU0VSVCghc3RhdHVzKTsKKwkJLyogRmlyc3QgY291bnQgbnVtYmVyIG9mIG92ZXJsYXkgbm9kZXMgKi8KKwkJc3RhdHVzID0KKwkJICAgIGRjZF9nZXRfb2JqZWN0cyhubGRyX29iai0+aGRjZF9tZ3IsIHN6X3psX2ZpbGUsCisJCQkJICAgIGFkZF9vdmx5X25vZGUsICh2b2lkICopbmxkcl9vYmopOworCQkvKiBOb3cgYnVpbGQgdGFibGUgb2Ygb3ZlcmxheSBub2RlcyAqLworCQlpZiAoIXN0YXR1cyAmJiBubGRyX29iai0+b3ZseV9ub2RlcyA+IDApIHsKKwkJCS8qIEFsbG9jYXRlIHRhYmxlIGZvciBvdmVybGF5IG5vZGVzICovCisJCQlubGRyX29iai0+b3ZseV90YWJsZSA9CisJCQkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvdmx5X25vZGUpICoKKwkJCQkJbmxkcl9vYmotPm92bHlfbm9kZXMsIEdGUF9LRVJORUwpOworCQkJLyogUHV0IG92ZXJsYXkgbm9kZXMgaW4gdGhlIHRhYmxlICovCisJCQlubGRyX29iai0+b3ZseV9uaWQgPSAwOworCQkJc3RhdHVzID0gZGNkX2dldF9vYmplY3RzKG5sZHJfb2JqLT5oZGNkX21nciwgc3pfemxfZmlsZSwKKwkJCQkJCSBhZGRfb3ZseV9ub2RlLAorCQkJCQkJICh2b2lkICopbmxkcl9vYmopOworCQl9CisJfQorCS8qIERvIGEgZmFrZSByZWxvYWQgb2YgdGhlIGJhc2UgaW1hZ2UgdG8gZ2V0IG92ZXJsYXkgc2VjdGlvbiBpbmZvICovCisJaWYgKCFzdGF0dXMgJiYgbmxkcl9vYmotPm92bHlfbm9kZXMgPiAwKSB7CisJCXNhdmVfYXR0cnMud3JpdGUgPSBmYWtlX292bHlfd3JpdGU7CisJCXNhdmVfYXR0cnMubG9nX3dyaXRlID0gYWRkX292bHlfaW5mbzsKKwkJc2F2ZV9hdHRycy5sb2dfd3JpdGVfaGFuZGxlID0gbmxkcl9vYmo7CisJCWZsYWdzID0gREJMTF9DT0RFIHwgREJMTF9EQVRBIHwgREJMTF9TWU1COworCQlzdGF0dXMgPSBubGRyX29iai0+bGRyX2Z4bnMubG9hZF9meG4obmxkcl9vYmotPmJhc2VfbGliLCBmbGFncywKKwkJCQkJCSAgICAgJnNhdmVfYXR0cnMsICZ1bF9lbnRyeSk7CisJfQorCWlmICghc3RhdHVzKSB7CisJCSpubGRyID0gKHN0cnVjdCBubGRyX29iamVjdCAqKW5sZHJfb2JqOworCX0gZWxzZSB7CisJCWlmIChubGRyX29iaikKKwkJCW5sZHJfZGVsZXRlKChzdHJ1Y3Qgbmxkcl9vYmplY3QgKilubGRyX29iaik7CisKKwkJKm5sZHIgPSBOVUxMOworCX0KKwkvKiBGSVhNRTpUZW1wLiBGaXguIE11c3QgYmUgcmVtb3ZlZCAqLworCURCQ19FTlNVUkUoKCFzdGF0dXMgJiYgKm5sZHIpIHx8IChzdGF0dXMgJiYgKm5sZHIgPT0gTlVMTCkpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbmxkcl9kZWxldGUgPT09PT09PT0KKyAqLwordm9pZCBubGRyX2RlbGV0ZShzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqKQoreworCXN0cnVjdCBvdmx5X3NlY3QgKm92bHlfc2VjdGlvbjsKKwlzdHJ1Y3Qgb3ZseV9zZWN0ICpuZXh0OworCXUxNiBpOworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShubGRyX29iaik7CisKKwlubGRyX29iai0+bGRyX2Z4bnMuZXhpdF9meG4oKTsKKwlpZiAobmxkcl9vYmotPnJtbSkKKwkJcm1tX2RlbGV0ZShubGRyX29iai0+cm1tKTsKKworCWtmcmVlKG5sZHJfb2JqLT5zZWdfdGFibGUpOworCisJaWYgKG5sZHJfb2JqLT5oZGNkX21ncikKKwkJZGNkX2Rlc3Ryb3lfbWFuYWdlcihubGRyX29iai0+aGRjZF9tZ3IpOworCisJLyogRnJlZSBvdmVybGF5IG5vZGUgaW5mb3JtYXRpb24gKi8KKwlpZiAobmxkcl9vYmotPm92bHlfdGFibGUpIHsKKwkJZm9yIChpID0gMDsgaSA8IG5sZHJfb2JqLT5vdmx5X25vZGVzOyBpKyspIHsKKwkJCW92bHlfc2VjdGlvbiA9CisJCQkgICAgbmxkcl9vYmotPm92bHlfdGFibGVbaV0uY3JlYXRlX3NlY3RzX2xpc3Q7CisJCQl3aGlsZSAob3ZseV9zZWN0aW9uKSB7CisJCQkJbmV4dCA9IG92bHlfc2VjdGlvbi0+bmV4dF9zZWN0OworCQkJCWtmcmVlKG92bHlfc2VjdGlvbik7CisJCQkJb3ZseV9zZWN0aW9uID0gbmV4dDsKKwkJCX0KKwkJCW92bHlfc2VjdGlvbiA9CisJCQkgICAgbmxkcl9vYmotPm92bHlfdGFibGVbaV0uZGVsZXRlX3NlY3RzX2xpc3Q7CisJCQl3aGlsZSAob3ZseV9zZWN0aW9uKSB7CisJCQkJbmV4dCA9IG92bHlfc2VjdGlvbi0+bmV4dF9zZWN0OworCQkJCWtmcmVlKG92bHlfc2VjdGlvbik7CisJCQkJb3ZseV9zZWN0aW9uID0gbmV4dDsKKwkJCX0KKwkJCW92bHlfc2VjdGlvbiA9CisJCQkgICAgbmxkcl9vYmotPm92bHlfdGFibGVbaV0uZXhlY3V0ZV9zZWN0c19saXN0OworCQkJd2hpbGUgKG92bHlfc2VjdGlvbikgeworCQkJCW5leHQgPSBvdmx5X3NlY3Rpb24tPm5leHRfc2VjdDsKKwkJCQlrZnJlZShvdmx5X3NlY3Rpb24pOworCQkJCW92bHlfc2VjdGlvbiA9IG5leHQ7CisJCQl9CisJCQlvdmx5X3NlY3Rpb24gPSBubGRyX29iai0+b3ZseV90YWJsZVtpXS5vdGhlcl9zZWN0c19saXN0OworCQkJd2hpbGUgKG92bHlfc2VjdGlvbikgeworCQkJCW5leHQgPSBvdmx5X3NlY3Rpb24tPm5leHRfc2VjdDsKKwkJCQlrZnJlZShvdmx5X3NlY3Rpb24pOworCQkJCW92bHlfc2VjdGlvbiA9IG5leHQ7CisJCQl9CisJCX0KKwkJa2ZyZWUobmxkcl9vYmotPm92bHlfdGFibGUpOworCX0KKwlrZnJlZShubGRyX29iaik7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbmxkcl9leGl0ID09PT09PT09CisgKiAgRGlzY29udGludWUgdXNhZ2Ugb2YgTkxEUiBtb2R1bGUuCisgKi8KK3ZvaWQgbmxkcl9leGl0KHZvaWQpCit7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJcmVmcy0tOworCisJaWYgKHJlZnMgPT0gMCkKKwkJcm1tX2V4aXQoKTsKKworCURCQ19FTlNVUkUocmVmcyA+PSAwKTsKK30KKworLyoKKyAqICA9PT09PT09PSBubGRyX2dldF9meG5fYWRkciA9PT09PT09PQorICovCitpbnQgbmxkcl9nZXRfZnhuX2FkZHIoc3RydWN0IG5sZHJfbm9kZW9iamVjdCAqbmxkcl9ub2RlX29iaiwKKwkJCSAgICAgY2hhciAqc3RyX2Z4biwgdTMyICogYWRkcikKK3sKKwlzdHJ1Y3QgZGJsbF9zeW1fdmFsICpkYmxsX3N5bTsKKwlzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqOworCWludCBzdGF0dXMgPSAwOworCWJvb2wgc3RhdHVzMSA9IGZhbHNlOworCXMzMiBpID0gMDsKKwlzdHJ1Y3QgbGliX25vZGUgcm9vdCA9IHsgTlVMTCwgMCwgTlVMTCB9OworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShubGRyX25vZGVfb2JqKTsKKwlEQkNfUkVRVUlSRShhZGRyICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHN0cl9meG4gIT0gTlVMTCk7CisKKwlubGRyX29iaiA9IG5sZHJfbm9kZV9vYmotPm5sZHJfb2JqOworCS8qIENhbGxlZCBmcm9tIG5vZGVfY3JlYXRlKCksIG5vZGVfZGVsZXRlKCksIG9yIG5vZGVfcnVuKCkuICovCisJaWYgKG5sZHJfbm9kZV9vYmotPmR5bmFtaWMgJiYgKm5sZHJfbm9kZV9vYmotPnBmX3BoYXNlX3NwbGl0KSB7CisJCXN3aXRjaCAobmxkcl9ub2RlX29iai0+cGhhc2UpIHsKKwkJY2FzZSBOTERSX0NSRUFURToKKwkJCXJvb3QgPSBubGRyX25vZGVfb2JqLT5jcmVhdGVfbGliOworCQkJYnJlYWs7CisJCWNhc2UgTkxEUl9FWEVDVVRFOgorCQkJcm9vdCA9IG5sZHJfbm9kZV9vYmotPmV4ZWN1dGVfbGliOworCQkJYnJlYWs7CisJCWNhc2UgTkxEUl9ERUxFVEU6CisJCQlyb290ID0gbmxkcl9ub2RlX29iai0+ZGVsZXRlX2xpYjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJREJDX0FTU0VSVChmYWxzZSk7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGZvciBPdmVybGF5IG5vZGVzIG9yIG5vbi1zcGxpdCBEeW5hbWljIG5vZGVzICovCisJCXJvb3QgPSBubGRyX25vZGVfb2JqLT5yb290OworCX0KKwlzdGF0dXMxID0KKwkgICAgbmxkcl9vYmotPmxkcl9meG5zLmdldF9jX2FkZHJfZnhuKHJvb3QubGliLCBzdHJfZnhuLCAmZGJsbF9zeW0pOworCWlmICghc3RhdHVzMSkKKwkJc3RhdHVzMSA9CisJCSAgICBubGRyX29iai0+bGRyX2Z4bnMuZ2V0X2FkZHJfZnhuKHJvb3QubGliLCBzdHJfZnhuLAorCQkJCQkJICAgICZkYmxsX3N5bSk7CisKKwkvKiBJZiBzeW1ib2wgbm90IGZvdW5kLCBjaGVjayBkZXBlbmRlbnQgbGlicmFyaWVzICovCisJaWYgKCFzdGF0dXMxKSB7CisJCWZvciAoaSA9IDA7IGkgPCByb290LmRlcF9saWJzOyBpKyspIHsKKwkJCXN0YXR1czEgPQorCQkJICAgIG5sZHJfb2JqLT5sZHJfZnhucy5nZXRfYWRkcl9meG4ocm9vdC5kZXBfbGlic190cmVlCisJCQkJCQkJICAgIFtpXS5saWIsIHN0cl9meG4sCisJCQkJCQkJICAgICZkYmxsX3N5bSk7CisJCQlpZiAoIXN0YXR1czEpIHsKKwkJCQlzdGF0dXMxID0KKwkJCQkgICAgbmxkcl9vYmotPmxkcl9meG5zLgorCQkJCSAgICBnZXRfY19hZGRyX2Z4bihyb290LmRlcF9saWJzX3RyZWVbaV0ubGliLAorCQkJCQkJICAgc3RyX2Z4biwgJmRibGxfc3ltKTsKKwkJCX0KKwkJCWlmIChzdGF0dXMxKSB7CisJCQkJLyogU3ltYm9sIGZvdW5kICovCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJLyogQ2hlY2sgcGVyc2lzdGVudCBsaWJyYXJpZXMgKi8KKwlpZiAoIXN0YXR1czEpIHsKKwkJZm9yIChpID0gMDsgaSA8IG5sZHJfbm9kZV9vYmotPnBlcnNfbGliczsgaSsrKSB7CisJCQlzdGF0dXMxID0KKwkJCSAgICBubGRyX29iai0+bGRyX2Z4bnMuCisJCQkgICAgZ2V0X2FkZHJfZnhuKG5sZHJfbm9kZV9vYmotPnBlcnNfbGliX3RhYmxlW2ldLmxpYiwKKwkJCQkJIHN0cl9meG4sICZkYmxsX3N5bSk7CisJCQlpZiAoIXN0YXR1czEpIHsKKwkJCQlzdGF0dXMxID0KKwkJCQkgICAgbmxkcl9vYmotPmxkcl9meG5zLgorCQkJCSAgICBnZXRfY19hZGRyX2Z4bihubGRyX25vZGVfb2JqLT5wZXJzX2xpYl90YWJsZQorCQkJCQkJICAgW2ldLmxpYiwgc3RyX2Z4biwgJmRibGxfc3ltKTsKKwkJCX0KKwkJCWlmIChzdGF0dXMxKSB7CisJCQkJLyogU3ltYm9sIGZvdW5kICovCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoc3RhdHVzMSkKKwkJKmFkZHIgPSBkYmxsX3N5bS0+dmFsdWU7CisJZWxzZQorCQlzdGF0dXMgPSAtRVNQSVBFOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBubGRyX2dldF9ybW1fbWFuYWdlciA9PT09PT09PQorICogIEdpdmVuIGEgTkxEUiBvYmplY3QsIHJldHJpZXZlIFJNTSBNYW5hZ2VyIEhhbmRsZQorICovCitpbnQgbmxkcl9nZXRfcm1tX21hbmFnZXIoc3RydWN0IG5sZHJfb2JqZWN0ICpubGRyLAorCQkJCXN0cnVjdCBybW1fdGFyZ2V0X29iaiAqKnJtbV9tZ3IpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IG5sZHJfb2JqZWN0ICpubGRyX29iaiA9IG5sZHI7CisJREJDX1JFUVVJUkUocm1tX21nciAhPSBOVUxMKTsKKworCWlmIChubGRyKSB7CisJCSpybW1fbWdyID0gbmxkcl9vYmotPnJtbTsKKwl9IGVsc2UgeworCQkqcm1tX21nciA9IE5VTEw7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCisJREJDX0VOU1VSRSghc3RhdHVzIHx8IChybW1fbWdyICE9IE5VTEwgJiYgKnJtbV9tZ3IgPT0gTlVMTCkpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBubGRyX2luaXQgPT09PT09PT0KKyAqICBJbml0aWFsaXplIHRoZSBOTERSIG1vZHVsZS4KKyAqLworYm9vbCBubGRyX2luaXQodm9pZCkKK3sKKwlEQkNfUkVRVUlSRShyZWZzID49IDApOworCisJaWYgKHJlZnMgPT0gMCkKKwkJcm1tX2luaXQoKTsKKworCXJlZnMrKzsKKworCURCQ19FTlNVUkUocmVmcyA+IDApOworCXJldHVybiB0cnVlOworfQorCisvKgorICogID09PT09PT09IG5sZHJfbG9hZCA9PT09PT09PQorICovCitpbnQgbmxkcl9sb2FkKHN0cnVjdCBubGRyX25vZGVvYmplY3QgKm5sZHJfbm9kZV9vYmosCisJCSAgICAgZW51bSBubGRyX3BoYXNlIHBoYXNlKQoreworCXN0cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmo7CisJc3RydWN0IGRzcF91dWlkIGxpYl91dWlkOworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKG5sZHJfbm9kZV9vYmopOworCisJbmxkcl9vYmogPSBubGRyX25vZGVfb2JqLT5ubGRyX29iajsKKworCWlmIChubGRyX25vZGVfb2JqLT5keW5hbWljKSB7CisJCW5sZHJfbm9kZV9vYmotPnBoYXNlID0gcGhhc2U7CisKKwkJbGliX3V1aWQgPSBubGRyX25vZGVfb2JqLT51dWlkOworCisJCS8qIEF0IHRoaXMgcG9pbnQsIHdlIG1heSBub3Qga25vdyBpZiBub2RlIGlzIHNwbGl0IGludG8KKwkJICogZGlmZmVyZW50IGxpYnJhcmllcy4gU28gd2UnbGwgZ28gYWhlYWQgYW5kIGxvYWQgdGhlCisJCSAqIGxpYnJhcnksIGFuZCB0aGVuIHNhdmUgdGhlIHBvaW50ZXIgdG8gdGhlIGFwcHJvcHJpYXRlCisJCSAqIGxvY2F0aW9uIGFmdGVyIHdlIGtub3cuICovCisKKwkJc3RhdHVzID0KKwkJICAgIGxvYWRfbGliKG5sZHJfbm9kZV9vYmosICZubGRyX25vZGVfb2JqLT5yb290LCBsaWJfdXVpZCwKKwkJCSAgICAgZmFsc2UsIG5sZHJfbm9kZV9vYmotPmxpYl9wYXRoLCBwaGFzZSwgMCk7CisKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCWlmICgqbmxkcl9ub2RlX29iai0+cGZfcGhhc2Vfc3BsaXQpIHsKKwkJCQlzd2l0Y2ggKHBoYXNlKSB7CisJCQkJY2FzZSBOTERSX0NSRUFURToKKwkJCQkJbmxkcl9ub2RlX29iai0+Y3JlYXRlX2xpYiA9CisJCQkJCSAgICBubGRyX25vZGVfb2JqLT5yb290OworCQkJCQlicmVhazsKKworCQkJCWNhc2UgTkxEUl9FWEVDVVRFOgorCQkJCQlubGRyX25vZGVfb2JqLT5leGVjdXRlX2xpYiA9CisJCQkJCSAgICBubGRyX25vZGVfb2JqLT5yb290OworCQkJCQlicmVhazsKKworCQkJCWNhc2UgTkxEUl9ERUxFVEU6CisJCQkJCW5sZHJfbm9kZV9vYmotPmRlbGV0ZV9saWIgPQorCQkJCQkgICAgbmxkcl9ub2RlX29iai0+cm9vdDsKKwkJCQkJYnJlYWs7CisKKwkJCQlkZWZhdWx0OgorCQkJCQlEQkNfQVNTRVJUKGZhbHNlKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJaWYgKG5sZHJfbm9kZV9vYmotPm92ZXJsYXkpCisJCQlzdGF0dXMgPSBsb2FkX292bHkobmxkcl9ub2RlX29iaiwgcGhhc2UpOworCisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBubGRyX3VubG9hZCA9PT09PT09PQorICovCitpbnQgbmxkcl91bmxvYWQoc3RydWN0IG5sZHJfbm9kZW9iamVjdCAqbmxkcl9ub2RlX29iaiwKKwkJICAgICAgIGVudW0gbmxkcl9waGFzZSBwaGFzZSkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgbGliX25vZGUgKnJvb3RfbGliID0gTlVMTDsKKwlzMzIgaSA9IDA7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUobmxkcl9ub2RlX29iaik7CisKKwlpZiAobmxkcl9ub2RlX29iaiAhPSBOVUxMKSB7CisJCWlmIChubGRyX25vZGVfb2JqLT5keW5hbWljKSB7CisJCQlpZiAoKm5sZHJfbm9kZV9vYmotPnBmX3BoYXNlX3NwbGl0KSB7CisJCQkJc3dpdGNoIChwaGFzZSkgeworCQkJCWNhc2UgTkxEUl9DUkVBVEU6CisJCQkJCXJvb3RfbGliID0gJm5sZHJfbm9kZV9vYmotPmNyZWF0ZV9saWI7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgTkxEUl9FWEVDVVRFOgorCQkJCQlyb290X2xpYiA9ICZubGRyX25vZGVfb2JqLT5leGVjdXRlX2xpYjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBOTERSX0RFTEVURToKKwkJCQkJcm9vdF9saWIgPSAmbmxkcl9ub2RlX29iai0+ZGVsZXRlX2xpYjsKKwkJCQkJLyogVW5sb2FkIHBlcnNpc3RlbnQgbGlicmFyaWVzICovCisJCQkJCWZvciAoaSA9IDA7CisJCQkJCSAgICAgaSA8IG5sZHJfbm9kZV9vYmotPnBlcnNfbGliczsKKwkJCQkJICAgICBpKyspIHsKKwkJCQkJCXVubG9hZF9saWIobmxkcl9ub2RlX29iaiwKKwkJCQkJCQkgICAmbmxkcl9ub2RlX29iai0+CisJCQkJCQkJICAgcGVyc19saWJfdGFibGVbaV0pOworCQkJCQl9CisJCQkJCW5sZHJfbm9kZV9vYmotPnBlcnNfbGlicyA9IDA7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCURCQ19BU1NFUlQoZmFsc2UpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIFVubG9hZCBtYWluIGxpYnJhcnkgKi8KKwkJCQlyb290X2xpYiA9ICZubGRyX25vZGVfb2JqLT5yb290OworCQkJfQorCQkJaWYgKHJvb3RfbGliKQorCQkJCXVubG9hZF9saWIobmxkcl9ub2RlX29iaiwgcm9vdF9saWIpOworCQl9IGVsc2UgeworCQkJaWYgKG5sZHJfbm9kZV9vYmotPm92ZXJsYXkpCisJCQkJdW5sb2FkX292bHkobmxkcl9ub2RlX29iaiwgcGhhc2UpOworCisJCX0KKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBhZGRfb3ZseV9pbmZvID09PT09PT09CisgKi8KK3N0YXRpYyBpbnQgYWRkX292bHlfaW5mbyh2b2lkICpoYW5kbGUsIHN0cnVjdCBkYmxsX3NlY3RfaW5mbyAqc2VjdF9pbmZvLAorCQkJCXUzMiBhZGRyLCB1MzIgYnl0ZXMpCit7CisJY2hhciAqbm9kZV9uYW1lOworCWNoYXIgKnNlY3RfbmFtZSA9IChjaGFyICopc2VjdF9pbmZvLT5uYW1lOworCWJvb2wgc2VjdF9leGlzdHMgPSBmYWxzZTsKKwljaGFyIHNlcHMgPSAnOic7CisJY2hhciAqcGNoOworCXUxNiBpOworCXN0cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmogPSAoc3RydWN0IG5sZHJfb2JqZWN0ICopaGFuZGxlOworCWludCBzdGF0dXMgPSAwOworCisJLyogSXMgdGhpcyBhbiBvdmVybGF5IHNlY3Rpb24gKGxvYWQgYWRkcmVzcyAhPSBydW4gYWRkcmVzcyk/ICovCisJaWYgKHNlY3RfaW5mby0+c2VjdF9sb2FkX2FkZHIgPT0gc2VjdF9pbmZvLT5zZWN0X3J1bl9hZGRyKQorCQlnb3RvIGZ1bmNfZW5kOworCisJLyogRmluZCB0aGUgbm9kZSBpdCBiZWxvbmdzIHRvICovCisJZm9yIChpID0gMDsgaSA8IG5sZHJfb2JqLT5vdmx5X25vZGVzOyBpKyspIHsKKwkJbm9kZV9uYW1lID0gbmxkcl9vYmotPm92bHlfdGFibGVbaV0ubm9kZV9uYW1lOworCQlEQkNfUkVRVUlSRShub2RlX25hbWUpOworCQlpZiAoc3RybmNtcChub2RlX25hbWUsIHNlY3RfbmFtZSArIDEsIHN0cmxlbihub2RlX25hbWUpKSA9PSAwKSB7CisJCQkvKiBGb3VuZCB0aGUgbm9kZSAqLworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKCEoaSA8IG5sZHJfb2JqLT5vdmx5X25vZGVzKSkKKwkJZ290byBmdW5jX2VuZDsKKworCS8qIERldGVybWluZSB3aGljaCBwaGFzZSB0aGlzIHNlY3Rpb24gYmVsb25ncyB0byAqLworCWZvciAocGNoID0gc2VjdF9uYW1lICsgMTsgKnBjaCAmJiAqcGNoICE9IHNlcHM7IHBjaCsrKQorCQk7OworCisJaWYgKCpwY2gpIHsKKwkJcGNoKys7CQkvKiBTa2lwIG92ZXIgdGhlICc6JyAqLworCQlpZiAoc3RybmNtcChwY2gsIFBDUkVBVEUsIHN0cmxlbihQQ1JFQVRFKSkgPT0gMCkgeworCQkJc3RhdHVzID0KKwkJCSAgICBhZGRfb3ZseV9zZWN0KG5sZHJfb2JqLAorCQkJCQkgICZubGRyX29iai0+CisJCQkJCSAgb3ZseV90YWJsZVtpXS5jcmVhdGVfc2VjdHNfbGlzdCwKKwkJCQkJICBzZWN0X2luZm8sICZzZWN0X2V4aXN0cywgYWRkciwgYnl0ZXMpOworCQkJaWYgKCFzdGF0dXMgJiYgIXNlY3RfZXhpc3RzKQorCQkJCW5sZHJfb2JqLT5vdmx5X3RhYmxlW2ldLmNyZWF0ZV9zZWN0cysrOworCisJCX0gZWxzZSBpZiAoc3RybmNtcChwY2gsIFBERUxFVEUsIHN0cmxlbihQREVMRVRFKSkgPT0gMCkgeworCQkJc3RhdHVzID0KKwkJCSAgICBhZGRfb3ZseV9zZWN0KG5sZHJfb2JqLAorCQkJCQkgICZubGRyX29iai0+CisJCQkJCSAgb3ZseV90YWJsZVtpXS5kZWxldGVfc2VjdHNfbGlzdCwKKwkJCQkJICBzZWN0X2luZm8sICZzZWN0X2V4aXN0cywgYWRkciwgYnl0ZXMpOworCQkJaWYgKCFzdGF0dXMgJiYgIXNlY3RfZXhpc3RzKQorCQkJCW5sZHJfb2JqLT5vdmx5X3RhYmxlW2ldLmRlbGV0ZV9zZWN0cysrOworCisJCX0gZWxzZSBpZiAoc3RybmNtcChwY2gsIFBFWEVDVVRFLCBzdHJsZW4oUEVYRUNVVEUpKSA9PSAwKSB7CisJCQlzdGF0dXMgPQorCQkJICAgIGFkZF9vdmx5X3NlY3Qobmxkcl9vYmosCisJCQkJCSAgJm5sZHJfb2JqLT4KKwkJCQkJICBvdmx5X3RhYmxlW2ldLmV4ZWN1dGVfc2VjdHNfbGlzdCwKKwkJCQkJICBzZWN0X2luZm8sICZzZWN0X2V4aXN0cywgYWRkciwgYnl0ZXMpOworCQkJaWYgKCFzdGF0dXMgJiYgIXNlY3RfZXhpc3RzKQorCQkJCW5sZHJfb2JqLT5vdmx5X3RhYmxlW2ldLmV4ZWN1dGVfc2VjdHMrKzsKKworCQl9IGVsc2UgeworCQkJLyogUHV0IGluICJvdGhlciIgc2VjdGlucyAqLworCQkJc3RhdHVzID0KKwkJCSAgICBhZGRfb3ZseV9zZWN0KG5sZHJfb2JqLAorCQkJCQkgICZubGRyX29iai0+CisJCQkJCSAgb3ZseV90YWJsZVtpXS5vdGhlcl9zZWN0c19saXN0LAorCQkJCQkgIHNlY3RfaW5mbywgJnNlY3RfZXhpc3RzLCBhZGRyLCBieXRlcyk7CisJCQlpZiAoIXN0YXR1cyAmJiAhc2VjdF9leGlzdHMpCisJCQkJbmxkcl9vYmotPm92bHlfdGFibGVbaV0ub3RoZXJfc2VjdHMrKzsKKworCQl9CisJfQorZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBhZGRfb3ZseV9ub2RlID09PT09PT09PQorICogIENhbGxiYWNrIGZ1bmN0aW9uIHBhc3NlZCB0byBkY2RfZ2V0X29iamVjdHMuCisgKi8KK3N0YXRpYyBpbnQgYWRkX292bHlfbm9kZShzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqLAorCQkJCWVudW0gZHNwX2RjZG9ianR5cGUgb2JqX3R5cGUsIHZvaWQgKmhhbmRsZSkKK3sKKwlzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqID0gKHN0cnVjdCBubGRyX29iamVjdCAqKWhhbmRsZTsKKwljaGFyICpub2RlX25hbWUgPSBOVUxMOworCWNoYXIgKnBidWYgPSBOVUxMOworCXUzMiBsZW47CisJc3RydWN0IGRjZF9nZW5lcmljb2JqIG9ial9kZWY7CisJaW50IHN0YXR1cyA9IDA7CisKKwlpZiAob2JqX3R5cGUgIT0gRFNQX0RDRE5PREVUWVBFKQorCQlnb3RvIGZ1bmNfZW5kOworCisJc3RhdHVzID0KKwkgICAgZGNkX2dldF9vYmplY3RfZGVmKG5sZHJfb2JqLT5oZGNkX21nciwgdXVpZF9vYmosIG9ial90eXBlLAorCQkJICAgICAgICZvYmpfZGVmKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJLyogSWYgb3ZlcmxheSBub2RlLCBhZGQgdG8gdGhlIGxpc3QgKi8KKwlpZiAob2JqX2RlZi5vYmpfZGF0YS5ub2RlX29iai51c19sb2FkX3R5cGUgPT0gTkxEUl9PVkxZTE9BRCkgeworCQlpZiAobmxkcl9vYmotPm92bHlfdGFibGUgPT0gTlVMTCkgeworCQkJbmxkcl9vYmotPm92bHlfbm9kZXMrKzsKKwkJfSBlbHNlIHsKKwkJCS8qIEFkZCBub2RlIHRvIHRhYmxlICovCisJCQlubGRyX29iai0+b3ZseV90YWJsZVtubGRyX29iai0+b3ZseV9uaWRdLnV1aWQgPQorCQkJICAgICp1dWlkX29iajsKKwkJCURCQ19SRVFVSVJFKG9ial9kZWYub2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzLgorCQkJCSAgICBhY19uYW1lKTsKKwkJCWxlbiA9CisJCQkgICAgc3RybGVuKG9ial9kZWYub2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzLmFjX25hbWUpOworCQkJbm9kZV9uYW1lID0gb2JqX2RlZi5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMuYWNfbmFtZTsKKwkJCXBidWYgPSBremFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOworCQkJaWYgKHBidWYgPT0gTlVMTCkgeworCQkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQl9IGVsc2UgeworCQkJCXN0cm5jcHkocGJ1Ziwgbm9kZV9uYW1lLCBsZW4pOworCQkJCW5sZHJfb2JqLT5vdmx5X3RhYmxlW25sZHJfb2JqLT5vdmx5X25pZF0uCisJCQkJICAgIG5vZGVfbmFtZSA9IHBidWY7CisJCQkJbmxkcl9vYmotPm92bHlfbmlkKys7CisJCQl9CisJCX0KKwl9CisJLyogVGhlc2Ugd2VyZSBhbGxvY2F0ZWQgaW4gZGNkX2dldF9vYmplY3RfZGVmICovCisJa2ZyZWUob2JqX2RlZi5vYmpfZGF0YS5ub2RlX29iai5wc3RyX2NyZWF0ZV9waGFzZV9meG4pOworCisJa2ZyZWUob2JqX2RlZi5vYmpfZGF0YS5ub2RlX29iai5wc3RyX2V4ZWN1dGVfcGhhc2VfZnhuKTsKKworCWtmcmVlKG9ial9kZWYub2JqX2RhdGEubm9kZV9vYmoucHN0cl9kZWxldGVfcGhhc2VfZnhuKTsKKworCWtmcmVlKG9ial9kZWYub2JqX2RhdGEubm9kZV9vYmoucHN0cl9pX2FsZ19uYW1lKTsKKworZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBhZGRfb3ZseV9zZWN0ID09PT09PT09CisgKi8KK3N0YXRpYyBpbnQgYWRkX292bHlfc2VjdChzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqLAorCQkJCXN0cnVjdCBvdmx5X3NlY3QgKipsc3QsCisJCQkJc3RydWN0IGRibGxfc2VjdF9pbmZvICpzZWN0X2luZiwKKwkJCQlib29sICpleGlzdHMsIHUzMiBhZGRyLCB1MzIgYnl0ZXMpCit7CisJc3RydWN0IG92bHlfc2VjdCAqbmV3X3NlY3QgPSBOVUxMOworCXN0cnVjdCBvdmx5X3NlY3QgKmxhc3Rfc2VjdDsKKwlzdHJ1Y3Qgb3ZseV9zZWN0ICpvdmx5X3NlY3Rpb247CisJaW50IHN0YXR1cyA9IDA7CisKKwlvdmx5X3NlY3Rpb24gPSBsYXN0X3NlY3QgPSAqbHN0OworCSpleGlzdHMgPSBmYWxzZTsKKwl3aGlsZSAob3ZseV9zZWN0aW9uKSB7CisJCS8qCisJCSAqICBNYWtlIHN1cmUgc2VjdGlvbiBoYXMgbm90IGFscmVhZHkgYmVlbiBhZGRlZC4gTXVsdGlwbGUKKwkJICogICd3cml0ZScgY2FsbHMgbWF5IGJlIG1hZGUgdG8gbG9hZCB0aGUgc2VjdGlvbi4KKwkJICovCisJCWlmIChvdmx5X3NlY3Rpb24tPnNlY3RfbG9hZF9hZGRyID09IGFkZHIpIHsKKwkJCS8qIEFscmVhZHkgYWRkZWQgKi8KKwkJCSpleGlzdHMgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwkJbGFzdF9zZWN0ID0gb3ZseV9zZWN0aW9uOworCQlvdmx5X3NlY3Rpb24gPSBvdmx5X3NlY3Rpb24tPm5leHRfc2VjdDsKKwl9CisKKwlpZiAoIW92bHlfc2VjdGlvbikgeworCQkvKiBOZXcgc2VjdGlvbiAqLworCQluZXdfc2VjdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvdmx5X3NlY3QpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKG5ld19zZWN0ID09IE5VTEwpIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCX0gZWxzZSB7CisJCQluZXdfc2VjdC0+c2VjdF9sb2FkX2FkZHIgPSBhZGRyOworCQkJbmV3X3NlY3QtPnNlY3RfcnVuX2FkZHIgPSBzZWN0X2luZi0+c2VjdF9ydW5fYWRkciArCisJCQkgICAgKGFkZHIgLSBzZWN0X2luZi0+c2VjdF9sb2FkX2FkZHIpOworCQkJbmV3X3NlY3QtPnNpemUgPSBieXRlczsKKwkJCW5ld19zZWN0LT5wYWdlID0gc2VjdF9pbmYtPnR5cGU7CisJCX0KKworCQkvKiBBZGQgdG8gdGhlIGxpc3QgKi8KKwkJaWYgKCFzdGF0dXMpIHsKKwkJCWlmICgqbHN0ID09IE5VTEwpIHsKKwkJCQkvKiBGaXJzdCBpbiB0aGUgbGlzdCAqLworCQkJCSpsc3QgPSBuZXdfc2VjdDsKKwkJCX0gZWxzZSB7CisJCQkJbGFzdF9zZWN0LT5uZXh0X3NlY3QgPSBuZXdfc2VjdDsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZmFrZV9vdmx5X3dyaXRlID09PT09PT09CisgKi8KK3N0YXRpYyBzMzIgZmFrZV9vdmx5X3dyaXRlKHZvaWQgKmhhbmRsZSwgdTMyIGRzcF9hZGRyZXNzLCB2b2lkICpidWYsIHUzMiBieXRlcywKKwkJCSAgIHMzMiBtdHlwZSkKK3sKKwlyZXR1cm4gKHMzMikgYnl0ZXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZnJlZV9zZWN0cyA9PT09PT09PQorICovCitzdGF0aWMgdm9pZCBmcmVlX3NlY3RzKHN0cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmosCisJCSAgICAgICBzdHJ1Y3Qgb3ZseV9zZWN0ICpwaGFzZV9zZWN0cywgdTE2IGFsbG9jX251bSkKK3sKKwlzdHJ1Y3Qgb3ZseV9zZWN0ICpvdmx5X3NlY3Rpb24gPSBwaGFzZV9zZWN0czsKKwl1MTYgaSA9IDA7CisJYm9vbCByZXQ7CisKKwl3aGlsZSAob3ZseV9zZWN0aW9uICYmIGkgPCBhbGxvY19udW0pIHsKKwkJLyogJ0RlYWxsb2NhdGUnICovCisJCS8qIHNlZ2lkIC0gcGFnZSBub3Qgc3VwcG9ydGVkIHlldCAqLworCQkvKiBSZXNlcnZlZCBtZW1vcnkgKi8KKwkJcmV0ID0KKwkJICAgIHJtbV9mcmVlKG5sZHJfb2JqLT5ybW0sIDAsIG92bHlfc2VjdGlvbi0+c2VjdF9ydW5fYWRkciwKKwkJCSAgICAgb3ZseV9zZWN0aW9uLT5zaXplLCB0cnVlKTsKKwkJREJDX0FTU0VSVChyZXQpOworCQlvdmx5X3NlY3Rpb24gPSBvdmx5X3NlY3Rpb24tPm5leHRfc2VjdDsKKwkJaSsrOworCX0KK30KKworLyoKKyAqICA9PT09PT09PSBnZXRfc3ltYm9sX3ZhbHVlID09PT09PT09CisgKiAgRmluZCBzeW1ib2wgaW4gbGlicmFyeSdzIGJhc2UgaW1hZ2UuICBJZiBub3QgdGhlcmUsIGNoZWNrIGRlcGVuZGVudAorICogIGxpYnJhcmllcy4KKyAqLworc3RhdGljIGJvb2wgZ2V0X3N5bWJvbF92YWx1ZSh2b2lkICpoYW5kbGUsIHZvaWQgKnBhcmcsIHZvaWQgKnJtbV9oYW5kbGUsCisJCQkgICAgIGNoYXIgKnN5bV9uYW1lLCBzdHJ1Y3QgZGJsbF9zeW1fdmFsICoqc3ltKQoreworCXN0cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmogPSAoc3RydWN0IG5sZHJfb2JqZWN0ICopaGFuZGxlOworCXN0cnVjdCBubGRyX25vZGVvYmplY3QgKm5sZHJfbm9kZV9vYmogPQorCSAgICAoc3RydWN0IG5sZHJfbm9kZW9iamVjdCAqKXJtbV9oYW5kbGU7CisJc3RydWN0IGxpYl9ub2RlICpyb290ID0gKHN0cnVjdCBsaWJfbm9kZSAqKXBhcmc7CisJdTE2IGk7CisJYm9vbCBzdGF0dXMgPSBmYWxzZTsKKworCS8qIGNoZWNrIHRoZSBiYXNlIGltYWdlICovCisJc3RhdHVzID0gbmxkcl9vYmotPmxkcl9meG5zLmdldF9hZGRyX2Z4bihubGRyX29iai0+YmFzZV9saWIsCisJCQkJCQkgc3ltX25hbWUsIHN5bSk7CisJaWYgKCFzdGF0dXMpCisJCXN0YXR1cyA9CisJCSAgICBubGRyX29iai0+bGRyX2Z4bnMuZ2V0X2NfYWRkcl9meG4obmxkcl9vYmotPmJhc2VfbGliLAorCQkJCQkJCXN5bV9uYW1lLCBzeW0pOworCisJLyoKKwkgKiAgQ2hlY2sgaW4gcm9vdCBsaWIgaXRzZWxmLiBJZiB0aGUgbGlicmFyeSBjb25zaXN0cyBvZgorCSAqICBtdWx0aXBsZSBvYmplY3QgZmlsZXMgbGlua2VkIHRvZ2V0aGVyLCBzb21lIHN5bWJvbHMgaW4gdGhlCisJICogIGxpYnJhcnkgbWF5IG5lZWQgdG8gYmUgcmVzb2x2ZWQuCisJICovCisJaWYgKCFzdGF0dXMpIHsKKwkJc3RhdHVzID0gbmxkcl9vYmotPmxkcl9meG5zLmdldF9hZGRyX2Z4bihyb290LT5saWIsIHN5bV9uYW1lLAorCQkJCQkJCSBzeW0pOworCQlpZiAoIXN0YXR1cykgeworCQkJc3RhdHVzID0KKwkJCSAgICBubGRyX29iai0+bGRyX2Z4bnMuZ2V0X2NfYWRkcl9meG4ocm9vdC0+bGliLAorCQkJCQkJCSAgICAgIHN5bV9uYW1lLCBzeW0pOworCQl9CisJfQorCisJLyoKKwkgKiAgQ2hlY2sgaW4gcm9vdCBsaWIncyBkZXBlbmRlbnQgbGlicmFyaWVzLCBidXQgbm90IGRlcGVuZGVudAorCSAqICBsaWJyYXJpZXMnIGRlcGVuZGVudHMuCisJICovCisJaWYgKCFzdGF0dXMpIHsKKwkJZm9yIChpID0gMDsgaSA8IHJvb3QtPmRlcF9saWJzOyBpKyspIHsKKwkJCXN0YXR1cyA9CisJCQkgICAgbmxkcl9vYmotPmxkcl9meG5zLmdldF9hZGRyX2Z4bihyb290LT4KKwkJCQkJCQkgICAgZGVwX2xpYnNfdHJlZQorCQkJCQkJCSAgICBbaV0ubGliLAorCQkJCQkJCSAgICBzeW1fbmFtZSwgc3ltKTsKKwkJCWlmICghc3RhdHVzKSB7CisJCQkJc3RhdHVzID0KKwkJCQkgICAgbmxkcl9vYmotPmxkcl9meG5zLgorCQkJCSAgICBnZXRfY19hZGRyX2Z4bihyb290LT5kZXBfbGlic190cmVlW2ldLmxpYiwKKwkJCQkJCSAgIHN5bV9uYW1lLCBzeW0pOworCQkJfQorCQkJaWYgKHN0YXR1cykgeworCQkJCS8qIFN5bWJvbCBmb3VuZCAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCS8qCisJICogQ2hlY2sgaW4gcGVyc2lzdGVudCBsaWJyYXJpZXMKKwkgKi8KKwlpZiAoIXN0YXR1cykgeworCQlmb3IgKGkgPSAwOyBpIDwgbmxkcl9ub2RlX29iai0+cGVyc19saWJzOyBpKyspIHsKKwkJCXN0YXR1cyA9CisJCQkgICAgbmxkcl9vYmotPmxkcl9meG5zLgorCQkJICAgIGdldF9hZGRyX2Z4bihubGRyX25vZGVfb2JqLT5wZXJzX2xpYl90YWJsZVtpXS5saWIsCisJCQkJCSBzeW1fbmFtZSwgc3ltKTsKKwkJCWlmICghc3RhdHVzKSB7CisJCQkJc3RhdHVzID0gbmxkcl9vYmotPmxkcl9meG5zLmdldF9jX2FkZHJfZnhuCisJCQkJICAgIChubGRyX25vZGVfb2JqLT5wZXJzX2xpYl90YWJsZVtpXS5saWIsCisJCQkJICAgICBzeW1fbmFtZSwgc3ltKTsKKwkJCX0KKwkJCWlmIChzdGF0dXMpIHsKKwkJCQkvKiBTeW1ib2wgZm91bmQgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbG9hZF9saWIgPT09PT09PT0KKyAqICBSZWN1cnNpdmVseSBsb2FkIGxpYnJhcnkgYW5kIGFsbCBpdHMgZGVwZW5kZW50IGxpYnJhcmllcy4gVGhlIGxpYnJhcnkKKyAqICB3ZSdyZSBsb2FkaW5nIGlzIHNwZWNpZmllZCBieSBhIHV1aWQuCisgKi8KK3N0YXRpYyBpbnQgbG9hZF9saWIoc3RydWN0IG5sZHJfbm9kZW9iamVjdCAqbmxkcl9ub2RlX29iaiwKKwkJCSAgIHN0cnVjdCBsaWJfbm9kZSAqcm9vdCwgc3RydWN0IGRzcF91dWlkIHV1aWQsCisJCQkgICBib29sIHJvb3RfcHJzdG50LAorCQkJICAgc3RydWN0IGRibGxfbGlicmFyeV9vYmogKipsaWJfcGF0aCwKKwkJCSAgIGVudW0gbmxkcl9waGFzZSBwaGFzZSwgdTE2IGRlcHRoKQoreworCXN0cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmogPSBubGRyX25vZGVfb2JqLT5ubGRyX29iajsKKwl1MTYgbmRfbGlicyA9IDA7CS8qIE51bWJlciBvZiBkZXBlbmRlbnQgbGlicmFyaWVzICovCisJdTE2IG5wX2xpYnMgPSAwOwkvKiBOdW1iZXIgb2YgcGVyc2lzdGVudCBsaWJyYXJpZXMgKi8KKwl1MTYgbmRfbGlic19sb2FkZWQgPSAwOwkvKiBOdW1iZXIgb2YgZGVwLiBsaWJyYXJpZXMgbG9hZGVkICovCisJdTE2IGk7CisJdTMyIGVudHJ5OworCXUzMiBkd19idWZfc2l6ZSA9IE5MRFJfTUFYUEFUSExFTkdUSDsKKwlkYmxsX2ZsYWdzIGZsYWdzID0gREJMTF9TWU1CIHwgREJMTF9DT0RFIHwgREJMTF9EQVRBIHwgREJMTF9EWU5BTUlDOworCXN0cnVjdCBkYmxsX2F0dHJzIG5ld19hdHRyczsKKwljaGFyICpwc3pfZmlsZV9uYW1lID0gTlVMTDsKKwlzdHJ1Y3QgZHNwX3V1aWQgKmRlcF9saWJfdXVpX2RzID0gTlVMTDsKKwlib29sICpwZXJzaXN0ZW50X2RlcF9saWJzID0gTlVMTDsKKwlpbnQgc3RhdHVzID0gMDsKKwlib29sIGxpYl9zdGF0dXMgPSBmYWxzZTsKKwlzdHJ1Y3QgbGliX25vZGUgKmRlcF9saWI7CisKKwlpZiAoZGVwdGggPiBNQVhERVBUSCkgeworCQkvKiBFcnJvciAqLworCQlEQkNfQVNTRVJUKGZhbHNlKTsKKwl9CisJcm9vdC0+bGliID0gTlVMTDsKKwkvKiBBbGxvY2F0ZSBhIGJ1ZmZlciBmb3IgbGlicmFyeSBmaWxlIG5hbWUgb2Ygc2l6ZSBEQkxfTUFYUEFUSExFTkdUSCAqLworCXBzel9maWxlX25hbWUgPSBremFsbG9jKERCTExfTUFYUEFUSExFTkdUSCwgR0ZQX0tFUk5FTCk7CisJaWYgKHBzel9maWxlX25hbWUgPT0gTlVMTCkKKwkJc3RhdHVzID0gLUVOT01FTTsKKworCWlmICghc3RhdHVzKSB7CisJCS8qIEdldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSAqLworCQlpZiAoZGVwdGggPT0gMCkgeworCQkJc3RhdHVzID0KKwkJCSAgICBkY2RfZ2V0X2xpYnJhcnlfbmFtZShubGRyX25vZGVfb2JqLT5ubGRyX29iai0+CisJCQkJCQkgaGRjZF9tZ3IsICZ1dWlkLCBwc3pfZmlsZV9uYW1lLAorCQkJCQkJICZkd19idWZfc2l6ZSwgcGhhc2UsCisJCQkJCQkgbmxkcl9ub2RlX29iai0+cGZfcGhhc2Vfc3BsaXQpOworCQl9IGVsc2UgeworCQkJLyogRGVwZW5kZW50IGxpYnJhcmllcyBhcmUgcmVnaXN0ZXJlZCB3aXRoIGEgcGhhc2UgKi8KKwkJCXN0YXR1cyA9CisJCQkgICAgZGNkX2dldF9saWJyYXJ5X25hbWUobmxkcl9ub2RlX29iai0+bmxkcl9vYmotPgorCQkJCQkJIGhkY2RfbWdyLCAmdXVpZCwgcHN6X2ZpbGVfbmFtZSwKKwkJCQkJCSAmZHdfYnVmX3NpemUsIE5MRFJfTk9QSEFTRSwKKwkJCQkJCSBOVUxMKTsKKwkJfQorCX0KKwlpZiAoIXN0YXR1cykgeworCQkvKiBPcGVuIHRoZSBsaWJyYXJ5LCBkb24ndCBsb2FkIHN5bWJvbHMgKi8KKwkJc3RhdHVzID0KKwkJICAgIG5sZHJfb2JqLT5sZHJfZnhucy5vcGVuX2Z4bihubGRyX29iai0+ZGJsbCwgcHN6X2ZpbGVfbmFtZSwKKwkJCQkJCURCTExfTk9MT0FELCAmcm9vdC0+bGliKTsKKwl9CisJLyogRG9uZSB3aXRoIGZpbGUgbmFtZSAqLworCWtmcmVlKHBzel9maWxlX25hbWUpOworCisJLyogQ2hlY2sgdG8gc2VlIGlmIGxpYnJhcnkgbm90IGFscmVhZHkgbG9hZGVkICovCisJaWYgKCFzdGF0dXMgJiYgcm9vdF9wcnN0bnQpIHsKKwkJbGliX3N0YXR1cyA9CisJCSAgICBmaW5kX2luX3BlcnNpc3RlbnRfbGliX2FycmF5KG5sZHJfbm9kZV9vYmosIHJvb3QtPmxpYik7CisJCS8qIENsb3NlIGxpYnJhcnkgKi8KKwkJaWYgKGxpYl9zdGF0dXMpIHsKKwkJCW5sZHJfb2JqLT5sZHJfZnhucy5jbG9zZV9meG4ocm9vdC0+bGliKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCWlmICghc3RhdHVzKSB7CisJCS8qIENoZWNrIGZvciBjaXJjdWxhciBkZXBlbmRlbmNpZXMuICovCisJCWZvciAoaSA9IDA7IGkgPCBkZXB0aDsgaSsrKSB7CisJCQlpZiAocm9vdC0+bGliID09IGxpYl9wYXRoW2ldKSB7CisJCQkJLyogVGhpcyBjb25kaXRpb24gY291bGQgYmUgY2hlY2tlZCBieSBhCisJCQkJICogdG9vbCBhdCBidWlsZCB0aW1lLiAqLworCQkJCXN0YXR1cyA9IC1FSUxTRVE7CisJCQl9CisJCX0KKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJLyogQWRkIGxpYnJhcnkgdG8gY3VycmVudCBwYXRoIGluIGRlcGVuZGVuY3kgdHJlZSAqLworCQlsaWJfcGF0aFtkZXB0aF0gPSByb290LT5saWI7CisJCWRlcHRoKys7CisJCS8qIEdldCBudW1iZXIgb2YgZGVwZW5kZW50IGxpYnJhcmllcyAqLworCQlzdGF0dXMgPQorCQkgICAgZGNkX2dldF9udW1fZGVwX2xpYnMobmxkcl9ub2RlX29iai0+bmxkcl9vYmotPmhkY2RfbWdyLAorCQkJCQkgJnV1aWQsICZuZF9saWJzLCAmbnBfbGlicywgcGhhc2UpOworCX0KKwlEQkNfQVNTRVJUKG5kX2xpYnMgPj0gbnBfbGlicyk7CisJaWYgKCFzdGF0dXMpIHsKKwkJaWYgKCEoKm5sZHJfbm9kZV9vYmotPnBmX3BoYXNlX3NwbGl0KSkKKwkJCW5wX2xpYnMgPSAwOworCisJCS8qIG5kX2xpYnMgPSAjb2YgZGVwZW5kZW50IGxpYnJhcmllcyAqLworCQlyb290LT5kZXBfbGlicyA9IG5kX2xpYnMgLSBucF9saWJzOworCQlpZiAobmRfbGlicyA+IDApIHsKKwkJCWRlcF9saWJfdXVpX2RzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRzcF91dWlkKSAqCisJCQkJCQkJbmRfbGlicywgR0ZQX0tFUk5FTCk7CisJCQlwZXJzaXN0ZW50X2RlcF9saWJzID0KKwkJCQlremFsbG9jKHNpemVvZihib29sKSAqIG5kX2xpYnMsIEdGUF9LRVJORUwpOworCQkJaWYgKCFkZXBfbGliX3V1aV9kcyB8fCAhcGVyc2lzdGVudF9kZXBfbGlicykKKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCisJCQlpZiAocm9vdC0+ZGVwX2xpYnMgPiAwKSB7CisJCQkJLyogQWxsb2NhdGUgYXJyYXlzIGZvciBkZXBlbmRlbnQgbGliIFVVSURzLAorCQkJCSAqIGxpYiBub2RlcyAqLworCQkJCXJvb3QtPmRlcF9saWJzX3RyZWUgPSBremFsbG9jCisJCQkJCQkoc2l6ZW9mKHN0cnVjdCBsaWJfbm9kZSkgKgorCQkJCQkJKHJvb3QtPmRlcF9saWJzKSwgR0ZQX0tFUk5FTCk7CisJCQkJaWYgKCEocm9vdC0+ZGVwX2xpYnNfdHJlZSkpCisJCQkJCXN0YXR1cyA9IC1FTk9NRU07CisKKwkJCX0KKworCQkJaWYgKCFzdGF0dXMpIHsKKwkJCQkvKiBHZXQgdGhlIGRlcGVuZGVudCBsaWJyYXJ5IFVVSURzICovCisJCQkJc3RhdHVzID0KKwkJCQkgICAgZGNkX2dldF9kZXBfbGlicyhubGRyX25vZGVfb2JqLT4KKwkJCQkJCSAgICAgbmxkcl9vYmotPmhkY2RfbWdyLCAmdXVpZCwKKwkJCQkJCSAgICAgbmRfbGlicywgZGVwX2xpYl91dWlfZHMsCisJCQkJCQkgICAgIHBlcnNpc3RlbnRfZGVwX2xpYnMsCisJCQkJCQkgICAgIHBoYXNlKTsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogIFJlY3Vyc2l2ZWx5IGxvYWQgZGVwZW5kZW50IGxpYnJhcmllcy4KKwkgKi8KKwlpZiAoIXN0YXR1cykgeworCQlmb3IgKGkgPSAwOyBpIDwgbmRfbGliczsgaSsrKSB7CisJCQkvKiBJZiByb290IGxpYnJhcnkgaXMgTk9UIHBlcnNpc3RlbnQsIGFuZCBkZXAgbGlicmFyeQorCQkJICogaXMsIHRoZW4gcmVjb3JkIGl0LiAgSWYgcm9vdCBsaWJyYXJ5IElTIHBlcnNpc3RlbnQsCisJCQkgKiB0aGUgZGVwbGliIGlzIGFscmVhZHkgaW5jbHVkZWQgKi8KKwkJCWlmICghcm9vdF9wcnN0bnQgJiYgcGVyc2lzdGVudF9kZXBfbGlic1tpXSAmJgorCQkJICAgICpubGRyX25vZGVfb2JqLT5wZl9waGFzZV9zcGxpdCkgeworCQkJCWlmICgobmxkcl9ub2RlX29iai0+cGVyc19saWJzKSA+PSBNQVhMSUJTKSB7CisJCQkJCXN0YXR1cyA9IC1FSUxTRVE7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCS8qIEFsbG9jYXRlIGxpYnJhcnkgb3V0c2lkZSBvZiBwaGFzZSAqLworCQkJCWRlcF9saWIgPQorCQkJCSAgICAmbmxkcl9ub2RlX29iai0+cGVyc19saWJfdGFibGUKKwkJCQkgICAgW25sZHJfbm9kZV9vYmotPnBlcnNfbGlic107CisJCQl9IGVsc2UgeworCQkJCWlmIChyb290X3Byc3RudCkKKwkJCQkJcGVyc2lzdGVudF9kZXBfbGlic1tpXSA9IHRydWU7CisKKwkJCQkvKiBBbGxvY2F0ZSBsaWJyYXJ5IHdpdGhpbiBwaGFzZSAqLworCQkJCWRlcF9saWIgPSAmcm9vdC0+ZGVwX2xpYnNfdHJlZVtuZF9saWJzX2xvYWRlZF07CisJCQl9CisKKwkJCXN0YXR1cyA9IGxvYWRfbGliKG5sZHJfbm9kZV9vYmosIGRlcF9saWIsCisJCQkJCSAgZGVwX2xpYl91dWlfZHNbaV0sCisJCQkJCSAgcGVyc2lzdGVudF9kZXBfbGlic1tpXSwgbGliX3BhdGgsCisJCQkJCSAgcGhhc2UsIGRlcHRoKTsKKworCQkJaWYgKCFzdGF0dXMpIHsKKwkJCQlpZiAoKHN0YXR1cyAhPSAwKSAmJgorCQkJCSAgICAhcm9vdF9wcnN0bnQgJiYgcGVyc2lzdGVudF9kZXBfbGlic1tpXSAmJgorCQkJCSAgICAqbmxkcl9ub2RlX29iai0+cGZfcGhhc2Vfc3BsaXQpIHsKKwkJCQkJKG5sZHJfbm9kZV9vYmotPnBlcnNfbGlicykrKzsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoIXBlcnNpc3RlbnRfZGVwX2xpYnNbaV0gfHwKKwkJCQkJICAgICEoKm5sZHJfbm9kZV9vYmotPnBmX3BoYXNlX3NwbGl0KSkgeworCQkJCQkJbmRfbGlic19sb2FkZWQrKzsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwkvKiBOb3cgd2UgY2FuIGxvYWQgdGhlIHJvb3QgbGlicmFyeSAqLworCWlmICghc3RhdHVzKSB7CisJCW5ld19hdHRycyA9IG5sZHJfb2JqLT5sZHJfYXR0cnM7CisJCW5ld19hdHRycy5zeW1fYXJnID0gcm9vdDsKKwkJbmV3X2F0dHJzLnJtbV9oYW5kbGUgPSBubGRyX25vZGVfb2JqOworCQluZXdfYXR0cnMuaW5wdXRfcGFyYW1zID0gbmxkcl9ub2RlX29iai0+cHJpdl9yZWY7CisJCW5ld19hdHRycy5iYXNlX2ltYWdlID0gZmFsc2U7CisKKwkJc3RhdHVzID0KKwkJICAgIG5sZHJfb2JqLT5sZHJfZnhucy5sb2FkX2Z4bihyb290LT5saWIsIGZsYWdzLCAmbmV3X2F0dHJzLAorCQkJCQkJJmVudHJ5KTsKKwl9CisKKwkvKgorCSAqICBJbiBjYXNlIG9mIGZhaWx1cmUsIHVubG9hZCBhbnkgZGVwZW5kZW50IGxpYnJhcmllcyB0aGF0CisJICogIHdlcmUgbG9hZGVkLCBhbmQgY2xvc2UgdGhlIHJvb3QgbGlicmFyeS4KKwkgKiAgKFBlcnNpc3RlbnQgbGlicmFyaWVzIGFyZSB1bmxvYWRlZCBmcm9tIHRoZSB2ZXJ5IHRvcCkKKwkgKi8KKwlpZiAoc3RhdHVzKSB7CisJCWlmIChwaGFzZSAhPSBOTERSX0VYRUNVVEUpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBubGRyX25vZGVfb2JqLT5wZXJzX2xpYnM7IGkrKykKKwkJCQl1bmxvYWRfbGliKG5sZHJfbm9kZV9vYmosCisJCQkJCSAgICZubGRyX25vZGVfb2JqLT5wZXJzX2xpYl90YWJsZVtpXSk7CisKKwkJCW5sZHJfbm9kZV9vYmotPnBlcnNfbGlicyA9IDA7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IG5kX2xpYnNfbG9hZGVkOyBpKyspCisJCQl1bmxvYWRfbGliKG5sZHJfbm9kZV9vYmosICZyb290LT5kZXBfbGlic190cmVlW2ldKTsKKworCQlpZiAocm9vdC0+bGliKQorCQkJbmxkcl9vYmotPmxkcl9meG5zLmNsb3NlX2Z4bihyb290LT5saWIpOworCisJfQorCisJLyogR29pbmcgdXAgb25lIG5vZGUgaW4gdGhlIGRlcGVuZGVuY3kgdHJlZSAqLworCWRlcHRoLS07CisKKwlrZnJlZShkZXBfbGliX3V1aV9kcyk7CisJZGVwX2xpYl91dWlfZHMgPSBOVUxMOworCisJa2ZyZWUocGVyc2lzdGVudF9kZXBfbGlicyk7CisJcGVyc2lzdGVudF9kZXBfbGlicyA9IE5VTEw7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGxvYWRfb3ZseSA9PT09PT09PQorICovCitzdGF0aWMgaW50IGxvYWRfb3ZseShzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICpubGRyX25vZGVfb2JqLAorCQkJICAgIGVudW0gbmxkcl9waGFzZSBwaGFzZSkKK3sKKwlzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqID0gbmxkcl9ub2RlX29iai0+bmxkcl9vYmo7CisJc3RydWN0IG92bHlfbm9kZSAqcG9fbm9kZSA9IE5VTEw7CisJc3RydWN0IG92bHlfc2VjdCAqcGhhc2Vfc2VjdHMgPSBOVUxMOworCXN0cnVjdCBvdmx5X3NlY3QgKm90aGVyX3NlY3RzX2xpc3QgPSBOVUxMOworCXUxNiBpOworCXUxNiBhbGxvY19udW0gPSAwOworCXUxNiBvdGhlcl9hbGxvYyA9IDA7CisJdTE2ICpyZWZfY291bnQgPSBOVUxMOworCXUxNiAqb3RoZXJfcmVmID0gTlVMTDsKKwl1MzIgYnl0ZXM7CisJc3RydWN0IG92bHlfc2VjdCAqb3ZseV9zZWN0aW9uOworCWludCBzdGF0dXMgPSAwOworCisJLyogRmluZCB0aGUgbm9kZSBpbiB0aGUgdGFibGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmxkcl9vYmotPm92bHlfbm9kZXM7IGkrKykgeworCQlpZiAoaXNfZXF1YWxfdXVpZAorCQkgICAgKCZubGRyX25vZGVfb2JqLT51dWlkLCAmbmxkcl9vYmotPm92bHlfdGFibGVbaV0udXVpZCkpIHsKKwkJCS8qIEZvdW5kIGl0ICovCisJCQlwb19ub2RlID0gJihubGRyX29iai0+b3ZseV90YWJsZVtpXSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCURCQ19BU1NFUlQoaSA8IG5sZHJfb2JqLT5vdmx5X25vZGVzKTsKKworCWlmICghcG9fbm9kZSkgeworCQlzdGF0dXMgPSAtRU5PRU5UOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCXN3aXRjaCAocGhhc2UpIHsKKwljYXNlIE5MRFJfQ1JFQVRFOgorCQlyZWZfY291bnQgPSAmKHBvX25vZGUtPmNyZWF0ZV9yZWYpOworCQlvdGhlcl9yZWYgPSAmKHBvX25vZGUtPm90aGVyX3JlZik7CisJCXBoYXNlX3NlY3RzID0gcG9fbm9kZS0+Y3JlYXRlX3NlY3RzX2xpc3Q7CisJCW90aGVyX3NlY3RzX2xpc3QgPSBwb19ub2RlLT5vdGhlcl9zZWN0c19saXN0OworCQlicmVhazsKKworCWNhc2UgTkxEUl9FWEVDVVRFOgorCQlyZWZfY291bnQgPSAmKHBvX25vZGUtPmV4ZWN1dGVfcmVmKTsKKwkJcGhhc2Vfc2VjdHMgPSBwb19ub2RlLT5leGVjdXRlX3NlY3RzX2xpc3Q7CisJCWJyZWFrOworCisJY2FzZSBOTERSX0RFTEVURToKKwkJcmVmX2NvdW50ID0gJihwb19ub2RlLT5kZWxldGVfcmVmKTsKKwkJcGhhc2Vfc2VjdHMgPSBwb19ub2RlLT5kZWxldGVfc2VjdHNfbGlzdDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlEQkNfQVNTRVJUKGZhbHNlKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHJlZl9jb3VudCA9PSBOVUxMKQorCQlnb3RvIGZ1bmNfZW5kOworCisJaWYgKCpyZWZfY291bnQgIT0gMCkKKwkJZ290byBmdW5jX2VuZDsKKworCS8qICdBbGxvY2F0ZScgbWVtb3J5IGZvciBvdmVybGF5IHNlY3Rpb25zIG9mIHRoaXMgcGhhc2UgKi8KKwlvdmx5X3NlY3Rpb24gPSBwaGFzZV9zZWN0czsKKwl3aGlsZSAob3ZseV9zZWN0aW9uKSB7CisJCS8qIGFsbG9jYXRlICovLyogcGFnZSBub3Qgc3VwcG9ydGVkIHlldCAqLworCQkvKiByZXNlcnZlICovLyogYWxpZ24gKi8KKwkJc3RhdHVzID0gcm1tX2FsbG9jKG5sZHJfb2JqLT5ybW0sIDAsIG92bHlfc2VjdGlvbi0+c2l6ZSwgMCwKKwkJCQkgICAmKG92bHlfc2VjdGlvbi0+c2VjdF9ydW5fYWRkciksIHRydWUpOworCQlpZiAoIXN0YXR1cykgeworCQkJb3ZseV9zZWN0aW9uID0gb3ZseV9zZWN0aW9uLT5uZXh0X3NlY3Q7CisJCQlhbGxvY19udW0rKzsKKwkJfSBlbHNlIHsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChvdGhlcl9yZWYgJiYgKm90aGVyX3JlZiA9PSAwKSB7CisJCS8qICdBbGxvY2F0ZScgbWVtb3J5IGZvciBvdGhlciBvdmVybGF5IHNlY3Rpb25zCisJCSAqIChjcmVhdGUgcGhhc2UpICovCisJCWlmICghc3RhdHVzKSB7CisJCQlvdmx5X3NlY3Rpb24gPSBvdGhlcl9zZWN0c19saXN0OworCQkJd2hpbGUgKG92bHlfc2VjdGlvbikgeworCQkJCS8qIHBhZ2Ugbm90IHN1cHBvcnRlZCAqLy8qIGFsaWduICovCisJCQkJLyogcmVzZXJ2ZSAqLworCQkJCXN0YXR1cyA9CisJCQkJICAgIHJtbV9hbGxvYyhubGRyX29iai0+cm1tLCAwLAorCQkJCQkgICAgICBvdmx5X3NlY3Rpb24tPnNpemUsIDAsCisJCQkJCSAgICAgICYob3ZseV9zZWN0aW9uLT5zZWN0X3J1bl9hZGRyKSwKKwkJCQkJICAgICAgdHJ1ZSk7CisJCQkJaWYgKCFzdGF0dXMpIHsKKwkJCQkJb3ZseV9zZWN0aW9uID0gb3ZseV9zZWN0aW9uLT5uZXh0X3NlY3Q7CisJCQkJCW90aGVyX2FsbG9jKys7CisJCQkJfSBlbHNlIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJfQorCWlmICgqcmVmX2NvdW50ID09IDApIHsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCS8qIExvYWQgc2VjdGlvbnMgZm9yIHRoaXMgcGhhc2UgKi8KKwkJCW92bHlfc2VjdGlvbiA9IHBoYXNlX3NlY3RzOworCQkJd2hpbGUgKG92bHlfc2VjdGlvbiAmJiAhc3RhdHVzKSB7CisJCQkJYnl0ZXMgPQorCQkJCSAgICAoKm5sZHJfb2JqLT5vdmx5X2Z4bikgKG5sZHJfbm9kZV9vYmotPgorCQkJCQkJCSAgIHByaXZfcmVmLAorCQkJCQkJCSAgIG92bHlfc2VjdGlvbi0+CisJCQkJCQkJICAgc2VjdF9ydW5fYWRkciwKKwkJCQkJCQkgICBvdmx5X3NlY3Rpb24tPgorCQkJCQkJCSAgIHNlY3RfbG9hZF9hZGRyLAorCQkJCQkJCSAgIG92bHlfc2VjdGlvbi0+c2l6ZSwKKwkJCQkJCQkgICBvdmx5X3NlY3Rpb24tPnBhZ2UpOworCQkJCWlmIChieXRlcyAhPSBvdmx5X3NlY3Rpb24tPnNpemUpCisJCQkJCXN0YXR1cyA9IC1FUEVSTTsKKworCQkJCW92bHlfc2VjdGlvbiA9IG92bHlfc2VjdGlvbi0+bmV4dF9zZWN0OworCQkJfQorCQl9CisJfQorCWlmIChvdGhlcl9yZWYgJiYgKm90aGVyX3JlZiA9PSAwKSB7CisJCWlmICghc3RhdHVzKSB7CisJCQkvKiBMb2FkIG90aGVyIHNlY3Rpb25zIChjcmVhdGUgcGhhc2UpICovCisJCQlvdmx5X3NlY3Rpb24gPSBvdGhlcl9zZWN0c19saXN0OworCQkJd2hpbGUgKG92bHlfc2VjdGlvbiAmJiAhc3RhdHVzKSB7CisJCQkJYnl0ZXMgPQorCQkJCSAgICAoKm5sZHJfb2JqLT5vdmx5X2Z4bikgKG5sZHJfbm9kZV9vYmotPgorCQkJCQkJCSAgIHByaXZfcmVmLAorCQkJCQkJCSAgIG92bHlfc2VjdGlvbi0+CisJCQkJCQkJICAgc2VjdF9ydW5fYWRkciwKKwkJCQkJCQkgICBvdmx5X3NlY3Rpb24tPgorCQkJCQkJCSAgIHNlY3RfbG9hZF9hZGRyLAorCQkJCQkJCSAgIG92bHlfc2VjdGlvbi0+c2l6ZSwKKwkJCQkJCQkgICBvdmx5X3NlY3Rpb24tPnBhZ2UpOworCQkJCWlmIChieXRlcyAhPSBvdmx5X3NlY3Rpb24tPnNpemUpCisJCQkJCXN0YXR1cyA9IC1FUEVSTTsKKworCQkJCW92bHlfc2VjdGlvbiA9IG92bHlfc2VjdGlvbi0+bmV4dF9zZWN0OworCQkJfQorCQl9CisJfQorCWlmIChzdGF0dXMpIHsKKwkJLyogJ0RlYWxsb2NhdGUnIG1lbW9yeSAqLworCQlmcmVlX3NlY3RzKG5sZHJfb2JqLCBwaGFzZV9zZWN0cywgYWxsb2NfbnVtKTsKKwkJZnJlZV9zZWN0cyhubGRyX29iaiwgb3RoZXJfc2VjdHNfbGlzdCwgb3RoZXJfYWxsb2MpOworCX0KK2Z1bmNfZW5kOgorCWlmICghc3RhdHVzICYmIChyZWZfY291bnQgIT0gTlVMTCkpIHsKKwkJKnJlZl9jb3VudCArPSAxOworCQlpZiAob3RoZXJfcmVmKQorCQkJKm90aGVyX3JlZiArPSAxOworCisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSByZW1vdGVfYWxsb2MgPT09PT09PT0KKyAqLworc3RhdGljIGludCByZW1vdGVfYWxsb2Modm9pZCAqKnJlZiwgdTE2IG1lbV9zZWN0LCB1MzIgc2l6ZSwKKwkJCSAgICAgICB1MzIgYWxpZ24sIHUzMiAqZHNwX2FkZHJlc3MsCisJCQkgICAgICAgczMyIHNlZ21udF9pZCwgczMyIHJlcSwKKwkJCSAgICAgICBib29sIHJlc2VydmUpCit7CisJc3RydWN0IG5sZHJfbm9kZW9iamVjdCAqaG5vZGUgPSAoc3RydWN0IG5sZHJfbm9kZW9iamVjdCAqKXJlZjsKKwlzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqOworCXN0cnVjdCBybW1fdGFyZ2V0X29iaiAqcm1tOworCXUxNiBtZW1fcGhhc2VfYml0ID0gTUFYRkxBR1M7CisJdTE2IHNlZ2lkID0gMDsKKwl1MTYgaTsKKwl1MTYgbWVtX3NlY3RfdHlwZTsKKwl1MzIgd29yZF9zaXplOworCXN0cnVjdCBybW1fYWRkciAqcm1tX2FkZHJfb2JqID0gKHN0cnVjdCBybW1fYWRkciAqKWRzcF9hZGRyZXNzOworCWJvb2wgbWVtX2xvYWRfcmVxID0gZmFsc2U7CisJaW50IHN0YXR1cyA9IC1FTk9NRU07CS8qIFNldCB0byBmYWlsICovCisJREJDX1JFUVVJUkUoaG5vZGUpOworCURCQ19SRVFVSVJFKG1lbV9zZWN0ID09IERCTExfQ09ERSB8fCBtZW1fc2VjdCA9PSBEQkxMX0RBVEEgfHwKKwkJICAgIG1lbV9zZWN0ID09IERCTExfQlNTKTsKKwlubGRyX29iaiA9IGhub2RlLT5ubGRyX29iajsKKwlybW0gPSBubGRyX29iai0+cm1tOworCS8qIENvbnZlcnQgc2l6ZSB0byBEU1Agd29yZHMgKi8KKwl3b3JkX3NpemUgPQorCSAgICAoc2l6ZSArIG5sZHJfb2JqLT51c19kc3Bfd29yZF9zaXplIC0KKwkgICAgIDEpIC8gbmxkcl9vYmotPnVzX2RzcF93b3JkX3NpemU7CisJLyogTW9kaWZ5IG1lbW9yeSAnYWxpZ24nIHRvIGFjY291bnQgZm9yIERTUCBjYWNoZSBsaW5lIHNpemUgKi8KKwlhbGlnbiA9IGZpbmRfbGNtKEdFTV9DQUNIRV9MSU5FX1NJWkUsIGFsaWduKTsKKwlkZXZfZGJnKGJyaWRnZSwgIiVzOiBtZW1vcnkgYWxpZ24gdG8gMHgleFxuIiwgX19mdW5jX18sIGFsaWduKTsKKwlpZiAoc2VnbW50X2lkICE9IC0xKSB7CisJCXJtbV9hZGRyX29iai0+c2VnaWQgPSBzZWdtbnRfaWQ7CisJCXNlZ2lkID0gc2VnbW50X2lkOworCQltZW1fbG9hZF9yZXEgPSByZXE7CisJfSBlbHNlIHsKKwkJc3dpdGNoIChobm9kZS0+cGhhc2UpIHsKKwkJY2FzZSBOTERSX0NSRUFURToKKwkJCW1lbV9waGFzZV9iaXQgPSBDUkVBVEVEQVRBRkxBR0JJVDsKKwkJCWJyZWFrOworCQljYXNlIE5MRFJfREVMRVRFOgorCQkJbWVtX3BoYXNlX2JpdCA9IERFTEVURURBVEFGTEFHQklUOworCQkJYnJlYWs7CisJCWNhc2UgTkxEUl9FWEVDVVRFOgorCQkJbWVtX3BoYXNlX2JpdCA9IEVYRUNVVEVEQVRBRkxBR0JJVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJREJDX0FTU0VSVChmYWxzZSk7CisJCQlicmVhazsKKwkJfQorCQlpZiAobWVtX3NlY3QgPT0gREJMTF9DT0RFKQorCQkJbWVtX3BoYXNlX2JpdCsrOworCisJCWlmIChtZW1fcGhhc2VfYml0IDwgTUFYRkxBR1MpCisJCQlzZWdpZCA9IGhub2RlLT5zZWdfaWRbbWVtX3BoYXNlX2JpdF07CisKKwkJLyogRGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGEgbWVtb3J5IGxvYWRpbmcgcmVxdWlyZW1lbnQgKi8KKwkJaWYgKChobm9kZS0+Y29kZV9kYXRhX2ZsYWdfbWFzayA+PiBtZW1fcGhhc2VfYml0KSAmIDB4MSkKKwkJCW1lbV9sb2FkX3JlcSA9IHRydWU7CisKKwl9CisJbWVtX3NlY3RfdHlwZSA9IChtZW1fc2VjdCA9PSBEQkxMX0NPREUpID8gRFlOTV9DT0RFIDogRFlOTV9EQVRBOworCisJLyogRmluZCBhbiBhcHByb3ByaWF0ZSBzZWdtZW50IGJhc2VkIG9uIG1lbV9zZWN0ICovCisJaWYgKHNlZ2lkID09IE5VTExJRCkgeworCQkvKiBObyBtZW1vcnkgcmVxdWlyZW1lbnRzIG9mIHByZWZlcmVuY2VzICovCisJCURCQ19BU1NFUlQoIW1lbV9sb2FkX3JlcSk7CisJCWdvdG8gZnVuY19jb250OworCX0KKwlpZiAoc2VnaWQgPD0gTUFYU0VHSUQpIHsKKwkJREJDX0FTU0VSVChzZWdpZCA8IG5sZHJfb2JqLT5kbG9hZF9zZWdzKTsKKwkJLyogQXR0ZW1wdCB0byBhbGxvY2F0ZSBmcm9tIHNlZ2lkIGZpcnN0LiAqLworCQlybW1fYWRkcl9vYmotPnNlZ2lkID0gc2VnaWQ7CisJCXN0YXR1cyA9CisJCSAgICBybW1fYWxsb2Mocm1tLCBzZWdpZCwgd29yZF9zaXplLCBhbGlnbiwgZHNwX2FkZHJlc3MsIGZhbHNlKTsKKwkJaWYgKHN0YXR1cykgeworCQkJZGV2X2RiZyhicmlkZ2UsICIlczogVW5hYmxlIGFsbG9jYXRlIGZyb20gc2VnbWVudCAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgc2VnaWQpOworCQl9CisJfSBlbHNlIHsKKwkJLyogc2VnaWQgPiBNQVhTRUdJRCA9PT4gSW50ZXJuYWwgb3IgZXh0ZXJuYWwgbWVtb3J5ICovCisJCURCQ19BU1NFUlQoc2VnaWQgPT0gTUVNSU5URVJOQUxJRCB8fCBzZWdpZCA9PSBNRU1FWFRFUk5BTElEKTsKKwkJLyogIENoZWNrIGZvciBhbnkgaW50ZXJuYWwgb3IgZXh0ZXJuYWwgbWVtb3J5IHNlZ21lbnQsCisJCSAqICBkZXBlbmRpbmcgb24gc2VnaWQuICovCisJCW1lbV9zZWN0X3R5cGUgfD0gc2VnaWQgPT0gTUVNSU5URVJOQUxJRCA/CisJCSAgICBEWU5NX0lOVEVSTkFMIDogRFlOTV9FWFRFUk5BTDsKKwkJZm9yIChpID0gMDsgaSA8IG5sZHJfb2JqLT5kbG9hZF9zZWdzOyBpKyspIHsKKwkJCWlmICgobmxkcl9vYmotPnNlZ190YWJsZVtpXSAmIG1lbV9zZWN0X3R5cGUpICE9CisJCQkgICAgbWVtX3NlY3RfdHlwZSkKKwkJCQljb250aW51ZTsKKworCQkJc3RhdHVzID0gcm1tX2FsbG9jKHJtbSwgaSwgd29yZF9zaXplLCBhbGlnbiwKKwkJCQkJZHNwX2FkZHJlc3MsIGZhbHNlKTsKKwkJCWlmICghc3RhdHVzKSB7CisJCQkJLyogU2F2ZSBzZWdpZCBmb3IgZnJlZWluZyBsYXRlciAqLworCQkJCXJtbV9hZGRyX29iai0+c2VnaWQgPSBpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorZnVuY19jb250OgorCS8qIEhhdmVuJ3QgZm91bmQgbWVtb3J5IHlldCwgYXR0ZW1wdCB0byBmaW5kIGFueSBzZWdtZW50IHRoYXQgd29ya3MgKi8KKwlpZiAoc3RhdHVzID09IC1FTk9NRU0gJiYgIW1lbV9sb2FkX3JlcSkgeworCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBQcmVmZXJyZWQgc2VnbWVudCB1bmF2YWlsYWJsZSwgdHJ5aW5nICIKKwkJCSJhbm90aGVyXG4iLCBfX2Z1bmNfXyk7CisJCWZvciAoaSA9IDA7IGkgPCBubGRyX29iai0+ZGxvYWRfc2VnczsgaSsrKSB7CisJCQkvKiBBbGwgYml0cyBvZiBtZW1fc2VjdF90eXBlIG11c3QgYmUgc2V0ICovCisJCQlpZiAoKG5sZHJfb2JqLT5zZWdfdGFibGVbaV0gJiBtZW1fc2VjdF90eXBlKSAhPQorCQkJICAgIG1lbV9zZWN0X3R5cGUpCisJCQkJY29udGludWU7CisKKwkJCXN0YXR1cyA9IHJtbV9hbGxvYyhybW0sIGksIHdvcmRfc2l6ZSwgYWxpZ24sCisJCQkJCSAgIGRzcF9hZGRyZXNzLCBmYWxzZSk7CisJCQlpZiAoIXN0YXR1cykgeworCQkJCS8qIFNhdmUgc2VnaWQgKi8KKwkJCQlybW1fYWRkcl9vYmotPnNlZ2lkID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgcmVtb3RlX2ZyZWUodm9pZCAqKnJlZiwgdTE2IHNwYWNlLCB1MzIgZHNwX2FkZHJlc3MsCisJCQkgICAgICB1MzIgc2l6ZSwgYm9vbCByZXNlcnZlKQoreworCXN0cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmogPSAoc3RydWN0IG5sZHJfb2JqZWN0ICopcmVmOworCXN0cnVjdCBybW1fdGFyZ2V0X29iaiAqcm1tOworCXUzMiB3b3JkX3NpemU7CisJaW50IHN0YXR1cyA9IC1FTk9NRU07CS8qIFNldCB0byBmYWlsICovCisKKwlEQkNfUkVRVUlSRShubGRyX29iaik7CisKKwlybW0gPSBubGRyX29iai0+cm1tOworCisJLyogQ29udmVydCBzaXplIHRvIERTUCB3b3JkcyAqLworCXdvcmRfc2l6ZSA9CisJICAgIChzaXplICsgbmxkcl9vYmotPnVzX2RzcF93b3JkX3NpemUgLQorCSAgICAgMSkgLyBubGRyX29iai0+dXNfZHNwX3dvcmRfc2l6ZTsKKworCWlmIChybW1fZnJlZShybW0sIHNwYWNlLCBkc3BfYWRkcmVzcywgd29yZF9zaXplLCByZXNlcnZlKSkKKwkJc3RhdHVzID0gMDsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gdW5sb2FkX2xpYiA9PT09PT09PQorICovCitzdGF0aWMgdm9pZCB1bmxvYWRfbGliKHN0cnVjdCBubGRyX25vZGVvYmplY3QgKm5sZHJfbm9kZV9vYmosCisJCSAgICAgICBzdHJ1Y3QgbGliX25vZGUgKnJvb3QpCit7CisJc3RydWN0IGRibGxfYXR0cnMgbmV3X2F0dHJzOworCXN0cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmogPSBubGRyX25vZGVfb2JqLT5ubGRyX29iajsKKwl1MTYgaTsKKworCURCQ19BU1NFUlQocm9vdCAhPSBOVUxMKTsKKworCS8qIFVubG9hZCBkZXBlbmRlbnQgbGlicmFyaWVzICovCisJZm9yIChpID0gMDsgaSA8IHJvb3QtPmRlcF9saWJzOyBpKyspCisJCXVubG9hZF9saWIobmxkcl9ub2RlX29iaiwgJnJvb3QtPmRlcF9saWJzX3RyZWVbaV0pOworCisJcm9vdC0+ZGVwX2xpYnMgPSAwOworCisJbmV3X2F0dHJzID0gbmxkcl9vYmotPmxkcl9hdHRyczsKKwluZXdfYXR0cnMucm1tX2hhbmRsZSA9IG5sZHJfb2JqLT5ybW07CisJbmV3X2F0dHJzLmlucHV0X3BhcmFtcyA9IG5sZHJfbm9kZV9vYmotPnByaXZfcmVmOworCW5ld19hdHRycy5iYXNlX2ltYWdlID0gZmFsc2U7CisJbmV3X2F0dHJzLnN5bV9hcmcgPSByb290OworCisJaWYgKHJvb3QtPmxpYikgeworCQkvKiBVbmxvYWQgdGhlIHJvb3QgbGlicmFyeSAqLworCQlubGRyX29iai0+bGRyX2Z4bnMudW5sb2FkX2Z4bihyb290LT5saWIsICZuZXdfYXR0cnMpOworCQlubGRyX29iai0+bGRyX2Z4bnMuY2xvc2VfZnhuKHJvb3QtPmxpYik7CisJfQorCisJLyogRnJlZSBkZXBlbmRlbnQgbGlicmFyeSBsaXN0ICovCisJa2ZyZWUocm9vdC0+ZGVwX2xpYnNfdHJlZSk7CisJcm9vdC0+ZGVwX2xpYnNfdHJlZSA9IE5VTEw7Cit9CisKKy8qCisgKiAgPT09PT09PT0gdW5sb2FkX292bHkgPT09PT09PT0KKyAqLworc3RhdGljIHZvaWQgdW5sb2FkX292bHkoc3RydWN0IG5sZHJfbm9kZW9iamVjdCAqbmxkcl9ub2RlX29iaiwKKwkJCWVudW0gbmxkcl9waGFzZSBwaGFzZSkKK3sKKwlzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqID0gbmxkcl9ub2RlX29iai0+bmxkcl9vYmo7CisJc3RydWN0IG92bHlfbm9kZSAqcG9fbm9kZSA9IE5VTEw7CisJc3RydWN0IG92bHlfc2VjdCAqcGhhc2Vfc2VjdHMgPSBOVUxMOworCXN0cnVjdCBvdmx5X3NlY3QgKm90aGVyX3NlY3RzX2xpc3QgPSBOVUxMOworCXUxNiBpOworCXUxNiBhbGxvY19udW0gPSAwOworCXUxNiBvdGhlcl9hbGxvYyA9IDA7CisJdTE2ICpyZWZfY291bnQgPSBOVUxMOworCXUxNiAqb3RoZXJfcmVmID0gTlVMTDsKKworCS8qIEZpbmQgdGhlIG5vZGUgaW4gdGhlIHRhYmxlICovCisJZm9yIChpID0gMDsgaSA8IG5sZHJfb2JqLT5vdmx5X25vZGVzOyBpKyspIHsKKwkJaWYgKGlzX2VxdWFsX3V1aWQKKwkJICAgICgmbmxkcl9ub2RlX29iai0+dXVpZCwgJm5sZHJfb2JqLT5vdmx5X3RhYmxlW2ldLnV1aWQpKSB7CisJCQkvKiBGb3VuZCBpdCAqLworCQkJcG9fbm9kZSA9ICYobmxkcl9vYmotPm92bHlfdGFibGVbaV0pOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlEQkNfQVNTRVJUKGkgPCBubGRyX29iai0+b3ZseV9ub2Rlcyk7CisKKwlpZiAoIXBvX25vZGUpCisJCS8qIFRPRE86IFNob3VsZCB3ZSBwcmludCB3YXJuaW5nIGhlcmU/ICovCisJCXJldHVybjsKKworCXN3aXRjaCAocGhhc2UpIHsKKwljYXNlIE5MRFJfQ1JFQVRFOgorCQlyZWZfY291bnQgPSAmKHBvX25vZGUtPmNyZWF0ZV9yZWYpOworCQlwaGFzZV9zZWN0cyA9IHBvX25vZGUtPmNyZWF0ZV9zZWN0c19saXN0OworCQlhbGxvY19udW0gPSBwb19ub2RlLT5jcmVhdGVfc2VjdHM7CisJCWJyZWFrOworCWNhc2UgTkxEUl9FWEVDVVRFOgorCQlyZWZfY291bnQgPSAmKHBvX25vZGUtPmV4ZWN1dGVfcmVmKTsKKwkJcGhhc2Vfc2VjdHMgPSBwb19ub2RlLT5leGVjdXRlX3NlY3RzX2xpc3Q7CisJCWFsbG9jX251bSA9IHBvX25vZGUtPmV4ZWN1dGVfc2VjdHM7CisJCWJyZWFrOworCWNhc2UgTkxEUl9ERUxFVEU6CisJCXJlZl9jb3VudCA9ICYocG9fbm9kZS0+ZGVsZXRlX3JlZik7CisJCW90aGVyX3JlZiA9ICYocG9fbm9kZS0+b3RoZXJfcmVmKTsKKwkJcGhhc2Vfc2VjdHMgPSBwb19ub2RlLT5kZWxldGVfc2VjdHNfbGlzdDsKKwkJLyogJ090aGVyJyBvdmVybGF5IHNlY3Rpb25zIGFyZSB1bmxvYWRlZCBpbiB0aGUgZGVsZXRlIHBoYXNlICovCisJCW90aGVyX3NlY3RzX2xpc3QgPSBwb19ub2RlLT5vdGhlcl9zZWN0c19saXN0OworCQlhbGxvY19udW0gPSBwb19ub2RlLT5kZWxldGVfc2VjdHM7CisJCW90aGVyX2FsbG9jID0gcG9fbm9kZS0+b3RoZXJfc2VjdHM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURCQ19BU1NFUlQoZmFsc2UpOworCQlicmVhazsKKwl9CisJREJDX0FTU0VSVChyZWZfY291bnQgJiYgKCpyZWZfY291bnQgPiAwKSk7CisJaWYgKHJlZl9jb3VudCAmJiAoKnJlZl9jb3VudCA+IDApKSB7CisJCSpyZWZfY291bnQgLT0gMTsKKwkJaWYgKG90aGVyX3JlZikgeworCQkJREJDX0FTU0VSVCgqb3RoZXJfcmVmID4gMCk7CisJCQkqb3RoZXJfcmVmIC09IDE7CisJCX0KKwl9CisKKwlpZiAocmVmX2NvdW50ICYmICpyZWZfY291bnQgPT0gMCkgeworCQkvKiAnRGVhbGxvY2F0ZScgbWVtb3J5ICovCisJCWZyZWVfc2VjdHMobmxkcl9vYmosIHBoYXNlX3NlY3RzLCBhbGxvY19udW0pOworCX0KKwlpZiAob3RoZXJfcmVmICYmICpvdGhlcl9yZWYgPT0gMCkKKwkJZnJlZV9zZWN0cyhubGRyX29iaiwgb3RoZXJfc2VjdHNfbGlzdCwgb3RoZXJfYWxsb2MpOworfQorCisvKgorICogID09PT09PT09IGZpbmRfaW5fcGVyc2lzdGVudF9saWJfYXJyYXkgPT09PT09PT0KKyAqLworc3RhdGljIGJvb2wgZmluZF9pbl9wZXJzaXN0ZW50X2xpYl9hcnJheShzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICpubGRyX25vZGVfb2JqLAorCQkJCQkgc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYikKK3sKKwlzMzIgaSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmxkcl9ub2RlX29iai0+cGVyc19saWJzOyBpKyspIHsKKwkJaWYgKGxpYiA9PSBubGRyX25vZGVfb2JqLT5wZXJzX2xpYl90YWJsZVtpXS5saWIpCisJCQlyZXR1cm4gdHJ1ZTsKKworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqID09PT09PT09PT09PT09PT0gRmluZCBMQ00gKExlYXN0IENvbW1vbiBNdWx0aXBsaWVyID09PQorICovCitzdGF0aWMgdTMyIGZpbmRfbGNtKHUzMiBhLCB1MzIgYikKK3sKKwl1MzIgcmV0OworCisJcmV0ID0gYSAqIGIgLyBnY2QoYSwgYik7CisKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0JBQ0tUUkFDRQorLyoqCisgKiBubGRyX2ZpbmRfYWRkcigpIC0gRmluZCB0aGUgY2xvc2VzdCBzeW1ib2wgdG8gdGhlIGdpdmVuIGFkZHJlc3MgYmFzZWQgb24KKyAqCQlkeW5hbWljIG5vZGUgb2JqZWN0LgorICoKKyAqIEBubGRyX25vZGU6CQlEeW5hbWljIG5vZGUgb2JqZWN0CisgKiBAc3ltX2FkZHI6CQlHaXZlbiBhZGRyZXNzIHRvIGZpbmQgdGhlIGRzcCBzeW1ib2wKKyAqIEBvZmZzZXRfcmFuZ2U6CQlvZmZzZXQgcmFuZ2UgdG8gbG9vayBmb3IgZHNwIHN5bWJvbAorICogQG9mZnNldF9vdXRwdXQ6CQlTeW1ib2wgT3V0cHV0IGFkZHJlc3MKKyAqIEBzeW1fbmFtZToJCVN0cmluZyB3aXRoIHRoZSBkc3Agc3ltYm9sCisgKgorICogCVRoaXMgZnVuY3Rpb24gZmluZHMgdGhlIG5vZGUgbGlicmFyeSBmb3IgYSBnaXZlbiBhZGRyZXNzIGFuZAorICoJcmV0cmlldmVzIHRoZSBkc3Agc3ltYm9sIGJ5IGNhbGxpbmcgZGJsbF9maW5kX2RzcF9zeW1ib2wuCisgKi8KK2ludCBubGRyX2ZpbmRfYWRkcihzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICpubGRyX25vZGUsIHUzMiBzeW1fYWRkciwKKwkJCXUzMiBvZmZzZXRfcmFuZ2UsIHZvaWQgKm9mZnNldF9vdXRwdXQsIGNoYXIgKnN5bV9uYW1lKQoreworCWludCBzdGF0dXMgPSAwOworCWJvb2wgc3RhdHVzMSA9IGZhbHNlOworCXMzMiBpID0gMDsKKwlzdHJ1Y3QgbGliX25vZGUgcm9vdCA9IHsgTlVMTCwgMCwgTlVMTCB9OworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShvZmZzZXRfb3V0cHV0ICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHN5bV9uYW1lICE9IE5VTEwpOworCXByX2RlYnVnKCIlcygweCV4LCAweCV4LCAweCV4LCAweCV4LCAgJXMpXG4iLCBfX2Z1bmNfXywgKHUzMikgbmxkcl9ub2RlLAorCQkJc3ltX2FkZHIsIG9mZnNldF9yYW5nZSwgKHUzMikgb2Zmc2V0X291dHB1dCwgc3ltX25hbWUpOworCisJaWYgKG5sZHJfbm9kZS0+ZHluYW1pYyAmJiAqbmxkcl9ub2RlLT5wZl9waGFzZV9zcGxpdCkgeworCQlzd2l0Y2ggKG5sZHJfbm9kZS0+cGhhc2UpIHsKKwkJY2FzZSBOTERSX0NSRUFURToKKwkJCXJvb3QgPSBubGRyX25vZGUtPmNyZWF0ZV9saWI7CisJCQlicmVhazsKKwkJY2FzZSBOTERSX0VYRUNVVEU6CisJCQlyb290ID0gbmxkcl9ub2RlLT5leGVjdXRlX2xpYjsKKwkJCWJyZWFrOworCQljYXNlIE5MRFJfREVMRVRFOgorCQkJcm9vdCA9IG5sZHJfbm9kZS0+ZGVsZXRlX2xpYjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJREJDX0FTU0VSVChmYWxzZSk7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGZvciBPdmVybGF5IG5vZGVzIG9yIG5vbi1zcGxpdCBEeW5hbWljIG5vZGVzICovCisJCXJvb3QgPSBubGRyX25vZGUtPnJvb3Q7CisJfQorCisJc3RhdHVzMSA9IGRibGxfZmluZF9kc3Bfc3ltYm9sKHJvb3QubGliLCBzeW1fYWRkciwKKwkJCW9mZnNldF9yYW5nZSwgb2Zmc2V0X291dHB1dCwgc3ltX25hbWUpOworCisJLyogSWYgc3ltYm9sIG5vdCBmb3VuZCwgY2hlY2sgZGVwZW5kZW50IGxpYnJhcmllcyAqLworCWlmICghc3RhdHVzMSkKKwkJZm9yIChpID0gMDsgaSA8IHJvb3QuZGVwX2xpYnM7IGkrKykgeworCQkJc3RhdHVzMSA9IGRibGxfZmluZF9kc3Bfc3ltYm9sKAorCQkJCXJvb3QuZGVwX2xpYnNfdHJlZVtpXS5saWIsIHN5bV9hZGRyLAorCQkJCW9mZnNldF9yYW5nZSwgb2Zmc2V0X291dHB1dCwgc3ltX25hbWUpOworCQkJaWYgKHN0YXR1czEpCisJCQkJLyogU3ltYm9sIGZvdW5kICovCisJCQkJYnJlYWs7CisJCX0KKwkvKiBDaGVjayBwZXJzaXN0ZW50IGxpYnJhcmllcyAqLworCWlmICghc3RhdHVzMSkKKwkJZm9yIChpID0gMDsgaSA8IG5sZHJfbm9kZS0+cGVyc19saWJzOyBpKyspIHsKKwkJCXN0YXR1czEgPSBkYmxsX2ZpbmRfZHNwX3N5bWJvbCgKKwkJCQlubGRyX25vZGUtPnBlcnNfbGliX3RhYmxlW2ldLmxpYiwgc3ltX2FkZHIsCisJCQkJb2Zmc2V0X3JhbmdlLCBvZmZzZXRfb3V0cHV0LCBzeW1fbmFtZSk7CisJCQlpZiAoc3RhdHVzMSkKKwkJCQkvKiBTeW1ib2wgZm91bmQgKi8KKwkJCQlicmVhazsKKwkJfQorCisJaWYgKCFzdGF0dXMxKSB7CisJCXByX2RlYnVnKCIlczogQWRkcmVzcyAweCV4IG5vdCBmb3VuZCBpbiByYW5nZSAlZC5cbiIsCisJCQkJCV9fZnVuY19fLCBzeW1fYWRkciwgb2Zmc2V0X3JhbmdlKTsKKwkJc3RhdHVzID0gLUVTUElQRTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9ub2RlLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9ub2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU5NDQxZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL25vZGUuYwpAQCAtMCwwICsxLDMyMzQgQEAKKy8qCisgKiBub2RlLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogRFNQL0JJT1MgQnJpZGdlIE5vZGUgTWFuYWdlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIb3N0IE9TICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRyYWNlICYgRGVidWcgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJjLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPUyBBZGFwdGF0aW9uIExheWVyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NmZy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9saXN0Lmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL21lbWRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvcHJvYy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9zdHJtLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3N5bmMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvbnRmeS5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhdGZvcm0gTWFuYWdlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9jbW0uaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY29kLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9tc2cuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlc291cmNlIE1hbmFnZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkY2QuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGlzcC5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9ybXNfc2guaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExpbmsgRHJpdmVyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwaW9jdGwuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE90aGVycyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9nYi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS91dWlkdXRpbC5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhpcyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9ub2RlcHJpdi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9ub2RlLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RtbS5oPgorCisvKiBTdGF0aWMvRHluYW1pYyBMb2FkZXIgaW5jbHVkZXMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJsbC5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9ubGRyLmg+CisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHJ2Lmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RydmRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvcmVzb3VyY2VjbGVhbnVwLmg+CisjaW5jbHVkZSA8X3Rpb21hcC5oPgorCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGRlaC5oPgorCisjZGVmaW5lIEhPU1RQUkVGSVgJICAiL2hvc3QiCisjZGVmaW5lIFBJUEVQUkVGSVgJICAiL2RicGlwZSIKKworI2RlZmluZSBNQVhfSU5QVVRTKGgpICBcCisJCSgoaCktPmRjZF9wcm9wcy5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMubnVtX2lucHV0X3N0cmVhbXMpCisjZGVmaW5lIE1BWF9PVVRQVVRTKGgpIFwKKwkJKChoKS0+ZGNkX3Byb3BzLm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy5udW1fb3V0cHV0X3N0cmVhbXMpCisKKyNkZWZpbmUgTk9ERV9HRVRfUFJJT1JJVFkoaCkgKChoKS0+cHJpbykKKyNkZWZpbmUgTk9ERV9TRVRfUFJJT1JJVFkoaG5vZGUsIHByaW8pICgoaG5vZGUpLT5wcmlvID0gcHJpbykKKyNkZWZpbmUgTk9ERV9TRVRfU1RBVEUoaG5vZGUsIHN0YXRlKSAoKGhub2RlKS0+bm9kZV9zdGF0ZSA9IHN0YXRlKQorCisjZGVmaW5lIE1BWFBJUEVTCTEwMAkvKiBNYXggIyBvZiAvcGlwZSBjb25uZWN0aW9ucyAoQ1NMIGxpbWl0KSAqLworI2RlZmluZSBNQVhERVZTVUZGSVhMRU4gMgkvKiBNYXgoTG9nIGJhc2UgMTAgb2YgTUFYUElQRVMsIE1BWFNUUkVBTVMpICovCisKKyNkZWZpbmUgUElQRU5BTUVMRU4gICAgIChzaXplb2YoUElQRVBSRUZJWCkgKyBNQVhERVZTVUZGSVhMRU4pCisjZGVmaW5lIEhPU1ROQU1FTEVOICAgICAoc2l6ZW9mKEhPU1RQUkVGSVgpICsgTUFYREVWU1VGRklYTEVOKQorCisjZGVmaW5lIE1BWERFVk5BTUVMRU4JMzIJLyogZHNwX25kYnByb3BzLmFjX25hbWUgc2l6ZSAqLworI2RlZmluZSBDUkVBVEVQSEFTRQkxCisjZGVmaW5lIEVYRUNVVEVQSEFTRQkyCisjZGVmaW5lIERFTEVURVBIQVNFCTMKKworLyogRGVmaW5lIGRlZmF1bHQgU1RSTSBwYXJhbWV0ZXJzICovCisvKgorICogIFRCRDogUHV0IGluIGhlYWRlciBmaWxlLCBtYWtlIGdsb2JhbCBEU1BfU1RSTUFUVFJTIHdpdGggZGVmYXVsdHMsCisgKiAgb3IgbWFrZSBkZWZhdWx0cyBjb25maWd1cmFibGUuCisgKi8KKyNkZWZpbmUgREVGQVVMVEJVRlNJWkUJCTMyCisjZGVmaW5lIERFRkFVTFROQlVGUwkJMgorI2RlZmluZSBERUZBVUxUU0VHSUQJCTAKKyNkZWZpbmUgREVGQVVMVEFMSUdOTUVOVAkwCisjZGVmaW5lIERFRkFVTFRUSU1FT1VUCQkxMDAwMAorCisjZGVmaW5lIFJNU1FVRVJZU0VSVkVSCQkwCisjZGVmaW5lIFJNU0NPTkZJR1VSRVNFUlZFUgkxCisjZGVmaW5lIFJNU0NSRUFURU5PREUJCTIKKyNkZWZpbmUgUk1TRVhFQ1VURU5PREUJCTMKKyNkZWZpbmUgUk1TREVMRVRFTk9ERQkJNAorI2RlZmluZSBSTVNDSEFOR0VOT0RFUFJJT1JJVFkJNQorI2RlZmluZSBSTVNSRUFETUVNT1JZCQk2CisjZGVmaW5lIFJNU1dSSVRFTUVNT1JZCQk3CisjZGVmaW5lIFJNU0NPUFkJCQk4CisjZGVmaW5lIE1BWFRJTUVPVVQJCTIwMDAKKworI2RlZmluZSBOVU1STVNGWE5TCQk5CisKKyNkZWZpbmUgUFdSX1RJTUVPVVQJCTUwMAkvKiBkZWZhdWx0IFBXUiB0aW1lb3V0IGluIG1zZWMgKi8KKworI2RlZmluZSBTVEFDS1NFR0xBQkVMICJMMURTUkFNX0hFQVAiCS8qIExhYmVsIGZvciBEU1AgU3RhY2sgU2VnbWVudCBBZGRyICovCisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9tZ3IgPT09PT09PT0KKyAqLworc3RydWN0IG5vZGVfbWdyIHsKKwlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmo7CS8qIERldmljZSBvYmplY3QgKi8KKwkvKiBGdW5jdGlvbiBpbnRlcmZhY2UgdG8gQnJpZGdlIGRyaXZlciAqLworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCXN0cnVjdCBkY2RfbWFuYWdlciAqaGRjZF9tZ3I7CS8qIFByb2MvTm9kZSBkYXRhIG1hbmFnZXIgKi8KKwlzdHJ1Y3QgZGlzcF9vYmplY3QgKmRpc3Bfb2JqOwkvKiBOb2RlIGRpc3BhdGNoZXIgKi8KKwlzdHJ1Y3QgbHN0X2xpc3QgKm5vZGVfbGlzdDsJLyogTGlzdCBvZiBhbGwgYWxsb2NhdGVkIG5vZGVzICovCisJdTMyIG51bV9ub2RlczsJCS8qIE51bWJlciBvZiBub2RlcyBpbiBub2RlX2xpc3QgKi8KKwl1MzIgbnVtX2NyZWF0ZWQ7CS8qIE51bWJlciBvZiBub2RlcyAqY3JlYXRlZCogb24gRFNQICovCisJc3RydWN0IGdiX3RfbWFwICpwaXBlX21hcDsJLyogUGlwZSBjb25uZWN0aW9uIGJpdCBtYXAgKi8KKwlzdHJ1Y3QgZ2JfdF9tYXAgKnBpcGVfZG9uZV9tYXA7CS8qIFBpcGVzIHRoYXQgYXJlIGhhbGYgZnJlZSAqLworCXN0cnVjdCBnYl90X21hcCAqY2hubF9tYXA7CS8qIENoYW5uZWwgYWxsb2NhdGlvbiBiaXQgbWFwICovCisJc3RydWN0IGdiX3RfbWFwICpkbWFfY2hubF9tYXA7CS8qIERNQSBDaGFubmVsIGFsbG9jYXRpb24gYml0IG1hcCAqLworCXN0cnVjdCBnYl90X21hcCAqemNfY2hubF9tYXA7CS8qIFplcm8tQ29weSBDaGFubmVsIGFsbG9jIGJpdCBtYXAgKi8KKwlzdHJ1Y3QgbnRmeV9vYmplY3QgKm50Znlfb2JqOwkvKiBNYW5hZ2VzIHJlZ2lzdGVyZWQgbm90aWZpY2F0aW9ucyAqLworCXN0cnVjdCBtdXRleCBub2RlX21ncl9sb2NrOwkvKiBGb3IgY3JpdGljYWwgc2VjdGlvbnMgKi8KKwl1MzIgdWxfZnhuX2FkZHJzW05VTVJNU0ZYTlNdOwkvKiBSTVMgZnVuY3Rpb24gYWRkcmVzc2VzICovCisJc3RydWN0IG1zZ19tZ3IgKm1zZ19tZ3Jfb2JqOworCisJLyogUHJvY2Vzc29yIHByb3BlcnRpZXMgbmVlZGVkIGJ5IE5vZGUgRGlzcGF0Y2hlciAqLworCXUzMiB1bF9udW1fY2hubHM7CS8qIFRvdGFsIG51bWJlciBvZiBjaGFubmVscyAqLworCXUzMiB1bF9jaG5sX29mZnNldDsJLyogT2Zmc2V0IG9mIGNobmwgaWRzIHJzdmQgZm9yIFJNUyAqLworCXUzMiB1bF9jaG5sX2J1Zl9zaXplOwkvKiBCdWZmZXIgc2l6ZSBmb3IgZGF0YSB0byBSTVMgKi8KKwlpbnQgcHJvY19mYW1pbHk7CS8qIGVnLCA1MDAwICovCisJaW50IHByb2NfdHlwZTsJCS8qIGVnLCA1NTEwICovCisJdTMyIHVkc3Bfd29yZF9zaXplOwkvKiBTaXplIG9mIERTUCB3b3JkIG9uIGhvc3QgYnl0ZXMgKi8KKwl1MzIgdWRzcF9kYXRhX21hdV9zaXplOwkvKiBTaXplIG9mIERTUCBkYXRhIE1BVSAqLworCXUzMiB1ZHNwX21hdV9zaXplOwkvKiBTaXplIG9mIE1BVSAqLworCXMzMiBtaW5fcHJpOwkJLyogTWluaW11bSBydW50aW1lIHByaW9yaXR5IGZvciBub2RlICovCisJczMyIG1heF9wcmk7CQkvKiBNYXhpbXVtIHJ1bnRpbWUgcHJpb3JpdHkgZm9yIG5vZGUgKi8KKworCXN0cnVjdCBzdHJtX21nciAqc3RybV9tZ3Jfb2JqOwkvKiBTVFJNIG1hbmFnZXIgKi8KKworCS8qIExvYWRlciBwcm9wZXJ0aWVzICovCisJc3RydWN0IG5sZHJfb2JqZWN0ICpubGRyX29iajsJLyogSGFuZGxlIHRvIGxvYWRlciAqLworCXN0cnVjdCBub2RlX2xkcl9meG5zIG5sZHJfZnhuczsJLyogSGFuZGxlIHRvIGxvYWRlciBmdW5jdGlvbnMgKi8KKwlib29sIGxvYWRlcl9pbml0OwkvKiBMb2FkZXIgSW5pdCBmdW5jdGlvbiBzdWNjZWVkZWQ/ICovCit9OworCisvKgorICogID09PT09PT09IGNvbm5lY3R0eXBlID09PT09PT09CisgKi8KK2VudW0gY29ubmVjdHR5cGUgeworCU5PVENPTk5FQ1RFRCA9IDAsCisJTk9ERUNPTk5FQ1QsCisJSE9TVENPTk5FQ1QsCisJREVWSUNFQ09OTkVDVCwKK307CisKKy8qCisgKiAgPT09PT09PT0gc3RyZWFtX2NobmwgPT09PT09PT0KKyAqLworc3RydWN0IHN0cmVhbV9jaG5sIHsKKwllbnVtIGNvbm5lY3R0eXBlIHR5cGU7CS8qIFR5cGUgb2Ygc3RyZWFtIGNvbm5lY3Rpb24gKi8KKwl1MzIgZGV2X2lkOwkJLyogcGlwZSBvciBjaGFubmVsIGlkICovCit9OworCisvKgorICogID09PT09PT09IG5vZGVfb2JqZWN0ID09PT09PT09CisgKi8KK3N0cnVjdCBub2RlX29iamVjdCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0X2VsZW07CisJc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3I7CS8qIFRoZSBtYW5hZ2VyIG9mIHRoaXMgbm9kZSAqLworCXN0cnVjdCBwcm9jX29iamVjdCAqaHByb2Nlc3NvcjsJLyogQmFjayBwb2ludGVyIHRvIHByb2Nlc3NvciAqLworCXN0cnVjdCBkc3BfdXVpZCBub2RlX3V1aWQ7CS8qIE5vZGUncyBJRCAqLworCXMzMiBwcmlvOwkJLyogTm9kZSdzIGN1cnJlbnQgcHJpb3JpdHkgKi8KKwl1MzIgdXRpbWVvdXQ7CQkvKiBUaW1lb3V0IGZvciBibG9ja2luZyBOT0RFIGNhbGxzICovCisJdTMyIGhlYXBfc2l6ZTsJCS8qIEhlYXAgU2l6ZSAqLworCXUzMiB1ZHNwX2hlYXBfdmlydF9hZGRyOwkvKiBIZWFwIFNpemUgKi8KKwl1MzIgdWdwcF9oZWFwX3ZpcnRfYWRkcjsJLyogSGVhcCBTaXplICovCisJZW51bSBub2RlX3R5cGUgbnR5cGU7CS8qIFR5cGUgb2Ygbm9kZTogbWVzc2FnZSwgdGFzaywgZXRjICovCisJZW51bSBub2RlX3N0YXRlIG5vZGVfc3RhdGU7CS8qIE5PREVfQUxMT0NBVEVELCBOT0RFX0NSRUFURUQsIC4uLiAqLworCXUzMiBudW1faW5wdXRzOwkJLyogQ3VycmVudCBudW1iZXIgb2YgaW5wdXRzICovCisJdTMyIG51bV9vdXRwdXRzOwkvKiBDdXJyZW50IG51bWJlciBvZiBvdXRwdXRzICovCisJdTMyIG1heF9pbnB1dF9pbmRleDsJLyogQ3VycmVudCBtYXggaW5wdXQgc3RyZWFtIGluZGV4ICovCisJdTMyIG1heF9vdXRwdXRfaW5kZXg7CS8qIEN1cnJlbnQgbWF4IG91dHB1dCBzdHJlYW0gaW5kZXggKi8KKwlzdHJ1Y3Qgc3RyZWFtX2NobmwgKmlucHV0czsJLyogTm9kZSdzIGlucHV0IHN0cmVhbXMgKi8KKwlzdHJ1Y3Qgc3RyZWFtX2NobmwgKm91dHB1dHM7CS8qIE5vZGUncyBvdXRwdXQgc3RyZWFtcyAqLworCXN0cnVjdCBub2RlX2NyZWF0ZWFyZ3MgY3JlYXRlX2FyZ3M7CS8qIEFyZ3MgZm9yIG5vZGUgY3JlYXRlIGZ1bmMgKi8KKwlub2RlZW52IG5vZGVfZW52OwkvKiBFbnZpcm9ubWVudCByZXR1cm5lZCBieSBSTVMgKi8KKwlzdHJ1Y3QgZGNkX2dlbmVyaWNvYmogZGNkX3Byb3BzOwkvKiBOb2RlIHByb3BlcnRpZXMgZnJvbSBEQ0QgKi8KKwlzdHJ1Y3QgZHNwX2NiZGF0YSAqcGFyZ3M7CS8qIE9wdGlvbmFsIGFyZ3MgdG8gcGFzcyB0byBub2RlICovCisJc3RydWN0IG50Znlfb2JqZWN0ICpudGZ5X29iajsJLyogTWFuYWdlcyByZWdpc3RlcmVkIG5vdGlmaWNhdGlvbnMgKi8KKwljaGFyICpwc3RyX2Rldl9uYW1lOwkvKiBkZXZpY2UgbmFtZSwgaWYgZGV2aWNlIG5vZGUgKi8KKwlzdHJ1Y3Qgc3luY19vYmplY3QgKnN5bmNfZG9uZTsJLyogU3luY2hyb25pemUgbm9kZV90ZXJtaW5hdGUgKi8KKwlzMzIgZXhpdF9zdGF0dXM7CS8qIGV4ZWN1dGUgZnVuY3Rpb24gcmV0dXJuIHN0YXR1cyAqLworCisJLyogSW5mb3JtYXRpb24gbmVlZGVkIGZvciBub2RlX2dldF9hdHRyKCkgKi8KKwl2b2lkICpkZXZpY2Vfb3duZXI7CS8qIElmIGRldiBub2RlLCB0YXNrIHRoYXQgb3ducyBpdCAqLworCXUzMiBudW1fZ3BwX2lucHV0czsJLyogQ3VycmVudCAjIG9mIGZyb20gR1BQIHN0cmVhbXMgKi8KKwl1MzIgbnVtX2dwcF9vdXRwdXRzOwkvKiBDdXJyZW50ICMgb2YgdG8gR1BQIHN0cmVhbXMgKi8KKwkvKiBDdXJyZW50IHN0cmVhbSBjb25uZWN0aW9ucyAqLworCXN0cnVjdCBkc3Bfc3RyZWFtY29ubmVjdCAqc3RyZWFtX2Nvbm5lY3Q7CisKKwkvKiBNZXNzYWdlIHF1ZXVlICovCisJc3RydWN0IG1zZ19xdWV1ZSAqbXNnX3F1ZXVlX29iajsKKworCS8qIFRoZXNlIGZpZWxkcyB1c2VkIGZvciBTTSBtZXNzYWdpbmcgKi8KKwlzdHJ1Y3QgY21tX3hsYXRvcm9iamVjdCAqeGxhdG9yOwkvKiBOb2RlJ3MgU00gYWRkciB0cmFuc2xhdG9yICovCisKKwkvKiBIYW5kbGUgdG8gcGFzcyB0byBkeW5hbWljIGxvYWRlciAqLworCXN0cnVjdCBubGRyX25vZGVvYmplY3QgKm5sZHJfbm9kZV9vYmo7CisJYm9vbCBsb2FkZWQ7CQkvKiBDb2RlIGlzIChkeW5hbWljYWxseSkgbG9hZGVkICovCisJYm9vbCBwaGFzZV9zcGxpdDsJLyogUGhhc2VzIHNwbGl0IGluIG1hbnkgbGlicyBvciBvdmx5ICovCisKK307CisKKy8qIERlZmF1bHQgYnVmZmVyIGF0dHJpYnV0ZXMgKi8KK3N0YXRpYyBzdHJ1Y3QgZHNwX2J1ZmZlcmF0dHIgbm9kZV9kZmx0YnVmYXR0cnMgPSB7CisJMCwJCQkvKiBjYl9zdHJ1Y3QgKi8KKwkxLAkJCS8qIHNlZ21lbnRfaWQgKi8KKwkwLAkJCS8qIGJ1Zl9hbGlnbm1lbnQgKi8KK307CisKK3N0YXRpYyB2b2lkIGRlbGV0ZV9ub2RlKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQlzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0KTsKK3N0YXRpYyB2b2lkIGRlbGV0ZV9ub2RlX21ncihzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21ncik7CitzdGF0aWMgdm9pZCBmaWxsX3N0cmVhbV9jb25uZWN0KHN0cnVjdCBub2RlX29iamVjdCAqbm9kZTEsCisJCQkJc3RydWN0IG5vZGVfb2JqZWN0ICpub2RlMiwgdTMyIHN0cmVhbTEsCisJCQkJdTMyIHN0cmVhbTIpOworc3RhdGljIHZvaWQgZmlsbF9zdHJlYW1fZGVmKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQkgICAgc3RydWN0IG5vZGVfc3RybWRlZiAqcHN0cm1fZGVmLAorCQkJICAgIHN0cnVjdCBkc3Bfc3RybWF0dHIgKnBhdHRycyk7CitzdGF0aWMgdm9pZCBmcmVlX3N0cmVhbShzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21nciwgc3RydWN0IHN0cmVhbV9jaG5sIHN0cmVhbSk7CitzdGF0aWMgaW50IGdldF9meG5fYWRkcmVzcyhzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLCB1MzIgKiBmeG5fYWRkciwKKwkJCQkgIHUzMiBwaGFzZSk7CitzdGF0aWMgaW50IGdldF9ub2RlX3Byb3BzKHN0cnVjdCBkY2RfbWFuYWdlciAqaGRjZF9tZ3IsCisJCQkJIHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQkJIGNvbnN0IHN0cnVjdCBkc3BfdXVpZCAqbm9kZV91dWlkLAorCQkJCSBzdHJ1Y3QgZGNkX2dlbmVyaWNvYmogKmRjZF9wcm9wKTsKK3N0YXRpYyBpbnQgZ2V0X3Byb2NfcHJvcHMoc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3IsCisJCQkJIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaik7CitzdGF0aWMgaW50IGdldF9ybXNfZnhucyhzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21ncik7CitzdGF0aWMgdTMyIG92bHkodm9pZCAqcHJpdl9yZWYsIHUzMiBkc3BfcnVuX2FkZHIsIHUzMiBkc3BfbG9hZF9hZGRyLAorCQl1MzIgdWxfbnVtX2J5dGVzLCB1MzIgbWVtX3NwYWNlKTsKK3N0YXRpYyB1MzIgbWVtX3dyaXRlKHZvaWQgKnByaXZfcmVmLCB1MzIgZHNwX2FkZCwgdm9pZCAqcGJ1ZiwKKwkJICAgICB1MzIgdWxfbnVtX2J5dGVzLCB1MzIgbWVtX3NwYWNlKTsKKworc3RhdGljIHUzMiByZWZzOwkJLyogbW9kdWxlIHJlZmVyZW5jZSBjb3VudCAqLworCisvKiBEeW5hbWljIGxvYWRlciBmdW5jdGlvbnMuICovCitzdGF0aWMgc3RydWN0IG5vZGVfbGRyX2Z4bnMgbmxkcl9meG5zID0geworCW5sZHJfYWxsb2NhdGUsCisJbmxkcl9jcmVhdGUsCisJbmxkcl9kZWxldGUsCisJbmxkcl9leGl0LAorCW5sZHJfZ2V0X2Z4bl9hZGRyLAorCW5sZHJfaW5pdCwKKwlubGRyX2xvYWQsCisJbmxkcl91bmxvYWQsCit9OworCitlbnVtIG5vZGVfc3RhdGUgbm9kZV9nZXRfc3RhdGUodm9pZCAqaG5vZGUpCit7CisJc3RydWN0IG5vZGVfb2JqZWN0ICpwbm9kZSA9IChzdHJ1Y3Qgbm9kZV9vYmplY3QgKilobm9kZTsKKwlpZiAoIXBub2RlKQorCQlyZXR1cm4gLTE7CisJZWxzZQorCQlyZXR1cm4gcG5vZGUtPm5vZGVfc3RhdGU7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9hbGxvY2F0ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEFsbG9jYXRlIEdQUCByZXNvdXJjZXMgdG8gbWFuYWdlIGEgbm9kZSBvbiB0aGUgRFNQLgorICovCitpbnQgbm9kZV9hbGxvY2F0ZShzdHJ1Y3QgcHJvY19vYmplY3QgKmhwcm9jZXNzb3IsCisJCQljb25zdCBzdHJ1Y3QgZHNwX3V1aWQgKm5vZGVfdXVpZCwKKwkJCWNvbnN0IHN0cnVjdCBkc3BfY2JkYXRhICpwYXJncywKKwkJCWNvbnN0IHN0cnVjdCBkc3Bfbm9kZWF0dHJpbiAqYXR0cl9pbiwKKwkJCXN0cnVjdCBub2RlX3Jlc19vYmplY3QgKipub2RlcmVzLAorCQkJc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCkKK3sKKwlzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21ncjsKKwlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmo7CisJc3RydWN0IG5vZGVfb2JqZWN0ICpwbm9kZSA9IE5VTEw7CisJZW51bSBub2RlX3R5cGUgbm9kZV90eXBlID0gTk9ERV9UQVNLOworCXN0cnVjdCBub2RlX21zZ2FyZ3MgKnBtc2dfYXJnczsKKwlzdHJ1Y3Qgbm9kZV90YXNrYXJncyAqcHRhc2tfYXJnczsKKwl1MzIgbnVtX3N0cmVhbXM7CisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGNtbV9vYmplY3QgKmhjbW1fbWdyID0gTlVMTDsJLyogU2hhcmVkIG1lbW9yeSBtYW5hZ2VyIGhuZGwgKi8KKwl1MzIgcHJvY19pZDsKKwl1MzIgcHVsX3ZhbHVlOworCXUzMiBkeW5leHRfYmFzZTsKKwl1MzIgb2ZmX3NldCA9IDA7CisJdTMyIHVsX3N0YWNrX3NlZ19hZGRyLCB1bF9zdGFja19zZWdfdmFsOworCXUzMiB1bF9ncHBfbWVtX2Jhc2U7CisJc3RydWN0IGNmZ19ob3N0cmVzICpob3N0X3JlczsKKwlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpwYnJpZGdlX2NvbnRleHQ7CisJdTMyIG1hcHBlZF9hZGRyID0gMDsKKwl1MzIgbWFwX2F0dHJzID0gMHgwOworCXN0cnVjdCBkc3BfcHJvY2Vzc29yc3RhdGUgcHJvY19zdGF0ZTsKKyNpZmRlZiBEU1BfRE1NX0RFQlVHCisJc3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3I7CisJc3RydWN0IHByb2Nfb2JqZWN0ICpwX3Byb2Nfb2JqZWN0ID0gKHN0cnVjdCBwcm9jX29iamVjdCAqKWhwcm9jZXNzb3I7CisjZW5kaWYKKworCXZvaWQgKm5vZGVfcmVzOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGhwcm9jZXNzb3IgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUobm9kZXJlcyAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShub2RlX3V1aWQgIT0gTlVMTCk7CisKKwkqbm9kZXJlcyA9IE5VTEw7CisKKwlzdGF0dXMgPSBwcm9jX2dldF9wcm9jZXNzb3JfaWQoaHByb2Nlc3NvciwgJnByb2NfaWQpOworCisJaWYgKHByb2NfaWQgIT0gRFNQX1VOSVQpCisJCWdvdG8gZnVuY19lbmQ7CisKKwlzdGF0dXMgPSBwcm9jX2dldF9kZXZfb2JqZWN0KGhwcm9jZXNzb3IsICZoZGV2X29iaik7CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RhdHVzID0gZGV2X2dldF9ub2RlX21hbmFnZXIoaGRldl9vYmosICZobm9kZV9tZ3IpOworCQlpZiAoaG5vZGVfbWdyID09IE5VTEwpCisJCQlzdGF0dXMgPSAtRVBFUk07CisKKwl9CisKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJc3RhdHVzID0gZGV2X2dldF9icmlkZ2VfY29udGV4dChoZGV2X29iaiwgJnBicmlkZ2VfY29udGV4dCk7CisJaWYgKCFwYnJpZGdlX2NvbnRleHQpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwlzdGF0dXMgPSBwcm9jX2dldF9zdGF0ZShocHJvY2Vzc29yLCAmcHJvY19zdGF0ZSwKKwkJCQlzaXplb2Yoc3RydWN0IGRzcF9wcm9jZXNzb3JzdGF0ZSkpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisJLyogSWYgcHJvY2Vzc29yIGlzIGluIGVycm9yIHN0YXRlIHRoZW4gZG9uJ3QgYXR0ZW1wdAorCSAgIHRvIHNlbmQgdGhlIG1lc3NhZ2UgKi8KKwlpZiAocHJvY19zdGF0ZS5wcm9jX3N0YXRlID09IFBST0NfRVJST1IpIHsKKwkJc3RhdHVzID0gLUVQRVJNOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCS8qIEFzc3VtaW5nIHRoYXQgMCBpcyBub3QgYSB2YWxpZCBmdW5jdGlvbiBhZGRyZXNzICovCisJaWYgKGhub2RlX21nci0+dWxfZnhuX2FkZHJzWzBdID09IDApIHsKKwkJLyogTm8gUk1TIG9uIHRhcmdldCAtIHdlIGN1cnJlbnRseSBjYW4ndCBoYW5kbGUgdGhpcyAqLworCQlwcl9lcnIoIiVzOiBGYWlsZWQsIG5vIFJNUyBpbiBiYXNlIGltYWdlXG4iLCBfX2Z1bmNfXyk7CisJCXN0YXR1cyA9IC1FUEVSTTsKKwl9IGVsc2UgeworCQkvKiBWYWxpZGF0ZSBhdHRyX2luIGZpZWxkcywgaWYgbm9uLU5VTEwgKi8KKwkJaWYgKGF0dHJfaW4pIHsKKwkJCS8qIENoZWNrIGlmIGF0dHJfaW4tPnByaW8gaXMgd2l0aGluIHJhbmdlICovCisJCQlpZiAoYXR0cl9pbi0+cHJpbyA8IGhub2RlX21nci0+bWluX3ByaSB8fAorCQkJICAgIGF0dHJfaW4tPnByaW8gPiBobm9kZV9tZ3ItPm1heF9wcmkpCisJCQkJc3RhdHVzID0gLUVET007CisJCX0KKwl9CisJLyogQWxsb2NhdGUgbm9kZSBvYmplY3QgYW5kIGZpbGwgaW4gKi8KKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJcG5vZGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgbm9kZV9vYmplY3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAocG5vZGUgPT0gTlVMTCkgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlwbm9kZS0+aG5vZGVfbWdyID0gaG5vZGVfbWdyOworCS8qIFRoaXMgY3JpdGljYWwgc2VjdGlvbiBwcm90ZWN0cyBnZXRfbm9kZV9wcm9wcyAqLworCW11dGV4X2xvY2soJmhub2RlX21nci0+bm9kZV9tZ3JfbG9jayk7CisKKwkvKiBHZXQgZHNwX25kYnByb3BzIGZyb20gbm9kZSBkYXRhYmFzZSAqLworCXN0YXR1cyA9IGdldF9ub2RlX3Byb3BzKGhub2RlX21nci0+aGRjZF9tZ3IsIHBub2RlLCBub2RlX3V1aWQsCisJCQkJJihwbm9kZS0+ZGNkX3Byb3BzKSk7CisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2NvbnQ7CisKKwlwbm9kZS0+bm9kZV91dWlkID0gKm5vZGVfdXVpZDsKKwlwbm9kZS0+aHByb2Nlc3NvciA9IGhwcm9jZXNzb3I7CisJcG5vZGUtPm50eXBlID0gcG5vZGUtPmRjZF9wcm9wcy5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMubnR5cGU7CisJcG5vZGUtPnV0aW1lb3V0ID0gcG5vZGUtPmRjZF9wcm9wcy5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMudXRpbWVvdXQ7CisJcG5vZGUtPnByaW8gPSBwbm9kZS0+ZGNkX3Byb3BzLm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy5wcmlvOworCisJLyogQ3VycmVudGx5IG9ubHkgQzY0IERTUCBidWlsZHMgc3VwcG9ydCBOb2RlIER5bmFtaWMgKiBoZWFwcyAqLworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3Igbm9kZSBoZWFwICovCisJcG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS50YXNrX2FyZ19vYmouaGVhcF9zaXplID0gMDsKKwlwbm9kZS0+Y3JlYXRlX2FyZ3MuYXNhLnRhc2tfYXJnX29iai51ZHNwX2hlYXBfYWRkciA9IDA7CisJcG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS50YXNrX2FyZ19vYmoudWRzcF9oZWFwX3Jlc19hZGRyID0gMDsKKwlwbm9kZS0+Y3JlYXRlX2FyZ3MuYXNhLnRhc2tfYXJnX29iai51Z3BwX2hlYXBfYWRkciA9IDA7CisJaWYgKCFhdHRyX2luKQorCQlnb3RvIGZ1bmNfY29udDsKKworCS8qIENoZWNrIGlmIHdlIGhhdmUgYSB1c2VyIGFsbG9jYXRlZCBub2RlIGhlYXAgKi8KKwlpZiAoIShhdHRyX2luLT5wZ3BwX3ZpcnRfYWRkcikpCisJCWdvdG8gZnVuY19jb250OworCisJLyogY2hlY2sgZm9yIHBhZ2UgYWxpZ25lZCBIZWFwIHNpemUgKi8KKwlpZiAoKChhdHRyX2luLT5oZWFwX3NpemUpICYgKFBHX1NJWkU0SyAtIDEpKSkgeworCQlwcl9lcnIoIiVzOiBub2RlIGhlYXAgc2l6ZSBub3QgYWxpZ25lZCB0byA0Sywgc2l6ZSA9IDB4JXggXG4iLAorCQkgICAgICAgX19mdW5jX18sIGF0dHJfaW4tPmhlYXBfc2l6ZSk7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJcG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS50YXNrX2FyZ19vYmouaGVhcF9zaXplID0KKwkJICAgIGF0dHJfaW4tPmhlYXBfc2l6ZTsKKwkJcG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS50YXNrX2FyZ19vYmoudWdwcF9oZWFwX2FkZHIgPQorCQkgICAgKHUzMikgYXR0cl9pbi0+cGdwcF92aXJ0X2FkZHI7CisJfQorCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19jb250OworCisJc3RhdHVzID0gcHJvY19yZXNlcnZlX21lbW9yeShocHJvY2Vzc29yLAorCQkJCSAgICAgcG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS50YXNrX2FyZ19vYmouCisJCQkJICAgICBoZWFwX3NpemUgKyBQQUdFX1NJWkUsCisJCQkJICAgICAodm9pZCAqKikmKHBub2RlLT5jcmVhdGVfYXJncy5hc2EuCisJCQkJCXRhc2tfYXJnX29iai51ZHNwX2hlYXBfcmVzX2FkZHIpLAorCQkJCSAgICAgcHJfY3R4dCk7CisJaWYgKHN0YXR1cykgeworCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gcmVzZXJ2ZSBtZW1vcnkgZm9yIGhlYXA6IDB4JXhcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZ290byBmdW5jX2NvbnQ7CisJfQorI2lmZGVmIERTUF9ETU1fREVCVUcKKwlzdGF0dXMgPSBkbW1fZ2V0X2hhbmRsZShwX3Byb2Nfb2JqZWN0LCAmZG1tX21ncik7CisJaWYgKCFkbW1fbWdyKSB7CisJCXN0YXR1cyA9IERTUF9FSEFORExFOworCQlnb3RvIGZ1bmNfY29udDsKKwl9CisKKwlkbW1fbWVtX21hcF9kdW1wKGRtbV9tZ3IpOworI2VuZGlmCisKKwltYXBfYXR0cnMgfD0gRFNQX01BUExJVFRMRUVORElBTjsKKwltYXBfYXR0cnMgfD0gRFNQX01BUEVMRU1TSVpFMzI7CisJbWFwX2F0dHJzIHw9IERTUF9NQVBWSVJUVUFMQUREUjsKKwlzdGF0dXMgPSBwcm9jX21hcChocHJvY2Vzc29yLCAodm9pZCAqKWF0dHJfaW4tPnBncHBfdmlydF9hZGRyLAorCQkJICBwbm9kZS0+Y3JlYXRlX2FyZ3MuYXNhLnRhc2tfYXJnX29iai5oZWFwX3NpemUsCisJCQkgICh2b2lkICopcG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS50YXNrX2FyZ19vYmouCisJCQkgIHVkc3BfaGVhcF9yZXNfYWRkciwgKHZvaWQgKiopJm1hcHBlZF9hZGRyLCBtYXBfYXR0cnMsCisJCQkgIHByX2N0eHQpOworCWlmIChzdGF0dXMpCisJCXByX2VycigiJXM6IEZhaWxlZCB0byBtYXAgbWVtb3J5IGZvciBIZWFwOiAweCV4XG4iLAorCQkgICAgICAgX19mdW5jX18sIHN0YXR1cyk7CisJZWxzZQorCQlwbm9kZS0+Y3JlYXRlX2FyZ3MuYXNhLnRhc2tfYXJnX29iai51ZHNwX2hlYXBfYWRkciA9CisJCSAgICAodTMyKSBtYXBwZWRfYWRkcjsKKworZnVuY19jb250OgorCW11dGV4X3VubG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKKwlpZiAoYXR0cl9pbiAhPSBOVUxMKSB7CisJCS8qIE92ZXJyaWRlcyBvZiBOQkQgcHJvcGVydGllcyAqLworCQlwbm9kZS0+dXRpbWVvdXQgPSBhdHRyX2luLT51dGltZW91dDsKKwkJcG5vZGUtPnByaW8gPSBhdHRyX2luLT5wcmlvOworCX0KKwkvKiBDcmVhdGUgb2JqZWN0IHRvIG1hbmFnZSBub3RpZmljYXRpb25zICovCisJaWYgKCFzdGF0dXMpIHsKKwkJcG5vZGUtPm50Znlfb2JqID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG50Znlfb2JqZWN0KSwKKwkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKHBub2RlLT5udGZ5X29iaikKKwkJCW50ZnlfaW5pdChwbm9kZS0+bnRmeV9vYmopOworCQllbHNlCisJCQlzdGF0dXMgPSAtRU5PTUVNOworCX0KKworCWlmICghc3RhdHVzKSB7CisJCW5vZGVfdHlwZSA9IG5vZGVfZ2V0X3R5cGUocG5vZGUpOworCQkvKiAgQWxsb2NhdGUgZHNwX3N0cmVhbWNvbm5lY3QgYXJyYXkgZm9yIGRldmljZSwgdGFzaywgYW5kCisJCSAqICBkYWlzIHNvY2tldCBub2Rlcy4gKi8KKwkJaWYgKG5vZGVfdHlwZSAhPSBOT0RFX01FU1NBR0UpIHsKKwkJCW51bV9zdHJlYW1zID0gTUFYX0lOUFVUUyhwbm9kZSkgKyBNQVhfT1VUUFVUUyhwbm9kZSk7CisJCQlwbm9kZS0+c3RyZWFtX2Nvbm5lY3QgPSBremFsbG9jKG51bV9zdHJlYW1zICoKKwkJCQkJc2l6ZW9mKHN0cnVjdCBkc3Bfc3RyZWFtY29ubmVjdCksCisJCQkJCUdGUF9LRVJORUwpOworCQkJaWYgKG51bV9zdHJlYW1zID4gMCAmJiBwbm9kZS0+c3RyZWFtX2Nvbm5lY3QgPT0gTlVMTCkKKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCisJCX0KKwkJaWYgKCFzdGF0dXMgJiYgKG5vZGVfdHlwZSA9PSBOT0RFX1RBU0sgfHwKKwkJCQkJICAgICAgbm9kZV90eXBlID09IE5PREVfREFJU1NPQ0tFVCkpIHsKKwkJCS8qIEFsbG9jYXRlIGFycmF5cyBmb3IgbWFpbnRhaW5pZyBzdHJlYW0gY29ubmVjdGlvbnMgKi8KKwkJCXBub2RlLT5pbnB1dHMgPSBremFsbG9jKE1BWF9JTlBVVFMocG5vZGUpICoKKwkJCQkJc2l6ZW9mKHN0cnVjdCBzdHJlYW1fY2hubCksIEdGUF9LRVJORUwpOworCQkJcG5vZGUtPm91dHB1dHMgPSBremFsbG9jKE1BWF9PVVRQVVRTKHBub2RlKSAqCisJCQkJCXNpemVvZihzdHJ1Y3Qgc3RyZWFtX2NobmwpLCBHRlBfS0VSTkVMKTsKKwkJCXB0YXNrX2FyZ3MgPSAmKHBub2RlLT5jcmVhdGVfYXJncy5hc2EudGFza19hcmdfb2JqKTsKKwkJCXB0YXNrX2FyZ3MtPnN0cm1faW5fZGVmID0ga3phbGxvYyhNQVhfSU5QVVRTKHBub2RlKSAqCisJCQkJCQlzaXplb2Yoc3RydWN0IG5vZGVfc3RybWRlZiksCisJCQkJCQlHRlBfS0VSTkVMKTsKKwkJCXB0YXNrX2FyZ3MtPnN0cm1fb3V0X2RlZiA9IGt6YWxsb2MoTUFYX09VVFBVVFMocG5vZGUpICoKKwkJCQkJCXNpemVvZihzdHJ1Y3Qgbm9kZV9zdHJtZGVmKSwKKwkJCQkJCUdGUF9LRVJORUwpOworCQkJaWYgKChNQVhfSU5QVVRTKHBub2RlKSA+IDAgJiYgKHBub2RlLT5pbnB1dHMgPT0gTlVMTCB8fAorCQkJCQkJICAgICAgIHB0YXNrX2FyZ3MtPnN0cm1faW5fZGVmCisJCQkJCQkgICAgICAgPT0gTlVMTCkpCisJCQkgICAgfHwgKE1BWF9PVVRQVVRTKHBub2RlKSA+IDAKKwkJCQkmJiAocG5vZGUtPm91dHB1dHMgPT0gTlVMTAorCQkJCSAgICB8fCBwdGFza19hcmdzLT5zdHJtX291dF9kZWYgPT0gTlVMTCkpKQorCQkJCXN0YXR1cyA9IC1FTk9NRU07CisJCX0KKwl9CisJaWYgKCFzdGF0dXMgJiYgKG5vZGVfdHlwZSAhPSBOT0RFX0RFVklDRSkpIHsKKwkJLyogQ3JlYXRlIGFuIGV2ZW50IHRoYXQgd2lsbCBiZSBwb3N0ZWQgd2hlbiBSTVNfRVhJVCBpcworCQkgKiByZWNlaXZlZC4gKi8KKwkJcG5vZGUtPnN5bmNfZG9uZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzeW5jX29iamVjdCksCisJCQkJCQkJCUdGUF9LRVJORUwpOworCQlpZiAocG5vZGUtPnN5bmNfZG9uZSkKKwkJCXN5bmNfaW5pdF9ldmVudChwbm9kZS0+c3luY19kb25lKTsKKwkJZWxzZQorCQkJc3RhdHVzID0gLUVOT01FTTsKKworCQlpZiAoIXN0YXR1cykgeworCQkJLypHZXQgdGhlIHNoYXJlZCBtZW0gbWdyIGZvciB0aGlzIG5vZGVzIGRldiBvYmplY3QgKi8KKwkJCXN0YXR1cyA9IGNtbV9nZXRfaGFuZGxlKGhwcm9jZXNzb3IsICZoY21tX21ncik7CisJCQlpZiAoIXN0YXR1cykgeworCQkJCS8qIEFsbG9jYXRlIGEgU00gYWRkciB0cmFuc2xhdG9yIGZvciB0aGlzIG5vZGUKKwkJCQkgKiB3LyBkZWZsdCBhdHRyICovCisJCQkJc3RhdHVzID0gY21tX3hsYXRvcl9jcmVhdGUoJnBub2RlLT54bGF0b3IsCisJCQkJCQkJICAgaGNtbV9tZ3IsIE5VTEwpOworCQkJfQorCQl9CisJCWlmICghc3RhdHVzKSB7CisJCQkvKiBGaWxsIGluIG1lc3NhZ2UgYXJncyAqLworCQkJaWYgKChwYXJncyAhPSBOVUxMKSAmJiAocGFyZ3MtPmNiX2RhdGEgPiAwKSkgeworCQkJCXBtc2dfYXJncyA9CisJCQkJICAgICYocG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS5ub2RlX21zZ19hcmdzKTsKKwkJCQlwbXNnX2FyZ3MtPnBkYXRhID0ga3phbGxvYyhwYXJncy0+Y2JfZGF0YSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCQkJaWYgKHBtc2dfYXJncy0+cGRhdGEgPT0gTlVMTCkgeworCQkJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJCX0gZWxzZSB7CisJCQkJCXBtc2dfYXJncy0+YXJnX2xlbmd0aCA9IHBhcmdzLT5jYl9kYXRhOworCQkJCQltZW1jcHkocG1zZ19hcmdzLT5wZGF0YSwKKwkJCQkJICAgICAgIHBhcmdzLT5ub2RlX2RhdGEsCisJCQkJCSAgICAgICBwYXJncy0+Y2JfZGF0YSk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJaWYgKCFzdGF0dXMgJiYgbm9kZV90eXBlICE9IE5PREVfREVWSUNFKSB7CisJCS8qIENyZWF0ZSBhIG1lc3NhZ2UgcXVldWUgZm9yIHRoaXMgbm9kZSAqLworCQlpbnRmX2Z4bnMgPSBobm9kZV9tZ3ItPmludGZfZnhuczsKKwkJc3RhdHVzID0KKwkJICAgICgqaW50Zl9meG5zLT5wZm5fbXNnX2NyZWF0ZV9xdWV1ZSkgKGhub2RlX21nci0+bXNnX21ncl9vYmosCisJCQkJCQkJJnBub2RlLT5tc2dfcXVldWVfb2JqLAorCQkJCQkJCTAsCisJCQkJCQkJcG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS4KKwkJCQkJCQlub2RlX21zZ19hcmdzLm1heF9tc2dzLAorCQkJCQkJCXBub2RlKTsKKwl9CisKKwlpZiAoIXN0YXR1cykgeworCQkvKiBDcmVhdGUgb2JqZWN0IGZvciBkeW5hbWljIGxvYWRpbmcgKi8KKworCQlzdGF0dXMgPSBobm9kZV9tZ3ItPm5sZHJfZnhucy5wZm5fYWxsb2NhdGUoaG5vZGVfbWdyLT5ubGRyX29iaiwKKwkJCQkJCQkgICAodm9pZCAqKXBub2RlLAorCQkJCQkJCSAgICZwbm9kZS0+ZGNkX3Byb3BzLgorCQkJCQkJCSAgIG9ial9kYXRhLm5vZGVfb2JqLAorCQkJCQkJCSAgICZwbm9kZS0+CisJCQkJCQkJICAgbmxkcl9ub2RlX29iaiwKKwkJCQkJCQkgICAmcG5vZGUtPnBoYXNlX3NwbGl0KTsKKwl9CisKKwkvKiBDb21wYXJlIHZhbHVlIHJlYWQgZnJvbSBOb2RlIFByb3BlcnRpZXMgYW5kIGNoZWNrIGlmIGl0IGlzIHNhbWUgYXMKKwkgKiBTVEFDS1NFR0xBQkVMLCBpZiB5ZXMgcmVhZCB0aGUgQWRkcmVzcyBvZiBTVEFDS1NFR0xBQkVMLCBjYWxjdWxhdGUKKwkgKiBHUFAgQWRkcmVzcywgUmVhZCB0aGUgdmFsdWUgaW4gdGhhdCBhZGRyZXNzIGFuZCBvdmVycmlkZSB0aGUKKwkgKiBzdGFja19zZWcgdmFsdWUgaW4gdGFzayBhcmdzICovCisJaWYgKCFzdGF0dXMgJiYKKwkgICAgKGNoYXIgKilwbm9kZS0+ZGNkX3Byb3BzLm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy4KKwkgICAgc3RhY2tfc2VnX25hbWUgIT0gTlVMTCkgeworCQlpZiAoc3RyY21wKChjaGFyICopCisJCQkgICBwbm9kZS0+ZGNkX3Byb3BzLm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy4KKwkJCSAgIHN0YWNrX3NlZ19uYW1lLCBTVEFDS1NFR0xBQkVMKSA9PSAwKSB7CisJCQlzdGF0dXMgPQorCQkJICAgIGhub2RlX21nci0+bmxkcl9meG5zLgorCQkJICAgIHBmbl9nZXRfZnhuX2FkZHIocG5vZGUtPm5sZHJfbm9kZV9vYmosICJEWU5FWFRfQkVHIiwKKwkJCQkJICAgICAmZHluZXh0X2Jhc2UpOworCQkJaWYgKHN0YXR1cykKKwkJCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gZ2V0IGFkZHIgZm9yIERZTkVYVF9CRUciCisJCQkJICAgICAgICIgc3RhdHVzID0gMHgleFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisKKwkJCXN0YXR1cyA9CisJCQkgICAgaG5vZGVfbWdyLT5ubGRyX2Z4bnMuCisJCQkgICAgcGZuX2dldF9meG5fYWRkcihwbm9kZS0+bmxkcl9ub2RlX29iaiwKKwkJCQkJICAgICAiTDFEU1JBTV9IRUFQIiwgJnB1bF92YWx1ZSk7CisKKwkJCWlmIChzdGF0dXMpCisJCQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGdldCBhZGRyIGZvciBMMURTUkFNX0hFQVAiCisJCQkJICAgICAgICIgc3RhdHVzID0gMHgleFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisKKwkJCWhvc3RfcmVzID0gcGJyaWRnZV9jb250ZXh0LT5yZXNvdXJjZXM7CisJCQlpZiAoIWhvc3RfcmVzKQorCQkJCXN0YXR1cyA9IC1FUEVSTTsKKworCQkJaWYgKHN0YXR1cykgeworCQkJCXByX2VycigiJXM6IEZhaWxlZCB0byBnZXQgaG9zdCByZXNvdXJjZSwgc3RhdHVzIgorCQkJCSAgICAgICAiID0gMHgleFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJCQkJZ290byBmdW5jX2VuZDsKKwkJCX0KKworCQkJdWxfZ3BwX21lbV9iYXNlID0gKHUzMikgaG9zdF9yZXMtPmR3X21lbV9iYXNlWzFdOworCQkJb2ZmX3NldCA9IHB1bF92YWx1ZSAtIGR5bmV4dF9iYXNlOworCQkJdWxfc3RhY2tfc2VnX2FkZHIgPSB1bF9ncHBfbWVtX2Jhc2UgKyBvZmZfc2V0OworCQkJdWxfc3RhY2tfc2VnX3ZhbCA9IHJlYWRsKHVsX3N0YWNrX3NlZ19hZGRyKTsKKworCQkJZGV2X2RiZyhicmlkZ2UsICIlczogU3RhY2tTZWdWYWwgPSAweCV4LCBTdGFja1NlZ0FkZHIgPSIKKwkJCQkiIDB4JXhcbiIsIF9fZnVuY19fLCB1bF9zdGFja19zZWdfdmFsLAorCQkJCXVsX3N0YWNrX3NlZ19hZGRyKTsKKworCQkJcG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS50YXNrX2FyZ19vYmouc3RhY2tfc2VnID0KKwkJCSAgICB1bF9zdGFja19zZWdfdmFsOworCisJCX0KKwl9CisKKwlpZiAoIXN0YXR1cykgeworCQkvKiBBZGQgdGhlIG5vZGUgdG8gdGhlIG5vZGUgbWFuYWdlcidzIGxpc3Qgb2YgYWxsb2NhdGVkCisJCSAqIG5vZGVzLiAqLworCQlsc3RfaW5pdF9lbGVtKChzdHJ1Y3QgbGlzdF9oZWFkICopcG5vZGUpOworCQlOT0RFX1NFVF9TVEFURShwbm9kZSwgTk9ERV9BTExPQ0FURUQpOworCisJCW11dGV4X2xvY2soJmhub2RlX21nci0+bm9kZV9tZ3JfbG9jayk7CisKKwkJbHN0X3B1dF90YWlsKGhub2RlX21nci0+bm9kZV9saXN0LCAoc3RydWN0IGxpc3RfaGVhZCAqKSBwbm9kZSk7CisJCQkrKyhobm9kZV9tZ3ItPm51bV9ub2Rlcyk7CisKKwkJLyogRXhpdCBjcml0aWNhbCBzZWN0aW9uICovCisJCW11dGV4X3VubG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKKworCQkvKiBQcmVzZXQgdGhpcyB0byBhc3N1bWUgcGhhc2VzIGFyZSBzcGxpdAorCQkgKiAoZm9yIG92ZXJsYXkgYW5kIGRsbCkgKi8KKwkJcG5vZGUtPnBoYXNlX3NwbGl0ID0gdHJ1ZTsKKworCQkvKiBOb3RpZnkgYWxsIGNsaWVudHMgcmVnaXN0ZXJlZCBmb3IgRFNQX05PREVTVEFURUNIQU5HRS4gKi8KKwkJcHJvY19ub3RpZnlfYWxsX2NsaWVudHMoaHByb2Nlc3NvciwgRFNQX05PREVTVEFURUNIQU5HRSk7CisJfSBlbHNlIHsKKwkJLyogQ2xlYW51cCAqLworCQlpZiAocG5vZGUpCisJCQlkZWxldGVfbm9kZShwbm9kZSwgcHJfY3R4dCk7CisKKwl9CisKKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPSBkcnZfaW5zZXJ0X25vZGVfcmVzX2VsZW1lbnQocG5vZGUsICZub2RlX3JlcywgcHJfY3R4dCk7CisJCWlmIChzdGF0dXMpIHsKKwkJCWRlbGV0ZV9ub2RlKHBub2RlLCBwcl9jdHh0KTsKKwkJCWdvdG8gZnVuY19lbmQ7CisJCX0KKworCQkqbm9kZXJlcyA9IChzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICopbm9kZV9yZXM7CisJCWRydl9wcm9jX25vZGVfdXBkYXRlX2hlYXBfc3RhdHVzKG5vZGVfcmVzLCB0cnVlKTsKKwkJZHJ2X3Byb2Nfbm9kZV91cGRhdGVfc3RhdHVzKG5vZGVfcmVzLCB0cnVlKTsKKwl9CisJREJDX0VOU1VSRSgoc3RhdHVzICYmICpub2RlcmVzID09IE5VTEwpIHx8ICghc3RhdHVzICYmICpub2RlcmVzKSk7CitmdW5jX2VuZDoKKwlkZXZfZGJnKGJyaWRnZSwgIiVzOiBocHJvY2Vzc29yOiAlcCBwTm9kZUlkOiAlcCBwYXJnczogJXAgYXR0cl9pbjogJXAgIgorCQkibm9kZV9yZXM6ICVwIHN0YXR1czogMHgleFxuIiwgX19mdW5jX18sIGhwcm9jZXNzb3IsCisJCW5vZGVfdXVpZCwgcGFyZ3MsIGF0dHJfaW4sIG5vZGVyZXMsIHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBub2RlX2FsbG9jX21zZ19idWYgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBBbGxvY2F0ZXMgYnVmZmVyIGZvciB6ZXJvIGNvcHkgbWVzc2FnaW5nLgorICovCitEQkFQSSBub2RlX2FsbG9jX21zZ19idWYoc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwgdTMyIHVzaXplLAorCQkJIHN0cnVjdCBkc3BfYnVmZmVyYXR0ciAqcGF0dHIsCisJCQkgdTggKipwYnVmZmVyKQoreworCXN0cnVjdCBub2RlX29iamVjdCAqcG5vZGUgPSAoc3RydWN0IG5vZGVfb2JqZWN0ICopaG5vZGU7CisJaW50IHN0YXR1cyA9IDA7CisJYm9vbCB2YV9mbGFnID0gZmFsc2U7CisJYm9vbCBzZXRfaW5mbzsKKwl1MzIgcHJvY19pZDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShwYnVmZmVyICE9IE5VTEwpOworCisJREJDX1JFUVVJUkUodXNpemUgPiAwKTsKKworCWlmICghcG5vZGUpCisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJZWxzZSBpZiAobm9kZV9nZXRfdHlwZShwbm9kZSkgPT0gTk9ERV9ERVZJQ0UpCisJCXN0YXR1cyA9IC1FUEVSTTsKKworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisKKwlpZiAocGF0dHIgPT0gTlVMTCkKKwkJcGF0dHIgPSAmbm9kZV9kZmx0YnVmYXR0cnM7CS8qIHNldCBkZWZhdWx0cyAqLworCisJc3RhdHVzID0gcHJvY19nZXRfcHJvY2Vzc29yX2lkKHBub2RlLT5ocHJvY2Vzc29yLCAmcHJvY19pZCk7CisJaWYgKHByb2NfaWQgIT0gRFNQX1VOSVQpIHsKKwkJREJDX0FTU0VSVChOVUxMKTsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJLyogIElmIHNlZ21lbnQgSUQgaW5jbHVkZXMgTUVNX1NFVFZJUlRVQUxTRUdJRCB0aGVuIHBidWZmZXIgaXMgYQorCSAqICB2aXJ0ICBhZGRyZXNzLCBzbyBzZXQgdGhpcyBpbmZvIGluIHRoaXMgbm9kZSdzIHRyYW5zbGF0b3IKKwkgKiAgb2JqZWN0IGZvciAgZnV0dXJlIHJlZi4gSWYgTUVNX0dFVFZJUlRVQUxTRUdJRCB0aGVuIHJldHJpZXZlCisJICogIHZpcnR1YWwgYWRkcmVzcyAgZnJvbSBub2RlJ3MgdHJhbnNsYXRvci4gKi8KKwlpZiAoKHBhdHRyLT5zZWdtZW50X2lkICYgTUVNX1NFVFZJUlRVQUxTRUdJRCkgfHwKKwkgICAgKHBhdHRyLT5zZWdtZW50X2lkICYgTUVNX0dFVFZJUlRVQUxTRUdJRCkpIHsKKwkJdmFfZmxhZyA9IHRydWU7CisJCXNldF9pbmZvID0gKHBhdHRyLT5zZWdtZW50X2lkICYgTUVNX1NFVFZJUlRVQUxTRUdJRCkgPworCQkgICAgdHJ1ZSA6IGZhbHNlOworCQkvKiBDbGVhciBtYXNrIGJpdHMgKi8KKwkJcGF0dHItPnNlZ21lbnRfaWQgJj0gfk1FTV9NQVNLVklSVFVBTFNFR0lEOworCQkvKiBTZXQvZ2V0IHRoaXMgbm9kZSdzIHRyYW5zbGF0b3JzIHZpcnR1YWwgYWRkcmVzcyBiYXNlL3NpemUgKi8KKwkJc3RhdHVzID0gY21tX3hsYXRvcl9pbmZvKHBub2RlLT54bGF0b3IsIHBidWZmZXIsIHVzaXplLAorCQkJCQkgcGF0dHItPnNlZ21lbnRfaWQsIHNldF9pbmZvKTsKKwl9CisJaWYgKCFzdGF0dXMgJiYgKCF2YV9mbGFnKSkgeworCQlpZiAocGF0dHItPnNlZ21lbnRfaWQgIT0gMSkgeworCQkJLyogTm9kZSBzdXBwb3J0cyBzaW5nbGUgU00gc2VnbWVudCBvbmx5LiAqLworCQkJc3RhdHVzID0gLUVCQURSOworCQl9CisJCS8qICBBcmJpdHJhcnkgU00gYnVmZmVyIGFsaWdubWVudCBub3Qgc3VwcG9ydGVkIGZvciBob3N0IHNpZGUKKwkJICogIGFsbG9jcywgYnV0IGd1YXJhbnRlZWQgZm9yIHRoZSBmb2xsb3dpbmcgYWxpZ25tZW50CisJCSAqICB2YWx1ZXMuICovCisJCXN3aXRjaCAocGF0dHItPmJ1Zl9hbGlnbm1lbnQpIHsKKwkJY2FzZSAwOgorCQljYXNlIDE6CisJCWNhc2UgMjoKKwkJY2FzZSA0OgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBhbGlnbm1lbnQgdmFsdWUgbm90IHN1cG9ydHRlZCAqLworCQkJc3RhdHVzID0gLUVQRVJNOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFzdGF0dXMpIHsKKwkJCS8qIGFsbG9jYXRlIHBoeXNpY2FsIGJ1ZmZlciBmcm9tIHNlZ19pZCBpbiBub2RlJ3MKKwkJCSAqIHRyYW5zbGF0b3IgKi8KKwkJCSh2b2lkKWNtbV94bGF0b3JfYWxsb2NfYnVmKHBub2RlLT54bGF0b3IsIHBidWZmZXIsCisJCQkJCQkgICB1c2l6ZSk7CisJCQlpZiAoKnBidWZmZXIgPT0gTlVMTCkgeworCQkJCXByX2VycigiJXM6IGVycm9yIC0gT3V0IG9mIHNoYXJlZCBtZW1vcnlcbiIsCisJCQkJICAgICAgIF9fZnVuY19fKTsKKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJfQorCQl9CisJfQorZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBub2RlX2NoYW5nZV9wcmlvcml0eSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENoYW5nZSB0aGUgcHJpb3JpdHkgb2YgYSBub2RlIGluIHRoZSBhbGxvY2F0ZWQgc3RhdGUsIG9yIHRoYXQgaXMKKyAqICAgICAgY3VycmVudGx5IHJ1bm5pbmcgb3IgcGF1c2VkIG9uIHRoZSB0YXJnZXQuCisgKi8KK2ludCBub2RlX2NoYW5nZV9wcmlvcml0eShzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLCBzMzIgcHJpbykKK3sKKwlzdHJ1Y3Qgbm9kZV9vYmplY3QgKnBub2RlID0gKHN0cnVjdCBub2RlX29iamVjdCAqKWhub2RlOworCXN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyID0gTlVMTDsKKwllbnVtIG5vZGVfdHlwZSBub2RlX3R5cGU7CisJZW51bSBub2RlX3N0YXRlIHN0YXRlOworCWludCBzdGF0dXMgPSAwOworCXUzMiBwcm9jX2lkOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJaWYgKCFobm9kZSB8fCAhaG5vZGUtPmhub2RlX21ncikgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCX0gZWxzZSB7CisJCWhub2RlX21nciA9IGhub2RlLT5obm9kZV9tZ3I7CisJCW5vZGVfdHlwZSA9IG5vZGVfZ2V0X3R5cGUoaG5vZGUpOworCQlpZiAobm9kZV90eXBlICE9IE5PREVfVEFTSyAmJiBub2RlX3R5cGUgIT0gTk9ERV9EQUlTU09DS0VUKQorCQkJc3RhdHVzID0gLUVQRVJNOworCQllbHNlIGlmIChwcmlvIDwgaG5vZGVfbWdyLT5taW5fcHJpIHx8IHByaW8gPiBobm9kZV9tZ3ItPm1heF9wcmkpCisJCQlzdGF0dXMgPSAtRURPTTsKKwl9CisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2VuZDsKKworCS8qIEVudGVyIGNyaXRpY2FsIHNlY3Rpb24gKi8KKwltdXRleF9sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOworCisJc3RhdGUgPSBub2RlX2dldF9zdGF0ZShobm9kZSk7CisJaWYgKHN0YXRlID09IE5PREVfQUxMT0NBVEVEIHx8IHN0YXRlID09IE5PREVfUEFVU0VEKSB7CisJCU5PREVfU0VUX1BSSU9SSVRZKGhub2RlLCBwcmlvKTsKKwl9IGVsc2UgeworCQlpZiAoc3RhdGUgIT0gTk9ERV9SVU5OSU5HKSB7CisJCQlzdGF0dXMgPSAtRUJBRFI7CisJCQlnb3RvIGZ1bmNfY29udDsKKwkJfQorCQlzdGF0dXMgPSBwcm9jX2dldF9wcm9jZXNzb3JfaWQocG5vZGUtPmhwcm9jZXNzb3IsICZwcm9jX2lkKTsKKwkJaWYgKHByb2NfaWQgPT0gRFNQX1VOSVQpIHsKKwkJCXN0YXR1cyA9CisJCQkgICAgZGlzcF9ub2RlX2NoYW5nZV9wcmlvcml0eShobm9kZV9tZ3ItPmRpc3Bfb2JqLAorCQkJCQkJICAgICAgaG5vZGUsCisJCQkJCQkgICAgICBobm9kZV9tZ3ItPnVsX2Z4bl9hZGRycworCQkJCQkJICAgICAgW1JNU0NIQU5HRU5PREVQUklPUklUWV0sCisJCQkJCQkgICAgICBobm9kZS0+bm9kZV9lbnYsIHByaW8pOworCQl9CisJCWlmIChzdGF0dXMgPj0gMCkKKwkJCU5PREVfU0VUX1BSSU9SSVRZKGhub2RlLCBwcmlvKTsKKworCX0KK2Z1bmNfY29udDoKKwkvKiBMZWF2ZSBjcml0aWNhbCBzZWN0aW9uICovCisJbXV0ZXhfdW5sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOworZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBub2RlX2Nvbm5lY3QgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDb25uZWN0IHR3byBub2RlcyBvbiB0aGUgRFNQLCBvciBhIG5vZGUgb24gdGhlIERTUCB0byB0aGUgR1BQLgorICovCitpbnQgbm9kZV9jb25uZWN0KHN0cnVjdCBub2RlX29iamVjdCAqbm9kZTEsIHUzMiBzdHJlYW0xLAorCQkJc3RydWN0IG5vZGVfb2JqZWN0ICpub2RlMiwKKwkJCXUzMiBzdHJlYW0yLCBzdHJ1Y3QgZHNwX3N0cm1hdHRyICpwYXR0cnMsCisJCQlzdHJ1Y3QgZHNwX2NiZGF0YSAqY29ubl9wYXJhbSkKK3sKKwlzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21ncjsKKwljaGFyICpwc3RyX2Rldl9uYW1lID0gTlVMTDsKKwllbnVtIG5vZGVfdHlwZSBub2RlMV90eXBlID0gTk9ERV9UQVNLOworCWVudW0gbm9kZV90eXBlIG5vZGUyX3R5cGUgPSBOT0RFX1RBU0s7CisJc3RydWN0IG5vZGVfc3RybWRlZiAqcHN0cm1fZGVmOworCXN0cnVjdCBub2RlX3N0cm1kZWYgKmlucHV0ID0gTlVMTDsKKwlzdHJ1Y3Qgbm9kZV9zdHJtZGVmICpvdXRwdXQgPSBOVUxMOworCXN0cnVjdCBub2RlX29iamVjdCAqZGV2X25vZGVfb2JqOworCXN0cnVjdCBub2RlX29iamVjdCAqaG5vZGU7CisJc3RydWN0IHN0cmVhbV9jaG5sICpwc3RyZWFtOworCXUzMiBwaXBlX2lkID0gR0JfTk9CSVRTOworCXUzMiBjaG5sX2lkID0gR0JfTk9CSVRTOworCXM4IGNobmxfbW9kZTsKKwl1MzIgZHdfbGVuZ3RoOworCWludCBzdGF0dXMgPSAwOworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKworCWlmICgobm9kZTEgIT0gKHN0cnVjdCBub2RlX29iamVjdCAqKURTUF9IR1BQTk9ERSAmJiAhbm9kZTEpIHx8CisJICAgIChub2RlMiAhPSAoc3RydWN0IG5vZGVfb2JqZWN0ICopRFNQX0hHUFBOT0RFICYmICFub2RlMikpCisJCXN0YXR1cyA9IC1FRkFVTFQ7CisKKwlpZiAoIXN0YXR1cykgeworCQkvKiBUaGUgdHdvIG5vZGVzIG11c3QgYmUgb24gdGhlIHNhbWUgcHJvY2Vzc29yICovCisJCWlmIChub2RlMSAhPSAoc3RydWN0IG5vZGVfb2JqZWN0ICopRFNQX0hHUFBOT0RFICYmCisJCSAgICBub2RlMiAhPSAoc3RydWN0IG5vZGVfb2JqZWN0ICopRFNQX0hHUFBOT0RFICYmCisJCSAgICBub2RlMS0+aG5vZGVfbWdyICE9IG5vZGUyLT5obm9kZV9tZ3IpCisJCQlzdGF0dXMgPSAtRVBFUk07CisJCS8qIENhbm5vdCBjb25uZWN0IGEgbm9kZSB0byBpdHNlbGYgKi8KKwkJaWYgKG5vZGUxID09IG5vZGUyKQorCQkJc3RhdHVzID0gLUVQRVJNOworCisJfQorCWlmICghc3RhdHVzKSB7CisJCS8qIG5vZGVfZ2V0X3R5cGUoKSB3aWxsIHJldHVybiBOT0RFX0dQUCBpZiBobm9kZSA9CisJCSAqIERTUF9IR1BQTk9ERS4gKi8KKwkJbm9kZTFfdHlwZSA9IG5vZGVfZ2V0X3R5cGUobm9kZTEpOworCQlub2RlMl90eXBlID0gbm9kZV9nZXRfdHlwZShub2RlMik7CisJCS8qIENoZWNrIHN0cmVhbSBpbmRpY2VzIHJhbmdlcyAqLworCQlpZiAoKG5vZGUxX3R5cGUgIT0gTk9ERV9HUFAgJiYgbm9kZTFfdHlwZSAhPSBOT0RFX0RFVklDRSAmJgorCQkgICAgIHN0cmVhbTEgPj0gTUFYX09VVFBVVFMobm9kZTEpKSB8fCAobm9kZTJfdHlwZSAhPSBOT0RFX0dQUAorCQkJCQkJCSAgJiYgbm9kZTJfdHlwZSAhPQorCQkJCQkJCSAgTk9ERV9ERVZJQ0UKKwkJCQkJCQkgICYmIHN0cmVhbTIgPj0KKwkJCQkJCQkgIE1BWF9JTlBVVFMobm9kZTIpKSkKKwkJCXN0YXR1cyA9IC1FSU5WQUw7CisJfQorCWlmICghc3RhdHVzKSB7CisJCS8qCisJCSAqICBPbmx5IHRoZSBmb2xsb3dpbmcgdHlwZXMgb2YgY29ubmVjdGlvbnMgYXJlIGFsbG93ZWQ6CisJCSAqICAgICAgdGFzay9kYWlzIHNvY2tldCA8ID09ID4gdGFzay9kYWlzIHNvY2tldAorCQkgKiAgICAgIHRhc2svZGFpcyBzb2NrZXQgPCA9PSA+IGRldmljZQorCQkgKiAgICAgIHRhc2svZGFpcyBzb2NrZXQgPCA9PSA+IEdQUAorCQkgKgorCQkgKiAgaWUsIG5vIG1lc3NhZ2Ugbm9kZXMsIGFuZCBhdCBsZWFzdCBvbmUgdGFzayBvciBkYWlzCisJCSAqICBzb2NrZXQgbm9kZS4KKwkJICovCisJCWlmIChub2RlMV90eXBlID09IE5PREVfTUVTU0FHRSB8fCBub2RlMl90eXBlID09IE5PREVfTUVTU0FHRSB8fAorCQkgICAgKG5vZGUxX3R5cGUgIT0gTk9ERV9UQVNLICYmIG5vZGUxX3R5cGUgIT0gTk9ERV9EQUlTU09DS0VUICYmCisJCSAgICAgbm9kZTJfdHlwZSAhPSBOT0RFX1RBU0sgJiYgbm9kZTJfdHlwZSAhPSBOT0RFX0RBSVNTT0NLRVQpKQorCQkJc3RhdHVzID0gLUVQRVJNOworCX0KKwkvKgorCSAqIENoZWNrIHN0cmVhbSBtb2RlLiBEZWZhdWx0IGlzIFNUUk1NT0RFX1BST0NDT1BZLgorCSAqLworCWlmICghc3RhdHVzICYmIHBhdHRycykgeworCQlpZiAocGF0dHJzLT5zdHJtX21vZGUgIT0gU1RSTU1PREVfUFJPQ0NPUFkpCisJCQlzdGF0dXMgPSAtRVBFUk07CS8qIGlsbGVnYWwgc3RyZWFtIG1vZGUgKi8KKworCX0KKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJaWYgKG5vZGUxX3R5cGUgIT0gTk9ERV9HUFApIHsKKwkJaG5vZGVfbWdyID0gbm9kZTEtPmhub2RlX21ncjsKKwl9IGVsc2UgeworCQlEQkNfQVNTRVJUKG5vZGUyICE9IChzdHJ1Y3Qgbm9kZV9vYmplY3QgKilEU1BfSEdQUE5PREUpOworCQlobm9kZV9tZ3IgPSBub2RlMi0+aG5vZGVfbWdyOworCX0KKwkvKiBFbnRlciBjcml0aWNhbCBzZWN0aW9uICovCisJbXV0ZXhfbG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKKworCS8qIE5vZGVzIG11c3QgYmUgaW4gdGhlIGFsbG9jYXRlZCBzdGF0ZSAqLworCWlmIChub2RlMV90eXBlICE9IE5PREVfR1BQICYmIG5vZGVfZ2V0X3N0YXRlKG5vZGUxKSAhPSBOT0RFX0FMTE9DQVRFRCkKKwkJc3RhdHVzID0gLUVCQURSOworCisJaWYgKG5vZGUyX3R5cGUgIT0gTk9ERV9HUFAgJiYgbm9kZV9nZXRfc3RhdGUobm9kZTIpICE9IE5PREVfQUxMT0NBVEVEKQorCQlzdGF0dXMgPSAtRUJBRFI7CisKKwlpZiAoIXN0YXR1cykgeworCQkvKiAgQ2hlY2sgdGhhdCBzdHJlYW0gaW5kaWNlcyBmb3IgdGFzayBhbmQgZGFpcyBzb2NrZXQgbm9kZXMKKwkJICogIGFyZSBub3QgYWxyZWFkeSBiZSB1c2VkLiAoRGV2aWNlIG5vZGVzIGNoZWNrZWQgbGF0ZXIpICovCisJCWlmIChub2RlMV90eXBlID09IE5PREVfVEFTSyB8fCBub2RlMV90eXBlID09IE5PREVfREFJU1NPQ0tFVCkgeworCQkJb3V0cHV0ID0KKwkJCSAgICAmKG5vZGUxLT5jcmVhdGVfYXJncy5hc2EuCisJCQkgICAgICB0YXNrX2FyZ19vYmouc3RybV9vdXRfZGVmW3N0cmVhbTFdKTsKKwkJCWlmIChvdXRwdXQtPnN6X2RldmljZSAhPSBOVUxMKQorCQkJCXN0YXR1cyA9IC1FSVNDT05OOworCisJCX0KKwkJaWYgKG5vZGUyX3R5cGUgPT0gTk9ERV9UQVNLIHx8IG5vZGUyX3R5cGUgPT0gTk9ERV9EQUlTU09DS0VUKSB7CisJCQlpbnB1dCA9CisJCQkgICAgJihub2RlMi0+Y3JlYXRlX2FyZ3MuYXNhLgorCQkJICAgICAgdGFza19hcmdfb2JqLnN0cm1faW5fZGVmW3N0cmVhbTJdKTsKKwkJCWlmIChpbnB1dC0+c3pfZGV2aWNlICE9IE5VTEwpCisJCQkJc3RhdHVzID0gLUVJU0NPTk47CisKKwkJfQorCX0KKwkvKiBDb25uZWN0aW5nIHR3byB0YXNrIG5vZGVzPyAqLworCWlmICghc3RhdHVzICYmICgobm9kZTFfdHlwZSA9PSBOT0RFX1RBU0sgfHwKKwkJCQkgICAgICAgbm9kZTFfdHlwZSA9PSBOT0RFX0RBSVNTT0NLRVQpCisJCQkJICAgICAgJiYgKG5vZGUyX3R5cGUgPT0gTk9ERV9UQVNLCisJCQkJCSAgfHwgbm9kZTJfdHlwZSA9PSBOT0RFX0RBSVNTT0NLRVQpKSkgeworCQkvKiBGaW5kIGF2YWlsYWJsZSBwaXBlICovCisJCXBpcGVfaWQgPSBnYl9maW5kYW5kc2V0KGhub2RlX21nci0+cGlwZV9tYXApOworCQlpZiAocGlwZV9pZCA9PSBHQl9OT0JJVFMpIHsKKwkJCXN0YXR1cyA9IC1FQ09OTlJFRlVTRUQ7CisJCX0gZWxzZSB7CisJCQlub2RlMS0+b3V0cHV0c1tzdHJlYW0xXS50eXBlID0gTk9ERUNPTk5FQ1Q7CisJCQlub2RlMi0+aW5wdXRzW3N0cmVhbTJdLnR5cGUgPSBOT0RFQ09OTkVDVDsKKwkJCW5vZGUxLT5vdXRwdXRzW3N0cmVhbTFdLmRldl9pZCA9IHBpcGVfaWQ7CisJCQlub2RlMi0+aW5wdXRzW3N0cmVhbTJdLmRldl9pZCA9IHBpcGVfaWQ7CisJCQlvdXRwdXQtPnN6X2RldmljZSA9IGt6YWxsb2MoUElQRU5BTUVMRU4gKyAxLAorCQkJCQkJCUdGUF9LRVJORUwpOworCQkJaW5wdXQtPnN6X2RldmljZSA9IGt6YWxsb2MoUElQRU5BTUVMRU4gKyAxLCBHRlBfS0VSTkVMKTsKKwkJCWlmIChvdXRwdXQtPnN6X2RldmljZSA9PSBOVUxMIHx8CisJCQkgICAgaW5wdXQtPnN6X2RldmljZSA9PSBOVUxMKSB7CisJCQkJLyogVW5kbyB0aGUgY29ubmVjdGlvbiAqLworCQkJCWtmcmVlKG91dHB1dC0+c3pfZGV2aWNlKTsKKworCQkJCWtmcmVlKGlucHV0LT5zel9kZXZpY2UpOworCisJCQkJb3V0cHV0LT5zel9kZXZpY2UgPSBOVUxMOworCQkJCWlucHV0LT5zel9kZXZpY2UgPSBOVUxMOworCQkJCWdiX2NsZWFyKGhub2RlX21nci0+cGlwZV9tYXAsIHBpcGVfaWQpOworCQkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQl9IGVsc2UgeworCQkJCS8qIENvcHkgIi9kYnBpcGU8cGlwSWQ+IiBuYW1lIHRvIGRldmljZSBuYW1lcyAqLworCQkJCXNwcmludGYob3V0cHV0LT5zel9kZXZpY2UsICIlcyVkIiwKKwkJCQkJUElQRVBSRUZJWCwgcGlwZV9pZCk7CisJCQkJc3RyY3B5KGlucHV0LT5zel9kZXZpY2UsIG91dHB1dC0+c3pfZGV2aWNlKTsKKwkJCX0KKwkJfQorCX0KKwkvKiBDb25uZWN0aW5nIHRhc2sgbm9kZSB0byBob3N0PyAqLworCWlmICghc3RhdHVzICYmIChub2RlMV90eXBlID09IE5PREVfR1BQIHx8CisJCQkJICAgICAgbm9kZTJfdHlwZSA9PSBOT0RFX0dQUCkpIHsKKwkJaWYgKG5vZGUxX3R5cGUgPT0gTk9ERV9HUFApIHsKKwkJCWNobmxfbW9kZSA9IENITkxfTU9ERVRPRFNQOworCQl9IGVsc2UgeworCQkJREJDX0FTU0VSVChub2RlMl90eXBlID09IE5PREVfR1BQKTsKKwkJCWNobmxfbW9kZSA9IENITkxfTU9ERUZST01EU1A7CisJCX0KKwkJLyogIFJlc2VydmUgYSBjaGFubmVsIGlkLiBXZSBuZWVkIHRvIHB1dCB0aGUgbmFtZSAiL2hvc3Q8aWQ+IgorCQkgKiAgaW4gdGhlIG5vZGUncyBjcmVhdGVfYXJncywgYnV0IHRoZSBob3N0CisJCSAqICBzaWRlIGNoYW5uZWwgd2lsbCBub3QgYmUgb3BlbmVkIHVudGlsIERTUFN0cmVhbV9PcGVuIGlzCisJCSAqICBjYWxsZWQgZm9yIHRoaXMgbm9kZS4gKi8KKwkJaWYgKHBhdHRycykgeworCQkJaWYgKHBhdHRycy0+c3RybV9tb2RlID09IFNUUk1NT0RFX1JETUEpIHsKKwkJCQljaG5sX2lkID0KKwkJCQkgICAgZ2JfZmluZGFuZHNldChobm9kZV9tZ3ItPmRtYV9jaG5sX21hcCk7CisJCQkJLyogZG1hIGNoYW5zIGFyZSAybmQgdHJhbnNwb3J0IGNobmwgc2V0CisJCQkJICogaWRzKGUuZy4gMTYtMzEpICovCisJCQkJKGNobmxfaWQgIT0gR0JfTk9CSVRTKSA/CisJCQkJICAgIChjaG5sX2lkID0KKwkJCQkgICAgIGNobmxfaWQgKworCQkJCSAgICAgaG5vZGVfbWdyLT51bF9udW1fY2hubHMpIDogY2hubF9pZDsKKwkJCX0gZWxzZSBpZiAocGF0dHJzLT5zdHJtX21vZGUgPT0gU1RSTU1PREVfWkVST0NPUFkpIHsKKwkJCQljaG5sX2lkID0gZ2JfZmluZGFuZHNldChobm9kZV9tZ3ItPnpjX2NobmxfbWFwKTsKKwkJCQkvKiB6ZXJvLWNvcHkgY2hhbnMgYXJlIDNuZCB0cmFuc3BvcnQgc2V0CisJCQkJICogKGUuZy4gMzItNDcpICovCisJCQkJKGNobmxfaWQgIT0gR0JfTk9CSVRTKSA/IChjaG5sX2lkID0gY2hubF9pZCArCisJCQkJCQkJICAoMiAqCisJCQkJCQkJICAgaG5vZGVfbWdyLT4KKwkJCQkJCQkgICB1bF9udW1fY2hubHMpKQorCQkJCSAgICA6IGNobmxfaWQ7CisJCQl9IGVsc2UgewkvKiBtdXN0IGJlIFBST0NDT1BZICovCisJCQkJREJDX0FTU0VSVChwYXR0cnMtPnN0cm1fbW9kZSA9PQorCQkJCQkgICBTVFJNTU9ERV9QUk9DQ09QWSk7CisJCQkJY2hubF9pZCA9IGdiX2ZpbmRhbmRzZXQoaG5vZGVfbWdyLT5jaG5sX21hcCk7CisJCQkJLyogZS5nLiAwLTE1ICovCisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBkZWZhdWx0IHRvIFBST0NDT1BZICovCisJCQljaG5sX2lkID0gZ2JfZmluZGFuZHNldChobm9kZV9tZ3ItPmNobmxfbWFwKTsKKwkJfQorCQlpZiAoY2hubF9pZCA9PSBHQl9OT0JJVFMpIHsKKwkJCXN0YXR1cyA9IC1FQ09OTlJFRlVTRUQ7CisJCQlnb3RvIGZ1bmNfY29udDI7CisJCX0KKwkJcHN0cl9kZXZfbmFtZSA9IGt6YWxsb2MoSE9TVE5BTUVMRU4gKyAxLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHBzdHJfZGV2X25hbWUgIT0gTlVMTCkKKwkJCWdvdG8gZnVuY19jb250MjsKKworCQlpZiAocGF0dHJzKSB7CisJCQlpZiAocGF0dHJzLT5zdHJtX21vZGUgPT0gU1RSTU1PREVfUkRNQSkgeworCQkJCWdiX2NsZWFyKGhub2RlX21nci0+ZG1hX2NobmxfbWFwLCBjaG5sX2lkIC0KKwkJCQkJIGhub2RlX21nci0+dWxfbnVtX2NobmxzKTsKKwkJCX0gZWxzZSBpZiAocGF0dHJzLT5zdHJtX21vZGUgPT0gU1RSTU1PREVfWkVST0NPUFkpIHsKKwkJCQlnYl9jbGVhcihobm9kZV9tZ3ItPnpjX2NobmxfbWFwLCBjaG5sX2lkIC0KKwkJCQkJICgyICogaG5vZGVfbWdyLT51bF9udW1fY2hubHMpKTsKKwkJCX0gZWxzZSB7CisJCQkJREJDX0FTU0VSVChwYXR0cnMtPnN0cm1fbW9kZSA9PQorCQkJCQkgICBTVFJNTU9ERV9QUk9DQ09QWSk7CisJCQkJZ2JfY2xlYXIoaG5vZGVfbWdyLT5jaG5sX21hcCwgY2hubF9pZCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlnYl9jbGVhcihobm9kZV9tZ3ItPmNobmxfbWFwLCBjaG5sX2lkKTsKKwkJfQorCQlzdGF0dXMgPSAtRU5PTUVNOworZnVuY19jb250MjoKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCWlmIChub2RlMSA9PSAoc3RydWN0IG5vZGVfb2JqZWN0ICopRFNQX0hHUFBOT0RFKSB7CisJCQkJbm9kZTItPmlucHV0c1tzdHJlYW0yXS50eXBlID0gSE9TVENPTk5FQ1Q7CisJCQkJbm9kZTItPmlucHV0c1tzdHJlYW0yXS5kZXZfaWQgPSBjaG5sX2lkOworCQkJCWlucHV0LT5zel9kZXZpY2UgPSBwc3RyX2Rldl9uYW1lOworCQkJfSBlbHNlIHsKKwkJCQlub2RlMS0+b3V0cHV0c1tzdHJlYW0xXS50eXBlID0gSE9TVENPTk5FQ1Q7CisJCQkJbm9kZTEtPm91dHB1dHNbc3RyZWFtMV0uZGV2X2lkID0gY2hubF9pZDsKKwkJCQlvdXRwdXQtPnN6X2RldmljZSA9IHBzdHJfZGV2X25hbWU7CisJCQl9CisJCQlzcHJpbnRmKHBzdHJfZGV2X25hbWUsICIlcyVkIiwgSE9TVFBSRUZJWCwgY2hubF9pZCk7CisJCX0KKwl9CisJLyogQ29ubmVjdGluZyB0YXNrIG5vZGUgdG8gZGV2aWNlIG5vZGU/ICovCisJaWYgKCFzdGF0dXMgJiYgKChub2RlMV90eXBlID09IE5PREVfREVWSUNFKSB8fAorCQkJCSAgICAgIChub2RlMl90eXBlID09IE5PREVfREVWSUNFKSkpIHsKKwkJaWYgKG5vZGUyX3R5cGUgPT0gTk9ERV9ERVZJQ0UpIHsKKwkJCS8qIG5vZGUxID09ID4gZGV2aWNlICovCisJCQlkZXZfbm9kZV9vYmogPSBub2RlMjsKKwkJCWhub2RlID0gbm9kZTE7CisJCQlwc3RyZWFtID0gJihub2RlMS0+b3V0cHV0c1tzdHJlYW0xXSk7CisJCQlwc3RybV9kZWYgPSBvdXRwdXQ7CisJCX0gZWxzZSB7CisJCQkvKiBkZXZpY2UgPT0gPiBub2RlMiAqLworCQkJZGV2X25vZGVfb2JqID0gbm9kZTE7CisJCQlobm9kZSA9IG5vZGUyOworCQkJcHN0cmVhbSA9ICYobm9kZTItPmlucHV0c1tzdHJlYW0yXSk7CisJCQlwc3RybV9kZWYgPSBpbnB1dDsKKwkJfQorCQkvKiBTZXQgdXAgY3JlYXRlIGFyZ3MgKi8KKwkJcHN0cmVhbS0+dHlwZSA9IERFVklDRUNPTk5FQ1Q7CisJCWR3X2xlbmd0aCA9IHN0cmxlbihkZXZfbm9kZV9vYmotPnBzdHJfZGV2X25hbWUpOworCQlpZiAoY29ubl9wYXJhbSAhPSBOVUxMKSB7CisJCQlwc3RybV9kZWYtPnN6X2RldmljZSA9IGt6YWxsb2MoZHdfbGVuZ3RoICsgMSArCisJCQkJCQkJY29ubl9wYXJhbS0+Y2JfZGF0YSwKKwkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJfSBlbHNlIHsKKwkJCXBzdHJtX2RlZi0+c3pfZGV2aWNlID0ga3phbGxvYyhkd19sZW5ndGggKyAxLAorCQkJCQkJCUdGUF9LRVJORUwpOworCQl9CisJCWlmIChwc3RybV9kZWYtPnN6X2RldmljZSA9PSBOVUxMKSB7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQl9IGVsc2UgeworCQkJLyogQ29weSBkZXZpY2UgbmFtZSAqLworCQkJc3RybmNweShwc3RybV9kZWYtPnN6X2RldmljZSwKKwkJCQlkZXZfbm9kZV9vYmotPnBzdHJfZGV2X25hbWUsIGR3X2xlbmd0aCk7CisJCQlpZiAoY29ubl9wYXJhbSAhPSBOVUxMKSB7CisJCQkJc3RybmNhdChwc3RybV9kZWYtPnN6X2RldmljZSwKKwkJCQkJKGNoYXIgKiljb25uX3BhcmFtLT5ub2RlX2RhdGEsCisJCQkJCSh1MzIpIGNvbm5fcGFyYW0tPmNiX2RhdGEpOworCQkJfQorCQkJZGV2X25vZGVfb2JqLT5kZXZpY2Vfb3duZXIgPSBobm9kZTsKKwkJfQorCX0KKwlpZiAoIXN0YXR1cykgeworCQkvKiBGaWxsIGluIGNyZWF0ZSBhcmdzICovCisJCWlmIChub2RlMV90eXBlID09IE5PREVfVEFTSyB8fCBub2RlMV90eXBlID09IE5PREVfREFJU1NPQ0tFVCkgeworCQkJbm9kZTEtPmNyZWF0ZV9hcmdzLmFzYS50YXNrX2FyZ19vYmoubnVtX291dHB1dHMrKzsKKwkJCWZpbGxfc3RyZWFtX2RlZihub2RlMSwgb3V0cHV0LCBwYXR0cnMpOworCQl9CisJCWlmIChub2RlMl90eXBlID09IE5PREVfVEFTSyB8fCBub2RlMl90eXBlID09IE5PREVfREFJU1NPQ0tFVCkgeworCQkJbm9kZTItPmNyZWF0ZV9hcmdzLmFzYS50YXNrX2FyZ19vYmoubnVtX2lucHV0cysrOworCQkJZmlsbF9zdHJlYW1fZGVmKG5vZGUyLCBpbnB1dCwgcGF0dHJzKTsKKwkJfQorCQkvKiBVcGRhdGUgbm9kZTEgYW5kIG5vZGUyIHN0cmVhbV9jb25uZWN0ICovCisJCWlmIChub2RlMV90eXBlICE9IE5PREVfR1BQICYmIG5vZGUxX3R5cGUgIT0gTk9ERV9ERVZJQ0UpIHsKKwkJCW5vZGUxLT5udW1fb3V0cHV0cysrOworCQkJaWYgKHN0cmVhbTEgPiBub2RlMS0+bWF4X291dHB1dF9pbmRleCkKKwkJCQlub2RlMS0+bWF4X291dHB1dF9pbmRleCA9IHN0cmVhbTE7CisKKwkJfQorCQlpZiAobm9kZTJfdHlwZSAhPSBOT0RFX0dQUCAmJiBub2RlMl90eXBlICE9IE5PREVfREVWSUNFKSB7CisJCQlub2RlMi0+bnVtX2lucHV0cysrOworCQkJaWYgKHN0cmVhbTIgPiBub2RlMi0+bWF4X2lucHV0X2luZGV4KQorCQkJCW5vZGUyLT5tYXhfaW5wdXRfaW5kZXggPSBzdHJlYW0yOworCisJCX0KKwkJZmlsbF9zdHJlYW1fY29ubmVjdChub2RlMSwgbm9kZTIsIHN0cmVhbTEsIHN0cmVhbTIpOworCX0KKwkvKiBlbmQgb2Ygc3luY19lbnRlcl9jcyAqLworCS8qIEV4aXQgY3JpdGljYWwgc2VjdGlvbiAqLworCW11dGV4X3VubG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKK2Z1bmNfZW5kOgorCWRldl9kYmcoYnJpZGdlLCAiJXM6IG5vZGUxOiAlcCBzdHJlYW0xOiAlZCBub2RlMjogJXAgc3RyZWFtMjogJWQiCisJCSJwYXR0cnM6ICVwIHN0YXR1czogMHgleFxuIiwgX19mdW5jX18sIG5vZGUxLAorCQlzdHJlYW0xLCBub2RlMiwgc3RyZWFtMiwgcGF0dHJzLCBzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9jcmVhdGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDcmVhdGUgYSBub2RlIG9uIHRoZSBEU1AgYnkgcmVtb3RlbHkgY2FsbGluZyB0aGUgbm9kZSdzIGNyZWF0ZSBmdW5jdGlvbi4KKyAqLworaW50IG5vZGVfY3JlYXRlKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUpCit7CisJc3RydWN0IG5vZGVfb2JqZWN0ICpwbm9kZSA9IChzdHJ1Y3Qgbm9kZV9vYmplY3QgKilobm9kZTsKKwlzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21ncjsKKwlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKKwl1MzIgdWxfY3JlYXRlX2Z4bjsKKwllbnVtIG5vZGVfdHlwZSBub2RlX3R5cGU7CisJaW50IHN0YXR1cyA9IDA7CisJaW50IHN0YXR1czEgPSAwOworCXN0cnVjdCBkc3BfY2JkYXRhIGNiX2RhdGE7CisJdTMyIHByb2NfaWQgPSAyNTU7CisJc3RydWN0IGRzcF9wcm9jZXNzb3JzdGF0ZSBwcm9jX3N0YXRlOworCXN0cnVjdCBwcm9jX29iamVjdCAqaHByb2Nlc3NvcjsKKyNpZiBkZWZpbmVkKENPTkZJR19USURTUEJSSURHRV9EVkZTKSAmJiAhZGVmaW5lZChDT05GSUdfQ1BVX0ZSRVEpCisJc3RydWN0IGRzcGJyaWRnZV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9CisJICAgIG9tYXBfZHNwYnJpZGdlX2Rldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisjZW5kaWYKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlpZiAoIXBub2RlKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCWhwcm9jZXNzb3IgPSBobm9kZS0+aHByb2Nlc3NvcjsKKwlzdGF0dXMgPSBwcm9jX2dldF9zdGF0ZShocHJvY2Vzc29yLCAmcHJvY19zdGF0ZSwKKwkJCQlzaXplb2Yoc3RydWN0IGRzcF9wcm9jZXNzb3JzdGF0ZSkpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisJLyogSWYgcHJvY2Vzc29yIGlzIGluIGVycm9yIHN0YXRlIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0byBjcmVhdGUKKwkgICBuZXcgbm9kZSAqLworCWlmIChwcm9jX3N0YXRlLnByb2Nfc3RhdGUgPT0gUFJPQ19FUlJPUikgeworCQlzdGF0dXMgPSAtRVBFUk07CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCS8qIGNyZWF0ZSBzdHJ1Y3QgZHNwX2NiZGF0YSBzdHJ1Y3QgZm9yIFBXUiBjYWxscyAqLworCWNiX2RhdGEuY2JfZGF0YSA9IFBXUl9USU1FT1VUOworCW5vZGVfdHlwZSA9IG5vZGVfZ2V0X3R5cGUoaG5vZGUpOworCWhub2RlX21nciA9IGhub2RlLT5obm9kZV9tZ3I7CisJaW50Zl9meG5zID0gaG5vZGVfbWdyLT5pbnRmX2Z4bnM7CisJLyogR2V0IGFjY2VzcyB0byBub2RlIGRpc3BhdGNoZXIgKi8KKwltdXRleF9sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOworCisJLyogQ2hlY2sgbm9kZSBzdGF0ZSAqLworCWlmIChub2RlX2dldF9zdGF0ZShobm9kZSkgIT0gTk9ERV9BTExPQ0FURUQpCisJCXN0YXR1cyA9IC1FQkFEUjsKKworCWlmICghc3RhdHVzKQorCQlzdGF0dXMgPSBwcm9jX2dldF9wcm9jZXNzb3JfaWQocG5vZGUtPmhwcm9jZXNzb3IsICZwcm9jX2lkKTsKKworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19jb250MjsKKworCWlmIChwcm9jX2lkICE9IERTUF9VTklUKQorCQlnb3RvIGZ1bmNfY29udDI7CisKKwkvKiBNYWtlIHN1cmUgc3RyZWFtcyBhcmUgcHJvcGVybHkgY29ubmVjdGVkICovCisJaWYgKChobm9kZS0+bnVtX2lucHV0cyAmJiBobm9kZS0+bWF4X2lucHV0X2luZGV4ID4KKwkgICAgIGhub2RlLT5udW1faW5wdXRzIC0gMSkgfHwKKwkgICAgKGhub2RlLT5udW1fb3V0cHV0cyAmJiBobm9kZS0+bWF4X291dHB1dF9pbmRleCA+CisJICAgICBobm9kZS0+bnVtX291dHB1dHMgLSAxKSkKKwkJc3RhdHVzID0gLUVOT1RDT05OOworCisJaWYgKCFzdGF0dXMpIHsKKwkJLyogSWYgbm9kZSdzIGNyZWF0ZSBmdW5jdGlvbiBpcyBub3QgbG9hZGVkLCBsb2FkIGl0ICovCisJCS8qIEJvb3N0IHRoZSBPUFAgbGV2ZWwgdG8gbWF4IGxldmVsIHRoYXQgRFNQIGNhbiBiZSByZXF1ZXN0ZWQgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19USURTUEJSSURHRV9EVkZTKSAmJiAhZGVmaW5lZChDT05GSUdfQ1BVX0ZSRVEpCisJCWlmIChwZGF0YS0+Y3B1X3NldF9mcmVxKQorCQkJKCpwZGF0YS0+Y3B1X3NldF9mcmVxKSAocGRhdGEtPm1wdV9zcGVlZFtWREQxX09QUDNdKTsKKyNlbmRpZgorCQlzdGF0dXMgPSBobm9kZV9tZ3ItPm5sZHJfZnhucy5wZm5fbG9hZChobm9kZS0+bmxkcl9ub2RlX29iaiwKKwkJCQkJCSAgICAgICBOTERSX0NSRUFURSk7CisJCS8qIEdldCBhZGRyZXNzIG9mIG5vZGUncyBjcmVhdGUgZnVuY3Rpb24gKi8KKwkJaWYgKCFzdGF0dXMpIHsKKwkJCWhub2RlLT5sb2FkZWQgPSB0cnVlOworCQkJaWYgKG5vZGVfdHlwZSAhPSBOT0RFX0RFVklDRSkgeworCQkJCXN0YXR1cyA9IGdldF9meG5fYWRkcmVzcyhobm9kZSwgJnVsX2NyZWF0ZV9meG4sCisJCQkJCQkJIENSRUFURVBIQVNFKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXByX2VycigiJXM6IGZhaWxlZCB0byBsb2FkIGNyZWF0ZSBjb2RlOiAweCV4XG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBzdGF0dXMpOworCQl9CisJCS8qIFJlcXVlc3QgdGhlIGxvd2VzdCBPUFAgbGV2ZWwgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19USURTUEJSSURHRV9EVkZTKSAmJiAhZGVmaW5lZChDT05GSUdfQ1BVX0ZSRVEpCisJCWlmIChwZGF0YS0+Y3B1X3NldF9mcmVxKQorCQkJKCpwZGF0YS0+Y3B1X3NldF9mcmVxKSAocGRhdGEtPm1wdV9zcGVlZFtWREQxX09QUDFdKTsKKyNlbmRpZgorCQkvKiBHZXQgYWRkcmVzcyBvZiBpQWxnIGZ1bmN0aW9ucywgaWYgc29ja2V0IG5vZGUgKi8KKwkJaWYgKCFzdGF0dXMpIHsKKwkJCWlmIChub2RlX3R5cGUgPT0gTk9ERV9EQUlTU09DS0VUKSB7CisJCQkJc3RhdHVzID0gaG5vZGVfbWdyLT5ubGRyX2Z4bnMucGZuX2dldF9meG5fYWRkcgorCQkJCSAgICAoaG5vZGUtPm5sZHJfbm9kZV9vYmosCisJCQkJICAgICBobm9kZS0+ZGNkX3Byb3BzLm9ial9kYXRhLm5vZGVfb2JqLgorCQkJCSAgICAgcHN0cl9pX2FsZ19uYW1lLAorCQkJCSAgICAgJmhub2RlLT5jcmVhdGVfYXJncy5hc2EuCisJCQkJICAgICB0YXNrX2FyZ19vYmoudWxfZGFpc19hcmcpOworCQkJfQorCQl9CisJfQorCWlmICghc3RhdHVzKSB7CisJCWlmIChub2RlX3R5cGUgIT0gTk9ERV9ERVZJQ0UpIHsKKwkJCXN0YXR1cyA9IGRpc3Bfbm9kZV9jcmVhdGUoaG5vZGVfbWdyLT5kaXNwX29iaiwgaG5vZGUsCisJCQkJCQkgIGhub2RlX21nci0+dWxfZnhuX2FkZHJzCisJCQkJCQkgIFtSTVNDUkVBVEVOT0RFXSwKKwkJCQkJCSAgdWxfY3JlYXRlX2Z4biwKKwkJCQkJCSAgJihobm9kZS0+Y3JlYXRlX2FyZ3MpLAorCQkJCQkJICAmKGhub2RlLT5ub2RlX2VudikpOworCQkJaWYgKHN0YXR1cyA+PSAwKSB7CisJCQkJLyogU2V0IHRoZSBtZXNzYWdlIHF1ZXVlIGlkIHRvIHRoZSBub2RlIGVudgorCQkJCSAqIHBvaW50ZXIgKi8KKwkJCQlpbnRmX2Z4bnMgPSBobm9kZV9tZ3ItPmludGZfZnhuczsKKwkJCQkoKmludGZfZnhucy0+cGZuX21zZ19zZXRfcXVldWVfaWQpIChobm9kZS0+CisJCQkJCQkJbXNnX3F1ZXVlX29iaiwKKwkJCQkJCQlobm9kZS0+bm9kZV9lbnYpOworCQkJfQorCQl9CisJfQorCS8qICBQaGFzZSBJSS9PdmVybGF5czogQ3JlYXRlLCBleGVjdXRlLCBkZWxldGUgcGhhc2VzICBwb3NzaWJseSBpbgorCSAqICBkaWZmZXJlbnQgZmlsZXMvc2VjdGlvbnMuICovCisJaWYgKGhub2RlLT5sb2FkZWQgJiYgaG5vZGUtPnBoYXNlX3NwbGl0KSB7CisJCS8qIElmIGNyZWF0ZSBjb2RlIHdhcyBkeW5hbWljYWxseSBsb2FkZWQsIHdlIGNhbiBub3cgdW5sb2FkCisJCSAqIGl0LiAqLworCQlzdGF0dXMxID0gaG5vZGVfbWdyLT5ubGRyX2Z4bnMucGZuX3VubG9hZChobm9kZS0+bmxkcl9ub2RlX29iaiwKKwkJCQkJCQkgIE5MRFJfQ1JFQVRFKTsKKwkJaG5vZGUtPmxvYWRlZCA9IGZhbHNlOworCX0KKwlpZiAoc3RhdHVzMSkKKwkJcHJfZXJyKCIlczogRmFpbGVkIHRvIHVubG9hZCBjcmVhdGUgY29kZTogMHgleFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBzdGF0dXMxKTsKK2Z1bmNfY29udDI6CisJLyogVXBkYXRlIG5vZGUgc3RhdGUgYW5kIG5vZGUgbWFuYWdlciBzdGF0ZSAqLworCWlmIChzdGF0dXMgPj0gMCkgeworCQlOT0RFX1NFVF9TVEFURShobm9kZSwgTk9ERV9DUkVBVEVEKTsKKwkJaG5vZGVfbWdyLT5udW1fY3JlYXRlZCsrOworCQlnb3RvIGZ1bmNfY29udDsKKwl9CisJaWYgKHN0YXR1cyAhPSAtRUJBRFIpIHsKKwkJLyogUHV0IGJhY2sgaW4gTk9ERV9BTExPQ0FURUQgc3RhdGUgaWYgZXJyb3Igb2NjdXJyZWQgKi8KKwkJTk9ERV9TRVRfU1RBVEUoaG5vZGUsIE5PREVfQUxMT0NBVEVEKTsKKwl9CitmdW5jX2NvbnQ6CisJLyogRnJlZSBhY2Nlc3MgdG8gbm9kZSBkaXNwYXRjaGVyICovCisJbXV0ZXhfdW5sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOworZnVuY19lbmQ6CisJaWYgKHN0YXR1cyA+PSAwKSB7CisJCXByb2Nfbm90aWZ5X2NsaWVudHMoaG5vZGUtPmhwcm9jZXNzb3IsIERTUF9OT0RFU1RBVEVDSEFOR0UpOworCQludGZ5X25vdGlmeShobm9kZS0+bnRmeV9vYmosIERTUF9OT0RFU1RBVEVDSEFOR0UpOworCX0KKworCWRldl9kYmcoYnJpZGdlLCAiJXM6IGhub2RlOiAlcCBzdGF0dXM6IDB4JXhcbiIsIF9fZnVuY19fLAorCQlobm9kZSwgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IG5vZGVfY3JlYXRlX21nciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENyZWF0ZSBhIE5PREUgTWFuYWdlciBvYmplY3QuCisgKi8KK2ludCBub2RlX2NyZWF0ZV9tZ3Ioc3RydWN0IG5vZGVfbWdyICoqbm9kZV9tYW4sCisJCQkgICBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmopCit7CisJdTMyIGk7CisJc3RydWN0IG5vZGVfbWdyICpub2RlX21ncl9vYmogPSBOVUxMOworCXN0cnVjdCBkaXNwX2F0dHIgZGlzcF9hdHRyX29iajsKKwljaGFyICpzel96bF9maWxlID0gIiI7CisJc3RydWN0IG5sZHJfYXR0cnMgbmxkcl9hdHRyc19vYmo7CisJaW50IHN0YXR1cyA9IDA7CisJdTggZGV2X3R5cGU7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKG5vZGVfbWFuICE9IE5VTEwpOworCURCQ19SRVFVSVJFKGhkZXZfb2JqICE9IE5VTEwpOworCisJKm5vZGVfbWFuID0gTlVMTDsKKwkvKiBBbGxvY2F0ZSBOb2RlIG1hbmFnZXIgb2JqZWN0ICovCisJbm9kZV9tZ3Jfb2JqID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5vZGVfbWdyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG5vZGVfbWdyX29iaikgeworCQlub2RlX21ncl9vYmotPmhkZXZfb2JqID0gaGRldl9vYmo7CisJCW5vZGVfbWdyX29iai0+bm9kZV9saXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxzdF9saXN0KSwKKwkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJbm9kZV9tZ3Jfb2JqLT5waXBlX21hcCA9IGdiX2NyZWF0ZShNQVhQSVBFUyk7CisJCW5vZGVfbWdyX29iai0+cGlwZV9kb25lX21hcCA9IGdiX2NyZWF0ZShNQVhQSVBFUyk7CisJCWlmIChub2RlX21ncl9vYmotPm5vZGVfbGlzdCA9PSBOVUxMCisJCSAgICB8fCBub2RlX21ncl9vYmotPnBpcGVfbWFwID09IE5VTEwKKwkJICAgIHx8IG5vZGVfbWdyX29iai0+cGlwZV9kb25lX21hcCA9PSBOVUxMKSB7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQl9IGVsc2UgeworCQkJSU5JVF9MSVNUX0hFQUQoJm5vZGVfbWdyX29iai0+bm9kZV9saXN0LT5oZWFkKTsKKwkJCW5vZGVfbWdyX29iai0+bnRmeV9vYmogPSBrbWFsbG9jKAorCQkJCXNpemVvZihzdHJ1Y3QgbnRmeV9vYmplY3QpLCBHRlBfS0VSTkVMKTsKKwkJCWlmIChub2RlX21ncl9vYmotPm50Znlfb2JqKQorCQkJCW50ZnlfaW5pdChub2RlX21ncl9vYmotPm50Znlfb2JqKTsKKwkJCWVsc2UKKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCQl9CisJCW5vZGVfbWdyX29iai0+bnVtX2NyZWF0ZWQgPSAwOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJfQorCS8qIGdldCBkZXZOb2RlVHlwZSAqLworCWlmICghc3RhdHVzKQorCQlzdGF0dXMgPSBkZXZfZ2V0X2Rldl90eXBlKGhkZXZfb2JqLCAmZGV2X3R5cGUpOworCisJLyogQ3JlYXRlIHRoZSBEQ0QgTWFuYWdlciAqLworCWlmICghc3RhdHVzKSB7CisJCXN0YXR1cyA9CisJCSAgICBkY2RfY3JlYXRlX21hbmFnZXIoc3pfemxfZmlsZSwgJm5vZGVfbWdyX29iai0+aGRjZF9tZ3IpOworCQlpZiAoIXN0YXR1cykKKwkJCXN0YXR1cyA9IGdldF9wcm9jX3Byb3BzKG5vZGVfbWdyX29iaiwgaGRldl9vYmopOworCisJfQorCS8qIENyZWF0ZSBOT0RFIERpc3BhdGNoZXIgKi8KKwlpZiAoIXN0YXR1cykgeworCQlkaXNwX2F0dHJfb2JqLnVsX2Nobmxfb2Zmc2V0ID0gbm9kZV9tZ3Jfb2JqLT51bF9jaG5sX29mZnNldDsKKwkJZGlzcF9hdHRyX29iai51bF9jaG5sX2J1Zl9zaXplID0gbm9kZV9tZ3Jfb2JqLT51bF9jaG5sX2J1Zl9zaXplOworCQlkaXNwX2F0dHJfb2JqLnByb2NfZmFtaWx5ID0gbm9kZV9tZ3Jfb2JqLT5wcm9jX2ZhbWlseTsKKwkJZGlzcF9hdHRyX29iai5wcm9jX3R5cGUgPSBub2RlX21ncl9vYmotPnByb2NfdHlwZTsKKwkJc3RhdHVzID0KKwkJICAgIGRpc3BfY3JlYXRlKCZub2RlX21ncl9vYmotPmRpc3Bfb2JqLCBoZGV2X29iaiwKKwkJCQkmZGlzcF9hdHRyX29iaik7CisJfQorCS8qIENyZWF0ZSBhIFNUUk0gTWFuYWdlciAqLworCWlmICghc3RhdHVzKQorCQlzdGF0dXMgPSBzdHJtX2NyZWF0ZSgmbm9kZV9tZ3Jfb2JqLT5zdHJtX21ncl9vYmosIGhkZXZfb2JqKTsKKworCWlmICghc3RhdHVzKSB7CisJCWRldl9nZXRfaW50Zl9meG5zKGhkZXZfb2JqLCAmbm9kZV9tZ3Jfb2JqLT5pbnRmX2Z4bnMpOworCQkvKiBHZXQgbXNnX2N0cmwgcXVldWUgbWFuYWdlciAqLworCQlkZXZfZ2V0X21zZ19tZ3IoaGRldl9vYmosICZub2RlX21ncl9vYmotPm1zZ19tZ3Jfb2JqKTsKKwkJbXV0ZXhfaW5pdCgmbm9kZV9tZ3Jfb2JqLT5ub2RlX21ncl9sb2NrKTsKKwkJbm9kZV9tZ3Jfb2JqLT5jaG5sX21hcCA9IGdiX2NyZWF0ZShub2RlX21ncl9vYmotPnVsX251bV9jaG5scyk7CisJCS8qIGRtYSBjaG5sIG1hcC4gdWxfbnVtX2NobmxzIGlzICMgcGVyIHRyYW5zcG9ydCAqLworCQlub2RlX21ncl9vYmotPmRtYV9jaG5sX21hcCA9CisJCSAgICBnYl9jcmVhdGUobm9kZV9tZ3Jfb2JqLT51bF9udW1fY2hubHMpOworCQlub2RlX21ncl9vYmotPnpjX2NobmxfbWFwID0KKwkJICAgIGdiX2NyZWF0ZShub2RlX21ncl9vYmotPnVsX251bV9jaG5scyk7CisJCWlmICgobm9kZV9tZ3Jfb2JqLT5jaG5sX21hcCA9PSBOVUxMKQorCQkgICAgfHwgKG5vZGVfbWdyX29iai0+ZG1hX2NobmxfbWFwID09IE5VTEwpCisJCSAgICB8fCAobm9kZV9tZ3Jfb2JqLT56Y19jaG5sX21hcCA9PSBOVUxMKSkgeworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJfSBlbHNlIHsKKwkJCS8qIEJsb2NrIG91dCByZXNlcnZlZCBjaGFubmVscyAqLworCQkJZm9yIChpID0gMDsgaSA8IG5vZGVfbWdyX29iai0+dWxfY2hubF9vZmZzZXQ7IGkrKykKKwkJCQlnYl9zZXQobm9kZV9tZ3Jfb2JqLT5jaG5sX21hcCwgaSk7CisKKwkJCS8qIEJsb2NrIG91dCBjaGFubmVscyByZXNlcnZlZCBmb3IgUk1TICovCisJCQlnYl9zZXQobm9kZV9tZ3Jfb2JqLT5jaG5sX21hcCwKKwkJCSAgICAgICBub2RlX21ncl9vYmotPnVsX2Nobmxfb2Zmc2V0KTsKKwkJCWdiX3NldChub2RlX21ncl9vYmotPmNobmxfbWFwLAorCQkJICAgICAgIG5vZGVfbWdyX29iai0+dWxfY2hubF9vZmZzZXQgKyAxKTsKKwkJfQorCX0KKwlpZiAoIXN0YXR1cykgeworCQkvKiBOTyBSTSBTZXJ2ZXIgb24gdGhlIElWQSAqLworCQlpZiAoZGV2X3R5cGUgIT0gSVZBX1VOSVQpIHsKKwkJCS8qIEdldCBhZGRyZXNzZXMgb2YgYW55IFJNUyBmdW5jdGlvbnMgbG9hZGVkICovCisJCQlzdGF0dXMgPSBnZXRfcm1zX2Z4bnMobm9kZV9tZ3Jfb2JqKTsKKwkJfQorCX0KKworCS8qIEdldCBsb2FkZXIgZnVuY3Rpb25zIGFuZCBjcmVhdGUgbG9hZGVyICovCisJaWYgKCFzdGF0dXMpCisJCW5vZGVfbWdyX29iai0+bmxkcl9meG5zID0gbmxkcl9meG5zOwkvKiBEeW4gbG9hZGVyIGZ1bmNzICovCisKKwlpZiAoIXN0YXR1cykgeworCQlubGRyX2F0dHJzX29iai5wZm5fb3ZseSA9IG92bHk7CisJCW5sZHJfYXR0cnNfb2JqLnBmbl93cml0ZSA9IG1lbV93cml0ZTsKKwkJbmxkcl9hdHRyc19vYmoudXNfZHNwX3dvcmRfc2l6ZSA9IG5vZGVfbWdyX29iai0+dWRzcF93b3JkX3NpemU7CisJCW5sZHJfYXR0cnNfb2JqLnVzX2RzcF9tYXVfc2l6ZSA9IG5vZGVfbWdyX29iai0+dWRzcF9tYXVfc2l6ZTsKKwkJbm9kZV9tZ3Jfb2JqLT5sb2FkZXJfaW5pdCA9IG5vZGVfbWdyX29iai0+bmxkcl9meG5zLnBmbl9pbml0KCk7CisJCXN0YXR1cyA9CisJCSAgICBub2RlX21ncl9vYmotPm5sZHJfZnhucy5wZm5fY3JlYXRlKCZub2RlX21ncl9vYmotPm5sZHJfb2JqLAorCQkJCQkJICAgICAgIGhkZXZfb2JqLAorCQkJCQkJICAgICAgICZubGRyX2F0dHJzX29iaik7CisJfQorCWlmICghc3RhdHVzKQorCQkqbm9kZV9tYW4gPSBub2RlX21ncl9vYmo7CisJZWxzZQorCQlkZWxldGVfbm9kZV9tZ3Iobm9kZV9tZ3Jfb2JqKTsKKworCURCQ19FTlNVUkUoKHN0YXR1cyAmJiAqbm9kZV9tYW4gPT0gTlVMTCkgfHwgKCFzdGF0dXMgJiYgKm5vZGVfbWFuKSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IG5vZGVfZGVsZXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGVsZXRlIGEgbm9kZSBvbiB0aGUgRFNQIGJ5IHJlbW90ZWx5IGNhbGxpbmcgdGhlIG5vZGUncyBkZWxldGUgZnVuY3Rpb24uCisgKiAgICAgIExvYWRzIHRoZSBub2RlJ3MgZGVsZXRlIGZ1bmN0aW9uIGlmIG5lY2Vzc2FyeS4gRnJlZSBHUFAgc2lkZSByZXNvdXJjZXMKKyAqICAgICAgYWZ0ZXIgbm9kZSdzIGRlbGV0ZSBmdW5jdGlvbiByZXR1cm5zLgorICovCitpbnQgbm9kZV9kZWxldGUoc3RydWN0IG5vZGVfcmVzX29iamVjdCAqbm9kZXJlcywKKwkJICAgICAgIHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQpCit7CisJc3RydWN0IG5vZGVfb2JqZWN0ICpwbm9kZSA9IG5vZGVyZXMtPmhub2RlOworCXN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyOworCXN0cnVjdCBwcm9jX29iamVjdCAqaHByb2Nlc3NvcjsKKwlzdHJ1Y3QgZGlzcF9vYmplY3QgKmRpc3Bfb2JqOworCXUzMiB1bF9kZWxldGVfZnhuOworCWVudW0gbm9kZV90eXBlIG5vZGVfdHlwZTsKKwllbnVtIG5vZGVfc3RhdGUgc3RhdGU7CisJaW50IHN0YXR1cyA9IDA7CisJaW50IHN0YXR1czEgPSAwOworCXN0cnVjdCBkc3BfY2JkYXRhIGNiX2RhdGE7CisJdTMyIHByb2NfaWQ7CisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisKKwl2b2lkICpub2RlX3JlcyA9IG5vZGVyZXM7CisKKwlzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0YXRlIHByb2Nfc3RhdGU7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJaWYgKCFwbm9kZSkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwkvKiBjcmVhdGUgc3RydWN0IGRzcF9jYmRhdGEgc3RydWN0IGZvciBQV1IgY2FsbCAqLworCWNiX2RhdGEuY2JfZGF0YSA9IFBXUl9USU1FT1VUOworCWhub2RlX21nciA9IHBub2RlLT5obm9kZV9tZ3I7CisJaHByb2Nlc3NvciA9IHBub2RlLT5ocHJvY2Vzc29yOworCWRpc3Bfb2JqID0gaG5vZGVfbWdyLT5kaXNwX29iajsKKwlub2RlX3R5cGUgPSBub2RlX2dldF90eXBlKHBub2RlKTsKKwlpbnRmX2Z4bnMgPSBobm9kZV9tZ3ItPmludGZfZnhuczsKKwkvKiBFbnRlciBjcml0aWNhbCBzZWN0aW9uICovCisJbXV0ZXhfbG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKKworCXN0YXRlID0gbm9kZV9nZXRfc3RhdGUocG5vZGUpOworCS8qICBFeGVjdXRlIGRlbGV0ZSBwaGFzZSBjb2RlIGZvciBub24tZGV2aWNlIG5vZGUgaW4gYWxsIGNhc2VzCisJICogIGV4Y2VwdCB3aGVuIHRoZSBub2RlIHdhcyBvbmx5IGFsbG9jYXRlZC4gRGVsZXRlIHBoYXNlIG11c3QgYmUKKwkgKiAgZXhlY3V0ZWQgZXZlbiBpZiBjcmVhdGUgcGhhc2Ugd2FzIGV4ZWN1dGVkLCBidXQgZmFpbGVkLgorCSAqICBJZiB0aGUgbm9kZSBlbnZpcm9ubWVudCBwb2ludGVyIGlzIG5vbi1OVUxMLCB0aGUgZGVsZXRlIHBoYXNlCisJICogIGNvZGUgbXVzdCBiZSAgZXhlY3V0ZWQuICovCisJaWYgKCEoc3RhdGUgPT0gTk9ERV9BTExPQ0FURUQgJiYgcG5vZGUtPm5vZGVfZW52ID09ICh1MzIpIE5VTEwpICYmCisJICAgIG5vZGVfdHlwZSAhPSBOT0RFX0RFVklDRSkgeworCQlzdGF0dXMgPSBwcm9jX2dldF9wcm9jZXNzb3JfaWQocG5vZGUtPmhwcm9jZXNzb3IsICZwcm9jX2lkKTsKKwkJaWYgKHN0YXR1cykKKwkJCWdvdG8gZnVuY19jb250MTsKKworCQlpZiAocHJvY19pZCA9PSBEU1BfVU5JVCB8fCBwcm9jX2lkID09IElWQV9VTklUKSB7CisJCQkvKiAgSWYgbm9kZSBoYXMgdGVybWluYXRlZCwgZXhlY3V0ZSBwaGFzZSBjb2RlIHdpbGwKKwkJCSAqICBoYXZlIGFscmVhZHkgYmVlbiB1bmxvYWRlZCBpbiBub2RlX29uX2V4aXQoKS4gSWYgdGhlCisJCQkgKiAgbm9kZSBpcyBQQVVTRUQsIHRoZSBleGVjdXRlIHBoYXNlIGlzIGxvYWRlZCwgYW5kIGl0CisJCQkgKiAgaXMgbm93IG9rIHRvIHVubG9hZCBpdC4gSWYgdGhlIG5vZGUgaXMgcnVubmluZywgd2UKKwkJCSAqICB3aWxsIHVubG9hZCB0aGUgZXhlY3V0ZSBwaGFzZSBvbmx5IGFmdGVyIGRlbGV0aW5nCisJCQkgKiAgdGhlIG5vZGUuICovCisJCQlpZiAoc3RhdGUgPT0gTk9ERV9QQVVTRUQgJiYgcG5vZGUtPmxvYWRlZCAmJgorCQkJICAgIHBub2RlLT5waGFzZV9zcGxpdCkgeworCQkJCS8qIE9rIHRvIHVubG9hZCBleGVjdXRlIGNvZGUgYXMgbG9uZyBhcyBub2RlCisJCQkJICogaXMgbm90ICogcnVubmluZyAqLworCQkJCXN0YXR1czEgPQorCQkJCSAgICBobm9kZV9tZ3ItPm5sZHJfZnhucy4KKwkJCQkgICAgcGZuX3VubG9hZChwbm9kZS0+bmxkcl9ub2RlX29iaiwKKwkJCQkJICAgICAgIE5MRFJfRVhFQ1VURSk7CisJCQkJcG5vZGUtPmxvYWRlZCA9IGZhbHNlOworCQkJCU5PREVfU0VUX1NUQVRFKHBub2RlLCBOT0RFX0RPTkUpOworCQkJfQorCQkJLyogTG9hZCBkZWxldGUgcGhhc2UgY29kZSBpZiBub3QgbG9hZGVkIG9yIGlmIGhhdmVuJ3QKKwkJCSAqICogdW5sb2FkZWQgRVhFQ1VURSBwaGFzZSAqLworCQkJaWYgKCghKHBub2RlLT5sb2FkZWQpIHx8IChzdGF0ZSA9PSBOT0RFX1JVTk5JTkcpKSAmJgorCQkJICAgIHBub2RlLT5waGFzZV9zcGxpdCkgeworCQkJCXN0YXR1cyA9CisJCQkJICAgIGhub2RlX21nci0+bmxkcl9meG5zLgorCQkJCSAgICBwZm5fbG9hZChwbm9kZS0+bmxkcl9ub2RlX29iaiwgTkxEUl9ERUxFVEUpOworCQkJCWlmICghc3RhdHVzKQorCQkJCQlwbm9kZS0+bG9hZGVkID0gdHJ1ZTsKKwkJCQllbHNlCisJCQkJCXByX2VycigiJXM6IGZhaWwgLSBsb2FkIGRlbGV0ZSBjb2RlOiIKKwkJCQkJICAgICAgICIgMHgleFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJCQl9CisJCX0KK2Z1bmNfY29udDE6CisJCWlmICghc3RhdHVzKSB7CisJCQkvKiBVbmJsb2NrIGEgdGhyZWFkIHRyeWluZyB0byB0ZXJtaW5hdGUgdGhlIG5vZGUgKi8KKwkJCSh2b2lkKXN5bmNfc2V0X2V2ZW50KHBub2RlLT5zeW5jX2RvbmUpOworCQkJaWYgKHByb2NfaWQgPT0gRFNQX1VOSVQpIHsKKwkJCQkvKiB1bF9kZWxldGVfZnhuID0gYWRkcmVzcyBvZiBub2RlJ3MgZGVsZXRlCisJCQkJICogZnVuY3Rpb24gKi8KKwkJCQlzdGF0dXMgPSBnZXRfZnhuX2FkZHJlc3MocG5vZGUsICZ1bF9kZWxldGVfZnhuLAorCQkJCQkJCSBERUxFVEVQSEFTRSk7CisJCQl9IGVsc2UgaWYgKHByb2NfaWQgPT0gSVZBX1VOSVQpCisJCQkJdWxfZGVsZXRlX2Z4biA9ICh1MzIpIHBub2RlLT5ub2RlX2VudjsKKwkJCWlmICghc3RhdHVzKSB7CisJCQkJc3RhdHVzID0gcHJvY19nZXRfc3RhdGUoaHByb2Nlc3NvciwKKwkJCQkJCSZwcm9jX3N0YXRlLAorCQkJCQkJc2l6ZW9mKHN0cnVjdAorCQkJCQkJICAgICAgIGRzcF9wcm9jZXNzb3JzdGF0ZSkpOworCQkJCWlmIChwcm9jX3N0YXRlLnByb2Nfc3RhdGUgIT0gUFJPQ19FUlJPUikgeworCQkJCQlzdGF0dXMgPQorCQkJCQkgICAgZGlzcF9ub2RlX2RlbGV0ZShkaXNwX29iaiwgcG5vZGUsCisJCQkJCQkJICAgICBobm9kZV9tZ3ItPgorCQkJCQkJCSAgICAgdWxfZnhuX2FkZHJzCisJCQkJCQkJICAgICBbUk1TREVMRVRFTk9ERV0sCisJCQkJCQkJICAgICB1bF9kZWxldGVfZnhuLAorCQkJCQkJCSAgICAgcG5vZGUtPm5vZGVfZW52KTsKKwkJCQl9IGVsc2UKKwkJCQkJTk9ERV9TRVRfU1RBVEUocG5vZGUsIE5PREVfRE9ORSk7CisKKwkJCQkvKiBVbmxvYWQgZXhlY3V0ZSwgaWYgbm90IHVubG9hZGVkLCBhbmQgZGVsZXRlCisJCQkJICogZnVuY3Rpb24gKi8KKwkJCQlpZiAoc3RhdGUgPT0gTk9ERV9SVU5OSU5HICYmCisJCQkJICAgIHBub2RlLT5waGFzZV9zcGxpdCkgeworCQkJCQlzdGF0dXMxID0KKwkJCQkJICAgIGhub2RlX21nci0+bmxkcl9meG5zLgorCQkJCQkgICAgcGZuX3VubG9hZChwbm9kZS0+bmxkcl9ub2RlX29iaiwKKwkJCQkJCSAgICAgICBOTERSX0VYRUNVVEUpOworCQkJCX0KKwkJCQlpZiAoc3RhdHVzMSkKKwkJCQkJcHJfZXJyKCIlczogZmFpbCAtIHVubG9hZCBleGVjdXRlIGNvZGU6IgorCQkJCQkgICAgICAgIiAweCV4XG4iLCBfX2Z1bmNfXywgc3RhdHVzMSk7CisKKwkJCQlzdGF0dXMxID0KKwkJCQkgICAgaG5vZGVfbWdyLT5ubGRyX2Z4bnMucGZuX3VubG9hZChwbm9kZS0+CisJCQkJCQkJICAgIG5sZHJfbm9kZV9vYmosCisJCQkJCQkJICAgIE5MRFJfREVMRVRFKTsKKwkJCQlwbm9kZS0+bG9hZGVkID0gZmFsc2U7CisJCQkJaWYgKHN0YXR1czEpCisJCQkJCXByX2VycigiJXM6IGZhaWwgLSB1bmxvYWQgZGVsZXRlIGNvZGU6ICIKKwkJCQkJICAgICAgICIweCV4XG4iLCBfX2Z1bmNfXywgc3RhdHVzMSk7CisJCQl9CisJCX0KKwl9CisJLyogRnJlZSBob3N0IHNpZGUgcmVzb3VyY2VzIGV2ZW4gaWYgYSBmYWlsdXJlIG9jY3VycmVkICovCisJLyogUmVtb3ZlIG5vZGUgZnJvbSBobm9kZV9tZ3ItPm5vZGVfbGlzdCAqLworCWxzdF9yZW1vdmVfZWxlbShobm9kZV9tZ3ItPm5vZGVfbGlzdCwgKHN0cnVjdCBsaXN0X2hlYWQgKilwbm9kZSk7CisJaG5vZGVfbWdyLT5udW1fbm9kZXMtLTsKKwkvKiBEZWNyZW1lbnQgY291bnQgb2Ygbm9kZXMgY3JlYXRlZCBvbiBEU1AgKi8KKwlpZiAoKHN0YXRlICE9IE5PREVfQUxMT0NBVEVEKSB8fCAoKHN0YXRlID09IE5PREVfQUxMT0NBVEVEKSAmJgorCQkJCQkgIChwbm9kZS0+bm9kZV9lbnYgIT0gKHUzMikgTlVMTCkpKQorCQlobm9kZV9tZ3ItPm51bV9jcmVhdGVkLS07CisJLyogIEZyZWUgaG9zdC1zaWRlIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgbm9kZV9jcmVhdGUoKQorCSAqICBkZWxldGVfbm9kZSgpIGZhaWxzIGlmIFNNIGJ1ZmZlcnMgbm90IGZyZWVkIGJ5IGNsaWVudCEgKi8KKwlkcnZfcHJvY19ub2RlX3VwZGF0ZV9zdGF0dXMobm9kZV9yZXMsIGZhbHNlKTsKKwlkZWxldGVfbm9kZShwbm9kZSwgcHJfY3R4dCk7CisKKwkvKgorCSAqIFJlbGVhc2UgYWxsIE5vZGUgcmVzb3VyY2VzIGFuZCBpdHMgY29udGV4dAorCSAqLworCWlkcl9yZW1vdmUocHJfY3R4dC0+bm9kZV9pZCwgKChzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICopbm9kZV9yZXMpLT5pZCk7CisJa2ZyZWUobm9kZV9yZXMpOworCisJLyogRXhpdCBjcml0aWNhbCBzZWN0aW9uICovCisJbXV0ZXhfdW5sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOworCXByb2Nfbm90aWZ5X2NsaWVudHMoaHByb2Nlc3NvciwgRFNQX05PREVTVEFURUNIQU5HRSk7CitmdW5jX2VuZDoKKwlkZXZfZGJnKGJyaWRnZSwgIiVzOiBwbm9kZTogJXAgc3RhdHVzIDB4JXhcbiIsIF9fZnVuY19fLCBwbm9kZSwgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IG5vZGVfZGVsZXRlX21nciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERlbGV0ZSB0aGUgTk9ERSBNYW5hZ2VyLgorICovCitpbnQgbm9kZV9kZWxldGVfbWdyKHN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyKQoreworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJaWYgKGhub2RlX21ncikKKwkJZGVsZXRlX25vZGVfbWdyKGhub2RlX21ncik7CisJZWxzZQorCQlzdGF0dXMgPSAtRUZBVUxUOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBub2RlX2VudW1fbm9kZXMgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBFbnVtZXJhdGUgY3VycmVudGx5IGFsbG9jYXRlZCBub2Rlcy4KKyAqLworaW50IG5vZGVfZW51bV9ub2RlcyhzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21nciwgdm9pZCAqKm5vZGVfdGFiLAorCQkJICAgdTMyIG5vZGVfdGFiX3NpemUsIHUzMiAqcHVfbnVtX25vZGVzLAorCQkJICAgdTMyICpwdV9hbGxvY2F0ZWQpCit7CisJc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZTsKKwl1MzIgaTsKKwlpbnQgc3RhdHVzID0gMDsKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUobm9kZV90YWIgIT0gTlVMTCB8fCBub2RlX3RhYl9zaXplID09IDApOworCURCQ19SRVFVSVJFKHB1X251bV9ub2RlcyAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShwdV9hbGxvY2F0ZWQgIT0gTlVMTCk7CisKKwlpZiAoIWhub2RlX21ncikgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwkvKiBFbnRlciBjcml0aWNhbCBzZWN0aW9uICovCisJbXV0ZXhfbG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKKworCWlmIChobm9kZV9tZ3ItPm51bV9ub2RlcyA+IG5vZGVfdGFiX3NpemUpIHsKKwkJKnB1X2FsbG9jYXRlZCA9IGhub2RlX21nci0+bnVtX25vZGVzOworCQkqcHVfbnVtX25vZGVzID0gMDsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlobm9kZSA9IChzdHJ1Y3Qgbm9kZV9vYmplY3QgKilsc3RfZmlyc3QoaG5vZGVfbWdyLT4KKwkJCW5vZGVfbGlzdCk7CisJCWZvciAoaSA9IDA7IGkgPCBobm9kZV9tZ3ItPm51bV9ub2RlczsgaSsrKSB7CisJCQlEQkNfQVNTRVJUKGhub2RlKTsKKwkJCW5vZGVfdGFiW2ldID0gaG5vZGU7CisJCQlobm9kZSA9IChzdHJ1Y3Qgbm9kZV9vYmplY3QgKilsc3RfbmV4dAorCQkJCShobm9kZV9tZ3ItPm5vZGVfbGlzdCwKKwkJCQkoc3RydWN0IGxpc3RfaGVhZCAqKWhub2RlKTsKKwkJfQorCQkqcHVfYWxsb2NhdGVkID0gKnB1X251bV9ub2RlcyA9IGhub2RlX21nci0+bnVtX25vZGVzOworCX0KKwkvKiBlbmQgb2Ygc3luY19lbnRlcl9jcyAqLworCS8qIEV4aXQgY3JpdGljYWwgc2VjdGlvbiAqLworCW11dGV4X3VubG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKK2Z1bmNfZW5kOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9leGl0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGlzY29udGludWUgdXNhZ2Ugb2YgTk9ERSBtb2R1bGUuCisgKi8KK3ZvaWQgbm9kZV9leGl0KHZvaWQpCit7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJcmVmcy0tOworCisJREJDX0VOU1VSRShyZWZzID49IDApOworfQorCisvKgorICogID09PT09PT09IG5vZGVfZnJlZV9tc2dfYnVmID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRnJlZXMgdGhlIG1lc3NhZ2UgYnVmZmVyLgorICovCitpbnQgbm9kZV9mcmVlX21zZ19idWYoc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwgdTggKiBwYnVmZmVyLAorCQkJICAgICBzdHJ1Y3QgZHNwX2J1ZmZlcmF0dHIgKnBhdHRyKQoreworCXN0cnVjdCBub2RlX29iamVjdCAqcG5vZGUgPSAoc3RydWN0IG5vZGVfb2JqZWN0ICopaG5vZGU7CisJaW50IHN0YXR1cyA9IDA7CisJdTMyIHByb2NfaWQ7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKHBidWZmZXIgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUocG5vZGUgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUocG5vZGUtPnhsYXRvciAhPSBOVUxMKTsKKworCWlmICghaG5vZGUpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJc3RhdHVzID0gcHJvY19nZXRfcHJvY2Vzc29yX2lkKHBub2RlLT5ocHJvY2Vzc29yLCAmcHJvY19pZCk7CisJaWYgKHByb2NfaWQgPT0gRFNQX1VOSVQpIHsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCWlmIChwYXR0ciA9PSBOVUxMKSB7CisJCQkJLyogc2V0IGRlZmF1bHRzICovCisJCQkJcGF0dHIgPSAmbm9kZV9kZmx0YnVmYXR0cnM7CisJCQl9CisJCQkvKiBOb2RlIHN1cHBvcnRzIHNpbmdsZSBTTSBzZWdtZW50IG9ubHkgKi8KKwkJCWlmIChwYXR0ci0+c2VnbWVudF9pZCAhPSAxKQorCQkJCXN0YXR1cyA9IC1FQkFEUjsKKworCQkJLyogcGJ1ZmZlciBpcyBjbGllbnRzIFZhLiAqLworCQkJc3RhdHVzID0gY21tX3hsYXRvcl9mcmVlX2J1Zihwbm9kZS0+eGxhdG9yLCBwYnVmZmVyKTsKKwkJfQorCX0gZWxzZSB7CisJCURCQ19BU1NFUlQoTlVMTCk7CS8qIEJVRyAqLworCX0KK2Z1bmNfZW5kOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9nZXRfYXR0ciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENvcHkgdGhlIGN1cnJlbnQgYXR0cmlidXRlcyBvZiB0aGUgc3BlY2lmaWVkIG5vZGUgaW50byBhIGRzcF9ub2RlYXR0cgorICogICAgICBzdHJ1Y3R1cmUuCisgKi8KK2ludCBub2RlX2dldF9hdHRyKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQkgc3RydWN0IGRzcF9ub2RlYXR0ciAqcGF0dHIsIHUzMiBhdHRyX3NpemUpCit7CisJc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3I7CisJaW50IHN0YXR1cyA9IDA7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKHBhdHRyICE9IE5VTEwpOworCURCQ19SRVFVSVJFKGF0dHJfc2l6ZSA+PSBzaXplb2Yoc3RydWN0IGRzcF9ub2RlYXR0cikpOworCisJaWYgKCFobm9kZSkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCX0gZWxzZSB7CisJCWhub2RlX21nciA9IGhub2RlLT5obm9kZV9tZ3I7CisJCS8qIEVudGVyIGhub2RlX21nciBjcml0aWNhbCBzZWN0aW9uIChzaW5jZSB3ZSdyZSBhY2Nlc3NpbmcKKwkJICogZGF0YSB0aGF0IGNvdWxkIGJlIGNoYW5nZWQgYnkgbm9kZV9jaGFuZ2VfcHJpb3JpdHkoKSBhbmQKKwkJICogbm9kZV9jb25uZWN0KCkuICovCisJCW11dGV4X2xvY2soJmhub2RlX21nci0+bm9kZV9tZ3JfbG9jayk7CisJCXBhdHRyLT5jYl9zdHJ1Y3QgPSBzaXplb2Yoc3RydWN0IGRzcF9ub2RlYXR0cik7CisJCS8qIGRzcF9ub2RlYXR0cmluICovCisJCXBhdHRyLT5pbl9ub2RlX2F0dHJfaW4uY2Jfc3RydWN0ID0KKwkJCQkgc2l6ZW9mKHN0cnVjdCBkc3Bfbm9kZWF0dHJpbik7CisJCXBhdHRyLT5pbl9ub2RlX2F0dHJfaW4ucHJpbyA9IGhub2RlLT5wcmlvOworCQlwYXR0ci0+aW5fbm9kZV9hdHRyX2luLnV0aW1lb3V0ID0gaG5vZGUtPnV0aW1lb3V0OworCQlwYXR0ci0+aW5fbm9kZV9hdHRyX2luLmhlYXBfc2l6ZSA9CisJCQlobm9kZS0+Y3JlYXRlX2FyZ3MuYXNhLnRhc2tfYXJnX29iai5oZWFwX3NpemU7CisJCXBhdHRyLT5pbl9ub2RlX2F0dHJfaW4ucGdwcF92aXJ0X2FkZHIgPSAodm9pZCAqKQorCQkJaG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS50YXNrX2FyZ19vYmoudWdwcF9oZWFwX2FkZHI7CisJCXBhdHRyLT5ub2RlX2F0dHJfaW5wdXRzID0gaG5vZGUtPm51bV9ncHBfaW5wdXRzOworCQlwYXR0ci0+bm9kZV9hdHRyX291dHB1dHMgPSBobm9kZS0+bnVtX2dwcF9vdXRwdXRzOworCQkvKiBkc3Bfbm9kZWluZm8gKi8KKwkJZ2V0X25vZGVfaW5mbyhobm9kZSwgJihwYXR0ci0+bm9kZV9pbmZvKSk7CisJCS8qIGVuZCBvZiBzeW5jX2VudGVyX2NzICovCisJCS8qIEV4aXQgY3JpdGljYWwgc2VjdGlvbiAqLworCQltdXRleF91bmxvY2soJmhub2RlX21nci0+bm9kZV9tZ3JfbG9jayk7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9nZXRfY2hhbm5lbF9pZCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEdldCB0aGUgY2hhbm5lbCBpbmRleCByZXNlcnZlZCBmb3IgYSBzdHJlYW0gY29ubmVjdGlvbiBiZXR3ZWVuIHRoZQorICogICAgICBob3N0IGFuZCBhIG5vZGUuCisgKi8KK2ludCBub2RlX2dldF9jaGFubmVsX2lkKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsIHUzMiBkaXIsIHUzMiBpbmRleCwKKwkJCSAgICAgICB1MzIgKmNoYW5faWQpCit7CisJZW51bSBub2RlX3R5cGUgbm9kZV90eXBlOworCWludCBzdGF0dXMgPSAtRUlOVkFMOworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShkaXIgPT0gRFNQX1RPTk9ERSB8fCBkaXIgPT0gRFNQX0ZST01OT0RFKTsKKwlEQkNfUkVRVUlSRShjaGFuX2lkICE9IE5VTEwpOworCisJaWYgKCFobm9kZSkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlyZXR1cm4gc3RhdHVzOworCX0KKwlub2RlX3R5cGUgPSBub2RlX2dldF90eXBlKGhub2RlKTsKKwlpZiAobm9kZV90eXBlICE9IE5PREVfVEFTSyAmJiBub2RlX3R5cGUgIT0gTk9ERV9EQUlTU09DS0VUKSB7CisJCXN0YXR1cyA9IC1FUEVSTTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJaWYgKGRpciA9PSBEU1BfVE9OT0RFKSB7CisJCWlmIChpbmRleCA8IE1BWF9JTlBVVFMoaG5vZGUpKSB7CisJCQlpZiAoaG5vZGUtPmlucHV0c1tpbmRleF0udHlwZSA9PSBIT1NUQ09OTkVDVCkgeworCQkJCSpjaGFuX2lkID0gaG5vZGUtPmlucHV0c1tpbmRleF0uZGV2X2lkOworCQkJCXN0YXR1cyA9IDA7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlEQkNfQVNTRVJUKGRpciA9PSBEU1BfRlJPTU5PREUpOworCQlpZiAoaW5kZXggPCBNQVhfT1VUUFVUUyhobm9kZSkpIHsKKwkJCWlmIChobm9kZS0+b3V0cHV0c1tpbmRleF0udHlwZSA9PSBIT1NUQ09OTkVDVCkgeworCQkJCSpjaGFuX2lkID0gaG5vZGUtPm91dHB1dHNbaW5kZXhdLmRldl9pZDsKKwkJCQlzdGF0dXMgPSAwOworCQkJfQorCQl9CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9nZXRfbWVzc2FnZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIGEgbWVzc2FnZSBmcm9tIGEgbm9kZSBvbiB0aGUgRFNQLgorICovCitpbnQgbm9kZV9nZXRfbWVzc2FnZShzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLAorCQkJICAgIHN0cnVjdCBkc3BfbXNnICptZXNzYWdlLCB1MzIgdXRpbWVvdXQpCit7CisJc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3I7CisJZW51bSBub2RlX3R5cGUgbm9kZV90eXBlOworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCWludCBzdGF0dXMgPSAwOworCXZvaWQgKnRtcF9idWY7CisJc3RydWN0IGRzcF9wcm9jZXNzb3JzdGF0ZSBwcm9jX3N0YXRlOworCXN0cnVjdCBwcm9jX29iamVjdCAqaHByb2Nlc3NvcjsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShtZXNzYWdlICE9IE5VTEwpOworCisJaWYgKCFobm9kZSkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlocHJvY2Vzc29yID0gaG5vZGUtPmhwcm9jZXNzb3I7CisJc3RhdHVzID0gcHJvY19nZXRfc3RhdGUoaHByb2Nlc3NvciwgJnByb2Nfc3RhdGUsCisJCQkJc2l6ZW9mKHN0cnVjdCBkc3BfcHJvY2Vzc29yc3RhdGUpKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCS8qIElmIHByb2Nlc3NvciBpcyBpbiBlcnJvciBzdGF0ZSB0aGVuIGRvbid0IGF0dGVtcHQgdG8gZ2V0IHRoZQorCSAgIG1lc3NhZ2UgKi8KKwlpZiAocHJvY19zdGF0ZS5wcm9jX3N0YXRlID09IFBST0NfRVJST1IpIHsKKwkJc3RhdHVzID0gLUVQRVJNOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlobm9kZV9tZ3IgPSBobm9kZS0+aG5vZGVfbWdyOworCW5vZGVfdHlwZSA9IG5vZGVfZ2V0X3R5cGUoaG5vZGUpOworCWlmIChub2RlX3R5cGUgIT0gTk9ERV9NRVNTQUdFICYmIG5vZGVfdHlwZSAhPSBOT0RFX1RBU0sgJiYKKwkgICAgbm9kZV90eXBlICE9IE5PREVfREFJU1NPQ0tFVCkgeworCQlzdGF0dXMgPSAtRVBFUk07CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCS8qICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdW5sZXNzIGEgbWVzc2FnZSBpcyBhdmFpbGFibGUuIFNpbmNlCisJICogIERTUE5vZGVfUmVnaXN0ZXJOb3RpZnkoKSBhbGxvd3Mgbm90aWZpY2F0aW9uIHdoZW4gYSBtZXNzYWdlCisJICogIGlzIGF2YWlsYWJsZSwgdGhlIHN5c3RlbSBjYW4gYmUgZGVzaWduZWQgc28gdGhhdAorCSAqICBEU1BOb2RlX0dldE1lc3NhZ2UoKSBpcyBvbmx5IGNhbGxlZCB3aGVuIGEgbWVzc2FnZSBpcworCSAqICBhdmFpbGFibGUuICovCisJaW50Zl9meG5zID0gaG5vZGVfbWdyLT5pbnRmX2Z4bnM7CisJc3RhdHVzID0KKwkgICAgKCppbnRmX2Z4bnMtPnBmbl9tc2dfZ2V0KSAoaG5vZGUtPm1zZ19xdWV1ZV9vYmosIG1lc3NhZ2UsIHV0aW1lb3V0KTsKKwkvKiBDaGVjayBpZiBtZXNzYWdlIGNvbnRhaW5zIFNNIGRlc2NyaXB0b3IgKi8KKwlpZiAoc3RhdHVzIHx8ICEobWVzc2FnZS0+ZHdfY21kICYgRFNQX1JNU0JVRkRFU0MpKQorCQlnb3RvIGZ1bmNfZW5kOworCisJLyogVHJhbnNsYXRlIERTUCBieXRlIGFkZHIgdG8gR1BQIFZhLiAqLworCXRtcF9idWYgPSBjbW1feGxhdG9yX3RyYW5zbGF0ZShobm9kZS0+eGxhdG9yLAorCQkJCSAgICAgICAodm9pZCAqKShtZXNzYWdlLT5kd19hcmcxICoKKwkJCQkJCWhub2RlLT5obm9kZV9tZ3ItPgorCQkJCQkJdWRzcF93b3JkX3NpemUpLCBDTU1fRFNQUEEyUEEpOworCWlmICh0bXBfYnVmICE9IE5VTEwpIHsKKwkJLyogbm93IGNvbnZlcnQgdGhpcyBHUFAgUGEgdG8gVmEgKi8KKwkJdG1wX2J1ZiA9IGNtbV94bGF0b3JfdHJhbnNsYXRlKGhub2RlLT54bGF0b3IsIHRtcF9idWYsCisJCQkJCSAgICAgICBDTU1fUEEyVkEpOworCQlpZiAodG1wX2J1ZiAhPSBOVUxMKSB7CisJCQkvKiBBZGp1c3QgU00gc2l6ZSBpbiBtc2cgKi8KKwkJCW1lc3NhZ2UtPmR3X2FyZzEgPSAodTMyKSB0bXBfYnVmOworCQkJbWVzc2FnZS0+ZHdfYXJnMiAqPSBobm9kZS0+aG5vZGVfbWdyLT51ZHNwX3dvcmRfc2l6ZTsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IC1FU1JDSDsKKwkJfQorCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FU1JDSDsKKwl9CitmdW5jX2VuZDoKKwlkZXZfZGJnKGJyaWRnZSwgIiVzOiBobm9kZTogJXAgbWVzc2FnZTogJXAgdXRpbWVvdXQ6IDB4JXhcbiIsIF9fZnVuY19fLAorCQlobm9kZSwgbWVzc2FnZSwgdXRpbWVvdXQpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgID09PT09PT09IG5vZGVfZ2V0X25sZHJfb2JqID09PT09PT09CisgKi8KK2ludCBub2RlX2dldF9ubGRyX29iaihzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21nciwKKwkJCSAgICAgc3RydWN0IG5sZHJfb2JqZWN0ICoqbmxkcl9vdmx5b2JqKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBub2RlX21nciAqbm9kZV9tZ3Jfb2JqID0gaG5vZGVfbWdyOworCURCQ19SRVFVSVJFKG5sZHJfb3ZseW9iaiAhPSBOVUxMKTsKKworCWlmICghaG5vZGVfbWdyKQorCQlzdGF0dXMgPSAtRUZBVUxUOworCWVsc2UKKwkJKm5sZHJfb3ZseW9iaiA9IG5vZGVfbWdyX29iai0+bmxkcl9vYmo7CisKKwlEQkNfRU5TVVJFKCFzdGF0dXMgfHwgKG5sZHJfb3ZseW9iaiAhPSBOVUxMICYmICpubGRyX292bHlvYmogPT0gTlVMTCkpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9nZXRfc3RybV9tZ3IgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXR1cm5zIHRoZSBTdHJlYW0gbWFuYWdlci4KKyAqLworaW50IG5vZGVfZ2V0X3N0cm1fbWdyKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQkgICAgIHN0cnVjdCBzdHJtX21nciAqKnN0cm1fbWFuKQoreworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJaWYgKCFobm9kZSkKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwllbHNlCisJCSpzdHJtX21hbiA9IGhub2RlLT5obm9kZV9tZ3ItPnN0cm1fbWdyX29iajsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9nZXRfbG9hZF90eXBlID09PT09PT09CisgKi8KK2VudW0gbmxkcl9sb2FkdHlwZSBub2RlX2dldF9sb2FkX3R5cGUoc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSkKK3sKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoaG5vZGUpOworCWlmICghaG5vZGUpIHsKKwkJZGV2X2RiZyhicmlkZ2UsICIlczogRmFpbGVkLiBobm9kZTogJXBcbiIsIF9fZnVuY19fLCBobm9kZSk7CisJCXJldHVybiAtMTsKKwl9IGVsc2UgeworCQlyZXR1cm4gaG5vZGUtPmRjZF9wcm9wcy5vYmpfZGF0YS5ub2RlX29iai51c19sb2FkX3R5cGU7CisJfQorfQorCisvKgorICogID09PT09PT09IG5vZGVfZ2V0X3RpbWVvdXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXR1cm5zIHRoZSB0aW1lb3V0IHZhbHVlIGZvciB0aGlzIG5vZGUuCisgKi8KK3UzMiBub2RlX2dldF90aW1lb3V0KHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUpCit7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGhub2RlKTsKKwlpZiAoIWhub2RlKSB7CisJCWRldl9kYmcoYnJpZGdlLCAiJXM6IGZhaWxlZC4gaG5vZGU6ICVwXG4iLCBfX2Z1bmNfXywgaG5vZGUpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gaG5vZGUtPnV0aW1lb3V0OworCX0KK30KKworLyoKKyAqICA9PT09PT09PSBub2RlX2dldF90eXBlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0dXJucyB0aGUgbm9kZSB0eXBlLgorICovCitlbnVtIG5vZGVfdHlwZSBub2RlX2dldF90eXBlKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUpCit7CisJZW51bSBub2RlX3R5cGUgbm9kZV90eXBlOworCisJaWYgKGhub2RlID09IChzdHJ1Y3Qgbm9kZV9vYmplY3QgKilEU1BfSEdQUE5PREUpCisJCW5vZGVfdHlwZSA9IE5PREVfR1BQOworCWVsc2UgeworCQlpZiAoIWhub2RlKQorCQkJbm9kZV90eXBlID0gLTE7CisJCWVsc2UKKwkJCW5vZGVfdHlwZSA9IGhub2RlLT5udHlwZTsKKwl9CisJcmV0dXJuIG5vZGVfdHlwZTsKK30KKworLyoKKyAqICA9PT09PT09PSBub2RlX2luaXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplIHRoZSBOT0RFIG1vZHVsZS4KKyAqLworYm9vbCBub2RlX2luaXQodm9pZCkKK3sKKwlEQkNfUkVRVUlSRShyZWZzID49IDApOworCisJcmVmcysrOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9vbl9leGl0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgR2V0cyBjYWxsZWQgd2hlbiBSTVNfRVhJVCBpcyByZWNlaXZlZCBmb3IgYSBub2RlLgorICovCit2b2lkIG5vZGVfb25fZXhpdChzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLCBzMzIgbm9kZV9zdGF0dXMpCit7CisJaWYgKCFobm9kZSkKKwkJcmV0dXJuOworCisJLyogU2V0IG5vZGUgc3RhdGUgdG8gZG9uZSAqLworCU5PREVfU0VUX1NUQVRFKGhub2RlLCBOT0RFX0RPTkUpOworCWhub2RlLT5leGl0X3N0YXR1cyA9IG5vZGVfc3RhdHVzOworCWlmIChobm9kZS0+bG9hZGVkICYmIGhub2RlLT5waGFzZV9zcGxpdCkgeworCQkodm9pZClobm9kZS0+aG5vZGVfbWdyLT5ubGRyX2Z4bnMucGZuX3VubG9hZChobm9kZS0+CisJCQkJCQkJICAgICBubGRyX25vZGVfb2JqLAorCQkJCQkJCSAgICAgTkxEUl9FWEVDVVRFKTsKKwkJaG5vZGUtPmxvYWRlZCA9IGZhbHNlOworCX0KKwkvKiBVbmJsb2NrIGNhbGwgdG8gbm9kZV90ZXJtaW5hdGUgKi8KKwkodm9pZClzeW5jX3NldF9ldmVudChobm9kZS0+c3luY19kb25lKTsKKwkvKiBOb3RpZnkgY2xpZW50cyAqLworCXByb2Nfbm90aWZ5X2NsaWVudHMoaG5vZGUtPmhwcm9jZXNzb3IsIERTUF9OT0RFU1RBVEVDSEFOR0UpOworCW50Znlfbm90aWZ5KGhub2RlLT5udGZ5X29iaiwgRFNQX05PREVTVEFURUNIQU5HRSk7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9wYXVzZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFN1c3BlbmQgZXhlY3V0aW9uIG9mIGEgbm9kZSBjdXJyZW50bHkgcnVubmluZyBvbiB0aGUgRFNQLgorICovCitpbnQgbm9kZV9wYXVzZShzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlKQoreworCXN0cnVjdCBub2RlX29iamVjdCAqcG5vZGUgPSAoc3RydWN0IG5vZGVfb2JqZWN0ICopaG5vZGU7CisJZW51bSBub2RlX3R5cGUgbm9kZV90eXBlOworCWVudW0gbm9kZV9zdGF0ZSBzdGF0ZTsKKwlzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21ncjsKKwlpbnQgc3RhdHVzID0gMDsKKwl1MzIgcHJvY19pZDsKKwlzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0YXRlIHByb2Nfc3RhdGU7CisJc3RydWN0IHByb2Nfb2JqZWN0ICpocHJvY2Vzc29yOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJaWYgKCFobm9kZSkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCX0gZWxzZSB7CisJCW5vZGVfdHlwZSA9IG5vZGVfZ2V0X3R5cGUoaG5vZGUpOworCQlpZiAobm9kZV90eXBlICE9IE5PREVfVEFTSyAmJiBub2RlX3R5cGUgIT0gTk9ERV9EQUlTU09DS0VUKQorCQkJc3RhdHVzID0gLUVQRVJNOworCX0KKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJc3RhdHVzID0gcHJvY19nZXRfcHJvY2Vzc29yX2lkKHBub2RlLT5ocHJvY2Vzc29yLCAmcHJvY19pZCk7CisKKwlpZiAocHJvY19pZCA9PSBJVkFfVU5JVCkKKwkJc3RhdHVzID0gLUVOT1NZUzsKKworCWlmICghc3RhdHVzKSB7CisJCWhub2RlX21nciA9IGhub2RlLT5obm9kZV9tZ3I7CisKKwkJLyogRW50ZXIgY3JpdGljYWwgc2VjdGlvbiAqLworCQltdXRleF9sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOworCQlzdGF0ZSA9IG5vZGVfZ2V0X3N0YXRlKGhub2RlKTsKKwkJLyogQ2hlY2sgbm9kZSBzdGF0ZSAqLworCQlpZiAoc3RhdGUgIT0gTk9ERV9SVU5OSU5HKQorCQkJc3RhdHVzID0gLUVCQURSOworCisJCWlmIChzdGF0dXMpCisJCQlnb3RvIGZ1bmNfY29udDsKKwkJaHByb2Nlc3NvciA9IGhub2RlLT5ocHJvY2Vzc29yOworCQlzdGF0dXMgPSBwcm9jX2dldF9zdGF0ZShocHJvY2Vzc29yLCAmcHJvY19zdGF0ZSwKKwkJCQlzaXplb2Yoc3RydWN0IGRzcF9wcm9jZXNzb3JzdGF0ZSkpOworCQlpZiAoc3RhdHVzKQorCQkJZ290byBmdW5jX2NvbnQ7CisJCS8qIElmIHByb2Nlc3NvciBpcyBpbiBlcnJvciBzdGF0ZSB0aGVuIGRvbid0IGF0dGVtcHQKKwkJICAgdG8gc2VuZCB0aGUgbWVzc2FnZSAqLworCQlpZiAocHJvY19zdGF0ZS5wcm9jX3N0YXRlID09IFBST0NfRVJST1IpIHsKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCWdvdG8gZnVuY19jb250OworCQl9CisKKwkJc3RhdHVzID0gZGlzcF9ub2RlX2NoYW5nZV9wcmlvcml0eShobm9kZV9tZ3ItPmRpc3Bfb2JqLCBobm9kZSwKKwkJCWhub2RlX21nci0+dWxfZnhuX2FkZHJzW1JNU0NIQU5HRU5PREVQUklPUklUWV0sCisJCQlobm9kZS0+bm9kZV9lbnYsIE5PREVfU1VTUEVOREVEUFJJKTsKKworCQkvKiBVcGRhdGUgc3RhdGUgKi8KKwkJaWYgKHN0YXR1cyA+PSAwKQorCQkJTk9ERV9TRVRfU1RBVEUoaG5vZGUsIE5PREVfUEFVU0VEKTsKKworZnVuY19jb250OgorCQkvKiBFbmQgb2Ygc3luY19lbnRlcl9jcyAqLworCQkvKiBMZWF2ZSBjcml0aWNhbCBzZWN0aW9uICovCisJCW11dGV4X3VubG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKKwkJaWYgKHN0YXR1cyA+PSAwKSB7CisJCQlwcm9jX25vdGlmeV9jbGllbnRzKGhub2RlLT5ocHJvY2Vzc29yLAorCQkJCQkgICAgRFNQX05PREVTVEFURUNIQU5HRSk7CisJCQludGZ5X25vdGlmeShobm9kZS0+bnRmeV9vYmosIERTUF9OT0RFU1RBVEVDSEFOR0UpOworCQl9CisJfQorZnVuY19lbmQ6CisJZGV2X2RiZyhicmlkZ2UsICIlczogaG5vZGU6ICVwIHN0YXR1cyAweCV4XG4iLCBfX2Z1bmNfXywgaG5vZGUsIHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBub2RlX3B1dF9tZXNzYWdlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgU2VuZCBhIG1lc3NhZ2UgdG8gYSBtZXNzYWdlIG5vZGUsIHRhc2sgbm9kZSwgb3IgWERBSVMgc29ja2V0IG5vZGUuIFRoaXMKKyAqICAgICAgZnVuY3Rpb24gd2lsbCBibG9jayB1bnRpbCB0aGUgbWVzc2FnZSBzdHJlYW0gY2FuIGFjY29tbW9kYXRlIHRoZQorICogICAgICBtZXNzYWdlLCBvciBhIHRpbWVvdXQgb2NjdXJzLgorICovCitpbnQgbm9kZV9wdXRfbWVzc2FnZShzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLAorCQkJICAgIGNvbnN0IHN0cnVjdCBkc3BfbXNnICpwbXNnLCB1MzIgdXRpbWVvdXQpCit7CisJc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3IgPSBOVUxMOworCWVudW0gbm9kZV90eXBlIG5vZGVfdHlwZTsKKwlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKKwllbnVtIG5vZGVfc3RhdGUgc3RhdGU7CisJaW50IHN0YXR1cyA9IDA7CisJdm9pZCAqdG1wX2J1ZjsKKwlzdHJ1Y3QgZHNwX21zZyBuZXdfbXNnOworCXN0cnVjdCBkc3BfcHJvY2Vzc29yc3RhdGUgcHJvY19zdGF0ZTsKKwlzdHJ1Y3QgcHJvY19vYmplY3QgKmhwcm9jZXNzb3I7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUocG1zZyAhPSBOVUxMKTsKKworCWlmICghaG5vZGUpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJaHByb2Nlc3NvciA9IGhub2RlLT5ocHJvY2Vzc29yOworCXN0YXR1cyA9IHByb2NfZ2V0X3N0YXRlKGhwcm9jZXNzb3IsICZwcm9jX3N0YXRlLAorCQkJCXNpemVvZihzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0YXRlKSk7CisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2VuZDsKKwkvKiBJZiBwcm9jZXNzb3IgaXMgaW4gYmFkIHN0YXRlIHRoZW4gZG9uJ3QgYXR0ZW1wdCBzZW5kaW5nIHRoZQorCSAgIG1lc3NhZ2UgKi8KKwlpZiAocHJvY19zdGF0ZS5wcm9jX3N0YXRlID09IFBST0NfRVJST1IpIHsKKwkJc3RhdHVzID0gLUVQRVJNOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlobm9kZV9tZ3IgPSBobm9kZS0+aG5vZGVfbWdyOworCW5vZGVfdHlwZSA9IG5vZGVfZ2V0X3R5cGUoaG5vZGUpOworCWlmIChub2RlX3R5cGUgIT0gTk9ERV9NRVNTQUdFICYmIG5vZGVfdHlwZSAhPSBOT0RFX1RBU0sgJiYKKwkgICAgbm9kZV90eXBlICE9IE5PREVfREFJU1NPQ0tFVCkKKwkJc3RhdHVzID0gLUVQRVJNOworCisJaWYgKCFzdGF0dXMpIHsKKwkJLyogIENoZWNrIG5vZGUgc3RhdGUuIENhbid0IHNlbmQgbWVzc2FnZXMgdG8gYSBub2RlIGFmdGVyCisJCSAqICB3ZSd2ZSBzZW50IHRoZSBSTVNfRVhJVCBjb21tYW5kLiBUaGVyZSBpcyBzdGlsbCB0aGUKKwkJICogIHBvc3NpYmlsaXR5IHRoYXQgbm9kZV90ZXJtaW5hdGUgY2FuIGJlIGNhbGxlZCBhZnRlciB3ZSd2ZQorCQkgKiAgY2hlY2tlZCB0aGUgc3RhdGUuIENvdWxkIGFkZCBhbm90aGVyIFNZTkMgb2JqZWN0IHRvCisJCSAqICBwcmV2ZW50IHRoaXMgKGNhbid0IHVzZSBub2RlX21ncl9sb2NrLCBzaW5jZSB3ZSBkb24ndAorCQkgKiAgd2FudCB0byBibG9jayBvdGhlciBOT0RFIGZ1bmN0aW9ucykuIEhvd2V2ZXIsIHRoZSBub2RlIG1heQorCQkgKiAgc3RpbGwgZXhpdCBvbiBpdHMgb3duLCBiZWZvcmUgdGhpcyBtZXNzYWdlIGlzIHNlbnQuICovCisJCW11dGV4X2xvY2soJmhub2RlX21nci0+bm9kZV9tZ3JfbG9jayk7CisJCXN0YXRlID0gbm9kZV9nZXRfc3RhdGUoaG5vZGUpOworCQlpZiAoc3RhdGUgPT0gTk9ERV9URVJNSU5BVElORyB8fCBzdGF0ZSA9PSBOT0RFX0RPTkUpCisJCQlzdGF0dXMgPSAtRUJBRFI7CisKKwkJLyogZW5kIG9mIHN5bmNfZW50ZXJfY3MgKi8KKwkJbXV0ZXhfdW5sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOworCX0KKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJLyogYXNzaWduIHBtc2cgdmFsdWVzIHRvIG5ldyBtc2cgKi8KKwluZXdfbXNnID0gKnBtc2c7CisJLyogTm93LCBjaGVjayBpZiBtZXNzYWdlIGNvbnRhaW5zIGEgU00gYnVmZmVyIGRlc2NyaXB0b3IgKi8KKwlpZiAocG1zZy0+ZHdfY21kICYgRFNQX1JNU0JVRkRFU0MpIHsKKwkJLyogVHJhbnNsYXRlIEdQUCBWYSB0byBEU1AgcGh5c2ljYWwgYnVmIFB0ci4gKi8KKwkJdG1wX2J1ZiA9IGNtbV94bGF0b3JfdHJhbnNsYXRlKGhub2RlLT54bGF0b3IsCisJCQkJCSAgICAgICAodm9pZCAqKW5ld19tc2cuZHdfYXJnMSwKKwkJCQkJICAgICAgIENNTV9WQTJEU1BQQSk7CisJCWlmICh0bXBfYnVmICE9IE5VTEwpIHsKKwkJCS8qIGdvdCB0cmFuc2xhdGlvbiwgY29udmVydCB0byBNQVVzIGluIG1zZyAqLworCQkJaWYgKGhub2RlLT5obm9kZV9tZ3ItPnVkc3Bfd29yZF9zaXplICE9IDApIHsKKwkJCQluZXdfbXNnLmR3X2FyZzEgPQorCQkJCSAgICAodTMyKSB0bXBfYnVmIC8KKwkJCQkgICAgaG5vZGUtPmhub2RlX21nci0+dWRzcF93b3JkX3NpemU7CisJCQkJLyogTUFVcyAqLworCQkJCW5ld19tc2cuZHdfYXJnMiAvPSBobm9kZS0+aG5vZGVfbWdyLT4KKwkJCQkgICAgdWRzcF93b3JkX3NpemU7CisJCQl9IGVsc2UgeworCQkJCXByX2VycigiJXM6IHVkc3Bfd29yZF9zaXplIGlzIHplcm8hXG4iLAorCQkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQkJc3RhdHVzID0gLUVQRVJNOwkvKiBiYWQgRFNQV29yZFNpemUgKi8KKwkJCX0KKwkJfSBlbHNlIHsJLyogZmFpbGVkIHRvIHRyYW5zbGF0ZSBidWZmZXIgYWRkcmVzcyAqLworCQkJc3RhdHVzID0gLUVTUkNIOworCQl9CisJfQorCWlmICghc3RhdHVzKSB7CisJCWludGZfZnhucyA9IGhub2RlX21nci0+aW50Zl9meG5zOworCQlzdGF0dXMgPSAoKmludGZfZnhucy0+cGZuX21zZ19wdXQpIChobm9kZS0+bXNnX3F1ZXVlX29iaiwKKwkJCQkJCSAgICAmbmV3X21zZywgdXRpbWVvdXQpOworCX0KK2Z1bmNfZW5kOgorCWRldl9kYmcoYnJpZGdlLCAiJXM6IGhub2RlOiAlcCBwbXNnOiAlcCB1dGltZW91dDogMHgleCwgIgorCQkic3RhdHVzIDB4JXhcbiIsIF9fZnVuY19fLCBobm9kZSwgcG1zZywgdXRpbWVvdXQsIHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBub2RlX3JlZ2lzdGVyX25vdGlmeSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlZ2lzdGVyIHRvIGJlIG5vdGlmaWVkIG9uIHNwZWNpZmljIGV2ZW50cyBmb3IgdGhpcyBub2RlLgorICovCitpbnQgbm9kZV9yZWdpc3Rlcl9ub3RpZnkoc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwgdTMyIGV2ZW50X21hc2ssCisJCQkJdTMyIG5vdGlmeV90eXBlLAorCQkJCXN0cnVjdCBkc3Bfbm90aWZpY2F0aW9uICpobm90aWZpY2F0aW9uKQoreworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGhub3RpZmljYXRpb24gIT0gTlVMTCk7CisKKwlpZiAoIWhub2RlKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfSBlbHNlIHsKKwkJLyogQ2hlY2sgaWYgZXZlbnQgbWFzayBpcyBhIHZhbGlkIG5vZGUgcmVsYXRlZCBldmVudCAqLworCQlpZiAoZXZlbnRfbWFzayAmIH4oRFNQX05PREVTVEFURUNIQU5HRSB8IERTUF9OT0RFTUVTU0FHRVJFQURZKSkKKwkJCXN0YXR1cyA9IC1FSU5WQUw7CisKKwkJLyogQ2hlY2sgaWYgbm90aWZ5IHR5cGUgaXMgdmFsaWQgKi8KKwkJaWYgKG5vdGlmeV90eXBlICE9IERTUF9TSUdOQUxFVkVOVCkKKwkJCXN0YXR1cyA9IC1FSU5WQUw7CisKKwkJLyogT25seSBvbmUgTm90aWZpY2F0aW9uIGNhbiBiZSByZWdpc3RlcmVkIGF0IGEKKwkJICogdGltZSAtIExpbWl0YXRpb24gKi8KKwkJaWYgKGV2ZW50X21hc2sgPT0gKERTUF9OT0RFU1RBVEVDSEFOR0UgfCBEU1BfTk9ERU1FU1NBR0VSRUFEWSkpCisJCQlzdGF0dXMgPSAtRUlOVkFMOworCX0KKwlpZiAoIXN0YXR1cykgeworCQlpZiAoZXZlbnRfbWFzayA9PSBEU1BfTk9ERVNUQVRFQ0hBTkdFKSB7CisJCQlzdGF0dXMgPSBudGZ5X3JlZ2lzdGVyKGhub2RlLT5udGZ5X29iaiwgaG5vdGlmaWNhdGlvbiwKKwkJCQkJICAgICAgIGV2ZW50X21hc2sgJiBEU1BfTk9ERVNUQVRFQ0hBTkdFLAorCQkJCQkgICAgICAgbm90aWZ5X3R5cGUpOworCQl9IGVsc2UgeworCQkJLyogU2VuZCBNZXNzYWdlIHBhcnQgb2YgZXZlbnQgbWFzayB0byBtc2dfY3RybCAqLworCQkJaW50Zl9meG5zID0gaG5vZGUtPmhub2RlX21nci0+aW50Zl9meG5zOworCQkJc3RhdHVzID0gKCppbnRmX2Z4bnMtPnBmbl9tc2dfcmVnaXN0ZXJfbm90aWZ5KQorCQkJICAgIChobm9kZS0+bXNnX3F1ZXVlX29iaiwKKwkJCSAgICAgZXZlbnRfbWFzayAmIERTUF9OT0RFTUVTU0FHRVJFQURZLCBub3RpZnlfdHlwZSwKKwkJCSAgICAgaG5vdGlmaWNhdGlvbik7CisJCX0KKworCX0KKwlkZXZfZGJnKGJyaWRnZSwgIiVzOiBobm9kZTogJXAgZXZlbnRfbWFzazogMHgleCBub3RpZnlfdHlwZTogMHgleCAiCisJCSJobm90aWZpY2F0aW9uOiAlcCBzdGF0dXMgMHgleFxuIiwgX19mdW5jX18sIGhub2RlLAorCQlldmVudF9tYXNrLCBub3RpZnlfdHlwZSwgaG5vdGlmaWNhdGlvbiwgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IG5vZGVfcnVuID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgU3RhcnQgZXhlY3V0aW9uIG9mIGEgbm9kZSdzIGV4ZWN1dGUgcGhhc2UsIG9yIHJlc3VtZSBleGVjdXRpb24gb2YgYSBub2RlCisgKiAgICAgIHRoYXQgaGFzIGJlZW4gc3VzcGVuZGVkICh2aWEgTk9ERV9Ob2RlUGF1c2UoKSkgb24gdGhlIERTUC4gTG9hZCB0aGUKKyAqICAgICAgbm9kZSdzIGV4ZWN1dGUgZnVuY3Rpb24gaWYgbmVjZXNzYXJ5LgorICovCitpbnQgbm9kZV9ydW4oc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSkKK3sKKwlzdHJ1Y3Qgbm9kZV9vYmplY3QgKnBub2RlID0gKHN0cnVjdCBub2RlX29iamVjdCAqKWhub2RlOworCXN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyOworCWVudW0gbm9kZV90eXBlIG5vZGVfdHlwZTsKKwllbnVtIG5vZGVfc3RhdGUgc3RhdGU7CisJdTMyIHVsX2V4ZWN1dGVfZnhuOworCXUzMiB1bF9meG5fYWRkcjsKKwlpbnQgc3RhdHVzID0gMDsKKwl1MzIgcHJvY19pZDsKKwlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKKwlzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0YXRlIHByb2Nfc3RhdGU7CisJc3RydWN0IHByb2Nfb2JqZWN0ICpocHJvY2Vzc29yOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJaWYgKCFobm9kZSkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlocHJvY2Vzc29yID0gaG5vZGUtPmhwcm9jZXNzb3I7CisJc3RhdHVzID0gcHJvY19nZXRfc3RhdGUoaHByb2Nlc3NvciwgJnByb2Nfc3RhdGUsCisJCQkJc2l6ZW9mKHN0cnVjdCBkc3BfcHJvY2Vzc29yc3RhdGUpKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCS8qIElmIHByb2Nlc3NvciBpcyBpbiBlcnJvciBzdGF0ZSB0aGVuIGRvbid0IGF0dGVtcHQgdG8gcnVuIHRoZSBub2RlICovCisJaWYgKHByb2Nfc3RhdGUucHJvY19zdGF0ZSA9PSBQUk9DX0VSUk9SKSB7CisJCXN0YXR1cyA9IC1FUEVSTTsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJbm9kZV90eXBlID0gbm9kZV9nZXRfdHlwZShobm9kZSk7CisJaWYgKG5vZGVfdHlwZSA9PSBOT0RFX0RFVklDRSkKKwkJc3RhdHVzID0gLUVQRVJNOworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisKKwlobm9kZV9tZ3IgPSBobm9kZS0+aG5vZGVfbWdyOworCWlmICghaG5vZGVfbWdyKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCWludGZfZnhucyA9IGhub2RlX21nci0+aW50Zl9meG5zOworCS8qIEVudGVyIGNyaXRpY2FsIHNlY3Rpb24gKi8KKwltdXRleF9sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOworCisJc3RhdGUgPSBub2RlX2dldF9zdGF0ZShobm9kZSk7CisJaWYgKHN0YXRlICE9IE5PREVfQ1JFQVRFRCAmJiBzdGF0ZSAhPSBOT0RFX1BBVVNFRCkKKwkJc3RhdHVzID0gLUVCQURSOworCisJaWYgKCFzdGF0dXMpCisJCXN0YXR1cyA9IHByb2NfZ2V0X3Byb2Nlc3Nvcl9pZChwbm9kZS0+aHByb2Nlc3NvciwgJnByb2NfaWQpOworCisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2NvbnQxOworCisJaWYgKChwcm9jX2lkICE9IERTUF9VTklUKSAmJiAocHJvY19pZCAhPSBJVkFfVU5JVCkpCisJCWdvdG8gZnVuY19jb250MTsKKworCWlmIChzdGF0ZSA9PSBOT0RFX0NSRUFURUQpIHsKKwkJLyogSWYgbm9kZSdzIGV4ZWN1dGUgZnVuY3Rpb24gaXMgbm90IGxvYWRlZCwgbG9hZCBpdCAqLworCQlpZiAoIShobm9kZS0+bG9hZGVkKSAmJiBobm9kZS0+cGhhc2Vfc3BsaXQpIHsKKwkJCXN0YXR1cyA9CisJCQkgICAgaG5vZGVfbWdyLT5ubGRyX2Z4bnMucGZuX2xvYWQoaG5vZGUtPm5sZHJfbm9kZV9vYmosCisJCQkJCQkJICBOTERSX0VYRUNVVEUpOworCQkJaWYgKCFzdGF0dXMpIHsKKwkJCQlobm9kZS0+bG9hZGVkID0gdHJ1ZTsKKwkJCX0gZWxzZSB7CisJCQkJcHJfZXJyKCIlczogZmFpbCAtIGxvYWQgZXhlY3V0ZSBjb2RlOiAweCV4XG4iLAorCQkJCSAgICAgICBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJCX0KKwkJfQorCQlpZiAoIXN0YXR1cykgeworCQkJLyogR2V0IGFkZHJlc3Mgb2Ygbm9kZSdzIGV4ZWN1dGUgZnVuY3Rpb24gKi8KKwkJCWlmIChwcm9jX2lkID09IElWQV9VTklUKQorCQkJCXVsX2V4ZWN1dGVfZnhuID0gKHUzMikgaG5vZGUtPm5vZGVfZW52OworCQkJZWxzZSB7CisJCQkJc3RhdHVzID0gZ2V0X2Z4bl9hZGRyZXNzKGhub2RlLCAmdWxfZXhlY3V0ZV9meG4sCisJCQkJCQkJIEVYRUNVVEVQSEFTRSk7CisJCQl9CisJCX0KKwkJaWYgKCFzdGF0dXMpIHsKKwkJCXVsX2Z4bl9hZGRyID0gaG5vZGVfbWdyLT51bF9meG5fYWRkcnNbUk1TRVhFQ1VURU5PREVdOworCQkJc3RhdHVzID0KKwkJCSAgICBkaXNwX25vZGVfcnVuKGhub2RlX21nci0+ZGlzcF9vYmosIGhub2RlLAorCQkJCQkgIHVsX2Z4bl9hZGRyLCB1bF9leGVjdXRlX2Z4biwKKwkJCQkJICBobm9kZS0+bm9kZV9lbnYpOworCQl9CisJfSBlbHNlIGlmIChzdGF0ZSA9PSBOT0RFX1BBVVNFRCkgeworCQl1bF9meG5fYWRkciA9IGhub2RlX21nci0+dWxfZnhuX2FkZHJzW1JNU0NIQU5HRU5PREVQUklPUklUWV07CisJCXN0YXR1cyA9IGRpc3Bfbm9kZV9jaGFuZ2VfcHJpb3JpdHkoaG5vZGVfbWdyLT5kaXNwX29iaiwgaG5vZGUsCisJCQkJCQkgICB1bF9meG5fYWRkciwgaG5vZGUtPm5vZGVfZW52LAorCQkJCQkJICAgTk9ERV9HRVRfUFJJT1JJVFkoaG5vZGUpKTsKKwl9IGVsc2UgeworCQkvKiBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KKwkJREJDX0FTU0VSVChmYWxzZSk7CisJfQorZnVuY19jb250MToKKwkvKiBVcGRhdGUgbm9kZSBzdGF0ZS4gKi8KKwlpZiAoc3RhdHVzID49IDApCisJCU5PREVfU0VUX1NUQVRFKGhub2RlLCBOT0RFX1JVTk5JTkcpOworCWVsc2UJCQkvKiBTZXQgc3RhdGUgYmFjayB0byBwcmV2aW91cyB2YWx1ZSAqLworCQlOT0RFX1NFVF9TVEFURShobm9kZSwgc3RhdGUpOworCS8qRW5kIG9mIHN5bmNfZW50ZXJfY3MgKi8KKwkvKiBFeGl0IGNyaXRpY2FsIHNlY3Rpb24gKi8KKwltdXRleF91bmxvY2soJmhub2RlX21nci0+bm9kZV9tZ3JfbG9jayk7CisJaWYgKHN0YXR1cyA+PSAwKSB7CisJCXByb2Nfbm90aWZ5X2NsaWVudHMoaG5vZGUtPmhwcm9jZXNzb3IsIERTUF9OT0RFU1RBVEVDSEFOR0UpOworCQludGZ5X25vdGlmeShobm9kZS0+bnRmeV9vYmosIERTUF9OT0RFU1RBVEVDSEFOR0UpOworCX0KK2Z1bmNfZW5kOgorCWRldl9kYmcoYnJpZGdlLCAiJXM6IGhub2RlOiAlcCBzdGF0dXMgMHgleFxuIiwgX19mdW5jX18sIGhub2RlLCBzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV90ZXJtaW5hdGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTaWduYWwgYSBub2RlIHJ1bm5pbmcgb24gdGhlIERTUCB0aGF0IGl0IHNob3VsZCBleGl0IGl0cyBleGVjdXRlIHBoYXNlCisgKiAgICAgIGZ1bmN0aW9uLgorICovCitpbnQgbm9kZV90ZXJtaW5hdGUoc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwgaW50ICpwc3RhdHVzKQoreworCXN0cnVjdCBub2RlX29iamVjdCAqcG5vZGUgPSAoc3RydWN0IG5vZGVfb2JqZWN0ICopaG5vZGU7CisJc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3IgPSBOVUxMOworCWVudW0gbm9kZV90eXBlIG5vZGVfdHlwZTsKKwlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKKwllbnVtIG5vZGVfc3RhdGUgc3RhdGU7CisJc3RydWN0IGRzcF9tc2cgbXNnLCBraWxsbXNnOworCWludCBzdGF0dXMgPSAwOworCXUzMiBwcm9jX2lkLCBraWxsX3RpbWVfb3V0OworCXN0cnVjdCBkZWhfbWdyICpoZGVoX21ncjsKKwlzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0YXRlIHByb2Nfc3RhdGU7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUocHN0YXR1cyAhPSBOVUxMKTsKKworCWlmICghaG5vZGUgfHwgIWhub2RlLT5obm9kZV9tZ3IpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJaWYgKHBub2RlLT5ocHJvY2Vzc29yID09IE5VTEwpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJc3RhdHVzID0gcHJvY19nZXRfcHJvY2Vzc29yX2lkKHBub2RlLT5ocHJvY2Vzc29yLCAmcHJvY19pZCk7CisKKwlpZiAoIXN0YXR1cykgeworCQlobm9kZV9tZ3IgPSBobm9kZS0+aG5vZGVfbWdyOworCQlub2RlX3R5cGUgPSBub2RlX2dldF90eXBlKGhub2RlKTsKKwkJaWYgKG5vZGVfdHlwZSAhPSBOT0RFX1RBU0sgJiYgbm9kZV90eXBlICE9IE5PREVfREFJU1NPQ0tFVCkKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJLyogQ2hlY2sgbm9kZSBzdGF0ZSAqLworCQltdXRleF9sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOworCQlzdGF0ZSA9IG5vZGVfZ2V0X3N0YXRlKGhub2RlKTsKKwkJaWYgKHN0YXRlICE9IE5PREVfUlVOTklORykgeworCQkJc3RhdHVzID0gLUVCQURSOworCQkJLyogU2V0IHRoZSBleGl0IHN0YXR1cyBpZiBub2RlIHRlcm1pbmF0ZWQgb24KKwkJCSAqIGl0cyBvd24uICovCisJCQlpZiAoc3RhdGUgPT0gTk9ERV9ET05FKQorCQkJCSpwc3RhdHVzID0gaG5vZGUtPmV4aXRfc3RhdHVzOworCisJCX0gZWxzZSB7CisJCQlOT0RFX1NFVF9TVEFURShobm9kZSwgTk9ERV9URVJNSU5BVElORyk7CisJCX0KKwkJLyogZW5kIG9mIHN5bmNfZW50ZXJfY3MgKi8KKwkJbXV0ZXhfdW5sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOworCX0KKwlpZiAoIXN0YXR1cykgeworCQkvKgorCQkgKiAgU2VuZCBleGl0IG1lc3NhZ2UuIERvIG5vdCBjaGFuZ2Ugc3RhdGUgdG8gTk9ERV9ET05FCisJCSAqICBoZXJlLiBUaGF0IHdpbGwgYmUgZG9uZSBpbiBjYWxsYmFjay4KKwkJICovCisJCXN0YXR1cyA9IHByb2NfZ2V0X3N0YXRlKHBub2RlLT5ocHJvY2Vzc29yLCAmcHJvY19zdGF0ZSwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBkc3BfcHJvY2Vzc29yc3RhdGUpKTsKKwkJaWYgKHN0YXR1cykKKwkJCWdvdG8gZnVuY19jb250OworCQkvKiBJZiBwcm9jZXNzb3IgaXMgaW4gZXJyb3Igc3RhdGUgdGhlbiBkb24ndCBhdHRlbXB0IHRvIHNlbmQKKwkJICogQSBraWxsIHRhc2sgY29tbWFuZCAqLworCQlpZiAocHJvY19zdGF0ZS5wcm9jX3N0YXRlID09IFBST0NfRVJST1IpIHsKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCWdvdG8gZnVuY19jb250OworCQl9CisKKwkJbXNnLmR3X2NtZCA9IFJNU19FWElUOworCQltc2cuZHdfYXJnMSA9IGhub2RlLT5ub2RlX2VudjsKKwkJa2lsbG1zZy5kd19jbWQgPSBSTVNfS0lMTFRBU0s7CisJCWtpbGxtc2cuZHdfYXJnMSA9IGhub2RlLT5ub2RlX2VudjsKKwkJaW50Zl9meG5zID0gaG5vZGVfbWdyLT5pbnRmX2Z4bnM7CisKKwkJaWYgKGhub2RlLT51dGltZW91dCA+IE1BWFRJTUVPVVQpCisJCQlraWxsX3RpbWVfb3V0ID0gTUFYVElNRU9VVDsKKwkJZWxzZQorCQkJa2lsbF90aW1lX291dCA9IChobm9kZS0+dXRpbWVvdXQpICogMjsKKworCQlzdGF0dXMgPSAoKmludGZfZnhucy0+cGZuX21zZ19wdXQpIChobm9kZS0+bXNnX3F1ZXVlX29iaiwgJm1zZywKKwkJCQkJCSAgICBobm9kZS0+dXRpbWVvdXQpOworCQlpZiAoc3RhdHVzKQorCQkJZ290byBmdW5jX2NvbnQ7CisKKwkJLyoKKwkJICogV2FpdCBvbiBzeW5jaHJvbml6YXRpb24gb2JqZWN0IHRoYXQgd2lsbCBiZQorCQkgKiBwb3N0ZWQgaW4gdGhlIGNhbGxiYWNrIG9uIHJlY2VpdmluZyBSTVNfRVhJVAorCQkgKiBtZXNzYWdlLCBvciBieSBub2RlX2RlbGV0ZS4gQ2hlY2sgZm9yIHZhbGlkIGhub2RlLAorCQkgKiBpbiBjYXNlIHBvc3RlZCBieSBub2RlX2RlbGV0ZSgpLgorCQkgKi8KKwkJc3RhdHVzID0gc3luY193YWl0X29uX2V2ZW50KGhub2RlLT5zeW5jX2RvbmUsCisJCQkJCSAgICBraWxsX3RpbWVfb3V0IC8gMik7CisJCWlmIChzdGF0dXMgIT0gRVRJTUUpCisJCQlnb3RvIGZ1bmNfY29udDsKKworCQlzdGF0dXMgPSAoKmludGZfZnhucy0+cGZuX21zZ19wdXQpKGhub2RlLT5tc2dfcXVldWVfb2JqLAorCQkJCQkJJmtpbGxtc2csIGhub2RlLT51dGltZW91dCk7CisJCWlmIChzdGF0dXMpCisJCQlnb3RvIGZ1bmNfY29udDsKKwkJc3RhdHVzID0gc3luY193YWl0X29uX2V2ZW50KGhub2RlLT5zeW5jX2RvbmUsCisJCQkJCSAgICAga2lsbF90aW1lX291dCAvIDIpOworCQlpZiAoc3RhdHVzKSB7CisJCQkvKgorCQkJICogSGVyZSBpdCBnb2VzIHRoZSBwYXJ0IG9mIHRoZSBzaW11bGF0aW9uIG9mCisJCQkgKiB0aGUgRFNQIGV4Y2VwdGlvbi4KKwkJCSAqLworCQkJZGV2X2dldF9kZWhfbWdyKGhub2RlX21nci0+aGRldl9vYmosICZoZGVoX21ncik7CisJCQlpZiAoIWhkZWhfbWdyKQorCQkJCWdvdG8gZnVuY19jb250OworCisJCQlicmlkZ2VfZGVoX25vdGlmeShoZGVoX21nciwgRFNQX1NZU0VSUk9SLCBEU1BfRVhDRVBUSU9OQUJPUlQpOworCQl9CisJfQorZnVuY19jb250OgorCWlmICghc3RhdHVzKSB7CisJCS8qIEVudGVyIENTIGJlZm9yZSBnZXR0aW5nIGV4aXQgc3RhdHVzLCBpbiBjYXNlIG5vZGUgd2FzCisJCSAqIGRlbGV0ZWQuICovCisJCW11dGV4X2xvY2soJmhub2RlX21nci0+bm9kZV9tZ3JfbG9jayk7CisJCS8qIE1ha2Ugc3VyZSBub2RlIHdhc24ndCBkZWxldGVkIHdoaWxlIHdlIGJsb2NrZWQgKi8KKwkJaWYgKCFobm9kZSkgeworCQkJc3RhdHVzID0gLUVQRVJNOworCQl9IGVsc2UgeworCQkJKnBzdGF0dXMgPSBobm9kZS0+ZXhpdF9zdGF0dXM7CisJCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBobm9kZTogJXAgZW52IDB4JXggc3RhdHVzIDB4JXhcbiIsCisJCQkJX19mdW5jX18sIGhub2RlLCBobm9kZS0+bm9kZV9lbnYsIHN0YXR1cyk7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOworCX0JCQkvKkVuZCBvZiBzeW5jX2VudGVyX2NzICovCitmdW5jX2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRlbGV0ZV9ub2RlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRnJlZSBHUFAgcmVzb3VyY2VzIGFsbG9jYXRlZCBpbiBub2RlX2FsbG9jYXRlKCkgb3Igbm9kZV9jb25uZWN0KCkuCisgKi8KK3N0YXRpYyB2b2lkIGRlbGV0ZV9ub2RlKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQlzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0KQoreworCXN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyOworCXN0cnVjdCBjbW1feGxhdG9yb2JqZWN0ICp4bGF0b3I7CisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisJdTMyIGk7CisJZW51bSBub2RlX3R5cGUgbm9kZV90eXBlOworCXN0cnVjdCBzdHJlYW1fY2hubCBzdHJlYW07CisJc3RydWN0IG5vZGVfbXNnYXJncyBub2RlX21zZ19hcmdzOworCXN0cnVjdCBub2RlX3Rhc2thcmdzIHRhc2tfYXJnX29iajsKKyNpZmRlZiBEU1BfRE1NX0RFQlVHCisJc3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3I7CisJc3RydWN0IHByb2Nfb2JqZWN0ICpwX3Byb2Nfb2JqZWN0ID0KKwkgICAgKHN0cnVjdCBwcm9jX29iamVjdCAqKWhub2RlLT5ocHJvY2Vzc29yOworI2VuZGlmCisJaW50IHN0YXR1czsKKwlpZiAoIWhub2RlKQorCQlnb3RvIGZ1bmNfZW5kOworCWhub2RlX21nciA9IGhub2RlLT5obm9kZV9tZ3I7CisJaWYgKCFobm9kZV9tZ3IpCisJCWdvdG8gZnVuY19lbmQ7CisJeGxhdG9yID0gaG5vZGUtPnhsYXRvcjsKKwlub2RlX3R5cGUgPSBub2RlX2dldF90eXBlKGhub2RlKTsKKwlpZiAobm9kZV90eXBlICE9IE5PREVfREVWSUNFKSB7CisJCW5vZGVfbXNnX2FyZ3MgPSBobm9kZS0+Y3JlYXRlX2FyZ3MuYXNhLm5vZGVfbXNnX2FyZ3M7CisJCWtmcmVlKG5vZGVfbXNnX2FyZ3MucGRhdGEpOworCisJCS8qIEZyZWUgbXNnX2N0cmwgcXVldWUgKi8KKwkJaWYgKGhub2RlLT5tc2dfcXVldWVfb2JqKSB7CisJCQlpbnRmX2Z4bnMgPSBobm9kZV9tZ3ItPmludGZfZnhuczsKKwkJCSgqaW50Zl9meG5zLT5wZm5fbXNnX2RlbGV0ZV9xdWV1ZSkgKGhub2RlLT4KKwkJCQkJCQkgICAgbXNnX3F1ZXVlX29iaik7CisJCQlobm9kZS0+bXNnX3F1ZXVlX29iaiA9IE5VTEw7CisJCX0KKworCQlrZnJlZShobm9kZS0+c3luY19kb25lKTsKKworCQkvKiBGcmVlIGFsbCBzdHJlYW0gaW5mbyAqLworCQlpZiAoaG5vZGUtPmlucHV0cykgeworCQkJZm9yIChpID0gMDsgaSA8IE1BWF9JTlBVVFMoaG5vZGUpOyBpKyspIHsKKwkJCQlzdHJlYW0gPSBobm9kZS0+aW5wdXRzW2ldOworCQkJCWZyZWVfc3RyZWFtKGhub2RlX21nciwgc3RyZWFtKTsKKwkJCX0KKwkJCWtmcmVlKGhub2RlLT5pbnB1dHMpOworCQkJaG5vZGUtPmlucHV0cyA9IE5VTEw7CisJCX0KKwkJaWYgKGhub2RlLT5vdXRwdXRzKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgTUFYX09VVFBVVFMoaG5vZGUpOyBpKyspIHsKKwkJCQlzdHJlYW0gPSBobm9kZS0+b3V0cHV0c1tpXTsKKwkJCQlmcmVlX3N0cmVhbShobm9kZV9tZ3IsIHN0cmVhbSk7CisJCQl9CisJCQlrZnJlZShobm9kZS0+b3V0cHV0cyk7CisJCQlobm9kZS0+b3V0cHV0cyA9IE5VTEw7CisJCX0KKwkJdGFza19hcmdfb2JqID0gaG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS50YXNrX2FyZ19vYmo7CisJCWlmICh0YXNrX2FyZ19vYmouc3RybV9pbl9kZWYpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBNQVhfSU5QVVRTKGhub2RlKTsgaSsrKSB7CisJCQkJa2ZyZWUodGFza19hcmdfb2JqLnN0cm1faW5fZGVmW2ldLnN6X2RldmljZSk7CisJCQkJdGFza19hcmdfb2JqLnN0cm1faW5fZGVmW2ldLnN6X2RldmljZSA9IE5VTEw7CisJCQl9CisJCQlrZnJlZSh0YXNrX2FyZ19vYmouc3RybV9pbl9kZWYpOworCQkJdGFza19hcmdfb2JqLnN0cm1faW5fZGVmID0gTlVMTDsKKwkJfQorCQlpZiAodGFza19hcmdfb2JqLnN0cm1fb3V0X2RlZikgeworCQkJZm9yIChpID0gMDsgaSA8IE1BWF9PVVRQVVRTKGhub2RlKTsgaSsrKSB7CisJCQkJa2ZyZWUodGFza19hcmdfb2JqLnN0cm1fb3V0X2RlZltpXS5zel9kZXZpY2UpOworCQkJCXRhc2tfYXJnX29iai5zdHJtX291dF9kZWZbaV0uc3pfZGV2aWNlID0gTlVMTDsKKwkJCX0KKwkJCWtmcmVlKHRhc2tfYXJnX29iai5zdHJtX291dF9kZWYpOworCQkJdGFza19hcmdfb2JqLnN0cm1fb3V0X2RlZiA9IE5VTEw7CisJCX0KKwkJaWYgKHRhc2tfYXJnX29iai51ZHNwX2hlYXBfcmVzX2FkZHIpIHsKKwkJCXN0YXR1cyA9IHByb2NfdW5fbWFwKGhub2RlLT5ocHJvY2Vzc29yLCAodm9pZCAqKQorCQkJCQkgICAgIHRhc2tfYXJnX29iai51ZHNwX2hlYXBfYWRkciwKKwkJCQkJICAgICBwcl9jdHh0KTsKKworCQkJc3RhdHVzID0gcHJvY191bl9yZXNlcnZlX21lbW9yeShobm9kZS0+aHByb2Nlc3NvciwKKwkJCQkJCQkodm9pZCAqKQorCQkJCQkJCXRhc2tfYXJnX29iai4KKwkJCQkJCQl1ZHNwX2hlYXBfcmVzX2FkZHIsCisJCQkJCQkJcHJfY3R4dCk7CisjaWZkZWYgRFNQX0RNTV9ERUJVRworCQkJc3RhdHVzID0gZG1tX2dldF9oYW5kbGUocF9wcm9jX29iamVjdCwgJmRtbV9tZ3IpOworCQkJaWYgKGRtbV9tZ3IpCisJCQkJZG1tX21lbV9tYXBfZHVtcChkbW1fbWdyKTsKKwkJCWVsc2UKKwkJCQlzdGF0dXMgPSBEU1BfRUhBTkRMRTsKKyNlbmRpZgorCQl9CisJfQorCWlmIChub2RlX3R5cGUgIT0gTk9ERV9NRVNTQUdFKSB7CisJCWtmcmVlKGhub2RlLT5zdHJlYW1fY29ubmVjdCk7CisJCWhub2RlLT5zdHJlYW1fY29ubmVjdCA9IE5VTEw7CisJfQorCWtmcmVlKGhub2RlLT5wc3RyX2Rldl9uYW1lKTsKKwlobm9kZS0+cHN0cl9kZXZfbmFtZSA9IE5VTEw7CisKKwlpZiAoaG5vZGUtPm50Znlfb2JqKSB7CisJCW50ZnlfZGVsZXRlKGhub2RlLT5udGZ5X29iaik7CisJCWtmcmVlKGhub2RlLT5udGZ5X29iaik7CisJCWhub2RlLT5udGZ5X29iaiA9IE5VTEw7CisJfQorCisJLyogVGhlc2Ugd2VyZSBhbGxvY2F0ZWQgaW4gZGNkX2dldF9vYmplY3RfZGVmICh2aWEgbm9kZV9hbGxvY2F0ZSkgKi8KKwlrZnJlZShobm9kZS0+ZGNkX3Byb3BzLm9ial9kYXRhLm5vZGVfb2JqLnBzdHJfY3JlYXRlX3BoYXNlX2Z4bik7CisJaG5vZGUtPmRjZF9wcm9wcy5vYmpfZGF0YS5ub2RlX29iai5wc3RyX2NyZWF0ZV9waGFzZV9meG4gPSBOVUxMOworCisJa2ZyZWUoaG5vZGUtPmRjZF9wcm9wcy5vYmpfZGF0YS5ub2RlX29iai5wc3RyX2V4ZWN1dGVfcGhhc2VfZnhuKTsKKwlobm9kZS0+ZGNkX3Byb3BzLm9ial9kYXRhLm5vZGVfb2JqLnBzdHJfZXhlY3V0ZV9waGFzZV9meG4gPSBOVUxMOworCisJa2ZyZWUoaG5vZGUtPmRjZF9wcm9wcy5vYmpfZGF0YS5ub2RlX29iai5wc3RyX2RlbGV0ZV9waGFzZV9meG4pOworCWhub2RlLT5kY2RfcHJvcHMub2JqX2RhdGEubm9kZV9vYmoucHN0cl9kZWxldGVfcGhhc2VfZnhuID0gTlVMTDsKKworCWtmcmVlKGhub2RlLT5kY2RfcHJvcHMub2JqX2RhdGEubm9kZV9vYmoucHN0cl9pX2FsZ19uYW1lKTsKKwlobm9kZS0+ZGNkX3Byb3BzLm9ial9kYXRhLm5vZGVfb2JqLnBzdHJfaV9hbGdfbmFtZSA9IE5VTEw7CisKKwkvKiBGcmVlIGFsbCBTTSBhZGRyZXNzIHRyYW5zbGF0b3IgcmVzb3VyY2VzICovCisJaWYgKHhsYXRvcikgeworCQkodm9pZCljbW1feGxhdG9yX2RlbGV0ZSh4bGF0b3IsIHRydWUpOwkvKiBmb3JjZSBmcmVlICovCisJCXhsYXRvciA9IE5VTEw7CisJfQorCisJa2ZyZWUoaG5vZGUtPm5sZHJfbm9kZV9vYmopOworCWhub2RlLT5ubGRyX25vZGVfb2JqID0gTlVMTDsKKwlobm9kZS0+aG5vZGVfbWdyID0gTlVMTDsKKwlrZnJlZShobm9kZSk7CisJaG5vZGUgPSBOVUxMOworZnVuY19lbmQ6CisJcmV0dXJuOworfQorCisvKgorICogID09PT09PT09IGRlbGV0ZV9ub2RlX21nciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEZyZWVzIHRoZSBub2RlIG1hbmFnZXIuCisgKi8KK3N0YXRpYyB2b2lkIGRlbGV0ZV9ub2RlX21ncihzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21ncikKK3sKKwlzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlOworCisJaWYgKGhub2RlX21ncikgeworCQkvKiBGcmVlIHJlc291cmNlcyAqLworCQlpZiAoaG5vZGVfbWdyLT5oZGNkX21ncikKKwkJCWRjZF9kZXN0cm95X21hbmFnZXIoaG5vZGVfbWdyLT5oZGNkX21ncik7CisKKwkJLyogUmVtb3ZlIGFueSBlbGVtZW50cyByZW1haW5pbmcgaW4gbGlzdHMgKi8KKwkJaWYgKGhub2RlX21nci0+bm9kZV9saXN0KSB7CisJCQl3aGlsZSAoKGhub2RlID0gKHN0cnVjdCBub2RlX29iamVjdCAqKQorCQkJCWxzdF9nZXRfaGVhZChobm9kZV9tZ3ItPm5vZGVfbGlzdCkpKQorCQkJCWRlbGV0ZV9ub2RlKGhub2RlLCBOVUxMKTsKKworCQkJREJDX0FTU0VSVChMU1RfSVNfRU1QVFkoaG5vZGVfbWdyLT5ub2RlX2xpc3QpKTsKKwkJCWtmcmVlKGhub2RlX21nci0+bm9kZV9saXN0KTsKKwkJfQorCQltdXRleF9kZXN0cm95KCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOworCQlpZiAoaG5vZGVfbWdyLT5udGZ5X29iaikgeworCQkJbnRmeV9kZWxldGUoaG5vZGVfbWdyLT5udGZ5X29iaik7CisJCQlrZnJlZShobm9kZV9tZ3ItPm50Znlfb2JqKTsKKwkJfQorCisJCWlmIChobm9kZV9tZ3ItPnBpcGVfbWFwKQorCQkJZ2JfZGVsZXRlKGhub2RlX21nci0+cGlwZV9tYXApOworCisJCWlmIChobm9kZV9tZ3ItPnBpcGVfZG9uZV9tYXApCisJCQlnYl9kZWxldGUoaG5vZGVfbWdyLT5waXBlX2RvbmVfbWFwKTsKKworCQlpZiAoaG5vZGVfbWdyLT5jaG5sX21hcCkKKwkJCWdiX2RlbGV0ZShobm9kZV9tZ3ItPmNobmxfbWFwKTsKKworCQlpZiAoaG5vZGVfbWdyLT5kbWFfY2hubF9tYXApCisJCQlnYl9kZWxldGUoaG5vZGVfbWdyLT5kbWFfY2hubF9tYXApOworCisJCWlmIChobm9kZV9tZ3ItPnpjX2NobmxfbWFwKQorCQkJZ2JfZGVsZXRlKGhub2RlX21nci0+emNfY2hubF9tYXApOworCisJCWlmIChobm9kZV9tZ3ItPmRpc3Bfb2JqKQorCQkJZGlzcF9kZWxldGUoaG5vZGVfbWdyLT5kaXNwX29iaik7CisKKwkJaWYgKGhub2RlX21nci0+c3RybV9tZ3Jfb2JqKQorCQkJc3RybV9kZWxldGUoaG5vZGVfbWdyLT5zdHJtX21ncl9vYmopOworCisJCS8qIERlbGV0ZSB0aGUgbG9hZGVyICovCisJCWlmIChobm9kZV9tZ3ItPm5sZHJfb2JqKQorCQkJaG5vZGVfbWdyLT5ubGRyX2Z4bnMucGZuX2RlbGV0ZShobm9kZV9tZ3ItPm5sZHJfb2JqKTsKKworCQlpZiAoaG5vZGVfbWdyLT5sb2FkZXJfaW5pdCkKKwkJCWhub2RlX21nci0+bmxkcl9meG5zLnBmbl9leGl0KCk7CisKKwkJa2ZyZWUoaG5vZGVfbWdyKTsKKwl9Cit9CisKKy8qCisgKiAgPT09PT09PT0gZmlsbF9zdHJlYW1fY29ubmVjdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEZpbGxzIHN0cmVhbSBpbmZvcm1hdGlvbi4KKyAqLworc3RhdGljIHZvaWQgZmlsbF9zdHJlYW1fY29ubmVjdChzdHJ1Y3Qgbm9kZV9vYmplY3QgKm5vZGUxLAorCQkJCXN0cnVjdCBub2RlX29iamVjdCAqbm9kZTIsCisJCQkJdTMyIHN0cmVhbTEsIHUzMiBzdHJlYW0yKQoreworCXUzMiBzdHJtX2luZGV4OworCXN0cnVjdCBkc3Bfc3RyZWFtY29ubmVjdCAqc3RybTEgPSBOVUxMOworCXN0cnVjdCBkc3Bfc3RyZWFtY29ubmVjdCAqc3RybTIgPSBOVUxMOworCWVudW0gbm9kZV90eXBlIG5vZGUxX3R5cGUgPSBOT0RFX1RBU0s7CisJZW51bSBub2RlX3R5cGUgbm9kZTJfdHlwZSA9IE5PREVfVEFTSzsKKworCW5vZGUxX3R5cGUgPSBub2RlX2dldF90eXBlKG5vZGUxKTsKKwlub2RlMl90eXBlID0gbm9kZV9nZXRfdHlwZShub2RlMik7CisJaWYgKG5vZGUxICE9IChzdHJ1Y3Qgbm9kZV9vYmplY3QgKilEU1BfSEdQUE5PREUpIHsKKworCQlpZiAobm9kZTFfdHlwZSAhPSBOT0RFX0RFVklDRSkgeworCQkJc3RybV9pbmRleCA9IG5vZGUxLT5udW1faW5wdXRzICsKKwkJCSAgICBub2RlMS0+bnVtX291dHB1dHMgLSAxOworCQkJc3RybTEgPSAmKG5vZGUxLT5zdHJlYW1fY29ubmVjdFtzdHJtX2luZGV4XSk7CisJCQlzdHJtMS0+Y2Jfc3RydWN0ID0gc2l6ZW9mKHN0cnVjdCBkc3Bfc3RyZWFtY29ubmVjdCk7CisJCQlzdHJtMS0+dGhpc19ub2RlX3N0cmVhbV9pbmRleCA9IHN0cmVhbTE7CisJCX0KKworCQlpZiAobm9kZTIgIT0gKHN0cnVjdCBub2RlX29iamVjdCAqKURTUF9IR1BQTk9ERSkgeworCQkJLyogTk9ERSA9PSA+IE5PREUgKi8KKwkJCWlmIChub2RlMV90eXBlICE9IE5PREVfREVWSUNFKSB7CisJCQkJc3RybTEtPmNvbm5lY3RlZF9ub2RlID0gbm9kZTI7CisJCQkJc3RybTEtPnVpX2Nvbm5lY3RlZF9ub2RlX2lkID0gbm9kZTItPm5vZGVfdXVpZDsKKwkJCQlzdHJtMS0+Y29ubmVjdGVkX25vZGVfc3RyZWFtX2luZGV4ID0gc3RyZWFtMjsKKwkJCQlzdHJtMS0+Y29ubmVjdF90eXBlID0gQ09OTkVDVFRZUEVfTk9ERU9VVFBVVDsKKwkJCX0KKwkJCWlmIChub2RlMl90eXBlICE9IE5PREVfREVWSUNFKSB7CisJCQkJc3RybV9pbmRleCA9IG5vZGUyLT5udW1faW5wdXRzICsKKwkJCQkgICAgbm9kZTItPm51bV9vdXRwdXRzIC0gMTsKKwkJCQlzdHJtMiA9ICYobm9kZTItPnN0cmVhbV9jb25uZWN0W3N0cm1faW5kZXhdKTsKKwkJCQlzdHJtMi0+Y2Jfc3RydWN0ID0KKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBkc3Bfc3RyZWFtY29ubmVjdCk7CisJCQkJc3RybTItPnRoaXNfbm9kZV9zdHJlYW1faW5kZXggPSBzdHJlYW0yOworCQkJCXN0cm0yLT5jb25uZWN0ZWRfbm9kZSA9IG5vZGUxOworCQkJCXN0cm0yLT51aV9jb25uZWN0ZWRfbm9kZV9pZCA9IG5vZGUxLT5ub2RlX3V1aWQ7CisJCQkJc3RybTItPmNvbm5lY3RlZF9ub2RlX3N0cmVhbV9pbmRleCA9IHN0cmVhbTE7CisJCQkJc3RybTItPmNvbm5lY3RfdHlwZSA9IENPTk5FQ1RUWVBFX05PREVJTlBVVDsKKwkJCX0KKwkJfSBlbHNlIGlmIChub2RlMV90eXBlICE9IE5PREVfREVWSUNFKQorCQkJc3RybTEtPmNvbm5lY3RfdHlwZSA9IENPTk5FQ1RUWVBFX0dQUE9VVFBVVDsKKwl9IGVsc2UgeworCQkvKiBHUFAgPT0gPiBOT0RFICovCisJCURCQ19BU1NFUlQobm9kZTIgIT0gKHN0cnVjdCBub2RlX29iamVjdCAqKURTUF9IR1BQTk9ERSk7CisJCXN0cm1faW5kZXggPSBub2RlMi0+bnVtX2lucHV0cyArIG5vZGUyLT5udW1fb3V0cHV0cyAtIDE7CisJCXN0cm0yID0gJihub2RlMi0+c3RyZWFtX2Nvbm5lY3Rbc3RybV9pbmRleF0pOworCQlzdHJtMi0+Y2Jfc3RydWN0ID0gc2l6ZW9mKHN0cnVjdCBkc3Bfc3RyZWFtY29ubmVjdCk7CisJCXN0cm0yLT50aGlzX25vZGVfc3RyZWFtX2luZGV4ID0gc3RyZWFtMjsKKwkJc3RybTItPmNvbm5lY3RfdHlwZSA9IENPTk5FQ1RUWVBFX0dQUElOUFVUOworCX0KK30KKworLyoKKyAqICA9PT09PT09PSBmaWxsX3N0cmVhbV9kZWYgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBGaWxscyBTdHJlYW0gYXR0cmlidXRlcy4KKyAqLworc3RhdGljIHZvaWQgZmlsbF9zdHJlYW1fZGVmKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQkgICAgc3RydWN0IG5vZGVfc3RybWRlZiAqcHN0cm1fZGVmLAorCQkJICAgIHN0cnVjdCBkc3Bfc3RybWF0dHIgKnBhdHRycykKK3sKKwlzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21nciA9IGhub2RlLT5obm9kZV9tZ3I7CisKKwlpZiAocGF0dHJzICE9IE5VTEwpIHsKKwkJcHN0cm1fZGVmLT5udW1fYnVmcyA9IHBhdHRycy0+bnVtX2J1ZnM7CisJCXBzdHJtX2RlZi0+YnVmX3NpemUgPQorCQkgICAgcGF0dHJzLT5idWZfc2l6ZSAvIGhub2RlX21nci0+dWRzcF9kYXRhX21hdV9zaXplOworCQlwc3RybV9kZWYtPnNlZ19pZCA9IHBhdHRycy0+c2VnX2lkOworCQlwc3RybV9kZWYtPmJ1Zl9hbGlnbm1lbnQgPSBwYXR0cnMtPmJ1Zl9hbGlnbm1lbnQ7CisJCXBzdHJtX2RlZi0+dXRpbWVvdXQgPSBwYXR0cnMtPnV0aW1lb3V0OworCX0gZWxzZSB7CisJCXBzdHJtX2RlZi0+bnVtX2J1ZnMgPSBERUZBVUxUTkJVRlM7CisJCXBzdHJtX2RlZi0+YnVmX3NpemUgPQorCQkgICAgREVGQVVMVEJVRlNJWkUgLyBobm9kZV9tZ3ItPnVkc3BfZGF0YV9tYXVfc2l6ZTsKKwkJcHN0cm1fZGVmLT5zZWdfaWQgPSBERUZBVUxUU0VHSUQ7CisJCXBzdHJtX2RlZi0+YnVmX2FsaWdubWVudCA9IERFRkFVTFRBTElHTk1FTlQ7CisJCXBzdHJtX2RlZi0+dXRpbWVvdXQgPSBERUZBVUxUVElNRU9VVDsKKwl9Cit9CisKKy8qCisgKiAgPT09PT09PT0gZnJlZV9zdHJlYW0gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBVcGRhdGVzIHRoZSBjaGFubmVsIG1hc2sgYW5kIGZyZWVzIHRoZSBwaXBlIGlkLgorICovCitzdGF0aWMgdm9pZCBmcmVlX3N0cmVhbShzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21nciwgc3RydWN0IHN0cmVhbV9jaG5sIHN0cmVhbSkKK3sKKwkvKiBGcmVlIHVwIHRoZSBwaXBlIGlkIHVubGVzcyBvdGhlciBub2RlIGhhcyBub3QgeWV0IGJlZW4gZGVsZXRlZC4gKi8KKwlpZiAoc3RyZWFtLnR5cGUgPT0gTk9ERUNPTk5FQ1QpIHsKKwkJaWYgKGdiX3Rlc3QoaG5vZGVfbWdyLT5waXBlX2RvbmVfbWFwLCBzdHJlYW0uZGV2X2lkKSkgeworCQkJLyogVGhlIG90aGVyIG5vZGUgaGFzIGFscmVhZHkgYmVlbiBkZWxldGVkICovCisJCQlnYl9jbGVhcihobm9kZV9tZ3ItPnBpcGVfZG9uZV9tYXAsIHN0cmVhbS5kZXZfaWQpOworCQkJZ2JfY2xlYXIoaG5vZGVfbWdyLT5waXBlX21hcCwgc3RyZWFtLmRldl9pZCk7CisJCX0gZWxzZSB7CisJCQkvKiBUaGUgb3RoZXIgbm9kZSBoYXMgbm90IGJlZW4gZGVsZXRlZCB5ZXQgKi8KKwkJCWdiX3NldChobm9kZV9tZ3ItPnBpcGVfZG9uZV9tYXAsIHN0cmVhbS5kZXZfaWQpOworCQl9CisJfSBlbHNlIGlmIChzdHJlYW0udHlwZSA9PSBIT1NUQ09OTkVDVCkgeworCQlpZiAoc3RyZWFtLmRldl9pZCA8IGhub2RlX21nci0+dWxfbnVtX2NobmxzKSB7CisJCQlnYl9jbGVhcihobm9kZV9tZ3ItPmNobmxfbWFwLCBzdHJlYW0uZGV2X2lkKTsKKwkJfSBlbHNlIGlmIChzdHJlYW0uZGV2X2lkIDwgKDIgKiBobm9kZV9tZ3ItPnVsX251bV9jaG5scykpIHsKKwkJCS8qIGRzcC1kbWEgKi8KKwkJCWdiX2NsZWFyKGhub2RlX21nci0+ZG1hX2NobmxfbWFwLCBzdHJlYW0uZGV2X2lkIC0KKwkJCQkgKDEgKiBobm9kZV9tZ3ItPnVsX251bV9jaG5scykpOworCQl9IGVsc2UgaWYgKHN0cmVhbS5kZXZfaWQgPCAoMyAqIGhub2RlX21nci0+dWxfbnVtX2NobmxzKSkgeworCQkJLyogemVyby1jb3B5ICovCisJCQlnYl9jbGVhcihobm9kZV9tZ3ItPnpjX2NobmxfbWFwLCBzdHJlYW0uZGV2X2lkIC0KKwkJCQkgKDIgKiBobm9kZV9tZ3ItPnVsX251bV9jaG5scykpOworCQl9CisJfQorfQorCisvKgorICogID09PT09PT09IGdldF9meG5fYWRkcmVzcyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlcyB0aGUgYWRkcmVzcyBmb3IgY3JlYXRlLCBleGVjdXRlIG9yIGRlbGV0ZSBwaGFzZSBmb3IgYSBub2RlLgorICovCitzdGF0aWMgaW50IGdldF9meG5fYWRkcmVzcyhzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLCB1MzIgKiBmeG5fYWRkciwKKwkJCQkgIHUzMiBwaGFzZSkKK3sKKwljaGFyICpwc3RyX2Z4bl9uYW1lID0gTlVMTDsKKwlzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21nciA9IGhub2RlLT5obm9kZV9tZ3I7CisJaW50IHN0YXR1cyA9IDA7CisJREJDX1JFUVVJUkUobm9kZV9nZXRfdHlwZShobm9kZSkgPT0gTk9ERV9UQVNLIHx8CisJCSAgICBub2RlX2dldF90eXBlKGhub2RlKSA9PSBOT0RFX0RBSVNTT0NLRVQgfHwKKwkJICAgIG5vZGVfZ2V0X3R5cGUoaG5vZGUpID09IE5PREVfTUVTU0FHRSk7CisKKwlzd2l0Y2ggKHBoYXNlKSB7CisJY2FzZSBDUkVBVEVQSEFTRToKKwkJcHN0cl9meG5fbmFtZSA9CisJCSAgICBobm9kZS0+ZGNkX3Byb3BzLm9ial9kYXRhLm5vZGVfb2JqLnBzdHJfY3JlYXRlX3BoYXNlX2Z4bjsKKwkJYnJlYWs7CisJY2FzZSBFWEVDVVRFUEhBU0U6CisJCXBzdHJfZnhuX25hbWUgPQorCQkgICAgaG5vZGUtPmRjZF9wcm9wcy5vYmpfZGF0YS5ub2RlX29iai5wc3RyX2V4ZWN1dGVfcGhhc2VfZnhuOworCQlicmVhazsKKwljYXNlIERFTEVURVBIQVNFOgorCQlwc3RyX2Z4bl9uYW1lID0KKwkJICAgIGhub2RlLT5kY2RfcHJvcHMub2JqX2RhdGEubm9kZV9vYmoucHN0cl9kZWxldGVfcGhhc2VfZnhuOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBTaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KKwkJREJDX0FTU0VSVChmYWxzZSk7CisJCWJyZWFrOworCX0KKworCXN0YXR1cyA9CisJICAgIGhub2RlX21nci0+bmxkcl9meG5zLnBmbl9nZXRfZnhuX2FkZHIoaG5vZGUtPm5sZHJfbm9kZV9vYmosCisJCQkJCQkgIHBzdHJfZnhuX25hbWUsIGZ4bl9hZGRyKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZ2V0X25vZGVfaW5mbyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlcyB0aGUgbm9kZSBpbmZvcm1hdGlvbi4KKyAqLwordm9pZCBnZXRfbm9kZV9pbmZvKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsIHN0cnVjdCBkc3Bfbm9kZWluZm8gKm5vZGVfaW5mbykKK3sKKwl1MzIgaTsKKworCURCQ19SRVFVSVJFKGhub2RlKTsKKwlEQkNfUkVRVUlSRShub2RlX2luZm8gIT0gTlVMTCk7CisKKwlub2RlX2luZm8tPmNiX3N0cnVjdCA9IHNpemVvZihzdHJ1Y3QgZHNwX25vZGVpbmZvKTsKKwlub2RlX2luZm8tPm5iX25vZGVfZGF0YWJhc2VfcHJvcHMgPQorCSAgICBobm9kZS0+ZGNkX3Byb3BzLm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wczsKKwlub2RlX2luZm8tPmV4ZWN1dGlvbl9wcmlvcml0eSA9IGhub2RlLT5wcmlvOworCW5vZGVfaW5mby0+ZGV2aWNlX293bmVyID0gaG5vZGUtPmRldmljZV9vd25lcjsKKwlub2RlX2luZm8tPm51bWJlcl9zdHJlYW1zID0gaG5vZGUtPm51bV9pbnB1dHMgKyBobm9kZS0+bnVtX291dHB1dHM7CisJbm9kZV9pbmZvLT5ub2RlX2VudiA9IGhub2RlLT5ub2RlX2VudjsKKworCW5vZGVfaW5mby0+bnNfZXhlY3V0aW9uX3N0YXRlID0gbm9kZV9nZXRfc3RhdGUoaG5vZGUpOworCisJLyogQ29weSBzdHJlYW0gY29ubmVjdCBkYXRhICovCisJZm9yIChpID0gMDsgaSA8IGhub2RlLT5udW1faW5wdXRzICsgaG5vZGUtPm51bV9vdXRwdXRzOyBpKyspCisJCW5vZGVfaW5mby0+c2Nfc3RyZWFtX2Nvbm5lY3Rpb25baV0gPSBobm9kZS0+c3RyZWFtX2Nvbm5lY3RbaV07CisKK30KKworLyoKKyAqICA9PT09PT09PSBnZXRfbm9kZV9wcm9wcyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIG5vZGUgcHJvcGVydGllcy4KKyAqLworc3RhdGljIGludCBnZXRfbm9kZV9wcm9wcyhzdHJ1Y3QgZGNkX21hbmFnZXIgKmhkY2RfbWdyLAorCQkJCSBzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLAorCQkJCSBjb25zdCBzdHJ1Y3QgZHNwX3V1aWQgKm5vZGVfdXVpZCwKKwkJCQkgc3RydWN0IGRjZF9nZW5lcmljb2JqICpkY2RfcHJvcCkKK3sKKwl1MzIgbGVuOworCXN0cnVjdCBub2RlX21zZ2FyZ3MgKnBtc2dfYXJnczsKKwlzdHJ1Y3Qgbm9kZV90YXNrYXJncyAqdGFza19hcmdfb2JqOworCWVudW0gbm9kZV90eXBlIG5vZGVfdHlwZSA9IE5PREVfVEFTSzsKKwlzdHJ1Y3QgZHNwX25kYnByb3BzICpwbmRiX3Byb3BzID0KKwkgICAgJihkY2RfcHJvcC0+b2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzKTsKKwlpbnQgc3RhdHVzID0gMDsKKwljaGFyIHN6X3V1aWRbTUFYVVVJRExFTl07CisKKwlzdGF0dXMgPSBkY2RfZ2V0X29iamVjdF9kZWYoaGRjZF9tZ3IsIChzdHJ1Y3QgZHNwX3V1aWQgKilub2RlX3V1aWQsCisJCQkJICAgIERTUF9EQ0ROT0RFVFlQRSwgZGNkX3Byb3ApOworCisJaWYgKCFzdGF0dXMpIHsKKwkJaG5vZGUtPm50eXBlID0gbm9kZV90eXBlID0gcG5kYl9wcm9wcy0+bnR5cGU7CisKKwkJLyogQ3JlYXRlIFVVSUQgdmFsdWUgdG8gc2V0IGluIHJlZ2lzdHJ5LiAqLworCQl1dWlkX3V1aWRfdG9fc3RyaW5nKChzdHJ1Y3QgZHNwX3V1aWQgKilub2RlX3V1aWQsIHN6X3V1aWQsCisJCQkJICAgIE1BWFVVSURMRU4pOworCQlkZXZfZGJnKGJyaWRnZSwgIihub2RlKSBVVUlEOiAlc1xuIiwgc3pfdXVpZCk7CisKKwkJLyogRmlsbCBpbiBtZXNzYWdlIGFyZ3MgdGhhdCBjb21lIGZyb20gTkRCICovCisJCWlmIChub2RlX3R5cGUgIT0gTk9ERV9ERVZJQ0UpIHsKKwkJCXBtc2dfYXJncyA9ICYoaG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS5ub2RlX21zZ19hcmdzKTsKKwkJCXBtc2dfYXJncy0+c2VnX2lkID0KKwkJCSAgICBkY2RfcHJvcC0+b2JqX2RhdGEubm9kZV9vYmoubXNnX3NlZ2lkOworCQkJcG1zZ19hcmdzLT5ub3RpZnlfdHlwZSA9CisJCQkgICAgZGNkX3Byb3AtPm9ial9kYXRhLm5vZGVfb2JqLm1zZ19ub3RpZnlfdHlwZTsKKwkJCXBtc2dfYXJncy0+bWF4X21zZ3MgPSBwbmRiX3Byb3BzLT5tZXNzYWdlX2RlcHRoOworCQkJZGV2X2RiZyhicmlkZ2UsICIobm9kZSkgTWF4IE51bWJlciBvZiBNZXNzYWdlczogMHgleFxuIiwKKwkJCQlwbXNnX2FyZ3MtPm1heF9tc2dzKTsKKwkJfSBlbHNlIHsKKwkJCS8qIENvcHkgZGV2aWNlIG5hbWUgKi8KKwkJCURCQ19SRVFVSVJFKHBuZGJfcHJvcHMtPmFjX25hbWUpOworCQkJbGVuID0gc3RybGVuKHBuZGJfcHJvcHMtPmFjX25hbWUpOworCQkJREJDX0FTU0VSVChsZW4gPCBNQVhERVZOQU1FTEVOKTsKKwkJCWhub2RlLT5wc3RyX2Rldl9uYW1lID0ga3phbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKKwkJCWlmIChobm9kZS0+cHN0cl9kZXZfbmFtZSA9PSBOVUxMKSB7CisJCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCX0gZWxzZSB7CisJCQkJc3RybmNweShobm9kZS0+cHN0cl9kZXZfbmFtZSwKKwkJCQkJcG5kYl9wcm9wcy0+YWNfbmFtZSwgbGVuKTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoIXN0YXR1cykgeworCQkvKiBGaWxsIGluIGNyZWF0ZSBhcmdzIHRoYXQgY29tZSBmcm9tIE5EQiAqLworCQlpZiAobm9kZV90eXBlID09IE5PREVfVEFTSyB8fCBub2RlX3R5cGUgPT0gTk9ERV9EQUlTU09DS0VUKSB7CisJCQl0YXNrX2FyZ19vYmogPSAmKGhub2RlLT5jcmVhdGVfYXJncy5hc2EudGFza19hcmdfb2JqKTsKKwkJCXRhc2tfYXJnX29iai0+cHJpbyA9IHBuZGJfcHJvcHMtPnByaW87CisJCQl0YXNrX2FyZ19vYmotPnN0YWNrX3NpemUgPSBwbmRiX3Byb3BzLT5zdGFja19zaXplOworCQkJdGFza19hcmdfb2JqLT5zeXNfc3RhY2tfc2l6ZSA9CisJCQkgICAgcG5kYl9wcm9wcy0+c3lzX3N0YWNrX3NpemU7CisJCQl0YXNrX2FyZ19vYmotPnN0YWNrX3NlZyA9IHBuZGJfcHJvcHMtPnN0YWNrX3NlZzsKKwkJCWRldl9kYmcoYnJpZGdlLCAiKG5vZGUpIFByaW9yaXR5OiAweCV4IFN0YWNrIFNpemU6ICIKKwkJCQkiMHgleCB3b3JkcyBTeXN0ZW0gU3RhY2sgU2l6ZTogMHgleCB3b3JkcyAiCisJCQkJIlN0YWNrIFNlZ21lbnQ6IDB4JXggcHJvZmlsZSBjb3VudCA6IDB4JXhcbiIsCisJCQkJdGFza19hcmdfb2JqLT5wcmlvLCB0YXNrX2FyZ19vYmotPnN0YWNrX3NpemUsCisJCQkJdGFza19hcmdfb2JqLT5zeXNfc3RhY2tfc2l6ZSwKKwkJCQl0YXNrX2FyZ19vYmotPnN0YWNrX3NlZywKKwkJCQlwbmRiX3Byb3BzLT5jb3VudF9wcm9maWxlcyk7CisJCX0KKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGdldF9wcm9jX3Byb3BzID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIHByb2Nlc3NvciBwcm9wZXJ0aWVzLgorICovCitzdGF0aWMgaW50IGdldF9wcm9jX3Byb3BzKHN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyLAorCQkJCSBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmopCit7CisJc3RydWN0IGNmZ19ob3N0cmVzICpob3N0X3JlczsKKwlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpwYnJpZGdlX2NvbnRleHQ7CisJaW50IHN0YXR1cyA9IDA7CisKKwlzdGF0dXMgPSBkZXZfZ2V0X2JyaWRnZV9jb250ZXh0KGhkZXZfb2JqLCAmcGJyaWRnZV9jb250ZXh0KTsKKwlpZiAoIXBicmlkZ2VfY29udGV4dCkKKwkJc3RhdHVzID0gLUVGQVVMVDsKKworCWlmICghc3RhdHVzKSB7CisJCWhvc3RfcmVzID0gcGJyaWRnZV9jb250ZXh0LT5yZXNvdXJjZXM7CisJCWlmICghaG9zdF9yZXMpCisJCQlyZXR1cm4gLUVQRVJNOworCQlobm9kZV9tZ3ItPnVsX2Nobmxfb2Zmc2V0ID0gaG9zdF9yZXMtPmR3X2Nobmxfb2Zmc2V0OworCQlobm9kZV9tZ3ItPnVsX2NobmxfYnVmX3NpemUgPSBob3N0X3Jlcy0+ZHdfY2hubF9idWZfc2l6ZTsKKwkJaG5vZGVfbWdyLT51bF9udW1fY2hubHMgPSBob3N0X3Jlcy0+ZHdfbnVtX2NobmxzOworCisJCS8qCisJCSAqICBQUk9DIHdpbGwgYWRkIGFuIEFQSSB0byBnZXQgZHNwX3Byb2Nlc3NvcmluZm8uCisJCSAqICBGaWxsIGluIGRlZmF1bHQgdmFsdWVzIGZvciBub3cuCisJCSAqLworCQkvKiBUT0RPIC0tIEluc3RlYWQgb2YgaGFyZCBjb2RpbmcsIHRha2UgZnJvbSByZWdpc3RyeSAqLworCQlobm9kZV9tZ3ItPnByb2NfZmFtaWx5ID0gNjAwMDsKKwkJaG5vZGVfbWdyLT5wcm9jX3R5cGUgPSA2NDEwOworCQlobm9kZV9tZ3ItPm1pbl9wcmkgPSBEU1BfTk9ERV9NSU5fUFJJT1JJVFk7CisJCWhub2RlX21nci0+bWF4X3ByaSA9IERTUF9OT0RFX01BWF9QUklPUklUWTsKKwkJaG5vZGVfbWdyLT51ZHNwX3dvcmRfc2l6ZSA9IERTUFdPUkRTSVpFOworCQlobm9kZV9tZ3ItPnVkc3BfZGF0YV9tYXVfc2l6ZSA9IERTUFdPUkRTSVpFOworCQlobm9kZV9tZ3ItPnVkc3BfbWF1X3NpemUgPSAxOworCisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9nZXRfdXVpZF9wcm9wcyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEZldGNoIE5vZGUgVVVJRCBwcm9wZXJ0aWVzIGZyb20gRENEL0RPRiBmaWxlLgorICovCitpbnQgbm9kZV9nZXRfdXVpZF9wcm9wcyh2b2lkICpocHJvY2Vzc29yLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkc3BfdXVpZCAqbm9kZV91dWlkLAorCQkJICAgICAgIHN0cnVjdCBkc3BfbmRicHJvcHMgKm5vZGVfcHJvcHMpCit7CisJc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3IgPSBOVUxMOworCXN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iajsKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZGNkX25vZGVwcm9wcyBkY2Rfbm9kZV9wcm9wczsKKwlzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0YXRlIHByb2Nfc3RhdGU7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoaHByb2Nlc3NvciAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShub2RlX3V1aWQgIT0gTlVMTCk7CisKKwlpZiAoaHByb2Nlc3NvciA9PSBOVUxMIHx8IG5vZGVfdXVpZCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCXN0YXR1cyA9IHByb2NfZ2V0X3N0YXRlKGhwcm9jZXNzb3IsICZwcm9jX3N0YXRlLAorCQkJCXNpemVvZihzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0YXRlKSk7CisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2VuZDsKKwkvKiBJZiBwcm9jZXNzb3IgaXMgaW4gZXJyb3Igc3RhdGUgdGhlbiBkb24ndCBhdHRlbXB0CisJICAgdG8gc2VuZCB0aGUgbWVzc2FnZSAqLworCWlmIChwcm9jX3N0YXRlLnByb2Nfc3RhdGUgPT0gUFJPQ19FUlJPUikgeworCQlzdGF0dXMgPSAtRVBFUk07CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCisJc3RhdHVzID0gcHJvY19nZXRfZGV2X29iamVjdChocHJvY2Vzc29yLCAmaGRldl9vYmopOworCWlmIChoZGV2X29iaikgeworCQlzdGF0dXMgPSBkZXZfZ2V0X25vZGVfbWFuYWdlcihoZGV2X29iaiwgJmhub2RlX21ncik7CisJCWlmIChobm9kZV9tZ3IgPT0gTlVMTCkgeworCQkJc3RhdHVzID0gLUVGQVVMVDsKKwkJCWdvdG8gZnVuY19lbmQ7CisJCX0KKwl9CisKKwkvKgorCSAqIEVudGVyIHRoZSBjcml0aWNhbCBzZWN0aW9uLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlCisJICogZGNkX2dldF9vYmplY3RfZGVmIHdpbGwgdWx0aW1hdGVseSBlbmQgdXAgY2FsbGluZyBkYmxsX29wZW4vY2xvc2UsCisJICogd2hpY2ggbmVlZHMgdG8gYmUgcHJvdGVjdGVkIGluIG9yZGVyIHRvIG5vdCBjb3JydXB0IHRoZSB6bGliIG1hbmFnZXIKKwkgKiAoQ09EKS4KKwkgKi8KKwltdXRleF9sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOworCisJZGNkX25vZGVfcHJvcHMucHN0cl9jcmVhdGVfcGhhc2VfZnhuID0gTlVMTDsKKwlkY2Rfbm9kZV9wcm9wcy5wc3RyX2V4ZWN1dGVfcGhhc2VfZnhuID0gTlVMTDsKKwlkY2Rfbm9kZV9wcm9wcy5wc3RyX2RlbGV0ZV9waGFzZV9meG4gPSBOVUxMOworCWRjZF9ub2RlX3Byb3BzLnBzdHJfaV9hbGdfbmFtZSA9IE5VTEw7CisKKwlzdGF0dXMgPSBkY2RfZ2V0X29iamVjdF9kZWYoaG5vZGVfbWdyLT5oZGNkX21nciwKKwkJKHN0cnVjdCBkc3BfdXVpZCAqKW5vZGVfdXVpZCwgRFNQX0RDRE5PREVUWVBFLAorCQkoc3RydWN0IGRjZF9nZW5lcmljb2JqICopJmRjZF9ub2RlX3Byb3BzKTsKKworCWlmICghc3RhdHVzKSB7CisJCSpub2RlX3Byb3BzID0gZGNkX25vZGVfcHJvcHMubmRiX3Byb3BzOworCQlrZnJlZShkY2Rfbm9kZV9wcm9wcy5wc3RyX2NyZWF0ZV9waGFzZV9meG4pOworCisJCWtmcmVlKGRjZF9ub2RlX3Byb3BzLnBzdHJfZXhlY3V0ZV9waGFzZV9meG4pOworCisJCWtmcmVlKGRjZF9ub2RlX3Byb3BzLnBzdHJfZGVsZXRlX3BoYXNlX2Z4bik7CisKKwkJa2ZyZWUoZGNkX25vZGVfcHJvcHMucHN0cl9pX2FsZ19uYW1lKTsKKwl9CisJLyogIExlYXZlIHRoZSBjcml0aWNhbCBzZWN0aW9uLCB3ZSdyZSBkb25lLiAqLworCW11dGV4X3VubG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKK2Z1bmNfZW5kOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZ2V0X3Jtc19meG5zID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIFJNUyBmdW5jdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQgZ2V0X3Jtc19meG5zKHN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyKQoreworCXMzMiBpOworCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqID0gaG5vZGVfbWdyLT5oZGV2X29iajsKKwlpbnQgc3RhdHVzID0gMDsKKworCXN0YXRpYyBjaGFyICpwc3pfZnhuc1tOVU1STVNGWE5TXSA9IHsKKwkJIlJNU19xdWVyeVNlcnZlciIsCS8qIFJNU1FVRVJZU0VSVkVSICovCisJCSJSTVNfY29uZmlndXJlU2VydmVyIiwJLyogUk1TQ09ORklHVVJFU0VSVkVSICovCisJCSJSTVNfY3JlYXRlTm9kZSIsCS8qIFJNU0NSRUFURU5PREUgKi8KKwkJIlJNU19leGVjdXRlTm9kZSIsCS8qIFJNU0VYRUNVVEVOT0RFICovCisJCSJSTVNfZGVsZXRlTm9kZSIsCS8qIFJNU0RFTEVURU5PREUgKi8KKwkJIlJNU19jaGFuZ2VOb2RlUHJpb3JpdHkiLAkvKiBSTVNDSEFOR0VOT0RFUFJJT1JJVFkgKi8KKwkJIlJNU19yZWFkTWVtb3J5IiwJLyogUk1TUkVBRE1FTU9SWSAqLworCQkiUk1TX3dyaXRlTWVtb3J5IiwJLyogUk1TV1JJVEVNRU1PUlkgKi8KKwkJIlJNU19jb3B5IiwJLyogUk1TQ09QWSAqLworCX07CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNUk1TRlhOUzsgaSsrKSB7CisJCXN0YXR1cyA9IGRldl9nZXRfc3ltYm9sKGRldl9vYmosIHBzel9meG5zW2ldLAorCQkJCQkmKGhub2RlX21nci0+dWxfZnhuX2FkZHJzW2ldKSk7CisJCWlmIChzdGF0dXMpIHsKKwkJCWlmIChzdGF0dXMgPT0gLUVTUElQRSkgeworCQkJCS8qCisJCQkJICogIE1heSBiZSBsb2FkZWQgZHluYW1pY2FsbHkgKGluIHRoZSBmdXR1cmUpLAorCQkJCSAqICBidXQgcmV0dXJuIGFuIGVycm9yIGZvciBub3cuCisJCQkJICovCisJCQkJZGV2X2RiZyhicmlkZ2UsICIlczogUk1TIGZ1bmN0aW9uOiAlcyBjdXJyZW50bHkiCisJCQkJCSIgbm90IGxvYWRlZFxuIiwgX19mdW5jX18sIHBzel9meG5zW2ldKTsKKwkJCX0gZWxzZSB7CisJCQkJZGV2X2RiZyhicmlkZ2UsICIlczogU3ltYm9sIG5vdCBmb3VuZDogJXMgIgorCQkJCQkic3RhdHVzID0gMHgleFxuIiwgX19mdW5jX18sCisJCQkJCXBzel9meG5zW2ldLCBzdGF0dXMpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBvdmx5ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ2FsbGVkIGR1cmluZyBvdmVybGF5LlNlbmRzIGNvbW1hbmQgdG8gUk1TIHRvIGNvcHkgYSBibG9jayBvZiBkYXRhLgorICovCitzdGF0aWMgdTMyIG92bHkodm9pZCAqcHJpdl9yZWYsIHUzMiBkc3BfcnVuX2FkZHIsIHUzMiBkc3BfbG9hZF9hZGRyLAorCQl1MzIgdWxfbnVtX2J5dGVzLCB1MzIgbWVtX3NwYWNlKQoreworCXN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUgPSAoc3RydWN0IG5vZGVfb2JqZWN0ICopcHJpdl9yZWY7CisJc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3I7CisJdTMyIHVsX2J5dGVzID0gMDsKKwl1MzIgdWxfc2l6ZTsKKwl1MzIgdWxfdGltZW91dDsKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpoYnJpZGdlX2NvbnRleHQ7CisJLyogRnVuY3Rpb24gaW50ZXJmYWNlIHRvIEJyaWRnZSBkcml2ZXIqLworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCisJREJDX1JFUVVJUkUoaG5vZGUpOworCisJaG5vZGVfbWdyID0gaG5vZGUtPmhub2RlX21ncjsKKworCXVsX3NpemUgPSB1bF9udW1fYnl0ZXMgLyBobm9kZV9tZ3ItPnVkc3Bfd29yZF9zaXplOworCXVsX3RpbWVvdXQgPSBobm9kZS0+dXRpbWVvdXQ7CisKKwkvKiBDYWxsIG5ldyBNZW1Db3B5IGZ1bmN0aW9uICovCisJaW50Zl9meG5zID0gaG5vZGVfbWdyLT5pbnRmX2Z4bnM7CisJc3RhdHVzID0gZGV2X2dldF9icmlkZ2VfY29udGV4dChobm9kZV9tZ3ItPmhkZXZfb2JqLCAmaGJyaWRnZV9jb250ZXh0KTsKKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPQorCQkgICAgKCppbnRmX2Z4bnMtPnBmbl9icmRfbWVtX2NvcHkpIChoYnJpZGdlX2NvbnRleHQsCisJCQkJCQlkc3BfcnVuX2FkZHIsIGRzcF9sb2FkX2FkZHIsCisJCQkJCQl1bF9udW1fYnl0ZXMsICh1MzIpIG1lbV9zcGFjZSk7CisJCWlmICghc3RhdHVzKQorCQkJdWxfYnl0ZXMgPSB1bF9udW1fYnl0ZXM7CisJCWVsc2UKKwkJCXByX2RlYnVnKCIlczogZmFpbGVkIHRvIGNvcHkgYnJkIG1lbW9yeSwgc3RhdHVzIDB4JXhcbiIsCisJCQkJIF9fZnVuY19fLCBzdGF0dXMpOworCX0gZWxzZSB7CisJCXByX2RlYnVnKCIlczogZmFpbGVkIHRvIGdldCBCcmlkZ2UgY29udGV4dCwgc3RhdHVzIDB4JXhcbiIsCisJCQkgX19mdW5jX18sIHN0YXR1cyk7CisJfQorCisJcmV0dXJuIHVsX2J5dGVzOworfQorCisvKgorICogID09PT09PT09IG1lbV93cml0ZSA9PT09PT09PQorICovCitzdGF0aWMgdTMyIG1lbV93cml0ZSh2b2lkICpwcml2X3JlZiwgdTMyIGRzcF9hZGQsIHZvaWQgKnBidWYsCisJCSAgICAgdTMyIHVsX251bV9ieXRlcywgdTMyIG1lbV9zcGFjZSkKK3sKKwlzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlID0gKHN0cnVjdCBub2RlX29iamVjdCAqKXByaXZfcmVmOworCXN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyOworCXUxNiBtZW1fc2VjdF90eXBlOworCXUzMiB1bF90aW1lb3V0OworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmhicmlkZ2VfY29udGV4dDsKKwkvKiBGdW5jdGlvbiBpbnRlcmZhY2UgdG8gQnJpZGdlIGRyaXZlciAqLworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCisJREJDX1JFUVVJUkUoaG5vZGUpOworCURCQ19SRVFVSVJFKG1lbV9zcGFjZSAmIERCTExfQ09ERSB8fCBtZW1fc3BhY2UgJiBEQkxMX0RBVEEpOworCisJaG5vZGVfbWdyID0gaG5vZGUtPmhub2RlX21ncjsKKworCXVsX3RpbWVvdXQgPSBobm9kZS0+dXRpbWVvdXQ7CisJbWVtX3NlY3RfdHlwZSA9IChtZW1fc3BhY2UgJiBEQkxMX0NPREUpID8gUk1TX0NPREUgOiBSTVNfREFUQTsKKworCS8qIENhbGwgbmV3IE1lbVdyaXRlIGZ1bmN0aW9uICovCisJaW50Zl9meG5zID0gaG5vZGVfbWdyLT5pbnRmX2Z4bnM7CisJc3RhdHVzID0gZGV2X2dldF9icmlkZ2VfY29udGV4dChobm9kZV9tZ3ItPmhkZXZfb2JqLCAmaGJyaWRnZV9jb250ZXh0KTsKKwlzdGF0dXMgPSAoKmludGZfZnhucy0+cGZuX2JyZF9tZW1fd3JpdGUpIChoYnJpZGdlX2NvbnRleHQsIHBidWYsCisJCQkJCWRzcF9hZGQsIHVsX251bV9ieXRlcywgbWVtX3NlY3RfdHlwZSk7CisKKwlyZXR1cm4gdWxfbnVtX2J5dGVzOworfQorCisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0JBQ0tUUkFDRQorLyoKKyAqICA9PT09PT09PSBub2RlX2ZpbmRfYWRkciA9PT09PT09PQorICovCitpbnQgbm9kZV9maW5kX2FkZHIoc3RydWN0IG5vZGVfbWdyICpub2RlX21nciwgdTMyIHN5bV9hZGRyLAorCQl1MzIgb2Zmc2V0X3JhbmdlLCB2b2lkICpzeW1fYWRkcl9vdXRwdXQsIGNoYXIgKnN5bV9uYW1lKQoreworCXN0cnVjdCBub2RlX29iamVjdCAqbm9kZV9vYmo7CisJaW50IHN0YXR1cyA9IC1FTk9FTlQ7CisJdTMyIG47CisKKwlwcl9kZWJ1ZygiJXMoMHgleCwgMHgleCwgMHgleCwgMHgleCwgICVzKVxuIiwgX19mdW5jX18sCisJCQkodW5zaWduZWQgaW50KSBub2RlX21nciwKKwkJCXN5bV9hZGRyLCBvZmZzZXRfcmFuZ2UsCisJCQkodW5zaWduZWQgaW50KSBzeW1fYWRkcl9vdXRwdXQsIHN5bV9uYW1lKTsKKworCW5vZGVfb2JqID0gKHN0cnVjdCBub2RlX29iamVjdCAqKShub2RlX21nci0+bm9kZV9saXN0LT5oZWFkLm5leHQpOworCisJZm9yIChuID0gMDsgbiA8IG5vZGVfbWdyLT5udW1fbm9kZXM7IG4rKykgeworCQlzdGF0dXMgPSBubGRyX2ZpbmRfYWRkcihub2RlX29iai0+bmxkcl9ub2RlX29iaiwgc3ltX2FkZHIsCisJCQlvZmZzZXRfcmFuZ2UsIHN5bV9hZGRyX291dHB1dCwgc3ltX25hbWUpOworCisJCWlmICghc3RhdHVzKQorCQkJYnJlYWs7CisKKwkJbm9kZV9vYmogPSAoc3RydWN0IG5vZGVfb2JqZWN0ICopIChub2RlX29iai0+bGlzdF9lbGVtLm5leHQpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL3Byb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL3Byb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGMyNmUxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvcHJvYy5jCkBAIC0wLDAgKzEsMTkzNiBAQAorLyoKKyAqIHByb2MuYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBQcm9jZXNzb3IgaW50ZXJmYWNlIGF0IHRoZSBkcml2ZXIgbGV2ZWwuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSG9zdCBPUyAqLworI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRFNQL0JJT1MgQnJpZGdlICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHJhY2UgJiBEZWJ1ZyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9TIEFkYXB0YXRpb24gTGF5ZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY2ZnLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2xpc3QuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvbnRmeS5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9zeW5jLmg+CisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQnJpZGdlIERyaXZlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGRlaC5oPgorLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBsYXRmb3JtIE1hbmFnZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY29kLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9wcm9jcHJpdi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kbW0uaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlc291cmNlIE1hbmFnZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvbWdyLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL25vZGUuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvbmxkci5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9ybW0uaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE90aGVycyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRjZC5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9tc2cuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwaW9jdGwuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHJ2Lmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlzICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL3Byb2MuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvcHdyLmg+CisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvcmVzb3VyY2VjbGVhbnVwLmg+CisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVmaW5lcywgRGF0YSBTdHJ1Y3R1cmVzLCBUeXBlZGVmcyAqLworI2RlZmluZSBNQVhDTURMSU5FTEVOICAgICAgIDI1NQorI2RlZmluZSBQUk9DX0VOVlBST0NJRCAgICAgICJQUk9DX0lEPSVkIgorI2RlZmluZSBNQVhQUk9DSURMRU4JKDggKyA1KQorI2RlZmluZSBQUk9DX0RGTFRfVElNRU9VVCAgIDEwMDAwCS8qIFRpbWUgb3V0IGluIG1pbGxpc2Vjb25kcyAqLworI2RlZmluZSBQV1JfVElNRU9VVAkgNTAwCS8qIFNsZWVwL3dha2UgdGltb3V0IGluIG1zZWMgKi8KKyNkZWZpbmUgRVhURU5ECSAgICAgICJfRVhUX0VORCIJLyogRXh0bWVtIGVuZCBhZGRyIGluIERTUCBiaW5hcnkgKi8KKworI2RlZmluZSBEU1BfQ0FDSEVfTElORSAxMjgKKworI2RlZmluZSBCVUZNT0RFX01BU0sJKDMgPDwgMTQpCisKKy8qIEJ1ZmZlciBtb2RlcyBmcm9tIERTUCBwZXJzcGVjdGl2ZSAqLworI2RlZmluZSBSQlVGCQkweDQwMDAJCS8qIElucHV0IGJ1ZmZlciAqLworI2RlZmluZSBXQlVGCQkweDgwMDAJCS8qIE91dHB1dCBCdWZmZXIgKi8KKworZXh0ZXJuIHN0cnVjdCBkZXZpY2UgKmJyaWRnZTsKKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdsb2JhbHMgKi8KKworLyogVGhlIHByb2Nfb2JqZWN0IHN0cnVjdHVyZS4gKi8KK3N0cnVjdCBwcm9jX29iamVjdCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOwkvKiBMaW5rIHRvIG5leHQgcHJvY19vYmplY3QgKi8KKwlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmo7CS8qIERldmljZSB0aGlzIFBST0MgcmVwcmVzZW50cyAqLworCXUzMiBwcm9jZXNzOwkJLyogUHJvY2VzcyBvd25pbmcgdGhpcyBQcm9jZXNzb3IgKi8KKwlzdHJ1Y3QgbWdyX29iamVjdCAqaG1ncl9vYmo7CS8qIE1hbmFnZXIgT2JqZWN0IEhhbmRsZSAqLworCXUzMiBhdHRhY2hfY291bnQ7CS8qIFByb2Nlc3NvciBhdHRhY2ggY291bnQgKi8KKwl1MzIgcHJvY2Vzc29yX2lkOwkvKiBQcm9jZXNzb3IgbnVtYmVyICovCisJdTMyIHV0aW1lb3V0OwkJLyogVGltZSBvdXQgY291bnQgKi8KKwllbnVtIGRzcF9wcm9jc3RhdGUgcHJvY19zdGF0ZTsJLyogUHJvY2Vzc29yIHN0YXRlICovCisJdTMyIHVsX3VuaXQ7CQkvKiBERFNQIHVuaXQgbnVtYmVyICovCisJYm9vbCBpc19hbHJlYWR5X2F0dGFjaGVkOwkvKgorCQkJCQkgKiBUcnVlIGlmIHRoZSBEZXZpY2UgYmVsb3cgaGFzCisJCQkJCSAqIEdQUCBDbGllbnQgYXR0YWNoZWQKKwkJCQkJICovCisJc3RydWN0IG50Znlfb2JqZWN0ICpudGZ5X29iajsJLyogTWFuYWdlcyAgbm90aWZpY2F0aW9ucyAqLworCS8qIEJyaWRnZSBDb250ZXh0IEhhbmRsZSAqLworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmhicmlkZ2VfY29udGV4dDsKKwkvKiBGdW5jdGlvbiBpbnRlcmZhY2UgdG8gQnJpZGdlIGRyaXZlciAqLworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCWNoYXIgKnBzel9sYXN0X2NvZmY7CisJc3RydWN0IGxpc3RfaGVhZCBwcm9jX2xpc3Q7Cit9OworCitzdGF0aWMgdTMyIHJlZnM7CisKK0RFRklORV9NVVRFWChwcm9jX2xvY2spOwkvKiBGb3IgY3JpdGljYWwgc2VjdGlvbnMgKi8KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uIFByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgcHJvY19tb25pdG9yKHN0cnVjdCBwcm9jX29iamVjdCAqcHJvY19vYmopOworc3RhdGljIHMzMiBnZXRfZW52cF9jb3VudChjaGFyICoqZW52cCk7CitzdGF0aWMgY2hhciAqKnByZXBlbmRfZW52cChjaGFyICoqbmV3X2VudnAsIGNoYXIgKiplbnZwLCBzMzIgZW52cF9lbGVtcywKKwkJCSAgIHMzMiBjbmV3X2VudnAsIGNoYXIgKnN6X3Zhcik7CisKKy8qIHJlbWVtYmVyIG1hcHBpbmcgaW5mb3JtYXRpb24gKi8KK3N0YXRpYyBzdHJ1Y3QgZG1tX21hcF9vYmplY3QgKmFkZF9tYXBwaW5nX2luZm8oc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCwKKwkJCQl1MzIgbXB1X2FkZHIsIHUzMiBkc3BfYWRkciwgdTMyIHNpemUpCit7CisJc3RydWN0IGRtbV9tYXBfb2JqZWN0ICptYXBfb2JqOworCisJdTMyIG51bV91c3JfcGdzID0gc2l6ZSAvIFBHX1NJWkU0SzsKKworCXByX2RlYnVnKCIlczogYWRkaW5nIG1hcCBpbmZvOiBtcHVfYWRkciAweCV4IHZpcnQgMHgleCBzaXplIDB4JXhcbiIsCisJCQkJCQlfX2Z1bmNfXywgbXB1X2FkZHIsCisJCQkJCQlkc3BfYWRkciwgc2l6ZSk7CisKKwltYXBfb2JqID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRtbV9tYXBfb2JqZWN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYXBfb2JqKSB7CisJCXByX2VycigiJXM6IGt6YWxsb2MgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBOVUxMOworCX0KKwlJTklUX0xJU1RfSEVBRCgmbWFwX29iai0+bGluayk7CisKKwltYXBfb2JqLT5wYWdlcyA9IGtjYWxsb2MobnVtX3Vzcl9wZ3MsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwKKwkJCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIW1hcF9vYmotPnBhZ2VzKSB7CisJCXByX2VycigiJXM6IGt6YWxsb2MgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCWtmcmVlKG1hcF9vYmopOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwltYXBfb2JqLT5tcHVfYWRkciA9IG1wdV9hZGRyOworCW1hcF9vYmotPmRzcF9hZGRyID0gZHNwX2FkZHI7CisJbWFwX29iai0+c2l6ZSA9IHNpemU7CisJbWFwX29iai0+bnVtX3Vzcl9wZ3MgPSBudW1fdXNyX3BnczsKKworCXNwaW5fbG9jaygmcHJfY3R4dC0+ZG1tX21hcF9sb2NrKTsKKwlsaXN0X2FkZCgmbWFwX29iai0+bGluaywgJnByX2N0eHQtPmRtbV9tYXBfbGlzdCk7CisJc3Bpbl91bmxvY2soJnByX2N0eHQtPmRtbV9tYXBfbG9jayk7CisKKwlyZXR1cm4gbWFwX29iajsKK30KKworc3RhdGljIGludCBtYXRjaF9leGFjdF9tYXBfb2JqKHN0cnVjdCBkbW1fbWFwX29iamVjdCAqbWFwX29iaiwKKwkJCQkJdTMyIGRzcF9hZGRyLCB1MzIgc2l6ZSkKK3sKKwlpZiAobWFwX29iai0+ZHNwX2FkZHIgPT0gZHNwX2FkZHIgJiYgbWFwX29iai0+c2l6ZSAhPSBzaXplKQorCQlwcl9lcnIoIiVzOiBhZGRyIG1hdGNoICgweCV4KSwgc2l6ZSBkb24ndCAoMHgleCAhPSAweCV4KVxuIiwKKwkJCQlfX2Z1bmNfXywgZHNwX2FkZHIsIG1hcF9vYmotPnNpemUsIHNpemUpOworCisJcmV0dXJuIG1hcF9vYmotPmRzcF9hZGRyID09IGRzcF9hZGRyICYmCisJCW1hcF9vYmotPnNpemUgPT0gc2l6ZTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX21hcHBpbmdfaW5mb3JtYXRpb24oc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCwKKwkJCQkJCXUzMiBkc3BfYWRkciwgdTMyIHNpemUpCit7CisJc3RydWN0IGRtbV9tYXBfb2JqZWN0ICptYXBfb2JqOworCisJcHJfZGVidWcoIiVzOiBsb29raW5nIGZvciB2aXJ0IDB4JXggc2l6ZSAweCV4XG4iLCBfX2Z1bmNfXywKKwkJCQkJCQlkc3BfYWRkciwgc2l6ZSk7CisKKwlzcGluX2xvY2soJnByX2N0eHQtPmRtbV9tYXBfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShtYXBfb2JqLCAmcHJfY3R4dC0+ZG1tX21hcF9saXN0LCBsaW5rKSB7CisJCXByX2RlYnVnKCIlczogY2FuZGlkYXRlOiBtcHVfYWRkciAweCV4IHZpcnQgMHgleCBzaXplIDB4JXhcbiIsCisJCQkJCQkJX19mdW5jX18sCisJCQkJCQkJbWFwX29iai0+bXB1X2FkZHIsCisJCQkJCQkJbWFwX29iai0+ZHNwX2FkZHIsCisJCQkJCQkJbWFwX29iai0+c2l6ZSk7CisKKwkJaWYgKG1hdGNoX2V4YWN0X21hcF9vYmoobWFwX29iaiwgZHNwX2FkZHIsIHNpemUpKSB7CisJCQlwcl9kZWJ1ZygiJXM6IG1hdGNoLCBkZWxldGluZyBtYXAgaW5mb1xuIiwgX19mdW5jX18pOworCQkJbGlzdF9kZWwoJm1hcF9vYmotPmxpbmspOworCQkJa2ZyZWUobWFwX29iai0+ZG1hX2luZm8uc2cpOworCQkJa2ZyZWUobWFwX29iai0+cGFnZXMpOworCQkJa2ZyZWUobWFwX29iaik7CisJCQlnb3RvIG91dDsKKwkJfQorCQlwcl9kZWJ1ZygiJXM6IGNhbmRpZGF0ZSBkaWRuJ3QgbWF0Y2hcbiIsIF9fZnVuY19fKTsKKwl9CisKKwlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gZmluZCBnaXZlbiBtYXAgaW5mb1xuIiwgX19mdW5jX18pOworb3V0OgorCXNwaW5fdW5sb2NrKCZwcl9jdHh0LT5kbW1fbWFwX2xvY2spOworfQorCitzdGF0aWMgaW50IG1hdGNoX2NvbnRhaW5pbmdfbWFwX29iaihzdHJ1Y3QgZG1tX21hcF9vYmplY3QgKm1hcF9vYmosCisJCQkJCXUzMiBtcHVfYWRkciwgdTMyIHNpemUpCit7CisJdTMyIG1hcF9vYmpfZW5kID0gbWFwX29iai0+bXB1X2FkZHIgKyBtYXBfb2JqLT5zaXplOworCisJcmV0dXJuIG1wdV9hZGRyID49IG1hcF9vYmotPm1wdV9hZGRyICYmCisJCW1wdV9hZGRyICsgc2l6ZSA8PSBtYXBfb2JqX2VuZDsKK30KKworc3RhdGljIHN0cnVjdCBkbW1fbWFwX29iamVjdCAqZmluZF9jb250YWluaW5nX21hcHBpbmcoCisJCQkJc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCwKKwkJCQl1MzIgbXB1X2FkZHIsIHUzMiBzaXplKQoreworCXN0cnVjdCBkbW1fbWFwX29iamVjdCAqbWFwX29iajsKKwlwcl9kZWJ1ZygiJXM6IGxvb2tpbmcgZm9yIG1wdV9hZGRyIDB4JXggc2l6ZSAweCV4XG4iLCBfX2Z1bmNfXywKKwkJCQkJCW1wdV9hZGRyLCBzaXplKTsKKworCXNwaW5fbG9jaygmcHJfY3R4dC0+ZG1tX21hcF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hcF9vYmosICZwcl9jdHh0LT5kbW1fbWFwX2xpc3QsIGxpbmspIHsKKwkJcHJfZGVidWcoIiVzOiBjYW5kaWRhdGU6IG1wdV9hZGRyIDB4JXggdmlydCAweCV4IHNpemUgMHgleFxuIiwKKwkJCQkJCV9fZnVuY19fLAorCQkJCQkJbWFwX29iai0+bXB1X2FkZHIsCisJCQkJCQltYXBfb2JqLT5kc3BfYWRkciwKKwkJCQkJCW1hcF9vYmotPnNpemUpOworCQlpZiAobWF0Y2hfY29udGFpbmluZ19tYXBfb2JqKG1hcF9vYmosIG1wdV9hZGRyLCBzaXplKSkgeworCQkJcHJfZGVidWcoIiVzOiBtYXRjaCFcbiIsIF9fZnVuY19fKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcHJfZGVidWcoIiVzOiBubyBtYXRjaCFcbiIsIF9fZnVuY19fKTsKKwl9CisKKwltYXBfb2JqID0gTlVMTDsKK291dDoKKwlzcGluX3VubG9jaygmcHJfY3R4dC0+ZG1tX21hcF9sb2NrKTsKKwlyZXR1cm4gbWFwX29iajsKK30KKworc3RhdGljIGludCBmaW5kX2ZpcnN0X3BhZ2VfaW5fY2FjaGUoc3RydWN0IGRtbV9tYXBfb2JqZWN0ICptYXBfb2JqLAorCQkJCQl1bnNpZ25lZCBsb25nIG1wdV9hZGRyKQoreworCXUzMiBtYXBwZWRfYmFzZV9wYWdlID0gbWFwX29iai0+bXB1X2FkZHIgPj4gUEFHRV9TSElGVDsKKwl1MzIgcmVxdWVzdGVkX2Jhc2VfcGFnZSA9IG1wdV9hZGRyID4+IFBBR0VfU0hJRlQ7CisJaW50IHBnX2luZGV4ID0gcmVxdWVzdGVkX2Jhc2VfcGFnZSAtIG1hcHBlZF9iYXNlX3BhZ2U7CisKKwlpZiAocGdfaW5kZXggPCAwIHx8IHBnX2luZGV4ID49IG1hcF9vYmotPm51bV91c3JfcGdzKSB7CisJCXByX2VycigiJXM6IGZhaWxlZCAoZ290ICVkKVxuIiwgX19mdW5jX18sIHBnX2luZGV4KTsKKwkJcmV0dXJuIC0xOworCX0KKworCXByX2RlYnVnKCIlczogZmlyc3QgcGFnZSBpcyAlZFxuIiwgX19mdW5jX18sIHBnX2luZGV4KTsKKwlyZXR1cm4gcGdfaW5kZXg7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmdldF9tYXBwaW5nX3BhZ2Uoc3RydWN0IGRtbV9tYXBfb2JqZWN0ICptYXBfb2JqLAorCQkJCQkJCQlpbnQgcGdfaSkKK3sKKwlwcl9kZWJ1ZygiJXM6IGxvb2tpbmcgZm9yIHBnX2kgJWQsIG51bV91c3JfcGdzOiAlZFxuIiwgX19mdW5jX18sCisJCQkJCXBnX2ksIG1hcF9vYmotPm51bV91c3JfcGdzKTsKKworCWlmIChwZ19pIDwgMCB8fCBwZ19pID49IG1hcF9vYmotPm51bV91c3JfcGdzKSB7CisJCXByX2VycigiJXM6IHJlcXVlc3RlZCBwZ19pICVkIGlzIG91dCBvZiBtYXBwZWQgcmFuZ2VcbiIsCisJCQkJX19mdW5jX18sIHBnX2kpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gbWFwX29iai0+cGFnZXNbcGdfaV07Cit9CisKKy8qCisgKiAgPT09PT09PT0gcHJvY19hdHRhY2ggPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBQcmVwYXJlIGZvciBjb21tdW5pY2F0aW9uIHdpdGggYSBwYXJ0aWN1bGFyIERTUCBwcm9jZXNzb3IsIGFuZCByZXR1cm4KKyAqICAgICAgYSBoYW5kbGUgdG8gdGhlIHByb2Nlc3NvciBvYmplY3QuCisgKi8KK2ludAorcHJvY19hdHRhY2godTMyIHByb2Nlc3Nvcl9pZCwKKwkgICAgY29uc3Qgc3RydWN0IGRzcF9wcm9jZXNzb3JhdHRyaW4gKmF0dHJfaW4sCisJICAgIHZvaWQgKipwaF9wcm9jZXNzb3IsIHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqOworCXN0cnVjdCBwcm9jX29iamVjdCAqcF9wcm9jX29iamVjdCA9IE5VTEw7CisJc3RydWN0IG1ncl9vYmplY3QgKmhtZ3Jfb2JqID0gTlVMTDsKKwlzdHJ1Y3QgZHJ2X29iamVjdCAqaGRydl9vYmogPSBOVUxMOworCXU4IGRldl90eXBlOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKHBoX3Byb2Nlc3NvciAhPSBOVUxMKTsKKworCWlmIChwcl9jdHh0LT5ocHJvY2Vzc29yKSB7CisJCSpwaF9wcm9jZXNzb3IgPSBwcl9jdHh0LT5ocHJvY2Vzc29yOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCS8qIEdldCB0aGUgRHJpdmVyIGFuZCBNYW5hZ2VyIE9iamVjdCBIYW5kbGVzICovCisJc3RhdHVzID0gY2ZnX2dldF9vYmplY3QoKHUzMiAqKSAmaGRydl9vYmosIFJFR19EUlZfT0JKRUNUKTsKKwlpZiAoIXN0YXR1cykKKwkJc3RhdHVzID0gY2ZnX2dldF9vYmplY3QoKHUzMiAqKSAmaG1ncl9vYmosIFJFR19NR1JfT0JKRUNUKTsKKworCWlmICghc3RhdHVzKSB7CisJCS8qIEdldCB0aGUgRGV2aWNlIE9iamVjdCAqLworCQlzdGF0dXMgPSBkcnZfZ2V0X2Rldl9vYmplY3QocHJvY2Vzc29yX2lkLCBoZHJ2X29iaiwgJmhkZXZfb2JqKTsKKwl9CisJaWYgKCFzdGF0dXMpCisJCXN0YXR1cyA9IGRldl9nZXRfZGV2X3R5cGUoaGRldl9vYmosICZkZXZfdHlwZSk7CisKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJLyogSWYgd2UgbWFkZSBpdCB0aGlzIGZhciwgY3JlYXRlIHRoZSBQcm9jZWVzb3Igb2JqZWN0OiAqLworCXBfcHJvY19vYmplY3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvY19vYmplY3QpLCBHRlBfS0VSTkVMKTsKKwkvKiBGaWxsIG91dCB0aGUgUHJvY2Vzc29yIE9iamVjdDogKi8KKwlpZiAocF9wcm9jX29iamVjdCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCXBfcHJvY19vYmplY3QtPmhkZXZfb2JqID0gaGRldl9vYmo7CisJcF9wcm9jX29iamVjdC0+aG1ncl9vYmogPSBobWdyX29iajsKKwlwX3Byb2Nfb2JqZWN0LT5wcm9jZXNzb3JfaWQgPSBkZXZfdHlwZTsKKwkvKiBTdG9yZSBUR0lEIGluc3RlYWQgb2YgcHJvY2VzcyBoYW5kbGUgKi8KKwlwX3Byb2Nfb2JqZWN0LT5wcm9jZXNzID0gY3VycmVudC0+dGdpZDsKKworCUlOSVRfTElTVF9IRUFEKCZwX3Byb2Nfb2JqZWN0LT5wcm9jX2xpc3QpOworCisJaWYgKGF0dHJfaW4pCisJCXBfcHJvY19vYmplY3QtPnV0aW1lb3V0ID0gYXR0cl9pbi0+dXRpbWVvdXQ7CisJZWxzZQorCQlwX3Byb2Nfb2JqZWN0LT51dGltZW91dCA9IFBST0NfREZMVF9USU1FT1VUOworCisJc3RhdHVzID0gZGV2X2dldF9pbnRmX2Z4bnMoaGRldl9vYmosICZwX3Byb2Nfb2JqZWN0LT5pbnRmX2Z4bnMpOworCWlmICghc3RhdHVzKSB7CisJCXN0YXR1cyA9IGRldl9nZXRfYnJpZGdlX2NvbnRleHQoaGRldl9vYmosCisJCQkJCSAgICAgJnBfcHJvY19vYmplY3QtPmhicmlkZ2VfY29udGV4dCk7CisJCWlmIChzdGF0dXMpCisJCQlrZnJlZShwX3Byb2Nfb2JqZWN0KTsKKwl9IGVsc2UKKwkJa2ZyZWUocF9wcm9jX29iamVjdCk7CisKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJLyogQ3JlYXRlIHRoZSBOb3RpZmljYXRpb24gT2JqZWN0ICovCisJLyogVGhpcyBpcyBjcmVhdGVkIHdpdGggbm8gZXZlbnQgbWFzaywgbm8gbm90aWZ5IG1hc2sKKwkgKiBhbmQgbm8gdmFsaWQgaGFuZGxlIHRvIHRoZSBub3RpZmljYXRpb24uIFRoZXkgYWxsIGdldAorCSAqIGZpbGxlZCB1cCB3aGVuIHByb2NfcmVnaXN0ZXJfbm90aWZ5IGlzIGNhbGxlZCAqLworCXBfcHJvY19vYmplY3QtPm50Znlfb2JqID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG50Znlfb2JqZWN0KSwKKwkJCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAocF9wcm9jX29iamVjdC0+bnRmeV9vYmopCisJCW50ZnlfaW5pdChwX3Byb2Nfb2JqZWN0LT5udGZ5X29iaik7CisJZWxzZQorCQlzdGF0dXMgPSAtRU5PTUVNOworCisJaWYgKCFzdGF0dXMpIHsKKwkJLyogSW5zZXJ0IHRoZSBQcm9jZXNzb3IgT2JqZWN0IGludG8gdGhlIERFViBMaXN0LgorCQkgKiBSZXR1cm4gaGFuZGxlIHRvIHRoaXMgUHJvY2Vzc29yIE9iamVjdDoKKwkJICogRmluZCBvdXQgaWYgdGhlIERldmljZSBpcyBhbHJlYWR5IGF0dGFjaGVkIHRvIGEKKwkJICogUHJvY2Vzc29yLiBJZiBzbywgcmV0dXJuIEFscmVhZHlBdHRhY2hlZCBzdGF0dXMgKi8KKwkJbHN0X2luaXRfZWxlbSgmcF9wcm9jX29iamVjdC0+bGluayk7CisJCXN0YXR1cyA9IGRldl9pbnNlcnRfcHJvY19vYmplY3QocF9wcm9jX29iamVjdC0+aGRldl9vYmosCisJCQkJCQkodTMyKSBwX3Byb2Nfb2JqZWN0LAorCQkJCQkJJnBfcHJvY19vYmplY3QtPgorCQkJCQkJaXNfYWxyZWFkeV9hdHRhY2hlZCk7CisJCWlmICghc3RhdHVzKSB7CisJCQlpZiAocF9wcm9jX29iamVjdC0+aXNfYWxyZWFkeV9hdHRhY2hlZCkKKwkJCQlzdGF0dXMgPSAwOworCQl9IGVsc2UgeworCQkJaWYgKHBfcHJvY19vYmplY3QtPm50Znlfb2JqKSB7CisJCQkJbnRmeV9kZWxldGUocF9wcm9jX29iamVjdC0+bnRmeV9vYmopOworCQkJCWtmcmVlKHBfcHJvY19vYmplY3QtPm50Znlfb2JqKTsKKwkJCX0KKworCQkJa2ZyZWUocF9wcm9jX29iamVjdCk7CisJCX0KKwkJaWYgKCFzdGF0dXMpIHsKKwkJCSpwaF9wcm9jZXNzb3IgPSAodm9pZCAqKXBfcHJvY19vYmplY3Q7CisJCQlwcl9jdHh0LT5ocHJvY2Vzc29yID0gKnBoX3Byb2Nlc3NvcjsKKwkJCSh2b2lkKXByb2Nfbm90aWZ5X2NsaWVudHMocF9wcm9jX29iamVjdCwKKwkJCQkJCSAgRFNQX1BST0NFU1NPUkFUVEFDSCk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBEb24ndCBsZWFrIG1lbW9yeSBpZiBzdGF0dXMgaXMgZmFpbGVkICovCisJCWtmcmVlKHBfcHJvY19vYmplY3QpOworCX0KK2Z1bmNfZW5kOgorCURCQ19FTlNVUkUoKHN0YXR1cyA9PSAtRVBFUk0gJiYgKnBoX3Byb2Nlc3NvciA9PSBOVUxMKSB8fAorCQkgICAoIXN0YXR1cyAmJiBwX3Byb2Nfb2JqZWN0KSB8fAorCQkgICAoc3RhdHVzID09IDAgJiYgcF9wcm9jX29iamVjdCkpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBnZXRfZXhlY19maWxlKHN0cnVjdCBjZmdfZGV2bm9kZSAqZGV2X25vZGVfb2JqLAorCQkJCXN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCQl1MzIgc2l6ZSwgY2hhciAqZXhlY19maWxlKQoreworCXU4IGRldl90eXBlOworCXMzMiBsZW47CisKKwlkZXZfZ2V0X2Rldl90eXBlKGhkZXZfb2JqLCAodTggKikgJmRldl90eXBlKTsKKwlpZiAoZGV2X3R5cGUgPT0gRFNQX1VOSVQpIHsKKwkJcmV0dXJuIGNmZ19nZXRfZXhlY19maWxlKGRldl9ub2RlX29iaiwgc2l6ZSwgZXhlY19maWxlKTsKKwl9IGVsc2UgaWYgKGRldl90eXBlID09IElWQV9VTklUKSB7CisJCWlmIChpdmFfaW1nKSB7CisJCQlsZW4gPSBzdHJsZW4oaXZhX2ltZyk7CisJCQlzdHJuY3B5KGV4ZWNfZmlsZSwgaXZhX2ltZywgbGVuICsgMSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gLUVOT0VOVDsKK30KKworLyoKKyAqICA9PT09PT09PSBwcm9jX2F1dG9fc3RhcnQgPT09PT09PT0gPQorICogIFB1cnBvc2U6CisgKiAgICAgIEEgUGFydGljdWxhciBkZXZpY2UgZ2V0cyBsb2FkZWQgd2l0aCB0aGUgZGVmYXVsdCBpbWFnZQorICogICAgICBpZiB0aGUgQXV0b1N0YXJ0IGZsYWcgaXMgc2V0LgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhkZXZfb2JqOiAgICAgSGFuZGxlIHRvIHRoZSBEZXZpY2UKKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgIE9uIFN1Y2Nlc3NmdWwgTG9hZGluZworICogICAgICAtRVBFUk0gIEdlbmVyYWwgRmFpbHVyZQorICogIFJlcXVpcmVzOgorICogICAgICBoZGV2X29iaiAhPSBOVUxMCisgKiAgRW5zdXJlczoKKyAqLworaW50IHByb2NfYXV0b19zdGFydChzdHJ1Y3QgY2ZnX2Rldm5vZGUgKmRldl9ub2RlX29iaiwKKwkJCSAgIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaikKK3sKKwlpbnQgc3RhdHVzID0gLUVQRVJNOworCXN0cnVjdCBwcm9jX29iamVjdCAqcF9wcm9jX29iamVjdDsKKwljaGFyIHN6X2V4ZWNfZmlsZVtNQVhDTURMSU5FTEVOXTsKKwljaGFyICphcmd2WzJdOworCXN0cnVjdCBtZ3Jfb2JqZWN0ICpobWdyX29iaiA9IE5VTEw7CisJdTggZGV2X3R5cGU7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoZGV2X25vZGVfb2JqICE9IE5VTEwpOworCURCQ19SRVFVSVJFKGhkZXZfb2JqICE9IE5VTEwpOworCisJLyogQ3JlYXRlIGEgRHVtbXkgUFJPQyBPYmplY3QgKi8KKwlzdGF0dXMgPSBjZmdfZ2V0X29iamVjdCgodTMyICopICZobWdyX29iaiwgUkVHX01HUl9PQkpFQ1QpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisKKwlwX3Byb2Nfb2JqZWN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHByb2Nfb2JqZWN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBfcHJvY19vYmplY3QgPT0gTlVMTCkgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlwX3Byb2Nfb2JqZWN0LT5oZGV2X29iaiA9IGhkZXZfb2JqOworCXBfcHJvY19vYmplY3QtPmhtZ3Jfb2JqID0gaG1ncl9vYmo7CisJc3RhdHVzID0gZGV2X2dldF9pbnRmX2Z4bnMoaGRldl9vYmosICZwX3Byb2Nfb2JqZWN0LT5pbnRmX2Z4bnMpOworCWlmICghc3RhdHVzKQorCQlzdGF0dXMgPSBkZXZfZ2V0X2JyaWRnZV9jb250ZXh0KGhkZXZfb2JqLAorCQkJCQkgICAgICZwX3Byb2Nfb2JqZWN0LT5oYnJpZGdlX2NvbnRleHQpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19jb250OworCisJLyogU3RvcCB0aGUgRGV2aWNlLCBwdXQgaXQgaW50byBzdGFuZGJ5IG1vZGUgKi8KKwlzdGF0dXMgPSBwcm9jX3N0b3AocF9wcm9jX29iamVjdCk7CisKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfY29udDsKKworCS8qIEdldCB0aGUgZGVmYXVsdCBleGVjdXRhYmxlIGZvciB0aGlzIGJvYXJkLi4uICovCisJZGV2X2dldF9kZXZfdHlwZShoZGV2X29iaiwgKHU4ICopICZkZXZfdHlwZSk7CisJcF9wcm9jX29iamVjdC0+cHJvY2Vzc29yX2lkID0gZGV2X3R5cGU7CisJc3RhdHVzID0gZ2V0X2V4ZWNfZmlsZShkZXZfbm9kZV9vYmosIGhkZXZfb2JqLCBzaXplb2Yoc3pfZXhlY19maWxlKSwKKwkJCSAgICAgICBzel9leGVjX2ZpbGUpOworCWlmICghc3RhdHVzKSB7CisJCWFyZ3ZbMF0gPSBzel9leGVjX2ZpbGU7CisJCWFyZ3ZbMV0gPSBOVUxMOworCQkvKiAuLi5hbmQgdHJ5IHRvIGxvYWQgaXQ6ICovCisJCXN0YXR1cyA9IHByb2NfbG9hZChwX3Byb2Nfb2JqZWN0LCAxLCAoY29uc3QgY2hhciAqKilhcmd2LCBOVUxMKTsKKwkJaWYgKCFzdGF0dXMpCisJCQlzdGF0dXMgPSBwcm9jX3N0YXJ0KHBfcHJvY19vYmplY3QpOworCX0KKwlrZnJlZShwX3Byb2Nfb2JqZWN0LT5wc3pfbGFzdF9jb2ZmKTsKKwlwX3Byb2Nfb2JqZWN0LT5wc3pfbGFzdF9jb2ZmID0gTlVMTDsKK2Z1bmNfY29udDoKKwlrZnJlZShwX3Byb2Nfb2JqZWN0KTsKK2Z1bmNfZW5kOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gcHJvY19jdHJsID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUGFzcyBjb250cm9sIGluZm9ybWF0aW9uIHRvIHRoZSBHUFAgZGV2aWNlIGRyaXZlciBtYW5hZ2luZyB0aGUKKyAqICAgICAgRFNQIHByb2Nlc3Nvci4KKyAqCisgKiAgICAgIFRoaXMgd2lsbCBiZSBhbiBPRU0tb25seSBmdW5jdGlvbiwgYW5kIG5vdCBwYXJ0IG9mIHRoZSBEU1AvQklPUyBCcmlkZ2UKKyAqICAgICAgYXBwbGljYXRpb24gZGV2ZWxvcGVyJ3MgQVBJLgorICogICAgICBDYWxsIHRoZSBicmlkZ2VfZGV2X2N0cmwgZnhuIHdpdGggdGhlIEFyZ3VtZW50LiBUaGlzIGlzIGEgU3luY2hyb25vdXMKKyAqICAgICAgT3BlcmF0aW9uLiBhcmcgY2FuIGJlIG51bGwuCisgKi8KK2ludCBwcm9jX2N0cmwodm9pZCAqaHByb2Nlc3NvciwgdTMyIGR3X2NtZCwgc3RydWN0IGRzcF9jYmRhdGEgKiBhcmcpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IHByb2Nfb2JqZWN0ICpwX3Byb2Nfb2JqZWN0ID0gaHByb2Nlc3NvcjsKKwl1MzIgdGltZW91dCA9IDA7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlpZiAocF9wcm9jX29iamVjdCkgeworCQkvKiBpbnRlcmNlcHQgUFdSIGRlZXAgc2xlZXAgY29tbWFuZCAqLworCQlpZiAoZHdfY21kID09IEJSRElPQ1RMX0RFRVBTTEVFUCkgeworCQkJdGltZW91dCA9IGFyZy0+Y2JfZGF0YTsKKwkJCXN0YXR1cyA9IHB3cl9zbGVlcF9kc3AoUFdSX0RFRVBTTEVFUCwgdGltZW91dCk7CisJCX0KKwkJLyogaW50ZXJjZXB0IFBXUiBlbWVyZ2VuY3kgc2xlZXAgY29tbWFuZCAqLworCQllbHNlIGlmIChkd19jbWQgPT0gQlJESU9DVExfRU1FUkdFTkNZU0xFRVApIHsKKwkJCXRpbWVvdXQgPSBhcmctPmNiX2RhdGE7CisJCQlzdGF0dXMgPSBwd3Jfc2xlZXBfZHNwKFBXUl9FTUVSR0VOQ1lERUVQU0xFRVAsIHRpbWVvdXQpOworCQl9IGVsc2UgaWYgKGR3X2NtZCA9PSBQV1JfREVFUFNMRUVQKSB7CisJCQkvKiB0aW1lb3V0ID0gYXJnLT5jYl9kYXRhOyAqLworCQkJc3RhdHVzID0gcHdyX3NsZWVwX2RzcChQV1JfREVFUFNMRUVQLCB0aW1lb3V0KTsKKwkJfQorCQkvKiBpbnRlcmNlcHQgUFdSIHdha2UgY29tbWFuZHMgKi8KKwkJZWxzZSBpZiAoZHdfY21kID09IEJSRElPQ1RMX1dBS0VVUCkgeworCQkJdGltZW91dCA9IGFyZy0+Y2JfZGF0YTsKKwkJCXN0YXR1cyA9IHB3cl93YWtlX2RzcCh0aW1lb3V0KTsKKwkJfSBlbHNlIGlmIChkd19jbWQgPT0gUFdSX1dBS0VVUCkgeworCQkJLyogdGltZW91dCA9IGFyZy0+Y2JfZGF0YTsgKi8KKwkJCXN0YXR1cyA9IHB3cl93YWtlX2RzcCh0aW1lb3V0KTsKKwkJfSBlbHNlCisJCSAgICBpZiAoISgoKnBfcHJvY19vYmplY3QtPmludGZfZnhucy0+cGZuX2Rldl9jbnRybCkKKwkJCQkgICAgICAocF9wcm9jX29iamVjdC0+aGJyaWRnZV9jb250ZXh0LCBkd19jbWQsCisJCQkJICAgICAgIGFyZykpKSB7CisJCQlzdGF0dXMgPSAwOworCQl9IGVsc2UgeworCQkJc3RhdHVzID0gLUVQRVJNOworCQl9CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHByb2NfZGV0YWNoID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGVzdHJveXMgdGhlICBQcm9jZXNzb3IgT2JqZWN0LiBSZW1vdmVzIHRoZSBub3RpZmljYXRpb24gZnJvbSB0aGUgRGV2CisgKiAgICAgIExpc3QuCisgKi8KK2ludCBwcm9jX2RldGFjaChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0KQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBwcm9jX29iamVjdCAqcF9wcm9jX29iamVjdCA9IE5VTEw7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlwX3Byb2Nfb2JqZWN0ID0gKHN0cnVjdCBwcm9jX29iamVjdCAqKXByX2N0eHQtPmhwcm9jZXNzb3I7CisKKwlpZiAocF9wcm9jX29iamVjdCkgeworCQkvKiBOb3RpZnkgdGhlIENsaWVudCAqLworCQludGZ5X25vdGlmeShwX3Byb2Nfb2JqZWN0LT5udGZ5X29iaiwgRFNQX1BST0NFU1NPUkRFVEFDSCk7CisJCS8qIFJlbW92ZSB0aGUgbm90aWZpY2F0aW9uIG1lbW9yeSAqLworCQlpZiAocF9wcm9jX29iamVjdC0+bnRmeV9vYmopIHsKKwkJCW50ZnlfZGVsZXRlKHBfcHJvY19vYmplY3QtPm50Znlfb2JqKTsKKwkJCWtmcmVlKHBfcHJvY19vYmplY3QtPm50Znlfb2JqKTsKKwkJfQorCisJCWtmcmVlKHBfcHJvY19vYmplY3QtPnBzel9sYXN0X2NvZmYpOworCQlwX3Byb2Nfb2JqZWN0LT5wc3pfbGFzdF9jb2ZmID0gTlVMTDsKKwkJLyogUmVtb3ZlIHRoZSBQcm9jIGZyb20gdGhlIERFViBMaXN0ICovCisJCSh2b2lkKWRldl9yZW1vdmVfcHJvY19vYmplY3QocF9wcm9jX29iamVjdC0+aGRldl9vYmosCisJCQkJCSAgICAgKHUzMikgcF9wcm9jX29iamVjdCk7CisJCS8qIEZyZWUgdGhlIFByb2Nlc3NvciBPYmplY3QgKi8KKwkJa2ZyZWUocF9wcm9jX29iamVjdCk7CisJCXByX2N0eHQtPmhwcm9jZXNzb3IgPSBOVUxMOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBwcm9jX2VudW1fbm9kZXMgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBFbnVtZXJhdGUgYW5kIGdldCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFib3V0IG5vZGVzIGFsbG9jYXRlZAorICogICAgICBvbiBhIERTUCBwcm9jZXNzb3IuCisgKi8KK2ludCBwcm9jX2VudW1fbm9kZXModm9pZCAqaHByb2Nlc3Nvciwgdm9pZCAqKm5vZGVfdGFiLAorCQkJICAgdTMyIG5vZGVfdGFiX3NpemUsIHUzMiAqcHVfbnVtX25vZGVzLAorCQkJICAgdTMyICpwdV9hbGxvY2F0ZWQpCit7CisJaW50IHN0YXR1cyA9IC1FUEVSTTsKKwlzdHJ1Y3QgcHJvY19vYmplY3QgKnBfcHJvY19vYmplY3QgPSAoc3RydWN0IHByb2Nfb2JqZWN0ICopaHByb2Nlc3NvcjsKKwlzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21nciA9IE5VTEw7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUobm9kZV90YWIgIT0gTlVMTCB8fCBub2RlX3RhYl9zaXplID09IDApOworCURCQ19SRVFVSVJFKHB1X251bV9ub2RlcyAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShwdV9hbGxvY2F0ZWQgIT0gTlVMTCk7CisKKwlpZiAocF9wcm9jX29iamVjdCkgeworCQlpZiAoIShkZXZfZ2V0X25vZGVfbWFuYWdlcihwX3Byb2Nfb2JqZWN0LT5oZGV2X29iaiwKKwkJCQkJCSAgICAgICAmaG5vZGVfbWdyKSkpIHsKKwkJCWlmIChobm9kZV9tZ3IpIHsKKwkJCQlzdGF0dXMgPSBub2RlX2VudW1fbm9kZXMoaG5vZGVfbWdyLCBub2RlX3RhYiwKKwkJCQkJCQkgbm9kZV90YWJfc2l6ZSwKKwkJCQkJCQkgcHVfbnVtX25vZGVzLAorCQkJCQkJCSBwdV9hbGxvY2F0ZWQpOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBDYWNoZSBvcGVyYXRpb24gYWdhaW5zdCBrZXJuZWwgYWRkcmVzcyBpbnN0ZWFkIG9mIHVzZXJzICovCitzdGF0aWMgaW50IGJ1aWxkX2RtYV9zZyhzdHJ1Y3QgZG1tX21hcF9vYmplY3QgKm1hcF9vYmosIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJCQlzc2l6ZV90IGxlbiwgaW50IHBnX2kpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJc3NpemVfdCByZXN0OworCWludCByZXQgPSAwLCBpID0gMDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gbWFwX29iai0+ZG1hX2luZm8uc2c7CisKKwl3aGlsZSAobGVuKSB7CisJCXBhZ2UgPSBnZXRfbWFwcGluZ19wYWdlKG1hcF9vYmosIHBnX2kpOworCQlpZiAoIXBhZ2UpIHsKKwkJCXByX2VycigiJXM6IG5vIHBhZ2UgZm9yICUwOGx4XG4iLCBfX2Z1bmNfXywgc3RhcnQpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9IGVsc2UgaWYgKElTX0VSUihwYWdlKSkgeworCQkJcHJfZXJyKCIlczogZXJyIHBhZ2UgZm9yICUwOGx4KCVsdSlcbiIsIF9fZnVuY19fLCBzdGFydCwKKwkJCSAgICAgICBQVFJfRVJSKHBhZ2UpKTsKKwkJCXJldCA9IFBUUl9FUlIocGFnZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCW9mZnNldCA9IHN0YXJ0ICYgflBBR0VfTUFTSzsKKwkJcmVzdCA9IG1pbl90KHNzaXplX3QsIFBBR0VfU0laRSAtIG9mZnNldCwgbGVuKTsKKworCQlzZ19zZXRfcGFnZSgmc2dbaV0sIHBhZ2UsIHJlc3QsIG9mZnNldCk7CisKKwkJbGVuIC09IHJlc3Q7CisJCXN0YXJ0ICs9IHJlc3Q7CisJCXBnX2krKywgaSsrOworCX0KKworCWlmIChpICE9IG1hcF9vYmotPmRtYV9pbmZvLm51bV9wYWdlcykgeworCQlwcl9lcnIoIiVzOiBiYWQgbnVtYmVyIG9mIHNnIGl0ZXJhdGlvbnNcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtZW1vcnlfcmVnYWluX293bmVyc2hpcChzdHJ1Y3QgZG1tX21hcF9vYmplY3QgKm1hcF9vYmosCisJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHNzaXplX3QgbGVuLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBmaXJzdF9kYXRhX3BhZ2UgPSBzdGFydCA+PiBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgbGFzdF9kYXRhX3BhZ2UgPSAoKHUzMikoc3RhcnQgKyBsZW4gLSAxKSA+PiBQQUdFX1NISUZUKTsKKwkvKiBjYWxjdWxhdGluZyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHRoaXMgYXJlYSBzcGFucyAqLworCXVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzID0gbGFzdF9kYXRhX3BhZ2UgLSBmaXJzdF9kYXRhX3BhZ2UgKyAxOworCXN0cnVjdCBicmlkZ2VfZG1hX21hcF9pbmZvICpkbWFfaW5mbyA9ICZtYXBfb2JqLT5kbWFfaW5mbzsKKworCWlmICghZG1hX2luZm8tPnNnKQorCQlnb3RvIG91dDsKKworCWlmIChkbWFfaW5mby0+ZGlyICE9IGRpciB8fCBkbWFfaW5mby0+bnVtX3BhZ2VzICE9IG51bV9wYWdlcykgeworCQlwcl9lcnIoIiVzOiBkbWEgaW5mbyBkb2Vzbid0IG1hdGNoIGdpdmVuIHBhcmFtc1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkbWFfdW5tYXBfc2coYnJpZGdlLCBkbWFfaW5mby0+c2csIG51bV9wYWdlcywgZG1hX2luZm8tPmRpcik7CisKKwlwcl9kZWJ1ZygiJXM6IGRtYV9tYXBfc2cgdW5tYXBwZWRcbiIsIF9fZnVuY19fKTsKKworCWtmcmVlKGRtYV9pbmZvLT5zZyk7CisKKwltYXBfb2JqLT5kbWFfaW5mby5zZyA9IE5VTEw7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKiBDYWNoZSBvcGVyYXRpb24gYWdhaW5zdCBrZXJuZWwgYWRkcmVzcyBpbnN0ZWFkIG9mIHVzZXJzICovCitzdGF0aWMgaW50IG1lbW9yeV9naXZlX293bmVyc2hpcChzdHJ1Y3QgZG1tX21hcF9vYmplY3QgKm1hcF9vYmosCisJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHNzaXplX3QgbGVuLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJaW50IHBnX2ksIHJldCwgc2dfbnVtOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdW5zaWduZWQgbG9uZyBmaXJzdF9kYXRhX3BhZ2UgPSBzdGFydCA+PiBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgbGFzdF9kYXRhX3BhZ2UgPSAoKHUzMikoc3RhcnQgKyBsZW4gLSAxKSA+PiBQQUdFX1NISUZUKTsKKwkvKiBjYWxjdWxhdGluZyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHRoaXMgYXJlYSBzcGFucyAqLworCXVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzID0gbGFzdF9kYXRhX3BhZ2UgLSBmaXJzdF9kYXRhX3BhZ2UgKyAxOworCisJcGdfaSA9IGZpbmRfZmlyc3RfcGFnZV9pbl9jYWNoZShtYXBfb2JqLCBzdGFydCk7CisJaWYgKHBnX2kgPCAwKSB7CisJCXByX2VycigiJXM6IGZhaWxlZCB0byBmaW5kIGZpcnN0IHBhZ2UgaW4gY2FjaGVcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJc2cgPSBrY2FsbG9jKG51bV9wYWdlcywgc2l6ZW9mKCpzZyksIEdGUF9LRVJORUwpOworCWlmICghc2cpIHsKKwkJcHJfZXJyKCIlczoga2NhbGxvYyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJc2dfaW5pdF90YWJsZShzZywgbnVtX3BhZ2VzKTsKKworCS8qIGNsZWFudXAgYSBwcmV2aW91cyBzZyBhbGxvY2F0aW9uICovCisJLyogdGhpcyBtYXkgaGFwcGVuIGlmIGFwcGxpY2F0aW9uIGRvZXNuJ3Qgc2lnbmFsIGZvciBlL28gRE1BICovCisJa2ZyZWUobWFwX29iai0+ZG1hX2luZm8uc2cpOworCisJbWFwX29iai0+ZG1hX2luZm8uc2cgPSBzZzsKKwltYXBfb2JqLT5kbWFfaW5mby5kaXIgPSBkaXI7CisJbWFwX29iai0+ZG1hX2luZm8ubnVtX3BhZ2VzID0gbnVtX3BhZ2VzOworCisJcmV0ID0gYnVpbGRfZG1hX3NnKG1hcF9vYmosIHN0YXJ0LCBsZW4sIHBnX2kpOworCWlmIChyZXQpCisJCWdvdG8ga2ZyZWVfc2c7CisKKwlzZ19udW0gPSBkbWFfbWFwX3NnKGJyaWRnZSwgc2csIG51bV9wYWdlcywgZGlyKTsKKwlpZiAoc2dfbnVtIDwgMSkgeworCQlwcl9lcnIoIiVzOiBkbWFfbWFwX3NnIGZhaWxlZDogJWRcbiIsIF9fZnVuY19fLCBzZ19udW0pOworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGtmcmVlX3NnOworCX0KKworCXByX2RlYnVnKCIlczogZG1hX21hcF9zZyBtYXBwZWQgJWQgZWxlbWVudHNcbiIsIF9fZnVuY19fLCBzZ19udW0pOworCW1hcF9vYmotPmRtYV9pbmZvLnNnX251bSA9IHNnX251bTsKKworCXJldHVybiAwOworCitrZnJlZV9zZzoKKwlrZnJlZShzZyk7CisJbWFwX29iai0+ZG1hX2luZm8uc2cgPSBOVUxMOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK2ludCBwcm9jX2JlZ2luX2RtYSh2b2lkICpocHJvY2Vzc29yLCB2b2lkICpwbXB1X2FkZHIsIHUzMiB1bF9zaXplLAorCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwkvKiBLZWVwIFNUQVRVUyBoZXJlIGZvciBmdXR1cmUgYWRkaXRpb25zIHRvIHRoaXMgZnVuY3Rpb24gKi8KKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0ID0gKHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKikgaHByb2Nlc3NvcjsKKwlzdHJ1Y3QgZG1tX21hcF9vYmplY3QgKm1hcF9vYmo7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlpZiAoIXByX2N0eHQpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBlcnJfb3V0OworCX0KKworCXByX2RlYnVnKCIlczogYWRkciAweCV4LCBzaXplIDB4JXgsIHR5cGUgJWRcbiIsIF9fZnVuY19fLAorCQkJCQkJCSh1MzIpcG1wdV9hZGRyLAorCQkJCQkJCXVsX3NpemUsIGRpcik7CisKKwkvKiBmaW5kIHJlcXVlc3RlZCBtZW1vcnkgYXJlIGluIGNhY2hlZCBtYXBwaW5nIGluZm9ybWF0aW9uICovCisJbWFwX29iaiA9IGZpbmRfY29udGFpbmluZ19tYXBwaW5nKHByX2N0eHQsICh1MzIpIHBtcHVfYWRkciwgdWxfc2l6ZSk7CisJaWYgKCFtYXBfb2JqKSB7CisJCXByX2VycigiJXM6IGZpbmRfY29udGFpbmluZ19tYXBwaW5nIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJaWYgKG1lbW9yeV9naXZlX293bmVyc2hpcChtYXBfb2JqLCAodTMyKSBwbXB1X2FkZHIsIHVsX3NpemUsIGRpcikpIHsKKwkJcHJfZXJyKCIlczogSW5WYWxpZCBhZGRyZXNzIHBhcmFtZXRlcnMgJXAgJXhcbiIsCisJCQkgICAgICAgX19mdW5jX18sIHBtcHVfYWRkciwgdWxfc2l6ZSk7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCitlcnJfb3V0OgorCisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IHByb2NfZW5kX2RtYSh2b2lkICpocHJvY2Vzc29yLCB2b2lkICpwbXB1X2FkZHIsIHUzMiB1bF9zaXplLAorCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCS8qIEtlZXAgU1RBVFVTIGhlcmUgZm9yIGZ1dHVyZSBhZGRpdGlvbnMgdG8gdGhpcyBmdW5jdGlvbiAqLworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQgPSAoc3RydWN0IHByb2Nlc3NfY29udGV4dCAqKSBocHJvY2Vzc29yOworCXN0cnVjdCBkbW1fbWFwX29iamVjdCAqbWFwX29iajsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKworCWlmICghcHJfY3R4dCkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJcHJfZGVidWcoIiVzOiBhZGRyIDB4JXgsIHNpemUgMHgleCwgdHlwZSAlZFxuIiwgX19mdW5jX18sCisJCQkJCQkJKHUzMilwbXB1X2FkZHIsCisJCQkJCQkJdWxfc2l6ZSwgZGlyKTsKKworCS8qIGZpbmQgcmVxdWVzdGVkIG1lbW9yeSBhcmUgaW4gY2FjaGVkIG1hcHBpbmcgaW5mb3JtYXRpb24gKi8KKwltYXBfb2JqID0gZmluZF9jb250YWluaW5nX21hcHBpbmcocHJfY3R4dCwgKHUzMikgcG1wdV9hZGRyLCB1bF9zaXplKTsKKwlpZiAoIW1hcF9vYmopIHsKKwkJcHJfZXJyKCIlczogZmluZF9jb250YWluaW5nX21hcHBpbmcgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlpZiAobWVtb3J5X3JlZ2Fpbl9vd25lcnNoaXAobWFwX29iaiwgKHUzMikgcG1wdV9hZGRyLCB1bF9zaXplLCBkaXIpKSB7CisJCXByX2VycigiJXM6IEluVmFsaWQgYWRkcmVzcyBwYXJhbWV0ZXJzICVwICV4XG4iLAorCQkgICAgICAgX19mdW5jX18sIHBtcHVfYWRkciwgdWxfc2l6ZSk7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZXJyX291dDsKKwl9CisKK2Vycl9vdXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBwcm9jX2ZsdXNoX21lbW9yeSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgRmx1c2ggY2FjaGUKKyAqLworaW50IHByb2NfZmx1c2hfbWVtb3J5KHZvaWQgKmhwcm9jZXNzb3IsIHZvaWQgKnBtcHVfYWRkciwKKwkJCSAgICAgdTMyIHVsX3NpemUsIHUzMiB1bF9mbGFncykKK3sKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIgPSBETUFfQklESVJFQ1RJT05BTDsKKworCXJldHVybiBwcm9jX2JlZ2luX2RtYShocHJvY2Vzc29yLCBwbXB1X2FkZHIsIHVsX3NpemUsIGRpcik7Cit9CisKKy8qCisgKiAgPT09PT09PT0gcHJvY19pbnZhbGlkYXRlX21lbW9yeSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgSW52YWxpZGF0ZXMgdGhlIG1lbW9yeSBzcGVjaWZpZWQKKyAqLworaW50IHByb2NfaW52YWxpZGF0ZV9tZW1vcnkodm9pZCAqaHByb2Nlc3Nvciwgdm9pZCAqcG1wdV9hZGRyLCB1MzIgc2l6ZSkKK3sKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIgPSBETUFfRlJPTV9ERVZJQ0U7CisKKwlyZXR1cm4gcHJvY19iZWdpbl9kbWEoaHByb2Nlc3NvciwgcG1wdV9hZGRyLCBzaXplLCBkaXIpOworfQorCisvKgorICogID09PT09PT09IHByb2NfZ2V0X3Jlc291cmNlX2luZm8gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBFbnVtZXJhdGUgdGhlIHJlc291cmNlcyBjdXJyZW50bHkgYXZhaWxhYmxlIG9uIGEgcHJvY2Vzc29yLgorICovCitpbnQgcHJvY19nZXRfcmVzb3VyY2VfaW5mbyh2b2lkICpocHJvY2Vzc29yLCB1MzIgcmVzb3VyY2VfdHlwZSwKKwkJCQkgIHN0cnVjdCBkc3BfcmVzb3VyY2VpbmZvICpyZXNvdXJjZV9pbmZvLAorCQkJCSAgdTMyIHJlc291cmNlX2luZm9fc2l6ZSkKK3sKKwlpbnQgc3RhdHVzID0gLUVQRVJNOworCXN0cnVjdCBwcm9jX29iamVjdCAqcF9wcm9jX29iamVjdCA9IChzdHJ1Y3QgcHJvY19vYmplY3QgKilocHJvY2Vzc29yOworCXN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyID0gTlVMTDsKKwlzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqID0gTlVMTDsKKwlzdHJ1Y3Qgcm1tX3RhcmdldF9vYmogKnJtbSA9IE5VTEw7CisJc3RydWN0IGlvX21nciAqaGlvX21nciA9IE5VTEw7CS8qIElPIG1hbmFnZXIgaGFuZGxlICovCisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUocmVzb3VyY2VfaW5mbyAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShyZXNvdXJjZV9pbmZvX3NpemUgPj0gc2l6ZW9mKHN0cnVjdCBkc3BfcmVzb3VyY2VpbmZvKSk7CisKKwlpZiAoIXBfcHJvY19vYmplY3QpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJc3dpdGNoIChyZXNvdXJjZV90eXBlKSB7CisJY2FzZSBEU1BfUkVTT1VSQ0VfRFlOREFSQU06CisJY2FzZSBEU1BfUkVTT1VSQ0VfRFlOU0FSQU06CisJY2FzZSBEU1BfUkVTT1VSQ0VfRFlORVhURVJOQUw6CisJY2FzZSBEU1BfUkVTT1VSQ0VfRFlOU1JBTToKKwkJc3RhdHVzID0gZGV2X2dldF9ub2RlX21hbmFnZXIocF9wcm9jX29iamVjdC0+aGRldl9vYmosCisJCQkJCSAgICAgICZobm9kZV9tZ3IpOworCQlpZiAoIWhub2RlX21ncikgeworCQkJc3RhdHVzID0gLUVGQVVMVDsKKwkJCWdvdG8gZnVuY19lbmQ7CisJCX0KKworCQlzdGF0dXMgPSBub2RlX2dldF9ubGRyX29iaihobm9kZV9tZ3IsICZubGRyX29iaik7CisJCWlmICghc3RhdHVzKSB7CisJCQlzdGF0dXMgPSBubGRyX2dldF9ybW1fbWFuYWdlcihubGRyX29iaiwgJnJtbSk7CisJCQlpZiAocm1tKSB7CisJCQkJaWYgKCFybW1fc3RhdChybW0sCisJCQkJCSAgICAgIChlbnVtIGRzcF9tZW10eXBlKXJlc291cmNlX3R5cGUsCisJCQkJCSAgICAgIChzdHJ1Y3QgZHNwX21lbXN0YXQgKikKKwkJCQkJICAgICAgJihyZXNvdXJjZV9pbmZvLT5yZXN1bHQuCisJCQkJCQltZW1fc3RhdCkpKQorCQkJCQlzdGF0dXMgPSAtRUlOVkFMOworCQkJfSBlbHNlIHsKKwkJCQlzdGF0dXMgPSAtRUZBVUxUOworCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgRFNQX1JFU09VUkNFX1BST0NMT0FEOgorCQlzdGF0dXMgPSBkZXZfZ2V0X2lvX21ncihwX3Byb2Nfb2JqZWN0LT5oZGV2X29iaiwgJmhpb19tZ3IpOworCQlpZiAoaGlvX21ncikKKwkJCXN0YXR1cyA9CisJCQkgICAgcF9wcm9jX29iamVjdC0+aW50Zl9meG5zLT4KKwkJCSAgICBwZm5faW9fZ2V0X3Byb2NfbG9hZChoaW9fbWdyLAorCQkJCQkJIChzdHJ1Y3QgZHNwX3Byb2Nsb2Fkc3RhdCAqKQorCQkJCQkJICYocmVzb3VyY2VfaW5mby0+cmVzdWx0LgorCQkJCQkJICAgcHJvY19sb2FkX3N0YXQpKTsKKwkJZWxzZQorCQkJc3RhdHVzID0gLUVGQVVMVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3RhdHVzID0gLUVQRVJNOworCQlicmVhazsKKwl9CitmdW5jX2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHByb2NfZXhpdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERlY3JlbWVudCByZWZlcmVuY2UgY291bnQsIGFuZCBmcmVlIHJlc291cmNlcyB3aGVuIHJlZmVyZW5jZSBjb3VudCBpcworICogICAgICAwLgorICovCit2b2lkIHByb2NfZXhpdCh2b2lkKQoreworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKworCXJlZnMtLTsKKworCURCQ19FTlNVUkUocmVmcyA+PSAwKTsKK30KKworLyoKKyAqICA9PT09PT09PSBwcm9jX2dldF9kZXZfb2JqZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0dXJuIHRoZSBEZXYgT2JqZWN0IGhhbmRsZSBmb3IgYSBnaXZlbiBQcm9jZXNzb3IuCisgKgorICovCitpbnQgcHJvY19nZXRfZGV2X29iamVjdCh2b2lkICpocHJvY2Vzc29yLAorCQkJICAgICAgIHN0cnVjdCBkZXZfb2JqZWN0ICoqZGV2aWNlX29iaikKK3sKKwlpbnQgc3RhdHVzID0gLUVQRVJNOworCXN0cnVjdCBwcm9jX29iamVjdCAqcF9wcm9jX29iamVjdCA9IChzdHJ1Y3QgcHJvY19vYmplY3QgKilocHJvY2Vzc29yOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGRldmljZV9vYmogIT0gTlVMTCk7CisKKwlpZiAocF9wcm9jX29iamVjdCkgeworCQkqZGV2aWNlX29iaiA9IHBfcHJvY19vYmplY3QtPmhkZXZfb2JqOworCQlzdGF0dXMgPSAwOworCX0gZWxzZSB7CisJCSpkZXZpY2Vfb2JqID0gTlVMTDsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisKKwlEQkNfRU5TVVJFKCghc3RhdHVzICYmICpkZXZpY2Vfb2JqICE9IE5VTEwpIHx8CisJCSAgIChzdGF0dXMgJiYgKmRldmljZV9vYmogPT0gTlVMTCkpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBwcm9jX2dldF9zdGF0ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlcG9ydCB0aGUgc3RhdGUgb2YgdGhlIHNwZWNpZmllZCBEU1AgcHJvY2Vzc29yLgorICovCitpbnQgcHJvY19nZXRfc3RhdGUodm9pZCAqaHByb2Nlc3NvciwKKwkJCSAgc3RydWN0IGRzcF9wcm9jZXNzb3JzdGF0ZSAqcHJvY19zdGF0ZV9vYmosCisJCQkgIHUzMiBzdGF0ZV9pbmZvX3NpemUpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IHByb2Nfb2JqZWN0ICpwX3Byb2Nfb2JqZWN0ID0gKHN0cnVjdCBwcm9jX29iamVjdCAqKWhwcm9jZXNzb3I7CisJaW50IGJyZF9zdGF0dXM7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUocHJvY19zdGF0ZV9vYmogIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoc3RhdGVfaW5mb19zaXplID49IHNpemVvZihzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0YXRlKSk7CisKKwlpZiAocF9wcm9jX29iamVjdCkgeworCQkvKiBGaXJzdCwgcmV0cmlldmUgQlJEIHN0YXRlIGluZm9ybWF0aW9uICovCisJCXN0YXR1cyA9ICgqcF9wcm9jX29iamVjdC0+aW50Zl9meG5zLT5wZm5fYnJkX3N0YXR1cykKKwkJICAgIChwX3Byb2Nfb2JqZWN0LT5oYnJpZGdlX2NvbnRleHQsICZicmRfc3RhdHVzKTsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCXN3aXRjaCAoYnJkX3N0YXR1cykgeworCQkJY2FzZSBCUkRfU1RPUFBFRDoKKwkJCQlwcm9jX3N0YXRlX29iai0+cHJvY19zdGF0ZSA9IFBST0NfU1RPUFBFRDsKKwkJCQlicmVhazsKKwkJCWNhc2UgQlJEX1NMRUVQX1RSQU5TSVRJT046CisJCQljYXNlIEJSRF9EU1BfSElCRVJOQVRJT046CisJCQkJLyogRmFsbCB0aHJvdWdoICovCisJCQljYXNlIEJSRF9SVU5OSU5HOgorCQkJCXByb2Nfc3RhdGVfb2JqLT5wcm9jX3N0YXRlID0gUFJPQ19SVU5OSU5HOworCQkJCWJyZWFrOworCQkJY2FzZSBCUkRfTE9BREVEOgorCQkJCXByb2Nfc3RhdGVfb2JqLT5wcm9jX3N0YXRlID0gUFJPQ19MT0FERUQ7CisJCQkJYnJlYWs7CisJCQljYXNlIEJSRF9FUlJPUjoKKwkJCQlwcm9jX3N0YXRlX29iai0+cHJvY19zdGF0ZSA9IFBST0NfRVJST1I7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXByb2Nfc3RhdGVfb2JqLT5wcm9jX3N0YXRlID0gMHhGRjsKKwkJCQlzdGF0dXMgPSAtRVBFUk07CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCX0KKwlkZXZfZGJnKGJyaWRnZSwgIiVzLCByZXN1bHRzOiBzdGF0dXM6IDB4JXggcHJvY19zdGF0ZV9vYmo6IDB4JXhcbiIsCisJCV9fZnVuY19fLCBzdGF0dXMsIHByb2Nfc3RhdGVfb2JqLT5wcm9jX3N0YXRlKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHByb2NfZ2V0X3RyYWNlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIHRyYWNlIGJ1ZmZlciwgbG9jYXRlZCBvbiB0aGUKKyAqICAgICAgUHJvY2Vzc29yLiAgUHJlZGVmaW5lZCBzeW1ib2xzIGZvciB0aGUgdHJhY2UgYnVmZmVyIG11c3QgaGF2ZSBiZWVuCisgKiAgICAgIGNvbmZpZ3VyZWQgaW50byB0aGUgRFNQIGV4ZWN1dGFibGUuCisgKiAgRGV0YWlsczoKKyAqICAgICAgV2Ugc3VwcG9ydCB1c2luZyB0aGUgc3ltYm9scyBTWVNfUFVUQ0JFRyBhbmQgU1lTX1BVVENFTkQgdG8gZGVmaW5lIGEKKyAqICAgICAgdHJhY2UgYnVmZmVyLCBvbmx5LiAgVHJlYXQgaXQgYXMgYW4gdW5kb2N1bWVudGVkIGZlYXR1cmUuCisgKiAgICAgIFRoaXMgY2FsbCBpcyBkZXN0cnVjdGl2ZSwgbWVhbmluZyB0aGUgcHJvY2Vzc29yIGlzIHBsYWNlZCBpbiB0aGUgbW9uaXRvcgorICogICAgICBzdGF0ZSBhcyBhIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uLgorICovCitpbnQgcHJvY19nZXRfdHJhY2Uodm9pZCAqaHByb2Nlc3NvciwgdTggKiBwYnVmLCB1MzIgbWF4X3NpemUpCit7CisJaW50IHN0YXR1czsKKwlzdGF0dXMgPSAtRU5PU1lTOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gcHJvY19pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZSBQUk9DJ3MgcHJpdmF0ZSBzdGF0ZSwga2VlcGluZyBhIHJlZmVyZW5jZSBjb3VudCBvbiBlYWNoIGNhbGwKKyAqLworYm9vbCBwcm9jX2luaXQodm9pZCkKK3sKKwlib29sIHJldCA9IHRydWU7CisKKwlEQkNfUkVRVUlSRShyZWZzID49IDApOworCisJaWYgKHJldCkKKwkJcmVmcysrOworCisJREJDX0VOU1VSRSgocmV0ICYmIChyZWZzID4gMCkpIHx8ICghcmV0ICYmIChyZWZzID49IDApKSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogID09PT09PT09IHByb2NfbG9hZCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlc2V0IGEgcHJvY2Vzc29yIGFuZCBsb2FkIGEgbmV3IGJhc2UgcHJvZ3JhbSBpbWFnZS4KKyAqICAgICAgVGhpcyB3aWxsIGJlIGFuIE9FTS1vbmx5IGZ1bmN0aW9uLCBhbmQgbm90IHBhcnQgb2YgdGhlIERTUC9CSU9TIEJyaWRnZQorICogICAgICBhcHBsaWNhdGlvbiBkZXZlbG9wZXIncyBBUEkuCisgKi8KK2ludCBwcm9jX2xvYWQodm9pZCAqaHByb2Nlc3NvciwgY29uc3QgczMyIGFyZ2NfaW5kZXgsCisJCSAgICAgY29uc3QgY2hhciAqKnVzZXJfYXJncywgY29uc3QgY2hhciAqKnVzZXJfZW52cCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgcHJvY19vYmplY3QgKnBfcHJvY19vYmplY3QgPSAoc3RydWN0IHByb2Nfb2JqZWN0ICopaHByb2Nlc3NvcjsKKwlzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyOwkvKiBJTyBtYW5hZ2VyIGhhbmRsZSAqLworCXN0cnVjdCBtc2dfbWdyICpobXNnX21ncjsKKwlzdHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tZ3I7CS8qIENvZGUgbWFuYWdlciBoYW5kbGUgKi8KKwljaGFyICpwYXJndjA7CQkvKiB0ZW1wIGFyZ3ZbMF0gcHRyICovCisJY2hhciAqKm5ld19lbnZwOwkvKiBVcGRhdGVkIGVudnBbXSBhcnJheS4gKi8KKwljaGFyIHN6X3Byb2NfaWRbTUFYUFJPQ0lETEVOXTsJLyogU2l6ZSBvZiAiUFJPQ19JRD08bj4iICovCisJczMyIGVudnBfZWxlbXM7CQkvKiBOdW0gZWxlbWVudHMgaW4gZW52cFtdLiAqLworCXMzMiBjbmV3X2VudnA7CQkvKiAiICAiIGluIG5ld19lbnZwW10gKi8KKwlzMzIgbnByb2NfaWQgPSAwOwkvKiBBbnRpY2lwYXRlIE1QIHZlcnNpb24uICovCisJc3RydWN0IGRjZF9tYW5hZ2VyICpoZGNkX2hhbmRsZTsKKwlzdHJ1Y3QgZG1tX29iamVjdCAqZG1tX21ncjsKKwl1MzIgZHdfZXh0X2VuZDsKKwl1MzIgcHJvY19pZDsKKwlpbnQgYnJkX3N0YXRlOworCXN0cnVjdCBkcnZfZGF0YSAqZHJ2X2RhdGFwID0gZGV2X2dldF9kcnZkYXRhKGJyaWRnZSk7CisKKyNpZmRlZiBPUFRfTE9BRF9USU1FX0lOU1RSVU1FTlRBVElPTgorCXN0cnVjdCB0aW1ldmFsIHR2MTsKKwlzdHJ1Y3QgdGltZXZhbCB0djI7CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1RJRFNQQlJJREdFX0RWRlMpICYmICFkZWZpbmVkKENPTkZJR19DUFVfRlJFUSkKKwlzdHJ1Y3QgZHNwYnJpZGdlX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0KKwkgICAgb21hcF9kc3BicmlkZ2VfZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKyNlbmRpZgorCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGFyZ2NfaW5kZXggPiAwKTsKKwlEQkNfUkVRVUlSRSh1c2VyX2FyZ3MgIT0gTlVMTCk7CisKKyNpZmRlZiBPUFRfTE9BRF9USU1FX0lOU1RSVU1FTlRBVElPTgorCWRvX2dldHRpbWVvZmRheSgmdHYxKTsKKyNlbmRpZgorCWlmICghcF9wcm9jX29iamVjdCkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlkZXZfZ2V0X2NvZF9tZ3IocF9wcm9jX29iamVjdC0+aGRldl9vYmosICZjb2RfbWdyKTsKKwlpZiAoIWNvZF9tZ3IpIHsKKwkJc3RhdHVzID0gLUVQRVJNOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlzdGF0dXMgPSBwcm9jX3N0b3AoaHByb2Nlc3Nvcik7CisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2VuZDsKKworCS8qIFBsYWNlIHRoZSBib2FyZCBpbiB0aGUgbW9uaXRvciBzdGF0ZS4gKi8KKwlzdGF0dXMgPSBwcm9jX21vbml0b3IoaHByb2Nlc3Nvcik7CisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2VuZDsKKworCS8qIFNhdmUgcHRyIHRvICBvcmlnaW5hbCBhcmd2WzBdLiAqLworCXBhcmd2MCA9IChjaGFyICopdXNlcl9hcmdzWzBdOworCS8qUHJlcGVuZCAiUFJPQ19JRD08bnByb2NfaWQ+InRvIGVudnAgYXJyYXkgZm9yIHRhcmdldC4gKi8KKwllbnZwX2VsZW1zID0gZ2V0X2VudnBfY291bnQoKGNoYXIgKiopdXNlcl9lbnZwKTsKKwljbmV3X2VudnAgPSAoZW52cF9lbGVtcyA/IChlbnZwX2VsZW1zICsgMSkgOiAoZW52cF9lbGVtcyArIDIpKTsKKwluZXdfZW52cCA9IGt6YWxsb2MoY25ld19lbnZwICogc2l6ZW9mKGNoYXIgKiopLCBHRlBfS0VSTkVMKTsKKwlpZiAobmV3X2VudnApIHsKKwkJc3RhdHVzID0gc25wcmludGYoc3pfcHJvY19pZCwgTUFYUFJPQ0lETEVOLCBQUk9DX0VOVlBST0NJRCwKKwkJCQkgIG5wcm9jX2lkKTsKKwkJaWYgKHN0YXR1cyA9PSAtMSkgeworCQkJZGV2X2RiZyhicmlkZ2UsICIlczogUHJvYyBJRCBzdHJpbmcgb3ZlcmZsb3dcbiIsCisJCQkJX19mdW5jX18pOworCQkJc3RhdHVzID0gLUVQRVJNOworCQl9IGVsc2UgeworCQkJbmV3X2VudnAgPQorCQkJICAgIHByZXBlbmRfZW52cChuZXdfZW52cCwgKGNoYXIgKiopdXNlcl9lbnZwLAorCQkJCQkgZW52cF9lbGVtcywgY25ld19lbnZwLCBzel9wcm9jX2lkKTsKKwkJCS8qIEdldCB0aGUgRENEIEhhbmRsZSAqLworCQkJc3RhdHVzID0gbWdyX2dldF9kY2RfaGFuZGxlKHBfcHJvY19vYmplY3QtPmhtZ3Jfb2JqLAorCQkJCQkJICAgICh1MzIgKikgJmhkY2RfaGFuZGxlKTsKKwkJCWlmICghc3RhdHVzKSB7CisJCQkJLyogIEJlZm9yZSBwcm9jZWVkaW5nIHdpdGggbmV3IGxvYWQsCisJCQkJICogIGNoZWNrIGlmIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIENPRkYKKwkJCQkgKiAgZXhpc3RzLgorCQkJCSAqICBJZiB5ZXMsIHVucmVnaXN0ZXIgbm9kZXMgaW4gcHJldmlvdXNseQorCQkJCSAqICByZWdpc3RlcmVkIENPRkYuICBJZiBhbnkgZXJyb3Igb2NjdXJyZWQsCisJCQkJICogIHNldCBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgQ09GRiB0byBOVUxMLiAqLworCQkJCWlmIChwX3Byb2Nfb2JqZWN0LT5wc3pfbGFzdF9jb2ZmICE9IE5VTEwpIHsKKwkJCQkJc3RhdHVzID0KKwkJCQkJICAgIGRjZF9hdXRvX3VucmVnaXN0ZXIoaGRjZF9oYW5kbGUsCisJCQkJCQkJCXBfcHJvY19vYmplY3QtPgorCQkJCQkJCQlwc3pfbGFzdF9jb2ZmKTsKKwkJCQkJLyogUmVnYXJkbGVzcyBvZiBhdXRvIHVucmVnaXN0ZXIgc3RhdHVzLAorCQkJCQkgKiAgZnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZAorCQkJCQkgKiAgbWVtb3J5LiAqLworCQkJCQlrZnJlZShwX3Byb2Nfb2JqZWN0LT5wc3pfbGFzdF9jb2ZmKTsKKwkJCQkJcF9wcm9jX29iamVjdC0+cHN6X2xhc3RfY29mZiA9IE5VTEw7CisJCQkJfQorCQkJfQorCQkJLyogT24gc3VjY2VzcywgZG8gY29kX29wZW5fYmFzZSgpICovCisJCQlzdGF0dXMgPSBjb2Rfb3Blbl9iYXNlKGNvZF9tZ3IsIChjaGFyICopdXNlcl9hcmdzWzBdLAorCQkJCQkgICAgICAgQ09EX1NZTUIpOworCQl9CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJLyogQXV0by1yZWdpc3RlciBkYXRhIGJhc2UgKi8KKwkJLyogR2V0IHRoZSBEQ0QgSGFuZGxlICovCisJCXN0YXR1cyA9IG1ncl9nZXRfZGNkX2hhbmRsZShwX3Byb2Nfb2JqZWN0LT5obWdyX29iaiwKKwkJCQkJICAgICh1MzIgKikgJmhkY2RfaGFuZGxlKTsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCS8qICBBdXRvIHJlZ2lzdGVyIG5vZGVzIGluIHNwZWNpZmllZCBDT0ZGCisJCQkgKiAgZmlsZS4gIElmIHJlZ2lzdHJhdGlvbiBkaWQgbm90IGZhaWwsCisJCQkgKiAgKHN0YXR1cyA9IDAgb3IgLUVBQ0NFUykKKwkJCSAqICBzYXZlIHRoZSBuYW1lIG9mIHRoZSBDT0ZGIGZpbGUgZm9yCisJCQkgKiAgZGUtcmVnaXN0cmF0aW9uIGluIHRoZSBmdXR1cmUuICovCisJCQlzdGF0dXMgPQorCQkJICAgIGRjZF9hdXRvX3JlZ2lzdGVyKGhkY2RfaGFuZGxlLAorCQkJCQkgICAgICAoY2hhciAqKXVzZXJfYXJnc1swXSk7CisJCQlpZiAoc3RhdHVzID09IC1FQUNDRVMpCisJCQkJc3RhdHVzID0gMDsKKworCQkJaWYgKHN0YXR1cykgeworCQkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCX0gZWxzZSB7CisJCQkJREJDX0FTU0VSVChwX3Byb2Nfb2JqZWN0LT5wc3pfbGFzdF9jb2ZmID09CisJCQkJCSAgIE5VTEwpOworCQkJCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgcHN6TGFzdENvZmYgKi8KKwkJCQlwX3Byb2Nfb2JqZWN0LT5wc3pfbGFzdF9jb2ZmID0KKwkJCQkJCWt6YWxsb2MoKHN0cmxlbih1c2VyX2FyZ3NbMF0pICsKKwkJCQkJCTEpLCBHRlBfS0VSTkVMKTsKKwkJCQkvKiBJZiBtZW1vcnkgYWxsb2NhdGVkLCBzYXZlIENPRkYgZmlsZSBuYW1lICovCisJCQkJaWYgKHBfcHJvY19vYmplY3QtPnBzel9sYXN0X2NvZmYpIHsKKwkJCQkJc3RybmNweShwX3Byb2Nfb2JqZWN0LT5wc3pfbGFzdF9jb2ZmLAorCQkJCQkJKGNoYXIgKil1c2VyX2FyZ3NbMF0sCisJCQkJCQkoc3RybGVuKChjaGFyICopdXNlcl9hcmdzWzBdKSArCisJCQkJCQkgMSkpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkvKiBVcGRhdGUgc2hhcmVkIG1lbW9yeSBhZGRyZXNzIGFuZCBzaXplICovCisJaWYgKCFzdGF0dXMpIHsKKwkJLyogIENyZWF0ZSB0aGUgbWVzc2FnZSBtYW5hZ2VyLiBUaGlzIG11c3QgYmUgZG9uZQorCQkgKiAgYmVmb3JlIGNhbGxpbmcgdGhlIElPT25Mb2FkZWQgZnVuY3Rpb24uICovCisJCWRldl9nZXRfbXNnX21ncihwX3Byb2Nfb2JqZWN0LT5oZGV2X29iaiwgJmhtc2dfbWdyKTsKKwkJaWYgKCFobXNnX21ncikgeworCQkJc3RhdHVzID0gbXNnX2NyZWF0ZSgmaG1zZ19tZ3IsIHBfcHJvY19vYmplY3QtPmhkZXZfb2JqLAorCQkJCQkgICAgKG1zZ19vbmV4aXQpIG5vZGVfb25fZXhpdCk7CisJCQlEQkNfQVNTRVJUKCFzdGF0dXMpOworCQkJZGV2X3NldF9tc2dfbWdyKHBfcHJvY19vYmplY3QtPmhkZXZfb2JqLCBobXNnX21ncik7CisJCX0KKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJLyogU2V0IHRoZSBEZXZpY2Ugb2JqZWN0J3MgbWVzc2FnZSBtYW5hZ2VyICovCisJCXN0YXR1cyA9IGRldl9nZXRfaW9fbWdyKHBfcHJvY19vYmplY3QtPmhkZXZfb2JqLCAmaGlvX21ncik7CisJCWlmIChoaW9fbWdyKQorCQkJc3RhdHVzID0gKCpwX3Byb2Nfb2JqZWN0LT5pbnRmX2Z4bnMtPnBmbl9pb19vbl9sb2FkZWQpCisJCQkJCQkJCShoaW9fbWdyKTsKKwkJZWxzZQorCQkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJLyogTm93LCBhdHRlbXB0IHRvIGxvYWQgYW4gZXhlYzogKi8KKworCQkvKiBCb29zdCB0aGUgT1BQIGxldmVsIHRvIE1heGltdW0gbGV2ZWwgc3VwcG9ydGVkIGJ5IGJhc2Vwb3J0ICovCisjaWYgZGVmaW5lZChDT05GSUdfVElEU1BCUklER0VfRFZGUykgJiYgIWRlZmluZWQoQ09ORklHX0NQVV9GUkVRKQorCQlpZiAocGRhdGEtPmNwdV9zZXRfZnJlcSkKKwkJCSgqcGRhdGEtPmNwdV9zZXRfZnJlcSkgKHBkYXRhLT5tcHVfc3BlZWRbVkREMV9PUFA1XSk7CisjZW5kaWYKKwkJc3RhdHVzID0gY29kX2xvYWRfYmFzZShjb2RfbWdyLCBhcmdjX2luZGV4LCAoY2hhciAqKil1c2VyX2FyZ3MsCisJCQkJICAgICAgIGRldl9icmRfd3JpdGVfZnhuLAorCQkJCSAgICAgICBwX3Byb2Nfb2JqZWN0LT5oZGV2X29iaiwgTlVMTCk7CisJCWlmIChzdGF0dXMpIHsKKwkJCWlmIChzdGF0dXMgPT0gLUVCQURGKSB7CisJCQkJZGV2X2RiZyhicmlkZ2UsICIlczogRmFpbHVyZSB0byBMb2FkIHRoZSBFWEVcbiIsCisJCQkJCV9fZnVuY19fKTsKKwkJCX0KKwkJCWlmIChzdGF0dXMgPT0gLUVTUElQRSkgeworCQkJCXByX2VycigiJXM6IENvdWxkbid0IHBhcnNlIHRoZSBmaWxlXG4iLAorCQkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQl9CisJCX0KKwkJLyogUmVxdWVzdGluZyB0aGUgbG93ZXN0IG9wcCBzdXBwb3J0ZWQgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19USURTUEJSSURHRV9EVkZTKSAmJiAhZGVmaW5lZChDT05GSUdfQ1BVX0ZSRVEpCisJCWlmIChwZGF0YS0+Y3B1X3NldF9mcmVxKQorCQkJKCpwZGF0YS0+Y3B1X3NldF9mcmVxKSAocGRhdGEtPm1wdV9zcGVlZFtWREQxX09QUDFdKTsKKyNlbmRpZgorCisJfQorCWlmICghc3RhdHVzKSB7CisJCS8qIFVwZGF0ZSB0aGUgUHJvY2Vzc29yIHN0YXR1cyB0byBsb2FkZWQgKi8KKwkJc3RhdHVzID0gKCpwX3Byb2Nfb2JqZWN0LT5pbnRmX2Z4bnMtPnBmbl9icmRfc2V0X3N0YXRlKQorCQkgICAgKHBfcHJvY19vYmplY3QtPmhicmlkZ2VfY29udGV4dCwgQlJEX0xPQURFRCk7CisJCWlmICghc3RhdHVzKSB7CisJCQlwX3Byb2Nfb2JqZWN0LT5wcm9jX3N0YXRlID0gUFJPQ19MT0FERUQ7CisJCQlpZiAocF9wcm9jX29iamVjdC0+bnRmeV9vYmopCisJCQkJcHJvY19ub3RpZnlfY2xpZW50cyhwX3Byb2Nfb2JqZWN0LAorCQkJCQkJICAgIERTUF9QUk9DRVNTT1JTVEFURUNIQU5HRSk7CisJCX0KKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RhdHVzID0gcHJvY19nZXRfcHJvY2Vzc29yX2lkKGhwcm9jZXNzb3IsICZwcm9jX2lkKTsKKwkJaWYgKHByb2NfaWQgPT0gRFNQX1VOSVQpIHsKKwkJCS8qIFVzZSBhbGwgYXZhaWxhYmxlIERTUCBhZGRyZXNzIHNwYWNlIGFmdGVyIEVYVE1FTQorCQkJICogZm9yIERNTSAqLworCQkJaWYgKCFzdGF0dXMpCisJCQkJc3RhdHVzID0gY29kX2dldF9zeW1fdmFsdWUoY29kX21nciwgRVhURU5ELAorCQkJCQkJCSAgICZkd19leHRfZW5kKTsKKworCQkJLyogUmVzZXQgRE1NIHN0cnVjdHMgYW5kIGFkZCBhbiBpbml0aWFsIGZyZWUgY2h1bmsgKi8KKwkJCWlmICghc3RhdHVzKSB7CisJCQkJc3RhdHVzID0KKwkJCQkgICAgZGV2X2dldF9kbW1fbWdyKHBfcHJvY19vYmplY3QtPmhkZXZfb2JqLAorCQkJCQkJICAgICZkbW1fbWdyKTsKKwkJCQlpZiAoZG1tX21ncikgeworCQkJCQkvKiBTZXQgZHdfZXh0X2VuZCB0byBETU0gU1RBUlQgdTgKKwkJCQkJICogYWRkcmVzcyAqLworCQkJCQlkd19leHRfZW5kID0KKwkJCQkJICAgIChkd19leHRfZW5kICsgMSkgKiBEU1BXT1JEU0laRTsKKwkJCQkJLyogRE1NIG1lbW9yeSBpcyBmcm9tIEVYVF9FTkQgKi8KKwkJCQkJc3RhdHVzID0gZG1tX2NyZWF0ZV90YWJsZXMoZG1tX21nciwKKwkJCQkJCQkJICAgZHdfZXh0X2VuZCwKKwkJCQkJCQkJICAgRE1NUE9PTFNJWkUpOworCQkJCX0gZWxzZSB7CisJCQkJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCQkJfQorCQkJfQorCQl9CisJfQorCS8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGFyZ3ZbMF0gKi8KKwlrZnJlZShuZXdfZW52cCk7CisJdXNlcl9hcmdzWzBdID0gcGFyZ3YwOworCWlmICghc3RhdHVzKSB7CisJCWlmICghKCgqcF9wcm9jX29iamVjdC0+aW50Zl9meG5zLT5wZm5fYnJkX3N0YXR1cykKKwkJCQkocF9wcm9jX29iamVjdC0+aGJyaWRnZV9jb250ZXh0LCAmYnJkX3N0YXRlKSkpIHsKKwkJCXByX2luZm8oIiVzOiBQcm9jZXNzb3IgTG9hZGVkICVzXG4iLCBfX2Z1bmNfXywgcGFyZ3YwKTsKKwkJCWtmcmVlKGRydl9kYXRhcC0+YmFzZV9pbWcpOworCQkJZHJ2X2RhdGFwLT5iYXNlX2ltZyA9IGttYWxsb2Moc3RybGVuKHBhcmd2MCkgKyAxLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJCWlmIChkcnZfZGF0YXAtPmJhc2VfaW1nKQorCQkJCXN0cm5jcHkoZHJ2X2RhdGFwLT5iYXNlX2ltZywgcGFyZ3YwLAorCQkJCQkJCXN0cmxlbihwYXJndjApICsgMSk7CisJCQllbHNlCisJCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCURCQ19BU1NFUlQoYnJkX3N0YXRlID09IEJSRF9MT0FERUQpOworCQl9CisJfQorCitmdW5jX2VuZDoKKwlpZiAoc3RhdHVzKSB7CisJCXByX2VycigiJXM6IFByb2Nlc3NvciBmYWlsZWQgdG8gbG9hZFxuIiwgX19mdW5jX18pOworCQlwcm9jX3N0b3AocF9wcm9jX29iamVjdCk7CisJfQorCURCQ19FTlNVUkUoKCFzdGF0dXMKKwkJICAgICYmIHBfcHJvY19vYmplY3QtPnByb2Nfc3RhdGUgPT0gUFJPQ19MT0FERUQpCisJCSAgIHx8IHN0YXR1cyk7CisjaWZkZWYgT1BUX0xPQURfVElNRV9JTlNUUlVNRU5UQVRJT04KKwlkb19nZXR0aW1lb2ZkYXkoJnR2Mik7CisJaWYgKHR2Mi50dl91c2VjIDwgdHYxLnR2X3VzZWMpIHsKKwkJdHYyLnR2X3VzZWMgKz0gMTAwMDAwMDsKKwkJdHYyLnR2X3NlYy0tOworCX0KKwlkZXZfZGJnKGJyaWRnZSwgIiVzOiB0aW1lIHRvIGxvYWQgJWQgc2VjIGFuZCAlZCB1c2VjXG4iLCBfX2Z1bmNfXywKKwkJdHYyLnR2X3NlYyAtIHR2MS50dl9zZWMsIHR2Mi50dl91c2VjIC0gdHYxLnR2X3VzZWMpOworI2VuZGlmCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBwcm9jX21hcCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIE1hcHMgYSBNUFUgYnVmZmVyIHRvIERTUCBhZGRyZXNzIHNwYWNlLgorICovCitpbnQgcHJvY19tYXAodm9pZCAqaHByb2Nlc3Nvciwgdm9pZCAqcG1wdV9hZGRyLCB1MzIgdWxfc2l6ZSwKKwkJICAgIHZvaWQgKnJlcV9hZGRyLCB2b2lkICoqcHBfbWFwX2FkZHIsIHUzMiB1bF9tYXBfYXR0ciwKKwkJICAgIHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQpCit7CisJdTMyIHZhX2FsaWduOworCXUzMiBwYV9hbGlnbjsKKwlzdHJ1Y3QgZG1tX29iamVjdCAqZG1tX21ncjsKKwl1MzIgc2l6ZV9hbGlnbjsKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgcHJvY19vYmplY3QgKnBfcHJvY19vYmplY3QgPSAoc3RydWN0IHByb2Nfb2JqZWN0ICopaHByb2Nlc3NvcjsKKwlzdHJ1Y3QgZG1tX21hcF9vYmplY3QgKm1hcF9vYmo7CisJdTMyIHRtcF9hZGRyID0gMDsKKworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9DQUNIRV9MSU5FX0NIRUNLCisJaWYgKCh1bF9tYXBfYXR0ciAmIEJVRk1PREVfTUFTSykgIT0gUkJVRikgeworCQlpZiAoIUlTX0FMSUdORUQoKHUzMilwbXB1X2FkZHIsIERTUF9DQUNIRV9MSU5FKSB8fAorCQkgICAgIUlTX0FMSUdORUQodWxfc2l6ZSwgRFNQX0NBQ0hFX0xJTkUpKSB7CisJCQlwcl9lcnIoIiVzOiBub3QgYWxpZ25lZDogMHgleCAoJWQpXG4iLCBfX2Z1bmNfXywKKwkJCQkJCSh1MzIpcG1wdV9hZGRyLCB1bF9zaXplKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJfQorI2VuZGlmCisKKwkvKiBDYWxjdWxhdGUgdGhlIHBhZ2UtYWxpZ25lZCBQQSwgVkEgYW5kIHNpemUgKi8KKwl2YV9hbGlnbiA9IFBHX0FMSUdOX0xPVygodTMyKSByZXFfYWRkciwgUEdfU0laRTRLKTsKKwlwYV9hbGlnbiA9IFBHX0FMSUdOX0xPVygodTMyKSBwbXB1X2FkZHIsIFBHX1NJWkU0Syk7CisJc2l6ZV9hbGlnbiA9IFBHX0FMSUdOX0hJR0godWxfc2l6ZSArICh1MzIpIHBtcHVfYWRkciAtIHBhX2FsaWduLAorCQkJCSAgIFBHX1NJWkU0Syk7CisKKwlpZiAoIXBfcHJvY19vYmplY3QpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJLyogQ3JpdGljYWwgc2VjdGlvbiAqLworCW11dGV4X2xvY2soJnByb2NfbG9jayk7CisJZG1tX2dldF9oYW5kbGUocF9wcm9jX29iamVjdCwgJmRtbV9tZ3IpOworCWlmIChkbW1fbWdyKQorCQlzdGF0dXMgPSBkbW1fbWFwX21lbW9yeShkbW1fbWdyLCB2YV9hbGlnbiwgc2l6ZV9hbGlnbik7CisJZWxzZQorCQlzdGF0dXMgPSAtRUZBVUxUOworCisJLyogQWRkIG1hcHBpbmcgdG8gdGhlIHBhZ2UgdGFibGVzLiAqLworCWlmICghc3RhdHVzKSB7CisKKwkJLyogTWFwcGVkIGFkZHJlc3MgPSBNU0Igb2YgVkEgfCBMU0Igb2YgUEEgKi8KKwkJdG1wX2FkZHIgPSAodmFfYWxpZ24gfCAoKHUzMikgcG1wdV9hZGRyICYgKFBHX1NJWkU0SyAtIDEpKSk7CisJCS8qIG1hcHBlZCBtZW1vcnkgcmVzb3VyY2UgdHJhY2tpbmcgKi8KKwkJbWFwX29iaiA9IGFkZF9tYXBwaW5nX2luZm8ocHJfY3R4dCwgcGFfYWxpZ24sIHRtcF9hZGRyLAorCQkJCQkJc2l6ZV9hbGlnbik7CisJCWlmICghbWFwX29iaikKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCWVsc2UKKwkJCXN0YXR1cyA9ICgqcF9wcm9jX29iamVjdC0+aW50Zl9meG5zLT5wZm5fYnJkX21lbV9tYXApCisJCQkgICAgKHBfcHJvY19vYmplY3QtPmhicmlkZ2VfY29udGV4dCwgcGFfYWxpZ24sIHZhX2FsaWduLAorCQkJICAgICBzaXplX2FsaWduLCB1bF9tYXBfYXR0ciwgbWFwX29iai0+cGFnZXMpOworCX0KKwlpZiAoIXN0YXR1cykgeworCQkvKiBNYXBwZWQgYWRkcmVzcyA9IE1TQiBvZiBWQSB8IExTQiBvZiBQQSAqLworCQkqcHBfbWFwX2FkZHIgPSAodm9pZCAqKSB0bXBfYWRkcjsKKwl9IGVsc2UgeworCQlyZW1vdmVfbWFwcGluZ19pbmZvcm1hdGlvbihwcl9jdHh0LCB0bXBfYWRkciwgc2l6ZV9hbGlnbik7CisJCWRtbV91bl9tYXBfbWVtb3J5KGRtbV9tZ3IsIHZhX2FsaWduLCAmc2l6ZV9hbGlnbik7CisJfQorCW11dGV4X3VubG9jaygmcHJvY19sb2NrKTsKKworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisKK2Z1bmNfZW5kOgorCWRldl9kYmcoYnJpZGdlLCAiJXM6IGhwcm9jZXNzb3IgJXAsIHBtcHVfYWRkciAlcCwgdWxfc2l6ZSAleCwgIgorCQkicmVxX2FkZHIgJXAsIHVsX21hcF9hdHRyICV4LCBwcF9tYXBfYWRkciAlcCwgdmFfYWxpZ24gJXgsICIKKwkJInBhX2FsaWduICV4LCBzaXplX2FsaWduICV4IHN0YXR1cyAweCV4XG4iLCBfX2Z1bmNfXywKKwkJaHByb2Nlc3NvciwgcG1wdV9hZGRyLCB1bF9zaXplLCByZXFfYWRkciwgdWxfbWFwX2F0dHIsCisJCXBwX21hcF9hZGRyLCB2YV9hbGlnbiwgcGFfYWxpZ24sIHNpemVfYWxpZ24sIHN0YXR1cyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHByb2NfcmVnaXN0ZXJfbm90aWZ5ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmVnaXN0ZXIgdG8gYmUgbm90aWZpZWQgb2Ygc3BlY2lmaWMgcHJvY2Vzc29yIGV2ZW50cy4KKyAqLworaW50IHByb2NfcmVnaXN0ZXJfbm90aWZ5KHZvaWQgKmhwcm9jZXNzb3IsIHUzMiBldmVudF9tYXNrLAorCQkJCXUzMiBub3RpZnlfdHlwZSwgc3RydWN0IGRzcF9ub3RpZmljYXRpb24KKwkJCQkqIGhub3RpZmljYXRpb24pCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IHByb2Nfb2JqZWN0ICpwX3Byb2Nfb2JqZWN0ID0gKHN0cnVjdCBwcm9jX29iamVjdCAqKWhwcm9jZXNzb3I7CisJc3RydWN0IGRlaF9tZ3IgKmhkZWhfbWdyOworCisJREJDX1JFUVVJUkUoaG5vdGlmaWNhdGlvbiAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwkvKiBDaGVjayBwcm9jZXNzb3IgaGFuZGxlICovCisJaWYgKCFwX3Byb2Nfb2JqZWN0KSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCS8qIENoZWNrIGlmIGV2ZW50IG1hc2sgaXMgYSB2YWxpZCBwcm9jZXNzb3IgcmVsYXRlZCBldmVudCAqLworCWlmIChldmVudF9tYXNrICYgfihEU1BfUFJPQ0VTU09SU1RBVEVDSEFOR0UgfCBEU1BfUFJPQ0VTU09SQVRUQUNIIHwKKwkJCURTUF9QUk9DRVNTT1JERVRBQ0ggfCBEU1BfUFJPQ0VTU09SUkVTVEFSVCB8CisJCQlEU1BfTU1VRkFVTFQgfCBEU1BfU1lTRVJST1IgfCBEU1BfUFdSRVJST1IgfAorCQkJRFNQX1dEVE9WRVJGTE9XKSkKKwkJc3RhdHVzID0gLUVJTlZBTDsKKworCS8qIENoZWNrIGlmIG5vdGlmeSB0eXBlIGlzIHZhbGlkICovCisJaWYgKG5vdGlmeV90eXBlICE9IERTUF9TSUdOQUxFVkVOVCkKKwkJc3RhdHVzID0gLUVJTlZBTDsKKworCWlmICghc3RhdHVzKSB7CisJCS8qIElmIGV2ZW50IG1hc2sgaXMgbm90IERTUF9TWVNFUlJPUiwgRFNQX01NVUZBVUxULAorCQkgKiBvciBEU1BfUFdSRVJST1IgdGhlbiByZWdpc3RlciBldmVudCBpbW1lZGlhdGVseS4gKi8KKwkJaWYgKGV2ZW50X21hc2sgJgorCQkgICAgfihEU1BfU1lTRVJST1IgfCBEU1BfTU1VRkFVTFQgfCBEU1BfUFdSRVJST1IgfAorCQkJCURTUF9XRFRPVkVSRkxPVykpIHsKKwkJCXN0YXR1cyA9IG50ZnlfcmVnaXN0ZXIocF9wcm9jX29iamVjdC0+bnRmeV9vYmosCisJCQkJCSAgICAgICBobm90aWZpY2F0aW9uLCBldmVudF9tYXNrLAorCQkJCQkgICAgICAgbm90aWZ5X3R5cGUpOworCQkJLyogU3BlY2lhbCBjYXNlIGFsZXJ0LCBzcGVjaWFsIGNhc2UgYWxlcnQhCisJCQkgKiBJZiB3ZSdyZSB0cnlpbmcgdG8gKmRlcmVnaXN0ZXIqIChpLmUuIGV2ZW50X21hc2sKKwkJCSAqIGlzIDApLCBhIERTUF9TWVNFUlJPUiBvciBEU1BfTU1VRkFVTFQgbm90aWZpY2F0aW9uLAorCQkJICogd2UgaGF2ZSB0byBkZXJlZ2lzdGVyIHdpdGggdGhlIERFSCBtYW5hZ2VyLgorCQkJICogVGhlcmUncyBubyB3YXkgdG8ga25vdywgYmFzZWQgb24gZXZlbnRfbWFzayB3aGljaAorCQkJICogbWFuYWdlciB0aGUgbm90aWZpY2F0aW9uIGV2ZW50IHdhcyByZWdpc3RlcmVkIHdpdGgsCisJCQkgKiBzbyBpZiB3ZSdyZSB0cnlpbmcgdG8gZGVyZWdpc3RlciBhbmQgbnRmeV9yZWdpc3RlcgorCQkJICogZmFpbGVkLCB3ZSdsbCBnaXZlIHRoZSBkZWggbWFuYWdlciBhIHNob3QuCisJCQkgKi8KKwkJCWlmICgoZXZlbnRfbWFzayA9PSAwKSAmJiBzdGF0dXMpIHsKKwkJCQlzdGF0dXMgPQorCQkJCSAgICBkZXZfZ2V0X2RlaF9tZ3IocF9wcm9jX29iamVjdC0+aGRldl9vYmosCisJCQkJCQkgICAgJmhkZWhfbWdyKTsKKwkJCQlzdGF0dXMgPQorCQkJCQlicmlkZ2VfZGVoX3JlZ2lzdGVyX25vdGlmeShoZGVoX21nciwKKwkJCQkJCQlldmVudF9tYXNrLAorCQkJCQkJCW5vdGlmeV90eXBlLAorCQkJCQkJCWhub3RpZmljYXRpb24pOworCQkJfQorCQl9IGVsc2UgeworCQkJc3RhdHVzID0gZGV2X2dldF9kZWhfbWdyKHBfcHJvY19vYmplY3QtPmhkZXZfb2JqLAorCQkJCQkJICZoZGVoX21ncik7CisJCQlzdGF0dXMgPQorCQkJICAgIGJyaWRnZV9kZWhfcmVnaXN0ZXJfbm90aWZ5KGhkZWhfbWdyLAorCQkJCQkgICAgZXZlbnRfbWFzaywKKwkJCQkJICAgIG5vdGlmeV90eXBlLAorCQkJCQkgICAgaG5vdGlmaWNhdGlvbik7CisKKwkJfQorCX0KK2Z1bmNfZW5kOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gcHJvY19yZXNlcnZlX21lbW9yeSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlc2VydmUgYSB2aXJ0dWFsbHkgY29udGlndW91cyByZWdpb24gb2YgRFNQIGFkZHJlc3Mgc3BhY2UuCisgKi8KK2ludCBwcm9jX3Jlc2VydmVfbWVtb3J5KHZvaWQgKmhwcm9jZXNzb3IsIHUzMiB1bF9zaXplLAorCQkJICAgICAgIHZvaWQgKipwcF9yc3ZfYWRkciwKKwkJCSAgICAgICBzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0KQoreworCXN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fbWdyOworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBwcm9jX29iamVjdCAqcF9wcm9jX29iamVjdCA9IChzdHJ1Y3QgcHJvY19vYmplY3QgKilocHJvY2Vzc29yOworCXN0cnVjdCBkbW1fcnN2X29iamVjdCAqcnN2X29iajsKKworCWlmICghcF9wcm9jX29iamVjdCkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCXN0YXR1cyA9IGRtbV9nZXRfaGFuZGxlKHBfcHJvY19vYmplY3QsICZkbW1fbWdyKTsKKwlpZiAoIWRtbV9tZ3IpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwlzdGF0dXMgPSBkbW1fcmVzZXJ2ZV9tZW1vcnkoZG1tX21nciwgdWxfc2l6ZSwgKHUzMiAqKSBwcF9yc3ZfYWRkcik7CisJaWYgKHN0YXR1cyAhPSAwKQorCQlnb3RvIGZ1bmNfZW5kOworCisJLyoKKwkgKiBBIHN1Y2Nlc3NmdWwgcmVzZXJ2ZSBzaG91bGQgYmUgZm9sbG93ZWQgYnkgaW5zZXJ0aW9uIG9mIHJzdl9vYmoKKwkgKiBpbnRvIGRtbV9yc3ZfbGlzdCwgc28gdGhhdCByZXNlcnZlZCBtZW1vcnkgcmVzb3VyY2UgdHJhY2tpbmcKKwkgKiByZW1haW5zIHVwdG9kYXRlCisJICovCisJcnN2X29iaiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkbW1fcnN2X29iamVjdCksIEdGUF9LRVJORUwpOworCWlmIChyc3Zfb2JqKSB7CisJCXJzdl9vYmotPmRzcF9yZXNlcnZlZF9hZGRyID0gKHUzMikgKnBwX3Jzdl9hZGRyOworCQlzcGluX2xvY2soJnByX2N0eHQtPmRtbV9yc3ZfbG9jayk7CisJCWxpc3RfYWRkKCZyc3Zfb2JqLT5saW5rLCAmcHJfY3R4dC0+ZG1tX3Jzdl9saXN0KTsKKwkJc3Bpbl91bmxvY2soJnByX2N0eHQtPmRtbV9yc3ZfbG9jayk7CisJfQorCitmdW5jX2VuZDoKKwlkZXZfZGJnKGJyaWRnZSwgIiVzOiBocHJvY2Vzc29yOiAweCVwIHVsX3NpemU6IDB4JXggcHBfcnN2X2FkZHI6IDB4JXAgIgorCQkic3RhdHVzIDB4JXhcbiIsIF9fZnVuY19fLCBocHJvY2Vzc29yLAorCQl1bF9zaXplLCBwcF9yc3ZfYWRkciwgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHByb2Nfc3RhcnQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTdGFydCBhIHByb2Nlc3NvciBydW5uaW5nLgorICovCitpbnQgcHJvY19zdGFydCh2b2lkICpocHJvY2Vzc29yKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBwcm9jX29iamVjdCAqcF9wcm9jX29iamVjdCA9IChzdHJ1Y3QgcHJvY19vYmplY3QgKilocHJvY2Vzc29yOworCXN0cnVjdCBjb2RfbWFuYWdlciAqY29kX21ncjsJLyogQ29kZSBtYW5hZ2VyIGhhbmRsZSAqLworCXUzMiBkd19kc3BfYWRkcjsJLyogTG9hZGVkIGNvZGUncyBlbnRyeSBwb2ludC4gKi8KKwlpbnQgYnJkX3N0YXRlOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCWlmICghcF9wcm9jX29iamVjdCkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwkvKiBDYWxsIHRoZSBicmlkZ2VfYnJkX3N0YXJ0ICovCisJaWYgKHBfcHJvY19vYmplY3QtPnByb2Nfc3RhdGUgIT0gUFJPQ19MT0FERUQpIHsKKwkJc3RhdHVzID0gLUVCQURSOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlzdGF0dXMgPSBkZXZfZ2V0X2NvZF9tZ3IocF9wcm9jX29iamVjdC0+aGRldl9vYmosICZjb2RfbWdyKTsKKwlpZiAoIWNvZF9tZ3IpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2NvbnQ7CisJfQorCisJc3RhdHVzID0gY29kX2dldF9lbnRyeShjb2RfbWdyLCAmZHdfZHNwX2FkZHIpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19jb250OworCisJc3RhdHVzID0gKCpwX3Byb2Nfb2JqZWN0LT5pbnRmX2Z4bnMtPnBmbl9icmRfc3RhcnQpCisJICAgIChwX3Byb2Nfb2JqZWN0LT5oYnJpZGdlX2NvbnRleHQsIGR3X2RzcF9hZGRyKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfY29udDsKKworCS8qIENhbGwgZGV2X2NyZWF0ZTIgKi8KKwlzdGF0dXMgPSBkZXZfY3JlYXRlMihwX3Byb2Nfb2JqZWN0LT5oZGV2X29iaik7CisJaWYgKCFzdGF0dXMpIHsKKwkJcF9wcm9jX29iamVjdC0+cHJvY19zdGF0ZSA9IFBST0NfUlVOTklORzsKKwkJLyogRGVlcCBzbGVlcCBzd2l0Y2VzIG9mZiB0aGUgcGVyaXBoZXJhbCBjbG9ja3MuCisJCSAqIHdlIGp1c3QgcHV0IHRoZSBEU1AgQ1BVIGluIGlkbGUgaW4gdGhlIGlkbGUgbG9vcC4KKwkJICogc28gdGhlcmUgaXMgbm8gbmVlZCB0byBzZW5kIGEgY29tbWFuZCB0byBEU1AgKi8KKworCQlpZiAocF9wcm9jX29iamVjdC0+bnRmeV9vYmopIHsKKwkJCXByb2Nfbm90aWZ5X2NsaWVudHMocF9wcm9jX29iamVjdCwKKwkJCQkJICAgIERTUF9QUk9DRVNTT1JTVEFURUNIQU5HRSk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBGYWlsZWQgdG8gQ3JlYXRlIE5vZGUgTWFuYWdlciBhbmQgRElTUCBPYmplY3QKKwkJICogU3RvcCB0aGUgUHJvY2Vzc29yIGZyb20gcnVubmluZy4gUHV0IGl0IGluIFNUT1BQRUQgU3RhdGUgKi8KKwkJKHZvaWQpKCpwX3Byb2Nfb2JqZWN0LT5pbnRmX2Z4bnMtPgorCQkgICAgICAgcGZuX2JyZF9zdG9wKSAocF9wcm9jX29iamVjdC0+aGJyaWRnZV9jb250ZXh0KTsKKwkJcF9wcm9jX29iamVjdC0+cHJvY19zdGF0ZSA9IFBST0NfU1RPUFBFRDsKKwl9CitmdW5jX2NvbnQ6CisJaWYgKCFzdGF0dXMpIHsKKwkJaWYgKCEoKCpwX3Byb2Nfb2JqZWN0LT5pbnRmX2Z4bnMtPnBmbl9icmRfc3RhdHVzKQorCQkJCShwX3Byb2Nfb2JqZWN0LT5oYnJpZGdlX2NvbnRleHQsICZicmRfc3RhdGUpKSkgeworCQkJcHJfaW5mbygiJXM6IGRzcCBpbiBydW5uaW5nIHN0YXRlXG4iLCBfX2Z1bmNfXyk7CisJCQlEQkNfQVNTRVJUKGJyZF9zdGF0ZSAhPSBCUkRfSElCRVJOQVRJT04pOworCQl9CisJfSBlbHNlIHsKKwkJcHJfZXJyKCIlczogRmFpbGVkIHRvIHN0YXJ0IHRoZSBkc3BcbiIsIF9fZnVuY19fKTsKKwkJcHJvY19zdG9wKHBfcHJvY19vYmplY3QpOworCX0KKworZnVuY19lbmQ6CisJREJDX0VOU1VSRSgoIXN0YXR1cyAmJiBwX3Byb2Nfb2JqZWN0LT5wcm9jX3N0YXRlID09CisJCSAgICBQUk9DX1JVTk5JTkcpIHx8IHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBwcm9jX3N0b3AgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTdG9wIGEgcHJvY2Vzc29yIHJ1bm5pbmcuCisgKi8KK2ludCBwcm9jX3N0b3Aodm9pZCAqaHByb2Nlc3NvcikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgcHJvY19vYmplY3QgKnBfcHJvY19vYmplY3QgPSAoc3RydWN0IHByb2Nfb2JqZWN0ICopaHByb2Nlc3NvcjsKKwlzdHJ1Y3QgbXNnX21nciAqaG1zZ19tZ3I7CisJc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3I7CisJdm9pZCAqaG5vZGU7CisJdTMyIG5vZGVfdGFiX3NpemUgPSAxOworCXUzMiBudW1fbm9kZXMgPSAwOworCXUzMiBub2Rlc19hbGxvY2F0ZWQgPSAwOworCWludCBicmRfc3RhdGU7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJaWYgKCFwX3Byb2Nfb2JqZWN0KSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCS8qIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgcnVubmluZyBub2RlcyAqLworCXN0YXR1cyA9IGRldl9nZXRfbm9kZV9tYW5hZ2VyKHBfcHJvY19vYmplY3QtPmhkZXZfb2JqLCAmaG5vZGVfbWdyKTsKKwlpZiAoIXN0YXR1cyAmJiBobm9kZV9tZ3IpIHsKKwkJc3RhdHVzID0gbm9kZV9lbnVtX25vZGVzKGhub2RlX21nciwgJmhub2RlLCBub2RlX3RhYl9zaXplLAorCQkJCQkgJm51bV9ub2RlcywgJm5vZGVzX2FsbG9jYXRlZCk7CisJCWlmICgoc3RhdHVzID09IC1FSU5WQUwpIHx8IChub2Rlc19hbGxvY2F0ZWQgPiAwKSkgeworCQkJcHJfZXJyKCIlczogQ2FuJ3Qgc3RvcCBkZXZpY2UsIGFjdGl2ZSBub2RlcyA9ICVkIFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgbm9kZXNfYWxsb2NhdGVkKTsKKwkJCXJldHVybiAtRUJBRFI7CisJCX0KKwl9CisJLyogQ2FsbCB0aGUgYnJpZGdlX2JyZF9zdG9wICovCisJLyogSXQgaXMgT0sgdG8gc3RvcCBhIGRldmljZSB0aGF0IGRvZXMgbid0IGhhdmUgbm9kZXMgT1Igbm90IHN0YXJ0ZWQgKi8KKwlzdGF0dXMgPQorCSAgICAoKnBfcHJvY19vYmplY3QtPmludGZfZnhucy0+CisJICAgICBwZm5fYnJkX3N0b3ApIChwX3Byb2Nfb2JqZWN0LT5oYnJpZGdlX2NvbnRleHQpOworCWlmICghc3RhdHVzKSB7CisJCWRldl9kYmcoYnJpZGdlLCAiJXM6IHByb2Nlc3NvciBpbiBzdGFuZGJ5IG1vZGVcbiIsIF9fZnVuY19fKTsKKwkJcF9wcm9jX29iamVjdC0+cHJvY19zdGF0ZSA9IFBST0NfU1RPUFBFRDsKKwkJLyogRGVzdG9yeSB0aGUgTm9kZSBNYW5hZ2VyLCBtc2dfY3RybCBNYW5hZ2VyICovCisJCWlmICghKGRldl9kZXN0cm95MihwX3Byb2Nfb2JqZWN0LT5oZGV2X29iaikpKSB7CisJCQkvKiBEZXN0cm95IHRoZSBtc2dfY3RybCBieSBjYWxsaW5nIG1zZ19kZWxldGUgKi8KKwkJCWRldl9nZXRfbXNnX21ncihwX3Byb2Nfb2JqZWN0LT5oZGV2X29iaiwgJmhtc2dfbWdyKTsKKwkJCWlmIChobXNnX21ncikgeworCQkJCW1zZ19kZWxldGUoaG1zZ19tZ3IpOworCQkJCWRldl9zZXRfbXNnX21ncihwX3Byb2Nfb2JqZWN0LT5oZGV2X29iaiwgTlVMTCk7CisJCQl9CisJCQlpZiAoISgoKnBfcHJvY19vYmplY3QtPgorCQkJICAgICAgaW50Zl9meG5zLT5wZm5fYnJkX3N0YXR1cykgKHBfcHJvY19vYmplY3QtPgorCQkJCQkJCSAgaGJyaWRnZV9jb250ZXh0LAorCQkJCQkJCSAgJmJyZF9zdGF0ZSkpKQorCQkJCURCQ19BU1NFUlQoYnJkX3N0YXRlID09IEJSRF9TVE9QUEVEKTsKKwkJfQorCX0gZWxzZSB7CisJCXByX2VycigiJXM6IEZhaWxlZCB0byBzdG9wIHRoZSBwcm9jZXNzb3JcbiIsIF9fZnVuY19fKTsKKwl9CitmdW5jX2VuZDoKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gcHJvY191bl9tYXAgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZW1vdmVzIGEgTVBVIGJ1ZmZlciBtYXBwaW5nIGZyb20gdGhlIERTUCBhZGRyZXNzIHNwYWNlLgorICovCitpbnQgcHJvY191bl9tYXAodm9pZCAqaHByb2Nlc3Nvciwgdm9pZCAqbWFwX2FkZHIsCisJCSAgICAgICBzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0KQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBwcm9jX29iamVjdCAqcF9wcm9jX29iamVjdCA9IChzdHJ1Y3QgcHJvY19vYmplY3QgKilocHJvY2Vzc29yOworCXN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fbWdyOworCXUzMiB2YV9hbGlnbjsKKwl1MzIgc2l6ZV9hbGlnbjsKKworCXZhX2FsaWduID0gUEdfQUxJR05fTE9XKCh1MzIpIG1hcF9hZGRyLCBQR19TSVpFNEspOworCWlmICghcF9wcm9jX29iamVjdCkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCXN0YXR1cyA9IGRtbV9nZXRfaGFuZGxlKGhwcm9jZXNzb3IsICZkbW1fbWdyKTsKKwlpZiAoIWRtbV9tZ3IpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwkvKiBDcml0aWNhbCBzZWN0aW9uICovCisJbXV0ZXhfbG9jaygmcHJvY19sb2NrKTsKKwkvKgorCSAqIFVwZGF0ZSBETU0gc3RydWN0dXJlcy4gR2V0IHRoZSBzaXplIHRvIHVubWFwLgorCSAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBlcnJvciBpZiB0aGUgVkEgaXMgbm90IG1hcHBlZAorCSAqLworCXN0YXR1cyA9IGRtbV91bl9tYXBfbWVtb3J5KGRtbV9tZ3IsICh1MzIpIHZhX2FsaWduLCAmc2l6ZV9hbGlnbik7CisJLyogUmVtb3ZlIG1hcHBpbmcgZnJvbSB0aGUgcGFnZSB0YWJsZXMuICovCisJaWYgKCFzdGF0dXMpIHsKKwkJc3RhdHVzID0gKCpwX3Byb2Nfb2JqZWN0LT5pbnRmX2Z4bnMtPnBmbl9icmRfbWVtX3VuX21hcCkKKwkJICAgIChwX3Byb2Nfb2JqZWN0LT5oYnJpZGdlX2NvbnRleHQsIHZhX2FsaWduLCBzaXplX2FsaWduKTsKKwl9CisKKwltdXRleF91bmxvY2soJnByb2NfbG9jayk7CisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2VuZDsKKworCS8qCisJICogQSBzdWNjZXNzZnVsIHVubWFwIHNob3VsZCBiZSBmb2xsb3dlZCBieSByZW1vdmFsIG9mIG1hcF9vYmoKKwkgKiBmcm9tIGRtbV9tYXBfbGlzdCwgc28gdGhhdCBtYXBwZWQgbWVtb3J5IHJlc291cmNlIHRyYWNraW5nCisJICogcmVtYWlucyB1cHRvZGF0ZQorCSAqLworCXJlbW92ZV9tYXBwaW5nX2luZm9ybWF0aW9uKHByX2N0eHQsICh1MzIpIG1hcF9hZGRyLCBzaXplX2FsaWduKTsKKworZnVuY19lbmQ6CisJZGV2X2RiZyhicmlkZ2UsICIlczogaHByb2Nlc3NvcjogMHglcCBtYXBfYWRkcjogMHglcCBzdGF0dXM6IDB4JXhcbiIsCisJCV9fZnVuY19fLCBocHJvY2Vzc29yLCBtYXBfYWRkciwgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHByb2NfdW5fcmVzZXJ2ZV9tZW1vcnkgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBGcmVlcyBhIHByZXZpb3VzbHkgcmVzZXJ2ZWQgcmVnaW9uIG9mIERTUCBhZGRyZXNzIHNwYWNlLgorICovCitpbnQgcHJvY191bl9yZXNlcnZlX21lbW9yeSh2b2lkICpocHJvY2Vzc29yLCB2b2lkICpwcnN2X2FkZHIsCisJCQkJICBzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0KQoreworCXN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fbWdyOworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBwcm9jX29iamVjdCAqcF9wcm9jX29iamVjdCA9IChzdHJ1Y3QgcHJvY19vYmplY3QgKilocHJvY2Vzc29yOworCXN0cnVjdCBkbW1fcnN2X29iamVjdCAqcnN2X29iajsKKworCWlmICghcF9wcm9jX29iamVjdCkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCXN0YXR1cyA9IGRtbV9nZXRfaGFuZGxlKHBfcHJvY19vYmplY3QsICZkbW1fbWdyKTsKKwlpZiAoIWRtbV9tZ3IpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwlzdGF0dXMgPSBkbW1fdW5fcmVzZXJ2ZV9tZW1vcnkoZG1tX21nciwgKHUzMikgcHJzdl9hZGRyKTsKKwlpZiAoc3RhdHVzICE9IDApCisJCWdvdG8gZnVuY19lbmQ7CisKKwkvKgorCSAqIEEgc3VjY2Vzc2Z1bCB1bnJlc2VydmUgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IHJlbW92YWwgb2YgcnN2X29iagorCSAqIGZyb20gZG1tX3Jzdl9saXN0LCBzbyB0aGF0IHJlc2VydmVkIG1lbW9yeSByZXNvdXJjZSB0cmFja2luZworCSAqIHJlbWFpbnMgdXB0b2RhdGUKKwkgKi8KKwlzcGluX2xvY2soJnByX2N0eHQtPmRtbV9yc3ZfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyc3Zfb2JqLCAmcHJfY3R4dC0+ZG1tX3Jzdl9saXN0LCBsaW5rKSB7CisJCWlmIChyc3Zfb2JqLT5kc3BfcmVzZXJ2ZWRfYWRkciA9PSAodTMyKSBwcnN2X2FkZHIpIHsKKwkJCWxpc3RfZGVsKCZyc3Zfb2JqLT5saW5rKTsKKwkJCWtmcmVlKHJzdl9vYmopOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJnByX2N0eHQtPmRtbV9yc3ZfbG9jayk7CisKK2Z1bmNfZW5kOgorCWRldl9kYmcoYnJpZGdlLCAiJXM6IGhwcm9jZXNzb3I6IDB4JXAgcHJzdl9hZGRyOiAweCVwIHN0YXR1czogMHgleFxuIiwKKwkJX19mdW5jX18sIGhwcm9jZXNzb3IsIHByc3ZfYWRkciwgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09ID0gcHJvY19tb25pdG9yID09PT09PT09ID09CisgKiAgUHVycG9zZToKKyAqICAgICAgUGxhY2UgdGhlIFByb2Nlc3NvciBpbiBNb25pdG9yIFN0YXRlLiBUaGlzIGlzIGFuIGludGVybmFsCisgKiAgICAgIGZ1bmN0aW9uIGFuZCBhIHJlcXVpcmVtZW50IGJlZm9yZSBQcm9jZXNzb3IgaXMgbG9hZGVkLgorICogICAgICBUaGlzIGRvZXMgYSBicmlkZ2VfYnJkX3N0b3AsIGRldl9kZXN0cm95MiBhbmQgYnJpZGdlX2JyZF9tb25pdG9yLgorICogICAgICBJbiBkZXZfZGVzdHJveTIgd2UgZGVsZXRlIHRoZSBub2RlIG1hbmFnZXIuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgcF9wcm9jX29iamVjdDogICAgUG9pbnRlciB0byBQcm9jZXNzb3IgT2JqZWN0CisgKiAgUmV0dXJuczoKKyAqICAgICAgMDoJUHJvY2Vzc29yIHBsYWNlZCBpbiBtb25pdG9yIG1vZGUuCisgKiAgICAgICEwOiAgICAgICBGYWlsZWQgdG8gcGxhY2UgcHJvY2Vzc29yIGluIG1vbml0b3IgbW9kZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgVmFsaWQgUHJvY2Vzc29yIEhhbmRsZQorICogIEVuc3VyZXM6CisgKiAgICAgIFN1Y2Nlc3M6CVByb2NPYmplY3Qgc3RhdGUgaXMgUFJPQ19JRExFCisgKi8KK3N0YXRpYyBpbnQgcHJvY19tb25pdG9yKHN0cnVjdCBwcm9jX29iamVjdCAqcHJvY19vYmopCit7CisJaW50IHN0YXR1cyA9IC1FUEVSTTsKKwlzdHJ1Y3QgbXNnX21nciAqaG1zZ19tZ3I7CisJaW50IGJyZF9zdGF0ZTsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShwcm9jX29iaik7CisKKwkvKiBUaGlzIGlzIG5lZWRlZCBvbmx5IHdoZW4gRGV2aWNlIGlzIGxvYWRlZCB3aGVuIGl0IGlzCisJICogYWxyZWFkeSAnQUNUSVZFJyAqLworCS8qIERlc3RvcnkgdGhlIE5vZGUgTWFuYWdlciwgbXNnX2N0cmwgTWFuYWdlciAqLworCWlmICghZGV2X2Rlc3Ryb3kyKHByb2Nfb2JqLT5oZGV2X29iaikpIHsKKwkJLyogRGVzdHJveSB0aGUgbXNnX2N0cmwgYnkgY2FsbGluZyBtc2dfZGVsZXRlICovCisJCWRldl9nZXRfbXNnX21ncihwcm9jX29iai0+aGRldl9vYmosICZobXNnX21ncik7CisJCWlmIChobXNnX21ncikgeworCQkJbXNnX2RlbGV0ZShobXNnX21ncik7CisJCQlkZXZfc2V0X21zZ19tZ3IocHJvY19vYmotPmhkZXZfb2JqLCBOVUxMKTsKKwkJfQorCX0KKwkvKiBQbGFjZSB0aGUgQm9hcmQgaW4gdGhlIE1vbml0b3IgU3RhdGUgKi8KKwlpZiAoISgoKnByb2Nfb2JqLT5pbnRmX2Z4bnMtPnBmbl9icmRfbW9uaXRvcikKKwkJCSAgKHByb2Nfb2JqLT5oYnJpZGdlX2NvbnRleHQpKSkgeworCQlzdGF0dXMgPSAwOworCQlpZiAoISgoKnByb2Nfb2JqLT5pbnRmX2Z4bnMtPnBmbl9icmRfc3RhdHVzKQorCQkJCSAgKHByb2Nfb2JqLT5oYnJpZGdlX2NvbnRleHQsICZicmRfc3RhdGUpKSkKKwkJCURCQ19BU1NFUlQoYnJkX3N0YXRlID09IEJSRF9JRExFKTsKKwl9CisKKwlEQkNfRU5TVVJFKCghc3RhdHVzICYmIGJyZF9zdGF0ZSA9PSBCUkRfSURMRSkgfHwKKwkJICAgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGdldF9lbnZwX2NvdW50ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGVudnAgYXJyYXksIGluY2x1ZGluZyB0aGUKKyAqICAgICAgdGVybWluYXRpbmcgTlVMTCBlbGVtZW50LgorICovCitzdGF0aWMgczMyIGdldF9lbnZwX2NvdW50KGNoYXIgKiplbnZwKQoreworCXMzMiByZXQgPSAwOworCWlmIChlbnZwKSB7CisJCXdoaWxlICgqZW52cCsrKQorCQkJcmV0Kys7CisKKwkJcmV0ICs9IDE7CS8qIEluY2x1ZGUgdGhlIHRlcm1pbmF0aW5nIE5VTEwgaW4gdGhlIGNvdW50LiAqLworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiAgPT09PT09PT0gcHJlcGVuZF9lbnZwID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUHJlcGVuZCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZT12YWx1ZSBwYWlyIHRvIHRoZSBuZXcgZW52cCBhcnJheSwgYW5kCisgKiAgICAgIGNvcHkgaW4gdGhlIGV4aXN0aW5nIHZhcj12YWx1ZSBwYWlycyBpbiB0aGUgb2xkIGVudnAgYXJyYXkuCisgKi8KK3N0YXRpYyBjaGFyICoqcHJlcGVuZF9lbnZwKGNoYXIgKipuZXdfZW52cCwgY2hhciAqKmVudnAsIHMzMiBlbnZwX2VsZW1zLAorCQkJICAgczMyIGNuZXdfZW52cCwgY2hhciAqc3pfdmFyKQoreworCWNoYXIgKipwcF9lbnZwID0gbmV3X2VudnA7CisKKwlEQkNfUkVRVUlSRShuZXdfZW52cCk7CisKKwkvKiBQcmVwZW5kIG5ldyBlbnZpcm9uIHZhcj12YWx1ZSBzdHJpbmcgKi8KKwkqbmV3X2VudnArKyA9IHN6X3ZhcjsKKworCS8qIENvcHkgdXNlcidzIGVudmlyb25tZW50IGludG8gb3VyIG93bi4gKi8KKwl3aGlsZSAoZW52cF9lbGVtcy0tKQorCQkqbmV3X2VudnArKyA9ICplbnZwKys7CisKKwkvKiBFbnN1cmUgTlVMTCB0ZXJtaW5hdGVzIHRoZSBuZXcgZW52aXJvbm1lbnQgc3RyaW5ncyBhcnJheS4gKi8KKwlpZiAoZW52cF9lbGVtcyA9PSAwKQorCQkqbmV3X2VudnAgPSBOVUxMOworCisJcmV0dXJuIHBwX2VudnA7Cit9CisKKy8qCisgKiAgPT09PT09PT0gcHJvY19ub3RpZnlfY2xpZW50cyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIE5vdGlmeSB0aGUgcHJvY2Vzc29yIHRoZSBldmVudHMuCisgKi8KK2ludCBwcm9jX25vdGlmeV9jbGllbnRzKHZvaWQgKnByb2MsIHUzMiBldmVudHMpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IHByb2Nfb2JqZWN0ICpwX3Byb2Nfb2JqZWN0ID0gKHN0cnVjdCBwcm9jX29iamVjdCAqKXByb2M7CisKKwlEQkNfUkVRVUlSRShwX3Byb2Nfb2JqZWN0KTsKKwlEQkNfUkVRVUlSRShpc192YWxpZF9wcm9jX2V2ZW50KGV2ZW50cykpOworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlpZiAoIXBfcHJvY19vYmplY3QpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwludGZ5X25vdGlmeShwX3Byb2Nfb2JqZWN0LT5udGZ5X29iaiwgZXZlbnRzKTsKK2Z1bmNfZW5kOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gcHJvY19ub3RpZnlfYWxsX2NsaWVudHMgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBOb3RpZnkgdGhlIHByb2Nlc3NvciB0aGUgZXZlbnRzLiBUaGlzIGluY2x1ZGVzIG5vdGlmeWluZyBhbGwgY2xpZW50cworICogICAgICBhdHRhY2hlZCB0byBhIHBhcnRpY3VsYXQgRFNQLgorICovCitpbnQgcHJvY19ub3RpZnlfYWxsX2NsaWVudHModm9pZCAqcHJvYywgdTMyIGV2ZW50cykKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgcHJvY19vYmplY3QgKnBfcHJvY19vYmplY3QgPSAoc3RydWN0IHByb2Nfb2JqZWN0ICopcHJvYzsKKworCURCQ19SRVFVSVJFKGlzX3ZhbGlkX3Byb2NfZXZlbnQoZXZlbnRzKSk7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJaWYgKCFwX3Byb2Nfb2JqZWN0KSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCisJZGV2X25vdGlmeV9jbGllbnRzKHBfcHJvY19vYmplY3QtPmhkZXZfb2JqLCBldmVudHMpOworCitmdW5jX2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHByb2NfZ2V0X3Byb2Nlc3Nvcl9pZCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlcyB0aGUgcHJvY2Vzc29yIElELgorICovCitpbnQgcHJvY19nZXRfcHJvY2Vzc29yX2lkKHZvaWQgKnByb2MsIHUzMiAqIHByb2NfaWQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IHByb2Nfb2JqZWN0ICpwX3Byb2Nfb2JqZWN0ID0gKHN0cnVjdCBwcm9jX29iamVjdCAqKXByb2M7CisKKwlpZiAocF9wcm9jX29iamVjdCkKKwkJKnByb2NfaWQgPSBwX3Byb2Nfb2JqZWN0LT5wcm9jZXNzb3JfaWQ7CisJZWxzZQorCQlzdGF0dXMgPSAtRUZBVUxUOworCisJcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL3B3ci5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvcHdyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVjYjFhMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL3B3ci5jCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogcHdyLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogUFdSIEFQSSBmb3IgY29udHJvbGxpbmcgRFNQIHBvd2VyIHN0YXRlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSG9zdCBPUyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlzICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL3B3ci5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVzb3VyY2UgTWFuYWdlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXZkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rydi5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhdGZvcm0gTWFuYWdlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXYuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExpbmsgRHJpdmVyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGlvY3RsLmg+CisKKy8qCisgKiAgPT09PT09PT0gcHdyX3NsZWVwX2RzcCA9PT09PT09PQorICogICAgU2VuZCBjb21tYW5kIHRvIERTUCB0byBlbnRlciBzbGVlcCBzdGF0ZS4KKyAqLworaW50IHB3cl9zbGVlcF9kc3AoY29uc3QgdTMyIHNsZWVwX2NvZGUsIGNvbnN0IHUzMiB0aW1lb3V0KQoreworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmR3X2NvbnRleHQ7CisJaW50IHN0YXR1cyA9IC1FUEVSTTsKKwlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmogPSBOVUxMOworCXUzMiBpb2N0bGNvZGUgPSAwOworCXUzMiBhcmcgPSB0aW1lb3V0OworCisJZm9yIChoZGV2X29iaiA9IChzdHJ1Y3QgZGV2X29iamVjdCAqKWRydl9nZXRfZmlyc3RfZGV2X29iamVjdCgpOworCSAgICAgaGRldl9vYmogIT0gTlVMTDsKKwkgICAgIGhkZXZfb2JqID0KKwkgICAgIChzdHJ1Y3QgZGV2X29iamVjdCAqKWRydl9nZXRfbmV4dF9kZXZfb2JqZWN0KCh1MzIpIGhkZXZfb2JqKSkgeworCQlpZiAoZGV2X2dldF9icmlkZ2VfY29udGV4dChoZGV2X29iaiwKKwkJCQkJCShzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICoqKQorCQkJCQkJICAgJmR3X2NvbnRleHQpKSB7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZGV2X2dldF9pbnRmX2Z4bnMoaGRldl9vYmosCisJCQkJCQkoc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICoqKQorCQkJCQkJJmludGZfZnhucykpIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChzbGVlcF9jb2RlID09IFBXUl9ERUVQU0xFRVApCisJCQlpb2N0bGNvZGUgPSBCUkRJT0NUTF9ERUVQU0xFRVA7CisJCWVsc2UgaWYgKHNsZWVwX2NvZGUgPT0gUFdSX0VNRVJHRU5DWURFRVBTTEVFUCkKKwkJCWlvY3RsY29kZSA9IEJSRElPQ1RMX0VNRVJHRU5DWVNMRUVQOworCQllbHNlCisJCQlzdGF0dXMgPSAtRUlOVkFMOworCisJCWlmIChzdGF0dXMgIT0gLUVJTlZBTCkgeworCQkJc3RhdHVzID0gKCppbnRmX2Z4bnMtPnBmbl9kZXZfY250cmwpIChkd19jb250ZXh0LAorCQkJCQkJCSAgICAgIGlvY3RsY29kZSwKKwkJCQkJCQkgICAgICAodm9pZCAqKSZhcmcpOworCQl9CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gcHdyX3dha2VfZHNwID09PT09PT09CisgKiAgICBTZW5kIGNvbW1hbmQgdG8gRFNQIHRvIHdha2UgaXQgZnJvbSBzbGVlcC4KKyAqLworaW50IHB3cl93YWtlX2RzcChjb25zdCB1MzIgdGltZW91dCkKK3sKKwlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKKwlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkd19jb250ZXh0OworCWludCBzdGF0dXMgPSAtRVBFUk07CisJc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqID0gTlVMTDsKKwl1MzIgYXJnID0gdGltZW91dDsKKworCWZvciAoaGRldl9vYmogPSAoc3RydWN0IGRldl9vYmplY3QgKilkcnZfZ2V0X2ZpcnN0X2Rldl9vYmplY3QoKTsKKwkgICAgIGhkZXZfb2JqICE9IE5VTEw7CisJICAgICBoZGV2X29iaiA9IChzdHJ1Y3QgZGV2X29iamVjdCAqKWRydl9nZXRfbmV4dF9kZXZfb2JqZWN0CisJICAgICAoKHUzMikgaGRldl9vYmopKSB7CisJCWlmICghKGRldl9nZXRfYnJpZGdlX2NvbnRleHQoaGRldl9vYmosCisJCQkJCQkgICAgICAoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dAorCQkJCQkJICAgICAgICoqKSZkd19jb250ZXh0KSkpIHsKKwkJCWlmICghKGRldl9nZXRfaW50Zl9meG5zKGhkZXZfb2JqLAorCQkJICAgICAgKHN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqKikmaW50Zl9meG5zKSkpIHsKKwkJCQlzdGF0dXMgPQorCQkJCSAgICAoKmludGZfZnhucy0+cGZuX2Rldl9jbnRybCkgKGR3X2NvbnRleHQsCisJCQkJCQkJQlJESU9DVExfV0FLRVVQLAorCQkJCQkJCSh2b2lkICopJmFyZyk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBwd3JfcG1fcHJlX3NjYWxlPT09PT09PT0KKyAqICAgIFNlbmRzIHByZS1ub3RpZmljYXRpb24gbWVzc2FnZSB0byBEU1AuCisgKi8KK2ludCBwd3JfcG1fcHJlX3NjYWxlKHUxNiB2b2x0YWdlX2RvbWFpbiwgdTMyIGxldmVsKQoreworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmR3X2NvbnRleHQ7CisJaW50IHN0YXR1cyA9IC1FUEVSTTsKKwlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmogPSBOVUxMOworCXUzMiBhcmdbMl07CisKKwlhcmdbMF0gPSB2b2x0YWdlX2RvbWFpbjsKKwlhcmdbMV0gPSBsZXZlbDsKKworCWZvciAoaGRldl9vYmogPSAoc3RydWN0IGRldl9vYmplY3QgKilkcnZfZ2V0X2ZpcnN0X2Rldl9vYmplY3QoKTsKKwkgICAgIGhkZXZfb2JqICE9IE5VTEw7CisJICAgICBoZGV2X29iaiA9IChzdHJ1Y3QgZGV2X29iamVjdCAqKWRydl9nZXRfbmV4dF9kZXZfb2JqZWN0CisJICAgICAoKHUzMikgaGRldl9vYmopKSB7CisJCWlmICghKGRldl9nZXRfYnJpZGdlX2NvbnRleHQoaGRldl9vYmosCisJCQkJCQkgICAgICAoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dAorCQkJCQkJICAgICAgICoqKSZkd19jb250ZXh0KSkpIHsKKwkJCWlmICghKGRldl9nZXRfaW50Zl9meG5zKGhkZXZfb2JqLAorCQkJICAgICAgKHN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqKikmaW50Zl9meG5zKSkpIHsKKwkJCQlzdGF0dXMgPQorCQkJCSAgICAoKmludGZfZnhucy0+cGZuX2Rldl9jbnRybCkgKGR3X2NvbnRleHQsCisJCQkJCQlCUkRJT0NUTF9QUkVTQ0FMRV9OT1RJRlksCisJCQkJCQkodm9pZCAqKSZhcmcpOworCQkJfQorCQl9CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gcHdyX3BtX3Bvc3Rfc2NhbGU9PT09PT09PQorICogICAgU2VuZHMgcG9zdC1ub3RpZmljYXRpb24gbWVzc2FnZSB0byBEU1AuCisgKi8KK2ludCBwd3JfcG1fcG9zdF9zY2FsZSh1MTYgdm9sdGFnZV9kb21haW4sIHUzMiBsZXZlbCkKK3sKKwlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKKwlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkd19jb250ZXh0OworCWludCBzdGF0dXMgPSAtRVBFUk07CisJc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqID0gTlVMTDsKKwl1MzIgYXJnWzJdOworCisJYXJnWzBdID0gdm9sdGFnZV9kb21haW47CisJYXJnWzFdID0gbGV2ZWw7CisKKwlmb3IgKGhkZXZfb2JqID0gKHN0cnVjdCBkZXZfb2JqZWN0ICopZHJ2X2dldF9maXJzdF9kZXZfb2JqZWN0KCk7CisJICAgICBoZGV2X29iaiAhPSBOVUxMOworCSAgICAgaGRldl9vYmogPSAoc3RydWN0IGRldl9vYmplY3QgKilkcnZfZ2V0X25leHRfZGV2X29iamVjdAorCSAgICAgKCh1MzIpIGhkZXZfb2JqKSkgeworCQlpZiAoIShkZXZfZ2V0X2JyaWRnZV9jb250ZXh0KGhkZXZfb2JqLAorCQkJCQkJICAgICAgKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQKKwkJCQkJCSAgICAgICAqKikmZHdfY29udGV4dCkpKSB7CisJCQlpZiAoIShkZXZfZ2V0X2ludGZfZnhucyhoZGV2X29iaiwKKwkJCSAgICAgIChzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKiopJmludGZfZnhucykpKSB7CisJCQkJc3RhdHVzID0KKwkJCQkgICAgKCppbnRmX2Z4bnMtPnBmbl9kZXZfY250cmwpIChkd19jb250ZXh0LAorCQkJCQkJQlJESU9DVExfUE9TVFNDQUxFX05PVElGWSwKKwkJCQkJCSh2b2lkICopJmFyZyk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHN0YXR1czsKKworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3Ivcm1tLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9ybW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjFlOGY0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3Ivcm1tLmMKQEAgLTAsMCArMSw1MzcgQEAKKy8qCisgKiBybW0uYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisvKgorICogIFRoaXMgbWVtb3J5IG1hbmFnZXIgcHJvdmlkZXMgZ2VuZXJhbCBoZWFwIG1hbmFnZW1lbnQgYW5kIGFyYml0cmFyeQorICogIGFsaWdubWVudCBmb3IgYW55IG51bWJlciBvZiBtZW1vcnkgc2VnbWVudHMuCisgKgorICogIE5vdGVzOgorICoKKyAqICBNZW1vcnkgYmxvY2tzIGFyZSBhbGxvY2F0ZWQgZnJvbSB0aGUgZW5kIG9mIHRoZSBmaXJzdCBmcmVlIG1lbW9yeQorICogIGJsb2NrIGxhcmdlIGVub3VnaCB0byBzYXRpc2Z5IHRoZSByZXF1ZXN0LiAgQWxpZ25tZW50IHJlcXVpcmVtZW50cworICogIGFyZSBzYXRpc2ZpZWQgYnkgInNsaWRpbmciIHRoZSBibG9jayBmb3J3YXJkIHVudGlsIGl0cyBiYXNlIHNhdGlzZmllcworICogIHRoZSBhbGlnbm1lbnQgc3BlY2lmaWNhdGlvbjsgaWYgdGhpcyBpcyBub3QgcG9zc2libGUgdGhlbiB0aGUgbmV4dAorICogIGZyZWUgYmxvY2sgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIHJlcXVlc3QgaXMgdHJpZWQuCisgKgorICogIFNpbmNlIGFsaWdubWVudCBjYW4gY2F1c2UgdGhlIGNyZWF0aW9uIG9mIGEgbmV3IGZyZWUgYmxvY2sgLSB0aGUKKyAqICB1bnVzZWQgbWVtb3J5IGZvcm1lZCBiZXR3ZWVuIHRoZSBzdGFydCBvZiB0aGUgb3JpZ2luYWwgZnJlZSBibG9jaworICogIGFuZCB0aGUgc3RhcnQgb2YgdGhlIGFsbG9jYXRlZCBibG9jayAtIHRoZSBtZW1vcnkgbWFuYWdlciBtdXN0IGZyZWUKKyAqICB0aGlzIG1lbW9yeSB0byBwcmV2ZW50IGEgbWVtb3J5IGxlYWsuCisgKgorICogIE92ZXJsYXkgbWVtb3J5IGlzIG1hbmFnZWQgYnkgcmVzZXJ2aW5nIHRocm91Z2ggcm1tX2FsbG9jLCBhbmQgZnJlZWluZworICogIGl0IHRocm91Z2ggcm1tX2ZyZWUuIFRoZSBtZW1vcnkgbWFuYWdlciBwcmV2ZW50cyBEU1AgY29kZS9kYXRhIHRoYXQgaXMKKyAqICBvdmVybGF5ZWQgZnJvbSBiZWluZyBvdmVyd3JpdHRlbiBhcyBsb25nIGFzIHRoZSBtZW1vcnkgaXQgcnVucyBhdCBoYXMKKyAqICBiZWVuIGFsbG9jYXRlZCwgYW5kIG5vdCB5ZXQgZnJlZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEU1AvQklPUyBCcmlkZ2UgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcmFjZSAmIERlYnVnICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiYy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1MgQWRhcHRhdGlvbiBMYXllciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9saXN0Lmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlzICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL3JtbS5oPgorCisvKgorICogID09PT09PT09IHJtbV9oZWFkZXIgPT09PT09PT0KKyAqICBUaGlzIGhlYWRlciBpcyB1c2VkIHRvIG1haW50YWluIGEgbGlzdCBvZiBmcmVlIG1lbW9yeSBibG9ja3MuCisgKi8KK3N0cnVjdCBybW1faGVhZGVyIHsKKwlzdHJ1Y3Qgcm1tX2hlYWRlciAqbmV4dDsJLyogZm9ybSBhIGZyZWUgbWVtb3J5IGxpbmsgbGlzdCAqLworCXUzMiBzaXplOwkJLyogc2l6ZSBvZiB0aGUgZnJlZSBtZW1vcnkgKi8KKwl1MzIgYWRkcjsJCS8qIERTUCBhZGRyZXNzIG9mIG1lbW9yeSBibG9jayAqLworfTsKKworLyoKKyAqICA9PT09PT09PSBybW1fb3ZseV9zZWN0ID09PT09PT09CisgKiAgS2VlcHMgdHJhY2sgb2YgbWVtb3J5IG9jY3VwaWVkIGJ5IG92ZXJsYXkgc2VjdGlvbi4KKyAqLworc3RydWN0IHJtbV9vdmx5X3NlY3QgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdF9lbGVtOworCXUzMiBhZGRyOwkJLyogU3RhcnQgb2YgbWVtb3J5IHNlY3Rpb24gKi8KKwl1MzIgc2l6ZTsJCS8qIExlbmd0aCAodGFyZ2V0IE1BVXMpIG9mIHNlY3Rpb24gKi8KKwlzMzIgcGFnZTsJCS8qIE1lbW9yeSBwYWdlICovCit9OworCisvKgorICogID09PT09PT09IHJtbV90YXJnZXRfb2JqID09PT09PT09CisgKi8KK3N0cnVjdCBybW1fdGFyZ2V0X29iaiB7CisJc3RydWN0IHJtbV9zZWdtZW50ICpzZWdfdGFiOworCXN0cnVjdCBybW1faGVhZGVyICoqZnJlZV9saXN0OworCXUzMiBudW1fc2VnczsKKwlzdHJ1Y3QgbHN0X2xpc3QgKm92bHlfbGlzdDsJLyogTGlzdCBvZiBvdmVybGF5IG1lbW9yeSBpbiB1c2UgKi8KK307CisKK3N0YXRpYyB1MzIgcmVmczsJCS8qIG1vZHVsZSByZWZlcmVuY2UgY291bnQgKi8KKworc3RhdGljIGJvb2wgYWxsb2NfYmxvY2soc3RydWN0IHJtbV90YXJnZXRfb2JqICp0YXJnZXQsIHUzMiBzZWdpZCwgdTMyIHNpemUsCisJCQl1MzIgYWxpZ24sIHUzMiAqZHNwX2FkZHJlc3MpOworc3RhdGljIGJvb2wgZnJlZV9ibG9jayhzdHJ1Y3Qgcm1tX3RhcmdldF9vYmogKnRhcmdldCwgdTMyIHNlZ2lkLCB1MzIgYWRkciwKKwkJICAgICAgIHUzMiBzaXplKTsKKworLyoKKyAqICA9PT09PT09PSBybW1fYWxsb2MgPT09PT09PT0KKyAqLworaW50IHJtbV9hbGxvYyhzdHJ1Y3Qgcm1tX3RhcmdldF9vYmogKnRhcmdldCwgdTMyIHNlZ2lkLCB1MzIgc2l6ZSwKKwkJICAgICB1MzIgYWxpZ24sIHUzMiAqZHNwX2FkZHJlc3MsIGJvb2wgcmVzZXJ2ZSkKK3sKKwlzdHJ1Y3Qgcm1tX292bHlfc2VjdCAqc2VjdDsKKwlzdHJ1Y3Qgcm1tX292bHlfc2VjdCAqcHJldl9zZWN0ID0gTlVMTDsKKwlzdHJ1Y3Qgcm1tX292bHlfc2VjdCAqbmV3X3NlY3Q7CisJdTMyIGFkZHI7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkNfUkVRVUlSRSh0YXJnZXQpOworCURCQ19SRVFVSVJFKGRzcF9hZGRyZXNzICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHNpemUgPiAwKTsKKwlEQkNfUkVRVUlSRShyZXNlcnZlIHx8ICh0YXJnZXQtPm51bV9zZWdzID4gMCkpOworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKworCWlmICghcmVzZXJ2ZSkgeworCQlpZiAoIWFsbG9jX2Jsb2NrKHRhcmdldCwgc2VnaWQsIHNpemUsIGFsaWduLCBkc3BfYWRkcmVzcykpIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCX0gZWxzZSB7CisJCQkvKiBJbmNyZW1lbnQgdGhlIG51bWJlciBvZiBhbGxvY2F0ZWQgYmxvY2tzIGluIHRoaXMKKwkJCSAqIHNlZ21lbnQgKi8KKwkJCXRhcmdldC0+c2VnX3RhYltzZWdpZF0ubnVtYmVyKys7CisJCX0KKwkJZ290byBmdW5jX2VuZDsKKwl9CisJLyogQW4gb3ZlcmxheSBzZWN0aW9uIC0gU2VlIGlmIGJsb2NrIGlzIGFscmVhZHkgaW4gdXNlLiBJZiBub3QsCisJICogaW5zZXJ0IGludG8gdGhlIGxpc3QgaW4gYXNjZW5kaW5nIGFkZHJlc3Mgc2l6ZS4gKi8KKwlhZGRyID0gKmRzcF9hZGRyZXNzOworCXNlY3QgPSAoc3RydWN0IHJtbV9vdmx5X3NlY3QgKilsc3RfZmlyc3QodGFyZ2V0LT5vdmx5X2xpc3QpOworCS8qICBGaW5kIHBsYWNlIHRvIGluc2VydCBuZXcgbGlzdCBlbGVtZW50LiBMaXN0IGlzIHNvcnRlZCBmcm9tCisJICogIHNtYWxsZXN0IHRvIGxhcmdlc3QgYWRkcmVzcy4gKi8KKwl3aGlsZSAoc2VjdCAhPSBOVUxMKSB7CisJCWlmIChhZGRyIDw9IHNlY3QtPmFkZHIpIHsKKwkJCS8qIENoZWNrIGZvciBvdmVybGFwIHdpdGggc2VjdCAqLworCQkJaWYgKChhZGRyICsgc2l6ZSA+IHNlY3QtPmFkZHIpIHx8IChwcmV2X3NlY3QgJiYKKwkJCQkJCQkgICAocHJldl9zZWN0LT5hZGRyICsKKwkJCQkJCQkgICAgcHJldl9zZWN0LT5zaXplID4KKwkJCQkJCQkgICAgYWRkcikpKSB7CisJCQkJc3RhdHVzID0gLUVOWElPOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJcHJldl9zZWN0ID0gc2VjdDsKKwkJc2VjdCA9IChzdHJ1Y3Qgcm1tX292bHlfc2VjdCAqKWxzdF9uZXh0KHRhcmdldC0+b3ZseV9saXN0LAorCQkJCQkJCShzdHJ1Y3QgbGlzdF9oZWFkICopCisJCQkJCQkJc2VjdCk7CisJfQorCWlmICghc3RhdHVzKSB7CisJCS8qIE5vIG92ZXJsYXAgLSBhbGxvY2F0ZSBsaXN0IGVsZW1lbnQgZm9yIG5ldyBzZWN0aW9uLiAqLworCQluZXdfc2VjdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBybW1fb3ZseV9zZWN0KSwgR0ZQX0tFUk5FTCk7CisJCWlmIChuZXdfc2VjdCA9PSBOVUxMKSB7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQl9IGVsc2UgeworCQkJbHN0X2luaXRfZWxlbSgoc3RydWN0IGxpc3RfaGVhZCAqKW5ld19zZWN0KTsKKwkJCW5ld19zZWN0LT5hZGRyID0gYWRkcjsKKwkJCW5ld19zZWN0LT5zaXplID0gc2l6ZTsKKwkJCW5ld19zZWN0LT5wYWdlID0gc2VnaWQ7CisJCQlpZiAoc2VjdCA9PSBOVUxMKSB7CisJCQkJLyogUHV0IG5ldyBzZWN0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QgKi8KKwkJCQlsc3RfcHV0X3RhaWwodGFyZ2V0LT5vdmx5X2xpc3QsCisJCQkJCSAgICAgKHN0cnVjdCBsaXN0X2hlYWQgKiluZXdfc2VjdCk7CisJCQl9IGVsc2UgeworCQkJCS8qIFB1dCBuZXcgc2VjdGlvbiBqdXN0IGJlZm9yZSBzZWN0ICovCisJCQkJbHN0X2luc2VydF9iZWZvcmUodGFyZ2V0LT5vdmx5X2xpc3QsCisJCQkJCQkgIChzdHJ1Y3QgbGlzdF9oZWFkICopbmV3X3NlY3QsCisJCQkJCQkgIChzdHJ1Y3QgbGlzdF9oZWFkICopc2VjdCk7CisJCQl9CisJCX0KKwl9CitmdW5jX2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHJtbV9jcmVhdGUgPT09PT09PT0KKyAqLworaW50IHJtbV9jcmVhdGUoc3RydWN0IHJtbV90YXJnZXRfb2JqICoqdGFyZ2V0X29iaiwKKwkJICAgICAgc3RydWN0IHJtbV9zZWdtZW50IHNlZ190YWJbXSwgdTMyIG51bV9zZWdzKQoreworCXN0cnVjdCBybW1faGVhZGVyICpocHRyOworCXN0cnVjdCBybW1fc2VnbWVudCAqc3B0ciwgKnRtcDsKKwlzdHJ1Y3Qgcm1tX3RhcmdldF9vYmogKnRhcmdldDsKKwlzMzIgaTsKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHRhcmdldF9vYmogIT0gTlVMTCk7CisJREJDX1JFUVVJUkUobnVtX3NlZ3MgPT0gMCB8fCBzZWdfdGFiICE9IE5VTEwpOworCisJLyogQWxsb2NhdGUgREJMIHRhcmdldCBvYmplY3QgKi8KKwl0YXJnZXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgcm1tX3RhcmdldF9vYmopLCBHRlBfS0VSTkVMKTsKKworCWlmICh0YXJnZXQgPT0gTlVMTCkKKwkJc3RhdHVzID0gLUVOT01FTTsKKworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19jb250OworCisJdGFyZ2V0LT5udW1fc2VncyA9IG51bV9zZWdzOworCWlmICghKG51bV9zZWdzID4gMCkpCisJCWdvdG8gZnVuY19jb250OworCisJLyogQWxsb2NhdGUgdGhlIG1lbW9yeSBmb3IgZnJlZWxpc3QgZnJvbSBob3N0J3MgbWVtb3J5ICovCisJdGFyZ2V0LT5mcmVlX2xpc3QgPSBremFsbG9jKG51bV9zZWdzICogc2l6ZW9mKHN0cnVjdCBybW1faGVhZGVyICopLAorCQkJCQkJCUdGUF9LRVJORUwpOworCWlmICh0YXJnZXQtPmZyZWVfbGlzdCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJfSBlbHNlIHsKKwkJLyogQWxsb2NhdGUgaGVhZGVycyBmb3IgZWFjaCBlbGVtZW50IG9uIHRoZSBmcmVlIGxpc3QgKi8KKwkJZm9yIChpID0gMDsgaSA8IChzMzIpIG51bV9zZWdzOyBpKyspIHsKKwkJCXRhcmdldC0+ZnJlZV9saXN0W2ldID0KKwkJCQlremFsbG9jKHNpemVvZihzdHJ1Y3Qgcm1tX2hlYWRlciksIEdGUF9LRVJORUwpOworCQkJaWYgKHRhcmdldC0+ZnJlZV9saXN0W2ldID09IE5VTEwpIHsKKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgaW5pdGlhbCBzZWdtZW50IHRhYmxlICovCisJCXRhcmdldC0+c2VnX3RhYiA9IGt6YWxsb2MobnVtX3NlZ3MgKiBzaXplb2Yoc3RydWN0IHJtbV9zZWdtZW50KSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICh0YXJnZXQtPnNlZ190YWIgPT0gTlVMTCkgeworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJfSBlbHNlIHsKKwkJCS8qIEluaXRpYWxpemUgc2VnbWVudCB0YWJsZSBhbmQgZnJlZSBsaXN0ICovCisJCQlzcHRyID0gdGFyZ2V0LT5zZWdfdGFiOworCQkJZm9yIChpID0gMCwgdG1wID0gc2VnX3RhYjsgbnVtX3NlZ3MgPiAwOworCQkJICAgICBudW1fc2Vncy0tLCBpKyspIHsKKwkJCQkqc3B0ciA9ICp0bXA7CisJCQkJaHB0ciA9IHRhcmdldC0+ZnJlZV9saXN0W2ldOworCQkJCWhwdHItPmFkZHIgPSB0bXAtPmJhc2U7CisJCQkJaHB0ci0+c2l6ZSA9IHRtcC0+bGVuZ3RoOworCQkJCWhwdHItPm5leHQgPSBOVUxMOworCQkJCXRtcCsrOworCQkJCXNwdHIrKzsKKwkJCX0KKwkJfQorCX0KK2Z1bmNfY29udDoKKwkvKiBJbml0aWFsaXplIG92ZXJsYXkgbWVtb3J5IGxpc3QgKi8KKwlpZiAoIXN0YXR1cykgeworCQl0YXJnZXQtPm92bHlfbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsc3RfbGlzdCksCisJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICh0YXJnZXQtPm92bHlfbGlzdCA9PSBOVUxMKQorCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJZWxzZQorCQkJSU5JVF9MSVNUX0hFQUQoJnRhcmdldC0+b3ZseV9saXN0LT5oZWFkKTsKKwl9CisKKwlpZiAoIXN0YXR1cykgeworCQkqdGFyZ2V0X29iaiA9IHRhcmdldDsKKwl9IGVsc2UgeworCQkqdGFyZ2V0X29iaiA9IE5VTEw7CisJCWlmICh0YXJnZXQpCisJCQlybW1fZGVsZXRlKHRhcmdldCk7CisKKwl9CisKKwlEQkNfRU5TVVJFKCghc3RhdHVzICYmICp0YXJnZXRfb2JqKQorCQkgICB8fCAoc3RhdHVzICYmICp0YXJnZXRfb2JqID09IE5VTEwpKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gcm1tX2RlbGV0ZSA9PT09PT09PQorICovCit2b2lkIHJtbV9kZWxldGUoc3RydWN0IHJtbV90YXJnZXRfb2JqICp0YXJnZXQpCit7CisJc3RydWN0IHJtbV9vdmx5X3NlY3QgKm92bHlfc2VjdGlvbjsKKwlzdHJ1Y3Qgcm1tX2hlYWRlciAqaHB0cjsKKwlzdHJ1Y3Qgcm1tX2hlYWRlciAqbmV4dDsKKwl1MzIgaTsKKworCURCQ19SRVFVSVJFKHRhcmdldCk7CisKKwlrZnJlZSh0YXJnZXQtPnNlZ190YWIpOworCisJaWYgKHRhcmdldC0+b3ZseV9saXN0KSB7CisJCXdoaWxlICgob3ZseV9zZWN0aW9uID0gKHN0cnVjdCBybW1fb3ZseV9zZWN0ICopbHN0X2dldF9oZWFkCisJCQkodGFyZ2V0LT5vdmx5X2xpc3QpKSkgeworCQkJa2ZyZWUob3ZseV9zZWN0aW9uKTsKKwkJfQorCQlEQkNfQVNTRVJUKExTVF9JU19FTVBUWSh0YXJnZXQtPm92bHlfbGlzdCkpOworCQlrZnJlZSh0YXJnZXQtPm92bHlfbGlzdCk7CisJfQorCisJaWYgKHRhcmdldC0+ZnJlZV9saXN0ICE9IE5VTEwpIHsKKwkJLyogRnJlZSBlbGVtZW50cyBvbiBmcmVlbGlzdCAqLworCQlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0LT5udW1fc2VnczsgaSsrKSB7CisJCQlocHRyID0gbmV4dCA9IHRhcmdldC0+ZnJlZV9saXN0W2ldOworCQkJd2hpbGUgKG5leHQpIHsKKwkJCQlocHRyID0gbmV4dDsKKwkJCQluZXh0ID0gaHB0ci0+bmV4dDsKKwkJCQlrZnJlZShocHRyKTsKKwkJCX0KKwkJfQorCQlrZnJlZSh0YXJnZXQtPmZyZWVfbGlzdCk7CisJfQorCisJa2ZyZWUodGFyZ2V0KTsKK30KKworLyoKKyAqICA9PT09PT09PSBybW1fZXhpdCA9PT09PT09PQorICovCit2b2lkIHJtbV9leGl0KHZvaWQpCit7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJcmVmcy0tOworCisJREJDX0VOU1VSRShyZWZzID49IDApOworfQorCisvKgorICogID09PT09PT09IHJtbV9mcmVlID09PT09PT09CisgKi8KK2Jvb2wgcm1tX2ZyZWUoc3RydWN0IHJtbV90YXJnZXRfb2JqICp0YXJnZXQsIHUzMiBzZWdpZCwgdTMyIGRzcF9hZGRyLCB1MzIgc2l6ZSwKKwkgICAgICBib29sIHJlc2VydmVkKQoreworCXN0cnVjdCBybW1fb3ZseV9zZWN0ICpzZWN0OworCWJvb2wgcmV0ID0gdHJ1ZTsKKworCURCQ19SRVFVSVJFKHRhcmdldCk7CisKKwlEQkNfUkVRVUlSRShyZXNlcnZlZCB8fCBzZWdpZCA8IHRhcmdldC0+bnVtX3NlZ3MpOworCURCQ19SRVFVSVJFKHJlc2VydmVkIHx8IChkc3BfYWRkciA+PSB0YXJnZXQtPnNlZ190YWJbc2VnaWRdLmJhc2UgJiYKKwkJCQkgKGRzcF9hZGRyICsgc2l6ZSkgPD0gKHRhcmdldC0+c2VnX3RhYltzZWdpZF0uCisJCQkJCQkgICBiYXNlICsKKwkJCQkJCSAgIHRhcmdldC0+c2VnX3RhYltzZWdpZF0uCisJCQkJCQkgICBsZW5ndGgpKSk7CisKKwkvKgorCSAqICBGcmVlIG9yIHVucmVzZXJ2ZSBtZW1vcnkuCisJICovCisJaWYgKCFyZXNlcnZlZCkgeworCQlyZXQgPSBmcmVlX2Jsb2NrKHRhcmdldCwgc2VnaWQsIGRzcF9hZGRyLCBzaXplKTsKKwkJaWYgKHJldCkKKwkJCXRhcmdldC0+c2VnX3RhYltzZWdpZF0ubnVtYmVyLS07CisKKwl9IGVsc2UgeworCQkvKiBVbnJlc2VydmUgbWVtb3J5ICovCisJCXNlY3QgPSAoc3RydWN0IHJtbV9vdmx5X3NlY3QgKilsc3RfZmlyc3QodGFyZ2V0LT5vdmx5X2xpc3QpOworCQl3aGlsZSAoc2VjdCAhPSBOVUxMKSB7CisJCQlpZiAoZHNwX2FkZHIgPT0gc2VjdC0+YWRkcikgeworCQkJCURCQ19BU1NFUlQoc2l6ZSA9PSBzZWN0LT5zaXplKTsKKwkJCQkvKiBSZW1vdmUgZnJvbSBsaXN0ICovCisJCQkJbHN0X3JlbW92ZV9lbGVtKHRhcmdldC0+b3ZseV9saXN0LAorCQkJCQkJKHN0cnVjdCBsaXN0X2hlYWQgKilzZWN0KTsKKwkJCQlrZnJlZShzZWN0KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXNlY3QgPQorCQkJICAgIChzdHJ1Y3Qgcm1tX292bHlfc2VjdCAqKWxzdF9uZXh0KHRhcmdldC0+b3ZseV9saXN0LAorCQkJCQkJCSAgICAgKHN0cnVjdCBsaXN0X2hlYWQKKwkJCQkJCQkgICAgICAqKXNlY3QpOworCQl9CisJCWlmIChzZWN0ID09IE5VTEwpCisJCQlyZXQgPSBmYWxzZTsKKworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKgorICogID09PT09PT09IHJtbV9pbml0ID09PT09PT09CisgKi8KK2Jvb2wgcm1tX2luaXQodm9pZCkKK3sKKwlEQkNfUkVRVUlSRShyZWZzID49IDApOworCisJcmVmcysrOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiAgPT09PT09PT0gcm1tX3N0YXQgPT09PT09PT0KKyAqLworYm9vbCBybW1fc3RhdChzdHJ1Y3Qgcm1tX3RhcmdldF9vYmogKnRhcmdldCwgZW51bSBkc3BfbWVtdHlwZSBzZWdpZCwKKwkgICAgICBzdHJ1Y3QgZHNwX21lbXN0YXQgKm1lbV9zdGF0X2J1ZikKK3sKKwlzdHJ1Y3Qgcm1tX2hlYWRlciAqaGVhZDsKKwlib29sIHJldCA9IGZhbHNlOworCXUzMiBtYXhfZnJlZV9zaXplID0gMDsKKwl1MzIgdG90YWxfZnJlZV9zaXplID0gMDsKKwl1MzIgZnJlZV9ibG9ja3MgPSAwOworCisJREJDX1JFUVVJUkUobWVtX3N0YXRfYnVmICE9IE5VTEwpOworCURCQ19BU1NFUlQodGFyZ2V0ICE9IE5VTEwpOworCisJaWYgKCh1MzIpIHNlZ2lkIDwgdGFyZ2V0LT5udW1fc2VncykgeworCQloZWFkID0gdGFyZ2V0LT5mcmVlX2xpc3Rbc2VnaWRdOworCisJCS8qIENvbGxlY3QgZGF0YSBmcm9tIGZyZWVfbGlzdCAqLworCQl3aGlsZSAoaGVhZCAhPSBOVUxMKSB7CisJCQltYXhfZnJlZV9zaXplID0gbWF4KG1heF9mcmVlX3NpemUsIGhlYWQtPnNpemUpOworCQkJdG90YWxfZnJlZV9zaXplICs9IGhlYWQtPnNpemU7CisJCQlmcmVlX2Jsb2NrcysrOworCQkJaGVhZCA9IGhlYWQtPm5leHQ7CisJCX0KKworCQkvKiB1bF9zaXplICovCisJCW1lbV9zdGF0X2J1Zi0+dWxfc2l6ZSA9IHRhcmdldC0+c2VnX3RhYltzZWdpZF0ubGVuZ3RoOworCisJCS8qIHVsX251bV9mcmVlX2Jsb2NrcyAqLworCQltZW1fc3RhdF9idWYtPnVsX251bV9mcmVlX2Jsb2NrcyA9IGZyZWVfYmxvY2tzOworCisJCS8qIHVsX3RvdGFsX2ZyZWVfc2l6ZSAqLworCQltZW1fc3RhdF9idWYtPnVsX3RvdGFsX2ZyZWVfc2l6ZSA9IHRvdGFsX2ZyZWVfc2l6ZTsKKworCQkvKiB1bF9sZW5fbWF4X2ZyZWVfYmxvY2sgKi8KKwkJbWVtX3N0YXRfYnVmLT51bF9sZW5fbWF4X2ZyZWVfYmxvY2sgPSBtYXhfZnJlZV9zaXplOworCisJCS8qIHVsX251bV9hbGxvY19ibG9ja3MgKi8KKwkJbWVtX3N0YXRfYnVmLT51bF9udW1fYWxsb2NfYmxvY2tzID0KKwkJICAgIHRhcmdldC0+c2VnX3RhYltzZWdpZF0ubnVtYmVyOworCisJCXJldCA9IHRydWU7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqICA9PT09PT09PSBiYWxsb2MgPT09PT09PT0KKyAqICBUaGlzIGFsbG9jYXRpb24gZnVuY3Rpb24gYWxsb2NhdGVzIG1lbW9yeSBmcm9tIHRoZSBsb3dlc3QgYWRkcmVzc2VzCisgKiAgZmlyc3QuCisgKi8KK3N0YXRpYyBib29sIGFsbG9jX2Jsb2NrKHN0cnVjdCBybW1fdGFyZ2V0X29iaiAqdGFyZ2V0LCB1MzIgc2VnaWQsIHUzMiBzaXplLAorCQkJdTMyIGFsaWduLCB1MzIgKmRzcF9hZGRyZXNzKQoreworCXN0cnVjdCBybW1faGVhZGVyICpoZWFkOworCXN0cnVjdCBybW1faGVhZGVyICpwcmV2aGVhZCA9IE5VTEw7CisJc3RydWN0IHJtbV9oZWFkZXIgKm5leHQ7CisJdTMyIHRtcGFsaWduOworCXUzMiBhbGlnbmJ5dGVzOworCXUzMiBoc2l6ZTsKKwl1MzIgYWxsb2NzaXplOworCXUzMiBhZGRyOworCisJYWxpZ25ieXRlcyA9IChhbGlnbiA9PSAwKSA/IDEgOiBhbGlnbjsKKwlwcmV2aGVhZCA9IE5VTEw7CisJaGVhZCA9IHRhcmdldC0+ZnJlZV9saXN0W3NlZ2lkXTsKKworCWRvIHsKKwkJaHNpemUgPSBoZWFkLT5zaXplOworCQluZXh0ID0gaGVhZC0+bmV4dDsKKworCQlhZGRyID0gaGVhZC0+YWRkcjsJLyogYWxsb2MgZnJvbSB0aGUgYm90dG9tICovCisKKwkJLyogYWxpZ24gYWxsb2NhdGlvbiAqLworCQkodG1wYWxpZ24gPSAodTMyKSBhZGRyICUgYWxpZ25ieXRlcyk7CisJCWlmICh0bXBhbGlnbiAhPSAwKQorCQkJdG1wYWxpZ24gPSBhbGlnbmJ5dGVzIC0gdG1wYWxpZ247CisKKwkJYWxsb2NzaXplID0gc2l6ZSArIHRtcGFsaWduOworCisJCWlmIChoc2l6ZSA+PSBhbGxvY3NpemUpIHsJLyogYmlnIGVub3VnaCAqLworCQkJaWYgKGhzaXplID09IGFsbG9jc2l6ZSAmJiBwcmV2aGVhZCAhPSBOVUxMKSB7CisJCQkJcHJldmhlYWQtPm5leHQgPSBuZXh0OworCQkJCWtmcmVlKGhlYWQpOworCQkJfSBlbHNlIHsKKwkJCQloZWFkLT5zaXplID0gaHNpemUgLSBhbGxvY3NpemU7CisJCQkJaGVhZC0+YWRkciArPSBhbGxvY3NpemU7CisJCQl9CisKKwkJCS8qIGZyZWUgdXAgYW55IGhvbGUgY3JlYXRlZCBieSBhbGlnbm1lbnQgKi8KKwkJCWlmICh0bXBhbGlnbikKKwkJCQlmcmVlX2Jsb2NrKHRhcmdldCwgc2VnaWQsIGFkZHIsIHRtcGFsaWduKTsKKworCQkJKmRzcF9hZGRyZXNzID0gYWRkciArIHRtcGFsaWduOworCQkJcmV0dXJuIHRydWU7CisJCX0KKworCQlwcmV2aGVhZCA9IGhlYWQ7CisJCWhlYWQgPSBuZXh0OworCisJfSB3aGlsZSAoaGVhZCAhPSBOVUxMKTsKKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqICA9PT09PT09PSBmcmVlX2Jsb2NrID09PT09PT09CisgKiAgVE8gRE86IGZyZWVfYmxvY2soKSBhbGxvY2F0ZXMgbWVtb3J5LCB3aGljaCBjb3VsZCByZXN1bHQgaW4gZmFpbHVyZS4KKyAqICBDb3VsZCBhbGxvY2F0ZSBhbiBybW1faGVhZGVyIGluIHJtbV9hbGxvYygpLCB0byBiZSBrZXB0IGluIGEgcG9vbC4KKyAqICBmcmVlX2Jsb2NrKCkgY291bGQgdXNlIGFuIHJtbV9oZWFkZXIgZnJvbSB0aGUgcG9vbCwgZnJlZWluZyBhcyBibG9ja3MKKyAqICBhcmUgY29hbGVzY2VkLgorICovCitzdGF0aWMgYm9vbCBmcmVlX2Jsb2NrKHN0cnVjdCBybW1fdGFyZ2V0X29iaiAqdGFyZ2V0LCB1MzIgc2VnaWQsIHUzMiBhZGRyLAorCQkgICAgICAgdTMyIHNpemUpCit7CisJc3RydWN0IHJtbV9oZWFkZXIgKmhlYWQ7CisJc3RydWN0IHJtbV9oZWFkZXIgKnRoZWFkOworCXN0cnVjdCBybW1faGVhZGVyICpyaGVhZDsKKwlib29sIHJldCA9IHRydWU7CisKKwkvKiBDcmVhdGUgYSBtZW1vcnkgaGVhZGVyIHRvIGhvbGQgdGhlIG5ld2x5IGZyZWUnZCBibG9jay4gKi8KKwlyaGVhZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBybW1faGVhZGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJoZWFkID09IE5VTEwpIHsKKwkJcmV0ID0gZmFsc2U7CisJfSBlbHNlIHsKKwkJLyogc2VhcmNoIGRvd24gdGhlIGZyZWUgbGlzdCB0byBmaW5kIHRoZSByaWdodCBwbGFjZSBmb3IgYWRkciAqLworCQloZWFkID0gdGFyZ2V0LT5mcmVlX2xpc3Rbc2VnaWRdOworCisJCWlmIChhZGRyID49IGhlYWQtPmFkZHIpIHsKKwkJCXdoaWxlIChoZWFkLT5uZXh0ICE9IE5VTEwgJiYgYWRkciA+IGhlYWQtPm5leHQtPmFkZHIpCisJCQkJaGVhZCA9IGhlYWQtPm5leHQ7CisKKwkJCXRoZWFkID0gaGVhZC0+bmV4dDsKKworCQkJaGVhZC0+bmV4dCA9IHJoZWFkOworCQkJcmhlYWQtPm5leHQgPSB0aGVhZDsKKwkJCXJoZWFkLT5hZGRyID0gYWRkcjsKKwkJCXJoZWFkLT5zaXplID0gc2l6ZTsKKwkJfSBlbHNlIHsKKwkJCSpyaGVhZCA9ICpoZWFkOworCQkJaGVhZC0+bmV4dCA9IHJoZWFkOworCQkJaGVhZC0+YWRkciA9IGFkZHI7CisJCQloZWFkLT5zaXplID0gc2l6ZTsKKwkJCXRoZWFkID0gcmhlYWQtPm5leHQ7CisJCX0KKworCQkvKiBqb2luIHdpdGggdXBwZXIgYmxvY2ssIGlmIHBvc3NpYmxlICovCisJCWlmICh0aGVhZCAhPSBOVUxMICYmIChyaGVhZC0+YWRkciArIHJoZWFkLT5zaXplKSA9PQorCQkgICAgdGhlYWQtPmFkZHIpIHsKKwkJCWhlYWQtPm5leHQgPSByaGVhZC0+bmV4dDsKKwkJCXRoZWFkLT5zaXplID0gc2l6ZSArIHRoZWFkLT5zaXplOworCQkJdGhlYWQtPmFkZHIgPSBhZGRyOworCQkJa2ZyZWUocmhlYWQpOworCQkJcmhlYWQgPSB0aGVhZDsKKwkJfQorCisJCS8qIGpvaW4gd2l0aCB0aGUgbG93ZXIgYmxvY2ssIGlmIHBvc3NpYmxlICovCisJCWlmICgoaGVhZC0+YWRkciArIGhlYWQtPnNpemUpID09IHJoZWFkLT5hZGRyKSB7CisJCQloZWFkLT5uZXh0ID0gcmhlYWQtPm5leHQ7CisJCQloZWFkLT5zaXplID0gaGVhZC0+c2l6ZSArIHJoZWFkLT5zaXplOworCQkJa2ZyZWUocmhlYWQpOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL3N0cm0uYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL3N0cm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjJlYzk0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3Ivc3RybS5jCkBAIC0wLDAgKzEsODUzIEBACisvKgorICogc3RybS5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIERTUC9CSU9TIEJyaWRnZSBTdHJlYW0gTWFuYWdlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhvc3QgT1MgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRFNQL0JJT1MgQnJpZGdlICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHJhY2UgJiBEZWJ1ZyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9TIEFkYXB0YXRpb24gTGF5ZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvc3luYy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQnJpZGdlIERyaXZlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BkZWZzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZXNvdXJjZSBNYW5hZ2VyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL25vZGVwcml2Lmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPdGhlcnMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY21tLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlzICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL3N0cm0uaD4KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9jZmcuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvcmVzb3VyY2VjbGVhbnVwLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWZpbmVzLCBEYXRhIFN0cnVjdHVyZXMsIFR5cGVkZWZzICovCisjZGVmaW5lIERFRkFVTFRUSU1FT1VUICAgICAgMTAwMDAKKyNkZWZpbmUgREVGQVVMVE5VTUJVRlMgICAgICAyCisKKy8qCisgKiAgPT09PT09PT0gc3RybV9tZ3IgPT09PT09PT0KKyAqICBUaGUgc3RybV9tZ3IgY29udGFpbnMgZGV2aWNlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBvcGVuIHRoZSB1bmRlcmx5aW5nCisgKiAgY2hhbm5lbHMgb2YgYSBzdHJlYW0uCisgKi8KK3N0cnVjdCBzdHJtX21nciB7CisJc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmo7CS8qIERldmljZSBmb3IgdGhpcyBwcm9jZXNzb3IgKi8KKwlzdHJ1Y3QgY2hubF9tZ3IgKmhjaG5sX21ncjsJLyogQ2hhbm5lbCBtYW5hZ2VyICovCisJLyogRnVuY3Rpb24gaW50ZXJmYWNlIHRvIEJyaWRnZSBkcml2ZXIgKi8KKwlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKK307CisKKy8qCisgKiAgPT09PT09PT0gc3RybV9vYmplY3QgPT09PT09PT0KKyAqICBUaGlzIG9iamVjdCBpcyBhbGxvY2F0ZWQgaW4gc3RybV9vcGVuKCkuCisgKi8KK3N0cnVjdCBzdHJtX29iamVjdCB7CisJc3RydWN0IHN0cm1fbWdyICpzdHJtX21ncl9vYmo7CisJc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iajsKKwl1MzIgZGlyOwkJLyogRFNQX1RPTk9ERSBvciBEU1BfRlJPTU5PREUgKi8KKwl1MzIgdXRpbWVvdXQ7CisJdTMyIG51bV9idWZzOwkJLyogTWF4ICMgb2YgYnVmcyBhbGxvd2VkIGluIHN0cmVhbSAqLworCXUzMiB1bl9idWZzX2luX3N0cm07CS8qIEN1cnJlbnQgIyBvZiBidWZzIGluIHN0cmVhbSAqLworCXUzMiB1bF9uX2J5dGVzOwkJLyogYnl0ZXMgdHJhbnNmZXJyZWQgc2luY2UgaWRsZWQgKi8KKwkvKiBTVFJFQU1fSURMRSwgU1RSRUFNX1JFQURZLCAuLi4gKi8KKwllbnVtIGRzcF9zdHJlYW1zdGF0ZSBzdHJtX3N0YXRlOworCXZvaWQgKnVzZXJfZXZlbnQ7CS8qIFNhdmVkIGZvciBzdHJtX2dldF9pbmZvKCkgKi8KKwllbnVtIGRzcF9zdHJtbW9kZSBzdHJtX21vZGU7CS8qIFNUUk1NT0RFX1tQUk9DQ09QWV1bWkVST0NPUFldLi4uICovCisJdTMyIHVkbWFfY2hubF9pZDsJLyogRE1BIGNobmwgaWQgKi8KKwl1MzIgdWRtYV9wcmlvcml0eTsJLyogRE1BIHByaW9yaXR5OkRNQVBSSV9bTE9XXVtISUdIXSAqLworCXUzMiBzZWdtZW50X2lkOwkJLyogPjAgaXMgU00gc2VnbWVudC49MCBpcyBsb2NhbCBoZWFwICovCisJdTMyIGJ1Zl9hbGlnbm1lbnQ7CS8qIEFsaWdubWVudCBmb3Igc3RyZWFtIGJ1ZnMgKi8KKwkvKiBTdHJlYW0ncyBTTSBhZGRyZXNzIHRyYW5zbGF0b3IgKi8KKwlzdHJ1Y3QgY21tX3hsYXRvcm9iamVjdCAqeGxhdG9yOworfTsKKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdsb2JhbHMgKi8KK3N0YXRpYyB1MzIgcmVmczsJCS8qIG1vZHVsZSByZWZlcmVuY2UgY291bnQgKi8KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uIFByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgZGVsZXRlX3N0cm0oc3RydWN0IHN0cm1fb2JqZWN0ICpzdHJlYW1fb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBzdHJtX2FsbG9jYXRlX2J1ZmZlciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEFsbG9jYXRlcyBidWZmZXJzIGZvciBhIHN0cmVhbS4KKyAqLworaW50IHN0cm1fYWxsb2NhdGVfYnVmZmVyKHN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKnN0cm1yZXMsIHUzMiB1c2l6ZSwKKwkJCQl1OCAqKmFwX2J1ZmZlciwgdTMyIG51bV9idWZzLAorCQkJCXN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJdTMyIGFsbG9jX2NudCA9IDA7CisJdTMyIGk7CisJc3RydWN0IHN0cm1fb2JqZWN0ICpzdHJlYW1fb2JqID0gc3RybXJlcy0+aHN0cmVhbTsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShhcF9idWZmZXIgIT0gTlVMTCk7CisKKwlpZiAoc3RyZWFtX29iaikgeworCQkvKgorCQkgKiBBbGxvY2F0ZSBmcm9tIHNlZ21lbnQgc3BlY2lmaWVkIGF0IHRpbWUgb2Ygc3RyZWFtIG9wZW4uCisJCSAqLworCQlpZiAodXNpemUgPT0gMCkKKwkJCXN0YXR1cyA9IC1FSU5WQUw7CisKKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCX0KKworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2J1ZnM7IGkrKykgeworCQlEQkNfQVNTRVJUKHN0cmVhbV9vYmotPnhsYXRvciAhPSBOVUxMKTsKKwkJKHZvaWQpY21tX3hsYXRvcl9hbGxvY19idWYoc3RyZWFtX29iai0+eGxhdG9yLCAmYXBfYnVmZmVyW2ldLAorCQkJCQkgICB1c2l6ZSk7CisJCWlmIChhcF9idWZmZXJbaV0gPT0gTlVMTCkgeworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCWFsbG9jX2NudCA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoc3RhdHVzKQorCQlzdHJtX2ZyZWVfYnVmZmVyKHN0cm1yZXMsIGFwX2J1ZmZlciwgYWxsb2NfY250LCBwcl9jdHh0KTsKKworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisKKwlkcnZfcHJvY191cGRhdGVfc3RybV9yZXMobnVtX2J1ZnMsIHN0cm1yZXMpOworCitmdW5jX2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHN0cm1fY2xvc2UgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDbG9zZSBhIHN0cmVhbSBvcGVuZWQgd2l0aCBzdHJtX29wZW4oKS4KKyAqLworaW50IHN0cm1fY2xvc2Uoc3RydWN0IHN0cm1fcmVzX29iamVjdCAqc3RybXJlcywKKwkJICAgICAgc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCkKK3sKKwlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKKwlzdHJ1Y3QgY2hubF9pbmZvIGNobmxfaW5mb19vYmo7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IHN0cm1fb2JqZWN0ICpzdHJlYW1fb2JqID0gc3RybXJlcy0+aHN0cmVhbTsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKworCWlmICghc3RyZWFtX29iaikgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCX0gZWxzZSB7CisJCS8qIEhhdmUgYWxsIGJ1ZmZlcnMgYmVlbiByZWNsYWltZWQ/IElmIG5vdCwgcmV0dXJuCisJCSAqIC1FUElQRSAqLworCQlpbnRmX2Z4bnMgPSBzdHJlYW1fb2JqLT5zdHJtX21ncl9vYmotPmludGZfZnhuczsKKwkJc3RhdHVzID0KKwkJICAgICgqaW50Zl9meG5zLT5wZm5fY2hubF9nZXRfaW5mbykgKHN0cmVhbV9vYmotPmNobmxfb2JqLAorCQkJCQkJICAgICAmY2hubF9pbmZvX29iaik7CisJCURCQ19BU1NFUlQoIXN0YXR1cyk7CisKKwkJaWYgKGNobmxfaW5mb19vYmouY2lvX2NzID4gMCB8fCBjaG5sX2luZm9fb2JqLmNpb19yZXFzID4gMCkKKwkJCXN0YXR1cyA9IC1FUElQRTsKKwkJZWxzZQorCQkJc3RhdHVzID0gZGVsZXRlX3N0cm0oc3RyZWFtX29iaik7CisJfQorCisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2VuZDsKKworCWlkcl9yZW1vdmUocHJfY3R4dC0+c3RyZWFtX2lkLCBzdHJtcmVzLT5pZCk7CitmdW5jX2VuZDoKKwlEQkNfRU5TVVJFKHN0YXR1cyA9PSAwIHx8IHN0YXR1cyA9PSAtRUZBVUxUIHx8CisJCSAgIHN0YXR1cyA9PSAtRVBJUEUgfHwgc3RhdHVzID09IC1FUEVSTSk7CisKKwlkZXZfZGJnKGJyaWRnZSwgIiVzOiBzdHJlYW1fb2JqOiAlcCwgc3RhdHVzIDB4JXhcbiIsIF9fZnVuY19fLAorCQlzdHJlYW1fb2JqLCBzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gc3RybV9jcmVhdGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDcmVhdGUgYSBTVFJNIG1hbmFnZXIgb2JqZWN0LgorICovCitpbnQgc3RybV9jcmVhdGUoc3RydWN0IHN0cm1fbWdyICoqc3RybV9tYW4sCisJCSAgICAgICBzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaikKK3sKKwlzdHJ1Y3Qgc3RybV9tZ3IgKnN0cm1fbWdyX29iajsKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShzdHJtX21hbiAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShkZXZfb2JqICE9IE5VTEwpOworCisJKnN0cm1fbWFuID0gTlVMTDsKKwkvKiBBbGxvY2F0ZSBTVFJNIG1hbmFnZXIgb2JqZWN0ICovCisJc3RybV9tZ3Jfb2JqID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN0cm1fbWdyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0cm1fbWdyX29iaiA9PSBOVUxMKQorCQlzdGF0dXMgPSAtRU5PTUVNOworCWVsc2UKKwkJc3RybV9tZ3Jfb2JqLT5kZXZfb2JqID0gZGV2X29iajsKKworCS8qIEdldCBDaGFubmVsIG1hbmFnZXIgYW5kIEJyaWRnZSBmdW5jdGlvbiBpbnRlcmZhY2UgKi8KKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPSBkZXZfZ2V0X2NobmxfbWdyKGRldl9vYmosICYoc3RybV9tZ3Jfb2JqLT5oY2hubF9tZ3IpKTsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCSh2b2lkKWRldl9nZXRfaW50Zl9meG5zKGRldl9vYmosCisJCQkJCQkmKHN0cm1fbWdyX29iai0+aW50Zl9meG5zKSk7CisJCQlEQkNfQVNTRVJUKHN0cm1fbWdyX29iai0+aW50Zl9meG5zICE9IE5VTEwpOworCQl9CisJfQorCisJaWYgKCFzdGF0dXMpCisJCSpzdHJtX21hbiA9IHN0cm1fbWdyX29iajsKKwllbHNlCisJCWtmcmVlKHN0cm1fbWdyX29iaik7CisKKwlEQkNfRU5TVVJFKCghc3RhdHVzICYmICpzdHJtX21hbikgfHwgKHN0YXR1cyAmJiAqc3RybV9tYW4gPT0gTlVMTCkpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBzdHJtX2RlbGV0ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERlbGV0ZSB0aGUgU1RSTSBNYW5hZ2VyIE9iamVjdC4KKyAqLwordm9pZCBzdHJtX2RlbGV0ZShzdHJ1Y3Qgc3RybV9tZ3IgKnN0cm1fbWdyX29iaikKK3sKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoc3RybV9tZ3Jfb2JqKTsKKworCWtmcmVlKHN0cm1fbWdyX29iaik7Cit9CisKKy8qCisgKiAgPT09PT09PT0gc3RybV9leGl0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGlzY29udGludWUgdXNhZ2Ugb2YgU1RSTSBtb2R1bGUuCisgKi8KK3ZvaWQgc3RybV9leGl0KHZvaWQpCit7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJcmVmcy0tOworCisJREJDX0VOU1VSRShyZWZzID49IDApOworfQorCisvKgorICogID09PT09PT09IHN0cm1fZnJlZV9idWZmZXIgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBGcmVlcyB0aGUgYnVmZmVycyBhbGxvY2F0ZWQgZm9yIGEgc3RyZWFtLgorICovCitpbnQgc3RybV9mcmVlX2J1ZmZlcihzdHJ1Y3Qgc3RybV9yZXNfb2JqZWN0ICpzdHJtcmVzLCB1OCAqKiBhcF9idWZmZXIsCisJCQkgICAgdTMyIG51bV9idWZzLCBzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0KQoreworCWludCBzdGF0dXMgPSAwOworCXUzMiBpID0gMDsKKwlzdHJ1Y3Qgc3RybV9vYmplY3QgKnN0cmVhbV9vYmogPSBzdHJtcmVzLT5oc3RyZWFtOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGFwX2J1ZmZlciAhPSBOVUxMKTsKKworCWlmICghc3RyZWFtX29iaikKKwkJc3RhdHVzID0gLUVGQVVMVDsKKworCWlmICghc3RhdHVzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fYnVmczsgaSsrKSB7CisJCQlEQkNfQVNTRVJUKHN0cmVhbV9vYmotPnhsYXRvciAhPSBOVUxMKTsKKwkJCXN0YXR1cyA9CisJCQkgICAgY21tX3hsYXRvcl9mcmVlX2J1ZihzdHJlYW1fb2JqLT54bGF0b3IsCisJCQkJCQlhcF9idWZmZXJbaV0pOworCQkJaWYgKHN0YXR1cykKKwkJCQlicmVhazsKKwkJCWFwX2J1ZmZlcltpXSA9IE5VTEw7CisJCX0KKwl9CisJZHJ2X3Byb2NfdXBkYXRlX3N0cm1fcmVzKG51bV9idWZzIC0gaSwgc3RybXJlcyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHN0cm1fZ2V0X2luZm8gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZXMgaW5mb3JtYXRpb24gYWJvdXQgYSBzdHJlYW0uCisgKi8KK2ludCBzdHJtX2dldF9pbmZvKHN0cnVjdCBzdHJtX29iamVjdCAqc3RyZWFtX29iaiwKKwkJCSBzdHJ1Y3Qgc3RyZWFtX2luZm8gKnN0cmVhbV9pbmZvLAorCQkJIHUzMiBzdHJlYW1faW5mb19zaXplKQoreworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCXN0cnVjdCBjaG5sX2luZm8gY2hubF9pbmZvX29iajsKKwlpbnQgc3RhdHVzID0gMDsKKwl2b2lkICp2aXJ0X2Jhc2UgPSBOVUxMOwkvKiBOVUxMIGlmIG5vIFNNIHVzZWQgKi8KKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShzdHJlYW1faW5mbyAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShzdHJlYW1faW5mb19zaXplID49IHNpemVvZihzdHJ1Y3Qgc3RyZWFtX2luZm8pKTsKKworCWlmICghc3RyZWFtX29iaikgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCX0gZWxzZSB7CisJCWlmIChzdHJlYW1faW5mb19zaXplIDwgc2l6ZW9mKHN0cnVjdCBzdHJlYW1faW5mbykpIHsKKwkJCS8qIHNpemUgb2YgdXNlcnMgaW5mbyAqLworCQkJc3RhdHVzID0gLUVJTlZBTDsKKwkJfQorCX0KKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJaW50Zl9meG5zID0gc3RyZWFtX29iai0+c3RybV9tZ3Jfb2JqLT5pbnRmX2Z4bnM7CisJc3RhdHVzID0KKwkgICAgKCppbnRmX2Z4bnMtPnBmbl9jaG5sX2dldF9pbmZvKSAoc3RyZWFtX29iai0+Y2hubF9vYmosCisJCQkJCQkgICZjaG5sX2luZm9fb2JqKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJaWYgKHN0cmVhbV9vYmotPnhsYXRvcikgeworCQkvKiBXZSBoYXZlIGEgdHJhbnNsYXRvciAqLworCQlEQkNfQVNTRVJUKHN0cmVhbV9vYmotPnNlZ21lbnRfaWQgPiAwKTsKKwkJY21tX3hsYXRvcl9pbmZvKHN0cmVhbV9vYmotPnhsYXRvciwgKHU4ICoqKSAmdmlydF9iYXNlLCAwLAorCQkJCXN0cmVhbV9vYmotPnNlZ21lbnRfaWQsIGZhbHNlKTsKKwl9CisJc3RyZWFtX2luZm8tPnNlZ21lbnRfaWQgPSBzdHJlYW1fb2JqLT5zZWdtZW50X2lkOworCXN0cmVhbV9pbmZvLT5zdHJtX21vZGUgPSBzdHJlYW1fb2JqLT5zdHJtX21vZGU7CisJc3RyZWFtX2luZm8tPnZpcnRfYmFzZSA9IHZpcnRfYmFzZTsKKwlzdHJlYW1faW5mby0+dXNlcl9zdHJtLT5udW1iZXJfYnVmc19hbGxvd2VkID0gc3RyZWFtX29iai0+bnVtX2J1ZnM7CisJc3RyZWFtX2luZm8tPnVzZXJfc3RybS0+bnVtYmVyX2J1ZnNfaW5fc3RyZWFtID0gY2hubF9pbmZvX29iai5jaW9fY3MgKworCSAgICBjaG5sX2luZm9fb2JqLmNpb19yZXFzOworCS8qICMgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgc2luY2UgbGFzdCBjYWxsIHRvIERTUFN0cmVhbV9JZGxlKCkgKi8KKwlzdHJlYW1faW5mby0+dXNlcl9zdHJtLT51bF9udW1iZXJfYnl0ZXMgPSBjaG5sX2luZm9fb2JqLmJ5dGVzX3R4OworCXN0cmVhbV9pbmZvLT51c2VyX3N0cm0tPnN5bmNfb2JqZWN0X2hhbmRsZSA9IGNobmxfaW5mb19vYmouZXZlbnRfb2JqOworCS8qIERldGVybWluZSBzdHJlYW0gc3RhdGUgYmFzZWQgb24gY2hhbm5lbCBzdGF0ZSBhbmQgaW5mbyAqLworCWlmIChjaG5sX2luZm9fb2JqLmR3X3N0YXRlICYgQ0hOTF9TVEFURUVPUykgeworCQlzdHJlYW1faW5mby0+dXNlcl9zdHJtLT5zc19zdHJlYW1fc3RhdGUgPSBTVFJFQU1fRE9ORTsKKwl9IGVsc2UgeworCQlpZiAoY2hubF9pbmZvX29iai5jaW9fY3MgPiAwKQorCQkJc3RyZWFtX2luZm8tPnVzZXJfc3RybS0+c3Nfc3RyZWFtX3N0YXRlID0gU1RSRUFNX1JFQURZOworCQllbHNlIGlmIChjaG5sX2luZm9fb2JqLmNpb19yZXFzID4gMCkKKwkJCXN0cmVhbV9pbmZvLT51c2VyX3N0cm0tPnNzX3N0cmVhbV9zdGF0ZSA9CisJCQkgICAgU1RSRUFNX1BFTkRJTkc7CisJCWVsc2UKKwkJCXN0cmVhbV9pbmZvLT51c2VyX3N0cm0tPnNzX3N0cmVhbV9zdGF0ZSA9IFNUUkVBTV9JRExFOworCisJfQorZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBzdHJtX2lkbGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJZGxlcyBhIHBhcnRpY3VsYXIgc3RyZWFtLgorICovCitpbnQgc3RybV9pZGxlKHN0cnVjdCBzdHJtX29iamVjdCAqc3RyZWFtX29iaiwgYm9vbCBmbHVzaF9kYXRhKQoreworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJaWYgKCFzdHJlYW1fb2JqKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfSBlbHNlIHsKKwkJaW50Zl9meG5zID0gc3RyZWFtX29iai0+c3RybV9tZ3Jfb2JqLT5pbnRmX2Z4bnM7CisKKwkJc3RhdHVzID0gKCppbnRmX2Z4bnMtPnBmbl9jaG5sX2lkbGUpIChzdHJlYW1fb2JqLT5jaG5sX29iaiwKKwkJCQkJCSAgICAgIHN0cmVhbV9vYmotPnV0aW1lb3V0LAorCQkJCQkJICAgICAgZmx1c2hfZGF0YSk7CisJfQorCisJZGV2X2RiZyhicmlkZ2UsICIlczogc3RyZWFtX29iajogJXAgZmx1c2hfZGF0YTogMHgleCBzdGF0dXM6IDB4JXhcbiIsCisJCV9fZnVuY19fLCBzdHJlYW1fb2JqLCBmbHVzaF9kYXRhLCBzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gc3RybV9pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZSB0aGUgU1RSTSBtb2R1bGUuCisgKi8KK2Jvb2wgc3RybV9pbml0KHZvaWQpCit7CisJYm9vbCByZXQgPSB0cnVlOworCisJREJDX1JFUVVJUkUocmVmcyA+PSAwKTsKKworCWlmIChyZXQpCisJCXJlZnMrKzsKKworCURCQ19FTlNVUkUoKHJldCAmJiAocmVmcyA+IDApKSB8fCAoIXJldCAmJiAocmVmcyA+PSAwKSkpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqICA9PT09PT09PSBzdHJtX2lzc3VlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSXNzdWVzIGEgYnVmZmVyIG9uIGEgc3RyZWFtCisgKi8KK2ludCBzdHJtX2lzc3VlKHN0cnVjdCBzdHJtX29iamVjdCAqc3RyZWFtX29iaiwgdTggKnBidWYsIHUzMiB1bF9ieXRlcywKKwkJICAgICAgdTMyIHVsX2J1Zl9zaXplLCB1MzIgZHdfYXJnKQoreworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCWludCBzdGF0dXMgPSAwOworCXZvaWQgKnRtcF9idWYgPSBOVUxMOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKHBidWYgIT0gTlVMTCk7CisKKwlpZiAoIXN0cmVhbV9vYmopIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9IGVsc2UgeworCQlpbnRmX2Z4bnMgPSBzdHJlYW1fb2JqLT5zdHJtX21ncl9vYmotPmludGZfZnhuczsKKworCQlpZiAoc3RyZWFtX29iai0+c2VnbWVudF9pZCAhPSAwKSB7CisJCQl0bXBfYnVmID0gY21tX3hsYXRvcl90cmFuc2xhdGUoc3RyZWFtX29iai0+eGxhdG9yLAorCQkJCQkJICAgICAgICh2b2lkICopcGJ1ZiwKKwkJCQkJCSAgICAgICBDTU1fVkEyRFNQUEEpOworCQkJaWYgKHRtcF9idWYgPT0gTlVMTCkKKwkJCQlzdGF0dXMgPSAtRVNSQ0g7CisKKwkJfQorCQlpZiAoIXN0YXR1cykgeworCQkJc3RhdHVzID0gKCppbnRmX2Z4bnMtPnBmbl9jaG5sX2FkZF9pb19yZXEpCisJCQkgICAgKHN0cmVhbV9vYmotPmNobmxfb2JqLCBwYnVmLCB1bF9ieXRlcywgdWxfYnVmX3NpemUsCisJCQkgICAgICh1MzIpIHRtcF9idWYsIGR3X2FyZyk7CisJCX0KKwkJaWYgKHN0YXR1cyA9PSAtRUlPKQorCQkJc3RhdHVzID0gLUVOT1NSOworCX0KKworCWRldl9kYmcoYnJpZGdlLCAiJXM6IHN0cmVhbV9vYmo6ICVwIHBidWY6ICVwIHVsX2J5dGVzOiAweCV4IGR3X2FyZzoiCisJCSIgMHgleCBzdGF0dXM6IDB4JXhcbiIsIF9fZnVuY19fLCBzdHJlYW1fb2JqLCBwYnVmLAorCQl1bF9ieXRlcywgZHdfYXJnLCBzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gc3RybV9vcGVuID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgT3BlbiBhIHN0cmVhbSBmb3Igc2VuZGluZy9yZWNlaXZpbmcgZGF0YSBidWZmZXJzIHRvL2Zyb20gYSB0YXNrIG9yCisgKiAgICAgIFhEQUlTIHNvY2tldCBub2RlIG9uIHRoZSBEU1AuCisgKi8KK2ludCBzdHJtX29wZW4oc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwgdTMyIGRpciwgdTMyIGluZGV4LAorCQkgICAgIHN0cnVjdCBzdHJtX2F0dHIgKnBhdHRyLAorCQkgICAgIHN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKipzdHJtcmVzLAorCQkgICAgIHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQpCit7CisJc3RydWN0IHN0cm1fbWdyICpzdHJtX21ncl9vYmo7CisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisJdTMyIHVsX2NobmxfaWQ7CisJc3RydWN0IHN0cm1fb2JqZWN0ICpzdHJtX29iaiA9IE5VTEw7CisJczggY2hubF9tb2RlOworCXN0cnVjdCBjaG5sX2F0dHIgY2hubF9hdHRyX29iajsKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgY21tX29iamVjdCAqaGNtbV9tZ3IgPSBOVUxMOwkvKiBTaGFyZWQgbWVtb3J5IG1hbmFnZXIgaG5kbCAqLworCisJdm9pZCAqc3RyZWFtX3JlczsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShzdHJtcmVzICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHBhdHRyICE9IE5VTEwpOworCSpzdHJtcmVzID0gTlVMTDsKKwlpZiAoZGlyICE9IERTUF9UT05PREUgJiYgZGlyICE9IERTUF9GUk9NTk9ERSkgeworCQlzdGF0dXMgPSAtRVBFUk07CisJfSBlbHNlIHsKKwkJLyogR2V0IHRoZSBjaGFubmVsIGlkIGZyb20gdGhlIG5vZGUgKHNldCBpbiBub2RlX2Nvbm5lY3QoKSkgKi8KKwkJc3RhdHVzID0gbm9kZV9nZXRfY2hhbm5lbF9pZChobm9kZSwgZGlyLCBpbmRleCwgJnVsX2NobmxfaWQpOworCX0KKwlpZiAoIXN0YXR1cykKKwkJc3RhdHVzID0gbm9kZV9nZXRfc3RybV9tZ3IoaG5vZGUsICZzdHJtX21ncl9vYmopOworCisJaWYgKCFzdGF0dXMpIHsKKwkJc3RybV9vYmogPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RybV9vYmplY3QpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHN0cm1fb2JqID09IE5VTEwpIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCX0gZWxzZSB7CisJCQlzdHJtX29iai0+c3RybV9tZ3Jfb2JqID0gc3RybV9tZ3Jfb2JqOworCQkJc3RybV9vYmotPmRpciA9IGRpcjsKKwkJCXN0cm1fb2JqLT5zdHJtX3N0YXRlID0gU1RSRUFNX0lETEU7CisJCQlzdHJtX29iai0+dXNlcl9ldmVudCA9IHBhdHRyLT51c2VyX2V2ZW50OworCQkJaWYgKHBhdHRyLT5zdHJlYW1fYXR0cl9pbiAhPSBOVUxMKSB7CisJCQkJc3RybV9vYmotPnV0aW1lb3V0ID0KKwkJCQkgICAgcGF0dHItPnN0cmVhbV9hdHRyX2luLT51dGltZW91dDsKKwkJCQlzdHJtX29iai0+bnVtX2J1ZnMgPQorCQkJCSAgICBwYXR0ci0+c3RyZWFtX2F0dHJfaW4tPm51bV9idWZzOworCQkJCXN0cm1fb2JqLT5zdHJtX21vZGUgPQorCQkJCSAgICBwYXR0ci0+c3RyZWFtX2F0dHJfaW4tPnN0cm1fbW9kZTsKKwkJCQlzdHJtX29iai0+c2VnbWVudF9pZCA9CisJCQkJICAgIHBhdHRyLT5zdHJlYW1fYXR0cl9pbi0+c2VnbWVudF9pZDsKKwkJCQlzdHJtX29iai0+YnVmX2FsaWdubWVudCA9CisJCQkJICAgIHBhdHRyLT5zdHJlYW1fYXR0cl9pbi0+YnVmX2FsaWdubWVudDsKKwkJCQlzdHJtX29iai0+dWRtYV9jaG5sX2lkID0KKwkJCQkgICAgcGF0dHItPnN0cmVhbV9hdHRyX2luLT51ZG1hX2NobmxfaWQ7CisJCQkJc3RybV9vYmotPnVkbWFfcHJpb3JpdHkgPQorCQkJCSAgICBwYXR0ci0+c3RyZWFtX2F0dHJfaW4tPnVkbWFfcHJpb3JpdHk7CisJCQkJY2hubF9hdHRyX29iai51aW9fcmVxcyA9CisJCQkJICAgIHBhdHRyLT5zdHJlYW1fYXR0cl9pbi0+bnVtX2J1ZnM7CisJCQl9IGVsc2UgeworCQkJCXN0cm1fb2JqLT51dGltZW91dCA9IERFRkFVTFRUSU1FT1VUOworCQkJCXN0cm1fb2JqLT5udW1fYnVmcyA9IERFRkFVTFROVU1CVUZTOworCQkJCXN0cm1fb2JqLT5zdHJtX21vZGUgPSBTVFJNTU9ERV9QUk9DQ09QWTsKKwkJCQlzdHJtX29iai0+c2VnbWVudF9pZCA9IDA7CS8qIGxvY2FsIG1lbSAqLworCQkJCXN0cm1fb2JqLT5idWZfYWxpZ25tZW50ID0gMDsKKwkJCQlzdHJtX29iai0+dWRtYV9jaG5sX2lkID0gMDsKKwkJCQlzdHJtX29iai0+dWRtYV9wcmlvcml0eSA9IDA7CisJCQkJY2hubF9hdHRyX29iai51aW9fcmVxcyA9IERFRkFVTFROVU1CVUZTOworCQkJfQorCQkJY2hubF9hdHRyX29iai5yZXNlcnZlZDEgPSBOVUxMOworCQkJLyogRE1BIGNobmwgZmx1c2ggdGltZW91dCAqLworCQkJY2hubF9hdHRyX29iai5yZXNlcnZlZDIgPSBzdHJtX29iai0+dXRpbWVvdXQ7CisJCQljaG5sX2F0dHJfb2JqLmV2ZW50X29iaiA9IE5VTEw7CisJCQlpZiAocGF0dHItPnVzZXJfZXZlbnQgIT0gTlVMTCkKKwkJCQljaG5sX2F0dHJfb2JqLmV2ZW50X29iaiA9IHBhdHRyLT51c2VyX2V2ZW50OworCisJCX0KKwl9CisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2NvbnQ7CisKKwlpZiAoKHBhdHRyLT52aXJ0X2Jhc2UgPT0gTlVMTCkgfHwgIShwYXR0ci0+dWxfdmlydF9zaXplID4gMCkpCisJCWdvdG8gZnVuY19jb250OworCisJLyogTm8gU3lzdGVtIERNQSAqLworCURCQ19BU1NFUlQoc3RybV9vYmotPnN0cm1fbW9kZSAhPSBTVFJNTU9ERV9MRE1BKTsKKwkvKiBHZXQgdGhlIHNoYXJlZCBtZW0gbWdyIGZvciB0aGlzIHN0cmVhbXMgZGV2IG9iamVjdCAqLworCXN0YXR1cyA9IGRldl9nZXRfY21tX21ncihzdHJtX21ncl9vYmotPmRldl9vYmosICZoY21tX21ncik7CisJaWYgKCFzdGF0dXMpIHsKKwkJLypBbGxvY2F0ZSBhIFNNIGFkZHIgdHJhbnNsYXRvciBmb3IgdGhpcyBzdHJtLiAqLworCQlzdGF0dXMgPSBjbW1feGxhdG9yX2NyZWF0ZSgmc3RybV9vYmotPnhsYXRvciwgaGNtbV9tZ3IsIE5VTEwpOworCQlpZiAoIXN0YXR1cykgeworCQkJREJDX0FTU0VSVChzdHJtX29iai0+c2VnbWVudF9pZCA+IDApOworCQkJLyogIFNldCB0cmFuc2xhdG9ycyBWaXJ0IEFkZHIgYXR0cmlidXRlcyAqLworCQkJc3RhdHVzID0gY21tX3hsYXRvcl9pbmZvKHN0cm1fb2JqLT54bGF0b3IsCisJCQkJCQkgKHU4ICoqKSAmcGF0dHItPnZpcnRfYmFzZSwKKwkJCQkJCSBwYXR0ci0+dWxfdmlydF9zaXplLAorCQkJCQkJIHN0cm1fb2JqLT5zZWdtZW50X2lkLCB0cnVlKTsKKwkJfQorCX0KK2Z1bmNfY29udDoKKwlpZiAoIXN0YXR1cykgeworCQkvKiBPcGVuIGNoYW5uZWwgKi8KKwkJY2hubF9tb2RlID0gKGRpciA9PSBEU1BfVE9OT0RFKSA/CisJCSAgICBDSE5MX01PREVUT0RTUCA6IENITkxfTU9ERUZST01EU1A7CisJCWludGZfZnhucyA9IHN0cm1fbWdyX29iai0+aW50Zl9meG5zOworCQlzdGF0dXMgPSAoKmludGZfZnhucy0+cGZuX2Nobmxfb3BlbikgKCYoc3RybV9vYmotPmNobmxfb2JqKSwKKwkJCQkJCSAgICAgIHN0cm1fbWdyX29iai0+aGNobmxfbWdyLAorCQkJCQkJICAgICAgY2hubF9tb2RlLCB1bF9jaG5sX2lkLAorCQkJCQkJICAgICAgJmNobmxfYXR0cl9vYmopOworCQlpZiAoc3RhdHVzKSB7CisJCQkvKgorCQkJICogb3Zlci1yaWRlIG5vbi1yZXR1cm5hYmxlIHN0YXR1cyBjb2RlcyBzbyB3ZSByZXR1cm4KKwkJCSAqIHNvbWV0aGluZyBkb2N1bWVudGVkCisJCQkgKi8KKwkJCWlmIChzdGF0dXMgIT0gLUVOT01FTSAmJiBzdGF0dXMgIT0KKwkJCSAgICAtRUlOVkFMICYmIHN0YXR1cyAhPSAtRVBFUk0pIHsKKwkJCQkvKgorCQkJCSAqIFdlIGdvdCBhIHN0YXR1cyB0aGF0J3Mgbm90IHJldHVybi1hYmxlLgorCQkJCSAqIEFzc2VydCB0aGF0IHdlIGdvdCBzb21ldGhpbmcgd2Ugd2VyZQorCQkJCSAqIGV4cGVjdGluZyAoLUVGQVVMVCBpc24ndCBhY2NlcHRhYmxlLAorCQkJCSAqIHN0cm1fbWdyX29iai0+aGNobmxfbWdyIGJldHRlciBiZSB2YWxpZCBvciB3ZQorCQkJCSAqIGFzc2VydCBoZXJlKSwgYW5kIHRoZW4gcmV0dXJuIC1FUEVSTS4KKwkJCQkgKi8KKwkJCQlEQkNfQVNTRVJUKHN0YXR1cyA9PSAtRU5PU1IgfHwKKwkJCQkJICAgc3RhdHVzID09IC1FQ0hSTkcgfHwKKwkJCQkJICAgc3RhdHVzID09IC1FQUxSRUFEWSB8fAorCQkJCQkgICBzdGF0dXMgPT0gLUVJTyk7CisJCQkJc3RhdHVzID0gLUVQRVJNOworCQkJfQorCQl9CisJfQorCWlmICghc3RhdHVzKSB7CisJCXN0YXR1cyA9IGRydl9wcm9jX2luc2VydF9zdHJtX3Jlc19lbGVtZW50KHN0cm1fb2JqLAorCQkJCQkJCSZzdHJlYW1fcmVzLCBwcl9jdHh0KTsKKwkJaWYgKHN0YXR1cykKKwkJCWRlbGV0ZV9zdHJtKHN0cm1fb2JqKTsKKwkJZWxzZQorCQkJKnN0cm1yZXMgPSAoc3RydWN0IHN0cm1fcmVzX29iamVjdCAqKXN0cmVhbV9yZXM7CisJfSBlbHNlIHsKKwkJKHZvaWQpZGVsZXRlX3N0cm0oc3RybV9vYmopOworCX0KKworCS8qIGVuc3VyZSB3ZSByZXR1cm4gYSBkb2N1bWVudGVkIGVycm9yIGNvZGUgKi8KKwlEQkNfRU5TVVJFKCghc3RhdHVzICYmIHN0cm1fb2JqKSB8fAorCQkgICAoKnN0cm1yZXMgPT0gTlVMTCAmJiAoc3RhdHVzID09IC1FRkFVTFQgfHwKKwkJCQkJc3RhdHVzID09IC1FUEVSTQorCQkJCQl8fCBzdGF0dXMgPT0gLUVJTlZBTCkpKTsKKworCWRldl9kYmcoYnJpZGdlLCAiJXM6IGhub2RlOiAlcCBkaXI6IDB4JXggaW5kZXg6IDB4JXggcGF0dHI6ICVwICIKKwkJInN0cm1yZXM6ICVwIHN0YXR1czogMHgleFxuIiwgX19mdW5jX18sCisJCWhub2RlLCBkaXIsIGluZGV4LCBwYXR0ciwgc3RybXJlcywgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHN0cm1fcmVjbGFpbSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlbGNhaW1zIGEgYnVmZmVyIGZyb20gYSBzdHJlYW0uCisgKi8KK2ludCBzdHJtX3JlY2xhaW0oc3RydWN0IHN0cm1fb2JqZWN0ICpzdHJlYW1fb2JqLCB1OCAqKiBidWZfcHRyLAorCQkJdTMyICpuYnl0ZXMsIHUzMiAqYnVmZl9zaXplLCB1MzIgKnBkd19hcmcpCit7CisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisJc3RydWN0IGNobmxfaW9jIGNobmxfaW9jX29iajsKKwlpbnQgc3RhdHVzID0gMDsKKwl2b2lkICp0bXBfYnVmID0gTlVMTDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShidWZfcHRyICE9IE5VTEwpOworCURCQ19SRVFVSVJFKG5ieXRlcyAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShwZHdfYXJnICE9IE5VTEwpOworCisJaWYgKCFzdHJlYW1fb2JqKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCWludGZfZnhucyA9IHN0cmVhbV9vYmotPnN0cm1fbWdyX29iai0+aW50Zl9meG5zOworCisJc3RhdHVzID0KKwkgICAgKCppbnRmX2Z4bnMtPnBmbl9jaG5sX2dldF9pb2MpIChzdHJlYW1fb2JqLT5jaG5sX29iaiwKKwkJCQkJICAgIHN0cmVhbV9vYmotPnV0aW1lb3V0LAorCQkJCQkgICAgJmNobmxfaW9jX29iaik7CisJaWYgKCFzdGF0dXMpIHsKKwkJKm5ieXRlcyA9IGNobmxfaW9jX29iai5ieXRlX3NpemU7CisJCWlmIChidWZmX3NpemUpCisJCQkqYnVmZl9zaXplID0gY2hubF9pb2Nfb2JqLmJ1Zl9zaXplOworCisJCSpwZHdfYXJnID0gY2hubF9pb2Nfb2JqLmR3X2FyZzsKKwkJaWYgKCFDSE5MX0lTX0lPX0NPTVBMRVRFKGNobmxfaW9jX29iaikpIHsKKwkJCWlmIChDSE5MX0lTX1RJTUVEX09VVChjaG5sX2lvY19vYmopKSB7CisJCQkJc3RhdHVzID0gLUVUSU1FOworCQkJfSBlbHNlIHsKKwkJCQkvKiBBbGxvdyByZWNsYWltcyBhZnRlciBpZGxlIHRvIHN1Y2NlZWQgKi8KKwkJCQlpZiAoIUNITkxfSVNfSU9fQ0FOQ0VMTEVEKGNobmxfaW9jX29iaikpCisJCQkJCXN0YXR1cyA9IC1FUEVSTTsKKworCQkJfQorCQl9CisJCS8qIFRyYW5zbGF0ZSB6ZXJvY29weSBidWZmZXIgaWYgY2hhbm5lbCBub3QgY2FuY2VsZWQuICovCisJCWlmICghc3RhdHVzCisJCSAgICAmJiAoIUNITkxfSVNfSU9fQ0FOQ0VMTEVEKGNobmxfaW9jX29iaikpCisJCSAgICAmJiAoc3RyZWFtX29iai0+c3RybV9tb2RlID09IFNUUk1NT0RFX1pFUk9DT1BZKSkgeworCQkJLyoKKwkJCSAqICBUaGlzIGlzIGEgemVyby1jb3B5IGNoYW5uZWwgc28gY2hubF9pb2Nfb2JqLnBidWYKKwkJCSAqICBjb250YWlucyB0aGUgRFNQIGFkZHJlc3Mgb2YgU00uIFdlIG5lZWQgdG8KKwkJCSAqICB0cmFuc2xhdGUgaXQgdG8gYSB2aXJ0dWFsIGFkZHJlc3MgZm9yIHRoZSB1c2VyCisJCQkgKiAgdGhyZWFkIHRvIGFjY2Vzcy4KKwkJCSAqICBOb3RlOiBDb3VsZCBhZGQgQ01NX0RTUFBBMlZBIHRvIENNTSBpbiB0aGUgZnV0dXJlLgorCQkJICovCisJCQl0bXBfYnVmID0gY21tX3hsYXRvcl90cmFuc2xhdGUoc3RyZWFtX29iai0+eGxhdG9yLAorCQkJCQkJICAgICAgIGNobmxfaW9jX29iai5wYnVmLAorCQkJCQkJICAgICAgIENNTV9EU1BQQTJQQSk7CisJCQlpZiAodG1wX2J1ZiAhPSBOVUxMKSB7CisJCQkJLyogbm93IGNvbnZlcnQgdGhpcyBHUFAgUGEgdG8gVmEgKi8KKwkJCQl0bXBfYnVmID0gY21tX3hsYXRvcl90cmFuc2xhdGUoc3RyZWFtX29iai0+CisJCQkJCQkJICAgICAgIHhsYXRvciwKKwkJCQkJCQkgICAgICAgdG1wX2J1ZiwKKwkJCQkJCQkgICAgICAgQ01NX1BBMlZBKTsKKwkJCX0KKwkJCWlmICh0bXBfYnVmID09IE5VTEwpCisJCQkJc3RhdHVzID0gLUVTUkNIOworCisJCQljaG5sX2lvY19vYmoucGJ1ZiA9IHRtcF9idWY7CisJCX0KKwkJKmJ1Zl9wdHIgPSBjaG5sX2lvY19vYmoucGJ1ZjsKKwl9CitmdW5jX2VuZDoKKwkvKiBlbnN1cmUgd2UgcmV0dXJuIGEgZG9jdW1lbnRlZCByZXR1cm4gY29kZSAqLworCURCQ19FTlNVUkUoIXN0YXR1cyB8fCBzdGF0dXMgPT0gLUVGQVVMVCB8fAorCQkgICBzdGF0dXMgPT0gLUVUSU1FIHx8IHN0YXR1cyA9PSAtRVNSQ0ggfHwKKwkJICAgc3RhdHVzID09IC1FUEVSTSk7CisKKwlkZXZfZGJnKGJyaWRnZSwgIiVzOiBzdHJlYW1fb2JqOiAlcCBidWZfcHRyOiAlcCBuYnl0ZXM6ICVwICIKKwkJInBkd19hcmc6ICVwIHN0YXR1cyAweCV4XG4iLCBfX2Z1bmNfXywgc3RyZWFtX29iaiwKKwkJYnVmX3B0ciwgbmJ5dGVzLCBwZHdfYXJnLCBzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gc3RybV9yZWdpc3Rlcl9ub3RpZnkgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZWdpc3RlciB0byBiZSBub3RpZmllZCBvbiBzcGVjaWZpYyBldmVudHMgZm9yIHRoaXMgc3RyZWFtLgorICovCitpbnQgc3RybV9yZWdpc3Rlcl9ub3RpZnkoc3RydWN0IHN0cm1fb2JqZWN0ICpzdHJlYW1fb2JqLCB1MzIgZXZlbnRfbWFzaywKKwkJCQl1MzIgbm90aWZ5X3R5cGUsIHN0cnVjdCBkc3Bfbm90aWZpY2F0aW9uCisJCQkJKiBobm90aWZpY2F0aW9uKQoreworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGhub3RpZmljYXRpb24gIT0gTlVMTCk7CisKKwlpZiAoIXN0cmVhbV9vYmopIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9IGVsc2UgaWYgKChldmVudF9tYXNrICYgfigoRFNQX1NUUkVBTUlPQ09NUExFVElPTikgfAorCQkJCSAgIERTUF9TVFJFQU1ET05FKSkgIT0gMCkgeworCQlzdGF0dXMgPSAtRUlOVkFMOworCX0gZWxzZSB7CisJCWlmIChub3RpZnlfdHlwZSAhPSBEU1BfU0lHTkFMRVZFTlQpCisJCQlzdGF0dXMgPSAtRU5PU1lTOworCisJfQorCWlmICghc3RhdHVzKSB7CisJCWludGZfZnhucyA9IHN0cmVhbV9vYmotPnN0cm1fbWdyX29iai0+aW50Zl9meG5zOworCisJCXN0YXR1cyA9CisJCSAgICAoKmludGZfZnhucy0+cGZuX2NobmxfcmVnaXN0ZXJfbm90aWZ5KSAoc3RyZWFtX29iai0+CisJCQkJCQkJICAgIGNobmxfb2JqLAorCQkJCQkJCSAgICBldmVudF9tYXNrLAorCQkJCQkJCSAgICBub3RpZnlfdHlwZSwKKwkJCQkJCQkgICAgaG5vdGlmaWNhdGlvbik7CisJfQorCS8qIGVuc3VyZSB3ZSByZXR1cm4gYSBkb2N1bWVudGVkIHJldHVybiBjb2RlICovCisJREJDX0VOU1VSRSghc3RhdHVzIHx8IHN0YXR1cyA9PSAtRUZBVUxUIHx8CisJCSAgIHN0YXR1cyA9PSAtRVRJTUUgfHwgc3RhdHVzID09IC1FU1JDSCB8fAorCQkgICBzdGF0dXMgPT0gLUVOT1NZUyB8fCBzdGF0dXMgPT0gLUVQRVJNKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHN0cm1fc2VsZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgU2VsZWN0cyBhIHJlYWR5IHN0cmVhbS4KKyAqLworaW50IHN0cm1fc2VsZWN0KHN0cnVjdCBzdHJtX29iamVjdCAqKnN0cm1fdGFiLCB1MzIgc3RybXMsCisJCSAgICAgICB1MzIgKnBtYXNrLCB1MzIgdXRpbWVvdXQpCit7CisJdTMyIGluZGV4OworCXN0cnVjdCBjaG5sX2luZm8gY2hubF9pbmZvX29iajsKKwlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKKwlzdHJ1Y3Qgc3luY19vYmplY3QgKipzeW5jX2V2ZW50cyA9IE5VTEw7CisJdTMyIGk7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoc3RybV90YWIgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUocG1hc2sgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoc3RybXMgPiAwKTsKKworCSpwbWFzayA9IDA7CisJZm9yIChpID0gMDsgaSA8IHN0cm1zOyBpKyspIHsKKwkJaWYgKCFzdHJtX3RhYltpXSkgeworCQkJc3RhdHVzID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisKKwkvKiBEZXRlcm1pbmUgd2hpY2ggY2hhbm5lbHMgaGF2ZSBJTyByZWFkeSAqLworCWZvciAoaSA9IDA7IGkgPCBzdHJtczsgaSsrKSB7CisJCWludGZfZnhucyA9IHN0cm1fdGFiW2ldLT5zdHJtX21ncl9vYmotPmludGZfZnhuczsKKwkJc3RhdHVzID0gKCppbnRmX2Z4bnMtPnBmbl9jaG5sX2dldF9pbmZvKSAoc3RybV90YWJbaV0tPmNobmxfb2JqLAorCQkJCQkJCSAgJmNobmxfaW5mb19vYmopOworCQlpZiAoc3RhdHVzKSB7CisJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCWlmIChjaG5sX2luZm9fb2JqLmNpb19jcyA+IDApCisJCQkJKnBtYXNrIHw9ICgxIDw8IGkpOworCisJCX0KKwl9CisJaWYgKCFzdGF0dXMgJiYgdXRpbWVvdXQgPiAwICYmICpwbWFzayA9PSAwKSB7CisJCS8qIE5vbi16ZXJvIHRpbWVvdXQgKi8KKwkJc3luY19ldmVudHMgPSBrbWFsbG9jKHN0cm1zICogc2l6ZW9mKHN0cnVjdCBzeW5jX29iamVjdCAqKSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisKKwkJaWYgKHN5bmNfZXZlbnRzID09IE5VTEwpIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCX0gZWxzZSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgc3RybXM7IGkrKykgeworCQkJCWludGZfZnhucyA9CisJCQkJICAgIHN0cm1fdGFiW2ldLT5zdHJtX21ncl9vYmotPmludGZfZnhuczsKKwkJCQlzdGF0dXMgPSAoKmludGZfZnhucy0+cGZuX2NobmxfZ2V0X2luZm8pCisJCQkJICAgIChzdHJtX3RhYltpXS0+Y2hubF9vYmosICZjaG5sX2luZm9fb2JqKTsKKwkJCQlpZiAoc3RhdHVzKQorCQkJCQlicmVhazsKKwkJCQllbHNlCisJCQkJCXN5bmNfZXZlbnRzW2ldID0KKwkJCQkJICAgIGNobmxfaW5mb19vYmouc3luY19ldmVudDsKKworCQkJfQorCQl9CisJCWlmICghc3RhdHVzKSB7CisJCQlzdGF0dXMgPQorCQkJICAgIHN5bmNfd2FpdF9vbl9tdWx0aXBsZV9ldmVudHMoc3luY19ldmVudHMsIHN0cm1zLAorCQkJCQkJCSB1dGltZW91dCwgJmluZGV4KTsKKwkJCWlmICghc3RhdHVzKSB7CisJCQkJLyogU2luY2Ugd2Ugd2FpdGVkIG9uIHRoZSBldmVudCwgd2UgaGF2ZSB0bworCQkJCSAqIHJlc2V0IGl0ICovCisJCQkJc3luY19zZXRfZXZlbnQoc3luY19ldmVudHNbaW5kZXhdKTsKKwkJCQkqcG1hc2sgPSAxIDw8IGluZGV4OworCQkJfQorCQl9CisJfQorZnVuY19lbmQ6CisJa2ZyZWUoc3luY19ldmVudHMpOworCisJREJDX0VOU1VSRSgoIXN0YXR1cyAmJiAoKnBtYXNrICE9IDAgfHwgdXRpbWVvdXQgPT0gMCkpIHx8CisJCSAgIChzdGF0dXMgJiYgKnBtYXNrID09IDApKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGVsZXRlX3N0cm0gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBGcmVlcyB0aGUgcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgYSBzdHJlYW0uCisgKi8KK3N0YXRpYyBpbnQgZGVsZXRlX3N0cm0oc3RydWN0IHN0cm1fb2JqZWN0ICpzdHJlYW1fb2JqKQoreworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCWludCBzdGF0dXMgPSAwOworCisJaWYgKHN0cmVhbV9vYmopIHsKKwkJaWYgKHN0cmVhbV9vYmotPmNobmxfb2JqKSB7CisJCQlpbnRmX2Z4bnMgPSBzdHJlYW1fb2JqLT5zdHJtX21ncl9vYmotPmludGZfZnhuczsKKwkJCS8qIENoYW5uZWwgY2xvc2UgY2FuIGZhaWwgb25seSBpZiB0aGUgY2hhbm5lbCBoYW5kbGUKKwkJCSAqIGlzIGludmFsaWQuICovCisJCQlzdGF0dXMgPSAoKmludGZfZnhucy0+cGZuX2NobmxfY2xvc2UpCisJCQkJCShzdHJlYW1fb2JqLT5jaG5sX29iaik7CisJCQkvKiBGcmVlIGFsbCBTTSBhZGRyZXNzIHRyYW5zbGF0b3IgcmVzb3VyY2VzICovCisJCQlpZiAoIXN0YXR1cykgeworCQkJCWlmIChzdHJlYW1fb2JqLT54bGF0b3IpIHsKKwkJCQkJLyogZm9yY2UgZnJlZSAqLworCQkJCQkodm9pZCljbW1feGxhdG9yX2RlbGV0ZShzdHJlYW1fb2JqLT4KKwkJCQkJCQkJeGxhdG9yLAorCQkJCQkJCQl0cnVlKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJa2ZyZWUoc3RyZWFtX29iaik7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9zZXJ2aWNlcy9jZmcuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9zZXJ2aWNlcy9jZmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2FmNzRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3NlcnZpY2VzL2NmZy5jCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogY2ZnLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogSW1wbGVtZW50YXRpb24gb2YgcGxhdGZvcm0gc3BlY2lmaWMgY29uZmlnIHNlcnZpY2VzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRFNQL0JJT1MgQnJpZGdlICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHJhY2UgJiBEZWJ1ZyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9TIEFkYXB0YXRpb24gTGF5ZXIgKi8KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY2ZnLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rydi5oPgorCitzdHJ1Y3QgZHJ2X2V4dCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworCWNoYXIgc3pfc3RyaW5nW01BWFJFR1BBVEhMRU5HVEhdOworfTsKKworLyoKKyAqICA9PT09PT09PSBjZmdfZXhpdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERpc2NvbnRpbnVlIHVzYWdlIG9mIHRoZSBDRkcgbW9kdWxlLgorICovCit2b2lkIGNmZ19leGl0KHZvaWQpCit7CisJLyogRG8gbm90aGluZyAqLworfQorCisvKgorICogID09PT09PT09IGNmZ19nZXRfYXV0b19zdGFydCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJlaXZlIHRoZSBhdXRvc3RhcnQgbWFzaywgaWYgYW55LCBmb3IgdGhpcyBib2FyZC4KKyAqLworaW50IGNmZ19nZXRfYXV0b19zdGFydChzdHJ1Y3QgY2ZnX2Rldm5vZGUgKmRldl9ub2RlX29iaiwKKwkJCSAgICAgIHUzMiAqYXV0b19zdGFydCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwl1MzIgZHdfYnVmX3NpemU7CisJc3RydWN0IGRydl9kYXRhICpkcnZfZGF0YXAgPSBkZXZfZ2V0X2RydmRhdGEoYnJpZGdlKTsKKworCWR3X2J1Zl9zaXplID0gc2l6ZW9mKCphdXRvX3N0YXJ0KTsKKwlpZiAoIWRldl9ub2RlX29iaikKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwlpZiAoIWF1dG9fc3RhcnQgfHwgIWRydl9kYXRhcCkKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwlpZiAoIXN0YXR1cykKKwkJKmF1dG9fc3RhcnQgPSAoZHJ2X2RhdGFwLT5iYXNlX2ltZykgPyAxIDogMDsKKworCURCQ19FTlNVUkUoKHN0YXR1cyA9PSAwICYmCisJCSAgICAoKmF1dG9fc3RhcnQgPT0gMCB8fCAqYXV0b19zdGFydCA9PSAxKSkKKwkJICAgfHwgc3RhdHVzICE9IDApOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY2ZnX2dldF9kZXZfb2JqZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIERldmljZSBPYmplY3QgaGFuZGxlIGZvciBhIGdpdmVuIGRldm5vZGUuCisgKi8KK2ludCBjZmdfZ2V0X2Rldl9vYmplY3Qoc3RydWN0IGNmZ19kZXZub2RlICpkZXZfbm9kZV9vYmosCisJCQkgICAgICB1MzIgKnZhbHVlKQoreworCWludCBzdGF0dXMgPSAwOworCXUzMiBkd19idWZfc2l6ZTsKKwlzdHJ1Y3QgZHJ2X2RhdGEgKmRydl9kYXRhcCA9IGRldl9nZXRfZHJ2ZGF0YShicmlkZ2UpOworCisJaWYgKCFkcnZfZGF0YXApCisJCXN0YXR1cyA9IC1FUEVSTTsKKworCWlmICghZGV2X25vZGVfb2JqKQorCQlzdGF0dXMgPSAtRUZBVUxUOworCisJaWYgKCF2YWx1ZSkKKwkJc3RhdHVzID0gLUVGQVVMVDsKKworCWR3X2J1Zl9zaXplID0gc2l6ZW9mKHZhbHVlKTsKKwlpZiAoIXN0YXR1cykgeworCisJCS8qIGNoZWNrIHRoZSBkZXZpY2Ugc3RyaW5nIGFuZCB0aGVuIHN0b3JlIGRldiBvYmplY3QgKi8KKwkJaWYgKCEKKwkJICAgIChzdHJjbXAKKwkJICAgICAoKGNoYXIgKikoKHN0cnVjdCBkcnZfZXh0ICopZGV2X25vZGVfb2JqKS0+c3pfc3RyaW5nLAorCQkgICAgICAiVElPTUFQMTUxMCIpKSkKKwkJCSp2YWx1ZSA9ICh1MzIpZHJ2X2RhdGFwLT5kZXZfb2JqZWN0OworCX0KKwlpZiAoc3RhdHVzKQorCQlwcl9lcnIoIiVzOiBGYWlsZWQsIHN0YXR1cyAweCV4XG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGNmZ19nZXRfZXhlY19maWxlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmVpdmUgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSwgaWYgYW55LCBmb3IgdGhpcyBib2FyZC4KKyAqLworaW50IGNmZ19nZXRfZXhlY19maWxlKHN0cnVjdCBjZmdfZGV2bm9kZSAqZGV2X25vZGVfb2JqLCB1MzIgYnVmX3NpemUsCisJCQkgICAgIGNoYXIgKnN0cl9leGVjX2ZpbGUpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRydl9kYXRhICpkcnZfZGF0YXAgPSBkZXZfZ2V0X2RydmRhdGEoYnJpZGdlKTsKKworCWlmICghZGV2X25vZGVfb2JqKQorCQlzdGF0dXMgPSAtRUZBVUxUOworCisJZWxzZSBpZiAoIXN0cl9leGVjX2ZpbGUgfHwgIWRydl9kYXRhcCkKKwkJc3RhdHVzID0gLUVGQVVMVDsKKworCWlmIChzdHJsZW4oZHJ2X2RhdGFwLT5iYXNlX2ltZykgPiBidWZfc2l6ZSkKKwkJc3RhdHVzID0gLUVJTlZBTDsKKworCWlmICghc3RhdHVzICYmIGRydl9kYXRhcC0+YmFzZV9pbWcpCisJCXN0cmNweShzdHJfZXhlY19maWxlLCBkcnZfZGF0YXAtPmJhc2VfaW1nKTsKKworCWlmIChzdGF0dXMpCisJCXByX2VycigiJXM6IEZhaWxlZCwgc3RhdHVzIDB4JXhcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCURCQ19FTlNVUkUoKChzdGF0dXMgPT0gMCkgJiYKKwkJICAgIChzdHJsZW4oc3RyX2V4ZWNfZmlsZSkgPD0gYnVmX3NpemUpKQorCQkgICB8fCAoc3RhdHVzICE9IDApKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGNmZ19nZXRfb2JqZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIE9iamVjdCBoYW5kbGUgZnJvbSB0aGUgUmVnaXN0cnkKKyAqLworaW50IGNmZ19nZXRfb2JqZWN0KHUzMiAqdmFsdWUsIHU4IGR3X3R5cGUpCit7CisJaW50IHN0YXR1cyA9IC1FSU5WQUw7CisJc3RydWN0IGRydl9kYXRhICpkcnZfZGF0YXAgPSBkZXZfZ2V0X2RydmRhdGEoYnJpZGdlKTsKKworCURCQ19SRVFVSVJFKHZhbHVlICE9IE5VTEwpOworCisJaWYgKCFkcnZfZGF0YXApCisJCXJldHVybiAtRVBFUk07CisKKwlzd2l0Y2ggKGR3X3R5cGUpIHsKKwljYXNlIChSRUdfRFJWX09CSkVDVCk6CisJCWlmIChkcnZfZGF0YXAtPmRydl9vYmplY3QpIHsKKwkJCSp2YWx1ZSA9ICh1MzIpZHJ2X2RhdGFwLT5kcnZfb2JqZWN0OworCQkJc3RhdHVzID0gMDsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IC1FTk9EQVRBOworCQl9CisJCWJyZWFrOworCWNhc2UgKFJFR19NR1JfT0JKRUNUKToKKwkJaWYgKGRydl9kYXRhcC0+bWdyX29iamVjdCkgeworCQkJKnZhbHVlID0gKHUzMilkcnZfZGF0YXAtPm1ncl9vYmplY3Q7CisJCQlzdGF0dXMgPSAwOworCQl9IGVsc2UgeworCQkJc3RhdHVzID0gLUVOT0RBVEE7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJaWYgKHN0YXR1cykgeworCQkqdmFsdWUgPSAwOworCQlwcl9lcnIoIiVzOiBGYWlsZWQsIHN0YXR1cyAweCV4XG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwl9CisJREJDX0VOU1VSRSgoIXN0YXR1cyAmJiAqdmFsdWUgIT0gMCkgfHwgKHN0YXR1cyAmJiAqdmFsdWUgPT0gMCkpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY2ZnX2luaXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplIHRoZSBDRkcgbW9kdWxlJ3MgcHJpdmF0ZSBzdGF0ZS4KKyAqLworYm9vbCBjZmdfaW5pdCh2b2lkKQoreworCXJldHVybiB0cnVlOworfQorCisvKgorICogID09PT09PT09IGNmZ19zZXRfZGV2X29iamVjdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFN0b3JlIHRoZSBEZXZpY2UgT2JqZWN0IGhhbmRsZSBhbmQgZGV2X25vZGUgcG9pbnRlciBmb3IgYSBnaXZlbiBkZXZub2RlLgorICovCitpbnQgY2ZnX3NldF9kZXZfb2JqZWN0KHN0cnVjdCBjZmdfZGV2bm9kZSAqZGV2X25vZGVfb2JqLCB1MzIgdmFsdWUpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRydl9kYXRhICpkcnZfZGF0YXAgPSBkZXZfZ2V0X2RydmRhdGEoYnJpZGdlKTsKKworCWlmICghZHJ2X2RhdGFwKSB7CisJCXByX2VycigiJXM6IEZhaWxlZCwgc3RhdHVzIDB4JXhcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCWlmICghZGV2X25vZGVfb2JqKQorCQlzdGF0dXMgPSAtRUZBVUxUOworCisJaWYgKCFzdGF0dXMpIHsKKwkJLyogU3RvcmUgdGhlIEJyaWRnZSBkZXZpY2Ugb2JqZWN0IGluIHRoZSBSZWdpc3RyeSAqLworCisJCWlmICghKHN0cmNtcCgoY2hhciAqKWRldl9ub2RlX29iaiwgIlRJT01BUDE1MTAiKSkpCisJCQlkcnZfZGF0YXAtPmRldl9vYmplY3QgPSAodm9pZCAqKSB2YWx1ZTsKKwl9CisJaWYgKHN0YXR1cykKKwkJcHJfZXJyKCIlczogRmFpbGVkLCBzdGF0dXMgMHgleFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGNmZ19zZXRfb2JqZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgU3RvcmUgdGhlIERyaXZlciBPYmplY3QgaGFuZGxlCisgKi8KK2ludCBjZmdfc2V0X29iamVjdCh1MzIgdmFsdWUsIHU4IGR3X3R5cGUpCit7CisJaW50IHN0YXR1cyA9IC1FSU5WQUw7CisJc3RydWN0IGRydl9kYXRhICpkcnZfZGF0YXAgPSBkZXZfZ2V0X2RydmRhdGEoYnJpZGdlKTsKKworCWlmICghZHJ2X2RhdGFwKQorCQlyZXR1cm4gLUVQRVJNOworCisJc3dpdGNoIChkd190eXBlKSB7CisJY2FzZSAoUkVHX0RSVl9PQkpFQ1QpOgorCQlkcnZfZGF0YXAtPmRydl9vYmplY3QgPSAodm9pZCAqKXZhbHVlOworCQlzdGF0dXMgPSAwOworCQlicmVhazsKKwljYXNlIChSRUdfTUdSX09CSkVDVCk6CisJCWRydl9kYXRhcC0+bWdyX29iamVjdCA9ICh2b2lkICopdmFsdWU7CisJCXN0YXR1cyA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlpZiAoc3RhdHVzKQorCQlwcl9lcnIoIiVzOiBGYWlsZWQsIHN0YXR1cyAweCV4XG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3NlcnZpY2VzL250ZnkuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9zZXJ2aWNlcy9udGZ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJlYTY5OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9zZXJ2aWNlcy9udGZ5LmMKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIG50ZnkuYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBNYW5hZ2UgbGlzdHMgb2Ygbm90aWZpY2F0aW9uIGV2ZW50cy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhpcyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9udGZ5Lmg+CisKK2ludCBkc3Bfbm90aWZpZXJfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LAorCQkJICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgIG50ZnlfZXZlbnQgKm5lID0gY29udGFpbmVyX29mKHRoaXMsIHN0cnVjdCBudGZ5X2V2ZW50LAorCQkJCQkJCW5vdGlfYmxvY2spOworCWlmIChuZS0+ZXZlbnQgJiBldmVudCkKKwkJc3luY19zZXRfZXZlbnQoJm5lLT5zeW5jX29iaik7CisJcmV0dXJuIE5PVElGWV9PSzsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3NlcnZpY2VzL3NlcnZpY2VzLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvc2VydmljZXMvc2VydmljZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTdkZDZmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3NlcnZpY2VzL3NlcnZpY2VzLmMKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIHNlcnZpY2VzLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogUHJvdmlkZSBTRVJWSUNFUyBsb2FkaW5nLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRyYWNlICYgRGVidWcgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJjLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPUyBBZGFwdGF0aW9uIExheWVyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NmZy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9udGZ5Lmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3N5bmMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY2xrLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlzICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL3NlcnZpY2VzLmg+CisKKy8qCisgKiAgPT09PT09PT0gc2VydmljZXNfZXhpdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERpc2NvbnRpbnVlIHVzYWdlIG9mIG1vZHVsZTsgZnJlZSByZXNvdXJjZXMgd2hlbiByZWZlcmVuY2UgY291bnQKKyAqICAgICAgcmVhY2hlcyAwLgorICovCit2b2lkIHNlcnZpY2VzX2V4aXQodm9pZCkKK3sKKwljZmdfZXhpdCgpOworfQorCisvKgorICogID09PT09PT09IHNlcnZpY2VzX2luaXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplcyBTRVJWSUNFUyBtb2R1bGVzLgorICovCitib29sIHNlcnZpY2VzX2luaXQodm9pZCkKK3sKKwlib29sIHJldCA9IHRydWU7CisJYm9vbCBmY2ZnOworCisJLyogUGVyZm9ybSByZXF1aXJlZCBpbml0aWFsaXphdGlvbiBvZiBTRVJWSUNFUyBtb2R1bGVzLiAqLworCWZjZmcgPSBjZmdfaW5pdCgpOworCisJcmV0ID0gZmNmZzsKKworCWlmICghcmV0KSB7CisJCWlmIChmY2ZnKQorCQkJY2ZnX2V4aXQoKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3NlcnZpY2VzL3N5bmMuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9zZXJ2aWNlcy9zeW5jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAxMGIzNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9zZXJ2aWNlcy9zeW5jLmMKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBzeW5jLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogU3luY2hyb25pemF0aW9uIHNlcnZpY2VzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIb3N0IE9TICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvc3luYy5oPgorCitERUZJTkVfU1BJTkxPQ0soc3luY19sb2NrKTsKKworLyoqCisgKiBzeW5jX3NldF9ldmVudCgpIC0gc2V0IG9yIHNpZ25hbCBhbmQgc3BlY2lmaWVkIGV2ZW50CisgKiBAZXZlbnQ6CUV2ZW50IHRvIGJlIHNldC4uCisgKgorICogc2V0IHRoZSBAZXZlbnQsIGlmIHRoZXJlIGlzIGFuIHRocmVhZCB3YWl0aW5nIGZvciB0aGUgZXZlbnQKKyAqIGl0IHdpbGwgYmUgd2FrZW4gdXAsIHRoaXMgZnVuY3Rpb24gb25seSB3YWtlcyBvbmUgdGhyZWFkLgorICovCisKK3ZvaWQgc3luY19zZXRfZXZlbnQoc3RydWN0IHN5bmNfb2JqZWN0ICpldmVudCkKK3sKKwlzcGluX2xvY2tfYmgoJnN5bmNfbG9jayk7CisJY29tcGxldGUoJmV2ZW50LT5jb21wKTsKKwlpZiAoZXZlbnQtPm11bHRpX2NvbXApCisJCWNvbXBsZXRlKGV2ZW50LT5tdWx0aV9jb21wKTsKKwlzcGluX3VubG9ja19iaCgmc3luY19sb2NrKTsKK30KKworLyoqCisgKiBzeW5jX3dhaXRfb25fbXVsdGlwbGVfZXZlbnRzKCkgLSB3YWl0cyBmb3IgbXVsdGlwbGUgZXZlbnRzIHRvIGJlIHNldC4KKyAqIEBldmVudHM6CUFycmF5IG9mIGV2ZW50cyB0byB3YWl0IGZvciB0aGVtLgorICogQGNvdW50OgludW1iZXIgb2YgZWxlbWVudHMgb2YgdGhlIGFycmF5LgorICogQHRpbWVvdXQJdGltZW91dCBvbiB3YWl0aW5nIGZvciB0aGUgZXZldG5zLgorICogQHB1X2luZGV4CWluZGV4IG9mIHRoZSBldmVudCBzZXQuCisgKgorICogVGhpcyBmdW5jdGlvcyB3aWxsIHdhaXQgdW50aWwgYW55IG9mIHRoZSBhcnJheSBlbGVtZW50IGlzIHNldCBvciB1bnRpbAorICogdGltZW91dC4gSW4gY2FzZSBvZiBzdWNjZXNzIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAwIGFuZAorICogQHB1X2luZGV4IHdpbGwgc3RvcmUgdGhlIGluZGV4IG9mIHRoZSBhcnJheSBlbGVtZW50IHNldCBvciBpbiBjYXNlCisgKiBvZiB0aW1lb3V0IHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAtRVRJTUUgb3IgaW4gY2FzZSBvZgorICogaW50ZXJydXB0aW5nIGJ5IGEgc2lnbmFsIGl0IHdpbGwgcmV0dXJuIC1FUEVSTS4KKyAqLworCitpbnQgc3luY193YWl0X29uX211bHRpcGxlX2V2ZW50cyhzdHJ1Y3Qgc3luY19vYmplY3QgKipldmVudHMsCisJCQkJICAgICB1bnNpZ25lZCBjb3VudCwgdW5zaWduZWQgdGltZW91dCwKKwkJCQkgICAgIHVuc2lnbmVkICppbmRleCkKK3sKKwl1bnNpZ25lZCBpOworCWludCBzdGF0dXMgPSAtRVBFUk07CisJc3RydWN0IGNvbXBsZXRpb24gbV9jb21wOworCisJaW5pdF9jb21wbGV0aW9uKCZtX2NvbXApOworCisJaWYgKFNZTkNfSU5GSU5JVEUgPT0gdGltZW91dCkKKwkJdGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOworCisJc3Bpbl9sb2NrX2JoKCZzeW5jX2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmIChjb21wbGV0aW9uX2RvbmUoJmV2ZW50c1tpXS0+Y29tcCkpIHsKKwkJCUlOSVRfQ09NUExFVElPTihldmVudHNbaV0tPmNvbXApOworCQkJKmluZGV4ID0gaTsKKwkJCXNwaW5fdW5sb2NrX2JoKCZzeW5jX2xvY2spOworCQkJc3RhdHVzID0gMDsKKwkJCWdvdG8gZnVuY19lbmQ7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKwkJZXZlbnRzW2ldLT5tdWx0aV9jb21wID0gJm1fY29tcDsKKworCXNwaW5fdW5sb2NrX2JoKCZzeW5jX2xvY2spOworCisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgmbV9jb21wLAorCQkJCQltc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpKSkKKwkJc3RhdHVzID0gLUVUSU1FOworCisJc3Bpbl9sb2NrX2JoKCZzeW5jX2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmIChjb21wbGV0aW9uX2RvbmUoJmV2ZW50c1tpXS0+Y29tcCkpIHsKKwkJCUlOSVRfQ09NUExFVElPTihldmVudHNbaV0tPmNvbXApOworCQkJKmluZGV4ID0gaTsKKwkJCXN0YXR1cyA9IDA7CisJCX0KKwkJZXZlbnRzW2ldLT5tdWx0aV9jb21wID0gTlVMTDsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnN5bmNfbG9jayk7CitmdW5jX2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL0tjb25maWcKaW5kZXggMzY1N2UzMy4uYzcyNTM1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvS2NvbmZpZwpAQCAtMjYsOCArMjYsOCBAQAogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRtNjAwMC1hbHNhLgogCiBjb25maWcgVklERU9fVE02MDAwX0RWQgotCWJvb2wgIkRWQiBTdXBwb3J0IGZvciB0bTYwMDAgYmFzZWQgVFYgY2FyZHMiCi0JZGVwZW5kcyBvbiBWSURFT19UTTYwMDAgJiYgRFZCX0NPUkUgJiYgRVhQRVJJTUVOVEFMCisJdHJpc3RhdGUgIkRWQiBTdXBwb3J0IGZvciB0bTYwMDAgYmFzZWQgVFYgY2FyZHMiCisJZGVwZW5kcyBvbiBWSURFT19UTTYwMDAgJiYgRFZCX0NPUkUgJiYgVVNCICYmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBEVkJfWkwxMDM1MwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBEVkIgY2FyZHMgYmFzZWQgb24gdGhlIHRtNTYwMC90bTYwMDAgY2hpcC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL01ha2VmaWxlCmluZGV4IDkzMzcwZmMuLjc3ZTA2YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC9NYWtlZmlsZQpAQCAtMiwxNCArMiwxMiBAQAogCQkgICB0bTYwMDAtY29yZS5vICBcCiAJCSAgIHRtNjAwMC1pMmMubyAgIFwKIAkJICAgdG02MDAwLXZpZGVvLm8gXAotCQkgICB0bTYwMDAtc3Rkcy5vCi0KLWlmZXEgKCQoQ09ORklHX1ZJREVPX1RNNjAwMF9EVkIpLHkpCi10bTYwMDAtb2JqcyArPSB0bTYwMDAtZHZiLm8KLWVuZGlmCisJCSAgIHRtNjAwMC1zdGRzLm8gXAorCQkgICB0bTYwMDAtaW5wdXQubwogCiBvYmotJChDT05GSUdfVklERU9fVE02MDAwKSArPSB0bTYwMDAubwogb2JqLSQoQ09ORklHX1ZJREVPX1RNNjAwMF9BTFNBKSArPSB0bTYwMDAtYWxzYS5vCitvYmotJChDT05GSUdfVklERU9fVE02MDAwX0RWQikgKz0gdG02MDAwLWR2Yi5vCiAKIEVYVFJBX0NGTEFHUyA9IC1JZHJpdmVycy9tZWRpYS92aWRlbwogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL3RtNjAwMC1hbHNhLmMgYi9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL3RtNjAwMC1hbHNhLmMKaW5kZXggMjczZTI2ZS4uMDg3MTM3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtYWxzYS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvdG02MDAwLWFsc2EuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CkBAIC0zNiwzNCArMzcsMTEgQEAKIAl9IHdoaWxlICgwKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCURhdGEgdHlwZSBkZWNsYXJhdGlvbnMgLSBDYW4gYmUgbW9kZWQgdG8gYSBoZWFkZXIgZmlsZSBsYXRlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0cnVjdCBzbmRfdG02MDAwX2NhcmQgewotCXN0cnVjdCBzbmRfY2FyZCAgICAgICAgICAgICpjYXJkOwotCi0Jc3BpbmxvY2tfdCAgICAgICAgICAgICAgICAgcmVnX2xvY2s7Ci0KLQlhdG9taWNfdAkJICAgY291bnQ7Ci0KLQl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICBwZXJpb2Rfc2l6ZTsKLQl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICBudW1fcGVyaW9kczsKLQotCXN0cnVjdCB0bTYwMDBfY29yZSAgICAgICAgICpjb3JlOwotCXN0cnVjdCB0bTYwMDBfYnVmZmVyICAgICAgICpidWY7Ci0KLQlpbnQJCQkgICBidWZzaXplOwotCi0Jc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07Ci19OwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAJCQlNb2R1bGUgZ2xvYmFsIHN0YXRpYyB2YXJzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsJLyogSW5kZXggMC1NQVggKi8KLXN0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsgICAgICAgLyogSUQgZm9yIHRoaXMgY2FyZCAqLworCiBzdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSB7MSwgWzEgLi4uIChTTkRSVl9DQVJEUyAtIDEpXSA9IDF9OwogCiBtb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKQEAgLTEwMCwxMSArNzgsMTUgQEAKIAlzdHJ1Y3QgdG02MDAwX2NvcmUgKmNvcmUgPSBjaGlwLT5jb3JlOwogCWludCB2YWw7CiAKKwlkcHJpbnRrKDEsICJTdGFydGluZyBhdWRpbyBETUFcbiIpOworCiAJLyogRW5hYmxlcyBhdWRpbyAqLwogCXZhbCA9IHRtNjAwMF9nZXRfcmVnKGNvcmUsIFRNNjAxMF9SRVEwN19SQ0NfQUNUSVZFX1ZJREVPX0lGLCAweDApOwogCXZhbCB8PSAweDIwOwogCXRtNjAwMF9zZXRfcmVnKGNvcmUsIFRNNjAxMF9SRVEwN19SQ0NfQUNUSVZFX1ZJREVPX0lGLCB2YWwpOwogCisJdG02MDAwX3NldF9hdWRpb19iaXRyYXRlKGNvcmUsIDQ4MDAwKTsKKwogCXRtNjAwMF9zZXRfcmVnKGNvcmUsIFRNNjAxMF9SRVEwOF9SMDFfQV9JTklULCAweDgwKTsKIAogCXJldHVybiAwOwpAQCAtMTI5LDE5ICsxMTEsMzkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkc3BfYnVmZmVyX2ZyZWUoc3RydWN0IHNuZF90bTYwMDBfY2FyZCAqY2hpcCkKK3N0YXRpYyB2b2lkIGRzcF9idWZmZXJfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKLQlCVUdfT04oIWNoaXAtPmJ1ZnNpemUpOworCXN0cnVjdCBzbmRfdG02MDAwX2NhcmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CiAKIAlkcHJpbnRrKDIsICJGcmVlaW5nIGJ1ZmZlclxuIik7CiAKLQkvKiBGSVhNRTogRnJlZXMgYnVmZmVyICovCi0KLQljaGlwLT5idWZzaXplID0gMDsKLQotICAgICAgIHJldHVybiAwOworCXZmcmVlKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEpOworCXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEgPSBOVUxMOworCXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2J5dGVzID0gMDsKIH0KIAorc3RhdGljIGludCBkc3BfYnVmZmVyX2FsbG9jKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc25kX3RtNjAwMF9jYXJkICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJZHByaW50aygyLCAiQWxsb2NhdGluZyBidWZmZXJcbiIpOworCisJaWYgKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEpIHsKKwkJaWYgKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2J5dGVzID4gc2l6ZSkKKwkJCXJldHVybiAwOworCQlkc3BfYnVmZmVyX2ZyZWUoc3Vic3RyZWFtKTsKKwl9CisKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhID0gdm1hbGxvYyhzaXplKTsKKwlpZiAoIXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYnl0ZXMgPSBzaXplOworCisJcmV0dXJuIDA7Cit9CisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAkJCQlBTFNBIFBDTSBJbnRlcmZhY2UKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTU4LDE2ICsxNjAsMTYgQEAKIAkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCwKIAkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAogCi0JLnJhdGVzID0JCVNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgU05EUlZfUENNX1JBVEVfNDgwMDAsCi0JLnJhdGVfbWluID0JCTQ0MTAwLAorCS5yYXRlcyA9CQlTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkucmF0ZV9taW4gPQkJNDgwMDAsCiAJLnJhdGVfbWF4ID0JCTQ4MDAwLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAyLAotCS5wZXJpb2RfYnl0ZXNfbWluID0gREVGQVVMVF9GSUZPX1NJWkUvNCwKLQkucGVyaW9kX2J5dGVzX21heCA9IERFRkFVTFRfRklGT19TSVpFLzQsCisJLnBlcmlvZF9ieXRlc19taW4gPSA2MjcyMCwKKwkucGVyaW9kX2J5dGVzX21heCA9IDYyNzIwLAogCS5wZXJpb2RzX21pbiA9IDEsCiAJLnBlcmlvZHNfbWF4ID0gMTAyNCwKLQkuYnVmZmVyX2J5dGVzX21heCA9ICgxMDI0KjEwMjQpLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gNjI3MjAgKiA4LAogfTsKIAogLyoKQEAgLTIwMiwyOSArMjA0LDY0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdG02MDAwX2ZpbGxidWYoc3RydWN0IHRtNjAwMF9jb3JlICpjb3JlLCBjaGFyICpidWYsIGludCBzaXplKQoreworCXN0cnVjdCBzbmRfdG02MDAwX2NhcmQgKmNoaXAgPSBjb3JlLT5hZGV2OworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gY2hpcC0+c3Vic3RyZWFtOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWU7CisJaW50IHBlcmlvZF9lbGFwc2VkID0gMDsKKwl1bnNpZ25lZCBpbnQgc3RyaWRlLCBidWZfcG9zOworCisJaWYgKCFzaXplIHx8ICFzdWJzdHJlYW0pCisJCXJldHVybiAtRUlOVkFMOworCisJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlpZiAoIXJ1bnRpbWUgfHwgIXJ1bnRpbWUtPmRtYV9hcmVhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJ1Zl9wb3MgPSBjaGlwLT5idWZfcG9zOworCXN0cmlkZSA9IHJ1bnRpbWUtPmZyYW1lX2JpdHMgPj4gMzsKKworCWRwcmludGsoMSwgIkNvcHlpbmcgJWQgYnl0ZXMgYXQgJXBbJWRdIC0gYnVmIHNpemU9JWQgeCAlZFxuIiwgc2l6ZSwKKwkJcnVudGltZS0+ZG1hX2FyZWEsIGJ1Zl9wb3MsCisJCSh1bnNpZ25lZCBpbnQpcnVudGltZS0+YnVmZmVyX3NpemUsIHN0cmlkZSk7CisKKwlpZiAoYnVmX3BvcyArIHNpemUgPj0gcnVudGltZS0+YnVmZmVyX3NpemUgKiBzdHJpZGUpIHsKKwkJdW5zaWduZWQgaW50IGNudCA9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplICogc3RyaWRlIC0gYnVmX3BvczsKKwkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhICsgYnVmX3BvcywgYnVmLCBjbnQpOworCQltZW1jcHkocnVudGltZS0+ZG1hX2FyZWEsIGJ1ZiArIGNudCwgc2l6ZSAtIGNudCk7CisJfSBlbHNlCisJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSArIGJ1Zl9wb3MsIGJ1Ziwgc2l6ZSk7CisKKwljaGlwLT5idWZfcG9zICs9IHNpemU7CisJaWYgKGNoaXAtPmJ1Zl9wb3MgPj0gcnVudGltZS0+YnVmZmVyX3NpemUgKiBzdHJpZGUpCisJCWNoaXAtPmJ1Zl9wb3MgLT0gcnVudGltZS0+YnVmZmVyX3NpemUgKiBzdHJpZGU7CisKKwljaGlwLT5wZXJpb2RfcG9zICs9IHNpemU7CisJaWYgKGNoaXAtPnBlcmlvZF9wb3MgPj0gcnVudGltZS0+cGVyaW9kX3NpemUpIHsKKwkJY2hpcC0+cGVyaW9kX3BvcyAtPSBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKwkJcGVyaW9kX2VsYXBzZWQgPSAxOworCX0KKworCWlmIChwZXJpb2RfZWxhcHNlZCkKKwkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOworCisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBod19wYXJhbXMgY2FsbGJhY2sKICAqLwogc3RhdGljIGludCBzbmRfdG02MDAwX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCSAgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQogewotCXN0cnVjdCBzbmRfdG02MDAwX2NhcmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaW50IHNpemUsIHJjOwogCi0JaWYgKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEpIHsKLQkJZHNwX2J1ZmZlcl9mcmVlKGNoaXApOwotCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhID0gTlVMTDsKLQl9CisJc2l6ZSA9IHBhcmFtc19wZXJpb2RfYnl0ZXMoaHdfcGFyYW1zKSAqIHBhcmFtc19wZXJpb2RzKGh3X3BhcmFtcyk7CiAKLQljaGlwLT5wZXJpb2Rfc2l6ZSA9IHBhcmFtc19wZXJpb2RfYnl0ZXMoaHdfcGFyYW1zKTsKLQljaGlwLT5udW1fcGVyaW9kcyA9IHBhcmFtc19wZXJpb2RzKGh3X3BhcmFtcyk7Ci0JY2hpcC0+YnVmc2l6ZSA9IGNoaXAtPnBlcmlvZF9zaXplICogcGFyYW1zX3BlcmlvZHMoaHdfcGFyYW1zKTsKLQotCUJVR19PTighY2hpcC0+YnVmc2l6ZSk7Ci0KLQlkcHJpbnRrKDEsICJTZXR0aW5nIGJ1ZmZlclxuIik7Ci0KLQkvKiBGSVhNRTogQWxsb2NhdGUgYnVmZmVyIGZvciBhdWRpbyAqLwotCisJcmMgPSBkc3BfYnVmZmVyX2FsbG9jKHN1YnN0cmVhbSwgc2l6ZSk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMzQsMTMgKzI3MSw5IEBACiAgKi8KIHN0YXRpYyBpbnQgc25kX3RtNjAwMF9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewotCiAJc3RydWN0IHNuZF90bTYwMDBfY2FyZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAotCWlmIChzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhKSB7Ci0JCWRzcF9idWZmZXJfZnJlZShjaGlwKTsKLQkJc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSA9IE5VTEw7Ci0JfQorCV90bTYwMDBfc3RvcF9hdWRpb19kbWEoY2hpcCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI1MCw2ICsyODMsMTEgQEAKICAqLwogc3RhdGljIGludCBzbmRfdG02MDAwX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CisJc3RydWN0IHNuZF90bTYwMDBfY2FyZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCWNoaXAtPmJ1Zl9wb3MgPSAwOworCWNoaXAtPnBlcmlvZF9wb3MgPSAwOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4NywxMiArMzI1LDggQEAKIHN0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBzbmRfdG02MDAwX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF90bTYwMDBfY2FyZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXUxNiBjb3VudDsKIAotCWNvdW50ID0gYXRvbWljX3JlYWQoJmNoaXAtPmNvdW50KTsKLQotCXJldHVybiBydW50aW1lLT5wZXJpb2Rfc2l6ZSAqIChjb3VudCAmIChydW50aW1lLT5wZXJpb2RzLTEpKTsKKwlyZXR1cm4gY2hpcC0+YnVmX3BvczsKIH0KIAogLyoKQEAgLTMxMiwyMSArMzQ2LDYgQEAKIC8qCiAgKiBjcmVhdGUgYSBQQ00gZGV2aWNlCiAgKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF90bTYwMDBfcGNtKHN0cnVjdCBzbmRfdG02MDAwX2NhcmQgKmNoaXAsCi0JCQkJICAgIGludCBkZXZpY2UsIGNoYXIgKm5hbWUpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwotCi0JZXJyID0gc25kX3BjbV9uZXcoY2hpcC0+Y2FyZCwgbmFtZSwgZGV2aWNlLCAwLCAxLCAmcGNtKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7Ci0Jc3RyY3B5KHBjbS0+bmFtZSwgbmFtZSk7Ci0Jc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLCAmc25kX3RtNjAwMF9wY21fb3BzKTsKLQotCXJldHVybiAwOwotfQogCiAvKiBGSVhNRTogQ29udHJvbCBpbnRlcmZhY2UgLSBIb3cgdG8gY29udHJvbCB2b2x1bWUvbXV0ZT8gKi8KIApAQCAtMzM3LDI3ICszNTYsNDEgQEAKIC8qCiAgKiBBbHNhIENvbnN0cnVjdG9yIC0gQ29tcG9uZW50IHByb2JlCiAgKi8KLQotaW50IHRtNjAwMF9hdWRpb19pbml0KHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2LCBpbnQgaWR4KQoraW50IHRtNjAwMF9hdWRpb19pbml0KHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2KQogewotCXN0cnVjdCBzbmRfY2FyZCAgICAgICAgICpjYXJkOwotCXN0cnVjdCBzbmRfdG02MDAwX2NhcmQgICpjaGlwOwotCWludCAgICAgICAgICAgICAgICAgICAgIHJjLCBsZW47Ci0JY2hhciAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50WzE0XTsKKwlzdHJ1Y3Qgc25kX2NhcmQJCSpjYXJkOworCXN0cnVjdCBzbmRfdG02MDAwX2NhcmQJKmNoaXA7CisJaW50CQkJcmM7CisJc3RhdGljIGludAkJZGV2bnI7CisJY2hhcgkJCWNvbXBvbmVudFsxNF07CisJc3RydWN0IHNuZF9wY20JCSpwY207CiAKLQlpZiAoaWR4ID49IFNORFJWX0NBUkRTKQorCWlmICghZGV2KQorCQlyZXR1cm4gMDsKKworCWlmIChkZXZuciA+PSBTTkRSVl9DQVJEUykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoIWVuYWJsZVtpZHhdKQorCWlmICghZW5hYmxlW2Rldm5yXSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQlyYyA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtpZHhdLCBpZFtpZHhdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCXJjID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldm5yXSwgInRtNjAwMCIsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CiAJaWYgKHJjIDwgMCkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgY3JlYXRlIGNhcmQgaW5zdGFuY2UgJWRcbiIsIGlkeCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBjcmVhdGUgY2FyZCBpbnN0YW5jZSAlZFxuIiwgZGV2bnIpOwogCQlyZXR1cm4gcmM7CiAJfQorCXN0cmNweShjYXJkLT5kcml2ZXIsICJ0bTYwMDAtYWxzYSIpOworCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJUTTU2MDAvNjB4MCIpOworCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICJUTTU2MDAvNjB4MCBBdWRpbyBhdCBidXMgJWQgZGV2aWNlICVkIiwKKwkJZGV2LT51ZGV2LT5idXMtPmJ1c251bSwgZGV2LT51ZGV2LT5kZXZudW0pOwogCi0JY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisJc3ByaW50Zihjb21wb25lbnQsICJVU0IlMDR4OiUwNHgiLAorCQlsZTE2X3RvX2NwdShkZXYtPnVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQlsZTE2X3RvX2NwdShkZXYtPnVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisJc25kX2NvbXBvbmVudF9hZGQoY2FyZCwgY29tcG9uZW50KTsKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZkZXYtPnVkZXYtPmRldik7CisKKwljaGlwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF90bTYwMDBfY2FyZCksIEdGUF9LRVJORUwpOwogCWlmICghY2hpcCkgewogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3I7CkBAIC0zNjUsNDUgKzM5OCwyNCBAQAogCiAJY2hpcC0+Y29yZSA9IGRldjsKIAljaGlwLT5jYXJkID0gY2FyZDsKKwlkZXYtPmFkZXYgPSBjaGlwOworCXNwaW5fbG9ja19pbml0KCZjaGlwLT5yZWdfbG9jayk7CiAKLQlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAidG02MDAwLWFsc2EiKTsKLQlzcHJpbnRmKGNvbXBvbmVudCwgIlVTQiUwNHg6JTA0eCIsCi0JCWxlMTZfdG9fY3B1KGRldi0+dWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCi0JCWxlMTZfdG9fY3B1KGRldi0+dWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKLQlzbmRfY29tcG9uZW50X2FkZChjYXJkLCBjb21wb25lbnQpOwotCi0JaWYgKGRldi0+dWRldi0+ZGVzY3JpcHRvci5pTWFudWZhY3R1cmVyKQotCQlsZW4gPSB1c2Jfc3RyaW5nKGRldi0+dWRldiwKLQkJCQkgZGV2LT51ZGV2LT5kZXNjcmlwdG9yLmlNYW51ZmFjdHVyZXIsCi0JCQkJIGNhcmQtPmxvbmduYW1lLCBzaXplb2YoY2FyZC0+bG9uZ25hbWUpKTsKLQllbHNlCi0JCWxlbiA9IDA7Ci0KLQlpZiAobGVuID4gMCkKLQkJc3RybGNhdChjYXJkLT5sb25nbmFtZSwgIiAiLCBzaXplb2YoY2FyZC0+bG9uZ25hbWUpKTsKLQotCXN0cmxjYXQoY2FyZC0+bG9uZ25hbWUsIGNhcmQtPnNob3J0bmFtZSwgc2l6ZW9mKGNhcmQtPmxvbmduYW1lKSk7Ci0KLQlsZW4gPSBzdHJsY2F0KGNhcmQtPmxvbmduYW1lLCAiIGF0ICIsIHNpemVvZihjYXJkLT5sb25nbmFtZSkpOwotCi0JaWYgKGxlbiA8IHNpemVvZihjYXJkLT5sb25nbmFtZSkpCi0JCXVzYl9tYWtlX3BhdGgoZGV2LT51ZGV2LCBjYXJkLT5sb25nbmFtZSArIGxlbiwKLQkJCSAgICAgIHNpemVvZihjYXJkLT5sb25nbmFtZSkgLSBsZW4pOwotCi0Jc3RybGNhdChjYXJkLT5sb25nbmFtZSwKLQkJZGV2LT51ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfTE9XID8gIiwgbG93IHNwZWVkIiA6Ci0JCWRldi0+dWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwgPyAiLCBmdWxsIHNwZWVkIiA6Ci0JCQkJCQkJICAgIiwgaGlnaCBzcGVlZCIsCi0JCXNpemVvZihjYXJkLT5sb25nbmFtZSkpOwotCi0JcmMgPSBzbmRfdG02MDAwX3BjbShjaGlwLCAwLCAidG02MDAwIERpZ2l0YWwiKTsKKwlyYyA9IHNuZF9wY21fbmV3KGNhcmQsICJUTTYwMDAgQXVkaW8iLCAwLCAwLCAxLCAmcGNtKTsKIAlpZiAocmMgPCAwKQogCQlnb3RvIGVycm9yOwogCisJcGNtLT5pbmZvX2ZsYWdzID0gMDsKKwlwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7CisJc3RyY3B5KHBjbS0+bmFtZSwgIlRyaWRlbnQgVE01NjAwLzYweDAiKTsKKworCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwgJnNuZF90bTYwMDBfcGNtX29wcyk7CisKIAlyYyA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpOwogCWlmIChyYyA8IDApCiAJCWdvdG8gZXJyb3I7CiAKKwlkcHJpbnRrKDEsIlJlZ2lzdGVyZWQgYXVkaW8gZHJpdmVyIGZvciAlc1xuIiwgY2FyZC0+bG9uZ25hbWUpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTQxNCwxNCArNDI2LDMxIEBACiAKIHN0YXRpYyBpbnQgdG02MDAwX2F1ZGlvX2Zpbmkoc3RydWN0IHRtNjAwMF9jb3JlICpkZXYpCiB7CisJc3RydWN0IHNuZF90bTYwMDBfY2FyZAkqY2hpcCA9IGRldi0+YWRldjsKKworCWlmICghZGV2KQorCQlyZXR1cm4gMDsKKworCWlmICghY2hpcCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWNoaXAtPmNhcmQpCisJCXJldHVybiAwOworCisJc25kX2NhcmRfZnJlZShjaGlwLT5jYXJkKTsKKwljaGlwLT5jYXJkID0gTlVMTDsKKwlrZnJlZShjaGlwKTsKKwlkZXYtPmFkZXYgPSBOVUxMOworCiAJcmV0dXJuIDA7CiB9CiAKIHN0cnVjdCB0bTYwMDBfb3BzIGF1ZGlvX29wcyA9IHsKLQkuaWQJPSBUTTYwMDBfQVVESU8sCisJLnR5cGUJPSBUTTYwMDBfQVVESU8sCiAJLm5hbWUJPSAiVE02MDAwIEF1ZGlvIEV4dGVuc2lvbiIsCiAJLmluaXQJPSB0bTYwMDBfYXVkaW9faW5pdCwKIAkuZmluaQk9IHRtNjAwMF9hdWRpb19maW5pLAorCS5maWxsYnVmID0gdG02MDAwX2ZpbGxidWYsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCB0bTYwMDBfYWxzYV9yZWdpc3Rlcih2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtY2FyZHMuYyBiL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvdG02MDAwLWNhcmRzLmMKaW5kZXggNmE5YWU0MC4uOWQwOTFjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtY2FyZHMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL3RtNjAwMC1jYXJkcy5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KICNpbmNsdWRlIDxtZWRpYS90dmF1ZGlvLmg+CiAjaW5jbHVkZSA8bWVkaWEvaTJjLWFkZHIuaD4KKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KIAogI2luY2x1ZGUgInRtNjAwMC5oIgogI2luY2x1ZGUgInRtNjAwMC1yZWdzLmgiCkBAIC02OSw2ICs3MCw4IEBACiAJaW50ICAgICAgICAgICAgIGRlbW9kX2FkZHI7ICAgICAvKiBkZW1vZHVsYXRvciBhZGRyZXNzICovCiAKIAlzdHJ1Y3QgdG02MDAwX2dwaW8gZ3BpbzsKKworCWNoYXIJCSppcl9jb2RlczsKIH07CiAKIHN0cnVjdCB0bTYwMDBfYm9hcmQgdG02MDAwX2JvYXJkc1tdID0gewpAQCAtMjc2LDYgKzI3OSw3IEBACiAJCQkuZHZiX2xlZAk9IFRNNjAxMF9HUElPXzUsCiAJCQkuaXIJCT0gVE02MDEwX0dQSU9fMCwKIAkJfSwKKwkJLmlyX2NvZGVzID0gUkNfTUFQX05FQ19URVJSQVRFQ19DSU5FUkdZX1hTLAogCX0sCiAJW1RNNjAxMF9CT0FSRF9UV0lOSEFOX1RVNTAxXSA9IHsKIAkJLm5hbWUgICAgICAgICA9ICJUd2luaGFuIFRVNTAxKDcwNEQxKSIsCkBAIC0zNDcsNyArMzUxLDcgQEAKIAl9CiAJcmV0dXJuIChyYyk7CiB9Ci0KK0VYUE9SVF9TWU1CT0xfR1BMKHRtNjAwMF94YzUwMDBfY2FsbGJhY2spOwogCiAvKiBUdW5lciBjYWxsYmFjayB0byBwcm92aWRlIHRoZSBwcm9wZXIgZ3BpbyBjaGFuZ2VzIG5lZWRlZCBmb3IgeGMyMDI4ICovCiAKQEAgLTM2MSw2ICszNjUsOCBAQAogCiAJc3dpdGNoIChjb21tYW5kKSB7CiAJY2FzZSBYQzIwMjhfUkVTRVRfQ0xLOgorCQl0bTYwMDBfaXJfd2FpdChkZXYsIDApOworCiAJCXRtNjAwMF9zZXRfcmVnKGRldiwgUkVRXzA0X0VOX0RJU0FCTEVfTUNVX0lOVCwKIAkJCQkJMHgwMiwgYXJnKTsKIAkJbXNsZWVwKDEwKTsKQEAgLTQxMCwxMyArNDE2LDE0IEBACiAJCQkJbXNsZWVwKDEzMCk7CiAJCQkJYnJlYWs7CiAJCQl9CisKKwkJCXRtNjAwMF9pcl93YWl0KGRldiwgMSk7CiAJCQlicmVhazsKIAkJY2FzZSAxOgogCQkJdG02MDAwX3NldF9yZWcoZGV2LCBSRVFfMDRfRU5fRElTQUJMRV9NQ1VfSU5ULAogCQkJCQkJMHgwMiwgMHgwMSk7CiAJCQltc2xlZXAoMTApOwogCQkJYnJlYWs7Ci0KIAkJY2FzZSAyOgogCQkJcmMgPSB0bTYwMDBfaTJjX3Jlc2V0KGRldiwgMTAwKTsKIAkJCWJyZWFrOwpAQCAtNDI0LDYgKzQzMSw3IEBACiAJfQogCXJldHVybiByYzsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHRtNjAwMF90dW5lcl9jYWxsYmFjayk7CiAKIGludCB0bTYwMDBfY2FyZHNfc2V0dXAoc3RydWN0IHRtNjAwMF9jb3JlICpkZXYpCiB7CkBAIC02MzUsNiArNjQzLDggQEAKIAogCWRldi0+Z3BpbyA9IHRtNjAwMF9ib2FyZHNbZGV2LT5tb2RlbF0uZ3BpbzsKIAorCWRldi0+aXJfY29kZXMgPSB0bTYwMDBfYm9hcmRzW2Rldi0+bW9kZWxdLmlyX2NvZGVzOworCiAJZGV2LT5kZW1vZF9hZGRyID0gdG02MDAwX2JvYXJkc1tkZXYtPm1vZGVsXS5kZW1vZF9hZGRyOwogCiAJZGV2LT5jYXBzID0gdG02MDAwX2JvYXJkc1tkZXYtPm1vZGVsXS5jYXBzOwpAQCAtNjgxLDMxICs2OTEsMTMgQEAKIAkJZ290byBlcnI7CiAKIAl0bTYwMDBfYWRkX2ludG9fZGV2bGlzdChkZXYpOwotCiAJdG02MDAwX2luaXRfZXh0ZW5zaW9uKGRldik7CiAKLQlpZiAoZGV2LT5jYXBzLmhhc19kdmIpIHsKLQkJZGV2LT5kdmIgPSBremFsbG9jKHNpemVvZigqKGRldi0+ZHZiKSksIEdGUF9LRVJORUwpOwotCQlpZiAoIWRldi0+ZHZiKSB7Ci0JCQlyYyA9IC1FTk9NRU07Ci0JCQlnb3RvIGVycjI7Ci0JCX0KKwl0bTYwMDBfaXJfaW5pdChkZXYpOwogCi0jaWZkZWYgQ09ORklHX1ZJREVPX1RNNjAwMF9EVkIKLQkJcmMgPSB0bTYwMDBfZHZiX3JlZ2lzdGVyKGRldik7Ci0JCWlmIChyYyA8IDApIHsKLQkJCWtmcmVlKGRldi0+ZHZiKTsKLQkJCWRldi0+ZHZiID0gTlVMTDsKLQkJCWdvdG8gZXJyMjsKLQkJfQotI2VuZGlmCi0JfQogCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAlyZXR1cm4gMDsKIAotZXJyMjoKLQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsKLQogZXJyOgogCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAlyZXR1cm4gcmM7CkBAIC03MjQsNyArNzE2LDcgQEAKIAl1bnNpZ25lZCBpbnQgc2l6ZSA9IHRtcCAmIDB4N2ZmOwogCiAJaWYgKHVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQotCQlzaXplID0gc2l6ZSAqIGhiX211bHQgKHRtcCk7CisJCXNpemUgPSBzaXplICogaGJfbXVsdCh0bXApOwogCiAJaWYgKHNpemUgPiB0bV9lcC0+bWF4c2l6ZSkgewogCQl0bV9lcC0+ZW5kcCA9IGN1cnJfZTsKQEAgLTg0OCw2ICs4NDAsMTkgQEAKIAkJCQkJCQkgJmRldi0+aXNvY19vdXQpOwogCQkJCX0KIAkJCQlicmVhazsKKwkJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSU5UOgorCQkJCWlmICghZGlyX291dCkgeworCQkJCQlnZXRfbWF4X2VuZHBvaW50KHVzYmRldiwKKwkJCQkJCQkmaW50ZXJmYWNlLT5hbHRzZXR0aW5nW2ldLAorCQkJCQkJCSJJTlQgSU4iLCBlLAorCQkJCQkJCSZkZXYtPmludF9pbik7CisJCQkJfSBlbHNlIHsKKwkJCQkJZ2V0X21heF9lbmRwb2ludCh1c2JkZXYsCisJCQkJCQkJJmludGVyZmFjZS0+YWx0c2V0dGluZ1tpXSwKKwkJCQkJCQkiSU5UIE9VVCIsIGUsCisJCQkJCQkJJmRldi0+aW50X291dCk7CisJCQkJfQorCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJfQpAQCAtOTA2LDEyICs5MTEsNyBAQAogCiAJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAotI2lmZGVmIENPTkZJR19WSURFT19UTTYwMDBfRFZCCi0JaWYgKGRldi0+ZHZiKSB7Ci0JCXRtNjAwMF9kdmJfdW5yZWdpc3RlcihkZXYpOwotCQlrZnJlZShkZXYtPmR2Yik7Ci0JfQotI2VuZGlmCisJdG02MDAwX2lyX2ZpbmkoZGV2KTsKIAogCWlmIChkZXYtPmdwaW8ucG93ZXJfbGVkKSB7CiAJCXN3aXRjaCAoZGV2LT5tb2RlbCkgewpAQCAtOTQyLDggKzk0Miw4IEBACiAKIAl1c2JfcHV0X2RldihkZXYtPnVkZXYpOwogCi0JdG02MDAwX3JlbW92ZV9mcm9tX2Rldmxpc3QoZGV2KTsKIAl0bTYwMDBfY2xvc2VfZXh0ZW5zaW9uKGRldik7CisJdG02MDAwX3JlbW92ZV9mcm9tX2Rldmxpc3QoZGV2KTsKIAogCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAlrZnJlZShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtY29yZS5jCmluZGV4IGMzNjkwZTMuLmNkZWQ0MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvdG02MDAwLWNvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL3RtNjAwMC1jb3JlLmMKQEAgLTMyLDY2ICszMiw2NCBAQAogCiAjZGVmaW5lIFVTQl9USU1FT1VUCTUqSFogLyogbXMgKi8KIAotaW50IHRtNjAwMF9yZWFkX3dyaXRlX3VzYiAoc3RydWN0IHRtNjAwMF9jb3JlICpkZXYsIHU4IHJlcV90eXBlLCB1OCByZXEsCi0JCQkgICB1MTYgdmFsdWUsIHUxNiBpbmRleCwgdTggKmJ1ZiwgdTE2IGxlbikKK2ludCB0bTYwMDBfcmVhZF93cml0ZV91c2Ioc3RydWN0IHRtNjAwMF9jb3JlICpkZXYsIHU4IHJlcV90eXBlLCB1OCByZXEsCisJCQkgIHUxNiB2YWx1ZSwgdTE2IGluZGV4LCB1OCAqYnVmLCB1MTYgbGVuKQogewogCWludCAgICAgICAgICByZXQsIGk7CiAJdW5zaWduZWQgaW50IHBpcGU7Ci0Jc3RhdGljIGludCAgIGluaT0wLCBsYXN0PTAsIG49MDsKLQl1OAkgICAgICpkYXRhPU5VTEw7CisJc3RhdGljIGludCAgIGluaSA9IDAsIGxhc3QgPSAwLCBuID0gMDsKKwl1OAkgICAgICpkYXRhID0gTlVMTDsKIAogCWlmIChsZW4pCiAJCWRhdGEgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CiAKIAogCWlmIChyZXFfdHlwZSAmIFVTQl9ESVJfSU4pCi0JCXBpcGU9dXNiX3JjdmN0cmxwaXBlKGRldi0+dWRldiwgMCk7CisJCXBpcGUgPSB1c2JfcmN2Y3RybHBpcGUoZGV2LT51ZGV2LCAwKTsKIAllbHNlIHsKLQkJcGlwZT11c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKTsKKwkJcGlwZSA9IHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApOwogCQltZW1jcHkoZGF0YSwgYnVmLCBsZW4pOwogCX0KIAogCWlmICh0bTYwMDBfZGVidWcgJiBWNEwyX0RFQlVHX0kyQykgewogCQlpZiAoIWluaSkKLQkJCWxhc3Q9aW5pPWppZmZpZXM7CisJCQlsYXN0ID0gaW5pID0gamlmZmllczsKIAogCQlwcmludGsoIiUwNmkgKGRldiAlcCwgcGlwZSAlMDh4KTogIiwgbiwgZGV2LT51ZGV2LCBwaXBlKTsKIAotCQlwcmludGsoICIlczogJTA2dSBtcyAlMDZ1IG1zICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAiLAotCQkJKHJlcV90eXBlICYgVVNCX0RJUl9JTik/IiBJTiI6Ik9VVCIsCisJCXByaW50aygiJXM6ICUwNnUgbXMgJTA2dSBtcyAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggIiwKKwkJCShyZXFfdHlwZSAmIFVTQl9ESVJfSU4pID8gIiBJTiIgOiAiT1VUIiwKIAkJCWppZmZpZXNfdG9fbXNlY3MoamlmZmllcy1sYXN0KSwKIAkJCWppZmZpZXNfdG9fbXNlY3MoamlmZmllcy1pbmkpLAotCQkJcmVxX3R5cGUsIHJlcSx2YWx1ZSYweGZmLHZhbHVlPj44LCBpbmRleCYweGZmLCBpbmRleD4+OCwKLQkJCWxlbiYweGZmLCBsZW4+PjgpOwotCQlsYXN0PWppZmZpZXM7CisJCQlyZXFfdHlwZSwgcmVxLCB2YWx1ZSYweGZmLCB2YWx1ZT4+OCwgaW5kZXgmMHhmZiwKKwkJCWluZGV4Pj44LCBsZW4mMHhmZiwgbGVuPj44KTsKKwkJbGFzdCA9IGppZmZpZXM7CiAJCW4rKzsKIAotCQlpZiAoICEocmVxX3R5cGUgJiBVU0JfRElSX0lOKSApIHsKKwkJaWYgKCEocmVxX3R5cGUgJiBVU0JfRElSX0lOKSkgewogCQkJcHJpbnRrKCI+Pj4gIik7Ci0JCQlmb3IgKGk9MDtpPGxlbjtpKyspIHsKLQkJCQlwcmludGsoIiAlMDJ4IixidWZbaV0pOwotCQkJfQorCQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQkJCXByaW50aygiICUwMngiLCBidWZbaV0pOwogCQlwcmludGsoIlxuIik7CiAJCX0KIAl9CiAKLQlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LCBwaXBlLCByZXEsIHJlcV90eXBlLCB2YWx1ZSwgaW5kZXgsIGRhdGEsCi0JCQkgICAgICBsZW4sIFVTQl9USU1FT1VUKTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LCBwaXBlLCByZXEsIHJlcV90eXBlLCB2YWx1ZSwgaW5kZXgsCisJCQkgICAgICBkYXRhLCBsZW4sIFVTQl9USU1FT1VUKTsKIAogCWlmIChyZXFfdHlwZSAmICBVU0JfRElSX0lOKQogCQltZW1jcHkoYnVmLCBkYXRhLCBsZW4pOwogCiAJaWYgKHRtNjAwMF9kZWJ1ZyAmIFY0TDJfREVCVUdfSTJDKSB7Ci0JCWlmIChyZXQ8MCkgeworCQlpZiAocmV0IDwgMCkgewogCQkJaWYgKHJlcV90eXBlICYgIFVTQl9ESVJfSU4pCi0JCQkJcHJpbnRrKCI8PDwgKGxlbj0lZClcbiIsbGVuKTsKKwkJCQlwcmludGsoIjw8PCAobGVuPSVkKVxuIiwgbGVuKTsKIAogCQkJcHJpbnRrKCIlczogRXJyb3IgIyVkXG4iLCBfX0ZVTkNUSU9OX18sIHJldCk7CiAJCX0gZWxzZSBpZiAocmVxX3R5cGUgJiAgVVNCX0RJUl9JTikgewogCQkJcHJpbnRrKCI8PDwgIik7Ci0JCQlmb3IgKGk9MDtpPGxlbjtpKyspIHsKLQkJCQlwcmludGsoIiAlMDJ4IixidWZbaV0pOwotCQkJfQorCQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQkJCXByaW50aygiICUwMngiLCBidWZbaV0pOwogCQkJcHJpbnRrKCJcbiIpOwogCQl9CiAJfQpAQCAtMTAzLDUyICsxMDEsNTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgdG02MDAwX3NldF9yZWcgKHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2LCB1OCByZXEsIHUxNiB2YWx1ZSwgdTE2IGluZGV4KQoraW50IHRtNjAwMF9zZXRfcmVnKHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2LCB1OCByZXEsIHUxNiB2YWx1ZSwgdTE2IGluZGV4KQogewogCXJldHVybgotCQl0bTYwMDBfcmVhZF93cml0ZV91c2IgKGRldiwgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IsCi0JCQkJICAgICAgIHJlcSwgdmFsdWUsIGluZGV4LCBOVUxMLCAwKTsKKwkJdG02MDAwX3JlYWRfd3JpdGVfdXNiKGRldiwgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IsCisJCQkJICAgICAgcmVxLCB2YWx1ZSwgaW5kZXgsIE5VTEwsIDApOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodG02MDAwX3NldF9yZWcpOwogCi1pbnQgdG02MDAwX2dldF9yZWcgKHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2LCB1OCByZXEsIHUxNiB2YWx1ZSwgdTE2IGluZGV4KQoraW50IHRtNjAwMF9nZXRfcmVnKHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2LCB1OCByZXEsIHUxNiB2YWx1ZSwgdTE2IGluZGV4KQogewogCWludCByYzsKIAl1OCBidWZbMV07CiAKLQlyYz10bTYwMDBfcmVhZF93cml0ZV91c2IgKGRldiwgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiwgcmVxLAotCQkJCSAgICAgICB2YWx1ZSwgaW5kZXgsIGJ1ZiwgMSk7CisJcmMgPSB0bTYwMDBfcmVhZF93cml0ZV91c2IoZGV2LCBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SLCByZXEsCisJCQkJCXZhbHVlLCBpbmRleCwgYnVmLCAxKTsKIAotCWlmIChyYzwwKQorCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKIAogCXJldHVybiAqYnVmOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodG02MDAwX2dldF9yZWcpOwogCi1pbnQgdG02MDAwX2dldF9yZWcxNiAoc3RydWN0IHRtNjAwMF9jb3JlICpkZXYsIHU4IHJlcSwgdTE2IHZhbHVlLCB1MTYgaW5kZXgpCitpbnQgdG02MDAwX2dldF9yZWcxNihzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldiwgdTggcmVxLCB1MTYgdmFsdWUsIHUxNiBpbmRleCkKIHsKIAlpbnQgcmM7CiAJdTggYnVmWzJdOwogCi0JcmM9dG02MDAwX3JlYWRfd3JpdGVfdXNiIChkZXYsIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IsIHJlcSwKLQkJCQkgICAgICAgdmFsdWUsIGluZGV4LCBidWYsIDIpOworCXJjID0gdG02MDAwX3JlYWRfd3JpdGVfdXNiKGRldiwgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiwgcmVxLAorCQkJCQl2YWx1ZSwgaW5kZXgsIGJ1ZiwgMik7CiAKLQlpZiAocmM8MCkKKwlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKIAlyZXR1cm4gYnVmWzFdfGJ1ZlswXTw8ODsKIH0KIAotaW50IHRtNjAwMF9nZXRfcmVnMzIgKHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2LCB1OCByZXEsIHUxNiB2YWx1ZSwgdTE2IGluZGV4KQoraW50IHRtNjAwMF9nZXRfcmVnMzIoc3RydWN0IHRtNjAwMF9jb3JlICpkZXYsIHU4IHJlcSwgdTE2IHZhbHVlLCB1MTYgaW5kZXgpCiB7CiAJaW50IHJjOwogCXU4IGJ1Zls0XTsKIAotCXJjPXRtNjAwMF9yZWFkX3dyaXRlX3VzYiAoZGV2LCBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SLCByZXEsCi0JCQkJICAgICAgIHZhbHVlLCBpbmRleCwgYnVmLCA0KTsKKwlyYyA9IHRtNjAwMF9yZWFkX3dyaXRlX3VzYihkZXYsIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IsIHJlcSwKKwkJCQkJdmFsdWUsIGluZGV4LCBidWYsIDQpOwogCi0JaWYgKHJjPDApCisJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCiAJcmV0dXJuIGJ1ZlszXSB8IGJ1ZlsyXSA8PCA4IHwgYnVmWzFdIDw8IDE2IHwgYnVmWzBdIDw8IDI0OwpAQCAtMTg4LDcgKzE4Niw3IEBACiAJfQogfQogCi1pbnQgdG02MDAwX2luaXRfYW5hbG9nX21vZGUgKHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2KQoraW50IHRtNjAwMF9pbml0X2FuYWxvZ19tb2RlKHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2KQogewogCWlmIChkZXYtPmRldl90eXBlID09IFRNNjAxMCkgewogCQlpbnQgdmFsOwpAQCAtMjk0LDEyICsyOTIsMTAgQEAKIAkJLyogRW5hYmxlcyBzb2Z0IHJlc2V0ICovCiAJCXRtNjAwMF9zZXRfcmVnKGRldiwgVE02MDEwX1JFUTA3X1IzRl9SRVNFVCwgMHgwMSk7CiAKLQkJaWYgKGRldi0+c2NhbGVyKSB7CisJCWlmIChkZXYtPnNjYWxlcikKIAkJCXRtNjAwMF9zZXRfcmVnKGRldiwgVE02MDEwX1JFUTA3X1JDMF9BQ1RJVkVfVklERU9fU09VUkNFLCAweDIwKTsKLQkJfSBlbHNlIHsKLQkJCS8qIEVuYWJsZSBIZmlsdGVyIGFuZCBkaXNhYmxlIFRTIERyb3AgZXJyICovCisJCWVsc2UJLyogRW5hYmxlIEhmaWx0ZXIgYW5kIGRpc2FibGUgVFMgRHJvcCBlcnIgKi8KIAkJCXRtNjAwMF9zZXRfcmVnKGRldiwgVE02MDEwX1JFUTA3X1JDMF9BQ1RJVkVfVklERU9fU09VUkNFLCAweDgwKTsKLQkJfQogCiAJCXRtNjAwMF9zZXRfcmVnKGRldiwgVE02MDEwX1JFUTA3X1JDM19IU1RBUlQxLCAweDg4KTsKIAkJdG02MDAwX3NldF9yZWcoZGV2LCBUTTYwMTBfUkVRMDdfUkQ4X0lSX1dBS0VVUF9TRUwsIDB4MjMpOwpAQCAtMzMyLDEzICszMjgsMTMgQEAKIAkvKkZJWE1FOiBIYWNrISEhICovCiAJc3RydWN0IHY0bDJfZnJlcXVlbmN5IGY7CiAJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKLQlmLmZyZXF1ZW5jeT1kZXYtPmZyZXE7CisJZi5mcmVxdWVuY3kgPSBkZXYtPmZyZXE7CiAJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIHR1bmVyLCBzX2ZyZXF1ZW5jeSwgJmYpOwogCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAogCW1zbGVlcCgxMDApOwotCXRtNjAwMF9zZXRfc3RhbmRhcmQgKGRldiwgJmRldi0+bm9ybSk7Ci0JdG02MDAwX3NldF9hdWRpb19iaXRyYXRlIChkZXYsNDgwMDApOworCXRtNjAwMF9zZXRfc3RhbmRhcmQoZGV2LCAmZGV2LT5ub3JtKTsKKwl0bTYwMDBfc2V0X2F1ZGlvX2JpdHJhdGUoZGV2LCA0ODAwMCk7CiAKIAkvKiBzd2l0Y2ggZHZiIGxlZCBvZmYgKi8KIAlpZiAoZGV2LT5ncGlvLmR2Yl9sZWQpIHsKQEAgLTM0OSw3ICszNDUsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgdG02MDAwX2luaXRfZGlnaXRhbF9tb2RlIChzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldikKK2ludCB0bTYwMDBfaW5pdF9kaWdpdGFsX21vZGUoc3RydWN0IHRtNjAwMF9jb3JlICpkZXYpCiB7CiAJaWYgKGRldi0+ZGV2X3R5cGUgPT0gVE02MDEwKSB7CiAJCWludCB2YWw7CkBAIC0zNjYsMTAgKzM2Miw4IEBACiAJCXRtNjAwMF9zZXRfcmVnKGRldiwgVE02MDEwX1JFUTA4X1JFMl9QT1dFUl9ET1dOX0NUUkwxLCAweGZjKTsKIAkJdG02MDAwX3NldF9yZWcoZGV2LCBUTTYwMTBfUkVRMDhfUkU2X1BPV0VSX0RPV05fQ1RSTDIsIDB4ZmYpOwogCQl0bTYwMDBfc2V0X3JlZyhkZXYsIFRNNjAxMF9SRVEwOF9SRjFfQUFEQ19QT1dFUl9ET1dOLCAweGZlKTsKLQkJdG02MDAwX3JlYWRfd3JpdGVfdXNiIChkZXYsIDB4YzAsIDB4MGUsIDB4MDBjMiwgMHgwMDA4LCBidWYsIDIpOwotCQlwcmludGsgKEtFUk5fSU5GTyAiYnVmICUjeCAlI3ggXG4iLCBidWZbMF0sIGJ1ZlsxXSk7Ci0KLQorCQl0bTYwMDBfcmVhZF93cml0ZV91c2IoZGV2LCAweGMwLCAweDBlLCAweDAwYzIsIDB4MDAwOCwgYnVmLCAyKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyJidWYgJSN4ICUjeFxuIiwgYnVmWzBdLCBidWZbMV0pOwogCX0gZWxzZSAgewogCQl0bTYwMDBfc2V0X3JlZyhkZXYsIFRNNjAxMF9SRVEwN19SRkZfU09GVF9SRVNFVCwgMHgwOCk7CiAJCXRtNjAwMF9zZXRfcmVnKGRldiwgVE02MDEwX1JFUTA3X1JGRl9TT0ZUX1JFU0VULCAweDAwKTsKQEAgLTM3Nyw3ICszNzEsNyBAQAogCQl0bTYwMDBfc2V0X3JlZyhkZXYsIFRNNjAxMF9SRVEwN19SRDhfSVJfUFVMU0VfQ05UMCwgMHgwOCk7CiAJCXRtNjAwMF9zZXRfcmVnKGRldiwgVE02MDEwX1JFUTA3X1JFMl9PVVRfU0VMMiwgMHgwYyk7CiAJCXRtNjAwMF9zZXRfcmVnKGRldiwgVE02MDEwX1JFUTA3X1JFOF9UWVBFU0VMX01PU19JMlMsIDB4ZmYpOwotCQl0bTYwMDBfc2V0X3JlZyAoZGV2LCBSRVFfMDdfU0VUX0dFVF9BVlJFRywgMHgwMGViLCAweGQ4KTsKKwkJdG02MDAwX3NldF9yZWcoZGV2LCBSRVFfMDdfU0VUX0dFVF9BVlJFRywgMHgwMGViLCAweGQ4KTsKIAkJdG02MDAwX3NldF9yZWcoZGV2LCBUTTYwMTBfUkVRMDdfUkMwX0FDVElWRV9WSURFT19TT1VSQ0UsIDB4NDApOwogCQl0bTYwMDBfc2V0X3JlZyhkZXYsIFRNNjAxMF9SRVEwN19SQzFfVFJFU0hPTEQsIDB4ZDApOwogCQl0bTYwMDBfc2V0X3JlZyhkZXYsIFRNNjAxMF9SRVEwN19SQzNfSFNUQVJUMSwgMHgwOSk7CkBAIC0zODgsMTQgKzM4MiwxNCBAQAogCiAJCXRtNjAwMF9zZXRfcmVnKGRldiwgVE02MDEwX1JFUTA3X1JFMl9PVVRfU0VMMiwgMHgwYyk7CiAJCXRtNjAwMF9zZXRfcmVnKGRldiwgVE02MDEwX1JFUTA3X1JFOF9UWVBFU0VMX01PU19JMlMsIDB4ZmYpOwotCQl0bTYwMDBfc2V0X3JlZyAoZGV2LCBSRVFfMDdfU0VUX0dFVF9BVlJFRywgMHgwMGViLCAweDA4KTsKKwkJdG02MDAwX3NldF9yZWcoZGV2LCBSRVFfMDdfU0VUX0dFVF9BVlJFRywgMHgwMGViLCAweDA4KTsKIAkJbXNsZWVwKDUwKTsKIAotCQl0bTYwMDBfc2V0X3JlZyAoZGV2LCBSRVFfMDRfRU5fRElTQUJMRV9NQ1VfSU5ULCAweDAwMjAsIDB4MDApOworCQl0bTYwMDBfc2V0X3JlZyhkZXYsIFJFUV8wNF9FTl9ESVNBQkxFX01DVV9JTlQsIDB4MDAyMCwgMHgwMCk7CiAJCW1zbGVlcCg1MCk7Ci0JCXRtNjAwMF9zZXRfcmVnIChkZXYsIFJFUV8wNF9FTl9ESVNBQkxFX01DVV9JTlQsIDB4MDAyMCwgMHgwMSk7CisJCXRtNjAwMF9zZXRfcmVnKGRldiwgUkVRXzA0X0VOX0RJU0FCTEVfTUNVX0lOVCwgMHgwMDIwLCAweDAxKTsKIAkJbXNsZWVwKDUwKTsKLQkJdG02MDAwX3NldF9yZWcgKGRldiwgUkVRXzA0X0VOX0RJU0FCTEVfTUNVX0lOVCwgMHgwMDIwLCAweDAwKTsKKwkJdG02MDAwX3NldF9yZWcoZGV2LCBSRVFfMDRfRU5fRElTQUJMRV9NQ1VfSU5ULCAweDAwMjAsIDB4MDApOwogCQltc2xlZXAoMTAwKTsKIAl9CiAKQEAgLTQwNyw2ICs0MDEsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKHRtNjAwMF9pbml0X2RpZ2l0YWxfbW9kZSk7CiAKIHN0cnVjdCByZWdfaW5pdCB7CiAJdTggcmVxOwpAQCAtNTY2LDkgKzU2MSw5IEBACiAJeyBUTTYwMTBfUkVRMDdfUkQ4X0lSX1dBS0VVUF9TRUwsICAweGZmIH0sCiB9OwogCi1pbnQgdG02MDAwX2luaXQgKHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2KQoraW50IHRtNjAwMF9pbml0KHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2KQogewotCWludCBib2FyZCwgcmM9MCwgaSwgc2l6ZTsKKwlpbnQgYm9hcmQsIHJjID0gMCwgaSwgc2l6ZTsKIAlzdHJ1Y3QgcmVnX2luaXQgKnRhYjsKIAogCWlmIChkZXYtPmRldl90eXBlID09IFRNNjAxMCkgewpAQCAtNTgwLDEyICs1NzUsMTIgQEAKIAl9CiAKIAkvKiBMb2FkIGJvYXJkJ3MgaW5pdGlhbGl6YXRpb24gdGFibGUgKi8KLQlmb3IgKGk9MDsgaTwgc2l6ZTsgaSsrKSB7Ci0JCXJjPSB0bTYwMDBfc2V0X3JlZyAoZGV2LCB0YWJbaV0ucmVxLCB0YWJbaV0ucmVnLCB0YWJbaV0udmFsKTsKLQkJaWYgKHJjPDApIHsKLQkJCXByaW50ayAoS0VSTl9FUlIgIkVycm9yICVpIHdoaWxlIHNldHRpbmcgcmVxICVkLCAiCi0JCQkJCSAicmVnICVkIHRvIHZhbHVlICVkXG4iLCByYywKLQkJCQkJIHRhYltpXS5yZXEsdGFiW2ldLnJlZywgdGFiW2ldLnZhbCk7CisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQlyYyA9IHRtNjAwMF9zZXRfcmVnKGRldiwgdGFiW2ldLnJlcSwgdGFiW2ldLnJlZywgdGFiW2ldLnZhbCk7CisJCWlmIChyYyA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgJWkgd2hpbGUgc2V0dGluZyByZXEgJWQsICIKKwkJCQkJInJlZyAlZCB0byB2YWx1ZSAlZFxuIiwgcmMsCisJCQkJCXRhYltpXS5yZXEsIHRhYltpXS5yZWcsIHRhYltpXS52YWwpOwogCQkJcmV0dXJuIHJjOwogCQl9CiAJfQpAQCAtNTkzLDEyICs1ODgsMTEgQEAKIAltc2xlZXAoNSk7IC8qIEp1c3QgdG8gYmUgY29uc2VydmF0aXZlICovCiAKIAkvKiBDaGVjayBib2FyZCB2ZXJzaW9uIC0gbWF5YmUgMTBNb29ucyBzcGVjaWZpYyAqLwotCWJvYXJkPXRtNjAwMF9nZXRfcmVnMzIgKGRldiwgUkVRXzQwX0dFVF9WRVJTSU9OLCAwLCAwKTsKLQlpZiAoYm9hcmQgPj0wKSB7Ci0JCXByaW50ayAoS0VSTl9JTkZPICJCb2FyZCB2ZXJzaW9uID0gMHglMDh4XG4iLGJvYXJkKTsKLQl9IGVsc2UgewotCQlwcmludGsgKEtFUk5fRVJSICJFcnJvciAlaSB3aGlsZSByZXRyaWV2aW5nIGJvYXJkIHZlcnNpb25cbiIsYm9hcmQpOwotCX0KKwlib2FyZCA9IHRtNjAwMF9nZXRfcmVnMzIoZGV2LCBSRVFfNDBfR0VUX1ZFUlNJT04sIDAsIDApOworCWlmIChib2FyZCA+PSAwKQorCQlwcmludGsoS0VSTl9JTkZPICJCb2FyZCB2ZXJzaW9uID0gMHglMDh4XG4iLCBib2FyZCk7CisJZWxzZQorCQlwcmludGsoS0VSTl9FUlIgIkVycm9yICVpIHdoaWxlIHJldHJpZXZpbmcgYm9hcmQgdmVyc2lvblxuIiwgYm9hcmQpOwogCiAJcmMgPSB0bTYwMDBfY2FyZHNfc2V0dXAoZGV2KTsKIApAQCAtNjA5LDIzICs2MDMsMzIgQEAKIHsKIAlpbnQgdmFsOwogCi0JdmFsPXRtNjAwMF9nZXRfcmVnIChkZXYsIFJFUV8wN19TRVRfR0VUX0FWUkVHLCAweGViLCAweDApOwotcHJpbnRrKCJPcmlnaW5hbCB2YWx1ZT0lZFxuIix2YWwpOwotCWlmICh2YWw8MCkKKwlpZiAoZGV2LT5kZXZfdHlwZSA9PSBUTTYwMTApIHsKKwkJdmFsID0gdG02MDAwX2dldF9yZWcoZGV2LCBUTTYwMTBfUkVRMDhfUjBBX0FfSTJTX01PRCwgMCk7CisJCWlmICh2YWwgPCAwKQorCQkJcmV0dXJuIHZhbDsKKwkJdmFsID0gKHZhbCAmIDB4ZjApIHwgMHgxOyAvKiA0OCBrSHosIG5vdCBtdXRlZCAqLworCQl2YWwgPSB0bTYwMDBfc2V0X3JlZyhkZXYsIFRNNjAxMF9SRVEwOF9SMEFfQV9JMlNfTU9ELCB2YWwpOworCQlpZiAodmFsIDwgMCkKKwkJCXJldHVybiB2YWw7CisJfQorCisJdmFsID0gdG02MDAwX2dldF9yZWcoZGV2LCBSRVFfMDdfU0VUX0dFVF9BVlJFRywgMHhlYiwgMHgwKTsKKwlpZiAodmFsIDwgMCkKIAkJcmV0dXJuIHZhbDsKIAogCXZhbCAmPSAweDBmOwkJLyogUHJlc2VydmUgdGhlIGF1ZGlvIGlucHV0IGNvbnRyb2wgYml0cyAqLwogCXN3aXRjaCAoYml0cmF0ZSkgewogCWNhc2UgNDQxMDA6Ci0JCXZhbHw9MHhkMDsKLQkJZGV2LT5hdWRpb19iaXRyYXRlPWJpdHJhdGU7CisJCXZhbCB8PSAweGQwOworCQlkZXYtPmF1ZGlvX2JpdHJhdGUgPSBiaXRyYXRlOwogCQlicmVhazsKIAljYXNlIDQ4MDAwOgotCQl2YWx8PTB4NjA7Ci0JCWRldi0+YXVkaW9fYml0cmF0ZT1iaXRyYXRlOworCQl2YWwgfD0gMHg2MDsKKwkJZGV2LT5hdWRpb19iaXRyYXRlID0gYml0cmF0ZTsKIAkJYnJlYWs7CiAJfQotCXZhbD10bTYwMDBfc2V0X3JlZyAoZGV2LCBSRVFfMDdfU0VUX0dFVF9BVlJFRywgMHhlYiwgdmFsKTsKKwl2YWwgPSB0bTYwMDBfc2V0X3JlZyhkZXYsIFJFUV8wN19TRVRfR0VUX0FWUkVHLCAweGViLCB2YWwpOwogCiAJcmV0dXJuIHZhbDsKIH0KQEAgLTY1OSw2ICs2NjIsMjMgQEAKIHN0YXRpYyBMSVNUX0hFQUQodG02MDAwX2V4dGVuc2lvbl9kZXZsaXN0KTsKIHN0YXRpYyBERUZJTkVfTVVURVgodG02MDAwX2V4dGVuc2lvbl9kZXZsaXN0X2xvY2spOwogCitpbnQgdG02MDAwX2NhbGxfZmlsbGJ1ZihzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldiwgZW51bSB0bTYwMDBfb3BzX3R5cGUgdHlwZSwKKwkJCWNoYXIgKmJ1ZiwgaW50IHNpemUpCit7CisJc3RydWN0IHRtNjAwMF9vcHMgKm9wcyA9IE5VTEw7CisKKwkvKiBGSVhNRTogdG02MDAwX2V4dGVuc2lvbl9kZXZsaXN0X2xvY2sgc2hvdWxkIGJlIGEgc3BpbmxvY2sgKi8KKworCWlmICghbGlzdF9lbXB0eSgmdG02MDAwX2V4dGVuc2lvbl9kZXZsaXN0KSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9wcywgJnRtNjAwMF9leHRlbnNpb25fZGV2bGlzdCwgbmV4dCkgeworCQkJaWYgKG9wcy0+ZmlsbGJ1ZiAmJiBvcHMtPnR5cGUgPT0gdHlwZSkKKwkJCQlvcHMtPmZpbGxidWYoZGV2LCBidWYsIHNpemUpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKIGludCB0bTYwMDBfcmVnaXN0ZXJfZXh0ZW5zaW9uKHN0cnVjdCB0bTYwMDBfb3BzICpvcHMpCiB7CiAJc3RydWN0IHRtNjAwMF9jb3JlICpkZXYgPSBOVUxMOwpAQCAtNjY3LDEwICs2ODcsMTAgQEAKIAltdXRleF9sb2NrKCZ0bTYwMDBfZXh0ZW5zaW9uX2Rldmxpc3RfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmb3BzLT5uZXh0LCAmdG02MDAwX2V4dGVuc2lvbl9kZXZsaXN0KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJnRtNjAwMF9kZXZsaXN0LCBkZXZsaXN0KSB7Ci0JCWlmIChkZXYpCi0JCQlvcHMtPmluaXQoZGV2KTsKKwkJb3BzLT5pbml0KGRldik7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbml0aWFsaXplZCAoJXMpIGV4dGVuc2lvblxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgb3BzLT5uYW1lKTsKIAl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAidG02MDAwOiBJbml0aWFsaXplZCAoJXMpIGV4dGVuc2lvblxuIiwgb3BzLT5uYW1lKTsKIAltdXRleF91bmxvY2soJnRtNjAwMF9leHRlbnNpb25fZGV2bGlzdF9sb2NrKTsKIAltdXRleF91bmxvY2soJnRtNjAwMF9kZXZsaXN0X211dGV4KTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvdG02MDAwLWR2Yi5jIGIvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtZHZiLmMKaW5kZXggODZjMWM4Yi4uZjUwMWVkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtZHZiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtZHZiLmMKQEAgLTMxLDEyICszMSwyNSBAQAogI2luY2x1ZGUgInR1bmVyLXhjMjAyOC5oIgogI2luY2x1ZGUgInhjNTAwMC5oIgogCi1zdGF0aWMgdm9pZCBpbmxpbmUgcHJpbnRfZXJyX3N0YXR1cyAoc3RydWN0IHRtNjAwMF9jb3JlICpkZXYsCi0JCQkJICAgICBpbnQgcGFja2V0LCBpbnQgc3RhdHVzKQorTU9EVUxFX0RFU0NSSVBUSU9OKCJEVkIgZHJpdmVyIGV4dGVuc2lvbiBtb2R1bGUgZm9yIHRtNTYwMC82MDAwLzYwMTAgYmFzZWQgVFYgY2FyZHMiKTsKK01PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tUcmlkZW50LCB0bTU2MDB9LCIKKwkJCSJ7e1RyaWRlbnQsIHRtNjAwMH0sIgorCQkJInt7VHJpZGVudCwgdG02MDEwfSIpOworCitzdGF0aWMgaW50IGRlYnVnOworCittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZW5hYmxlIGRlYnVnIG1lc3NhZ2UiKTsKKworc3RhdGljIGlubGluZSB2b2lkIHByaW50X2Vycl9zdGF0dXMoc3RydWN0IHRtNjAwMF9jb3JlICpkZXYsCisJCQkJICAgIGludCBwYWNrZXQsIGludCBzdGF0dXMpCiB7CiAJY2hhciAqZXJybXNnID0gIlVua25vd24iOwogCi0Jc3dpdGNoKHN0YXR1cykgeworCXN3aXRjaCAoc3RhdHVzKSB7CiAJY2FzZSAtRU5PRU5UOgogCQllcnJtc2cgPSAidW5saW5rZWQgc3luY2hyb251b3VzbHkiOwogCQlicmVhazsKQEAgLTYyLDcgKzc1LDcgQEAKIAkJZXJybXNnID0gIkRldmljZSBkb2VzIG5vdCByZXNwb25kIjsKIAkJYnJlYWs7CiAJfQotCWlmIChwYWNrZXQ8MCkgeworCWlmIChwYWNrZXQgPCAwKSB7CiAJCWRwcmludGsoZGV2LCAxLCAiVVJCIHN0YXR1cyAlZCBbJXNdLlxuIiwKIAkJCXN0YXR1cywgZXJybXNnKTsKIAl9IGVsc2UgewpAQCAtNzQsMTkgKzg3LDE3IEBACiBzdGF0aWMgdm9pZCB0bTYwMDBfdXJiX3JlY2VpdmVkKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlpbnQgcmV0OwotCXN0cnVjdCB0bTYwMDBfY29yZSogZGV2ID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCB0bTYwMDBfY29yZSAqZGV2ID0gdXJiLT5jb250ZXh0OwogCi0JaWYodXJiLT5zdGF0dXMgIT0gMCkgewotCQlwcmludF9lcnJfc3RhdHVzIChkZXYsMCx1cmItPnN0YXR1cyk7Ci0JfQotCWVsc2UgaWYodXJiLT5hY3R1YWxfbGVuZ3RoPjApeworCWlmICh1cmItPnN0YXR1cyAhPSAwKQorCQlwcmludF9lcnJfc3RhdHVzKGRldiwgMCwgdXJiLT5zdGF0dXMpOworCWVsc2UgaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+IDApCiAJCWR2Yl9kbXhfc3dmaWx0ZXIoJmRldi0+ZHZiLT5kZW11eCwgdXJiLT50cmFuc2Zlcl9idWZmZXIsCiAJCQkJCQkgICB1cmItPmFjdHVhbF9sZW5ndGgpOwotCX0KIAotCWlmKGRldi0+ZHZiLT5zdHJlYW1zID4gMCkgeworCWlmIChkZXYtPmR2Yi0+c3RyZWFtcyA+IDApIHsKIAkJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLQkJaWYocmV0IDwgMCkgeworCQlpZiAocmV0IDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJ0bTYwMDA6ICBlcnJvciAlc1xuIiwgX19GVU5DVElPTl9fKTsKIAkJCWtmcmVlKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKIAkJCXVzYl9mcmVlX3VyYih1cmIpOwpAQCAtMTAwLDcgKzExMSw3IEBACiAJdW5zaWduZWQgaW50IHBpcGUsIHNpemU7CiAJc3RydWN0IHRtNjAwMF9kdmIgKmR2YiA9IGRldi0+ZHZiOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAidG02MDAwOiBnb3Qgc3RhcnQgc3RyZWFtIHJlcXVlc3QgJXNcbiIsX19GVU5DVElPTl9fKTsKKwlwcmludGsoS0VSTl9JTkZPICJ0bTYwMDA6IGdvdCBzdGFydCBzdHJlYW0gcmVxdWVzdCAlc1xuIiwgX19GVU5DVElPTl9fKTsKIAogCWlmIChkZXYtPm1vZGUgIT0gVE02MDAwX01PREVfRElHSVRBTCkgewogCQl0bTYwMDBfaW5pdF9kaWdpdGFsX21vZGUoZGV2KTsKQEAgLTEwOCw3ICsxMTksNyBAQAogCX0KIAogCWR2Yi0+YnVsa191cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCWlmKGR2Yi0+YnVsa191cmIgPT0gTlVMTCkgeworCWlmIChkdmItPmJ1bGtfdXJiID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ0bTYwMDA6IGNvdWxkbid0IGFsbG9jYXRlIHVyYlxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTEyMCw3ICsxMzEsNyBAQAogCXNpemUgPSBzaXplICogMTU7IC8qIDUxMiB4IDggb3IgMTIgb3IgMTUgKi8KIAogCWR2Yi0+YnVsa191cmItPnRyYW5zZmVyX2J1ZmZlciA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYoZHZiLT5idWxrX3VyYi0+dHJhbnNmZXJfYnVmZmVyID09IE5VTEwpIHsKKwlpZiAoZHZiLT5idWxrX3VyYi0+dHJhbnNmZXJfYnVmZmVyID09IE5VTEwpIHsKIAkJdXNiX2ZyZWVfdXJiKGR2Yi0+YnVsa191cmIpOwogCQlwcmludGsoS0VSTl9FUlIgInRtNjAwMDogY291bGRuJ3QgYWxsb2NhdGUgdHJhbnNmZXIgYnVmZmVyIVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTMyLDIwICsxNDMsMjAgQEAKIAkJCQkJCSB0bTYwMDBfdXJiX3JlY2VpdmVkLCBkZXYpOwogCiAJcmV0ID0gdXNiX2NsZWFyX2hhbHQoZGV2LT51ZGV2LCBwaXBlKTsKLQlpZihyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAidG02MDAwOiBlcnJvciAlaSBpbiAlcyBkdXJpbmcgcGlwZSByZXNldFxuIixyZXQsX19GVU5DVElPTl9fKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgInRtNjAwMDogZXJyb3IgJWkgaW4gJXMgZHVyaW5nIHBpcGUgcmVzZXRcbiIsCisJCQkJCQkJcmV0LCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gcmV0OwotCX0KLQllbHNlIHsKKwl9IGVsc2UKIAkJcHJpbnRrKEtFUk5fRVJSICJ0bTYwMDA6IHBpcGUgcmVzZXR0ZWRcbiIpOwotCX0KIAogLyoJbXV0ZXhfbG9jaygmdG02MDAwX2RyaXZlci5vcGVuX2Nsb3NlX211dGV4KTsgKi8KIAlyZXQgPSB1c2Jfc3VibWl0X3VyYihkdmItPmJ1bGtfdXJiLCBHRlBfS0VSTkVMKTsKIAogLyoJbXV0ZXhfdW5sb2NrKCZ0bTYwMDBfZHJpdmVyLm9wZW5fY2xvc2VfbXV0ZXgpOyAqLwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ0bTYwMDA6IHN1Ym1pdCBvZiB1cmIgZmFpbGVkIChlcnJvcj0laSlcbiIscmV0KTsKKwkJcHJpbnRrKEtFUk5fRVJSICJ0bTYwMDA6IHN1Ym1pdCBvZiB1cmIgZmFpbGVkIChlcnJvcj0laSlcbiIsCisJCQkJCQkJCQlyZXQpOwogCiAJCWtmcmVlKGR2Yi0+YnVsa191cmItPnRyYW5zZmVyX2J1ZmZlcik7CiAJCXVzYl9mcmVlX3VyYihkdmItPmJ1bGtfdXJiKTsKQEAgLTE1OSwxMCArMTcwLDEwIEBACiB7CiAJc3RydWN0IHRtNjAwMF9kdmIgKmR2YiA9IGRldi0+ZHZiOwogCi0JaWYoZHZiLT5idWxrX3VyYikgewotCQlwcmludGsgKEtFUk5fSU5GTyAidXJiIGtpbGxpbmdcbiIpOworCWlmIChkdmItPmJ1bGtfdXJiKSB7CisJCXByaW50ayhLRVJOX0lORk8gInVyYiBraWxsaW5nXG4iKTsKIAkJdXNiX2tpbGxfdXJiKGR2Yi0+YnVsa191cmIpOwotCQlwcmludGsgKEtFUk5fSU5GTyAidXJiIGJ1ZmZlciBmcmVlXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAidXJiIGJ1ZmZlciBmcmVlXG4iKTsKIAkJa2ZyZWUoZHZiLT5idWxrX3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKIAkJdXNiX2ZyZWVfdXJiKGR2Yi0+YnVsa191cmIpOwogCQlkdmItPmJ1bGtfdXJiID0gTlVMTDsKQEAgLTE3NCwzNSArMTg1LDM0IEBACiAJc3RydWN0IGR2Yl9kZW11eCAqZGVtdXggPSBmZWVkLT5kZW11eDsKIAlzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldiA9IGRlbXV4LT5wcml2OwogCXN0cnVjdCB0bTYwMDBfZHZiICpkdmIgPSBkZXYtPmR2YjsKLQlwcmludGsoS0VSTl9JTkZPICJ0bTYwMDA6IGdvdCBzdGFydCBmZWVkIHJlcXVlc3QgJXNcbiIsX19GVU5DVElPTl9fKTsKKwlwcmludGsoS0VSTl9JTkZPICJ0bTYwMDA6IGdvdCBzdGFydCBmZWVkIHJlcXVlc3QgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKIAltdXRleF9sb2NrKCZkdmItPm11dGV4KTsKLQlpZihkdmItPnN0cmVhbXMgPT0gMCkgeworCWlmIChkdmItPnN0cmVhbXMgPT0gMCkgewogCQlkdmItPnN0cmVhbXMgPSAxOwogLyoJCW11dGV4X2luaXQoJnRtNjAwMF9kZXYtPnN0cmVtaW5nX211dGV4KTsgKi8KIAkJdG02MDAwX3N0YXJ0X3N0cmVhbShkZXYpOwotCX0KLQllbHNlIHsKKwl9IGVsc2UKIAkJKysoZHZiLT5zdHJlYW1zKTsKLQl9CiAJbXV0ZXhfdW5sb2NrKCZkdmItPm11dGV4KTsKIAogCXJldHVybiAwOwogfQogCi1pbnQgdG02MDAwX3N0b3BfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmZlZWQpIHsKK2ludCB0bTYwMDBfc3RvcF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZmVlZCkKK3sKIAlzdHJ1Y3QgZHZiX2RlbXV4ICpkZW11eCA9IGZlZWQtPmRlbXV4OwogCXN0cnVjdCB0bTYwMDBfY29yZSAqZGV2ID0gZGVtdXgtPnByaXY7CiAJc3RydWN0IHRtNjAwMF9kdmIgKmR2YiA9IGRldi0+ZHZiOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAidG02MDAwOiBnb3Qgc3RvcCBmZWVkIHJlcXVlc3QgJXNcbiIsX19GVU5DVElPTl9fKTsKKwlwcmludGsoS0VSTl9JTkZPICJ0bTYwMDA6IGdvdCBzdG9wIGZlZWQgcmVxdWVzdCAlc1xuIiwgX19GVU5DVElPTl9fKTsKIAogCW11dGV4X2xvY2soJmR2Yi0+bXV0ZXgpOwogCi0JcHJpbnRrIChLRVJOX0lORk8gInN0cmVhbSAlI3hcbiIsIGR2Yi0+c3RyZWFtcyk7CisJcHJpbnRrKEtFUk5fSU5GTyAic3RyZWFtICUjeFxuIiwgZHZiLT5zdHJlYW1zKTsKIAktLShkdmItPnN0cmVhbXMpOwotCWlmKGR2Yi0+c3RyZWFtcyA9PSAwKSB7Ci0JCXByaW50ayAoS0VSTl9JTkZPICJzdG9wIHN0cmVhbVxuIik7CisJaWYgKGR2Yi0+c3RyZWFtcyA9PSAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gInN0b3Agc3RyZWFtXG4iKTsKIAkJdG02MDAwX3N0b3Bfc3RyZWFtKGRldik7CiAvKgkJbXV0ZXhfZGVzdHJveSgmdG02MDAwX2Rldi0+c3RyZWFtaW5nX211dGV4KTsgKi8KIAl9CkBAIC0yMTYsOSArMjI2LDkgQEAKIHsKIAlzdHJ1Y3QgdG02MDAwX2R2YiAqZHZiID0gZGV2LT5kdmI7CiAKLQlpZihkZXYtPmNhcHMuaGFzX3psMTAzNTMpIHsKLQkJc3RydWN0IHpsMTAzNTNfY29uZmlnIGNvbmZpZyA9Ci0JCQkJICAgIHsuZGVtb2RfYWRkcmVzcyA9IGRldi0+ZGVtb2RfYWRkciwKKwlpZiAoZGV2LT5jYXBzLmhhc196bDEwMzUzKSB7CisJCXN0cnVjdCB6bDEwMzUzX2NvbmZpZyBjb25maWcgPSB7CisJCQkJICAgICAuZGVtb2RfYWRkcmVzcyA9IGRldi0+ZGVtb2RfYWRkciwKIAkJCQkgICAgIC5ub190dW5lciA9IDEsCiAJCQkJICAgICAucGFyYWxsZWxfdHMgPSAxLAogCQkJCSAgICAgLmlmMiA9IDQ1NzAwLApAQCAtMjI3LDggKzIzNyw3IEBACiAKIAkJZHZiLT5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsICZjb25maWcsCiAJCQkJCQkJICAgJmRldi0+aTJjX2FkYXApOwotCX0KLQllbHNlIHsKKwl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgInRtNjAwMDogbm8gZnJvbnRlbmQgZGVmaW5lZCBmb3IgdGhlIGRldmljZSFcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMjM4LDcgKzI0Nyw3IEBACiAKIERWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOwogCi1pbnQgdG02MDAwX2R2Yl9yZWdpc3RlcihzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldikKK2ludCByZWdpc3Rlcl9kdmIoc3RydWN0IHRtNjAwMF9jb3JlICpkZXYpCiB7CiAJaW50IHJldCA9IC0xOwogCXN0cnVjdCB0bTYwMDBfZHZiICpkdmIgPSBkZXYtPmR2YjsKQEAgLTI0OSwxMyArMjU4LDEzIEBACiAKIAkvKiBhdHRhY2ggdGhlIGZyb250ZW5kICovCiAJcmV0ID0gdG02MDAwX2R2Yl9hdHRhY2hfZnJvbnRlbmQoZGV2KTsKLQlpZihyZXQgPCAwKSB7CisJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ0bTYwMDA6IGNvdWxkbid0IGF0dGFjaCB0aGUgZnJvbnRlbmQhXG4iKTsKIAkJZ290byBlcnI7CiAJfQogCiAJcmV0ID0gZHZiX3JlZ2lzdGVyX2FkYXB0ZXIoJmR2Yi0+YWRhcHRlciwgIlRyaWRlbnQgVFZNYXN0ZXIgNjAwMCBEVkItVCIsCi0JCQkJCQkJICBUSElTX01PRFVMRSwgJmRldi0+dWRldi0+ZGV2LCBhZGFwdGVyX25yKTsKKwkJCQkJVEhJU19NT0RVTEUsICZkZXYtPnVkZXYtPmRldiwgYWRhcHRlcl9ucik7CiAJZHZiLT5hZGFwdGVyLnByaXYgPSBkZXY7CiAKIAlpZiAoZHZiLT5mcm9udGVuZCkgewpAQCAtMzA4LDkgKzMxNyw4IEBACiAJCQlicmVhazsKIAkJCX0KIAkJfQotCX0gZWxzZSB7CisJfSBlbHNlCiAJCXByaW50ayhLRVJOX0VSUiAidG02MDAwOiBubyBmcm9udGVuZCBmb3VuZFxuIik7Ci0JfQogCiAJZHZiLT5kZW11eC5kbXguY2FwYWJpbGl0aWVzID0gRE1YX1RTX0ZJTFRFUklORyB8IERNWF9TRUNUSU9OX0ZJTFRFUklORwogCQkJCQkJCSAgICB8IERNWF9NRU1PUllfQkFTRURfRklMVEVSSU5HOwpAQCAtMzIxLDcgKzMyOSw3IEBACiAJZHZiLT5kZW11eC5zdG9wX2ZlZWQgPSB0bTYwMDBfc3RvcF9mZWVkOwogCWR2Yi0+ZGVtdXgud3JpdGVfdG9fZGVjb2RlciA9IE5VTEw7CiAJcmV0ID0gZHZiX2RteF9pbml0KCZkdmItPmRlbXV4KTsKLQlpZihyZXQgPCAwKSB7CisJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKCJ0bTYwMDA6IGR2Yl9kbXhfaW5pdCBmYWlsZWQgKGVycm5vID0gJWQpXG4iLCByZXQpOwogCQlnb3RvIGZyb250ZW5kX2VycjsKIAl9CkBAIC0zMzEsNyArMzM5LDcgQEAKIAlkdmItPmRteGRldi5jYXBhYmlsaXRpZXMgPSAwOwogCiAJcmV0ID0gIGR2Yl9kbXhkZXZfaW5pdCgmZHZiLT5kbXhkZXYsICZkdmItPmFkYXB0ZXIpOwotCWlmKHJldCA8IDApIHsKKwlpZiAocmV0IDwgMCkgewogCQlwcmludGsoInRtNjAwMDogZHZiX2RteGRldl9pbml0IGZhaWxlZCAoZXJybm8gPSAlZClcbiIsIHJldCk7CiAJCWdvdG8gZHZiX2RteF9lcnI7CiAJfQpAQCAtMzQxLDcgKzM0OSw3IEBACiBkdmJfZG14X2VycjoKIAlkdmJfZG14X3JlbGVhc2UoJmR2Yi0+ZGVtdXgpOwogZnJvbnRlbmRfZXJyOgotCWlmKGR2Yi0+ZnJvbnRlbmQpIHsKKwlpZiAoZHZiLT5mcm9udGVuZCkgewogCQlkdmJfZnJvbnRlbmRfZGV0YWNoKGR2Yi0+ZnJvbnRlbmQpOwogCQlkdmJfdW5yZWdpc3Rlcl9mcm9udGVuZChkdmItPmZyb250ZW5kKTsKIAl9CkBAIC0zNTEsMTEgKzM1OSwxMSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgdG02MDAwX2R2Yl91bnJlZ2lzdGVyKHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2KQordm9pZCB1bnJlZ2lzdGVyX2R2YihzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldikKIHsKIAlzdHJ1Y3QgdG02MDAwX2R2YiAqZHZiID0gZGV2LT5kdmI7CiAKLQlpZihkdmItPmJ1bGtfdXJiICE9IE5VTEwpIHsKKwlpZiAoZHZiLT5idWxrX3VyYiAhPSBOVUxMKSB7CiAJCXN0cnVjdCB1cmIgKmJ1bGtfdXJiID0gZHZiLT5idWxrX3VyYjsKIAogCQlrZnJlZShidWxrX3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKQEAgLTM2NSw3ICszNzMsNyBAQAogCX0KIAogLyoJbXV0ZXhfbG9jaygmdG02MDAwX2RyaXZlci5vcGVuX2Nsb3NlX211dGV4KTsgKi8KLQlpZihkdmItPmZyb250ZW5kKSB7CisJaWYgKGR2Yi0+ZnJvbnRlbmQpIHsKIAkJZHZiX2Zyb250ZW5kX2RldGFjaChkdmItPmZyb250ZW5kKTsKIAkJZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoZHZiLT5mcm9udGVuZCk7CiAJfQpAQCAtMzc1LDUgKzM4Myw3MCBAQAogCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoJmR2Yi0+YWRhcHRlcik7CiAJbXV0ZXhfZGVzdHJveSgmZHZiLT5tdXRleCk7CiAvKgltdXRleF91bmxvY2soJnRtNjAwMF9kcml2ZXIub3Blbl9jbG9zZV9tdXRleCk7ICovCi0KIH0KKworc3RhdGljIGludCBkdmJfaW5pdChzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldikKK3sKKwlzdHJ1Y3QgdG02MDAwX2R2YiAqZHZiOworCWludCByYzsKKworCWlmICghZGV2KQorCQlyZXR1cm4gMDsKKworCWlmICghZGV2LT5jYXBzLmhhc19kdmIpCisJCXJldHVybiAwOworCisJZHZiID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRtNjAwMF9kdmIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWR2YikgeworCQlwcmludGsoS0VSTl9JTkZPICJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGV2LT5kdmIgPSBkdmI7CisKKwlyYyA9IHJlZ2lzdGVyX2R2YihkZXYpOworCWlmIChyYyA8IDApIHsKKwkJa2ZyZWUoZHZiKTsKKwkJZGV2LT5kdmIgPSBOVUxMOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkdmJfZmluaShzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldikKK3sKKwlpZiAoIWRldikKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWRldi0+Y2Fwcy5oYXNfZHZiKQorCQlyZXR1cm4gMDsKKworCWlmIChkZXYtPmR2YikgeworCQl1bnJlZ2lzdGVyX2R2YihkZXYpOworCQlrZnJlZShkZXYtPmR2Yik7CisJCWRldi0+ZHZiID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB0bTYwMDBfb3BzIGR2Yl9vcHMgPSB7CisJLnR5cGUJPSBUTTYwMDBfRFZCLAorCS5uYW1lCT0gIlRNNjAwMCBkdmIgRXh0ZW5zaW9uIiwKKwkuaW5pdAk9IGR2Yl9pbml0LAorCS5maW5pCT0gZHZiX2ZpbmksCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0bTYwMDBfZHZiX3JlZ2lzdGVyKHZvaWQpCit7CisJcmV0dXJuIHRtNjAwMF9yZWdpc3Rlcl9leHRlbnNpb24oJmR2Yl9vcHMpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdG02MDAwX2R2Yl91bnJlZ2lzdGVyKHZvaWQpCit7CisJdG02MDAwX3VucmVnaXN0ZXJfZXh0ZW5zaW9uKCZkdmJfb3BzKTsKK30KKworbW9kdWxlX2luaXQodG02MDAwX2R2Yl9yZWdpc3Rlcik7Cittb2R1bGVfZXhpdCh0bTYwMDBfZHZiX3VucmVnaXN0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtaTJjLmMgYi9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL3RtNjAwMC1pMmMuYwppbmRleCA5NGZmNDg5Li43OWJjNjdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL3RtNjAwMC1pMmMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL3RtNjAwMC1pMmMuYwpAQCAtNDAsNyArNDAsNyBAQAogbW9kdWxlX3BhcmFtKGkyY19kZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaTJjX2RlYnVnLCAiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIFtpMmNdIik7CiAKLSNkZWZpbmUgaTJjX2RwcmludGsobHZsLGZtdCwgYXJncy4uLikgaWYgKGkyY19kZWJ1Zz49bHZsKSBkb3sgXAorI2RlZmluZSBpMmNfZHByaW50ayhsdmwsIGZtdCwgYXJncy4uLikgaWYgKGkyY19kZWJ1ZyA+PSBsdmwpIGRvIHsgXAogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzIGF0ICVzOiAiIGZtdCwgXAogCQkJZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18gLCAjI2FyZ3MpOyB9IHdoaWxlICgwKQogCkBAIC0xNzEsNyArMTcxLDcgQEAKIAkJcmV0dXJuIDA7CiAJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CiAJCWFkZHIgPSAobXNnc1tpXS5hZGRyIDw8IDEpICYgMHhmZjsKLQkJaTJjX2RwcmludGsoMiwiJXMgJXMgYWRkcj0weCV4IGxlbj0lZDoiLAorCQlpMmNfZHByaW50aygyLCAiJXMgJXMgYWRkcj0weCV4IGxlbj0lZDoiLAogCQkJIChtc2dzW2ldLmZsYWdzICYgSTJDX01fUkQpID8gInJlYWQiIDogIndyaXRlIiwKIAkJCSBpID09IG51bSAtIDEgPyAic3RvcCIgOiAibm9uc3RvcCIsIGFkZHIsIG1zZ3NbaV0ubGVuKTsKIAkJaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgewpAQCAtMjM1LDcgKzIzNSw3IEBACiAKIAlyZXR1cm4gbnVtOwogZXJyOgotCWkyY19kcHJpbnRrKDIsIiBFUlJPUjogJWlcbiIsIHJjKTsKKwlpMmNfZHByaW50aygyLCAiIEVSUk9SOiAlaVxuIiwgcmMpOwogCXJldHVybiByYzsKIH0KIApAQCAtMjY2LDExICsyNjYsMTAgQEAKIAkJaWYgKDAgPT0gKGkgJSAxNikpCiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogaTJjIGVlcHJvbSAlMDJ4OiIsIGRldi0+bmFtZSwgaSk7CiAJCXByaW50aygiICUwMngiLCBlZWRhdGFbaV0pOwotCQlpZiAoKGVlZGF0YVtpXSA+PSAnICcpICYmIChlZWRhdGFbaV0gPD0gJ3onKSkgeworCQlpZiAoKGVlZGF0YVtpXSA+PSAnICcpICYmIChlZWRhdGFbaV0gPD0gJ3onKSkKIAkJCWJ5dGVzW2klMTZdID0gZWVkYXRhW2ldOwotCQl9IGVsc2UgewotCQkJYnl0ZXNbaSUxNl09Jy4nOwotCQl9CisJCWVsc2UKKwkJCWJ5dGVzW2klMTZdID0gJy4nOwogCiAJCWkrKzsKIApAQCAtMzA1LDE1ICszMDQsMTUgQEAKIH0KIAogI2RlZmluZSBtYXNzX3dyaXRlKGFkZHIsIHJlZywgZGF0YS4uLikJCQkJCVwKLQl7IGNvbnN0IHN0YXRpYyB1OCBfdmFsW10gPSBkYXRhOwkJCQlcCi0JcmM9dG02MDAwX3JlYWRfd3JpdGVfdXNiKGRldixVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiwJXAotCVJFUV8xNl9TRVRfR0VUX0kyQ19XUjFfUkROLChyZWc8PDgpK2FkZHIsIDB4MDAsICh1OCAqKSBfdmFsLAlcCisJeyBzdGF0aWMgY29uc3QgdTggX3ZhbFtdID0gZGF0YTsJCQkJXAorCXJjID0gdG02MDAwX3JlYWRfd3JpdGVfdXNiKGRldiwgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IsCVwKKwlSRVFfMTZfU0VUX0dFVF9JMkNfV1IxX1JETiwgKHJlZzw8OCkrYWRkciwgMHgwMCwgKHU4ICopIF92YWwsCVwKIAlBUlJBWV9TSVpFKF92YWwpKTsJCQkJCQlcCi0JaWYgKHJjPDApIHsJCQkJCQkJXAotCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIG9uIGxpbmUgJWQ6ICVkXG4iLF9fTElORV9fLHJjKTsJXAorCWlmIChyYyA8IDApIHsJCQkJCQkJXAorCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIG9uIGxpbmUgJWQ6ICVkXG4iLCBfX0xJTkVfXywgcmMpOwlcCiAJCXJldHVybiByYzsJCQkJCQlcCiAJfQkJCQkJCQkJXAotCW1zbGVlcCAoMTApOwkJCQkJCQlcCisJbXNsZWVwKDEwKTsJCQkJCQkJXAogCX0KIAogc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIHRtNjAwMF9hbGdvID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtaW5wdXQuYyBiL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvdG02MDAwLWlucHV0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJmN2EwYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvdG02MDAwLWlucHV0LmMKQEAgLTAsMCArMSwzNjQgQEAKKy8qCisgICB0bTYwMDAtaW5wdXQuYyAtIGRyaXZlciBmb3IgVE01NjAwL1RNNjAwMC9UTTYwMTAgVVNCIHZpZGVvIGNhcHR1cmUgZGV2aWNlcworCisgICBDb3B5cmlnaHQgKEMpIDIwMTAgU3RlZmFuIFJpbmdlbCA8c3RlZmFuLnJpbmdlbEBhcmNvci5kZT4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlIDxtZWRpYS9pci1jb3JlLmg+CisjaW5jbHVkZSA8bWVkaWEvaXItY29tbW9uLmg+CisKKyNpbmNsdWRlICJ0bTYwMDAuaCIKKyNpbmNsdWRlICJ0bTYwMDAtcmVncy5oIgorCitzdGF0aWMgdW5zaWduZWQgaW50IGlyX2RlYnVnOworbW9kdWxlX3BhcmFtKGlyX2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhpcl9kZWJ1ZywgImVuYWJsZSBkZWJ1ZyBtZXNzYWdlIFtJUl0iKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBlbmFibGVfaXIgPSAxOworbW9kdWxlX3BhcmFtKGVuYWJsZV9pciwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlX2lyLCAiZW5hYmxlIGlyIChkZWZhdWx0IGlzIGVuYWJsZSIpOworCisjdW5kZWYgZHByaW50aworCisjZGVmaW5lIGRwcmludGsoZm10LCBhcmcuLi4pIFwKKwlpZiAoaXJfZGVidWcpIHsgXAorCQlwcmludGsoS0VSTl9ERUJVRyAiJXMvaXI6ICIgZm10LCBpci0+bmFtZSAsICMjIGFyZyk7IFwKKwl9CisKK3N0cnVjdCB0bTYwMDBfaXJfcG9sbF9yZXN1bHQgeworCXU4IHJjX2RhdGFbNF07Cit9OworCitzdHJ1Y3QgdG02MDAwX0lSIHsKKwlzdHJ1Y3QgdG02MDAwX2NvcmUJKmRldjsKKwlzdHJ1Y3QgaXJfaW5wdXRfZGV2CSppbnB1dDsKKwlzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUJaXI7CisJY2hhcgkJCW5hbWVbMzJdOworCWNoYXIJCQlwaHlzWzMyXTsKKworCS8qIHBvbGwgZXhwZXJuYWwgZGVjb2RlciAqLworCWludAkJCXBvbGxpbmc7CisJc3RydWN0IGRlbGF5ZWRfd29yawl3b3JrOworCXU4CQkJd2FpdDoxOworCXN0cnVjdCB1cmIJCSppbnRfdXJiOworCXU4CQkJKnVyYl9kYXRhOworCXU4CQkJa2V5OjE7CisKKwlpbnQgKCpnZXRfa2V5KSAoc3RydWN0IHRtNjAwMF9JUiAqLCBzdHJ1Y3QgdG02MDAwX2lyX3BvbGxfcmVzdWx0ICopOworCisJLyogSVIgZGV2aWNlIHByb3BlcnRpZXMgKi8KKwlzdHJ1Y3QgaXJfZGV2X3Byb3BzCXByb3BzOworfTsKKworCit2b2lkIHRtNjAwMF9pcl93YWl0KHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2LCB1OCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgdG02MDAwX0lSICppciA9IGRldi0+aXI7CisKKwlpZiAoIWRldi0+aXIpCisJCXJldHVybjsKKworCWlmIChzdGF0ZSkKKwkJaXItPndhaXQgPSAxOworCWVsc2UKKwkJaXItPndhaXQgPSAwOworfQorCisKK3N0YXRpYyBpbnQgdG02MDAwX2lyX2NvbmZpZyhzdHJ1Y3QgdG02MDAwX0lSICppcikKK3sKKwlzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldiA9IGlyLT5kZXY7CisJdTggYnVmWzEwXTsKKwlpbnQgcmM7CisKKwkvKiBoYWNrICovCisJYnVmWzBdID0gMHhmZjsKKwlidWZbMV0gPSAweGZmOworCWJ1ZlsyXSA9IDB4ZjI7CisJYnVmWzNdID0gMHgyYjsKKwlidWZbNF0gPSAweDIwOworCWJ1Zls1XSA9IDB4MzU7CisJYnVmWzZdID0gMHg2MDsKKwlidWZbN10gPSAweDA0OworCWJ1Zls4XSA9IDB4YzA7CisJYnVmWzldID0gMHgwODsKKworCXJjID0gdG02MDAwX3JlYWRfd3JpdGVfdXNiKGRldiwgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfAorCQlVU0JfUkVDSVBfREVWSUNFLCBSRVFfMDBfU0VUX0lSX1ZBTFVFLCAwLCAwLCBidWYsIDB4MGEpOworCW1zbGVlcCgxMDApOworCisJaWYgKHJjIDwgMCkgeworCQlwcmludGsoS0VSTl9JTkZPICJJUiBjb25maWd1cmF0aW9uIGZhaWxlZCIpOworCQlyZXR1cm4gcmM7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0bTYwMDBfaXJfdXJiX3JlY2VpdmVkKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldiA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdG02MDAwX0lSICppciA9IGRldi0+aXI7CisJaW50IHJjOworCisJaWYgKHVyYi0+c3RhdHVzICE9IDApCisJCXByaW50ayhLRVJOX0lORk8gIm5vdCByZWFkeVxuIik7CisJZWxzZSBpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID4gMCkKKwkJbWVtY3B5KGlyLT51cmJfZGF0YSwgdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisKKwlkcHJpbnRrKCJkYXRhICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsIGlyLT51cmJfZGF0YVswXSwKKwlpci0+dXJiX2RhdGFbMV0sIGlyLT51cmJfZGF0YVsyXSwgaXItPnVyYl9kYXRhWzNdKTsKKworCWlyLT5rZXkgPSAxOworCisJcmMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworfQorCitzdGF0aWMgaW50IGRlZmF1bHRfcG9sbGluZ19nZXRrZXkoc3RydWN0IHRtNjAwMF9JUiAqaXIsCisJCQkJc3RydWN0IHRtNjAwMF9pcl9wb2xsX3Jlc3VsdCAqcG9sbF9yZXN1bHQpCit7CisJc3RydWN0IHRtNjAwMF9jb3JlICpkZXYgPSBpci0+ZGV2OworCWludCByYzsKKwl1OCBidWZbMl07CisKKwlpZiAoaXItPndhaXQgJiYgISZkZXYtPmludF9pbikgeworCQlwb2xsX3Jlc3VsdC0+cmNfZGF0YVswXSA9IDB4ZmY7CisJCXJldHVybiAwOworCX0KKworCWlmICgmZGV2LT5pbnRfaW4pIHsKKwkJcG9sbF9yZXN1bHQtPnJjX2RhdGFbMF0gPSBpci0+dXJiX2RhdGFbMF07CisJCXBvbGxfcmVzdWx0LT5yY19kYXRhWzFdID0gaXItPnVyYl9kYXRhWzFdOworCX0gZWxzZSB7CisJCXRtNjAwMF9zZXRfcmVnKGRldiwgUkVRXzA0X0VOX0RJU0FCTEVfTUNVX0lOVCwgMiwgMCk7CisJCW1zbGVlcCgxMCk7CisJCXRtNjAwMF9zZXRfcmVnKGRldiwgUkVRXzA0X0VOX0RJU0FCTEVfTUNVX0lOVCwgMiwgMSk7CisJCW1zbGVlcCgxMCk7CisKKwkJcmMgPSB0bTYwMDBfcmVhZF93cml0ZV91c2IoZGV2LCBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwKKwkJIFVTQl9SRUNJUF9ERVZJQ0UsIFJFUV8wMl9HRVRfSVJfQ09ERSwgMCwgMCwgYnVmLCAxKTsKKworCQltc2xlZXAoMTApOworCisJCWRwcmludGsoInJlYWQgZGF0YT0lMDJ4XG4iLCBidWZbMF0pOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCisJCXBvbGxfcmVzdWx0LT5yY19kYXRhWzBdID0gYnVmWzBdOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdG02MDAwX2lyX2hhbmRsZV9rZXkoc3RydWN0IHRtNjAwMF9JUiAqaXIpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgdG02MDAwX2lyX3BvbGxfcmVzdWx0IHBvbGxfcmVzdWx0OworCisJLyogcmVhZCB0aGUgcmVnaXN0ZXJzIGNvbnRhaW5pbmcgdGhlIElSIHN0YXR1cyAqLworCXJlc3VsdCA9IGlyLT5nZXRfa2V5KGlyLCAmcG9sbF9yZXN1bHQpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gImlyLT5nZXRfa2V5KCkgZmFpbGVkICVkXG4iLCByZXN1bHQpOworCQlyZXR1cm47CisJfQorCisJZHByaW50aygiaXItPmdldF9rZXkgcmVzdWx0IGRhdGE9JTAyeCAlMDJ4XG4iLAorCQlwb2xsX3Jlc3VsdC5yY19kYXRhWzBdLCBwb2xsX3Jlc3VsdC5yY19kYXRhWzFdKTsKKworCWlmIChwb2xsX3Jlc3VsdC5yY19kYXRhWzBdICE9IDB4ZmYgJiYgaXItPmtleSA9PSAxKSB7CisJCWlyX2lucHV0X2tleWRvd24oaXItPmlucHV0LT5pbnB1dF9kZXYsICZpci0+aXIsCisJCQlwb2xsX3Jlc3VsdC5yY19kYXRhWzBdIHwgcG9sbF9yZXN1bHQucmNfZGF0YVsxXSA8PCA4KTsKKworCQlpcl9pbnB1dF9ub2tleShpci0+aW5wdXQtPmlucHV0X2RldiwgJmlyLT5pcik7CisJCWlyLT5rZXkgPSAwOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHRtNjAwMF9pcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgdG02MDAwX0lSICppciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdG02MDAwX0lSLCB3b3JrLndvcmspOworCisJdG02MDAwX2lyX2hhbmRsZV9rZXkoaXIpOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaXItPndvcmssIG1zZWNzX3RvX2ppZmZpZXMoaXItPnBvbGxpbmcpKTsKK30KKworc3RhdGljIGludCB0bTYwMDBfaXJfc3RhcnQodm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3QgdG02MDAwX0lSICppciA9IHByaXY7CisKKwlJTklUX0RFTEFZRURfV09SSygmaXItPndvcmssIHRtNjAwMF9pcl93b3JrKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmlyLT53b3JrLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0bTYwMDBfaXJfc3RvcCh2b2lkICpwcml2KQoreworCXN0cnVjdCB0bTYwMDBfSVIgKmlyID0gcHJpdjsKKworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaXItPndvcmspOworfQorCitpbnQgdG02MDAwX2lyX2NoYW5nZV9wcm90b2NvbCh2b2lkICpwcml2LCB1NjQgaXJfdHlwZSkKK3sKKwlzdHJ1Y3QgdG02MDAwX0lSICppciA9IHByaXY7CisKKwlpci0+Z2V0X2tleSA9IGRlZmF1bHRfcG9sbGluZ19nZXRrZXk7CisKKwl0bTYwMDBfaXJfY29uZmlnKGlyKTsKKwkvKiBUT0RPICovCisJcmV0dXJuIDA7Cit9CisKK2ludCB0bTYwMDBfaXJfaW5pdChzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldikKK3sKKwlzdHJ1Y3QgdG02MDAwX0lSICppcjsKKwlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9pbnB1dF9kZXY7CisJaW50IGVyciA9IC1FTk9NRU07CisJaW50IHBpcGUsIHNpemUsIHJjOworCisJaWYgKCFlbmFibGVfaXIpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFkZXYtPmNhcHMuaGFzX3JlbW90ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWRldi0+aXJfY29kZXMpCisJCXJldHVybiAwOworCisJaXIgPSBremFsbG9jKHNpemVvZigqaXIpLCBHRlBfS0VSTkVMKTsKKwlpcl9pbnB1dF9kZXYgPSBremFsbG9jKHNpemVvZigqaXJfaW5wdXRfZGV2KSwgR0ZQX0tFUk5FTCk7CisJaXJfaW5wdXRfZGV2LT5pbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWlyIHx8ICFpcl9pbnB1dF9kZXYgfHwgIWlyX2lucHV0X2Rldi0+aW5wdXRfZGV2KQorCQlnb3RvIGVycl9vdXRfZnJlZTsKKworCS8qIHJlY29yZCBoYW5kbGVzIHRvIG91cnNlbGYgKi8KKwlpci0+ZGV2ID0gZGV2OworCWRldi0+aXIgPSBpcjsKKworCWlyLT5pbnB1dCA9IGlyX2lucHV0X2RldjsKKworCS8qIGlucHV0IGVpbnJpY2h0ZW4gKi8KKwlpci0+cHJvcHMuYWxsb3dlZF9wcm90b3MgPSBJUl9UWVBFX1JDNSB8IElSX1RZUEVfTkVDOworCWlyLT5wcm9wcy5wcml2ID0gaXI7CisJaXItPnByb3BzLmNoYW5nZV9wcm90b2NvbCA9IHRtNjAwMF9pcl9jaGFuZ2VfcHJvdG9jb2w7CisJaXItPnByb3BzLm9wZW4gPSB0bTYwMDBfaXJfc3RhcnQ7CisJaXItPnByb3BzLmNsb3NlID0gdG02MDAwX2lyX3N0b3A7CisJaXItPnByb3BzLmRyaXZlcl90eXBlID0gUkNfRFJJVkVSX1NDQU5DT0RFOworCisJaXItPnBvbGxpbmcgPSA1MDsKKworCXNucHJpbnRmKGlyLT5uYW1lLCBzaXplb2YoaXItPm5hbWUpLCAidG01NjAwLzYweDAgSVIgKCVzKSIsCisJCQkJCQlkZXYtPm5hbWUpOworCisJdXNiX21ha2VfcGF0aChkZXYtPnVkZXYsIGlyLT5waHlzLCBzaXplb2YoaXItPnBoeXMpKTsKKwlzdHJsY2F0KGlyLT5waHlzLCAiL2lucHV0MCIsIHNpemVvZihpci0+cGh5cykpOworCisJdG02MDAwX2lyX2NoYW5nZV9wcm90b2NvbChpciwgSVJfVFlQRV9VTktOT1dOKTsKKwllcnIgPSBpcl9pbnB1dF9pbml0KGlyX2lucHV0X2Rldi0+aW5wdXRfZGV2LCAmaXItPmlyLCBJUl9UWVBFX09USEVSKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisKKwlpcl9pbnB1dF9kZXYtPmlucHV0X2Rldi0+bmFtZSA9IGlyLT5uYW1lOworCWlyX2lucHV0X2Rldi0+aW5wdXRfZGV2LT5waHlzID0gaXItPnBoeXM7CisJaXJfaW5wdXRfZGV2LT5pbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfVVNCOworCWlyX2lucHV0X2Rldi0+aW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMTsKKwlpcl9pbnB1dF9kZXYtPmlucHV0X2Rldi0+aWQudmVuZG9yID0gbGUxNl90b19jcHUoZGV2LT51ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwlpcl9pbnB1dF9kZXYtPmlucHV0X2Rldi0+aWQucHJvZHVjdCA9IGxlMTZfdG9fY3B1KGRldi0+dWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCisJaXJfaW5wdXRfZGV2LT5pbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmZGV2LT51ZGV2LT5kZXY7CisKKwlpZiAoJmRldi0+aW50X2luKSB7CisJCWRwcmludGsoIklSIG92ZXIgaW50XG4iKTsKKworCQlpci0+aW50X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisKKwkJcGlwZSA9IHVzYl9yY3ZpbnRwaXBlKGRldi0+dWRldiwKKwkJCWRldi0+aW50X2luLmVuZHAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcworCQkJJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCisJCXNpemUgPSB1c2JfbWF4cGFja2V0KGRldi0+dWRldiwgcGlwZSwgdXNiX3BpcGVvdXQocGlwZSkpOworCQlkcHJpbnRrKCJJUiBtYXggc2l6ZTogJWRcbiIsIHNpemUpOworCisJCWlyLT5pbnRfdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCQlpZiAoaXItPmludF91cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7CisJCQl1c2JfZnJlZV91cmIoaXItPmludF91cmIpOworCQkJZ290byBlcnJfb3V0X3N0b3A7CisJCX0KKwkJZHByaW50aygiaW50IGludGVydmFsOiAlZFxuIiwgZGV2LT5pbnRfaW4uZW5kcC0+ZGVzYy5iSW50ZXJ2YWwpOworCQl1c2JfZmlsbF9pbnRfdXJiKGlyLT5pbnRfdXJiLCBkZXYtPnVkZXYsIHBpcGUsCisJCQlpci0+aW50X3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBzaXplLAorCQkJdG02MDAwX2lyX3VyYl9yZWNlaXZlZCwgZGV2LAorCQkJZGV2LT5pbnRfaW4uZW5kcC0+ZGVzYy5iSW50ZXJ2YWwpOworCQlyYyA9IHVzYl9zdWJtaXRfdXJiKGlyLT5pbnRfdXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJjKSB7CisJCQlrZnJlZShpci0+aW50X3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJCXVzYl9mcmVlX3VyYihpci0+aW50X3VyYik7CisJCQllcnIgPSByYzsKKwkJCWdvdG8gZXJyX291dF9zdG9wOworCQl9CisJCWlyLT51cmJfZGF0YSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJfQorCisJLyogaXIgcmVnaXN0ZXIgKi8KKwllcnIgPSBpcl9pbnB1dF9yZWdpc3Rlcihpci0+aW5wdXQtPmlucHV0X2RldiwgZGV2LT5pcl9jb2RlcywKKwkJJmlyLT5wcm9wcywgInRtNjAwMCIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9zdG9wOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfc3RvcDoKKwlkZXYtPmlyID0gTlVMTDsKK2Vycl9vdXRfZnJlZToKKwlrZnJlZShpcl9pbnB1dF9kZXYpOworCWtmcmVlKGlyKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgdG02MDAwX2lyX2Zpbmkoc3RydWN0IHRtNjAwMF9jb3JlICpkZXYpCit7CisJc3RydWN0IHRtNjAwMF9JUiAqaXIgPSBkZXYtPmlyOworCisJLyogc2tpcCBkZXRhY2ggb24gbm9uIGF0dGFjaGVkIGJvYXJkICovCisKKwlpZiAoIWlyKQorCQlyZXR1cm4gMDsKKworCWlyX2lucHV0X3VucmVnaXN0ZXIoaXItPmlucHV0LT5pbnB1dF9kZXYpOworCisJaWYgKGlyLT5pbnRfdXJiKSB7CisJCXVzYl9raWxsX3VyYihpci0+aW50X3VyYik7CisJCWtmcmVlKGlyLT5pbnRfdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQl1c2JfZnJlZV91cmIoaXItPmludF91cmIpOworCQlpci0+aW50X3VyYiA9IE5VTEw7CisJCWtmcmVlKGlyLT51cmJfZGF0YSk7CisJCWlyLT51cmJfZGF0YSA9IE5VTEw7CisJfQorCisJa2ZyZWUoaXItPmlucHV0KTsKKwlpci0+aW5wdXQgPSBOVUxMOworCWtmcmVlKGlyKTsKKwlkZXYtPmlyID0gTlVMTDsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtc3Rkcy5jIGIvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtc3Rkcy5jCmluZGV4IGIzNTY0ZjYuLjZiZjRhNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvdG02MDAwLXN0ZHMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL3RtNjAwMC1zdGRzLmMKQEAgLTc3LDcgKzc3LDcgQEAKIAkJCXtUTTYwMTBfUkVRMDdfUjAxX1ZJREVPX0NPTlRST0wxLCAweDBlfSwKIAkJCXtUTTYwMTBfUkVRMDdfUjAyX1ZJREVPX0NPTlRST0wyLCAweDVmfSwKIAkJCXtUTTYwMTBfUkVRMDdfUjAzX1lDX1NFUF9DT05UUk9MLCAweDAwfSwKLQkJCXtUTTYwMTBfUkVRMDdfUjA3X09VVFBVVF9DT05UUk9MLCAweDAxfSwKKwkJCXtUTTYwMTBfUkVRMDdfUjA3X09VVFBVVF9DT05UUk9MLCAweDMxfSwKIAkJCXtUTTYwMTBfUkVRMDdfUjE4X0NIUk9NQV9EVE9fSU5DUkVNRU5UMywgMHgxZX0sCiAJCQl7VE02MDEwX1JFUTA3X1IxOV9DSFJPTUFfRFRPX0lOQ1JFTUVOVDIsIDB4ODN9LAogCQkJe1RNNjAxMF9SRVEwN19SMUFfQ0hST01BX0RUT19JTkNSRU1FTlQxLCAweDBhfSwKQEAgLTEzNSw3ICsxMzUsNyBAQAogCQkJe1RNNjAxMF9SRVEwN19SMDFfVklERU9fQ09OVFJPTDEsIDB4MGV9LAogCQkJe1RNNjAxMF9SRVEwN19SMDJfVklERU9fQ09OVFJPTDIsIDB4NWZ9LAogCQkJe1RNNjAxMF9SRVEwN19SMDNfWUNfU0VQX0NPTlRST0wsIDB4MDJ9LAotCQkJe1RNNjAxMF9SRVEwN19SMDdfT1VUUFVUX0NPTlRST0wsIDB4MDF9LAorCQkJe1RNNjAxMF9SRVEwN19SMDdfT1VUUFVUX0NPTlRST0wsIDB4MzF9LAogCQkJe1RNNjAxMF9SRVEwN19SMThfQ0hST01BX0RUT19JTkNSRU1FTlQzLCAweDFlfSwKIAkJCXtUTTYwMTBfUkVRMDdfUjE5X0NIUk9NQV9EVE9fSU5DUkVNRU5UMiwgMHg5MX0sCiAJCQl7VE02MDEwX1JFUTA3X1IxQV9DSFJPTUFfRFRPX0lOQ1JFTUVOVDEsIDB4MWZ9LApAQCAtMTkzLDcgKzE5Myw3IEBACiAJCQl7VE02MDEwX1JFUTA3X1IwMV9WSURFT19DT05UUk9MMSwgMHgwZX0sCiAJCQl7VE02MDEwX1JFUTA3X1IwMl9WSURFT19DT05UUk9MMiwgMHg1Zn0sCiAJCQl7VE02MDEwX1JFUTA3X1IwM19ZQ19TRVBfQ09OVFJPTCwgMHgwMn0sCi0JCQl7VE02MDEwX1JFUTA3X1IwN19PVVRQVVRfQ09OVFJPTCwgMHgwMX0sCisJCQl7VE02MDEwX1JFUTA3X1IwN19PVVRQVVRfQ09OVFJPTCwgMHgzMX0sCiAJCQl7VE02MDEwX1JFUTA3X1IxOF9DSFJPTUFfRFRPX0lOQ1JFTUVOVDMsIDB4MjV9LAogCQkJe1RNNjAxMF9SRVEwN19SMTlfQ0hST01BX0RUT19JTkNSRU1FTlQyLCAweGQ1fSwKIAkJCXtUTTYwMTBfUkVRMDdfUjFBX0NIUk9NQV9EVE9fSU5DUkVNRU5UMSwgMHg2M30sCkBAIC0yNTEsNyArMjUxLDcgQEAKIAkJCXtUTTYwMTBfUkVRMDdfUjAxX1ZJREVPX0NPTlRST0wxLCAweDBlfSwKIAkJCXtUTTYwMTBfUkVRMDdfUjAyX1ZJREVPX0NPTlRST0wyLCAweDVmfSwKIAkJCXtUTTYwMTBfUkVRMDdfUjAzX1lDX1NFUF9DT05UUk9MLCAweDAyfSwKLQkJCXtUTTYwMTBfUkVRMDdfUjA3X09VVFBVVF9DT05UUk9MLCAweDAxfSwKKwkJCXtUTTYwMTBfUkVRMDdfUjA3X09VVFBVVF9DT05UUk9MLCAweDMxfSwKIAkJCXtUTTYwMTBfUkVRMDdfUjE4X0NIUk9NQV9EVE9fSU5DUkVNRU5UMywgMHgyNH0sCiAJCQl7VE02MDEwX1JFUTA3X1IxOV9DSFJPTUFfRFRPX0lOQ1JFTUVOVDIsIDB4OTJ9LAogCQkJe1RNNjAxMF9SRVEwN19SMUFfQ0hST01BX0RUT19JTkNSRU1FTlQxLCAweGU4fSwKQEAgLTMwOCw3ICszMDgsNyBAQAogCQkJe1RNNjAxMF9SRVEwN19SMDFfVklERU9fQ09OVFJPTDEsIDB4MGZ9LAogCQkJe1RNNjAxMF9SRVEwN19SMDJfVklERU9fQ09OVFJPTDIsIDB4NWZ9LAogCQkJe1RNNjAxMF9SRVEwN19SMDNfWUNfU0VQX0NPTlRST0wsIDB4MDB9LAotCQkJe1RNNjAxMF9SRVEwN19SMDdfT1VUUFVUX0NPTlRST0wsIDB4MDF9LAorCQkJe1RNNjAxMF9SRVEwN19SMDdfT1VUUFVUX0NPTlRST0wsIDB4MzF9LAogCQkJe1RNNjAxMF9SRVEwN19SMThfQ0hST01BX0RUT19JTkNSRU1FTlQzLCAweDFlfSwKIAkJCXtUTTYwMTBfUkVRMDdfUjE5X0NIUk9NQV9EVE9fSU5DUkVNRU5UMiwgMHg4Yn0sCiAJCQl7VE02MDEwX1JFUTA3X1IxQV9DSFJPTUFfRFRPX0lOQ1JFTUVOVDEsIDB4YTJ9LApAQCAtMzU0LDcgKzM1NCw3IEBACiAJCQl7VE02MDEwX1JFUTA3X1IwMV9WSURFT19DT05UUk9MMSwgMHgwZX0sCiAJCQl7VE02MDEwX1JFUTA3X1IwMl9WSURFT19DT05UUk9MMiwgMHg1Zn0sCiAJCQl7VE02MDEwX1JFUTA3X1IwM19ZQ19TRVBfQ09OVFJPTCwgMHgwMH0sCi0JCQl7VE02MDEwX1JFUTA3X1IwN19PVVRQVVRfQ09OVFJPTCwgMHgwMX0sCisJCQl7VE02MDEwX1JFUTA3X1IwN19PVVRQVVRfQ09OVFJPTCwgMHgzMX0sCiAJCQl7VE02MDEwX1JFUTA3X1IxOF9DSFJPTUFfRFRPX0lOQ1JFTUVOVDMsIDB4MWV9LAogCQkJe1RNNjAxMF9SRVEwN19SMTlfQ0hST01BX0RUT19JTkNSRU1FTlQyLCAweDgzfSwKIAkJCXtUTTYwMTBfUkVRMDdfUjFBX0NIUk9NQV9EVE9fSU5DUkVNRU5UMSwgMHgwYX0sCkBAIC0zOTYsNyArMzk2LDcgQEAKIAkJCXtUTTYwMTBfUkVRMDdfUjAxX1ZJREVPX0NPTlRST0wxLCAweDBlfSwKIAkJCXtUTTYwMTBfUkVRMDdfUjAyX1ZJREVPX0NPTlRST0wyLCAweDVmfSwKIAkJCXtUTTYwMTBfUkVRMDdfUjAzX1lDX1NFUF9DT05UUk9MLCAweDAyfSwKLQkJCXtUTTYwMTBfUkVRMDdfUjA3X09VVFBVVF9DT05UUk9MLCAweDAxfSwKKwkJCXtUTTYwMTBfUkVRMDdfUjA3X09VVFBVVF9DT05UUk9MLCAweDMxfSwKIAkJCXtUTTYwMTBfUkVRMDdfUjE4X0NIUk9NQV9EVE9fSU5DUkVNRU5UMywgMHgxZX0sCiAJCQl7VE02MDEwX1JFUTA3X1IxOV9DSFJPTUFfRFRPX0lOQ1JFTUVOVDIsIDB4OTF9LAogCQkJe1RNNjAxMF9SRVEwN19SMUFfQ0hST01BX0RUT19JTkNSRU1FTlQxLCAweDFmfSwKQEAgLTQzOCw3ICs0MzgsNyBAQAogCQkJe1RNNjAxMF9SRVEwN19SMDFfVklERU9fQ09OVFJPTDEsIDB4MGV9LAogCQkJe1RNNjAxMF9SRVEwN19SMDJfVklERU9fQ09OVFJPTDIsIDB4NWZ9LAogCQkJe1RNNjAxMF9SRVEwN19SMDNfWUNfU0VQX0NPTlRST0wsIDB4MDJ9LAotCQkJe1RNNjAxMF9SRVEwN19SMDdfT1VUUFVUX0NPTlRST0wsIDB4MDF9LAorCQkJe1RNNjAxMF9SRVEwN19SMDdfT1VUUFVUX0NPTlRST0wsIDB4MzF9LAogCQkJe1RNNjAxMF9SRVEwN19SMThfQ0hST01BX0RUT19JTkNSRU1FTlQzLCAweDI1fSwKIAkJCXtUTTYwMTBfUkVRMDdfUjE5X0NIUk9NQV9EVE9fSU5DUkVNRU5UMiwgMHhkNX0sCiAJCQl7VE02MDEwX1JFUTA3X1IxQV9DSFJPTUFfRFRPX0lOQ1JFTUVOVDEsIDB4NjN9LApAQCAtNDgwLDcgKzQ4MCw3IEBACiAJCQl7VE02MDEwX1JFUTA3X1IwMV9WSURFT19DT05UUk9MMSwgMHgwZX0sCiAJCQl7VE02MDEwX1JFUTA3X1IwMl9WSURFT19DT05UUk9MMiwgMHg1Zn0sCiAJCQl7VE02MDEwX1JFUTA3X1IwM19ZQ19TRVBfQ09OVFJPTCwgMHgwMn0sCi0JCQl7VE02MDEwX1JFUTA3X1IwN19PVVRQVVRfQ09OVFJPTCwgMHgwMX0sCisJCQl7VE02MDEwX1JFUTA3X1IwN19PVVRQVVRfQ09OVFJPTCwgMHgzMX0sCiAJCQl7VE02MDEwX1JFUTA3X1IxOF9DSFJPTUFfRFRPX0lOQ1JFTUVOVDMsIDB4MjR9LAogCQkJe1RNNjAxMF9SRVEwN19SMTlfQ0hST01BX0RUT19JTkNSRU1FTlQyLCAweDkyfSwKIAkJCXtUTTYwMTBfUkVRMDdfUjFBX0NIUk9NQV9EVE9fSU5DUkVNRU5UMSwgMHhlOH0sCkBAIC01MjEsNyArNTIxLDcgQEAKIAkJCXtUTTYwMTBfUkVRMDdfUjAxX1ZJREVPX0NPTlRST0wxLCAweDBmfSwKIAkJCXtUTTYwMTBfUkVRMDdfUjAyX1ZJREVPX0NPTlRST0wyLCAweDVmfSwKIAkJCXtUTTYwMTBfUkVRMDdfUjAzX1lDX1NFUF9DT05UUk9MLCAweDAwfSwKLQkJCXtUTTYwMTBfUkVRMDdfUjA3X09VVFBVVF9DT05UUk9MLCAweDAxfSwKKwkJCXtUTTYwMTBfUkVRMDdfUjA3X09VVFBVVF9DT05UUk9MLCAweDMxfSwKIAkJCXtUTTYwMTBfUkVRMDdfUjE4X0NIUk9NQV9EVE9fSU5DUkVNRU5UMywgMHgxZX0sCiAJCQl7VE02MDEwX1JFUTA3X1IxOV9DSFJPTUFfRFRPX0lOQ1JFTUVOVDIsIDB4OGJ9LAogCQkJe1RNNjAxMF9SRVEwN19SMUFfQ0hST01BX0RUT19JTkNSRU1FTlQxLCAweGEyfSwKQEAgLTU2Nyw3ICs1NjcsNyBAQAogCQkJe1RNNjAxMF9SRVEwN19SMDFfVklERU9fQ09OVFJPTDEsIDB4MGV9LAogCQkJe1RNNjAxMF9SRVEwN19SMDJfVklERU9fQ09OVFJPTDIsIDB4NWZ9LAogCQkJe1RNNjAxMF9SRVEwN19SMDNfWUNfU0VQX0NPTlRST0wsIDB4MDR9LAotCQkJe1RNNjAxMF9SRVEwN19SMDdfT1VUUFVUX0NPTlRST0wsIDB4MDF9LAorCQkJe1RNNjAxMF9SRVEwN19SMDdfT1VUUFVUX0NPTlRST0wsIDB4MzF9LAogCQkJe1RNNjAxMF9SRVEwN19SMThfQ0hST01BX0RUT19JTkNSRU1FTlQzLCAweDFlfSwKIAkJCXtUTTYwMTBfUkVRMDdfUjE5X0NIUk9NQV9EVE9fSU5DUkVNRU5UMiwgMHg4M30sCiAJCQl7VE02MDEwX1JFUTA3X1IxQV9DSFJPTUFfRFRPX0lOQ1JFTUVOVDEsIDB4MGF9LApAQCAtNjA5LDcgKzYwOSw3IEBACiAJCQl7VE02MDEwX1JFUTA3X1IwMV9WSURFT19DT05UUk9MMSwgMHgwZX0sCiAJCQl7VE02MDEwX1JFUTA3X1IwMl9WSURFT19DT05UUk9MMiwgMHg1Zn0sCiAJCQl7VE02MDEwX1JFUTA3X1IwM19ZQ19TRVBfQ09OVFJPTCwgMHgwNH0sCi0JCQl7VE02MDEwX1JFUTA3X1IwN19PVVRQVVRfQ09OVFJPTCwgMHgwMX0sCisJCQl7VE02MDEwX1JFUTA3X1IwN19PVVRQVVRfQ09OVFJPTCwgMHgzMX0sCiAJCQl7VE02MDEwX1JFUTA3X1IxOF9DSFJPTUFfRFRPX0lOQ1JFTUVOVDMsIDB4MWV9LAogCQkJe1RNNjAxMF9SRVEwN19SMTlfQ0hST01BX0RUT19JTkNSRU1FTlQyLCAweDkxfSwKIAkJCXtUTTYwMTBfUkVRMDdfUjFBX0NIUk9NQV9EVE9fSU5DUkVNRU5UMSwgMHgxZn0sCkBAIC02NTEsNyArNjUxLDcgQEAKIAkJCXtUTTYwMTBfUkVRMDdfUjAxX1ZJREVPX0NPTlRST0wxLCAweDBlfSwKIAkJCXtUTTYwMTBfUkVRMDdfUjAyX1ZJREVPX0NPTlRST0wyLCAweDVmfSwKIAkJCXtUTTYwMTBfUkVRMDdfUjAzX1lDX1NFUF9DT05UUk9MLCAweDA0fSwKLQkJCXtUTTYwMTBfUkVRMDdfUjA3X09VVFBVVF9DT05UUk9MLCAweDAwfSwKKwkJCXtUTTYwMTBfUkVRMDdfUjA3X09VVFBVVF9DT05UUk9MLCAweDMwfSwKIAkJCXtUTTYwMTBfUkVRMDdfUjE4X0NIUk9NQV9EVE9fSU5DUkVNRU5UMywgMHgyNX0sCiAJCQl7VE02MDEwX1JFUTA3X1IxOV9DSFJPTUFfRFRPX0lOQ1JFTUVOVDIsIDB4ZDV9LAogCQkJe1RNNjAxMF9SRVEwN19SMUFfQ0hST01BX0RUT19JTkNSRU1FTlQxLCAweDYzfSwKQEAgLTY5Myw3ICs2OTMsNyBAQAogCQkJe1RNNjAxMF9SRVEwN19SMDFfVklERU9fQ09OVFJPTDEsIDB4MGV9LAogCQkJe1RNNjAxMF9SRVEwN19SMDJfVklERU9fQ09OVFJPTDIsIDB4NWZ9LAogCQkJe1RNNjAxMF9SRVEwN19SMDNfWUNfU0VQX0NPTlRST0wsIDB4MDN9LAotCQkJe1RNNjAxMF9SRVEwN19SMDdfT1VUUFVUX0NPTlRST0wsIDB4MDF9LAorCQkJe1RNNjAxMF9SRVEwN19SMDdfT1VUUFVUX0NPTlRST0wsIDB4MzF9LAogCQkJe1RNNjAxMF9SRVEwN19SMThfQ0hST01BX0RUT19JTkNSRU1FTlQzLCAweDI0fSwKIAkJCXtUTTYwMTBfUkVRMDdfUjE5X0NIUk9NQV9EVE9fSU5DUkVNRU5UMiwgMHg5Mn0sCiAJCQl7VE02MDEwX1JFUTA3X1IxQV9DSFJPTUFfRFRPX0lOQ1JFTUVOVDEsIDB4ZTh9LApAQCAtNzM0LDcgKzczNCw3IEBACiAJCQl7VE02MDEwX1JFUTA3X1IwMV9WSURFT19DT05UUk9MMSwgMHgwZn0sCiAJCQl7VE02MDEwX1JFUTA3X1IwMl9WSURFT19DT05UUk9MMiwgMHg1Zn0sCiAJCQl7VE02MDEwX1JFUTA3X1IwM19ZQ19TRVBfQ09OVFJPTCwgMHgwM30sCi0JCQl7VE02MDEwX1JFUTA3X1IwN19PVVRQVVRfQ09OVFJPTCwgMHgwMH0sCisJCQl7VE02MDEwX1JFUTA3X1IwN19PVVRQVVRfQ09OVFJPTCwgMHgzMH0sCiAJCQl7VE02MDEwX1JFUTA3X1IxN19ITE9PUF9NQVhTVEFURSwgMHg4Yn0sCiAJCQl7VE02MDEwX1JFUTA3X1IxOF9DSFJPTUFfRFRPX0lOQ1JFTUVOVDMsIDB4MWV9LAogCQkJe1RNNjAxMF9SRVEwN19SMTlfQ0hST01BX0RUT19JTkNSRU1FTlQyLCAweDhifSwKQEAgLTc2MywxMSArNzYzLDExIEBACiB2b2lkIHRtNjAwMF9nZXRfc3RkX3JlcyhzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldikKIHsKIAkvKiBDdXJyZW50bHksIHRob3NlIGFyZSB0aGUgb25seSBzdXBwb3J0ZWQgcmVzb2x0aW9ucyAqLwotCWlmIChkZXYtPm5vcm0gJiBWNEwyX1NURF81MjVfNjApIHsKKwlpZiAoZGV2LT5ub3JtICYgVjRMMl9TVERfNTI1XzYwKQogCQlkZXYtPmhlaWdodCA9IDQ4MDsKLQl9IGVsc2UgeworCWVsc2UKIAkJZGV2LT5oZWlnaHQgPSA1NzY7Ci0JfQorCiAJZGV2LT53aWR0aCA9IDcyMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtdXNiLWlzb2MuaCBiL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvdG02MDAwLXVzYi1pc29jLmgKaW5kZXggNWE1MDQ5YS4uMTM4NzE2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtdXNiLWlzb2MuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL3RtNjAwMC11c2ItaXNvYy5oCkBAIC0zOSw3ICszOSw3IEBACiAJaW50CQkJCXBvcywgc2l6ZSwgcGt0c2l6ZTsKIAogCQkvKiBMYXN0IGZpZWxkOiBPREQgb3IgRVZFTj8gKi8KLQlpbnQJCQkJZmllbGQ7CisJaW50CQkJCXZmaWVsZDsKIAogCQkvKiBTdG9yZXMgaW5jb21wbGV0ZSBjb21tYW5kcyAqLwogCXUzMgkJCQl0bXBfYnVmOwpAQCAtNDcsNyArNDcsNCBAQAogCiAJCS8qIFN0b3JlcyBhbHJlYWR5IHJlcXVlc3RlZCBidWZmZXJzICovCiAJc3RydWN0IHRtNjAwMF9idWZmZXIgICAgCSpidWY7Ci0KLQkJLyogU3RvcmVzIHRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgZmllbGRzICovCi0JaW50CQkJCW5maWVsZHM7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtdmlkZW8uYyBiL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvdG02MDAwLXZpZGVvLmMKaW5kZXggNTZmYTM3MS4uY2UwYTA4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtdmlkZW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL3RtNjAwMC12aWRlby5jCkBAIC01Niw2ICs1Niw3IEBACiAKIC8qIERlYnVnIGxldmVsICovCiBpbnQgdG02MDAwX2RlYnVnOworRVhQT1JUX1NZTUJPTF9HUEwodG02MDAwX2RlYnVnKTsKIAogLyogc3VwcG9ydGVkIGNvbnRyb2xzICovCiBzdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHRtNjAwMF9xY3RybFtdID0gewpAQCAtMTQ5LDggKzE1MCw2IEBACiAKIAkvKiBDbGVhbnMgdXAgYnVmZmVyIC0gVXNlZnVsbCBmb3IgdGVzdGluZyBmb3IgZnJhbWUvVVJCIGxvc3MgKi8KIAlvdXRwID0gdmlkZW9idWZfdG9fdm1hbGxvYygmKCpidWYpLT52Yik7Ci0vLwlpZiAob3V0cCkKLS8vCQltZW1zZXQob3V0cCwgMCwgKCpidWYpLT52Yi5zaXplKTsKIAogCXJldHVybjsKIH0KQEAgLTE4NiwyMzYgKzE4NSwxNTIgQEAKIC8qCiAgKiBJZGVudGlmeSB0aGUgdG01NjAwLzYwMDAgYnVmZmVyIGhlYWRlciB0eXBlIGFuZCBwcm9wZXJseSBoYW5kbGVzCiAgKi8KLXN0YXRpYyBpbnQgY29weV9wYWNrZXQoc3RydWN0IHVyYiAqdXJiLCB1MzIgaGVhZGVyLCB1OCAqKnB0ciwgdTggKmVuZHAsCi0JCQl1OCAqb3V0X3AsIHN0cnVjdCB0bTYwMDBfYnVmZmVyICoqYnVmKQotewotCXN0cnVjdCB0bTYwMDBfZG1hcXVldWUgICpkbWFfcSA9IHVyYi0+Y29udGV4dDsKLQlzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldiA9IGNvbnRhaW5lcl9vZihkbWFfcSwgc3RydWN0IHRtNjAwMF9jb3JlLCB2aWRxKTsKLQl1OCBjOwotCXVuc2lnbmVkIGludCBjbWQsIGNweXNpemUsIHBrdHNpemUsIHNpemUsIGZpZWxkLCBibG9jaywgbGluZSwgcG9zID0gMDsKLQlpbnQgcmMgPSAwOwotCS8qIEZJWE1FOiBtb3ZlIHRvIHRtNjAwMC1pc29jICovCi0Jc3RhdGljIGludCBsYXN0X2xpbmUgPSAtMiwgc3RhcnRfbGluZSA9IC0yLCBsYXN0X2ZpZWxkID0gLTI7Ci0KLQkvKiBGSVhNRTogdGhpcyBpcyB0aGUgaGFyZGNvZGVkIHdpbmRvdyBzaXplCi0JICovCi0JdW5zaWduZWQgaW50IGxpbmV3aWR0aCA9ICgqYnVmKS0+dmIud2lkdGggPDwgMTsKLQotCWlmICghZGV2LT5pc29jX2N0bC5jbWQpIHsKLQkJYyA9IChoZWFkZXIgPj4gMjQpICYgMHhmZjsKLQotCQkvKiBzcGxpdCB0aGUgaGVhZGVyIGZpZWxkcyAqLwotCQlzaXplICA9ICgoaGVhZGVyICYgMHg3ZSkgPDwgMSk7Ci0KLQkJaWYgKHNpemUgPiAwKQotCQkJc2l6ZSAtPSA0OwotCi0JCWJsb2NrID0gKGhlYWRlciA+PiA3KSAmIDB4ZjsKLQkJZmllbGQgPSAoaGVhZGVyID4+IDExKSAmIDB4MTsKLQkJbGluZSAgPSAoaGVhZGVyID4+IDEyKSAmIDB4MWZmOwotCQljbWQgICA9IChoZWFkZXIgPj4gMjEpICYgMHg3OwotCi0JCS8qIFZhbGlkYXRlcyBoZWFkZXIgZmllbGRzICovCi0JCWlmKHNpemUgPiBUTTYwMDBfVVJCX01TR19MRU4pCi0JCQlzaXplID0gVE02MDAwX1VSQl9NU0dfTEVOOwotCi0JCWlmIChjbWQgPT0gVE02MDAwX1VSQl9NU0dfVklERU8pIHsKLQkJCWlmICgoYmxvY2srMSkqVE02MDAwX1VSQl9NU0dfTEVOPmxpbmV3aWR0aCkKLQkJCQljbWQgPSBUTTYwMDBfVVJCX01TR19FUlI7Ci0KLQkJCS8qIEZJWE1FOiBNb3VudHMgdGhlIGltYWdlIGFzIGZpZWxkMCtmaWVsZDEKLQkJCSAqIEl0IHNob3VsZCwgaW5zdGVhZCwgY2hlY2sgaWYgdGhlIHVzZXIgc2VsZWN0ZWQKLQkJCSAqIGVudHJlbGFjZWQgb3Igbm9uLWVudHJlbGFjZWQgbW9kZQotCQkJICovCi0JCQlwb3MgPSAoKGxpbmUgPDwgMSkgLSBmaWVsZCAtIDEpICogbGluZXdpZHRoICsKLQkJCQlibG9jayAqIFRNNjAwMF9VUkJfTVNHX0xFTjsKLQotCQkJLyogRG9uJ3QgYWxsb3cgdG8gd3JpdGUgb3V0IG9mIHRoZSBidWZmZXIgKi8KLQkJCWlmIChwb3MrVE02MDAwX1VSQl9NU0dfTEVOID4gKCpidWYpLT52Yi5zaXplKSB7Ci0JCQkJZHByaW50ayhkZXYsIFY0TDJfREVCVUdfSVNPQywKLQkJCQkJIkVSUjogc2l6ZT0lZCwgbnVtPSVkLCBsaW5lPSVkLCAiCi0JCQkJCSJmaWVsZD0lZFxuIiwKLQkJCQkJc2l6ZSwgYmxvY2ssIGxpbmUsIGZpZWxkKTsKLQotCQkJCWNtZCA9IFRNNjAwMF9VUkJfTVNHX0VSUjsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXBvcz0wOwotCQl9Ci0KLQkJLyogUHJpbnRzIGRlYnVnIGluZm8gKi8KLQkJZHByaW50ayhkZXYsIFY0TDJfREVCVUdfSVNPQywgInNpemU9JWQsIG51bT0lZCwgIgotCQkJCSIgbGluZT0lZCwgZmllbGQ9JWRcbiIsCi0JCQkJc2l6ZSwgYmxvY2ssIGxpbmUsIGZpZWxkKTsKLQotCQlpZiAoKGxhc3RfbGluZSE9bGluZSkmJihsYXN0X2xpbmUrMSE9bGluZSkgJiYKLQkJICAgIChjbWQgIT0gVE02MDAwX1VSQl9NU0dfRVJSKSApICB7Ci0JCQlpZiAoY21kICE9IFRNNjAwMF9VUkJfTVNHX1ZJREVPKSAgewotCQkJCWRwcmludGsoZGV2LCBWNEwyX0RFQlVHX0lTT0MsICAiY21kPSVkLCAiCi0JCQkJCSJzaXplPSVkLCBudW09JWQsIGxpbmU9JWQsIGZpZWxkPSVkXG4iLAotCQkJCQljbWQsIHNpemUsIGJsb2NrLCBsaW5lLCBmaWVsZCk7Ci0JCQl9Ci0JCQlpZiAoc3RhcnRfbGluZTwwKQotCQkJCXN0YXJ0X2xpbmU9bGFzdF9saW5lOwotCQkJLyogUHJpbnRzIGRlYnVnIGluZm8gKi8KLQkJCWRwcmludGsoZGV2LCBWNEwyX0RFQlVHX0lTT0MsICJsaW5lcz0gJWQtJWQsICIKLQkJCQkJImZpZWxkPSVkXG4iLAotCQkJCQlzdGFydF9saW5lLCBsYXN0X2xpbmUsIGZpZWxkKTsKLQotCQkJaWYgKChzdGFydF9saW5lPDYgJiYgbGFzdF9saW5lPjIwMCkgJiYKLQkJCQkobGFzdF9maWVsZCAhPSBmaWVsZCkgKSB7Ci0KLQkJCQlkZXYtPmlzb2NfY3RsLm5maWVsZHMrKzsKLQkJCQlpZiAoZGV2LT5pc29jX2N0bC5uZmllbGRzPj0yKSB7Ci0JCQkJCWRldi0+aXNvY19jdGwubmZpZWxkcz0wOwotCi0JCQkJCS8qIEFubm91bmNlcyB0aGF0IGEgbmV3IGJ1ZmZlciB3ZXJlIGZpbGxlZCAqLwotCQkJCQlidWZmZXJfZmlsbGVkIChkZXYsIGRtYV9xLCAqYnVmKTsKLQkJCQkJZHByaW50ayhkZXYsIFY0TDJfREVCVUdfSVNPQywKLQkJCQkJCQkibmV3IGJ1ZmZlciBmaWxsZWRcbiIpOwotCQkJCQlnZXRfbmV4dF9idWYgKGRtYV9xLCBidWYpOwotCQkJCQlpZiAoISpidWYpCi0JCQkJCQlyZXR1cm4gcmM7Ci0JCQkJCW91dF9wID0gdmlkZW9idWZfdG9fdm1hbGxvYygmKCgqYnVmKS0+dmIpKTsKLQkJCQkJaWYgKCFvdXRfcCkKLQkJCQkJCXJldHVybiByYzsKLQotCQkJCQlwb3MgPSBkZXYtPmlzb2NfY3RsLnBvcyA9IDA7Ci0JCQkJfQotCQkJfQotCi0JCQlzdGFydF9saW5lPWxpbmU7Ci0JCQlsYXN0X2ZpZWxkPWZpZWxkOwotCQl9Ci0JCWlmIChjbWQgPT0gVE02MDAwX1VSQl9NU0dfVklERU8pCi0JCQlsYXN0X2xpbmUgPSBsaW5lOwotCi0JCXBrdHNpemUgPSBUTTYwMDBfVVJCX01TR19MRU47Ci0JfSBlbHNlIHsKLQkJLyogQ29udGludWUgdGhlIGxhc3QgY29weSAqLwotCQljbWQgPSBkZXYtPmlzb2NfY3RsLmNtZDsKLQkJc2l6ZT0gZGV2LT5pc29jX2N0bC5zaXplOwotCQlwb3MgPSBkZXYtPmlzb2NfY3RsLnBvczsKLQkJcGt0c2l6ZSA9IGRldi0+aXNvY19jdGwucGt0c2l6ZTsKLQl9Ci0KLQljcHlzaXplID0gKGVuZHAtKCpwdHIpID4gc2l6ZSkgPyBzaXplIDogZW5kcCAtICpwdHI7Ci0KLQlpZiAoY3B5c2l6ZSkgewotCQkvKiBoYW5kbGVzIGVhY2ggZGlmZmVyZW50IFVSQiBtZXNzYWdlICovCi0JCXN3aXRjaChjbWQpIHsKLQkJY2FzZSBUTTYwMDBfVVJCX01TR19WSURFTzoKLQkJCS8qIEZpbGxzIHZpZGVvIGJ1ZmZlciAqLwotCQkJbWVtY3B5KCZvdXRfcFtwb3NdLCAqcHRyLCBjcHlzaXplKTsKLQkJCWJyZWFrOwotCQljYXNlIFRNNjAwMF9VUkJfTVNHX1BUUzoKLQkJCWJyZWFrOwotCQljYXNlIFRNNjAwMF9VUkJfTVNHX0FVRElPOgotCQkJLyogTmVlZCBzb21lIGNvZGUgdG8gcHJvY2VzcyBhdWRpbyAqLwotCQkJcHJpbnRrICgiJWxkOiBjbWQ9JXMsIHNpemU9JWRcbiIsIGppZmZpZXMsCi0JCQkJdG02MDAwX21zZ190eXBlW2NtZF0sc2l6ZSk7Ci0JCQlicmVhazsKLQkJY2FzZSBUTTYwMDBfVVJCX01TR19WQkk6Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRwcmludGsgKGRldiwgVjRMMl9ERUJVR19JU09DLCAiY21kPSVzLCBzaXplPSVkXG4iLAotCQkJCQkJdG02MDAwX21zZ190eXBlW2NtZF0sc2l6ZSk7Ci0JCX0KLQl9Ci0JaWYgKGNweXNpemU8c2l6ZSkgewotCQkvKiBFbmQgb2YgVVJCIHBhY2tldCwgYnV0IGNtZCBwcm9jZXNzaW5nIGlzIG5vdAotCQkgKiBjb21wbGV0ZS4gUHJlc2VydmUgdGhlIHN0YXRlIGZvciBhIG5leHQgcGFja2V0Ci0JCSAqLwotCQlkZXYtPmlzb2NfY3RsLnBvcyA9IHBvcytjcHlzaXplOwotCQlkZXYtPmlzb2NfY3RsLnNpemU9IHNpemUtY3B5c2l6ZTsKLQkJZGV2LT5pc29jX2N0bC5jbWQgPSBjbWQ7Ci0JCWRldi0+aXNvY19jdGwucGt0c2l6ZSA9IHBrdHNpemUtY3B5c2l6ZTsKLQkJKCpwdHIpKz1jcHlzaXplOwotCX0gZWxzZSB7Ci0JCWRldi0+aXNvY19jdGwuY21kID0gMDsKLQkJKCpwdHIpKz1wa3RzaXplOwotCX0KLQotCXJldHVybiByYzsKLX0KLQogc3RhdGljIGludCBjb3B5X3N0cmVhbXModTggKmRhdGEsIHVuc2lnbmVkIGxvbmcgbGVuLAogCQkJc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB0bTYwMDBfZG1hcXVldWUgICpkbWFfcSA9IHVyYi0+Y29udGV4dDsKIAlzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldj0gY29udGFpbmVyX29mKGRtYV9xLHN0cnVjdCB0bTYwMDBfY29yZSx2aWRxKTsKLQl1OCAqcHRyPWRhdGEsICplbmRwPWRhdGErbGVuOworCXU4ICpwdHI9ZGF0YSwgKmVuZHA9ZGF0YStsZW4sIGM7CiAJdW5zaWduZWQgbG9uZyBoZWFkZXI9MDsKIAlpbnQgcmM9MDsKLQlzdHJ1Y3QgdG02MDAwX2J1ZmZlciAqYnVmOwotCWNoYXIgKm91dHAgPSBOVUxMOworCXVuc2lnbmVkIGludCBjbWQsIGNweXNpemUsIHBrdHNpemUsIHNpemUsIGZpZWxkLCBibG9jaywgbGluZSwgcG9zID0gMDsKKwlzdHJ1Y3QgdG02MDAwX2J1ZmZlciAqdmJ1ZjsKKwljaGFyICp2b3V0cCA9IE5VTEw7CisJdW5zaWduZWQgaW50IGxpbmV3aWR0aDsKIAotCWdldF9uZXh0X2J1ZihkbWFfcSwgJmJ1Zik7Ci0JaWYgKGJ1ZikKLQkJb3V0cCA9IHZpZGVvYnVmX3RvX3ZtYWxsb2MoJmJ1Zi0+dmIpOwotCi0JaWYgKCFvdXRwKQorCS8qIGdldCB2aWRlbyBidWZmZXIgKi8KKwlnZXRfbmV4dF9idWYgKGRtYV9xLCAmdmJ1Zik7CisJaWYgKCF2YnVmKQorCQlyZXR1cm4gcmM7CisJdm91dHAgPSB2aWRlb2J1Zl90b192bWFsbG9jKCZ2YnVmLT52Yik7CisJaWYgKCF2b3V0cCkKIAkJcmV0dXJuIDA7CiAKLQlmb3IgKHB0cj1kYXRhOyBwdHI8ZW5kcDspIHsKKwlmb3IgKHB0ciA9IGRhdGE7IHB0ciA8IGVuZHA7KSB7CiAJCWlmICghZGV2LT5pc29jX2N0bC5jbWQpIHsKLQkJCXU4ICpwPSh1OCAqKSZkZXYtPmlzb2NfY3RsLnRtcF9idWY7Ci0JCQkvKiBGSVhNRTogVGhpcyBzZWVtcyB2ZXJ5IGNvbXBsZXgKLQkJCSAqIEl0IGp1c3QgcmVjb3ZlcnMgdXAgdG8gMyBieXRlcyBvZiB0aGUgaGVhZGVyIHRoYXQKLQkJCSAqIG1pZ2h0IGJlIGF0IHRoZSBwcmV2aW91cyBwYWNrZXQKLQkJCSAqLwotCQkJaWYgKGRldi0+aXNvY19jdGwudG1wX2J1Zl9sZW4pIHsKLQkJCQl3aGlsZSAoZGV2LT5pc29jX2N0bC50bXBfYnVmX2xlbikgewotCQkJCQlpZiAoICoocHRyKzMtZGV2LT5pc29jX2N0bC50bXBfYnVmX2xlbikgPT0gMHg0NykgewotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQkJcCsrOwotCQkJCQlkZXYtPmlzb2NfY3RsLnRtcF9idWZfbGVuLS07Ci0JCQkJfQotCQkJCWlmIChkZXYtPmlzb2NfY3RsLnRtcF9idWZfbGVuKSB7Ci0JCQkJCW1lbWNweSgmaGVhZGVyLCBwLAotCQkJCQkJZGV2LT5pc29jX2N0bC50bXBfYnVmX2xlbik7Ci0JCQkJCW1lbWNweSgodTggKikmaGVhZGVyICsKKwkJCS8qIEhlYWRlciAqLworCQkJaWYgKGRldi0+aXNvY19jdGwudG1wX2J1Zl9sZW4gPiAwKSB7CisJCQkJLyogZnJvbSBsYXN0IHVyYiBvciBwYWNrZXQgKi8KKwkJCQloZWFkZXIgPSBkZXYtPmlzb2NfY3RsLnRtcF9idWY7CisJCQkJaWYgKDQgLSBkZXYtPmlzb2NfY3RsLnRtcF9idWZfbGVuID4gMCkgeworCQkJCQltZW1jcHkgKCh1OCAqKSZoZWFkZXIgKwogCQkJCQkJZGV2LT5pc29jX2N0bC50bXBfYnVmX2xlbiwKIAkJCQkJCXB0ciwKIAkJCQkJCTQgLSBkZXYtPmlzb2NfY3RsLnRtcF9idWZfbGVuKTsKIAkJCQkJcHRyICs9IDQgLSBkZXYtPmlzb2NfY3RsLnRtcF9idWZfbGVuOwotCQkJCQlnb3RvIEhFQURFUjsKIAkJCQl9Ci0JCQl9Ci0JCQkvKiBTZWVrIGZvciBzeW5jICovCi0JCQlmb3IgKDtwdHI8ZW5kcC0zO3B0cisrKSB7Ci0JCQkJaWYgKCoocHRyKzMpPT0weDQ3KQotCQkJCQlicmVhazsKKwkJCQlkZXYtPmlzb2NfY3RsLnRtcF9idWZfbGVuID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKHB0ciArIDMgPj0gZW5kcCkgeworCQkJCQkvKiBoYXZlIGluY29tcGxldGUgaGVhZGVyICovCisJCQkJCWRldi0+aXNvY19jdGwudG1wX2J1Zl9sZW4gPSBlbmRwIC0gcHRyOworCQkJCQltZW1jcHkgKCZkZXYtPmlzb2NfY3RsLnRtcF9idWYsIHB0ciwKKwkJCQkJCWRldi0+aXNvY19jdGwudG1wX2J1Zl9sZW4pOworCQkJCQlyZXR1cm4gcmM7CisJCQkJfQorCQkJCS8qIFNlZWsgZm9yIHN5bmMgKi8KKwkJCQlmb3IgKDsgcHRyIDwgZW5kcCAtIDM7IHB0cisrKSB7CisJCQkJCWlmICgqKHB0ciArIDMpID09IDB4NDcpCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLyogR2V0IG1lc3NhZ2UgaGVhZGVyICovCisJCQkJaGVhZGVyID0gKih1bnNpZ25lZCBsb25nICopcHRyOworCQkJCXB0ciArPSA0OwogCQkJfQogCi0JCQlpZiAocHRyKzM+PWVuZHApIHsKLQkJCQlkZXYtPmlzb2NfY3RsLnRtcF9idWZfbGVuPWVuZHAtcHRyOwotCQkJCW1lbWNweSAoJmRldi0+aXNvY19jdGwudG1wX2J1ZixwdHIsCi0JCQkJCWRldi0+aXNvY19jdGwudG1wX2J1Zl9sZW4pOwotCQkJCWRldi0+aXNvY19jdGwuY21kPTA7Ci0JCQkJcmV0dXJuIHJjOworCQkJLyogc3BsaXQgdGhlIGhlYWRlciBmaWVsZHMgKi8KKwkJCWMgPSAoaGVhZGVyID4+IDI0KSAmIDB4ZmY7CisJCQlzaXplID0gKChoZWFkZXIgJiAweDdlKSA8PCAxKTsKKwkJCWlmIChzaXplID4gMCkKKwkJCQlzaXplIC09IDQ7CisJCQlibG9jayA9IChoZWFkZXIgPj4gNykgJiAweGY7CisJCQlmaWVsZCA9IChoZWFkZXIgPj4gMTEpICYgMHgxOworCQkJbGluZSAgPSAoaGVhZGVyID4+IDEyKSAmIDB4MWZmOworCQkJY21kICAgPSAoaGVhZGVyID4+IDIxKSAmIDB4NzsKKwkJCS8qIFZhbGlkYXRlcyBoYWVkZXIgZmllbGRzICovCisJCQlpZiAoc2l6ZSA+IFRNNjAwMF9VUkJfTVNHX0xFTikKKwkJCQlzaXplID0gVE02MDAwX1VSQl9NU0dfTEVOOworCQkJcGt0c2l6ZSA9IFRNNjAwMF9VUkJfTVNHX0xFTjsKKwkJCS8qIGNhbGN1bGF0ZSBwb3NpdGlvbiBpbiBidWZmZXIKKwkJCSAqIGFuZCBjaGFuZ2UgdGhlIGJ1ZmZlcgorCQkJICovCisJCQlzd2l0Y2ggKGNtZCkgeworCQkJY2FzZSBUTTYwMDBfVVJCX01TR19WSURFTzoKKwkJCQlpZiAoKGRldi0+aXNvY19jdGwudmZpZWxkICE9IGZpZWxkKSAmJgorCQkJCQkoZmllbGQgPT0gMSkpIHsKKwkJCQkJLyogQW5ub3VuY2VzIHRoYXQgYSBuZXcgYnVmZmVyCisJCQkJCSAqIHdlcmUgZmlsbGVkCisJCQkJCSAqLworCQkJCQlidWZmZXJfZmlsbGVkIChkZXYsIGRtYV9xLCB2YnVmKTsKKwkJCQkJZHByaW50ayAoZGV2LCBWNEwyX0RFQlVHX0lTT0MsCisJCQkJCQkJIm5ldyBidWZmZXIgZmlsbGVkXG4iKTsKKwkJCQkJZ2V0X25leHRfYnVmIChkbWFfcSwgJnZidWYpOworCQkJCQlpZiAoIXZidWYpCisJCQkJCQlyZXR1cm4gcmM7CisJCQkJCXZvdXRwID0gdmlkZW9idWZfdG9fdm1hbGxvYyAoJnZidWYtPnZiKTsKKwkJCQkJaWYgKCF2b3V0cCkKKwkJCQkJCXJldHVybiByYzsKKwkJCQkJbWVtc2V0KHZvdXRwLCAwLCB2YnVmLT52Yi5zaXplKTsKKwkJCQl9CisJCQkJbGluZXdpZHRoID0gdmJ1Zi0+dmIud2lkdGggPDwgMTsKKwkJCQlwb3MgPSAoKGxpbmUgPDwgMSkgLSBmaWVsZCAtIDEpICogbGluZXdpZHRoICsKKwkJCQkJYmxvY2sgKiBUTTYwMDBfVVJCX01TR19MRU47CisJCQkJLyogRG9uJ3QgYWxsb3cgdG8gd3JpdGUgb3V0IG9mIHRoZSBidWZmZXIgKi8KKwkJCQlpZiAocG9zICsgc2l6ZSA+IHZidWYtPnZiLnNpemUpCisJCQkJCWNtZCA9IFRNNjAwMF9VUkJfTVNHX0VSUjsKKwkJCQlkZXYtPmlzb2NfY3RsLnZmaWVsZCA9IGZpZWxkOworCQkJCWJyZWFrOworCQkJY2FzZSBUTTYwMDBfVVJCX01TR19WQkk6CisJCQkJYnJlYWs7CisJCQljYXNlIFRNNjAwMF9VUkJfTVNHX0FVRElPOgorCQkJY2FzZSBUTTYwMDBfVVJCX01TR19QVFM6CisJCQkJc2l6ZSA9IHBrdHNpemU7CQkvKiBTaXplIGlzIGFsd2F5cyAxODAgYnl0ZXMgKi8KKwkJCQlicmVhazsKIAkJCX0KLQotCQkJLyogR2V0IG1lc3NhZ2UgaGVhZGVyICovCi0JCQloZWFkZXI9Kih1bnNpZ25lZCBsb25nICopcHRyOwotCQkJcHRyKz00OworCQl9IGVsc2UgeworCQkJLyogQ29udGludWUgdGhlIGxhc3QgY29weSAqLworCQkJY21kID0gZGV2LT5pc29jX2N0bC5jbWQ7CisJCQlzaXplID0gZGV2LT5pc29jX2N0bC5zaXplOworCQkJcG9zID0gZGV2LT5pc29jX2N0bC5wb3M7CisJCQlwa3RzaXplID0gZGV2LT5pc29jX2N0bC5wa3RzaXplOwogCQl9Ci1IRUFERVI6Ci0JCS8qIENvcHkgb3IgY29udGludWUgbGFzdCBjb3B5ICovCi0JCXJjPWNvcHlfcGFja2V0KHVyYixoZWFkZXIsJnB0cixlbmRwLG91dHAsJmJ1Zik7Ci0JCWlmIChyYzwwKSB7Ci0JCQlidWY9TlVMTDsKLQkJCXByaW50ayhLRVJOX0VSUiAidG02MDAwOiBidWZmZXIgdW5kZXJydW4gYXQgJWxkXG4iLAotCQkJCQlqaWZmaWVzKTsKLQkJCXJldHVybiByYzsKKwkJY3B5c2l6ZSA9IChlbmRwIC0gcHRyID4gc2l6ZSkgPyBzaXplIDogZW5kcCAtIHB0cjsKKwkJaWYgKGNweXNpemUpIHsKKwkJCS8qIGNvcHkgZGF0YSBpbiBkaWZmZXJlbnQgYnVmZmVycyAqLworCQkJc3dpdGNoIChjbWQpIHsKKwkJCWNhc2UgVE02MDAwX1VSQl9NU0dfVklERU86CisJCQkJLyogRmlsbHMgdmlkZW8gYnVmZmVyICovCisJCQkJaWYgKHZidWYpCisJCQkJCW1lbWNweSAoJnZvdXRwW3Bvc10sIHB0ciwgY3B5c2l6ZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIFRNNjAwMF9VUkJfTVNHX0FVRElPOgorCQkJCXRtNjAwMF9jYWxsX2ZpbGxidWYoZGV2LCBUTTYwMDBfQVVESU8sIHB0ciwgY3B5c2l6ZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIFRNNjAwMF9VUkJfTVNHX1ZCSToKKwkJCQkvKiBOZWVkIHNvbWUgY29kZSB0byBjb3B5IHZiaSBidWZmZXIgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgVE02MDAwX1VSQl9NU0dfUFRTOgorCQkJCS8qIE5lZWQgc29tZSBjb2RlIHRvIGNvcHkgcHRzICovCisJCQkJYnJlYWs7CisJCQl9CiAJCX0KLQkJaWYgKCFidWYpCi0JCQlyZXR1cm4gMDsKKwkJaWYgKHB0ciArIHBrdHNpemUgPiBlbmRwKSB7CisJCQkvKiBFbmQgb2YgVVJCIHBhY2tldCwgYnV0IGNtZCBwcm9jZXNzaW5nIGlzIG5vdAorCQkJICogY29tcGxldGUuIFByZXNlcnZlIHRoZSBzdGF0ZSBmb3IgYSBuZXh0IHBhY2tldAorCQkJICovCisJCQlkZXYtPmlzb2NfY3RsLnBvcyA9IHBvcyArIGNweXNpemU7CisJCQlkZXYtPmlzb2NfY3RsLnNpemUgPSBzaXplIC0gY3B5c2l6ZTsKKwkJCWRldi0+aXNvY19jdGwuY21kID0gY21kOworCQkJZGV2LT5pc29jX2N0bC5wa3RzaXplID0gcGt0c2l6ZSAtIChlbmRwIC0gcHRyKTsKKwkJCXB0ciArPSBlbmRwIC0gcHRyOworCQl9IGVsc2UgeworCQkJZGV2LT5pc29jX2N0bC5jbWQgPSAwOworCQkJcHRyICs9IHBrdHNpemU7CisJCX0KIAl9Ci0KIAlyZXR1cm4gMDsKIH0KKwogLyoKICAqIElkZW50aWZ5IHRoZSB0bTU2MDAvNjAwMCBidWZmZXIgaGVhZGVyIHR5cGUgYW5kIHByb3Blcmx5IGhhbmRsZXMKICAqLwpAQCAtNTEwLDcgKzQyNSw2IEBACiB7CiAJc3RydWN0IHRtNjAwMF9kbWFxdWV1ZSAgKmRtYV9xID0gdXJiLT5jb250ZXh0OwogCXN0cnVjdCB0bTYwMDBfY29yZSAqZGV2PSBjb250YWluZXJfb2YoZG1hX3Esc3RydWN0IHRtNjAwMF9jb3JlLHZpZHEpOwotCXN0cnVjdCB0bTYwMDBfYnVmZmVyICpidWY7CiAJaW50IGksIGxlbj0wLCByYz0xLCBzdGF0dXM7CiAJY2hhciAqcDsKIApAQCAtNTg1LDcgKzQ5OSw2IEBACiAJc3RydWN0IHVyYiAqdXJiOwogCWludCBpOwogCi0JZGV2LT5pc29jX2N0bC5uZmllbGRzID0gLTE7CiAJZGV2LT5pc29jX2N0bC5idWYgPSBOVUxMOwogCWZvciAoaSA9IDA7IGkgPCBkZXYtPmlzb2NfY3RsLm51bV9idWZzOyBpKyspIHsKIAkJdXJiPWRldi0+aXNvY19jdGwudXJiW2ldOwpAQCAtNjEwLDggKzUyMyw2IEBACiAJZGV2LT5pc29jX2N0bC51cmI9TlVMTDsKIAlkZXYtPmlzb2NfY3RsLnRyYW5zZmVyX2J1ZmZlcj1OVUxMOwogCWRldi0+aXNvY19jdGwubnVtX2J1ZnMgPSAwOwotCi0JZGV2LT5pc29jX2N0bC5udW1fYnVmcz0wOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAuaCBiL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvdG02MDAwLmgKaW5kZXggN2JiYWYyNi4uMWVjMWJmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL3RtNjAwMC5oCkBAIC0yMCw4ICsyMCw4IEBACiAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0vLyBVc2UgdGhlIHRtNjAwMC1oYWNrLCBpbnN0ZWFkIG9mIHRoZSBwcm9wZXIgaW5pdGlhbGl6YXRpb24gY29kZQotLy8jZGVmaW5lIEhBQ0sgMQorLyogVXNlIHRoZSB0bTYwMDAtaGFjaywgaW5zdGVhZCBvZiB0aGUgcHJvcGVyIGluaXRpYWxpemF0aW9uIGNvZGUgaSovCisvKiAjZGVmaW5lIEhBQ0sgMSAqLwogCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KQEAgLTk4LDcgKzk4LDcgQEAKIH07CiAKIGVudW0gdG02MDAwX21vZGUgewotCVRNNjAwMF9NT0RFX1VOS05PV049MCwKKwlUTTYwMDBfTU9ERV9VTktOT1dOID0gMCwKIAlUTTYwMDBfTU9ERV9BTkFMT0csCiAJVE02MDAwX01PREVfRElHSVRBTCwKIH07CkBAIC0xMjgsMTAgKzEyOCwyMSBAQAogCXN0cnVjdCBkdmJfZnJvbnRlbmQJKmZyb250ZW5kOwogCXN0cnVjdCBkbXhkZXYJCWRteGRldjsKIAl1bnNpZ25lZCBpbnQJCXN0cmVhbXM7Ci0Jc3RydWN0IHVyYiAJCSpidWxrX3VyYjsKKwlzdHJ1Y3QgdXJiCQkqYnVsa191cmI7CiAJc3RydWN0IG11dGV4CQltdXRleDsKIH07CiAKK3N0cnVjdCBzbmRfdG02MDAwX2NhcmQgeworCXN0cnVjdCBzbmRfY2FyZAkJCSpjYXJkOworCXNwaW5sb2NrX3QJCQlyZWdfbG9jazsKKwlzdHJ1Y3QgdG02MDAwX2NvcmUJCSpjb3JlOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbQkqc3Vic3RyZWFtOworCisJLyogdGVtcG9yYXJ5IGRhdGEgZm9yIGJ1ZmZlciBmaWxsIHByb2Nlc3NpbmcgKi8KKwl1bnNpZ25lZAkJCWJ1Zl9wb3M7CisJdW5zaWduZWQJCQlwZXJpb2RfcG9zOworfTsKKwogc3RydWN0IHRtNjAwMF9lbmRwb2ludCB7CiAJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50CSplbmRwOwogCV9fdTgJCQkJYkludGVyZmFjZU51bWJlcjsKQEAgLTE0Nyw3ICsxNTgsNyBAQAogCWVudW0gdG02MDAwX2RldnR5cGUJCWRldl90eXBlOwkvKiB0eXBlIG9mIGRldmljZSAqLwogCiAJdjRsMl9zdGRfaWQgICAgICAgICAgICAgICAgICAgICBub3JtOyAgICAgICAgICAgLyogQ3VycmVudCBub3JtICovCi0JaW50CQkJCXdpZHRoLGhlaWdodDsJLyogU2VsZWN0ZWQgcmVzb2x1dGlvbiAqLworCWludAkJCQl3aWR0aCwgaGVpZ2h0OwkvKiBTZWxlY3RlZCByZXNvbHV0aW9uICovCiAKIAllbnVtIHRtNjAwMF9jb3JlX3N0YXRlCQlzdGF0ZTsKIApAQCAtMTYwLDYgKzE3MSw4IEBACiAKIAlzdHJ1Y3QgdG02MDAwX2dwaW8JCWdwaW87CiAKKwljaGFyCQkJCSppcl9jb2RlczsKKwogCS8qIERlbW9kdWxhdG9yIGNvbmZpZ3VyYXRpb24gKi8KIAlpbnQJCQkJZGVtb2RfYWRkcjsJLyogZGVtb2R1bGF0b3IgYWRkcmVzcyAqLwogCkBAIC0xOTAsNiArMjAzLDExIEBACiAJLyogRFZCLVQgc3VwcG9ydCAqLwogCXN0cnVjdCB0bTYwMDBfZHZiCQkqZHZiOwogCisJLyogYXVkaW8gc3VwcG9ydCAqLworCXN0cnVjdCBzbmRfdG02MDAwX2NhcmQJCSphZGV2OworCisJc3RydWN0IHRtNjAwMF9JUgkJKmlyOworCiAJLyogbG9ja3MgKi8KIAlzdHJ1Y3QgbXV0ZXgJCQlsb2NrOwogCkBAIC0xOTcsNiArMjE1LDcgQEAKIAlzdHJ1Y3QgdXNiX2RldmljZQkJKnVkZXY7CQkvKiB0aGUgdXNiIGRldmljZSAqLwogCiAJc3RydWN0IHRtNjAwMF9lbmRwb2ludAkJYnVsa19pbiwgYnVsa19vdXQsIGlzb2NfaW4sIGlzb2Nfb3V0OworCXN0cnVjdCB0bTYwMDBfZW5kcG9pbnQJCWludF9pbiwgaW50X291dDsKIAogCS8qIHNjYWxlciE9MCBpZiBzY2FsZXIgaXMgYWN0aXZlKi8KIAlpbnQJCQkJc2NhbGVyOwpAQCAtMjA3LDE0ICsyMjYsMTggQEAKIAlzcGlubG9ja190ICAgICAgICAgICAgICAgICAgIHNsb2NrOwogfTsKIAotI2RlZmluZSBUTTYwMDBfQVVESU8gMHgxMAorZW51bSB0bTYwMDBfb3BzX3R5cGUgeworCVRNNjAwMF9BVURJTyA9IDB4MTAsCisJVE02MDAwX0RWQiA9IDB4MjAsCit9OwogCiBzdHJ1Y3QgdG02MDAwX29wcyB7CiAJc3RydWN0IGxpc3RfaGVhZAluZXh0OwogCWNoYXIJCQkqbmFtZTsKLQlpbnQJCQlpZDsKKwllbnVtIHRtNjAwMF9vcHNfdHlwZQl0eXBlOwogCWludCAoKmluaXQpKHN0cnVjdCB0bTYwMDBfY29yZSAqKTsKIAlpbnQgKCpmaW5pKShzdHJ1Y3QgdG02MDAwX2NvcmUgKik7CisJaW50ICgqZmlsbGJ1Zikoc3RydWN0IHRtNjAwMF9jb3JlICosIGNoYXIgKmJ1ZiwgaW50IHNpemUpOwogfTsKIAogc3RydWN0IHRtNjAwMF9maCB7CkBAIC0yMjIsNyArMjQ1LDcgQEAKIAogCS8qIHZpZGVvIGNhcHR1cmUgKi8KIAlzdHJ1Y3QgdG02MDAwX2ZtdCAgICAgICAgICAgICpmbXQ7Ci0JdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICB3aWR0aCxoZWlnaHQ7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0OwogCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAgICAgICAgdmJfdmlkcTsKIAogCWVudW0gdjRsMl9idWZfdHlwZSAgICAgICAgICAgdHlwZTsKQEAgLTIzNCwyOCArMjU3LDI0IEBACiAKIC8qIEluIHRtNjAwMC1jYXJkcy5jICovCiAKLWludCB0bTYwMDBfdHVuZXJfY2FsbGJhY2sgKHZvaWQgKnB0ciwgaW50IGNvbXBvbmVudCwgaW50IGNvbW1hbmQsIGludCBhcmcpOwotaW50IHRtNjAwMF94YzUwMDBfY2FsbGJhY2sgKHZvaWQgKnB0ciwgaW50IGNvbXBvbmVudCwgaW50IGNvbW1hbmQsIGludCBhcmcpOworaW50IHRtNjAwMF90dW5lcl9jYWxsYmFjayh2b2lkICpwdHIsIGludCBjb21wb25lbnQsIGludCBjb21tYW5kLCBpbnQgYXJnKTsKK2ludCB0bTYwMDBfeGM1MDAwX2NhbGxiYWNrKHZvaWQgKnB0ciwgaW50IGNvbXBvbmVudCwgaW50IGNvbW1hbmQsIGludCBhcmcpOwogaW50IHRtNjAwMF9jYXJkc19zZXR1cChzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldik7CiAKIC8qIEluIHRtNjAwMC1jb3JlLmMgKi8KIAotaW50IHRtNjAwMF9yZWFkX3dyaXRlX3VzYiAoc3RydWN0IHRtNjAwMF9jb3JlICpkZXYsIHU4IHJlcXR5cGUsIHU4IHJlcSwKK2ludCB0bTYwMDBfcmVhZF93cml0ZV91c2Ioc3RydWN0IHRtNjAwMF9jb3JlICpkZXYsIHU4IHJlcXR5cGUsIHU4IHJlcSwKIAkJCSAgIHUxNiB2YWx1ZSwgdTE2IGluZGV4LCB1OCAqYnVmLCB1MTYgbGVuKTsKLWludCB0bTYwMDBfZ2V0X3JlZyAoc3RydWN0IHRtNjAwMF9jb3JlICpkZXYsIHU4IHJlcSwgdTE2IHZhbHVlLCB1MTYgaW5kZXgpOworaW50IHRtNjAwMF9nZXRfcmVnKHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2LCB1OCByZXEsIHUxNiB2YWx1ZSwgdTE2IGluZGV4KTsKIGludCB0bTYwMDBfZ2V0X3JlZzE2KHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2LCB1OCByZXEsIHUxNiB2YWx1ZSwgdTE2IGluZGV4KTsKIGludCB0bTYwMDBfZ2V0X3JlZzMyKHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2LCB1OCByZXEsIHUxNiB2YWx1ZSwgdTE2IGluZGV4KTsKLWludCB0bTYwMDBfc2V0X3JlZyAoc3RydWN0IHRtNjAwMF9jb3JlICpkZXYsIHU4IHJlcSwgdTE2IHZhbHVlLCB1MTYgaW5kZXgpOworaW50IHRtNjAwMF9zZXRfcmVnKHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2LCB1OCByZXEsIHUxNiB2YWx1ZSwgdTE2IGluZGV4KTsKIGludCB0bTYwMDBfaTJjX3Jlc2V0KHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2LCB1MTYgdHNsZWVwKTsKK2ludCB0bTYwMDBfaW5pdChzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldik7CiAKLWludCB0bTYwMDBfaW5pdCAoc3RydWN0IHRtNjAwMF9jb3JlICpkZXYpOwotCi1pbnQgdG02MDAwX2luaXRfYW5hbG9nX21vZGUgKHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2KTsKLWludCB0bTYwMDBfaW5pdF9kaWdpdGFsX21vZGUgKHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2KTsKLWludCB0bTYwMDBfc2V0X2F1ZGlvX2JpdHJhdGUgKHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2LCBpbnQgYml0cmF0ZSk7Ci0KLWludCB0bTYwMDBfZHZiX3JlZ2lzdGVyKHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2KTsKLXZvaWQgdG02MDAwX2R2Yl91bnJlZ2lzdGVyKHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2KTsKK2ludCB0bTYwMDBfaW5pdF9hbmFsb2dfbW9kZShzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldik7CitpbnQgdG02MDAwX2luaXRfZGlnaXRhbF9tb2RlKHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2KTsKK2ludCB0bTYwMDBfc2V0X2F1ZGlvX2JpdHJhdGUoc3RydWN0IHRtNjAwMF9jb3JlICpkZXYsIGludCBiaXRyYXRlKTsKIAogaW50IHRtNjAwMF92NGwyX3JlZ2lzdGVyKHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2KTsKIGludCB0bTYwMDBfdjRsMl91bnJlZ2lzdGVyKHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2KTsKQEAgLTI2OCwxMCArMjg3LDEzIEBACiB2b2lkIHRtNjAwMF91bnJlZ2lzdGVyX2V4dGVuc2lvbihzdHJ1Y3QgdG02MDAwX29wcyAqb3BzKTsKIHZvaWQgdG02MDAwX2luaXRfZXh0ZW5zaW9uKHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2KTsKIHZvaWQgdG02MDAwX2Nsb3NlX2V4dGVuc2lvbihzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldik7CitpbnQgdG02MDAwX2NhbGxfZmlsbGJ1ZihzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldiwgZW51bSB0bTYwMDBfb3BzX3R5cGUgdHlwZSwKKwkJCWNoYXIgKmJ1ZiwgaW50IHNpemUpOworCiAKIC8qIEluIHRtNjAwMC1zdGRzLmMgKi8KIHZvaWQgdG02MDAwX2dldF9zdGRfcmVzKHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2KTsKLWludCB0bTYwMDBfc2V0X3N0YW5kYXJkIChzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldiwgdjRsMl9zdGRfaWQgKm5vcm0pOworaW50IHRtNjAwMF9zZXRfc3RhbmRhcmQoc3RydWN0IHRtNjAwMF9jb3JlICpkZXYsIHY0bDJfc3RkX2lkICpub3JtKTsKIAogLyogSW4gdG02MDAwLWkyYy5jICovCiBpbnQgdG02MDAwX2kyY19yZWdpc3RlcihzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldik7CkBAIC0yODUsMTQgKzMwNywxNCBAQAogCQkJICAgZW51bSB2NGwyX2J1Zl90eXBlIGkpOwogaW50IHRtNjAwMF92aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgIGVudW0gdjRsMl9idWZfdHlwZSBpKTsKLWludCB0bTYwMDBfdmlkaW9jX3JlcWJ1ZnMgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJICAgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJiKTsKLWludCB0bTYwMDBfdmlkaW9jX3F1ZXJ5YnVmIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCSAgICBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIpOwotaW50IHRtNjAwMF92aWRpb2NfcWJ1ZiAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYik7Ci1pbnQgdG02MDAwX3ZpZGlvY19kcWJ1ZiAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYik7CitpbnQgdG02MDAwX3ZpZGlvY19yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcmIpOworaW50IHRtNjAwMF92aWRpb2NfcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIpOworaW50IHRtNjAwMF92aWRpb2NfcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpiKTsKK2ludCB0bTYwMDBfdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIpOwogc3NpemVfdCB0bTYwMDBfdjRsMl9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqIGJ1Ziwgc2l6ZV90IGNvdW50LAotCQkJIGxvZmZfdCAqIGZfcG9zKTsKKwkJCSBsb2ZmX3QgKmZfcG9zKTsKIHVuc2lnbmVkIGludCB0bTYwMDBfdjRsMl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJICAgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KTsKIGludCB0bTYwMDBfcXVldWVfaW5pdChzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldik7CkBAIC0zMDAsNiArMzIyLDEwIEBACiAvKiBJbiB0bTYwMDAtYWxzYS5jICovCiAvKmludCB0bTYwMDBfYXVkaW9faW5pdChzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldiwgaW50IGlkeCk7Ki8KIAorLyogSW4gdG02MDAwLWlucHV0LmMgKi8KK2ludCB0bTYwMDBfaXJfaW5pdChzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldik7CitpbnQgdG02MDAwX2lyX2Zpbmkoc3RydWN0IHRtNjAwMF9jb3JlICpkZXYpOwordm9pZCB0bTYwMDBfaXJfd2FpdChzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldiwgdTggc3RhdGUpOwogCiAvKiBEZWJ1ZyBzdHVmZiAqLwogCkBAIC0zMDcsNyArMzMzLDcgQEAKIAogI2RlZmluZSBkcHJpbnRrKGRldiwgbGV2ZWwsIGZtdCwgYXJnLi4uKSBkbyB7XAogCWlmICh0bTYwMDBfZGVidWcgJiBsZXZlbCkgXAotCQlwcmludGsoS0VSTl9JTkZPICIoJWx1KSAlcyAlcyA6ImZtdCwgamlmZmllcywgCQlcCisJCXByaW50ayhLRVJOX0lORk8gIiglbHUpICVzICVzIDoiZm10LCBqaWZmaWVzLCBcCiAJCQkgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18gLCAjI2FyZyk7IH0gd2hpbGUgKDApCiAKICNkZWZpbmUgVjRMMl9ERUJVR19SRUcJCTB4MDAwNApAQCAtMzIwLDUgKzM0NiwzIEBACiAjZGVmaW5lIHRtNjAwMF9lcnIoZm10LCBhcmcuLi4pIGRvIHtcCiAJcHJpbnRrKEtFUk5fRVJSICJ0bTYwMDAgJXMgOiJmbXQsIFwKIAkJX19GVU5DVElPTl9fICwgIyNhcmcpOyB9IHdoaWxlICgwKQotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViLmggYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yi5oCmluZGV4IDAyMmQwNjQuLjMwZGJmYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWIuaApAQCAtMjUsNiArMjUsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KIAorI2RlZmluZSBTVFVCX0JVU0lEX09USEVSIDAKKyNkZWZpbmUgU1RVQl9CVVNJRF9SRU1PViAxCisjZGVmaW5lIFNUVUJfQlVTSURfQURERUQgMgorI2RlZmluZSBTVFVCX0JVU0lEX0FMTE9DIDMKKwogc3RydWN0IHN0dWJfZGV2aWNlIHsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKQEAgLTcyLDYgKzc3LDE0IEBACiAJX191MzIgc3RhdHVzOwogfTsKIAorI2RlZmluZSBCVVNJRF9TSVpFIDIwCitzdHJ1Y3QgYnVzX2lkX3ByaXYgeworCWNoYXIgbmFtZVtCVVNJRF9TSVpFXTsKKwljaGFyIHN0YXR1czsKKwlpbnQgaW50ZXJmX2NvdW50OworCXN0cnVjdCBzdHViX2RldmljZSAqc2RldjsKKwljaGFyIHNodXRkb3duX2J1c2lkOworfTsKIAogZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpzdHViX3ByaXZfY2FjaGU7CiAKQEAgLTkxLDUgKzEwNCw3IEBACiB2b2lkIHN0dWJfZW5xdWV1ZV9yZXRfdW5saW5rKHN0cnVjdCBzdHViX2RldmljZSAqLCBfX3UzMiwgX191MzIpOwogCiAvKiBzdHViX21haW4uYyAqLwotaW50IG1hdGNoX2J1c2lkKGNvbnN0IGNoYXIgKmJ1c2lkKTsKK3N0cnVjdCBidXNfaWRfcHJpdiAqZ2V0X2J1c2lkX3ByaXYoY29uc3QgY2hhciAqYnVzaWQpOworaW50IGRlbF9tYXRjaF9idXNpZChjaGFyICpidXNpZCk7CisKIHZvaWQgc3R1Yl9kZXZpY2VfY2xlYW51cF91cmJzKHN0cnVjdCBzdHViX2RldmljZSAqc2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX2Rldi5jCmluZGV4IDNmOTU2MDUuLmI2Yjc1M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX2Rldi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX2Rldi5jCkBAIC0zOTMsMTEgKzM5MywxNCBAQAogCXN0cnVjdCBzdHViX2RldmljZSAqc2RldiA9IE5VTEw7CiAJY29uc3QgY2hhciAqdWRldl9idXNpZCA9IGRldl9uYW1lKGludGVyZmFjZS0+ZGV2LnBhcmVudCk7CiAJaW50IGVyciA9IDA7CisJc3RydWN0IGJ1c19pZF9wcml2ICpidXNpZF9wcml2OwogCiAJZGV2X2RiZygmaW50ZXJmYWNlLT5kZXYsICJFbnRlclxuIik7CiAKIAkvKiBjaGVjayB3ZSBzaG91bGQgY2xhaW0gb3Igbm90IGJ5IGJ1c2lkX3RhYmxlICovCi0JaWYgKG1hdGNoX2J1c2lkKHVkZXZfYnVzaWQpKSB7CisJYnVzaWRfcHJpdiA9IGdldF9idXNpZF9wcml2KHVkZXZfYnVzaWQpOworCWlmICghYnVzaWRfcHJpdiAgfHwgKGJ1c2lkX3ByaXYtPnN0YXR1cyA9PSBTVFVCX0JVU0lEX1JFTU9WKSB8fAorCQkJICAgICAoYnVzaWRfcHJpdi0+c3RhdHVzID09IFNUVUJfQlVTSURfT1RIRVIpKSB7CiAJCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwKIAkJCSAidGhpcyBkZXZpY2UgJXMgaXMgbm90IGluIG1hdGNoX2J1c2lkIHRhYmxlLiBza2lwIVxuIiwKIAkJCSB1ZGV2X2J1c2lkKTsKQEAgLTQyMiwyOCArNDI1LDgwIEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAorCisJaWYgKGJ1c2lkX3ByaXYtPnN0YXR1cyA9PSBTVFVCX0JVU0lEX0FMTE9DKSB7CisJCWJ1c2lkX3ByaXYtPmludGVyZl9jb3VudCsrOworCQlzZGV2ID0gYnVzaWRfcHJpdi0+c2RldjsKKwkJaWYgKCFzZGV2KQorCQkJcmV0dXJuIC1FTk9ERVY7CisKKwkJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LAorCQkgIlVTQi9JUCBTdHViOiByZWdpc3RlciBhIG5ldyBpbnRlcmZhY2UgIgorCQkgIihidXMgJXUgZGV2ICV1IGlmbiAldSlcbiIsIHVkZXYtPmJ1cy0+YnVzbnVtLCB1ZGV2LT5kZXZudW0sCisJCSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOworCisJCS8qIHNldCBwcml2YXRlIGRhdGEgdG8gdXNiX2ludGVyZmFjZSAqLworCQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgc2Rldik7CisKKwkJZXJyID0gc3R1Yl9hZGRfZmlsZXMoJmludGVyZmFjZS0+ZGV2KTsKKwkJaWYgKGVycikgeworCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJjcmVhdGUgc3lzZnMgZmlsZXMgZm9yICVzXG4iLAorCQkJCXVkZXZfYnVzaWQpOworCQkJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCQkJYnVzaWRfcHJpdi0+aW50ZXJmX2NvdW50LS07CisKKwkJCXJldHVybiBlcnI7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CisKIAkvKiBvay4gdGhpcyBpcyBteSBkZXZpY2UuICovCiAJc2RldiA9IHN0dWJfZGV2aWNlX2FsbG9jKGludGVyZmFjZSk7CiAJaWYgKCFzZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQi9JUCBTdHViOiByZWdpc3RlciBhIG5ldyBpbnRlcmZhY2UgIgorCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQi9JUCBTdHViOiByZWdpc3RlciBhIG5ldyBkZXZpY2UgIgogCQkgIihidXMgJXUgZGV2ICV1IGlmbiAldSlcbiIsIHVkZXYtPmJ1cy0+YnVzbnVtLCB1ZGV2LT5kZXZudW0sCiAJCSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOwogCisJYnVzaWRfcHJpdi0+aW50ZXJmX2NvdW50ID0gMDsKKwlidXNpZF9wcml2LT5zaHV0ZG93bl9idXNpZCA9IDA7CisKIAkvKiBzZXQgcHJpdmF0ZSBkYXRhIHRvIHVzYl9pbnRlcmZhY2UgKi8KIAl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgc2Rldik7CisJYnVzaWRfcHJpdi0+aW50ZXJmX2NvdW50Kys7CisKKwlidXNpZF9wcml2LT5zZGV2ID0gc2RldjsKIAogCWVyciA9IHN0dWJfYWRkX2ZpbGVzKCZpbnRlcmZhY2UtPmRldik7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgImNyZWF0ZSBzeXNmcyBmaWxlcyBmb3IgJXNcbiIsCiAJCQl1ZGV2X2J1c2lkKTsKKwkJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCQlidXNpZF9wcml2LT5pbnRlcmZfY291bnQgPSAwOworCisJCWJ1c2lkX3ByaXYtPnNkZXYgPSBOVUxMOworCQlzdHViX2RldmljZV9mcmVlKHNkZXYpOwogCQlyZXR1cm4gZXJyOwogCX0KKwlidXNpZF9wcml2LT5zdGF0dXMgPSBTVFVCX0JVU0lEX0FMTE9DOwogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHNodXRkb3duX2J1c2lkKHN0cnVjdCBidXNfaWRfcHJpdiAqYnVzaWRfcHJpdikKK3sKKwlpZiAoYnVzaWRfcHJpdi0+c2RldiAmJiAhYnVzaWRfcHJpdi0+c2h1dGRvd25fYnVzaWQpIHsKKwkJYnVzaWRfcHJpdi0+c2h1dGRvd25fYnVzaWQgPSAxOworCQl1c2JpcF9ldmVudF9hZGQoJmJ1c2lkX3ByaXYtPnNkZXYtPnVkLCBTREVWX0VWRU5UX1JFTU9WRUQpOworCisJCS8qIDIuIHdhaXQgZm9yIHRoZSBzdG9wIG9mIHRoZSBldmVudCBoYW5kbGVyICovCisJCXVzYmlwX3N0b3BfZWgoJmJ1c2lkX3ByaXYtPnNkZXYtPnVkKTsKKwl9CisKK30KKwogCiAvKgogICogY2FsbGVkIGluIHVzYl9kaXNjb25uZWN0KCkgb3IgdXNiX2RlcmVnaXN0ZXIoKQpAQCAtNDUxLDEwICs1MDYsMjEgQEAKICAqLwogc3RhdGljIHZvaWQgc3R1Yl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCiB7Ci0Jc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXN0cnVjdCBzdHViX2RldmljZSAqc2RldjsKKwljb25zdCBjaGFyICp1ZGV2X2J1c2lkID0gZGV2X25hbWUoaW50ZXJmYWNlLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgYnVzX2lkX3ByaXYgKmJ1c2lkX3ByaXY7CisKKwlidXNpZF9wcml2ID0gZ2V0X2J1c2lkX3ByaXYodWRldl9idXNpZCk7CiAKIAl1c2JpcF91ZGJnKCJFbnRlclxuIik7CiAKKwlpZiAoIWJ1c2lkX3ByaXYpIHsKKwkJQlVHKCk7CisJCXJldHVybjsKKwl9CisKKwlzZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCiAJLyogZ2V0IHN0dWJfZGV2aWNlICovCiAJaWYgKCFzZGV2KSB7CiAJCWVycigiIGNvdWxkIG5vdCBnZXQgZGV2aWNlIGZyb20gaW50ZWZhY2UgZGF0YSIpOwpAQCAtNDY0LDIyICs1MzAsMzkgQEAKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKIAotCiAJLyoKIAkgKiBOT1RFOgogCSAqIHJ4L3R4IHRocmVhZHMgYXJlIGludm9rZWQgZm9yIGVhY2ggdXNiX2RldmljZS4KIAkgKi8KIAlzdHViX3JlbW92ZV9maWxlcygmaW50ZXJmYWNlLT5kZXYpOwogCi0JLyogMS4gc2h1dGRvd24gdGhlIGN1cnJlbnQgY29ubmVjdGlvbiAqLwotCXVzYmlwX2V2ZW50X2FkZCgmc2Rldi0+dWQsIFNERVZfRVZFTlRfUkVNT1ZFRCk7CisJLypJZiB1c2IgcmVzZXQgY2FsbGVkIGZyb20gZXZlbnQgaGFuZGxlciovCisJaWYgKGJ1c2lkX3ByaXYtPnNkZXYtPnVkLmVoLnRocmVhZCA9PSBjdXJyZW50KSB7CisJCWJ1c2lkX3ByaXYtPmludGVyZl9jb3VudC0tOworCQlyZXR1cm47CisJfQogCi0JLyogMi4gd2FpdCBmb3IgdGhlIHN0b3Agb2YgdGhlIGV2ZW50IGhhbmRsZXIgKi8KLQl1c2JpcF9zdG9wX2VoKCZzZGV2LT51ZCk7CisJaWYgKGJ1c2lkX3ByaXYtPmludGVyZl9jb3VudCA+IDEpIHsKKwkJYnVzaWRfcHJpdi0+aW50ZXJmX2NvdW50LS07CisJCXNodXRkb3duX2J1c2lkKGJ1c2lkX3ByaXYpOworCQlyZXR1cm47CisJfQorCisJYnVzaWRfcHJpdi0+aW50ZXJmX2NvdW50ID0gMDsKKworCisJLyogMS4gc2h1dGRvd24gdGhlIGN1cnJlbnQgY29ubmVjdGlvbiAqLworCXNodXRkb3duX2J1c2lkKGJ1c2lkX3ByaXYpOwogCiAJLyogMy4gZnJlZSBzZGV2ICovCisJYnVzaWRfcHJpdi0+c2RldiA9IE5VTEw7CiAJc3R1Yl9kZXZpY2VfZnJlZShzZGV2KTsKIAotCisJaWYgKGJ1c2lkX3ByaXYtPnN0YXR1cyA9PSBTVFVCX0JVU0lEX0FMTE9DKSB7CisJCWJ1c2lkX3ByaXYtPnN0YXR1cyA9IFNUVUJfQlVTSURfQURERUQ7CisJfSBlbHNlIHsKKwkJYnVzaWRfcHJpdi0+c3RhdHVzID0gU1RVQl9CVVNJRF9PVEhFUjsKKwkJZGVsX21hdGNoX2J1c2lkKChjaGFyICopdWRldl9idXNpZCk7CisJfQogCXVzYmlwX3VkYmcoImJ5ZVxuIik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9tYWluLmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9tYWluLmMKaW5kZXggNjY2NWNlZi4uZjNhNDA5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfbWFpbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX21haW4uYwpAQCAtNDEsOCArNDEsNyBAQAogICogcmVtb3RlIGhvc3QuCiAgKi8KICNkZWZpbmUgTUFYX0JVU0lEIDE2Ci0jZGVmaW5lIEJVU0lEX1NJWkUgMjAKLXN0YXRpYyBjaGFyIGJ1c2lkX3RhYmxlW01BWF9CVVNJRF1bQlVTSURfU0laRV07CitzdGF0aWMgc3RydWN0IGJ1c19pZF9wcml2IGJ1c2lkX3RhYmxlW01BWF9CVVNJRF07CiBzdGF0aWMgc3BpbmxvY2tfdCBidXNpZF90YWJsZV9sb2NrOwogCiAKQEAgLTUzLDggKzUyLDggQEAKIAlzcGluX2xvY2soJmJ1c2lkX3RhYmxlX2xvY2spOwogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9CVVNJRDsgaSsrKQotCQlpZiAoYnVzaWRfdGFibGVbaV1bMF0pCi0JCQlpZiAoIXN0cm5jbXAoYnVzaWRfdGFibGVbaV0sIGJ1c2lkLCBCVVNJRF9TSVpFKSkgeworCQlpZiAoYnVzaWRfdGFibGVbaV0ubmFtZVswXSkKKwkJCWlmICghc3RybmNtcChidXNpZF90YWJsZVtpXS5uYW1lLCBidXNpZCwgQlVTSURfU0laRSkpIHsKIAkJCQkvKiBhbHJlYWR5IHJlZ2lzdGVyZCAqLwogCQkJCXNwaW5fdW5sb2NrKCZidXNpZF90YWJsZV9sb2NrKTsKIAkJCQlyZXR1cm4gMDsKQEAgLTY1LDYgKzY0LDI1IEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0cnVjdCBidXNfaWRfcHJpdiAqZ2V0X2J1c2lkX3ByaXYoY29uc3QgY2hhciAqYnVzaWQpCit7CisJaW50IGk7CisKKwlzcGluX2xvY2soJmJ1c2lkX3RhYmxlX2xvY2spOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9CVVNJRDsgaSsrKQorCQlpZiAoYnVzaWRfdGFibGVbaV0ubmFtZVswXSkKKwkJCWlmICghc3RybmNtcChidXNpZF90YWJsZVtpXS5uYW1lLCBidXNpZCwgQlVTSURfU0laRSkpIHsKKwkJCQkvKiBhbHJlYWR5IHJlZ2lzdGVyZCAqLworCQkJCXNwaW5fdW5sb2NrKCZidXNpZF90YWJsZV9sb2NrKTsKKwkJCQlyZXR1cm4gJihidXNpZF90YWJsZVtpXSk7CisJCQl9CisKKwlzcGluX3VubG9jaygmYnVzaWRfdGFibGVfbG9jayk7CisKKwlyZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIHNzaXplX3Qgc2hvd19tYXRjaF9idXNpZChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LCBjaGFyICpidWYpCiB7CiAJaW50IGk7CkBAIC03Myw4ICs5MSw4IEBACiAJc3Bpbl9sb2NrKCZidXNpZF90YWJsZV9sb2NrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfQlVTSUQ7IGkrKykKLQkJaWYgKGJ1c2lkX3RhYmxlW2ldWzBdKQotCQkJb3V0ICs9IHNwcmludGYob3V0LCAiJXMgIiwgYnVzaWRfdGFibGVbaV0pOworCQlpZiAoYnVzaWRfdGFibGVbaV0ubmFtZVswXSkKKwkJCW91dCArPSBzcHJpbnRmKG91dCwgIiVzICIsIGJ1c2lkX3RhYmxlW2ldLm5hbWUpOwogCiAJc3Bpbl91bmxvY2soJmJ1c2lkX3RhYmxlX2xvY2spOwogCkBAIC05Myw4ICsxMTEsMTEgQEAKIAlzcGluX2xvY2soJmJ1c2lkX3RhYmxlX2xvY2spOwogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9CVVNJRDsgaSsrKQotCQlpZiAoIWJ1c2lkX3RhYmxlW2ldWzBdKSB7Ci0JCQlzdHJuY3B5KGJ1c2lkX3RhYmxlW2ldLCBidXNpZCwgQlVTSURfU0laRSk7CisJCWlmICghYnVzaWRfdGFibGVbaV0ubmFtZVswXSkgeworCQkJc3RybmNweShidXNpZF90YWJsZVtpXS5uYW1lLCBidXNpZCwgQlVTSURfU0laRSk7CisJCQlpZiAoKGJ1c2lkX3RhYmxlW2ldLnN0YXR1cyAhPSBTVFVCX0JVU0lEX0FMTE9DKSAmJgorCQkJICAgIChidXNpZF90YWJsZVtpXS5zdGF0dXMgIT0gU1RVQl9CVVNJRF9SRU1PVikpCisJCQkJYnVzaWRfdGFibGVbaV0uc3RhdHVzID0gU1RVQl9CVVNJRF9BRERFRDsKIAkJCXNwaW5fdW5sb2NrKCZidXNpZF90YWJsZV9sb2NrKTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0xMDQsMTYgKzEyNSwyMSBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCBkZWxfbWF0Y2hfYnVzaWQoY2hhciAqYnVzaWQpCitpbnQgZGVsX21hdGNoX2J1c2lkKGNoYXIgKmJ1c2lkKQogewogCWludCBpOwogCiAJc3Bpbl9sb2NrKCZidXNpZF90YWJsZV9sb2NrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfQlVTSUQ7IGkrKykKLQkJaWYgKCFzdHJuY21wKGJ1c2lkX3RhYmxlW2ldLCBidXNpZCwgQlVTSURfU0laRSkpIHsKKwkJaWYgKCFzdHJuY21wKGJ1c2lkX3RhYmxlW2ldLm5hbWUsIGJ1c2lkLCBCVVNJRF9TSVpFKSkgewogCQkJLyogZm91bmQgKi8KLQkJCW1lbXNldChidXNpZF90YWJsZVtpXSwgMCwgQlVTSURfU0laRSk7CisJCQlpZiAoYnVzaWRfdGFibGVbaV0uc3RhdHVzID09IFNUVUJfQlVTSURfT1RIRVIpCisJCQkJbWVtc2V0KGJ1c2lkX3RhYmxlW2ldLm5hbWUsIDAsIEJVU0lEX1NJWkUpOworCQkJaWYgKChidXNpZF90YWJsZVtpXS5zdGF0dXMgIT0gU1RVQl9CVVNJRF9PVEhFUikgJiYKKwkJCSAgICAoYnVzaWRfdGFibGVbaV0uc3RhdHVzICE9IFNUVUJfQlVTSURfQURERUQpKSB7CisJCQkJYnVzaWRfdGFibGVbaV0uc3RhdHVzID0gU1RVQl9CVVNJRF9SRU1PVjsKKwkJCX0KIAkJCXNwaW5fdW5sb2NrKCZidXNpZF90YWJsZV9sb2NrKTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0xMjIsNiArMTQ4LDIwIEBACiAKIAlyZXR1cm4gLTE7CiB9CitzdGF0aWMgdm9pZCBpbml0X2J1c2lkX3RhYmxlKHZvaWQpCit7CisJaW50IGk7CisKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfQlVTSUQ7IGkrKykgeworCQltZW1zZXQoYnVzaWRfdGFibGVbaV0ubmFtZSwgMCwgQlVTSURfU0laRSk7CisJCWJ1c2lkX3RhYmxlW2ldLnN0YXR1cyA9IFNUVUJfQlVTSURfT1RIRVI7CisJCWJ1c2lkX3RhYmxlW2ldLmludGVyZl9jb3VudCA9IDA7CisJCWJ1c2lkX3RhYmxlW2ldLnNkZXYgPSBOVUxMOworCQlidXNpZF90YWJsZVtpXS5zaHV0ZG93bl9idXNpZCA9IDA7CisJfQorCXNwaW5fbG9ja19pbml0KCZidXNpZF90YWJsZV9sb2NrKTsKK30KIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfbWF0Y2hfYnVzaWQoc3RydWN0IGRldmljZV9kcml2ZXIgKmRldiwgY29uc3QgY2hhciAqYnVmLAogCQlzaXplX3QgY291bnQpCkBAIC0yNjEsOCArMzAxLDcgQEAKIAlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6IgogCSAgICAgICBEUklWRVJfREVTQyAiOiIgRFJJVkVSX1ZFUlNJT04gIlxuIik7CiAKLQltZW1zZXQoYnVzaWRfdGFibGUsIDAsIHNpemVvZihidXNpZF90YWJsZSkpOwotCXNwaW5fbG9ja19pbml0KCZidXNpZF90YWJsZV9sb2NrKTsKKwlpbml0X2J1c2lkX3RhYmxlKCk7CiAKIAlyZXQgPSBkcml2ZXJfY3JlYXRlX2ZpbGUoJnN0dWJfZHJpdmVyLmRydndyYXAuZHJpdmVyLAogCQkJCSAmZHJpdmVyX2F0dHJfbWF0Y2hfYnVzaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMKaW5kZXggNTk3MmFlNy4uM2RlNmZkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9yeC5jCkBAIC0zNjIsNTQgKzM2MiwxNiBAQAogCXJldHVybiBwcml2OwogfQogCi0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmdldF9lcF9mcm9tX2VwbnVtKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAotCQlpbnQgZXBudW0wKQotewotCXN0cnVjdCB1c2JfaG9zdF9jb25maWcgKmNvbmZpZzsKLQlpbnQgaSA9IDAsIGogPSAwOwotCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXAgPSBOVUxMOwotCWludCBlcG51bTsKLQlpbnQgZm91bmQgPSAwOwotCi0JaWYgKGVwbnVtMCA9PSAwKQotCQlyZXR1cm4gJnVkZXYtPmVwMDsKLQotCWNvbmZpZyA9IHVkZXYtPmFjdGNvbmZpZzsKLQlpZiAoIWNvbmZpZykKLQkJcmV0dXJuIE5VTEw7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzOyBpKyspIHsKLQkJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqc2V0dGluZzsKLQotCQlzZXR0aW5nID0gY29uZmlnLT5pbnRlcmZhY2VbaV0tPmN1cl9hbHRzZXR0aW5nOwotCi0JCWZvciAoaiA9IDA7IGogPCBzZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHM7IGorKykgewotCQkJZXAgPSAmc2V0dGluZy0+ZW5kcG9pbnRbal07Ci0JCQllcG51bSA9IChlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgMHg3Zik7Ci0KLQkJCWlmIChlcG51bSA9PSBlcG51bTApIHsKLQkJCQkvKiB1c2JpcF91aW5mbygiZm91bmQgZXBudW0gJWRcbiIsIGVwbnVtMCk7Ki8KLQkJCQlmb3VuZCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoZm91bmQpCi0JCXJldHVybiBlcDsKLQllbHNlCi0JCXJldHVybiBOVUxMOwotfQotCi0KIHN0YXRpYyBpbnQgZ2V0X3BpcGUoc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2LCBpbnQgZXBudW0sIGludCBkaXIpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KHNkZXYtPmludGVyZmFjZSk7CiAJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKIAlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCA9IE5VTEw7CiAKLQllcCA9IGdldF9lcF9mcm9tX2VwbnVtKHVkZXYsIGVwbnVtKTsKKwlpZiAoZGlyID09IFVTQklQX0RJUl9JTikKKwkJZXAgPSB1ZGV2LT5lcF9pbltlcG51bSAmIDB4N2ZdOworCWVsc2UKKwkJZXAgPSB1ZGV2LT5lcF9vdXRbZXBudW0gJiAweDdmXTsKIAlpZiAoIWVwKSB7CiAJCWRldl9lcnIoJnNkZXYtPmludGVyZmFjZS0+ZGV2LCAibm8gc3VjaCBlbmRwb2ludD8sICVkXG4iLAogCQkJZXBudW0pOwpAQCAtNDYyLDYgKzQyNCw2MCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBtYXNraW5nX2JvZ3VzX2ZsYWdzKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpbnQJCQkJeGZlcnR5cGU7CisJc3RydWN0IHVzYl9kZXZpY2UJCSpkZXY7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50CSplcDsKKwlpbnQJCQkJaXNfb3V0OworCXVuc2lnbmVkIGludAlhbGxvd2VkOworCisJaWYgKCF1cmIgfHwgdXJiLT5oY3ByaXYgfHwgIXVyYi0+Y29tcGxldGUpCisJCXJldHVybjsKKwlkZXYgPSB1cmItPmRldjsKKwlpZiAoKCFkZXYpIHx8IChkZXYtPnN0YXRlIDwgVVNCX1NUQVRFX1VOQVVUSEVOVElDQVRFRCkpCisJCXJldHVybjsKKworCWVwID0gKHVzYl9waXBlaW4odXJiLT5waXBlKSA/IGRldi0+ZXBfaW4gOiBkZXYtPmVwX291dCkKKwkJCVt1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSldOworCWlmICghZXApCisJCXJldHVybjsKKworCXhmZXJ0eXBlID0gdXNiX2VuZHBvaW50X3R5cGUoJmVwLT5kZXNjKTsKKwlpZiAoeGZlcnR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCkgeworCQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpzZXR1cCA9CisJCQkJKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikgdXJiLT5zZXR1cF9wYWNrZXQ7CisKKwkJaWYgKCFzZXR1cCkKKwkJCXJldHVybjsKKwkJaXNfb3V0ID0gIShzZXR1cC0+YlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikgfHwKKwkJCQkhc2V0dXAtPndMZW5ndGg7CisJfSBlbHNlIHsKKwkJaXNfb3V0ID0gdXNiX2VuZHBvaW50X2Rpcl9vdXQoJmVwLT5kZXNjKTsKKwl9CisKKwkvKiBlbmZvcmNlIHNpbXBsZS9zdGFuZGFyZCBwb2xpY3kgKi8KKwlhbGxvd2VkID0gKFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQIHwgVVJCX05PX0lOVEVSUlVQVCB8CisJCSAgIFVSQl9ESVJfTUFTSyB8IFVSQl9GUkVFX0JVRkZFUik7CisJc3dpdGNoICh4ZmVydHlwZSkgeworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQlVMSzoKKwkJaWYgKGlzX291dCkKKwkJCWFsbG93ZWQgfD0gVVJCX1pFUk9fUEFDS0VUOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTDoKKwkJYWxsb3dlZCB8PSBVUkJfTk9fRlNCUjsJLyogb25seSBhZmZlY3RzIFVIQ0kgKi8KKwkJLyogRkFMTFRIUk9VR0ggKi8KKwlkZWZhdWx0OgkJCS8qIGFsbCBub24taXNvIGVuZHBvaW50cyAqLworCQlpZiAoIWlzX291dCkKKwkJCWFsbG93ZWQgfD0gVVJCX1NIT1JUX05PVF9PSzsKKwkJYnJlYWs7CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DOgorCQlhbGxvd2VkIHw9IFVSQl9JU09fQVNBUDsKKwkJYnJlYWs7CisJfQorCXVyYi0+dHJhbnNmZXJfZmxhZ3MgJj0gYWxsb3dlZDsKK30KKwogc3RhdGljIHZvaWQgc3R1Yl9yZWN2X2NtZF9zdWJtaXQoc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2LAogCQkJCSBzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUpCiB7CkBAIC01MjgsNiArNTQ0LDcgQEAKIAkvKiBubyBuZWVkIHRvIHN1Ym1pdCBhbiBpbnRlcmNlcHRlZCByZXF1ZXN0LCBidXQgaGFybWxlc3M/ICovCiAJdHdlYWtfc3BlY2lhbF9yZXF1ZXN0cyhwcml2LT51cmIpOwogCisJbWFza2luZ19ib2d1c19mbGFncyhwcml2LT51cmIpOwogCS8qIHVyYiBpcyBub3cgcmVhZHkgdG8gc3VibWl0ICovCiAJcmV0ID0gdXNiX3N1Ym1pdF91cmIocHJpdi0+dXJiLCBHRlBfS0VSTkVMKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5oIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5oCmluZGV4IGUxYmJkMTIuLmQyODBlMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9jb21tb24uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfY29tbW9uLmgKQEAgLTE3Miw3ICsxNzIsNyBAQAogI2RlZmluZSBVU0JJUF9SRVRfVU5MSU5LCTB4MDAwNAogCV9fdTMyIGNvbW1hbmQ7CiAKLQkgLyogc2VxdWVuY2lhbCBudW1iZXIgd2hpY2ggaWRlbnRpZmllcyByZXF1ZXN0cy4KKwkgLyogc2VxdWVudGlhbCBudW1iZXIgd2hpY2ggaWRlbnRpZmllcyByZXF1ZXN0cy4KIAkgICogaW5jcmVtZW50ZWQgcGVyIGNvbm5lY3Rpb25zICovCiAJX191MzIgc2VxbnVtOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX2NhOTFjeDQyLmMgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX2NhOTFjeDQyLmMKaW5kZXggMGY5ZWE1OC4uMDZiZDc5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV9jYTkxY3g0Mi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfY2E5MWN4NDIuYwpAQCAtOTAwLDcgKzkwMCw4IEBACiAJLyogQWRkcmVzcyBtdXN0IGJlIDQtYnl0ZSBhbGlnbmVkICovCiAJaWYgKHBjaV9hZGRyICYgMHgzKSB7CiAJCWRldl9lcnIoZGV2LCAiUk1XIEFkZHJlc3Mgbm90IDQtYnl0ZSBhbGlnbmVkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCX0KIAogCS8qIEVuc3VyZSBSTVcgRGlzYWJsZWQgd2hpbHN0IGNvbmZpZ3VyaW5nICovCkBAIC05MjEsNiArOTIyLDcgQEAKIAkvKiBEaXNhYmxlIFJNVyAqLwogCWlvd3JpdGUzMigwLCBicmlkZ2UtPmJhc2UgKyBTQ1lDX0NUTCk7CiAKK291dDoKIAlzcGluX3VubG9jaygmKGltYWdlLT5sb2NrKSk7CiAKIAltdXRleF91bmxvY2soJihicmlkZ2UtPnZtZV9ybXcpKTsKQEAgLTk2MSwxMSArOTYzLDExIEBACiAKIAlpZiAoZGVzdC0+dHlwZSA9PSBWTUVfRE1BX1ZNRSkgewogCQllbnRyeS0+ZGVzY3JpcHRvci5kY3RsIHw9IENBOTFDWDQyX0RDVExfTDJWOwotCQl2bWVfYXR0ciA9IChzdHJ1Y3Qgdm1lX2RtYV92bWUgKilkZXN0LT5wcml2YXRlOwotCQlwY2lfYXR0ciA9IChzdHJ1Y3Qgdm1lX2RtYV9wY2kgKilzcmMtPnByaXZhdGU7CisJCXZtZV9hdHRyID0gZGVzdC0+cHJpdmF0ZTsKKwkJcGNpX2F0dHIgPSBzcmMtPnByaXZhdGU7CiAJfSBlbHNlIHsKLQkJdm1lX2F0dHIgPSAoc3RydWN0IHZtZV9kbWFfdm1lICopc3JjLT5wcml2YXRlOwotCQlwY2lfYXR0ciA9IChzdHJ1Y3Qgdm1lX2RtYV9wY2kgKilkZXN0LT5wcml2YXRlOworCQl2bWVfYXR0ciA9IHNyYy0+cHJpdmF0ZTsKKwkJcGNpX2F0dHIgPSBkZXN0LT5wcml2YXRlOwogCX0KIAogCS8qIENoZWNrIHdlIGNhbiBkbyBmdWxsZmlsbCByZXF1aXJlZCBhdHRyaWJ1dGVzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX3RzaTE0OC5jIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV90c2kxNDguYwppbmRleCBmMDljYWMxLi40OTJkZGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX3RzaTE0OC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfdHNpMTQ4LmMKQEAgLTE2NDksNyArMTY0OSw3IEBACiAJLyogRmlsbCBvdXQgc291cmNlIHBhcnQgKi8KIAlzd2l0Y2ggKHNyYy0+dHlwZSkgewogCWNhc2UgVk1FX0RNQV9QQVRURVJOOgotCQlwYXR0ZXJuX2F0dHIgPSAoc3RydWN0IHZtZV9kbWFfcGF0dGVybiAqKXNyYy0+cHJpdmF0ZTsKKwkJcGF0dGVybl9hdHRyID0gc3JjLT5wcml2YXRlOwogCiAJCWVudHJ5LT5kZXNjcmlwdG9yLmRzYWwgPSBwYXR0ZXJuX2F0dHItPnBhdHRlcm47CiAJCWVudHJ5LT5kZXNjcmlwdG9yLmRzYXQgPSBUU0kxNDhfTENTUl9EU0FUX1RZUF9QQVQ7CkBAIC0xNjYzLDcgKzE2NjMsNyBAQAogCiAJCWJyZWFrOwogCWNhc2UgVk1FX0RNQV9QQ0k6Ci0JCXBjaV9hdHRyID0gKHN0cnVjdCB2bWVfZG1hX3BjaSAqKXNyYy0+cHJpdmF0ZTsKKwkJcGNpX2F0dHIgPSBzcmMtPnByaXZhdGU7CiAKIAkJcmVnX3NwbGl0KCh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX2F0dHItPmFkZHJlc3MsICZhZGRyZXNzX2hpZ2gsCiAJCQkmYWRkcmVzc19sb3cpOwpAQCAtMTY3Miw3ICsxNjcyLDcgQEAKIAkJZW50cnktPmRlc2NyaXB0b3IuZHNhdCA9IFRTSTE0OF9MQ1NSX0RTQVRfVFlQX1BDSTsKIAkJYnJlYWs7CiAJY2FzZSBWTUVfRE1BX1ZNRToKLQkJdm1lX2F0dHIgPSAoc3RydWN0IHZtZV9kbWFfdm1lICopc3JjLT5wcml2YXRlOworCQl2bWVfYXR0ciA9IHNyYy0+cHJpdmF0ZTsKIAogCQlyZWdfc3BsaXQoKHVuc2lnbmVkIGxvbmcgbG9uZyl2bWVfYXR0ci0+YWRkcmVzcywgJmFkZHJlc3NfaGlnaCwKIAkJCSZhZGRyZXNzX2xvdyk7CkBAIC0xNzAxLDcgKzE3MDEsNyBAQAogCS8qIEZpbGwgb3V0IGRlc3RpbmF0aW9uIHBhcnQgKi8KIAlzd2l0Y2ggKGRlc3QtPnR5cGUpIHsKIAljYXNlIFZNRV9ETUFfUENJOgotCQlwY2lfYXR0ciA9IChzdHJ1Y3Qgdm1lX2RtYV9wY2kgKilkZXN0LT5wcml2YXRlOworCQlwY2lfYXR0ciA9IGRlc3QtPnByaXZhdGU7CiAKIAkJcmVnX3NwbGl0KCh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX2F0dHItPmFkZHJlc3MsICZhZGRyZXNzX2hpZ2gsCiAJCQkmYWRkcmVzc19sb3cpOwpAQCAtMTcxMCw3ICsxNzEwLDcgQEAKIAkJZW50cnktPmRlc2NyaXB0b3IuZGRhdCA9IFRTSTE0OF9MQ1NSX0REQVRfVFlQX1BDSTsKIAkJYnJlYWs7CiAJY2FzZSBWTUVfRE1BX1ZNRToKLQkJdm1lX2F0dHIgPSAoc3RydWN0IHZtZV9kbWFfdm1lICopZGVzdC0+cHJpdmF0ZTsKKwkJdm1lX2F0dHIgPSBkZXN0LT5wcml2YXRlOwogCiAJCXJlZ19zcGxpdCgodW5zaWduZWQgbG9uZyBsb25nKXZtZV9hdHRyLT5hZGRyZXNzLCAmYWRkcmVzc19oaWdoLAogCQkJJmFkZHJlc3NfbG93KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92bWUvZGV2aWNlcy92bWVfdXNlci5jIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9kZXZpY2VzL3ZtZV91c2VyLmMKaW5kZXggYmMxNmZjMDcuLjhmNzdiZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92bWUvZGV2aWNlcy92bWVfdXNlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvZGV2aWNlcy92bWVfdXNlci5jCkBAIC0zMSwxNSArMzEsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgIi4uL3ZtZS5oIgogI2luY2x1ZGUgInZtZV91c2VyLmgiCiAKK3N0YXRpYyBERUZJTkVfTVVURVgodm1lX3VzZXJfbXV0ZXgpOwogc3RhdGljIGNoYXIgZHJpdmVyX25hbWVbXSA9ICJ2bWVfdXNlciI7CiAKIHN0YXRpYyBpbnQgYnVzW1VTRVJfQlVTX01BWF07CkBAIC00OCwxOSArNDksMTkgQEAKIC8qIEN1cnJlbnRseSBEb2N1bWVudGF0aW9uL2RldmljZXMudHh0IGRlZmluZXMgdGhlIGZvbGxvd2luZyBmb3IgVk1FOgogICoKICAqIDIyMSBjaGFyCVZNRSBidXMKLSAqIAkJICAwID0gL2Rldi9idXMvdm1lL20wCQlGaXJzdCBtYXN0ZXIgaW1hZ2UKLSAqIAkJICAxID0gL2Rldi9idXMvdm1lL20xCQlTZWNvbmQgbWFzdGVyIGltYWdlCi0gKiAJCSAgMiA9IC9kZXYvYnVzL3ZtZS9tMgkJVGhpcmQgbWFzdGVyIGltYWdlCi0gKiAJCSAgMyA9IC9kZXYvYnVzL3ZtZS9tMwkJRm91cnRoIG1hc3RlciBpbWFnZQotICogCQkgIDQgPSAvZGV2L2J1cy92bWUvczAJCUZpcnN0IHNsYXZlIGltYWdlCi0gKiAJCSAgNSA9IC9kZXYvYnVzL3ZtZS9zMQkJU2Vjb25kIHNsYXZlIGltYWdlCi0gKiAJCSAgNiA9IC9kZXYvYnVzL3ZtZS9zMgkJVGhpcmQgc2xhdmUgaW1hZ2UKLSAqIAkJICA3ID0gL2Rldi9idXMvdm1lL3MzCQlGb3VydGggc2xhdmUgaW1hZ2UKLSAqIAkJICA4ID0gL2Rldi9idXMvdm1lL2N0bAkJQ29udHJvbAorICoJCSAgMCA9IC9kZXYvYnVzL3ZtZS9tMAkJRmlyc3QgbWFzdGVyIGltYWdlCisgKgkJICAxID0gL2Rldi9idXMvdm1lL20xCQlTZWNvbmQgbWFzdGVyIGltYWdlCisgKgkJICAyID0gL2Rldi9idXMvdm1lL20yCQlUaGlyZCBtYXN0ZXIgaW1hZ2UKKyAqCQkgIDMgPSAvZGV2L2J1cy92bWUvbTMJCUZvdXJ0aCBtYXN0ZXIgaW1hZ2UKKyAqCQkgIDQgPSAvZGV2L2J1cy92bWUvczAJCUZpcnN0IHNsYXZlIGltYWdlCisgKgkJICA1ID0gL2Rldi9idXMvdm1lL3MxCQlTZWNvbmQgc2xhdmUgaW1hZ2UKKyAqCQkgIDYgPSAvZGV2L2J1cy92bWUvczIJCVRoaXJkIHNsYXZlIGltYWdlCisgKgkJICA3ID0gL2Rldi9idXMvdm1lL3MzCQlGb3VydGggc2xhdmUgaW1hZ2UKKyAqCQkgIDggPSAvZGV2L2J1cy92bWUvY3RsCQlDb250cm9sCiAgKgotICogCQlJdCBpcyBleHBlY3RlZCB0aGF0IGFsbCBWTUUgYnVzIGRyaXZlcnMgd2lsbCB1c2UgdGhlCi0gKiAJCXNhbWUgaW50ZXJmYWNlLiAgRm9yIGludGVyZmFjZSBkb2N1bWVudGF0aW9uIHNlZQotICogCQlodHRwOi8vd3d3LnZtZWxpbnV4Lm9yZy8uCisgKgkJSXQgaXMgZXhwZWN0ZWQgdGhhdCBhbGwgVk1FIGJ1cyBkcml2ZXJzIHdpbGwgdXNlIHRoZQorICoJCXNhbWUgaW50ZXJmYWNlLiAgRm9yIGludGVyZmFjZSBkb2N1bWVudGF0aW9uIHNlZQorICoJCWh0dHA6Ly93d3cudm1lbGludXgub3JnLy4KICAqCiAgKiBIb3dldmVyIHRoZSBWTUUgZHJpdmVyIGF0IGh0dHA6Ly93d3cudm1lbGludXgub3JnLyBpcyByYXRoZXIgb2xkIGFuZCBkb2Vzbid0CiAgKiBldmVuIHN1cHBvcnQgdGhlIHRzaTE0OCBjaGlwc2V0ICh3aGljaCBoYXMgOCBtYXN0ZXIgYW5kIDggc2xhdmUgd2luZG93cykuCkBAIC0xMzcsMTIgKzEzOCwxMiBAQAogc3RhdGljIGludCBfX2V4aXQgdm1lX3VzZXJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKiwgaW50LCBpbnQpOwogCiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2bWVfdXNlcl9mb3BzID0gewotICAgICAgICAub3BlbiA9IHZtZV91c2VyX29wZW4sCi0gICAgICAgIC5yZWxlYXNlID0gdm1lX3VzZXJfcmVsZWFzZSwKLSAgICAgICAgLnJlYWQgPSB2bWVfdXNlcl9yZWFkLAotICAgICAgICAud3JpdGUgPSB2bWVfdXNlcl93cml0ZSwKLSAgICAgICAgLmxsc2VlayA9IHZtZV91c2VyX2xsc2VlaywKLSAgICAgICAgLnVubG9ja2VkX2lvY3RsID0gdm1lX3VzZXJfdW5sb2NrZWRfaW9jdGwsCisJLm9wZW4gPSB2bWVfdXNlcl9vcGVuLAorCS5yZWxlYXNlID0gdm1lX3VzZXJfcmVsZWFzZSwKKwkucmVhZCA9IHZtZV91c2VyX3JlYWQsCisJLndyaXRlID0gdm1lX3VzZXJfd3JpdGUsCisJLmxsc2VlayA9IHZtZV91c2VyX2xsc2VlaywKKwkudW5sb2NrZWRfaW9jdGwgPSB2bWVfdXNlcl91bmxvY2tlZF9pb2N0bCwKIH07CiAKIApAQCAtMTUxLDEzICsxNTIsMTMgQEAKICAqLwogc3RhdGljIHZvaWQgcmVzZXRfY291bnRlcnModm9pZCkKIHsKLSAgICAgICAgc3RhdGlzdGljcy5yZWFkcyA9IDA7Ci0gICAgICAgIHN0YXRpc3RpY3Mud3JpdGVzID0gMDsKLSAgICAgICAgc3RhdGlzdGljcy5pb2N0bHMgPSAwOwotICAgICAgICBzdGF0aXN0aWNzLmlycXMgPSAwOwotICAgICAgICBzdGF0aXN0aWNzLmJlcnJzID0gMDsKLSAgICAgICAgc3RhdGlzdGljcy5kbWFFcnJvcnMgPSAwOwotICAgICAgICBzdGF0aXN0aWNzLnRpbWVvdXRzID0gMDsKKwlzdGF0aXN0aWNzLnJlYWRzID0gMDsKKwlzdGF0aXN0aWNzLndyaXRlcyA9IDA7CisJc3RhdGlzdGljcy5pb2N0bHMgPSAwOworCXN0YXRpc3RpY3MuaXJxcyA9IDA7CisJc3RhdGlzdGljcy5iZXJycyA9IDA7CisJc3RhdGlzdGljcy5kbWFFcnJvcnMgPSAwOworCXN0YXRpc3RpY3MudGltZW91dHMgPSAwOwogfQogCiBzdGF0aWMgaW50IHZtZV91c2VyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC0yMTYsMjEgKzIxNywyMCBAQAogCQkvKiBXZSBjb3B5IHRvIGtlcm5lbCBidWZmZXIgKi8KIAkJY29waWVkID0gdm1lX21hc3Rlcl9yZWFkKGltYWdlW21pbm9yXS5yZXNvdXJjZSwKIAkJCWltYWdlW21pbm9yXS5rZXJuX2J1ZiwgY291bnQsICpwcG9zKTsKLQkJaWYgKGNvcGllZCA8IDApIHsKKwkJaWYgKGNvcGllZCA8IDApCiAJCQlyZXR1cm4gKGludCljb3BpZWQ7Ci0JCX0KIAogCQlyZXR2YWwgPSBfX2NvcHlfdG9fdXNlcihidWYsIGltYWdlW21pbm9yXS5rZXJuX2J1ZiwKIAkJCSh1bnNpZ25lZCBsb25nKWNvcGllZCk7CiAJCWlmIChyZXR2YWwgIT0gMCkgewogCQkJY29waWVkID0gKGNvcGllZCAtIHJldHZhbCk7Ci0JCQlwcmludGsoIlVzZXIgY29weSBmYWlsZWRcbiIpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiVXNlciBjb3B5IGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCiAJfSBlbHNlIHsKIAkJLyogWFhYIE5lZWQgdG8gd3JpdGUgdGhpcyAqLwotCQlwcmludGsoIkN1cnJlbnRseSBkb24ndCBzdXBwb3J0IGxhcmdlIHRyYW5zZmVyc1xuIik7CisJCXByaW50ayhLRVJOX0lORk8gIkN1cnJlbnRseSBkb24ndCBzdXBwb3J0IGxhcmdlIHRyYW5zZmVyc1xuIik7CiAJCS8qIE1hcCBpbiBwYWdlcyBmcm9tIHVzZXJzcGFjZSAqLwogCiAJCS8qIENhbGwgdm1lX21hc3Rlcl9yZWFkIHRvIGRvIHRoZSB0cmFuc2ZlciAqLwpAQCAtMjY0LDcgKzI2NCw3IEBACiAJCQlpbWFnZVttaW5vcl0ua2Vybl9idWYsIGNvcGllZCwgKnBwb3MpOwogCX0gZWxzZSB7CiAJCS8qIFhYWCBOZWVkIHRvIHdyaXRlIHRoaXMgKi8KLQkJcHJpbnRrKCJDdXJyZW50bHkgZG9uJ3Qgc3VwcG9ydCBsYXJnZSB0cmFuc2ZlcnNcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICJDdXJyZW50bHkgZG9uJ3Qgc3VwcG9ydCBsYXJnZSB0cmFuc2ZlcnNcbiIpOwogCQkvKiBNYXAgaW4gcGFnZXMgZnJvbSB1c2Vyc3BhY2UgKi8KIAogCQkvKiBDYWxsIHZtZV9tYXN0ZXJfd3JpdGUgdG8gZG8gdGhlIHRyYW5zZmVyICovCkBAIC0zMTMsNyArMzEzLDcgQEAKIH0KIAogc3RhdGljIHNzaXplX3Qgdm1lX3VzZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3QgY291bnQsCi0JCQlsb2ZmX3QgKiBwcG9zKQorCQkJbG9mZl90ICpwcG9zKQogewogCXVuc2lnbmVkIGludCBtaW5vciA9IE1JTk9SKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3JkZXYpOwogCXNzaXplX3QgcmV0dmFsOwpAQCAtMzM3LDcgKzMzNyw3IEBACiAJZWxzZQogCQlva2NvdW50ID0gY291bnQ7CiAKLQlzd2l0Y2ggKHR5cGVbbWlub3JdKXsKKwlzd2l0Y2ggKHR5cGVbbWlub3JdKSB7CiAJY2FzZSBNQVNURVJfTUlOT1I6CiAJCXJldHZhbCA9IHJlc291cmNlX3RvX3VzZXIobWlub3IsIGJ1Ziwgb2tjb3VudCwgcHBvcyk7CiAJCWJyZWFrOwpAQCAtMzgwLDcgKzM4MCw3IEBACiAJZWxzZQogCQlva2NvdW50ID0gY291bnQ7CiAKLQlzd2l0Y2ggKHR5cGVbbWlub3JdKXsKKwlzd2l0Y2ggKHR5cGVbbWlub3JdKSB7CiAJY2FzZSBNQVNURVJfTUlOT1I6CiAJCXJldHZhbCA9IHJlc291cmNlX2Zyb21fdXNlcihtaW5vciwgYnVmLCBva2NvdW50LCBwcG9zKTsKIAkJYnJlYWs7CkBAIC01NjAsOSArNTYwLDkgQEAKIHsKIAlpbnQgcmV0OwogCi0JbG9ja19rZXJuZWwoKTsKKwltdXRleF9sb2NrKCZ2bWVfdXNlcl9tdXRleCk7CiAJcmV0ID0gdm1lX3VzZXJfaW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwgY21kLCBhcmcpOwotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJnZtZV91c2VyX211dGV4KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC01NzEsNyArNTcxLDcgQEAKIC8qCiAgKiBVbmFsbG9jYXRlIGEgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnVmZmVyCiAgKi8KLXN0YXRpYyB2b2lkIGJ1Zl91bmFsbG9jIChpbnQgbnVtKQorc3RhdGljIHZvaWQgYnVmX3VuYWxsb2MoaW50IG51bSkKIHsKIAlpZiAoaW1hZ2VbbnVtXS5rZXJuX2J1ZikgewogI2lmZGVmIFZNRV9ERUJVRwpAQCAtNTk0LDggKzU5NCw4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgdm1lX2RyaXZlciB2bWVfdXNlcl9kcml2ZXIgPSB7Ci0gICAgICAgIC5uYW1lID0gZHJpdmVyX25hbWUsCi0gICAgICAgIC5wcm9iZSA9IHZtZV91c2VyX3Byb2JlLAorCS5uYW1lID0gZHJpdmVyX25hbWUsCisJLnByb2JlID0gdm1lX3VzZXJfcHJvYmUsCiAJLnJlbW92ZSA9IHZtZV91c2VyX3JlbW92ZSwKIH07CiAKQEAgLTc3MCwxNiArNzcwLDE2IEBACiAJfQogCiAJLyogQWRkIHN5c2ZzIEVudHJpZXMgKi8KLQlmb3IgKGk9MDsgaTxWTUVfREVWUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IFZNRV9ERVZTOyBpKyspIHsKIAkJc3dpdGNoICh0eXBlW2ldKSB7CiAJCWNhc2UgTUFTVEVSX01JTk9SOgotCQkJc3ByaW50ZihuYW1lLCJidXMvdm1lL20lJWQiKTsKKwkJCXNwcmludGYobmFtZSwgImJ1cy92bWUvbSUlZCIpOwogCQkJYnJlYWs7CiAJCWNhc2UgQ09OVFJPTF9NSU5PUjoKLQkJCXNwcmludGYobmFtZSwiYnVzL3ZtZS9jdGwiKTsKKwkJCXNwcmludGYobmFtZSwgImJ1cy92bWUvY3RsIik7CiAJCQlicmVhazsKIAkJY2FzZSBTTEFWRV9NSU5PUjoKLQkJCXNwcmludGYobmFtZSwiYnVzL3ZtZS9zJSVkIik7CisJCQlzcHJpbnRmKG5hbWUsICJidXMvdm1lL3MlJWQiKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZXJyID0gLUVJTlZBTDsKQEAgLTc5MCw5ICs3OTAsOSBAQAogCQlpbWFnZVtpXS5kZXZpY2UgPQogCQkJZGV2aWNlX2NyZWF0ZSh2bWVfdXNlcl9zeXNmc19jbGFzcywgTlVMTCwKIAkJCQlNS0RFVihWTUVfTUFKT1IsIGkpLCBOVUxMLCBuYW1lLAotCQkJCSh0eXBlW2ldID09IFNMQVZFX01JTk9SKT8gaSAtIChNQVNURVJfTUFYICsgMSkgOiBpKTsKKwkJCQkodHlwZVtpXSA9PSBTTEFWRV9NSU5PUikgPyBpIC0gKE1BU1RFUl9NQVggKyAxKSA6IGkpOwogCQlpZiAoSVNfRVJSKGltYWdlW2ldLmRldmljZSkpIHsKLQkJCXByaW50aygiJXM6IEVycm9yIGNyZWF0aW5nIHN5c2ZzIGRldmljZVxuIiwKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBFcnJvciBjcmVhdGluZyBzeXNmcyBkZXZpY2VcbiIsCiAJCQkJZHJpdmVyX25hbWUpOwogCQkJZXJyID0gUFRSX0VSUihpbWFnZVtpXS5kZXZpY2UpOwogCQkJZ290byBlcnJfc3lzZnM7CkBAIC04MDQsNyArODA0LDcgQEAKIAkvKiBFbnN1cmUgY291bnRlciBzZXQgY29ycmVjdHkgdG8gZGVzdHJveSBhbGwgc3lzZnMgZGV2aWNlcyAqLwogCWkgPSBWTUVfREVWUzsKIGVycl9zeXNmczoKLQl3aGlsZSAoaSA+IDApeworCXdoaWxlIChpID4gMCkgewogCQlpLS07CiAJCWRldmljZV9kZXN0cm95KHZtZV91c2VyX3N5c2ZzX2NsYXNzLCBNS0RFVihWTUVfTUFKT1IsIGkpKTsKIAl9CkBAIC04NDUsOSArODQ1LDggQEAKIAlpbnQgaTsKIAogCS8qIFJlbW92ZSBzeXNmcyBFbnRyaWVzICovCi0JZm9yKGk9MDsgaTxWTUVfREVWUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IFZNRV9ERVZTOyBpKyspCiAJCWRldmljZV9kZXN0cm95KHZtZV91c2VyX3N5c2ZzX2NsYXNzLCBNS0RFVihWTUVfTUFKT1IsIGkpKTsKLQl9CiAJY2xhc3NfZGVzdHJveSh2bWVfdXNlcl9zeXNmc19jbGFzcyk7CiAKIAlmb3IgKGkgPSBNQVNURVJfTUlOT1I7IGkgPCAoTUFTVEVSX01BWCArIDEpOyBpKyspCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1LzgwMjExaGRyLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1LzgwMjExaGRyLmgKaW5kZXggYjdiMTcwZS4uZjU1MjgzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS84MDIxMWhkci5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvODAyMTFoZHIuaApAQCAtMTYxLDIxICsxNjEsMjEgQEAKICNpZmRlZiBfX0JJR19FTkRJQU4KIAogLyogR0VUICYgU0VUIEZyYW1lIENvbnRyb2wgYml0ICovCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX1BSVkVSKG4pICAgICgoKChXT1JEKShuKSA+PiA4KSAmIChCSVQwIHwgQklUMSkpCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX0ZUWVBFKG4pICAgICgoKChXT1JEKShuKSA+PiA4KSAmIChCSVQyIHwgQklUMykpID4+IDIpCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX0ZTVFlQRShuKSAgICgoKChXT1JEKShuKSA+PiA4KSAmIChCSVQ0fEJJVDV8QklUNnxCSVQ3KSkgPj4gNCkKLSNkZWZpbmUgV0xBTl9HRVRfRkNfVE9EUyhuKSAgICAgKCgoKFdPUkQpKG4pIDw8IDgpICYgKEJJVDgpKSA+PiA4KQotI2RlZmluZSBXTEFOX0dFVF9GQ19GUk9NRFMobikgICAoKCgoV09SRCkobikgPDwgOCkgJiAoQklUOSkpID4+IDkpCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX01PUkVGUkFHKG4pICgoKChXT1JEKShuKSA8PCA4KSAmIChCSVQxMCkpID4+IDEwKQotI2RlZmluZSBXTEFOX0dFVF9GQ19SRVRSWShuKSAgICAoKCgoV09SRCkobikgPDwgOCkgJiAoQklUMTEpKSA+PiAxMSkKLSNkZWZpbmUgV0xBTl9HRVRfRkNfUFdSTUdUKG4pICAgKCgoKFdPUkQpKG4pIDw8IDgpICYgKEJJVDEyKSkgPj4gMTIpCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX01PUkVEQVRBKG4pICgoKChXT1JEKShuKSA8PCA4KSAmIChCSVQxMykpID4+IDEzKQotI2RlZmluZSBXTEFOX0dFVF9GQ19JU1dFUChuKSAgICAoKCgoV09SRCkobikgPDwgOCkgJiAoQklUMTQpKSA+PiAxNCkKLSNkZWZpbmUgV0xBTl9HRVRfRkNfT1JERVIobikgICAgKCgoKFdPUkQpKG4pIDw8IDgpICYgKEJJVDE1KSkgPj4gMTUpCisjZGVmaW5lIFdMQU5fR0VUX0ZDX1BSVkVSKG4pICAgICgoKCh1bnNpZ25lZCBzaG9ydCkobikgPj4gOCkgJiAoQklUMCB8IEJJVDEpKQorI2RlZmluZSBXTEFOX0dFVF9GQ19GVFlQRShuKSAgICAoKCgodW5zaWduZWQgc2hvcnQpKG4pID4+IDgpICYgKEJJVDIgfCBCSVQzKSkgPj4gMikKKyNkZWZpbmUgV0xBTl9HRVRfRkNfRlNUWVBFKG4pICAgKCgoKHVuc2lnbmVkIHNob3J0KShuKSA+PiA4KSAmIChCSVQ0fEJJVDV8QklUNnxCSVQ3KSkgPj4gNCkKKyNkZWZpbmUgV0xBTl9HRVRfRkNfVE9EUyhuKSAgICAgKCgoKHVuc2lnbmVkIHNob3J0KShuKSA8PCA4KSAmIChCSVQ4KSkgPj4gOCkKKyNkZWZpbmUgV0xBTl9HRVRfRkNfRlJPTURTKG4pICAgKCgoKHVuc2lnbmVkIHNob3J0KShuKSA8PCA4KSAmIChCSVQ5KSkgPj4gOSkKKyNkZWZpbmUgV0xBTl9HRVRfRkNfTU9SRUZSQUcobikgKCgoKHVuc2lnbmVkIHNob3J0KShuKSA8PCA4KSAmIChCSVQxMCkpID4+IDEwKQorI2RlZmluZSBXTEFOX0dFVF9GQ19SRVRSWShuKSAgICAoKCgodW5zaWduZWQgc2hvcnQpKG4pIDw8IDgpICYgKEJJVDExKSkgPj4gMTEpCisjZGVmaW5lIFdMQU5fR0VUX0ZDX1BXUk1HVChuKSAgICgoKCh1bnNpZ25lZCBzaG9ydCkobikgPDwgOCkgJiAoQklUMTIpKSA+PiAxMikKKyNkZWZpbmUgV0xBTl9HRVRfRkNfTU9SRURBVEEobikgKCgoKHVuc2lnbmVkIHNob3J0KShuKSA8PCA4KSAmIChCSVQxMykpID4+IDEzKQorI2RlZmluZSBXTEFOX0dFVF9GQ19JU1dFUChuKSAgICAoKCgodW5zaWduZWQgc2hvcnQpKG4pIDw8IDgpICYgKEJJVDE0KSkgPj4gMTQpCisjZGVmaW5lIFdMQU5fR0VUX0ZDX09SREVSKG4pICAgICgoKCh1bnNpZ25lZCBzaG9ydCkobikgPDwgOCkgJiAoQklUMTUpKSA+PiAxNSkKIAogLyogU2VxdWVuY2UgRmllbGQgYml0ICovCi0jZGVmaW5lIFdMQU5fR0VUX1NFUV9GUkdOVU0obikgKCgoV09SRCkobikgPj4gOCkgJiAoQklUMHxCSVQxfEJJVDJ8QklUMykpCi0jZGVmaW5lIFdMQU5fR0VUX1NFUV9TRVFOVU0obikgKCgoKFdPUkQpKG4pID4+IDgpICYgKH4oQklUMHxCSVQxfEJJVDJ8QklUMykpKSA+PiA0KQorI2RlZmluZSBXTEFOX0dFVF9TRVFfRlJHTlVNKG4pICgoKHVuc2lnbmVkIHNob3J0KShuKSA+PiA4KSAmIChCSVQwfEJJVDF8QklUMnxCSVQzKSkKKyNkZWZpbmUgV0xBTl9HRVRfU0VRX1NFUU5VTShuKSAoKCgodW5zaWduZWQgc2hvcnQpKG4pID4+IDgpICYgKH4oQklUMHxCSVQxfEJJVDJ8QklUMykpKSA+PiA0KQogCiAKIC8qIENhcGFiaWxpdHkgRmllbGQgYml0ICovCkBAIC0xOTYsMjIgKzE5NiwyMiBAQAogI2Vsc2UKIAogLyogR0VUICYgU0VUIEZyYW1lIENvbnRyb2wgYml0ICovCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX1BSVkVSKG4pICAgICgoKFdPUkQpKG4pKSAmIChCSVQwIHwgQklUMSkpCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX0ZUWVBFKG4pICAgICgoKChXT1JEKShuKSkgJiAoQklUMiB8IEJJVDMpKSA+PiAyKQotI2RlZmluZSBXTEFOX0dFVF9GQ19GU1RZUEUobikgICAoKCgoV09SRCkobikpICYgKEJJVDR8QklUNXxCSVQ2fEJJVDcpKSA+PiA0KQotI2RlZmluZSBXTEFOX0dFVF9GQ19UT0RTKG4pICAgICAoKCgoV09SRCkobikpICYgKEJJVDgpKSA+PiA4KQotI2RlZmluZSBXTEFOX0dFVF9GQ19GUk9NRFMobikgICAoKCgoV09SRCkobikpICYgKEJJVDkpKSA+PiA5KQotI2RlZmluZSBXTEFOX0dFVF9GQ19NT1JFRlJBRyhuKSAoKCgoV09SRCkobikpICYgKEJJVDEwKSkgPj4gMTApCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX1JFVFJZKG4pICAgICgoKChXT1JEKShuKSkgJiAoQklUMTEpKSA+PiAxMSkKLSNkZWZpbmUgV0xBTl9HRVRfRkNfUFdSTUdUKG4pICAgKCgoKFdPUkQpKG4pKSAmIChCSVQxMikpID4+IDEyKQotI2RlZmluZSBXTEFOX0dFVF9GQ19NT1JFREFUQShuKSAoKCgoV09SRCkobikpICYgKEJJVDEzKSkgPj4gMTMpCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX0lTV0VQKG4pICAgICgoKChXT1JEKShuKSkgJiAoQklUMTQpKSA+PiAxNCkKLSNkZWZpbmUgV0xBTl9HRVRfRkNfT1JERVIobikgICAgKCgoKFdPUkQpKG4pKSAmIChCSVQxNSkpID4+IDE1KQorI2RlZmluZSBXTEFOX0dFVF9GQ19QUlZFUihuKSAgICAoKCh1bnNpZ25lZCBzaG9ydCkobikpICYgKEJJVDAgfCBCSVQxKSkKKyNkZWZpbmUgV0xBTl9HRVRfRkNfRlRZUEUobikgICAgKCgoKHVuc2lnbmVkIHNob3J0KShuKSkgJiAoQklUMiB8IEJJVDMpKSA+PiAyKQorI2RlZmluZSBXTEFOX0dFVF9GQ19GU1RZUEUobikgICAoKCgodW5zaWduZWQgc2hvcnQpKG4pKSAmIChCSVQ0fEJJVDV8QklUNnxCSVQ3KSkgPj4gNCkKKyNkZWZpbmUgV0xBTl9HRVRfRkNfVE9EUyhuKSAgICAgKCgoKHVuc2lnbmVkIHNob3J0KShuKSkgJiAoQklUOCkpID4+IDgpCisjZGVmaW5lIFdMQU5fR0VUX0ZDX0ZST01EUyhuKSAgICgoKCh1bnNpZ25lZCBzaG9ydCkobikpICYgKEJJVDkpKSA+PiA5KQorI2RlZmluZSBXTEFOX0dFVF9GQ19NT1JFRlJBRyhuKSAoKCgodW5zaWduZWQgc2hvcnQpKG4pKSAmIChCSVQxMCkpID4+IDEwKQorI2RlZmluZSBXTEFOX0dFVF9GQ19SRVRSWShuKSAgICAoKCgodW5zaWduZWQgc2hvcnQpKG4pKSAmIChCSVQxMSkpID4+IDExKQorI2RlZmluZSBXTEFOX0dFVF9GQ19QV1JNR1QobikgICAoKCgodW5zaWduZWQgc2hvcnQpKG4pKSAmIChCSVQxMikpID4+IDEyKQorI2RlZmluZSBXTEFOX0dFVF9GQ19NT1JFREFUQShuKSAoKCgodW5zaWduZWQgc2hvcnQpKG4pKSAmIChCSVQxMykpID4+IDEzKQorI2RlZmluZSBXTEFOX0dFVF9GQ19JU1dFUChuKSAgICAoKCgodW5zaWduZWQgc2hvcnQpKG4pKSAmIChCSVQxNCkpID4+IDE0KQorI2RlZmluZSBXTEFOX0dFVF9GQ19PUkRFUihuKSAgICAoKCgodW5zaWduZWQgc2hvcnQpKG4pKSAmIChCSVQxNSkpID4+IDE1KQogCiAKIC8qIFNlcXVlbmNlIEZpZWxkIGJpdCAqLwotI2RlZmluZSBXTEFOX0dFVF9TRVFfRlJHTlVNKG4pICgoKFdPUkQpKG4pKSAmIChCSVQwfEJJVDF8QklUMnxCSVQzKSkKLSNkZWZpbmUgV0xBTl9HRVRfU0VRX1NFUU5VTShuKSAoKCgoV09SRCkobikpICYgKH4oQklUMHxCSVQxfEJJVDJ8QklUMykpKSA+PiA0KQorI2RlZmluZSBXTEFOX0dFVF9TRVFfRlJHTlVNKG4pICgoKHVuc2lnbmVkIHNob3J0KShuKSkgJiAoQklUMHxCSVQxfEJJVDJ8QklUMykpCisjZGVmaW5lIFdMQU5fR0VUX1NFUV9TRVFOVU0obikgKCgoKHVuc2lnbmVkIHNob3J0KShuKSkgJiAofihCSVQwfEJJVDF8QklUMnxCSVQzKSkpID4+IDQpCiAKIAogLyogQ2FwYWJpbGl0eSBGaWVsZCBiaXQgKi8KQEAgLTI0NiwyMCArMjQ2LDIwIEBACiAjZGVmaW5lIFdMQU5fU0VUX0NBUF9JTkZPX0dSUEFDSyhuKSAgICAgICAgKChuKSA8PCAxNCkKIAogCi0jZGVmaW5lIFdMQU5fU0VUX0ZDX1BSVkVSKG4pICAgICgoV09SRCkobikpCi0jZGVmaW5lIFdMQU5fU0VUX0ZDX0ZUWVBFKG4pICAgICgoKFdPUkQpKG4pKSA8PCAyKQotI2RlZmluZSBXTEFOX1NFVF9GQ19GU1RZUEUobikgICAoKChXT1JEKShuKSkgPDwgNCkKLSNkZWZpbmUgV0xBTl9TRVRfRkNfVE9EUyhuKSAgICAgKCgoV09SRCkobikpIDw8IDgpCi0jZGVmaW5lIFdMQU5fU0VUX0ZDX0ZST01EUyhuKSAgICgoKFdPUkQpKG4pKSA8PCA5KQotI2RlZmluZSBXTEFOX1NFVF9GQ19NT1JFRlJBRyhuKSAoKChXT1JEKShuKSkgPDwgMTApCi0jZGVmaW5lIFdMQU5fU0VUX0ZDX1JFVFJZKG4pICAgICgoKFdPUkQpKG4pKSA8PCAxMSkKLSNkZWZpbmUgV0xBTl9TRVRfRkNfUFdSTUdUKG4pICAgKCgoV09SRCkobikpIDw8IDEyKQotI2RlZmluZSBXTEFOX1NFVF9GQ19NT1JFREFUQShuKSAoKChXT1JEKShuKSkgPDwgMTMpCi0jZGVmaW5lIFdMQU5fU0VUX0ZDX0lTV0VQKG4pICAgICgoKFdPUkQpKG4pKSA8PCAxNCkKLSNkZWZpbmUgV0xBTl9TRVRfRkNfT1JERVIobikgICAgKCgoV09SRCkobikpIDw8IDE1KQorI2RlZmluZSBXTEFOX1NFVF9GQ19QUlZFUihuKSAgICAoKHVuc2lnbmVkIHNob3J0KShuKSkKKyNkZWZpbmUgV0xBTl9TRVRfRkNfRlRZUEUobikgICAgKCgodW5zaWduZWQgc2hvcnQpKG4pKSA8PCAyKQorI2RlZmluZSBXTEFOX1NFVF9GQ19GU1RZUEUobikgICAoKCh1bnNpZ25lZCBzaG9ydCkobikpIDw8IDQpCisjZGVmaW5lIFdMQU5fU0VUX0ZDX1RPRFMobikgICAgICgoKHVuc2lnbmVkIHNob3J0KShuKSkgPDwgOCkKKyNkZWZpbmUgV0xBTl9TRVRfRkNfRlJPTURTKG4pICAgKCgodW5zaWduZWQgc2hvcnQpKG4pKSA8PCA5KQorI2RlZmluZSBXTEFOX1NFVF9GQ19NT1JFRlJBRyhuKSAoKCh1bnNpZ25lZCBzaG9ydCkobikpIDw8IDEwKQorI2RlZmluZSBXTEFOX1NFVF9GQ19SRVRSWShuKSAgICAoKCh1bnNpZ25lZCBzaG9ydCkobikpIDw8IDExKQorI2RlZmluZSBXTEFOX1NFVF9GQ19QV1JNR1QobikgICAoKCh1bnNpZ25lZCBzaG9ydCkobikpIDw8IDEyKQorI2RlZmluZSBXTEFOX1NFVF9GQ19NT1JFREFUQShuKSAoKCh1bnNpZ25lZCBzaG9ydCkobikpIDw8IDEzKQorI2RlZmluZSBXTEFOX1NFVF9GQ19JU1dFUChuKSAgICAoKCh1bnNpZ25lZCBzaG9ydCkobikpIDw8IDE0KQorI2RlZmluZSBXTEFOX1NFVF9GQ19PUkRFUihuKSAgICAoKCh1bnNpZ25lZCBzaG9ydCkobikpIDw8IDE1KQogCi0jZGVmaW5lIFdMQU5fU0VUX1NFUV9GUkdOVU0obikgKChXT1JEKShuKSkKLSNkZWZpbmUgV0xBTl9TRVRfU0VRX1NFUU5VTShuKSAoKChXT1JEKShuKSkgPDwgNCkKKyNkZWZpbmUgV0xBTl9TRVRfU0VRX0ZSR05VTShuKSAoKHVuc2lnbmVkIHNob3J0KShuKSkKKyNkZWZpbmUgV0xBTl9TRVRfU0VRX1NFUU5VTShuKSAoKCh1bnNpZ25lZCBzaG9ydCkobikpIDw8IDQpCiAKIC8qIEVSUCBGaWVsZCBiaXQgKi8KIApAQCAtMjgyLDUwICsyODIsNTAgQEAKICNkZWZpbmUgV0xBTl9NR01UX0dFVF9USU1fT0ZGU0VUKGIpICAgICAoKChiKSAmIH5CSVQwKSA+PiAxKQogCiAvKiAzLUFkZHIgJiA0LUFkZHIgKi8KLSNkZWZpbmUgV0xBTl9IRFJfQTNfREFUQV9QVFIocCkgKCgoUEJZVEUpKHApKSArIFdMQU5fSERSX0FERFIzX0xFTikKLSNkZWZpbmUgV0xBTl9IRFJfQTRfREFUQV9QVFIocCkgKCgoUEJZVEUpKHApKSArIFdMQU5fSERSX0FERFI0X0xFTikKKyNkZWZpbmUgV0xBTl9IRFJfQTNfREFUQV9QVFIocCkgKCgodW5zaWduZWQgY2hhciAqKShwKSkgKyBXTEFOX0hEUl9BRERSM19MRU4pCisjZGVmaW5lIFdMQU5fSERSX0E0X0RBVEFfUFRSKHApICgoKHVuc2lnbmVkIGNoYXIgKikocCkpICsgV0xBTl9IRFJfQUREUjRfTEVOKQogCiAvKiBJRUVFIEFERFIgKi8KICNkZWZpbmUgSUVFRV9BRERSX1VOSVZFUlNBTCAgICAgICAgIDB4MDIKICNkZWZpbmUgSUVFRV9BRERSX0dST1VQICAgICAgICAgICAgIDB4MDEKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIEJZVEUgICAgICAgICAgICBhYnlBZGRyWzZdOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5QWRkcls2XTsKIH0gSUVFRV9BRERSLCAqUElFRUVfQUREUjsKIAogLyogODAyLjExIEhlYWRlciBGb3JtYXQgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl84MDIxMUhEUl9BMiB7CiAKLSAgICBXT1JEICAgIHdGcmFtZUN0bDsKLSAgICBXT1JEICAgIHdEdXJhdGlvbklEOwotICAgIEJZVEUgICAgYWJ5QWRkcjFbV0xBTl9BRERSX0xFTl07Ci0gICAgQllURSAgICBhYnlBZGRyMltXTEFOX0FERFJfTEVOXTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RnJhbWVDdGw7CisgICAgdW5zaWduZWQgc2hvcnQgd0R1cmF0aW9uSUQ7CisgICAgdW5zaWduZWQgY2hhciBhYnlBZGRyMVtXTEFOX0FERFJfTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUFkZHIyW1dMQU5fQUREUl9MRU5dOwogCiB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFdMQU5fODAyMTFIRFJfQTIsICpQV0xBTl84MDIxMUhEUl9BMjsKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl84MDIxMUhEUl9BMyB7CiAKLSAgICBXT1JEICAgIHdGcmFtZUN0bDsKLSAgICBXT1JEICAgIHdEdXJhdGlvbklEOwotICAgIEJZVEUgICAgYWJ5QWRkcjFbV0xBTl9BRERSX0xFTl07Ci0gICAgQllURSAgICBhYnlBZGRyMltXTEFOX0FERFJfTEVOXTsKLSAgICBCWVRFICAgIGFieUFkZHIzW1dMQU5fQUREUl9MRU5dOwotICAgIFdPUkQgICAgd1NlcUN0bDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RnJhbWVDdGw7CisgICAgdW5zaWduZWQgc2hvcnQgd0R1cmF0aW9uSUQ7CisgICAgdW5zaWduZWQgY2hhciBhYnlBZGRyMVtXTEFOX0FERFJfTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUFkZHIyW1dMQU5fQUREUl9MRU5dOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5QWRkcjNbV0xBTl9BRERSX0xFTl07CisgICAgdW5zaWduZWQgc2hvcnQgd1NlcUN0bDsKIAogfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFdMQU5fODAyMTFIRFJfQTMsICpQV0xBTl84MDIxMUhEUl9BMzsKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl84MDIxMUhEUl9BNCB7CiAKLSAgICBXT1JEICAgIHdGcmFtZUN0bDsKLSAgICBXT1JEICAgIHdEdXJhdGlvbklEOwotICAgIEJZVEUgICAgYWJ5QWRkcjFbV0xBTl9BRERSX0xFTl07Ci0gICAgQllURSAgICBhYnlBZGRyMltXTEFOX0FERFJfTEVOXTsKLSAgICBCWVRFICAgIGFieUFkZHIzW1dMQU5fQUREUl9MRU5dOwotICAgIFdPUkQgICAgd1NlcUN0bDsKLSAgICBCWVRFICAgIGFieUFkZHI0W1dMQU5fQUREUl9MRU5dOworICAgIHVuc2lnbmVkIHNob3J0IHdGcmFtZUN0bDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RHVyYXRpb25JRDsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUFkZHIxW1dMQU5fQUREUl9MRU5dOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5QWRkcjJbV0xBTl9BRERSX0xFTl07CisgICAgdW5zaWduZWQgY2hhciBhYnlBZGRyM1tXTEFOX0FERFJfTEVOXTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3U2VxQ3RsOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5QWRkcjRbV0xBTl9BRERSX0xFTl07CiAKIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogV0xBTl84MDIxMUhEUl9BNCwgKlBXTEFOXzgwMjExSERSX0E0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS84MDIxMW1nci5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS84MDIxMW1nci5jCmluZGV4IDM4Njk3YzguLjFlZDBmMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvODAyMTFtZ3IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1LzgwMjExbWdyLmMKQEAgLTk5LDkgKzk5LDkgQEAKICAgICAvLyBGaXhlZCBGaWVsZHMKICAgICBwRnJhbWUtPnBxd1RpbWVzdGFtcCA9IChQUVdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0JFQUNPTl9PRkZfVFMpOwotICAgIHBGcmFtZS0+cHdCZWFjb25JbnRlcnZhbCA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCisgICAgcEZyYW1lLT5wd0JlYWNvbkludGVydmFsID0gKHVuc2lnbmVkIHNob3J0ICopKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0JFQUNPTl9PRkZfQkNOX0lOVCk7Ci0gICAgcEZyYW1lLT5wd0NhcEluZm8gPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQorICAgIHBGcmFtZS0+cHdDYXBJbmZvID0gKHVuc2lnbmVkIHNob3J0ICopKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQkVBQ09OX09GRl9DQVBJTkZPKTsKIAogICAgIHBGcmFtZS0+bGVuID0gV0xBTl9IRFJfQUREUjNfTEVOICsgV0xBTl9CRUFDT05fT0ZGX1NTSUQ7CkBAIC0xMzMsMTUgKzEzMywxNSBAQAogICAgIC8vIEZpeGVkIEZpZWxkcwogICAgIHBGcmFtZS0+cHF3VGltZXN0YW1wID0gKFBRV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQkVBQ09OX09GRl9UUyk7Ci0gICAgcEZyYW1lLT5wd0JlYWNvbkludGVydmFsID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3QmVhY29uSW50ZXJ2YWwgPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQkVBQ09OX09GRl9CQ05fSU5UKTsKLSAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCisgICAgcEZyYW1lLT5wd0NhcEluZm8gPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9CRUFDT05fT0ZGX0NBUElORk8pOwogCiAgICAgLy8gSW5mb3JtYXRpb24gZWxlbWVudHMKLSAgICBwSXRlbSA9IChQV0xBTl9JRSkoKFBCWVRFKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkpCisgICAgcEl0ZW0gPSAoUFdMQU5fSUUpKCh1bnNpZ25lZCBjaGFyICopKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKSkKICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0JFQUNPTl9PRkZfU1NJRCk7Ci0gICAgd2hpbGUoICgoUEJZVEUpcEl0ZW0pIDwgKHBGcmFtZS0+cEJ1ZiArIHBGcmFtZS0+bGVuKSApeworICAgIHdoaWxlKCAoKHVuc2lnbmVkIGNoYXIgKilwSXRlbSkgPCAocEZyYW1lLT5wQnVmICsgcEZyYW1lLT5sZW4pICl7CiAKICAgICAgICAgc3dpdGNoIChwSXRlbS0+YnlFbGVtZW50SUQpIHsKICAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfU1NJRDoKQEAgLTE3OSw3ICsxNzksNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBXTEFOX0VJRF9SU05fV1BBOgogICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBSU05XUEEgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoV1BBYl9Jc19SU04oKFBXTEFOX0lFX1JTTl9FWFQpcEl0ZW0pID09IFRSVUUpCisgICAgICAgICAgICAgICAgICAgIGlmIChXUEFiX0lzX1JTTigoUFdMQU5fSUVfUlNOX0VYVClwSXRlbSkgPT0gdHJ1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cFJTTldQQSA9IChQV0xBTl9JRV9SU05fRVhUKXBJdGVtOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIyMyw3ICsyMjMsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIH0KLSAgICAgICAgcEl0ZW0gPSAoUFdMQU5fSUUpKCgoUEJZVEUpcEl0ZW0pICsgMiArIHBJdGVtLT5sZW4pOworICAgICAgICBwSXRlbSA9IChQV0xBTl9JRSkoKCh1bnNpZ25lZCBjaGFyICopcEl0ZW0pICsgMiArIHBJdGVtLT5sZW4pOwogICAgIH0KIAogICAgIHJldHVybjsKQEAgLTI5Niw3ICsyOTYsNyBAQAogCiAKICAgICAvLyBGaXhlZCBGaWVsZHMKLSAgICBwRnJhbWUtPnB3UmVhc29uID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3UmVhc29uID0gKHVuc2lnbmVkIHNob3J0ICopKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9ESVNBU1NPQ19PRkZfUkVBU09OKTsKICAgICBwRnJhbWUtPmxlbiA9IFdMQU5fSERSX0FERFIzX0xFTiArIFdMQU5fRElTQVNTT0NfT0ZGX1JFQVNPTiArIHNpemVvZigqKHBGcmFtZS0+cHdSZWFzb24pKTsKIApAQCAtMzIzLDcgKzMyMyw3IEBACiAgICAgcEZyYW1lLT5wSGRyID0gKFBVV0xBTl84MDIxMUhEUilwRnJhbWUtPnBCdWY7CiAKICAgICAvLyBGaXhlZCBGaWVsZHMKLSAgICBwRnJhbWUtPnB3UmVhc29uID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3UmVhc29uID0gKHVuc2lnbmVkIHNob3J0ICopKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9ESVNBU1NPQ19PRkZfUkVBU09OKTsKIAogICAgIHJldHVybjsKQEAgLTM0OCw5ICszNDgsOSBAQAogewogICAgIHBGcmFtZS0+cEhkciA9IChQVVdMQU5fODAyMTFIRFIpcEZyYW1lLT5wQnVmOwogICAgIC8vIEZpeGVkIEZpZWxkcwotICAgIHBGcmFtZS0+cHdDYXBJbmZvID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9ICh1bnNpZ25lZCBzaG9ydCAqKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FTU09DUkVRX09GRl9DQVBfSU5GTyk7Ci0gICAgcEZyYW1lLT5wd0xpc3RlbkludGVydmFsID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3TGlzdGVuSW50ZXJ2YWwgPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQVNTT0NSRVFfT0ZGX0xJU1RFTl9JTlQpOwogICAgIHBGcmFtZS0+bGVuID0gV0xBTl9IRFJfQUREUjNfTEVOICsgV0xBTl9BU1NPQ1JFUV9PRkZfTElTVEVOX0lOVCArIHNpemVvZigqKHBGcmFtZS0+cHdMaXN0ZW5JbnRlcnZhbCkpOwogICAgIHJldHVybjsKQEAgLTM3NywxNiArMzc3LDE2IEBACiAKICAgICBwRnJhbWUtPnBIZHIgPSAoUFVXTEFOXzgwMjExSERSKXBGcmFtZS0+cEJ1ZjsKICAgICAvLyBGaXhlZCBGaWVsZHMKLSAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCisgICAgcEZyYW1lLT5wd0NhcEluZm8gPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9BU1NPQ1JFUV9PRkZfQ0FQX0lORk8pOwotICAgIHBGcmFtZS0+cHdMaXN0ZW5JbnRlcnZhbCA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCisgICAgcEZyYW1lLT5wd0xpc3RlbkludGVydmFsID0gKHVuc2lnbmVkIHNob3J0ICopKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQVNTT0NSRVFfT0ZGX0xJU1RFTl9JTlQpOwogCiAgICAgLy8gSW5mb3JtYXRpb24gZWxlbWVudHMKICAgICBwSXRlbSA9IChQV0xBTl9JRSkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FTU09DUkVRX09GRl9TU0lEKTsKIAotICAgIHdoaWxlICgoKFBCWVRFKXBJdGVtKSA8IChwRnJhbWUtPnBCdWYgKyBwRnJhbWUtPmxlbikpIHsKKyAgICB3aGlsZSAoKCh1bnNpZ25lZCBjaGFyICopcEl0ZW0pIDwgKHBGcmFtZS0+cEJ1ZiArIHBGcmFtZS0+bGVuKSkgewogICAgICAgICBzd2l0Y2ggKHBJdGVtLT5ieUVsZW1lbnRJRCl7CiAgICAgICAgICAgICBjYXNlIFdMQU5fRUlEX1NTSUQ6CiAgICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFNTSUQgPT0gTlVMTCkKQEAgLTQwNCw3ICs0MDQsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBXTEFOX0VJRF9SU05fV1BBOgogICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBSU05XUEEgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoV1BBYl9Jc19SU04oKFBXTEFOX0lFX1JTTl9FWFQpcEl0ZW0pID09IFRSVUUpCisgICAgICAgICAgICAgICAgICAgIGlmIChXUEFiX0lzX1JTTigoUFdMQU5fSUVfUlNOX0VYVClwSXRlbSkgPT0gdHJ1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cFJTTldQQSA9IChQV0xBTl9JRV9SU05fRVhUKXBJdGVtOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQxOCw3ICs0MTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcEl0ZW0tPmJ5RWxlbWVudElEKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBwSXRlbSA9IChQV0xBTl9JRSkoKChQQllURSlwSXRlbSkgKyAyICsgcEl0ZW0tPmxlbik7CisgICAgICAgIHBJdGVtID0gKFBXTEFOX0lFKSgoKHVuc2lnbmVkIGNoYXIgKilwSXRlbSkgKyAyICsgcEl0ZW0tPmxlbik7CiAgICAgfQogICAgIHJldHVybjsKIH0KQEAgLTQ0MiwxMSArNDQyLDExIEBACiAgICAgcEZyYW1lLT5wSGRyID0gKFBVV0xBTl84MDIxMUhEUilwRnJhbWUtPnBCdWY7CiAKICAgICAvLyBGaXhlZCBGaWVsZHMKLSAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCisgICAgcEZyYW1lLT5wd0NhcEluZm8gPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9BU1NPQ1JFU1BfT0ZGX0NBUF9JTkZPKTsKLSAgICBwRnJhbWUtPnB3U3RhdHVzID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3U3RhdHVzID0gKHVuc2lnbmVkIHNob3J0ICopKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9BU1NPQ1JFU1BfT0ZGX1NUQVRVUyk7Ci0gICAgcEZyYW1lLT5wd0FpZCA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCisgICAgcEZyYW1lLT5wd0FpZCA9ICh1bnNpZ25lZCBzaG9ydCAqKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQVNTT0NSRVNQX09GRl9BSUQpOwogICAgIHBGcmFtZS0+bGVuID0gV0xBTl9IRFJfQUREUjNfTEVOICsgV0xBTl9BU1NPQ1JFU1BfT0ZGX0FJRAogICAgICAgICAgICAgICAgICAgKyBzaXplb2YoKihwRnJhbWUtPnB3QWlkKSk7CkBAIC00NzYsMTEgKzQ3NiwxMSBAQAogICAgIHBGcmFtZS0+cEhkciA9IChQVVdMQU5fODAyMTFIRFIpcEZyYW1lLT5wQnVmOwogCiAgICAgLy8gRml4ZWQgRmllbGRzCi0gICAgcEZyYW1lLT5wd0NhcEluZm8gPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQorICAgIHBGcmFtZS0+cHdDYXBJbmZvID0gKHVuc2lnbmVkIHNob3J0ICopKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQVNTT0NSRVNQX09GRl9DQVBfSU5GTyk7Ci0gICAgcEZyYW1lLT5wd1N0YXR1cyA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCisgICAgcEZyYW1lLT5wd1N0YXR1cyA9ICh1bnNpZ25lZCBzaG9ydCAqKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQVNTT0NSRVNQX09GRl9TVEFUVVMpOwotICAgIHBGcmFtZS0+cHdBaWQgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQorICAgIHBGcmFtZS0+cHdBaWQgPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FTU09DUkVTUF9PRkZfQUlEKTsKIAogICAgIC8vIEluZm9ybWF0aW9uIGVsZW1lbnRzCkBAIC00ODgsOSArNDg4LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQVNTT0NSRVNQX09GRl9TVVBQX1JBVEVTKTsKIAogICAgIHBJdGVtID0gKFBXTEFOX0lFKShwRnJhbWUtPnBTdXBwUmF0ZXMpOwotICAgIHBJdGVtID0gKFBXTEFOX0lFKSgoKFBCWVRFKXBJdGVtKSArIDIgKyBwSXRlbS0+bGVuKTsKKyAgICBwSXRlbSA9IChQV0xBTl9JRSkoKCh1bnNpZ25lZCBjaGFyICopcEl0ZW0pICsgMiArIHBJdGVtLT5sZW4pOwogCi0gICAgaWYgKCgoKFBCWVRFKXBJdGVtKSA8IChwRnJhbWUtPnBCdWYgKyBwRnJhbWUtPmxlbikpICYmIChwSXRlbS0+YnlFbGVtZW50SUQgPT0gV0xBTl9FSURfRVhUU1VQUF9SQVRFUykpIHsKKyAgICBpZiAoKCgodW5zaWduZWQgY2hhciAqKXBJdGVtKSA8IChwRnJhbWUtPnBCdWYgKyBwRnJhbWUtPmxlbikpICYmCisJCSAgICAocEl0ZW0tPmJ5RWxlbWVudElEID09IFdMQU5fRUlEX0VYVFNVUFBfUkFURVMpKSB7CiAgICAgICAgIHBGcmFtZS0+cEV4dFN1cHBSYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKXBJdGVtOwogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJwRnJhbWUtPnBFeHRTdXBwUmF0ZXM9WyVwXS5cbiIsIHBJdGVtKTsKICAgICB9CkBAIC01MjAsOSArNTIxLDkgQEAKICAgICBwRnJhbWUtPnBIZHIgPSAoUFVXTEFOXzgwMjExSERSKXBGcmFtZS0+cEJ1ZjsKIAogICAgIC8vIEZpeGVkIEZpZWxkcwotICAgIHBGcmFtZS0+cHdDYXBJbmZvID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9ICh1bnNpZ25lZCBzaG9ydCAqKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX1JFQVNTT0NSRVFfT0ZGX0NBUF9JTkZPKTsKLSAgICBwRnJhbWUtPnB3TGlzdGVuSW50ZXJ2YWwgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQorICAgIHBGcmFtZS0+cHdMaXN0ZW5JbnRlcnZhbCA9ICh1bnNpZ25lZCBzaG9ydCAqKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX1JFQVNTT0NSRVFfT0ZGX0xJU1RFTl9JTlQpOwogICAgIHBGcmFtZS0+cEFkZHJDdXJyQVAgPSAoUElFRUVfQUREUikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fUkVBU1NPQ1JFUV9PRkZfQ1VSUl9BUCk7CkBAIC01NTMsOSArNTU0LDkgQEAKICAgICBwRnJhbWUtPnBIZHIgPSAoUFVXTEFOXzgwMjExSERSKXBGcmFtZS0+cEJ1ZjsKIAogICAgIC8vIEZpeGVkIEZpZWxkcwotICAgIHBGcmFtZS0+cHdDYXBJbmZvID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9ICh1bnNpZ25lZCBzaG9ydCAqKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX1JFQVNTT0NSRVFfT0ZGX0NBUF9JTkZPKTsKLSAgICBwRnJhbWUtPnB3TGlzdGVuSW50ZXJ2YWwgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQorICAgIHBGcmFtZS0+cHdMaXN0ZW5JbnRlcnZhbCA9ICh1bnNpZ25lZCBzaG9ydCAqKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX1JFQVNTT0NSRVFfT0ZGX0xJU1RFTl9JTlQpOwogICAgIHBGcmFtZS0+cEFkZHJDdXJyQVAgPSAoUElFRUVfQUREUikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fUkVBU1NPQ1JFUV9PRkZfQ1VSUl9BUCk7CkBAIC01NjQsNyArNTY1LDcgQEAKICAgICBwSXRlbSA9IChQV0xBTl9JRSkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9SRUFTU09DUkVRX09GRl9TU0lEKTsKIAotICAgIHdoaWxlKCgoUEJZVEUpcEl0ZW0pIDwgKHBGcmFtZS0+cEJ1ZiArIHBGcmFtZS0+bGVuKSkgeworICAgIHdoaWxlKCgodW5zaWduZWQgY2hhciAqKXBJdGVtKSA8IChwRnJhbWUtPnBCdWYgKyBwRnJhbWUtPmxlbikpIHsKIAogICAgICAgICBzd2l0Y2ggKHBJdGVtLT5ieUVsZW1lbnRJRCl7CiAgICAgICAgICAgICBjYXNlIFdMQU5fRUlEX1NTSUQ6CkBAIC01ODMsNyArNTg0LDcgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfUlNOX1dQQToKICAgICAgICAgICAgICAgICBpZiAocEZyYW1lLT5wUlNOV1BBID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFdQQWJfSXNfUlNOKChQV0xBTl9JRV9SU05fRVhUKXBJdGVtKSA9PSBUUlVFKQorICAgICAgICAgICAgICAgICAgICBpZiAoV1BBYl9Jc19SU04oKFBXTEFOX0lFX1JTTl9FWFQpcEl0ZW0pID09IHRydWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBwRnJhbWUtPnBSU05XUEEgPSAoUFdMQU5fSUVfUlNOX0VYVClwSXRlbTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC01OTcsNyArNTk4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwSXRlbS0+YnlFbGVtZW50SUQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHBJdGVtID0gKFBXTEFOX0lFKSgoKFBCWVRFKXBJdGVtKSArIDIgKyBwSXRlbS0+bGVuKTsKKyAgICAgICAgcEl0ZW0gPSAoUFdMQU5fSUUpKCgodW5zaWduZWQgY2hhciAqKXBJdGVtKSArIDIgKyBwSXRlbS0+bGVuKTsKICAgICB9CiAgICAgcmV0dXJuOwogfQpAQCAtNjQ5LDcgKzY1MCw3IEBACiAgICAgLy8gSW5mb3JtYXRpb24gZWxlbWVudHMKICAgICBwSXRlbSA9IChQV0xBTl9JRSkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpKTsKIAotICAgIHdoaWxlKCAoKFBCWVRFKXBJdGVtKSA8IChwRnJhbWUtPnBCdWYgKyBwRnJhbWUtPmxlbikgKSB7CisgICAgd2hpbGUoICgodW5zaWduZWQgY2hhciAqKXBJdGVtKSA8IChwRnJhbWUtPnBCdWYgKyBwRnJhbWUtPmxlbikgKSB7CiAKICAgICAgICAgc3dpdGNoIChwSXRlbS0+YnlFbGVtZW50SUQpIHsKICAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfU1NJRDoKQEAgLTY3Miw3ICs2NzMsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgcEl0ZW0gPSAoUFdMQU5fSUUpKCgoUEJZVEUpcEl0ZW0pICsgMiArICBwSXRlbS0+bGVuKTsKKyAgICAgICAgcEl0ZW0gPSAoUFdMQU5fSUUpKCgodW5zaWduZWQgY2hhciAqKXBJdGVtKSArIDIgKyAgcEl0ZW0tPmxlbik7CiAgICAgfQogICAgIHJldHVybjsKIH0KQEAgLTcwMCw5ICs3MDEsOSBAQAogICAgIC8vIEZpeGVkIEZpZWxkcwogICAgIHBGcmFtZS0+cHF3VGltZXN0YW1wID0gKFBRV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fUFJPQkVSRVNQX09GRl9UUyk7Ci0gICAgcEZyYW1lLT5wd0JlYWNvbkludGVydmFsID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3QmVhY29uSW50ZXJ2YWwgPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fUFJPQkVSRVNQX09GRl9CQ05fSU5UKTsKLSAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCisgICAgcEZyYW1lLT5wd0NhcEluZm8gPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9QUk9CRVJFU1BfT0ZGX0NBUF9JTkZPKTsKIAogICAgIHBGcmFtZS0+bGVuID0gV0xBTl9IRFJfQUREUjNfTEVOICsgV0xBTl9QUk9CRVJFU1BfT0ZGX0NBUF9JTkZPICsKQEAgLTczNywxNiArNzM4LDE2IEBACiAgICAgLy8gRml4ZWQgRmllbGRzCiAgICAgcEZyYW1lLT5wcXdUaW1lc3RhbXAgPSAoUFFXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9QUk9CRVJFU1BfT0ZGX1RTKTsKLSAgICBwRnJhbWUtPnB3QmVhY29uSW50ZXJ2YWwgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQorICAgIHBGcmFtZS0+cHdCZWFjb25JbnRlcnZhbCA9ICh1bnNpZ25lZCBzaG9ydCAqKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9QUk9CRVJFU1BfT0ZGX0JDTl9JTlQpOwotICAgIHBGcmFtZS0+cHdDYXBJbmZvID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9ICh1bnNpZ25lZCBzaG9ydCAqKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX1BST0JFUkVTUF9PRkZfQ0FQX0lORk8pOwogCiAgICAgLy8gSW5mb3JtYXRpb24gZWxlbWVudHMKICAgICBwSXRlbSA9IChQV0xBTl9JRSkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9QUk9CRVJFU1BfT0ZGX1NTSUQpOwogCi0gICAgd2hpbGUoICgoUEJZVEUpcEl0ZW0pIDwgKHBGcmFtZS0+cEJ1ZiArIHBGcmFtZS0+bGVuKSApIHsKKyAgICB3aGlsZSggKCh1bnNpZ25lZCBjaGFyICopcEl0ZW0pIDwgKHBGcmFtZS0+cEJ1ZiArIHBGcmFtZS0+bGVuKSApIHsKICAgICAgICAgc3dpdGNoIChwSXRlbS0+YnlFbGVtZW50SUQpIHsKICAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfU1NJRDoKICAgICAgICAgICAgICAgICBpZiAocEZyYW1lLT5wU1NJRCA9PSBOVUxMKQpAQCAtNzc4LDcgKzc3OSw3IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFdMQU5fRUlEX1JTTl9XUEE6CiAgICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFJTTldQQSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChXUEFiX0lzX1JTTigoUFdMQU5fSUVfUlNOX0VYVClwSXRlbSkgPT0gVFJVRSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKFdQQWJfSXNfUlNOKChQV0xBTl9JRV9SU05fRVhUKXBJdGVtKSA9PSB0cnVlKQogICAgICAgICAgICAgICAgICAgICAgICAgcEZyYW1lLT5wUlNOV1BBID0gKFBXTEFOX0lFX1JTTl9FWFQpcEl0ZW07CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtODIxLDcgKzgyMiw3IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBwSXRlbSA9IChQV0xBTl9JRSkoKChQQllURSlwSXRlbSkgKyAyICsgIHBJdGVtLT5sZW4pOworICAgICAgICBwSXRlbSA9IChQV0xBTl9JRSkoKCh1bnNpZ25lZCBjaGFyICopcEl0ZW0pICsgMiArICBwSXRlbS0+bGVuKTsKICAgICB9CiAgICAgcmV0dXJuOwogfQpAQCAtODQ2LDExICs4NDcsMTEgQEAKICAgICBwRnJhbWUtPnBIZHIgPSAoUFVXTEFOXzgwMjExSERSKXBGcmFtZS0+cEJ1ZjsKIAogICAgIC8vIEZpeGVkIEZpZWxkcwotICAgIHBGcmFtZS0+cHdBdXRoQWxnb3JpdGhtID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3QXV0aEFsZ29yaXRobSA9ICh1bnNpZ25lZCBzaG9ydCAqKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FVVEhFTl9PRkZfQVVUSF9BTEcpOwotICAgIHBGcmFtZS0+cHdBdXRoU2VxdWVuY2UgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQorICAgIHBGcmFtZS0+cHdBdXRoU2VxdWVuY2UgPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FVVEhFTl9PRkZfQVVUSF9TRVEpOwotICAgIHBGcmFtZS0+cHdTdGF0dXMgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQorICAgIHBGcmFtZS0+cHdTdGF0dXMgPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FVVEhFTl9PRkZfU1RBVFVTKTsKICAgICBwRnJhbWUtPmxlbiA9IFdMQU5fSERSX0FERFIzX0xFTiArIFdMQU5fQVVUSEVOX09GRl9TVEFUVVMgKyBzaXplb2YoKihwRnJhbWUtPnB3U3RhdHVzKSk7CiAKQEAgLTg3OSwxOCArODgwLDE4IEBACiAgICAgcEZyYW1lLT5wSGRyID0gKFBVV0xBTl84MDIxMUhEUilwRnJhbWUtPnBCdWY7CiAKICAgICAvLyBGaXhlZCBGaWVsZHMKLSAgICBwRnJhbWUtPnB3QXV0aEFsZ29yaXRobSA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCisgICAgcEZyYW1lLT5wd0F1dGhBbGdvcml0aG0gPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9BVVRIRU5fT0ZGX0FVVEhfQUxHKTsKLSAgICBwRnJhbWUtPnB3QXV0aFNlcXVlbmNlID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3QXV0aFNlcXVlbmNlID0gKHVuc2lnbmVkIHNob3J0ICopKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9BVVRIRU5fT0ZGX0FVVEhfU0VRKTsKLSAgICBwRnJhbWUtPnB3U3RhdHVzID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3U3RhdHVzID0gKHVuc2lnbmVkIHNob3J0ICopKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9BVVRIRU5fT0ZGX1NUQVRVUyk7CiAKICAgICAvLyBJbmZvcm1hdGlvbiBlbGVtZW50cwogICAgIHBJdGVtID0gKFBXTEFOX0lFKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FVVEhFTl9PRkZfQ0hBTExFTkdFKTsKIAotICAgIGlmICgoKChQQllURSlwSXRlbSkgPCAocEZyYW1lLT5wQnVmICsgcEZyYW1lLT5sZW4pKSAmJiAocEl0ZW0tPmJ5RWxlbWVudElEID09IFdMQU5fRUlEX0NIQUxMRU5HRSkpIHsKKyAgICBpZiAoKCgodW5zaWduZWQgY2hhciAqKXBJdGVtKSA8IChwRnJhbWUtPnBCdWYgKyBwRnJhbWUtPmxlbikpICYmIChwSXRlbS0+YnlFbGVtZW50SUQgPT0gV0xBTl9FSURfQ0hBTExFTkdFKSkgewogICAgICAgICBwRnJhbWUtPnBDaGFsbGVuZ2UgPSAoUFdMQU5fSUVfQ0hBTExFTkdFKXBJdGVtOwogICAgIH0KIApAQCAtOTE3LDcgKzkxOCw3IEBACiAgICAgcEZyYW1lLT5wSGRyID0gKFBVV0xBTl84MDIxMUhEUilwRnJhbWUtPnBCdWY7CiAKICAgICAvLyBGaXhlZCBGaWVsZHMKLSAgICBwRnJhbWUtPnB3UmVhc29uID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3UmVhc29uID0gKHVuc2lnbmVkIHNob3J0ICopKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9ERUFVVEhFTl9PRkZfUkVBU09OKTsKICAgICBwRnJhbWUtPmxlbiA9IFdMQU5fSERSX0FERFIzX0xFTiArIFdMQU5fREVBVVRIRU5fT0ZGX1JFQVNPTiArIHNpemVvZigqKHBGcmFtZS0+cHdSZWFzb24pKTsKIApAQCAtOTQ0LDcgKzk0NSw3IEBACiAgICAgcEZyYW1lLT5wSGRyID0gKFBVV0xBTl84MDIxMUhEUilwRnJhbWUtPnBCdWY7CiAKICAgICAvLyBGaXhlZCBGaWVsZHMKLSAgICBwRnJhbWUtPnB3UmVhc29uID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3UmVhc29uID0gKHVuc2lnbmVkIHNob3J0ICopKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9ERUFVVEhFTl9PRkZfUkVBU09OKTsKIAogICAgIHJldHVybjsKQEAgLTk3MCwxMSArOTcxLDExIEBACiAgICAgcEZyYW1lLT5wSGRyID0gKFBVV0xBTl84MDIxMUhEUilwRnJhbWUtPnBCdWY7CiAKICAgICAvLyBGaXhlZCBGaWVsZHMKLSAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCisgICAgcEZyYW1lLT5wd0NhcEluZm8gPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9SRUFTU09DUkVTUF9PRkZfQ0FQX0lORk8pOwotICAgIHBGcmFtZS0+cHdTdGF0dXMgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQorICAgIHBGcmFtZS0+cHdTdGF0dXMgPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX1JFQVNTT0NSRVNQX09GRl9TVEFUVVMpOwotICAgIHBGcmFtZS0+cHdBaWQgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQorICAgIHBGcmFtZS0+cHdBaWQgPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX1JFQVNTT0NSRVNQX09GRl9BSUQpOwogCiAgICAgcEZyYW1lLT5sZW4gPSBXTEFOX0hEUl9BRERSM19MRU4gKyBXTEFOX1JFQVNTT0NSRVNQX09GRl9BSUQgKyBzaXplb2YoKihwRnJhbWUtPnB3QWlkKSk7CkBAIC0xMDA1LDExICsxMDA2LDExIEBACiAgICAgcEZyYW1lLT5wSGRyID0gKFBVV0xBTl84MDIxMUhEUilwRnJhbWUtPnBCdWY7CiAKICAgICAvLyBGaXhlZCBGaWVsZHMKLSAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCisgICAgcEZyYW1lLT5wd0NhcEluZm8gPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9SRUFTU09DUkVTUF9PRkZfQ0FQX0lORk8pOwotICAgIHBGcmFtZS0+cHdTdGF0dXMgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQorICAgIHBGcmFtZS0+cHdTdGF0dXMgPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX1JFQVNTT0NSRVNQX09GRl9TVEFUVVMpOwotICAgIHBGcmFtZS0+cHdBaWQgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQorICAgIHBGcmFtZS0+cHdBaWQgPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX1JFQVNTT0NSRVNQX09GRl9BSUQpOwogCiAgICAgLy9JbmZvcm1hdGlvbiBlbGVtZW50cwpAQCAtMTAxNyw5ICsxMDE4LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9SRUFTU09DUkVTUF9PRkZfU1VQUF9SQVRFUyk7CiAKICAgICBwSXRlbSA9IChQV0xBTl9JRSkocEZyYW1lLT5wU3VwcFJhdGVzKTsKLSAgICBwSXRlbSA9IChQV0xBTl9JRSkoKChQQllURSlwSXRlbSkgKyAyICsgcEl0ZW0tPmxlbik7CisgICAgcEl0ZW0gPSAoUFdMQU5fSUUpKCgodW5zaWduZWQgY2hhciAqKXBJdGVtKSArIDIgKyBwSXRlbS0+bGVuKTsKIAotICAgIGlmICgoKChQQllURSlwSXRlbSkgPCAocEZyYW1lLT5wQnVmICsgcEZyYW1lLT5sZW4pKSAmJiAocEl0ZW0tPmJ5RWxlbWVudElEID09IFdMQU5fRUlEX0VYVFNVUFBfUkFURVMpKSB7CisgICAgaWYgKCgoKHVuc2lnbmVkIGNoYXIgKilwSXRlbSkgPCAocEZyYW1lLT5wQnVmICsgcEZyYW1lLT5sZW4pKSAmJgorCQkgICAgKHBJdGVtLT5ieUVsZW1lbnRJRCA9PSBXTEFOX0VJRF9FWFRTVVBQX1JBVEVTKSkgewogICAgICAgICBwRnJhbWUtPnBFeHRTdXBwUmF0ZXMgPSAoUFdMQU5fSUVfU1VQUF9SQVRFUylwSXRlbTsKICAgICB9CiAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS84MDIxMW1nci5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS84MDIxMW1nci5oCmluZGV4IDY1OGZlMTQuLjNiZGFiM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvODAyMTFtZ3IuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1LzgwMjExbWdyLmgKQEAgLTE5LDcgKzE5LDcgQEAKICAqCiAgKiBGaWxlOiA4MDIxMW1nci5oCiAgKgotICogUHVycG9zZTogODAyLjExIG1hbmFnbWVudCBmcmFtZXMgcHJlLWRlZmluZXMuCisgKiBQdXJwb3NlOiA4MDIuMTEgbWFuYWdlbWVudCBmcmFtZXMgcHJlLWRlZmluZXMuCiAgKgogICoKICAqIEF1dGhvcjogTHluZG9uIENoZW4KQEAgLTIzMCw4ICsyMzAsOCBAQAogCiAjcHJhZ21hIHBhY2soMSkKIHR5cGVkZWYgc3RydWN0IHRhZ1dMQU5fSUUgewotICAgIEJZVEUgICBieUVsZW1lbnRJRDsKLSAgICBCWVRFICAgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgYnlFbGVtZW50SUQ7CisgICAgdW5zaWduZWQgY2hhciBsZW47CiB9X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogV0xBTl9JRSwgKlBXTEFOX0lFOwogCkBAIC0yMzksOSArMjM5LDkgQEAKIC8vIFNlcnZpY2UgU2V0IElkZW50aXR5IChTU0lEKQogI3ByYWdtYSBwYWNrKDEpCiB0eXBlZGVmIHN0cnVjdCB0YWdXTEFOX0lFX1NTSUQgewotICAgIEJZVEUgICBieUVsZW1lbnRJRDsKLSAgICBCWVRFICAgbGVuOwotICAgIEJZVEUgICBhYnlTU0lEWzFdOworICAgIHVuc2lnbmVkIGNoYXIgYnlFbGVtZW50SUQ7CisgICAgdW5zaWduZWQgY2hhciBsZW47CisgICAgdW5zaWduZWQgY2hhciBhYnlTU0lEWzFdOwogfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFdMQU5fSUVfU1NJRCwgKlBXTEFOX0lFX1NTSUQ7CiAKQEAgLTI0OSw5ICsyNDksOSBAQAogLy8gU3VwcG9ydGVkIFJhdGVzCiAjcHJhZ21hIHBhY2soMSkKIHR5cGVkZWYgc3RydWN0IHRhZ1dMQU5fSUVfU1VQUF9SQVRFUyB7Ci0gICAgQllURSAgIGJ5RWxlbWVudElEOwotICAgIEJZVEUgICBsZW47Ci0gICAgQllURSAgIGFieVJhdGVzWzFdOworICAgIHVuc2lnbmVkIGNoYXIgYnlFbGVtZW50SUQ7CisgICAgdW5zaWduZWQgY2hhciBsZW47CisgICAgdW5zaWduZWQgY2hhciBhYnlSYXRlc1sxXTsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBXTEFOX0lFX1NVUFBfUkFURVMsICAqUFdMQU5fSUVfU1VQUF9SQVRFUzsKIApAQCAtMjYwLDIwICsyNjAsMjAgQEAKIC8vIEZIIFBhcmFtZXRlciBTZXQKICNwcmFnbWEgcGFjaygxKQogdHlwZWRlZiBzdHJ1Y3QgX1dMQU5fSUVfRkhfUEFSTVMgewotICAgIEJZVEUgICAgYnlFbGVtZW50SUQ7Ci0gICAgQllURSAgICBsZW47Ci0gICAgV09SRCAgICB3RHdlbGxUaW1lOwotICAgIEJZVEUgICAgYnlIb3BTZXQ7Ci0gICAgQllURSAgICBieUhvcFBhdHRlcm47Ci0gICAgQllURSAgICBieUhvcEluZGV4OworICAgIHVuc2lnbmVkIGNoYXIgYnlFbGVtZW50SUQ7CisgICAgdW5zaWduZWQgY2hhciBsZW47CisgICAgdW5zaWduZWQgc2hvcnQgd0R3ZWxsVGltZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5SG9wU2V0OworICAgIHVuc2lnbmVkIGNoYXIgYnlIb3BQYXR0ZXJuOworICAgIHVuc2lnbmVkIGNoYXIgYnlIb3BJbmRleDsKIH0gV0xBTl9JRV9GSF9QQVJNUywgICpQV0xBTl9JRV9GSF9QQVJNUzsKIAogLy8gRFMgUGFyYW1ldGVyIFNldAogI3ByYWdtYSBwYWNrKDEpCiB0eXBlZGVmIHN0cnVjdCB0YWdXTEFOX0lFX0RTX1BBUk1TIHsKLSAgICBCWVRFICAgYnlFbGVtZW50SUQ7Ci0gICAgQllURSAgIGxlbjsKLSAgICBCWVRFICAgYnlDdXJyQ2hhbm5lbDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RWxlbWVudElEOworICAgIHVuc2lnbmVkIGNoYXIgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgYnlDdXJyQ2hhbm5lbDsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBXTEFOX0lFX0RTX1BBUk1TLCAgKlBXTEFOX0lFX0RTX1BBUk1TOwogCkBAIC0yODEsMTIgKzI4MSwxMiBAQAogLy8gQ0YgUGFyYW1ldGVyIFNldAogI3ByYWdtYSBwYWNrKDEpCiB0eXBlZGVmIHN0cnVjdCB0YWdXTEFOX0lFX0NGX1BBUk1TIHsKLSAgICBCWVRFICAgYnlFbGVtZW50SUQ7Ci0gICAgQllURSAgIGxlbjsKLSAgICBCWVRFICAgYnlDRlBDb3VudDsKLSAgICBCWVRFICAgYnlDRlBQZXJpb2Q7Ci0gICAgV09SRCAgIHdDRlBNYXhEdXJhdGlvbjsKLSAgICBXT1JEICAgd0NGUER1clJlbWFpbmluZzsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RWxlbWVudElEOworICAgIHVuc2lnbmVkIGNoYXIgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgYnlDRlBDb3VudDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q0ZQUGVyaW9kOworICAgIHVuc2lnbmVkIHNob3J0IHdDRlBNYXhEdXJhdGlvbjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q0ZQRHVyUmVtYWluaW5nOwogfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFdMQU5fSUVfQ0ZfUEFSTVMsICAqUFdMQU5fSUVfQ0ZfUEFSTVM7CiAKQEAgLTI5NCwxMiArMjk0LDEyIEBACiAvLyBUSU0KICNwcmFnbWEgcGFjaygxKQogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl9JRV9USU0gewotICAgIEJZVEUgICBieUVsZW1lbnRJRDsKLSAgICBCWVRFICAgbGVuOwotICAgIEJZVEUgICBieURUSU1Db3VudDsKLSAgICBCWVRFICAgYnlEVElNUGVyaW9kOwotICAgIEJZVEUgICBieUJpdE1hcEN0bDsKLSAgICBCWVRFICAgYnlWaXJ0Qml0TWFwWzFdOworICAgIHVuc2lnbmVkIGNoYXIgYnlFbGVtZW50SUQ7CisgICAgdW5zaWduZWQgY2hhciBsZW47CisgICAgdW5zaWduZWQgY2hhciBieURUSU1Db3VudDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RFRJTVBlcmlvZDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Qml0TWFwQ3RsOworICAgIHVuc2lnbmVkIGNoYXIgYnlWaXJ0Qml0TWFwWzFdOwogfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFdMQU5fSUVfVElNLCAgKlBXTEFOX0lFX1RJTTsKIApAQCAtMzA3LDkgKzMwNyw5IEBACiAvLyBJQlNTIFBhcmFtZXRlciBTZXQKICNwcmFnbWEgcGFjaygxKQogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl9JRV9JQlNTX1BBUk1TIHsKLSAgICBCWVRFICAgYnlFbGVtZW50SUQ7Ci0gICAgQllURSAgIGxlbjsKLSAgICBXT1JEICAgd0FUSU1XaW5kb3c7CisgICAgdW5zaWduZWQgY2hhciBieUVsZW1lbnRJRDsKKyAgICB1bnNpZ25lZCBjaGFyIGxlbjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3QVRJTVdpbmRvdzsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBXTEFOX0lFX0lCU1NfUEFSTVMsICpQV0xBTl9JRV9JQlNTX1BBUk1TOwogCkBAIC0zMTcsODQgKzMxNyw4NCBAQAogLy8gQ2hhbGxlbmdlIFRleHQKICNwcmFnbWEgcGFjaygxKQogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl9JRV9DSEFMTEVOR0UgewotICAgIEJZVEUgICBieUVsZW1lbnRJRDsKLSAgICBCWVRFICAgbGVuOwotICAgIEJZVEUgICBhYnlDaGFsbGVuZ2VbMV07CisgICAgdW5zaWduZWQgY2hhciBieUVsZW1lbnRJRDsKKyAgICB1bnNpZ25lZCBjaGFyIGxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUNoYWxsZW5nZVsxXTsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBXTEFOX0lFX0NIQUxMRU5HRSwgICpQV0xBTl9JRV9DSEFMTEVOR0U7CiAKIAogI3ByYWdtYSBwYWNrKDEpCiB0eXBlZGVmIHN0cnVjdCB0YWdXTEFOX0lFX1JTTl9FWFQgewotICAgIEJZVEUgYnlFbGVtZW50SUQ7Ci0gICAgQllURSBsZW47Ci0gICAgQllURSBhYnlPVUlbNF07Ci0gICAgV09SRCB3VmVyc2lvbjsKLSAgICBCWVRFIGFieU11bHRpY2FzdFs0XTsKLSAgICBXT1JEIHdQS0NvdW50OworICAgIHVuc2lnbmVkIGNoYXIgYnlFbGVtZW50SUQ7CisgICAgdW5zaWduZWQgY2hhciBsZW47CisgICAgdW5zaWduZWQgY2hhciBhYnlPVUlbNF07CisgICAgdW5zaWduZWQgc2hvcnQgd1ZlcnNpb247CisgICAgdW5zaWduZWQgY2hhciBhYnlNdWx0aWNhc3RbNF07CisgICAgdW5zaWduZWQgc2hvcnQgd1BLQ291bnQ7CiAgICAgc3RydWN0IHsKLSAgICAgICAgQllURSBhYnlPVUlbNF07CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYWJ5T1VJWzRdOwogICAgIH0gUEtTTGlzdFsxXTsgLy8gdGhlIHJlc3QgaXMgdmFyaWFibGUgc28gbmVlZCB0bwogICAgIC8vIG92ZXJsYXkgaWVhdXRoIHN0cnVjdHVyZQogfSBXTEFOX0lFX1JTTl9FWFQsICpQV0xBTl9JRV9SU05fRVhUOwogCiAjcHJhZ21hIHBhY2soMSkKIHR5cGVkZWYgc3RydWN0IHRhZ1dMQU5fSUVfUlNOX0FVVEggewotICAgIFdPUkQgd0F1dGhDb3VudDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3QXV0aENvdW50OwogICAgIHN0cnVjdCB7Ci0gICAgICAgIEJZVEUgYWJ5T1VJWzRdOworICAgICAgICB1bnNpZ25lZCBjaGFyIGFieU9VSVs0XTsKICAgICB9IEF1dGhLU0xpc3RbMV07CiB9IFdMQU5fSUVfUlNOX0FVVEgsICpQV0xBTl9JRV9SU05fQVVUSDsKIAogLy8gUlNOIElkZW50aXR5CiAjcHJhZ21hIHBhY2soMSkKIHR5cGVkZWYgc3RydWN0IHRhZ1dMQU5fSUVfUlNOIHsKLSAgICBCWVRFICAgYnlFbGVtZW50SUQ7Ci0gICAgQllURSAgIGxlbjsKLSAgICBXT1JEICAgd1ZlcnNpb247Ci0gICAgQllURSAgIGFieVJTTltXTEFOX01JTl9BUlJBWV07CisgICAgdW5zaWduZWQgY2hhciBieUVsZW1lbnRJRDsKKyAgICB1bnNpZ25lZCBjaGFyIGxlbjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3VmVyc2lvbjsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVJTTltXTEFOX01JTl9BUlJBWV07CiB9IFdMQU5fSUVfUlNOLCAqUFdMQU5fSUVfUlNOOwogCiAKIC8vIEVSUAogI3ByYWdtYSBwYWNrKDEpCiB0eXBlZGVmIHN0cnVjdCB0YWdXTEFOX0lFX0VSUCB7Ci0gICAgQllURSAgIGJ5RWxlbWVudElEOwotICAgIEJZVEUgICBsZW47Ci0gICAgQllURSAgIGJ5Q29udGV4dDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RWxlbWVudElEOworICAgIHVuc2lnbmVkIGNoYXIgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgYnlDb250ZXh0OwogfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFdMQU5fSUVfRVJQLCAgKlBXTEFOX0lFX0VSUDsKIAogCiAjcHJhZ21hIHBhY2soMSkKIHR5cGVkZWYgc3RydWN0IF9NRUFTRVVSRV9SRVEgewotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlDaGFubmVsOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYWJ5U3RhcnRUaW1lWzhdOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYWJ5RHVyYXRpb25bMl07CisgICAgdW5zaWduZWQgY2hhciBieUNoYW5uZWw7CisgICAgdW5zaWduZWQgY2hhciBhYnlTdGFydFRpbWVbOF07CisgICAgdW5zaWduZWQgY2hhciBhYnlEdXJhdGlvblsyXTsKIH0gTUVBU0VVUkVfUkVRLCAqUE1FQVNFVVJFX1JFUSwKICAgTUVBU0VVUkVfUkVRX0JBU0lDLCAqUE1FQVNFVVJFX1JFUV9CQVNJQywKICAgTUVBU0VVUkVfUkVRX0NDQSwgKlBNRUFTRVVSRV9SRVFfQ0NBLAogICBNRUFTRVVSRV9SRVFfUlBJLCAqUE1FQVNFVVJFX1JFUV9SUEk7CiAKIHR5cGVkZWYgc3RydWN0IF9NRUFTRVVSRV9SRVBfQkFTSUMgewotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlDaGFubmVsOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYWJ5U3RhcnRUaW1lWzhdOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYWJ5RHVyYXRpb25bMl07Ci0gICAgQllURSAgICAgICAgICAgICAgICBieU1hcDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q2hhbm5lbDsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVN0YXJ0VGltZVs4XTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUR1cmF0aW9uWzJdOworICAgIHVuc2lnbmVkIGNoYXIgYnlNYXA7CiB9IE1FQVNFVVJFX1JFUF9CQVNJQywgKlBNRUFTRVVSRV9SRVBfQkFTSUM7CiAKIHR5cGVkZWYgc3RydWN0IF9NRUFTRVVSRV9SRVBfQ0NBIHsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5Q2hhbm5lbDsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGFieVN0YXJ0VGltZVs4XTsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGFieUR1cmF0aW9uWzJdOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlDQ0FCdXN5RnJhY3Rpb247CisgICAgdW5zaWduZWQgY2hhciBieUNoYW5uZWw7CisgICAgdW5zaWduZWQgY2hhciBhYnlTdGFydFRpbWVbOF07CisgICAgdW5zaWduZWQgY2hhciBhYnlEdXJhdGlvblsyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q0NBQnVzeUZyYWN0aW9uOwogfSBNRUFTRVVSRV9SRVBfQ0NBLCAqUE1FQVNFVVJFX1JFUF9DQ0E7CiAKIHR5cGVkZWYgc3RydWN0IF9NRUFTRVVSRV9SRVBfUlBJIHsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5Q2hhbm5lbDsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGFieVN0YXJ0VGltZVs4XTsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGFieUR1cmF0aW9uWzJdOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYWJ5UlBJZGVuc2l0eVs4XTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q2hhbm5lbDsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVN0YXJ0VGltZVs4XTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUR1cmF0aW9uWzJdOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5UlBJZGVuc2l0eVs4XTsKIH0gTUVBU0VVUkVfUkVQX1JQSSwgKlBNRUFTRVVSRV9SRVBfUlBJOwogCiB0eXBlZGVmIHVuaW9uIF9NRUFTRVVSRV9SRVAgewpAQCAtNDA2LDg1ICs0MDYsODUgQEAKIH0gTUVBU0VVUkVfUkVQLCAqUE1FQVNFVVJFX1JFUDsKIAogdHlwZWRlZiBzdHJ1Y3QgX1dMQU5fSUVfTUVBU1VSRV9SRVEgewotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlFbGVtZW50SUQ7Ci0gICAgQllURSAgICAgICAgICAgICAgICBsZW47Ci0gICAgQllURSAgICAgICAgICAgICAgICBieVRva2VuOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlNb2RlOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlUeXBlOworICAgIHVuc2lnbmVkIGNoYXIgYnlFbGVtZW50SUQ7CisgICAgdW5zaWduZWQgY2hhciBsZW47CisgICAgdW5zaWduZWQgY2hhciBieVRva2VuOworICAgIHVuc2lnbmVkIGNoYXIgYnlNb2RlOworICAgIHVuc2lnbmVkIGNoYXIgYnlUeXBlOwogICAgIE1FQVNFVVJFX1JFUSAgICAgICAgc1JlcTsKIH0gV0xBTl9JRV9NRUFTVVJFX1JFUSwgKlBXTEFOX0lFX01FQVNVUkVfUkVROwogCiB0eXBlZGVmIHN0cnVjdCBfV0xBTl9JRV9NRUFTVVJFX1JFUCB7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieUVsZW1lbnRJRDsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGxlbjsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5VG9rZW47Ci0gICAgQllURSAgICAgICAgICAgICAgICBieU1vZGU7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieVR5cGU7CisgICAgdW5zaWduZWQgY2hhciBieUVsZW1lbnRJRDsKKyAgICB1bnNpZ25lZCBjaGFyIGxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VG9rZW47CisgICAgdW5zaWduZWQgY2hhciBieU1vZGU7CisgICAgdW5zaWduZWQgY2hhciBieVR5cGU7CiAgICAgTUVBU0VVUkVfUkVQICAgICAgICBzUmVwOwogfSBXTEFOX0lFX01FQVNVUkVfUkVQLCAqUFdMQU5fSUVfTUVBU1VSRV9SRVA7CiAKIHR5cGVkZWYgc3RydWN0IF9XTEFOX0lFX0NIX1NXIHsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5RWxlbWVudElEOwotICAgIEJZVEUgICAgICAgICAgICAgICAgbGVuOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlNb2RlOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlDaGFubmVsOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlDb3VudDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RWxlbWVudElEOworICAgIHVuc2lnbmVkIGNoYXIgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgYnlNb2RlOworICAgIHVuc2lnbmVkIGNoYXIgYnlDaGFubmVsOworICAgIHVuc2lnbmVkIGNoYXIgYnlDb3VudDsKIH0gV0xBTl9JRV9DSF9TVywgKlBXTEFOX0lFX0NIX1NXOwogCiB0eXBlZGVmIHN0cnVjdCBfV0xBTl9JRV9RVUlFVCB7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieUVsZW1lbnRJRDsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGxlbjsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5UXVpZXRDb3VudDsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5UXVpZXRQZXJpb2Q7Ci0gICAgQllURSAgICAgICAgICAgICAgICBhYnlRdWlldER1cmF0aW9uWzJdOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYWJ5UXVpZXRPZmZzZXRbMl07CisgICAgdW5zaWduZWQgY2hhciBieUVsZW1lbnRJRDsKKyAgICB1bnNpZ25lZCBjaGFyIGxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UXVpZXRDb3VudDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UXVpZXRQZXJpb2Q7CisgICAgdW5zaWduZWQgY2hhciBhYnlRdWlldER1cmF0aW9uWzJdOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5UXVpZXRPZmZzZXRbMl07CiB9IFdMQU5fSUVfUVVJRVQsICpQV0xBTl9JRV9RVUlFVDsKIAogdHlwZWRlZiBzdHJ1Y3QgX1dMQU5fSUVfQ09VTlRSWSB7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieUVsZW1lbnRJRDsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGxlbjsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGFieUNvdW50cnlTdHJpbmdbM107Ci0gICAgQllURSAgICAgICAgICAgICAgICBhYnlDb3VudHJ5SW5mb1szXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RWxlbWVudElEOworICAgIHVuc2lnbmVkIGNoYXIgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5Q291bnRyeVN0cmluZ1szXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUNvdW50cnlJbmZvWzNdOwogfSBXTEFOX0lFX0NPVU5UUlksICpQV0xBTl9JRV9DT1VOVFJZOwogCiB0eXBlZGVmIHN0cnVjdCBfV0xBTl9JRV9QV19DT05TVCB7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieUVsZW1lbnRJRDsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGxlbjsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5UG93ZXI7CisgICAgdW5zaWduZWQgY2hhciBieUVsZW1lbnRJRDsKKyAgICB1bnNpZ25lZCBjaGFyIGxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UG93ZXI7CiB9IFdMQU5fSUVfUFdfQ09OU1QsICpQV0xBTl9JRV9QV19DT05TVDsKIAogdHlwZWRlZiBzdHJ1Y3QgX1dMQU5fSUVfUFdfQ0FQIHsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5RWxlbWVudElEOwotICAgIEJZVEUgICAgICAgICAgICAgICAgbGVuOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlNaW5Qb3dlcjsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5TWF4UG93ZXI7CisgICAgdW5zaWduZWQgY2hhciBieUVsZW1lbnRJRDsKKyAgICB1bnNpZ25lZCBjaGFyIGxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TWluUG93ZXI7CisgICAgdW5zaWduZWQgY2hhciBieU1heFBvd2VyOwogfSBXTEFOX0lFX1BXX0NBUCwgKlBXTEFOX0lFX1BXX0NBUDsKIAogdHlwZWRlZiBzdHJ1Y3QgX1dMQU5fSUVfU1VQUF9DSCB7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieUVsZW1lbnRJRDsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGxlbjsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGFieUNoYW5uZWxUdXBsZVsyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RWxlbWVudElEOworICAgIHVuc2lnbmVkIGNoYXIgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5Q2hhbm5lbFR1cGxlWzJdOwogfSBXTEFOX0lFX1NVUFBfQ0gsICpQV0xBTl9JRV9TVVBQX0NIOwogCiB0eXBlZGVmIHN0cnVjdCBfV0xBTl9JRV9UUENfUkVRIHsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5RWxlbWVudElEOwotICAgIEJZVEUgICAgICAgICAgICAgICAgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgYnlFbGVtZW50SUQ7CisgICAgdW5zaWduZWQgY2hhciBsZW47CiB9IFdMQU5fSUVfVFBDX1JFUSwgKlBXTEFOX0lFX1RQQ19SRVE7CiAKIHR5cGVkZWYgc3RydWN0IF9XTEFOX0lFX1RQQ19SRVAgewotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlFbGVtZW50SUQ7Ci0gICAgQllURSAgICAgICAgICAgICAgICBsZW47Ci0gICAgQllURSAgICAgICAgICAgICAgICBieVR4UG93ZXI7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieUxpbmtNYXJnaW47CisgICAgdW5zaWduZWQgY2hhciBieUVsZW1lbnRJRDsKKyAgICB1bnNpZ25lZCBjaGFyIGxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VHhQb3dlcjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TGlua01hcmdpbjsKIH0gV0xBTl9JRV9UUENfUkVQLCAqUFdMQU5fSUVfVFBDX1JFUDsKIAogCiB0eXBlZGVmIHN0cnVjdCBfV0xBTl9JRV9JQlNTX0RGUyB7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieUVsZW1lbnRJRDsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGxlbjsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGFieURGU093bmVyWzZdOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlERlNSZWNvdmVyeTsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGFieUNoYW5uZWxNYXBbMl07CisgICAgdW5zaWduZWQgY2hhciBieUVsZW1lbnRJRDsKKyAgICB1bnNpZ25lZCBjaGFyIGxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGFieURGU093bmVyWzZdOworICAgIHVuc2lnbmVkIGNoYXIgYnlERlNSZWNvdmVyeTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUNoYW5uZWxNYXBbMl07CiB9IFdMQU5fSUVfSUJTU19ERlMsICpQV0xBTl9JRV9JQlNTX0RGUzsKIAogI3ByYWdtYSBwYWNrKCkKQEAgLTQ5NSw5ICs0OTUsOSBAQAogLy8gcHJvdG90eXBlIHN0cnVjdHVyZSwgYWxsIG1nbXQgZnJhbWUgdHlwZXMgd2lsbCBzdGFydCB3aXRoIHRoZXNlIG1lbWJlcnMKIHR5cGVkZWYgc3RydWN0IHRhZ1dMQU5fRlJfTUdNVCB7CiAKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgdVR5cGU7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgIGxlbjsKLSAgICBQQllURSAgICAgICAgICAgICAgICAgcEJ1ZjsKKyAgICB1bnNpZ25lZCBpbnQJdVR5cGU7CisgICAgdW5zaWduZWQgaW50CWxlbjsKKyAgICB1bnNpZ25lZCBjaGFyICpwQnVmOwogICAgIFBVV0xBTl84MDIxMUhEUiAgICAgICBwSGRyOwogCiB9IFdMQU5fRlJfTUdNVCwgICpQV0xBTl9GUl9NR01UOwpAQCAtNTA1LDE0ICs1MDUsMTQgQEAKIC8vIEJlYWNvbiBmcmFtZQogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl9GUl9CRUFDT04gewogCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdVR5cGU7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgbGVuOwotICAgIFBCWVRFICAgICAgICAgICAgICAgICAgIHBCdWY7CisgICAgdW5zaWduZWQgaW50CXVUeXBlOworICAgIHVuc2lnbmVkIGludAlsZW47CisgICAgdW5zaWduZWQgY2hhciAqcEJ1ZjsKICAgICBQVVdMQU5fODAyMTFIRFIgICAgICAgICBwSGRyOwogICAgIC8vIGZpeGVkIGZpZWxkcwogICAgIFBRV09SRCAgICAgICAgICAgICAgICAgIHBxd1RpbWVzdGFtcDsKLSAgICBQV09SRCAgICAgICAgICAgICAgICAgICBwd0JlYWNvbkludGVydmFsOwotICAgIFBXT1JEICAgICAgICAgICAgICAgICAgIHB3Q2FwSW5mbzsKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdCZWFjb25JbnRlcnZhbDsKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdDYXBJbmZvOwogICAgIC8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KICAgICBQV0xBTl9JRV9TU0lEICAgICAgICAgICBwU1NJRDsKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTICAgICBwU3VwcFJhdGVzOwpAQCAtNTM3LDkgKzUzNyw5IEBACiAvLyBJQlNTIEFUSU0gZnJhbWUKIHR5cGVkZWYgc3RydWN0IHRhZ1dMQU5fRlJfSUJTU0FUSU0gewogCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdVR5cGU7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgbGVuOwotICAgIFBCWVRFICAgICAgICAgICAgICAgICAgIHBCdWY7CisgICAgdW5zaWduZWQgaW50CXVUeXBlOworICAgIHVuc2lnbmVkIGludAlsZW47CisgICAgdW5zaWduZWQgY2hhciAqcEJ1ZjsKICAgICBQVVdMQU5fODAyMTFIRFIgICAgICAgICBwSGRyOwogCiAgICAgLy8gZml4ZWQgZmllbGRzCkBAIC01NTEsMTIgKzU1MSwxMiBAQAogLy8gRGlzYXNzb2NpYXRpb24KIHR5cGVkZWYgc3RydWN0IHRhZ1dMQU5fRlJfRElTQVNTT0MgewogCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdVR5cGU7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgbGVuOwotICAgIFBCWVRFICAgICAgICAgICAgICAgICAgIHBCdWY7CisgICAgdW5zaWduZWQgaW50CXVUeXBlOworICAgIHVuc2lnbmVkIGludAlsZW47CisgICAgdW5zaWduZWQgY2hhciAqcEJ1ZjsKICAgICBQVVdMQU5fODAyMTFIRFIgICAgICAgICBwSGRyOwogICAgIC8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KLSAgICBQV09SRCAgICAgICAgICAgICAgICAgICBwd1JlYXNvbjsKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdSZWFzb247CiAgICAgLyotLSBpbmZvIGVsZW1lbnRzIC0tLS0tLS0tLS0qLwogCiB9IFdMQU5fRlJfRElTQVNTT0MsICpQV0xBTl9GUl9ESVNBU1NPQzsKQEAgLTU2NCwxMyArNTY0LDEzIEBACiAvLyBBc3NvY2lhdGlvbiBSZXF1ZXN0CiB0eXBlZGVmIHN0cnVjdCB0YWdXTEFOX0ZSX0FTU09DUkVRIHsKIAotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIHVUeXBlOwotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIGxlbjsKLSAgICBQQllURSAgICAgICAgICAgICAgICAgICBwQnVmOworICAgIHVuc2lnbmVkIGludAl1VHlwZTsKKyAgICB1bnNpZ25lZCBpbnQJbGVuOworICAgIHVuc2lnbmVkIGNoYXIgKnBCdWY7CiAgICAgUFVXTEFOXzgwMjExSERSICAgICAgICAgcEhkcjsKICAgICAvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCi0gICAgUFdPUkQgICAgICAgICAgICAgICAgICAgcHdDYXBJbmZvOwotICAgIFBXT1JEICAgICAgICAgICAgICAgICAgIHB3TGlzdGVuSW50ZXJ2YWw7CisgICAgdW5zaWduZWQgc2hvcnQgKnB3Q2FwSW5mbzsKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdMaXN0ZW5JbnRlcnZhbDsKICAgICAvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCiAgICAgUFdMQU5fSUVfU1NJRCAgICAgICAgICAgcFNTSUQ7CiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyAgICAgcFN1cHBSYXRlczsKQEAgLTU4NSwxNCArNTg1LDE0IEBACiAvLyBBc3NvY2lhdGlvbiBSZXNwb25zZQogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl9GUl9BU1NPQ1JFU1AgewogCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdVR5cGU7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgbGVuOwotICAgIFBCWVRFICAgICAgICAgICAgICAgICAgIHBCdWY7CisgICAgdW5zaWduZWQgaW50CXVUeXBlOworICAgIHVuc2lnbmVkIGludAlsZW47CisgICAgdW5zaWduZWQgY2hhciAqcEJ1ZjsKICAgICBQVVdMQU5fODAyMTFIRFIgICAgICAgICBwSGRyOwogICAgIC8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KLSAgICBQV09SRCAgICAgICAgICAgICAgICAgICBwd0NhcEluZm87Ci0gICAgUFdPUkQgICAgICAgICAgICAgICAgICAgcHdTdGF0dXM7Ci0gICAgUFdPUkQgICAgICAgICAgICAgICAgICAgcHdBaWQ7CisgICAgdW5zaWduZWQgc2hvcnQgKnB3Q2FwSW5mbzsKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdTdGF0dXM7CisgICAgdW5zaWduZWQgc2hvcnQgKnB3QWlkOwogICAgIC8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTICAgICBwU3VwcFJhdGVzOwogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgICAgIHBFeHRTdXBwUmF0ZXM7CkBAIC02MDIsMTQgKzYwMiwxNCBAQAogLy8gUmVhc3NvY2lhdGlvbiBSZXF1ZXN0CiB0eXBlZGVmIHN0cnVjdCB0YWdXTEFOX0ZSX1JFQVNTT0NSRVEgewogCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdVR5cGU7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgbGVuOwotICAgIFBCWVRFICAgICAgICAgICAgICAgICAgIHBCdWY7CisgICAgdW5zaWduZWQgaW50CXVUeXBlOworICAgIHVuc2lnbmVkIGludAlsZW47CisgICAgdW5zaWduZWQgY2hhciAqcEJ1ZjsKICAgICBQVVdMQU5fODAyMTFIRFIgICAgICAgICBwSGRyOwogCiAgICAgLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLwotICAgIFBXT1JEICAgICAgICAgICAgICAgICAgIHB3Q2FwSW5mbzsKLSAgICBQV09SRCAgICAgICAgICAgICAgICAgICBwd0xpc3RlbkludGVydmFsOworICAgIHVuc2lnbmVkIHNob3J0ICpwd0NhcEluZm87CisgICAgdW5zaWduZWQgc2hvcnQgKnB3TGlzdGVuSW50ZXJ2YWw7CiAgICAgUElFRUVfQUREUiAgICAgICAgICAgICAgcEFkZHJDdXJyQVA7CiAKICAgICAvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCkBAIC02MjQsMTQgKzYyNCwxNCBAQAogLy8gUmVhc3NvY2lhdGlvbiBSZXNwb25zZQogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl9GUl9SRUFTU09DUkVTUCB7CiAKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICB1VHlwZTsKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICBsZW47Ci0gICAgUEJZVEUgICAgICAgICAgICAgICAgICAgcEJ1ZjsKKyAgICB1bnNpZ25lZCBpbnQJdVR5cGU7CisgICAgdW5zaWduZWQgaW50CWxlbjsKKyAgICB1bnNpZ25lZCBjaGFyICpwQnVmOwogICAgIFBVV0xBTl84MDIxMUhEUiAgICAgICAgIHBIZHI7CiAgICAgLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLwotICAgIFBXT1JEICAgICAgICAgICAgICAgICAgIHB3Q2FwSW5mbzsKLSAgICBQV09SRCAgICAgICAgICAgICAgICAgICBwd1N0YXR1czsKLSAgICBQV09SRCAgICAgICAgICAgICAgICAgICBwd0FpZDsKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdDYXBJbmZvOworICAgIHVuc2lnbmVkIHNob3J0ICpwd1N0YXR1czsKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdBaWQ7CiAgICAgLyotLSBpbmZvIGVsZW1lbnRzIC0tLS0tLS0tLS0qLwogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgICAgIHBTdXBwUmF0ZXM7CiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyAgICAgcEV4dFN1cHBSYXRlczsKQEAgLTY0MSw5ICs2NDEsOSBAQAogLy8gUHJvYmUgUmVxdWVzdAogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl9GUl9QUk9CRVJFUSB7CiAKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICB1VHlwZTsKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICBsZW47Ci0gICAgUEJZVEUgICAgICAgICAgICAgICAgICAgcEJ1ZjsKKyAgICB1bnNpZ25lZCBpbnQJdVR5cGU7CisgICAgdW5zaWduZWQgaW50CWxlbjsKKyAgICB1bnNpZ25lZCBjaGFyICpwQnVmOwogICAgIFBVV0xBTl84MDIxMUhEUiAgICAgICAgIHBIZHI7CiAgICAgLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLwogICAgIC8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KQEAgLTY1NiwxNCArNjU2LDE0IEBACiAvLyBQcm9iZSBSZXNwb25zZQogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl9GUl9QUk9CRVJFU1AgewogCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdVR5cGU7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgbGVuOwotICAgIFBCWVRFICAgICAgICAgICAgICAgICAgIHBCdWY7CisgICAgdW5zaWduZWQgaW50CXVUeXBlOworICAgIHVuc2lnbmVkIGludAlsZW47CisgICAgdW5zaWduZWQgY2hhciAqcEJ1ZjsKICAgICBQVVdMQU5fODAyMTFIRFIgICAgICAgICBwSGRyOwogICAgIC8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KICAgICBQUVdPUkQgICAgICAgICAgICAgICAgICBwcXdUaW1lc3RhbXA7Ci0gICAgUFdPUkQgICAgICAgICAgICAgICAgICAgcHdCZWFjb25JbnRlcnZhbDsKLSAgICBQV09SRCAgICAgICAgICAgICAgICAgICBwd0NhcEluZm87CisgICAgdW5zaWduZWQgc2hvcnQgKnB3QmVhY29uSW50ZXJ2YWw7CisgICAgdW5zaWduZWQgc2hvcnQgKnB3Q2FwSW5mbzsKICAgICAvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCiAgICAgUFdMQU5fSUVfU1NJRCAgICAgICAgICAgcFNTSUQ7CiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyAgICAgcFN1cHBSYXRlczsKQEAgLTY4NSwxNCArNjg1LDE0IEBACiAvLyBBdXRoZW50aWNhdGlvbgogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl9GUl9BVVRIRU4gewogCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdVR5cGU7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgbGVuOwotICAgIFBCWVRFICAgICAgICAgICAgICAgICAgIHBCdWY7CisgICAgdW5zaWduZWQgaW50CXVUeXBlOworICAgIHVuc2lnbmVkIGludAlsZW47CisgICAgdW5zaWduZWQgY2hhciAqcEJ1ZjsKICAgICBQVVdMQU5fODAyMTFIRFIgICAgICAgICBwSGRyOwogICAgIC8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KLSAgICBQV09SRCAgICAgICAgICAgICAgICAgICBwd0F1dGhBbGdvcml0aG07Ci0gICAgUFdPUkQgICAgICAgICAgICAgICAgICAgcHdBdXRoU2VxdWVuY2U7Ci0gICAgUFdPUkQgICAgICAgICAgICAgICAgICAgcHdTdGF0dXM7CisgICAgdW5zaWduZWQgc2hvcnQgKnB3QXV0aEFsZ29yaXRobTsKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdBdXRoU2VxdWVuY2U7CisgICAgdW5zaWduZWQgc2hvcnQgKnB3U3RhdHVzOwogICAgIC8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KICAgICBQV0xBTl9JRV9DSEFMTEVOR0UgICAgICBwQ2hhbGxlbmdlOwogCkBAIC03MDEsMTIgKzcwMSwxMiBAQAogLy8gRGVhdXRoZW5pY2F0aW9uCiB0eXBlZGVmIHN0cnVjdCB0YWdXTEFOX0ZSX0RFQVVUSEVOIHsKIAotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIHVUeXBlOwotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIGxlbjsKLSAgICBQQllURSAgICAgICAgICAgICAgICAgICBwQnVmOworICAgIHVuc2lnbmVkIGludAl1VHlwZTsKKyAgICB1bnNpZ25lZCBpbnQJbGVuOworICAgIHVuc2lnbmVkIGNoYXIgKnBCdWY7CiAgICAgUFVXTEFOXzgwMjExSERSICAgICAgICAgcEhkcjsKICAgICAvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCi0gICAgUFdPUkQgICAgICAgICAgICAgICAgICAgcHdSZWFzb247CisgICAgdW5zaWduZWQgc2hvcnQgKnB3UmVhc29uOwogCiAgICAgLyotLSBpbmZvIGVsZW1lbnRzIC0tLS0tLS0tLS0qLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L0lFRUUxMWguYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvSUVFRTExaC5jCmluZGV4IDIyZjEyZjUuLmUwN2ViZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvSUVFRTExaC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvSUVFRTExaC5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiZGV2aWNlLmgiCiAjaW5jbHVkZSAid21nci5oIgogI2luY2x1ZGUgInJ4dHguaCIKKyNpbmNsdWRlICJjaGFubmVsLmgiCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgRGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgaW50ICAgICAgICAgIG1zZ2xldmVsICAgICAgICAgICAgICAgID1NU0dfTEVWRUxfSU5GTzsKQEAgLTQ2LDQwICs0Nyw0MCBAQAogCiB0eXBlZGVmIHN0cnVjdCBfV0xBTl9GUkFNRV9BQ1RJT04gewogICAgIFdMQU5fODAyMTFIRFJfQTMgICAgSGVhZGVyOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlDYXRlZ29yeTsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5QWN0aW9uOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYWJ5VmFyc1sxXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q2F0ZWdvcnk7CisgICAgdW5zaWduZWQgY2hhciBieUFjdGlvbjsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVZhcnNbMV07CiB9IFdMQU5fRlJBTUVfQUNUSU9OLCAqUFdMQU5fRlJBTUVfQUNUSU9OOwogCiB0eXBlZGVmIHN0cnVjdCBfV0xBTl9GUkFNRV9NU1JSRVEgewogICAgIFdMQU5fODAyMTFIRFJfQTMgICAgSGVhZGVyOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlDYXRlZ29yeTsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5QWN0aW9uOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlEaWFsb2dUb2tlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q2F0ZWdvcnk7CisgICAgdW5zaWduZWQgY2hhciBieUFjdGlvbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RGlhbG9nVG9rZW47CiAgICAgV0xBTl9JRV9NRUFTVVJFX1JFUSBzTVNSUmVxRUlEc1sxXTsKIH0gV0xBTl9GUkFNRV9NU1JSRVEsICpQV0xBTl9GUkFNRV9NU1JSRVE7CiAKIHR5cGVkZWYgc3RydWN0IF9XTEFOX0ZSQU1FX01TUlJFUCB7CiAgICAgV0xBTl84MDIxMUhEUl9BMyAgICBIZWFkZXI7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieUNhdGVnb3J5OwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlBY3Rpb247Ci0gICAgQllURSAgICAgICAgICAgICAgICBieURpYWxvZ1Rva2VuOworICAgIHVuc2lnbmVkIGNoYXIgYnlDYXRlZ29yeTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5QWN0aW9uOworICAgIHVuc2lnbmVkIGNoYXIgYnlEaWFsb2dUb2tlbjsKICAgICBXTEFOX0lFX01FQVNVUkVfUkVQIHNNU1JSZXBFSURzWzFdOwogfSBXTEFOX0ZSQU1FX01TUlJFUCwgKlBXTEFOX0ZSQU1FX01TUlJFUDsKIAogdHlwZWRlZiBzdHJ1Y3QgX1dMQU5fRlJBTUVfVFBDUkVRIHsKICAgICBXTEFOXzgwMjExSERSX0EzICAgIEhlYWRlcjsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5Q2F0ZWdvcnk7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieUFjdGlvbjsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5RGlhbG9nVG9rZW47CisgICAgdW5zaWduZWQgY2hhciBieUNhdGVnb3J5OworICAgIHVuc2lnbmVkIGNoYXIgYnlBY3Rpb247CisgICAgdW5zaWduZWQgY2hhciBieURpYWxvZ1Rva2VuOwogICAgIFdMQU5fSUVfVFBDX1JFUSAgICAgc1RQQ1JlcUVJRHM7CiB9IFdMQU5fRlJBTUVfVFBDUkVRLCAqUFdMQU5fRlJBTUVfVFBDUkVROwogCiB0eXBlZGVmIHN0cnVjdCBfV0xBTl9GUkFNRV9UUENSRVAgewogICAgIFdMQU5fODAyMTFIRFJfQTMgICAgSGVhZGVyOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlDYXRlZ29yeTsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5QWN0aW9uOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlEaWFsb2dUb2tlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q2F0ZWdvcnk7CisgICAgdW5zaWduZWQgY2hhciBieUFjdGlvbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RGlhbG9nVG9rZW47CiAgICAgV0xBTl9JRV9UUENfUkVQICAgICBzVFBDUmVwRUlEczsKIH0gV0xBTl9GUkFNRV9UUENSRVAsICpQV0xBTl9GUkFNRV9UUENSRVA7CiAKQEAgLTk3LDEwICs5OCwxMSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBWYXJpYWJsZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBCT09MIHNfYlJ4TVNSUmVxKFBTTWdtdE9iamVjdCBwTWdtdCwgUFdMQU5fRlJBTUVfTVNSUkVRIHBNU1JSZXEsIFVJTlQgdUxlbmd0aCkKK3N0YXRpYyBib29sIHNfYlJ4TVNSUmVxKFBTTWdtdE9iamVjdCBwTWdtdCwgUFdMQU5fRlJBTUVfTVNSUkVRIHBNU1JSZXEsCisJCXVuc2lnbmVkIGludCB1TGVuZ3RoKQogewogICAgIHNpemVfdCAgICB1TnVtT2ZFSURzID0gMDsKLSAgICBCT09MICAgIGJSZXN1bHQgPSBUUlVFOworICAgIGJvb2wgYlJlc3VsdCA9IHRydWU7CiAKICAgICBpZiAodUxlbmd0aCA8PSBXTEFOX0EzRlJfTUFYTEVOKSB7CiAgICAgICAgIG1lbWNweShwTWdtdC0+YWJ5Q3VycmVudE1TUlJlcSwgcE1TUlJlcSwgdUxlbmd0aCk7CkBAIC0xMTYsNyArMTE4LDcgQEAKIH0KIAogCi1zdGF0aWMgQk9PTCBzX2JSeFRQQ1JlcShQU01nbXRPYmplY3QgcE1nbXQsIFBXTEFOX0ZSQU1FX1RQQ1JFUSBwVFBDUmVxLCBCWVRFIGJ5UmF0ZSwgQllURSBieVJTU0kpCitzdGF0aWMgYm9vbCBzX2JSeFRQQ1JlcShQU01nbXRPYmplY3QgcE1nbXQsIFBXTEFOX0ZSQU1FX1RQQ1JFUSBwVFBDUmVxLCB1bnNpZ25lZCBjaGFyIGJ5UmF0ZSwgdW5zaWduZWQgY2hhciBieVJTU0kpCiB7CiAgICAgUFdMQU5fRlJBTUVfVFBDUkVQICBwRnJhbWU7CiAgICAgUFNUeE1nbXRQYWNrZXQgICAgICBwVHhQYWNrZXQgPSBOVUxMOwpAQCAtMTI0LDkgKzEyNiw5IEBACiAKICAgICBwVHhQYWNrZXQgPSAoUFNUeE1nbXRQYWNrZXQpcE1nbXQtPnBieU1nbXRQYWNrZXRQb29sOwogICAgIG1lbXNldChwVHhQYWNrZXQsIDAsIHNpemVvZihTVHhNZ210UGFja2V0KSArIFdMQU5fQTNGUl9NQVhMRU4pOwotICAgIHBUeFBhY2tldC0+cDgwMjExSGVhZGVyID0gKFBVV0xBTl84MDIxMUhEUikoKFBCWVRFKXBUeFBhY2tldCArIHNpemVvZihTVHhNZ210UGFja2V0KSk7CisgICAgcFR4UGFja2V0LT5wODAyMTFIZWFkZXIgPSAoUFVXTEFOXzgwMjExSERSKSgodW5zaWduZWQgY2hhciAqKXBUeFBhY2tldCArIHNpemVvZihTVHhNZ210UGFja2V0KSk7CiAKLSAgICBwRnJhbWUgPSAoUFdMQU5fRlJBTUVfVFBDUkVQKSgoUEJZVEUpcFR4UGFja2V0ICsgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpKTsKKyAgICBwRnJhbWUgPSAoUFdMQU5fRlJBTUVfVFBDUkVQKSgodW5zaWduZWQgY2hhciAqKXBUeFBhY2tldCArIHNpemVvZihTVHhNZ210UGFja2V0KSk7CiAKICAgICBwRnJhbWUtPkhlYWRlci53RnJhbWVDdGwgPSAoICAgV0xBTl9TRVRfRkNfRlRZUEUoV0xBTl9GVFlQRV9NR01UKSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXTEFOX1NFVF9GQ19GU1RZUEUoV0xBTl9GU1RZUEVfQUNUSU9OKQpAQCAtMTc0LDggKzE3Niw4IEBACiAgICAgcFR4UGFja2V0LT5jYk1QRFVMZW4gPSBzaXplb2YoV0xBTl9GUkFNRV9UUENSRVApOwogICAgIHBUeFBhY2tldC0+Y2JQYXlsb2FkTGVuID0gc2l6ZW9mKFdMQU5fRlJBTUVfVFBDUkVQKSAtIFdMQU5fSERSX0FERFIzX0xFTjsKICAgICBpZiAoY3NNZ210X3htaXQocE1nbXQtPnBBZGFwdGVyLCBwVHhQYWNrZXQpICE9IENNRF9TVEFUVVNfUEVORElORykKLSAgICAgICAgcmV0dXJuIChGQUxTRSk7Ci0gICAgcmV0dXJuIChUUlVFKTsKKyAgICAgICAgcmV0dXJuIChmYWxzZSk7CisgICAgcmV0dXJuICh0cnVlKTsKIC8vICAgIHJldHVybiAoQ0FSRGJTZW5kUGFja2V0KHBNZ210LT5wQWRhcHRlciwgcEZyYW1lLCBQS1RfVFlQRV84MDJfMTFfTU5HLCBzaXplb2YoV0xBTl9GUkFNRV9UUENSRVApKSk7CiAKIH0KQEAgLTIwMSw3ICsyMDMsNyBAQAogICogUmV0dXJuIFZhbHVlOiBOb25lLgogICoKIC0qLwotQk9PTAorYm9vbAogSUVFRTExaGJNZ3JSeEFjdGlvbiAoCiAgICAgdm9pZCAqcE1nbXRIYW5kbGUsCiAgICAgdm9pZCAqcFJ4UGFja2V0CkBAIC0yMDksMTQgKzIxMSwxNCBAQAogewogICAgIFBTTWdtdE9iamVjdCAgICAgICAgICAgIHBNZ210ID0gKFBTTWdtdE9iamVjdCkgcE1nbXRIYW5kbGU7CiAgICAgUFdMQU5fRlJBTUVfQUNUSU9OICAgICAgcEFjdGlvbiA9IE5VTEw7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdUxlbmd0aCA9IDA7CisgICAgdW5zaWduZWQgaW50IHVMZW5ndGggPSAwOwogICAgIFBXTEFOX0lFX0NIX1NXICAgICAgICAgIHBDaGFubmVsU3dpdGNoID0gTlVMTDsKIAogCiAgICAgLy8gZGVjb2RlIHRoZSBmcmFtZQogICAgIHVMZW5ndGggPSAoKFBTUnhNZ210UGFja2V0KXBSeFBhY2tldCktPmNiTVBEVUxlbjsKICAgICBpZiAodUxlbmd0aCA+IFdMQU5fQTNGUl9NQVhMRU4pIHsKLSAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgICAgICAgIHJldHVybiAoZmFsc2UpOwogICAgIH0KIAogCkBAIC0yMzMsNyArMjM1LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gKHNfYlJ4VFBDUmVxKHBNZ210LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBXTEFOX0ZSQU1FX1RQQ1JFUSkgcEFjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUFNSeE1nbXRQYWNrZXQpcFJ4UGFja2V0KS0+YnlSeFJhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURSkgKChQU1J4TWdtdFBhY2tldClwUnhQYWNrZXQpLT51UlNTSSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpICgoUFNSeE1nbXRQYWNrZXQpcFJ4UGFja2V0KS0+dVJTU0kpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQUNUSU9OX1RQQ1JFUDoKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI0NCw3ICsyNDYsNyBAQAogICAgICAgICAgICAgICAgICAgICAvLyB2YWxpZCBlbGVtZW50IGlkCiAgICAgICAgICAgICAgICAgICAgIENBUkRiQ2hhbm5lbFN3aXRjaCggcE1nbXQtPnBBZGFwdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBDaGFubmVsU3dpdGNoLT5ieU1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FSRGJ5R2V0Q2hhbm5lbE1hcHBpbmcocE1nbXQtPnBBZGFwdGVyLCBwQ2hhbm5lbFN3aXRjaC0+YnlDaGFubmVsLCBwTWdtdC0+ZUN1cnJlbnRQSFlNb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfY2hhbm5lbF9tYXBwaW5nKHBNZ210LT5wQWRhcHRlciwgcENoYW5uZWxTd2l0Y2gtPmJ5Q2hhbm5lbCwgcE1nbXQtPmVDdXJyZW50UEhZTW9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcENoYW5uZWxTd2l0Y2gtPmJ5Q291bnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgIH0KQEAgLTI1OCwxMyArMjYwLDEzIEBACiAgICAgICAgIHBBY3Rpb24tPmJ5Q2F0ZWdvcnkgfD0gMHg4MDsKIAogICAgICAgIC8vcmV0dXJuIChDQVJEYlNlbmRQYWNrZXQocE1nbXQtPnBBZGFwdGVyLCBwQWN0aW9uLCBQS1RfVFlQRV84MDJfMTFfTU5HLCB1TGVuZ3RoKSk7Ci0gICAgICAgIHJldHVybiAoVFJVRSk7CisgICAgICAgIHJldHVybiAodHJ1ZSk7CiAgICAgfQotICAgIHJldHVybiAoVFJVRSk7CisgICAgcmV0dXJuICh0cnVlKTsKIH0KIAogCi1CT09MIElFRUUxMWhiTVNSUmVwVHggKAorYm9vbCBJRUVFMTFoYk1TUlJlcFR4ICgKICAgICB2b2lkICpwTWdtdEhhbmRsZQogICAgICkKIHsKQEAgLTI3NSw3ICsyNzcsNyBAQAogCiAgICAgcFR4UGFja2V0ID0gKFBTVHhNZ210UGFja2V0KXBNZ210LT5hYnlDdXJyZW50TVNSUmVwOwogICAgIG1lbXNldChwVHhQYWNrZXQsIDAsIHNpemVvZihTVHhNZ210UGFja2V0KSArIFdMQU5fQTNGUl9NQVhMRU4pOwotICAgIHBUeFBhY2tldC0+cDgwMjExSGVhZGVyID0gKFBVV0xBTl84MDIxMUhEUikoKFBCWVRFKXBUeFBhY2tldCArIHNpemVvZihTVHhNZ210UGFja2V0KSk7CisgICAgcFR4UGFja2V0LT5wODAyMTFIZWFkZXIgPSAoUFVXTEFOXzgwMjExSERSKSgodW5zaWduZWQgY2hhciAqKXBUeFBhY2tldCArIHNpemVvZihTVHhNZ210UGFja2V0KSk7CiAKIAogICAgIHBNU1JSZXAtPkhlYWRlci53RnJhbWVDdGwgPSAoICAgV0xBTl9TRVRfRkNfRlRZUEUoV0xBTl9GVFlQRV9NR01UKSB8CkBAIC0yOTUsOCArMjk3LDggQEAKICAgICBwVHhQYWNrZXQtPmNiTVBEVUxlbiA9IHVMZW5ndGg7CiAgICAgcFR4UGFja2V0LT5jYlBheWxvYWRMZW4gPSB1TGVuZ3RoIC0gV0xBTl9IRFJfQUREUjNfTEVOOwogICAgIGlmIChjc01nbXRfeG1pdChwTWdtdC0+cEFkYXB0ZXIsIHBUeFBhY2tldCkgIT0gQ01EX1NUQVRVU19QRU5ESU5HKQotICAgICAgICByZXR1cm4gKEZBTFNFKTsKLSAgICByZXR1cm4gKFRSVUUpOworICAgICAgICByZXR1cm4gKGZhbHNlKTsKKyAgICByZXR1cm4gKHRydWUpOwogLy8gICAgcmV0dXJuIChDQVJEYlNlbmRQYWNrZXQocE1nbXQtPnBBZGFwdGVyLCBwTVNSUmVwLCBQS1RfVFlQRV84MDJfMTFfTU5HLCB1TGVuZ3RoKSk7CiAKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvSUVFRTExaC5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9JRUVFMTFoLmgKaW5kZXggYWUzMjQ5OC4uNTQyMzQwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9JRUVFMTFoLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9JRUVFMTFoLmgKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotQk9PTCBJRUVFMTFoYk1TUlJlcFR4ICgKK2Jvb2wgSUVFRTExaGJNU1JSZXBUeCAoCiAgICAgdm9pZCAqcE1nbXRIYW5kbGUKICAgICApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9NYWtlZmlsZQppbmRleCA5MzFkZWIxLi44MjRjOTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvTWFrZWZpbGUKQEAgLTQsNiArNCw3IEBACiAKIHZ0NjY1NV9zdGFnZS15ICs9CWRldmljZV9tYWluLm8gXAogCWNhcmQubyBcCisJY2hhbm5lbC5vIFwKIAltYWMubyBcCiAJYmFzZWJhbmQubyBcCiAJd2N0bC5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvVE9ETwppbmRleCBjYjA0YWFhLi42MzYwN2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L1RPRE8KKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9UT0RPCkBAIC0zLDcgKzMsNiBAQAogLSBwcmVwYXJlIGZvciBtZXJnZSB3aXRoIHZ0NjY1NiBkcml2ZXI6CiAgIC0gcmVuYW1lIERFVklDRV9QUlQoKSB0byBEQkdfUFJUKCkgLS0gZG9uZQogICAtIHNoYXJlIDgwMjExKi5oIGluY2x1ZGVzCi0gIC0gbW92ZSBjb2RlIGZvciBjaGFubmVsIG1hcHBpbmcgZnJvbSBjYXJkLmMgdG8gY2hhbm5lbC5jCiAgIC0gc3BsaXQgcmYuYwogICAtIHJlbW92ZSBkZWFkIGNvZGUKICAgLSBhYnN0cmFjdCBWVDMyNTMgY2hpcHNldCBzcGVjaWZpYyBjb2RlCkBAIC0xMSw2ICsxMCw4IEBACiAtIGtpbGwgdHR5cGUuaAogLSBzd2l0Y2ggdG8gdXNlIExJQjgwMjExCiAtIHN3aXRjaCB0byB1c2UgTUFDODAyMTEKKy0gdmVyaWZ5IHVuc2lnbmVkIGxvbmcgdXNhZ2UgZm9yIHg4Ni02NCBhcmNoCistIHJlZHVjZSAuZGF0YSBmb290cHJpbnQKIC0gdXNlIGtlcm5lbCBjb2Rpbmcgc3R5bGUKIC0gY2hlY2twYXRjaC5wbCBmaXhlcwogLSBzcGFyc2UgZml4ZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvYWVzX2NjbXAuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvYWVzX2NjbXAuYwppbmRleCBmZWYxYjkxLi5lMzAxNjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Flc19jY21wLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9hZXNfY2NtcC5jCkBAIC00Niw3ICs0Niw3IEBACiAgKiBTQk9YIFRhYmxlCiAgKi8KIAotQllURSBzYm94X3RhYmxlWzI1Nl0gPQordW5zaWduZWQgY2hhciBzYm94X3RhYmxlWzI1Nl0gPQogewogMHg2MywgMHg3YywgMHg3NywgMHg3YiwgMHhmMiwgMHg2YiwgMHg2ZiwgMHhjNSwgMHgzMCwgMHgwMSwgMHg2NywgMHgyYiwgMHhmZSwgMHhkNywgMHhhYiwgMHg3NiwKIDB4Y2EsIDB4ODIsIDB4YzksIDB4N2QsIDB4ZmEsIDB4NTksIDB4NDcsIDB4ZjAsIDB4YWQsIDB4ZDQsIDB4YTIsIDB4YWYsIDB4OWMsIDB4YTQsIDB4NzIsIDB4YzAsCkBAIC02Niw3ICs2Niw3IEBACiAweDhjLCAweGExLCAweDg5LCAweDBkLCAweGJmLCAweGU2LCAweDQyLCAweDY4LCAweDQxLCAweDk5LCAweDJkLCAweDBmLCAweGIwLCAweDU0LCAweGJiLCAweDE2CiB9OwogCi1CWVRFIGRvdDJfdGFibGVbMjU2XSA9IHsKK3Vuc2lnbmVkIGNoYXIgZG90Ml90YWJsZVsyNTZdID0gewogMHgwMCwgMHgwMiwgMHgwNCwgMHgwNiwgMHgwOCwgMHgwYSwgMHgwYywgMHgwZSwgMHgxMCwgMHgxMiwgMHgxNCwgMHgxNiwgMHgxOCwgMHgxYSwgMHgxYywgMHgxZSwKIDB4MjAsIDB4MjIsIDB4MjQsIDB4MjYsIDB4MjgsIDB4MmEsIDB4MmMsIDB4MmUsIDB4MzAsIDB4MzIsIDB4MzQsIDB4MzYsIDB4MzgsIDB4M2EsIDB4M2MsIDB4M2UsCiAweDQwLCAweDQyLCAweDQ0LCAweDQ2LCAweDQ4LCAweDRhLCAweDRjLCAweDRlLCAweDUwLCAweDUyLCAweDU0LCAweDU2LCAweDU4LCAweDVhLCAweDVjLCAweDVlLApAQCAtODUsNyArODUsNyBAQAogMHhmYiwgMHhmOSwgMHhmZiwgMHhmZCwgMHhmMywgMHhmMSwgMHhmNywgMHhmNSwgMHhlYiwgMHhlOSwgMHhlZiwgMHhlZCwgMHhlMywgMHhlMSwgMHhlNywgMHhlNQogfTsKIAotQllURSBkb3QzX3RhYmxlWzI1Nl0gPSB7Cit1bnNpZ25lZCBjaGFyIGRvdDNfdGFibGVbMjU2XSA9IHsKIDB4MDAsIDB4MDMsIDB4MDYsIDB4MDUsIDB4MGMsIDB4MGYsIDB4MGEsIDB4MDksIDB4MTgsIDB4MWIsIDB4MWUsIDB4MWQsIDB4MTQsIDB4MTcsIDB4MTIsIDB4MTEsCiAweDMwLCAweDMzLCAweDM2LCAweDM1LCAweDNjLCAweDNmLCAweDNhLCAweDM5LCAweDI4LCAweDJiLCAweDJlLCAweDJkLCAweDI0LCAweDI3LCAweDIyLCAweDIxLAogMHg2MCwgMHg2MywgMHg2NiwgMHg2NSwgMHg2YywgMHg2ZiwgMHg2YSwgMHg2OSwgMHg3OCwgMHg3YiwgMHg3ZSwgMHg3ZCwgMHg3NCwgMHg3NywgMHg3MiwgMHg3MSwKQEAgLTExMCwxMSArMTEwLDExIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXZvaWQgeG9yXzEyOChCWVRFICphLCBCWVRFICpiLCBCWVRFICpvdXQpCit2b2lkIHhvcl8xMjgodW5zaWduZWQgY2hhciAqYSwgdW5zaWduZWQgY2hhciAqYiwgdW5zaWduZWQgY2hhciAqb3V0KQogewotUERXT1JEIGR3UHRyQSA9IChQRFdPUkQpIGE7Ci1QRFdPUkQgZHdQdHJCID0gKFBEV09SRCkgYjsKLVBEV09SRCBkd1B0ck91dCA9KFBEV09SRCkgb3V0OwordW5zaWduZWQgbG9uZyAqZHdQdHJBID0gKHVuc2lnbmVkIGxvbmcgKikgYTsKK3Vuc2lnbmVkIGxvbmcgKmR3UHRyQiA9ICh1bnNpZ25lZCBsb25nICopIGI7Cit1bnNpZ25lZCBsb25nICpkd1B0ck91dCA9KHVuc2lnbmVkIGxvbmcgKikgb3V0OwogCiAgICAgKCpkd1B0ck91dCsrKSA9ICgqZHdQdHJBKyspIF4gKCpkd1B0ckIrKyk7CiAgICAgKCpkd1B0ck91dCsrKSA9ICgqZHdQdHJBKyspIF4gKCpkd1B0ckIrKyk7CkBAIC0xMjMsMTkgKzEyMywxOSBAQAogfQogCiAKLXZvaWQgeG9yXzMyKEJZVEUgKmEsIEJZVEUgKmIsIEJZVEUgKm91dCkKK3ZvaWQgeG9yXzMyKHVuc2lnbmVkIGNoYXIgKmEsIHVuc2lnbmVkIGNoYXIgKmIsIHVuc2lnbmVkIGNoYXIgKm91dCkKIHsKLVBEV09SRCBkd1B0ckEgPSAoUERXT1JEKSBhOwotUERXT1JEIGR3UHRyQiA9IChQRFdPUkQpIGI7Ci1QRFdPUkQgZHdQdHJPdXQgPShQRFdPUkQpIG91dDsKK3Vuc2lnbmVkIGxvbmcgKmR3UHRyQSA9ICh1bnNpZ25lZCBsb25nICopIGE7Cit1bnNpZ25lZCBsb25nICpkd1B0ckIgPSAodW5zaWduZWQgbG9uZyAqKSBiOwordW5zaWduZWQgbG9uZyAqZHdQdHJPdXQgPSh1bnNpZ25lZCBsb25nICopIG91dDsKIAogICAgICgqZHdQdHJPdXQrKykgPSAoKmR3UHRyQSsrKSBeICgqZHdQdHJCKyspOwogfQogCi12b2lkIEFkZFJvdW5kS2V5KEJZVEUgKmtleSwgaW50IHJvdW5kKQordm9pZCBBZGRSb3VuZEtleSh1bnNpZ25lZCBjaGFyICprZXksIGludCByb3VuZCkKIHsKLUJZVEUgc2JveF9rZXlbNF07Ci1CWVRFIHJjb25fdGFibGVbMTBdID0geyAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDFiLCAweDM2fTsKK3Vuc2lnbmVkIGNoYXIgc2JveF9rZXlbNF07Cit1bnNpZ25lZCBjaGFyIHJjb25fdGFibGVbMTBdID0geyAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDFiLCAweDM2fTsKIAogICAgIHNib3hfa2V5WzBdID0gc2JveF90YWJsZVtrZXlbMTNdXTsKICAgICBzYm94X2tleVsxXSA9IHNib3hfdGFibGVba2V5WzE0XV07CkBAIC0xNTAsNyArMTUwLDcgQEAKICAgICB4b3JfMzIoJmtleVsxMl0sICZrZXlbOF0sICZrZXlbMTJdKTsKIH0KIAotdm9pZCBTdWJCeXRlcyhCWVRFICppbiwgQllURSAqb3V0KQordm9pZCBTdWJCeXRlcyh1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0KQogewogaW50IGk7CiAKQEAgLTE2MCw3ICsxNjAsNyBAQAogICAgIH0KIH0KIAotdm9pZCBTaGlmdFJvd3MoQllURSAqaW4sIEJZVEUgKm91dCkKK3ZvaWQgU2hpZnRSb3dzKHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQpCiB7CiAgICAgb3V0WzBdICA9IGluWzBdOwogICAgIG91dFsxXSAgPSBpbls1XTsKQEAgLTE4MCw3ICsxODAsNyBAQAogICAgIG91dFsxNV0gPSBpblsxMV07CiB9CiAKLXZvaWQgTWl4Q29sdW1ucyhCWVRFICppbiwgQllURSAqb3V0KQordm9pZCBNaXhDb2x1bW5zKHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQpCiB7CiAKICAgICBvdXRbMF0gPSBkb3QyX3RhYmxlW2luWzBdXSBeIGRvdDNfdGFibGVbaW5bMV1dIF4gaW5bMl0gXiBpblszXTsKQEAgLTE5MCwxMyArMTkwLDEzIEBACiB9CiAKIAotdm9pZCBBRVN2MTI4KEJZVEUgKmtleSwgQllURSAqZGF0YSwgQllURSAqY2lwaGVydGV4dCkKK3ZvaWQgQUVTdjEyOCh1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRleHQpCiB7CiBpbnQgIGk7CiBpbnQgIHJvdW5kOwotQllURSBUbXBkYXRhQVsxNl07Ci1CWVRFIFRtcGRhdGFCWzE2XTsKLUJZVEUgYWJ5Um91bmRLZXlbMTZdOwordW5zaWduZWQgY2hhciBUbXBkYXRhQVsxNl07Cit1bnNpZ25lZCBjaGFyIFRtcGRhdGFCWzE2XTsKK3Vuc2lnbmVkIGNoYXIgYWJ5Um91bmRLZXlbMTZdOwogCiAgICAgZm9yKGk9MDsgaTwxNjsgaSsrKQogICAgICAgICBhYnlSb3VuZEtleVtpXSA9IGtleVtpXTsKQEAgLTI0MywzMyArMjQzLDMzIEBACiAgKiBSZXR1cm4gVmFsdWU6IE1JQyBjb21wYXJlIHJlc3VsdAogICoKICAqLwotQk9PTCBBRVNiR2VuQ0NNUChQQllURSBwYnlSeEtleSwgUEJZVEUgcGJ5RnJhbWUsIFdPUkQgd0ZyYW1lU2l6ZSkKK2Jvb2wgQUVTYkdlbkNDTVAodW5zaWduZWQgY2hhciAqcGJ5UnhLZXksIHVuc2lnbmVkIGNoYXIgKnBieUZyYW1lLCB1bnNpZ25lZCBzaG9ydCB3RnJhbWVTaXplKQogewotQllURSAgICAgICAgICAgIGFieU5vbmNlWzEzXTsKLUJZVEUgICAgICAgICAgICBNSUNfSVZbMTZdOwotQllURSAgICAgICAgICAgIE1JQ19IRFIxWzE2XTsKLUJZVEUgICAgICAgICAgICBNSUNfSERSMlsxNl07Ci1CWVRFICAgICAgICAgICAgYWJ5TUlDWzE2XTsKLUJZVEUgICAgICAgICAgICBhYnlDVFJQTERbMTZdOwotQllURSAgICAgICAgICAgIGFieVRtcFsxNl07Ci1CWVRFICAgICAgICAgICAgYWJ5UGxhaW5UZXh0WzE2XTsKLUJZVEUgICAgICAgICAgICBhYnlMYXN0Q2lwaGVyWzE2XTsKK3Vuc2lnbmVkIGNoYXIgYWJ5Tm9uY2VbMTNdOwordW5zaWduZWQgY2hhciBNSUNfSVZbMTZdOwordW5zaWduZWQgY2hhciBNSUNfSERSMVsxNl07Cit1bnNpZ25lZCBjaGFyIE1JQ19IRFIyWzE2XTsKK3Vuc2lnbmVkIGNoYXIgYWJ5TUlDWzE2XTsKK3Vuc2lnbmVkIGNoYXIgYWJ5Q1RSUExEWzE2XTsKK3Vuc2lnbmVkIGNoYXIgYWJ5VG1wWzE2XTsKK3Vuc2lnbmVkIGNoYXIgYWJ5UGxhaW5UZXh0WzE2XTsKK3Vuc2lnbmVkIGNoYXIgYWJ5TGFzdENpcGhlclsxNl07CiAKIFBTODAyXzExSGVhZGVyICBwTUFDSGVhZGVyID0gKFBTODAyXzExSGVhZGVyKSBwYnlGcmFtZTsKLVBCWVRFICAgICAgICAgICBwYnlJVjsKLVBCWVRFICAgICAgICAgICBwYnlQYXlsb2FkOwotV09SRCAgICAgICAgICAgIHdITGVuID0gMjI7Ci1XT1JEICAgICAgICAgICAgd1BheWxvYWRTaXplID0gd0ZyYW1lU2l6ZSAtIDggLSA4IC0gNCAtIFdMQU5fSERSX0FERFIzX0xFTjsvLzggaXMgSVYsIDggaXMgTUlDLCA0IGlzIENSQwotQk9PTCAgICAgICAgICAgIGJBNCA9IEZBTFNFOwotQllURSAgICAgICAgICAgIGJ5VG1wOwotV09SRCAgICAgICAgICAgIHdDbnQ7Cit1bnNpZ25lZCBjaGFyICpwYnlJVjsKK3Vuc2lnbmVkIGNoYXIgKnBieVBheWxvYWQ7Cit1bnNpZ25lZCBzaG9ydCB3SExlbiA9IDIyOwordW5zaWduZWQgc2hvcnQgd1BheWxvYWRTaXplID0gd0ZyYW1lU2l6ZSAtIDggLSA4IC0gNCAtIFdMQU5fSERSX0FERFIzX0xFTjsvLzggaXMgSVYsIDggaXMgTUlDLCA0IGlzIENSQworYm9vbCBiQTQgPSBmYWxzZTsKK3Vuc2lnbmVkIGNoYXIgYnlUbXA7Cit1bnNpZ25lZCBzaG9ydCB3Q250OwogaW50ICAgICAgICAgICAgIGlpLGpqLGtrOwogCiAKICAgICBwYnlJViA9IHBieUZyYW1lICsgV0xBTl9IRFJfQUREUjNfTEVOOwotICAgIGlmICggV0xBTl9HRVRfRkNfVE9EUygqKFBXT1JEKXBieUZyYW1lKSAmJgotICAgICAgICAgV0xBTl9HRVRfRkNfRlJPTURTKCooUFdPUkQpcGJ5RnJhbWUpICkgewotICAgICAgICAgYkE0ID0gVFJVRTsKKyAgICBpZiAoIFdMQU5fR0VUX0ZDX1RPRFMoKih1bnNpZ25lZCBzaG9ydCAqKXBieUZyYW1lKSAmJgorICAgICAgICAgV0xBTl9HRVRfRkNfRlJPTURTKCoodW5zaWduZWQgc2hvcnQgKilwYnlGcmFtZSkgKSB7CisgICAgICAgICBiQTQgPSB0cnVlOwogICAgICAgICAgcGJ5SVYgKz0gNjsgICAgICAgICAgICAgLy8gNiBpcyA4MDIuMTEgYWRkcmVzczQKICAgICAgICAgIHdITGVuICs9IDY7CiAgICAgICAgICB3UGF5bG9hZFNpemUgLT0gNjsKQEAgLTI4OCwxNSArMjg4LDE1IEBACiAgICAgLy9NSUNfSVYKICAgICBNSUNfSVZbMF0gPSAweDU5OwogICAgIG1lbWNweSgmKE1JQ19JVlsxXSksICYoYWJ5Tm9uY2VbMF0pLCAxMyk7Ci0gICAgTUlDX0lWWzE0XSA9IChCWVRFKSh3UGF5bG9hZFNpemUgPj4gOCk7Ci0gICAgTUlDX0lWWzE1XSA9IChCWVRFKSh3UGF5bG9hZFNpemUgJiAweGZmKTsKKyAgICBNSUNfSVZbMTRdID0gKHVuc2lnbmVkIGNoYXIpKHdQYXlsb2FkU2l6ZSA+PiA4KTsKKyAgICBNSUNfSVZbMTVdID0gKHVuc2lnbmVkIGNoYXIpKHdQYXlsb2FkU2l6ZSAmIDB4ZmYpOwogCiAgICAgLy9NSUNfSERSMQotICAgIE1JQ19IRFIxWzBdID0gKEJZVEUpKHdITGVuID4+IDgpOwotICAgIE1JQ19IRFIxWzFdID0gKEJZVEUpKHdITGVuICYgMHhmZik7Ci0gICAgYnlUbXAgPSAoQllURSkocE1BQ0hlYWRlci0+d0ZyYW1lQ3RsICYgMHhmZik7CisgICAgTUlDX0hEUjFbMF0gPSAodW5zaWduZWQgY2hhcikod0hMZW4gPj4gOCk7CisgICAgTUlDX0hEUjFbMV0gPSAodW5zaWduZWQgY2hhcikod0hMZW4gJiAweGZmKTsKKyAgICBieVRtcCA9ICh1bnNpZ25lZCBjaGFyKShwTUFDSGVhZGVyLT53RnJhbWVDdGwgJiAweGZmKTsKICAgICBNSUNfSERSMVsyXSA9IGJ5VG1wICYgMHg4ZjsKLSAgICBieVRtcCA9IChCWVRFKShwTUFDSGVhZGVyLT53RnJhbWVDdGwgPj4gOCk7CisgICAgYnlUbXAgPSAodW5zaWduZWQgY2hhcikocE1BQ0hlYWRlci0+d0ZyYW1lQ3RsID4+IDgpOwogICAgIGJ5VG1wICY9IDB4ODc7CiAgICAgTUlDX0hEUjFbM10gPSBieVRtcCB8IDB4NDA7CiAgICAgbWVtY3B5KCYoTUlDX0hEUjFbNF0pLCBwTUFDSGVhZGVyLT5hYnlBZGRyMSwgRVRIX0FMRU4pOwpAQCAtMzA0LDcgKzMwNCw3IEBACiAKICAgICAvL01JQ19IRFIyCiAgICAgbWVtY3B5KCYoTUlDX0hEUjJbMF0pLCBwTUFDSGVhZGVyLT5hYnlBZGRyMywgRVRIX0FMRU4pOwotICAgIGJ5VG1wID0gKEJZVEUpKHBNQUNIZWFkZXItPndTZXFDdGwgJiAweGZmKTsKKyAgICBieVRtcCA9ICh1bnNpZ25lZCBjaGFyKShwTUFDSGVhZGVyLT53U2VxQ3RsICYgMHhmZik7CiAgICAgTUlDX0hEUjJbNl0gPSBieVRtcCAmIDB4MGY7CiAgICAgTUlDX0hEUjJbN10gPSAwOwogICAgIGlmICggYkE0ICkgewpAQCAtMzM3LDggKzMzNyw4IEBACiAKICAgICBmb3Ioamo9d1BheWxvYWRTaXplOyBqaj4xNjsgamo9amotMTYpIHsKIAotICAgICAgICBhYnlDVFJQTERbMTRdID0gKEJZVEUpICh3Q250ID4+IDgpOwotICAgICAgICBhYnlDVFJQTERbMTVdID0gKEJZVEUpICh3Q250ICYgMHhmZik7CisgICAgICAgIGFieUNUUlBMRFsxNF0gPSAodW5zaWduZWQgY2hhcikgKHdDbnQgPj4gOCk7CisgICAgICAgIGFieUNUUlBMRFsxNV0gPSAodW5zaWduZWQgY2hhcikgKHdDbnQgJiAweGZmKTsKIAogICAgICAgICBBRVN2MTI4KHBieVJ4S2V5LGFieUNUUlBMRCxhYnlUbXApOwogCkBAIC0zNjEsOCArMzYxLDggQEAKICAgICAgICAgYWJ5TGFzdENpcGhlcltpaV0gPSAweDAwOwogICAgIH0KIAotICAgIGFieUNUUlBMRFsxNF0gPSAoQllURSkgKHdDbnQgPj4gOCk7Ci0gICAgYWJ5Q1RSUExEWzE1XSA9IChCWVRFKSAod0NudCAmIDB4ZmYpOworICAgIGFieUNUUlBMRFsxNF0gPSAodW5zaWduZWQgY2hhcikgKHdDbnQgPj4gOCk7CisgICAgYWJ5Q1RSUExEWzE1XSA9ICh1bnNpZ25lZCBjaGFyKSAod0NudCAmIDB4ZmYpOwogCiAgICAgQUVTdjEyOChwYnlSeEtleSxhYnlDVFJQTEQsYWJ5VG1wKTsKICAgICBmb3IgKCBraz0wOyBrazwxNjsga2srKyApIHsKQEAgLTM4NCw4ICszODQsOCBAQAogICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIHdDbnQgPSAwOwotICAgIGFieUNUUlBMRFsxNF0gPSAoQllURSkgKHdDbnQgPj4gOCk7Ci0gICAgYWJ5Q1RSUExEWzE1XSA9IChCWVRFKSAod0NudCAmIDB4ZmYpOworICAgIGFieUNUUlBMRFsxNF0gPSAodW5zaWduZWQgY2hhcikgKHdDbnQgPj4gOCk7CisgICAgYWJ5Q1RSUExEWzE1XSA9ICh1bnNpZ25lZCBjaGFyKSAod0NudCAmIDB4ZmYpOwogICAgIEFFU3YxMjgocGJ5UnhLZXksYWJ5Q1RSUExELGFieVRtcCk7CiAgICAgZm9yICgga2s9MDsga2s8ODsga2srKyApIHsKICAgICAgICAgYWJ5VG1wW2trXSA9IGFieVRtcFtra10gXiBwYnlQYXlsb2FkW2trXTsKQEAgLTM5NCw5ICszOTQsOSBAQAogICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIGlmICggIW1lbWNtcChhYnlNSUMsYWJ5VG1wLDgpICkgewotICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Flc19jY21wLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Flc19jY21wLmgKaW5kZXggZjJiYTFkNS4uYzhiMjhiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9hZXNfY2NtcC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvYWVzX2NjbXAuaApAQCAtNDEsNiArNDEsNiBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBWYXJpYWJsZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLUJPT0wgQUVTYkdlbkNDTVAoUEJZVEUgcGJ5UnhLZXksIFBCWVRFIHBieUZyYW1lLCBXT1JEIHdGcmFtZVNpemUpOworYm9vbCBBRVNiR2VuQ0NNUCh1bnNpZ25lZCBjaGFyICpwYnlSeEtleSwgdW5zaWduZWQgY2hhciAqcGJ5RnJhbWUsIHVuc2lnbmVkIHNob3J0IHdGcmFtZVNpemUpOwogCiAjZW5kaWYgLy9fX0FFU19IX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvYmFzZWJhbmQuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvYmFzZWJhbmQuYwppbmRleCA1NDE0YzZjLi4xZTFjNmUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Jhc2ViYW5kLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9iYXNlYmFuZC5jCkBAIC03OSw3ICs3OSw3IEBACiAKIAogI2RlZmluZSBDQl9WVDMyNTNfSU5JVF9GT1JfUkZNRCA0NDYKLUJZVEUgYnlWVDMyNTNJbml0VGFiX1JGTURbQ0JfVlQzMjUzX0lOSVRfRk9SX1JGTURdWzJdID0gewordW5zaWduZWQgY2hhciBieVZUMzI1M0luaXRUYWJfUkZNRFtDQl9WVDMyNTNfSU5JVF9GT1JfUkZNRF1bMl0gPSB7CiAgICAgezB4MDAsIDB4MzB9LAogICAgIHsweDAxLCAweDAwfSwKICAgICB7MHgwMiwgMHgwMH0sCkBAIC01MjksNyArNTI5LDcgQEAKIH07CiAKICNkZWZpbmUgQ0JfVlQzMjUzQjBfSU5JVF9GT1JfUkZNRCAyNTYKLUJZVEUgYnlWVDMyNTNCMF9SRk1EW0NCX1ZUMzI1M0IwX0lOSVRfRk9SX1JGTURdWzJdID0gewordW5zaWduZWQgY2hhciBieVZUMzI1M0IwX1JGTURbQ0JfVlQzMjUzQjBfSU5JVF9GT1JfUkZNRF1bMl0gPSB7CiAgICAgezB4MDAsIDB4MzF9LAogICAgIHsweDAxLCAweDAwfSwKICAgICB7MHgwMiwgMHgwMH0sCkBAIC03OTAsNyArNzkwLDcgQEAKIAogI2RlZmluZSBDQl9WVDMyNTNCMF9BR0NfRk9SX1JGTUQyOTU5IDE5NQogLy8gRm9yIFJGTUQyOTU5Ci1CWVRFIGJ5VlQzMjUzQjBfQUdDNF9SRk1EMjk1OVtDQl9WVDMyNTNCMF9BR0NfRk9SX1JGTUQyOTU5XVsyXSA9IHsKK3Vuc2lnbmVkIGNoYXIgYnlWVDMyNTNCMF9BR0M0X1JGTUQyOTU5W0NCX1ZUMzI1M0IwX0FHQ19GT1JfUkZNRDI5NTldWzJdID0gewogICAgIHsweEYwLCAweDAwfSwKICAgICB7MHhGMSwgMHgzRX0sCiAgICAgezB4RjAsIDB4ODB9LApAQCAtOTkwLDcgKzk5MCw3IEBACiAKICNkZWZpbmUgQ0JfVlQzMjUzQjBfSU5JVF9GT1JfQUlST0hBMjIzMCAyNTYKIC8vIEZvciBBSVJPSEEKLUJZVEUgYnlWVDMyNTNCMF9BSVJPSEEyMjMwW0NCX1ZUMzI1M0IwX0lOSVRfRk9SX0FJUk9IQTIyMzBdWzJdID0gewordW5zaWduZWQgY2hhciBieVZUMzI1M0IwX0FJUk9IQTIyMzBbQ0JfVlQzMjUzQjBfSU5JVF9GT1JfQUlST0hBMjIzMF1bMl0gPSB7CiAgICAgezB4MDAsIDB4MzF9LAogICAgIHsweDAxLCAweDAwfSwKICAgICB7MHgwMiwgMHgwMH0sCkBAIC0xMjU0LDcgKzEyNTQsNyBAQAogCiAjZGVmaW5lIENCX1ZUMzI1M0IwX0lOSVRfRk9SX1VXMjQ1MSAyNTYKIC8vRm9yIFVXMjQ1MQotQllURSBieVZUMzI1M0IwX1VXMjQ1MVtDQl9WVDMyNTNCMF9JTklUX0ZPUl9VVzI0NTFdWzJdID0gewordW5zaWduZWQgY2hhciBieVZUMzI1M0IwX1VXMjQ1MVtDQl9WVDMyNTNCMF9JTklUX0ZPUl9VVzI0NTFdWzJdID0gewogICAgIHsweDAwLCAweDMxfSwKICAgICB7MHgwMSwgMHgwMH0sCiAgICAgezB4MDIsIDB4MDB9LApAQCAtMTUxNiw3ICsxNTE2LDcgQEAKIAogI2RlZmluZSBDQl9WVDMyNTNCMF9BR0MgMTkzCiAvLyBGb3IgQUlST0hBCi1CWVRFIGJ5VlQzMjUzQjBfQUdDW0NCX1ZUMzI1M0IwX0FHQ11bMl0gPSB7Cit1bnNpZ25lZCBjaGFyIGJ5VlQzMjUzQjBfQUdDW0NCX1ZUMzI1M0IwX0FHQ11bMl0gPSB7CiAgICAgezB4RjAsIDB4MDB9LAogICAgIHsweEYxLCAweDAwfSwKICAgICB7MHhGMCwgMHg4MH0sCkBAIC0xNzEyLDE0ICsxNzEyLDE0IEBACiAgICAgezB4RjAsIDB4MDB9LAogfTsKIAotY29uc3QgV09SRCBhd2NGcmFtZVRpbWVbTUFYX1JBVEVdID0KK2NvbnN0IHVuc2lnbmVkIHNob3J0IGF3Y0ZyYW1lVGltZVtNQVhfUkFURV0gPQogezEwLCAyMCwgNTUsIDExMCwgMjQsIDM2LCA0OCwgNzIsIDk2LCAxNDQsIDE5MiwgMjE2fTsKIAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMKLVVMT05HCit1bnNpZ25lZCBsb25nCiBzX3VsR2V0UmF0aW8oUFNEZXZpY2UgcERldmljZSk7CiAKIHN0YXRpYwpAQCAtMTc0MCwxMyArMTc0MCwxMyBAQAogI2VuZGlmCiAgICAgaWYgKCBwRGV2aWNlLT5kd1J4QW50ZW5uYVNlbCA9PSAwKSB7CiAgICAgICAgIHBEZXZpY2UtPmR3UnhBbnRlbm5hU2VsPTE7Ci0gICAgICAgIGlmIChwRGV2aWNlLT5iVHhSeEFudEludiA9PSBUUlVFKQorICAgICAgICBpZiAocERldmljZS0+YlR4UnhBbnRJbnYgPT0gdHJ1ZSkKICAgICAgICAgICAgIEJCdlNldFJ4QW50ZW5uYU1vZGUocERldmljZS0+UG9ydE9mZnNldCwgQU5UX0EpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBCQnZTZXRSeEFudGVubmFNb2RlKHBEZXZpY2UtPlBvcnRPZmZzZXQsIEFOVF9CKTsKICAgICB9IGVsc2UgewogICAgICAgICBwRGV2aWNlLT5kd1J4QW50ZW5uYVNlbD0wOwotICAgICAgICBpZiAocERldmljZS0+YlR4UnhBbnRJbnYgPT0gVFJVRSkKKyAgICAgICAgaWYgKHBEZXZpY2UtPmJUeFJ4QW50SW52ID09IHRydWUpCiAgICAgICAgICAgICBCQnZTZXRSeEFudGVubmFNb2RlKHBEZXZpY2UtPlBvcnRPZmZzZXQsIEFOVF9CKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgQkJ2U2V0UnhBbnRlbm5hTW9kZShwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBBTlRfQSk7CkBAIC0xNzc2LDE5ICsxNzc2LDE5IEBACiAgKiBSZXR1cm4gVmFsdWU6IEZyYW1lVGltZQogICoKICAqLwotVUlOVAordW5zaWduZWQgaW50CiBCQnVHZXRGcmFtZVRpbWUgKAotICAgIEJZVEUgYnlQcmVhbWJsZVR5cGUsCi0gICAgQllURSBieVBrdFR5cGUsCi0gICAgVUlOVCBjYkZyYW1lTGVuZ3RoLAotICAgIFdPUkQgd1JhdGUKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UHJlYW1ibGVUeXBlLAorICAgIHVuc2lnbmVkIGNoYXIgYnlQa3RUeXBlLAorICAgIHVuc2lnbmVkIGludCBjYkZyYW1lTGVuZ3RoLAorICAgIHVuc2lnbmVkIHNob3J0IHdSYXRlCiAgICAgKQogewotICAgIFVJTlQgdUZyYW1lVGltZTsKLSAgICBVSU5UIHVQcmVhbWJsZTsKLSAgICBVSU5UIHVUbXA7Ci0gICAgVUlOVCB1UmF0ZUlkeCA9IChVSU5UKXdSYXRlOwotICAgIFVJTlQgdVJhdGUgPSAwOworICAgIHVuc2lnbmVkIGludCB1RnJhbWVUaW1lOworICAgIHVuc2lnbmVkIGludCB1UHJlYW1ibGU7CisgICAgdW5zaWduZWQgaW50IHVUbXA7CisgICAgdW5zaWduZWQgaW50IHVSYXRlSWR4ID0gKHVuc2lnbmVkIGludCkgd1JhdGU7CisgICAgdW5zaWduZWQgaW50IHVSYXRlID0gMDsKIAogCiAgICAgaWYgKHVSYXRlSWR4ID4gUkFURV81NE0pIHsKQEAgLTE3OTYsNyArMTc5Niw3IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHVSYXRlID0gKFVJTlQpYXdjRnJhbWVUaW1lW3VSYXRlSWR4XTsKKyAgICB1UmF0ZSA9ICh1bnNpZ25lZCBpbnQpIGF3Y0ZyYW1lVGltZVt1UmF0ZUlkeF07CiAKICAgICBpZiAodVJhdGVJZHggPD0gMykgeyAgICAgICAgICAvL0NDSyBtb2RlCiAKQEAgLTE4NDYsMjMgKzE4NDYsMjMgQEAKIHZvaWQKIEJCdkNhY3VsYXRlUGFyYW1ldGVyICgKICAgICBQU0RldmljZSBwRGV2aWNlLAotICAgIFVJTlQgY2JGcmFtZUxlbmd0aCwKLSAgICBXT1JEIHdSYXRlLAotICAgIEJZVEUgYnlQYWNrZXRUeXBlLAotICAgIFBXT1JEIHB3UGh5TGVuLAotICAgIFBCWVRFIHBieVBoeVNydiwKLSAgICBQQllURSBwYnlQaHlTZ24KKyAgICB1bnNpZ25lZCBpbnQgY2JGcmFtZUxlbmd0aCwKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmF0ZSwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UGFja2V0VHlwZSwKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdQaHlMZW4sCisgICAgdW5zaWduZWQgY2hhciAqcGJ5UGh5U3J2LAorICAgIHVuc2lnbmVkIGNoYXIgKnBieVBoeVNnbgogICAgICkKIHsKLSAgICBVSU5UIGNiQml0Q291bnQ7Ci0gICAgVUlOVCBjYlVzQ291bnQgPSAwOwotICAgIFVJTlQgY2JUbXA7Ci0gICAgQk9PTCBiRXh0Qml0OwotICAgIEJZVEUgYnlQcmVhbWJsZVR5cGUgPSBwRGV2aWNlLT5ieVByZWFtYmxlVHlwZTsKLSAgICBCT09MIGJDQ0sgPSBwRGV2aWNlLT5iQ0NLOworICAgIHVuc2lnbmVkIGludCBjYkJpdENvdW50OworICAgIHVuc2lnbmVkIGludCBjYlVzQ291bnQgPSAwOworICAgIHVuc2lnbmVkIGludCBjYlRtcDsKKyAgICBib29sIGJFeHRCaXQ7CisgICAgdW5zaWduZWQgY2hhciBieVByZWFtYmxlVHlwZSA9IHBEZXZpY2UtPmJ5UHJlYW1ibGVUeXBlOworICAgIGJvb2wgYkNDSyA9IHBEZXZpY2UtPmJDQ0s7CiAKICAgICBjYkJpdENvdW50ID0gY2JGcmFtZUxlbmd0aCAqIDg7Ci0gICAgYkV4dEJpdCA9IEZBTFNFOworICAgIGJFeHRCaXQgPSBmYWxzZTsKIAogICAgIHN3aXRjaCAod1JhdGUpIHsKICAgICBjYXNlIFJBVEVfMU0gOgpAQCAtMTg3OSw3ICsxODc5LDcgQEAKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFJBVEVfNU0gOgotICAgICAgICBpZiAoYkNDSyA9PSBGQUxTRSkKKyAgICAgICAgaWYgKGJDQ0sgPT0gZmFsc2UpCiAgICAgICAgICAgICBjYkJpdENvdW50ICsrOwogICAgICAgICBjYlVzQ291bnQgPSAoY2JCaXRDb3VudCAqIDEwKSAvIDU1OwogICAgICAgICBjYlRtcCA9IChjYlVzQ291bnQgKiA1NSkgLyAxMDsKQEAgLTE4OTMsMTQgKzE4OTMsMTQgQEAKIAogICAgIGNhc2UgUkFURV8xMU0gOgogCi0gICAgICAgIGlmIChiQ0NLID09IEZBTFNFKQorICAgICAgICBpZiAoYkNDSyA9PSBmYWxzZSkKICAgICAgICAgICAgIGNiQml0Q291bnQgKys7CiAgICAgICAgIGNiVXNDb3VudCA9IGNiQml0Q291bnQgLyAxMTsKICAgICAgICAgY2JUbXAgPSBjYlVzQ291bnQgKiAxMTsKICAgICAgICAgaWYgKGNiVG1wICE9IGNiQml0Q291bnQpIHsKICAgICAgICAgICAgIGNiVXNDb3VudCArKzsKICAgICAgICAgICAgIGlmICgoY2JCaXRDb3VudCAtIGNiVG1wKSA8PSAzKQotICAgICAgICAgICAgICAgIGJFeHRCaXQgPSBUUlVFOworICAgICAgICAgICAgICAgIGJFeHRCaXQgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChieVByZWFtYmxlVHlwZSA9PSAxKQogICAgICAgICAgICAgKnBieVBoeVNnbiA9IDB4MGI7CkBAIC0xOTk0LDExICsxOTk0LDExIEBACiAgICAgICAgICpwYnlQaHlTcnYgPSAweDAwOwogICAgICAgICBpZiAoYkV4dEJpdCkKICAgICAgICAgICAgICpwYnlQaHlTcnYgPSAqcGJ5UGh5U3J2IHwgMHg4MDsKLSAgICAgICAgKnB3UGh5TGVuID0gKFdPUkQpY2JVc0NvdW50OworICAgICAgICAqcHdQaHlMZW4gPSAodW5zaWduZWQgc2hvcnQpY2JVc0NvdW50OwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgKnBieVBoeVNydiA9IDB4MDA7Ci0gICAgICAgICpwd1BoeUxlbiA9IChXT1JEKWNiRnJhbWVMZW5ndGg7CisgICAgICAgICpwd1BoeUxlbiA9ICh1bnNpZ25lZCBzaG9ydCljYkZyYW1lTGVuZ3RoOwogICAgIH0KIH0KIApAQCAtMjAxMiwxMyArMjAxMiwxMyBAQAogICogIE91dDoKICAqICAgICAgcGJ5RGF0YSAgICAgLSBkYXRhIHJlYWQKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2VlZGVkOyBGQUxTRSBpZiBmYWlsZWQuCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2VlZGVkOyBmYWxzZSBpZiBmYWlsZWQuCiAgKgogICovCi1CT09MIEJCYlJlYWRFbWJlZGVkIChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlCQkFkZHIsIFBCWVRFIHBieURhdGEpCitib29sIEJCYlJlYWRFbWJlZGVkICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5QkJBZGRyLCB1bnNpZ25lZCBjaGFyICpwYnlEYXRhKQogewotICAgIFdPUkQgICAgd3c7Ci0gICAgQllURSAgICBieVZhbHVlOworICAgIHVuc2lnbmVkIHNob3J0IHd3OworICAgIHVuc2lnbmVkIGNoYXIgYnlWYWx1ZTsKIAogICAgIC8vIEJCIHJlZyBvZmZzZXQKICAgICBWTlN2T3V0UG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX0JCUkVHQURSLCBieUJCQWRkcik7CkBAIC0yMDM4LDkgKzIwMzgsOSBAQAogICAgIGlmICh3dyA9PSBXX01BWF9USU1FT1VUKSB7CiAgICAgICAgIERCR19QT1JUODAoMHgzMCk7CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIERCR19QT1JUODAoMHgzMClcbiIpOwotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIApAQCAtMjA1NSwxMyArMjA1NSwxMyBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZWVkZWQ7IEZBTFNFIGlmIGZhaWxlZC4KKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZWVkZWQ7IGZhbHNlIGlmIGZhaWxlZC4KICAqCiAgKi8KLUJPT0wgQkJiV3JpdGVFbWJlZGVkIChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlCQkFkZHIsIEJZVEUgYnlEYXRhKQorYm9vbCBCQmJXcml0ZUVtYmVkZWQgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlCQkFkZHIsIHVuc2lnbmVkIGNoYXIgYnlEYXRhKQogewotICAgIFdPUkQgICAgd3c7Ci0gICAgQllURSAgICBieVZhbHVlOworICAgIHVuc2lnbmVkIHNob3J0IHd3OworICAgIHVuc2lnbmVkIGNoYXIgYnlWYWx1ZTsKIAogICAgIC8vIEJCIHJlZyBvZmZzZXQKICAgICBWTlN2T3V0UG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX0JCUkVHQURSLCBieUJCQWRkcik7CkBAIC0yMDgwLDkgKzIwODAsOSBAQAogICAgIGlmICh3dyA9PSBXX01BWF9USU1FT1VUKSB7CiAgICAgICAgIERCR19QT1JUODAoMHgzMSk7CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIERCR19QT1JUODAoMHgzMSlcbiIpOwotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIApAQCAtMjA5NywxMiArMjA5NywxMiBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBhbGwgVGVzdEJpdHMgYXJlIHNldDsgRkFMU0Ugb3RoZXJ3aXNlLgorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIGFsbCBUZXN0Qml0cyBhcmUgc2V0OyBmYWxzZSBvdGhlcndpc2UuCiAgKgogICovCi1CT09MIEJCYklzUmVnQml0c09uIChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlCQkFkZHIsIEJZVEUgYnlUZXN0Qml0cykKK2Jvb2wgQkJiSXNSZWdCaXRzT24gKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlCQkFkZHIsIHVuc2lnbmVkIGNoYXIgYnlUZXN0Qml0cykKIHsKLSAgICBCWVRFIGJ5T3JnRGF0YTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5T3JnRGF0YTsKIAogICAgIEJCYlJlYWRFbWJlZGVkKGR3SW9CYXNlLCBieUJCQWRkciwgJmJ5T3JnRGF0YSk7CiAgICAgcmV0dXJuIChieU9yZ0RhdGEgJiBieVRlc3RCaXRzKSA9PSBieVRlc3RCaXRzOwpAQCAtMjEyMCwxMiArMjEyMCwxMiBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBhbGwgVGVzdEJpdHMgYXJlIGNsZWFyOyBGQUxTRSBvdGhlcndpc2UuCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgYWxsIFRlc3RCaXRzIGFyZSBjbGVhcjsgZmFsc2Ugb3RoZXJ3aXNlLgogICoKICAqLwotQk9PTCBCQmJJc1JlZ0JpdHNPZmYgKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieUJCQWRkciwgQllURSBieVRlc3RCaXRzKQorYm9vbCBCQmJJc1JlZ0JpdHNPZmYgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlCQkFkZHIsIHVuc2lnbmVkIGNoYXIgYnlUZXN0Qml0cykKIHsKLSAgICBCWVRFIGJ5T3JnRGF0YTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5T3JnRGF0YTsKIAogICAgIEJCYlJlYWRFbWJlZGVkKGR3SW9CYXNlLCBieUJCQWRkciwgJmJ5T3JnRGF0YSk7CiAgICAgcmV0dXJuIChieU9yZ0RhdGEgJiBieVRlc3RCaXRzKSA9PSAwOwpAQCAtMjE0MiwxNyArMjE0MiwxNyBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZWVkZWQ7IEZBTFNFIGlmIGZhaWxlZC4KKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZWVkZWQ7IGZhbHNlIGlmIGZhaWxlZC4KICAqCiAgKi8KIAotQk9PTCBCQmJWVDMyNTNJbml0IChQU0RldmljZSBwRGV2aWNlKQorYm9vbCBCQmJWVDMyNTNJbml0IChQU0RldmljZSBwRGV2aWNlKQogewotICAgIEJPT0wgICAgICAgYlJlc3VsdCA9IFRSVUU7CisgICAgYm9vbCBiUmVzdWx0ID0gdHJ1ZTsKICAgICBpbnQgICAgICAgIGlpOwotICAgIERXT1JEX1BUUiAgZHdJb0Jhc2UgPSBwRGV2aWNlLT5Qb3J0T2Zmc2V0OwotICAgIEJZVEUgICAgICAgYnlSRlR5cGUgPSBwRGV2aWNlLT5ieVJGVHlwZTsKLSAgICBCWVRFICAgICAgIGJ5TG9jYWxJRCA9IHBEZXZpY2UtPmJ5TG9jYWxJRDsKKyAgICB1bnNpZ25lZCBsb25nIGR3SW9CYXNlID0gcERldmljZS0+UG9ydE9mZnNldDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UkZUeXBlID0gcERldmljZS0+YnlSRlR5cGU7CisgICAgdW5zaWduZWQgY2hhciBieUxvY2FsSUQgPSBwRGV2aWNlLT5ieUxvY2FsSUQ7CiAKICAgICBpZiAoYnlSRlR5cGUgPT0gUkZfUkZNRDI5NTkpIHsKICAgICAgICAgaWYgKGJ5TG9jYWxJRCA8PSBSRVZfSURfVlQzMjUzX0ExKSB7CkBAIC0yMjk0LDcgKzIyOTQsNyBAQAogICAgIC8vfX0gUm9iZXJ0WXUKICAgICB9IGVsc2UgewogICAgIAkvLyBObyBWR0EgVGFibGUgbm93Ci0gICAgCXBEZXZpY2UtPmJVcGRhdGVCQlZHQSA9IEZBTFNFOworICAgIAlwRGV2aWNlLT5iVXBkYXRlQkJWR0EgPSBmYWxzZTsKICAgICAgICAgcERldmljZS0+YWJ5QkJWR0FbMF0gPSAweDFDOwogICAgIH0KIApAQCAtMjMyMSwxMiArMjMyMSwxMiBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIEJCdlJlYWRBbGxSZWdzIChEV09SRF9QVFIgZHdJb0Jhc2UsIFBCWVRFIHBieUJCUmVncykKK3ZvaWQgQkJ2UmVhZEFsbFJlZ3MgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgKnBieUJCUmVncykKIHsKICAgICBpbnQgIGlpOwotICAgIEJZVEUgYnlCYXNlID0gMTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5QmFzZSA9IDE7CiAgICAgZm9yIChpaSA9IDA7IGlpIDwgQkJfTUFYX0NPTlRFWFRfU0laRTsgaWkrKykgewotICAgICAgICBCQmJSZWFkRW1iZWRlZChkd0lvQmFzZSwgKEJZVEUpKGlpKmJ5QmFzZSksIHBieUJCUmVncyk7CisgICAgICAgIEJCYlJlYWRFbWJlZGVkKGR3SW9CYXNlLCAodW5zaWduZWQgY2hhcikoaWkqYnlCYXNlKSwgcGJ5QkJSZWdzKTsKICAgICAgICAgcGJ5QkJSZWdzICs9IGJ5QmFzZTsKICAgICB9CiB9CkBAIC0yMzQ4LDggKzIzNDgsOCBAQAogCiB2b2lkIEJCdkxvb3BiYWNrT24gKFBTRGV2aWNlIHBEZXZpY2UpCiB7Ci0gICAgQllURSAgICAgIGJ5RGF0YTsKLSAgICBEV09SRF9QVFIgZHdJb0Jhc2UgPSBwRGV2aWNlLT5Qb3J0T2Zmc2V0OworICAgIHVuc2lnbmVkIGNoYXIgYnlEYXRhOworICAgIHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UgPSBwRGV2aWNlLT5Qb3J0T2Zmc2V0OwogCiAgICAgLy9DUiBDOSA9IDB4MDAKICAgICBCQmJSZWFkRW1iZWRlZChkd0lvQmFzZSwgMHhDOSwgJnBEZXZpY2UtPmJ5QkJDUmM5KTsvL0NSMjAxCkBAIC0yMzYzLDcgKzIzNjMsNyBAQAogICAgIGlmIChwRGV2aWNlLT51Q29ubmVjdGlvblJhdGUgPD0gUkFURV8xMU0pIHsgLy9DQ0sKICAgICAgICAgLy8gRW5hYmxlIGludGVybmFsIGRpZ2l0YWwgbG9vcGJhY2s6IENSMzMgfD0gMDAwMCAwMDAxCiAgICAgICAgIEJCYlJlYWRFbWJlZGVkKGR3SW9CYXNlLCAweDIxLCAmYnlEYXRhKTsvL0NSMzMKLSAgICAgICAgQkJiV3JpdGVFbWJlZGVkKGR3SW9CYXNlLCAweDIxLCAoQllURSkoYnlEYXRhIHwgMHgwMSkpOy8vQ1IzMworICAgICAgICBCQmJXcml0ZUVtYmVkZWQoZHdJb0Jhc2UsIDB4MjEsICh1bnNpZ25lZCBjaGFyKShieURhdGEgfCAweDAxKSk7Ly9DUjMzCiAgICAgICAgIC8vIENSMTU0ID0gMHgwMAogICAgICAgICBCQmJXcml0ZUVtYmVkZWQoZHdJb0Jhc2UsIDB4OUEsIDApOyAgIC8vQ1IxNTQKIApAQCAtMjM3Miw3ICsyMzcyLDcgQEAKICAgICBlbHNlIHsgLy9PRkRNCiAgICAgICAgIC8vIEVuYWJsZSBpbnRlcm5hbCBkaWdpdGFsIGxvb3BiYWNrOkNSMTU0IHw9IDAwMDAgMDAwMQogICAgICAgICBCQmJSZWFkRW1iZWRlZChkd0lvQmFzZSwgMHg5QSwgJmJ5RGF0YSk7Ly9DUjE1NAotICAgICAgICBCQmJXcml0ZUVtYmVkZWQoZHdJb0Jhc2UsIDB4OUEsIChCWVRFKShieURhdGEgfCAweDAxKSk7Ly9DUjE1NAorICAgICAgICBCQmJXcml0ZUVtYmVkZWQoZHdJb0Jhc2UsIDB4OUEsICh1bnNpZ25lZCBjaGFyKShieURhdGEgfCAweDAxKSk7Ly9DUjE1NAogICAgICAgICAvLyBDUjMzID0gMHgwMAogICAgICAgICBCQmJXcml0ZUVtYmVkZWQoZHdJb0Jhc2UsIDB4MjEsIDApOyAgIC8vQ1IzMwogCkBAIC0yMzg0LDcgKzIzODQsNyBAQAogCiAgICAgLy8gRGlzYWJsZSBUWF9JUVVOCiAgICAgQkJiUmVhZEVtYmVkZWQocERldmljZS0+UG9ydE9mZnNldCwgMHgwOSwgJnBEZXZpY2UtPmJ5QkJDUjA5KTsKLSAgICBCQmJXcml0ZUVtYmVkZWQocERldmljZS0+UG9ydE9mZnNldCwgMHgwOSwgKEJZVEUpKHBEZXZpY2UtPmJ5QkJDUjA5ICYgMHhERSkpOworICAgIEJCYldyaXRlRW1iZWRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCAweDA5LCAodW5zaWduZWQgY2hhcikocERldmljZS0+YnlCQkNSMDkgJiAweERFKSk7CiB9CiAKIC8qCkBAIC0yNDAyLDggKzI0MDIsOCBAQAogICovCiB2b2lkIEJCdkxvb3BiYWNrT2ZmIChQU0RldmljZSBwRGV2aWNlKQogewotICAgIEJZVEUgICAgICBieURhdGE7Ci0gICAgRFdPUkRfUFRSIGR3SW9CYXNlID0gcERldmljZS0+UG9ydE9mZnNldDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RGF0YTsKKyAgICB1bnNpZ25lZCBsb25nIGR3SW9CYXNlID0gcERldmljZS0+UG9ydE9mZnNldDsKIAogICAgIEJCYldyaXRlRW1iZWRlZChkd0lvQmFzZSwgMHhDOSwgcERldmljZS0+YnlCQkNSYzkpOy8vQ1IyMDEKICAgICBCQmJXcml0ZUVtYmVkZWQoZHdJb0Jhc2UsIDB4ODgsIHBEZXZpY2UtPmJ5QkJDUjg4KTsvL0NSMTM2CkBAIC0yNDEzLDE0ICsyNDEzLDE0IEBACiAgICAgaWYgKHBEZXZpY2UtPnVDb25uZWN0aW9uUmF0ZSA8PSBSQVRFXzExTSkgeyAvLyBDQ0sKICAgICAgICAgLy8gU2V0IHRoZSBDUjMzIEJpdDIgdG8gZGlzYWJsZSBpbnRlcm5hbCBMb29wYmFjay4KICAgICAgICAgQkJiUmVhZEVtYmVkZWQoZHdJb0Jhc2UsIDB4MjEsICZieURhdGEpOy8vQ1IzMwotICAgICAgICBCQmJXcml0ZUVtYmVkZWQoZHdJb0Jhc2UsIDB4MjEsIChCWVRFKShieURhdGEgJiAweEZFKSk7Ly9DUjMzCisgICAgICAgIEJCYldyaXRlRW1iZWRlZChkd0lvQmFzZSwgMHgyMSwgKHVuc2lnbmVkIGNoYXIpKGJ5RGF0YSAmIDB4RkUpKTsvL0NSMzMKICAgICB9CiAgICAgZWxzZSB7IC8vIE9GRE0KICAgICAgICAgQkJiUmVhZEVtYmVkZWQoZHdJb0Jhc2UsIDB4OUEsICZieURhdGEpOy8vQ1IxNTQKLSAgICAgICAgQkJiV3JpdGVFbWJlZGVkKGR3SW9CYXNlLCAweDlBLCAoQllURSkoYnlEYXRhICYgMHhGRSkpOy8vQ1IxNTQKKyAgICAgICAgQkJiV3JpdGVFbWJlZGVkKGR3SW9CYXNlLCAweDlBLCAodW5zaWduZWQgY2hhcikoYnlEYXRhICYgMHhGRSkpOy8vQ1IxNTQKICAgICB9CiAgICAgQkJiUmVhZEVtYmVkZWQoZHdJb0Jhc2UsIDB4MEUsICZieURhdGEpOy8vQ1IxNAotICAgIEJCYldyaXRlRW1iZWRlZChkd0lvQmFzZSwgMHgwRSwgKEJZVEUpKGJ5RGF0YSB8IDB4ODApKTsvL0NSMTQKKyAgICBCQmJXcml0ZUVtYmVkZWQoZHdJb0Jhc2UsIDB4MEUsICh1bnNpZ25lZCBjaGFyKShieURhdGEgfCAweDgwKSk7Ly9DUjE0CiAKIH0KIApAQCAtMjQ0MSw4ICsyNDQxLDggQEAKIHZvaWQKIEJCdlNldFNob3J0U2xvdFRpbWUgKFBTRGV2aWNlIHBEZXZpY2UpCiB7Ci0gICAgQllURSBieUJCUnhDb25mPTA7Ci0gICAgQllURSBieUJCVkdBPTA7CisgICAgdW5zaWduZWQgY2hhciBieUJCUnhDb25mPTA7CisgICAgdW5zaWduZWQgY2hhciBieUJCVkdBPTA7CiAKICAgICBCQmJSZWFkRW1iZWRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCAweDBBLCAmYnlCQlJ4Q29uZik7Ly9DUjEwCiAKQEAgLTI0NjIsOSArMjQ2Miw5IEBACiAKIH0KIAotdm9pZCBCQnZTZXRWR0FHYWluT2Zmc2V0KFBTRGV2aWNlIHBEZXZpY2UsIEJZVEUgYnlEYXRhKQordm9pZCBCQnZTZXRWR0FHYWluT2Zmc2V0KFBTRGV2aWNlIHBEZXZpY2UsIHVuc2lnbmVkIGNoYXIgYnlEYXRhKQogewotICAgIEJZVEUgYnlCQlJ4Q29uZj0wOworICAgIHVuc2lnbmVkIGNoYXIgYnlCQlJ4Q29uZj0wOwogCiAgICAgQkJiV3JpdGVFbWJlZGVkKHBEZXZpY2UtPlBvcnRPZmZzZXQsIDB4RTcsIGJ5RGF0YSk7CiAKQEAgLTI0OTUsNyArMjQ5NSw3IEBACiAgKgogICovCiB2b2lkCi1CQnZTb2Z0d2FyZVJlc2V0IChEV09SRF9QVFIgZHdJb0Jhc2UpCitCQnZTb2Z0d2FyZVJlc2V0ICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlKQogewogICAgIEJCYldyaXRlRW1iZWRlZChkd0lvQmFzZSwgMHg1MCwgMHg0MCk7CiAgICAgQkJiV3JpdGVFbWJlZGVkKGR3SW9CYXNlLCAweDUwLCAwKTsKQEAgLTI1MTYsOSArMjUxNiw5IEBACiAgKgogICovCiB2b2lkCi1CQnZQb3dlclNhdmVNb2RlT04gKERXT1JEX1BUUiBkd0lvQmFzZSkKK0JCdlBvd2VyU2F2ZU1vZGVPTiAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSkKIHsKLSAgICBCWVRFIGJ5T3JnRGF0YTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5T3JnRGF0YTsKIAogICAgIEJCYlJlYWRFbWJlZGVkKGR3SW9CYXNlLCAweDBELCAmYnlPcmdEYXRhKTsKICAgICBieU9yZ0RhdGEgfD0gQklUMDsKQEAgLTI1MzgsOSArMjUzOCw5IEBACiAgKgogICovCiB2b2lkCi1CQnZQb3dlclNhdmVNb2RlT0ZGIChEV09SRF9QVFIgZHdJb0Jhc2UpCitCQnZQb3dlclNhdmVNb2RlT0ZGICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlKQogewotICAgIEJZVEUgYnlPcmdEYXRhOworICAgIHVuc2lnbmVkIGNoYXIgYnlPcmdEYXRhOwogCiAgICAgQkJiUmVhZEVtYmVkZWQoZHdJb0Jhc2UsIDB4MEQsICZieU9yZ0RhdGEpOwogICAgIGJ5T3JnRGF0YSAmPSB+KEJJVDApOwpAQCAtMjU2Miw5ICsyNTYyLDkgQEAKICAqLwogCiB2b2lkCi1CQnZTZXRUeEFudGVubmFNb2RlIChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlBbnRlbm5hTW9kZSkKK0JCdlNldFR4QW50ZW5uYU1vZGUgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlBbnRlbm5hTW9kZSkKIHsKLSAgICBCWVRFIGJ5QkJUeENvbmY7CisgICAgdW5zaWduZWQgY2hhciBieUJCVHhDb25mOwogCiAjaWZkZWYJUExJQ0VfREVCVUcKIAkvL3ByaW50aygiRW50ZXIgQkJ2U2V0VHhBbnRlbm5hTW9kZVxuIik7CkBAIC0yNjA0LDkgKzI2MDQsOSBAQAogICovCiAKIHZvaWQKLUJCdlNldFJ4QW50ZW5uYU1vZGUgKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieUFudGVubmFNb2RlKQorQkJ2U2V0UnhBbnRlbm5hTW9kZSAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUFudGVubmFNb2RlKQogewotICAgIEJZVEUgYnlCQlJ4Q29uZjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5QkJSeENvbmY7CiAKICAgICBCQmJSZWFkRW1iZWRlZChkd0lvQmFzZSwgMHgwQSwgJmJ5QkJSeENvbmYpOy8vQ1IxMAogICAgIGlmIChieUFudGVubmFNb2RlID09IEFOVF9ESVZFUlNJVFkpIHsKQEAgLTI2MzUsMTQgKzI2MzUsMTQgQEAKICAqCiAgKi8KIHZvaWQKLUJCdlNldERlZXBTbGVlcCAoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5TG9jYWxJRCkKK0JCdlNldERlZXBTbGVlcCAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUxvY2FsSUQpCiB7CiAgICAgQkJiV3JpdGVFbWJlZGVkKGR3SW9CYXNlLCAweDBDLCAweDE3KTsvL0NSMTIKICAgICBCQmJXcml0ZUVtYmVkZWQoZHdJb0Jhc2UsIDB4MEQsIDB4QjkpOy8vQ1IxMwogfQogCiB2b2lkCi1CQnZFeGl0RGVlcFNsZWVwIChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlMb2NhbElEKQorQkJ2RXhpdERlZXBTbGVlcCAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUxvY2FsSUQpCiB7CiAgICAgQkJiV3JpdGVFbWJlZGVkKGR3SW9CYXNlLCAweDBDLCAweDAwKTsvL0NSMTIKICAgICBCQmJXcml0ZUVtYmVkZWQoZHdJb0Jhc2UsIDB4MEQsIDB4MDEpOy8vQ1IxMwpAQCAtMjY1MSwxMiArMjY1MSwxMiBAQAogCiAKIHN0YXRpYwotVUxPTkcKK3Vuc2lnbmVkIGxvbmcKIHNfdWxHZXRSYXRpbyAoUFNEZXZpY2UgcERldmljZSkKIHsKLVVMT05HICAgdWxSYXRpbyA9IDA7Ci1VTE9ORyAgIHVsTWF4UGFja2V0OwotVUxPTkcgICB1bFBhY2tldE51bTsKK3Vuc2lnbmVkIGxvbmcgdWxSYXRpbyA9IDA7Cit1bnNpZ25lZCBsb25nIHVsTWF4UGFja2V0OwordW5zaWduZWQgbG9uZyB1bFBhY2tldE51bTsKIAogICAgIC8vVGhpcyBpcyBhIHRob3VzYW5kLXJhdGlvCiAgICAgdWxNYXhQYWNrZXQgPSBwRGV2aWNlLT51TnVtU1EzW1JBVEVfNTRNXTsKQEAgLTI3NjIsNyArMjc2Miw3IEBACiB2b2lkCiBCQnZDbGVhckFudERpdlNRM1ZhbHVlIChQU0RldmljZSBwRGV2aWNlKQogewotICAgIFVJTlQgICAgaWk7CisgICAgdW5zaWduZWQgaW50IGlpOwogCiAgICAgcERldmljZS0+dURpdmVyc2l0eUNudCA9IDA7CiAgICAgZm9yIChpaSA9IDA7IGlpIDwgTUFYX1JBVEU7IGlpKyspIHsKQEAgLTI3ODcsNyArMjc4Nyw3IEBACiAgKi8KIAogdm9pZAotQkJ2QW50ZW5uYURpdmVyc2l0eSAoUFNEZXZpY2UgcERldmljZSwgQllURSBieVJ4UmF0ZSwgQllURSBieVNRMykKK0JCdkFudGVubmFEaXZlcnNpdHkgKFBTRGV2aWNlIHBEZXZpY2UsIHVuc2lnbmVkIGNoYXIgYnlSeFJhdGUsIHVuc2lnbmVkIGNoYXIgYnlTUTMpCiB7CiAKICAgICBpZiAoKGJ5UnhSYXRlID49IE1BWF9SQVRFKSB8fCAocERldmljZS0+d0FudERpdmVyc2l0eU1heFJhdGUgPj0gTUFYX1JBVEUpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Jhc2ViYW5kLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Jhc2ViYW5kLmgKaW5kZXggYjIzNmZmNC4uODI5NGJkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9iYXNlYmFuZC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvYmFzZWJhbmQuaApAQCAtMTE4LDQ1ICsxMTgsNDUgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotVUlOVAordW5zaWduZWQgaW50CiBCQnVHZXRGcmFtZVRpbWUoCi0gICAgQllURSBieVByZWFtYmxlVHlwZSwKLSAgICBCWVRFIGJ5UGt0VHlwZSwKLSAgICBVSU5UIGNiRnJhbWVMZW5ndGgsCi0gICAgV09SRCB3UmF0ZQorICAgIHVuc2lnbmVkIGNoYXIgYnlQcmVhbWJsZVR5cGUsCisgICAgdW5zaWduZWQgY2hhciBieVBrdFR5cGUsCisgICAgdW5zaWduZWQgaW50IGNiRnJhbWVMZW5ndGgsCisgICAgdW5zaWduZWQgc2hvcnQgd1JhdGUKICAgICApOwogCiB2b2lkCiBCQnZDYWN1bGF0ZVBhcmFtZXRlciAoCiAgICAgUFNEZXZpY2UgcERldmljZSwKLSAgICBVSU5UIGNiRnJhbWVMZW5ndGgsCi0gICAgV09SRCB3UmF0ZSwKLSAgICBCWVRFIGJ5UGFja2V0VHlwZSwKLSAgICBQV09SRCBwd1BoeUxlbiwKLSAgICBQQllURSBwYnlQaHlTcnYsCi0gICAgUEJZVEUgcGJ5UGh5U2duCisgICAgdW5zaWduZWQgaW50IGNiRnJhbWVMZW5ndGgsCisgICAgdW5zaWduZWQgc2hvcnQgd1JhdGUsCisgICAgdW5zaWduZWQgY2hhciBieVBhY2tldFR5cGUsCisgICAgdW5zaWduZWQgc2hvcnQgKnB3UGh5TGVuLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieVBoeVNydiwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlQaHlTZ24KICAgICApOwogCi1CT09MIEJCYlJlYWRFbWJlZGVkKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieUJCQWRkciwgUEJZVEUgcGJ5RGF0YSk7Ci1CT09MIEJCYldyaXRlRW1iZWRlZChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlCQkFkZHIsIEJZVEUgYnlEYXRhKTsKK2Jvb2wgQkJiUmVhZEVtYmVkZWQodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUJCQWRkciwgdW5zaWduZWQgY2hhciAqcGJ5RGF0YSk7Citib29sIEJCYldyaXRlRW1iZWRlZCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5QkJBZGRyLCB1bnNpZ25lZCBjaGFyIGJ5RGF0YSk7CiAKLXZvaWQgQkJ2UmVhZEFsbFJlZ3MoRFdPUkRfUFRSIGR3SW9CYXNlLCBQQllURSBwYnlCQlJlZ3MpOwordm9pZCBCQnZSZWFkQWxsUmVncyh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyICpwYnlCQlJlZ3MpOwogdm9pZCBCQnZMb29wYmFja09uKFBTRGV2aWNlIHBEZXZpY2UpOwogdm9pZCBCQnZMb29wYmFja09mZihQU0RldmljZSBwRGV2aWNlKTsKIHZvaWQgQkJ2U2V0U2hvcnRTbG90VGltZShQU0RldmljZSBwRGV2aWNlKTsKLUJPT0wgQkJiSXNSZWdCaXRzT24oRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5QkJBZGRyLCBCWVRFIGJ5VGVzdEJpdHMpOwotQk9PTCBCQmJJc1JlZ0JpdHNPZmYoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5QkJBZGRyLCBCWVRFIGJ5VGVzdEJpdHMpOwotdm9pZCBCQnZTZXRWR0FHYWluT2Zmc2V0KFBTRGV2aWNlIHBEZXZpY2UsIEJZVEUgYnlEYXRhKTsKK2Jvb2wgQkJiSXNSZWdCaXRzT24odW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUJCQWRkciwgdW5zaWduZWQgY2hhciBieVRlc3RCaXRzKTsKK2Jvb2wgQkJiSXNSZWdCaXRzT2ZmKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlCQkFkZHIsIHVuc2lnbmVkIGNoYXIgYnlUZXN0Qml0cyk7Cit2b2lkIEJCdlNldFZHQUdhaW5PZmZzZXQoUFNEZXZpY2UgcERldmljZSwgdW5zaWduZWQgY2hhciBieURhdGEpOwogCiAvLyBWVDMyNTMgQmFzZWJhbmQKLUJPT0wgQkJiVlQzMjUzSW5pdChQU0RldmljZSBwRGV2aWNlKTsKLXZvaWQgQkJ2U29mdHdhcmVSZXNldChEV09SRF9QVFIgZHdJb0Jhc2UpOwotdm9pZCBCQnZQb3dlclNhdmVNb2RlT04oRFdPUkRfUFRSIGR3SW9CYXNlKTsKLXZvaWQgQkJ2UG93ZXJTYXZlTW9kZU9GRihEV09SRF9QVFIgZHdJb0Jhc2UpOwotdm9pZCBCQnZTZXRUeEFudGVubmFNb2RlKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieUFudGVubmFNb2RlKTsKLXZvaWQgQkJ2U2V0UnhBbnRlbm5hTW9kZShEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlBbnRlbm5hTW9kZSk7Ci12b2lkIEJCdlNldERlZXBTbGVlcChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlMb2NhbElEKTsKLXZvaWQgQkJ2RXhpdERlZXBTbGVlcChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlMb2NhbElEKTsKK2Jvb2wgQkJiVlQzMjUzSW5pdChQU0RldmljZSBwRGV2aWNlKTsKK3ZvaWQgQkJ2U29mdHdhcmVSZXNldCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlKTsKK3ZvaWQgQkJ2UG93ZXJTYXZlTW9kZU9OKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UpOwordm9pZCBCQnZQb3dlclNhdmVNb2RlT0ZGKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UpOwordm9pZCBCQnZTZXRUeEFudGVubmFNb2RlKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlBbnRlbm5hTW9kZSk7Cit2b2lkIEJCdlNldFJ4QW50ZW5uYU1vZGUodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUFudGVubmFNb2RlKTsKK3ZvaWQgQkJ2U2V0RGVlcFNsZWVwKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlMb2NhbElEKTsKK3ZvaWQgQkJ2RXhpdERlZXBTbGVlcCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5TG9jYWxJRCk7CiAKIC8vIHRpbWVyIGZvciBhbnRlbm5hIGRpdmVyc2l0eQogCkBAIC0xNzAsNyArMTcwLDcgQEAKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dAogICAgICk7CiAKLXZvaWQgQkJ2QW50ZW5uYURpdmVyc2l0eShQU0RldmljZSBwRGV2aWNlLCBCWVRFIGJ5UnhSYXRlLCBCWVRFIGJ5U1EzKTsKK3ZvaWQgQkJ2QW50ZW5uYURpdmVyc2l0eShQU0RldmljZSBwRGV2aWNlLCB1bnNpZ25lZCBjaGFyIGJ5UnhSYXRlLCB1bnNpZ25lZCBjaGFyIGJ5U1EzKTsKIHZvaWQKIEJCdkNsZWFyQW50RGl2U1EzVmFsdWUgKFBTRGV2aWNlIHBEZXZpY2UpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Jzc2RiLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Jzc2RiLmMKaW5kZXggNjMxMmE1NS4uNTdjMWNjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9ic3NkYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvYnNzZGIuYwpAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgImJhc2ViYW5kLmgiCiAjaW5jbHVkZSAicmYuaCIKICNpbmNsdWRlICJjYXJkLmgiCisjaW5jbHVkZSAiY2hhbm5lbC5oIgogI2luY2x1ZGUgIm1hYy5oIgogI2luY2x1ZGUgIndwYTIuaCIKICNpbmNsdWRlICJpb3dwYS5oIgpAQCAtNzEsMTQgKzcyLDE0IEBACiAKIAogCi1jb25zdCBXT1JEICAgICAgICAgICAgIGF3SFdSZXRyeTBbNV1bNV0gPSB7Citjb25zdCB1bnNpZ25lZCBzaG9ydCBhd0hXUmV0cnkwWzVdWzVdID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7UkFURV8xOE0sIFJBVEVfMThNLCBSQVRFXzEyTSwgUkFURV8xMk0sIFJBVEVfMTJNfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1JBVEVfMjRNLCBSQVRFXzI0TSwgUkFURV8xOE0sIFJBVEVfMTJNLCBSQVRFXzEyTX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtSQVRFXzM2TSwgUkFURV8zNk0sIFJBVEVfMjRNLCBSQVRFXzE4TSwgUkFURV8xOE19LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7UkFURV80OE0sIFJBVEVfNDhNLCBSQVRFXzM2TSwgUkFURV8yNE0sIFJBVEVfMjRNfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1JBVEVfNTRNLCBSQVRFXzU0TSwgUkFURV80OE0sIFJBVEVfMzZNLCBSQVRFXzM2TX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwotY29uc3QgV09SRCAgICAgICAgICAgICBhd0hXUmV0cnkxWzVdWzVdID0geworY29uc3QgdW5zaWduZWQgc2hvcnQgYXdIV1JldHJ5MVs1XVs1XSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1JBVEVfMThNLCBSQVRFXzE4TSwgUkFURV8xMk0sIFJBVEVfNk0sIFJBVEVfNk19LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7UkFURV8yNE0sIFJBVEVfMjRNLCBSQVRFXzE4TSwgUkFURV82TSwgUkFURV82TX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtSQVRFXzM2TSwgUkFURV8zNk0sIFJBVEVfMjRNLCBSQVRFXzEyTSwgUkFURV8xMk19LApAQCAtMTI2LDI1ICsxMjcsMjUgQEAKIFBLbm93bkJTUwogQlNTcFNlYXJjaEJTU0xpc3QoCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQsCi0gICAgUEJZVEUgcGJ5RGVzaXJlQlNTSUQsCi0gICAgUEJZVEUgcGJ5RGVzaXJlU1NJRCwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlEZXNpcmVCU1NJRCwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlEZXNpcmVTU0lELAogICAgIENBUkRfUEhZX1RZUEUgIGVQaHlUeXBlCiAgICAgKQogewogICAgIFBTRGV2aWNlICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKWhEZXZpY2VDb250ZXh0OwogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwotICAgIFBCWVRFICAgICAgICAgICBwYnlCU1NJRCA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciAqcGJ5QlNTSUQgPSBOVUxMOwogICAgIFBXTEFOX0lFX1NTSUQgICBwU1NJRCA9IE5VTEw7CiAgICAgUEtub3duQlNTICAgICAgIHBDdXJyQlNTID0gTlVMTDsKICAgICBQS25vd25CU1MgICAgICAgcFNlbGVjdCA9IE5VTEw7Ci1CWVRFICAgICAgICAgICAgICAgICBaZXJvQlNTSURbV0xBTl9CU1NJRF9MRU5dPXsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH07Ci0gICAgVUlOVCAgICAgICAgICAgIGlpID0gMDsKLS8vICAgIFVJTlQgICAgICAgICAgICBqaiA9IDA7ICAgLy9EYXZpZFdhbmcKKyAgICB1bnNpZ25lZCBjaGFyIFplcm9CU1NJRFtXTEFOX0JTU0lEX0xFTl09ezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfTsKKyAgICB1bnNpZ25lZCBpbnQgaWkgPSAwOworCiAgICAgaWYgKHBieURlc2lyZUJTU0lEICE9IE5VTEwpIHsKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJCU1NwU2VhcmNoQlNTTGlzdCBCU1NJRFslMDJYICUwMlggJTAyWC0lMDJYICUwMlggJTAyWF1cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBieURlc2lyZUJTU0lELCoocGJ5RGVzaXJlQlNTSUQrMSksKihwYnlEZXNpcmVCU1NJRCsyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKHBieURlc2lyZUJTU0lEKzMpLCoocGJ5RGVzaXJlQlNTSUQrNCksKihwYnlEZXNpcmVCU1NJRCs1KSk7Ci0gICAgICAgIGlmICgoIUlTX0JST0FEQ0FTVF9BRERSRVNTKHBieURlc2lyZUJTU0lEKSkgJiYKKyAgICAgICAgaWYgKCghaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIocGJ5RGVzaXJlQlNTSUQpKSAmJgogCSAgICAgKG1lbWNtcChwYnlEZXNpcmVCU1NJRCwgWmVyb0JTU0lELCA2KSE9IDApKXsKICAgICAgICAgICAgIHBieUJTU0lEID0gcGJ5RGVzaXJlQlNTSUQ7CiAgICAgICAgIH0KQEAgLTE1OSwxMCArMTYwLDEwIEBACiAgICAgICAgIC8vIG1hdGNoIEJTU0lEIGZpcnN0CiAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8TUFYX0JTU19OVU07IGlpKyspIHsKICAgICAgICAgICAgIHBDdXJyQlNTID0gJihwTWdtdC0+c0JTU0xpc3RbaWldKTsKLWlmKHBEZXZpY2UtPmJMaW5rUGFzcz09RkFMU0UpIHBDdXJyQlNTLT5iU2VsZWN0ZWQgPSBGQUxTRTsKK2lmKHBEZXZpY2UtPmJMaW5rUGFzcz09ZmFsc2UpIHBDdXJyQlNTLT5iU2VsZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgIGlmICgocEN1cnJCU1MtPmJBY3RpdmUpICYmCi0gICAgICAgICAgICAgICAgKHBDdXJyQlNTLT5iU2VsZWN0ZWQgPT0gRkFMU0UpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKElTX0VUSF9BRERSRVNTX0VRVUFMKHBDdXJyQlNTLT5hYnlCU1NJRCwgcGJ5QlNTSUQpKSB7CisgICAgICAgICAgICAgICAgKHBDdXJyQlNTLT5iU2VsZWN0ZWQgPT0gZmFsc2UpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIocEN1cnJCU1MtPmFieUJTU0lELCBwYnlCU1NJRCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBTU0lEICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbXBhcmUgc3NpZAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhbWVtY21wKHBTU0lELT5hYnlTU0lELApAQCAtMTcyLDcgKzE3Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocE1nbXQtPmVDb25maWdNb2RlID09IFdNQUNfQ09ORklHX0lCU1NfU1RBKSAmJiBXTEFOX0dFVF9DQVBfSU5GT19JQlNTKHBDdXJyQlNTLT53Q2FwSW5mbykpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocE1nbXQtPmVDb25maWdNb2RlID09IFdNQUNfQ09ORklHX0VTU19TVEEpICYmIFdMQU5fR0VUX0NBUF9JTkZPX0VTUyhwQ3VyckJTUy0+d0NhcEluZm8pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEN1cnJCU1MtPmJTZWxlY3RlZCA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBDdXJyQlNTLT5iU2VsZWN0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ocEN1cnJCU1MpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTE4MSw3ICsxODIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocE1nbXQtPmVDb25maWdNb2RlID09IFdNQUNfQ09ORklHX0lCU1NfU1RBKSAmJiBXTEFOX0dFVF9DQVBfSU5GT19JQlNTKHBDdXJyQlNTLT53Q2FwSW5mbykpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwTWdtdC0+ZUNvbmZpZ01vZGUgPT0gV01BQ19DT05GSUdfRVNTX1NUQSkgJiYgV0xBTl9HRVRfQ0FQX0lORk9fRVNTKHBDdXJyQlNTLT53Q2FwSW5mbykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcEN1cnJCU1MtPmJTZWxlY3RlZCA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEN1cnJCU1MtPmJTZWxlY3RlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHBDdXJyQlNTKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTkzLDcgKzE5NCw3IEBACiAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8TUFYX0JTU19OVU07IGlpKyspIHsKICAgICAgICAgICAgIHBDdXJyQlNTID0gJihwTWdtdC0+c0JTU0xpc3RbaWldKTsKIAkvLzIwMDctMDcyMS0wMTxBZGQ+YnkgTWlrZUxpdQotCSAgcEN1cnJCU1MtPmJTZWxlY3RlZCA9IEZBTFNFOworCSAgcEN1cnJCU1MtPmJTZWxlY3RlZCA9IGZhbHNlOwogICAgICAgICAgIGlmIChwQ3VyckJTUy0+YkFjdGl2ZSkgewogCiAgICAgICAgICAgICAgICAgaWYgKHBTU0lEICE9IE5VTEwpIHsKQEAgLTIyNCwxOSArMjI1LDE5IEBACiAgICAgICAgICAgICAgICAgfQogLyoKICAgICAgICAgICAgICAgICBpZiAocE1nbXQtPmVBdXRoZW5Nb2RlIDwgV01BQ19BVVRIX1dQQSkgewotICAgICAgICAgICAgICAgICAgICBpZiAocEN1cnJCU1MtPmJXUEFWYWxpZCA9PSBUUlVFKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwQ3VyckJTUy0+YldQQVZhbGlkID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdQQSBBUCB3aWxsIHJlamVjdCBjb25uZWN0aW9uIG9mIHN0YXRpb24gd2l0aG91dCBXUEEgZW5hYmxlLgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQSkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQVBTSykpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBDdXJyQlNTLT5iV1BBVmFsaWQgPT0gRkFMU0UpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBDdXJyQlNTLT5iV1BBVmFsaWQgPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXRpb24gd2l0aCBXUEEgZW5hYmxlIGNhbid0IGpvaW4gTm9uV1BBIEFQLgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQTIpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9XUEEyUFNLKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAocEN1cnJCU1MtPmJXUEEyVmFsaWQgPT0gRkFMU0UpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBDdXJyQlNTLT5iV1BBMlZhbGlkID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGF0aW9uIHdpdGggV1BBMiBlbmFibGUgY2FuJ3Qgam9pbiBOb25XUEEyIEFQLgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI1Myw5ICsyNTQsOSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmIChwU2VsZWN0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHBTZWxlY3QtPmJTZWxlY3RlZCA9IFRSVUU7CisgICAgICAgICAgICBwU2VsZWN0LT5iU2VsZWN0ZWQgPSB0cnVlOwogLyoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iUm9hbWluZyA9PSBGQUxTRSkgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iUm9hbWluZyA9PSBmYWxzZSkgIHsKIAkvLyAgICAgICBFaW5zbiBBZGQgQDIwMDcwOTA3CiAJCQltZW1zZXQocGJ5RGVzaXJlU1NJRCwgMCwgV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1NTSURfTUFYTEVOICsgMSk7CiAJCQltZW1jcHkocGJ5RGVzaXJlU1NJRCxwQ3VyckJTUy0+YWJ5U1NJRCxXTEFOX0lFSERSX0xFTiArIFdMQU5fU1NJRF9NQVhMRU4gKyAxKSA7CkBAIC0yODMsMTggKzI4NCwxOCBAQAogdm9pZAogQlNTdkNsZWFyQlNTTGlzdCgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKLSAgICBCT09MIGJLZWVwQ3VyckJTU0lECisgICAgYm9vbCBiS2VlcEN1cnJCU1NJRAogICAgICkKIHsKICAgICBQU0RldmljZSAgICAgcERldmljZSA9IChQU0RldmljZSloRGV2aWNlQ29udGV4dDsKICAgICBQU01nbXRPYmplY3QgICAgcE1nbXQgPSBwRGV2aWNlLT5wTWdtdDsKLSAgICBVSU5UICAgICAgICAgICAgaWk7CisgICAgdW5zaWduZWQgaW50IGlpOwogCiAgICAgZm9yIChpaSA9IDA7IGlpIDwgTUFYX0JTU19OVU07IGlpKyspIHsKICAgICAgICAgaWYgKGJLZWVwQ3VyckJTU0lEKSB7CiAgICAgICAgICAgICBpZiAocE1nbXQtPnNCU1NMaXN0W2lpXS5iQWN0aXZlICYmCi0gICAgICAgICAgICAgICAgSVNfRVRIX0FERFJFU1NfRVFVQUwocE1nbXQtPnNCU1NMaXN0W2lpXS5hYnlCU1NJRCwgcE1nbXQtPmFieUN1cnJCU1NJRCkpIHsKLSAgICAgICAgICAgICAgIC8vIGJLZWVwQ3VyckJTU0lEID0gRkFMU0U7CisgICAgICAgICAgICAgICAgIWNvbXBhcmVfZXRoZXJfYWRkcihwTWdtdC0+c0JTU0xpc3RbaWldLmFieUJTU0lELCBwTWdtdC0+YWJ5Q3VyckJTU0lEKSkgeworICAgICAgICAgICAgICAgLy8gYktlZXBDdXJyQlNTSUQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzA0LDcgKzMwNSw3IEBACiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBwTWdtdC0+c0JTU0xpc3RbaWldLmJBY3RpdmUgPSBGQUxTRTsKKyAgICAgICAgcE1nbXQtPnNCU1NMaXN0W2lpXS5iQWN0aXZlID0gZmFsc2U7CiAgICAgICAgIG1lbXNldCgmcE1nbXQtPnNCU1NMaXN0W2lpXSwgMCwgc2l6ZW9mKEtub3duQlNTKSk7CiAgICAgfQogICAgIEJTU3ZDbGVhckFueUJTU0pvaW5SZWNvcmQocERldmljZSk7CkBAIC0zMjAsMjUgKzMyMSwyNSBAQAogICogICAgc2VhcmNoIEJTUyBsaXN0IGJ5IEJTU0lEICYgU1NJRCBpZiBtYXRjaGVkCiAgKgogICogUmV0dXJuIFZhbHVlOgotICogICAgVFJVRSBpZiBmb3VuZC4KKyAqICAgIHRydWUgaWYgZm91bmQuCiAgKgogLSovCiBQS25vd25CU1MKIEJTU3BBZGRySXNJbkJTU0xpc3QoCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQsCi0gICAgUEJZVEUgYWJ5QlNTSUQsCisgICAgdW5zaWduZWQgY2hhciAqYWJ5QlNTSUQsCiAgICAgUFdMQU5fSUVfU1NJRCBwU1NJRAogICAgICkKIHsKICAgICBQU0RldmljZSAgICAgcERldmljZSA9IChQU0RldmljZSloRGV2aWNlQ29udGV4dDsKICAgICBQU01nbXRPYmplY3QgICAgcE1nbXQgPSBwRGV2aWNlLT5wTWdtdDsKICAgICBQS25vd25CU1MgICAgICAgcEJTU0xpc3QgPSBOVUxMOwotICAgIFVJTlQgICAgICAgICAgICBpaTsKKyAgICB1bnNpZ25lZCBpbnQgaWk7CiAKICAgICBmb3IgKGlpID0gMDsgaWkgPCBNQVhfQlNTX05VTTsgaWkrKykgewogICAgICAgICBwQlNTTGlzdCA9ICYocE1nbXQtPnNCU1NMaXN0W2lpXSk7CiAgICAgICAgIGlmIChwQlNTTGlzdC0+YkFjdGl2ZSkgewotICAgICAgICAgICAgaWYgKElTX0VUSF9BRERSRVNTX0VRVUFMKHBCU1NMaXN0LT5hYnlCU1NJRCwgYWJ5QlNTSUQpKSB7CisgICAgICAgICAgICBpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihwQlNTTGlzdC0+YWJ5QlNTSUQsIGFieUJTU0lEKSkgewogLy8gICAgICAgICAgICAgICAgaWYgKHBTU0lEID09IE5VTEwpCiAvLyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBCU1NMaXN0OwogICAgICAgICAgICAgICAgIGlmIChwU1NJRC0+bGVuID09ICgoUFdMQU5fSUVfU1NJRClwQlNTTGlzdC0+YWJ5U1NJRCktPmxlbil7CkBAIC0zNjIsMTggKzM2MywxOCBAQAogICogICAgSW5zZXJ0IGEgQlNTIHNldCBpbnRvIGtub3duIEJTUyBsaXN0CiAgKgogICogUmV0dXJuIFZhbHVlOgotICogICAgVFJVRSBpZiBzdWNjZXNzLgorICogICAgdHJ1ZSBpZiBzdWNjZXNzLgogICoKIC0qLwogCi1CT09MCitib29sCiBCU1NiSW5zZXJ0VG9CU1NMaXN0ICgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKLSAgICBQQllURSBhYnlCU1NJREFkZHIsCisgICAgdW5zaWduZWQgY2hhciAqYWJ5QlNTSURBZGRyLAogICAgIFFXT1JEIHF3VGltZXN0YW1wLAotICAgIFdPUkQgd0JlYWNvbkludGVydmFsLAotICAgIFdPUkQgd0NhcEluZm8sCi0gICAgQllURSBieUN1cnJDaGFubmVsLAorICAgIHVuc2lnbmVkIHNob3J0IHdCZWFjb25JbnRlcnZhbCwKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q2FwSW5mbywKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q3VyckNoYW5uZWwsCiAgICAgUFdMQU5fSUVfU1NJRCBwU1NJRCwKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBTdXBwUmF0ZXMsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwRXh0U3VwcFJhdGVzLApAQCAtMzgyLDggKzM4Myw4IEBACiAgICAgUFdMQU5fSUVfUlNOX0VYVCBwUlNOV1BBLAogICAgIFBXTEFOX0lFX0NPVU5UUlkgcElFX0NvdW50cnksCiAgICAgUFdMQU5fSUVfUVVJRVQgcElFX1F1aWV0LAotICAgIFVJTlQgdUlFTGVuZ3RoLAotICAgIFBCWVRFIHBieUlFcywKKyAgICB1bnNpZ25lZCBpbnQgdUlFTGVuZ3RoLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUlFcywKICAgICB2b2lkICpwUnhQYWNrZXRDb250ZXh0CiAgICAgKQogewpAQCAtMzkyLDggKzM5Myw4IEBACiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7CiAgICAgUFNSeE1nbXRQYWNrZXQgIHBSeFBhY2tldCA9IChQU1J4TWdtdFBhY2tldClwUnhQYWNrZXRDb250ZXh0OwogICAgIFBLbm93bkJTUyAgICAgICBwQlNTTGlzdCA9IE5VTEw7Ci0gICAgVUlOVCAgICAgICAgICAgIGlpOwotICAgIEJPT0wgICAgICAgICAgICBiUGFyc2luZ1F1aWV0ID0gRkFMU0U7CisgICAgdW5zaWduZWQgaW50IGlpOworICAgIGJvb2wgYlBhcnNpbmdRdWlldCA9IGZhbHNlOwogICAgIFBXTEFOX0lFX1FVSUVUICBwUXVpZXQgPSBOVUxMOwogCiAKQEAgLTQwOCwxMCArNDA5LDEwIEBACiAKICAgICBpZiAoaWkgPT0gTUFYX0JTU19OVU0pewogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJHZXQgZnJlZSBLbm93QlNTIG5vZGUgZmFpbGVkLlxuIik7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBzYXZlIHRoZSBCU1MgaW5mbwotICAgIHBCU1NMaXN0LT5iQWN0aXZlID0gVFJVRTsKKyAgICBwQlNTTGlzdC0+YkFjdGl2ZSA9IHRydWU7CiAgICAgbWVtY3B5KCBwQlNTTGlzdC0+YWJ5QlNTSUQsIGFieUJTU0lEQWRkciwgV0xBTl9CU1NJRF9MRU4pOwogICAgIEhJRFdPUkQocEJTU0xpc3QtPnF3QlNTVGltZXN0YW1wKSA9IGNwdV90b19sZTMyKEhJRFdPUkQocXdUaW1lc3RhbXApKTsKICAgICBMT0RXT1JEKHBCU1NMaXN0LT5xd0JTU1RpbWVzdGFtcCkgPSBjcHVfdG9fbGUzMihMT0RXT1JEKHF3VGltZXN0YW1wKSk7CkBAIC00NDUsNyArNDQ2LDcgQEAKICAgICBpZiAocEJTU0xpc3QtPnVDaGFubmVsID4gQ0JfTUFYX0NIQU5ORUxfMjRHKSB7CiAgICAgICAgIHBCU1NMaXN0LT5lTmV0d29ya1R5cGVJblVzZSA9IFBIWV9UWVBFXzExQTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAocEJTU0xpc3QtPnNFUlAuYkVSUEV4aXN0ID09IFRSVUUpIHsKKyAgICAgICAgaWYgKHBCU1NMaXN0LT5zRVJQLmJFUlBFeGlzdCA9PSB0cnVlKSB7CiAgICAgICAgICAgICBwQlNTTGlzdC0+ZU5ldHdvcmtUeXBlSW5Vc2UgPSBQSFlfVFlQRV8xMUc7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwQlNTTGlzdC0+ZU5ldHdvcmtUeXBlSW5Vc2UgPSBQSFlfVFlQRV8xMUI7CkBAIC00NjEsMTYgKzQ2MiwxNiBAQAogICAgICAgICAocE1nbXQtPmVDdXJyU3RhdGUgPT0gV01BQ19TVEFURV9BU1NPQykpIHsKICAgICAgICAgLy8gYXNzb2Mgd2l0aCBCU1MKICAgICAgICAgaWYgKHBCU1NMaXN0ID09IHBNZ210LT5wQ3VyckJTUykgewotICAgICAgICAgICAgYlBhcnNpbmdRdWlldCA9IFRSVUU7CisgICAgICAgICAgICBiUGFyc2luZ1F1aWV0ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIFdQQV9DbGVhclJTTihwQlNTTGlzdCk7CiAKICAgICBpZiAocFJTTldQQSAhPSBOVUxMKSB7Ci0gICAgICAgIFVJTlQgdUxlbiA9IHBSU05XUEEtPmxlbiArIDI7CisgICAgICAgIHVuc2lnbmVkIGludCB1TGVuID0gcFJTTldQQS0+bGVuICsgMjsKIAotICAgICAgICBpZiAodUxlbiA8PSAodUlFTGVuZ3RoIC0gKFVJTlQpKFVMT05HX1BUUikoKFBCWVRFKXBSU05XUEEgLSBwYnlJRXMpKSkgeworICAgICAgICBpZiAodUxlbiA8PSAodUlFTGVuZ3RoIC0gKHVuc2lnbmVkIGludCkoKHVuc2lnbmVkIGNoYXIgKilwUlNOV1BBIC0gcGJ5SUVzKSkpIHsKICAgICAgICAgICAgIHBCU1NMaXN0LT53V1BBTGVuID0gdUxlbjsKICAgICAgICAgICAgIG1lbWNweShwQlNTTGlzdC0+YnlXUEFJRSwgcFJTTldQQSwgdUxlbik7CiAgICAgICAgICAgICBXUEFfUGFyc2VSU04ocEJTU0xpc3QsIHBSU05XUEEpOwpAQCAtNDgwLDMzICs0ODEsMzMgQEAKICAgICBXUEEyX0NsZWFyUlNOKHBCU1NMaXN0KTsKIAogICAgIGlmIChwUlNOICE9IE5VTEwpIHsKLSAgICAgICAgVUlOVCB1TGVuID0gcFJTTi0+bGVuICsgMjsKLSAgICAgICAgaWYgKHVMZW4gPD0gKHVJRUxlbmd0aCAtIChVSU5UKShVTE9OR19QVFIpKChQQllURSlwUlNOIC0gcGJ5SUVzKSkpIHsKKyAgICAgICAgdW5zaWduZWQgaW50IHVMZW4gPSBwUlNOLT5sZW4gKyAyOworICAgICAgICBpZiAodUxlbiA8PSAodUlFTGVuZ3RoIC0gKHVuc2lnbmVkIGludCkoKHVuc2lnbmVkIGNoYXIgKilwUlNOIC0gcGJ5SUVzKSkpIHsKICAgICAgICAgICAgIHBCU1NMaXN0LT53UlNOTGVuID0gdUxlbjsKICAgICAgICAgICAgIG1lbWNweShwQlNTTGlzdC0+YnlSU05JRSwgcFJTTiwgdUxlbik7CiAgICAgICAgICAgICBXUEEydlBhcnNlUlNOKHBCU1NMaXN0LCBwUlNOKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICgocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9XUEEyKSB8fCAocEJTU0xpc3QtPmJXUEEyVmFsaWQgPT0gVFJVRSkpIHsKKyAgICBpZiAoKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBMikgfHwgKHBCU1NMaXN0LT5iV1BBMlZhbGlkID09IHRydWUpKSB7CiAKICAgICAgICAgUFNLZXlJdGVtICBwVHJhbnNtaXRLZXkgPSBOVUxMOwotICAgICAgICBCT09MICAgICAgIGJJczgwMl8xeCA9IEZBTFNFOworICAgICAgICBib29sIGJJczgwMl8xeCA9IGZhbHNlOwogCiAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IHBCU1NMaXN0LT53QUtNU1NBdXRoQ291bnQ7IGlpICsrKSB7CiAgICAgICAgICAgICBpZiAocEJTU0xpc3QtPmFieUFLTVNTQXV0aFR5cGVbaWldID09IFdMQU5fMTFpX0FLTVNTXzgwMl8xWCkgewotICAgICAgICAgICAgICAgIGJJczgwMl8xeCA9IFRSVUU7CisgICAgICAgICAgICAgICAgYklzODAyXzF4ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoKGJJczgwMl8xeCA9PSBUUlVFKSAmJiAocFNTSUQtPmxlbiA9PSAoKFBXTEFOX0lFX1NTSUQpcE1nbXQtPmFieURlc2lyZVNTSUQpLT5sZW4pICYmCisgICAgICAgIGlmICgoYklzODAyXzF4ID09IHRydWUpICYmIChwU1NJRC0+bGVuID09ICgoUFdMQU5fSUVfU1NJRClwTWdtdC0+YWJ5RGVzaXJlU1NJRCktPmxlbikgJiYKICAgICAgICAgICAgICggIW1lbWNtcChwU1NJRC0+YWJ5U1NJRCwgKChQV0xBTl9JRV9TU0lEKXBNZ210LT5hYnlEZXNpcmVTU0lEKS0+YWJ5U1NJRCwgcFNTSUQtPmxlbikpKSB7CiAKICAgICAgICAgICAgIGJBZGRfUE1LSURfQ2FuZGlkYXRlKCh2b2lkICopcERldmljZSwgcEJTU0xpc3QtPmFieUJTU0lELCAmcEJTU0xpc3QtPnNSU05DYXBPYmopOwogCi0gICAgICAgICAgICBpZiAoKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSBUUlVFKSAmJiAocE1nbXQtPmVDdXJyU3RhdGUgPT0gV01BQ19TVEFURV9BU1NPQykpIHsKLSAgICAgICAgICAgICAgICBpZiAoKEtleWJHZXRUcmFuc21pdEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwRGV2aWNlLT5hYnlCU1NJRCwgUEFJUldJU0VfS0VZLCAmcFRyYW5zbWl0S2V5KSA9PSBUUlVFKSB8fAotICAgICAgICAgICAgICAgICAgICAoS2V5YkdldFRyYW5zbWl0S2V5KCYocERldmljZS0+c0tleSksIHBEZXZpY2UtPmFieUJTU0lELCBHUk9VUF9LRVksICZwVHJhbnNtaXRLZXkpID09IFRSVUUpKSB7CisgICAgICAgICAgICBpZiAoKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSB0cnVlKSAmJiAocE1nbXQtPmVDdXJyU3RhdGUgPT0gV01BQ19TVEFURV9BU1NPQykpIHsKKyAgICAgICAgICAgICAgICBpZiAoKEtleWJHZXRUcmFuc21pdEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwRGV2aWNlLT5hYnlCU1NJRCwgUEFJUldJU0VfS0VZLCAmcFRyYW5zbWl0S2V5KSA9PSB0cnVlKSB8fAorICAgICAgICAgICAgICAgICAgICAoS2V5YkdldFRyYW5zbWl0S2V5KCYocERldmljZS0+c0tleSksIHBEZXZpY2UtPmFieUJTU0lELCBHUk9VUF9LRVksICZwVHJhbnNtaXRLZXkpID09IHRydWUpKSB7CiAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmdzUE1LSURDYW5kaWRhdGUuU3RhdHVzVHlwZSA9IE5kaXM4MDJfMTFTdGF0dXNUeXBlX1BNS0lEX0NhbmRpZGF0ZUxpc3Q7CiAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmdzUE1LSURDYW5kaWRhdGUuVmVyc2lvbiA9IDE7CiAKQEAgLTUxOSw0NiArNTIwLDQ1IEBACiAgICAgaWYgKHBEZXZpY2UtPmJVcGRhdGVCQlZHQSkgewogICAgICAgICAvLyBNb25pdGVyIGlmIFJTU0kgaXMgdG9vIHN0cm9uZy4KICAgICAgICAgcEJTU0xpc3QtPmJ5UlNTSVN0YXRDbnQgPSAwOwotICAgICAgICBSRnZSU1NJVG9kQm0ocERldmljZSwgKEJZVEUpKHBSeFBhY2tldC0+dVJTU0kpLCAmcEJTU0xpc3QtPmxkQm1NQVgpOworICAgICAgICBSRnZSU1NJVG9kQm0ocERldmljZSwgKHVuc2lnbmVkIGNoYXIpKHBSeFBhY2tldC0+dVJTU0kpLCAmcEJTU0xpc3QtPmxkQm1NQVgpOwogICAgICAgICBwQlNTTGlzdC0+bGRCbUF2ZXJhZ2VbMF0gPSBwQlNTTGlzdC0+bGRCbU1BWDsKICAgICAgICAgZm9yIChpaSA9IDE7IGlpIDwgUlNTSV9TVEFUX0NPVU5UOyBpaSsrKQogICAgICAgICAgICAgcEJTU0xpc3QtPmxkQm1BdmVyYWdlW2lpXSA9IDA7CiAgICAgfQogCiAgICAgaWYgKChwSUVfQ291bnRyeSAhPSBOVUxMKSAmJgotICAgICAgICAocE1nbXQtPmIxMWhFbmFibGUgPT0gVFJVRSkpIHsKLSAgICAgICAgQ0FSRHZTZXRDb3VudHJ5SW5mbyhwTWdtdC0+cEFkYXB0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJTU0xpc3QtPmVOZXR3b3JrVHlwZUluVXNlLAorICAgICAgICAocE1nbXQtPmIxMWhFbmFibGUgPT0gdHJ1ZSkpIHsKKyAgICAgICAgc2V0X2NvdW50cnlfaW5mbyhwTWdtdC0+cEFkYXB0ZXIsIHBCU1NMaXN0LT5lTmV0d29ya1R5cGVJblVzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwSUVfQ291bnRyeSk7CiAgICAgfQogCi0gICAgaWYgKChiUGFyc2luZ1F1aWV0ID09IFRSVUUpICYmIChwSUVfUXVpZXQgIT0gTlVMTCkpIHsKKyAgICBpZiAoKGJQYXJzaW5nUXVpZXQgPT0gdHJ1ZSkgJiYgKHBJRV9RdWlldCAhPSBOVUxMKSkgewogICAgICAgICBpZiAoKCgoUFdMQU5fSUVfUVVJRVQpcElFX1F1aWV0KS0+bGVuID09IDgpICYmCiAgICAgICAgICAgICAoKChQV0xBTl9JRV9RVUlFVClwSUVfUXVpZXQpLT5ieVF1aWV0Q291bnQgIT0gMCkpIHsKICAgICAgICAgICAgIC8vIHZhbGlkIEVJRAogICAgICAgICAgICAgaWYgKHBRdWlldCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgcFF1aWV0ID0gKFBXTEFOX0lFX1FVSUVUKXBJRV9RdWlldDsKICAgICAgICAgICAgICAgICBDQVJEYlNldFF1aWV0KCAgcE1nbXQtPnBBZGFwdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwUXVpZXQtPmJ5UXVpZXRDb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFF1aWV0LT5ieVF1aWV0UGVyaW9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKChQV09SRClwUXVpZXQtPmFieVF1aWV0RHVyYXRpb24pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKChQV09SRClwUXVpZXQtPmFieVF1aWV0T2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKCh1bnNpZ25lZCBzaG9ydCAqKXBRdWlldC0+YWJ5UXVpZXREdXJhdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooKHVuc2lnbmVkIHNob3J0ICopcFF1aWV0LT5hYnlRdWlldE9mZnNldCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcFF1aWV0ID0gKFBXTEFOX0lFX1FVSUVUKXBJRV9RdWlldDsKICAgICAgICAgICAgICAgICBDQVJEYlNldFF1aWV0KCAgcE1nbXQtPnBBZGFwdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBRdWlldC0+YnlRdWlldENvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwUXVpZXQtPmJ5UXVpZXRQZXJpb2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooKFBXT1JEKXBRdWlldC0+YWJ5UXVpZXREdXJhdGlvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooKFBXT1JEKXBRdWlldC0+YWJ5UXVpZXRPZmZzZXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooKHVuc2lnbmVkIHNob3J0ICopcFF1aWV0LT5hYnlRdWlldER1cmF0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKigodW5zaWduZWQgc2hvcnQgKilwUXVpZXQtPmFieVF1aWV0T2Zmc2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKChiUGFyc2luZ1F1aWV0ID09IFRSVUUpICYmCisgICAgaWYgKChiUGFyc2luZ1F1aWV0ID09IHRydWUpICYmCiAgICAgICAgIChwUXVpZXQgIT0gTlVMTCkpIHsKICAgICAgICAgQ0FSRGJTdGFydFF1aWV0KHBNZ210LT5wQWRhcHRlcik7CiAgICAgfQpAQCAtNTY4LDcgKzU2OCw3IEBACiAgICAgICAgIHBCU1NMaXN0LT51SUVMZW5ndGggPSBXTEFOX0JFQUNPTl9GUl9NQVhMRU47CiAgICAgbWVtY3B5KHBCU1NMaXN0LT5hYnlJRXMsIHBieUlFcywgcEJTU0xpc3QtPnVJRUxlbmd0aCk7CiAKLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCkBAIC01NzgsMTkgKzU3OCwxOSBAQAogICogICAgVXBkYXRlIEJTUyBzZXQgaW4ga25vd24gQlNTIGxpc3QKICAqCiAgKiBSZXR1cm4gVmFsdWU6Ci0gKiAgICBUUlVFIGlmIHN1Y2Nlc3MuCisgKiAgICB0cnVlIGlmIHN1Y2Nlc3MuCiAgKgogLSovCiAvLyBUT0RPOiBpbnB1dCBzdHJ1Y3R1cmUgbW9kaWZ5CiAKLUJPT0wKK2Jvb2wKIEJTU2JVcGRhdGVUb0JTU0xpc3QgKAogICAgIHZvaWQgKmhEZXZpY2VDb250ZXh0LAogICAgIFFXT1JEIHF3VGltZXN0YW1wLAotICAgIFdPUkQgd0JlYWNvbkludGVydmFsLAotICAgIFdPUkQgd0NhcEluZm8sCi0gICAgQllURSBieUN1cnJDaGFubmVsLAotICAgIEJPT0wgYkNoYW5uZWxIaXQsCisgICAgdW5zaWduZWQgc2hvcnQgd0JlYWNvbkludGVydmFsLAorICAgIHVuc2lnbmVkIHNob3J0IHdDYXBJbmZvLAorICAgIHVuc2lnbmVkIGNoYXIgYnlDdXJyQ2hhbm5lbCwKKyAgICBib29sIGJDaGFubmVsSGl0LAogICAgIFBXTEFOX0lFX1NTSUQgcFNTSUQsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwU3VwcFJhdGVzLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEV4dFN1cHBSYXRlcywKQEAgLTYwMCw4ICs2MDAsOCBAQAogICAgIFBXTEFOX0lFX0NPVU5UUlkgcElFX0NvdW50cnksCiAgICAgUFdMQU5fSUVfUVVJRVQgcElFX1F1aWV0LAogICAgIFBLbm93bkJTUyBwQlNTTGlzdCwKLSAgICBVSU5UIHVJRUxlbmd0aCwKLSAgICBQQllURSBwYnlJRXMsCisgICAgdW5zaWduZWQgaW50IHVJRUxlbmd0aCwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlJRXMsCiAgICAgdm9pZCAqcFJ4UGFja2V0Q29udGV4dAogICAgICkKIHsKQEAgLTYwOSwxNCArNjA5LDE0IEBACiAgICAgUFNEZXZpY2UgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpaERldmljZUNvbnRleHQ7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7CiAgICAgUFNSeE1nbXRQYWNrZXQgIHBSeFBhY2tldCA9IChQU1J4TWdtdFBhY2tldClwUnhQYWNrZXRDb250ZXh0OwotICAgIExPTkcgICAgICAgICAgICBsZEJtOwotICAgIEJPT0wgICAgICAgICAgICBiUGFyc2luZ1F1aWV0ID0gRkFMU0U7CisgICAgbG9uZyAgICAgICAgICAgIGxkQm07CisgICAgYm9vbCBiUGFyc2luZ1F1aWV0ID0gZmFsc2U7CiAgICAgUFdMQU5fSUVfUVVJRVQgIHBRdWlldCA9IE5VTEw7CiAKIAogCiAgICAgaWYgKHBCU1NMaXN0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAKICAgICBISURXT1JEKHBCU1NMaXN0LT5xd0JTU1RpbWVzdGFtcCkgPSBjcHVfdG9fbGUzMihISURXT1JEKHF3VGltZXN0YW1wKSk7CkBAIC02NDYsNyArNjQ2LDcgQEAKICAgICBpZiAocEJTU0xpc3QtPnVDaGFubmVsID4gQ0JfTUFYX0NIQU5ORUxfMjRHKSB7CiAgICAgICAgIHBCU1NMaXN0LT5lTmV0d29ya1R5cGVJblVzZSA9IFBIWV9UWVBFXzExQTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAocEJTU0xpc3QtPnNFUlAuYkVSUEV4aXN0ID09IFRSVUUpIHsKKyAgICAgICAgaWYgKHBCU1NMaXN0LT5zRVJQLmJFUlBFeGlzdCA9PSB0cnVlKSB7CiAgICAgICAgICAgICBwQlNTTGlzdC0+ZU5ldHdvcmtUeXBlSW5Vc2UgPSBQSFlfVFlQRV8xMUc7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwQlNTTGlzdC0+ZU5ldHdvcmtUeXBlSW5Vc2UgPSBQSFlfVFlQRV8xMUI7CkBAIC02NjMsMTUgKzY2MywxNSBAQAogICAgICAgICAocE1nbXQtPmVDdXJyU3RhdGUgPT0gV01BQ19TVEFURV9BU1NPQykpIHsKICAgICAgICAgLy8gYXNzb2Mgd2l0aCBCU1MKICAgICAgICAgaWYgKHBCU1NMaXN0ID09IHBNZ210LT5wQ3VyckJTUykgewotICAgICAgICAgICAgYlBhcnNpbmdRdWlldCA9IFRSVUU7CisgICAgICAgICAgICBiUGFyc2luZ1F1aWV0ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgV1BBX0NsZWFyUlNOKHBCU1NMaXN0KTsgICAgICAgICAvL21pa2UgdXBkYXRlCiAKICAgICBpZiAocFJTTldQQSAhPSBOVUxMKSB7Ci0gICAgICAgIFVJTlQgdUxlbiA9IHBSU05XUEEtPmxlbiArIDI7Ci0gICAgICAgIGlmICh1TGVuIDw9ICh1SUVMZW5ndGggLSAoVUlOVCkoVUxPTkdfUFRSKSgoUEJZVEUpcFJTTldQQSAtIHBieUlFcykpKSB7CisgICAgICAgIHVuc2lnbmVkIGludCB1TGVuID0gcFJTTldQQS0+bGVuICsgMjsKKyAgICAgICAgaWYgKHVMZW4gPD0gKHVJRUxlbmd0aCAtICh1bnNpZ25lZCBpbnQpKCh1bnNpZ25lZCBjaGFyICopcFJTTldQQSAtIHBieUlFcykpKSB7CiAgICAgICAgICAgICBwQlNTTGlzdC0+d1dQQUxlbiA9IHVMZW47CiAgICAgICAgICAgICBtZW1jcHkocEJTU0xpc3QtPmJ5V1BBSUUsIHBSU05XUEEsIHVMZW4pOwogICAgICAgICAgICAgV1BBX1BhcnNlUlNOKHBCU1NMaXN0LCBwUlNOV1BBKTsKQEAgLTY4MSw4ICs2ODEsOCBAQAogICAgV1BBMl9DbGVhclJTTihwQlNTTGlzdCk7ICAvL21pa2UgdXBkYXRlCiAKICAgICBpZiAocFJTTiAhPSBOVUxMKSB7Ci0gICAgICAgIFVJTlQgdUxlbiA9IHBSU04tPmxlbiArIDI7Ci0gICAgICAgIGlmICh1TGVuIDw9ICh1SUVMZW5ndGggLSAoVUlOVCkoVUxPTkdfUFRSKSgoUEJZVEUpcFJTTiAtIHBieUlFcykpKSB7CisgICAgICAgIHVuc2lnbmVkIGludCB1TGVuID0gcFJTTi0+bGVuICsgMjsKKyAgICAgICAgaWYgKHVMZW4gPD0gKHVJRUxlbmd0aCAtICh1bnNpZ25lZCBpbnQpKCh1bnNpZ25lZCBjaGFyICopcFJTTiAtIHBieUlFcykpKSB7CiAgICAgICAgICAgICBwQlNTTGlzdC0+d1JTTkxlbiA9IHVMZW47CiAgICAgICAgICAgICBtZW1jcHkocEJTU0xpc3QtPmJ5UlNOSUUsIHBSU04sIHVMZW4pOwogICAgICAgICAgICAgV1BBMnZQYXJzZVJTTihwQlNTTGlzdCwgcFJTTik7CkBAIC02OTAsNyArNjkwLDcgQEAKICAgICB9CiAKICAgICBpZiAocFJ4UGFja2V0LT51UlNTSSAhPSAwKSB7Ci0gICAgICAgIFJGdlJTU0lUb2RCbShwRGV2aWNlLCAoQllURSkocFJ4UGFja2V0LT51UlNTSSksICZsZEJtKTsKKyAgICAgICAgUkZ2UlNTSVRvZEJtKHBEZXZpY2UsICh1bnNpZ25lZCBjaGFyKShwUnhQYWNrZXQtPnVSU1NJKSwgJmxkQm0pOwogICAgICAgICAvLyBNb25pdGVyIGlmIFJTU0kgaXMgdG9vIHN0cm9uZy4KICAgICAgICAgcEJTU0xpc3QtPmJ5UlNTSVN0YXRDbnQrKzsKICAgICAgICAgcEJTU0xpc3QtPmJ5UlNTSVN0YXRDbnQgJT0gUlNTSV9TVEFUX0NPVU5UOwpAQCAtNzAzLDM5ICs3MDMsMzggQEAKICAgICB9CiAKICAgICBpZiAoKHBJRV9Db3VudHJ5ICE9IE5VTEwpICYmCi0gICAgICAgIChwTWdtdC0+YjExaEVuYWJsZSA9PSBUUlVFKSkgewotICAgICAgICBDQVJEdlNldENvdW50cnlJbmZvKHBNZ210LT5wQWRhcHRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQlNTTGlzdC0+ZU5ldHdvcmtUeXBlSW5Vc2UsCisgICAgICAgIChwTWdtdC0+YjExaEVuYWJsZSA9PSB0cnVlKSkgeworICAgICAgICBzZXRfY291bnRyeV9pbmZvKHBNZ210LT5wQWRhcHRlciwgcEJTU0xpc3QtPmVOZXR3b3JrVHlwZUluVXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBJRV9Db3VudHJ5KTsKICAgICB9CiAKLSAgICBpZiAoKGJQYXJzaW5nUXVpZXQgPT0gVFJVRSkgJiYgKHBJRV9RdWlldCAhPSBOVUxMKSkgeworICAgIGlmICgoYlBhcnNpbmdRdWlldCA9PSB0cnVlKSAmJiAocElFX1F1aWV0ICE9IE5VTEwpKSB7CiAgICAgICAgIGlmICgoKChQV0xBTl9JRV9RVUlFVClwSUVfUXVpZXQpLT5sZW4gPT0gOCkgJiYKICAgICAgICAgICAgICgoKFBXTEFOX0lFX1FVSUVUKXBJRV9RdWlldCktPmJ5UXVpZXRDb3VudCAhPSAwKSkgewogICAgICAgICAgICAgLy8gdmFsaWQgRUlECiAgICAgICAgICAgICBpZiAocFF1aWV0ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBwUXVpZXQgPSAoUFdMQU5fSUVfUVVJRVQpcElFX1F1aWV0OwogICAgICAgICAgICAgICAgIENBUkRiU2V0UXVpZXQoICBwTWdtdC0+cEFkYXB0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBRdWlldC0+YnlRdWlldENvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwUXVpZXQtPmJ5UXVpZXRQZXJpb2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooKFBXT1JEKXBRdWlldC0+YWJ5UXVpZXREdXJhdGlvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooKFBXT1JEKXBRdWlldC0+YWJ5UXVpZXRPZmZzZXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooKHVuc2lnbmVkIHNob3J0ICopcFF1aWV0LT5hYnlRdWlldER1cmF0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKigodW5zaWduZWQgc2hvcnQgKilwUXVpZXQtPmFieVF1aWV0T2Zmc2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBwUXVpZXQgPSAoUFdMQU5fSUVfUVVJRVQpcElFX1F1aWV0OwogICAgICAgICAgICAgICAgIENBUkRiU2V0UXVpZXQoICBwTWdtdC0+cEFkYXB0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFF1aWV0LT5ieVF1aWV0Q291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBRdWlldC0+YnlRdWlldFBlcmlvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKigoUFdPUkQpcFF1aWV0LT5hYnlRdWlldER1cmF0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKigoUFdPUkQpcFF1aWV0LT5hYnlRdWlldE9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKigodW5zaWduZWQgc2hvcnQgKilwUXVpZXQtPmFieVF1aWV0RHVyYXRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKCh1bnNpZ25lZCBzaG9ydCAqKXBRdWlldC0+YWJ5UXVpZXRPZmZzZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoKGJQYXJzaW5nUXVpZXQgPT0gVFJVRSkgJiYKKyAgICBpZiAoKGJQYXJzaW5nUXVpZXQgPT0gdHJ1ZSkgJiYKICAgICAgICAgKHBRdWlldCAhPSBOVUxMKSkgewogICAgICAgICBDQVJEYlN0YXJ0UXVpZXQocE1nbXQtPnBBZGFwdGVyKTsKICAgICB9CkBAIC03NDUsNyArNzQ0LDcgQEAKICAgICAgICAgcEJTU0xpc3QtPnVJRUxlbmd0aCA9IFdMQU5fQkVBQ09OX0ZSX01BWExFTjsKICAgICBtZW1jcHkocEJTU0xpc3QtPmFieUlFcywgcGJ5SUVzLCBwQlNTTGlzdC0+dUlFTGVuZ3RoKTsKIAotICAgIHJldHVybiBUUlVFOworICAgIHJldHVybiB0cnVlOwogfQogCiAKQEAgLTc2MiwyNyArNzYxLDI0IEBACiAgKgogLSovCiAKLUJPT0wKLUJTU0RCYklzU1RBSW5Ob2RlREIoCi0gICAgdm9pZCAqcE1nbXRPYmplY3QsCi0gICAgUEJZVEUgYWJ5RHN0QWRkciwKLSAgICBQVUlOVCBwdU5vZGVJbmRleAotICAgICkKK2Jvb2wKK0JTU0RCYklzU1RBSW5Ob2RlREIodm9pZCAqcE1nbXRPYmplY3QsIHVuc2lnbmVkIGNoYXIgKmFieURzdEFkZHIsCisJCXVuc2lnbmVkIGludCAqcHVOb2RlSW5kZXgpCiB7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gKFBTTWdtdE9iamVjdCkgcE1nbXRPYmplY3Q7Ci0gICAgVUlOVCAgICAgICAgICAgIGlpOworICAgIHVuc2lnbmVkIGludCBpaTsKIAogICAgIC8vIEluZGV4ID0gMCByZXNlcnZlZCBmb3IgQVAgTm9kZQogICAgIGZvciAoaWkgPSAxOyBpaSA8IChNQVhfTk9ERV9OVU0gKyAxKTsgaWkrKykgewogICAgICAgICBpZiAocE1nbXQtPnNOb2RlREJUYWJsZVtpaV0uYkFjdGl2ZSkgewotICAgICAgICAgICAgaWYgKElTX0VUSF9BRERSRVNTX0VRVUFMKGFieURzdEFkZHIsIHBNZ210LT5zTm9kZURCVGFibGVbaWldLmFieU1BQ0FkZHIpKSB7CisgICAgICAgICAgICBpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihhYnlEc3RBZGRyLCBwTWdtdC0+c05vZGVEQlRhYmxlW2lpXS5hYnlNQUNBZGRyKSkgewogICAgICAgICAgICAgICAgICpwdU5vZGVJbmRleCA9IGlpOwotICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICByZXR1cm4gRkFMU0U7CisgICByZXR1cm4gZmFsc2U7CiB9OwogCiAKQEAgLTc5OCwxNyArNzk0LDE0IEBACiAgKgogLSovCiB2b2lkCi1CU1N2Q3JlYXRlT25lTm9kZSgKLSAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKLSAgICBQVUlOVCBwdU5vZGVJbmRleAotICAgICkKK0JTU3ZDcmVhdGVPbmVOb2RlKHZvaWQgKmhEZXZpY2VDb250ZXh0LCB1bnNpZ25lZCBpbnQgKnB1Tm9kZUluZGV4KQogewogCiAgICAgUFNEZXZpY2UgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpaERldmljZUNvbnRleHQ7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7Ci0gICAgVUlOVCAgICAgICAgICAgIGlpOwotICAgIFVJTlQgICAgICAgICAgICBCaWdlc3RDb3VudCA9IDA7Ci0gICAgVUlOVCAgICAgICAgICAgIFNlbGVjdEluZGV4OworICAgIHVuc2lnbmVkIGludCBpaTsKKyAgICB1bnNpZ25lZCBpbnQgQmlnZXN0Q291bnQgPSAwOworICAgIHVuc2lnbmVkIGludCBTZWxlY3RJbmRleDsKICAgICBzdHJ1Y3Qgc2tfYnVmZiAgKnNrYjsKICAgICAvLyBJbmRleCA9IDAgcmVzZXJ2ZWQgZm9yIEFQIE5vZGUgKEluIFNUQSBtb2RlKQogICAgIC8vIEluZGV4ID0gMCByZXNlcnZlZCBmb3IgQnJvYWRjYXN0L011bHRpQ2FzdCAoSW4gQVAgbW9kZSkKQEAgLTg0MCw3ICs4MzMsNyBAQAogICAgIH0KIAogICAgIG1lbXNldCgmcE1nbXQtPnNOb2RlREJUYWJsZVsqcHVOb2RlSW5kZXhdLCAwLCBzaXplb2YoS25vd25Ob2RlREIpKTsKLSAgICBwTWdtdC0+c05vZGVEQlRhYmxlWypwdU5vZGVJbmRleF0uYkFjdGl2ZSA9IFRSVUU7CisgICAgcE1nbXQtPnNOb2RlREJUYWJsZVsqcHVOb2RlSW5kZXhdLmJBY3RpdmUgPSB0cnVlOwogICAgIHBNZ210LT5zTm9kZURCVGFibGVbKnB1Tm9kZUluZGV4XS51UmF0ZVBvbGxUaW1lb3V0ID0gRkFMTEJBQ0tfUE9MTF9TRUNPTkQ7CiAgICAgLy8gZm9yIEFQIG1vZGUgUFMgcXVldWUKICAgICBza2JfcXVldWVfaGVhZF9pbml0KCZwTWdtdC0+c05vZGVEQlRhYmxlWypwdU5vZGVJbmRleF0uc1R4UFNRdWV1ZSk7CkBAIC04NjUsMTMgKzg1OCwxMyBAQAogdm9pZAogQlNTdlJlbW92ZU9uZU5vZGUoCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQsCi0gICAgVUlOVCB1Tm9kZUluZGV4CisgICAgdW5zaWduZWQgaW50IHVOb2RlSW5kZXgKICAgICApCiB7CiAKICAgICBQU0RldmljZSAgICAgICAgcERldmljZSA9IChQU0RldmljZSloRGV2aWNlQ29udGV4dDsKICAgICBQU01nbXRPYmplY3QgICAgcE1nbXQgPSBwRGV2aWNlLT5wTWdtdDsKLSAgICBCWVRFICAgICAgICAgICAgYnlNYXNrWzhdID0gezEsIDIsIDQsIDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODB9OworICAgIHVuc2lnbmVkIGNoYXIgYnlNYXNrWzhdID0gezEsIDIsIDQsIDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODB9OwogICAgIHN0cnVjdCBza19idWZmICAqc2tiOwogCiAKQEAgLTg5OCwxOCArODkxLDE4IEBACiB2b2lkCiBCU1N2VXBkYXRlQVBOb2RlKAogICAgIHZvaWQgKmhEZXZpY2VDb250ZXh0LAotICAgIFBXT1JEIHB3Q2FwSW5mbywKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdDYXBJbmZvLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcFN1cHBSYXRlcywKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBFeHRTdXBwUmF0ZXMKICAgICApCiB7CiAgICAgUFNEZXZpY2UgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpaERldmljZUNvbnRleHQ7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7Ci0gICAgVUlOVCAgICAgICAgICAgIHVSYXRlTGVuID0gV0xBTl9SQVRFU19NQVhMRU47CisgICAgdW5zaWduZWQgaW50IHVSYXRlTGVuID0gV0xBTl9SQVRFU19NQVhMRU47CiAKICAgICBtZW1zZXQoJnBNZ210LT5zTm9kZURCVGFibGVbMF0sIDAsIHNpemVvZihLbm93bk5vZGVEQikpOwogCi0gICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iQWN0aXZlID0gVFJVRTsKKyAgICBwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJBY3RpdmUgPSB0cnVlOwogICAgIGlmIChwRGV2aWNlLT5lQ3VycmVudFBIWVR5cGUgPT0gUEhZX1RZUEVfMTFCKSB7CiAgICAgICAgIHVSYXRlTGVuID0gV0xBTl9SQVRFU19NQVhMRU5fMTFCOwogICAgIH0KQEAgLTkyMiw3ICs5MTUsNyBAQAogICAgIFJBVEV2UGFyc2VNYXhSYXRlKCh2b2lkICopcERldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgKFBXTEFOX0lFX1NVUFBfUkFURVMpcE1nbXQtPmFieUN1cnJTdXBwUmF0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIChQV0xBTl9JRV9TVVBQX1JBVEVTKXBNZ210LT5hYnlDdXJyRXh0U3VwcFJhdGVzLAotICAgICAgICAgICAgICAgICAgICAgICBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAmKHBNZ210LT5zTm9kZURCVGFibGVbMF0ud01heEJhc2ljUmF0ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICYocE1nbXQtPnNOb2RlREJUYWJsZVswXS53TWF4U3VwcFJhdGUpLAogICAgICAgICAgICAgICAgICAgICAgICAmKHBNZ210LT5zTm9kZURCVGFibGVbMF0ud1N1cHBSYXRlKSwKQEAgLTk2OSwxMyArOTYyLDEzIEBACiAgICAgaWYgKCFwRGV2aWNlLT5iRW5hYmxlSG9zdFdFUCkKICAgICAgICAgbWVtc2V0KCZwTWdtdC0+c05vZGVEQlRhYmxlWzBdLCAwLCBzaXplb2YoS25vd25Ob2RlREIpKTsKICAgICBtZW1zZXQocE1nbXQtPnNOb2RlREJUYWJsZVswXS5hYnlNQUNBZGRyLCAweGZmLCBXTEFOX0FERFJfTEVOKTsKLSAgICBwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJBY3RpdmUgPSBUUlVFOwotICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYlBTRW5hYmxlID0gRkFMU0U7CisgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iQWN0aXZlID0gdHJ1ZTsKKyAgICBwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJQU0VuYWJsZSA9IGZhbHNlOwogICAgIHNrYl9xdWV1ZV9oZWFkX2luaXQoJnBNZ210LT5zTm9kZURCVGFibGVbMF0uc1R4UFNRdWV1ZSk7CiAgICAgUkFURXZQYXJzZU1heFJhdGUoKHZvaWQgKilwRGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgIChQV0xBTl9JRV9TVVBQX1JBVEVTKXBNZ210LT5hYnlDdXJyU3VwcFJhdGVzLAogICAgICAgICAgICAgICAgICAgICAgIChQV0xBTl9JRV9TVVBQX1JBVEVTKXBNZ210LT5hYnlDdXJyRXh0U3VwcFJhdGVzLAotICAgICAgICAgICAgICAgICAgICAgIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAmKHBNZ210LT5zTm9kZURCVGFibGVbMF0ud01heEJhc2ljUmF0ZSksCiAgICAgICAgICAgICAgICAgICAgICAgJihwTWdtdC0+c05vZGVEQlRhYmxlWzBdLndNYXhTdXBwUmF0ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICYocE1nbXQtPnNOb2RlREJUYWJsZVswXS53U3VwcFJhdGUpLApAQCAtMTAwOCw4ICsxMDAxLDggQEAKIC0qLwogIC8vMjAwOC00LTE0IDxhZGQ+IGJ5IGNoZXN0ZXIgZm9yIGxlZCBpc3N1ZQogICNpZmRlZiBGT1JfTEVEX09OX05PVEVCT09LCi1CT09MIGNjPUZBTFNFOwotVUlOVCBzdGF0dXM7Citib29sIGNjPWZhbHNlOwordW5zaWduZWQgaW50IHN0YXR1czsKICNlbmRpZgogdm9pZAogQlNTdlNlY29uZENhbGxCYWNrKApAQCAtMTAxOCwxMSArMTAxMSwxMSBAQAogewogICAgIFBTRGV2aWNlICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKWhEZXZpY2VDb250ZXh0OwogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwotICAgIFVJTlQgICAgICAgICAgICBpaTsKKyAgICB1bnNpZ25lZCBpbnQgaWk7CiAgICAgUFdMQU5fSUVfU1NJRCAgIHBJdGVtU1NJRCwgcEN1cnJTU0lEOwotICAgIFVJTlQgICAgICAgICAgICB1U2xlZXB5U1RBQ250ID0gMDsKLSAgICBVSU5UICAgICAgICAgICAgdU5vblNob3J0U2xvdFNUQUNudCA9IDA7Ci0gICAgVUlOVCAgICAgICAgICAgIHVMb25nUHJlYW1ibGVTVEFDbnQgPSAwOworICAgIHVuc2lnbmVkIGludCB1U2xlZXB5U1RBQ250ID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgdU5vblNob3J0U2xvdFNUQUNudCA9IDA7CisgICAgdW5zaWduZWQgaW50IHVMb25nUHJlYW1ibGVTVEFDbnQgPSAwOwogICAgIHZpYXdnZXRfd3BhX2hlYWRlciogd3BhaGRyOyAgLy9EYXZpZFdhbmcKIAogICAgIHNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwpAQCAtMTAzNCwyMiArMTAyNywyMiBAQAogIC8vMjAwOC00LTE0IDxhZGQ+IGJ5IGNoZXN0ZXIgZm9yIGxlZCBpc3N1ZQogI2lmZGVmIEZPUl9MRURfT05fTk9URUJPT0sKIE1BQ3ZHUElPSW4ocERldmljZS0+UG9ydE9mZnNldCwgJnBEZXZpY2UtPmJ5R1BJTyk7Ci1pZiAoKCggIShwRGV2aWNlLT5ieUdQSU8gJiBHUElPMF9EQVRBKSYmKHBEZXZpY2UtPmJIV1JhZGlvT2ZmID09IEZBTFNFKSl8fCgocERldmljZS0+YnlHUElPICYgR1BJTzBfREFUQSkmJihwRGV2aWNlLT5iSFdSYWRpb09mZiA9PSBUUlVFKSkpJiYoY2M9PUZBTFNFKSl7Ci1jYz1UUlVFOworaWYgKCgoICEocERldmljZS0+YnlHUElPICYgR1BJTzBfREFUQSkmJihwRGV2aWNlLT5iSFdSYWRpb09mZiA9PSBmYWxzZSkpfHwoKHBEZXZpY2UtPmJ5R1BJTyAmIEdQSU8wX0RBVEEpJiYocERldmljZS0+YkhXUmFkaW9PZmYgPT0gdHJ1ZSkpKSYmKGNjPT1mYWxzZSkpeworY2M9dHJ1ZTsKIH0KLWVsc2UgaWYoY2M9PVRSVUUpeworZWxzZSBpZihjYz09dHJ1ZSl7CiAKLWlmKHBEZXZpY2UtPmJIV1JhZGlvT2ZmID09IFRSVUUpeworaWYocERldmljZS0+YkhXUmFkaW9PZmYgPT0gdHJ1ZSl7CiAgICAgICAgICAgICBpZiAoICEocERldmljZS0+YnlHUElPICYgR1BJTzBfREFUQSkpCiAvL3x8KCAhKHBEZXZpY2UtPmJ5R1BJTyAmIEdQSU8wX0RBVEEpICYmIChwRGV2aWNlLT5ieVJhZGlvQ3RsICYgRUVQX1JBRElPQ1RMX0lOVikpKQoge2lmKHN0YXR1cz09MSkgZ290byBzdGFydDsKIHN0YXR1cz0xOwogQ0FSRGJSYWRpb1Bvd2VyT2ZmKHBEZXZpY2UpOwotICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYkFjdGl2ZSA9IEZBTFNFOworICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYkFjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHBNZ210LT5lQ3Vyck1vZGUgPSBXTUFDX01PREVfU1RBTkRCWTsKICAgICAgICAgICAgICAgICBwTWdtdC0+ZUN1cnJTdGF0ZSA9IFdNQUNfU1RBVEVfSURMRTsKICAgICAgICAgICAgICAgICAvL25ldGlmX3N0b3BfcXVldWUocERldmljZS0+ZGV2KTsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBmYWxzZTsKIAogfQogICBpZiAocERldmljZS0+YnlHUElPICZHUElPMF9EQVRBKQpAQCAtMTA2NCwxMSArMTA1NywxMSBAQAoge2lmKHN0YXR1cz09MykgZ290byBzdGFydDsKIHN0YXR1cz0zOwogQ0FSRGJSYWRpb1Bvd2VyT2ZmKHBEZXZpY2UpOwotICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYkFjdGl2ZSA9IEZBTFNFOworICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYkFjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHBNZ210LT5lQ3Vyck1vZGUgPSBXTUFDX01PREVfU1RBTkRCWTsKICAgICAgICAgICAgICAgICBwTWdtdC0+ZUN1cnJTdGF0ZSA9IFdNQUNfU1RBVEVfSURMRTsKICAgICAgICAgICAgICAgICAvL25ldGlmX3N0b3BfcXVldWUocERldmljZS0+ZGV2KTsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBmYWxzZTsKIAogfQogICBpZiAoICEocERldmljZS0+YnlHUElPICYgR1BJTzBfREFUQSkpCkBAIC0xMDkyLDExICsxMDg1LDExIEBACiAKIHsKICAgICAgICBwRGV2aWNlLT5ieVJlQXNzb2NDb3VudCsrOwotICAgaWYoKHBEZXZpY2UtPmJ5UmVBc3NvY0NvdW50ID4gMTApICYmIChwRGV2aWNlLT5iTGlua1Bhc3MgIT0gVFJVRSkpIHsgIC8vMTAgc2VjIHRpbWVvdXQKKyAgIGlmKChwRGV2aWNlLT5ieVJlQXNzb2NDb3VudCA+IDEwKSAmJiAocERldmljZS0+YkxpbmtQYXNzICE9IHRydWUpKSB7ICAvLzEwIHNlYyB0aW1lb3V0CiAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIlJlLWFzc29jaWF0aW9uIHRpbWVvdXQhISFcbiIpOwogCQkgICBwRGV2aWNlLT5ieVJlQXNzb2NDb3VudCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAjaWZkZWYgV1BBX1NVUFBMSUNBTlRfRFJJVkVSX1dFWFRfU1VQUE9SVAotICAgICAgICAgICAgICAgICAgICAvLyBpZihwRGV2aWNlLT5iV1BBU3VwcFdleHRFbmFibGVkID09IFRSVUUpCisgICAgICAgICAgICAgICAgICAgIC8vIGlmKHBEZXZpY2UtPmJXUEFTdXBwV2V4dEVuYWJsZWQgPT0gdHJ1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgIAl1bmlvbiBpd3JlcV9kYXRhICB3cnF1OwogICAgICAgICAgICAgICAgICAgCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mICh3cnF1KSk7CkBAIC0xMTA2LDcgKzEwOTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICNlbmRpZgogICAgICB9Ci0gICBlbHNlIGlmKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSBUUlVFKQorICAgZWxzZSBpZihwRGV2aWNlLT5iTGlua1Bhc3MgPT0gdHJ1ZSkKICAgIAlwRGV2aWNlLT5ieVJlQXNzb2NDb3VudCA9IDA7CiB9CiAKQEAgLTEyMDAsMjcgKzExOTMsMjcgQEAKICAgICAgICAgaWYgKFdMQU5fR0VUX0VSUF9VU0VfUFJPVEVDVElPTihwRGV2aWNlLT5ieUVSUEZsYWcpKSB7CiAgICAgICAgICAgICBpZiAoIXBEZXZpY2UtPmJQcm90ZWN0TW9kZSkgewogICAgICAgICAgICAgICAgIE1BQ3ZFbmFibGVQcm90ZWN0TUQocERldmljZS0+UG9ydE9mZnNldCk7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YlByb3RlY3RNb2RlID0gVFJVRTsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5iUHJvdGVjdE1vZGUgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJQcm90ZWN0TW9kZSkgewogICAgICAgICAgICAgICAgIE1BQ3ZEaXNhYmxlUHJvdGVjdE1EKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJQcm90ZWN0TW9kZSA9IEZBTFNFOworICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJQcm90ZWN0TW9kZSA9IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIC8vIG9uL29mZiBzaG9ydCBzbG90IHRpbWUKIAogICAgICAgICBpZiAodU5vblNob3J0U2xvdFNUQUNudCA+IDApIHsKICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iU2hvcnRTbG90VGltZSkgewotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJTaG9ydFNsb3RUaW1lID0gRkFMU0U7CisgICAgICAgICAgICAgICAgcERldmljZS0+YlNob3J0U2xvdFRpbWUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBCQnZTZXRTaG9ydFNsb3RUaW1lKHBEZXZpY2UpOwogICAgICAgICAgICAgICAgIHZVcGRhdGVJRlMoKHZvaWQgKilwRGV2aWNlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGlmICghcERldmljZS0+YlNob3J0U2xvdFRpbWUpIHsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5iU2hvcnRTbG90VGltZSA9IFRSVUU7CisgICAgICAgICAgICAgICAgcERldmljZS0+YlNob3J0U2xvdFRpbWUgPSB0cnVlOwogICAgICAgICAgICAgICAgIEJCdlNldFNob3J0U2xvdFRpbWUocERldmljZSk7CiAgICAgICAgICAgICAgICAgdlVwZGF0ZUlGUygodm9pZCAqKXBEZXZpY2UpOwogICAgICAgICAgICAgfQpAQCAtMTIzMSwxMyArMTIyNCwxMyBAQAogICAgICAgICBpZiAodUxvbmdQcmVhbWJsZVNUQUNudCA+IDApIHsKICAgICAgICAgICAgIGlmICghcERldmljZS0+YkJhcmtlclByZWFtYmxlTWQpIHsKICAgICAgICAgICAgICAgICBNQUN2RW5hYmxlQmFya2VyUHJlYW1ibGVNZChwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5iQmFya2VyUHJlYW1ibGVNZCA9IFRSVUU7CisgICAgICAgICAgICAgICAgcERldmljZS0+YkJhcmtlclByZWFtYmxlTWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJCYXJrZXJQcmVhbWJsZU1kKSB7CiAgICAgICAgICAgICAgICAgTUFDdkRpc2FibGVCYXJrZXJQcmVhbWJsZU1kKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJCYXJrZXJQcmVhbWJsZU1kID0gRkFMU0U7CisgICAgICAgICAgICAgICAgcERldmljZS0+YkJhcmtlclByZWFtYmxlTWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xMjQ3LDkgKzEyNDAsOSBAQAogICAgIC8vIENoZWNrIGlmIGFueSBTVEEgaW4gUFMgbW9kZSwgZW5hYmxlIERUSU0gbXVsdGljYXN0IGRlbGl2ZXIKICAgICBpZiAocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX0FQKSB7CiAgICAgICAgIGlmICh1U2xlZXB5U1RBQ250ID4gMCkKLSAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYlBTRW5hYmxlID0gVFJVRTsKKyAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYlBTRW5hYmxlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iUFNFbmFibGUgPSBGQUxTRTsKKyAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYlBTRW5hYmxlID0gZmFsc2U7CiAgICAgfQogCiAgICAgcEl0ZW1TU0lEID0gKFBXTEFOX0lFX1NTSUQpcE1nbXQtPmFieURlc2lyZVNTSUQ7CkBAIC0xMjc2LDEyICsxMjY5LDEyIEBACiAgICAgCSAgICB9CiAKICAgICAgICAgCWlmIChwTWdtdC0+c05vZGVEQlRhYmxlWzBdLnVJbkFjdGl2ZUNvdW50ID49IExPU1RfQkVBQ09OX0NPVU5UKSB7Ci0gICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iQWN0aXZlID0gRkFMU0U7CisgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iQWN0aXZlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgcE1nbXQtPmVDdXJyTW9kZSA9IFdNQUNfTU9ERV9TVEFOREJZOwogICAgICAgICAgICAgICAgIHBNZ210LT5lQ3VyclN0YXRlID0gV01BQ19TVEFURV9JRExFOwogICAgICAgICAgICAgICAgIG5ldGlmX3N0b3BfcXVldWUocERldmljZS0+ZGV2KTsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBGQUxTRTsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5iUm9hbWluZyA9IFRSVUU7CisgICAgICAgICAgICAgICAgcERldmljZS0+YkxpbmtQYXNzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcERldmljZS0+YlJvYW1pbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX05PVElDRSwgS0VSTl9JTkZPICJMb3N0IEFQIGJlYWNvbiBbJWRdIHNlYywgZGlzY29ubmVjdGVkICFcbiIsIHBNZ210LT5zTm9kZURCVGFibGVbMF0udUluQWN0aXZlQ291bnQpOwogICAgICAgICBpZiAoKHBEZXZpY2UtPmJXUEFERVZVcCkgJiYgKHBEZXZpY2UtPnNrYiAhPSBOVUxMKSkgewogICAgICAgICAgICAgIHdwYWhkciA9ICh2aWF3Z2V0X3dwYV9oZWFkZXIgKilwRGV2aWNlLT5za2ItPmRhdGE7CkBAIC0xMjk4LDcgKzEyOTEsNyBAQAogICAgICAgICAgICAgIHBEZXZpY2UtPnNrYiA9IGRldl9hbGxvY19za2IoKGludClwRGV2aWNlLT5yeF9idWZfc3opOwogICAgICAgICAgfTsKICAgICNpZmRlZiBXUEFfU1VQUExJQ0FOVF9EUklWRVJfV0VYVF9TVVBQT1JUCi0gIC8vIGlmKHBEZXZpY2UtPmJXUEFTdXBwV2V4dEVuYWJsZWQgPT0gVFJVRSkKKyAgLy8gaWYocERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9PSB0cnVlKQogICAgICAgewogCXVuaW9uIGl3cmVxX2RhdGEgIHdycXU7CiAJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2YgKHdycXUpKTsKQEAgLTEzMTQsNyArMTMwNyw3IEBACiAgICAgICAgICAgICAgICAgcERldmljZS0+dUF1dG9SZUNvbm5lY3RUaW1lKys7CiAJICAgICAgICNpZmRlZiBXUEFfU1VQUExJQ0FOVF9EUklWRVJfV0VYVF9TVVBQT1JUCiAgICAgICAgICAgICAgICAgLy9uZXR3b3JrIG1hbmFnZXIgc3VwcG9ydCBuZWVkIG5vdCBkbyBSb2FtaW5nIHNjYW4/Pz8KLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5iV1BBU3VwcFdleHRFbmFibGVkID09VFJVRSkKKyAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5iV1BBU3VwcFdleHRFbmFibGVkID09dHJ1ZSkKIAkJIHBEZXZpY2UtPnVBdXRvUmVDb25uZWN0VGltZSA9IDA7CiAJICAgICAjZW5kaWYKICAgICAgICAgICAgIH0KQEAgLTEzNTgsNyArMTM1MSw3IEBACiAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS51SW5BY3RpdmVDb3VudCA9IDA7CiAgICAgICAgICAgICAgICAgcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX1NUQVJURUQ7CiAgICAgICAgICAgICAgICAgbmV0aWZfc3RvcF9xdWV1ZShwRGV2aWNlLT5kZXYpOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IEZBTFNFOworICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTM5MSwyMyArMTM4NCwyMyBAQAogdm9pZAogQlNTdlVwZGF0ZU5vZGVUeENvdW50ZXIoCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQsCi0gICAgQllURSAgICAgICAgYnlUc3IwLAotICAgIEJZVEUgICAgICAgIGJ5VHNyMSwKLSAgICBQQllURSAgICAgICBwYnlCdWZmZXIsCi0gICAgVUlOVCAgICAgICAgdUZJRk9IZWFkZXJTaXplCisgICAgdW5zaWduZWQgY2hhciBieVRzcjAsCisgICAgdW5zaWduZWQgY2hhciBieVRzcjEsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5QnVmZmVyLAorICAgIHVuc2lnbmVkIGludCB1RklGT0hlYWRlclNpemUKICAgICApCiB7CiAgICAgUFNEZXZpY2UgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpaERldmljZUNvbnRleHQ7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7Ci0gICAgVUlOVCAgICAgICAgICAgIHVOb2RlSW5kZXggPSAwOwotICAgIEJZVEUgICAgICAgICAgICBieVR4UmV0cnkgPSAoYnlUc3IwICYgVFNSMF9OQ1IpOworICAgIHVuc2lnbmVkIGludCB1Tm9kZUluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VHhSZXRyeSA9IChieVRzcjAgJiBUU1IwX05DUik7CiAgICAgUFNUeEJ1ZkhlYWQgICAgIHBUeEJ1ZkhlYWQ7CiAgICAgUFM4MDJfMTFIZWFkZXIgIHBNQUNIZWFkZXI7Ci0gICAgV09SRCAgICAgICAgICAgIHdSYXRlOwotICAgIFdPUkQgICAgICAgICAgICB3RmFsbEJhY2tSYXRlID0gUkFURV8xTTsKLSAgICBCWVRFICAgICAgICAgICAgYnlGYWxsQmFjazsKLSAgICBVSU5UICAgICAgICAgICAgaWk7Ci0vLwlVSU5UCQl0eFJldHJ5VGVtcDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmF0ZTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RmFsbEJhY2tSYXRlID0gUkFURV8xTTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RmFsbEJhY2s7CisgICAgdW5zaWduZWQgaW50IGlpOworLy8JdW5zaWduZWQgaW50IHR4UmV0cnlUZW1wOwogLy9QTElDRV9ERUJVRy0+CiAJLy90eFJldHJ5VGVtcCA9IGJ5VHhSZXRyeTsKIAkvL2lmICh0eFJldHJ5VGVtcD09IDgpCkBAIC0xNTg0LDE0ICsxNTc3LDE0IEBACiB2b2lkCiBCU1N2Q2xlYXJOb2RlREJUYWJsZSgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKLSAgICBVSU5UIHVTdGFydEluZGV4CisgICAgdW5zaWduZWQgaW50IHVTdGFydEluZGV4CiAgICAgKQogCiB7CiAgICAgUFNEZXZpY2UgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpaERldmljZUNvbnRleHQ7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7CiAgICAgc3RydWN0IHNrX2J1ZmYgICpza2I7Ci0gICAgVUlOVCAgICAgICAgICAgIGlpOworICAgIHVuc2lnbmVkIGludCBpaTsKIAogICAgIGZvciAoaWkgPSB1U3RhcnRJbmRleDsgaWkgPCAoTUFYX05PREVfTlVNICsgMSk7IGlpKyspIHsKICAgICAgICAgaWYgKHBNZ210LT5zTm9kZURCVGFibGVbaWldLmJBY3RpdmUpIHsKQEAgLTE2MjksOCArMTYyMiw4IEBACiAgICAgICAgIHBCU1NMaXN0ID0gQlNTcEFkZHJJc0luQlNTTGlzdChwRGV2aWNlLCBwTWdtdC0+YWJ5Q3VyckJTU0lELCAoUFdMQU5fSUVfU1NJRClwTWdtdC0+YWJ5Q3VyclNTSUQpOwogICAgICAgICBpZiAocEJTU0xpc3QgIT0gTlVMTCkgewogICAgICAgICAgICAgLy8gVXBkYXRhIEJCIFJlZyBpZiBSU1NJIGlzIHRvbyBzdHJvbmcuCi0gICAgICAgICAgICBMT05HICAgIExvY2FsbGRCbUF2ZXJhZ2UgPSAwOwotICAgICAgICAgICAgTE9ORyAgICB1TnVtb2ZkQm0gPSAwOworICAgICAgICAgICAgbG9uZyAgICBMb2NhbGxkQm1BdmVyYWdlID0gMDsKKyAgICAgICAgICAgIGxvbmcgICAgdU51bW9mZEJtID0gMDsKICAgICAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IFJTU0lfU1RBVF9DT1VOVDsgaWkrKykgewogICAgICAgICAgICAgICAgIGlmIChwQlNTTGlzdC0+bGRCbUF2ZXJhZ2VbaWldICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgdU51bW9mZEJtICsrOwpAQCAtMTY2NiwxMCArMTY1OSwxMCBAQAogewogICAgIFBTRGV2aWNlICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKWhEZXZpY2VDb250ZXh0OwogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwotICAgIFVJTlQgICAgICAgICAgICBpaTsKKyAgICB1bnNpZ25lZCBpbnQgaWk7CiAKICAgICBmb3IgKGlpID0gMDsgaWkgPCBNQVhfQlNTX05VTTsgaWkrKykgewotICAgICAgICBwTWdtdC0+c0JTU0xpc3RbaWldLmJTZWxlY3RlZCA9IEZBTFNFOworICAgICAgICBwTWdtdC0+c0JTU0xpc3RbaWldLmJTZWxlY3RlZCA9IGZhbHNlOwogICAgIH0KICAgICByZXR1cm47CiB9CkBAIC0xNjgwLDkgKzE2NzMsOSBAQAogICAgICkKIHsKICAgIFBTRGV2aWNlICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKWhEZXZpY2VDb250ZXh0OwotICAgVUxPTkcgVHhPa1JhdGlvLCBUeENudDsKLSAgIFVMT05HIFJ4T2tSYXRpbyxSeENudDsKLSAgIFVMT05HIFJzc2lSYXRpbzsKKyAgIHVuc2lnbmVkIGxvbmcgVHhPa1JhdGlvLCBUeENudDsKKyAgIHVuc2lnbmVkIGxvbmcgUnhPa1JhdGlvLFJ4Q250OworICAgdW5zaWduZWQgbG9uZyBSc3NpUmF0aW87CiAgICBsb25nIGxkQm07CiAKIFR4Q250ID0gcERldmljZS0+c2NTdGF0aXN0aWMuVHhOb1JldHJ5T2tDb3VudCArCkBAIC0xNjkzLDcgKzE2ODYsNyBAQAogVHhPa1JhdGlvID0gKFR4Q250IDwgNikgPyA0MDAwOigocERldmljZS0+c2NTdGF0aXN0aWMuVHhOb1JldHJ5T2tDb3VudCAqIDQwMDApIC8gVHhDbnQpOwogUnhPa1JhdGlvID0gKFJ4Q250IDwgNikgPyAyMDAwOigocERldmljZS0+c2NTdGF0aXN0aWMuUnhPa0NudCAqIDIwMDApIC8gUnhDbnQpOwogLy9kZWNpZGUgbGluayBxdWFsaXR5Ci1pZihwRGV2aWNlLT5iTGlua1Bhc3MgIT1UUlVFKQoraWYocERldmljZS0+YkxpbmtQYXNzICE9dHJ1ZSkKIHsKICAvLyAgcHJpbnRrKCJzX3VDYWxjdWxhdGVMaW5rUXVhbC0tPkxpbmsgZGlzY29ubmVjdCBhbmQgUG9vciBxdWFsaXR5KipcbiIpOwogICAgcERldmljZS0+c2NTdGF0aXN0aWMuTGlua1F1YWxpdHkgPSAwOwpAQCAtMTcwMSw3ICsxNjk0LDcgQEAKIH0KIGVsc2UKIHsKLSAgIFJGdlJTU0lUb2RCbShwRGV2aWNlLCAoQllURSkocERldmljZS0+dUN1cnJSU1NJKSwgJmxkQm0pOworICAgUkZ2UlNTSVRvZEJtKHBEZXZpY2UsICh1bnNpZ25lZCBjaGFyKShwRGV2aWNlLT51Q3VyclJTU0kpLCAmbGRCbSk7CiAgICBpZigtbGRCbSA8IDUwKSAgewogICAgCVJzc2lSYXRpbyA9IDQwMDA7CiAgICAgIH0KQEAgLTE3MzUsOCArMTcyOCw4IEBACiAgICAgICAgICgocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfSUJTU19TVEEpICYmIChwTWdtdC0+ZUN1cnJTdGF0ZSA9PSBXTUFDX1NUQVRFX0pPSU5URUQpKSkgewogICAgICAgICBwQlNTTGlzdCA9IEJTU3BBZGRySXNJbkJTU0xpc3QocERldmljZSwgcE1nbXQtPmFieUN1cnJCU1NJRCwgKFBXTEFOX0lFX1NTSUQpcE1nbXQtPmFieUN1cnJTU0lEKTsKICAgICAgICAgaWYgKHBCU1NMaXN0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPSAoQllURSkgKH4ocEJTU0xpc3QtPmxkQm1BdmVyUmFuZ2UpICsgMSk7Ci0gICAgICAgICAgICAvL0JCdlVwZGF0ZVByZUVEVGhyZXNob2xkKHBEZXZpY2UsIEZBTFNFKTsKKyAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPSAodW5zaWduZWQgY2hhcikgKH4ocEJTU0xpc3QtPmxkQm1BdmVyUmFuZ2UpICsgMSk7CisgICAgICAgICAgICAvL0JCdlVwZGF0ZVByZUVEVGhyZXNob2xkKHBEZXZpY2UsIGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Jzc2RiLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Jzc2RiLmgKaW5kZXggZTA5ZWY4Ny4uMGFmNDIxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9ic3NkYi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvYnNzZGIuaApAQCAtOTAsNjkgKzkwLDY5IEBACiAKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU0VSUE9iamVjdCB7Ci0gICAgQk9PTCAgICBiRVJQRXhpc3Q7Ci0gICAgQllURSAgICBieUVSUDsKKyAgICBib29sIGJFUlBFeGlzdDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RVJQOwogfUVSUE9iamVjdCwgKlBFUlBPYmplY3Q7CiAKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU1JTTkNhcE9iamVjdCB7Ci0gICAgQk9PTCAgICBiUlNOQ2FwRXhpc3Q7Ci0gICAgV09SRCAgICB3UlNOQ2FwOworICAgIGJvb2wgYlJTTkNhcEV4aXN0OworICAgIHVuc2lnbmVkIHNob3J0IHdSU05DYXA7CiB9U1JTTkNhcE9iamVjdCwgKlBTUlNOQ2FwT2JqZWN0OwogCiAvLyBCU1MgaW5mbyhBUCkKICNwcmFnbWEgcGFjaygxKQogdHlwZWRlZiBzdHJ1Y3QgdGFnS25vd25CU1MgewogICAgIC8vIEJTUyBpbmZvCi0gICAgQk9PTCAgICAgICAgICAgIGJBY3RpdmU7Ci0gICAgQllURSAgICAgICAgICAgIGFieUJTU0lEW1dMQU5fQlNTSURfTEVOXTsKLSAgICBVSU5UICAgICAgICAgICAgdUNoYW5uZWw7Ci0gICAgQllURSAgICAgICAgICAgIGFieVN1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOICsgMV07Ci0gICAgQllURSAgICAgICAgICAgIGFieUV4dFN1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOICsgMV07Ci0gICAgVUlOVCAgICAgICAgICAgIHVSU1NJOwotICAgIEJZVEUgICAgICAgICAgICBieVNROwotICAgIFdPUkQgICAgICAgICAgICB3QmVhY29uSW50ZXJ2YWw7Ci0gICAgV09SRCAgICAgICAgICAgIHdDYXBJbmZvOwotICAgIEJZVEUgICAgICAgICAgICBhYnlTU0lEW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9TU0lEX01BWExFTiArIDFdOwotICAgIEJZVEUgICAgICAgICAgICBieVJ4UmF0ZTsKKyAgICBib29sIGJBY3RpdmU7CisgICAgdW5zaWduZWQgY2hhciBhYnlCU1NJRFtXTEFOX0JTU0lEX0xFTl07CisgICAgdW5zaWduZWQgaW50CXVDaGFubmVsOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5U3VwcFJhdGVzW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9SQVRFU19NQVhMRU4gKyAxXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUV4dFN1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOICsgMV07CisgICAgdW5zaWduZWQgaW50CXVSU1NJOworICAgIHVuc2lnbmVkIGNoYXIgYnlTUTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3QmVhY29uSW50ZXJ2YWw7CisgICAgdW5zaWduZWQgc2hvcnQgd0NhcEluZm87CisgICAgdW5zaWduZWQgY2hhciBhYnlTU0lEW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9TU0lEX01BWExFTiArIDFdOworICAgIHVuc2lnbmVkIGNoYXIgYnlSeFJhdGU7CiAKLS8vICAgIFdPUkQgICAgICAgICAgICB3QVRJTVdpbmRvdzsKLSAgICBCWVRFICAgICAgICAgICAgYnlSU1NJU3RhdENudDsKLSAgICBMT05HICAgICAgICAgICAgbGRCbU1BWDsKLSAgICBMT05HICAgICAgICAgICAgbGRCbUF2ZXJhZ2VbUlNTSV9TVEFUX0NPVU5UXTsKLSAgICBMT05HICAgICAgICAgICAgbGRCbUF2ZXJSYW5nZTsKKy8vICAgIHVuc2lnbmVkIHNob3J0IHdBVElNV2luZG93OworICAgIHVuc2lnbmVkIGNoYXIgYnlSU1NJU3RhdENudDsKKyAgICBsb25nICAgICAgICAgICAgbGRCbU1BWDsKKyAgICBsb25nICAgICAgICAgICAgbGRCbUF2ZXJhZ2VbUlNTSV9TVEFUX0NPVU5UXTsKKyAgICBsb25nICAgICAgICAgICAgbGRCbUF2ZXJSYW5nZTsKICAgICAvL0ZvciBhbnkgQlNTSUQgc2VsZWN0aW9uIGltcHJvdm1lbnQKLSAgICBCT09MICAgICAgICAgICAgYlNlbGVjdGVkOworICAgIGJvb2wgYlNlbGVjdGVkOwogCiAgICAgLy8rKyBXUEEgaW5mb3JtYXRpb25zCi0gICAgQk9PTCAgICAgICAgICAgIGJXUEFWYWxpZDsKLSAgICBCWVRFICAgICAgICAgICAgYnlHS1R5cGU7Ci0gICAgQllURSAgICAgICAgICAgIGFieVBLVHlwZVs0XTsKLSAgICBXT1JEICAgICAgICAgICAgd1BLQ291bnQ7Ci0gICAgQllURSAgICAgICAgICAgIGFieUF1dGhUeXBlWzRdOwotICAgIFdPUkQgICAgICAgICAgICB3QXV0aENvdW50OwotICAgIEJZVEUgICAgICAgICAgICBieURlZmF1bHRLX2FzX1BLOwotICAgIEJZVEUgICAgICAgICAgICBieVJlcGxheUlkeDsKKyAgICBib29sIGJXUEFWYWxpZDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5R0tUeXBlOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5UEtUeXBlWzRdOworICAgIHVuc2lnbmVkIHNob3J0IHdQS0NvdW50OworICAgIHVuc2lnbmVkIGNoYXIgYWJ5QXV0aFR5cGVbNF07CisgICAgdW5zaWduZWQgc2hvcnQgd0F1dGhDb3VudDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RGVmYXVsdEtfYXNfUEs7CisgICAgdW5zaWduZWQgY2hhciBieVJlcGxheUlkeDsKICAgICAvLy0tCiAKICAgICAvLysrIFdQQTIgaW5mb3JtYXRpb25zCi0gICAgQk9PTCAgICAgICAgICAgIGJXUEEyVmFsaWQ7Ci0gICAgQllURSAgICAgICAgICAgIGJ5Q1NTR0s7Ci0gICAgV09SRCAgICAgICAgICAgIHdDU1NQS0NvdW50OwotICAgIEJZVEUgICAgICAgICAgICBhYnlDU1NQS1s0XTsKLSAgICBXT1JEICAgICAgICAgICAgd0FLTVNTQXV0aENvdW50OwotICAgIEJZVEUgICAgICAgICAgICBhYnlBS01TU0F1dGhUeXBlWzRdOworICAgIGJvb2wgYldQQTJWYWxpZDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q1NTR0s7CisgICAgdW5zaWduZWQgc2hvcnQgd0NTU1BLQ291bnQ7CisgICAgdW5zaWduZWQgY2hhciBhYnlDU1NQS1s0XTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3QUtNU1NBdXRoQ291bnQ7CisgICAgdW5zaWduZWQgY2hhciBhYnlBS01TU0F1dGhUeXBlWzRdOwogCiAgICAgLy8rKyAgd3BhY3RsCi0gICAgQllURSAgICAgICAgICAgIGJ5V1BBSUVbTUFYX1dQQV9JRV9MRU5dOwotICAgIEJZVEUgICAgICAgICAgICBieVJTTklFW01BWF9XUEFfSUVfTEVOXTsKLSAgICBXT1JEICAgICAgICAgICAgd1dQQUxlbjsKLSAgICBXT1JEICAgICAgICAgICAgd1JTTkxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5V1BBSUVbTUFYX1dQQV9JRV9MRU5dOworICAgIHVuc2lnbmVkIGNoYXIgYnlSU05JRVtNQVhfV1BBX0lFX0xFTl07CisgICAgdW5zaWduZWQgc2hvcnQgd1dQQUxlbjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UlNOTGVuOwogCiAgICAgLy8gQ2xlYXIgY291bnQKLSAgICBVSU5UICAgICAgICAgICAgdUNsZWFyQ291bnQ7Ci0vLyAgICBCWVRFICAgICAgICAgICAgYWJ5SUVzW1dMQU5fQkVBQ09OX0ZSX01BWExFTl07Ci0gICAgVUlOVCAgICAgICAgICAgIHVJRUxlbmd0aDsKKyAgICB1bnNpZ25lZCBpbnQJdUNsZWFyQ291bnQ7CisvLyAgICB1bnNpZ25lZCBjaGFyIGFieUlFc1tXTEFOX0JFQUNPTl9GUl9NQVhMRU5dOworICAgIHVuc2lnbmVkIGludAl1SUVMZW5ndGg7CiAgICAgUVdPUkQgICAgICAgICAgIHF3QlNTVGltZXN0YW1wOwogICAgIFFXT1JEICAgICAgICAgICBxd0xvY2FsVFNGOyAgICAgLy8gbG9jYWwgVFNGIHRpbWVyCiAKQEAgLTE2MSw3ICsxNjEsNyBAQAogCiAgICAgRVJQT2JqZWN0ICAgICAgIHNFUlA7CiAgICAgU1JTTkNhcE9iamVjdCAgIHNSU05DYXBPYmo7Ci0gICAgQllURSAgICAgICAgICAgIGFieUlFc1sxMDI0XTsgICAvLyBkb24ndCBtb3ZlIHRoaXMgZmllbGQgISEKKyAgICB1bnNpZ25lZCBjaGFyIGFieUlFc1sxMDI0XTsgICAvLyBkb24ndCBtb3ZlIHRoaXMgZmllbGQgISEKIAogfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIEtub3duQlNTICwgKlBLbm93bkJTUzsKQEAgLTE4MSw1OSArMTgxLDU5IEBACiAvLyBTVEEgbm9kZSBpbmZvCiB0eXBlZGVmIHN0cnVjdCB0YWdLbm93bk5vZGVEQiB7CiAgICAgLy8gU1RBIGluZm8KLSAgICBCT09MICAgICAgICAgICAgYkFjdGl2ZTsKLSAgICBCWVRFICAgICAgICAgICAgYWJ5TUFDQWRkcltXTEFOX0FERFJfTEVOXTsKLSAgICBCWVRFICAgICAgICAgICAgYWJ5Q3VyclN1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOXTsKLSAgICBCWVRFICAgICAgICAgICAgYWJ5Q3VyckV4dFN1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOXTsKLSAgICBXT1JEICAgICAgICAgICAgd1R4RGF0YVJhdGU7Ci0gICAgQk9PTCAgICAgICAgICAgIGJTaG9ydFByZWFtYmxlOwotICAgIEJPT0wgICAgICAgICAgICBiRVJQRXhpc3Q7Ci0gICAgQk9PTCAgICAgICAgICAgIGJTaG9ydFNsb3RUaW1lOwotICAgIFVJTlQgICAgICAgICAgICB1SW5BY3RpdmVDb3VudDsKLSAgICBXT1JEICAgICAgICAgICAgd01heEJhc2ljUmF0ZTsgICAgIC8vR2V0IGZyb20gYnlUb3BPRkRNQmFzaWNSYXRlIG9yIGJ5VG9wQ0NLQmFzaWNSYXRlIHdoaWNoIGRlcGVuZHMgb24gcGFja2V0VHlwLgotICAgIFdPUkQgICAgICAgICAgICB3TWF4U3VwcFJhdGU7ICAgICAgLy9SZWNvcmRzIHRoZSBoaWdoZXN0IHN1cHBvcnRlZCByYXRlIGdldHRpbmcgZnJvbSBTdXBwUmF0ZXMgSUUgYW5kIEV4dFN1cHBSYXRlcyBJRSBpbiBCZWFjb24uCi0gICAgV09SRCAgICAgICAgICAgIHdTdXBwUmF0ZTsKLSAgICBCWVRFICAgICAgICAgICAgYnlUb3BPRkRNQmFzaWNSYXRlOy8vUmVjb3JkcyB0aGUgaGlnaGVzdCBiYXNpYyByYXRlIGluIE9GRE0gbW9kZQotICAgIEJZVEUgICAgICAgICAgICBieVRvcENDS0Jhc2ljUmF0ZTsgLy9SZWNvcmRzIHRoZSBoaWdoZXN0IGJhc2ljIHJhdGUgaW4gQ0NLIG1vZGUKKyAgICBib29sIGJBY3RpdmU7CisgICAgdW5zaWduZWQgY2hhciBhYnlNQUNBZGRyW1dMQU5fQUREUl9MRU5dOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5Q3VyclN1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUN1cnJFeHRTdXBwUmF0ZXNbV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1JBVEVTX01BWExFTl07CisgICAgdW5zaWduZWQgc2hvcnQgd1R4RGF0YVJhdGU7CisgICAgYm9vbCBiU2hvcnRQcmVhbWJsZTsKKyAgICBib29sIGJFUlBFeGlzdDsKKyAgICBib29sIGJTaG9ydFNsb3RUaW1lOworICAgIHVuc2lnbmVkIGludAl1SW5BY3RpdmVDb3VudDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3TWF4QmFzaWNSYXRlOyAgICAgLy9HZXQgZnJvbSBieVRvcE9GRE1CYXNpY1JhdGUgb3IgYnlUb3BDQ0tCYXNpY1JhdGUgd2hpY2ggZGVwZW5kcyBvbiBwYWNrZXRUeXAuCisgICAgdW5zaWduZWQgc2hvcnQgd01heFN1cHBSYXRlOyAgICAgIC8vUmVjb3JkcyB0aGUgaGlnaGVzdCBzdXBwb3J0ZWQgcmF0ZSBnZXR0aW5nIGZyb20gU3VwcFJhdGVzIElFIGFuZCBFeHRTdXBwUmF0ZXMgSUUgaW4gQmVhY29uLgorICAgIHVuc2lnbmVkIHNob3J0IHdTdXBwUmF0ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VG9wT0ZETUJhc2ljUmF0ZTsvL1JlY29yZHMgdGhlIGhpZ2hlc3QgYmFzaWMgcmF0ZSBpbiBPRkRNIG1vZGUKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VG9wQ0NLQmFzaWNSYXRlOyAvL1JlY29yZHMgdGhlIGhpZ2hlc3QgYmFzaWMgcmF0ZSBpbiBDQ0sgbW9kZQogCiAgICAgLy8gRm9yIEFQIG1vZGUKICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNUeFBTUXVldWU7Ci0gICAgV09SRCAgICAgICAgICAgIHdDYXBJbmZvOwotICAgIFdPUkQgICAgICAgICAgICB3TGlzdGVuSW50ZXJ2YWw7Ci0gICAgV09SRCAgICAgICAgICAgIHdBSUQ7CisgICAgdW5zaWduZWQgc2hvcnQgd0NhcEluZm87CisgICAgdW5zaWduZWQgc2hvcnQgd0xpc3RlbkludGVydmFsOworICAgIHVuc2lnbmVkIHNob3J0IHdBSUQ7CiAgICAgTk9ERV9TVEFURSAgICAgIGVOb2RlU3RhdGU7Ci0gICAgQk9PTCAgICAgICAgICAgIGJQU0VuYWJsZTsKLSAgICBCT09MICAgICAgICAgICAgYlJ4UFNQb2xsOwotICAgIEJZVEUgICAgICAgICAgICBieUF1dGhTZXF1ZW5jZTsKLSAgICBVTE9ORyAgICAgICAgICAgdWxMYXN0UnhKaWZmZXI7Ci0gICAgQllURSAgICAgICAgICAgIGJ5U3VwcFJhdGU7Ci0gICAgRFdPUkQgICAgICAgICAgIGR3RmxhZ3M7Ci0gICAgV09SRCAgICAgICAgICAgIHdFblF1ZXVlQ250OworICAgIGJvb2wgYlBTRW5hYmxlOworICAgIGJvb2wgYlJ4UFNQb2xsOworICAgIHVuc2lnbmVkIGNoYXIgYnlBdXRoU2VxdWVuY2U7CisgICAgdW5zaWduZWQgbG9uZyB1bExhc3RSeEppZmZlcjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5U3VwcFJhdGU7CisgICAgdW5zaWduZWQgbG9uZyBkd0ZsYWdzOworICAgIHVuc2lnbmVkIHNob3J0IHdFblF1ZXVlQ250OwogCi0gICAgQk9PTCAgICAgICAgICAgIGJPbkZseTsKLSAgICBVTE9OR0xPTkcgICAgICAgS2V5UlNDOwotICAgIEJZVEUgICAgICAgICAgICBieUtleUluZGV4OwotICAgIERXT1JEICAgICAgICAgICBkd0tleUluZGV4OwotICAgIEJZVEUgICAgICAgICAgICBieUNpcGhlclN1aXRlOwotICAgIERXT1JEICAgICAgICAgICBkd1RTQzQ3XzE2OwotICAgIFdPUkQgICAgICAgICAgICB3VFNDMTVfMDsKLSAgICBVSU5UICAgICAgICAgICAgdVdlcEtleUxlbmd0aDsKLSAgICBCWVRFICAgICAgICAgICAgYWJ5V2VwS2V5W1dMQU5fV0VQTUFYX0tFWUxFTl07CisgICAgYm9vbCBiT25GbHk7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgICAgIEtleVJTQzsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5S2V5SW5kZXg7CisgICAgdW5zaWduZWQgbG9uZyBkd0tleUluZGV4OworICAgIHVuc2lnbmVkIGNoYXIgYnlDaXBoZXJTdWl0ZTsKKyAgICB1bnNpZ25lZCBsb25nIGR3VFNDNDdfMTY7CisgICAgdW5zaWduZWQgc2hvcnQgd1RTQzE1XzA7CisgICAgdW5zaWduZWQgaW50CXVXZXBLZXlMZW5ndGg7CisgICAgdW5zaWduZWQgY2hhciBhYnlXZXBLZXlbV0xBTl9XRVBNQVhfS0VZTEVOXTsKICAgICAvLwogICAgIC8vIEF1dG8gcmF0ZSBmYWxsYmFjayB2YXJzCi0gICAgQk9PTCAgICAgICAgICAgIGJJc0luRmFsbGJhY2s7Ci0gICAgVUlOVCAgICAgICAgICAgIHVBdmVyYWdlUlNTSTsKLSAgICBVSU5UICAgICAgICAgICAgdVJhdGVSZWNvdmVyeVRpbWVvdXQ7Ci0gICAgVUlOVCAgICAgICAgICAgIHVSYXRlUG9sbFRpbWVvdXQ7Ci0gICAgVUlOVCAgICAgICAgICAgIHVUeEZhaWx1cmVzOwotICAgIFVJTlQgICAgICAgICAgICB1VHhBdHRlbXB0czsKKyAgICBib29sIGJJc0luRmFsbGJhY2s7CisgICAgdW5zaWduZWQgaW50CXVBdmVyYWdlUlNTSTsKKyAgICB1bnNpZ25lZCBpbnQJdVJhdGVSZWNvdmVyeVRpbWVvdXQ7CisgICAgdW5zaWduZWQgaW50CXVSYXRlUG9sbFRpbWVvdXQ7CisgICAgdW5zaWduZWQgaW50CXVUeEZhaWx1cmVzOworICAgIHVuc2lnbmVkIGludAl1VHhBdHRlbXB0czsKIAotICAgIFVJTlQgICAgICAgICAgICB1VHhSZXRyeTsKLSAgICBVSU5UICAgICAgICAgICAgdUZhaWx1cmVSYXRpbzsKLSAgICBVSU5UICAgICAgICAgICAgdVJldHJ5UmF0aW87Ci0gICAgVUlOVCAgICAgICAgICAgIHVUeE9rW01BWF9SQVRFKzFdOwotICAgIFVJTlQgICAgICAgICAgICB1VHhGYWlsW01BWF9SQVRFKzFdOwotICAgIFVJTlQgICAgICAgICAgICB1VGltZUNvdW50OworICAgIHVuc2lnbmVkIGludAl1VHhSZXRyeTsKKyAgICB1bnNpZ25lZCBpbnQJdUZhaWx1cmVSYXRpbzsKKyAgICB1bnNpZ25lZCBpbnQJdVJldHJ5UmF0aW87CisgICAgdW5zaWduZWQgaW50CXVUeE9rW01BWF9SQVRFKzFdOworICAgIHVuc2lnbmVkIGludAl1VHhGYWlsW01BWF9SQVRFKzFdOworICAgIHVuc2lnbmVkIGludAl1VGltZUNvdW50OwogCiB9IEtub3duTm9kZURCLCAqUEtub3duTm9kZURCOwogCkBAIC0yNDUsMzIgKzI0NSwzMiBAQAogUEtub3duQlNTCiBCU1NwU2VhcmNoQlNTTGlzdCgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKLSAgICBQQllURSBwYnlEZXNpcmVCU1NJRCwKLSAgICBQQllURSBwYnlEZXNpcmVTU0lELAorICAgIHVuc2lnbmVkIGNoYXIgKnBieURlc2lyZUJTU0lELAorICAgIHVuc2lnbmVkIGNoYXIgKnBieURlc2lyZVNTSUQsCiAgICAgQ0FSRF9QSFlfVFlQRSBlUGh5VHlwZQogICAgICk7CiAKIFBLbm93bkJTUwogQlNTcEFkZHJJc0luQlNTTGlzdCgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKLSAgICBQQllURSBhYnlCU1NJRCwKKyAgICB1bnNpZ25lZCBjaGFyICphYnlCU1NJRCwKICAgICBQV0xBTl9JRV9TU0lEIHBTU0lECiAgICAgKTsKIAogdm9pZAogQlNTdkNsZWFyQlNTTGlzdCgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKLSAgICBCT09MIGJLZWVwQ3VyckJTU0lECisgICAgYm9vbCBiS2VlcEN1cnJCU1NJRAogICAgICk7CiAKLUJPT0wKK2Jvb2wKIEJTU2JJbnNlcnRUb0JTU0xpc3QoCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQsCi0gICAgUEJZVEUgYWJ5QlNTSURBZGRyLAorICAgIHVuc2lnbmVkIGNoYXIgKmFieUJTU0lEQWRkciwKICAgICBRV09SRCBxd1RpbWVzdGFtcCwKLSAgICBXT1JEIHdCZWFjb25JbnRlcnZhbCwKLSAgICBXT1JEIHdDYXBJbmZvLAotICAgIEJZVEUgYnlDdXJyQ2hhbm5lbCwKKyAgICB1bnNpZ25lZCBzaG9ydCB3QmVhY29uSW50ZXJ2YWwsCisgICAgdW5zaWduZWQgc2hvcnQgd0NhcEluZm8sCisgICAgdW5zaWduZWQgY2hhciBieUN1cnJDaGFubmVsLAogICAgIFBXTEFOX0lFX1NTSUQgcFNTSUQsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwU3VwcFJhdGVzLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEV4dFN1cHBSYXRlcywKQEAgLTI3OSwyMCArMjc5LDIwIEBACiAgICAgUFdMQU5fSUVfUlNOX0VYVCBwUlNOV1BBLAogICAgIFBXTEFOX0lFX0NPVU5UUlkgcElFX0NvdW50cnksCiAgICAgUFdMQU5fSUVfUVVJRVQgcElFX1F1aWV0LAotICAgIFVJTlQgdUlFTGVuZ3RoLAotICAgIFBCWVRFIHBieUlFcywKKyAgICB1bnNpZ25lZCBpbnQgdUlFTGVuZ3RoLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUlFcywKICAgICB2b2lkICpwUnhQYWNrZXRDb250ZXh0CiAgICAgKTsKIAogCi1CT09MCitib29sCiBCU1NiVXBkYXRlVG9CU1NMaXN0KAogICAgIHZvaWQgKmhEZXZpY2VDb250ZXh0LAogICAgIFFXT1JEIHF3VGltZXN0YW1wLAotICAgIFdPUkQgd0JlYWNvbkludGVydmFsLAotICAgIFdPUkQgd0NhcEluZm8sCi0gICAgQllURSBieUN1cnJDaGFubmVsLAotICAgIEJPT0wgYkNoYW5uZWxIaXQsCisgICAgdW5zaWduZWQgc2hvcnQgd0JlYWNvbkludGVydmFsLAorICAgIHVuc2lnbmVkIHNob3J0IHdDYXBJbmZvLAorICAgIHVuc2lnbmVkIGNoYXIgYnlDdXJyQ2hhbm5lbCwKKyAgICBib29sIGJDaGFubmVsSGl0LAogICAgIFBXTEFOX0lFX1NTSUQgcFNTSUQsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwU3VwcFJhdGVzLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEV4dFN1cHBSYXRlcywKQEAgLTMwMiwyOSArMzAyLDIzIEBACiAgICAgUFdMQU5fSUVfQ09VTlRSWSBwSUVfQ291bnRyeSwKICAgICBQV0xBTl9JRV9RVUlFVCBwSUVfUXVpZXQsCiAgICAgUEtub3duQlNTIHBCU1NMaXN0LAotICAgIFVJTlQgdUlFTGVuZ3RoLAotICAgIFBCWVRFIHBieUlFcywKKyAgICB1bnNpZ25lZCBpbnQgdUlFTGVuZ3RoLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUlFcywKICAgICB2b2lkICpwUnhQYWNrZXRDb250ZXh0CiAgICAgKTsKIAogCi1CT09MCi1CU1NEQmJJc1NUQUluTm9kZURCKAotICAgIHZvaWQgKmhEZXZpY2VDb250ZXh0LAotICAgIFBCWVRFIGFieURzdEFkZHIsCi0gICAgUFVJTlQgcHVOb2RlSW5kZXgKLSAgICApOworYm9vbAorQlNTREJiSXNTVEFJbk5vZGVEQih2b2lkICpoRGV2aWNlQ29udGV4dCwgdW5zaWduZWQgY2hhciAqYWJ5RHN0QWRkciwKKwkJdW5zaWduZWQgaW50ICpwdU5vZGVJbmRleCk7CiAKIHZvaWQKLUJTU3ZDcmVhdGVPbmVOb2RlKAotICAgIHZvaWQgKmhEZXZpY2VDb250ZXh0LAotICAgIFBVSU5UIHB1Tm9kZUluZGV4Ci0gICAgKTsKK0JTU3ZDcmVhdGVPbmVOb2RlKHZvaWQgKmhEZXZpY2VDb250ZXh0LCB1bnNpZ25lZCBpbnQgKnB1Tm9kZUluZGV4KTsKIAogdm9pZAogQlNTdlVwZGF0ZUFQTm9kZSgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKLSAgICBQV09SRCBwd0NhcEluZm8sCisgICAgdW5zaWduZWQgc2hvcnQgKnB3Q2FwSW5mbywKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBJdGVtUmF0ZXMsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwRXh0U3VwcFJhdGVzCiAgICAgKTsKQEAgLTMzOSwxNiArMzMzLDE2IEBACiB2b2lkCiBCU1N2VXBkYXRlTm9kZVR4Q291bnRlcigKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKLSAgICBCWVRFICAgICAgICBieVRzcjAsCi0gICAgQllURSAgICAgICAgYnlUc3IxLAotICAgIFBCWVRFICAgICAgIHBieUJ1ZmZlciwKLSAgICBVSU5UICAgICAgICB1RklGT0hlYWRlclNpemUKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VHNyMCwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VHNyMSwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCdWZmZXIsCisgICAgdW5zaWduZWQgaW50IHVGSUZPSGVhZGVyU2l6ZQogICAgICk7CiAKIHZvaWQKIEJTU3ZSZW1vdmVPbmVOb2RlKAogICAgIHZvaWQgKmhEZXZpY2VDb250ZXh0LAotICAgIFVJTlQgdU5vZGVJbmRleAorICAgIHVuc2lnbmVkIGludCB1Tm9kZUluZGV4CiAgICAgKTsKIAogdm9pZApAQCAtMzYwLDcgKzM1NCw3IEBACiB2b2lkCiBCU1N2Q2xlYXJOb2RlREJUYWJsZSgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKLSAgICBVSU5UIHVTdGFydEluZGV4CisgICAgdW5zaWduZWQgaW50IHVTdGFydEluZGV4CiAgICAgKTsKIAogdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9jYXJkLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NhcmQuYwppbmRleCA3YmMyZDc2Li4zMmQwOTVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NhcmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NhcmQuYwpAQCAtNTYsNiArNTYsNyBAQAogI2luY2x1ZGUgImtleS5oIgogI2luY2x1ZGUgInJjNC5oIgogI2luY2x1ZGUgImNvdW50cnkuaCIKKyNpbmNsdWRlICJjaGFubmVsLmgiCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgRGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTc2LDQxMSArNzcsMzkgQEAKIAogI2RlZmluZSBDX0NXTUFYICAgICAgICAgMTAyMyAgICAvLyBzbG90IHRpbWUKIAotI2RlZmluZSBDQVJEX01BWF9DSEFOTkVMX1RCTCAgICA1NgotCiAjZGVmaW5lIFdBSVRfQkVBQ09OX1RYX0RPV05fVE1PICAgICAgICAgMyAgICAvLyBUaW1lcwogCi10eXBlZGVmIHN0cnVjdCB0YWdTQ2hhbm5lbFRibEVsZW1lbnQgewotICAgIEJZVEUgICAgYnlDaGFubmVsTnVtYmVyOwotICAgIFVJTlQgICAgdUZyZXF1ZW5jeTsKLSAgICBCT09MICAgIGJWYWxpZDsKLSAgICBCWVRFICAgIGJ5TUFQOwotfVNDaGFubmVsVGJsRWxlbWVudCwgKlBTQ2hhbm5lbFRibEVsZW1lbnQ7Ci0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8xTSwgICAyTSwgICA1TSwgIDExTSwgIDE4TSwgIDI0TSwgIDM2TSwgIDU0TQotc3RhdGljIEJZVEUgYWJ5RGVmYXVsdFN1cHBSYXRlc0dbXSA9IHtXTEFOX0VJRF9TVVBQX1JBVEVTLCA4LCAweDAyLCAweDA0LCAweDBCLCAweDE2LCAweDI0LCAweDMwLCAweDQ4LCAweDZDfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFieURlZmF1bHRTdXBwUmF0ZXNHW10gPSB7V0xBTl9FSURfU1VQUF9SQVRFUywgOCwgMHgwMiwgMHgwNCwgMHgwQiwgMHgxNiwgMHgyNCwgMHgzMCwgMHg0OCwgMHg2Q307CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vNk0sICAgOU0sICAxMk0sICA0OE0KLXN0YXRpYyBCWVRFIGFieURlZmF1bHRFeHRTdXBwUmF0ZXNHW10gPSB7V0xBTl9FSURfRVhUU1VQUF9SQVRFUywgNCwgMHgwQywgMHgxMiwgMHgxOCwgMHg2MH07CitzdGF0aWMgdW5zaWduZWQgY2hhciBhYnlEZWZhdWx0RXh0U3VwcFJhdGVzR1tdID0ge1dMQU5fRUlEX0VYVFNVUFBfUkFURVMsIDQsIDB4MEMsIDB4MTIsIDB4MTgsIDB4NjB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLzZNLCAgIDlNLCAgMTJNLCAgMThNLCAgMjRNLCAgMzZNLCAgNDhNLCAgNTRNCi1zdGF0aWMgQllURSBhYnlEZWZhdWx0U3VwcFJhdGVzQVtdID0ge1dMQU5fRUlEX1NVUFBfUkFURVMsIDgsIDB4MEMsIDB4MTIsIDB4MTgsIDB4MjQsIDB4MzAsIDB4NDgsIDB4NjAsIDB4NkN9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgYWJ5RGVmYXVsdFN1cHBSYXRlc0FbXSA9IHtXTEFOX0VJRF9TVVBQX1JBVEVTLCA4LCAweDBDLCAweDEyLCAweDE4LCAweDI0LCAweDMwLCAweDQ4LCAweDYwLCAweDZDfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8xTSwgICAyTSwgICA1TSwgIDExTSwKLXN0YXRpYyBCWVRFIGFieURlZmF1bHRTdXBwUmF0ZXNCW10gPSB7V0xBTl9FSURfU1VQUF9SQVRFUywgNCwgMHgwMiwgMHgwNCwgMHgwQiwgMHgxNn07CitzdGF0aWMgdW5zaWduZWQgY2hhciBhYnlEZWZhdWx0U3VwcFJhdGVzQltdID0ge1dMQU5fRUlEX1NVUFBfUkFURVMsIDQsIDB4MDIsIDB4MDQsIDB4MEIsIDB4MTZ9OwogCiAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBDbGFzc2VzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBWYXJpYWJsZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCi1jb25zdCBXT1JEIGN3UlhCQ05UU0ZPZmZbTUFYX1JBVEVdID0KK2NvbnN0IHVuc2lnbmVkIHNob3J0IGN3UlhCQ05UU0ZPZmZbTUFYX1JBVEVdID0KIHsxNywgMTcsIDE3LCAxNywgMzQsIDIzLCAxNywgMTEsIDgsIDUsIDQsIDN9OwogCi1zdGF0aWMgU0NoYW5uZWxUYmxFbGVtZW50IHNDaGFubmVsVGJsW0NBUkRfTUFYX0NIQU5ORUxfVEJMKzFdID0KLXsKLSAgezAsICAgMCwgICAgRkFMU0UsICAgIDB9LAotICB7MSwgICAyNDEyLCBUUlVFLCAgICAgMH0sCi0gIHsyLCAgIDI0MTcsIFRSVUUsICAgICAwfSwKLSAgezMsICAgMjQyMiwgVFJVRSwgICAgIDB9LAotICB7NCwgICAyNDI3LCBUUlVFLCAgICAgMH0sCi0gIHs1LCAgIDI0MzIsIFRSVUUsICAgICAwfSwKLSAgezYsICAgMjQzNywgVFJVRSwgICAgIDB9LAotICB7NywgICAyNDQyLCBUUlVFLCAgICAgMH0sCi0gIHs4LCAgIDI0NDcsIFRSVUUsICAgICAwfSwKLSAgezksICAgMjQ1MiwgVFJVRSwgICAgIDB9LAotICB7MTAsICAyNDU3LCBUUlVFLCAgICAgMH0sCi0gIHsxMSwgIDI0NjIsIFRSVUUsICAgICAwfSwKLSAgezEyLCAgMjQ2NywgVFJVRSwgICAgIDB9LAotICB7MTMsICAyNDcyLCBUUlVFLCAgICAgMH0sCi0gIHsxNCwgIDI0ODQsIFRSVUUsICAgICAwfSwKLSAgezE4MywgNDkxNSwgVFJVRSwgICAgIDB9LAotICB7MTg0LCA0OTIwLCBUUlVFLCAgICAgMH0sCi0gIHsxODUsIDQ5MjUsIFRSVUUsICAgICAwfSwKLSAgezE4NywgNDkzNSwgVFJVRSwgICAgIDB9LAotICB7MTg4LCA0OTQwLCBUUlVFLCAgICAgMH0sCi0gIHsxODksIDQ5NDUsIFRSVUUsICAgICAwfSwKLSAgezE5MiwgNDk2MCwgVFJVRSwgICAgIDB9LAotICB7MTk2LCA0OTgwLCBUUlVFLCAgICAgMH0sCi0gIHs3LCAgIDUwMzUsIFRSVUUsICAgICAwfSwKLSAgezgsICAgNTA0MCwgVFJVRSwgICAgIDB9LAotICB7OSwgICA1MDQ1LCBUUlVFLCAgICAgMH0sCi0gIHsxMSwgIDUwNTUsIFRSVUUsICAgICAwfSwKLSAgezEyLCAgNTA2MCwgVFJVRSwgICAgIDB9LAotICB7MTYsICA1MDgwLCBUUlVFLCAgICAgMH0sCi0gIHszNCwgIDUxNzAsIFRSVUUsICAgICAwfSwKLSAgezM2LCAgNTE4MCwgVFJVRSwgICAgIDB9LAotICB7MzgsICA1MTkwLCBUUlVFLCAgICAgMH0sCi0gIHs0MCwgIDUyMDAsIFRSVUUsICAgICAwfSwKLSAgezQyLCAgNTIxMCwgVFJVRSwgICAgIDB9LAotICB7NDQsICA1MjIwLCBUUlVFLCAgICAgMH0sCi0gIHs0NiwgIDUyMzAsIFRSVUUsICAgICAwfSwKLSAgezQ4LCAgNTI0MCwgVFJVRSwgICAgIDB9LAotICB7NTIsICA1MjYwLCBUUlVFLCAgICAgMH0sCi0gIHs1NiwgIDUyODAsIFRSVUUsICAgICAwfSwKLSAgezYwLCAgNTMwMCwgVFJVRSwgICAgIDB9LAotICB7NjQsICA1MzIwLCBUUlVFLCAgICAgMH0sCi0gIHsxMDAsIDU1MDAsIFRSVUUsICAgICAwfSwKLSAgezEwNCwgNTUyMCwgVFJVRSwgICAgIDB9LAotICB7MTA4LCA1NTQwLCBUUlVFLCAgICAgMH0sCi0gIHsxMTIsIDU1NjAsIFRSVUUsICAgICAwfSwKLSAgezExNiwgNTU4MCwgVFJVRSwgICAgIDB9LAotICB7MTIwLCA1NjAwLCBUUlVFLCAgICAgMH0sCi0gIHsxMjQsIDU2MjAsIFRSVUUsICAgICAwfSwKLSAgezEyOCwgNTY0MCwgVFJVRSwgICAgIDB9LAotICB7MTMyLCA1NjYwLCBUUlVFLCAgICAgMH0sCi0gIHsxMzYsIDU2ODAsIFRSVUUsICAgICAwfSwKLSAgezE0MCwgNTcwMCwgVFJVRSwgICAgIDB9LAotICB7MTQ5LCA1NzQ1LCBUUlVFLCAgICAgMH0sCi0gIHsxNTMsIDU3NjUsIFRSVUUsICAgICAwfSwKLSAgezE1NywgNTc4NSwgVFJVRSwgICAgIDB9LAotICB7MTYxLCA1ODA1LCBUUlVFLCAgICAgMH0sCi0gIHsxNjUsIDU4MjUsIFRSVUUsICAgICAwfQotfTsKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBUaGUgUmFkYXIgcmVndWxhdGlvbiBydWxlcyBmb3IgZWFjaCBjb3VudHJ5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotU0NvdW50cnlUYWJsZSBDaGFubmVsUnVsZVRhYltDQ09ERV9NQVgrMV0gPQotewotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogVGhpcyB0YWJsZSBpcyBiYXNlZCBvbiBBdGhlcm8gZHJpdmVyIHJ1bGVzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogQ291bnRyeSAgICAgICAgICBBdmFpbGFibGUgY2hhbm5lbHMsIGVuZGVkIHdpdGggMCAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAyICAgMyAgIDQgICA1ICAgNiAgIDcgICA4ICAgOSAgMTAgIDExICAxMiAgMTMgIDE0ICAxNSAgMTYgIDE3ICAxOCAgMTkgIDIwICAyMSAgMjIgIDIzICAyNCAgMjUgIDI2ICAyNyAgMjggIDI5ICAzMCAgMzEgIDMyICAzMyAgMzQgIDM1ICAzNiAgMzcgIDM4ICAzOSAgNDAgIDQxICA0MiAgNDMgIDQ0ICA0NSAgNDYgIDQ3ICA0OCAgNDkgIDUwICA1MSAgNTIgIDUzICA1NCAgNTUgIDU2ICAqLwote0NDT0RFX0ZDQywgICAgICAgICAgICAgICAgICAgICB7J1UnLCdTJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDF9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTcsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsIDIzLCAyMywgMjMsIDIzLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAzMH0gIH0sCi17Q0NPREVfVEVMRUMsICAgICAgICAgICAgICAgICAgIHsnSicsJ1AnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAxLCAgMCwgIDAsICAxLCAgMCwgIDEsICAxLCAgMCwgIDEsICAwLCAgMCwgIDEsICAxLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgMjMsICAwLCAgMCwgMjMsICAwLCAyMywgMjMsICAwLCAyMywgIDAsICAwLCAyMywgMjMsIDIzLCAgMCwgMjMsICAwLCAyMywgIDAsIDIzLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9FVFNJLCAgICAgICAgICAgICAgICAgICAgeydFJywnVSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX1JFU1YzLCAgICAgICAgICAgICAgICAgICB7JyAnLCcgJ30sICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfUkVTVjQsICAgICAgICAgICAgICAgICAgIHsnICcsJyAnfSwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9SRVNWNSwgICAgICAgICAgICAgICAgICAgeycgJywnICd9LCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX1JFU1Y2LCAgICAgICAgICAgICAgICAgICB7JyAnLCcgJ30sICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfUkVTVjcsICAgICAgICAgICAgICAgICAgIHsnICcsJyAnfSwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9SRVNWOCwgICAgICAgICAgICAgICAgICAgeycgJywnICd9LCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX1JFU1Y5LCAgICAgICAgICAgICAgICAgICB7JyAnLCcgJ30sICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfUkVTVmEsICAgICAgICAgICAgICAgICAgIHsnICcsJyAnfSwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9SRVNWYiwgICAgICAgICAgICAgICAgICAgeycgJywnICd9LCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX1JFU1ZjLCAgICAgICAgICAgICAgICAgICB7JyAnLCcgJ30sICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfUkVTVmQsICAgICAgICAgICAgICAgICAgIHsnICcsJyAnfSwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9SRVNWZSwgICAgICAgICAgICAgICAgICAgeycgJywnICd9LCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0FMTEJBTkQsICAgICAgICAgICAgICAgICB7JyAnLCcgJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDF9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfQUxCQU5JQSwgICAgICAgICAgICAgICAgIHsnQScsJ0wnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9BTEdFUklBLCAgICAgICAgICAgICAgICAgeydEJywnWid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0FSR0VOVElOQSwgICAgICAgICAgICAgICB7J0EnLCdSJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNywgMTcsIDE3LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAgMH0gIH0sCi17Q0NPREVfQVJNRU5JQSwgICAgICAgICAgICAgICAgIHsnQScsJ00nfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsICAwLCAxOCwgMTgsIDE4LCAxOCwgMTgsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9BVVNUUkFMSUEsICAgICAgICAgICAgICAgeydBJywnVSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIzLCAgMCwgMjMsICAwLCAyMywgIDAsIDIzLCAyMywgMjMsIDIzLCAyMywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgMzB9ICB9LAote0NDT0RFX0FVU1RSSUEsICAgICAgICAgICAgICAgICB7J0EnLCdUJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTUsICAwLCAxNSwgIDAsIDE1LCAgMCwgMTUsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfQVpFUkJBSUpBTiwgICAgICAgICAgICAgIHsnQScsJ1onfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsICAwLCAxOCwgMTgsIDE4LCAxOCwgMTgsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9CQUhSQUlOLCAgICAgICAgICAgICAgICAgeydCJywnSCd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0JFTEFSVVMsICAgICAgICAgICAgICAgICB7J0InLCdZJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfQkVMR0lVTSwgICAgICAgICAgICAgICAgIHsnQicsJ0UnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsICAwLCAxOCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9CRUxJWkUsICAgICAgICAgICAgICAgICAgeydCJywnWid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgMzB9ICB9LAote0NDT0RFX0JPTElWSUEsICAgICAgICAgICAgICAgICB7J0InLCdPJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDF9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAzMH0gIH0sCi17Q0NPREVfQlJBWklMLCAgICAgICAgICAgICAgICAgIHsnQicsJ1InfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9CUlVORUlfREFSVVNTQUxBTSwgICAgICAgeydCJywnTid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgMzB9ICB9LAote0NDT0RFX0JVTEdBUklBLCAgICAgICAgICAgICAgICB7J0InLCdHJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjMsICAwLCAyMywgIDAsIDIzLCAgMCwgMjMsIDIzLCAyMywgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfQ0FOQURBLCAgICAgICAgICAgICAgICAgIHsnQycsJ0EnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKLXtDQ09ERV9DSElMRSwgICAgICAgICAgICAgICAgICAgeydDJywnTCd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNywgMTcsIDE3LCAxNywgMTd9ICB9LAote0NDT0RFX0NISU5BLCAgICAgICAgICAgICAgICAgICB7J0MnLCdOJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDF9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAzMH0gIH0sCi17Q0NPREVfQ09MT01CSUEsICAgICAgICAgICAgICAgIHsnQycsJ08nfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKLXtDQ09ERV9DT1NUQV9SSUNBLCAgICAgICAgICAgICAgeydDJywnUid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0NST0FUSUEsICAgICAgICAgICAgICAgICB7J0gnLCdSJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfQ1lQUlVTLCAgICAgICAgICAgICAgICAgIHsnQycsJ1knfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9DWkVDSCwgICAgICAgICAgICAgICAgICAgeydDJywnWid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0RFTk1BUkssICAgICAgICAgICAgICAgICB7J0QnLCdLJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfRE9NSU5JQ0FOX1JFUFVCTElDLCAgICAgIHsnRCcsJ08nfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKLXtDQ09ERV9FQ1VBRE9SLCAgICAgICAgICAgICAgICAgeydFJywnQyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0VHWVBULCAgICAgICAgICAgICAgICAgICB7J0UnLCdHJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfRUxfU0FMVkFET1IsICAgICAgICAgICAgIHsnUycsJ1YnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9FU1RPTklBLCAgICAgICAgICAgICAgICAgeydFJywnRSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0ZJTkxBTkQsICAgICAgICAgICAgICAgICB7J0YnLCdJJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfRlJBTkNFLCAgICAgICAgICAgICAgICAgIHsnRicsJ1InfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9HRVJNQU5ZLCAgICAgICAgICAgICAgICAgeydEJywnRSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0dSRUVDRSwgICAgICAgICAgICAgICAgICB7J0cnLCdSJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfR0VPUkdJQSwgICAgICAgICAgICAgICAgIHsnRycsJ0UnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsICAwLCAxOCwgMTgsIDE4LCAxOCwgMTgsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9HVUFURU1BTEEsICAgICAgICAgICAgICAgeydHJywnVCd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgIDAsIDE3LCAyMywgMjMsIDIzLCAyMywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgMzB9ICB9LAote0NDT0RFX0hPTkRVUkFTLCAgICAgICAgICAgICAgICB7J0gnLCdOJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfSE9OR19LT05HLCAgICAgICAgICAgICAgIHsnSCcsJ0snfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMywgIDAsIDIzLCAgMCwgMjMsICAwLCAyMywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKLXtDQ09ERV9IVU5HQVJZLCAgICAgICAgICAgICAgICAgeydIJywnVSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDE4LCAgMCwgMTgsICAwLCAxOCwgIDAsIDE4LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0lDRUxBTkQsICAgICAgICAgICAgICAgICB7J0knLCdTJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfSU5ESUEsICAgICAgICAgICAgICAgICAgIHsnSScsJ04nfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9JTkRPTkVTSUEsICAgICAgICAgICAgICAgeydJJywnRCd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0lSQU4sICAgICAgICAgICAgICAgICAgICB7J0knLCdSJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDF9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAzMH0gIH0sCi17Q0NPREVfSVJFTEFORCwgICAgICAgICAgICAgICAgIHsnSScsJ0UnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9JVEFMWSwgICAgICAgICAgICAgICAgICAgeydJJywnVCd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0lTUkFFTCwgICAgICAgICAgICAgICAgICB7J0knLCdMJ30sICB7ICAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfSkFQQU4sICAgICAgICAgICAgICAgICAgIHsnSicsJ1AnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIzLCAgMCwgMjMsICAwLCAyMywgIDAsIDIzLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9KT1JEQU4sICAgICAgICAgICAgICAgICAgeydKJywnTyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0tBWkFLSFNUQU4sICAgICAgICAgICAgICB7J0snLCdaJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfS1VXQUlULCAgICAgICAgICAgICAgICAgIHsnSycsJ1cnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9MQVRWSUEsICAgICAgICAgICAgICAgICAgeydMJywnVid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0xFQkFOT04sICAgICAgICAgICAgICAgICB7J0wnLCdCJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfTEVJQ0hURU5TVEVJTiwgICAgICAgICAgIHsnTCcsJ0knfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsICAwLCAxOCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9MSVRIVUFOSUEsICAgICAgICAgICAgICAgeydMJywnVCd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0xVWEVNQlVSRywgICAgICAgICAgICAgICB7J0wnLCdVJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfTUFDQVUsICAgICAgICAgICAgICAgICAgIHsnTScsJ08nfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMywgIDAsIDIzLCAgMCwgMjMsICAwLCAyMywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKLXtDQ09ERV9NQUNFRE9OSUEsICAgICAgICAgICAgICAgeydNJywnSyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX01BTFRBLCAgICAgICAgICAgICAgICAgICB7J00nLCdUJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTYsICAwLCAxNiwgIDAsIDE2LCAgMCwgMTYsIDE2LCAxNiwgMTYsIDE2LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDE2LCAxNiwgMTYsIDE2LCAgMH0gIH0sCi17Q0NPREVfTUFMQVlTSUEsICAgICAgICAgICAgICAgIHsnTScsJ1knfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9NRVhJQ08sICAgICAgICAgICAgICAgICAgeydNJywnWCd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgIDAsIDE3LCAyMywgMjMsIDIzLCAyMywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgMzB9ICB9LAote0NDT0RFX01PTkFDTywgICAgICAgICAgICAgICAgICB7J00nLCdDJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTgsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfTU9ST0NDTywgICAgICAgICAgICAgICAgIHsnTScsJ0EnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9ORVRIRVJMQU5EUywgICAgICAgICAgICAgeydOJywnTCd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX05FV19aRUFMQU5ELCAgICAgICAgICAgICB7J04nLCdaJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDF9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjMsICAwLCAyMywgIDAsIDIzLCAgMCwgMjMsIDIzLCAyMywgMjMsIDIzLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAzMH0gIH0sCi17Q0NPREVfTk9SVEhfS09SRUEsICAgICAgICAgICAgIHsnSycsJ1AnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjMsIDIzLCAyMywgMjMsICAwfSAgfSwKLXtDQ09ERV9OT1JXQVksICAgICAgICAgICAgICAgICAgeydOJywnTyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX09NQU4sICAgICAgICAgICAgICAgICAgICB7J08nLCdNJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfUEFLSVNUQU4sICAgICAgICAgICAgICAgIHsnUCcsJ0snfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9QQU5BTUEsICAgICAgICAgICAgICAgICAgeydQJywnQSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgIDAsIDE3LCAyMywgMjMsIDIzLCAyMywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgMzB9ICB9LAote0NDT0RFX1BFUlUsICAgICAgICAgICAgICAgICAgICB7J1AnLCdFJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfUEhJTElQUElORVMsICAgICAgICAgICAgIHsnUCcsJ0gnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKLXtDQ09ERV9QT0xBTkQsICAgICAgICAgICAgICAgICAgeydQJywnTCd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX1BPUlRVR0FMLCAgICAgICAgICAgICAgICB7J1AnLCdUJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfUFVFUlRPX1JJQ08sICAgICAgICAgICAgIHsnUCcsJ1InfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKLXtDQ09ERV9RQVRBUiwgICAgICAgICAgICAgICAgICAgeydRJywnQSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX1JPTUFOSUEsICAgICAgICAgICAgICAgICB7J1InLCdPJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfUlVTU0lBLCAgICAgICAgICAgICAgICAgIHsnUicsJ1UnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9TQVVESV9BUkFCSUEsICAgICAgICAgICAgeydTJywnQSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX1NJTkdBUE9SRSwgICAgICAgICAgICAgICB7J1MnLCdHJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDF9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMH0gIH0sCi17Q0NPREVfU0xPVkFLSUEsICAgICAgICAgICAgICAgIHsnUycsJ0snfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNiwgIDAsIDE2LCAgMCwgMTYsICAwLCAxNiwgMTYsIDE2LCAxNiwgMTYsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTYsIDE2LCAxNiwgMTYsICAwfSAgfSwKLXtDQ09ERV9TTE9WRU5JQSwgICAgICAgICAgICAgICAgeydTJywnSSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX1NPVVRIX0FGUklDQSwgICAgICAgICAgICB7J1onLCdBJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfU09VVEhfS09SRUEsICAgICAgICAgICAgIHsnSycsJ1InfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjMsIDIzLCAyMywgMjMsICAwfSAgfSwKLXtDQ09ERV9TUEFJTiwgICAgICAgICAgICAgICAgICAgeydFJywnUyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDE2LCAgMCwgMTYsICAwLCAxNiwgIDAsIDE2LCAxNiwgMTYsIDE2LCAxNiwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNiwgMTYsIDE2LCAxNiwgIDB9ICB9LAote0NDT0RFX1NXRURFTiwgICAgICAgICAgICAgICAgICB7J1MnLCdFJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfU1dJVFpFUkxBTkQsICAgICAgICAgICAgIHsnQycsJ0gnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsICAwLCAxOCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9TWVJJQSwgICAgICAgICAgICAgICAgICAgeydTJywnWSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX1RBSVdBTiwgICAgICAgICAgICAgICAgICB7J1QnLCdXJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNywgMTcsIDE3LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAgMH0gIH0sCi17Q0NPREVfVEhBSUxBTkQsICAgICAgICAgICAgICAgIHsnVCcsJ0gnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjMsIDIzLCAyMywgMjMsICAwfSAgfSwKLXtDQ09ERV9UUklOSURBRF9UT0JBR08sICAgICAgICAgeydUJywnVCd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDE4LCAgMCwgMTgsICAwLCAxOCwgIDAsIDE4LCAxOCwgMTgsIDE4LCAxOCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX1RVTklTSUEsICAgICAgICAgICAgICAgICB7J1QnLCdOJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfVFVSS0VZLCAgICAgICAgICAgICAgICAgIHsnVCcsJ1InfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9VSywgICAgICAgICAgICAgICAgICAgICAgeydHJywnQid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX1VLUkFJTkUsICAgICAgICAgICAgICAgICB7J1UnLCdBJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfVU5JVEVEX0FSQUJfRU1JUkFURVMsICAgIHsnQScsJ0UnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9VTklURURfU1RBVEVTLCAgICAgICAgICAgeydVJywnUyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgIDAsIDE3LCAyMywgMjMsIDIzLCAyMywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgMzB9ICB9LAote0NDT0RFX1VSVUdVQVksICAgICAgICAgICAgICAgICB7J1UnLCdZJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIzLCAyMywgMjMsIDIzLCAgMH0gIH0sCi17Q0NPREVfVVpCRUtJU1RBTiwgICAgICAgICAgICAgIHsnVScsJ1onfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9WRU5FWlVFTEEsICAgICAgICAgICAgICAgeydWJywnRSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMywgMjMsIDIzLCAyMywgIDB9ICB9LAote0NDT0RFX1ZJRVROQU0sICAgICAgICAgICAgICAgICB7J1YnLCdOJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfWUVNRU4sICAgICAgICAgICAgICAgICAgIHsnWScsJ0UnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9aSU1CQUJXRSwgICAgICAgICAgICAgICAgeydaJywnVyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0pBUEFOX1c1Ml9XNTMsICAgICAgICAgICB7J0onLCdKJ30sICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfTUFYLCAgICAgICAgICAgICAgICAgICAgIHsnVScsJ04nfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgIDIgICAzICAgNCAgIDUgICA2ICAgNyAgIDggICA5ICAxMCAgMTEgIDEyICAxMyAgMTQgIDE1ICAxNiAgMTcgIDE4ICAxOSAgMjAgIDIxICAyMiAgMjMgIDI0ICAyNSAgMjYgIDI3ICAyOCAgMjkgIDMwICAzMSAgMzIgIDMzICAzNCAgMzUgIDM2ICAzNyAgMzggIDM5ICA0MCAgNDEgIDQyICA0MyAgNDQgIDQ1ICA0NiAgNDcgIDQ4ICA0OSAgNTAgIDUxICA1MiAgNTMgIDU0ICA1NSAgNTYgICovCi19OwotCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYwogdm9pZAogc192Q2FjdWxhdGVPRkRNUlBhcmFtZXRlcigKLSAgICBCWVRFIGJ5UmF0ZSwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UmF0ZSwKICAgICBDQVJEX1BIWV9UWVBFIGVQSFlUeXBlLAotICAgIFBCWVRFIHBieVR4UmF0ZSwKLSAgICBQQllURSBwYnlSc3ZUaW1lCisgICAgdW5zaWduZWQgY2hhciAqcGJ5VHhSYXRlLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieVJzdlRpbWUKICAgICApOwogCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgVmFyaWFibGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBmdW5jdGlvbiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3VudHJ5IENoYW5uZWwgVmFsaWQKLSAqICBJbnB1dDogIENvdW50cnlDb2RlLCBDaGFubmVsTnVtCi0gKiAgICAgICAgICBDaGFubmVJbmRleCBpcyBkZWZpbmVkIGFzIFZUMzI1MyBNQUMgY2hhbm5lbDoKLSAqICAgICAgICAgICAgICAxICAgPSAyLjRHIGNoYW5uZWwgMQotICogICAgICAgICAgICAgIDIgICA9IDIuNEcgY2hhbm5lbCAyCi0gKiAgICAgICAgICAgICAgLi4uCi0gKiAgICAgICAgICAgICAgMTQgID0gMi40RyBjaGFubmVsIDE0Ci0gKiAgICAgICAgICAgICAgMTUgID0gNC45RyBjaGFubmVsIDE4MwotICogICAgICAgICAgICAgIDE2ICA9IDQuOUcgY2hhbm5lbCAxODQKLSAqICAgICAgICAgICAgICAuLi4uLgotICogIE91dHB1dDogVFJVRSBpZiB0aGUgc3BlY2lmaWVkIDVHSHogYmFuZCBpcyBhbGxvd2VkIHRvIGJlIHVzZWQuCi0gICAgICAgICAgICBGYWxzZSBvdGhlcndpc2UuCi0vLyA0LjlHID0+IENoIDE4MywgMTg0LCAxODUsIDE4NywgMTg4LCAxODksIDE5MiwgMTk2IChWYWx1ZToxNSB+IDIyKQotCi0vLyA1RyA9PiBDaCA3LCA4LCA5LCAxMSwgMTIsIDE2LCAzNCwgMzYsIDM4LCA0MCwgNDIsIDQ0LCA0NiwgNDgsIDUyLCA1NiwgNjAsIDY0LAotLy8gMTAwLCAxMDQsIDEwOCwgMTEyLCAxMTYsIDEyMCwgMTI0LCAxMjgsIDEzMiwgMTM2LCAxNDAsIDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1IChWYWx1ZSAyMyB+IDU2KQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vMjAwOC04LTQgPGFkZD4gYnkgY2hlc3RlcgotQk9PTAotQ2hhbm5lbFZhbGlkKFVJTlQgQ291bnRyeUNvZGUsIFVJTlQgQ2hhbm5lbEluZGV4KQotewotICAgIEJPT0wgICAgYlZhbGlkOwotCi0gICAgYlZhbGlkID0gRkFMU0U7Ci0gICAgLyoKLSAgICAgKiBJZiBDaGFubmVsIEluZGV4IGlzIGludmFsaWQsIHJldHVybiBpbnZhbGlkCi0gICAgICovCi0gICAgaWYgKChDaGFubmVsSW5kZXggPiBDQl9NQVhfQ0hBTk5FTCkgfHwKLSAgICAgICAgKENoYW5uZWxJbmRleCA9PSAwKSkKLSAgICB7Ci0gICAgICAgIGJWYWxpZCA9IEZBTFNFOwotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgfQotCi0gICAgYlZhbGlkID0gc0NoYW5uZWxUYmxbQ2hhbm5lbEluZGV4XS5iVmFsaWQ7Ci0KLWV4aXQ6Ci0gICAgcmV0dXJuIChiVmFsaWQpOwotCi19IC8qIGVuZCBDaGFubmVsVmFsaWQgKi8KLQotCiAvKgogICogRGVzY3JpcHRpb246IENhY3VsYXRlIFR4UmF0ZSBhbmQgUnN2VGltZSBmaWVsZHMgZm9yIFJTUElORiBpbiBPRkRNIG1vZGUuCiAgKgpAQCAtNDk4LDEwICsxMjcsMTAgQEAKIHN0YXRpYwogdm9pZAogc192Q2FjdWxhdGVPRkRNUlBhcmFtZXRlciAoCi0gICAgQllURSBieVJhdGUsCisgICAgdW5zaWduZWQgY2hhciBieVJhdGUsCiAgICAgQ0FSRF9QSFlfVFlQRSBlUEhZVHlwZSwKLSAgICBQQllURSBwYnlUeFJhdGUsCi0gICAgUEJZVEUgcGJ5UnN2VGltZQorICAgIHVuc2lnbmVkIGNoYXIgKnBieVR4UmF0ZSwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlSc3ZUaW1lCiAgICAgKQogewogICAgIHN3aXRjaCAoYnlSYXRlKSB7CkBAIC02MTQsOSArMjQzLDkgQEAKIHZvaWQKIHNfdlNldFJTUElORiAoUFNEZXZpY2UgcERldmljZSwgQ0FSRF9QSFlfVFlQRSBlUEhZVHlwZSwgdm9pZCAqcHZTdXBwb3J0UmF0ZUlFcywgdm9pZCAqcHZFeHRTdXBwb3J0UmF0ZUlFcykKIHsKLSAgICBCWVRFICBieVNlcnYgPSAwLCBieVNpZ25hbCA9IDA7IC8vIEZvciBDQ0sKLSAgICBXT1JEICB3TGVuID0gMDsKLSAgICBCWVRFICBieVR4UmF0ZSA9IDAsIGJ5UnN2VGltZSA9IDA7ICAgIC8vIEZvciBPRkRNCisgICAgdW5zaWduZWQgY2hhciBieVNlcnYgPSAwLCBieVNpZ25hbCA9IDA7IC8vIEZvciBDQ0sKKyAgICB1bnNpZ25lZCBzaG9ydCB3TGVuID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VHhSYXRlID0gMCwgYnlSc3ZUaW1lID0gMDsgICAgLy8gRm9yIE9GRE0KIAogICAgIC8vU2V0IHRvIFBhZ2UxCiAgICAgTUFDdlNlbGVjdFBhZ2UxKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwpAQCAtNzIyLDEyMCArMzUxLDcgQEAKICAgICBNQUN2U2VsZWN0UGFnZTAocERldmljZS0+UG9ydE9mZnNldCk7CiB9CiAKLQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgVmFyaWFibGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1CWVRFIENBUkRieUdldENoYW5uZWxNYXBwaW5nICh2b2lkICpwRGV2aWNlSGFuZGxlciwgQllURSBieUNoYW5uZWxOdW1iZXIsIENBUkRfUEhZX1RZUEUgZVBoeVR5cGUpCi17Ci0gICAgVUlOVCAgICAgICAgaWk7Ci0KLSAgICBpZiAoKGVQaHlUeXBlID09IFBIWV9UWVBFXzExQikgfHwgKGVQaHlUeXBlID09IFBIWV9UWVBFXzExRykpIHsKLSAgICAgICAgcmV0dXJuIChieUNoYW5uZWxOdW1iZXIpOwotICAgIH0KLQotICAgIGZvcihpaSA9IChDQl9NQVhfQ0hBTk5FTF8yNEcgKyAxKTsgaWkgPD0gQ0JfTUFYX0NIQU5ORUw7ICkgewotICAgICAgICBpZiAoc0NoYW5uZWxUYmxbaWldLmJ5Q2hhbm5lbE51bWJlciA9PSBieUNoYW5uZWxOdW1iZXIpIHsKLSAgICAgICAgICAgIHJldHVybiAoKEJZVEUpIGlpKTsKLSAgICAgICAgfQotICAgICAgICBpaSsrOwotICAgIH0KLSAgICByZXR1cm4gKDApOwotfQotCi0KLUJZVEUgQ0FSRGJ5R2V0Q2hhbm5lbE51bWJlciAodm9pZCAqcERldmljZUhhbmRsZXIsIEJZVEUgYnlDaGFubmVsSW5kZXgpCi17Ci0vLyAgICBQU0RldmljZSAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKLSAgICByZXR1cm4oc0NoYW5uZWxUYmxbYnlDaGFubmVsSW5kZXhdLmJ5Q2hhbm5lbE51bWJlcik7Ci19Ci0KLS8qCi0gKiBEZXNjcmlwdGlvbjogU2V0IE5JQyBtZWRpYSBjaGFubmVsCi0gKgotICogUGFyYW1ldGVyczoKLSAqICBJbjoKLSAqICAgICAgcERldmljZUhhbmRsZXIgICAgICAtIFRoZSBhZGFwdGVyIHRvIGJlIHNldAotICogICAgICB1Q29ubmVjdGlvbkNoYW5uZWwgIC0gQ2hhbm5lbCB0byBiZSBzZXQKLSAqICBPdXQ6Ci0gKiAgICAgIG5vbmUKLSAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2VlZGVkOyBGQUxTRSBpZiBmYWlsZWQuCi0gKgotICovCi1CT09MIENBUkRiU2V0Q2hhbm5lbCAodm9pZCAqcERldmljZUhhbmRsZXIsIFVJTlQgdUNvbm5lY3Rpb25DaGFubmVsKQotewotICAgIFBTRGV2aWNlICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotICAgIEJPT0wgICAgICAgIGJSZXN1bHQgPSBUUlVFOwotCi0KLSAgICBpZiAocERldmljZS0+YnlDdXJyZW50Q2ggPT0gdUNvbm5lY3Rpb25DaGFubmVsKSB7Ci0gICAgICAgIHJldHVybiBiUmVzdWx0OwotICAgIH0KLQotICAgIGlmIChzQ2hhbm5lbFRibFt1Q29ubmVjdGlvbkNoYW5uZWxdLmJWYWxpZCA9PSBGQUxTRSkgewotICAgICAgICByZXR1cm4gKEZBTFNFKTsKLSAgICB9Ci0KLSAgICBpZiAoKHVDb25uZWN0aW9uQ2hhbm5lbCA+IENCX01BWF9DSEFOTkVMXzI0RykgJiYKLSAgICAgICAgKHBEZXZpY2UtPmVDdXJyZW50UEhZVHlwZSAhPSBQSFlfVFlQRV8xMUEpKSB7Ci0gICAgICAgIENBUkRiU2V0UGh5UGFyYW1ldGVyKHBEZXZpY2UsIFBIWV9UWVBFXzExQSwgMCwgMCwgTlVMTCwgTlVMTCk7Ci0gICAgfSBlbHNlIGlmICgodUNvbm5lY3Rpb25DaGFubmVsIDw9IENCX01BWF9DSEFOTkVMXzI0RykgJiYKLSAgICAgICAgKHBEZXZpY2UtPmVDdXJyZW50UEhZVHlwZSA9PSBQSFlfVFlQRV8xMUEpKSB7Ci0gICAgICAgIENBUkRiU2V0UGh5UGFyYW1ldGVyKHBEZXZpY2UsIFBIWV9UWVBFXzExRywgMCwgMCwgTlVMTCwgTlVMTCk7Ci0gICAgfQotICAgIC8vIGNsZWFyIE5BVgotICAgIE1BQ3ZSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19NQUNDUiwgTUFDQ1JfQ0xSTkFWKTsKLQotICAgIC8ve3sgUm9iZXJ0WXU6IDIwMDQxMjAyCi0gICAgLy8vLyBUWF9QRSB3aWxsIHJlc2VydmUgMyB1cyBmb3IgTUFYMjgyOSBBIG1vZGUgb25seSwgaXQgaXMgZm9yIGJldHRlciBUWCB0aHJvdWdocHV0Ci0KLSAgICBpZiAoIHBEZXZpY2UtPmJ5UkZUeXBlID09IFJGX0FJUk9IQTcyMzAgKQotICAgIHsKLSAgICAgICAgUkZiQUw3MjMwU2VsZWN0Q2hhbm5lbFBvc3RQcm9jZXNzKHBEZXZpY2UtPlBvcnRPZmZzZXQsIHBEZXZpY2UtPmJ5Q3VycmVudENoLCAoQllURSl1Q29ubmVjdGlvbkNoYW5uZWwpOwotICAgIH0KLSAgICAvL319IFJvYmVydFl1Ci0KLQotICAgIHBEZXZpY2UtPmJ5Q3VycmVudENoID0gKEJZVEUpdUNvbm5lY3Rpb25DaGFubmVsOwotICAgIGJSZXN1bHQgJj0gUkZiU2VsZWN0Q2hhbm5lbChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBwRGV2aWNlLT5ieVJGVHlwZSwgKEJZVEUpdUNvbm5lY3Rpb25DaGFubmVsKTsKLQotICAgIC8vIEluaXQgU3ludGhlc2l6ZXIgVGFibGUKLSAgICBpZiAocERldmljZS0+YkVuYWJsZVBTTW9kZSA9PSBUUlVFKQotICAgICAgICBSRnZXcml0ZVdha2VQcm9nU3luKHBEZXZpY2UtPlBvcnRPZmZzZXQsIHBEZXZpY2UtPmJ5UkZUeXBlLCB1Q29ubmVjdGlvbkNoYW5uZWwpOwotCi0KLSAgICAvL0RCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iQ0FSRGJTZXRNZWRpYUNoYW5uZWw6ICVkXG4iLCAoQllURSl1Q29ubmVjdGlvbkNoYW5uZWwpOwotICAgIEJCdlNvZnR3YXJlUmVzZXQocERldmljZS0+UG9ydE9mZnNldCk7Ci0KLSAgICBpZiAocERldmljZS0+YnlMb2NhbElEID4gUkVWX0lEX1ZUMzI1M19CMSkgewotICAgICAgICAvLyBzZXQgSFcgZGVmYXVsdCBwb3dlciByZWdpc3RlcgotICAgICAgICBNQUN2U2VsZWN0UGFnZTEocERldmljZS0+UG9ydE9mZnNldCk7Ci0gICAgICAgIFJGYlNldFBvd2VyKHBEZXZpY2UsIFJBVEVfMU0sIHBEZXZpY2UtPmJ5Q3VycmVudENoKTsKLSAgICAgICAgVk5Tdk91dFBvcnRCKHBEZXZpY2UtPlBvcnRPZmZzZXQgKyBNQUNfUkVHX1BXUkNDSywgcERldmljZS0+YnlDdXJQd3IpOwotICAgICAgICBSRmJTZXRQb3dlcihwRGV2aWNlLCBSQVRFXzZNLCBwRGV2aWNlLT5ieUN1cnJlbnRDaCk7Ci0gICAgICAgIFZOU3ZPdXRQb3J0QihwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19QV1JPRkRNLCBwRGV2aWNlLT5ieUN1clB3cik7Ci0gICAgICAgIE1BQ3ZTZWxlY3RQYWdlMChwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBpZiAocERldmljZS0+ZUN1cnJlbnRQSFlUeXBlID09IFBIWV9UWVBFXzExQikgewotI2lmZGVmCVBMSUNFX0RFQlVHCi0JLy9wcmludGsoIkZ1bmM6Q0FSRGJTZXRDaGFubmVsOmNhbGwgUkZiU2V0UG93ZXI6MTFCXG4iKTsKLSNlbmRpZgotICAgICAgICBSRmJTZXRQb3dlcihwRGV2aWNlLCBSQVRFXzFNLCBwRGV2aWNlLT5ieUN1cnJlbnRDaCk7Ci0gICAgfSBlbHNlIHsKLSNpZmRlZglQTElDRV9ERUJVRwotCS8vcHJpbnRrKCJGdW5jOkNBUkRiU2V0Q2hhbm5lbDpjYWxsIFJGYlNldFBvd2VyXG4iKTsKLSNlbmRpZgotCQlSRmJTZXRQb3dlcihwRGV2aWNlLCBSQVRFXzZNLCBwRGV2aWNlLT5ieUN1cnJlbnRDaCk7Ci0gICAgfQotCi0gICAgcmV0dXJuKGJSZXN1bHQpOwotfQotCi0KIAogLyoKICAqIERlc2NyaXB0aW9uOiBDYXJkIFNlbmQgcGFja2V0IGZ1bmN0aW9uCkBAIC04NDksMTEgKzM2NSwxMSBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZWVkZWQ7IEZBTFNFIGlmIGZhaWxlZC4KKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZWVkZWQ7IGZhbHNlIGlmIGZhaWxlZC4KICAqCiAgKi8KIC8qCi1CT09MIENBUkRiU2VuZFBhY2tldCAodm9pZCAqcERldmljZUhhbmRsZXIsIHZvaWQgKnBQYWNrZXQsIENBUkRfUEtUX1RZUEUgZVBrdFR5cGUsIFVJTlQgdUxlbmd0aCkKK2Jvb2wgQ0FSRGJTZW5kUGFja2V0ICh2b2lkICpwRGV2aWNlSGFuZGxlciwgdm9pZCAqcFBhY2tldCwgQ0FSRF9QS1RfVFlQRSBlUGt0VHlwZSwgdW5zaWduZWQgaW50IHVMZW5ndGgpCiB7CiAgICAgUFNEZXZpY2UgICAgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7CiAgICAgaWYgKGVQa3RUeXBlID09IFBLVF9UWVBFXzgwMl8xMV9NTkcpIHsKQEAgLTg2NCw3ICszODAsNyBAQAogICAgICAgICByZXR1cm4gVFhiVEQxU2VuZChwRGV2aWNlLCBwUGFja2V0LCB1TGVuZ3RoKTsKICAgICB9CiAKLSAgICByZXR1cm4gKFRSVUUpOworICAgIHJldHVybiAodHJ1ZSk7CiB9CiAqLwogCkBAIC04NzgsMTYgKzM5NCwxNiBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzaG9ydCBwcmVhbWJsZTsgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc2hvcnQgcHJlYW1ibGU7IG90aGVyd2lzZSBmYWxzZQogICoKICAqLwotQk9PTCBDQVJEYklzU2hvcnRQcmVhbWJsZSAodm9pZCAqcERldmljZUhhbmRsZXIpCitib29sIENBUkRiSXNTaG9ydFByZWFtYmxlICh2b2lkICpwRGV2aWNlSGFuZGxlcikKIHsKICAgICBQU0RldmljZSAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKICAgICBpZiAocERldmljZS0+YnlQcmVhbWJsZVR5cGUgPT0gMCkgewotICAgICAgICByZXR1cm4oRkFMU0UpOworICAgICAgICByZXR1cm4oZmFsc2UpOwogICAgIH0KLSAgICByZXR1cm4oVFJVRSk7CisgICAgcmV0dXJuKHRydWUpOwogfQogCiAvKgpAQCAtODk5LDEwICs0MTUsMTAgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc2hvcnQgc2xvdCB0aW1lOyBvdGhlcndpc2UgRkFMU0UKKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzaG9ydCBzbG90IHRpbWU7IG90aGVyd2lzZSBmYWxzZQogICoKICAqLwotQk9PTCBDQVJEYklzU2hvclNsb3RUaW1lICh2b2lkICpwRGV2aWNlSGFuZGxlcikKK2Jvb2wgQ0FSRGJJc1Nob3JTbG90VGltZSAodm9pZCAqcERldmljZUhhbmRsZXIpCiB7CiAgICAgUFNEZXZpY2UgICAgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7CiAgICAgcmV0dXJuKHBEZXZpY2UtPmJTaG9ydFNsb3RUaW1lKTsKQEAgLTkyMSwxNCArNDM3LDE0IEBACiAgKiBSZXR1cm4gVmFsdWU6IE5vbmUuCiAgKgogICovCi1CT09MIENBUkRiU2V0UGh5UGFyYW1ldGVyICh2b2lkICpwRGV2aWNlSGFuZGxlciwgQ0FSRF9QSFlfVFlQRSBlUEhZVHlwZSwgV09SRCB3Q2FwSW5mbywgQllURSBieUVSUEZpZWxkLCB2b2lkICpwdlN1cHBvcnRSYXRlSUVzLCB2b2lkICpwdkV4dFN1cHBvcnRSYXRlSUVzKQorYm9vbCBDQVJEYlNldFBoeVBhcmFtZXRlciAodm9pZCAqcERldmljZUhhbmRsZXIsIENBUkRfUEhZX1RZUEUgZVBIWVR5cGUsIHVuc2lnbmVkIHNob3J0IHdDYXBJbmZvLCB1bnNpZ25lZCBjaGFyIGJ5RVJQRmllbGQsIHZvaWQgKnB2U3VwcG9ydFJhdGVJRXMsIHZvaWQgKnB2RXh0U3VwcG9ydFJhdGVJRXMpCiB7CiAgICAgUFNEZXZpY2UgICAgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7Ci0gICAgQllURSAgICAgICAgYnlDV01heE1pbiA9IDA7Ci0gICAgQllURSAgICAgICAgYnlTbG90ID0gMDsKLSAgICBCWVRFICAgICAgICBieVNJRlMgPSAwOwotICAgIEJZVEUgICAgICAgIGJ5RElGUyA9IDA7Ci0gICAgQllURSAgICAgICAgYnlEYXRhOworICAgIHVuc2lnbmVkIGNoYXIgYnlDV01heE1pbiA9IDA7CisgICAgdW5zaWduZWQgY2hhciBieVNsb3QgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgYnlTSUZTID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RElGUyA9IDA7CisgICAgdW5zaWduZWQgY2hhciBieURhdGE7CiAvLyAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBSYXRlcyA9IE5VTEw7CiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwU3VwcG9ydFJhdGVzID0gKFBXTEFOX0lFX1NVUFBfUkFURVMpIHB2U3VwcG9ydFJhdGVJRXM7CiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwRXh0U3VwcG9ydFJhdGVzID0gKFBXTEFOX0lFX1NVUFBfUkFURVMpIHB2RXh0U3VwcG9ydFJhdGVJRXM7CkBAIC0xMDcxLDkgKzU4Nyw5IEBACiAgICAgICAgIHBEZXZpY2UtPmJ5U2xvdCA9IGJ5U2xvdDsKICAgICAgICAgVk5Tdk91dFBvcnRCKHBEZXZpY2UtPlBvcnRPZmZzZXQgKyBNQUNfUkVHX1NMT1QsIHBEZXZpY2UtPmJ5U2xvdCk7CiAgICAgICAgIGlmIChwRGV2aWNlLT5ieVNsb3QgPT0gQ19TTE9UX1NIT1JUKSB7Ci0gICAgICAgICAgICBwRGV2aWNlLT5iU2hvcnRTbG90VGltZSA9IFRSVUU7CisgICAgICAgICAgICBwRGV2aWNlLT5iU2hvcnRTbG90VGltZSA9IHRydWU7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwRGV2aWNlLT5iU2hvcnRTbG90VGltZSA9IEZBTFNFOworICAgICAgICAgICAgcERldmljZS0+YlNob3J0U2xvdFRpbWUgPSBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBCQnZTZXRTaG9ydFNsb3RUaW1lKHBEZXZpY2UpOwogICAgIH0KQEAgLTEwODksNyArNjA1LDcgQEAKICAgICBzX3ZTZXRSU1BJTkYocERldmljZSwgZVBIWVR5cGUsIHBTdXBwb3J0UmF0ZXMsIHBFeHRTdXBwb3J0UmF0ZXMpOwogICAgIHBEZXZpY2UtPmVDdXJyZW50UEhZVHlwZSA9IGVQSFlUeXBlOwogICAgIC8vIHNldCBmb3IgTkRJUyBPSURfODAyXzExU1VQUE9SVEVEX1JBVEVTCi0gICAgcmV0dXJuIChUUlVFKTsKKyAgICByZXR1cm4gKHRydWUpOwogfQogCiAvKgpAQCAtMTEwOCw3ICs2MjQsNyBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi1CT09MIENBUkRiVXBkYXRlVFNGICh2b2lkICpwRGV2aWNlSGFuZGxlciwgQllURSBieVJ4UmF0ZSwgUVdPUkQgcXdCU1NUaW1lc3RhbXAsIFFXT1JEIHF3TG9jYWxUU0YpCitib29sIENBUkRiVXBkYXRlVFNGICh2b2lkICpwRGV2aWNlSGFuZGxlciwgdW5zaWduZWQgY2hhciBieVJ4UmF0ZSwgUVdPUkQgcXdCU1NUaW1lc3RhbXAsIFFXT1JEIHF3TG9jYWxUU0YpCiB7CiAgICAgUFNEZXZpY2UgICAgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7CiAgICAgUVdPUkQgICAgICAgcXdUU0ZPZmZzZXQ7CkBAIC0xMTI1LDcgKzY0MSw3IEBACiAgICAgICAgIFZOU3ZPdXRQb3J0RChwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19UU0ZPRlNUICsgNCwgSElEV09SRChxd1RTRk9mZnNldCkpOwogICAgICAgICBNQUN2UmVnQml0c09uKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfVEZUQ1RMLCBURlRDVExfVFNGU1lOQ0VOKTsKICAgICB9Ci0gICAgcmV0dXJuKFRSVUUpOworICAgIHJldHVybih0cnVlKTsKIH0KIAogCkBAIC0xMTQwLDE2ICs2NTYsMTYgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2VlZDsgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2VlZDsgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIENBUkRiU2V0QmVhY29uUGVyaW9kICh2b2lkICpwRGV2aWNlSGFuZGxlciwgV09SRCB3QmVhY29uSW50ZXJ2YWwpCitib29sIENBUkRiU2V0QmVhY29uUGVyaW9kICh2b2lkICpwRGV2aWNlSGFuZGxlciwgdW5zaWduZWQgc2hvcnQgd0JlYWNvbkludGVydmFsKQogewogICAgIFBTRGV2aWNlICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotICAgIFVJTlQgICAgICAgIHVCZWFjb25JbnRlcnZhbCA9IDA7Ci0gICAgVUlOVCAgICAgICAgdUxvd05leHRUQlRUID0gMDsKLSAgICBVSU5UICAgICAgICB1SGlnaFJlbWFpbiA9IDA7Ci0gICAgVUlOVCAgICAgICAgdUxvd1JlbWFpbiA9IDA7CisgICAgdW5zaWduZWQgaW50IHVCZWFjb25JbnRlcnZhbCA9IDA7CisgICAgdW5zaWduZWQgaW50IHVMb3dOZXh0VEJUVCA9IDA7CisgICAgdW5zaWduZWQgaW50IHVIaWdoUmVtYWluID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgdUxvd1JlbWFpbiA9IDA7CiAgICAgUVdPUkQgICAgICAgcXdOZXh0VEJUVDsKIAogICAgIEhJRFdPUkQocXdOZXh0VEJUVCkgPSAwOwpAQCAtMTE3OSw3ICs2OTUsNyBAQAogICAgIFZOU3ZPdXRQb3J0RChwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19ORVhUVEJUVCArIDQsIEhJRFdPUkQocXdOZXh0VEJUVCkpOwogICAgIE1BQ3ZSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19URlRDVEwsIFRGVENUTF9UQlRUU1lOQ0VOKTsKIAotICAgIHJldHVybihUUlVFKTsKKyAgICByZXR1cm4odHJ1ZSk7CiB9CiAKIApAQCAtMTE5NCw1MSArNzEwLDUxIEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIGFsbCBkYXRhIHBhY2tldCBjb21wbGV0ZTsgb3RoZXJ3aXNlIEZBTFNFLgorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIGFsbCBkYXRhIHBhY2tldCBjb21wbGV0ZTsgb3RoZXJ3aXNlIGZhbHNlLgogICoKICAqLwotQk9PTCBDQVJEYlN0b3BUeFBhY2tldCAodm9pZCAqcERldmljZUhhbmRsZXIsIENBUkRfUEtUX1RZUEUgZVBrdFR5cGUpCitib29sIENBUkRiU3RvcFR4UGFja2V0ICh2b2lkICpwRGV2aWNlSGFuZGxlciwgQ0FSRF9QS1RfVFlQRSBlUGt0VHlwZSkKIHsKICAgICBQU0RldmljZSAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKIAogCiAgICAgaWYgKGVQa3RUeXBlID09IFBLVF9UWVBFXzgwMl8xMV9BTEwpIHsKLSAgICAgICAgcERldmljZS0+YlN0b3BCZWFjb24gPSBUUlVFOwotICAgICAgICBwRGV2aWNlLT5iU3RvcFR4MFBrdCA9IFRSVUU7Ci0gICAgICAgIHBEZXZpY2UtPmJTdG9wRGF0YVBrdCA9IFRSVUU7CisgICAgICAgIHBEZXZpY2UtPmJTdG9wQmVhY29uID0gdHJ1ZTsKKyAgICAgICAgcERldmljZS0+YlN0b3BUeDBQa3QgPSB0cnVlOworICAgICAgICBwRGV2aWNlLT5iU3RvcERhdGFQa3QgPSB0cnVlOwogICAgIH0gZWxzZSBpZiAoZVBrdFR5cGUgPT0gUEtUX1RZUEVfODAyXzExX0JDTikgewotICAgICAgICBwRGV2aWNlLT5iU3RvcEJlYWNvbiA9IFRSVUU7CisgICAgICAgIHBEZXZpY2UtPmJTdG9wQmVhY29uID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGVQa3RUeXBlID09IFBLVF9UWVBFXzgwMl8xMV9NTkcpIHsKLSAgICAgICAgcERldmljZS0+YlN0b3BUeDBQa3QgPSBUUlVFOworICAgICAgICBwRGV2aWNlLT5iU3RvcFR4MFBrdCA9IHRydWU7CiAgICAgfSBlbHNlIGlmIChlUGt0VHlwZSA9PSBQS1RfVFlQRV84MDJfMTFfREFUQSkgewotICAgICAgICBwRGV2aWNlLT5iU3RvcERhdGFQa3QgPSBUUlVFOworICAgICAgICBwRGV2aWNlLT5iU3RvcERhdGFQa3QgPSB0cnVlOwogICAgIH0KIAotICAgIGlmIChwRGV2aWNlLT5iU3RvcEJlYWNvbiA9PSBUUlVFKSB7Ci0gICAgICAgIGlmIChwRGV2aWNlLT5iSXNCZWFjb25CdWZSZWFkeVNldCA9PSBUUlVFKSB7CisgICAgaWYgKHBEZXZpY2UtPmJTdG9wQmVhY29uID09IHRydWUpIHsKKyAgICAgICAgaWYgKHBEZXZpY2UtPmJJc0JlYWNvbkJ1ZlJlYWR5U2V0ID09IHRydWUpIHsKICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5jYkJlYWNvbkJ1ZlJlYWR5U2V0Q250IDwgV0FJVF9CRUFDT05fVFhfRE9XTl9UTU8pIHsKICAgICAgICAgICAgICAgICBwRGV2aWNlLT5jYkJlYWNvbkJ1ZlJlYWR5U2V0Q250ICsrOwotICAgICAgICAgICAgICAgIHJldHVybihGQUxTRSk7CisgICAgICAgICAgICAgICAgcmV0dXJuKGZhbHNlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBwRGV2aWNlLT5iSXNCZWFjb25CdWZSZWFkeVNldCA9IEZBTFNFOworICAgICAgICBwRGV2aWNlLT5iSXNCZWFjb25CdWZSZWFkeVNldCA9IGZhbHNlOwogICAgICAgICBwRGV2aWNlLT5jYkJlYWNvbkJ1ZlJlYWR5U2V0Q250ID0gMDsKICAgICAgICAgTUFDdlJlZ0JpdHNPZmYocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19UQ1IsIFRDUl9BVVRPQkNOVFgpOwogICAgIH0KICAgICAvLyB3YWl0IGFsbCBURDAgY29tcGxldGUKLSAgICBpZiAocERldmljZS0+YlN0b3BUeDBQa3QgPT0gVFJVRSkgeworICAgIGlmIChwRGV2aWNlLT5iU3RvcFR4MFBrdCA9PSB0cnVlKSB7CiAgICAgICAgICBpZiAocERldmljZS0+aVREVXNlZFtUWVBFX1RYRE1BMF0gIT0gMCl7Ci0gICAgICAgICAgICByZXR1cm4oRkFMU0UpOworICAgICAgICAgICAgcmV0dXJuKGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KICAgICAvLyB3YWl0IGFsbCBEYXRhIFREIGNvbXBsZXRlCi0gICAgaWYgKHBEZXZpY2UtPmJTdG9wRGF0YVBrdCA9PSBUUlVFKSB7CisgICAgaWYgKHBEZXZpY2UtPmJTdG9wRGF0YVBrdCA9PSB0cnVlKSB7CiAgICAgICAgIGlmIChwRGV2aWNlLT5pVERVc2VkW1RZUEVfQUMwRE1BXSAhPSAwKXsKLSAgICAgICAgICAgIHJldHVybihGQUxTRSk7CisgICAgICAgICAgICByZXR1cm4oZmFsc2UpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuKFRSVUUpOworICAgIHJldHVybih0cnVlKTsKIH0KIAogCkBAIC0xMjUyLDMzICs3NjgsMzMgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2VzczsgRkFMU0UgaWYgZmFpbGVkLgorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2Nlc3M7IGZhbHNlIGlmIGZhaWxlZC4KICAqCiAgKi8KLUJPT0wgQ0FSRGJTdGFydFR4UGFja2V0ICh2b2lkICpwRGV2aWNlSGFuZGxlciwgQ0FSRF9QS1RfVFlQRSBlUGt0VHlwZSkKK2Jvb2wgQ0FSRGJTdGFydFR4UGFja2V0ICh2b2lkICpwRGV2aWNlSGFuZGxlciwgQ0FSRF9QS1RfVFlQRSBlUGt0VHlwZSkKIHsKICAgICBQU0RldmljZSAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKIAogCiAgICAgaWYgKGVQa3RUeXBlID09IFBLVF9UWVBFXzgwMl8xMV9BTEwpIHsKLSAgICAgICAgcERldmljZS0+YlN0b3BCZWFjb24gPSBGQUxTRTsKLSAgICAgICAgcERldmljZS0+YlN0b3BUeDBQa3QgPSBGQUxTRTsKLSAgICAgICAgcERldmljZS0+YlN0b3BEYXRhUGt0ID0gRkFMU0U7CisgICAgICAgIHBEZXZpY2UtPmJTdG9wQmVhY29uID0gZmFsc2U7CisgICAgICAgIHBEZXZpY2UtPmJTdG9wVHgwUGt0ID0gZmFsc2U7CisgICAgICAgIHBEZXZpY2UtPmJTdG9wRGF0YVBrdCA9IGZhbHNlOwogICAgIH0gZWxzZSBpZiAoZVBrdFR5cGUgPT0gUEtUX1RZUEVfODAyXzExX0JDTikgewotICAgICAgICBwRGV2aWNlLT5iU3RvcEJlYWNvbiA9IEZBTFNFOworICAgICAgICBwRGV2aWNlLT5iU3RvcEJlYWNvbiA9IGZhbHNlOwogICAgIH0gZWxzZSBpZiAoZVBrdFR5cGUgPT0gUEtUX1RZUEVfODAyXzExX01ORykgewotICAgICAgICBwRGV2aWNlLT5iU3RvcFR4MFBrdCA9IEZBTFNFOworICAgICAgICBwRGV2aWNlLT5iU3RvcFR4MFBrdCA9IGZhbHNlOwogICAgIH0gZWxzZSBpZiAoZVBrdFR5cGUgPT0gUEtUX1RZUEVfODAyXzExX0RBVEEpIHsKLSAgICAgICAgcERldmljZS0+YlN0b3BEYXRhUGt0ID0gRkFMU0U7CisgICAgICAgIHBEZXZpY2UtPmJTdG9wRGF0YVBrdCA9IGZhbHNlOwogICAgIH0KIAotICAgIGlmICgocERldmljZS0+YlN0b3BCZWFjb24gPT0gRkFMU0UpICYmCi0gICAgICAgIChwRGV2aWNlLT5iQmVhY29uQnVmUmVhZHkgPT0gVFJVRSkgJiYKKyAgICBpZiAoKHBEZXZpY2UtPmJTdG9wQmVhY29uID09IGZhbHNlKSAmJgorICAgICAgICAocERldmljZS0+YkJlYWNvbkJ1ZlJlYWR5ID09IHRydWUpICYmCiAgICAgICAgIChwRGV2aWNlLT5lT1BNb2RlID09IE9QX01PREVfQURIT0MpKSB7CiAgICAgICAgIE1BQ3ZSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19UQ1IsIFRDUl9BVVRPQkNOVFgpOwogICAgIH0KIAotICAgIHJldHVybihUUlVFKTsKKyAgICByZXR1cm4odHJ1ZSk7CiB9CiAKIApAQCAtMTI5NCwxMCArODEwLDEwIEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIHN1Y2Nlc3M7IEZBTFNFIGlmIGZhaWxlZC4KKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZXNzOyBmYWxzZSBpZiBmYWlsZWQuCiAgKgogICovCi1CT09MIENBUkRiU2V0QlNTSUQodm9pZCAqcERldmljZUhhbmRsZXIsIFBCWVRFIHBieUJTU0lELCBDQVJEX09QX01PREUgZU9QTW9kZSkKK2Jvb2wgQ0FSRGJTZXRCU1NJRCh2b2lkICpwRGV2aWNlSGFuZGxlciwgdW5zaWduZWQgY2hhciAqcGJ5QlNTSUQsIENBUkRfT1BfTU9ERSBlT1BNb2RlKQogewogICAgIFBTRGV2aWNlICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwogCkBAIC0xMzE1LDIwICs4MzEsMjAgQEAKICAgICB9CiAgICAgaWYgKGVPUE1vZGUgPT0gT1BfTU9ERV9VTktOT1dOKSB7CiAgICAgICAgIE1BQ3ZSZWdCaXRzT2ZmKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfUkNSLCBSQ1JfQlNTSUQpOwotICAgICAgICBwRGV2aWNlLT5iQlNTSURGaWx0ZXIgPSBGQUxTRTsKKyAgICAgICAgcERldmljZS0+YkJTU0lERmlsdGVyID0gZmFsc2U7CiAgICAgICAgIHBEZXZpY2UtPmJ5UnhNb2RlICY9IH5SQ1JfQlNTSUQ7CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIndjbWQ6IHJ4X21vZGUgPSAleFxuIiwgcERldmljZS0+YnlSeE1vZGUgKTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoSVNfTlVMTF9BRERSRVNTKHBEZXZpY2UtPmFieUJTU0lEKSA9PSBGQUxTRSkgeworICAgICAgICBpZiAoaXNfemVyb19ldGhlcl9hZGRyKHBEZXZpY2UtPmFieUJTU0lEKSA9PSBmYWxzZSkgewogICAgICAgICAgICAgTUFDdlJlZ0JpdHNPbihwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBNQUNfUkVHX1JDUiwgUkNSX0JTU0lEKTsKLSAgICAgICAgICAgIHBEZXZpY2UtPmJCU1NJREZpbHRlciA9IFRSVUU7CisgICAgICAgICAgICBwRGV2aWNlLT5iQlNTSURGaWx0ZXIgPSB0cnVlOwogICAgICAgICAgICAgcERldmljZS0+YnlSeE1vZGUgfD0gUkNSX0JTU0lEOwogCSAgICB9CiAJICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIndtZ3I6IHJ4X21vZGUgPSAleFxuIiwgcERldmljZS0+YnlSeE1vZGUgKTsKICAgICB9CiAgICAgLy8gQWRvcHQgQlNTIHN0YXRlIGluIEFkYXB0ZXIgRGV2aWNlIE9iamVjdAogICAgIHBEZXZpY2UtPmVPUE1vZGUgPSBlT1BNb2RlOwotICAgIHJldHVybihUUlVFKTsKKyAgICByZXR1cm4odHJ1ZSk7CiB9CiAKIApAQCAtMTM0Miw3ICs4NTgsNyBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZXNzOyBGQUxTRSBpZiBmYWlsZWQuCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2VzczsgZmFsc2UgaWYgZmFpbGVkLgogICoKICAqLwogCkBAIC0xMzYzLDE4ICs4NzksMTggQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2VlZDsgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2VlZDsgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIENBUkRiU2V0VHhEYXRhUmF0ZSgKK2Jvb2wgQ0FSRGJTZXRUeERhdGFSYXRlKAogICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyLAotICAgIFdPUkQgICAgd0RhdGFSYXRlCisgICAgdW5zaWduZWQgc2hvcnQgd0RhdGFSYXRlCiAgICAgKQogewogICAgIFBTRGV2aWNlICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwogCiAgICAgcERldmljZS0+d0N1cnJlbnRSYXRlID0gd0RhdGFSYXRlOwotICAgIHJldHVybihUUlVFKTsKKyAgICByZXR1cm4odHJ1ZSk7CiB9CiAKIC8qKwpAQCAtMTM4OCwyMCArOTA0LDIwIEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIHBvd2VyIGRvd24gc3VjY2Vzczsgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgcG93ZXIgZG93biBzdWNjZXNzOyBvdGhlcndpc2UgZmFsc2UKICAqCiAtKi8KLUJPT0wKK2Jvb2wKIENBUkRiUG93ZXJEb3duKAogICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyCiAgICAgKQogewogICAgIFBTRGV2aWNlICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKXBEZXZpY2VIYW5kbGVyOwotICAgIFVJTlQgICAgICAgICAgICB1SWR4OworICAgIHVuc2lnbmVkIGludCB1SWR4OwogCiAgICAgLy8gY2hlY2sgaWYgYWxyZWFkeSBpbiBEb3plIG1vZGUKICAgICBpZiAoTUFDYklzUmVnQml0c09uKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfUFNDVEwsIFBTQ1RMX1BTKSkKLSAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gRnJvY2UgUFNFTiBvbgogICAgIE1BQ3ZSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19QU0NUTCwgUFNDVExfUFNFTik7CkBAIC0xNDEwLDEyICs5MjYsMTIgQEAKIAogICAgIGZvciAodUlkeCA9IDA7IHVJZHggPCBUWVBFX01BWFREOyB1SWR4ICsrKSB7CiAgICAgICAgIGlmIChwRGV2aWNlLT5pVERVc2VkW3VJZHhdICE9IDApCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgTUFDdlJlZ0JpdHNPbihwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBNQUNfUkVHX1BTQ1RMLCBQU0NUTF9HTzJET1pFKTsKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIkdvIHRvIERvemUgWlpaWlpaWlpaWlpaWlpaXG4iKTsKLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLyoKQEAgLTE0MjcsMTYgKzk0MywxNiBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZXNzOyBvdGhlcndpc2UgRkFMU0UKKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZXNzOyBvdGhlcndpc2UgZmFsc2UKICAqCiAgKi8KLUJPT0wgQ0FSRGJSYWRpb1Bvd2VyT2ZmICh2b2lkICpwRGV2aWNlSGFuZGxlcikKK2Jvb2wgQ0FSRGJSYWRpb1Bvd2VyT2ZmICh2b2lkICpwRGV2aWNlSGFuZGxlcikKIHsKICAgICBQU0RldmljZSAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKLSAgICBCT09MICAgICAgICBiUmVzdWx0ID0gVFJVRTsKKyAgICBib29sIGJSZXN1bHQgPSB0cnVlOwogCi0gICAgaWYgKHBEZXZpY2UtPmJSYWRpb09mZiA9PSBUUlVFKQotICAgICAgICByZXR1cm4gVFJVRTsKKyAgICBpZiAocERldmljZS0+YlJhZGlvT2ZmID09IHRydWUpCisgICAgICAgIHJldHVybiB0cnVlOwogCiAKICAgICBzd2l0Y2ggKHBEZXZpY2UtPmJ5UkZUeXBlKSB7CkBAIC0xNDU5LDcgKzk3NSw3IEBACiAKICAgICBCQnZTZXREZWVwU2xlZXAocERldmljZS0+UG9ydE9mZnNldCwgcERldmljZS0+YnlMb2NhbElEKTsKIAotICAgIHBEZXZpY2UtPmJSYWRpb09mZiA9IFRSVUU7CisgICAgcERldmljZS0+YlJhZGlvT2ZmID0gdHJ1ZTsKICAgICAgLy8yMDA3LTA0MDktMDMsPEFkZD4gYnkgY2hlc3RlcgogcHJpbnRrKCJjaGVzdGVyIHBvd2VyIG9mZlxuIik7CiBNQUN2UmVnQml0c09uKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfR1BJT0NUTDAsIExFRF9BQ1RTRVQpOyAgLy9MRUQgaXNzdWUKQEAgLTE0NzYsMjMgKzk5MiwyMyBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZXNzOyBvdGhlcndpc2UgRkFMU0UKKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZXNzOyBvdGhlcndpc2UgZmFsc2UKICAqCiAgKi8KLUJPT0wgQ0FSRGJSYWRpb1Bvd2VyT24gKHZvaWQgKnBEZXZpY2VIYW5kbGVyKQorYm9vbCBDQVJEYlJhZGlvUG93ZXJPbiAodm9pZCAqcERldmljZUhhbmRsZXIpCiB7CiAgICAgUFNEZXZpY2UgICAgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7Ci0gICAgQk9PTCAgICAgICAgYlJlc3VsdCA9IFRSVUU7CisgICAgYm9vbCBiUmVzdWx0ID0gdHJ1ZTsKIHByaW50aygiY2hlc3RlciBwb3dlciBvblxuIik7Ci0gICAgaWYgKHBEZXZpY2UtPmJSYWRpb0NvbnRyb2xPZmYgPT0gVFJVRSl7Ci1pZiAocERldmljZS0+YkhXUmFkaW9PZmYgPT0gVFJVRSkgcHJpbnRrKCJjaGVzdGVyIGJIV1JhZGlvT2ZmXG4iKTsKLWlmIChwRGV2aWNlLT5iUmFkaW9Db250cm9sT2ZmID09IFRSVUUpIHByaW50aygiY2hlc3RlciBiUmFkaW9Db250cm9sT2ZmXG4iKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFO30KKyAgICBpZiAocERldmljZS0+YlJhZGlvQ29udHJvbE9mZiA9PSB0cnVlKXsKK2lmIChwRGV2aWNlLT5iSFdSYWRpb09mZiA9PSB0cnVlKSBwcmludGsoImNoZXN0ZXIgYkhXUmFkaW9PZmZcbiIpOworaWYgKHBEZXZpY2UtPmJSYWRpb0NvbnRyb2xPZmYgPT0gdHJ1ZSkgcHJpbnRrKCJjaGVzdGVyIGJSYWRpb0NvbnRyb2xPZmZcbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7fQogCi0gICAgaWYgKHBEZXZpY2UtPmJSYWRpb09mZiA9PSBGQUxTRSkKKyAgICBpZiAocERldmljZS0+YlJhZGlvT2ZmID09IGZhbHNlKQogICAgICAgIHsKIHByaW50aygiY2hlc3RlciBwYlJhZGlvT2ZmXG4iKTsKLXJldHVybiBUUlVFO30KK3JldHVybiB0cnVlO30KIAogICAgIEJCdkV4aXREZWVwU2xlZXAocERldmljZS0+UG9ydE9mZnNldCwgcERldmljZS0+YnlMb2NhbElEKTsKIApAQCAtMTUxNCw3ICsxMDMwLDcgQEAKIAogICAgIH0KIAotICAgIHBEZXZpY2UtPmJSYWRpb09mZiA9IEZBTFNFOworICAgIHBEZXZpY2UtPmJSYWRpb09mZiA9IGZhbHNlOwogLy8gIDIwMDctMDQwOS0wMyw8QWRkPiBieSBjaGVzdGVyCiBwcmludGsoImNoZXN0ZXIgcG93ZXIgb25cbiIpOwogTUFDdlJlZ0JpdHNPZmYocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19HUElPQ1RMMCwgTEVEX0FDVFNFVCk7IC8vTEVEIGlzc3VlCkBAIC0xNTIzLDEyICsxMDM5LDEyIEBACiAKIAogCi1CT09MIENBUkRiUmVtb3ZlS2V5ICh2b2lkICpwRGV2aWNlSGFuZGxlciwgUEJZVEUgcGJ5QlNTSUQpCitib29sIENBUkRiUmVtb3ZlS2V5ICh2b2lkICpwRGV2aWNlSGFuZGxlciwgdW5zaWduZWQgY2hhciAqcGJ5QlNTSUQpCiB7CiAgICAgUFNEZXZpY2UgICAgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7CiAKICAgICBLZXliUmVtb3ZlQWxsS2V5KCYocERldmljZS0+c0tleSksIHBieUJTU0lELCBwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKLSAgICByZXR1cm4gKFRSVUUpOworICAgIHJldHVybiAodHJ1ZSk7CiB9CiAKIApAQCAtMTU0OCwxNyArMTA2NCwxNyBAQAogICogUmV0dXJuIFZhbHVlOiBub25lLgogICoKIC0qLwotQk9PTAorYm9vbAogQ0FSRGJBZGRfUE1LSURfQ2FuZGlkYXRlICgKICAgICB2b2lkICpwRGV2aWNlSGFuZGxlciwKLSAgICBQQllURSAgICAgICAgICAgIHBieUJTU0lELAotICAgIEJPT0wgICAgICAgICAgICAgYlJTTkNhcEV4aXN0LAotICAgIFdPUkQgICAgICAgICAgICAgd1JTTkNhcAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUJTU0lELAorICAgIGJvb2wgYlJTTkNhcEV4aXN0LAorICAgIHVuc2lnbmVkIHNob3J0IHdSU05DYXAKICAgICApCiB7CiAgICAgUFNEZXZpY2UgICAgICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKICAgICBQUE1LSURfQ0FORElEQVRFICAgIHBDYW5kaWRhdGVMaXN0OwotICAgIFVJTlQgICAgICAgICAgICAgICAgaWkgPSAwOworICAgIHVuc2lnbmVkIGludCBpaSA9IDA7CiAKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPImJBZGRfUE1LSURfQ2FuZGlkYXRlIFNUQVJUOiAoJWQpXG4iLCAoaW50KXBEZXZpY2UtPmdzUE1LSURDYW5kaWRhdGUuTnVtQ2FuZGlkYXRlcyk7CiAKQEAgLTE1NzcsMTggKzEwOTMsMTggQEAKICAgICBmb3IgKGlpID0gMDsgaWkgPCBwRGV2aWNlLT5nc1BNS0lEQ2FuZGlkYXRlLk51bUNhbmRpZGF0ZXM7IGlpKyspIHsKICAgICAgICAgcENhbmRpZGF0ZUxpc3QgPSAmcERldmljZS0+Z3NQTUtJRENhbmRpZGF0ZS5DYW5kaWRhdGVMaXN0W2lpXTsKICAgICAgICAgaWYgKCAhbWVtY21wKHBDYW5kaWRhdGVMaXN0LT5CU1NJRCwgcGJ5QlNTSUQsIEVUSF9BTEVOKSkgewotICAgICAgICAgICAgaWYgKChiUlNOQ2FwRXhpc3QgPT0gVFJVRSkgJiYgKHdSU05DYXAgJiBCSVQwKSkgeworICAgICAgICAgICAgaWYgKChiUlNOQ2FwRXhpc3QgPT0gdHJ1ZSkgJiYgKHdSU05DYXAgJiBCSVQwKSkgewogICAgICAgICAgICAgICAgIHBDYW5kaWRhdGVMaXN0LT5GbGFncyB8PSBORElTXzgwMl8xMV9QTUtJRF9DQU5ESURBVEVfUFJFQVVUSF9FTkFCTEVEOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBwQ2FuZGlkYXRlTGlzdC0+RmxhZ3MgJj0gfihORElTXzgwMl8xMV9QTUtJRF9DQU5ESURBVEVfUFJFQVVUSF9FTkFCTEVEKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBOZXcgQ2FuZGlkYXRlCiAgICAgcENhbmRpZGF0ZUxpc3QgPSAmcERldmljZS0+Z3NQTUtJRENhbmRpZGF0ZS5DYW5kaWRhdGVMaXN0W3BEZXZpY2UtPmdzUE1LSURDYW5kaWRhdGUuTnVtQ2FuZGlkYXRlc107Ci0gICAgaWYgKChiUlNOQ2FwRXhpc3QgPT0gVFJVRSkgJiYgKHdSU05DYXAgJiBCSVQwKSkgeworICAgIGlmICgoYlJTTkNhcEV4aXN0ID09IHRydWUpICYmICh3UlNOQ2FwICYgQklUMCkpIHsKICAgICAgICAgcENhbmRpZGF0ZUxpc3QtPkZsYWdzIHw9IE5ESVNfODAyXzExX1BNS0lEX0NBTkRJREFURV9QUkVBVVRIX0VOQUJMRUQ7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcENhbmRpZGF0ZUxpc3QtPkZsYWdzICY9IH4oTkRJU184MDJfMTFfUE1LSURfQ0FORElEQVRFX1BSRUFVVEhfRU5BQkxFRCk7CkBAIC0xNTk2LDcgKzExMTIsNyBAQAogICAgIG1lbWNweShwQ2FuZGlkYXRlTGlzdC0+QlNTSUQsIHBieUJTU0lELCBFVEhfQUxFTik7CiAgICAgcERldmljZS0+Z3NQTUtJRENhbmRpZGF0ZS5OdW1DYW5kaWRhdGVzKys7CiAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJOdW1DYW5kaWRhdGVzOiVkXG4iLCAoaW50KXBEZXZpY2UtPmdzUE1LSURDYW5kaWRhdGUuTnVtQ2FuZGlkYXRlcyk7Ci0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgKgpAQCAtMTYwOSw4OSArMTEyNSw2IEBACiAgICAgcmV0dXJuIChwRGV2aWNlLT5hYnlDdXJyZW50TmV0QWRkcik7CiB9CiAKLQotCi12b2lkIENBUkR2SW5pdENoYW5uZWxUYWJsZSAodm9pZCAqcERldmljZUhhbmRsZXIpCi17Ci0gICAgUFNEZXZpY2UgICAgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7Ci0gICAgQk9PTCAgICAgICAgYk11bHRpQmFuZCA9IEZBTFNFOwotICAgIFVJTlQgICAgICAgIGlpOwotCi0gICAgZm9yKGlpPTE7aWk8PUNBUkRfTUFYX0NIQU5ORUxfVEJMO2lpKyspIHsKLSAgICAgICAgc0NoYW5uZWxUYmxbaWldLmJWYWxpZCA9IEZBTFNFOwotICAgIH0KLQotICAgIHN3aXRjaCAocERldmljZS0+YnlSRlR5cGUpIHsKLSAgICAgICAgY2FzZSBSRl9SRk1EMjk1OSA6Ci0gICAgICAgIGNhc2UgUkZfQUlST0hBIDoKLSAgICAgICAgY2FzZSBSRl9BTDIyMzBTOgotICAgICAgICBjYXNlIFJGX1VXMjQ1MSA6Ci0gICAgICAgIGNhc2UgUkZfVlQzMjI2IDoKLQkvLwkJcHJpbnRrKCJjaGVzdGVyLWZhbHNlXG4iKTsKLSAgICAgICAgICAgIGJNdWx0aUJhbmQgPSBGQUxTRTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJGX0FJUk9IQTcyMzAgOgotICAgICAgICBjYXNlIFJGX1VXMjQ1MiA6Ci0gICAgICAgIGNhc2UgUkZfTk9USElORyA6Ci0gICAgICAgIGRlZmF1bHQgOgotICAgICAgICAgICAgYk11bHRpQmFuZCA9IFRSVUU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoKHBEZXZpY2UtPmR3RGlhZ1JlZkNvdW50ICE9IDApIHx8Ci0gICAgICAgIChwRGV2aWNlLT5iMTFoRW5hYmxlID09IFRSVUUpKSB7Ci0gICAgICAgIGlmIChiTXVsdGlCYW5kID09IFRSVUUpIHsKLSAgICAgICAgICAgIGZvcihpaT0wO2lpPENBUkRfTUFYX0NIQU5ORUxfVEJMO2lpKyspIHsKLSAgICAgICAgICAgICAgICBzQ2hhbm5lbFRibFtpaSsxXS5iVmFsaWQgPSBUUlVFOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmFieVJlZ1B3cltpaSsxXSA9IHBEZXZpY2UtPmFieU9GRE1EZWZhdWx0UHdyW2lpKzFdOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmFieUxvY2FsUHdyW2lpKzFdID0gcERldmljZS0+YWJ5T0ZETURlZmF1bHRQd3JbaWkrMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IoaWk9MDtpaTxDSEFOTkVMX01BWF8yNEc7aWkrKykgewotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmFieVJlZ1B3cltpaSsxXSA9IHBEZXZpY2UtPmFieUNDS0RlZmF1bHRQd3JbaWkrMV07Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YWJ5TG9jYWxQd3JbaWkrMV0gPSBwRGV2aWNlLT5hYnlDQ0tEZWZhdWx0UHdyW2lpKzFdOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yKGlpPTA7aWk8Q0hBTk5FTF9NQVhfMjRHO2lpKyspIHsKLS8vMjAwOC04LTQgPGFkZD4gYnkgY2hlc3RlcgotIGlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbaWldICE9IDApIHsKLSAgICAgICAgICAgICAgICBzQ2hhbm5lbFRibFtpaSsxXS5iVmFsaWQgPSBUUlVFOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmFieVJlZ1B3cltpaSsxXSA9IHBEZXZpY2UtPmFieUNDS0RlZmF1bHRQd3JbaWkrMV07Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YWJ5TG9jYWxQd3JbaWkrMV0gPSBwRGV2aWNlLT5hYnlDQ0tEZWZhdWx0UHdyW2lpKzFdOwotIAl9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHBEZXZpY2UtPmJ5Wm9uZVR5cGUgPD0gQ0NPREVfTUFYKSB7Ci0gICAgICAgIGlmIChiTXVsdGlCYW5kID09IFRSVUUpIHsKLSAgICAgICAgICAgIGZvcihpaT0wO2lpPENBUkRfTUFYX0NIQU5ORUxfVEJMO2lpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYkNoYW5uZWxJZHhMaXN0W2lpXSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNDaGFubmVsVGJsW2lpKzFdLmJWYWxpZCA9IFRSVUU7Ci0gICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmFieVJlZ1B3cltpaSsxXSA9IENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJ5UG93ZXJbaWldOwotICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5hYnlMb2NhbFB3cltpaSsxXSA9IENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJ5UG93ZXJbaWldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvcihpaT0wO2lpPENIQU5ORUxfTUFYXzI0RztpaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJDaGFubmVsSWR4TGlzdFtpaV0gIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBzQ2hhbm5lbFRibFtpaSsxXS5iVmFsaWQgPSBUUlVFOwotICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5hYnlSZWdQd3JbaWkrMV0gPSBDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5ieVBvd2VyW2lpXTsKLSAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YWJ5TG9jYWxQd3JbaWkrMV0gPSBDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5ieVBvd2VyW2lpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gREJHX1BSVChNU0dfTEVWRUxfTk9USUNFLCBLRVJOX0lORk8iWm9uZT1bJWRdWyVjXVslY10hIVxuIixwRGV2aWNlLT5ieVpvbmVUeXBlLENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmNoQ291bnRyeUNvZGVbMF0sQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uY2hDb3VudHJ5Q29kZVsxXSk7Ci0gICAgZm9yKGlpPTA7aWk8Q0FSRF9NQVhfQ0hBTk5FTF9UQkw7aWkrKykgewotICAgICAgICBpZiAocERldmljZS0+YWJ5UmVnUHdyW2lpKzFdID09IDApIHsKLSAgICAgICAgICAgIHBEZXZpY2UtPmFieVJlZ1B3cltpaSsxXSA9IHBEZXZpY2UtPmFieU9GRE1EZWZhdWx0UHdyW2lpKzFdOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwRGV2aWNlLT5hYnlMb2NhbFB3cltpaSsxXSA9PSAwKSB7Ci0gICAgICAgICAgICBwRGV2aWNlLT5hYnlMb2NhbFB3cltpaSsxXSA9IHBEZXZpY2UtPmFieU9GRE1EZWZhdWx0UHdyW2lpKzFdOwotICAgICAgICB9Ci0gICAgfQotfQotCi0KLQogLyoKICAqCiAgKiBEZXNjcmlwdGlvbjoKQEAgLTE3MDYsMjcgKzExMzksMjcgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZS4KICAqCiAtKi8KLUJPT0wKK2Jvb2wKIENBUkRiU3RhcnRNZWFzdXJlICgKICAgICB2b2lkICpwRGV2aWNlSGFuZGxlciwKICAgICB2b2lkICpwdk1lYXN1cmVFSURzLAotICAgIFVJTlQgICAgICAgICAgICAgdU51bU9mTWVhc3VyZUVJRHMKKyAgICB1bnNpZ25lZCBpbnQgdU51bU9mTWVhc3VyZUVJRHMKICAgICApCiB7CiAgICAgUFNEZXZpY2UgICAgICAgICAgICAgICAgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7CiAgICAgUFdMQU5fSUVfTUVBU1VSRV9SRVEgICAgcEVJRCA9IChQV0xBTl9JRV9NRUFTVVJFX1JFUSkgcHZNZWFzdXJlRUlEczsKICAgICBRV09SRCAgICAgICAgICAgICAgICAgICBxd0N1cnJUU0Y7CiAgICAgUVdPUkQgICAgICAgICAgICAgICAgICAgcXdTdGFydFRTRjsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiRXhwaXJlZCA9IFRSVUU7Ci0gICAgV09SRCAgICAgICAgICAgICAgICAgICAgd0R1cmF0aW9uID0gMDsKKyAgICBib29sIGJFeHBpcmVkID0gdHJ1ZTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RHVyYXRpb24gPSAwOwogCiAgICAgaWYgKChwRUlEID09IE5VTEwpIHx8CiAgICAgICAgICh1TnVtT2ZNZWFzdXJlRUlEcyA9PSAwKSkgewotICAgICAgICByZXR1cm4gKFRSVUUpOworICAgICAgICByZXR1cm4gKHRydWUpOwogICAgIH0KICAgICBDQVJEYkdldEN1cnJlbnRUU0YocERldmljZS0+UG9ydE9mZnNldCwgJnF3Q3VyclRTRik7Ci0gICAgaWYgKHBEZXZpY2UtPmJNZWFzdXJlSW5Qcm9ncmVzcyA9PSBUUlVFKSB7Ci0gICAgICAgIHBEZXZpY2UtPmJNZWFzdXJlSW5Qcm9ncmVzcyA9IEZBTFNFOworICAgIGlmIChwRGV2aWNlLT5iTWVhc3VyZUluUHJvZ3Jlc3MgPT0gdHJ1ZSkgeworICAgICAgICBwRGV2aWNlLT5iTWVhc3VyZUluUHJvZ3Jlc3MgPSBmYWxzZTsKICAgICAgICAgVk5Tdk91dFBvcnRCKHBEZXZpY2UtPlBvcnRPZmZzZXQgKyBNQUNfUkVHX1JDUiwgcERldmljZS0+YnlPcmdSQ1IpOwogICAgICAgICBNQUN2U2VsZWN0UGFnZTEocERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgICAgIFZOU3ZPdXRQb3J0RChwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19NQVIwLCBwRGV2aWNlLT5kd09yZ01BUjApOwpAQCAtMTczNCw3ICsxMTY3LDcgQEAKICAgICAgICAgLy8gY2xlYXIgbWVhc3VyZSBjb250cm9sCiAgICAgICAgIE1BQ3ZSZWdCaXRzT2ZmKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfTVNSQ1RMLCBNU1JDVExfRU4pOwogICAgICAgICBNQUN2U2VsZWN0UGFnZTAocERldmljZS0+UG9ydE9mZnNldCk7Ci0gICAgICAgIENBUkRiU2V0Q2hhbm5lbChwRGV2aWNlLCBwRGV2aWNlLT5ieU9yZ0NoYW5uZWwpOworICAgICAgICBzZXRfY2hhbm5lbChwRGV2aWNlLCBwRGV2aWNlLT5ieU9yZ0NoYW5uZWwpOwogICAgICAgICBNQUN2U2VsZWN0UGFnZTEocERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgICAgIE1BQ3ZSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19NU1JDVEwrMSwgTVNSQ1RMMV9UWFBBVVNFKTsKICAgICAgICAgTUFDdlNlbGVjdFBhZ2UwKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwpAQCAtMTc0OSw3ICsxMTgyLDcgQEAKICAgICAgICAgaWYgKHBEZXZpY2UtPmJ5TG9jYWxJRCA+IFJFVl9JRF9WVDMyNTNfQjEpIHsKICAgICAgICAgICAgIEhJRFdPUkQocXdTdGFydFRTRikgPSBISURXT1JEKCooKFBRV09SRCkgKHBEZXZpY2UtPnBDdXJyTWVhc3VyZUVJRC0+c1JlcS5hYnlTdGFydFRpbWUpKSk7CiAgICAgICAgICAgICBMT0RXT1JEKHF3U3RhcnRUU0YpID0gTE9EV09SRCgqKChQUVdPUkQpIChwRGV2aWNlLT5wQ3Vyck1lYXN1cmVFSUQtPnNSZXEuYWJ5U3RhcnRUaW1lKSkpOwotICAgICAgICAgICAgd0R1cmF0aW9uID0gKigoUFdPUkQpIChwRGV2aWNlLT5wQ3Vyck1lYXN1cmVFSUQtPnNSZXEuYWJ5RHVyYXRpb24pKTsKKyAgICAgICAgICAgIHdEdXJhdGlvbiA9ICooKHVuc2lnbmVkIHNob3J0ICopIChwRGV2aWNlLT5wQ3Vyck1lYXN1cmVFSUQtPnNSZXEuYWJ5RHVyYXRpb24pKTsKICAgICAgICAgICAgIHdEdXJhdGlvbiArPSAxOyAvLyAxIFRVIGZvciBjaGFubmVsIHN3aXRjaGluZwogCiAgICAgICAgICAgICBpZiAoKExPRFdPUkQocXdTdGFydFRTRikgPT0gMCkgJiYgKEhJRFdPUkQocXdTdGFydFRTRikgPT0gMCkpIHsKQEAgLTE3NTksNyArMTE5Miw3IEBACiAgICAgICAgICAgICAgICAgaWYgKExPRFdPUkQocXdDdXJyVFNGKSA+IExPRFdPUkQocXdTdGFydFRTRikpIHsKICAgICAgICAgICAgICAgICAgICAgSElEV09SRChxd1N0YXJ0VFNGKSsrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBiRXhwaXJlZCA9IEZBTFNFOworICAgICAgICAgICAgICAgIGJFeHBpcmVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIHN0YXJ0IGF0IHNldHRpbmcgc3RhcnQgVFNGIC0gMVRVKGZvciBjaGFubmVsIHN3aXRjaGluZykKQEAgLTE3NzMsMTEgKzEyMDYsMTEgQEAKICAgICAgICAgICAgICAgICAoKEhJRFdPUkQocXdDdXJyVFNGKSA9PSBISURXT1JEKHF3U3RhcnRUU0YpKSAmJgogICAgICAgICAgICAgICAgIChMT0RXT1JEKHF3Q3VyclRTRikgPCBMT0RXT1JEKHF3U3RhcnRUU0YpKSkKICAgICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICBiRXhwaXJlZCA9IEZBTFNFOworICAgICAgICAgICAgICAgIGJFeHBpcmVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBWTlRXSUZJYk1lYXN1cmVSZXBvcnQoICBwRGV2aWNlLT5wTWdtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5wQ3Vyck1lYXN1cmVFSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRUFTVVJFX01PREVfTEFURSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QmFzaWNNYXAsCkBAIC0xNzg3LDcgKzEyMjAsNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gaGFyZHdhcmUgZG8gbm90IHN1cHBvcnQgbWVhc3VyZQogICAgICAgICAgICAgVk5UV0lGSWJNZWFzdXJlUmVwb3J0KCAgcERldmljZS0+cE1nbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+cEN1cnJNZWFzdXJlRUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVBU1VSRV9NT0RFX0lOQ0FQQUJMRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QmFzaWNNYXAsCkBAIC0xNzk3LDcgKzEyMzAsNyBAQAogICAgICAgICB9CiAgICAgfSB3aGlsZSAocERldmljZS0+dU51bU9mTWVhc3VyZUVJRHMgIT0gMCk7CiAKLSAgICBpZiAoYkV4cGlyZWQgPT0gRkFMU0UpIHsKKyAgICBpZiAoYkV4cGlyZWQgPT0gZmFsc2UpIHsKICAgICAgICAgTUFDdlNlbGVjdFBhZ2UxKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwogICAgICAgICBWTlN2T3V0UG9ydEQocERldmljZS0+UG9ydE9mZnNldCArIE1BQ19SRUdfTVNSU1RBUlQsIExPRFdPUkQocXdTdGFydFRTRikpOwogICAgICAgICBWTlN2T3V0UG9ydEQocERldmljZS0+UG9ydE9mZnNldCArIE1BQ19SRUdfTVNSU1RBUlQgKyA0LCBISURXT1JEKHF3U3RhcnRUU0YpKTsKQEAgLTE4MDcsNyArMTI0MCw3IEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gYWxsIG1lYXN1cmUgc3RhcnQgdGltZSBleHBpcmVkIHdlIHNob3VsZCBjb21wbGV0ZSBhY3Rpb24KICAgICAgICAgVk5UV0lGSWJNZWFzdXJlUmVwb3J0KCAgcERldmljZS0+cE1nbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QmFzaWNNYXAsCkBAIC0xODE1LDcgKzEyNDgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5hYnlSUElzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgfQotICAgIHJldHVybiAoVFJVRSk7CisgICAgcmV0dXJuICh0cnVlKTsKIH0KIAogCkBAIC0xODMzLDE5ICsxMjY2LDE5IEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUuCiAgKgogLSovCi1CT09MCitib29sCiBDQVJEYkNoYW5uZWxTd2l0Y2ggKAogICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyLAotICAgIEJZVEUgICAgICAgICAgICAgYnlNb2RlLAotICAgIEJZVEUgICAgICAgICAgICAgYnlOZXdDaGFubmVsLAotICAgIEJZVEUgICAgICAgICAgICAgYnlDb3VudAorICAgIHVuc2lnbmVkIGNoYXIgYnlNb2RlLAorICAgIHVuc2lnbmVkIGNoYXIgYnlOZXdDaGFubmVsLAorICAgIHVuc2lnbmVkIGNoYXIgYnlDb3VudAogICAgICkKIHsKICAgICBQU0RldmljZSAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKLSAgICBCT09MICAgICAgICBiUmVzdWx0ID0gVFJVRTsKKyAgICBib29sIGJSZXN1bHQgPSB0cnVlOwogCiAgICAgaWYgKGJ5Q291bnQgPT0gMCkgewotICAgICAgICBiUmVzdWx0ID0gQ0FSRGJTZXRDaGFubmVsKHBEZXZpY2UsIGJ5TmV3Q2hhbm5lbCk7CisgICAgICAgIGJSZXN1bHQgPSBzZXRfY2hhbm5lbChwRGV2aWNlLCBieU5ld0NoYW5uZWwpOwogICAgICAgICBWTlRXSUZJYkNoYW5uZWxTd2l0Y2gocERldmljZS0+cE1nbXQsIGJ5TmV3Q2hhbm5lbCk7CiAgICAgICAgIE1BQ3ZTZWxlY3RQYWdlMShwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKICAgICAgICAgTUFDdlJlZ0JpdHNPbihwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBNQUNfUkVHX01TUkNUTCsxLCBNU1JDVEwxX1RYUEFVU0UpOwpAQCAtMTg1NCw3ICsxMjg3LDcgQEAKICAgICB9CiAgICAgcERldmljZS0+YnlDaGFubmVsU3dpdGNoQ291bnQgPSBieUNvdW50OwogICAgIHBEZXZpY2UtPmJ5TmV3Q2hhbm5lbCA9IGJ5TmV3Q2hhbm5lbDsKLSAgICBwRGV2aWNlLT5iQ2hhbm5lbFN3aXRjaCA9IFRSVUU7CisgICAgcERldmljZS0+YkNoYW5uZWxTd2l0Y2ggPSB0cnVlOwogICAgIGlmIChieU1vZGUgPT0gMSkgewogICAgICAgICBiUmVzdWx0PUNBUkRiU3RvcFR4UGFja2V0KHBEZXZpY2UsIFBLVF9UWVBFXzgwMl8xMV9BTEwpOwogICAgIH0KQEAgLTE4NzYsMzQgKzEzMDksMzQgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZS4KICAqCiAtKi8KLUJPT0wKK2Jvb2wKIENBUkRiU2V0UXVpZXQgKAogICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyLAotICAgIEJPT0wgICAgICAgICAgICAgYlJlc2V0UXVpZXQsCi0gICAgQllURSAgICAgICAgICAgICBieVF1aWV0Q291bnQsCi0gICAgQllURSAgICAgICAgICAgICBieVF1aWV0UGVyaW9kLAotICAgIFdPUkQgICAgICAgICAgICAgd1F1aWV0RHVyYXRpb24sCi0gICAgV09SRCAgICAgICAgICAgICB3UXVpZXRPZmZzZXQKKyAgICBib29sIGJSZXNldFF1aWV0LAorICAgIHVuc2lnbmVkIGNoYXIgYnlRdWlldENvdW50LAorICAgIHVuc2lnbmVkIGNoYXIgYnlRdWlldFBlcmlvZCwKKyAgICB1bnNpZ25lZCBzaG9ydCB3UXVpZXREdXJhdGlvbiwKKyAgICB1bnNpZ25lZCBzaG9ydCB3UXVpZXRPZmZzZXQKICAgICApCiB7CiAgICAgUFNEZXZpY2UgICAgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7Ci0gICAgVUlOVCAgICAgICAgaWkgPSAwOworICAgIHVuc2lnbmVkIGludCBpaSA9IDA7CiAKLSAgICBpZiAoYlJlc2V0UXVpZXQgPT0gVFJVRSkgeworICAgIGlmIChiUmVzZXRRdWlldCA9PSB0cnVlKSB7CiAgICAgICAgIE1BQ3ZSZWdCaXRzT2ZmKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfTVNSQ1RMLCAoTVNSQ1RMX1FVSUVUVFhDSEsgfCBNU1JDVExfUVVJRVRFTikpOwogICAgICAgICBmb3IoaWk9MDtpaTxNQVhfUVVJRVRfQ09VTlQ7aWkrKykgewotICAgICAgICAgICAgcERldmljZS0+c1F1aWV0W2lpXS5iRW5hYmxlID0gRkFMU0U7CisgICAgICAgICAgICBwRGV2aWNlLT5zUXVpZXRbaWldLmJFbmFibGUgPSBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBwRGV2aWNlLT51UXVpZXRFbnF1ZXVlID0gMDsKLSAgICAgICAgcERldmljZS0+YkVuYWJsZUZpcnN0UXVpZXQgPSBGQUxTRTsKLSAgICAgICAgcERldmljZS0+YlF1aWV0RW5hYmxlID0gRkFMU0U7CisgICAgICAgIHBEZXZpY2UtPmJFbmFibGVGaXJzdFF1aWV0ID0gZmFsc2U7CisgICAgICAgIHBEZXZpY2UtPmJRdWlldEVuYWJsZSA9IGZhbHNlOwogICAgICAgICBwRGV2aWNlLT5ieVF1aWV0U3RhcnRDb3VudCA9IGJ5UXVpZXRDb3VudDsKICAgICB9Ci0gICAgaWYgKHBEZXZpY2UtPnNRdWlldFtwRGV2aWNlLT51UXVpZXRFbnF1ZXVlXS5iRW5hYmxlID09IEZBTFNFKSB7Ci0gICAgICAgIHBEZXZpY2UtPnNRdWlldFtwRGV2aWNlLT51UXVpZXRFbnF1ZXVlXS5iRW5hYmxlID0gVFJVRTsKKyAgICBpZiAocERldmljZS0+c1F1aWV0W3BEZXZpY2UtPnVRdWlldEVucXVldWVdLmJFbmFibGUgPT0gZmFsc2UpIHsKKyAgICAgICAgcERldmljZS0+c1F1aWV0W3BEZXZpY2UtPnVRdWlldEVucXVldWVdLmJFbmFibGUgPSB0cnVlOwogICAgICAgICBwRGV2aWNlLT5zUXVpZXRbcERldmljZS0+dVF1aWV0RW5xdWV1ZV0uYnlQZXJpb2QgPSBieVF1aWV0UGVyaW9kOwogICAgICAgICBwRGV2aWNlLT5zUXVpZXRbcERldmljZS0+dVF1aWV0RW5xdWV1ZV0ud0R1cmF0aW9uID0gd1F1aWV0RHVyYXRpb247Ci0gICAgICAgIHBEZXZpY2UtPnNRdWlldFtwRGV2aWNlLT51UXVpZXRFbnF1ZXVlXS5kd1N0YXJ0VGltZSA9IChEV09SRCkgYnlRdWlldENvdW50OworICAgICAgICBwRGV2aWNlLT5zUXVpZXRbcERldmljZS0+dVF1aWV0RW5xdWV1ZV0uZHdTdGFydFRpbWUgPSAodW5zaWduZWQgbG9uZykgYnlRdWlldENvdW50OwogICAgICAgICBwRGV2aWNlLT5zUXVpZXRbcERldmljZS0+dVF1aWV0RW5xdWV1ZV0uZHdTdGFydFRpbWUgKj0gcERldmljZS0+d0JlYWNvbkludGVydmFsOwogICAgICAgICBwRGV2aWNlLT5zUXVpZXRbcERldmljZS0+dVF1aWV0RW5xdWV1ZV0uZHdTdGFydFRpbWUgKz0gd1F1aWV0T2Zmc2V0OwogICAgICAgICBwRGV2aWNlLT51UXVpZXRFbnF1ZXVlKys7CkBAIC0xOTE0LDcgKzEzNDcsNyBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIHdlIGNhbiBub3QgaGFuZGxlIFF1aWV0IEVJRCBtb3JlCiAgICAgfQotICAgIHJldHVybiAoVFJVRSk7CisgICAgcmV0dXJuICh0cnVlKTsKIH0KIAogCkBAIC0xOTMyLDIxICsxMzY1LDIxIEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUuCiAgKgogLSovCi1CT09MCitib29sCiBDQVJEYlN0YXJ0UXVpZXQgKAogICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyCiAgICAgKQogewogICAgIFBTRGV2aWNlICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotICAgIFVJTlQgICAgICAgIGlpID0gMDsKLSAgICBEV09SRCAgICAgICBkd1N0YXJ0VGltZSA9IDB4RkZGRkZGRkY7Ci0gICAgVUlOVCAgICAgICAgdUN1cnJlbnRRdWlldEluZGV4ID0gMDsKLSAgICBEV09SRCAgICAgICBkd05leHRUaW1lID0gMDsKLSAgICBEV09SRCAgICAgICBkd0dhcCA9IDA7Ci0gICAgRFdPUkQgICAgICAgZHdEdXJhdGlvbiA9IDA7CisgICAgdW5zaWduZWQgaW50IGlpID0gMDsKKyAgICB1bnNpZ25lZCBsb25nIGR3U3RhcnRUaW1lID0gMHhGRkZGRkZGRjsKKyAgICB1bnNpZ25lZCBpbnQgdUN1cnJlbnRRdWlldEluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBsb25nIGR3TmV4dFRpbWUgPSAwOworICAgIHVuc2lnbmVkIGxvbmcgZHdHYXAgPSAwOworICAgIHVuc2lnbmVkIGxvbmcgZHdEdXJhdGlvbiA9IDA7CiAKICAgICBmb3IoaWk9MDtpaTxNQVhfUVVJRVRfQ09VTlQ7aWkrKykgewotICAgICAgICBpZiAoKHBEZXZpY2UtPnNRdWlldFtpaV0uYkVuYWJsZSA9PSBUUlVFKSAmJgorICAgICAgICBpZiAoKHBEZXZpY2UtPnNRdWlldFtpaV0uYkVuYWJsZSA9PSB0cnVlKSAmJgogICAgICAgICAgICAgKGR3U3RhcnRUaW1lID4gcERldmljZS0+c1F1aWV0W2lpXS5kd1N0YXJ0VGltZSkpIHsKICAgICAgICAgICAgIGR3U3RhcnRUaW1lID0gcERldmljZS0+c1F1aWV0W2lpXS5kd1N0YXJ0VGltZTsKICAgICAgICAgICAgIHVDdXJyZW50UXVpZXRJbmRleCA9IGlpOwpAQCAtMTk1NCwyMiArMTM4NywyMiBAQAogICAgIH0KICAgICBpZiAoZHdTdGFydFRpbWUgPT0gMHhGRkZGRkZGRikgewogICAgICAgICAvLyBubyBtb3JlIHF1aWV0Ci0gICAgICAgIHBEZXZpY2UtPmJRdWlldEVuYWJsZSA9IEZBTFNFOworICAgICAgICBwRGV2aWNlLT5iUXVpZXRFbmFibGUgPSBmYWxzZTsKICAgICAgICAgTUFDdlJlZ0JpdHNPZmYocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19NU1JDVEwsIChNU1JDVExfUVVJRVRUWENISyB8IE1TUkNUTF9RVUlFVEVOKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHBEZXZpY2UtPmJRdWlldEVuYWJsZSA9PSBGQUxTRSkgeworICAgICAgICBpZiAocERldmljZS0+YlF1aWV0RW5hYmxlID09IGZhbHNlKSB7CiAgICAgICAgICAgICAvLyBmaXJzdCBxdWlldAogICAgICAgICAgICAgcERldmljZS0+YnlRdWlldFN0YXJ0Q291bnQtLTsKICAgICAgICAgICAgIGR3TmV4dFRpbWUgPSBwRGV2aWNlLT5zUXVpZXRbdUN1cnJlbnRRdWlldEluZGV4XS5kd1N0YXJ0VGltZTsKICAgICAgICAgICAgIGR3TmV4dFRpbWUgJT0gcERldmljZS0+d0JlYWNvbkludGVydmFsOwogICAgICAgICAgICAgTUFDdlNlbGVjdFBhZ2UxKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwotICAgICAgICAgICAgVk5Tdk91dFBvcnRXKHBEZXZpY2UtPlBvcnRPZmZzZXQgKyBNQUNfUkVHX1FVSUVUSU5JVCwgKFdPUkQpIGR3TmV4dFRpbWUpOwotICAgICAgICAgICAgVk5Tdk91dFBvcnRXKHBEZXZpY2UtPlBvcnRPZmZzZXQgKyBNQUNfUkVHX1FVSUVURFVSLCAoV09SRCkgcERldmljZS0+c1F1aWV0W3VDdXJyZW50UXVpZXRJbmRleF0ud0R1cmF0aW9uKTsKKyAgICAgICAgICAgIFZOU3ZPdXRQb3J0VyhwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19RVUlFVElOSVQsICh1bnNpZ25lZCBzaG9ydCkgZHdOZXh0VGltZSk7CisgICAgICAgICAgICBWTlN2T3V0UG9ydFcocERldmljZS0+UG9ydE9mZnNldCArIE1BQ19SRUdfUVVJRVREVVIsICh1bnNpZ25lZCBzaG9ydCkgcERldmljZS0+c1F1aWV0W3VDdXJyZW50UXVpZXRJbmRleF0ud0R1cmF0aW9uKTsKICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5ieVF1aWV0U3RhcnRDb3VudCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YkVuYWJsZUZpcnN0UXVpZXQgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5iRW5hYmxlRmlyc3RRdWlldCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIE1BQ3ZSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19NU1JDVEwsIChNU1JDVExfUVVJRVRUWENISyB8IE1TUkNUTF9RVUlFVEVOKSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJFbmFibGVGaXJzdFF1aWV0ID0gVFJVRTsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5iRW5hYmxlRmlyc3RRdWlldCA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBNQUN2U2VsZWN0UGFnZTAocERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xOTc3LDggKzE0MTAsOCBAQAogICAgICAgICAgICAgICAgIC8vIG92ZXJsYXAgd2l0aCBwcmV2aW91cyBRdWlldAogICAgICAgICAgICAgICAgIGR3R2FwID0gIHBEZXZpY2UtPmR3Q3VycmVudFF1aWV0RW5kVGltZSAtIHBEZXZpY2UtPnNRdWlldFt1Q3VycmVudFF1aWV0SW5kZXhdLmR3U3RhcnRUaW1lOwogICAgICAgICAgICAgICAgIGlmIChkd0dhcCA+PSBwRGV2aWNlLT5zUXVpZXRbdUN1cnJlbnRRdWlldEluZGV4XS53RHVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIEZBTFNFIHRvIGluZGljYXRlIG5leHQgcXVpZXQgZXhwaXJlZCwgc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBhZ2FpbgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEZBTFNFKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIGZhbHNlIHRvIGluZGljYXRlIG5leHQgcXVpZXQgZXhwaXJlZCwgc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBhZ2FpbgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGZhbHNlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZHdEdXJhdGlvbiA9IHBEZXZpY2UtPnNRdWlldFt1Q3VycmVudFF1aWV0SW5kZXhdLndEdXJhdGlvbiAtIGR3R2FwOwogICAgICAgICAgICAgICAgIGR3R2FwID0gMDsKQEAgLTE5ODgsOTQgKzE0MjEsMzQgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIHNldCBHQVAgYW5kIE5leHQgZHVyYXRpb24KICAgICAgICAgICAgIE1BQ3ZTZWxlY3RQYWdlMShwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKLSAgICAgICAgICAgIFZOU3ZPdXRQb3J0VyhwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19RVUlFVEdBUCwgKFdPUkQpIGR3R2FwKTsKLSAgICAgICAgICAgIFZOU3ZPdXRQb3J0VyhwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19RVUlFVERVUiwgKFdPUkQpIGR3RHVyYXRpb24pOworICAgICAgICAgICAgVk5Tdk91dFBvcnRXKHBEZXZpY2UtPlBvcnRPZmZzZXQgKyBNQUNfUkVHX1FVSUVUR0FQLCAodW5zaWduZWQgc2hvcnQpIGR3R2FwKTsKKyAgICAgICAgICAgIFZOU3ZPdXRQb3J0VyhwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19RVUlFVERVUiwgKHVuc2lnbmVkIHNob3J0KSBkd0R1cmF0aW9uKTsKICAgICAgICAgICAgIE1BQ3ZSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19NU1JDVEwsIE1TUkNUTF9RVUlFVFJQVCk7CiAgICAgICAgICAgICBNQUN2U2VsZWN0UGFnZTAocERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgICAgIH0KLSAgICAgICAgcERldmljZS0+YlF1aWV0RW5hYmxlID0gVFJVRTsKKyAgICAgICAgcERldmljZS0+YlF1aWV0RW5hYmxlID0gdHJ1ZTsKICAgICAgICAgcERldmljZS0+ZHdDdXJyZW50UXVpZXRFbmRUaW1lID0gcERldmljZS0+c1F1aWV0W3VDdXJyZW50UXVpZXRJbmRleF0uZHdTdGFydFRpbWU7CiAgICAgICAgIHBEZXZpY2UtPmR3Q3VycmVudFF1aWV0RW5kVGltZSArPSBwRGV2aWNlLT5zUXVpZXRbdUN1cnJlbnRRdWlldEluZGV4XS53RHVyYXRpb247CiAgICAgICAgIGlmIChwRGV2aWNlLT5zUXVpZXRbdUN1cnJlbnRRdWlldEluZGV4XS5ieVBlcmlvZCA9PSAwKSB7CiAgICAgICAgICAgICAvLyBub3QgcGVyaW9kIGRpc2FibGUgY3VycmVudCBxdWlldCBlbGVtZW50Ci0gICAgICAgICAgICBwRGV2aWNlLT5zUXVpZXRbdUN1cnJlbnRRdWlldEluZGV4XS5iRW5hYmxlID0gRkFMU0U7CisgICAgICAgICAgICBwRGV2aWNlLT5zUXVpZXRbdUN1cnJlbnRRdWlldEluZGV4XS5iRW5hYmxlID0gZmFsc2U7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBzZXQgbmV4dCBwZXJpb2Qgc3RhcnQgdGltZQotICAgICAgICAgICAgZHdOZXh0VGltZSA9IChEV09SRCkgcERldmljZS0+c1F1aWV0W3VDdXJyZW50UXVpZXRJbmRleF0uYnlQZXJpb2Q7CisgICAgICAgICAgICBkd05leHRUaW1lID0gKHVuc2lnbmVkIGxvbmcpIHBEZXZpY2UtPnNRdWlldFt1Q3VycmVudFF1aWV0SW5kZXhdLmJ5UGVyaW9kOwogICAgICAgICAgICAgZHdOZXh0VGltZSAqPSBwRGV2aWNlLT53QmVhY29uSW50ZXJ2YWw7CiAgICAgICAgICAgICBwRGV2aWNlLT5zUXVpZXRbdUN1cnJlbnRRdWlldEluZGV4XS5kd1N0YXJ0VGltZSA9IGR3TmV4dFRpbWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHBEZXZpY2UtPmR3Q3VycmVudFF1aWV0RW5kVGltZSA+IDB4ODAwMTAwMDApIHsKICAgICAgICAgICAgIC8vIGRlY3JlYW1lbnQgYWxsIHRpbWUgdG8gYXZvaWQgd3JhcCBhcm91bmQKICAgICAgICAgICAgIGZvcihpaT0wO2lpPE1BWF9RVUlFVF9DT1VOVDtpaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBEZXZpY2UtPnNRdWlldFtpaV0uYkVuYWJsZSA9PSBUUlVFKSB7CisgICAgICAgICAgICAgICAgaWYgKHBEZXZpY2UtPnNRdWlldFtpaV0uYkVuYWJsZSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPnNRdWlldFtpaV0uZHdTdGFydFRpbWUgLT0gMHg4MDAwMDAwMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBwRGV2aWNlLT5kd0N1cnJlbnRRdWlldEVuZFRpbWUgLT0gMHg4MDAwMDAwMDsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gKFRSVUUpOwotfQotCi0KLS8qCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiAgICBTZXQgQ2hhbm5lbCBJbmZvIG9mIENvdW50cnkKLSAqCi0gKiBQYXJhbWV0ZXJzOgotICogIEluOgotICogICAgICBoRGV2aWNlQ29udGV4dCAtIGRldmljZSBzdHJ1Y3R1cmUgcG9pbnQKLSAqICBPdXQ6Ci0gKiAgICAgIG5vbmUKLSAqCi0gKiBSZXR1cm4gVmFsdWU6IG5vbmUuCi0gKgotLSovCi12b2lkCi1DQVJEdlNldENvdW50cnlJbmZvICgKLSAgICB2b2lkICpwRGV2aWNlSGFuZGxlciwKLSAgICBDQVJEX1BIWV9UWVBFICAgIGVQSFlUeXBlLAotICAgIHZvaWQgKnBJRQotICAgICkKLXsKLSAgICBQU0RldmljZSAgICAgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotICAgIFVJTlQgICAgICAgICAgICAgICAgaWkgPSAwOwotICAgIFVJTlQgICAgICAgICAgICAgICAgdXUgPSAwOwotICAgIFVJTlQgICAgICAgICAgICAgICAgc3RlcCA9IDA7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICB1TnVtT2ZDb3VudHJ5SW5mbyA9IDA7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieUNoID0gMDsKLSAgICBQV0xBTl9JRV9DT1VOVFJZICAgIHBJRV9Db3VudHJ5ID0gKFBXTEFOX0lFX0NPVU5UUlkpIHBJRTsKLQotCi0gICAgdU51bU9mQ291bnRyeUluZm8gPSAocElFX0NvdW50cnktPmxlbiAtIDMpOwotICAgIHVOdW1PZkNvdW50cnlJbmZvIC89IDM7Ci0KLSAgICBpZiAoZVBIWVR5cGUgPT0gUEhZX1RZUEVfMTFBKSB7Ci0gICAgICAgIHBEZXZpY2UtPmJDb3VudHJ5SW5mbzVHID0gVFJVRTsKLSAgICAgICAgZm9yKGlpPUNCX01BWF9DSEFOTkVMXzI0RysxO2lpPD1DQVJEX01BWF9DSEFOTkVMX1RCTDtpaSsrKSB7Ci0gICAgICAgICAgICBzQ2hhbm5lbFRibFtpaV0uYlZhbGlkID0gRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgICAgc3RlcCA9IDQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcERldmljZS0+YkNvdW50cnlJbmZvMjRHID0gVFJVRTsKLSAgICAgICAgZm9yKGlpPTE7aWk8PUNCX01BWF9DSEFOTkVMXzI0RztpaSsrKSB7Ci0gICAgICAgICAgICBzQ2hhbm5lbFRibFtpaV0uYlZhbGlkID0gRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgICAgc3RlcCA9IDE7Ci0gICAgfQotICAgIHBEZXZpY2UtPmFieUNvdW50cnlDb2RlWzBdID0gcElFX0NvdW50cnktPmFieUNvdW50cnlTdHJpbmdbMF07Ci0gICAgcERldmljZS0+YWJ5Q291bnRyeUNvZGVbMV0gPSBwSUVfQ291bnRyeS0+YWJ5Q291bnRyeVN0cmluZ1sxXTsKLSAgICBwRGV2aWNlLT5hYnlDb3VudHJ5Q29kZVsyXSA9IHBJRV9Db3VudHJ5LT5hYnlDb3VudHJ5U3RyaW5nWzJdOwotCi0gICAgZm9yKGlpPTA7aWk8dU51bU9mQ291bnRyeUluZm87aWkrKykgewotICAgICAgICBmb3IodXU9MDt1dTxwSUVfQ291bnRyeS0+YWJ5Q291bnRyeUluZm9baWkqMysxXTt1dSsrKSB7Ci0gICAgICAgICAgICBieUNoID0gQ0FSRGJ5R2V0Q2hhbm5lbE1hcHBpbmcocERldmljZSwgKEJZVEUpKHBJRV9Db3VudHJ5LT5hYnlDb3VudHJ5SW5mb1tpaSozXStzdGVwKnV1KSwgZVBIWVR5cGUpOwotICAgICAgICAgICAgc0NoYW5uZWxUYmxbYnlDaF0uYlZhbGlkID0gVFJVRTsKLSAgICAgICAgICAgIHBEZXZpY2UtPmFieVJlZ1B3cltieUNoXSA9IHBJRV9Db3VudHJ5LT5hYnlDb3VudHJ5SW5mb1tpaSozKzJdOwotICAgICAgICB9Ci0gICAgfQorICAgIHJldHVybiAodHJ1ZSk7CiB9CiAKIC8qCkBAIC0yMDk1LDE4ICsxNDY4LDE4IEBACiB2b2lkCiBDQVJEdlNldFBvd2VyQ29uc3RyYWludCAoCiAgICAgdm9pZCAqcERldmljZUhhbmRsZXIsCi0gICAgQllURSAgICAgICAgICAgICBieUNoYW5uZWwsCi0gICAgSTggICAgICAgICAgICAgICBieVBvd2VyCisgICAgdW5zaWduZWQgY2hhciBieUNoYW5uZWwsCisgICAgY2hhciBieVBvd2VyCiAgICAgKQogewogICAgIFBTRGV2aWNlICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwogCiAgICAgaWYgKGJ5Q2hhbm5lbCA+IENCX01BWF9DSEFOTkVMXzI0RykgewotICAgICAgICBpZiAocERldmljZS0+YkNvdW50cnlJbmZvNUcgPT0gVFJVRSkgeworICAgICAgICBpZiAocERldmljZS0+YkNvdW50cnlJbmZvNUcgPT0gdHJ1ZSkgewogICAgICAgICAgICAgcERldmljZS0+YWJ5TG9jYWxQd3JbYnlDaGFubmVsXSA9IHBEZXZpY2UtPmFieVJlZ1B3cltieUNoYW5uZWxdIC0gYnlQb3dlcjsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChwRGV2aWNlLT5iQ291bnRyeUluZm8yNEcgPT0gVFJVRSkgeworICAgICAgICBpZiAocERldmljZS0+YkNvdW50cnlJbmZvMjRHID09IHRydWUpIHsKICAgICAgICAgICAgIHBEZXZpY2UtPmFieUxvY2FsUHdyW2J5Q2hhbm5lbF0gPSBwRGV2aWNlLT5hYnlSZWdQd3JbYnlDaGFubmVsXSAtIGJ5UG93ZXI7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMTMwLDEyICsxNTAzLDEyIEBACiB2b2lkCiBDQVJEdkdldFBvd2VyQ2FwYWJpbGl0eSAoCiAgICAgdm9pZCAqcERldmljZUhhbmRsZXIsCi0gICAgUEJZVEUgICAgICAgICAgIHBieU1pblBvd2VyLAotICAgIFBCWVRFICAgICAgICAgICBwYnlNYXhQb3dlcgorICAgIHVuc2lnbmVkIGNoYXIgKnBieU1pblBvd2VyLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieU1heFBvd2VyCiAgICAgKQogewogICAgIFBTRGV2aWNlICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotICAgIEJZVEUgICAgICAgIGJ5RGVjID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RGVjID0gMDsKIAogICAgICpwYnlNYXhQb3dlciA9IHBEZXZpY2UtPmFieU9GRE1EZWZhdWx0UHdyW3BEZXZpY2UtPmJ5Q3VycmVudENoXTsKICAgICBieURlYyA9IHBEZXZpY2UtPmFieU9GRE1Qd3JUYmxbcERldmljZS0+YnlDdXJyZW50Q2hdOwpAQCAtMjE0OCw5OCArMTUyMSw2IEBACiAgICAgKnBieU1pblBvd2VyID0gcERldmljZS0+YWJ5T0ZETURlZmF1bHRQd3JbcERldmljZS0+YnlDdXJyZW50Q2hdIC0gYnlEZWM7CiB9CiAKLQotLyoKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqICAgIFNldCBTdXBwb3J0IENoYW5uZWxzIElFIGRlZmluZWQgaW4gODAyLjExaAotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKiAgSW46Ci0gKiAgICAgIGhEZXZpY2VDb250ZXh0IC0gZGV2aWNlIHN0cnVjdHVyZSBwb2ludAotICogIE91dDoKLSAqICAgICAgbm9uZQotICoKLSAqIFJldHVybiBWYWx1ZTogbm9uZS4KLSAqCi0tKi8KLUJZVEUKLUNBUkRieVNldFN1cHBvcnRDaGFubmVscyAoCi0gICAgdm9pZCAqcERldmljZUhhbmRsZXIsCi0gICAgUEJZVEUgICAgICAgIHBieUlFcwotICAgICkKLXsKLSAgICBQU0RldmljZSAgICAgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotICAgIFVJTlQgICAgICAgICAgICAgICAgaWk7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieUNvdW50OwotICAgIFBXTEFOX0lFX1NVUFBfQ0ggICAgcElFID0gKFBXTEFOX0lFX1NVUFBfQ0gpIHBieUlFczsKLSAgICBQQllURSAgICAgICAgICAgICAgIHBieUNoVHVwcGxlOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlMZW4gPSAwOwotCi0KLSAgICBwSUUtPmJ5RWxlbWVudElEID0gV0xBTl9FSURfU1VQUF9DSDsKLSAgICBwSUUtPmxlbiA9IDA7Ci0gICAgcGJ5Q2hUdXBwbGUgPSBwSUUtPmFieUNoYW5uZWxUdXBsZTsKLSAgICBieUxlbiA9IDI7Ci0gICAgLy8gbG93ZXIgYmFuZAotICAgIGJ5Q291bnQgPSAwOwotICAgIGlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbMjhdID09IFRSVUUpIHsKLSAgICAgICAgZm9yIChpaT0yODtpaTwzNjtpaSs9MikgewotICAgICAgICAgICAgaWYgKENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJDaGFubmVsSWR4TGlzdFtpaV0gPT0gVFJVRSkgewotICAgICAgICAgICAgICAgIGJ5Q291bnQrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAqcGJ5Q2hUdXBwbGUrKyA9IDM0OwotICAgICAgICAqcGJ5Q2hUdXBwbGUrKyA9IGJ5Q291bnQ7Ci0gICAgICAgIGJ5TGVuICs9IDI7Ci0gICAgfSBlbHNlIGlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbMjldID09IFRSVUUpIHsKLSAgICAgICAgZm9yIChpaT0yOTtpaTwzNjtpaSs9MikgewotICAgICAgICAgICAgaWYgKENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJDaGFubmVsSWR4TGlzdFtpaV0gPT0gVFJVRSkgewotICAgICAgICAgICAgICAgIGJ5Q291bnQrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAqcGJ5Q2hUdXBwbGUrKyA9IDM2OwotICAgICAgICAqcGJ5Q2hUdXBwbGUrKyA9IGJ5Q291bnQ7Ci0gICAgICAgIGJ5TGVuICs9IDI7Ci0gICAgfQotICAgIC8vIG1pZGRsZSBiYW5kCi0gICAgYnlDb3VudCA9IDA7Ci0gICAgaWYgKENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJDaGFubmVsSWR4TGlzdFszNl0gPT0gVFJVRSkgewotICAgICAgICBmb3IgKGlpPTM2O2lpPDQwO2lpKyspIHsKLSAgICAgICAgICAgIGlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbaWldID09IFRSVUUpIHsKLSAgICAgICAgICAgICAgICBieUNvdW50Kys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgKnBieUNoVHVwcGxlKysgPSA1MjsKLSAgICAgICAgKnBieUNoVHVwcGxlKysgPSBieUNvdW50OwotICAgICAgICBieUxlbiArPSAyOwotICAgIH0KLSAgICAvLyBoaWdoZXIgYmFuZAotICAgIGJ5Q291bnQgPSAwOwotICAgIGlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbNDBdID09IFRSVUUpIHsKLSAgICAgICAgZm9yIChpaT00MDtpaTw1MTtpaSsrKSB7Ci0gICAgICAgICAgICBpZiAoQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYkNoYW5uZWxJZHhMaXN0W2lpXSA9PSBUUlVFKSB7Ci0gICAgICAgICAgICAgICAgYnlDb3VudCsrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgICpwYnlDaFR1cHBsZSsrID0gMTAwOwotICAgICAgICAqcGJ5Q2hUdXBwbGUrKyA9IGJ5Q291bnQ7Ci0gICAgICAgIGJ5TGVuICs9IDI7Ci0gICAgfSBlbHNlIGlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbNTFdID09IFRSVUUpIHsKLSAgICAgICAgZm9yIChpaT01MTtpaTw1NjtpaSsrKSB7Ci0gICAgICAgICAgICBpZiAoQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYkNoYW5uZWxJZHhMaXN0W2lpXSA9PSBUUlVFKSB7Ci0gICAgICAgICAgICAgICAgYnlDb3VudCsrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgICpwYnlDaFR1cHBsZSsrID0gMTQ5OwotICAgICAgICAqcGJ5Q2hUdXBwbGUrKyA9IGJ5Q291bnQ7Ci0gICAgICAgIGJ5TGVuICs9IDI7Ci0gICAgfQotICAgIHBJRS0+bGVuICs9IChieUxlbiAtIDIpOwotICAgIHJldHVybiAoYnlMZW4pOwotfQotCi0KIC8qCiAgKgogICogRGVzY3JpcHRpb246CkBAIC0yMjUzLDggKzE1MzQsOCBAQAogICoKICAqIFJldHVybiBWYWx1ZTogbm9uZS4KICAqCi0tKi8KLUk4CisgKi8KK2NoYXIKIENBUkRieUdldFRyYW5zbWl0UG93ZXIgKAogICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyCiAgICAgKQpAQCAtMjI2NCwxNjEgKzE1NDUsNiBAQAogICAgIHJldHVybiAocERldmljZS0+YnlDdXJQd3JkQm0pOwogfQogCi0KLUJPT0wKLUNBUkRiQ2hhbm5lbEdldExpc3QgKAotICAgICBVSU5UICAgICAgIHVDb3VudHJ5Q29kZUlkeCwKLSAgICBQQllURSAgICAgIHBieUNoYW5uZWxUYWJsZQotICAgICkKLXsKLSAgICBpZiAodUNvdW50cnlDb2RlSWR4ID49IENDT0RFX01BWCkgewotICAgICAgICByZXR1cm4gKEZBTFNFKTsKLSAgICB9Ci0gICAgbWVtY3B5KHBieUNoYW5uZWxUYWJsZSwgQ2hhbm5lbFJ1bGVUYWJbdUNvdW50cnlDb2RlSWR4XS5iQ2hhbm5lbElkeExpc3QsIENCX01BWF9DSEFOTkVMKTsKLSAgICByZXR1cm4gKFRSVUUpOwotfQotCi0KLXZvaWQKLUNBUkR2U2V0Q291bnRyeUlFKAotICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyLAotICAgIHZvaWQgKnBJRQotICAgICkKLXsKLSAgICBQU0RldmljZSAgICAgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotICAgIFVJTlQgICAgICAgICAgICAgICAgaWk7Ci0gICAgUFdMQU5fSUVfQ09VTlRSWSAgICBwSUVDb3VudHJ5ID0gKFBXTEFOX0lFX0NPVU5UUlkpIHBJRTsKLQotICAgIHBJRUNvdW50cnktPmJ5RWxlbWVudElEID0gV0xBTl9FSURfQ09VTlRSWTsKLSAgICBwSUVDb3VudHJ5LT5sZW4gPSAwOwotICAgIHBJRUNvdW50cnktPmFieUNvdW50cnlTdHJpbmdbMF0gPSBDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5jaENvdW50cnlDb2RlWzBdOwotICAgIHBJRUNvdW50cnktPmFieUNvdW50cnlTdHJpbmdbMV0gPSBDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5jaENvdW50cnlDb2RlWzFdOwotICAgIHBJRUNvdW50cnktPmFieUNvdW50cnlTdHJpbmdbMl0gPSAnICc7Ci0gICAgZm9yIChpaSA9IENCX01BWF9DSEFOTkVMXzI0RzsgaWkgPCBDQl9NQVhfQ0hBTk5FTDsgaWkrKyApIHsKLSAgICAgICAgaWYgKENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJDaGFubmVsSWR4TGlzdFtpaV0gIT0gMCkgewotICAgICAgICAgICAgcElFQ291bnRyeS0+YWJ5Q291bnRyeUluZm9bcElFQ291bnRyeS0+bGVuKytdID0gc0NoYW5uZWxUYmxbaWkrMV0uYnlDaGFubmVsTnVtYmVyOwotICAgICAgICAgICAgcElFQ291bnRyeS0+YWJ5Q291bnRyeUluZm9bcElFQ291bnRyeS0+bGVuKytdID0gMTsKLSAgICAgICAgICAgIHBJRUNvdW50cnktPmFieUNvdW50cnlJbmZvW3BJRUNvdW50cnktPmxlbisrXSA9IENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJ5UG93ZXJbaWldOwotICAgICAgICB9Ci0gICAgfQotICAgIHBJRUNvdW50cnktPmxlbiArPSAzOwotfQotCi0KLUJPT0wKLUNBUkRiR2V0Q2hhbm5lbE1hcEluZm8oCi0gICAgdm9pZCAqcERldmljZUhhbmRsZXIsCi0gICAgVUlOVCAgICAgICAgIHVDaGFubmVsSW5kZXgsCi0gICAgUEJZVEUgICAgICAgcGJ5Q2hhbm5lbE51bWJlciwKLSAgICBQQllURSAgICAgICBwYnlNYXAKLSAgICApCi17Ci0vLyAgICBQU0RldmljZSAgICAgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotCi0gICAgaWYgKHVDaGFubmVsSW5kZXggPiBDQl9NQVhfQ0hBTk5FTCkgewotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotICAgICpwYnlDaGFubmVsTnVtYmVyID0gc0NoYW5uZWxUYmxbdUNoYW5uZWxJbmRleF0uYnlDaGFubmVsTnVtYmVyOwotICAgICpwYnlNYXAgPSBzQ2hhbm5lbFRibFt1Q2hhbm5lbEluZGV4XS5ieU1BUDsKLSAgICByZXR1cm4gc0NoYW5uZWxUYmxbdUNoYW5uZWxJbmRleF0uYlZhbGlkOwotfQotCi0KLXZvaWQKLUNBUkR2U2V0Q2hhbm5lbE1hcEluZm8oCi0gICAgdm9pZCAqcERldmljZUhhbmRsZXIsCi0gICAgVUlOVCAgICAgICAgIHVDaGFubmVsSW5kZXgsCi0gICAgQllURSAgICAgICAgIGJ5TWFwCi0gICAgKQotewotLy8gICAgUFNEZXZpY2UgICAgICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKLQotICAgIGlmICh1Q2hhbm5lbEluZGV4ID4gQ0JfTUFYX0NIQU5ORUwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzQ2hhbm5lbFRibFt1Q2hhbm5lbEluZGV4XS5ieU1BUCB8PSBieU1hcDsKLX0KLQotCi12b2lkCi1DQVJEdkNsZWFyQ2hhbm5lbE1hcEluZm8oCi0gICAgdm9pZCAqcERldmljZUhhbmRsZXIKLSAgICApCi17Ci0vLyAgICBQU0RldmljZSAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKLSAgICBVSU5UICAgICAgICBpaSA9IDA7Ci0KLSAgICBmb3IgKGlpID0gMTsgaWkgPD0gIENCX01BWF9DSEFOTkVMOyBpaSsrKSB7Ci0gICAgICAgIHNDaGFubmVsVGJsW2lpXS5ieU1BUCA9IDA7Ci0gICAgfQotfQotCi0KLUJZVEUKLUNBUkRieUF1dG9DaGFubmVsU2VsZWN0KAotICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyLAotICAgIENBUkRfUEhZX1RZUEUgICBlUEhZVHlwZQotICAgICkKLXsKLS8vICAgIFBTRGV2aWNlICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKLSAgICBVSU5UICAgICAgICAgICAgaWkgPSAwOwotICAgIEJZVEUgICAgICAgICAgICBieU9wdGlvbkNoYW5uZWwgPSAwOwotICAgIElOVCAgICAgICAgICAgICBhaVdlaWdodFtDQl9NQVhfQ0hBTk5FTF8yNEcrMV0gPSB7LTEwMDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwfTsKLQotICAgIGlmIChlUEhZVHlwZSA9PSBQSFlfVFlQRV8xMUEpIHsKLSAgICAgICAgZm9yKGlpPUNCX01BWF9DSEFOTkVMXzI0RysxO2lpPD1DQl9NQVhfQ0hBTk5FTDtpaSsrKSB7Ci0gICAgICAgICAgICBpZiAoc0NoYW5uZWxUYmxbaWldLmJWYWxpZCA9PSBUUlVFKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJ5T3B0aW9uQ2hhbm5lbCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJ5T3B0aW9uQ2hhbm5lbCA9IChCWVRFKSBpaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHNDaGFubmVsVGJsW2lpXS5ieU1BUCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoKEJZVEUpIGlpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAhKHNDaGFubmVsVGJsW2lpXS5ieU1BUCAmIDB4MDgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJ5T3B0aW9uQ2hhbm5lbCA9IChCWVRFKSBpaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBieU9wdGlvbkNoYW5uZWwgPSAwOwotICAgICAgICBmb3IoaWk9MTtpaTw9Q0JfTUFYX0NIQU5ORUxfMjRHO2lpKyspIHsKLSAgICAgICAgICAgIGlmIChzQ2hhbm5lbFRibFtpaV0uYlZhbGlkID09IFRSVUUpIHsKLSAgICAgICAgICAgICAgICBpZiAoc0NoYW5uZWxUYmxbaWldLmJ5TUFQID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgYWlXZWlnaHRbaWldICs9IDEwMDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNDaGFubmVsVGJsW2lpXS5ieU1BUCAmIDB4MDEpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlpID4gMykgewotICAgICAgICAgICAgICAgICAgICAgICAgYWlXZWlnaHRbaWktM10gLT0gMTA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlpID4gMikgewotICAgICAgICAgICAgICAgICAgICAgICAgYWlXZWlnaHRbaWktMl0gLT0gMjA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlpID4gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYWlXZWlnaHRbaWktMV0gLT0gNDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYWlXZWlnaHRbaWldIC09IDgwOwotICAgICAgICAgICAgICAgICAgICBpZiAoaWkgPCBDQl9NQVhfQ0hBTk5FTF8yNEcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFpV2VpZ2h0W2lpKzFdIC09IDQwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpaSA8IChDQl9NQVhfQ0hBTk5FTF8yNEcgLSAxKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYWlXZWlnaHRbaWkrMl0gLT0gMjA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlpIDwgKENCX01BWF9DSEFOTkVMXzI0RyAtIDIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhaVdlaWdodFtpaSszXSAtPSAxMDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmb3IoaWk9MTtpaTw9Q0JfTUFYX0NIQU5ORUxfMjRHO2lpKyspIHsKLSAgICAgICAgICAgIGlmICgoc0NoYW5uZWxUYmxbaWldLmJWYWxpZCA9PSBUUlVFKSAmJgotICAgICAgICAgICAgICAgIChhaVdlaWdodFtpaV0gPiBhaVdlaWdodFtieU9wdGlvbkNoYW5uZWxdKSkgewotICAgICAgICAgICAgICAgIGJ5T3B0aW9uQ2hhbm5lbCA9IChCWVRFKSBpaTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gKGJ5T3B0aW9uQ2hhbm5lbCk7Ci19Ci0KLQotCiAvL3h4eAogdm9pZAogQ0FSRHZTYWZlUmVzZXRUeCAoCkBAIC0yNDI2LDcgKzE1NTIsNyBAQAogICAgICkKIHsKICAgICBQU0RldmljZSAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKLSAgICBVSU5UICAgICAgICB1dTsKKyAgICB1bnNpZ25lZCBpbnQgdXU7CiAgICAgUFNUeERlc2MgICAgcEN1cnJURDsKIAogICAgIC8vIGluaXRpYWxpemUgVEQgaW5kZXgKQEAgLTI0ODIsNyArMTYwOCw3IEBACiAgICAgKQogewogICAgIFBTRGV2aWNlICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotICAgIFVJTlQgICAgICAgIHV1OworICAgIHVuc2lnbmVkIGludCB1dTsKICAgICBQU1J4RGVzYyAgICBwRGVzYzsKIAogCkBAIC0yNDk0LDE3ICsxNjIwLDE3IEBACiAgICAgLy8gaW5pdCBzdGF0ZSwgYWxsIFJEIGlzIGNoaXAncwogICAgIGZvciAodXUgPSAwOyB1dSA8IHBEZXZpY2UtPnNPcHRzLm5SeERlc2NzMDsgdXUrKykgewogICAgICAgICBwRGVzYyA9JihwRGV2aWNlLT5hUkQwUmluZ1t1dV0pOwotICAgICAgICBwRGVzYy0+bV9yZDBSRDAud1Jlc0NvdW50ID0gKFdPUkQpKHBEZXZpY2UtPnJ4X2J1Zl9zeik7CisgICAgICAgIHBEZXNjLT5tX3JkMFJEMC53UmVzQ291bnQgPSAodW5zaWduZWQgc2hvcnQpKHBEZXZpY2UtPnJ4X2J1Zl9zeik7CiAgICAgICAgIHBEZXNjLT5tX3JkMFJEMC5mMU93bmVyPU9XTkVEX0JZX05JQzsKLSAgICAgICAgcERlc2MtPm1fcmQxUkQxLndSZXFDb3VudCA9IChXT1JEKShwRGV2aWNlLT5yeF9idWZfc3opOworICAgICAgICBwRGVzYy0+bV9yZDFSRDEud1JlcUNvdW50ID0gKHVuc2lnbmVkIHNob3J0KShwRGV2aWNlLT5yeF9idWZfc3opOwogICAgIH0KIAogICAgIC8vIGluaXQgc3RhdGUsIGFsbCBSRCBpcyBjaGlwJ3MKICAgICBmb3IgKHV1ID0gMDsgdXUgPCBwRGV2aWNlLT5zT3B0cy5uUnhEZXNjczE7IHV1KyspIHsKICAgICAgICAgcERlc2MgPSYocERldmljZS0+YVJEMVJpbmdbdXVdKTsKLSAgICAgICAgcERlc2MtPm1fcmQwUkQwLndSZXNDb3VudCA9IChXT1JEKShwRGV2aWNlLT5yeF9idWZfc3opOworICAgICAgICBwRGVzYy0+bV9yZDBSRDAud1Jlc0NvdW50ID0gKHVuc2lnbmVkIHNob3J0KShwRGV2aWNlLT5yeF9idWZfc3opOwogICAgICAgICBwRGVzYy0+bV9yZDBSRDAuZjFPd25lcj1PV05FRF9CWV9OSUM7Ci0gICAgICAgIHBEZXNjLT5tX3JkMVJEMS53UmVxQ291bnQgPSAoV09SRCkocERldmljZS0+cnhfYnVmX3N6KTsKKyAgICAgICAgcERlc2MtPm1fcmQxUkQxLndSZXFDb3VudCA9ICh1bnNpZ25lZCBzaG9ydCkocERldmljZS0+cnhfYnVmX3N6KTsKICAgICB9CiAKICAgICBwRGV2aWNlLT5jYkRGQ0IgPSBDQl9NQVhfUlhfRlJBRzsKQEAgLTI1MzcsMTggKzE2NjMsMTggQEAKICAqIFJldHVybiBWYWx1ZTogcmVzcG9uc2UgQ29udHJvbCBmcmFtZSByYXRlCiAgKgogICovCi1XT1JEIENBUkR3R2V0Q0NLQ29udHJvbFJhdGUodm9pZCAqcERldmljZUhhbmRsZXIsIFdPUkQgd1JhdGVJZHgpCit1bnNpZ25lZCBzaG9ydCBDQVJEd0dldENDS0NvbnRyb2xSYXRlKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCB1bnNpZ25lZCBzaG9ydCB3UmF0ZUlkeCkKIHsKICAgICBQU0RldmljZSAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKLSAgICBVSU5UIHVpID0gKFVJTlQpd1JhdGVJZHg7CisgICAgdW5zaWduZWQgaW50IHVpID0gKHVuc2lnbmVkIGludCkgd1JhdGVJZHg7CiAKICAgICB3aGlsZSAodWkgPiBSQVRFXzFNKSB7Ci0gICAgICAgIGlmIChwRGV2aWNlLT53QmFzaWNSYXRlICYgKChXT1JEKTEgPDwgdWkpKSB7Ci0gICAgICAgICAgICByZXR1cm4gKFdPUkQpdWk7CisgICAgICAgIGlmIChwRGV2aWNlLT53QmFzaWNSYXRlICYgKCh1bnNpZ25lZCBzaG9ydCkxIDw8IHVpKSkgeworICAgICAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBzaG9ydCl1aTsKICAgICAgICAgfQogICAgICAgICB1aSAtLTsKICAgICB9Ci0gICAgcmV0dXJuIChXT1JEKVJBVEVfMU07CisgICAgcmV0dXJuICh1bnNpZ25lZCBzaG9ydClSQVRFXzFNOwogfQogCiAvKgpAQCAtMjU2NCwxMCArMTY5MCwxMCBAQAogICogUmV0dXJuIFZhbHVlOiByZXNwb25zZSBDb250cm9sIGZyYW1lIHJhdGUKICAqCiAgKi8KLVdPUkQgQ0FSRHdHZXRPRkRNQ29udHJvbFJhdGUgKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCBXT1JEIHdSYXRlSWR4KQordW5zaWduZWQgc2hvcnQgQ0FSRHdHZXRPRkRNQ29udHJvbFJhdGUgKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCB1bnNpZ25lZCBzaG9ydCB3UmF0ZUlkeCkKIHsKICAgICBQU0RldmljZSBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKLSAgICBVSU5UIHVpID0gKFVJTlQpd1JhdGVJZHg7CisgICAgdW5zaWduZWQgaW50IHVpID0gKHVuc2lnbmVkIGludCkgd1JhdGVJZHg7CiAKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIkJBU0lDIFJBVEU6ICVYXG4iLCBwRGV2aWNlLT53QmFzaWNSYXRlKTsKIApAQCAtMjU3OCwxNCArMTcwNCwxNCBAQAogICAgICAgICByZXR1cm4gd1JhdGVJZHg7CiAgICAgfQogICAgIHdoaWxlICh1aSA+IFJBVEVfMTFNKSB7Ci0gICAgICAgIGlmIChwRGV2aWNlLT53QmFzaWNSYXRlICYgKChXT1JEKTEgPDwgdWkpKSB7CisgICAgICAgIGlmIChwRGV2aWNlLT53QmFzaWNSYXRlICYgKCh1bnNpZ25lZCBzaG9ydCkxIDw8IHVpKSkgewogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJDQVJEd0dldE9GRE1Db250cm9sUmF0ZSA6ICVkXG4iLCB1aSk7Ci0gICAgICAgICAgICByZXR1cm4gKFdPUkQpdWk7CisgICAgICAgICAgICByZXR1cm4gKHVuc2lnbmVkIHNob3J0KXVpOwogICAgICAgICB9CiAgICAgICAgIHVpIC0tOwogICAgIH0KICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIkNBUkR3R2V0T0ZETUNvbnRyb2xSYXRlOiA2TVxuIik7Ci0gICAgcmV0dXJuIChXT1JEKVJBVEVfMjRNOworICAgIHJldHVybiAodW5zaWduZWQgc2hvcnQpUkFURV8yNE07CiB9CiAKIApAQCAtMjYwNCw5ICsxNzMwLDkgQEAKIHZvaWQgQ0FSRHZTZXRSU1BJTkYgKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCBDQVJEX1BIWV9UWVBFIGVQSFlUeXBlKQogewogICAgIFBTRGV2aWNlIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotICAgIEJZVEUgIGJ5U2VydiA9IDB4MDAsIGJ5U2lnbmFsID0gMHgwMDsgLy9Gb3IgQ0NLCi0gICAgV09SRCAgd0xlbiA9IDB4MDAwMDsKLSAgICBCWVRFICBieVR4UmF0ZSwgYnlSc3ZUaW1lOyAgICAgICAgICAgICAvL0ZvciBPRkRNCisgICAgdW5zaWduZWQgY2hhciBieVNlcnYgPSAweDAwLCBieVNpZ25hbCA9IDB4MDA7IC8vRm9yIENDSworICAgIHVuc2lnbmVkIHNob3J0IHdMZW4gPSAweDAwMDA7CisgICAgdW5zaWduZWQgY2hhciBieVR4UmF0ZSwgYnlSc3ZUaW1lOyAgICAgICAgICAgICAvL0ZvciBPRkRNCiAKICAgICAvL1NldCB0byBQYWdlMQogICAgIE1BQ3ZTZWxlY3RQYWdlMShwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKQEAgLTI3MzEsNyArMTg1Nyw3IEBACiAgICAgLy9TZXQgU0lGUywgRElGUywgRUlGUywgU2xvdFRpbWUsIEN3TWluCiAgICAgUFNEZXZpY2UgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7CiAKLSAgICBCWVRFIGJ5TWF4TWluID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TWF4TWluID0gMDsKICAgICBpZiAocERldmljZS0+YnlQYWNrZXRUeXBlPT1QS19UWVBFXzExQSkgey8vMDAwMCAwMDAwIDAwMDAgMDAwMCwxMWEKICAgICAgICAgcERldmljZS0+dVNsb3QgPSBDX1NMT1RfU0hPUlQ7CiAgICAgICAgIHBEZXZpY2UtPnVTSUZTID0gQ19TSUZTX0E7CkBAIC0yNzY4LDI3ICsxODk0LDI3IEBACiAgICAgcERldmljZS0+dUVJRlMgPSBDX0VJRlM7CiAgICAgaWYgKHBEZXZpY2UtPmJ5UkZUeXBlID09IFJGX1JGTUQyOTU5KSB7CiAgICAgICAgIC8vIGJjcyBUWF9QRSB3aWxsIHJlc2VydmUgMyB1cwotICAgICAgICBWTlN2T3V0UG9ydEIocERldmljZS0+UG9ydE9mZnNldCArIE1BQ19SRUdfU0lGUywgKEJZVEUpKHBEZXZpY2UtPnVTSUZTIC0gMykpOwotICAgICAgICBWTlN2T3V0UG9ydEIocERldmljZS0+UG9ydE9mZnNldCArIE1BQ19SRUdfRElGUywgKEJZVEUpKHBEZXZpY2UtPnVESUZTIC0gMykpOworICAgICAgICBWTlN2T3V0UG9ydEIocERldmljZS0+UG9ydE9mZnNldCArIE1BQ19SRUdfU0lGUywgKHVuc2lnbmVkIGNoYXIpKHBEZXZpY2UtPnVTSUZTIC0gMykpOworICAgICAgICBWTlN2T3V0UG9ydEIocERldmljZS0+UG9ydE9mZnNldCArIE1BQ19SRUdfRElGUywgKHVuc2lnbmVkIGNoYXIpKHBEZXZpY2UtPnVESUZTIC0gMykpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFZOU3ZPdXRQb3J0QihwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19TSUZTLCAoQllURSlwRGV2aWNlLT51U0lGUyk7Ci0gICAgICAgIFZOU3ZPdXRQb3J0QihwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19ESUZTLCAoQllURSlwRGV2aWNlLT51RElGUyk7CisgICAgICAgIFZOU3ZPdXRQb3J0QihwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19TSUZTLCAodW5zaWduZWQgY2hhcilwRGV2aWNlLT51U0lGUyk7CisgICAgICAgIFZOU3ZPdXRQb3J0QihwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19ESUZTLCAodW5zaWduZWQgY2hhcilwRGV2aWNlLT51RElGUyk7CiAgICAgfQotICAgIFZOU3ZPdXRQb3J0QihwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19FSUZTLCAoQllURSlwRGV2aWNlLT51RUlGUyk7Ci0gICAgVk5Tdk91dFBvcnRCKHBEZXZpY2UtPlBvcnRPZmZzZXQgKyBNQUNfUkVHX1NMT1QsIChCWVRFKXBEZXZpY2UtPnVTbG90KTsKKyAgICBWTlN2T3V0UG9ydEIocERldmljZS0+UG9ydE9mZnNldCArIE1BQ19SRUdfRUlGUywgKHVuc2lnbmVkIGNoYXIpcERldmljZS0+dUVJRlMpOworICAgIFZOU3ZPdXRQb3J0QihwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19TTE9ULCAodW5zaWduZWQgY2hhcilwRGV2aWNlLT51U2xvdCk7CiAgICAgYnlNYXhNaW4gfD0gMHhBMDsvLzEwMTAgMTExMSxDX0NXTUFYID0gMTAyMwotICAgIFZOU3ZPdXRQb3J0QihwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19DV01BWE1JTjAsIChCWVRFKWJ5TWF4TWluKTsKKyAgICBWTlN2T3V0UG9ydEIocERldmljZS0+UG9ydE9mZnNldCArIE1BQ19SRUdfQ1dNQVhNSU4wLCAodW5zaWduZWQgY2hhcilieU1heE1pbik7CiB9CiAKIHZvaWQgQ0FSRHZVcGRhdGVCYXNpY1RvcFJhdGUgKHZvaWQgKnBEZXZpY2VIYW5kbGVyKQogewogICAgIFBTRGV2aWNlIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotICAgIEJZVEUgYnlUb3BPRkRNID0gUkFURV8yNE0sIGJ5VG9wQ0NLID0gUkFURV8xTTsKLSAgICBCWVRFIGlpOworICAgIHVuc2lnbmVkIGNoYXIgYnlUb3BPRkRNID0gUkFURV8yNE0sIGJ5VG9wQ0NLID0gUkFURV8xTTsKKyAgICB1bnNpZ25lZCBjaGFyIGlpOwogCiAgICAgIC8vRGV0ZXJtaW5lcyB0aGUgaGlnaGVzdCBiYXNpYyByYXRlLgogICAgICBmb3IgKGlpID0gUkFURV81NE07IGlpID49IFJBVEVfNk07IGlpIC0tKSB7Ci0gICAgICAgICBpZiAoIChwRGV2aWNlLT53QmFzaWNSYXRlKSAmICgoV09SRCkoMTw8aWkpKSApIHsKKyAgICAgICAgIGlmICggKHBEZXZpY2UtPndCYXNpY1JhdGUpICYgKCh1bnNpZ25lZCBzaG9ydCkoMTw8aWkpKSApIHsKICAgICAgICAgICAgICBieVRvcE9GRE0gPSBpaTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KQEAgLTI3OTYsNyArMTkyMiw3IEBACiAgICAgIHBEZXZpY2UtPmJ5VG9wT0ZETUJhc2ljUmF0ZSA9IGJ5VG9wT0ZETTsKIAogICAgICBmb3IgKGlpID0gUkFURV8xMU07OyBpaSAtLSkgewotICAgICAgICAgaWYgKCAocERldmljZS0+d0Jhc2ljUmF0ZSkgJiAoKFdPUkQpKDE8PGlpKSkgKSB7CisgICAgICAgICBpZiAoIChwRGV2aWNlLT53QmFzaWNSYXRlKSAmICgodW5zaWduZWQgc2hvcnQpKDE8PGlpKSkgKSB7CiAgICAgICAgICAgICAgYnlUb3BDQ0sgPSBpaTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KQEAgLTI4MTcsNDAgKzE5NDMsNDAgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2VlZGVkOyBGQUxTRSBpZiBmYWlsZWQuCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2VlZGVkOyBmYWxzZSBpZiBmYWlsZWQuCiAgKgogICovCi1CT09MIENBUkRiQWRkQmFzaWNSYXRlICh2b2lkICpwRGV2aWNlSGFuZGxlciwgV09SRCB3UmF0ZUlkeCkKK2Jvb2wgQ0FSRGJBZGRCYXNpY1JhdGUgKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCB1bnNpZ25lZCBzaG9ydCB3UmF0ZUlkeCkKIHsKICAgICBQU0RldmljZSBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKLSAgICBXT1JEIHdSYXRlID0gKFdPUkQpKDE8PHdSYXRlSWR4KTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmF0ZSA9ICh1bnNpZ25lZCBzaG9ydCkoMTw8d1JhdGVJZHgpOwogCiAgICAgcERldmljZS0+d0Jhc2ljUmF0ZSB8PSB3UmF0ZTsKIAogICAgIC8vRGV0ZXJtaW5lcyB0aGUgaGlnaGVzdCBiYXNpYyByYXRlLgogICAgIENBUkR2VXBkYXRlQmFzaWNUb3BSYXRlKCh2b2lkICopcERldmljZSk7CiAKLSAgICByZXR1cm4oVFJVRSk7CisgICAgcmV0dXJuKHRydWUpOwogfQogCi1CT09MIENBUkRiSXNPRkRNaW5CYXNpY1JhdGUgKHZvaWQgKnBEZXZpY2VIYW5kbGVyKQorYm9vbCBDQVJEYklzT0ZETWluQmFzaWNSYXRlICh2b2lkICpwRGV2aWNlSGFuZGxlcikKIHsKICAgICBQU0RldmljZSBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKICAgICBpbnQgaWk7CiAKICAgICBmb3IgKGlpID0gUkFURV81NE07IGlpID49IFJBVEVfNk07IGlpIC0tKSB7Ci0gICAgICAgIGlmICgocERldmljZS0+d0Jhc2ljUmF0ZSkgJiAoKFdPUkQpKDE8PGlpKSkpCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgaWYgKChwRGV2aWNlLT53QmFzaWNSYXRlKSAmICgodW5zaWduZWQgc2hvcnQpKDE8PGlpKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgcmV0dXJuIEZBTFNFOworICAgIHJldHVybiBmYWxzZTsKIH0KIAotQllURSBDQVJEYnlHZXRQa3RUeXBlICh2b2lkICpwRGV2aWNlSGFuZGxlcikKK3Vuc2lnbmVkIGNoYXIgQ0FSRGJ5R2V0UGt0VHlwZSAodm9pZCAqcERldmljZUhhbmRsZXIpCiB7CiAgICAgUFNEZXZpY2UgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7CiAKICAgICBpZiAocERldmljZS0+YnlCQlR5cGUgPT0gQkJfVFlQRV8xMUEgfHwgcERldmljZS0+YnlCQlR5cGUgPT0gQkJfVFlQRV8xMUIpIHsKLSAgICAgICAgcmV0dXJuIChCWVRFKXBEZXZpY2UtPmJ5QkJUeXBlOworICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIpcERldmljZS0+YnlCQlR5cGU7CiAgICAgfQogICAgIGVsc2UgaWYgKENBUkRiSXNPRkRNaW5CYXNpY1JhdGUoKHZvaWQgKilwRGV2aWNlKSkgewogICAgICAgICByZXR1cm4gUEtfVFlQRV8xMUdBOwpAQCAtMjg3Myw3ICsxOTk5LDcgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBDQVJEdlNldExvb3BiYWNrTW9kZSAoRFdPUkRfUFRSIGR3SW9CYXNlLCBXT1JEIHdMb29wYmFja01vZGUpCit2b2lkIENBUkR2U2V0TG9vcGJhY2tNb2RlICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBzaG9ydCB3TG9vcGJhY2tNb2RlKQogewogICAgIHN3aXRjaCh3TG9vcGJhY2tNb2RlKSB7CiAgICAgY2FzZSBDQVJEX0xCX05PTkU6CkBAIC0yODgxLDcgKzIwMDcsNyBAQAogICAgIGNhc2UgQ0FSRF9MQl9QSFk6CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVChGQUxTRSk7CisgICAgICAgIEFTU0VSVChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAvLyBzZXQgTUFDIGxvb3BiYWNrCkBAIC0yOTAyLDE1ICsyMDI4LDE1IEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLUJPT0wgQ0FSRGJTb2Z0d2FyZVJlc2V0ICh2b2lkICpwRGV2aWNlSGFuZGxlcikKK2Jvb2wgQ0FSRGJTb2Z0d2FyZVJlc2V0ICh2b2lkICpwRGV2aWNlSGFuZGxlcikKIHsKICAgICBQU0RldmljZSBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKIAogICAgIC8vIHJlc2V0IE1BQwogICAgIGlmICghTUFDYlNhZmVTb2Z0d2FyZVJlc2V0KHBEZXZpY2UtPlBvcnRPZmZzZXQpKQotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBUUlVFOworICAgIHJldHVybiB0cnVlOwogfQogCiAKQEAgLTI5MjksMTYgKzIwNTUsMTYgQEAKICAqIFJldHVybiBWYWx1ZTogVFNGIE9mZnNldCB2YWx1ZQogICoKICAqLwotUVdPUkQgQ0FSRHFHZXRUU0ZPZmZzZXQgKEJZVEUgYnlSeFJhdGUsIFFXT1JEIHF3VFNGMSwgUVdPUkQgcXdUU0YyKQorUVdPUkQgQ0FSRHFHZXRUU0ZPZmZzZXQgKHVuc2lnbmVkIGNoYXIgYnlSeFJhdGUsIFFXT1JEIHF3VFNGMSwgUVdPUkQgcXdUU0YyKQogewogICAgIFFXT1JEICAgcXdUU0ZPZmZzZXQ7Ci0gICAgV09SRCAgICB3UnhCY25UU0ZPZmZzdD0gMDs7CisgICAgdW5zaWduZWQgc2hvcnQgd1J4QmNuVFNGT2Zmc3Q9IDA7OwogCiAgICAgSElEV09SRChxd1RTRk9mZnNldCkgPSAwOwogICAgIExPRFdPUkQocXdUU0ZPZmZzZXQpID0gMDsKICAgICB3UnhCY25UU0ZPZmZzdCA9IGN3UlhCQ05UU0ZPZmZbYnlSeFJhdGUlTUFYX1JBVEVdOwotICAgIChxd1RTRjIpLnUuZHdMb3dEd29yZCArPSAoRFdPUkQpKHdSeEJjblRTRk9mZnN0KTsKLSAgICBpZiAoKHF3VFNGMikudS5kd0xvd0R3b3JkIDwgKERXT1JEKSh3UnhCY25UU0ZPZmZzdCkpIHsKKyAgICAocXdUU0YyKS51LmR3TG93RHdvcmQgKz0gKHVuc2lnbmVkIGxvbmcpKHdSeEJjblRTRk9mZnN0KTsKKyAgICBpZiAoKHF3VFNGMikudS5kd0xvd0R3b3JkIDwgKHVuc2lnbmVkIGxvbmcpKHdSeEJjblRTRk9mZnN0KSkgewogICAgICAgICAocXdUU0YyKS51LmR3SGlnaER3b3JkKys7CiAgICAgfQogICAgIExPRFdPUkQocXdUU0ZPZmZzZXQpID0gTE9EV09SRChxd1RTRjEpIC0gTE9EV09SRChxd1RTRjIpOwpAQCAtMjk2MywxMyArMjA4OSwxMyBAQAogICogIE91dDoKICAqICAgICAgcXdDdXJyVFNGICAgICAgIC0gQ3VycmVudCBUU0YgY291bnRlcgogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZXNzOyBvdGhlcndpc2UgRkFMU0UKKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZXNzOyBvdGhlcndpc2UgZmFsc2UKICAqCiAgKi8KLUJPT0wgQ0FSRGJHZXRDdXJyZW50VFNGIChEV09SRF9QVFIgZHdJb0Jhc2UsIFBRV09SRCBwcXdDdXJyVFNGKQorYm9vbCBDQVJEYkdldEN1cnJlbnRUU0YgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIFBRV09SRCBwcXdDdXJyVFNGKQogewotICAgIFdPUkQgICAgd3c7Ci0gICAgQllURSAgICBieURhdGE7CisgICAgdW5zaWduZWQgc2hvcnQgd3c7CisgICAgdW5zaWduZWQgY2hhciBieURhdGE7CiAKICAgICBNQUN2UmVnQml0c09uKGR3SW9CYXNlLCBNQUNfUkVHX1RGVENUTCwgVEZUQ1RMX1RTRkNOVFJSRCk7CiAgICAgZm9yICh3dyA9IDA7IHd3IDwgV19NQVhfVElNRU9VVDsgd3crKykgewpAQCAtMjk3OCwxMSArMjEwNCwxMSBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmICh3dyA9PSBXX01BWF9USU1FT1VUKQotICAgICAgICByZXR1cm4oRkFMU0UpOworICAgICAgICByZXR1cm4oZmFsc2UpOwogICAgIFZOU3ZJblBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19UU0ZDTlRSLCAmTE9EV09SRCgqcHF3Q3VyclRTRikpOwogICAgIFZOU3ZJblBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19UU0ZDTlRSICsgNCwgJkhJRFdPUkQoKnBxd0N1cnJUU0YpKTsKIAotICAgIHJldHVybihUUlVFKTsKKyAgICByZXR1cm4odHJ1ZSk7CiB9CiAKIApAQCAtMzAwMCwxMiArMjEyNiwxMiBAQAogICogUmV0dXJuIFZhbHVlOiBUU0YgdmFsdWUgb2YgbmV4dCBCZWFjb24KICAqCiAgKi8KLVFXT1JEIENBUkRxR2V0TmV4dFRCVFQgKFFXT1JEIHF3VFNGLCBXT1JEIHdCZWFjb25JbnRlcnZhbCkKK1FXT1JEIENBUkRxR2V0TmV4dFRCVFQgKFFXT1JEIHF3VFNGLCB1bnNpZ25lZCBzaG9ydCB3QmVhY29uSW50ZXJ2YWwpCiB7CiAKLSAgICBVSU5UICAgIHVMb3dOZXh0VEJUVDsKLSAgICBVSU5UICAgIHVIaWdoUmVtYWluLCB1TG93UmVtYWluOwotICAgIFVJTlQgICAgdUJlYWNvbkludGVydmFsOworICAgIHVuc2lnbmVkIGludCB1TG93TmV4dFRCVFQ7CisgICAgdW5zaWduZWQgaW50IHVIaWdoUmVtYWluLCB1TG93UmVtYWluOworICAgIHVuc2lnbmVkIGludCB1QmVhY29uSW50ZXJ2YWw7CiAKICAgICB1QmVhY29uSW50ZXJ2YWwgPSB3QmVhY29uSW50ZXJ2YWwgKiAxMDI0OwogICAgIC8vIE5leHQgVEJUVCA9ICgobG9jYWxfY3VycmVudF9UU0YgLyBiZWFjb25faW50ZXJ2YWwpICsgMSApICogYmVhY29uX2ludGVydmFsCkBAIC0zMDQ0LDcgKzIxNzAsNyBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIENBUkR2U2V0Rmlyc3ROZXh0VEJUVCAoRFdPUkRfUFRSIGR3SW9CYXNlLCBXT1JEIHdCZWFjb25JbnRlcnZhbCkKK3ZvaWQgQ0FSRHZTZXRGaXJzdE5leHRUQlRUICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBzaG9ydCB3QmVhY29uSW50ZXJ2YWwpCiB7CiAKICAgICBRV09SRCAgIHF3TmV4dFRCVFQ7CkBAIC0zMDc3LDcgKzIyMDMsNyBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIENBUkR2VXBkYXRlTmV4dFRCVFQgKERXT1JEX1BUUiBkd0lvQmFzZSwgUVdPUkQgcXdUU0YsIFdPUkQgd0JlYWNvbkludGVydmFsKQordm9pZCBDQVJEdlVwZGF0ZU5leHRUQlRUICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCBRV09SRCBxd1RTRiwgdW5zaWduZWQgc2hvcnQgd0JlYWNvbkludGVydmFsKQogewogCiAgICAgcXdUU0YgPSBDQVJEcUdldE5leHRUQlRUKHF3VFNGLCB3QmVhY29uSW50ZXJ2YWwpOwpAQCAtMzA4NSw3ICsyMjExLDggQEAKICAgICBWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX05FWFRUQlRULCBMT0RXT1JEKHF3VFNGKSk7CiAgICAgVk5Tdk91dFBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19ORVhUVEJUVCArIDQsIEhJRFdPUkQocXdUU0YpKTsKICAgICBNQUN2UmVnQml0c09uKGR3SW9CYXNlLCBNQUNfUkVHX1RGVENUTCwgVEZUQ1RMX1RCVFRTWU5DRU4pOwotICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iQ2FyZDpVcGRhdGUgTmV4dCBUQlRUWyU4eGg6JTh4aF0gXG4iLChVSU5UKUhJRFdPUkQocXdUU0YpLCAoVUlOVClMT0RXT1JEKHF3VFNGKSk7CisgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJDYXJkOlVwZGF0ZSBOZXh0IFRCVFRbJTh4aDolOHhoXSBcbiIsCisJCSAgICAodW5zaWduZWQgaW50KSBISURXT1JEKHF3VFNGKSwgKHVuc2lnbmVkIGludCkgTE9EV09SRChxd1RTRikpOwogCiAgICAgcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9jYXJkLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NhcmQuaAppbmRleCA3NjMxMzQ2Li5lMDgzNmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NhcmQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NhcmQuaApAQCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBfX0NBUkRfSF9fCiAKICNpbmNsdWRlICJ0dHlwZS5oIgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvLwpAQCAtODYsNTcgKzg3LDU1IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLUJPT0wgQ2hhbm5lbFZhbGlkKFVJTlQgQ291bnRyeUNvZGUsIFVJTlQgQ2hhbm5lbEluZGV4KTsKIHZvaWQgQ0FSRHZTZXRSU1BJTkYodm9pZCAqcERldmljZUhhbmRsZXIsIENBUkRfUEhZX1RZUEUgZVBIWVR5cGUpOwogdm9pZCB2VXBkYXRlSUZTKHZvaWQgKnBEZXZpY2VIYW5kbGVyKTsKIHZvaWQgQ0FSRHZVcGRhdGVCYXNpY1RvcFJhdGUodm9pZCAqcERldmljZUhhbmRsZXIpOwotQk9PTCBDQVJEYkFkZEJhc2ljUmF0ZSh2b2lkICpwRGV2aWNlSGFuZGxlciwgV09SRCB3UmF0ZUlkeCk7Ci1CT09MIENBUkRiSXNPRkRNaW5CYXNpY1JhdGUodm9pZCAqcERldmljZUhhbmRsZXIpOwotdm9pZCBDQVJEdlNldExvb3BiYWNrTW9kZShEV09SRF9QVFIgZHdJb0Jhc2UsIFdPUkQgd0xvb3BiYWNrTW9kZSk7Ci1CT09MIENBUkRiU29mdHdhcmVSZXNldCh2b2lkICpwRGV2aWNlSGFuZGxlcik7Ci12b2lkIENBUkR2U2V0Rmlyc3ROZXh0VEJUVChEV09SRF9QVFIgZHdJb0Jhc2UsIFdPUkQgd0JlYWNvbkludGVydmFsKTsKLXZvaWQgQ0FSRHZVcGRhdGVOZXh0VEJUVChEV09SRF9QVFIgZHdJb0Jhc2UsIFFXT1JEIHF3VFNGLCBXT1JEIHdCZWFjb25JbnRlcnZhbCk7Ci1CT09MIENBUkRiR2V0Q3VycmVudFRTRihEV09SRF9QVFIgZHdJb0Jhc2UsIFBRV09SRCBwcXdDdXJyVFNGKTsKLVFXT1JEIENBUkRxR2V0TmV4dFRCVFQoUVdPUkQgcXdUU0YsIFdPUkQgd0JlYWNvbkludGVydmFsKTsKLVFXT1JEIENBUkRxR2V0VFNGT2Zmc2V0KEJZVEUgYnlSeFJhdGUsIFFXT1JEIHF3VFNGMSwgUVdPUkQgcXdUU0YyKTsKLUJPT0wgQ0FSRGJTZXRUeFBvd2VyKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCBVTE9ORyB1bFR4UG93ZXIpOwotQllURSBDQVJEYnlHZXRQa3RUeXBlKHZvaWQgKnBEZXZpY2VIYW5kbGVyKTsKK2Jvb2wgQ0FSRGJBZGRCYXNpY1JhdGUodm9pZCAqcERldmljZUhhbmRsZXIsIHVuc2lnbmVkIHNob3J0IHdSYXRlSWR4KTsKK2Jvb2wgQ0FSRGJJc09GRE1pbkJhc2ljUmF0ZSh2b2lkICpwRGV2aWNlSGFuZGxlcik7Cit2b2lkIENBUkR2U2V0TG9vcGJhY2tNb2RlKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIHNob3J0IHdMb29wYmFja01vZGUpOworYm9vbCBDQVJEYlNvZnR3YXJlUmVzZXQodm9pZCAqcERldmljZUhhbmRsZXIpOwordm9pZCBDQVJEdlNldEZpcnN0TmV4dFRCVFQodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgc2hvcnQgd0JlYWNvbkludGVydmFsKTsKK3ZvaWQgQ0FSRHZVcGRhdGVOZXh0VEJUVCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCBRV09SRCBxd1RTRiwgdW5zaWduZWQgc2hvcnQgd0JlYWNvbkludGVydmFsKTsKK2Jvb2wgQ0FSRGJHZXRDdXJyZW50VFNGKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIFBRV09SRCBwcXdDdXJyVFNGKTsKK1FXT1JEIENBUkRxR2V0TmV4dFRCVFQoUVdPUkQgcXdUU0YsIHVuc2lnbmVkIHNob3J0IHdCZWFjb25JbnRlcnZhbCk7CitRV09SRCBDQVJEcUdldFRTRk9mZnNldCh1bnNpZ25lZCBjaGFyIGJ5UnhSYXRlLCBRV09SRCBxd1RTRjEsIFFXT1JEIHF3VFNGMik7Citib29sIENBUkRiU2V0VHhQb3dlcih2b2lkICpwRGV2aWNlSGFuZGxlciwgdW5zaWduZWQgbG9uZyB1bFR4UG93ZXIpOwordW5zaWduZWQgY2hhciBDQVJEYnlHZXRQa3RUeXBlKHZvaWQgKnBEZXZpY2VIYW5kbGVyKTsKIHZvaWQgQ0FSRHZTYWZlUmVzZXRUeCh2b2lkICpwRGV2aWNlSGFuZGxlcik7CiB2b2lkIENBUkR2U2FmZVJlc2V0Ungodm9pZCAqcERldmljZUhhbmRsZXIpOwogCiAvL3h4eAotQk9PTCBDQVJEYlJhZGlvUG93ZXJPZmYodm9pZCAqcERldmljZUhhbmRsZXIpOwotQk9PTCBDQVJEYlJhZGlvUG93ZXJPbih2b2lkICpwRGV2aWNlSGFuZGxlcik7Ci1CT09MIENBUkRiU2V0Q2hhbm5lbCh2b2lkICpwRGV2aWNlSGFuZGxlciwgVUlOVCB1Q29ubmVjdGlvbkNoYW5uZWwpOwotLy9CT09MIENBUkRiU2VuZFBhY2tldCh2b2lkICpwRGV2aWNlSGFuZGxlciwgdm9pZCAqcFBhY2tldCwgQ0FSRF9QS1RfVFlQRSBlUGt0VHlwZSwgVUlOVCB1TGVuZ3RoKTsKLUJPT0wgQ0FSRGJJc1Nob3J0UHJlYW1ibGUodm9pZCAqcERldmljZUhhbmRsZXIpOwotQk9PTCBDQVJEYklzU2hvclNsb3RUaW1lKHZvaWQgKnBEZXZpY2VIYW5kbGVyKTsKLUJPT0wgQ0FSRGJTZXRQaHlQYXJhbWV0ZXIodm9pZCAqcERldmljZUhhbmRsZXIsIENBUkRfUEhZX1RZUEUgZVBIWVR5cGUsIFdPUkQgd0NhcEluZm8sIEJZVEUgYnlFUlBGaWVsZCwgdm9pZCAqcHZTdXBwb3J0UmF0ZUlFcywgdm9pZCAqcHZFeHRTdXBwb3J0UmF0ZUlFcyk7Ci1CT09MIENBUkRiVXBkYXRlVFNGKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCBCWVRFIGJ5UnhSYXRlLCBRV09SRCBxd0JTU1RpbWVzdGFtcCwgUVdPUkQgcXdMb2NhbFRTRik7Ci1CT09MIENBUkRiU3RvcFR4UGFja2V0KHZvaWQgKnBEZXZpY2VIYW5kbGVyLCBDQVJEX1BLVF9UWVBFIGVQa3RUeXBlKTsKLUJPT0wgQ0FSRGJTdGFydFR4UGFja2V0KHZvaWQgKnBEZXZpY2VIYW5kbGVyLCBDQVJEX1BLVF9UWVBFIGVQa3RUeXBlKTsKLUJPT0wgQ0FSRGJTZXRCZWFjb25QZXJpb2Qodm9pZCAqcERldmljZUhhbmRsZXIsIFdPUkQgd0JlYWNvbkludGVydmFsKTsKLUJPT0wgQ0FSRGJTZXRCU1NJRCh2b2lkICpwRGV2aWNlSGFuZGxlciwgUEJZVEUgcGJ5QlNTSUQsIENBUkRfT1BfTU9ERSBlT1BNb2RlKTsKK2Jvb2wgQ0FSRGJSYWRpb1Bvd2VyT2ZmKHZvaWQgKnBEZXZpY2VIYW5kbGVyKTsKK2Jvb2wgQ0FSRGJSYWRpb1Bvd2VyT24odm9pZCAqcERldmljZUhhbmRsZXIpOworLy9ib29sIENBUkRiU2VuZFBhY2tldCh2b2lkICpwRGV2aWNlSGFuZGxlciwgdm9pZCAqcFBhY2tldCwgQ0FSRF9QS1RfVFlQRSBlUGt0VHlwZSwgdW5zaWduZWQgaW50IHVMZW5ndGgpOworYm9vbCBDQVJEYklzU2hvcnRQcmVhbWJsZSh2b2lkICpwRGV2aWNlSGFuZGxlcik7Citib29sIENBUkRiSXNTaG9yU2xvdFRpbWUodm9pZCAqcERldmljZUhhbmRsZXIpOworYm9vbCBDQVJEYlNldFBoeVBhcmFtZXRlcih2b2lkICpwRGV2aWNlSGFuZGxlciwgQ0FSRF9QSFlfVFlQRSBlUEhZVHlwZSwgdW5zaWduZWQgc2hvcnQgd0NhcEluZm8sIHVuc2lnbmVkIGNoYXIgYnlFUlBGaWVsZCwgdm9pZCAqcHZTdXBwb3J0UmF0ZUlFcywgdm9pZCAqcHZFeHRTdXBwb3J0UmF0ZUlFcyk7Citib29sIENBUkRiVXBkYXRlVFNGKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCB1bnNpZ25lZCBjaGFyIGJ5UnhSYXRlLCBRV09SRCBxd0JTU1RpbWVzdGFtcCwgUVdPUkQgcXdMb2NhbFRTRik7Citib29sIENBUkRiU3RvcFR4UGFja2V0KHZvaWQgKnBEZXZpY2VIYW5kbGVyLCBDQVJEX1BLVF9UWVBFIGVQa3RUeXBlKTsKK2Jvb2wgQ0FSRGJTdGFydFR4UGFja2V0KHZvaWQgKnBEZXZpY2VIYW5kbGVyLCBDQVJEX1BLVF9UWVBFIGVQa3RUeXBlKTsKK2Jvb2wgQ0FSRGJTZXRCZWFjb25QZXJpb2Qodm9pZCAqcERldmljZUhhbmRsZXIsIHVuc2lnbmVkIHNob3J0IHdCZWFjb25JbnRlcnZhbCk7Citib29sIENBUkRiU2V0QlNTSUQodm9pZCAqcERldmljZUhhbmRsZXIsIHVuc2lnbmVkIGNoYXIgKnBieUJTU0lELCBDQVJEX09QX01PREUgZU9QTW9kZSk7CiAKLUJPT0wKK2Jvb2wKIENBUkRiUG93ZXJEb3duKAogICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyCiAgICAgKTsKIAotQk9PTCBDQVJEYlNldFR4RGF0YVJhdGUoCitib29sIENBUkRiU2V0VHhEYXRhUmF0ZSgKICAgICB2b2lkICpwRGV2aWNlSGFuZGxlciwKLSAgICBXT1JEICAgIHdEYXRhUmF0ZQorICAgIHVuc2lnbmVkIHNob3J0IHdEYXRhUmF0ZQogICAgICk7CiAKIAotQk9PTCBDQVJEYlJlbW92ZUtleSAodm9pZCAqcERldmljZUhhbmRsZXIsIFBCWVRFIHBieUJTU0lEKTsKK2Jvb2wgQ0FSRGJSZW1vdmVLZXkgKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCB1bnNpZ25lZCBjaGFyICpwYnlCU1NJRCk7CiAKLUJPT0wKK2Jvb2wKIENBUkRiQWRkX1BNS0lEX0NhbmRpZGF0ZSAoCiAgICAgdm9pZCAqcERldmljZUhhbmRsZXIsCi0gICAgUEJZVEUgICAgICAgICAgICBwYnlCU1NJRCwKLSAgICBCT09MICAgICAgICAgICAgIGJSU05DYXBFeGlzdCwKLSAgICBXT1JEICAgICAgICAgICAgIHdSU05DYXAKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCU1NJRCwKKyAgICBib29sIGJSU05DYXBFeGlzdCwKKyAgICB1bnNpZ25lZCBzaG9ydCB3UlNOQ2FwCiAgICAgKTsKIAogdm9pZCAqCkBAIC0xNDQsMTEyICsxNDMsNTUgQEAKICAgICB2b2lkICpwRGV2aWNlSGFuZGxlcgogICAgICk7CiAKLQotdm9pZCBDQVJEdkluaXRDaGFubmVsVGFibGUodm9pZCAqcERldmljZUhhbmRsZXIpOwotQllURSBDQVJEYnlHZXRDaGFubmVsTWFwcGluZyh2b2lkICpwRGV2aWNlSGFuZGxlciwgQllURSBieUNoYW5uZWxOdW1iZXIsIENBUkRfUEhZX1RZUEUgZVBoeVR5cGUpOwotCi1CT09MCitib29sCiBDQVJEYlN0YXJ0TWVhc3VyZSAoCiAgICAgdm9pZCAqcERldmljZUhhbmRsZXIsCiAgICAgdm9pZCAqcHZNZWFzdXJlRUlEcywKLSAgICBVSU5UICAgICAgICAgICAgIHVOdW1PZk1lYXN1cmVFSURzCisgICAgdW5zaWduZWQgaW50IHVOdW1PZk1lYXN1cmVFSURzCiAgICAgKTsKIAotQk9PTAorYm9vbAogQ0FSRGJDaGFubmVsU3dpdGNoICgKICAgICB2b2lkICpwRGV2aWNlSGFuZGxlciwKLSAgICBCWVRFICAgICAgICAgICAgIGJ5TW9kZSwKLSAgICBCWVRFICAgICAgICAgICAgIGJ5TmV3Q2hhbm5lbCwKLSAgICBCWVRFICAgICAgICAgICAgIGJ5Q291bnQKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TW9kZSwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TmV3Q2hhbm5lbCwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q291bnQKICAgICApOwogCi1CT09MCitib29sCiBDQVJEYlNldFF1aWV0ICgKICAgICB2b2lkICpwRGV2aWNlSGFuZGxlciwKLSAgICBCT09MICAgICAgICAgICAgIGJSZXNldFF1aWV0LAotICAgIEJZVEUgICAgICAgICAgICAgYnlRdWlldENvdW50LAotICAgIEJZVEUgICAgICAgICAgICAgYnlRdWlldFBlcmlvZCwKLSAgICBXT1JEICAgICAgICAgICAgIHdRdWlldER1cmF0aW9uLAotICAgIFdPUkQgICAgICAgICAgICAgd1F1aWV0T2Zmc2V0CisgICAgYm9vbCBiUmVzZXRRdWlldCwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UXVpZXRDb3VudCwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UXVpZXRQZXJpb2QsCisgICAgdW5zaWduZWQgc2hvcnQgd1F1aWV0RHVyYXRpb24sCisgICAgdW5zaWduZWQgc2hvcnQgd1F1aWV0T2Zmc2V0CiAgICAgKTsKIAotQk9PTAorYm9vbAogQ0FSRGJTdGFydFF1aWV0ICgKICAgICB2b2lkICpwRGV2aWNlSGFuZGxlcgogICAgICk7CiAKIHZvaWQKLUNBUkR2U2V0Q291bnRyeUluZm8gKAotICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyLAotICAgIENBUkRfUEhZX1RZUEUgICAgZVBIWVR5cGUsCi0gICAgdm9pZCAqcElFCi0gICAgKTsKLQotdm9pZAogQ0FSRHZTZXRQb3dlckNvbnN0cmFpbnQgKAogICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyLAotICAgIEJZVEUgICAgICAgICAgICAgYnlDaGFubmVsLAotICAgIEk4ICAgICAgICAgICAgICAgYnlQb3dlcgorICAgIHVuc2lnbmVkIGNoYXIgYnlDaGFubmVsLAorICAgIGNoYXIgYnlQb3dlcgogICAgICk7CiAKIHZvaWQKIENBUkR2R2V0UG93ZXJDYXBhYmlsaXR5ICgKICAgICB2b2lkICpwRGV2aWNlSGFuZGxlciwKLSAgICBQQllURSAgICAgICAgICAgcGJ5TWluUG93ZXIsCi0gICAgUEJZVEUgICAgICAgICAgIHBieU1heFBvd2VyCisgICAgdW5zaWduZWQgY2hhciAqcGJ5TWluUG93ZXIsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5TWF4UG93ZXIKICAgICApOwogCi1CWVRFCi1DQVJEYnlTZXRTdXBwb3J0Q2hhbm5lbHMgKAotICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyLAotICAgIFBCWVRFICAgICAgICBwYnlJRXMKLSAgICApOwotCi1JOAorY2hhcgogQ0FSRGJ5R2V0VHJhbnNtaXRQb3dlciAoCiAgICAgdm9pZCAqcERldmljZUhhbmRsZXIKICAgICApOwogCi1CT09MCi1DQVJEYkNoYW5uZWxHZXRMaXN0ICgKLSAgICAgVUlOVCAgICAgICB1Q291bnRyeUNvZGVJZHgsCi0gICAgUEJZVEUgICAgICBwYnlDaGFubmVsVGFibGUKLSAgICApOwotCi12b2lkCi1DQVJEdlNldENvdW50cnlJRSgKLSAgICB2b2lkICpwRGV2aWNlSGFuZGxlciwKLSAgICB2b2lkICpwSUUKLSAgICApOwotCi1CT09MCi1DQVJEYkdldENoYW5uZWxNYXBJbmZvKAotICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyLAotICAgIFVJTlQgICAgICAgICB1Q2hhbm5lbEluZGV4LAotICAgIFBCWVRFICAgICAgIHBieUNoYW5uZWxOdW1iZXIsCi0gICAgUEJZVEUgICAgICAgcGJ5TWFwCi0gICAgKTsKLQotdm9pZAotQ0FSRHZTZXRDaGFubmVsTWFwSW5mbygKLSAgICB2b2lkICpwRGV2aWNlSGFuZGxlciwKLSAgICBVSU5UICAgICAgICAgdUNoYW5uZWxJbmRleCwKLSAgICBCWVRFICAgICAgICAgYnlNYXAKLSAgICApOwotCi12b2lkCi1DQVJEdkNsZWFyQ2hhbm5lbE1hcEluZm8oCi0gICAgdm9pZCAqcERldmljZUhhbmRsZXIKLSAgICApOwotCi1CWVRFCi1DQVJEYnlBdXRvQ2hhbm5lbFNlbGVjdCgKLSAgICB2b2lkICpwRGV2aWNlSGFuZGxlciwKLSAgICBDQVJEX1BIWV9UWVBFICAgZVBIWVR5cGUKLSAgICApOwotCi1CWVRFIENBUkRieUdldENoYW5uZWxOdW1iZXIodm9pZCAqcERldmljZUhhbmRsZXIsIEJZVEUgYnlDaGFubmVsSW5kZXgpOwotCiAjZW5kaWYgLy8gX19DQVJEX0hfXwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvY2hhbm5lbC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9jaGFubmVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdjMTU2YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvY2hhbm5lbC5jCkBAIC0wLDAgKzEsODM1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTk2LCAyMDAzIFZJQSBOZXR3b3JraW5nIFRlY2hub2xvZ2llcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqIEZpbGU6IGNoYW5uZWwuYworICoKKyAqLworCisjaW5jbHVkZSAiYmFzZWJhbmQuaCIKKyNpbmNsdWRlICJjb3VudHJ5LmgiCisjaW5jbHVkZSAiY2hhbm5lbC5oIgorI2luY2x1ZGUgImRldmljZS5oIgorI2luY2x1ZGUgInJmLmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgRGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgQ0FSRF9NQVhfQ0hBTk5FTF9UQkwgICAgNTYKKworLy9zdGF0aWMgaW50IG1zZ2xldmVsID0gTVNHX0xFVkVMX0RFQlVHOworc3RhdGljIGludCBtc2dsZXZlbCA9IE1TR19MRVZFTF9JTkZPOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIFZhcmlhYmxlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgU0NoYW5uZWxUYmxFbGVtZW50IHNDaGFubmVsVGJsW0NBUkRfTUFYX0NIQU5ORUxfVEJMICsgMV0gPQoreworICB7MCwgICAwLCAgICBmYWxzZSwgICAgMH0sCisgIHsxLCAgIDI0MTIsIHRydWUsICAgICAwfSwKKyAgezIsICAgMjQxNywgdHJ1ZSwgICAgIDB9LAorICB7MywgICAyNDIyLCB0cnVlLCAgICAgMH0sCisgIHs0LCAgIDI0MjcsIHRydWUsICAgICAwfSwKKyAgezUsICAgMjQzMiwgdHJ1ZSwgICAgIDB9LAorICB7NiwgICAyNDM3LCB0cnVlLCAgICAgMH0sCisgIHs3LCAgIDI0NDIsIHRydWUsICAgICAwfSwKKyAgezgsICAgMjQ0NywgdHJ1ZSwgICAgIDB9LAorICB7OSwgICAyNDUyLCB0cnVlLCAgICAgMH0sCisgIHsxMCwgIDI0NTcsIHRydWUsICAgICAwfSwKKyAgezExLCAgMjQ2MiwgdHJ1ZSwgICAgIDB9LAorICB7MTIsICAyNDY3LCB0cnVlLCAgICAgMH0sCisgIHsxMywgIDI0NzIsIHRydWUsICAgICAwfSwKKyAgezE0LCAgMjQ4NCwgdHJ1ZSwgICAgIDB9LAorICB7MTgzLCA0OTE1LCB0cnVlLCAgICAgMH0sCisgIHsxODQsIDQ5MjAsIHRydWUsICAgICAwfSwKKyAgezE4NSwgNDkyNSwgdHJ1ZSwgICAgIDB9LAorICB7MTg3LCA0OTM1LCB0cnVlLCAgICAgMH0sCisgIHsxODgsIDQ5NDAsIHRydWUsICAgICAwfSwKKyAgezE4OSwgNDk0NSwgdHJ1ZSwgICAgIDB9LAorICB7MTkyLCA0OTYwLCB0cnVlLCAgICAgMH0sCisgIHsxOTYsIDQ5ODAsIHRydWUsICAgICAwfSwKKyAgezcsICAgNTAzNSwgdHJ1ZSwgICAgIDB9LAorICB7OCwgICA1MDQwLCB0cnVlLCAgICAgMH0sCisgIHs5LCAgIDUwNDUsIHRydWUsICAgICAwfSwKKyAgezExLCAgNTA1NSwgdHJ1ZSwgICAgIDB9LAorICB7MTIsICA1MDYwLCB0cnVlLCAgICAgMH0sCisgIHsxNiwgIDUwODAsIHRydWUsICAgICAwfSwKKyAgezM0LCAgNTE3MCwgdHJ1ZSwgICAgIDB9LAorICB7MzYsICA1MTgwLCB0cnVlLCAgICAgMH0sCisgIHszOCwgIDUxOTAsIHRydWUsICAgICAwfSwKKyAgezQwLCAgNTIwMCwgdHJ1ZSwgICAgIDB9LAorICB7NDIsICA1MjEwLCB0cnVlLCAgICAgMH0sCisgIHs0NCwgIDUyMjAsIHRydWUsICAgICAwfSwKKyAgezQ2LCAgNTIzMCwgdHJ1ZSwgICAgIDB9LAorICB7NDgsICA1MjQwLCB0cnVlLCAgICAgMH0sCisgIHs1MiwgIDUyNjAsIHRydWUsICAgICAwfSwKKyAgezU2LCAgNTI4MCwgdHJ1ZSwgICAgIDB9LAorICB7NjAsICA1MzAwLCB0cnVlLCAgICAgMH0sCisgIHs2NCwgIDUzMjAsIHRydWUsICAgICAwfSwKKyAgezEwMCwgNTUwMCwgdHJ1ZSwgICAgIDB9LAorICB7MTA0LCA1NTIwLCB0cnVlLCAgICAgMH0sCisgIHsxMDgsIDU1NDAsIHRydWUsICAgICAwfSwKKyAgezExMiwgNTU2MCwgdHJ1ZSwgICAgIDB9LAorICB7MTE2LCA1NTgwLCB0cnVlLCAgICAgMH0sCisgIHsxMjAsIDU2MDAsIHRydWUsICAgICAwfSwKKyAgezEyNCwgNTYyMCwgdHJ1ZSwgICAgIDB9LAorICB7MTI4LCA1NjQwLCB0cnVlLCAgICAgMH0sCisgIHsxMzIsIDU2NjAsIHRydWUsICAgICAwfSwKKyAgezEzNiwgNTY4MCwgdHJ1ZSwgICAgIDB9LAorICB7MTQwLCA1NzAwLCB0cnVlLCAgICAgMH0sCisgIHsxNDksIDU3NDUsIHRydWUsICAgICAwfSwKKyAgezE1MywgNTc2NSwgdHJ1ZSwgICAgIDB9LAorICB7MTU3LCA1Nzg1LCB0cnVlLCAgICAgMH0sCisgIHsxNjEsIDU4MDUsIHRydWUsICAgICAwfSwKKyAgezE2NSwgNTgyNSwgdHJ1ZSwgICAgIDB9Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGUgUmFkYXIgcmVndWxhdGlvbiBydWxlcyBmb3IgZWFjaCBjb3VudHJ5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdAoreworCXVuc2lnbmVkIGNoYXIgYnlDaGFubmVsQ291bnRyeUNvZGU7ICAgICAgICAgICAgIC8qIFRoZSBjb3VudHJ5IGNvZGUgICAgICAgICAqLworCWNoYXIgY2hDb3VudHJ5Q29kZVsyXTsKKwl1bnNpZ25lZCBjaGFyIGJDaGFubmVsSWR4TGlzdFtDQl9NQVhfQ0hBTk5FTF07ICAvKiBBdmFpbGFibGUgY2hhbm5lbHMgSW5kZXggKi8KKwl1bnNpZ25lZCBjaGFyIGJ5UG93ZXJbQ0JfTUFYX0NIQU5ORUxdOworfSBDaGFubmVsUnVsZVRhYltdID0KK3sKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgdGFibGUgaXMgYmFzZWQgb24gQXRoZXJvIGRyaXZlciBydWxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvdW50cnkgICAgICAgICAgQXZhaWxhYmxlIGNoYW5uZWxzLCBlbmRlZCB3aXRoIDAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgMiAgIDMgICA0ICAgNSAgIDYgICA3ICAgOCAgIDkgIDEwICAxMSAgMTIgIDEzICAxNCAgMTUgIDE2ICAxNyAgMTggIDE5ICAyMCAgMjEgIDIyICAyMyAgMjQgIDI1ICAyNiAgMjcgIDI4ICAyOSAgMzAgIDMxICAzMiAgMzMgIDM0ICAzNSAgMzYgIDM3ICAzOCAgMzkgIDQwICA0MSAgNDIgIDQzICA0NCAgNDUgIDQ2ICA0NyAgNDggIDQ5ICA1MCAgNTEgIDUyICA1MyAgNTQgIDU1ICA1NiAgKi8KK3tDQ09ERV9GQ0MsICAgICAgICAgICAgICAgICAgICAgeydVJywnUyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgIDAsIDE3LCAyMywgMjMsIDIzLCAyMywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgMzB9ICB9LAore0NDT0RFX1RFTEVDLCAgICAgICAgICAgICAgICAgICB7J0onLCdQJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMSwgIDAsICAwLCAgMSwgIDAsICAxLCAgMSwgIDAsICAxLCAgMCwgIDAsICAxLCAgMSwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsIDIzLCAgMCwgIDAsIDIzLCAgMCwgMjMsIDIzLCAgMCwgMjMsICAwLCAgMCwgMjMsIDIzLCAyMywgIDAsIDIzLCAgMCwgMjMsICAwLCAyMywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfRVRTSSwgICAgICAgICAgICAgICAgICAgIHsnRScsJ1UnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9SRVNWMywgICAgICAgICAgICAgICAgICAgeycgJywnICd9LCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX1JFU1Y0LCAgICAgICAgICAgICAgICAgICB7JyAnLCcgJ30sICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfUkVTVjUsICAgICAgICAgICAgICAgICAgIHsnICcsJyAnfSwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9SRVNWNiwgICAgICAgICAgICAgICAgICAgeycgJywnICd9LCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX1JFU1Y3LCAgICAgICAgICAgICAgICAgICB7JyAnLCcgJ30sICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfUkVTVjgsICAgICAgICAgICAgICAgICAgIHsnICcsJyAnfSwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9SRVNWOSwgICAgICAgICAgICAgICAgICAgeycgJywnICd9LCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX1JFU1ZhLCAgICAgICAgICAgICAgICAgICB7JyAnLCcgJ30sICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfUkVTVmIsICAgICAgICAgICAgICAgICAgIHsnICcsJyAnfSwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9SRVNWYywgICAgICAgICAgICAgICAgICAgeycgJywnICd9LCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX1JFU1ZkLCAgICAgICAgICAgICAgICAgICB7JyAnLCcgJ30sICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfUkVTVmUsICAgICAgICAgICAgICAgICAgIHsnICcsJyAnfSwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9BTExCQU5ELCAgICAgICAgICAgICAgICAgeycgJywnICd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0FMQkFOSUEsICAgICAgICAgICAgICAgICB7J0EnLCdMJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfQUxHRVJJQSwgICAgICAgICAgICAgICAgIHsnRCcsJ1onfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9BUkdFTlRJTkEsICAgICAgICAgICAgICAgeydBJywnUid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTcsIDE3LCAxNywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgIDB9ICB9LAore0NDT0RFX0FSTUVOSUEsICAgICAgICAgICAgICAgICB7J0EnLCdNJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTgsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfQVVTVFJBTElBLCAgICAgICAgICAgICAgIHsnQScsJ1UnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMywgIDAsIDIzLCAgMCwgMjMsICAwLCAyMywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKK3tDQ09ERV9BVVNUUklBLCAgICAgICAgICAgICAgICAgeydBJywnVCd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDE1LCAgMCwgMTUsICAwLCAxNSwgIDAsIDE1LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0FaRVJCQUlKQU4sICAgICAgICAgICAgICB7J0EnLCdaJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTgsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfQkFIUkFJTiwgICAgICAgICAgICAgICAgIHsnQicsJ0gnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9CRUxBUlVTLCAgICAgICAgICAgICAgICAgeydCJywnWSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0JFTEdJVU0sICAgICAgICAgICAgICAgICB7J0InLCdFJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTgsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfQkVMSVpFLCAgICAgICAgICAgICAgICAgIHsnQicsJ1onfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKK3tDQ09ERV9CT0xJVklBLCAgICAgICAgICAgICAgICAgeydCJywnTyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgMzB9ICB9LAore0NDT0RFX0JSQVpJTCwgICAgICAgICAgICAgICAgICB7J0InLCdSJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfQlJVTkVJX0RBUlVTU0FMQU0sICAgICAgIHsnQicsJ04nfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKK3tDQ09ERV9CVUxHQVJJQSwgICAgICAgICAgICAgICAgeydCJywnRyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIzLCAgMCwgMjMsICAwLCAyMywgIDAsIDIzLCAyMywgMjMsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0NBTkFEQSwgICAgICAgICAgICAgICAgICB7J0MnLCdBJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDF9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTcsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsIDIzLCAyMywgMjMsIDIzLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAzMH0gIH0sCit7Q0NPREVfQ0hJTEUsICAgICAgICAgICAgICAgICAgIHsnQycsJ0wnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTcsIDE3LCAxNywgMTcsIDE3fSAgfSwKK3tDQ09ERV9DSElOQSwgICAgICAgICAgICAgICAgICAgeydDJywnTid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgMzB9ICB9LAore0NDT0RFX0NPTE9NQklBLCAgICAgICAgICAgICAgICB7J0MnLCdPJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDF9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTcsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsIDIzLCAyMywgMjMsIDIzLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAzMH0gIH0sCit7Q0NPREVfQ09TVEFfUklDQSwgICAgICAgICAgICAgIHsnQycsJ1InfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9DUk9BVElBLCAgICAgICAgICAgICAgICAgeydIJywnUid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0NZUFJVUywgICAgICAgICAgICAgICAgICB7J0MnLCdZJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfQ1pFQ0gsICAgICAgICAgICAgICAgICAgIHsnQycsJ1onfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9ERU5NQVJLLCAgICAgICAgICAgICAgICAgeydEJywnSyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0RPTUlOSUNBTl9SRVBVQkxJQywgICAgICB7J0QnLCdPJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDF9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTcsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsIDIzLCAyMywgMjMsIDIzLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAzMH0gIH0sCit7Q0NPREVfRUNVQURPUiwgICAgICAgICAgICAgICAgIHsnRScsJ0MnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9FR1lQVCwgICAgICAgICAgICAgICAgICAgeydFJywnRyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0VMX1NBTFZBRE9SLCAgICAgICAgICAgICB7J1MnLCdWJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfRVNUT05JQSwgICAgICAgICAgICAgICAgIHsnRScsJ0UnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9GSU5MQU5ELCAgICAgICAgICAgICAgICAgeydGJywnSSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0ZSQU5DRSwgICAgICAgICAgICAgICAgICB7J0YnLCdSJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfR0VSTUFOWSwgICAgICAgICAgICAgICAgIHsnRCcsJ0UnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9HUkVFQ0UsICAgICAgICAgICAgICAgICAgeydHJywnUid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0dFT1JHSUEsICAgICAgICAgICAgICAgICB7J0cnLCdFJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTgsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfR1VBVEVNQUxBLCAgICAgICAgICAgICAgIHsnRycsJ1QnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKK3tDQ09ERV9IT05EVVJBUywgICAgICAgICAgICAgICAgeydIJywnTid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0hPTkdfS09ORywgICAgICAgICAgICAgICB7J0gnLCdLJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDF9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjMsICAwLCAyMywgIDAsIDIzLCAgMCwgMjMsIDIzLCAyMywgMjMsIDIzLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAzMH0gIH0sCit7Q0NPREVfSFVOR0FSWSwgICAgICAgICAgICAgICAgIHsnSCcsJ1UnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsICAwLCAxOCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9JQ0VMQU5ELCAgICAgICAgICAgICAgICAgeydJJywnUyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0lORElBLCAgICAgICAgICAgICAgICAgICB7J0knLCdOJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfSU5ET05FU0lBLCAgICAgICAgICAgICAgIHsnSScsJ0QnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9JUkFOLCAgICAgICAgICAgICAgICAgICAgeydJJywnUid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgMzB9ICB9LAore0NDT0RFX0lSRUxBTkQsICAgICAgICAgICAgICAgICB7J0knLCdFJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfSVRBTFksICAgICAgICAgICAgICAgICAgIHsnSScsJ1QnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9JU1JBRUwsICAgICAgICAgICAgICAgICAgeydJJywnTCd9LCAgeyAgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0pBUEFOLCAgICAgICAgICAgICAgICAgICB7J0onLCdQJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMywgIDAsIDIzLCAgMCwgMjMsICAwLCAyMywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfSk9SREFOLCAgICAgICAgICAgICAgICAgIHsnSicsJ08nfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9LQVpBS0hTVEFOLCAgICAgICAgICAgICAgeydLJywnWid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0tVV0FJVCwgICAgICAgICAgICAgICAgICB7J0snLCdXJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfTEFUVklBLCAgICAgICAgICAgICAgICAgIHsnTCcsJ1YnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9MRUJBTk9OLCAgICAgICAgICAgICAgICAgeydMJywnQid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0xFSUNIVEVOU1RFSU4sICAgICAgICAgICB7J0wnLCdJJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTgsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfTElUSFVBTklBLCAgICAgICAgICAgICAgIHsnTCcsJ1QnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9MVVhFTUJVUkcsICAgICAgICAgICAgICAgeydMJywnVSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX01BQ0FVLCAgICAgICAgICAgICAgICAgICB7J00nLCdPJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDF9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjMsICAwLCAyMywgIDAsIDIzLCAgMCwgMjMsIDIzLCAyMywgMjMsIDIzLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAzMH0gIH0sCit7Q0NPREVfTUFDRURPTklBLCAgICAgICAgICAgICAgIHsnTScsJ0snfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9NQUxUQSwgICAgICAgICAgICAgICAgICAgeydNJywnVCd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDE2LCAgMCwgMTYsICAwLCAxNiwgIDAsIDE2LCAxNiwgMTYsIDE2LCAxNiwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNiwgMTYsIDE2LCAxNiwgIDB9ICB9LAore0NDT0RFX01BTEFZU0lBLCAgICAgICAgICAgICAgICB7J00nLCdZJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfTUVYSUNPLCAgICAgICAgICAgICAgICAgIHsnTScsJ1gnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKK3tDQ09ERV9NT05BQ08sICAgICAgICAgICAgICAgICAgeydNJywnQyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDE4LCAgMCwgMTgsICAwLCAxOCwgIDAsIDE4LCAxOCwgMTgsIDE4LCAxOCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX01PUk9DQ08sICAgICAgICAgICAgICAgICB7J00nLCdBJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfTkVUSEVSTEFORFMsICAgICAgICAgICAgIHsnTicsJ0wnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9ORVdfWkVBTEFORCwgICAgICAgICAgICAgeydOJywnWid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIzLCAgMCwgMjMsICAwLCAyMywgIDAsIDIzLCAyMywgMjMsIDIzLCAyMywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgMzB9ICB9LAore0NDT0RFX05PUlRIX0tPUkVBLCAgICAgICAgICAgICB7J0snLCdQJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIzLCAyMywgMjMsIDIzLCAgMH0gIH0sCit7Q0NPREVfTk9SV0FZLCAgICAgICAgICAgICAgICAgIHsnTicsJ08nfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9PTUFOLCAgICAgICAgICAgICAgICAgICAgeydPJywnTSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX1BBS0lTVEFOLCAgICAgICAgICAgICAgICB7J1AnLCdLJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfUEFOQU1BLCAgICAgICAgICAgICAgICAgIHsnUCcsJ0EnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKK3tDQ09ERV9QRVJVLCAgICAgICAgICAgICAgICAgICAgeydQJywnRSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX1BISUxJUFBJTkVTLCAgICAgICAgICAgICB7J1AnLCdIJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDF9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTcsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsIDIzLCAyMywgMjMsIDIzLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAzMH0gIH0sCit7Q0NPREVfUE9MQU5ELCAgICAgICAgICAgICAgICAgIHsnUCcsJ0wnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9QT1JUVUdBTCwgICAgICAgICAgICAgICAgeydQJywnVCd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX1BVRVJUT19SSUNPLCAgICAgICAgICAgICB7J1AnLCdSJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDF9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTcsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsIDIzLCAyMywgMjMsIDIzLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAzMH0gIH0sCit7Q0NPREVfUUFUQVIsICAgICAgICAgICAgICAgICAgIHsnUScsJ0EnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9ST01BTklBLCAgICAgICAgICAgICAgICAgeydSJywnTyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX1JVU1NJQSwgICAgICAgICAgICAgICAgICB7J1InLCdVJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfU0FVRElfQVJBQklBLCAgICAgICAgICAgIHsnUycsJ0EnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9TSU5HQVBPUkUsICAgICAgICAgICAgICAgeydTJywnRyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjB9ICB9LAore0NDT0RFX1NMT1ZBS0lBLCAgICAgICAgICAgICAgICB7J1MnLCdLJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTYsICAwLCAxNiwgIDAsIDE2LCAgMCwgMTYsIDE2LCAxNiwgMTYsIDE2LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDE2LCAxNiwgMTYsIDE2LCAgMH0gIH0sCit7Q0NPREVfU0xPVkVOSUEsICAgICAgICAgICAgICAgIHsnUycsJ0knfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9TT1VUSF9BRlJJQ0EsICAgICAgICAgICAgeydaJywnQSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX1NPVVRIX0tPUkVBLCAgICAgICAgICAgICB7J0snLCdSJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIzLCAyMywgMjMsIDIzLCAgMH0gIH0sCit7Q0NPREVfU1BBSU4sICAgICAgICAgICAgICAgICAgIHsnRScsJ1MnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNiwgIDAsIDE2LCAgMCwgMTYsICAwLCAxNiwgMTYsIDE2LCAxNiwgMTYsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTYsIDE2LCAxNiwgMTYsICAwfSAgfSwKK3tDQ09ERV9TV0VERU4sICAgICAgICAgICAgICAgICAgeydTJywnRSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX1NXSVRaRVJMQU5ELCAgICAgICAgICAgICB7J0MnLCdIJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTgsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfU1lSSUEsICAgICAgICAgICAgICAgICAgIHsnUycsJ1knfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9UQUlXQU4sICAgICAgICAgICAgICAgICAgeydUJywnVyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTcsIDE3LCAxNywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgIDB9ICB9LAore0NDT0RFX1RIQUlMQU5ELCAgICAgICAgICAgICAgICB7J1QnLCdIJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIzLCAyMywgMjMsIDIzLCAgMH0gIH0sCit7Q0NPREVfVFJJTklEQURfVE9CQUdPLCAgICAgICAgIHsnVCcsJ1QnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsICAwLCAxOCwgMTgsIDE4LCAxOCwgMTgsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9UVU5JU0lBLCAgICAgICAgICAgICAgICAgeydUJywnTid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX1RVUktFWSwgICAgICAgICAgICAgICAgICB7J1QnLCdSJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfVUssICAgICAgICAgICAgICAgICAgICAgIHsnRycsJ0InfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9VS1JBSU5FLCAgICAgICAgICAgICAgICAgeydVJywnQSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX1VOSVRFRF9BUkFCX0VNSVJBVEVTLCAgICB7J0EnLCdFJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfVU5JVEVEX1NUQVRFUywgICAgICAgICAgIHsnVScsJ1MnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKK3tDQ09ERV9VUlVHVUFZLCAgICAgICAgICAgICAgICAgeydVJywnWSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMywgMjMsIDIzLCAyMywgIDB9ICB9LAore0NDT0RFX1VaQkVLSVNUQU4sICAgICAgICAgICAgICB7J1UnLCdaJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfVkVORVpVRUxBLCAgICAgICAgICAgICAgIHsnVicsJ0UnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjMsIDIzLCAyMywgMjMsICAwfSAgfSwKK3tDQ09ERV9WSUVUTkFNLCAgICAgICAgICAgICAgICAgeydWJywnTid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX1lFTUVOLCAgICAgICAgICAgICAgICAgICB7J1knLCdFJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfWklNQkFCV0UsICAgICAgICAgICAgICAgIHsnWicsJ1cnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9KQVBBTl9XNTJfVzUzLCAgICAgICAgICAgeydKJywnSid9LCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX01BWCwgICAgICAgICAgICAgICAgICAgICB7J1UnLCdOJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDF9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAyICAgMyAgIDQgICA1ICAgNiAgIDcgICA4ICAgOSAgMTAgIDExICAxMiAgMTMgIDE0ICAxNSAgMTYgIDE3ICAxOCAgMTkgIDIwICAyMSAgMjIgIDIzICAyNCAgMjUgIDI2ICAyNyAgMjggIDI5ICAzMCAgMzEgIDMyICAzMyAgMzQgIDM1ICAzNiAgMzcgIDM4ICAzOSAgNDAgIDQxICA0MiAgNDMgIDQ0ICA0NSAgNDYgIDQ3ICA0OCAgNDkgIDUwICA1MSAgNTIgIDUzICA1NCAgNTUgIDU2ICAqLworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiBpc19jaGFubmVsX3ZhbGlkKCkgLSBJcyBDb3VudHJ5IENoYW5uZWwgVmFsaWQKKyAqICBAQ2hhbm5lSW5kZXg6IGRlZmluZWQgYXMgVlQzMjUzIE1BQyBjaGFubmVsOgorICogICAgICAgICAgICAgIDEgICA9IDIuNEcgY2hhbm5lbCAxCisgKiAgICAgICAgICAgICAgMiAgID0gMi40RyBjaGFubmVsIDIKKyAqICAgICAgICAgICAgICAuLi4KKyAqICAgICAgICAgICAgICAxNCAgPSAyLjRHIGNoYW5uZWwgMTQKKyAqICAgICAgICAgICAgICAxNSAgPSA0LjlHIGNoYW5uZWwgMTgzCisgKiAgICAgICAgICAgICAgMTYgID0gNC45RyBjaGFubmVsIDE4NAorICogICAgICAgICAgICAgIC4uLi4uCisgKiAgT3V0cHV0OiB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgNUdIeiBiYW5kIGlzIGFsbG93ZWQgdG8gYmUgdXNlZCwKKyAqICAgICAgICAgIGZhbHNlIG90aGVyd2lzZS4KKyAqIDQuOUcgPT4gQ2ggMTgzLCAxODQsIDE4NSwgMTg3LCAxODgsIDE4OSwgMTkyLCAxOTYgKFZhbHVlOjE1IH4gMjIpCisgKgorICogNUcgPT4gQ2ggNywgOCwgOSwgMTEsIDEyLCAxNiwgMzQsIDM2LCAzOCwgNDAsIDQyLCA0NCwgNDYsIDQ4LCA1MiwgNTYsIDYwLCA2NCwKKyAqIDEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMjAsIDEyNCwgMTI4LCAxMzIsIDEzNiwgMTQwLCAxNDksIDE1MywgMTU3LCAxNjEsIDE2NSAoVmFsdWUgMjMgfiA1NikKKyAqLworCitib29sIGlzX2NoYW5uZWxfdmFsaWQodW5zaWduZWQgaW50IENoYW5uZWxJbmRleCkKK3sKKwlib29sIGJWYWxpZDsKKworCWJWYWxpZCA9IGZhbHNlOworCS8qCisJICogSWYgQ2hhbm5lbCBJbmRleCBpcyBpbnZhbGlkLCByZXR1cm4gaW52YWxpZAorCSAqLworCWlmICgoQ2hhbm5lbEluZGV4ID4gQ0JfTUFYX0NIQU5ORUwpIHx8CisJCShDaGFubmVsSW5kZXggPT0gMCkpCisJeworCQliVmFsaWQgPSBmYWxzZTsKKwkJZ290byBleGl0OworCX0KKworCWJWYWxpZCA9IHNDaGFubmVsVGJsW0NoYW5uZWxJbmRleF0uYlZhbGlkOworCitleGl0OgorCXJldHVybiAoYlZhbGlkKTsKKworfQorCisvKioKKyAqIGNoYW5uZWxfZ2V0X2xpc3QoKSAtIEdldCBBdmFpbGFibGUgQ2hhbm5lbCBMaXN0IGZvciBhIGdpdmVuIGNvdW50cnkKKyAqIEBDb3VudHJ5Q29kZTogVGhlIGNvdW50cnkgY29kZSBkZWZpbmVkIGluIGNvdW50cnkuaAorICoKKyAqIE91dHB1dDoKKyAqICAgICAgcGJ5Q2hhbm5lbFRhYmxlOiAgIChRV09SRCAqKSBjb3JyZXNwb25kZW50IGJpdCBtYXNrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgYXZhaWxhYmxlIGNoYW5uZWxzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAwMDAxIG1lYW5zIGNoYW5uZWwgMSBpcyBzdXBwb3J0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAwMDMgbWVhbnMgY2hhbm5lbCAxLDIgYXJlIHN1cHBvcnRlZAorICogICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDAwRiBtZWFucyBjaGFubmVsIDEsMiwuLjE1IGFyZSBzdXBwb3J0ZWQKKyAqLworCitib29sIGNoYW5uZWxfZ2V0X2xpc3QodW5zaWduZWQgaW50IHVDb3VudHJ5Q29kZUlkeCwgdW5zaWduZWQgY2hhciAqcGJ5Q2hhbm5lbFRhYmxlKQoreworCWlmICh1Q291bnRyeUNvZGVJZHggPj0gQ0NPREVfTUFYKQorCQlyZXR1cm4gKGZhbHNlKTsKKworCW1lbWNweShwYnlDaGFubmVsVGFibGUsIENoYW5uZWxSdWxlVGFiW3VDb3VudHJ5Q29kZUlkeF0uYkNoYW5uZWxJZHhMaXN0LCBDQl9NQVhfQ0hBTk5FTCk7CisKKwlyZXR1cm4gKHRydWUpOworfQorCit2b2lkIGluaXRfY2hhbm5lbF90YWJsZSh2b2lkICpwRGV2aWNlSGFuZGxlcikKK3sKKwlQU0RldmljZSAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKKwlib29sIGJNdWx0aUJhbmQgPSBmYWxzZTsKKwl1bnNpZ25lZCBpbnQgaWk7CisKKwlmb3IoaWkgPSAxIDsgaWk8PUNBUkRfTUFYX0NIQU5ORUxfVEJMIDsgaWkrKykgeworCQlzQ2hhbm5lbFRibFtpaV0uYlZhbGlkID0gZmFsc2U7CisJfQorCisJc3dpdGNoIChwRGV2aWNlLT5ieVJGVHlwZSkgeworCQljYXNlIFJGX1JGTUQyOTU5IDoKKwkJY2FzZSBSRl9BSVJPSEEgOgorCQljYXNlIFJGX0FMMjIzMFM6CisJCWNhc2UgUkZfVVcyNDUxIDoKKwkJY2FzZSBSRl9WVDMyMjYgOgorCQkJLy9wcmludGsoImNoZXN0ZXItZmFsc2VcbiIpOworCQkJYk11bHRpQmFuZCA9IGZhbHNlOworCQkJYnJlYWs7CisJCWNhc2UgUkZfQUlST0hBNzIzMCA6CisJCWNhc2UgUkZfVVcyNDUyIDoKKwkJY2FzZSBSRl9OT1RISU5HIDoKKwkJZGVmYXVsdCA6CisJCQliTXVsdGlCYW5kID0gdHJ1ZTsKKwkJCWJyZWFrOworCX0KKworCWlmICgocERldmljZS0+ZHdEaWFnUmVmQ291bnQgIT0gMCkgfHwgKHBEZXZpY2UtPmIxMWhFbmFibGUgPT0gdHJ1ZSkpIHsKKwkJaWYgKGJNdWx0aUJhbmQgPT0gdHJ1ZSkgeworCQkJZm9yKGlpID0gMCA7IGlpPENBUkRfTUFYX0NIQU5ORUxfVEJMIDsgaWkrKykgeworCQkJCXNDaGFubmVsVGJsW2lpKzFdLmJWYWxpZCA9IHRydWU7CisJCQkJcERldmljZS0+YWJ5UmVnUHdyW2lpKzFdID0gcERldmljZS0+YWJ5T0ZETURlZmF1bHRQd3JbaWkrMV07CisJCQkJcERldmljZS0+YWJ5TG9jYWxQd3JbaWkrMV0gPSBwRGV2aWNlLT5hYnlPRkRNRGVmYXVsdFB3cltpaSsxXTsKKwkJCX0KKwkJCWZvcihpaSA9IDAgOyBpaTxDSEFOTkVMX01BWF8yNEcgOyBpaSsrKSB7CisJCQkJcERldmljZS0+YWJ5UmVnUHdyW2lpKzFdID0gcERldmljZS0+YWJ5Q0NLRGVmYXVsdFB3cltpaSsxXTsKKwkJCQlwRGV2aWNlLT5hYnlMb2NhbFB3cltpaSsxXSA9IHBEZXZpY2UtPmFieUNDS0RlZmF1bHRQd3JbaWkrMV07CisJCQl9CisJCX0gZWxzZSB7CisJCQlmb3IoaWkgPSAwIDsgaWk8Q0hBTk5FTF9NQVhfMjRHIDsgaWkrKykgeworCQkJCS8vMjAwOC04LTQgPGFkZD4gYnkgY2hlc3RlcgorCQkJCWlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbaWldICE9IDApIHsKKwkJCQkJc0NoYW5uZWxUYmxbaWkrMV0uYlZhbGlkID0gdHJ1ZTsKKwkJCQkJcERldmljZS0+YWJ5UmVnUHdyW2lpKzFdID0gcERldmljZS0+YWJ5Q0NLRGVmYXVsdFB3cltpaSsxXTsKKwkJCQkJcERldmljZS0+YWJ5TG9jYWxQd3JbaWkrMV0gPSBwRGV2aWNlLT5hYnlDQ0tEZWZhdWx0UHdyW2lpKzFdOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAocERldmljZS0+Ynlab25lVHlwZSA8PSBDQ09ERV9NQVgpIHsKKwkJaWYgKGJNdWx0aUJhbmQgPT0gdHJ1ZSkgeworCQkJZm9yKGlpID0gMCA7IGlpPENBUkRfTUFYX0NIQU5ORUxfVEJMIDsgaWkrKykgeworCQkJCWlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbaWldICE9IDApIHsKKwkJCQkJc0NoYW5uZWxUYmxbaWkrMV0uYlZhbGlkID0gdHJ1ZTsKKwkJCQkJcERldmljZS0+YWJ5UmVnUHdyW2lpKzFdID0gQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYnlQb3dlcltpaV07CisJCQkJCXBEZXZpY2UtPmFieUxvY2FsUHdyW2lpKzFdID0gQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYnlQb3dlcltpaV07CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJZm9yKGlpID0gMCA7IGlpPENIQU5ORUxfTUFYXzI0RyA7IGlpKyspIHsKKwkJCQlpZiAoQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYkNoYW5uZWxJZHhMaXN0W2lpXSAhPSAwKSB7CisJCQkJCXNDaGFubmVsVGJsW2lpKzFdLmJWYWxpZCA9IHRydWU7CisJCQkJCXBEZXZpY2UtPmFieVJlZ1B3cltpaSsxXSA9IENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJ5UG93ZXJbaWldOworCQkJCQlwRGV2aWNlLT5hYnlMb2NhbFB3cltpaSsxXSA9IENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJ5UG93ZXJbaWldOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCURCR19QUlQoTVNHX0xFVkVMX05PVElDRSwgS0VSTl9JTkZPIlpvbmU9WyVkXVslY11bJWNdISFcbiIscERldmljZS0+Ynlab25lVHlwZSxDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5jaENvdW50cnlDb2RlWzBdLENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmNoQ291bnRyeUNvZGVbMV0pOworCisJZm9yKGlpID0gMCA7IGlpPENBUkRfTUFYX0NIQU5ORUxfVEJMIDsgaWkrKykgeworCQlpZiAocERldmljZS0+YWJ5UmVnUHdyW2lpKzFdID09IDApCisJCQlwRGV2aWNlLT5hYnlSZWdQd3JbaWkrMV0gPSBwRGV2aWNlLT5hYnlPRkRNRGVmYXVsdFB3cltpaSsxXTsKKwkJaWYgKHBEZXZpY2UtPmFieUxvY2FsUHdyW2lpKzFdID09IDApCisJCQlwRGV2aWNlLT5hYnlMb2NhbFB3cltpaSsxXSA9IHBEZXZpY2UtPmFieU9GRE1EZWZhdWx0UHdyW2lpKzFdOworCX0KK30KKwordW5zaWduZWQgY2hhciBnZXRfY2hhbm5lbF9tYXBwaW5nKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCB1bnNpZ25lZCBjaGFyIGJ5Q2hhbm5lbE51bWJlciwgQ0FSRF9QSFlfVFlQRSBlUGh5VHlwZSkKK3sKKwl1bnNpZ25lZCBpbnQgaWk7CisKKwlpZiAoKGVQaHlUeXBlID09IFBIWV9UWVBFXzExQikgfHwgKGVQaHlUeXBlID09IFBIWV9UWVBFXzExRykpCisJCXJldHVybiAoYnlDaGFubmVsTnVtYmVyKTsKKworCWZvcihpaSA9IChDQl9NQVhfQ0hBTk5FTF8yNEcgKyAxKTsgaWkgPD0gQ0JfTUFYX0NIQU5ORUw7ICkgeworCQlpZiAoc0NoYW5uZWxUYmxbaWldLmJ5Q2hhbm5lbE51bWJlciA9PSBieUNoYW5uZWxOdW1iZXIpCisJCQlyZXR1cm4gKCh1bnNpZ25lZCBjaGFyKSBpaSk7CisJCWlpKys7CisJfQorCXJldHVybiAwOworfQorCit1bnNpZ25lZCBjaGFyIGdldF9jaGFubmVsX251bWJlcih2b2lkICpwRGV2aWNlSGFuZGxlciwgdW5zaWduZWQgY2hhciBieUNoYW5uZWxJbmRleCkKK3sKKwkvL1BTRGV2aWNlICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOworCXJldHVybihzQ2hhbm5lbFRibFtieUNoYW5uZWxJbmRleF0uYnlDaGFubmVsTnVtYmVyKTsKK30KKworLyoqCisgKiBzZXRfY2hhbm5lbCgpIC0gU2V0IE5JQyBtZWRpYSBjaGFubmVsCisgKgorICogQHBEZXZpY2VIYW5kbGVyOiBUaGUgYWRhcHRlciB0byBiZSBzZXQKKyAqIEB1Q29ubmVjdGlvbkNoYW5uZWw6IENoYW5uZWwgdG8gYmUgc2V0CisgKgorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2NlZWRlZDsgZmFsc2UgaWYgZmFpbGVkLgorICoKKyAqLworYm9vbCBzZXRfY2hhbm5lbCAodm9pZCAqcERldmljZUhhbmRsZXIsIHVuc2lnbmVkIGludCB1Q29ubmVjdGlvbkNoYW5uZWwpCit7CisJUFNEZXZpY2UgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7CisJYm9vbCBiUmVzdWx0ID0gdHJ1ZTsKKworCisJaWYgKHBEZXZpY2UtPmJ5Q3VycmVudENoID09IHVDb25uZWN0aW9uQ2hhbm5lbCkgeworCQlyZXR1cm4gYlJlc3VsdDsKKwl9CisKKwlpZiAoc0NoYW5uZWxUYmxbdUNvbm5lY3Rpb25DaGFubmVsXS5iVmFsaWQgPT0gZmFsc2UpIHsKKwkJcmV0dXJuIChmYWxzZSk7CisJfQorCisJaWYgKCh1Q29ubmVjdGlvbkNoYW5uZWwgPiBDQl9NQVhfQ0hBTk5FTF8yNEcpICYmCisJCQkocERldmljZS0+ZUN1cnJlbnRQSFlUeXBlICE9IFBIWV9UWVBFXzExQSkpIHsKKwkJQ0FSRGJTZXRQaHlQYXJhbWV0ZXIocERldmljZSwgUEhZX1RZUEVfMTFBLCAwLCAwLCBOVUxMLCBOVUxMKTsKKwl9IGVsc2UgaWYgKCh1Q29ubmVjdGlvbkNoYW5uZWwgPD0gQ0JfTUFYX0NIQU5ORUxfMjRHKSAmJgorCQkJKHBEZXZpY2UtPmVDdXJyZW50UEhZVHlwZSA9PSBQSFlfVFlQRV8xMUEpKSB7CisJCUNBUkRiU2V0UGh5UGFyYW1ldGVyKHBEZXZpY2UsIFBIWV9UWVBFXzExRywgMCwgMCwgTlVMTCwgTlVMTCk7CisJfQorCS8vIGNsZWFyIE5BVgorCU1BQ3ZSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19NQUNDUiwgTUFDQ1JfQ0xSTkFWKTsKKworCS8ve3sgUm9iZXJ0WXU6IDIwMDQxMjAyCisJLy8vLyBUWF9QRSB3aWxsIHJlc2VydmUgMyB1cyBmb3IgTUFYMjgyOSBBIG1vZGUgb25seSwgaXQgaXMgZm9yIGJldHRlciBUWCB0aHJvdWdocHV0CisKKwlpZiAoIHBEZXZpY2UtPmJ5UkZUeXBlID09IFJGX0FJUk9IQTcyMzAgKQorCXsKKwkJUkZiQUw3MjMwU2VsZWN0Q2hhbm5lbFBvc3RQcm9jZXNzKHBEZXZpY2UtPlBvcnRPZmZzZXQsIHBEZXZpY2UtPmJ5Q3VycmVudENoLCAodW5zaWduZWQgY2hhcil1Q29ubmVjdGlvbkNoYW5uZWwpOworCX0KKwkvL319IFJvYmVydFl1CisKKworCXBEZXZpY2UtPmJ5Q3VycmVudENoID0gKHVuc2lnbmVkIGNoYXIpdUNvbm5lY3Rpb25DaGFubmVsOworCWJSZXN1bHQgJj0gUkZiU2VsZWN0Q2hhbm5lbChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBwRGV2aWNlLT5ieVJGVHlwZSwgKHVuc2lnbmVkIGNoYXIpdUNvbm5lY3Rpb25DaGFubmVsKTsKKworCS8vIEluaXQgU3ludGhlc2l6ZXIgVGFibGUKKwlpZiAocERldmljZS0+YkVuYWJsZVBTTW9kZSA9PSB0cnVlKQorCQlSRnZXcml0ZVdha2VQcm9nU3luKHBEZXZpY2UtPlBvcnRPZmZzZXQsIHBEZXZpY2UtPmJ5UkZUeXBlLCB1Q29ubmVjdGlvbkNoYW5uZWwpOworCisKKwkvL0RCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iQ0FSRGJTZXRNZWRpYUNoYW5uZWw6ICVkXG4iLCAodW5zaWduZWQgY2hhcil1Q29ubmVjdGlvbkNoYW5uZWwpOworCUJCdlNvZnR3YXJlUmVzZXQocERldmljZS0+UG9ydE9mZnNldCk7CisKKwlpZiAocERldmljZS0+YnlMb2NhbElEID4gUkVWX0lEX1ZUMzI1M19CMSkgeworCQkvLyBzZXQgSFcgZGVmYXVsdCBwb3dlciByZWdpc3RlcgorCQlNQUN2U2VsZWN0UGFnZTEocERldmljZS0+UG9ydE9mZnNldCk7CisJCVJGYlNldFBvd2VyKHBEZXZpY2UsIFJBVEVfMU0sIHBEZXZpY2UtPmJ5Q3VycmVudENoKTsKKwkJVk5Tdk91dFBvcnRCKHBEZXZpY2UtPlBvcnRPZmZzZXQgKyBNQUNfUkVHX1BXUkNDSywgcERldmljZS0+YnlDdXJQd3IpOworCQlSRmJTZXRQb3dlcihwRGV2aWNlLCBSQVRFXzZNLCBwRGV2aWNlLT5ieUN1cnJlbnRDaCk7CisJCVZOU3ZPdXRQb3J0QihwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19QV1JPRkRNLCBwRGV2aWNlLT5ieUN1clB3cik7CisJCU1BQ3ZTZWxlY3RQYWdlMChwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKKwl9CisKKwlpZiAocERldmljZS0+ZUN1cnJlbnRQSFlUeXBlID09IFBIWV9UWVBFXzExQikgeworI2lmZGVmCVBMSUNFX0RFQlVHCisJCS8vcHJpbnRrKCJGdW5jOkNoYlNldENoYW5uZWw6Y2FsbCBSRmJTZXRQb3dlcjoxMUJcbiIpOworI2VuZGlmCisJCVJGYlNldFBvd2VyKHBEZXZpY2UsIFJBVEVfMU0sIHBEZXZpY2UtPmJ5Q3VycmVudENoKTsKKwl9IGVsc2UgeworI2lmZGVmCVBMSUNFX0RFQlVHCisJCS8vcHJpbnRrKCJGdW5jOkNoYlNldENoYW5uZWw6Y2FsbCBSRmJTZXRQb3dlclxuIik7CisjZW5kaWYKKwkJUkZiU2V0UG93ZXIocERldmljZSwgUkFURV82TSwgcERldmljZS0+YnlDdXJyZW50Q2gpOworCX0KKworCXJldHVybihiUmVzdWx0KTsKK30KKworLyoqCisgKiBzZXRfY291bnRyeV9pbmZvKCkgLSBTZXQgQ2hhbm5lbCBJbmZvIG9mIENvdW50cnkKKyAqCisgKiBSZXR1cm4gVmFsdWU6IG5vbmUuCisgKgorICovCisKK3ZvaWQgc2V0X2NvdW50cnlfaW5mbyh2b2lkICpwRGV2aWNlSGFuZGxlciwgQ0FSRF9QSFlfVFlQRSBlUEhZVHlwZSwgdm9pZCAqcElFKQoreworCVBTRGV2aWNlIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOworCXVuc2lnbmVkIGludCBpaSA9IDA7CisJdW5zaWduZWQgaW50IHV1ID0gMDsKKwl1bnNpZ25lZCBpbnQgc3RlcCA9IDA7CisJdW5zaWduZWQgaW50IHVOdW1PZkNvdW50cnlJbmZvID0gMDsKKwl1bnNpZ25lZCBjaGFyIGJ5Q2ggPSAwOworCVBXTEFOX0lFX0NPVU5UUlkgcElFX0NvdW50cnkgPSAoUFdMQU5fSUVfQ09VTlRSWSkgcElFOworCisKKwl1TnVtT2ZDb3VudHJ5SW5mbyA9IChwSUVfQ291bnRyeS0+bGVuIC0gMyk7CisJdU51bU9mQ291bnRyeUluZm8gLz0gMzsKKworCWlmIChlUEhZVHlwZSA9PSBQSFlfVFlQRV8xMUEpIHsKKwkJcERldmljZS0+YkNvdW50cnlJbmZvNUcgPSB0cnVlOworCQlmb3IoaWkgPSBDQl9NQVhfQ0hBTk5FTF8yNEcgKyAxIDsgaWkgPD0gQ0FSRF9NQVhfQ0hBTk5FTF9UQkwgOyBpaSsrKSB7CisJCQlzQ2hhbm5lbFRibFtpaV0uYlZhbGlkID0gZmFsc2U7CisJCX0KKwkJc3RlcCA9IDQ7CisJfSBlbHNlIHsKKwkJcERldmljZS0+YkNvdW50cnlJbmZvMjRHID0gdHJ1ZTsKKwkJZm9yKGlpID0gMSA7IGlpIDw9IENCX01BWF9DSEFOTkVMXzI0RyA7IGlpKyspIHsKKwkJCXNDaGFubmVsVGJsW2lpXS5iVmFsaWQgPSBmYWxzZTsKKwkJfQorCQlzdGVwID0gMTsKKwl9CisJcERldmljZS0+YWJ5Q291bnRyeUNvZGVbMF0gPSBwSUVfQ291bnRyeS0+YWJ5Q291bnRyeVN0cmluZ1swXTsKKwlwRGV2aWNlLT5hYnlDb3VudHJ5Q29kZVsxXSA9IHBJRV9Db3VudHJ5LT5hYnlDb3VudHJ5U3RyaW5nWzFdOworCXBEZXZpY2UtPmFieUNvdW50cnlDb2RlWzJdID0gcElFX0NvdW50cnktPmFieUNvdW50cnlTdHJpbmdbMl07CisKKwlmb3IoaWkgPSAwIDsgaWkgPCB1TnVtT2ZDb3VudHJ5SW5mbyA7IGlpKyspIHsKKwkJZm9yKHV1ID0gMCA7IHV1IDwgcElFX0NvdW50cnktPmFieUNvdW50cnlJbmZvW2lpKjMrMV0gOyB1dSsrKSB7CisJCQlieUNoID0gZ2V0X2NoYW5uZWxfbWFwcGluZyhwRGV2aWNlLCAodW5zaWduZWQgY2hhcikocElFX0NvdW50cnktPmFieUNvdW50cnlJbmZvW2lpKjNdK3N0ZXAqdXUpLCBlUEhZVHlwZSk7CisJCQlzQ2hhbm5lbFRibFtieUNoXS5iVmFsaWQgPSB0cnVlOworCQkJcERldmljZS0+YWJ5UmVnUHdyW2J5Q2hdID0gcElFX0NvdW50cnktPmFieUNvdW50cnlJbmZvW2lpKjMrMl07CisJCX0KKwl9Cit9CisKKy8qKgorICoKKyAqIHNldF9zdXBwb3J0X2NoYW5uZWxzKCkgLSBTZXQgU3VwcG9ydCBDaGFubmVscyBJRSBkZWZpbmVkIGluIDgwMi4xMWgKKyAqCisgKiBAaERldmljZUNvbnRleHQ6IGRldmljZSBzdHJ1Y3R1cmUgcG9pbnQKKyAqCisgKiBSZXR1cm4gVmFsdWU6IG5vbmUuCisgKgorICovCisKK3Vuc2lnbmVkIGNoYXIgc2V0X3N1cHBvcnRfY2hhbm5lbHModm9pZCAqcERldmljZUhhbmRsZXIsIHVuc2lnbmVkIGNoYXIgKnBieUlFcykKK3sKKwlQU0RldmljZSBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKKwl1bnNpZ25lZCBpbnQgaWk7CisJdW5zaWduZWQgY2hhciBieUNvdW50OworCVBXTEFOX0lFX1NVUFBfQ0ggcElFID0gKFBXTEFOX0lFX1NVUFBfQ0gpIHBieUlFczsKKwl1bnNpZ25lZCBjaGFyICpwYnlDaFR1cHBsZTsKKwl1bnNpZ25lZCBjaGFyIGJ5TGVuID0gMDsKKworCisJcElFLT5ieUVsZW1lbnRJRCA9IFdMQU5fRUlEX1NVUFBfQ0g7CisJcElFLT5sZW4gPSAwOworCXBieUNoVHVwcGxlID0gcElFLT5hYnlDaGFubmVsVHVwbGU7CisJYnlMZW4gPSAyOworCS8vIGxvd2VyIGJhbmQKKwlieUNvdW50ID0gMDsKKwlpZiAoQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYkNoYW5uZWxJZHhMaXN0WzI4XSA9PSB0cnVlKSB7CisJCWZvciAoaWkgPSAyOCA7IGlpIDwgMzYgOyBpaSs9IDIpIHsKKwkJCWlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbaWldID09IHRydWUpIHsKKwkJCQlieUNvdW50Kys7CisJCQl9CisJCX0KKwkJKnBieUNoVHVwcGxlKysgPSAzNDsKKwkJKnBieUNoVHVwcGxlKysgPSBieUNvdW50OworCQlieUxlbiArPSAyOworCX0gZWxzZSBpZiAoQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYkNoYW5uZWxJZHhMaXN0WzI5XSA9PSB0cnVlKSB7CisJCWZvciAoaWkgPSAyOSA7IGlpIDwgMzYgOyBpaSs9IDIpIHsKKwkJCWlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbaWldID09IHRydWUpIHsKKwkJCQlieUNvdW50Kys7CisJCQl9CisJCX0KKwkJKnBieUNoVHVwcGxlKysgPSAzNjsKKwkJKnBieUNoVHVwcGxlKysgPSBieUNvdW50OworCQlieUxlbiArPSAyOworCX0KKwkvLyBtaWRkbGUgYmFuZAorCWJ5Q291bnQgPSAwOworCWlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbMzZdID09IHRydWUpIHsKKwkJZm9yIChpaSA9IDM2IDsgaWkgPCA0MCA7IGlpKyspIHsKKwkJCWlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbaWldID09IHRydWUpIHsKKwkJCQlieUNvdW50Kys7CisJCQl9CisJCX0KKwkJKnBieUNoVHVwcGxlKysgPSA1MjsKKwkJKnBieUNoVHVwcGxlKysgPSBieUNvdW50OworCQlieUxlbiArPSAyOworCX0KKwkvLyBoaWdoZXIgYmFuZAorCWJ5Q291bnQgPSAwOworCWlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbNDBdID09IHRydWUpIHsKKwkJZm9yIChpaSA9IDQwIDsgaWkgPCA1MSA7IGlpKyspIHsKKwkJCWlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbaWldID09IHRydWUpIHsKKwkJCQlieUNvdW50Kys7CisJCQl9CisJCX0KKwkJKnBieUNoVHVwcGxlKysgPSAxMDA7CisJCSpwYnlDaFR1cHBsZSsrID0gYnlDb3VudDsKKwkJYnlMZW4gKz0gMjsKKwl9IGVsc2UgaWYgKENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJDaGFubmVsSWR4TGlzdFs1MV0gPT0gdHJ1ZSkgeworCQlmb3IgKGlpID0gNTEgOyBpaSA8IDU2IDsgaWkrKykgeworCQkJaWYgKENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJDaGFubmVsSWR4TGlzdFtpaV0gPT0gdHJ1ZSkgeworCQkJCWJ5Q291bnQrKzsKKwkJCX0KKwkJfQorCQkqcGJ5Q2hUdXBwbGUrKyA9IDE0OTsKKwkJKnBieUNoVHVwcGxlKysgPSBieUNvdW50OworCQlieUxlbiArPSAyOworCX0KKwlwSUUtPmxlbiArPSAoYnlMZW4gLSAyKTsKKwlyZXR1cm4gKGJ5TGVuKTsKK30KKwordm9pZCBzZXRfY291bnRyeV9JRSh2b2lkICpwRGV2aWNlSGFuZGxlciwgdm9pZCAqcElFKQoreworCVBTRGV2aWNlIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOworCXVuc2lnbmVkIGludCBpaTsKKwlQV0xBTl9JRV9DT1VOVFJZIHBJRUNvdW50cnkgPSAoUFdMQU5fSUVfQ09VTlRSWSkgcElFOworCisJcElFQ291bnRyeS0+YnlFbGVtZW50SUQgPSBXTEFOX0VJRF9DT1VOVFJZOworCXBJRUNvdW50cnktPmxlbiA9IDA7CisJcElFQ291bnRyeS0+YWJ5Q291bnRyeVN0cmluZ1swXSA9IENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmNoQ291bnRyeUNvZGVbMF07CisJcElFQ291bnRyeS0+YWJ5Q291bnRyeVN0cmluZ1sxXSA9IENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmNoQ291bnRyeUNvZGVbMV07CisJcElFQ291bnRyeS0+YWJ5Q291bnRyeVN0cmluZ1syXSA9ICcgJzsKKwlmb3IgKGlpID0gQ0JfTUFYX0NIQU5ORUxfMjRHOyBpaSA8IENCX01BWF9DSEFOTkVMOyBpaSsrICkgeworCQlpZiAoQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYkNoYW5uZWxJZHhMaXN0W2lpXSAhPSAwKSB7CisJCQlwSUVDb3VudHJ5LT5hYnlDb3VudHJ5SW5mb1twSUVDb3VudHJ5LT5sZW4rK10gPSBzQ2hhbm5lbFRibFtpaSsxXS5ieUNoYW5uZWxOdW1iZXI7CisJCQlwSUVDb3VudHJ5LT5hYnlDb3VudHJ5SW5mb1twSUVDb3VudHJ5LT5sZW4rK10gPSAxOworCQkJcElFQ291bnRyeS0+YWJ5Q291bnRyeUluZm9bcElFQ291bnRyeS0+bGVuKytdID0gQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYnlQb3dlcltpaV07CisJCX0KKwl9CisJcElFQ291bnRyeS0+bGVuICs9IDM7Cit9CisKK2Jvb2wgZ2V0X2NoYW5uZWxfbWFwX2luZm8odm9pZCAqcERldmljZUhhbmRsZXIsIHVuc2lnbmVkIGludCB1Q2hhbm5lbEluZGV4LAorCQl1bnNpZ25lZCBjaGFyICpwYnlDaGFubmVsTnVtYmVyLCB1bnNpZ25lZCBjaGFyICpwYnlNYXApCit7CisKKwlpZiAodUNoYW5uZWxJbmRleCA+IENCX01BWF9DSEFOTkVMKSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisJKnBieUNoYW5uZWxOdW1iZXIgPSBzQ2hhbm5lbFRibFt1Q2hhbm5lbEluZGV4XS5ieUNoYW5uZWxOdW1iZXI7CisJKnBieU1hcCA9IHNDaGFubmVsVGJsW3VDaGFubmVsSW5kZXhdLmJ5TUFQOworCXJldHVybiBzQ2hhbm5lbFRibFt1Q2hhbm5lbEluZGV4XS5iVmFsaWQ7Cit9CisKK3ZvaWQgc2V0X2NoYW5uZWxfbWFwX2luZm8odm9pZCAqcERldmljZUhhbmRsZXIsIHVuc2lnbmVkIGludCB1Q2hhbm5lbEluZGV4LAorCQl1bnNpZ25lZCBjaGFyIGJ5TWFwKQoreworCisJaWYgKHVDaGFubmVsSW5kZXggPiBDQl9NQVhfQ0hBTk5FTCkgeworCQlyZXR1cm47CisJfQorCXNDaGFubmVsVGJsW3VDaGFubmVsSW5kZXhdLmJ5TUFQIHw9IGJ5TWFwOworfQorCit2b2lkIGNsZWFyX2NoYW5uZWxfbWFwX2luZm8odm9pZCAqcERldmljZUhhbmRsZXIpCit7CisJdW5zaWduZWQgaW50IGlpID0gMDsKKworCWZvciAoaWkgPSAxOyBpaSA8PSAgQ0JfTUFYX0NIQU5ORUw7IGlpKyspIHsKKwkJc0NoYW5uZWxUYmxbaWldLmJ5TUFQID0gMDsKKwl9Cit9CisKK3Vuc2lnbmVkIGNoYXIgYXV0b19jaGFubmVsX3NlbGVjdCh2b2lkICpwRGV2aWNlSGFuZGxlciwgQ0FSRF9QSFlfVFlQRSBlUEhZVHlwZSkKK3sKKwl1bnNpZ25lZCBpbnQgaWkgPSAwOworCXVuc2lnbmVkIGNoYXIgYnlPcHRpb25DaGFubmVsID0gMDsKKwlpbnQgYWlXZWlnaHRbQ0JfTUFYX0NIQU5ORUxfMjRHKzFdID0gey0xMDAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMH07CisKKwlpZiAoZVBIWVR5cGUgPT0gUEhZX1RZUEVfMTFBKSB7CisJCWZvcihpaSA9IENCX01BWF9DSEFOTkVMXzI0RyArIDEgOyBpaSA8PSBDQl9NQVhfQ0hBTk5FTCA7IGlpKyspIHsKKwkJCWlmIChzQ2hhbm5lbFRibFtpaV0uYlZhbGlkID09IHRydWUpIHsKKwkJCQlpZiAoYnlPcHRpb25DaGFubmVsID09IDApIHsKKwkJCQkJYnlPcHRpb25DaGFubmVsID0gKHVuc2lnbmVkIGNoYXIpIGlpOworCQkJCX0KKwkJCQlpZiAoc0NoYW5uZWxUYmxbaWldLmJ5TUFQID09IDApIHsKKwkJCQkJcmV0dXJuICgodW5zaWduZWQgY2hhcikgaWkpOworCQkJCX0gZWxzZSBpZiAoICEoc0NoYW5uZWxUYmxbaWldLmJ5TUFQICYgMHgwOCkpIHsKKwkJCQkJYnlPcHRpb25DaGFubmVsID0gKHVuc2lnbmVkIGNoYXIpIGlpOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWJ5T3B0aW9uQ2hhbm5lbCA9IDA7CisJCWZvcihpaSA9IDEgOyBpaSA8PSBDQl9NQVhfQ0hBTk5FTF8yNEcgOyBpaSsrKSB7CisJCQlpZiAoc0NoYW5uZWxUYmxbaWldLmJWYWxpZCA9PSB0cnVlKSB7CisJCQkJaWYgKHNDaGFubmVsVGJsW2lpXS5ieU1BUCA9PSAwKSB7CisJCQkJCWFpV2VpZ2h0W2lpXSArPSAxMDA7CisJCQkJfSBlbHNlIGlmIChzQ2hhbm5lbFRibFtpaV0uYnlNQVAgJiAweDAxKSB7CisJCQkJCWlmIChpaSA+IDMpIHsKKwkJCQkJCWFpV2VpZ2h0W2lpLTNdIC09IDEwOworCQkJCQl9CisJCQkJCWlmIChpaSA+IDIpIHsKKwkJCQkJCWFpV2VpZ2h0W2lpLTJdIC09IDIwOworCQkJCQl9CisJCQkJCWlmIChpaSA+IDEpIHsKKwkJCQkJCWFpV2VpZ2h0W2lpLTFdIC09IDQwOworCQkJCQl9CisJCQkJCWFpV2VpZ2h0W2lpXSAtPSA4MDsKKwkJCQkJaWYgKGlpIDwgQ0JfTUFYX0NIQU5ORUxfMjRHKSB7CisJCQkJCQlhaVdlaWdodFtpaSsxXSAtPSA0MDsKKwkJCQkJfQorCQkJCQlpZiAoaWkgPCAoQ0JfTUFYX0NIQU5ORUxfMjRHIC0gMSkpIHsKKwkJCQkJCWFpV2VpZ2h0W2lpKzJdIC09IDIwOworCQkJCQl9CisJCQkJCWlmIChpaSA8IChDQl9NQVhfQ0hBTk5FTF8yNEcgLSAyKSkgeworCQkJCQkJYWlXZWlnaHRbaWkrM10gLT0gMTA7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJZm9yKGlpID0gMSA7IGlpIDw9IENCX01BWF9DSEFOTkVMXzI0RyA7IGlpKyspIHsKKwkJCWlmICgoc0NoYW5uZWxUYmxbaWldLmJWYWxpZCA9PSB0cnVlKSAmJgorCQkJCQkoYWlXZWlnaHRbaWldID4gYWlXZWlnaHRbYnlPcHRpb25DaGFubmVsXSkpIHsKKwkJCQlieU9wdGlvbkNoYW5uZWwgPSAodW5zaWduZWQgY2hhcikgaWk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIChieU9wdGlvbkNoYW5uZWwpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9jaGFubmVsLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NoYW5uZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDM4ZjBkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9jaGFubmVsLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NiwgMjAwMyBWSUEgTmV0d29ya2luZyBUZWNobm9sb2dpZXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKiBGaWxlOiBjaGFubmVsLmgKKyAqCisgKi8KKworI2lmbmRlZiBfQ0hBTk5FTF9IXworI2RlZmluZSBfQ0hBTk5FTF9IXworCisjaW5jbHVkZSAidHR5cGUuaCIKKyNpbmNsdWRlICJjYXJkLmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgQ2xhc3NlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3R5cGVkZWYgc3RydWN0IHRhZ1NDaGFubmVsVGJsRWxlbWVudCB7CisgICAgdW5zaWduZWQgY2hhciBieUNoYW5uZWxOdW1iZXI7CisgICAgdW5zaWduZWQgaW50IHVGcmVxdWVuY3k7CisgICAgYm9vbCBiVmFsaWQ7CisgICAgdW5zaWduZWQgY2hhciBieU1BUDsKK31TQ2hhbm5lbFRibEVsZW1lbnQsICpQU0NoYW5uZWxUYmxFbGVtZW50OworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2Jvb2wgaXNfY2hhbm5lbF92YWxpZCh1bnNpZ25lZCBpbnQgQ291bnRyeUNvZGUpOwordm9pZCBpbml0X2NoYW5uZWxfdGFibGUodm9pZCAqcERldmljZUhhbmRsZXIpOwordW5zaWduZWQgY2hhciBnZXRfY2hhbm5lbF9tYXBwaW5nKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCB1bnNpZ25lZCBjaGFyIGJ5Q2hhbm5lbE51bWJlciwgQ0FSRF9QSFlfVFlQRSBlUGh5VHlwZSk7Citib29sIGNoYW5uZWxfZ2V0X2xpc3QodW5zaWduZWQgaW50IHVDb3VudHJ5Q29kZUlkeCwgdW5zaWduZWQgY2hhciAqcGJ5Q2hhbm5lbFRhYmxlKTsKK3Vuc2lnbmVkIGNoYXIgZ2V0X2NoYW5uZWxfbnVtYmVyKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCB1bnNpZ25lZCBjaGFyIGJ5Q2hhbm5lbEluZGV4KTsKK2Jvb2wgc2V0X2NoYW5uZWwodm9pZCAqcERldmljZUhhbmRsZXIsIHVuc2lnbmVkIGludCB1Q29ubmVjdGlvbkNoYW5uZWwpOwordm9pZCBzZXRfY291bnRyeV9pbmZvKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCBDQVJEX1BIWV9UWVBFIGVQSFlUeXBlLCB2b2lkICpwSUUpOwordW5zaWduZWQgY2hhciBzZXRfc3VwcG9ydF9jaGFubmVscyh2b2lkICpwRGV2aWNlSGFuZGxlciwgdW5zaWduZWQgY2hhciAqcGJ5SUVzKTsKK3ZvaWQgc2V0X2NvdW50cnlfSUUodm9pZCAqcERldmljZUhhbmRsZXIsIHZvaWQgKnBJRSk7Citib29sIGdldF9jaGFubmVsX21hcF9pbmZvKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCB1bnNpZ25lZCBpbnQgdUNoYW5uZWxJbmRleCwKKwkJdW5zaWduZWQgY2hhciAqcGJ5Q2hhbm5lbE51bWJlciwgdW5zaWduZWQgY2hhciAqcGJ5TWFwKTsKK3ZvaWQgc2V0X2NoYW5uZWxfbWFwX2luZm8odm9pZCAqcERldmljZUhhbmRsZXIsIHVuc2lnbmVkIGludCB1Q2hhbm5lbEluZGV4LAorCQl1bnNpZ25lZCBjaGFyIGJ5TWFwKTsKK3ZvaWQgY2xlYXJfY2hhbm5lbF9tYXBfaW5mbyh2b2lkICpwRGV2aWNlSGFuZGxlcik7Cit1bnNpZ25lZCBjaGFyIGF1dG9fY2hhbm5lbF9zZWxlY3Qodm9pZCAqcERldmljZUhhbmRsZXIsIENBUkRfUEhZX1RZUEUgZVBIWVR5cGUpOworCisKKyNlbmRpZiAvKiBfQ0hBTk5FTF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9jb3VudHJ5LmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NvdW50cnkuaAppbmRleCAyMDA1ZDI3Li4wNWZkYTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NvdW50cnkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NvdW50cnkuaApAQCAtMTU5LDE5ICsxNTksNCBAQAogICAgIENDT0RFX01BWAogfSBDT1VOVFJZX0NPREU7CiAKLXR5cGVkZWYgc3RydWN0IHRhZ1NDb3VudHJ5VGFibGUKLXsKLSAgICBCWVRFICAgIGJ5Q2hhbm5lbENvdW50cnlDb2RlOyAgICAgICAgICAgICAvKiBUaGUgY291bnRyeSBjb2RlICAgICAgICAgKi8KLSAgICBDSEFSICAgIGNoQ291bnRyeUNvZGVbMl07Ci0gICAgQllURSAgICBiQ2hhbm5lbElkeExpc3RbQ0JfTUFYX0NIQU5ORUxdOyAgLyogQXZhaWxhYmxlIGNoYW5uZWxzIEluZGV4ICovCi0gICAgQllURSAgICBieVBvd2VyW0NCX01BWF9DSEFOTkVMXTsKLX0gICBTQ291bnRyeVRhYmxlLCAqUFNDb3VudHJ5VGFibGU7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgQ2xhc3NlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgVmFyaWFibGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1leHRlcm4gU0NvdW50cnlUYWJsZSBDaGFubmVsUnVsZVRhYltDQ09ERV9NQVgrMV07Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KICNlbmRpZiAgLyogX19DT1VOVFJZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kYXRhcmF0ZS5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kYXRhcmF0ZS5jCmluZGV4IDM4YjA5YTcuLmVmYmI4ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGF0YXJhdGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RhdGFyYXRlLmMKQEAgLTUxLDExICs1MSwxMSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBDbGFzc2VzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCi0gZXh0ZXJuIFdPUkQgVHhSYXRlX2l3Y29uZmlnOyAvLzIwMDgtNS04IDxhZGQ+IGJ5IGNoZXN0ZXIKKyBleHRlcm4gdW5zaWduZWQgc2hvcnQgVHhSYXRlX2l3Y29uZmlnOyAvLzIwMDgtNS04IDxhZGQ+IGJ5IGNoZXN0ZXIKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgVmFyaWFibGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvL3N0YXRpYyBpbnQgICAgICAgICAgbXNnbGV2ZWwgICAgICAgICAgICAgICAgPU1TR19MRVZFTF9ERUJVRzsKIHN0YXRpYyBpbnQgICAgICAgICAgbXNnbGV2ZWwgICAgICAgICAgICAgICAgPU1TR19MRVZFTF9JTkZPOwotY29uc3QgQllURSBhY2J5SUVSYXRlW01BWF9SQVRFXSA9Citjb25zdCB1bnNpZ25lZCBjaGFyIGFjYnlJRVJhdGVbTUFYX1JBVEVdID0KIHsweDAyLCAweDA0LCAweDBCLCAweDE2LCAweDBDLCAweDEyLCAweDE4LCAweDI0LCAweDMwLCAweDQ4LCAweDYwLCAweDZDfTsKIAogI2RlZmluZSBBVVRPUkFURV9UWE9LX0NOVCAgICAgICAweDA0MDAKQEAgLTc1LDcgKzc1LDcgQEAKICAgICBQS25vd25Ob2RlREIgcHNOb2RlREJUYWJsZQogICAgICkKIHsKLSAgICBCWVRFICAgICAgICAgICAgaWk7CisgICAgdW5zaWduZWQgY2hhciBpaTsKIAogICAgIC8vIGNsZWFyIHN0YXRpc3RpYyBjb3VudGVyIGZvciBhdXRvX3JhdGUKICAgICBmb3IoaWk9MDtpaTw9TUFYX1JBVEU7aWkrKykgewpAQCAtOTcsMTkgKzk3LDE5IEBACiAgKgogICogUGFyYW1ldGVyczoKICAqICBJbjoKLSAqICAgICAgQllURSAgICAtIFJhdGUgdmFsdWUgaW4gU3VwcFJhdGVzIElFIG9yIEV4dFN1cHBSYXRlcyBJRQorICogICAgICB1bnNpZ25lZCBjaGFyIC0gUmF0ZSB2YWx1ZSBpbiBTdXBwUmF0ZXMgSUUgb3IgRXh0U3VwcFJhdGVzIElFCiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgogICogUmV0dXJuIFZhbHVlOiBSYXRlSWR4CiAgKgogLSovCi1CWVRFCit1bnNpZ25lZCBjaGFyCiBEQVRBUkFURWJ5R2V0UmF0ZUlkeCAoCi0gICAgQllURSBieVJhdGUKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UmF0ZQogICAgICkKIHsKLSAgICBCWVRFICAgIGlpOworICAgIHVuc2lnbmVkIGNoYXIgaWk7CiAKICAgICAvL0VyYXNlIGJhc2ljUmF0ZSBmbGFnLgogICAgIGJ5UmF0ZSA9IGJ5UmF0ZSAmIDB4N0Y7Ly8wMTExIDExMTEKQEAgLTE1MSwxOSArMTUxLDE5IEBACiAgKgogICogUGFyYW1ldGVyczoKICAqICBJbjoKLSAqICAgICAgQllURSAgICAtIFJhdGUgdmFsdWUgaW4gU3VwcFJhdGVzIElFIG9yIEV4dFN1cHBSYXRlcyBJRQorICogICAgICB1bnNpZ25lZCBjaGFyIC0gUmF0ZSB2YWx1ZSBpbiBTdXBwUmF0ZXMgSUUgb3IgRXh0U3VwcFJhdGVzIElFCiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgogICogUmV0dXJuIFZhbHVlOiBSYXRlSWR4CiAgKgogLSovCi1XT1JECit1bnNpZ25lZCBzaG9ydAogd0dldFJhdGVJZHgoCi0gICAgQllURSBieVJhdGUKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UmF0ZQogICAgICkKIHsKLSAgICBXT1JEICAgIGlpOworICAgIHVuc2lnbmVkIHNob3J0IGlpOwogCiAgICAgLy9FcmFzZSBiYXNpY1JhdGUgZmxhZy4KICAgICBieVJhdGUgPSBieVJhdGUgJiAweDdGOy8vMDExMSAxMTExCkBAIC0xOTksMjAgKzE5OSwyMCBAQAogICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEl0ZW1SYXRlcywKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBJdGVtRXh0UmF0ZXMsCi0gICAgQk9PTCBiVXBkYXRlQmFzaWNSYXRlLAotICAgIFBXT1JEIHB3TWF4QmFzaWNSYXRlLAotICAgIFBXT1JEIHB3TWF4U3VwcFJhdGUsCi0gICAgUFdPUkQgcHdTdXBwUmF0ZSwKLSAgICBQQllURSBwYnlUb3BDQ0tSYXRlLAotICAgIFBCWVRFIHBieVRvcE9GRE1SYXRlCisgICAgYm9vbCBiVXBkYXRlQmFzaWNSYXRlLAorICAgIHVuc2lnbmVkIHNob3J0ICpwd01heEJhc2ljUmF0ZSwKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdNYXhTdXBwUmF0ZSwKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdTdXBwUmF0ZSwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlUb3BDQ0tSYXRlLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieVRvcE9GRE1SYXRlCiAgICAgKQogewogUFNEZXZpY2UgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotVUlOVCAgaWk7Ci1CWVRFICBieUhpZ2hTdXBwUmF0ZSA9IDA7Ci1CWVRFICBieVJhdGUgPSAwOwotV09SRCAgd09sZEJhc2ljUmF0ZSA9IHBEZXZpY2UtPndCYXNpY1JhdGU7Ci1VSU5UICB1UmF0ZUxlbjsKK3Vuc2lnbmVkIGludCBpaTsKK3Vuc2lnbmVkIGNoYXIgYnlIaWdoU3VwcFJhdGUgPSAwOwordW5zaWduZWQgY2hhciBieVJhdGUgPSAwOwordW5zaWduZWQgc2hvcnQgd09sZEJhc2ljUmF0ZSA9IHBEZXZpY2UtPndCYXNpY1JhdGU7Cit1bnNpZ25lZCBpbnQgdVJhdGVMZW47CiAKIAogICAgIGlmIChwSXRlbVJhdGVzID09IE5VTEwpCkBAIC0yMzEsMTQgKzIzMSwxNCBAQAogICAgIH0KIAogICAgIGZvciAoaWkgPSAwOyBpaSA8IHVSYXRlTGVuOyBpaSsrKSB7Ci0gICAgCWJ5UmF0ZSA9IChCWVRFKShwSXRlbVJhdGVzLT5hYnlSYXRlc1tpaV0pOworICAgIAlieVJhdGUgPSAodW5zaWduZWQgY2hhcikocEl0ZW1SYXRlcy0+YWJ5UmF0ZXNbaWldKTsKICAgICAgICAgaWYgKFdMQU5fTUdNVF9JU19CQVNJQ1JBVEUoYnlSYXRlKSAmJgotICAgICAgICAgICAgKGJVcGRhdGVCYXNpY1JhdGUgPT0gVFJVRSkpICB7CisgICAgICAgICAgICAoYlVwZGF0ZUJhc2ljUmF0ZSA9PSB0cnVlKSkgIHsKICAgICAgICAgICAgIC8vIEFkZCB0byBiYXNpYyByYXRlIHNldCwgdXBkYXRlIHBEZXZpY2UtPmJ5VG9wQ0NLQmFzaWNSYXRlIGFuZCBwRGV2aWNlLT5ieVRvcE9GRE1CYXNpY1JhdGUKICAgICAgICAgICAgIENBUkRiQWRkQmFzaWNSYXRlKCh2b2lkICopcERldmljZSwgd0dldFJhdGVJZHgoYnlSYXRlKSk7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIlBhcnNlTWF4UmF0ZSBBZGRCYXNpY1JhdGU6ICVkXG4iLCB3R2V0UmF0ZUlkeChieVJhdGUpKTsKICAgICAgICAgfQotICAgICAgICBieVJhdGUgPSAoQllURSkocEl0ZW1SYXRlcy0+YWJ5UmF0ZXNbaWldJjB4N0YpOworICAgICAgICBieVJhdGUgPSAodW5zaWduZWQgY2hhcikocEl0ZW1SYXRlcy0+YWJ5UmF0ZXNbaWldJjB4N0YpOwogICAgICAgICBpZiAoYnlIaWdoU3VwcFJhdGUgPT0gMCkKICAgICAgICAgICAgIGJ5SGlnaFN1cHBSYXRlID0gYnlSYXRlOwogICAgICAgICBpZiAoYnlSYXRlID4gYnlIaWdoU3VwcFJhdGUpCkBAIC0yNDgsMjAgKzI0OCwyMCBAQAogICAgIGlmICgocEl0ZW1FeHRSYXRlcyAhPSBOVUxMKSAmJiAocEl0ZW1FeHRSYXRlcy0+YnlFbGVtZW50SUQgPT0gV0xBTl9FSURfRVhUU1VQUF9SQVRFUykgJiYKICAgICAgICAgKHBEZXZpY2UtPmVDdXJyZW50UEhZVHlwZSAhPSBQSFlfVFlQRV8xMUIpKSB7CiAKLSAgICAgICAgVUlOVCAgdUV4dFJhdGVMZW4gPSBwSXRlbUV4dFJhdGVzLT5sZW47CisgICAgICAgIHVuc2lnbmVkIGludCB1RXh0UmF0ZUxlbiA9IHBJdGVtRXh0UmF0ZXMtPmxlbjsKIAogICAgICAgICBpZiAodUV4dFJhdGVMZW4gPiBXTEFOX1JBVEVTX01BWExFTikKICAgICAgICAgICAgIHVFeHRSYXRlTGVuID0gV0xBTl9SQVRFU19NQVhMRU47CiAKICAgICAgICAgZm9yIChpaSA9IDA7IGlpIDwgdUV4dFJhdGVMZW4gOyBpaSsrKSB7Ci0gICAgICAgICAgICBieVJhdGUgPSAoQllURSkocEl0ZW1FeHRSYXRlcy0+YWJ5UmF0ZXNbaWldKTsKKyAgICAgICAgICAgIGJ5UmF0ZSA9ICh1bnNpZ25lZCBjaGFyKShwSXRlbUV4dFJhdGVzLT5hYnlSYXRlc1tpaV0pOwogICAgICAgICAgICAgLy8gc2VsZWN0IGhpZ2hlc3QgYmFzaWMgcmF0ZQogICAgICAgICAgICAgaWYgKFdMQU5fTUdNVF9JU19CQVNJQ1JBVEUocEl0ZW1FeHRSYXRlcy0+YWJ5UmF0ZXNbaWldKSkgewogICAgICAgICAgICAgCS8vIEFkZCB0byBiYXNpYyByYXRlIHNldCwgdXBkYXRlIHBEZXZpY2UtPmJ5VG9wQ0NLQmFzaWNSYXRlIGFuZCBwRGV2aWNlLT5ieVRvcE9GRE1CYXNpY1JhdGUKICAgICAgICAgICAgICAgICBDQVJEYkFkZEJhc2ljUmF0ZSgodm9pZCAqKXBEZXZpY2UsIHdHZXRSYXRlSWR4KGJ5UmF0ZSkpOwogICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iUGFyc2VNYXhSYXRlIEFkZEJhc2ljUmF0ZTogJWRcbiIsIHdHZXRSYXRlSWR4KGJ5UmF0ZSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnlSYXRlID0gKEJZVEUpKHBJdGVtRXh0UmF0ZXMtPmFieVJhdGVzW2lpXSYweDdGKTsKKyAgICAgICAgICAgIGJ5UmF0ZSA9ICh1bnNpZ25lZCBjaGFyKShwSXRlbUV4dFJhdGVzLT5hYnlSYXRlc1tpaV0mMHg3Rik7CiAgICAgICAgICAgICBpZiAoYnlIaWdoU3VwcFJhdGUgPT0gMCkKICAgICAgICAgICAgICAgICBieUhpZ2hTdXBwUmF0ZSA9IGJ5UmF0ZTsKICAgICAgICAgICAgIGlmIChieVJhdGUgPiBieUhpZ2hTdXBwUmF0ZSkKQEAgLTMxNCwxNCArMzE0LDE0IEBACiAgICAgKQogewogUFNEZXZpY2UgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotV09SRCAgICAgICAgICAgIHdJZHhEb3duUmF0ZSA9IDA7Ci1VSU5UICAgICAgICAgICAgaWk7Ci0vL0RXT1JEICAgICAgICAgICBkd1JhdGVUYWJsZVtNQVhfUkFURV0gID0gezEsICAgMiwgICA1LCAgIDExLCAgNiwgICAgOSwgICAgMTIsICAgMTgsICAyNCwgIDM2LCAgNDgsICA1NH07Ci1CT09MICAgICAgICAgICAgYkF1dG9SYXRlW01BWF9SQVRFXSAgICA9IHtUUlVFLFRSVUUsVFJVRSxUUlVFLEZBTFNFLEZBTFNFLFRSVUUsVFJVRSxUUlVFLFRSVUUsVFJVRSxUUlVFfTsKLURXT1JEICAgICAgICAgICBkd1Rocm91Z2hwdXRUYmxbTUFYX1JBVEVdID0gezEwLCAyMCwgNTUsIDExMCwgNjAsIDkwLCAxMjAsIDE4MCwgMjQwLCAzNjAsIDQ4MCwgNTQwfTsKLURXT1JEICAgICAgICAgICBkd1Rocm91Z2hwdXQgPSAwOwotV09SRCAgICAgICAgICAgIHdJZHhVcFJhdGUgPSAwOwotRFdPUkQgICAgICAgICAgIGR3VHhEaWZmID0gMDsKK3Vuc2lnbmVkIHNob3J0IHdJZHhEb3duUmF0ZSA9IDA7Cit1bnNpZ25lZCBpbnQgaWk7CisvL3Vuc2lnbmVkIGxvbmcgZHdSYXRlVGFibGVbTUFYX1JBVEVdICA9IHsxLCAgIDIsICAgNSwgICAxMSwgIDYsICAgIDksICAgIDEyLCAgIDE4LCAgMjQsICAzNiwgIDQ4LCAgNTR9OworYm9vbCBiQXV0b1JhdGVbTUFYX1JBVEVdICAgID0ge3RydWUsdHJ1ZSx0cnVlLHRydWUsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWV9OworCXVuc2lnbmVkIGxvbmcgZHdUaHJvdWdocHV0VGJsW01BWF9SQVRFXSA9IHsxMCwgMjAsIDU1LCAxMTAsIDYwLCA5MCwgMTIwLCAxODAsIDI0MCwgMzYwLCA0ODAsIDU0MH07CisJdW5zaWduZWQgbG9uZyBkd1Rocm91Z2hwdXQgPSAwOworCXVuc2lnbmVkIHNob3J0IHdJZHhVcFJhdGUgPSAwOworCXVuc2lnbmVkIGxvbmcgZHdUeERpZmYgPSAwOwogCiAgICAgaWYgKHBEZXZpY2UtPnBNZ210LT5lU2NhblN0YXRlICE9IFdNQUNfTk9fU0NBTk5JTkcpIHsKICAgICAgICAgLy8gRG9uJ3QgZG8gRmFsbGJhY2sgd2hlbiBzY2FubmluZyBDaGFubmVsCkBAIC0zNDYsMTEgKzM0NiwxMSBAQAogCiAgICAgZm9yKGlpPTA7aWk8TUFYX1JBVEU7aWkrKykgewogICAgICAgICBpZiAocHNOb2RlREJUYWJsZS0+d1N1cHBSYXRlICYgKDB4MDAwMTw8aWkpKSB7Ci0gICAgICAgICAgICBpZiAoYkF1dG9SYXRlW2lpXSA9PSBUUlVFKSB7Ci0gICAgICAgICAgICAgICAgd0lkeFVwUmF0ZSA9IChXT1JEKSBpaTsKKyAgICAgICAgICAgIGlmIChiQXV0b1JhdGVbaWldID09IHRydWUpIHsKKyAgICAgICAgICAgICAgICB3SWR4VXBSYXRlID0gKHVuc2lnbmVkIHNob3J0KSBpaTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJBdXRvUmF0ZVtpaV0gPSBGQUxTRTsKKyAgICAgICAgICAgIGJBdXRvUmF0ZVtpaV0gPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzcyLDkgKzM3Miw5IEBACiAgICAgZm9yKGlpID0gcHNOb2RlREJUYWJsZS0+d1R4RGF0YVJhdGU7IGlpID4gMDspIHsKICAgICAgICAgaWktLTsKICAgICAgICAgaWYgKCAoZHdUaHJvdWdocHV0VGJsW2lpXSA+IGR3VGhyb3VnaHB1dCkgJiYKLSAgICAgICAgICAgICAoYkF1dG9SYXRlW2lpXT09VFJVRSkgKSB7CisgICAgICAgICAgICAgKGJBdXRvUmF0ZVtpaV09PXRydWUpICkgewogICAgICAgICAgICAgZHdUaHJvdWdocHV0ID0gZHdUaHJvdWdocHV0VGJsW2lpXTsKLSAgICAgICAgICAgIHdJZHhEb3duUmF0ZSA9IChXT1JEKSBpaTsKKyAgICAgICAgICAgIHdJZHhEb3duUmF0ZSA9ICh1bnNpZ25lZCBzaG9ydCkgaWk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcHNOb2RlREJUYWJsZS0+d1R4RGF0YVJhdGUgPSB3SWR4RG93blJhdGU7CkBAIC00MDksMTQgKzQwOSwxNCBAQAogICogUmV0dXJuIFZhbHVlOiBOb25lCiAgKgogLSovCi1CWVRFCit1bnNpZ25lZCBjaGFyCiBSQVRFdVNldElFICgKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBTcmNSYXRlcywKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBEc3RSYXRlcywKLSAgICBVSU5UICAgICAgICAgICAgICAgIHVSYXRlTGVuCisgICAgdW5zaWduZWQgaW50IHVSYXRlTGVuCiAgICAgKQogewotICAgIFVJTlQgaWksIHV1LCB1UmF0ZUNudCA9IDA7CisgICAgdW5zaWduZWQgaW50IGlpLCB1dSwgdVJhdGVDbnQgPSAwOwogCiAgICAgaWYgKChwU3JjUmF0ZXMgPT0gTlVMTCkgfHwgKHBEc3RSYXRlcyA9PSBOVUxMKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC00MzIsNiArNDMyLDYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gKEJZVEUpdVJhdGVDbnQ7CisgICAgcmV0dXJuICh1bnNpZ25lZCBjaGFyKXVSYXRlQ250OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RhdGFyYXRlLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RhdGFyYXRlLmgKaW5kZXggYjhjYTc5Mi4uNGY4ZWEwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kYXRhcmF0ZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGF0YXJhdGUuaApAQCAtNTksMTIgKzU5LDEyIEBACiAgICAgdm9pZCAqcERldmljZUhhbmRsZXIsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwSXRlbVJhdGVzLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEl0ZW1FeHRSYXRlcywKLSAgICBCT09MIGJVcGRhdGVCYXNpY1JhdGUsCi0gICAgUFdPUkQgcHdNYXhCYXNpY1JhdGUsCi0gICAgUFdPUkQgcHdNYXhTdXBwUmF0ZSwKLSAgICBQV09SRCBwd1N1cHBSYXRlLAotICAgIFBCWVRFIHBieVRvcENDS1JhdGUsCi0gICAgUEJZVEUgcGJ5VG9wT0ZETVJhdGUKKyAgICBib29sIGJVcGRhdGVCYXNpY1JhdGUsCisgICAgdW5zaWduZWQgc2hvcnQgKnB3TWF4QmFzaWNSYXRlLAorICAgIHVuc2lnbmVkIHNob3J0ICpwd01heFN1cHBSYXRlLAorICAgIHVuc2lnbmVkIHNob3J0ICpwd1N1cHBSYXRlLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieVRvcENDS1JhdGUsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5VG9wT0ZETVJhdGUKICAgICApOwogCiB2b2lkCkBAIC03MywyMiArNzMsMjIgQEAKICAgICBQS25vd25Ob2RlREIgcHNOb2RlREJUYWJsZQogICAgICk7CiAKLUJZVEUKK3Vuc2lnbmVkIGNoYXIKIFJBVEV1U2V0SUUoCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwU3JjUmF0ZXMsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwRHN0UmF0ZXMsCi0gICAgVUlOVCAgICAgICAgICAgICAgICB1UmF0ZUxlbgorICAgIHVuc2lnbmVkIGludCB1UmF0ZUxlbgogICAgICk7CiAKLVdPUkQKK3Vuc2lnbmVkIHNob3J0CiB3R2V0UmF0ZUlkeCgKLSAgICBCWVRFIGJ5UmF0ZQorICAgIHVuc2lnbmVkIGNoYXIgYnlSYXRlCiAgICAgKTsKIAogCi1CWVRFCit1bnNpZ25lZCBjaGFyCiBEQVRBUkFURWJ5R2V0UmF0ZUlkeCgKLSAgICBCWVRFIGJ5UmF0ZQorICAgIHVuc2lnbmVkIGNoYXIgYnlSYXRlCiAgICAgKTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Rlc2MuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGVzYy5oCmluZGV4IGNlZGIxZTcuLjEzODg5N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGVzYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGVzYy5oCkBAIC0yNDQsMTAgKzI0NCwxMCBAQAogCiAvKgogdHlwZWRlZiBzdHJ1Y3QgdGFnUkRFUzAgewotICAgIFdPUkQgICAgd1Jlc0NvdW50OwotICAgIFdPUkQgICAgd2YxT3duZXIgOwotLy8gICAgV09SRCAgICBmMTVSZXNlcnZlZCA6IDE1OwotLy8gICAgV09SRCAgICBmMU93bmVyIDogMTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmVzQ291bnQ7CisgICAgdW5zaWduZWQgc2hvcnQgd2YxT3duZXIgOworLy8gICAgdW5zaWduZWQgc2hvcnQgZjE1UmVzZXJ2ZWQgOiAxNTsKKy8vICAgIHVuc2lnbmVkIHNob3J0IGYxT3duZXIgOiAxOwogfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTUkRFUzA7CiAqLwpAQCAtMjU1LDEzICsyNTUsMTMgQEAKICNpZmRlZiBfX0JJR19FTkRJQU4KIAogdHlwZWRlZiBzdHJ1Y3QgdGFnUkRFUzAgewotICAgdm9sYXRpbGUgV09SRCAgICB3UmVzQ291bnQ7CisgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCB3UmVzQ291bnQ7CiAJdW5pb24gewotCQl2b2xhdGlsZSBVMTYgICAgZjE1UmVzZXJ2ZWQ7CisJCXZvbGF0aWxlIHUxNiAgICBmMTVSZXNlcnZlZDsKIAkJc3RydWN0IHsKLSAgICAgICAgICAgIHZvbGF0aWxlIFU4IGY4UmVzZXJ2ZWQxOwotCQkJdm9sYXRpbGUgVTggZjFPd25lcjoxOwotCQkJdm9sYXRpbGUgVTggZjdSZXNlcnZlZDo3OworICAgICAgICAgICAgdm9sYXRpbGUgdTggZjhSZXNlcnZlZDE7CisJCQl2b2xhdGlsZSB1OCBmMU93bmVyOjE7CisJCQl2b2xhdGlsZSB1OCBmN1Jlc2VydmVkOjc7CiAJCX0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKIAl9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CiB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKQEAgLTI3MCw5ICsyNzAsOSBAQAogI2Vsc2UKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnUkRFUzAgewotICAgIFdPUkQgICAgd1Jlc0NvdW50OwotICAgIFdPUkQgICAgZjE1UmVzZXJ2ZWQgOiAxNTsKLSAgICBXT1JEICAgIGYxT3duZXIgOiAxOworICAgIHVuc2lnbmVkIHNob3J0IHdSZXNDb3VudDsKKyAgICB1bnNpZ25lZCBzaG9ydCBmMTVSZXNlcnZlZCA6IDE1OworICAgIHVuc2lnbmVkIHNob3J0IGYxT3duZXIgOiAxOwogfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTUkRFUzA7CiAKQEAgLTI4MCw4ICsyODAsOCBAQAogI2VuZGlmCiAKIHR5cGVkZWYgc3RydWN0IHRhZ1JERVMxIHsKLSAgICBXT1JEICAgd1JlcUNvdW50OwotICAgIFdPUkQgICB3UmVzZXJ2ZWQ7CisgICAgdW5zaWduZWQgc2hvcnQgd1JlcUNvdW50OworICAgIHVuc2lnbmVkIHNob3J0IHdSZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1JERVMxOwogCkBAIC0yOTEsMTEgKzI5MSwxMSBAQAogdHlwZWRlZiBzdHJ1Y3QgdGFnU1J4RGVzYyB7CiAgICAgdm9sYXRpbGUgU1JERVMwIG1fcmQwUkQwOwogICAgIHZvbGF0aWxlIFNSREVTMSBtX3JkMVJEMTsKLSAgICB2b2xhdGlsZSBVMzIgICAgYnVmZl9hZGRyOwotICAgIHZvbGF0aWxlIFUzMiAgICBuZXh0X2Rlc2M7CisgICAgdm9sYXRpbGUgdTMyICAgIGJ1ZmZfYWRkcjsKKyAgICB2b2xhdGlsZSB1MzIgICAgbmV4dF9kZXNjOwogICAgIHN0cnVjdCB0YWdTUnhEZXNjICAgKm5leHQ7Ly80IGJ5dGVzCiAgICAgdm9sYXRpbGUgUERFVklDRV9SRF9JTkZPICAgIHBSREluZm87Ly80IGJ5dGVzCi0gICAgdm9sYXRpbGUgVTMyICAgIFJlc2VydmVkWzJdOy8vOCBieXRlcworICAgIHZvbGF0aWxlIHUzMiAgICBSZXNlcnZlZFsyXTsvLzggYnl0ZXMKIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1J4RGVzYywgKlBTUnhEZXNjOwogdHlwZWRlZiBjb25zdCBTUnhEZXNjICpQQ1NSeERlc2M7CkBAIC0zMDQsMjQgKzMwNCwyNCBAQAogCiAvKgogdHlwZWRlZiBzdHJ1Y3QgdGFnVERFUzAgewotICAgIHZvbGF0aWxlICAgIEJZVEUgICAgYnlUU1IwOwotICAgIHZvbGF0aWxlICAgIEJZVEUgICAgYnlUU1IxOwotICAgIHZvbGF0aWxlICAgIFdPUkQgICAgd093bmVyX1R4dGltZTsKLS8vICAgIHZvbGF0aWxlICAgIFdPUkQgICAgZjE1VHh0aW1lIDogMTU7Ci0vLyAgICB2b2xhdGlsZSAgICBXT1JEICAgIGYxT3duZXI6MTsKKyAgICB2b2xhdGlsZSAgICB1bnNpZ25lZCBjaGFyIGJ5VFNSMDsKKyAgICB2b2xhdGlsZSAgICB1bnNpZ25lZCBjaGFyIGJ5VFNSMTsKKyAgICB2b2xhdGlsZSAgICB1bnNpZ25lZCBzaG9ydCB3T3duZXJfVHh0aW1lOworLy8gICAgdm9sYXRpbGUgICAgdW5zaWduZWQgc2hvcnQgZjE1VHh0aW1lIDogMTU7CisvLyAgICB2b2xhdGlsZSAgICB1bnNpZ25lZCBzaG9ydCBmMU93bmVyOjE7CiB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNUREVTMDsKICovCiAKIHR5cGVkZWYgc3RydWN0IHRhZ1RERVMwIHsKLSAgICB2b2xhdGlsZSAgICBCWVRFICAgIGJ5VFNSMDsKLSAgICB2b2xhdGlsZSAgICBCWVRFICAgIGJ5VFNSMTsKKyAgICB2b2xhdGlsZSAgICB1bnNpZ25lZCBjaGFyIGJ5VFNSMDsKKyAgICB2b2xhdGlsZSAgICB1bnNpZ25lZCBjaGFyIGJ5VFNSMTsKIAl1bmlvbiB7Ci0JCXZvbGF0aWxlIFUxNiAgICBmMTVUeHRpbWU7CisJCXZvbGF0aWxlIHUxNiAgICBmMTVUeHRpbWU7CiAJCXN0cnVjdCB7Ci0gICAgICAgICAgICB2b2xhdGlsZSBVOCBmOFJlc2VydmVkMTsKLQkJCXZvbGF0aWxlIFU4IGYxT3duZXI6MTsKLQkJCXZvbGF0aWxlIFU4IGY3UmVzZXJ2ZWQ6NzsKKyAgICAgICAgICAgIHZvbGF0aWxlIHU4IGY4UmVzZXJ2ZWQxOworCQkJdm9sYXRpbGUgdTggZjFPd25lcjoxOworCQkJdm9sYXRpbGUgdTggZjdSZXNlcnZlZDo3OwogCQl9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CiAJfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOwogfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCkBAIC0zMzAsMTAgKzMzMCwxMCBAQAogI2Vsc2UKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnVERFUzAgewotICAgIHZvbGF0aWxlICAgIEJZVEUgICAgYnlUU1IwOwotICAgIHZvbGF0aWxlICAgIEJZVEUgICAgYnlUU1IxOwotICAgIHZvbGF0aWxlICAgIFdPUkQgICAgZjE1VHh0aW1lIDogMTU7Ci0gICAgdm9sYXRpbGUgICAgV09SRCAgICBmMU93bmVyOjE7CisgICAgdm9sYXRpbGUgICAgdW5zaWduZWQgY2hhciBieVRTUjA7CisgICAgdm9sYXRpbGUgICAgdW5zaWduZWQgY2hhciBieVRTUjE7CisgICAgdm9sYXRpbGUgICAgdW5zaWduZWQgc2hvcnQgZjE1VHh0aW1lIDogMTU7CisgICAgdm9sYXRpbGUgICAgdW5zaWduZWQgc2hvcnQgZjFPd25lcjoxOwogfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTVERFUzA7CiAKQEAgLTM0MSwyMiArMzQxLDIyIEBACiAKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnVERFUzEgewotICAgIHZvbGF0aWxlICAgIFdPUkQgICAgd1JlcUNvdW50OwotICAgIHZvbGF0aWxlICAgIEJZVEUgICAgYnlUQ1I7Ci0gICAgdm9sYXRpbGUgICAgQllURSAgICBieVJlc2VydmVkOworICAgIHZvbGF0aWxlICAgIHVuc2lnbmVkIHNob3J0IHdSZXFDb3VudDsKKyAgICB2b2xhdGlsZSAgICB1bnNpZ25lZCBjaGFyIGJ5VENSOworICAgIHZvbGF0aWxlICAgIHVuc2lnbmVkIGNoYXIgYnlSZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1RERVMxOwogCiAKIHR5cGVkZWYgc3RydWN0IHRhZ0RFVklDRV9URF9JTkZPewogICAgIHN0cnVjdCBza19idWZmKiAgICAgc2tiOwotICAgIFBCWVRFICAgICAgICAgICAgICAgYnVmOworICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZjsKICAgICBkbWFfYWRkcl90ICAgICAgICAgIHNrYl9kbWE7CiAgICAgZG1hX2FkZHJfdCAgICAgICAgICBidWZfZG1hOwogICAgIGRtYV9hZGRyX3QgICAgICAgICAgY3Vycl9kZXNjOwotICAgIERXT1JEICAgICAgICAgICAgICAgZHdSZXFDb3VudDsKLSAgICBEV09SRCAgICAgICAgICAgICAgIGR3SGVhZGVyTGVuZ3RoOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlGbGFnczsKKyAgICB1bnNpZ25lZCBsb25nIGR3UmVxQ291bnQ7CisgICAgdW5zaWduZWQgbG9uZyBkd0hlYWRlckxlbmd0aDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RmxhZ3M7CiB9IERFVklDRV9URF9JTkZPLCAgICAqUERFVklDRV9URF9JTkZPOwogCiAvKgpAQCAtMzc4LDExICszNzgsMTEgQEAKIHR5cGVkZWYgc3RydWN0IHRhZ1NUeERlc2MgewogICAgIHZvbGF0aWxlICAgIFNUREVTMCAgbV90ZDBURDA7CiAgICAgdm9sYXRpbGUgICAgU1RERVMxICBtX3RkMVREMTsKLSAgICB2b2xhdGlsZSAgICBVMzIgICAgYnVmZl9hZGRyOwotICAgIHZvbGF0aWxlICAgIFUzMiAgICBuZXh0X2Rlc2M7CisgICAgdm9sYXRpbGUgICAgdTMyICAgIGJ1ZmZfYWRkcjsKKyAgICB2b2xhdGlsZSAgICB1MzIgICAgbmV4dF9kZXNjOwogICAgIHN0cnVjdCB0YWdTVHhEZXNjKiAgbmV4dDsgLy80IGJ5dGVzCiAgICAgdm9sYXRpbGUgICAgUERFVklDRV9URF9JTkZPIHBUREluZm87Ly80IGJ5dGVzCi0gICAgdm9sYXRpbGUgICAgVTMyICAgIFJlc2VydmVkWzJdOy8vOCBieXRlcworICAgIHZvbGF0aWxlICAgIHUzMiAgICBSZXNlcnZlZFsyXTsvLzggYnl0ZXMKIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1R4RGVzYywgKlBTVHhEZXNjOwogdHlwZWRlZiBjb25zdCBTVHhEZXNjICpQQ1NUeERlc2M7CkBAIC0zOTEsMTMgKzM5MSwxMyBAQAogdHlwZWRlZiBzdHJ1Y3QgdGFnU1R4U3luY0Rlc2MgewogICAgIHZvbGF0aWxlICAgIFNUREVTMCAgbV90ZDBURDA7CiAgICAgdm9sYXRpbGUgICAgU1RERVMxICBtX3RkMVREMTsKLSAgICB2b2xhdGlsZSAgICBEV09SRCAgIGJ1ZmZfYWRkcjsgLy8gcG9pbnRlciB0byBsb2dpY2FsIGJ1ZmZlcgotICAgIHZvbGF0aWxlICAgIERXT1JEICAgbmV4dF9kZXNjOyAvLyBwb2ludGVyIHRvIG5leHQgbG9naWNhbCBkZXNjcmlwdG9yCi0gICAgdm9sYXRpbGUgICAgV09SRCAgICBtX3dGSUZPQ3RsOwotICAgIHZvbGF0aWxlICAgIFdPUkQgICAgbV93VGltZVN0YW1wOworICAgIHZvbGF0aWxlICAgIHUzMiBidWZmX2FkZHI7IC8vIHBvaW50ZXIgdG8gbG9naWNhbCBidWZmZXIKKyAgICB2b2xhdGlsZSAgICB1MzIgbmV4dF9kZXNjOyAvLyBwb2ludGVyIHRvIG5leHQgbG9naWNhbCBkZXNjcmlwdG9yCisgICAgdm9sYXRpbGUgICAgdW5zaWduZWQgc2hvcnQgbV93RklGT0N0bDsKKyAgICB2b2xhdGlsZSAgICB1bnNpZ25lZCBzaG9ydCBtX3dUaW1lU3RhbXA7CiAgICAgc3RydWN0IHRhZ1NUeFN5bmNEZXNjKiAgbmV4dDsgLy80IGJ5dGVzCiAgICAgdm9sYXRpbGUgICAgUERFVklDRV9URF9JTkZPIHBUREluZm87Ly80IGJ5dGVzCi0gICAgdm9sYXRpbGUgICAgRFdPUkQgICBtX2R3UmVzZXJ2ZWQyOworICAgIHZvbGF0aWxlICAgIHUzMiBtX2R3UmVzZXJ2ZWQyOwogfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTVHhTeW5jRGVzYywgKlBTVHhTeW5jRGVzYzsKIHR5cGVkZWYgY29uc3QgU1R4U3luY0Rlc2MgKlBDU1R4U3luY0Rlc2M7CkBAIC00MDcsMzUgKzQwNywzNSBAQAogLy8gUnN2VGltZSBidWZmZXIgaGVhZGVyCiAvLwogdHlwZWRlZiBzdHJ1Y3QgdGFnU1JydlRpbWVfZ1JUUyB7Ci0gICAgV09SRCAgICAgICAgd1JUU1R4UnJ2VGltZV9iYTsKLSAgICBXT1JEICAgICAgICB3UlRTVHhScnZUaW1lX2FhOwotICAgIFdPUkQgICAgICAgIHdSVFNUeFJydlRpbWVfYmI7Ci0gICAgV09SRCAgICAgICAgd1Jlc2VydmVkOwotICAgIFdPUkQgICAgICAgIHdUeFJydlRpbWVfYjsKLSAgICBXT1JEICAgICAgICB3VHhScnZUaW1lX2E7CisgICAgdW5zaWduZWQgc2hvcnQgd1JUU1R4UnJ2VGltZV9iYTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UlRTVHhScnZUaW1lX2FhOworICAgIHVuc2lnbmVkIHNob3J0IHdSVFNUeFJydlRpbWVfYmI7CisgICAgdW5zaWduZWQgc2hvcnQgd1Jlc2VydmVkOworICAgIHVuc2lnbmVkIHNob3J0IHdUeFJydlRpbWVfYjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3VHhScnZUaW1lX2E7CiB9X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1JydlRpbWVfZ1JUUywgKlBTUnJ2VGltZV9nUlRTOwogdHlwZWRlZiBjb25zdCBTUnJ2VGltZV9nUlRTICpQQ1NScnZUaW1lX2dSVFM7CiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NScnZUaW1lX2dDVFMgewotICAgIFdPUkQgICAgICAgIHdDVFNUeFJydlRpbWVfYmE7Ci0gICAgV09SRCAgICAgICAgd1Jlc2VydmVkOwotICAgIFdPUkQgICAgICAgIHdUeFJydlRpbWVfYjsKLSAgICBXT1JEICAgICAgICB3VHhScnZUaW1lX2E7CisgICAgdW5zaWduZWQgc2hvcnQgd0NUU1R4UnJ2VGltZV9iYTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmVzZXJ2ZWQ7CisgICAgdW5zaWduZWQgc2hvcnQgd1R4UnJ2VGltZV9iOworICAgIHVuc2lnbmVkIHNob3J0IHdUeFJydlRpbWVfYTsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTUnJ2VGltZV9nQ1RTLCAqUFNScnZUaW1lX2dDVFM7CiB0eXBlZGVmIGNvbnN0IFNScnZUaW1lX2dDVFMgKlBDU1JydlRpbWVfZ0NUUzsKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU1JydlRpbWVfYWIgewotICAgIFdPUkQgICAgICAgIHdSVFNUeFJydlRpbWU7Ci0gICAgV09SRCAgICAgICAgd1R4UnJ2VGltZTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UlRTVHhScnZUaW1lOworICAgIHVuc2lnbmVkIHNob3J0IHdUeFJydlRpbWU7CiB9X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1JydlRpbWVfYWIsICpQU1JydlRpbWVfYWI7CiB0eXBlZGVmIGNvbnN0IFNScnZUaW1lX2FiICpQQ1NScnZUaW1lX2FiOwogCiB0eXBlZGVmIHN0cnVjdCB0YWdTUnJ2VGltZV9hdGltIHsKLSAgICBXT1JEICAgICAgICB3Q1RTVHhScnZUaW1lX2JhOwotICAgIFdPUkQgICAgICAgIHdUeFJydlRpbWVfYTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q1RTVHhScnZUaW1lX2JhOworICAgIHVuc2lnbmVkIHNob3J0IHdUeFJydlRpbWVfYTsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTUnJ2VGltZV9hdGltLCAqUFNScnZUaW1lX2F0aW07CiB0eXBlZGVmIGNvbnN0IFNScnZUaW1lX2F0aW0gKlBDU1JydlRpbWVfYXRpbTsKQEAgLTQ0NCwyNSArNDQ0LDI1IEBACiAvLyBSVFMgYnVmZmVyIGhlYWRlcgogLy8KIHR5cGVkZWYgc3RydWN0IHRhZ1NSVFNEYXRhIHsKLSAgICBXT1JEICAgIHdGcmFtZUNvbnRyb2w7Ci0gICAgV09SRCAgICB3RHVyYXRpb25JRDsKLSAgICBCWVRFICAgIGFieVJBW0VUSF9BTEVOXTsKLSAgICBCWVRFICAgIGFieVRBW0VUSF9BTEVOXTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RnJhbWVDb250cm9sOworICAgIHVuc2lnbmVkIHNob3J0IHdEdXJhdGlvbklEOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5UkFbRVRIX0FMRU5dOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5VEFbRVRIX0FMRU5dOwogfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNSVFNEYXRhLCAqUFNSVFNEYXRhOwogdHlwZWRlZiBjb25zdCBTUlRTRGF0YSAqUENTUlRTRGF0YTsKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU1JUU19nIHsKLSAgICBCWVRFICAgICAgICBieVNpZ25hbEZpZWxkX2I7Ci0gICAgQllURSAgICAgICAgYnlTZXJ2aWNlRmllbGRfYjsKLSAgICBXT1JEICAgICAgICB3VHJhbnNtaXRMZW5ndGhfYjsKLSAgICBCWVRFICAgICAgICBieVNpZ25hbEZpZWxkX2E7Ci0gICAgQllURSAgICAgICAgYnlTZXJ2aWNlRmllbGRfYTsKLSAgICBXT1JEICAgICAgICB3VHJhbnNtaXRMZW5ndGhfYTsKLSAgICBXT1JEICAgICAgICB3RHVyYXRpb25fYmE7Ci0gICAgV09SRCAgICAgICAgd0R1cmF0aW9uX2FhOwotICAgIFdPUkQgICAgICAgIHdEdXJhdGlvbl9iYjsKLSAgICBXT1JEICAgICAgICB3UmVzZXJ2ZWQ7CisgICAgdW5zaWduZWQgY2hhciBieVNpZ25hbEZpZWxkX2I7CisgICAgdW5zaWduZWQgY2hhciBieVNlcnZpY2VGaWVsZF9iOworICAgIHVuc2lnbmVkIHNob3J0IHdUcmFuc21pdExlbmd0aF9iOworICAgIHVuc2lnbmVkIGNoYXIgYnlTaWduYWxGaWVsZF9hOworICAgIHVuc2lnbmVkIGNoYXIgYnlTZXJ2aWNlRmllbGRfYTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3VHJhbnNtaXRMZW5ndGhfYTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RHVyYXRpb25fYmE7CisgICAgdW5zaWduZWQgc2hvcnQgd0R1cmF0aW9uX2FhOworICAgIHVuc2lnbmVkIHNob3J0IHdEdXJhdGlvbl9iYjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmVzZXJ2ZWQ7CiAgICAgU1JUU0RhdGEgICAgRGF0YTsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTUlRTX2csICpQU1JUU19nOwpAQCAtNDcwLDIwICs0NzAsMjAgQEAKIAogCiB0eXBlZGVmIHN0cnVjdCB0YWdTUlRTX2dfRkIgewotICAgIEJZVEUgICAgICAgIGJ5U2lnbmFsRmllbGRfYjsKLSAgICBCWVRFICAgICAgICBieVNlcnZpY2VGaWVsZF9iOwotICAgIFdPUkQgICAgICAgIHdUcmFuc21pdExlbmd0aF9iOwotICAgIEJZVEUgICAgICAgIGJ5U2lnbmFsRmllbGRfYTsKLSAgICBCWVRFICAgICAgICBieVNlcnZpY2VGaWVsZF9hOwotICAgIFdPUkQgICAgICAgIHdUcmFuc21pdExlbmd0aF9hOwotICAgIFdPUkQgICAgICAgIHdEdXJhdGlvbl9iYTsKLSAgICBXT1JEICAgICAgICB3RHVyYXRpb25fYWE7Ci0gICAgV09SRCAgICAgICAgd0R1cmF0aW9uX2JiOwotICAgIFdPUkQgICAgICAgIHdSZXNlcnZlZDsKLSAgICBXT1JEICAgICAgICB3UlRTRHVyYXRpb25fYmFfZjA7Ci0gICAgV09SRCAgICAgICAgd1JUU0R1cmF0aW9uX2FhX2YwOwotICAgIFdPUkQgICAgICAgIHdSVFNEdXJhdGlvbl9iYV9mMTsKLSAgICBXT1JEICAgICAgICB3UlRTRHVyYXRpb25fYWFfZjE7CisgICAgdW5zaWduZWQgY2hhciBieVNpZ25hbEZpZWxkX2I7CisgICAgdW5zaWduZWQgY2hhciBieVNlcnZpY2VGaWVsZF9iOworICAgIHVuc2lnbmVkIHNob3J0IHdUcmFuc21pdExlbmd0aF9iOworICAgIHVuc2lnbmVkIGNoYXIgYnlTaWduYWxGaWVsZF9hOworICAgIHVuc2lnbmVkIGNoYXIgYnlTZXJ2aWNlRmllbGRfYTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3VHJhbnNtaXRMZW5ndGhfYTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RHVyYXRpb25fYmE7CisgICAgdW5zaWduZWQgc2hvcnQgd0R1cmF0aW9uX2FhOworICAgIHVuc2lnbmVkIHNob3J0IHdEdXJhdGlvbl9iYjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmVzZXJ2ZWQ7CisgICAgdW5zaWduZWQgc2hvcnQgd1JUU0R1cmF0aW9uX2JhX2YwOworICAgIHVuc2lnbmVkIHNob3J0IHdSVFNEdXJhdGlvbl9hYV9mMDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UlRTRHVyYXRpb25fYmFfZjE7CisgICAgdW5zaWduZWQgc2hvcnQgd1JUU0R1cmF0aW9uX2FhX2YxOwogICAgIFNSVFNEYXRhICAgIERhdGE7CiB9X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1JUU19nX0ZCLCAqUFNSVFNfZ19GQjsKQEAgLTQ5MSwxMSArNDkxLDExIEBACiAKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU1JUU19hYiB7Ci0gICAgQllURSAgICAgICAgYnlTaWduYWxGaWVsZDsKLSAgICBCWVRFICAgICAgICBieVNlcnZpY2VGaWVsZDsKLSAgICBXT1JEICAgICAgICB3VHJhbnNtaXRMZW5ndGg7Ci0gICAgV09SRCAgICAgICAgd0R1cmF0aW9uOwotICAgIFdPUkQgICAgICAgIHdSZXNlcnZlZDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5U2lnbmFsRmllbGQ7CisgICAgdW5zaWduZWQgY2hhciBieVNlcnZpY2VGaWVsZDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3VHJhbnNtaXRMZW5ndGg7CisgICAgdW5zaWduZWQgc2hvcnQgd0R1cmF0aW9uOworICAgIHVuc2lnbmVkIHNob3J0IHdSZXNlcnZlZDsKICAgICBTUlRTRGF0YSAgICBEYXRhOwogfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNSVFNfYWIsICpQU1JUU19hYjsKQEAgLTUwMywxMyArNTAzLDEzIEBACiAKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU1JUU19hX0ZCIHsKLSAgICBCWVRFICAgICAgICBieVNpZ25hbEZpZWxkOwotICAgIEJZVEUgICAgICAgIGJ5U2VydmljZUZpZWxkOwotICAgIFdPUkQgICAgICAgIHdUcmFuc21pdExlbmd0aDsKLSAgICBXT1JEICAgICAgICB3RHVyYXRpb247Ci0gICAgV09SRCAgICAgICAgd1Jlc2VydmVkOwotICAgIFdPUkQgICAgICAgIHdSVFNEdXJhdGlvbl9mMDsKLSAgICBXT1JEICAgICAgICB3UlRTRHVyYXRpb25fZjE7CisgICAgdW5zaWduZWQgY2hhciBieVNpZ25hbEZpZWxkOworICAgIHVuc2lnbmVkIGNoYXIgYnlTZXJ2aWNlRmllbGQ7CisgICAgdW5zaWduZWQgc2hvcnQgd1RyYW5zbWl0TGVuZ3RoOworICAgIHVuc2lnbmVkIHNob3J0IHdEdXJhdGlvbjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmVzZXJ2ZWQ7CisgICAgdW5zaWduZWQgc2hvcnQgd1JUU0R1cmF0aW9uX2YwOworICAgIHVuc2lnbmVkIHNob3J0IHdSVFNEdXJhdGlvbl9mMTsKICAgICBTUlRTRGF0YSAgICBEYXRhOwogfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNSVFNfYV9GQiwgKlBTUlRTX2FfRkI7CkBAIC01MjAsMzIgKzUyMCwzMiBAQAogLy8gQ1RTIGJ1ZmZlciBoZWFkZXIKIC8vCiB0eXBlZGVmIHN0cnVjdCB0YWdTQ1RTRGF0YSB7Ci0gICAgV09SRCAgICB3RnJhbWVDb250cm9sOwotICAgIFdPUkQgICAgd0R1cmF0aW9uSUQ7Ci0gICAgQllURSAgICBhYnlSQVtFVEhfQUxFTl07Ci0gICAgV09SRCAgICB3UmVzZXJ2ZWQ7CisgICAgdW5zaWduZWQgc2hvcnQgd0ZyYW1lQ29udHJvbDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RHVyYXRpb25JRDsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVJBW0VUSF9BTEVOXTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmVzZXJ2ZWQ7CiB9X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU0NUU0RhdGEsICpQU0NUU0RhdGE7CiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NDVFMgewotICAgIEJZVEUgICAgICAgIGJ5U2lnbmFsRmllbGRfYjsKLSAgICBCWVRFICAgICAgICBieVNlcnZpY2VGaWVsZF9iOwotICAgIFdPUkQgICAgICAgIHdUcmFuc21pdExlbmd0aF9iOwotICAgIFdPUkQgICAgICAgIHdEdXJhdGlvbl9iYTsKLSAgICBXT1JEICAgICAgICB3UmVzZXJ2ZWQ7CisgICAgdW5zaWduZWQgY2hhciBieVNpZ25hbEZpZWxkX2I7CisgICAgdW5zaWduZWQgY2hhciBieVNlcnZpY2VGaWVsZF9iOworICAgIHVuc2lnbmVkIHNob3J0IHdUcmFuc21pdExlbmd0aF9iOworICAgIHVuc2lnbmVkIHNob3J0IHdEdXJhdGlvbl9iYTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmVzZXJ2ZWQ7CiAgICAgU0NUU0RhdGEgICAgRGF0YTsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTQ1RTLCAqUFNDVFM7CiB0eXBlZGVmIGNvbnN0IFNDVFMgKlBDU0NUUzsKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU0NUU19GQiB7Ci0gICAgQllURSAgICAgICAgYnlTaWduYWxGaWVsZF9iOwotICAgIEJZVEUgICAgICAgIGJ5U2VydmljZUZpZWxkX2I7Ci0gICAgV09SRCAgICAgICAgd1RyYW5zbWl0TGVuZ3RoX2I7Ci0gICAgV09SRCAgICAgICAgd0R1cmF0aW9uX2JhOwotICAgIFdPUkQgICAgICAgIHdSZXNlcnZlZDsKLSAgICBXT1JEICAgICAgICB3Q1RTRHVyYXRpb25fYmFfZjA7Ci0gICAgV09SRCAgICAgICAgd0NUU0R1cmF0aW9uX2JhX2YxOworICAgIHVuc2lnbmVkIGNoYXIgYnlTaWduYWxGaWVsZF9iOworICAgIHVuc2lnbmVkIGNoYXIgYnlTZXJ2aWNlRmllbGRfYjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3VHJhbnNtaXRMZW5ndGhfYjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RHVyYXRpb25fYmE7CisgICAgdW5zaWduZWQgc2hvcnQgd1Jlc2VydmVkOworICAgIHVuc2lnbmVkIHNob3J0IHdDVFNEdXJhdGlvbl9iYV9mMDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q1RTRHVyYXRpb25fYmFfZjE7CiAgICAgU0NUU0RhdGEgICAgRGF0YTsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTQ1RTX0ZCLCAqUFNDVFNfRkI7CkBAIC01NTYsMTkgKzU1NiwxOSBAQAogLy8gVHggRklGTyBoZWFkZXIKIC8vCiB0eXBlZGVmIHN0cnVjdCB0YWdTVHhCdWZIZWFkIHsKLSAgICBEV09SRCAgIGFkd1R4S2V5WzRdOwotICAgIFdPUkQgICAgd0ZJRk9DdGw7Ci0gICAgV09SRCAgICB3VGltZVN0YW1wOwotICAgIFdPUkQgICAgd0ZyYWdDdGw7Ci0gICAgQllURSAgICBieVR4UG93ZXI7Ci0gICAgQllURSAgICB3UmVzZXJ2ZWQ7CisgICAgdTMyIGFkd1R4S2V5WzRdOworICAgIHVuc2lnbmVkIHNob3J0IHdGSUZPQ3RsOworICAgIHVuc2lnbmVkIHNob3J0IHdUaW1lU3RhbXA7CisgICAgdW5zaWduZWQgc2hvcnQgd0ZyYWdDdGw7CisgICAgdW5zaWduZWQgY2hhciBieVR4UG93ZXI7CisgICAgdW5zaWduZWQgY2hhciB3UmVzZXJ2ZWQ7CiB9X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1R4QnVmSGVhZCwgKlBTVHhCdWZIZWFkOwogdHlwZWRlZiBjb25zdCBTVHhCdWZIZWFkICpQQ1NUeEJ1ZkhlYWQ7CiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NUeFNob3J0QnVmSGVhZCB7Ci0gICAgV09SRCAgICB3RklGT0N0bDsKLSAgICBXT1JEICAgIHdUaW1lU3RhbXA7CisgICAgdW5zaWduZWQgc2hvcnQgd0ZJRk9DdGw7CisgICAgdW5zaWduZWQgc2hvcnQgd1RpbWVTdGFtcDsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTVHhTaG9ydEJ1ZkhlYWQsICpQU1R4U2hvcnRCdWZIZWFkOwogdHlwZWRlZiBjb25zdCBTVHhTaG9ydEJ1ZkhlYWQgKlBDU1R4U2hvcnRCdWZIZWFkOwpAQCAtNTc3LDU3ICs1NzcsNTcgQEAKIC8vIFR4IGRhdGEgaGVhZGVyCiAvLwogdHlwZWRlZiBzdHJ1Y3QgdGFnU1R4RGF0YUhlYWRfZyB7Ci0gICAgQllURSAgICBieVNpZ25hbEZpZWxkX2I7Ci0gICAgQllURSAgICBieVNlcnZpY2VGaWVsZF9iOwotICAgIFdPUkQgICAgd1RyYW5zbWl0TGVuZ3RoX2I7Ci0gICAgQllURSAgICBieVNpZ25hbEZpZWxkX2E7Ci0gICAgQllURSAgICBieVNlcnZpY2VGaWVsZF9hOwotICAgIFdPUkQgICAgd1RyYW5zbWl0TGVuZ3RoX2E7Ci0gICAgV09SRCAgICB3RHVyYXRpb25fYjsKLSAgICBXT1JEICAgIHdEdXJhdGlvbl9hOwotICAgIFdPUkQgICAgd1RpbWVTdGFtcE9mZl9iOwotICAgIFdPUkQgICAgd1RpbWVTdGFtcE9mZl9hOworICAgIHVuc2lnbmVkIGNoYXIgYnlTaWduYWxGaWVsZF9iOworICAgIHVuc2lnbmVkIGNoYXIgYnlTZXJ2aWNlRmllbGRfYjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3VHJhbnNtaXRMZW5ndGhfYjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5U2lnbmFsRmllbGRfYTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5U2VydmljZUZpZWxkX2E7CisgICAgdW5zaWduZWQgc2hvcnQgd1RyYW5zbWl0TGVuZ3RoX2E7CisgICAgdW5zaWduZWQgc2hvcnQgd0R1cmF0aW9uX2I7CisgICAgdW5zaWduZWQgc2hvcnQgd0R1cmF0aW9uX2E7CisgICAgdW5zaWduZWQgc2hvcnQgd1RpbWVTdGFtcE9mZl9iOworICAgIHVuc2lnbmVkIHNob3J0IHdUaW1lU3RhbXBPZmZfYTsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTVHhEYXRhSGVhZF9nLCAqUFNUeERhdGFIZWFkX2c7CiB0eXBlZGVmIGNvbnN0IFNUeERhdGFIZWFkX2cgKlBDU1R4RGF0YUhlYWRfZzsKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU1R4RGF0YUhlYWRfZ19GQiB7Ci0gICAgQllURSAgICBieVNpZ25hbEZpZWxkX2I7Ci0gICAgQllURSAgICBieVNlcnZpY2VGaWVsZF9iOwotICAgIFdPUkQgICAgd1RyYW5zbWl0TGVuZ3RoX2I7Ci0gICAgQllURSAgICBieVNpZ25hbEZpZWxkX2E7Ci0gICAgQllURSAgICBieVNlcnZpY2VGaWVsZF9hOwotICAgIFdPUkQgICAgd1RyYW5zbWl0TGVuZ3RoX2E7Ci0gICAgV09SRCAgICB3RHVyYXRpb25fYjsKLSAgICBXT1JEICAgIHdEdXJhdGlvbl9hOwotICAgIFdPUkQgICAgd0R1cmF0aW9uX2FfZjA7Ci0gICAgV09SRCAgICB3RHVyYXRpb25fYV9mMTsKLSAgICBXT1JEICAgIHdUaW1lU3RhbXBPZmZfYjsKLSAgICBXT1JEICAgIHdUaW1lU3RhbXBPZmZfYTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5U2lnbmFsRmllbGRfYjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5U2VydmljZUZpZWxkX2I7CisgICAgdW5zaWduZWQgc2hvcnQgd1RyYW5zbWl0TGVuZ3RoX2I7CisgICAgdW5zaWduZWQgY2hhciBieVNpZ25hbEZpZWxkX2E7CisgICAgdW5zaWduZWQgY2hhciBieVNlcnZpY2VGaWVsZF9hOworICAgIHVuc2lnbmVkIHNob3J0IHdUcmFuc21pdExlbmd0aF9hOworICAgIHVuc2lnbmVkIHNob3J0IHdEdXJhdGlvbl9iOworICAgIHVuc2lnbmVkIHNob3J0IHdEdXJhdGlvbl9hOworICAgIHVuc2lnbmVkIHNob3J0IHdEdXJhdGlvbl9hX2YwOworICAgIHVuc2lnbmVkIHNob3J0IHdEdXJhdGlvbl9hX2YxOworICAgIHVuc2lnbmVkIHNob3J0IHdUaW1lU3RhbXBPZmZfYjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3VGltZVN0YW1wT2ZmX2E7CiB9X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1R4RGF0YUhlYWRfZ19GQiwgKlBTVHhEYXRhSGVhZF9nX0ZCOwogdHlwZWRlZiBjb25zdCBTVHhEYXRhSGVhZF9nX0ZCICpQQ1NUeERhdGFIZWFkX2dfRkI7CiAKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU1R4RGF0YUhlYWRfYWIgewotICAgIEJZVEUgICAgYnlTaWduYWxGaWVsZDsKLSAgICBCWVRFICAgIGJ5U2VydmljZUZpZWxkOwotICAgIFdPUkQgICAgd1RyYW5zbWl0TGVuZ3RoOwotICAgIFdPUkQgICAgd0R1cmF0aW9uOwotICAgIFdPUkQgICAgd1RpbWVTdGFtcE9mZjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5U2lnbmFsRmllbGQ7CisgICAgdW5zaWduZWQgY2hhciBieVNlcnZpY2VGaWVsZDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3VHJhbnNtaXRMZW5ndGg7CisgICAgdW5zaWduZWQgc2hvcnQgd0R1cmF0aW9uOworICAgIHVuc2lnbmVkIHNob3J0IHdUaW1lU3RhbXBPZmY7CiB9X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1R4RGF0YUhlYWRfYWIsICpQU1R4RGF0YUhlYWRfYWI7CiB0eXBlZGVmIGNvbnN0IFNUeERhdGFIZWFkX2FiICpQQ1NUeERhdGFIZWFkX2FiOwogCiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NUeERhdGFIZWFkX2FfRkIgewotICAgIEJZVEUgICAgYnlTaWduYWxGaWVsZDsKLSAgICBCWVRFICAgIGJ5U2VydmljZUZpZWxkOwotICAgIFdPUkQgICAgd1RyYW5zbWl0TGVuZ3RoOwotICAgIFdPUkQgICAgd0R1cmF0aW9uOwotICAgIFdPUkQgICAgd1RpbWVTdGFtcE9mZjsKLSAgICBXT1JEICAgIHdEdXJhdGlvbl9mMDsKLSAgICBXT1JEICAgIHdEdXJhdGlvbl9mMTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5U2lnbmFsRmllbGQ7CisgICAgdW5zaWduZWQgY2hhciBieVNlcnZpY2VGaWVsZDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3VHJhbnNtaXRMZW5ndGg7CisgICAgdW5zaWduZWQgc2hvcnQgd0R1cmF0aW9uOworICAgIHVuc2lnbmVkIHNob3J0IHdUaW1lU3RhbXBPZmY7CisgICAgdW5zaWduZWQgc2hvcnQgd0R1cmF0aW9uX2YwOworICAgIHVuc2lnbmVkIHNob3J0IHdEdXJhdGlvbl9mMTsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTVHhEYXRhSGVhZF9hX0ZCLCAqUFNUeERhdGFIZWFkX2FfRkI7CiB0eXBlZGVmIGNvbnN0IFNUeERhdGFIZWFkX2FfRkIgKlBDU1R4RGF0YUhlYWRfYV9GQjsKQEAgLTYzNiwzNyArNjM2LDM3IEBACiAvLyBNSUNIRFIgZGF0YSBoZWFkZXIKIC8vCiB0eXBlZGVmIHN0cnVjdCB0YWdTTUlDSERSSGVhZCB7Ci0gICAgRFdPUkQgICBhZHdIRFIwWzRdOwotICAgIERXT1JEICAgYWR3SERSMVs0XTsKLSAgICBEV09SRCAgIGFkd0hEUjJbNF07CisgICAgdTMyIGFkd0hEUjBbNF07CisgICAgdTMyIGFkd0hEUjFbNF07CisgICAgdTMyIGFkd0hEUjJbNF07CiB9X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU01JQ0hEUkhlYWQsICpQU01JQ0hEUkhlYWQ7CiB0eXBlZGVmIGNvbnN0IFNNSUNIRFJIZWFkICpQQ1NNSUNIRFJIZWFkOwogCiB0eXBlZGVmIHN0cnVjdCB0YWdTQkVBQ09OQ3RsIHsKLSAgICBEV09SRCAgIEJ1ZlJlYWR5IDogMTsKLSAgICBEV09SRCAgIFRTRiAgICAgIDogMTU7Ci0gICAgRFdPUkQgICBCdWZMZW4gICA6IDExOwotICAgIERXT1JEICAgUmVzZXJ2ZWQgOiA1OworICAgIHUzMiBCdWZSZWFkeSA6IDE7CisgICAgdTMyIFRTRiAgICAgIDogMTU7CisgICAgdTMyIEJ1ZkxlbiAgIDogMTE7CisgICAgdTMyIFJlc2VydmVkIDogNTsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTQkVBQ09OQ3RsOwogCiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NTZWNyZXRLZXkgewotICAgIERXT1JEICAgZHdMb3dEd29yZDsKLSAgICBCWVRFICAgIGJ5SGlnaEJ5dGU7CisgICAgdTMyIGR3TG93RHdvcmQ7CisgICAgdW5zaWduZWQgY2hhciBieUhpZ2hCeXRlOwogfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNTZWNyZXRLZXk7CiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NLZXlFbnRyeSB7Ci0gICAgQllURSAgYWJ5QWRkckhpWzJdOwotICAgIFdPUkQgIHdLQ1RMOwotICAgIEJZVEUgIGFieUFkZHJMb1s0XTsKLSAgICBEV09SRCBkd0tleTBbNF07Ci0gICAgRFdPUkQgZHdLZXkxWzRdOwotICAgIERXT1JEIGR3S2V5Mls0XTsKLSAgICBEV09SRCBkd0tleTNbNF07Ci0gICAgRFdPUkQgZHdLZXk0WzRdOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5QWRkckhpWzJdOworICAgIHVuc2lnbmVkIHNob3J0IHdLQ1RMOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5QWRkckxvWzRdOworICAgIHUzMiBkd0tleTBbNF07CisgICAgdTMyIGR3S2V5MVs0XTsKKyAgICB1MzIgZHdLZXkyWzRdOworICAgIHUzMiBkd0tleTNbNF07CisgICAgdTMyIGR3S2V5NFs0XTsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTS2V5RW50cnk7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IE1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXZpY2UuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGV2aWNlLmgKaW5kZXggNDBlZTRlMS4uMmU3YzJmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXZpY2UuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RldmljZS5oCkBAIC00OCwxMCArNDgsMTAgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2lmLmg+CiAvLyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgpAQCAtMjE4LDcgKzIxOCw3IEBACiAjZGVmaW5lIE5ESVNfODAyXzExX1BNS0lEX0NBTkRJREFURV9QUkVBVVRIX0VOQUJMRUQJMHgwMQogCiAvLyBQTUtJRCBTdHJ1Y3R1cmVzCi10eXBlZGVmIFVDSEFSICAgTkRJU184MDJfMTFfUE1LSURfVkFMVUVbMTZdOwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIE5ESVNfODAyXzExX1BNS0lEX1ZBTFVFWzE2XTsKIAogCiB0eXBlZGVmIGVudW0gX05ESVNfODAyXzExX1dFUF9TVEFUVVMKQEAgLTI1MCw3ICsyNTAsNyBAQAogLy9BZGRlZCBuZXcgdHlwZXMgZm9yIFBNS0lEIENhbmRpZGF0ZSBsaXN0cy4KIHR5cGVkZWYgc3RydWN0IF9QTUtJRF9DQU5ESURBVEUgewogICAgIE5ESVNfODAyXzExX01BQ19BRERSRVNTIEJTU0lEOwotICAgIFVMT05HIEZsYWdzOworICAgIHVuc2lnbmVkIGxvbmcgRmxhZ3M7CiB9IFBNS0lEX0NBTkRJREFURSwgKlBQTUtJRF9DQU5ESURBVEU7CiAKIApAQCAtMjYxLDE1ICsyNjEsMTUgQEAKIH0gQlNTSURfSU5GTywgKlBCU1NJRF9JTkZPOwogCiB0eXBlZGVmIHN0cnVjdCB0YWdTUE1LSUQgewotICAgIFVMT05HIExlbmd0aDsKLSAgICBVTE9ORyBCU1NJREluZm9Db3VudDsKKyAgICB1bnNpZ25lZCBsb25nIExlbmd0aDsKKyAgICB1bnNpZ25lZCBsb25nIEJTU0lESW5mb0NvdW50OwogICAgIEJTU0lEX0lORk8gQlNTSURJbmZvW01BWF9CU1NJRElORk9fNF9QTUtJRF07CiB9IFNQTUtJRCwgKlBTUE1LSUQ7CiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NQTUtJRENhbmRpZGF0ZUV2ZW50IHsKICAgICBORElTXzgwMl8xMV9TVEFUVVNfVFlQRSAgICAgU3RhdHVzVHlwZTsKLSAgICBVTE9ORyBWZXJzaW9uOyAgICAgICAvLyBWZXJzaW9uIG9mIHRoZSBzdHJ1Y3R1cmUKLSAgICBVTE9ORyBOdW1DYW5kaWRhdGVzOyAvLyBOby4gb2YgcG1raWQgY2FuZGlkYXRlcworICAgIHVuc2lnbmVkIGxvbmcgVmVyc2lvbjsgICAgICAgLy8gVmVyc2lvbiBvZiB0aGUgc3RydWN0dXJlCisgICAgdW5zaWduZWQgbG9uZyBOdW1DYW5kaWRhdGVzOyAvLyBOby4gb2YgcG1raWQgY2FuZGlkYXRlcwogICAgIFBNS0lEX0NBTkRJREFURSBDYW5kaWRhdGVMaXN0W01BWF9QTUtJRExJU1RdOwogfSBTUE1LSURDYW5kaWRhdGVFdmVudCwgKlBTUE1LSURDYW5kaWRhdGVFdmVudDsKIApAQCAtMjc5LDEwICsyNzksMTAgQEAKICNkZWZpbmUgTUFYX1FVSUVUX0NPVU5UICAgICA4CiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NRdWlldENvbnRyb2wgewotICAgIEJPT0wgICAgICAgIGJFbmFibGU7Ci0gICAgRFdPUkQgICAgICAgZHdTdGFydFRpbWU7Ci0gICAgQllURSAgICAgICAgYnlQZXJpb2Q7Ci0gICAgV09SRCAgICAgICAgd0R1cmF0aW9uOworICAgIGJvb2wgYkVuYWJsZTsKKyAgICB1bnNpZ25lZCBsb25nIGR3U3RhcnRUaW1lOworICAgIHVuc2lnbmVkIGNoYXIgYnlQZXJpb2Q7CisgICAgdW5zaWduZWQgc2hvcnQgd0R1cmF0aW9uOwogfSBTUXVpZXRDb250cm9sLCAqUFNRdWlldENvbnRyb2w7CiAKIC8vLS0KQEAgLTI5MSw3ICsyOTEsNyBAQAogICAgIGNoYXIqICAgICAgIG5hbWU7CiAgICAgaW50ICAgICAgICAgaW9fc2l6ZTsKICAgICBpbnQgICAgICAgICBuVHhRdWV1ZTsKLSAgICBVMzIgICAgICAgICBmbGFnczsKKyAgICB1MzIgICAgICAgICBmbGFnczsKIH0gQ0hJUF9JTkZPLCAqUENISVBfSU5GTzsKIAogCkBAIC0zMDMsMTUgKzMwMywxNSBAQAogCiAvLyBUaGUgcmVjZWl2ZSBkdXBsaWNhdGUgZGV0ZWN0aW9uIGNhY2hlIGVudHJ5CiB0eXBlZGVmIHN0cnVjdCB0YWdTQ2FjaGVFbnRyeXsKLSAgICBXT1JEICAgICAgICB3Rm1TZXF1ZW5jZTsKLSAgICBCWVRFICAgICAgICBhYnlBZGRyMltFVEhfQUxFTl07CisgICAgdW5zaWduZWQgc2hvcnQgd0ZtU2VxdWVuY2U7CisgICAgdW5zaWduZWQgY2hhciBhYnlBZGRyMltFVEhfQUxFTl07CiB9IFNDYWNoZUVudHJ5LCAqUFNDYWNoZUVudHJ5OwogCiB0eXBlZGVmIHN0cnVjdCB0YWdTQ2FjaGV7CiAvKiBUaGUgcmVjZWl2ZSBjYWNoZSBpcyB1cGRhdGVkIGNpcmN1bGFybHkuICBUaGUgbmV4dCBlbnRyeSB0byBiZSB3cml0dGVuIGlzCiAgKiBpbmRleGVkIGJ5IHRoZSAiSW5QdHIiLgogKi8KLSAgICBVSU5UICAgICAgICAgICAgdUluUHRyOyAgICAgICAgIC8vIFBsYWNlIHRvIHVzZSBuZXh0CisgICAgdW5zaWduZWQgaW50IHVJblB0cjsgICAgICAgICAvLyBQbGFjZSB0byB1c2UgbmV4dAogICAgIFNDYWNoZUVudHJ5ICAgICBhc0NhY2hlRW50cnlbRFVQTElDQVRFX1JYX0NBQ0hFX0xFTkdUSF07CiB9IFNDYWNoZSwgKlBTQ2FjaGU7CiAKQEAgLTMxOSwxNCArMzE5LDE0IEBACiAvLyBEZUZyYWdtZW50IENvbnRyb2wgQmxvY2ssIHVzZWQgZm9yIGNvbGxlY3RpbmcgZnJhZ21lbnRzIHByaW9yIHRvIHJlYXNzZW1ibHkKIHR5cGVkZWYgc3RydWN0IHRhZ1NEZUZyYWdDb250cm9sQmxvY2sKIHsKLSAgICBXT1JEICAgICAgICAgICAgd1NlcXVlbmNlOwotICAgIFdPUkQgICAgICAgICAgICB3RnJhZ051bTsKLSAgICBCWVRFICAgICAgICAgICAgYWJ5QWRkcjJbRVRIX0FMRU5dOwotCVVJTlQgICAgICAgICAgICB1TGlmZXRpbWU7CisgICAgdW5zaWduZWQgc2hvcnQgd1NlcXVlbmNlOworICAgIHVuc2lnbmVkIHNob3J0IHdGcmFnTnVtOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5QWRkcjJbRVRIX0FMRU5dOworICAgIHVuc2lnbmVkIGludCB1TGlmZXRpbWU7CiAgICAgc3RydWN0IHNrX2J1ZmYqIHNrYjsKLSAgICBQQllURSAgICAgICAgICAgcGJ5UnhCdWZmZXI7Ci0gICAgVUlOVCAgICAgICAgICAgIGNiRnJhbWVMZW5ndGg7Ci0gICAgQk9PTCAgICAgICAgICAgIGJJblVzZTsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlSeEJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQgY2JGcmFtZUxlbmd0aDsKKyAgICBib29sIGJJblVzZTsKIH0gU0RlRnJhZ0NvbnRyb2xCbG9jaywgKlBTRGVGcmFnQ29udHJvbEJsb2NrOwogCiAKQEAgLTM4Niw3ICszODYsNyBAQAogICAgIGludCAgICAgICAgIHNob3J0X3JldHJ5OwogICAgIGludCAgICAgICAgIGxvbmdfcmV0cnk7CiAgICAgaW50ICAgICAgICAgYmJwX3R5cGU7Ci0gICAgVTMyICAgICAgICAgZmxhZ3M7CisgICAgdTMyICAgICAgICAgZmxhZ3M7CiB9IE9QVElPTlMsICpQT1BUSU9OUzsKIAogCkBAIC00MTcsMjEgKzQxNywyMSBAQAogICAgIGRtYV9hZGRyX3QgICAgICAgICAgICAgICAgICB0eF9idWZzX2RtYTE7CiAgICAgZG1hX2FkZHJfdCAgICAgICAgICAgICAgICAgIHR4X2JlYWNvbl9kbWE7CiAKLSAgICBQQllURSAgICAgICAgICAgICAgICAgICAgICAgdHgwX2J1ZnM7Ci0gICAgUEJZVEUgICAgICAgICAgICAgICAgICAgICAgIHR4MV9idWZzOwotICAgIFBCWVRFICAgICAgICAgICAgICAgICAgICAgICB0eF9iZWFjb25fYnVmczsKKyAgICB1bnNpZ25lZCBjaGFyICp0eDBfYnVmczsKKyAgICB1bnNpZ25lZCBjaGFyICp0eDFfYnVmczsKKyAgICB1bnNpZ25lZCBjaGFyICp0eF9iZWFjb25fYnVmczsKIAogICAgIENISVBfVFlQRSAgICAgICAgICAgICAgICAgICBjaGlwX2lkOwogCi0gICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgIFBvcnRPZmZzZXQ7Ci0gICAgRFdPUkQgICAgICAgICAgICAgICAgICAgICAgIGR3SXNyOwotICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICBtZW1hZGRyOwotICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICBpb2FkZHI7Ci0gICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgIGlvX3NpemU7CisgICAgdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgIFBvcnRPZmZzZXQ7CisgICAgdW5zaWduZWQgbG9uZyBkd0lzcjsKKyAgICB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYWRkcjsKKyAgICB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgaW9hZGRyOworICAgIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICBpb19zaXplOwogCi0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5UmV2SWQ7Ci0gICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgIFN1YlN5c3RlbUlEOwotICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICBTdWJWZW5kb3JJRDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UmV2SWQ7CisgICAgdW5zaWduZWQgc2hvcnQgU3ViU3lzdGVtSUQ7CisgICAgdW5zaWduZWQgc2hvcnQgU3ViVmVuZG9ySUQ7CiAKICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgblR4UXVldWVzOwogICAgIHZvbGF0aWxlIGludCAgICAgICAgICAgICAgICBpVERVc2VkW1RZUEVfTUFYVERdOwpAQCAtNDQ4LDE3ICs0NDgsMTcgQEAKICAgICBTQ2FjaGUgICAgICAgICAgICAgICAgICAgICAgc0R1cFJ4Q2FjaGU7CiAKICAgICBTRGVGcmFnQ29udHJvbEJsb2NrICAgICAgICAgc1J4REZDQltDQl9NQVhfUlhfRlJBR107Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgICAgIGNiREZDQjsKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICAgICAgY2JGcmVlREZDQjsKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICAgICAgdUN1cnJlbnRERkNCSWR4OworICAgIHVuc2lnbmVkIGludAljYkRGQ0I7CisgICAgdW5zaWduZWQgaW50CWNiRnJlZURGQ0I7CisgICAgdW5zaWduZWQgaW50CXVDdXJyZW50REZDQklkeDsKIAogICAgIE9QVElPTlMgICAgICAgICAgICAgICAgICAgICBzT3B0czsKIAotICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczsKKyAgICB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M7CiAKLSAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgcnhfYnVmX3N6OworICAgIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICByeF9idWZfc3o7CiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpY2FzdF9saW1pdDsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgYnlSeE1vZGU7CisgICAgdW5zaWduZWQgY2hhciBieVJ4TW9kZTsKIAogICAgIHNwaW5sb2NrX3QgICAgICAgICAgICAgICAgICBsb2NrOwogLy9QTElDRV9ERUJVRy0+CkBAIC00NzIsMTkgKzQ3MiwxOSBAQAogLy9QTElDRV9ERUJVRyA8LQogCiAKLSAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgcnhfYnl0ZXM7CisgICAgdTMyICAgICAgICAgICAgICAgICAgICAgICAgIHJ4X2J5dGVzOwogCiAgICAgLy8gVmVyc2lvbiBjb250cm9sCi0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5TG9jYWxJRDsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgYnlSRlR5cGU7CisgICAgdW5zaWduZWQgY2hhciBieUxvY2FsSUQ7CisgICAgdW5zaWduZWQgY2hhciBieVJGVHlwZTsKIAotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICBieU1heFB3ckxldmVsOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICBieVpvbmVUeXBlOwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICBiWm9uZVJlZ0V4aXN0OwotICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5T3JpZ2luYWxab25ldHlwZTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgYWJ5TWFjQ29udGV4dFtNQUNfTUFYX0NPTlRFWFRfUkVHXTsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICAgICAgYkxpbmtQYXNzOyAgICAgICAgICAvLyBsaW5rIHN0YXR1czogT0sgb3IgZmFpbAotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICBhYnlDdXJyZW50TmV0QWRkcltFVEhfQUxFTl07CisgICAgdW5zaWduZWQgY2hhciBieU1heFB3ckxldmVsOworICAgIHVuc2lnbmVkIGNoYXIgYnlab25lVHlwZTsKKyAgICBib29sIGJab25lUmVnRXhpc3Q7CisgICB1bnNpZ25lZCBjaGFyIGJ5T3JpZ2luYWxab25ldHlwZTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieU1hY0NvbnRleHRbTUFDX01BWF9DT05URVhUX1JFR107CisgICAgYm9vbCBiTGlua1Bhc3M7ICAgICAgICAgIC8vIGxpbmsgc3RhdHVzOiBPSyBvciBmYWlsCisgICAgdW5zaWduZWQgY2hhciBhYnlDdXJyZW50TmV0QWRkcltFVEhfQUxFTl07CiAKICAgICAvLyBBZGFwdGVyIHN0YXRpc3RpY3MKICAgICBTU3RhdENvdW50ZXIgICAgICAgICAgICAgICAgc2NTdGF0aXN0aWM7CkBAIC00OTcsMjQ5ICs0OTcsMjQ5IEBACiAgICAgU01nbXRPYmplY3QgICAgICAgICAgICAgICAgIHNNZ210T2JqOwogCiAgICAgLy8gODAyLjExIE1BQyBzcGVjaWZpYwotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgICAgICB1Q3VyclJTU0k7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5Q3VyclNROworICAgIHVuc2lnbmVkIGludAl1Q3VyclJTU0k7CisgICAgdW5zaWduZWQgY2hhciBieUN1cnJTUTsKIAotICAgIERXT1JEICAgICAgICAgICAgICAgICAgICAgICBkd1R4QW50ZW5uYVNlbDsKLSAgICBEV09SRCAgICAgICAgICAgICAgICAgICAgICAgZHdSeEFudGVubmFTZWw7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5QW50ZW5uYUNvdW50OwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICBieVJ4QW50ZW5uYU1vZGU7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5VHhBbnRlbm5hTW9kZTsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICAgICAgYlR4UnhBbnRJbnY7CisgICAgdW5zaWduZWQgbG9uZyBkd1R4QW50ZW5uYVNlbDsKKyAgICB1bnNpZ25lZCBsb25nIGR3UnhBbnRlbm5hU2VsOworICAgIHVuc2lnbmVkIGNoYXIgYnlBbnRlbm5hQ291bnQ7CisgICAgdW5zaWduZWQgY2hhciBieVJ4QW50ZW5uYU1vZGU7CisgICAgdW5zaWduZWQgY2hhciBieVR4QW50ZW5uYU1vZGU7CisgICAgYm9vbCBiVHhSeEFudEludjsKIAotICAgIFBCWVRFICAgICAgICAgICAgICAgICAgICAgICBwYnlUbXBCdWZmOwotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgICAgICB1U0lGUzsgICAgLy9DdXJyZW50IFNJRlMKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICAgICAgdURJRlM7ICAgIC8vQ3VycmVudCBESUZTCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgICAgIHVFSUZTOyAgICAvL0N1cnJlbnQgRUlGUwotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgICAgICB1U2xvdDsgICAgLy9DdXJyZW50IFNsb3RUaW1lCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgICAgIHVDd01pbjsgICAvL0N1cnJlbnQgQ3dNaW4KLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICAgICAgdUN3TWF4OyAgIC8vQ3dNYXggaXMgZml4ZWQgb24gMTAyMy4KKyAgICB1bnNpZ25lZCBjaGFyICpwYnlUbXBCdWZmOworICAgIHVuc2lnbmVkIGludAl1U0lGUzsgICAgLy9DdXJyZW50IFNJRlMKKyAgICB1bnNpZ25lZCBpbnQJdURJRlM7ICAgIC8vQ3VycmVudCBESUZTCisgICAgdW5zaWduZWQgaW50CXVFSUZTOyAgICAvL0N1cnJlbnQgRUlGUworICAgIHVuc2lnbmVkIGludAl1U2xvdDsgICAgLy9DdXJyZW50IFNsb3RUaW1lCisgICAgdW5zaWduZWQgaW50CXVDd01pbjsgICAvL0N1cnJlbnQgQ3dNaW4KKyAgICB1bnNpZ25lZCBpbnQJdUN3TWF4OyAgIC8vQ3dNYXggaXMgZml4ZWQgb24gMTAyMy4KICAgICAvLyBQSFkgcGFyYW1ldGVyCi0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5U0lGUzsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgYnlESUZTOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICBieUVJRlM7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5U2xvdDsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgYnlDV01heE1pbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5U0lGUzsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RElGUzsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RUlGUzsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5U2xvdDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q1dNYXhNaW47CiAgICAgQ0FSRF9QSFlfVFlQRSAgICAgICAgICAgICAgIGVDdXJyZW50UEhZVHlwZTsKIAogCiAgICAgVklBX0JCX1RZUEUgICAgICAgICAgICAgICAgIGJ5QkJUeXBlOyAvLzA6IDExQSwgMToxMUIsIDI6MTFHCiAgICAgVklBX1BLVF9UWVBFICAgICAgICAgICAgICAgIGJ5UGFja2V0VHlwZTsgLy8wOjExYSwxOjExYiwyOjExZ2Iob25seSBDQ0sgaW4gQmFzaWNSYXRlKSwzOjExZ2EoT0ZETSBpbiBCYXNpYyBSYXRlKQotICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICB3QmFzaWNSYXRlOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICBieUFDS1JhdGU7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5VG9wT0ZETUJhc2ljUmF0ZTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgYnlUb3BDQ0tCYXNpY1JhdGU7CisgICAgdW5zaWduZWQgc2hvcnQgd0Jhc2ljUmF0ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5QUNLUmF0ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VG9wT0ZETUJhc2ljUmF0ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VG9wQ0NLQmFzaWNSYXRlOwogCi0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5TWluQ2hhbm5lbDsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgYnlNYXhDaGFubmVsOwotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgICAgICB1Q29ubmVjdGlvblJhdGU7CisgICAgdW5zaWduZWQgY2hhciBieU1pbkNoYW5uZWw7CisgICAgdW5zaWduZWQgY2hhciBieU1heENoYW5uZWw7CisgICAgdW5zaWduZWQgaW50CXVDb25uZWN0aW9uUmF0ZTsKIAotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICBieVByZWFtYmxlVHlwZTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgYnlTaG9ydFByZWFtYmxlOworICAgIHVuc2lnbmVkIGNoYXIgYnlQcmVhbWJsZVR5cGU7CisgICAgdW5zaWduZWQgY2hhciBieVNob3J0UHJlYW1ibGU7CiAKLSAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgd0N1cnJlbnRSYXRlOwotICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICB3UlRTVGhyZXNob2xkOwotICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICB3RnJhZ21lbnRhdGlvblRocmVzaG9sZDsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgYnlTaG9ydFJldHJ5TGltaXQ7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5TG9uZ1JldHJ5TGltaXQ7CisgICAgdW5zaWduZWQgc2hvcnQgd0N1cnJlbnRSYXRlOworICAgIHVuc2lnbmVkIHNob3J0IHdSVFNUaHJlc2hvbGQ7CisgICAgdW5zaWduZWQgc2hvcnQgd0ZyYWdtZW50YXRpb25UaHJlc2hvbGQ7CisgICAgdW5zaWduZWQgY2hhciBieVNob3J0UmV0cnlMaW1pdDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TG9uZ1JldHJ5TGltaXQ7CiAgICAgQ0FSRF9PUF9NT0RFICAgICAgICAgICAgICAgIGVPUE1vZGU7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5T3BNb2RlOwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICBiQlNTSURGaWx0ZXI7Ci0gICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgIHdNYXhUcmFuc21pdE1TRFVMaWZldGltZTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgYWJ5QlNTSURbRVRIX0FMRU5dOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICBhYnlEZXNpcmVCU1NJRFtFVEhfQUxFTl07Ci0gICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgIHdDVFNEdXJhdGlvbjsgICAgICAgLy8gdXBkYXRlIHdoaWxlIHNwZWVkIGNoYW5nZQotICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICB3QUNLRHVyYXRpb247ICAgICAgIC8vIHVwZGF0ZSB3aGlsZSBzcGVlZCBjaGFuZ2UKLSAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgd1JUU1RyYW5zbWl0TGVuOyAgICAvLyB1cGRhdGUgd2hpbGUgc3BlZWQgY2hhbmdlCi0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5UlRTU2VydmljZUZpZWxkOyAgLy8gdXBkYXRlIHdoaWxlIHNwZWVkIGNoYW5nZQotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICBieVJUU1NpZ25hbEZpZWxkOyAgIC8vIHVwZGF0ZSB3aGlsZSBzcGVlZCBjaGFuZ2UKKyAgICB1bnNpZ25lZCBjaGFyIGJ5T3BNb2RlOworICAgIGJvb2wgYkJTU0lERmlsdGVyOworICAgIHVuc2lnbmVkIHNob3J0IHdNYXhUcmFuc21pdE1TRFVMaWZldGltZTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUJTU0lEW0VUSF9BTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieURlc2lyZUJTU0lEW0VUSF9BTEVOXTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q1RTRHVyYXRpb247ICAgICAgIC8vIHVwZGF0ZSB3aGlsZSBzcGVlZCBjaGFuZ2UKKyAgICB1bnNpZ25lZCBzaG9ydCB3QUNLRHVyYXRpb247ICAgICAgIC8vIHVwZGF0ZSB3aGlsZSBzcGVlZCBjaGFuZ2UKKyAgICB1bnNpZ25lZCBzaG9ydCB3UlRTVHJhbnNtaXRMZW47ICAgIC8vIHVwZGF0ZSB3aGlsZSBzcGVlZCBjaGFuZ2UKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UlRTU2VydmljZUZpZWxkOyAgLy8gdXBkYXRlIHdoaWxlIHNwZWVkIGNoYW5nZQorICAgIHVuc2lnbmVkIGNoYXIgYnlSVFNTaWduYWxGaWVsZDsgICAvLyB1cGRhdGUgd2hpbGUgc3BlZWQgY2hhbmdlCiAKLSAgICBEV09SRCAgICAgICAgICAgICAgICAgICAgICAgZHdNYXhSZWNlaXZlTGlmZXRpbWU7ICAgICAgIC8vIGRvdDExTWF4UmVjZWl2ZUxpZmV0aW1lCisgICAgdW5zaWduZWQgbG9uZyBkd01heFJlY2VpdmVMaWZldGltZTsgICAgICAgLy8gZG90MTFNYXhSZWNlaXZlTGlmZXRpbWUKIAotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICBiQ0NLOwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICBiRW5jcnlwdGlvbkVuYWJsZTsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICAgICAgYkxvbmdIZWFkZXI7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgICAgIGJTaG9ydFNsb3RUaW1lOwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICBiUHJvdGVjdE1vZGU7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgICAgIGJOb25FUlBQcmVzZW50OwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICBiQmFya2VyUHJlYW1ibGVNZDsKKyAgICBib29sIGJDQ0s7CisgICAgYm9vbCBiRW5jcnlwdGlvbkVuYWJsZTsKKyAgICBib29sIGJMb25nSGVhZGVyOworICAgIGJvb2wgYlNob3J0U2xvdFRpbWU7CisgICAgYm9vbCBiUHJvdGVjdE1vZGU7CisgICAgYm9vbCBiTm9uRVJQUHJlc2VudDsKKyAgICBib29sIGJCYXJrZXJQcmVhbWJsZU1kOwogCi0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5RVJQRmxhZzsKLSAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgd1VzZVByb3RlY3RDbnREb3duOworICAgIHVuc2lnbmVkIGNoYXIgYnlFUlBGbGFnOworICAgIHVuc2lnbmVkIHNob3J0IHdVc2VQcm90ZWN0Q250RG93bjsKIAotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICBiUmFkaW9Db250cm9sT2ZmOwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICBiUmFkaW9PZmY7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYkVuYWJsZVBTTW9kZTsKLSAgICBXT1JEICAgICAgICAgICAgICAgICAgICB3TGlzdGVuSW50ZXJ2YWw7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYlBXQml0T247CisgICAgYm9vbCBiUmFkaW9Db250cm9sT2ZmOworICAgIGJvb2wgYlJhZGlvT2ZmOworICAgIGJvb2wgYkVuYWJsZVBTTW9kZTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3TGlzdGVuSW50ZXJ2YWw7CisgICAgYm9vbCBiUFdCaXRPbjsKICAgICBXTUFDX1BPV0VSX01PREUgICAgICAgICBlUFNNb2RlOwogCiAKICAgICAvLyBHUElPIFJhZGlvIENvbnRyb2wKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBieVJhZGlvQ3RsOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGJ5R1BJTzsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiSFdSYWRpb09mZjsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiUHJ2QWN0aXZlNFJhZGlvT0ZGOwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgIGJHUElPQmxvY2tSZWFkOworICAgIHVuc2lnbmVkIGNoYXIgYnlSYWRpb0N0bDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5R1BJTzsKKyAgICBib29sIGJIV1JhZGlvT2ZmOworICAgIGJvb2wgYlBydkFjdGl2ZTRSYWRpb09GRjsKKyAgICBib29sIGJHUElPQmxvY2tSZWFkOwogCiAgICAgLy8gQmVhY29uIHJlbGVhdGVkCi0gICAgV09SRCAgICAgICAgICAgICAgICAgICAgd1NlcUNvdW50ZXI7Ci0gICAgV09SRCAgICAgICAgICAgICAgICAgICAgd0JDTkJ1ZkxlbjsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiQmVhY29uQnVmUmVhZHk7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYkJlYWNvblNlbnQ7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYklzQmVhY29uQnVmUmVhZHlTZXQ7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgY2JCZWFjb25CdWZSZWFkeVNldENudDsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiRml4UmF0ZTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBieUN1cnJlbnRDaDsKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICB1U2NhblRpbWU7CisgICAgdW5zaWduZWQgc2hvcnQgd1NlcUNvdW50ZXI7CisgICAgdW5zaWduZWQgc2hvcnQgd0JDTkJ1ZkxlbjsKKyAgICBib29sIGJCZWFjb25CdWZSZWFkeTsKKyAgICBib29sIGJCZWFjb25TZW50OworICAgIGJvb2wgYklzQmVhY29uQnVmUmVhZHlTZXQ7CisgICAgdW5zaWduZWQgaW50CWNiQmVhY29uQnVmUmVhZHlTZXRDbnQ7CisgICAgYm9vbCBiRml4UmF0ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q3VycmVudENoOworICAgIHVuc2lnbmVkIGludAl1U2NhblRpbWU7CiAKICAgICBDTURfU1RBVEUgICAgICAgICAgICAgICBlQ29tbWFuZFN0YXRlOwogCiAgICAgQ01EX0NPREUgICAgICAgICAgICAgICAgZUNvbW1hbmQ7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYkJlYWNvblR4OworICAgIGJvb2wgYkJlYWNvblR4OwogCi0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYlN0b3BCZWFjb247Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYlN0b3BEYXRhUGt0OwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgIGJTdG9wVHgwUGt0OwotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIHVBdXRvUmVDb25uZWN0VGltZTsKKyAgICBib29sIGJTdG9wQmVhY29uOworICAgIGJvb2wgYlN0b3BEYXRhUGt0OworICAgIGJvb2wgYlN0b3BUeDBQa3Q7CisgICAgdW5zaWduZWQgaW50CXVBdXRvUmVDb25uZWN0VGltZTsKIAogICAgIC8vIDgwMi4xMSBjb3VudGVyCiAKICAgICBDTURfSVRFTSAgICAgICAgICAgICAgICBlQ21kUXVldWVbQ01EX1FfU0laRV07Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdUNtZERlcXVldWVJZHg7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdUNtZEVucXVldWVJZHg7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgY2JGcmVlQ21kUXVldWU7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYkNtZFJ1bm5pbmc7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYkNtZENsZWFyOworICAgIHVuc2lnbmVkIGludAl1Q21kRGVxdWV1ZUlkeDsKKyAgICB1bnNpZ25lZCBpbnQJdUNtZEVucXVldWVJZHg7CisgICAgdW5zaWduZWQgaW50CWNiRnJlZUNtZFF1ZXVlOworICAgIGJvb2wgYkNtZFJ1bm5pbmc7CisgICAgYm9vbCBiQ21kQ2xlYXI7CiAKIAogCi0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYlJvYW1pbmc7CisgICAgYm9vbCBiUm9hbWluZzsKICAgICAvL1dPVwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGFieUlQQWRkcls0XTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUlQQWRkcls0XTsKIAotICAgIFVMT05HICAgICAgICAgICAgICAgICAgIHVsVHhQb3dlcjsKKyAgICB1bnNpZ25lZCBsb25nIHVsVHhQb3dlcjsKICAgICBORElTXzgwMl8xMV9XRVBfU1RBVFVTICBlRW5jcnlwdGlvblN0YXR1czsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiVHJhbnNtaXRLZXk7CisgICAgYm9vbCBiVHJhbnNtaXRLZXk7CiAvLzIwMDctMDkyNS0wMTxBZGQ+YnkgTWlrZUxpdQogLy9taWtlIGFkZCA6c2F2ZSBvbGQgRW5jcnlwdGlvbgogICAgIE5ESVNfODAyXzExX1dFUF9TVEFUVVMgIGVPbGRFbmNyeXB0aW9uU3RhdHVzOwogCiAgICAgU0tleU1hbmFnZW1lbnQgICAgICAgICAgc0tleTsKLSAgICBEV09SRCAgICAgICAgICAgICAgICAgICBkd0lWQ291bnRlcjsKKyAgICB1bnNpZ25lZCBsb25nIGR3SVZDb3VudGVyOwogCiAgICAgUVdPUkQgICAgICAgICAgICAgICAgICAgcXdQYWNrZXROdW1iZXI7IC8vRm9yIENDTVAgYW5kIFRLSVAgYXMgVFNDKDYgYnl0ZXMpCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdUN1cnJlbnRXRVBNb2RlOworICAgIHVuc2lnbmVkIGludAl1Q3VycmVudFdFUE1vZGU7CiAKICAgICBSQzRFeHQgICAgICAgICAgICAgICAgICBTQm94OwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGFieVBSTkdbV0xBTl9XRVBNQVhfS0VZTEVOKzNdOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGJ5S2V5SW5kZXg7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdUtleUxlbmd0aDsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlLZXlbV0xBTl9XRVAyMzJfS0VZTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVBSTkdbV0xBTl9XRVBNQVhfS0VZTEVOKzNdOworICAgIHVuc2lnbmVkIGNoYXIgYnlLZXlJbmRleDsKKyAgICB1bnNpZ25lZCBpbnQJdUtleUxlbmd0aDsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUtleVtXTEFOX1dFUDIzMl9LRVlMRU5dOwogCi0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYkFFUzsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBieUNudE1lYXN1cmU7CisgICAgYm9vbCBiQUVTOworICAgIHVuc2lnbmVkIGNoYXIgYnlDbnRNZWFzdXJlOwogCiAgICAgLy8gZm9yIEFQIG1vZGUKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICB1QXNzb2NDb3VudDsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiTW9yZURhdGE7CisgICAgdW5zaWduZWQgaW50CXVBc3NvY0NvdW50OworICAgIGJvb2wgYk1vcmVEYXRhOwogCiAgICAgLy8gUW9TCi0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYkdycEFja1BvbGljeTsKKyAgICBib29sIGJHcnBBY2tQb2xpY3k7CiAKICAgICAvLyBmb3IgT0lEXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTgotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgIGJBc3NvY0luZm9TZXQ7CisgICAgYm9vbCBiQXNzb2NJbmZvU2V0OwogCiAKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBieUF1dG9GQkN0cmw7CisgICAgdW5zaWduZWQgY2hhciBieUF1dG9GQkN0cmw7CiAKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiVHhNSUNGYWlsOwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgIGJSeE1JQ0ZhaWw7CisgICAgYm9vbCBiVHhNSUNGYWlsOworICAgIGJvb2wgYlJ4TUlDRmFpbDsKIAogCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdVJBVEVJZHg7CisgICAgdW5zaWduZWQgaW50CXVSQVRFSWR4OwogCiAKICAgICAvLyBGb3IgVXBkYXRlIEJhc2VCYW5kIFZHQSBHYWluIE9mZnNldAotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgIGJVcGRhdGVCQlZHQTsKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICB1QkJWR0FEaWZmQ291bnQ7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlCQlZHQU5ldzsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBieUJCVkdBQ3VycmVudDsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlCQlZHQVtCQl9WR0FfTEVWRUxdOwotICAgIExPTkcgICAgICAgICAgICAgICAgICAgIGxkQm1UaHJlc2hvbGRbQkJfVkdBX0xFVkVMXTsKKyAgICBib29sIGJVcGRhdGVCQlZHQTsKKyAgICB1bnNpZ25lZCBpbnQJdUJCVkdBRGlmZkNvdW50OworICAgIHVuc2lnbmVkIGNoYXIgYnlCQlZHQU5ldzsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5QkJWR0FDdXJyZW50OworICAgIHVuc2lnbmVkIGNoYXIgYWJ5QkJWR0FbQkJfVkdBX0xFVkVMXTsKKyAgICBsb25nICAgICAgICAgICAgICAgICAgICBsZEJtVGhyZXNob2xkW0JCX1ZHQV9MRVZFTF07CiAKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBieUJCUHJlRURSU1NJOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGJ5QkJQcmVFREluZGV4OworICAgIHVuc2lnbmVkIGNoYXIgYnlCQlByZUVEUlNTSTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5QkJQcmVFREluZGV4OwogCiAKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiUmFkaW9DbWQ7Ci0gICAgRFdPUkQgICAgICAgICAgICAgICAgICAgZHdEaWFnUmVmQ291bnQ7CisgICAgYm9vbCBiUmFkaW9DbWQ7CisgICAgdW5zaWduZWQgbG9uZyBkd0RpYWdSZWZDb3VudDsKIAogICAgIC8vIEZvciBGT0UgVHVuaW5nCi0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlGT0VUdW5pbmc7CisgICAgdW5zaWduZWQgY2hhciBieUZPRVR1bmluZzsKIAogICAgIC8vIEZvciBBdXRvIFBvd2VyIFR1bm5pbmcKIAotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGJ5QXV0b1B3clR1bm5pbmc7Ci0gICAgU0hPUlQgICAgICAgICAgICAgICAgICAgc1BTZXRQb2ludENDSzsKLSAgICBTSE9SVCAgICAgICAgICAgICAgICAgICBzUFNldFBvaW50T0ZETUc7Ci0gICAgU0hPUlQgICAgICAgICAgICAgICAgICAgc1BTZXRQb2ludE9GRE1BOwotICAgIExPTkcgICAgICAgICAgICAgICAgICAgIGxQRm9ybXVsYU9mZnNldDsKLSAgICBTSE9SVCAgICAgICAgICAgICAgICAgICBzUFRocmVzaG9sZDsKLSAgICBDSEFSICAgICAgICAgICAgICAgICAgICBjQWRqdXN0U3RlcDsKLSAgICBDSEFSICAgICAgICAgICAgICAgICAgICBjTWluVHhBR0M7CisgICAgdW5zaWduZWQgY2hhciBieUF1dG9Qd3JUdW5uaW5nOworICAgIHNob3J0ICAgICAgICAgICAgICAgICAgIHNQU2V0UG9pbnRDQ0s7CisgICAgc2hvcnQgICAgICAgICAgICAgICAgICAgc1BTZXRQb2ludE9GRE1HOworICAgIHNob3J0ICAgICAgICAgICAgICAgICAgIHNQU2V0UG9pbnRPRkRNQTsKKyAgICBsb25nICAgICAgICAgICAgICAgICAgICBsUEZvcm11bGFPZmZzZXQ7CisgICAgc2hvcnQgICAgICAgICAgICAgICAgICAgc1BUaHJlc2hvbGQ7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgY0FkanVzdFN0ZXA7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgY01pblR4QUdDOwogCiAgICAgLy8gRm9yIFJGIFBvd2VyIHRhYmxlCi0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlDQ0tQd3I7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlPRkRNUHdyRzsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBieUN1clB3cjsKLSAgICBJOCAgICAgICAgICAgICAgICAgICAgICBieUN1clB3cmRCbTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlDQ0tQd3JUYmxbQ0JfTUFYX0NIQU5ORUxfMjRHKzFdOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGFieU9GRE1Qd3JUYmxbQ0JfTUFYX0NIQU5ORUwrMV07Ci0gICAgSTggICAgICAgICAgICAgICAgICAgICAgYWJ5Q0NLRGVmYXVsdFB3cltDQl9NQVhfQ0hBTk5FTF8yNEcrMV07Ci0gICAgSTggICAgICAgICAgICAgICAgICAgICAgYWJ5T0ZETURlZmF1bHRQd3JbQ0JfTUFYX0NIQU5ORUwrMV07Ci0gICAgSTggICAgICAgICAgICAgICAgICAgICAgYWJ5UmVnUHdyW0NCX01BWF9DSEFOTkVMKzFdOwotICAgIEk4ICAgICAgICAgICAgICAgICAgICAgIGFieUxvY2FsUHdyW0NCX01BWF9DSEFOTkVMKzFdOworICAgIHVuc2lnbmVkIGNoYXIgYnlDQ0tQd3I7CisgICAgdW5zaWduZWQgY2hhciBieU9GRE1Qd3JHOworICAgIHVuc2lnbmVkIGNoYXIgYnlDdXJQd3I7CisgICAgY2hhcgkgYnlDdXJQd3JkQm07CisgICAgdW5zaWduZWQgY2hhciBhYnlDQ0tQd3JUYmxbQ0JfTUFYX0NIQU5ORUxfMjRHKzFdOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5T0ZETVB3clRibFtDQl9NQVhfQ0hBTk5FTCsxXTsKKyAgICBjaGFyCWFieUNDS0RlZmF1bHRQd3JbQ0JfTUFYX0NIQU5ORUxfMjRHKzFdOworICAgIGNoYXIJYWJ5T0ZETURlZmF1bHRQd3JbQ0JfTUFYX0NIQU5ORUwrMV07CisgICAgY2hhcglhYnlSZWdQd3JbQ0JfTUFYX0NIQU5ORUwrMV07CisgICAgY2hhcglhYnlMb2NhbFB3cltDQl9NQVhfQ0hBTk5FTCsxXTsKIAogCiAgICAgLy8gQmFzZUJhbmQgTG9vcGJhY2sgVXNlCi0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlCQkNSNGQ7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlCQkNSYzk7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlCQkNSODg7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlCQkNSMDk7CisgICAgdW5zaWduZWQgY2hhciBieUJCQ1I0ZDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5QkJDUmM5OworICAgIHVuc2lnbmVkIGNoYXIgYnlCQkNSODg7CisgICAgdW5zaWduZWQgY2hhciBieUJCQ1IwOTsKIAogICAgIC8vIGNvbW1hbmQgdGltZXIKICAgICBzdHJ1Y3QgdGltZXJfbGlzdCAgICAgICBzVGltZXJDb21tYW5kOwogI2lmZGVmIFR4SW5TbGVlcAogICAgICBzdHJ1Y3QgdGltZXJfbGlzdCAgICAgICBzVGltZXJUeERhdGE7Ci0gICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICBuVHhEYXRhVGltZUNvdXQ7Ci0gICAgIEJPT0wgIGZUeERhdGFJblNsZWVwOwotICAgICBCT09MICBJc1R4RGF0YVRyaWdnZXI7CisgICAgIHVuc2lnbmVkIGxvbmcgblR4RGF0YVRpbWVDb3V0OworICAgICBib29sIGZUeERhdGFJblNsZWVwOworICAgICBib29sIElzVHhEYXRhVHJpZ2dlcjsKICNlbmRpZgogCiAjaWZkZWYgV1BBX1NNX1RyYW5zdGF0dXMKLSAgICBCT09MICBmV1BBX0F1dGhlbmVkOyAgICAgICAgICAgLy9pcyBXUEEvV1BBLVBTSyBvciBXUEEyL1dQQTItUFNLIGF1dGhlbj8/CisgICAgYm9vbCBmV1BBX0F1dGhlbmVkOyAgICAgICAgICAgLy9pcyBXUEEvV1BBLVBTSyBvciBXUEEyL1dQQTItUFNLIGF1dGhlbj8/CiAjZW5kaWYKLSAgICBCWVRFICAgICAgICAgICAgYnlSZUFzc29jQ291bnQ7ICAgLy9taWtlIGFkZDpyZS1hc3NvY2lhdGlvbiByZXRyeSB0aW1lcyEKLSAgICBCWVRFICAgICAgICAgICAgYnlMaW5rV2FpdENvdW50OworICAgIHVuc2lnbmVkIGNoYXIgYnlSZUFzc29jQ291bnQ7ICAgLy9taWtlIGFkZDpyZS1hc3NvY2lhdGlvbiByZXRyeSB0aW1lcyEKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TGlua1dhaXRDb3VudDsKIAogCi0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYWJ5Tm9kZU5hbWVbMTddOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5Tm9kZU5hbWVbMTddOwogCi0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYkRpdmVyc2l0eVJlZ0N0bE9OOwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgIGJEaXZlcnNpdHlFbmFibGU7Ci0gICAgVUxPTkcgICAgICAgICAgICAgICAgICAgdWxEaXZlcnNpdHlOVmFsdWU7Ci0gICAgVUxPTkcgICAgICAgICAgICAgICAgICAgdWxEaXZlcnNpdHlNVmFsdWU7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlUTWF4OwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGJ5VE1heDI7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlUTWF4MzsKLSAgICBVTE9ORyAgICAgICAgICAgICAgICAgICB1bFNRM1RIOworICAgIGJvb2wgYkRpdmVyc2l0eVJlZ0N0bE9OOworICAgIGJvb2wgYkRpdmVyc2l0eUVuYWJsZTsKKyAgICB1bnNpZ25lZCBsb25nIHVsRGl2ZXJzaXR5TlZhbHVlOworICAgIHVuc2lnbmVkIGxvbmcgdWxEaXZlcnNpdHlNVmFsdWU7CisgICAgdW5zaWduZWQgY2hhciBieVRNYXg7CisgICAgdW5zaWduZWQgY2hhciBieVRNYXgyOworICAgIHVuc2lnbmVkIGNoYXIgYnlUTWF4MzsKKyAgICB1bnNpZ25lZCBsb25nIHVsU1EzVEg7CiAKIC8vIEFOVCBkaXZlcnNpdHkKLSAgICBVTE9ORyAgICAgICAgICAgICAgICAgICB1RGl2ZXJzaXR5Q250OwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGJ5QW50ZW5uYVN0YXRlOwotICAgIFVMT05HICAgICAgICAgICAgICAgICAgIHVsUmF0aW9fU3RhdGUwOwotICAgIFVMT05HICAgICAgICAgICAgICAgICAgIHVsUmF0aW9fU3RhdGUxOworICAgIHVuc2lnbmVkIGxvbmcgdURpdmVyc2l0eUNudDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5QW50ZW5uYVN0YXRlOworICAgIHVuc2lnbmVkIGxvbmcgdWxSYXRpb19TdGF0ZTA7CisgICAgdW5zaWduZWQgbG9uZyB1bFJhdGlvX1N0YXRlMTsKIAogICAgIC8vU1EzIGZ1bmN0aW9ucyBmb3IgYW50ZW5uYSBkaXZlcnNpdHkKICAgICBzdHJ1Y3QgdGltZXJfbGlzdCAgICAgICAgICAgVGltZXJTUTNUbWF4MTsKQEAgLTc0Nyw4MCArNzQ3LDgwIEBACiAgICAgc3RydWN0IHRpbWVyX2xpc3QgICAgICAgICAgIFRpbWVyU1EzVG1heDM7CiAKIAotICAgIFVMT05HICAgICAgICAgICAgICAgICAgIHVOdW1TUTNbTUFYX1JBVEVdOwotICAgIFdPUkQgICAgICAgICAgICAgICAgICAgIHdBbnREaXZlcnNpdHlNYXhSYXRlOworICAgIHVuc2lnbmVkIGxvbmcgdU51bVNRM1tNQVhfUkFURV07CisgICAgdW5zaWduZWQgc2hvcnQgd0FudERpdmVyc2l0eU1heFJhdGU7CiAKIAogICAgIFNFdGhlcm5ldEhlYWRlciAgICAgICAgIHNUeEV0aEhlYWRlcjsKICAgICBTRXRoZXJuZXRIZWFkZXIgICAgICAgICBzUnhFdGhIZWFkZXI7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYWJ5QnJvYWRjYXN0QWRkcltFVEhfQUxFTl07Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYWJ5U05BUF9SRkMxMDQyW0VUSF9BTEVOXTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlTTkFQX0JyaWRnZXR1bm5lbFtFVEhfQUxFTl07Ci0gICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICBhYnlFRVBST01bRUVQX01BWF9DT05URVhUX1NJWkVdOyAgLy9EV09SRCBhbGlnbm1lbnQKKyAgICB1bnNpZ25lZCBjaGFyIGFieUJyb2FkY2FzdEFkZHJbRVRIX0FMRU5dOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5U05BUF9SRkMxMDQyW0VUSF9BTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVNOQVBfQnJpZGdldHVubmVsW0VUSF9BTEVOXTsKKyAgICAgdW5zaWduZWQgY2hhciBhYnlFRVBST01bRUVQX01BWF9DT05URVhUX1NJWkVdOyAgLy91bnNpZ25lZCBsb25nIGFsaWdubWVudAogICAgIC8vIFByZS1BdXRoZW50aWNhdGlvbiAmIFBNSyBjYWNoZQogICAgIFNQTUtJRCAgICAgICAgICAgICAgICAgIGdzUE1LSUQ7CiAgICAgU1BNS0lEQ2FuZGlkYXRlRXZlbnQgICAgZ3NQTUtJRENhbmRpZGF0ZTsKIAogCiAgICAgLy8gZm9yIDgwMi4xMWgKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiMTFoRW5hYmxlOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGFieUNvdW50cnlDb2RlWzNdOworICAgIGJvb2wgYjExaEVuYWJsZTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUNvdW50cnlDb2RlWzNdOwogICAgIC8vIGZvciA4MDIuMTFoIERGUwotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIHVOdW1PZk1lYXN1cmVFSURzOworICAgIHVuc2lnbmVkIGludAl1TnVtT2ZNZWFzdXJlRUlEczsKICAgICBQV0xBTl9JRV9NRUFTVVJFX1JFUSAgICBwQ3Vyck1lYXN1cmVFSUQ7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYk1lYXN1cmVJblByb2dyZXNzOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGJ5T3JnQ2hhbm5lbDsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBieU9yZ1JDUjsKLSAgICBEV09SRCAgICAgICAgICAgICAgICAgICBkd09yZ01BUjA7Ci0gICAgRFdPUkQgICAgICAgICAgICAgICAgICAgZHdPcmdNQVI0OwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGJ5QmFzaWNNYXA7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlDQ0FGcmFjdGlvbjsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlSUElzWzhdOwotICAgIERXT1JEICAgICAgICAgICAgICAgICAgIGR3UlBJc1s4XTsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiQ2hhbm5lbFN3aXRjaDsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBieU5ld0NoYW5uZWw7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlDaGFubmVsU3dpdGNoQ291bnQ7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYlF1aWV0RW5hYmxlOwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgIGJFbmFibGVGaXJzdFF1aWV0OwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGJ5UXVpZXRTdGFydENvdW50OwotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIHVRdWlldEVucXVldWU7Ci0gICAgRFdPUkQgICAgICAgICAgICAgICAgICAgZHdDdXJyZW50UXVpZXRFbmRUaW1lOworICAgIGJvb2wgYk1lYXN1cmVJblByb2dyZXNzOworICAgIHVuc2lnbmVkIGNoYXIgYnlPcmdDaGFubmVsOworICAgIHVuc2lnbmVkIGNoYXIgYnlPcmdSQ1I7CisgICAgdW5zaWduZWQgbG9uZyBkd09yZ01BUjA7CisgICAgdW5zaWduZWQgbG9uZyBkd09yZ01BUjQ7CisgICAgdW5zaWduZWQgY2hhciBieUJhc2ljTWFwOworICAgIHVuc2lnbmVkIGNoYXIgYnlDQ0FGcmFjdGlvbjsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVJQSXNbOF07CisgICAgdW5zaWduZWQgbG9uZyBkd1JQSXNbOF07CisgICAgYm9vbCBiQ2hhbm5lbFN3aXRjaDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TmV3Q2hhbm5lbDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q2hhbm5lbFN3aXRjaENvdW50OworICAgIGJvb2wgYlF1aWV0RW5hYmxlOworICAgIGJvb2wgYkVuYWJsZUZpcnN0UXVpZXQ7CisgICAgdW5zaWduZWQgY2hhciBieVF1aWV0U3RhcnRDb3VudDsKKyAgICB1bnNpZ25lZCBpbnQJdVF1aWV0RW5xdWV1ZTsKKyAgICB1bnNpZ25lZCBsb25nIGR3Q3VycmVudFF1aWV0RW5kVGltZTsKICAgICBTUXVpZXRDb250cm9sICAgICAgICAgICBzUXVpZXRbTUFYX1FVSUVUX0NPVU5UXTsKICAgICAvLyBmb3IgODAyLjExaCBUUEMKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiQ291bnRyeUluZm81RzsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiQ291bnRyeUluZm8yNEc7CisgICAgYm9vbCBiQ291bnRyeUluZm81RzsKKyAgICBib29sIGJDb3VudHJ5SW5mbzI0RzsKIAotICAgIFdPUkQgICAgICAgICAgICAgICAgICAgIHdCZWFjb25JbnRlcnZhbDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3QmVhY29uSW50ZXJ2YWw7CiAKICAgICAvL1dQQSBzdXBwbGljYW50IGRlYW1vbgogCXN0cnVjdCBuZXRfZGV2aWNlICAgICAgICp3cGFkZXY7Ci0JQk9PTCAgICAgICAgICAgICAgICAgICAgYldQQURFVlVwOworCWJvb2wgYldQQURFVlVwOwogICAgIHN0cnVjdCBza19idWZmICAgICAgICAgICpza2I7CiAjaWZkZWYgV1BBX1NVUFBMSUNBTlRfRFJJVkVSX1dFWFRfU1VQUE9SVAogLyoKLSAgICAgICAgQk9PTCAgICAgICAgICAgICAgICAgYndleHRzdGVwMDsKLSAgICAgICAgQk9PTCAgICAgICAgICAgICAgICAgYndleHRzdGVwMTsKLSAgICAgICAgQk9PTCAgICAgICAgICAgICAgICAgYndleHRzdGVwMjsKLSAgICAgICAgQk9PTCAgICAgICAgICAgICAgICAgYndleHRzdGVwMzsKKyAgICAgICAgYm9vbCBid2V4dHN0ZXAwOworICAgICAgICBib29sIGJ3ZXh0c3RlcDE7CisgICAgICAgIGJvb2wgYndleHRzdGVwMjsKKyAgICAgICAgYm9vbCBid2V4dHN0ZXAzOwogICAgICAgICAqLwotICAgICAgICBVSU5UICAgICAgICAgICAgICAgICAgIGJ3ZXh0Y291bnQ7Ci0gICAgICAgIEJPT0wgICAgICAgICAgICAgICAgIGJXUEFTdXBwV2V4dEVuYWJsZWQ7CisgICAgICAgIHVuc2lnbmVkIGludAlid2V4dGNvdW50OworICAgICAgICBib29sIGJXUEFTdXBwV2V4dEVuYWJsZWQ7CiAjZW5kaWYKIAogICAgIC8vLS0KICNpZmRlZiBIT1NUQVAKICAgICAvLyB1c2VyIHNwYWNlIGRhZW1vbjogaG9zdGFwZCwgaXMgdXNlZCBmb3IgSE9TVEFQCi0JQk9PTCAgICAgICAgICAgICAgICAgICAgYkVuYWJsZUhvc3RhcGQ7Ci0JQk9PTCAgICAgICAgICAgICAgICAgICAgYkVuYWJsZTgwMjF4OwotCUJPT0wgICAgICAgICAgICAgICAgICAgIGJFbmFibGVIb3N0V0VQOworCWJvb2wgYkVuYWJsZUhvc3RhcGQ7CisJYm9vbCBiRW5hYmxlODAyMXg7CisJYm9vbCBiRW5hYmxlSG9zdFdFUDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAgICAgICAqYXBkZXY7CiAJaW50ICgqdHhfODAyMTEpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogI2VuZGlmCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdUNoYW5uZWw7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYk1BQ1N1c3BlbmQ7CisgICAgdW5zaWduZWQgaW50CXVDaGFubmVsOworICAgIGJvb2wgYk1BQ1N1c3BlbmQ7CiAKIAlzdHJ1Y3QgaXdfc3RhdGlzdGljcwl3c3RhdHM7CQkvLyB3aXJlbGVzcyBzdGF0cwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgIGJDb21taXQ7CisgICAgYm9vbCBiQ29tbWl0OwogCiB9IERFVklDRV9JTkZPLCAqUFNEZXZpY2U7CiAKQEAgLTg4MCw3ICs4ODAsNyBAQAogCiAKIAotaW5saW5lIHN0YXRpYyBCT09MIGRldmljZV9nZXRfaXAoUFNEZXZpY2UgcEluZm8pIHsKK2lubGluZSBzdGF0aWMgYm9vbCBkZXZpY2VfZ2V0X2lwKFBTRGV2aWNlIHBJbmZvKSB7CiAgICAgc3RydWN0IGluX2RldmljZSogaW5fZGV2PShzdHJ1Y3QgaW5fZGV2aWNlKikgcEluZm8tPmRldi0+aXBfcHRyOwogICAgIHN0cnVjdCBpbl9pZmFkZHIqIGlmYTsKIApAQCAtODg4LDEwICs4ODgsMTAgQEAKICAgICAgICAgaWZhPShzdHJ1Y3QgaW5faWZhZGRyKikgaW5fZGV2LT5pZmFfbGlzdDsKICAgICAgICAgaWYgKGlmYSE9TlVMTCkgewogICAgICAgICAgICAgbWVtY3B5KHBJbmZvLT5hYnlJUEFkZHIsJmlmYS0+aWZhX2FkZHJlc3MsNCk7Ci0gICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBGQUxTRTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIApAQCAtOTIwLDkgKzkyMCw5IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLUJPT0wgZGV2aWNlX2RtYTBfeG1pdChQU0RldmljZSBwRGV2aWNlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBVSU5UIHVOb2RlSW5kZXgpOwotQk9PTCBkZXZpY2VfYWxsb2NfZnJhZ19idWYoUFNEZXZpY2UgcERldmljZSwgUFNEZUZyYWdDb250cm9sQmxvY2sgcERlRik7Ci1pbnQgQ29uZmlnX0ZpbGVPcGVyYXRpb24oUFNEZXZpY2UgcERldmljZSxCT09MIGZ3cml0ZSx1bnNpZ25lZCBjaGFyICpQYXJhbWV0ZXIpOworYm9vbCBkZXZpY2VfZG1hMF94bWl0KFBTRGV2aWNlIHBEZXZpY2UsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB1Tm9kZUluZGV4KTsKK2Jvb2wgZGV2aWNlX2FsbG9jX2ZyYWdfYnVmKFBTRGV2aWNlIHBEZXZpY2UsIFBTRGVGcmFnQ29udHJvbEJsb2NrIHBEZUYpOworaW50IENvbmZpZ19GaWxlT3BlcmF0aW9uKFBTRGV2aWNlIHBEZXZpY2UsIGJvb2wgZndyaXRlLCB1bnNpZ25lZCBjaGFyICpQYXJhbWV0ZXIpOwogI2VuZGlmCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXZpY2VfY2ZnLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RldmljZV9jZmcuaAppbmRleCBkMWU5YzE5Li40MDhlZGMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RldmljZV9jZmcuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RldmljZV9jZmcuaApAQCAtMzksMTQgKzM5LDYgQEAKICAgICB1bnNpZ25lZCBjaGFyICAgYnVpbGQ7CiB9IHZlcnNpb25fdCwgKnB2ZXJzaW9uX3Q7CiAKLSNpZm5kZWYgRkFMU0UKLSNkZWZpbmUgRkFMU0UgICAoMCkKLSNlbmRpZgotCi0jaWZuZGVmIFRSVUUKLSNkZWZpbmUgVFJVRSAgICAoIShGQUxTRSkpCi0jZW5kaWYKLQogI2RlZmluZSBWSURfVEFCTEVfU0laRSAgICAgIDY0CiAjZGVmaW5lIE1DQVNUX1RBQkxFX1NJWkUgICAgNjQKICNkZWZpbmUgTUNBTV9TSVpFICAgICAgICAgICAzMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXZpY2VfbWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXZpY2VfbWFpbi5jCmluZGV4IGU0OWJiMjUuLjRkNmI2NmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RldmljZV9tYWluLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXZpY2VfbWFpbi5jCkBAIC0yNiw5ICsyNiw5IEBACiAgKgogICogRnVuY3Rpb25zOgogICoKLSAqICAgZGV2aWNlX2ZvdW5kMSAtIG1vZHVsZSBpbml0aWFsIChpbnNtb2QpIGRyaXZlciBlbnRyeQotICogICBkZXZpY2VfcmVtb3ZlMSAtIG1vZHVsZSByZW1vdmUgZW50cnkKLSAqICAgZGV2aWNlX2luaXRfaW5mbyAtIGRldmljZSBzdHJ1Y3R1cmUgcmVzb3VyY2UgYWxsb2NhdGlvbiBmdW5jdGlvbgorICogICB2dDY2NTVfcHJvYmUgLSBtb2R1bGUgaW5pdGlhbCAoaW5zbW9kKSBkcml2ZXIgZW50cnkKKyAqICAgdnQ2NjU1X3JlbW92ZSAtIG1vZHVsZSByZW1vdmUgZW50cnkKKyAqICAgdnQ2NjU1X2luaXRfaW5mbyAtIGRldmljZSBzdHJ1Y3R1cmUgcmVzb3VyY2UgYWxsb2NhdGlvbiBmdW5jdGlvbgogICogICBkZXZpY2VfZnJlZV9pbmZvIC0gZGV2aWNlIHN0cnVjdHVyZSByZXNvdXJjZSBmcmVlIGZ1bmN0aW9uCiAgKiAgIGRldmljZV9nZXRfcGNpX2luZm8gLSBnZXQgYWxsb2NhdGVkIHBjaSBpby9tZW0gcmVzb3VyY2UKICAqICAgZGV2aWNlX3ByaW50X2luZm8gLSBwcmludCBvdXQgcmVzb3VyY2UKQEAgLTYyLDYgKzYyLDcgQEAKIAogI2luY2x1ZGUgImRldmljZS5oIgogI2luY2x1ZGUgImNhcmQuaCIKKyNpbmNsdWRlICJjaGFubmVsLmgiCiAjaW5jbHVkZSAiYmFzZWJhbmQuaCIKICNpbmNsdWRlICJtYWMuaCIKICNpbmNsdWRlICJ0ZXRoZXIuaCIKQEAgLTEzMywxMCArMTM0LDEwIEBACiAKIAogI2RlZmluZSBJUF9BTElHX0RFRiAgICAgMAotLyogSVBfYnl0ZV9hbGlnbltdIGlzIHVzZWQgZm9yIElQIGhlYWRlciBEV09SRCBieXRlIGFsaWduZWQKLSAgIDA6IGluZGljYXRlIHRoZSBJUCBoZWFkZXIgd29uJ3QgYmUgRFdPUkQgYnl0ZSBhbGlnbmVkLihEZWZhdWx0KSAuCi0gICAxOiBpbmRpY2F0ZSB0aGUgSVAgaGVhZGVyIHdpbGwgYmUgRFdPUkQgYnl0ZSBhbGlnbmVkLgotICAgICAgSW4gc29tZSBlbnZpcm9tZW50LCB0aGUgSVAgaGVhZGVyIHNob3VsZCBiZSBEV09SRCBieXRlIGFsaWduZWQsCisvKiBJUF9ieXRlX2FsaWduW10gaXMgdXNlZCBmb3IgSVAgaGVhZGVyIHVuc2lnbmVkIGxvbmcgYnl0ZSBhbGlnbmVkCisgICAwOiBpbmRpY2F0ZSB0aGUgSVAgaGVhZGVyIHdvbid0IGJlIHVuc2lnbmVkIGxvbmcgYnl0ZSBhbGlnbmVkLihEZWZhdWx0KSAuCisgICAxOiBpbmRpY2F0ZSB0aGUgSVAgaGVhZGVyIHdpbGwgYmUgdW5zaWduZWQgbG9uZyBieXRlIGFsaWduZWQuCisgICAgICBJbiBzb21lIGVudmlyb21lbnQsIHRoZSBJUCBoZWFkZXIgc2hvdWxkIGJlIHVuc2lnbmVkIGxvbmcgYnl0ZSBhbGlnbmVkLAogICAgICAgb3IgdGhlIHBhY2tldCB3aWxsIGJlIGRyb3BlZCB3aGVuIHdlIHJlY2VpdmUgaXQuIChlZzogSVBWUykKICovCiBERVZJQ0VfUEFSQU0oSVBfYnl0ZV9hbGlnbiwiRW5hYmxlIElQIGhlYWRlciBkd29yZCBhbGlnbmVkIik7CkBAIC0yODQsNyArMjg1LDcgQEAKICAgICB7MCxOVUxMfQogfTsKIAotREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoZGV2aWNlX2lkX3RhYmxlKSA9IHsKK0RFRklORV9QQ0lfREVWSUNFX1RBQkxFKHZ0NjY1NV9wY2lfaWRfdGFibGUpID0gewogCXsgUENJX1ZERVZJQ0UoVklBLCAweDMyNTMpLCAoa2VybmVsX3Vsb25nX3QpY2hpcF9pbmZvX3RhYmxlfSwKIAl7IDAsIH0KIH07CkBAIC0yOTIsMTAgKzI5MywxMCBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCi1zdGF0aWMgaW50ICBkZXZpY2VfZm91bmQxKHN0cnVjdCBwY2lfZGV2ICpwY2lkLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KTsKLXN0YXRpYyBCT09MIGRldmljZV9pbml0X2luZm8oc3RydWN0IHBjaV9kZXYqIHBjaWQsIFBTRGV2aWNlKiBwcERldmljZSwgUENISVBfSU5GTyk7CitzdGF0aWMgaW50ICB2dDY2NTVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaWQsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOworc3RhdGljIGJvb2wgdnQ2NjU1X2luaXRfaW5mbyhzdHJ1Y3QgcGNpX2RldiogcGNpZCwgUFNEZXZpY2UqIHBwRGV2aWNlLCBQQ0hJUF9JTkZPKTsKIHN0YXRpYyB2b2lkIGRldmljZV9mcmVlX2luZm8oUFNEZXZpY2UgcERldmljZSk7Ci1zdGF0aWMgQk9PTCBkZXZpY2VfZ2V0X3BjaV9pbmZvKFBTRGV2aWNlLCBzdHJ1Y3QgcGNpX2RldiogcGNpZCk7CitzdGF0aWMgYm9vbCBkZXZpY2VfZ2V0X3BjaV9pbmZvKFBTRGV2aWNlLCBzdHJ1Y3QgcGNpX2RldiogcGNpZCk7CiBzdGF0aWMgdm9pZCBkZXZpY2VfcHJpbnRfaW5mbyhQU0RldmljZSBwRGV2aWNlKTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZGV2aWNlX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGRldmljZV9pbml0X2RpdmVyc2l0eV90aW1lcihQU0RldmljZSBwRGV2aWNlKTsKQEAgLTMyNiwxMiArMzI3LDEyIEBACiAKIHN0YXRpYyBpbnQgIGRldmljZV9kbWEwX3R4XzgwMjExKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogLy8yMDA4LTA3MTQ8QWRkPmJ5IE1pa2UgTGl1Ci1zdGF0aWMgQk9PTCBkZXZpY2VfcmVsZWFzZV9XUEFERVYoUFNEZXZpY2UgcERldmljZSk7CitzdGF0aWMgYm9vbCBkZXZpY2VfcmVsZWFzZV9XUEFERVYoUFNEZXZpY2UgcERldmljZSk7CiAKIHN0YXRpYyBpbnQgIGV0aHRvb2xfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdXNlcmFkZHIpOwotc3RhdGljIGludCAgZGV2aWNlX3J4X3NydihQU0RldmljZSBwRGV2aWNlLCBVSU5UIHVJZHgpOwotc3RhdGljIGludCAgZGV2aWNlX3R4X3NydihQU0RldmljZSBwRGV2aWNlLCBVSU5UIHVJZHgpOwotc3RhdGljIEJPT0wgZGV2aWNlX2FsbG9jX3J4X2J1ZihQU0RldmljZSBwRGV2aWNlLCBQU1J4RGVzYyBwRGVzYyk7CitzdGF0aWMgaW50ICBkZXZpY2Vfcnhfc3J2KFBTRGV2aWNlIHBEZXZpY2UsIHVuc2lnbmVkIGludCB1SWR4KTsKK3N0YXRpYyBpbnQgIGRldmljZV90eF9zcnYoUFNEZXZpY2UgcERldmljZSwgdW5zaWduZWQgaW50IHVJZHgpOworc3RhdGljIGJvb2wgZGV2aWNlX2FsbG9jX3J4X2J1ZihQU0RldmljZSBwRGV2aWNlLCBQU1J4RGVzYyBwRGVzYyk7CiBzdGF0aWMgdm9pZCBkZXZpY2VfaW5pdF9yZWdpc3RlcnMoUFNEZXZpY2UgcERldmljZSwgREVWSUNFX0lOSVRfVFlQRSBJbml0VHlwZSk7CiBzdGF0aWMgdm9pZCBkZXZpY2VfZnJlZV90eF9idWYoUFNEZXZpY2UgcERldmljZSwgUFNUeERlc2MgcERlc2MpOwogc3RhdGljIHZvaWQgZGV2aWNlX2ZyZWVfdGQwX3JpbmcoUFNEZXZpY2UgcERldmljZSk7CkBAIC0zNDAsNyArMzQxLDggQEAKIHN0YXRpYyB2b2lkIGRldmljZV9mcmVlX3JkMV9yaW5nKFBTRGV2aWNlIHBEZXZpY2UpOwogc3RhdGljIHZvaWQgZGV2aWNlX2ZyZWVfcmluZ3MoUFNEZXZpY2UgcERldmljZSk7CiBzdGF0aWMgdm9pZCBkZXZpY2VfZnJlZV9mcmFnX2J1ZihQU0RldmljZSBwRGV2aWNlKTsKLXN0YXRpYyBpbnQgQ29uZmlnX0ZpbGVHZXRQYXJhbWV0ZXIoVUNIQVIgKnN0cmluZywgVUNIQVIgKmRlc3QsVUNIQVIgKnNvdXJjZSk7CitzdGF0aWMgaW50IENvbmZpZ19GaWxlR2V0UGFyYW1ldGVyKHVuc2lnbmVkIGNoYXIgKnN0cmluZywKKwkJdW5zaWduZWQgY2hhciAqZGVzdCwgdW5zaWduZWQgY2hhciAqc291cmNlKTsKIAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IFZhcmlhYmxlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMzU3LDcgKzM1OSw3IEBACiAgICAgcmV0dXJuIGNoaXBfaW5mb190YWJsZVtpXS5uYW1lOwogfQogCi1zdGF0aWMgdm9pZCBkZXZpY2VfcmVtb3ZlMShzdHJ1Y3QgcGNpX2RldiAqcGNpZCkKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCB2dDY2NTVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lkKQogewogICAgIFBTRGV2aWNlIHBEZXZpY2U9cGNpX2dldF9kcnZkYXRhKHBjaWQpOwogCkBAIC0zODQsNyArMzg2LDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLWRldmljZV9zZXRfYm9vbF9vcHQodW5zaWduZWQgaW50ICpvcHQsIGludCB2YWwsQk9PTCBkZWYsVTMyIGZsYWcsIGNoYXIqIG5hbWUsY2hhciogZGV2bmFtZSkgeworZGV2aWNlX3NldF9ib29sX29wdCh1bnNpZ25lZCBpbnQgKm9wdCwgaW50IHZhbCxib29sIGRlZix1MzIgZmxhZywgY2hhciogbmFtZSxjaGFyKiBkZXZuYW1lKSB7CiAgICAgKCpvcHQpJj0ofmZsYWcpOwogICAgIGlmICh2YWw9PS0xKQogICAgICAgICAqb3B0fD0oZGVmID8gZmxhZyA6IDApOwpAQCAtMzk0LDcgKzM5Niw3IEBACiAgICAgICAgICpvcHR8PShkZWYgPyBmbGFnIDogMCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfSU5GTywgS0VSTl9OT1RJQ0UgIiVzOiBzZXQgcGFyYW1ldGVyICVzIHRvICVzXG4iLAotICAgICAgICAgICAgZGV2bmFtZSxuYW1lICwgdmFsID8gIlRSVUUiIDogIkZBTFNFIik7CisgICAgICAgICAgICBkZXZuYW1lLG5hbWUgLCB2YWwgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKICAgICAgICAgKm9wdHw9KHZhbCA/IGZsYWcgOiAwKTsKICAgICB9CiB9CkBAIC00MjksOSArNDMxLDkgQEAKIHN0YXRpYyB2b2lkCiBkZXZpY2Vfc2V0X29wdGlvbnMoUFNEZXZpY2UgcERldmljZSkgewogCi0gICAgQllURSAgICBhYnlCcm9hZGNhc3RBZGRyW0VUSF9BTEVOXSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTsKLSAgICBCWVRFICAgIGFieVNOQVBfUkZDMTA0MltFVEhfQUxFTl0gPSB7MHhBQSwgMHhBQSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMH07Ci0gICAgQllURSAgICBhYnlTTkFQX0JyaWRnZXR1bm5lbFtFVEhfQUxFTl0gPSB7MHhBQSwgMHhBQSwgMHgwMywgMHgwMCwgMHgwMCwgMHhGOH07CisgICAgdW5zaWduZWQgY2hhciBhYnlCcm9hZGNhc3RBZGRyW0VUSF9BTEVOXSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVNOQVBfUkZDMTA0MltFVEhfQUxFTl0gPSB7MHhBQSwgMHhBQSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMH07CisgICAgdW5zaWduZWQgY2hhciBhYnlTTkFQX0JyaWRnZXR1bm5lbFtFVEhfQUxFTl0gPSB7MHhBQSwgMHhBQSwgMHgwMywgMHgwMCwgMHgwMCwgMHhGOH07CiAKIAogICAgIG1lbWNweShwRGV2aWNlLT5hYnlCcm9hZGNhc3RBZGRyLCBhYnlCcm9hZGNhc3RBZGRyLCBFVEhfQUxFTik7CkBAIC00NTAsNyArNDUyLDcgQEAKICAgICBwRGV2aWNlLT5iMTFoRW5hYmxlID0gKHBEZXZpY2UtPnNPcHRzLmZsYWdzICYgREVWSUNFX0ZMQUdTXzgwMjExaF9NT0RFKSA/IDEgOiAwOwogICAgIHBEZXZpY2UtPmJEaXZlcnNpdHlSZWdDdGxPTiA9IChwRGV2aWNlLT5zT3B0cy5mbGFncyAmIERFVklDRV9GTEFHU19EaXZlcnNpdHlBTlQpID8gMSA6IDA7CiAgICAgcERldmljZS0+dUNvbm5lY3Rpb25SYXRlID0gcERldmljZS0+c09wdHMuZGF0YV9yYXRlOwotICAgIGlmIChwRGV2aWNlLT51Q29ubmVjdGlvblJhdGUgPCBSQVRFX0FVVE8pIHBEZXZpY2UtPmJGaXhSYXRlID0gVFJVRTsKKyAgICBpZiAocERldmljZS0+dUNvbm5lY3Rpb25SYXRlIDwgUkFURV9BVVRPKSBwRGV2aWNlLT5iRml4UmF0ZSA9IHRydWU7CiAgICAgcERldmljZS0+YnlCQlR5cGUgPSBwRGV2aWNlLT5zT3B0cy5iYnBfdHlwZTsKICAgICBwRGV2aWNlLT5ieVBhY2tldFR5cGUgPSBwRGV2aWNlLT5ieUJCVHlwZTsKIApAQCAtNDU4LDQ1ICs0NjAsNDUgQEAKIAlwRGV2aWNlLT5ieUF1dG9GQkN0cmwgPSBBVVRPX0ZCXzA7CiAJLy9wRGV2aWNlLT5ieUF1dG9GQkN0cmwgPSBBVVRPX0ZCXzE7CiAvL1BMSUNFX0RFQlVHPC0KLXBEZXZpY2UtPmJVcGRhdGVCQlZHQSA9IFRSVUU7CitwRGV2aWNlLT5iVXBkYXRlQkJWR0EgPSB0cnVlOwogICAgIHBEZXZpY2UtPmJ5Rk9FVHVuaW5nID0gMDsKICAgICBwRGV2aWNlLT53Q1RTRHVyYXRpb24gPSAwOwogICAgIHBEZXZpY2UtPmJ5UHJlYW1ibGVUeXBlID0gMDsKIAogCi0gICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgdUNoYW5uZWw9ICVkXG4iLChJTlQpcERldmljZS0+dUNoYW5uZWwpOwotICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIGJ5T3BNb2RlPSAlZFxuIiwoSU5UKXBEZXZpY2UtPmJ5T3BNb2RlKTsKLSAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiBlUFNNb2RlPSAlZFxuIiwoSU5UKXBEZXZpY2UtPmVQU01vZGUpOwotICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIHdSVFNUaHJlc2hvbGQ9ICVkXG4iLChJTlQpcERldmljZS0+d1JUU1RocmVzaG9sZCk7Ci0gICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgYnlTaG9ydFJldHJ5TGltaXQ9ICVkXG4iLChJTlQpcERldmljZS0+YnlTaG9ydFJldHJ5TGltaXQpOwotICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIGJ5TG9uZ1JldHJ5TGltaXQ9ICVkXG4iLChJTlQpcERldmljZS0+YnlMb25nUmV0cnlMaW1pdCk7Ci0gICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgYnlQcmVhbWJsZVR5cGU9ICVkXG4iLChJTlQpcERldmljZS0+YnlQcmVhbWJsZVR5cGUpOwotICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIGJ5U2hvcnRQcmVhbWJsZT0gJWRcbiIsKElOVClwRGV2aWNlLT5ieVNob3J0UHJlYW1ibGUpOwotICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIHVDb25uZWN0aW9uUmF0ZT0gJWRcbiIsKElOVClwRGV2aWNlLT51Q29ubmVjdGlvblJhdGUpOwotICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIGJ5QkJUeXBlPSAlZFxuIiwoSU5UKXBEZXZpY2UtPmJ5QkJUeXBlKTsKLSAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiBwRGV2aWNlLT5iMTFoRW5hYmxlPSAlZFxuIiwoSU5UKXBEZXZpY2UtPmIxMWhFbmFibGUpOwotICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIHBEZXZpY2UtPmJEaXZlcnNpdHlSZWdDdGxPTj0gJWRcbiIsKElOVClwRGV2aWNlLT5iRGl2ZXJzaXR5UmVnQ3RsT04pOworICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIHVDaGFubmVsPSAlZFxuIiwoaW50KXBEZXZpY2UtPnVDaGFubmVsKTsKKyAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiBieU9wTW9kZT0gJWRcbiIsKGludClwRGV2aWNlLT5ieU9wTW9kZSk7CisgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgZVBTTW9kZT0gJWRcbiIsKGludClwRGV2aWNlLT5lUFNNb2RlKTsKKyAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiB3UlRTVGhyZXNob2xkPSAlZFxuIiwoaW50KXBEZXZpY2UtPndSVFNUaHJlc2hvbGQpOworICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIGJ5U2hvcnRSZXRyeUxpbWl0PSAlZFxuIiwoaW50KXBEZXZpY2UtPmJ5U2hvcnRSZXRyeUxpbWl0KTsKKyAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiBieUxvbmdSZXRyeUxpbWl0PSAlZFxuIiwoaW50KXBEZXZpY2UtPmJ5TG9uZ1JldHJ5TGltaXQpOworICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIGJ5UHJlYW1ibGVUeXBlPSAlZFxuIiwoaW50KXBEZXZpY2UtPmJ5UHJlYW1ibGVUeXBlKTsKKyAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiBieVNob3J0UHJlYW1ibGU9ICVkXG4iLChpbnQpcERldmljZS0+YnlTaG9ydFByZWFtYmxlKTsKKyAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiB1Q29ubmVjdGlvblJhdGU9ICVkXG4iLChpbnQpcERldmljZS0+dUNvbm5lY3Rpb25SYXRlKTsKKyAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiBieUJCVHlwZT0gJWRcbiIsKGludClwRGV2aWNlLT5ieUJCVHlwZSk7CisgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgcERldmljZS0+YjExaEVuYWJsZT0gJWRcbiIsKGludClwRGV2aWNlLT5iMTFoRW5hYmxlKTsKKyAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiBwRGV2aWNlLT5iRGl2ZXJzaXR5UmVnQ3RsT049ICVkXG4iLChpbnQpcERldmljZS0+YkRpdmVyc2l0eVJlZ0N0bE9OKTsKIH0KIAotc3RhdGljIHZvaWQgc192Q29tcGxldGVDdXJyZW50TWVhc3VyZSAoUFNEZXZpY2UgcERldmljZSwgQllURSBieVJlc3VsdCkKK3N0YXRpYyB2b2lkIHNfdkNvbXBsZXRlQ3VycmVudE1lYXN1cmUgKFBTRGV2aWNlIHBEZXZpY2UsIHVuc2lnbmVkIGNoYXIgYnlSZXN1bHQpCiB7Ci0gICAgVUlOVCAgICBpaTsKLSAgICBEV09SRCAgIGR3RHVyYXRpb24gPSAwOwotICAgIEJZVEUgICAgYnlSUEkwID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgaWk7CisgICAgdW5zaWduZWQgbG9uZyBkd0R1cmF0aW9uID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UlBJMCA9IDA7CiAKICAgICBmb3IoaWk9MTtpaTw4O2lpKyspIHsKICAgICAgICAgcERldmljZS0+ZHdSUElzW2lpXSAqPSAyNTU7Ci0gICAgICAgIGR3RHVyYXRpb24gfD0gKigoUFdPUkQpIChwRGV2aWNlLT5wQ3Vyck1lYXN1cmVFSUQtPnNSZXEuYWJ5RHVyYXRpb24pKTsKKyAgICAgICAgZHdEdXJhdGlvbiB8PSAqKCh1bnNpZ25lZCBzaG9ydCAqKSAocERldmljZS0+cEN1cnJNZWFzdXJlRUlELT5zUmVxLmFieUR1cmF0aW9uKSk7CiAgICAgICAgIGR3RHVyYXRpb24gPDw9IDEwOwogICAgICAgICBwRGV2aWNlLT5kd1JQSXNbaWldIC89IGR3RHVyYXRpb247Ci0gICAgICAgIHBEZXZpY2UtPmFieVJQSXNbaWldID0gKEJZVEUpIHBEZXZpY2UtPmR3UlBJc1tpaV07CisgICAgICAgIHBEZXZpY2UtPmFieVJQSXNbaWldID0gKHVuc2lnbmVkIGNoYXIpIHBEZXZpY2UtPmR3UlBJc1tpaV07CiAgICAgICAgIGJ5UlBJMCArPSBwRGV2aWNlLT5hYnlSUElzW2lpXTsKICAgICB9CiAgICAgcERldmljZS0+YWJ5UlBJc1swXSA9ICgweEZGIC0gYnlSUEkwKTsKIAogICAgICBpZiAocERldmljZS0+dU51bU9mTWVhc3VyZUVJRHMgPT0gMCkgewogICAgICAgICBWTlRXSUZJYk1lYXN1cmVSZXBvcnQoICBwRGV2aWNlLT5wTWdtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+cEN1cnJNZWFzdXJlRUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieVJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YnlCYXNpY01hcCwKQEAgLTUwNSw3ICs1MDcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFZOVFdJRkliTWVhc3VyZVJlcG9ydCggIHBEZXZpY2UtPnBNZ210LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPnBDdXJyTWVhc3VyZUVJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnlSZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QmFzaWNNYXAsCkBAIC01MjUsMTIgKzUyNywxMiBAQAogCiBzdGF0aWMgdm9pZCBkZXZpY2VfaW5pdF9yZWdpc3RlcnMoUFNEZXZpY2UgcERldmljZSwgREVWSUNFX0lOSVRfVFlQRSBJbml0VHlwZSkKIHsKLSAgICBVSU5UICAgIGlpOwotICAgIEJZVEUgICAgYnlWYWx1ZTsKLQlCWVRFICAgIGJ5VmFsdWUxOwotICAgIEJZVEUgICAgYnlDQ0tQd3JkQm0gPSAwOwotICAgIEJZVEUgICAgYnlPRkRNUHdyZEJtID0gMDsKLSAgICBJTlQgem9uZXR5cGU9MDsKKyAgICB1bnNpZ25lZCBpbnQgaWk7CisgICAgdW5zaWduZWQgY2hhciBieVZhbHVlOworICAgIHVuc2lnbmVkIGNoYXIgYnlWYWx1ZTE7CisgICAgdW5zaWduZWQgY2hhciBieUNDS1B3cmRCbSA9IDA7CisgICAgdW5zaWduZWQgY2hhciBieU9GRE1Qd3JkQm0gPSAwOworICAgIGludCB6b25ldHlwZT0wOwogICAgICBQU01nbXRPYmplY3QgICAgcE1nbXQgPSAmKHBEZXZpY2UtPnNNZ210T2JqKTsKICAgICBNQUNiU2h1dGRvd24ocERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgQkJ2U29mdHdhcmVSZXNldChwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKQEAgLTU0MCwxMSArNTQyLDExIEBACiAgICAgICAgIC8vIERvIE1BQ2JTb2Z0d2FyZVJlc2V0IGluIE1BQ3ZJbml0aWFsaXplCiAgICAgICAgIE1BQ2JTb2Z0d2FyZVJlc2V0KHBEZXZpY2UtPlBvcnRPZmZzZXQpOwogICAgICAgICAvLyBmb3JjZSBDQ0sKLSAgICAgICAgcERldmljZS0+YkNDSyA9IFRSVUU7Ci0gICAgICAgIHBEZXZpY2UtPmJBRVMgPSBGQUxTRTsKLSAgICAgICAgcERldmljZS0+YlByb3RlY3RNb2RlID0gRkFMU0U7ICAgICAgLy9Pbmx5IHVzZWQgaW4gMTFnIHR5cGUsIHN5bmMgd2l0aCBFUlAgSUUKLSAgICAgICAgcERldmljZS0+Yk5vbkVSUFByZXNlbnQgPSBGQUxTRTsKLSAgICAgICAgcERldmljZS0+YkJhcmtlclByZWFtYmxlTWQgPSBGQUxTRTsKKyAgICAgICAgcERldmljZS0+YkNDSyA9IHRydWU7CisgICAgICAgIHBEZXZpY2UtPmJBRVMgPSBmYWxzZTsKKyAgICAgICAgcERldmljZS0+YlByb3RlY3RNb2RlID0gZmFsc2U7ICAgICAgLy9Pbmx5IHVzZWQgaW4gMTFnIHR5cGUsIHN5bmMgd2l0aCBFUlAgSUUKKyAgICAgICAgcERldmljZS0+Yk5vbkVSUFByZXNlbnQgPSBmYWxzZTsKKyAgICAgICAgcERldmljZS0+YkJhcmtlclByZWFtYmxlTWQgPSBmYWxzZTsKICAgICAgICAgcERldmljZS0+d0N1cnJlbnRSYXRlID0gUkFURV8xTTsKICAgICAgICAgcERldmljZS0+YnlUb3BPRkRNQmFzaWNSYXRlID0gUkFURV8yNE07CiAgICAgICAgIHBEZXZpY2UtPmJ5VG9wQ0NLQmFzaWNSYXRlID0gUkFURV8xTTsKQEAgLTU3MCw5ICs1NzIsOSBAQAogICAgICAgICAvLyBHZXQgQW50ZW5hCiAgICAgICAgIGJ5VmFsdWUgPSBTUk9NYnlSZWFkRW1iZWRkZWQocERldmljZS0+UG9ydE9mZnNldCwgRUVQX09GU19BTlRFTk5BKTsKICAgICAgICAgaWYgKGJ5VmFsdWUgJiBFRVBfQU5USU5WKQotICAgICAgICAgICAgcERldmljZS0+YlR4UnhBbnRJbnYgPSBUUlVFOworICAgICAgICAgICAgcERldmljZS0+YlR4UnhBbnRJbnYgPSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBwRGV2aWNlLT5iVHhSeEFudEludiA9IEZBTFNFOworICAgICAgICAgICAgcERldmljZS0+YlR4UnhBbnRJbnYgPSBmYWxzZTsKICNpZmRlZglQTElDRV9ERUJVRwogCS8vcHJpbnRrKCJpbml0X3JlZ2lzdGVyOlR4UnhBbnRJbnYgaXMgJWQsYnlWYWx1ZSBpcyAlZFxuIixwRGV2aWNlLT5iVHhSeEFudEludixieVZhbHVlKTsKICNlbmRpZgpAQCAtNTg3LDcgKzU4OSw3IEBACiAgICAgICAgIHBEZXZpY2UtPnVsRGl2ZXJzaXR5TVZhbHVlID0gMTAwKjE2Oy8vU1JPTWJ5UmVhZEVtYmVkZGVkKHBEZXZpY2UtPlBvcnRPZmZzZXQsIDB4NTIpOwogICAgICAgICBwRGV2aWNlLT5ieVRNYXggPSAxOy8vU1JPTWJ5UmVhZEVtYmVkZGVkKHBEZXZpY2UtPlBvcnRPZmZzZXQsIDB4NTMpOwogICAgICAgICBwRGV2aWNlLT5ieVRNYXgyID0gNDsvL1NST01ieVJlYWRFbWJlZGRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCAweDU0KTsKLSAgICAgICAgcERldmljZS0+dWxTUTNUSCA9IDA7Ly8oVUxPTkcpIFNST01ieVJlYWRFbWJlZGRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCAweDU1KTsKKyAgICAgICAgcERldmljZS0+dWxTUTNUSCA9IDA7Ly8odW5zaWduZWQgbG9uZykgU1JPTWJ5UmVhZEVtYmVkZGVkKHBEZXZpY2UtPlBvcnRPZmZzZXQsIDB4NTUpOwogICAgICAgICBwRGV2aWNlLT5ieVRNYXgzID0gNjQ7Ly9TUk9NYnlSZWFkRW1iZWRkZWQocERldmljZS0+UG9ydE9mZnNldCwgMHg1Nik7CiAKICAgICAgICAgaWYgKGJ5VmFsdWUgPT0gKEVFUF9BTlRFTk5BX0FVWCB8IEVFUF9BTlRFTk5BX01BSU4pKSB7CkBAIC01OTUsNyArNTk3LDcgQEAKICAgICAgICAgICAgIHBEZXZpY2UtPmJ5VHhBbnRlbm5hTW9kZSA9IEFOVF9COwogICAgICAgICAgICAgcERldmljZS0+ZHdUeEFudGVubmFTZWwgPSAxOwogICAgICAgICAgICAgcERldmljZS0+ZHdSeEFudGVubmFTZWwgPSAxOwotICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJUeFJ4QW50SW52ID09IFRSVUUpCisgICAgICAgICAgICBpZiAocERldmljZS0+YlR4UnhBbnRJbnYgPT0gdHJ1ZSkKICAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieVJ4QW50ZW5uYU1vZGUgPSBBTlRfQTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieVJ4QW50ZW5uYU1vZGUgPSBBTlRfQjsKQEAgLTYwMywyNiArNjA1LDI2IEBACiBieVZhbHVlMSA9IFNST01ieVJlYWRFbWJlZGRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBFRVBfT0ZTX0FOVEVOTkEpOwogICAgICAgICAgIC8vICBpZiAocERldmljZS0+YkRpdmVyc2l0eVJlZ0N0bE9OKQogICAgICAgICAgIGlmKChieVZhbHVlMSYweDA4KT09MCkKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5iRGl2ZXJzaXR5RW5hYmxlID0gRkFMU0U7Ly9TUk9NYnlSZWFkRW1iZWRkZWQocERldmljZS0+UG9ydE9mZnNldCwgMHg1MCk7CisgICAgICAgICAgICAgICAgcERldmljZS0+YkRpdmVyc2l0eUVuYWJsZSA9IGZhbHNlOy8vU1JPTWJ5UmVhZEVtYmVkZGVkKHBEZXZpY2UtPlBvcnRPZmZzZXQsIDB4NTApOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJEaXZlcnNpdHlFbmFibGUgPSBUUlVFOworICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJEaXZlcnNpdHlFbmFibGUgPSB0cnVlOwogI2lmZGVmCVBMSUNFX0RFQlVHCiAJCS8vcHJpbnRrKCJhdXggfG1haW4gYW50ZW5uYTogUnhBbnRlbm5hTW9kZSBpcyAlZFxuIixwRGV2aWNlLT5ieVJ4QW50ZW5uYU1vZGUpOwogI2VuZGlmCiAJfSBlbHNlICB7Ci0gICAgICAgICAgICBwRGV2aWNlLT5iRGl2ZXJzaXR5RW5hYmxlID0gRkFMU0U7CisgICAgICAgICAgICBwRGV2aWNlLT5iRGl2ZXJzaXR5RW5hYmxlID0gZmFsc2U7CiAgICAgICAgICAgICBwRGV2aWNlLT5ieUFudGVubmFDb3VudCA9IDE7CiAgICAgICAgICAgICBwRGV2aWNlLT5kd1R4QW50ZW5uYVNlbCA9IDA7CiAgICAgICAgICAgICBwRGV2aWNlLT5kd1J4QW50ZW5uYVNlbCA9IDA7CiAgICAgICAgICAgICBpZiAoYnlWYWx1ZSAmIEVFUF9BTlRFTk5BX0FVWCkgewogICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5VHhBbnRlbm5hTW9kZSA9IEFOVF9BOwotICAgICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iVHhSeEFudEludiA9PSBUUlVFKQorICAgICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iVHhSeEFudEludiA9PSB0cnVlKQogICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieVJ4QW50ZW5uYU1vZGUgPSBBTlRfQjsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5UnhBbnRlbm5hTW9kZSA9IEFOVF9BOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieVR4QW50ZW5uYU1vZGUgPSBBTlRfQjsKLSAgICAgICAgICAgICAgICBpZiAocERldmljZS0+YlR4UnhBbnRJbnYgPT0gVFJVRSkKKyAgICAgICAgICAgICAgICBpZiAocERldmljZS0+YlR4UnhBbnRJbnYgPT0gdHJ1ZSkKICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YnlSeEFudGVubmFNb2RlID0gQU5UX0E7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieVJ4QW50ZW5uYU1vZGUgPSBBTlRfQjsKQEAgLTYzOCw3ICs2NDAsNyBAQAogLy8yMDA4LTgtNCA8YWRkPiBieSBjaGVzdGVyCiAvL3pvbmV0eXBlIGluaXRpYWwKICBwRGV2aWNlLT5ieU9yaWdpbmFsWm9uZXR5cGUgPSBwRGV2aWNlLT5hYnlFRVBST01bRUVQX09GU19aT05FVFlQRV07Ci0gem9uZXR5cGUgPSBDb25maWdfRmlsZU9wZXJhdGlvbihwRGV2aWNlLEZBTFNFLE5VTEwpOworIHpvbmV0eXBlID0gQ29uZmlnX0ZpbGVPcGVyYXRpb24ocERldmljZSxmYWxzZSxOVUxMKTsKICBpZiAoem9uZXR5cGUgPj0gMCkgeyAgICAgICAgIC8vcmVhZCB6b25ldHlwZSBmaWxlIG9rIQogICBpZiAoKHpvbmV0eXBlID09IDApJiYKICAgICAgICAgKHBEZXZpY2UtPmFieUVFUFJPTVtFRVBfT0ZTX1pPTkVUWVBFXSAhPTB4MDApKXsgICAgICAgICAgLy9mb3IgVVNBCkBAIC02ODAsNyArNjgyLDcgQEAKICAgICAgICAgcERldmljZS0+YnlSRlR5cGUgJj0gUkZfTUFTSzsKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAicERldmljZS0+YnlSRlR5cGUgPSAleFxuIiwgcERldmljZS0+YnlSRlR5cGUpOwogCi0gICAgICAgIGlmIChwRGV2aWNlLT5iWm9uZVJlZ0V4aXN0ID09IEZBTFNFKSB7CisgICAgICAgIGlmIChwRGV2aWNlLT5iWm9uZVJlZ0V4aXN0ID09IGZhbHNlKSB7CiAgICAgICAgICAgICBwRGV2aWNlLT5ieVpvbmVUeXBlID0gcERldmljZS0+YWJ5RUVQUk9NW0VFUF9PRlNfWk9ORVRZUEVdOwogICAgICAgICB9CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInBEZXZpY2UtPmJ5Wm9uZVR5cGUgPSAleFxuIiwgcERldmljZS0+Ynlab25lVHlwZSk7CkBAIC03MDAsMTEgKzcwMiwxMSBAQAogCiAKICAgICAgICAgZm9yIChpaT0wO2lpPENCX01BWF9DSEFOTkVMXzI0RztpaSsrKSB7Ci0gICAgICAgICAgICBwRGV2aWNlLT5hYnlDQ0tQd3JUYmxbaWkrMV0gPSBTUk9NYnlSZWFkRW1iZWRkZWQocERldmljZS0+UG9ydE9mZnNldCwgKEJZVEUpKGlpICsgRUVQX09GU19DQ0tfUFdSX1RCTCkpOworICAgICAgICAgICAgcERldmljZS0+YWJ5Q0NLUHdyVGJsW2lpKzFdID0gU1JPTWJ5UmVhZEVtYmVkZGVkKHBEZXZpY2UtPlBvcnRPZmZzZXQsICh1bnNpZ25lZCBjaGFyKShpaSArIEVFUF9PRlNfQ0NLX1BXUl9UQkwpKTsKICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5hYnlDQ0tQd3JUYmxbaWkrMV0gPT0gMCkgewogICAgICAgICAgICAgICAgIHBEZXZpY2UtPmFieUNDS1B3clRibFtpaSsxXSA9IHBEZXZpY2UtPmJ5Q0NLUHdyOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcERldmljZS0+YWJ5T0ZETVB3clRibFtpaSsxXSA9IFNST01ieVJlYWRFbWJlZGRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCAoQllURSkoaWkgKyBFRVBfT0ZTX09GRE1fUFdSX1RCTCkpOworICAgICAgICAgICAgcERldmljZS0+YWJ5T0ZETVB3clRibFtpaSsxXSA9IFNST01ieVJlYWRFbWJlZGRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCAodW5zaWduZWQgY2hhcikoaWkgKyBFRVBfT0ZTX09GRE1fUFdSX1RCTCkpOwogICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmFieU9GRE1Qd3JUYmxbaWkrMV0gPT0gMCkgewogICAgICAgICAgICAgICAgIHBEZXZpY2UtPmFieU9GRE1Qd3JUYmxbaWkrMV0gPSBwRGV2aWNlLT5ieU9GRE1Qd3JHOwogICAgICAgICAgICAgfQpAQCAtNzI2LDEwICs3MjgsMTAgQEAKIAogICAgICAgICAvLyBMb2FkIE9GRE0gQSBQb3dlciBUYWJsZQogICAgICAgICBmb3IgKGlpPTA7aWk8Q0JfTUFYX0NIQU5ORUxfNUc7aWkrKykgeyAvL1JvYmVydFl1OjIwMDQxMjI0LCBidWcgdXNpbmcgQ0JfTUFYX0NIQU5ORUwKLSAgICAgICAgICAgIHBEZXZpY2UtPmFieU9GRE1Qd3JUYmxbaWkrQ0JfTUFYX0NIQU5ORUxfMjRHKzFdID0gU1JPTWJ5UmVhZEVtYmVkZGVkKHBEZXZpY2UtPlBvcnRPZmZzZXQsIChCWVRFKShpaSArIEVFUF9PRlNfT0ZETUFfUFdSX1RCTCkpOwotICAgICAgICAgICAgcERldmljZS0+YWJ5T0ZETURlZmF1bHRQd3JbaWkrQ0JfTUFYX0NIQU5ORUxfMjRHKzFdID0gU1JPTWJ5UmVhZEVtYmVkZGVkKHBEZXZpY2UtPlBvcnRPZmZzZXQsIChCWVRFKShpaSArIEVFUF9PRlNfT0ZETUFfUFdSX2RCbSkpOworICAgICAgICAgICAgcERldmljZS0+YWJ5T0ZETVB3clRibFtpaStDQl9NQVhfQ0hBTk5FTF8yNEcrMV0gPSBTUk9NYnlSZWFkRW1iZWRkZWQocERldmljZS0+UG9ydE9mZnNldCwgKHVuc2lnbmVkIGNoYXIpKGlpICsgRUVQX09GU19PRkRNQV9QV1JfVEJMKSk7CisgICAgICAgICAgICBwRGV2aWNlLT5hYnlPRkRNRGVmYXVsdFB3cltpaStDQl9NQVhfQ0hBTk5FTF8yNEcrMV0gPSBTUk9NYnlSZWFkRW1iZWRkZWQocERldmljZS0+UG9ydE9mZnNldCwgKHVuc2lnbmVkIGNoYXIpKGlpICsgRUVQX09GU19PRkRNQV9QV1JfZEJtKSk7CiAgICAgICAgIH0KLSAgICAgICAgQ0FSRHZJbml0Q2hhbm5lbFRhYmxlKCh2b2lkICopcERldmljZSk7CisgICAgICAgIGluaXRfY2hhbm5lbF90YWJsZSgodm9pZCAqKXBEZXZpY2UpOwogCiAKICAgICAgICAgaWYgKHBEZXZpY2UtPmJ5TG9jYWxJRCA+IFJFVl9JRF9WVDMyNTNfQjEpIHsKQEAgLTc3MywzOCArNzc1LDM4IEBACiAgICAgICAgIGlmIChwRGV2aWNlLT51Q29ubmVjdGlvblJhdGUgPT0gUkFURV9BVVRPKSB7CiAgICAgICAgICAgICBwRGV2aWNlLT53Q3VycmVudFJhdGUgPSBSQVRFXzU0TTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBEZXZpY2UtPndDdXJyZW50UmF0ZSA9IChXT1JEKXBEZXZpY2UtPnVDb25uZWN0aW9uUmF0ZTsKKyAgICAgICAgICAgIHBEZXZpY2UtPndDdXJyZW50UmF0ZSA9ICh1bnNpZ25lZCBzaG9ydClwRGV2aWNlLT51Q29ubmVjdGlvblJhdGU7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBkZWZhdWx0IEcgTW9kZQogICAgICAgICBWTlRXSUZJYkNvbmZpZ1BoeU1vZGUocERldmljZS0+cE1nbXQsIFBIWV9UWVBFXzExRyk7CiAgICAgICAgIFZOVFdJRkliQ29uZmlnUGh5TW9kZShwRGV2aWNlLT5wTWdtdCwgUEhZX1RZUEVfQVVUTyk7CiAKLSAgICAgICAgcERldmljZS0+YlJhZGlvT2ZmID0gRkFMU0U7CisgICAgICAgIHBEZXZpY2UtPmJSYWRpb09mZiA9IGZhbHNlOwogCiAgICAgICAgIHBEZXZpY2UtPmJ5UmFkaW9DdGwgPSBTUk9NYnlSZWFkRW1iZWRkZWQocERldmljZS0+UG9ydE9mZnNldCwgRUVQX09GU19SQURJT0NUTCk7Ci0gICAgICAgIHBEZXZpY2UtPmJIV1JhZGlvT2ZmID0gRkFMU0U7CisgICAgICAgIHBEZXZpY2UtPmJIV1JhZGlvT2ZmID0gZmFsc2U7CiAKICAgICAgICAgaWYgKHBEZXZpY2UtPmJ5UmFkaW9DdGwgJiBFRVBfUkFESU9DVExfRU5BQkxFKSB7CiAgICAgICAgICAgICAvLyBHZXQgR1BJTwogICAgICAgICAgICAgTUFDdkdQSU9JbihwRGV2aWNlLT5Qb3J0T2Zmc2V0LCAmcERldmljZS0+YnlHUElPKTsKIC8vMjAwOC00LTE0IDxhZGQ+IGJ5IGNoZXN0ZXIgZm9yIGxlZCBpc3N1ZQogICNpZmRlZiBGT1JfTEVEX09OX05PVEVCT09LCi1pZiAocERldmljZS0+YnlHUElPICYgR1BJTzBfREFUQSl7cERldmljZS0+YkhXUmFkaW9PZmYgPSBUUlVFO30KLWlmICggIShwRGV2aWNlLT5ieUdQSU8gJiBHUElPMF9EQVRBKSl7cERldmljZS0+YkhXUmFkaW9PZmYgPSBGQUxTRTt9CitpZiAocERldmljZS0+YnlHUElPICYgR1BJTzBfREFUQSl7cERldmljZS0+YkhXUmFkaW9PZmYgPSB0cnVlO30KK2lmICggIShwRGV2aWNlLT5ieUdQSU8gJiBHUElPMF9EQVRBKSl7cERldmljZS0+YkhXUmFkaW9PZmYgPSBmYWxzZTt9CiAKICAgICAgICAgICAgIH0KLSAgICAgICAgaWYgKCAocERldmljZS0+YlJhZGlvQ29udHJvbE9mZiA9PSBUUlVFKSkgeworICAgICAgICBpZiAoIChwRGV2aWNlLT5iUmFkaW9Db250cm9sT2ZmID09IHRydWUpKSB7CiAgICAgICAgICAgICBDQVJEYlJhZGlvUG93ZXJPZmYocERldmljZSk7CiAgICAgICAgIH0KIGVsc2UgIENBUkRiUmFkaW9Qb3dlck9uKHBEZXZpY2UpOwogI2Vsc2UKICAgICAgICAgICAgIGlmICgoKHBEZXZpY2UtPmJ5R1BJTyAmIEdQSU8wX0RBVEEpICYmICEocERldmljZS0+YnlSYWRpb0N0bCAmIEVFUF9SQURJT0NUTF9JTlYpKSB8fAogICAgICAgICAgICAgICAgICggIShwRGV2aWNlLT5ieUdQSU8gJiBHUElPMF9EQVRBKSAmJiAocERldmljZS0+YnlSYWRpb0N0bCAmIEVFUF9SQURJT0NUTF9JTlYpKSkgewotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJIV1JhZGlvT2ZmID0gVFJVRTsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5iSFdSYWRpb09mZiA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKChwRGV2aWNlLT5iSFdSYWRpb09mZiA9PSBUUlVFKSB8fCAocERldmljZS0+YlJhZGlvQ29udHJvbE9mZiA9PSBUUlVFKSkgeworICAgICAgICBpZiAoKHBEZXZpY2UtPmJIV1JhZGlvT2ZmID09IHRydWUpIHx8IChwRGV2aWNlLT5iUmFkaW9Db250cm9sT2ZmID09IHRydWUpKSB7CiAgICAgICAgICAgICBDQVJEYlJhZGlvUG93ZXJPZmYocERldmljZSk7CiAgICAgICAgIH0KIApAQCAtODUwLDE3ICs4NTIsMTcgQEAKIHN0YXRpYyB2b2lkIGRldmljZV9pbml0X2RpdmVyc2l0eV90aW1lcihQU0RldmljZSBwRGV2aWNlKSB7CiAKICAgICBpbml0X3RpbWVyKCZwRGV2aWNlLT5UaW1lclNRM1RtYXgxKTsKLSAgICBwRGV2aWNlLT5UaW1lclNRM1RtYXgxLmRhdGEgPSAoVUxPTkcpcERldmljZTsKKyAgICBwRGV2aWNlLT5UaW1lclNRM1RtYXgxLmRhdGEgPSAodW5zaWduZWQgbG9uZykgcERldmljZTsKICAgICBwRGV2aWNlLT5UaW1lclNRM1RtYXgxLmZ1bmN0aW9uID0gKFRpbWVyRnVuY3Rpb24pVGltZXJTUTNDYWxsQmFjazsKICAgICBwRGV2aWNlLT5UaW1lclNRM1RtYXgxLmV4cGlyZXMgPSBSVU5fQVQoSFopOwogCiAgICAgaW5pdF90aW1lcigmcERldmljZS0+VGltZXJTUTNUbWF4Mik7Ci0gICAgcERldmljZS0+VGltZXJTUTNUbWF4Mi5kYXRhID0gKFVMT05HKXBEZXZpY2U7CisgICAgcERldmljZS0+VGltZXJTUTNUbWF4Mi5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHBEZXZpY2U7CiAgICAgcERldmljZS0+VGltZXJTUTNUbWF4Mi5mdW5jdGlvbiA9IChUaW1lckZ1bmN0aW9uKVRpbWVyU1EzQ2FsbEJhY2s7CiAgICAgcERldmljZS0+VGltZXJTUTNUbWF4Mi5leHBpcmVzID0gUlVOX0FUKEhaKTsKIAogICAgIGluaXRfdGltZXIoJnBEZXZpY2UtPlRpbWVyU1EzVG1heDMpOwotICAgIHBEZXZpY2UtPlRpbWVyU1EzVG1heDMuZGF0YSA9IChVTE9ORylwRGV2aWNlOworICAgIHBEZXZpY2UtPlRpbWVyU1EzVG1heDMuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBwRGV2aWNlOwogICAgIHBEZXZpY2UtPlRpbWVyU1EzVG1heDMuZnVuY3Rpb24gPSAoVGltZXJGdW5jdGlvbilUaW1lclN0YXRlMUNhbGxCYWNrOwogICAgIHBEZXZpY2UtPlRpbWVyU1EzVG1heDMuZXhwaXJlcyA9IFJVTl9BVChIWik7CiAKQEAgLTg2OCwxMyArODcwLDEzIEBACiB9CiAKIAotc3RhdGljIEJPT0wgZGV2aWNlX3JlbGVhc2VfV1BBREVWKFBTRGV2aWNlIHBEZXZpY2UpCitzdGF0aWMgYm9vbCBkZXZpY2VfcmVsZWFzZV9XUEFERVYoUFNEZXZpY2UgcERldmljZSkKIHsKICAgdmlhd2dldF93cGFfaGVhZGVyICp3cGFoZHI7CiAgIGludCBpaT0wOwogIC8vIHdhaXRfcXVldWVfaGVhZF90CVNldF93YWl0OwogICAvL3NlbmQgZGV2aWNlIGNsb3NlIHRvIHdwYV9zdXBwbGljbmF0IGxheWVyCi0gICAgaWYgKHBEZXZpY2UtPmJXUEFERVZVcD09VFJVRSkgeworICAgIGlmIChwRGV2aWNlLT5iV1BBREVWVXA9PXRydWUpIHsKICAgICAgICAgICAgICAgICAgd3BhaGRyID0gKHZpYXdnZXRfd3BhX2hlYWRlciAqKXBEZXZpY2UtPnNrYi0+ZGF0YTsKICAgICAgICAgICAgICAgICAgd3BhaGRyLT50eXBlID0gVklBV0dFVF9ERVZJQ0VDTE9TRV9NU0c7CiAgICAgICAgICAgICAgICAgIHdwYWhkci0+cmVzcF9pZV9sZW4gPSAwOwpAQCAtODkxLDcgKzg5Myw3IEBACiAgLy93YWl0IHJlbGVhc2UgV1BBREVWCiAgICAgICAgICAgICAgIC8vICAgIGluaXRfd2FpdHF1ZXVlX2hlYWQoJlNldF93YWl0KTsKICAgICAgICAgICAgICAgLy8gICAgd2FpdF9ldmVudF90aW1lb3V0KFNldF93YWl0LCAoKHBEZXZpY2UtPndwYWRldj09TlVMTCkmJihwRGV2aWNlLT5za2IgPT0gTlVMTCkpLDUqSFopOyAgICAvLzFzIHdhaXQKLSAgICAgICAgICAgICAgd2hpbGUoKHBEZXZpY2UtPmJXUEFERVZVcD09VFJVRSkpIHsKKyAgICAgICAgICAgICAgd2hpbGUoKHBEZXZpY2UtPmJXUEFERVZVcD09dHJ1ZSkpIHsKIAkgICAgICAgIHNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKICAgICAgICAgICAgICAgICAgc2NoZWR1bGVfdGltZW91dCAoSFovMjApOyAgICAgICAgICAvL3dhaXQgNTBtcwogICAgICAgICAgICAgICAgICBpaSsrOwpAQCAtODk5LDcgKzkwMSw3IEBACiAJCSAgYnJlYWs7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCkBAIC05MTQsMTAgKzkxNiwxMCBAQAogCiAKIAotc3RhdGljIGludAotZGV2aWNlX2ZvdW5kMShzdHJ1Y3QgcGNpX2RldiAqcGNpZCwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3N0YXRpYyBpbnQgX19kZXZpbml0Cit2dDY2NTVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaWQsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7Ci0gICAgc3RhdGljIEJPT0wgYkZpcnN0ID0gVFJVRTsKKyAgICBzdGF0aWMgYm9vbCBiRmlyc3QgPSB0cnVlOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlKiAgZGV2ID0gTlVMTDsKICAgICBQQ0hJUF9JTkZPICBwQ2hpcF9pbmZvID0gKFBDSElQX0lORk8pZW50LT5kcml2ZXJfZGF0YTsKICAgICBQU0RldmljZSAgICBwRGV2aWNlOwpAQCAtOTQ0LDEwICs5NDYsMTAgQEAKICAgICBpZiAoYkZpcnN0KSB7CiAgICAgICAgIHByaW50ayhLRVJOX05PVElDRSAiJXMgVmVyLiAlc1xuIixERVZJQ0VfRlVMTF9EUlZfTkFNLCBERVZJQ0VfVkVSU0lPTik7CiAgICAgICAgIHByaW50ayhLRVJOX05PVElDRSAiQ29weXJpZ2h0IChjKSAyMDAzIFZJQSBOZXR3b3JraW5nIFRlY2hub2xvZ2llcywgSW5jLlxuIik7Ci0gICAgICAgIGJGaXJzdD1GQUxTRTsKKyAgICAgICAgYkZpcnN0PWZhbHNlOwogICAgIH0KIAotICAgIGlmICghZGV2aWNlX2luaXRfaW5mbyhwY2lkLCAmcERldmljZSwgcENoaXBfaW5mbykpIHsKKyAgICBpZiAoIXZ0NjY1NV9pbml0X2luZm8ocGNpZCwgJnBEZXZpY2UsIHBDaGlwX2luZm8pKSB7CiAgICAgICAgIHJldHVybiAtRU5PTUVNOwogICAgIH0KICAgICBwRGV2aWNlLT5kZXYgPSBkZXY7CkBAIC05NjIsNyArOTY0LDcgQEAKICNpZmRlZglERUJVRwogCXByaW50aygiQmVmb3JlIGdldCBwY2lfaW5mbyBtZW1hZGRyIGlzICV4XG4iLHBEZXZpY2UtPm1lbWFkZHIpOwogI2VuZGlmCi0gICAgaWYgKGRldmljZV9nZXRfcGNpX2luZm8ocERldmljZSxwY2lkKSA9PSBGQUxTRSkgeworICAgIGlmIChkZXZpY2VfZ2V0X3BjaV9pbmZvKHBEZXZpY2UscGNpZCkgPT0gZmFsc2UpIHsKICAgICAgICAgcHJpbnRrKEtFUk5fRVJSIERFVklDRV9OQU1FICI6IEZhaWxlZCB0byBmaW5kIFBDSSBkZXZpY2UuXG4iKTsKICAgICAgICAgZGV2aWNlX2ZyZWVfaW5mbyhwRGV2aWNlKTsKICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CkBAIC05NzYsNyArOTc4LDcgQEAKIAlwcmludGsoImFmdGVyIGdldCBwY2lfaW5mbyBtZW1hZGRyIGlzICV4LCBpbyBhZGRyIGlzICV4LGlvX3NpemUgaXMgJWRcbiIscERldmljZS0+bWVtYWRkcixwRGV2aWNlLT5pb2FkZHIscERldmljZS0+aW9fc2l6ZSk7CiAJewogCQlpbnQgaTsKLQkJVTMyCQkJYmFyLGxlbjsKKwkJdTMyCQkJYmFyLGxlbjsKIAkJdTMyIGFkZHJlc3NbXSA9IHsKIAkJUENJX0JBU0VfQUREUkVTU18wLAogCQlQQ0lfQkFTRV9BRERSRVNTXzEsCkBAIC0xMDIwLDggKzEwMjIsOCBAQAogI2lmZGVmCURFQlVHCiAJLy9yZXR1cm4gIDAgIDsKICNlbmRpZgotICAgIHBEZXZpY2UtPlBvcnRPZmZzZXQgPSAoRFdPUkQpaW9yZW1hcChwRGV2aWNlLT5tZW1hZGRyICYgUENJX0JBU0VfQUREUkVTU19NRU1fTUFTSywgcERldmljZS0+aW9fc2l6ZSk7Ci0JLy9wRGV2aWNlLT5Qb3J0T2Zmc2V0ID0gKERXT1JEKWlvcmVtYXAocERldmljZS0+aW9hZGRyICYgUENJX0JBU0VfQUREUkVTU19JT19NQVNLLCBwRGV2aWNlLT5pb19zaXplKTsKKyAgICBwRGV2aWNlLT5Qb3J0T2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpaW9yZW1hcChwRGV2aWNlLT5tZW1hZGRyICYgUENJX0JBU0VfQUREUkVTU19NRU1fTUFTSywgcERldmljZS0+aW9fc2l6ZSk7CisJLy9wRGV2aWNlLT5Qb3J0T2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpaW9yZW1hcChwRGV2aWNlLT5pb2FkZHIgJiBQQ0lfQkFTRV9BRERSRVNTX0lPX01BU0ssIHBEZXZpY2UtPmlvX3NpemUpOwogCiAJaWYocERldmljZS0+UG9ydE9mZnNldCA9PSAwKSB7CiAgICAgICAgcHJpbnRrKEtFUk5fRVJSIERFVklDRV9OQU1FICI6IEZhaWxlZCB0byBJTyByZW1hcHBpbmcgLi5cbiIpOwpAQCAtMTA0MSw3ICsxMDQzLDcgQEAKIAogICAgIGRldi0+YmFzZV9hZGRyID0gcERldmljZS0+aW9hZGRyOwogI2lmZGVmCVBMSUNFX0RFQlVHCi0JQllURQl2YWx1ZTsKKwl1bnNpZ25lZCBjaGFyIAl2YWx1ZTsKIAogCVZOU3ZJblBvcnRCKHBEZXZpY2UtPlBvcnRPZmZzZXQrMHg0RiwgJnZhbHVlKTsKIAlwcmludGsoIkJlZm9yZSB3cml0ZTogdmFsdWUgaXMgJXhcbiIsdmFsdWUpOwpAQCAtMTExMSwxNiArMTExMywxNyBAQAogICAgIERCR19QUlQoTVNHX0xFVkVMX0lORk8sIEtFUk5fSU5GTyAiJXM6ICVzXG4iLGRldi0+bmFtZSwgZ2V0X2NoaXBfbmFtZShwRGV2aWNlLT5jaGlwX2lkKSk7CiAgICAgREJHX1BSVChNU0dfTEVWRUxfSU5GTywgS0VSTl9JTkZPICIlczogTUFDPSVwTSIsIGRldi0+bmFtZSwgZGV2LT5kZXZfYWRkcik7CiAjaWZkZWYgSU9fTUFQCi0gICAgREJHX1BSVChNU0dfTEVWRUxfSU5GTywgS0VSTl9JTkZPIiBJTz0weCVseCAgIiwoVUxPTkcpIHBEZXZpY2UtPmlvYWRkcik7CisgICAgREJHX1BSVChNU0dfTEVWRUxfSU5GTywgS0VSTl9JTkZPIiBJTz0weCVseCAgIiwodW5zaWduZWQgbG9uZykgcERldmljZS0+aW9hZGRyKTsKICAgICBEQkdfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX0lORk8iIElSUT0lZCBcbiIsIHBEZXZpY2UtPmRldi0+aXJxKTsKICNlbHNlCi0gICAgREJHX1BSVChNU0dfTEVWRUxfSU5GTywgS0VSTl9JTkZPIiBJTz0weCVseCBNZW09MHglbHggIiwoVUxPTkcpIHBEZXZpY2UtPmlvYWRkciwoVUxPTkcpIHBEZXZpY2UtPlBvcnRPZmZzZXQpOworICAgIERCR19QUlQoTVNHX0xFVkVMX0lORk8sIEtFUk5fSU5GTyIgSU89MHglbHggTWVtPTB4JWx4ICIsCisJCSAgICAodW5zaWduZWQgbG9uZykgcERldmljZS0+aW9hZGRyLCh1bnNpZ25lZCBsb25nKSBwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKICAgICBEQkdfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX0lORk8iIElSUT0lZCBcbiIsIHBEZXZpY2UtPmRldi0+aXJxKTsKICNlbmRpZgogCiB9CiAKLXN0YXRpYyBCT09MIGRldmljZV9pbml0X2luZm8oc3RydWN0IHBjaV9kZXYqIHBjaWQsIFBTRGV2aWNlKiBwcERldmljZSwKK3N0YXRpYyBib29sIF9fZGV2aW5pdCB2dDY2NTVfaW5pdF9pbmZvKHN0cnVjdCBwY2lfZGV2KiBwY2lkLCBQU0RldmljZSogcHBEZXZpY2UsCiAgICAgUENISVBfSU5GTyBwQ2hpcF9pbmZvKSB7CiAKICAgICBQU0RldmljZSBwOwpAQCAtMTE0NSwxOSArMTE0OCwxOSBAQAogCiAgICAgc3Bpbl9sb2NrX2luaXQoJigoKnBwRGV2aWNlKS0+bG9jaykpOwogCi0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBCT09MIGRldmljZV9nZXRfcGNpX2luZm8oUFNEZXZpY2UgcERldmljZSwgc3RydWN0IHBjaV9kZXYqIHBjaWQpIHsKK3N0YXRpYyBib29sIGRldmljZV9nZXRfcGNpX2luZm8oUFNEZXZpY2UgcERldmljZSwgc3RydWN0IHBjaV9kZXYqIHBjaWQpIHsKIAotICAgIFUxNiBwY2lfY21kOwotICAgIFU4ICBiOwotICAgIFVJTlQgY2lzX2FkZHI7CisgICAgdTE2IHBjaV9jbWQ7CisgICAgdTggIGI7CisgICAgdW5zaWduZWQgaW50IGNpc19hZGRyOwogI2lmZGVmCVBMSUNFX0RFQlVHCi0JQllURSAgICAgICBwY2lfY29uZmlnWzI1Nl07Ci0JQllURQl2YWx1ZSA9MHgwMDsKKwl1bnNpZ25lZCBjaGFyIHBjaV9jb25maWdbMjU2XTsKKwl1bnNpZ25lZCBjaGFyIAl2YWx1ZSA9MHgwMDsKIAlpbnQJCWlpLGo7Ci0JVTE2CW1heF9sYXQ9MHgwMDAwOworCXUxNgltYXhfbGF0PTB4MDAwMDsKIAltZW1zZXQocGNpX2NvbmZpZywweDAwLDI1Nik7CiAjZW5kaWYKIApAQCAtMTIxMSw3ICsxMjE0LDcgQEAKIAkJfQogCX0KICNlbmRpZgotICAgIHJldHVybiBUUlVFOworICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgdm9pZCBkZXZpY2VfZnJlZV9pbmZvKFBTRGV2aWNlIHBEZXZpY2UpIHsKQEAgLTEyNjMsNyArMTI2Niw3IEBACiAgICAgfQogfQogCi1zdGF0aWMgQk9PTCBkZXZpY2VfaW5pdF9yaW5ncyhQU0RldmljZSBwRGV2aWNlKSB7CitzdGF0aWMgYm9vbCBkZXZpY2VfaW5pdF9yaW5ncyhQU0RldmljZSBwRGV2aWNlKSB7CiAgICAgdm9pZCogICB2aXJfcG9vbDsKIAogCkBAIC0xMjc3LDcgKzEyODAsNyBAQAogCiAgICAgaWYgKHZpcl9wb29sID09IE5VTEwpIHsKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfRVJSLEtFUk5fRVJSICIlcyA6IGFsbG9jYXRlIGRlc2MgZG1hIG1lbW9yeSBmYWlsZWRcbiIsIHBEZXZpY2UtPmRldi0+bmFtZSk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIG1lbXNldCh2aXJfcG9vbCwgMCwKQEAgLTEzMTIsNyArMTMxNSw3IEBACiAgICAgICAgICAgICBwRGV2aWNlLT5zT3B0cy5uVHhEZXNjc1sxXSAqIHNpemVvZihTVHhEZXNjKSwKICAgICAgICAgICAgIHZpcl9wb29sLCBwRGV2aWNlLT5wb29sX2RtYQogICAgICAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgbWVtc2V0KHBEZXZpY2UtPnR4MF9idWZzLCAwLApAQCAtMTM1OCw3ICsxMzYxLDcgQEAKICAgICAgICAgICAgIHBEZXZpY2UtPnNPcHRzLm5UeERlc2NzWzFdICogUEtUX0JVRl9TWjsKIAogCi0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyB2b2lkIGRldmljZV9mcmVlX3JpbmdzKFBTRGV2aWNlIHBEZXZpY2UpIHsKQEAgLTE1OTMsNyArMTU5Niw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IGRldmljZV9yeF9zcnYoUFNEZXZpY2UgcERldmljZSwgVUlOVCB1SWR4KSB7CitzdGF0aWMgaW50IGRldmljZV9yeF9zcnYoUFNEZXZpY2UgcERldmljZSwgdW5zaWduZWQgaW50IHVJZHgpIHsKICAgICBQU1J4RGVzYyAgICBwUkQ7CiAgICAgaW50IHdvcmtzID0gMDsKIApAQCAtMTYyMSw3ICsxNjI0LDcgQEAKIH0KIAogCi1zdGF0aWMgQk9PTCBkZXZpY2VfYWxsb2NfcnhfYnVmKFBTRGV2aWNlIHBEZXZpY2UsIFBTUnhEZXNjIHBSRCkgeworc3RhdGljIGJvb2wgZGV2aWNlX2FsbG9jX3J4X2J1ZihQU0RldmljZSBwRGV2aWNlLCBQU1J4RGVzYyBwUkQpIHsKIAogICAgIFBERVZJQ0VfUkRfSU5GTyBwUkRJbmZvPXBSRC0+cFJESW5mbzsKIApAQCAtMTYzMSw3ICsxNjM0LDcgQEAKIAkvL3ByaW50aygiZGV2aWNlX2FsbG9jX3J4X2J1Zjpza2IgaXMgJXhcbiIscFJESW5mby0+c2tiKTsKICNlbmRpZgogICAgIGlmIChwUkRJbmZvLT5za2I9PU5VTEwpCi0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEFTU0VSVChwUkRJbmZvLT5za2IpOwogICAgIHBSREluZm8tPnNrYi0+ZGV2ID0gcERldmljZS0+ZGV2OwogICAgIHBSREluZm8tPnNrYl9kbWEgPSBwY2lfbWFwX3NpbmdsZShwRGV2aWNlLT5wY2lkLCBza2JfdGFpbF9wb2ludGVyKHBSREluZm8tPnNrYiksCkBAIC0xNjQzLDM1ICsxNjQ2LDM1IEBACiAgICAgcFJELT5tX3JkMVJEMS53UmVxQ291bnQgPSBjcHVfdG9fbGUxNihwRGV2aWNlLT5yeF9idWZfc3opOwogICAgIHBSRC0+YnVmZl9hZGRyID0gY3B1X3RvX2xlMzIocFJESW5mby0+c2tiX2RtYSk7CiAKLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCiAKLUJPT0wgZGV2aWNlX2FsbG9jX2ZyYWdfYnVmKFBTRGV2aWNlIHBEZXZpY2UsIFBTRGVGcmFnQ29udHJvbEJsb2NrIHBEZUYpIHsKK2Jvb2wgZGV2aWNlX2FsbG9jX2ZyYWdfYnVmKFBTRGV2aWNlIHBEZXZpY2UsIFBTRGVGcmFnQ29udHJvbEJsb2NrIHBEZUYpIHsKIAogICAgIHBEZUYtPnNrYiA9IGRldl9hbGxvY19za2IoKGludClwRGV2aWNlLT5yeF9idWZfc3opOwogICAgIGlmIChwRGVGLT5za2IgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgQVNTRVJUKHBEZUYtPnNrYik7CiAgICAgcERlRi0+c2tiLT5kZXYgPSBwRGV2aWNlLT5kZXY7CiAKLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCiAKLXN0YXRpYyBpbnQgZGV2aWNlX3R4X3NydihQU0RldmljZSBwRGV2aWNlLCBVSU5UIHVJZHgpIHsKK3N0YXRpYyBpbnQgZGV2aWNlX3R4X3NydihQU0RldmljZSBwRGV2aWNlLCB1bnNpZ25lZCBpbnQgdUlkeCkgewogICAgIFBTVHhEZXNjICAgICAgICAgICAgICAgICBwVEQ7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgIGJGdWxsPUZBTFNFOworICAgIGJvb2wgYkZ1bGw9ZmFsc2U7CiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgIHdvcmtzID0gMDsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgYnlUc3IwOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICBieVRzcjE7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgIHVGcmFtZVNpemUsIHVGSUZPSGVhZGVyU2l6ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VHNyMDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VHNyMTsKKyAgICB1bnNpZ25lZCBpbnQJdUZyYW1lU2l6ZSwgdUZJRk9IZWFkZXJTaXplOwogICAgIFBTVHhCdWZIZWFkICAgICAgICAgICAgICBwVHhCdWZIZWFkOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKiBwU3RhdHMgPSAmcERldmljZS0+c3RhdHM7CiAgICAgc3RydWN0IHNrX2J1ZmYqICAgICAgICAgIHNrYjsKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICAgdU5vZGVJbmRleDsKKyAgICB1bnNpZ25lZCBpbnQJdU5vZGVJbmRleDsKICAgICBQU01nbXRPYmplY3QgICAgICAgICAgICAgcE1nbXQgPSBwRGV2aWNlLT5wTWdtdDsKIAogCkBAIC0xNjk3LDIwICsxNzAwLDIwIEBACiAKICAgICAgICAgICAgICAgICBTVEF2VXBkYXRlVERTdGF0Q291bnRlcigmcERldmljZS0+c2NTdGF0aXN0aWMsCiAgICAgICAgICAgICAgICAgICAgICAgICBieVRzcjAsIGJ5VHNyMSwKLSAgICAgICAgICAgICAgICAgICAgICAgIChQQllURSkocFRELT5wVERJbmZvLT5idWYgKyB1RklGT0hlYWRlclNpemUpLAorICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKikocFRELT5wVERJbmZvLT5idWYgKyB1RklGT0hlYWRlclNpemUpLAogICAgICAgICAgICAgICAgICAgICAgICAgdUZyYW1lU2l6ZSwgdUlkeCk7CiAKIAogICAgICAgICAgICAgICAgIEJTU3ZVcGRhdGVOb2RlVHhDb3VudGVyKHBEZXZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnlUc3IwLCBieVRzcjEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKFBCWVRFKShwVEQtPnBUREluZm8tPmJ1ZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKikocFRELT5wVERJbmZvLT5idWYpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHVGSUZPSGVhZGVyU2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAKICAgICAgICAgICAgICAgICBpZiAoICEoYnlUc3IxICYgVFNSMV9URVJSKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoYnlUc3IwICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIFR4WyVkXSBPSyBidXQgaGFzIGVycm9yLiB0c3IxWyUwMlhdIHRzcjBbJTAyWF0uXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKElOVCl1SWR4LCBieVRzcjEsIGJ5VHNyMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXVJZHgsIGJ5VHNyMSwgYnlUc3IwKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAoKHBUeEJ1ZkhlYWQtPndGcmFnQ3RsICYgRlJBR0NUTF9FTkRGUkFHKSAhPSBGUkFHQ1RMX05PTkZSQUcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPnM4MDJfMTFDb3VudGVyLlRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudCArKzsKQEAgLTE3MjAsNyArMTcyMyw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgVHhbJWRdIGRyb3BwZWQgJiB0c3IxWyUwMlhdIHRzcjBbJTAyWF0uXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKElOVCl1SWR4LCBieVRzcjEsIGJ5VHNyMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXVJZHgsIGJ5VHNyMSwgYnlUc3IwKTsKICAgICAgICAgICAgICAgICAgICAgcFN0YXRzLT50eF9lcnJvcnMrKzsKICAgICAgICAgICAgICAgICAgICAgcFN0YXRzLT50eF9kcm9wcGVkKys7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTc0MiwxOSArMTc0NSwxOSBAQAogICAgICAgICAgICAgaWYgKGJ5VHNyMSAmIFRTUjFfVEVSUikgewogICAgICAgICAgICAgaWYgKChwVEQtPnBUREluZm8tPmJ5RmxhZ3MgJiBURF9GTEFHU19QUklWX1NLQikgIT0gMCkgewogICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIFR4WyVkXSBmYWlsIGhhcyBlcnJvci4gdHNyMVslMDJYXSB0c3IwWyUwMlhdLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKElOVCl1SWR4LCBieVRzcjEsIGJ5VHNyMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpdUlkeCwgYnlUc3IxLCBieVRzcjApOwogICAgICAgICAgICAgfQogCiAvLyAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiBUeFslZF0gZmFpbCBoYXMgZXJyb3IuIHRzcjFbJTAyWF0gdHNyMFslMDJYXS5cbiIsCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgKElOVCl1SWR4LCBieVRzcjEsIGJ5VHNyMCk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCl1SWR4LCBieVRzcjEsIGJ5VHNyMCk7CiAKICAgICAgICAgICAgICAgICBpZiAoKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0VTU19BUCkgJiYKICAgICAgICAgICAgICAgICAgICAgKHBURC0+cFRESW5mby0+YnlGbGFncyAmIFREX0ZMQUdTX05FVElGX1NLQikpIHsKLSAgICAgICAgICAgICAgICAgICAgV09SRCAgICB3QUlEOwotICAgICAgICAgICAgICAgICAgICBCWVRFICAgIGJ5TWFza1s4XSA9IHsxLCAyLCA0LCA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwfTsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgd0FJRDsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBieU1hc2tbOF0gPSB7MSwgMiwgNCwgOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MH07CiAKICAgICAgICAgICAgICAgICAgICAgc2tiID0gcFRELT5wVERJbmZvLT5za2I7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChCU1NEQmJJc1NUQUluTm9kZURCKHBNZ210LCAoUEJZVEUpKHNrYi0+ZGF0YSksICZ1Tm9kZUluZGV4KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoQlNTREJiSXNTVEFJbk5vZGVEQihwTWdtdCwgKHVuc2lnbmVkIGNoYXIgKikoc2tiLT5kYXRhKSwgJnVOb2RlSW5kZXgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5iUFNFbmFibGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2JfcXVldWVfdGFpbCgmcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5zVHhQU1F1ZXVlLCBza2IpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud0VuUXVldWVDbnQrKzsKQEAgLTE3NjMsNyArMTc2Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPmFieVBTVHhNYXBbd0FJRCA+PiAzXSB8PSAgYnlNYXNrW3dBSUQgJiA3XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwVEQtPnBUREluZm8tPmJ5RmxhZ3MgJj0gfihURF9GTEFHU19ORVRJRl9TS0IpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInR4X3Nydjp0eCBmYWlsIHJlLXF1ZXVlIHN0YSBpbmRleD0gJWQsIFF1ZUNudD0gJWRcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwoSU5UKXVOb2RlSW5kZXgsIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud0VuUXVldWVDbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLChpbnQpdU5vZGVJbmRleCwgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53RW5RdWV1ZUNudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFN0YXRzLT50eF9lcnJvcnMtLTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwU3RhdHMtPnR4X2Ryb3BwZWQtLTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTE3ODAsMTAgKzE3ODMsMTAgQEAKICAgICAgICAgLy8gUkVTRVJWX0FDMERNQSByZXNlcnZlZCBmb3IgcmVsYXkKIAogICAgICAgICBpZiAoQVZBSUxfVEQocERldmljZSwgdUlkeCkgPCBSRVNFUlZfQUMwRE1BKSB7Ci0gICAgICAgICAgICBiRnVsbCA9IFRSVUU7CisgICAgICAgICAgICBiRnVsbCA9IHRydWU7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIgQUMwRE1BIGlzIEZ1bGwgPSAlZFxuIiwgcERldmljZS0+aVREVXNlZFt1SWR4XSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQocERldmljZS0+ZGV2KSAmJiAoYkZ1bGw9PUZBTFNFKSl7CisgICAgICAgIGlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKHBEZXZpY2UtPmRldikgJiYgKGJGdWxsPT1mYWxzZSkpewogICAgICAgICAgICAgbmV0aWZfd2FrZV9xdWV1ZShwRGV2aWNlLT5kZXYpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTc5NSw3ICsxNzk4LDcgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBkZXZpY2VfZXJyb3IoUFNEZXZpY2UgcERldmljZSwgV09SRCBzdGF0dXMpIHsKK3N0YXRpYyB2b2lkIGRldmljZV9lcnJvcihQU0RldmljZSBwRGV2aWNlLCB1bnNpZ25lZCBzaG9ydCBzdGF0dXMpIHsKIAogICAgIGlmIChzdGF0dXMgJiBJU1JfRkVUQUxFUlIpIHsKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfRVJSLCBLRVJOX0VSUgpAQCAtMTgwNCw3ICsxODA3LDcgQEAKICAgICAgICAgbmV0aWZfc3RvcF9xdWV1ZShwRGV2aWNlLT5kZXYpOwogICAgICAgICBkZWxfdGltZXIoJnBEZXZpY2UtPnNUaW1lckNvbW1hbmQpOwogICAgICAgICBkZWxfdGltZXIoJihwRGV2aWNlLT5wTWdtdC0+c1RpbWVyU2Vjb25kQ2FsbGJhY2spKTsKLSAgICAgICAgcERldmljZS0+YkNtZFJ1bm5pbmcgPSBGQUxTRTsKKyAgICAgICAgcERldmljZS0+YkNtZFJ1bm5pbmcgPSBmYWxzZTsKICAgICAgICAgTUFDYlNodXRkb3duKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTg0NCw3ICsxODQ3LDcgQEAKIAogCiAvL1BMSUNFX0RFQlVHIC0+Ci1JTlQgTWxtZVRocmVhZCgKK2ludCBNbG1lVGhyZWFkKAogICAgICB2b2lkICogQ29udGV4dCkKIHsKIAlQU0RldmljZQlwRGV2aWNlID0gIChQU0RldmljZSkgQ29udGV4dDsKQEAgLTE5MTQsOCArMTkxNyw4IEBACiAgICAgIHdwYV9SZXN1bHQucHJvdG8gPSAwOwogICAgICB3cGFfUmVzdWx0LmtleV9tZ210ID0gMDsKICAgICAgd3BhX1Jlc3VsdC5lYXBfdHlwZSA9IDA7Ci0gICAgIHdwYV9SZXN1bHQuYXV0aGVudGljYXRlZCA9IEZBTFNFOwotICAgICBwRGV2aWNlLT5mV1BBX0F1dGhlbmVkID0gRkFMU0U7CisgICAgIHdwYV9SZXN1bHQuYXV0aGVudGljYXRlZCA9IGZhbHNlOworICAgICBwRGV2aWNlLT5mV1BBX0F1dGhlbmVkID0gZmFsc2U7CiAjZW5kaWYKIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImNhbGwgZGV2aWNlIGluaXQgcmQwIHJpbmdcbiIpOwogZGV2aWNlX2luaXRfcmQwX3JpbmcocERldmljZSk7CkBAIC0xOTgwLDIwICsxOTgzLDIwIEBACiAKIAkjaWZkZWYgV1BBX1NVUFBMSUNBTlRfRFJJVkVSX1dFWFRfU1VQUE9SVAogCS8qCi0gICAgIHBEZXZpY2UtPmJ3ZXh0c3RlcDAgPSBGQUxTRTsKLSAgICAgcERldmljZS0+YndleHRzdGVwMSA9IEZBTFNFOwotICAgICBwRGV2aWNlLT5id2V4dHN0ZXAyID0gRkFMU0U7Ci0gICAgIHBEZXZpY2UtPmJ3ZXh0c3RlcDMgPSBGQUxTRTsKKyAgICAgcERldmljZS0+YndleHRzdGVwMCA9IGZhbHNlOworICAgICBwRGV2aWNlLT5id2V4dHN0ZXAxID0gZmFsc2U7CisgICAgIHBEZXZpY2UtPmJ3ZXh0c3RlcDIgPSBmYWxzZTsKKyAgICAgcERldmljZS0+YndleHRzdGVwMyA9IGZhbHNlOwogICAgICAqLwogICAgICAgIHBEZXZpY2UtPmJ3ZXh0Y291bnQ9MDsKLSAgICAgcERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9IEZBTFNFOworICAgICBwRGV2aWNlLT5iV1BBU3VwcFdleHRFbmFibGVkID0gZmFsc2U7CiAjZW5kaWYKICAgICBwRGV2aWNlLT5ieVJlQXNzb2NDb3VudCA9IDA7Ci0gICBwRGV2aWNlLT5iV1BBREVWVXAgPSBGQUxTRTsKKyAgIHBEZXZpY2UtPmJXUEFERVZVcCA9IGZhbHNlOwogICAgIC8vIFBhdGNoOiBpZiBXRVAga2V5IGFscmVhZHkgc2V0IGJ5IGl3Y29uZmlnIGJ1dCBkZXZpY2Ugbm90IHlldCBvcGVuCi0gICAgaWYgKChwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9PSBUUlVFKSAmJiAocERldmljZS0+YlRyYW5zbWl0S2V5ID09IFRSVUUpKSB7CisgICAgaWYgKChwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9PSB0cnVlKSAmJiAocERldmljZS0+YlRyYW5zbWl0S2V5ID09IHRydWUpKSB7CiAgICAgICAgIEtleWJTZXREZWZhdWx0S2V5KCYocERldmljZS0+c0tleSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKERXT1JEKShwRGV2aWNlLT5ieUtleUluZGV4IHwgKDEgPDwgMzEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykocERldmljZS0+YnlLZXlJbmRleCB8ICgxIDw8IDMxKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+dUtleUxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmFieUtleSwKQEAgLTIwNTIsMTIgKzIwNTUsMTIgQEAKIAl0YXNrbGV0X2tpbGwoJnBEZXZpY2UtPlJ4TW5nV29ya0l0ZW0pOwogI2VuZGlmCiAgICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLSAgICBwRGV2aWNlLT5iQ21kUnVubmluZyA9IEZBTFNFOworICAgIHBEZXZpY2UtPmJDbWRSdW5uaW5nID0gZmFsc2U7CiAgICAgTUFDYlNodXRkb3duKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwogICAgIE1BQ2JTb2Z0d2FyZVJlc2V0KHBEZXZpY2UtPlBvcnRPZmZzZXQpOwogICAgIENBUkRiUmFkaW9Qb3dlck9mZihwRGV2aWNlKTsKIAotICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IEZBTFNFOworICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IGZhbHNlOwogICAgIG1lbXNldChwTWdtdC0+YWJ5Q3VyckJTU0lELCAwLCA2KTsKICAgICBwTWdtdC0+ZUN1cnJTdGF0ZSA9IFdNQUNfU1RBVEVfSURMRTsKICAgICBkZXZpY2VfZnJlZV90ZDBfcmluZyhwRGV2aWNlKTsKQEAgLTIwODIsOCArMjA4NSw4IEBACiAKIHN0YXRpYyBpbnQgZGV2aWNlX2RtYTBfdHhfODAyMTEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikgewogICAgIFBTRGV2aWNlICAgICAgICBwRGV2aWNlPW5ldGRldl9wcml2KGRldik7Ci0gICAgUEJZVEUgICAgICAgICAgIHBiTVBEVTsKLSAgICBVSU5UICAgICAgICAgICAgY2JNUERVTGVuID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyICpwYk1QRFU7CisgICAgdW5zaWduZWQgaW50IGNiTVBEVUxlbiA9IDA7CiAKIAogICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImRldmljZV9kbWEwX3R4XzgwMjExXG4iKTsKQEAgLTIwOTYsNyArMjA5OSw3IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGlmIChwRGV2aWNlLT5iU3RvcFR4MFBrdCA9PSBUUlVFKSB7CisgICAgaWYgKHBEZXZpY2UtPmJTdG9wVHgwUGt0ID09IHRydWUpIHsKICAgICAgICAgZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKICAgICAgICAgc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMTE1LDM2ICsyMTE4LDM2IEBACiAKIAogCi1CT09MIGRldmljZV9kbWEwX3htaXQoUFNEZXZpY2UgcERldmljZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgVUlOVCB1Tm9kZUluZGV4KSB7Citib29sIGRldmljZV9kbWEwX3htaXQoUFNEZXZpY2UgcERldmljZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHVOb2RlSW5kZXgpIHsKICAgICBQU01nbXRPYmplY3QgICAgcE1nbXQgPSBwRGV2aWNlLT5wTWdtdDsKICAgICBQU1R4RGVzYyAgICAgICAgcEhlYWRURCwgcExhc3RURDsKLSAgICBVSU5UICAgICAgICAgICAgY2JGcmFtZUJvZHlTaXplOwotICAgIFVJTlQgICAgICAgICAgICB1TUFDZnJhZ051bTsKLSAgICBCWVRFICAgICAgICAgICAgYnlQa3RUeXBlOwotICAgIEJPT0wgICAgICAgICAgICBiTmVlZEVuY3J5cHRpb24gPSBGQUxTRTsKKyAgICB1bnNpZ25lZCBpbnQgY2JGcmFtZUJvZHlTaXplOworICAgIHVuc2lnbmVkIGludCB1TUFDZnJhZ051bTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UGt0VHlwZTsKKyAgICBib29sIGJOZWVkRW5jcnlwdGlvbiA9IGZhbHNlOwogICAgIFBTS2V5SXRlbSAgICAgICBwVHJhbnNtaXRLZXkgPSBOVUxMOwotICAgIFVJTlQgICAgICAgICAgICBjYkhlYWRlclNpemU7Ci0gICAgVUlOVCAgICAgICAgICAgIGlpOworICAgIHVuc2lnbmVkIGludCBjYkhlYWRlclNpemU7CisgICAgdW5zaWduZWQgaW50IGlpOwogICAgIFNLZXlJdGVtICAgICAgICBTVGVtcEtleTsKLS8vICAgIEJZVEUgICAgICAgICAgICBieUtleUluZGV4ID0gMDsKKy8vICAgIHVuc2lnbmVkIGNoYXIgYnlLZXlJbmRleCA9IDA7CiAKIAotICAgIGlmIChwRGV2aWNlLT5iU3RvcFR4MFBrdCA9PSBUUlVFKSB7CisgICAgaWYgKHBEZXZpY2UtPmJTdG9wVHgwUGt0ID09IHRydWUpIHsKICAgICAgICAgZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfTsKIAogICAgIGlmIChBVkFJTF9URChwRGV2aWNlLCBUWVBFX1RYRE1BMCkgPD0gMCkgewogICAgICAgICBkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJkZXZpY2VfZG1hMF94bWl0LCB0ZDAgPD0wXG4iKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0VTU19BUCkgewogICAgICAgICBpZiAocERldmljZS0+dUFzc29jQ291bnQgPT0gMCkgewogICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImRldmljZV9kbWEwX3htaXQsIGFzc29jQ291bnQgPSAwXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjE1Miw3ICsyMTU1LDcgQEAKIAogICAgIHBIZWFkVEQtPm1fdGQxVEQxLmJ5VENSID0gKFRDUl9FRFB8VENSX1NUUCk7CiAKLSAgICBtZW1jcHkocERldmljZS0+c1R4RXRoSGVhZGVyLmFieURzdEFkZHIsIChQQllURSkoc2tiLT5kYXRhKSwgRVRIX0hMRU4pOworICAgIG1lbWNweShwRGV2aWNlLT5zVHhFdGhIZWFkZXIuYWJ5RHN0QWRkciwgKHVuc2lnbmVkIGNoYXIgKikoc2tiLT5kYXRhKSwgRVRIX0hMRU4pOwogICAgIGNiRnJhbWVCb2R5U2l6ZSA9IHNrYi0+bGVuIC0gRVRIX0hMRU47CiAKICAgICAvLyA4MDIuMUgKQEAgLTIxNjMsOSArMjE2Niw5IEBACiAKICAgICBpZiAoIHVNQUNmcmFnTnVtID4gQVZBSUxfVEQocERldmljZSwgVFlQRV9UWERNQTApKSB7CiAgICAgICAgIGRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBieVBrdFR5cGUgPSAoQllURSlwRGV2aWNlLT5ieVBhY2tldFR5cGU7CisgICAgYnlQa3RUeXBlID0gKHVuc2lnbmVkIGNoYXIpcERldmljZS0+YnlQYWNrZXRUeXBlOwogCiAKICAgICBpZiAocERldmljZS0+YkZpeFJhdGUpIHsKQEAgLTIxNzMsMTMgKzIxNzYsMTMgQEAKICAgICAgICAgICAgIGlmIChwRGV2aWNlLT51Q29ubmVjdGlvblJhdGUgPj0gUkFURV8xMU0pIHsKICAgICAgICAgICAgICAgICBwRGV2aWNlLT53Q3VycmVudFJhdGUgPSBSQVRFXzExTTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+d0N1cnJlbnRSYXRlID0gKFdPUkQpcERldmljZS0+dUNvbm5lY3Rpb25SYXRlOworICAgICAgICAgICAgICAgIHBEZXZpY2UtPndDdXJyZW50UmF0ZSA9ICh1bnNpZ25lZCBzaG9ydClwRGV2aWNlLT51Q29ubmVjdGlvblJhdGU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAocERldmljZS0+dUNvbm5lY3Rpb25SYXRlID49IFJBVEVfNTRNKQogICAgICAgICAgICAgICAgIHBEZXZpY2UtPndDdXJyZW50UmF0ZSA9IFJBVEVfNTRNOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHBEZXZpY2UtPndDdXJyZW50UmF0ZSA9IChXT1JEKXBEZXZpY2UtPnVDb25uZWN0aW9uUmF0ZTsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT53Q3VycmVudFJhdGUgPSAodW5zaWduZWQgc2hvcnQpcERldmljZS0+dUNvbm5lY3Rpb25SYXRlOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewpAQCAtMjIwMiwxNSArMjIwNSwxNSBAQAogICAgIH0gZWxzZSBpZiAocERldmljZS0+ZUN1cnJlbnRQSFlUeXBlID09IFBIWV9UWVBFXzExQSkgewogICAgICAgICBieVBrdFR5cGUgPSBQS19UWVBFXzExQTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAocERldmljZS0+YlByb3RlY3RNb2RlID09IFRSVUUpIHsKKyAgICAgICAgaWYgKHBEZXZpY2UtPmJQcm90ZWN0TW9kZSA9PSB0cnVlKSB7CiAgICAgICAgICAgICBieVBrdFR5cGUgPSBQS19UWVBFXzExR0I7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBieVBrdFR5cGUgPSBQS19UWVBFXzExR0E7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAocERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPT0gVFJVRSkKLSAgICAgICAgYk5lZWRFbmNyeXB0aW9uID0gVFJVRTsKKyAgICBpZiAocERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPT0gdHJ1ZSkKKyAgICAgICAgYk5lZWRFbmNyeXB0aW9uID0gdHJ1ZTsKIAogICAgIGlmIChwRGV2aWNlLT5iRW5hYmxlSG9zdFdFUCkgewogICAgICAgICBwVHJhbnNtaXRLZXkgPSAmU1RlbXBLZXk7CkBAIC0yMjI2LDcgKzIyMjksNyBAQAogICAgIH0KICAgICB2R2VuZXJhdGVGSUZPSGVhZGVyKHBEZXZpY2UsIGJ5UGt0VHlwZSwgcERldmljZS0+cGJ5VG1wQnVmZiwgYk5lZWRFbmNyeXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgY2JGcmFtZUJvZHlTaXplLCBUWVBFX1RYRE1BMCwgcEhlYWRURCwKLSAgICAgICAgICAgICAgICAgICAgICAgICZwRGV2aWNlLT5zVHhFdGhIZWFkZXIsIChQQllURSlza2ItPmRhdGEsIHBUcmFuc21pdEtleSwgdU5vZGVJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICZwRGV2aWNlLT5zVHhFdGhIZWFkZXIsICh1bnNpZ25lZCBjaGFyICopc2tiLT5kYXRhLCBwVHJhbnNtaXRLZXksIHVOb2RlSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAmdU1BQ2ZyYWdOdW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAmY2JIZWFkZXJTaXplCiAgICAgICAgICAgICAgICAgICAgICAgICApOwpAQCAtMjIzNiw3ICsyMjM5LDcgQEAKICAgICAgICAgTUFDYlBTV2FrZXVwKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwogICAgIH0KIAotICAgIHBEZXZpY2UtPmJQV0JpdE9uID0gRkFMU0U7CisgICAgcERldmljZS0+YlBXQml0T24gPSBmYWxzZTsKIAogICAgIHBMYXN0VEQgPSBwSGVhZFREOwogICAgIGZvciAoaWkgPSAwOyBpaSA8IHVNQUNmcmFnTnVtOyBpaSsrKSB7CkBAIC0yMjYwLDcgKzIyNjMsNyBAQAogICAgIE1BQ3ZUcmFuc21pdDAocERldmljZS0+UG9ydE9mZnNldCk7CiAKIAotICAgIHJldHVybiBUUlVFOworICAgIHJldHVybiB0cnVlOwogfQogCiAvL1RZUEVfQUMwRE1BIGRhdGEgdHgKQEAgLTIyNjksMjYgKzIyNzIsMjYgQEAKIAogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwogICAgIFBTVHhEZXNjICAgICAgICBwSGVhZFRELCBwTGFzdFREOwotICAgIFVJTlQgICAgICAgICAgICB1Tm9kZUluZGV4ID0gMDsKLSAgICBCWVRFICAgICAgICAgICAgYnlNYXNrWzhdID0gezEsIDIsIDQsIDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODB9OwotICAgIFdPUkQgICAgICAgICAgICB3QUlEOwotICAgIFVJTlQgICAgICAgICAgICB1TUFDZnJhZ051bSA9IDE7Ci0gICAgVUlOVCAgICAgICAgICAgIGNiRnJhbWVCb2R5U2l6ZTsKLSAgICBCWVRFICAgICAgICAgICAgYnlQa3RUeXBlOwotICAgIFVJTlQgICAgICAgICAgICBjYkhlYWRlclNpemU7Ci0gICAgQk9PTCAgICAgICAgICAgIGJOZWVkRW5jcnlwdGlvbiA9IEZBTFNFOworICAgIHVuc2lnbmVkIGludCB1Tm9kZUluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TWFza1s4XSA9IHsxLCAyLCA0LCA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwfTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3QUlEOworICAgIHVuc2lnbmVkIGludCB1TUFDZnJhZ051bSA9IDE7CisgICAgdW5zaWduZWQgaW50IGNiRnJhbWVCb2R5U2l6ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UGt0VHlwZTsKKyAgICB1bnNpZ25lZCBpbnQgY2JIZWFkZXJTaXplOworICAgIGJvb2wgYk5lZWRFbmNyeXB0aW9uID0gZmFsc2U7CiAgICAgUFNLZXlJdGVtICAgICAgIHBUcmFuc21pdEtleSA9IE5VTEw7CiAgICAgU0tleUl0ZW0gICAgICAgIFNUZW1wS2V5OwotICAgIFVJTlQgICAgICAgICAgICBpaTsKLSAgICBCT09MICAgICAgICAgICAgYlRLSVBfVXNlR1RLID0gRkFMU0U7Ci0gICAgQk9PTCAgICAgICAgICAgIGJOZWVkRGVBdXRoID0gRkFMU0U7Ci0gICAgUEJZVEUgICAgICAgICAgIHBieUJTU0lEOwotICAgIEJPT0wgICAgICAgICAgICBiTm9kZUV4aXN0ID0gRkFMU0U7CisgICAgdW5zaWduZWQgaW50IGlpOworICAgIGJvb2wgYlRLSVBfVXNlR1RLID0gZmFsc2U7CisgICAgYm9vbCBiTmVlZERlQXV0aCA9IGZhbHNlOworICAgIHVuc2lnbmVkIGNoYXIgKnBieUJTU0lEOworICAgIGJvb2wgYk5vZGVFeGlzdCA9IGZhbHNlOwogCiAKIAogICAgIHNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotICAgIGlmIChwRGV2aWNlLT5iTGlua1Bhc3MgPT0gRkFMU0UpIHsKKyAgICBpZiAocERldmljZS0+YkxpbmtQYXNzID09IGZhbHNlKSB7CiAgICAgICAgIGRldl9rZnJlZV9za2JfaXJxKHNrYik7CiAgICAgICAgIHNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMjMwNyw5ICsyMzEwLDkgQEAKICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICBpZiAoSVNfTVVMVElDQVNUX0FERFJFU1MoKFBCWVRFKShza2ItPmRhdGEpKSkgeworICAgICAgICBpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoKHVuc2lnbmVkIGNoYXIgKikoc2tiLT5kYXRhKSkpIHsKICAgICAgICAgICAgIHVOb2RlSW5kZXggPSAwOwotICAgICAgICAgICAgYk5vZGVFeGlzdCA9IFRSVUU7CisgICAgICAgICAgICBiTm9kZUV4aXN0ID0gdHJ1ZTsKICAgICAgICAgICAgIGlmIChwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJQU0VuYWJsZSkgewogICAgICAgICAgICAgICAgIHNrYl9xdWV1ZV90YWlsKCYocE1nbXQtPnNOb2RlREJUYWJsZVswXS5zVHhQU1F1ZXVlKSwgc2tiKTsKICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlWzBdLndFblF1ZXVlQ250Kys7CkBAIC0yMzE5LDcgKzIzMjIsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogfWVsc2UgewotICAgICAgICAgICAgaWYgKEJTU0RCYklzU1RBSW5Ob2RlREIocE1nbXQsIChQQllURSkoc2tiLT5kYXRhKSwgJnVOb2RlSW5kZXgpKSB7CisgICAgICAgICAgICBpZiAoQlNTREJiSXNTVEFJbk5vZGVEQihwTWdtdCwgKHVuc2lnbmVkIGNoYXIgKikoc2tiLT5kYXRhKSwgJnVOb2RlSW5kZXgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uYlBTRW5hYmxlKSB7CiAgICAgICAgICAgICAgICAgICAgIHNrYl9xdWV1ZV90YWlsKCZwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLnNUeFBTUXVldWUsIHNrYik7CiAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud0VuUXVldWVDbnQrKzsKQEAgLTIzMzgsMTIgKzIzNDEsMTIgQEAKICAgICAgICAgICAgICAgICB9ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5UHJlYW1ibGVUeXBlID0gUFJFQU1CTEVfTE9ORzsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYk5vZGVFeGlzdCA9IFRSVUU7CisgICAgICAgICAgICAgICAgYk5vZGVFeGlzdCA9IHRydWU7CiAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmIChiTm9kZUV4aXN0ID09IEZBTFNFKSB7CisgICAgICAgIGlmIChiTm9kZUV4aXN0ID09IGZhbHNlKSB7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9ERUJVRyJVbmtub3duIFNUQSBub3QgZm91bmQgaW4gbm9kZSBEQiBcbiIpOwogICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CkBAIC0yMzU2LDcgKzIzNTksNyBAQAogICAgIHBIZWFkVEQtPm1fdGQxVEQxLmJ5VENSID0gKFRDUl9FRFB8VENSX1NUUCk7CiAKIAotICAgIG1lbWNweShwRGV2aWNlLT5zVHhFdGhIZWFkZXIuYWJ5RHN0QWRkciwgKFBCWVRFKShza2ItPmRhdGEpLCBFVEhfSExFTik7CisgICAgbWVtY3B5KHBEZXZpY2UtPnNUeEV0aEhlYWRlci5hYnlEc3RBZGRyLCAodW5zaWduZWQgY2hhciAqKShza2ItPmRhdGEpLCBFVEhfSExFTik7CiAgICAgY2JGcmFtZUJvZHlTaXplID0gc2tiLT5sZW4gLSBFVEhfSExFTjsKICAgICAvLyA4MDIuMUgKICAgICBpZiAobnRvaHMocERldmljZS0+c1R4RXRoSGVhZGVyLndUeXBlKSA+IEVUSF9EQVRBX0xFTikgewpAQCAtMjM2NCwxOCArMjM2NywxOCBAQAogICAgIH0KIAogCi0gICAgaWYgKHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID09IFRSVUUpIHsKLSAgICAgICAgYk5lZWRFbmNyeXB0aW9uID0gVFJVRTsKKyAgICBpZiAocERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPT0gdHJ1ZSkgeworICAgICAgICBiTmVlZEVuY3J5cHRpb24gPSB0cnVlOwogICAgICAgICAvLyBnZXQgVHJhbnNtaXQga2V5CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIGlmICgocERldmljZS0+cE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX1NUQSkgJiYKICAgICAgICAgICAgICAgICAocERldmljZS0+cE1nbXQtPmVDdXJyU3RhdGUgPT0gV01BQ19TVEFURV9BU1NPQykpIHsKICAgICAgICAgICAgICAgICBwYnlCU1NJRCA9IHBEZXZpY2UtPmFieUJTU0lEOwogICAgICAgICAgICAgICAgIC8vIGdldCBwYWlyd2lzZSBrZXkKLSAgICAgICAgICAgICAgICBpZiAoS2V5YkdldFRyYW5zbWl0S2V5KCYocERldmljZS0+c0tleSksIHBieUJTU0lELCBQQUlSV0lTRV9LRVksICZwVHJhbnNtaXRLZXkpID09IEZBTFNFKSB7CisgICAgICAgICAgICAgICAgaWYgKEtleWJHZXRUcmFuc21pdEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwYnlCU1NJRCwgUEFJUldJU0VfS0VZLCAmcFRyYW5zbWl0S2V5KSA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAvLyBnZXQgZ3JvdXAga2V5Ci0gICAgICAgICAgICAgICAgICAgIGlmKEtleWJHZXRUcmFuc21pdEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwYnlCU1NJRCwgR1JPVVBfS0VZLCAmcFRyYW5zbWl0S2V5KSA9PSBUUlVFKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiVEtJUF9Vc2VHVEsgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICBpZihLZXliR2V0VHJhbnNtaXRLZXkoJihwRGV2aWNlLT5zS2V5KSwgcGJ5QlNTSUQsIEdST1VQX0tFWSwgJnBUcmFuc21pdEtleSkgPT0gdHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYlRLSVBfVXNlR1RLID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0RFQlVHIkdldCBHVEsuXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yMzkyLDEyICsyMzk1LDEyIEBACiAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fREVCVUciXG4iKTsKIAogICAgICAgICAgICAgICAgIC8vIGdldCBwYWlyd2lzZSBrZXkKLSAgICAgICAgICAgICAgICBpZihLZXliR2V0VHJhbnNtaXRLZXkoJihwRGV2aWNlLT5zS2V5KSwgcGJ5QlNTSUQsIFBBSVJXSVNFX0tFWSwgJnBUcmFuc21pdEtleSkgPT0gVFJVRSkKKyAgICAgICAgICAgICAgICBpZihLZXliR2V0VHJhbnNtaXRLZXkoJihwRGV2aWNlLT5zS2V5KSwgcGJ5QlNTSUQsIFBBSVJXSVNFX0tFWSwgJnBUcmFuc21pdEtleSkgPT0gdHJ1ZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBnZXQgZ3JvdXAga2V5CiAgICAgICAgICAgICBwYnlCU1NJRCA9IHBEZXZpY2UtPmFieUJyb2FkY2FzdEFkZHI7Ci0gICAgICAgICAgICBpZihLZXliR2V0VHJhbnNtaXRLZXkoJihwRGV2aWNlLT5zS2V5KSwgcGJ5QlNTSUQsIEdST1VQX0tFWSwgJnBUcmFuc21pdEtleSkgPT0gRkFMU0UpIHsKKyAgICAgICAgICAgIGlmKEtleWJHZXRUcmFuc21pdEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwYnlCU1NJRCwgR1JPVVBfS0VZLCAmcFRyYW5zbWl0S2V5KSA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgIHBUcmFuc21pdEtleSA9IE5VTEw7CiAgICAgICAgICAgICAgICAgaWYgKHBEZXZpY2UtPnBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0lCU1NfU1RBKSB7CiAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0RFQlVHIklCU1MgYW5kIEtFWSBpcyBOVUxMLiBbJWRdXG4iLCBwRGV2aWNlLT5wTWdtdC0+ZUN1cnJNb2RlKTsKQEAgLTI0MDUsMTUgKzI0MDgsMTUgQEAKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0RFQlVHIk5PVCBJQlNTIGFuZCBLRVkgaXMgTlVMTC4gWyVkXVxuIiwgcERldmljZS0+cE1nbXQtPmVDdXJyTW9kZSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGJUS0lQX1VzZUdUSyA9IFRSVUU7CisgICAgICAgICAgICAgICAgYlRLSVBfVXNlR1RLID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9ERUJVRyJHZXQgR1RLLlxuIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gd2hpbGUoRkFMU0UpOworICAgICAgICB9IHdoaWxlKGZhbHNlKTsKICAgICB9CiAKICAgICBpZiAocERldmljZS0+YkVuYWJsZUhvc3RXRVApIHsKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fREVCVUciYWNkbWEwOiBTVEEgaW5kZXggJWRcbiIsIHVOb2RlSW5kZXgpOwotICAgICAgICBpZiAocERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPT0gVFJVRSkgeworICAgICAgICBpZiAocERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPT0gdHJ1ZSkgewogICAgICAgICAgICAgcFRyYW5zbWl0S2V5ID0gJlNUZW1wS2V5OwogICAgICAgICAgICAgcFRyYW5zbWl0S2V5LT5ieUNpcGhlclN1aXRlID0gcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5ieUNpcGhlclN1aXRlOwogICAgICAgICAgICAgcFRyYW5zbWl0S2V5LT5kd0tleUluZGV4ID0gcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5kd0tleUluZGV4OwpAQCAtMjQ0Myw3ICsyNDQ2LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGJ5UGt0VHlwZSA9IChCWVRFKXBEZXZpY2UtPmJ5UGFja2V0VHlwZTsKKyAgICBieVBrdFR5cGUgPSAodW5zaWduZWQgY2hhcilwRGV2aWNlLT5ieVBhY2tldFR5cGU7CiAKICAgICBpZiAocERldmljZS0+YkZpeFJhdGUpIHsKICNpZmRlZglQTElDRV9ERUJVRwpAQCAtMjQ1NCw3ICsyNDU3LDcgQEAKICAgICAgICAgICAgIGlmIChwRGV2aWNlLT51Q29ubmVjdGlvblJhdGUgPj0gUkFURV8xMU0pIHsKICAgICAgICAgICAgICAgICBwRGV2aWNlLT53Q3VycmVudFJhdGUgPSBSQVRFXzExTTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+d0N1cnJlbnRSYXRlID0gKFdPUkQpcERldmljZS0+dUNvbm5lY3Rpb25SYXRlOworICAgICAgICAgICAgICAgIHBEZXZpY2UtPndDdXJyZW50UmF0ZSA9ICh1bnNpZ25lZCBzaG9ydClwRGV2aWNlLT51Q29ubmVjdGlvblJhdGU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoKHBEZXZpY2UtPmVDdXJyZW50UEhZVHlwZSA9PSBQSFlfVFlQRV8xMUEpICYmCkBAIC0yNDY0LDExICsyNDY3LDExIEBACiAgICAgICAgICAgICAgICAgaWYgKHBEZXZpY2UtPnVDb25uZWN0aW9uUmF0ZSA+PSBSQVRFXzU0TSkKICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+d0N1cnJlbnRSYXRlID0gUkFURV81NE07CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT53Q3VycmVudFJhdGUgPSAoV09SRClwRGV2aWNlLT51Q29ubmVjdGlvblJhdGU7CisgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPndDdXJyZW50UmF0ZSA9ICh1bnNpZ25lZCBzaG9ydClwRGV2aWNlLT51Q29ubmVjdGlvblJhdGU7CiAKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBwRGV2aWNlLT5ieUFDS1JhdGUgPSAoQllURSkgcERldmljZS0+d0N1cnJlbnRSYXRlOworICAgICAgICBwRGV2aWNlLT5ieUFDS1JhdGUgPSAodW5zaWduZWQgY2hhcikgcERldmljZS0+d0N1cnJlbnRSYXRlOwogICAgICAgICBwRGV2aWNlLT5ieVRvcENDS0Jhc2ljUmF0ZSA9IFJBVEVfMU07CiAgICAgICAgIHBEZXZpY2UtPmJ5VG9wT0ZETUJhc2ljUmF0ZSA9IFJBVEVfNk07CiAgICAgfQpAQCAtMjUyMSw3ICsyNTI0LDcgQEAKICAgICB9IGVsc2UgaWYgKHBEZXZpY2UtPmVDdXJyZW50UEhZVHlwZSA9PSBQSFlfVFlQRV8xMUEpIHsKICAgICAgICAgYnlQa3RUeXBlID0gUEtfVFlQRV8xMUE7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHBEZXZpY2UtPmJQcm90ZWN0TW9kZSA9PSBUUlVFKSB7CisgICAgICAgIGlmIChwRGV2aWNlLT5iUHJvdGVjdE1vZGUgPT0gdHJ1ZSkgewogICAgICAgICAgICAgYnlQa3RUeXBlID0gUEtfVFlQRV8xMUdCOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYnlQa3RUeXBlID0gUEtfVFlQRV8xMUdBOwpAQCAtMjUzMiwyOCArMjUzNSwyOCBAQAogLy8JcHJpbnRrKCJGSVggUkFURTpDdXJyZW50UmF0ZSBpcyAlZCIpOwogLy8jZW5kaWYKIAotICAgIGlmIChiTmVlZEVuY3J5cHRpb24gPT0gVFJVRSkgeworICAgIGlmIChiTmVlZEVuY3J5cHRpb24gPT0gdHJ1ZSkgewogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIm50b2hzIFBrdCBUeXBlPSUwNHhcbiIsIG50b2hzKHBEZXZpY2UtPnNUeEV0aEhlYWRlci53VHlwZSkpOwogICAgICAgICBpZiAoKHBEZXZpY2UtPnNUeEV0aEhlYWRlci53VHlwZSkgPT0gVFlQRV9QS1RfODAyXzF4KSB7Ci0gICAgICAgICAgICBiTmVlZEVuY3J5cHRpb24gPSBGQUxTRTsKKyAgICAgICAgICAgIGJOZWVkRW5jcnlwdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJQa3QgVHlwZT0lMDR4XG4iLCAocERldmljZS0+c1R4RXRoSGVhZGVyLndUeXBlKSk7CiAgICAgICAgICAgICBpZiAoKHBEZXZpY2UtPnBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0VTU19TVEEpICYmIChwRGV2aWNlLT5wTWdtdC0+ZUN1cnJTdGF0ZSA9PSBXTUFDX1NUQVRFX0FTU09DKSkgewogICAgICAgICAgICAgICAgIGlmIChwVHJhbnNtaXRLZXkgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIkRvbid0IEZpbmQgVFggS0VZXG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiVEtJUF9Vc2VHVEsgPT0gVFJVRSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYlRLSVBfVXNlR1RLID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iZXJyb3I6IEtFWSBpcyBHVEshIX5+XG4iKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iRmluZCBQVEsgWyVsWF1cbiIsIHBUcmFuc21pdEtleS0+ZHdLZXlJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiTmVlZEVuY3J5cHRpb24gPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgICAgYk5lZWRFbmNyeXB0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJ5Q250TWVhc3VyZSA9PSAyKSB7Ci0gICAgICAgICAgICAgICAgYk5lZWREZUF1dGggPSBUUlVFOworICAgICAgICAgICAgICAgIGJOZWVkRGVBdXRoID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBwRGV2aWNlLT5zODAyXzExQ291bnRlci5US0lQQ291bnRlck1lYXN1cmVzSW52b2tlZCsrOwogICAgICAgICAgICAgfQogCkBAIC0yNTYxLDcgKzI1NjQsNyBAQAogICAgICAgICAgICAgICAgIGlmICgodU5vZGVJbmRleCAhPSAwKSAmJgogICAgICAgICAgICAgICAgICAgICAocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5kd0tleUluZGV4ICYgUEFJUldJU0VfS0VZKSkgewogICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIkZpbmQgUFRLIFslbFhdXG4iLCBwVHJhbnNtaXRLZXktPmR3S2V5SW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBiTmVlZEVuY3J5cHRpb24gPSBUUlVFOworICAgICAgICAgICAgICAgICAgICBiTmVlZEVuY3J5cHRpb24gPSB0cnVlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNTg0LDcgKzI1ODcsNyBAQAogI2VuZGlmCiAgICAgdkdlbmVyYXRlRklGT0hlYWRlcihwRGV2aWNlLCBieVBrdFR5cGUsIHBEZXZpY2UtPnBieVRtcEJ1ZmYsIGJOZWVkRW5jcnlwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNiRnJhbWVCb2R5U2l6ZSwgVFlQRV9BQzBETUEsIHBIZWFkVEQsCi0gICAgICAgICAgICAgICAgICAgICAgICAmcERldmljZS0+c1R4RXRoSGVhZGVyLCAoUEJZVEUpc2tiLT5kYXRhLCBwVHJhbnNtaXRLZXksIHVOb2RlSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAmcERldmljZS0+c1R4RXRoSGVhZGVyLCAodW5zaWduZWQgY2hhciAqKXNrYi0+ZGF0YSwgcFRyYW5zbWl0S2V5LCB1Tm9kZUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgJnVNQUNmcmFnTnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgJmNiSGVhZGVyU2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgKTsKQEAgLTI1OTMsNyArMjU5Niw3IEBACiAgICAgICAgIC8vIERpc2FibGUgUFMKICAgICAgICAgTUFDYlBTV2FrZXVwKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwogICAgIH0KLSAgICBwRGV2aWNlLT5iUFdCaXRPbiA9IEZBTFNFOworICAgIHBEZXZpY2UtPmJQV0JpdE9uID0gZmFsc2U7CiAKICAgICBwTGFzdFREID0gcEhlYWRURDsKICAgICBmb3IgKGlpID0gMDsgaWkgPCB1TUFDZnJhZ051bTsgaWkrKykgewpAQCAtMjYzMSwxMSArMjYzNCwxMSBAQAogLy8jZW5kaWYKIAogewotICAgIEJZVEUgIFByb3RvY29sX1ZlcnNpb247ICAgIC8vODAyLjF4IEF1dGhlbnRpY2F0aW9uCi0gICAgQllURSAgUGFja2V0X1R5cGU7ICAgICAgICAgICAvLzgwMi4xeCBBdXRoZW50aWNhdGlvbgotICAgIEJZVEUgIERlc2NyaXB0b3JfdHlwZTsKLSAgICBXT1JEIEtleV9pbmZvOwotQk9PTCAgICAgICAgICAgIGJUeGVhcG9sX2tleSA9IEZBTFNFOworICAgIHVuc2lnbmVkIGNoYXIgUHJvdG9jb2xfVmVyc2lvbjsgICAgLy84MDIuMXggQXV0aGVudGljYXRpb24KKyAgICB1bnNpZ25lZCBjaGFyIFBhY2tldF9UeXBlOyAgICAgICAgICAgLy84MDIuMXggQXV0aGVudGljYXRpb24KKyAgICB1bnNpZ25lZCBjaGFyIERlc2NyaXB0b3JfdHlwZTsKKyAgICB1bnNpZ25lZCBzaG9ydCBLZXlfaW5mbzsKK2Jvb2wgYlR4ZWFwb2xfa2V5ID0gZmFsc2U7CiAgICAgUHJvdG9jb2xfVmVyc2lvbiA9IHNrYi0+ZGF0YVtFVEhfSExFTl07CiAgICAgUGFja2V0X1R5cGUgPSBza2ItPmRhdGFbRVRIX0hMRU4rMV07CiAgICAgRGVzY3JpcHRvcl90eXBlID0gc2tiLT5kYXRhW0VUSF9ITEVOKzErMSsyXTsKQEAgLTI2NDMsMTEgKzI2NDYsMTEgQEAKICAgIGlmIChwRGV2aWNlLT5zVHhFdGhIZWFkZXIud1R5cGUgPT0gVFlQRV9QS1RfODAyXzF4KSB7CiAgICAgICAgICAgIGlmKCgoUHJvdG9jb2xfVmVyc2lvbj09MSkgfHwoUHJvdG9jb2xfVmVyc2lvbj09MikpICYmCiAJICAgICAgICAoUGFja2V0X1R5cGU9PTMpKSB7ICAvLzgwMi4xeCBPUiBlYXBvbC1rZXkgY2hhbGxlbmdlIGZyYW1lIHRyYW5zZmVyCi0gICAgICAgICAgICAgICAgICAgICAgICBiVHhlYXBvbF9rZXkgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgICAgYlR4ZWFwb2xfa2V5ID0gdHJ1ZTsKIAkJaWYoKERlc2NyaXB0b3JfdHlwZT09MjU0KXx8KERlc2NyaXB0b3JfdHlwZT09MikpIHsgICAgICAgLy9XUEEgb3IgUlNOCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEoS2V5X2luZm8gJiBCSVQzKSAmJiAgIC8vZ3JvdXAta2V5IGNoYWxsZW5nZQogCQkJICAgKEtleV9pbmZvICYgQklUOCkgJiYgKEtleV9pbmZvICYgQklUOSkpIHsgICAgLy9zZW5kIDIvMiBrZXkKLQkJCSAgcERldmljZS0+ZldQQV9BdXRoZW5lZCA9IFRSVUU7CisJCQkgIHBEZXZpY2UtPmZXUEFfQXV0aGVuZWQgPSB0cnVlOwogCQkJICBpZihEZXNjcmlwdG9yX3R5cGU9PTI1NCkKIAkJCSAgICAgIHByaW50aygiV1BBICIpOwogCQkJICBlbHNlCkBAIC0yNjc0LDEzICsyNjc3LDEzIEBACiAgICAgUFNEZXZpY2UgICAgIHBEZXZpY2U9KFBTRGV2aWNlKSBuZXRkZXZfcHJpdihkZXYpOwogCiAgICAgaW50ICAgICAgICAgICAgIG1heF9jb3VudD0wOwotICAgIERXT1JEICAgICAgICAgICBkd01JQkNvdW50ZXI9MDsKKyAgICB1bnNpZ25lZCBsb25nIGR3TUlCQ291bnRlcj0wOwogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwotICAgIEJZVEUgICAgICAgICAgICBieU9yZ1BhZ2VTZWw9MDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5T3JnUGFnZVNlbD0wOwogICAgIGludCAgICAgICAgICAgICBoYW5kbGVkID0gMDsKLSAgICBCWVRFICAgICAgICAgICAgYnlEYXRhID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RGF0YSA9IDA7CiAgICAgaW50ICAgICAgICAgICAgIGlpPSAwOwotLy8gICAgQllURSAgICAgICAgICAgIGJ5UlNTSTsKKy8vICAgIHVuc2lnbmVkIGNoYXIgYnlSU1NJOwogCiAKICAgICBNQUN2UmVhZElTUihwRGV2aWNlLT5Qb3J0T2Zmc2V0LCAmcERldmljZS0+ZHdJc3IpOwpAQCAtMjY5Nyw3ICsyNzAwLDcgQEAKIAogICAgIAlpZiAoKHBEZXZpY2UtPmR3SXNyICYgSVNSX1JYRE1BMCkgJiYKICAgICAgICAgKHBEZXZpY2UtPmJ5TG9jYWxJRCAhPSBSRVZfSURfVlQzMjUzX0IwKSAmJgotICAgICAgICAocERldmljZS0+YkJTU0lERmlsdGVyID09IFRSVUUpKSB7CisgICAgICAgIChwRGV2aWNlLT5iQlNTSURGaWx0ZXIgPT0gdHJ1ZSkpIHsKICAgICAgICAgLy8gdXBkYXRlIFJTU0kKICAgICAgICAgLy9CQmJSZWFkRW1iZWRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCAweDNFLCAmYnlSU1NJKTsKICAgICAgICAgLy9wRGV2aWNlLT51Q3VyclJTU0kgPSBieVJTU0k7CkBAIC0yNzQ2LDkgKzI3NDksOSBAQAogICAgICAgICAgICAgICAgIFZOU3ZJblBvcnREKHBEZXZpY2UtPlBvcnRPZmZzZXQgKyBNQUNfUkVHX01BUjQsICYocERldmljZS0+ZHdPcmdNQVI0KSk7CiAgICAgICAgICAgICAgICAgTUFDdlNlbGVjdFBhZ2UwKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwogICAgICAgICAgICAgICAgLy94eHh4Ci0gICAgICAgICAgICAgICAvLyBXQ01EYkZsdXNoQ29tbWFuZFF1ZXVlKHBEZXZpY2UtPnBNZ210LCBUUlVFKTsKLSAgICAgICAgICAgICAgICBpZiAoQ0FSRGJTZXRDaGFubmVsKHBEZXZpY2UsIHBEZXZpY2UtPnBDdXJyTWVhc3VyZUVJRC0+c1JlcS5ieUNoYW5uZWwpID09IFRSVUUpIHsKLSAgICAgICAgICAgICAgICAgICAgcERldmljZS0+Yk1lYXN1cmVJblByb2dyZXNzID0gVFJVRTsKKyAgICAgICAgICAgICAgIC8vIFdDTURiRmx1c2hDb21tYW5kUXVldWUocERldmljZS0+cE1nbXQsIHRydWUpOworICAgICAgICAgICAgICAgIGlmIChzZXRfY2hhbm5lbChwRGV2aWNlLCBwRGV2aWNlLT5wQ3Vyck1lYXN1cmVFSUQtPnNSZXEuYnlDaGFubmVsKSA9PSB0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJNZWFzdXJlSW5Qcm9ncmVzcyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIE1BQ3ZTZWxlY3RQYWdlMShwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKICAgICAgICAgICAgICAgICAgICAgTUFDdlJlZ0JpdHNPbihwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBNQUNfUkVHX01TUkNUTCwgTVNSQ1RMX1JFQURZKTsKICAgICAgICAgICAgICAgICAgICAgTUFDdlNlbGVjdFBhZ2UwKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwpAQCAtMjc3MCw3ICsyNzczLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5kd0lzciAmIElTUl9NRUFTVVJFRU5EKSB7CiAgICAgICAgICAgICAgICAgLy8gODAyLjExaCBtZWFzdXJlIGVuZAotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJNZWFzdXJlSW5Qcm9ncmVzcyA9IEZBTFNFOworICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJNZWFzdXJlSW5Qcm9ncmVzcyA9IGZhbHNlOwogICAgICAgICAgICAgICAgIFZOU3ZPdXRQb3J0QihwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19SQ1IsIHBEZXZpY2UtPmJ5T3JnUkNSKTsKICAgICAgICAgICAgICAgICBNQUN2U2VsZWN0UGFnZTEocERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgICAgICAgICAgICAgVk5Tdk91dFBvcnREKHBEZXZpY2UtPlBvcnRPZmZzZXQgKyBNQUNfUkVHX01BUjAsIHBEZXZpY2UtPmR3T3JnTUFSMCk7CkBAIC0yNzgyLDcgKzI3ODUsNyBAQAogICAgICAgICAgICAgICAgIC8vIGNsZWFyIG1lYXN1cmUgY29udHJvbAogICAgICAgICAgICAgICAgIE1BQ3ZSZWdCaXRzT2ZmKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfTVNSQ1RMLCBNU1JDVExfRU4pOwogICAgICAgICAgICAgICAgIE1BQ3ZTZWxlY3RQYWdlMChwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBDQVJEYlNldENoYW5uZWwocERldmljZSwgcERldmljZS0+YnlPcmdDaGFubmVsKTsKKyAgICAgICAgICAgICAgICBzZXRfY2hhbm5lbChwRGV2aWNlLCBwRGV2aWNlLT5ieU9yZ0NoYW5uZWwpOwogICAgICAgICAgICAgICAgIC8vIFdDTURiUmVzZXRDb21tYW5kUXVldWUocERldmljZS0+cE1nbXQpOwogICAgICAgICAgICAgICAgIE1BQ3ZTZWxlY3RQYWdlMShwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKICAgICAgICAgICAgICAgICBNQUN2UmVnQml0c09uKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfTVNSQ1RMKzEsIE1TUkNUTDFfVFhQQVVTRSk7CkBAIC0yNzk4LDI2ICsyODAxLDI2IEBACiAgICAgICAgICAgICBpZiAocERldmljZS0+ZHdJc3IgJiBJU1JfUVVJRVRTVEFSVCkgewogICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgOwotICAgICAgICAgICAgICAgIH0gd2hpbGUgKENBUkRiU3RhcnRRdWlldChwRGV2aWNlKSA9PSBGQUxTRSk7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAoQ0FSRGJTdGFydFF1aWV0KHBEZXZpY2UpID09IGZhbHNlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmIChwRGV2aWNlLT5kd0lzciAmIElTUl9UQlRUKSB7Ci0gICAgICAgICAgICBpZiAocERldmljZS0+YkVuYWJsZUZpcnN0UXVpZXQgPT0gVFJVRSkgeworICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJFbmFibGVGaXJzdFF1aWV0ID09IHRydWUpIHsKICAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieVF1aWV0U3RhcnRDb3VudC0tOwogICAgICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5ieVF1aWV0U3RhcnRDb3VudCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJFbmFibGVGaXJzdFF1aWV0ID0gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJFbmFibGVGaXJzdFF1aWV0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIE1BQ3ZTZWxlY3RQYWdlMShwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKICAgICAgICAgICAgICAgICAgICAgTUFDdlJlZ0JpdHNPbihwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBNQUNfUkVHX01TUkNUTCwgKE1TUkNUTF9RVUlFVFRYQ0hLIHwgTVNSQ1RMX1FVSUVURU4pKTsKICAgICAgICAgICAgICAgICAgICAgTUFDdlNlbGVjdFBhZ2UwKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgocERldmljZS0+YkNoYW5uZWxTd2l0Y2ggPT0gVFJVRSkgJiYKKyAgICAgICAgICAgIGlmICgocERldmljZS0+YkNoYW5uZWxTd2l0Y2ggPT0gdHJ1ZSkgJiYKICAgICAgICAgICAgICAgICAocERldmljZS0+ZU9QTW9kZSA9PSBPUF9NT0RFX0lORlJBU1RSVUNUVVJFKSkgewogICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5Q2hhbm5lbFN3aXRjaENvdW50LS07CiAgICAgICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJ5Q2hhbm5lbFN3aXRjaENvdW50ID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YkNoYW5uZWxTd2l0Y2ggPSBGQUxTRTsKLSAgICAgICAgICAgICAgICAgICAgQ0FSRGJTZXRDaGFubmVsKHBEZXZpY2UsIHBEZXZpY2UtPmJ5TmV3Q2hhbm5lbCk7CisgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJDaGFubmVsU3dpdGNoID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHNldF9jaGFubmVsKHBEZXZpY2UsIHBEZXZpY2UtPmJ5TmV3Q2hhbm5lbCk7CiAgICAgICAgICAgICAgICAgICAgIFZOVFdJRkliQ2hhbm5lbFN3aXRjaChwRGV2aWNlLT5wTWdtdCwgcERldmljZS0+YnlOZXdDaGFubmVsKTsKICAgICAgICAgICAgICAgICAgICAgTUFDdlNlbGVjdFBhZ2UxKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwogICAgICAgICAgICAgICAgICAgICBNQUN2UmVnQml0c09uKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfTVNSQ1RMKzEsIE1TUkNUTDFfVFhQQVVTRSk7CkBAIC0yODI3LDEyICsyODMwLDEyIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmVPUE1vZGUgPT0gT1BfTU9ERV9BREhPQykgewotICAgICAgICAgICAgICAgIC8vcERldmljZS0+YkJlYWNvblNlbnQgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICAvL3BEZXZpY2UtPmJCZWFjb25TZW50ID0gZmFsc2U7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICgocERldmljZS0+YlVwZGF0ZUJCVkdBKSAmJiAocERldmljZS0+YkxpbmtQYXNzID09IFRSVUUpICYmIChwRGV2aWNlLT51Q3VyclJTU0kgIT0gMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgTE9ORyAgICAgICAgICAgIGxkQm07CisgICAgICAgICAgICAgICAgaWYgKChwRGV2aWNlLT5iVXBkYXRlQkJWR0EpICYmIChwRGV2aWNlLT5iTGlua1Bhc3MgPT0gdHJ1ZSkgJiYgKHBEZXZpY2UtPnVDdXJyUlNTSSAhPSAwKSkgeworICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgICAgICAgbGRCbTsKIAotICAgICAgICAgICAgICAgICAgICBSRnZSU1NJVG9kQm0ocERldmljZSwgKEJZVEUpIHBEZXZpY2UtPnVDdXJyUlNTSSwgJmxkQm0pOworICAgICAgICAgICAgICAgICAgICBSRnZSU1NJVG9kQm0ocERldmljZSwgKHVuc2lnbmVkIGNoYXIpIHBEZXZpY2UtPnVDdXJyUlNTSSwgJmxkQm0pOwogICAgICAgICAgICAgICAgICAgICBmb3IgKGlpPTA7aWk8QkJfVkdBX0xFVkVMO2lpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZEJtIDwgcERldmljZS0+bGRCbVRocmVzaG9sZFtpaV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUJCVkdBTmV3ID0gcERldmljZS0+YWJ5QkJWR0FbaWldOwpAQCAtMjg1OCw3ICsyODYxLDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHBEZXZpY2UtPmJCZWFjb25TZW50ID0gRkFMU0U7CisgICAgICAgICAgICBwRGV2aWNlLT5iQmVhY29uU2VudCA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJFbmFibGVQU01vZGUpIHsKICAgICAgICAgICAgICAgICBQU2JJc05leHRUQlRUV2FrZVVwKCh2b2lkICopcERldmljZSk7CiAgICAgICAgICAgICB9OwpAQCAtMjg3OSwzMSArMjg4MiwzMSBAQAogICAgICAgICBpZiAocERldmljZS0+ZHdJc3IgJiBJU1JfQk5UWCkgewogCiAgICAgICAgICAgICBpZiAocERldmljZS0+ZU9QTW9kZSA9PSBPUF9NT0RFX0FESE9DKSB7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YklzQmVhY29uQnVmUmVhZHlTZXQgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5iSXNCZWFjb25CdWZSZWFkeVNldCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHBEZXZpY2UtPmNiQmVhY29uQnVmUmVhZHlTZXRDbnQgPSAwOwogICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmVPUE1vZGUgPT0gT1BfTU9ERV9BUCkgewogICAgICAgICAgICAgICAgIGlmKHBNZ210LT5ieURUSU1Db3VudCA+IDApIHsKICAgICAgICAgICAgICAgICAgICBwTWdtdC0+YnlEVElNQ291bnQgLS07Ci0gICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iUnhQU1BvbGwgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJSeFBTUG9sbCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgaWYocE1nbXQtPmJ5RFRJTUNvdW50ID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIG11dGx0Y2FzdCB0eCBidWZmZXJyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICBwTWdtdC0+YnlEVElNQ291bnQgPSBwTWdtdC0+YnlEVElNUGVyaW9kIC0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYlJ4UFNQb2xsID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYlJ4UFNQb2xsID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJTY2hlZHVsZUNvbW1hbmQoKHZvaWQgKilwRGV2aWNlLCBXTEFOX0NNRF9SWF9QU1BPTEwsIE5VTEwpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgcERldmljZS0+YkJlYWNvblNlbnQgPSBUUlVFOworICAgICAgICAgICAgcERldmljZS0+YkJlYWNvblNlbnQgPSB0cnVlOwogCi0gICAgICAgICAgICBpZiAocERldmljZS0+YkNoYW5uZWxTd2l0Y2ggPT0gVFJVRSkgeworICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJDaGFubmVsU3dpdGNoID09IHRydWUpIHsKICAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUNoYW5uZWxTd2l0Y2hDb3VudC0tOwogICAgICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5ieUNoYW5uZWxTd2l0Y2hDb3VudCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJDaGFubmVsU3dpdGNoID0gRkFMU0U7Ci0gICAgICAgICAgICAgICAgICAgIENBUkRiU2V0Q2hhbm5lbChwRGV2aWNlLCBwRGV2aWNlLT5ieU5ld0NoYW5uZWwpOworICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5iQ2hhbm5lbFN3aXRjaCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBzZXRfY2hhbm5lbChwRGV2aWNlLCBwRGV2aWNlLT5ieU5ld0NoYW5uZWwpOwogICAgICAgICAgICAgICAgICAgICBWTlRXSUZJYkNoYW5uZWxTd2l0Y2gocERldmljZS0+cE1nbXQsIHBEZXZpY2UtPmJ5TmV3Q2hhbm5lbCk7CiAgICAgICAgICAgICAgICAgICAgIE1BQ3ZTZWxlY3RQYWdlMShwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKICAgICAgICAgICAgICAgICAgICAgTUFDdlJlZ0JpdHNPbihwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBNQUNfUkVHX01TUkNUTCsxLCBNU1JDVEwxX1RYUEFVU0UpOwpAQCAtMjk3OCw5ICsyOTgxLDEwIEBACiB9CiAKIC8vMjAwOC04LTQgPGFkZD4gYnkgY2hlc3Rlcgotc3RhdGljIGludCBDb25maWdfRmlsZUdldFBhcmFtZXRlcihVQ0hBUiAqc3RyaW5nLCBVQ0hBUiAqZGVzdCxVQ0hBUiAqc291cmNlKQorc3RhdGljIGludCBDb25maWdfRmlsZUdldFBhcmFtZXRlcih1bnNpZ25lZCBjaGFyICpzdHJpbmcsCisJCXVuc2lnbmVkIGNoYXIgKmRlc3QsIHVuc2lnbmVkIGNoYXIgKnNvdXJjZSkKIHsKLSAgVUNIQVIgYnVmMVsxMDBdOworICB1bnNpZ25lZCBjaGFyIGJ1ZjFbMTAwXTsKICAgaW50IHNvdXJjZV9sZW4gPSBzdHJsZW4oc291cmNlKTsKIAogICAgIG1lbXNldChidWYxLDAsMTAwKTsKQEAgLTI5ODksMTMgKzI5OTMsMTMgQEAKICAgICBzb3VyY2UrPXN0cmxlbihidWYxKTsKIAogICAgbWVtY3B5KGRlc3Qsc291cmNlLHNvdXJjZV9sZW4tc3RybGVuKGJ1ZjEpKTsKLSByZXR1cm4gVFJVRTsKKyByZXR1cm4gdHJ1ZTsKIH0KIAotaW50IENvbmZpZ19GaWxlT3BlcmF0aW9uKFBTRGV2aWNlIHBEZXZpY2UsQk9PTCBmd3JpdGUsdW5zaWduZWQgY2hhciAqUGFyYW1ldGVyKSB7Ci0gICAgVUNIQVIgICAgKmNvbmZpZ19wYXRoPUNPTkZJR19QQVRIOwotICAgIFVDSEFSICAgICpidWZmZXI9TlVMTDsKLSAgICBVQ0hBUiAgICAgIHRtcGJ1ZmZlclsyMF07CitpbnQgQ29uZmlnX0ZpbGVPcGVyYXRpb24oUFNEZXZpY2UgcERldmljZSxib29sIGZ3cml0ZSx1bnNpZ25lZCBjaGFyICpQYXJhbWV0ZXIpIHsKKyAgICB1bnNpZ25lZCBjaGFyICpjb25maWdfcGF0aCA9IENPTkZJR19QQVRIOworICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciB0bXBidWZmZXJbMjBdOwogICAgIHN0cnVjdCBmaWxlICAgKmZpbHA9TlVMTDsKICAgICBtbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7CiAgICAgLy9pbnQgb2xkZnN1aWQ9MCxvbGRmc2dpZD0wOwpAQCAtMzAzOCw3ICszMDQyLDcgQEAKICBnb3RvIGVycm9yMTsKIH0KIAotaWYoQ29uZmlnX0ZpbGVHZXRQYXJhbWV0ZXIoIlpPTkVUWVBFIix0bXBidWZmZXIsYnVmZmVyKSE9VFJVRSkgeworaWYoQ29uZmlnX0ZpbGVHZXRQYXJhbWV0ZXIoIlpPTkVUWVBFIix0bXBidWZmZXIsYnVmZmVyKSE9dHJ1ZSkgewogICBwcmludGsoImdldCBwYXJhbWV0ZXIgZXJyb3I/XG4iKTsKICAgcmVzdWx0ID0gLTE7CiAgIGdvdG8gZXJyb3IxOwpAQCAtMzU1NSwxOSArMzU1OSwxOSBAQAogICAgICAgIGVsc2UgewogICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJDb21taXQgdGhlIHNldHRpbmdzXG4iKTsKICAgICAgICAgICAgc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci0gICAgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IEZBTFNFOworICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBmYWxzZTsKICAgICAgICAgICAgbWVtc2V0KHBNZ210LT5hYnlDdXJyQlNTSUQsIDAsIDYpOwogICAgICAgICAgICBwTWdtdC0+ZUN1cnJTdGF0ZSA9IFdNQUNfU1RBVEVfSURMRTsKICAgICAgICAgICAgbmV0aWZfc3RvcF9xdWV1ZShwRGV2aWNlLT5kZXYpOwogCSNpZmRlZiBXUEFfU1VQUExJQ0FOVF9EUklWRVJfV0VYVF9TVVBQT1JUCiAJICAgICAgcE1nbXQtPmVTY2FuVHlwZSA9IFdNQUNfU0NBTl9BQ1RJVkU7Ci0JIGlmKHBEZXZpY2UtPmJXUEFTdXBwV2V4dEVuYWJsZWQgIT1UUlVFKQorCSBpZihwRGV2aWNlLT5iV1BBU3VwcFdleHRFbmFibGVkICE9dHJ1ZSkKIAkgI2VuZGlmCiAgICAgICAgICAgIGJTY2hlZHVsZUNvbW1hbmQoKHZvaWQgKikgcERldmljZSwgV0xBTl9DTURfQlNTSURfU0NBTiwgcE1nbXQtPmFieURlc2lyZVNTSUQpOwogICAgICAgICAgICBiU2NoZWR1bGVDb21tYW5kKCh2b2lkICopIHBEZXZpY2UsIFdMQU5fQ01EX1NTSUQsIE5VTEwpOwogICAgICAgICAgICBzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogICAgICAgfQotICAgICAgcERldmljZS0+YkNvbW1pdCA9IEZBTFNFOworICAgICAgcERldmljZS0+YkNvbW1pdCA9IGZhbHNlOwogICAgIH0KIAogICAgIHJldHVybiByYzsKQEAgLTM1OTgsMjAgKzM2MDIsMjAgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZGV2aWNlX2lkX3RhYmxlKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB2dDY2NTVfcGNpX2lkX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRldmljZV9kcml2ZXIgPSB7CiAgICAgICAgIG5hbWU6ICAgICAgIERFVklDRV9OQU1FLAotICAgICAgICBpZF90YWJsZTogICBkZXZpY2VfaWRfdGFibGUsCi0gICAgICAgIHByb2JlOiAgICAgIGRldmljZV9mb3VuZDEsCi0gICAgICAgIHJlbW92ZTogICAgIGRldmljZV9yZW1vdmUxLAorICAgICAgICBpZF90YWJsZTogICB2dDY2NTVfcGNpX2lkX3RhYmxlLAorICAgICAgICBwcm9iZTogICAgICB2dDY2NTVfcHJvYmUsCisgICAgICAgIHJlbW92ZTogICAgIHZ0NjY1NV9yZW1vdmUsCiAjaWZkZWYgQ09ORklHX1BNCiAgICAgICAgIHN1c3BlbmQ6ICAgIHZpYXdnZXRfc3VzcGVuZCwKICAgICAgICAgcmVzdW1lOiAgICAgdmlhd2dldF9yZXN1bWUsCiAjZW5kaWYKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGRldmljZV9pbml0X21vZHVsZSh2b2lkKQorc3RhdGljIGludCBfX2luaXQgdnQ2NjU1X2luaXRfbW9kdWxlKHZvaWQpCiB7CiAgICAgaW50IHJldDsKIApAQCAtMzYyNyw3ICszNjMxLDcgQEAKICAgICByZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgZGV2aWNlX2NsZWFudXBfbW9kdWxlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgdnQ2NjU1X2NsZWFudXBfbW9kdWxlKHZvaWQpCiB7CiAKIApAQCAtMzYzOCw4ICszNjQyLDggQEAKIAogfQogCi1tb2R1bGVfaW5pdChkZXZpY2VfaW5pdF9tb2R1bGUpOwotbW9kdWxlX2V4aXQoZGV2aWNlX2NsZWFudXBfbW9kdWxlKTsKK21vZHVsZV9pbml0KHZ0NjY1NV9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdCh2dDY2NTVfY2xlYW51cF9tb2R1bGUpOwogCiAKICNpZmRlZiBDT05GSUdfUE0KQEAgLTM2NTEsNyArMzY1NSw3IEBACiAgICAgY2FzZSBTWVNfRE9XTjoKICAgICBjYXNlIFNZU19IQUxUOgogICAgIGNhc2UgU1lTX1BPV0VSX09GRjoKLSAgICAgICAgd2hpbGUgKChwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGRldikpICE9IE5VTEwpIHsKKwlmb3JfZWFjaF9wY2lfZGV2KHBkZXYpIHsKICAgICAgICAgICAgIGlmKHBjaV9kZXZfZHJpdmVyKHBkZXYpID09ICZkZXZpY2VfZHJpdmVyKSB7CiAgICAgICAgICAgICAgICAgaWYgKHBjaV9nZXRfZHJ2ZGF0YShwZGV2KSkKICAgICAgICAgICAgICAgICAgICAgdmlhd2dldF9zdXNwZW5kKHBkZXYsIFBNU0dfSElCRVJOQVRFKTsKQEAgLTM2NzcsMTAgKzM2ODEsMTAgQEAKICAgICBwRGV2aWNlLT5jYkZyZWVDbWRRdWV1ZSA9IENNRF9RX1NJWkU7CiAgICAgcERldmljZS0+dUNtZERlcXVldWVJZHggPSAwOwogICAgIHBEZXZpY2UtPnVDbWRFbnF1ZXVlSWR4ID0gMDsKLSAgICBwRGV2aWNlLT5iQ21kUnVubmluZyA9IEZBTFNFOworICAgIHBEZXZpY2UtPmJDbWRSdW5uaW5nID0gZmFsc2U7CiAgICAgTUFDYlNodXRkb3duKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwogICAgIE1BQ3ZTYXZlQ29udGV4dChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBwRGV2aWNlLT5hYnlNYWNDb250ZXh0KTsKLSAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBGQUxTRTsKKyAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBmYWxzZTsKICAgICBtZW1zZXQocE1nbXQtPmFieUN1cnJCU1NJRCwgMCwgNik7CiAgICAgcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX0lETEU7CiAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKHBjaWQpOwpAQCAtMzcwNCw5ICszNzA4LDkgQEAKICAgICAgICAgc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAgICAgICAgIE1BQ3ZSZXN0b3JlQ29udGV4dChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBwRGV2aWNlLT5hYnlNYWNDb250ZXh0KTsKICAgICAgICAgZGV2aWNlX2luaXRfcmVnaXN0ZXJzKHBEZXZpY2UsIERFVklDRV9JTklUX0RYUEwpOwotICAgICAgICBpZiAocE1nbXQtPnNOb2RlREJUYWJsZVswXS5iQWN0aXZlID09IFRSVUUpIHsgLy8gQXNzb2Mgd2l0aCBCU1MKLSAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYkFjdGl2ZSA9IEZBTFNFOwotICAgICAgICAgICAgcERldmljZS0+YkxpbmtQYXNzID0gRkFMU0U7CisgICAgICAgIGlmIChwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJBY3RpdmUgPT0gdHJ1ZSkgeyAvLyBBc3NvYyB3aXRoIEJTUworICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iQWN0aXZlID0gZmFsc2U7CisgICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBmYWxzZTsKICAgICAgICAgICAgIGlmKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0lCU1NfU1RBKSB7CiAgICAgICAgICAgICAgICAgLy8gSW4gQWRob2MsIEJTUyBzdGF0ZSBzZXQgYmFjayB0byBzdGFydGVkLgogICAgICAgICAgICAgICAgIHBNZ210LT5lQ3VyclN0YXRlID0gV01BQ19TVEFURV9TVEFSVEVEOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kcGMuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZHBjLmMKaW5kZXggNmI3NThhOC4uMTUxMzA3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kcGMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RwYy5jCkBAIC02Niw3ICs2Niw3IEBACiAvL3N0YXRpYyBpbnQgICAgICAgICAgbXNnbGV2ZWwgICAgICAgICAgICAgICAgPU1TR19MRVZFTF9ERUJVRzsKIHN0YXRpYyBpbnQgICAgICAgICAgbXNnbGV2ZWwgICAgICAgICAgICAgICAgPU1TR19MRVZFTF9JTkZPOwogCi1jb25zdCBCWVRFIGFjYnlSeFJhdGVbTUFYX1JBVEVdID0KK2NvbnN0IHVuc2lnbmVkIGNoYXIgYWNieVJ4UmF0ZVtNQVhfUkFURV0gPQogezIsIDQsIDExLCAyMiwgMTIsIDE4LCAyNCwgMzYsIDQ4LCA3MiwgOTYsIDEwOH07CiAKIApAQCAtNzYsNzAgKzc2LDYwIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBCWVRFIHNfYnlHZXRSYXRlSWR4KEJZVEUgYnlSYXRlKTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHNfYnlHZXRSYXRlSWR4KHVuc2lnbmVkIGNoYXIgYnlSYXRlKTsKIAogCi1zdGF0aWMKLXZvaWQKLXNfdkdldERBU0EoCi0gICAgUEJZVEUgcGJ5UnhCdWZmZXJBZGRyLAotICAgIFBVSU5UIHBjYkhlYWRlclNpemUsCi0gICAgUFNFdGhlcm5ldEhlYWRlciBwc0V0aEhlYWRlcgotICAgICk7CitzdGF0aWMgdm9pZAorc192R2V0REFTQSh1bnNpZ25lZCBjaGFyICpwYnlSeEJ1ZmZlckFkZHIsIHVuc2lnbmVkIGludCAqcGNiSGVhZGVyU2l6ZSwKKwkJUFNFdGhlcm5ldEhlYWRlciBwc0V0aEhlYWRlcik7CiAKLXN0YXRpYwotdm9pZAotc192UHJvY2Vzc1J4TUFDSGVhZGVyICgKK3N0YXRpYyB2b2lkCitzX3ZQcm9jZXNzUnhNQUNIZWFkZXIoUFNEZXZpY2UgcERldmljZSwgdW5zaWduZWQgY2hhciAqcGJ5UnhCdWZmZXJBZGRyLAorCQl1bnNpZ25lZCBpbnQgY2JQYWNrZXRTaXplLCBib29sIGJJc1dFUCwgYm9vbCBiRXh0SVYsCisJCXVuc2lnbmVkIGludCAqcGNiSGVhZFNpemUpOworCitzdGF0aWMgYm9vbCBzX2JBUE1vZGVSeEN0bCgKICAgICBQU0RldmljZSBwRGV2aWNlLAotICAgIFBCWVRFIHBieVJ4QnVmZmVyQWRkciwKLSAgICBVSU5UIGNiUGFja2V0U2l6ZSwKLSAgICBCT09MIGJJc1dFUCwKLSAgICBCT09MIGJFeHRJViwKLSAgICBQVUlOVCBwY2JIZWFkU2l6ZQotICAgICk7Ci0KLXN0YXRpYyBCT09MIHNfYkFQTW9kZVJ4Q3RsKAotICAgIFBTRGV2aWNlIHBEZXZpY2UsCi0gICAgUEJZVEUgICAgcGJ5RnJhbWUsCi0gICAgSU5UICAgICAgaVNBTm9kZUluZGV4CisgICAgdW5zaWduZWQgY2hhciAqcGJ5RnJhbWUsCisgICAgaW50ICAgICAgaVNBTm9kZUluZGV4CiAgICAgKTsKIAogCiAKLXN0YXRpYyBCT09MIHNfYkFQTW9kZVJ4RGF0YSAoCitzdGF0aWMgYm9vbCBzX2JBUE1vZGVSeERhdGEgKAogICAgIFBTRGV2aWNlIHBEZXZpY2UsCiAgICAgc3RydWN0IHNrX2J1ZmYqIHNrYiwKLSAgICBVSU5UICAgICBGcmFtZVNpemUsCi0gICAgVUlOVCAgICAgY2JIZWFkZXJPZmZzZXQsCi0gICAgSU5UICAgICAgaVNBTm9kZUluZGV4LAotICAgIElOVCAgICAgIGlEQU5vZGVJbmRleAorICAgIHVuc2lnbmVkIGludCBGcmFtZVNpemUsCisgICAgdW5zaWduZWQgaW50IGNiSGVhZGVyT2Zmc2V0LAorICAgIGludCAgICAgIGlTQU5vZGVJbmRleCwKKyAgICBpbnQgICAgICBpREFOb2RlSW5kZXgKICAgICApOwogCiAKLXN0YXRpYyBCT09MIHNfYkhhbmRsZVJ4RW5jcnlwdGlvbigKK3N0YXRpYyBib29sIHNfYkhhbmRsZVJ4RW5jcnlwdGlvbigKICAgICBQU0RldmljZSAgICAgcERldmljZSwKLSAgICBQQllURSAgICAgICAgcGJ5RnJhbWUsCi0gICAgVUlOVCAgICAgICAgIEZyYW1lU2l6ZSwKLSAgICBQQllURSAgICAgICAgcGJ5UnNyLAotICAgIFBCWVRFICAgICAgIHBieU5ld1JzciwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlGcmFtZSwKKyAgICB1bnNpZ25lZCBpbnQgRnJhbWVTaXplLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieVJzciwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlOZXdSc3IsCiAgICAgUFNLZXlJdGVtICAgKnBLZXlPdXQsCi0gICAgaW50ICogICAgICAgcGJFeHRJViwKLSAgICBQV09SRCAgICAgICBwd1J4VFNDMTVfMCwKLSAgICBQRFdPUkQgICAgICBwZHdSeFRTQzQ3XzE2CisgICAgYm9vbCAqcGJFeHRJViwKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdSeFRTQzE1XzAsCisgICAgdW5zaWduZWQgbG9uZyAqcGR3UnhUU0M0N18xNgogICAgICk7CiAKLXN0YXRpYyBCT09MIHNfYkhvc3RXZXBSeEVuY3J5cHRpb24oCitzdGF0aWMgYm9vbCBzX2JIb3N0V2VwUnhFbmNyeXB0aW9uKAogCiAgICAgUFNEZXZpY2UgICAgIHBEZXZpY2UsCi0gICAgUEJZVEUgICAgICAgIHBieUZyYW1lLAotICAgIFVJTlQgICAgICAgICBGcmFtZVNpemUsCi0gICAgUEJZVEUgICAgICAgIHBieVJzciwKLSAgICBCT09MICAgICAgICAgYk9uRmx5LAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUZyYW1lLAorICAgIHVuc2lnbmVkIGludCBGcmFtZVNpemUsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5UnNyLAorICAgIGJvb2wgYk9uRmx5LAogICAgIFBTS2V5SXRlbSAgICBwS2V5LAotICAgIFBCWVRFICAgICAgIHBieU5ld1JzciwKLSAgICBpbnQgKiAgICAgICBwYkV4dElWLAotICAgIFBXT1JEICAgICAgIHB3UnhUU0MxNV8wLAotICAgIFBEV09SRCAgICAgIHBkd1J4VFNDNDdfMTYKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlOZXdSc3IsCisgICAgYm9vbCAqcGJFeHRJViwKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdSeFRTQzE1XzAsCisgICAgdW5zaWduZWQgbG9uZyAqcGR3UnhUU0M0N18xNgogCiAgICAgKTsKIApAQCAtMTYyLDI3ICsxNTIsMjEgQEAKICAqIFJldHVybiBWYWx1ZTogTm9uZQogICoKIC0qLwotc3RhdGljCi12b2lkCi1zX3ZQcm9jZXNzUnhNQUNIZWFkZXIgKAotICAgIFBTRGV2aWNlIHBEZXZpY2UsCi0gICAgUEJZVEUgcGJ5UnhCdWZmZXJBZGRyLAotICAgIFVJTlQgY2JQYWNrZXRTaXplLAotICAgIEJPT0wgYklzV0VQLAotICAgIEJPT0wgYkV4dElWLAotICAgIFBVSU5UIHBjYkhlYWRTaXplCi0gICAgKQorc3RhdGljIHZvaWQKK3NfdlByb2Nlc3NSeE1BQ0hlYWRlcihQU0RldmljZSBwRGV2aWNlLCB1bnNpZ25lZCBjaGFyICpwYnlSeEJ1ZmZlckFkZHIsCisJCXVuc2lnbmVkIGludCBjYlBhY2tldFNpemUsIGJvb2wgYklzV0VQLCBib29sIGJFeHRJViwKKwkJdW5zaWduZWQgaW50ICpwY2JIZWFkU2l6ZSkKIHsKLSAgICBQQllURSAgICAgICAgICAgcGJ5UnhCdWZmZXI7Ci0gICAgVUlOVCAgICAgICAgICAgIGNiSGVhZGVyU2l6ZSA9IDA7Ci0gICAgUFdPUkQgICAgICAgICAgIHB3VHlwZTsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlSeEJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQgY2JIZWFkZXJTaXplID0gMDsKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdUeXBlOwogICAgIFBTODAyXzExSGVhZGVyICBwTUFDSGVhZGVyOwogICAgIGludCAgICAgICAgICAgICBpaTsKIAogCiAgICAgcE1BQ0hlYWRlciA9IChQUzgwMl8xMUhlYWRlcikgKHBieVJ4QnVmZmVyQWRkciArIGNiSGVhZGVyU2l6ZSk7CiAKLSAgICBzX3ZHZXREQVNBKChQQllURSlwTUFDSGVhZGVyLCAmY2JIZWFkZXJTaXplLCAmcERldmljZS0+c1J4RXRoSGVhZGVyKTsKKyAgICBzX3ZHZXREQVNBKCh1bnNpZ25lZCBjaGFyICopcE1BQ0hlYWRlciwgJmNiSGVhZGVyU2l6ZSwgJnBEZXZpY2UtPnNSeEV0aEhlYWRlcik7CiAKICAgICBpZiAoYklzV0VQKSB7CiAgICAgICAgIGlmIChiRXh0SVYpIHsKQEAgLTE5NywxOCArMTgxLDE4IEBACiAgICAgICAgIGNiSGVhZGVyU2l6ZSArPSBXTEFOX0hEUl9BRERSM19MRU47CiAgICAgfTsKIAotICAgIHBieVJ4QnVmZmVyID0gKFBCWVRFKSAocGJ5UnhCdWZmZXJBZGRyICsgY2JIZWFkZXJTaXplKTsKLSAgICBpZiAoSVNfRVRIX0FERFJFU1NfRVFVQUwocGJ5UnhCdWZmZXIsICZwRGV2aWNlLT5hYnlTTkFQX0JyaWRnZXR1bm5lbFswXSkpIHsKKyAgICBwYnlSeEJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIChwYnlSeEJ1ZmZlckFkZHIgKyBjYkhlYWRlclNpemUpOworICAgIGlmICghY29tcGFyZV9ldGhlcl9hZGRyKHBieVJ4QnVmZmVyLCAmcERldmljZS0+YWJ5U05BUF9CcmlkZ2V0dW5uZWxbMF0pKSB7CiAgICAgICAgIGNiSGVhZGVyU2l6ZSArPSA2OwogICAgIH0KLSAgICBlbHNlIGlmIChJU19FVEhfQUREUkVTU19FUVVBTChwYnlSeEJ1ZmZlciwgJnBEZXZpY2UtPmFieVNOQVBfUkZDMTA0MlswXSkpIHsKKyAgICBlbHNlIGlmICghY29tcGFyZV9ldGhlcl9hZGRyKHBieVJ4QnVmZmVyLCAmcERldmljZS0+YWJ5U05BUF9SRkMxMDQyWzBdKSkgewogICAgICAgICBjYkhlYWRlclNpemUgKz0gNjsKLSAgICAgICAgcHdUeXBlID0gKFBXT1JEKSAocGJ5UnhCdWZmZXJBZGRyICsgY2JIZWFkZXJTaXplKTsKKyAgICAgICAgcHdUeXBlID0gKHVuc2lnbmVkIHNob3J0ICopIChwYnlSeEJ1ZmZlckFkZHIgKyBjYkhlYWRlclNpemUpOwogICAgICAgICBpZiAoKCpwd1R5cGUhPSBUWVBFX1BLVF9JUFgpICYmICgqcHdUeXBlICE9IGNwdV90b19sZTE2KDB4RjM4MCkpKSB7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBjYkhlYWRlclNpemUgLT0gODsKLSAgICAgICAgICAgIHB3VHlwZSA9IChQV09SRCkgKHBieVJ4QnVmZmVyQWRkciArIGNiSGVhZGVyU2l6ZSk7CisgICAgICAgICAgICBwd1R5cGUgPSAodW5zaWduZWQgc2hvcnQgKikgKHBieVJ4QnVmZmVyQWRkciArIGNiSGVhZGVyU2l6ZSk7CiAgICAgICAgICAgICBpZiAoYklzV0VQKSB7CiAgICAgICAgICAgICAgICAgaWYgKGJFeHRJVikgewogICAgICAgICAgICAgICAgICAgICAqcHdUeXBlID0gaHRvbnMoY2JQYWNrZXRTaXplIC0gV0xBTl9IRFJfQUREUjNfTEVOIC0gOCk7ICAgIC8vIDggaXMgSVYmRXh0SVYKQEAgLTIyMyw3ICsyMDcsNyBAQAogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgY2JIZWFkZXJTaXplIC09IDI7Ci0gICAgICAgIHB3VHlwZSA9IChQV09SRCkgKHBieVJ4QnVmZmVyQWRkciArIGNiSGVhZGVyU2l6ZSk7CisgICAgICAgIHB3VHlwZSA9ICh1bnNpZ25lZCBzaG9ydCAqKSAocGJ5UnhCdWZmZXJBZGRyICsgY2JIZWFkZXJTaXplKTsKICAgICAgICAgaWYgKGJJc1dFUCkgewogICAgICAgICAgICAgaWYgKGJFeHRJVikgewogICAgICAgICAgICAgICAgICpwd1R5cGUgPSBodG9ucyhjYlBhY2tldFNpemUgLSBXTEFOX0hEUl9BRERSM19MRU4gLSA4KTsgICAgLy8gOCBpcyBJViZFeHRJVgpAQCAtMjM3LDcgKzIyMSw3IEBACiAgICAgfQogCiAgICAgY2JIZWFkZXJTaXplIC09IChFVEhfQUxFTiAqIDIpOwotICAgIHBieVJ4QnVmZmVyID0gKFBCWVRFKSAocGJ5UnhCdWZmZXJBZGRyICsgY2JIZWFkZXJTaXplKTsKKyAgICBwYnlSeEJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIChwYnlSeEJ1ZmZlckFkZHIgKyBjYkhlYWRlclNpemUpOwogICAgIGZvcihpaT0wO2lpPEVUSF9BTEVOO2lpKyspCiAgICAgICAgICpwYnlSeEJ1ZmZlcisrID0gcERldmljZS0+c1J4RXRoSGVhZGVyLmFieURzdEFkZHJbaWldOwogICAgIGZvcihpaT0wO2lpPEVUSF9BTEVOO2lpKyspCkBAIC0yNDksOSArMjMzLDkgQEAKIAogCiAKLXN0YXRpYyBCWVRFIHNfYnlHZXRSYXRlSWR4IChCWVRFIGJ5UmF0ZSkKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHNfYnlHZXRSYXRlSWR4ICh1bnNpZ25lZCBjaGFyIGJ5UmF0ZSkKIHsKLSAgICBCWVRFICAgIGJ5UmF0ZUlkeDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UmF0ZUlkeDsKIAogICAgIGZvciAoYnlSYXRlSWR4ID0gMDsgYnlSYXRlSWR4IDxNQVhfUkFURSA7IGJ5UmF0ZUlkeCsrKSB7CiAgICAgICAgIGlmIChhY2J5UnhSYXRlW2J5UmF0ZUlkeCVNQVhfUkFURV0gPT0gYnlSYXRlKQpAQCAtMjYxLDE1ICsyNDUsMTEgQEAKIH0KIAogCi1zdGF0aWMKLXZvaWQKLXNfdkdldERBU0EgKAotICAgIFBCWVRFIHBieVJ4QnVmZmVyQWRkciwKLSAgICBQVUlOVCBwY2JIZWFkZXJTaXplLAotICAgIFBTRXRoZXJuZXRIZWFkZXIgcHNFdGhIZWFkZXIKLSAgICApCitzdGF0aWMgdm9pZAorc192R2V0REFTQSh1bnNpZ25lZCBjaGFyICpwYnlSeEJ1ZmZlckFkZHIsIHVuc2lnbmVkIGludCAqcGNiSGVhZGVyU2l6ZSwKKwlQU0V0aGVybmV0SGVhZGVyIHBzRXRoSGVhZGVyKQogewotICAgIFVJTlQgICAgICAgICAgICBjYkhlYWRlclNpemUgPSAwOworICAgIHVuc2lnbmVkIGludCBjYkhlYWRlclNpemUgPSAwOwogICAgIFBTODAyXzExSGVhZGVyICBwTUFDSGVhZGVyOwogICAgIGludCAgICAgICAgICAgICBpaTsKIApAQCAtMzMzLDcgKzMxMyw3IEBACiAKIAogCi1CT09MCitib29sCiBkZXZpY2VfcmVjZWl2ZV9mcmFtZSAoCiAgICAgUFNEZXZpY2UgcERldmljZSwKICAgICBQU1J4RGVzYyBwQ3VyclJECkBAIC0zNDksMzYgKzMyOSwzNiBAQAogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwogICAgIFBTUnhNZ210UGFja2V0ICBwUnhQYWNrZXQgPSAmKHBEZXZpY2UtPnBNZ210LT5zUnhQYWNrZXQpOwogICAgIFBTODAyXzExSGVhZGVyICBwODAyXzExSGVhZGVyOwotICAgIFBCWVRFICAgICAgICAgICBwYnlSc3I7Ci0gICAgUEJZVEUgICAgICAgICAgIHBieU5ld1JzcjsKLSAgICBQQllURSAgICAgICAgICAgcGJ5UlNTSTsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlSc3I7CisgICAgdW5zaWduZWQgY2hhciAqcGJ5TmV3UnNyOworICAgIHVuc2lnbmVkIGNoYXIgKnBieVJTU0k7CiAgICAgUFFXT1JEICAgICAgICAgIHBxd1RTRlRpbWU7Ci0gICAgUFdPUkQgICAgICAgICAgIHB3RnJhbWVTaXplOwotICAgIFBCWVRFICAgICAgICAgICBwYnlGcmFtZTsKLSAgICBCT09MICAgICAgICAgICAgYkRlRnJhZ1J4ID0gRkFMU0U7Ci0gICAgQk9PTCAgICAgICAgICAgIGJJc1dFUCA9IEZBTFNFOwotICAgIFVJTlQgICAgICAgICAgICBjYkhlYWRlck9mZnNldDsKLSAgICBVSU5UICAgICAgICAgICAgRnJhbWVTaXplOwotICAgIFdPUkQgICAgICAgICAgICB3RXRoZXJUeXBlID0gMDsKLSAgICBJTlQgICAgICAgICAgICAgaVNBTm9kZUluZGV4ID0gLTE7Ci0gICAgSU5UICAgICAgICAgICAgIGlEQU5vZGVJbmRleCA9IC0xOwotICAgIFVJTlQgICAgICAgICAgICBpaTsKLSAgICBVSU5UICAgICAgICAgICAgY2JJVk9mZnNldDsKLSAgICBCT09MICAgICAgICAgICAgYkV4dElWID0gRkFMU0U7Ci0gICAgUEJZVEUgICAgICAgICAgIHBieVJ4U3RzOwotICAgIFBCWVRFICAgICAgICAgICBwYnlSeFJhdGU7Ci0gICAgUEJZVEUgICAgICAgICAgIHBieVNROwotICAgIFVJTlQgICAgICAgICAgICBjYkhlYWRlclNpemU7CisgICAgdW5zaWduZWQgc2hvcnQgKnB3RnJhbWVTaXplOworICAgIHVuc2lnbmVkIGNoYXIgKnBieUZyYW1lOworICAgIGJvb2wgYkRlRnJhZ1J4ID0gZmFsc2U7CisgICAgYm9vbCBiSXNXRVAgPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBpbnQgY2JIZWFkZXJPZmZzZXQ7CisgICAgdW5zaWduZWQgaW50IEZyYW1lU2l6ZTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RXRoZXJUeXBlID0gMDsKKyAgICBpbnQgICAgICAgICAgICAgaVNBTm9kZUluZGV4ID0gLTE7CisgICAgaW50ICAgICAgICAgICAgIGlEQU5vZGVJbmRleCA9IC0xOworICAgIHVuc2lnbmVkIGludCBpaTsKKyAgICB1bnNpZ25lZCBpbnQgY2JJVk9mZnNldDsKKyAgICBib29sIGJFeHRJViA9IGZhbHNlOworICAgIHVuc2lnbmVkIGNoYXIgKnBieVJ4U3RzOworICAgIHVuc2lnbmVkIGNoYXIgKnBieVJ4UmF0ZTsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlTUTsKKyAgICB1bnNpZ25lZCBpbnQgY2JIZWFkZXJTaXplOwogICAgIFBTS2V5SXRlbSAgICAgICBwS2V5ID0gTlVMTDsKLSAgICBXT1JEICAgICAgICAgICAgd1J4VFNDMTVfMCA9IDA7Ci0gICAgRFdPUkQgICAgICAgICAgIGR3UnhUU0M0N18xNiA9IDA7CisgICAgdW5zaWduZWQgc2hvcnQgd1J4VFNDMTVfMCA9IDA7CisgICAgdW5zaWduZWQgbG9uZyBkd1J4VFNDNDdfMTYgPSAwOwogICAgIFNLZXlJdGVtICAgICAgICBTVGVtcEtleTsKICAgICAvLyA4MDIuMTFoIFJQSQotICAgIERXT1JEICAgICAgICAgICBkd0R1cmF0aW9uID0gMDsKLSAgICBMT05HICAgICAgICAgICAgbGRCbSA9IDA7Ci0gICAgTE9ORyAgICAgICAgICAgIGxkQm1UaHJlc2hvbGQgPSAwOworICAgIHVuc2lnbmVkIGxvbmcgZHdEdXJhdGlvbiA9IDA7CisgICAgbG9uZyAgICAgICAgICAgIGxkQm0gPSAwOworICAgIGxvbmcgICAgICAgICAgICBsZEJtVGhyZXNob2xkID0gMDsKICAgICBQUzgwMl8xMUhlYWRlciBwTUFDSGVhZGVyOwotIEJPT0wgICAgICAgICAgICBiUnhlYXBvbF9rZXkgPSBGQUxTRTsKKyBib29sIGJSeGVhcG9sX2tleSA9IGZhbHNlOwogCiAvLyAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIi0tLS0tLS0tLS0gZGV2aWNlX3JlY2VpdmVfZnJhbWUtLS1cbiIpOwogCkBAIC0zOTEsNyArMzcxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPnJ4X2J1Zl9zeiwgUENJX0RNQV9GUk9NREVWSUNFKTsKICNlbmRpZgogLy9QTElDRV9ERUJVRzwtCi0gICAgcHdGcmFtZVNpemUgPSAoUFdPUkQpKHNrYi0+ZGF0YSArIDIpOworICAgIHB3RnJhbWVTaXplID0gKHVuc2lnbmVkIHNob3J0ICopKHNrYi0+ZGF0YSArIDIpOwogICAgIEZyYW1lU2l6ZSA9IGNwdV90b19sZTE2KHBDdXJyUkQtPm1fcmQxUkQxLndSZXFDb3VudCkgLSBjcHVfdG9fbGUxNihwQ3VyclJELT5tX3JkMFJEMC53UmVzQ291bnQpOwogCiAgICAgLy8gTWF4OiAyMzEyUGF5bG9hZCArIDMwSEQgKzRDUkMgKyAyUGFkZGluZyArIDRMZW4gKyA4VFNGICsgNFJTUgpAQCAtMzk5LDE3ICszNzksMTcgQEAKICAgICBpZiAoKEZyYW1lU2l6ZSA+IDIzNjQpfHwoRnJhbWVTaXplIDw9IDMyKSkgewogICAgICAgICAvLyBGcmFtZSBTaXplIGVycm9yIGRyb3AgdGhpcyBwYWNrZXQuCiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iLS0tLS0tLS0tLSBXUk9ORyBMZW5ndGggMSBcbiIpOwotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBwYnlSeFN0cyA9IChQQllURSkgKHNrYi0+ZGF0YSk7Ci0gICAgcGJ5UnhSYXRlID0gKFBCWVRFKSAoc2tiLT5kYXRhICsgMSk7Ci0gICAgcGJ5UnNyID0gKFBCWVRFKSAoc2tiLT5kYXRhICsgRnJhbWVTaXplIC0gMSk7Ci0gICAgcGJ5UlNTSSA9IChQQllURSkgKHNrYi0+ZGF0YSArIEZyYW1lU2l6ZSAtIDIpOwotICAgIHBieU5ld1JzciA9IChQQllURSkgKHNrYi0+ZGF0YSArIEZyYW1lU2l6ZSAtIDMpOwotICAgIHBieVNRID0gKFBCWVRFKSAoc2tiLT5kYXRhICsgRnJhbWVTaXplIC0gNCk7CisgICAgcGJ5UnhTdHMgPSAodW5zaWduZWQgY2hhciAqKSAoc2tiLT5kYXRhKTsKKyAgICBwYnlSeFJhdGUgPSAodW5zaWduZWQgY2hhciAqKSAoc2tiLT5kYXRhICsgMSk7CisgICAgcGJ5UnNyID0gKHVuc2lnbmVkIGNoYXIgKikgKHNrYi0+ZGF0YSArIEZyYW1lU2l6ZSAtIDEpOworICAgIHBieVJTU0kgPSAodW5zaWduZWQgY2hhciAqKSAoc2tiLT5kYXRhICsgRnJhbWVTaXplIC0gMik7CisgICAgcGJ5TmV3UnNyID0gKHVuc2lnbmVkIGNoYXIgKikgKHNrYi0+ZGF0YSArIEZyYW1lU2l6ZSAtIDMpOworICAgIHBieVNRID0gKHVuc2lnbmVkIGNoYXIgKikgKHNrYi0+ZGF0YSArIEZyYW1lU2l6ZSAtIDQpOwogICAgIHBxd1RTRlRpbWUgPSAoUFFXT1JEKSAoc2tiLT5kYXRhICsgRnJhbWVTaXplIC0gMTIpOwotICAgIHBieUZyYW1lID0gKFBCWVRFKShza2ItPmRhdGEgKyA0KTsKKyAgICBwYnlGcmFtZSA9ICh1bnNpZ25lZCBjaGFyICopKHNrYi0+ZGF0YSArIDQpOwogCiAgICAgLy8gZ2V0IHBhY2tldCBzaXplCiAgICAgRnJhbWVTaXplID0gY3B1X3RvX2xlMTYoKnB3RnJhbWVTaXplKTsKQEAgLTQxNyw3ICszOTcsNyBAQAogICAgIGlmICgoRnJhbWVTaXplID4gMjM0Nil8KEZyYW1lU2l6ZSA8IDE0KSkgeyAvLyBNYXg6IDIzMTJQYXlsb2FkICsgMzBIRCArNENSQwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNaW46IDE0IGJ5dGVzIEFDSwogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIi0tLS0tLS0tLS0gV1JPTkcgTGVuZ3RoIDIgXG4iKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogLy9QTElDRV9ERUJVRy0+CiAjaWYgMQpAQCAtNDMxLDkgKzQxMSw5IEBACiAKICNlbmRpZgogCi0gIHBNQUNIZWFkZXI9KFBTODAyXzExSGVhZGVyKSgoUEJZVEUpIChza2ItPmRhdGEpKzgpOworICBwTUFDSGVhZGVyPShQUzgwMl8xMUhlYWRlcikoKHVuc2lnbmVkIGNoYXIgKikgKHNrYi0+ZGF0YSkrOCk7CiAvL1BMSUNFX0RFQlVHPC0KLQlpZiAocERldmljZS0+Yk1lYXN1cmVJblByb2dyZXNzID09IFRSVUUpIHsKKwlpZiAocERldmljZS0+Yk1lYXN1cmVJblByb2dyZXNzID09IHRydWUpIHsKICAgICAgICAgaWYgKCgqcGJ5UnNyICYgUlNSX0NSQ09LKSAhPSAwKSB7CiAgICAgICAgICAgICBwRGV2aWNlLT5ieUJhc2ljTWFwIHw9IDB4MDE7CiAgICAgICAgIH0KQEAgLTQ2MCwxMyArNDQwLDEzIEBACiAgICAgICAgICAgICBpaS0tOwogICAgICAgICB9CiAgICAgICAgIHBEZXZpY2UtPmR3UlBJc1tpaV0gKz0gZHdEdXJhdGlvbjsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKCFJU19NVUxUSUNBU1RfQUREUkVTUyhwYnlGcmFtZSkgJiYgIUlTX0JST0FEQ0FTVF9BRERSRVNTKHBieUZyYW1lKSkgeworICAgIGlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIocGJ5RnJhbWUpKSB7CiAgICAgICAgIGlmIChXQ1RMYklzRHVwbGljYXRlKCYocERldmljZS0+c0R1cFJ4Q2FjaGUpLCAoUFM4MDJfMTFIZWFkZXIpIChza2ItPmRhdGEgKyA0KSkpIHsKICAgICAgICAgICAgIHBEZXZpY2UtPnM4MDJfMTFDb3VudGVyLkZyYW1lRHVwbGljYXRlQ291bnQrKzsKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDc1LDE0ICs0NTUsMTQgQEAKICAgICBzX3ZHZXREQVNBKHNrYi0+ZGF0YSs0LCAmY2JIZWFkZXJTaXplLCAmcERldmljZS0+c1J4RXRoSGVhZGVyKTsKIAogICAgIC8vIGZpbHRlciBwYWNrZXQgc2VuZCBmcm9tIG15c2VsZgotICAgIGlmIChJU19FVEhfQUREUkVTU19FUVVBTCgoUEJZVEUpJihwRGV2aWNlLT5zUnhFdGhIZWFkZXIuYWJ5U3JjQWRkclswXSksIHBEZXZpY2UtPmFieUN1cnJlbnROZXRBZGRyKSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIGlmICghY29tcGFyZV9ldGhlcl9hZGRyKCh1bnNpZ25lZCBjaGFyICopJihwRGV2aWNlLT5zUnhFdGhIZWFkZXIuYWJ5U3JjQWRkclswXSksIHBEZXZpY2UtPmFieUN1cnJlbnROZXRBZGRyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKChwTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9FU1NfQVApIHx8IChwTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9JQlNTX1NUQSkpIHsKICAgICAgICAgaWYgKElTX0NUTF9QU1BPTEwocGJ5RnJhbWUpIHx8ICFJU19UWVBFX0NPTlRST0wocGJ5RnJhbWUpKSB7CiAgICAgICAgICAgICBwODAyXzExSGVhZGVyID0gKFBTODAyXzExSGVhZGVyKSAocGJ5RnJhbWUpOwogICAgICAgICAgICAgLy8gZ2V0IFNBIE5vZGVJbmRleAotICAgICAgICAgICAgaWYgKEJTU0RCYklzU1RBSW5Ob2RlREIocE1nbXQsIChQQllURSkocDgwMl8xMUhlYWRlci0+YWJ5QWRkcjIpLCAmaVNBTm9kZUluZGV4KSkgeworICAgICAgICAgICAgaWYgKEJTU0RCYklzU1RBSW5Ob2RlREIocE1nbXQsICh1bnNpZ25lZCBjaGFyICopKHA4MDJfMTFIZWFkZXItPmFieUFkZHIyKSwgJmlTQU5vZGVJbmRleCkpIHsKICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW2lTQU5vZGVJbmRleF0udWxMYXN0UnhKaWZmZXIgPSBqaWZmaWVzOwogICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaVNBTm9kZUluZGV4XS51SW5BY3RpdmVDb3VudCA9IDA7CiAgICAgICAgICAgICB9CkBAIC00OTAsMTcgKzQ3MCwxNyBAQAogICAgIH0KIAogICAgIGlmIChwTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9FU1NfQVApIHsKLSAgICAgICAgaWYgKHNfYkFQTW9kZVJ4Q3RsKHBEZXZpY2UsIHBieUZyYW1lLCBpU0FOb2RlSW5kZXgpID09IFRSVUUpIHsKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgaWYgKHNfYkFQTW9kZVJ4Q3RsKHBEZXZpY2UsIHBieUZyYW1lLCBpU0FOb2RlSW5kZXgpID09IHRydWUpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAogCiAgICAgaWYgKElTX0ZDX1dFUChwYnlGcmFtZSkpIHsKLSAgICAgICAgQk9PTCAgICAgYlJ4RGVjcnlPSyA9IEZBTFNFOworICAgICAgICBib29sIGJSeERlY3J5T0sgPSBmYWxzZTsKIAogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPInJ4IFdFUCBwa3RcbiIpOwotICAgICAgICBiSXNXRVAgPSBUUlVFOworICAgICAgICBiSXNXRVAgPSB0cnVlOwogICAgICAgICBpZiAoKHBEZXZpY2UtPmJFbmFibGVIb3N0V0VQKSAmJiAoaVNBTm9kZUluZGV4ID49IDApKSB7CiAgICAgICAgICAgICBwS2V5ID0gJlNUZW1wS2V5OwogICAgICAgICAgICAgcEtleS0+YnlDaXBoZXJTdWl0ZSA9IHBNZ210LT5zTm9kZURCVGFibGVbaVNBTm9kZUluZGV4XS5ieUNpcGhlclN1aXRlOwpAQCAtNTUyLDExICs1MzIsMTEgQEAKIC8vICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPnM4MDJfMTFDb3VudGVyLldFUElDVkVycm9yQ291bnQuUXVhZFBhcnQrKzsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJXRVAgRnVuYyBGYWlsXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBpZiAoKHBLZXkgIT0gTlVMTCkgJiYgKHBLZXktPmJ5Q2lwaGVyU3VpdGUgPT0gS0VZX0NUTF9DQ01QKSkKICAgICAgICAgICAgIEZyYW1lU2l6ZSAtPSA4OyAgICAgICAgIC8vIE1lc3NhZ2UgSW50ZWdyaXR5IENvZGUKQEAgLTU4NCwxOCArNTY0LDE4IEBACiAKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAogCiAvLyBNYW5hZ2VtZW50ICYgQ29udHJvbCBmcmFtZSBIYW5kbGUKLSAgICBpZiAoKElTX1RZUEVfREFUQSgoc2tiLT5kYXRhKzQpKSkgPT0gRkFMU0UpIHsKKyAgICBpZiAoKElTX1RZUEVfREFUQSgoc2tiLT5kYXRhKzQpKSkgPT0gZmFsc2UpIHsKICAgICAgICAgLy8gSGFuZGxlIENvbnRyb2wgJiBNYW5hZ2UgRnJhbWUKIAogICAgICAgICBpZiAoSVNfVFlQRV9NR01UKChza2ItPmRhdGErNCkpKSB7Ci0gICAgICAgICAgICBQQllURSBwYnlEYXRhMTsKLSAgICAgICAgICAgIFBCWVRFIHBieURhdGEyOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcGJ5RGF0YTE7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwYnlEYXRhMjsKIAogICAgICAgICAgICAgcFJ4UGFja2V0LT5wODAyMTFIZWFkZXIgPSAoUFVXTEFOXzgwMjExSERSKShza2ItPmRhdGErNCk7CiAgICAgICAgICAgICBwUnhQYWNrZXQtPmNiTVBEVUxlbiA9IEZyYW1lU2l6ZTsKQEAgLTY0OSwxMyArNjI5LDEzIEBACiAgICAgCSAgICAgICAgc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QXzgwMl8yKTsKIAkgICAgICAgICAgICBtZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHNrYi0+Y2IpKTsKIAkgICAgICAgICAgICBuZXRpZl9yeChza2IpOwotICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCSAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8gQ29udHJvbCBGcmFtZQogICAgICAgICB9OwotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChwTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9FU1NfQVApIHsKQEAgLTY2NywxMiArNjQ3LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5kZXYtPm5hbWUpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBkaXNjYXJkIERBVEEgcGFja2V0IHdoaWxlIG5vdCBhc3NvY2lhdGUgfHwgQlNTSUQgZXJyb3IKLSAgICAgICAgICAgIGlmICgocERldmljZS0+YkxpbmtQYXNzID09IEZBTFNFKSB8fAorICAgICAgICAgICAgaWYgKChwRGV2aWNlLT5iTGlua1Bhc3MgPT0gZmFsc2UpIHx8CiAgICAgICAgICAgICAgICAgISgqcGJ5UnNyICYgUlNSX0JTU0lET0spKSB7CiAgICAgICAgICAgICAgICAgaWYgKGJEZUZyYWdSeCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIWRldmljZV9hbGxvY19mcmFnX2J1ZihwRGV2aWNlLCAmcERldmljZS0+c1J4REZDQltwRGV2aWNlLT51Q3VycmVudERGQ0JJZHhdKSkgewpAQCAtNjgwLDEyICs2NjAsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmRldi0+bmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgIC8vbWlrZSBhZGQ6c3RhdGlvbiBtb2RlIGNoZWNrIGVhcG9sLWtleSBjaGFsbGVuZ2UtLS0+CiAgICAJICB7Ci0gICAJICAgIEJZVEUgIFByb3RvY29sX1ZlcnNpb247ICAgIC8vODAyLjF4IEF1dGhlbnRpY2F0aW9uCi0JICAgIEJZVEUgIFBhY2tldF9UeXBlOyAgICAgICAgICAgLy84MDIuMXggQXV0aGVudGljYXRpb24KKyAgIAkgICAgdW5zaWduZWQgY2hhciBQcm90b2NvbF9WZXJzaW9uOyAgICAvLzgwMi4xeCBBdXRoZW50aWNhdGlvbgorCSAgICB1bnNpZ25lZCBjaGFyIFBhY2tldF9UeXBlOyAgICAgICAgICAgLy84MDIuMXggQXV0aGVudGljYXRpb24KICAgICAgICAgICAgICAgaWYgKGJJc1dFUCkKICAgICAgICAgICAgICAgICAgIGNiSVZPZmZzZXQgPSA4OwogICAgICAgICAgICAgICBlbHNlCkBAIC02OTcsNyArNjc3LDcgQEAKIAkgICAgIGlmICh3RXRoZXJUeXBlID09IEVUSF9QX1BBRSkgeyAgICAgICAgIC8vUHJvdG9jb2wgVHlwZSBpbiBMTEMtSGVhZGVyCiAgICAgICAgICAgICAgICAgICBpZigoKFByb3RvY29sX1ZlcnNpb249PTEpIHx8KFByb3RvY29sX1ZlcnNpb249PTIpKSAmJgogCQkgICAgIChQYWNrZXRfVHlwZT09MykpIHsgIC8vODAyLjF4IE9SIGVhcG9sLWtleSBjaGFsbGVuZ2UgZnJhbWUgcmVjZWl2ZQotICAgICAgICAgICAgICAgICAgICAgICAgYlJ4ZWFwb2xfa2V5ID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJSeGVhcG9sX2tleSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICB9CiAJICAgICAgfQogICAgCSAgfQpAQCAtNzE2LDggKzY5Niw4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAocERldmljZS0+cE1nbXQtPmJJblRJTVdha2UgPT0gVFJVRSkgewotICAgICAgICAgICAgICAgIHBEZXZpY2UtPnBNZ210LT5iSW5USU1XYWtlID0gRkFMU0U7CisgICAgICAgICAgICBpZiAocERldmljZS0+cE1nbXQtPmJJblRJTVdha2UgPT0gdHJ1ZSkgeworICAgICAgICAgICAgICAgIHBEZXZpY2UtPnBNZ210LT5iSW5USU1XYWtlID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9OwpAQCAtNzI1LDcgKzcwNSw3IEBACiAgICAgLy8gTm93IGl0IG9ubHkgc3VwcG9ydHMgODAyLjExZyBJbmZyYXN0cnVjdHVyZSBNb2RlLCBhbmQgc3VwcG9ydCByYXRlIG11c3QgdXAgdG8gNTQgTWJwcwogICAgIGlmIChwRGV2aWNlLT5iRGl2ZXJzaXR5RW5hYmxlICYmIChGcmFtZVNpemU+NTApICYmCiAgICAgICAgIChwRGV2aWNlLT5lT1BNb2RlID09IE9QX01PREVfSU5GUkFTVFJVQ1RVUkUpICYmCi0gICAgICAgIChwRGV2aWNlLT5iTGlua1Bhc3MgPT0gVFJVRSkpIHsKKyAgICAgICAgKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSB0cnVlKSkgewogCS8vcHJpbnRrKCJkZXZpY2VfcmVjZWl2ZV9mcmFtZTogUnhSYXRlIGlzICVkXG4iLCpwYnlSeFJhdGUpOwogCQlCQnZBbnRlbm5hRGl2ZXJzaXR5KHBEZXZpY2UsIHNfYnlHZXRSYXRlSWR4KCpwYnlSeFJhdGUpLCAwKTsKICAgICB9CkBAIC03NTIsOCArNzMyLDggQEAKIAogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICBpZiAoKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0VTU19BUCkgJiYgKHBEZXZpY2UtPmJFbmFibGU4MDIxeCA9PSBUUlVFKSl7Ci0gICAgICAgIEJZVEUgICAgYWJ5TWFjSGRyWzI0XTsKKyAgICBpZiAoKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0VTU19BUCkgJiYgKHBEZXZpY2UtPmJFbmFibGU4MDIxeCA9PSB0cnVlKSl7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYWJ5TWFjSGRyWzI0XTsKIAogICAgICAgICAvLyBPbmx5IDgwMi4xeCBwYWNrZXQgaW5jb21pbmcgYWxsb3dlZAogICAgICAgICBpZiAoYklzV0VQKQpAQCAtNzY3LDcgKzc0Nyw3IEBACiAgICAgICAgIGlmICh3RXRoZXJUeXBlID09IEVUSF9QX1BBRSkgewogICAgICAgICAgICAgc2tiLT5kZXYgPSBwRGV2aWNlLT5hcGRldjsKIAotICAgICAgICAgICAgaWYgKGJJc1dFUCA9PSBUUlVFKSB7CisgICAgICAgICAgICBpZiAoYklzV0VQID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAvLyBzdHJpcCBJViBoZWFkZXIoOCkKICAgICAgICAgICAgICAgICBtZW1jcHkoJmFieU1hY0hkclswXSwgKHNrYi0+ZGF0YSArIDQpLCAyNCk7CiAgICAgICAgICAgICAgICAgbWVtY3B5KChza2ItPmRhdGEgKyA0ICsgY2JJVk9mZnNldCksICZhYnlNYWNIZHJbMF0sIDI0KTsKQEAgLTc4MSwxMiArNzYxLDEyIEBACiAgICAgICAgICAgICBza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyXzIpOwogICAgICAgICAgICAgbWVtc2V0KHNrYi0+Y2IsIDAsIHNpemVvZihza2ItPmNiKSk7CiAgICAgICAgICAgICBuZXRpZl9yeChza2IpOwotICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogfQogICAgICAgICAvLyBjaGVjayBpZiA4MDIuMXggYXV0aG9yaXplZAogICAgICAgICBpZiAoIShwTWdtdC0+c05vZGVEQlRhYmxlW2lTQU5vZGVJbmRleF0uZHdGbGFncyAmIFdMQU5fU1RBX0FVVEhPUklaRUQpKQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogCkBAIC04MDAsNTMgKzc4MCw1MyBAQAogICAgIC8vIFNvZnQgTUlDCiAgICAgaWYgKChwS2V5ICE9IE5VTEwpICYmIChwS2V5LT5ieUNpcGhlclN1aXRlID09IEtFWV9DVExfVEtJUCkpIHsKICAgICAgICAgaWYgKGJJc1dFUCkgewotICAgICAgICAgICAgUERXT1JEICAgICAgICAgIHBkd01JQ19MOwotICAgICAgICAgICAgUERXT1JEICAgICAgICAgIHBkd01JQ19SOwotICAgICAgICAgICAgRFdPUkQgICAgICAgICAgIGR3TUlDX1ByaW9yaXR5OwotICAgICAgICAgICAgRFdPUkQgICAgICAgICAgIGR3TUlDS2V5MCA9IDAsIGR3TUlDS2V5MSA9IDA7Ci0gICAgICAgICAgICBEV09SRCAgICAgICAgICAgZHdMb2NhbE1JQ19MID0gMDsKLSAgICAgICAgICAgIERXT1JEICAgICAgICAgICBkd0xvY2FsTUlDX1IgPSAwOworICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqcGR3TUlDX0w7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpwZHdNSUNfUjsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZHdNSUNfUHJpb3JpdHk7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGR3TUlDS2V5MCA9IDAsIGR3TUlDS2V5MSA9IDA7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGR3TG9jYWxNSUNfTCA9IDA7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGR3TG9jYWxNSUNfUiA9IDA7CiAgICAgICAgICAgICB2aWF3Z2V0X3dwYV9oZWFkZXIgKndwYWhkcjsKIAogCiAgICAgICAgICAgICBpZiAocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX0FQKSB7Ci0gICAgICAgICAgICAgICAgZHdNSUNLZXkwID0gY3B1X3RvX2xlMzIoKihQRFdPUkQpKCZwS2V5LT5hYnlLZXlbMjRdKSk7Ci0gICAgICAgICAgICAgICAgZHdNSUNLZXkxID0gY3B1X3RvX2xlMzIoKihQRFdPUkQpKCZwS2V5LT5hYnlLZXlbMjhdKSk7CisgICAgICAgICAgICAgICAgZHdNSUNLZXkwID0gY3B1X3RvX2xlMzIoKih1bnNpZ25lZCBsb25nICopKCZwS2V5LT5hYnlLZXlbMjRdKSk7CisgICAgICAgICAgICAgICAgZHdNSUNLZXkxID0gY3B1X3RvX2xlMzIoKih1bnNpZ25lZCBsb25nICopKCZwS2V5LT5hYnlLZXlbMjhdKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAocERldmljZS0+cE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9XUEFOT05FKSB7Ci0gICAgICAgICAgICAgICAgICAgIGR3TUlDS2V5MCA9IGNwdV90b19sZTMyKCooUERXT1JEKSgmcEtleS0+YWJ5S2V5WzE2XSkpOwotICAgICAgICAgICAgICAgICAgICBkd01JQ0tleTEgPSBjcHVfdG9fbGUzMigqKFBEV09SRCkoJnBLZXktPmFieUtleVsyMF0pKTsKKyAgICAgICAgICAgICAgICAgICAgZHdNSUNLZXkwID0gY3B1X3RvX2xlMzIoKih1bnNpZ25lZCBsb25nICopKCZwS2V5LT5hYnlLZXlbMTZdKSk7CisgICAgICAgICAgICAgICAgICAgIGR3TUlDS2V5MSA9IGNwdV90b19sZTMyKCoodW5zaWduZWQgbG9uZyAqKSgmcEtleS0+YWJ5S2V5WzIwXSkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHBLZXktPmR3S2V5SW5kZXggJiBCSVQyOCkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBkd01JQ0tleTAgPSBjcHVfdG9fbGUzMigqKFBEV09SRCkoJnBLZXktPmFieUtleVsxNl0pKTsKLSAgICAgICAgICAgICAgICAgICAgZHdNSUNLZXkxID0gY3B1X3RvX2xlMzIoKihQRFdPUkQpKCZwS2V5LT5hYnlLZXlbMjBdKSk7CisgICAgICAgICAgICAgICAgICAgIGR3TUlDS2V5MCA9IGNwdV90b19sZTMyKCoodW5zaWduZWQgbG9uZyAqKSgmcEtleS0+YWJ5S2V5WzE2XSkpOworICAgICAgICAgICAgICAgICAgICBkd01JQ0tleTEgPSBjcHVfdG9fbGUzMigqKHVuc2lnbmVkIGxvbmcgKikoJnBLZXktPmFieUtleVsyMF0pKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBkd01JQ0tleTAgPSBjcHVfdG9fbGUzMigqKFBEV09SRCkoJnBLZXktPmFieUtleVsyNF0pKTsKLSAgICAgICAgICAgICAgICAgICAgZHdNSUNLZXkxID0gY3B1X3RvX2xlMzIoKihQRFdPUkQpKCZwS2V5LT5hYnlLZXlbMjhdKSk7CisgICAgICAgICAgICAgICAgICAgIGR3TUlDS2V5MCA9IGNwdV90b19sZTMyKCoodW5zaWduZWQgbG9uZyAqKSgmcEtleS0+YWJ5S2V5WzI0XSkpOworICAgICAgICAgICAgICAgICAgICBkd01JQ0tleTEgPSBjcHVfdG9fbGUzMigqKHVuc2lnbmVkIGxvbmcgKikoJnBLZXktPmFieUtleVsyOF0pKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIE1JQ192SW5pdChkd01JQ0tleTAsIGR3TUlDS2V5MSk7Ci0gICAgICAgICAgICBNSUNfdkFwcGVuZCgoUEJZVEUpJihwRGV2aWNlLT5zUnhFdGhIZWFkZXIuYWJ5RHN0QWRkclswXSksIDEyKTsKKyAgICAgICAgICAgIE1JQ192QXBwZW5kKCh1bnNpZ25lZCBjaGFyICopJihwRGV2aWNlLT5zUnhFdGhIZWFkZXIuYWJ5RHN0QWRkclswXSksIDEyKTsKICAgICAgICAgICAgIGR3TUlDX1ByaW9yaXR5ID0gMDsKLSAgICAgICAgICAgIE1JQ192QXBwZW5kKChQQllURSkmZHdNSUNfUHJpb3JpdHksIDQpOworICAgICAgICAgICAgTUlDX3ZBcHBlbmQoKHVuc2lnbmVkIGNoYXIgKikmZHdNSUNfUHJpb3JpdHksIDQpOwogICAgICAgICAgICAgLy8gNCBpcyBSY3YgYnVmZmVyIGhlYWRlciwgMjQgaXMgTUFDIEhlYWRlciwgYW5kIDggaXMgSVYgYW5kIEV4dCBJVi4KLSAgICAgICAgICAgIE1JQ192QXBwZW5kKChQQllURSkoc2tiLT5kYXRhICsgNCArIFdMQU5fSERSX0FERFIzX0xFTiArIDgpLAorICAgICAgICAgICAgTUlDX3ZBcHBlbmQoKHVuc2lnbmVkIGNoYXIgKikoc2tiLT5kYXRhICsgNCArIFdMQU5fSERSX0FERFIzX0xFTiArIDgpLAogICAgICAgICAgICAgICAgICAgICAgICAgRnJhbWVTaXplIC0gV0xBTl9IRFJfQUREUjNfTEVOIC0gOCk7CiAgICAgICAgICAgICBNSUNfdkdldE1JQygmZHdMb2NhbE1JQ19MLCAmZHdMb2NhbE1JQ19SKTsKICAgICAgICAgICAgIE1JQ192VW5Jbml0KCk7CiAKLSAgICAgICAgICAgIHBkd01JQ19MID0gKFBEV09SRCkoc2tiLT5kYXRhICsgNCArIEZyYW1lU2l6ZSk7Ci0gICAgICAgICAgICBwZHdNSUNfUiA9IChQRFdPUkQpKHNrYi0+ZGF0YSArIDQgKyBGcmFtZVNpemUgKyA0KTsKKyAgICAgICAgICAgIHBkd01JQ19MID0gKHVuc2lnbmVkIGxvbmcgKikoc2tiLT5kYXRhICsgNCArIEZyYW1lU2l6ZSk7CisgICAgICAgICAgICBwZHdNSUNfUiA9ICh1bnNpZ25lZCBsb25nICopKHNrYi0+ZGF0YSArIDQgKyBGcmFtZVNpemUgKyA0KTsKICAgICAgICAgICAgIC8vREJHX1BSTl9HUlAxMigoIlJ4TDogJWx4LCBSeFI6ICVseFxuIiwgKnBkd01JQ19MLCAqcGR3TUlDX1IpKTsKICAgICAgICAgICAgIC8vREJHX1BSTl9HUlAxMigoIkxvY2FsTDogJWx4LCBMb2NhbFI6ICVseFxuIiwgZHdMb2NhbE1JQ19MLCBkd0xvY2FsTUlDX1IpKTsKICAgICAgICAgICAgIC8vREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJkd01JQ0tleTA9ICVseCxkd01JQ0tleTE9ICVseCBcbiIsIGR3TUlDS2V5MCwgZHdNSUNLZXkxKTsKIAogCiAgICAgICAgICAgICBpZiAoKGNwdV90b19sZTMyKCpwZHdNSUNfTCkgIT0gZHdMb2NhbE1JQ19MKSB8fCAoY3B1X3RvX2xlMzIoKnBkd01JQ19SKSAhPSBkd0xvY2FsTUlDX1IpIHx8Ci0gICAgICAgICAgICAgICAgKHBEZXZpY2UtPmJSeE1JQ0ZhaWwgPT0gVFJVRSkpIHsKKyAgICAgICAgICAgICAgICAocERldmljZS0+YlJ4TUlDRmFpbCA9PSB0cnVlKSkgewogICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iTUlDIGNvbXBhcmlzb24gaXMgZmFpbCFcbiIpOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJSeE1JQ0ZhaWwgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5iUnhNSUNGYWlsID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgLy9wRGV2aWNlLT5zODAyXzExQ291bnRlci5US0lQTG9jYWxNSUNGYWlsdXJlcy5RdWFkUGFydCsrOwogICAgICAgICAgICAgICAgIHBEZXZpY2UtPnM4MDJfMTFDb3VudGVyLlRLSVBMb2NhbE1JQ0ZhaWx1cmVzKys7CiAgICAgICAgICAgICAgICAgaWYgKGJEZUZyYWdSeCkgewpAQCAtODU4LDcgKzgzOCw3IEBACiAgICAgICAgICAgICAgICAvLzIwMDgtMDQwOS0wNywgPEFkZD4gYnkgRWluc24gTGl1CiAgICAgICAgI2lmZGVmIFdQQV9TVVBQTElDQU5UX0RSSVZFUl9XRVhUX1NVUFBPUlQKIAkJCQkvL3NlbmQgZXZlbnQgdG8gd3BhX3N1cHBsaWNhbnQKLQkJCQkvL2lmKHBEZXZpY2UtPmJXUEFEZXZFbmFibGUgPT0gVFJVRSkKKwkJCQkvL2lmKHBEZXZpY2UtPmJXUEFEZXZFbmFibGUgPT0gdHJ1ZSkKIAkJCQl7CiAJCQkJCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKIAkJCQkJc3RydWN0IGl3X21pY2hhZWxtaWNmYWlsdXJlIGV2OwpAQCAtOTA2LDcgKzg4Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5za2IgPSBkZXZfYWxsb2Nfc2tiKChpbnQpcERldmljZS0+cnhfYnVmX3N6KTsKICAgICAgICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtOTE3LDEzICs4OTcsMTMgQEAKICAgICBpZiAoKHBLZXkgIT0gTlVMTCkgJiYgKChwS2V5LT5ieUNpcGhlclN1aXRlID09IEtFWV9DVExfVEtJUCkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwS2V5LT5ieUNpcGhlclN1aXRlID09IEtFWV9DVExfQ0NNUCkpKSB7CiAgICAgICAgIGlmIChiSXNXRVApIHsKLSAgICAgICAgICAgIFdPUkQgICAgICAgIHdMb2NhbFRTQzE1XzAgPSAwOwotICAgICAgICAgICAgRFdPUkQgICAgICAgZHdMb2NhbFRTQzQ3XzE2ID0gMDsKLSAgICAgICAgICAgIFVMT05HTE9ORyAgICAgICBSU0MgPSAwOworICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgd0xvY2FsVFNDMTVfMCA9IDA7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGR3TG9jYWxUU0M0N18xNiA9IDA7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgICAgICAgUlNDID0gMDsKICAgICAgICAgICAgIC8vIGVuZGlhbiBpc3N1ZXMKLSAgICAgICAgICAgIFJTQyA9ICooKFVMT05HTE9ORyAqKSAmKHBLZXktPktleVJTQykpOwotICAgICAgICAgICAgd0xvY2FsVFNDMTVfMCA9IChXT1JEKSBSU0M7Ci0gICAgICAgICAgICBkd0xvY2FsVFNDNDdfMTYgPSAoRFdPUkQpIChSU0M+PjE2KTsKKyAgICAgICAgICAgIFJTQyA9ICooKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSAmKHBLZXktPktleVJTQykpOworICAgICAgICAgICAgd0xvY2FsVFNDMTVfMCA9ICh1bnNpZ25lZCBzaG9ydCkgUlNDOworICAgICAgICAgICAgZHdMb2NhbFRTQzQ3XzE2ID0gKHVuc2lnbmVkIGxvbmcpIChSU0M+PjE2KTsKIAogICAgICAgICAgICAgUlNDID0gZHdSeFRTQzQ3XzE2OwogICAgICAgICAgICAgUlNDIDw8PSAxNjsKQEAgLTk1MCw3ICs5MzAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5kZXYtPm5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtOTYzLDEzICs5NDMsMTMgQEAKICAgICB9CiAKIAotICAgIHNfdlByb2Nlc3NSeE1BQ0hlYWRlcihwRGV2aWNlLCAoUEJZVEUpKHNrYi0+ZGF0YSs0KSwgRnJhbWVTaXplLCBiSXNXRVAsIGJFeHRJViwgJmNiSGVhZGVyT2Zmc2V0KTsKKyAgICBzX3ZQcm9jZXNzUnhNQUNIZWFkZXIocERldmljZSwgKHVuc2lnbmVkIGNoYXIgKikoc2tiLT5kYXRhKzQpLCBGcmFtZVNpemUsIGJJc1dFUCwgYkV4dElWLCAmY2JIZWFkZXJPZmZzZXQpOwogICAgIEZyYW1lU2l6ZSAtPSBjYkhlYWRlck9mZnNldDsKICAgICBjYkhlYWRlck9mZnNldCArPSA0OyAgICAgICAgLy8gNCBpcyBSY3YgYnVmZmVyIGhlYWRlcgogCiAgICAgLy8gTnVsbCBkYXRhLCBmcmFtZXNpemUgPSAxNAogICAgIGlmIChGcmFtZVNpemUgPCAxNSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX0FQKSB7CiAgICAgICAgIGlmIChzX2JBUE1vZGVSeERhdGEocERldmljZSwKQEAgLTk3OCw3ICs5NTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNiSGVhZGVyT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlTQU5vZGVJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpREFOb2RlSW5kZXgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICApID09IEZBTFNFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA9PSBmYWxzZSkgewogCiAgICAgICAgICAgICBpZiAoYkRlRnJhZ1J4KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFkZXZpY2VfYWxsb2NfZnJhZ19idWYocERldmljZSwgJnBEZXZpY2UtPnNSeERGQ0JbcERldmljZS0+dUN1cnJlbnRERkNCSWR4XSkpIHsKQEAgLTk4NiwxMCArOTY2LDEwIEBACiAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmRldi0+bmFtZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLS8vICAgICAgICBpZihwRGV2aWNlLT5iUnhNSUNGYWlsID09IEZBTFNFKSB7CisvLyAgICAgICAgaWYocERldmljZS0+YlJ4TUlDRmFpbCA9PSBmYWxzZSkgewogLy8gICAgICAgICAgIGZvciAoaWkgPTA7IGlpIDwgMTAwOyBpaSsrKQogLy8gICAgICAgICAgICAgICAgcHJpbnRrKCIgJTAyeCIsICooc2tiLT5kYXRhICsgaWkpKTsKIC8vICAgICAgICAgICBwcmludGsoIlxuIik7CkBAIC0xMDE2LDcgKzk5Niw3IEBACiAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmRldi0+bmFtZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotCQkJcmV0dXJuIEZBTFNFOworCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJfQogKi8KQEAgLTEwMzEsMTcgKzEwMTEsMTcgQEAKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0VSUixLRVJOX0VSUiAiJXM6IGNhbiBub3QgYWxsb2MgbW9yZSBmcmFnIGJ1ZnNcbiIsCiAgICAgICAgICAgICAgICAgcERldmljZS0+ZGV2LT5uYW1lKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0aWMgQk9PTCBzX2JBUE1vZGVSeEN0bCAoCitzdGF0aWMgYm9vbCBzX2JBUE1vZGVSeEN0bCAoCiAgICAgUFNEZXZpY2UgcERldmljZSwKLSAgICBQQllURSAgICBwYnlGcmFtZSwKLSAgICBJTlQgICAgICBpU0FOb2RlSW5kZXgKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlGcmFtZSwKKyAgICBpbnQgICAgICBpU0FOb2RlSW5kZXgKICAgICApCiB7CiAgICAgUFM4MDJfMTFIZWFkZXIgICAgICBwODAyXzExSGVhZGVyOwpAQCAtMTA2MywzMCArMTA0MywzMCBAQAogICAgICAgICAgICAgICAgICAgICAvLyByZWFzb24gPSAoNikgY2xhc3MgMiByZWNlaXZlZCBmcm9tIG5vbmF1dGggc3RhCiAgICAgICAgICAgICAgICAgICAgIHZNZ3JEZUF1dGhlbkJlZ2luU3RhKHBEZXZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUEJZVEUpKHA4MDJfMTFIZWFkZXItPmFieUFkZHIyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKikocDgwMl8xMUhlYWRlci0+YWJ5QWRkcjIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV0xBTl9NR01UX1JFQVNPTl9DTEFTUzJfTk9OQVVUSCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTdGF0dXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiZHBjOiBzZW5kIHZNZ3JEZUF1dGhlbkJlZ2luU3RhIDFcbiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICBpZiAocE1nbXQtPnNOb2RlREJUYWJsZVtpU0FOb2RlSW5kZXhdLmVOb2RlU3RhdGUgPCBOT0RFX0FTU09DKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIHNlbmQgZGVhc3NvYyBub3RpZmljYXRpb24KICAgICAgICAgICAgICAgICAgICAgLy8gcmVhc29uID0gKDcpIGNsYXNzIDMgcmVjZWl2ZWQgZnJvbSBub25hc3NvYyBzdGEKICAgICAgICAgICAgICAgICAgICAgdk1nckRpc2Fzc29jQmVnaW5TdGEocERldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQQllURSkocDgwMl8xMUhlYWRlci0+YWJ5QWRkcjIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKShwODAyXzExSGVhZGVyLT5hYnlBZGRyMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXTEFOX01HTVRfUkVBU09OX0NMQVNTM19OT05BU1NPQyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTdGF0dXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiZHBjOiBzZW5kIHZNZ3JEaXNhc3NvY0JlZ2luU3RhIDJcbiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgICAgIGlmIChwTWdtdC0+c05vZGVEQlRhYmxlW2lTQU5vZGVJbmRleF0uYlBTRW5hYmxlKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIGRlbGNhcmUgcmVjZWl2ZWQgcHMtcG9sbCBldmVudAogICAgICAgICAgICAgICAgICAgICBpZiAoSVNfQ1RMX1BTUE9MTChwYnlGcmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaVNBTm9kZUluZGV4XS5iUnhQU1BvbGwgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpU0FOb2RlSW5kZXhdLmJSeFBTUG9sbCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBiU2NoZWR1bGVDb21tYW5kKCh2b2lkICopcERldmljZSwgV0xBTl9DTURfUlhfUFNQT0xMLCBOVUxMKTsKICAgICAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImRwYzogV0xBTl9DTURfUlhfUFNQT0xMIDFcbiIpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMDk0LDggKzEwNzQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgRGF0YSBQUyBzdGF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgUFcgYml0IG9mZiwgc2VuZCBvdXQgYWxsIFBTIGJ1ZmZlcnJpbmcgcGFja2V0cy4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghSVNfRkNfUE9XRVJNR1QocGJ5RnJhbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpU0FOb2RlSW5kZXhdLmJQU0VuYWJsZSA9IEZBTFNFOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaVNBTm9kZUluZGV4XS5iUnhQU1BvbGwgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaVNBTm9kZUluZGV4XS5iUFNFbmFibGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW2lTQU5vZGVJbmRleF0uYlJ4UFNQb2xsID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiU2NoZWR1bGVDb21tYW5kKCh2b2lkICopcERldmljZSwgV0xBTl9DTURfUlhfUFNQT0xMLCBOVUxMKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJkcGM6IFdMQU5fQ01EX1JYX1BTUE9MTCAyXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTExMDMsMTUgKzEwODMsMTUgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKElTX0ZDX1BPV0VSTUdUKHBieUZyYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW2lTQU5vZGVJbmRleF0uYlBTRW5hYmxlID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpU0FOb2RlSW5kZXhdLmJQU0VuYWJsZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9uY2UgaWYgU1RBIGluIFBTIHN0YXRlLCBlbmFibGUgbXVsdGljYXN0IGJ1ZmZlcnJpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iUFNFbmFibGUgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJQU0VuYWJsZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgIC8vIGNsZWFyIGFsbCBwZW5kaW5nIFBTIGZyYW1lLgogICAgICAgICAgICAgICAgICAgICAgIGlmIChwTWdtdC0+c05vZGVEQlRhYmxlW2lTQU5vZGVJbmRleF0ud0VuUXVldWVDbnQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaVNBTm9kZUluZGV4XS5iUFNFbmFibGUgPSBGQUxTRTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpU0FOb2RlSW5kZXhdLmJSeFBTUG9sbCA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaVNBTm9kZUluZGV4XS5iUFNFbmFibGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpU0FOb2RlSW5kZXhdLmJSeFBTUG9sbCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJTY2hlZHVsZUNvbW1hbmQoKHZvaWQgKilwRGV2aWNlLCBXTEFOX0NNRF9SWF9QU1BPTEwsIE5VTEwpOwogICAgICAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImRwYzogV0xBTl9DTURfUlhfUFNQT0xMIDNcbiIpOwogCkBAIC0xMTIyLDcgKzExMDIsNyBAQAogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICB2TWdyRGVBdXRoZW5CZWdpblN0YShwRGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUEJZVEUpKHA4MDJfMTFIZWFkZXItPmFieUFkZHIyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopKHA4MDJfMTFIZWFkZXItPmFieUFkZHIyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXTEFOX01HTVRfUkVBU09OX0NMQVNTMl9OT05BVVRIKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTdGF0dXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CkBAIC0xMTU0LDMxICsxMTM0LDMxIEBACiAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImRwYzogd0ZyYW1lQ3RsPSAleFxuIiwgcDgwMl8xMUhlYWRlci0+d0ZyYW1lQ3RsICk7CiAgICAgICAgICAgICAgICAgICAgIFZOU3ZJblBvcnRCKHBEZXZpY2UtPlBvcnRPZmZzZXQgKyBNQUNfUkVHX1JDUiwgJihwRGV2aWNlLT5ieVJ4TW9kZSkpOwogICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJkcGM6cERldmljZS0+YnlSeE1vZGUgPSAleFxuIiwgcERldmljZS0+YnlSeE1vZGUgKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBGQUxTRTsKKyAgICByZXR1cm4gZmFsc2U7CiAKIH0KIAotc3RhdGljIEJPT0wgc19iSGFuZGxlUnhFbmNyeXB0aW9uICgKK3N0YXRpYyBib29sIHNfYkhhbmRsZVJ4RW5jcnlwdGlvbiAoCiAgICAgUFNEZXZpY2UgICAgIHBEZXZpY2UsCi0gICAgUEJZVEUgICAgICAgIHBieUZyYW1lLAotICAgIFVJTlQgICAgICAgICBGcmFtZVNpemUsCi0gICAgUEJZVEUgICAgICAgIHBieVJzciwKLSAgICBQQllURSAgICAgICBwYnlOZXdSc3IsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5RnJhbWUsCisgICAgdW5zaWduZWQgaW50IEZyYW1lU2l6ZSwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlSc3IsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5TmV3UnNyLAogICAgIFBTS2V5SXRlbSAgICpwS2V5T3V0LAotICAgIGludCAqICAgICAgIHBiRXh0SVYsCi0gICAgUFdPUkQgICAgICAgcHdSeFRTQzE1XzAsCi0gICAgUERXT1JEICAgICAgcGR3UnhUU0M0N18xNgorICAgIGJvb2wgKnBiRXh0SVYsCisgICAgdW5zaWduZWQgc2hvcnQgKnB3UnhUU0MxNV8wLAorICAgIHVuc2lnbmVkIGxvbmcgKnBkd1J4VFNDNDdfMTYKICAgICApCiB7Ci0gICAgVUlOVCAgICAgICAgICAgIFBheWxvYWRMZW4gPSBGcmFtZVNpemU7Ci0gICAgUEJZVEUgICAgICAgICAgIHBieUlWOwotICAgIEJZVEUgICAgICAgICAgICBieUtleUlkeDsKKyAgICB1bnNpZ25lZCBpbnQgUGF5bG9hZExlbiA9IEZyYW1lU2l6ZTsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlJVjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5S2V5SWR4OwogICAgIFBTS2V5SXRlbSAgICAgICBwS2V5ID0gTlVMTDsKLSAgICBCWVRFICAgICAgICAgICAgYnlEZWNNb2RlID0gS0VZX0NUTF9XRVA7CisgICAgdW5zaWduZWQgY2hhciBieURlY01vZGUgPSBLRVlfQ1RMX1dFUDsKICAgICBQU01nbXRPYmplY3QgICAgcE1nbXQgPSBwRGV2aWNlLT5wTWdtdDsKIAogCkBAIC0xMTg2LDggKzExNjYsOCBAQAogICAgICpwZHdSeFRTQzQ3XzE2ID0gMDsKIAogICAgIHBieUlWID0gcGJ5RnJhbWUgKyBXTEFOX0hEUl9BRERSM19MRU47Ci0gICAgaWYgKCBXTEFOX0dFVF9GQ19UT0RTKCooUFdPUkQpcGJ5RnJhbWUpICYmCi0gICAgICAgICBXTEFOX0dFVF9GQ19GUk9NRFMoKihQV09SRClwYnlGcmFtZSkgKSB7CisgICAgaWYgKCBXTEFOX0dFVF9GQ19UT0RTKCoodW5zaWduZWQgc2hvcnQgKilwYnlGcmFtZSkgJiYKKyAgICAgICAgIFdMQU5fR0VUX0ZDX0ZST01EUygqKHVuc2lnbmVkIHNob3J0ICopcGJ5RnJhbWUpICkgewogICAgICAgICAgcGJ5SVYgKz0gNjsgICAgICAgICAgICAgLy8gNiBpcyA4MDIuMTEgYWRkcmVzczQKICAgICAgICAgIFBheWxvYWRMZW4gLT0gNjsKICAgICB9CkBAIC0xMjA0LDcgKzExODQsNyBAQAogICAgICAgICAgICAgKHBEZXZpY2UtPnBNZ210LT5ieUNTU1BLICE9IEtFWV9DVExfTk9ORSkpIHsKICAgICAgICAgICAgIC8vIHVuaWNhc3QgcGt0IHVzZSBwYWlyd2lzZSBrZXkKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8idW5pY2FzdCBwa3RcbiIpOwotICAgICAgICAgICAgaWYgKEtleWJHZXRLZXkoJihwRGV2aWNlLT5zS2V5KSwgcERldmljZS0+YWJ5QlNTSUQsIDB4RkZGRkZGRkYsICZwS2V5KSA9PSBUUlVFKSB7CisgICAgICAgICAgICBpZiAoS2V5YkdldEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwRGV2aWNlLT5hYnlCU1NJRCwgMHhGRkZGRkZGRiwgJnBLZXkpID09IHRydWUpIHsKICAgICAgICAgICAgICAgICBpZiAocERldmljZS0+cE1nbXQtPmJ5Q1NTUEsgPT0gS0VZX0NUTF9US0lQKQogICAgICAgICAgICAgICAgICAgICBieURlY01vZGUgPSBLRVlfQ1RMX1RLSVA7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAocERldmljZS0+cE1nbXQtPmJ5Q1NTUEsgPT0gS0VZX0NUTF9DQ01QKQpAQCAtMTIzOCwyNCArMTIxOCwyNCBAQAogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPInBLZXkgPT0gTlVMTFxuIik7CiAgICAgICAgIGlmIChieURlY01vZGUgPT0gS0VZX0NUTF9XRVApIHsKIC8vICAgICAgICAgICAgcERldmljZS0+czgwMl8xMUNvdW50ZXIuV0VQVW5kZWNyeXB0YWJsZUNvdW50LlF1YWRQYXJ0Kys7Ci0gICAgICAgIH0gZWxzZSBpZiAocERldmljZS0+YkxpbmtQYXNzID09IFRSVUUpIHsKKyAgICAgICAgfSBlbHNlIGlmIChwRGV2aWNlLT5iTGlua1Bhc3MgPT0gdHJ1ZSkgewogLy8gICAgICAgICAgICBwRGV2aWNlLT5zODAyXzExQ291bnRlci5EZWNyeXB0RmFpbHVyZUNvdW50LlF1YWRQYXJ0Kys7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmIChieURlY01vZGUgIT0gcEtleS0+YnlDaXBoZXJTdWl0ZSkgewogICAgICAgICBpZiAoYnlEZWNNb2RlID09IEtFWV9DVExfV0VQKSB7CiAvLyAgICAgICAgICAgIHBEZXZpY2UtPnM4MDJfMTFDb3VudGVyLldFUFVuZGVjcnlwdGFibGVDb3VudC5RdWFkUGFydCsrOwotICAgICAgICB9IGVsc2UgaWYgKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSBUUlVFKSB7CisgICAgICAgIH0gZWxzZSBpZiAocERldmljZS0+YkxpbmtQYXNzID09IHRydWUpIHsKIC8vICAgICAgICAgICAgcERldmljZS0+czgwMl8xMUNvdW50ZXIuRGVjcnlwdEZhaWx1cmVDb3VudC5RdWFkUGFydCsrOwogICAgICAgICB9CiAgICAgICAgICpwS2V5T3V0ID0gTlVMTDsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmIChieURlY01vZGUgPT0gS0VZX0NUTF9XRVApIHsKICAgICAgICAgLy8gaGFuZGxlIFdFUAogICAgICAgICBpZiAoKHBEZXZpY2UtPmJ5TG9jYWxJRCA8PSBSRVZfSURfVlQzMjUzX0ExKSB8fAotICAgICAgICAgICAgKCgoUFNLZXlUYWJsZSkocEtleS0+cHZLZXlUYWJsZSkpLT5iU29mdFdFUCA9PSBUUlVFKSkgeworICAgICAgICAgICAgKCgoUFNLZXlUYWJsZSkocEtleS0+cHZLZXlUYWJsZSkpLT5iU29mdFdFUCA9PSB0cnVlKSkgewogICAgICAgICAgICAgLy8gU29mdHdhcmUgV0VQCiAgICAgICAgICAgICAvLyAxLiAzMjUzQQogICAgICAgICAgICAgLy8gMi4gV0VQIDI1NgpAQCAtMTI3NSwxMiArMTI1NSwxMiBAQAogICAgICAgICAvLyBUS0lQL0FFUwogCiAgICAgICAgIFBheWxvYWRMZW4gLT0gKFdMQU5fSERSX0FERFIzX0xFTiArIDggKyA0KTsgLy8gMjQgaXMgODAyLjExIGhlYWRlciwgOCBpcyBJViZFeHRJViwgNCBpcyBjcmMKLSAgICAgICAgKnBkd1J4VFNDNDdfMTYgPSBjcHVfdG9fbGUzMigqKFBEV09SRCkocGJ5SVYgKyA0KSk7CisgICAgICAgICpwZHdSeFRTQzQ3XzE2ID0gY3B1X3RvX2xlMzIoKih1bnNpZ25lZCBsb25nICopKHBieUlWICsgNCkpOwogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIkV4dElWOiAlbHhcbiIsKnBkd1J4VFNDNDdfMTYpOwogICAgICAgICBpZiAoYnlEZWNNb2RlID09IEtFWV9DVExfVEtJUCkgewogICAgICAgICAgICAgKnB3UnhUU0MxNV8wID0gY3B1X3RvX2xlMTYoTUFLRVdPUkQoKihwYnlJVisyKSwgKnBieUlWKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAqcHdSeFRTQzE1XzAgPSBjcHVfdG9fbGUxNigqKFBXT1JEKXBieUlWKTsKKyAgICAgICAgICAgICpwd1J4VFNDMTVfMCA9IGNwdV90b19sZTE2KCoodW5zaWduZWQgc2hvcnQgKilwYnlJVik7CiAgICAgICAgIH0KICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJUU0MwXzE1OiAleFxuIiwgKnB3UnhUU0MxNV8wKTsKIApAQCAtMTMwMywyOCArMTI4MywyOCBAQAogICAgIH0vLyBlbmQgb2YgVEtJUC9BRVMKIAogICAgIGlmICgoKihwYnlJViszKSAmIDB4MjApICE9IDApCi0gICAgICAgICpwYkV4dElWID0gVFJVRTsKLSAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgKnBiRXh0SVYgPSB0cnVlOworICAgIHJldHVybiB0cnVlOwogfQogCiAKLXN0YXRpYyBCT09MIHNfYkhvc3RXZXBSeEVuY3J5cHRpb24gKAorc3RhdGljIGJvb2wgc19iSG9zdFdlcFJ4RW5jcnlwdGlvbiAoCiAgICAgUFNEZXZpY2UgICAgIHBEZXZpY2UsCi0gICAgUEJZVEUgICAgICAgIHBieUZyYW1lLAotICAgIFVJTlQgICAgICAgICBGcmFtZVNpemUsCi0gICAgUEJZVEUgICAgICAgIHBieVJzciwKLSAgICBCT09MICAgICAgICAgYk9uRmx5LAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUZyYW1lLAorICAgIHVuc2lnbmVkIGludCBGcmFtZVNpemUsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5UnNyLAorICAgIGJvb2wgYk9uRmx5LAogICAgIFBTS2V5SXRlbSAgICBwS2V5LAotICAgIFBCWVRFICAgICAgIHBieU5ld1JzciwKLSAgICBpbnQgKiAgICAgICBwYkV4dElWLAotICAgIFBXT1JEICAgICAgIHB3UnhUU0MxNV8wLAotICAgIFBEV09SRCAgICAgIHBkd1J4VFNDNDdfMTYKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlOZXdSc3IsCisgICAgYm9vbCAqcGJFeHRJViwKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdSeFRTQzE1XzAsCisgICAgdW5zaWduZWQgbG9uZyAqcGR3UnhUU0M0N18xNgogICAgICkKIHsKLSAgICBVSU5UICAgICAgICAgICAgUGF5bG9hZExlbiA9IEZyYW1lU2l6ZTsKLSAgICBQQllURSAgICAgICAgICAgcGJ5SVY7Ci0gICAgQllURSAgICAgICAgICAgIGJ5S2V5SWR4OwotICAgIEJZVEUgICAgICAgICAgICBieURlY01vZGUgPSBLRVlfQ1RMX1dFUDsKKyAgICB1bnNpZ25lZCBpbnQgUGF5bG9hZExlbiA9IEZyYW1lU2l6ZTsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlJVjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5S2V5SWR4OworICAgIHVuc2lnbmVkIGNoYXIgYnlEZWNNb2RlID0gS0VZX0NUTF9XRVA7CiAgICAgUFM4MDJfMTFIZWFkZXIgIHBNQUNIZWFkZXI7CiAKIApAQCAtMTMzMyw4ICsxMzEzLDggQEAKICAgICAqcGR3UnhUU0M0N18xNiA9IDA7CiAKICAgICBwYnlJViA9IHBieUZyYW1lICsgV0xBTl9IRFJfQUREUjNfTEVOOwotICAgIGlmICggV0xBTl9HRVRfRkNfVE9EUygqKFBXT1JEKXBieUZyYW1lKSAmJgotICAgICAgICAgV0xBTl9HRVRfRkNfRlJPTURTKCooUFdPUkQpcGJ5RnJhbWUpICkgeworICAgIGlmICggV0xBTl9HRVRfRkNfVE9EUygqKHVuc2lnbmVkIHNob3J0ICopcGJ5RnJhbWUpICYmCisgICAgICAgICBXTEFOX0dFVF9GQ19GUk9NRFMoKih1bnNpZ25lZCBzaG9ydCAqKXBieUZyYW1lKSApIHsKICAgICAgICAgIHBieUlWICs9IDY7ICAgICAgICAgICAgIC8vIDYgaXMgODAyLjExIGFkZHJlc3M0CiAgICAgICAgICBQYXlsb2FkTGVuIC09IDY7CiAgICAgfQpAQCAtMTM1MywxOCArMTMzMywxOCBAQAogICAgIGlmIChieURlY01vZGUgIT0gcEtleS0+YnlDaXBoZXJTdWl0ZSkgewogICAgICAgICBpZiAoYnlEZWNNb2RlID09IEtFWV9DVExfV0VQKSB7CiAvLyAgICAgICAgICAgIHBEZXZpY2UtPnM4MDJfMTFDb3VudGVyLldFUFVuZGVjcnlwdGFibGVDb3VudC5RdWFkUGFydCsrOwotICAgICAgICB9IGVsc2UgaWYgKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSBUUlVFKSB7CisgICAgICAgIH0gZWxzZSBpZiAocERldmljZS0+YkxpbmtQYXNzID09IHRydWUpIHsKIC8vICAgICAgICAgICAgcERldmljZS0+czgwMl8xMUNvdW50ZXIuRGVjcnlwdEZhaWx1cmVDb3VudC5RdWFkUGFydCsrOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGlmIChieURlY01vZGUgPT0gS0VZX0NUTF9XRVApIHsKICAgICAgICAgLy8gaGFuZGxlIFdFUAogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPImJ5RGVjTW9kZSA9PSBLRVlfQ1RMX1dFUCBcbiIpOwogICAgICAgICBpZiAoKHBEZXZpY2UtPmJ5TG9jYWxJRCA8PSBSRVZfSURfVlQzMjUzX0ExKSB8fAotICAgICAgICAgICAgKCgoUFNLZXlUYWJsZSkocEtleS0+cHZLZXlUYWJsZSkpLT5iU29mdFdFUCA9PSBUUlVFKSB8fAotICAgICAgICAgICAgKGJPbkZseSA9PSBGQUxTRSkpIHsKKyAgICAgICAgICAgICgoKFBTS2V5VGFibGUpKHBLZXktPnB2S2V5VGFibGUpKS0+YlNvZnRXRVAgPT0gdHJ1ZSkgfHwKKyAgICAgICAgICAgIChiT25GbHkgPT0gZmFsc2UpKSB7CiAgICAgICAgICAgICAvLyBTb2Z0d2FyZSBXRVAKICAgICAgICAgICAgIC8vIDEuIDMyNTNBCiAgICAgICAgICAgICAvLyAyLiBXRVAgMjU2CkBAIC0xMzg1LDE5ICsxMzY1LDE5IEBACiAgICAgICAgIC8vIFRLSVAvQUVTCiAKICAgICAgICAgUGF5bG9hZExlbiAtPSAoV0xBTl9IRFJfQUREUjNfTEVOICsgOCArIDQpOyAvLyAyNCBpcyA4MDIuMTEgaGVhZGVyLCA4IGlzIElWJkV4dElWLCA0IGlzIGNyYwotICAgICAgICAqcGR3UnhUU0M0N18xNiA9IGNwdV90b19sZTMyKCooUERXT1JEKShwYnlJViArIDQpKTsKKyAgICAgICAgKnBkd1J4VFNDNDdfMTYgPSBjcHVfdG9fbGUzMigqKHVuc2lnbmVkIGxvbmcgKikocGJ5SVYgKyA0KSk7CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iRXh0SVY6ICVseFxuIiwqcGR3UnhUU0M0N18xNik7CiAKICAgICAgICAgaWYgKGJ5RGVjTW9kZSA9PSBLRVlfQ1RMX1RLSVApIHsKICAgICAgICAgICAgICpwd1J4VFNDMTVfMCA9IGNwdV90b19sZTE2KE1BS0VXT1JEKCoocGJ5SVYrMiksICpwYnlJVikpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgKnB3UnhUU0MxNV8wID0gY3B1X3RvX2xlMTYoKihQV09SRClwYnlJVik7CisgICAgICAgICAgICAqcHdSeFRTQzE1XzAgPSBjcHVfdG9fbGUxNigqKHVuc2lnbmVkIHNob3J0ICopcGJ5SVYpOwogICAgICAgICB9CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iVFNDMF8xNTogJXhcbiIsICpwd1J4VFNDMTVfMCk7CiAKICAgICAgICAgaWYgKGJ5RGVjTW9kZSA9PSBLRVlfQ1RMX1RLSVApIHsKIAotICAgICAgICAgICAgaWYgKChwRGV2aWNlLT5ieUxvY2FsSUQgPD0gUkVWX0lEX1ZUMzI1M19BMSkgfHwgKGJPbkZseSA9PSBGQUxTRSkpIHsKKyAgICAgICAgICAgIGlmICgocERldmljZS0+YnlMb2NhbElEIDw9IFJFVl9JRF9WVDMyNTNfQTEpIHx8IChiT25GbHkgPT0gZmFsc2UpKSB7CiAgICAgICAgICAgICAgICAgLy8gU29mdHdhcmUgVEtJUAogICAgICAgICAgICAgICAgIC8vIDEuIDMyNTMgQQogICAgICAgICAgICAgICAgIC8vIDIuIE5vdE9uRmx5CkBAIC0xNDE3LDcgKzEzOTcsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKGJ5RGVjTW9kZSA9PSBLRVlfQ1RMX0NDTVApIHsKLSAgICAgICAgICAgIGlmIChiT25GbHkgPT0gRkFMU0UpIHsKKyAgICAgICAgICAgIGlmIChiT25GbHkgPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAvLyBTb2Z0d2FyZSBDQ01QCiAgICAgICAgICAgICAgICAgLy8gTm90T25GbHkKICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPInNvZnQgS0VZX0NUTF9DQ01QXG4iKTsKQEAgLTE0MzMsMzQgKzE0MTMsMzQgQEAKICAgICB9Ly8gZW5kIG9mIFRLSVAvQUVTCiAKICAgICBpZiAoKCoocGJ5SVYrMykgJiAweDIwKSAhPSAwKQotICAgICAgICAqcGJFeHRJViA9IFRSVUU7Ci0gICAgcmV0dXJuIFRSVUU7CisgICAgICAgICpwYkV4dElWID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCiAKLXN0YXRpYyBCT09MIHNfYkFQTW9kZVJ4RGF0YSAoCitzdGF0aWMgYm9vbCBzX2JBUE1vZGVSeERhdGEgKAogICAgIFBTRGV2aWNlIHBEZXZpY2UsCiAgICAgc3RydWN0IHNrX2J1ZmYqIHNrYiwKLSAgICBVSU5UICAgICBGcmFtZVNpemUsCi0gICAgVUlOVCAgICAgY2JIZWFkZXJPZmZzZXQsCi0gICAgSU5UICAgICAgaVNBTm9kZUluZGV4LAotICAgIElOVCAgICAgIGlEQU5vZGVJbmRleAorICAgIHVuc2lnbmVkIGludCBGcmFtZVNpemUsCisgICAgdW5zaWduZWQgaW50IGNiSGVhZGVyT2Zmc2V0LAorICAgIGludCAgICAgIGlTQU5vZGVJbmRleCwKKyAgICBpbnQgICAgICBpREFOb2RlSW5kZXgKICAgICApCiB7CiAgICAgUFNNZ210T2JqZWN0ICAgICAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwotICAgIEJPT0wgICAgICAgICAgICAgICAgYlJlbGF5QW5kRm9yd2FyZCA9IEZBTFNFOwotICAgIEJPT0wgICAgICAgICAgICAgICAgYlJlbGF5T25seSA9IEZBTFNFOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlNYXNrWzhdID0gezEsIDIsIDQsIDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODB9OwotICAgIFdPUkQgICAgICAgICAgICAgICAgd0FJRDsKKyAgICBib29sIGJSZWxheUFuZEZvcndhcmQgPSBmYWxzZTsKKyAgICBib29sIGJSZWxheU9ubHkgPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TWFza1s4XSA9IHsxLCAyLCA0LCA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwfTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3QUlEOwogCiAKICAgICBzdHJ1Y3Qgc2tfYnVmZiogc2tiY3B5ID0gTlVMTDsKIAogICAgIGlmIChGcmFtZVNpemUgPiBDQl9NQVhfQlVGX1NJWkUpCi0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8vIGNoZWNrIERBCi0gICAgaWYoSVNfTVVMVElDQVNUX0FERFJFU1MoKFBCWVRFKShza2ItPmRhdGErY2JIZWFkZXJPZmZzZXQpKSkgeworICAgIGlmKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKCh1bnNpZ25lZCBjaGFyICopKHNrYi0+ZGF0YStjYkhlYWRlck9mZnNldCkpKSB7CiAgICAgICAgaWYgKHBNZ210LT5zTm9kZURCVGFibGVbMF0uYlBTRW5hYmxlKSB7CiAKICAgICAgICAgICAgc2tiY3B5ID0gZGV2X2FsbG9jX3NrYigoaW50KXBEZXZpY2UtPnJ4X2J1Zl9zeik7CkBAIC0xNDgxLDEyICsxNDYxLDEyIEBACiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgIGJSZWxheUFuZEZvcndhcmQgPSBUUlVFOworICAgICAgICAgICBiUmVsYXlBbmRGb3J3YXJkID0gdHJ1ZTsKICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICAvLyBjaGVjayBpZiByZWxheQotICAgICAgICBpZiAoQlNTREJiSXNTVEFJbk5vZGVEQihwTWdtdCwgKFBCWVRFKShza2ItPmRhdGErY2JIZWFkZXJPZmZzZXQpLCAmaURBTm9kZUluZGV4KSkgeworICAgICAgICBpZiAoQlNTREJiSXNTVEFJbk5vZGVEQihwTWdtdCwgKHVuc2lnbmVkIGNoYXIgKikoc2tiLT5kYXRhK2NiSGVhZGVyT2Zmc2V0KSwgJmlEQU5vZGVJbmRleCkpIHsKICAgICAgICAgICAgIGlmIChwTWdtdC0+c05vZGVEQlRhYmxlW2lEQU5vZGVJbmRleF0uZU5vZGVTdGF0ZSA+PSBOT0RFX0FTU09DKSB7CiAgICAgICAgICAgICAgICAgaWYgKHBNZ210LT5zTm9kZURCVGFibGVbaURBTm9kZUluZGV4XS5iUFNFbmFibGUpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gcXVldWUgdGhpcyBza2IgdW50aWwgbmV4dCBQUyB0eCwgYW5kIHRoZW4gcmVsZWFzZS4KQEAgLTE1MDAsMTAgKzE0ODAsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPmFieVBTVHhNYXBbd0FJRCA+PiAzXSB8PSAgYnlNYXNrW3dBSUQgJiA3XTsKICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAicmVsYXk6IGluZGV4PSAlZCwgcE1nbXQtPmFieVBTVHhNYXBbJWRdPSAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpREFOb2RlSW5kZXgsICh3QUlEID4+IDMpLCBwTWdtdC0+YWJ5UFNUeE1hcFt3QUlEID4+IDNdKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYlJlbGF5T25seSA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgIGJSZWxheU9ubHkgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfTsKQEAgLTE1MTUsMTYgKzE0OTUsMTYgQEAKICAgICAgICAgICAgIGlEQU5vZGVJbmRleCA9IDA7CiAKICAgICAgICAgaWYgKChwRGV2aWNlLT51QXNzb2NDb3VudCA+IDEpICYmIChpREFOb2RlSW5kZXggPj0gMCkpIHsKLSAgICAgICAgICAgIFJPVVRFYlJlbGF5KHBEZXZpY2UsIChQQllURSkoc2tiLT5kYXRhICsgY2JIZWFkZXJPZmZzZXQpLCBGcmFtZVNpemUsIChVSU5UKWlEQU5vZGVJbmRleCk7CisgICAgICAgICAgICBST1VURWJSZWxheShwRGV2aWNlLCAodW5zaWduZWQgY2hhciAqKShza2ItPmRhdGEgKyBjYkhlYWRlck9mZnNldCksIEZyYW1lU2l6ZSwgKHVuc2lnbmVkIGludClpREFOb2RlSW5kZXgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGJSZWxheU9ubHkpCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIG5vbmUgYXNzb2NpYXRlLCBkb24ndCBmb3J3YXJkCiAgICAgaWYgKHBEZXZpY2UtPnVBc3NvY0NvdW50ID09IDApCi0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZHBjLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RwYy5oCmluZGV4IGU1NzQ5NjMuLmMxYjZlNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZHBjLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kcGMuaApAQCAtNDEsNyArNDEsNyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1CT09MCitib29sCiBkZXZpY2VfcmVjZWl2ZV9mcmFtZSAoCiAgICAgUFNEZXZpY2UgcERldmljZSwKICAgICBQU1J4RGVzYyBwQ3VyclJECmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2hvc3RhcC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9ob3N0YXAuYwppbmRleCAxOTVjYzM2Li41YjgzZjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2hvc3RhcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaG9zdGFwLmMKQEAgLTE1NCw5ICsxNTQsOSBAQAogCX0KIAlrZnJlZShwRGV2aWNlLT5hcGRldik7CiAJcERldmljZS0+YXBkZXYgPSBOVUxMOwotICAgIHBEZXZpY2UtPmJFbmFibGU4MDIxeCA9IEZBTFNFOwotICAgIHBEZXZpY2UtPmJFbmFibGVIb3N0V0VQID0gRkFMU0U7Ci0gICAgcERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPSBGQUxTRTsKKyAgICBwRGV2aWNlLT5iRW5hYmxlODAyMXggPSBmYWxzZTsKKyAgICBwRGV2aWNlLT5iRW5hYmxlSG9zdFdFUCA9IGZhbHNlOworICAgIHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID0gZmFsc2U7CiAKIC8vNC4yMDA3LTAxMTgtMDMsPEFkZD4gYnkgRWluc25MaXUKIC8vZXhlY3V0ZSBzb21lIGNsZWFyIHdvcmsKQEAgLTIxNSw3ICsyMTUsNyBAQAogc3RhdGljIGludCBob3N0YXBfcmVtb3ZlX3N0YShQU0RldmljZSBwRGV2aWNlLAogCQkJCSAgICAgc3RydWN0IHZpYXdnZXRfaG9zdGFwZF9wYXJhbSAqcGFyYW0pCiB7Ci0JVUlOVCB1Tm9kZUluZGV4OworCXVuc2lnbmVkIGludCB1Tm9kZUluZGV4OwogCiAKICAgICBpZiAoQlNTREJiSXNTVEFJbk5vZGVEQihwRGV2aWNlLT5wTWdtdCwgcGFyYW0tPnN0YV9hZGRyLCAmdU5vZGVJbmRleCkpIHsKQEAgLTI0NCw3ICsyNDQsNyBAQAogCQkJCSAgc3RydWN0IHZpYXdnZXRfaG9zdGFwZF9wYXJhbSAqcGFyYW0pCiB7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7Ci0JVUlOVCB1Tm9kZUluZGV4OworCXVuc2lnbmVkIGludCB1Tm9kZUluZGV4OwogCiAKICAgICBpZiAoIUJTU0RCYklzU1RBSW5Ob2RlREIocE1nbXQsIHBhcmFtLT5zdGFfYWRkciwgJnVOb2RlSW5kZXgpKSB7CkBAIC0yNTUsNyArMjU1LDcgQEAKICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLndDYXBJbmZvID0gcGFyYW0tPnUuYWRkX3N0YS5jYXBhYmlsaXR5OwogLy8gVE9ETyBsaXN0ZW5JbnRlcnZhbAogLy8gICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53TGlzdGVuSW50ZXJ2YWwgPSAxOwotICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uYlBTRW5hYmxlID0gRkFMU0U7CisgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5iUFNFbmFibGUgPSBmYWxzZTsKICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmJ5U3VwcFJhdGUgPSBwYXJhbS0+dS5hZGRfc3RhLnR4X3N1cHBfcmF0ZXM7CiAKICAgICAvLyBzZXQgbWF4IHR4IHJhdGUKQEAgLTI2Nyw3ICsyNjcsNyBAQAogICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uYlNob3J0UHJlYW1ibGUgPQogICAgICAgICAgICAgV0xBTl9HRVRfQ0FQX0lORk9fU0hPUlRQUkVBTUJMRShwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLndDYXBJbmZvKTsKIAotICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud0FJRCA9IChXT1JEKXBhcmFtLT51LmFkZF9zdGEuYWlkOworICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud0FJRCA9ICh1bnNpZ25lZCBzaG9ydClwYXJhbS0+dS5hZGRfc3RhLmFpZDsKIAogICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0udWxMYXN0UnhKaWZmZXIgPSBqaWZmaWVzOwogCkBAIC0zMDQsNyArMzA0LDcgQEAKIAkJCQkgICAgICAgc3RydWN0IHZpYXdnZXRfaG9zdGFwZF9wYXJhbSAqcGFyYW0pCiB7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7Ci0JVUlOVCB1Tm9kZUluZGV4OworCXVuc2lnbmVkIGludCB1Tm9kZUluZGV4OwogCiAgICAgaWYgKEJTU0RCYklzU1RBSW5Ob2RlREIocE1nbXQsIHBhcmFtLT5zdGFfYWRkciwgJnVOb2RlSW5kZXgpKSB7CiAJICAgIHBhcmFtLT51LmdldF9pbmZvX3N0YS5pbmFjdGl2ZV9zZWMgPQpAQCAtMzI4LDcgKzMyOCw3IEBACiAgKiAgICAgIHBEZXZpY2UgICAtCiAgKiAgICAgIHBhcmFtICAgICAtCiAgKiAgT3V0OgotICogICAgICBUVVJFLCBGQUxTRQorICogICAgICB0cnVlLCBmYWxzZQogICoKICAqIFJldHVybiBWYWx1ZToKICAqCkBAIC0zMzgsNyArMzM4LDcgQEAKIAkJCQkJICBzdHJ1Y3Qgdmlhd2dldF9ob3N0YXBkX3BhcmFtICpwYXJhbSkKIHsKICAgICBQU01nbXRPYmplY3QgICAgcE1nbXQgPSBwRGV2aWNlLT5wTWdtdDsKLQlVSU5UIHVOb2RlSW5kZXg7CisJdW5zaWduZWQgaW50IHVOb2RlSW5kZXg7CiAKICAgICBpZiAoQlNTREJiSXNTVEFJbk5vZGVEQihwTWdtdCwgcGFyYW0tPnN0YV9hZGRyLCAmdU5vZGVJbmRleCkpIHsKICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS51VHhBdHRlbXB0cyA9IDA7CkBAIC0zNjgsMTMgKzM2OCwxMyBAQAogCQkJCQlzdHJ1Y3Qgdmlhd2dldF9ob3N0YXBkX3BhcmFtICpwYXJhbSkKIHsKICAgICBQU01nbXRPYmplY3QgICAgcE1nbXQgPSBwRGV2aWNlLT5wTWdtdDsKLQlVSU5UIHVOb2RlSW5kZXg7CisJdW5zaWduZWQgaW50IHVOb2RlSW5kZXg7CiAKICAgICBpZiAoQlNTREJiSXNTVEFJbk5vZGVEQihwTWdtdCwgcGFyYW0tPnN0YV9hZGRyLCAmdU5vZGVJbmRleCkpIHsKIAkJcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5kd0ZsYWdzIHw9IHBhcmFtLT51LnNldF9mbGFnc19zdGEuZmxhZ3Nfb3I7CiAJCXBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uZHdGbGFncyAmPSBwYXJhbS0+dS5zZXRfZmxhZ3Nfc3RhLmZsYWdzX2FuZDsKIAkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIGR3RmxhZ3MgPSAleCBcbiIsCi0JCSAgICAgICAgICAgIChVSU5UKXBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uZHdGbGFncyk7CisJCSAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5kd0ZsYWdzKTsKIAl9CiAJZWxzZSB7CiAJICAgIHJldHVybiAtRU5PRU5UOwpAQCAtNDcxLDE2ICs0NzEsMTYgQEAKIAkJCQkgICAgICAgaW50IHBhcmFtX2xlbikKIHsKICAgICBQU01nbXRPYmplY3QgICAgcE1nbXQgPSBwRGV2aWNlLT5wTWdtdDsKLSAgICBEV09SRCAgIGR3S2V5SW5kZXggPSAwOwotICAgIEJZVEUgICAgYWJ5S2V5W01BWF9LRVlfTEVOXTsKLSAgICBCWVRFICAgIGFieVNlcVtNQVhfS0VZX0xFTl07CisgICAgdW5zaWduZWQgbG9uZyBkd0tleUluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUtleVtNQVhfS0VZX0xFTl07CisgICAgdW5zaWduZWQgY2hhciBhYnlTZXFbTUFYX0tFWV9MRU5dOwogICAgIE5ESVNfODAyXzExX0tFWV9SU0MgICBLZXlSU0M7Ci0gICAgQllURSAgICBieUtleURlY01vZGUgPSBLRVlfQ1RMX1dFUDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5S2V5RGVjTW9kZSA9IEtFWV9DVExfV0VQOwogCWludCAgICAgcmV0ID0gMDsKIAlpbnQgICAgIGlOb2RlSW5kZXggPSAtMTsKIAlpbnQgICAgIGlpOwotCUJPT0wgICAgYktleVRhYmxlRnVsbCA9IEZBTFNFOwotCVdPUkQgICAgd0tleUN0bCA9IDA7CisJYm9vbCBiS2V5VGFibGVGdWxsID0gZmFsc2U7CisJdW5zaWduZWQgc2hvcnQgd0tleUN0bCA9IDA7CiAKIAogCXBhcmFtLT51LmNyeXB0LmVyciA9IDA7CkBAIC01MDksNyArNTA5LDcgQEAKICAgICAgICAgaU5vZGVJbmRleCA9IDA7CiAKIAl9IGVsc2UgewotCSAgICBpZiAoQlNTREJiSXNTVEFJbk5vZGVEQihwTWdtdCwgcGFyYW0tPnN0YV9hZGRyLCAmaU5vZGVJbmRleCkgPT0gRkFMU0UpIHsKKwkgICAgaWYgKEJTU0RCYklzU1RBSW5Ob2RlREIocE1nbXQsIHBhcmFtLT5zdGFfYWRkciwgJmlOb2RlSW5kZXgpID09IGZhbHNlKSB7CiAJICAgICAgICBwYXJhbS0+dS5jcnlwdC5lcnIgPSBIT1NUQVBfQ1JZUFRfRVJSX1VOS05PV05fQUREUjsKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiBIT1NUQVBfQ1JZUFRfRVJSX1VOS05PV05fQUREUlxuIik7CiAJICAgICAgICByZXR1cm4gLUVJTlZBTDsKQEAgLTUyMCwxNCArNTIwLDE0IEBACiAKIAlpZiAocGFyYW0tPnUuY3J5cHQuYWxnID09IFdQQV9BTEdfTk9ORSkgewogCi0gICAgICAgIGlmIChwTWdtdC0+c05vZGVEQlRhYmxlW2lOb2RlSW5kZXhdLmJPbkZseSA9PSBUUlVFKSB7CisgICAgICAgIGlmIChwTWdtdC0+c05vZGVEQlRhYmxlW2lOb2RlSW5kZXhdLmJPbkZseSA9PSB0cnVlKSB7CiAgICAgICAgICAgICBpZiAoS2V5YlJlbW92ZUtleSgmKHBEZXZpY2UtPnNLZXkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS0+c3RhX2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uZHdLZXlJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+UG9ydE9mZnNldCkgPT0gRkFMU0UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+UG9ydE9mZnNldCkgPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJLZXliUmVtb3ZlS2V5IGZhaWwgXG4iKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uYk9uRmx5ID0gRkFMU0U7CisgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW2lOb2RlSW5kZXhdLmJPbkZseSA9IGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uYnlLZXlJbmRleCA9IDA7CiAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uZHdLZXlJbmRleCA9IDA7CkBAIC01NTMsMTYgKzU1MywxNiBAQAogICAgICAgICAgICAgcGFyYW0tPnUuY3J5cHQua2V5X2xlbgogICAgICAgICAgICApOwogCi0gICAgZHdLZXlJbmRleCA9IChEV09SRCkocGFyYW0tPnUuY3J5cHQuaWR4KTsKKyAgICBkd0tleUluZGV4ID0gKHVuc2lnbmVkIGxvbmcpKHBhcmFtLT51LmNyeXB0LmlkeCk7CiAgICAgaWYgKHBhcmFtLT51LmNyeXB0LmZsYWdzICYgSE9TVEFQX0NSWVBUX0ZMQUdfU0VUX1RYX0tFWSkgewotICAgICAgICBwRGV2aWNlLT5ieUtleUluZGV4ID0gKEJZVEUpZHdLZXlJbmRleDsKLSAgICAgICAgcERldmljZS0+YlRyYW5zbWl0S2V5ID0gVFJVRTsKKyAgICAgICAgcERldmljZS0+YnlLZXlJbmRleCA9ICh1bnNpZ25lZCBjaGFyKWR3S2V5SW5kZXg7CisgICAgICAgIHBEZXZpY2UtPmJUcmFuc21pdEtleSA9IHRydWU7CiAgICAgICAgIGR3S2V5SW5kZXggfD0gKDEgPDwgMzEpOwogICAgIH0KIAogCWlmIChwYXJhbS0+dS5jcnlwdC5hbGcgPT0gV1BBX0FMR19XRVApIHsKIAotICAgICAgICBpZiAoKHBEZXZpY2UtPmJFbmFibGU4MDIxeCA9PSBGQUxTRSkgfHwgKGlOb2RlSW5kZXggPT0gMCkpIHsKKyAgICAgICAgaWYgKChwRGV2aWNlLT5iRW5hYmxlODAyMXggPT0gZmFsc2UpIHx8IChpTm9kZUluZGV4ID09IDApKSB7CiAgICAgICAgICAgICBLZXliU2V0RGVmYXVsdEtleSgmKHBEZXZpY2UtPnNLZXkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkd0tleUluZGV4ICYgfihCSVQzMCB8IFVTRV9LRVlSU0MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS0+dS5jcnlwdC5rZXlfbGVuLApAQCAtNTgwLDIxICs1ODAsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR3S2V5SW5kZXggJiB+KFVTRV9LRVlSU0MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0tPnUuY3J5cHQua2V5X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQUVdPUkQpICYoS2V5UlNDKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChQQllURSlhYnlLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKWFieUtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfQ1RMX1dFUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5Qb3J0T2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5TG9jYWxJRCkgPT0gVFJVRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5TG9jYWxJRCkgPT0gdHJ1ZSkgewogCi0gICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5iT25GbHkgPSBUUlVFOworICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uYk9uRmx5ID0gdHJ1ZTsKIAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBLZXkgVGFibGUgRnVsbAotICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uYk9uRmx5ID0gRkFMU0U7Ci0gICAgICAgICAgICAgICAgYktleVRhYmxlRnVsbCA9IFRSVUU7CisgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5iT25GbHkgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBiS2V5VGFibGVGdWxsID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQ7Ci0gICAgICAgIHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID0gVFJVRTsKKyAgICAgICAgcERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPSB0cnVlOwogICAgICAgICBwTWdtdC0+YnlDU1NQSyA9IEtFWV9DVExfV0VQOwogICAgICAgICBwTWdtdC0+YnlDU1NHSyA9IEtFWV9DVExfV0VQOwogICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW2lOb2RlSW5kZXhdLmJ5Q2lwaGVyU3VpdGUgPSBLRVlfQ1RMX1dFUDsKQEAgLTY0MCw3ICs2NDAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnlLZXlEZWNNb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+UG9ydE9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5TG9jYWxJRCk7Ci0gICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5iT25GbHkgPSBUUlVFOworICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uYk9uRmx5ID0gdHJ1ZTsKIAogICAgIH0gZWxzZSB7CiAgICAgICAgIGR3S2V5SW5kZXggfD0gKDEgPDwgMzApOyAvLyBzZXQgcGFpcndpc2Uga2V5CkBAIC02NDksMjMgKzY0OSwyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICBkd0tleUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS0+dS5jcnlwdC5rZXlfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAoUFFXT1JEKSAmKEtleVJTQyksCi0gICAgICAgICAgICAgICAgICAgICAgIChQQllURSlhYnlLZXksCisgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopYWJ5S2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgYnlLZXlEZWNNb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+UG9ydE9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5TG9jYWxJRCkgPT0gVFJVRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YnlMb2NhbElEKSA9PSB0cnVlKSB7CiAKLSAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uYk9uRmx5ID0gVFJVRTsKKyAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uYk9uRmx5ID0gdHJ1ZTsKIAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gS2V5IFRhYmxlIEZ1bGwKLSAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uYk9uRmx5ID0gRkFMU0U7Ci0gICAgICAgICAgICBiS2V5VGFibGVGdWxsID0gVFJVRTsKKyAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uYk9uRmx5ID0gZmFsc2U7CisgICAgICAgICAgICBiS2V5VGFibGVGdWxsID0gdHJ1ZTsKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiBLZXkgVGFibGUgRnVsbFxuIik7CiAgICAgICAgIH0KIAogICAgIH0KIAotICAgIGlmIChiS2V5VGFibGVGdWxsID09IFRSVUUpIHsKKyAgICBpZiAoYktleVRhYmxlRnVsbCA9PSB0cnVlKSB7CiAgICAgICAgIHdLZXlDdGwgJj0gMHg3RjAwOyAgICAgICAgICAgICAgLy8gY2xlYXIgYWxsIGtleSBjb250cm9sIGZpbGVkCiAgICAgICAgIHdLZXlDdGwgfD0gKGJ5S2V5RGVjTW9kZSA8PCA0KTsKICAgICAgICAgd0tleUN0bCB8PSAoYnlLZXlEZWNNb2RlKTsKQEAgLTY4Niw3ICs2ODYsNyBAQAogICAgICAgICAgICAgICApOwogCiAJLy8gc2V0IHdlcCBrZXkKLSAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IFRSVUU7CisgICAgcERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPSB0cnVlOwogICAgIHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uYnlDaXBoZXJTdWl0ZSA9IGJ5S2V5RGVjTW9kZTsKICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW2lOb2RlSW5kZXhdLmR3S2V5SW5kZXggPSBkd0tleUluZGV4OwogICAgIHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uZHdUU0M0N18xNiA9IDA7CkBAIC03MjcsNyArNzI3LDcgQEAKIAkgICAgcGFyYW0tPnN0YV9hZGRyWzRdID09IDB4ZmYgJiYgcGFyYW0tPnN0YV9hZGRyWzVdID09IDB4ZmYpIHsKICAgICAgICAgaU5vZGVJbmRleCA9IDA7CiAJfSBlbHNlIHsKLQkgICAgaWYgKEJTU0RCYklzU1RBSW5Ob2RlREIocE1nbXQsIHBhcmFtLT5zdGFfYWRkciwgJmlOb2RlSW5kZXgpID09IEZBTFNFKSB7CisJICAgIGlmIChCU1NEQmJJc1NUQUluTm9kZURCKHBNZ210LCBwYXJhbS0+c3RhX2FkZHIsICZpTm9kZUluZGV4KSA9PSBmYWxzZSkgewogCSAgICAgICAgcGFyYW0tPnUuY3J5cHQuZXJyID0gSE9TVEFQX0NSWVBUX0VSUl9VTktOT1dOX0FERFI7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJob3N0YXBfZ2V0X2VuY3J5cHRpb246IEhPU1RBUF9DUllQVF9FUlJfVU5LTk9XTl9BRERSXG4iKTsKIAkgICAgICAgIHJldHVybiAtRUlOVkFMOwpAQCAtNzM2LDcgKzczNiw3IEBACiAJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiaG9zdGFwX2dldF9lbmNyeXB0aW9uOiAlZFxuIiwgaU5vZGVJbmRleCk7CiAgICAgbWVtc2V0KHBhcmFtLT51LmNyeXB0LnNlcSwgMCwgOCk7CiAgICAgZm9yIChpaSA9IDAgOyBpaSA8IDggOyBpaSsrKSB7Ci0gICAgICAgIHBhcmFtLT51LmNyeXB0LnNlcVtpaV0gPSAoQllURSlwTWdtdC0+c05vZGVEQlRhYmxlW2lOb2RlSW5kZXhdLktleVJTQyA+PiAoaWkgKiA4KTsKKyAgICAgICAgcGFyYW0tPnUuY3J5cHQuc2VxW2lpXSA9ICh1bnNpZ25lZCBjaGFyKXBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uS2V5UlNDID4+IChpaSAqIDgpOwogICAgIH0KIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2lvY21kLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2lvY21kLmgKaW5kZXggNjBjMGEzNi4uNTNjNTBjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9pb2NtZC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaW9jbWQuaApAQCAtMzcsNyArMzcsNiBAQAogI2RlZmluZSBERUYKICNlbmRpZgogCi0vL3R5cGVkZWYgaW50IEJPT0w7CiAvL3R5cGVkZWYgdWludDMyX3QgdTMyOwogLy90eXBlZGVmIHVpbnQxNl90IHUxNjsKIC8vdHlwZWRlZiB1aW50OF90IHU4OwpAQCAtMTA5LDEwICsxMDgsMTAgQEAKIC8vCiAjcHJhZ21hIHBhY2soMSkKIHR5cGVkZWYgc3RydWN0IHRhZ1NDbWRSZXF1ZXN0IHsKLQlVOCAJICAgIG5hbWVbMTZdOworCXU4CSAgICBuYW1lWzE2XTsKIAl2b2lkCSpkYXRhOwotCVUxNgkgICAgd1Jlc3VsdDsKLQlVMTYgICAgIHdDbWRDb2RlOworCXUxNgkgICAgd1Jlc3VsdDsKKwl1MTYgICAgIHdDbWRDb2RlOwogfSBTQ21kUmVxdWVzdCwgKlBTQ21kUmVxdWVzdDsKIAogLy8KQEAgLTEyMSw3ICsxMjAsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB0YWdTQ21kU2NhbiB7CiAKLSAgICBVOAkgICAgc3NpZFtTU0lEX01BWExFTiArIDJdOworCXU4IHNzaWRbU1NJRF9NQVhMRU4gKyAyXTsKIAogfSBTQ21kU2NhbiwgKlBTQ21kU2NhbjsKIApAQCAtMTMyLDEyICsxMzEsMTIgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU0NtZEJTU0pvaW4gewogCi0gICAgVTE2CSAgICB3QlNTVHlwZTsKLSAgICBVMTYgICAgIHdCQlBUeXBlOwotICAgIFU4CSAgICBzc2lkW1NTSURfTUFYTEVOICsgMl07Ci0gICAgVTMyCSAgICB1Q2hhbm5lbDsKLSAgICBCT09MICAgIGJQU0VuYWJsZTsKLSAgICBCT09MICAgIGJTaGFyZUtleUF1dGg7CisgICAgdTE2CSAgICB3QlNTVHlwZTsKKyAgICB1MTYgICAgIHdCQlBUeXBlOworICAgIHU4CSAgICBzc2lkW1NTSURfTUFYTEVOICsgMl07CisgICAgdTMyCSAgICB1Q2hhbm5lbDsKKyAgICBib29sIGJQU0VuYWJsZTsKKyAgICBib29sIGJTaGFyZUtleUF1dGg7CiAKIH0gU0NtZEJTU0pvaW4sICpQU0NtZEJTU0pvaW47CiAKQEAgLTE0Nyw3ICsxNDYsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB0YWdTQ21kWm9uZVR5cGVTZXQgewogCi0gQk9PTCAgICAgICBiV3JpdGU7CisgYm9vbCBiV3JpdGU7CiAgV1pPTkVUWVBFICBab25lVHlwZTsKIAogfSBTQ21kWm9uZVR5cGVTZXQsICpQU0NtZFpvbmVUeXBlU2V0OwpAQCAtMTU1LDMzICsxNTQsMzMgQEAKICNpZmRlZiBXUEFfU01fVHJhbnN0YXR1cwogdHlwZWRlZiBzdHJ1Y3QgdGFnU1dQQVJlc3VsdCB7CiAgICAgICAgICBjaGFyCWlmbmFtZVsxMDBdOwotICAgICAgICAgVTgJCXByb3RvOwotICAgICAgICAgVTggICBrZXlfbWdtdDsKLSAgICAgICAgIFU4ICAgZWFwX3R5cGU7Ci0gICAgICAgICBCT09MIGF1dGhlbnRpY2F0ZWQ7CisgICAgICAgICB1OCBwcm90bzsKKyAgICAgICAgIHU4IGtleV9tZ210OworICAgICAgICAgdTggZWFwX3R5cGU7CisgICAgICAgICBib29sIGF1dGhlbnRpY2F0ZWQ7CiB9IFNXUEFSZXN1bHQsICpQU1dQQVJlc3VsdDsKICNlbmRpZgogCiB0eXBlZGVmIHN0cnVjdCB0YWdTQ21kU3RhcnRBUCB7CiAKLSAgICBVMTYJICAgIHdCU1NUeXBlOwotICAgIFUxNiAgICAgd0JCUFR5cGU7Ci0gICAgVTgJICAgIHNzaWRbU1NJRF9NQVhMRU4gKyAyXTsKLSAgICBVMzIgCXVDaGFubmVsOwotICAgIFUzMiAgICAgdUJlYWNvbkludDsKLSAgICBCT09MICAgIGJTaGFyZUtleUF1dGg7Ci0gICAgVTggICAgICBieUJhc2ljUmF0ZTsKKyAgICB1MTYJICAgIHdCU1NUeXBlOworICAgIHUxNiAgICAgd0JCUFR5cGU7CisgICAgdTgJICAgIHNzaWRbU1NJRF9NQVhMRU4gKyAyXTsKKyAgICB1MzIJICAgIHVDaGFubmVsOworICAgIHUzMiAgICAgdUJlYWNvbkludDsKKyAgICBib29sIGJTaGFyZUtleUF1dGg7CisgICAgdTggICAgICBieUJhc2ljUmF0ZTsKIAogfSBTQ21kU3RhcnRBUCwgKlBTQ21kU3RhcnRBUDsKIAogCiB0eXBlZGVmIHN0cnVjdCB0YWdTQ21kU2V0V0VQIHsKIAotICAgIEJPT0wgICAgYkVuYWJsZVdlcDsKLSAgICBVOCAgICAgIGJ5S2V5SW5kZXg7Ci0gICAgVTggICAgICBhYnlXZXBLZXlbV0VQX05LRVlTXVtXRVBfS0VZTUFYTEVOXTsKLSAgICBCT09MICAgIGJXZXBLZXlBdmFpbGFibGVbV0VQX05LRVlTXTsKLSAgICBVMzIgICAgIGF1V2VwS2V5TGVuZ3RoW1dFUF9OS0VZU107CisgICAgYm9vbCBiRW5hYmxlV2VwOworICAgIHU4ICAgICAgYnlLZXlJbmRleDsKKyAgICB1OCAgICAgIGFieVdlcEtleVtXRVBfTktFWVNdW1dFUF9LRVlNQVhMRU5dOworICAgIGJvb2wgYldlcEtleUF2YWlsYWJsZVtXRVBfTktFWVNdOworICAgIHUzMiAgICAgYXVXZXBLZXlMZW5ndGhbV0VQX05LRVlTXTsKIAogfSBTQ21kU2V0V0VQLCAqUFNDbWRTZXRXRVA7CiAKQEAgLTE4OSwzOSArMTg4LDM5IEBACiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NCU1NJREl0ZW0gewogCi0JVTMyCSAgICB1Q2hhbm5lbDsKLSAgICBVOCAgICAgIGFieUJTU0lEW0JTU0lEX0xFTl07Ci0gICAgVTggICAgICBhYnlTU0lEW1NTSURfTUFYTEVOICsgMV07CisJdTMyCSAgICB1Q2hhbm5lbDsKKyAgICB1OCAgICAgIGFieUJTU0lEW0JTU0lEX0xFTl07CisgICAgdTggICAgICBhYnlTU0lEW1NTSURfTUFYTEVOICsgMV07CiAgICAgLy8yMDA2LTExMTYtMDEsPE1vZGlmeT4gYnkgTm9tYWRaaGFvCi0gICAgLy9VMTYJICAgIHdCZWFjb25JbnRlcnZhbDsKLSAgICAvL1UxNgkgICAgd0NhcEluZm87Ci0gICAgLy9VOCAgICAgIGJ5TmV0VHlwZTsKLSAgICBVOCAgICAgIGJ5TmV0VHlwZTsKLSAgICBVMTYJICAgIHdCZWFjb25JbnRlcnZhbDsKLSAgICBVMTYJICAgIHdDYXBJbmZvOyAgICAgICAgLy8gZm9yIGFkZHJlc3Mgb2YgYnlOZXRUeXBlIGF0IGFsaWduIDQKKyAgICAvL3UxNgkgICAgd0JlYWNvbkludGVydmFsOworICAgIC8vdTE2CSAgICB3Q2FwSW5mbzsKKyAgICAvL3U4ICAgICAgYnlOZXRUeXBlOworICAgIHU4ICAgICAgYnlOZXRUeXBlOworICAgIHUxNgkgICAgd0JlYWNvbkludGVydmFsOworICAgIHUxNgkgICAgd0NhcEluZm87ICAgICAgICAvLyBmb3IgYWRkcmVzcyBvZiBieU5ldFR5cGUgYXQgYWxpZ24gNAogCi0gICAgQk9PTCAgICBiV0VQT247Ci0gICAgVTMyICAgICB1UlNTSTsKKyAgICBib29sIGJXRVBPbjsKKyAgICB1MzIgICAgIHVSU1NJOwogCiB9IFNCU1NJREl0ZW07CiAKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU0JTU0lETGlzdCB7CiAKLQlVMzIJCSAgICB1SXRlbTsKKwl1MzIJCSAgICB1SXRlbTsKIAlTQlNTSURJdGVtCXNCU1NJRExpc3RbMF07CiB9IFNCU1NJRExpc3QsICpQU0JTU0lETGlzdDsKIAogCiB0eXBlZGVmIHN0cnVjdCB0YWdTQ21kTGlua1N0YXR1cyB7CiAKLSAgICBCT09MICAgIGJMaW5rOwotCVUxNgkgICAgd0JTU1R5cGU7Ci0JVTggICAgICBieVN0YXRlOwotICAgIFU4ICAgICAgYWJ5QlNTSURbQlNTSURfTEVOXTsKLSAgICBVOCAgICAgIGFieVNTSURbU1NJRF9NQVhMRU4gKyAyXTsKLSAgICBVMzIgICAgIHVDaGFubmVsOwotICAgIFUzMiAgICAgdUxpbmtSYXRlOworICAgIGJvb2wgYkxpbms7CisJdTE2ICAgd0JTU1R5cGU7CisJdTggICAgICBieVN0YXRlOworICAgIHU4ICAgICAgYWJ5QlNTSURbQlNTSURfTEVOXTsKKyAgICB1OCAgICAgIGFieVNTSURbU1NJRF9NQVhMRU4gKyAyXTsKKyAgICB1MzIgICAgIHVDaGFubmVsOworICAgIHUzMiAgICAgdUxpbmtSYXRlOwogCiB9IFNDbWRMaW5rU3RhdHVzLCAqUFNDbWRMaW5rU3RhdHVzOwogCkBAIC0yMjksMTggKzIyOCwxOCBAQAogLy8gODAyLjExIGNvdW50ZXIKIC8vCiB0eXBlZGVmIHN0cnVjdCB0YWdTRG90MTFNSUJDb3VudCB7Ci0gICAgVTMyIFRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudDsKLSAgICBVMzIgTXVsdGljYXN0VHJhbnNtaXR0ZWRGcmFtZUNvdW50OwotICAgIFUzMiBGYWlsZWRDb3VudDsKLSAgICBVMzIgUmV0cnlDb3VudDsKLSAgICBVMzIgTXVsdGlwbGVSZXRyeUNvdW50OwotICAgIFUzMiBSVFNTdWNjZXNzQ291bnQ7Ci0gICAgVTMyIFJUU0ZhaWx1cmVDb3VudDsKLSAgICBVMzIgQUNLRmFpbHVyZUNvdW50OwotICAgIFUzMiBGcmFtZUR1cGxpY2F0ZUNvdW50OwotICAgIFUzMiBSZWNlaXZlZEZyYWdtZW50Q291bnQ7Ci0gICAgVTMyIE11bHRpY2FzdFJlY2VpdmVkRnJhbWVDb3VudDsKLSAgICBVMzIgRkNTRXJyb3JDb3VudDsKKwl1MzIgVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50OworCXUzMiBNdWx0aWNhc3RUcmFuc21pdHRlZEZyYW1lQ291bnQ7CisJdTMyIEZhaWxlZENvdW50OworCXUzMiBSZXRyeUNvdW50OworCXUzMiBNdWx0aXBsZVJldHJ5Q291bnQ7CisJdTMyIFJUU1N1Y2Nlc3NDb3VudDsKKwl1MzIgUlRTRmFpbHVyZUNvdW50OworCXUzMiBBQ0tGYWlsdXJlQ291bnQ7CisJdTMyIEZyYW1lRHVwbGljYXRlQ291bnQ7CisJdTMyIFJlY2VpdmVkRnJhZ21lbnRDb3VudDsKKwl1MzIgTXVsdGljYXN0UmVjZWl2ZWRGcmFtZUNvdW50OworCXUzMiBGQ1NFcnJvckNvdW50OwogfSBTRG90MTFNSUJDb3VudCwgKlBTRG90MTFNSUJDb3VudDsKIAogCkBAIC0yNTIsMTI5ICsyNTEsMTI5IEBACiAgICAgLy8KICAgICAvLyBJU1Igc3RhdHVzIGNvdW50CiAgICAgLy8KLSAgICBVMzIgICBkd0lzclR4ME9LOwotICAgIFUzMiAgIGR3SXNyVHgxT0s7Ci0gICAgVTMyICAgZHdJc3JCZWFjb25UeE9LOwotICAgIFUzMiAgIGR3SXNyUnhPSzsKLSAgICBVMzIgICBkd0lzclRCVFRJbnQ7Ci0gICAgVTMyICAgZHdJc3JTVElNRVJJbnQ7Ci0gICAgVTMyICAgZHdJc3JVbnJlY292ZXJhYmxlRXJyb3I7Ci0gICAgVTMyICAgZHdJc3JTb2Z0SW50ZXJydXB0OwotICAgIFUzMiAgIGR3SXNyUnhOb0J1ZjsKKwl1MzIgICBkd0lzclR4ME9LOworCXUzMiAgIGR3SXNyVHgxT0s7CisJdTMyICAgZHdJc3JCZWFjb25UeE9LOworCXUzMiAgIGR3SXNyUnhPSzsKKwl1MzIgICBkd0lzclRCVFRJbnQ7CisJdTMyICAgZHdJc3JTVElNRVJJbnQ7CisJdTMyICAgZHdJc3JVbnJlY292ZXJhYmxlRXJyb3I7CisJdTMyICAgZHdJc3JTb2Z0SW50ZXJydXB0OworCXUzMiAgIGR3SXNyUnhOb0J1ZjsKICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLSAgICBVMzIgICBkd0lzclVua25vd247ICAgICAgICAgICAgICAgLy8gdW5rbm93biBpbnRlcnJ1cHQgY291bnQKKwl1MzIgICBkd0lzclVua25vd247ICAgICAgICAgICAgICAgLy8gdW5rbm93biBpbnRlcnJ1cHQgY291bnQKIAogICAgIC8vIFJTUiBzdGF0dXMgY291bnQKICAgICAvLwotICAgIFUzMiAgIGR3UnNyRnJtQWxnbkVycjsKLSAgICBVMzIgICBkd1JzckVycjsKLSAgICBVMzIgICBkd1JzckNSQ0VycjsKLSAgICBVMzIgICBkd1JzckNSQ09rOwotICAgIFUzMiAgIGR3UnNyQlNTSURPazsKLSAgICBVMzIgICBkd1JzckFERFJPazsKLSAgICBVMzIgICBkd1JzcklDVk9rOwotICAgIFUzMiAgIGR3TmV3UnNyU2hvcnRQcmVhbWJsZTsKLSAgICBVMzIgICBkd1Jzckxvbmc7Ci0gICAgVTMyICAgZHdSc3JSdW50OworCXUzMiAgIGR3UnNyRnJtQWxnbkVycjsKKwl1MzIgICBkd1JzckVycjsKKwl1MzIgICBkd1JzckNSQ0VycjsKKwl1MzIgICBkd1JzckNSQ09rOworCXUzMiAgIGR3UnNyQlNTSURPazsKKwl1MzIgICBkd1JzckFERFJPazsKKwl1MzIgICBkd1JzcklDVk9rOworCXUzMiAgIGR3TmV3UnNyU2hvcnRQcmVhbWJsZTsKKwl1MzIgICBkd1Jzckxvbmc7CisJdTMyICAgZHdSc3JSdW50OwogCi0gICAgVTMyICAgZHdSc3JSeENvbnRyb2w7Ci0gICAgVTMyICAgZHdSc3JSeERhdGE7Ci0gICAgVTMyICAgZHdSc3JSeE1hbmFnZTsKKwl1MzIgICBkd1JzclJ4Q29udHJvbDsKKwl1MzIgICBkd1JzclJ4RGF0YTsKKwl1MzIgICBkd1JzclJ4TWFuYWdlOwogCi0gICAgVTMyICAgZHdSc3JSeFBhY2tldDsKLSAgICBVMzIgICBkd1JzclJ4T2N0ZXQ7Ci0gICAgVTMyICAgZHdSc3JCcm9hZGNhc3Q7Ci0gICAgVTMyICAgZHdSc3JNdWx0aWNhc3Q7Ci0gICAgVTMyICAgZHdSc3JEaXJlY3RlZDsKKwl1MzIgICBkd1JzclJ4UGFja2V0OworCXUzMiAgIGR3UnNyUnhPY3RldDsKKwl1MzIgICBkd1JzckJyb2FkY2FzdDsKKwl1MzIgICBkd1Jzck11bHRpY2FzdDsKKwl1MzIgICBkd1JzckRpcmVjdGVkOwogICAgIC8vIDY0LWJpdCBPSUQKLSAgICBVMzIgICB1bGxSc3JPSzsKKwl1MzIgICB1bGxSc3JPSzsKIAogICAgIC8vIGZvciBzb21lIG9wdGlvbmFsIE9JRHMgKDY0IGJpdHMpIGFuZCBETUkgc3VwcG9ydAotICAgIFUzMiAgIHVsbFJ4QnJvYWRjYXN0Qnl0ZXM7Ci0gICAgVTMyICAgdWxsUnhNdWx0aWNhc3RCeXRlczsKLSAgICBVMzIgICB1bGxSeERpcmVjdGVkQnl0ZXM7Ci0gICAgVTMyICAgdWxsUnhCcm9hZGNhc3RGcmFtZXM7Ci0gICAgVTMyICAgdWxsUnhNdWx0aWNhc3RGcmFtZXM7Ci0gICAgVTMyICAgdWxsUnhEaXJlY3RlZEZyYW1lczsKKwl1MzIgICB1bGxSeEJyb2FkY2FzdEJ5dGVzOworCXUzMiAgIHVsbFJ4TXVsdGljYXN0Qnl0ZXM7CisJdTMyICAgdWxsUnhEaXJlY3RlZEJ5dGVzOworCXUzMiAgIHVsbFJ4QnJvYWRjYXN0RnJhbWVzOworCXUzMiAgIHVsbFJ4TXVsdGljYXN0RnJhbWVzOworCXUzMiAgIHVsbFJ4RGlyZWN0ZWRGcmFtZXM7CiAKLSAgICBVMzIgICBkd1JzclJ4RnJhZ21lbnQ7Ci0gICAgVTMyICAgZHdSc3JSeEZybUxlbjY0OwotICAgIFUzMiAgIGR3UnNyUnhGcm1MZW42NV8xMjc7Ci0gICAgVTMyICAgZHdSc3JSeEZybUxlbjEyOF8yNTU7Ci0gICAgVTMyICAgZHdSc3JSeEZybUxlbjI1Nl81MTE7Ci0gICAgVTMyICAgZHdSc3JSeEZybUxlbjUxMl8xMDIzOwotICAgIFUzMiAgIGR3UnNyUnhGcm1MZW4xMDI0XzE1MTg7CisJdTMyICAgZHdSc3JSeEZyYWdtZW50OworCXUzMiAgIGR3UnNyUnhGcm1MZW42NDsKKwl1MzIgICBkd1JzclJ4RnJtTGVuNjVfMTI3OworCXUzMiAgIGR3UnNyUnhGcm1MZW4xMjhfMjU1OworCXUzMiAgIGR3UnNyUnhGcm1MZW4yNTZfNTExOworCXUzMiAgIGR3UnNyUnhGcm1MZW41MTJfMTAyMzsKKwl1MzIgICBkd1JzclJ4RnJtTGVuMTAyNF8xNTE4OwogCiAgICAgLy8gVFNSMCwxIHN0YXR1cyBjb3VudAogICAgIC8vCi0gICAgVTMyICAgZHdUc3JUb3RhbFJldHJ5WzJdOyAgICAgICAgLy8gdG90YWwgY29sbGlzaW9uIHJldHJ5IGNvdW50Ci0gICAgVTMyICAgZHdUc3JPbmNlUmV0cnlbMl07ICAgICAgICAgLy8gdGhpcyBwYWNrZXQgb25seSBvY2N1ciBvbmUgY29sbGlzaW9uCi0gICAgVTMyICAgZHdUc3JNb3JlVGhhbk9uY2VSZXRyeVsyXTsgLy8gdGhpcyBwYWNrZXQgb2NjdXIgbW9yZSB0aGFuIG9uZSBjb2xsaXNpb24KLSAgICBVMzIgICBkd1RzclJldHJ5WzJdOyAgICAgICAgICAgICAvLyB0aGlzIHBhY2tldCBoYXMgZXZlciBvY2N1ciBjb2xsaXNpb24sCisJdTMyICAgZHdUc3JUb3RhbFJldHJ5WzJdOyAgICAgICAgLy8gdG90YWwgY29sbGlzaW9uIHJldHJ5IGNvdW50CisJdTMyICAgZHdUc3JPbmNlUmV0cnlbMl07ICAgICAgICAgLy8gdGhpcyBwYWNrZXQgb25seSBvY2N1ciBvbmUgY29sbGlzaW9uCisJdTMyICAgZHdUc3JNb3JlVGhhbk9uY2VSZXRyeVsyXTsgLy8gdGhpcyBwYWNrZXQgb2NjdXIgbW9yZSB0aGFuIG9uZSBjb2xsaXNpb24KKwl1MzIgICBkd1RzclJldHJ5WzJdOyAgICAgICAgICAgICAvLyB0aGlzIHBhY2tldCBoYXMgZXZlciBvY2N1ciBjb2xsaXNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IGlzIChkd1Rzck9uY2VDb2xsaXNpb24wICsgZHdUc3JNb3JlVGhhbk9uY2VDb2xsaXNpb24wKQotICAgIFUzMiAgIGR3VHNyQUNLRGF0YVsyXTsKLSAgICBVMzIgICBkd1RzckVyclsyXTsKLSAgICBVMzIgICBkd0FsbFRzck9LWzJdOwotICAgIFUzMiAgIGR3VHNyUmV0cnlUaW1lb3V0WzJdOwotICAgIFUzMiAgIGR3VHNyVHJhbnNtaXRUaW1lb3V0WzJdOworCXUzMiAgIGR3VHNyQUNLRGF0YVsyXTsKKwl1MzIgICBkd1RzckVyclsyXTsKKwl1MzIgICBkd0FsbFRzck9LWzJdOworCXUzMiAgIGR3VHNyUmV0cnlUaW1lb3V0WzJdOworCXUzMiAgIGR3VHNyVHJhbnNtaXRUaW1lb3V0WzJdOwogCi0gICAgVTMyICAgZHdUc3JUeFBhY2tldFsyXTsKLSAgICBVMzIgICBkd1RzclR4T2N0ZXRbMl07Ci0gICAgVTMyICAgZHdUc3JCcm9hZGNhc3RbMl07Ci0gICAgVTMyICAgZHdUc3JNdWx0aWNhc3RbMl07Ci0gICAgVTMyICAgZHdUc3JEaXJlY3RlZFsyXTsKKwl1MzIgICBkd1RzclR4UGFja2V0WzJdOworCXUzMiAgIGR3VHNyVHhPY3RldFsyXTsKKwl1MzIgICBkd1RzckJyb2FkY2FzdFsyXTsKKwl1MzIgICBkd1Rzck11bHRpY2FzdFsyXTsKKwl1MzIgICBkd1RzckRpcmVjdGVkWzJdOwogCiAgICAgLy8gUkQvVEQgY291bnQKLSAgICBVMzIgICBkd0NudFJ4RnJtTGVuZ3RoOwotICAgIFUzMiAgIGR3Q250VHhCdWZMZW5ndGg7CisJdTMyICAgZHdDbnRSeEZybUxlbmd0aDsKKwl1MzIgICBkd0NudFR4QnVmTGVuZ3RoOwogCi0gICAgVTggICAgYWJ5Q250UnhQYXR0ZXJuWzE2XTsKLSAgICBVOCAgICBhYnlDbnRUeFBhdHRlcm5bMTZdOworCXU4ICAgIGFieUNudFJ4UGF0dGVyblsxNl07CisJdTggICAgYWJ5Q250VHhQYXR0ZXJuWzE2XTsKIAogICAgIC8vIFNvZnR3YXJlIGNoZWNrLi4uLgotICAgIFUzMiAgIGR3Q250UnhEYXRhRXJyOyAgICAgICAgICAgICAvLyByeCBidWZmZXIgZGF0YSBzb2Z0d2FyZSBjb21wYXJlIENSQyBlcnIgY291bnQKLSAgICBVMzIgICBkd0NudERlY3J5cHRFcnI7ICAgICAgICAgICAgLy8gcnggYnVmZmVyIGRhdGEgc29mdHdhcmUgY29tcGFyZSBDUkMgZXJyIGNvdW50Ci0gICAgVTMyICAgZHdDbnRSeElDVkVycjsgICAgICAgICAgICAgIC8vIHJ4IGJ1ZmZlciBkYXRhIHNvZnR3YXJlIGNvbXBhcmUgQ1JDIGVyciBjb3VudAotICAgIFUzMiAgICBpZHhSeEVycm9yRGVzYzsgICAgICAgICAgICAgLy8gaW5kZXggZm9yIHJ4IGRhdGEgZXJyb3IgUkQKKwl1MzIgICBkd0NudFJ4RGF0YUVycjsgICAgICAgICAgICAgLy8gcnggYnVmZmVyIGRhdGEgc29mdHdhcmUgY29tcGFyZSBDUkMgZXJyIGNvdW50CisJdTMyICAgZHdDbnREZWNyeXB0RXJyOyAgICAgICAgICAgIC8vIHJ4IGJ1ZmZlciBkYXRhIHNvZnR3YXJlIGNvbXBhcmUgQ1JDIGVyciBjb3VudAorCXUzMiAgIGR3Q250UnhJQ1ZFcnI7ICAgICAgICAgICAgICAvLyByeCBidWZmZXIgZGF0YSBzb2Z0d2FyZSBjb21wYXJlIENSQyBlcnIgY291bnQKKwl1MzIgICAgaWR4UnhFcnJvckRlc2M7ICAgICAgICAgICAgIC8vIGluZGV4IGZvciByeCBkYXRhIGVycm9yIFJECiAKICAgICAvLyA2NC1iaXQgT0lECi0gICAgVTMyICAgdWxsVHNyT0tbMl07CisJdTMyICAgdWxsVHNyT0tbMl07CiAKICAgICAvLyBmb3Igc29tZSBvcHRpb25hbCBPSURzICg2NCBiaXRzKSBhbmQgRE1JIHN1cHBvcnQKLSAgICBVMzIgICB1bGxUeEJyb2FkY2FzdEZyYW1lc1syXTsKLSAgICBVMzIgICB1bGxUeE11bHRpY2FzdEZyYW1lc1syXTsKLSAgICBVMzIgICB1bGxUeERpcmVjdGVkRnJhbWVzWzJdOwotICAgIFUzMiAgIHVsbFR4QnJvYWRjYXN0Qnl0ZXNbMl07Ci0gICAgVTMyICAgdWxsVHhNdWx0aWNhc3RCeXRlc1syXTsKLSAgICBVMzIgICB1bGxUeERpcmVjdGVkQnl0ZXNbMl07CisJdTMyICAgdWxsVHhCcm9hZGNhc3RGcmFtZXNbMl07CisJdTMyICAgdWxsVHhNdWx0aWNhc3RGcmFtZXNbMl07CisJdTMyICAgdWxsVHhEaXJlY3RlZEZyYW1lc1syXTsKKwl1MzIgICB1bGxUeEJyb2FkY2FzdEJ5dGVzWzJdOworCXUzMiAgIHVsbFR4TXVsdGljYXN0Qnl0ZXNbMl07CisJdTMyICAgdWxsVHhEaXJlY3RlZEJ5dGVzWzJdOwogfSBTU3RhdE1JQkNvdW50LCAqUFNTdGF0TUlCQ291bnQ7CiAKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU05vZGVJdGVtIHsKICAgICAvLyBTVEEgaW5mbwotICAgIFUxNiAgICAgICAgICAgIHdBSUQ7Ci0gICAgVTggICAgICAgICAgICAgYWJ5TUFDQWRkcls2XTsKLSAgICBVMTYgICAgICAgICAgICB3VHhEYXRhUmF0ZTsKLSAgICBVMTYgICAgICAgICAgICB3SW5BY3RpdmVDb3VudDsKLSAgICBVMTYgICAgICAgICAgICB3RW5RdWV1ZUNudDsKLSAgICBVMTYgICAgICAgICAgICB3RmxhZ3M7Ci0gICAgQk9PTCAgICAgICAgICAgYlBXQml0T247Ci0gICAgVTggICAgICAgICAgICAgYnlLZXlJbmRleDsKLSAgICBVMTYgICAgICAgICAgICB3V2VwS2V5TGVuZ3RoOwotICAgIFU4ICAgICAgICAgICAgYWJ5V2VwS2V5W1dFUF9LRVlNQVhMRU5dOworICAgIHUxNiAgICAgICAgICAgIHdBSUQ7CisgICAgdTggICAgICAgICAgICAgYWJ5TUFDQWRkcls2XTsKKyAgICB1MTYgICAgICAgICAgICB3VHhEYXRhUmF0ZTsKKyAgICB1MTYgICAgICAgICAgICB3SW5BY3RpdmVDb3VudDsKKyAgICB1MTYgICAgICAgICAgICB3RW5RdWV1ZUNudDsKKyAgICB1MTYgICAgICAgICAgICB3RmxhZ3M7CisgICAgYm9vbCBiUFdCaXRPbjsKKyAgICB1OCAgICAgICAgICAgICBieUtleUluZGV4OworICAgIHUxNiAgICAgICAgICAgIHdXZXBLZXlMZW5ndGg7CisgICAgdTggICAgICAgICAgICBhYnlXZXBLZXlbV0VQX0tFWU1BWExFTl07CiAgICAgLy8gQXV0byByYXRlIGZhbGxiYWNrIHZhcnMKLSAgICBCT09MICAgICAgICAgICBiSXNJbkZhbGxiYWNrOwotICAgIFUzMiAgICAgICAgICAgIHVUeEZhaWx1cmVzOwotICAgIFUzMiAgICAgICAgICAgIHVUeEF0dGVtcHRzOwotICAgIFUxNiAgICAgICAgICAgIHdGYWlsdXJlUmF0aW87CisgICAgYm9vbCBiSXNJbkZhbGxiYWNrOworICAgIHUzMiAgICAgICAgICAgIHVUeEZhaWx1cmVzOworICAgIHUzMiAgICAgICAgICAgIHVUeEF0dGVtcHRzOworICAgIHUxNiAgICAgICAgICAgIHdGYWlsdXJlUmF0aW87CiAKIH0gU05vZGVJdGVtOwogCiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NOb2RlTGlzdCB7CiAKLQlVMzIJCSAgICB1SXRlbTsKKwl1MzIJCSAgICB1SXRlbTsKIAlTTm9kZUl0ZW0Jc05vZGVMaXN0WzBdOwogCiB9IFNOb2RlTGlzdCwgKlBTTm9kZUxpc3Q7CkBAIC0zODMsNyArMzgyLDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU0NtZFZhbHVlIHsKIAotICAgIFUzMiAgICAgZHdWYWx1ZTsKKwl1MzIgZHdWYWx1ZTsKIAogfSBTQ21kVmFsdWUsICAqUFNDbWRWYWx1ZTsKIApAQCAtNDE4LDQ2ICs0MTcsNDYgQEAKIAogCiBzdHJ1Y3Qgdmlhd2dldF9ob3N0YXBkX3BhcmFtIHsKLQlVMzIgY21kOwotCVU4IHN0YV9hZGRyWzZdOworCXUzMiBjbWQ7CisJdTggc3RhX2FkZHJbNl07CiAJdW5pb24gewogCQlzdHJ1Y3QgewotCQkJVTE2IGFpZDsKLQkJCVUxNiBjYXBhYmlsaXR5OwotCQkJVTggdHhfc3VwcF9yYXRlczsKKwkJCXUxNiBhaWQ7CisJCQl1MTYgY2FwYWJpbGl0eTsKKwkJCXU4IHR4X3N1cHBfcmF0ZXM7CiAJCX0gYWRkX3N0YTsKIAkJc3RydWN0IHsKLQkJCVUzMiBpbmFjdGl2ZV9zZWM7CisJCQl1MzIgaW5hY3RpdmVfc2VjOwogCQl9IGdldF9pbmZvX3N0YTsKIAkJc3RydWN0IHsKLQkJCVU4IGFsZzsKLQkJCVUzMiBmbGFnczsKLQkJCVUzMiBlcnI7Ci0JCQlVOCBpZHg7Ci0JCQlVOCBzZXFbOF07Ci0JCQlVMTYga2V5X2xlbjsKLQkJCVU4IGtleVswXTsKKwkJCXU4IGFsZzsKKwkJCXUzMiBmbGFnczsKKwkJCXUzMiBlcnI7CisJCQl1OCBpZHg7CisJCQl1OCBzZXFbOF07CisJCQl1MTYga2V5X2xlbjsKKwkJCXU4IGtleVswXTsKIAkJfSBjcnlwdDsKIAkJc3RydWN0IHsKLQkJCVUzMiBmbGFnc19hbmQ7Ci0JCQlVMzIgZmxhZ3Nfb3I7CisJCQl1MzIgZmxhZ3NfYW5kOworCQkJdTMyIGZsYWdzX29yOwogCQl9IHNldF9mbGFnc19zdGE7CiAJCXN0cnVjdCB7Ci0JCQlVMTYgcmlkOwotCQkJVTE2IGxlbjsKLQkJCVU4IGRhdGFbMF07CisJCQl1MTYgcmlkOworCQkJdTE2IGxlbjsKKwkJCXU4IGRhdGFbMF07CiAJCX0gcmlkOwogCQlzdHJ1Y3QgewotCQkJVTggbGVuOwotCQkJVTggZGF0YVswXTsKKwkJCXU4IGxlbjsKKwkJCXU4IGRhdGFbMF07CiAJCX0gZ2VuZXJpY19lbGVtOwogCQlzdHJ1Y3QgewotCQkJVTE2IGNtZDsKLQkJCVUxNiByZWFzb25fY29kZTsKKwkJCXUxNiBjbWQ7CisJCQl1MTYgcmVhc29uX2NvZGU7CiAJCX0gbWxtZTsKIAkJc3RydWN0IHsKLQkJCVU4IHNzaWRfbGVuOwotCQkJVTggc3NpZFszMl07CisJCQl1OCBzc2lkX2xlbjsKKwkJCXU4IHNzaWRbMzJdOwogCQl9IHNjYW5fcmVxOwogCX0gdTsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2lvY3RsLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2lvY3RsLmMKaW5kZXggNDA0Mjg3Yy4uNTYyNGE0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9pb2N0bC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaW9jdGwuYwpAQCAtNzAsMTYgKzcwLDE2IEBACiAgICAgU05vZGVMaXN0ICAgICAgICAgICBzTm9kZUxpc3Q7CiAgICAgUFNCU1NJRExpc3QgICAgICAgICBwTGlzdDsKICAgICBQU05vZGVMaXN0ICAgICAgICAgIHBOb2RlTGlzdDsKLSAgICBVSU5UICAgICAgICAgICAgICAgIGNiTGlzdENvdW50OworICAgIHVuc2lnbmVkIGludCBjYkxpc3RDb3VudDsKICAgICBQS25vd25CU1MgICAgICAgICAgIHBCU1M7CiAgICAgUEtub3duTm9kZURCICAgICAgICBwTm9kZTsKLSAgICBVSU5UICAgICAgICAgICAgICAgIGlpLCBqajsKKyAgICB1bnNpZ25lZCBpbnQgaWksIGpqOwogICAgIFNDbWRMaW5rU3RhdHVzICAgICAgc0xpbmtTdGF0dXM7Ci0gICAgQllURSAgICAgICAgICAgICAgICBhYnlTdXBwUmF0ZXNbXSA9IHtXTEFOX0VJRF9TVVBQX1JBVEVTLCA0LCAweDAyLCAweDA0LCAweDBCLCAweDE2fTsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGFieU51bGxBZGRyW10gPSB7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07Ci0gICAgRFdPUkQgICAgICAgICAgICAgICBkd0tleUluZGV4PSAwOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYWJ5U2NhblNTSURbV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1NTSURfTUFYTEVOICsgMV07Ci0gICAgTE9ORyAgICAgICAgICAgICAgICBsZEJtOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5U3VwcFJhdGVzW10gPSB7V0xBTl9FSURfU1VQUF9SQVRFUywgNCwgMHgwMiwgMHgwNCwgMHgwQiwgMHgxNn07CisgICAgdW5zaWduZWQgY2hhciBhYnlOdWxsQWRkcltdID0gezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OworICAgIHVuc2lnbmVkIGxvbmcgZHdLZXlJbmRleD0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVNjYW5TU0lEW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9TU0lEX01BWExFTiArIDFdOworICAgIGxvbmcgICAgICAgICAgICAgICAgbGRCbTsKIAogICAgIHBSZXEtPndSZXN1bHQgPSAwOwogCkBAIC05OSwxNyArOTksMTcgQEAKICAgICAgICAgICAgIG1lbWNweShhYnlTY2FuU1NJRCwgcEl0ZW1TU0lELCBwSXRlbVNTSUQtPmxlbiArIFdMQU5fSUVIRFJfTEVOKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChwRGV2aWNlLT5iTUFDU3VzcGVuZCA9PSBUUlVFKSB7Ci0gICAgICAgICAgICBpZiAocERldmljZS0+YlJhZGlvT2ZmID09IFRSVUUpCisgICAgICAgIGlmIChwRGV2aWNlLT5iTUFDU3VzcGVuZCA9PSB0cnVlKSB7CisgICAgICAgICAgICBpZiAocERldmljZS0+YlJhZGlvT2ZmID09IHRydWUpCiAgICAgICAgICAgICAgICAgQ0FSRGJSYWRpb1Bvd2VyT24ocERldmljZSk7CiAgICAgICAgICAgICB2TWdyVGltZXJJbml0KHBEZXZpY2UpOwogICAgICAgICAgICAgTUFDdkludEVuYWJsZShwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBJTVJfTUFTS19WQUxVRSk7CiAgICAgICAgICAgICBhZGRfdGltZXIoJnBNZ210LT5zVGltZXJTZWNvbmRDYWxsYmFjayk7Ci0gICAgICAgICAgICBwRGV2aWNlLT5iTUFDU3VzcGVuZCA9IEZBTFNFOworICAgICAgICAgICAgcERldmljZS0+Yk1BQ1N1c3BlbmQgPSBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKICAgICAgICAgaWYgKG1lbWNtcChwTWdtdC0+YWJ5Q3VyckJTU0lELCAmYWJ5TnVsbEFkZHJbMF0sIDYpID09IDApCi0gICAgICAgICAgICBCU1N2Q2xlYXJCU1NMaXN0KCh2b2lkICopcERldmljZSwgRkFMU0UpOworICAgICAgICAgICAgQlNTdkNsZWFyQlNTTGlzdCgodm9pZCAqKXBEZXZpY2UsIGZhbHNlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgQlNTdkNsZWFyQlNTTGlzdCgodm9pZCAqKXBEZXZpY2UsIHBEZXZpY2UtPmJMaW5rUGFzcyk7CiAKQEAgLTEzMCw3ICsxMzAsNyBAQAogCQkJYnJlYWs7CiAJCX07CiAKLSAgICAgICAgICBpZihzWm9uZVR5cGVDbWQuYldyaXRlPT1UUlVFKSB7CisgICAgICAgICAgaWYoc1pvbmVUeXBlQ21kLmJXcml0ZT09dHJ1ZSkgewogCSAgLy8vLy8vd3JpdGUgem9uZXR5cGUKICAgICAgICAgICAgICAgICBpZihzWm9uZVR5cGVDbWQuWm9uZVR5cGUgPT0gWm9uZVR5cGVfVVNBKSB7CiAgICAgICAgICAgICAgICAgICAvL3NldCB0byBVU0EKQEAgLTE0Nyw3ICsxNDcsNyBAQAogICAgICAgICAgICAgfQogCWVsc2UgewogICAgICAgICAgIC8vLy8vLy9yZWFkIHpvbmV0eXBlCi0JICBCWVRFICAgICAgICAgICAgICAgICAgICAgICB6b25ldHlwZT0wOworCSAgdW5zaWduZWQgY2hhciB6b25ldHlwZT0wOwogCiAKICAgICAgICAgICAgaWYoem9uZXR5cGUgPT0gMHgwMCkgIHsgLy9VU0EKQEAgLTE3NCwxMyArMTc0LDEzIEBACiAKICAgICBjYXNlIFdMQU5fQ01EX0JTU19KT0lOOgogCi0gICAgICAgIGlmIChwRGV2aWNlLT5iTUFDU3VzcGVuZCA9PSBUUlVFKSB7Ci0gICAgICAgICAgICBpZiAocERldmljZS0+YlJhZGlvT2ZmID09IFRSVUUpCisgICAgICAgIGlmIChwRGV2aWNlLT5iTUFDU3VzcGVuZCA9PSB0cnVlKSB7CisgICAgICAgICAgICBpZiAocERldmljZS0+YlJhZGlvT2ZmID09IHRydWUpCiAgICAgICAgICAgICAgICAgQ0FSRGJSYWRpb1Bvd2VyT24ocERldmljZSk7CiAgICAgICAgICAgICB2TWdyVGltZXJJbml0KHBEZXZpY2UpOwogICAgICAgICAgICAgTUFDdkludEVuYWJsZShwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBJTVJfTUFTS19WQUxVRSk7CiAgICAgICAgICAgICBhZGRfdGltZXIoJnBNZ210LT5zVGltZXJTZWNvbmRDYWxsYmFjayk7Ci0gICAgICAgICAgICBwRGV2aWNlLT5iTUFDU3VzcGVuZCA9IEZBTFNFOworICAgICAgICAgICAgcERldmljZS0+Yk1BQ1N1c3BlbmQgPSBmYWxzZTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmc0pvaW5DbWQsIHBSZXEtPmRhdGEsIHNpemVvZihTQ21kQlNTSm9pbikpKSB7CkBAIC0xOTksNyArMTk5LDcgQEAKIAkgICAgICAgIHBNZ210LT5lQ29uZmlnTW9kZSA9IFdNQUNfQ09ORklHX0VTU19TVEE7CiAJICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJpb2N0IHNldCB0byBTVEEgbW9kZVxuIik7CiAJICAgIH0KLQkgICAgaWYgKHNKb2luQ21kLmJQU0VuYWJsZSA9PSBUUlVFKSB7CisJICAgIGlmIChzSm9pbkNtZC5iUFNFbmFibGUgPT0gdHJ1ZSkgewogICAgICAgICAgICAgcERldmljZS0+ZVBTTW9kZSA9IFdNQUNfUE9XRVJfRkFTVDsKIC8vICAgICAgICAgICAgcERldmljZS0+ZVBTTW9kZSA9IFdNQUNfUE9XRVJfTUFYOwogICAgICAgICAgICAgcE1nbXQtPndMaXN0ZW5JbnRlcnZhbCA9IDI7CkBAIC0yMTEsMTIgKzIxMSwxMiBAQAogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiUG93ZXIgU2F2aW5nIE9mZiBcbiIpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHNKb2luQ21kLmJTaGFyZUtleUF1dGggPT0gVFJVRSl7Ci0gICAgICAgICAgICBwTWdtdC0+YlNoYXJlS2V5QWxnb3JpdGhtID0gVFJVRTsKKyAgICAgICAgaWYgKHNKb2luQ21kLmJTaGFyZUtleUF1dGggPT0gdHJ1ZSl7CisgICAgICAgICAgICBwTWdtdC0+YlNoYXJlS2V5QWxnb3JpdGhtID0gdHJ1ZTsKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlNoYXJlIEtleSBcbiIpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9IEZBTFNFOworICAgICAgICAgICAgcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9IGZhbHNlOwogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiT3BlbiBTeXN0ZW0gXG4iKTsKICAgICAgICAgfQogCSAgICBwRGV2aWNlLT51Q2hhbm5lbCA9IHNKb2luQ21kLnVDaGFubmVsOwpAQCAtMjM1LDggKzIzNSw4IEBACiAJCQlyZXN1bHQgPSAtRUZBVUxUOwogCQkJYnJlYWs7CiAJCX07Ci0JICAgIGlmIChzV0VQQ21kLmJFbmFibGVXZXAgIT0gVFJVRSkgewotICAgICAgICAgICAgcERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPSBGQUxTRTsKKwkgICAgaWYgKHNXRVBDbWQuYkVuYWJsZVdlcCAhPSB0cnVlKSB7CisgICAgICAgICAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IGZhbHNlOwogICAgICAgICAgICAgcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkOwogICAgICAgICAgICAgTUFDdkRpc2FibGVEZWZhdWx0S2V5KHBEZXZpY2UtPlBvcnRPZmZzZXQpOwogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiV0VQIGZ1bmN0aW9uIGRpc2FibGUuIFxuIik7CkBAIC0yNTcsMTUgKzI1NywxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHdLZXlJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNXRVBDbWQuYXVXZXBLZXlMZW5ndGhbaWldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQQllURSkmc1dFUENtZC5hYnlXZXBLZXlbaWldWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKikmc1dFUENtZC5hYnlXZXBLZXlbaWldWzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0VZX0NUTF9XRVAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5Qb3J0T2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YnlMb2NhbElEKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBwRGV2aWNlLT5ieUtleUluZGV4ID0gc1dFUENtZC5ieUtleUluZGV4OwotICAgICAgICBwRGV2aWNlLT5iVHJhbnNtaXRLZXkgPSBUUlVFOwotICAgICAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IFRSVUU7CisgICAgICAgIHBEZXZpY2UtPmJUcmFuc21pdEtleSA9IHRydWU7CisgICAgICAgIHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID0gdHJ1ZTsKICAgICAgICAgcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOwogCiAgICAgICAgIGJyZWFrOwpAQCAtMjg2LDggKzI4Niw4IEBACiAgICAgICAgICAgICBzTGlua1N0YXR1cy5ieVN0YXRlID0gQURIT0NfU1RBUlRFRDsKIAogICAgICAgICBzTGlua1N0YXR1cy51Q2hhbm5lbCA9IHBNZ210LT51Q3VyckNoYW5uZWw7Ci0gICAgICAgIGlmIChwRGV2aWNlLT5iTGlua1Bhc3MgPT0gVFJVRSkgewotICAgICAgICAgICAgc0xpbmtTdGF0dXMuYkxpbmsgPSBUUlVFOworICAgICAgICBpZiAocERldmljZS0+YkxpbmtQYXNzID09IHRydWUpIHsKKyAgICAgICAgICAgIHNMaW5rU3RhdHVzLmJMaW5rID0gdHJ1ZTsKICAJCSAgICBwSXRlbVNTSUQgPSAoUFdMQU5fSUVfU1NJRClwTWdtdC0+YWJ5Q3VyclNTSUQ7CiAJCSAgICBtZW1jcHkoc0xpbmtTdGF0dXMuYWJ5U1NJRCwgcEl0ZW1TU0lELT5hYnlTU0lELCBwSXRlbVNTSUQtPmxlbik7CiAJCSAgICBtZW1jcHkoc0xpbmtTdGF0dXMuYWJ5QlNTSUQsIHBNZ210LT5hYnlDdXJyQlNTSUQsIFdMQU5fQlNTSURfTEVOKTsKQEAgLTI5NSw3ICsyOTUsNyBAQAogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgTGluayBTdWNjZXNzICEgXG4iKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHNMaW5rU3RhdHVzLmJMaW5rID0gRkFMU0U7CisgICAgICAgICAgICBzTGlua1N0YXR1cy5iTGluayA9IGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIocFJlcS0+ZGF0YSwgJnNMaW5rU3RhdHVzLCBzaXplb2YoU0NtZExpbmtTdGF0dXMpKSkgewogCQkJcmVzdWx0ID0gLUVGQVVMVDsKQEAgLTM0MCw4ICszNDAsOCBAQAogICAgIAkJICAgIHBMaXN0LT5zQlNTSURMaXN0W2lpXS53QmVhY29uSW50ZXJ2YWwgPSBwQlNTLT53QmVhY29uSW50ZXJ2YWw7CiAgICAgCQkgICAgcExpc3QtPnNCU1NJRExpc3RbaWldLndDYXBJbmZvID0gcEJTUy0+d0NhcEluZm87CiAvLyAgICAJCSAgICBwTGlzdC0+c0JTU0lETGlzdFtpaV0udVJTU0kgPSBwQlNTLT51UlNTSTsKLSAgICAJCSAgICBSRnZSU1NJVG9kQm0ocERldmljZSwgKEJZVEUpKHBCU1MtPnVSU1NJKSwgJmxkQm0pOwotICAgIAkJICAgIHBMaXN0LT5zQlNTSURMaXN0W2lpXS51UlNTSSA9IChVSU5UKWxkQm07CisgICAgCQkgICAgUkZ2UlNTSVRvZEJtKHBEZXZpY2UsICh1bnNpZ25lZCBjaGFyKShwQlNTLT51UlNTSSksICZsZEJtKTsKKyAgICAJCSAgICBwTGlzdC0+c0JTU0lETGlzdFtpaV0udVJTU0kgPSAodW5zaWduZWQgaW50KWxkQm07CiAgICAgCQkgICAgbWVtY3B5KHBMaXN0LT5zQlNTSURMaXN0W2lpXS5hYnlCU1NJRCwgcEJTUy0+YWJ5QlNTSUQsIFdMQU5fQlNTSURfTEVOKTsKICAgICAJCSAgICBwSXRlbVNTSUQgPSAoUFdMQU5fSUVfU1NJRClwQlNTLT5hYnlTU0lEOwogICAgIAkJICAgIG1lbXNldChwTGlzdC0+c0JTU0lETGlzdFtpaV0uYWJ5U1NJRCwgMCwgV0xBTl9TU0lEX01BWExFTiArIDEpOwpAQCAtMzUzLDEwICszNTMsMTAgQEAKICAgICAJCSAgICAgICAgcExpc3QtPnNCU1NJRExpc3RbaWldLmJ5TmV0VHlwZSA9IEFESE9DOwogICAgIAkJICAgIH0KICAgICAJCSAgICBpZiAoV0xBTl9HRVRfQ0FQX0lORk9fUFJJVkFDWShwQlNTLT53Q2FwSW5mbykpIHsKLSAgICAJCSAgICAgICAgcExpc3QtPnNCU1NJRExpc3RbaWldLmJXRVBPbiA9IFRSVUU7CisgICAgCQkgICAgICAgIHBMaXN0LT5zQlNTSURMaXN0W2lpXS5iV0VQT24gPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAJCSAgICAgICAgcExpc3QtPnNCU1NJRExpc3RbaWldLmJXRVBPbiA9IEZBTFNFOworICAgIAkJICAgICAgICBwTGlzdC0+c0JTU0lETGlzdFtpaV0uYldFUE9uID0gZmFsc2U7CiAgICAgCQkgICAgfQogICAgIAkJICAgIGlpICsrOwogICAgIAkJICAgIGlmIChpaSA+PSBwTGlzdC0+dUl0ZW0pCkBAIC0zOTEsMTYgKzM5MSwxNiBAQAogICAgICAgICBuZXRpZl9zdG9wX3F1ZXVlKHBEZXZpY2UtPmRldik7CiAKICAgICAgICAgc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci0gICAgICAgIGlmIChwRGV2aWNlLT5iUmFkaW9PZmYgPT0gRkFMU0UpIHsKKyAgICAgICAgaWYgKHBEZXZpY2UtPmJSYWRpb09mZiA9PSBmYWxzZSkgewogICAgICAgICAgICAgQ0FSRGJSYWRpb1Bvd2VyT2ZmKHBEZXZpY2UpOwogICAgICAgICB9Ci0gICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IEZBTFNFOworICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBmYWxzZTsKICAgICAgICAgbWVtc2V0KHBNZ210LT5hYnlDdXJyQlNTSUQsIDAsIDYpOwogICAgICAgICBwTWdtdC0+ZUN1cnJTdGF0ZSA9IFdNQUNfU1RBVEVfSURMRTsKICAgICAgICAgZGVsX3RpbWVyKCZwRGV2aWNlLT5zVGltZXJDb21tYW5kKTsKICAgICAgICAgZGVsX3RpbWVyKCZwTWdtdC0+c1RpbWVyU2Vjb25kQ2FsbGJhY2spOwotICAgICAgICBwRGV2aWNlLT5iQ21kUnVubmluZyA9IEZBTFNFOwotICAgICAgICBwRGV2aWNlLT5iTUFDU3VzcGVuZCA9IFRSVUU7CisgICAgICAgIHBEZXZpY2UtPmJDbWRSdW5uaW5nID0gZmFsc2U7CisgICAgICAgIHBEZXZpY2UtPmJNQUNTdXNwZW5kID0gdHJ1ZTsKICAgICAgICAgTUFDdkludERpc2FibGUocERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgICAgIHNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAKQEAgLTQxMCwxMyArNDEwLDEzIEBACiAKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiV0xBTl9DTURfU1RBUlRfTUFDXG4iKTsKIAotICAgICAgICBpZiAocERldmljZS0+Yk1BQ1N1c3BlbmQgPT0gVFJVRSkgewotICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJSYWRpb09mZiA9PSBUUlVFKQorICAgICAgICBpZiAocERldmljZS0+Yk1BQ1N1c3BlbmQgPT0gdHJ1ZSkgeworICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJSYWRpb09mZiA9PSB0cnVlKQogICAgICAgICAgICAgICAgIENBUkRiUmFkaW9Qb3dlck9uKHBEZXZpY2UpOwogICAgICAgICAgICAgdk1nclRpbWVySW5pdChwRGV2aWNlKTsKICAgICAgICAgICAgIE1BQ3ZJbnRFbmFibGUocERldmljZS0+UG9ydE9mZnNldCwgSU1SX01BU0tfVkFMVUUpOwogICAgICAgICAgICAgYWRkX3RpbWVyKCZwTWdtdC0+c1RpbWVyU2Vjb25kQ2FsbGJhY2spOwotICAgICAgICAgICAgcERldmljZS0+Yk1BQ1N1c3BlbmQgPSBGQUxTRTsKKyAgICAgICAgICAgIHBEZXZpY2UtPmJNQUNTdXNwZW5kID0gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKQEAgLTQ1OCwxMSArNDU4LDExIEBACiAJCX07CiAKIAkJaWYgKHNWYWx1ZS5kd1ZhbHVlID09IDEpIHsKLSAgICAgICAgICAgIHBEZXZpY2UtPmJFbmFibGU4MDIxeCA9IFRSVUU7CisgICAgICAgICAgICBwRGV2aWNlLT5iRW5hYmxlODAyMXggPSB0cnVlOwogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiRW5hYmxlIDgwMi4xeFxuIik7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBwRGV2aWNlLT5iRW5hYmxlODAyMXggPSBGQUxTRTsKKyAgICAgICAgICAgIHBEZXZpY2UtPmJFbmFibGU4MDIxeCA9IGZhbHNlOwogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiRGlzYWJsZSA4MDIuMXhcbiIpOwogICAgICAgICB9CiAKQEAgLTQ3OCwxMSArNDc4LDExIEBACiAJCX07CiAKIAkJaWYgKHNWYWx1ZS5kd1ZhbHVlID09IDEpIHsKLSAgICAgICAgICAgIHBEZXZpY2UtPmJFbmFibGVIb3N0V0VQID0gVFJVRTsKKyAgICAgICAgICAgIHBEZXZpY2UtPmJFbmFibGVIb3N0V0VQID0gdHJ1ZTsKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkVuYWJsZSBIb3N0V0VQXG4iKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHBEZXZpY2UtPmJFbmFibGVIb3N0V0VQID0gRkFMU0U7CisgICAgICAgICAgICBwRGV2aWNlLT5iRW5hYmxlSG9zdFdFUCA9IGZhbHNlOwogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiRGlzYWJsZSBIb3N0V0VQXG4iKTsKICAgICAgICAgfQogCkBAIC00OTgsMTEgKzQ5OCwxMSBAQAogCQlpZiAoc1ZhbHVlLmR3VmFsdWUgPT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAidXAgd3BhZGV2XG4iKTsKIAkJICAgbWVtY3B5KHBEZXZpY2UtPndwYWRldi0+ZGV2X2FkZHIsIHBEZXZpY2UtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQkJICAgcERldmljZS0+YldQQURFVlVwID0gVFJVRTsKKwkJICAgcERldmljZS0+YldQQURFVlVwID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImNsb3NlIHdwYWRldlxuIik7Ci0JICAgcERldmljZS0+YldQQURFVlVwID0gRkFMU0U7CisJICAgcERldmljZS0+YldQQURFVlVwID0gZmFsc2U7CiAgICAgICAgIH0KIAogICAgICAgICBicmVhazsKQEAgLTUxMCw3ICs1MTAsNyBAQAogICAgIGNhc2UgV0xBTl9DTURfQVBfU1RBUlQ6CiAKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiV0xBTl9DTURfQVBfU1RBUlRcbiIpOwotICAgICAgICBpZiAocERldmljZS0+YlJhZGlvT2ZmID09IFRSVUUpIHsKKyAgICAgICAgaWYgKHBEZXZpY2UtPmJSYWRpb09mZiA9PSB0cnVlKSB7CiAgICAgICAgICAgICBDQVJEYlJhZGlvUG93ZXJPbihwRGV2aWNlKTsKICAgICAgICAgICAgIHZNZ3JUaW1lckluaXQocERldmljZSk7CiAgICAgICAgICAgICBNQUN2SW50RW5hYmxlKHBEZXZpY2UtPlBvcnRPZmZzZXQsIElNUl9NQVNLX1ZBTFVFKTsKQEAgLTU1NCwxMiArNTU0LDEyIEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBNZ210LT53SUJTU0JlYWNvblBlcmlvZCA9IDEwMDsKIAotICAgICAgICBpZiAoc1N0YXJ0QVBDbWQuYlNoYXJlS2V5QXV0aCA9PSBUUlVFKXsKLSAgICAgICAgICAgIHBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0gPSBUUlVFOworICAgICAgICBpZiAoc1N0YXJ0QVBDbWQuYlNoYXJlS2V5QXV0aCA9PSB0cnVlKXsKKyAgICAgICAgICAgIHBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0gPSB0cnVlOwogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiU2hhcmUgS2V5IFxuIik7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBwTWdtdC0+YlNoYXJlS2V5QWxnb3JpdGhtID0gRkFMU0U7CisgICAgICAgICAgICBwTWdtdC0+YlNoYXJlS2V5QWxnb3JpdGhtID0gZmFsc2U7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJPcGVuIFN5c3RlbSBcbiIpOwogICAgICAgICB9CiAgICAgICAgIG1lbWNweShwTWdtdC0+YWJ5SUJTU1N1cHBSYXRlcywgYWJ5U3VwcFJhdGVzLCA2KTsKQEAgLTYzNSw5ICs2MzUsOSBAQAogICAgIAkJICAgIHBOb2RlTGlzdC0+c05vZGVMaXN0W2pqXS53QUlEID0gcE5vZGUtPndBSUQ7CiAgICAgCQkgICAgbWVtY3B5KHBOb2RlTGlzdC0+c05vZGVMaXN0W2pqXS5hYnlNQUNBZGRyLCBwTm9kZS0+YWJ5TUFDQWRkciwgV0xBTl9BRERSX0xFTik7CiAgICAgCQkgICAgcE5vZGVMaXN0LT5zTm9kZUxpc3RbampdLndUeERhdGFSYXRlID0gcE5vZGUtPndUeERhdGFSYXRlOwotICAgIAkJICAgIHBOb2RlTGlzdC0+c05vZGVMaXN0W2pqXS53SW5BY3RpdmVDb3VudCA9IChXT1JEKXBOb2RlLT51SW5BY3RpdmVDb3VudDsKLSAgICAJCSAgICBwTm9kZUxpc3QtPnNOb2RlTGlzdFtqal0ud0VuUXVldWVDbnQgPSAoV09SRClwTm9kZS0+d0VuUXVldWVDbnQ7Ci0gICAgCQkgICAgcE5vZGVMaXN0LT5zTm9kZUxpc3RbampdLndGbGFncyA9IChXT1JEKXBOb2RlLT5kd0ZsYWdzOworICAgIAkJICAgIHBOb2RlTGlzdC0+c05vZGVMaXN0W2pqXS53SW5BY3RpdmVDb3VudCA9ICh1bnNpZ25lZCBzaG9ydClwTm9kZS0+dUluQWN0aXZlQ291bnQ7CisgICAgCQkgICAgcE5vZGVMaXN0LT5zTm9kZUxpc3RbampdLndFblF1ZXVlQ250ID0gKHVuc2lnbmVkIHNob3J0KXBOb2RlLT53RW5RdWV1ZUNudDsKKyAgICAJCSAgICBwTm9kZUxpc3QtPnNOb2RlTGlzdFtqal0ud0ZsYWdzID0gKHVuc2lnbmVkIHNob3J0KXBOb2RlLT5kd0ZsYWdzOwogICAgIAkJICAgIHBOb2RlTGlzdC0+c05vZGVMaXN0W2pqXS5iUFdCaXRPbiA9IHBOb2RlLT5iUFNFbmFibGU7CiAgICAgCQkgICAgcE5vZGVMaXN0LT5zTm9kZUxpc3RbampdLmJ5S2V5SW5kZXggPSBwTm9kZS0+YnlLZXlJbmRleDsKICAgICAJCSAgICBwTm9kZUxpc3QtPnNOb2RlTGlzdFtqal0ud1dlcEtleUxlbmd0aCA9IHBOb2RlLT51V2VwS2V5TGVuZ3RoOwpAQCAtNjUyLDcgKzY1Miw3IEBACiAgICAgCQkgICAgcE5vZGVMaXN0LT5zTm9kZUxpc3RbampdLmJJc0luRmFsbGJhY2sgPSBwTm9kZS0+YklzSW5GYWxsYmFjazsKICAgICAJCSAgICBwTm9kZUxpc3QtPnNOb2RlTGlzdFtqal0udVR4RmFpbHVyZXMgPSBwTm9kZS0+dVR4RmFpbHVyZXM7CiAgICAgCQkgICAgcE5vZGVMaXN0LT5zTm9kZUxpc3RbampdLnVUeEF0dGVtcHRzID0gcE5vZGUtPnVUeEF0dGVtcHRzOwotICAgIAkJICAgIHBOb2RlTGlzdC0+c05vZGVMaXN0W2pqXS53RmFpbHVyZVJhdGlvID0gKFdPUkQpcE5vZGUtPnVGYWlsdXJlUmF0aW87CisgICAgCQkgICAgcE5vZGVMaXN0LT5zTm9kZUxpc3RbampdLndGYWlsdXJlUmF0aW8gPSAodW5zaWduZWQgc2hvcnQpcE5vZGUtPnVGYWlsdXJlUmF0aW87CiAgICAgCQkgICAgamogKys7CiAgICAgCQkgICAgaWYgKGpqID49IHBOb2RlTGlzdC0+dUl0ZW0pCiAgICAgCQkgICAgICAgIGJyZWFrOwpAQCAtNjcyLDE0ICs2NzIsMTQgQEAKIAkgICAgd3BhX1Jlc3VsdC5wcm90byA9IDA7CiAJICAgIHdwYV9SZXN1bHQua2V5X21nbXQgPSAwOwogCSAgICB3cGFfUmVzdWx0LmVhcF90eXBlID0gMDsKLQkgICAgd3BhX1Jlc3VsdC5hdXRoZW50aWNhdGVkID0gRkFMU0U7Ci0JICAgICAgcERldmljZS0+ZldQQV9BdXRoZW5lZCA9IEZBTFNFOworCSAgICB3cGFfUmVzdWx0LmF1dGhlbnRpY2F0ZWQgPSBmYWxzZTsKKwkgICAgICBwRGV2aWNlLT5mV1BBX0F1dGhlbmVkID0gZmFsc2U7CiAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmd3BhX1Jlc3VsdCwgcFJlcS0+ZGF0YSwgc2l6ZW9mKHdwYV9SZXN1bHQpKSkgewogICAgICAgICAgICAgcmVzdWx0ID0gLUVGQVVMVDsKIAkJCWJyZWFrOwogCQl9CiAKLWlmKHdwYV9SZXN1bHQuYXV0aGVudGljYXRlZD09VFJVRSkgeworaWYod3BhX1Jlc3VsdC5hdXRoZW50aWNhdGVkPT10cnVlKSB7CiAgICAjaWZkZWYgU25kRXZ0X1RvQVBJCiAgICB7CiAgICAgIHVuaW9uIGl3cmVxX2RhdGEgICAgICB3cnF1OwpAQCAtNjkyLDcgKzY5Miw3IEBACiAgICAgIHdpcmVsZXNzX3NlbmRfZXZlbnQocERldmljZS0+ZGV2LCBJV0VWQ1VTVE9NLCAmd3JxdSwgcEl0ZW1TU0lELT5hYnlTU0lEKTsKICAgIH0KICAgICNlbmRpZgotICAgICAgICAgcERldmljZS0+ZldQQV9BdXRoZW5lZCA9IFRSVUU7ICAgICAgICAgICAvL2lzIHN1Y2Nlc3NmdWwgcGVlciB0byB3cGFfUmVzdWx0LmF1dGhlbnRpY2F0ZWQ/CisgICAgICAgICBwRGV2aWNlLT5mV1BBX0F1dGhlbmVkID0gdHJ1ZTsgICAgICAgICAgIC8vaXMgc3VjY2Vzc2Z1bCBwZWVyIHRvIHdwYV9SZXN1bHQuYXV0aGVudGljYXRlZD8KIH0KIAogICAgICAgICAvL3ByaW50aygiZ2V0IHByaXZhdGUgd3BhX3N1cHBsaWNhbnQgYW5ub3VuY2UgV1BBIFNNXG4iKTsKQEAgLTcwMCw3ICs3MDAsNyBAQAogCS8vcHJpbnRrKCJ3cGEtLT5wcm90bz0lZFxuIix3cGFfUmVzdWx0LnByb3RvKTsKIAkvL3ByaW50aygid3BhLS0+a2V5LW1nbXQ9JWRcbiIsd3BhX1Jlc3VsdC5rZXlfbWdtdCk7CiAJLy9wcmludGsoIndwYS0tPmVhcF90eXBlPSVkXG4iLHdwYV9SZXN1bHQuZWFwX3R5cGUpOwotCS8vcHJpbnRrKCJ3cGEtLT5hdXRoZW50aWNhdGVkIGlzICVzXG4iLCh3cGFfUmVzdWx0LmF1dGhlbnRpY2F0ZWQ9PVRSVUUpPyJUUlVFIjoiRkFMU0UiKTsKKwkvL3ByaW50aygid3BhLS0+YXV0aGVudGljYXRlZCBpcyAlc1xuIiwod3BhX1Jlc3VsdC5hdXRoZW50aWNhdGVkPT10cnVlKT8idHJ1ZSI6ImZhbHNlIik7CiAKIAlwUmVxLT53UmVzdWx0ID0gMDsKICAgICAgICAgYnJlYWs7CkBAIC03MTcsOSArNzE3LDkgQEAKIHZvaWQKIHZDb25maWdXRVBLZXkgKAogICAgIFBTRGV2aWNlIHBEZXZpY2UsCi0gICAgRFdPUkQgICAgZHdLZXlJbmRleCwKLSAgICBQQllURSAgICBwYnlLZXksCi0gICAgVUxPTkcgICAgdUtleUxlbmd0aAorICAgIHVuc2lnbmVkIGxvbmcgZHdLZXlJbmRleCwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlLZXksCisgICAgdW5zaWduZWQgbG9uZyB1S2V5TGVuZ3RoCiAgICAgKQogewogICAgIGludCBpaTsKQEAgLTcyOCwxNSArNzI4LDE1IEBACiAgICAgbWVtc2V0KCZwRGV2aWNlLT5hYnlXZXBLZXlbZHdLZXlJbmRleF1bMF0sIDAsIFdMQU5fV0VQTUFYX0tFWUxFTik7CiAgICAgbWVtY3B5KCZwRGV2aWNlLT5hYnlXZXBLZXlbZHdLZXlJbmRleF1bMF0sIHBieUtleSwgdUtleUxlbmd0aCk7CiAKLSAgICBwRGV2aWNlLT5iV2VwS2V5QXZhaWxhYmxlW2R3S2V5SW5kZXhdID0gVFJVRTsKKyAgICBwRGV2aWNlLT5iV2VwS2V5QXZhaWxhYmxlW2R3S2V5SW5kZXhdID0gdHJ1ZTsKICAgICBwRGV2aWNlLT5hdVdlcEtleUxlbmd0aFtkd0tleUluZGV4XSA9IHVLZXlMZW5ndGg7CiAKICAgICBNQUN2U2V0RGVmYXVsdEtleUVudHJ5KHBEZXZpY2UtPlBvcnRPZmZzZXQsIHVLZXlMZW5ndGgsIGR3S2V5SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoUERXT1JEKSAmKHBEZXZpY2UtPmFieVdlcEtleVtkd0tleUluZGV4XVswXSksIHBEZXZpY2UtPmJ5TG9jYWxJRCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyAqKSAmKHBEZXZpY2UtPmFieVdlcEtleVtkd0tleUluZGV4XVswXSksIHBEZXZpY2UtPmJ5TG9jYWxJRCk7CiAKICAgICBpZiAocERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPCBOZGlzODAyXzExRW5jcnlwdGlvbk5vdFN1cHBvcnRlZCkgewogICAgICAgICBmb3IoaWk9MDsgaWk8TUFYX0dST1VQX0tFWTsgaWkrKykgewotICAgICAgICAgICAgaWYgKChwRGV2aWNlLT5iV2VwS2V5QXZhaWxhYmxlW2lpXSA9PSBUUlVFKSAmJgorICAgICAgICAgICAgaWYgKChwRGV2aWNlLT5iV2VwS2V5QXZhaWxhYmxlW2lpXSA9PSB0cnVlKSAmJgogICAgICAgICAgICAgICAgIChwRGV2aWNlLT5hdVdlcEtleUxlbmd0aFtpaV0gPT0gV0xBTl9XRVAyMzJfS0VZTEVOKSkgewogICAgICAgICAgICAgICAgIHBEZXZpY2UtPnVDdXJyZW50V0VQTW9kZSA9IFRYX1dFUF9TVzIzMjsKICAgICAgICAgICAgICAgICBNQUN2RGlzYWJsZURlZmF1bHRLZXkocERldmljZS0+UG9ydE9mZnNldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2lvY3RsLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2lvY3RsLmgKaW5kZXggMGQxMGMyYS4uYmE4NTAxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9pb2N0bC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaW9jdGwuaApAQCAtNDUsOSArNDUsOSBAQAogLyoKIHZvaWQgdkNvbmZpZ1dFUEtleSAoCiAgICAgUFNEZXZpY2UgcERldmljZSwKLSAgICBEV09SRCAgICBkd0tleUluZGV4LAotICAgIFBCWVRFICAgIHBieUtleSwKLSAgICBVTE9ORyAgICB1S2V5TGVuZ3RoCisgICAgdW5zaWduZWQgbG9uZyBkd0tleUluZGV4LAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUtleSwKKyAgICB1bnNpZ25lZCBsb25nIHVLZXlMZW5ndGgKICAgICApOwogKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9pd2N0bC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9pd2N0bC5jCmluZGV4IGNmNjkwMzQuLjQzMjI3NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaXdjdGwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2l3Y3RsLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKICNlbmRpZgogCiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KLWV4dGVybiBXT1JEIFR4UmF0ZV9pd2NvbmZpZzsvLzIwMDgtNS04IDxhZGQ+IGJ5IGNoZXN0ZXIKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBUeFJhdGVfaXdjb25maWc7Ly8yMDA4LTUtOCA8YWRkPiBieSBjaGVzdGVyCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgRGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTk5LDE2ICs5OSwxNiBAQAogCSAgICAgICBlbHNlCiAJCSAgIHBEZXZpY2UtPnNjU3RhdGlzdGljLkxpbmtRdWFsaXR5ID0gKDk2LXBEZXZpY2UtPmJ5Q3VyclNRKSoxMDAvNzY7CiAJICAgfQotCSAgIGlmKHBEZXZpY2UtPmJMaW5rUGFzcyAhPVRSVUUpCisJICAgaWYocERldmljZS0+YkxpbmtQYXNzICE9dHJ1ZSkKIAkgICAgICAgcERldmljZS0+c2NTdGF0aXN0aWMuTGlua1F1YWxpdHkgPSAwOwogCSAgI2VuZGlmCiAJICAgaWYocERldmljZS0+c2NTdGF0aXN0aWMuTGlua1F1YWxpdHkgPiAxMDApCiAgICAJICAgICAgIHBEZXZpY2UtPnNjU3RhdGlzdGljLkxpbmtRdWFsaXR5ID0gMTAwOwotICAgICAgICAgICAgICAgcERldmljZS0+d3N0YXRzLnF1YWwucXVhbCA9KEJZVEUpIHBEZXZpY2UtPnNjU3RhdGlzdGljLkxpbmtRdWFsaXR5OworICAgICAgICAgICAgICAgcERldmljZS0+d3N0YXRzLnF1YWwucXVhbCA9KHVuc2lnbmVkIGNoYXIpIHBEZXZpY2UtPnNjU3RhdGlzdGljLkxpbmtRdWFsaXR5OwogCSNlbHNlCiAJcERldmljZS0+d3N0YXRzLnF1YWwucXVhbCA9IHBEZXZpY2UtPmJ5Q3VyclNROwogCSNlbmRpZgotCVJGdlJTU0lUb2RCbShwRGV2aWNlLCAoQllURSkocERldmljZS0+dUN1cnJSU1NJKSwgJmxkQm0pOworCVJGdlJTU0lUb2RCbShwRGV2aWNlLCAodW5zaWduZWQgY2hhcikocERldmljZS0+dUN1cnJSU1NJKSwgJmxkQm0pOwogCXBEZXZpY2UtPndzdGF0cy5xdWFsLmxldmVsID0gbGRCbTsKIAkvL3BEZXZpY2UtPndzdGF0cy5xdWFsLmxldmVsID0gMHgxMDAgLSBwRGV2aWNlLT51Q3VyclJTU0k7CiAJcERldmljZS0+d3N0YXRzLnF1YWwubm9pc2UgPSAwOwpAQCAtMTE2LDcgKzExNiw3IEBACiAJcERldmljZS0+d3N0YXRzLmRpc2NhcmQubndpZCA9IDA7CiAJcERldmljZS0+d3N0YXRzLmRpc2NhcmQuY29kZSA9IDA7CiAJcERldmljZS0+d3N0YXRzLmRpc2NhcmQuZnJhZ21lbnQgPSAwOwotCXBEZXZpY2UtPndzdGF0cy5kaXNjYXJkLnJldHJpZXMgPSAoVTMyKXBEZXZpY2UtPnNjU3RhdGlzdGljLmR3VHNyRXJyOworCXBEZXZpY2UtPndzdGF0cy5kaXNjYXJkLnJldHJpZXMgPSAodW5zaWduZWQgbG9uZylwRGV2aWNlLT5zY1N0YXRpc3RpYy5kd1RzckVycjsKIAlwRGV2aWNlLT53c3RhdHMuZGlzY2FyZC5taXNjID0gMDsKIAlwRGV2aWNlLT53c3RhdHMubWlzcy5iZWFjb24gPSAwOwogCkBAIC0xNzUsNyArMTc1LDcgQEAKIAlQU0RldmljZQkgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpbmV0ZGV2X3ByaXYoZGV2KTsKIAkgUFNNZ210T2JqZWN0ICAgICAgICBwTWdtdCA9ICYocERldmljZS0+c01nbXRPYmopOwogCXN0cnVjdCBpd19zY2FuX3JlcSAgKnJlcSA9IChzdHJ1Y3QgaXdfc2Nhbl9yZXEgKilleHRyYTsKLQlCWVRFICAgICAgICAgICAgICAgIGFieVNjYW5TU0lEW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9TU0lEX01BWExFTiArIDFdOworCXVuc2lnbmVkIGNoYXIgYWJ5U2NhblNTSURbV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1NTSURfTUFYTEVOICsgMV07CiAJUFdMQU5fSUVfU1NJRCAgICAgICBwSXRlbVNTSUQ9TlVMTDsKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIgU0lPQ1NJV1NDQU4gXG4iKTsKIApAQCAtMzA5LDcgKzMwOSw3IEBACiAgICAgICAgCQkvL0FERCBxdWFsaXR5CiAgICAgICAgICAgICBtZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwogCSAgICAgICAgaXdlLmNtZCA9IElXRVZRVUFMOwotCSAgICAgICAgUkZ2UlNTSVRvZEJtKHBEZXZpY2UsIChCWVRFKShwQlNTLT51UlNTSSksICZsZEJtKTsKKwkgICAgICAgIFJGdlJTU0lUb2RCbShwRGV2aWNlLCAodW5zaWduZWQgY2hhcikocEJTUy0+dVJTU0kpLCAmbGRCbSk7CiAJCSAgICBpd2UudS5xdWFsLmxldmVsID0gbGRCbTsKIAkgICAgICAgIGl3ZS51LnF1YWwubm9pc2UgPSAwOwogLy8yMDA4LTA0MDktMDEsIDxBZGQ+IGJ5IEVpbnNuIExpdQpAQCAtNDI2LDcgKzQyNiw3IEBACiAJCQkgIHBEZXZpY2UtPnVDaGFubmVsID0gY2hhbm5lbDsKICAJCQkgLy8yMDA3LTAyMDctMDQsPEFkZD4gYnkgRWluc25MaXUKIAkJCSAvL01ha2UgY2hhbmdlIGVmZmVjdCBhdCBvbmNlCi0JCQkgIHBEZXZpY2UtPmJDb21taXQgPSBUUlVFOworCQkJICBwRGV2aWNlLT5iQ29tbWl0ID0gdHJ1ZTsKIAkJfQogCX0KIApAQCAtNDg5LDcgKzQ4OSw3IEBACiAJICAgIGlmIChwTWdtdC0+ZUNvbmZpZ01vZGUgIT0gV01BQ19DT05GSUdfSUJTU19TVEEpIHsKICAgICAgICAgICAgIHBNZ210LT5lQ29uZmlnTW9kZSA9IFdNQUNfQ09ORklHX0lCU1NfU1RBOwogICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmZsYWdzICYgREVWSUNFX0ZMQUdTX09QRU5FRCkgewotCQkgICAgICAgIHBEZXZpY2UtPmJDb21taXQgPSBUUlVFOworCQkgICAgICAgIHBEZXZpY2UtPmJDb21taXQgPSB0cnVlOwogICAgCQkgICAgfQogCQl9CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInNldCBtb2RlIHRvIGFkLWhvYyBcbiIpOwpAQCAtNDk5LDcgKzQ5OSw3IEBACiAJICAgIGlmIChwTWdtdC0+ZUNvbmZpZ01vZGUgIT0gV01BQ19DT05GSUdfRVNTX1NUQSkgewogICAgICAgICAgICAgcE1nbXQtPmVDb25maWdNb2RlID0gV01BQ19DT05GSUdfRVNTX1NUQTsKICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5mbGFncyAmIERFVklDRV9GTEFHU19PUEVORUQpIHsKLQkJICAgICAgICBwRGV2aWNlLT5iQ29tbWl0ID0gVFJVRTsKKwkJICAgICAgICBwRGV2aWNlLT5iQ29tbWl0ID0gdHJ1ZTsKICAgIAkJICAgIH0KIAkJfQogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJzZXQgbW9kZSB0byBpbmZyYXN0cnVjdHVyZSBcbiIpOwpAQCAtNTEzLDcgKzUxMyw3IEBACiAJICAgIGlmIChwTWdtdC0+ZUNvbmZpZ01vZGUgIT0gV01BQ19DT05GSUdfQVApIHsKICAgICAgICAgICAgIHBNZ210LT5lQ29uZmlnTW9kZSA9IFdNQUNfQ09ORklHX0FQOwogICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmZsYWdzICYgREVWSUNFX0ZMQUdTX09QRU5FRCkgewotCQkgICAgICAgIHBEZXZpY2UtPmJDb21taXQgPSBUUlVFOworCQkgICAgICAgIHBEZXZpY2UtPmJDb21taXQgPSB0cnVlOwogICAgCQkgICAgfQogCQl9CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInNldCBtb2RlIHRvIEFjY2VzcyBQb2ludCBcbiIpOwpAQCAtNTc3LDcgKzU3Nyw3IEBACiB7CiAJc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKikgZXh0cmE7CiAJaW50CQlpLGs7Ci0gICAgQllURSBhYnlTdXBwb3J0ZWRSYXRlc1sxM109IHsweDAyLCAweDA0LCAweDBCLCAweDE2LCAweDBjLCAweDEyLCAweDE4LCAweDI0LCAweDMwLCAweDQ4LCAweDYwLCAweDZDLCAweDkwfTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVN1cHBvcnRlZFJhdGVzWzEzXT0gezB4MDIsIDB4MDQsIDB4MEIsIDB4MTYsIDB4MGMsIDB4MTIsIDB4MTgsIDB4MjQsIDB4MzAsIDB4NDgsIDB4NjAsIDB4NkMsIDB4OTB9OwogCiAKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIgU0lPQ0dJV1JBTkdFIFxuIik7CkBAIC02ODgsNyArNjg4LDcgQEAKIAlQU0RldmljZQkgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpbmV0ZGV2X3ByaXYoZGV2KTsKICAgICBQU01nbXRPYmplY3QgICAgICAgIHBNZ210ID0gJihwRGV2aWNlLT5zTWdtdE9iaik7CiAgICAgaW50IHJjID0gMDsKLSAgICBCWVRFICAgICAgICAgICAgICAgICBaZXJvQlNTSURbV0xBTl9CU1NJRF9MRU5dPXsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH07CisgICAgdW5zaWduZWQgY2hhciBaZXJvQlNTSURbV0xBTl9CU1NJRF9MRU5dPXsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH07CiAKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIgU0lPQ1NJV0FQIFxuIik7CiBpZiAocE1nbXQtPmVTY2FuU3RhdGUgPT0gIFdNQUNfSVNfU0NBTk5JTkcpIHsKQEAgLTcwMSwxMiArNzAxLDEyIEBACiAJZWxzZSB7CiAJCW1lbWNweShwTWdtdC0+YWJ5RGVzaXJlQlNTSUQsIHdycS0+c2FfZGF0YSwgNik7CiAJCSAgICAgICAgICAgICAgICAvLzIwMDgtMDQwOS0wNSwgPEFkZD4gYnkgRWluc24gTGl1Ci0JCWlmKChwRGV2aWNlLT5iTGlua1Bhc3MgPT0gVFJVRSkgJiYKKwkJaWYoKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSB0cnVlKSAmJgogICAgICAgICAgICAgICAgICAgICAgKG1lbWNtcChwTWdtdC0+YWJ5RGVzaXJlQlNTSUQsIHBNZ210LT5hYnlDdXJyQlNTSUQsIDYpPT0gMCkpewogCQkJcmV0dXJuIHJjOwogCQkJfQogCS8vbWlrZSA6YWRkCi0JIGlmICgoSVNfQlJPQURDQVNUX0FERFJFU1MocE1nbXQtPmFieURlc2lyZUJTU0lEKSkgfHwKKwkgaWYgKChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihwTWdtdC0+YWJ5RGVzaXJlQlNTSUQpKSB8fAogCSAgICAgKG1lbWNtcChwTWdtdC0+YWJ5RGVzaXJlQlNTSUQsIFplcm9CU1NJRCwgNikgPT0gMCkpewogCSAgICAgIFBSSU5UX0soIlNJT0NTSVdBUDppbnZhbGlkIGRlc2lyZWQgQlNTSUQgcmV0dXJuIVxuIik7CiAgICAgICAgICAgICAgICByZXR1cm4gcmM7CkBAIC03MTQsMTAgKzcxNCwxMCBAQAogICAgICAgIC8vbWlrZSBhZGQ6IGlmIGRlc2lyZWQgQVAgaXMgaGlkZGVuIHNzaWQodGhlcmUgYXJlIHR3byBzYW1lIEJTU0lEIGluIGxpc3QpLAogICAgICAgIC8vICAgICAgICAgICAgICAgICAgdGhlbiBpZ25vcmUsYmVjYXVzZSB5b3UgZG9uJ3Qga25vd24gd2hpY2ggb25lIHRvIGJlIGNvbm5lY3Qgd2l0aD8/CiAgICAgICAgCXsKLSAgICAgICAgICAgVUlOVCAgICAgICAgICAgIGlpICwgdVNhbWVCc3NpZE51bT0wOworICAgICAgICAgICB1bnNpZ25lZCBpbnQgaWkgLCB1U2FtZUJzc2lkTnVtPTA7CiAgICAgICAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCBNQVhfQlNTX05VTTsgaWkrKykgewogICAgICAgICAgICAgICAgICAgICAgaWYgKHBNZ210LT5zQlNTTGlzdFtpaV0uYkFjdGl2ZSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgSVNfRVRIX0FERFJFU1NfRVFVQUwocE1nbXQtPnNCU1NMaXN0W2lpXS5hYnlCU1NJRCxwTWdtdC0+YWJ5RGVzaXJlQlNTSUQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAhY29tcGFyZV9ldGhlcl9hZGRyKHBNZ210LT5zQlNTTGlzdFtpaV0uYWJ5QlNTSUQsIHBNZ210LT5hYnlEZXNpcmVCU1NJRCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHVTYW1lQnNzaWROdW0rKzsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgIH0KQEAgLTcyOCw3ICs3MjgsNyBAQAogICAgICAgIAl9CiAKICAgICAgICAgaWYgKHBEZXZpY2UtPmZsYWdzICYgREVWSUNFX0ZMQUdTX09QRU5FRCkgewotCQkgICAgcERldmljZS0+YkNvbW1pdCA9IFRSVUU7CisJCSAgICBwRGV2aWNlLT5iQ29tbWl0ID0gdHJ1ZTsKICAgIAkJfQogCX0KIAlyZXR1cm4gcmM7CkBAIC03NTEsNyArNzUxLDcgQEAKIAogICAgIG1lbWNweSh3cnEtPnNhX2RhdGEsIHBNZ210LT5hYnlDdXJyQlNTSUQsIDYpOwogICAgLy8yMDA4LTA0MTAsPE1vZGlmeT4gYnkgRWluc24gTGl1Ci0gICAgaWYgKChwRGV2aWNlLT5iTGlua1Bhc3MgPT0gRkFMU0UpICYmIChwTWdtdC0+ZUN1cnJNb2RlICE9IFdNQUNfTU9ERV9FU1NfQVApKQorICAgIGlmICgocERldmljZS0+YkxpbmtQYXNzID09IGZhbHNlKSAmJiAocE1nbXQtPmVDdXJyTW9kZSAhPSBXTUFDX01PREVfRVNTX0FQKSkKICAgICAgICAgbWVtc2V0KHdycS0+c2FfZGF0YSwgMCwgNik7CiAKICAgICBpZiAocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX0FQKSB7CkBAIC04MzAsMTEgKzgzMCwxMSBAQAogICAgIFBTTWdtdE9iamVjdCAgICAgICAgcE1nbXQgPSAmKHBEZXZpY2UtPnNNZ210T2JqKTsKICAgICBQV0xBTl9JRV9TU0lEICAgICAgIHBJdGVtU1NJRDsKICAgLy8yMDA4LTA0MDktMDUsIDxBZGQ+IGJ5IEVpbnNuIExpdQotICAgIEJZVEUgIGxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGxlbjsKIAogCiAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIFNJT0NTSVdFU1NJRCBcbiIpOwotIHBEZXZpY2UtPmZXUEFfQXV0aGVuZWQgPSBGQUxTRTsKKyBwRGV2aWNlLT5mV1BBX0F1dGhlbmVkID0gZmFsc2U7CiBpZiAocE1nbXQtPmVTY2FuU3RhdGUgPT0gIFdNQUNfSVNfU0NBTk5JTkcpIHsKICAgICAgICAgLy8gSW4gc2Nhbm5pbmcuLgogICAgICBwcmludGsoIlNJT0NTSVdFU1NJRCg/PyktLT5JbiBzY2FubmluZy4uLlxuIik7CkBAIC04NDgsNyArODQ4LDcgQEAKIAkgICAgUFJJTlRfSygic2V0IGVzc2lkIHRvICdhbnknIFxuIik7CiAgICAgICAgICAgICNpZmRlZiBXUEFfU1VQUExJQ0FOVF9EUklWRVJfV0VYVF9TVVBQT1JUCiAgICAgICAgICAgICAgLy9Vbmtub3duIGRlc2lyZWQgQVAsc28gaGVyZSBuZWVkIG5vdCBhc3NvY2lhdGU/PwotICAgICAgICAgICAgLy9pZihwRGV2aWNlLT5iV1BBU3VwcFdleHRFbmFibGVkID09IFRSVUUpICB7CisgICAgICAgICAgICAvL2lmKHBEZXZpY2UtPmJXUEFTdXBwV2V4dEVuYWJsZWQgPT0gdHJ1ZSkgIHsKICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgLy8gfQogICAgICAgICAgICAgI2VuZGlmCkBAIC04NjgsNyArODY4LDcgQEAKIAlwcmludGsoInNldCBlc3NpZCB0byAlcyBcbiIscEl0ZW1TU0lELT5hYnlTU0lEKTsKIAkJLy8yMDA4LTA0MDktMDUsIDxBZGQ+IGJ5IEVpbnNuIExpdQogICAgICAgIGxlbj0ocEl0ZW1TU0lELT5sZW4gPiAoKFBXTEFOX0lFX1NTSUQpcE1nbXQtPmFieUN1cnJTU0lEKS0+bGVuKT9wSXRlbVNTSUQtPmxlbjooKFBXTEFOX0lFX1NTSUQpcE1nbXQtPmFieUN1cnJTU0lEKS0+bGVuOwotICAgaWYoKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSBUUlVFKSAmJgorICAgaWYoKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSB0cnVlKSAmJgogICAJKG1lbWNtcChwSXRlbVNTSUQtPmFieVNTSUQsKChQV0xBTl9JRV9TU0lEKXBNZ210LT5hYnlDdXJyU1NJRCktPmFieVNTSUQsbGVuKT09MCkpCiAgICAgICAgICByZXR1cm4gMDsKIApAQCAtODgxLDEyICs4ODEsMTIgQEAKICNpZmRlZiBXUEFfU1VQUExJQ0FOVF9EUklWRVJfV0VYVF9TVVBQT1JUCiAgLy9XZXh0IHdpbCBvcmRlciBhbm90aGVyIGNvbW1hbmQgb2Ygc2l3YXAgdG8gbGluayB3aXRoIGRlc2lyZWQgQVAsCiAgLy9zbyBoZXJlIG5lZWQgbm90IGFzc29jaWF0ZT8/Ci0gIGlmKHBEZXZpY2UtPmJXUEFTdXBwV2V4dEVuYWJsZWQgPT0gVFJVRSkgIHsKKyAgaWYocERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9PSB0cnVlKSAgewogICAgICAgICAvKioqKioqKnNlYXJjaCBpZiAgaW4gaGlkZGVuIHNzaWQgbW9kZSAqKioqLwogICAgICAgICB7CiAgICAgICAgICAgIFBLbm93bkJTUyAgICAgICBwQ3VyciA9IE5VTEw7Ci0gICAgICAgICAgIEJZVEUgICAgICAgICAgICAgICAgICAgYWJ5VG1wRGVzaXJlU1NJRFtXTEFOX0lFSERSX0xFTiArIFdMQU5fU1NJRF9NQVhMRU4gKyAxXTsKLQkgIFVJTlQgICAgICAgICAgICBpaSAsIHVTYW1lQnNzaWROdW09MDsKKyAgICAgICAgICAgdW5zaWduZWQgY2hhciBhYnlUbXBEZXNpcmVTU0lEW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9TU0lEX01BWExFTiArIDFdOworCSAgdW5zaWduZWQgaW50IGlpICwgdVNhbWVCc3NpZE51bT0wOwogCiAJICBtZW1jcHkoYWJ5VG1wRGVzaXJlU1NJRCxwTWdtdC0+YWJ5RGVzaXJlU1NJRCxzaXplb2YoYWJ5VG1wRGVzaXJlU1NJRCkpOwogICAgICAgICAgICAgcEN1cnIgPSBCU1NwU2VhcmNoQlNTTGlzdChwRGV2aWNlLApAQCAtOTA2LDcgKzkwNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIGJ5IG1lYW5zIG9mIGp1ZGdpbmcgaWYgdGhlcmUgYXJlIHR3byBzYW1lIEJTU0lEIGV4aXN0IGluIGxpc3QgPwogICAgICAgICAgICAgICAgICAgZm9yIChpaSA9IDA7IGlpIDwgTUFYX0JTU19OVU07IGlpKyspIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChwTWdtdC0+c0JTU0xpc3RbaWldLmJBY3RpdmUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIElTX0VUSF9BRERSRVNTX0VRVUFMKHBNZ210LT5zQlNTTGlzdFtpaV0uYWJ5QlNTSUQsIHBDdXJyLT5hYnlCU1NJRCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICFjb21wYXJlX2V0aGVyX2FkZHIocE1nbXQtPnNCU1NMaXN0W2lpXS5hYnlCU1NJRCwgcEN1cnItPmFieUJTU0lEKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgdVNhbWVCc3NpZE51bSsrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgfQpAQCAtOTI3LDcgKzkyNyw3IEBACiAJfQogCiAgICAgaWYgKHBEZXZpY2UtPmZsYWdzICYgREVWSUNFX0ZMQUdTX09QRU5FRCkgewotCSAgICBwRGV2aWNlLT5iQ29tbWl0ID0gVFJVRTsKKwkgICAgcERldmljZS0+YkNvbW1pdCA9IHRydWU7CiAJfQogCiAKQEAgLTk4MSw3ICs5ODEsNyBAQAogICAgIGludCByYyA9IDA7CiAJdTgJYnJhdGUgPSAwOwogCWludAlpOwotCUJZVEUgYWJ5U3VwcG9ydGVkUmF0ZXNbMTNdPSB7MHgwMiwgMHgwNCwgMHgwQiwgMHgxNiwgMHgwYywgMHgxMiwgMHgxOCwgMHgyNCwgMHgzMCwgMHg0OCwgMHg2MCwgMHg2QywgMHg5MH07CisJdW5zaWduZWQgY2hhciBhYnlTdXBwb3J0ZWRSYXRlc1sxM109IHsweDAyLCAweDA0LCAweDBCLCAweDE2LCAweDBjLCAweDEyLCAweDE4LCAweDI0LCAweDMwLCAweDQ4LCAweDYwLCAweDZDLCAweDkwfTsKIAogCiAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIFNJT0NTSVdSQVRFIFxuIik7CkBAIC0xMDMzLDcgKzEwMzMsNyBAQAogCQkvLyBGaXhlZCBtb2RlCiAJCS8vIE9uZSByYXRlLCBmaXhlZAogCXByaW50aygiUmF0ZSBGaXhcbiIpOwotCQlwRGV2aWNlLT5iRml4UmF0ZSA9IFRSVUU7CisJCXBEZXZpY2UtPmJGaXhSYXRlID0gdHJ1ZTsKICAgICAgICAgaWYgKChwRGV2aWNlLT5ieUJCVHlwZSA9PSBCQl9UWVBFXzExQikmJiAoYnJhdGUgPiAzKSkgewogCSAgICBwRGV2aWNlLT51Q29ubmVjdGlvblJhdGUgPSAzOwogICAgICAgICB9CkBAIC0xMDQ0LDcgKzEwNDQsNyBAQAogCiAJfQogCWVsc2UgewotICAgICAgICBwRGV2aWNlLT5iRml4UmF0ZSA9IEZBTFNFOworICAgICAgICBwRGV2aWNlLT5iRml4UmF0ZSA9IGZhbHNlOwogICAgICAgICBwRGV2aWNlLT51Q29ubmVjdGlvblJhdGUgPSAxMzsKIAlwcmludGsoImF1dG8gcmF0ZTpjb25uZWN0aW9uX3JhdGUgaXMgMTNcbiIpOwogICAgICB9CkBAIC0xMDY4LDExICsxMDY4LDExIEBACiAKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIgU0lPQ0dJV1JBVEUgXG4iKTsKICAgICB7Ci0gICAgICAgIEJZVEUgYWJ5U3VwcG9ydGVkUmF0ZXNbMTNdPSB7MHgwMiwgMHgwNCwgMHgwQiwgMHgxNiwgMHgwYywgMHgxMiwgMHgxOCwgMHgyNCwgMHgzMCwgMHg0OCwgMHg2MCwgMHg2QywgMHg5MH07CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYWJ5U3VwcG9ydGVkUmF0ZXNbMTNdPSB7MHgwMiwgMHgwNCwgMHgwQiwgMHgxNiwgMHgwYywgMHgxMiwgMHgxOCwgMHgyNCwgMHgzMCwgMHg0OCwgMHg2MCwgMHg2QywgMHg5MH07CiAJICAgIGludCBicmF0ZSA9IDA7CiAvLzIwMDgtNS04IDxtb2RpZnk+IGJ5IGNoZXN0ZXIKIGlmKHBEZXZpY2UtPmJMaW5rUGFzcyl7Ci1pZihwRGV2aWNlLT5iRml4UmF0ZSA9PSBUUlVFKXsKK2lmKHBEZXZpY2UtPmJGaXhSYXRlID09IHRydWUpewogCQlpZiAocERldmljZS0+dUNvbm5lY3Rpb25SYXRlIDwgMTMpIHsKIAkgICAgICAgIGJyYXRlID0gYWJ5U3VwcG9ydGVkUmF0ZXNbcERldmljZS0+dUNvbm5lY3Rpb25SYXRlXTsKIAkgICAgfWVsc2UgewpAQCAtMTEwOCw4ICsxMTA4LDggQEAKIC8vICAgICAgICAgICAgICAgIGJyYXRlID0gYWJ5U3VwcG9ydGVkUmF0ZXNbcERldmljZS0+d0N1cnJlbnRSYXRlXTsKIAkgICAgd3JxLT52YWx1ZSA9IGJyYXRlICogNTAwMDAwOwogCSAgICAvLyBJZiBtb3JlIHRoYW4gb25lIHJhdGUsIHNldCBhdXRvCi0JICAgIGlmIChwRGV2aWNlLT5iRml4UmF0ZSA9PSBUUlVFKQotCSAgICAgICAgd3JxLT5maXhlZCA9IFRSVUU7CisJICAgIGlmIChwRGV2aWNlLT5iRml4UmF0ZSA9PSB0cnVlKQorCSAgICAgICAgd3JxLT5maXhlZCA9IHRydWU7CiAgICAgfQogCiAKQEAgLTEyOTQsNyArMTI5NCw3IEBACiB7CiAgICAgUFNEZXZpY2UJICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKW5ldGRldl9wcml2KGRldik7CiAgICAgUFNNZ210T2JqZWN0ICAgICAgICBwTWdtdCA9ICYocERldmljZS0+c01nbXRPYmopOwotCURXT1JEIGR3S2V5SW5kZXggPSAoRFdPUkQpKHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpOworCXVuc2lnbmVkIGxvbmcgZHdLZXlJbmRleCA9ICh1bnNpZ25lZCBsb25nKSh3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKTsKIAlpbnQgaWksdXUsIHJjID0gMDsKIAlpbnQgaW5kZXggPSAod3JxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCk7CiAKQEAgLTEzNTgsNyArMTM1OCw3IEBACiAgICAgICAgIGlmIChwRGV2aWNlLT5mbGFncyAmIERFVklDRV9GTEFHU19PUEVORUQpIHsKICAgICAgICAgICAgIHNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogICAgICAgICAgICAgS2V5YlNldERlZmF1bHRLZXkoJihwRGV2aWNlLT5zS2V5KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRFdPUkQpKGR3S2V5SW5kZXggfCAoMSA8PCAzMSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKShkd0tleUluZGV4IHwgKDEgPDwgMzEpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAl3cnEtPmxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmFieUtleSwKQEAgLTEzNjgsMzggKzEzNjgsMzggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAgICAgICAgIH0KLSAgICAgICAgcERldmljZS0+YnlLZXlJbmRleCA9IChCWVRFKWR3S2V5SW5kZXg7CisgICAgICAgIHBEZXZpY2UtPmJ5S2V5SW5kZXggPSAodW5zaWduZWQgY2hhcilkd0tleUluZGV4OwogICAgICAgICBwRGV2aWNlLT51S2V5TGVuZ3RoID0gd3JxLT5sZW5ndGg7Ci0gICAgICAgIHBEZXZpY2UtPmJUcmFuc21pdEtleSA9IFRSVUU7Ci0gICAgICAgIHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID0gVFJVRTsKKyAgICAgICAgcERldmljZS0+YlRyYW5zbWl0S2V5ID0gdHJ1ZTsKKyAgICAgICAgcERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPSB0cnVlOwogICAgICAgICBwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQ7CiAKIAkJfWVsc2UgaWYoaW5kZXg+MCl7CiAJLy93aGVuIHRoZSBsZW5ndGggaXMgMCB0aGUgcmVxdWVzdCBvbmx5IGNoYW5nZXMgdGhlIGRlZmF1bHQgdHJhbnNtaXQga2V5IGluZGV4CiAJLy9jaGVjayB0aGUgbmV3IGtleSBoYXMgYSBub24gemVybyBsZW5nZXQKLQlpZihwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZT09RkFMU0UpCisJaWYocERldmljZS0+YkVuY3J5cHRpb25FbmFibGU9PWZhbHNlKQogCXsKIAkJcmMgPSAtRUlOVkFMOwogICAgICAgICAJcmV0dXJuIHJjOwogCX0KIAlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJKdXN0IHNldCBEZWZhdWx0IGtleSBJbmRleDpcbiIpOwogCXBrZXl0YWI9JihwRGV2aWNlLT5zS2V5LktleVRhYmxlW01BWF9LRVlfVEFCTEUtMV0pOwotCWlmKHBrZXl0YWItPkdyb3VwS2V5WyhCWVRFKWR3S2V5SW5kZXhdLnVLZXlMZW5ndGg9PTApeworCWlmKHBrZXl0YWItPkdyb3VwS2V5Wyh1bnNpZ25lZCBjaGFyKWR3S2V5SW5kZXhdLnVLZXlMZW5ndGg9PTApewogCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJEZWZhdWx0IGtleSBsZW4gaXMgMFxuIik7CiAJCXJjID0gLUVJTlZBTDsKICAgICAgIAkgIAlyZXR1cm4gcmM7CiAJCX0KLQkgcERldmljZS0+YnlLZXlJbmRleCA9KEJZVEUpZHdLZXlJbmRleDsKKwkgcERldmljZS0+YnlLZXlJbmRleCA9KHVuc2lnbmVkIGNoYXIpZHdLZXlJbmRleDsKIAkgcGtleXRhYi0+ZHdHVEtleUluZGV4ID1kd0tleUluZGV4IHwgKDEgPDwgMzEpOwotCSBwa2V5dGFiLT5Hcm91cEtleVsoQllURSlkd0tleUluZGV4XS5kd0tleUluZGV4PWR3S2V5SW5kZXggfCAoMSA8PCAzMSk7CisJIHBrZXl0YWItPkdyb3VwS2V5Wyh1bnNpZ25lZCBjaGFyKWR3S2V5SW5kZXhdLmR3S2V5SW5kZXg9ZHdLZXlJbmRleCB8ICgxIDw8IDMxKTsKIAl9CiAKIH1lbHNlIHsvL2Rpc2FibGUgdGhlIGtleQogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJEaXNhYmxlIFdFUCBmdW5jdGlvblxuIik7Ci0JaWYocERldmljZS0+YkVuY3J5cHRpb25FbmFibGU9PUZBTFNFKQorCWlmKHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlPT1mYWxzZSkKIAkJcmV0dXJuIDA7Ci0JcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9IEZBTFNFOwotICAgICAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IEZBTFNFOworCXBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0gPSBmYWxzZTsKKyAgICAgICAgcERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPSBmYWxzZTsKICAgICAgICAgcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkOwogICAgICAgICBpZiAocERldmljZS0+ZmxhZ3MgJiBERVZJQ0VfRkxBR1NfT1BFTkVEKSB7CiAgICAgICAgICAgICBzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKQEAgLTE0NTAsNyArMTQ1MCw3IEBACiAgICAgICAgIGlmIChwRGV2aWNlLT5mbGFncyAmIERFVklDRV9GTEFHU19PUEVORUQpIHsKICAgICAgICAgICAgIHNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogICAgICAgICAgICAgS2V5YlNldERlZmF1bHRLZXkoJihwRGV2aWNlLT5zS2V5KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRFdPUkQpKHBEZXZpY2UtPmJ5S2V5SW5kZXggfCAoMSA8PCAzMSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKShwRGV2aWNlLT5ieUtleUluZGV4IHwgKDEgPDwgMzEpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT51S2V5TGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YWJ5S2V5LApAQCAtMTQ2MCwxMCArMTQ2MCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKICAgICAgICAgfQotICAgICAgICBwRGV2aWNlLT5ieUtleUluZGV4ID0gKEJZVEUpZHdLZXlJbmRleDsKKyAgICAgICAgcERldmljZS0+YnlLZXlJbmRleCA9ICh1bnNpZ25lZCBjaGFyKWR3S2V5SW5kZXg7CiAgICAgICAgIHBEZXZpY2UtPnVLZXlMZW5ndGggPSB3cnEtPmxlbmd0aDsKLSAgICAgICAgcERldmljZS0+YlRyYW5zbWl0S2V5ID0gVFJVRTsKLSAgICAgICAgcERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPSBUUlVFOworICAgICAgICBwRGV2aWNlLT5iVHJhbnNtaXRLZXkgPSB0cnVlOworICAgICAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IHRydWU7CiAgICAgICAgIHBEZXZpY2UtPmVFbmNyeXB0aW9uU3RhdHVzID0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZDsKIAogCQkvLyBEbyB3ZSB3YW50IHRvIGp1c3Qgc2V0IHRoZSB0cmFuc21pdCBrZXkgaW5kZXggPwpAQCAtMTQ3OSw4ICsxNDc5LDggQEAKIAlpZih3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKXsKIAogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJEaXNhYmxlIFdFUCBmdW5jdGlvblxuIik7Ci0JCXBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0gPSBGQUxTRTsKLSAgICAgICAgcERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPSBGQUxTRTsKKwkJcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9IGZhbHNlOworICAgICAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IGZhbHNlOwogICAgICAgICBwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQ7CiAgICAgICAgIGlmIChwRGV2aWNlLT5mbGFncyAmIERFVklDRV9GTEFHU19PUEVORUQpIHsKICAgICAgICAgICAgIHNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwpAQCAtMTQ5MywxMSArMTQ5MywxMSBAQAogCiAJaWYod3JxLT5mbGFncyAmIElXX0VOQ09ERV9SRVNUUklDVEVEKSB7CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkVuYWJsZSBXRVAgJiBTaGFyZUtleSBTeXN0ZW1cbiIpOwotCQlwTWdtdC0+YlNoYXJlS2V5QWxnb3JpdGhtID0gVFJVRTsKKwkJcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9IHRydWU7CiAJfQogCWlmKHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfT1BFTikgewogCSAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJFbmFibGUgV0VQICYgT3BlbiBTeXN0ZW1cbiIpOwotCQlwTWdtdC0+YlNoYXJlS2V5QWxnb3JpdGhtID0gRkFMU0U7CisJCXBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0gPSBmYWxzZTsKIAl9CiAJcmV0dXJuIHJjOwogfQpAQCAtMTUxNSw3ICsxNTE1LDcgQEAKICAgICBQU01nbXRPYmplY3QgICAgICAgIHBNZ210ID0gJihwRGV2aWNlLT5zTWdtdE9iaik7CiAgICAgaW50IHJjID0gMDsKICAgICBjaGFyIGFieUtleVtXTEFOX1dFUDIzMl9LRVlMRU5dOwotCVVJTlQgaW5kZXggPSAoVUlOVCkod3JxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCk7CisJdW5zaWduZWQgaW50IGluZGV4ID0gKHVuc2lnbmVkIGludCkod3JxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCk7CiAJUFNLZXlJdGVtICAgcEtleSA9IE5VTEw7CiAKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIgU0lPQ0dJV0VOQ09ERVxuIik7CkBAIC0xNTQ5LDcgKzE1NDksNyBAQAogCWVsc2UKIAkJd3JxLT5mbGFncyB8PSAgSVdfRU5DT0RFX09QRU47CiAKLQlpZiAoS2V5YkdldEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwRGV2aWNlLT5hYnlCcm9hZGNhc3RBZGRyLCAoQllURSlpbmRleCAsICZwS2V5KSl7CisJaWYgKEtleWJHZXRLZXkoJihwRGV2aWNlLT5zS2V5KSwgcERldmljZS0+YWJ5QnJvYWRjYXN0QWRkciwgKHVuc2lnbmVkIGNoYXIpaW5kZXggLCAmcEtleSkpewogICAgICAgICB3cnEtPmxlbmd0aCA9IHBLZXktPnVLZXlMZW5ndGg7CiAgICAgICAgIG1lbWNweShhYnlLZXksIHBLZXktPmFieUtleSwgIHBLZXktPnVLZXlMZW5ndGgpOwogLy8yMDA3LTAyMDctMDYsPE1vZGlmeT4gYnkgRWluc25MaXUKQEAgLTE1ODQsNyArMTU4NCw3IEBACiAJUFNNZ210T2JqZWN0CQlwTWdtdCA9ICYocERldmljZS0+c01nbXRPYmopOwogCWNoYXIgYWJ5S2V5W1dMQU5fV0VQMjMyX0tFWUxFTl07CiAKLQlVSU5UIGluZGV4ID0gKFVJTlQpKHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpOworCXVuc2lnbmVkIGludCBpbmRleCA9ICh1bnNpZ25lZCBpbnQpKHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpOwogCVBTS2V5SXRlbQlwS2V5ID0gTlVMTDsKIAogCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiBTSU9DR0lXRU5DT0RFXG4iKTsKQEAgLTE2MjIsNyArMTYyMiw3IEBACiAJCQkJICBtZW1jcHkoYWJ5S2V5LCBwS2V5LT5hYnlLZXksCXBLZXktPnVLZXlMZW5ndGgpOwogCQkJCSAgbWVtY3B5KGV4dHJhLCAgYWJ5S2V5LCBXTEFOX1dFUDIzMl9LRVlMRU4pOwogCQkJICAgfQotCX1lbHNlIGlmIChLZXliR2V0S2V5KCYocERldmljZS0+c0tleSksIHBEZXZpY2UtPmFieUJyb2FkY2FzdEFkZHIsIChCWVRFKWluZGV4ICwgJnBLZXkpKXsKKwl9ZWxzZSBpZiAoS2V5YkdldEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwRGV2aWNlLT5hYnlCcm9hZGNhc3RBZGRyLCAodW5zaWduZWQgY2hhcilpbmRleCAsICZwS2V5KSl7CiAJCQl3cnEtPmxlbmd0aCA9IHBLZXktPnVLZXlMZW5ndGg7CiAJCQltZW1jcHkoYWJ5S2V5LCBwS2V5LT5hYnlLZXksICBwS2V5LT51S2V5TGVuZ3RoKTsKIAkJbWVtY3B5KGV4dHJhLCAgYWJ5S2V5LCBXTEFOX1dFUDIzMl9LRVlMRU4pOwpAQCAtMTcyOSw4ICsxNzI5LDggQEAKICAgICBsb25nIGxkQm07CiAKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIgU0lPQ0dJV1NFTlMgXG4iKTsKLSAgICBpZiAocERldmljZS0+YkxpbmtQYXNzID09IFRSVUUpIHsKLSAgICAgICAgUkZ2UlNTSVRvZEJtKHBEZXZpY2UsIChCWVRFKShwRGV2aWNlLT51Q3VyclJTU0kpLCAmbGRCbSk7CisgICAgaWYgKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSB0cnVlKSB7CisgICAgICAgIFJGdlJTU0lUb2RCbShwRGV2aWNlLCAodW5zaWduZWQgY2hhcikocERldmljZS0+dUN1cnJSU1NJKSwgJmxkQm0pOwogCSAgICB3cnEtPnZhbHVlID0gbGRCbTsKIAl9CiAJZWxzZSB7CkBAIC0xNzYzLDcgKzE3NjMsNyBAQAogCQl3cGFfdmVyc2lvbiA9IHdycS0+dmFsdWU7CiAJCWlmKHdycS0+dmFsdWUgPT0gSVdfQVVUSF9XUEFfVkVSU0lPTl9ESVNBQkxFRCkgewogCQkgICAgICAgUFJJTlRfSygiaXdjdGxfc2l3YXV0aDpzZXQgV1BBREVWIHRvIGRpc2FibGUgYXQgMT8/Pz8/P1xuIik7Ci0JCQkvL3BEZXZpY2UtPmJXUEFEZXZFbmFibGUgPSBGQUxTRTsKKwkJCS8vcERldmljZS0+YldQQURldkVuYWJsZSA9IGZhbHNlOwogCQl9CiAJCWVsc2UgaWYod3JxLT52YWx1ZSA9PSBJV19BVVRIX1dQQV9WRVJTSU9OX1dQQSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICBQUklOVF9LKCJpd2N0bF9zaXdhdXRoOnNldCBXUEFERVYgdG8gV1BBMSoqKioqKlxuIik7CkBAIC0xNzcxLDcgKzE3NzEsNyBAQAogCQllbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJTlRfSygiaXdjdGxfc2l3YXV0aDpzZXQgV1BBREVWIHRvIFdQQTIqKioqKipcbiIpOwogCQl9Ci0JCS8vcERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9VFJVRTsKKwkJLy9wRGV2aWNlLT5iV1BBU3VwcFdleHRFbmFibGVkID10cnVlOwogCQlicmVhazsKIAljYXNlIElXX0FVVEhfQ0lQSEVSX1BBSVJXSVNFOgogCQlwYWlyd2lzZSA9IHdycS0+dmFsdWU7CkBAIC0xODE4LDkgKzE4MTgsOSBAQAogCQlicmVhazsKIAljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6CiAJCWlmKHdycS0+dmFsdWU9PUlXX0FVVEhfQUxHX09QRU5fU1lTVEVNKXsKLQkJCXBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG09RkFMU0U7CisJCQlwTWdtdC0+YlNoYXJlS2V5QWxnb3JpdGhtPWZhbHNlOwogCQl9ZWxzZSBpZih3cnEtPnZhbHVlPT1JV19BVVRIX0FMR19TSEFSRURfS0VZKXsKLQkJCXBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG09VFJVRTsKKwkJCXBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG09dHJ1ZTsKIAkJfQogCQlicmVhazsKIAljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6CkBAIC0xODMzLDEzICsxODMzLDEzIEBACiAJCWJyZWFrOwogCWNhc2UgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQ6CiAJCXBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID0gISF3cnEtPnZhbHVlOwotCQlpZihwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9PSBGQUxTRSl7CisJCWlmKHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID09IGZhbHNlKXsKIAkJCXdwYV92ZXJzaW9uID0gMDsKIAkJCXBhaXJ3aXNlID0gMDsKIAkJCXBEZXZpY2UtPmVFbmNyeXB0aW9uU3RhdHVzID0gTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZDsKLQkJCXBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0gPSBGQUxTRTsKLQkJCXBNZ210LT5lQXV0aGVuTW9kZSA9IEZBTFNFOwotCQkJLy9wRGV2aWNlLT5iV1BBRGV2RW5hYmxlID0gRkFMU0U7CisJCQlwTWdtdC0+YlNoYXJlS2V5QWxnb3JpdGhtID0gZmFsc2U7CisJCQlwTWdtdC0+ZUF1dGhlbk1vZGUgPSBmYWxzZTsKKwkJCS8vcERldmljZS0+YldQQURldkVuYWJsZSA9IGZhbHNlOwogCQl9CiAKIAkJYnJlYWs7CkBAIC0xODUyLDkgKzE4NTIsOSBAQAogCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInBhaXJ3aXNlID0gJWRcbiIscGFpcndpc2UpOwogCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInBEZXZpY2UtPmVFbmNyeXB0aW9uU3RhdHVzID0gJWRcbiIscERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMpOwogCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInBNZ210LT5lQXV0aGVuTW9kZSAgPSAlZFxuIixwTWdtdC0+ZUF1dGhlbk1vZGUpOwotCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0gPSAlc1xuIixwTWdtdC0+YlNoYXJlS2V5QWxnb3JpdGhtPyJUUlVFIjoiRkFMU0UiKTsKLQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9ICVzXG4iLHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlPyJUUlVFIjoiRkFMU0UiKTsKLQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJwRGV2aWNlLT5iV1BBRGV2RW5hYmxlID0gJXNcbiIscERldmljZS0+YldQQURldkVuYWJsZT8iVFJVRSI6IkZBTFNFIik7CisJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAicE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9ICVzXG4iLHBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0/InRydWUiOiJmYWxzZSIpOworCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID0gJXNcbiIscERldmljZS0+YkVuY3J5cHRpb25FbmFibGU/InRydWUiOiJmYWxzZSIpOworCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInBEZXZpY2UtPmJXUEFEZXZFbmFibGUgPSAlc1xuIixwRGV2aWNlLT5iV1BBRGV2RW5hYmxlPyJ0cnVlIjoiZmFsc2UiKTsKICovCiAgICByZXR1cm4gcmV0OwogfQpAQCAtMjA1NSwxMiArMjA1NSwxMiBAQAogaWYoIHBEZXZpY2UtPmJ3ZXh0Y291bnQgPT0gNCkgewogICAgIHByaW50aygiU0lPQ1NJV0VOQ09ERUVYVDpFbmFibGUgV1BBIFdFWFQgU1VQUE9SVCEhISEhXG4iKTsKICBwRGV2aWNlLT5id2V4dGNvdW50PTA7Ci0gICBwRGV2aWNlLT5iV1BBU3VwcFdleHRFbmFibGVkID0gVFJVRTsKKyAgIHBEZXZpY2UtPmJXUEFTdXBwV2V4dEVuYWJsZWQgPSB0cnVlOwogCQkgfQogLy8qKioqKioKIAogCQlzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLSByZXQgPSB3cGFfc2V0X2tleXMocERldmljZSwgcGFyYW0sIFRSVUUpOworIHJldCA9IHdwYV9zZXRfa2V5cyhwRGV2aWNlLCBwYXJhbSwgdHJ1ZSk7CiAJCXNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAKIGVycm9yOgpAQCAtMjA5NiwxMCArMjA5NiwxMCBAQAogCXN3aXRjaChtbG1lLT5jbWQpewogCWNhc2UgSVdfTUxNRV9ERUFVVEg6CiAJCS8vdGhpcyBjb21tYW5kIHNlZW1zIHRvIGJlIG5vdCBjb21wbGV0ZSxwbGVhc2UgdGVzdCBpdCAtLWVpbnNubGl1Ci0JCS8vYlNjaGVkdWxlQ29tbWFuZCgodm9pZCAqKSBwRGV2aWNlLCBXTEFOX0NNRF9ERUFVVEgsIChQQllURSkmcmVhc29uKTsKKwkJLy9iU2NoZWR1bGVDb21tYW5kKCh2b2lkICopIHBEZXZpY2UsIFdMQU5fQ01EX0RFQVVUSCwgKHVuc2lnbmVkIGNoYXIgKikmcmVhc29uKTsKIAkJYnJlYWs7CiAJY2FzZSBJV19NTE1FX0RJU0FTU09DOgotCQlpZihwRGV2aWNlLT5iTGlua1Bhc3MgPT0gVFJVRSl7CisJCWlmKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSB0cnVlKXsKIAkJCQkJICBwcmludGsoIml3Y3RsX3Npd21sbWUtLS0+c2VuZCBESVNBU1NPQ0lBVEVcbiIpOwogCQkgIC8vY2xlYXIgcmVsYXRlZCBmbGFncwogCQkgICBtZW1zZXQocE1nbXQtPmFieURlc2lyZUJTU0lELCAweEZGLDYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9rZXkuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUva2V5LmMKaW5kZXggYmZjNWM1MC4uMGZmOGQ3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9rZXkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2tleS5jCkBAIC01OSwyMiArNTksMjIgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyB2b2lkCi1zX3ZDaGVja0tleVRhYmxlVmFsaWQgKFBTS2V5TWFuYWdlbWVudCBwVGFibGUsIERXT1JEX1BUUiBkd0lvQmFzZSkKK3NfdkNoZWNrS2V5VGFibGVWYWxpZCAoUFNLZXlNYW5hZ2VtZW50IHBUYWJsZSwgdW5zaWduZWQgbG9uZyBkd0lvQmFzZSkKIHsKICAgICBpbnQgaTsKIAogICAgIGZvciAoaT0wO2k8TUFYX0tFWV9UQUJMRTtpKyspIHsKLSAgICAgICAgaWYgKChwVGFibGUtPktleVRhYmxlW2ldLmJJblVzZSA9PSBUUlVFKSAmJgotICAgICAgICAgICAgKHBUYWJsZS0+S2V5VGFibGVbaV0uUGFpcndpc2VLZXkuYktleVZhbGlkID09IEZBTFNFKSAmJgotICAgICAgICAgICAgKHBUYWJsZS0+S2V5VGFibGVbaV0uR3JvdXBLZXlbMF0uYktleVZhbGlkID09IEZBTFNFKSAmJgotICAgICAgICAgICAgKHBUYWJsZS0+S2V5VGFibGVbaV0uR3JvdXBLZXlbMV0uYktleVZhbGlkID09IEZBTFNFKSAmJgotICAgICAgICAgICAgKHBUYWJsZS0+S2V5VGFibGVbaV0uR3JvdXBLZXlbMl0uYktleVZhbGlkID09IEZBTFNFKSAmJgotICAgICAgICAgICAgKHBUYWJsZS0+S2V5VGFibGVbaV0uR3JvdXBLZXlbM10uYktleVZhbGlkID09IEZBTFNFKQorICAgICAgICBpZiAoKHBUYWJsZS0+S2V5VGFibGVbaV0uYkluVXNlID09IHRydWUpICYmCisgICAgICAgICAgICAocFRhYmxlLT5LZXlUYWJsZVtpXS5QYWlyd2lzZUtleS5iS2V5VmFsaWQgPT0gZmFsc2UpICYmCisgICAgICAgICAgICAocFRhYmxlLT5LZXlUYWJsZVtpXS5Hcm91cEtleVswXS5iS2V5VmFsaWQgPT0gZmFsc2UpICYmCisgICAgICAgICAgICAocFRhYmxlLT5LZXlUYWJsZVtpXS5Hcm91cEtleVsxXS5iS2V5VmFsaWQgPT0gZmFsc2UpICYmCisgICAgICAgICAgICAocFRhYmxlLT5LZXlUYWJsZVtpXS5Hcm91cEtleVsyXS5iS2V5VmFsaWQgPT0gZmFsc2UpICYmCisgICAgICAgICAgICAocFRhYmxlLT5LZXlUYWJsZVtpXS5Hcm91cEtleVszXS5iS2V5VmFsaWQgPT0gZmFsc2UpCiAgICAgICAgICAgICApIHsKIAotICAgICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtpXS5iSW5Vc2UgPSBGQUxTRTsKKyAgICAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0uYkluVXNlID0gZmFsc2U7CiAgICAgICAgICAgICBwVGFibGUtPktleVRhYmxlW2ldLndLZXlDdGwgPSAwOwotICAgICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtpXS5iU29mdFdFUCA9IEZBTFNFOworICAgICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtpXS5iU29mdFdFUCA9IGZhbHNlOwogICAgICAgICAgICAgTUFDdkRpc2FibGVLZXlFbnRyeShkd0lvQmFzZSwgaSk7CiAgICAgICAgIH0KICAgICB9CkBAIC05NiwyMiArOTYsMjIgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBLZXl2SW5pdFRhYmxlIChQU0tleU1hbmFnZW1lbnQgcFRhYmxlLCBEV09SRF9QVFIgZHdJb0Jhc2UpCit2b2lkIEtleXZJbml0VGFibGUgKFBTS2V5TWFuYWdlbWVudCBwVGFibGUsIHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UpCiB7CiAgICAgaW50IGk7CiAgICAgaW50IGpqOwogCiAgICAgZm9yIChpPTA7aTxNQVhfS0VZX1RBQkxFO2krKykgewotICAgICAgICBwVGFibGUtPktleVRhYmxlW2ldLmJJblVzZSA9IEZBTFNFOwotICAgICAgICBwVGFibGUtPktleVRhYmxlW2ldLlBhaXJ3aXNlS2V5LmJLZXlWYWxpZCA9IEZBTFNFOworICAgICAgICBwVGFibGUtPktleVRhYmxlW2ldLmJJblVzZSA9IGZhbHNlOworICAgICAgICBwVGFibGUtPktleVRhYmxlW2ldLlBhaXJ3aXNlS2V5LmJLZXlWYWxpZCA9IGZhbHNlOwogICAgICAgICBwVGFibGUtPktleVRhYmxlW2ldLlBhaXJ3aXNlS2V5LnB2S2V5VGFibGUgPSAodm9pZCAqKSZwVGFibGUtPktleVRhYmxlW2ldOwogICAgICAgICBmb3IgKGpqPTA7IGpqIDwgTUFYX0dST1VQX0tFWTsgamorKykgewotICAgICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtpXS5Hcm91cEtleVtqal0uYktleVZhbGlkID0gRkFMU0U7CisgICAgICAgICAgICBwVGFibGUtPktleVRhYmxlW2ldLkdyb3VwS2V5W2pqXS5iS2V5VmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0uR3JvdXBLZXlbampdLnB2S2V5VGFibGUgPSAodm9pZCAqKSZwVGFibGUtPktleVRhYmxlW2ldOwogICAgICAgICB9CiAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0ud0tleUN0bCA9IDA7CiAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0uZHdHVEtleUluZGV4ID0gMDsKLSAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtpXS5iU29mdFdFUCA9IEZBTFNFOworICAgICAgICBwVGFibGUtPktleVRhYmxlW2ldLmJTb2Z0V0VQID0gZmFsc2U7CiAgICAgICAgIE1BQ3ZEaXNhYmxlS2V5RW50cnkoZHdJb0Jhc2UsIGkpOwogICAgIH0KIH0KQEAgLTEyOCwxMyArMTI4LDEzIEBACiAgKiAgT3V0OgogICogICAgICBwS2V5ICAgICAgICAgICAgLSBLZXkgcmV0dXJuCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIGZvdW5kIG90aGVyd2lzZSBGQUxTRQorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIGZvdW5kIG90aGVyd2lzZSBmYWxzZQogICoKICAqLwotQk9PTCBLZXliR2V0S2V5ICgKK2Jvb2wgS2V5YkdldEtleSAoCiAgICAgUFNLZXlNYW5hZ2VtZW50IHBUYWJsZSwKLSAgICBQQllURSAgICAgICAgICAgcGJ5QlNTSUQsCi0gICAgRFdPUkQgICAgICAgICAgIGR3S2V5SW5kZXgsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5QlNTSUQsCisgICAgdW5zaWduZWQgbG9uZyBkd0tleUluZGV4LAogICAgIFBTS2V5SXRlbSAgICAgICAqcEtleQogICAgICkKIHsKQEAgLTE0NCwzMSArMTQ0LDMxIEBACiAKICAgICAqcEtleSA9IE5VTEw7CiAgICAgZm9yIChpPTA7aTxNQVhfS0VZX1RBQkxFO2krKykgewotICAgICAgICBpZiAoKHBUYWJsZS0+S2V5VGFibGVbaV0uYkluVXNlID09IFRSVUUpICYmCi0gICAgICAgICAgICBJU19FVEhfQUREUkVTU19FUVVBTChwVGFibGUtPktleVRhYmxlW2ldLmFieUJTU0lELHBieUJTU0lEKSkgeworICAgICAgICBpZiAoKHBUYWJsZS0+S2V5VGFibGVbaV0uYkluVXNlID09IHRydWUpICYmCisgICAgICAgICAgICAhY29tcGFyZV9ldGhlcl9hZGRyKHBUYWJsZS0+S2V5VGFibGVbaV0uYWJ5QlNTSUQsIHBieUJTU0lEKSkgewogICAgICAgICAgICAgaWYgKGR3S2V5SW5kZXggPT0gMHhGRkZGRkZGRikgewotICAgICAgICAgICAgICAgIGlmIChwVGFibGUtPktleVRhYmxlW2ldLlBhaXJ3aXNlS2V5LmJLZXlWYWxpZCA9PSBUUlVFKSB7CisgICAgICAgICAgICAgICAgaWYgKHBUYWJsZS0+S2V5VGFibGVbaV0uUGFpcndpc2VLZXkuYktleVZhbGlkID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgKnBLZXkgPSAmKHBUYWJsZS0+S2V5VGFibGVbaV0uUGFpcndpc2VLZXkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFRSVUUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRydWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoZmFsc2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAoZHdLZXlJbmRleCA8IE1BWF9HUk9VUF9LRVkpIHsKLSAgICAgICAgICAgICAgICBpZiAocFRhYmxlLT5LZXlUYWJsZVtpXS5Hcm91cEtleVtkd0tleUluZGV4XS5iS2V5VmFsaWQgPT0gVFJVRSkgeworICAgICAgICAgICAgICAgIGlmIChwVGFibGUtPktleVRhYmxlW2ldLkdyb3VwS2V5W2R3S2V5SW5kZXhdLmJLZXlWYWxpZCA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICpwS2V5ID0gJihwVGFibGUtPktleVRhYmxlW2ldLkdyb3VwS2V5W2R3S2V5SW5kZXhdKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChUUlVFKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0cnVlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoRkFMU0UpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGZhbHNlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKEZBTFNFKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKGZhbHNlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gKEZBTFNFKTsKKyAgICByZXR1cm4gKGZhbHNlKTsKIH0KIAogCkBAIC0xODYsMzcgKzE4NiwzNyBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZXNzIG90aGVyd2lzZSBGQUxTRQorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2Nlc3Mgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIEtleWJTZXRLZXkgKAorYm9vbCBLZXliU2V0S2V5ICgKICAgICBQU0tleU1hbmFnZW1lbnQgcFRhYmxlLAotICAgIFBCWVRFICAgICAgICAgICBwYnlCU1NJRCwKLSAgICBEV09SRCAgICAgICAgICAgZHdLZXlJbmRleCwKLSAgICBVTE9ORyAgICAgICAgICAgdUtleUxlbmd0aCwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCU1NJRCwKKyAgICB1bnNpZ25lZCBsb25nIGR3S2V5SW5kZXgsCisgICAgdW5zaWduZWQgbG9uZyB1S2V5TGVuZ3RoLAogICAgIFBRV09SRCAgICAgICAgICBwS2V5UlNDLAotICAgIFBCWVRFICAgICAgICAgICBwYnlLZXksCi0gICAgQllURSAgICAgICAgICAgIGJ5S2V5RGVjTW9kZSwKLSAgICBEV09SRF9QVFIgICAgICAgZHdJb0Jhc2UsCi0gICAgQllURSAgICAgICAgICAgIGJ5TG9jYWxJRAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUtleSwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5S2V5RGVjTW9kZSwKKyAgICB1bnNpZ25lZCBsb25nIGR3SW9CYXNlLAorICAgIHVuc2lnbmVkIGNoYXIgYnlMb2NhbElECiAgICAgKQogewogICAgIGludCAgICAgICAgIGksajsKLSAgICBVSU5UICAgICAgICBpaTsKKyAgICB1bnNpZ25lZCBpbnQgaWk7CiAgICAgUFNLZXlJdGVtICAgcEtleTsKLSAgICBVSU5UICAgICAgICB1S2V5SWR4OworICAgIHVuc2lnbmVkIGludCB1S2V5SWR4OwogCiAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJFbnRlciBLZXliU2V0S2V5OiAlbFhcbiIsIGR3S2V5SW5kZXgpOwogCiAgICAgaiA9IChNQVhfS0VZX1RBQkxFLTEpOwogICAgIGZvciAoaT0wO2k8KE1BWF9LRVlfVEFCTEUtMSk7aSsrKSB7Ci0gICAgICAgIGlmICgocFRhYmxlLT5LZXlUYWJsZVtpXS5iSW5Vc2UgPT0gRkFMU0UpICYmCisgICAgICAgIGlmICgocFRhYmxlLT5LZXlUYWJsZVtpXS5iSW5Vc2UgPT0gZmFsc2UpICYmCiAgICAgICAgICAgICAoaiA9PSAoTUFYX0tFWV9UQUJMRS0xKSkpIHsKICAgICAgICAgICAgIC8vIGZvdW5kIGVtcHR5IHRhYmxlCiAgICAgICAgICAgICBqID0gaTsKICAgICAgICAgfQotICAgICAgICBpZiAoKHBUYWJsZS0+S2V5VGFibGVbaV0uYkluVXNlID09IFRSVUUpICYmCi0gICAgICAgICAgICBJU19FVEhfQUREUkVTU19FUVVBTChwVGFibGUtPktleVRhYmxlW2ldLmFieUJTU0lELHBieUJTU0lEKSkgeworICAgICAgICBpZiAoKHBUYWJsZS0+S2V5VGFibGVbaV0uYkluVXNlID09IHRydWUpICYmCisgICAgICAgICAgICAhY29tcGFyZV9ldGhlcl9hZGRyKHBUYWJsZS0+S2V5VGFibGVbaV0uYWJ5QlNTSUQsIHBieUJTU0lEKSkgewogICAgICAgICAgICAgLy8gZm91bmQgdGFibGUgYWxyZWFkeSBleGlzdAogICAgICAgICAgICAgaWYgKChkd0tleUluZGV4ICYgUEFJUldJU0VfS0VZKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgLy8gUGFpcndpc2Uga2V5CkBAIC0yMjcsNyArMjI3LDcgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gR3JvdXAga2V5CiAgICAgICAgICAgICAgICAgaWYgKChkd0tleUluZGV4ICYgMHgwMDAwMDBGRikgPj0gTUFYX0dST1VQX0tFWSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoZmFsc2UpOwogICAgICAgICAgICAgICAgIHBLZXkgPSAmKHBUYWJsZS0+S2V5VGFibGVbaV0uR3JvdXBLZXlbZHdLZXlJbmRleCAmIDB4MDAwMDAwRkZdKTsKICAgICAgICAgICAgICAgICBpZiAoKGR3S2V5SW5kZXggJiBUUkFOU01JVF9LRVkpICE9IDApICB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEdyb3VwIHRyYW5zbWl0IGtleQpAQCAtMjQxLDcgKzI0MSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBwVGFibGUtPktleVRhYmxlW2ldLndLZXlDdGwgfD0gMHg4MDAwOyAgICAgICAgICAgICAgLy8gZW5hYmxlIG9uLWZseQogCi0gICAgICAgICAgICBwS2V5LT5iS2V5VmFsaWQgPSBUUlVFOworICAgICAgICAgICAgcEtleS0+YktleVZhbGlkID0gdHJ1ZTsKICAgICAgICAgICAgIHBLZXktPnVLZXlMZW5ndGggPSB1S2V5TGVuZ3RoOwogICAgICAgICAgICAgcEtleS0+ZHdLZXlJbmRleCA9IGR3S2V5SW5kZXg7CiAgICAgICAgICAgICBwS2V5LT5ieUNpcGhlclN1aXRlID0gYnlLZXlEZWNNb2RlOwpAQCAtMjUyLDcgKzI1Miw3IEBACiAgICAgICAgICAgICAgICAgaWYgKHVLZXlMZW5ndGggPT0gV0xBTl9XRVAxMDRfS0VZTEVOKQogICAgICAgICAgICAgICAgICAgICBwS2V5LT5hYnlLZXlbMTVdIHw9IDB4ODA7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBNQUN2U2V0S2V5RW50cnkoZHdJb0Jhc2UsIHBUYWJsZS0+S2V5VGFibGVbaV0ud0tleUN0bCwgaSwgdUtleUlkeCwgcGJ5QlNTSUQsIChQRFdPUkQpcEtleS0+YWJ5S2V5LCBieUxvY2FsSUQpOworICAgICAgICAgICAgTUFDdlNldEtleUVudHJ5KGR3SW9CYXNlLCBwVGFibGUtPktleVRhYmxlW2ldLndLZXlDdGwsIGksIHVLZXlJZHgsIHBieUJTU0lELCAodW5zaWduZWQgbG9uZyAqKXBLZXktPmFieUtleSwgYnlMb2NhbElEKTsKIAogICAgICAgICAgICAgaWYgKChkd0tleUluZGV4ICYgVVNFX0tFWVJTQykgPT0gMCkgewogICAgICAgICAgICAgICAgIC8vIFJTQyBzZXQgYnkgTklDCkBAIC0yNzcsMTIgKzI3NywxMiBAQAogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJwS2V5LT53VFNDMTVfMDogJXhcbiAiLCBwS2V5LT53VFNDMTVfMCk7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPInBLZXktPmR3S2V5SW5kZXg6ICVseFxuICIsIHBLZXktPmR3S2V5SW5kZXgpOwogCi0gICAgICAgICAgICByZXR1cm4gKFRSVUUpOworICAgICAgICAgICAgcmV0dXJuICh0cnVlKTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoaiA8IChNQVhfS0VZX1RBQkxFLTEpKSB7CiAgICAgICAgIG1lbWNweShwVGFibGUtPktleVRhYmxlW2pdLmFieUJTU0lELHBieUJTU0lELEVUSF9BTEVOKTsKLSAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtqXS5iSW5Vc2UgPSBUUlVFOworICAgICAgICBwVGFibGUtPktleVRhYmxlW2pdLmJJblVzZSA9IHRydWU7CiAgICAgICAgIGlmICgoZHdLZXlJbmRleCAmIFBBSVJXSVNFX0tFWSkgIT0gMCkgIHsKICAgICAgICAgICAgIC8vIFBhaXJ3aXNlIGtleQogICAgICAgICAgICAgcEtleSA9ICYocFRhYmxlLT5LZXlUYWJsZVtqXS5QYWlyd2lzZUtleSk7CkBAIC0yOTIsNyArMjkyLDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEdyb3VwIGtleQogICAgICAgICAgICAgaWYgKChkd0tleUluZGV4ICYgMHgwMDAwMDBGRikgPj0gTUFYX0dST1VQX0tFWSkKLSAgICAgICAgICAgICAgICByZXR1cm4gKEZBTFNFKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKGZhbHNlKTsKICAgICAgICAgICAgIHBLZXkgPSAmKHBUYWJsZS0+S2V5VGFibGVbal0uR3JvdXBLZXlbZHdLZXlJbmRleCAmIDB4MDAwMDAwRkZdKTsKICAgICAgICAgICAgIGlmICgoZHdLZXlJbmRleCAmIFRSQU5TTUlUX0tFWSkgIT0gMCkgIHsKICAgICAgICAgICAgICAgICAvLyBHcm91cCB0cmFuc21pdCBrZXkKQEAgLTMwNiw3ICszMDYsNyBAQAogICAgICAgICB9CiAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbal0ud0tleUN0bCB8PSAweDgwMDA7ICAgICAgICAgICAgICAvLyBlbmFibGUgb24tZmx5CiAKLSAgICAgICAgcEtleS0+YktleVZhbGlkID0gVFJVRTsKKyAgICAgICAgcEtleS0+YktleVZhbGlkID0gdHJ1ZTsKICAgICAgICAgcEtleS0+dUtleUxlbmd0aCA9IHVLZXlMZW5ndGg7CiAgICAgICAgIHBLZXktPmR3S2V5SW5kZXggPSBkd0tleUluZGV4OwogICAgICAgICBwS2V5LT5ieUNpcGhlclN1aXRlID0gYnlLZXlEZWNNb2RlOwpAQCAtMzE3LDcgKzMxNyw3IEBACiAgICAgICAgICAgICBpZiAodUtleUxlbmd0aCA9PSBXTEFOX1dFUDEwNF9LRVlMRU4pCiAgICAgICAgICAgICAgICAgcEtleS0+YWJ5S2V5WzE1XSB8PSAweDgwOwogICAgICAgICB9Ci0gICAgICAgIE1BQ3ZTZXRLZXlFbnRyeShkd0lvQmFzZSwgcFRhYmxlLT5LZXlUYWJsZVtqXS53S2V5Q3RsLCBqLCB1S2V5SWR4LCBwYnlCU1NJRCwgKFBEV09SRClwS2V5LT5hYnlLZXksIGJ5TG9jYWxJRCk7CisgICAgICAgIE1BQ3ZTZXRLZXlFbnRyeShkd0lvQmFzZSwgcFRhYmxlLT5LZXlUYWJsZVtqXS53S2V5Q3RsLCBqLCB1S2V5SWR4LCBwYnlCU1NJRCwgKHVuc2lnbmVkIGxvbmcgKilwS2V5LT5hYnlLZXksIGJ5TG9jYWxJRCk7CiAKICAgICAgICAgaWYgKChkd0tleUluZGV4ICYgVVNFX0tFWVJTQykgPT0gMCkgewogICAgICAgICAgICAgLy8gUlNDIHNldCBieSBOSUMKQEAgLTM0Miw5ICszNDIsOSBAQAogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPInBLZXktPndUU0MxNV8wOiAleFxuICIsIHBLZXktPndUU0MxNV8wKTsKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJwS2V5LT5kd0tleUluZGV4OiAlbHhcbiAiLCBwS2V5LT5kd0tleUluZGV4KTsKIAotICAgICAgICByZXR1cm4gKFRSVUUpOworICAgICAgICByZXR1cm4gKHRydWUpOwogICAgIH0KLSAgICByZXR1cm4gKEZBTFNFKTsKKyAgICByZXR1cm4gKGZhbHNlKTsKIH0KIAogCkBAIC0zNTksNjYgKzM1OSw2NiBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZXNzIG90aGVyd2lzZSBGQUxTRQorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2Nlc3Mgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIEtleWJSZW1vdmVLZXkgKAorYm9vbCBLZXliUmVtb3ZlS2V5ICgKICAgICBQU0tleU1hbmFnZW1lbnQgcFRhYmxlLAotICAgIFBCWVRFICAgICAgICAgICBwYnlCU1NJRCwKLSAgICBEV09SRCAgICAgICAgICAgZHdLZXlJbmRleCwKLSAgICBEV09SRF9QVFIgICAgICAgZHdJb0Jhc2UKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCU1NJRCwKKyAgICB1bnNpZ25lZCBsb25nIGR3S2V5SW5kZXgsCisgICAgdW5zaWduZWQgbG9uZyBkd0lvQmFzZQogICAgICkKIHsKICAgICBpbnQgIGk7CiAKLSAgICBpZiAoSVNfQlJPQURDQVNUX0FERFJFU1MocGJ5QlNTSUQpKSB7CisgICAgaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKHBieUJTU0lEKSkgewogICAgICAgICAvLyBkZWFsdGUgYWxsIGtleQogICAgICAgICBpZiAoKGR3S2V5SW5kZXggJiBQQUlSV0lTRV9LRVkpICE9IDApIHsKICAgICAgICAgICAgIGZvciAoaT0wO2k8TUFYX0tFWV9UQUJMRTtpKyspIHsKLSAgICAgICAgICAgICAgICBwVGFibGUtPktleVRhYmxlW2ldLlBhaXJ3aXNlS2V5LmJLZXlWYWxpZCA9IEZBTFNFOworICAgICAgICAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0uUGFpcndpc2VLZXkuYktleVZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzX3ZDaGVja0tleVRhYmxlVmFsaWQocFRhYmxlLCBkd0lvQmFzZSk7Ci0gICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKChkd0tleUluZGV4ICYgMHgwMDAwMDBGRikgPCBNQVhfR1JPVVBfS0VZKSB7CiAgICAgICAgICAgICBmb3IgKGk9MDtpPE1BWF9LRVlfVEFCTEU7aSsrKSB7Ci0gICAgICAgICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtpXS5Hcm91cEtleVtkd0tleUluZGV4ICYgMHgwMDAwMDBGRl0uYktleVZhbGlkID0gRkFMU0U7CisgICAgICAgICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtpXS5Hcm91cEtleVtkd0tleUluZGV4ICYgMHgwMDAwMDBGRl0uYktleVZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKChkd0tleUluZGV4ICYgMHg3RkZGRkZGRikgPT0gKHBUYWJsZS0+S2V5VGFibGVbaV0uZHdHVEtleUluZGV4ICYgMHg3RkZGRkZGRikpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIEdyb3VwIHRyYW5zbWl0IGtleQogICAgICAgICAgICAgICAgICAgICBwVGFibGUtPktleVRhYmxlW2ldLmR3R1RLZXlJbmRleCA9IDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgc192Q2hlY2tLZXlUYWJsZVZhbGlkKHBUYWJsZSwgZHdJb0Jhc2UpOwotICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAoaT0wO2k8TUFYX0tFWV9UQUJMRTtpKyspIHsKLSAgICAgICAgaWYgKChwVGFibGUtPktleVRhYmxlW2ldLmJJblVzZSA9PSBUUlVFKSAmJgotICAgICAgICAgICAgSVNfRVRIX0FERFJFU1NfRVFVQUwocFRhYmxlLT5LZXlUYWJsZVtpXS5hYnlCU1NJRCxwYnlCU1NJRCkpIHsKKyAgICAgICAgaWYgKChwVGFibGUtPktleVRhYmxlW2ldLmJJblVzZSA9PSB0cnVlKSAmJgorICAgICAgICAgICAgIWNvbXBhcmVfZXRoZXJfYWRkcihwVGFibGUtPktleVRhYmxlW2ldLmFieUJTU0lELCBwYnlCU1NJRCkpIHsKICAgICAgICAgICAgIGlmICgoZHdLZXlJbmRleCAmIFBBSVJXSVNFX0tFWSkgIT0gMCkgewotICAgICAgICAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0uUGFpcndpc2VLZXkuYktleVZhbGlkID0gRkFMU0U7CisgICAgICAgICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtpXS5QYWlyd2lzZUtleS5iS2V5VmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBzX3ZDaGVja0tleVRhYmxlVmFsaWQocFRhYmxlLCBkd0lvQmFzZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChUUlVFKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKHRydWUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoKGR3S2V5SW5kZXggJiAweDAwMDAwMEZGKSA8IE1BWF9HUk9VUF9LRVkpIHsKLSAgICAgICAgICAgICAgICBwVGFibGUtPktleVRhYmxlW2ldLkdyb3VwS2V5W2R3S2V5SW5kZXggJiAweDAwMDAwMEZGXS5iS2V5VmFsaWQgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBwVGFibGUtPktleVRhYmxlW2ldLkdyb3VwS2V5W2R3S2V5SW5kZXggJiAweDAwMDAwMEZGXS5iS2V5VmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAoKGR3S2V5SW5kZXggJiAweDdGRkZGRkZGKSA9PSAocFRhYmxlLT5LZXlUYWJsZVtpXS5kd0dUS2V5SW5kZXggJiAweDdGRkZGRkZGKSkgewogICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgR3JvdXAgdHJhbnNtaXQga2V5CiAgICAgICAgICAgICAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0uZHdHVEtleUluZGV4ID0gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc192Q2hlY2tLZXlUYWJsZVZhbGlkKHBUYWJsZSwgZHdJb0Jhc2UpOwotICAgICAgICAgICAgICAgIHJldHVybiAoVFJVRSk7CisgICAgICAgICAgICAgICAgcmV0dXJuICh0cnVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiAoRkFMU0UpOworICAgICAgICAgICAgICAgIHJldHVybiAoZmFsc2UpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiAoRkFMU0UpOworICAgIHJldHVybiAoZmFsc2UpOwogfQogCiAKQEAgLTQzMiwzMCArNDMyLDMwIEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIHN1Y2Nlc3Mgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2VzcyBvdGhlcndpc2UgZmFsc2UKICAqCiAgKi8KLUJPT0wgS2V5YlJlbW92ZUFsbEtleSAoCitib29sIEtleWJSZW1vdmVBbGxLZXkgKAogICAgIFBTS2V5TWFuYWdlbWVudCBwVGFibGUsCi0gICAgUEJZVEUgICAgICAgICAgIHBieUJTU0lELAotICAgIERXT1JEX1BUUiAgICAgICBkd0lvQmFzZQorICAgIHVuc2lnbmVkIGNoYXIgKnBieUJTU0lELAorICAgIHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UKICAgICApCiB7CiAgICAgaW50ICBpLHU7CiAKICAgICBmb3IgKGk9MDtpPE1BWF9LRVlfVEFCTEU7aSsrKSB7Ci0gICAgICAgIGlmICgocFRhYmxlLT5LZXlUYWJsZVtpXS5iSW5Vc2UgPT0gVFJVRSkgJiYKLSAgICAgICAgICAgIElTX0VUSF9BRERSRVNTX0VRVUFMKHBUYWJsZS0+S2V5VGFibGVbaV0uYWJ5QlNTSUQscGJ5QlNTSUQpKSB7Ci0gICAgICAgICAgICBwVGFibGUtPktleVRhYmxlW2ldLlBhaXJ3aXNlS2V5LmJLZXlWYWxpZCA9IEZBTFNFOworICAgICAgICBpZiAoKHBUYWJsZS0+S2V5VGFibGVbaV0uYkluVXNlID09IHRydWUpICYmCisgICAgICAgICAgICAhY29tcGFyZV9ldGhlcl9hZGRyKHBUYWJsZS0+S2V5VGFibGVbaV0uYWJ5QlNTSUQsIHBieUJTU0lEKSkgeworICAgICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtpXS5QYWlyd2lzZUtleS5iS2V5VmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgIGZvcih1PTA7dTxNQVhfR1JPVVBfS0VZO3UrKykgewotICAgICAgICAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0uR3JvdXBLZXlbdV0uYktleVZhbGlkID0gRkFMU0U7CisgICAgICAgICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtpXS5Hcm91cEtleVt1XS5iS2V5VmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0uZHdHVEtleUluZGV4ID0gMDsKICAgICAgICAgICAgIHNfdkNoZWNrS2V5VGFibGVWYWxpZChwVGFibGUsIGR3SW9CYXNlKTsKLSAgICAgICAgICAgIHJldHVybiAoVFJVRSk7CisgICAgICAgICAgICByZXR1cm4gKHRydWUpOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiAoRkFMU0UpOworICAgIHJldHVybiAoZmFsc2UpOwogfQogCiAvKgpAQCAtNDY3LDIwICs0NjcsMjAgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2VzcyBvdGhlcndpc2UgRkFMU0UKKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZXNzIG90aGVyd2lzZSBmYWxzZQogICoKICAqLwogdm9pZCBLZXl2UmVtb3ZlV0VQS2V5ICgKICAgICBQU0tleU1hbmFnZW1lbnQgcFRhYmxlLAotICAgIERXT1JEICAgICAgICAgICBkd0tleUluZGV4LAotICAgIERXT1JEX1BUUiAgICAgICBkd0lvQmFzZQorICAgIHVuc2lnbmVkIGxvbmcgZHdLZXlJbmRleCwKKyAgICB1bnNpZ25lZCBsb25nIGR3SW9CYXNlCiAgICAgKQogewogCiAgICBpZiAoKGR3S2V5SW5kZXggJiAweDAwMDAwMEZGKSA8IE1BWF9HUk9VUF9LRVkpIHsKLSAgICAgICAgaWYgKHBUYWJsZS0+S2V5VGFibGVbTUFYX0tFWV9UQUJMRS0xXS5iSW5Vc2UgPT0gVFJVRSkgeworICAgICAgICBpZiAocFRhYmxlLT5LZXlUYWJsZVtNQVhfS0VZX1RBQkxFLTFdLmJJblVzZSA9PSB0cnVlKSB7CiAgICAgICAgICAgICBpZiAocFRhYmxlLT5LZXlUYWJsZVtNQVhfS0VZX1RBQkxFLTFdLkdyb3VwS2V5W2R3S2V5SW5kZXggJiAweDAwMDAwMEZGXS5ieUNpcGhlclN1aXRlID09IEtFWV9DVExfV0VQKSB7Ci0gICAgICAgICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtNQVhfS0VZX1RBQkxFLTFdLkdyb3VwS2V5W2R3S2V5SW5kZXggJiAweDAwMDAwMEZGXS5iS2V5VmFsaWQgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBwVGFibGUtPktleVRhYmxlW01BWF9LRVlfVEFCTEUtMV0uR3JvdXBLZXlbZHdLZXlJbmRleCAmIDB4MDAwMDAwRkZdLmJLZXlWYWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGlmICgoZHdLZXlJbmRleCAmIDB4N0ZGRkZGRkYpID09IChwVGFibGUtPktleVRhYmxlW01BWF9LRVlfVEFCTEUtMV0uZHdHVEtleUluZGV4ICYgMHg3RkZGRkZGRikpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIEdyb3VwIHRyYW5zbWl0IGtleQogICAgICAgICAgICAgICAgICAgICBwVGFibGUtPktleVRhYmxlW01BWF9LRVlfVEFCTEUtMV0uZHdHVEtleUluZGV4ID0gMDsKQEAgLTQ5NCw3ICs0OTQsNyBAQAogCiB2b2lkIEtleXZSZW1vdmVBbGxXRVBLZXkgKAogICAgIFBTS2V5TWFuYWdlbWVudCBwVGFibGUsCi0gICAgRFdPUkRfUFRSICAgICAgIGR3SW9CYXNlCisgICAgdW5zaWduZWQgbG9uZyBkd0lvQmFzZQogICAgICkKIHsKICAgICBpbnQgaTsKQEAgLTUxNCwxMyArNTE0LDEzIEBACiAgKiAgT3V0OgogICogICAgICBwS2V5ICAgICAgICAgICAgLSBLZXkgcmV0dXJuCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIGZvdW5kIG90aGVyd2lzZSBGQUxTRQorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIGZvdW5kIG90aGVyd2lzZSBmYWxzZQogICoKICAqLwotQk9PTCBLZXliR2V0VHJhbnNtaXRLZXkgKAorYm9vbCBLZXliR2V0VHJhbnNtaXRLZXkgKAogICAgIFBTS2V5TWFuYWdlbWVudCBwVGFibGUsCi0gICAgUEJZVEUgICAgICAgICAgIHBieUJTU0lELAotICAgIERXT1JEICAgICAgICAgICBkd0tleVR5cGUsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5QlNTSUQsCisgICAgdW5zaWduZWQgbG9uZyBkd0tleVR5cGUsCiAgICAgUFNLZXlJdGVtICAgICAgICpwS2V5CiAgICAgKQogewpAQCAtNTI4LDEyICs1MjgsMTIgQEAKIAogICAgICpwS2V5ID0gTlVMTDsKICAgICBmb3IgKGk9MDtpPE1BWF9LRVlfVEFCTEU7aSsrKSB7Ci0gICAgICAgIGlmICgocFRhYmxlLT5LZXlUYWJsZVtpXS5iSW5Vc2UgPT0gVFJVRSkgJiYKLSAgICAgICAgICAgIElTX0VUSF9BRERSRVNTX0VRVUFMKHBUYWJsZS0+S2V5VGFibGVbaV0uYWJ5QlNTSUQscGJ5QlNTSUQpKSB7CisgICAgICAgIGlmICgocFRhYmxlLT5LZXlUYWJsZVtpXS5iSW5Vc2UgPT0gdHJ1ZSkgJiYKKyAgICAgICAgICAgICFjb21wYXJlX2V0aGVyX2FkZHIocFRhYmxlLT5LZXlUYWJsZVtpXS5hYnlCU1NJRCwgcGJ5QlNTSUQpKSB7CiAKICAgICAgICAgICAgIGlmIChkd0tleVR5cGUgPT0gUEFJUldJU0VfS0VZKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAocFRhYmxlLT5LZXlUYWJsZVtpXS5QYWlyd2lzZUtleS5iS2V5VmFsaWQgPT0gVFJVRSkgeworICAgICAgICAgICAgICAgIGlmIChwVGFibGUtPktleVRhYmxlW2ldLlBhaXJ3aXNlS2V5LmJLZXlWYWxpZCA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICpwS2V5ID0gJihwVGFibGUtPktleVRhYmxlW2ldLlBhaXJ3aXNlS2V5KTsKIAogICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIktleWJHZXRUcmFuc21pdEtleToiKTsKQEAgLTU0NCwxOSArNTQ0LDE5IEBACiAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iXG4iKTsKIAogCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoVFJVRSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAodHJ1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIlBhaXJ3aXNlS2V5LmJLZXlWYWxpZCA9PSBGQUxTRVxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoRkFMU0UpOworICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIlBhaXJ3aXNlS2V5LmJLZXlWYWxpZCA9PSBmYWxzZVxuIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoZmFsc2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gLy8gRW5kIG9mIFR5cGUgPT0gUEFJUldJU0UKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChwVGFibGUtPktleVRhYmxlW2ldLmR3R1RLZXlJbmRleCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iRVJST1I6IGR3R1RLZXlJbmRleCA9PSAwICEhIVxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAocFRhYmxlLT5LZXlUYWJsZVtpXS5Hcm91cEtleVsocFRhYmxlLT5LZXlUYWJsZVtpXS5kd0dUS2V5SW5kZXgmMHgwMDAwMDBGRildLmJLZXlWYWxpZCA9PSBUUlVFKSB7CisgICAgICAgICAgICAgICAgaWYgKHBUYWJsZS0+S2V5VGFibGVbaV0uR3JvdXBLZXlbKHBUYWJsZS0+S2V5VGFibGVbaV0uZHdHVEtleUluZGV4JjB4MDAwMDAwRkYpXS5iS2V5VmFsaWQgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAqcEtleSA9ICYocFRhYmxlLT5LZXlUYWJsZVtpXS5Hcm91cEtleVsocFRhYmxlLT5LZXlUYWJsZVtpXS5kd0dUS2V5SW5kZXgmMHgwMDAwMDBGRildKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJLZXliR2V0VHJhbnNtaXRLZXk6Iik7CkBAIC01NjcsMTEgKzU2NywxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJkd0dUS2V5SW5kZXg6ICVsWFxuIiwgcFRhYmxlLT5LZXlUYWJsZVtpXS5kd0dUS2V5SW5kZXgpOwogCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoVFJVRSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAodHJ1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIkdyb3VwS2V5LmJLZXlWYWxpZCA9PSBGQUxTRVxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoRkFMU0UpOworICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIkdyb3VwS2V5LmJLZXlWYWxpZCA9PSBmYWxzZVxuIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoZmFsc2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gLy8gRW5kIG9mIFR5cGUgPSBHUk9VUAogICAgICAgICB9IC8vIEJTU0lEIG1hdGNoCkBAIC01ODEsNyArNTgxLDcgQEAKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIlMDJ4ICIsICoocGJ5QlNTSUQraWkpKTsKICAgICB9CiAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJcbiIpOwotICAgIHJldHVybiAoRkFMU0UpOworICAgIHJldHVybiAoZmFsc2UpOwogfQogCiAKQEAgLTU5NCwxMCArNTk0LDEwIEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIGZvdW5kIG90aGVyd2lzZSBGQUxTRQorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIGZvdW5kIG90aGVyd2lzZSBmYWxzZQogICoKICAqLwotQk9PTCBLZXliQ2hlY2tQYWlyZXdpc2VLZXkgKAorYm9vbCBLZXliQ2hlY2tQYWlyZXdpc2VLZXkgKAogICAgIFBTS2V5TWFuYWdlbWVudCBwVGFibGUsCiAgICAgUFNLZXlJdGVtICAgICAgICpwS2V5CiAgICAgKQpAQCAtNjA2LDEzICs2MDYsMTMgQEAKIAogICAgICpwS2V5ID0gTlVMTDsKICAgICBmb3IgKGk9MDtpPE1BWF9LRVlfVEFCTEU7aSsrKSB7Ci0gICAgICAgIGlmICgocFRhYmxlLT5LZXlUYWJsZVtpXS5iSW5Vc2UgPT0gVFJVRSkgJiYKLSAgICAgICAgICAgIChwVGFibGUtPktleVRhYmxlW2ldLlBhaXJ3aXNlS2V5LmJLZXlWYWxpZCA9PSBUUlVFKSkgeworICAgICAgICBpZiAoKHBUYWJsZS0+S2V5VGFibGVbaV0uYkluVXNlID09IHRydWUpICYmCisgICAgICAgICAgICAocFRhYmxlLT5LZXlUYWJsZVtpXS5QYWlyd2lzZUtleS5iS2V5VmFsaWQgPT0gdHJ1ZSkpIHsKICAgICAgICAgICAgICpwS2V5ID0gJihwVGFibGUtPktleVRhYmxlW2ldLlBhaXJ3aXNlS2V5KTsKLSAgICAgICAgICAgIHJldHVybiAoVFJVRSk7CisgICAgICAgICAgICByZXR1cm4gKHRydWUpOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiAoRkFMU0UpOworICAgIHJldHVybiAoZmFsc2UpOwogfQogCiAvKgpAQCAtNjI4LDM0ICs2MjgsMzQgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2VzcyBvdGhlcndpc2UgRkFMU0UKKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZXNzIG90aGVyd2lzZSBmYWxzZQogICoKICAqLwotQk9PTCBLZXliU2V0RGVmYXVsdEtleSAoCitib29sIEtleWJTZXREZWZhdWx0S2V5ICgKICAgICBQU0tleU1hbmFnZW1lbnQgcFRhYmxlLAotICAgIERXT1JEICAgICAgICAgICBkd0tleUluZGV4LAotICAgIFVMT05HICAgICAgICAgICB1S2V5TGVuZ3RoLAorICAgIHVuc2lnbmVkIGxvbmcgZHdLZXlJbmRleCwKKyAgICB1bnNpZ25lZCBsb25nIHVLZXlMZW5ndGgsCiAgICAgUFFXT1JEICAgICAgICAgIHBLZXlSU0MsCi0gICAgUEJZVEUgICAgICAgICAgIHBieUtleSwKLSAgICBCWVRFICAgICAgICAgICAgYnlLZXlEZWNNb2RlLAotICAgIERXT1JEX1BUUiAgICAgICBkd0lvQmFzZSwKLSAgICBCWVRFICAgICAgICAgICAgYnlMb2NhbElECisgICAgdW5zaWduZWQgY2hhciAqcGJ5S2V5LAorICAgIHVuc2lnbmVkIGNoYXIgYnlLZXlEZWNNb2RlLAorICAgIHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsCisgICAgdW5zaWduZWQgY2hhciBieUxvY2FsSUQKICAgICApCiB7Ci0gICAgVUlOVCAgICAgICAgaWk7CisgICAgdW5zaWduZWQgaW50IGlpOwogICAgIFBTS2V5SXRlbSAgIHBLZXk7Ci0gICAgVUlOVCAgICAgICAgdUtleUlkeDsKKyAgICB1bnNpZ25lZCBpbnQgdUtleUlkeDsKIAogICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iRW50ZXIgS2V5YlNldERlZmF1bHRLZXk6ICUxeCwgJWQgXG4iLCAoaW50KWR3S2V5SW5kZXgsIChpbnQpdUtleUxlbmd0aCk7CiAKIAogICAgIGlmICgoZHdLZXlJbmRleCAmIFBBSVJXSVNFX0tFWSkgIT0gMCkgeyAgICAgICAgICAgICAgICAgIC8vIFBhaXJ3aXNlIGtleQotICAgICAgICByZXR1cm4gKEZBTFNFKTsKKyAgICAgICAgcmV0dXJuIChmYWxzZSk7CiAgICAgfSBlbHNlIGlmICgoZHdLZXlJbmRleCAmIDB4MDAwMDAwRkYpID49IE1BWF9HUk9VUF9LRVkpIHsKLSAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgICAgICAgIHJldHVybiAoZmFsc2UpOwogICAgIH0KIAotICAgIHBUYWJsZS0+S2V5VGFibGVbTUFYX0tFWV9UQUJMRS0xXS5iSW5Vc2UgPSBUUlVFOworICAgIHBUYWJsZS0+S2V5VGFibGVbTUFYX0tFWV9UQUJMRS0xXS5iSW5Vc2UgPSB0cnVlOwogICAgIGZvcihpaT0wO2lpPEVUSF9BTEVOO2lpKyspCiAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbTUFYX0tFWV9UQUJMRS0xXS5hYnlCU1NJRFtpaV0gPSAweEZGOwogCkBAIC02NzYsMTMgKzY3NiwxMyBAQAogICAgIGlmICgodUtleUxlbmd0aCA9PSBXTEFOX1dFUDIzMl9LRVlMRU4pICYmCiAgICAgICAgIChieUtleURlY01vZGUgPT0gS0VZX0NUTF9XRVApKSB7CiAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbTUFYX0tFWV9UQUJMRS0xXS53S2V5Q3RsIHw9IDB4NDAwMDsgICAgICAgICAgICAgIC8vIGRpc2FibGUgb24tZmx5IGRpc2FibGUgYWRkcmVzcyBtYXRjaAotICAgICAgICBwVGFibGUtPktleVRhYmxlW01BWF9LRVlfVEFCTEUtMV0uYlNvZnRXRVAgPSBUUlVFOworICAgICAgICBwVGFibGUtPktleVRhYmxlW01BWF9LRVlfVEFCTEUtMV0uYlNvZnRXRVAgPSB0cnVlOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChwVGFibGUtPktleVRhYmxlW01BWF9LRVlfVEFCTEUtMV0uYlNvZnRXRVAgPT0gRkFMU0UpCisgICAgICAgIGlmIChwVGFibGUtPktleVRhYmxlW01BWF9LRVlfVEFCTEUtMV0uYlNvZnRXRVAgPT0gZmFsc2UpCiAgICAgICAgICAgICBwVGFibGUtPktleVRhYmxlW01BWF9LRVlfVEFCTEUtMV0ud0tleUN0bCB8PSAweEMwMDA7ICAgICAgICAgIC8vIGVuYWJsZSBvbi1mbHkgZGlzYWJsZSBhZGRyZXNzIG1hdGNoCiAgICAgfQogCi0gICAgcEtleS0+YktleVZhbGlkID0gVFJVRTsKKyAgICBwS2V5LT5iS2V5VmFsaWQgPSB0cnVlOwogICAgIHBLZXktPnVLZXlMZW5ndGggPSB1S2V5TGVuZ3RoOwogICAgIHBLZXktPmR3S2V5SW5kZXggPSBkd0tleUluZGV4OwogICAgIHBLZXktPmJ5Q2lwaGVyU3VpdGUgPSBieUtleURlY01vZGU7CkBAIC02OTMsNyArNjkzLDcgQEAKICAgICAgICAgaWYgKHVLZXlMZW5ndGggPT0gV0xBTl9XRVAxMDRfS0VZTEVOKQogICAgICAgICAgICAgcEtleS0+YWJ5S2V5WzE1XSB8PSAweDgwOwogICAgIH0KLSAgICBNQUN2U2V0S2V5RW50cnkoZHdJb0Jhc2UsIHBUYWJsZS0+S2V5VGFibGVbTUFYX0tFWV9UQUJMRS0xXS53S2V5Q3RsLCBNQVhfS0VZX1RBQkxFLTEsIHVLZXlJZHgsIHBUYWJsZS0+S2V5VGFibGVbTUFYX0tFWV9UQUJMRS0xXS5hYnlCU1NJRCwgKFBEV09SRClwS2V5LT5hYnlLZXksIGJ5TG9jYWxJRCk7CisgICAgTUFDdlNldEtleUVudHJ5KGR3SW9CYXNlLCBwVGFibGUtPktleVRhYmxlW01BWF9LRVlfVEFCTEUtMV0ud0tleUN0bCwgTUFYX0tFWV9UQUJMRS0xLCB1S2V5SWR4LCBwVGFibGUtPktleVRhYmxlW01BWF9LRVlfVEFCTEUtMV0uYWJ5QlNTSUQsICh1bnNpZ25lZCBsb25nICopcEtleS0+YWJ5S2V5LCBieUxvY2FsSUQpOwogCiAgICAgaWYgKChkd0tleUluZGV4ICYgVVNFX0tFWVJTQykgPT0gMCkgewogICAgICAgICAvLyBSU0Mgc2V0IGJ5IE5JQwpAQCAtNzE4LDcgKzcxOCw3IEBACiAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJwS2V5LT53VFNDMTVfMDogJXhcbiIsIHBLZXktPndUU0MxNV8wKTsKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPInBLZXktPmR3S2V5SW5kZXg6ICVseFxuIiwgcEtleS0+ZHdLZXlJbmRleCk7CiAKLSAgICByZXR1cm4gKFRSVUUpOworICAgIHJldHVybiAodHJ1ZSk7CiB9CiAKIApAQCAtNzM1LDM2ICs3MzUsMzYgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2VzcyBvdGhlcndpc2UgRkFMU0UKKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZXNzIG90aGVyd2lzZSBmYWxzZQogICoKICAqLwotQk9PTCBLZXliU2V0QWxsR3JvdXBLZXkgKAorYm9vbCBLZXliU2V0QWxsR3JvdXBLZXkgKAogICAgIFBTS2V5TWFuYWdlbWVudCBwVGFibGUsCi0gICAgRFdPUkQgICAgICAgICAgIGR3S2V5SW5kZXgsCi0gICAgVUxPTkcgICAgICAgICAgIHVLZXlMZW5ndGgsCisgICAgdW5zaWduZWQgbG9uZyBkd0tleUluZGV4LAorICAgIHVuc2lnbmVkIGxvbmcgdUtleUxlbmd0aCwKICAgICBQUVdPUkQgICAgICAgICAgcEtleVJTQywKLSAgICBQQllURSAgICAgICAgICAgcGJ5S2V5LAotICAgIEJZVEUgICAgICAgICAgICBieUtleURlY01vZGUsCi0gICAgRFdPUkRfUFRSICAgICAgIGR3SW9CYXNlLAotICAgIEJZVEUgICAgICAgICAgICBieUxvY2FsSUQKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlLZXksCisgICAgdW5zaWduZWQgY2hhciBieUtleURlY01vZGUsCisgICAgdW5zaWduZWQgbG9uZyBkd0lvQmFzZSwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TG9jYWxJRAogICAgICkKIHsKICAgICBpbnQgICAgICAgICBpOwotICAgIFVJTlQgICAgICAgIGlpOworICAgIHVuc2lnbmVkIGludCBpaTsKICAgICBQU0tleUl0ZW0gICBwS2V5OwotICAgIFVJTlQgICAgICAgIHVLZXlJZHg7CisgICAgdW5zaWduZWQgaW50IHVLZXlJZHg7CiAKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIkVudGVyIEtleWJTZXRBbGxHcm91cEtleTogJWxYXG4iLCBkd0tleUluZGV4KTsKIAogCiAgICAgaWYgKChkd0tleUluZGV4ICYgUEFJUldJU0VfS0VZKSAhPSAwKSB7ICAgICAgICAgICAgICAgICAgLy8gUGFpcndpc2Uga2V5Ci0gICAgICAgIHJldHVybiAoRkFMU0UpOworICAgICAgICByZXR1cm4gKGZhbHNlKTsKICAgICB9IGVsc2UgaWYgKChkd0tleUluZGV4ICYgMHgwMDAwMDBGRikgPj0gTUFYX0dST1VQX0tFWSkgewotICAgICAgICByZXR1cm4gKEZBTFNFKTsKKyAgICAgICAgcmV0dXJuIChmYWxzZSk7CiAgICAgfQogCiAgICAgZm9yIChpPTA7IGkgPCBNQVhfS0VZX1RBQkxFLTE7IGkrKykgewotICAgICAgICBpZiAocFRhYmxlLT5LZXlUYWJsZVtpXS5iSW5Vc2UgPT0gVFJVRSkgeworICAgICAgICBpZiAocFRhYmxlLT5LZXlUYWJsZVtpXS5iSW5Vc2UgPT0gdHJ1ZSkgewogICAgICAgICAgICAgLy8gZm91bmQgdGFibGUgYWxyZWFkeSBleGlzdAogICAgICAgICAgICAgLy8gR3JvdXAga2V5CiAgICAgICAgICAgICBwS2V5ID0gJihwVGFibGUtPktleVRhYmxlW2ldLkdyb3VwS2V5W2R3S2V5SW5kZXggJiAweDAwMDAwMEZGXSk7CkBAIC03ODEsNyArNzgxLDcgQEAKIAogICAgICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtpXS53S2V5Q3RsIHw9IDB4ODAwMDsgICAgICAgICAgICAgIC8vIGVuYWJsZSBvbi1mbHkKIAotICAgICAgICAgICAgcEtleS0+YktleVZhbGlkID0gVFJVRTsKKyAgICAgICAgICAgIHBLZXktPmJLZXlWYWxpZCA9IHRydWU7CiAgICAgICAgICAgICBwS2V5LT51S2V5TGVuZ3RoID0gdUtleUxlbmd0aDsKICAgICAgICAgICAgIHBLZXktPmR3S2V5SW5kZXggPSBkd0tleUluZGV4OwogICAgICAgICAgICAgcEtleS0+YnlDaXBoZXJTdWl0ZSA9IGJ5S2V5RGVjTW9kZTsKQEAgLTc5Miw3ICs3OTIsNyBAQAogICAgICAgICAgICAgICAgIGlmICh1S2V5TGVuZ3RoID09IFdMQU5fV0VQMTA0X0tFWUxFTikKICAgICAgICAgICAgICAgICAgICAgcEtleS0+YWJ5S2V5WzE1XSB8PSAweDgwOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgTUFDdlNldEtleUVudHJ5KGR3SW9CYXNlLCBwVGFibGUtPktleVRhYmxlW2ldLndLZXlDdGwsIGksIHVLZXlJZHgsIHBUYWJsZS0+S2V5VGFibGVbaV0uYWJ5QlNTSUQsIChQRFdPUkQpcEtleS0+YWJ5S2V5LCBieUxvY2FsSUQpOworICAgICAgICAgICAgTUFDdlNldEtleUVudHJ5KGR3SW9CYXNlLCBwVGFibGUtPktleVRhYmxlW2ldLndLZXlDdGwsIGksIHVLZXlJZHgsIHBUYWJsZS0+S2V5VGFibGVbaV0uYWJ5QlNTSUQsICh1bnNpZ25lZCBsb25nICopcEtleS0+YWJ5S2V5LCBieUxvY2FsSUQpOwogCiAgICAgICAgICAgICBpZiAoKGR3S2V5SW5kZXggJiBVU0VfS0VZUlNDKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgLy8gUlNDIHNldCBieSBOSUMKQEAgLTgxNyw3ICs4MTcsNyBAQAogICAgICAgICAgICAgLy9EQkdfUFJOX0dSUDEyKCgicEtleS0+d1RTQzE1XzA6ICVYXG4gIiwgcEtleS0+d1RTQzE1XzApKTsKICAgICAgICAgICAgIC8vREJHX1BSTl9HUlAxMigoInBLZXktPmR3S2V5SW5kZXg6ICVsWFxuICIsIHBLZXktPmR3S2V5SW5kZXgpKTsKIAotICAgICAgICB9IC8vIChwVGFibGUtPktleVRhYmxlW2ldLmJJblVzZSA9PSBUUlVFKQorICAgICAgICB9IC8vIChwVGFibGUtPktleVRhYmxlW2ldLmJJblVzZSA9PSB0cnVlKQogICAgIH0KLSAgICByZXR1cm4gKFRSVUUpOworICAgIHJldHVybiAodHJ1ZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2tleS5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9rZXkuaAppbmRleCAzOTQwM2Q5Li42YjJkYWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2tleS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUva2V5LmgKQEAgLTU3LDMzICs1NywzMyBAQAogCiB0eXBlZGVmIHN0cnVjdCB0YWdTS2V5SXRlbQogewotICAgIEJPT0wgICAgICAgIGJLZXlWYWxpZDsKLSAgICBVTE9ORyAgICAgICB1S2V5TGVuZ3RoOwotICAgIEJZVEUgICAgICAgIGFieUtleVtNQVhfS0VZX0xFTl07CisgICAgYm9vbCBiS2V5VmFsaWQ7CisgICAgdW5zaWduZWQgbG9uZyB1S2V5TGVuZ3RoOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5S2V5W01BWF9LRVlfTEVOXTsKICAgICBRV09SRCAgICAgICBLZXlSU0M7Ci0gICAgRFdPUkQgICAgICAgZHdUU0M0N18xNjsKLSAgICBXT1JEICAgICAgICB3VFNDMTVfMDsKLSAgICBCWVRFICAgICAgICBieUNpcGhlclN1aXRlOwotICAgIEJZVEUgICAgICAgIGJ5UmVzZXJ2ZWQwOwotICAgIERXT1JEICAgICAgIGR3S2V5SW5kZXg7CisgICAgdW5zaWduZWQgbG9uZyBkd1RTQzQ3XzE2OworICAgIHVuc2lnbmVkIHNob3J0IHdUU0MxNV8wOworICAgIHVuc2lnbmVkIGNoYXIgYnlDaXBoZXJTdWl0ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UmVzZXJ2ZWQwOworICAgIHVuc2lnbmVkIGxvbmcgZHdLZXlJbmRleDsKICAgICB2b2lkICpwdktleVRhYmxlOwogfSBTS2V5SXRlbSwgKlBTS2V5SXRlbTsgLy82NAogCiB0eXBlZGVmIHN0cnVjdCB0YWdTS2V5VGFibGUKIHsKLSAgICBCWVRFICAgICAgICBhYnlCU1NJRFtFVEhfQUxFTl07ICAvLzYKLSAgICBCWVRFICAgICAgICBieVJlc2VydmVkMFsyXTsgICAgICAgICAgICAgIC8vOAorICAgIHVuc2lnbmVkIGNoYXIgYWJ5QlNTSURbRVRIX0FMRU5dOyAgLy82CisgICAgdW5zaWduZWQgY2hhciBieVJlc2VydmVkMFsyXTsgICAgICAgICAgICAgIC8vOAogICAgIFNLZXlJdGVtICAgIFBhaXJ3aXNlS2V5OwogICAgIFNLZXlJdGVtICAgIEdyb3VwS2V5W01BWF9HUk9VUF9LRVldOyAvLzY0KjUgPSAzMjAsIDMyMCs4PTMyOAotICAgIERXT1JEICAgICAgIGR3R1RLZXlJbmRleDsgICAgICAgICAgICAvLyBHcm91cFRyYW5zbWl0S2V5IEluZGV4Ci0gICAgQk9PTCAgICAgICAgYkluVXNlOworICAgIHVuc2lnbmVkIGxvbmcgZHdHVEtleUluZGV4OyAgICAgICAgICAgIC8vIEdyb3VwVHJhbnNtaXRLZXkgSW5kZXgKKyAgICBib29sIGJJblVzZTsKICAgICAvLzIwMDYtMTExNi0wMSw8TW9kaWZ5PiBieSBOb21hZFpoYW8KLSAgICAvL1dPUkQgICAgICB3S2V5Q3RsOwotICAgIC8vQk9PTCAgICAgIGJTb2Z0V0VQOwotICAgIEJPT0wgICAgICAgIGJTb2Z0V0VQOwotICAgIFdPUkQgICAgICAgIHdLZXlDdGw7ICAgICAgLy8gZm9yIGFkZHJlc3Mgb2Ygd0tleUN0bCBhdCBhbGlnbiA0CisgICAgLy91bnNpZ25lZCBzaG9ydCB3S2V5Q3RsOworICAgIC8vYm9vbCBiU29mdFdFUDsKKyAgICBib29sIGJTb2Z0V0VQOworICAgIHVuc2lnbmVkIHNob3J0IHdLZXlDdGw7ICAgICAgLy8gZm9yIGFkZHJlc3Mgb2Ygd0tleUN0bCBhdCBhbGlnbiA0CiAKLSAgICBCWVRFICAgICAgICBieVJlc2VydmVkMVs2XTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UmVzZXJ2ZWQxWzZdOwogfSBTS2V5VGFibGUsICpQU0tleVRhYmxlOyAvLzM0OAogCiB0eXBlZGVmIHN0cnVjdCB0YWdTS2V5TWFuYWdlbWVudApAQCAtMTAxLDgzICsxMDEsODMgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotdm9pZCBLZXl2SW5pdFRhYmxlKFBTS2V5TWFuYWdlbWVudCBwVGFibGUsIERXT1JEX1BUUiBkd0lvQmFzZSk7Cit2b2lkIEtleXZJbml0VGFibGUoUFNLZXlNYW5hZ2VtZW50IHBUYWJsZSwgdW5zaWduZWQgbG9uZyBkd0lvQmFzZSk7CiAKLUJPT0wgS2V5YkdldEtleSgKK2Jvb2wgS2V5YkdldEtleSgKICAgICBQU0tleU1hbmFnZW1lbnQgcFRhYmxlLAotICAgIFBCWVRFICAgICAgICAgICBwYnlCU1NJRCwKLSAgICBEV09SRCAgICAgICAgICAgZHdLZXlJbmRleCwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCU1NJRCwKKyAgICB1bnNpZ25lZCBsb25nIGR3S2V5SW5kZXgsCiAgICAgUFNLZXlJdGVtICAgICAgICpwS2V5CiAgICAgKTsKIAotQk9PTCBLZXliU2V0S2V5KAorYm9vbCBLZXliU2V0S2V5KAogICAgIFBTS2V5TWFuYWdlbWVudCBwVGFibGUsCi0gICAgUEJZVEUgICAgICAgICAgIHBieUJTU0lELAotICAgIERXT1JEICAgICAgICAgICBkd0tleUluZGV4LAotICAgIFVMT05HICAgICAgICAgICB1S2V5TGVuZ3RoLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUJTU0lELAorICAgIHVuc2lnbmVkIGxvbmcgZHdLZXlJbmRleCwKKyAgICB1bnNpZ25lZCBsb25nIHVLZXlMZW5ndGgsCiAgICAgUFFXT1JEICAgICAgICAgIHBLZXlSU0MsCi0gICAgUEJZVEUgICAgICAgICAgIHBieUtleSwKLSAgICBCWVRFICAgICAgICAgICAgYnlLZXlEZWNNb2RlLAotICAgIERXT1JEX1BUUiAgICAgICBkd0lvQmFzZSwKLSAgICBCWVRFICAgICAgICAgICAgYnlMb2NhbElECisgICAgdW5zaWduZWQgY2hhciAqcGJ5S2V5LAorICAgIHVuc2lnbmVkIGNoYXIgYnlLZXlEZWNNb2RlLAorICAgIHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsCisgICAgdW5zaWduZWQgY2hhciBieUxvY2FsSUQKICAgICApOwogCi1CT09MIEtleWJTZXREZWZhdWx0S2V5KAorYm9vbCBLZXliU2V0RGVmYXVsdEtleSgKICAgICBQU0tleU1hbmFnZW1lbnQgcFRhYmxlLAotICAgIERXT1JEICAgICAgICAgICBkd0tleUluZGV4LAotICAgIFVMT05HICAgICAgICAgICB1S2V5TGVuZ3RoLAorICAgIHVuc2lnbmVkIGxvbmcgZHdLZXlJbmRleCwKKyAgICB1bnNpZ25lZCBsb25nIHVLZXlMZW5ndGgsCiAgICAgUFFXT1JEICAgICAgICAgIHBLZXlSU0MsCi0gICAgUEJZVEUgICAgICAgICAgIHBieUtleSwKLSAgICBCWVRFICAgICAgICAgICAgYnlLZXlEZWNNb2RlLAotICAgIERXT1JEX1BUUiAgICAgICBkd0lvQmFzZSwKLSAgICBCWVRFICAgICAgICAgICAgYnlMb2NhbElECisgICAgdW5zaWduZWQgY2hhciAqcGJ5S2V5LAorICAgIHVuc2lnbmVkIGNoYXIgYnlLZXlEZWNNb2RlLAorICAgIHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsCisgICAgdW5zaWduZWQgY2hhciBieUxvY2FsSUQKICAgICApOwogCi1CT09MIEtleWJSZW1vdmVLZXkoCitib29sIEtleWJSZW1vdmVLZXkoCiAgICAgUFNLZXlNYW5hZ2VtZW50IHBUYWJsZSwKLSAgICBQQllURSAgICAgICAgICAgcGJ5QlNTSUQsCi0gICAgRFdPUkQgICAgICAgICAgIGR3S2V5SW5kZXgsCi0gICAgRFdPUkRfUFRSICAgICAgIGR3SW9CYXNlCisgICAgdW5zaWduZWQgY2hhciAqcGJ5QlNTSUQsCisgICAgdW5zaWduZWQgbG9uZyBkd0tleUluZGV4LAorICAgIHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UKICAgICApOwogCi1CT09MIEtleWJHZXRUcmFuc21pdEtleSgKK2Jvb2wgS2V5YkdldFRyYW5zbWl0S2V5KAogICAgIFBTS2V5TWFuYWdlbWVudCBwVGFibGUsCi0gICAgUEJZVEUgICAgICAgICAgIHBieUJTU0lELAotICAgIERXT1JEICAgICAgICAgICBkd0tleVR5cGUsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5QlNTSUQsCisgICAgdW5zaWduZWQgbG9uZyBkd0tleVR5cGUsCiAgICAgUFNLZXlJdGVtICAgICAgICpwS2V5CiAgICAgKTsKIAotQk9PTCBLZXliQ2hlY2tQYWlyZXdpc2VLZXkoCitib29sIEtleWJDaGVja1BhaXJld2lzZUtleSgKICAgICBQU0tleU1hbmFnZW1lbnQgcFRhYmxlLAogICAgIFBTS2V5SXRlbSAgICAgICAqcEtleQogICAgICk7CiAKLUJPT0wgS2V5YlJlbW92ZUFsbEtleSgKK2Jvb2wgS2V5YlJlbW92ZUFsbEtleSgKICAgICBQU0tleU1hbmFnZW1lbnQgcFRhYmxlLAotICAgIFBCWVRFICAgICAgICAgICBwYnlCU1NJRCwKLSAgICBEV09SRF9QVFIgICAgICAgZHdJb0Jhc2UKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCU1NJRCwKKyAgICB1bnNpZ25lZCBsb25nIGR3SW9CYXNlCiAgICAgKTsKIAogdm9pZCBLZXl2UmVtb3ZlV0VQS2V5KAogICAgIFBTS2V5TWFuYWdlbWVudCBwVGFibGUsCi0gICAgRFdPUkQgICAgICAgICAgIGR3S2V5SW5kZXgsCi0gICAgRFdPUkRfUFRSICAgICAgIGR3SW9CYXNlCisgICAgdW5zaWduZWQgbG9uZyBkd0tleUluZGV4LAorICAgIHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UKICAgICApOwogCiB2b2lkIEtleXZSZW1vdmVBbGxXRVBLZXkoCiAgICAgUFNLZXlNYW5hZ2VtZW50IHBUYWJsZSwKLSAgICBEV09SRF9QVFIgICAgICAgZHdJb0Jhc2UKKyAgICB1bnNpZ25lZCBsb25nIGR3SW9CYXNlCiAgICAgKTsKIAotQk9PTCBLZXliU2V0QWxsR3JvdXBLZXkgKAorYm9vbCBLZXliU2V0QWxsR3JvdXBLZXkgKAogICAgIFBTS2V5TWFuYWdlbWVudCBwVGFibGUsCi0gICAgRFdPUkQgICAgICAgICAgIGR3S2V5SW5kZXgsCi0gICAgVUxPTkcgICAgICAgICAgIHVLZXlMZW5ndGgsCisgICAgdW5zaWduZWQgbG9uZyBkd0tleUluZGV4LAorICAgIHVuc2lnbmVkIGxvbmcgdUtleUxlbmd0aCwKICAgICBQUVdPUkQgICAgICAgICAgcEtleVJTQywKLSAgICBQQllURSAgICAgICAgICAgcGJ5S2V5LAotICAgIEJZVEUgICAgICAgICAgICBieUtleURlY01vZGUsCi0gICAgRFdPUkRfUFRSICAgICAgIGR3SW9CYXNlLAotICAgIEJZVEUgICAgICAgICAgICBieUxvY2FsSUQKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlLZXksCisgICAgdW5zaWduZWQgY2hhciBieUtleURlY01vZGUsCisgICAgdW5zaWduZWQgbG9uZyBkd0lvQmFzZSwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TG9jYWxJRAogICAgICk7CiAKICNlbmRpZiAvLyBfX0tFWV9IX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvbWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L21hYy5jCmluZGV4IGYxZWY3ZGEuLmY4ZDE2NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvbWFjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9tYWMuYwpAQCAtNzIsNyArNzIsNyBAQAogI2luY2x1ZGUgInRldGhlci5oIgogI2luY2x1ZGUgIm1hYy5oIgogCi1XT1JEIFR4UmF0ZV9pd2NvbmZpZzsvLzIwMDgtNS04IDxhZGQ+IGJ5IGNoZXN0ZXIKK3Vuc2lnbmVkIHNob3J0IFR4UmF0ZV9pd2NvbmZpZzsvLzIwMDgtNS04IDxhZGQ+IGJ5IGNoZXN0ZXIKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgRGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvL3N0YXRpYyBpbnQgICAgICAgICAgbXNnbGV2ZWwgICAgICAgICAgICAgICAgPU1TR19MRVZFTF9ERUJVRzsKIHN0YXRpYyBpbnQgICAgICAgICAgbXNnbGV2ZWwgICAgICAgICAgICAgICAgPU1TR19MRVZFTF9JTkZPOwpAQCAtMTAzLDcgKzEwMyw3IEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgTUFDdlJlYWRBbGxSZWdzIChEV09SRF9QVFIgZHdJb0Jhc2UsIFBCWVRFIHBieU1hY1JlZ3MpCit2b2lkIE1BQ3ZSZWFkQWxsUmVncyAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciAqcGJ5TWFjUmVncykKIHsKICAgICBpbnQgaWk7CiAKQEAgLTEzNywxMiArMTM3LDEyIEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIGFsbCB0ZXN0IGJpdHMgT247IG90aGVyd2lzZSBGQUxTRQorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIGFsbCB0ZXN0IGJpdHMgT247IG90aGVyd2lzZSBmYWxzZQogICoKICAqLwotQk9PTCBNQUNiSXNSZWdCaXRzT24gKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieVJlZ09mcywgQllURSBieVRlc3RCaXRzKQorYm9vbCBNQUNiSXNSZWdCaXRzT24gKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlSZWdPZnMsIHVuc2lnbmVkIGNoYXIgYnlUZXN0Qml0cykKIHsKLSAgICBCWVRFIGJ5RGF0YTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RGF0YTsKIAogICAgIFZOU3ZJblBvcnRCKGR3SW9CYXNlICsgYnlSZWdPZnMsICZieURhdGEpOwogICAgIHJldHVybiAoYnlEYXRhICYgYnlUZXN0Qml0cykgPT0gYnlUZXN0Qml0czsKQEAgLTE2MCwxMiArMTYwLDEyIEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIGFsbCB0ZXN0IGJpdHMgT2ZmOyBvdGhlcndpc2UgRkFMU0UKKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBhbGwgdGVzdCBiaXRzIE9mZjsgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIE1BQ2JJc1JlZ0JpdHNPZmYgKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieVJlZ09mcywgQllURSBieVRlc3RCaXRzKQorYm9vbCBNQUNiSXNSZWdCaXRzT2ZmICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5UmVnT2ZzLCB1bnNpZ25lZCBjaGFyIGJ5VGVzdEJpdHMpCiB7Ci0gICAgQllURSBieURhdGE7CisgICAgdW5zaWduZWQgY2hhciBieURhdGE7CiAKICAgICBWTlN2SW5Qb3J0Qihkd0lvQmFzZSArIGJ5UmVnT2ZzLCAmYnlEYXRhKTsKICAgICByZXR1cm4gIShieURhdGEgJiBieVRlc3RCaXRzKTsKQEAgLTE4MSwxOCArMTgxLDE4IEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIGludGVycnVwdCBpcyBkaXNhYmxlOyBvdGhlcndpc2UgRkFMU0UKKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBpbnRlcnJ1cHQgaXMgZGlzYWJsZTsgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIE1BQ2JJc0ludERpc2FibGUgKERXT1JEX1BUUiBkd0lvQmFzZSkKK2Jvb2wgTUFDYklzSW50RGlzYWJsZSAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSkKIHsKLSAgICBEV09SRCBkd0RhdGE7CisgICAgdW5zaWduZWQgbG9uZyBkd0RhdGE7CiAKICAgICBWTlN2SW5Qb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfSU1SLCAmZHdEYXRhKTsKICAgICBpZiAoZHdEYXRhICE9IDApCi0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8qCkBAIC0yMDksOSArMjA5LDkgQEAKICAqIFJldHVybiBWYWx1ZTogTWFzayBWYWx1ZSByZWFkCiAgKgogICovCi1CWVRFIE1BQ2J5UmVhZE11bHRpQWRkciAoRFdPUkRfUFRSIGR3SW9CYXNlLCBVSU5UIHVCeXRlSWR4KQordW5zaWduZWQgY2hhciBNQUNieVJlYWRNdWx0aUFkZHIgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGludCB1Qnl0ZUlkeCkKIHsKLSAgICBCWVRFIGJ5RGF0YTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RGF0YTsKIAogICAgIE1BQ3ZTZWxlY3RQYWdlMShkd0lvQmFzZSk7CiAgICAgVk5TdkluUG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX01BUjAgKyB1Qnl0ZUlkeCwgJmJ5RGF0YSk7CkBAIC0yMzQsNyArMjM0LDcgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBNQUN2V3JpdGVNdWx0aUFkZHIgKERXT1JEX1BUUiBkd0lvQmFzZSwgVUlOVCB1Qnl0ZUlkeCwgQllURSBieURhdGEpCit2b2lkIE1BQ3ZXcml0ZU11bHRpQWRkciAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgaW50IHVCeXRlSWR4LCB1bnNpZ25lZCBjaGFyIGJ5RGF0YSkKIHsKICAgICBNQUN2U2VsZWN0UGFnZTEoZHdJb0Jhc2UpOwogICAgIFZOU3ZPdXRQb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfTUFSMCArIHVCeXRlSWR4LCBieURhdGEpOwpAQCAtMjU1LDExICsyNTUsMTEgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBNQUN2U2V0TXVsdGlBZGRyQnlIYXNoIChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlIYXNoSWR4KQordm9pZCBNQUN2U2V0TXVsdGlBZGRyQnlIYXNoICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5SGFzaElkeCkKIHsKLSAgICBVSU5UIHVCeXRlSWR4OwotICAgIEJZVEUgYnlCaXRNYXNrOwotICAgIEJZVEUgYnlPcmdWYWx1ZTsKKyAgICB1bnNpZ25lZCBpbnQgdUJ5dGVJZHg7CisgICAgdW5zaWduZWQgY2hhciBieUJpdE1hc2s7CisgICAgdW5zaWduZWQgY2hhciBieU9yZ1ZhbHVlOwogCiAgICAgLy8gY2FsY3VsYXRlIGJ5dGUgcG9zaXRpb24KICAgICB1Qnl0ZUlkeCA9IGJ5SGFzaElkeCAvIDg7CkBAIC0yNjksNyArMjY5LDcgQEAKICAgICBieUJpdE1hc2sgPDw9IChieUhhc2hJZHggJSA4KTsKICAgICAvLyB0dXJuIG9uIHRoZSBiaXQKICAgICBieU9yZ1ZhbHVlID0gTUFDYnlSZWFkTXVsdGlBZGRyKGR3SW9CYXNlLCB1Qnl0ZUlkeCk7Ci0gICAgTUFDdldyaXRlTXVsdGlBZGRyKGR3SW9CYXNlLCB1Qnl0ZUlkeCwgKEJZVEUpKGJ5T3JnVmFsdWUgfCBieUJpdE1hc2spKTsKKyAgICBNQUN2V3JpdGVNdWx0aUFkZHIoZHdJb0Jhc2UsIHVCeXRlSWR4LCAodW5zaWduZWQgY2hhcikoYnlPcmdWYWx1ZSB8IGJ5Qml0TWFzaykpOwogfQogCiAvKgpAQCAtMjg2LDExICsyODYsMTEgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBNQUN2UmVzZXRNdWx0aUFkZHJCeUhhc2ggKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieUhhc2hJZHgpCit2b2lkIE1BQ3ZSZXNldE11bHRpQWRkckJ5SGFzaCAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUhhc2hJZHgpCiB7Ci0gICAgVUlOVCB1Qnl0ZUlkeDsKLSAgICBCWVRFIGJ5Qml0TWFzazsKLSAgICBCWVRFIGJ5T3JnVmFsdWU7CisgICAgdW5zaWduZWQgaW50IHVCeXRlSWR4OworICAgIHVuc2lnbmVkIGNoYXIgYnlCaXRNYXNrOworICAgIHVuc2lnbmVkIGNoYXIgYnlPcmdWYWx1ZTsKIAogICAgIC8vIGNhbGN1bGF0ZSBieXRlIHBvc2l0aW9uCiAgICAgdUJ5dGVJZHggPSBieUhhc2hJZHggLyA4OwpAQCAtMzAwLDcgKzMwMCw3IEBACiAgICAgYnlCaXRNYXNrIDw8PSAoYnlIYXNoSWR4ICUgOCk7CiAgICAgLy8gdHVybiBvZmYgdGhlIGJpdAogICAgIGJ5T3JnVmFsdWUgPSBNQUNieVJlYWRNdWx0aUFkZHIoZHdJb0Jhc2UsIHVCeXRlSWR4KTsKLSAgICBNQUN2V3JpdGVNdWx0aUFkZHIoZHdJb0Jhc2UsIHVCeXRlSWR4LCAoQllURSkoYnlPcmdWYWx1ZSAmICh+YnlCaXRNYXNrKSkpOworICAgIE1BQ3ZXcml0ZU11bHRpQWRkcihkd0lvQmFzZSwgdUJ5dGVJZHgsICh1bnNpZ25lZCBjaGFyKShieU9yZ1ZhbHVlICYgKH5ieUJpdE1hc2spKSk7CiB9CiAKIC8qCkBAIC0zMTcsOSArMzE3LDkgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBNQUN2U2V0UnhUaHJlc2hvbGQgKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieVRocmVzaG9sZCkKK3ZvaWQgTUFDdlNldFJ4VGhyZXNob2xkICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5VGhyZXNob2xkKQogewotICAgIEJZVEUgYnlPcmdWYWx1ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5T3JnVmFsdWU7CiAKICAgICBBU1NFUlQoYnlUaHJlc2hvbGQgPCA0KTsKIApAQCAtMzQyLDcgKzM0Miw3IEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgTUFDdkdldFJ4VGhyZXNob2xkIChEV09SRF9QVFIgZHdJb0Jhc2UsIFBCWVRFIHBieVRocmVzaG9sZCkKK3ZvaWQgTUFDdkdldFJ4VGhyZXNob2xkICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyICpwYnlUaHJlc2hvbGQpCiB7CiAgICAgLy8gZ2V0IEZDUjAKICAgICBWTlN2SW5Qb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfRkNSMCwgcGJ5VGhyZXNob2xkKTsKQEAgLTM2Myw5ICszNjMsOSBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIE1BQ3ZTZXRUeFRocmVzaG9sZCAoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5VGhyZXNob2xkKQordm9pZCBNQUN2U2V0VHhUaHJlc2hvbGQgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlUaHJlc2hvbGQpCiB7Ci0gICAgQllURSBieU9yZ1ZhbHVlOworICAgIHVuc2lnbmVkIGNoYXIgYnlPcmdWYWx1ZTsKIAogICAgIEFTU0VSVChieVRocmVzaG9sZCA8IDQpOwogCkBAIC0zODgsNyArMzg4LDcgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBNQUN2R2V0VHhUaHJlc2hvbGQgKERXT1JEX1BUUiBkd0lvQmFzZSwgUEJZVEUgcGJ5VGhyZXNob2xkKQordm9pZCBNQUN2R2V0VHhUaHJlc2hvbGQgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgKnBieVRocmVzaG9sZCkKIHsKICAgICAvLyBnZXQgRkNSMAogICAgIFZOU3ZJblBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19GQ1IwLCBwYnlUaHJlc2hvbGQpOwpAQCAtNDA5LDkgKzQwOSw5IEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgTUFDdlNldERtYUxlbmd0aCAoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5RG1hTGVuZ3RoKQordm9pZCBNQUN2U2V0RG1hTGVuZ3RoICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5RG1hTGVuZ3RoKQogewotICAgIEJZVEUgYnlPcmdWYWx1ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5T3JnVmFsdWU7CiAKICAgICBBU1NFUlQoYnlEbWFMZW5ndGggPCA0KTsKIApAQCAtNDM0LDcgKzQzNCw3IEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgTUFDdkdldERtYUxlbmd0aCAoRFdPUkRfUFRSIGR3SW9CYXNlLCBQQllURSBwYnlEbWFMZW5ndGgpCit2b2lkIE1BQ3ZHZXREbWFMZW5ndGggKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgKnBieURtYUxlbmd0aCkKIHsKICAgICAvLyBnZXQgRkNSMAogICAgIFZOU3ZJblBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19GQ1IwLCBwYnlEbWFMZW5ndGgpOwpAQCAtNDU1LDcgKzQ1NSw3IEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgTUFDdlNldFNob3J0UmV0cnlMaW1pdCAoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5UmV0cnlMaW1pdCkKK3ZvaWQgTUFDdlNldFNob3J0UmV0cnlMaW1pdCAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieVJldHJ5TGltaXQpCiB7CiAgICAgLy8gc2V0IFNSVAogICAgIFZOU3ZPdXRQb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfU1JULCBieVJldHJ5TGltaXQpOwpAQCAtNDc0LDcgKzQ3NCw3IEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgTUFDdkdldFNob3J0UmV0cnlMaW1pdCAoRFdPUkRfUFRSIGR3SW9CYXNlLCBQQllURSBwYnlSZXRyeUxpbWl0KQordm9pZCBNQUN2R2V0U2hvcnRSZXRyeUxpbWl0ICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyICpwYnlSZXRyeUxpbWl0KQogewogICAgIC8vIGdldCBTUlQKICAgICBWTlN2SW5Qb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfU1JULCBwYnlSZXRyeUxpbWl0KTsKQEAgLTQ5NCw3ICs0OTQsNyBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIE1BQ3ZTZXRMb25nUmV0cnlMaW1pdCAoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5UmV0cnlMaW1pdCkKK3ZvaWQgTUFDdlNldExvbmdSZXRyeUxpbWl0ICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5UmV0cnlMaW1pdCkKIHsKICAgICAvLyBzZXQgTFJUCiAgICAgVk5Tdk91dFBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19MUlQsIGJ5UmV0cnlMaW1pdCk7CkBAIC01MTMsNyArNTEzLDcgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBNQUN2R2V0TG9uZ1JldHJ5TGltaXQgKERXT1JEX1BUUiBkd0lvQmFzZSwgUEJZVEUgcGJ5UmV0cnlMaW1pdCkKK3ZvaWQgTUFDdkdldExvbmdSZXRyeUxpbWl0ICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyICpwYnlSZXRyeUxpbWl0KQogewogICAgIC8vIGdldCBMUlQKICAgICBWTlN2SW5Qb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfTFJULCBwYnlSZXRyeUxpbWl0KTsKQEAgLTUzMyw5ICs1MzMsOSBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIE1BQ3ZTZXRMb29wYmFja01vZGUgKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieUxvb3BiYWNrTW9kZSkKK3ZvaWQgTUFDdlNldExvb3BiYWNrTW9kZSAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUxvb3BiYWNrTW9kZSkKIHsKLSAgICBCWVRFIGJ5T3JnVmFsdWU7CisgICAgdW5zaWduZWQgY2hhciBieU9yZ1ZhbHVlOwogCiAgICAgQVNTRVJUKGJ5TG9vcGJhY2tNb2RlIDwgMyk7CiAgICAgYnlMb29wYmFja01vZGUgPDw9IDY7CkBAIC01NTYsMTcgKzU1NiwxNyBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBpbiBMb29wYmFjayBtb2RlOyBvdGhlcndpc2UgRkFMU0UKKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBpbiBMb29wYmFjayBtb2RlOyBvdGhlcndpc2UgZmFsc2UKICAqCiAgKi8KLUJPT0wgTUFDYklzSW5Mb29wYmFja01vZGUgKERXT1JEX1BUUiBkd0lvQmFzZSkKK2Jvb2wgTUFDYklzSW5Mb29wYmFja01vZGUgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UpCiB7Ci0gICAgQllURSBieU9yZ1ZhbHVlOworICAgIHVuc2lnbmVkIGNoYXIgYnlPcmdWYWx1ZTsKIAogICAgIFZOU3ZJblBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19URVNULCAmYnlPcmdWYWx1ZSk7CiAgICAgaWYgKGJ5T3JnVmFsdWUgJiAoVEVTVF9MQklOVCB8IFRFU1RfTEJFWFQpKQotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogLyoKQEAgLTU4MywxMCArNTgzLDEwIEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgTUFDdlNldFBhY2tldEZpbHRlciAoRFdPUkRfUFRSIGR3SW9CYXNlLCBXT1JEIHdGaWx0ZXJUeXBlKQordm9pZCBNQUN2U2V0UGFja2V0RmlsdGVyICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBzaG9ydCB3RmlsdGVyVHlwZSkKIHsKLSAgICBCWVRFICAgIGJ5T2xkUkNSOwotICAgIEJZVEUgICAgYnlOZXdSQ1IgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgYnlPbGRSQ1I7CisgICAgdW5zaWduZWQgY2hhciBieU5ld1JDUiA9IDA7CiAKICAgICAvLyBpZiBvbmx5IGluIERJUkVDVEVEIG1vZGUsIG11bHRpY2FzdC1hZGRyZXNzIHdpbGwgc2V0IHRvIHplcm8sCiAgICAgLy8gYnV0IGlmIG90aGVyIG1vZGUgZXhpc3QgKGUuZy4gUFJPTUlTQ1VPVVMpLCBtdWx0aWNhc3QtYWRkcmVzcwpAQCAtNTk1LDcgKzU5NSw3IEBACiAgICAgICAgIC8vIHNldCBtdWx0aWNhc3QgYWRkcmVzcyB0byBhY2NlcHQgbm9uZQogICAgICAgICBNQUN2U2VsZWN0UGFnZTEoZHdJb0Jhc2UpOwogICAgICAgICBWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX01BUjAsIDBMKTsKLSAgICAgICAgVk5Tdk91dFBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19NQVIwICsgc2l6ZW9mKERXT1JEKSwgMEwpOworICAgICAgICBWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX01BUjAgKyBzaXplb2YodW5zaWduZWQgbG9uZyksIDBMKTsKICAgICAgICAgTUFDdlNlbGVjdFBhZ2UwKGR3SW9CYXNlKTsKICAgICB9CiAKQEAgLTYwMyw3ICs2MDMsNyBAQAogICAgICAgICAvLyBzZXQgbXVsdGljYXN0IGFkZHJlc3MgdG8gYWNjZXB0IGFsbAogICAgICAgICBNQUN2U2VsZWN0UGFnZTEoZHdJb0Jhc2UpOwogICAgICAgICBWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX01BUjAsIDB4RkZGRkZGRkZMKTsKLSAgICAgICAgVk5Tdk91dFBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19NQVIwICsgc2l6ZW9mKERXT1JEKSwgMHhGRkZGRkZGRkwpOworICAgICAgICBWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX01BUjAgKyBzaXplb2YodW5zaWduZWQgbG9uZyksIDB4RkZGRkZGRkZMKTsKICAgICAgICAgTUFDdlNlbGVjdFBhZ2UwKGR3SW9CYXNlKTsKICAgICB9CiAKQEAgLTY0Myw3ICs2NDMsNyBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIE1BQ3ZTYXZlQ29udGV4dCAoRFdPUkRfUFRSIGR3SW9CYXNlLCBQQllURSBwYnlDeHRCdWYpCit2b2lkIE1BQ3ZTYXZlQ29udGV4dCAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciAqcGJ5Q3h0QnVmKQogewogICAgIGludCAgICAgICAgIGlpOwogCkBAIC02NzYsNyArNjc2LDcgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBNQUN2UmVzdG9yZUNvbnRleHQgKERXT1JEX1BUUiBkd0lvQmFzZSwgUEJZVEUgcGJ5Q3h0QnVmKQordm9pZCBNQUN2UmVzdG9yZUNvbnRleHQgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgKnBieUN4dEJ1ZikKIHsKICAgICBpbnQgICAgICAgICBpaTsKIApAQCAtNzAzLDE0ICs3MDMsMTQgQEAKICAgICB9CiAKICAgICAvLyByZXN0b3JlIENVUlJfUlhfREVTQ19BRERSLCBDVVJSX1RYX0RFU0NfQUREUgotICAgIFZOU3ZPdXRQb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfVFhETUFQVFIwLCAqKFBEV09SRCkocGJ5Q3h0QnVmICsgTUFDX1JFR19UWERNQVBUUjApKTsKLSAgICBWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX0FDMERNQVBUUiwgKihQRFdPUkQpKHBieUN4dEJ1ZiArIE1BQ19SRUdfQUMwRE1BUFRSKSk7Ci0gICAgVk5Tdk91dFBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19CQ05ETUFQVFIsICooUERXT1JEKShwYnlDeHRCdWYgKyBNQUNfUkVHX0JDTkRNQVBUUikpOworICAgIFZOU3ZPdXRQb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfVFhETUFQVFIwLCAqKHVuc2lnbmVkIGxvbmcgKikocGJ5Q3h0QnVmICsgTUFDX1JFR19UWERNQVBUUjApKTsKKyAgICBWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX0FDMERNQVBUUiwgKih1bnNpZ25lZCBsb25nICopKHBieUN4dEJ1ZiArIE1BQ19SRUdfQUMwRE1BUFRSKSk7CisgICAgVk5Tdk91dFBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19CQ05ETUFQVFIsICoodW5zaWduZWQgbG9uZyAqKShwYnlDeHRCdWYgKyBNQUNfUkVHX0JDTkRNQVBUUikpOwogCiAKLSAgICBWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX1JYRE1BUFRSMCwgKihQRFdPUkQpKHBieUN4dEJ1ZiArIE1BQ19SRUdfUlhETUFQVFIwKSk7CisgICAgVk5Tdk91dFBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19SWERNQVBUUjAsICoodW5zaWduZWQgbG9uZyAqKShwYnlDeHRCdWYgKyBNQUNfUkVHX1JYRE1BUFRSMCkpOwogCi0gICAgVk5Tdk91dFBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19SWERNQVBUUjEsICooUERXT1JEKShwYnlDeHRCdWYgKyBNQUNfUkVHX1JYRE1BUFRSMSkpOworICAgIFZOU3ZPdXRQb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfUlhETUFQVFIxLCAqKHVuc2lnbmVkIGxvbmcgKikocGJ5Q3h0QnVmICsgTUFDX1JFR19SWERNQVBUUjEpKTsKIAogfQogCkBAIC03MjUsMzkgKzcyNSwzOSBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBhbGwgdmFsdWVzIGFyZSB0aGUgc2FtZTsgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgYWxsIHZhbHVlcyBhcmUgdGhlIHNhbWU7IG90aGVyd2lzZSBmYWxzZQogICoKICAqLwotQk9PTCBNQUNiQ29tcGFyZUNvbnRleHQgKERXT1JEX1BUUiBkd0lvQmFzZSwgUEJZVEUgcGJ5Q3h0QnVmKQorYm9vbCBNQUNiQ29tcGFyZUNvbnRleHQgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgKnBieUN4dEJ1ZikKIHsKLSAgICBEV09SRCAgICAgICBkd0RhdGE7CisgICAgdW5zaWduZWQgbG9uZyBkd0RhdGE7CiAKICAgICAvLyBjb21wYXJlIE1BQyBjb250ZXh0IHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGEgcG93ZXIgbG9zdCBpbml0LAotICAgIC8vIHJldHVybiBUUlVFIGZvciBwb3dlciByZW1haW5pbmcgaW5pdCwgcmV0dXJuIEZBTFNFIGZvciBwb3dlciBsb3N0IGluaXQKKyAgICAvLyByZXR1cm4gdHJ1ZSBmb3IgcG93ZXIgcmVtYWluaW5nIGluaXQsIHJldHVybiBmYWxzZSBmb3IgcG93ZXIgbG9zdCBpbml0CiAKICAgICAvLyBjb21wYXJlIENVUlJfUlhfREVTQ19BRERSLCBDVVJSX1RYX0RFU0NfQUREUgogICAgIFZOU3ZJblBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19UWERNQVBUUjAsICZkd0RhdGEpOwotICAgIGlmIChkd0RhdGEgIT0gKihQRFdPUkQpKHBieUN4dEJ1ZiArIE1BQ19SRUdfVFhETUFQVFIwKSkgewotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgaWYgKGR3RGF0YSAhPSAqKHVuc2lnbmVkIGxvbmcgKikocGJ5Q3h0QnVmICsgTUFDX1JFR19UWERNQVBUUjApKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBWTlN2SW5Qb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfQUMwRE1BUFRSLCAmZHdEYXRhKTsKLSAgICBpZiAoZHdEYXRhICE9ICooUERXT1JEKShwYnlDeHRCdWYgKyBNQUNfUkVHX0FDMERNQVBUUikpIHsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIGlmIChkd0RhdGEgIT0gKih1bnNpZ25lZCBsb25nICopKHBieUN4dEJ1ZiArIE1BQ19SRUdfQUMwRE1BUFRSKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgVk5TdkluUG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX1JYRE1BUFRSMCwgJmR3RGF0YSk7Ci0gICAgaWYgKGR3RGF0YSAhPSAqKFBEV09SRCkocGJ5Q3h0QnVmICsgTUFDX1JFR19SWERNQVBUUjApKSB7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICBpZiAoZHdEYXRhICE9ICoodW5zaWduZWQgbG9uZyAqKShwYnlDeHRCdWYgKyBNQUNfUkVHX1JYRE1BUFRSMCkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIFZOU3ZJblBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19SWERNQVBUUjEsICZkd0RhdGEpOwotICAgIGlmIChkd0RhdGEgIT0gKihQRFdPUkQpKHBieUN4dEJ1ZiArIE1BQ19SRUdfUlhETUFQVFIxKSkgewotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgaWYgKGR3RGF0YSAhPSAqKHVuc2lnbmVkIGxvbmcgKikocGJ5Q3h0QnVmICsgTUFDX1JFR19SWERNQVBUUjEpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKIAotICAgIHJldHVybiBUUlVFOworICAgIHJldHVybiB0cnVlOwogfQogCiAvKgpAQCAtNzcwLDEzICs3NzAsMTMgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgUmVzZXQgU3VjY2Vzczsgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgUmVzZXQgU3VjY2Vzczsgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIE1BQ2JTb2Z0d2FyZVJlc2V0IChEV09SRF9QVFIgZHdJb0Jhc2UpCitib29sIE1BQ2JTb2Z0d2FyZVJlc2V0ICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlKQogewotICAgIEJZVEUgICAgYnlEYXRhOwotICAgIFdPUkQgICAgd3c7CisgICAgdW5zaWduZWQgY2hhciBieURhdGE7CisgICAgdW5zaWduZWQgc2hvcnQgd3c7CiAKICAgICAvLyB0dXJuIG9uIEhPU1RDUl9TT0ZUUlNULCBqdXN0IHdyaXRlIDB4MDEgdG8gcmVzZXQKICAgICAvL01BQ3ZSZWdCaXRzT24oZHdJb0Jhc2UsIE1BQ19SRUdfSE9TVENSLCBIT1NUQ1JfU09GVFJTVCk7CkBAIC03ODgsOCArNzg4LDggQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBpZiAod3cgPT0gV19NQVhfVElNRU9VVCkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIHJldHVybiBUUlVFOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7CiAKIH0KIApAQCAtODAzLDEzICs4MDMsMTMgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2Vzczsgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2Vzczsgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIE1BQ2JTYWZlU29mdHdhcmVSZXNldCAoRFdPUkRfUFRSIGR3SW9CYXNlKQorYm9vbCBNQUNiU2FmZVNvZnR3YXJlUmVzZXQgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UpCiB7Ci0gICAgQllURSAgICBhYnlUbXBSZWdEYXRhW01BQ19NQVhfQ09OVEVYVF9TSVpFX1BBR0UwK01BQ19NQVhfQ09OVEVYVF9TSVpFX1BBR0UxXTsKLSAgICBCT09MICAgIGJSZXRWYWw7CisgICAgdW5zaWduZWQgY2hhciBhYnlUbXBSZWdEYXRhW01BQ19NQVhfQ09OVEVYVF9TSVpFX1BBR0UwK01BQ19NQVhfQ09OVEVYVF9TSVpFX1BBR0UxXTsKKyAgICBib29sIGJSZXRWYWw7CiAKICAgICAvLyBQQVRDSC4uLi4KICAgICAvLyBzYXZlIHNvbWUgaW1wb3J0YW50IHJlZ2lzdGVyJ3MgdmFsdWUsIHRoZW4gZG8KQEAgLTgzNiwxNCArODM2LDE0IEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIHN1Y2Nlc3M7IG90aGVyd2lzZSBGQUxTRQorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2Nlc3M7IG90aGVyd2lzZSBmYWxzZQogICoKICAqLwotQk9PTCBNQUNiU2FmZVJ4T2ZmIChEV09SRF9QVFIgZHdJb0Jhc2UpCitib29sIE1BQ2JTYWZlUnhPZmYgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UpCiB7Ci0gICAgV09SRCAgICB3dzsKLSAgICBEV09SRCAgIGR3RGF0YTsKLSAgICBCWVRFICAgIGJ5RGF0YTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3dzsKKyAgICB1bnNpZ25lZCBsb25nIGR3RGF0YTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RGF0YTsKIAogICAgIC8vIHR1cm4gb2ZmIHdvdyB0ZW1wIGZvciB0dXJuIG9mZiBSeCBzYWZlbHkKIApAQCAtODU4LDcgKzg1OCw3IEBACiAgICAgaWYgKHd3ID09IFdfTUFYX1RJTUVPVVQpIHsKICAgICAgICAgREJHX1BPUlQ4MCgweDEwKTsKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgREJHX1BPUlQ4MCgweDEwKVxuIik7Ci0gICAgICAgIHJldHVybihGQUxTRSk7CisgICAgICAgIHJldHVybihmYWxzZSk7CiAgICAgfQogICAgIGZvciAod3cgPSAwOyB3dyA8IFdfTUFYX1RJTUVPVVQ7IHd3KyspIHsKICAgICAgICAgVk5TdkluUG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX1JYRE1BQ1RMMSwgJmR3RGF0YSk7CkBAIC04NjgsNyArODY4LDcgQEAKICAgICBpZiAod3cgPT0gV19NQVhfVElNRU9VVCkgewogICAgICAgICBEQkdfUE9SVDgwKDB4MTEpOwogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiBEQkdfUE9SVDgwKDB4MTEpXG4iKTsKLSAgICAgICAgcmV0dXJuKEZBTFNFKTsKKyAgICAgICAgcmV0dXJuKGZhbHNlKTsKICAgICB9CiAKICAgICAvLyB0cnkgdG8gc2FmZSBzaHV0ZG93biBSWApAQCAtODgyLDkgKzg4Miw5IEBACiAgICAgaWYgKHd3ID09IFdfTUFYX1RJTUVPVVQpIHsKICAgICAgICAgREJHX1BPUlQ4MCgweDEyKTsKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgREJHX1BPUlQ4MCgweDEyKVxuIik7Ci0gICAgICAgIHJldHVybihGQUxTRSk7CisgICAgICAgIHJldHVybihmYWxzZSk7CiAgICAgfQotICAgIHJldHVybiBUUlVFOworICAgIHJldHVybiB0cnVlOwogfQogCiAvKgpAQCAtODk3LDE0ICs4OTcsMTQgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2Vzczsgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2Vzczsgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIE1BQ2JTYWZlVHhPZmYgKERXT1JEX1BUUiBkd0lvQmFzZSkKK2Jvb2wgTUFDYlNhZmVUeE9mZiAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSkKIHsKLSAgICBXT1JEICAgIHd3OwotICAgIERXT1JEICAgZHdEYXRhOwotICAgIEJZVEUgICAgYnlEYXRhOworICAgIHVuc2lnbmVkIHNob3J0IHd3OworICAgIHVuc2lnbmVkIGxvbmcgZHdEYXRhOworICAgIHVuc2lnbmVkIGNoYXIgYnlEYXRhOwogCiAgICAgLy8gQ2xlYXIgVFggRE1BCiAgICAgLy9UeDAKQEAgLTkyMSw3ICs5MjEsNyBAQAogICAgIGlmICh3dyA9PSBXX01BWF9USU1FT1VUKSB7CiAgICAgICAgIERCR19QT1JUODAoMHgyMCk7CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIERCR19QT1JUODAoMHgyMClcbiIpOwotICAgICAgICByZXR1cm4oRkFMU0UpOworICAgICAgICByZXR1cm4oZmFsc2UpOwogICAgIH0KICAgICBmb3IgKHd3ID0gMDsgd3cgPCBXX01BWF9USU1FT1VUOyB3dysrKSB7CiAgICAgICAgIFZOU3ZJblBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19BQzBETUFDVEwsICZkd0RhdGEpOwpAQCAtOTMxLDcgKzkzMSw3IEBACiAgICAgaWYgKHd3ID09IFdfTUFYX1RJTUVPVVQpIHsKICAgICAgICAgREJHX1BPUlQ4MCgweDIxKTsKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgREJHX1BPUlQ4MCgweDIxKVxuIik7Ci0gICAgICAgIHJldHVybihGQUxTRSk7CisgICAgICAgIHJldHVybihmYWxzZSk7CiAgICAgfQogCiAgICAgLy8gdHJ5IHRvIHNhZmUgc2h1dGRvd24gVFgKQEAgLTk0Niw5ICs5NDYsOSBAQAogICAgIGlmICh3dyA9PSBXX01BWF9USU1FT1VUKSB7CiAgICAgICAgIERCR19QT1JUODAoMHgyNCk7CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIERCR19QT1JUODAoMHgyNClcbiIpOwotICAgICAgICByZXR1cm4oRkFMU0UpOworICAgICAgICByZXR1cm4oZmFsc2UpOwogICAgIH0KLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLyoKQEAgLTk2MSwyOSArOTYxLDI5IEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIHN1Y2Nlc3M7IG90aGVyd2lzZSBGQUxTRQorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2Nlc3M7IG90aGVyd2lzZSBmYWxzZQogICoKICAqLwotQk9PTCBNQUNiU2FmZVN0b3AgKERXT1JEX1BUUiBkd0lvQmFzZSkKK2Jvb2wgTUFDYlNhZmVTdG9wICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlKQogewogICAgIE1BQ3ZSZWdCaXRzT2ZmKGR3SW9CYXNlLCBNQUNfUkVHX1RDUiwgVENSX0FVVE9CQ05UWCk7CiAKLSAgICBpZiAoTUFDYlNhZmVSeE9mZihkd0lvQmFzZSkgPT0gRkFMU0UpIHsKKyAgICBpZiAoTUFDYlNhZmVSeE9mZihkd0lvQmFzZSkgPT0gZmFsc2UpIHsKICAgICAgICAgREJHX1BPUlQ4MCgweEExKTsKLSAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgTUFDYlNhZmVSeE9mZiA9PSBGQUxTRSlcbiIpOworICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiBNQUNiU2FmZVJ4T2ZmID09IGZhbHNlKVxuIik7CiAgICAgICAgIE1BQ2JTYWZlU29mdHdhcmVSZXNldChkd0lvQmFzZSk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBpZiAoTUFDYlNhZmVUeE9mZihkd0lvQmFzZSkgPT0gRkFMU0UpIHsKKyAgICBpZiAoTUFDYlNhZmVUeE9mZihkd0lvQmFzZSkgPT0gZmFsc2UpIHsKICAgICAgICAgREJHX1BPUlQ4MCgweEEyKTsKLSAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgTUFDYlNhZmVUeE9mZiA9PSBGQUxTRSlcbiIpOworICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiBNQUNiU2FmZVR4T2ZmID09IGZhbHNlKVxuIik7CiAgICAgICAgIE1BQ2JTYWZlU29mdHdhcmVSZXNldChkd0lvQmFzZSk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIE1BQ3ZSZWdCaXRzT2ZmKGR3SW9CYXNlLCBNQUNfUkVHX0hPU1RDUiwgSE9TVENSX01BQ0VOKTsKIAotICAgIHJldHVybiBUUlVFOworICAgIHJldHVybiB0cnVlOwogfQogCiAvKgpAQCAtOTk2LDEwICs5OTYsMTAgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2Vzczsgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2Vzczsgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIE1BQ2JTaHV0ZG93biAoRFdPUkRfUFRSIGR3SW9CYXNlKQorYm9vbCBNQUNiU2h1dGRvd24gKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UpCiB7CiAgICAgLy8gZGlzYWJsZSBNQUMgSU1SCiAgICAgTUFDdkludERpc2FibGUoZHdJb0Jhc2UpOwpAQCAtMTAwNywxMCArMTAwNywxMCBAQAogICAgIC8vIHN0b3AgdGhlIGFkYXB0ZXIKICAgICBpZiAoIU1BQ2JTYWZlU3RvcChkd0lvQmFzZSkpIHsKICAgICAgICAgTUFDdlNldExvb3BiYWNrTW9kZShkd0lvQmFzZSwgTUFDX0xCX05PTkUpOwotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgTUFDdlNldExvb3BiYWNrTW9kZShkd0lvQmFzZSwgTUFDX0xCX05PTkUpOwotICAgIHJldHVybiBUUlVFOworICAgIHJldHVybiB0cnVlOwogfQogCiAvKgpAQCAtMTAyNiw3ICsxMDI2LDcgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBNQUN2SW5pdGlhbGl6ZSAoRFdPUkRfUFRSIGR3SW9CYXNlKQordm9pZCBNQUN2SW5pdGlhbGl6ZSAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSkKIHsKICAgICAvLyBjbGVhciBzdGlja3kgYml0cwogICAgIE1BQ3ZDbGVhclN0Y2tEUyhkd0lvQmFzZSk7CkBAIC0xMDQ1LDggKzEwNDUsOCBAQAogICAgIC8vIGlzc3VlIEFVVE9MRCBpbiBFRUNTUiB0byByZWxvYWQgZWVwcm9tCiAgICAgLy9NQUN2UmVnQml0c09uKGR3SW9CYXNlLCBNQUNfUkVHX0kyTUNTUiwgSTJNQ1NSX0FVVE9MRCk7CiAgICAgLy8gd2FpdCB1bnRpbCBFRVBST00gbG9hZGluZyBjb21wbGV0ZQotICAgIC8vd2hpbGUgKFRSVUUpIHsKLSAgICAvLyAgICBVOCB1OERhdGE7CisgICAgLy93aGlsZSAodHJ1ZSkgeworICAgIC8vICAgIHU4IHU4RGF0YTsKICAgICAvLyAgICBWTlN2SW5Qb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfSTJNQ1NSLCAmdThEYXRhKTsKICAgICAvLyAgICBpZiAoICEodThEYXRhICYgSTJNQ1NSX0FVVE9MRCkpCiAgICAgLy8gICAgICAgIGJyZWFrOwpAQCAtMTA3OSwxMSArMTA3OSwxMSBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIE1BQ3ZTZXRDdXJyUngwRGVzY0FkZHIgKERXT1JEX1BUUiBkd0lvQmFzZSwgRFdPUkQgZHdDdXJyRGVzY0FkZHIpCit2b2lkIE1BQ3ZTZXRDdXJyUngwRGVzY0FkZHIgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGxvbmcgZHdDdXJyRGVzY0FkZHIpCiB7Ci1XT1JEICAgIHd3OwotQllURSAgICBieURhdGE7Ci1CWVRFICAgIGJ5T3JnRE1BQ3RsOwordW5zaWduZWQgc2hvcnQgd3c7Cit1bnNpZ25lZCBjaGFyIGJ5RGF0YTsKK3Vuc2lnbmVkIGNoYXIgYnlPcmdETUFDdGw7CiAKICAgICBWTlN2SW5Qb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfUlhETUFDVEwwLCAmYnlPcmdETUFDdGwpOwogICAgIGlmIChieU9yZ0RNQUN0bCAmIERNQUNUTF9SVU4pIHsKQEAgLTExMTcsMTEgKzExMTcsMTEgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBNQUN2U2V0Q3VyclJ4MURlc2NBZGRyIChEV09SRF9QVFIgZHdJb0Jhc2UsIERXT1JEIGR3Q3VyckRlc2NBZGRyKQordm9pZCBNQUN2U2V0Q3VyclJ4MURlc2NBZGRyICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBsb25nIGR3Q3VyckRlc2NBZGRyKQogewotV09SRCAgICB3dzsKLUJZVEUgICAgYnlEYXRhOwotQllURSAgICBieU9yZ0RNQUN0bDsKK3Vuc2lnbmVkIHNob3J0IHd3OwordW5zaWduZWQgY2hhciBieURhdGE7Cit1bnNpZ25lZCBjaGFyIGJ5T3JnRE1BQ3RsOwogCiAgICAgVk5TdkluUG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX1JYRE1BQ1RMMSwgJmJ5T3JnRE1BQ3RsKTsKICAgICBpZiAoYnlPcmdETUFDdGwgJiBETUFDVExfUlVOKSB7CkBAIC0xMTU1LDExICsxMTU1LDExIEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgTUFDdlNldEN1cnJUeDBEZXNjQWRkckV4IChEV09SRF9QVFIgZHdJb0Jhc2UsIERXT1JEIGR3Q3VyckRlc2NBZGRyKQordm9pZCBNQUN2U2V0Q3VyclR4MERlc2NBZGRyRXggKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGxvbmcgZHdDdXJyRGVzY0FkZHIpCiB7Ci1XT1JEICAgIHd3OwotQllURSAgICBieURhdGE7Ci1CWVRFICAgIGJ5T3JnRE1BQ3RsOwordW5zaWduZWQgc2hvcnQgd3c7Cit1bnNpZ25lZCBjaGFyIGJ5RGF0YTsKK3Vuc2lnbmVkIGNoYXIgYnlPcmdETUFDdGw7CiAKICAgICBWTlN2SW5Qb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfVFhETUFDVEwwLCAmYnlPcmdETUFDdGwpOwogICAgIGlmIChieU9yZ0RNQUN0bCAmIERNQUNUTF9SVU4pIHsKQEAgLTExOTQsMTEgKzExOTQsMTEgQEAKICAqCiAgKi8KICAvL1R4RE1BMSA9IEFDMERNQQotdm9pZCBNQUN2U2V0Q3VyckFDMERlc2NBZGRyRXggKERXT1JEX1BUUiBkd0lvQmFzZSwgRFdPUkQgZHdDdXJyRGVzY0FkZHIpCit2b2lkIE1BQ3ZTZXRDdXJyQUMwRGVzY0FkZHJFeCAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgbG9uZyBkd0N1cnJEZXNjQWRkcikKIHsKLVdPUkQgICAgd3c7Ci1CWVRFICAgIGJ5RGF0YTsKLUJZVEUgICAgYnlPcmdETUFDdGw7Cit1bnNpZ25lZCBzaG9ydCB3dzsKK3Vuc2lnbmVkIGNoYXIgYnlEYXRhOwordW5zaWduZWQgY2hhciBieU9yZ0RNQUN0bDsKIAogICAgIFZOU3ZJblBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19BQzBETUFDVEwsICZieU9yZ0RNQUN0bCk7CiAgICAgaWYgKGJ5T3JnRE1BQ3RsICYgRE1BQ1RMX1JVTikgewpAQCAtMTIyMSw3ICsxMjIxLDcgQEAKIAogCiAKLXZvaWQgTUFDdlNldEN1cnJUWERlc2NBZGRyIChpbnQgaVR4VHlwZSwgRFdPUkRfUFRSIGR3SW9CYXNlLCBEV09SRCBkd0N1cnJEZXNjQWRkcikKK3ZvaWQgTUFDdlNldEN1cnJUWERlc2NBZGRyIChpbnQgaVR4VHlwZSwgdW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgbG9uZyBkd0N1cnJEZXNjQWRkcikKIHsKICAgICBpZihpVHhUeXBlID09IFRZUEVfQUMwRE1BKXsKICAgICAgICAgTUFDdlNldEN1cnJBQzBEZXNjQWRkckV4KGR3SW9CYXNlLCBkd0N1cnJEZXNjQWRkcik7CkBAIC0xMjQ0LDEwICsxMjQ0LDEwIEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgTUFDdlRpbWVyME1pY3JvU0RlbGF5IChEV09SRF9QVFIgZHdJb0Jhc2UsIFVJTlQgdURlbGF5KQordm9pZCBNQUN2VGltZXIwTWljcm9TRGVsYXkgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGludCB1RGVsYXkpCiB7Ci1CWVRFIGJ5VmFsdWU7Ci1VSU5UIHV1LGlpOwordW5zaWduZWQgY2hhciBieVZhbHVlOwordW5zaWduZWQgaW50IHV1LGlpOwogCiAgICAgVk5Tdk91dFBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19UTUNUTDAsIDApOwogICAgIFZOU3ZPdXRQb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfVE1EQVRBMCwgdURlbGF5KTsKQEAgLTEyODAsNyArMTI4MCw3IEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgTUFDdk9uZVNob3RUaW1lcjBNaWNyb1NlYyAoRFdPUkRfUFRSIGR3SW9CYXNlLCBVSU5UIHVEZWxheVRpbWUpCit2b2lkIE1BQ3ZPbmVTaG90VGltZXIwTWljcm9TZWMgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGludCB1RGVsYXlUaW1lKQogewogICAgIFZOU3ZPdXRQb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfVE1DVEwwLCAwKTsKICAgICBWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX1RNREFUQTAsIHVEZWxheVRpbWUpOwpAQCAtMTMwMSw3ICsxMzAxLDcgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBNQUN2T25lU2hvdFRpbWVyMU1pY3JvU2VjIChEV09SRF9QVFIgZHdJb0Jhc2UsIFVJTlQgdURlbGF5VGltZSkKK3ZvaWQgTUFDdk9uZVNob3RUaW1lcjFNaWNyb1NlYyAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgaW50IHVEZWxheVRpbWUpCiB7CiAgICAgVk5Tdk91dFBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19UTUNUTDEsIDApOwogICAgIFZOU3ZPdXRQb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfVE1EQVRBMSwgdURlbGF5VGltZSk7CkBAIC0xMzA5LDcgKzEzMDksNyBAQAogfQogCiAKLXZvaWQgTUFDdlNldE1JU0NGaWZvIChEV09SRF9QVFIgZHdJb0Jhc2UsIFdPUkQgd09mZnNldCwgRFdPUkQgZHdEYXRhKQordm9pZCBNQUN2U2V0TUlTQ0ZpZm8gKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIHNob3J0IHdPZmZzZXQsIHVuc2lnbmVkIGxvbmcgZHdEYXRhKQogewogICAgIGlmICh3T2Zmc2V0ID4gMjczKQogICAgICAgICByZXR1cm47CkBAIC0xMzE5LDEwICsxMzE5LDEwIEBACiB9CiAKIAotQk9PTCBNQUNiVHhETUFPZmYgKERXT1JEX1BUUiBkd0lvQmFzZSwgVUlOVCBpZHgpCitib29sIE1BQ2JUeERNQU9mZiAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgaW50IGlkeCkKIHsKLUJZVEUgYnlEYXRhOwotVUlOVCB3dyA9IDA7Cit1bnNpZ25lZCBjaGFyIGJ5RGF0YTsKK3Vuc2lnbmVkIGludCB3dyA9IDA7CiAKICAgICBpZiAoaWR4ID09IFRZUEVfVFhETUEwKSB7CiAgICAgICAgIFZOU3ZPdXRQb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfVFhETUFDVEwwKzIsIERNQUNUTF9SVU4pOwpAQCAtMTM0MiwxNSArMTM0MiwxNSBAQAogICAgIGlmICh3dyA9PSBXX01BWF9USU1FT1VUKSB7CiAgICAgICAgIERCR19QT1JUODAoMHgyOSk7CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIERCR19QT1JUODAoMHgyOSlcbiIpOwotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgTUFDdkNsZWFyQnVzU3VzSW5kIChEV09SRF9QVFIgZHdJb0Jhc2UpCit2b2lkIE1BQ3ZDbGVhckJ1c1N1c0luZCAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSkKIHsKLSAgICBEV09SRCBkd09yZ1ZhbHVlOwotICAgIFVJTlQgd3c7CisgICAgdW5zaWduZWQgbG9uZyBkd09yZ1ZhbHVlOworICAgIHVuc2lnbmVkIGludCB3dzsKICAgICAvLyBjaGVjayBpZiBCY25TdXNJbmQgZW5hYmxlZAogICAgIFZOU3ZJblBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19FTkNGRyAsICZkd09yZ1ZhbHVlKTsKICAgICBpZiggIShkd09yZ1ZhbHVlICYgRW5DRkdfQmNuU3VzSW5kKSkKQEAgLTEzNjksMTEgKzEzNjksMTEgQEAKICAgICB9CiB9CiAKLXZvaWQgTUFDdkVuYWJsZUJ1c1N1c0VuIChEV09SRF9QVFIgZHdJb0Jhc2UpCit2b2lkIE1BQ3ZFbmFibGVCdXNTdXNFbiAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSkKIHsKLSAgICBCWVRFICBieU9yZ1ZhbHVlOwotICAgIERXT1JEIGR3T3JnVmFsdWU7Ci0gICAgVUlOVCB3dzsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5T3JnVmFsdWU7CisgICAgdW5zaWduZWQgbG9uZyBkd09yZ1ZhbHVlOworICAgIHVuc2lnbmVkIGludCB3dzsKICAgICAvLyBjaGVjayBpZiBCY25TdXNJbmQgZW5hYmxlZAogICAgIFZOU3ZJblBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19DRkcgLCAmYnlPcmdWYWx1ZSk7CiAKQEAgLTEzOTEsMTAgKzEzOTEsMTAgQEAKICAgICB9CiB9CiAKLUJPT0wgTUFDYkZsdXNoU1lOQ0ZpZm8gKERXT1JEX1BUUiBkd0lvQmFzZSkKK2Jvb2wgTUFDYkZsdXNoU1lOQ0ZpZm8gKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UpCiB7Ci0gICAgQllURSAgYnlPcmdWYWx1ZTsKLSAgICBVSU5UIHd3OworICAgIHVuc2lnbmVkIGNoYXIgYnlPcmdWYWx1ZTsKKyAgICB1bnNpZ25lZCBpbnQgd3c7CiAgICAgLy8gUmVhZCBNQUNDUgogICAgIFZOU3ZJblBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19NQUNDUiAsICZieU9yZ1ZhbHVlKTsKIApAQCAtMTQxMiwxNiArMTQxMiwxNiBAQAogICAgICAgICBEQkdfUE9SVDgwKDB4MzUpOwogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiBEQkdfUE9SVDgwKDB4MzMpXG4iKTsKICAgICB9Ci0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLUJPT0wgTUFDYlBTV2FrZXVwIChEV09SRF9QVFIgZHdJb0Jhc2UpCitib29sIE1BQ2JQU1dha2V1cCAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSkKIHsKLSAgICBCWVRFICBieU9yZ1ZhbHVlOwotICAgIFVJTlQgd3c7CisgICAgdW5zaWduZWQgY2hhciBieU9yZ1ZhbHVlOworICAgIHVuc2lnbmVkIGludCB3dzsKICAgICAvLyBSZWFkIFBTQ1RMCiAgICAgaWYgKE1BQ2JJc1JlZ0JpdHNPZmYoZHdJb0Jhc2UsIE1BQ19SRUdfUFNDVEwsIFBTQ1RMX1BTKSkgewotICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIC8vIERpc2FibGUgUFMKICAgICBNQUN2UmVnQml0c09mZihkd0lvQmFzZSwgTUFDX1JFR19QU0NUTCwgUFNDVExfUFNFTik7CkBAIC0xNDM1LDkgKzE0MzUsOSBAQAogICAgIGlmICh3dyA9PSBXX01BWF9USU1FT1VUKSB7CiAgICAgICAgIERCR19QT1JUODAoMHgzNik7CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIERCR19QT1JUODAoMHgzMylcbiIpOwotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8qCkBAIC0xNDU1LDEwICsxNDU1LDExIEBACiAgKgogICovCiAKLXZvaWQgTUFDdlNldEtleUVudHJ5IChEV09SRF9QVFIgZHdJb0Jhc2UsIFdPUkQgd0tleUN0bCwgVUlOVCB1RW50cnlJZHgsIFVJTlQgdUtleUlkeCwgUEJZVEUgcGJ5QWRkciwgUERXT1JEIHBkd0tleSwgQllURSBieUxvY2FsSUQpCit2b2lkIE1BQ3ZTZXRLZXlFbnRyeSAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgc2hvcnQgd0tleUN0bCwgdW5zaWduZWQgaW50IHVFbnRyeUlkeCwKKwkJdW5zaWduZWQgaW50IHVLZXlJZHgsIHVuc2lnbmVkIGNoYXIgKnBieUFkZHIsIHVuc2lnbmVkIGxvbmcgKnBkd0tleSwgdW5zaWduZWQgY2hhciBieUxvY2FsSUQpCiB7Ci1XT1JEICAgIHdPZmZzZXQ7Ci1EV09SRCAgIGR3RGF0YTsKK3Vuc2lnbmVkIHNob3J0IHdPZmZzZXQ7Cit1bnNpZ25lZCBsb25nIGR3RGF0YTsKIGludCAgICAgaWk7CiAKICAgICBpZiAoYnlMb2NhbElEIDw9IDEpCkBAIC0xNTIxLDkgKzE1MjIsOSBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIE1BQ3ZEaXNhYmxlS2V5RW50cnkgKERXT1JEX1BUUiBkd0lvQmFzZSwgVUlOVCB1RW50cnlJZHgpCit2b2lkIE1BQ3ZEaXNhYmxlS2V5RW50cnkgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGludCB1RW50cnlJZHgpCiB7Ci1XT1JEICAgIHdPZmZzZXQ7Cit1bnNpZ25lZCBzaG9ydCB3T2Zmc2V0OwogCiAgICAgd09mZnNldCA9IE1JU0NGSUZPX0tFWUVUUlkwOwogICAgIHdPZmZzZXQgKz0gKHVFbnRyeUlkeCAqIE1JU0NGSUZPX0tFWUVOVFJZU0laRSk7CkBAIC0xNTQ5LDEwICsxNTUwLDExIEBACiAgKgogICovCiAKLXZvaWQgTUFDdlNldERlZmF1bHRLZXlFbnRyeSAoRFdPUkRfUFRSIGR3SW9CYXNlLCBVSU5UIHVLZXlMZW4sIFVJTlQgdUtleUlkeCwgUERXT1JEIHBkd0tleSwgQllURSBieUxvY2FsSUQpCit2b2lkIE1BQ3ZTZXREZWZhdWx0S2V5RW50cnkgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGludCB1S2V5TGVuLAorCQl1bnNpZ25lZCBpbnQgdUtleUlkeCwgdW5zaWduZWQgbG9uZyAqcGR3S2V5LCB1bnNpZ25lZCBjaGFyIGJ5TG9jYWxJRCkKIHsKLVdPUkQgICAgd09mZnNldDsKLURXT1JEICAgZHdEYXRhOwordW5zaWduZWQgc2hvcnQgd09mZnNldDsKK3Vuc2lnbmVkIGxvbmcgZHdEYXRhOwogaW50ICAgICBpaTsKIAogICAgIGlmIChieUxvY2FsSUQgPD0gMSkKQEAgLTE1OTksMTAgKzE2MDEsMTAgQEAKICAqCiAgKi8KIC8qCi12b2lkIE1BQ3ZFbmFibGVEZWZhdWx0S2V5IChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlMb2NhbElEKQordm9pZCBNQUN2RW5hYmxlRGVmYXVsdEtleSAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUxvY2FsSUQpCiB7Ci1XT1JEICAgIHdPZmZzZXQ7Ci1EV09SRCAgIGR3RGF0YTsKK3Vuc2lnbmVkIHNob3J0IHdPZmZzZXQ7Cit1bnNpZ25lZCBsb25nIGR3RGF0YTsKIAogCiAgICAgaWYgKGJ5TG9jYWxJRCA8PSAxKQpAQCAtMTYzNCwxMCArMTYzNiwxMCBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIE1BQ3ZEaXNhYmxlRGVmYXVsdEtleSAoRFdPUkRfUFRSIGR3SW9CYXNlKQordm9pZCBNQUN2RGlzYWJsZURlZmF1bHRLZXkgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UpCiB7Ci1XT1JEICAgIHdPZmZzZXQ7Ci1EV09SRCAgIGR3RGF0YTsKK3Vuc2lnbmVkIHNob3J0IHdPZmZzZXQ7Cit1bnNpZ25lZCBsb25nIGR3RGF0YTsKIAogCiAgICAgd09mZnNldCA9IE1JU0NGSUZPX0tFWUVUUlkwOwpAQCAtMTY2NCwxMCArMTY2NiwxMSBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIE1BQ3ZTZXREZWZhdWx0VEtJUEtleUVudHJ5IChEV09SRF9QVFIgZHdJb0Jhc2UsIFVJTlQgdUtleUxlbiwgVUlOVCB1S2V5SWR4LCBQRFdPUkQgcGR3S2V5LCBCWVRFIGJ5TG9jYWxJRCkKK3ZvaWQgTUFDdlNldERlZmF1bHRUS0lQS2V5RW50cnkgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGludCB1S2V5TGVuLAorCQl1bnNpZ25lZCBpbnQgdUtleUlkeCwgdW5zaWduZWQgbG9uZyAqcGR3S2V5LCB1bnNpZ25lZCBjaGFyIGJ5TG9jYWxJRCkKIHsKLVdPUkQgICAgd09mZnNldDsKLURXT1JEICAgZHdEYXRhOwordW5zaWduZWQgc2hvcnQgd09mZnNldDsKK3Vuc2lnbmVkIGxvbmcgZHdEYXRhOwogaW50ICAgICBpaTsKIAogICAgIGlmIChieUxvY2FsSUQgPD0gMSkKQEAgLTE3MjAsMTAgKzE3MjMsMTAgQEAKICAqCiAgKi8KIAotdm9pZCBNQUN2U2V0RGVmYXVsdEtleUN0bCAoRFdPUkRfUFRSIGR3SW9CYXNlLCBXT1JEIHdLZXlDdGwsIFVJTlQgdUVudHJ5SWR4LCBCWVRFIGJ5TG9jYWxJRCkKK3ZvaWQgTUFDdlNldERlZmF1bHRLZXlDdGwgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIHNob3J0IHdLZXlDdGwsIHVuc2lnbmVkIGludCB1RW50cnlJZHgsIHVuc2lnbmVkIGNoYXIgYnlMb2NhbElEKQogewotV09SRCAgICB3T2Zmc2V0OwotRFdPUkQgICBkd0RhdGE7Cit1bnNpZ25lZCBzaG9ydCB3T2Zmc2V0OwordW5zaWduZWQgbG9uZyBkd0RhdGE7CiAKICAgICBpZiAoYnlMb2NhbElEIDw9IDEpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvbWFjLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L21hYy5oCmluZGV4IDVlYjdmNTcuLmI5NmQyN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvbWFjLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9tYWMuaApAQCAtNjYzLDI4ICs2NjMsMjggQEAKIAogI2RlZmluZSBNQUN2UmVnQml0c09uKGR3SW9CYXNlLCBieVJlZ09mcywgYnlCaXRzKSAgICAgICAgICAgXAogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEJZVEUgYnlEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVuc2lnbmVkIGNoYXIgYnlEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFZOU3ZJblBvcnRCKGR3SW9CYXNlICsgYnlSZWdPZnMsICZieURhdGEpOyAgICAgICAgICAgICAgXAogICAgIFZOU3ZPdXRQb3J0Qihkd0lvQmFzZSArIGJ5UmVnT2ZzLCBieURhdGEgfCAoYnlCaXRzKSk7ICAgXAogfQogCiAjZGVmaW5lIE1BQ3ZXb3JkUmVnQml0c09uKGR3SW9CYXNlLCBieVJlZ09mcywgd0JpdHMpICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgV09SRCB3RGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdW5zaWduZWQgc2hvcnQgd0RhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVk5TdkluUG9ydFcoZHdJb0Jhc2UgKyBieVJlZ09mcywgJndEYXRhKTsgICAgICAgICAgICAgICBcCiAgICAgVk5Tdk91dFBvcnRXKGR3SW9CYXNlICsgYnlSZWdPZnMsIHdEYXRhIHwgKHdCaXRzKSk7ICAgICBcCiB9CiAKICNkZWZpbmUgTUFDdkRXb3JkUmVnQml0c09uKGR3SW9CYXNlLCBieVJlZ09mcywgZHdCaXRzKSAgICAgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBEV09SRCBkd0RhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1bnNpZ25lZCBsb25nIGR3RGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWTlN2SW5Qb3J0RChkd0lvQmFzZSArIGJ5UmVnT2ZzLCAmZHdEYXRhKTsgICAgICAgICAgICAgIFwKICAgICBWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBieVJlZ09mcywgZHdEYXRhIHwgKGR3Qml0cykpOyAgIFwKIH0KIAogI2RlZmluZSBNQUN2UmVnQml0c09uRXgoZHdJb0Jhc2UsIGJ5UmVnT2ZzLCBieU1hc2ssIGJ5Qml0cykgXAogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEJZVEUgYnlEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVuc2lnbmVkIGNoYXIgYnlEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFZOU3ZJblBvcnRCKGR3SW9CYXNlICsgYnlSZWdPZnMsICZieURhdGEpOyAgICAgICAgICAgICAgXAogICAgIGJ5RGF0YSAmPSBieU1hc2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFZOU3ZPdXRQb3J0Qihkd0lvQmFzZSArIGJ5UmVnT2ZzLCBieURhdGEgfCAoYnlCaXRzKSk7ICAgXApAQCAtNjkyLDIxICs2OTIsMjEgQEAKIAogI2RlZmluZSBNQUN2UmVnQml0c09mZihkd0lvQmFzZSwgYnlSZWdPZnMsIGJ5Qml0cykgICAgICAgICAgXAogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEJZVEUgYnlEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVuc2lnbmVkIGNoYXIgYnlEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFZOU3ZJblBvcnRCKGR3SW9CYXNlICsgYnlSZWdPZnMsICZieURhdGEpOyAgICAgICAgICAgICAgXAogICAgIFZOU3ZPdXRQb3J0Qihkd0lvQmFzZSArIGJ5UmVnT2ZzLCBieURhdGEgJiB+KGJ5Qml0cykpOyAgXAogfQogCiAjZGVmaW5lIE1BQ3ZXb3JkUmVnQml0c09mZihkd0lvQmFzZSwgYnlSZWdPZnMsIHdCaXRzKSAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgV09SRCB3RGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdW5zaWduZWQgc2hvcnQgd0RhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVk5TdkluUG9ydFcoZHdJb0Jhc2UgKyBieVJlZ09mcywgJndEYXRhKTsgICAgICAgICAgICAgICBcCiAgICAgVk5Tdk91dFBvcnRXKGR3SW9CYXNlICsgYnlSZWdPZnMsIHdEYXRhICYgfih3Qml0cykpOyAgICBcCiB9CiAKICNkZWZpbmUgTUFDdkRXb3JkUmVnQml0c09mZihkd0lvQmFzZSwgYnlSZWdPZnMsIGR3Qml0cykgICAgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBEV09SRCBkd0RhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1bnNpZ25lZCBsb25nIGR3RGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWTlN2SW5Qb3J0RChkd0lvQmFzZSArIGJ5UmVnT2ZzLCAmZHdEYXRhKTsgICAgICAgICAgICAgIFwKICAgICBWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBieVJlZ09mcywgZHdEYXRhICYgfihkd0JpdHMpKTsgIFwKIH0KQEAgLTcxNCwzNyArNzE0LDM3IEBACiAjZGVmaW5lIE1BQ3ZHZXRDdXJyUngwRGVzY0FkZHIoZHdJb0Jhc2UsIHBkd0N1cnJEZXNjQWRkcikgICAgXAogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFZOU3ZJblBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19SWERNQVBUUjAsICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIChQRFdPUkQpcGR3Q3VyckRlc2NBZGRyKTsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nICopcGR3Q3VyckRlc2NBZGRyKTsgICAgICAgICAgXAogfQogCiAjZGVmaW5lIE1BQ3ZHZXRDdXJyUngxRGVzY0FkZHIoZHdJb0Jhc2UsIHBkd0N1cnJEZXNjQWRkcikgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVk5TdkluUG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX1JYRE1BUFRSMSwgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKFBEV09SRClwZHdDdXJyRGVzY0FkZHIpOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgKilwZHdDdXJyRGVzY0FkZHIpOyAgICAgICAgICBcCiB9CiAKICNkZWZpbmUgTUFDdkdldEN1cnJUeDBEZXNjQWRkcihkd0lvQmFzZSwgcGR3Q3VyckRlc2NBZGRyKSAgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWTlN2SW5Qb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfVFhETUFQVFIwLCAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAoUERXT1JEKXBkd0N1cnJEZXNjQWRkcik7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyAqKXBkd0N1cnJEZXNjQWRkcik7ICAgICAgICAgIFwKIH0KIAogI2RlZmluZSBNQUN2R2V0Q3VyckFDMERlc2NBZGRyKGR3SW9CYXNlLCBwZHdDdXJyRGVzY0FkZHIpICAgXAogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFZOU3ZJblBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19BQzBETUFQVFIsICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIChQRFdPUkQpcGR3Q3VyckRlc2NBZGRyKTsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nICopcGR3Q3VyckRlc2NBZGRyKTsgICAgICAgICAgXAogfQogCiAjZGVmaW5lIE1BQ3ZHZXRDdXJyU3luY0Rlc2NBZGRyKGR3SW9CYXNlLCBwZHdDdXJyRGVzY0FkZHIpICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVk5TdkluUG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX1NZTkNETUFQVFIsICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKFBEV09SRClwZHdDdXJyRGVzY0FkZHIpOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgKilwZHdDdXJyRGVzY0FkZHIpOyAgICAgICAgICBcCiB9CiAKICNkZWZpbmUgTUFDdkdldEN1cnJBVElNRGVzY0FkZHIoZHdJb0Jhc2UsIHBkd0N1cnJEZXNjQWRkcikgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWTlN2SW5Qb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfQVRJTURNQVBUUiwgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAoUERXT1JEKXBkd0N1cnJEZXNjQWRkcik7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyAqKXBkd0N1cnJEZXNjQWRkcik7ICAgICAgICAgIFwKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAogLy8gc2V0IHRoZSBjaGlwIHdpdGggY3VycmVudCBCQ04gdHggZGVzY3JpcHRvciBhZGRyZXNzCkBAIC03NjUsNyArNzY1LDcgQEAKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWTlN2T3V0UG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX1BBR0UxU0VMLCAxKTsgICAgICAgICAgIFwKICAgICBWTlN2SW5Qb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfQlNTSUQwLCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAoUEJZVEUpcGJ5RXRoZXJBZGRyKTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKXBieUV0aGVyQWRkcik7ICAgICAgICAgICAgIFwKICAgICBWTlN2SW5Qb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfQlNTSUQwICsgMSwgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICBwYnlFdGhlckFkZHIgKyAxKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWTlN2SW5Qb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfQlNTSUQwICsgMiwgICAgICAgICAgICAgIFwKQEAgLTgwMSw3ICs4MDEsNyBAQAogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFZOU3ZPdXRQb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfUEFHRTFTRUwsIDEpOyAgICAgICAgICAgXAogICAgIFZOU3ZJblBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19QQVIwLCAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIChQQllURSlwYnlFdGhlckFkZHIpOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopcGJ5RXRoZXJBZGRyKTsgICAgICAgICAgICAgXAogICAgIFZOU3ZJblBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19QQVIwICsgMSwgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgIHBieUV0aGVyQWRkciArIDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFZOU3ZJblBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19QQVIwICsgMiwgICAgICAgICAgICAgICAgXApAQCAtODczLDcgKzg3Myw3IEBACiAKICNkZWZpbmUgTUFDdlJlY2VpdmUwKGR3SW9CYXNlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIERXT1JEIGR3RGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1bnNpZ25lZCBsb25nIGR3RGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVk5TdkluUG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX1JYRE1BQ1RMMCwgJmR3RGF0YSk7ICAgICAgICAgXAogICAgIGlmIChkd0RhdGEgJiBETUFDVExfUlVOKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgVk5Tdk91dFBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19SWERNQUNUTDAsIERNQUNUTF9XQUtFKTtcCkBAIC04ODUsNyArODg1LDcgQEAKIAogI2RlZmluZSBNQUN2UmVjZWl2ZTEoZHdJb0Jhc2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRFdPUkQgZHdEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1bnNpZ25lZCBsb25nIGR3RGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVk5TdkluUG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX1JYRE1BQ1RMMSwgJmR3RGF0YSk7ICAgICAgICAgXAogICAgIGlmIChkd0RhdGEgJiBETUFDVExfUlVOKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgVk5Tdk91dFBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19SWERNQUNUTDEsIERNQUNUTF9XQUtFKTtcCkBAIC05MDIsNyArOTAyLDcgQEAKIAogI2RlZmluZSBNQUN2VHJhbnNtaXQwKGR3SW9CYXNlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRFdPUkQgZHdEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1bnNpZ25lZCBsb25nIGR3RGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVk5TdkluUG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX1RYRE1BQ1RMMCwgJmR3RGF0YSk7ICAgICAgICAgXAogICAgIGlmIChkd0RhdGEgJiBETUFDVExfUlVOKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgVk5Tdk91dFBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19UWERNQUNUTDAsIERNQUNUTF9XQUtFKTtcCkBAIC05MTQsNyArOTE0LDcgQEAKIAogI2RlZmluZSBNQUN2VHJhbnNtaXRBQzAoZHdJb0Jhc2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRFdPUkQgZHdEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1bnNpZ25lZCBsb25nIGR3RGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVk5TdkluUG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX0FDMERNQUNUTCwgJmR3RGF0YSk7ICAgICAgICAgXAogICAgIGlmIChkd0RhdGEgJiBETUFDVExfUlVOKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgVk5Tdk91dFBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19BQzBETUFDVEwsIERNQUNUTF9XQUtFKTtcCkBAIC05MjYsNyArOTI2LDcgQEAKIAogI2RlZmluZSBNQUN2VHJhbnNtaXRTWU5DKGR3SW9CYXNlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBEV09SRCBkd0RhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1bnNpZ25lZCBsb25nIGR3RGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFZOU3ZJblBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19TWU5DRE1BQ1RMLCAmZHdEYXRhKTsgICAgICAgICBcCiAgICAgaWYgKGR3RGF0YSAmIERNQUNUTF9SVU4pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgVk5Tdk91dFBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19TWU5DRE1BQ1RMLCBETUFDVExfV0FLRSk7XApAQCAtOTM4LDcgKzkzOCw3IEBACiAKICNkZWZpbmUgTUFDdlRyYW5zbWl0QVRJTShkd0lvQmFzZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRFdPUkQgZHdEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdW5zaWduZWQgbG9uZyBkd0RhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWTlN2SW5Qb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfQVRJTURNQUNUTCwgJmR3RGF0YSk7ICAgICAgICAgXAogICAgIGlmIChkd0RhdGEgJiBETUFDVExfUlVOKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIFZOU3ZPdXRQb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfQVRJTURNQUNUTCwgRE1BQ1RMX1dBS0UpO1wKQEAgLTk1NSw3ICs5NTUsNyBAQAogCiAjZGVmaW5lIE1BQ3ZDbGVhclN0Y2tEUyhkd0lvQmFzZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQllURSBieU9yZ1ZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdW5zaWduZWQgY2hhciBieU9yZ1ZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVk5TdkluUG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX1NUSUNLSFcsICZieU9yZ1ZhbHVlKTsgICBcCiAgICAgYnlPcmdWYWx1ZSA9IGJ5T3JnVmFsdWUgJiAweEZDOyAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVk5Tdk91dFBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19TVElDS0hXLCBieU9yZ1ZhbHVlKTsgICBcCkBAIC0xMDAyLDcgKzEwMDIsNyBAQAogCiAjZGVmaW5lIE1BQ3ZFbmFibGVQcm90ZWN0TUQoZHdJb0Jhc2UpICAgICAgICAgICAgICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRFdPUkQgZHdPcmdWYWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdW5zaWduZWQgbG9uZyBkd09yZ1ZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVk5TdkluUG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX0VOQ0ZHICwgJmR3T3JnVmFsdWUpOyBcCiAgICAgZHdPcmdWYWx1ZSA9IGR3T3JnVmFsdWUgfCBFbkNGR19Qcm90ZWN0TWQ7ICAgICAgICAgICBcCiAgICAgVk5Tdk91dFBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19FTkNGRywgZHdPcmdWYWx1ZSk7ICBcCkBAIC0xMDEwLDcgKzEwMTAsNyBAQAogCiAjZGVmaW5lIE1BQ3ZEaXNhYmxlUHJvdGVjdE1EKGR3SW9CYXNlKSAgICAgICAgICAgICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRFdPUkQgZHdPcmdWYWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVuc2lnbmVkIGxvbmcgZHdPcmdWYWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFZOU3ZJblBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19FTkNGRyAsICZkd09yZ1ZhbHVlKTsgXAogICAgIGR3T3JnVmFsdWUgPSBkd09yZ1ZhbHVlICYgfkVuQ0ZHX1Byb3RlY3RNZDsgICAgICAgICAgXAogICAgIFZOU3ZPdXRQb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfRU5DRkcsIGR3T3JnVmFsdWUpOyAgXApAQCAtMTAxOCw3ICsxMDE4LDcgQEAKIAogI2RlZmluZSBNQUN2RW5hYmxlQmFya2VyUHJlYW1ibGVNZChkd0lvQmFzZSkgICAgICAgICAgICAgXAogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIERXT1JEIGR3T3JnVmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVuc2lnbmVkIGxvbmcgZHdPcmdWYWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFZOU3ZJblBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19FTkNGRyAsICZkd09yZ1ZhbHVlKTsgXAogICAgIGR3T3JnVmFsdWUgPSBkd09yZ1ZhbHVlIHwgRW5DRkdfQmFya2VyUHJlYW07ICAgICAgICAgXAogICAgIFZOU3ZPdXRQb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfRU5DRkcsIGR3T3JnVmFsdWUpOyAgXApAQCAtMTAyNiw3ICsxMDI2LDcgQEAKIAogI2RlZmluZSBNQUN2RGlzYWJsZUJhcmtlclByZWFtYmxlTWQoZHdJb0Jhc2UpICAgICAgICAgICAgXAogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIERXT1JEIGR3T3JnVmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVuc2lnbmVkIGxvbmcgZHdPcmdWYWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFZOU3ZJblBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19FTkNGRyAsICZkd09yZ1ZhbHVlKTsgXAogICAgIGR3T3JnVmFsdWUgPSBkd09yZ1ZhbHVlICYgfkVuQ0ZHX0JhcmtlclByZWFtOyAgICAgICAgXAogICAgIFZOU3ZPdXRQb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfRU5DRkcsIGR3T3JnVmFsdWUpOyAgXApAQCAtMTAzNCwxMCArMTAzNCwxMCBAQAogCiAjZGVmaW5lIE1BQ3ZTZXRCQlR5cGUoZHdJb0Jhc2UsIGJ5VHlwKSAgICAgICAgICAgICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRFdPUkQgZHdPcmdWYWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdW5zaWduZWQgbG9uZyBkd09yZ1ZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVk5TdkluUG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX0VOQ0ZHICwgJmR3T3JnVmFsdWUpOyBcCiAgICAgZHdPcmdWYWx1ZSA9IGR3T3JnVmFsdWUgJiB+RW5DRkdfQkJUeXBlX01BU0s7ICAgICAgICBcCi0gICAgZHdPcmdWYWx1ZSA9IGR3T3JnVmFsdWUgfCAoRFdPUkQpIGJ5VHlwOyAgICAgICAgICAgICBcCisgICAgZHdPcmdWYWx1ZSA9IGR3T3JnVmFsdWUgfCAodW5zaWduZWQgbG9uZykgYnlUeXA7ICAgICBcCiAgICAgVk5Tdk91dFBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19FTkNGRywgZHdPcmdWYWx1ZSk7ICBcCiB9CiAKQEAgLTEwNzQsNzggKzEwNzQsODEgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotZXh0ZXJuIFdPUkQgVHhSYXRlX2l3Y29uZmlnOy8vMjAwOC01LTggPGFkZD4gYnkgY2hlc3Rlcgotdm9pZCBNQUN2UmVhZEFsbFJlZ3MoRFdPUkRfUFRSIGR3SW9CYXNlLCBQQllURSBwYnlNYWNSZWdzKTsKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBUeFJhdGVfaXdjb25maWc7Ly8yMDA4LTUtOCA8YWRkPiBieSBjaGVzdGVyCit2b2lkIE1BQ3ZSZWFkQWxsUmVncyh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyICpwYnlNYWNSZWdzKTsKIAotQk9PTCBNQUNiSXNSZWdCaXRzT24oRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5UmVnT2ZzLCBCWVRFIGJ5VGVzdEJpdHMpOwotQk9PTCBNQUNiSXNSZWdCaXRzT2ZmKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieVJlZ09mcywgQllURSBieVRlc3RCaXRzKTsKK2Jvb2wgTUFDYklzUmVnQml0c09uKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlSZWdPZnMsIHVuc2lnbmVkIGNoYXIgYnlUZXN0Qml0cyk7Citib29sIE1BQ2JJc1JlZ0JpdHNPZmYodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieVJlZ09mcywgdW5zaWduZWQgY2hhciBieVRlc3RCaXRzKTsKIAotQk9PTCBNQUNiSXNJbnREaXNhYmxlKERXT1JEX1BUUiBkd0lvQmFzZSk7Citib29sIE1BQ2JJc0ludERpc2FibGUodW5zaWduZWQgbG9uZyBkd0lvQmFzZSk7CiAKLUJZVEUgTUFDYnlSZWFkTXVsdGlBZGRyKERXT1JEX1BUUiBkd0lvQmFzZSwgVUlOVCB1Qnl0ZUlkeCk7Ci12b2lkIE1BQ3ZXcml0ZU11bHRpQWRkcihEV09SRF9QVFIgZHdJb0Jhc2UsIFVJTlQgdUJ5dGVJZHgsIEJZVEUgYnlEYXRhKTsKLXZvaWQgTUFDdlNldE11bHRpQWRkckJ5SGFzaChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlIYXNoSWR4KTsKLXZvaWQgTUFDdlJlc2V0TXVsdGlBZGRyQnlIYXNoKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieUhhc2hJZHgpOwordW5zaWduZWQgY2hhciBNQUNieVJlYWRNdWx0aUFkZHIodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgaW50IHVCeXRlSWR4KTsKK3ZvaWQgTUFDdldyaXRlTXVsdGlBZGRyKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGludCB1Qnl0ZUlkeCwgdW5zaWduZWQgY2hhciBieURhdGEpOwordm9pZCBNQUN2U2V0TXVsdGlBZGRyQnlIYXNoKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlIYXNoSWR4KTsKK3ZvaWQgTUFDdlJlc2V0TXVsdGlBZGRyQnlIYXNoKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlIYXNoSWR4KTsKIAotdm9pZCBNQUN2U2V0UnhUaHJlc2hvbGQoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5VGhyZXNob2xkKTsKLXZvaWQgTUFDdkdldFJ4VGhyZXNob2xkKERXT1JEX1BUUiBkd0lvQmFzZSwgUEJZVEUgcGJ5VGhyZXNob2xkKTsKK3ZvaWQgTUFDdlNldFJ4VGhyZXNob2xkKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlUaHJlc2hvbGQpOwordm9pZCBNQUN2R2V0UnhUaHJlc2hvbGQodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciAqcGJ5VGhyZXNob2xkKTsKIAotdm9pZCBNQUN2U2V0VHhUaHJlc2hvbGQoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5VGhyZXNob2xkKTsKLXZvaWQgTUFDdkdldFR4VGhyZXNob2xkKERXT1JEX1BUUiBkd0lvQmFzZSwgUEJZVEUgcGJ5VGhyZXNob2xkKTsKK3ZvaWQgTUFDdlNldFR4VGhyZXNob2xkKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlUaHJlc2hvbGQpOwordm9pZCBNQUN2R2V0VHhUaHJlc2hvbGQodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciAqcGJ5VGhyZXNob2xkKTsKIAotdm9pZCBNQUN2U2V0RG1hTGVuZ3RoKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieURtYUxlbmd0aCk7Ci12b2lkIE1BQ3ZHZXREbWFMZW5ndGgoRFdPUkRfUFRSIGR3SW9CYXNlLCBQQllURSBwYnlEbWFMZW5ndGgpOwordm9pZCBNQUN2U2V0RG1hTGVuZ3RoKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlEbWFMZW5ndGgpOwordm9pZCBNQUN2R2V0RG1hTGVuZ3RoKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgKnBieURtYUxlbmd0aCk7CiAKLXZvaWQgTUFDdlNldFNob3J0UmV0cnlMaW1pdChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlSZXRyeUxpbWl0KTsKLXZvaWQgTUFDdkdldFNob3J0UmV0cnlMaW1pdChEV09SRF9QVFIgZHdJb0Jhc2UsIFBCWVRFIHBieVJldHJ5TGltaXQpOwordm9pZCBNQUN2U2V0U2hvcnRSZXRyeUxpbWl0KHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlSZXRyeUxpbWl0KTsKK3ZvaWQgTUFDdkdldFNob3J0UmV0cnlMaW1pdCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyICpwYnlSZXRyeUxpbWl0KTsKIAotdm9pZCBNQUN2U2V0TG9uZ1JldHJ5TGltaXQoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5UmV0cnlMaW1pdCk7Ci12b2lkIE1BQ3ZHZXRMb25nUmV0cnlMaW1pdChEV09SRF9QVFIgZHdJb0Jhc2UsIFBCWVRFIHBieVJldHJ5TGltaXQpOwordm9pZCBNQUN2U2V0TG9uZ1JldHJ5TGltaXQodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieVJldHJ5TGltaXQpOwordm9pZCBNQUN2R2V0TG9uZ1JldHJ5TGltaXQodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciAqcGJ5UmV0cnlMaW1pdCk7CiAKLXZvaWQgTUFDdlNldExvb3BiYWNrTW9kZShEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlMb29wYmFja01vZGUpOwotQk9PTCBNQUNiSXNJbkxvb3BiYWNrTW9kZShEV09SRF9QVFIgZHdJb0Jhc2UpOwordm9pZCBNQUN2U2V0TG9vcGJhY2tNb2RlKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlMb29wYmFja01vZGUpOworYm9vbCBNQUNiSXNJbkxvb3BiYWNrTW9kZSh1bnNpZ25lZCBsb25nIGR3SW9CYXNlKTsKIAotdm9pZCBNQUN2U2V0UGFja2V0RmlsdGVyKERXT1JEX1BUUiBkd0lvQmFzZSwgV09SRCB3RmlsdGVyVHlwZSk7Cit2b2lkIE1BQ3ZTZXRQYWNrZXRGaWx0ZXIodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgc2hvcnQgd0ZpbHRlclR5cGUpOwogCi12b2lkIE1BQ3ZTYXZlQ29udGV4dChEV09SRF9QVFIgZHdJb0Jhc2UsIFBCWVRFIHBieUN4dEJ1Zik7Ci12b2lkIE1BQ3ZSZXN0b3JlQ29udGV4dChEV09SRF9QVFIgZHdJb0Jhc2UsIFBCWVRFIHBieUN4dEJ1Zik7Ci1CT09MIE1BQ2JDb21wYXJlQ29udGV4dChEV09SRF9QVFIgZHdJb0Jhc2UsIFBCWVRFIHBieUN4dEJ1Zik7Cit2b2lkIE1BQ3ZTYXZlQ29udGV4dCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyICpwYnlDeHRCdWYpOwordm9pZCBNQUN2UmVzdG9yZUNvbnRleHQodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciAqcGJ5Q3h0QnVmKTsKK2Jvb2wgTUFDYkNvbXBhcmVDb250ZXh0KHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgKnBieUN4dEJ1Zik7CiAKLUJPT0wgTUFDYlNvZnR3YXJlUmVzZXQoRFdPUkRfUFRSIGR3SW9CYXNlKTsKLUJPT0wgTUFDYlNhZmVTb2Z0d2FyZVJlc2V0KERXT1JEX1BUUiBkd0lvQmFzZSk7Ci1CT09MIE1BQ2JTYWZlUnhPZmYoRFdPUkRfUFRSIGR3SW9CYXNlKTsKLUJPT0wgTUFDYlNhZmVUeE9mZihEV09SRF9QVFIgZHdJb0Jhc2UpOwotQk9PTCBNQUNiU2FmZVN0b3AoRFdPUkRfUFRSIGR3SW9CYXNlKTsKLUJPT0wgTUFDYlNodXRkb3duKERXT1JEX1BUUiBkd0lvQmFzZSk7Ci12b2lkIE1BQ3ZJbml0aWFsaXplKERXT1JEX1BUUiBkd0lvQmFzZSk7Ci12b2lkIE1BQ3ZTZXRDdXJyUngwRGVzY0FkZHIoRFdPUkRfUFRSIGR3SW9CYXNlLCBEV09SRCBkd0N1cnJEZXNjQWRkcik7Ci12b2lkIE1BQ3ZTZXRDdXJyUngxRGVzY0FkZHIoRFdPUkRfUFRSIGR3SW9CYXNlLCBEV09SRCBkd0N1cnJEZXNjQWRkcik7Ci12b2lkIE1BQ3ZTZXRDdXJyVFhEZXNjQWRkcihpbnQgaVR4VHlwZSwgRFdPUkRfUFRSIGR3SW9CYXNlLCBEV09SRCBkd0N1cnJEZXNjQWRkcik7Ci12b2lkIE1BQ3ZTZXRDdXJyVHgwRGVzY0FkZHJFeChEV09SRF9QVFIgZHdJb0Jhc2UsIERXT1JEIGR3Q3VyckRlc2NBZGRyKTsKLXZvaWQgTUFDdlNldEN1cnJBQzBEZXNjQWRkckV4KERXT1JEX1BUUiBkd0lvQmFzZSwgRFdPUkQgZHdDdXJyRGVzY0FkZHIpOwotdm9pZCBNQUN2U2V0Q3VyclN5bmNEZXNjQWRkckV4KERXT1JEX1BUUiBkd0lvQmFzZSwgRFdPUkQgZHdDdXJyRGVzY0FkZHIpOwotdm9pZCBNQUN2U2V0Q3VyckFUSU1EZXNjQWRkckV4KERXT1JEX1BUUiBkd0lvQmFzZSwgRFdPUkQgZHdDdXJyRGVzY0FkZHIpOwotdm9pZCBNQUN2VGltZXIwTWljcm9TRGVsYXkoRFdPUkRfUFRSIGR3SW9CYXNlLCBVSU5UIHVEZWxheSk7Ci12b2lkIE1BQ3ZPbmVTaG90VGltZXIwTWljcm9TZWMoRFdPUkRfUFRSIGR3SW9CYXNlLCBVSU5UIHVEZWxheVRpbWUpOwotdm9pZCBNQUN2T25lU2hvdFRpbWVyMU1pY3JvU2VjKERXT1JEX1BUUiBkd0lvQmFzZSwgVUlOVCB1RGVsYXlUaW1lKTsKK2Jvb2wgTUFDYlNvZnR3YXJlUmVzZXQodW5zaWduZWQgbG9uZyBkd0lvQmFzZSk7Citib29sIE1BQ2JTYWZlU29mdHdhcmVSZXNldCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlKTsKK2Jvb2wgTUFDYlNhZmVSeE9mZih1bnNpZ25lZCBsb25nIGR3SW9CYXNlKTsKK2Jvb2wgTUFDYlNhZmVUeE9mZih1bnNpZ25lZCBsb25nIGR3SW9CYXNlKTsKK2Jvb2wgTUFDYlNhZmVTdG9wKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UpOworYm9vbCBNQUNiU2h1dGRvd24odW5zaWduZWQgbG9uZyBkd0lvQmFzZSk7Cit2b2lkIE1BQ3ZJbml0aWFsaXplKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UpOwordm9pZCBNQUN2U2V0Q3VyclJ4MERlc2NBZGRyKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGxvbmcgZHdDdXJyRGVzY0FkZHIpOwordm9pZCBNQUN2U2V0Q3VyclJ4MURlc2NBZGRyKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGxvbmcgZHdDdXJyRGVzY0FkZHIpOwordm9pZCBNQUN2U2V0Q3VyclRYRGVzY0FkZHIoaW50IGlUeFR5cGUsIHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGxvbmcgZHdDdXJyRGVzY0FkZHIpOwordm9pZCBNQUN2U2V0Q3VyclR4MERlc2NBZGRyRXgodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgbG9uZyBkd0N1cnJEZXNjQWRkcik7Cit2b2lkIE1BQ3ZTZXRDdXJyQUMwRGVzY0FkZHJFeCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBsb25nIGR3Q3VyckRlc2NBZGRyKTsKK3ZvaWQgTUFDdlNldEN1cnJTeW5jRGVzY0FkZHJFeCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBsb25nIGR3Q3VyckRlc2NBZGRyKTsKK3ZvaWQgTUFDdlNldEN1cnJBVElNRGVzY0FkZHJFeCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBsb25nIGR3Q3VyckRlc2NBZGRyKTsKK3ZvaWQgTUFDdlRpbWVyME1pY3JvU0RlbGF5KHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGludCB1RGVsYXkpOwordm9pZCBNQUN2T25lU2hvdFRpbWVyME1pY3JvU2VjKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGludCB1RGVsYXlUaW1lKTsKK3ZvaWQgTUFDdk9uZVNob3RUaW1lcjFNaWNyb1NlYyh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBpbnQgdURlbGF5VGltZSk7CiAKLXZvaWQgTUFDdlNldE1JU0NGaWZvKERXT1JEX1BUUiBkd0lvQmFzZSwgV09SRCB3T2Zmc2V0LCBEV09SRCBkd0RhdGEpOwordm9pZCBNQUN2U2V0TUlTQ0ZpZm8odW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgc2hvcnQgd09mZnNldCwgdW5zaWduZWQgbG9uZyBkd0RhdGEpOwogCi1CT09MIE1BQ2JUeERNQU9mZiAoRFdPUkRfUFRSIGR3SW9CYXNlLCBVSU5UIGlkeCk7Citib29sIE1BQ2JUeERNQU9mZiAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgaW50IGlkeCk7CiAKLXZvaWQgTUFDdkNsZWFyQnVzU3VzSW5kKERXT1JEX1BUUiBkd0lvQmFzZSk7Ci12b2lkIE1BQ3ZFbmFibGVCdXNTdXNFbihEV09SRF9QVFIgZHdJb0Jhc2UpOwordm9pZCBNQUN2Q2xlYXJCdXNTdXNJbmQodW5zaWduZWQgbG9uZyBkd0lvQmFzZSk7Cit2b2lkIE1BQ3ZFbmFibGVCdXNTdXNFbih1bnNpZ25lZCBsb25nIGR3SW9CYXNlKTsKIAotQk9PTCBNQUNiRmx1c2hTWU5DRmlmbyhEV09SRF9QVFIgZHdJb0Jhc2UpOwotQk9PTCBNQUNiUFNXYWtldXAoRFdPUkRfUFRSIGR3SW9CYXNlKTsKK2Jvb2wgTUFDYkZsdXNoU1lOQ0ZpZm8odW5zaWduZWQgbG9uZyBkd0lvQmFzZSk7Citib29sIE1BQ2JQU1dha2V1cCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlKTsKIAotdm9pZCBNQUN2U2V0S2V5RW50cnkoRFdPUkRfUFRSIGR3SW9CYXNlLCBXT1JEIHdLZXlDdGwsIFVJTlQgdUVudHJ5SWR4LCBVSU5UIHVLZXlJZHgsIFBCWVRFIHBieUFkZHIsIFBEV09SRCBwZHdLZXksIEJZVEUgYnlMb2NhbElEKTsKLXZvaWQgTUFDdkRpc2FibGVLZXlFbnRyeShEV09SRF9QVFIgZHdJb0Jhc2UsIFVJTlQgdUVudHJ5SWR4KTsKLXZvaWQgTUFDdlNldERlZmF1bHRLZXlFbnRyeShEV09SRF9QVFIgZHdJb0Jhc2UsIFVJTlQgdUtleUxlbiwgVUlOVCB1S2V5SWR4LCBQRFdPUkQgcGR3S2V5LCBCWVRFIGJ5TG9jYWxJRCk7Ci0vL3ZvaWQgTUFDdkVuYWJsZURlZmF1bHRLZXkoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5TG9jYWxJRCk7Ci12b2lkIE1BQ3ZEaXNhYmxlRGVmYXVsdEtleShEV09SRF9QVFIgZHdJb0Jhc2UpOwotdm9pZCBNQUN2U2V0RGVmYXVsdFRLSVBLZXlFbnRyeShEV09SRF9QVFIgZHdJb0Jhc2UsIFVJTlQgdUtleUxlbiwgVUlOVCB1S2V5SWR4LCBQRFdPUkQgcGR3S2V5LCBCWVRFIGJ5TG9jYWxJRCk7Ci12b2lkIE1BQ3ZTZXREZWZhdWx0S2V5Q3RsKERXT1JEX1BUUiBkd0lvQmFzZSwgV09SRCB3S2V5Q3RsLCBVSU5UIHVFbnRyeUlkeCwgQllURSBieUxvY2FsSUQpOwordm9pZCBNQUN2U2V0S2V5RW50cnkodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgc2hvcnQgd0tleUN0bCwgdW5zaWduZWQgaW50IHVFbnRyeUlkeCwKKwkJdW5zaWduZWQgaW50IHVLZXlJZHgsIHVuc2lnbmVkIGNoYXIgKnBieUFkZHIsIHVuc2lnbmVkIGxvbmcgKnBkd0tleSwgdW5zaWduZWQgY2hhciBieUxvY2FsSUQpOwordm9pZCBNQUN2RGlzYWJsZUtleUVudHJ5KHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGludCB1RW50cnlJZHgpOwordm9pZCBNQUN2U2V0RGVmYXVsdEtleUVudHJ5KHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGludCB1S2V5TGVuLAorCQl1bnNpZ25lZCBpbnQgdUtleUlkeCwgdW5zaWduZWQgbG9uZyAqcGR3S2V5LCB1bnNpZ25lZCBjaGFyIGJ5TG9jYWxJRCk7CisvL3ZvaWQgTUFDdkVuYWJsZURlZmF1bHRLZXkodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUxvY2FsSUQpOwordm9pZCBNQUN2RGlzYWJsZURlZmF1bHRLZXkodW5zaWduZWQgbG9uZyBkd0lvQmFzZSk7Cit2b2lkIE1BQ3ZTZXREZWZhdWx0VEtJUEtleUVudHJ5KHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGludCB1S2V5TGVuLAorCQl1bnNpZ25lZCBpbnQgdUtleUlkeCwgdW5zaWduZWQgbG9uZyAqcGR3S2V5LCB1bnNpZ25lZCBjaGFyIGJ5TG9jYWxJRCk7Cit2b2lkIE1BQ3ZTZXREZWZhdWx0S2V5Q3RsKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIHNob3J0IHdLZXlDdGwsIHVuc2lnbmVkIGludCB1RW50cnlJZHgsIHVuc2lnbmVkIGNoYXIgYnlMb2NhbElEKTsKIAogI2VuZGlmIC8vIF9fTUFDX0hfXwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L21pYi5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9taWIuYwppbmRleCA0Y2E3ODc3Li4xYjkxYTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L21pYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvbWliLmMKQEAgLTkwLDcgKzkwLDcgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBTVEF2VXBkYXRlSXNyU3RhdENvdW50ZXIgKFBTU3RhdENvdW50ZXIgcFN0YXRpc3RpYywgRFdPUkQgZHdJc3IpCit2b2lkIFNUQXZVcGRhdGVJc3JTdGF0Q291bnRlciAoUFNTdGF0Q291bnRlciBwU3RhdGlzdGljLCB1bnNpZ25lZCBsb25nIGR3SXNyKQogewogICAgIC8qKioqKioqKioqKioqKioqKioqKioqLwogICAgIC8qIEFCTk9STUFMIGludGVycnVwdCAqLwpAQCAtMTc3LDggKzE3Nyw4IEBACiAgKgogICovCiB2b2lkIFNUQXZVcGRhdGVSRFN0YXRDb3VudGVyIChQU1N0YXRDb3VudGVyIHBTdGF0aXN0aWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFIGJ5UlNSLCBCWVRFIGJ5TmV3UlNSLCBCWVRFIGJ5UnhSYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEUgcGJ5QnVmZmVyLCBVSU5UIGNiRnJhbWVMZW5ndGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJ5UlNSLCB1bnNpZ25lZCBjaGFyIGJ5TmV3UlNSLCB1bnNpZ25lZCBjaGFyIGJ5UnhSYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcGJ5QnVmZmVyLCB1bnNpZ25lZCBpbnQgY2JGcmFtZUxlbmd0aCkKIHsKICAgICAvL25lZWQgY2hhbmdlCiAgICAgUFM4MDJfMTFIZWFkZXIgcEhlYWRlciA9IChQUzgwMl8xMUhlYWRlcilwYnlCdWZmZXI7CkBAIC0xOTQsMTUgKzE5NCwxNSBAQAogICAgICAgICAgICAgLy8gdXBkYXRlIGNvdW50ZXJzIGluIGNhc2UgdGhhdCBzdWNjZXNzZnVsIHRyYW5zbWl0CiAgICAgICAgICAgICBpZiAoYnlSU1IgJiBSU1JfQUREUkJST0FEKSB7CiAgICAgICAgICAgICAgICAgcFN0YXRpc3RpYy0+dWxsUnhCcm9hZGNhc3RGcmFtZXMrKzsKLSAgICAgICAgICAgICAgICBwU3RhdGlzdGljLT51bGxSeEJyb2FkY2FzdEJ5dGVzICs9IChVTE9OR0xPTkcpY2JGcmFtZUxlbmd0aDsKKyAgICAgICAgICAgICAgICBwU3RhdGlzdGljLT51bGxSeEJyb2FkY2FzdEJ5dGVzICs9ICh1bnNpZ25lZCBsb25nIGxvbmcpIGNiRnJhbWVMZW5ndGg7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChieVJTUiAmIFJTUl9BRERSTVVMVEkpIHsKICAgICAgICAgICAgICAgICBwU3RhdGlzdGljLT51bGxSeE11bHRpY2FzdEZyYW1lcysrOwotICAgICAgICAgICAgICAgIHBTdGF0aXN0aWMtPnVsbFJ4TXVsdGljYXN0Qnl0ZXMgKz0gKFVMT05HTE9ORyljYkZyYW1lTGVuZ3RoOworICAgICAgICAgICAgICAgIHBTdGF0aXN0aWMtPnVsbFJ4TXVsdGljYXN0Qnl0ZXMgKz0gKHVuc2lnbmVkIGxvbmcgbG9uZykgY2JGcmFtZUxlbmd0aDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIHBTdGF0aXN0aWMtPnVsbFJ4RGlyZWN0ZWRGcmFtZXMrKzsKLSAgICAgICAgICAgICAgICBwU3RhdGlzdGljLT51bGxSeERpcmVjdGVkQnl0ZXMgKz0gKFVMT05HTE9ORyljYkZyYW1lTGVuZ3RoOworICAgICAgICAgICAgICAgIHBTdGF0aXN0aWMtPnVsbFJ4RGlyZWN0ZWRCeXRlcyArPSAodW5zaWduZWQgbG9uZyBsb25nKSBjYkZyYW1lTGVuZ3RoOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMjEyLDg3ICsyMTIsODcgQEAKICAgICAgICAgaWYoYnlSU1IgJiBSU1JfQ1JDT0spIHsKICAgICAgICAgICAgIHBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMTFNQ1JDT2srKzsKICAgICAgICAgfQotICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIjExTTogQUxMWyVkXSwgT0tbJWRdOlslMDJ4XVxuIiwgKElOVClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjExTSwgKElOVClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjExTUNSQ09rLCBieVJTUik7CisgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iMTFNOiBBTExbJWRdLCBPS1slZF06WyUwMnhdXG4iLCAoaW50KXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMTFNLCAoaW50KXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMTFNQ1JDT2ssIGJ5UlNSKTsKICAgICB9CiAgICAgZWxzZSBpZihieVJ4UmF0ZT09MTEpIHsKICAgICAgICAgcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3I1TSsrOwogICAgICAgICBpZihieVJTUiAmIFJTUl9DUkNPSykgewogICAgICAgICAgICAgcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3I1TUNSQ09rKys7CiAgICAgICAgIH0KLSAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgNU06IEFMTFslZF0sIE9LWyVkXTpbJTAyeF1cbiIsIChJTlQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3I1TSwgKElOVClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjVNQ1JDT2ssIGJ5UlNSKTsKKyAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgNU06IEFMTFslZF0sIE9LWyVkXTpbJTAyeF1cbiIsIChpbnQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3I1TSwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjVNQ1JDT2ssIGJ5UlNSKTsKICAgICB9CiAgICAgZWxzZSBpZihieVJ4UmF0ZT09NCkgewogICAgICAgICBwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjJNKys7CiAgICAgICAgIGlmKGJ5UlNSICYgUlNSX0NSQ09LKSB7CiAgICAgICAgICAgICBwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjJNQ1JDT2srKzsKICAgICAgICAgfQotICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiAyTTogQUxMWyVkXSwgT0tbJWRdOlslMDJ4XVxuIiwgKElOVClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjJNLCAoSU5UKXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMk1DUkNPaywgYnlSU1IpOworICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiAyTTogQUxMWyVkXSwgT0tbJWRdOlslMDJ4XVxuIiwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjJNLCAoaW50KXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMk1DUkNPaywgYnlSU1IpOwogICAgIH0KICAgICBlbHNlIGlmKGJ5UnhSYXRlPT0yKXsKICAgICAgICAgcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3IxTSsrOwogICAgICAgICBpZihieVJTUiAmIFJTUl9DUkNPSykgewogICAgICAgICAgICAgcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3IxTUNSQ09rKys7CiAgICAgICAgIH0KLSAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgMU06IEFMTFslZF0sIE9LWyVkXTpbJTAyeF1cbiIsIChJTlQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3IxTSwgKElOVClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjFNQ1JDT2ssIGJ5UlNSKTsKKyAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgMU06IEFMTFslZF0sIE9LWyVkXTpbJTAyeF1cbiIsIChpbnQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3IxTSwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjFNQ1JDT2ssIGJ5UlNSKTsKICAgICB9CiAgICAgZWxzZSBpZihieVJ4UmF0ZT09MTIpewogICAgICAgICBwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjZNKys7CiAgICAgICAgIGlmKGJ5UlNSICYgUlNSX0NSQ09LKSB7CiAgICAgICAgICAgICBwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjZNQ1JDT2srKzsKICAgICAgICAgfQotICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiA2TTogQUxMWyVkXSwgT0tbJWRdXG4iLCAoSU5UKXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyNk0sIChJTlQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3I2TUNSQ09rKTsKKyAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgNk06IEFMTFslZF0sIE9LWyVkXVxuIiwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjZNLCAoaW50KXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyNk1DUkNPayk7CiAgICAgfQogICAgIGVsc2UgaWYoYnlSeFJhdGU9PTE4KXsKICAgICAgICAgcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3I5TSsrOwogICAgICAgICBpZihieVJTUiAmIFJTUl9DUkNPSykgewogICAgICAgICAgICAgcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3I5TUNSQ09rKys7CiAgICAgICAgIH0KLSAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgOU06IEFMTFslZF0sIE9LWyVkXVxuIiwgKElOVClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjlNLCAoSU5UKXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyOU1DUkNPayk7CisgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIDlNOiBBTExbJWRdLCBPS1slZF1cbiIsIChpbnQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3I5TSwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjlNQ1JDT2spOwogICAgIH0KICAgICBlbHNlIGlmKGJ5UnhSYXRlPT0yNCl7CiAgICAgICAgIHBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMTJNKys7CiAgICAgICAgIGlmKGJ5UlNSICYgUlNSX0NSQ09LKSB7CiAgICAgICAgICAgICBwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjEyTUNSQ09rKys7CiAgICAgICAgIH0KLSAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIxMk06IEFMTFslZF0sIE9LWyVkXVxuIiwgKElOVClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjEyTSwgKElOVClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjEyTUNSQ09rKTsKKyAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIxMk06IEFMTFslZF0sIE9LWyVkXVxuIiwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjEyTSwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjEyTUNSQ09rKTsKICAgICB9CiAgICAgZWxzZSBpZihieVJ4UmF0ZT09MzYpewogICAgICAgICBwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjE4TSsrOwogICAgICAgICBpZihieVJTUiAmIFJTUl9DUkNPSykgewogICAgICAgICAgICAgcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3IxOE1DUkNPaysrOwogICAgICAgICB9Ci0gICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iMThNOiBBTExbJWRdLCBPS1slZF1cbiIsIChJTlQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3IxOE0sIChJTlQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3IxOE1DUkNPayk7CisgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iMThNOiBBTExbJWRdLCBPS1slZF1cbiIsIChpbnQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3IxOE0sIChpbnQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3IxOE1DUkNPayk7CiAgICAgfQogICAgIGVsc2UgaWYoYnlSeFJhdGU9PTQ4KXsKICAgICAgICAgcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3IyNE0rKzsKICAgICAgICAgaWYoYnlSU1IgJiBSU1JfQ1JDT0spIHsKICAgICAgICAgICAgIHBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMjRNQ1JDT2srKzsKICAgICAgICAgfQotICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIjI0TTogQUxMWyVkXSwgT0tbJWRdXG4iLCAoSU5UKXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMjRNLCAoSU5UKXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMjRNQ1JDT2spOworICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIjI0TTogQUxMWyVkXSwgT0tbJWRdXG4iLCAoaW50KXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMjRNLCAoaW50KXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMjRNQ1JDT2spOwogICAgIH0KICAgICBlbHNlIGlmKGJ5UnhSYXRlPT03Mil7CiAgICAgICAgIHBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMzZNKys7CiAgICAgICAgIGlmKGJ5UlNSICYgUlNSX0NSQ09LKSB7CiAgICAgICAgICAgICBwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjM2TUNSQ09rKys7CiAgICAgICAgIH0KLSAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIzNk06IEFMTFslZF0sIE9LWyVkXVxuIiwgKElOVClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjM2TSwgKElOVClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjM2TUNSQ09rKTsKKyAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIzNk06IEFMTFslZF0sIE9LWyVkXVxuIiwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjM2TSwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjM2TUNSQ09rKTsKICAgICB9CiAgICAgZWxzZSBpZihieVJ4UmF0ZT09OTYpewogICAgICAgICBwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjQ4TSsrOwogICAgICAgICBpZihieVJTUiAmIFJTUl9DUkNPSykgewogICAgICAgICAgICAgcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3I0OE1DUkNPaysrOwogICAgICAgICB9Ci0gICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iNDhNOiBBTExbJWRdLCBPS1slZF1cbiIsIChJTlQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3I0OE0sIChJTlQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3I0OE1DUkNPayk7CisgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iNDhNOiBBTExbJWRdLCBPS1slZF1cbiIsIChpbnQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3I0OE0sIChpbnQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3I0OE1DUkNPayk7CiAgICAgfQogICAgIGVsc2UgaWYoYnlSeFJhdGU9PTEwOCl7CiAgICAgICAgIHBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyNTRNKys7CiAgICAgICAgIGlmKGJ5UlNSICYgUlNSX0NSQ09LKSB7CiAgICAgICAgICAgICBwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjU0TUNSQ09rKys7CiAgICAgICAgIH0KLSAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyI1NE06IEFMTFslZF0sIE9LWyVkXVxuIiwgKElOVClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjU0TSwgKElOVClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjU0TUNSQ09rKTsKKyAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyI1NE06IEFMTFslZF0sIE9LWyVkXVxuIiwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjU0TSwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjU0TUNSQ09rKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iVW5rbm93bjogVG90YWxbJWRdLCBDUkNPS1slZF1cbiIsIChJTlQpcFN0YXRpc3RpYy0+ZHdSc3JSeFBhY2tldCsxLCAoSU5UKXBTdGF0aXN0aWMtPmR3UnNyQ1JDT2spOworICAgIAlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIlVua25vd246IFRvdGFsWyVkXSwgQ1JDT0tbJWRdXG4iLCAoaW50KXBTdGF0aXN0aWMtPmR3UnNyUnhQYWNrZXQrMSwgKGludClwU3RhdGlzdGljLT5kd1JzckNSQ09rKTsKICAgICB9CiAKICAgICBpZiAoYnlSU1IgJiBSU1JfQlNTSURPSykKQEAgLTM0MSwxMCArMzQxLDEwIEBACiAgICAgaWYgKFdMQU5fR0VUX0ZDX01PUkVGUkFHKHBIZWFkZXItPndGcmFtZUN0bCkpCiAgICAgICAgIHBTdGF0aXN0aWMtPmR3UnNyUnhGcmFnbWVudCsrOwogCi0gICAgaWYgKGNiRnJhbWVMZW5ndGggPCBNSU5fUEFDS0VUX0xFTiArIDQpIHsKKyAgICBpZiAoY2JGcmFtZUxlbmd0aCA8IEVUSF9aTEVOICsgNCkgewogICAgICAgICBwU3RhdGlzdGljLT5kd1JzclJ1bnQrKzsKICAgICB9Ci0gICAgZWxzZSBpZiAoY2JGcmFtZUxlbmd0aCA9PSBNSU5fUEFDS0VUX0xFTiArIDQpIHsKKyAgICBlbHNlIGlmIChjYkZyYW1lTGVuZ3RoID09IEVUSF9aTEVOICsgNCkgewogICAgICAgICBwU3RhdGlzdGljLT5kd1JzclJ4RnJtTGVuNjQrKzsKICAgICB9CiAgICAgZWxzZSBpZiAoKDY1IDw9IGNiRnJhbWVMZW5ndGgpICYmIChjYkZyYW1lTGVuZ3RoIDw9IDEyNykpIHsKQEAgLTM4OSwxMSArMzg5LDExIEBACiB2b2lkCiBTVEF2VXBkYXRlUkRTdGF0Q291bnRlckV4ICgKICAgICBQU1N0YXRDb3VudGVyICAgcFN0YXRpc3RpYywKLSAgICBCWVRFICAgICAgICAgICAgYnlSU1IsCi0gICAgQllURSAgICAgICAgICAgIGJ5TmV3UlNSLAotICAgIEJZVEUgICAgICAgICAgICBieVJ4UmF0ZSwKLSAgICBQQllURSAgICAgICAgICAgcGJ5QnVmZmVyLAotICAgIFVJTlQgICAgICAgICAgICBjYkZyYW1lTGVuZ3RoCisgICAgdW5zaWduZWQgY2hhciBieVJTUiwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TmV3UlNSLAorICAgIHVuc2lnbmVkIGNoYXIgYnlSeFJhdGUsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5QnVmZmVyLAorICAgIHVuc2lnbmVkIGludCBjYkZyYW1lTGVuZ3RoCiAgICAgKQogewogICAgIFNUQXZVcGRhdGVSRFN0YXRDb3VudGVyKApAQCAtNDA4LDcgKzQwOCw3IEBACiAgICAgLy8gcnggbGVuZ3RoCiAgICAgcFN0YXRpc3RpYy0+ZHdDbnRSeEZybUxlbmd0aCA9IGNiRnJhbWVMZW5ndGg7CiAgICAgLy8gcnggcGF0dGVybiwgd2UganVzdCBzZWUgMTAgYnl0ZXMgZm9yIHNhbXBsZQotICAgIG1lbWNweShwU3RhdGlzdGljLT5hYnlDbnRSeFBhdHRlcm4sIChQQllURSlwYnlCdWZmZXIsIDEwKTsKKyAgICBtZW1jcHkocFN0YXRpc3RpYy0+YWJ5Q250UnhQYXR0ZXJuLCAodW5zaWduZWQgY2hhciAqKXBieUJ1ZmZlciwgMTApOwogfQogCiAKQEAgLTQzMiwxNiArNDMyLDE2IEBACiB2b2lkCiBTVEF2VXBkYXRlVERTdGF0Q291bnRlciAoCiAgICAgUFNTdGF0Q291bnRlciAgIHBTdGF0aXN0aWMsCi0gICAgQllURSAgICAgICAgICAgIGJ5VFNSMCwKLSAgICBCWVRFICAgICAgICAgICAgYnlUU1IxLAotICAgIFBCWVRFICAgICAgICAgICBwYnlCdWZmZXIsCi0gICAgVUlOVCAgICAgICAgICAgIGNiRnJhbWVMZW5ndGgsCi0gICAgVUlOVCAgICAgICAgICAgIHVJZHgKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VFNSMCwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VFNSMSwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCdWZmZXIsCisgICAgdW5zaWduZWQgaW50IGNiRnJhbWVMZW5ndGgsCisgICAgdW5zaWduZWQgaW50IHVJZHgKICAgICApCiB7CiAgICAgUFdMQU5fODAyMTFIRFJfQTQgICBwSGVhZGVyOwotICAgIFBCWVRFICAgICAgICAgICAgICAgcGJ5RGVzdEFkZHI7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieVRTUjBfTkNSID0gYnlUU1IwICYgVFNSMF9OQ1I7CisgICAgdW5zaWduZWQgY2hhciAqcGJ5RGVzdEFkZHI7CisgICAgdW5zaWduZWQgY2hhciBieVRTUjBfTkNSID0gYnlUU1IwICYgVFNSMF9OQ1I7CiAKIAogCkBAIC00NzEsMTcgKzQ3MSwxNyBAQAogICAgICAgICBwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFRzckFsbE9LID0KICAgICAgICAgICAgIChwU3RhdGlzdGljLT51bGxUc3JPS1tUWVBFX0FDMERNQV0gKyBwU3RhdGlzdGljLT51bGxUc3JPS1tUWVBFX1RYRE1BMF0pOwogICAgICAgICAvLyB1cGRhdGUgY291bnRlcnMgaW4gY2FzZSB0aGF0IHN1Y2Nlc3NmdWwgdHJhbnNtaXQKLSAgICAgICAgaWYgKElTX0JST0FEQ0FTVF9BRERSRVNTKHBieURlc3RBZGRyKSkgeworICAgICAgICBpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIocGJ5RGVzdEFkZHIpKSB7CiAgICAgICAgICAgICBwU3RhdGlzdGljLT51bGxUeEJyb2FkY2FzdEZyYW1lc1t1SWR4XSsrOwotICAgICAgICAgICAgcFN0YXRpc3RpYy0+dWxsVHhCcm9hZGNhc3RCeXRlc1t1SWR4XSArPSAoVUxPTkdMT05HKWNiRnJhbWVMZW5ndGg7CisgICAgICAgICAgICBwU3RhdGlzdGljLT51bGxUeEJyb2FkY2FzdEJ5dGVzW3VJZHhdICs9ICh1bnNpZ25lZCBsb25nIGxvbmcpIGNiRnJhbWVMZW5ndGg7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoSVNfTVVMVElDQVNUX0FERFJFU1MocGJ5RGVzdEFkZHIpKSB7CisgICAgICAgIGVsc2UgaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHBieURlc3RBZGRyKSkgewogICAgICAgICAgICAgcFN0YXRpc3RpYy0+dWxsVHhNdWx0aWNhc3RGcmFtZXNbdUlkeF0rKzsKLSAgICAgICAgICAgIHBTdGF0aXN0aWMtPnVsbFR4TXVsdGljYXN0Qnl0ZXNbdUlkeF0gKz0gKFVMT05HTE9ORyljYkZyYW1lTGVuZ3RoOworICAgICAgICAgICAgcFN0YXRpc3RpYy0+dWxsVHhNdWx0aWNhc3RCeXRlc1t1SWR4XSArPSAodW5zaWduZWQgbG9uZyBsb25nKSBjYkZyYW1lTGVuZ3RoOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcFN0YXRpc3RpYy0+dWxsVHhEaXJlY3RlZEZyYW1lc1t1SWR4XSsrOwotICAgICAgICAgICAgcFN0YXRpc3RpYy0+dWxsVHhEaXJlY3RlZEJ5dGVzW3VJZHhdICs9IChVTE9OR0xPTkcpY2JGcmFtZUxlbmd0aDsKKyAgICAgICAgICAgIHBTdGF0aXN0aWMtPnVsbFR4RGlyZWN0ZWRCeXRlc1t1SWR4XSArPSAodW5zaWduZWQgbG9uZyBsb25nKSBjYkZyYW1lTGVuZ3RoOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewpAQCAtNDk1LDkgKzQ5NSw5IEBACiAgICAgICAgICAgICBwU3RhdGlzdGljLT5kd1RzckFDS0RhdGFbdUlkeF0rKzsKICAgICB9CiAKLSAgICBpZiAoSVNfQlJPQURDQVNUX0FERFJFU1MocGJ5RGVzdEFkZHIpKQorICAgIGlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihwYnlEZXN0QWRkcikpCiAgICAgICAgIHBTdGF0aXN0aWMtPmR3VHNyQnJvYWRjYXN0W3VJZHhdKys7Ci0gICAgZWxzZSBpZiAoSVNfTVVMVElDQVNUX0FERFJFU1MocGJ5RGVzdEFkZHIpKQorICAgIGVsc2UgaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHBieURlc3RBZGRyKSkKICAgICAgICAgcFN0YXRpc3RpYy0+ZHdUc3JNdWx0aWNhc3RbdUlkeF0rKzsKICAgICBlbHNlCiAgICAgICAgIHBTdGF0aXN0aWMtPmR3VHNyRGlyZWN0ZWRbdUlkeF0rKzsKQEAgLTUyMiwxMyArNTIyLDEzIEBACiB2b2lkCiBTVEF2VXBkYXRlVERTdGF0Q291bnRlckV4ICgKICAgICBQU1N0YXRDb3VudGVyICAgcFN0YXRpc3RpYywKLSAgICBQQllURSAgICAgICAgICAgcGJ5QnVmZmVyLAotICAgIERXT1JEICAgICAgICAgICBjYkZyYW1lTGVuZ3RoCisgICAgdW5zaWduZWQgY2hhciAqcGJ5QnVmZmVyLAorICAgIHVuc2lnbmVkIGxvbmcgY2JGcmFtZUxlbmd0aAogICAgICkKIHsKLSAgICBVSU5UICAgIHVQa3RMZW5ndGg7CisgICAgdW5zaWduZWQgaW50IHVQa3RMZW5ndGg7CiAKLSAgICB1UGt0TGVuZ3RoID0gKFVJTlQpY2JGcmFtZUxlbmd0aDsKKyAgICB1UGt0TGVuZ3RoID0gKHVuc2lnbmVkIGludCljYkZyYW1lTGVuZ3RoOwogCiAgICAgLy8gdHggbGVuZ3RoCiAgICAgcFN0YXRpc3RpYy0+ZHdDbnRUeEJ1Zkxlbmd0aCA9IHVQa3RMZW5ndGg7CkBAIC01NTUsMjUgKzU1NSwyNSBAQAogU1RBdlVwZGF0ZTgwMl8xMUNvdW50ZXIoCiAgICAgUFNEb3QxMUNvdW50ZXJzICAgICAgICAgcDgwMl8xMUNvdW50ZXIsCiAgICAgUFNTdGF0Q291bnRlciAgICAgICAgICAgcFN0YXRpc3RpYywKLSAgICBEV09SRCAgICAgICAgICAgICAgICAgICBkd0NvdW50ZXIKKyAgICB1bnNpZ25lZCBsb25nIGR3Q291bnRlcgogICAgICkKIHsKICAgICAvL3A4MDJfMTFDb3VudGVyLT5UcmFuc21pdHRlZEZyYWdtZW50Q291bnQKLSAgICBwODAyXzExQ291bnRlci0+TXVsdGljYXN0VHJhbnNtaXR0ZWRGcmFtZUNvdW50ID0gKFVMT05HTE9ORykgKHBTdGF0aXN0aWMtPmR3VHNyQnJvYWRjYXN0W1RZUEVfQUMwRE1BXSArCisgICAgcDgwMl8xMUNvdW50ZXItPk11bHRpY2FzdFRyYW5zbWl0dGVkRnJhbWVDb3VudCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpIChwU3RhdGlzdGljLT5kd1RzckJyb2FkY2FzdFtUWVBFX0FDMERNQV0gKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFN0YXRpc3RpYy0+ZHdUc3JCcm9hZGNhc3RbVFlQRV9UWERNQTBdICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBTdGF0aXN0aWMtPmR3VHNyTXVsdGljYXN0W1RZUEVfQUMwRE1BXSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwU3RhdGlzdGljLT5kd1Rzck11bHRpY2FzdFtUWVBFX1RYRE1BMF0pOwotICAgIHA4MDJfMTFDb3VudGVyLT5GYWlsZWRDb3VudCA9IChVTE9OR0xPTkcpIChwU3RhdGlzdGljLT5kd1RzckVycltUWVBFX0FDMERNQV0gKyBwU3RhdGlzdGljLT5kd1RzckVycltUWVBFX1RYRE1BMF0pOwotICAgIHA4MDJfMTFDb3VudGVyLT5SZXRyeUNvdW50ID0gKFVMT05HTE9ORykgKHBTdGF0aXN0aWMtPmR3VHNyUmV0cnlbVFlQRV9BQzBETUFdICsgcFN0YXRpc3RpYy0+ZHdUc3JSZXRyeVtUWVBFX1RYRE1BMF0pOwotICAgIHA4MDJfMTFDb3VudGVyLT5NdWx0aXBsZVJldHJ5Q291bnQgPSAoVUxPTkdMT05HKSAocFN0YXRpc3RpYy0+ZHdUc3JNb3JlVGhhbk9uY2VSZXRyeVtUWVBFX0FDMERNQV0gKworICAgIHA4MDJfMTFDb3VudGVyLT5GYWlsZWRDb3VudCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpIChwU3RhdGlzdGljLT5kd1RzckVycltUWVBFX0FDMERNQV0gKyBwU3RhdGlzdGljLT5kd1RzckVycltUWVBFX1RYRE1BMF0pOworICAgIHA4MDJfMTFDb3VudGVyLT5SZXRyeUNvdW50ID0gKHVuc2lnbmVkIGxvbmcgbG9uZykgKHBTdGF0aXN0aWMtPmR3VHNyUmV0cnlbVFlQRV9BQzBETUFdICsgcFN0YXRpc3RpYy0+ZHdUc3JSZXRyeVtUWVBFX1RYRE1BMF0pOworICAgIHA4MDJfMTFDb3VudGVyLT5NdWx0aXBsZVJldHJ5Q291bnQgPSAodW5zaWduZWQgbG9uZyBsb25nKSAocFN0YXRpc3RpYy0+ZHdUc3JNb3JlVGhhbk9uY2VSZXRyeVtUWVBFX0FDMERNQV0gKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBTdGF0aXN0aWMtPmR3VHNyTW9yZVRoYW5PbmNlUmV0cnlbVFlQRV9UWERNQTBdKTsKICAgICAvL3A4MDJfMTFDb3VudGVyLT5GcmFtZUR1cGxpY2F0ZUNvdW50Ci0gICAgcDgwMl8xMUNvdW50ZXItPlJUU1N1Y2Nlc3NDb3VudCArPSAoVUxPTkdMT05HKSAgKGR3Q291bnRlciAmIDB4MDAwMDAwZmYpOwotICAgIHA4MDJfMTFDb3VudGVyLT5SVFNGYWlsdXJlQ291bnQgKz0gKFVMT05HTE9ORykgKChkd0NvdW50ZXIgJiAweDAwMDBmZjAwKSA+PiA4KTsKLSAgICBwODAyXzExQ291bnRlci0+QUNLRmFpbHVyZUNvdW50ICs9IChVTE9OR0xPTkcpICgoZHdDb3VudGVyICYgMHgwMGZmMDAwMCkgPj4gMTYpOwotICAgIHA4MDJfMTFDb3VudGVyLT5GQ1NFcnJvckNvdW50ICs9ICAgKFVMT05HTE9ORykgKChkd0NvdW50ZXIgJiAweGZmMDAwMDAwKSA+PiAyNCk7CisgICAgcDgwMl8xMUNvdW50ZXItPlJUU1N1Y2Nlc3NDb3VudCArPSAodW5zaWduZWQgbG9uZyBsb25nKSAgKGR3Q291bnRlciAmIDB4MDAwMDAwZmYpOworICAgIHA4MDJfMTFDb3VudGVyLT5SVFNGYWlsdXJlQ291bnQgKz0gKHVuc2lnbmVkIGxvbmcgbG9uZykgKChkd0NvdW50ZXIgJiAweDAwMDBmZjAwKSA+PiA4KTsKKyAgICBwODAyXzExQ291bnRlci0+QUNLRmFpbHVyZUNvdW50ICs9ICh1bnNpZ25lZCBsb25nIGxvbmcpICgoZHdDb3VudGVyICYgMHgwMGZmMDAwMCkgPj4gMTYpOworICAgIHA4MDJfMTFDb3VudGVyLT5GQ1NFcnJvckNvdW50ICs9ICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgKChkd0NvdW50ZXIgJiAweGZmMDAwMDAwKSA+PiAyNCk7CiAgICAgLy9wODAyXzExQ291bnRlci0+UmVjZWl2ZWRGcmFnbWVudENvdW50Ci0gICAgcDgwMl8xMUNvdW50ZXItPk11bHRpY2FzdFJlY2VpdmVkRnJhbWVDb3VudCA9IChVTE9OR0xPTkcpIChwU3RhdGlzdGljLT5kd1JzckJyb2FkY2FzdCArCisgICAgcDgwMl8xMUNvdW50ZXItPk11bHRpY2FzdFJlY2VpdmVkRnJhbWVDb3VudCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpIChwU3RhdGlzdGljLT5kd1JzckJyb2FkY2FzdCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwU3RhdGlzdGljLT5kd1Jzck11bHRpY2FzdCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvbWliLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L21pYi5oCmluZGV4IDIzMDgzMTkuLjAwOWYzYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvbWliLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9taWIuaApAQCAtMzksMzIgKzM5LDMyIEBACiAvLwogCiB0eXBlZGVmIHN0cnVjdCB0YWdTRG90MTFDb3VudGVycyB7Ci0gICAgVUxPTkcgICAgICAgTGVuZ3RoOyAgICAgICAgICAgICAvLyBMZW5ndGggb2Ygc3RydWN0dXJlCi0gICAgVUxPTkdMT05HICAgVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50OwotICAgIFVMT05HTE9ORyAgIE11bHRpY2FzdFRyYW5zbWl0dGVkRnJhbWVDb3VudDsKLSAgICBVTE9OR0xPTkcgICBGYWlsZWRDb3VudDsKLSAgICBVTE9OR0xPTkcgICBSZXRyeUNvdW50OwotICAgIFVMT05HTE9ORyAgIE11bHRpcGxlUmV0cnlDb3VudDsKLSAgICBVTE9OR0xPTkcgICBSVFNTdWNjZXNzQ291bnQ7Ci0gICAgVUxPTkdMT05HICAgUlRTRmFpbHVyZUNvdW50OwotICAgIFVMT05HTE9ORyAgIEFDS0ZhaWx1cmVDb3VudDsKLSAgICBVTE9OR0xPTkcgICBGcmFtZUR1cGxpY2F0ZUNvdW50OwotICAgIFVMT05HTE9ORyAgIFJlY2VpdmVkRnJhZ21lbnRDb3VudDsKLSAgICBVTE9OR0xPTkcgICBNdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQ7Ci0gICAgVUxPTkdMT05HICAgRkNTRXJyb3JDb3VudDsKLSAgICBVTE9OR0xPTkcgICBUS0lQTG9jYWxNSUNGYWlsdXJlczsKLSAgICBVTE9OR0xPTkcgICBUS0lQUmVtb3RlTUlDRmFpbHVyZXM7Ci0gICAgVUxPTkdMT05HICAgVEtJUElDVkVycm9yczsKLSAgICBVTE9OR0xPTkcgICBUS0lQQ291bnRlck1lYXN1cmVzSW52b2tlZDsKLSAgICBVTE9OR0xPTkcgICBUS0lQUmVwbGF5czsKLSAgICBVTE9OR0xPTkcgICBDQ01QRm9ybWF0RXJyb3JzOwotICAgIFVMT05HTE9ORyAgIENDTVBSZXBsYXlzOwotICAgIFVMT05HTE9ORyAgIENDTVBEZWNyeXB0RXJyb3JzOwotICAgIFVMT05HTE9ORyAgIEZvdXJXYXlIYW5kc2hha2VGYWlsdXJlczsKLS8vICAgIFVMT05HTE9ORyAgIFdFUFVuZGVjcnlwdGFibGVDb3VudDsKLS8vICAgIFVMT05HTE9ORyAgIFdFUElDVkVycm9yQ291bnQ7Ci0vLyAgICBVTE9OR0xPTkcgICBEZWNyeXB0U3VjY2Vzc0NvdW50OwotLy8gICAgVUxPTkdMT05HICAgRGVjcnlwdEZhaWx1cmVDb3VudDsKKyAgICB1bnNpZ25lZCBsb25nIExlbmd0aDsgICAgICAgICAgICAgLy8gTGVuZ3RoIG9mIHN0cnVjdHVyZQorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIFRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudDsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICBNdWx0aWNhc3RUcmFuc21pdHRlZEZyYW1lQ291bnQ7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgRmFpbGVkQ291bnQ7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgUmV0cnlDb3VudDsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICBNdWx0aXBsZVJldHJ5Q291bnQ7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgUlRTU3VjY2Vzc0NvdW50OworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIFJUU0ZhaWx1cmVDb3VudDsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICBBQ0tGYWlsdXJlQ291bnQ7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgRnJhbWVEdXBsaWNhdGVDb3VudDsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICBSZWNlaXZlZEZyYWdtZW50Q291bnQ7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgTXVsdGljYXN0UmVjZWl2ZWRGcmFtZUNvdW50OworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIEZDU0Vycm9yQ291bnQ7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgVEtJUExvY2FsTUlDRmFpbHVyZXM7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgVEtJUFJlbW90ZU1JQ0ZhaWx1cmVzOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIFRLSVBJQ1ZFcnJvcnM7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgVEtJUENvdW50ZXJNZWFzdXJlc0ludm9rZWQ7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgVEtJUFJlcGxheXM7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgQ0NNUEZvcm1hdEVycm9yczsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICBDQ01QUmVwbGF5czsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICBDQ01QRGVjcnlwdEVycm9yczsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICBGb3VyV2F5SGFuZHNoYWtlRmFpbHVyZXM7CisvLyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICBXRVBVbmRlY3J5cHRhYmxlQ291bnQ7CisvLyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICBXRVBJQ1ZFcnJvckNvdW50OworLy8gICAgdW5zaWduZWQgbG9uZyBsb25nICAgRGVjcnlwdFN1Y2Nlc3NDb3VudDsKKy8vICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIERlY3J5cHRGYWlsdXJlQ291bnQ7CiB9IFNEb3QxMUNvdW50ZXJzLCAqUFNEb3QxMUNvdW50ZXJzOwogCiAKQEAgLTcyLDI5ICs3MiwyOSBAQAogLy8gTUlCMiBjb3VudGVyCiAvLwogdHlwZWRlZiBzdHJ1Y3QgdGFnU01pYjJDb3VudGVyIHsKLSAgICBMT05HICAgIGlmSW5kZXg7CisgICAgbG9uZyAgICBpZkluZGV4OwogICAgIGNoYXIgICAgaWZEZXNjclsyNTZdOyAgICAgICAgICAgICAgIC8vIG1heCBzaXplIDI1NSBwbHVzIHplcm8gZW5kaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZS5nLiAiaW50ZXJmYWNlIDEiCi0gICAgTE9ORyAgICBpZlR5cGU7Ci0gICAgTE9ORyAgICBpZk10dTsKLSAgICBEV09SRCAgIGlmU3BlZWQ7Ci0gICAgQllURSAgICBpZlBoeXNBZGRyZXNzW0VUSF9BTEVOXTsKLSAgICBMT05HICAgIGlmQWRtaW5TdGF0dXM7Ci0gICAgTE9ORyAgICBpZk9wZXJTdGF0dXM7Ci0gICAgRFdPUkQgICBpZkxhc3RDaGFuZ2U7Ci0gICAgRFdPUkQgICBpZkluT2N0ZXRzOwotICAgIERXT1JEICAgaWZJblVjYXN0UGt0czsKLSAgICBEV09SRCAgIGlmSW5OVWNhc3RQa3RzOwotICAgIERXT1JEICAgaWZJbkRpc2NhcmRzOwotICAgIERXT1JEICAgaWZJbkVycm9yczsKLSAgICBEV09SRCAgIGlmSW5Vbmtub3duUHJvdG9zOwotICAgIERXT1JEICAgaWZPdXRPY3RldHM7Ci0gICAgRFdPUkQgICBpZk91dFVjYXN0UGt0czsKLSAgICBEV09SRCAgIGlmT3V0TlVjYXN0UGt0czsKLSAgICBEV09SRCAgIGlmT3V0RGlzY2FyZHM7Ci0gICAgRFdPUkQgICBpZk91dEVycm9yczsKLSAgICBEV09SRCAgIGlmT3V0UUxlbjsKLSAgICBEV09SRCAgIGlmU3BlY2lmaWM7CisgICAgbG9uZyAgICBpZlR5cGU7CisgICAgbG9uZyAgICBpZk10dTsKKyAgICB1bnNpZ25lZCBsb25nIGlmU3BlZWQ7CisgICAgdW5zaWduZWQgY2hhciBpZlBoeXNBZGRyZXNzW0VUSF9BTEVOXTsKKyAgICBsb25nICAgIGlmQWRtaW5TdGF0dXM7CisgICAgbG9uZyAgICBpZk9wZXJTdGF0dXM7CisgICAgdW5zaWduZWQgbG9uZyBpZkxhc3RDaGFuZ2U7CisgICAgdW5zaWduZWQgbG9uZyBpZkluT2N0ZXRzOworICAgIHVuc2lnbmVkIGxvbmcgaWZJblVjYXN0UGt0czsKKyAgICB1bnNpZ25lZCBsb25nIGlmSW5OVWNhc3RQa3RzOworICAgIHVuc2lnbmVkIGxvbmcgaWZJbkRpc2NhcmRzOworICAgIHVuc2lnbmVkIGxvbmcgaWZJbkVycm9yczsKKyAgICB1bnNpZ25lZCBsb25nIGlmSW5Vbmtub3duUHJvdG9zOworICAgIHVuc2lnbmVkIGxvbmcgaWZPdXRPY3RldHM7CisgICAgdW5zaWduZWQgbG9uZyBpZk91dFVjYXN0UGt0czsKKyAgICB1bnNpZ25lZCBsb25nIGlmT3V0TlVjYXN0UGt0czsKKyAgICB1bnNpZ25lZCBsb25nIGlmT3V0RGlzY2FyZHM7CisgICAgdW5zaWduZWQgbG9uZyBpZk91dEVycm9yczsKKyAgICB1bnNpZ25lZCBsb25nIGlmT3V0UUxlbjsKKyAgICB1bnNpZ25lZCBsb25nIGlmU3BlY2lmaWM7CiB9IFNNaWIyQ291bnRlciwgKlBTTWliMkNvdW50ZXI7CiAKIC8vIFZhbHVlIGluIHRoZSBpZlR5cGUgZW50cnkKQEAgLTExMSw2NCArMTExLDY0IEBACiAvLyBSTU9OIGNvdW50ZXIKIC8vCiB0eXBlZGVmIHN0cnVjdCB0YWdTUm1vbkNvdW50ZXIgewotICAgIExPTkcgICAgZXRoZXJTdGF0c0luZGV4OwotICAgIERXT1JEICAgZXRoZXJTdGF0c0RhdGFTb3VyY2U7Ci0gICAgRFdPUkQgICBldGhlclN0YXRzRHJvcEV2ZW50czsKLSAgICBEV09SRCAgIGV0aGVyU3RhdHNPY3RldHM7Ci0gICAgRFdPUkQgICBldGhlclN0YXRzUGt0czsKLSAgICBEV09SRCAgIGV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzOwotICAgIERXT1JEICAgZXRoZXJTdGF0c011bHRpY2FzdFBrdHM7Ci0gICAgRFdPUkQgICBldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnM7Ci0gICAgRFdPUkQgICBldGhlclN0YXRzVW5kZXJzaXplUGt0czsKLSAgICBEV09SRCAgIGV0aGVyU3RhdHNPdmVyc2l6ZVBrdHM7Ci0gICAgRFdPUkQgICBldGhlclN0YXRzRnJhZ21lbnRzOwotICAgIERXT1JEICAgZXRoZXJTdGF0c0phYmJlcnM7Ci0gICAgRFdPUkQgICBldGhlclN0YXRzQ29sbGlzaW9uczsKLSAgICBEV09SRCAgIGV0aGVyU3RhdHNQa3Q2NE9jdGV0czsKLSAgICBEV09SRCAgIGV0aGVyU3RhdHNQa3Q2NXRvMTI3T2N0ZXRzOwotICAgIERXT1JEICAgZXRoZXJTdGF0c1BrdDEyOHRvMjU1T2N0ZXRzOwotICAgIERXT1JEICAgZXRoZXJTdGF0c1BrdDI1NnRvNTExT2N0ZXRzOwotICAgIERXT1JEICAgZXRoZXJTdGF0c1BrdDUxMnRvMTAyM09jdGV0czsKLSAgICBEV09SRCAgIGV0aGVyU3RhdHNQa3QxMDI0dG8xNTE4T2N0ZXRzOwotICAgIERXT1JEICAgZXRoZXJTdGF0c093bmVyczsKLSAgICBEV09SRCAgIGV0aGVyU3RhdHNTdGF0dXM7CisgICAgbG9uZyAgICBldGhlclN0YXRzSW5kZXg7CisgICAgdW5zaWduZWQgbG9uZyBldGhlclN0YXRzRGF0YVNvdXJjZTsKKyAgICB1bnNpZ25lZCBsb25nIGV0aGVyU3RhdHNEcm9wRXZlbnRzOworICAgIHVuc2lnbmVkIGxvbmcgZXRoZXJTdGF0c09jdGV0czsKKyAgICB1bnNpZ25lZCBsb25nIGV0aGVyU3RhdHNQa3RzOworICAgIHVuc2lnbmVkIGxvbmcgZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHM7CisgICAgdW5zaWduZWQgbG9uZyBldGhlclN0YXRzTXVsdGljYXN0UGt0czsKKyAgICB1bnNpZ25lZCBsb25nIGV0aGVyU3RhdHNDUkNBbGlnbkVycm9yczsKKyAgICB1bnNpZ25lZCBsb25nIGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzOworICAgIHVuc2lnbmVkIGxvbmcgZXRoZXJTdGF0c092ZXJzaXplUGt0czsKKyAgICB1bnNpZ25lZCBsb25nIGV0aGVyU3RhdHNGcmFnbWVudHM7CisgICAgdW5zaWduZWQgbG9uZyBldGhlclN0YXRzSmFiYmVyczsKKyAgICB1bnNpZ25lZCBsb25nIGV0aGVyU3RhdHNDb2xsaXNpb25zOworICAgIHVuc2lnbmVkIGxvbmcgZXRoZXJTdGF0c1BrdDY0T2N0ZXRzOworICAgIHVuc2lnbmVkIGxvbmcgZXRoZXJTdGF0c1BrdDY1dG8xMjdPY3RldHM7CisgICAgdW5zaWduZWQgbG9uZyBldGhlclN0YXRzUGt0MTI4dG8yNTVPY3RldHM7CisgICAgdW5zaWduZWQgbG9uZyBldGhlclN0YXRzUGt0MjU2dG81MTFPY3RldHM7CisgICAgdW5zaWduZWQgbG9uZyBldGhlclN0YXRzUGt0NTEydG8xMDIzT2N0ZXRzOworICAgIHVuc2lnbmVkIGxvbmcgZXRoZXJTdGF0c1BrdDEwMjR0bzE1MThPY3RldHM7CisgICAgdW5zaWduZWQgbG9uZyBldGhlclN0YXRzT3duZXJzOworICAgIHVuc2lnbmVkIGxvbmcgZXRoZXJTdGF0c1N0YXR1czsKIH0gU1Jtb25Db3VudGVyLCAqUFNSbW9uQ291bnRlcjsKIAogLy8KIC8vIEN1c3RvbSBjb3VudGVyCiAvLwogdHlwZWRlZiBzdHJ1Y3QgdGFnU0N1c3RvbUNvdW50ZXJzIHsKLSAgICBVTE9ORyAgICAgICBMZW5ndGg7CisgICAgdW5zaWduZWQgbG9uZyBMZW5ndGg7CiAKLSAgICBVTE9OR0xPTkcgICB1bGxUc3JBbGxPSzsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICB1bGxUc3JBbGxPSzsKIAotICAgIFVMT05HTE9ORyAgIHVsbFJzcjExTTsKLSAgICBVTE9OR0xPTkcgICB1bGxSc3I1TTsKLSAgICBVTE9OR0xPTkcgICB1bGxSc3IyTTsKLSAgICBVTE9OR0xPTkcgICB1bGxSc3IxTTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICB1bGxSc3IxMU07CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsUnNyNU07CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsUnNyMk07CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsUnNyMU07CiAKLSAgICBVTE9OR0xPTkcgICB1bGxSc3IxMU1DUkNPazsKLSAgICBVTE9OR0xPTkcgICB1bGxSc3I1TUNSQ09rOwotICAgIFVMT05HTE9ORyAgIHVsbFJzcjJNQ1JDT2s7Ci0gICAgVUxPTkdMT05HICAgdWxsUnNyMU1DUkNPazsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICB1bGxSc3IxMU1DUkNPazsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICB1bGxSc3I1TUNSQ09rOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVsbFJzcjJNQ1JDT2s7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsUnNyMU1DUkNPazsKIAotICAgIFVMT05HTE9ORyAgIHVsbFJzcjU0TTsKLSAgICBVTE9OR0xPTkcgICB1bGxSc3I0OE07Ci0gICAgVUxPTkdMT05HICAgdWxsUnNyMzZNOwotICAgIFVMT05HTE9ORyAgIHVsbFJzcjI0TTsKLSAgICBVTE9OR0xPTkcgICB1bGxSc3IxOE07Ci0gICAgVUxPTkdMT05HICAgdWxsUnNyMTJNOwotICAgIFVMT05HTE9ORyAgIHVsbFJzcjlNOwotICAgIFVMT05HTE9ORyAgIHVsbFJzcjZNOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVsbFJzcjU0TTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICB1bGxSc3I0OE07CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsUnNyMzZNOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVsbFJzcjI0TTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICB1bGxSc3IxOE07CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsUnNyMTJNOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVsbFJzcjlNOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVsbFJzcjZNOwogCi0gICAgVUxPTkdMT05HICAgdWxsUnNyNTRNQ1JDT2s7Ci0gICAgVUxPTkdMT05HICAgdWxsUnNyNDhNQ1JDT2s7Ci0gICAgVUxPTkdMT05HICAgdWxsUnNyMzZNQ1JDT2s7Ci0gICAgVUxPTkdMT05HICAgdWxsUnNyMjRNQ1JDT2s7Ci0gICAgVUxPTkdMT05HICAgdWxsUnNyMThNQ1JDT2s7Ci0gICAgVUxPTkdMT05HICAgdWxsUnNyMTJNQ1JDT2s7Ci0gICAgVUxPTkdMT05HICAgdWxsUnNyOU1DUkNPazsKLSAgICBVTE9OR0xPTkcgICB1bGxSc3I2TUNSQ09rOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVsbFJzcjU0TUNSQ09rOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVsbFJzcjQ4TUNSQ09rOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVsbFJzcjM2TUNSQ09rOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVsbFJzcjI0TUNSQ09rOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVsbFJzcjE4TUNSQ09rOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVsbFJzcjEyTUNSQ09rOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVsbFJzcjlNQ1JDT2s7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsUnNyNk1DUkNPazsKIAogfSBTQ3VzdG9tQ291bnRlcnMsICpQU0N1c3RvbUNvdW50ZXJzOwogCkBAIC0xNzcsMjkgKzE3NywyOSBAQAogLy8gQ3VzdG9tIGNvdW50ZXIKIC8vCiB0eXBlZGVmIHN0cnVjdCB0YWdTSVNSQ291bnRlcnMgewotICAgIFVMT05HICAgTGVuZ3RoOworICAgIHVuc2lnbmVkIGxvbmcgTGVuZ3RoOwogCi0gICAgRFdPUkQgICBkd0lzclR4ME9LOwotICAgIERXT1JEICAgZHdJc3JBQzBUeE9LOwotICAgIERXT1JEICAgZHdJc3JCZWFjb25UeE9LOwotICAgIERXT1JEICAgZHdJc3JSeDBPSzsKLSAgICBEV09SRCAgIGR3SXNyVEJUVEludDsKLSAgICBEV09SRCAgIGR3SXNyU1RJTUVSSW50OwotICAgIERXT1JEICAgZHdJc3JXYXRjaERvZzsKLSAgICBEV09SRCAgIGR3SXNyVW5yZWNvdmVyYWJsZUVycm9yOwotICAgIERXT1JEICAgZHdJc3JTb2Z0SW50ZXJydXB0OwotICAgIERXT1JEICAgZHdJc3JNSUJOZWFyZnVsbDsKLSAgICBEV09SRCAgIGR3SXNyUnhOb0J1ZjsKKyAgICB1bnNpZ25lZCBsb25nIGR3SXNyVHgwT0s7CisgICAgdW5zaWduZWQgbG9uZyBkd0lzckFDMFR4T0s7CisgICAgdW5zaWduZWQgbG9uZyBkd0lzckJlYWNvblR4T0s7CisgICAgdW5zaWduZWQgbG9uZyBkd0lzclJ4ME9LOworICAgIHVuc2lnbmVkIGxvbmcgZHdJc3JUQlRUSW50OworICAgIHVuc2lnbmVkIGxvbmcgZHdJc3JTVElNRVJJbnQ7CisgICAgdW5zaWduZWQgbG9uZyBkd0lzcldhdGNoRG9nOworICAgIHVuc2lnbmVkIGxvbmcgZHdJc3JVbnJlY292ZXJhYmxlRXJyb3I7CisgICAgdW5zaWduZWQgbG9uZyBkd0lzclNvZnRJbnRlcnJ1cHQ7CisgICAgdW5zaWduZWQgbG9uZyBkd0lzck1JQk5lYXJmdWxsOworICAgIHVuc2lnbmVkIGxvbmcgZHdJc3JSeE5vQnVmOwogCi0gICAgRFdPUkQgICBkd0lzclVua25vd247ICAgICAgICAgICAgICAgLy8gdW5rbm93biBpbnRlcnJ1cHQgY291bnQKKyAgICB1bnNpZ25lZCBsb25nIGR3SXNyVW5rbm93bjsgICAgICAgICAgICAgICAvLyB1bmtub3duIGludGVycnVwdCBjb3VudAogCi0gICAgRFdPUkQgICBkd0lzclJ4MU9LOwotICAgIERXT1JEICAgZHdJc3JBVElNVHhPSzsKLSAgICBEV09SRCAgIGR3SXNyU1lOQ1R4T0s7Ci0gICAgRFdPUkQgICBkd0lzckNGUEVuZDsKLSAgICBEV09SRCAgIGR3SXNyQVRJTUVuZDsKLSAgICBEV09SRCAgIGR3SXNyU1lOQ0ZsdXNoT0s7Ci0gICAgRFdPUkQgICBkd0lzclNUSU1FUjFJbnQ7CisgICAgdW5zaWduZWQgbG9uZyBkd0lzclJ4MU9LOworICAgIHVuc2lnbmVkIGxvbmcgZHdJc3JBVElNVHhPSzsKKyAgICB1bnNpZ25lZCBsb25nIGR3SXNyU1lOQ1R4T0s7CisgICAgdW5zaWduZWQgbG9uZyBkd0lzckNGUEVuZDsKKyAgICB1bnNpZ25lZCBsb25nIGR3SXNyQVRJTUVuZDsKKyAgICB1bnNpZ25lZCBsb25nIGR3SXNyU1lOQ0ZsdXNoT0s7CisgICAgdW5zaWduZWQgbG9uZyBkd0lzclNUSU1FUjFJbnQ7CiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogfSBTSVNSQ291bnRlcnMsICpQU0lTUkNvdW50ZXJzOwogCkBAIC0yMjIsOTkgKzIyMiw5OSBAQAogCiAgICAgLy8gUlNSIHN0YXR1cyBjb3VudAogICAgIC8vCi0gICAgRFdPUkQgICBkd1JzckZybUFsZ25FcnI7Ci0gICAgRFdPUkQgICBkd1JzckVycjsKLSAgICBEV09SRCAgIGR3UnNyQ1JDRXJyOwotICAgIERXT1JEICAgZHdSc3JDUkNPazsKLSAgICBEV09SRCAgIGR3UnNyQlNTSURPazsKLSAgICBEV09SRCAgIGR3UnNyQUREUk9rOwotICAgIERXT1JEICAgZHdSc3JCQ05TU0lET2s7Ci0gICAgRFdPUkQgICBkd1JzckxFTkVycjsKLSAgICBEV09SRCAgIGR3UnNyVFlQRXJyOworICAgIHVuc2lnbmVkIGxvbmcgZHdSc3JGcm1BbGduRXJyOworICAgIHVuc2lnbmVkIGxvbmcgZHdSc3JFcnI7CisgICAgdW5zaWduZWQgbG9uZyBkd1JzckNSQ0VycjsKKyAgICB1bnNpZ25lZCBsb25nIGR3UnNyQ1JDT2s7CisgICAgdW5zaWduZWQgbG9uZyBkd1JzckJTU0lET2s7CisgICAgdW5zaWduZWQgbG9uZyBkd1JzckFERFJPazsKKyAgICB1bnNpZ25lZCBsb25nIGR3UnNyQkNOU1NJRE9rOworICAgIHVuc2lnbmVkIGxvbmcgZHdSc3JMRU5FcnI7CisgICAgdW5zaWduZWQgbG9uZyBkd1JzclRZUEVycjsKIAotICAgIERXT1JEICAgZHdOZXdSc3JERUNSWVBUT0s7Ci0gICAgRFdPUkQgICBkd05ld1JzckNGUDsKLSAgICBEV09SRCAgIGR3TmV3UnNyVVRTRjsKLSAgICBEV09SRCAgIGR3TmV3UnNySElUQUlEOwotICAgIERXT1JEICAgZHdOZXdSc3JISVRBSUQwOworICAgIHVuc2lnbmVkIGxvbmcgZHdOZXdSc3JERUNSWVBUT0s7CisgICAgdW5zaWduZWQgbG9uZyBkd05ld1JzckNGUDsKKyAgICB1bnNpZ25lZCBsb25nIGR3TmV3UnNyVVRTRjsKKyAgICB1bnNpZ25lZCBsb25nIGR3TmV3UnNySElUQUlEOworICAgIHVuc2lnbmVkIGxvbmcgZHdOZXdSc3JISVRBSUQwOwogCi0gICAgRFdPUkQgICBkd1Jzckxvbmc7Ci0gICAgRFdPUkQgICBkd1JzclJ1bnQ7CisgICAgdW5zaWduZWQgbG9uZyBkd1Jzckxvbmc7CisgICAgdW5zaWduZWQgbG9uZyBkd1JzclJ1bnQ7CiAKLSAgICBEV09SRCAgIGR3UnNyUnhDb250cm9sOwotICAgIERXT1JEICAgZHdSc3JSeERhdGE7Ci0gICAgRFdPUkQgICBkd1JzclJ4TWFuYWdlOworICAgIHVuc2lnbmVkIGxvbmcgZHdSc3JSeENvbnRyb2w7CisgICAgdW5zaWduZWQgbG9uZyBkd1JzclJ4RGF0YTsKKyAgICB1bnNpZ25lZCBsb25nIGR3UnNyUnhNYW5hZ2U7CiAKLSAgICBEV09SRCAgIGR3UnNyUnhQYWNrZXQ7Ci0gICAgRFdPUkQgICBkd1JzclJ4T2N0ZXQ7Ci0gICAgRFdPUkQgICBkd1JzckJyb2FkY2FzdDsKLSAgICBEV09SRCAgIGR3UnNyTXVsdGljYXN0OwotICAgIERXT1JEICAgZHdSc3JEaXJlY3RlZDsKKyAgICB1bnNpZ25lZCBsb25nIGR3UnNyUnhQYWNrZXQ7CisgICAgdW5zaWduZWQgbG9uZyBkd1JzclJ4T2N0ZXQ7CisgICAgdW5zaWduZWQgbG9uZyBkd1JzckJyb2FkY2FzdDsKKyAgICB1bnNpZ25lZCBsb25nIGR3UnNyTXVsdGljYXN0OworICAgIHVuc2lnbmVkIGxvbmcgZHdSc3JEaXJlY3RlZDsKICAgICAvLyA2NC1iaXQgT0lECi0gICAgVUxPTkdMT05HICAgdWxsUnNyT0s7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsUnNyT0s7CiAKICAgICAvLyBmb3Igc29tZSBvcHRpb25hbCBPSURzICg2NCBiaXRzKSBhbmQgRE1JIHN1cHBvcnQKLSAgICBVTE9OR0xPTkcgICB1bGxSeEJyb2FkY2FzdEJ5dGVzOwotICAgIFVMT05HTE9ORyAgIHVsbFJ4TXVsdGljYXN0Qnl0ZXM7Ci0gICAgVUxPTkdMT05HICAgdWxsUnhEaXJlY3RlZEJ5dGVzOwotICAgIFVMT05HTE9ORyAgIHVsbFJ4QnJvYWRjYXN0RnJhbWVzOwotICAgIFVMT05HTE9ORyAgIHVsbFJ4TXVsdGljYXN0RnJhbWVzOwotICAgIFVMT05HTE9ORyAgIHVsbFJ4RGlyZWN0ZWRGcmFtZXM7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsUnhCcm9hZGNhc3RCeXRlczsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICB1bGxSeE11bHRpY2FzdEJ5dGVzOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVsbFJ4RGlyZWN0ZWRCeXRlczsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICB1bGxSeEJyb2FkY2FzdEZyYW1lczsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICB1bGxSeE11bHRpY2FzdEZyYW1lczsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICB1bGxSeERpcmVjdGVkRnJhbWVzOwogCi0gICAgRFdPUkQgICBkd1JzclJ4RnJhZ21lbnQ7Ci0gICAgRFdPUkQgICBkd1JzclJ4RnJtTGVuNjQ7Ci0gICAgRFdPUkQgICBkd1JzclJ4RnJtTGVuNjVfMTI3OwotICAgIERXT1JEICAgZHdSc3JSeEZybUxlbjEyOF8yNTU7Ci0gICAgRFdPUkQgICBkd1JzclJ4RnJtTGVuMjU2XzUxMTsKLSAgICBEV09SRCAgIGR3UnNyUnhGcm1MZW41MTJfMTAyMzsKLSAgICBEV09SRCAgIGR3UnNyUnhGcm1MZW4xMDI0XzE1MTg7CisgICAgdW5zaWduZWQgbG9uZyBkd1JzclJ4RnJhZ21lbnQ7CisgICAgdW5zaWduZWQgbG9uZyBkd1JzclJ4RnJtTGVuNjQ7CisgICAgdW5zaWduZWQgbG9uZyBkd1JzclJ4RnJtTGVuNjVfMTI3OworICAgIHVuc2lnbmVkIGxvbmcgZHdSc3JSeEZybUxlbjEyOF8yNTU7CisgICAgdW5zaWduZWQgbG9uZyBkd1JzclJ4RnJtTGVuMjU2XzUxMTsKKyAgICB1bnNpZ25lZCBsb25nIGR3UnNyUnhGcm1MZW41MTJfMTAyMzsKKyAgICB1bnNpZ25lZCBsb25nIGR3UnNyUnhGcm1MZW4xMDI0XzE1MTg7CiAKICAgICAvLyBUU1Igc3RhdHVzIGNvdW50CiAgICAgLy8KLSAgICBEV09SRCAgIGR3VHNyVG90YWxSZXRyeVtUWVBFX01BWFREXTsgICAgICAgIC8vIHRvdGFsIGNvbGxpc2lvbiByZXRyeSBjb3VudAotICAgIERXT1JEICAgZHdUc3JPbmNlUmV0cnlbVFlQRV9NQVhURF07ICAgICAgICAgLy8gdGhpcyBwYWNrZXQgb25seSBvY2N1ciBvbmUgY29sbGlzaW9uCi0gICAgRFdPUkQgICBkd1Rzck1vcmVUaGFuT25jZVJldHJ5W1RZUEVfTUFYVERdOyAvLyB0aGlzIHBhY2tldCBvY2N1ciBtb3JlIHRoYW4gb25lIGNvbGxpc2lvbgotICAgIERXT1JEICAgZHdUc3JSZXRyeVtUWVBFX01BWFREXTsgICAgICAgICAgICAgLy8gdGhpcyBwYWNrZXQgaGFzIGV2ZXIgb2NjdXIgY29sbGlzaW9uLAorICAgIHVuc2lnbmVkIGxvbmcgZHdUc3JUb3RhbFJldHJ5W1RZUEVfTUFYVERdOyAgICAgICAgLy8gdG90YWwgY29sbGlzaW9uIHJldHJ5IGNvdW50CisgICAgdW5zaWduZWQgbG9uZyBkd1Rzck9uY2VSZXRyeVtUWVBFX01BWFREXTsgICAgICAgICAvLyB0aGlzIHBhY2tldCBvbmx5IG9jY3VyIG9uZSBjb2xsaXNpb24KKyAgICB1bnNpZ25lZCBsb25nIGR3VHNyTW9yZVRoYW5PbmNlUmV0cnlbVFlQRV9NQVhURF07IC8vIHRoaXMgcGFja2V0IG9jY3VyIG1vcmUgdGhhbiBvbmUgY29sbGlzaW9uCisgICAgdW5zaWduZWQgbG9uZyBkd1RzclJldHJ5W1RZUEVfTUFYVERdOyAgICAgICAgICAgICAvLyB0aGlzIHBhY2tldCBoYXMgZXZlciBvY2N1ciBjb2xsaXNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgaXMgKGR3VHNyT25jZUNvbGxpc2lvbjAgKyBkd1Rzck1vcmVUaGFuT25jZUNvbGxpc2lvbjApCi0gICAgRFdPUkQgICBkd1RzckFDS0RhdGFbVFlQRV9NQVhURF07Ci0gICAgRFdPUkQgICBkd1RzckVycltUWVBFX01BWFREXTsKLSAgICBEV09SRCAgIGR3QWxsVHNyT0tbVFlQRV9NQVhURF07Ci0gICAgRFdPUkQgICBkd1RzclJldHJ5VGltZW91dFtUWVBFX01BWFREXTsKLSAgICBEV09SRCAgIGR3VHNyVHJhbnNtaXRUaW1lb3V0W1RZUEVfTUFYVERdOworICAgIHVuc2lnbmVkIGxvbmcgZHdUc3JBQ0tEYXRhW1RZUEVfTUFYVERdOworICAgIHVuc2lnbmVkIGxvbmcgZHdUc3JFcnJbVFlQRV9NQVhURF07CisgICAgdW5zaWduZWQgbG9uZyBkd0FsbFRzck9LW1RZUEVfTUFYVERdOworICAgIHVuc2lnbmVkIGxvbmcgZHdUc3JSZXRyeVRpbWVvdXRbVFlQRV9NQVhURF07CisgICAgdW5zaWduZWQgbG9uZyBkd1RzclRyYW5zbWl0VGltZW91dFtUWVBFX01BWFREXTsKIAotICAgIERXT1JEICAgZHdUc3JUeFBhY2tldFtUWVBFX01BWFREXTsKLSAgICBEV09SRCAgIGR3VHNyVHhPY3RldFtUWVBFX01BWFREXTsKLSAgICBEV09SRCAgIGR3VHNyQnJvYWRjYXN0W1RZUEVfTUFYVERdOwotICAgIERXT1JEICAgZHdUc3JNdWx0aWNhc3RbVFlQRV9NQVhURF07Ci0gICAgRFdPUkQgICBkd1RzckRpcmVjdGVkW1RZUEVfTUFYVERdOworICAgIHVuc2lnbmVkIGxvbmcgZHdUc3JUeFBhY2tldFtUWVBFX01BWFREXTsKKyAgICB1bnNpZ25lZCBsb25nIGR3VHNyVHhPY3RldFtUWVBFX01BWFREXTsKKyAgICB1bnNpZ25lZCBsb25nIGR3VHNyQnJvYWRjYXN0W1RZUEVfTUFYVERdOworICAgIHVuc2lnbmVkIGxvbmcgZHdUc3JNdWx0aWNhc3RbVFlQRV9NQVhURF07CisgICAgdW5zaWduZWQgbG9uZyBkd1RzckRpcmVjdGVkW1RZUEVfTUFYVERdOwogCiAgICAgLy8gUkQvVEQgY291bnQKLSAgICBEV09SRCAgIGR3Q250UnhGcm1MZW5ndGg7Ci0gICAgRFdPUkQgICBkd0NudFR4QnVmTGVuZ3RoOworICAgIHVuc2lnbmVkIGxvbmcgZHdDbnRSeEZybUxlbmd0aDsKKyAgICB1bnNpZ25lZCBsb25nIGR3Q250VHhCdWZMZW5ndGg7CiAKLSAgICBCWVRFICAgIGFieUNudFJ4UGF0dGVyblsxNl07Ci0gICAgQllURSAgICBhYnlDbnRUeFBhdHRlcm5bMTZdOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5Q250UnhQYXR0ZXJuWzE2XTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUNudFR4UGF0dGVyblsxNl07CiAKIAogCiAgICAgLy8gU29mdHdhcmUgY2hlY2suLi4uCi0gICAgRFdPUkQgICBkd0NudFJ4RGF0YUVycjsgICAgICAgICAgICAgLy8gcnggYnVmZmVyIGRhdGEgc29mdHdhcmUgY29tcGFyZSBDUkMgZXJyIGNvdW50Ci0gICAgRFdPUkQgICBkd0NudERlY3J5cHRFcnI7ICAgICAgICAgICAgLy8gcnggYnVmZmVyIGRhdGEgc29mdHdhcmUgY29tcGFyZSBDUkMgZXJyIGNvdW50Ci0gICAgRFdPUkQgICBkd0NudFJ4SUNWRXJyOyAgICAgICAgICAgICAgLy8gcnggYnVmZmVyIGRhdGEgc29mdHdhcmUgY29tcGFyZSBDUkMgZXJyIGNvdW50Ci0gICAgVUlOVCAgICBpZHhSeEVycm9yRGVzY1tUWVBFX01BWFJEXTsgLy8gaW5kZXggZm9yIHJ4IGRhdGEgZXJyb3IgUkQKKyAgICB1bnNpZ25lZCBsb25nIGR3Q250UnhEYXRhRXJyOyAgICAgICAgICAgICAvLyByeCBidWZmZXIgZGF0YSBzb2Z0d2FyZSBjb21wYXJlIENSQyBlcnIgY291bnQKKyAgICB1bnNpZ25lZCBsb25nIGR3Q250RGVjcnlwdEVycjsgICAgICAgICAgICAvLyByeCBidWZmZXIgZGF0YSBzb2Z0d2FyZSBjb21wYXJlIENSQyBlcnIgY291bnQKKyAgICB1bnNpZ25lZCBsb25nIGR3Q250UnhJQ1ZFcnI7ICAgICAgICAgICAgICAvLyByeCBidWZmZXIgZGF0YSBzb2Z0d2FyZSBjb21wYXJlIENSQyBlcnIgY291bnQKKyAgICB1bnNpZ25lZCBpbnQgaWR4UnhFcnJvckRlc2NbVFlQRV9NQVhSRF07IC8vIGluZGV4IGZvciByeCBkYXRhIGVycm9yIFJECiAKICAgICAvLyA2NC1iaXQgT0lECi0gICAgVUxPTkdMT05HICAgdWxsVHNyT0tbVFlQRV9NQVhURF07CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsVHNyT0tbVFlQRV9NQVhURF07CiAKICAgICAvLyBmb3Igc29tZSBvcHRpb25hbCBPSURzICg2NCBiaXRzKSBhbmQgRE1JIHN1cHBvcnQKLSAgICBVTE9OR0xPTkcgICB1bGxUeEJyb2FkY2FzdEZyYW1lc1tUWVBFX01BWFREXTsKLSAgICBVTE9OR0xPTkcgICB1bGxUeE11bHRpY2FzdEZyYW1lc1tUWVBFX01BWFREXTsKLSAgICBVTE9OR0xPTkcgICB1bGxUeERpcmVjdGVkRnJhbWVzW1RZUEVfTUFYVERdOwotICAgIFVMT05HTE9ORyAgIHVsbFR4QnJvYWRjYXN0Qnl0ZXNbVFlQRV9NQVhURF07Ci0gICAgVUxPTkdMT05HICAgdWxsVHhNdWx0aWNhc3RCeXRlc1tUWVBFX01BWFREXTsKLSAgICBVTE9OR0xPTkcgICB1bGxUeERpcmVjdGVkQnl0ZXNbVFlQRV9NQVhURF07CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsVHhCcm9hZGNhc3RGcmFtZXNbVFlQRV9NQVhURF07CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsVHhNdWx0aWNhc3RGcmFtZXNbVFlQRV9NQVhURF07CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsVHhEaXJlY3RlZEZyYW1lc1tUWVBFX01BWFREXTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICB1bGxUeEJyb2FkY2FzdEJ5dGVzW1RZUEVfTUFYVERdOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVsbFR4TXVsdGljYXN0Qnl0ZXNbVFlQRV9NQVhURF07CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsVHhEaXJlY3RlZEJ5dGVzW1RZUEVfTUFYVERdOwogCi0vLyAgICBEV09SRCAgIGR3VHhSZXRyeUNvdW50WzhdOworLy8gICAgdW5zaWduZWQgbG9uZyBkd1R4UmV0cnlDb3VudFs4XTsKICAgICAvLwogICAgIC8vIElTUiBzdGF0dXMgY291bnQKICAgICAvLwpAQCAtMzI0LDE1ICszMjQsMTUgQEAKIAogICAgI2lmZGVmIENhbGN1X0xpbmtRdWFsCiAgICAgICAgLy9UeCBjb3VudDoKLSAgICBVTE9ORyBUeE5vUmV0cnlPa0NvdW50OyAgICAgICAgIC8vc3VjY2VzcyB0eCBubyByZXRyeSAhCi0gICAgVUxPTkcgVHhSZXRyeU9rQ291bnQ7ICAgICAgICAgICAgICAvL3N1Y2Nlc3MgdHggYnV0IHJldHJ5ICEKLSAgICBVTE9ORyBUeEZhaWxDb3VudDsgICAgICAgICAgICAgICAgICAgICAgLy9mYWlsIHR4ID8KKyAgICB1bnNpZ25lZCBsb25nIFR4Tm9SZXRyeU9rQ291bnQ7ICAgICAgICAgLy9zdWNjZXNzIHR4IG5vIHJldHJ5ICEKKyAgICB1bnNpZ25lZCBsb25nIFR4UmV0cnlPa0NvdW50OyAgICAgICAgICAgICAgLy9zdWNjZXNzIHR4IGJ1dCByZXRyeSAhCisgICAgdW5zaWduZWQgbG9uZyBUeEZhaWxDb3VudDsgICAgICAgICAgICAgICAgICAgICAgLy9mYWlsIHR4ID8KICAgICAgIC8vUnggY291bnQ6Ci0gICAgVUxPTkcgUnhPa0NudDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vc3VjY2VzcyByeCAhCi0gICAgVUxPTkcgUnhGY3NFcnJDbnQ7ICAgICAgICAgICAgICAgICAgICAvL2ZhaWwgcnggPworICAgIHVuc2lnbmVkIGxvbmcgUnhPa0NudDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vc3VjY2VzcyByeCAhCisgICAgdW5zaWduZWQgbG9uZyBSeEZjc0VyckNudDsgICAgICAgICAgICAgICAgICAgIC8vZmFpbCByeCA/CiAgICAgICAvL3N0YXRpc3RpYwotICAgIFVMT05HIFNpZ25hbFN0cmVuOwotICAgIFVMT05HIExpbmtRdWFsaXR5OworICAgIHVuc2lnbmVkIGxvbmcgU2lnbmFsU3RyZW47CisgICAgdW5zaWduZWQgbG9uZyBMaW5rUXVhbGl0eTsKICAgICNlbmRpZgogfSBTU3RhdENvdW50ZXIsICpQU1N0YXRDb3VudGVyOwogCkBAIC0zNDQsMzAgKzM0NCwyOSBAQAogCiB2b2lkIFNUQXZDbGVhckFsbENvdW50ZXIoUFNTdGF0Q291bnRlciBwU3RhdGlzdGljKTsKIAotdm9pZCBTVEF2VXBkYXRlSXNyU3RhdENvdW50ZXIoUFNTdGF0Q291bnRlciBwU3RhdGlzdGljLCBEV09SRCBkd0lzcik7Cit2b2lkIFNUQXZVcGRhdGVJc3JTdGF0Q291bnRlcihQU1N0YXRDb3VudGVyIHBTdGF0aXN0aWMsIHVuc2lnbmVkIGxvbmcgZHdJc3IpOwogCiB2b2lkIFNUQXZVcGRhdGVSRFN0YXRDb3VudGVyKFBTU3RhdENvdW50ZXIgcFN0YXRpc3RpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEUgYnlSU1IsIEJZVEUgYnlOZXdSU1IsIEJZVEUgYnlSeFJhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURSBwYnlCdWZmZXIsIFVJTlQgY2JGcmFtZUxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJ5UlNSLCB1bnNpZ25lZCBjaGFyIGJ5TmV3UlNSLCB1bnNpZ25lZCBjaGFyIGJ5UnhSYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcGJ5QnVmZmVyLCB1bnNpZ25lZCBpbnQgY2JGcmFtZUxlbmd0aCk7CiAKIHZvaWQgU1RBdlVwZGF0ZVJEU3RhdENvdW50ZXJFeChQU1N0YXRDb3VudGVyIHBTdGF0aXN0aWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFIGJ5UlNSLCBCWVRFIGJ5TmV3UnNyLCBCWVRFIGJ5UnhSYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEUgcGJ5QnVmZmVyLCBVSU5UIGNiRnJhbWVMZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBieVJTUiwgdW5zaWduZWQgY2hhciBieU5ld1JzciwgdW5zaWduZWQgY2hhciBieVJ4UmF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnBieUJ1ZmZlciwgdW5zaWduZWQgaW50IGNiRnJhbWVMZW5ndGgpOwogCi12b2lkIFNUQXZVcGRhdGVURFN0YXRDb3VudGVyKFBTU3RhdENvdW50ZXIgcFN0YXRpc3RpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURSBieVRTUjAsIEJZVEUgYnlUU1IxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURSBwYnlCdWZmZXIsIFVJTlQgY2JGcmFtZUxlbmd0aCwgVUlOVCB1SWR4ICk7Cit2b2lkIFNUQXZVcGRhdGVURFN0YXRDb3VudGVyKFBTU3RhdENvdW50ZXIgcFN0YXRpc3RpYywgdW5zaWduZWQgY2hhciBieVRTUjAsIHVuc2lnbmVkIGNoYXIgYnlUU1IxLAorCQl1bnNpZ25lZCBjaGFyICpwYnlCdWZmZXIsIHVuc2lnbmVkIGludCBjYkZyYW1lTGVuZ3RoLCB1bnNpZ25lZCBpbnQgdUlkeCk7CiAKIHZvaWQgU1RBdlVwZGF0ZVREU3RhdENvdW50ZXJFeCgKICAgICBQU1N0YXRDb3VudGVyICAgcFN0YXRpc3RpYywKLSAgICBQQllURSAgICAgICAgICAgcGJ5QnVmZmVyLAotICAgIERXT1JEICAgICAgICAgICBjYkZyYW1lTGVuZ3RoCisgICAgdW5zaWduZWQgY2hhciAqcGJ5QnVmZmVyLAorICAgIHVuc2lnbmVkIGxvbmcgY2JGcmFtZUxlbmd0aAogICAgICk7CiAKIHZvaWQgU1RBdlVwZGF0ZTgwMl8xMUNvdW50ZXIoCiAgICAgUFNEb3QxMUNvdW50ZXJzIHA4MDJfMTFDb3VudGVyLAogICAgIFBTU3RhdENvdW50ZXIgICBwU3RhdGlzdGljLAotICAgIERXT1JEICAgICAgICAgICBkd0NvdW50ZXIKKyAgICB1bnNpZ25lZCBsb25nIGR3Q291bnRlcgogICAgICk7CiAKIHZvaWQgU1RBdkNsZWFyODAyXzExQ291bnRlcihQU0RvdDExQ291bnRlcnMgcDgwMl8xMUNvdW50ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9taWNoYWVsLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L21pY2hhZWwuYwppbmRleCAwYmY1N2VmLi42NzYxOGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L21pY2hhZWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L21pY2hhZWwuYwpAQCAtMjYsOCArMjYsOCBAQAogICogRGF0ZTogU2VwIDQsIDIwMDIKICAqCiAgKiBGdW5jdGlvbnM6Ci0gKiAgICAgIHNfZHdHZXRVSU5UMzIgLSBDb252ZXJ0IGZyb20gQllURVtdIHRvIERXT1JEIGluIGEgcG9ydGFibGUgd2F5Ci0gKiAgICAgIHNfdlB1dFVJTlQzMiAtIENvbnZlcnQgZnJvbSBEV09SRCB0byBCWVRFW10gaW4gYSBwb3J0YWJsZSB3YXkKKyAqICAgICAgc19kd0dldFVJTlQzMiAtIENvbnZlcnQgZnJvbSB1bnNpZ25lZCBjaGFyIFtdIHRvIHVuc2lnbmVkIGxvbmcgaW4gYSBwb3J0YWJsZSB3YXkKKyAqICAgICAgc192UHV0VUlOVDMyIC0gQ29udmVydCBmcm9tIHVuc2lnbmVkIGxvbmcgdG8gdW5zaWduZWQgY2hhciBbXSBpbiBhIHBvcnRhYmxlIHdheQogICogICAgICBzX3ZDbGVhciAtIFJlc2V0IHRoZSBzdGF0ZSB0byB0aGUgZW1wdHkgbWVzc2FnZS4KICAqICAgICAgc192U2V0S2V5IC0gU2V0IHRoZSBrZXkuCiAgKiAgICAgIE1JQ192SW5pdCAtIFNldCB0aGUga2V5LgpAQCAtNDgsMjkgKzQ4LDI5IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKgotc3RhdGljIERXT1JEIHNfZHdHZXRVSU5UMzIoQllURSAqIHApOyAgICAgICAgIC8vIEdldCBEV09SRCBmcm9tIDQgYnl0ZXMgTFNCeXRlIGZpcnN0Ci1zdGF0aWMgdm9pZCBzX3ZQdXRVSU5UMzIoQllURSogcCwgRFdPUkQgdmFsKTsgLy8gUHV0IERXT1JEIGludG8gNCBieXRlcyBMU0J5dGUgZmlyc3QKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNfZHdHZXRVSU5UMzIodW5zaWduZWQgY2hhciAqcCk7ICAgICAgICAgLy8gR2V0IHVuc2lnbmVkIGxvbmcgZnJvbSA0IGJ5dGVzIExTQnl0ZSBmaXJzdAorc3RhdGljIHZvaWQgc192UHV0VUlOVDMyKHVuc2lnbmVkIGNoYXIgKnAsIHVuc2lnbmVkIGxvbmcgdmFsKTsgLy8gUHV0IHVuc2lnbmVkIGxvbmcgaW50byA0IGJ5dGVzIExTQnl0ZSBmaXJzdAogKi8KIHN0YXRpYyB2b2lkIHNfdkNsZWFyKHZvaWQpOyAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIGludGVybmFsIG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzZXRzIHRoZSBvYmplY3QgdG8gdGhlIHN0YXRlIGp1c3QgYWZ0ZXIgY29uc3RydWN0aW9uLgotc3RhdGljIHZvaWQgc192U2V0S2V5KERXT1JEIGR3SzAsIERXT1JEIGR3SzEpOwotc3RhdGljIHZvaWQgc192QXBwZW5kQnl0ZShCWVRFIGIpOyAgICAgICAgICAgIC8vIEFkZCBhIHNpbmdsZSBieXRlIHRvIHRoZSBpbnRlcm5hbCBtZXNzYWdlCitzdGF0aWMgdm9pZCBzX3ZTZXRLZXkodW5zaWduZWQgbG9uZyBkd0swLCB1bnNpZ25lZCBsb25nIGR3SzEpOworc3RhdGljIHZvaWQgc192QXBwZW5kQnl0ZSh1bnNpZ25lZCBjaGFyIGIpOyAgICAgICAgICAgIC8vIEFkZCBhIHNpbmdsZSBieXRlIHRvIHRoZSBpbnRlcm5hbCBtZXNzYWdlCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgVmFyaWFibGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgRFdPUkQgIEwsIFI7ICAgICAgICAgICAvLyBDdXJyZW50IHN0YXRlCitzdGF0aWMgdW5zaWduZWQgbG9uZyBMLCBSOyAgICAgICAgICAgLy8gQ3VycmVudCBzdGF0ZQogCi1zdGF0aWMgRFdPUkQgIEswLCBLMTsgICAgICAgICAvLyBLZXkKLXN0YXRpYyBEV09SRCAgTTsgICAgICAgICAgICAgIC8vIE1lc3NhZ2UgYWNjdW11bGF0b3IgKHNpbmdsZSB3b3JkKQotc3RhdGljIFVJTlQgICBuQnl0ZXNJbk07ICAgICAgLy8gIyBieXRlcyBpbiBNCitzdGF0aWMgdW5zaWduZWQgbG9uZyBLMCwgSzE7ICAgICAgICAgLy8gS2V5CitzdGF0aWMgdW5zaWduZWQgbG9uZyBNOyAgICAgICAgICAgICAgLy8gTWVzc2FnZSBhY2N1bXVsYXRvciAoc2luZ2xlIHdvcmQpCitzdGF0aWMgdW5zaWduZWQgaW50IG5CeXRlc0luTTsgICAgICAvLyAjIGJ5dGVzIGluIE0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoKLXN0YXRpYyBEV09SRCBzX2R3R2V0VUlOVDMyIChCWVRFICogcCkKLS8vIENvbnZlcnQgZnJvbSBCWVRFW10gdG8gRFdPUkQgaW4gYSBwb3J0YWJsZSB3YXkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNfZHdHZXRVSU5UMzIgKHVuc2lnbmVkIGNoYXIgKnApCisvLyBDb252ZXJ0IGZyb20gdW5zaWduZWQgY2hhciBbXSB0byB1bnNpZ25lZCBsb25nIGluIGEgcG9ydGFibGUgd2F5CiB7Ci0gICAgRFdPUkQgcmVzID0gMDsKLSAgICBVSU5UIGk7CisgICAgdW5zaWduZWQgbG9uZyByZXMgPSAwOworICAgIHVuc2lnbmVkIGludCBpOwogICAgIGZvcihpPTA7IGk8NDsgaSsrICkKICAgICB7CiAgICAgICAgIHJlcyB8PSAoKnArKykgPDwgKDgqaSk7CkBAIC03OCwxMyArNzgsMTMgQEAKICAgICByZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgdm9pZCBzX3ZQdXRVSU5UMzIgKEJZVEUqIHAsIERXT1JEIHZhbCkKLS8vIENvbnZlcnQgZnJvbSBEV09SRCB0byBCWVRFW10gaW4gYSBwb3J0YWJsZSB3YXkKK3N0YXRpYyB2b2lkIHNfdlB1dFVJTlQzMiAodW5zaWduZWQgY2hhciAqcCwgdW5zaWduZWQgbG9uZyB2YWwpCisvLyBDb252ZXJ0IGZyb20gdW5zaWduZWQgbG9uZyB0byB1bnNpZ25lZCBjaGFyIFtdIGluIGEgcG9ydGFibGUgd2F5CiB7Ci0gICAgVUlOVCBpOworICAgIHVuc2lnbmVkIGludCBpOwogICAgIGZvcihpPTA7IGk8NDsgaSsrICkKICAgICB7Ci0gICAgICAgICpwKysgPSAoQllURSkgKHZhbCAmIDB4ZmYpOworICAgICAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpICh2YWwgJiAweGZmKTsKICAgICAgICAgdmFsID4+PSA4OwogICAgIH0KIH0KQEAgLTk5LDcgKzk5LDcgQEAKICAgICBNID0gMDsKIH0KIAotc3RhdGljIHZvaWQgc192U2V0S2V5IChEV09SRCBkd0swLCBEV09SRCBkd0sxKQorc3RhdGljIHZvaWQgc192U2V0S2V5ICh1bnNpZ25lZCBsb25nIGR3SzAsIHVuc2lnbmVkIGxvbmcgZHdLMSkKIHsKICAgICAvLyBTZXQgdGhlIGtleQogICAgIEswID0gZHdLMDsKQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgIHNfdkNsZWFyKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNfdkFwcGVuZEJ5dGUgKEJZVEUgYikKK3N0YXRpYyB2b2lkIHNfdkFwcGVuZEJ5dGUgKHVuc2lnbmVkIGNoYXIgYikKIHsKICAgICAvLyBBcHBlbmQgdGhlIGJ5dGUgdG8gb3VyIHdvcmQtc2l6ZWQgYnVmZmVyCiAgICAgTSB8PSBiIDw8ICg4Km5CeXRlc0luTSk7CkBAIC0xMzEsNyArMTMxLDcgQEAKICAgICB9CiB9CiAKLXZvaWQgTUlDX3ZJbml0IChEV09SRCBkd0swLCBEV09SRCBkd0sxKQordm9pZCBNSUNfdkluaXQgKHVuc2lnbmVkIGxvbmcgZHdLMCwgdW5zaWduZWQgbG9uZyBkd0sxKQogewogICAgIC8vIFNldCB0aGUga2V5CiAgICAgc192U2V0S2V5KGR3SzAsIGR3SzEpOwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAgICAgc192Q2xlYXIoKTsKIH0KIAotdm9pZCBNSUNfdkFwcGVuZCAoUEJZVEUgc3JjLCBVSU5UIG5CeXRlcykKK3ZvaWQgTUlDX3ZBcHBlbmQgKHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgaW50IG5CeXRlcykKIHsKICAgICAvLyBUaGlzIGlzIHNpbXBsZQogICAgIHdoaWxlIChuQnl0ZXMgPiAwKQpAQCAtMTU5LDcgKzE1OSw3IEBACiAgICAgfQogfQogCi12b2lkIE1JQ192R2V0TUlDIChQRFdPUkQgcGR3TCwgUERXT1JEIHBkd1IpCit2b2lkIE1JQ192R2V0TUlDICh1bnNpZ25lZCBsb25nICpwZHdMLCB1bnNpZ25lZCBsb25nICpwZHdSKQogewogICAgIC8vIEFwcGVuZCB0aGUgbWluaW11bSBwYWRkaW5nCiAgICAgc192QXBwZW5kQnl0ZSgweDVhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvbWljaGFlbC5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9taWNoYWVsLmgKaW5kZXggOTdkZTc3Yi4uMzEzMWIxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9taWNoYWVsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9taWNoYWVsLmgKQEAgLTM1LDE2ICszNSwxNiBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IFR5cGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi12b2lkIE1JQ192SW5pdChEV09SRCBkd0swLCBEV09SRCBkd0sxKTsKK3ZvaWQgTUlDX3ZJbml0KHVuc2lnbmVkIGxvbmcgZHdLMCwgdW5zaWduZWQgbG9uZyBkd0sxKTsKIAogdm9pZCBNSUNfdlVuSW5pdCh2b2lkKTsKIAogLy8gQXBwZW5kIGJ5dGVzIHRvIHRoZSBtZXNzYWdlIHRvIGJlIE1JQ2VkCi12b2lkIE1JQ192QXBwZW5kKFBCWVRFIHNyYywgVUlOVCBuQnl0ZXMpOwordm9pZCBNSUNfdkFwcGVuZCh1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGludCBuQnl0ZXMpOwogCiAvLyBHZXQgdGhlIE1JQyByZXN1bHQuIERlc3RpbmF0aW9uIHNob3VsZCBhY2NlcHQgOCBieXRlcyBvZiByZXN1bHQuCiAvLyBUaGlzIGFsc28gcmVzZXRzIHRoZSBtZXNzYWdlIHRvIGVtcHR5Lgotdm9pZCBNSUNfdkdldE1JQyhQRFdPUkQgcGR3TCwgUERXT1JEIHBkd1IpOwordm9pZCBNSUNfdkdldE1JQyh1bnNpZ25lZCBsb25nICpwZHdMLCB1bnNpZ25lZCBsb25nICpwZHdSKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9wb3dlci5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9wb3dlci5jCmluZGV4IDY0YzIyYzMuLjcyMDdhY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcG93ZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3Bvd2VyLmMKQEAgLTc3LDEyICs3NywxMiBAQAogdm9pZAogUFN2RW5hYmxlUG93ZXJTYXZpbmcoCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQsCi0gICAgV09SRCB3TGlzdGVuSW50ZXJ2YWwKKyAgICB1bnNpZ25lZCBzaG9ydCB3TGlzdGVuSW50ZXJ2YWwKICAgICApCiB7CiAgICAgUFNEZXZpY2UgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpaERldmljZUNvbnRleHQ7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7Ci0gICAgV09SRCAgICAgICAgICAgIHdBSUQgPSBwTWdtdC0+d0N1cnJBSUQgfCBCSVQxNCB8IEJJVDE1OworICAgIHVuc2lnbmVkIHNob3J0IHdBSUQgPSBwTWdtdC0+d0N1cnJBSUQgfCBCSVQxNCB8IEJJVDE1OwogCiAgICAgLy8gc2V0IHBlcmlvZCBvZiBwb3dlciB1cCBiZWZvcmUgVEJUVAogICAgIFZOU3ZPdXRQb3J0VyhwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19QV0JULCBDX1BXQlQpOwpAQCAtMTE1LDcgKzExNSw3IEBACiAKICAgICAvLyBlbmFibGUgcG93ZXIgc2F2aW5nIGh3IGZ1bmN0aW9uCiAgICAgTUFDdlJlZ0JpdHNPbihwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBNQUNfUkVHX1BTQ1RMLCBQU0NUTF9QU0VOKTsKLSAgICBwRGV2aWNlLT5iRW5hYmxlUFNNb2RlID0gVFJVRTsKKyAgICBwRGV2aWNlLT5iRW5hYmxlUFNNb2RlID0gdHJ1ZTsKIAogICAgIGlmIChwRGV2aWNlLT5lT1BNb2RlID09IE9QX01PREVfQURIT0MpIHsKIC8vICAgICAgICBiTWdyUHJlcGFyZUJlYWNvblRvU2VuZCgodm9pZCAqKXBEZXZpY2UsIHBNZ210KTsKQEAgLTEyNCw3ICsxMjQsNyBAQAogICAgIGVsc2UgaWYgKHBEZXZpY2UtPmVPUE1vZGUgPT0gT1BfTU9ERV9JTkZSQVNUUlVDVFVSRSkgewogICAgICAgICBQU2JTZW5kTnVsbFBhY2tldChwRGV2aWNlKTsKICAgICB9Ci0gICAgcERldmljZS0+YlBXQml0T24gPSBUUlVFOworICAgIHBEZXZpY2UtPmJQV0JpdE9uID0gdHJ1ZTsKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJQUzpQb3dlciBTYXZpbmcgTW9kZSBFbmFibGUuLi4gXG4iKTsKICAgICByZXR1cm47CiB9CkBAIC0xNjEsMTIgKzE2MSwxMiBAQAogICAgIC8vIHNldCBhbHdheXMgbGlzdGVuIGJlYWNvbgogICAgIE1BQ3ZSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19QU0NUTCwgUFNDVExfQUxCQ04pOwogCi0gICAgcERldmljZS0+YkVuYWJsZVBTTW9kZSA9IEZBTFNFOworICAgIHBEZXZpY2UtPmJFbmFibGVQU01vZGUgPSBmYWxzZTsKIAogICAgIGlmIChwRGV2aWNlLT5lT1BNb2RlID09IE9QX01PREVfSU5GUkFTVFJVQ1RVUkUpIHsKICAgICAgICAgUFNiU2VuZE51bGxQYWNrZXQocERldmljZSk7CiAgICAgfQotICAgIHBEZXZpY2UtPmJQV0JpdE9uID0gRkFMU0U7CisgICAgcERldmljZS0+YlBXQml0T24gPSBmYWxzZTsKICAgICByZXR1cm47CiB9CiAKQEAgLTE3NywzNSArMTc3LDM1IEBACiAgKiBDb25zaWRlciB0byBwb3dlciBkb3duIHdoZW4gbm8gbW9yZSBwYWNrZXRzIHRvIHR4IG9yIHJ4LgogICoKICAqIFJldHVybiBWYWx1ZToKLSAqICAgIFRSVUUsIGlmIHBvd2VyIGRvd24gc3VjY2VzcwotICogICAgRkFMU0UsIGlmIGZhaWwKKyAqICAgIHRydWUsIGlmIHBvd2VyIGRvd24gc3VjY2VzcworICogICAgZmFsc2UsIGlmIGZhaWwKIC0qLwogCiAKLUJPT0wKK2Jvb2wKIFBTYkNvbnNpZGVyUG93ZXJEb3duKAogICAgIHZvaWQgKmhEZXZpY2VDb250ZXh0LAotICAgIEJPT0wgYkNoZWNrUnhETUEsCi0gICAgQk9PTCBiQ2hlY2tDb3VudFRvV2FrZVVwCisgICAgYm9vbCBiQ2hlY2tSeERNQSwKKyAgICBib29sIGJDaGVja0NvdW50VG9XYWtlVXAKICAgICApCiB7CiAgICAgUFNEZXZpY2UgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpaERldmljZUNvbnRleHQ7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7Ci0gICAgVUlOVCAgICAgICAgICAgIHVJZHg7CisgICAgdW5zaWduZWQgaW50IHVJZHg7CiAKICAgICAvLyBjaGVjayBpZiBhbHJlYWR5IGluIERvemUgbW9kZQogICAgIGlmIChNQUNiSXNSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19QU0NUTCwgUFNDVExfUFMpKQotICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAocE1nbXQtPmVDdXJyTW9kZSAhPSBXTUFDX01PREVfSUJTU19TVEEpIHsKICAgICAgICAgLy8gY2hlY2sgaWYgaW4gVElNIHdha2UgcGVyaW9kCiAgICAgICAgIGlmIChwTWdtdC0+YkluVElNV2FrZSkKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICAvLyBjaGVjayBzY2FuIHN0YXRlCiAgICAgaWYgKHBEZXZpY2UtPmJDbWRSdW5uaW5nKQotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEZyb2NlIFBTRU4gb24KICAgICBNQUN2UmVnQml0c09uKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfUFNDVEwsIFBTQ1RMX1BTRU4pOwpAQCAtMjEzLDI3ICsyMTMsMjcgQEAKICAgICAvLyBjaGVjayBpZiBhbGwgVEQgYXJlIGVtcHR5LAogICAgIGZvciAodUlkeCA9IDA7IHVJZHggPCBUWVBFX01BWFREOyB1SWR4ICsrKSB7CiAgICAgICAgIGlmIChwRGV2aWNlLT5pVERVc2VkW3VJZHhdICE9IDApCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gY2hlY2sgaWYgcnggaXNyIGlzIGNsZWFyCiAgICAgaWYgKGJDaGVja1J4RE1BICYmCiAgICAgICAgICgocERldmljZS0+ZHdJc3ImIElTUl9SWERNQTApICE9IDApICYmCiAgICAgICAgICgocERldmljZS0+ZHdJc3IgJiBJU1JfUlhETUExKSAhPSAwKSl7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH07CiAKICAgICBpZiAocE1nbXQtPmVDdXJyTW9kZSAhPSBXTUFDX01PREVfSUJTU19TVEEpIHsKICAgICAgICAgaWYgKGJDaGVja0NvdW50VG9XYWtlVXAgJiYKICAgICAgICAgICAgKHBNZ210LT53Q291bnRUb1dha2VVcCA9PSAwIHx8IHBNZ210LT53Q291bnRUb1dha2VVcCA9PSAxKSkgewotICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBubyBUeCwgbm8gUnggaXNyLCBub3cgZ28gdG8gRG96ZQogICAgIE1BQ3ZSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19QU0NUTCwgUFNDVExfR08yRE9aRSk7CiAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiR28gdG8gRG96ZSBaWlpaWlpaWlpaWlpaWlpcbiIpOwotICAgIHJldHVybiBUUlVFOworICAgIHJldHVybiB0cnVlOwogfQogCiAKQEAgLTI2Miw3ICsyNjIsNyBAQAogCiAgICAgbWVtc2V0KHBNZ210LT5wYnlQU1BhY2tldFBvb2wsIDAsIHNpemVvZihTVHhNZ210UGFja2V0KSArIFdMQU5fSERSX0FERFIyX0xFTik7CiAgICAgcFR4UGFja2V0ID0gKFBTVHhNZ210UGFja2V0KXBNZ210LT5wYnlQU1BhY2tldFBvb2w7Ci0gICAgcFR4UGFja2V0LT5wODAyMTFIZWFkZXIgPSAoUFVXTEFOXzgwMjExSERSKSgoUEJZVEUpcFR4UGFja2V0ICsgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpKTsKKyAgICBwVHhQYWNrZXQtPnA4MDIxMUhlYWRlciA9IChQVVdMQU5fODAyMTFIRFIpKCh1bnNpZ25lZCBjaGFyICopcFR4UGFja2V0ICsgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpKTsKICAgICBwVHhQYWNrZXQtPnA4MDIxMUhlYWRlci0+c0EyLndGcmFtZUN0bCA9IGNwdV90b19sZTE2KAogICAgICAgICAgKAogICAgICAgICAgV0xBTl9TRVRfRkNfRlRZUEUoV0xBTl9UWVBFX0NUTCkgfApAQCAtMjk2LDcgKzI5Niw3IEBACiAgKiAgICBOb25lLgogICoKIC0qLwotQk9PTAorYm9vbAogUFNiU2VuZE51bGxQYWNrZXQoCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQKICAgICApCkBAIC0zMDQsMzIgKzMwNCwzMiBAQAogICAgIFBTRGV2aWNlICAgICAgICAgICAgcERldmljZSA9IChQU0RldmljZSloRGV2aWNlQ29udGV4dDsKICAgICBQU1R4TWdtdFBhY2tldCAgICAgIHBUeFBhY2tldCA9IE5VTEw7CiAgICAgUFNNZ210T2JqZWN0ICAgICAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwotICAgIFVJTlQgICAgICAgICAgICAgICAgdUlkeDsKKyAgICB1bnNpZ25lZCBpbnQgdUlkeDsKIAogCi0gICAgaWYgKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSBGQUxTRSkgewotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgaWYgKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSBmYWxzZSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgICNpZmRlZiBUeEluU2xlZXAKLSAgICAgaWYgKChwRGV2aWNlLT5iRW5hYmxlUFNNb2RlID09IEZBTFNFKSAmJgotCSAgKHBEZXZpY2UtPmZUeERhdGFJblNsZWVwID09IEZBTFNFKSl7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgaWYgKChwRGV2aWNlLT5iRW5hYmxlUFNNb2RlID09IGZhbHNlKSAmJgorCSAgKHBEZXZpY2UtPmZUeERhdGFJblNsZWVwID09IGZhbHNlKSl7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAjZWxzZQotICAgIGlmIChwRGV2aWNlLT5iRW5hYmxlUFNNb2RlID09IEZBTFNFKSB7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICBpZiAocERldmljZS0+YkVuYWJsZVBTTW9kZSA9PSBmYWxzZSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogI2VuZGlmCiAgICAgaWYgKHBEZXZpY2UtPmJFbmFibGVQU01vZGUpIHsKICAgICAgICAgZm9yICh1SWR4ID0gMDsgdUlkeCA8IFRZUEVfTUFYVEQ7IHVJZHggKyspIHsKICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5pVERVc2VkW3VJZHhdICE9IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIG1lbXNldChwTWdtdC0+cGJ5UFNQYWNrZXRQb29sLCAwLCBzaXplb2YoU1R4TWdtdFBhY2tldCkgKyBXTEFOX05VTExEQVRBX0ZSX01BWExFTik7CiAgICAgcFR4UGFja2V0ID0gKFBTVHhNZ210UGFja2V0KXBNZ210LT5wYnlQU1BhY2tldFBvb2w7Ci0gICAgcFR4UGFja2V0LT5wODAyMTFIZWFkZXIgPSAoUFVXTEFOXzgwMjExSERSKSgoUEJZVEUpcFR4UGFja2V0ICsgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpKTsKKyAgICBwVHhQYWNrZXQtPnA4MDIxMUhlYWRlciA9IChQVVdMQU5fODAyMTFIRFIpKCh1bnNpZ25lZCBjaGFyICopcFR4UGFja2V0ICsgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpKTsKIAogICAgIGlmIChwRGV2aWNlLT5iRW5hYmxlUFNNb2RlKSB7CiAKQEAgLTM1MCw3ICszNTAsNyBAQAogICAgIH0KIAogICAgIGlmKHBNZ210LT5lQ3Vyck1vZGUgIT0gV01BQ19NT0RFX0lCU1NfU1RBKSB7Ci0gICAgICAgIHBUeFBhY2tldC0+cDgwMjExSGVhZGVyLT5zQTMud0ZyYW1lQ3RsIHw9IGNwdV90b19sZTE2KChXT1JEKVdMQU5fU0VUX0ZDX1RPRFMoMSkpOworICAgICAgICBwVHhQYWNrZXQtPnA4MDIxMUhlYWRlci0+c0EzLndGcmFtZUN0bCB8PSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpV0xBTl9TRVRfRkNfVE9EUygxKSk7CiAgICAgfQogCiAgICAgbWVtY3B5KHBUeFBhY2tldC0+cDgwMjExSGVhZGVyLT5zQTMuYWJ5QWRkcjEsIHBNZ210LT5hYnlDdXJyQlNTSUQsIFdMQU5fQUREUl9MRU4pOwpAQCAtMzYxLDcgKzM2MSw3IEBACiAgICAgLy8gc2VuZCB0aGUgZnJhbWUKICAgICBpZiAoY3NNZ210X3htaXQocERldmljZSwgcFR4UGFja2V0KSAhPSBDTURfU1RBVFVTX1BFTkRJTkcpIHsKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiU2VuZCBOdWxsIFBhY2tldCBmYWlsZWQgIVxuIik7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBlbHNlIHsKIApAQCAtMzY5LDcgKzM2OSw3IEBACiAgICAgfQogCiAKLSAgICByZXR1cm4gVFJVRSA7CisgICAgcmV0dXJuIHRydWUgOwogfQogCiAvKisKQEAgLTM4Miw3ICszODIsNyBAQAogICoKIC0qLwogCi1CT09MCitib29sCiBQU2JJc05leHRUQlRUV2FrZVVwKAogICAgIHZvaWQgKmhEZXZpY2VDb250ZXh0CiAgICAgKQpAQCAtMzkwLDcgKzM5MCw3IEBACiAKICAgICBQU0RldmljZSAgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpaERldmljZUNvbnRleHQ7CiAgICAgUFNNZ210T2JqZWN0ICAgICAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwotICAgIEJPT0wgICAgICAgICAgICAgICAgYldha2VVcCA9IEZBTFNFOworICAgIGJvb2wgYldha2VVcCA9IGZhbHNlOwogCiAgICAgaWYgKHBNZ210LT53TGlzdGVuSW50ZXJ2YWwgPj0gMikgewogICAgICAgICBpZiAocE1nbXQtPndDb3VudFRvV2FrZVVwID09IDApIHsKQEAgLTQwMiw3ICs0MDIsNyBAQAogICAgICAgICBpZiAocE1nbXQtPndDb3VudFRvV2FrZVVwID09IDEpIHsKICAgICAgICAgICAgIC8vIFR1cm4gb24gd2FrZSB1cCB0byBsaXN0ZW4gbmV4dCBiZWFjb24KICAgICAgICAgICAgIE1BQ3ZSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19QU0NUTCwgUFNDVExfTE5CQ04pOwotICAgICAgICAgICAgYldha2VVcCA9IFRSVUU7CisgICAgICAgICAgICBiV2FrZVVwID0gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9wb3dlci5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9wb3dlci5oCmluZGV4IGMwZGJlMjEuLjAxMDEzYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcG93ZXIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3Bvd2VyLmgKQEAgLTQ4LDExICs0OCwxMSBAQAogLy8gUFNEZXZpY2UgcERldmljZQogLy8gUFNEZXZpY2UgaERldmljZUNvbnRleHQKIAotQk9PTAorYm9vbAogUFNiQ29uc2lkZXJQb3dlckRvd24oCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQsCi0gICAgQk9PTCBiQ2hlY2tSeERNQSwKLSAgICBCT09MIGJDaGVja0NvdW50VG9XYWtlVXAKKyAgICBib29sIGJDaGVja1J4RE1BLAorICAgIGJvb2wgYkNoZWNrQ291bnRUb1dha2VVcAogICAgICk7CiAKIHZvaWQKQEAgLTYzLDcgKzYzLDcgQEAKIHZvaWQKIFBTdkVuYWJsZVBvd2VyU2F2aW5nKAogICAgIHZvaWQgKmhEZXZpY2VDb250ZXh0LAotICAgIFdPUkQgd0xpc3RlbkludGVydmFsCisgICAgdW5zaWduZWQgc2hvcnQgd0xpc3RlbkludGVydmFsCiAgICAgKTsKIAogdm9pZApAQCAtNzEsMTIgKzcxLDEyIEBACiAgICAgdm9pZCAqaERldmljZUNvbnRleHQKICAgICApOwogCi1CT09MCitib29sCiBQU2JTZW5kTnVsbFBhY2tldCgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dAogICAgICk7CiAKLUJPT0wKK2Jvb2wKIFBTYklzTmV4dFRCVFRXYWtlVXAoCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQKICAgICApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yYzQuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcmM0LmMKaW5kZXggNGE1M2YxNS4uOTg1NmMwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yYzQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3JjNC5jCkBAIC0zMiwzOCArMzIsMzggQEAKIAogI2luY2x1ZGUgInJjNC5oIgogCi12b2lkIHJjNF9pbml0KFBSQzRFeHQgcFJDNCwgUEJZVEUgcGJ5S2V5LCBVSU5UIGNiS2V5X2xlbikKK3ZvaWQgcmM0X2luaXQoUFJDNEV4dCBwUkM0LCB1bnNpZ25lZCBjaGFyICpwYnlLZXksIHVuc2lnbmVkIGludCBjYktleV9sZW4pCiB7Ci0gICAgVUlOVCAgdXN0MSwgdXN0MjsKLSAgICBVSU5UICBrZXlpbmRleDsKLSAgICBVSU5UICBzdGF0ZWluZGV4OwotICAgIFBCWVRFIHBieXN0OwotICAgIFVJTlQgIGlkeDsKKyAgICB1bnNpZ25lZCBpbnQgdXN0MSwgdXN0MjsKKyAgICB1bnNpZ25lZCBpbnQga2V5aW5kZXg7CisgICAgdW5zaWduZWQgaW50IHN0YXRlaW5kZXg7CisgICAgdW5zaWduZWQgY2hhciAqcGJ5c3Q7CisgICAgdW5zaWduZWQgaW50IGlkeDsKIAogICAgIHBieXN0ID0gcFJDNC0+YWJ5c3RhdGU7CiAgICAgcFJDNC0+dXggPSAwOwogICAgIHBSQzQtPnV5ID0gMDsKICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IDI1NjsgaWR4KyspCi0gICAgICAgIHBieXN0W2lkeF0gPSAoQllURSlpZHg7CisgICAgICAgIHBieXN0W2lkeF0gPSAodW5zaWduZWQgY2hhcilpZHg7CiAgICAga2V5aW5kZXggPSAwOwogICAgIHN0YXRlaW5kZXggPSAwOwogICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgMjU2OyBpZHgrKykgewogICAgICAgICB1c3QxID0gcGJ5c3RbaWR4XTsKICAgICAgICAgc3RhdGVpbmRleCA9IChzdGF0ZWluZGV4ICsgcGJ5S2V5W2tleWluZGV4XSArIHVzdDEpICYgMHhmZjsKICAgICAgICAgdXN0MiA9IHBieXN0W3N0YXRlaW5kZXhdOwotICAgICAgICBwYnlzdFtzdGF0ZWluZGV4XSA9IChCWVRFKXVzdDE7Ci0gICAgICAgIHBieXN0W2lkeF0gPSAoQllURSl1c3QyOworICAgICAgICBwYnlzdFtzdGF0ZWluZGV4XSA9ICh1bnNpZ25lZCBjaGFyKXVzdDE7CisgICAgICAgIHBieXN0W2lkeF0gPSAodW5zaWduZWQgY2hhcil1c3QyOwogICAgICAgICBpZiAoKytrZXlpbmRleCA+PSBjYktleV9sZW4pCiAgICAgICAgICAgICBrZXlpbmRleCA9IDA7CiAgICAgfQogfQogCi1VSU5UIHJjNF9ieXRlKFBSQzRFeHQgcFJDNCkKK3Vuc2lnbmVkIGludCByYzRfYnl0ZShQUkM0RXh0IHBSQzQpCiB7Ci0gICAgVUlOVCB1eDsKLSAgICBVSU5UIHV5OwotICAgIFVJTlQgdXN0eCwgdXN0eTsKLSAgICBQQllURSBwYnlzdDsKKyAgICB1bnNpZ25lZCBpbnQgdXg7CisgICAgdW5zaWduZWQgaW50IHV5OworICAgIHVuc2lnbmVkIGludCB1c3R4LCB1c3R5OworICAgIHVuc2lnbmVkIGNoYXIgKnBieXN0OwogCiAgICAgcGJ5c3QgPSBwUkM0LT5hYnlzdGF0ZTsKICAgICB1eCA9IChwUkM0LT51eCArIDEpICYgMHhmZjsKQEAgLTcyLDE2ICs3MiwxNiBAQAogICAgIHVzdHkgPSBwYnlzdFt1eV07CiAgICAgcFJDNC0+dXggPSB1eDsKICAgICBwUkM0LT51eSA9IHV5OwotICAgIHBieXN0W3V5XSA9IChCWVRFKXVzdHg7Ci0gICAgcGJ5c3RbdXhdID0gKEJZVEUpdXN0eTsKKyAgICBwYnlzdFt1eV0gPSAodW5zaWduZWQgY2hhcil1c3R4OworICAgIHBieXN0W3V4XSA9ICh1bnNpZ25lZCBjaGFyKXVzdHk7CiAKICAgICByZXR1cm4gcGJ5c3RbKHVzdHggKyB1c3R5KSAmIDB4ZmZdOwogfQogCi12b2lkIHJjNF9lbmNyeXB0KFBSQzRFeHQgcFJDNCwgUEJZVEUgcGJ5RGVzdCwKLSAgICAgICAgICAgICAgICAgICAgIFBCWVRFIHBieVNyYywgVUlOVCBjYkRhdGFfbGVuKQordm9pZCByYzRfZW5jcnlwdChQUkM0RXh0IHBSQzQsIHVuc2lnbmVkIGNoYXIgKnBieURlc3QsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwYnlTcmMsIHVuc2lnbmVkIGludCBjYkRhdGFfbGVuKQogewotICAgIFVJTlQgaWk7CisgICAgdW5zaWduZWQgaW50IGlpOwogICAgIGZvciAoaWkgPSAwOyBpaSA8IGNiRGF0YV9sZW47IGlpKyspCi0gICAgICAgIHBieURlc3RbaWldID0gKEJZVEUpKHBieVNyY1tpaV0gXiByYzRfYnl0ZShwUkM0KSk7CisgICAgICAgIHBieURlc3RbaWldID0gKHVuc2lnbmVkIGNoYXIpKHBieVNyY1tpaV0gXiByYzRfYnl0ZShwUkM0KSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3JjNC5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yYzQuaAppbmRleCBlNjVjYWU2Li5hZDA0ZTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3JjNC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcmM0LmgKQEAgLTM1LDEzICszNSwxMyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBEZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgVHlwZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgVUlOVCB1eDsKLSAgICBVSU5UIHV5OwotICAgIEJZVEUgYWJ5c3RhdGVbMjU2XTsKKyAgICB1bnNpZ25lZCBpbnQgdXg7CisgICAgdW5zaWduZWQgaW50IHV5OworICAgIHVuc2lnbmVkIGNoYXIgYWJ5c3RhdGVbMjU2XTsKIH0gUkM0RXh0LCAqUFJDNEV4dDsKIAotdm9pZCByYzRfaW5pdChQUkM0RXh0IHBSQzQsIFBCWVRFIHBieUtleSwgVUlOVCBjYktleV9sZW4pOwotVUlOVCByYzRfYnl0ZShQUkM0RXh0IHBSQzQpOwotdm9pZCByYzRfZW5jcnlwdChQUkM0RXh0IHBSQzQsIFBCWVRFIHBieURlc3QsIFBCWVRFIHBieVNyYywgVUlOVCBjYkRhdGFfbGVuKTsKK3ZvaWQgcmM0X2luaXQoUFJDNEV4dCBwUkM0LCB1bnNpZ25lZCBjaGFyICpwYnlLZXksIHVuc2lnbmVkIGludCBjYktleV9sZW4pOwordW5zaWduZWQgaW50IHJjNF9ieXRlKFBSQzRFeHQgcFJDNCk7Cit2b2lkIHJjNF9lbmNyeXB0KFBSQzRFeHQgcFJDNCwgdW5zaWduZWQgY2hhciAqcGJ5RGVzdCwgdW5zaWduZWQgY2hhciAqcGJ5U3JjLCB1bnNpZ25lZCBpbnQgY2JEYXRhX2xlbik7CiAKICNlbmRpZiAvL19fUkM0X0hfXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yZi5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yZi5jCmluZGV4IDdjYjg2ZmUuLmI4ZWM3ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcmYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3JmLmMKQEAgLTk0LDcgKzk0LDcgQEAKIAogCiAKLWNvbnN0IERXT1JEIGR3QUwyMjMwSW5pdFRhYmxlW0NCX0FMMjIzMF9JTklUX1NFUV0gPSB7Citjb25zdCB1bnNpZ25lZCBsb25nIGR3QUwyMjMwSW5pdFRhYmxlW0NCX0FMMjIzMF9JTklUX1NFUV0gPSB7CiAgICAgMHgwM0Y3OTAwMCsoQllfQUwyMjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1csIC8vCiAgICAgMHgwMzMzMzEwMCsoQllfQUwyMjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1csIC8vCiAgICAgMHgwMUEwMDIwMCsoQllfQUwyMjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1csIC8vCkBAIC0xMTIsNyArMTEyLDcgQEAKICAgICAweDAwNTgwRjAwKyhCWV9BTDIyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVwogICAgIH07CiAKLWNvbnN0IERXT1JEIGR3QUwyMjMwQ2hhbm5lbFRhYmxlMFtDQl9NQVhfQ0hBTk5FTF0gPSB7Citjb25zdCB1bnNpZ25lZCBsb25nIGR3QUwyMjMwQ2hhbm5lbFRhYmxlMFtDQl9NQVhfQ0hBTk5FTF0gPSB7CiAgICAgMHgwM0Y3OTAwMCsoQllfQUwyMjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1csIC8vIGNoYW5uZWwgPSAxLCBUZiA9IDI0MTJNSHoKICAgICAweDAzRjc5MDAwKyhCWV9BTDIyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVywgLy8gY2hhbm5lbCA9IDIsIFRmID0gMjQxN01IegogICAgIDB4MDNFNzkwMDArKEJZX0FMMjIzMF9SRUdfTEVOPDwzKStJRlJFR0NUTF9SRUdXLCAvLyBjaGFubmVsID0gMywgVGYgPSAyNDIyTUh6CkBAIC0xMjksNyArMTI5LDcgQEAKICAgICAweDAzRTdDMDAwKyhCWV9BTDIyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVyAgLy8gY2hhbm5lbCA9IDE0LCBUZiA9IDI0MTJNCiAgICAgfTsKIAotY29uc3QgRFdPUkQgZHdBTDIyMzBDaGFubmVsVGFibGUxW0NCX01BWF9DSEFOTkVMXSA9IHsKK2NvbnN0IHVuc2lnbmVkIGxvbmcgZHdBTDIyMzBDaGFubmVsVGFibGUxW0NCX01BWF9DSEFOTkVMXSA9IHsKICAgICAweDAzMzMzMTAwKyhCWV9BTDIyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVywgLy8gY2hhbm5lbCA9IDEsIFRmID0gMjQxMk1IegogICAgIDB4MEIzMzMxMDArKEJZX0FMMjIzMF9SRUdfTEVOPDwzKStJRlJFR0NUTF9SRUdXLCAvLyBjaGFubmVsID0gMiwgVGYgPSAyNDE3TUh6CiAgICAgMHgwMzMzMzEwMCsoQllfQUwyMjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1csIC8vIGNoYW5uZWwgPSAzLCBUZiA9IDI0MjJNSHoKQEAgLTE0Niw3ICsxNDYsNyBAQAogICAgIDB4MDY2NjYxMDArKEJZX0FMMjIzMF9SRUdfTEVOPDwzKStJRlJFR0NUTF9SRUdXICAvLyBjaGFubmVsID0gMTQsIFRmID0gMjQxMk0KICAgICB9OwogCi1EV09SRCBkd0FMMjIzMFBvd2VyVGFibGVbQUwyMjMwX1BXUl9JRFhfTEVOXSA9IHsKK3Vuc2lnbmVkIGxvbmcgZHdBTDIyMzBQb3dlclRhYmxlW0FMMjIzMF9QV1JfSURYX0xFTl0gPSB7CiAgICAgMHgwNDA0MDkwMCsoQllfQUwyMjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1csCiAgICAgMHgwNDA0MTkwMCsoQllfQUwyMjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1csCiAgICAgMHgwNDA0MjkwMCsoQllfQUwyMjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1csCkBAIC0yMTYsNyArMjE2LDcgQEAKIC8ve3sgUm9iZXJ0WXU6MjAwNTAxMDQKIC8vIDQwTUh6IHJlZmVyZW5jZSBmcmVxdWVuY3kKIC8vIE5lZWQgdG8gUHVsbCBQTExPTihQRTMpIGxvdyB3aGVuIHdyaXRpbmcgY2hhbm5lbCByZWdpc3RlcnMgdGhyb3VnaCAzLXdpcmUuCi1jb25zdCBEV09SRCBkd0FMNzIzMEluaXRUYWJsZVtDQl9BTDcyMzBfSU5JVF9TRVFdID0geworY29uc3QgdW5zaWduZWQgbG9uZyBkd0FMNzIzMEluaXRUYWJsZVtDQl9BTDcyMzBfSU5JVF9TRVFdID0gewogICAgIDB4MDAzNzkwMDArKEJZX0FMNzIzMF9SRUdfTEVOPDwzKStJRlJFR0NUTF9SRUdXLCAvLyBDaGFubmVsMSAvLyBOZWVkIG1vZGlmeSBmb3IgMTFhCiAgICAgMHgxMzMzMzEwMCsoQllfQUw3MjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1csIC8vIENoYW5uZWwxIC8vIE5lZWQgbW9kaWZ5IGZvciAxMWEKICAgICAweDg0MUZGMjAwKyhCWV9BTDcyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVywgLy8gTmVlZCBtb2RpZnkgZm9yIDExYTogNDUxRkUyCkBAIC0yMzksNyArMjM5LDcgQEAKICAgICAweDFBQkE4RjAwKyhCWV9BTDcyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVyAgLy8gTmVlZCBtb2RpZnkgZm9yIDExYTogMTJCQUNGCiAgICAgfTsKIAotY29uc3QgRFdPUkQgZHdBTDcyMzBJbml0VGFibGVBTW9kZVtDQl9BTDcyMzBfSU5JVF9TRVFdID0geworY29uc3QgdW5zaWduZWQgbG9uZyBkd0FMNzIzMEluaXRUYWJsZUFNb2RlW0NCX0FMNzIzMF9JTklUX1NFUV0gPSB7CiAgICAgMHgwRkY1MjAwMCsoQllfQUw3MjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1csIC8vIENoYW5uZWwxODQgLy8gTmVlZCBtb2RpZnkgZm9yIDExYi9nCiAgICAgMHgwMDAwMDEwMCsoQllfQUw3MjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1csIC8vIENoYW5uZWwxODQgLy8gTmVlZCBtb2RpZnkgZm9yIDExYi9nCiAgICAgMHg0NTFGRTIwMCsoQllfQUw3MjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1csIC8vIE5lZWQgbW9kaWZ5IGZvciAxMWIvZwpAQCAtMjU5LDcgKzI1OSw3IEBACiAgICAgfTsKIAogCi1jb25zdCBEV09SRCBkd0FMNzIzMENoYW5uZWxUYWJsZTBbQ0JfTUFYX0NIQU5ORUxdID0geworY29uc3QgdW5zaWduZWQgbG9uZyBkd0FMNzIzMENoYW5uZWxUYWJsZTBbQ0JfTUFYX0NIQU5ORUxdID0gewogICAgIDB4MDAzNzkwMDArKEJZX0FMNzIzMF9SRUdfTEVOPDwzKStJRlJFR0NUTF9SRUdXLCAvLyBjaGFubmVsID0gIDEsIFRmID0gMjQxMk1IegogICAgIDB4MDAzNzkwMDArKEJZX0FMNzIzMF9SRUdfTEVOPDwzKStJRlJFR0NUTF9SRUdXLCAvLyBjaGFubmVsID0gIDIsIFRmID0gMjQxN01IegogICAgIDB4MDAzNzkwMDArKEJZX0FMNzIzMF9SRUdfTEVOPDwzKStJRlJFR0NUTF9SRUdXLCAvLyBjaGFubmVsID0gIDMsIFRmID0gMjQyMk1IegpAQCAtMzI1LDcgKzMyNSw3IEBACiAgICAgMHgwRkY2MTAwMCsoQllfQUw3MjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1cgIC8vIGNoYW5uZWwgPSAxNjUsIFRmID0gNTgyNU1IeiAoNTYpCiAgICAgfTsKIAotY29uc3QgRFdPUkQgZHdBTDcyMzBDaGFubmVsVGFibGUxW0NCX01BWF9DSEFOTkVMXSA9IHsKK2NvbnN0IHVuc2lnbmVkIGxvbmcgZHdBTDcyMzBDaGFubmVsVGFibGUxW0NCX01BWF9DSEFOTkVMXSA9IHsKICAgICAweDEzMzMzMTAwKyhCWV9BTDcyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVywgLy8gY2hhbm5lbCA9ICAxLCBUZiA9IDI0MTJNSHoKICAgICAweDFCMzMzMTAwKyhCWV9BTDcyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVywgLy8gY2hhbm5lbCA9ICAyLCBUZiA9IDI0MTdNSHoKICAgICAweDAzMzMzMTAwKyhCWV9BTDcyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVywgLy8gY2hhbm5lbCA9ICAzLCBUZiA9IDI0MjJNSHoKQEAgLTM4OSw3ICszODksNyBAQAogICAgIDB4MDJBQUExMDArKEJZX0FMNzIzMF9SRUdfTEVOPDwzKStJRlJFR0NUTF9SRUdXICAvLyBjaGFubmVsID0gMTY1LCBUZiA9IDU4MjVNSHogKDU2KQogICAgIH07CiAKLWNvbnN0IERXT1JEIGR3QUw3MjMwQ2hhbm5lbFRhYmxlMltDQl9NQVhfQ0hBTk5FTF0gPSB7Citjb25zdCB1bnNpZ25lZCBsb25nIGR3QUw3MjMwQ2hhbm5lbFRhYmxlMltDQl9NQVhfQ0hBTk5FTF0gPSB7CiAgICAgMHg3RkQ3ODQwMCsoQllfQUw3MjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1csIC8vIGNoYW5uZWwgPSAgMSwgVGYgPSAyNDEyTUh6CiAgICAgMHg3RkQ3ODQwMCsoQllfQUw3MjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1csIC8vIGNoYW5uZWwgPSAgMiwgVGYgPSAyNDE3TUh6CiAgICAgMHg3RkQ3ODQwMCsoQllfQUw3MjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1csIC8vIGNoYW5uZWwgPSAgMywgVGYgPSAyNDIyTUh6CkBAIC00NzEsMTUgKzQ3MSwxNSBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZWVkZWQ7IEZBTFNFIGlmIGZhaWxlZC4KKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZWVkZWQ7IGZhbHNlIGlmIGZhaWxlZC4KICAqCiAgKi8KLUJPT0wgc19iQUw3MjMwSW5pdCAoRFdPUkRfUFRSIGR3SW9CYXNlKQorYm9vbCBzX2JBTDcyMzBJbml0ICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlKQogewogICAgIGludCAgICAgaWk7Ci0gICAgQk9PTCAgICBiUmVzdWx0OworICAgIGJvb2wgYlJlc3VsdDsKIAotICAgIGJSZXN1bHQgPSBUUlVFOworICAgIGJSZXN1bHQgPSB0cnVlOwogCiAgICAgLy8zLXdpcmUgY29udHJvbCBmb3Igbm9ybWFsIG1vZGUKICAgICBWTlN2T3V0UG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX1NPRlRQV1JDVEwsIDApOwpAQCAtNTE3LDExICs1MTcsMTEgQEAKIH0KIAogLy8gTmVlZCB0byBQdWxsIFBMTE9OIGxvdyB3aGVuIHdyaXRpbmcgY2hhbm5lbCByZWdpc3RlcnMgdGhyb3VnaCAzLXdpcmUgaW50ZXJmYWNlCi1CT09MIHNfYkFMNzIzMFNlbGVjdENoYW5uZWwgKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieUNoYW5uZWwpCitib29sIHNfYkFMNzIzMFNlbGVjdENoYW5uZWwgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlDaGFubmVsKQogewotICAgIEJPT0wgICAgYlJlc3VsdDsKKyAgICBib29sIGJSZXN1bHQ7CiAKLSAgICBiUmVzdWx0ID0gVFJVRTsKKyAgICBiUmVzdWx0ID0gdHJ1ZTsKIAogICAgIC8vIFBMTE9OIE9mZgogICAgIE1BQ3ZXb3JkUmVnQml0c09mZihkd0lvQmFzZSwgTUFDX1JFR19TT0ZUUFdSQ1RMLCBTT0ZUUFdSQ1RMX1NXUEUzKTsKQEAgLTU1Miw3ICs1NTIsNyBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZWVkZWQ7IEZBTFNFIGlmIGZhaWxlZC4KKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZWVkZWQ7IGZhbHNlIGlmIGZhaWxlZC4KICAqCiAgKi8KIApAQCAtNTY3LDcgKzU2Nyw3IEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIHN1Y2NlZWRlZDsgRkFMU0UgaWYgZmFpbGVkLgorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2NlZWRlZDsgZmFsc2UgaWYgZmFpbGVkLgogICoKICAqLwogCkBAIC01ODUsNyArNTg1LDcgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2VlZGVkOyBGQUxTRSBpZiBmYWlsZWQuCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2VlZGVkOyBmYWxzZSBpZiBmYWlsZWQuCiAgKgogICovCiAKQEAgLTU5OSw3ICs1OTksNyBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZWVkZWQ7IEZBTFNFIGlmIGZhaWxlZC4KKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZWVkZWQ7IGZhbHNlIGlmIGZhaWxlZC4KICAqCiAgKi8KIApAQCAtNjE5LDEzICs2MTksMTMgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2VlZGVkOyBGQUxTRSBpZiBmYWlsZWQuCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2VlZGVkOyBmYWxzZSBpZiBmYWlsZWQuCiAgKgogICovCi1CT09MIElGUkZiV3JpdGVFbWJlZGVkIChEV09SRF9QVFIgZHdJb0Jhc2UsIERXT1JEIGR3RGF0YSkKK2Jvb2wgSUZSRmJXcml0ZUVtYmVkZWQgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGxvbmcgZHdEYXRhKQogewotICAgIFdPUkQgICAgd3c7Ci0gICAgRFdPUkQgICBkd1ZhbHVlOworICAgIHVuc2lnbmVkIHNob3J0IHd3OworICAgIHVuc2lnbmVkIGxvbmcgZHdWYWx1ZTsKIAogICAgIFZOU3ZPdXRQb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfSUZSRUdDVEwsIGR3RGF0YSk7CiAKQEAgLTYzOCw5ICs2MzgsOSBAQAogCiAgICAgaWYgKHd3ID09IFdfTUFYX1RJTUVPVVQpIHsKIC8vICAgICAgICBEQkdfUE9SVDgwX0FMV0FZUygweDMyKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIHJldHVybiBUUlVFOworICAgIHJldHVybiB0cnVlOwogfQogCiAKQEAgLTY1NCw3ICs2NTQsNyBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZWVkZWQ7IEZBTFNFIGlmIGZhaWxlZC4KKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZWVkZWQ7IGZhbHNlIGlmIGZhaWxlZC4KICAqCiAgKi8KIApAQCAtNjY4LDcgKzY2OCw3IEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIHN1Y2NlZWRlZDsgRkFMU0UgaWYgZmFpbGVkLgorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2NlZWRlZDsgZmFsc2UgaWYgZmFpbGVkLgogICoKICAqLwogCkBAIC02ODEsMTUgKzY4MSwxNSBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZWVkZWQ7IEZBTFNFIGlmIGZhaWxlZC4KKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZWVkZWQ7IGZhbHNlIGlmIGZhaWxlZC4KICAqCiAgKi8KLUJPT0wgUkZiQUwyMjMwSW5pdCAoRFdPUkRfUFRSIGR3SW9CYXNlKQorYm9vbCBSRmJBTDIyMzBJbml0ICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlKQogewogICAgIGludCAgICAgaWk7Ci0gICAgQk9PTCAgICBiUmVzdWx0OworICAgIGJvb2wgYlJlc3VsdDsKIAotICAgIGJSZXN1bHQgPSBUUlVFOworICAgIGJSZXN1bHQgPSB0cnVlOwogCiAgICAgLy8zLXdpcmUgY29udHJvbCBmb3Igbm9ybWFsIG1vZGUKICAgICBWTlN2T3V0UG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX1NPRlRQV1JDVEwsIDApOwpAQCAtNzM0LDExICs3MzQsMTEgQEAKICAgICByZXR1cm4gYlJlc3VsdDsKIH0KIAotQk9PTCBSRmJBTDIyMzBTZWxlY3RDaGFubmVsIChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlDaGFubmVsKQorYm9vbCBSRmJBTDIyMzBTZWxlY3RDaGFubmVsICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5Q2hhbm5lbCkKIHsKLSAgICBCT09MICAgIGJSZXN1bHQ7CisgICAgYm9vbCBiUmVzdWx0OwogCi0gICAgYlJlc3VsdCA9IFRSVUU7CisgICAgYlJlc3VsdCA9IHRydWU7CiAKICAgICBiUmVzdWx0ICY9IElGUkZiV3JpdGVFbWJlZGVkIChkd0lvQmFzZSwgZHdBTDIyMzBDaGFubmVsVGFibGUwW2J5Q2hhbm5lbC0xXSk7CiAgICAgYlJlc3VsdCAmPSBJRlJGYldyaXRlRW1iZWRlZCAoZHdJb0Jhc2UsIGR3QUwyMjMwQ2hhbm5lbFRhYmxlMVtieUNoYW5uZWwtMV0pOwpAQCAtNzYxLDcgKzc2MSw3IEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIHN1Y2NlZWRlZDsgRkFMU0UgaWYgZmFpbGVkLgorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2NlZWRlZDsgZmFsc2UgaWYgZmFpbGVkLgogICoKICAqLwogCkBAIC03NzYsNyArNzc2LDcgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2VlZGVkOyBGQUxTRSBpZiBmYWlsZWQuCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2VlZGVkOyBmYWxzZSBpZiBmYWlsZWQuCiAgKgogICovCiAKQEAgLTc5MCw3ICs3OTAsNyBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZWVkZWQ7IEZBTFNFIGlmIGZhaWxlZC4KKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZWVkZWQ7IGZhbHNlIGlmIGZhaWxlZC4KICAqCiAgKi8KIApAQCAtODA0LDE0ICs4MDQsMTQgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2VlZGVkOyBGQUxTRSBpZiBmYWlsZWQuCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2VlZGVkOyBmYWxzZSBpZiBmYWlsZWQuCiAgKgogICovCi1CT09MIFJGYkluaXQgKAorYm9vbCBSRmJJbml0ICgKICAgICBQU0RldmljZSAgcERldmljZQogICAgICkKIHsKLUJPT0wgICAgYlJlc3VsdCA9IFRSVUU7Citib29sIGJSZXN1bHQgPSB0cnVlOwogICAgIHN3aXRjaCAocERldmljZS0+YnlSRlR5cGUpIHsKICAgICAgICAgY2FzZSBSRl9BSVJPSEEgOgogICAgICAgICBjYXNlIFJGX0FMMjIzMFM6CkBAIC04MjMsMTAgKzgyMywxMCBAQAogICAgICAgICAgICAgYlJlc3VsdCA9IHNfYkFMNzIzMEluaXQocERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSRl9OT1RISU5HIDoKLSAgICAgICAgICAgIGJSZXN1bHQgPSBUUlVFOworICAgICAgICAgICAgYlJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdCA6Ci0gICAgICAgICAgICBiUmVzdWx0ID0gRkFMU0U7CisgICAgICAgICAgICBiUmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIGJSZXN1bHQ7CkBAIC04NDIsMjEgKzg0MiwyMSBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZWVkZWQ7IEZBTFNFIGlmIGZhaWxlZC4KKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZWVkZWQ7IGZhbHNlIGlmIGZhaWxlZC4KICAqCiAgKi8KLUJPT0wgUkZiU2h1dERvd24gKAorYm9vbCBSRmJTaHV0RG93biAoCiAgICAgUFNEZXZpY2UgIHBEZXZpY2UKICAgICApCiB7Ci1CT09MICAgIGJSZXN1bHQgPSBUUlVFOworYm9vbCBiUmVzdWx0ID0gdHJ1ZTsKIAogICAgIHN3aXRjaCAocERldmljZS0+YnlSRlR5cGUpIHsKICAgICAgICAgY2FzZSBSRl9BSVJPSEE3MjMwIDoKICAgICAgICAgICAgIGJSZXN1bHQgPSBJRlJGYldyaXRlRW1iZWRlZCAocERldmljZS0+UG9ydE9mZnNldCwgMHgxQUJBRUYwMCsoQllfQUw3MjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1cpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQgOgotICAgICAgICAgICAgYlJlc3VsdCA9IFRSVUU7CisgICAgICAgICAgICBiUmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gYlJlc3VsdDsKQEAgLTg3MiwxMiArODcyLDEyIEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIHN1Y2NlZWRlZDsgRkFMU0UgaWYgZmFpbGVkLgorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2NlZWRlZDsgZmFsc2UgaWYgZmFpbGVkLgogICoKICAqLwotQk9PTCBSRmJTZWxlY3RDaGFubmVsIChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlSRlR5cGUsIEJZVEUgYnlDaGFubmVsKQorYm9vbCBSRmJTZWxlY3RDaGFubmVsICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5UkZUeXBlLCB1bnNpZ25lZCBjaGFyIGJ5Q2hhbm5lbCkKIHsKLUJPT0wgICAgYlJlc3VsdCA9IFRSVUU7Citib29sIGJSZXN1bHQgPSB0cnVlOwogICAgIHN3aXRjaCAoYnlSRlR5cGUpIHsKIAogICAgICAgICBjYXNlIFJGX0FJUk9IQSA6CkBAIC04OTAsMTAgKzg5MCwxMCBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIC8vfX0gUm9iZXJ0WXUKICAgICAgICAgY2FzZSBSRl9OT1RISU5HIDoKLSAgICAgICAgICAgIGJSZXN1bHQgPSBUUlVFOworICAgICAgICAgICAgYlJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJSZXN1bHQgPSBGQUxTRTsKKyAgICAgICAgICAgIGJSZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gYlJlc3VsdDsKQEAgLTkxMSwxMSArOTExLDExIEBACiAgKiBSZXR1cm4gVmFsdWU6IE5vbmUuCiAgKgogICovCi1CT09MIFJGdldyaXRlV2FrZVByb2dTeW4gKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieVJGVHlwZSwgVUlOVCB1Q2hhbm5lbCkKK2Jvb2wgUkZ2V3JpdGVXYWtlUHJvZ1N5biAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieVJGVHlwZSwgdW5zaWduZWQgaW50IHVDaGFubmVsKQogewogICAgIGludCAgIGlpOwotICAgIEJZVEUgIGJ5SW5pdENvdW50ID0gMDsKLSAgICBCWVRFICBieVNsZWVwQ291bnQgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgYnlJbml0Q291bnQgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgYnlTbGVlcENvdW50ID0gMDsKIAogICAgIFZOU3ZPdXRQb3J0Vyhkd0lvQmFzZSArIE1BQ19SRUdfTUlTQ0ZGTkRFWCwgMCk7CiAgICAgc3dpdGNoIChieVJGVHlwZSkgewpAQCAtOTIzLDIwICs5MjMsMjAgQEAKICAgICAgICAgY2FzZSBSRl9BTDIyMzBTOgogCiAgICAgICAgICAgICBpZiAodUNoYW5uZWwgPiBDQl9NQVhfQ0hBTk5FTF8yNEcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgYnlJbml0Q291bnQgPSBDQl9BTDIyMzBfSU5JVF9TRVEgKyAyOyAvLyBJbml0IFJlZyArIENoYW5uZWwgUmVnICgyKQogICAgICAgICAgICAgYnlTbGVlcENvdW50ID0gMDsKICAgICAgICAgICAgIGlmIChieUluaXRDb3VudCA+IChNSVNDRklGT19TWU5EQVRBU0laRSAtIGJ5U2xlZXBDb3VudCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCBDQl9BTDIyMzBfSU5JVF9TRVE7IGlpKysgKSB7Ci0gICAgICAgICAgICAgICAgTUFDdlNldE1JU0NGaWZvKGR3SW9CYXNlLCAoV09SRCkoTUlTQ0ZJRk9fU1lOREFUQV9JRFggKyBpaSksIGR3QUwyMjMwSW5pdFRhYmxlW2lpXSk7CisgICAgICAgICAgICAgICAgTUFDdlNldE1JU0NGaWZvKGR3SW9CYXNlLCAodW5zaWduZWQgc2hvcnQpKE1JU0NGSUZPX1NZTkRBVEFfSURYICsgaWkpLCBkd0FMMjIzMEluaXRUYWJsZVtpaV0pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgTUFDdlNldE1JU0NGaWZvKGR3SW9CYXNlLCAoV09SRCkoTUlTQ0ZJRk9fU1lOREFUQV9JRFggKyBpaSksIGR3QUwyMjMwQ2hhbm5lbFRhYmxlMFt1Q2hhbm5lbC0xXSk7CisgICAgICAgICAgICBNQUN2U2V0TUlTQ0ZpZm8oZHdJb0Jhc2UsICh1bnNpZ25lZCBzaG9ydCkoTUlTQ0ZJRk9fU1lOREFUQV9JRFggKyBpaSksIGR3QUwyMjMwQ2hhbm5lbFRhYmxlMFt1Q2hhbm5lbC0xXSk7CiAgICAgICAgICAgICBpaSArKzsKLSAgICAgICAgICAgIE1BQ3ZTZXRNSVNDRmlmbyhkd0lvQmFzZSwgKFdPUkQpKE1JU0NGSUZPX1NZTkRBVEFfSURYICsgaWkpLCBkd0FMMjIzMENoYW5uZWxUYWJsZTFbdUNoYW5uZWwtMV0pOworICAgICAgICAgICAgTUFDdlNldE1JU0NGaWZvKGR3SW9CYXNlLCAodW5zaWduZWQgc2hvcnQpKE1JU0NGSUZPX1NZTkRBVEFfSURYICsgaWkpLCBkd0FMMjIzMENoYW5uZWxUYWJsZTFbdUNoYW5uZWwtMV0pOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgLy97eyBSb2JlcnRZdTogMjAwNTAxMDQKQEAgLTk0NSw0MiArOTQ1LDQyIEBACiAgICAgICAgICAgICBieUluaXRDb3VudCA9IENCX0FMNzIzMF9JTklUX1NFUSArIDM7IC8vIEluaXQgUmVnICsgQ2hhbm5lbCBSZWcgKDMpCiAgICAgICAgICAgICBieVNsZWVwQ291bnQgPSAwOwogICAgICAgICAgICAgaWYgKGJ5SW5pdENvdW50ID4gKE1JU0NGSUZPX1NZTkRBVEFTSVpFIC0gYnlTbGVlcENvdW50KSkgewotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICh1Q2hhbm5lbCA8PSBDQl9NQVhfQ0hBTk5FTF8yNEcpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZm9yIChpaSA9IDA7IGlpIDwgQ0JfQUw3MjMwX0lOSVRfU0VROyBpaSsrICkgewotICAgICAgICAgICAgICAgICAgICBNQUN2U2V0TUlTQ0ZpZm8oZHdJb0Jhc2UsIChXT1JEKShNSVNDRklGT19TWU5EQVRBX0lEWCArIGlpKSwgZHdBTDcyMzBJbml0VGFibGVbaWldKTsKKyAgICAgICAgICAgICAgICAgICAgTUFDdlNldE1JU0NGaWZvKGR3SW9CYXNlLCAodW5zaWduZWQgc2hvcnQpKE1JU0NGSUZPX1NZTkRBVEFfSURYICsgaWkpLCBkd0FMNzIzMEluaXRUYWJsZVtpaV0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCBDQl9BTDcyMzBfSU5JVF9TRVE7IGlpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgIE1BQ3ZTZXRNSVNDRmlmbyhkd0lvQmFzZSwgKFdPUkQpKE1JU0NGSUZPX1NZTkRBVEFfSURYICsgaWkpLCBkd0FMNzIzMEluaXRUYWJsZUFNb2RlW2lpXSk7CisgICAgICAgICAgICAgICAgICAgIE1BQ3ZTZXRNSVNDRmlmbyhkd0lvQmFzZSwgKHVuc2lnbmVkIHNob3J0KShNSVNDRklGT19TWU5EQVRBX0lEWCArIGlpKSwgZHdBTDcyMzBJbml0VGFibGVBTW9kZVtpaV0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgTUFDdlNldE1JU0NGaWZvKGR3SW9CYXNlLCAoV09SRCkoTUlTQ0ZJRk9fU1lOREFUQV9JRFggKyBpaSksIGR3QUw3MjMwQ2hhbm5lbFRhYmxlMFt1Q2hhbm5lbC0xXSk7CisgICAgICAgICAgICBNQUN2U2V0TUlTQ0ZpZm8oZHdJb0Jhc2UsICh1bnNpZ25lZCBzaG9ydCkoTUlTQ0ZJRk9fU1lOREFUQV9JRFggKyBpaSksIGR3QUw3MjMwQ2hhbm5lbFRhYmxlMFt1Q2hhbm5lbC0xXSk7CiAgICAgICAgICAgICBpaSArKzsKLSAgICAgICAgICAgIE1BQ3ZTZXRNSVNDRmlmbyhkd0lvQmFzZSwgKFdPUkQpKE1JU0NGSUZPX1NZTkRBVEFfSURYICsgaWkpLCBkd0FMNzIzMENoYW5uZWxUYWJsZTFbdUNoYW5uZWwtMV0pOworICAgICAgICAgICAgTUFDdlNldE1JU0NGaWZvKGR3SW9CYXNlLCAodW5zaWduZWQgc2hvcnQpKE1JU0NGSUZPX1NZTkRBVEFfSURYICsgaWkpLCBkd0FMNzIzMENoYW5uZWxUYWJsZTFbdUNoYW5uZWwtMV0pOwogICAgICAgICAgICAgaWkgKys7Ci0gICAgICAgICAgICBNQUN2U2V0TUlTQ0ZpZm8oZHdJb0Jhc2UsIChXT1JEKShNSVNDRklGT19TWU5EQVRBX0lEWCArIGlpKSwgZHdBTDcyMzBDaGFubmVsVGFibGUyW3VDaGFubmVsLTFdKTsKKyAgICAgICAgICAgIE1BQ3ZTZXRNSVNDRmlmbyhkd0lvQmFzZSwgKHVuc2lnbmVkIHNob3J0KShNSVNDRklGT19TWU5EQVRBX0lEWCArIGlpKSwgZHdBTDcyMzBDaGFubmVsVGFibGUyW3VDaGFubmVsLTFdKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAvL319IFJvYmVydFl1CiAKICAgICAgICAgY2FzZSBSRl9OT1RISU5HIDoKLSAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgTUFDdlNldE1JU0NGaWZvKGR3SW9CYXNlLCBNSVNDRklGT19TWU5JTkZPX0lEWCwgKERXT1JEKU1BS0VXT1JEKGJ5U2xlZXBDb3VudCwgYnlJbml0Q291bnQpKTsKKyAgICBNQUN2U2V0TUlTQ0ZpZm8oZHdJb0Jhc2UsIE1JU0NGSUZPX1NZTklORk9fSURYLCAodW5zaWduZWQgbG9uZyApTUFLRVdPUkQoYnlTbGVlcENvdW50LCBieUluaXRDb3VudCkpOwogCi0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8qCkBAIC05OTMsMjUgKzk5MywyNSBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZWVkZWQ7IEZBTFNFIGlmIGZhaWxlZC4KKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZWVkZWQ7IGZhbHNlIGlmIGZhaWxlZC4KICAqCiAgKi8KLUJPT0wgUkZiU2V0UG93ZXIgKAorYm9vbCBSRmJTZXRQb3dlciAoCiAgICAgUFNEZXZpY2UgIHBEZXZpY2UsCi0gICAgVUlOVCAgICAgIHVSQVRFLAotICAgIFVJTlQgICAgICB1Q0gKKyAgICB1bnNpZ25lZCBpbnQgdVJBVEUsCisgICAgdW5zaWduZWQgaW50IHVDSAogICAgICkKIHsKLUJPT0wgICAgYlJlc3VsdCA9IFRSVUU7Ci1CWVRFICAgIGJ5UHdyID0gMDsKLUJZVEUgICAgYnlEZWMgPSAwOwotQllURSAgICBieVB3cmRCbSA9IDA7Citib29sIGJSZXN1bHQgPSB0cnVlOwordW5zaWduZWQgY2hhciBieVB3ciA9IDA7Cit1bnNpZ25lZCBjaGFyIGJ5RGVjID0gMDsKK3Vuc2lnbmVkIGNoYXIgYnlQd3JkQm0gPSAwOwogCiAgICAgaWYgKHBEZXZpY2UtPmR3RGlhZ1JlZkNvdW50ICE9IDApIHsKLSAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAoKHVDSCA8IDEpIHx8ICh1Q0ggPiBDQl9NQVhfQ0hBTk5FTCkpIHsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgc3dpdGNoICh1UkFURSkgewpAQCAtMTA3MCw3ICsxMDcwLDcgQEAKICNpZiAwCiAKICAgICAvLyA4MDIuMTFoIFRQQwotICAgIGlmIChwRGV2aWNlLT5iTGlua1Bhc3MgPT0gVFJVRSkgeworICAgIGlmIChwRGV2aWNlLT5iTGlua1Bhc3MgPT0gdHJ1ZSkgewogICAgICAgICAvLyBkbyBub3Qgb3ZlciBsb2NhbCBjb25zdHJhaW50CiAgICAgICAgIGlmIChieVB3cmRCbSA+IHBEZXZpY2UtPmFieUxvY2FsUHdyW3VDSF0pIHsKICAgICAgICAgICAgIHBEZXZpY2UtPmJ5Q3VyUHdyZEJtID0gcERldmljZS0+YWJ5TG9jYWxQd3JbdUNIXTsKQEAgLTExMTEsMTEgKzExMTEsMTEgQEAKIAogLy8gICAgaWYgKHBEZXZpY2UtPmJ5TG9jYWxJRCA8PSBSRVZfSURfVlQzMjUzX0IxKSB7CiAgICAgaWYgKHBEZXZpY2UtPmJ5Q3VyUHdyID09IGJ5UHdyKSB7Ci0gICAgICAgIHJldHVybiBUUlVFOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgYlJlc3VsdCA9IFJGYlJhd1NldFBvd2VyKHBEZXZpY2UsIGJ5UHdyLCB1UkFURSk7CiAvLyAgICB9Ci0gICAgaWYgKGJSZXN1bHQgPT0gVFJVRSkgeworICAgIGlmIChiUmVzdWx0ID09IHRydWUpIHsKICAgICAgICBwRGV2aWNlLT5ieUN1clB3ciA9IGJ5UHdyOwogICAgIH0KICAgICByZXR1cm4gYlJlc3VsdDsKQEAgLTExMzEsMjEgKzExMzEsMjEgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2VlZGVkOyBGQUxTRSBpZiBmYWlsZWQuCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2VlZGVkOyBmYWxzZSBpZiBmYWlsZWQuCiAgKgogICovCiAKLUJPT0wgUkZiUmF3U2V0UG93ZXIgKAorYm9vbCBSRmJSYXdTZXRQb3dlciAoCiAgICAgUFNEZXZpY2UgIHBEZXZpY2UsCi0gICAgQllURSAgICAgIGJ5UHdyLAotICAgIFVJTlQgICAgICB1UkFURQorICAgIHVuc2lnbmVkIGNoYXIgYnlQd3IsCisgICAgdW5zaWduZWQgaW50IHVSQVRFCiAgICAgKQogewotQk9PTCAgICBiUmVzdWx0ID0gVFJVRTsKLURXT1JEICAgZHdNYXg3MjMwUHdyID0gMDsKK2Jvb2wgYlJlc3VsdCA9IHRydWU7Cit1bnNpZ25lZCBsb25nIGR3TWF4NzIzMFB3ciA9IDA7CiAKICAgICBpZiAoYnlQd3IgPj0gIHBEZXZpY2UtPmJ5TWF4UHdyTGV2ZWwpIHsKLSAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgICAgICAgIHJldHVybiAoZmFsc2UpOwogICAgIH0KICAgICBzd2l0Y2ggKHBEZXZpY2UtPmJ5UkZUeXBlKSB7CiAKQEAgLTEyMDQsMTQgKzEyMDQsMTQgQEAKIHZvaWQKIFJGdlJTU0lUb2RCbSAoCiAgICAgUFNEZXZpY2UgcERldmljZSwKLSAgICBCWVRFICAgICBieUN1cnJSU1NJLAorICAgIHVuc2lnbmVkIGNoYXIgYnlDdXJyUlNTSSwKICAgICBsb25nICogICAgcGxkQm0KICAgICApCiB7Ci0gICAgQllURSBieUlkeCA9ICgoKGJ5Q3VyclJTU0kgJiAweEMwKSA+PiA2KSAmIDB4MDMpOwotICAgIExPTkcgYiA9IChieUN1cnJSU1NJICYgMHgzRik7Ci0gICAgTE9ORyBhID0gMDsKLSAgICBCWVRFIGFieUFJUk9IQVJGWzRdID0gezAsIDE4LCAwLCA0MH07CisgICAgdW5zaWduZWQgY2hhciBieUlkeCA9ICgoKGJ5Q3VyclJTU0kgJiAweEMwKSA+PiA2KSAmIDB4MDMpOworICAgIGxvbmcgYiA9IChieUN1cnJSU1NJICYgMHgzRik7CisgICAgbG9uZyBhID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUFJUk9IQVJGWzRdID0gezAsIDE4LCAwLCA0MH07CiAKICAgICBzd2l0Y2ggKHBEZXZpY2UtPmJ5UkZUeXBlKSB7CiAgICAgICAgIGNhc2UgUkZfQUlST0hBOgpAQCAtMTIzMiwxMSArMTIzMiwxMSBAQAogCiAvLyBQb3N0IHByb2Nlc3NpbmcgZm9yIHRoZSAxMWIvZyBhbmQgMTFhLgogLy8gZm9yIHNhdmUgdGltZSBvbiBjaGFuZ2luZyBSZWcyLDMsNSw3LDEwLDEyLDE1Ci1CT09MIFJGYkFMNzIzMFNlbGVjdENoYW5uZWxQb3N0UHJvY2VzcyAoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5T2xkQ2hhbm5lbCwgQllURSBieU5ld0NoYW5uZWwpCitib29sIFJGYkFMNzIzMFNlbGVjdENoYW5uZWxQb3N0UHJvY2VzcyAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieU9sZENoYW5uZWwsIHVuc2lnbmVkIGNoYXIgYnlOZXdDaGFubmVsKQogewotICAgIEJPT0wgICAgYlJlc3VsdDsKKyAgICBib29sIGJSZXN1bHQ7CiAKLSAgICBiUmVzdWx0ID0gVFJVRTsKKyAgICBiUmVzdWx0ID0gdHJ1ZTsKIAogICAgIC8vIGlmIGNoYW5nZSBiZXR3ZWVuIDExIGIvZyBhbmQgMTFhIG5lZWQgdG8gdXBkYXRlIHRoZSBmb2xsb3dpbmcgcmVnaXN0ZXIKICAgICAvLyBDaGFubmVsIEluZGV4IDF+MTQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcmYuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcmYuaAppbmRleCAyNWRmYzc5Li4xZjhkODJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3JmLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yZi5oCkBAIC03NiwyOCArNzYsMjggQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotQk9PTCBJRlJGYldyaXRlRW1iZWRlZChEV09SRF9QVFIgZHdJb0Jhc2UsIERXT1JEIGR3RGF0YSk7Ci1CT09MIFJGYlNlbGVjdENoYW5uZWwoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5UkZUeXBlLCBCWVRFIGJ5Q2hhbm5lbCk7Ci1CT09MIFJGYkluaXQgKAorYm9vbCBJRlJGYldyaXRlRW1iZWRlZCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBsb25nIGR3RGF0YSk7Citib29sIFJGYlNlbGVjdENoYW5uZWwodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieVJGVHlwZSwgdW5zaWduZWQgY2hhciBieUNoYW5uZWwpOworYm9vbCBSRmJJbml0ICgKICAgICBQU0RldmljZSAgcERldmljZQogICAgICk7Ci1CT09MIFJGdldyaXRlV2FrZVByb2dTeW4oRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5UkZUeXBlLCBVSU5UIHVDaGFubmVsKTsKLUJPT0wgUkZiU2V0UG93ZXIoUFNEZXZpY2UgcERldmljZSwgVUlOVCB1UkFURSwgVUlOVCB1Q0gpOwotQk9PTCBSRmJSYXdTZXRQb3dlcigKK2Jvb2wgUkZ2V3JpdGVXYWtlUHJvZ1N5bih1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5UkZUeXBlLCB1bnNpZ25lZCBpbnQgdUNoYW5uZWwpOworYm9vbCBSRmJTZXRQb3dlcihQU0RldmljZSBwRGV2aWNlLCB1bnNpZ25lZCBpbnQgdVJBVEUsIHVuc2lnbmVkIGludCB1Q0gpOworYm9vbCBSRmJSYXdTZXRQb3dlcigKICAgICBQU0RldmljZSAgcERldmljZSwKLSAgICBCWVRFICAgICAgYnlQd3IsCi0gICAgVUlOVCAgICAgIHVSQVRFCisgICAgdW5zaWduZWQgY2hhciBieVB3ciwKKyAgICB1bnNpZ25lZCBpbnQgdVJBVEUKICAgICApOwogCiB2b2lkCiBSRnZSU1NJVG9kQm0oCiAgICAgUFNEZXZpY2UgcERldmljZSwKLSAgICBCWVRFICAgICBieUN1cnJSU1NJLAorICAgIHVuc2lnbmVkIGNoYXIgYnlDdXJyUlNTSSwKICAgICBsb25nICAgICpwbGRCbQogICAgICk7CiAKIC8ve3sgUm9iZXJ0WXU6IDIwMDUwMTA0Ci1CT09MIFJGYkFMNzIzMFNlbGVjdENoYW5uZWxQb3N0UHJvY2VzcyhEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlPbGRDaGFubmVsLCBCWVRFIGJ5TmV3Q2hhbm5lbCk7Citib29sIFJGYkFMNzIzMFNlbGVjdENoYW5uZWxQb3N0UHJvY2Vzcyh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5T2xkQ2hhbm5lbCwgdW5zaWduZWQgY2hhciBieU5ld0NoYW5uZWwpOwogLy99fSBSb2JlcnRZdQogCiAjZW5kaWYgLy8gX19SRl9IX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcnh0eC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yeHR4LmMKaW5kZXggYTA0NDVjMy4uYzkyMGNmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yeHR4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yeHR4LmMKQEAgLTgwLDE2ICs4MCwxNiBAQAogI2RlZmluZSBDUklUSUNBTF9QQUNLRVRfTEVOICAgICAgMjU2ICAgIC8vIGlmIHBhY2tldCBzaXplIDwgMjU2IC0+IGluLWRpcmVjdCBzZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgcGFja2V0IHNpemUgPj0gMjU2IC0+IGRpcmVjdCBzZW5kCiAKLWNvbnN0IFdPUkQgd1RpbWVTdGFtcE9mZlsyXVtNQVhfUkFURV0gPSB7Citjb25zdCB1bnNpZ25lZCBzaG9ydCB3VGltZVN0YW1wT2ZmWzJdW01BWF9SQVRFXSA9IHsKICAgICAgICAgezM4NCwgMjg4LCAyMjYsIDIwOSwgNTQsIDQzLCAzNywgMzEsIDI4LCAyNSwgMjQsIDIzfSwgLy8gTG9uZyBQcmVhbWJsZQogICAgICAgICB7Mzg0LCAxOTIsIDEzMCwgMTEzLCA1NCwgNDMsIDM3LCAzMSwgMjgsIDI1LCAyNCwgMjN9LCAvLyBTaG9ydCBQcmVhbWJsZQogICAgIH07CiAKLWNvbnN0IFdPUkQgd0ZCX09wdDBbMl1bNV0gPSB7Citjb25zdCB1bnNpZ25lZCBzaG9ydCB3RkJfT3B0MFsyXVs1XSA9IHsKICAgICAgICAge1JBVEVfMTJNLCBSQVRFXzE4TSwgUkFURV8yNE0sIFJBVEVfMzZNLCBSQVRFXzQ4TX0sIC8vIGZhbGxiYWNrX3JhdGUwCiAgICAgICAgIHtSQVRFXzEyTSwgUkFURV8xMk0sIFJBVEVfMThNLCBSQVRFXzI0TSwgUkFURV8zNk19LCAvLyBmYWxsYmFja19yYXRlMQogICAgIH07Ci1jb25zdCBXT1JEIHdGQl9PcHQxWzJdWzVdID0geworY29uc3QgdW5zaWduZWQgc2hvcnQgd0ZCX09wdDFbMl1bNV0gPSB7CiAgICAgICAgIHtSQVRFXzEyTSwgUkFURV8xOE0sIFJBVEVfMjRNLCBSQVRFXzI0TSwgUkFURV8zNk19LCAvLyBmYWxsYmFja19yYXRlMAogICAgICAgICB7UkFURV82TSAsIFJBVEVfNk0sICBSQVRFXzEyTSwgUkFURV8xMk0sIFJBVEVfMThNfSwgLy8gZmFsbGJhY2tfcmF0ZTEKICAgICB9OwpAQCAtMTE4LDEyICsxMTgsMTIgQEAKIHZvaWQKIHNfdkZpbGxUeEtleSgKICAgICBQU0RldmljZSAgIHBEZXZpY2UsCi0gICAgUEJZVEUgICAgICBwYnlCdWYsCi0gICAgUEJZVEUgICAgICBwYnlJVkhlYWQsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5QnVmLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUlWSGVhZCwKICAgICBQU0tleUl0ZW0gIHBUcmFuc21pdEtleSwKLSAgICBQQllURSAgICAgIHBieUhkckJ1ZiwKLSAgICBXT1JEICAgICAgIHdQYXlsb2FkTGVuLAotICAgIFBCWVRFICAgICAgcE1JQ0hEUgorICAgIHVuc2lnbmVkIGNoYXIgKnBieUhkckJ1ZiwKKyAgICB1bnNpZ25lZCBzaG9ydCB3UGF5bG9hZExlbiwKKyAgICB1bnNpZ25lZCBjaGFyICpwTUlDSERSCiAgICAgKTsKIAogCkBAIC0xMzIsNzYgKzEzMiw2NSBAQAogdm9pZAogc192RmlsbFJUU0hlYWQoCiAgICAgUFNEZXZpY2UgICAgICAgICBwRGV2aWNlLAotICAgIEJZVEUgICAgICAgICAgICAgYnlQa3RUeXBlLAorICAgIHVuc2lnbmVkIGNoYXIgYnlQa3RUeXBlLAogICAgIHZvaWQgKiAgICAgICAgICAgcHZSVFMsCi0gICAgVUlOVCAgICAgICAgICAgICBjYkZyYW1lTGVuZ3RoLAotICAgIEJPT0wgICAgICAgICAgICAgYk5lZWRBY2ssCi0gICAgQk9PTCAgICAgICAgICAgICBiRGlzQ1JDLAorICAgIHVuc2lnbmVkIGludAljYkZyYW1lTGVuZ3RoLAorICAgIGJvb2wgYk5lZWRBY2ssCisgICAgYm9vbCBiRGlzQ1JDLAogICAgIFBTRXRoZXJuZXRIZWFkZXIgcHNFdGhIZWFkZXIsCi0gICAgV09SRCAgICAgICAgICAgICB3Q3VycmVudFJhdGUsCi0gICAgQllURSAgICAgICAgICAgICBieUZCT3B0aW9uCisgICAgdW5zaWduZWQgc2hvcnQgd0N1cnJlbnRSYXRlLAorICAgIHVuc2lnbmVkIGNoYXIgYnlGQk9wdGlvbgogICAgICk7CiAKIHN0YXRpYwogdm9pZAogc192R2VuZXJhdGVUeFBhcmFtZXRlcigKICAgICBQU0RldmljZSAgICAgICAgIHBEZXZpY2UsCi0gICAgQllURSAgICAgICAgICAgIGJ5UGt0VHlwZSwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UGt0VHlwZSwKICAgICB2b2lkICogICAgICAgICAgIHBUeEJ1ZkhlYWQsCiAgICAgdm9pZCAqICAgICAgICAgICBwdlJydlRpbWUsCiAgICAgdm9pZCAqICAgICAgICAgICBwdlJUUywKICAgICB2b2lkICogICAgICAgICAgIHB2Q1RTLAotICAgIFVJTlQgICAgICAgICAgICAgY2JGcmFtZVNpemUsCi0gICAgQk9PTCAgICAgICAgICAgICBiTmVlZEFDSywKLSAgICBVSU5UICAgICAgICAgICAgIHVETUFJZHgsCisgICAgdW5zaWduZWQgaW50CWNiRnJhbWVTaXplLAorICAgIGJvb2wgYk5lZWRBQ0ssCisgICAgdW5zaWduZWQgaW50CXVETUFJZHgsCiAgICAgUFNFdGhlcm5ldEhlYWRlciBwc0V0aEhlYWRlciwKLSAgICBXT1JEICAgICAgICAgICAgIHdDdXJyZW50UmF0ZQorICAgIHVuc2lnbmVkIHNob3J0IHdDdXJyZW50UmF0ZQogICAgICk7CiAKIAogCiBzdGF0aWMgdm9pZCBzX3ZGaWxsRnJhZ1BhcmFtZXRlcigKICAgICBQU0RldmljZSBwRGV2aWNlLAotICAgIFBCWVRFICAgIHBieUJ1ZmZlciwKLSAgICBVSU5UICAgICB1VHhUeXBlLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUJ1ZmZlciwKKyAgICB1bnNpZ25lZCBpbnQJdVR4VHlwZSwKICAgICB2b2lkICogICBwdnRkQ3VyciwKLSAgICBXT1JEICAgICB3RnJhZ1R5cGUsCi0gICAgVUlOVCAgICAgY2JSZXFDb3VudAorICAgIHVuc2lnbmVkIHNob3J0IHdGcmFnVHlwZSwKKyAgICB1bnNpZ25lZCBpbnQJY2JSZXFDb3VudAogICAgICk7CiAKIAotc3RhdGljCi1VSU5UCi1zX2NiRmlsbFR4QnVmSGVhZCAoCi0gICAgUFNEZXZpY2UgICAgICAgICBwRGV2aWNlLAotICAgIEJZVEUgICAgICAgICAgICAgYnlQa3RUeXBlLAotICAgIFBCWVRFICAgICAgICAgICAgcGJ5VHhCdWZmZXJBZGRyLAotICAgIFVJTlQgICAgICAgICAgICAgY2JGcmFtZUJvZHlTaXplLAotICAgIFVJTlQgICAgICAgICAgICAgdURNQUlkeCwKLSAgICBQU1R4RGVzYyAgICAgICAgIHBIZWFkVEQsCi0gICAgUFNFdGhlcm5ldEhlYWRlciBwc0V0aEhlYWRlciwKLSAgICBQQllURSAgICAgICAgICAgIHBQYWNrZXQsCi0gICAgQk9PTCAgICAgICAgICAgICBiTmVlZEVuY3J5cHQsCi0gICAgUFNLZXlJdGVtICAgICAgICBwVHJhbnNtaXRLZXksCi0gICAgVUlOVCAgICAgICAgICAgICB1Tm9kZUluZGV4LAotICAgIFBVSU5UICAgICAgICAgICAgcHVNQUNmcmFnTnVtCi0gICAgKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3NfY2JGaWxsVHhCdWZIZWFkKFBTRGV2aWNlIHBEZXZpY2UsIHVuc2lnbmVkIGNoYXIgYnlQa3RUeXBlLCB1bnNpZ25lZCBjaGFyICpwYnlUeEJ1ZmZlckFkZHIsCisJdW5zaWduZWQgaW50IGNiRnJhbWVCb2R5U2l6ZSwgdW5zaWduZWQgaW50IHVETUFJZHgsIFBTVHhEZXNjIHBIZWFkVEQsCisJUFNFdGhlcm5ldEhlYWRlciBwc0V0aEhlYWRlciwgdW5zaWduZWQgY2hhciAqcFBhY2tldCwgYm9vbCBiTmVlZEVuY3J5cHQsCisJUFNLZXlJdGVtIHBUcmFuc21pdEtleSwgdW5zaWduZWQgaW50IHVOb2RlSW5kZXgsIHVuc2lnbmVkIGludCAqcHVNQUNmcmFnTnVtKTsKIAogCiBzdGF0aWMKLVVJTlQKK3Vuc2lnbmVkIGludAogc191RmlsbERhdGFIZWFkICgKICAgICBQU0RldmljZSBwRGV2aWNlLAotICAgIEJZVEUgICAgIGJ5UGt0VHlwZSwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UGt0VHlwZSwKICAgICB2b2lkICogICBwVHhEYXRhSGVhZCwKLSAgICBVSU5UICAgICBjYkZyYW1lTGVuZ3RoLAotICAgIFVJTlQgICAgIHVETUFJZHgsCi0gICAgQk9PTCAgICAgYk5lZWRBY2ssCi0gICAgVUlOVCAgICAgdUZyYWdJZHgsCi0gICAgVUlOVCAgICAgY2JMYXN0RnJhZ21lbnRTaXplLAotICAgIFVJTlQgICAgIHVNQUNmcmFnTnVtLAotICAgIEJZVEUgICAgIGJ5RkJPcHRpb24sCi0gICAgV09SRCAgICAgd0N1cnJlbnRSYXRlCisgICAgdW5zaWduZWQgaW50IGNiRnJhbWVMZW5ndGgsCisgICAgdW5zaWduZWQgaW50IHVETUFJZHgsCisgICAgYm9vbCBiTmVlZEFjaywKKyAgICB1bnNpZ25lZCBpbnQgdUZyYWdJZHgsCisgICAgdW5zaWduZWQgaW50IGNiTGFzdEZyYWdtZW50U2l6ZSwKKyAgICB1bnNpZ25lZCBpbnQgdU1BQ2ZyYWdOdW0sCisgICAgdW5zaWduZWQgY2hhciBieUZCT3B0aW9uLAorICAgIHVuc2lnbmVkIHNob3J0IHdDdXJyZW50UmF0ZQogICAgICk7CiAKIApAQCAtMjEzLDIwICsyMDIsMjAgQEAKIHZvaWQKIHNfdkZpbGxUeEtleSAoCiAgICAgUFNEZXZpY2UgICBwRGV2aWNlLAotICAgIFBCWVRFICAgICAgcGJ5QnVmLAotICAgIFBCWVRFICAgICAgcGJ5SVZIZWFkLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUJ1ZiwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlJVkhlYWQsCiAgICAgUFNLZXlJdGVtICBwVHJhbnNtaXRLZXksCi0gICAgUEJZVEUgICAgICBwYnlIZHJCdWYsCi0gICAgV09SRCAgICAgICB3UGF5bG9hZExlbiwKLSAgICBQQllURSAgICAgIHBNSUNIRFIKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlIZHJCdWYsCisgICAgdW5zaWduZWQgc2hvcnQgd1BheWxvYWRMZW4sCisgICAgdW5zaWduZWQgY2hhciAqcE1JQ0hEUgogICAgICkKIHsKLSAgICBQRFdPUkQgICAgICAgICAgcGR3SVYgPSAoUERXT1JEKSBwYnlJVkhlYWQ7Ci0gICAgUERXT1JEICAgICAgICAgIHBkd0V4dElWID0gKFBEV09SRCkgKChQQllURSlwYnlJVkhlYWQrNCk7Ci0gICAgV09SRCAgICAgICAgICAgIHdWYWx1ZTsKKyAgICB1bnNpZ25lZCBsb25nICpwZHdJViA9ICh1bnNpZ25lZCBsb25nICopIHBieUlWSGVhZDsKKyAgICB1bnNpZ25lZCBsb25nICpwZHdFeHRJViA9ICh1bnNpZ25lZCBsb25nICopICgodW5zaWduZWQgY2hhciAqKXBieUlWSGVhZCs0KTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3VmFsdWU7CiAgICAgUFM4MDJfMTFIZWFkZXIgIHBNQUNIZWFkZXIgPSAoUFM4MDJfMTFIZWFkZXIpcGJ5SGRyQnVmOwotICAgIERXT1JEICAgICAgICAgICBkd1JldklWQ291bnRlcjsKLSAgICBCWVRFICAgICAgICAgICAgYnlLZXlJbmRleCA9IDA7CisgICAgdW5zaWduZWQgbG9uZyBkd1JldklWQ291bnRlcjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5S2V5SW5kZXggPSAwOwogCiAKIApAQCAtMjQwLDEzICsyMjksMTMgQEAKIAogICAgIGlmIChwVHJhbnNtaXRLZXktPmJ5Q2lwaGVyU3VpdGUgPT0gS0VZX0NUTF9XRVApIHsKICAgICAgICAgaWYgKHBUcmFuc21pdEtleS0+dUtleUxlbmd0aCA9PSBXTEFOX1dFUDIzMl9LRVlMRU4gKXsKLSAgICAgICAgICAgIG1lbWNweShwRGV2aWNlLT5hYnlQUk5HLCAoUEJZVEUpJihkd1JldklWQ291bnRlciksIDMpOworICAgICAgICAgICAgbWVtY3B5KHBEZXZpY2UtPmFieVBSTkcsICh1bnNpZ25lZCBjaGFyICopJihkd1JldklWQ291bnRlciksIDMpOwogICAgICAgICAgICAgbWVtY3B5KHBEZXZpY2UtPmFieVBSTkcrMywgcFRyYW5zbWl0S2V5LT5hYnlLZXksIHBUcmFuc21pdEtleS0+dUtleUxlbmd0aCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtZW1jcHkocGJ5QnVmLCAoUEJZVEUpJihkd1JldklWQ291bnRlciksIDMpOworICAgICAgICAgICAgbWVtY3B5KHBieUJ1ZiwgKHVuc2lnbmVkIGNoYXIgKikmKGR3UmV2SVZDb3VudGVyKSwgMyk7CiAgICAgICAgICAgICBtZW1jcHkocGJ5QnVmKzMsIHBUcmFuc21pdEtleS0+YWJ5S2V5LCBwVHJhbnNtaXRLZXktPnVLZXlMZW5ndGgpOwogICAgICAgICAgICAgaWYocFRyYW5zbWl0S2V5LT51S2V5TGVuZ3RoID09IFdMQU5fV0VQNDBfS0VZTEVOKSB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHBieUJ1Zis4LCAoUEJZVEUpJihkd1JldklWQ291bnRlciksIDMpOworICAgICAgICAgICAgICAgIG1lbWNweShwYnlCdWYrOCwgKHVuc2lnbmVkIGNoYXIgKikmKGR3UmV2SVZDb3VudGVyKSwgMyk7CiAgICAgICAgICAgICAgICAgbWVtY3B5KHBieUJ1ZisxMSwgcFRyYW5zbWl0S2V5LT5hYnlLZXksIHBUcmFuc21pdEtleS0+dUtleUxlbmd0aCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtZW1jcHkocERldmljZS0+YWJ5UFJORywgcGJ5QnVmLCAxNik7CkBAIC0yNzAsNyArMjU5LDcgQEAKICAgICAgICAgLy8gTWFrZSBJVgogICAgICAgICBtZW1jcHkocGR3SVYsIHBEZXZpY2UtPmFieVBSTkcsIDMpOwogCi0gICAgICAgICoocGJ5SVZIZWFkKzMpID0gKEJZVEUpKCgoYnlLZXlJbmRleCA8PCA2KSAmIDB4YzApIHwgMHgyMCk7IC8vIDB4MjAgaXMgRXh0SVYKKyAgICAgICAgKihwYnlJVkhlYWQrMykgPSAodW5zaWduZWQgY2hhcikoKChieUtleUluZGV4IDw8IDYpICYgMHhjMCkgfCAweDIwKTsgLy8gMHgyMCBpcyBFeHRJVgogICAgICAgICAvLyBBcHBlbmQgSVYmRXh0SVYgYWZ0ZXIgTWFjIEhlYWRlcgogICAgICAgICAqcGR3RXh0SVYgPSBjcHVfdG9fbGUzMihwVHJhbnNtaXRLZXktPmR3VFNDNDdfMTYpOwogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPInZGaWxsVHhLZXkoKS0tLS0gcGR3RXh0SVY6ICVseFxuIiwgKnBkd0V4dElWKTsKQEAgLTI4NCwzMyArMjczLDMzIEBACiAKICAgICAgICAgLy8gTWFrZSBJVgogICAgICAgICAqcGR3SVYgPSAwOwotICAgICAgICAqKHBieUlWSGVhZCszKSA9IChCWVRFKSgoKGJ5S2V5SW5kZXggPDwgNikgJiAweGMwKSB8IDB4MjApOyAvLyAweDIwIGlzIEV4dElWCi0gICAgICAgICpwZHdJViB8PSBjcHVfdG9fbGUxNigoV09SRCkocFRyYW5zbWl0S2V5LT53VFNDMTVfMCkpOworICAgICAgICAqKHBieUlWSGVhZCszKSA9ICh1bnNpZ25lZCBjaGFyKSgoKGJ5S2V5SW5kZXggPDwgNikgJiAweGMwKSB8IDB4MjApOyAvLyAweDIwIGlzIEV4dElWCisgICAgICAgICpwZHdJViB8PSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpKHBUcmFuc21pdEtleS0+d1RTQzE1XzApKTsKICAgICAgICAgLy9BcHBlbmQgSVYmRXh0SVYgYWZ0ZXIgTWFjIEhlYWRlcgogICAgICAgICAqcGR3RXh0SVYgPSBjcHVfdG9fbGUzMihwVHJhbnNtaXRLZXktPmR3VFNDNDdfMTYpOwogCiAgICAgICAgIC8vRmlsbCBNSUNIRFIwCiAgICAgICAgICpwTUlDSERSID0gMHg1OTsKLSAgICAgICAgKigoUEJZVEUpKHBNSUNIRFIrMSkpID0gMDsgLy8gVHhQcmlvcml0eQorICAgICAgICAqKCh1bnNpZ25lZCBjaGFyICopKHBNSUNIRFIrMSkpID0gMDsgLy8gVHhQcmlvcml0eQogICAgICAgICBtZW1jcHkocE1JQ0hEUisyLCAmKHBNQUNIZWFkZXItPmFieUFkZHIyWzBdKSwgNik7Ci0gICAgICAgICooKFBCWVRFKShwTUlDSERSKzgpKSA9IEhJQllURShISVdPUkQocFRyYW5zbWl0S2V5LT5kd1RTQzQ3XzE2KSk7Ci0gICAgICAgICooKFBCWVRFKShwTUlDSERSKzkpKSA9IExPQllURShISVdPUkQocFRyYW5zbWl0S2V5LT5kd1RTQzQ3XzE2KSk7Ci0gICAgICAgICooKFBCWVRFKShwTUlDSERSKzEwKSkgPSBISUJZVEUoTE9XT1JEKHBUcmFuc21pdEtleS0+ZHdUU0M0N18xNikpOwotICAgICAgICAqKChQQllURSkocE1JQ0hEUisxMSkpID0gTE9CWVRFKExPV09SRChwVHJhbnNtaXRLZXktPmR3VFNDNDdfMTYpKTsKLSAgICAgICAgKigoUEJZVEUpKHBNSUNIRFIrMTIpKSA9IEhJQllURShwVHJhbnNtaXRLZXktPndUU0MxNV8wKTsKLSAgICAgICAgKigoUEJZVEUpKHBNSUNIRFIrMTMpKSA9IExPQllURShwVHJhbnNtaXRLZXktPndUU0MxNV8wKTsKLSAgICAgICAgKigoUEJZVEUpKHBNSUNIRFIrMTQpKSA9IEhJQllURSh3UGF5bG9hZExlbik7Ci0gICAgICAgICooKFBCWVRFKShwTUlDSERSKzE1KSkgPSBMT0JZVEUod1BheWxvYWRMZW4pOworICAgICAgICAqKCh1bnNpZ25lZCBjaGFyICopKHBNSUNIRFIrOCkpID0gSElCWVRFKEhJV09SRChwVHJhbnNtaXRLZXktPmR3VFNDNDdfMTYpKTsKKyAgICAgICAgKigodW5zaWduZWQgY2hhciAqKShwTUlDSERSKzkpKSA9IExPQllURShISVdPUkQocFRyYW5zbWl0S2V5LT5kd1RTQzQ3XzE2KSk7CisgICAgICAgICooKHVuc2lnbmVkIGNoYXIgKikocE1JQ0hEUisxMCkpID0gSElCWVRFKExPV09SRChwVHJhbnNtaXRLZXktPmR3VFNDNDdfMTYpKTsKKyAgICAgICAgKigodW5zaWduZWQgY2hhciAqKShwTUlDSERSKzExKSkgPSBMT0JZVEUoTE9XT1JEKHBUcmFuc21pdEtleS0+ZHdUU0M0N18xNikpOworICAgICAgICAqKCh1bnNpZ25lZCBjaGFyICopKHBNSUNIRFIrMTIpKSA9IEhJQllURShwVHJhbnNtaXRLZXktPndUU0MxNV8wKTsKKyAgICAgICAgKigodW5zaWduZWQgY2hhciAqKShwTUlDSERSKzEzKSkgPSBMT0JZVEUocFRyYW5zbWl0S2V5LT53VFNDMTVfMCk7CisgICAgICAgICooKHVuc2lnbmVkIGNoYXIgKikocE1JQ0hEUisxNCkpID0gSElCWVRFKHdQYXlsb2FkTGVuKTsKKyAgICAgICAgKigodW5zaWduZWQgY2hhciAqKShwTUlDSERSKzE1KSkgPSBMT0JZVEUod1BheWxvYWRMZW4pOwogCiAgICAgICAgIC8vRmlsbCBNSUNIRFIxCi0gICAgICAgICooKFBCWVRFKShwTUlDSERSKzE2KSkgPSAwOyAvLyBITEVOWzE1OjhdCisgICAgICAgICooKHVuc2lnbmVkIGNoYXIgKikocE1JQ0hEUisxNikpID0gMDsgLy8gSExFTlsxNTo4XQogICAgICAgICBpZiAocERldmljZS0+YkxvbmdIZWFkZXIpIHsKLSAgICAgICAgICAgICooKFBCWVRFKShwTUlDSERSKzE3KSkgPSAyODsgLy8gSExFTls3OjBdCisgICAgICAgICAgICAqKCh1bnNpZ25lZCBjaGFyICopKHBNSUNIRFIrMTcpKSA9IDI4OyAvLyBITEVOWzc6MF0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICooKFBCWVRFKShwTUlDSERSKzE3KSkgPSAyMjsgLy8gSExFTls3OjBdCisgICAgICAgICAgICAqKCh1bnNpZ25lZCBjaGFyICopKHBNSUNIRFIrMTcpKSA9IDIyOyAvLyBITEVOWzc6MF0KICAgICAgICAgfQogICAgICAgICB3VmFsdWUgPSBjcHVfdG9fbGUxNihwTUFDSGVhZGVyLT53RnJhbWVDdGwgJiAweEM3OEYpOwotICAgICAgICBtZW1jcHkocE1JQ0hEUisxOCwgKFBCWVRFKSZ3VmFsdWUsIDIpOyAvLyBNU0tGUkFDVEwKKyAgICAgICAgbWVtY3B5KHBNSUNIRFIrMTgsICh1bnNpZ25lZCBjaGFyICopJndWYWx1ZSwgMik7IC8vIE1TS0ZSQUNUTAogICAgICAgICBtZW1jcHkocE1JQ0hEUisyMCwgJihwTUFDSGVhZGVyLT5hYnlBZGRyMVswXSksIDYpOwogICAgICAgICBtZW1jcHkocE1JQ0hEUisyNiwgJihwTUFDSGVhZGVyLT5hYnlBZGRyMlswXSksIDYpOwogCkBAIC0zMTksNyArMzA4LDcgQEAKICAgICAgICAgd1ZhbHVlID0gcE1BQ0hlYWRlci0+d1NlcUN0bDsKICAgICAgICAgd1ZhbHVlICY9IDB4MDAwRjsKICAgICAgICAgd1ZhbHVlID0gY3B1X3RvX2xlMTYod1ZhbHVlKTsKLSAgICAgICAgbWVtY3B5KHBNSUNIRFIrMzgsIChQQllURSkmd1ZhbHVlLCAyKTsgLy8gTVNLU0VRQ1RMCisgICAgICAgIG1lbWNweShwTUlDSERSKzM4LCAodW5zaWduZWQgY2hhciAqKSZ3VmFsdWUsIDIpOyAvLyBNU0tTRVFDVEwKICAgICAgICAgaWYgKHBEZXZpY2UtPmJMb25nSGVhZGVyKSB7CiAgICAgICAgICAgICBtZW1jcHkocE1JQ0hEUis0MCwgJihwTUFDSGVhZGVyLT5hYnlBZGRyNFswXSksIDYpOwogICAgICAgICB9CkBAIC0zMzIsMTMgKzMyMSwxMyBAQAogc192U1dlbmNyeXB0aW9uICgKICAgICBQU0RldmljZSAgICAgICAgICAgIHBEZXZpY2UsCiAgICAgUFNLZXlJdGVtICAgICAgICAgICBwVHJhbnNtaXRLZXksCi0gICAgUEJZVEUgICAgICAgICAgICAgICBwYnlQYXlsb2FkSGVhZCwKLSAgICBXT1JEICAgICAgICAgICAgICAgIHdQYXlsb2FkU2l6ZQorICAgIHVuc2lnbmVkIGNoYXIgKnBieVBheWxvYWRIZWFkLAorICAgIHVuc2lnbmVkIHNob3J0IHdQYXlsb2FkU2l6ZQogICAgICkKIHsKLSAgICBVSU5UICAgY2JJQ1ZsZW4gPSA0OwotICAgIERXT1JEICBkd0lDViA9IDB4RkZGRkZGRkZMOwotICAgIFBEV09SRCBwZHdJQ1Y7CisgICAgdW5zaWduZWQgaW50IGNiSUNWbGVuID0gNDsKKyAgICB1bnNpZ25lZCBsb25nIGR3SUNWID0gMHhGRkZGRkZGRkw7CisgICAgdW5zaWduZWQgbG9uZyAqcGR3SUNWOwogCiAgICAgaWYgKHBUcmFuc21pdEtleSA9PSBOVUxMKQogICAgICAgICByZXR1cm47CkBAIC0zNDcsNyArMzM2LDcgQEAKICAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAvLyBBcHBlbmQgSUNWIGFmdGVyIHBheWxvYWQKICAgICAgICAgZHdJQ1YgPSBDUkNkd0dldENyYzMyRXgocGJ5UGF5bG9hZEhlYWQsIHdQYXlsb2FkU2l6ZSwgZHdJQ1YpOy8vSUNWKFBheWxvYWQpCi0gICAgICAgIHBkd0lDViA9IChQRFdPUkQpKHBieVBheWxvYWRIZWFkICsgd1BheWxvYWRTaXplKTsKKyAgICAgICAgcGR3SUNWID0gKHVuc2lnbmVkIGxvbmcgKikocGJ5UGF5bG9hZEhlYWQgKyB3UGF5bG9hZFNpemUpOwogICAgICAgICAvLyBmaW5hbGx5LCB3ZSBtdXN0IGludmVydCBkd0NSQyB0byBnZXQgdGhlIGNvcnJlY3QgYW5zd2VyCiAgICAgICAgICpwZHdJQ1YgPSBjcHVfdG9fbGUzMih+ZHdJQ1YpOwogICAgICAgICAvLyBSQzQgZW5jcnlwdGlvbgpAQCAtMzU4LDcgKzM0Nyw3IEBACiAgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgLy9BcHBlbmQgSUNWIGFmdGVyIHBheWxvYWQKICAgICAgICAgZHdJQ1YgPSBDUkNkd0dldENyYzMyRXgocGJ5UGF5bG9hZEhlYWQsIHdQYXlsb2FkU2l6ZSwgZHdJQ1YpOy8vSUNWKFBheWxvYWQpCi0gICAgICAgIHBkd0lDViA9IChQRFdPUkQpKHBieVBheWxvYWRIZWFkICsgd1BheWxvYWRTaXplKTsKKyAgICAgICAgcGR3SUNWID0gKHVuc2lnbmVkIGxvbmcgKikocGJ5UGF5bG9hZEhlYWQgKyB3UGF5bG9hZFNpemUpOwogICAgICAgICAvLyBmaW5hbGx5LCB3ZSBtdXN0IGludmVydCBkd0NSQyB0byBnZXQgdGhlIGNvcnJlY3QgYW5zd2VyCiAgICAgICAgICpwZHdJQ1YgPSBjcHVfdG9fbGUzMih+ZHdJQ1YpOwogICAgICAgICAvLyBSQzQgZW5jcnlwdGlvbgpAQCAtMzc3LDI1ICszNjYsMjUgQEAKICAgICAgICAgICAgICBQS19UWVBFXzExR0EgICAgMwogKi8KIHN0YXRpYwotVUlOVAordW5zaWduZWQgaW50CiBzX3VHZXRUeFJzdlRpbWUgKAogICAgIFBTRGV2aWNlIHBEZXZpY2UsCi0gICAgQllURSAgICAgYnlQa3RUeXBlLAotICAgIFVJTlQgICAgIGNiRnJhbWVMZW5ndGgsCi0gICAgV09SRCAgICAgd1JhdGUsCi0gICAgQk9PTCAgICAgYk5lZWRBY2sKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UGt0VHlwZSwKKyAgICB1bnNpZ25lZCBpbnQgY2JGcmFtZUxlbmd0aCwKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmF0ZSwKKyAgICBib29sIGJOZWVkQWNrCiAgICAgKQogewotICAgIFVJTlQgdURhdGFUaW1lLCB1QWNrVGltZTsKKyAgICB1bnNpZ25lZCBpbnQgdURhdGFUaW1lLCB1QWNrVGltZTsKIAogICAgIHVEYXRhVGltZSA9IEJCdUdldEZyYW1lVGltZShwRGV2aWNlLT5ieVByZWFtYmxlVHlwZSwgYnlQa3RUeXBlLCBjYkZyYW1lTGVuZ3RoLCB3UmF0ZSk7CiAjaWZkZWYJUExJQ0VfREVCVUcKIAkvL3ByaW50aygic191R2V0VHhSc3ZUaW1lIGlzICVkXG4iLHVEYXRhVGltZSk7CiAjZW5kaWYKICAgICBpZiAoYnlQa3RUeXBlID09IFBLX1RZUEVfMTFCKSB7Ly9sbGIsQ0NLIG1vZGUKLSAgICAgICAgdUFja1RpbWUgPSBCQnVHZXRGcmFtZVRpbWUocERldmljZS0+YnlQcmVhbWJsZVR5cGUsIGJ5UGt0VHlwZSwgMTQsIChXT1JEKXBEZXZpY2UtPmJ5VG9wQ0NLQmFzaWNSYXRlKTsKKyAgICAgICAgdUFja1RpbWUgPSBCQnVHZXRGcmFtZVRpbWUocERldmljZS0+YnlQcmVhbWJsZVR5cGUsIGJ5UGt0VHlwZSwgMTQsICh1bnNpZ25lZCBzaG9ydClwRGV2aWNlLT5ieVRvcENDS0Jhc2ljUmF0ZSk7CiAgICAgfSBlbHNlIHsvLzExZyAyLjRHIE9GRE0gbW9kZSAmIDExYSA1RyBPRkRNIG1vZGUKLSAgICAgICAgdUFja1RpbWUgPSBCQnVHZXRGcmFtZVRpbWUocERldmljZS0+YnlQcmVhbWJsZVR5cGUsIGJ5UGt0VHlwZSwgMTQsIChXT1JEKXBEZXZpY2UtPmJ5VG9wT0ZETUJhc2ljUmF0ZSk7CisgICAgICAgIHVBY2tUaW1lID0gQkJ1R2V0RnJhbWVUaW1lKHBEZXZpY2UtPmJ5UHJlYW1ibGVUeXBlLCBieVBrdFR5cGUsIDE0LCAodW5zaWduZWQgc2hvcnQpcERldmljZS0+YnlUb3BPRkRNQmFzaWNSYXRlKTsKICAgICB9CiAKICAgICBpZiAoYk5lZWRBY2spIHsKQEAgLTQwOCwxNiArMzk3LDE2IEBACiAKIC8vYnlGcmVxVHlwZTogMD0+NUdIWiAxPT4yLjRHSFoKIHN0YXRpYwotVUlOVAordW5zaWduZWQgaW50CiBzX3VHZXRSVFNDVFNSc3ZUaW1lICgKICAgICBQU0RldmljZSBwRGV2aWNlLAotICAgIEJZVEUgYnlSVFNSc3ZUeXBlLAotICAgIEJZVEUgYnlQa3RUeXBlLAotICAgIFVJTlQgY2JGcmFtZUxlbmd0aCwKLSAgICBXT1JEIHdDdXJyZW50UmF0ZQorICAgIHVuc2lnbmVkIGNoYXIgYnlSVFNSc3ZUeXBlLAorICAgIHVuc2lnbmVkIGNoYXIgYnlQa3RUeXBlLAorICAgIHVuc2lnbmVkIGludCBjYkZyYW1lTGVuZ3RoLAorICAgIHVuc2lnbmVkIHNob3J0IHdDdXJyZW50UmF0ZQogICAgICkKIHsKLSAgICBVSU5UIHVScnZUaW1lICAsIHVSVFNUaW1lLCB1Q1RTVGltZSwgdUFja1RpbWUsIHVEYXRhVGltZTsKKyAgICB1bnNpZ25lZCBpbnQgdVJydlRpbWUgICwgdVJUU1RpbWUsIHVDVFNUaW1lLCB1QWNrVGltZSwgdURhdGFUaW1lOwogCiAgICAgdVJydlRpbWUgPSB1UlRTVGltZSA9IHVDVFNUaW1lID0gdUFja1RpbWUgPSB1RGF0YVRpbWUgPSAwOwogCkBAIC00NTAsMjIgKzQzOSwyMiBAQAogCiAvL2J5RnJlcVR5cGUgMDogNUdIeiwgMToyLjRHaHoKIHN0YXRpYwotVUlOVAordW5zaWduZWQgaW50CiBzX3VHZXREYXRhRHVyYXRpb24gKAogICAgIFBTRGV2aWNlIHBEZXZpY2UsCi0gICAgQllURSAgICAgYnlEdXJUeXBlLAotICAgIFVJTlQgICAgIGNiRnJhbWVMZW5ndGgsCi0gICAgQllURSAgICAgYnlQa3RUeXBlLAotICAgIFdPUkQgICAgIHdSYXRlLAotICAgIEJPT0wgICAgIGJOZWVkQWNrLAotICAgIFVJTlQgICAgIHVGcmFnSWR4LAotICAgIFVJTlQgICAgIGNiTGFzdEZyYWdtZW50U2l6ZSwKLSAgICBVSU5UICAgICB1TUFDZnJhZ051bSwKLSAgICBCWVRFICAgICBieUZCT3B0aW9uCisgICAgdW5zaWduZWQgY2hhciBieUR1clR5cGUsCisgICAgdW5zaWduZWQgaW50IGNiRnJhbWVMZW5ndGgsCisgICAgdW5zaWduZWQgY2hhciBieVBrdFR5cGUsCisgICAgdW5zaWduZWQgc2hvcnQgd1JhdGUsCisgICAgYm9vbCBiTmVlZEFjaywKKyAgICB1bnNpZ25lZCBpbnQgdUZyYWdJZHgsCisgICAgdW5zaWduZWQgaW50IGNiTGFzdEZyYWdtZW50U2l6ZSwKKyAgICB1bnNpZ25lZCBpbnQgdU1BQ2ZyYWdOdW0sCisgICAgdW5zaWduZWQgY2hhciBieUZCT3B0aW9uCiAgICAgKQogewotICAgIEJPT0wgYkxhc3RGcmFnID0gMDsKLSAgICBVSU5UIHVBY2tUaW1lID0wLCB1TmV4dFBrdFRpbWUgPSAwOworICAgIGJvb2wgYkxhc3RGcmFnID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgdUFja1RpbWUgPTAsIHVOZXh0UGt0VGltZSA9IDA7CiAKIAogCkBAIC02MTQsMjUgKzYwMywyNSBAQAogICAgICAgICBicmVhazsKICAgICB9CiAKLQlBU1NFUlQoRkFMU0UpOworCUFTU0VSVChmYWxzZSk7CiAJcmV0dXJuIDA7CiB9CiAKIAogLy9ieUZyZXFUeXBlOiAwPT41R0haIDE9PjIuNEdIWgogc3RhdGljCi1VSU5UCit1bnNpZ25lZCBpbnQKIHNfdUdldFJUU0NUU0R1cmF0aW9uICgKICAgICBQU0RldmljZSBwRGV2aWNlLAotICAgIEJZVEUgYnlEdXJUeXBlLAotICAgIFVJTlQgY2JGcmFtZUxlbmd0aCwKLSAgICBCWVRFIGJ5UGt0VHlwZSwKLSAgICBXT1JEIHdSYXRlLAotICAgIEJPT0wgYk5lZWRBY2ssCi0gICAgQllURSBieUZCT3B0aW9uCisgICAgdW5zaWduZWQgY2hhciBieUR1clR5cGUsCisgICAgdW5zaWduZWQgaW50IGNiRnJhbWVMZW5ndGgsCisgICAgdW5zaWduZWQgY2hhciBieVBrdFR5cGUsCisgICAgdW5zaWduZWQgc2hvcnQgd1JhdGUsCisgICAgYm9vbCBiTmVlZEFjaywKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RkJPcHRpb24KICAgICApCiB7Ci0gICAgVUlOVCB1Q1RTVGltZSA9IDAsIHVEdXJUaW1lID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgdUNUU1RpbWUgPSAwLCB1RHVyVGltZSA9IDA7CiAKIAogICAgIHN3aXRjaCAoYnlEdXJUeXBlKSB7CkBAIC03MTksMjIgKzcwOCwyMiBAQAogCiAKIHN0YXRpYwotVUlOVAordW5zaWduZWQgaW50CiBzX3VGaWxsRGF0YUhlYWQgKAogICAgIFBTRGV2aWNlIHBEZXZpY2UsCi0gICAgQllURSAgICAgYnlQa3RUeXBlLAorICAgIHVuc2lnbmVkIGNoYXIgYnlQa3RUeXBlLAogICAgIHZvaWQgKiAgIHBUeERhdGFIZWFkLAotICAgIFVJTlQgICAgIGNiRnJhbWVMZW5ndGgsCi0gICAgVUlOVCAgICAgdURNQUlkeCwKLSAgICBCT09MICAgICBiTmVlZEFjaywKLSAgICBVSU5UICAgICB1RnJhZ0lkeCwKLSAgICBVSU5UICAgICBjYkxhc3RGcmFnbWVudFNpemUsCi0gICAgVUlOVCAgICAgdU1BQ2ZyYWdOdW0sCi0gICAgQllURSAgICAgYnlGQk9wdGlvbiwKLSAgICBXT1JEICAgICB3Q3VycmVudFJhdGUKKyAgICB1bnNpZ25lZCBpbnQgY2JGcmFtZUxlbmd0aCwKKyAgICB1bnNpZ25lZCBpbnQgdURNQUlkeCwKKyAgICBib29sIGJOZWVkQWNrLAorICAgIHVuc2lnbmVkIGludCB1RnJhZ0lkeCwKKyAgICB1bnNpZ25lZCBpbnQgY2JMYXN0RnJhZ21lbnRTaXplLAorICAgIHVuc2lnbmVkIGludCB1TUFDZnJhZ051bSwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RkJPcHRpb24sCisgICAgdW5zaWduZWQgc2hvcnQgd0N1cnJlbnRSYXRlCiAgICAgKQogewotICAgIFdPUkQgIHdMZW4gPSAweDAwMDA7CisgICAgdW5zaWduZWQgc2hvcnQgd0xlbiA9IDB4MDAwMDsKIAogICAgIGlmIChwVHhEYXRhSGVhZCA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiAwOwpAQCAtNzQ1LDE5ICs3MzQsMTkgQEAKICAgICAgICAgICAgIFBTVHhEYXRhSGVhZF9nIHBCdWYgPSAoUFNUeERhdGFIZWFkX2cpcFR4RGF0YUhlYWQ7CiAgICAgICAgICAgICAvL0dldCBTaWduYWxGaWVsZCxTZXJ2aWNlRmllbGQsTGVuZ3RoCiAgICAgICAgICAgICBCQnZDYWN1bGF0ZVBhcmFtZXRlcihwRGV2aWNlLCBjYkZyYW1lTGVuZ3RoLCB3Q3VycmVudFJhdGUsIGJ5UGt0VHlwZSwKLSAgICAgICAgICAgICAgICAoUFdPUkQpJih3TGVuKSwgKFBCWVRFKSYocEJ1Zi0+YnlTZXJ2aWNlRmllbGRfYSksIChQQllURSkmKHBCdWYtPmJ5U2lnbmFsRmllbGRfYSkKKyAgICAgICAgICAgICAgICAodW5zaWduZWQgc2hvcnQgKikmKHdMZW4pLCAodW5zaWduZWQgY2hhciAqKSYocEJ1Zi0+YnlTZXJ2aWNlRmllbGRfYSksICh1bnNpZ25lZCBjaGFyICopJihwQnVmLT5ieVNpZ25hbEZpZWxkX2EpCiAgICAgICAgICAgICApOwogICAgICAgICAgICAgcEJ1Zi0+d1RyYW5zbWl0TGVuZ3RoX2EgPSBjcHVfdG9fbGUxNih3TGVuKTsKICAgICAgICAgICAgIEJCdkNhY3VsYXRlUGFyYW1ldGVyKHBEZXZpY2UsIGNiRnJhbWVMZW5ndGgsIHBEZXZpY2UtPmJ5VG9wQ0NLQmFzaWNSYXRlLCBQS19UWVBFXzExQiwKLSAgICAgICAgICAgICAgICAoUFdPUkQpJih3TGVuKSwgKFBCWVRFKSYocEJ1Zi0+YnlTZXJ2aWNlRmllbGRfYiksIChQQllURSkmKHBCdWYtPmJ5U2lnbmFsRmllbGRfYikKKyAgICAgICAgICAgICAgICAodW5zaWduZWQgc2hvcnQgKikmKHdMZW4pLCAodW5zaWduZWQgY2hhciAqKSYocEJ1Zi0+YnlTZXJ2aWNlRmllbGRfYiksICh1bnNpZ25lZCBjaGFyICopJihwQnVmLT5ieVNpZ25hbEZpZWxkX2IpCiAgICAgICAgICAgICApOwogICAgICAgICAgICAgcEJ1Zi0+d1RyYW5zbWl0TGVuZ3RoX2IgPSBjcHVfdG9fbGUxNih3TGVuKTsKICAgICAgICAgICAgIC8vR2V0IER1cmF0aW9uIGFuZCBUaW1lU3RhbXAKLSAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbl9hID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0RGF0YUR1cmF0aW9uKHBEZXZpY2UsIERBVEFEVVJfQSwgY2JGcmFtZUxlbmd0aCwKKyAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbl9hID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldERhdGFEdXJhdGlvbihwRGV2aWNlLCBEQVRBRFVSX0EsIGNiRnJhbWVMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIHVGcmFnSWR4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2JMYXN0RnJhZ21lbnRTaXplLCB1TUFDZnJhZ051bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5RkJPcHRpb24pKTsgLy8xOiAyLjRHSHoKLSAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbl9iID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0RGF0YUR1cmF0aW9uKHBEZXZpY2UsIERBVEFEVVJfQiwgY2JGcmFtZUxlbmd0aCwKKyAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbl9iID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldERhdGFEdXJhdGlvbihwRGV2aWNlLCBEQVRBRFVSX0IsIGNiRnJhbWVMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQS19UWVBFXzExQiwgcERldmljZS0+YnlUb3BDQ0tCYXNpY1JhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiTmVlZEFjaywgdUZyYWdJZHgsIGNiTGFzdEZyYWdtZW50U2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVNQUNmcmFnTnVtLCBieUZCT3B0aW9uKSk7IC8vMTogMi40CkBAIC03NzEsMjEgKzc2MCwyMSBAQAogICAgICAgICAgICAgUFNUeERhdGFIZWFkX2dfRkIgcEJ1ZiA9IChQU1R4RGF0YUhlYWRfZ19GQilwVHhEYXRhSGVhZDsKICAgICAgICAgICAgIC8vR2V0IFNpZ25hbEZpZWxkLFNlcnZpY2VGaWVsZCxMZW5ndGgKICAgICAgICAgICAgIEJCdkNhY3VsYXRlUGFyYW1ldGVyKHBEZXZpY2UsIGNiRnJhbWVMZW5ndGgsIHdDdXJyZW50UmF0ZSwgYnlQa3RUeXBlLAotICAgICAgICAgICAgICAgIChQV09SRCkmKHdMZW4pLCAoUEJZVEUpJihwQnVmLT5ieVNlcnZpY2VGaWVsZF9hKSwgKFBCWVRFKSYocEJ1Zi0+YnlTaWduYWxGaWVsZF9hKQorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBzaG9ydCAqKSYod0xlbiksICh1bnNpZ25lZCBjaGFyICopJihwQnVmLT5ieVNlcnZpY2VGaWVsZF9hKSwgKHVuc2lnbmVkIGNoYXIgKikmKHBCdWYtPmJ5U2lnbmFsRmllbGRfYSkKICAgICAgICAgICAgICk7CiAgICAgICAgICAgICBwQnVmLT53VHJhbnNtaXRMZW5ndGhfYSA9IGNwdV90b19sZTE2KHdMZW4pOwogICAgICAgICAgICAgQkJ2Q2FjdWxhdGVQYXJhbWV0ZXIocERldmljZSwgY2JGcmFtZUxlbmd0aCwgcERldmljZS0+YnlUb3BDQ0tCYXNpY1JhdGUsIFBLX1RZUEVfMTFCLAotICAgICAgICAgICAgICAgIChQV09SRCkmKHdMZW4pLCAoUEJZVEUpJihwQnVmLT5ieVNlcnZpY2VGaWVsZF9iKSwgKFBCWVRFKSYocEJ1Zi0+YnlTaWduYWxGaWVsZF9iKQorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBzaG9ydCAqKSYod0xlbiksICh1bnNpZ25lZCBjaGFyICopJihwQnVmLT5ieVNlcnZpY2VGaWVsZF9iKSwgKHVuc2lnbmVkIGNoYXIgKikmKHBCdWYtPmJ5U2lnbmFsRmllbGRfYikKICAgICAgICAgICAgICk7CiAgICAgICAgICAgICBwQnVmLT53VHJhbnNtaXRMZW5ndGhfYiA9IGNwdV90b19sZTE2KHdMZW4pOwogICAgICAgICAgICAgLy9HZXQgRHVyYXRpb24gYW5kIFRpbWVTdGFtcAotICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uX2EgPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXREYXRhRHVyYXRpb24ocERldmljZSwgREFUQURVUl9BLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsCisgICAgICAgICAgICBwQnVmLT53RHVyYXRpb25fYSA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydClzX3VHZXREYXRhRHVyYXRpb24ocERldmljZSwgREFUQURVUl9BLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIHVGcmFnSWR4LCBjYkxhc3RGcmFnbWVudFNpemUsIHVNQUNmcmFnTnVtLCBieUZCT3B0aW9uKSk7IC8vMTogMi40R0h6Ci0gICAgICAgICAgICBwQnVmLT53RHVyYXRpb25fYiA9IGNwdV90b19sZTE2KChXT1JEKXNfdUdldERhdGFEdXJhdGlvbihwRGV2aWNlLCBEQVRBRFVSX0IsIGNiRnJhbWVMZW5ndGgsIFBLX1RZUEVfMTFCLAorICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uX2IgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0RGF0YUR1cmF0aW9uKHBEZXZpY2UsIERBVEFEVVJfQiwgY2JGcmFtZUxlbmd0aCwgUEtfVFlQRV8xMUIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5VG9wQ0NLQmFzaWNSYXRlLCBiTmVlZEFjaywgdUZyYWdJZHgsIGNiTGFzdEZyYWdtZW50U2l6ZSwgdU1BQ2ZyYWdOdW0sIGJ5RkJPcHRpb24pKTsgLy8xOiAyLjRHSHoKLSAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbl9hX2YwID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0RGF0YUR1cmF0aW9uKHBEZXZpY2UsIERBVEFEVVJfQV9GMCwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLAorICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uX2FfZjAgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0RGF0YUR1cmF0aW9uKHBEZXZpY2UsIERBVEFEVVJfQV9GMCwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Q3VycmVudFJhdGUsIGJOZWVkQWNrLCB1RnJhZ0lkeCwgY2JMYXN0RnJhZ21lbnRTaXplLCB1TUFDZnJhZ051bSwgYnlGQk9wdGlvbikpOyAvLzE6IDIuNEdIegotICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uX2FfZjEgPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXREYXRhRHVyYXRpb24ocERldmljZSwgREFUQURVUl9BX0YxLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsCisgICAgICAgICAgICBwQnVmLT53RHVyYXRpb25fYV9mMSA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydClzX3VHZXREYXRhRHVyYXRpb24ocERldmljZSwgREFUQURVUl9BX0YxLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIHVGcmFnSWR4LCBjYkxhc3RGcmFnbWVudFNpemUsIHVNQUNmcmFnTnVtLCBieUZCT3B0aW9uKSk7IC8vMTogMi40R0h6CiAKICAgICAgICAgICAgIHBCdWYtPndUaW1lU3RhbXBPZmZfYSA9IGNwdV90b19sZTE2KHdUaW1lU3RhbXBPZmZbcERldmljZS0+YnlQcmVhbWJsZVR5cGUlMl1bd0N1cnJlbnRSYXRlJU1BWF9SQVRFXSk7CkBAIC04MDAsMTYgKzc4OSwxNiBAQAogICAgICAgICAgICAgUFNUeERhdGFIZWFkX2FfRkIgcEJ1ZiA9IChQU1R4RGF0YUhlYWRfYV9GQilwVHhEYXRhSGVhZDsKICAgICAgICAgICAgIC8vR2V0IFNpZ25hbEZpZWxkLFNlcnZpY2VGaWVsZCxMZW5ndGgKICAgICAgICAgICAgIEJCdkNhY3VsYXRlUGFyYW1ldGVyKHBEZXZpY2UsIGNiRnJhbWVMZW5ndGgsIHdDdXJyZW50UmF0ZSwgYnlQa3RUeXBlLAotICAgICAgICAgICAgICAgIChQV09SRCkmKHdMZW4pLCAoUEJZVEUpJihwQnVmLT5ieVNlcnZpY2VGaWVsZCksIChQQllURSkmKHBCdWYtPmJ5U2lnbmFsRmllbGQpCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIHNob3J0ICopJih3TGVuKSwgKHVuc2lnbmVkIGNoYXIgKikmKHBCdWYtPmJ5U2VydmljZUZpZWxkKSwgKHVuc2lnbmVkIGNoYXIgKikmKHBCdWYtPmJ5U2lnbmFsRmllbGQpCiAgICAgICAgICAgICApOwogICAgICAgICAgICAgcEJ1Zi0+d1RyYW5zbWl0TGVuZ3RoID0gY3B1X3RvX2xlMTYod0xlbik7CiAgICAgICAgICAgICAvL0dldCBEdXJhdGlvbiBhbmQgVGltZVN0YW1wT2ZmCiAKLSAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbiA9IGNwdV90b19sZTE2KChXT1JEKXNfdUdldERhdGFEdXJhdGlvbihwRGV2aWNlLCBEQVRBRFVSX0EsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwKKyAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbiA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydClzX3VHZXREYXRhRHVyYXRpb24ocERldmljZSwgREFUQURVUl9BLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgdUZyYWdJZHgsIGNiTGFzdEZyYWdtZW50U2l6ZSwgdU1BQ2ZyYWdOdW0sIGJ5RkJPcHRpb24pKTsgLy8wOiA1R0h6Ci0gICAgICAgICAgICBwQnVmLT53RHVyYXRpb25fZjAgPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXREYXRhRHVyYXRpb24ocERldmljZSwgREFUQURVUl9BX0YwLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsCisgICAgICAgICAgICBwQnVmLT53RHVyYXRpb25fZjAgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0RGF0YUR1cmF0aW9uKHBEZXZpY2UsIERBVEFEVVJfQV9GMCwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIHVGcmFnSWR4LCBjYkxhc3RGcmFnbWVudFNpemUsIHVNQUNmcmFnTnVtLCBieUZCT3B0aW9uKSk7IC8vMDogNUdIegotICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uX2YxID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0RGF0YUR1cmF0aW9uKHBEZXZpY2UsIERBVEFEVVJfQV9GMSwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLAorICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uX2YxID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldERhdGFEdXJhdGlvbihwRGV2aWNlLCBEQVRBRFVSX0FfRjEsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Q3VycmVudFJhdGUsIGJOZWVkQWNrLCB1RnJhZ0lkeCwgY2JMYXN0RnJhZ21lbnRTaXplLCB1TUFDZnJhZ051bSwgYnlGQk9wdGlvbikpOyAvLzA6IDVHSHoKICAgICAgICAgICAgIHBCdWYtPndUaW1lU3RhbXBPZmYgPSBjcHVfdG9fbGUxNih3VGltZVN0YW1wT2ZmW3BEZXZpY2UtPmJ5UHJlYW1ibGVUeXBlJTJdW3dDdXJyZW50UmF0ZSVNQVhfUkFURV0pOwogICAgICAgICAgICAgcmV0dXJuIChwQnVmLT53RHVyYXRpb24pOwpAQCAtODE3LDEyICs4MDYsMTIgQEAKICAgICAgICAgICAgIFBTVHhEYXRhSGVhZF9hYiBwQnVmID0gKFBTVHhEYXRhSGVhZF9hYilwVHhEYXRhSGVhZDsKICAgICAgICAgICAgIC8vR2V0IFNpZ25hbEZpZWxkLFNlcnZpY2VGaWVsZCxMZW5ndGgKICAgICAgICAgICAgIEJCdkNhY3VsYXRlUGFyYW1ldGVyKHBEZXZpY2UsIGNiRnJhbWVMZW5ndGgsIHdDdXJyZW50UmF0ZSwgYnlQa3RUeXBlLAotICAgICAgICAgICAgICAgIChQV09SRCkmKHdMZW4pLCAoUEJZVEUpJihwQnVmLT5ieVNlcnZpY2VGaWVsZCksIChQQllURSkmKHBCdWYtPmJ5U2lnbmFsRmllbGQpCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIHNob3J0ICopJih3TGVuKSwgKHVuc2lnbmVkIGNoYXIgKikmKHBCdWYtPmJ5U2VydmljZUZpZWxkKSwgKHVuc2lnbmVkIGNoYXIgKikmKHBCdWYtPmJ5U2lnbmFsRmllbGQpCiAgICAgICAgICAgICApOwogICAgICAgICAgICAgcEJ1Zi0+d1RyYW5zbWl0TGVuZ3RoID0gY3B1X3RvX2xlMTYod0xlbik7CiAgICAgICAgICAgICAvL0dldCBEdXJhdGlvbiBhbmQgVGltZVN0YW1wT2ZmCiAKLSAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbiA9IGNwdV90b19sZTE2KChXT1JEKXNfdUdldERhdGFEdXJhdGlvbihwRGV2aWNlLCBEQVRBRFVSX0EsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwKKyAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbiA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydClzX3VHZXREYXRhRHVyYXRpb24ocERldmljZSwgREFUQURVUl9BLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgdUZyYWdJZHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2JMYXN0RnJhZ21lbnRTaXplLCB1TUFDZnJhZ051bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieUZCT3B0aW9uKSk7CkBAIC04MzUsMTEgKzgyNCwxMSBAQAogICAgICAgICAgICAgUFNUeERhdGFIZWFkX2FiIHBCdWYgPSAoUFNUeERhdGFIZWFkX2FiKXBUeERhdGFIZWFkOwogICAgICAgICAgICAgLy9HZXQgU2lnbmFsRmllbGQsU2VydmljZUZpZWxkLExlbmd0aAogICAgICAgICAgICAgQkJ2Q2FjdWxhdGVQYXJhbWV0ZXIocERldmljZSwgY2JGcmFtZUxlbmd0aCwgd0N1cnJlbnRSYXRlLCBieVBrdFR5cGUsCi0gICAgICAgICAgICAgICAgKFBXT1JEKSYod0xlbiksIChQQllURSkmKHBCdWYtPmJ5U2VydmljZUZpZWxkKSwgKFBCWVRFKSYocEJ1Zi0+YnlTaWduYWxGaWVsZCkKKyAgICAgICAgICAgICAgICAodW5zaWduZWQgc2hvcnQgKikmKHdMZW4pLCAodW5zaWduZWQgY2hhciAqKSYocEJ1Zi0+YnlTZXJ2aWNlRmllbGQpLCAodW5zaWduZWQgY2hhciAqKSYocEJ1Zi0+YnlTaWduYWxGaWVsZCkKICAgICAgICAgICAgICk7CiAgICAgICAgICAgICBwQnVmLT53VHJhbnNtaXRMZW5ndGggPSBjcHVfdG9fbGUxNih3TGVuKTsKICAgICAgICAgICAgIC8vR2V0IER1cmF0aW9uIGFuZCBUaW1lU3RhbXBPZmYKLSAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbiA9IGNwdV90b19sZTE2KChXT1JEKXNfdUdldERhdGFEdXJhdGlvbihwRGV2aWNlLCBEQVRBRFVSX0IsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwKKyAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbiA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydClzX3VHZXREYXRhRHVyYXRpb24ocERldmljZSwgREFUQURVUl9CLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgdUZyYWdJZHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2JMYXN0RnJhZ21lbnRTaXplLCB1TUFDZnJhZ051bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieUZCT3B0aW9uKSk7CkBAIC04NTQsMTggKzg0MywxOCBAQAogdm9pZAogc192RmlsbFJUU0hlYWQgKAogICAgIFBTRGV2aWNlICAgICAgICAgcERldmljZSwKLSAgICBCWVRFICAgICAgICAgICAgIGJ5UGt0VHlwZSwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UGt0VHlwZSwKICAgICB2b2lkICogICAgICAgICAgIHB2UlRTLAotICAgIFVJTlQgICAgICAgICAgICAgY2JGcmFtZUxlbmd0aCwKLSAgICBCT09MICAgICAgICAgICAgIGJOZWVkQWNrLAotICAgIEJPT0wgICAgICAgICAgICAgYkRpc0NSQywKKyAgICB1bnNpZ25lZCBpbnQgY2JGcmFtZUxlbmd0aCwKKyAgICBib29sIGJOZWVkQWNrLAorICAgIGJvb2wgYkRpc0NSQywKICAgICBQU0V0aGVybmV0SGVhZGVyIHBzRXRoSGVhZGVyLAotICAgIFdPUkQgICAgICAgICAgICAgd0N1cnJlbnRSYXRlLAotICAgIEJZVEUgICAgICAgICAgICAgYnlGQk9wdGlvbgorICAgIHVuc2lnbmVkIHNob3J0IHdDdXJyZW50UmF0ZSwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RkJPcHRpb24KICAgICApCiB7Ci0gICAgVUlOVCB1UlRTRnJhbWVMZW4gPSAyMDsKLSAgICBXT1JEICB3TGVuID0gMHgwMDAwOworICAgIHVuc2lnbmVkIGludCB1UlRTRnJhbWVMZW4gPSAyMDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3TGVuID0gMHgwMDAwOwogCiAgICAgaWYgKHB2UlRTID09IE5VTEwpCiAgICAgCXJldHVybjsKQEAgLTg4MywxNyArODcyLDE3IEBACiAgICAgICAgICAgICBQU1JUU19nIHBCdWYgPSAoUFNSVFNfZylwdlJUUzsKICAgICAgICAgICAgIC8vR2V0IFNpZ25hbEZpZWxkLFNlcnZpY2VGaWVsZCxMZW5ndGgKICAgICAgICAgICAgIEJCdkNhY3VsYXRlUGFyYW1ldGVyKHBEZXZpY2UsIHVSVFNGcmFtZUxlbiwgcERldmljZS0+YnlUb3BDQ0tCYXNpY1JhdGUsIFBLX1RZUEVfMTFCLAotICAgICAgICAgICAgICAgIChQV09SRCkmKHdMZW4pLCAoUEJZVEUpJihwQnVmLT5ieVNlcnZpY2VGaWVsZF9iKSwgKFBCWVRFKSYocEJ1Zi0+YnlTaWduYWxGaWVsZF9iKQorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBzaG9ydCAqKSYod0xlbiksICh1bnNpZ25lZCBjaGFyICopJihwQnVmLT5ieVNlcnZpY2VGaWVsZF9iKSwgKHVuc2lnbmVkIGNoYXIgKikmKHBCdWYtPmJ5U2lnbmFsRmllbGRfYikKICAgICAgICAgICAgICk7CiAgICAgICAgICAgICBwQnVmLT53VHJhbnNtaXRMZW5ndGhfYiA9IGNwdV90b19sZTE2KHdMZW4pOwogICAgICAgICAgICAgQkJ2Q2FjdWxhdGVQYXJhbWV0ZXIocERldmljZSwgdVJUU0ZyYW1lTGVuLCBwRGV2aWNlLT5ieVRvcE9GRE1CYXNpY1JhdGUsIGJ5UGt0VHlwZSwKLSAgICAgICAgICAgICAgICAoUFdPUkQpJih3TGVuKSwgKFBCWVRFKSYocEJ1Zi0+YnlTZXJ2aWNlRmllbGRfYSksIChQQllURSkmKHBCdWYtPmJ5U2lnbmFsRmllbGRfYSkKKyAgICAgICAgICAgICAgICAodW5zaWduZWQgc2hvcnQgKikmKHdMZW4pLCAodW5zaWduZWQgY2hhciAqKSYocEJ1Zi0+YnlTZXJ2aWNlRmllbGRfYSksICh1bnNpZ25lZCBjaGFyICopJihwQnVmLT5ieVNpZ25hbEZpZWxkX2EpCiAgICAgICAgICAgICApOwogICAgICAgICAgICAgcEJ1Zi0+d1RyYW5zbWl0TGVuZ3RoX2EgPSBjcHVfdG9fbGUxNih3TGVuKTsKICAgICAgICAgICAgIC8vR2V0IER1cmF0aW9uCi0gICAgICAgICAgICBwQnVmLT53RHVyYXRpb25fYmIgPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXRSVFNDVFNEdXJhdGlvbihwRGV2aWNlLCBSVFNEVVJfQkIsIGNiRnJhbWVMZW5ndGgsIFBLX1RZUEVfMTFCLCBwRGV2aWNlLT5ieVRvcENDS0Jhc2ljUmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pKTsgICAgLy8wOlJUU0R1cmF0aW9uX2JiLCAxOjIuNEcsIDE6Q0NLRGF0YQotICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uX2FhID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgUlRTRFVSX0FBLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pKTsgLy8yOlJUU0R1cmF0aW9uX2FhLCAxOjIuNEcsIDIsMzogMi40RyBPRkRNRGF0YQotICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uX2JhID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgUlRTRFVSX0JBLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pKTsgLy8xOlJUU0R1cmF0aW9uX2JhLCAxOjIuNEcsIDIsMzoyLjRHIE9GRE0gRGF0YQorICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uX2JiID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldFJUU0NUU0R1cmF0aW9uKHBEZXZpY2UsIFJUU0RVUl9CQiwgY2JGcmFtZUxlbmd0aCwgUEtfVFlQRV8xMUIsIHBEZXZpY2UtPmJ5VG9wQ0NLQmFzaWNSYXRlLCBiTmVlZEFjaywgYnlGQk9wdGlvbikpOyAgICAvLzA6UlRTRHVyYXRpb25fYmIsIDE6Mi40RywgMTpDQ0tEYXRhCisgICAgICAgICAgICBwQnVmLT53RHVyYXRpb25fYWEgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgUlRTRFVSX0FBLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pKTsgLy8yOlJUU0R1cmF0aW9uX2FhLCAxOjIuNEcsIDIsMzogMi40RyBPRkRNRGF0YQorICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uX2JhID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldFJUU0NUU0R1cmF0aW9uKHBEZXZpY2UsIFJUU0RVUl9CQSwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLCB3Q3VycmVudFJhdGUsIGJOZWVkQWNrLCBieUZCT3B0aW9uKSk7IC8vMTpSVFNEdXJhdGlvbl9iYSwgMToyLjRHLCAyLDM6Mi40RyBPRkRNIERhdGEKIAogICAgICAgICAgICAgcEJ1Zi0+RGF0YS53RHVyYXRpb25JRCA9IHBCdWYtPndEdXJhdGlvbl9hYTsKICAgICAgICAgICAgIC8vR2V0IFJUUyBGcmFtZSBib2R5CkBAIC05MTYsMjIgKzkwNSwyMiBAQAogICAgICAgICAgICBQU1JUU19nX0ZCIHBCdWYgPSAoUFNSVFNfZ19GQilwdlJUUzsKICAgICAgICAgICAgIC8vR2V0IFNpZ25hbEZpZWxkLFNlcnZpY2VGaWVsZCxMZW5ndGgKICAgICAgICAgICAgIEJCdkNhY3VsYXRlUGFyYW1ldGVyKHBEZXZpY2UsIHVSVFNGcmFtZUxlbiwgcERldmljZS0+YnlUb3BDQ0tCYXNpY1JhdGUsIFBLX1RZUEVfMTFCLAotICAgICAgICAgICAgICAgIChQV09SRCkmKHdMZW4pLCAoUEJZVEUpJihwQnVmLT5ieVNlcnZpY2VGaWVsZF9iKSwgKFBCWVRFKSYocEJ1Zi0+YnlTaWduYWxGaWVsZF9iKQorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBzaG9ydCAqKSYod0xlbiksICh1bnNpZ25lZCBjaGFyICopJihwQnVmLT5ieVNlcnZpY2VGaWVsZF9iKSwgKHVuc2lnbmVkIGNoYXIgKikmKHBCdWYtPmJ5U2lnbmFsRmllbGRfYikKICAgICAgICAgICAgICk7CiAgICAgICAgICAgICBwQnVmLT53VHJhbnNtaXRMZW5ndGhfYiA9IGNwdV90b19sZTE2KHdMZW4pOwogICAgICAgICAgICAgQkJ2Q2FjdWxhdGVQYXJhbWV0ZXIocERldmljZSwgdVJUU0ZyYW1lTGVuLCBwRGV2aWNlLT5ieVRvcE9GRE1CYXNpY1JhdGUsIGJ5UGt0VHlwZSwKLSAgICAgICAgICAgICAgICAoUFdPUkQpJih3TGVuKSwgKFBCWVRFKSYocEJ1Zi0+YnlTZXJ2aWNlRmllbGRfYSksIChQQllURSkmKHBCdWYtPmJ5U2lnbmFsRmllbGRfYSkKKyAgICAgICAgICAgICAgICAodW5zaWduZWQgc2hvcnQgKikmKHdMZW4pLCAodW5zaWduZWQgY2hhciAqKSYocEJ1Zi0+YnlTZXJ2aWNlRmllbGRfYSksICh1bnNpZ25lZCBjaGFyICopJihwQnVmLT5ieVNpZ25hbEZpZWxkX2EpCiAgICAgICAgICAgICApOwogICAgICAgICAgICAgcEJ1Zi0+d1RyYW5zbWl0TGVuZ3RoX2EgPSBjcHVfdG9fbGUxNih3TGVuKTsKIAogICAgICAgICAgICAgLy9HZXQgRHVyYXRpb24KLSAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbl9iYiA9IGNwdV90b19sZTE2KChXT1JEKXNfdUdldFJUU0NUU0R1cmF0aW9uKHBEZXZpY2UsIFJUU0RVUl9CQiwgY2JGcmFtZUxlbmd0aCwgUEtfVFlQRV8xMUIsIHBEZXZpY2UtPmJ5VG9wQ0NLQmFzaWNSYXRlLCBiTmVlZEFjaywgYnlGQk9wdGlvbikpOyAgICAvLzA6UlRTRHVyYXRpb25fYmIsIDE6Mi40RywgMTpDQ0tEYXRhCi0gICAgICAgICAgICBwQnVmLT53RHVyYXRpb25fYWEgPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXRSVFNDVFNEdXJhdGlvbihwRGV2aWNlLCBSVFNEVVJfQUEsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgYnlGQk9wdGlvbikpOyAvLzI6UlRTRHVyYXRpb25fYWEsIDE6Mi40RywgMiwzOjIuNEcgT0ZETURhdGEKLSAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbl9iYSA9IGNwdV90b19sZTE2KChXT1JEKXNfdUdldFJUU0NUU0R1cmF0aW9uKHBEZXZpY2UsIFJUU0RVUl9CQSwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLCB3Q3VycmVudFJhdGUsIGJOZWVkQWNrLCBieUZCT3B0aW9uKSk7IC8vMTpSVFNEdXJhdGlvbl9iYSwgMToyLjRHLCAyLDM6Mi40RyBPRkRNRGF0YQotICAgICAgICAgICAgcEJ1Zi0+d1JUU0R1cmF0aW9uX2JhX2YwID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgUlRTRFVSX0JBX0YwLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pKTsgICAgLy80OndSVFNEdXJhdGlvbl9iYV9mMCwgMToyLjRHLCAxOkNDS0RhdGEKLSAgICAgICAgICAgIHBCdWYtPndSVFNEdXJhdGlvbl9hYV9mMCA9IGNwdV90b19sZTE2KChXT1JEKXNfdUdldFJUU0NUU0R1cmF0aW9uKHBEZXZpY2UsIFJUU0RVUl9BQV9GMCwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLCB3Q3VycmVudFJhdGUsIGJOZWVkQWNrLCBieUZCT3B0aW9uKSk7ICAgIC8vNTp3UlRTRHVyYXRpb25fYWFfZjAsIDE6Mi40RywgMTpDQ0tEYXRhCi0gICAgICAgICAgICBwQnVmLT53UlRTRHVyYXRpb25fYmFfZjEgPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXRSVFNDVFNEdXJhdGlvbihwRGV2aWNlLCBSVFNEVVJfQkFfRjEsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgYnlGQk9wdGlvbikpOyAgICAvLzY6d1JUU0R1cmF0aW9uX2JhX2YxLCAxOjIuNEcsIDE6Q0NLRGF0YQotICAgICAgICAgICAgcEJ1Zi0+d1JUU0R1cmF0aW9uX2FhX2YxID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgUlRTRFVSX0FBX0YxLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pKTsgICAgLy83OndSVFNEdXJhdGlvbl9hYV9mMSwgMToyLjRHLCAxOkNDS0RhdGEKKyAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbl9iYiA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydClzX3VHZXRSVFNDVFNEdXJhdGlvbihwRGV2aWNlLCBSVFNEVVJfQkIsIGNiRnJhbWVMZW5ndGgsIFBLX1RZUEVfMTFCLCBwRGV2aWNlLT5ieVRvcENDS0Jhc2ljUmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pKTsgICAgLy8wOlJUU0R1cmF0aW9uX2JiLCAxOjIuNEcsIDE6Q0NLRGF0YQorICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uX2FhID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldFJUU0NUU0R1cmF0aW9uKHBEZXZpY2UsIFJUU0RVUl9BQSwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLCB3Q3VycmVudFJhdGUsIGJOZWVkQWNrLCBieUZCT3B0aW9uKSk7IC8vMjpSVFNEdXJhdGlvbl9hYSwgMToyLjRHLCAyLDM6Mi40RyBPRkRNRGF0YQorICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uX2JhID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldFJUU0NUU0R1cmF0aW9uKHBEZXZpY2UsIFJUU0RVUl9CQSwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLCB3Q3VycmVudFJhdGUsIGJOZWVkQWNrLCBieUZCT3B0aW9uKSk7IC8vMTpSVFNEdXJhdGlvbl9iYSwgMToyLjRHLCAyLDM6Mi40RyBPRkRNRGF0YQorICAgICAgICAgICAgcEJ1Zi0+d1JUU0R1cmF0aW9uX2JhX2YwID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldFJUU0NUU0R1cmF0aW9uKHBEZXZpY2UsIFJUU0RVUl9CQV9GMCwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLCB3Q3VycmVudFJhdGUsIGJOZWVkQWNrLCBieUZCT3B0aW9uKSk7ICAgIC8vNDp3UlRTRHVyYXRpb25fYmFfZjAsIDE6Mi40RywgMTpDQ0tEYXRhCisgICAgICAgICAgICBwQnVmLT53UlRTRHVyYXRpb25fYWFfZjAgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgUlRTRFVSX0FBX0YwLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pKTsgICAgLy81OndSVFNEdXJhdGlvbl9hYV9mMCwgMToyLjRHLCAxOkNDS0RhdGEKKyAgICAgICAgICAgIHBCdWYtPndSVFNEdXJhdGlvbl9iYV9mMSA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydClzX3VHZXRSVFNDVFNEdXJhdGlvbihwRGV2aWNlLCBSVFNEVVJfQkFfRjEsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgYnlGQk9wdGlvbikpOyAgICAvLzY6d1JUU0R1cmF0aW9uX2JhX2YxLCAxOjIuNEcsIDE6Q0NLRGF0YQorICAgICAgICAgICAgcEJ1Zi0+d1JUU0R1cmF0aW9uX2FhX2YxID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldFJUU0NUU0R1cmF0aW9uKHBEZXZpY2UsIFJUU0RVUl9BQV9GMSwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLCB3Q3VycmVudFJhdGUsIGJOZWVkQWNrLCBieUZCT3B0aW9uKSk7ICAgIC8vNzp3UlRTRHVyYXRpb25fYWFfZjEsIDE6Mi40RywgMTpDQ0tEYXRhCiAgICAgICAgICAgICBwQnVmLT5EYXRhLndEdXJhdGlvbklEID0gcEJ1Zi0+d0R1cmF0aW9uX2FhOwogICAgICAgICAgICAgLy9HZXQgUlRTIEZyYW1lIGJvZHkKICAgICAgICAgICAgIHBCdWYtPkRhdGEud0ZyYW1lQ29udHJvbCA9IFRZUEVfQ1RMX1JUUzsvLzB4MDBCNApAQCAtOTU4LDExICs5NDcsMTEgQEAKICAgICAgICAgICAgIFBTUlRTX2FiIHBCdWYgPSAoUFNSVFNfYWIpcHZSVFM7CiAgICAgICAgICAgICAvL0dldCBTaWduYWxGaWVsZCxTZXJ2aWNlRmllbGQsTGVuZ3RoCiAgICAgICAgICAgICBCQnZDYWN1bGF0ZVBhcmFtZXRlcihwRGV2aWNlLCB1UlRTRnJhbWVMZW4sIHBEZXZpY2UtPmJ5VG9wT0ZETUJhc2ljUmF0ZSwgYnlQa3RUeXBlLAotICAgICAgICAgICAgICAgIChQV09SRCkmKHdMZW4pLCAoUEJZVEUpJihwQnVmLT5ieVNlcnZpY2VGaWVsZCksIChQQllURSkmKHBCdWYtPmJ5U2lnbmFsRmllbGQpCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIHNob3J0ICopJih3TGVuKSwgKHVuc2lnbmVkIGNoYXIgKikmKHBCdWYtPmJ5U2VydmljZUZpZWxkKSwgKHVuc2lnbmVkIGNoYXIgKikmKHBCdWYtPmJ5U2lnbmFsRmllbGQpCiAgICAgICAgICAgICApOwogICAgICAgICAgICAgcEJ1Zi0+d1RyYW5zbWl0TGVuZ3RoID0gY3B1X3RvX2xlMTYod0xlbik7CiAgICAgICAgICAgICAvL0dldCBEdXJhdGlvbgotICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgUlRTRFVSX0FBLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pKTsgLy8wOlJUU0R1cmF0aW9uX2FhLCAwOjVHLCAwOiA1RyBPRkRNRGF0YQorICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldFJUU0NUU0R1cmF0aW9uKHBEZXZpY2UsIFJUU0RVUl9BQSwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLCB3Q3VycmVudFJhdGUsIGJOZWVkQWNrLCBieUZCT3B0aW9uKSk7IC8vMDpSVFNEdXJhdGlvbl9hYSwgMDo1RywgMDogNUcgT0ZETURhdGEKICAgICAJICAgIHBCdWYtPkRhdGEud0R1cmF0aW9uSUQgPSBwQnVmLT53RHVyYXRpb247CiAgICAgICAgICAgICAvL0dldCBSVFMgRnJhbWUgYm9keQogICAgICAgICAgICAgcEJ1Zi0+RGF0YS53RnJhbWVDb250cm9sID0gVFlQRV9DVExfUlRTOy8vMHgwMEI0CkBAIC05ODcsMTMgKzk3NiwxMyBAQAogICAgICAgICAgICAgUFNSVFNfYV9GQiBwQnVmID0gKFBTUlRTX2FfRkIpcHZSVFM7CiAgICAgICAgICAgICAvL0dldCBTaWduYWxGaWVsZCxTZXJ2aWNlRmllbGQsTGVuZ3RoCiAgICAgICAgICAgICBCQnZDYWN1bGF0ZVBhcmFtZXRlcihwRGV2aWNlLCB1UlRTRnJhbWVMZW4sIHBEZXZpY2UtPmJ5VG9wT0ZETUJhc2ljUmF0ZSwgYnlQa3RUeXBlLAotICAgICAgICAgICAgICAgIChQV09SRCkmKHdMZW4pLCAoUEJZVEUpJihwQnVmLT5ieVNlcnZpY2VGaWVsZCksIChQQllURSkmKHBCdWYtPmJ5U2lnbmFsRmllbGQpCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIHNob3J0ICopJih3TGVuKSwgKHVuc2lnbmVkIGNoYXIgKikmKHBCdWYtPmJ5U2VydmljZUZpZWxkKSwgKHVuc2lnbmVkIGNoYXIgKikmKHBCdWYtPmJ5U2lnbmFsRmllbGQpCiAgICAgICAgICAgICApOwogICAgICAgICAgICAgcEJ1Zi0+d1RyYW5zbWl0TGVuZ3RoID0gY3B1X3RvX2xlMTYod0xlbik7CiAgICAgICAgICAgICAvL0dldCBEdXJhdGlvbgotICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgUlRTRFVSX0FBLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pKTsgLy8wOlJUU0R1cmF0aW9uX2FhLCAwOjVHLCAwOiA1RyBPRkRNRGF0YQotICAgIAkgICAgcEJ1Zi0+d1JUU0R1cmF0aW9uX2YwID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgUlRTRFVSX0FBX0YwLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pKTsgLy81OlJUU0R1cmF0aW9uX2FhX2YwLCAwOjVHLCAwOiA1RyBPRkRNRGF0YQotICAgIAkgICAgcEJ1Zi0+d1JUU0R1cmF0aW9uX2YxID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgUlRTRFVSX0FBX0YxLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pKTsgLy83OlJUU0R1cmF0aW9uX2FhX2YxLCAwOjVHLCAwOgorICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldFJUU0NUU0R1cmF0aW9uKHBEZXZpY2UsIFJUU0RVUl9BQSwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLCB3Q3VycmVudFJhdGUsIGJOZWVkQWNrLCBieUZCT3B0aW9uKSk7IC8vMDpSVFNEdXJhdGlvbl9hYSwgMDo1RywgMDogNUcgT0ZETURhdGEKKyAgICAJICAgIHBCdWYtPndSVFNEdXJhdGlvbl9mMCA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydClzX3VHZXRSVFNDVFNEdXJhdGlvbihwRGV2aWNlLCBSVFNEVVJfQUFfRjAsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgYnlGQk9wdGlvbikpOyAvLzU6UlRTRHVyYXRpb25fYWFfZjAsIDA6NUcsIDA6IDVHIE9GRE1EYXRhCisgICAgCSAgICBwQnVmLT53UlRTRHVyYXRpb25fZjEgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgUlRTRFVSX0FBX0YxLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pKTsgLy83OlJUU0R1cmF0aW9uX2FhX2YxLCAwOjVHLCAwOgogICAgIAkgICAgcEJ1Zi0+RGF0YS53RHVyYXRpb25JRCA9IHBCdWYtPndEdXJhdGlvbjsKICAgICAJICAgIC8vR2V0IFJUUyBGcmFtZSBib2R5CiAgICAgICAgICAgICBwQnVmLT5EYXRhLndGcmFtZUNvbnRyb2wgPSBUWVBFX0NUTF9SVFM7Ly8weDAwQjQKQEAgLTEwMTcsMTEgKzEwMDYsMTEgQEAKICAgICAgICAgUFNSVFNfYWIgcEJ1ZiA9IChQU1JUU19hYilwdlJUUzsKICAgICAgICAgLy9HZXQgU2lnbmFsRmllbGQsU2VydmljZUZpZWxkLExlbmd0aAogICAgICAgICBCQnZDYWN1bGF0ZVBhcmFtZXRlcihwRGV2aWNlLCB1UlRTRnJhbWVMZW4sIHBEZXZpY2UtPmJ5VG9wQ0NLQmFzaWNSYXRlLCBQS19UWVBFXzExQiwKLSAgICAgICAgICAgIChQV09SRCkmKHdMZW4pLCAoUEJZVEUpJihwQnVmLT5ieVNlcnZpY2VGaWVsZCksIChQQllURSkmKHBCdWYtPmJ5U2lnbmFsRmllbGQpCisgICAgICAgICAgICAodW5zaWduZWQgc2hvcnQgKikmKHdMZW4pLCAodW5zaWduZWQgY2hhciAqKSYocEJ1Zi0+YnlTZXJ2aWNlRmllbGQpLCAodW5zaWduZWQgY2hhciAqKSYocEJ1Zi0+YnlTaWduYWxGaWVsZCkKICAgICAgICAgKTsKICAgICAgICAgcEJ1Zi0+d1RyYW5zbWl0TGVuZ3RoID0gY3B1X3RvX2xlMTYod0xlbik7CiAgICAgICAgIC8vR2V0IER1cmF0aW9uCi0gICAgICAgIHBCdWYtPndEdXJhdGlvbiA9IGNwdV90b19sZTE2KChXT1JEKXNfdUdldFJUU0NUU0R1cmF0aW9uKHBEZXZpY2UsIFJUU0RVUl9CQiwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLCB3Q3VycmVudFJhdGUsIGJOZWVkQWNrLCBieUZCT3B0aW9uKSk7IC8vMDpSVFNEdXJhdGlvbl9iYiwgMToyLjRHLCAxOkNDS0RhdGEKKyAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldFJUU0NUU0R1cmF0aW9uKHBEZXZpY2UsIFJUU0RVUl9CQiwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLCB3Q3VycmVudFJhdGUsIGJOZWVkQWNrLCBieUZCT3B0aW9uKSk7IC8vMDpSVFNEdXJhdGlvbl9iYiwgMToyLjRHLCAxOkNDS0RhdGEKICAgICAgICAgcEJ1Zi0+RGF0YS53RHVyYXRpb25JRCA9IHBCdWYtPndEdXJhdGlvbjsKICAgICAgICAgLy9HZXQgUlRTIEZyYW1lIGJvZHkKICAgICAgICAgcEJ1Zi0+RGF0YS53RnJhbWVDb250cm9sID0gVFlQRV9DVExfUlRTOy8vMHgwMEI0CkBAIC0xMDQ4LDE4ICsxMDM3LDE4IEBACiB2b2lkCiBzX3ZGaWxsQ1RTSGVhZCAoCiAgICAgUFNEZXZpY2UgcERldmljZSwKLSAgICBVSU5UICAgICB1RE1BSWR4LAotICAgIEJZVEUgICAgIGJ5UGt0VHlwZSwKKyAgICB1bnNpZ25lZCBpbnQgdURNQUlkeCwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UGt0VHlwZSwKICAgICB2b2lkICogICBwdkNUUywKLSAgICBVSU5UICAgICBjYkZyYW1lTGVuZ3RoLAotICAgIEJPT0wgICAgIGJOZWVkQWNrLAotICAgIEJPT0wgICAgIGJEaXNDUkMsCi0gICAgV09SRCAgICAgd0N1cnJlbnRSYXRlLAotICAgIEJZVEUgICAgIGJ5RkJPcHRpb24KKyAgICB1bnNpZ25lZCBpbnQgY2JGcmFtZUxlbmd0aCwKKyAgICBib29sIGJOZWVkQWNrLAorICAgIGJvb2wgYkRpc0NSQywKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VycmVudFJhdGUsCisgICAgdW5zaWduZWQgY2hhciBieUZCT3B0aW9uCiAgICAgKQogewotICAgIFVJTlQgdUNUU0ZyYW1lTGVuID0gMTQ7Ci0gICAgV09SRCAgd0xlbiA9IDB4MDAwMDsKKyAgICB1bnNpZ25lZCBpbnQgdUNUU0ZyYW1lTGVuID0gMTQ7CisgICAgdW5zaWduZWQgc2hvcnQgd0xlbiA9IDB4MDAwMDsKIAogICAgIGlmIChwdkNUUyA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybjsKQEAgLTEwNzcsMjEgKzEwNjYsMjEgQEAKICAgICAgICAgICAgIFBTQ1RTX0ZCIHBCdWYgPSAoUFNDVFNfRkIpcHZDVFM7CiAgICAgICAgICAgICAvL0dldCBTaWduYWxGaWVsZCxTZXJ2aWNlRmllbGQsTGVuZ3RoCiAgICAgICAgICAgICBCQnZDYWN1bGF0ZVBhcmFtZXRlcihwRGV2aWNlLCB1Q1RTRnJhbWVMZW4sIHBEZXZpY2UtPmJ5VG9wQ0NLQmFzaWNSYXRlLCBQS19UWVBFXzExQiwKLSAgICAgICAgICAgICAgICAoUFdPUkQpJih3TGVuKSwgKFBCWVRFKSYocEJ1Zi0+YnlTZXJ2aWNlRmllbGRfYiksIChQQllURSkmKHBCdWYtPmJ5U2lnbmFsRmllbGRfYikKKyAgICAgICAgICAgICAgICAodW5zaWduZWQgc2hvcnQgKikmKHdMZW4pLCAodW5zaWduZWQgY2hhciAqKSYocEJ1Zi0+YnlTZXJ2aWNlRmllbGRfYiksICh1bnNpZ25lZCBjaGFyICopJihwQnVmLT5ieVNpZ25hbEZpZWxkX2IpCiAgICAgICAgICAgICApOwogCiAKICAgICAgICAgICAgIHBCdWYtPndUcmFuc21pdExlbmd0aF9iID0gY3B1X3RvX2xlMTYod0xlbik7CiAKLSAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbl9iYSA9IChXT1JEKXNfdUdldFJUU0NUU0R1cmF0aW9uKHBEZXZpY2UsIENUU0RVUl9CQSwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLCB3Q3VycmVudFJhdGUsIGJOZWVkQWNrLCBieUZCT3B0aW9uKTsgLy8zOkNUU0R1cmF0aW9uX2JhLCAxOjIuNEcsIDIsMzoyLjRHIE9GRE0gRGF0YQorICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uX2JhID0gKHVuc2lnbmVkIHNob3J0KXNfdUdldFJUU0NUU0R1cmF0aW9uKHBEZXZpY2UsIENUU0RVUl9CQSwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLCB3Q3VycmVudFJhdGUsIGJOZWVkQWNrLCBieUZCT3B0aW9uKTsgLy8zOkNUU0R1cmF0aW9uX2JhLCAxOjIuNEcsIDIsMzoyLjRHIE9GRE0gRGF0YQogICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uX2JhICs9IHBEZXZpY2UtPndDVFNEdXJhdGlvbjsKICAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbl9iYSA9IGNwdV90b19sZTE2KHBCdWYtPndEdXJhdGlvbl9iYSk7CiAgICAgICAgICAgICAvL0dldCBDVFNEdXJhdGlvbl9iYV9mMAotICAgICAgICAgICAgcEJ1Zi0+d0NUU0R1cmF0aW9uX2JhX2YwID0gKFdPUkQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgQ1RTRFVSX0JBX0YwLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pOyAvLzg6Q1RTRHVyYXRpb25fYmFfZjAsIDE6Mi40RywgMiwzOjIuNEcgT0ZETSBEYXRhCisgICAgICAgICAgICBwQnVmLT53Q1RTRHVyYXRpb25fYmFfZjAgPSAodW5zaWduZWQgc2hvcnQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgQ1RTRFVSX0JBX0YwLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pOyAvLzg6Q1RTRHVyYXRpb25fYmFfZjAsIDE6Mi40RywgMiwzOjIuNEcgT0ZETSBEYXRhCiAgICAgICAgICAgICBwQnVmLT53Q1RTRHVyYXRpb25fYmFfZjAgKz0gcERldmljZS0+d0NUU0R1cmF0aW9uOwogICAgICAgICAgICAgcEJ1Zi0+d0NUU0R1cmF0aW9uX2JhX2YwID0gY3B1X3RvX2xlMTYocEJ1Zi0+d0NUU0R1cmF0aW9uX2JhX2YwKTsKICAgICAgICAgICAgIC8vR2V0IENUU0R1cmF0aW9uX2JhX2YxCi0gICAgICAgICAgICBwQnVmLT53Q1RTRHVyYXRpb25fYmFfZjEgPSAoV09SRClzX3VHZXRSVFNDVFNEdXJhdGlvbihwRGV2aWNlLCBDVFNEVVJfQkFfRjEsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgYnlGQk9wdGlvbik7IC8vOTpDVFNEdXJhdGlvbl9iYV9mMSwgMToyLjRHLCAyLDM6Mi40RyBPRkRNIERhdGEKKyAgICAgICAgICAgIHBCdWYtPndDVFNEdXJhdGlvbl9iYV9mMSA9ICh1bnNpZ25lZCBzaG9ydClzX3VHZXRSVFNDVFNEdXJhdGlvbihwRGV2aWNlLCBDVFNEVVJfQkFfRjEsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgYnlGQk9wdGlvbik7IC8vOTpDVFNEdXJhdGlvbl9iYV9mMSwgMToyLjRHLCAyLDM6Mi40RyBPRkRNIERhdGEKICAgICAgICAgICAgIHBCdWYtPndDVFNEdXJhdGlvbl9iYV9mMSArPSBwRGV2aWNlLT53Q1RTRHVyYXRpb247CiAgICAgICAgICAgICBwQnVmLT53Q1RTRHVyYXRpb25fYmFfZjEgPSBjcHVfdG9fbGUxNihwQnVmLT53Q1RTRHVyYXRpb25fYmFfZjEpOwogICAgICAgICAgICAgLy9HZXQgQ1RTIEZyYW1lIGJvZHkKQEAgLTExMDQsMTEgKzEwOTMsMTEgQEAKICAgICAgICAgICAgIFBTQ1RTIHBCdWYgPSAoUFNDVFMpcHZDVFM7CiAgICAgICAgICAgICAvL0dldCBTaWduYWxGaWVsZCxTZXJ2aWNlRmllbGQsTGVuZ3RoCiAgICAgICAgICAgICBCQnZDYWN1bGF0ZVBhcmFtZXRlcihwRGV2aWNlLCB1Q1RTRnJhbWVMZW4sIHBEZXZpY2UtPmJ5VG9wQ0NLQmFzaWNSYXRlLCBQS19UWVBFXzExQiwKLSAgICAgICAgICAgICAgICAoUFdPUkQpJih3TGVuKSwgKFBCWVRFKSYocEJ1Zi0+YnlTZXJ2aWNlRmllbGRfYiksIChQQllURSkmKHBCdWYtPmJ5U2lnbmFsRmllbGRfYikKKyAgICAgICAgICAgICAgICAodW5zaWduZWQgc2hvcnQgKikmKHdMZW4pLCAodW5zaWduZWQgY2hhciAqKSYocEJ1Zi0+YnlTZXJ2aWNlRmllbGRfYiksICh1bnNpZ25lZCBjaGFyICopJihwQnVmLT5ieVNpZ25hbEZpZWxkX2IpCiAgICAgICAgICAgICApOwogICAgICAgICAgICAgcEJ1Zi0+d1RyYW5zbWl0TGVuZ3RoX2IgPSBjcHVfdG9fbGUxNih3TGVuKTsKICAgICAgICAgICAgIC8vR2V0IENUU0R1cmF0aW9uX2JhCi0gICAgICAgICAgICBwQnVmLT53RHVyYXRpb25fYmEgPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXRSVFNDVFNEdXJhdGlvbihwRGV2aWNlLCBDVFNEVVJfQkEsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgYnlGQk9wdGlvbikpOyAvLzM6Q1RTRHVyYXRpb25fYmEsIDE6Mi40RywgMiwzOjIuNEcgT0ZETSBEYXRhCisgICAgICAgICAgICBwQnVmLT53RHVyYXRpb25fYmEgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgQ1RTRFVSX0JBLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pKTsgLy8zOkNUU0R1cmF0aW9uX2JhLCAxOjIuNEcsIDIsMzoyLjRHIE9GRE0gRGF0YQogICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uX2JhICs9IHBEZXZpY2UtPndDVFNEdXJhdGlvbjsKICAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbl9iYSA9IGNwdV90b19sZTE2KHBCdWYtPndEdXJhdGlvbl9iYSk7CiAKQEAgLTExNDgsMjggKzExMzcsMjggQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKIC0qLwotLy8gVUlOVCAgICAgICAgICAgIGNiRnJhbWVTaXplLC8vSGRyK1BheWxvYWQrRkNTCisvLyB1bnNpZ25lZCBpbnQgY2JGcmFtZVNpemUsLy9IZHIrUGF5bG9hZCtGQ1MKIHN0YXRpYwogdm9pZAogc192R2VuZXJhdGVUeFBhcmFtZXRlciAoCiAgICAgUFNEZXZpY2UgICAgICAgICBwRGV2aWNlLAotICAgIEJZVEUgICAgICAgICAgICAgYnlQa3RUeXBlLAorICAgIHVuc2lnbmVkIGNoYXIgYnlQa3RUeXBlLAogICAgIHZvaWQgKiAgICAgICAgICAgcFR4QnVmSGVhZCwKICAgICB2b2lkICogICAgICAgICAgIHB2UnJ2VGltZSwKICAgICB2b2lkICogICAgICAgICAgIHB2UlRTLAogICAgIHZvaWQgKiAgICAgICAgICAgcHZDVFMsCi0gICAgVUlOVCAgICAgICAgICAgICBjYkZyYW1lU2l6ZSwKLSAgICBCT09MICAgICAgICAgICAgIGJOZWVkQUNLLAotICAgIFVJTlQgICAgICAgICAgICAgdURNQUlkeCwKKyAgICB1bnNpZ25lZCBpbnQgY2JGcmFtZVNpemUsCisgICAgYm9vbCBiTmVlZEFDSywKKyAgICB1bnNpZ25lZCBpbnQgdURNQUlkeCwKICAgICBQU0V0aGVybmV0SGVhZGVyIHBzRXRoSGVhZGVyLAotICAgIFdPUkQgICAgICAgICAgICAgd0N1cnJlbnRSYXRlCisgICAgdW5zaWduZWQgc2hvcnQgd0N1cnJlbnRSYXRlCiAgICAgKQogewotICAgIFVJTlQgY2JNQUNIZExlbiA9IFdMQU5fSERSX0FERFIzX0xFTjsgLy8yNAotICAgIFdPUkQgd0ZpZm9DdGw7Ci0gICAgQk9PTCBiRGlzQ1JDID0gRkFMU0U7Ci0gICAgQllURSBieUZCT3B0aW9uID0gQVVUT19GQl9OT05FOwotLy8gICAgV09SRCB3Q3VycmVudFJhdGUgPSBwRGV2aWNlLT53Q3VycmVudFJhdGU7CisgICAgdW5zaWduZWQgaW50IGNiTUFDSGRMZW4gPSBXTEFOX0hEUl9BRERSM19MRU47IC8vMjQKKyAgICB1bnNpZ25lZCBzaG9ydCB3Rmlmb0N0bDsKKyAgICBib29sIGJEaXNDUkMgPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RkJPcHRpb24gPSBBVVRPX0ZCX05PTkU7CisvLyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VycmVudFJhdGUgPSBwRGV2aWNlLT53Q3VycmVudFJhdGU7CiAKICAgICAvL0RCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8ic192R2VuZXJhdGVUeFBhcmFtZXRlci4uLlxuIik7CiAgICAgUFNUeEJ1ZkhlYWQgcEZpZm9IZWFkID0gKFBTVHhCdWZIZWFkKXBUeEJ1ZkhlYWQ7CkBAIC0xMTc3LDcgKzExNjYsNyBAQAogICAgIHdGaWZvQ3RsID0gcEZpZm9IZWFkLT53RklGT0N0bDsKIAogICAgIGlmICh3Rmlmb0N0bCAmIEZJRk9DVExfQ1JDRElTKSB7Ci0gICAgICAgIGJEaXNDUkMgPSBUUlVFOworICAgICAgICBiRGlzQ1JDID0gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAod0ZpZm9DdGwgJiBGSUZPQ1RMX0FVVE9fRkJfMCkgewpAQCAtMTE5NiwxMSArMTE4NSwxMSBAQAogICAgICAgICAgICAgLy9GaWxsIFJzdlRpbWUKICAgICAgICAgICAgIGlmIChwdlJydlRpbWUpIHsKICAgICAgICAgICAgICAgICBQU1JydlRpbWVfZ1JUUyBwQnVmID0gKFBTUnJ2VGltZV9nUlRTKXB2UnJ2VGltZTsKLSAgICAgICAgICAgICAgICBwQnVmLT53UlRTVHhScnZUaW1lX2FhID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0UlRTQ1RTUnN2VGltZShwRGV2aWNlLCAyLCBieVBrdFR5cGUsIGNiRnJhbWVTaXplLCB3Q3VycmVudFJhdGUpKTsvLzI6UlRTVHhScnZUaW1lX2FhLCAxOjIuNEdIegotICAgICAgICAgICAgICAgIHBCdWYtPndSVFNUeFJydlRpbWVfYmEgPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXRSVFNDVFNSc3ZUaW1lKHBEZXZpY2UsIDEsIGJ5UGt0VHlwZSwgY2JGcmFtZVNpemUsIHdDdXJyZW50UmF0ZSkpOy8vMTpSVFNUeFJydlRpbWVfYmEsIDE6Mi40R0h6Ci0gICAgICAgICAgICAgICAgcEJ1Zi0+d1JUU1R4UnJ2VGltZV9iYiA9IGNwdV90b19sZTE2KChXT1JEKXNfdUdldFJUU0NUU1JzdlRpbWUocERldmljZSwgMCwgYnlQa3RUeXBlLCBjYkZyYW1lU2l6ZSwgd0N1cnJlbnRSYXRlKSk7Ly8wOlJUU1R4UnJ2VGltZV9iYiwgMToyLjRHSHoKLSAgICAgICAgICAgICAgICBwQnVmLT53VHhScnZUaW1lX2EgPSBjcHVfdG9fbGUxNigoV09SRCkgc191R2V0VHhSc3ZUaW1lKHBEZXZpY2UsIGJ5UGt0VHlwZSwgY2JGcmFtZVNpemUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBQ0spKTsvLzIuNEcgT0ZETQotICAgICAgICAgICAgICAgIHBCdWYtPndUeFJydlRpbWVfYiA9IGNwdV90b19sZTE2KChXT1JEKSBzX3VHZXRUeFJzdlRpbWUocERldmljZSwgUEtfVFlQRV8xMUIsIGNiRnJhbWVTaXplLCBwRGV2aWNlLT5ieVRvcENDS0Jhc2ljUmF0ZSwgYk5lZWRBQ0spKTsvLzE6Q0NLCisgICAgICAgICAgICAgICAgcEJ1Zi0+d1JUU1R4UnJ2VGltZV9hYSA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydClzX3VHZXRSVFNDVFNSc3ZUaW1lKHBEZXZpY2UsIDIsIGJ5UGt0VHlwZSwgY2JGcmFtZVNpemUsIHdDdXJyZW50UmF0ZSkpOy8vMjpSVFNUeFJydlRpbWVfYWEsIDE6Mi40R0h6CisgICAgICAgICAgICAgICAgcEJ1Zi0+d1JUU1R4UnJ2VGltZV9iYSA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydClzX3VHZXRSVFNDVFNSc3ZUaW1lKHBEZXZpY2UsIDEsIGJ5UGt0VHlwZSwgY2JGcmFtZVNpemUsIHdDdXJyZW50UmF0ZSkpOy8vMTpSVFNUeFJydlRpbWVfYmEsIDE6Mi40R0h6CisgICAgICAgICAgICAgICAgcEJ1Zi0+d1JUU1R4UnJ2VGltZV9iYiA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydClzX3VHZXRSVFNDVFNSc3ZUaW1lKHBEZXZpY2UsIDAsIGJ5UGt0VHlwZSwgY2JGcmFtZVNpemUsIHdDdXJyZW50UmF0ZSkpOy8vMDpSVFNUeFJydlRpbWVfYmIsIDE6Mi40R0h6CisgICAgICAgICAgICAgICAgcEJ1Zi0+d1R4UnJ2VGltZV9hID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KSBzX3VHZXRUeFJzdlRpbWUocERldmljZSwgYnlQa3RUeXBlLCBjYkZyYW1lU2l6ZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFDSykpOy8vMi40RyBPRkRNCisgICAgICAgICAgICAgICAgcEJ1Zi0+d1R4UnJ2VGltZV9iID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KSBzX3VHZXRUeFJzdlRpbWUocERldmljZSwgUEtfVFlQRV8xMUIsIGNiRnJhbWVTaXplLCBwRGV2aWNlLT5ieVRvcENDS0Jhc2ljUmF0ZSwgYk5lZWRBQ0spKTsvLzE6Q0NLCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvL0ZpbGwgUlRTCiAgICAgICAgICAgICBzX3ZGaWxsUlRTSGVhZChwRGV2aWNlLCBieVBrdFR5cGUsIHB2UlRTLCBjYkZyYW1lU2l6ZSwgYk5lZWRBQ0ssIGJEaXNDUkMsIHBzRXRoSGVhZGVyLCB3Q3VycmVudFJhdGUsIGJ5RkJPcHRpb24pOwpAQCAtMTIxMCw5ICsxMTk5LDkgQEAKICAgICAgICAgICAgIC8vRmlsbCBSc3ZUaW1lCiAgICAgICAgICAgICBpZiAocHZScnZUaW1lKSB7CiAgICAgICAgICAgICAgICAgUFNScnZUaW1lX2dDVFMgcEJ1ZiA9IChQU1JydlRpbWVfZ0NUUylwdlJydlRpbWU7Ci0gICAgICAgICAgICAgICAgcEJ1Zi0+d1R4UnJ2VGltZV9hID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0VHhSc3ZUaW1lKHBEZXZpY2UsIGJ5UGt0VHlwZSwgY2JGcmFtZVNpemUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBQ0spKTsvLzIuNEcgT0ZETQotICAgICAgICAgICAgICAgIHBCdWYtPndUeFJydlRpbWVfYiA9IGNwdV90b19sZTE2KChXT1JEKXNfdUdldFR4UnN2VGltZShwRGV2aWNlLCBQS19UWVBFXzExQiwgY2JGcmFtZVNpemUsIHBEZXZpY2UtPmJ5VG9wQ0NLQmFzaWNSYXRlLCBiTmVlZEFDSykpOy8vMTpDQ0sKLSAgICAgICAgICAgICAgICBwQnVmLT53Q1RTVHhScnZUaW1lX2JhID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0UlRTQ1RTUnN2VGltZShwRGV2aWNlLCAzLCBieVBrdFR5cGUsIGNiRnJhbWVTaXplLCB3Q3VycmVudFJhdGUpKTsvLzM6Q1RTVHhScnZUaW1lX0JhLCAxOjIuNEdIegorICAgICAgICAgICAgICAgIHBCdWYtPndUeFJydlRpbWVfYSA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydClzX3VHZXRUeFJzdlRpbWUocERldmljZSwgYnlQa3RUeXBlLCBjYkZyYW1lU2l6ZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFDSykpOy8vMi40RyBPRkRNCisgICAgICAgICAgICAgICAgcEJ1Zi0+d1R4UnJ2VGltZV9iID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldFR4UnN2VGltZShwRGV2aWNlLCBQS19UWVBFXzExQiwgY2JGcmFtZVNpemUsIHBEZXZpY2UtPmJ5VG9wQ0NLQmFzaWNSYXRlLCBiTmVlZEFDSykpOy8vMTpDQ0sKKyAgICAgICAgICAgICAgICBwQnVmLT53Q1RTVHhScnZUaW1lX2JhID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldFJUU0NUU1JzdlRpbWUocERldmljZSwgMywgYnlQa3RUeXBlLCBjYkZyYW1lU2l6ZSwgd0N1cnJlbnRSYXRlKSk7Ly8zOkNUU1R4UnJ2VGltZV9CYSwgMToyLjRHSHoKICAgICAgICAgICAgIH0KIAogCkBAIC0xMjI2LDggKzEyMTUsOCBAQAogICAgICAgICAgICAgLy9GaWxsIFJzdlRpbWUKICAgICAgICAgICAgIGlmIChwdlJydlRpbWUpIHsKICAgICAgICAgICAgICAgICBQU1JydlRpbWVfYWIgcEJ1ZiA9IChQU1JydlRpbWVfYWIpcHZScnZUaW1lOwotICAgICAgICAgICAgICAgIHBCdWYtPndSVFNUeFJydlRpbWUgPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXRSVFNDVFNSc3ZUaW1lKHBEZXZpY2UsIDIsIGJ5UGt0VHlwZSwgY2JGcmFtZVNpemUsIHdDdXJyZW50UmF0ZSkpOy8vMjpSVFNUeFJydlRpbWVfYWEsIDA6NUdIegotICAgICAgICAgICAgICAgIHBCdWYtPndUeFJydlRpbWUgPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXRUeFJzdlRpbWUocERldmljZSwgYnlQa3RUeXBlLCBjYkZyYW1lU2l6ZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFDSykpOy8vMDpPRkRNCisgICAgICAgICAgICAgICAgcEJ1Zi0+d1JUU1R4UnJ2VGltZSA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydClzX3VHZXRSVFNDVFNSc3ZUaW1lKHBEZXZpY2UsIDIsIGJ5UGt0VHlwZSwgY2JGcmFtZVNpemUsIHdDdXJyZW50UmF0ZSkpOy8vMjpSVFNUeFJydlRpbWVfYWEsIDA6NUdIegorICAgICAgICAgICAgICAgIHBCdWYtPndUeFJydlRpbWUgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0VHhSc3ZUaW1lKHBEZXZpY2UsIGJ5UGt0VHlwZSwgY2JGcmFtZVNpemUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBQ0spKTsvLzA6T0ZETQogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy9GaWxsIFJUUwogICAgICAgICAgICAgc192RmlsbFJUU0hlYWQocERldmljZSwgYnlQa3RUeXBlLCBwdlJUUywgY2JGcmFtZVNpemUsIGJOZWVkQUNLLCBiRGlzQ1JDLCBwc0V0aEhlYWRlciwgd0N1cnJlbnRSYXRlLCBieUZCT3B0aW9uKTsKQEAgLTEyMzYsNyArMTIyNSw3IEBACiAgICAgICAgICAgICAvL0ZpbGwgUnN2VGltZQogICAgICAgICAgICAgaWYgKHB2UnJ2VGltZSkgewogICAgICAgICAgICAgICAgIFBTUnJ2VGltZV9hYiBwQnVmID0gKFBTUnJ2VGltZV9hYilwdlJydlRpbWU7Ci0gICAgICAgICAgICAgICAgcEJ1Zi0+d1R4UnJ2VGltZSA9IGNwdV90b19sZTE2KChXT1JEKXNfdUdldFR4UnN2VGltZShwRGV2aWNlLCBQS19UWVBFXzExQSwgY2JGcmFtZVNpemUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBQ0spKTsgLy8wOk9GRE0KKyAgICAgICAgICAgICAgICBwQnVmLT53VHhScnZUaW1lID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldFR4UnN2VGltZShwRGV2aWNlLCBQS19UWVBFXzExQSwgY2JGcmFtZVNpemUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBQ0spKTsgLy8wOk9GRE0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTEyNDYsOCArMTIzNSw4IEBACiAgICAgICAgICAgICAvL0ZpbGwgUnN2VGltZQogICAgICAgICAgICAgaWYgKHB2UnJ2VGltZSkgewogICAgICAgICAgICAgICAgIFBTUnJ2VGltZV9hYiBwQnVmID0gKFBTUnJ2VGltZV9hYilwdlJydlRpbWU7Ci0gICAgICAgICAgICAgICAgcEJ1Zi0+d1JUU1R4UnJ2VGltZSA9IGNwdV90b19sZTE2KChXT1JEKXNfdUdldFJUU0NUU1JzdlRpbWUocERldmljZSwgMCwgYnlQa3RUeXBlLCBjYkZyYW1lU2l6ZSwgd0N1cnJlbnRSYXRlKSk7Ly8wOlJUU1R4UnJ2VGltZV9iYiwgMToyLjRHSHoKLSAgICAgICAgICAgICAgICBwQnVmLT53VHhScnZUaW1lID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0VHhSc3ZUaW1lKHBEZXZpY2UsIFBLX1RZUEVfMTFCLCBjYkZyYW1lU2l6ZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFDSykpOy8vMTpDQ0sKKyAgICAgICAgICAgICAgICBwQnVmLT53UlRTVHhScnZUaW1lID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldFJUU0NUU1JzdlRpbWUocERldmljZSwgMCwgYnlQa3RUeXBlLCBjYkZyYW1lU2l6ZSwgd0N1cnJlbnRSYXRlKSk7Ly8wOlJUU1R4UnJ2VGltZV9iYiwgMToyLjRHSHoKKyAgICAgICAgICAgICAgICBwQnVmLT53VHhScnZUaW1lID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldFR4UnN2VGltZShwRGV2aWNlLCBQS19UWVBFXzExQiwgY2JGcmFtZVNpemUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBQ0spKTsvLzE6Q0NLCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvL0ZpbGwgUlRTCiAgICAgICAgICAgICBzX3ZGaWxsUlRTSGVhZChwRGV2aWNlLCBieVBrdFR5cGUsIHB2UlRTLCBjYkZyYW1lU2l6ZSwgYk5lZWRBQ0ssIGJEaXNDUkMsIHBzRXRoSGVhZGVyLCB3Q3VycmVudFJhdGUsIGJ5RkJPcHRpb24pOwpAQCAtMTI1NiwyNiArMTI0NSwyNiBAQAogICAgICAgICAgICAgLy9GaWxsIFJzdlRpbWUKICAgICAgICAgICAgIGlmIChwdlJydlRpbWUpIHsKICAgICAgICAgICAgICAgICBQU1JydlRpbWVfYWIgcEJ1ZiA9IChQU1JydlRpbWVfYWIpcHZScnZUaW1lOwotICAgICAgICAgICAgICAgIHBCdWYtPndUeFJydlRpbWUgPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXRUeFJzdlRpbWUocERldmljZSwgUEtfVFlQRV8xMUIsIGNiRnJhbWVTaXplLCB3Q3VycmVudFJhdGUsIGJOZWVkQUNLKSk7IC8vMTpDQ0sKKyAgICAgICAgICAgICAgICBwQnVmLT53VHhScnZUaW1lID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldFR4UnN2VGltZShwRGV2aWNlLCBQS19UWVBFXzExQiwgY2JGcmFtZVNpemUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBQ0spKTsgLy8xOkNDSwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIC8vREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJzX3ZHZW5lcmF0ZVR4UGFyYW1ldGVyIEVORC5cbiIpOwogfQogLyoKLSAgICBQQllURSBwYnlCdWZmZXIsLy9wb2ludCB0byBwVHhCdWZIZWFkCi0gICAgV09SRCAgd0ZyYWdUeXBlLC8vMDA6Tm9uLUZyYWcsIDAxOlN0YXJ0LCAwMjpNaWQsIDAzOkxhc3QKLSAgICBVSU5UICBjYkZyYWdtZW50U2l6ZSwvL0hkcitwYXlvYWQrRkNTCisgICAgdW5zaWduZWQgY2hhciAqcGJ5QnVmZmVyLC8vcG9pbnQgdG8gcFR4QnVmSGVhZAorICAgIHVuc2lnbmVkIHNob3J0IHdGcmFnVHlwZSwvLzAwOk5vbi1GcmFnLCAwMTpTdGFydCwgMDI6TWlkLCAwMzpMYXN0CisgICAgdW5zaWduZWQgaW50IGNiRnJhZ21lbnRTaXplLC8vSGRyK3BheW9hZCtGQ1MKICovCiBzdGF0aWMKIHZvaWQKIHNfdkZpbGxGcmFnUGFyYW1ldGVyKAogICAgIFBTRGV2aWNlIHBEZXZpY2UsCi0gICAgUEJZVEUgICAgcGJ5QnVmZmVyLAotICAgIFVJTlQgICAgIHVUeFR5cGUsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5QnVmZmVyLAorICAgIHVuc2lnbmVkIGludCB1VHhUeXBlLAogICAgIHZvaWQgKiAgIHB2dGRDdXJyLAotICAgIFdPUkQgICAgIHdGcmFnVHlwZSwKLSAgICBVSU5UICAgICBjYlJlcUNvdW50CisgICAgdW5zaWduZWQgc2hvcnQgd0ZyYWdUeXBlLAorICAgIHVuc2lnbmVkIGludCBjYlJlcUNvdW50CiAgICAgKQogewogICAgIFBTVHhCdWZIZWFkIHBUeEJ1ZkhlYWQgPSAoUFNUeEJ1ZkhlYWQpIHBieUJ1ZmZlcjsKQEAgLTEyODksNyArMTI3OCw3IEBACiAgICAgICAgIHB0ZEN1cnItPm1fd0ZJRk9DdGwgPSBwVHhCdWZIZWFkLT53RklGT0N0bDsKICAgICAgICAgcHRkQ3Vyci0+bV93VGltZVN0YW1wID0gcFR4QnVmSGVhZC0+d1RpbWVTdGFtcDsKICAgICAgICAgLy9TZXQgVFNSMSAmIFJlcUNvdW50IGluIFR4RGVzY0hlYWQKLSAgICAgICAgcHRkQ3Vyci0+bV90ZDFURDEud1JlcUNvdW50ID0gY3B1X3RvX2xlMTYoKFdPUkQpKGNiUmVxQ291bnQpKTsKKyAgICAgICAgcHRkQ3Vyci0+bV90ZDFURDEud1JlcUNvdW50ID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KShjYlJlcUNvdW50KSk7CiAgICAgICAgIGlmICh3RnJhZ1R5cGUgPT0gRlJBR0NUTF9FTkRGUkFHKSB7IC8vTGFzdCBGcmFnbWVudGF0aW9uCiAgICAgICAgICAgICBwdGRDdXJyLT5tX3RkMVREMS5ieVRDUiB8PSAoVENSX1NUUCB8IFRDUl9FRFAgfCBFRE1TRFUpOwogICAgICAgICB9CkBAIC0xMzAxLDcgKzEyOTAsNyBAQAogICAgICAgICAvL1BTVHhEZXNjIHB0ZEN1cnIgPSAoUFNUeERlc2Mpc19wdkdldFR4RGVzY0hlYWQocERldmljZSwgdVR4VHlwZSwgdUN1cklkeCk7CiAgICAgICAgIFBTVHhEZXNjIHB0ZEN1cnIgPSAoUFNUeERlc2MpcHZ0ZEN1cnI7CiAgICAgICAgIC8vU2V0IFRTUjEgJiBSZXFDb3VudCBpbiBUeERlc2NIZWFkCi0gICAgICAgIHB0ZEN1cnItPm1fdGQxVEQxLndSZXFDb3VudCA9IGNwdV90b19sZTE2KChXT1JEKShjYlJlcUNvdW50KSk7CisgICAgICAgIHB0ZEN1cnItPm1fdGQxVEQxLndSZXFDb3VudCA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydCkoY2JSZXFDb3VudCkpOwogICAgICAgICBpZiAod0ZyYWdUeXBlID09IEZSQUdDVExfRU5ERlJBRykgeyAvL0xhc3QgRnJhZ21lbnRhdGlvbgogICAgICAgICAgICAgcHRkQ3Vyci0+bV90ZDFURDEuYnlUQ1IgfD0gKFRDUl9TVFAgfCBUQ1JfRURQIHwgRURNU0RVKTsKICAgICAgICAgfQpAQCAtMTMxMCw4MSArMTI5OSw3MCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcFR4QnVmSGVhZC0+d0ZyYWdDdGwgfD0gKFdPUkQpd0ZyYWdUeXBlOy8vMHgwMDAxOyAvLzAwMDAgMDAwMCAwMDAwIDAwMDEKKyAgICBwVHhCdWZIZWFkLT53RnJhZ0N0bCB8PSAodW5zaWduZWQgc2hvcnQpd0ZyYWdUeXBlOy8vMHgwMDAxOyAvLzAwMDAgMDAwMCAwMDAwIDAwMDEKIAogICAgIC8vREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJzX3ZGaWxsRnJhZ1BhcmFtZXRlciBFTkRcbiIpOwogfQogCi1zdGF0aWMKLVVJTlQKLXNfY2JGaWxsVHhCdWZIZWFkICgKLSAgICBQU0RldmljZSAgICAgICAgIHBEZXZpY2UsCi0gICAgQllURSAgICAgICAgICAgICBieVBrdFR5cGUsCi0gICAgUEJZVEUgICAgICAgICAgICBwYnlUeEJ1ZmZlckFkZHIsCi0gICAgVUlOVCAgICAgICAgICAgICBjYkZyYW1lQm9keVNpemUsCi0gICAgVUlOVCAgICAgICAgICAgICB1RE1BSWR4LAotICAgIFBTVHhEZXNjICAgICAgICAgcEhlYWRURCwKLSAgICBQU0V0aGVybmV0SGVhZGVyIHBzRXRoSGVhZGVyLAotICAgIFBCWVRFICAgICAgICAgICAgcFBhY2tldCwKLSAgICBCT09MICAgICAgICAgICAgIGJOZWVkRW5jcnlwdCwKLSAgICBQU0tleUl0ZW0gICAgICAgIHBUcmFuc21pdEtleSwKLSAgICBVSU5UICAgICAgICAgICAgIHVOb2RlSW5kZXgsCi0gICAgUFVJTlQgICAgICAgICAgICBwdU1BQ2ZyYWdOdW0KLSAgICApCitzdGF0aWMgdW5zaWduZWQgaW50CitzX2NiRmlsbFR4QnVmSGVhZChQU0RldmljZSBwRGV2aWNlLCB1bnNpZ25lZCBjaGFyIGJ5UGt0VHlwZSwgdW5zaWduZWQgY2hhciAqcGJ5VHhCdWZmZXJBZGRyLAorCXVuc2lnbmVkIGludCBjYkZyYW1lQm9keVNpemUsIHVuc2lnbmVkIGludCB1RE1BSWR4LCBQU1R4RGVzYyBwSGVhZFRELAorCVBTRXRoZXJuZXRIZWFkZXIgcHNFdGhIZWFkZXIsIHVuc2lnbmVkIGNoYXIgKnBQYWNrZXQsIGJvb2wgYk5lZWRFbmNyeXB0LAorCVBTS2V5SXRlbSBwVHJhbnNtaXRLZXksIHVuc2lnbmVkIGludCB1Tm9kZUluZGV4LCB1bnNpZ25lZCBpbnQgKnB1TUFDZnJhZ051bSkKIHsKLSAgICBVSU5UICAgICAgICAgICBjYk1BQ0hkTGVuOwotICAgIFVJTlQgICAgICAgICAgIGNiRnJhbWVTaXplOwotICAgIFVJTlQgICAgICAgICAgIGNiRnJhZ21lbnRTaXplOyAvL0hkcisoSVYpK3BheW9hZCsoTUlDKSsoSUNWKStGQ1MKLSAgICBVSU5UICAgICAgICAgICBjYkZyYWdQYXlsb2FkU2l6ZTsKLSAgICBVSU5UICAgICAgICAgICBjYkxhc3RGcmFnbWVudFNpemU7IC8vSGRyKyhJVikrcGF5b2FkKyhNSUMpKyhJQ1YpK0ZDUwotICAgIFVJTlQgICAgICAgICAgIGNiTGFzdEZyYWdQYXlsb2FkU2l6ZTsKLSAgICBVSU5UICAgICAgICAgICB1RnJhZ0lkeDsKLSAgICBQQllURSAgICAgICAgICBwYnlQYXlsb2FkSGVhZDsKLSAgICBQQllURSAgICAgICAgICBwYnlJVkhlYWQ7Ci0gICAgUEJZVEUgICAgICAgICAgcGJ5TWFjSGRyOwotICAgIFdPUkQgICAgICAgICAgIHdGcmFnVHlwZTsgLy8wMDpOb24tRnJhZywgMDE6U3RhcnQsIDEwOk1pZCwgMTE6TGFzdAotICAgIFVJTlQgICAgICAgICAgIHVEdXJhdGlvbjsKLSAgICBQQllURSAgICAgICAgICBwYnlCdWZmZXI7Ci0vLyAgICBVSU5UICAgICAgICAgICB1S2V5RW50cnlJZHggPSBOVU1fS0VZX0VOVFJZKzE7Ci0vLyAgICBCWVRFICAgICAgICAgICBieUtleVNlbCA9IDB4RkY7Ci0gICAgVUlOVCAgICAgICAgICAgY2JJVmxlbiA9IDA7Ci0gICAgVUlOVCAgICAgICAgICAgY2JJQ1ZsZW4gPSAwOwotICAgIFVJTlQgICAgICAgICAgIGNiTUlDbGVuID0gMDsKLSAgICBVSU5UICAgICAgICAgICBjYkZDU2xlbiA9IDQ7Ci0gICAgVUlOVCAgICAgICAgICAgY2I4MDJfMV9IX2xlbiA9IDA7Ci0gICAgVUlOVCAgICAgICAgICAgdUxlbmd0aCA9IDA7Ci0gICAgVUlOVCAgICAgICAgICAgdVRtcExlbiA9IDA7Ci0vLyAgICBCWVRFICAgICAgICAgICBhYnlUbXBbOF07Ci0vLyAgICBEV09SRCAgICAgICAgICBkd0NSQzsKLSAgICBVSU5UICAgICAgICAgICBjYk1JQ0hEUiA9IDA7Ci0gICAgRFdPUkQgICAgICAgICAgZHdNSUNLZXkwLCBkd01JQ0tleTE7Ci0gICAgRFdPUkQgICAgICAgICAgZHdNSUNfUHJpb3JpdHk7Ci0gICAgUERXT1JEICAgICAgICAgcGR3TUlDX0w7Ci0gICAgUERXT1JEICAgICAgICAgcGR3TUlDX1I7Ci0gICAgRFdPUkQgICAgICAgICAgZHdTYWZlTUlDX0wsIGR3U2FmZU1JQ19SOyAvL0ZpeCAiTGFzdCBGcmFnIFNpemUiIDwgIk1JQyBsZW5ndGgiLgotICAgIEJPT0wgICAgICAgICAgIGJNSUMyRnJhZyA9IEZBTFNFOwotICAgIFVJTlQgICAgICAgICAgIHVNSUNGcmFnTGVuID0gMDsKLSAgICBVSU5UICAgICAgICAgICB1TUFDZnJhZ051bSA9IDE7Ci0gICAgVUlOVCAgICAgICAgICAgdVBhZGRpbmcgPSAwOwotICAgIFVJTlQgICAgICAgICAgIGNiUmVxQ291bnQgPSAwOworICAgIHVuc2lnbmVkIGludCBjYk1BQ0hkTGVuOworICAgIHVuc2lnbmVkIGludCBjYkZyYW1lU2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgY2JGcmFnbWVudFNpemU7IC8vSGRyKyhJVikrcGF5b2FkKyhNSUMpKyhJQ1YpK0ZDUworICAgIHVuc2lnbmVkIGludCBjYkZyYWdQYXlsb2FkU2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgY2JMYXN0RnJhZ21lbnRTaXplOyAvL0hkcisoSVYpK3BheW9hZCsoTUlDKSsoSUNWKStGQ1MKKyAgICB1bnNpZ25lZCBpbnQgY2JMYXN0RnJhZ1BheWxvYWRTaXplOworICAgIHVuc2lnbmVkIGludCB1RnJhZ0lkeDsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlQYXlsb2FkSGVhZDsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlJVkhlYWQ7CisgICAgdW5zaWduZWQgY2hhciAqcGJ5TWFjSGRyOworICAgIHVuc2lnbmVkIHNob3J0IHdGcmFnVHlwZTsgLy8wMDpOb24tRnJhZywgMDE6U3RhcnQsIDEwOk1pZCwgMTE6TGFzdAorICAgIHVuc2lnbmVkIGludCB1RHVyYXRpb247CisgICAgdW5zaWduZWQgY2hhciAqcGJ5QnVmZmVyOworLy8gICAgdW5zaWduZWQgaW50IHVLZXlFbnRyeUlkeCA9IE5VTV9LRVlfRU5UUlkrMTsKKy8vICAgIHVuc2lnbmVkIGNoYXIgYnlLZXlTZWwgPSAweEZGOworICAgIHVuc2lnbmVkIGludCBjYklWbGVuID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgY2JJQ1ZsZW4gPSAwOworICAgIHVuc2lnbmVkIGludCBjYk1JQ2xlbiA9IDA7CisgICAgdW5zaWduZWQgaW50IGNiRkNTbGVuID0gNDsKKyAgICB1bnNpZ25lZCBpbnQgY2I4MDJfMV9IX2xlbiA9IDA7CisgICAgdW5zaWduZWQgaW50IHVMZW5ndGggPSAwOworICAgIHVuc2lnbmVkIGludCB1VG1wTGVuID0gMDsKKy8vICAgIHVuc2lnbmVkIGNoYXIgYWJ5VG1wWzhdOworLy8gICAgdW5zaWduZWQgbG9uZyBkd0NSQzsKKyAgICB1bnNpZ25lZCBpbnQgY2JNSUNIRFIgPSAwOworICAgIHVuc2lnbmVkIGxvbmcgZHdNSUNLZXkwLCBkd01JQ0tleTE7CisgICAgdW5zaWduZWQgbG9uZyBkd01JQ19Qcmlvcml0eTsKKyAgICB1bnNpZ25lZCBsb25nICpwZHdNSUNfTDsKKyAgICB1bnNpZ25lZCBsb25nICpwZHdNSUNfUjsKKyAgICB1bnNpZ25lZCBsb25nIGR3U2FmZU1JQ19MLCBkd1NhZmVNSUNfUjsgLy9GaXggIkxhc3QgRnJhZyBTaXplIiA8ICJNSUMgbGVuZ3RoIi4KKyAgICBib29sIGJNSUMyRnJhZyA9IGZhbHNlOworICAgIHVuc2lnbmVkIGludCB1TUlDRnJhZ0xlbiA9IDA7CisgICAgdW5zaWduZWQgaW50IHVNQUNmcmFnTnVtID0gMTsKKyAgICB1bnNpZ25lZCBpbnQgdVBhZGRpbmcgPSAwOworICAgIHVuc2lnbmVkIGludCBjYlJlcUNvdW50ID0gMDsKIAotICAgIEJPT0wgICAgICAgICAgIGJOZWVkQUNLOwotICAgIEJPT0wgICAgICAgICAgIGJSVFM7Ci0gICAgQk9PTCAgICAgICAgICAgYklzQWRob2M7Ci0gICAgUEJZVEUgICAgICAgICAgcGJ5VHlwZTsKKyAgICBib29sIGJOZWVkQUNLOworICAgIGJvb2wgYlJUUzsKKyAgICBib29sIGJJc0FkaG9jOworICAgIHVuc2lnbmVkIGNoYXIgKnBieVR5cGU7CiAgICAgUFNUeERlc2MgICAgICAgcHRkQ3VycjsKICAgICBQU1R4QnVmSGVhZCAgICBwc1R4QnVmSGQgPSAoUFNUeEJ1ZkhlYWQpIHBieVR4QnVmZmVyQWRkcjsKLS8vICAgIFVJTlQgICAgICAgICAgIHRtcERlc2NJZHg7Ci0gICAgVUlOVCAgICAgICAgICAgY2JIZWFkZXJMZW5ndGggPSAwOworLy8gICAgdW5zaWduZWQgaW50IHRtcERlc2NJZHg7CisgICAgdW5zaWduZWQgaW50IGNiSGVhZGVyTGVuZ3RoID0gMDsKICAgICB2b2lkICogICAgICAgICBwdlJydlRpbWU7CiAgICAgUFNNSUNIRFJIZWFkICAgcE1JQ0hEUjsKICAgICB2b2lkICogICAgICAgICBwdlJUUzsKICAgICB2b2lkICogICAgICAgICBwdkNUUzsKICAgICB2b2lkICogICAgICAgICBwdlR4RGF0YUhkOwotICAgIFdPUkQgICAgICAgICAgIHdUeEJ1ZlNpemU7ICAgLy8gRkZpbmZvIHNpemUKLSAgICBVSU5UICAgICAgICAgICB1VG90YWxDb3B5TGVuZ3RoID0gMDsKLSAgICBCWVRFICAgICAgICAgICBieUZCT3B0aW9uID0gQVVUT19GQl9OT05FOwotICAgIEJPT0wgICAgICAgICAgIGJJc1dFUDI1NiA9IEZBTFNFOworICAgIHVuc2lnbmVkIHNob3J0IHdUeEJ1ZlNpemU7ICAgLy8gRkZpbmZvIHNpemUKKyAgICB1bnNpZ25lZCBpbnQgdVRvdGFsQ29weUxlbmd0aCA9IDA7CisgICAgdW5zaWduZWQgY2hhciBieUZCT3B0aW9uID0gQVVUT19GQl9OT05FOworICAgIGJvb2wgYklzV0VQMjU2ID0gZmFsc2U7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7CiAKIApAQCAtMTM5NCwxOSArMTM3MiwxNiBAQAogICAgIGlmICgocERldmljZS0+ZU9QTW9kZSA9PSBPUF9NT0RFX0FESE9DKSB8fAogICAgICAgICAocERldmljZS0+ZU9QTW9kZSA9PSBPUF9NT0RFX0FQKSkgewogCi0gICAgICAgIGlmIChJU19NVUxUSUNBU1RfQUREUkVTUygmKHBzRXRoSGVhZGVyLT5hYnlEc3RBZGRyWzBdKSkgfHwKLSAgICAgICAgICAgIElTX0JST0FEQ0FTVF9BRERSRVNTKCYocHNFdGhIZWFkZXItPmFieURzdEFkZHJbMF0pKSkgewotICAgICAgICAgICAgYk5lZWRBQ0sgPSBGQUxTRTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGJOZWVkQUNLID0gVFJVRTsKLSAgICAgICAgfQotICAgICAgICBiSXNBZGhvYyA9IFRSVUU7CisJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKCYocHNFdGhIZWFkZXItPmFieURzdEFkZHJbMF0pKSkKKwkJYk5lZWRBQ0sgPSBmYWxzZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYk5lZWRBQ0sgPSB0cnVlOworICAgICAgICBiSXNBZGhvYyA9IHRydWU7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICAvLyBNU0RVcyBpbiBJbmZyYSBtb2RlIGFsd2F5cyBuZWVkIEFDSwotICAgICAgICBiTmVlZEFDSyA9IFRSVUU7Ci0gICAgICAgIGJJc0FkaG9jID0gRkFMU0U7CisgICAgICAgIGJOZWVkQUNLID0gdHJ1ZTsKKyAgICAgICAgYklzQWRob2MgPSBmYWxzZTsKICAgICB9CiAKICAgICBpZiAocERldmljZS0+YkxvbmdIZWFkZXIpCkBAIC0xNDE1LDEyICsxMzkwLDEyIEBACiAgICAgICAgIGNiTUFDSGRMZW4gPSBXTEFOX0hEUl9BRERSM19MRU47CiAKIAotICAgIGlmICgoYk5lZWRFbmNyeXB0ID09IFRSVUUpICYmIChwVHJhbnNtaXRLZXkgIT0gTlVMTCkpIHsKKyAgICBpZiAoKGJOZWVkRW5jcnlwdCA9PSB0cnVlKSAmJiAocFRyYW5zbWl0S2V5ICE9IE5VTEwpKSB7CiAgICAgICAgIGlmIChwVHJhbnNtaXRLZXktPmJ5Q2lwaGVyU3VpdGUgPT0gS0VZX0NUTF9XRVApIHsKICAgICAgICAgICAgIGNiSVZsZW4gPSA0OwogICAgICAgICAgICAgY2JJQ1ZsZW4gPSA0OwogICAgICAgICAgICAgaWYgKHBUcmFuc21pdEtleS0+dUtleUxlbmd0aCA9PSBXTEFOX1dFUDIzMl9LRVlMRU4pIHsKLSAgICAgICAgICAgICAgICBiSXNXRVAyNTYgPSBUUlVFOworICAgICAgICAgICAgICAgIGJJc1dFUDI1NiA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKHBUcmFuc21pdEtleS0+YnlDaXBoZXJTdWl0ZSA9PSBLRVlfQ1RMX1RLSVApIHsKQEAgLTE0NDMsMTQgKzE0MTgsMTQgQEAKIAogICAgIGNiRnJhbWVTaXplID0gY2JNQUNIZExlbiArIGNiSVZsZW4gKyAoY2JGcmFtZUJvZHlTaXplICsgY2JNSUNsZW4pICsgY2JJQ1ZsZW4gKyBjYkZDU2xlbjsKIAotICAgIGlmICgoYk5lZWRBQ0sgPT0gRkFMU0UpIHx8CisgICAgaWYgKChiTmVlZEFDSyA9PSBmYWxzZSkgfHwKICAgICAgICAgKGNiRnJhbWVTaXplIDwgcERldmljZS0+d1JUU1RocmVzaG9sZCkgfHwKICAgICAgICAgKChjYkZyYW1lU2l6ZSA+PSBwRGV2aWNlLT53RnJhZ21lbnRhdGlvblRocmVzaG9sZCkgJiYgKHBEZXZpY2UtPndGcmFnbWVudGF0aW9uVGhyZXNob2xkIDw9IHBEZXZpY2UtPndSVFNUaHJlc2hvbGQpKQogICAgICAgICApIHsKLSAgICAgICAgYlJUUyA9IEZBTFNFOworICAgICAgICBiUlRTID0gZmFsc2U7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBiUlRTID0gVFJVRTsKKyAgICAgICAgYlJUUyA9IHRydWU7CiAgICAgICAgIHBzVHhCdWZIZC0+d0ZJRk9DdGwgfD0gKEZJRk9DVExfUlRTIHwgRklGT0NUTF9MUkVUUlkpOwogICAgIH0KICAgICAvLwpAQCAtMTQ2OSw3ICsxNDQ0LDcgQEAKICAgICBpZiAoYnlQa3RUeXBlID09IFBLX1RZUEVfMTFHQiB8fCBieVBrdFR5cGUgPT0gUEtfVFlQRV8xMUdBKSB7Ly84MDIuMTFnIHBhY2tldAogCiAgICAgICAgIGlmIChieUZCT3B0aW9uID09IEFVVE9fRkJfTk9ORSkgewotICAgICAgICAgICAgaWYgKGJSVFMgPT0gVFJVRSkgey8vUlRTX25lZWQKKyAgICAgICAgICAgIGlmIChiUlRTID09IHRydWUpIHsvL1JUU19uZWVkCiAgICAgICAgICAgICAgICAgcHZScnZUaW1lID0gKFBTUnJ2VGltZV9nUlRTKSAocGJ5VHhCdWZmZXJBZGRyICsgd1R4QnVmU2l6ZSk7CiAgICAgICAgICAgICAgICAgcE1JQ0hEUiA9IChQU01JQ0hEUkhlYWQpIChwYnlUeEJ1ZmZlckFkZHIgKyB3VHhCdWZTaXplICsgc2l6ZW9mKFNScnZUaW1lX2dSVFMpKTsKICAgICAgICAgICAgICAgICBwdlJUUyA9IChQU1JUU19nKSAocGJ5VHhCdWZmZXJBZGRyICsgd1R4QnVmU2l6ZSArIHNpemVvZihTUnJ2VGltZV9nUlRTKSArIGNiTUlDSERSKTsKQEAgLTE0ODcsNyArMTQ2Miw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBBdXRvIEZhbGwgQmFjawotICAgICAgICAgICAgaWYgKGJSVFMgPT0gVFJVRSkgey8vUlRTX25lZWQKKyAgICAgICAgICAgIGlmIChiUlRTID09IHRydWUpIHsvL1JUU19uZWVkCiAgICAgICAgICAgICAgICAgcHZScnZUaW1lID0gKFBTUnJ2VGltZV9nUlRTKSAocGJ5VHhCdWZmZXJBZGRyICsgd1R4QnVmU2l6ZSk7CiAgICAgICAgICAgICAgICAgcE1JQ0hEUiA9IChQU01JQ0hEUkhlYWQpIChwYnlUeEJ1ZmZlckFkZHIgKyB3VHhCdWZTaXplICsgc2l6ZW9mKFNScnZUaW1lX2dSVFMpKTsKICAgICAgICAgICAgICAgICBwdlJUUyA9IChQU1JUU19nX0ZCKSAocGJ5VHhCdWZmZXJBZGRyICsgd1R4QnVmU2l6ZSArIHNpemVvZihTUnJ2VGltZV9nUlRTKSArIGNiTUlDSERSKTsKQEAgLTE1MDgsNyArMTQ4Myw3IEBACiAgICAgZWxzZSB7Ly84MDIuMTFhL2IgcGFja2V0CiAKICAgICAgICAgaWYgKGJ5RkJPcHRpb24gPT0gQVVUT19GQl9OT05FKSB7Ci0gICAgICAgICAgICBpZiAoYlJUUyA9PSBUUlVFKSB7CisgICAgICAgICAgICBpZiAoYlJUUyA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgcHZScnZUaW1lID0gKFBTUnJ2VGltZV9hYikgKHBieVR4QnVmZmVyQWRkciArIHdUeEJ1ZlNpemUpOwogICAgICAgICAgICAgICAgIHBNSUNIRFIgPSAoUFNNSUNIRFJIZWFkKSAocGJ5VHhCdWZmZXJBZGRyICsgd1R4QnVmU2l6ZSArIHNpemVvZihTUnJ2VGltZV9hYikpOwogICAgICAgICAgICAgICAgIHB2UlRTID0gKFBTUlRTX2FiKSAocGJ5VHhCdWZmZXJBZGRyICsgd1R4QnVmU2l6ZSArIHNpemVvZihTUnJ2VGltZV9hYikgKyBjYk1JQ0hEUik7CkBAIC0xNTI2LDcgKzE1MDEsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gQXV0byBGYWxsIEJhY2sKLSAgICAgICAgICAgIGlmIChiUlRTID09IFRSVUUpIHsvL1JUU19uZWVkCisgICAgICAgICAgICBpZiAoYlJUUyA9PSB0cnVlKSB7Ly9SVFNfbmVlZAogICAgICAgICAgICAgICAgIHB2UnJ2VGltZSA9IChQU1JydlRpbWVfYWIpIChwYnlUeEJ1ZmZlckFkZHIgKyB3VHhCdWZTaXplKTsKICAgICAgICAgICAgICAgICBwTUlDSERSID0gKFBTTUlDSERSSGVhZCkgKHBieVR4QnVmZmVyQWRkciArIHdUeEJ1ZlNpemUgKyBzaXplb2YoU1JydlRpbWVfYWIpKTsKICAgICAgICAgICAgICAgICBwdlJUUyA9IChQU1JUU19hX0ZCKSAocGJ5VHhCdWZmZXJBZGRyICsgd1R4QnVmU2l6ZSArIHNpemVvZihTUnJ2VGltZV9hYikgKyBjYk1JQ0hEUik7CkBAIC0xNTQ3LDQwICsxNTIyLDQwIEBACiAgICAgbWVtc2V0KCh2b2lkICopKHBieVR4QnVmZmVyQWRkciArIHdUeEJ1ZlNpemUpLCAwLCAoY2JIZWFkZXJMZW5ndGggLSB3VHhCdWZTaXplKSk7CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIGlmICgoYk5lZWRFbmNyeXB0ID09IFRSVUUpICYmIChwVHJhbnNtaXRLZXkgIT0gTlVMTCkgJiYgKHBUcmFuc21pdEtleS0+YnlDaXBoZXJTdWl0ZSA9PSBLRVlfQ1RMX1RLSVApKSB7CisgICAgaWYgKChiTmVlZEVuY3J5cHQgPT0gdHJ1ZSkgJiYgKHBUcmFuc21pdEtleSAhPSBOVUxMKSAmJiAocFRyYW5zbWl0S2V5LT5ieUNpcGhlclN1aXRlID09IEtFWV9DVExfVEtJUCkpIHsKICAgICAgICAgaWYgKHBEZXZpY2UtPnBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBTk9ORSkgewotICAgICAgICAgICAgZHdNSUNLZXkwID0gKihQRFdPUkQpKCZwVHJhbnNtaXRLZXktPmFieUtleVsxNl0pOwotICAgICAgICAgICAgZHdNSUNLZXkxID0gKihQRFdPUkQpKCZwVHJhbnNtaXRLZXktPmFieUtleVsyMF0pOworICAgICAgICAgICAgZHdNSUNLZXkwID0gKih1bnNpZ25lZCBsb25nICopKCZwVHJhbnNtaXRLZXktPmFieUtleVsxNl0pOworICAgICAgICAgICAgZHdNSUNLZXkxID0gKih1bnNpZ25lZCBsb25nICopKCZwVHJhbnNtaXRLZXktPmFieUtleVsyMF0pOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKChwVHJhbnNtaXRLZXktPmR3S2V5SW5kZXggJiBBVVRIRU5USUNBVE9SX0tFWSkgIT0gMCkgewotICAgICAgICAgICAgZHdNSUNLZXkwID0gKihQRFdPUkQpKCZwVHJhbnNtaXRLZXktPmFieUtleVsxNl0pOwotICAgICAgICAgICAgZHdNSUNLZXkxID0gKihQRFdPUkQpKCZwVHJhbnNtaXRLZXktPmFieUtleVsyMF0pOworICAgICAgICAgICAgZHdNSUNLZXkwID0gKih1bnNpZ25lZCBsb25nICopKCZwVHJhbnNtaXRLZXktPmFieUtleVsxNl0pOworICAgICAgICAgICAgZHdNSUNLZXkxID0gKih1bnNpZ25lZCBsb25nICopKCZwVHJhbnNtaXRLZXktPmFieUtleVsyMF0pOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgZHdNSUNLZXkwID0gKihQRFdPUkQpKCZwVHJhbnNtaXRLZXktPmFieUtleVsyNF0pOwotICAgICAgICAgICAgZHdNSUNLZXkxID0gKihQRFdPUkQpKCZwVHJhbnNtaXRLZXktPmFieUtleVsyOF0pOworICAgICAgICAgICAgZHdNSUNLZXkwID0gKih1bnNpZ25lZCBsb25nICopKCZwVHJhbnNtaXRLZXktPmFieUtleVsyNF0pOworICAgICAgICAgICAgZHdNSUNLZXkxID0gKih1bnNpZ25lZCBsb25nICopKCZwVHJhbnNtaXRLZXktPmFieUtleVsyOF0pOwogICAgICAgICB9CiAgICAgICAgIC8vIERPIFNvZnR3YXJlIE1pY2hhZWwKICAgICAgICAgTUlDX3ZJbml0KGR3TUlDS2V5MCwgZHdNSUNLZXkxKTsKLSAgICAgICAgTUlDX3ZBcHBlbmQoKFBCWVRFKSYocHNFdGhIZWFkZXItPmFieURzdEFkZHJbMF0pLCAxMik7CisgICAgICAgIE1JQ192QXBwZW5kKCh1bnNpZ25lZCBjaGFyICopJihwc0V0aEhlYWRlci0+YWJ5RHN0QWRkclswXSksIDEyKTsKICAgICAgICAgZHdNSUNfUHJpb3JpdHkgPSAwOwotICAgICAgICBNSUNfdkFwcGVuZCgoUEJZVEUpJmR3TUlDX1ByaW9yaXR5LCA0KTsKKyAgICAgICAgTUlDX3ZBcHBlbmQoKHVuc2lnbmVkIGNoYXIgKikmZHdNSUNfUHJpb3JpdHksIDQpOwogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIk1JQyBLRVk6ICVsWCwgJWxYXG4iLCBkd01JQ0tleTAsIGR3TUlDS2V5MSk7CiAgICAgfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLSAgICBwYnlNYWNIZHIgPSAoUEJZVEUpKHBieVR4QnVmZmVyQWRkciArIGNiSGVhZGVyTGVuZ3RoKTsKLSAgICBwYnlQYXlsb2FkSGVhZCA9IChQQllURSkocGJ5TWFjSGRyICsgY2JNQUNIZExlbiArIHVQYWRkaW5nICsgY2JJVmxlbik7Ci0gICAgcGJ5SVZIZWFkID0gKFBCWVRFKShwYnlNYWNIZHIgKyBjYk1BQ0hkTGVuICsgdVBhZGRpbmcpOworICAgIHBieU1hY0hkciA9ICh1bnNpZ25lZCBjaGFyICopKHBieVR4QnVmZmVyQWRkciArIGNiSGVhZGVyTGVuZ3RoKTsKKyAgICBwYnlQYXlsb2FkSGVhZCA9ICh1bnNpZ25lZCBjaGFyICopKHBieU1hY0hkciArIGNiTUFDSGRMZW4gKyB1UGFkZGluZyArIGNiSVZsZW4pOworICAgIHBieUlWSGVhZCA9ICh1bnNpZ25lZCBjaGFyICopKHBieU1hY0hkciArIGNiTUFDSGRMZW4gKyB1UGFkZGluZyk7CiAKLSAgICBpZiAoKGNiRnJhbWVTaXplID4gcERldmljZS0+d0ZyYWdtZW50YXRpb25UaHJlc2hvbGQpICYmIChiTmVlZEFDSyA9PSBUUlVFKSAmJiAoYklzV0VQMjU2ID09IEZBTFNFKSkgeworICAgIGlmICgoY2JGcmFtZVNpemUgPiBwRGV2aWNlLT53RnJhZ21lbnRhdGlvblRocmVzaG9sZCkgJiYgKGJOZWVkQUNLID09IHRydWUpICYmIChiSXNXRVAyNTYgPT0gZmFsc2UpKSB7CiAgICAgICAgIC8vIEZyYWdtZW50YXRpb24KICAgICAgICAgLy8gRnJhZ1RocmVzaG9sZCA9IEZyYWdtZW50IHNpemUoSGRyKyhJVikrZnJhZ21lbnQgcGF5bG9hZCsoTUlDKSsoSUNWKStGQ1MpCiAgICAgICAgIGNiRnJhZ21lbnRTaXplID0gcERldmljZS0+d0ZyYWdtZW50YXRpb25UaHJlc2hvbGQ7CiAgICAgICAgIGNiRnJhZ1BheWxvYWRTaXplID0gY2JGcmFnbWVudFNpemUgLSBjYk1BQ0hkTGVuIC0gY2JJVmxlbiAtIGNiSUNWbGVuIC0gY2JGQ1NsZW47CiAgICAgICAgIC8vRnJhZ051bSA9IChGcmFtZVNpemUtKEhkcitGQ1MpKS8oRnJhZ21lbnQgU2l6ZSAtKEhyZCtGQ1MpKSkKLSAgICAgICAgdU1BQ2ZyYWdOdW0gPSAoV09SRCkgKChjYkZyYW1lQm9keVNpemUgKyBjYk1JQ2xlbikgLyBjYkZyYWdQYXlsb2FkU2l6ZSk7CisgICAgICAgIHVNQUNmcmFnTnVtID0gKHVuc2lnbmVkIHNob3J0KSAoKGNiRnJhbWVCb2R5U2l6ZSArIGNiTUlDbGVuKSAvIGNiRnJhZ1BheWxvYWRTaXplKTsKICAgICAgICAgY2JMYXN0RnJhZ1BheWxvYWRTaXplID0gKGNiRnJhbWVCb2R5U2l6ZSArIGNiTUlDbGVuKSAlIGNiRnJhZ1BheWxvYWRTaXplOwogICAgICAgICBpZiAoY2JMYXN0RnJhZ1BheWxvYWRTaXplID09IDApIHsKICAgICAgICAgICAgIGNiTGFzdEZyYWdQYXlsb2FkU2l6ZSA9IGNiRnJhZ1BheWxvYWRTaXplOwpAQCAtMTYwNiwxMyArMTU4MSwxMyBAQAogICAgICAgICAgICAgICAgIHVEdXJhdGlvbiA9IHNfdUZpbGxEYXRhSGVhZChwRGV2aWNlLCBieVBrdFR5cGUsIHB2VHhEYXRhSGQsIGNiRnJhZ21lbnRTaXplLCB1RE1BSWR4LCBiTmVlZEFDSywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUZyYWdJZHgsIGNiTGFzdEZyYWdtZW50U2l6ZSwgdU1BQ2ZyYWdOdW0sIGJ5RkJPcHRpb24sIHBEZXZpY2UtPndDdXJyZW50UmF0ZSk7CiAgICAgICAgICAgICAgICAgLy8gR2VuZXJhdGUgVFggTUFDIEhlYWRlcgotICAgICAgICAgICAgICAgIHZHZW5lcmF0ZU1BQ0hlYWRlcihwRGV2aWNlLCBwYnlNYWNIZHIsIChXT1JEKXVEdXJhdGlvbiwgcHNFdGhIZWFkZXIsIGJOZWVkRW5jcnlwdCwKKyAgICAgICAgICAgICAgICB2R2VuZXJhdGVNQUNIZWFkZXIocERldmljZSwgcGJ5TWFjSGRyLCAodW5zaWduZWQgc2hvcnQpdUR1cmF0aW9uLCBwc0V0aEhlYWRlciwgYk5lZWRFbmNyeXB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3RnJhZ1R5cGUsIHVETUFJZHgsIHVGcmFnSWR4KTsKIAotICAgICAgICAgICAgICAgIGlmIChiTmVlZEVuY3J5cHQgPT0gVFJVRSkgeworICAgICAgICAgICAgICAgIGlmIChiTmVlZEVuY3J5cHQgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAvL0ZpbGwgVFhLRVkKLSAgICAgICAgICAgICAgICAgICAgc192RmlsbFR4S2V5KHBEZXZpY2UsIChQQllURSkocHNUeEJ1ZkhkLT5hZHdUeEtleSksIHBieUlWSGVhZCwgcFRyYW5zbWl0S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJ5TWFjSGRyLCAoV09SRCljYkZyYWdQYXlsb2FkU2l6ZSwgKFBCWVRFKXBNSUNIRFIpOworICAgICAgICAgICAgICAgICAgICBzX3ZGaWxsVHhLZXkocERldmljZSwgKHVuc2lnbmVkIGNoYXIgKikocHNUeEJ1ZkhkLT5hZHdUeEtleSksIHBieUlWSGVhZCwgcFRyYW5zbWl0S2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJ5TWFjSGRyLCAodW5zaWduZWQgc2hvcnQpY2JGcmFnUGF5bG9hZFNpemUsICh1bnNpZ25lZCBjaGFyICopcE1JQ0hEUik7CiAgICAgICAgICAgICAgICAgICAgIC8vRmlsbCBJVihFeHRJVixSU05IRFIpCiAgICAgICAgICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iRW5hYmxlSG9zdFdFUCkgewogICAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5kd1RTQzQ3XzE2ID0gcFRyYW5zbWl0S2V5LT5kd1RTQzQ3XzE2OwpAQCAtMTYyNSwxMyArMTYwMCwxMyBAQAogICAgICAgICAgICAgICAgIGlmIChudG9ocyhwc0V0aEhlYWRlci0+d1R5cGUpID4gRVRIX0RBVEFfTEVOKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICgocHNFdGhIZWFkZXItPndUeXBlID09IFRZUEVfUEtUX0lQWCkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgIChwc0V0aEhlYWRlci0+d1R5cGUgPT0gY3B1X3RvX2xlMTYoMHhGMzgwKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgoUEJZVEUpIChwYnlQYXlsb2FkSGVhZCksICZwRGV2aWNlLT5hYnlTTkFQX0JyaWRnZXR1bm5lbFswXSwgNik7CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoKHVuc2lnbmVkIGNoYXIgKikgKHBieVBheWxvYWRIZWFkKSwgJnBEZXZpY2UtPmFieVNOQVBfQnJpZGdldHVubmVsWzBdLCA2KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgoUEJZVEUpIChwYnlQYXlsb2FkSGVhZCksICZwRGV2aWNlLT5hYnlTTkFQX1JGQzEwNDJbMF0sIDYpOworICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCh1bnNpZ25lZCBjaGFyICopIChwYnlQYXlsb2FkSGVhZCksICZwRGV2aWNlLT5hYnlTTkFQX1JGQzEwNDJbMF0sIDYpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHBieVR5cGUgPSAoUEJZVEUpIChwYnlQYXlsb2FkSGVhZCArIDYpOwotICAgICAgICAgICAgICAgICAgICBtZW1jcHkocGJ5VHlwZSwgJihwc0V0aEhlYWRlci0+d1R5cGUpLCBzaXplb2YoV09SRCkpOworICAgICAgICAgICAgICAgICAgICBwYnlUeXBlID0gKHVuc2lnbmVkIGNoYXIgKikgKHBieVBheWxvYWRIZWFkICsgNik7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweShwYnlUeXBlLCAmKHBzRXRoSGVhZGVyLT53VHlwZSksIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpOwogICAgICAgICAgICAgICAgICAgICBjYjgwMl8xX0hfbGVuID0gODsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTE2NDEsMTUgKzE2MTYsMTUgQEAKICAgICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgIC8vRmlsbCBNSUNIRFIKICAgICAgICAgICAgICAgICAvL2lmIChwRGV2aWNlLT5iQUVTKSB7Ci0gICAgICAgICAgICAgICAgLy8gICAgc192RmlsbE1JQ0hEUihwRGV2aWNlLCAoUEJZVEUpcE1JQ0hEUiwgcGJ5TWFjSGRyLCAoV09SRCljYkZyYWdQYXlsb2FkU2l6ZSk7CisgICAgICAgICAgICAgICAgLy8gICAgc192RmlsbE1JQ0hEUihwRGV2aWNlLCAodW5zaWduZWQgY2hhciAqKXBNSUNIRFIsIHBieU1hY0hkciwgKHVuc2lnbmVkIHNob3J0KWNiRnJhZ1BheWxvYWRTaXplKTsKICAgICAgICAgICAgICAgICAvL30KICAgICAgICAgICAgICAgICAvL2NiUmVxQ291bnQgKz0gc191RG9FbmNyeXB0aW9uKHBEZXZpY2UsIHBzRXRoSGVhZGVyLCAodm9pZCAqKXBzVHhCdWZIZCwgYnlLZXlTZWwsCi0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBieVBheWxvYWRIZWFkLCAoV09SRCljYkZyYWdQYXlsb2FkU2l6ZSwgdURNQUlkeCk7CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBieVBheWxvYWRIZWFkLCAodW5zaWduZWQgc2hvcnQpY2JGcmFnUGF5bG9hZFNpemUsIHVETUFJZHgpOwogCiAKIAotICAgICAgICAgICAgICAgIC8vcGJ5QnVmZmVyID0gKFBCWVRFKXBEZXZpY2UtPmFhbVR4QnVmW3VETUFJZHhdW3VEZXNjSWR4XS5wYnlWQWRkcjsKLSAgICAgICAgICAgICAgICBwYnlCdWZmZXIgPSAoUEJZVEUpcEhlYWRURC0+cFRESW5mby0+YnVmOworICAgICAgICAgICAgICAgIC8vcGJ5QnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKilwRGV2aWNlLT5hYW1UeEJ1Zlt1RE1BSWR4XVt1RGVzY0lkeF0ucGJ5VkFkZHI7CisgICAgICAgICAgICAgICAgcGJ5QnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKilwSGVhZFRELT5wVERJbmZvLT5idWY7CiAKICAgICAgICAgICAgICAgICB1TGVuZ3RoID0gY2JIZWFkZXJMZW5ndGggKyBjYk1BQ0hkTGVuICsgdVBhZGRpbmcgKyBjYklWbGVuICsgY2I4MDJfMV9IX2xlbjsKICAgICAgICAgICAgICAgICAvL2NvcHkgVHhCdWZmZXJIZWFkZXIgKyBNYWNIZWFkZXIgdG8gZGVzYwpAQCAtMTY2MSw3ICsxNjM2LDcgQEAKIAogICAgICAgICAgICAgICAgIHVUb3RhbENvcHlMZW5ndGggKz0gY2JGcmFnUGF5bG9hZFNpemUgLSBjYjgwMl8xX0hfbGVuOwogCi0gICAgICAgICAgICAgICAgaWYgKChiTmVlZEVuY3J5cHQgPT0gVFJVRSkgJiYgKHBUcmFuc21pdEtleSAhPSBOVUxMKSAmJiAocFRyYW5zbWl0S2V5LT5ieUNpcGhlclN1aXRlID09IEtFWV9DVExfVEtJUCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoKGJOZWVkRW5jcnlwdCA9PSB0cnVlKSAmJiAocFRyYW5zbWl0S2V5ICE9IE5VTEwpICYmIChwVHJhbnNtaXRLZXktPmJ5Q2lwaGVyU3VpdGUgPT0gS0VZX0NUTF9US0lQKSkgewogICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIlN0YXJ0IE1JQzogJWRcbiIsIGNiRnJhZ1BheWxvYWRTaXplKTsKICAgICAgICAgICAgICAgICAgICAgTUlDX3ZBcHBlbmQoKHBieUJ1ZmZlciArIHVMZW5ndGggLSBjYjgwMl8xX0hfbGVuKSwgY2JGcmFnUGF5bG9hZFNpemUpOwogCkBAIC0xNjcyLDcgKzE2NDcsNyBAQAogICAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgaWYgKChwRGV2aWNlLT5ieUxvY2FsSUQgPD0gUkVWX0lEX1ZUMzI1M19BMSkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJOZWVkRW5jcnlwdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc192U1dlbmNyeXB0aW9uKHBEZXZpY2UsIHBUcmFuc21pdEtleSwgKHBieUJ1ZmZlciArIHVMZW5ndGggLSBjYjgwMl8xX0hfbGVuKSwgKFdPUkQpY2JGcmFnUGF5bG9hZFNpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgc192U1dlbmNyeXB0aW9uKHBEZXZpY2UsIHBUcmFuc21pdEtleSwgKHBieUJ1ZmZlciArIHVMZW5ndGggLSBjYjgwMl8xX0hfbGVuKSwgKHVuc2lnbmVkIHNob3J0KWNiRnJhZ1BheWxvYWRTaXplKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNiUmVxQ291bnQgKz0gY2JJQ1ZsZW47CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0xNzExLDEzICsxNjg2LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVGcmFnSWR4LCBjYkxhc3RGcmFnbWVudFNpemUsIHVNQUNmcmFnTnVtLCBieUZCT3B0aW9uLCBwRGV2aWNlLT53Q3VycmVudFJhdGUpOwogCiAgICAgICAgICAgICAgICAgLy8gR2VuZXJhdGUgVFggTUFDIEhlYWRlcgotICAgICAgICAgICAgICAgIHZHZW5lcmF0ZU1BQ0hlYWRlcihwRGV2aWNlLCBwYnlNYWNIZHIsIChXT1JEKXVEdXJhdGlvbiwgcHNFdGhIZWFkZXIsIGJOZWVkRW5jcnlwdCwKKyAgICAgICAgICAgICAgICB2R2VuZXJhdGVNQUNIZWFkZXIocERldmljZSwgcGJ5TWFjSGRyLCAodW5zaWduZWQgc2hvcnQpdUR1cmF0aW9uLCBwc0V0aEhlYWRlciwgYk5lZWRFbmNyeXB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3RnJhZ1R5cGUsIHVETUFJZHgsIHVGcmFnSWR4KTsKIAotICAgICAgICAgICAgICAgIGlmIChiTmVlZEVuY3J5cHQgPT0gVFJVRSkgeworICAgICAgICAgICAgICAgIGlmIChiTmVlZEVuY3J5cHQgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAvL0ZpbGwgVFhLRVkKLSAgICAgICAgICAgICAgICAgICAgc192RmlsbFR4S2V5KHBEZXZpY2UsIChQQllURSkocHNUeEJ1ZkhkLT5hZHdUeEtleSksIHBieUlWSGVhZCwgcFRyYW5zbWl0S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJ5TWFjSGRyLCAoV09SRCljYkxhc3RGcmFnUGF5bG9hZFNpemUsIChQQllURSlwTUlDSERSKTsKKyAgICAgICAgICAgICAgICAgICAgc192RmlsbFR4S2V5KHBEZXZpY2UsICh1bnNpZ25lZCBjaGFyICopKHBzVHhCdWZIZC0+YWR3VHhLZXkpLCBwYnlJVkhlYWQsIHBUcmFuc21pdEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBieU1hY0hkciwgKHVuc2lnbmVkIHNob3J0KWNiTGFzdEZyYWdQYXlsb2FkU2l6ZSwgKHVuc2lnbmVkIGNoYXIgKilwTUlDSERSKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAocERldmljZS0+YkVuYWJsZUhvc3RXRVApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uZHdUU0M0N18xNiA9IHBUcmFuc21pdEtleS0+ZHdUU0M0N18xNjsKQEAgLTE3MzQsOCArMTcwOSw4IEBACiAKIAogCi0gICAgICAgICAgICAgICAgcGJ5QnVmZmVyID0gKFBCWVRFKXBIZWFkVEQtPnBUREluZm8tPmJ1ZjsKLSAgICAgICAgICAgICAgICAvL3BieUJ1ZmZlciA9IChQQllURSlwRGV2aWNlLT5hYW1UeEJ1Zlt1RE1BSWR4XVt0bXBEZXNjSWR4XS5wYnlWQWRkcjsKKyAgICAgICAgICAgICAgICBwYnlCdWZmZXIgPSAodW5zaWduZWQgY2hhciAqKXBIZWFkVEQtPnBUREluZm8tPmJ1ZjsKKyAgICAgICAgICAgICAgICAvL3BieUJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopcERldmljZS0+YWFtVHhCdWZbdURNQUlkeF1bdG1wRGVzY0lkeF0ucGJ5VkFkZHI7CiAKICAgICAgICAgICAgICAgICB1TGVuZ3RoID0gY2JIZWFkZXJMZW5ndGggKyBjYk1BQ0hkTGVuICsgdVBhZGRpbmcgKyBjYklWbGVuOwogCkBAIC0xNzQzLDcgKzE3MTgsNyBAQAogICAgICAgICAgICAgICAgIG1lbWNweShwYnlCdWZmZXIsICh2b2lkICopcHNUeEJ1ZkhkLCB1TGVuZ3RoKTsKIAogICAgICAgICAgICAgICAgIC8vIENvcHkgdGhlIFBhY2tldCBpbnRvIGEgdHggQnVmZmVyCi0gICAgICAgICAgICAgICAgaWYgKGJNSUMyRnJhZyA9PSBGQUxTRSkgeworICAgICAgICAgICAgICAgIGlmIChiTUlDMkZyYWcgPT0gZmFsc2UpIHsKIAogICAgICAgICAgICAgICAgICAgICBtZW1jcHkoKHBieUJ1ZmZlciArIHVMZW5ndGgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocFBhY2tldCArIDE0ICsgdVRvdGFsQ29weUxlbmd0aCksCkBAIC0xNzUzLDM2ICsxNzI4LDM2IEBACiAgICAgICAgICAgICAgICAgICAgIHVUbXBMZW4gPSBjYkxhc3RGcmFnUGF5bG9hZFNpemUgLSBjYk1JQ2xlbjsKIAogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoKGJOZWVkRW5jcnlwdCA9PSBUUlVFKSAmJiAocFRyYW5zbWl0S2V5ICE9IE5VTEwpICYmIChwVHJhbnNtaXRLZXktPmJ5Q2lwaGVyU3VpdGUgPT0gS0VZX0NUTF9US0lQKSkgeworICAgICAgICAgICAgICAgIGlmICgoYk5lZWRFbmNyeXB0ID09IHRydWUpICYmIChwVHJhbnNtaXRLZXkgIT0gTlVMTCkgJiYgKHBUcmFuc21pdEtleS0+YnlDaXBoZXJTdWl0ZSA9PSBLRVlfQ1RMX1RLSVApKSB7CiAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iTEFTVDogdU1JQ0ZyYWdMZW46JWQsIGNiTGFzdEZyYWdQYXlsb2FkU2l6ZTolZCwgdVRtcExlbjolZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdU1JQ0ZyYWdMZW4sIGNiTGFzdEZyYWdQYXlsb2FkU2l6ZSwgdVRtcExlbik7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJNSUMyRnJhZyA9PSBGQUxTRSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYk1JQzJGcmFnID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodVRtcExlbiAhPSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JQ192QXBwZW5kKChwYnlCdWZmZXIgKyB1TGVuZ3RoKSwgdVRtcExlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwZHdNSUNfTCA9IChQRFdPUkQpKHBieUJ1ZmZlciArIHVMZW5ndGggKyB1VG1wTGVuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBkd01JQ19SID0gKFBEV09SRCkocGJ5QnVmZmVyICsgdUxlbmd0aCArIHVUbXBMZW4gKyA0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBkd01JQ19MID0gKHVuc2lnbmVkIGxvbmcgKikocGJ5QnVmZmVyICsgdUxlbmd0aCArIHVUbXBMZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgcGR3TUlDX1IgPSAodW5zaWduZWQgbG9uZyAqKShwYnlCdWZmZXIgKyB1TGVuZ3RoICsgdVRtcExlbiArIDQpOwogICAgICAgICAgICAgICAgICAgICAgICAgTUlDX3ZHZXRNSUMocGR3TUlDX0wsIHBkd01JQ19SKTsKICAgICAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iTGFzdCBNSUM6JWxYLCAlbFhcbiIsICpwZHdNSUNfTCwgKnBkd01JQ19SKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1TUlDRnJhZ0xlbiA+PSA0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KChwYnlCdWZmZXIgKyB1TGVuZ3RoKSwgKChQQllURSkmZHdTYWZlTUlDX1IgKyAodU1JQ0ZyYWdMZW4gLSA0KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KChwYnlCdWZmZXIgKyB1TGVuZ3RoKSwgKCh1bnNpZ25lZCBjaGFyICopJmR3U2FmZU1JQ19SICsgKHVNSUNGcmFnTGVuIC0gNCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYk1JQ2xlbiAtIHVNSUNGcmFnTGVuKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJMQVNUOiB1TUlDRnJhZ0xlbiA+PSA0OiAlWCwgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihQQllURSkoKFBCWVRFKSZkd1NhZmVNSUNfUiArICh1TUlDRnJhZ0xlbiAtIDQpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKHVuc2lnbmVkIGNoYXIgKikoKHVuc2lnbmVkIGNoYXIgKikmZHdTYWZlTUlDX1IgKyAodU1JQ0ZyYWdMZW4gLSA0KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNiTUlDbGVuIC0gdU1JQ0ZyYWdMZW4pKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoKHBieUJ1ZmZlciArIHVMZW5ndGgpLCAoKFBCWVRFKSZkd1NhZmVNSUNfTCArIHVNSUNGcmFnTGVuKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoKHBieUJ1ZmZlciArIHVMZW5ndGgpLCAoKHVuc2lnbmVkIGNoYXIgKikmZHdTYWZlTUlDX0wgKyB1TUlDRnJhZ0xlbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQgLSB1TUlDRnJhZ0xlbikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgocGJ5QnVmZmVyICsgdUxlbmd0aCArICg0IC0gdU1JQ0ZyYWdMZW4pKSwgJmR3U2FmZU1JQ19SLCA0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIkxBU1Q6IHVNSUNGcmFnTGVuIDwgNDogJVgsICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooUEJZVEUpKChQQllURSkmZHdTYWZlTUlDX1IgKyB1TUlDRnJhZ0xlbiAtIDQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoodW5zaWduZWQgY2hhciAqKSgodW5zaWduZWQgY2hhciAqKSZkd1NhZmVNSUNfUiArIHVNSUNGcmFnTGVuIC0gNCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNiTUlDbGVuIC0gdU1JQ0ZyYWdMZW4pKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCBjYkxhc3RGcmFnUGF5bG9hZFNpemUgKyA4ICsgMjQ7IGlpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiUwMnggIiwgKigoUEJZVEUpKChwYnlCdWZmZXIgKyB1TGVuZ3RoKSArIGlpIC0gOCAtIDI0KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iJTAyeCAiLCAqKCh1bnNpZ25lZCBjaGFyICopKChwYnlCdWZmZXIgKyB1TGVuZ3RoKSArIGlpIC0gOCAtIDI0KSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJcblxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTc5OCw3ICsxNzczLDcgQEAKICAgICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgIGlmICgocERldmljZS0+YnlMb2NhbElEIDw9IFJFVl9JRF9WVDMyNTNfQTEpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChiTmVlZEVuY3J5cHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNfdlNXZW5jcnlwdGlvbihwRGV2aWNlLCBwVHJhbnNtaXRLZXksIChwYnlCdWZmZXIgKyB1TGVuZ3RoKSwgKFdPUkQpY2JMYXN0RnJhZ1BheWxvYWRTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNfdlNXZW5jcnlwdGlvbihwRGV2aWNlLCBwVHJhbnNtaXRLZXksIChwYnlCdWZmZXIgKyB1TGVuZ3RoKSwgKHVuc2lnbmVkIHNob3J0KWNiTGFzdEZyYWdQYXlsb2FkU2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYlJlcUNvdW50ICs9IGNiSUNWbGVuOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMTg0MSwxNCArMTgxNiwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1RnJhZ0lkeCwgY2JMYXN0RnJhZ21lbnRTaXplLCB1TUFDZnJhZ051bSwgYnlGQk9wdGlvbiwgcERldmljZS0+d0N1cnJlbnRSYXRlKTsKIAogICAgICAgICAgICAgICAgIC8vIEdlbmVyYXRlIFRYIE1BQyBIZWFkZXIKLSAgICAgICAgICAgICAgICB2R2VuZXJhdGVNQUNIZWFkZXIocERldmljZSwgcGJ5TWFjSGRyLCAoV09SRCl1RHVyYXRpb24sIHBzRXRoSGVhZGVyLCBiTmVlZEVuY3J5cHQsCisgICAgICAgICAgICAgICAgdkdlbmVyYXRlTUFDSGVhZGVyKHBEZXZpY2UsIHBieU1hY0hkciwgKHVuc2lnbmVkIHNob3J0KXVEdXJhdGlvbiwgcHNFdGhIZWFkZXIsIGJOZWVkRW5jcnlwdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0ZyYWdUeXBlLCB1RE1BSWR4LCB1RnJhZ0lkeCk7CiAKIAotICAgICAgICAgICAgICAgIGlmIChiTmVlZEVuY3J5cHQgPT0gVFJVRSkgeworICAgICAgICAgICAgICAgIGlmIChiTmVlZEVuY3J5cHQgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAvL0ZpbGwgVFhLRVkKLSAgICAgICAgICAgICAgICAgICAgc192RmlsbFR4S2V5KHBEZXZpY2UsIChQQllURSkocHNUeEJ1ZkhkLT5hZHdUeEtleSksIHBieUlWSGVhZCwgcFRyYW5zbWl0S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJ5TWFjSGRyLCAoV09SRCljYkZyYWdQYXlsb2FkU2l6ZSwgKFBCWVRFKXBNSUNIRFIpOworICAgICAgICAgICAgICAgICAgICBzX3ZGaWxsVHhLZXkocERldmljZSwgKHVuc2lnbmVkIGNoYXIgKikocHNUeEJ1ZkhkLT5hZHdUeEtleSksIHBieUlWSGVhZCwgcFRyYW5zbWl0S2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJ5TWFjSGRyLCAodW5zaWduZWQgc2hvcnQpY2JGcmFnUGF5bG9hZFNpemUsICh1bnNpZ25lZCBjaGFyICopcE1JQ0hEUik7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJFbmFibGVIb3N0V0VQKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmR3VFNDNDdfMTYgPSBwVHJhbnNtaXRLZXktPmR3VFNDNDdfMTY7CkBAIC0xODYyLDE0ICsxODM3LDE0IEBACiAgICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAvL0ZpbGwgTUlDSERSCiAgICAgICAgICAgICAgICAgLy9pZiAocERldmljZS0+YkFFUykgewotICAgICAgICAgICAgICAgIC8vICAgIHNfdkZpbGxNSUNIRFIocERldmljZSwgKFBCWVRFKXBNSUNIRFIsIHBieU1hY0hkciwgKFdPUkQpY2JGcmFnUGF5bG9hZFNpemUpOworICAgICAgICAgICAgICAgIC8vICAgIHNfdkZpbGxNSUNIRFIocERldmljZSwgKHVuc2lnbmVkIGNoYXIgKilwTUlDSERSLCBwYnlNYWNIZHIsICh1bnNpZ25lZCBzaG9ydCljYkZyYWdQYXlsb2FkU2l6ZSk7CiAgICAgICAgICAgICAgICAgLy99CiAgICAgICAgICAgICAgICAgLy9jYlJlcUNvdW50ICs9IHNfdURvRW5jcnlwdGlvbihwRGV2aWNlLCBwc0V0aEhlYWRlciwgKHZvaWQgKilwc1R4QnVmSGQsIGJ5S2V5U2VsLAotICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJ5UGF5bG9hZEhlYWQsIChXT1JEKWNiRnJhZ1BheWxvYWRTaXplLCB1RE1BSWR4KTsKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBieVBheWxvYWRIZWFkLCAodW5zaWduZWQgc2hvcnQpY2JGcmFnUGF5bG9hZFNpemUsIHVETUFJZHgpOwogCiAKLSAgICAgICAgICAgICAgICBwYnlCdWZmZXIgPSAoUEJZVEUpcEhlYWRURC0+cFRESW5mby0+YnVmOwotICAgICAgICAgICAgICAgIC8vcGJ5QnVmZmVyID0gKFBCWVRFKXBEZXZpY2UtPmFhbVR4QnVmW3VETUFJZHhdW3RtcERlc2NJZHhdLnBieVZBZGRyOworICAgICAgICAgICAgICAgIHBieUJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopcEhlYWRURC0+cFRESW5mby0+YnVmOworICAgICAgICAgICAgICAgIC8vcGJ5QnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKilwRGV2aWNlLT5hYW1UeEJ1Zlt1RE1BSWR4XVt0bXBEZXNjSWR4XS5wYnlWQWRkcjsKIAogCiAgICAgICAgICAgICAgICAgdUxlbmd0aCA9IGNiSGVhZGVyTGVuZ3RoICsgY2JNQUNIZExlbiArIHVQYWRkaW5nICsgY2JJVmxlbjsKQEAgLTE4ODYsMTcgKzE4NjEsMTcgQEAKIAogICAgICAgICAgICAgICAgIHVUb3RhbENvcHlMZW5ndGggKz0gdVRtcExlbjsKIAotICAgICAgICAgICAgICAgIGlmICgoYk5lZWRFbmNyeXB0ID09IFRSVUUpICYmIChwVHJhbnNtaXRLZXkgIT0gTlVMTCkgJiYgKHBUcmFuc21pdEtleS0+YnlDaXBoZXJTdWl0ZSA9PSBLRVlfQ1RMX1RLSVApKSB7CisgICAgICAgICAgICAgICAgaWYgKChiTmVlZEVuY3J5cHQgPT0gdHJ1ZSkgJiYgKHBUcmFuc21pdEtleSAhPSBOVUxMKSAmJiAocFRyYW5zbWl0S2V5LT5ieUNpcGhlclN1aXRlID09IEtFWV9DVExfVEtJUCkpIHsKIAogICAgICAgICAgICAgICAgICAgICBNSUNfdkFwcGVuZCgocGJ5QnVmZmVyICsgdUxlbmd0aCksIHVUbXBMZW4pOwogCiAgICAgICAgICAgICAgICAgICAgIGlmICh1VG1wTGVuIDwgY2JGcmFnUGF5bG9hZFNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJNSUMyRnJhZyA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICAgICBiTUlDMkZyYWcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgdU1JQ0ZyYWdMZW4gPSBjYkZyYWdQYXlsb2FkU2l6ZSAtIHVUbXBMZW47CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQodU1JQ0ZyYWdMZW4gPCBjYk1JQ2xlbik7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHBkd01JQ19MID0gKFBEV09SRCkocGJ5QnVmZmVyICsgdUxlbmd0aCArIHVUbXBMZW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgcGR3TUlDX1IgPSAoUERXT1JEKShwYnlCdWZmZXIgKyB1TGVuZ3RoICsgdVRtcExlbiArIDQpOworICAgICAgICAgICAgICAgICAgICAgICAgcGR3TUlDX0wgPSAodW5zaWduZWQgbG9uZyAqKShwYnlCdWZmZXIgKyB1TGVuZ3RoICsgdVRtcExlbik7CisgICAgICAgICAgICAgICAgICAgICAgICBwZHdNSUNfUiA9ICh1bnNpZ25lZCBsb25nICopKHBieUJ1ZmZlciArIHVMZW5ndGggKyB1VG1wTGVuICsgNCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBNSUNfdkdldE1JQyhwZHdNSUNfTCwgcGR3TUlDX1IpOwogICAgICAgICAgICAgICAgICAgICAgICAgZHdTYWZlTUlDX0wgPSAqcGR3TUlDX0w7CiAgICAgICAgICAgICAgICAgICAgICAgICBkd1NhZmVNSUNfUiA9ICpwZHdNSUNfUjsKQEAgLTE5MDYsNyArMTg4MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIkZpbGwgTUlDIGluIE1pZGRsZSBmcmFnIFslZF1cbiIsIHVNSUNGcmFnTGVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCB1TUlDRnJhZ0xlbjsgaWkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iJTAyeCAiLCAqKChQQllURSkoKHBieUJ1ZmZlciArIHVMZW5ndGggKyB1VG1wTGVuKSArIGlpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iJTAyeCAiLCAqKCh1bnNpZ25lZCBjaGFyICopKChwYnlCdWZmZXIgKyB1TGVuZ3RoICsgdVRtcExlbikgKyBpaSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xOTE1LDcgKzE4OTAsNyBAQAogICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIk1pZGRsZSBmcmFnIGxlbjogJWRcbiIsIHVUbXBMZW4pOwogICAgICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCB1VG1wTGVuOyBpaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiUwMnggIiwgKigoUEJZVEUpKChwYnlCdWZmZXIgKyB1TGVuZ3RoKSArIGlpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIlMDJ4ICIsICooKHVuc2lnbmVkIGNoYXIgKikoKHBieUJ1ZmZlciArIHVMZW5ndGgpICsgaWkpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJcblxuIik7CiAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xOTI2LDcgKzE5MDEsNyBAQAogCiAgICAgICAgICAgICAgICAgaWYgKChwRGV2aWNlLT5ieUxvY2FsSUQgPD0gUkVWX0lEX1ZUMzI1M19BMSkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJOZWVkRW5jcnlwdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc192U1dlbmNyeXB0aW9uKHBEZXZpY2UsIHBUcmFuc21pdEtleSwgKHBieUJ1ZmZlciArIHVMZW5ndGgpLCAoV09SRCljYkZyYWdQYXlsb2FkU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzX3ZTV2VuY3J5cHRpb24ocERldmljZSwgcFRyYW5zbWl0S2V5LCAocGJ5QnVmZmVyICsgdUxlbmd0aCksICh1bnNpZ25lZCBzaG9ydCljYkZyYWdQYXlsb2FkU2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYlJlcUNvdW50ICs9IGNiSUNWbGVuOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMTk2MSw3ICsxOTM2LDcgQEAKICAgICAgICAgd0ZyYWdUeXBlID0gRlJBR0NUTF9OT05GUkFHOwogCiAgICAgICAgIC8vU2V0IEZyYWdDdGwgaW4gVHhCdWZmZXJIZWFkCi0gICAgICAgIHBzVHhCdWZIZC0+d0ZyYWdDdGwgfD0gKFdPUkQpd0ZyYWdUeXBlOworICAgICAgICBwc1R4QnVmSGQtPndGcmFnQ3RsIHw9ICh1bnNpZ25lZCBzaG9ydCl3RnJhZ1R5cGU7CiAKICAgICAgICAgLy9GaWxsIEZJRk8sUnJ2VGltZSxSVFMsYW5kIENUUwogICAgICAgICBzX3ZHZW5lcmF0ZVR4UGFyYW1ldGVyKHBEZXZpY2UsIGJ5UGt0VHlwZSwgKHZvaWQgKilwc1R4QnVmSGQsIHB2UnJ2VGltZSwgcHZSVFMsIHB2Q1RTLApAQCAtMTk3MSwxMyArMTk0NiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgdU1BQ2ZyYWdOdW0sIGJ5RkJPcHRpb24sIHBEZXZpY2UtPndDdXJyZW50UmF0ZSk7CiAKICAgICAgICAgLy8gR2VuZXJhdGUgVFggTUFDIEhlYWRlcgotICAgICAgICB2R2VuZXJhdGVNQUNIZWFkZXIocERldmljZSwgcGJ5TWFjSGRyLCAoV09SRCl1RHVyYXRpb24sIHBzRXRoSGVhZGVyLCBiTmVlZEVuY3J5cHQsCisgICAgICAgIHZHZW5lcmF0ZU1BQ0hlYWRlcihwRGV2aWNlLCBwYnlNYWNIZHIsICh1bnNpZ25lZCBzaG9ydCl1RHVyYXRpb24sIHBzRXRoSGVhZGVyLCBiTmVlZEVuY3J5cHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3RnJhZ1R5cGUsIHVETUFJZHgsIDApOwogCi0gICAgICAgIGlmIChiTmVlZEVuY3J5cHQgPT0gVFJVRSkgeworICAgICAgICBpZiAoYk5lZWRFbmNyeXB0ID09IHRydWUpIHsKICAgICAgICAgICAgIC8vRmlsbCBUWEtFWQotICAgICAgICAgICAgc192RmlsbFR4S2V5KHBEZXZpY2UsIChQQllURSkocHNUeEJ1ZkhkLT5hZHdUeEtleSksIHBieUlWSGVhZCwgcFRyYW5zbWl0S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgIHBieU1hY0hkciwgKFdPUkQpY2JGcmFtZUJvZHlTaXplLCAoUEJZVEUpcE1JQ0hEUik7CisgICAgICAgICAgICBzX3ZGaWxsVHhLZXkocERldmljZSwgKHVuc2lnbmVkIGNoYXIgKikocHNUeEJ1ZkhkLT5hZHdUeEtleSksIHBieUlWSGVhZCwgcFRyYW5zbWl0S2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgIHBieU1hY0hkciwgKHVuc2lnbmVkIHNob3J0KWNiRnJhbWVCb2R5U2l6ZSwgKHVuc2lnbmVkIGNoYXIgKilwTUlDSERSKTsKIAogICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJFbmFibGVIb3N0V0VQKSB7CiAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5kd1RTQzQ3XzE2ID0gcFRyYW5zbWl0S2V5LT5kd1RTQzQ3XzE2OwpAQCAtMTk4OSwxMyArMTk2NCwxMyBAQAogICAgICAgICBpZiAobnRvaHMocHNFdGhIZWFkZXItPndUeXBlKSA+IEVUSF9EQVRBX0xFTikgewogICAgICAgICAgICAgaWYgKChwc0V0aEhlYWRlci0+d1R5cGUgPT0gVFlQRV9QS1RfSVBYKSB8fAogICAgICAgICAgICAgICAgIChwc0V0aEhlYWRlci0+d1R5cGUgPT0gY3B1X3RvX2xlMTYoMHhGMzgwKSkpIHsKLSAgICAgICAgICAgICAgICBtZW1jcHkoKFBCWVRFKSAocGJ5UGF5bG9hZEhlYWQpLCAmcERldmljZS0+YWJ5U05BUF9CcmlkZ2V0dW5uZWxbMF0sIDYpOworICAgICAgICAgICAgICAgIG1lbWNweSgodW5zaWduZWQgY2hhciAqKSAocGJ5UGF5bG9hZEhlYWQpLCAmcERldmljZS0+YWJ5U05BUF9CcmlkZ2V0dW5uZWxbMF0sIDYpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KChQQllURSkgKHBieVBheWxvYWRIZWFkKSwgJnBEZXZpY2UtPmFieVNOQVBfUkZDMTA0MlswXSwgNik7CisgICAgICAgICAgICAgICAgbWVtY3B5KCh1bnNpZ25lZCBjaGFyICopIChwYnlQYXlsb2FkSGVhZCksICZwRGV2aWNlLT5hYnlTTkFQX1JGQzEwNDJbMF0sIDYpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcGJ5VHlwZSA9IChQQllURSkgKHBieVBheWxvYWRIZWFkICsgNik7Ci0gICAgICAgICAgICBtZW1jcHkocGJ5VHlwZSwgJihwc0V0aEhlYWRlci0+d1R5cGUpLCBzaXplb2YoV09SRCkpOworICAgICAgICAgICAgcGJ5VHlwZSA9ICh1bnNpZ25lZCBjaGFyICopIChwYnlQYXlsb2FkSGVhZCArIDYpOworICAgICAgICAgICAgbWVtY3B5KHBieVR5cGUsICYocHNFdGhIZWFkZXItPndUeXBlKSwgc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSk7CiAgICAgICAgICAgICBjYjgwMl8xX0hfbGVuID0gODsKICAgICAgICAgfQogCkBAIC0yMDA2LDExICsxOTgxLDExIEBACiAgICAgICAgIC8vRmlsbCBNSUNIRFIKICAgICAgICAgLy9pZiAocERldmljZS0+YkFFUykgewogICAgICAgICAvLyAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIkZpbGwgTUlDSERSLi4uXG4iKTsKLSAgICAgICAgLy8gICAgc192RmlsbE1JQ0hEUihwRGV2aWNlLCAoUEJZVEUpcE1JQ0hEUiwgcGJ5TWFjSGRyLCAoV09SRCljYkZyYW1lQm9keVNpemUpOworICAgICAgICAvLyAgICBzX3ZGaWxsTUlDSERSKHBEZXZpY2UsICh1bnNpZ25lZCBjaGFyICopcE1JQ0hEUiwgcGJ5TWFjSGRyLCAodW5zaWduZWQgc2hvcnQpY2JGcmFtZUJvZHlTaXplKTsKICAgICAgICAgLy99CiAKLSAgICAgICAgcGJ5QnVmZmVyID0gKFBCWVRFKXBIZWFkVEQtPnBUREluZm8tPmJ1ZjsKLSAgICAgICAgLy9wYnlCdWZmZXIgPSAoUEJZVEUpcERldmljZS0+YWFtVHhCdWZbdURNQUlkeF1bdURlc2NJZHhdLnBieVZBZGRyOworICAgICAgICBwYnlCdWZmZXIgPSAodW5zaWduZWQgY2hhciAqKXBIZWFkVEQtPnBUREluZm8tPmJ1ZjsKKyAgICAgICAgLy9wYnlCdWZmZXIgPSAodW5zaWduZWQgY2hhciAqKXBEZXZpY2UtPmFhbVR4QnVmW3VETUFJZHhdW3VEZXNjSWR4XS5wYnlWQWRkcjsKIAogICAgICAgICB1TGVuZ3RoID0gY2JIZWFkZXJMZW5ndGggKyBjYk1BQ0hkTGVuICsgdVBhZGRpbmcgKyBjYklWbGVuICsgY2I4MDJfMV9IX2xlbjsKIApAQCAtMjAyMywyOSArMTk5OCwyOSBAQAogICAgICAgICAgICAgICAgICBjYkZyYW1lQm9keVNpemUgLSBjYjgwMl8xX0hfbGVuCiAgICAgICAgICAgICAgICAgICk7CiAKLSAgICAgICAgaWYgKChiTmVlZEVuY3J5cHQgPT0gVFJVRSkgJiYgKHBUcmFuc21pdEtleSAhPSBOVUxMKSAmJiAocFRyYW5zbWl0S2V5LT5ieUNpcGhlclN1aXRlID09IEtFWV9DVExfVEtJUCkpeworICAgICAgICBpZiAoKGJOZWVkRW5jcnlwdCA9PSB0cnVlKSAmJiAocFRyYW5zbWl0S2V5ICE9IE5VTEwpICYmIChwVHJhbnNtaXRLZXktPmJ5Q2lwaGVyU3VpdGUgPT0gS0VZX0NUTF9US0lQKSl7CiAKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iTGVuZ3RoOiVkLCAlZFxuIiwgY2JGcmFtZUJvZHlTaXplIC0gY2I4MDJfMV9IX2xlbiwgdUxlbmd0aCk7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgZm9yIChpaSA9IDA7IGlpIDwgKGNiRnJhbWVCb2R5U2l6ZSAtIGNiODAyXzFfSF9sZW4pOyBpaSsrKSB7Ci0gICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIlMDJ4ICIsICooKFBCWVRFKSgocGJ5QnVmZmVyICsgdUxlbmd0aCkgKyBpaSkpKTsKKyAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiUwMnggIiwgKigodW5zaWduZWQgY2hhciAqKSgocGJ5QnVmZmVyICsgdUxlbmd0aCkgKyBpaSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iXG4iKTsKICAgICAgICAgICAgICovCiAKICAgICAgICAgICAgIE1JQ192QXBwZW5kKChwYnlCdWZmZXIgKyB1TGVuZ3RoIC0gY2I4MDJfMV9IX2xlbiksIGNiRnJhbWVCb2R5U2l6ZSk7CiAKLSAgICAgICAgICAgIHBkd01JQ19MID0gKFBEV09SRCkocGJ5QnVmZmVyICsgdUxlbmd0aCAtIGNiODAyXzFfSF9sZW4gKyBjYkZyYW1lQm9keVNpemUpOwotICAgICAgICAgICAgcGR3TUlDX1IgPSAoUERXT1JEKShwYnlCdWZmZXIgKyB1TGVuZ3RoIC0gY2I4MDJfMV9IX2xlbiArIGNiRnJhbWVCb2R5U2l6ZSArIDQpOworICAgICAgICAgICAgcGR3TUlDX0wgPSAodW5zaWduZWQgbG9uZyAqKShwYnlCdWZmZXIgKyB1TGVuZ3RoIC0gY2I4MDJfMV9IX2xlbiArIGNiRnJhbWVCb2R5U2l6ZSk7CisgICAgICAgICAgICBwZHdNSUNfUiA9ICh1bnNpZ25lZCBsb25nICopKHBieUJ1ZmZlciArIHVMZW5ndGggLSBjYjgwMl8xX0hfbGVuICsgY2JGcmFtZUJvZHlTaXplICsgNCk7CiAKICAgICAgICAgICAgIE1JQ192R2V0TUlDKHBkd01JQ19MLCBwZHdNSUNfUik7CiAgICAgICAgICAgICBNSUNfdlVuSW5pdCgpOwogCiAKLSAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iVHhNSUNGYWlsID09IFRSVUUpIHsKKyAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iVHhNSUNGYWlsID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAqcGR3TUlDX0wgPSAwOwogICAgICAgICAgICAgICAgICpwZHdNSUNfUiA9IDA7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YlR4TUlDRmFpbCA9IEZBTFNFOworICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJUeE1JQ0ZhaWwgPSBmYWxzZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJ1TGVuZ3RoOiAlZCwgJWRcbiIsIHVMZW5ndGgsIGNiRnJhbWVCb2R5U2l6ZSk7CkBAIC0yMDUzLDcgKzIwMjgsNyBAQAogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJNSUM6JWx4LCAlbHhcbiIsICpwZHdNSUNfTCwgKnBkd01JQ19SKTsKIC8qCiAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCA4OyBpaSsrKSB7Ci0gICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIlMDJ4ICIsICooKChQQllURSkocGR3TUlDX0wpICsgaWkpKSk7CisgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIlMDJ4ICIsICooKCh1bnNpZ25lZCBjaGFyICopKHBkd01JQ19MKSArIGlpKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJcbiIpOwogKi8KQEAgLTIwNjQsNyArMjAzOSw3IEBACiAgICAgICAgIGlmICgocERldmljZS0+YnlMb2NhbElEIDw9IFJFVl9JRF9WVDMyNTNfQTEpKXsKICAgICAgICAgICAgIGlmIChiTmVlZEVuY3J5cHQpIHsKICAgICAgICAgICAgICAgICBzX3ZTV2VuY3J5cHRpb24ocERldmljZSwgcFRyYW5zbWl0S2V5LCAocGJ5QnVmZmVyICsgdUxlbmd0aCAtIGNiODAyXzFfSF9sZW4pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV09SRCkoY2JGcmFtZUJvZHlTaXplICsgY2JNSUNsZW4pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIHNob3J0KShjYkZyYW1lQm9keVNpemUgKyBjYk1JQ2xlbikpOwogICAgICAgICAgICAgICAgIGNiUmVxQ291bnQgKz0gY2JJQ1ZsZW47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIwNzgsNyArMjA1Myw3IEBACiAgICAgICAgIHB0ZEN1cnItPmJ1ZmZfYWRkciA9IGNwdV90b19sZTMyKHB0ZEN1cnItPnBUREluZm8tPnNrYl9kbWEpOwogICAJICAgIC8vU2V0IFRTUjEgJiBSZXFDb3VudCBpbiBUeERlc2NIZWFkCiAgICAgICAgIHB0ZEN1cnItPm1fdGQxVEQxLmJ5VENSIHw9IChUQ1JfU1RQIHwgVENSX0VEUCB8IEVETVNEVSk7Ci0gICAgICAgIHB0ZEN1cnItPm1fdGQxVEQxLndSZXFDb3VudCA9IGNwdV90b19sZTE2KChXT1JEKShjYlJlcUNvdW50KSk7CisgICAgICAgIHB0ZEN1cnItPm1fdGQxVEQxLndSZXFDb3VudCA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydCkoY2JSZXFDb3VudCkpOwogCiAgICAgICAgIHBEZXZpY2UtPmlURFVzZWRbdURNQUlkeF0rKzsKIApAQCAtMjA5NCwyNiArMjA2OSwxNiBAQAogCiAKIHZvaWQKLXZHZW5lcmF0ZUZJRk9IZWFkZXIgKAotICAgIFBTRGV2aWNlICAgICAgICAgcERldmljZSwKLSAgICBCWVRFICAgICAgICAgICAgIGJ5UGt0VHlwZSwKLSAgICBQQllURSAgICAgICAgICAgIHBieVR4QnVmZmVyQWRkciwKLSAgICBCT09MICAgICAgICAgICAgIGJOZWVkRW5jcnlwdCwKLSAgICBVSU5UICAgICAgICAgICAgIGNiUGF5bG9hZFNpemUsCi0gICAgVUlOVCAgICAgICAgICAgICB1RE1BSWR4LAotICAgIFBTVHhEZXNjICAgICAgICAgcEhlYWRURCwKLSAgICBQU0V0aGVybmV0SGVhZGVyIHBzRXRoSGVhZGVyLAotICAgIFBCWVRFICAgICAgICAgICAgcFBhY2tldCwKLSAgICBQU0tleUl0ZW0gICAgICAgIHBUcmFuc21pdEtleSwKLSAgICBVSU5UICAgICAgICAgICAgIHVOb2RlSW5kZXgsCi0gICAgUFVJTlQgICAgICAgICAgICBwdU1BQ2ZyYWdOdW0sCi0gICAgUFVJTlQgICAgICAgICAgICBwY2JIZWFkZXJTaXplCi0gICAgKQordkdlbmVyYXRlRklGT0hlYWRlcihQU0RldmljZSBwRGV2aWNlLCB1bnNpZ25lZCBjaGFyIGJ5UGt0VHlwZSwgdW5zaWduZWQgY2hhciAqcGJ5VHhCdWZmZXJBZGRyLAorCWJvb2wgYk5lZWRFbmNyeXB0LCB1bnNpZ25lZCBpbnQgY2JQYXlsb2FkU2l6ZSwgdW5zaWduZWQgaW50IHVETUFJZHgsCisJUFNUeERlc2MgcEhlYWRURCwgUFNFdGhlcm5ldEhlYWRlciBwc0V0aEhlYWRlciwgdW5zaWduZWQgY2hhciAqcFBhY2tldCwKKwlQU0tleUl0ZW0gcFRyYW5zbWl0S2V5LCB1bnNpZ25lZCBpbnQgdU5vZGVJbmRleCwgdW5zaWduZWQgaW50ICpwdU1BQ2ZyYWdOdW0sCisJdW5zaWduZWQgaW50ICpwY2JIZWFkZXJTaXplKQogewotICAgIFVJTlQgICAgICAgICAgICB3VHhCdWZTaXplOyAgICAgICAvLyBGRmluZm8gc2l6ZQotICAgIEJPT0wgICAgICAgICAgICBiTmVlZEFDSzsKLSAgICBCT09MICAgICAgICAgICAgYklzQWRob2M7Ci0gICAgV09SRCAgICAgICAgICAgIGNiTWFjSGRMZW47CisgICAgdW5zaWduZWQgaW50IHdUeEJ1ZlNpemU7ICAgICAgIC8vIEZGaW5mbyBzaXplCisgICAgYm9vbCBiTmVlZEFDSzsKKyAgICBib29sIGJJc0FkaG9jOworICAgIHVuc2lnbmVkIHNob3J0IGNiTWFjSGRMZW47CiAgICAgUFNUeEJ1ZkhlYWQgICAgIHBUeEJ1ZkhlYWQgPSAoUFNUeEJ1ZkhlYWQpIHBieVR4QnVmZmVyQWRkcjsKIAogICAgIHdUeEJ1ZlNpemUgPSBzaXplb2YoU1R4QnVmSGVhZCk7CkBAIC0yMTIzLDIyICsyMDg4LDIxIEBACiAKICAgICBpZiAoKHBEZXZpY2UtPmVPUE1vZGUgPT0gT1BfTU9ERV9BREhPQykgfHwKICAgICAgICAgKHBEZXZpY2UtPmVPUE1vZGUgPT0gT1BfTU9ERV9BUCkpIHsKLSAgICAgICAgaWYgKElTX01VTFRJQ0FTVF9BRERSRVNTKCYocHNFdGhIZWFkZXItPmFieURzdEFkZHJbMF0pKSB8fAotICAgICAgICAgICAgSVNfQlJPQURDQVNUX0FERFJFU1MoJihwc0V0aEhlYWRlci0+YWJ5RHN0QWRkclswXSkpKSB7Ci0gICAgICAgICAgICBiTmVlZEFDSyA9IEZBTFNFOworICAgICAgICBpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoJihwc0V0aEhlYWRlci0+YWJ5RHN0QWRkclswXSkpKSB7CisgICAgICAgICAgICBiTmVlZEFDSyA9IGZhbHNlOwogICAgICAgICAgICAgcFR4QnVmSGVhZC0+d0ZJRk9DdGwgPSBwVHhCdWZIZWFkLT53RklGT0N0bCAmICh+RklGT0NUTF9ORUVEQUNLKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGJOZWVkQUNLID0gVFJVRTsKKyAgICAgICAgICAgIGJOZWVkQUNLID0gdHJ1ZTsKICAgICAgICAgICAgIHBUeEJ1ZkhlYWQtPndGSUZPQ3RsIHw9IEZJRk9DVExfTkVFREFDSzsKICAgICAgICAgfQotICAgICAgICBiSXNBZGhvYyA9IFRSVUU7CisgICAgICAgIGJJc0FkaG9jID0gdHJ1ZTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIE1TRFVzIGluIEluZnJhIG1vZGUgYWx3YXlzIG5lZWQgQUNLCi0gICAgICAgIGJOZWVkQUNLID0gVFJVRTsKKyAgICAgICAgYk5lZWRBQ0sgPSB0cnVlOwogICAgICAgICBwVHhCdWZIZWFkLT53RklGT0N0bCB8PSBGSUZPQ1RMX05FRURBQ0s7Ci0gICAgICAgIGJJc0FkaG9jID0gRkFMU0U7CisgICAgICAgIGJJc0FkaG9jID0gZmFsc2U7CiAgICAgfQogCiAKQEAgLTIxNjUsNyArMjEyOSw3IEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgY2JNYWNIZExlbiA9IFdMQU5fSERSX0FERFIzX0xFTjsKICAgICB9Ci0gICAgcFR4QnVmSGVhZC0+d0ZyYWdDdGwgfD0gY3B1X3RvX2xlMTYoKFdPUkQpKGNiTWFjSGRMZW4gPDwgMTApKTsKKyAgICBwVHhCdWZIZWFkLT53RnJhZ0N0bCB8PSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpKGNiTWFjSGRMZW4gPDwgMTApKTsKIAogICAgIC8vU2V0IHBhY2tldCB0eXBlCiAgICAgaWYgKGJ5UGt0VHlwZSA9PSBQS19UWVBFXzExQSkgey8vMDAwMCAwMDAwIDAwMDAgMDAwMApAQCAtMjE4MSw3ICsyMTQ1LDcgQEAKICAgICAgICAgcFR4QnVmSGVhZC0+d0ZJRk9DdGwgfD0gRklGT0NUTF8xMUdBOwogICAgIH0KICAgICAvL1NldCBGSUZPQ1RMX0dycEFja1BvbGljeQotICAgIGlmIChwRGV2aWNlLT5iR3JwQWNrUG9saWN5ID09IFRSVUUpIHsvLzAwMDAgMDEwMCAwMDAwIDAwMDAKKyAgICBpZiAocERldmljZS0+YkdycEFja1BvbGljeSA9PSB0cnVlKSB7Ly8wMDAwIDAxMDAgMDAwMCAwMDAwCiAgICAgICAgIHBUeEJ1ZkhlYWQtPndGSUZPQ3RsIHw9CUZJRk9DVExfR1JQQUNLOwogICAgIH0KIApAQCAtMjE5NSw3ICsyMTU5LDcgQEAKICAgICB9CiAKICAgICAvL1NldCBGUkFHQ1RMX1dFUFRZUAotICAgIHBEZXZpY2UtPmJBRVMgPSBGQUxTRTsKKyAgICBwRGV2aWNlLT5iQUVTID0gZmFsc2U7CiAKICAgICAvL1NldCBGUkFHQ1RMX1dFUFRZUAogICAgIGlmIChwRGV2aWNlLT5ieUxvY2FsSUQgPiBSRVZfSURfVlQzMjUzX0ExKSB7CkBAIC0yMjY3LDEzICsyMjMxLDEzIEBACiB2b2lkCiB2R2VuZXJhdGVNQUNIZWFkZXIgKAogICAgIFBTRGV2aWNlICAgICAgICAgcERldmljZSwKLSAgICBQQllURSAgICAgICAgICAgIHBieUJ1ZmZlckFkZHIsCi0gICAgV09SRCAgICAgICAgICAgICB3RHVyYXRpb24sCisgICAgdW5zaWduZWQgY2hhciAqcGJ5QnVmZmVyQWRkciwKKyAgICB1bnNpZ25lZCBzaG9ydCB3RHVyYXRpb24sCiAgICAgUFNFdGhlcm5ldEhlYWRlciBwc0V0aEhlYWRlciwKLSAgICBCT09MICAgICAgICAgICAgIGJOZWVkRW5jcnlwdCwKLSAgICBXT1JEICAgICAgICAgICAgIHdGcmFnVHlwZSwKLSAgICBVSU5UICAgICAgICAgICAgIHVETUFJZHgsCi0gICAgVUlOVCAgICAgICAgICAgICB1RnJhZ0lkeAorICAgIGJvb2wgYk5lZWRFbmNyeXB0LAorICAgIHVuc2lnbmVkIHNob3J0IHdGcmFnVHlwZSwKKyAgICB1bnNpZ25lZCBpbnQgdURNQUlkeCwKKyAgICB1bnNpZ25lZCBpbnQgdUZyYWdJZHgKICAgICApCiB7CiAgICAgUFM4MDJfMTFIZWFkZXIgIHBNQUNIZWFkZXIgPSAoUFM4MDJfMTFIZWFkZXIpcGJ5QnVmZmVyQWRkcjsKQEAgLTIzMDcsNyArMjI3MSw3IEBACiAgICAgfQogCiAgICAgaWYgKGJOZWVkRW5jcnlwdCkKLSAgICAgICAgcE1BQ0hlYWRlci0+d0ZyYW1lQ3RsIHw9IGNwdV90b19sZTE2KChXT1JEKVdMQU5fU0VUX0ZDX0lTV0VQKDEpKTsKKyAgICAgICAgcE1BQ0hlYWRlci0+d0ZyYW1lQ3RsIHw9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydClXTEFOX1NFVF9GQ19JU1dFUCgxKSk7CiAKICAgICBwTUFDSGVhZGVyLT53RHVyYXRpb25JRCA9IGNwdV90b19sZTE2KHdEdXJhdGlvbik7CiAKQEAgLTIzMTksNyArMjI4Myw3IEBACiAgICAgcE1BQ0hlYWRlci0+d1NlcUN0bCA9IGNwdV90b19sZTE2KHBEZXZpY2UtPndTZXFDb3VudGVyIDw8IDQpOwogCiAgICAgLy9TZXQgRnJhZ051bWJlciBpbiBTZXF1ZW5jZSBDb250cm9sCi0gICAgcE1BQ0hlYWRlci0+d1NlcUN0bCB8PSBjcHVfdG9fbGUxNigoV09SRCl1RnJhZ0lkeCk7CisgICAgcE1BQ0hlYWRlci0+d1NlcUN0bCB8PSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpdUZyYWdJZHgpOwogCiAgICAgaWYgKCh3RnJhZ1R5cGUgPT0gRlJBR0NUTF9FTkRGUkFHKSB8fCAod0ZyYWdUeXBlID09IEZSQUdDVExfTk9ORlJBRykpIHsKICAgICAgICAgcERldmljZS0+d1NlcUNvdW50ZXIrKzsKQEAgLTIzNDAsMzIgKzIzMDQsMzIgQEAKIENNRF9TVEFUVVMgY3NNZ210X3htaXQoUFNEZXZpY2UgcERldmljZSwgUFNUeE1nbXRQYWNrZXQgcFBhY2tldCkgewogCiAgICAgUFNUeERlc2MgICAgICAgIHBGcnN0VEQ7Ci0gICAgQllURSAgICAgICAgICAgIGJ5UGt0VHlwZTsKLSAgICBQQllURSAgICAgICAgICAgcGJ5VHhCdWZmZXJBZGRyOworICAgIHVuc2lnbmVkIGNoYXIgYnlQa3RUeXBlOworICAgIHVuc2lnbmVkIGNoYXIgKnBieVR4QnVmZmVyQWRkcjsKICAgICB2b2lkICogICAgICAgICAgcHZSVFM7CiAgICAgUFNDVFMgICAgICAgICAgIHBDVFM7CiAgICAgdm9pZCAqICAgICAgICAgIHB2VHhEYXRhSGQ7Ci0gICAgVUlOVCAgICAgICAgICAgIHVEdXJhdGlvbjsKLSAgICBVSU5UICAgICAgICAgICAgY2JSZXFDb3VudDsKKyAgICB1bnNpZ25lZCBpbnQgdUR1cmF0aW9uOworICAgIHVuc2lnbmVkIGludCBjYlJlcUNvdW50OwogICAgIFBTODAyXzExSGVhZGVyICBwTUFDSGVhZGVyOwotICAgIFVJTlQgICAgICAgICAgICBjYkhlYWRlclNpemU7Ci0gICAgVUlOVCAgICAgICAgICAgIGNiRnJhbWVCb2R5U2l6ZTsKLSAgICBCT09MICAgICAgICAgICAgYk5lZWRBQ0s7Ci0gICAgQk9PTCAgICAgICAgICAgIGJJc1BTUE9MTCA9IEZBTFNFOworICAgIHVuc2lnbmVkIGludCBjYkhlYWRlclNpemU7CisgICAgdW5zaWduZWQgaW50IGNiRnJhbWVCb2R5U2l6ZTsKKyAgICBib29sIGJOZWVkQUNLOworICAgIGJvb2wgYklzUFNQT0xMID0gZmFsc2U7CiAgICAgUFNUeEJ1ZkhlYWQgICAgIHBUeEJ1ZkhlYWQ7Ci0gICAgVUlOVCAgICAgICAgICAgIGNiRnJhbWVTaXplOwotICAgIFVJTlQgICAgICAgICAgICBjYklWbGVuID0gMDsKLSAgICBVSU5UICAgICAgICAgICAgY2JJQ1ZsZW4gPSAwOwotICAgIFVJTlQgICAgICAgICAgICBjYk1JQ2xlbiA9IDA7Ci0gICAgVUlOVCAgICAgICAgICAgIGNiRkNTbGVuID0gNDsKLSAgICBVSU5UICAgICAgICAgICAgdVBhZGRpbmcgPSAwOwotICAgIFdPUkQgICAgICAgICAgICB3VHhCdWZTaXplOwotICAgIFVJTlQgICAgICAgICAgICBjYk1hY0hkTGVuOworICAgIHVuc2lnbmVkIGludCBjYkZyYW1lU2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgY2JJVmxlbiA9IDA7CisgICAgdW5zaWduZWQgaW50IGNiSUNWbGVuID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgY2JNSUNsZW4gPSAwOworICAgIHVuc2lnbmVkIGludCBjYkZDU2xlbiA9IDQ7CisgICAgdW5zaWduZWQgaW50IHVQYWRkaW5nID0gMDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3VHhCdWZTaXplOworICAgIHVuc2lnbmVkIGludCBjYk1hY0hkTGVuOwogICAgIFNFdGhlcm5ldEhlYWRlciBzRXRoSGVhZGVyOwogICAgIHZvaWQgKiAgICAgICAgICBwdlJydlRpbWU7CiAgICAgdm9pZCAqICAgICAgICAgIHBNSUNIRFI7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7Ci0gICAgV09SRCAgICAgICAgICAgIHdDdXJyZW50UmF0ZSA9IFJBVEVfMU07CisgICAgdW5zaWduZWQgc2hvcnQgd0N1cnJlbnRSYXRlID0gUkFURV8xTTsKIAogCiAgICAgaWYgKEFWQUlMX1REKHBEZXZpY2UsIFRZUEVfVFhETUEwKSA8PSAwKSB7CkBAIC0yMzczLDcgKzIzMzcsNyBAQAogICAgIH0KIAogICAgIHBGcnN0VEQgPSBwRGV2aWNlLT5hcEN1cnJURFtUWVBFX1RYRE1BMF07Ci0gICAgcGJ5VHhCdWZmZXJBZGRyID0gKFBCWVRFKXBGcnN0VEQtPnBUREluZm8tPmJ1ZjsKKyAgICBwYnlUeEJ1ZmZlckFkZHIgPSAodW5zaWduZWQgY2hhciAqKXBGcnN0VEQtPnBUREluZm8tPmJ1ZjsKICAgICBjYkZyYW1lQm9keVNpemUgPSBwUGFja2V0LT5jYlBheWxvYWRMZW47CiAgICAgcFR4QnVmSGVhZCA9IChQU1R4QnVmSGVhZCkgcGJ5VHhCdWZmZXJBZGRyOwogICAgIHdUeEJ1ZlNpemUgPSBzaXplb2YoU1R4QnVmSGVhZCk7CkBAIC0yNDI0LDEyICsyMzg4LDEwIEBACiAgICAgcFR4QnVmSGVhZC0+d1RpbWVTdGFtcCA9IGNwdV90b19sZTE2KERFRkFVTFRfTUdOX0xJRkVUSU1FX1JFU182NHVzKTsKIAogCi0gICAgaWYgKElTX01VTFRJQ0FTVF9BRERSRVNTKCYocFBhY2tldC0+cDgwMjExSGVhZGVyLT5zQTMuYWJ5QWRkcjFbMF0pKSB8fAotICAgICAgICBJU19CUk9BRENBU1RfQUREUkVTUygmKHBQYWNrZXQtPnA4MDIxMUhlYWRlci0+c0EzLmFieUFkZHIxWzBdKSkpIHsKLSAgICAgICAgYk5lZWRBQ0sgPSBGQUxTRTsKLSAgICB9CisgICAgaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKCYocFBhY2tldC0+cDgwMjExSGVhZGVyLT5zQTMuYWJ5QWRkcjFbMF0pKSkKKyAgICAgICAgYk5lZWRBQ0sgPSBmYWxzZTsKICAgICBlbHNlIHsKLSAgICAgICAgYk5lZWRBQ0sgPSBUUlVFOworICAgICAgICBiTmVlZEFDSyA9IHRydWU7CiAgICAgICAgIHBUeEJ1ZkhlYWQtPndGSUZPQ3RsIHw9IEZJRk9DVExfTkVFREFDSzsKICAgICB9OwogCkBAIC0yNDQxLDcgKzI0MDMsNyBAQAogICAgICAgICAvL3BEZXZpY2UtPmJ5UHJlYW1ibGVUeXBlID0gUFJFQU1CTEVfTE9ORzsKICAgICAgICAgLy8gcHJvYmUtcmVzcG9uc2UgZG9uJ3QgcmV0cnkKICAgICAgICAgLy9pZiAoKHBQYWNrZXQtPnA4MDIxMUhlYWRlci0+c0E0LndGcmFtZUN0bCAmIFRZUEVfU1VCVFlQRV9NQVNLKSA9PSBUWVBFX01HTVRfUFJPQkVfUlNQKSB7Ci0gICAgICAgIC8vICAgICBiTmVlZEFDSyA9IEZBTFNFOworICAgICAgICAvLyAgICAgYk5lZWRBQ0sgPSBmYWxzZTsKICAgICAgICAgLy8gICAgIHBUeEJ1ZkhlYWQtPndGSUZPQ3RsICAmPSAofkZJRk9DVExfTkVFREFDSyk7CiAgICAgICAgIC8vfQogICAgIH0KQEAgLTI0NDksMTkgKzI0MTEsMTkgQEAKICAgICBwVHhCdWZIZWFkLT53RklGT0N0bCB8PSAoRklGT0NUTF9HRU5JTlQgfCBGSUZPQ1RMX0lTRE1BMCk7CiAKICAgICBpZiAoKHBQYWNrZXQtPnA4MDIxMUhlYWRlci0+c0E0LndGcmFtZUN0bCAmIFRZUEVfU1VCVFlQRV9NQVNLKSA9PSBUWVBFX0NUTF9QU1BPTEwpIHsKLSAgICAgICAgYklzUFNQT0xMID0gVFJVRTsKKyAgICAgICAgYklzUFNQT0xMID0gdHJ1ZTsKICAgICAgICAgY2JNYWNIZExlbiA9IFdMQU5fSERSX0FERFIyX0xFTjsKICAgICB9IGVsc2UgewogICAgICAgICBjYk1hY0hkTGVuID0gV0xBTl9IRFJfQUREUjNfTEVOOwogICAgIH0KIAogICAgIC8vU2V0IEZSQUdDVExfTUFDSERDTlQKLSAgICBwVHhCdWZIZWFkLT53RnJhZ0N0bCB8PSBjcHVfdG9fbGUxNigoV09SRCkoY2JNYWNIZExlbiA8PCAxMCkpOworICAgIHBUeEJ1ZkhlYWQtPndGcmFnQ3RsIHw9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydCkoY2JNYWNIZExlbiA8PCAxMCkpOwogCiAgICAgLy8gTm90ZXM6CiAgICAgLy8gQWx0aG91Z2ggc3BlYyBzYXlzIE1NUERVIGNhbiBiZSBmcmFnbWVudGVkOyBJbiBtb3N0IGNhc2UsCiAgICAgLy8gbm8gb25lIHdpbGwgc2VuZCBhIE1NUERVIHVuZGVyIGZyYWdtZW50YXRpb24uIFdpdGggUlRTIG1heSBvY2N1ci4KLSAgICBwRGV2aWNlLT5iQUVTID0gRkFMU0U7ICAvL1NldCBGUkFHQ1RMX1dFUFRZUAorICAgIHBEZXZpY2UtPmJBRVMgPSBmYWxzZTsgIC8vU2V0IEZSQUdDVExfV0VQVFlQCiAKICAgICBpZiAoV0xBTl9HRVRfRkNfSVNXRVAocFBhY2tldC0+cDgwMjExSGVhZGVyLT5zQTQud0ZyYW1lQ3RsKSAhPSAwKSB7CiAgICAgICAgIGlmIChwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkKSB7CkBAIC0yNDgyLDcgKzI0NDQsNyBAQAogICAgICAgICAgICAgY2JJVmxlbiA9IDg7Ly9SU04gSGVhZGVyCiAgICAgICAgICAgICBjYklDVmxlbiA9IDg7Ly9NSUMKICAgICAgICAgICAgIHBUeEJ1ZkhlYWQtPndGcmFnQ3RsIHw9IEZSQUdDVExfQUVTOwotICAgICAgICAgICAgcERldmljZS0+YkFFUyA9IFRSVUU7CisgICAgICAgICAgICBwRGV2aWNlLT5iQUVTID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICAvL01BQyBIZWFkZXIgc2hvdWxkIGJlIHBhZGRpbmcgMCB0byBEVyBhbGlnbm1lbnQuCiAgICAgICAgIHVQYWRkaW5nID0gNCAtIChjYk1hY0hkTGVuJTQpOwpAQCAtMjQ5Miw3ICsyNDU0LDcgQEAKICAgICBjYkZyYW1lU2l6ZSA9IGNiTWFjSGRMZW4gKyBjYkZyYW1lQm9keVNpemUgKyBjYklWbGVuICsgY2JNSUNsZW4gKyBjYklDVmxlbiArIGNiRkNTbGVuOwogCiAgICAgLy9TZXQgRklGT0NUTF9HcnBBY2tQb2xpY3kKLSAgICBpZiAocERldmljZS0+YkdycEFja1BvbGljeSA9PSBUUlVFKSB7Ly8wMDAwIDAxMDAgMDAwMCAwMDAwCisgICAgaWYgKHBEZXZpY2UtPmJHcnBBY2tQb2xpY3kgPT0gdHJ1ZSkgey8vMDAwMCAwMTAwIDAwMDAgMDAwMAogICAgICAgICBwVHhCdWZIZWFkLT53RklGT0N0bCB8PQlGSUZPQ1RMX0dSUEFDSzsKICAgICB9CiAgICAgLy90aGUgcmVzdCBvZiBwVHhCdWZIZWFkLT53RnJhZ0N0bDpGcmFnVHlwIHdpbGwgYmUgc2V0IGxhdGVyIGluIHNfdkZpbGxGcmFnUGFyYW1ldGVyKCkKQEAgLTI1MjMsNyArMjQ4NSw3IEBACiAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgLy8gICAgTm8gRnJhZ21lbnRhdGlvbgogICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIHBUeEJ1ZkhlYWQtPndGcmFnQ3RsIHw9IChXT1JEKUZSQUdDVExfTk9ORlJBRzsKKyAgICBwVHhCdWZIZWFkLT53RnJhZ0N0bCB8PSAodW5zaWduZWQgc2hvcnQpRlJBR0NUTF9OT05GUkFHOwogCiAKICAgICAvL0ZpbGwgRklGTyxScnZUaW1lLFJUUyxhbmQgQ1RTCkBAIC0yNTM5LDE3ICsyNTAxLDE3IEBACiAgICAgY2JSZXFDb3VudCA9IGNiSGVhZGVyU2l6ZSArIGNiTWFjSGRMZW4gKyB1UGFkZGluZyArIGNiSVZsZW4gKyBjYkZyYW1lQm9keVNpemU7CiAKICAgICBpZiAoV0xBTl9HRVRfRkNfSVNXRVAocFBhY2tldC0+cDgwMjExSGVhZGVyLT5zQTQud0ZyYW1lQ3RsKSAhPSAwKSB7Ci0gICAgICAgIFBCWVRFICAgICAgICAgICBwYnlJVkhlYWQ7Ci0gICAgICAgIFBCWVRFICAgICAgICAgICBwYnlQYXlsb2FkSGVhZDsKLSAgICAgICAgUEJZVEUgICAgICAgICAgIHBieUJTU0lEOworICAgICAgICB1bnNpZ25lZCBjaGFyICpwYnlJVkhlYWQ7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKnBieVBheWxvYWRIZWFkOworICAgICAgICB1bnNpZ25lZCBjaGFyICpwYnlCU1NJRDsKICAgICAgICAgUFNLZXlJdGVtICAgICAgIHBUcmFuc21pdEtleSA9IE5VTEw7CiAKLSAgICAgICAgcGJ5SVZIZWFkID0gKFBCWVRFKShwYnlUeEJ1ZmZlckFkZHIgKyBjYkhlYWRlclNpemUgKyBjYk1hY0hkTGVuICsgdVBhZGRpbmcpOwotICAgICAgICBwYnlQYXlsb2FkSGVhZCA9IChQQllURSkocGJ5VHhCdWZmZXJBZGRyICsgY2JIZWFkZXJTaXplICsgY2JNYWNIZExlbiArIHVQYWRkaW5nICsgY2JJVmxlbik7CisgICAgICAgIHBieUlWSGVhZCA9ICh1bnNpZ25lZCBjaGFyICopKHBieVR4QnVmZmVyQWRkciArIGNiSGVhZGVyU2l6ZSArIGNiTWFjSGRMZW4gKyB1UGFkZGluZyk7CisgICAgICAgIHBieVBheWxvYWRIZWFkID0gKHVuc2lnbmVkIGNoYXIgKikocGJ5VHhCdWZmZXJBZGRyICsgY2JIZWFkZXJTaXplICsgY2JNYWNIZExlbiArIHVQYWRkaW5nICsgY2JJVmxlbik7CiAKICAgICAgICAgLy9GaWxsIFRYS0VZCiAgICAgICAgIC8vS3lsZTogTmVlZCBmaXg6IFRLSVAgYW5kIEFFUyBkaWQndCBlbmNyeXQgTW50IFBhY2tldC4KLSAgICAgICAgLy9zX3ZGaWxsVHhLZXkocERldmljZSwgKFBCWVRFKXBUeEJ1ZkhlYWQtPmFkd1R4S2V5LCBOVUxMKTsKKyAgICAgICAgLy9zX3ZGaWxsVHhLZXkocERldmljZSwgKHVuc2lnbmVkIGNoYXIgKilwVHhCdWZIZWFkLT5hZHdUeEtleSwgTlVMTCk7CiAKICAgICAgICAgLy9GaWxsIElWKEV4dElWLFJTTkhEUikKICAgICAgICAgLy9zX3ZGaWxsUHJlUGF5bG9hZChwRGV2aWNlLCBwYnlJVkhlYWQsIE5VTEwpOwpAQCAtMjU1OCwxNiArMjUyMCwxNiBAQAogICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAvL0ZpbGwgTUlDSERSCiAgICAgICAgIC8vaWYgKHBEZXZpY2UtPmJBRVMpIHsKLSAgICAgICAgLy8gICAgc192RmlsbE1JQ0hEUihwRGV2aWNlLCAoUEJZVEUpcE1JQ0hEUiwgKFBCWVRFKXBNQUNIZWFkZXIsIChXT1JEKWNiRnJhbWVCb2R5U2l6ZSk7CisgICAgICAgIC8vICAgIHNfdkZpbGxNSUNIRFIocERldmljZSwgKHVuc2lnbmVkIGNoYXIgKilwTUlDSERSLCAodW5zaWduZWQgY2hhciAqKXBNQUNIZWFkZXIsICh1bnNpZ25lZCBzaG9ydCljYkZyYW1lQm9keVNpemUpOwogICAgICAgICAvL30KICAgICAgICAgZG8gewogICAgICAgICAgICAgaWYgKChwRGV2aWNlLT5lT1BNb2RlID09IE9QX01PREVfSU5GUkFTVFJVQ1RVUkUpICYmCi0gICAgICAgICAgICAgICAgKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSBUUlVFKSkgeworICAgICAgICAgICAgICAgIChwRGV2aWNlLT5iTGlua1Bhc3MgPT0gdHJ1ZSkpIHsKICAgICAgICAgICAgICAgICBwYnlCU1NJRCA9IHBEZXZpY2UtPmFieUJTU0lEOwogICAgICAgICAgICAgICAgIC8vIGdldCBwYWlyd2lzZSBrZXkKLSAgICAgICAgICAgICAgICBpZiAoS2V5YkdldFRyYW5zbWl0S2V5KCYocERldmljZS0+c0tleSksIHBieUJTU0lELCBQQUlSV0lTRV9LRVksICZwVHJhbnNtaXRLZXkpID09IEZBTFNFKSB7CisgICAgICAgICAgICAgICAgaWYgKEtleWJHZXRUcmFuc21pdEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwYnlCU1NJRCwgUEFJUldJU0VfS0VZLCAmcFRyYW5zbWl0S2V5KSA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAvLyBnZXQgZ3JvdXAga2V5Ci0gICAgICAgICAgICAgICAgICAgIGlmKEtleWJHZXRUcmFuc21pdEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwYnlCU1NJRCwgR1JPVVBfS0VZLCAmcFRyYW5zbWl0S2V5KSA9PSBUUlVFKSB7CisgICAgICAgICAgICAgICAgICAgIGlmKEtleWJHZXRUcmFuc21pdEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwYnlCU1NJRCwgR1JPVVBfS0VZLCAmcFRyYW5zbWl0S2V5KSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIkdldCBHVEsuXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yNTc4LDE5ICsyNTQwLDE5IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBnZXQgZ3JvdXAga2V5CiAgICAgICAgICAgICBwYnlCU1NJRCA9IHBEZXZpY2UtPmFieUJyb2FkY2FzdEFkZHI7Ci0gICAgICAgICAgICBpZihLZXliR2V0VHJhbnNtaXRLZXkoJihwRGV2aWNlLT5zS2V5KSwgcGJ5QlNTSUQsIEdST1VQX0tFWSwgJnBUcmFuc21pdEtleSkgPT0gRkFMU0UpIHsKKyAgICAgICAgICAgIGlmKEtleWJHZXRUcmFuc21pdEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwYnlCU1NJRCwgR1JPVVBfS0VZLCAmcFRyYW5zbWl0S2V5KSA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgIHBUcmFuc21pdEtleSA9IE5VTEw7CiAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJLRVkgaXMgTlVMTC4gT1AgTW9kZVslZF1cbiIsIHBEZXZpY2UtPmVPUE1vZGUpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIkdldCBHVEsuXG4iKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZShGQUxTRSk7CisgICAgICAgIH0gd2hpbGUoZmFsc2UpOwogICAgICAgICAvL0ZpbGwgVFhLRVkKLSAgICAgICAgc192RmlsbFR4S2V5KHBEZXZpY2UsIChQQllURSkocFR4QnVmSGVhZC0+YWR3VHhLZXkpLCBwYnlJVkhlYWQsIHBUcmFuc21pdEtleSwKLSAgICAgICAgICAgICAgICAgICAgIChQQllURSlwTUFDSGVhZGVyLCAoV09SRCljYkZyYW1lQm9keVNpemUsIE5VTEwpOworICAgICAgICBzX3ZGaWxsVHhLZXkocERldmljZSwgKHVuc2lnbmVkIGNoYXIgKikocFR4QnVmSGVhZC0+YWR3VHhLZXkpLCBwYnlJVkhlYWQsIHBUcmFuc21pdEtleSwKKyAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopcE1BQ0hlYWRlciwgKHVuc2lnbmVkIHNob3J0KWNiRnJhbWVCb2R5U2l6ZSwgTlVMTCk7CiAKICAgICAgICAgbWVtY3B5KHBNQUNIZWFkZXIsIHBQYWNrZXQtPnA4MDIxMUhlYWRlciwgY2JNYWNIZExlbik7Ci0gICAgICAgIG1lbWNweShwYnlQYXlsb2FkSGVhZCwgKChQQllURSkocFBhY2tldC0+cDgwMjExSGVhZGVyKSArIGNiTWFjSGRMZW4pLAorICAgICAgICBtZW1jcHkocGJ5UGF5bG9hZEhlYWQsICgodW5zaWduZWQgY2hhciAqKShwUGFja2V0LT5wODAyMTFIZWFkZXIpICsgY2JNYWNIZExlbiksCiAgICAgICAgICAgICAgICAgIGNiRnJhbWVCb2R5U2l6ZSk7CiAgICAgfQogICAgIGVsc2UgewpAQCAtMjYyMiw3ICsyNTg0LDcgQEAKICAgICAvL1NldCBUU1IxICYgUmVxQ291bnQgaW4gVHhEZXNjSGVhZAogICAgIHBGcnN0VEQtPm1fdGQxVEQxLmJ5VENSID0gKFRDUl9TVFAgfCBUQ1JfRURQIHwgRURNU0RVKTsKICAgICBwRnJzdFRELT5wVERJbmZvLT5za2JfZG1hID0gcEZyc3RURC0+cFRESW5mby0+YnVmX2RtYTsKLSAgICBwRnJzdFRELT5tX3RkMVREMS53UmVxQ291bnQgPSBjcHVfdG9fbGUxNigoV09SRCkoY2JSZXFDb3VudCkpOworICAgIHBGcnN0VEQtPm1fdGQxVEQxLndSZXFDb3VudCA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydCkoY2JSZXFDb3VudCkpOwogICAgIHBGcnN0VEQtPmJ1ZmZfYWRkciA9IGNwdV90b19sZTMyKHBGcnN0VEQtPnBUREluZm8tPnNrYl9kbWEpOwogICAgIHBGcnN0VEQtPnBUREluZm8tPmJ5RmxhZ3MgPSAwOwogCkBAIC0yNjMwLDcgKzI1OTIsNyBAQAogICAgICAgICAvLyBEaXNhYmxlIFBTCiAgICAgICAgIE1BQ2JQU1dha2V1cChwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKICAgICB9Ci0gICAgcERldmljZS0+YlBXQml0T24gPSBGQUxTRTsKKyAgICBwRGV2aWNlLT5iUFdCaXRPbiA9IGZhbHNlOwogCiAgICAgd21iKCk7CiAgICAgcEZyc3RURC0+bV90ZDBURDAuZjFPd25lciA9IE9XTkVEX0JZX05JQzsKQEAgLTI2NjEsMTYgKzI2MjMsMTYgQEAKIAogQ01EX1NUQVRVUyBjc0JlYWNvbl94bWl0KFBTRGV2aWNlIHBEZXZpY2UsIFBTVHhNZ210UGFja2V0IHBQYWNrZXQpIHsKIAotICAgIEJZVEUgICAgICAgICAgICAgYnlQa3RUeXBlOwotICAgIFBCWVRFICAgICAgICAgICAgcGJ5QnVmZmVyID0gKFBCWVRFKXBEZXZpY2UtPnR4X2JlYWNvbl9idWZzOwotICAgIFVJTlQgICAgICAgICAgICAgY2JGcmFtZVNpemUgPSBwUGFja2V0LT5jYk1QRFVMZW4gKyBXTEFOX0ZDU19MRU47Ci0gICAgVUlOVCAgICAgICAgICAgICBjYkhlYWRlclNpemUgPSAwOwotICAgIFdPUkQgICAgICAgICAgICAgd1R4QnVmU2l6ZSA9IHNpemVvZihTVHhTaG9ydEJ1ZkhlYWQpOworICAgIHVuc2lnbmVkIGNoYXIgYnlQa3RUeXBlOworICAgIHVuc2lnbmVkIGNoYXIgKnBieUJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopcERldmljZS0+dHhfYmVhY29uX2J1ZnM7CisgICAgdW5zaWduZWQgaW50IGNiRnJhbWVTaXplID0gcFBhY2tldC0+Y2JNUERVTGVuICsgV0xBTl9GQ1NfTEVOOworICAgIHVuc2lnbmVkIGludCBjYkhlYWRlclNpemUgPSAwOworICAgIHVuc2lnbmVkIHNob3J0IHdUeEJ1ZlNpemUgPSBzaXplb2YoU1R4U2hvcnRCdWZIZWFkKTsKICAgICBQU1R4U2hvcnRCdWZIZWFkIHBUeEJ1ZkhlYWQgPSAoUFNUeFNob3J0QnVmSGVhZCkgcGJ5QnVmZmVyOwogICAgIFBTVHhEYXRhSGVhZF9hYiAgcFR4RGF0YUhlYWQgPSAoUFNUeERhdGFIZWFkX2FiKSAocGJ5QnVmZmVyICsgd1R4QnVmU2l6ZSk7CiAgICAgUFM4MDJfMTFIZWFkZXIgICBwTUFDSGVhZGVyOwotICAgIFdPUkQgICAgICAgICAgICAgd0N1cnJlbnRSYXRlOwotICAgIFdPUkQgICAgICAgICAgICAgd0xlbiA9IDB4MDAwMDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VycmVudFJhdGU7CisgICAgdW5zaWduZWQgc2hvcnQgd0xlbiA9IDB4MDAwMDsKIAogCiAgICAgbWVtc2V0KHBUeEJ1ZkhlYWQsIDAsIHdUeEJ1ZlNpemUpOwpAQCAtMjY5MywxNyArMjY1NSwxNyBAQAogCiAgICAgLy9TZXQgcGFja2V0IHR5cGUgJiBHZXQgRHVyYXRpb24KICAgICBpZiAoYnlQa3RUeXBlID09IFBLX1RZUEVfMTFBKSB7Ly8wMDAwIDAwMDAgMDAwMCAwMDAwCi0gICAgICAgIHBUeERhdGFIZWFkLT53RHVyYXRpb24gPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXREYXRhRHVyYXRpb24ocERldmljZSwgREFUQURVUl9BLCBjYkZyYW1lU2l6ZSwgYnlQa3RUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDdXJyZW50UmF0ZSwgRkFMU0UsIDAsIDAsIDEsIEFVVE9fRkJfTk9ORSkpOworICAgICAgICBwVHhEYXRhSGVhZC0+d0R1cmF0aW9uID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldERhdGFEdXJhdGlvbihwRGV2aWNlLCBEQVRBRFVSX0EsIGNiRnJhbWVTaXplLCBieVBrdFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0N1cnJlbnRSYXRlLCBmYWxzZSwgMCwgMCwgMSwgQVVUT19GQl9OT05FKSk7CiAgICAgfQogICAgIGVsc2UgaWYgKGJ5UGt0VHlwZSA9PSBQS19UWVBFXzExQikgey8vMDAwMCAwMDAxIDAwMDAgMDAwMAogICAgICAgICBwVHhCdWZIZWFkLT53RklGT0N0bCB8PSBGSUZPQ1RMXzExQjsKLSAgICAgICAgcFR4RGF0YUhlYWQtPndEdXJhdGlvbiA9IGNwdV90b19sZTE2KChXT1JEKXNfdUdldERhdGFEdXJhdGlvbihwRGV2aWNlLCBEQVRBRFVSX0IsIGNiRnJhbWVTaXplLCBieVBrdFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0N1cnJlbnRSYXRlLCBGQUxTRSwgMCwgMCwgMSwgQVVUT19GQl9OT05FKSk7CisgICAgICAgIHBUeERhdGFIZWFkLT53RHVyYXRpb24gPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0RGF0YUR1cmF0aW9uKHBEZXZpY2UsIERBVEFEVVJfQiwgY2JGcmFtZVNpemUsIGJ5UGt0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Q3VycmVudFJhdGUsIGZhbHNlLCAwLCAwLCAxLCBBVVRPX0ZCX05PTkUpKTsKICAgICB9CiAKICAgICBCQnZDYWN1bGF0ZVBhcmFtZXRlcihwRGV2aWNlLCBjYkZyYW1lU2l6ZSwgd0N1cnJlbnRSYXRlLCBieVBrdFR5cGUsCi0gICAgICAgIChQV09SRCkmKHdMZW4pLCAoUEJZVEUpJihwVHhEYXRhSGVhZC0+YnlTZXJ2aWNlRmllbGQpLCAoUEJZVEUpJihwVHhEYXRhSGVhZC0+YnlTaWduYWxGaWVsZCkKKyAgICAgICAgKHVuc2lnbmVkIHNob3J0ICopJih3TGVuKSwgKHVuc2lnbmVkIGNoYXIgKikmKHBUeERhdGFIZWFkLT5ieVNlcnZpY2VGaWVsZCksICh1bnNpZ25lZCBjaGFyICopJihwVHhEYXRhSGVhZC0+YnlTaWduYWxGaWVsZCkKICAgICApOwogICAgIHBUeERhdGFIZWFkLT53VHJhbnNtaXRMZW5ndGggPSBjcHVfdG9fbGUxNih3TGVuKTsKICAgICAvL0dldCBUaW1lU3RhbXBPZmYKQEAgLTI3MzYsNDEgKzI2OTgsMzggQEAKIAogCiAKLVVJTlQKK3Vuc2lnbmVkIGludAogY2JHZXRGcmFnQ291bnQgKAogICAgIFBTRGV2aWNlICAgICAgICAgcERldmljZSwKICAgICBQU0tleUl0ZW0gICAgICAgIHBUcmFuc21pdEtleSwKLSAgICBVSU5UICAgICAgICAgICAgIGNiRnJhbWVCb2R5U2l6ZSwKKyAgICB1bnNpZ25lZCBpbnQgY2JGcmFtZUJvZHlTaXplLAogICAgIFBTRXRoZXJuZXRIZWFkZXIgcHNFdGhIZWFkZXIKICAgICApCiB7Ci0gICAgVUlOVCAgICAgICAgICAgY2JNQUNIZExlbjsKLSAgICBVSU5UICAgICAgICAgICBjYkZyYW1lU2l6ZTsKLSAgICBVSU5UICAgICAgICAgICBjYkZyYWdtZW50U2l6ZTsgLy9IZHIrKElWKStwYXlvYWQrKE1JQykrKElDVikrRkNTCi0gICAgVUlOVCAgICAgICAgICAgY2JGcmFnUGF5bG9hZFNpemU7Ci0gICAgVUlOVCAgICAgICAgICAgY2JMYXN0RnJhZ1BheWxvYWRTaXplOwotICAgIFVJTlQgICAgICAgICAgIGNiSVZsZW4gPSAwOwotICAgIFVJTlQgICAgICAgICAgIGNiSUNWbGVuID0gMDsKLSAgICBVSU5UICAgICAgICAgICBjYk1JQ2xlbiA9IDA7Ci0gICAgVUlOVCAgICAgICAgICAgY2JGQ1NsZW4gPSA0OwotICAgIFVJTlQgICAgICAgICAgIHVNQUNmcmFnTnVtID0gMTsKLSAgICBCT09MICAgICAgICAgICBiTmVlZEFDSzsKKyAgICB1bnNpZ25lZCBpbnQgY2JNQUNIZExlbjsKKyAgICB1bnNpZ25lZCBpbnQgY2JGcmFtZVNpemU7CisgICAgdW5zaWduZWQgaW50IGNiRnJhZ21lbnRTaXplOyAvL0hkcisoSVYpK3BheW9hZCsoTUlDKSsoSUNWKStGQ1MKKyAgICB1bnNpZ25lZCBpbnQgY2JGcmFnUGF5bG9hZFNpemU7CisgICAgdW5zaWduZWQgaW50IGNiTGFzdEZyYWdQYXlsb2FkU2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgY2JJVmxlbiA9IDA7CisgICAgdW5zaWduZWQgaW50IGNiSUNWbGVuID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgY2JNSUNsZW4gPSAwOworICAgIHVuc2lnbmVkIGludCBjYkZDU2xlbiA9IDQ7CisgICAgdW5zaWduZWQgaW50IHVNQUNmcmFnTnVtID0gMTsKKyAgICBib29sIGJOZWVkQUNLOwogCiAKIAogICAgIGlmICgocERldmljZS0+ZU9QTW9kZSA9PSBPUF9NT0RFX0FESE9DKSB8fAogICAgICAgICAocERldmljZS0+ZU9QTW9kZSA9PSBPUF9NT0RFX0FQKSkgewotICAgICAgICBpZiAoSVNfTVVMVElDQVNUX0FERFJFU1MoJihwc0V0aEhlYWRlci0+YWJ5RHN0QWRkclswXSkpIHx8Ci0gICAgICAgICAgICBJU19CUk9BRENBU1RfQUREUkVTUygmKHBzRXRoSGVhZGVyLT5hYnlEc3RBZGRyWzBdKSkpIHsKLSAgICAgICAgICAgIGJOZWVkQUNLID0gRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBiTmVlZEFDSyA9IFRSVUU7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKCYocHNFdGhIZWFkZXItPmFieURzdEFkZHJbMF0pKSkKKyAgICAgICAgICAgIGJOZWVkQUNLID0gZmFsc2U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJOZWVkQUNLID0gdHJ1ZTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIE1TRFVzIGluIEluZnJhIG1vZGUgYWx3YXlzIG5lZWQgQUNLCi0gICAgICAgIGJOZWVkQUNLID0gVFJVRTsKKyAgICAgICAgYk5lZWRBQ0sgPSB0cnVlOwogICAgIH0KIAogICAgIGlmIChwRGV2aWNlLT5iTG9uZ0hlYWRlcikKQEAgLTI3NzksNyArMjczOCw3IEBACiAgICAgICAgIGNiTUFDSGRMZW4gPSBXTEFOX0hEUl9BRERSM19MRU47CiAKIAotICAgIGlmIChwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9PSBUUlVFKSB7CisgICAgaWYgKHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID09IHRydWUpIHsKIAogICAgICAgICBpZiAocFRyYW5zbWl0S2V5ID09IE5VTEwpIHsKICAgICAgICAgICAgIGlmICgocERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZCkgfHwKQEAgLTI4MDksMTEgKzI3NjgsMTEgQEAKIAogICAgIGNiRnJhbWVTaXplID0gY2JNQUNIZExlbiArIGNiSVZsZW4gKyAoY2JGcmFtZUJvZHlTaXplICsgY2JNSUNsZW4pICsgY2JJQ1ZsZW4gKyBjYkZDU2xlbjsKIAotICAgIGlmICgoY2JGcmFtZVNpemUgPiBwRGV2aWNlLT53RnJhZ21lbnRhdGlvblRocmVzaG9sZCkgJiYgKGJOZWVkQUNLID09IFRSVUUpKSB7CisgICAgaWYgKChjYkZyYW1lU2l6ZSA+IHBEZXZpY2UtPndGcmFnbWVudGF0aW9uVGhyZXNob2xkKSAmJiAoYk5lZWRBQ0sgPT0gdHJ1ZSkpIHsKICAgICAgICAgLy8gRnJhZ21lbnRhdGlvbgogICAgICAgICBjYkZyYWdtZW50U2l6ZSA9IHBEZXZpY2UtPndGcmFnbWVudGF0aW9uVGhyZXNob2xkOwogICAgICAgICBjYkZyYWdQYXlsb2FkU2l6ZSA9IGNiRnJhZ21lbnRTaXplIC0gY2JNQUNIZExlbiAtIGNiSVZsZW4gLSBjYklDVmxlbiAtIGNiRkNTbGVuOwotICAgICAgICB1TUFDZnJhZ051bSA9IChXT1JEKSAoKGNiRnJhbWVCb2R5U2l6ZSArIGNiTUlDbGVuKSAvIGNiRnJhZ1BheWxvYWRTaXplKTsKKyAgICAgICAgdU1BQ2ZyYWdOdW0gPSAodW5zaWduZWQgc2hvcnQpICgoY2JGcmFtZUJvZHlTaXplICsgY2JNSUNsZW4pIC8gY2JGcmFnUGF5bG9hZFNpemUpOwogICAgICAgICBjYkxhc3RGcmFnUGF5bG9hZFNpemUgPSAoY2JGcmFtZUJvZHlTaXplICsgY2JNSUNsZW4pICUgY2JGcmFnUGF5bG9hZFNpemU7CiAgICAgICAgIGlmIChjYkxhc3RGcmFnUGF5bG9hZFNpemUgPT0gMCkgewogICAgICAgICAgICAgY2JMYXN0RnJhZ1BheWxvYWRTaXplID0gY2JGcmFnUGF5bG9hZFNpemU7CkBAIC0yODI2LDUxICsyNzg1LDUxIEBACiAKIAogdm9pZAotdkRNQTBfdHhfODAyMTEoUFNEZXZpY2UgIHBEZXZpY2UsIHN0cnVjdCBza19idWZmICpza2IsIFBCWVRFIHBiTVBEVSwgVUlOVCBjYk1QRFVMZW4pIHsKK3ZETUEwX3R4XzgwMjExKFBTRGV2aWNlICBwRGV2aWNlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBjaGFyICpwYk1QRFUsIHVuc2lnbmVkIGludCBjYk1QRFVMZW4pIHsKIAogICAgIFBTVHhEZXNjICAgICAgICBwRnJzdFREOwotICAgIEJZVEUgICAgICAgICAgICBieVBrdFR5cGU7Ci0gICAgUEJZVEUgICAgICAgICAgIHBieVR4QnVmZmVyQWRkcjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UGt0VHlwZTsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlUeEJ1ZmZlckFkZHI7CiAgICAgdm9pZCAqICAgICAgICAgIHB2UlRTOwogICAgIHZvaWQgKiAgICAgICAgICBwdkNUUzsKICAgICB2b2lkICogICAgICAgICAgcHZUeERhdGFIZDsKLSAgICBVSU5UICAgICAgICAgICAgdUR1cmF0aW9uOwotICAgIFVJTlQgICAgICAgICAgICBjYlJlcUNvdW50OworICAgIHVuc2lnbmVkIGludCB1RHVyYXRpb247CisgICAgdW5zaWduZWQgaW50IGNiUmVxQ291bnQ7CiAgICAgUFM4MDJfMTFIZWFkZXIgIHBNQUNIZWFkZXI7Ci0gICAgVUlOVCAgICAgICAgICAgIGNiSGVhZGVyU2l6ZTsKLSAgICBVSU5UICAgICAgICAgICAgY2JGcmFtZUJvZHlTaXplOwotICAgIEJPT0wgICAgICAgICAgICBiTmVlZEFDSzsKLSAgICBCT09MICAgICAgICAgICAgYklzUFNQT0xMID0gRkFMU0U7CisgICAgdW5zaWduZWQgaW50IGNiSGVhZGVyU2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgY2JGcmFtZUJvZHlTaXplOworICAgIGJvb2wgYk5lZWRBQ0s7CisgICAgYm9vbCBiSXNQU1BPTEwgPSBmYWxzZTsKICAgICBQU1R4QnVmSGVhZCAgICAgcFR4QnVmSGVhZDsKLSAgICBVSU5UICAgICAgICAgICAgY2JGcmFtZVNpemU7Ci0gICAgVUlOVCAgICAgICAgICAgIGNiSVZsZW4gPSAwOwotICAgIFVJTlQgICAgICAgICAgICBjYklDVmxlbiA9IDA7Ci0gICAgVUlOVCAgICAgICAgICAgIGNiTUlDbGVuID0gMDsKLSAgICBVSU5UICAgICAgICAgICAgY2JGQ1NsZW4gPSA0OwotICAgIFVJTlQgICAgICAgICAgICB1UGFkZGluZyA9IDA7Ci0gICAgVUlOVCAgICAgICAgICAgIGNiTUlDSERSID0gMDsKLSAgICBVSU5UICAgICAgICAgICAgdUxlbmd0aCA9IDA7Ci0gICAgRFdPUkQgICAgICAgICAgIGR3TUlDS2V5MCwgZHdNSUNLZXkxOwotICAgIERXT1JEICAgICAgICAgICBkd01JQ19Qcmlvcml0eTsKLSAgICBQRFdPUkQgICAgICAgICAgcGR3TUlDX0w7Ci0gICAgUERXT1JEICAgICAgICAgIHBkd01JQ19SOwotICAgIFdPUkQgICAgICAgICAgICB3VHhCdWZTaXplOwotICAgIFVJTlQgICAgICAgICAgICBjYk1hY0hkTGVuOworICAgIHVuc2lnbmVkIGludCBjYkZyYW1lU2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgY2JJVmxlbiA9IDA7CisgICAgdW5zaWduZWQgaW50IGNiSUNWbGVuID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgY2JNSUNsZW4gPSAwOworICAgIHVuc2lnbmVkIGludCBjYkZDU2xlbiA9IDQ7CisgICAgdW5zaWduZWQgaW50IHVQYWRkaW5nID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgY2JNSUNIRFIgPSAwOworICAgIHVuc2lnbmVkIGludCB1TGVuZ3RoID0gMDsKKyAgICB1bnNpZ25lZCBsb25nIGR3TUlDS2V5MCwgZHdNSUNLZXkxOworICAgIHVuc2lnbmVkIGxvbmcgZHdNSUNfUHJpb3JpdHk7CisgICAgdW5zaWduZWQgbG9uZyAqcGR3TUlDX0w7CisgICAgdW5zaWduZWQgbG9uZyAqcGR3TUlDX1I7CisgICAgdW5zaWduZWQgc2hvcnQgd1R4QnVmU2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgY2JNYWNIZExlbjsKICAgICBTRXRoZXJuZXRIZWFkZXIgc0V0aEhlYWRlcjsKICAgICB2b2lkICogICAgICAgICAgcHZScnZUaW1lOwogICAgIHZvaWQgKiAgICAgICAgICBwTUlDSERSOwogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwotICAgIFdPUkQgICAgICAgICAgICB3Q3VycmVudFJhdGUgPSBSQVRFXzFNOworICAgIHVuc2lnbmVkIHNob3J0IHdDdXJyZW50UmF0ZSA9IFJBVEVfMU07CiAgICAgUFVXTEFOXzgwMjExSERSICBwODAyMTFIZWFkZXI7Ci0gICAgVUlOVCAgICAgICAgICAgICB1Tm9kZUluZGV4ID0gMDsKLSAgICBCT09MICAgICAgICAgICAgYk5vZGVFeGlzdCA9IEZBTFNFOworICAgIHVuc2lnbmVkIGludCB1Tm9kZUluZGV4ID0gMDsKKyAgICBib29sIGJOb2RlRXhpc3QgPSBmYWxzZTsKICAgICBTS2V5SXRlbSAgICAgICAgU1RlbXBLZXk7CiAgICAgUFNLZXlJdGVtICAgICAgIHBUcmFuc21pdEtleSA9IE5VTEw7Ci0gICAgUEJZVEUgICAgICAgICAgIHBieUlWSGVhZDsKLSAgICBQQllURSAgICAgICAgICAgcGJ5UGF5bG9hZEhlYWQ7Ci0gICAgUEJZVEUgICAgICAgICAgIHBieU1hY0hkcjsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlJVkhlYWQ7CisgICAgdW5zaWduZWQgY2hhciAqcGJ5UGF5bG9hZEhlYWQ7CisgICAgdW5zaWduZWQgY2hhciAqcGJ5TWFjSGRyOwogCi0gICAgVUlOVCAgICAgICAgICAgIGNiRXh0U3VwcFJhdGUgPSAwOworICAgIHVuc2lnbmVkIGludCBjYkV4dFN1cHBSYXRlID0gMDsKIC8vICAgIFBXTEFOX0lFICAgICAgICBwSXRlbTsKIAogCkBAIC0yODg2LDcgKzI4NDUsNyBAQAogCiAKICAgICBwRnJzdFREID0gcERldmljZS0+YXBDdXJyVERbVFlQRV9UWERNQTBdOwotICAgIHBieVR4QnVmZmVyQWRkciA9IChQQllURSlwRnJzdFRELT5wVERJbmZvLT5idWY7CisgICAgcGJ5VHhCdWZmZXJBZGRyID0gKHVuc2lnbmVkIGNoYXIgKilwRnJzdFRELT5wVERJbmZvLT5idWY7CiAgICAgcFR4QnVmSGVhZCA9IChQU1R4QnVmSGVhZCkgcGJ5VHhCdWZmZXJBZGRyOwogICAgIHdUeEJ1ZlNpemUgPSBzaXplb2YoU1R4QnVmSGVhZCk7CiAgICAgbWVtc2V0KHBUeEJ1ZkhlYWQsIDAsIHdUeEJ1ZlNpemUpOwpAQCAtMjkzOCwyMCArMjg5NywxOSBAQAogICAgIHBUeEJ1ZkhlYWQtPndUaW1lU3RhbXAgPSBjcHVfdG9fbGUxNihERUZBVUxUX01HTl9MSUZFVElNRV9SRVNfNjR1cyk7CiAKIAotICAgIGlmIChJU19NVUxUSUNBU1RfQUREUkVTUygmKHA4MDIxMUhlYWRlci0+c0EzLmFieUFkZHIxWzBdKSkgfHwKLSAgICAgICAgSVNfQlJPQURDQVNUX0FERFJFU1MoJihwODAyMTFIZWFkZXItPnNBMy5hYnlBZGRyMVswXSkpKSB7Ci0gICAgICAgIGJOZWVkQUNLID0gRkFMU0U7CisgICAgaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKCYocDgwMjExSGVhZGVyLT5zQTMuYWJ5QWRkcjFbMF0pKSkgeworICAgICAgICBiTmVlZEFDSyA9IGZhbHNlOwogICAgICAgICBpZiAocERldmljZS0+YkVuYWJsZUhvc3RXRVApIHsKICAgICAgICAgICAgIHVOb2RlSW5kZXggPSAwOwotICAgICAgICAgICAgYk5vZGVFeGlzdCA9IFRSVUU7CisgICAgICAgICAgICBiTm9kZUV4aXN0ID0gdHJ1ZTsKICAgICAgICAgfTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChwRGV2aWNlLT5iRW5hYmxlSG9zdFdFUCkgewotICAgICAgICAgICAgaWYgKEJTU0RCYklzU1RBSW5Ob2RlREIocERldmljZS0+cE1nbXQsIChQQllURSkocDgwMjExSGVhZGVyLT5zQTMuYWJ5QWRkcjEpLCAmdU5vZGVJbmRleCkpCi0gICAgICAgICAgICAgICAgYk5vZGVFeGlzdCA9IFRSVUU7CisgICAgICAgICAgICBpZiAoQlNTREJiSXNTVEFJbk5vZGVEQihwRGV2aWNlLT5wTWdtdCwgKHVuc2lnbmVkIGNoYXIgKikocDgwMjExSGVhZGVyLT5zQTMuYWJ5QWRkcjEpLCAmdU5vZGVJbmRleCkpCisgICAgICAgICAgICAgICAgYk5vZGVFeGlzdCA9IHRydWU7CiAgICAgICAgIH07Ci0gICAgICAgIGJOZWVkQUNLID0gVFJVRTsKKyAgICAgICAgYk5lZWRBQ0sgPSB0cnVlOwogICAgICAgICBwVHhCdWZIZWFkLT53RklGT0N0bCB8PSBGSUZPQ1RMX05FRURBQ0s7CiAgICAgfTsKIApAQCAtMjk2NCw3ICsyOTIyLDcgQEAKIAogICAgICAgICAvLyBwcm9iZS1yZXNwb25zZSBkb24ndCByZXRyeQogICAgICAgICAvL2lmICgocDgwMjExSGVhZGVyLT5zQTQud0ZyYW1lQ3RsICYgVFlQRV9TVUJUWVBFX01BU0spID09IFRZUEVfTUdNVF9QUk9CRV9SU1ApIHsKLSAgICAgICAgLy8gICAgIGJOZWVkQUNLID0gRkFMU0U7CisgICAgICAgIC8vICAgICBiTmVlZEFDSyA9IGZhbHNlOwogICAgICAgICAvLyAgICAgcFR4QnVmSGVhZC0+d0ZJRk9DdGwgICY9ICh+RklGT0NUTF9ORUVEQUNLKTsKICAgICAgICAgLy99CiAgICAgfQpAQCAtMjk3Miw3ICsyOTMwLDcgQEAKICAgICBwVHhCdWZIZWFkLT53RklGT0N0bCB8PSAoRklGT0NUTF9HRU5JTlQgfCBGSUZPQ1RMX0lTRE1BMCk7CiAKICAgICBpZiAoKHA4MDIxMUhlYWRlci0+c0E0LndGcmFtZUN0bCAmIFRZUEVfU1VCVFlQRV9NQVNLKSA9PSBUWVBFX0NUTF9QU1BPTEwpIHsKLSAgICAgICAgYklzUFNQT0xMID0gVFJVRTsKKyAgICAgICAgYklzUFNQT0xMID0gdHJ1ZTsKICAgICAgICAgY2JNYWNIZExlbiA9IFdMQU5fSERSX0FERFIyX0xFTjsKICAgICB9IGVsc2UgewogICAgICAgICBjYk1hY0hkTGVuID0gV0xBTl9IRFJfQUREUjNfTEVOOwpAQCAtMjk5NiwxMiArMjk1NCwxMiBAQAogCiAKICAgICAvL1NldCBGUkFHQ1RMX01BQ0hEQ05UCi0gICAgcFR4QnVmSGVhZC0+d0ZyYWdDdGwgfD0gY3B1X3RvX2xlMTYoKFdPUkQpY2JNYWNIZExlbiA8PCAxMCk7CisgICAgcFR4QnVmSGVhZC0+d0ZyYWdDdGwgfD0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KWNiTWFjSGRMZW4gPDwgMTApOwogCiAgICAgLy8gTm90ZXM6CiAgICAgLy8gQWx0aG91Z2ggc3BlYyBzYXlzIE1NUERVIGNhbiBiZSBmcmFnbWVudGVkOyBJbiBtb3N0IGNhc2UsCiAgICAgLy8gbm8gb25lIHdpbGwgc2VuZCBhIE1NUERVIHVuZGVyIGZyYWdtZW50YXRpb24uIFdpdGggUlRTIG1heSBvY2N1ci4KLSAgICBwRGV2aWNlLT5iQUVTID0gRkFMU0U7ICAvL1NldCBGUkFHQ1RMX1dFUFRZUAorICAgIHBEZXZpY2UtPmJBRVMgPSBmYWxzZTsgIC8vU2V0IEZSQUdDVExfV0VQVFlQCiAKIAogICAgIGlmIChXTEFOX0dFVF9GQ19JU1dFUChwODAyMTFIZWFkZXItPnNBNC53RnJhbWVDdGwpICE9IDApIHsKQEAgLTMwMjQsNyArMjk4Miw3IEBACiAgICAgICAgICAgICBjYklDVmxlbiA9IDg7Ly9NSUMKICAgICAgICAgICAgIGNiTUlDSERSID0gc2l6ZW9mKFNNSUNIRFJIZWFkKTsKICAgICAgICAgICAgIHBUeEJ1ZkhlYWQtPndGcmFnQ3RsIHw9IEZSQUdDVExfQUVTOwotICAgICAgICAgICAgcERldmljZS0+YkFFUyA9IFRSVUU7CisgICAgICAgICAgICBwRGV2aWNlLT5iQUVTID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICAvL01BQyBIZWFkZXIgc2hvdWxkIGJlIHBhZGRpbmcgMCB0byBEVyBhbGlnbm1lbnQuCiAgICAgICAgIHVQYWRkaW5nID0gNCAtIChjYk1hY0hkTGVuJTQpOwpAQCAtMzAzNCw3ICsyOTkyLDcgQEAKICAgICBjYkZyYW1lU2l6ZSA9IGNiTWFjSGRMZW4gKyBjYkZyYW1lQm9keVNpemUgKyBjYklWbGVuICsgY2JNSUNsZW4gKyBjYklDVmxlbiArIGNiRkNTbGVuICsgY2JFeHRTdXBwUmF0ZTsKIAogICAgIC8vU2V0IEZJRk9DVExfR3JwQWNrUG9saWN5Ci0gICAgaWYgKHBEZXZpY2UtPmJHcnBBY2tQb2xpY3kgPT0gVFJVRSkgey8vMDAwMCAwMTAwIDAwMDAgMDAwMAorICAgIGlmIChwRGV2aWNlLT5iR3JwQWNrUG9saWN5ID09IHRydWUpIHsvLzAwMDAgMDEwMCAwMDAwIDAwMDAKICAgICAgICAgcFR4QnVmSGVhZC0+d0ZJRk9DdGwgfD0JRklGT0NUTF9HUlBBQ0s7CiAgICAgfQogICAgIC8vdGhlIHJlc3Qgb2YgcFR4QnVmSGVhZC0+d0ZyYWdDdGw6RnJhZ1R5cCB3aWxsIGJlIHNldCBsYXRlciBpbiBzX3ZGaWxsRnJhZ1BhcmFtZXRlcigpCkBAIC0zMDY3LDcgKzMwMjUsNyBAQAogICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIC8vICAgIE5vIEZyYWdtZW50YXRpb24KICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBwVHhCdWZIZWFkLT53RnJhZ0N0bCB8PSAoV09SRClGUkFHQ1RMX05PTkZSQUc7CisgICAgcFR4QnVmSGVhZC0+d0ZyYWdDdGwgfD0gKHVuc2lnbmVkIHNob3J0KUZSQUdDVExfTk9ORlJBRzsKIAogCiAgICAgLy9GaWxsIEZJRk8sUnJ2VGltZSxSVFMsYW5kIENUUwpAQCAtMzA4Miw5ICszMDQwLDkgQEAKIAogICAgIGNiUmVxQ291bnQgPSBjYkhlYWRlclNpemUgKyBjYk1hY0hkTGVuICsgdVBhZGRpbmcgKyBjYklWbGVuICsgKGNiRnJhbWVCb2R5U2l6ZSArIGNiTUlDbGVuKSArIGNiRXh0U3VwcFJhdGU7CiAKLSAgICBwYnlNYWNIZHIgPSAoUEJZVEUpKHBieVR4QnVmZmVyQWRkciArIGNiSGVhZGVyU2l6ZSk7Ci0gICAgcGJ5UGF5bG9hZEhlYWQgPSAoUEJZVEUpKHBieU1hY0hkciArIGNiTWFjSGRMZW4gKyB1UGFkZGluZyArIGNiSVZsZW4pOwotICAgIHBieUlWSGVhZCA9IChQQllURSkocGJ5TWFjSGRyICsgY2JNYWNIZExlbiArIHVQYWRkaW5nKTsKKyAgICBwYnlNYWNIZHIgPSAodW5zaWduZWQgY2hhciAqKShwYnlUeEJ1ZmZlckFkZHIgKyBjYkhlYWRlclNpemUpOworICAgIHBieVBheWxvYWRIZWFkID0gKHVuc2lnbmVkIGNoYXIgKikocGJ5TWFjSGRyICsgY2JNYWNIZExlbiArIHVQYWRkaW5nICsgY2JJVmxlbik7CisgICAgcGJ5SVZIZWFkID0gKHVuc2lnbmVkIGNoYXIgKikocGJ5TWFjSGRyICsgY2JNYWNIZExlbiArIHVQYWRkaW5nKTsKIAogICAgIC8vIENvcHkgdGhlIFBhY2tldCBpbnRvIGEgdHggQnVmZmVyCiAgICAgbWVtY3B5KHBieU1hY0hkciwgcGJNUERVLCBjYk1hY0hkTGVuKTsKQEAgLTMxMjcsMzAgKzMwODUsMzAgQEAKIAogICAgICAgICBpZiAoKHBUcmFuc21pdEtleSAhPSBOVUxMKSAmJiAocFRyYW5zbWl0S2V5LT5ieUNpcGhlclN1aXRlID09IEtFWV9DVExfVEtJUCkpIHsKIAotICAgICAgICAgICAgZHdNSUNLZXkwID0gKihQRFdPUkQpKCZwVHJhbnNtaXRLZXktPmFieUtleVsxNl0pOwotICAgICAgICAgICAgZHdNSUNLZXkxID0gKihQRFdPUkQpKCZwVHJhbnNtaXRLZXktPmFieUtleVsyMF0pOworICAgICAgICAgICAgZHdNSUNLZXkwID0gKih1bnNpZ25lZCBsb25nICopKCZwVHJhbnNtaXRLZXktPmFieUtleVsxNl0pOworICAgICAgICAgICAgZHdNSUNLZXkxID0gKih1bnNpZ25lZCBsb25nICopKCZwVHJhbnNtaXRLZXktPmFieUtleVsyMF0pOwogCiAgICAgICAgICAgICAvLyBETyBTb2Z0d2FyZSBNaWNoYWVsCiAgICAgICAgICAgICBNSUNfdkluaXQoZHdNSUNLZXkwLCBkd01JQ0tleTEpOwotICAgICAgICAgICAgTUlDX3ZBcHBlbmQoKFBCWVRFKSYoc0V0aEhlYWRlci5hYnlEc3RBZGRyWzBdKSwgMTIpOworICAgICAgICAgICAgTUlDX3ZBcHBlbmQoKHVuc2lnbmVkIGNoYXIgKikmKHNFdGhIZWFkZXIuYWJ5RHN0QWRkclswXSksIDEyKTsKICAgICAgICAgICAgIGR3TUlDX1ByaW9yaXR5ID0gMDsKLSAgICAgICAgICAgIE1JQ192QXBwZW5kKChQQllURSkmZHdNSUNfUHJpb3JpdHksIDQpOworICAgICAgICAgICAgTUlDX3ZBcHBlbmQoKHVuc2lnbmVkIGNoYXIgKikmZHdNSUNfUHJpb3JpdHksIDQpOwogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJETUEwX3R4XzgwMjE6TUlDIEtFWTogJWxYLCAlbFhcbiIsIGR3TUlDS2V5MCwgZHdNSUNLZXkxKTsKIAogICAgICAgICAgICAgdUxlbmd0aCA9IGNiSGVhZGVyU2l6ZSArIGNiTWFjSGRMZW4gKyB1UGFkZGluZyArIGNiSVZsZW47CiAKICAgICAgICAgICAgIE1JQ192QXBwZW5kKChwYnlUeEJ1ZmZlckFkZHIgKyB1TGVuZ3RoKSwgY2JGcmFtZUJvZHlTaXplKTsKIAotICAgICAgICAgICAgcGR3TUlDX0wgPSAoUERXT1JEKShwYnlUeEJ1ZmZlckFkZHIgKyB1TGVuZ3RoICsgY2JGcmFtZUJvZHlTaXplKTsKLSAgICAgICAgICAgIHBkd01JQ19SID0gKFBEV09SRCkocGJ5VHhCdWZmZXJBZGRyICsgdUxlbmd0aCArIGNiRnJhbWVCb2R5U2l6ZSArIDQpOworICAgICAgICAgICAgcGR3TUlDX0wgPSAodW5zaWduZWQgbG9uZyAqKShwYnlUeEJ1ZmZlckFkZHIgKyB1TGVuZ3RoICsgY2JGcmFtZUJvZHlTaXplKTsKKyAgICAgICAgICAgIHBkd01JQ19SID0gKHVuc2lnbmVkIGxvbmcgKikocGJ5VHhCdWZmZXJBZGRyICsgdUxlbmd0aCArIGNiRnJhbWVCb2R5U2l6ZSArIDQpOwogCiAgICAgICAgICAgICBNSUNfdkdldE1JQyhwZHdNSUNfTCwgcGR3TUlDX1IpOwogICAgICAgICAgICAgTUlDX3ZVbkluaXQoKTsKIAotICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJUeE1JQ0ZhaWwgPT0gVFJVRSkgeworICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJUeE1JQ0ZhaWwgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICpwZHdNSUNfTCA9IDA7CiAgICAgICAgICAgICAgICAgKnBkd01JQ19SID0gMDsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5iVHhNSUNGYWlsID0gRkFMU0U7CisgICAgICAgICAgICAgICAgcERldmljZS0+YlR4TUlDRmFpbCA9IGZhbHNlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPInVMZW5ndGg6ICVkLCAlZFxuIiwgdUxlbmd0aCwgY2JGcmFtZUJvZHlTaXplKTsKQEAgLTMxNjAsOCArMzExOCw4IEBACiAgICAgICAgIH0KIAogCi0gICAgICAgIHNfdkZpbGxUeEtleShwRGV2aWNlLCAoUEJZVEUpKHBUeEJ1ZkhlYWQtPmFkd1R4S2V5KSwgcGJ5SVZIZWFkLCBwVHJhbnNtaXRLZXksCi0gICAgICAgICAgICAgICAgICAgICBwYnlNYWNIZHIsIChXT1JEKWNiRnJhbWVCb2R5U2l6ZSwgKFBCWVRFKXBNSUNIRFIpOworICAgICAgICBzX3ZGaWxsVHhLZXkocERldmljZSwgKHVuc2lnbmVkIGNoYXIgKikocFR4QnVmSGVhZC0+YWR3VHhLZXkpLCBwYnlJVkhlYWQsIHBUcmFuc21pdEtleSwKKyAgICAgICAgICAgICAgICAgICAgIHBieU1hY0hkciwgKHVuc2lnbmVkIHNob3J0KWNiRnJhbWVCb2R5U2l6ZSwgKHVuc2lnbmVkIGNoYXIgKilwTUlDSERSKTsKIAogICAgICAgICBpZiAocERldmljZS0+YkVuYWJsZUhvc3RXRVApIHsKICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uZHdUU0M0N18xNiA9IHBUcmFuc21pdEtleS0+ZHdUU0M0N18xNjsKQEAgLTMxNjksNyArMzEyNyw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAoKHBEZXZpY2UtPmJ5TG9jYWxJRCA8PSBSRVZfSURfVlQzMjUzX0ExKSkgewotICAgICAgICAgICAgc192U1dlbmNyeXB0aW9uKHBEZXZpY2UsIHBUcmFuc21pdEtleSwgcGJ5UGF5bG9hZEhlYWQsIChXT1JEKShjYkZyYW1lQm9keVNpemUgKyBjYk1JQ2xlbikpOworICAgICAgICAgICAgc192U1dlbmNyeXB0aW9uKHBEZXZpY2UsIHBUcmFuc21pdEtleSwgcGJ5UGF5bG9hZEhlYWQsICh1bnNpZ25lZCBzaG9ydCkoY2JGcmFtZUJvZHlTaXplICsgY2JNSUNsZW4pKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzIwOCw3ICszMTY2LDcgQEAKICAgICAgICAgLy8gRGlzYWJsZSBQUwogICAgICAgICBNQUNiUFNXYWtldXAocERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgfQotICAgIHBEZXZpY2UtPmJQV0JpdE9uID0gRkFMU0U7CisgICAgcERldmljZS0+YlBXQml0T24gPSBmYWxzZTsKIAogICAgIHdtYigpOwogICAgIHBGcnN0VEQtPm1fdGQwVEQwLmYxT3duZXIgPSBPV05FRF9CWV9OSUM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3J4dHguaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcnh0eC5oCmluZGV4IGIwMDhmYzIuLmZhODI3YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcnh0eC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcnh0eC5oCkBAIC00MCw2NyArNDAsNDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qCi12b2lkIHZHZW5lcmF0ZU1BQ0hlYWRlcigKLSAgICBQU0RldmljZSBwRGV2aWNlLAotICAgIERXT1JEIGR3VHhCdWZmZXJBZGRyLAotICAgIFBCWVRFIHBieVNrYkRhdGEsCi0gICAgVUlOVCBjYlBhY2tldFNpemUsCi0gICAgQk9PTCBiRE1BMFVzZWQsCi0gICAgUFVJTlQgcGNiSGVhZFNpemUsCi0gICAgUFVJTlQgcGNiQXBwZW5kUGF5bG9hZAotICAgICApOwordm9pZAordkdlbmVyYXRlTUFDSGVhZGVyKFBTRGV2aWNlIHBEZXZpY2UsIHVuc2lnbmVkIGxvbmcgZHdUeEJ1ZmZlckFkZHIsIHVuc2lnbmVkIGNoYXIgKnBieVNrYkRhdGEsCisJdW5zaWduZWQgaW50IGNiUGFja2V0U2l6ZSwgYm9vbCBiRE1BMFVzZWQsIHVuc2lnbmVkIGludCAqcGNiSGVhZFNpemUsCisJdW5zaWduZWQgaW50ICpwY2JBcHBlbmRQYXlsb2FkKTsKIAotdm9pZCB2UHJvY2Vzc1J4TUFDSGVhZGVyICgKLSAgICBQU0RldmljZSBwRGV2aWNlLAotICAgIERXT1JEIGR3UnhCdWZmZXJBZGRyLAotICAgIFVJTlQgY2JQYWNrZXRTaXplLAotICAgIEJPT0wgYklzV0VQLAotICAgIFBVSU5UIHBjYkhlYWRTaXplCi0gICAgKTsKK3ZvaWQKK3ZQcm9jZXNzUnhNQUNIZWFkZXIoUFNEZXZpY2UgcERldmljZSwgdW5zaWduZWQgbG9uZyBkd1J4QnVmZmVyQWRkciwgdW5zaWduZWQgaW50IGNiUGFja2V0U2l6ZSwKKwlib29sIGJJc1dFUCwgdW5zaWduZWQgaW50ICpwY2JIZWFkU2l6ZSk7CiAqLwogCiAKIHZvaWQKIHZHZW5lcmF0ZU1BQ0hlYWRlciAoCiAgICAgUFNEZXZpY2UgICAgICAgICBwRGV2aWNlLAotICAgIFBCWVRFICAgICAgICAgICAgcGJ5QnVmZmVyQWRkciwKLSAgICBXT1JEICAgICAgICAgICAgIHdEdXJhdGlvbiwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCdWZmZXJBZGRyLAorICAgIHVuc2lnbmVkIHNob3J0IHdEdXJhdGlvbiwKICAgICBQU0V0aGVybmV0SGVhZGVyIHBzRXRoSGVhZGVyLAotICAgIEJPT0wgICAgICAgICAgICAgYk5lZWRFbmNyeXB0LAotICAgIFdPUkQgICAgICAgICAgICAgd0ZyYWdUeXBlLAotICAgIFVJTlQgICAgICAgICAgICAgdURNQUlkeCwKLSAgICBVSU5UICAgICAgICAgICAgIHVGcmFnSWR4CisgICAgYm9vbCBiTmVlZEVuY3J5cHQsCisgICAgdW5zaWduZWQgc2hvcnQgd0ZyYWdUeXBlLAorICAgIHVuc2lnbmVkIGludCB1RE1BSWR4LAorICAgIHVuc2lnbmVkIGludCB1RnJhZ0lkeAogICAgICk7CiAKIAotVUlOVAordW5zaWduZWQgaW50CiBjYkdldEZyYWdDb3VudCgKICAgICBQU0RldmljZSAgICAgICAgIHBEZXZpY2UsCiAgICAgUFNLZXlJdGVtICAgICAgICBwVHJhbnNtaXRLZXksCi0gICAgVUlOVCAgICAgICAgICAgICBjYkZyYW1lQm9keVNpemUsCisgICAgdW5zaWduZWQgaW50CWNiRnJhbWVCb2R5U2l6ZSwKICAgICBQU0V0aGVybmV0SGVhZGVyIHBzRXRoSGVhZGVyCiAgICAgKTsKIAogCiB2b2lkCi12R2VuZXJhdGVGSUZPSGVhZGVyICgKLSAgICBQU0RldmljZSAgICAgICAgIHBEZXZpY2UsCi0gICAgQllURSAgICAgICAgICAgICBieVBrdFR5cCwKLSAgICBQQllURSAgICAgICAgICAgIHBieVR4QnVmZmVyQWRkciwKLSAgICBCT09MICAgICAgICAgICAgIGJOZWVkRW5jcnlwdCwKLSAgICBVSU5UICAgICAgICAgICAgIGNiUGF5bG9hZFNpemUsCi0gICAgVUlOVCAgICAgICAgICAgICB1RE1BSWR4LAotICAgIFBTVHhEZXNjICAgICAgICAgcEhlYWRURCwKLSAgICBQU0V0aGVybmV0SGVhZGVyIHBzRXRoSGVhZGVyLAotICAgIFBCWVRFICAgICAgICAgICAgcFBhY2tldCwKLSAgICBQU0tleUl0ZW0gICAgICAgIHBUcmFuc21pdEtleSwKLSAgICBVSU5UICAgICAgICAgICAgIHVOb2RlSW5kZXgsCi0gICAgUFVJTlQgICAgICAgICAgICBwdU1BQ2ZyYWdOdW0sCi0gICAgUFVJTlQgICAgICAgICAgICBwY2JIZWFkZXJTaXplCi0gICAgKTsKK3ZHZW5lcmF0ZUZJRk9IZWFkZXIoUFNEZXZpY2UgcERldmljZSwgdW5zaWduZWQgY2hhciBieVBrdFR5cCwgdW5zaWduZWQgY2hhciAqcGJ5VHhCdWZmZXJBZGRyLAorCWJvb2wgYk5lZWRFbmNyeXB0LCB1bnNpZ25lZCBpbnQJY2JQYXlsb2FkU2l6ZSwgdW5zaWduZWQgaW50IHVETUFJZHgsIFBTVHhEZXNjIHBIZWFkVEQsCisJUFNFdGhlcm5ldEhlYWRlciBwc0V0aEhlYWRlciwgdW5zaWduZWQgY2hhciAqcFBhY2tldCwgUFNLZXlJdGVtIHBUcmFuc21pdEtleSwKKwl1bnNpZ25lZCBpbnQgdU5vZGVJbmRleCwgdW5zaWduZWQgaW50ICpwdU1BQ2ZyYWdOdW0sIHVuc2lnbmVkIGludCAqcGNiSGVhZGVyU2l6ZSk7CiAKIAotdm9pZCB2RE1BMF90eF84MDIxMShQU0RldmljZSAgcERldmljZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgUEJZVEUgcGJNUERVLCBVSU5UIGNiTVBEVUxlbik7Cit2b2lkIHZETUEwX3R4XzgwMjExKFBTRGV2aWNlICBwRGV2aWNlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBjaGFyICpwYk1QRFUsIHVuc2lnbmVkIGludCBjYk1QRFVMZW4pOwogQ01EX1NUQVRVUyBjc01nbXRfeG1pdChQU0RldmljZSBwRGV2aWNlLCBQU1R4TWdtdFBhY2tldCBwUGFja2V0KTsKIENNRF9TVEFUVVMgY3NCZWFjb25feG1pdChQU0RldmljZSBwRGV2aWNlLCBQU1R4TWdtdFBhY2tldCBwUGFja2V0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9zcm9tLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3Nyb20uYwppbmRleCA0MTg1NzVmLi42YTBhMjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3Nyb20uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3Nyb20uYwpAQCAtNzYsMTIgKzc2LDEyIEBACiAgKiBSZXR1cm4gVmFsdWU6IGRhdGEgcmVhZAogICoKICAqLwotQllURSBTUk9NYnlSZWFkRW1iZWRkZWQoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5Q29udG50T2Zmc2V0KQordW5zaWduZWQgY2hhciBTUk9NYnlSZWFkRW1iZWRkZWQodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUNvbnRudE9mZnNldCkKIHsKLSAgICBXT1JEICAgIHdEZWxheSwgd05vQUNLOwotICAgIEJZVEUgICAgYnlXYWl0OwotICAgIEJZVEUgICAgYnlEYXRhOwotICAgIEJZVEUgICAgYnlPcmc7CisgICAgdW5zaWduZWQgc2hvcnQgd0RlbGF5LCB3Tm9BQ0s7CisgICAgdW5zaWduZWQgY2hhciBieVdhaXQ7CisgICAgdW5zaWduZWQgY2hhciBieURhdGE7CisgICAgdW5zaWduZWQgY2hhciBieU9yZzsKIAogICAgIGJ5RGF0YSA9IDB4RkY7CiAgICAgVk5TdkluUG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX0kyTUNGRywgJmJ5T3JnKTsKQEAgLTEyMiwxNSArMTIyLDE1IEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIHN1Y2NlZWRlZDsgRkFMU0UgaWYgZmFpbGVkLgorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2NlZWRlZDsgZmFsc2UgaWYgZmFpbGVkLgogICoKICAqLwotQk9PTCBTUk9NYldyaXRlRW1iZWRkZWQoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5Q29udG50T2Zmc2V0LCBCWVRFIGJ5RGF0YSkKK2Jvb2wgU1JPTWJXcml0ZUVtYmVkZGVkKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlDb250bnRPZmZzZXQsIHVuc2lnbmVkIGNoYXIgYnlEYXRhKQogewotICAgIFdPUkQgICAgd0RlbGF5LCB3Tm9BQ0s7Ci0gICAgQllURSAgICBieVdhaXQ7CisgICAgdW5zaWduZWQgc2hvcnQgd0RlbGF5LCB3Tm9BQ0s7CisgICAgdW5zaWduZWQgY2hhciBieVdhaXQ7CiAKLSAgICBCWVRFICAgIGJ5T3JnOworICAgIHVuc2lnbmVkIGNoYXIgYnlPcmc7CiAKICAgICBWTlN2SW5Qb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfSTJNQ0ZHLCAmYnlPcmcpOwogICAgIC8qIHR1cm4gb2ZmIGhhcmR3YXJlIHJldHJ5IGZvciBnZXR0aW5nIE5BQ0sgKi8KQEAgLTE1NywxMCArMTU3LDEwIEBACiAgICAgfQogICAgIGlmICh3Tm9BQ0sgPT0gV19NQVhfSTJDUkVUUlkpIHsKICAgICAgICAgVk5Tdk91dFBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19JMk1DRkcsIGJ5T3JnKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIFZOU3ZPdXRQb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfSTJNQ0ZHLCBieU9yZyk7Ci0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIApAQCAtMTc4LDEyICsxNzgsMTIgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBTUk9NdlJlZ0JpdHNPbihEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlDb250bnRPZmZzZXQsIEJZVEUgYnlCaXRzKQordm9pZCBTUk9NdlJlZ0JpdHNPbih1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5Q29udG50T2Zmc2V0LCB1bnNpZ25lZCBjaGFyIGJ5Qml0cykKIHsKLSAgICBCWVRFICAgIGJ5T3JnRGF0YTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5T3JnRGF0YTsKIAogICAgIGJ5T3JnRGF0YSA9IFNST01ieVJlYWRFbWJlZGRlZChkd0lvQmFzZSwgYnlDb250bnRPZmZzZXQpOwotICAgIFNST01iV3JpdGVFbWJlZGRlZChkd0lvQmFzZSwgYnlDb250bnRPZmZzZXQsKEJZVEUpKGJ5T3JnRGF0YSB8IGJ5Qml0cykpOworICAgIFNST01iV3JpdGVFbWJlZGRlZChkd0lvQmFzZSwgYnlDb250bnRPZmZzZXQsKHVuc2lnbmVkIGNoYXIpKGJ5T3JnRGF0YSB8IGJ5Qml0cykpOwogfQogCiAKQEAgLTE5OSwxMiArMTk5LDEyIEBACiAgKiAgICAgIG5vbmUKICAqCiAgKi8KLXZvaWQgU1JPTXZSZWdCaXRzT2ZmKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieUNvbnRudE9mZnNldCwgQllURSBieUJpdHMpCit2b2lkIFNST012UmVnQml0c09mZih1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5Q29udG50T2Zmc2V0LCB1bnNpZ25lZCBjaGFyIGJ5Qml0cykKIHsKLSAgICBCWVRFICAgIGJ5T3JnRGF0YTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5T3JnRGF0YTsKIAogICAgIGJ5T3JnRGF0YSA9IFNST01ieVJlYWRFbWJlZGRlZChkd0lvQmFzZSwgYnlDb250bnRPZmZzZXQpOwotICAgIFNST01iV3JpdGVFbWJlZGRlZChkd0lvQmFzZSwgYnlDb250bnRPZmZzZXQsKEJZVEUpKGJ5T3JnRGF0YSAmICh+YnlCaXRzKSkpOworICAgIFNST01iV3JpdGVFbWJlZGRlZChkd0lvQmFzZSwgYnlDb250bnRPZmZzZXQsKHVuc2lnbmVkIGNoYXIpKGJ5T3JnRGF0YSAmICh+YnlCaXRzKSkpOwogfQogCiAKQEAgLTIxOSwxMiArMjE5LDEyIEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIGFsbCB0ZXN0IGJpdHMgb247IG90aGVyd2lzZSBGQUxTRQorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIGFsbCB0ZXN0IGJpdHMgb247IG90aGVyd2lzZSBmYWxzZQogICoKICAqLwotQk9PTCBTUk9NYklzUmVnQml0c09uKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieUNvbnRudE9mZnNldCwgQllURSBieVRlc3RCaXRzKQorYm9vbCBTUk9NYklzUmVnQml0c09uKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlDb250bnRPZmZzZXQsIHVuc2lnbmVkIGNoYXIgYnlUZXN0Qml0cykKIHsKLSAgICBCWVRFICAgIGJ5T3JnRGF0YTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5T3JnRGF0YTsKIAogICAgIGJ5T3JnRGF0YSA9IFNST01ieVJlYWRFbWJlZGRlZChkd0lvQmFzZSwgYnlDb250bnRPZmZzZXQpOwogICAgIHJldHVybiAoYnlPcmdEYXRhICYgYnlUZXN0Qml0cykgPT0gYnlUZXN0Qml0czsKQEAgLTI0MiwxMiArMjQyLDEyIEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIGFsbCB0ZXN0IGJpdHMgb2ZmOyBvdGhlcndpc2UgRkFMU0UKKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBhbGwgdGVzdCBiaXRzIG9mZjsgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIFNST01iSXNSZWdCaXRzT2ZmKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieUNvbnRudE9mZnNldCwgQllURSBieVRlc3RCaXRzKQorYm9vbCBTUk9NYklzUmVnQml0c09mZih1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5Q29udG50T2Zmc2V0LCB1bnNpZ25lZCBjaGFyIGJ5VGVzdEJpdHMpCiB7Ci0gICAgQllURSAgICBieU9yZ0RhdGE7CisgICAgdW5zaWduZWQgY2hhciBieU9yZ0RhdGE7CiAKICAgICBieU9yZ0RhdGEgPSBTUk9NYnlSZWFkRW1iZWRkZWQoZHdJb0Jhc2UsIGJ5Q29udG50T2Zmc2V0KTsKICAgICByZXR1cm4gIShieU9yZ0RhdGEgJiBieVRlc3RCaXRzKTsKQEAgLTI2NiwxMyArMjY2LDEzIEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgU1JPTXZSZWFkQWxsQ29udGVudHMoRFdPUkRfUFRSIGR3SW9CYXNlLCBQQllURSBwYnlFZXByb21SZWdzKQordm9pZCBTUk9NdlJlYWRBbGxDb250ZW50cyh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyICpwYnlFZXByb21SZWdzKQogewogICAgIGludCAgICAgaWk7CiAKICAgICAvKiBpaSA9IFJvbSBBZGRyZXNzICovCiAgICAgZm9yIChpaSA9IDA7IGlpIDwgRUVQX01BWF9DT05URVhUX1NJWkU7IGlpKyspIHsKLSAgICAgICAgKnBieUVlcHJvbVJlZ3MgPSBTUk9NYnlSZWFkRW1iZWRkZWQoZHdJb0Jhc2UsKEJZVEUpIGlpKTsKKyAgICAgICAgKnBieUVlcHJvbVJlZ3MgPSBTUk9NYnlSZWFkRW1iZWRkZWQoZHdJb0Jhc2UsKHVuc2lnbmVkIGNoYXIpIGlpKTsKICAgICAgICAgcGJ5RWVwcm9tUmVncysrOwogICAgIH0KIH0KQEAgLTI5MSwxMyArMjkxLDEzIEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgU1JPTXZXcml0ZUFsbENvbnRlbnRzKERXT1JEX1BUUiBkd0lvQmFzZSwgUEJZVEUgcGJ5RWVwcm9tUmVncykKK3ZvaWQgU1JPTXZXcml0ZUFsbENvbnRlbnRzKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgKnBieUVlcHJvbVJlZ3MpCiB7CiAgICAgaW50ICAgICBpaTsKIAogICAgIC8qIGlpID0gUm9tIEFkZHJlc3MgKi8KICAgICBmb3IgKGlpID0gMDsgaWkgPCBFRVBfTUFYX0NPTlRFWFRfU0laRTsgaWkrKykgewotICAgICAgICBTUk9NYldyaXRlRW1iZWRkZWQoZHdJb0Jhc2UsKEJZVEUpIGlpLCAqcGJ5RWVwcm9tUmVncyk7CisgICAgICAgIFNST01iV3JpdGVFbWJlZGRlZChkd0lvQmFzZSwodW5zaWduZWQgY2hhcikgaWksICpwYnlFZXByb21SZWdzKTsKICAgICAgICAgcGJ5RWVwcm9tUmVncysrOwogICAgIH0KIH0KQEAgLTMxNSw5ICszMTUsOSBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIFNST012UmVhZEV0aGVyQWRkcmVzcyhEV09SRF9QVFIgZHdJb0Jhc2UsIFBCWVRFIHBieUV0aGVyQWRkcmVzcykKK3ZvaWQgU1JPTXZSZWFkRXRoZXJBZGRyZXNzKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgKnBieUV0aGVyQWRkcmVzcykKIHsKLSAgICBCWVRFICAgICBpaTsKKyAgICB1bnNpZ25lZCBjaGFyIGlpOwogCiAgICAgLyogaWkgPSBSb20gQWRkcmVzcyAqLwogICAgIGZvciAoaWkgPSAwOyBpaSA8IEVUSF9BTEVOOyBpaSsrKSB7CkBAIC0zNDAsOSArMzQwLDkgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBTUk9NdldyaXRlRXRoZXJBZGRyZXNzKERXT1JEX1BUUiBkd0lvQmFzZSwgUEJZVEUgcGJ5RXRoZXJBZGRyZXNzKQordm9pZCBTUk9NdldyaXRlRXRoZXJBZGRyZXNzKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgKnBieUV0aGVyQWRkcmVzcykKIHsKLSAgICBCWVRFICAgICBpaTsKKyAgICB1bnNpZ25lZCBjaGFyIGlpOwogCiAgICAgLyogaWkgPSBSb20gQWRkcmVzcyAqLwogICAgIGZvciAoaWkgPSAwOyBpaSA8IEVUSF9BTEVOOyBpaSsrKSB7CkBAIC0zNjQsMTEgKzM2NCwxMSBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIFNST012UmVhZFN1YlN5c1ZlbklkKERXT1JEX1BUUiBkd0lvQmFzZSwgUERXT1JEIHBkd1N1YlN5c1ZlbklkKQordm9pZCBTUk9NdlJlYWRTdWJTeXNWZW5JZCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBsb25nICpwZHdTdWJTeXNWZW5JZCkKIHsKLSAgICBQQllURSAgIHBieURhdGE7CisgICAgdW5zaWduZWQgY2hhciAqcGJ5RGF0YTsKIAotICAgIHBieURhdGEgPSAoUEJZVEUpcGR3U3ViU3lzVmVuSWQ7CisgICAgcGJ5RGF0YSA9ICh1bnNpZ25lZCBjaGFyICopcGR3U3ViU3lzVmVuSWQ7CiAgICAgLyogc3ViIHZlbmRvciAqLwogICAgICpwYnlEYXRhID0gU1JPTWJ5UmVhZEVtYmVkZGVkKGR3SW9CYXNlLCA2KTsKICAgICAqKHBieURhdGErMSkgPSBTUk9NYnlSZWFkRW1iZWRkZWQoZHdJb0Jhc2UsIDcpOwpAQCAtMzg2LDE1ICszODYsMTUgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2Vzczsgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2Vzczsgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIFNST01iQXV0b0xvYWQoRFdPUkRfUFRSIGR3SW9CYXNlKQorYm9vbCBTUk9NYkF1dG9Mb2FkKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UpCiB7Ci0gICAgQllURSAgICBieVdhaXQ7CisgICAgdW5zaWduZWQgY2hhciBieVdhaXQ7CiAgICAgaW50ICAgICBpaTsKIAotICAgIEJZVEUgICAgYnlPcmc7CisgICAgdW5zaWduZWQgY2hhciBieU9yZzsKIAogICAgIFZOU3ZJblBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19JMk1DRkcsICZieU9yZyk7CiAgICAgLyogdHVybiBvbiBoYXJkd2FyZSByZXRyeSAqLwpAQCAtNDEzLDggKzQxMyw4IEBACiAgICAgVk5Tdk91dFBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19JMk1DRkcsIGJ5T3JnKTsKIAogICAgIGlmIChpaSA9PSBFRVBfTUFYX0NPTlRFWFRfU0laRSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIHJldHVybiBUUlVFOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9zcm9tLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3Nyb20uaAppbmRleCBkYmIzZjVlLi40YzI2MWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3Nyb20uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3Nyb20uaApAQCAtOTcsMzQgKzk3LDM0IEBACiAvLyAgICAgIDIwNDggYml0cyA9IDI1NiBieXRlcyA9IDEyOCB3b3JkcwogLy8KIHR5cGVkZWYgc3RydWN0IHRhZ1NTcm9tUmVnIHsKLSAgICBCWVRFICAgIGFieVBBUls2XTsgICAgICAgICAgICAgICAgICAvLyAweDAwIChXT1JEKQorICAgIHVuc2lnbmVkIGNoYXIgYWJ5UEFSWzZdOyAgICAgICAgICAgICAgICAgIC8vIDB4MDAgKHVuc2lnbmVkIHNob3J0KQogCi0gICAgV09SRCAgICB3U1VCX1ZJRDsgICAgICAgICAgICAgICAgICAgLy8gMHgwMyAoV09SRCkKLSAgICBXT1JEICAgIHdTVUJfU0lEOworICAgIHVuc2lnbmVkIHNob3J0IHdTVUJfVklEOyAgICAgICAgICAgICAgICAgICAvLyAweDAzICh1bnNpZ25lZCBzaG9ydCkKKyAgICB1bnNpZ25lZCBzaG9ydCB3U1VCX1NJRDsKIAotICAgIEJZVEUgICAgYnlCQ0ZHMDsgICAgICAgICAgICAgICAgICAgIC8vIDB4MDUgKFdPUkQpCi0gICAgQllURSAgICBieUJDRkcxOworICAgIHVuc2lnbmVkIGNoYXIgYnlCQ0ZHMDsgICAgICAgICAgICAgICAgICAgIC8vIDB4MDUgKHVuc2lnbmVkIHNob3J0KQorICAgIHVuc2lnbmVkIGNoYXIgYnlCQ0ZHMTsKIAotICAgIEJZVEUgICAgYnlGQ1IwOyAgICAgICAgICAgICAgICAgICAgIC8vIDB4MDYgKFdPUkQpCi0gICAgQllURSAgICBieUZDUjE7Ci0gICAgQllURSAgICBieVBNQzA7ICAgICAgICAgICAgICAgICAgICAgLy8gMHgwNyAoV09SRCkKLSAgICBCWVRFICAgIGJ5UE1DMTsKLSAgICBCWVRFICAgIGJ5TUFYTEFUOyAgICAgICAgICAgICAgICAgICAvLyAweDA4IChXT1JEKQotICAgIEJZVEUgICAgYnlNSU5HTlQ7Ci0gICAgQllURSAgICBieUNGRzA7ICAgICAgICAgICAgICAgICAgICAgLy8gMHgwOSAoV09SRCkKLSAgICBCWVRFICAgIGJ5Q0ZHMTsKLSAgICBXT1JEICAgIHdDSVNQVFI7ICAgICAgICAgICAgICAgICAgICAvLyAweDBBIChXT1JEKQotICAgIFdPUkQgICAgd1JzdjA7ICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MEIgKFdPUkQpCi0gICAgV09SRCAgICB3UnN2MTsgICAgICAgICAgICAgICAgICAgICAgLy8gMHgwQyAoV09SRCkKLSAgICBCWVRFICAgIGJ5QkJQQUlSOyAgICAgICAgICAgICAgICAgICAvLyAweDBEIChXT1JEKQotICAgIEJZVEUgICAgYnlSRlRZUEU7Ci0gICAgQllURSAgICBieU1pbkNoYW5uZWw7ICAgICAgICAgICAgICAgLy8gMHgwRSAoV09SRCkKLSAgICBCWVRFICAgIGJ5TWF4Q2hhbm5lbDsKLSAgICBCWVRFICAgIGJ5U2lnbmF0dXJlOyAgICAgICAgICAgICAgICAvLyAweDBGIChXT1JEKQotICAgIEJZVEUgICAgYnlDaGVja1N1bTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RkNSMDsgICAgICAgICAgICAgICAgICAgICAvLyAweDA2ICh1bnNpZ25lZCBzaG9ydCkKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RkNSMTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UE1DMDsgICAgICAgICAgICAgICAgICAgICAvLyAweDA3ICh1bnNpZ25lZCBzaG9ydCkKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UE1DMTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TUFYTEFUOyAgICAgICAgICAgICAgICAgICAvLyAweDA4ICh1bnNpZ25lZCBzaG9ydCkKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TUlOR05UOworICAgIHVuc2lnbmVkIGNoYXIgYnlDRkcwOyAgICAgICAgICAgICAgICAgICAgIC8vIDB4MDkgKHVuc2lnbmVkIHNob3J0KQorICAgIHVuc2lnbmVkIGNoYXIgYnlDRkcxOworICAgIHVuc2lnbmVkIHNob3J0IHdDSVNQVFI7ICAgICAgICAgICAgICAgICAgICAvLyAweDBBICh1bnNpZ25lZCBzaG9ydCkKKyAgICB1bnNpZ25lZCBzaG9ydCB3UnN2MDsgICAgICAgICAgICAgICAgICAgICAgLy8gMHgwQiAodW5zaWduZWQgc2hvcnQpCisgICAgdW5zaWduZWQgc2hvcnQgd1JzdjE7ICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MEMgKHVuc2lnbmVkIHNob3J0KQorICAgIHVuc2lnbmVkIGNoYXIgYnlCQlBBSVI7ICAgICAgICAgICAgICAgICAgIC8vIDB4MEQgKHVuc2lnbmVkIHNob3J0KQorICAgIHVuc2lnbmVkIGNoYXIgYnlSRlRZUEU7CisgICAgdW5zaWduZWQgY2hhciBieU1pbkNoYW5uZWw7ICAgICAgICAgICAgICAgLy8gMHgwRSAodW5zaWduZWQgc2hvcnQpCisgICAgdW5zaWduZWQgY2hhciBieU1heENoYW5uZWw7CisgICAgdW5zaWduZWQgY2hhciBieVNpZ25hdHVyZTsgICAgICAgICAgICAgICAgLy8gMHgwRiAodW5zaWduZWQgc2hvcnQpCisgICAgdW5zaWduZWQgY2hhciBieUNoZWNrU3VtOwogCi0gICAgQllURSAgICBhYnlSZXNlcnZlZDBbOTZdOyAgICAgICAgICAgLy8gMHgxMCAoV09SRCkKLSAgICBCWVRFICAgIGFieUNJU1sxMjhdOyAgICAgICAgICAgICAgICAvLyAweDgwIChXT1JEKQorICAgIHVuc2lnbmVkIGNoYXIgYWJ5UmVzZXJ2ZWQwWzk2XTsgICAgICAgICAgIC8vIDB4MTAgKHVuc2lnbmVkIHNob3J0KQorICAgIHVuc2lnbmVkIGNoYXIgYWJ5Q0lTWzEyOF07ICAgICAgICAgICAgICAgIC8vIDB4ODAgKHVuc2lnbmVkIHNob3J0KQogfSBTU3JvbVJlZywgKlBTU3JvbVJlZzsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTEzNSwyMyArMTM1LDIzIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLUJZVEUgU1JPTWJ5UmVhZEVtYmVkZGVkKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieUNvbnRudE9mZnNldCk7Ci1CT09MIFNST01iV3JpdGVFbWJlZGRlZChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlDb250bnRPZmZzZXQsIEJZVEUgYnlEYXRhKTsKK3Vuc2lnbmVkIGNoYXIgU1JPTWJ5UmVhZEVtYmVkZGVkKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlDb250bnRPZmZzZXQpOworYm9vbCBTUk9NYldyaXRlRW1iZWRkZWQodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUNvbnRudE9mZnNldCwgdW5zaWduZWQgY2hhciBieURhdGEpOwogCi12b2lkIFNST012UmVnQml0c09uKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieUNvbnRudE9mZnNldCwgQllURSBieUJpdHMpOwotdm9pZCBTUk9NdlJlZ0JpdHNPZmYoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5Q29udG50T2Zmc2V0LCBCWVRFIGJ5Qml0cyk7Cit2b2lkIFNST012UmVnQml0c09uKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlDb250bnRPZmZzZXQsIHVuc2lnbmVkIGNoYXIgYnlCaXRzKTsKK3ZvaWQgU1JPTXZSZWdCaXRzT2ZmKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlDb250bnRPZmZzZXQsIHVuc2lnbmVkIGNoYXIgYnlCaXRzKTsKIAotQk9PTCBTUk9NYklzUmVnQml0c09uKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieUNvbnRudE9mZnNldCwgQllURSBieVRlc3RCaXRzKTsKLUJPT0wgU1JPTWJJc1JlZ0JpdHNPZmYoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5Q29udG50T2Zmc2V0LCBCWVRFIGJ5VGVzdEJpdHMpOworYm9vbCBTUk9NYklzUmVnQml0c09uKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlDb250bnRPZmZzZXQsIHVuc2lnbmVkIGNoYXIgYnlUZXN0Qml0cyk7Citib29sIFNST01iSXNSZWdCaXRzT2ZmKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlDb250bnRPZmZzZXQsIHVuc2lnbmVkIGNoYXIgYnlUZXN0Qml0cyk7CiAKLXZvaWQgU1JPTXZSZWFkQWxsQ29udGVudHMoRFdPUkRfUFRSIGR3SW9CYXNlLCBQQllURSBwYnlFZXByb21SZWdzKTsKLXZvaWQgU1JPTXZXcml0ZUFsbENvbnRlbnRzKERXT1JEX1BUUiBkd0lvQmFzZSwgUEJZVEUgcGJ5RWVwcm9tUmVncyk7Cit2b2lkIFNST012UmVhZEFsbENvbnRlbnRzKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgKnBieUVlcHJvbVJlZ3MpOwordm9pZCBTUk9NdldyaXRlQWxsQ29udGVudHModW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciAqcGJ5RWVwcm9tUmVncyk7CiAKLXZvaWQgU1JPTXZSZWFkRXRoZXJBZGRyZXNzKERXT1JEX1BUUiBkd0lvQmFzZSwgUEJZVEUgcGJ5RXRoZXJBZGRyZXNzKTsKLXZvaWQgU1JPTXZXcml0ZUV0aGVyQWRkcmVzcyhEV09SRF9QVFIgZHdJb0Jhc2UsIFBCWVRFIHBieUV0aGVyQWRkcmVzcyk7Cit2b2lkIFNST012UmVhZEV0aGVyQWRkcmVzcyh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyICpwYnlFdGhlckFkZHJlc3MpOwordm9pZCBTUk9NdldyaXRlRXRoZXJBZGRyZXNzKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgKnBieUV0aGVyQWRkcmVzcyk7CiAKLXZvaWQgU1JPTXZSZWFkU3ViU3lzVmVuSWQoRFdPUkRfUFRSIGR3SW9CYXNlLCBQRFdPUkQgcGR3U3ViU3lzVmVuSWQpOwordm9pZCBTUk9NdlJlYWRTdWJTeXNWZW5JZCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBsb25nICpwZHdTdWJTeXNWZW5JZCk7CiAKLUJPT0wgU1JPTWJBdXRvTG9hZCAoRFdPUkRfUFRSIGR3SW9CYXNlKTsKK2Jvb2wgU1JPTWJBdXRvTG9hZCAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSk7CiAKICNlbmRpZiAvLyBfX0VFUFJPTV9IX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdGNyYy5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS90Y3JjLmMKaW5kZXggNWYwYzc0Ny4uZjljMjhiZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdGNyYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdGNyYy5jCkBAIC00Miw3ICs0Miw3IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIFZhcmlhYmxlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvLyAzMi1iaXQgQ1JDIHRhYmxlCi1zdGF0aWMgY29uc3QgRFdPUkQgc19hZHdDcmMzMlRhYmxlWzI1Nl0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBzX2Fkd0NyYzMyVGFibGVbMjU2XSA9IHsKICAgICAweDAwMDAwMDAwTCwgMHg3NzA3MzA5NkwsIDB4RUUwRTYxMkNMLCAweDk5MDk1MUJBTCwKICAgICAweDA3NkRDNDE5TCwgMHg3MDZBRjQ4RkwsIDB4RTk2M0E1MzVMLCAweDlFNjQ5NUEzTCwKICAgICAweDBFREI4ODMyTCwgMHg3OURDQjhBNEwsIDB4RTBENUU5MUVMLCAweDk3RDJEOTg4TCwKQEAgLTEzMiwxMyArMTMyLDEzIEBACiAgKiBSZXR1cm4gVmFsdWU6IENSQy0zMgogICoKIC0qLwotRFdPUkQgQ1JDZHdDcmMzMiAoUEJZVEUgcGJ5RGF0YSwgVUlOVCBjYkJ5dGUsIERXT1JEIGR3Q3JjU2VlZCkKK3Vuc2lnbmVkIGxvbmcgQ1JDZHdDcmMzMiAodW5zaWduZWQgY2hhciAqcGJ5RGF0YSwgdW5zaWduZWQgaW50IGNiQnl0ZSwgdW5zaWduZWQgbG9uZyBkd0NyY1NlZWQpCiB7Ci0gICAgRFdPUkQgZHdDcmM7CisgICAgdW5zaWduZWQgbG9uZyBkd0NyYzsKIAogICAgIGR3Q3JjID0gZHdDcmNTZWVkOwogICAgIHdoaWxlIChjYkJ5dGUtLSkgewotICAgICAgICBkd0NyYyA9IHNfYWR3Q3JjMzJUYWJsZVsoQllURSkoKGR3Q3JjIF4gKCpwYnlEYXRhKSkgJiAweEZGKV0gXiAoZHdDcmMgPj4gOCk7CisgICAgICAgIGR3Q3JjID0gc19hZHdDcmMzMlRhYmxlWyh1bnNpZ25lZCBjaGFyKSgoZHdDcmMgXiAoKnBieURhdGEpKSAmIDB4RkYpXSBeIChkd0NyYyA+PiA4KTsKICAgICAgICAgcGJ5RGF0YSsrOwogICAgIH0KIApAQCAtMTY0LDcgKzE2NCw3IEBACiAgKiBSZXR1cm4gVmFsdWU6IENSQy0zMgogICoKIC0qLwotRFdPUkQgQ1JDZHdHZXRDcmMzMiAoUEJZVEUgcGJ5RGF0YSwgVUlOVCBjYkJ5dGUpCit1bnNpZ25lZCBsb25nIENSQ2R3R2V0Q3JjMzIgKHVuc2lnbmVkIGNoYXIgKnBieURhdGEsIHVuc2lnbmVkIGludCBjYkJ5dGUpCiB7CiAgICAgcmV0dXJuIH5DUkNkd0NyYzMyKHBieURhdGEsIGNiQnl0ZSwgMHhGRkZGRkZGRkwpOwogfQpAQCAtMTkwLDcgKzE5MCw3IEBACiAgKiBSZXR1cm4gVmFsdWU6IENSQy0zMgogICoKIC0qLwotRFdPUkQgQ1JDZHdHZXRDcmMzMkV4KFBCWVRFIHBieURhdGEsIFVJTlQgY2JCeXRlLCBEV09SRCBkd1ByZUNSQykKK3Vuc2lnbmVkIGxvbmcgQ1JDZHdHZXRDcmMzMkV4KHVuc2lnbmVkIGNoYXIgKnBieURhdGEsIHVuc2lnbmVkIGludCBjYkJ5dGUsIHVuc2lnbmVkIGxvbmcgZHdQcmVDUkMpCiB7CiAgICAgcmV0dXJuIENSQ2R3Q3JjMzIocGJ5RGF0YSwgY2JCeXRlLCBkd1ByZUNSQyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3RjcmMuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdGNyYy5oCmluZGV4IDVmYWE0OGIuLmQwNDQ5ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdGNyYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdGNyYy5oCkBAIC00Myw5ICs0Myw5IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLURXT1JEIENSQ2R3Q3JjMzIoUEJZVEUgcGJ5RGF0YSwgVUlOVCBjYkJ5dGUsIERXT1JEIGR3Q3JjU2VlZCk7Ci1EV09SRCBDUkNkd0dldENyYzMyKFBCWVRFIHBieURhdGEsIFVJTlQgY2JCeXRlKTsKLURXT1JEIENSQ2R3R2V0Q3JjMzJFeChQQllURSBwYnlEYXRhLCBVSU5UIGNiQnl0ZSwgRFdPUkQgZHdQcmVDUkMpOwordW5zaWduZWQgbG9uZyBDUkNkd0NyYzMyKHVuc2lnbmVkIGNoYXIgKnBieURhdGEsIHVuc2lnbmVkIGludCBjYkJ5dGUsIHVuc2lnbmVkIGxvbmcgZHdDcmNTZWVkKTsKK3Vuc2lnbmVkIGxvbmcgQ1JDZHdHZXRDcmMzMih1bnNpZ25lZCBjaGFyICpwYnlEYXRhLCB1bnNpZ25lZCBpbnQgY2JCeXRlKTsKK3Vuc2lnbmVkIGxvbmcgQ1JDZHdHZXRDcmMzMkV4KHVuc2lnbmVkIGNoYXIgKnBieURhdGEsIHVuc2lnbmVkIGludCBjYkJ5dGUsIHVuc2lnbmVkIGxvbmcgZHdQcmVDUkMpOwogCiAjZW5kaWYgLy8gX19UQ1JDX0hfXwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3RldGhlci5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS90ZXRoZXIuYwppbmRleCBkOGJhNjczLi4xY2Y4NTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3RldGhlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdGV0aGVyLmMKQEAgLTYxLDE0ICs2MSwxNCBAQAogICogUmV0dXJuIFZhbHVlOiBIYXNoIHZhbHVlCiAgKgogICovCi1CWVRFIEVUSGJ5R2V0SGFzaEluZGV4QnlDcmMzMiAoUEJZVEUgcGJ5TXVsdGlBZGRyKQordW5zaWduZWQgY2hhciBFVEhieUdldEhhc2hJbmRleEJ5Q3JjMzIgKHVuc2lnbmVkIGNoYXIgKnBieU11bHRpQWRkcikKIHsKICAgICBpbnQgICAgIGlpOwotICAgIEJZVEUgICAgYnlUbXBIYXNoOwotICAgIEJZVEUgICAgYnlIYXNoID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VG1wSGFzaDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5SGFzaCA9IDA7CiAKICAgICAvLyBnZXQgdGhlIGxlYXN0IDYtYml0cyBmcm9tIENSQyBnZW5lcmF0b3IKLSAgICBieVRtcEhhc2ggPSAoQllURSkoQ1JDZHdDcmMzMihwYnlNdWx0aUFkZHIsIEVUSF9BTEVOLAorICAgIGJ5VG1wSGFzaCA9ICh1bnNpZ25lZCBjaGFyKShDUkNkd0NyYzMyKHBieU11bHRpQWRkciwgRVRIX0FMRU4sCiAgICAgICAgICAgICAweEZGRkZGRkZGTCkgJiAweDNGKTsKICAgICAvLyByZXZlcnNlIG1vc3QgYml0IHRvIGxlYXN0IGJpdAogICAgIGZvciAoaWkgPSAwOyBpaSA8IChzaXplb2YoYnlUbXBIYXNoKSAqIDgpOyBpaSsrKSB7CkBAIC05MywxNyArOTMsMTcgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgb2s7IEZBTFNFIGlmIGVycm9yLgorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIG9rOyBmYWxzZSBpZiBlcnJvci4KICAqCiAgKi8KLUJPT0wgRVRIYklzQnVmZmVyQ3JjMzJPayAoUEJZVEUgcGJ5QnVmZmVyLCBVSU5UIGNiRnJhbWVMZW5ndGgpCitib29sIEVUSGJJc0J1ZmZlckNyYzMyT2sgKHVuc2lnbmVkIGNoYXIgKnBieUJ1ZmZlciwgdW5zaWduZWQgaW50IGNiRnJhbWVMZW5ndGgpCiB7Ci0gICAgRFdPUkQgZHdDUkM7CisgICAgdW5zaWduZWQgbG9uZyBkd0NSQzsKIAogICAgIGR3Q1JDID0gQ1JDZHdHZXRDcmMzMihwYnlCdWZmZXIsIGNiRnJhbWVMZW5ndGggLSA0KTsKLSAgICBpZiAoY3B1X3RvX2xlMzIoKigoUERXT1JEKShwYnlCdWZmZXIgKyBjYkZyYW1lTGVuZ3RoIC0gNCkpKSAhPSBkd0NSQykgewotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgaWYgKGNwdV90b19sZTMyKCooKHVuc2lnbmVkIGxvbmcgKikocGJ5QnVmZmVyICsgY2JGcmFtZUxlbmd0aCAtIDQpKSkgIT0gZHdDUkMpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS90ZXRoZXIuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdGV0aGVyLmgKaW5kZXggM2M5YWNkNy4uNzg3ZDg4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS90ZXRoZXIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3RldGhlci5oCkBAIC0yOSw3ICsyOSw3IEBACiAjaWZuZGVmIF9fVEVUSEVSX0hfXwogI2RlZmluZSBfX1RFVEhFUl9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlICJ0dHlwZS5oIgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IERlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMzksMTIgKzM5LDYgQEAKICNkZWZpbmUgVV9FVEhFUl9BRERSX1NUUl9MRU4gKEVUSF9BTEVOICogMiArIDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXRoZXJuZXQgYWRkcmVzcyBzdHJpbmcgbGVuZ3RoCiAKLSNkZWZpbmUgTUlOX0RBVEFfTEVOICAgICAgICA0NiAgICAgICAgICAvLyBtaW4gZGF0YSBsZW5ndGgKLQotI2RlZmluZSBNSU5fUEFDS0VUX0xFTiAgICAgIChNSU5fREFUQV9MRU4gKyBFVEhfSExFTikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA2MAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1pbiB0b3RhbCBwYWNrZXQgbGVuZ3RoICh0eCkKLQogI2RlZmluZSBNQVhfTE9PS0FIRUFEX1NJWkUgIEVUSF9GUkFNRV9MRU4KIAogI2RlZmluZSBVX01VTFRJX0FERFJfTEVOICAgIDggICAgICAgICAgIC8vIG11bHRpY2FzdCBhZGRyZXNzIGxlbmd0aApAQCAtMTYwLDkgKzE1NCw5IEBACiAvLyBFdGhlcm5ldCBwYWNrZXQKIC8vCiB0eXBlZGVmIHN0cnVjdCB0YWdTRXRoZXJuZXRIZWFkZXIgewotICAgIEJZVEUgICAgYWJ5RHN0QWRkcltFVEhfQUxFTl07Ci0gICAgQllURSAgICBhYnlTcmNBZGRyW0VUSF9BTEVOXTsKLSAgICBXT1JEICAgIHdUeXBlOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5RHN0QWRkcltFVEhfQUxFTl07CisgICAgdW5zaWduZWQgY2hhciBhYnlTcmNBZGRyW0VUSF9BTEVOXTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3VHlwZTsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTRXRoZXJuZXRIZWFkZXIsICpQU0V0aGVybmV0SGVhZGVyOwogCkBAIC0xNzEsOSArMTY1LDkgQEAKIC8vIDgwMl8zIHBhY2tldAogLy8KIHR5cGVkZWYgc3RydWN0IHRhZ1M4MDJfM0hlYWRlciB7Ci0gICAgQllURSAgICBhYnlEc3RBZGRyW0VUSF9BTEVOXTsKLSAgICBCWVRFICAgIGFieVNyY0FkZHJbRVRIX0FMRU5dOwotICAgIFdPUkQgICAgd0xlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGFieURzdEFkZHJbRVRIX0FMRU5dOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5U3JjQWRkcltFVEhfQUxFTl07CisgICAgdW5zaWduZWQgc2hvcnQgd0xlbjsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTODAyXzNIZWFkZXIsICpQUzgwMl8zSGVhZGVyOwogCkBAIC0xODEsMzcgKzE3NSwxNyBAQAogLy8gODAyXzExIHBhY2tldAogLy8KIHR5cGVkZWYgc3RydWN0IHRhZ1M4MDJfMTFIZWFkZXIgewotICAgIFdPUkQgICAgd0ZyYW1lQ3RsOwotICAgIFdPUkQgICAgd0R1cmF0aW9uSUQ7Ci0gICAgQllURSAgICBhYnlBZGRyMVtFVEhfQUxFTl07Ci0gICAgQllURSAgICBhYnlBZGRyMltFVEhfQUxFTl07Ci0gICAgQllURSAgICBhYnlBZGRyM1tFVEhfQUxFTl07Ci0gICAgV09SRCAgICB3U2VxQ3RsOwotICAgIEJZVEUgICAgYWJ5QWRkcjRbRVRIX0FMRU5dOworICAgIHVuc2lnbmVkIHNob3J0IHdGcmFtZUN0bDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RHVyYXRpb25JRDsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUFkZHIxW0VUSF9BTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUFkZHIyW0VUSF9BTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUFkZHIzW0VUSF9BTEVOXTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3U2VxQ3RsOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5QWRkcjRbRVRIX0FMRU5dOwogfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFM4MDJfMTFIZWFkZXIsICpQUzgwMl8xMUhlYWRlcjsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8vIEZyYW1lIHR5cGUgbWFjcm8KLQotI2RlZmluZSBJU19NVUxUSUNBU1RfQUREUkVTUyhwYnlFdGhlckFkZHIpICAgICAgICAgIFwKLSAgICAoKCooUEJZVEUpKHBieUV0aGVyQWRkcikgJiAweDAxKSA9PSAxKQotCi0jZGVmaW5lIElTX0JST0FEQ0FTVF9BRERSRVNTKHBieUV0aGVyQWRkcikgKCAgICAgICAgXAotICAgICgqKFBEV09SRCkocGJ5RXRoZXJBZGRyKSA9PSAweEZGRkZGRkZGTCkgJiYgICAgIFwKLSAgICAoKihQV09SRCkoKFBCWVRFKShwYnlFdGhlckFkZHIpICsgNCkgPT0gMHhGRkZGKSBcCi0pCi0KLSNkZWZpbmUgSVNfTlVMTF9BRERSRVNTKHBieUV0aGVyQWRkcikgKCAgICAgICAgICAgICBcCi0gICAgKCooUERXT1JEKShwYnlFdGhlckFkZHIpID09IDBMKSAmJiAgICAgICAgICAgICAgXAotICAgICgqKFBXT1JEKSgoUEJZVEUpKHBieUV0aGVyQWRkcikgKyA0KSA9PSAwKSAgICAgIFwKLSkKLQotI2RlZmluZSBJU19FVEhfQUREUkVTU19FUVVBTChwYnlBZGRyMSwgcGJ5QWRkcjIpICggIFwKLSAgICAoKihQRFdPUkQpKHBieUFkZHIxKSA9PSAqKFBEV09SRCkocGJ5QWRkcjIpKSAmJiBcCi0gICAgKCooUFdPUkQpKChQQllURSkocGJ5QWRkcjEpICsgNCkgPT0gICAgICAgICAgICAgXAotICAgICooUFdPUkQpKChQQllURSkocGJ5QWRkcjIpICsgNCkpICAgICAgICAgICAgICAgIFwKLSkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBDbGFzc2VzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMjE5LDkgKzE5Myw5IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLUJZVEUgRVRIYnlHZXRIYXNoSW5kZXhCeUNyYzMyKFBCWVRFIHBieU11bHRpQWRkcik7Ci0vL0JZVEUgRVRIYnlHZXRIYXNoSW5kZXhCeUNyYyhQQllURSBwYnlNdWx0aUFkZHIpOwotQk9PTCBFVEhiSXNCdWZmZXJDcmMzMk9rKFBCWVRFIHBieUJ1ZmZlciwgVUlOVCBjYkZyYW1lTGVuZ3RoKTsKK3Vuc2lnbmVkIGNoYXIgRVRIYnlHZXRIYXNoSW5kZXhCeUNyYzMyKHVuc2lnbmVkIGNoYXIgKnBieU11bHRpQWRkcik7CisvL3Vuc2lnbmVkIGNoYXIgRVRIYnlHZXRIYXNoSW5kZXhCeUNyYyh1bnNpZ25lZCBjaGFyICpwYnlNdWx0aUFkZHIpOworYm9vbCBFVEhiSXNCdWZmZXJDcmMzMk9rKHVuc2lnbmVkIGNoYXIgKnBieUJ1ZmZlciwgdW5zaWduZWQgaW50IGNiRnJhbWVMZW5ndGgpOwogCiAjZW5kaWYgLy8gX19URVRIRVJfSF9fCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdGtpcC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS90a2lwLmMKaW5kZXggZjgzYWY1OS4uZWQzZWFjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS90a2lwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS90a2lwLmMKQEAgLTU1LDcgKzU1LDcgQEAKIC8qIFRoZSAybmQgdGFibGUgaXMgdGhlIHNhbWUgYXMgdGhlIDFzdCBidXQgd2l0aCB0aGUgdXBwZXIgYW5kIGxvd2VyICAgKi8KIC8qIGJ5dGVzIHN3YXBwZWQuIFRvIGFsbG93IGFuIGVuZGlhbiB0b2xlcmFudCBpbXBsZW1lbnRhdGlvbiwgdGhlIGJ5dGUgKi8KIC8qIGhhbHZlcyBoYXZlIGJlZW4gZXhwcmVzc2VkIGluZGVwZW5kZW50bHkgaGVyZS4gICAgICAgICAgICAgICAgICAgICAgKi8KLWNvbnN0IEJZVEUgVEtJUF9TYm94X0xvd2VyWzI1Nl0gPSB7Citjb25zdCB1bnNpZ25lZCBjaGFyIFRLSVBfU2JveF9Mb3dlclsyNTZdID0gewogICAgIDB4QTUsMHg4NCwweDk5LDB4OEQsMHgwRCwweEJELDB4QjEsMHg1NCwKICAgICAweDUwLDB4MDMsMHhBOSwweDdELDB4MTksMHg2MiwweEU2LDB4OUEsCiAgICAgMHg0NSwweDlELDB4NDAsMHg4NywweDE1LDB4RUIsMHhDOSwweDBCLApAQCAtOTAsNyArOTAsNyBAQAogICAgIDB4QzMsMHhCMCwweDc3LDB4MTEsMHhDQiwweEZDLDB4RDYsMHgzQQogfTsKIAotY29uc3QgQllURSBUS0lQX1Nib3hfVXBwZXJbMjU2XSA9IHsKK2NvbnN0IHVuc2lnbmVkIGNoYXIgVEtJUF9TYm94X1VwcGVyWzI1Nl0gPSB7CiAgICAgMHhDNiwweEY4LDB4RUUsMHhGNiwweEZGLDB4RDYsMHhERSwweDkxLAogICAgIDB4NjAsMHgwMiwweENFLDB4NTYsMHhFNywweEI1LDB4NEQsMHhFQywKICAgICAweDhGLDB4MUYsMHg4OSwweEZBLDB4RUYsMHhCMiwweDhFLDB4RkIsCkBAIC0xODQsMTEgKzE4NCwxMSBAQAogICoKICAqLwogdm9pZCBUS0lQdk1peEtleSgKLSAgICBQQllURSAgIHBieVRLZXksCi0gICAgUEJZVEUgICBwYnlUQSwKLSAgICBXT1JEICAgIHdUU0MxNV8wLAotICAgIERXT1JEICAgZHdUU0M0N18xNiwKLSAgICBQQllURSAgIHBieVJDNEtleQorICAgIHVuc2lnbmVkIGNoYXIgKnBieVRLZXksCisgICAgdW5zaWduZWQgY2hhciAqcGJ5VEEsCisgICAgdW5zaWduZWQgc2hvcnQgd1RTQzE1XzAsCisgICAgdW5zaWduZWQgbG9uZyBkd1RTQzQ3XzE2LAorICAgIHVuc2lnbmVkIGNoYXIgKnBieVJDNEtleQogICAgICkKIHsKICAgICB1bnNpZ25lZCBpbnQgcDFrWzVdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS90a2lwLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3RraXAuaAppbmRleCAzZGZhN2Y1Li5lYjU5NTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3RraXAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3RraXAuaApAQCAtNDcsMTEgKzQ3LDExIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiB2b2lkIFRLSVB2TWl4S2V5KAotICAgIFBCWVRFICAgcGJ5VEtleSwKLSAgICBQQllURSAgIHBieVRBLAotICAgIFdPUkQgICAgd1RTQzE1XzAsCi0gICAgRFdPUkQgICBkd1RTQzQ3XzE2LAotICAgIFBCWVRFICAgcGJ5UkM0S2V5CisgICAgdW5zaWduZWQgY2hhciAqcGJ5VEtleSwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlUQSwKKyAgICB1bnNpZ25lZCBzaG9ydCB3VFNDMTVfMCwKKyAgICB1bnNpZ25lZCBsb25nIGR3VFNDNDdfMTYsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5UkM0S2V5CiAgICAgKTsKIAogI2VuZGlmIC8vIF9fVEtJUF9IX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdG1hY3JvLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3RtYWNyby5oCmluZGV4IGU5NmMxNDAuLmU4YjE3N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdG1hY3JvLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS90bWFjcm8uaApAQCAtMzQsMjcgKzM0LDI3IEBACiAvKioqKioqIENvbW1vbiBoZWxwZXIgbWFjcm9zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaWYgIWRlZmluZWQoTE9CWVRFKQotI2RlZmluZSBMT0JZVEUodykgICAgICAgICAgICgoQllURSkodykpCisjZGVmaW5lIExPQllURSh3KSAgICAgICAgICAgKCh1bnNpZ25lZCBjaGFyKSh3KSkKICNlbmRpZgogI2lmICFkZWZpbmVkKEhJQllURSkKLSNkZWZpbmUgSElCWVRFKHcpICAgICAgICAgICAoKEJZVEUpKCgoV09SRCkodykgPj4gOCkgJiAweEZGKSkKKyNkZWZpbmUgSElCWVRFKHcpICAgICAgICAgICAoKHVuc2lnbmVkIGNoYXIpKCgodW5zaWduZWQgc2hvcnQpKHcpID4+IDgpICYgMHhGRikpCiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKExPV09SRCkKLSNkZWZpbmUgTE9XT1JEKGQpICAgICAgICAgICAoKFdPUkQpKGQpKQorI2RlZmluZSBMT1dPUkQoZCkgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKGQpKQogI2VuZGlmCiAjaWYgIWRlZmluZWQoSElXT1JEKQotI2RlZmluZSBISVdPUkQoZCkgICAgICAgICAgICgoV09SRCkoKCgoRFdPUkQpKGQpKSA+PiAxNikgJiAweEZGRkYpKQorI2RlZmluZSBISVdPUkQoZCkgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKCgoKHVuc2lnbmVkIGxvbmcpKGQpKSA+PiAxNikgJiAweEZGRkYpKQogI2VuZGlmCiAKICNkZWZpbmUgTE9EV09SRChxKSAgICAgICAgICAoKHEpLnUuZHdMb3dEd29yZCkKICNkZWZpbmUgSElEV09SRChxKSAgICAgICAgICAoKHEpLnUuZHdIaWdoRHdvcmQpCiAKICNpZiAhZGVmaW5lZChNQUtFV09SRCkKLSNkZWZpbmUgTUFLRVdPUkQobGIsIGhiKSAgICAoKFdPUkQpKCgoQllURSkobGIpKSB8ICgoKFdPUkQpKChCWVRFKShoYikpKSA8PCA4KSkpCisjZGVmaW5lIE1BS0VXT1JEKGxiLCBoYikgICAgKCh1bnNpZ25lZCBzaG9ydCkoKCh1bnNpZ25lZCBjaGFyKShsYikpIHwgKCgodW5zaWduZWQgc2hvcnQpKCh1bnNpZ25lZCBjaGFyKShoYikpKSA8PCA4KSkpCiAjZW5kaWYKICNpZiAhZGVmaW5lZChNQUtFRFdPUkQpCi0jZGVmaW5lIE1BS0VEV09SRChsdywgaHcpICAgKChEV09SRCkoKChXT1JEKShsdykpIHwgKCgoRFdPUkQpKChXT1JEKShodykpKSA8PCAxNikpKQorI2RlZmluZSBNQUtFRFdPUkQobHcsIGh3KSAgICgodW5zaWduZWQgbG9uZykoKCh1bnNpZ25lZCBzaG9ydCkobHcpKSB8ICgoKHVuc2lnbmVkIGxvbmcpKCh1bnNpZ25lZCBzaG9ydCkoaHcpKSkgPDwgMTYpKSkKICNlbmRpZgogCiAjZW5kaWYgLy8gX19UTUFDUk9fSF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3R0eXBlLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3R0eXBlLmgKaW5kZXggMjkyMTA4My4uMzdjOGZiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS90dHlwZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdHR5cGUuaApAQCAtMzMsMjMgKzMzLDEwIEBACiAKIC8qKioqKioqIENvbW1vbiBkZWZpbml0aW9ucyBhbmQgdHlwZWRlZnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZm5kZWYgT1VUCi0jZGVmaW5lIE9VVAotI2VuZGlmCi0KICNpZm5kZWYgVHhJblNsZWVwCiAjZGVmaW5lIFR4SW5TbGVlcAogI2VuZGlmCiAKLXR5cGVkZWYgaW50ICAgICAgICAgICAgIEJPT0w7Ci0KLSNpZiAhZGVmaW5lZChUUlVFKQotI2RlZmluZSBUUlVFICAgICAgICAgICAgMQotI2VuZGlmCi0jaWYgIWRlZmluZWQoRkFMU0UpCi0jZGVmaW5lIEZBTFNFICAgICAgICAgICAwCi0jZW5kaWYKLQogLy8yMDA3LTA4MDktMDE8QWRkPmJ5IE1pa2VMaXUKICNpZm5kZWYgIHVwZGF0ZV9Cc3NMaXN0CiAjZGVmaW5lIHVwZGF0ZV9Cc3NMaXN0CkBAIC02NSwxMCArNTIsNiBAQAogI2RlZmluZSBDYWxjdV9MaW5rUXVhbAogI2VuZGlmCiAKLSNpZm5kZWYgQ2FsY3VfTGlua1F1YWwKLSNkZWZpbmUgQ2FsY3VfTGlua1F1YWwKLSNlbmRpZgotCiAvKioqKioqIFNpbXBsZSB0eXBlZGVmcyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBUaGVzZSBsaW5lcyBhc3N1bWUgdGhhdCB5b3VyIGNvbXBpbGVyJ3MgbG9uZ3MgYXJlIDMyIGJpdHMgYW5kCkBAIC03NiwzNyArNTksMTMgQEAKICAqIGJ1dCBpdCBkb2Vzbid0IG1hdHRlciBpZiB0aGV5J3JlIHNpZ25lZCBvciB1bnNpZ25lZC4KICAqLwogCi10eXBlZGVmIHNpZ25lZCBjaGFyICAgICAgICAgICAgIEk4OyAgICAgLyogOC1iaXQgc2lnbmVkIGludGVnZXIgKi8KLQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgICAgICAgICBVODsgICAgIC8qIDgtYml0IHVuc2lnbmVkIGludGVnZXIgKi8KLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgICAgICAgICAgVTE2OyAgICAvKiAxNi1iaXQgdW5zaWduZWQgaW50ZWdlciAqLwotdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgICAgICBVMzI7ICAgIC8qIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyICovCi0KLQotdHlwZWRlZiBjaGFyICAgICAgICAgICAgQ0hBUjsKLXR5cGVkZWYgc2lnbmVkIHNob3J0ICAgIFNIT1JUOwotdHlwZWRlZiBzaWduZWQgaW50ICAgICAgSU5UOwotdHlwZWRlZiBzaWduZWQgbG9uZyAgICAgTE9ORzsKLQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgVUNIQVI7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0ICBVU0hPUlQ7Ci10eXBlZGVmIHVuc2lnbmVkIGludCAgICBVSU5UOwotdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgVUxPTkc7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZwlVTE9OR0xPTkc7IC8vNjQgYml0Ci0KLQotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgICBCWVRFOyAgICAgICAgICAgLy8gIDgtYml0Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0ICBXT1JEOyAgICAgICAgICAgLy8gMTYtYml0Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgICBEV09SRDsgICAgICAgICAgLy8gMzItYml0Ci0KIC8vIFFXT1JEIGlzIGZvciB0aG9zZSBzaXR1YXRpb24gdGhhdCB3ZSB3YW50CiAvLyBhbiA4LWJ5dGUtYWxpZ25lZCA4IGJ5dGUgbG9uZyBzdHJ1Y3R1cmUKIC8vIHdoaWNoIGlzIE5PVCByZWFsbHkgYSBmbG9hdGluZyBwb2ludCBudW1iZXIuCiB0eXBlZGVmIHVuaW9uIHRhZ1VRdWFkV29yZCB7CiAgICAgc3RydWN0IHsKLSAgICAgICAgRFdPUkQgICBkd0xvd0R3b3JkOwotICAgICAgICBEV09SRCAgIGR3SGlnaER3b3JkOworICAgICAgICB1bnNpZ25lZCBpbnQgZHdMb3dEd29yZDsKKyAgICAgICAgdW5zaWduZWQgaW50IGR3SGlnaER3b3JkOwogICAgIH0gdTsKICAgICBkb3VibGUgICAgICBEb05vdFVzZVRoaXNGaWVsZDsKIH0gVVF1YWRXb3JkOwpAQCAtMTE0LDE4ICs3Myw2IEBACiAKIC8qKioqKiogQ29tbW9uIHBvaW50ZXIgdHlwZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgIFVMT05HX1BUUjsgICAgICAvLyAzMi1iaXQKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgIERXT1JEX1BUUjsgICAgICAvLyAzMi1iaXQKLQotLy8gYm9vbGVhbiBwb2ludGVyCi10eXBlZGVmIHVuc2lnbmVkIGludCAqICAgUFVJTlQ7Ci0KLXR5cGVkZWYgQllURSAqICAgICAgICAgICBQQllURTsKLQotdHlwZWRlZiBXT1JEICogICAgICAgICAgIFBXT1JEOwotCi10eXBlZGVmIERXT1JEICogICAgICAgICAgUERXT1JEOwotCiB0eXBlZGVmIFFXT1JEICogICAgICAgICAgUFFXT1JEOwogCiAjZW5kaWYgLy8gX19UVFlQRV9IX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdXBjLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3VwYy5oCmluZGV4IGFjZDFiNjYuLjk1OTZmZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdXBjLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS91cGMuaApAQCAtNzYsMzYgKzc2LDM2IEBACiAKIAogI2RlZmluZSBWTlN2SW5Qb3J0Qihkd0lPQWRkcmVzcywgcGJ5RGF0YSkgeyAgICAgICAgICAgICAgICAgICAgIFwKLQl2b2xhdGlsZSBCWVRFKiBwYnlBZGRyID0gKChQQllURSkoZHdJT0FkZHJlc3MpKTsgICAgICAgICAgICBcCisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqIHBieUFkZHIgPSAoKHVuc2lnbmVkIGNoYXIgKikoZHdJT0FkZHJlc3MpKTsgICAgICAgICAgICBcCiAJKihwYnlEYXRhKSA9IHJlYWRiKHBieUFkZHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KIAogCiAjZGVmaW5lIFZOU3ZJblBvcnRXKGR3SU9BZGRyZXNzLCBwd0RhdGEpIHsgICAgICAgICAgICAgICAgICAgICAgXAotCXZvbGF0aWxlIFdPUkQqIHB3QWRkciA9ICgoUFdPUkQpKGR3SU9BZGRyZXNzKSk7ICAgICAgICAgICAgIFwKKwl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqcHdBZGRyID0gKCh1bnNpZ25lZCBzaG9ydCAqKShkd0lPQWRkcmVzcykpOyAgICAgICAgICAgICBcCiAJKihwd0RhdGEpID0gcmVhZHcocHdBZGRyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KIAogI2RlZmluZSBWTlN2SW5Qb3J0RChkd0lPQWRkcmVzcywgcGR3RGF0YSkgeyAgICAgICAgICAgICAgICAgICAgIFwKLQl2b2xhdGlsZSBEV09SRCogcGR3QWRkciA9ICgoUERXT1JEKShkd0lPQWRkcmVzcykpOyAgICAgICAgICBcCisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcGR3QWRkciA9ICgodW5zaWduZWQgbG9uZyAqKShkd0lPQWRkcmVzcykpOyAgICAgICAgICBcCiAJKihwZHdEYXRhKSA9IHJlYWRsKHBkd0FkZHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KIAogCiAjZGVmaW5lIFZOU3ZPdXRQb3J0Qihkd0lPQWRkcmVzcywgYnlEYXRhKSB7ICAgICAgICAgICAgICAgICAgICAgXAotICAgIHZvbGF0aWxlIEJZVEUqIHBieUFkZHIgPSAoKFBCWVRFKShkd0lPQWRkcmVzcykpOyAgICAgICAgICAgIFwKLSAgICB3cml0ZWIoKEJZVEUpYnlEYXRhLCBwYnlBZGRyKTsJCQkJCQkJXAorICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKiBwYnlBZGRyID0gKCh1bnNpZ25lZCBjaGFyICopKGR3SU9BZGRyZXNzKSk7ICAgICAgICAgICAgXAorICAgIHdyaXRlYigodW5zaWduZWQgY2hhcilieURhdGEsIHBieUFkZHIpOwkJCQkJCQlcCiB9CiAKIAogI2RlZmluZSBWTlN2T3V0UG9ydFcoZHdJT0FkZHJlc3MsIHdEYXRhKSB7ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB2b2xhdGlsZSBXT1JEKiBwd0FkZHIgPSAoKFBXT1JEKShkd0lPQWRkcmVzcykpOyAgICAgICAgICAgICBcCi0gICAgd3JpdGV3KChXT1JEKXdEYXRhLCBwd0FkZHIpOwkJCQkJCQlcCisgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKnB3QWRkciA9ICgodW5zaWduZWQgc2hvcnQgKikoZHdJT0FkZHJlc3MpKTsgICAgICAgICAgICAgXAorICAgIHdyaXRldygodW5zaWduZWQgc2hvcnQpd0RhdGEsIHB3QWRkcik7CQkJCQkJCVwKIH0KIAogI2RlZmluZSBWTlN2T3V0UG9ydEQoZHdJT0FkZHJlc3MsIGR3RGF0YSkgeyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB2b2xhdGlsZSBEV09SRCogcGR3QWRkciA9ICgoUERXT1JEKShkd0lPQWRkcmVzcykpOyAgICAgICAgICBcCi0gICAgd3JpdGVsKChEV09SRClkd0RhdGEsIHBkd0FkZHIpOwkJCQkJICAgIFwKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpwZHdBZGRyID0gKCh1bnNpZ25lZCBsb25nICopKGR3SU9BZGRyZXNzKSk7ICAgICAgICAgIFwKKyAgICB3cml0ZWwoKHVuc2lnbmVkIGxvbmcpZHdEYXRhLCBwZHdBZGRyKTsJCQkJCSAgICBcCiB9CiAKICNlbmRpZgpAQCAtMTQwLDggKzE0MCw4IEBACiAKIAogI2RlZmluZSBQQ0F2RGVsYXlCeUlPKHVEZWxheVVuaXQpIHsgICAgICAgICAgICAgXAotICAgIEJZVEUgICAgYnlEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFVMT05HICAgaWk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVuc2lnbmVkIGNoYXIgYnlEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVuc2lnbmVkIGxvbmcgaWk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmICh1RGVsYXlVbml0IDw9IDUwKSB7ICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB1ZGVsYXkodURlbGF5VW5pdCk7ICAgICAgICAgICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS92bnR3aWZpLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3ZudHdpZmkuYwppbmRleCBiNTI3YTAxLi5mY2YyNmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3ZudHdpZmkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3ZudHdpZmkuYwpAQCAtMTAxLDkgKzEwMSw5IEBACiB2b2lkCiBWTlRXSUZJdlNldElCU1NQYXJhbWV0ZXIgKAogICAgIHZvaWQgKnBNZ210SGFuZGxlLAotICAgIFdPUkQgIHdCZWFjb25QZXJpb2QsCi0gICAgV09SRCAgd0FUSU1XaW5kb3csCi0gICAgVUlOVCAgdUNoYW5uZWwKKyAgICB1bnNpZ25lZCBzaG9ydCB3QmVhY29uUGVyaW9kLAorICAgIHVuc2lnbmVkIHNob3J0IHdBVElNV2luZG93LAorICAgIHVuc2lnbmVkIGludCB1Q2hhbm5lbAogICAgICkKIHsKICAgICBQU01nbXRPYmplY3QgICAgICAgIHBNZ210ID0gKFBTTWdtdE9iamVjdClwTWdtdEhhbmRsZTsKQEAgLTE1MCw3ICsxNTAsNyBAQAogICogUmV0dXJuIFZhbHVlOiBjdXJyZW50IENoYW5uZWwuCiAgKgogLSovCi1VSU5UCit1bnNpZ25lZCBpbnQKIFZOVFdJRklwR2V0Q3VycmVudENoYW5uZWwgKAogICAgIHZvaWQgKnBNZ210SGFuZGxlCiAgICAgKQpAQCAtMTc2LDcgKzE3Niw3IEBACiAgKiBSZXR1cm4gVmFsdWU6IGN1cnJlbnQgQXNzb2MgSUQKICAqCiAtKi8KLVdPUkQKK3Vuc2lnbmVkIHNob3J0CiBWTlRXSUZJd0dldEFzc29jSUQgKAogICAgIHZvaWQgKnBNZ210SGFuZGxlCiAgICAgKQpAQCAtMjAyLDE1ICsyMDIsMTUgQEAKICAqIFJldHVybiBWYWx1ZTogbWF4IHN1cHBvcnQgcmF0ZQogICoKIC0qLwotQllURQordW5zaWduZWQgY2hhcgogVk5UV0lGSWJ5R2V0TWF4U3VwcG9ydFJhdGUgKAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcFN1cHBvcnRSYXRlSUVzLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEV4dFN1cHBvcnRSYXRlSUVzCiAgICAgKQogewotICAgIEJZVEUgICAgYnlNYXhTdXBwb3J0UmF0ZSA9IFJBVEVfMU07Ci0gICAgQllURSAgICBieVN1cHBvcnRSYXRlID0gUkFURV8xTTsKLSAgICBVSU5UICAgIGlpID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TWF4U3VwcG9ydFJhdGUgPSBSQVRFXzFNOworICAgIHVuc2lnbmVkIGNoYXIgYnlTdXBwb3J0UmF0ZSA9IFJBVEVfMU07CisgICAgdW5zaWduZWQgaW50IGlpID0gMDsKIAogICAgIGlmIChwU3VwcG9ydFJhdGVJRXMpIHsKICAgICAgICAgZm9yIChpaSA9IDA7IGlpIDwgcFN1cHBvcnRSYXRlSUVzLT5sZW47IGlpKyspIHsKQEAgLTI0OCwxNiArMjQ4LDE2IEBACiAgKiBSZXR1cm4gVmFsdWU6IG1heCBzdXBwb3J0IHJhdGUKICAqCiAtKi8KLUJZVEUKK3Vuc2lnbmVkIGNoYXIKIFZOVFdJRklieUdldEFDS1R4UmF0ZSAoCi0gICAgQllURSBieVJ4RGF0YVJhdGUsCisgICAgdW5zaWduZWQgY2hhciBieVJ4RGF0YVJhdGUsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwU3VwcG9ydFJhdGVJRXMsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwRXh0U3VwcG9ydFJhdGVJRXMKICAgICApCiB7Ci0gICAgQllURSAgICBieU1heEFja1JhdGU7Ci0gICAgQllURSAgICBieUJhc2ljUmF0ZTsKLSAgICBVSU5UICAgIGlpOworICAgIHVuc2lnbmVkIGNoYXIgYnlNYXhBY2tSYXRlOworICAgIHVuc2lnbmVkIGNoYXIgYnlCYXNpY1JhdGU7CisgICAgdW5zaWduZWQgaW50IGlpOwogCiAgICAgaWYgKGJ5UnhEYXRhUmF0ZSA8PSBSQVRFXzExTSkgewogICAgICAgICBieU1heEFja1JhdGUgPSBSQVRFXzFNOwpAQCAtMzE3LDkgKzMxNyw5IEBACiAgICAgcE1nbXQtPmVBdXRoZW5Nb2RlID0gZUF1dGhNb2RlOwogICAgIGlmICgoZUF1dGhNb2RlID09IFdNQUNfQVVUSF9TSEFSRUtFWSkgfHwKICAgICAgICAgKGVBdXRoTW9kZSA9PSBXTUFDX0FVVEhfQVVUTykpIHsKLSAgICAgICAgcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9IFRSVUU7CisgICAgICAgIHBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0gPSB0cnVlOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0gPSBGQUxTRTsKKyAgICAgICAgcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9IGZhbHNlOwogICAgIH0KIH0KIApAQCAtMzUwLDE1ICszNTAsMTUgQEAKICAgICBpZiAoKGVFbmNyeXB0aW9uTW9kZSA9PSBXTUFDX0VOQ1JZUFRJT05fV0VQRW5hYmxlZCkgfHwKICAgICAgICAgKGVFbmNyeXB0aW9uTW9kZSA9PSBXTUFDX0VOQ1JZUFRJT05fVEtJUEVuYWJsZWQpIHx8CiAgICAgICAgIChlRW5jcnlwdGlvbk1vZGUgPT0gV01BQ19FTkNSWVBUSU9OX0FFU0VuYWJsZWQpICkgewotICAgICAgICBwTWdtdC0+YlByaXZhY3lJbnZva2VkID0gVFJVRTsKKyAgICAgICAgcE1nbXQtPmJQcml2YWN5SW52b2tlZCA9IHRydWU7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcE1nbXQtPmJQcml2YWN5SW52b2tlZCA9IEZBTFNFOworICAgICAgICBwTWdtdC0+YlByaXZhY3lJbnZva2VkID0gZmFsc2U7CiAgICAgfQogfQogCiAKIAotQk9PTAorYm9vbAogVk5UV0lGSWJDb25maWdQaHlNb2RlICgKICAgICB2b2lkICpwTWdtdEhhbmRsZSwKICAgICBDQVJEX1BIWV9UWVBFIGVQaHlUeXBlCkBAIC0zNjgsMTQgKzM2OCwxNCBAQAogCiAgICAgaWYgKChlUGh5VHlwZSAhPSBQSFlfVFlQRV9BVVRPKSAmJgogICAgICAgICAoZVBoeVR5cGUgIT0gcE1nbXQtPmVDdXJyZW50UEhZTW9kZSkpIHsKLSAgICAgICAgaWYgKENBUkRiU2V0UGh5UGFyYW1ldGVyKHBNZ210LT5wQWRhcHRlciwgZVBoeVR5cGUsIDAsIDAsIE5VTEwsIE5VTEwpPT1UUlVFKSB7CisgICAgICAgIGlmIChDQVJEYlNldFBoeVBhcmFtZXRlcihwTWdtdC0+cEFkYXB0ZXIsIGVQaHlUeXBlLCAwLCAwLCBOVUxMLCBOVUxMKT09dHJ1ZSkgewogICAgICAgICAgICAgcE1nbXQtPmVDdXJyZW50UEhZTW9kZSA9IGVQaHlUeXBlOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuKEZBTFNFKTsKKyAgICAgICAgICAgIHJldHVybihmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcE1nbXQtPmVDb25maWdQSFlNb2RlID0gZVBoeVR5cGU7Ci0gICAgcmV0dXJuKFRSVUUpOworICAgIHJldHVybih0cnVlKTsKIH0KIAogCkBAIC00MjUsMTYgKzQyNSwxMiBAQAogLSovCiAKIHZvaWQKLVZOVFdJRkl2UXVlcnlCU1NMaXN0ICgKLSAgICB2b2lkICpwTWdtdEhhbmRsZSwKLSAgICBQVUlOVCAgIHB1QlNTQ291bnQsCi0gICAgdm9pZCAqKnB2Rmlyc3RCU1MKLSAgICApCitWTlRXSUZJdlF1ZXJ5QlNTTGlzdCh2b2lkICpwTWdtdEhhbmRsZSwgdW5zaWduZWQgaW50ICpwdUJTU0NvdW50LCB2b2lkICoqcHZGaXJzdEJTUykKIHsKLSAgICBVSU5UICAgICAgICAgICAgaWkgPSAwOworICAgIHVuc2lnbmVkIGludCBpaSA9IDA7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gKFBTTWdtdE9iamVjdClwTWdtdEhhbmRsZTsKICAgICBQS25vd25CU1MgICAgICAgcEJTUyA9IE5VTEw7Ci0gICAgVUlOVCAgICAgICAgICAgIHVDb3VudCA9IDA7CisgICAgdW5zaWduZWQgaW50IHVDb3VudCA9IDA7CiAKICAgICAqcHZGaXJzdEJTUyA9IE5VTEw7CiAKQEAgLTQ3MSw3ICs0NjcsNyBAQAogICAgICAgICBpZiAocEJTUyA+ICYocE1nbXQtPnNCU1NMaXN0W01BWF9CU1NfTlVNXSkpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAocEJTUy0+YkFjdGl2ZSA9PSBUUlVFKSB7CisgICAgICAgIGlmIChwQlNTLT5iQWN0aXZlID09IHRydWUpIHsKICAgICAgICAgICAgICpwdk5leHRCU1MgPSBwQlNTOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC00OTcsMjQgKzQ5MywyNCBAQAogdm9pZAogVk5UV0lGSXZVcGRhdGVOb2RlVHhDb3VudGVyKAogICAgIHZvaWQgKnBNZ210SGFuZGxlLAotICAgIFBCWVRFICAgIHBieURlc3RBZGRyZXNzLAotICAgIEJPT0wgICAgIGJUeE9rLAotICAgIFdPUkQgICAgIHdSYXRlLAotICAgIFBCWVRFICAgIHBieVR4RmFpbENvdW50CisgICAgdW5zaWduZWQgY2hhciAqcGJ5RGVzdEFkZHJlc3MsCisgICAgYm9vbCBiVHhPaywKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmF0ZSwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlUeEZhaWxDb3VudAogICAgICkKIHsKICAgICBQU01nbXRPYmplY3QgICAgcE1nbXQgPSAoUFNNZ210T2JqZWN0KXBNZ210SGFuZGxlOwotICAgIFVJTlQgICAgICAgICAgICB1Tm9kZUluZGV4ID0gMDsKLSAgICBVSU5UICAgICAgICAgICAgaWk7CisgICAgdW5zaWduZWQgaW50IHVOb2RlSW5kZXggPSAwOworICAgIHVuc2lnbmVkIGludCBpaTsKIAogICAgIGlmICgocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfSUJTU19TVEEpIHx8CiAgICAgICAgIChwTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9FU1NfQVApKSB7Ci0gICAgICAgIGlmIChCU1NEQmJJc1NUQUluTm9kZURCKHBNZ210LCBwYnlEZXN0QWRkcmVzcywgJnVOb2RlSW5kZXgpID09IEZBTFNFKSB7CisgICAgICAgIGlmIChCU1NEQmJJc1NUQUluTm9kZURCKHBNZ210LCBwYnlEZXN0QWRkcmVzcywgJnVOb2RlSW5kZXgpID09IGZhbHNlKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS51VHhBdHRlbXB0cysrOwotICAgIGlmIChiVHhPayA9PSBUUlVFKSB7CisgICAgaWYgKGJUeE9rID09IHRydWUpIHsKICAgICAgICAgLy8gdHJhbnNtaXQgc3VjY2VzcywgVHhBdHRlbXB0cyBhdCBsZWFzdCBwbHVzIG9uZQogICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLnVUeE9rW01BWF9SQVRFXSsrOwogICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLnVUeE9rW3dSYXRlXSsrOwpAQCAtNTMyLDE5ICs1MjgsMTkgQEAKIHZvaWQKIFZOVFdJRkl2R2V0VHhSYXRlKAogICAgIHZvaWQgKnBNZ210SGFuZGxlLAotICAgIFBCWVRFICAgIHBieURlc3RBZGRyZXNzLAotICAgIFBXT1JEICAgcHdUeERhdGFSYXRlLAotICAgIFBCWVRFICAgcGJ5QUNLUmF0ZSwKLSAgICBQQllURSAgIHBieUNDS0Jhc2ljUmF0ZSwKLSAgICBQQllURSAgIHBieU9GRE1CYXNpY1JhdGUKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlEZXN0QWRkcmVzcywKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdUeERhdGFSYXRlLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUFDS1JhdGUsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5Q0NLQmFzaWNSYXRlLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieU9GRE1CYXNpY1JhdGUKICAgICApCiB7CiAgICAgUFNNZ210T2JqZWN0ICAgICAgICBwTWdtdCA9IChQU01nbXRPYmplY3QpcE1nbXRIYW5kbGU7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICB1Tm9kZUluZGV4ID0gMDsKLSAgICBXT1JEICAgICAgICAgICAgICAgIHdUeERhdGFSYXRlID0gUkFURV8xTTsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5QUNLUmF0ZSA9IFJBVEVfMU07Ci0gICAgQllURSAgICAgICAgICAgICAgICBieUNDS0Jhc2ljUmF0ZSA9IFJBVEVfMU07Ci0gICAgQllURSAgICAgICAgICAgICAgICBieU9GRE1CYXNpY1JhdGUgPSBSQVRFXzI0TTsKKyAgICB1bnNpZ25lZCBpbnQgdU5vZGVJbmRleCA9IDA7CisgICAgdW5zaWduZWQgc2hvcnQgd1R4RGF0YVJhdGUgPSBSQVRFXzFNOworICAgIHVuc2lnbmVkIGNoYXIgYnlBQ0tSYXRlID0gUkFURV8xTTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q0NLQmFzaWNSYXRlID0gUkFURV8xTTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5T0ZETUJhc2ljUmF0ZSA9IFJBVEVfMjRNOwogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcFN1cHBvcnRSYXRlSUVzID0gTlVMTDsKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBFeHRTdXBwb3J0UmF0ZUlFcyA9IE5VTEw7CiAKQEAgLTU3OSwxMiArNTc1LDEyIEBACiAgICAgICAgIHBTdXBwb3J0UmF0ZUlFcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKSBwTWdtdC0+YWJ5Q3VyclN1cHBSYXRlczsKICAgICAgICAgcEV4dFN1cHBvcnRSYXRlSUVzID0gKFBXTEFOX0lFX1NVUFBfUkFURVMpIHBNZ210LT5hYnlDdXJyRXh0U3VwcFJhdGVzOwogICAgIH0KLSAgICBieUFDS1JhdGUgPSBWTlRXSUZJYnlHZXRBQ0tUeFJhdGUoICAoQllURSkgd1R4RGF0YVJhdGUsCisgICAgYnlBQ0tSYXRlID0gVk5UV0lGSWJ5R2V0QUNLVHhSYXRlKCAgKHVuc2lnbmVkIGNoYXIpIHdUeERhdGFSYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBTdXBwb3J0UmF0ZUlFcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRXh0U3VwcG9ydFJhdGVJRXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIGlmIChieUFDS1JhdGUgPiAoQllURSkgd1R4RGF0YVJhdGUpIHsKLSAgICAgICAgYnlBQ0tSYXRlID0gKEJZVEUpIHdUeERhdGFSYXRlOworICAgIGlmIChieUFDS1JhdGUgPiAodW5zaWduZWQgY2hhcikgd1R4RGF0YVJhdGUpIHsKKyAgICAgICAgYnlBQ0tSYXRlID0gKHVuc2lnbmVkIGNoYXIpIHdUeERhdGFSYXRlOwogICAgIH0KICAgICBieUNDS0Jhc2ljUmF0ZSA9IFZOVFdJRklieUdldEFDS1R4UmF0ZSggUkFURV8xMU0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBTdXBwb3J0UmF0ZUlFcywKQEAgLTYwMSwxNSArNTk3LDE1IEBACiAgICAgcmV0dXJuOwogfQogCi1CWVRFCit1bnNpZ25lZCBjaGFyCiBWTlRXSUZJYnlHZXRLZXlDeXBoZXIoCiAgICAgdm9pZCAqcE1nbXRIYW5kbGUsCi0gICAgQk9PTCAgICAgYkdyb3VwS2V5CisgICAgYm9vbCBiR3JvdXBLZXkKICAgICApCiB7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gKFBTTWdtdE9iamVjdClwTWdtdEhhbmRsZTsKIAotICAgIGlmIChiR3JvdXBLZXkgPT0gVFJVRSkgeworICAgIGlmIChiR3JvdXBLZXkgPT0gdHJ1ZSkgewogICAgICAgICByZXR1cm4gKHBNZ210LT5ieUNTU0dLKTsKICAgICB9IGVsc2UgewogICAgICAgICByZXR1cm4gKHBNZ210LT5ieUNTU1BLKTsKQEAgLTYxOCw3ICs2MTQsNyBAQAogCiAKIC8qCi1CT09MCitib29sCiBWTlRXSUZJYkluaXQoCiAgICAgdm9pZCAqcEFkYXB0ZXJIYW5kbGVyLAogICAgIHZvaWQgKipwTWdtdEhhbmRsZXIKQEAgLTYyNiwxMyArNjIyLDEzIEBACiB7CiAKICAgICBQU01nbXRPYmplY3QgICAgICAgIHBNZ210ID0gTlVMTDsKLSAgICBVSU5UICAgICAgICAgICAgICAgIGlpOworICAgIHVuc2lnbmVkIGludCBpaTsKIAogCiAgICAgcE1nbXQgPSAoUFNNZ210T2JqZWN0KWttYWxsb2Moc2l6ZW9mKFNNZ210T2JqZWN0KSwgKGludClHRlBfQVRPTUlDKTsKICAgICBpZiAocE1nbXQgPT0gTlVMTCkgewogICAgICAgICAqcE1nbXRIYW5kbGVyID0gTlVMTDsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgbWVtc2V0KHBNZ210LCAwLCBzaXplb2YoU01nbXRPYmplY3QpKTsKQEAgLTY1Miw0MSArNjQ4LDQxIEBACiAgICAgcE1nbXQtPnVDbWREZXF1ZXVlSWR4ID0gMDsKICAgICBwTWdtdC0+dUNtZEVucXVldWVJZHggPSAwOwogICAgIHBNZ210LT5lQ29tbWFuZFN0YXRlID0gV0xBTl9DTURfU1RBVEVfSURMRTsKLSAgICBwTWdtdC0+YkNtZFN0b3AgPSBGQUxTRTsKLSAgICBwTWdtdC0+YkNtZFJ1bm5pbmcgPSBGQUxTRTsKKyAgICBwTWdtdC0+YkNtZFN0b3AgPSBmYWxzZTsKKyAgICBwTWdtdC0+YkNtZFJ1bm5pbmcgPSBmYWxzZTsKIAogICAgICpwTWdtdEhhbmRsZXIgPSBwTWdtdDsKLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KICovCiAKIAogCi1CT09MCitib29sCiBWTlRXSUZJYlNldFBNS0lEQ2FjaGUgKAogICAgIHZvaWQgKnBNZ210T2JqZWN0LAotICAgIFVMT05HIHVsQ291bnQsCisgICAgdW5zaWduZWQgbG9uZyB1bENvdW50LAogICAgIHZvaWQgKnBQTUtJREluZm8KICAgICApCiB7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gKFBTTWdtdE9iamVjdCkgcE1nbXRPYmplY3Q7CiAKICAgICBpZiAodWxDb3VudCA+IE1BWF9QTUtJRF9DQUNIRSkgewotICAgICAgICByZXR1cm4gKEZBTFNFKTsKKyAgICAgICAgcmV0dXJuIChmYWxzZSk7CiAgICAgfQogICAgIHBNZ210LT5nc1BNS0lEQ2FjaGUuQlNTSURJbmZvQ291bnQgPSB1bENvdW50OwogICAgIG1lbWNweShwTWdtdC0+Z3NQTUtJRENhY2hlLkJTU0lESW5mbywgcFBNS0lESW5mbywgKHVsQ291bnQqc2l6ZW9mKFBNS0lESW5mbykpKTsKLSAgICByZXR1cm4gKFRSVUUpOworICAgIHJldHVybiAodHJ1ZSk7CiB9CiAKIAogCi1XT1JECit1bnNpZ25lZCBzaG9ydAogVk5UV0lGSXdHZXRNYXhTdXBwb3J0UmF0ZSgKICAgICB2b2lkICpwTWdtdE9iamVjdAogICAgICkKIHsKLSAgICBXT1JEIHdSYXRlID0gUkFURV81NE07CisgICAgdW5zaWduZWQgc2hvcnQgd1JhdGUgPSBSQVRFXzU0TTsKICAgICBQU01nbXRPYmplY3QgICAgcE1nbXQgPSAoUFNNZ210T2JqZWN0KSBwTWdtdE9iamVjdDsKIAogICAgIGZvcih3UmF0ZSA9IFJBVEVfNTRNOyB3UmF0ZSA+IFJBVEVfMU07IHdSYXRlLS0pIHsKQEAgLTcwNSw3ICs3MDEsNyBAQAogdm9pZAogVk5UV0lGSXZTZXQxMWggKAogICAgIHZvaWQgKnBNZ210T2JqZWN0LAotICAgIEJPT0wgIGIxMWhFbmFibGUKKyAgICBib29sIGIxMWhFbmFibGUKICAgICApCiB7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gKFBTTWdtdE9iamVjdCkgcE1nbXRPYmplY3Q7CkBAIC03MTMsMTkgKzcwOSwxOSBAQAogICAgIHBNZ210LT5iMTFoRW5hYmxlID0gYjExaEVuYWJsZTsKIH0KIAotQk9PTAorYm9vbAogVk5UV0lGSWJNZWFzdXJlUmVwb3J0KAogICAgIHZvaWQgKnBNZ210T2JqZWN0LAotICAgIEJPT0wgIGJFbmRPZlJlcG9ydCwKKyAgICBib29sIGJFbmRPZlJlcG9ydCwKICAgICB2b2lkICpwdk1lYXN1cmVFSUQsCi0gICAgQllURSAgYnlSZXBvcnRNb2RlLAotICAgIEJZVEUgIGJ5QmFzaWNNYXAsCi0gICAgQllURSAgYnlDQ0FGcmFjdGlvbiwKLSAgICBQQllURSBwYnlSUElzCisgICAgdW5zaWduZWQgY2hhciBieVJlcG9ydE1vZGUsCisgICAgdW5zaWduZWQgY2hhciBieUJhc2ljTWFwLAorICAgIHVuc2lnbmVkIGNoYXIgYnlDQ0FGcmFjdGlvbiwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlSUElzCiAgICAgKQogewogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9IChQU01nbXRPYmplY3QpIHBNZ210T2JqZWN0OwotICAgIFBCWVRFICAgICAgICAgICBwYnlDdXJyZW50RUlEID0gKFBCWVRFKSAocE1nbXQtPnBDdXJyTWVhc3VyZUVJRFJlcCk7CisgICAgdW5zaWduZWQgY2hhciAqcGJ5Q3VycmVudEVJRCA9ICh1bnNpZ25lZCBjaGFyICopIChwTWdtdC0+cEN1cnJNZWFzdXJlRUlEUmVwKTsKIAogICAgIC8vc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAgICAgaWYgKChwdk1lYXN1cmVFSUQgIT0gTlVMTCkgJiYKQEAgLTc2NSw0OSArNzYxLDQ5IEBACiAgICAgICAgIHBNZ210LT51TGVuZ3RoT2ZSZXBFSURzICs9ICgyICsgcE1nbXQtPnBDdXJyTWVhc3VyZUVJRFJlcC0+bGVuKTsKICAgICAgICAgcE1nbXQtPnBDdXJyTWVhc3VyZUVJRFJlcCA9IChQV0xBTl9JRV9NRUFTVVJFX1JFUCkgcGJ5Q3VycmVudEVJRDsKICAgICB9Ci0gICAgaWYgKGJFbmRPZlJlcG9ydCA9PSBUUlVFKSB7CisgICAgaWYgKGJFbmRPZlJlcG9ydCA9PSB0cnVlKSB7CiAgICAgICAgIElFRUUxMWhiTVNSUmVwVHgocE1nbXQpOwogICAgIH0KICAgICAvL3NwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci0gICAgcmV0dXJuIChUUlVFKTsKKyAgICByZXR1cm4gKHRydWUpOwogfQogCiAKLUJPT0wKK2Jvb2wKIFZOVFdJRkliQ2hhbm5lbFN3aXRjaCgKICAgICB2b2lkICpwTWdtdE9iamVjdCwKLSAgICBCWVRFICBieU5ld0NoYW5uZWwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TmV3Q2hhbm5lbAogICAgICkKIHsKICAgICBQU01nbXRPYmplY3QgICAgcE1nbXQgPSAoUFNNZ210T2JqZWN0KSBwTWdtdE9iamVjdDsKIAogICAgIC8vc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAgICAgcE1nbXQtPnVDdXJyQ2hhbm5lbCA9IGJ5TmV3Q2hhbm5lbDsKLSAgICBwTWdtdC0+YlN3aXRjaENoYW5uZWwgPSBGQUxTRTsKKyAgICBwTWdtdC0+YlN3aXRjaENoYW5uZWwgPSBmYWxzZTsKICAgICAvL3NwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8qCi1CT09MCitib29sCiBWTlRXSUZJYlJhZGFyUHJlc2VudCgKICAgICB2b2lkICpwTWdtdE9iamVjdCwKLSAgICBCWVRFICBieUNoYW5uZWwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q2hhbm5lbAogICAgICkKIHsKICAgICBQU01nbXRPYmplY3QgICAgcE1nbXQgPSAoUFNNZ210T2JqZWN0KSBwTWdtdE9iamVjdDsKICAgICBpZiAoKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0lCU1NfU1RBKSAmJgotICAgICAgICAoYnlDaGFubmVsID09IChCWVRFKSBwTWdtdC0+dUN1cnJDaGFubmVsKSAmJgotICAgICAgICAocE1nbXQtPmJTd2l0Y2hDaGFubmVsICE9IFRSVUUpICYmCi0gICAgICAgIChwTWdtdC0+YjExaEVuYWJsZSA9PSBUUlVFKSkgewotICAgICAgICBpZiAoSVNfRVRIX0FERFJFU1NfRVFVQUwocE1nbXQtPmFieUlCU1NERlNPd25lciwgQ0FSRHBHZXRDdXJyZW50QWRkcmVzcyhwTWdtdC0+cEFkYXB0ZXIpKSkgewotICAgICAgICAgICAgcE1nbXQtPmJ5TmV3Q2hhbm5lbCA9IENBUkRieUF1dG9DaGFubmVsU2VsZWN0KHBNZ210LT5wQWRhcHRlciwoQllURSkgcE1nbXQtPnVDdXJyQ2hhbm5lbCk7Ci0gICAgICAgICAgICBwTWdtdC0+YlN3aXRjaENoYW5uZWwgPSBUUlVFOworICAgICAgICAoYnlDaGFubmVsID09ICh1bnNpZ25lZCBjaGFyKSBwTWdtdC0+dUN1cnJDaGFubmVsKSAmJgorICAgICAgICAocE1nbXQtPmJTd2l0Y2hDaGFubmVsICE9IHRydWUpICYmCisgICAgICAgIChwTWdtdC0+YjExaEVuYWJsZSA9PSB0cnVlKSkgeworICAgICAgICBpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihwTWdtdC0+YWJ5SUJTU0RGU093bmVyLCBDQVJEcEdldEN1cnJlbnRBZGRyZXNzKHBNZ210LT5wQWRhcHRlcikpKSB7CisgICAgICAgICAgICBwTWdtdC0+YnlOZXdDaGFubmVsID0gQ0FSRGJ5QXV0b0NoYW5uZWxTZWxlY3QocE1nbXQtPnBBZGFwdGVyLCh1bnNpZ25lZCBjaGFyKSBwTWdtdC0+dUN1cnJDaGFubmVsKTsKKyAgICAgICAgICAgIHBNZ210LT5iU3dpdGNoQ2hhbm5lbCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgQkVBQ09OYlNlbmRCZWFjb24ocE1nbXQpOwogICAgICAgICBDQVJEYkNoYW5uZWxTd2l0Y2gocE1nbXQtPnBBZGFwdGVyLCAwLCBwTWdtdC0+YnlOZXdDaGFubmVsLCAxMCk7CiAgICAgfQotICAgIHJldHVybiBUUlVFOworICAgIHJldHVybiB0cnVlOwogfQogKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS92bnR3aWZpLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3ZudHdpZmkuaAppbmRleCBjOTFkZmQ3Li5mNDMyN2FiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3ZudHdpZmkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3ZudHdpZmkuaApAQCAtMTQzLDkgKzE0Myw5IEBACiB2b2lkCiBWTlRXSUZJdlNldElCU1NQYXJhbWV0ZXIgKAogICAgIHZvaWQgKnBNZ210SGFuZGxlLAotICAgIFdPUkQgIHdCZWFjb25QZXJpb2QsCi0gICAgV09SRCAgd0FUSU1XaW5kb3csCi0gICAgVUlOVCAgdUNoYW5uZWwKKyAgICB1bnNpZ25lZCBzaG9ydCB3QmVhY29uUGVyaW9kLAorICAgIHVuc2lnbmVkIHNob3J0IHdBVElNV2luZG93LAorICAgIHVuc2lnbmVkIGludCB1Q2hhbm5lbAogICAgICk7CiAKIHZvaWQKQEAgLTE1OSwyNSArMTU5LDI1IEBACiAgICAgdm9pZCAqcE1nbXRIYW5kbGUKICAgICApOwogCi1VSU5UCit1bnNpZ25lZCBpbnQKIFZOVFdJRklwR2V0Q3VycmVudENoYW5uZWwoCiAgICAgdm9pZCAqcE1nbXRIYW5kbGUKICAgICApOwogCi1XT1JECit1bnNpZ25lZCBzaG9ydAogVk5UV0lGSXdHZXRBc3NvY0lEICgKICAgICB2b2lkICpwTWdtdEhhbmRsZQogICAgICk7CiAKLUJZVEUKK3Vuc2lnbmVkIGNoYXIKIFZOVFdJRklieUdldE1heFN1cHBvcnRSYXRlICgKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBTdXBwb3J0UmF0ZUlFcywKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBFeHRTdXBwb3J0UmF0ZUlFcwogICAgICk7CiAKLUJZVEUKK3Vuc2lnbmVkIGNoYXIKIFZOVFdJRklieUdldEFDS1R4UmF0ZSAoCi0gICAgQllURSBieVJ4RGF0YVJhdGUsCisgICAgdW5zaWduZWQgY2hhciBieVJ4RGF0YVJhdGUsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwU3VwcG9ydFJhdGVJRXMsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwRXh0U3VwcG9ydFJhdGVJRXMKICAgICApOwpAQCAtMTk1LDcgKzE5NSw3IEBACiAgICAgKTsKIAogCi1CT09MCitib29sCiBWTlRXSUZJYkNvbmZpZ1BoeU1vZGUoCiAgICAgdm9pZCAqcE1nbXRIYW5kbGUsCiAgICAgQ0FSRF9QSFlfVFlQRSBlUGh5VHlwZQpAQCAtMjA4LDE0ICsyMDgsOCBAQAogICAgICk7CiAKIHZvaWQKLVZOVFdJRkl2UXVlcnlCU1NMaXN0KAotICAgIHZvaWQgKnBNZ210SGFuZGxlLAotICAgIFBVSU5UICAgcHVCU1NDb3VudCwKLSAgICB2b2lkICoqcHZGaXJzdEJTUwotICAgICk7Ci0KLQotCitWTlRXSUZJdlF1ZXJ5QlNTTGlzdCh2b2lkICpwTWdtdEhhbmRsZSwgdW5zaWduZWQgaW50ICpwdUJTU0NvdW50LAorCQl2b2lkICoqcHZGaXJzdEJTUyk7CiAKIHZvaWQKIFZOVFdJRkl2R2V0TmV4dEJTUyAoCkBAIC0yMjksNTIgKzIyMyw1MiBAQAogdm9pZAogVk5UV0lGSXZVcGRhdGVOb2RlVHhDb3VudGVyKAogICAgIHZvaWQgKnBNZ210SGFuZGxlLAotICAgIFBCWVRFICAgIHBieURlc3RBZGRyZXNzLAotICAgIEJPT0wgICAgIGJUeE9rLAotICAgIFdPUkQgICAgIHdSYXRlLAotICAgIFBCWVRFICAgIHBieVR4RmFpbENvdW50CisgICAgdW5zaWduZWQgY2hhciAqcGJ5RGVzdEFkZHJlc3MsCisgICAgYm9vbCBiVHhPaywKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmF0ZSwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlUeEZhaWxDb3VudAogICAgICk7CiAKIAogdm9pZAogVk5UV0lGSXZHZXRUeFJhdGUoCiAgICAgdm9pZCAqcE1nbXRIYW5kbGUsCi0gICAgUEJZVEUgICAgcGJ5RGVzdEFkZHJlc3MsCi0gICAgUFdPUkQgICBwd1R4RGF0YVJhdGUsCi0gICAgUEJZVEUgICBwYnlBQ0tSYXRlLAotICAgIFBCWVRFICAgcGJ5Q0NLQmFzaWNSYXRlLAotICAgIFBCWVRFICAgcGJ5T0ZETUJhc2ljUmF0ZQorICAgIHVuc2lnbmVkIGNoYXIgKnBieURlc3RBZGRyZXNzLAorICAgIHVuc2lnbmVkIHNob3J0ICpwd1R4RGF0YVJhdGUsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5QUNLUmF0ZSwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlDQ0tCYXNpY1JhdGUsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5T0ZETUJhc2ljUmF0ZQogICAgICk7CiAvKgotQk9PTAorYm9vbAogVk5UV0lGSWJJbml0KAogICAgIHZvaWQgKnBBZGFwdGVySGFuZGxlciwKICAgICB2b2lkICoqcE1nbXRIYW5kbGVyCiAgICAgKTsKICovCiAKLUJZVEUKK3Vuc2lnbmVkIGNoYXIKIFZOVFdJRklieUdldEtleUN5cGhlcigKICAgICB2b2lkICpwTWdtdEhhbmRsZSwKLSAgICBCT09MICAgICBiR3JvdXBLZXkKKyAgICBib29sIGJHcm91cEtleQogICAgICk7CiAKIAogCiAKLUJPT0wKK2Jvb2wKIFZOVFdJRkliU2V0UE1LSURDYWNoZSAoCiAgICAgdm9pZCAqcE1nbXRPYmplY3QsCi0gICAgVUxPTkcgdWxDb3VudCwKKyAgICB1bnNpZ25lZCBsb25nIHVsQ291bnQsCiAgICAgdm9pZCAqcFBNS0lESW5mbwogICAgICk7CiAKLUJPT0wKK2Jvb2wKIFZOVFdJRkliQ29tbWFuZFJ1bm5pbmcgKAogICAgIHZvaWQgKnBNZ210T2JqZWN0CiAgICAgKTsKIAotV09SRAordW5zaWduZWQgc2hvcnQKIFZOVFdJRkl3R2V0TWF4U3VwcG9ydFJhdGUoCiAgICAgdm9pZCAqcE1nbXRPYmplY3QKICAgICApOwpAQCAtMjgzLDMwICsyNzcsMzAgQEAKIHZvaWQKIFZOVFdJRkl2U2V0MTFoICgKICAgICB2b2lkICpwTWdtdE9iamVjdCwKLSAgICBCT09MICBiMTFoRW5hYmxlCisgICAgYm9vbCBiMTFoRW5hYmxlCiAgICAgKTsKIAotQk9PTAorYm9vbAogVk5UV0lGSWJNZWFzdXJlUmVwb3J0KAogICAgIHZvaWQgKnBNZ210T2JqZWN0LAotICAgIEJPT0wgIGJFbmRPZlJlcG9ydCwKKyAgICBib29sIGJFbmRPZlJlcG9ydCwKICAgICB2b2lkICpwdk1lYXN1cmVFSUQsCi0gICAgQllURSAgYnlSZXBvcnRNb2RlLAotICAgIEJZVEUgIGJ5QmFzaWNNYXAsCi0gICAgQllURSAgYnlDQ0FGcmFjdGlvbiwKLSAgICBQQllURSBwYnlSUElzCisgICAgdW5zaWduZWQgY2hhciBieVJlcG9ydE1vZGUsCisgICAgdW5zaWduZWQgY2hhciBieUJhc2ljTWFwLAorICAgIHVuc2lnbmVkIGNoYXIgYnlDQ0FGcmFjdGlvbiwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlSUElzCiAgICAgKTsKIAotQk9PTAorYm9vbAogVk5UV0lGSWJDaGFubmVsU3dpdGNoKAogICAgIHZvaWQgKnBNZ210T2JqZWN0LAotICAgIEJZVEUgIGJ5TmV3Q2hhbm5lbAorICAgIHVuc2lnbmVkIGNoYXIgYnlOZXdDaGFubmVsCiAgICAgKTsKIC8qCi1CT09MCitib29sCiBWTlRXSUZJYlJhZGFyUHJlc2VudCgKICAgICB2b2lkICpwTWdtdE9iamVjdCwKLSAgICBCWVRFICBieUNoYW5uZWwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q2hhbm5lbAogICAgICk7CiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3djbWQuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd2NtZC5jCmluZGV4IDI4NjY1ZDguLmFiZDY3NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd2NtZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd2NtZC5jCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSAicnh0eC5oIgogI2luY2x1ZGUgInJmLmgiCiAjaW5jbHVkZSAiaW93cGEuaCIKKyNpbmNsdWRlICJjaGFubmVsLmgiCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgRGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTc3LDcgKzc4LDcgQEAKIHNfTWdyTWFrZVByb2JlUmVxdWVzdCgKICAgICBQU0RldmljZSBwRGV2aWNlLAogICAgIFBTTWdtdE9iamVjdCBwTWdtdCwKLSAgICBQQllURSBwU2NhbkJTU0lELAorICAgIHVuc2lnbmVkIGNoYXIgKnBTY2FuQlNTSUQsCiAgICAgUFdMQU5fSUVfU1NJRCBwU1NJRCwKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBDdXJyUmF0ZXMsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwQ3VyckV4dFN1cHBSYXRlcwpAQCAtODUsNyArODYsNyBAQAogCiAKIHN0YXRpYwotQk9PTAorYm9vbAogc19iQ29tbWFuZENvbXBsZXRlICgKICAgICBQU0RldmljZSBwRGV2aWNlCiAgICAgKTsKQEAgLTExNiw3ICsxMTcsNyBAQAogewogCiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gJihwRGV2aWNlLT5zTWdtdE9iaik7Ci0gICAgQk9PTCAgICAgICAgICAgIGJTdG9wOworICAgIGJvb2wgYlN0b3A7CiAKICAgICAvKgogICAgICAqIHRlbXBvcmFyaWx5IHN0b3AgQmVhY29uIHBhY2tldCBmb3IgQWRIb2MgU2VydmVyCkBAIC0xMjksMTggKzEzMCwxOCBAQAogICAgICAqICAgICAgb3IKICAgICAgKiAgICAgICgzLjIpIEFkSG9jIGNoYW5uZWwgaXMgaW4gQSBtb2RlCiAgICAgICovCi0gICAgYlN0b3AgPSBGQUxTRTsKKyAgICBiU3RvcCA9IGZhbHNlOwogICAgIGlmICgocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfSUJTU19TVEEpICYmCiAgICAgKHBNZ210LT5lQ3VyclN0YXRlID49IFdNQUNfU1RBVEVfU1RBUlRFRCkpCiAgICAgewogICAgICAgICBpZiAoKHBNZ210LT51SUJTU0NoYW5uZWwgPD0gIENCX01BWF9DSEFOTkVMXzI0RykgJiYKICAgICAgICAgICAgICAocE1nbXQtPnVTY2FuQ2hhbm5lbCA+IENCX01BWF9DSEFOTkVMXzI0RykpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGJTdG9wID0gVFJVRTsKKyAgICAgICAgICAgIGJTdG9wID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBpZiAocE1nbXQtPnVJQlNTQ2hhbm5lbCA+ICBDQl9NQVhfQ0hBTk5FTF8yNEcpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGJTdG9wID0gVFJVRTsKKyAgICAgICAgICAgIGJTdG9wID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjA4LDE1ICsyMDksMTUgQEAKICAgICApCiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vMU0sICAgMk0sICAgNU0sICAgMTFNLCAgMThNLCAgMjRNLCAgMzZNLCAgNTRNCi0gICAgQllURSBhYnlDdXJyU3VwcFJhdGVzR1tdID0ge1dMQU5fRUlEX1NVUFBfUkFURVMsIDgsIDB4MDIsIDB4MDQsIDB4MEIsIDB4MTYsIDB4MjQsIDB4MzAsIDB4NDgsIDB4NkN9OwotICAgIEJZVEUgYWJ5Q3VyckV4dFN1cHBSYXRlc0dbXSA9IHtXTEFOX0VJRF9FWFRTVVBQX1JBVEVTLCA0LCAweDBDLCAweDEyLCAweDE4LCAweDYwfTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUN1cnJTdXBwUmF0ZXNHW10gPSB7V0xBTl9FSURfU1VQUF9SQVRFUywgOCwgMHgwMiwgMHgwNCwgMHgwQiwgMHgxNiwgMHgyNCwgMHgzMCwgMHg0OCwgMHg2Q307CisgICAgdW5zaWduZWQgY2hhciBhYnlDdXJyRXh0U3VwcFJhdGVzR1tdID0ge1dMQU5fRUlEX0VYVFNVUFBfUkFURVMsIDQsIDB4MEMsIDB4MTIsIDB4MTgsIDB4NjB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLzZNLCAgIDlNLCAgIDEyTSwgIDQ4TQotICAgIEJZVEUgYWJ5Q3VyclN1cHBSYXRlc0FbXSA9IHtXTEFOX0VJRF9TVVBQX1JBVEVTLCA4LCAweDBDLCAweDEyLCAweDE4LCAweDI0LCAweDMwLCAweDQ4LCAweDYwLCAweDZDfTsKLSAgICBCWVRFIGFieUN1cnJTdXBwUmF0ZXNCW10gPSB7V0xBTl9FSURfU1VQUF9SQVRFUywgNCwgMHgwMiwgMHgwNCwgMHgwQiwgMHgxNn07Ci0gICAgUEJZVEUgICAgICAgICAgIHBieVJhdGU7CisgICAgdW5zaWduZWQgY2hhciBhYnlDdXJyU3VwcFJhdGVzQVtdID0ge1dMQU5fRUlEX1NVUFBfUkFURVMsIDgsIDB4MEMsIDB4MTIsIDB4MTgsIDB4MjQsIDB4MzAsIDB4NDgsIDB4NjAsIDB4NkN9OworICAgIHVuc2lnbmVkIGNoYXIgYWJ5Q3VyclN1cHBSYXRlc0JbXSA9IHtXTEFOX0VJRF9TVVBQX1JBVEVTLCA0LCAweDAyLCAweDA0LCAweDBCLCAweDE2fTsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlSYXRlOwogICAgIFBTVHhNZ210UGFja2V0ICBwVHhQYWNrZXQ7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7Ci0gICAgVUlOVCAgICAgICAgICAgIGlpOworICAgIHVuc2lnbmVkIGludCBpaTsKIAogCiAgICAgaWYgKHBEZXZpY2UtPmVDdXJyZW50UEhZVHlwZSA9PSBQSFlfVFlQRV8xMUEpIHsKQEAgLTI2OSw3ICsyNzAsNyBAQAogc19NZ3JNYWtlUHJvYmVSZXF1ZXN0KAogICAgIFBTRGV2aWNlIHBEZXZpY2UsCiAgICAgUFNNZ210T2JqZWN0IHBNZ210LAotICAgIFBCWVRFIHBTY2FuQlNTSUQsCisgICAgdW5zaWduZWQgY2hhciAqcFNjYW5CU1NJRCwKICAgICBQV0xBTl9JRV9TU0lEIHBTU0lELAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEN1cnJSYXRlcywKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBDdXJyRXh0U3VwcFJhdGVzCkBAIC0yODIsOCArMjgzLDggQEAKIAogICAgIHBUeFBhY2tldCA9IChQU1R4TWdtdFBhY2tldClwTWdtdC0+cGJ5TWdtdFBhY2tldFBvb2w7CiAgICAgbWVtc2V0KHBUeFBhY2tldCwgMCwgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpICsgV0xBTl9QUk9CRVJFUV9GUl9NQVhMRU4pOwotICAgIHBUeFBhY2tldC0+cDgwMjExSGVhZGVyID0gKFBVV0xBTl84MDIxMUhEUikoKFBCWVRFKXBUeFBhY2tldCArIHNpemVvZihTVHhNZ210UGFja2V0KSk7Ci0gICAgc0ZyYW1lLnBCdWYgPSAoUEJZVEUpcFR4UGFja2V0LT5wODAyMTFIZWFkZXI7CisgICAgcFR4UGFja2V0LT5wODAyMTFIZWFkZXIgPSAoUFVXTEFOXzgwMjExSERSKSgodW5zaWduZWQgY2hhciAqKXBUeFBhY2tldCArIHNpemVvZihTVHhNZ210UGFja2V0KSk7CisgICAgc0ZyYW1lLnBCdWYgPSAodW5zaWduZWQgY2hhciAqKXBUeFBhY2tldC0+cDgwMjExSGVhZGVyOwogICAgIHNGcmFtZS5sZW4gPSBXTEFOX1BST0JFUkVRX0ZSX01BWExFTjsKICAgICB2TWdyRW5jb2RlUHJvYmVSZXF1ZXN0KCZzRnJhbWUpOwogICAgIHNGcmFtZS5wSGRyLT5zQTMud0ZyYW1lQ3RsID0gY3B1X3RvX2xlMTYoCkBAIC0zMjAsMTYgKzMyMSwxNiBAQAogdm9pZAogdkNvbW1hbmRUaW1lcldhaXQoCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQsCi0gICAgVUlOVCBNU2Vjb25kCisgICAgdW5zaWduZWQgaW50IE1TZWNvbmQKICAgICApCiB7CiAgICAgUFNEZXZpY2UgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpaERldmljZUNvbnRleHQ7CiAKICAgICBpbml0X3RpbWVyKCZwRGV2aWNlLT5zVGltZXJDb21tYW5kKTsKLSAgICBwRGV2aWNlLT5zVGltZXJDb21tYW5kLmRhdGEgPSAoVUxPTkcpcERldmljZTsKKyAgICBwRGV2aWNlLT5zVGltZXJDb21tYW5kLmRhdGEgPSAodW5zaWduZWQgbG9uZykgcERldmljZTsKICAgICBwRGV2aWNlLT5zVGltZXJDb21tYW5kLmZ1bmN0aW9uID0gKFRpbWVyRnVuY3Rpb24pdkNvbW1hbmRUaW1lcjsKICAgICAvLyBSVU5fQVQgOjEgbXNlYyB+PSAoSFovMTAyNCkKLSAgICBwRGV2aWNlLT5zVGltZXJDb21tYW5kLmV4cGlyZXMgPSAoVUlOVClSVU5fQVQoKE1TZWNvbmQgKiBIWikgPj4gMTApOworICAgIHBEZXZpY2UtPnNUaW1lckNvbW1hbmQuZXhwaXJlcyA9ICh1bnNpZ25lZCBpbnQpUlVOX0FUKChNU2Vjb25kICogSFopID4+IDEwKTsKICAgICBhZGRfdGltZXIoJnBEZXZpY2UtPnNUaW1lckNvbW1hbmQpOwogICAgIHJldHVybjsKIH0KQEAgLTM0NywxNCArMzQ4LDE0IEBACiAgICAgUFdMQU5fSUVfU1NJRCAgIHBJdGVtU1NJRDsKICAgICBQV0xBTl9JRV9TU0lEICAgcEl0ZW1TU0lEQ3VycjsKICAgICBDTURfU1RBVFVTICAgICAgU3RhdHVzOwotICAgIFVJTlQgICAgICAgICAgICBpaTsKLSAgICBCWVRFICAgICAgICAgICAgYnlNYXNrWzhdID0gezEsIDIsIDQsIDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODB9OworICAgIHVuc2lnbmVkIGludCBpaTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TWFza1s4XSA9IHsxLCAyLCA0LCA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwfTsKICAgICBzdHJ1Y3Qgc2tfYnVmZiAgKnNrYjsKIAogCiAgICAgaWYgKHBEZXZpY2UtPmR3RGlhZ1JlZkNvdW50ICE9IDApCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAocERldmljZS0+YkNtZFJ1bm5pbmcgIT0gVFJVRSkKKyAgICBpZiAocERldmljZS0+YkNtZFJ1bm5pbmcgIT0gdHJ1ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7CkBAIC0zNjQsNyArMzY1LDcgQEAKICAgICAgICAgY2FzZSBXTEFOX0NNRF9TQ0FOX1NUQVJUOgogCiAJcERldmljZS0+YnlSZUFzc29jQ291bnQgPSAwOwotICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJSYWRpb09mZiA9PSBUUlVFKSB7CisgICAgICAgICAgICBpZiAocERldmljZS0+YlJhZGlvT2ZmID09IHRydWUpIHsKICAgICAgICAgICAgICAgICBzX2JDb21tYW5kQ29tcGxldGUocERldmljZSk7CiAgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0zOTYsNyArMzk3LDcgQEAKIAogICAgICAgICAgICAgICAgIC8vIFNldCBCYXNlYmFuZCdzIHNlbnNpdGl2aXR5IGJhY2suCiAgICAgICAgICAgICAgICAgLy8gU2V0IGNoYW5uZWwgYmFjawotICAgICAgICAgICAgICAgIENBUkRiU2V0Q2hhbm5lbChwTWdtdC0+cEFkYXB0ZXIsIHBNZ210LT51Q3VyckNoYW5uZWwpOworICAgICAgICAgICAgICAgIHNldF9jaGFubmVsKHBNZ210LT5wQWRhcHRlciwgcE1nbXQtPnVDdXJyQ2hhbm5lbCk7CiAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiU2Nhbm5pbmcsIHNldCBiYWNrIHRvIGNoYW5uZWw6IFslZF1cbiIsIHBNZ210LT51Q3VyckNoYW5uZWwpOwogICAgICAgICAgICAgICAgIGlmIChwTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9JQlNTX1NUQSkgewogICAgICAgICAgICAgICAgICAgICBDQVJEYlNldEJTU0lEKHBNZ210LT5wQWRhcHRlciwgcE1nbXQtPmFieUN1cnJCU1NJRCwgT1BfTU9ERV9BREhPQyk7CkBAIC00MDgsNyArNDA5LDcgQEAKIAogICAgICAgICAgICAgfSBlbHNlIHsKIC8vMjAwOC04LTQgPGFkZD4gYnkgY2hlc3RlcgotICAgICAgICAgICAgICAgICBpZiAoIUNoYW5uZWxWYWxpZChwRGV2aWNlLT5ieVpvbmVUeXBlLCBwTWdtdC0+dVNjYW5DaGFubmVsKSkgeworCQlpZiAoIWlzX2NoYW5uZWxfdmFsaWQocE1nbXQtPnVTY2FuQ2hhbm5lbCkpIHsKICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiSW52YWxpZCBjaGFubmVsIHBNZ210LT51U2NhbkNoYW5uZWwgPSAlZCBcbiIscE1nbXQtPnVTY2FuQ2hhbm5lbCk7CiAgICAgICAgICAgICAgICAgICAgIHNfYkNvbW1hbmRDb21wbGV0ZShwRGV2aWNlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDMxLDcgKzQzMiw3IEBACiAKICAgICAgICAgICAgICAgICB2QWRIb2NCZWFjb25TdG9wKHBEZXZpY2UpOwogCi0gICAgICAgICAgICAgICAgaWYgKENBUkRiU2V0Q2hhbm5lbChwTWdtdC0+cEFkYXB0ZXIsIHBNZ210LT51U2NhbkNoYW5uZWwpID09IFRSVUUpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2V0X2NoYW5uZWwocE1nbXQtPnBBZGFwdGVyLCBwTWdtdC0+dVNjYW5DaGFubmVsKSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iU0NBTiBDaGFubmVsOiAlZFxuIiwgcE1nbXQtPnVTY2FuQ2hhbm5lbCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJTRVQgU0NBTiBDaGFubmVsIEZhaWw6ICVkXG4iLCBwTWdtdC0+dVNjYW5DaGFubmVsKTsKQEAgLTQ0MSw3ICs0NDIsNyBAQAogICAgICAgLy8gICAgICAgICAgcHJpbnRrKCJjaGVzdGVyLWNoPSVkXG4iLHBNZ210LT51U2NhbkNoYW5uZWwpOwogCXBNZ210LT51U2NhbkNoYW5uZWwrKzsKIC8vMjAwOC04LTQgPG1vZGlmeT4gYnkgY2hlc3RlcgotCSBpZiAoIUNoYW5uZWxWYWxpZChwRGV2aWNlLT5ieVpvbmVUeXBlLCBwTWdtdC0+dVNjYW5DaGFubmVsKSAmJgorCQlpZiAoIWlzX2NoYW5uZWxfdmFsaWQocE1nbXQtPnVTY2FuQ2hhbm5lbCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT51U2NhbkNoYW5uZWwgPD0gcERldmljZS0+YnlNYXhDaGFubmVsICl7CiAgICAgICAgICAgICAgICAgICAgIHBNZ210LT51U2NhbkNoYW5uZWw9cERldmljZS0+YnlNYXhDaGFubmVsKzE7CiAJCSBwTWdtdC0+ZUNvbW1hbmRTdGF0ZSA9IFdMQU5fQ01EX1NDQU5fRU5EOwpAQCAtNDQ5LDcgKzQ1MCw3IEBACiAgICAgICAgICAgICAgICAgfQogCiAKLSAgICAgICAgICAgICAgICBpZiAoKHBNZ210LT5iMTFoRW5hYmxlID09IEZBTFNFKSB8fAorICAgICAgICAgICAgICAgIGlmICgocE1nbXQtPmIxMWhFbmFibGUgPT0gZmFsc2UpIHx8CiAgICAgICAgICAgICAgICAgICAgIChwTWdtdC0+dVNjYW5DaGFubmVsIDwgQ0JfTUFYX0NIQU5ORUxfMjRHKSkgewogICAgICAgICAgICAgICAgICAgICBzX3ZQcm9iZUNoYW5uZWwocERldmljZSk7CiAgICAgICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CkBAIC00NjksNyArNDcwLDcgQEAKIAogICAgICAgICAgICAgLy8gU2V0IEJhc2ViYW5kJ3Mgc2Vuc2l0aXZpdHkgYmFjay4KICAgICAgICAgICAgIC8vIFNldCBjaGFubmVsIGJhY2sKLSAgICAgICAgICAgIENBUkRiU2V0Q2hhbm5lbChwTWdtdC0+cEFkYXB0ZXIsIHBNZ210LT51Q3VyckNoYW5uZWwpOworICAgICAgICAgICAgc2V0X2NoYW5uZWwocE1nbXQtPnBBZGFwdGVyLCBwTWdtdC0+dUN1cnJDaGFubmVsKTsKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlNjYW5uaW5nLCBzZXQgYmFjayB0byBjaGFubmVsOiBbJWRdXG4iLCBwTWdtdC0+dUN1cnJDaGFubmVsKTsKICAgICAgICAgICAgIGlmIChwTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9JQlNTX1NUQSkgewogICAgICAgICAgICAgICAgIENBUkRiU2V0QlNTSUQocE1nbXQtPnBBZGFwdGVyLCBwTWdtdC0+YWJ5Q3VyckJTU0lELCBPUF9NT0RFX0FESE9DKTsKQEAgLTUwMiwxNCArNTAzLDE0IEBACiAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJTZW5kIERpc2Fzc29jaWF0aW9uIFBhY2tldC4uXG4iKTsKICAgICAgICAgICAgICAgICAvLyByZWFzb24gPSA4IDogZGlzYXNzb2MgYmVjYXVzZSBzdGEgaGFzIGxlZnQKICAgICAgICAgICAgICAgICB2TWdyRGlzYXNzb2NCZWdpblN0YSgodm9pZCAqKXBEZXZpY2UsIHBNZ210LCBwTWdtdC0+YWJ5Q3VyckJTU0lELCAoOCksICZTdGF0dXMpOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IEZBTFNFOworICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IGZhbHNlOwogICAgICAgICAgICAgICAgIC8vIHVubG9jayBjb21tYW5kIGJ1c3kKICAgICAgICAgICAgICAgICBwSXRlbVNTSUQgPSAoUFdMQU5fSUVfU1NJRClwTWdtdC0+YWJ5Q3VyclNTSUQ7CiAgICAgICAgICAgICAgICAgcEl0ZW1TU0lELT5sZW4gPSAwOwogICAgICAgICAgICAgICAgIG1lbXNldChwSXRlbVNTSUQtPmFieVNTSUQsIDAsIFdMQU5fU1NJRF9NQVhMRU4pOwogICAgICAgICAgICAgICAgIHBNZ210LT5lQ3VyclN0YXRlID0gV01BQ19TVEFURV9JRExFOwotICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYkFjdGl2ZSA9IEZBTFNFOwotLy8gICAgICAgICAgICAgICAgcERldmljZS0+YkJlYWNvbkJ1ZlJlYWR5ID0gRkFMU0U7CisgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iQWN0aXZlID0gZmFsc2U7CisvLyAgICAgICAgICAgICAgICBwRGV2aWNlLT5iQmVhY29uQnVmUmVhZHkgPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG5ldGlmX3N0b3BfcXVldWUocERldmljZS0+ZGV2KTsKICAgICAgICAgICAgIHBEZXZpY2UtPmVDb21tYW5kU3RhdGUgPSBXTEFOX0RJU0FTU09DSUFURV9XQUlUOwpAQCAtNTM5LDcgKzU0MCw3IEBACiAKICAgICAgICAgY2FzZSBXTEFOX0NNRF9TU0lEX1NUQVJUOgogICAgICAgICAJcERldmljZS0+YnlSZUFzc29jQ291bnQgPSAwOwotICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJSYWRpb09mZiA9PSBUUlVFKSB7CisgICAgICAgICAgICBpZiAocERldmljZS0+YlJhZGlvT2ZmID09IHRydWUpIHsKICAgICAgICAgICAgICAgICBzX2JDb21tYW5kQ29tcGxldGUocERldmljZSk7CiAgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC01NzMsNyArNTc0LDcgQEAKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBuZXRpZl9zdG9wX3F1ZXVlKHBEZXZpY2UtPmRldik7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YkxpbmtQYXNzID0gRkFMU0U7CisgICAgICAgICAgICAgICAgcERldmljZS0+YkxpbmtQYXNzID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBzZXQgaW5pdGlhbCBzdGF0ZQogICAgICAgICAgICAgcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX0lETEU7CkBAIC02MDcsOSArNjA4LDkgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQocERldmljZS0+ZGV2KSl7CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpZl93YWtlX3F1ZXVlKHBEZXZpY2UtPmRldik7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YkxpbmtQYXNzID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YkxpbmtQYXNzID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJBY3RpdmUgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJBY3RpdmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlWzBdLnVJbkFjdGl2ZUNvdW50ID0gMDsKICAgICAgICAgICAgICAgICAgICAgYkNsZWFyQlNTSURfU0NBTihwRGV2aWNlKTsKICAgICAgICAgICAgICAgICB9CkBAIC02MzUsMTIgKzYzNiwxMiBAQAogICAgICAgICAgICAgICAgICAgICBpZiAobmV0aWZfcXVldWVfc3RvcHBlZChwRGV2aWNlLT5kZXYpKXsKICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGlmX3dha2VfcXVldWUocERldmljZS0+ZGV2KTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiRGlzY29ubmVjdCBTU0lEIG5vbmVcbiIpOwogCQkgICNpZmRlZiBXUEFfU1VQUExJQ0FOVF9EUklWRVJfV0VYVF9TVVBQT1JUCi0gICAgICAgICAgICAgICAgICAgIC8vIGlmKHBEZXZpY2UtPmJXUEFTdXBwV2V4dEVuYWJsZWQgPT0gVFJVRSkKKyAgICAgICAgICAgICAgICAgICAgLy8gaWYocERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9PSB0cnVlKQogICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgCXVuaW9uIGl3cmVxX2RhdGEgIHdycXU7CiAgICAgICAgICAgICAgICAgICAJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2YgKHdycXUpKTsKQEAgLTY4NSw3ICs2ODYsNyBAQAogCSAgICAgICAgICBwRGV2aWNlLT5ieUxpbmtXYWl0Q291bnQgPSAwOwogCQkgI2lmIDAKICAgICAgICAgICAgICAgICAgICAgICNpZmRlZiBXUEFfU1VQUExJQ0FOVF9EUklWRVJfV0VYVF9TVVBQT1JUCi0gICAgICAgICAgICAgICAgICAgIC8vIGlmKHBEZXZpY2UtPmJXUEFTdXBwV2V4dEVuYWJsZWQgPT0gVFJVRSkKKyAgICAgICAgICAgICAgICAgICAgLy8gaWYocERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9PSB0cnVlKQogICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgCXVuaW9uIGl3cmVxX2RhdGEgIHdycXU7CiAgICAgICAgICAgICAgICAgICAJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2YgKHdycXUpKTsKQEAgLTcwNyw3ICs3MDgsNyBAQAogICAgICAgICAgICAgICAgIGlmIChwTWdtdC0+ZUF1dGhlbk1vZGUgPj0gV01BQ19BVVRIX1dQQSkgewogICAgICAgICAgICAgICAgICAgICBLZXliUmVtb3ZlQWxsS2V5KCYocERldmljZS0+c0tleSksIHBEZXZpY2UtPmFieUJTU0lELCBwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YkxpbmtQYXNzID0gVFJVRTsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSB0cnVlOwogICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5TGlua1dhaXRDb3VudCA9IDA7CiAgICAgICAgICAgICAgICAgcERldmljZS0+YnlSZUFzc29jQ291bnQgPSAwOwogICAgICAgICAgICAgICAgIGJDbGVhckJTU0lEX1NDQU4ocERldmljZSk7CkBAIC03MTksMjAgKzcyMCwyMCBAQAogICAgICAgICAgICAgICAgICAgICBuZXRpZl93YWtlX3F1ZXVlKHBEZXZpY2UtPmRldik7CiAgICAgICAgICAgICAgICAgfQogCSAgICAgI2lmZGVmIFR4SW5TbGVlcAotCQkgaWYocERldmljZS0+SXNUeERhdGFUcmlnZ2VyICE9IEZBTFNFKSAgIHsgICAgLy9UeERhdGFUaW1lciBpcyBub3QgdHJpZ2dlcmVkIGF0IHRoZSBmaXJzdCB0aW1lCisJCSBpZihwRGV2aWNlLT5Jc1R4RGF0YVRyaWdnZXIgIT0gZmFsc2UpICAgeyAgICAvL1R4RGF0YVRpbWVyIGlzIG5vdCB0cmlnZ2VyZWQgYXQgdGhlIGZpcnN0IHRpbWUKICAgICAgICAgICAgICAgICAgICAgIC8vIHByaW50aygiUmUtaW5pdGlhbCBUeERhdGFUaW1lcioqKipcbiIpOwogCQkgICAgZGVsX3RpbWVyKCZwRGV2aWNlLT5zVGltZXJUeERhdGEpOwogICAgICAgICAgICAgICAgICAgICAgIGluaXRfdGltZXIoJnBEZXZpY2UtPnNUaW1lclR4RGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+c1RpbWVyVHhEYXRhLmRhdGEgPSAoVUxPTkcpcERldmljZTsKKyAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5zVGltZXJUeERhdGEuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBwRGV2aWNlOwogICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPnNUaW1lclR4RGF0YS5mdW5jdGlvbiA9IChUaW1lckZ1bmN0aW9uKUJTU3ZTZWNvbmRUeERhdGE7CiAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+c1RpbWVyVHhEYXRhLmV4cGlyZXMgPSBSVU5fQVQoMTAqSFopOyAgICAgIC8vMTBzIGNhbGxiYWNrCi0gICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+ZlR4RGF0YUluU2xlZXAgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5mVHhEYXRhSW5TbGVlcCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPm5UeERhdGFUaW1lQ291dCA9IDA7CiAJCSB9CiAJCSBlbHNlIHsKIAkJICAgLy8gcHJpbnRrKCJtaWtlOi0tPkZpcnN0IHRpbWUgdHJpZ2VyIFRpbWVyVHhEYXRhIEluU2xlZXBcbiIpOwogCQkgfQotCQlwRGV2aWNlLT5Jc1R4RGF0YVRyaWdnZXIgPSBUUlVFOworCQlwRGV2aWNlLT5Jc1R4RGF0YVRyaWdnZXIgPSB0cnVlOwogICAgICAgICAgICAgICAgIGFkZF90aW1lcigmcERldmljZS0+c1RpbWVyVHhEYXRhKTsKICAgICAgICAgICAgICAjZW5kaWYKICAgICAgICAgICAgIH0KQEAgLTc0OSw3ICs3NTAsNyBAQAogCSAgICAgICAgICBwRGV2aWNlLT5ieUxpbmtXYWl0Q291bnQgPSAwOwogCQkjaWYgMAogICAgICAgICAgICAgICAgICAgICAgI2lmZGVmIFdQQV9TVVBQTElDQU5UX0RSSVZFUl9XRVhUX1NVUFBPUlQKLSAgICAgICAgICAgICAgICAgICAgLy8gaWYocERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9PSBUUlVFKQorICAgICAgICAgICAgICAgICAgICAvLyBpZihwRGV2aWNlLT5iV1BBU3VwcFdleHRFbmFibGVkID09IHRydWUpCiAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAJdW5pb24gaXdyZXFfZGF0YSAgd3JxdTsKICAgICAgICAgICAgICAgICAgIAltZW1zZXQoJndycXUsIDAsIHNpemVvZiAod3JxdSkpOwpAQCAtNzcwLDE0ICs3NzEsMTQgQEAKICAgICAgICAgICAgICAgICBkZWxfdGltZXIoJnBNZ210LT5zVGltZXJTZWNvbmRDYWxsYmFjayk7CiAgICAgICAgICAgICAgICAgcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX0lETEU7CiAgICAgICAgICAgICAgICAgcE1nbXQtPmVDdXJyTW9kZSA9IFdNQUNfTU9ERV9TVEFOREJZOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IEZBTFNFOwotICAgICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iRW5hYmxlSG9zdFdFUCA9PSBUUlVFKQorICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iRW5hYmxlSG9zdFdFUCA9PSB0cnVlKQogICAgICAgICAgICAgICAgICAgICBCU1N2Q2xlYXJOb2RlREJUYWJsZShwRGV2aWNlLCAxKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIEJTU3ZDbGVhck5vZGVEQlRhYmxlKHBEZXZpY2UsIDApOwogICAgICAgICAgICAgICAgIHBEZXZpY2UtPnVBc3NvY0NvdW50ID0gMDsKICAgICAgICAgICAgICAgICBwTWdtdC0+ZUN1cnJTdGF0ZSA9IFdNQUNfU1RBVEVfSURMRTsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5iRml4UmF0ZSA9IEZBTFNFOworICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJGaXhSYXRlID0gZmFsc2U7CiAKICAgICAgICAgICAgICAgICB2TWdyQ3JlYXRlT3duSUJTUygodm9pZCAqKXBEZXZpY2UsICZTdGF0dXMpOwogICAgICAgICAgICAgICAgIGlmIChTdGF0dXMgIT0gQ01EX1NUQVRVU19TVUNDRVNTKXsKQEAgLTc5MSw3ICs3OTIsNyBAQAogICAgICAgICAgICAgICAgIGlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKHBEZXZpY2UtPmRldikpewogICAgICAgICAgICAgICAgICAgICBuZXRpZl93YWtlX3F1ZXVlKHBEZXZpY2UtPmRldik7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IFRSVUU7CisgICAgICAgICAgICAgICAgcERldmljZS0+YkxpbmtQYXNzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBhZGRfdGltZXIoJnBNZ210LT5zVGltZXJTZWNvbmRDYWxsYmFjayk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzX2JDb21tYW5kQ29tcGxldGUocERldmljZSk7CkBAIC04MDMsMTAgKzgwNCwxMCBAQAogICAgICAgICAgICAgICAgIHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJnBNZ210LT5zTm9kZURCVGFibGVbMF0uc1R4UFNRdWV1ZSkpICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHNrYl9xdWV1ZV9lbXB0eSgmcE1nbXQtPnNOb2RlREJUYWJsZVswXS5zVHhQU1F1ZXVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPmFieVBTVHhNYXBbMF0gJj0gfmJ5TWFza1swXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJNb3JlRGF0YSA9IEZBTFNFOworICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+Yk1vcmVEYXRhID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTW9yZURhdGEgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+Yk1vcmVEYXRhID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAoIWRldmljZV9kbWEwX3htaXQocERldmljZSwgc2tiLCAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiTXVsdGljYXN0IHBzIHR4IGZhaWwgXG4iKTsKQEAgLTgyNiwxMCArODI3LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xlYXIgdHggbWFwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPmFieVBTVHhNYXBbcE1nbXQtPnNOb2RlREJUYWJsZVtpaV0ud0FJRCA+PiAzXSAmPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfmJ5TWFza1twTWdtdC0+c05vZGVEQlRhYmxlW2lpXS53QUlEICYgN107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+Yk1vcmVEYXRhID0gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+Yk1vcmVEYXRhID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTW9yZURhdGEgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJNb3JlRGF0YSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRldmljZV9kbWEwX3htaXQocERldmljZSwgc2tiLCBpaSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJzdGEgcHMgdHggZmFpbCBcbiIpOwpAQCAtODQ2LDcgKzg0Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+YnlNYXNrW3BNZ210LT5zTm9kZURCVGFibGVbaWldLndBSUQgJiA3XTsKICAgICAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkluZGV4PSVkIFBTIHF1ZXVlIGNsZWFyIFxuIiwgaWkpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaWldLmJSeFBTUG9sbCA9IEZBTFNFOworICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW2lpXS5iUnhQU1BvbGwgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTg1Niw3ICs4NTcsNyBAQAogCiAgICAgICAgIGNhc2UgV0xBTl9DTURfUkFESU9fU1RBUlQgOgogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJlQ29tbWFuZFN0YXRlID09IFdMQU5fQ01EX1JBRElPX1NUQVJUXG4iKTsKLSAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iUmFkaW9DbWQgPT0gVFJVRSkKKyAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iUmFkaW9DbWQgPT0gdHJ1ZSkKICAgICAgICAgICAgICAgICBDQVJEYlJhZGlvUG93ZXJPbihwRGV2aWNlKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBDQVJEYlJhZGlvUG93ZXJPZmYocERldmljZSk7CkBAIC04OTYsMjMgKzg5NywyMyBAQAogCiAKIHN0YXRpYwotQk9PTAorYm9vbAogc19iQ29tbWFuZENvbXBsZXRlICgKICAgICBQU0RldmljZSBwRGV2aWNlCiAgICAgKQogewogICAgIFBXTEFOX0lFX1NTSUQgcFNTSUQ7Ci0gICAgQk9PTCAgICAgICAgICBiUmFkaW9DbWQgPSBGQUxTRTsKLSAgICAvL1dPUkQgICAgICAgICAgd0RlQXV0aGVuUmVhc29uID0gMDsKLSAgICBCT09MICAgICAgICAgIGJGb3JjZVNDQU4gPSBUUlVFOworICAgIGJvb2wgYlJhZGlvQ21kID0gZmFsc2U7CisgICAgLy91bnNpZ25lZCBzaG9ydCB3RGVBdXRoZW5SZWFzb24gPSAwOworICAgIGJvb2wgYkZvcmNlU0NBTiA9IHRydWU7CiAgICAgUFNNZ210T2JqZWN0ICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwogCiAKICAgICBwRGV2aWNlLT5lQ29tbWFuZFN0YXRlID0gV0xBTl9DTURfSURMRTsKICAgICBpZiAocERldmljZS0+Y2JGcmVlQ21kUXVldWUgPT0gQ01EX1FfU0laRSkgewogICAgICAgICAvL0NvbW1hbmQgUXVldWUgRW1wdHkKLSAgICAgICAgcERldmljZS0+YkNtZFJ1bm5pbmcgPSBGQUxTRTsKLSAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIHBEZXZpY2UtPmJDbWRSdW5uaW5nID0gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgcERldmljZS0+ZUNvbW1hbmQgPSBwRGV2aWNlLT5lQ21kUXVldWVbcERldmljZS0+dUNtZERlcXVldWVJZHhdLmVDbWQ7CkBAIC05MjEsNyArOTIyLDcgQEAKICAgICAgICAgYkZvcmNlU0NBTiA9IHBEZXZpY2UtPmVDbWRRdWV1ZVtwRGV2aWNlLT51Q21kRGVxdWV1ZUlkeF0uYkZvcmNlU0NBTjsKICAgICAgICAgQUREX09ORV9XSVRIX1dSQVBfQVJPVU5EKHBEZXZpY2UtPnVDbWREZXF1ZXVlSWR4LCBDTURfUV9TSVpFKTsKICAgICAgICAgcERldmljZS0+Y2JGcmVlQ21kUXVldWUrKzsKLSAgICAgICAgcERldmljZS0+YkNtZFJ1bm5pbmcgPSBUUlVFOworICAgICAgICBwRGV2aWNlLT5iQ21kUnVubmluZyA9IHRydWU7CiAgICAgICAgIHN3aXRjaCAoIHBEZXZpY2UtPmVDb21tYW5kICkgewogICAgICAgICAgICAgY2FzZSBXTEFOX0NNRF9CU1NJRF9TQ0FOOgogICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iZUNvbW1hbmRTdGF0ZT0gV0xBTl9DTURfQlNTSURfU0NBTlxuIik7CkBAIC05MzMsNyArOTM0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KHBNZ210LT5hYnlTY2FuU1NJRCwgMCwgV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1NTSURfTUFYTEVOICsgMSk7CiAgICAgICAgICAgICAgICAgfQogLyoKLSAgICAgICAgICAgICAgICBpZiAoKGJGb3JjZVNDQU4gPT0gRkFMU0UpICYmIChwRGV2aWNlLT5iTGlua1Bhc3MgPT0gVFJVRSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoKGJGb3JjZVNDQU4gPT0gZmFsc2UpICYmIChwRGV2aWNlLT5iTGlua1Bhc3MgPT0gdHJ1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKChwU1NJRC0+bGVuID09ICgoUFdMQU5fSUVfU1NJRClwTWdtdC0+YWJ5Q3VyclNTSUQpLT5sZW4pICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAoICFtZW1jbXAocFNTSUQtPmFieVNTSUQsICgoUFdMQU5fSUVfU1NJRClwTWdtdC0+YWJ5Q3VyclNTSUQpLT5hYnlTU0lELCBwU1NJRC0+bGVuKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmVDb21tYW5kU3RhdGUgPSBXTEFOX0NNRF9JRExFOwpAQCAtOTc0LDI1ICs5NzUsMjUgQEAKICAgICAgICAgdkNvbW1hbmRUaW1lcldhaXQoKHZvaWQgKilwRGV2aWNlLCAwKTsKICAgICB9CiAKLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCiAKLUJPT0wgYlNjaGVkdWxlQ29tbWFuZCAoCitib29sIGJTY2hlZHVsZUNvbW1hbmQgKAogICAgIHZvaWQgKmhEZXZpY2VDb250ZXh0LAogICAgIENNRF9DT0RFICAgIGVDb21tYW5kLAotICAgIFBCWVRFICAgICAgIHBieUl0ZW0wCisgICAgdW5zaWduZWQgY2hhciAqcGJ5SXRlbTAKICAgICApCiB7CiAgICAgUFNEZXZpY2UgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpaERldmljZUNvbnRleHQ7CiAKIAogICAgIGlmIChwRGV2aWNlLT5jYkZyZWVDbWRRdWV1ZSA9PSAwKSB7Ci0gICAgICAgIHJldHVybiAoRkFMU0UpOworICAgICAgICByZXR1cm4gKGZhbHNlKTsKICAgICB9CiAgICAgcERldmljZS0+ZUNtZFF1ZXVlW3BEZXZpY2UtPnVDbWRFbnF1ZXVlSWR4XS5lQ21kID0gZUNvbW1hbmQ7Ci0gICAgcERldmljZS0+ZUNtZFF1ZXVlW3BEZXZpY2UtPnVDbWRFbnF1ZXVlSWR4XS5iRm9yY2VTQ0FOID0gVFJVRTsKKyAgICBwRGV2aWNlLT5lQ21kUXVldWVbcERldmljZS0+dUNtZEVucXVldWVJZHhdLmJGb3JjZVNDQU4gPSB0cnVlOwogICAgIG1lbXNldChwRGV2aWNlLT5lQ21kUXVldWVbcERldmljZS0+dUNtZEVucXVldWVJZHhdLmFieUNtZERlc2lyZVNTSUQsIDAgLCBXTEFOX0lFSERSX0xFTiArIFdMQU5fU1NJRF9NQVhMRU4gKyAxKTsKIAogICAgIGlmIChwYnlJdGVtMCAhPSBOVUxMKSB7CkBAIC0xMDAxLDcgKzEwMDIsNyBAQAogICAgICAgICAgICAgY2FzZSBXTEFOX0NNRF9CU1NJRF9TQ0FOOgogICAgICAgICAgICAgICAgIG1lbWNweShwRGV2aWNlLT5lQ21kUXVldWVbcERldmljZS0+dUNtZEVucXVldWVJZHhdLmFieUNtZERlc2lyZVNTSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcGJ5SXRlbTAsIFdMQU5fSUVIRFJfTEVOICsgV0xBTl9TU0lEX01BWExFTiArIDEpOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmVDbWRRdWV1ZVtwRGV2aWNlLT51Q21kRW5xdWV1ZUlkeF0uYkZvcmNlU0NBTiA9IEZBTFNFOworICAgICAgICAgICAgICAgIHBEZXZpY2UtPmVDbWRRdWV1ZVtwRGV2aWNlLT51Q21kRW5xdWV1ZUlkeF0uYkZvcmNlU0NBTiA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFdMQU5fQ01EX1NTSUQ6CkBAIC0xMDE0LDcgKzEwMTUsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogLyoKICAgICAgICAgICAgIGNhc2UgV0xBTl9DTURfREVBVVRIOgotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmVDbWRRdWV1ZVtwRGV2aWNlLT51Q21kRW5xdWV1ZUlkeF0ud0RlQXV0aGVuUmVhc29uID0gKigoUFdPUkQpcGJ5SXRlbTApOworICAgICAgICAgICAgICAgIHBEZXZpY2UtPmVDbWRRdWV1ZVtwRGV2aWNlLT51Q21kRW5xdWV1ZUlkeF0ud0RlQXV0aGVuUmVhc29uID0gKigodW5zaWduZWQgc2hvcnQgKilwYnlJdGVtMCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAqLwogCkBAIC0xMDM3LDEyICsxMDM4LDEyIEBACiAgICAgQUREX09ORV9XSVRIX1dSQVBfQVJPVU5EKHBEZXZpY2UtPnVDbWRFbnF1ZXVlSWR4LCBDTURfUV9TSVpFKTsKICAgICBwRGV2aWNlLT5jYkZyZWVDbWRRdWV1ZS0tOwogCi0gICAgaWYgKHBEZXZpY2UtPmJDbWRSdW5uaW5nID09IEZBTFNFKSB7CisgICAgaWYgKHBEZXZpY2UtPmJDbWRSdW5uaW5nID09IGZhbHNlKSB7CiAgICAgICAgIHNfYkNvbW1hbmRDb21wbGV0ZShwRGV2aWNlKTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgfQotICAgIHJldHVybiAoVFJVRSk7CisgICAgcmV0dXJuICh0cnVlKTsKIAogfQogCkBAIC0xMDU3LDE2ICsxMDU4LDE2IEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIHN1Y2Nlc3M7IG90aGVyd2lzZSBGQUxTRQorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2Nlc3M7IG90aGVyd2lzZSBmYWxzZQogICoKICAqLwotQk9PTCBiQ2xlYXJCU1NJRF9TQ0FOICgKK2Jvb2wgYkNsZWFyQlNTSURfU0NBTiAoCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQKICAgICApCiB7CiAgICAgUFNEZXZpY2UgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpaERldmljZUNvbnRleHQ7Ci0gICAgVUlOVCAgICAgICAgICAgIHVDbWREZXF1ZXVlSWR4ID0gcERldmljZS0+dUNtZERlcXVldWVJZHg7Ci0gICAgVUlOVCAgICAgICAgICAgIGlpOworICAgIHVuc2lnbmVkIGludCB1Q21kRGVxdWV1ZUlkeCA9IHBEZXZpY2UtPnVDbWREZXF1ZXVlSWR4OworICAgIHVuc2lnbmVkIGludCBpaTsKIAogICAgIGlmICgocERldmljZS0+Y2JGcmVlQ21kUXVldWUgPCBDTURfUV9TSVpFKSAmJiAodUNtZERlcXVldWVJZHggIT0gcERldmljZS0+dUNtZEVucXVldWVJZHgpKSB7CiAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IChDTURfUV9TSVpFIC0gcERldmljZS0+Y2JGcmVlQ21kUXVldWUpOyBpaSArKykgewpAQCAtMTA3Nyw3ICsxMDc4LDcgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy9taWtlIGFkZDpyZXNldCBjb21tYW5kIHRpbWVyCkBAIC0xMDkyLDE1ICsxMDkzLDE1IEBACiAgICAgICBkZWxfdGltZXIoJnBEZXZpY2UtPnNUaW1lckNvbW1hbmQpOwogICAvL2luaXQgdGltZXIKICAgICAgIGluaXRfdGltZXIoJnBEZXZpY2UtPnNUaW1lckNvbW1hbmQpOwotICAgIHBEZXZpY2UtPnNUaW1lckNvbW1hbmQuZGF0YSA9IChVTE9ORylwRGV2aWNlOworICAgIHBEZXZpY2UtPnNUaW1lckNvbW1hbmQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBwRGV2aWNlOwogICAgIHBEZXZpY2UtPnNUaW1lckNvbW1hbmQuZnVuY3Rpb24gPSAoVGltZXJGdW5jdGlvbil2Q29tbWFuZFRpbWVyOwogICAgIHBEZXZpY2UtPnNUaW1lckNvbW1hbmQuZXhwaXJlcyA9IFJVTl9BVChIWik7CiAgICAgcERldmljZS0+Y2JGcmVlQ21kUXVldWUgPSBDTURfUV9TSVpFOwogICAgIHBEZXZpY2UtPnVDbWREZXF1ZXVlSWR4ID0gMDsKICAgICBwRGV2aWNlLT51Q21kRW5xdWV1ZUlkeCA9IDA7CiAgICAgcERldmljZS0+ZUNvbW1hbmRTdGF0ZSA9IFdMQU5fQ01EX0lETEU7Ci0gICAgcERldmljZS0+YkNtZFJ1bm5pbmcgPSBGQUxTRTsKLSAgICBwRGV2aWNlLT5iQ21kQ2xlYXIgPSBGQUxTRTsKKyAgICBwRGV2aWNlLT5iQ21kUnVubmluZyA9IGZhbHNlOworICAgIHBEZXZpY2UtPmJDbWRDbGVhciA9IGZhbHNlOwogfQogCiAKQEAgLTExMjUsMTYgKzExMjYsMTYgQEAKIAogICBzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKICAgI2lmIDEKLSAgaWYoKChwRGV2aWNlLT5iTGlua1Bhc3MgPT1UUlVFKSYmKHBNZ210LT5lQXV0aGVuTW9kZSA8IFdNQUNfQVVUSF9XUEEpKSB8fCAgLy9vcGVuICYmIHNoYXJla2V5IGxpbmtpbmcKLSAgICAgIChwRGV2aWNlLT5mV1BBX0F1dGhlbmVkID09IFRSVUUpKSB7ICAgLy93cGEgbGlua2luZworICBpZigoKHBEZXZpY2UtPmJMaW5rUGFzcyA9PXRydWUpJiYocE1nbXQtPmVBdXRoZW5Nb2RlIDwgV01BQ19BVVRIX1dQQSkpIHx8ICAvL29wZW4gJiYgc2hhcmVrZXkgbGlua2luZworICAgICAgKHBEZXZpY2UtPmZXUEFfQXV0aGVuZWQgPT0gdHJ1ZSkpIHsgICAvL3dwYSBsaW5raW5nCiAgI2Vsc2UKLSAgaWYocERldmljZS0+YkxpbmtQYXNzID09VFJVRSkgeworICBpZihwRGV2aWNlLT5iTGlua1Bhc3MgPT10cnVlKSB7CiAgI2VuZGlmCiAKICAgICAgICAgLy8gICBwcmludGsoIm1pa2U6JXMtLT5JblNsZWVwIFR4IERhdGEgUHJvY2VkdXJlXG4iLF9fRlVOQ1RJT05fXyk7Ci0JICBwRGV2aWNlLT5mVHhEYXRhSW5TbGVlcCA9IFRSVUU7CisJICBwRGV2aWNlLT5mVHhEYXRhSW5TbGVlcCA9IHRydWU7CiAJICBQU2JTZW5kTnVsbFBhY2tldChwRGV2aWNlKTsgICAgICAvL3NlbmQgbnVsbCBwYWNrZXQKLQkgIHBEZXZpY2UtPmZUeERhdGFJblNsZWVwID0gRkFMU0U7CisJICBwRGV2aWNlLT5mVHhEYXRhSW5TbGVlcCA9IGZhbHNlOwogICAJfQogICBzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3djbWQuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd2NtZC5oCmluZGV4IGMzYzQxODAuLjY5ZDRmYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd2NtZC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd2NtZC5oCkBAIC03NSwxMSArNzUsMTEgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnQ01EX0lURU0gewogICAgIENNRF9DT0RFIGVDbWQ7Ci0gICAgQllURSAgICAgYWJ5Q21kRGVzaXJlU1NJRFtXTEFOX0lFSERSX0xFTiArIFdMQU5fU1NJRF9NQVhMRU4gKyAxXTsKLSAgICBCT09MICAgICBiTmVlZFJhZGlvT0ZGOwotICAgIFdPUkQgICAgIHdEZUF1dGhlblJlYXNvbjsKLSAgICBCT09MICAgICBiUmFkaW9DbWQ7Ci0gICAgQk9PTCAgICAgYkZvcmNlU0NBTjsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUNtZERlc2lyZVNTSURbV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1NTSURfTUFYTEVOICsgMV07CisgICAgYm9vbCBiTmVlZFJhZGlvT0ZGOworICAgIHVuc2lnbmVkIHNob3J0IHdEZUF1dGhlblJlYXNvbjsKKyAgICBib29sIGJSYWRpb0NtZDsKKyAgICBib29sIGJGb3JjZVNDQU47CiB9IENNRF9JVEVNLCAqUENNRF9JVEVNOwogCiAvLyBDb21tYW5kIHN0YXRlCkBAIC0xMTksMjEgKzExOSwyMSBAQAogICAgIHZvaWQgKmhEZXZpY2VDb250ZXh0CiAgICAgKTsKIAotQk9PTCBiQ2xlYXJCU1NJRF9TQ0FOKAorYm9vbCBiQ2xlYXJCU1NJRF9TQ0FOKAogICAgIHZvaWQgKmhEZXZpY2VDb250ZXh0CiAgICAgKTsKIAotQk9PTAorYm9vbAogYlNjaGVkdWxlQ29tbWFuZCgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKICAgICBDTURfQ09ERSAgICBlQ29tbWFuZCwKLSAgICBQQllURSAgICAgICBwYnlJdGVtMAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUl0ZW0wCiAgICAgKTsKIAogdm9pZAogdkNvbW1hbmRUaW1lcldhaXQoCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQsCi0gICAgVUlOVCBNU2Vjb25kCisgICAgdW5zaWduZWQgaW50IE1TZWNvbmQKICAgICApOwogI2lmZGVmIFR4SW5TbGVlcAogdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93Y3RsLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3djdGwuYwppbmRleCA2NGE2NmIyLi5jMDk2NTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3djdGwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3djdGwuYwpAQCAtNTIsOCArNTIsOCBAQAogCiAvKgogICogRGVzY3JpcHRpb246Ci0gKiAgICAgIFNjYW4gUnggY2FjaGUuICBSZXR1cm4gVFJVRSBpZiBwYWNrZXQgaXMgZHVwbGljYXRlLCBlbHNlCi0gKiAgICAgIGluc2VydHMgaW4gcmVjZWl2ZSBjYWNoZSBhbmQgcmV0dXJucyBGQUxTRS4KKyAqICAgICAgU2NhbiBSeCBjYWNoZS4gIFJldHVybiB0cnVlIGlmIHBhY2tldCBpcyBkdXBsaWNhdGUsIGVsc2UKKyAqICAgICAgaW5zZXJ0cyBpbiByZWNlaXZlIGNhY2hlIGFuZCByZXR1cm5zIGZhbHNlLgogICoKICAqIFBhcmFtZXRlcnM6CiAgKiAgSW46CkBAIC02MiwxNCArNjIsMTQgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgcGFja2V0IGR1cGxpY2F0ZTsgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgcGFja2V0IGR1cGxpY2F0ZTsgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCiAKLUJPT0wgV0NUTGJJc0R1cGxpY2F0ZSAoUFNDYWNoZSBwQ2FjaGUsIFBTODAyXzExSGVhZGVyIHBNQUNIZWFkZXIpCitib29sIFdDVExiSXNEdXBsaWNhdGUgKFBTQ2FjaGUgcENhY2hlLCBQUzgwMl8xMUhlYWRlciBwTUFDSGVhZGVyKQogewotICAgIFVJTlQgICAgICAgICAgICB1SW5kZXg7Ci0gICAgVUlOVCAgICAgICAgICAgIGlpOworICAgIHVuc2lnbmVkIGludCB1SW5kZXg7CisgICAgdW5zaWduZWQgaW50IGlpOwogICAgIFBTQ2FjaGVFbnRyeSAgICBwQ2FjaGVFbnRyeTsKIAogICAgIGlmIChJU19GQ19SRVRSWShwTUFDSGVhZGVyKSkgewpAQCAtNzgsMTAgKzc4LDEwIEBACiAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IERVUExJQ0FURV9SWF9DQUNIRV9MRU5HVEg7IGlpKyspIHsKICAgICAgICAgICAgIHBDYWNoZUVudHJ5ID0gJihwQ2FjaGUtPmFzQ2FjaGVFbnRyeVt1SW5kZXhdKTsKICAgICAgICAgICAgIGlmICgocENhY2hlRW50cnktPndGbVNlcXVlbmNlID09IHBNQUNIZWFkZXItPndTZXFDdGwpICYmCi0gICAgICAgICAgICAgICAgKElTX0VUSF9BRERSRVNTX0VRVUFMICgmKHBDYWNoZUVudHJ5LT5hYnlBZGRyMlswXSksICYocE1BQ0hlYWRlci0+YWJ5QWRkcjJbMF0pKSkKKyAgICAgICAgICAgICAgICAoIWNvbXBhcmVfZXRoZXJfYWRkcigmKHBDYWNoZUVudHJ5LT5hYnlBZGRyMlswXSksICYocE1BQ0hlYWRlci0+YWJ5QWRkcjJbMF0pKSkKICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAvKiBEdXBsaWNhdGUgbWF0Y2ggKi8KLSAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFERF9PTkVfV0lUSF9XUkFQX0FST1VORCh1SW5kZXgsIERVUExJQ0FURV9SWF9DQUNIRV9MRU5HVEgpOwogICAgICAgICB9CkBAIC05MSw3ICs5MSw3IEBACiAgICAgcENhY2hlRW50cnktPndGbVNlcXVlbmNlID0gcE1BQ0hlYWRlci0+d1NlcUN0bDsKICAgICBtZW1jcHkoJihwQ2FjaGVFbnRyeS0+YWJ5QWRkcjJbMF0pLCAmKHBNQUNIZWFkZXItPmFieUFkZHIyWzBdKSwgRVRIX0FMRU4pOwogICAgIEFERF9PTkVfV0lUSF9XUkFQX0FST1VORChwQ2FjaGUtPnVJblB0ciwgRFVQTElDQVRFX1JYX0NBQ0hFX0xFTkdUSCk7Ci0gICAgcmV0dXJuIEZBTFNFOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogLyoKQEAgLTEwOCwxMyArMTA4LDEzIEBACiAgKiBSZXR1cm4gVmFsdWU6IGluZGV4IG51bWJlciBpbiBEZWZyYWdtZW50IERhdGFiYXNlCiAgKgogICovCi1VSU5UIFdDVEx1U2VhcmNoREZDQiAoUFNEZXZpY2UgcERldmljZSwgUFM4MDJfMTFIZWFkZXIgcE1BQ0hlYWRlcikKK3Vuc2lnbmVkIGludCBXQ1RMdVNlYXJjaERGQ0IgKFBTRGV2aWNlIHBEZXZpY2UsIFBTODAyXzExSGVhZGVyIHBNQUNIZWFkZXIpCiB7Ci1VSU5UIGlpOwordW5zaWduZWQgaW50IGlpOwogCiAgICAgZm9yKGlpPTA7aWk8cERldmljZS0+Y2JERkNCO2lpKyspIHsKLSAgICAgICAgaWYgKChwRGV2aWNlLT5zUnhERkNCW2lpXS5iSW5Vc2UgPT0gVFJVRSkgJiYKLSAgICAgICAgICAgIChJU19FVEhfQUREUkVTU19FUVVBTCAoJihwRGV2aWNlLT5zUnhERkNCW2lpXS5hYnlBZGRyMlswXSksICYocE1BQ0hlYWRlci0+YWJ5QWRkcjJbMF0pKSkKKyAgICAgICAgaWYgKChwRGV2aWNlLT5zUnhERkNCW2lpXS5iSW5Vc2UgPT0gdHJ1ZSkgJiYKKyAgICAgICAgICAgICghY29tcGFyZV9ldGhlcl9hZGRyKCYocERldmljZS0+c1J4REZDQltpaV0uYWJ5QWRkcjJbMF0pLCAmKHBNQUNIZWFkZXItPmFieUFkZHIyWzBdKSkpCiAgICAgICAgICAgICApIHsKICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICByZXR1cm4oaWkpOwpAQCAtMTM4LDE3ICsxMzgsMTcgQEAKICAqIFJldHVybiBWYWx1ZTogaW5kZXggbnVtYmVyIGluIERlZnJhZ21lbnQgRGF0YWJhc2UKICAqCiAgKi8KLVVJTlQgV0NUTHVJbnNlcnRERkNCIChQU0RldmljZSBwRGV2aWNlLCBQUzgwMl8xMUhlYWRlciBwTUFDSGVhZGVyKQordW5zaWduZWQgaW50IFdDVEx1SW5zZXJ0REZDQiAoUFNEZXZpY2UgcERldmljZSwgUFM4MDJfMTFIZWFkZXIgcE1BQ0hlYWRlcikKIHsKLVVJTlQgaWk7Cit1bnNpZ25lZCBpbnQgaWk7CiAKICAgICBpZiAocERldmljZS0+Y2JGcmVlREZDQiA9PSAwKQogICAgICAgICByZXR1cm4ocERldmljZS0+Y2JERkNCKTsKICAgICBmb3IoaWk9MDtpaTxwRGV2aWNlLT5jYkRGQ0I7aWkrKykgewotICAgICAgICBpZiAocERldmljZS0+c1J4REZDQltpaV0uYkluVXNlID09IEZBTFNFKSB7CisgICAgICAgIGlmIChwRGV2aWNlLT5zUnhERkNCW2lpXS5iSW5Vc2UgPT0gZmFsc2UpIHsKICAgICAgICAgICAgIHBEZXZpY2UtPmNiRnJlZURGQ0ItLTsKICAgICAgICAgICAgIHBEZXZpY2UtPnNSeERGQ0JbaWldLnVMaWZldGltZSA9IHBEZXZpY2UtPmR3TWF4UmVjZWl2ZUxpZmV0aW1lOwotICAgICAgICAgICAgcERldmljZS0+c1J4REZDQltpaV0uYkluVXNlID0gVFJVRTsKKyAgICAgICAgICAgIHBEZXZpY2UtPnNSeERGQ0JbaWldLmJJblVzZSA9IHRydWU7CiAgICAgICAgICAgICBwRGV2aWNlLT5zUnhERkNCW2lpXS53U2VxdWVuY2UgPSAocE1BQ0hlYWRlci0+d1NlcUN0bCA+PiA0KTsKICAgICAgICAgICAgIHBEZXZpY2UtPnNSeERGQ0JbaWldLndGcmFnTnVtID0gKHBNQUNIZWFkZXItPndTZXFDdGwgJiAweDAwMEYpOwogICAgICAgICAgICAgbWVtY3B5KCYocERldmljZS0+c1J4REZDQltpaV0uYWJ5QWRkcjJbMF0pLCAmKHBNQUNIZWFkZXItPmFieUFkZHIyWzBdKSwgRVRIX0FMRU4pOwpAQCAtMTcyLDE1ICsxNzIsMTUgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgaXQgaXMgdmFsaWQgZnJhZ21lbnQgcGFja2V0IGFuZCB3ZSBoYXZlIHJlc291cmNlIHRvIGRlZnJhZ21lbnQ7IG90aGVyd2lzZSBGQUxTRQorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIGl0IGlzIHZhbGlkIGZyYWdtZW50IHBhY2tldCBhbmQgd2UgaGF2ZSByZXNvdXJjZSB0byBkZWZyYWdtZW50OyBvdGhlcndpc2UgZmFsc2UKICAqCiAgKi8KLUJPT0wgV0NUTGJIYW5kbGVGcmFnbWVudCAoUFNEZXZpY2UgcERldmljZSwgUFM4MDJfMTFIZWFkZXIgcE1BQ0hlYWRlciwgVUlOVCBjYkZyYW1lTGVuZ3RoLCBCT09MIGJXRVAsIEJPT0wgYkV4dElWKQorYm9vbCBXQ1RMYkhhbmRsZUZyYWdtZW50IChQU0RldmljZSBwRGV2aWNlLCBQUzgwMl8xMUhlYWRlciBwTUFDSGVhZGVyLCB1bnNpZ25lZCBpbnQgY2JGcmFtZUxlbmd0aCwgYm9vbCBiV0VQLCBib29sIGJFeHRJVikKIHsKLVVJTlQgICAgICAgICAgICB1SGVhZGVyU2l6ZTsKK3Vuc2lnbmVkIGludCB1SGVhZGVyU2l6ZTsKIAogCi0gICAgaWYgKGJXRVAgPT0gVFJVRSkgeworICAgIGlmIChiV0VQID09IHRydWUpIHsKICAgICAgICAgdUhlYWRlclNpemUgPSAyODsKICAgICAgICAgaWYgKGJFeHRJVikKICAgICAgICAgLy8gRXh0SVYKQEAgLTIwMSwxNyArMjAxLDE3IEBACiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcERldmljZS0+dUN1cnJlbnRERkNCSWR4ID0gV0NUTHVJbnNlcnRERkNCKHBEZXZpY2UsIHBNQUNIZWFkZXIpOwogICAgICAgICAgICAgaWYgKHBEZXZpY2UtPnVDdXJyZW50REZDQklkeCA9PSBwRGV2aWNlLT5jYkRGQ0IpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4oRkFMU0UpOworICAgICAgICAgICAgICAgIHJldHVybihmYWxzZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgLy8gcmVzZXJ2ZSA0IGJ5dGUgdG8gbWF0Y2ggTUFDIFJYIEJ1ZmZlcgotICAgICAgICBwRGV2aWNlLT5zUnhERkNCW3BEZXZpY2UtPnVDdXJyZW50REZDQklkeF0ucGJ5UnhCdWZmZXIgPSAoUEJZVEUpIChwRGV2aWNlLT5zUnhERkNCW3BEZXZpY2UtPnVDdXJyZW50REZDQklkeF0uc2tiLT5kYXRhICsgNCk7CisgICAgICAgIHBEZXZpY2UtPnNSeERGQ0JbcERldmljZS0+dUN1cnJlbnRERkNCSWR4XS5wYnlSeEJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIChwRGV2aWNlLT5zUnhERkNCW3BEZXZpY2UtPnVDdXJyZW50REZDQklkeF0uc2tiLT5kYXRhICsgNCk7CiAgICAgICAgIG1lbWNweShwRGV2aWNlLT5zUnhERkNCW3BEZXZpY2UtPnVDdXJyZW50REZDQklkeF0ucGJ5UnhCdWZmZXIsIHBNQUNIZWFkZXIsIGNiRnJhbWVMZW5ndGgpOwogICAgICAgICBwRGV2aWNlLT5zUnhERkNCW3BEZXZpY2UtPnVDdXJyZW50REZDQklkeF0uY2JGcmFtZUxlbmd0aCA9IGNiRnJhbWVMZW5ndGg7CiAgICAgICAgIHBEZXZpY2UtPnNSeERGQ0JbcERldmljZS0+dUN1cnJlbnRERkNCSWR4XS5wYnlSeEJ1ZmZlciArPSBjYkZyYW1lTGVuZ3RoOwogICAgICAgICBwRGV2aWNlLT5zUnhERkNCW3BEZXZpY2UtPnVDdXJyZW50REZDQklkeF0ud0ZyYWdOdW0rKzsKICAgICAgICAgLy9EQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJGaXJzdCBwRGV2aWNlLT51Q3VycmVudERGQ0JJZHg9ICVkXG4iLCBwRGV2aWNlLT51Q3VycmVudERGQ0JJZHgpOwotICAgICAgICByZXR1cm4oRkFMU0UpOworICAgICAgICByZXR1cm4oZmFsc2UpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgcERldmljZS0+dUN1cnJlbnRERkNCSWR4ID0gV0NUTHVTZWFyY2hERkNCKHBEZXZpY2UsIHBNQUNIZWFkZXIpOwpAQCAtMjIwLDcgKzIyMCw3IEBACiAgICAgICAgICAgICAgICAgKHBEZXZpY2UtPnNSeERGQ0JbcERldmljZS0+dUN1cnJlbnRERkNCSWR4XS53RnJhZ051bSA9PSAocE1BQ0hlYWRlci0+d1NlcUN0bCAmIDB4MDAwRikpICYmCiAgICAgICAgICAgICAgICAgKChwRGV2aWNlLT5zUnhERkNCW3BEZXZpY2UtPnVDdXJyZW50REZDQklkeF0uY2JGcmFtZUxlbmd0aCArIGNiRnJhbWVMZW5ndGggLSB1SGVhZGVyU2l6ZSkgPCAyMzQ2KSkgewogCi0gICAgICAgICAgICAgICAgbWVtY3B5KHBEZXZpY2UtPnNSeERGQ0JbcERldmljZS0+dUN1cnJlbnRERkNCSWR4XS5wYnlSeEJ1ZmZlciwgKChQQllURSkgKHBNQUNIZWFkZXIpICsgdUhlYWRlclNpemUpLCAoY2JGcmFtZUxlbmd0aCAtIHVIZWFkZXJTaXplKSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KHBEZXZpY2UtPnNSeERGQ0JbcERldmljZS0+dUN1cnJlbnRERkNCSWR4XS5wYnlSeEJ1ZmZlciwgKCh1bnNpZ25lZCBjaGFyICopIChwTUFDSGVhZGVyKSArIHVIZWFkZXJTaXplKSwgKGNiRnJhbWVMZW5ndGggLSB1SGVhZGVyU2l6ZSkpOwogICAgICAgICAgICAgICAgIHBEZXZpY2UtPnNSeERGQ0JbcERldmljZS0+dUN1cnJlbnRERkNCSWR4XS5jYkZyYW1lTGVuZ3RoICs9IChjYkZyYW1lTGVuZ3RoIC0gdUhlYWRlclNpemUpOwogICAgICAgICAgICAgICAgIHBEZXZpY2UtPnNSeERGQ0JbcERldmljZS0+dUN1cnJlbnRERkNCSWR4XS5wYnlSeEJ1ZmZlciArPSAoY2JGcmFtZUxlbmd0aCAtIHVIZWFkZXJTaXplKTsKICAgICAgICAgICAgICAgICBwRGV2aWNlLT5zUnhERkNCW3BEZXZpY2UtPnVDdXJyZW50REZDQklkeF0ud0ZyYWdOdW0rKzsKQEAgLTIyOSwyMSArMjI5LDIxIEBACiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBzZXEgZXJyb3Igb3IgZnJhZyAjIGVycm9yIGZsdXNoIERGQ0IKICAgICAgICAgICAgICAgICBwRGV2aWNlLT5jYkZyZWVERkNCKys7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+c1J4REZDQltwRGV2aWNlLT51Q3VycmVudERGQ0JJZHhdLmJJblVzZSA9IEZBTFNFOwotICAgICAgICAgICAgICAgIHJldHVybihGQUxTRSk7CisgICAgICAgICAgICAgICAgcERldmljZS0+c1J4REZDQltwRGV2aWNlLT51Q3VycmVudERGQ0JJZHhdLmJJblVzZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybihmYWxzZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4oRkFMU0UpOworICAgICAgICAgICAgcmV0dXJuKGZhbHNlKTsKICAgICAgICAgfQogICAgICAgICBpZiAoSVNfTEFTVF9GUkFHTUVOVF9QS1QocE1BQ0hlYWRlcikpIHsKICAgICAgICAgICAgIC8vZW5xIGRlZnJhZ2NvbnRyb2xibG9jawogICAgICAgICAgICAgcERldmljZS0+Y2JGcmVlREZDQisrOwotICAgICAgICAgICAgcERldmljZS0+c1J4REZDQltwRGV2aWNlLT51Q3VycmVudERGQ0JJZHhdLmJJblVzZSA9IEZBTFNFOworICAgICAgICAgICAgcERldmljZS0+c1J4REZDQltwRGV2aWNlLT51Q3VycmVudERGQ0JJZHhdLmJJblVzZSA9IGZhbHNlOwogICAgICAgICAgICAgLy9EQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJMYXN0IHBEZXZpY2UtPnVDdXJyZW50REZDQklkeD0gJWRcbiIsIHBEZXZpY2UtPnVDdXJyZW50REZDQklkeCk7Ci0gICAgICAgICAgICByZXR1cm4oVFJVRSk7CisgICAgICAgICAgICByZXR1cm4odHJ1ZSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuKEZBTFNFKTsKKyAgICAgICAgcmV0dXJuKGZhbHNlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd2N0bC5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93Y3RsLmgKaW5kZXggYTFhYzQ3OS4uYTkyYmI2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93Y3RsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93Y3RsLmgKQEAgLTk3LDEwICs5NywxMSBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1CT09MIFdDVExiSXNEdXBsaWNhdGUoUFNDYWNoZSBwQ2FjaGUsIFBTODAyXzExSGVhZGVyIHBNQUNIZWFkZXIpOwotQk9PTCBXQ1RMYkhhbmRsZUZyYWdtZW50KFBTRGV2aWNlIHBEZXZpY2UsIFBTODAyXzExSGVhZGVyIHBNQUNIZWFkZXIsIFVJTlQgY2JGcmFtZUxlbmd0aCwgQk9PTCBiV0VQLCBCT09MIGJFeHRJVik7Ci1VSU5UIFdDVEx1U2VhcmNoREZDQihQU0RldmljZSBwRGV2aWNlLCBQUzgwMl8xMUhlYWRlciBwTUFDSGVhZGVyKTsKLVVJTlQgV0NUTHVJbnNlcnRERkNCKFBTRGV2aWNlIHBEZXZpY2UsIFBTODAyXzExSGVhZGVyIHBNQUNIZWFkZXIpOworYm9vbCBXQ1RMYklzRHVwbGljYXRlKFBTQ2FjaGUgcENhY2hlLCBQUzgwMl8xMUhlYWRlciBwTUFDSGVhZGVyKTsKK2Jvb2wgV0NUTGJIYW5kbGVGcmFnbWVudChQU0RldmljZSBwRGV2aWNlLCBQUzgwMl8xMUhlYWRlciBwTUFDSGVhZGVyLAorCQl1bnNpZ25lZCBpbnQgY2JGcmFtZUxlbmd0aCwgYm9vbCBiV0VQLCBib29sIGJFeHRJVik7Cit1bnNpZ25lZCBpbnQgV0NUTHVTZWFyY2hERkNCKFBTRGV2aWNlIHBEZXZpY2UsIFBTODAyXzExSGVhZGVyIHBNQUNIZWFkZXIpOwordW5zaWduZWQgaW50IFdDVEx1SW5zZXJ0REZDQihQU0RldmljZSBwRGV2aWNlLCBQUzgwMl8xMUhlYWRlciBwTUFDSGVhZGVyKTsKIAogI2VuZGlmIC8vIF9fV0NUTF9IX18KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93bWdyLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dtZ3IuYwppbmRleCA4YWYzNTZmLi5lNTQwMTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dtZ3IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dtZ3IuYwpAQCAtNjUsNiArNjUsNyBAQAogI2luY2x1ZGUgImRlc2MuaCIKICNpbmNsdWRlICJkZXZpY2UuaCIKICNpbmNsdWRlICJjYXJkLmgiCisjaW5jbHVkZSAiY2hhbm5lbC5oIgogI2luY2x1ZGUgIjgwMjExaGRyLmgiCiAjaW5jbHVkZSAiODAyMTFtZ3IuaCIKICNpbmNsdWRlICJ3bWdyLmgiCkBAIC05Myw5ICs5NCw5IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvLzIwMDgtOC00IDxhZGQ+IGJ5IGNoZXN0ZXIKLXN0YXRpYyBCT09MIENoYW5uZWxFeGNlZWRab25lVHlwZSgKK3N0YXRpYyBib29sIENoYW5uZWxFeGNlZWRab25lVHlwZSgKICAgICBQU0RldmljZSBwRGV2aWNlLAotICAgIEJZVEUgYnlDdXJyQ2hhbm5lbAorICAgIHVuc2lnbmVkIGNoYXIgYnlDdXJyQ2hhbm5lbAogICAgICk7CiAKIC8vIEFzc29jaWF0aW9uL2RpYXNzb2NpYXRpb24gZnVuY3Rpb25zCkBAIC0xMDQsOSArMTA1LDkgQEAKIHNfTWdyTWFrZUFzc29jUmVxdWVzdCgKICAgICBQU0RldmljZSBwRGV2aWNlLAogICAgIFBTTWdtdE9iamVjdCBwTWdtdCwKLSAgICBQQllURSBwREFkZHIsCi0gICAgV09SRCB3Q3VyckNhcEluZm8sCi0gICAgV09SRCB3TGlzdGVuSW50ZXJ2YWwsCisgICAgdW5zaWduZWQgY2hhciAqcERBZGRyLAorICAgIHVuc2lnbmVkIHNob3J0IHdDdXJyQ2FwSW5mbywKKyAgICB1bnNpZ25lZCBzaG9ydCB3TGlzdGVuSW50ZXJ2YWwsCiAgICAgUFdMQU5fSUVfU1NJRCBwQ3VyclNTSUQsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwQ3VyclJhdGVzLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEN1cnJFeHRTdXBwUmF0ZXMKQEAgLTExOCw3ICsxMTksNyBAQAogICAgIFBTRGV2aWNlIHBEZXZpY2UsCiAgICAgUFNNZ210T2JqZWN0IHBNZ210LAogICAgIFBTUnhNZ210UGFja2V0IHBSeFBhY2tldCwKLSAgICBVSU5UICB1Tm9kZUluZGV4CisgICAgdW5zaWduZWQgaW50IHVOb2RlSW5kZXgKICAgICApOwogCiBzdGF0aWMKQEAgLTEyNiw5ICsxMjcsOSBAQAogc19NZ3JNYWtlUmVBc3NvY1JlcXVlc3QoCiAgICAgUFNEZXZpY2UgcERldmljZSwKICAgICBQU01nbXRPYmplY3QgcE1nbXQsCi0gICAgUEJZVEUgcERBZGRyLAotICAgIFdPUkQgd0N1cnJDYXBJbmZvLAotICAgIFdPUkQgd0xpc3RlbkludGVydmFsLAorICAgIHVuc2lnbmVkIGNoYXIgKnBEQWRkciwKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VyckNhcEluZm8sCisgICAgdW5zaWduZWQgc2hvcnQgd0xpc3RlbkludGVydmFsLAogICAgIFBXTEFOX0lFX1NTSUQgcEN1cnJTU0lELAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEN1cnJSYXRlcywKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBDdXJyRXh0U3VwcFJhdGVzCkBAIC0xNDAsNyArMTQxLDcgQEAKICAgICBQU0RldmljZSBwRGV2aWNlLAogICAgIFBTTWdtdE9iamVjdCBwTWdtdCwKICAgICBQU1J4TWdtdFBhY2tldCBwUnhQYWNrZXQsCi0gICAgQk9PTCBiUmVBc3NvY1R5cGUKKyAgICBib29sIGJSZUFzc29jVHlwZQogICAgICk7CiAKIHN0YXRpYwpAQCAtMjI1LDcgKzIyNiw3IEBACiAgICAgUFNEZXZpY2UgcERldmljZSwKICAgICBQU01nbXRPYmplY3QgcE1nbXQsCiAgICAgUFNSeE1nbXRQYWNrZXQgcFJ4UGFja2V0LAotICAgIEJPT0wgYkluU2NhbgorICAgIGJvb2wgYkluU2NhbgogICAgICk7CiAKIHN0YXRpYwpAQCAtMjQwLDEyICsyNDEsMTIgQEAKIHNfTWdyTWFrZUJlYWNvbigKICAgICBQU0RldmljZSBwRGV2aWNlLAogICAgIFBTTWdtdE9iamVjdCBwTWdtdCwKLSAgICBXT1JEIHdDdXJyQ2FwSW5mbywKLSAgICBXT1JEIHdDdXJyQmVhY29uUGVyaW9kLAotICAgIFVJTlQgdUN1cnJDaGFubmVsLAotICAgIFdPUkQgd0N1cnJBVElNV2lub2R3LAorICAgIHVuc2lnbmVkIHNob3J0IHdDdXJyQ2FwSW5mbywKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VyckJlYWNvblBlcmlvZCwKKyAgICB1bnNpZ25lZCBpbnQgdUN1cnJDaGFubmVsLAorICAgIHVuc2lnbmVkIHNob3J0IHdDdXJyQVRJTVdpbm9kdywKICAgICBQV0xBTl9JRV9TU0lEIHBDdXJyU1NJRCwKLSAgICBQQllURSBwQ3VyckJTU0lELAorICAgIHVuc2lnbmVkIGNoYXIgKnBDdXJyQlNTSUQsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwQ3VyclN1cHBSYXRlcywKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBDdXJyRXh0U3VwcFJhdGVzCiAgICAgKTsKQEAgLTI1NywxMCArMjU4LDEwIEBACiBzX01nck1ha2VBc3NvY1Jlc3BvbnNlKAogICAgIFBTRGV2aWNlIHBEZXZpY2UsCiAgICAgUFNNZ210T2JqZWN0IHBNZ210LAotICAgIFdPUkQgd0N1cnJDYXBJbmZvLAotICAgIFdPUkQgd0Fzc29jU3RhdHVzLAotICAgIFdPUkQgd0Fzc29jQUlELAotICAgIFBCWVRFIHBEc3RBZGRyLAorICAgIHVuc2lnbmVkIHNob3J0IHdDdXJyQ2FwSW5mbywKKyAgICB1bnNpZ25lZCBzaG9ydCB3QXNzb2NTdGF0dXMsCisgICAgdW5zaWduZWQgc2hvcnQgd0Fzc29jQUlELAorICAgIHVuc2lnbmVkIGNoYXIgKnBEc3RBZGRyLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEN1cnJTdXBwUmF0ZXMsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwQ3VyckV4dFN1cHBSYXRlcwogICAgICk7CkBAIC0yNzEsMTAgKzI3MiwxMCBAQAogc19NZ3JNYWtlUmVBc3NvY1Jlc3BvbnNlKAogICAgIFBTRGV2aWNlIHBEZXZpY2UsCiAgICAgUFNNZ210T2JqZWN0IHBNZ210LAotICAgIFdPUkQgd0N1cnJDYXBJbmZvLAotICAgIFdPUkQgd0Fzc29jU3RhdHVzLAotICAgIFdPUkQgd0Fzc29jQUlELAotICAgIFBCWVRFIHBEc3RBZGRyLAorICAgIHVuc2lnbmVkIHNob3J0IHdDdXJyQ2FwSW5mbywKKyAgICB1bnNpZ25lZCBzaG9ydCB3QXNzb2NTdGF0dXMsCisgICAgdW5zaWduZWQgc2hvcnQgd0Fzc29jQUlELAorICAgIHVuc2lnbmVkIGNoYXIgKnBEc3RBZGRyLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEN1cnJTdXBwUmF0ZXMsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwQ3VyckV4dFN1cHBSYXRlcwogICAgICk7CkBAIC0yODUsMTYgKzI4NiwxNiBAQAogc19NZ3JNYWtlUHJvYmVSZXNwb25zZSgKICAgICBQU0RldmljZSBwRGV2aWNlLAogICAgIFBTTWdtdE9iamVjdCBwTWdtdCwKLSAgICBXT1JEIHdDdXJyQ2FwSW5mbywKLSAgICBXT1JEIHdDdXJyQmVhY29uUGVyaW9kLAotICAgIFVJTlQgdUN1cnJDaGFubmVsLAotICAgIFdPUkQgd0N1cnJBVElNV2lub2R3LAotICAgIFBCWVRFIHBEc3RBZGRyLAorICAgIHVuc2lnbmVkIHNob3J0IHdDdXJyQ2FwSW5mbywKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VyckJlYWNvblBlcmlvZCwKKyAgICB1bnNpZ25lZCBpbnQgdUN1cnJDaGFubmVsLAorICAgIHVuc2lnbmVkIHNob3J0IHdDdXJyQVRJTVdpbm9kdywKKyAgICB1bnNpZ25lZCBjaGFyICpwRHN0QWRkciwKICAgICBQV0xBTl9JRV9TU0lEIHBDdXJyU1NJRCwKLSAgICBQQllURSBwQ3VyckJTU0lELAorICAgIHVuc2lnbmVkIGNoYXIgKnBDdXJyQlNTSUQsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwQ3VyclN1cHBSYXRlcywKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBDdXJyRXh0U3VwcFJhdGVzLAotICAgIEJZVEUgYnlQSFlUeXBlCisgICAgdW5zaWduZWQgY2hhciBieVBIWVR5cGUKICAgICApOwogCiAvLyByZWNlaXZlZCBzdGF0dXMKQEAgLTMwMiw3ICszMDMsNyBAQAogdm9pZAogc192TWdyTG9nU3RhdHVzKAogICAgIFBTTWdtdE9iamVjdCBwTWdtdCwKLSAgICBXT1JEIHdTdGF0dXMKKyAgICB1bnNpZ25lZCBzaG9ydCB3U3RhdHVzCiAgICAgKTsKIAogCkBAIC0zMTAsMTggKzMxMSwxOCBAQAogdm9pZAogc192TWdyU3luY2hCU1MgKAogICAgIFBTRGV2aWNlICAgICAgcERldmljZSwKLSAgICBVSU5UICAgICAgICAgIHVCU1NNb2RlLAorICAgIHVuc2lnbmVkIGludCB1QlNTTW9kZSwKICAgICBQS25vd25CU1MgICAgIHBDdXJyLAogICAgIFBDTURfU1RBVFVTICBwU3RhdHVzCiAgICAgKTsKIAogCi1zdGF0aWMgQk9PTAorc3RhdGljIGJvb2wKIHNfYkNpcGhlck1hdGNoICgKICAgICBQS25vd25CU1MgICAgICAgICAgICAgICAgICAgICAgICBwQlNTTm9kZSwKICAgICBORElTXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUyAgICBFbmNTdGF0dXMsCi0gICAgUEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICBwYnlDQ1NQSywKLSAgICBQQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBieUNDU0dLCisgICAgdW5zaWduZWQgY2hhciAqcGJ5Q0NTUEssCisgICAgdW5zaWduZWQgY2hhciAqcGJ5Q0NTR0sKICAgICApOwogCiAgc3RhdGljIHZvaWQgIEVuY3lwdGlvbl9SZWJ1aWxkKApAQCAtMzY4LDcgKzM2OSw3IEBACiAgICAgcE1nbXQtPmJ5Q1NTUEsgPSBLRVlfQ1RMX05PTkU7CiAgICAgcE1nbXQtPmJ5Q1NTR0sgPSBLRVlfQ1RMX05PTkU7CiAgICAgcE1nbXQtPndJQlNTQmVhY29uUGVyaW9kID0gREVGQVVMVF9JQlNTX0JJOwotICAgIEJTU3ZDbGVhckJTU0xpc3QoKHZvaWQgKilwRGV2aWNlLCBGQUxTRSk7CisgICAgQlNTdkNsZWFyQlNTTGlzdCgodm9pZCAqKXBEZXZpY2UsIGZhbHNlKTsKIAogICAgIHJldHVybjsKIH0KQEAgLTM5MywyMiArMzk0LDIyIEBACiAKIAogICAgIGluaXRfdGltZXIoJnBNZ210LT5zVGltZXJTZWNvbmRDYWxsYmFjayk7Ci0gICAgcE1nbXQtPnNUaW1lclNlY29uZENhbGxiYWNrLmRhdGEgPSAoVUxPTkcpcERldmljZTsKKyAgICBwTWdtdC0+c1RpbWVyU2Vjb25kQ2FsbGJhY2suZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBwRGV2aWNlOwogICAgIHBNZ210LT5zVGltZXJTZWNvbmRDYWxsYmFjay5mdW5jdGlvbiA9IChUaW1lckZ1bmN0aW9uKUJTU3ZTZWNvbmRDYWxsQmFjazsKICAgICBwTWdtdC0+c1RpbWVyU2Vjb25kQ2FsbGJhY2suZXhwaXJlcyA9IFJVTl9BVChIWik7CiAKICAgICBpbml0X3RpbWVyKCZwRGV2aWNlLT5zVGltZXJDb21tYW5kKTsKLSAgICBwRGV2aWNlLT5zVGltZXJDb21tYW5kLmRhdGEgPSAoVUxPTkcpcERldmljZTsKKyAgICBwRGV2aWNlLT5zVGltZXJDb21tYW5kLmRhdGEgPSAodW5zaWduZWQgbG9uZykgcERldmljZTsKICAgICBwRGV2aWNlLT5zVGltZXJDb21tYW5kLmZ1bmN0aW9uID0gKFRpbWVyRnVuY3Rpb24pdkNvbW1hbmRUaW1lcjsKICAgICBwRGV2aWNlLT5zVGltZXJDb21tYW5kLmV4cGlyZXMgPSBSVU5fQVQoSFopOwogCiAgICAjaWZkZWYgVHhJblNsZWVwCiAgICAgaW5pdF90aW1lcigmcERldmljZS0+c1RpbWVyVHhEYXRhKTsKLSAgICBwRGV2aWNlLT5zVGltZXJUeERhdGEuZGF0YSA9IChVTE9ORylwRGV2aWNlOworICAgIHBEZXZpY2UtPnNUaW1lclR4RGF0YS5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHBEZXZpY2U7CiAgICAgcERldmljZS0+c1RpbWVyVHhEYXRhLmZ1bmN0aW9uID0gKFRpbWVyRnVuY3Rpb24pQlNTdlNlY29uZFR4RGF0YTsKICAgICBwRGV2aWNlLT5zVGltZXJUeERhdGEuZXhwaXJlcyA9IFJVTl9BVCgxMCpIWik7ICAgICAgLy8xMHMgY2FsbGJhY2sKLSAgICBwRGV2aWNlLT5mVHhEYXRhSW5TbGVlcCA9IEZBTFNFOwotICAgIHBEZXZpY2UtPklzVHhEYXRhVHJpZ2dlciA9IEZBTFNFOworICAgIHBEZXZpY2UtPmZUeERhdGFJblNsZWVwID0gZmFsc2U7CisgICAgcERldmljZS0+SXNUeERhdGFUcmlnZ2VyID0gZmFsc2U7CiAgICAgcERldmljZS0+blR4RGF0YVRpbWVDb3V0ID0gMDsKICAgICNlbmRpZgogCkBAIC00NDEsNyArNDQyLDcgQEAKIAogICAgIHBNZ210LT5lQ3Vyck1vZGUgPSBXTUFDX01PREVfU1RBTkRCWTsKICAgICBwTWdtdC0+ZUN1cnJTdGF0ZSA9IFdNQUNfU1RBVEVfSURMRTsKLSAgICBwRGV2aWNlLT5iRW5hYmxlUFNNb2RlID0gRkFMU0U7CisgICAgcERldmljZS0+YkVuYWJsZVBTTW9kZSA9IGZhbHNlOwogICAgIC8vIFRPRE86IHRpbWVyCiAKICAgICByZXR1cm47CkBAIC00ODcsMTUgKzQ4OCwxNSBAQAogICAgIC8vIEVSUCBQaHkgKDgwMi4xMWcpIHNob3VsZCBzdXBwb3J0IHNob3J0IHByZWFtYmxlLgogICAgIGlmIChwTWdtdC0+ZUN1cnJlbnRQSFlNb2RlID09IFBIWV9UWVBFXzExRykgewogICAgICAgICBwTWdtdC0+d0N1cnJDYXBJbmZvIHw9IFdMQU5fU0VUX0NBUF9JTkZPX1NIT1JUUFJFQU1CTEUoMSk7Ci0gICAgICAgIGlmIChDQVJEYklzU2hvclNsb3RUaW1lKHBNZ210LT5wQWRhcHRlcikgPT0gVFJVRSkgeworICAgICAgICBpZiAoQ0FSRGJJc1Nob3JTbG90VGltZShwTWdtdC0+cEFkYXB0ZXIpID09IHRydWUpIHsKICAgICAgICAgICAgIHBNZ210LT53Q3VyckNhcEluZm8gfD0gV0xBTl9TRVRfQ0FQX0lORk9fU0hPUlRTTE9UVElNRSgxKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAocE1nbXQtPmVDdXJyZW50UEhZTW9kZSA9PSBQSFlfVFlQRV8xMUIpIHsKLSAgICAgICAgaWYgKENBUkRiSXNTaG9ydFByZWFtYmxlKHBNZ210LT5wQWRhcHRlcikgPT0gVFJVRSkgeworICAgICAgICBpZiAoQ0FSRGJJc1Nob3J0UHJlYW1ibGUocE1nbXQtPnBBZGFwdGVyKSA9PSB0cnVlKSB7CiAgICAgICAgICAgICBwTWdtdC0+d0N1cnJDYXBJbmZvIHw9IFdMQU5fU0VUX0NBUF9JTkZPX1NIT1JUUFJFQU1CTEUoMSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHBNZ210LT5iMTFoRW5hYmxlID09IFRSVUUpCisgICAgaWYgKHBNZ210LT5iMTFoRW5hYmxlID09IHRydWUpCiAgICAgICAgIHBNZ210LT53Q3VyckNhcEluZm8gfD0gV0xBTl9TRVRfQ0FQX0lORk9fU1BFQ1RSVU1NTkcoMSk7CiAKICAgICAvKiBidWlsZCBhbiBhc3NvY3JlcSBmcmFtZSBhbmQgc2VuZCBpdCAqLwpAQCAtNTY2LDE1ICs1NjcsMTUgQEAKICAgICAvLyBFUlAgUGh5ICg4MDIuMTFnKSBzaG91bGQgc3VwcG9ydCBzaG9ydCBwcmVhbWJsZS4KICAgICBpZiAocE1nbXQtPmVDdXJyZW50UEhZTW9kZSA9PSBQSFlfVFlQRV8xMUcpIHsKICAgICAgICAgcE1nbXQtPndDdXJyQ2FwSW5mbyB8PSBXTEFOX1NFVF9DQVBfSU5GT19TSE9SVFBSRUFNQkxFKDEpOwotICAgICAgICBpZiAoQ0FSRGJJc1Nob3JTbG90VGltZShwTWdtdC0+cEFkYXB0ZXIpID09IFRSVUUpIHsKKyAgICAgICAgaWYgKENBUkRiSXNTaG9yU2xvdFRpbWUocE1nbXQtPnBBZGFwdGVyKSA9PSB0cnVlKSB7CiAgICAgICAgICAgICBwTWdtdC0+d0N1cnJDYXBJbmZvIHw9IFdMQU5fU0VUX0NBUF9JTkZPX1NIT1JUU0xPVFRJTUUoMSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHBNZ210LT5lQ3VycmVudFBIWU1vZGUgPT0gUEhZX1RZUEVfMTFCKSB7Ci0gICAgICAgIGlmIChDQVJEYklzU2hvcnRQcmVhbWJsZShwTWdtdC0+cEFkYXB0ZXIpID09IFRSVUUpIHsKKyAgICAgICAgaWYgKENBUkRiSXNTaG9ydFByZWFtYmxlKHBNZ210LT5wQWRhcHRlcikgPT0gdHJ1ZSkgewogICAgICAgICAgICAgcE1nbXQtPndDdXJyQ2FwSW5mbyB8PSBXTEFOX1NFVF9DQVBfSU5GT19TSE9SVFBSRUFNQkxFKDEpOwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChwTWdtdC0+YjExaEVuYWJsZSA9PSBUUlVFKQorICAgIGlmIChwTWdtdC0+YjExaEVuYWJsZSA9PSB0cnVlKQogICAgICAgICBwTWdtdC0+d0N1cnJDYXBJbmZvIHw9IFdMQU5fU0VUX0NBUF9JTkZPX1NQRUNUUlVNTU5HKDEpOwogCiAKQEAgLTYxOSw4ICs2MjAsOCBAQAogdk1nckRpc2Fzc29jQmVnaW5TdGEoCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQsCiAgICAgUFNNZ210T2JqZWN0IHBNZ210LAotICAgIFBCWVRFICBhYnlEZXN0QWRkcmVzcywKLSAgICBXT1JEICAgIHdSZWFzb24sCisgICAgdW5zaWduZWQgY2hhciAqYWJ5RGVzdEFkZHJlc3MsCisgICAgdW5zaWduZWQgc2hvcnQgd1JlYXNvbiwKICAgICBQQ01EX1NUQVRVUyBwU3RhdHVzCiAgICAgKQogewpAQCAtNjMwLDEwICs2MzEsMTAgQEAKIAogICAgIHBUeFBhY2tldCA9IChQU1R4TWdtdFBhY2tldClwTWdtdC0+cGJ5TWdtdFBhY2tldFBvb2w7CiAgICAgbWVtc2V0KHBUeFBhY2tldCwgMCwgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpICsgV0xBTl9ESVNBU1NPQ19GUl9NQVhMRU4pOwotICAgIHBUeFBhY2tldC0+cDgwMjExSGVhZGVyID0gKFBVV0xBTl84MDIxMUhEUikoKFBCWVRFKXBUeFBhY2tldCArIHNpemVvZihTVHhNZ210UGFja2V0KSk7CisgICAgcFR4UGFja2V0LT5wODAyMTFIZWFkZXIgPSAoUFVXTEFOXzgwMjExSERSKSgodW5zaWduZWQgY2hhciAqKXBUeFBhY2tldCArIHNpemVvZihTVHhNZ210UGFja2V0KSk7CiAKICAgICAvLyBTZXR1cCB0aGUgc0ZyYW1lIHN0cnVjdHVyZQotICAgIHNGcmFtZS5wQnVmID0gKFBCWVRFKXBUeFBhY2tldC0+cDgwMjExSGVhZGVyOworICAgIHNGcmFtZS5wQnVmID0gKHVuc2lnbmVkIGNoYXIgKilwVHhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKICAgICBzRnJhbWUubGVuID0gV0xBTl9ESVNBU1NPQ19GUl9NQVhMRU47CiAKICAgICAvLyBmb3JtYXQgZml4ZWQgZmllbGQgZnJhbWUgc3RydWN0dXJlCkBAIC02ODMsMTcgKzY4NCwxNyBAQAogICAgIFBTRGV2aWNlIHBEZXZpY2UsCiAgICAgUFNNZ210T2JqZWN0IHBNZ210LAogICAgIFBTUnhNZ210UGFja2V0IHBSeFBhY2tldCwKLSAgICBVSU5UIHVOb2RlSW5kZXgKKyAgICB1bnNpZ25lZCBpbnQgdU5vZGVJbmRleAogICAgICkKIHsKICAgICBXTEFOX0ZSX0FTU09DUkVRICAgIHNGcmFtZTsKICAgICBDTURfU1RBVFVTICAgICAgICAgIFN0YXR1czsKICAgICBQU1R4TWdtdFBhY2tldCAgICAgIHBUeFBhY2tldDsKLSAgICBXT1JEICAgICAgICAgICAgICAgIHdBc3NvY1N0YXR1cyA9IDA7Ci0gICAgV09SRCAgICAgICAgICAgICAgICB3QXNzb2NBSUQgPSAwOwotICAgIFVJTlQgICAgICAgICAgICAgICAgdVJhdGVMZW4gPSBXTEFOX1JBVEVTX01BWExFTjsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGFieUN1cnJTdXBwUmF0ZXNbV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1JBVEVTX01BWExFTiArIDFdOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYWJ5Q3VyckV4dFN1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOICsgMV07CisgICAgdW5zaWduZWQgc2hvcnQgd0Fzc29jU3RhdHVzID0gMDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3QXNzb2NBSUQgPSAwOworICAgIHVuc2lnbmVkIGludCB1UmF0ZUxlbiA9IFdMQU5fUkFURVNfTUFYTEVOOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5Q3VyclN1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOICsgMV07CisgICAgdW5zaWduZWQgY2hhciBhYnlDdXJyRXh0U3VwcFJhdGVzW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9SQVRFU19NQVhMRU4gKyAxXTsKIAogCiAgICAgaWYgKHBNZ210LT5lQ3Vyck1vZGUgIT0gV01BQ19NT0RFX0VTU19BUCkKQEAgLTcwOCw3ICs3MDksNyBAQAogICAgIG1lbXNldChhYnlDdXJyU3VwcFJhdGVzLCAwLCBXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOICsgMSk7CiAgICAgbWVtc2V0KGFieUN1cnJFeHRTdXBwUmF0ZXMsIDAsIFdMQU5fSUVIRFJfTEVOICsgV0xBTl9SQVRFU19NQVhMRU4gKyAxKTsKICAgICBzRnJhbWUubGVuID0gcFJ4UGFja2V0LT5jYk1QRFVMZW47Ci0gICAgc0ZyYW1lLnBCdWYgPSAoUEJZVEUpcFJ4UGFja2V0LT5wODAyMTFIZWFkZXI7CisgICAgc0ZyYW1lLnBCdWYgPSAodW5zaWduZWQgY2hhciAqKXBSeFBhY2tldC0+cDgwMjExSGVhZGVyOwogCiAgICAgdk1nckRlY29kZUFzc29jUmVxdWVzdCgmc0ZyYW1lKTsKIApAQCAtNzE3LDcgKzcxOCw3IEBACiAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud0NhcEluZm8gPSBjcHVfdG9fbGUxNigqc0ZyYW1lLnB3Q2FwSW5mbyk7CiAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud0xpc3RlbkludGVydmFsID0gY3B1X3RvX2xlMTYoKnNGcmFtZS5wd0xpc3RlbkludGVydmFsKTsKICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5iUFNFbmFibGUgPQotICAgICAgICAgICAgICAgIFdMQU5fR0VUX0ZDX1BXUk1HVChzRnJhbWUucEhkci0+c0EzLndGcmFtZUN0bCkgPyBUUlVFIDogRkFMU0U7CisgICAgICAgICAgICAgICAgV0xBTl9HRVRfRkNfUFdSTUdUKHNGcmFtZS5wSGRyLT5zQTMud0ZyYW1lQ3RsKSA/IHRydWUgOiBmYWxzZTsKICAgICAgICAgLy8gVG9kbzogY2hlY2sgc3RhIGJhc2ljIHJhdGUsIGlmIGFwIGNhbid0IHN1cHBvcnQsIHNldCBzdGF0dXMgY29kZQogICAgICAgICBpZiAocERldmljZS0+ZUN1cnJlbnRQSFlUeXBlID09IFBIWV9UWVBFXzExQikgewogICAgICAgICAgICAgdVJhdGVMZW4gPSBXTEFOX1JBVEVTX01BWExFTl8xMUI7CkBAIC03MzksNyArNzQwLDcgQEAKICAgICAgICAgUkFURXZQYXJzZU1heFJhdGUoKHZvaWQgKilwRGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBXTEFOX0lFX1NVUFBfUkFURVMpYWJ5Q3VyclN1cHBSYXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQV0xBTl9JRV9TVVBQX1JBVEVTKWFieUN1cnJFeHRTdXBwUmF0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwgLy8gZG8gbm90IGNoYW5nZSBvdXIgYmFzaWMgcmF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIC8vIGRvIG5vdCBjaGFuZ2Ugb3VyIGJhc2ljIHJhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53TWF4QmFzaWNSYXRlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53TWF4U3VwcFJhdGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJihwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLndTdXBwUmF0ZSksCkBAIC03NTgsMjAgKzc1OSwyMCBAQAogICAgICAgICAgICAgICAgIFdMQU5fR0VUX0NBUF9JTkZPX1NIT1JUUFJFQU1CTEUoKnNGcmFtZS5wd0NhcEluZm8pOwogICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmJTaG9ydFNsb3RUaW1lID0KICAgICAgICAgICAgICAgICBXTEFOX0dFVF9DQVBfSU5GT19TSE9SVFNMT1RUSU1FKCpzRnJhbWUucHdDYXBJbmZvKTsKLSAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53QUlEID0gKFdPUkQpdU5vZGVJbmRleDsKKyAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53QUlEID0gKHVuc2lnbmVkIHNob3J0KXVOb2RlSW5kZXg7CiAgICAgICAgIHdBc3NvY1N0YXR1cyA9IFdMQU5fTUdNVF9TVEFUVVNfU1VDQ0VTUzsKLSAgICAgICAgd0Fzc29jQUlEID0gKFdPUkQpdU5vZGVJbmRleDsKKyAgICAgICAgd0Fzc29jQUlEID0gKHVuc2lnbmVkIHNob3J0KXVOb2RlSW5kZXg7CiAgICAgICAgIC8vIGNoZWNrIGlmIEVSUCBzdXBwb3J0CiAgICAgICAgIGlmKHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud01heFN1cHBSYXRlID4gUkFURV8xMU0pCi0gICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uYkVSUEV4aXN0ID0gVFJVRTsKKyAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5iRVJQRXhpc3QgPSB0cnVlOwogCiAgICAgICAgIGlmIChwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLndNYXhTdXBwUmF0ZSA8PSBSQVRFXzExTSkgewogICAgICAgICAgICAgLy8gQiBvbmx5IFNUQSBqb2luCi0gICAgICAgICAgICBwRGV2aWNlLT5iUHJvdGVjdE1vZGUgPSBUUlVFOwotICAgICAgICAgICAgcERldmljZS0+Yk5vbkVSUFByZXNlbnQgPSBUUlVFOworICAgICAgICAgICAgcERldmljZS0+YlByb3RlY3RNb2RlID0gdHJ1ZTsKKyAgICAgICAgICAgIHBEZXZpY2UtPmJOb25FUlBQcmVzZW50ID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBpZiAocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5iU2hvcnRQcmVhbWJsZSA9PSBGQUxTRSkgewotICAgICAgICAgICAgcERldmljZS0+YkJhcmtlclByZWFtYmxlTWQgPSBUUlVFOworICAgICAgICBpZiAocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5iU2hvcnRQcmVhbWJsZSA9PSBmYWxzZSkgeworICAgICAgICAgICAgcERldmljZS0+YkJhcmtlclByZWFtYmxlTWQgPSB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfSU5GTywgS0VSTl9JTkZPICJBc3NvY2lhdGUgQUlEPSAlZCBcbiIsIHdBc3NvY0FJRCk7CkBAIC04NDUsMTcgKzg0NiwxNyBAQAogICAgIFBTRGV2aWNlIHBEZXZpY2UsCiAgICAgUFNNZ210T2JqZWN0IHBNZ210LAogICAgIFBTUnhNZ210UGFja2V0IHBSeFBhY2tldCwKLSAgICBVSU5UIHVOb2RlSW5kZXgKKyAgICB1bnNpZ25lZCBpbnQgdU5vZGVJbmRleAogICAgICkKIHsKICAgICBXTEFOX0ZSX1JFQVNTT0NSRVEgICAgc0ZyYW1lOwogICAgIENNRF9TVEFUVVMgICAgICAgICAgU3RhdHVzOwogICAgIFBTVHhNZ210UGFja2V0ICAgICAgcFR4UGFja2V0OwotICAgIFdPUkQgICAgICAgICAgICAgICAgd0Fzc29jU3RhdHVzID0gMDsKLSAgICBXT1JEICAgICAgICAgICAgICAgIHdBc3NvY0FJRCA9IDA7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICB1UmF0ZUxlbiA9IFdMQU5fUkFURVNfTUFYTEVOOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYWJ5Q3VyclN1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOICsgMV07Ci0gICAgQllURSAgICAgICAgICAgICAgICBhYnlDdXJyRXh0U3VwcFJhdGVzW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9SQVRFU19NQVhMRU4gKyAxXTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3QXNzb2NTdGF0dXMgPSAwOworICAgIHVuc2lnbmVkIHNob3J0IHdBc3NvY0FJRCA9IDA7CisgICAgdW5zaWduZWQgaW50CXVSYXRlTGVuID0gV0xBTl9SQVRFU19NQVhMRU47CisgICAgdW5zaWduZWQgY2hhciBhYnlDdXJyU3VwcFJhdGVzW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9SQVRFU19NQVhMRU4gKyAxXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUN1cnJFeHRTdXBwUmF0ZXNbV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1JBVEVTX01BWExFTiArIDFdOwogCiAgICAgaWYgKHBNZ210LT5lQ3Vyck1vZGUgIT0gV01BQ19NT0RFX0VTU19BUCkKICAgICAgICAgcmV0dXJuOwpAQCAtODY2LDcgKzg2Nyw3IEBACiAgICAgLy9kZWNvZGUgdGhlIGZyYW1lCiAgICAgbWVtc2V0KCZzRnJhbWUsIDAsIHNpemVvZihXTEFOX0ZSX1JFQVNTT0NSRVEpKTsKICAgICBzRnJhbWUubGVuID0gcFJ4UGFja2V0LT5jYk1QRFVMZW47Ci0gICAgc0ZyYW1lLnBCdWYgPSAoUEJZVEUpcFJ4UGFja2V0LT5wODAyMTFIZWFkZXI7CisgICAgc0ZyYW1lLnBCdWYgPSAodW5zaWduZWQgY2hhciAqKXBSeFBhY2tldC0+cDgwMjExSGVhZGVyOwogICAgIHZNZ3JEZWNvZGVSZWFzc29jUmVxdWVzdCgmc0ZyYW1lKTsKIAogICAgIGlmIChwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmVOb2RlU3RhdGUgPj0gTk9ERV9BVVRIKSB7CkBAIC04NzQsNyArODc1LDcgQEAKICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53Q2FwSW5mbyA9IGNwdV90b19sZTE2KCpzRnJhbWUucHdDYXBJbmZvKTsKICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53TGlzdGVuSW50ZXJ2YWwgPSBjcHVfdG9fbGUxNigqc0ZyYW1lLnB3TGlzdGVuSW50ZXJ2YWwpOwogICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmJQU0VuYWJsZSA9Ci0gICAgICAgICAgICAgICAgV0xBTl9HRVRfRkNfUFdSTUdUKHNGcmFtZS5wSGRyLT5zQTMud0ZyYW1lQ3RsKSA/IFRSVUUgOiBGQUxTRTsKKyAgICAgICAgICAgICAgICBXTEFOX0dFVF9GQ19QV1JNR1Qoc0ZyYW1lLnBIZHItPnNBMy53RnJhbWVDdGwpID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgICAvLyBUb2RvOiBjaGVjayBzdGEgYmFzaWMgcmF0ZSwgaWYgYXAgY2FuJ3Qgc3VwcG9ydCwgc2V0IHN0YXR1cyBjb2RlCiAKICAgICAgICAgaWYgKHBEZXZpY2UtPmVDdXJyZW50UEhZVHlwZSA9PSBQSFlfVFlQRV8xMUIpIHsKQEAgLTg5OCw3ICs4OTksNyBAQAogICAgICAgICBSQVRFdlBhcnNlTWF4UmF0ZSgodm9pZCAqKXBEZXZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChQV0xBTl9JRV9TVVBQX1JBVEVTKWFieUN1cnJTdXBwUmF0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChQV0xBTl9JRV9TVVBQX1JBVEVTKWFieUN1cnJFeHRTdXBwUmF0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwgLy8gZG8gbm90IGNoYW5nZSBvdXIgYmFzaWMgcmF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIC8vIGRvIG5vdCBjaGFuZ2Ugb3VyIGJhc2ljIHJhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53TWF4QmFzaWNSYXRlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53TWF4U3VwcFJhdGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJihwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLndTdXBwUmF0ZSksCkBAIC05MTcsMjEgKzkxOCwyMSBAQAogICAgICAgICAgICAgICAgIFdMQU5fR0VUX0NBUF9JTkZPX1NIT1JUUFJFQU1CTEUoKnNGcmFtZS5wd0NhcEluZm8pOwogICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmJTaG9ydFNsb3RUaW1lID0KICAgICAgICAgICAgICAgICBXTEFOX0dFVF9DQVBfSU5GT19TSE9SVFNMT1RUSU1FKCpzRnJhbWUucHdDYXBJbmZvKTsKLSAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53QUlEID0gKFdPUkQpdU5vZGVJbmRleDsKKyAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53QUlEID0gKHVuc2lnbmVkIHNob3J0KXVOb2RlSW5kZXg7CiAgICAgICAgIHdBc3NvY1N0YXR1cyA9IFdMQU5fTUdNVF9TVEFUVVNfU1VDQ0VTUzsKLSAgICAgICAgd0Fzc29jQUlEID0gKFdPUkQpdU5vZGVJbmRleDsKKyAgICAgICAgd0Fzc29jQUlEID0gKHVuc2lnbmVkIHNob3J0KXVOb2RlSW5kZXg7CiAKICAgICAgICAgLy8gaWYgc3VwcHVydCBFUlAKICAgICAgICAgaWYocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53TWF4U3VwcFJhdGUgPiBSQVRFXzExTSkKLSAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5iRVJQRXhpc3QgPSBUUlVFOworICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmJFUlBFeGlzdCA9IHRydWU7CiAKICAgICAgICAgaWYgKHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud01heFN1cHBSYXRlIDw9IFJBVEVfMTFNKSB7CiAgICAgICAgICAgICAvLyBCIG9ubHkgU1RBIGpvaW4KLSAgICAgICAgICAgIHBEZXZpY2UtPmJQcm90ZWN0TW9kZSA9IFRSVUU7Ci0gICAgICAgICAgICBwRGV2aWNlLT5iTm9uRVJQUHJlc2VudCA9IFRSVUU7CisgICAgICAgICAgICBwRGV2aWNlLT5iUHJvdGVjdE1vZGUgPSB0cnVlOworICAgICAgICAgICAgcERldmljZS0+Yk5vbkVSUFByZXNlbnQgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmJTaG9ydFByZWFtYmxlID09IEZBTFNFKSB7Ci0gICAgICAgICAgICBwRGV2aWNlLT5iQmFya2VyUHJlYW1ibGVNZCA9IFRSVUU7CisgICAgICAgIGlmIChwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmJTaG9ydFByZWFtYmxlID09IGZhbHNlKSB7CisgICAgICAgICAgICBwRGV2aWNlLT5iQmFya2VyUHJlYW1ibGVNZCA9IHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX0lORk8gIlJ4IFJlQXNzb2NpYXRlIEFJRD0gJWQgXG4iLCB3QXNzb2NBSUQpOwpAQCAtOTk1LDEyICs5OTYsMTIgQEAKICAgICBQU0RldmljZSBwRGV2aWNlLAogICAgIFBTTWdtdE9iamVjdCBwTWdtdCwKICAgICBQU1J4TWdtdFBhY2tldCBwUnhQYWNrZXQsCi0gICAgQk9PTCBiUmVBc3NvY1R5cGUKKyAgICBib29sIGJSZUFzc29jVHlwZQogICAgICkKIHsKICAgICBXTEFOX0ZSX0FTU09DUkVTUCAgIHNGcmFtZTsKICAgICBQV0xBTl9JRV9TU0lEICAgcEl0ZW1TU0lEOwotICAgIFBCWVRFICAgcGJ5SUVzOworICAgIHVuc2lnbmVkIGNoYXIgKnBieUlFczsKICAgICB2aWF3Z2V0X3dwYV9oZWFkZXIgKndwYWhkcjsKIAogCkBAIC0xMDA5LDcgKzEwMTAsNyBAQAogICAgICAgICAgcE1nbXQtPmVDdXJyU3RhdGUgPT0gV01BQ19TVEFURV9BU1NPQykgewogCiAgICAgICAgIHNGcmFtZS5sZW4gPSBwUnhQYWNrZXQtPmNiTVBEVUxlbjsKLSAgICAgICAgc0ZyYW1lLnBCdWYgPSAoUEJZVEUpcFJ4UGFja2V0LT5wODAyMTFIZWFkZXI7CisgICAgICAgIHNGcmFtZS5wQnVmID0gKHVuc2lnbmVkIGNoYXIgKilwUnhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKICAgICAgICAgLy8gZGVjb2RlIHRoZSBmcmFtZQogICAgICAgICB2TWdyRGVjb2RlQXNzb2NSZXNwb25zZSgmc0ZyYW1lKTsKICAgICAgICAgaWYgKChzRnJhbWUucHdDYXBJbmZvID09IDApIHx8CkBAIC0xMDQ0LDcgKzEwNDUsNyBAQAogICAgICAgICAgICAgQlNTdlVwZGF0ZUFQTm9kZSgodm9pZCAqKXBEZXZpY2UsIHNGcmFtZS5wd0NhcEluZm8sIHNGcmFtZS5wU3VwcFJhdGVzLCBzRnJhbWUucEV4dFN1cHBSYXRlcyk7CiAgICAgICAgICAgICBwSXRlbVNTSUQgPSAoUFdMQU5fSUVfU1NJRClwTWdtdC0+YWJ5Q3VyclNTSUQ7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX0lORk8gIkxpbmsgd2l0aCBBUChTU0lEKTogJXNcbiIsIHBJdGVtU1NJRC0+YWJ5U1NJRCk7Ci0gICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBUUlVFOworICAgICAgICAgICAgcERldmljZS0+YkxpbmtQYXNzID0gdHJ1ZTsKICAgICAgICAgICAgIHBEZXZpY2UtPnVCQlZHQURpZmZDb3VudCA9IDA7CiAgICAgICAgICAgICBpZiAoKHBEZXZpY2UtPmJXUEFERVZVcCkgJiYgKHBEZXZpY2UtPnNrYiAhPSBOVUxMKSkgewogCSAgaWYoc2tiX3RhaWxyb29tKHBEZXZpY2UtPnNrYikgPChzaXplb2Yodmlhd2dldF93cGFfaGVhZGVyKStwTWdtdC0+c0Fzc29jSW5mby5Bc3NvY0luZm8uUmVzcG9uc2VJRUxlbmd0aCsKQEAgLTEwNzMsOSArMTA3NCw5IEBACiAKIC8vMjAwOC0wNDA5LTA3LCA8QWRkPiBieSBFaW5zbiBMaXUKICNpZmRlZiBXUEFfU1VQUExJQ0FOVF9EUklWRVJfV0VYVF9TVVBQT1JUCi0JLy9pZihwRGV2aWNlLT5iV1BBRGV2RW5hYmxlID09IFRSVUUpCisJLy9pZihwRGV2aWNlLT5iV1BBRGV2RW5hYmxlID09IHRydWUpCiAJCXsKLQkJQllURSBidWZbNTEyXTsKKwkJdW5zaWduZWQgY2hhciBidWZbNTEyXTsKIAkJc2l6ZV90IGxlbjsKIAkJdW5pb24gaXdyZXFfZGF0YSAgd3JxdTsKIAkJaW50IHdlX2V2ZW50OwpAQCAtMTEyOCw3ICsxMTI5LDcgQEAKIC8vbmVlZCBjbGVhciBmbGFncyByZWxhdGVkIHRvIE5ldHdvcmttYW5hZ2VyCiAKICAgICAgICAgICAgICAgcERldmljZS0+YndleHRjb3VudCA9IDA7Ci0gICAgICAgICAgICAgIHBEZXZpY2UtPmJXUEFTdXBwV2V4dEVuYWJsZWQgPSBGQUxTRTsKKyAgICAgICAgICAgICAgcERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9IGZhbHNlOwogI2VuZGlmCiAKIApAQCAtMTE2Myw4ICsxMTY0LDggQEAKIAogICAgIHBUeFBhY2tldCA9IChQU1R4TWdtdFBhY2tldClwTWdtdC0+cGJ5TWdtdFBhY2tldFBvb2w7CiAgICAgbWVtc2V0KHBUeFBhY2tldCwgMCwgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpICsgV0xBTl9BVVRIRU5fRlJfTUFYTEVOKTsKLSAgICBwVHhQYWNrZXQtPnA4MDIxMUhlYWRlciA9IChQVVdMQU5fODAyMTFIRFIpKChQQllURSlwVHhQYWNrZXQgKyBzaXplb2YoU1R4TWdtdFBhY2tldCkpOwotICAgIHNGcmFtZS5wQnVmID0gKFBCWVRFKXBUeFBhY2tldC0+cDgwMjExSGVhZGVyOworICAgIHBUeFBhY2tldC0+cDgwMjExSGVhZGVyID0gKFBVV0xBTl84MDIxMUhEUikoKHVuc2lnbmVkIGNoYXIgKilwVHhQYWNrZXQgKyBzaXplb2YoU1R4TWdtdFBhY2tldCkpOworICAgIHNGcmFtZS5wQnVmID0gKHVuc2lnbmVkIGNoYXIgKilwVHhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKICAgICBzRnJhbWUubGVuID0gV0xBTl9BVVRIRU5fRlJfTUFYTEVOOwogICAgIHZNZ3JFbmNvZGVBdXRoZW4oJnNGcmFtZSk7CiAgICAgLyogaW5zZXJ0IHZhbHVlcyAqLwpAQCAtMTIxMiw4ICsxMjEzLDggQEAKIHZNZ3JEZUF1dGhlbkJlZ2luU3RhKAogICAgIHZvaWQgKmhEZXZpY2VDb250ZXh0LAogICAgIFBTTWdtdE9iamVjdCAgcE1nbXQsCi0gICAgUEJZVEUgIGFieURlc3RBZGRyZXNzLAotICAgIFdPUkQgICAgd1JlYXNvbiwKKyAgICB1bnNpZ25lZCBjaGFyICphYnlEZXN0QWRkcmVzcywKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmVhc29uLAogICAgIFBDTURfU1RBVFVTIHBTdGF0dXMKICAgICApCiB7CkBAIC0xMjI0LDggKzEyMjUsOCBAQAogCiAgICAgcFR4UGFja2V0ID0gKFBTVHhNZ210UGFja2V0KXBNZ210LT5wYnlNZ210UGFja2V0UG9vbDsKICAgICBtZW1zZXQocFR4UGFja2V0LCAwLCBzaXplb2YoU1R4TWdtdFBhY2tldCkgKyBXTEFOX0RFQVVUSEVOX0ZSX01BWExFTik7Ci0gICAgcFR4UGFja2V0LT5wODAyMTFIZWFkZXIgPSAoUFVXTEFOXzgwMjExSERSKSgoUEJZVEUpcFR4UGFja2V0ICsgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpKTsKLSAgICBzRnJhbWUucEJ1ZiA9IChQQllURSlwVHhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKKyAgICBwVHhQYWNrZXQtPnA4MDIxMUhlYWRlciA9IChQVVdMQU5fODAyMTFIRFIpKCh1bnNpZ25lZCBjaGFyICopcFR4UGFja2V0ICsgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpKTsKKyAgICBzRnJhbWUucEJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopcFR4UGFja2V0LT5wODAyMTFIZWFkZXI7CiAgICAgc0ZyYW1lLmxlbiA9IFdMQU5fREVBVVRIRU5fRlJfTUFYTEVOOwogICAgIHZNZ3JFbmNvZGVEZWF1dGhlbigmc0ZyYW1lKTsKICAgICAvKiBpbnNlcnQgdmFsdWVzICovCkBAIC0xMjgyLDcgKzEyODMsNyBAQAogCiAgICAgLy8gZGVjb2RlIHRoZSBmcmFtZQogICAgIHNGcmFtZS5sZW4gPSBwUnhQYWNrZXQtPmNiTVBEVUxlbjsKLSAgICBzRnJhbWUucEJ1ZiA9IChQQllURSlwUnhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKKyAgICBzRnJhbWUucEJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopcFJ4UGFja2V0LT5wODAyMTFIZWFkZXI7CiAgICAgdk1nckRlY29kZUF1dGhlbigmc0ZyYW1lKTsKICAgICBzd2l0Y2ggKGNwdV90b19sZTE2KCgqKHNGcmFtZS5wd0F1dGhTZXF1ZW5jZSApKSkpewogICAgICAgICBjYXNlIDE6CkBAIC0xMzMxLDcgKzEzMzIsNyBAQAogICAgICApCiB7CiAgICAgUFNUeE1nbXRQYWNrZXQgICAgICBwVHhQYWNrZXQgPSBOVUxMOwotICAgIFVJTlQgICAgICAgICAgICAgICAgdU5vZGVJbmRleDsKKyAgICB1bnNpZ25lZCBpbnQJdU5vZGVJbmRleDsKICAgICBXTEFOX0ZSX0FVVEhFTiAgICAgIHNGcmFtZTsKICAgICBQU0tleUl0ZW0gICAgICAgICAgIHBUcmFuc21pdEtleTsKIApAQCAtMTM1Myw4ICsxMzU0LDggQEAKICAgICAvLyBzZW5kIGF1dGggcmVwbHkKICAgICBwVHhQYWNrZXQgPSAoUFNUeE1nbXRQYWNrZXQpcE1nbXQtPnBieU1nbXRQYWNrZXRQb29sOwogICAgIG1lbXNldChwVHhQYWNrZXQsIDAsIHNpemVvZihTVHhNZ210UGFja2V0KSArIFdMQU5fQVVUSEVOX0ZSX01BWExFTik7Ci0gICAgcFR4UGFja2V0LT5wODAyMTFIZWFkZXIgPSAoUFVXTEFOXzgwMjExSERSKSgoUEJZVEUpcFR4UGFja2V0ICsgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpKTsKLSAgICBzRnJhbWUucEJ1ZiA9IChQQllURSlwVHhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKKyAgICBwVHhQYWNrZXQtPnA4MDIxMUhlYWRlciA9IChQVVdMQU5fODAyMTFIRFIpKCh1bnNpZ25lZCBjaGFyICopcFR4UGFja2V0ICsgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpKTsKKyAgICBzRnJhbWUucEJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopcFR4UGFja2V0LT5wODAyMTFIZWFkZXI7CiAgICAgc0ZyYW1lLmxlbiA9IFdMQU5fQVVUSEVOX0ZSX01BWExFTjsKICAgICAvLyBmb3JtYXQgYnVmZmVyIHN0cnVjdHVyZQogICAgIHZNZ3JFbmNvZGVBdXRoZW4oJnNGcmFtZSk7CkBAIC0xMzkzLDcgKzEzOTQsNyBAQAogICAgICAgICBzRnJhbWUucENoYWxsZW5nZS0+bGVuID0gV0xBTl9DSEFMTEVOR0VfTEVOOwogICAgICAgICBtZW1zZXQocE1nbXQtPmFieUNoYWxsZW5nZSwgMCwgV0xBTl9DSEFMTEVOR0VfTEVOKTsKICAgICAgICAgLy8gZ2V0IGdyb3VwIGtleQotICAgICAgICBpZihLZXliR2V0VHJhbnNtaXRLZXkoJihwRGV2aWNlLT5zS2V5KSwgcERldmljZS0+YWJ5QnJvYWRjYXN0QWRkciwgR1JPVVBfS0VZLCAmcFRyYW5zbWl0S2V5KSA9PSBUUlVFKSB7CisgICAgICAgIGlmKEtleWJHZXRUcmFuc21pdEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwRGV2aWNlLT5hYnlCcm9hZGNhc3RBZGRyLCBHUk9VUF9LRVksICZwVHJhbnNtaXRLZXkpID09IHRydWUpIHsKICAgICAgICAgICAgIHJjNF9pbml0KCZwRGV2aWNlLT5TQm94LCBwRGV2aWNlLT5hYnlQUk5HLCBwVHJhbnNtaXRLZXktPnVLZXlMZW5ndGgrMyk7CiAgICAgICAgICAgICByYzRfZW5jcnlwdCgmcERldmljZS0+U0JveCwgcE1nbXQtPmFieUNoYWxsZW5nZSwgcE1nbXQtPmFieUNoYWxsZW5nZSwgV0xBTl9DSEFMTEVOR0VfTEVOKTsKICAgICAgICAgfQpAQCAtMTQ2Niw4ICsxNDY3LDggQEAKICAgICAgICAgICAgIGlmIChjcHVfdG9fbGUxNigoKihwRnJhbWUtPnB3U3RhdHVzKSkpID09IFdMQU5fTUdNVF9TVEFUVVNfU1VDQ0VTUykgewogICAgICAgICAgICAgICAgIHBUeFBhY2tldCA9IChQU1R4TWdtdFBhY2tldClwTWdtdC0+cGJ5TWdtdFBhY2tldFBvb2w7CiAgICAgICAgICAgICAgICAgbWVtc2V0KHBUeFBhY2tldCwgMCwgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpICsgV0xBTl9BVVRIRU5fRlJfTUFYTEVOKTsKLSAgICAgICAgICAgICAgICBwVHhQYWNrZXQtPnA4MDIxMUhlYWRlciA9IChQVVdMQU5fODAyMTFIRFIpKChQQllURSlwVHhQYWNrZXQgKyBzaXplb2YoU1R4TWdtdFBhY2tldCkpOwotICAgICAgICAgICAgICAgIHNGcmFtZS5wQnVmID0gKFBCWVRFKXBUeFBhY2tldC0+cDgwMjExSGVhZGVyOworICAgICAgICAgICAgICAgIHBUeFBhY2tldC0+cDgwMjExSGVhZGVyID0gKFBVV0xBTl84MDIxMUhEUikoKHVuc2lnbmVkIGNoYXIgKilwVHhQYWNrZXQgKyBzaXplb2YoU1R4TWdtdFBhY2tldCkpOworICAgICAgICAgICAgICAgIHNGcmFtZS5wQnVmID0gKHVuc2lnbmVkIGNoYXIgKilwVHhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKICAgICAgICAgICAgICAgICBzRnJhbWUubGVuID0gV0xBTl9BVVRIRU5fRlJfTUFYTEVOOwogICAgICAgICAgICAgICAgIC8vIGZvcm1hdCBidWZmZXIgc3RydWN0dXJlCiAgICAgICAgICAgICAgICAgdk1nckVuY29kZUF1dGhlbigmc0ZyYW1lKTsKQEAgLTE1MzksOCArMTU0MCw4IEBACiAgICAgKQogewogICAgIFBTVHhNZ210UGFja2V0ICAgICAgcFR4UGFja2V0ID0gTlVMTDsKLSAgICBVSU5UICAgICAgICAgICAgICAgIHVTdGF0dXNDb2RlID0gMCA7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICB1Tm9kZUluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgdVN0YXR1c0NvZGUgPSAwIDsKKyAgICB1bnNpZ25lZCBpbnQgdU5vZGVJbmRleCA9IDA7CiAgICAgV0xBTl9GUl9BVVRIRU4gICAgICBzRnJhbWU7CiAKICAgICBpZiAoIVdMQU5fR0VUX0ZDX0lTV0VQKHBGcmFtZS0+cEhkci0+c0EzLndGcmFtZUN0bCkpIHsKQEAgLTE1NzMsOCArMTU3NCw4IEBACiAgICAgLy8gc2VuZCBhdXRoIHJlcGx5CiAgICAgcFR4UGFja2V0ID0gKFBTVHhNZ210UGFja2V0KXBNZ210LT5wYnlNZ210UGFja2V0UG9vbDsKICAgICBtZW1zZXQocFR4UGFja2V0LCAwLCBzaXplb2YoU1R4TWdtdFBhY2tldCkgKyBXTEFOX0FVVEhFTl9GUl9NQVhMRU4pOwotICAgIHBUeFBhY2tldC0+cDgwMjExSGVhZGVyID0gKFBVV0xBTl84MDIxMUhEUikoKFBCWVRFKXBUeFBhY2tldCArIHNpemVvZihTVHhNZ210UGFja2V0KSk7Ci0gICAgc0ZyYW1lLnBCdWYgPSAoUEJZVEUpcFR4UGFja2V0LT5wODAyMTFIZWFkZXI7CisgICAgcFR4UGFja2V0LT5wODAyMTFIZWFkZXIgPSAoUFVXTEFOXzgwMjExSERSKSgodW5zaWduZWQgY2hhciAqKXBUeFBhY2tldCArIHNpemVvZihTVHhNZ210UGFja2V0KSk7CisgICAgc0ZyYW1lLnBCdWYgPSAodW5zaWduZWQgY2hhciAqKXBUeFBhY2tldC0+cDgwMjExSGVhZGVyOwogICAgIHNGcmFtZS5sZW4gPSBXTEFOX0FVVEhFTl9GUl9NQVhMRU47CiAgICAgLy8gZm9ybWF0IGJ1ZmZlciBzdHJ1Y3R1cmUKICAgICB2TWdyRW5jb2RlQXV0aGVuKCZzRnJhbWUpOwpAQCAtMTY2Niw3ICsxNjY3LDcgQEAKICAgICApCiB7CiAgICAgV0xBTl9GUl9ESVNBU1NPQyAgICBzRnJhbWU7Ci0gICAgVUlOVCAgICAgICAgdU5vZGVJbmRleCA9IDA7CisgICAgdW5zaWduZWQgaW50IHVOb2RlSW5kZXggPSAwOwogLy8gICAgQ01EX1NUQVRVUyAgICAgICAgICBDbWRTdGF0dXM7CiAgICAgdmlhd2dldF93cGFfaGVhZGVyICp3cGFoZHI7CiAKQEAgLTE2NzQsNyArMTY3NSw3IEBACiAgICAgICAgIC8vIGlmIGlzIGFjdGluZyBhbiBBUC4uCiAgICAgICAgIC8vIGEgU1RBIGlzIGxlYXZpbmcgdGhpcyBCU1MuLgogICAgICAgICBzRnJhbWUubGVuID0gcFJ4UGFja2V0LT5jYk1QRFVMZW47Ci0gICAgICAgIHNGcmFtZS5wQnVmID0gKFBCWVRFKXBSeFBhY2tldC0+cDgwMjExSGVhZGVyOworICAgICAgICBzRnJhbWUucEJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopcFJ4UGFja2V0LT5wODAyMTFIZWFkZXI7CiAgICAgICAgIGlmIChCU1NEQmJJc1NUQUluTm9kZURCKHBNZ210LCBwUnhQYWNrZXQtPnA4MDIxMUhlYWRlci0+c0EzLmFieUFkZHIyLCAmdU5vZGVJbmRleCkpIHsKICAgICAgICAgICAgIEJTU3ZSZW1vdmVPbmVOb2RlKHBEZXZpY2UsIHVOb2RlSW5kZXgpOwogICAgICAgICB9CkBAIC0xNjg0LDcgKzE2ODUsNyBAQAogICAgIH0KICAgICBlbHNlIGlmIChwTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9FU1NfU1RBICl7CiAgICAgICAgIHNGcmFtZS5sZW4gPSBwUnhQYWNrZXQtPmNiTVBEVUxlbjsKLSAgICAgICAgc0ZyYW1lLnBCdWYgPSAoUEJZVEUpcFJ4UGFja2V0LT5wODAyMTFIZWFkZXI7CisgICAgICAgIHNGcmFtZS5wQnVmID0gKHVuc2lnbmVkIGNoYXIgKilwUnhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKICAgICAgICAgdk1nckRlY29kZURpc2Fzc29jaWF0aW9uKCZzRnJhbWUpOwogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9OT1RJQ0UsIEtFUk5fSU5GTyAiQVAgZGlzYXNzb2NpYXRlZCBtZSwgcmVhc29uPSVkLlxuIiwgY3B1X3RvX2xlMTYoKihzRnJhbWUucHdSZWFzb24pKSk7CiAgICAgICAgIC8vVE9ETzogZG8gc29tZXRoaW5nIGxldCB1cHBlciBsYXllciBrbm93IG9yCkBAIC0xNzA5LDcgKzE3MTAsNyBAQAogICAgICAgICAgfTsKIAogICNpZmRlZiBXUEFfU1VQUExJQ0FOVF9EUklWRVJfV0VYVF9TVVBQT1JUCi0gIC8vIGlmKHBEZXZpY2UtPmJXUEFTdXBwV2V4dEVuYWJsZWQgPT0gVFJVRSkKKyAgLy8gaWYocERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9PSB0cnVlKQogICAgICAgewogCXVuaW9uIGl3cmVxX2RhdGEgIHdycXU7CiAJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2YgKHdycXUpKTsKQEAgLTE3NDUsNyArMTc0Niw3IEBACiAgICAgKQogewogICAgIFdMQU5fRlJfREVBVVRIRU4gICAgc0ZyYW1lOwotICAgIFVJTlQgICAgICAgIHVOb2RlSW5kZXggPSAwOworICAgIHVuc2lnbmVkIGludCB1Tm9kZUluZGV4ID0gMDsKICAgICB2aWF3Z2V0X3dwYV9oZWFkZXIgKndwYWhkcjsKIAogCkBAIC0xNzU0LDcgKzE3NTUsNyBAQAogICAgICAgICAvLyBpZiBpcyBhY3RpbmcgYW4gQVAuLgogICAgICAgICAvLyBhIFNUQSBpcyBsZWF2aW5nIHRoaXMgQlNTLi4KICAgICAgICAgc0ZyYW1lLmxlbiA9IHBSeFBhY2tldC0+Y2JNUERVTGVuOwotICAgICAgICBzRnJhbWUucEJ1ZiA9IChQQllURSlwUnhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKKyAgICAgICAgc0ZyYW1lLnBCdWYgPSAodW5zaWduZWQgY2hhciAqKXBSeFBhY2tldC0+cDgwMjExSGVhZGVyOwogICAgICAgICBpZiAoQlNTREJiSXNTVEFJbk5vZGVEQihwTWdtdCwgcFJ4UGFja2V0LT5wODAyMTFIZWFkZXItPnNBMy5hYnlBZGRyMiwgJnVOb2RlSW5kZXgpKSB7CiAgICAgICAgICAgICBCU1N2UmVtb3ZlT25lTm9kZShwRGV2aWNlLCB1Tm9kZUluZGV4KTsKICAgICAgICAgfQpAQCAtMTc2NSwxNyArMTc2NiwxNyBAQAogICAgIGVsc2UgewogICAgICAgICBpZiAocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX1NUQSApIHsKICAgICAgICAgICAgIHNGcmFtZS5sZW4gPSBwUnhQYWNrZXQtPmNiTVBEVUxlbjsKLSAgICAgICAgICAgIHNGcmFtZS5wQnVmID0gKFBCWVRFKXBSeFBhY2tldC0+cDgwMjExSGVhZGVyOworICAgICAgICAgICAgc0ZyYW1lLnBCdWYgPSAodW5zaWduZWQgY2hhciAqKXBSeFBhY2tldC0+cDgwMjExSGVhZGVyOwogICAgICAgICAgICAgdk1nckRlY29kZURlYXV0aGVuKCZzRnJhbWUpOwogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfTk9USUNFLCBLRVJOX0lORk8gICJBUCBkZWF1dGhlZCBtZSwgcmVhc29uPSVkLlxuIiwgY3B1X3RvX2xlMTYoKCooc0ZyYW1lLnB3UmVhc29uKSkpKTsKICAgICAgICAgICAgIC8vIFRPRE86IHVwZGF0ZSBCU1MgbGlzdCBmb3Igc3BlY2lmaWMgQlNTSUQgaWYgcHJlLWF1dGhlbnRpY2F0aW9uIGNhc2UKLSAgICAgICAgICAgIGlmIChJU19FVEhfQUREUkVTU19FUVVBTChzRnJhbWUucEhkci0+c0EzLmFieUFkZHIzLCBwTWdtdC0+YWJ5Q3VyckJTU0lEKSkgeworICAgICAgICAgICAgaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIoc0ZyYW1lLnBIZHItPnNBMy5hYnlBZGRyMywgcE1nbXQtPmFieUN1cnJCU1NJRCkpIHsKICAgICAgICAgICAgICAgICBpZiAocE1nbXQtPmVDdXJyU3RhdGUgPj0gV01BQ19TVEFURV9BVVRIUEVORElORykgewotICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJBY3RpdmUgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iQWN0aXZlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5lQ3Vyck1vZGUgPSBXTUFDX01PREVfU1RBTkRCWTsKICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX0lETEU7CiAgICAgICAgICAgICAgICAgICAgIG5ldGlmX3N0b3BfcXVldWUocERldmljZS0+ZGV2KTsKLSAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YkxpbmtQYXNzID0gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IGZhbHNlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH07CiAKQEAgLTE3OTUsNyArMTc5Niw3IEBACiAgICAgICAgICAgIH07CiAKICAgICNpZmRlZiBXUEFfU1VQUExJQ0FOVF9EUklWRVJfV0VYVF9TVVBQT1JUCi0gIC8vIGlmKHBEZXZpY2UtPmJXUEFTdXBwV2V4dEVuYWJsZWQgPT0gVFJVRSkKKyAgLy8gaWYocERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9PSB0cnVlKQogICAgICAgewogCXVuaW9uIGl3cmVxX2RhdGEgIHdycXU7CiAJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2YgKHdycXUpKTsKQEAgLTE4MjUsMjMgKzE4MjYsMjMgQEAKICAqICAgICAgICAgICAgICAgVHJ1ZTpleGNlZWQ7CiAgKiAgICAgICAgICAgICAgICBGYWxzZTpub3JtYWwgY2FzZQogLSovCi1zdGF0aWMgQk9PTAorc3RhdGljIGJvb2wKIENoYW5uZWxFeGNlZWRab25lVHlwZSgKICAgICBQU0RldmljZSBwRGV2aWNlLAotICAgIEJZVEUgYnlDdXJyQ2hhbm5lbAorICAgIHVuc2lnbmVkIGNoYXIgYnlDdXJyQ2hhbm5lbAogICAgICkKIHsKLSAgQk9PTCBleGNlZWQ9RkFMU0U7CisgIGJvb2wgZXhjZWVkPWZhbHNlOwogCiAgIHN3aXRjaChwRGV2aWNlLT5ieVpvbmVUeXBlKSB7CiAgIAljYXNlIDB4MDA6ICAgICAgICAgICAgICAgICAgLy9VU0E6MX4xMQogICAgICAgICAgICAgICAgICAgICAgaWYoKGJ5Q3VyckNoYW5uZWw8MSkgfHwoYnlDdXJyQ2hhbm5lbD4xMSkpCi0JICAgICAgICAgICAgICAgIGV4Y2VlZCA9IFRSVUU7CisJICAgICAgICAgICAgICAgIGV4Y2VlZCA9IHRydWU7CiAJICAgICAgICAgYnJlYWs7CiAJY2FzZSAweDAxOiAgICAgICAgICAgICAgICAgIC8vSmFwYW46MX4xMwogCWNhc2UgMHgwMjogICAgICAgICAgICAgICAgICAvL0V1cm9wZToxfjEzCiAgICAgICAgICAgICAgICAgICAgICBpZigoYnlDdXJyQ2hhbm5lbDwxKSB8fChieUN1cnJDaGFubmVsPjEzKSkKLQkgICAgICAgICAgICAgICAgZXhjZWVkID0gVFJVRTsKKwkgICAgICAgICAgICAgICAgZXhjZWVkID0gdHJ1ZTsKIAkgICAgICAgICBicmVhazsKIAlkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgLy9yZXNlcnZlIGZvciBvdGhlciB6b25ldHlwZQogCQlicmVhazsKQEAgLTE4NjgsMzkgKzE4NjksMzkgQEAKICAgICBQU0RldmljZSBwRGV2aWNlLAogICAgIFBTTWdtdE9iamVjdCBwTWdtdCwKICAgICBQU1J4TWdtdFBhY2tldCBwUnhQYWNrZXQsCi0gICAgQk9PTCBiSW5TY2FuCisgICAgYm9vbCBiSW5TY2FuCiAgICAgKQogewogCiAgICAgUEtub3duQlNTICAgICAgICAgICBwQlNTTGlzdDsKICAgICBXTEFOX0ZSX0JFQUNPTiAgICAgIHNGcmFtZTsKICAgICBRV09SRCAgICAgICAgICAgICAgIHF3VFNGT2Zmc2V0OwotICAgIEJPT0wgICAgICAgICAgICAgICAgYklzQlNTSURFcXVhbCA9IEZBTFNFOwotICAgIEJPT0wgICAgICAgICAgICAgICAgYklzU1NJREVxdWFsID0gRkFMU0U7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICBiVFNGTGFyZ2VEaWZmID0gRkFMU0U7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICBiVFNGT2Zmc2V0UG9zdGl2ZSA9IEZBTFNFOwotICAgIEJPT0wgICAgICAgICAgICAgICAgYlVwZGF0ZVRTRiA9IEZBTFNFOwotICAgIEJPT0wgICAgICAgICAgICAgICAgYklzQVBCZWFjb24gPSBGQUxTRTsKLSAgICBCT09MICAgICAgICAgICAgICAgIGJJc0NoYW5uZWxFcXVhbCA9IEZBTFNFOwotICAgIFVJTlQgICAgICAgICAgICAgICAgdUxvY2F0ZUJ5dGVJbmRleDsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5VElNQml0T24gPSAwOwotICAgIFdPUkQgICAgICAgICAgICAgICAgd0FJRE51bWJlciA9IDA7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICB1Tm9kZUluZGV4OworICAgIGJvb2wgYklzQlNTSURFcXVhbCA9IGZhbHNlOworICAgIGJvb2wgYklzU1NJREVxdWFsID0gZmFsc2U7CisgICAgYm9vbCBiVFNGTGFyZ2VEaWZmID0gZmFsc2U7CisgICAgYm9vbCBiVFNGT2Zmc2V0UG9zdGl2ZSA9IGZhbHNlOworICAgIGJvb2wgYlVwZGF0ZVRTRiA9IGZhbHNlOworICAgIGJvb2wgYklzQVBCZWFjb24gPSBmYWxzZTsKKyAgICBib29sIGJJc0NoYW5uZWxFcXVhbCA9IGZhbHNlOworICAgIHVuc2lnbmVkIGludCB1TG9jYXRlQnl0ZUluZGV4OworICAgIHVuc2lnbmVkIGNoYXIgYnlUSU1CaXRPbiA9IDA7CisgICAgdW5zaWduZWQgc2hvcnQgd0FJRE51bWJlciA9IDA7CisgICAgdW5zaWduZWQgaW50IHVOb2RlSW5kZXg7CiAgICAgUVdPUkQgICAgICAgICAgICAgICBxd1RpbWVzdGFtcCwgcXdMb2NhbFRTRjsKICAgICBRV09SRCAgICAgICAgICAgICAgIHF3Q3VyclRTRjsKLSAgICBXT1JEICAgICAgICAgICAgICAgIHdTdGFydEluZGV4ID0gMDsKLSAgICBXT1JEICAgICAgICAgICAgICAgIHdBSURJbmRleCA9IDA7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieUN1cnJDaGFubmVsID0gcFJ4UGFja2V0LT5ieVJ4Q2hhbm5lbDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3U3RhcnRJbmRleCA9IDA7CisgICAgdW5zaWduZWQgc2hvcnQgd0FJREluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q3VyckNoYW5uZWwgPSBwUnhQYWNrZXQtPmJ5UnhDaGFubmVsOwogICAgIEVSUE9iamVjdCAgICAgICAgICAgc0VSUDsKLSAgICBVSU5UICAgICAgICAgICAgICAgIHVSYXRlTGVuID0gV0xBTl9SQVRFU19NQVhMRU47Ci0gICAgQk9PTCAgICAgICAgICAgICAgICBiQ2hhbm5lbEhpdCA9IEZBTFNFOwotICAgIEJPT0wgICAgICAgICAgICAgICAgYlVwZGF0ZVBoeVBhcmFtZXRlciA9IEZBTFNFOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlJRUNoYW5uZWwgPSAwOworICAgIHVuc2lnbmVkIGludCB1UmF0ZUxlbiA9IFdMQU5fUkFURVNfTUFYTEVOOworICAgIGJvb2wgYkNoYW5uZWxIaXQgPSBmYWxzZTsKKyAgICBib29sIGJVcGRhdGVQaHlQYXJhbWV0ZXIgPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5SUVDaGFubmVsID0gMDsKIAogCiAgICAgbWVtc2V0KCZzRnJhbWUsIDAsIHNpemVvZihXTEFOX0ZSX0JFQUNPTikpOwogICAgIHNGcmFtZS5sZW4gPSBwUnhQYWNrZXQtPmNiTVBEVUxlbjsKLSAgICBzRnJhbWUucEJ1ZiA9IChQQllURSlwUnhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKKyAgICBzRnJhbWUucEJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopcFJ4UGFja2V0LT5wODAyMTFIZWFkZXI7CiAKICAgICAvLyBkZWNvZGUgdGhlIGJlYWNvbiBmcmFtZQogICAgIHZNZ3JEZWNvZGVCZWFjb24oJnNGcmFtZSk7CkBAIC0xOTE3LDI5ICsxOTE4LDI5IEBACiAgICAgaWYgKHNGcmFtZS5wRFNQYXJtcyAhPSBOVUxMKSB7CiAgICAgICAgIGlmIChieUN1cnJDaGFubmVsID4gQ0JfTUFYX0NIQU5ORUxfMjRHKSB7CiAgICAgICAgICAgICAvLyBjaGFubmVsIHJlbWFwcGluZyB0bwotICAgICAgICAgICAgYnlJRUNoYW5uZWwgPSBDQVJEYnlHZXRDaGFubmVsTWFwcGluZyhwRGV2aWNlLCBzRnJhbWUucERTUGFybXMtPmJ5Q3VyckNoYW5uZWwsIFBIWV9UWVBFXzExQSk7CisgICAgICAgICAgICBieUlFQ2hhbm5lbCA9IGdldF9jaGFubmVsX21hcHBpbmcocERldmljZSwgc0ZyYW1lLnBEU1Bhcm1zLT5ieUN1cnJDaGFubmVsLCBQSFlfVFlQRV8xMUEpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYnlJRUNoYW5uZWwgPSBzRnJhbWUucERTUGFybXMtPmJ5Q3VyckNoYW5uZWw7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGJ5Q3VyckNoYW5uZWwgIT0gYnlJRUNoYW5uZWwpIHsKICAgICAgICAgICAgIC8vIGFkanVzdCBjaGFubmVsIGluZm8uIGJjcyB3ZSByY3YgYWRqY2VudCBjaGFubmVsIHBha2NrZXRzCi0gICAgICAgICAgICBiQ2hhbm5lbEhpdCA9IEZBTFNFOworICAgICAgICAgICAgYkNoYW5uZWxIaXQgPSBmYWxzZTsKICAgICAgICAgICAgIGJ5Q3VyckNoYW5uZWwgPSBieUlFQ2hhbm5lbDsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIG5vIERTIGNoYW5uZWwgaW5mbwotICAgICAgICBiQ2hhbm5lbEhpdCA9IFRSVUU7CisgICAgICAgIGJDaGFubmVsSGl0ID0gdHJ1ZTsKICAgICB9CiAvLzIwMDgtMDczMC0wMTxBZGQ+YnkgTWlrZUxpdQotaWYoQ2hhbm5lbEV4Y2VlZFpvbmVUeXBlKHBEZXZpY2UsYnlDdXJyQ2hhbm5lbCk9PVRSVUUpCitpZihDaGFubmVsRXhjZWVkWm9uZVR5cGUocERldmljZSxieUN1cnJDaGFubmVsKT09dHJ1ZSkKICAgICAgIHJldHVybjsKIAogICAgIGlmIChzRnJhbWUucEVSUCAhPSBOVUxMKSB7CiAgICAgICAgIHNFUlAuYnlFUlAgPSBzRnJhbWUucEVSUC0+YnlDb250ZXh0OwotICAgICAgICBzRVJQLmJFUlBFeGlzdCA9IFRSVUU7CisgICAgICAgIHNFUlAuYkVSUEV4aXN0ID0gdHJ1ZTsKIAogICAgIH0gZWxzZSB7Ci0gICAgICAgIHNFUlAuYkVSUEV4aXN0ID0gRkFMU0U7CisgICAgICAgIHNFUlAuYkVSUEV4aXN0ID0gZmFsc2U7CiAgICAgICAgIHNFUlAuYnlFUlAgPSAwOwogICAgIH0KIApAQCAtMTk5Myw4ICsxOTk0LDggQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmKGJ5Q3VyckNoYW5uZWwgPT0gKEJZVEUpcE1nbXQtPnVDdXJyQ2hhbm5lbCkKLSAgICAgICBiSXNDaGFubmVsRXF1YWwgPSBUUlVFOworICAgIGlmKGJ5Q3VyckNoYW5uZWwgPT0gKHVuc2lnbmVkIGNoYXIpcE1nbXQtPnVDdXJyQ2hhbm5lbCkKKyAgICAgICBiSXNDaGFubmVsRXF1YWwgPSB0cnVlOwogCiAgICAgaWYgKGJJc0NoYW5uZWxFcXVhbCAmJiAocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX0FQKSkgewogCkBAIC0yMDIxLDcgKzIwMjIsNyBAQAogICAgICAgICBpZiAoV0xBTl9HRVRfRVJQX1VTRV9QUk9URUNUSU9OKHBEZXZpY2UtPmJ5RVJQRmxhZykpewogICAgICAgICAgICAgaWYgKCFwRGV2aWNlLT5iUHJvdGVjdE1vZGUpIHsKICAgICAgICAgICAgICAgICAgTUFDdkVuYWJsZVByb3RlY3RNRChwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgcERldmljZS0+YlByb3RlY3RNb2RlID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgcERldmljZS0+YlByb3RlY3RNb2RlID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTIwMzUsNyArMjAzNiw3IEBACiAgICAgICAgICAgICAgICBwTWdtdC0+YWJ5Q3VyckJTU0lELAogICAgICAgICAgICAgICAgV0xBTl9CU1NJRF9MRU4pID09IDApIHsKIAotICAgICAgICBiSXNCU1NJREVxdWFsID0gVFJVRTsKKyAgICAgICAgYklzQlNTSURFcXVhbCA9IHRydWU7CiAKIC8vIDIwMDgtMDUtMjEgPGFkZD4gYnkgUmljaGFyZHRhaQogICAgICAgICBwRGV2aWNlLT51Q3VyclJTU0kgPSBwUnhQYWNrZXQtPnVSU1NJOwpAQCAtMjA1MiwzMCArMjA1MywzMCBAQAogICAgICAgICAgICAgICAgICAgICgoUFdMQU5fSUVfU1NJRClwTWdtdC0+YWJ5Q3VyclNTSUQpLT5hYnlTU0lELAogICAgICAgICAgICAgICAgICAgIHNGcmFtZS5wU1NJRC0+bGVuCiAgICAgICAgICAgICAgICAgICAgKSA9PSAwKSB7Ci0gICAgICAgICAgICBiSXNTU0lERXF1YWwgPSBUUlVFOworICAgICAgICAgICAgYklzU1NJREVxdWFsID0gdHJ1ZTsKICAgICAgICAgfTsKICAgICB9CiAKLSAgICBpZiAoKFdMQU5fR0VUX0NBUF9JTkZPX0VTUygqc0ZyYW1lLnB3Q2FwSW5mbyk9PSBUUlVFKSAmJgotICAgICAgICAoYklzQlNTSURFcXVhbCA9PSBUUlVFKSAmJgotICAgICAgICAoYklzU1NJREVxdWFsID09IFRSVUUpICYmCisgICAgaWYgKChXTEFOX0dFVF9DQVBfSU5GT19FU1MoKnNGcmFtZS5wd0NhcEluZm8pPT0gdHJ1ZSkgJiYKKyAgICAgICAgKGJJc0JTU0lERXF1YWwgPT0gdHJ1ZSkgJiYKKyAgICAgICAgKGJJc1NTSURFcXVhbCA9PSB0cnVlKSAmJgogICAgICAgICAocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX1NUQSkgJiYKICAgICAgICAgKHBNZ210LT5lQ3VyclN0YXRlID09IFdNQUNfU1RBVEVfQVNTT0MpKSB7CiAgICAgICAgIC8vIGFkZCBzdGF0ZSBjaGVjayB0byBwcmV2ZW50IHJlY29ubmVjdCBmYWlsIHNpbmNlIHdlJ2xsIHJlY2VpdmUgQmVhY29uCiAKLSAgICAgICAgYklzQVBCZWFjb24gPSBUUlVFOworICAgICAgICBiSXNBUEJlYWNvbiA9IHRydWU7CiAKICAgICAgICAgaWYgKHBCU1NMaXN0ICE9IE5VTEwpIHsKIAogICAgICAgICAgICAgLy8gQ29tcGFyZSBQSFkgcGFyYW1hdGVyIHNldHRpbmcKICAgICAgICAgICAgIGlmIChwTWdtdC0+d0N1cnJDYXBJbmZvICE9IHBCU1NMaXN0LT53Q2FwSW5mbykgewotICAgICAgICAgICAgICAgIGJVcGRhdGVQaHlQYXJhbWV0ZXIgPSBUUlVFOworICAgICAgICAgICAgICAgIGJVcGRhdGVQaHlQYXJhbWV0ZXIgPSB0cnVlOwogICAgICAgICAgICAgICAgIHBNZ210LT53Q3VyckNhcEluZm8gPSBwQlNTTGlzdC0+d0NhcEluZm87CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoc0ZyYW1lLnBFUlAgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIGlmICgoc0ZyYW1lLnBFUlAtPmJ5RWxlbWVudElEID09IFdMQU5fRUlEX0VSUCkgJiYKICAgICAgICAgICAgICAgICAgICAgKHBNZ210LT5ieUVSUENvbnRleHQgIT0gc0ZyYW1lLnBFUlAtPmJ5Q29udGV4dCkpIHsKLSAgICAgICAgICAgICAgICAgICAgYlVwZGF0ZVBoeVBhcmFtZXRlciA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgIGJVcGRhdGVQaHlQYXJhbWV0ZXIgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBwTWdtdC0+YnlFUlBDb250ZXh0ID0gc0ZyYW1lLnBFUlAtPmJ5Q29udGV4dDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0yMDk0LDcgKzIwOTUsNyBAQAogICAgICAgICAgICAgUkFURXZQYXJzZU1heFJhdGUoICh2b2lkICopcERldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUFdMQU5fSUVfU1VQUF9SQVRFUylwTWdtdC0+YWJ5Q3VyclN1cHBSYXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUFdMQU5fSUVfU1VQUF9SQVRFUylwTWdtdC0+YWJ5Q3VyckV4dFN1cHBSYXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihwTWdtdC0+c05vZGVEQlRhYmxlWzBdLndNYXhCYXNpY1JhdGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocE1nbXQtPnNOb2RlREJUYWJsZVswXS53TWF4U3VwcFJhdGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocE1nbXQtPnNOb2RlREJUYWJsZVswXS53U3VwcFJhdGUpLApAQCAtMjEwNCw3ICsyMTA1LDcgQEAKICNpZmRlZglQTElDRV9ERUJVRwogCQkvL3ByaW50aygiUnhCZWFjb246TWF4U3VwcFJhdGUgaXMgJWRcbiIscE1nbXQtPnNOb2RlREJUYWJsZVswXS53TWF4U3VwcFJhdGUpOwogI2VuZGlmCi0JCQlpZiAoYlVwZGF0ZVBoeVBhcmFtZXRlciA9PSBUUlVFKSB7CisJCQlpZiAoYlVwZGF0ZVBoeVBhcmFtZXRlciA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgQ0FSRGJTZXRQaHlQYXJhbWV0ZXIoIHBNZ210LT5wQWRhcHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPmVDdXJyZW50UEhZTW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPndDdXJyQ2FwSW5mbywKQEAgLTIxMTUsMTkgKzIxMTYsMTkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChzRnJhbWUucElFX1Bvd2VyQ29uc3RyYWludCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgQ0FSRHZTZXRQb3dlckNvbnN0cmFpbnQocE1nbXQtPnBBZGFwdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFKSBwQlNTTGlzdC0+dUNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpIHBCU1NMaXN0LT51Q2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzRnJhbWUucElFX1Bvd2VyQ29uc3RyYWludC0+YnlQb3dlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoc0ZyYW1lLnBJRV9DSFNXICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICBDQVJEYkNoYW5uZWxTd2l0Y2goIHBNZ210LT5wQWRhcHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNGcmFtZS5wSUVfQ0hTVy0+YnlNb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FSRGJ5R2V0Q2hhbm5lbE1hcHBpbmcocE1nbXQtPnBBZGFwdGVyLCBzRnJhbWUucElFX0NIU1ctPmJ5TW9kZSwgcE1nbXQtPmVDdXJyZW50UEhZTW9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfY2hhbm5lbF9tYXBwaW5nKHBNZ210LT5wQWRhcHRlciwgc0ZyYW1lLnBJRV9DSFNXLT5ieU1vZGUsIHBNZ210LT5lQ3VycmVudFBIWU1vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc0ZyYW1lLnBJRV9DSFNXLT5ieUNvdW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogCi0gICAgICAgICAgICB9IGVsc2UgaWYgKGJJc0NoYW5uZWxFcXVhbCA9PSBGQUxTRSkgewotICAgICAgICAgICAgICAgIENBUkRiU2V0Q2hhbm5lbChwTWdtdC0+cEFkYXB0ZXIsIHBCU1NMaXN0LT51Q2hhbm5lbCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGJJc0NoYW5uZWxFcXVhbCA9PSBmYWxzZSkgeworICAgICAgICAgICAgICAgIHNldF9jaGFubmVsKHBNZ210LT5wQWRhcHRlciwgcEJTU0xpc3QtPnVDaGFubmVsKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTIxNDgsMTcgKzIxNDksMTcgQEAKICAgICAvLyBjaGVjayBpZiBiZWFjb24gVFNGIGxhcmdlciBvciBzbWFsbCB0aGFuIG91ciBsb2NhbCBUU0YKICAgICBpZiAoSElEV09SRChxd1RpbWVzdGFtcCkgPT0gSElEV09SRChxd0xvY2FsVFNGKSkgewogICAgICAgICBpZiAoTE9EV09SRChxd1RpbWVzdGFtcCkgPj0gTE9EV09SRChxd0xvY2FsVFNGKSkgewotICAgICAgICAgICAgYlRTRk9mZnNldFBvc3RpdmUgPSBUUlVFOworICAgICAgICAgICAgYlRTRk9mZnNldFBvc3RpdmUgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgYlRTRk9mZnNldFBvc3RpdmUgPSBGQUxTRTsKKyAgICAgICAgICAgIGJUU0ZPZmZzZXRQb3N0aXZlID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAoSElEV09SRChxd1RpbWVzdGFtcCkgPiBISURXT1JEKHF3TG9jYWxUU0YpKSB7Ci0gICAgICAgIGJUU0ZPZmZzZXRQb3N0aXZlID0gVFJVRTsKKyAgICAgICAgYlRTRk9mZnNldFBvc3RpdmUgPSB0cnVlOwogICAgIH0KICAgICBlbHNlIGlmIChISURXT1JEKHF3VGltZXN0YW1wKSA8IEhJRFdPUkQocXdMb2NhbFRTRikpIHsKLSAgICAgICAgYlRTRk9mZnNldFBvc3RpdmUgPSBGQUxTRTsKKyAgICAgICAgYlRTRk9mZnNldFBvc3RpdmUgPSBmYWxzZTsKICAgICB9OwogCiAgICAgaWYgKGJUU0ZPZmZzZXRQb3N0aXZlKSB7CkBAIC0yMTcwLDIxICsyMTcxLDIxIEBACiAKICAgICBpZiAoSElEV09SRChxd1RTRk9mZnNldCkgIT0gMCB8fAogICAgICAgICAoTE9EV09SRChxd1RTRk9mZnNldCkgPiBUUklWSUFMX1NZTkNfRElGRkVSRU5DRSApKSB7Ci0gICAgICAgICBiVFNGTGFyZ2VEaWZmID0gVFJVRTsKKyAgICAgICAgIGJUU0ZMYXJnZURpZmYgPSB0cnVlOwogICAgIH0KIAogCiAgICAgLy8gaWYgaW5mcmEgbW9kZQotICAgIGlmIChiSXNBUEJlYWNvbiA9PSBUUlVFKSB7CisgICAgaWYgKGJJc0FQQmVhY29uID09IHRydWUpIHsKIAogICAgICAgICAvLyBJbmZyYSBtb2RlOiBMb2NhbCBUU0YgYWx3YXlzIGZvbGxvdyBBUCdzIFRTRiBpZiBEaWZmZXJlbmNlIGh1Z2UuCiAgICAgICAgIGlmIChiVFNGTGFyZ2VEaWZmKQotICAgICAgICAgICAgYlVwZGF0ZVRTRiA9IFRSVUU7CisgICAgICAgICAgICBiVXBkYXRlVFNGID0gdHJ1ZTsKIAotICAgICAgICBpZiAoKHBEZXZpY2UtPmJFbmFibGVQU01vZGUgPT0gVFJVRSkgJiYoc0ZyYW1lLnBUSU0gIT0gMCkpIHsKKyAgICAgICAgaWYgKChwRGV2aWNlLT5iRW5hYmxlUFNNb2RlID09IHRydWUpICYmKHNGcmFtZS5wVElNICE9IDApKSB7CiAKICAgICAgICAgICAgIC8vIGRlYWwgd2l0aCBEVElNLCBhbmFseXNpcyBUSU0KLSAgICAgICAgICAgIHBNZ210LT5iTXVsdGljYXN0VElNID0gV0xBTl9NR01UX0lTX01VTFRJQ0FTVF9USU0oc0ZyYW1lLnBUSU0tPmJ5Qml0TWFwQ3RsKSA/IFRSVUUgOiBGQUxTRSA7CisgICAgICAgICAgICBwTWdtdC0+Yk11bHRpY2FzdFRJTSA9IFdMQU5fTUdNVF9JU19NVUxUSUNBU1RfVElNKHNGcmFtZS5wVElNLT5ieUJpdE1hcEN0bCkgPyB0cnVlIDogZmFsc2UgOwogICAgICAgICAgICAgcE1nbXQtPmJ5RFRJTUNvdW50ID0gc0ZyYW1lLnBUSU0tPmJ5RFRJTUNvdW50OwogICAgICAgICAgICAgcE1nbXQtPmJ5RFRJTVBlcmlvZCA9IHNGcmFtZS5wVElNLT5ieURUSU1QZXJpb2Q7CiAgICAgICAgICAgICB3QUlETnVtYmVyID0gcE1nbXQtPndDdXJyQUlEICYgfihCSVQxNHxCSVQxNSk7CkBAIC0yMTk5LDE5ICsyMjAwLDE5IEBACiAgICAgICAgICAgICAgICAgLy8gbGVuID0gYnlEVElNQ291bnQgKyBieURUSU1QZXJpb2QgKyBieURUSU1QZXJpb2QgKyBieVZpcnRCaXRNYXBbMH4yNTBdCiAgICAgICAgICAgICAgICAgaWYgKHNGcmFtZS5wVElNLT5sZW4gPj0gKHVMb2NhdGVCeXRlSW5kZXggKyA0KSkgewogICAgICAgICAgICAgICAgICAgICBieVRJTUJpdE9uICA9ICgweDAxKSA8PCAoKHdBSUROdW1iZXIpICUgOCk7Ci0gICAgICAgICAgICAgICAgICAgIHBNZ210LT5iSW5USU0gPSBzRnJhbWUucFRJTS0+YnlWaXJ0Qml0TWFwW3VMb2NhdGVCeXRlSW5kZXhdICYgYnlUSU1CaXRPbiA/IFRSVUUgOiBGQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgcE1nbXQtPmJJblRJTSA9IHNGcmFtZS5wVElNLT5ieVZpcnRCaXRNYXBbdUxvY2F0ZUJ5dGVJbmRleF0gJiBieVRJTUJpdE9uID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcE1nbXQtPmJJblRJTSA9IEZBTFNFOworICAgICAgICAgICAgICAgICAgICBwTWdtdC0+YkluVElNID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHBNZ210LT5iSW5USU0gPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBwTWdtdC0+YkluVElNID0gZmFsc2U7CiAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICBpZiAocE1nbXQtPmJJblRJTSB8fAogICAgICAgICAgICAgICAgIChwTWdtdC0+Yk11bHRpY2FzdFRJTSAmJiAocE1nbXQtPmJ5RFRJTUNvdW50ID09IDApKSkgewotICAgICAgICAgICAgICAgIHBNZ210LT5iSW5USU1XYWtlID0gVFJVRTsKKyAgICAgICAgICAgICAgICBwTWdtdC0+YkluVElNV2FrZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgLy8gc2VuZCBvdXQgcHMtcG9sbCBwYWNrZXQKIC8vICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkJDTjpJbiBUSU1cbiIpOwogICAgICAgICAgICAgICAgIGlmIChwTWdtdC0+YkluVElNKSB7CkBAIC0yMjIxLDE0ICsyMjIyLDE0IEBACiAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHBNZ210LT5iSW5USU1XYWtlID0gRkFMU0U7CisgICAgICAgICAgICAgICAgcE1nbXQtPmJJblRJTVdha2UgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJCQ046IE5vdCBJbiBUSU0uLlxuIik7Ci0gICAgICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJQV0JpdE9uID09IEZBTFNFKSB7CisgICAgICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJQV0JpdE9uID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkJDTjogU2VuZCBOdWxsIFBhY2tldFxuIik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChQU2JTZW5kTnVsbFBhY2tldChwRGV2aWNlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJQV0JpdE9uID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJQV0JpdE9uID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYoUFNiQ29uc2lkZXJQb3dlckRvd24ocERldmljZSwgRkFMU0UsIEZBTFNFKSkgeworICAgICAgICAgICAgICAgIGlmKFBTYkNvbnNpZGVyUG93ZXJEb3duKHBEZXZpY2UsIGZhbHNlLCBmYWxzZSkpIHsKICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJCQ046IFBvd2VyIGRvd24gbm93Li4uXG4iKTsKICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgfQpAQCAtMjI0Niw3ICsyMjQ3LDcgQEAKICAgICAgICAgICAgIC8vIGFkaG9jIG1vZGU6VFNGIHVwZGF0ZWQgb25seSB3aGVuIGJlYWNvbiBsYXJnZXIgdGhlbiBsb2NhbCBUU0YKICAgICAgICAgICAgIGlmIChiVFNGTGFyZ2VEaWZmICYmIGJUU0ZPZmZzZXRQb3N0aXZlICYmCiAgICAgICAgICAgICAgICAgKHBNZ210LT5lQ3VyclN0YXRlID09IFdNQUNfU1RBVEVfSk9JTlRFRCkpCi0gICAgICAgICAgICAgICAgYlVwZGF0ZVRTRiA9IFRSVUU7CisgICAgICAgICAgICAgICAgYlVwZGF0ZVRTRiA9IHRydWU7CiAKICAgICAgICAgICAgIC8vIER1cmluZyBkcGMsIGFscmVhZHkgaW4gc3BpbmxvY2tlZC4KICAgICAgICAgICAgIGlmIChCU1NEQmJJc1NUQUluTm9kZURCKHBNZ210LCBzRnJhbWUucEhkci0+c0EzLmFieUFkZHIyLCAmdU5vZGVJbmRleCkpIHsKQEAgLTIyNTksNyArMjI2MCw3IEBACiAgICAgICAgICAgICAgICAgUkFURXZQYXJzZU1heFJhdGUoICh2b2lkICopcERldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBXTEFOX0lFX1NVUFBfUkFURVMpcE1nbXQtPmFieUN1cnJTdXBwUmF0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53TWF4QmFzaWNSYXRlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLndNYXhTdXBwUmF0ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53U3VwcFJhdGUpLApAQCAtMjI4MCw3ICsyMjgxLDcgQEAKICAgICAgICAgICAgICAgICBSQVRFdlBhcnNlTWF4UmF0ZSggKHZvaWQgKilwRGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUFdMQU5fSUVfU1VQUF9SQVRFUylwTWdtdC0+YWJ5Q3VyclN1cHBSYXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLndNYXhCYXNpY1JhdGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud01heFN1cHBSYXRlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLndTdXBwUmF0ZSksCkBAIC0yMzAwLDcgKzIzMDEsNyBAQAogLyoKICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmJTaG9ydFNsb3RUaW1lID0gV0xBTl9HRVRfQ0FQX0lORk9fU0hPUlRTTE9UVElNRSgqc0ZyYW1lLnB3Q2FwSW5mbyk7CiAgICAgICAgICAgICAgICAgaWYocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53TWF4U3VwcFJhdGUgPiBSQVRFXzExTSkKLSAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5iRVJQRXhpc3QgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmJFUlBFeGlzdCA9IHRydWU7CiAqLwogICAgICAgICAgICAgfQogCkBAIC0yMzA4LDExICsyMzA5LDExIEBACiAgICAgICAgICAgICBpZiAocE1nbXQtPmVDdXJyU3RhdGUgPT0gV01BQ19TVEFURV9TVEFSVEVEKSB7CiAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiQ3VycmVudCBJQlNTIFN0YXRlOiBbU3RhcnRlZF0uLi4uLi4uLnRvOiBbSm9pbnRlZF0gXG4iKTsKICAgICAgICAgICAgICAgICBwTWdtdC0+ZUN1cnJTdGF0ZSA9IFdNQUNfU1RBVEVfSk9JTlRFRDsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBUUlVFOworICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IHRydWU7CiAgICAgICAgICAgICAgICAgaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQocERldmljZS0+ZGV2KSl7CiAgICAgICAgICAgICAgICAgICAgIG5ldGlmX3dha2VfcXVldWUocERldmljZS0+ZGV2KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iQWN0aXZlID0gVFJVRTsKKyAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJBY3RpdmUgPSB0cnVlOwogICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0udUluQWN0aXZlQ291bnQgPSAwOwogCiAgICAgICAgICAgICB9OwpAQCAtMjM5MiwxNiArMjM5MywxNiBAQAogewogICAgIFBTRGV2aWNlICAgICAgICAgICAgcERldmljZSA9IChQU0RldmljZSloRGV2aWNlQ29udGV4dDsKICAgICBQU01nbXRPYmplY3QgICAgICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7Ci0gICAgV09SRCAgICAgICAgICAgICAgICB3TWF4QmFzaWNSYXRlOwotICAgIFdPUkQgICAgICAgICAgICAgICAgd01heFN1cHBSYXRlOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlUb3BDQ0tCYXNpY1JhdGU7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieVRvcE9GRE1CYXNpY1JhdGU7CisgICAgdW5zaWduZWQgc2hvcnQgd01heEJhc2ljUmF0ZTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3TWF4U3VwcFJhdGU7CisgICAgdW5zaWduZWQgY2hhciBieVRvcENDS0Jhc2ljUmF0ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VG9wT0ZETUJhc2ljUmF0ZTsKICAgICBRV09SRCAgICAgICAgICAgICAgIHF3Q3VyclRTRjsKLSAgICBVSU5UICAgICAgICAgICAgICAgIGlpOwotICAgIEJZVEUgICAgYWJ5UkFURVtdID0gezB4ODIsIDB4ODQsIDB4OEIsIDB4OTYsIDB4MjQsIDB4MzAsIDB4NDgsIDB4NkMsIDB4MEMsIDB4MTIsIDB4MTgsIDB4NjB9OwotICAgIEJZVEUgICAgYWJ5Q0NLX1JBVEVbXSA9IHsweDgyLCAweDg0LCAweDhCLCAweDk2fTsKLSAgICBCWVRFICAgIGFieU9GRE1fUkFURVtdID0gezB4MEMsIDB4MTIsIDB4MTgsIDB4MjQsIDB4MzAsIDB4NDgsIDB4NjAsIDB4NkN9OwotICAgIFdPUkQgICAgICAgICAgICAgICAgd1N1cHBSYXRlOworICAgIHVuc2lnbmVkIGludCBpaTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVJBVEVbXSA9IHsweDgyLCAweDg0LCAweDhCLCAweDk2LCAweDI0LCAweDMwLCAweDQ4LCAweDZDLCAweDBDLCAweDEyLCAweDE4LCAweDYwfTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUNDS19SQVRFW10gPSB7MHg4MiwgMHg4NCwgMHg4QiwgMHg5Nn07CisgICAgdW5zaWduZWQgY2hhciBhYnlPRkRNX1JBVEVbXSA9IHsweDBDLCAweDEyLCAweDE4LCAweDI0LCAweDMwLCAweDQ4LCAweDYwLCAweDZDfTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3U3VwcFJhdGU7CiAKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJDcmVhdGUgQmFzaWMgU2VydmljZSBTZXQgLi4uLi4uLlxuIik7CiAKQEAgLTI0ODYsNyArMjQ4Nyw3IEBACiAgICAgLy8gc2V0IGJhc2ljIHJhdGUKIAogICAgIFJBVEV2UGFyc2VNYXhSYXRlKCh2b2lkICopcERldmljZSwgKFBXTEFOX0lFX1NVUFBfUkFURVMpcE1nbXQtPmFieUN1cnJTdXBwUmF0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgKFBXTEFOX0lFX1NVUFBfUkFURVMpcE1nbXQtPmFieUN1cnJFeHRTdXBwUmF0ZXMsIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgKFBXTEFOX0lFX1NVUFBfUkFURVMpcE1nbXQtPmFieUN1cnJFeHRTdXBwUmF0ZXMsIHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgJndNYXhCYXNpY1JhdGUsICZ3TWF4U3VwcFJhdGUsICZ3U3VwcFJhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgJmJ5VG9wQ0NLQmFzaWNSYXRlLCAmYnlUb3BPRkRNQmFzaWNSYXRlKTsKIApAQCAtMjUzMywxMiArMjUzNCwxMiBAQAogICAgIGlmIChwTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9JQlNTX1NUQSkgewogCiAgICAgICAgIC8vIEJTU0lEIHNlbGVjdGVkIG11c3QgYmUgcmFuZG9taXplZCBhcyBzcGVjIDExLjEuMwotICAgICAgICBwTWdtdC0+YWJ5Q3VyckJTU0lEWzVdID0gKEJZVEUpIChMT0RXT1JEKHF3Q3VyclRTRikmIDB4MDAwMDAwZmYpOwotICAgICAgICBwTWdtdC0+YWJ5Q3VyckJTU0lEWzRdID0gKEJZVEUpKChMT0RXT1JEKHF3Q3VyclRTRikmIDB4MDAwMGZmMDApID4+IDgpOwotICAgICAgICBwTWdtdC0+YWJ5Q3VyckJTU0lEWzNdID0gKEJZVEUpKChMT0RXT1JEKHF3Q3VyclRTRikmIDB4MDBmZjAwMDApID4+IDE2KTsKLSAgICAgICAgcE1nbXQtPmFieUN1cnJCU1NJRFsyXSA9IChCWVRFKSgoTE9EV09SRChxd0N1cnJUU0YpJiAweDAwMDAwZmYwKSA+PiA0KTsKLSAgICAgICAgcE1nbXQtPmFieUN1cnJCU1NJRFsxXSA9IChCWVRFKSgoTE9EV09SRChxd0N1cnJUU0YpJiAweDAwMGZmMDAwKSA+PiAxMik7Ci0gICAgICAgIHBNZ210LT5hYnlDdXJyQlNTSURbMF0gPSAoQllURSkoKExPRFdPUkQocXdDdXJyVFNGKSYgMHgwZmYwMDAwMCkgPj4gMjApOworICAgICAgICBwTWdtdC0+YWJ5Q3VyckJTU0lEWzVdID0gKHVuc2lnbmVkIGNoYXIpIChMT0RXT1JEKHF3Q3VyclRTRikmIDB4MDAwMDAwZmYpOworICAgICAgICBwTWdtdC0+YWJ5Q3VyckJTU0lEWzRdID0gKHVuc2lnbmVkIGNoYXIpKChMT0RXT1JEKHF3Q3VyclRTRikmIDB4MDAwMGZmMDApID4+IDgpOworICAgICAgICBwTWdtdC0+YWJ5Q3VyckJTU0lEWzNdID0gKHVuc2lnbmVkIGNoYXIpKChMT0RXT1JEKHF3Q3VyclRTRikmIDB4MDBmZjAwMDApID4+IDE2KTsKKyAgICAgICAgcE1nbXQtPmFieUN1cnJCU1NJRFsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoTE9EV09SRChxd0N1cnJUU0YpJiAweDAwMDAwZmYwKSA+PiA0KTsKKyAgICAgICAgcE1nbXQtPmFieUN1cnJCU1NJRFsxXSA9ICh1bnNpZ25lZCBjaGFyKSgoTE9EV09SRChxd0N1cnJUU0YpJiAweDAwMGZmMDAwKSA+PiAxMik7CisgICAgICAgIHBNZ210LT5hYnlDdXJyQlNTSURbMF0gPSAodW5zaWduZWQgY2hhcikoKExPRFdPUkQocXdDdXJyVFNGKSYgMHgwZmYwMDAwMCkgPj4gMjApOwogICAgICAgICBwTWdtdC0+YWJ5Q3VyckJTU0lEWzVdIF49IHBNZ210LT5hYnlNQUNBZGRyWzBdOwogICAgICAgICBwTWdtdC0+YWJ5Q3VyckJTU0lEWzRdIF49IHBNZ210LT5hYnlNQUNBZGRyWzFdOwogICAgICAgICBwTWdtdC0+YWJ5Q3VyckJTU0lEWzNdIF49IHBNZ210LT5hYnlNQUNBZGRyWzJdOwpAQCAtMjYxMSw3ICsyNjEyLDcgQEAKIAogICAgIENBUkRiU2V0QmVhY29uUGVyaW9kKHBNZ210LT5wQWRhcHRlciwgcE1nbXQtPndJQlNTQmVhY29uUGVyaW9kKTsKICAgICAvLyBzZXQgY2hhbm5lbCBhbmQgY2xlYXIgTkFWCi0gICAgQ0FSRGJTZXRDaGFubmVsKHBNZ210LT5wQWRhcHRlciwgcE1nbXQtPnVJQlNTQ2hhbm5lbCk7CisgICAgc2V0X2NoYW5uZWwocE1nbXQtPnBBZGFwdGVyLCBwTWdtdC0+dUlCU1NDaGFubmVsKTsKICAgICBwTWdtdC0+dUN1cnJDaGFubmVsID0gcE1nbXQtPnVJQlNTQ2hhbm5lbDsKIAogICAgIGlmIChDQVJEYklzU2hvcnRQcmVhbWJsZShwTWdtdC0+cEFkYXB0ZXIpKSB7CkBAIC0yNjIwLDcgKzI2MjEsNyBAQAogICAgICAgICBwTWdtdC0+d0N1cnJDYXBJbmZvICY9ICh+V0xBTl9TRVRfQ0FQX0lORk9fU0hPUlRQUkVBTUJMRSgxKSk7CiAgICAgfQogCi0gICAgaWYgKChwTWdtdC0+YjExaEVuYWJsZSA9PSBUUlVFKSAmJgorICAgIGlmICgocE1nbXQtPmIxMWhFbmFibGUgPT0gdHJ1ZSkgJiYKICAgICAgICAgKHBNZ210LT5lQ3VycmVudFBIWU1vZGUgPT0gUEhZX1RZUEVfMTFBKSkgewogICAgICAgICBwTWdtdC0+d0N1cnJDYXBJbmZvIHw9IFdMQU5fU0VUX0NBUF9JTkZPX1NQRUNUUlVNTU5HKDEpOwogICAgIH0gZWxzZSB7CkBAIC0yNjYxLDIwICsyNjYyLDIwIEBACiAgICAgUFNEZXZpY2UgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpaERldmljZUNvbnRleHQ7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7CiAgICAgUEtub3duQlNTICAgICAgIHBDdXJyID0gTlVMTDsKLSAgICBVSU5UICAgICAgICAgICAgaWksIHV1OworICAgIHVuc2lnbmVkIGludCBpaSwgdXU7CiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwSXRlbVJhdGVzID0gTlVMTDsKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBJdGVtRXh0UmF0ZXMgPSBOVUxMOwogICAgIFBXTEFOX0lFX1NTSUQgICBwSXRlbVNTSUQ7Ci0gICAgVUlOVCAgICAgICAgICAgIHVSYXRlTGVuID0gV0xBTl9SQVRFU19NQVhMRU47Ci0gICAgV09SRCAgICAgICAgICAgIHdNYXhCYXNpY1JhdGUgPSBSQVRFXzFNOwotICAgIFdPUkQgICAgICAgICAgICB3TWF4U3VwcFJhdGUgPSBSQVRFXzFNOwotICAgIFdPUkQgICAgICAgICAgICB3U3VwcFJhdGU7Ci0gICAgQllURSAgICAgICAgICAgIGJ5VG9wQ0NLQmFzaWNSYXRlID0gUkFURV8xTTsKLSAgICBCWVRFICAgICAgICAgICAgYnlUb3BPRkRNQmFzaWNSYXRlID0gUkFURV8xTTsKKyAgICB1bnNpZ25lZCBpbnQgdVJhdGVMZW4gPSBXTEFOX1JBVEVTX01BWExFTjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3TWF4QmFzaWNSYXRlID0gUkFURV8xTTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3TWF4U3VwcFJhdGUgPSBSQVRFXzFNOworICAgIHVuc2lnbmVkIHNob3J0IHdTdXBwUmF0ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VG9wQ0NLQmFzaWNSYXRlID0gUkFURV8xTTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VG9wT0ZETUJhc2ljUmF0ZSA9IFJBVEVfMU07CiAKIAogICAgIGZvciAoaWkgPSAwOyBpaSA8IE1BWF9CU1NfTlVNOyBpaSsrKSB7Ci0gICAgICAgIGlmIChwTWdtdC0+c0JTU0xpc3RbaWldLmJBY3RpdmUgPT0gVFJVRSkKKyAgICAgICAgaWYgKHBNZ210LT5zQlNTTGlzdFtpaV0uYkFjdGl2ZSA9PSB0cnVlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yNzA4LDE0ICsyNzA5LDE0IEBACiAgICAgLy8gcGF0Y2ggZm9yIENJU0NPIG1pZ3JhdGlvbiBtb2RlCiAvKgogICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmVFbmNyeXB0aW9uU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoV1BBX1NlYXJjaFJTTigwLCBXUEFfVEtJUCwgcEN1cnIpID09IEZBTFNFKSB7CisgICAgICAgICAgICAgICAgaWYgKFdQQV9TZWFyY2hSU04oMCwgV1BBX1RLSVAsIHBDdXJyKSA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIk5vIG1hdGNoIFJTTiBpbmZvLiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKytcbiIpOwogICAgICAgICAgICAgICAgICAgICAvLyBlbmNyeXB0aW9uIG1vZGUgZXJyb3IKICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX0lETEU7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHBEZXZpY2UtPmVFbmNyeXB0aW9uU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoV1BBX1NlYXJjaFJTTigwLCBXUEFfQUVTQ0NNUCwgcEN1cnIpID09IEZBTFNFKSB7CisgICAgICAgICAgICAgICAgaWYgKFdQQV9TZWFyY2hSU04oMCwgV1BBX0FFU0NDTVAsIHBDdXJyKSA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIk5vIG1hdGNoIFJTTiBpbmZvLiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKytcbiIpOwogICAgICAgICAgICAgICAgICAgICAvLyBlbmNyeXB0aW9uIG1vZGUgZXJyb3IKICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX0lETEU7CkBAIC0yNzI2LDcgKzI3MjcsNyBAQAogICAgICAgICB9CiAKICNpZmRlZiBXUEFfU1VQUExJQ0FOVF9EUklWRVJfV0VYVF9TVVBQT1JUCi0JLy9pZihwRGV2aWNlLT5iV1BBU3VwcFdleHRFbmFibGVkID09IFRSVUUpCisJLy9pZihwRGV2aWNlLT5iV1BBU3VwcFdleHRFbmFibGVkID09IHRydWUpCiAgICAgICAgICAgICBFbmN5cHRpb25fUmVidWlsZChwRGV2aWNlLCBwQ3Vycik7CiAjZW5kaWYKICAgICAgICAgLy8gSW5mcmFzdHJ1Y3R1cmUgQlNTCkBAIC0yNzY0LDE1ICsyNzY1LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVSYXRlTGVuKTsKICAgICAgICAgICAgIC8vIFN0dWZmaW5nIFJhdGUgSUUKICAgICAgICAgICAgIGlmICgocEl0ZW1FeHRSYXRlcy0+bGVuID4gMCkgJiYgKHBJdGVtUmF0ZXMtPmxlbiA8IDgpKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpaSA9IDA7IGlpIDwgKFVJTlQpKDggLSBwSXRlbVJhdGVzLT5sZW4pOyApIHsKKyAgICAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCAodW5zaWduZWQgaW50KSg4IC0gcEl0ZW1SYXRlcy0+bGVuKTsgKSB7CiAgICAgICAgICAgICAgICAgICAgIHBJdGVtUmF0ZXMtPmFieVJhdGVzW3BJdGVtUmF0ZXMtPmxlbiArIGlpXSA9IHBJdGVtRXh0UmF0ZXMtPmFieVJhdGVzW2lpXTsKICAgICAgICAgICAgICAgICAgICAgaWkgKys7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwSXRlbUV4dFJhdGVzLT5sZW4gPD0gaWkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcEl0ZW1SYXRlcy0+bGVuICs9IChCWVRFKWlpOworICAgICAgICAgICAgICAgIHBJdGVtUmF0ZXMtPmxlbiArPSAodW5zaWduZWQgY2hhcilpaTsKICAgICAgICAgICAgICAgICBpZiAocEl0ZW1FeHRSYXRlcy0+bGVuIC0gaWkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBJdGVtRXh0UmF0ZXMtPmxlbiAtPSAoQllURSlpaTsKKyAgICAgICAgICAgICAgICAgICAgcEl0ZW1FeHRSYXRlcy0+bGVuIC09ICh1bnNpZ25lZCBjaGFyKWlpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKHV1ID0gMDsgdXUgPCBwSXRlbUV4dFJhdGVzLT5sZW47IHV1ICsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwSXRlbUV4dFJhdGVzLT5hYnlSYXRlc1t1dV0gPSBwSXRlbUV4dFJhdGVzLT5hYnlSYXRlc1t1dSArIGlpXTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjc4MSw3ICsyNzgyLDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFJBVEV2UGFyc2VNYXhSYXRlKCh2b2lkICopcERldmljZSwgcEl0ZW1SYXRlcywgcEl0ZW1FeHRSYXRlcywgVFJVRSwKKyAgICAgICAgICAgIFJBVEV2UGFyc2VNYXhSYXRlKCh2b2lkICopcERldmljZSwgcEl0ZW1SYXRlcywgcEl0ZW1FeHRSYXRlcywgdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3TWF4QmFzaWNSYXRlLCAmd01heFN1cHBSYXRlLCAmd1N1cHBSYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ5VG9wQ0NLQmFzaWNSYXRlLCAmYnlUb3BPRkRNQmFzaWNSYXRlKTsKIApAQCAtMjgwMiw5ICsyODAzLDkgQEAKICAgICAgICAgICAgIC8vIEFkZCBjdXJyZW50IEJTUyB0byBDYW5kaWRhdGUgbGlzdAogICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgb25seSB3b3JrcyBmb3IgV1BBMiBCU1MsIGFuZCBXUEEyIEJTUyBjaGVjayBtdXN0IGJlIGRvbmUgYmVmb3JlLgogICAgICAgICAgICAgaWYgKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBMikgewotICAgICAgICAgICAgICAgIEJPT0wgYlJlc3VsdCA9IGJBZGRfUE1LSURfQ2FuZGlkYXRlKCh2b2lkICopcERldmljZSwgcE1nbXQtPmFieUN1cnJCU1NJRCwgJnBDdXJyLT5zUlNOQ2FwT2JqKTsKKyAgICAgICAgICAgICAgICBib29sIGJSZXN1bHQgPSBiQWRkX1BNS0lEX0NhbmRpZGF0ZSgodm9pZCAqKXBEZXZpY2UsIHBNZ210LT5hYnlDdXJyQlNTSUQsICZwQ3Vyci0+c1JTTkNhcE9iaik7CiAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJiQWRkX1BNS0lEX0NhbmRpZGF0ZTogMSglZClcbiIsIGJSZXN1bHQpOwotICAgICAgICAgICAgICAgIGlmIChiUmVzdWx0ID09IEZBTFNFKSB7CisgICAgICAgICAgICAgICAgaWYgKGJSZXN1bHQgPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgdkZsdXNoX1BNS0lEX0NhbmRpZGF0ZSgodm9pZCAqKXBEZXZpY2UpOwogICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPInZGbHVzaF9QTUtJRF9DYW5kaWRhdGU6IDRcbiIpOwogICAgICAgICAgICAgICAgICAgICBiQWRkX1BNS0lEX0NhbmRpZGF0ZSgodm9pZCAqKXBEZXZpY2UsIHBNZ210LT5hYnlDdXJyQlNTSUQsICZwQ3Vyci0+c1JTTkNhcE9iaik7CkBAIC0yODMxLDEzICsyODMyLDEzIEBACiAgICAgICAgIGlmIChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQU5PTkUpIHsKIAogICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmVFbmNyeXB0aW9uU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoV1BBX1NlYXJjaFJTTigwLCBXUEFfVEtJUCwgcEN1cnIpID09IEZBTFNFKSB7CisgICAgICAgICAgICAgICAgaWYgKFdQQV9TZWFyY2hSU04oMCwgV1BBX1RLSVAsIHBDdXJyKSA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAvLyBlbmNyeXB0aW9uIG1vZGUgZXJyb3IKICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX0lETEU7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHBEZXZpY2UtPmVFbmNyeXB0aW9uU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoV1BBX1NlYXJjaFJTTigwLCBXUEFfQUVTQ0NNUCwgcEN1cnIpID09IEZBTFNFKSB7CisgICAgICAgICAgICAgICAgaWYgKFdQQV9TZWFyY2hSU04oMCwgV1BBX0FFU0NDTVAsIHBDdXJyKSA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAvLyBlbmNyeXB0aW9uIG1vZGUgZXJyb3IKICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX0lETEU7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTI4NjgsNyArMjg2OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0xBTl9SQVRFU19NQVhMRU5fMTFCKTsKICAgICAgICAgICAgIC8vIHNldCBiYXNpYyByYXRlCiAgICAgICAgICAgICBSQVRFdlBhcnNlTWF4UmF0ZSgodm9pZCAqKXBEZXZpY2UsIChQV0xBTl9JRV9TVVBQX1JBVEVTKXBNZ210LT5hYnlDdXJyU3VwcFJhdGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgVFJVRSwgJndNYXhCYXNpY1JhdGUsICZ3TWF4U3VwcFJhdGUsICZ3U3VwcFJhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCB0cnVlLCAmd01heEJhc2ljUmF0ZSwgJndNYXhTdXBwUmF0ZSwgJndTdXBwUmF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZieVRvcENDS0Jhc2ljUmF0ZSwgJmJ5VG9wT0ZETUJhc2ljUmF0ZSk7CiAKICAgICAgICAgICAgIHBNZ210LT53Q3VyckNhcEluZm8gPSBwQ3Vyci0+d0NhcEluZm87CkBAIC0yODgzLDcgKzI4ODQsNyBAQAogICAgICAgICAgICAgcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX1NUQVJURUQ7CiAgICAgICAgICAgICAvLyBBZG9wdCBCU1Mgc3RhdGUgaW4gQWRhcHRlciBEZXZpY2UgT2JqZWN0CiAgICAgICAgICAgICAvL3BEZXZpY2UtPmJ5T3BNb2RlID0gT1BfTU9ERV9BREhPQzsKLS8vICAgICAgICAgICAgcERldmljZS0+YkxpbmtQYXNzID0gVFJVRTsKKy8vICAgICAgICAgICAgcERldmljZS0+YkxpbmtQYXNzID0gdHJ1ZTsKIC8vICAgICAgICAgICAgbWVtY3B5KHBEZXZpY2UtPmFieUJTU0lELCBwQ3Vyci0+YWJ5QlNTSUQsIFdMQU5fQlNTSURfTEVOKTsKIAogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJKb2luIElCU1Mgb2s6JTAyeC0lMDJ4LSUwMngtJTAyeC0lMDJ4LSUwMnggXG4iLApAQCAtMjkyMyw3ICsyOTI0LDcgQEAKIHZvaWQKIHNfdk1nclN5bmNoQlNTICgKICAgICBQU0RldmljZSAgICAgIHBEZXZpY2UsCi0gICAgVUlOVCAgICAgICAgICB1QlNTTW9kZSwKKyAgICB1bnNpZ25lZCBpbnQgdUJTU01vZGUsCiAgICAgUEtub3duQlNTICAgICBwQ3VyciwKICAgICBQQ01EX1NUQVRVUyAgcFN0YXR1cwogICAgICkKQEAgLTI5MzIsMTEgKzI5MzMsMTEgQEAKICAgICBQU01nbXRPYmplY3QgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7CiAvLyAgICBpbnQgICAgIGlpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLzFNLCAgIDJNLCAgIDVNLCAgIDExTSwgIDE4TSwgIDI0TSwgIDM2TSwgIDU0TQotICAgIEJZVEUgYWJ5Q3VyclN1cHBSYXRlc0dbXSA9IHtXTEFOX0VJRF9TVVBQX1JBVEVTLCA4LCAweDAyLCAweDA0LCAweDBCLCAweDE2LCAweDI0LCAweDMwLCAweDQ4LCAweDZDfTsKLSAgICBCWVRFIGFieUN1cnJFeHRTdXBwUmF0ZXNHW10gPSB7V0xBTl9FSURfRVhUU1VQUF9SQVRFUywgNCwgMHgwQywgMHgxMiwgMHgxOCwgMHg2MH07CisgICAgdW5zaWduZWQgY2hhciBhYnlDdXJyU3VwcFJhdGVzR1tdID0ge1dMQU5fRUlEX1NVUFBfUkFURVMsIDgsIDB4MDIsIDB4MDQsIDB4MEIsIDB4MTYsIDB4MjQsIDB4MzAsIDB4NDgsIDB4NkN9OworICAgIHVuc2lnbmVkIGNoYXIgYWJ5Q3VyckV4dFN1cHBSYXRlc0dbXSA9IHtXTEFOX0VJRF9FWFRTVVBQX1JBVEVTLCA0LCAweDBDLCAweDEyLCAweDE4LCAweDYwfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy82TSwgICA5TSwgICAxMk0sICA0OE0KLSAgICBCWVRFIGFieUN1cnJTdXBwUmF0ZXNBW10gPSB7V0xBTl9FSURfU1VQUF9SQVRFUywgOCwgMHgwQywgMHgxMiwgMHgxOCwgMHgyNCwgMHgzMCwgMHg0OCwgMHg2MCwgMHg2Q307Ci0gICAgQllURSBhYnlDdXJyU3VwcFJhdGVzQltdID0ge1dMQU5fRUlEX1NVUFBfUkFURVMsIDQsIDB4MDIsIDB4MDQsIDB4MEIsIDB4MTZ9OworICAgIHVuc2lnbmVkIGNoYXIgYWJ5Q3VyclN1cHBSYXRlc0FbXSA9IHtXTEFOX0VJRF9TVVBQX1JBVEVTLCA4LCAweDBDLCAweDEyLCAweDE4LCAweDI0LCAweDMwLCAweDQ4LCAweDYwLCAweDZDfTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUN1cnJTdXBwUmF0ZXNCW10gPSB7V0xBTl9FSURfU1VQUF9SQVRFUywgNCwgMHgwMiwgMHgwNCwgMHgwQiwgMHgxNn07CiAKIAogICAgICpwU3RhdHVzID0gQ01EX1NUQVRVU19GQUlMVVJFOwpAQCAtMjk0NCw3ICsyOTQ1LDcgQEAKICAgICBpZiAoc19iQ2lwaGVyTWF0Y2gocEN1cnIsCiAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmVFbmNyeXB0aW9uU3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAmKHBNZ210LT5ieUNTU1BLKSwKLSAgICAgICAgICAgICAgICAgICAgICAgJihwTWdtdC0+YnlDU1NHSykpID09IEZBTFNFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICYocE1nbXQtPmJ5Q1NTR0spKSA9PSBmYWxzZSkgewogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJzX2JDaXBoZXJNYXRjaCBGYWlsIC4uLi4uLi5cbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjk1OCwxMiArMjk1OSwxMiBAQAogICAgIH0KIAogICAgIC8vIEluaXQgdGhlIEJTUyBpbmZvcm1hdGlvbnMKLSAgICBwRGV2aWNlLT5iQ0NLID0gVFJVRTsKLSAgICBwRGV2aWNlLT5iUHJvdGVjdE1vZGUgPSBGQUxTRTsKKyAgICBwRGV2aWNlLT5iQ0NLID0gdHJ1ZTsKKyAgICBwRGV2aWNlLT5iUHJvdGVjdE1vZGUgPSBmYWxzZTsKICAgICBNQUN2RGlzYWJsZVByb3RlY3RNRChwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKLSAgICBwRGV2aWNlLT5iQmFya2VyUHJlYW1ibGVNZCA9IEZBTFNFOworICAgIHBEZXZpY2UtPmJCYXJrZXJQcmVhbWJsZU1kID0gZmFsc2U7CiAgICAgTUFDdkRpc2FibGVCYXJrZXJQcmVhbWJsZU1kKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwotICAgIHBEZXZpY2UtPmJOb25FUlBQcmVzZW50ID0gRkFMU0U7CisgICAgcERldmljZS0+Yk5vbkVSUFByZXNlbnQgPSBmYWxzZTsKICAgICBwRGV2aWNlLT5ieVByZWFtYmxlVHlwZSA9IDA7CiAgICAgcERldmljZS0+d0Jhc2ljUmF0ZSA9IDA7CiAgICAgLy8gU2V0IEJhc2ljIFJhdGUKQEAgLTMwNDYsMTIgKzMwNDcsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEN1cnItPnNFUlAuYnlFUlAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5hYnlDdXJyU3VwcFJhdGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTWdtdC0+YWJ5Q3VyckV4dFN1cHBSYXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgIT0gVFJVRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgIT0gdHJ1ZSkgewogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICI8LS0tLXNfYlN5bmNoQlNTIFNldCBQaHkgTW9kZSBGYWlsIFslZF1cbiIsIGVQaHlUeXBlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBzZXQgY2hhbm5lbCBhbmQgY2xlYXIgTkFWCi0gICAgaWYgKENBUkRiU2V0Q2hhbm5lbChwTWdtdC0+cEFkYXB0ZXIsIHBDdXJyLT51Q2hhbm5lbCkgPT0gRkFMU0UpIHsKKyAgICBpZiAoc2V0X2NoYW5uZWwocE1nbXQtPnBBZGFwdGVyLCBwQ3Vyci0+dUNoYW5uZWwpID09IGZhbHNlKSB7CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIjwtLS0tc19iU3luY2hCU1MgU2V0IENoYW5uZWwgWyVkXVxuIiwgcEN1cnItPnVDaGFubmVsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMwNzcsNyArMzA3OCw3IEBACiAgICAgcE1nbXQtPnVDdXJyQ2hhbm5lbCA9IHBDdXJyLT51Q2hhbm5lbDsKICAgICBwTWdtdC0+ZUN1cnJlbnRQSFlNb2RlID0gZVBoeVR5cGU7CiAgICAgcE1nbXQtPmJ5RVJQQ29udGV4dCA9IHBDdXJyLT5zRVJQLmJ5RVJQOwotICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlN5bmM6U2V0IHRvIGNoYW5uZWwgPSBbJWRdXG4iLCAoSU5UKXBDdXJyLT51Q2hhbm5lbCk7CisgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiU3luYzpTZXQgdG8gY2hhbm5lbCA9IFslZF1cbiIsIChpbnQpcEN1cnItPnVDaGFubmVsKTsKIAogCiAgICAgKnBTdGF0dXMgPSBDTURfU1RBVFVTX1NVQ0NFU1M7CkBAIC0zMDk0LDE4ICszMDk1LDE4IEBACiAgKQogIHsKICAgUFNNZ210T2JqZWN0ICBwTWdtdCA9ICYocERldmljZS0+c01nbXRPYmopOwotIC8vIFVJTlQgICAgICAgICAgICBpaSAsIHVTYW1lQnNzaWROdW09MDsKKyAvLyB1bnNpZ25lZCBpbnQgaWkgLCB1U2FtZUJzc2lkTnVtPTA7CiAKICAgICAgICAgLy8gIGZvciAoaWkgPSAwOyBpaSA8IE1BWF9CU1NfTlVNOyBpaSsrKSB7CiAgICAgICAgICAgLy8gICBpZiAocE1nbXQtPnNCU1NMaXN0W2lpXS5iQWN0aXZlICYmCi0gICAgICAgICAgICAvLyAgICAgIElTX0VUSF9BRERSRVNTX0VRVUFMKHBNZ210LT5zQlNTTGlzdFtpaV0uYWJ5QlNTSUQsIHBDdXJyLT5hYnlCU1NJRCkpIHsKKyAgICAgICAgICAgIC8vICAgICAgIWNvbXBhcmVfZXRoZXJfYWRkcihwTWdtdC0+c0JTU0xpc3RbaWldLmFieUJTU0lELCBwQ3Vyci0+YWJ5QlNTSUQpKSB7CiAgICAgICAgICAgICAgLy8gICAgICAgdVNhbWVCc3NpZE51bSsrOwogICAgICAgICAgICAgICAgLy8gICB9CiAgICAgICAgICAgIC8vIH0KICAgLy8gICBpZiggdVNhbWVCc3NpZE51bT49MikgewkgLy93ZSBvbmx5IGNoZWNrIEFQIGluIGhpZGRlbiBzc3NpZCAgbW9kZQogICAgICAgICBpZiAoKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBUFNLKSB8fCAgICAgICAgICAgLy9uZXR3b3JrbWFuYWdlciAwLjcuMCBkb2VzIG5vdCBnaXZlIHRoZSBwYWlyd2lzZS1rZXkgc2Vsc2VjdGlvbiwKICAgICAgICAgICAgICAocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9XUEEyUFNLKSkgeyAgICAgICAgIC8vIHNvIHdlIG5lZWQgcmUtc2Vsc2VjdCBpdCBhY2NvcmRpbmcgdG8gcmVhbCBwYWlyd2lzZS1rZXkgaW5mby4KLSAgICAgICAgICAgICAgIGlmKHBDdXJyLT5iV1BBVmFsaWQgPT0gVFJVRSkgIHsgICAvL1dQQS1QU0sKKyAgICAgICAgICAgICAgIGlmKHBDdXJyLT5iV1BBVmFsaWQgPT0gdHJ1ZSkgIHsgICAvL1dQQS1QU0sKICAgICAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPmVBdXRoZW5Nb2RlID0gV01BQ19BVVRIX1dQQVBTSzsKIAkJICAgIGlmKHBDdXJyLT5hYnlQS1R5cGVbMF0gPT0gV1BBX1RLSVApIHsKICAgICAgCQkgICAgICAgIHBEZXZpY2UtPmVFbmNyeXB0aW9uU3RhdHVzID0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZDsgICAgLy9US0lQCkBAIC0zMTE2LDcgKzMxMTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBQUklOVF9LKCJFbmN5cHRpb25fUmVidWlsZC0tLT5zc2lkIHJlc2V0IGNvbmZpZyB0byBbV1BBUFNLLUFFU11cbiIpOwogICAgICAJCSAgICAgfQogICAgICAgICAgICAgICAgCX0KLSAgICAgICAgICAgICAgIGVsc2UgaWYocEN1cnItPmJXUEEyVmFsaWQgPT0gVFJVRSkgeyAgLy9XUEEyLVBTSworICAgICAgICAgICAgICAgZWxzZSBpZihwQ3Vyci0+YldQQTJWYWxpZCA9PSB0cnVlKSB7ICAvL1dQQTItUFNLCiAgICAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPmVBdXRoZW5Nb2RlID0gV01BQ19BVVRIX1dQQTJQU0s7CiAJCSAgICAgICBpZihwQ3Vyci0+YWJ5Q1NTUEtbMF0gPT0gV0xBTl8xMWlfQ1NTX1RLSVApIHsKICAgICAgIAkJICAgICAgICAgICBwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7ICAgICAvL1RLSVAKQEAgLTMxNTEsMTMgKzMxNTIsMTMgQEAKICAgICBQV0xBTl9JRV9USU0gcFRJTQogICAgICkKIHsKLSAgICBCWVRFICAgICAgICBieU1hc2tbOF0gPSB7MSwgMiwgNCwgOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MH07Ci0gICAgQllURSAgICAgICAgYnlNYXA7Ci0gICAgVUlOVCAgICAgICAgaWksIGpqOwotICAgIEJPT0wgICAgICAgIGJTdGFydEZvdW5kID0gRkFMU0U7Ci0gICAgQk9PTCAgICAgICAgYk11bHRpY2FzdCA9IEZBTFNFOwotICAgIFdPUkQgICAgICAgIHdTdGFydEluZGV4ID0gMDsKLSAgICBXT1JEICAgICAgICB3RW5kSW5kZXggPSAwOworICAgIHVuc2lnbmVkIGNoYXIgYnlNYXNrWzhdID0gezEsIDIsIDQsIDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODB9OworICAgIHVuc2lnbmVkIGNoYXIgYnlNYXA7CisgICAgdW5zaWduZWQgaW50IGlpLCBqajsKKyAgICBib29sIGJTdGFydEZvdW5kID0gZmFsc2U7CisgICAgYm9vbCBiTXVsdGljYXN0ID0gZmFsc2U7CisgICAgdW5zaWduZWQgc2hvcnQgd1N0YXJ0SW5kZXggPSAwOworICAgIHVuc2lnbmVkIHNob3J0IHdFbmRJbmRleCA9IDA7CiAKIAogICAgIC8vIEZpbmQgc2l6ZSBvZiBwYXJ0aWFsIHZpcnR1YWwgYml0bWFwCkBAIC0zMTY3LDEzICszMTY4LDEzIEBACiAgICAgICAgICAgICAvLyBNYXNrIG91dCB0aGUgYnJvYWRjYXN0IGJpdCB3aGljaCBpcyBpbmRpY2F0ZWQgc2VwYXJhdGVseS4KICAgICAgICAgICAgIGJNdWx0aWNhc3QgPSAoYnlNYXAgJiBieU1hc2tbMF0pICE9IDA7CiAgICAgICAgICAgICBpZihiTXVsdGljYXN0KSB7Ci0gICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJSeFBTUG9sbCA9IFRSVUU7CisgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJSeFBTUG9sbCA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBieU1hcCA9IDA7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGJ5TWFwKSB7CiAgICAgICAgICAgICBpZiAoIWJTdGFydEZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgYlN0YXJ0Rm91bmQgPSBUUlVFOworICAgICAgICAgICAgICAgIGJTdGFydEZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB3U3RhcnRJbmRleCA9IGlpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgd0VuZEluZGV4ID0gaWk7CkBAIC0zMjI0LDMwICszMjI1LDMwIEBACiBzX01nck1ha2VCZWFjb24oCiAgICAgUFNEZXZpY2UgcERldmljZSwKICAgICBQU01nbXRPYmplY3QgcE1nbXQsCi0gICAgV09SRCB3Q3VyckNhcEluZm8sCi0gICAgV09SRCB3Q3VyckJlYWNvblBlcmlvZCwKLSAgICBVSU5UIHVDdXJyQ2hhbm5lbCwKLSAgICBXT1JEIHdDdXJyQVRJTVdpbm9kdywKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VyckNhcEluZm8sCisgICAgdW5zaWduZWQgc2hvcnQgd0N1cnJCZWFjb25QZXJpb2QsCisgICAgdW5zaWduZWQgaW50IHVDdXJyQ2hhbm5lbCwKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VyckFUSU1XaW5vZHcsCiAgICAgUFdMQU5fSUVfU1NJRCBwQ3VyclNTSUQsCi0gICAgUEJZVEUgcEN1cnJCU1NJRCwKKyAgICB1bnNpZ25lZCBjaGFyICpwQ3VyckJTU0lELAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEN1cnJTdXBwUmF0ZXMsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwQ3VyckV4dFN1cHBSYXRlcwogICAgICkKIHsKICAgICBQU1R4TWdtdFBhY2tldCAgICAgIHBUeFBhY2tldCA9IE5VTEw7CiAgICAgV0xBTl9GUl9CRUFDT04gICAgICBzRnJhbWU7Ci0gICAgQllURSAgICAgICAgICAgICAgICBhYnlCcm9hZGNhc3RBZGRyW10gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07Ci0gICAgUEJZVEUgICAgICAgICAgICAgICBwYnlCdWZmZXI7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICB1TGVuZ3RoID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUJyb2FkY2FzdEFkZHJbXSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCdWZmZXI7CisgICAgdW5zaWduZWQgaW50IHVMZW5ndGggPSAwOwogICAgIFBXTEFOX0lFX0lCU1NfREZTICAgcElCU1NERlMgPSBOVUxMOwotICAgIFVJTlQgICAgICAgICAgICAgICAgaWk7CisgICAgdW5zaWduZWQgaW50IGlpOwogCiAgICAgLy8gcHJlcGFyZSBiZWFjb24gZnJhbWUKICAgICBwVHhQYWNrZXQgPSAoUFNUeE1nbXRQYWNrZXQpcE1nbXQtPnBieU1nbXRQYWNrZXRQb29sOwogICAgIG1lbXNldChwVHhQYWNrZXQsIDAsIHNpemVvZihTVHhNZ210UGFja2V0KSArIFdMQU5fQkVBQ09OX0ZSX01BWExFTik7Ci0gICAgcFR4UGFja2V0LT5wODAyMTFIZWFkZXIgPSAoUFVXTEFOXzgwMjExSERSKSgoUEJZVEUpcFR4UGFja2V0ICsgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpKTsKKyAgICBwVHhQYWNrZXQtPnA4MDIxMUhlYWRlciA9IChQVVdMQU5fODAyMTFIRFIpKCh1bnNpZ25lZCBjaGFyICopcFR4UGFja2V0ICsgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpKTsKICAgICAvLyBTZXR1cCB0aGUgc0ZyYW1lIHN0cnVjdHVyZS4KLSAgICBzRnJhbWUucEJ1ZiA9IChQQllURSlwVHhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKKyAgICBzRnJhbWUucEJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopcFR4UGFja2V0LT5wODAyMTFIZWFkZXI7CiAgICAgc0ZyYW1lLmxlbiA9IFdMQU5fQkVBQ09OX0ZSX01BWExFTjsKICAgICB2TWdyRW5jb2RlQmVhY29uKCZzRnJhbWUpOwogICAgIC8vIFNldHVwIHRoZSBoZWFkZXIKQEAgLTMyNTgsNyArMzI1OSw3IEBACiAgICAgICAgICkpOwogCiAgICAgaWYgKHBEZXZpY2UtPmJFbmFibGVQU01vZGUpIHsKLSAgICAgICAgc0ZyYW1lLnBIZHItPnNBMy53RnJhbWVDdGwgfD0gY3B1X3RvX2xlMTYoKFdPUkQpV0xBTl9TRVRfRkNfUFdSTUdUKDEpKTsKKyAgICAgICAgc0ZyYW1lLnBIZHItPnNBMy53RnJhbWVDdGwgfD0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KVdMQU5fU0VUX0ZDX1BXUk1HVCgxKSk7CiAgICAgfQogCiAgICAgbWVtY3B5KCBzRnJhbWUucEhkci0+c0EzLmFieUFkZHIxLCBhYnlCcm9hZGNhc3RBZGRyLCBXTEFOX0FERFJfTEVOKTsKQEAgLTMyODYsNyArMzI4Nyw3IEBACiAgICAgICAgIHNGcmFtZS5sZW4gKz0gKDEpICsgV0xBTl9JRUhEUl9MRU47CiAgICAgICAgIHNGcmFtZS5wRFNQYXJtcy0+YnlFbGVtZW50SUQgPSBXTEFOX0VJRF9EU19QQVJNUzsKICAgICAgICAgc0ZyYW1lLnBEU1Bhcm1zLT5sZW4gPSAxOwotICAgICAgICBzRnJhbWUucERTUGFybXMtPmJ5Q3VyckNoYW5uZWwgPSAoQllURSl1Q3VyckNoYW5uZWw7CisgICAgICAgIHNGcmFtZS5wRFNQYXJtcy0+YnlDdXJyQ2hhbm5lbCA9ICh1bnNpZ25lZCBjaGFyKXVDdXJyQ2hhbm5lbDsKICAgICB9CiAgICAgLy8gVElNIGZpZWxkCiAgICAgaWYgKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0VTU19BUCkgewpAQCAtMzMyOSwyMiArMzMzMCwyMiBAQAogICAgICAgICAgICAgLy8gUGFpcndpc2UgS2V5IENpcGhlciBTdWl0ZQogICAgICAgICAgICAgc0ZyYW1lLnBSU05XUEEtPndQS0NvdW50ID0gMDsKICAgICAgICAgICAgIC8vIEF1dGggS2V5IE1hbmFnZW1lbnQgU3VpdGUKLSAgICAgICAgICAgICooKFBXT1JEKShzRnJhbWUucEJ1ZiArIHNGcmFtZS5sZW4gKyBzRnJhbWUucFJTTldQQS0+bGVuKSk9MDsKKyAgICAgICAgICAgICooKHVuc2lnbmVkIHNob3J0ICopKHNGcmFtZS5wQnVmICsgc0ZyYW1lLmxlbiArIHNGcmFtZS5wUlNOV1BBLT5sZW4pKT0wOwogICAgICAgICAgICAgc0ZyYW1lLnBSU05XUEEtPmxlbiArPTI7CiAKICAgICAgICAgICAgIC8vIFJTTiBDYXBhYmlsaXRlcwotICAgICAgICAgICAgKigoUFdPUkQpKHNGcmFtZS5wQnVmICsgc0ZyYW1lLmxlbiArIHNGcmFtZS5wUlNOV1BBLT5sZW4pKT0wOworICAgICAgICAgICAgKigodW5zaWduZWQgc2hvcnQgKikoc0ZyYW1lLnBCdWYgKyBzRnJhbWUubGVuICsgc0ZyYW1lLnBSU05XUEEtPmxlbikpPTA7CiAgICAgICAgICAgICBzRnJhbWUucFJTTldQQS0+bGVuICs9MjsKICAgICAgICAgICAgIHNGcmFtZS5sZW4gKz0gc0ZyYW1lLnBSU05XUEEtPmxlbiArIFdMQU5fSUVIRFJfTEVOOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKChwTWdtdC0+YjExaEVuYWJsZSA9PSBUUlVFKSAmJgorICAgIGlmICgocE1nbXQtPmIxMWhFbmFibGUgPT0gdHJ1ZSkgJiYKICAgICAgICAgKHBNZ210LT5lQ3VycmVudFBIWU1vZGUgPT0gUEhZX1RZUEVfMTFBKSkgewogICAgICAgICAvLyBDb3VudHJ5IElFCi0gICAgICAgIHBieUJ1ZmZlciA9IChQQllURSkoc0ZyYW1lLnBCdWYgKyBzRnJhbWUubGVuKTsKLSAgICAgICAgQ0FSRHZTZXRDb3VudHJ5SUUocE1nbXQtPnBBZGFwdGVyLCBwYnlCdWZmZXIpOwotICAgICAgICBDQVJEdlNldENvdW50cnlJbmZvKHBNZ210LT5wQWRhcHRlciwgUEhZX1RZUEVfMTFBLCBwYnlCdWZmZXIpOworICAgICAgICBwYnlCdWZmZXIgPSAodW5zaWduZWQgY2hhciAqKShzRnJhbWUucEJ1ZiArIHNGcmFtZS5sZW4pOworICAgICAgICBzZXRfY291bnRyeV9JRShwTWdtdC0+cEFkYXB0ZXIsIHBieUJ1ZmZlcik7CisgICAgICAgIHNldF9jb3VudHJ5X2luZm8ocE1nbXQtPnBBZGFwdGVyLCBQSFlfVFlQRV8xMUEsIHBieUJ1ZmZlcik7CiAgICAgICAgIHVMZW5ndGggKz0gKChQV0xBTl9JRV9DT1VOVFJZKSBwYnlCdWZmZXIpLT5sZW4gKyBXTEFOX0lFSERSX0xFTjsKICAgICAgICAgcGJ5QnVmZmVyICs9ICgoKFBXTEFOX0lFX0NPVU5UUlkpIHBieUJ1ZmZlciktPmxlbiArIFdMQU5fSUVIRFJfTEVOKTsKICAgICAgICAgLy8gUG93ZXIgQ29uc3RyYWluIElFCkBAIC0zMzUzLDEyICszMzU0LDEyIEBACiAgICAgICAgICgoUFdMQU5fSUVfUFdfQ09OU1QpIHBieUJ1ZmZlciktPmJ5UG93ZXIgPSAwOwogICAgICAgICBwYnlCdWZmZXIgKz0gKDEpICsgV0xBTl9JRUhEUl9MRU47CiAgICAgICAgIHVMZW5ndGggKz0gKDEpICsgV0xBTl9JRUhEUl9MRU47Ci0gICAgICAgIGlmIChwTWdtdC0+YlN3aXRjaENoYW5uZWwgPT0gVFJVRSkgeworICAgICAgICBpZiAocE1nbXQtPmJTd2l0Y2hDaGFubmVsID09IHRydWUpIHsKICAgICAgICAgICAgIC8vIENoYW5uZWwgU3dpdGNoIElFCiAgICAgICAgICAgICAoKFBXTEFOX0lFX0NIX1NXKSBwYnlCdWZmZXIpLT5ieUVsZW1lbnRJRCA9IFdMQU5fRUlEX0NIX1NXSVRDSDsKICAgICAgICAgICAgICgoUFdMQU5fSUVfQ0hfU1cpIHBieUJ1ZmZlciktPmxlbiA9IDM7CiAgICAgICAgICAgICAoKFBXTEFOX0lFX0NIX1NXKSBwYnlCdWZmZXIpLT5ieU1vZGUgPSAxOwotICAgICAgICAgICAgKChQV0xBTl9JRV9DSF9TVykgcGJ5QnVmZmVyKS0+YnlDaGFubmVsID0gQ0FSRGJ5R2V0Q2hhbm5lbE51bWJlcihwTWdtdC0+cEFkYXB0ZXIsIHBNZ210LT5ieU5ld0NoYW5uZWwpOworICAgICAgICAgICAgKChQV0xBTl9JRV9DSF9TVykgcGJ5QnVmZmVyKS0+YnlDaGFubmVsID0gZ2V0X2NoYW5uZWxfbnVtYmVyKHBNZ210LT5wQWRhcHRlciwgcE1nbXQtPmJ5TmV3Q2hhbm5lbCk7CiAgICAgICAgICAgICAoKFBXTEFOX0lFX0NIX1NXKSBwYnlCdWZmZXIpLT5ieUNvdW50ID0gMDsKICAgICAgICAgICAgIHBieUJ1ZmZlciArPSAoMykgKyBXTEFOX0lFSERSX0xFTjsKICAgICAgICAgICAgIHVMZW5ndGggKz0gKDMpICsgV0xBTl9JRUhEUl9MRU47CkBAIC0zMzgyLDcgKzMzODMsNyBAQAogICAgICAgICAgICAgcGJ5QnVmZmVyICs9ICg3KSArIFdMQU5fSUVIRFJfTEVOOwogICAgICAgICAgICAgdUxlbmd0aCArPSAoNykgKyBXTEFOX0lFSERSX0xFTjsKICAgICAgICAgICAgIGZvcihpaT1DQl9NQVhfQ0hBTk5FTF8yNEcrMTsgaWk8PUNCX01BWF9DSEFOTkVMOyBpaSsrICkgewotICAgICAgICAgICAgICAgIGlmIChDQVJEYkdldENoYW5uZWxNYXBJbmZvKHBNZ210LT5wQWRhcHRlciwgaWksIHBieUJ1ZmZlciwgcGJ5QnVmZmVyKzEpID09IFRSVUUpIHsKKyAgICAgICAgICAgICAgICBpZiAoZ2V0X2NoYW5uZWxfbWFwX2luZm8ocE1nbXQtPnBBZGFwdGVyLCBpaSwgcGJ5QnVmZmVyLCBwYnlCdWZmZXIrMSkgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICBwYnlCdWZmZXIgKz0gMjsKICAgICAgICAgICAgICAgICAgICAgdUxlbmd0aCArPSAyOwogICAgICAgICAgICAgICAgICAgICBwSUJTU0RGUy0+bGVuICs9IDI7CkBAIC0zMzk4LDExICszMzk5LDExIEBACiAgICAgICAgIHNGcmFtZS5wRVJQLT5ieUVsZW1lbnRJRCA9IFdMQU5fRUlEX0VSUDsKICAgICAgICAgc0ZyYW1lLnBFUlAtPmxlbiA9IDE7CiAgICAgICAgIHNGcmFtZS5wRVJQLT5ieUNvbnRleHQgPSAwOwotICAgICAgICBpZiAocERldmljZS0+YlByb3RlY3RNb2RlID09IFRSVUUpCisgICAgICAgIGlmIChwRGV2aWNlLT5iUHJvdGVjdE1vZGUgPT0gdHJ1ZSkKICAgICAgICAgICAgIHNGcmFtZS5wRVJQLT5ieUNvbnRleHQgfD0gV0xBTl9FSURfRVJQX1VTRV9QUk9URUNUSU9OOwotICAgICAgICBpZiAocERldmljZS0+Yk5vbkVSUFByZXNlbnQgPT0gVFJVRSkKKyAgICAgICAgaWYgKHBEZXZpY2UtPmJOb25FUlBQcmVzZW50ID09IHRydWUpCiAgICAgICAgICAgICBzRnJhbWUucEVSUC0+YnlDb250ZXh0IHw9IFdMQU5fRUlEX0VSUF9OT05FUlBfUFJFU0VOVDsKLSAgICAgICAgaWYgKHBEZXZpY2UtPmJCYXJrZXJQcmVhbWJsZU1kID09IFRSVUUpCisgICAgICAgIGlmIChwRGV2aWNlLT5iQmFya2VyUHJlYW1ibGVNZCA9PSB0cnVlKQogICAgICAgICAgICAgc0ZyYW1lLnBFUlAtPmJ5Q29udGV4dCB8PSBXTEFOX0VJRF9FUlBfQkFSS0VSX01PREU7CiAgICAgfQogICAgIGlmICgoKFBXTEFOX0lFX1NVUFBfUkFURVMpcEN1cnJFeHRTdXBwUmF0ZXMpLT5sZW4gIT0gMCkgewpAQCAtMzQxNCw3ICszNDE1LDcgQEAKICAgICAgICAgICAgICApOwogICAgIH0KICAgICAvLyBob3N0YXBkIHdwYS93cGEyIElFCi0gICAgaWYgKChwTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9FU1NfQVApICYmIChwRGV2aWNlLT5iRW5hYmxlSG9zdGFwZCA9PSBUUlVFKSkgeworICAgIGlmICgocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX0FQKSAmJiAocERldmljZS0+YkVuYWJsZUhvc3RhcGQgPT0gdHJ1ZSkpIHsKICAgICAgICAgIGlmIChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQU5PTkUpIHsKICAgICAgICAgICAgICBpZiAocE1nbXQtPndXUEFJRUxlbiAhPSAwKSB7CiAgICAgICAgICAgICAgICAgIHNGcmFtZS5wUlNOID0gKFBXTEFOX0lFX1JTTikoc0ZyYW1lLnBCdWYgKyBzRnJhbWUubGVuKTsKQEAgLTM0NTMsMzEgKzM0NTQsMzEgQEAKIHNfTWdyTWFrZVByb2JlUmVzcG9uc2UoCiAgICAgUFNEZXZpY2UgcERldmljZSwKICAgICBQU01nbXRPYmplY3QgcE1nbXQsCi0gICAgV09SRCB3Q3VyckNhcEluZm8sCi0gICAgV09SRCB3Q3VyckJlYWNvblBlcmlvZCwKLSAgICBVSU5UIHVDdXJyQ2hhbm5lbCwKLSAgICBXT1JEIHdDdXJyQVRJTVdpbm9kdywKLSAgICBQQllURSBwRHN0QWRkciwKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VyckNhcEluZm8sCisgICAgdW5zaWduZWQgc2hvcnQgd0N1cnJCZWFjb25QZXJpb2QsCisgICAgdW5zaWduZWQgaW50IHVDdXJyQ2hhbm5lbCwKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VyckFUSU1XaW5vZHcsCisgICAgdW5zaWduZWQgY2hhciAqcERzdEFkZHIsCiAgICAgUFdMQU5fSUVfU1NJRCBwQ3VyclNTSUQsCi0gICAgUEJZVEUgcEN1cnJCU1NJRCwKKyAgICB1bnNpZ25lZCBjaGFyICpwQ3VyckJTU0lELAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEN1cnJTdXBwUmF0ZXMsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwQ3VyckV4dFN1cHBSYXRlcywKLSAgICBCWVRFIGJ5UEhZVHlwZQorICAgIHVuc2lnbmVkIGNoYXIgYnlQSFlUeXBlCiAgICAgKQogewogICAgIFBTVHhNZ210UGFja2V0ICAgICAgcFR4UGFja2V0ID0gTlVMTDsKICAgICBXTEFOX0ZSX1BST0JFUkVTUCAgIHNGcmFtZTsKLSAgICBQQllURSAgICAgICAgICAgICAgIHBieUJ1ZmZlcjsKLSAgICBVSU5UICAgICAgICAgICAgICAgIHVMZW5ndGggPSAwOworICAgIHVuc2lnbmVkIGNoYXIgKnBieUJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQgdUxlbmd0aCA9IDA7CiAgICAgUFdMQU5fSUVfSUJTU19ERlMgICBwSUJTU0RGUyA9IE5VTEw7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICBpaTsKKyAgICB1bnNpZ25lZCBpbnQgaWk7CiAKIAogICAgIHBUeFBhY2tldCA9IChQU1R4TWdtdFBhY2tldClwTWdtdC0+cGJ5TWdtdFBhY2tldFBvb2w7CiAgICAgbWVtc2V0KHBUeFBhY2tldCwgMCwgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpICsgV0xBTl9QUk9CRVJFU1BfRlJfTUFYTEVOKTsKLSAgICBwVHhQYWNrZXQtPnA4MDIxMUhlYWRlciA9IChQVVdMQU5fODAyMTFIRFIpKChQQllURSlwVHhQYWNrZXQgKyBzaXplb2YoU1R4TWdtdFBhY2tldCkpOworICAgIHBUeFBhY2tldC0+cDgwMjExSGVhZGVyID0gKFBVV0xBTl84MDIxMUhEUikoKHVuc2lnbmVkIGNoYXIgKilwVHhQYWNrZXQgKyBzaXplb2YoU1R4TWdtdFBhY2tldCkpOwogICAgIC8vIFNldHVwIHRoZSBzRnJhbWUgc3RydWN0dXJlLgotICAgIHNGcmFtZS5wQnVmID0gKFBCWVRFKXBUeFBhY2tldC0+cDgwMjExSGVhZGVyOworICAgIHNGcmFtZS5wQnVmID0gKHVuc2lnbmVkIGNoYXIgKilwVHhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKICAgICBzRnJhbWUubGVuID0gV0xBTl9QUk9CRVJFU1BfRlJfTUFYTEVOOwogICAgIHZNZ3JFbmNvZGVQcm9iZVJlc3BvbnNlKCZzRnJhbWUpOwogICAgIC8vIFNldHVwIHRoZSBoZWFkZXIKQEAgLTM0OTMsNyArMzQ5NCw3IEBACiAgICAgKnNGcmFtZS5wd0NhcEluZm8gPSBjcHVfdG9fbGUxNih3Q3VyckNhcEluZm8pOwogCiAgICAgaWYgKGJ5UEhZVHlwZSA9PSBCQl9UWVBFXzExQikgewotICAgICAgICAqc0ZyYW1lLnB3Q2FwSW5mbyAmPSBjcHVfdG9fbGUxNigoV09SRCl+KFdMQU5fU0VUX0NBUF9JTkZPX1NIT1JUU0xPVFRJTUUoMSkpKTsKKyAgICAgICAgKnNGcmFtZS5wd0NhcEluZm8gJj0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KX4oV0xBTl9TRVRfQ0FQX0lORk9fU0hPUlRTTE9UVElNRSgxKSkpOwogICAgIH0KIAogICAgIC8vIENvcHkgU1NJRApAQCAtMzUxOCw3ICszNTE5LDcgQEAKICAgICAgICAgc0ZyYW1lLmxlbiArPSAoMSkgKyBXTEFOX0lFSERSX0xFTjsKICAgICAgICAgc0ZyYW1lLnBEU1Bhcm1zLT5ieUVsZW1lbnRJRCA9IFdMQU5fRUlEX0RTX1BBUk1TOwogICAgICAgICBzRnJhbWUucERTUGFybXMtPmxlbiA9IDE7Ci0gICAgICAgIHNGcmFtZS5wRFNQYXJtcy0+YnlDdXJyQ2hhbm5lbCA9IChCWVRFKXVDdXJyQ2hhbm5lbDsKKyAgICAgICAgc0ZyYW1lLnBEU1Bhcm1zLT5ieUN1cnJDaGFubmVsID0gKHVuc2lnbmVkIGNoYXIpdUN1cnJDaGFubmVsOwogICAgIH0KIAogICAgIGlmIChwTWdtdC0+ZUN1cnJNb2RlICE9IFdNQUNfTU9ERV9FU1NfQVApIHsKQEAgLTM1MzUsMjAgKzM1MzYsMjAgQEAKICAgICAgICAgc0ZyYW1lLnBFUlAtPmJ5RWxlbWVudElEID0gV0xBTl9FSURfRVJQOwogICAgICAgICBzRnJhbWUucEVSUC0+bGVuID0gMTsKICAgICAgICAgc0ZyYW1lLnBFUlAtPmJ5Q29udGV4dCA9IDA7Ci0gICAgICAgIGlmIChwRGV2aWNlLT5iUHJvdGVjdE1vZGUgPT0gVFJVRSkKKyAgICAgICAgaWYgKHBEZXZpY2UtPmJQcm90ZWN0TW9kZSA9PSB0cnVlKQogICAgICAgICAgICAgc0ZyYW1lLnBFUlAtPmJ5Q29udGV4dCB8PSBXTEFOX0VJRF9FUlBfVVNFX1BST1RFQ1RJT047Ci0gICAgICAgIGlmIChwRGV2aWNlLT5iTm9uRVJQUHJlc2VudCA9PSBUUlVFKQorICAgICAgICBpZiAocERldmljZS0+Yk5vbkVSUFByZXNlbnQgPT0gdHJ1ZSkKICAgICAgICAgICAgIHNGcmFtZS5wRVJQLT5ieUNvbnRleHQgfD0gV0xBTl9FSURfRVJQX05PTkVSUF9QUkVTRU5UOwotICAgICAgICBpZiAocERldmljZS0+YkJhcmtlclByZWFtYmxlTWQgPT0gVFJVRSkKKyAgICAgICAgaWYgKHBEZXZpY2UtPmJCYXJrZXJQcmVhbWJsZU1kID09IHRydWUpCiAgICAgICAgICAgICBzRnJhbWUucEVSUC0+YnlDb250ZXh0IHw9IFdMQU5fRUlEX0VSUF9CQVJLRVJfTU9ERTsKICAgICB9CiAKLSAgICBpZiAoKHBNZ210LT5iMTFoRW5hYmxlID09IFRSVUUpICYmCisgICAgaWYgKChwTWdtdC0+YjExaEVuYWJsZSA9PSB0cnVlKSAmJgogICAgICAgICAocE1nbXQtPmVDdXJyZW50UEhZTW9kZSA9PSBQSFlfVFlQRV8xMUEpKSB7CiAgICAgICAgIC8vIENvdW50cnkgSUUKLSAgICAgICAgcGJ5QnVmZmVyID0gKFBCWVRFKShzRnJhbWUucEJ1ZiArIHNGcmFtZS5sZW4pOwotICAgICAgICBDQVJEdlNldENvdW50cnlJRShwTWdtdC0+cEFkYXB0ZXIsIHBieUJ1ZmZlcik7Ci0gICAgICAgIENBUkR2U2V0Q291bnRyeUluZm8ocE1nbXQtPnBBZGFwdGVyLCBQSFlfVFlQRV8xMUEsIHBieUJ1ZmZlcik7CisgICAgICAgIHBieUJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopKHNGcmFtZS5wQnVmICsgc0ZyYW1lLmxlbik7CisgICAgICAgIHNldF9jb3VudHJ5X0lFKHBNZ210LT5wQWRhcHRlciwgcGJ5QnVmZmVyKTsKKyAgICAgICAgc2V0X2NvdW50cnlfaW5mbyhwTWdtdC0+cEFkYXB0ZXIsIFBIWV9UWVBFXzExQSwgcGJ5QnVmZmVyKTsKICAgICAgICAgdUxlbmd0aCArPSAoKFBXTEFOX0lFX0NPVU5UUlkpIHBieUJ1ZmZlciktPmxlbiArIFdMQU5fSUVIRFJfTEVOOwogICAgICAgICBwYnlCdWZmZXIgKz0gKCgoUFdMQU5fSUVfQ09VTlRSWSkgcGJ5QnVmZmVyKS0+bGVuICsgV0xBTl9JRUhEUl9MRU4pOwogICAgICAgICAvLyBQb3dlciBDb25zdHJhaW4gSUUKQEAgLTM1NTcsMTIgKzM1NTgsMTIgQEAKICAgICAgICAgKChQV0xBTl9JRV9QV19DT05TVCkgcGJ5QnVmZmVyKS0+YnlQb3dlciA9IDA7CiAgICAgICAgIHBieUJ1ZmZlciArPSAoMSkgKyBXTEFOX0lFSERSX0xFTjsKICAgICAgICAgdUxlbmd0aCArPSAoMSkgKyBXTEFOX0lFSERSX0xFTjsKLSAgICAgICAgaWYgKHBNZ210LT5iU3dpdGNoQ2hhbm5lbCA9PSBUUlVFKSB7CisgICAgICAgIGlmIChwTWdtdC0+YlN3aXRjaENoYW5uZWwgPT0gdHJ1ZSkgewogICAgICAgICAgICAgLy8gQ2hhbm5lbCBTd2l0Y2ggSUUKICAgICAgICAgICAgICgoUFdMQU5fSUVfQ0hfU1cpIHBieUJ1ZmZlciktPmJ5RWxlbWVudElEID0gV0xBTl9FSURfQ0hfU1dJVENIOwogICAgICAgICAgICAgKChQV0xBTl9JRV9DSF9TVykgcGJ5QnVmZmVyKS0+bGVuID0gMzsKICAgICAgICAgICAgICgoUFdMQU5fSUVfQ0hfU1cpIHBieUJ1ZmZlciktPmJ5TW9kZSA9IDE7Ci0gICAgICAgICAgICAoKFBXTEFOX0lFX0NIX1NXKSBwYnlCdWZmZXIpLT5ieUNoYW5uZWwgPSBDQVJEYnlHZXRDaGFubmVsTnVtYmVyKHBNZ210LT5wQWRhcHRlciwgcE1nbXQtPmJ5TmV3Q2hhbm5lbCk7CisgICAgICAgICAgICAoKFBXTEFOX0lFX0NIX1NXKSBwYnlCdWZmZXIpLT5ieUNoYW5uZWwgPSBnZXRfY2hhbm5lbF9udW1iZXIocE1nbXQtPnBBZGFwdGVyLCBwTWdtdC0+YnlOZXdDaGFubmVsKTsKICAgICAgICAgICAgICgoUFdMQU5fSUVfQ0hfU1cpIHBieUJ1ZmZlciktPmJ5Q291bnQgPSAwOwogICAgICAgICAgICAgcGJ5QnVmZmVyICs9ICgzKSArIFdMQU5fSUVIRFJfTEVOOwogICAgICAgICAgICAgdUxlbmd0aCArPSAoMykgKyBXTEFOX0lFSERSX0xFTjsKQEAgLTM1ODYsNyArMzU4Nyw3IEBACiAgICAgICAgICAgICBwYnlCdWZmZXIgKz0gKDcpICsgV0xBTl9JRUhEUl9MRU47CiAgICAgICAgICAgICB1TGVuZ3RoICs9ICg3KSArIFdMQU5fSUVIRFJfTEVOOwogICAgICAgICAgICAgZm9yKGlpPUNCX01BWF9DSEFOTkVMXzI0RysxOyBpaTw9Q0JfTUFYX0NIQU5ORUw7IGlpKysgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKENBUkRiR2V0Q2hhbm5lbE1hcEluZm8ocE1nbXQtPnBBZGFwdGVyLCBpaSwgcGJ5QnVmZmVyLCBwYnlCdWZmZXIrMSkgPT0gVFJVRSkgeworICAgICAgICAgICAgICAgIGlmIChnZXRfY2hhbm5lbF9tYXBfaW5mbyhwTWdtdC0+cEFkYXB0ZXIsIGlpLCBwYnlCdWZmZXIsIHBieUJ1ZmZlcisxKSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgIHBieUJ1ZmZlciArPSAyOwogICAgICAgICAgICAgICAgICAgICB1TGVuZ3RoICs9IDI7CiAgICAgICAgICAgICAgICAgICAgIHBJQlNTREZTLT5sZW4gKz0gMjsKQEAgLTM2MDcsNyArMzYwOCw3IEBACiAgICAgfQogCiAgICAgLy8gaG9zdGFwZCB3cGEvd3BhMiBJRQotICAgIGlmICgocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX0FQKSAmJiAocERldmljZS0+YkVuYWJsZUhvc3RhcGQgPT0gVFJVRSkpIHsKKyAgICBpZiAoKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0VTU19BUCkgJiYgKHBEZXZpY2UtPmJFbmFibGVIb3N0YXBkID09IHRydWUpKSB7CiAgICAgICAgICBpZiAocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9XUEFOT05FKSB7CiAgICAgICAgICAgICAgaWYgKHBNZ210LT53V1BBSUVMZW4gIT0gMCkgewogICAgICAgICAgICAgICAgICBzRnJhbWUucFJTTiA9IChQV0xBTl9JRV9SU04pKHNGcmFtZS5wQnVmICsgc0ZyYW1lLmxlbik7CkBAIC0zNjQyLDkgKzM2NDMsOSBAQAogc19NZ3JNYWtlQXNzb2NSZXF1ZXN0KAogICAgIFBTRGV2aWNlIHBEZXZpY2UsCiAgICAgUFNNZ210T2JqZWN0IHBNZ210LAotICAgIFBCWVRFIHBEQWRkciwKLSAgICBXT1JEIHdDdXJyQ2FwSW5mbywKLSAgICBXT1JEIHdMaXN0ZW5JbnRlcnZhbCwKKyAgICB1bnNpZ25lZCBjaGFyICpwREFkZHIsCisgICAgdW5zaWduZWQgc2hvcnQgd0N1cnJDYXBJbmZvLAorICAgIHVuc2lnbmVkIHNob3J0IHdMaXN0ZW5JbnRlcnZhbCwKICAgICBQV0xBTl9JRV9TU0lEIHBDdXJyU1NJRCwKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBDdXJyUmF0ZXMsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwQ3VyckV4dFN1cHBSYXRlcwpAQCAtMzY1MiwxNSArMzY1MywxNSBAQAogewogICAgIFBTVHhNZ210UGFja2V0ICAgICAgcFR4UGFja2V0ID0gTlVMTDsKICAgICBXTEFOX0ZSX0FTU09DUkVRICAgIHNGcmFtZTsKLSAgICBQQllURSAgICAgICAgICAgICAgIHBieUlFczsKLSAgICBQQllURSAgICAgICAgICAgICAgIHBieVJTTjsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlJRXM7CisgICAgdW5zaWduZWQgY2hhciAqcGJ5UlNOOwogCiAKICAgICBwVHhQYWNrZXQgPSAoUFNUeE1nbXRQYWNrZXQpcE1nbXQtPnBieU1nbXRQYWNrZXRQb29sOwogICAgIG1lbXNldChwVHhQYWNrZXQsIDAsIHNpemVvZihTVHhNZ210UGFja2V0KSArIFdMQU5fQVNTT0NSRVFfRlJfTUFYTEVOKTsKLSAgICBwVHhQYWNrZXQtPnA4MDIxMUhlYWRlciA9IChQVVdMQU5fODAyMTFIRFIpKChQQllURSlwVHhQYWNrZXQgKyBzaXplb2YoU1R4TWdtdFBhY2tldCkpOworICAgIHBUeFBhY2tldC0+cDgwMjExSGVhZGVyID0gKFBVV0xBTl84MDIxMUhEUikoKHVuc2lnbmVkIGNoYXIgKilwVHhQYWNrZXQgKyBzaXplb2YoU1R4TWdtdFBhY2tldCkpOwogICAgIC8vIFNldHVwIHRoZSBzRnJhbWUgc3RydWN0dXJlLgotICAgIHNGcmFtZS5wQnVmID0gKFBCWVRFKXBUeFBhY2tldC0+cDgwMjExSGVhZGVyOworICAgIHNGcmFtZS5wQnVmID0gKHVuc2lnbmVkIGNoYXIgKilwVHhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKICAgICBzRnJhbWUubGVuID0gV0xBTl9BU1NPQ1JFUV9GUl9NQVhMRU47CiAgICAgLy8gZm9ybWF0IGZpeGVkIGZpZWxkIGZyYW1lIHN0cnVjdHVyZQogICAgIHZNZ3JFbmNvZGVBc3NvY1JlcXVlc3QoJnNGcmFtZSk7CkBAIC0zNzA5LDcgKzM3MTAsNyBAQAogICAgIHBieUlFcyArPSBwQ3VyclJhdGVzLT5sZW4gKyBXTEFOX0lFSERSX0xFTjsKIAogICAgIC8vIGZvciA4MDIuMTFoCi0gICAgaWYgKHBNZ210LT5iMTFoRW5hYmxlID09IFRSVUUpIHsKKyAgICBpZiAocE1nbXQtPmIxMWhFbmFibGUgPT0gdHJ1ZSkgewogICAgICAgICBpZiAoc0ZyYW1lLnBDdXJyUG93ZXJDYXAgPT0gTlVMTCkgewogICAgICAgICAgICAgc0ZyYW1lLnBDdXJyUG93ZXJDYXAgPSAoUFdMQU5fSUVfUFdfQ0FQKShzRnJhbWUucEJ1ZiArIHNGcmFtZS5sZW4pOwogICAgICAgICAgICAgc0ZyYW1lLmxlbiArPSAoMiArIFdMQU5fSUVIRFJfTEVOKTsKQEAgLTM3MjIsNyArMzcyMyw3IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKHNGcmFtZS5wQ3VyclN1cHBDaCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBzRnJhbWUucEN1cnJTdXBwQ2ggPSAoUFdMQU5fSUVfU1VQUF9DSCkoc0ZyYW1lLnBCdWYgKyBzRnJhbWUubGVuKTsKLSAgICAgICAgICAgIHNGcmFtZS5sZW4gKz0gQ0FSRGJ5U2V0U3VwcG9ydENoYW5uZWxzKHBNZ210LT5wQWRhcHRlciwoUEJZVEUpc0ZyYW1lLnBDdXJyU3VwcENoKTsKKyAgICAgICAgICAgIHNGcmFtZS5sZW4gKz0gc2V0X3N1cHBvcnRfY2hhbm5lbHMocE1nbXQtPnBBZGFwdGVyLCh1bnNpZ25lZCBjaGFyICopc0ZyYW1lLnBDdXJyU3VwcENoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzc2NSw3ICszNzY2LDcgQEAKICAgICAgICAgICAgIHNGcmFtZS5wUlNOV1BBLT5QS1NMaXN0WzBdLmFieU9VSVszXSA9IFdQQV9OT05FOwogICAgICAgICB9CiAgICAgICAgIC8vIEF1dGggS2V5IE1hbmFnZW1lbnQgU3VpdGUKLSAgICAgICAgcGJ5UlNOID0gKFBCWVRFKShzRnJhbWUucEJ1ZiArIHNGcmFtZS5sZW4gKyAyICsgc0ZyYW1lLnBSU05XUEEtPmxlbik7CisgICAgICAgIHBieVJTTiA9ICh1bnNpZ25lZCBjaGFyICopKHNGcmFtZS5wQnVmICsgc0ZyYW1lLmxlbiArIDIgKyBzRnJhbWUucFJTTldQQS0+bGVuKTsKICAgICAgICAgKnBieVJTTisrPTB4MDE7CiAgICAgICAgICpwYnlSU04rKz0weDAwOwogICAgICAgICAqcGJ5UlNOKys9MHgwMDsKQEAgLTM3OTksOCArMzgwMCw4IEBACiAgICAgfSBlbHNlIGlmICgoKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBMikgfHwKICAgICAgICAgICAgICAgICAocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9XUEEyUFNLKSkgJiYKICAgICAgICAgICAgICAgIChwTWdtdC0+cEN1cnJCU1MgIT0gTlVMTCkpIHsKLSAgICAgICAgVUlOVCAgICAgICAgICAgICAgICBpaTsKLSAgICAgICAgUFdPUkQgICAgICAgICAgICAgICBwd1BNS0lEOworICAgICAgICB1bnNpZ25lZCBpbnQgaWk7CisgICAgICAgIHVuc2lnbmVkIHNob3J0ICpwd1BNS0lEOwogCiAgICAgICAgIC8vIFdQQSBJRQogICAgICAgICBzRnJhbWUucFJTTiA9IChQV0xBTl9JRV9SU04pKHNGcmFtZS5wQnVmICsgc0ZyYW1lLmxlbik7CkBAIC0zODU0LDcgKzM4NTUsNyBAQAogICAgICAgICBzRnJhbWUucFJTTi0+bGVuICs9NjsKIAogICAgICAgICAvLyBSU04gQ2FwYWJpbGl0ZXMKLSAgICAgICAgaWYgKHBNZ210LT5wQ3VyckJTUy0+c1JTTkNhcE9iai5iUlNOQ2FwRXhpc3QgPT0gVFJVRSkgeworICAgICAgICBpZiAocE1nbXQtPnBDdXJyQlNTLT5zUlNOQ2FwT2JqLmJSU05DYXBFeGlzdCA9PSB0cnVlKSB7CiAgICAgICAgICAgICBtZW1jcHkoJnNGcmFtZS5wUlNOLT5hYnlSU05bMTZdLCAmcE1nbXQtPnBDdXJyQlNTLT5zUlNOQ2FwT2JqLndSU05DYXAsIDIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc0ZyYW1lLnBSU04tPmFieVJTTlsxNl0gPSAwOwpAQCAtMzg2MiwxMCArMzg2MywxMCBAQAogICAgICAgICB9CiAgICAgICAgIHNGcmFtZS5wUlNOLT5sZW4gKz0yOwogCi0gICAgICAgIGlmICgocERldmljZS0+Z3NQTUtJRC5CU1NJREluZm9Db3VudCA+IDApICYmIChwRGV2aWNlLT5iUm9hbWluZyA9PSBUUlVFKSAmJiAocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9XUEEyKSkgeworICAgICAgICBpZiAoKHBEZXZpY2UtPmdzUE1LSUQuQlNTSURJbmZvQ291bnQgPiAwKSAmJiAocERldmljZS0+YlJvYW1pbmcgPT0gdHJ1ZSkgJiYgKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBMikpIHsKICAgICAgICAgICAgIC8vIFJTTiBQTUtJRAogICAgICAgICAgICAgcGJ5UlNOID0gJnNGcmFtZS5wUlNOLT5hYnlSU05bMThdOwotICAgICAgICAgICAgcHdQTUtJRCA9IChQV09SRClwYnlSU047IC8vIFBvaW50IHRvIFBNS0lEIGNvdW50CisgICAgICAgICAgICBwd1BNS0lEID0gKHVuc2lnbmVkIHNob3J0ICopcGJ5UlNOOyAvLyBQb2ludCB0byBQTUtJRCBjb3VudAogICAgICAgICAgICAgKnB3UE1LSUQgPSAwOyAgICAgICAgICAgIC8vIEluaXRpYWxpemUgUE1LSUQgY291bnQKICAgICAgICAgICAgIHBieVJTTiArPSAyOyAgICAgICAgICAgICAvLyBQb2ludCB0byBQTUtJRCBsaXN0CiAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCBwRGV2aWNlLT5nc1BNS0lELkJTU0lESW5mb0NvdW50OyBpaSsrKSB7CkBAIC0zOTE3LDkgKzM5MTgsOSBAQAogc19NZ3JNYWtlUmVBc3NvY1JlcXVlc3QoCiAgICAgUFNEZXZpY2UgcERldmljZSwKICAgICBQU01nbXRPYmplY3QgcE1nbXQsCi0gICAgUEJZVEUgcERBZGRyLAotICAgIFdPUkQgd0N1cnJDYXBJbmZvLAotICAgIFdPUkQgd0xpc3RlbkludGVydmFsLAorICAgIHVuc2lnbmVkIGNoYXIgKnBEQWRkciwKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VyckNhcEluZm8sCisgICAgdW5zaWduZWQgc2hvcnQgd0xpc3RlbkludGVydmFsLAogICAgIFBXTEFOX0lFX1NTSUQgcEN1cnJTU0lELAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEN1cnJSYXRlcywKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBDdXJyRXh0U3VwcFJhdGVzCkBAIC0zOTI3LDE1ICszOTI4LDE1IEBACiB7CiAgICAgUFNUeE1nbXRQYWNrZXQgICAgICBwVHhQYWNrZXQgPSBOVUxMOwogICAgIFdMQU5fRlJfUkVBU1NPQ1JFUSAgc0ZyYW1lOwotICAgIFBCWVRFICAgICAgICAgICAgICAgcGJ5SUVzOwotICAgIFBCWVRFICAgICAgICAgICAgICAgcGJ5UlNOOworICAgIHVuc2lnbmVkIGNoYXIgKnBieUlFczsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlSU047CiAKIAogICAgIHBUeFBhY2tldCA9IChQU1R4TWdtdFBhY2tldClwTWdtdC0+cGJ5TWdtdFBhY2tldFBvb2w7CiAgICAgbWVtc2V0KCBwVHhQYWNrZXQsIDAsIHNpemVvZihTVHhNZ210UGFja2V0KSArIFdMQU5fUkVBU1NPQ1JFUV9GUl9NQVhMRU4pOwotICAgIHBUeFBhY2tldC0+cDgwMjExSGVhZGVyID0gKFBVV0xBTl84MDIxMUhEUikoKFBCWVRFKXBUeFBhY2tldCArIHNpemVvZihTVHhNZ210UGFja2V0KSk7CisgICAgcFR4UGFja2V0LT5wODAyMTFIZWFkZXIgPSAoUFVXTEFOXzgwMjExSERSKSgodW5zaWduZWQgY2hhciAqKXBUeFBhY2tldCArIHNpemVvZihTVHhNZ210UGFja2V0KSk7CiAgICAgLyogU2V0dXAgdGhlIHNGcmFtZSBzdHJ1Y3R1cmUuICovCi0gICAgc0ZyYW1lLnBCdWYgPSAoUEJZVEUpcFR4UGFja2V0LT5wODAyMTFIZWFkZXI7CisgICAgc0ZyYW1lLnBCdWYgPSAodW5zaWduZWQgY2hhciAqKXBUeFBhY2tldC0+cDgwMjExSGVhZGVyOwogICAgIHNGcmFtZS5sZW4gPSBXTEFOX1JFQVNTT0NSRVFfRlJfTUFYTEVOOwogCiAgICAgLy8gZm9ybWF0IGZpeGVkIGZpZWxkIGZyYW1lIHN0cnVjdHVyZQpAQCAtNDAyNCw3ICs0MDI1LDcgQEAKICAgICAgICAgICAgIHNGcmFtZS5wUlNOV1BBLT5QS1NMaXN0WzBdLmFieU9VSVszXSA9IFdQQV9OT05FOwogICAgICAgICB9CiAgICAgICAgIC8vIEF1dGggS2V5IE1hbmFnZW1lbnQgU3VpdGUKLSAgICAgICAgcGJ5UlNOID0gKFBCWVRFKShzRnJhbWUucEJ1ZiArIHNGcmFtZS5sZW4gKyAyICsgc0ZyYW1lLnBSU05XUEEtPmxlbik7CisgICAgICAgIHBieVJTTiA9ICh1bnNpZ25lZCBjaGFyICopKHNGcmFtZS5wQnVmICsgc0ZyYW1lLmxlbiArIDIgKyBzRnJhbWUucFJTTldQQS0+bGVuKTsKICAgICAgICAgKnBieVJTTisrPTB4MDE7CiAgICAgICAgICpwYnlSU04rKz0weDAwOwogICAgICAgICAqcGJ5UlNOKys9MHgwMDsKQEAgLTQwNTUsOCArNDA1Niw4IEBACiAgICAgfSBlbHNlIGlmICgoKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBMikgfHwKICAgICAgICAgICAgICAgICAocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9XUEEyUFNLKSkgJiYKICAgICAgICAgICAgICAgIChwTWdtdC0+cEN1cnJCU1MgIT0gTlVMTCkpIHsKLSAgICAgICAgVUlOVCAgICAgICAgICAgICAgICBpaTsKLSAgICAgICAgUFdPUkQgICAgICAgICAgICAgICBwd1BNS0lEOworICAgICAgICB1bnNpZ25lZCBpbnQgaWk7CisgICAgICAgIHVuc2lnbmVkIHNob3J0ICpwd1BNS0lEOwogCiAgICAgICAgIC8qIFdQQSBJRSAqLwogICAgICAgICBzRnJhbWUucFJTTiA9IChQV0xBTl9JRV9SU04pKHNGcmFtZS5wQnVmICsgc0ZyYW1lLmxlbik7CkBAIC00MTEwLDcgKzQxMTEsNyBAQAogICAgICAgICBzRnJhbWUucFJTTi0+bGVuICs9NjsKIAogICAgICAgICAvLyBSU04gQ2FwYWJpbGl0ZXMKLSAgICAgICAgaWYgKHBNZ210LT5wQ3VyckJTUy0+c1JTTkNhcE9iai5iUlNOQ2FwRXhpc3QgPT0gVFJVRSkgeworICAgICAgICBpZiAocE1nbXQtPnBDdXJyQlNTLT5zUlNOQ2FwT2JqLmJSU05DYXBFeGlzdCA9PSB0cnVlKSB7CiAgICAgICAgICAgICBtZW1jcHkoJnNGcmFtZS5wUlNOLT5hYnlSU05bMTZdLCAmcE1nbXQtPnBDdXJyQlNTLT5zUlNOQ2FwT2JqLndSU05DYXAsIDIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc0ZyYW1lLnBSU04tPmFieVJTTlsxNl0gPSAwOwpAQCAtNDExOCwxMCArNDExOSwxMCBAQAogICAgICAgICB9CiAgICAgICAgIHNGcmFtZS5wUlNOLT5sZW4gKz0yOwogCi0gICAgICAgIGlmICgocERldmljZS0+Z3NQTUtJRC5CU1NJREluZm9Db3VudCA+IDApICYmIChwRGV2aWNlLT5iUm9hbWluZyA9PSBUUlVFKSAmJiAocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9XUEEyKSkgeworICAgICAgICBpZiAoKHBEZXZpY2UtPmdzUE1LSUQuQlNTSURJbmZvQ291bnQgPiAwKSAmJiAocERldmljZS0+YlJvYW1pbmcgPT0gdHJ1ZSkgJiYgKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBMikpIHsKICAgICAgICAgICAgIC8vIFJTTiBQTUtJRAogICAgICAgICAgICAgcGJ5UlNOID0gJnNGcmFtZS5wUlNOLT5hYnlSU05bMThdOwotICAgICAgICAgICAgcHdQTUtJRCA9IChQV09SRClwYnlSU047IC8vIFBvaW50IHRvIFBNS0lEIGNvdW50CisgICAgICAgICAgICBwd1BNS0lEID0gKHVuc2lnbmVkIHNob3J0ICopcGJ5UlNOOyAvLyBQb2ludCB0byBQTUtJRCBjb3VudAogICAgICAgICAgICAgKnB3UE1LSUQgPSAwOyAgICAgICAgICAgIC8vIEluaXRpYWxpemUgUE1LSUQgY291bnQKICAgICAgICAgICAgIHBieVJTTiArPSAyOyAgICAgICAgICAgICAvLyBQb2ludCB0byBQTUtJRCBsaXN0CiAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCBwRGV2aWNlLT5nc1BNS0lELkJTU0lESW5mb0NvdW50OyBpaSsrKSB7CkBAIC00MTY5LDEwICs0MTcwLDEwIEBACiBzX01nck1ha2VBc3NvY1Jlc3BvbnNlKAogICAgIFBTRGV2aWNlIHBEZXZpY2UsCiAgICAgUFNNZ210T2JqZWN0IHBNZ210LAotICAgIFdPUkQgd0N1cnJDYXBJbmZvLAotICAgIFdPUkQgd0Fzc29jU3RhdHVzLAotICAgIFdPUkQgd0Fzc29jQUlELAotICAgIFBCWVRFIHBEc3RBZGRyLAorICAgIHVuc2lnbmVkIHNob3J0IHdDdXJyQ2FwSW5mbywKKyAgICB1bnNpZ25lZCBzaG9ydCB3QXNzb2NTdGF0dXMsCisgICAgdW5zaWduZWQgc2hvcnQgd0Fzc29jQUlELAorICAgIHVuc2lnbmVkIGNoYXIgKnBEc3RBZGRyLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEN1cnJTdXBwUmF0ZXMsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwQ3VyckV4dFN1cHBSYXRlcwogICAgICkKQEAgLTQxODMsOSArNDE4NCw5IEBACiAKICAgICBwVHhQYWNrZXQgPSAoUFNUeE1nbXRQYWNrZXQpcE1nbXQtPnBieU1nbXRQYWNrZXRQb29sOwogICAgIG1lbXNldChwVHhQYWNrZXQsIDAsIHNpemVvZihTVHhNZ210UGFja2V0KSArIFdMQU5fQVNTT0NSRVFfRlJfTUFYTEVOKTsKLSAgICBwVHhQYWNrZXQtPnA4MDIxMUhlYWRlciA9IChQVVdMQU5fODAyMTFIRFIpKChQQllURSlwVHhQYWNrZXQgKyBzaXplb2YoU1R4TWdtdFBhY2tldCkpOworICAgIHBUeFBhY2tldC0+cDgwMjExSGVhZGVyID0gKFBVV0xBTl84MDIxMUhEUikoKHVuc2lnbmVkIGNoYXIgKilwVHhQYWNrZXQgKyBzaXplb2YoU1R4TWdtdFBhY2tldCkpOwogICAgIC8vIFNldHVwIHRoZSBzRnJhbWUgc3RydWN0dXJlCi0gICAgc0ZyYW1lLnBCdWYgPSAoUEJZVEUpcFR4UGFja2V0LT5wODAyMTFIZWFkZXI7CisgICAgc0ZyYW1lLnBCdWYgPSAodW5zaWduZWQgY2hhciAqKXBUeFBhY2tldC0+cDgwMjExSGVhZGVyOwogICAgIHNGcmFtZS5sZW4gPSBXTEFOX1JFQVNTT0NSRVNQX0ZSX01BWExFTjsKICAgICB2TWdyRW5jb2RlQXNzb2NSZXNwb25zZSgmc0ZyYW1lKTsKICAgICAvLyBTZXR1cCB0aGUgaGVhZGVyCkBAIC00MjAwLDcgKzQyMDEsNyBAQAogCiAgICAgKnNGcmFtZS5wd0NhcEluZm8gPSBjcHVfdG9fbGUxNih3Q3VyckNhcEluZm8pOwogICAgICpzRnJhbWUucHdTdGF0dXMgPSBjcHVfdG9fbGUxNih3QXNzb2NTdGF0dXMpOwotICAgICpzRnJhbWUucHdBaWQgPSBjcHVfdG9fbGUxNigoV09SRCkod0Fzc29jQUlEIHwgQklUMTQgfCBCSVQxNSkpOworICAgICpzRnJhbWUucHdBaWQgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpKHdBc3NvY0FJRCB8IEJJVDE0IHwgQklUMTUpKTsKIAogICAgIC8vIENvcHkgdGhlIHJhdGUgc2V0CiAgICAgc0ZyYW1lLnBTdXBwUmF0ZXMgPSAoUFdMQU5fSUVfU1VQUF9SQVRFUykoc0ZyYW1lLnBCdWYgKyBzRnJhbWUubGVuKTsKQEAgLTQyNDMsMTAgKzQyNDQsMTAgQEAKIHNfTWdyTWFrZVJlQXNzb2NSZXNwb25zZSgKICAgICBQU0RldmljZSBwRGV2aWNlLAogICAgIFBTTWdtdE9iamVjdCBwTWdtdCwKLSAgICBXT1JEIHdDdXJyQ2FwSW5mbywKLSAgICBXT1JEIHdBc3NvY1N0YXR1cywKLSAgICBXT1JEIHdBc3NvY0FJRCwKLSAgICBQQllURSBwRHN0QWRkciwKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VyckNhcEluZm8sCisgICAgdW5zaWduZWQgc2hvcnQgd0Fzc29jU3RhdHVzLAorICAgIHVuc2lnbmVkIHNob3J0IHdBc3NvY0FJRCwKKyAgICB1bnNpZ25lZCBjaGFyICpwRHN0QWRkciwKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBDdXJyU3VwcFJhdGVzLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEN1cnJFeHRTdXBwUmF0ZXMKICAgICApCkBAIC00MjU3LDkgKzQyNTgsOSBAQAogCiAgICAgcFR4UGFja2V0ID0gKFBTVHhNZ210UGFja2V0KXBNZ210LT5wYnlNZ210UGFja2V0UG9vbDsKICAgICBtZW1zZXQocFR4UGFja2V0LCAwLCBzaXplb2YoU1R4TWdtdFBhY2tldCkgKyBXTEFOX0FTU09DUkVRX0ZSX01BWExFTik7Ci0gICAgcFR4UGFja2V0LT5wODAyMTFIZWFkZXIgPSAoUFVXTEFOXzgwMjExSERSKSgoUEJZVEUpcFR4UGFja2V0ICsgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpKTsKKyAgICBwVHhQYWNrZXQtPnA4MDIxMUhlYWRlciA9IChQVVdMQU5fODAyMTFIRFIpKCh1bnNpZ25lZCBjaGFyICopcFR4UGFja2V0ICsgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpKTsKICAgICAvLyBTZXR1cCB0aGUgc0ZyYW1lIHN0cnVjdHVyZQotICAgIHNGcmFtZS5wQnVmID0gKFBCWVRFKXBUeFBhY2tldC0+cDgwMjExSGVhZGVyOworICAgIHNGcmFtZS5wQnVmID0gKHVuc2lnbmVkIGNoYXIgKilwVHhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKICAgICBzRnJhbWUubGVuID0gV0xBTl9SRUFTU09DUkVTUF9GUl9NQVhMRU47CiAgICAgdk1nckVuY29kZVJlYXNzb2NSZXNwb25zZSgmc0ZyYW1lKTsKICAgICAvLyBTZXR1cCB0aGUgaGVhZGVyCkBAIC00Mjc0LDcgKzQyNzUsNyBAQAogCiAgICAgKnNGcmFtZS5wd0NhcEluZm8gPSBjcHVfdG9fbGUxNih3Q3VyckNhcEluZm8pOwogICAgICpzRnJhbWUucHdTdGF0dXMgPSBjcHVfdG9fbGUxNih3QXNzb2NTdGF0dXMpOwotICAgICpzRnJhbWUucHdBaWQgPSBjcHVfdG9fbGUxNigoV09SRCkod0Fzc29jQUlEIHwgQklUMTQgfCBCSVQxNSkpOworICAgICpzRnJhbWUucHdBaWQgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpKHdBc3NvY0FJRCB8IEJJVDE0IHwgQklUMTUpKTsKIAogICAgIC8vIENvcHkgdGhlIHJhdGUgc2V0CiAgICAgc0ZyYW1lLnBTdXBwUmF0ZXMgPSAoUFdMQU5fSUVfU1VQUF9SQVRFUykoc0ZyYW1lLnBCdWYgKyBzRnJhbWUubGVuKTsKQEAgLTQzMjIsMTYgKzQzMjMsMTYgQEAKIHsKICAgICBQS25vd25CU1MgICAgICAgICAgIHBCU1NMaXN0ID0gTlVMTDsKICAgICBXTEFOX0ZSX1BST0JFUkVTUCAgIHNGcmFtZTsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5Q3VyckNoYW5uZWwgPSBwUnhQYWNrZXQtPmJ5UnhDaGFubmVsOworICAgIHVuc2lnbmVkIGNoYXIgYnlDdXJyQ2hhbm5lbCA9IHBSeFBhY2tldC0+YnlSeENoYW5uZWw7CiAgICAgRVJQT2JqZWN0ICAgICAgICAgICBzRVJQOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlJRUNoYW5uZWwgPSAwOwotICAgIEJPT0wgICAgICAgICAgICAgICAgYkNoYW5uZWxIaXQgPSBUUlVFOworICAgIHVuc2lnbmVkIGNoYXIgYnlJRUNoYW5uZWwgPSAwOworICAgIGJvb2wgYkNoYW5uZWxIaXQgPSB0cnVlOwogCiAKICAgICBtZW1zZXQoJnNGcmFtZSwgMCwgc2l6ZW9mKFdMQU5fRlJfUFJPQkVSRVNQKSk7CiAgICAgLy8gZGVjb2RlIHRoZSBmcmFtZQogICAgIHNGcmFtZS5sZW4gPSBwUnhQYWNrZXQtPmNiTVBEVUxlbjsKLSAgICBzRnJhbWUucEJ1ZiA9IChQQllURSlwUnhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKKyAgICBzRnJhbWUucEJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopcFJ4UGFja2V0LT5wODAyMTFIZWFkZXI7CiAgICAgdk1nckRlY29kZVByb2JlUmVzcG9uc2UoJnNGcmFtZSk7CiAKICAgICBpZiAoKHNGcmFtZS5wcXdUaW1lc3RhbXAgPT0gMCkgfHwKQEAgLTQzNTAsMjkgKzQzNTEsMjkgQEAKICAgICBpZiAoc0ZyYW1lLnBEU1Bhcm1zICE9IDApIHsKICAgICAgICAgaWYgKGJ5Q3VyckNoYW5uZWwgPiBDQl9NQVhfQ0hBTk5FTF8yNEcpIHsKICAgICAgICAgICAgIC8vIGNoYW5uZWwgcmVtYXBwaW5nIHRvCi0gICAgICAgICAgICBieUlFQ2hhbm5lbCA9IENBUkRieUdldENoYW5uZWxNYXBwaW5nKHBNZ210LT5wQWRhcHRlciwgc0ZyYW1lLnBEU1Bhcm1zLT5ieUN1cnJDaGFubmVsLCBQSFlfVFlQRV8xMUEpOworICAgICAgICAgICAgYnlJRUNoYW5uZWwgPSBnZXRfY2hhbm5lbF9tYXBwaW5nKHBNZ210LT5wQWRhcHRlciwgc0ZyYW1lLnBEU1Bhcm1zLT5ieUN1cnJDaGFubmVsLCBQSFlfVFlQRV8xMUEpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYnlJRUNoYW5uZWwgPSBzRnJhbWUucERTUGFybXMtPmJ5Q3VyckNoYW5uZWw7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGJ5Q3VyckNoYW5uZWwgIT0gYnlJRUNoYW5uZWwpIHsKICAgICAgICAgICAgIC8vIGFkanVzdCBjaGFubmVsIGluZm8uIGJjcyB3ZSByY3YgYWRqY2VudCBjaGFubmVsIHBha2NrZXRzCi0gICAgICAgICAgICBiQ2hhbm5lbEhpdCA9IEZBTFNFOworICAgICAgICAgICAgYkNoYW5uZWxIaXQgPSBmYWxzZTsKICAgICAgICAgICAgIGJ5Q3VyckNoYW5uZWwgPSBieUlFQ2hhbm5lbDsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIG5vIERTIGNoYW5uZWwgaW5mbwotICAgICAgICBiQ2hhbm5lbEhpdCA9IFRSVUU7CisgICAgICAgIGJDaGFubmVsSGl0ID0gdHJ1ZTsKICAgICB9CiAKIC8vMjAwOC0wNzMwLTAxPEFkZD5ieSBNaWtlTGl1Ci1pZihDaGFubmVsRXhjZWVkWm9uZVR5cGUocERldmljZSxieUN1cnJDaGFubmVsKT09VFJVRSkKK2lmKENoYW5uZWxFeGNlZWRab25lVHlwZShwRGV2aWNlLGJ5Q3VyckNoYW5uZWwpPT10cnVlKQogICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHNGcmFtZS5wRVJQICE9IE5VTEwpIHsKICAgICAgICAgc0VSUC5ieUVSUCA9IHNGcmFtZS5wRVJQLT5ieUNvbnRleHQ7Ci0gICAgICAgIHNFUlAuYkVSUEV4aXN0ID0gVFJVRTsKKyAgICAgICAgc0VSUC5iRVJQRXhpc3QgPSB0cnVlOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHNFUlAuYkVSUEV4aXN0ID0gRkFMU0U7CisgICAgICAgIHNFUlAuYkVSUEV4aXN0ID0gZmFsc2U7CiAgICAgICAgIHNFUlAuYnlFUlAgPSAwOwogICAgIH0KIApAQCAtNDQ0OCw3ICs0NDQ5LDcgQEAKICAgICBXTEFOX0ZSX1BST0JFUkVRICAgIHNGcmFtZTsKICAgICBDTURfU1RBVFVTICAgICAgICAgIFN0YXR1czsKICAgICBQU1R4TWdtdFBhY2tldCAgICAgIHBUeFBhY2tldDsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5UEhZVHlwZSA9IEJCX1RZUEVfMTFCOworICAgIHVuc2lnbmVkIGNoYXIgYnlQSFlUeXBlID0gQkJfVFlQRV8xMUI7CiAKICAgICAvLyBTVEEgaW4gQWQtaG9jIG1vZGU6IHdoZW4gbGF0ZXN0IFRCVFQgYmVhY29uIHRyYW5zbWl0IHN1Y2Nlc3MsCiAgICAgLy8gU1RBIGhhdmUgdG8gcmVzcG9uc2UgdGhpcyByZXF1ZXN0LgpAQCAtNDQ1OCw3ICs0NDU5LDcgQEAKICAgICAgICAgbWVtc2V0KCZzRnJhbWUsIDAsIHNpemVvZihXTEFOX0ZSX1BST0JFUkVRKSk7CiAgICAgICAgIC8vIGRlY29kZSB0aGUgZnJhbWUKICAgICAgICAgc0ZyYW1lLmxlbiA9IHBSeFBhY2tldC0+Y2JNUERVTGVuOwotICAgICAgICBzRnJhbWUucEJ1ZiA9IChQQllURSlwUnhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKKyAgICAgICAgc0ZyYW1lLnBCdWYgPSAodW5zaWduZWQgY2hhciAqKXBSeFBhY2tldC0+cDgwMjExSGVhZGVyOwogICAgICAgICB2TWdyRGVjb2RlUHJvYmVSZXF1ZXN0KCZzRnJhbWUpOwogLyoKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiUHJvYmUgcmVxdWVzdCByeDpNQUMgYWRkcjolMDJ4LSUwMngtJTAyeD0lMDJ4LSUwMngtJTAyeCBcbiIsCkBAIC00NDk1LDcgKzQ0OTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAgc0ZyYW1lLnBIZHItPnNBMy5hYnlBZGRyMiwKICAgICAgICAgICAgICAgICAgICAgICAoUFdMQU5fSUVfU1NJRClwTWdtdC0+YWJ5Q3VyclNTSUQsCi0gICAgICAgICAgICAgICAgICAgICAgKFBCWVRFKXBNZ210LT5hYnlDdXJyQlNTSUQsCisgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilwTWdtdC0+YWJ5Q3VyckJTU0lELAogICAgICAgICAgICAgICAgICAgICAgIChQV0xBTl9JRV9TVVBQX1JBVEVTKXBNZ210LT5hYnlDdXJyU3VwcFJhdGVzLAogICAgICAgICAgICAgICAgICAgICAgIChQV0xBTl9JRV9TVVBQX1JBVEVTKXBNZ210LT5hYnlDdXJyRXh0U3VwcFJhdGVzLAogICAgICAgICAgICAgICAgICAgICAgICBieVBIWVR5cGUKQEAgLTQ1NDIsOCArNDU0Myw4IEBACiAgICAgICkKIHsKICAgICBQU0RldmljZSAgICBwRGV2aWNlID0gKFBTRGV2aWNlKWhEZXZpY2VDb250ZXh0OwotICAgIEJPT0wgICAgICAgIGJJblNjYW4gPSBGQUxTRTsKLSAgICBVSU5UICAgICAgICB1Tm9kZUluZGV4ID0gMDsKKyAgICBib29sIGJJblNjYW4gPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBpbnQgdU5vZGVJbmRleCA9IDA7CiAgICAgTk9ERV9TVEFURSAgZU5vZGVTdGF0ZSA9IDA7CiAgICAgQ01EX1NUQVRVUyAgU3RhdHVzOwogCkBAIC00NTc3LDcgKzQ1NzgsNyBAQAogICAgICAgICBjYXNlIFdMQU5fRlNUWVBFX0FTU09DUkVTUDoKICAgICAgICAgICAgIC8vIEZyYW1lIENsYXNlID0gMgogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAicnggYXNzb2NyZXNwMVxuIik7Ci0gICAgICAgICAgICBzX3ZNZ3JSeEFzc29jUmVzcG9uc2UocERldmljZSwgcE1nbXQsIHBSeFBhY2tldCwgRkFMU0UpOworICAgICAgICAgICAgc192TWdyUnhBc3NvY1Jlc3BvbnNlKHBEZXZpY2UsIHBNZ210LCBwUnhQYWNrZXQsIGZhbHNlKTsKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInJ4IGFzc29jcmVzcDJcbiIpOwogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTQ2MDMsNyArNDYwNCw3IEBACiAgICAgICAgIGNhc2UgV0xBTl9GU1RZUEVfUkVBU1NPQ1JFU1A6CiAgICAgICAgICAgICAvLyBGcmFtZSBDbGFzZSA9IDIKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInJ4IHJlYXNzb2NyZXNwXG4iKTsKLSAgICAgICAgICAgIHNfdk1nclJ4QXNzb2NSZXNwb25zZShwRGV2aWNlLCBwTWdtdCwgcFJ4UGFja2V0LCBUUlVFKTsKKyAgICAgICAgICAgIHNfdk1nclJ4QXNzb2NSZXNwb25zZShwRGV2aWNlLCBwTWdtdCwgcFJ4UGFja2V0LCB0cnVlKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgV0xBTl9GU1RZUEVfUFJPQkVSRVE6CkBAIC00NjIzLDcgKzQ2MjQsNyBAQAogICAgICAgICAgICAgLy8gRnJhbWUgQ2xhc2UgPSAwCiAgICAgICAgICAgICAvL0RCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInJ4IGJlYWNvblxuIik7CiAgICAgICAgICAgICBpZiAocE1nbXQtPmVTY2FuU3RhdGUgIT0gV01BQ19OT19TQ0FOTklORykgewotICAgICAgICAgICAgICAgIGJJblNjYW4gPSBUUlVFOworICAgICAgICAgICAgICAgIGJJblNjYW4gPSB0cnVlOwogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIHNfdk1nclJ4QmVhY29uKHBEZXZpY2UsIHBNZ210LCBwUnhQYWNrZXQsIGJJblNjYW4pOwogICAgICAgICAgICAgYnJlYWs7CkBAIC00NjgwLDEwICs0NjgxLDEwIEBACiAgKiAgUHJlcGFyZSBiZWFjb24gdG8gc2VuZAogICoKICAqIFJldHVybiBWYWx1ZToKLSAqICAgIFRSVUUgaWYgc3VjY2VzczsgRkFMU0UgaWYgZmFpbGVkLgorICogICAgdHJ1ZSBpZiBzdWNjZXNzOyBmYWxzZSBpZiBmYWlsZWQuCiAgKgogLSovCi1CT09MCitib29sCiBiTWdyUHJlcGFyZUJlYWNvblRvU2VuZCgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKICAgICBQU01nbXRPYmplY3QgcE1nbXQKQEAgLTQ2OTIsNyArNDY5Myw3IEBACiAgICAgUFNEZXZpY2UgICAgICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKWhEZXZpY2VDb250ZXh0OwogICAgIFBTVHhNZ210UGFja2V0ICAgICAgcFR4UGFja2V0OwogCi0vLyAgICBwRGV2aWNlLT5iQmVhY29uQnVmUmVhZHkgPSBGQUxTRTsKKy8vICAgIHBEZXZpY2UtPmJCZWFjb25CdWZSZWFkeSA9IGZhbHNlOwogICAgIGlmIChwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSB8fCBwRGV2aWNlLT5iRW5hYmxlODAyMXgpewogICAgICAgICBwTWdtdC0+d0N1cnJDYXBJbmZvIHw9IFdMQU5fU0VUX0NBUF9JTkZPX1BSSVZBQ1koMSk7CiAgICAgfQpAQCAtNDcwOCwxOCArNDcwOSwxOCBAQAogICAgICAgICAgICAgICAgICAgcE1nbXQtPnVDdXJyQ2hhbm5lbCwKICAgICAgICAgICAgICAgICAgIHBNZ210LT53Q3VyckFUSU1XaW5kb3csIC8vMCwKICAgICAgICAgICAgICAgICAgIChQV0xBTl9JRV9TU0lEKXBNZ210LT5hYnlDdXJyU1NJRCwKLSAgICAgICAgICAgICAgICAgIChQQllURSlwTWdtdC0+YWJ5Q3VyckJTU0lELAorICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilwTWdtdC0+YWJ5Q3VyckJTU0lELAogICAgICAgICAgICAgICAgICAgKFBXTEFOX0lFX1NVUFBfUkFURVMpcE1nbXQtPmFieUN1cnJTdXBwUmF0ZXMsCiAgICAgICAgICAgICAgICAgICAoUFdMQU5fSUVfU1VQUF9SQVRFUylwTWdtdC0+YWJ5Q3VyckV4dFN1cHBSYXRlcwogICAgICAgICAgICAgICAgICk7CiAKICAgICBpZiAoKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0lCU1NfU1RBKSAmJgogICAgICAgICAocE1nbXQtPmFieUN1cnJCU1NJRFswXSA9PSAwKSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjc0JlYWNvbl94bWl0KHBEZXZpY2UsIHBUeFBhY2tldCk7CiAKLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCkBAIC00NzQxLDcgKzQ3NDIsNyBAQAogdm9pZAogc192TWdyTG9nU3RhdHVzKAogICAgIFBTTWdtdE9iamVjdCBwTWdtdCwKLSAgICBXT1JEICB3U3RhdHVzCisgICAgdW5zaWduZWQgc2hvcnQgd1N0YXR1cwogICAgICkKIHsKICAgICBzd2l0Y2goIHdTdGF0dXMgKXsKQEAgLTQ4MDcsMjQgKzQ4MDgsMjQgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZS4KICAqCiAtKi8KLUJPT0wKK2Jvb2wKIGJBZGRfUE1LSURfQ2FuZGlkYXRlICgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKLSAgICBQQllURSAgICAgICAgICBwYnlCU1NJRCwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCU1NJRCwKICAgICBQU1JTTkNhcE9iamVjdCBwc1JTTkNhcE9iagogICAgICkKIHsKICAgICBQU0RldmljZSAgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpaERldmljZUNvbnRleHQ7CiAgICAgUFBNS0lEX0NBTkRJREFURSBwQ2FuZGlkYXRlTGlzdDsKLSAgICBVSU5UICAgICAgICAgICAgIGlpID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgaWkgPSAwOwogCiAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJiQWRkX1BNS0lEX0NhbmRpZGF0ZSBTVEFSVDogKCVkKVxuIiwgKGludClwRGV2aWNlLT5nc1BNS0lEQ2FuZGlkYXRlLk51bUNhbmRpZGF0ZXMpOwogCiAgICAgaWYgKChwRGV2aWNlID09IE5VTEwpIHx8IChwYnlCU1NJRCA9PSBOVUxMKSB8fCAocHNSU05DYXBPYmogPT0gTlVMTCkpCi0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHBEZXZpY2UtPmdzUE1LSURDYW5kaWRhdGUuTnVtQ2FuZGlkYXRlcyA+PSBNQVhfUE1LSURMSVNUKQotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogCiAKQEAgLTQ4MzIsMTggKzQ4MzMsMTggQEAKICAgICBmb3IgKGlpID0gMDsgaWkgPCBwRGV2aWNlLT5nc1BNS0lEQ2FuZGlkYXRlLk51bUNhbmRpZGF0ZXM7IGlpKyspIHsKICAgICAgICAgcENhbmRpZGF0ZUxpc3QgPSAmcERldmljZS0+Z3NQTUtJRENhbmRpZGF0ZS5DYW5kaWRhdGVMaXN0W2lpXTsKICAgICAgICAgaWYgKCAhbWVtY21wKHBDYW5kaWRhdGVMaXN0LT5CU1NJRCwgcGJ5QlNTSUQsIEVUSF9BTEVOKSkgewotICAgICAgICAgICAgaWYgKChwc1JTTkNhcE9iai0+YlJTTkNhcEV4aXN0ID09IFRSVUUpICYmIChwc1JTTkNhcE9iai0+d1JTTkNhcCAmIEJJVDApKSB7CisgICAgICAgICAgICBpZiAoKHBzUlNOQ2FwT2JqLT5iUlNOQ2FwRXhpc3QgPT0gdHJ1ZSkgJiYgKHBzUlNOQ2FwT2JqLT53UlNOQ2FwICYgQklUMCkpIHsKICAgICAgICAgICAgICAgICBwQ2FuZGlkYXRlTGlzdC0+RmxhZ3MgfD0gTkRJU184MDJfMTFfUE1LSURfQ0FORElEQVRFX1BSRUFVVEhfRU5BQkxFRDsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcENhbmRpZGF0ZUxpc3QtPkZsYWdzICY9IH4oTkRJU184MDJfMTFfUE1LSURfQ0FORElEQVRFX1BSRUFVVEhfRU5BQkxFRCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gTmV3IENhbmRpZGF0ZQogICAgIHBDYW5kaWRhdGVMaXN0ID0gJnBEZXZpY2UtPmdzUE1LSURDYW5kaWRhdGUuQ2FuZGlkYXRlTGlzdFtwRGV2aWNlLT5nc1BNS0lEQ2FuZGlkYXRlLk51bUNhbmRpZGF0ZXNdOwotICAgIGlmICgocHNSU05DYXBPYmotPmJSU05DYXBFeGlzdCA9PSBUUlVFKSAmJiAocHNSU05DYXBPYmotPndSU05DYXAgJiBCSVQwKSkgeworICAgIGlmICgocHNSU05DYXBPYmotPmJSU05DYXBFeGlzdCA9PSB0cnVlKSAmJiAocHNSU05DYXBPYmotPndSU05DYXAgJiBCSVQwKSkgewogICAgICAgICBwQ2FuZGlkYXRlTGlzdC0+RmxhZ3MgfD0gTkRJU184MDJfMTFfUE1LSURfQ0FORElEQVRFX1BSRUFVVEhfRU5BQkxFRDsKICAgICB9IGVsc2UgewogICAgICAgICBwQ2FuZGlkYXRlTGlzdC0+RmxhZ3MgJj0gfihORElTXzgwMl8xMV9QTUtJRF9DQU5ESURBVEVfUFJFQVVUSF9FTkFCTEVEKTsKQEAgLTQ4NTEsNyArNDg1Miw3IEBACiAgICAgbWVtY3B5KHBDYW5kaWRhdGVMaXN0LT5CU1NJRCwgcGJ5QlNTSUQsIEVUSF9BTEVOKTsKICAgICBwRGV2aWNlLT5nc1BNS0lEQ2FuZGlkYXRlLk51bUNhbmRpZGF0ZXMrKzsKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIk51bUNhbmRpZGF0ZXM6JWRcbiIsIChpbnQpcERldmljZS0+Z3NQTUtJRENhbmRpZGF0ZS5OdW1DYW5kaWRhdGVzKTsKLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLyoKQEAgLTQ4ODEsMjAgKzQ4ODIsMjAgQEAKICAgICBtZW1zZXQoJnBEZXZpY2UtPmdzUE1LSURDYW5kaWRhdGUsIDAsIHNpemVvZihTUE1LSURDYW5kaWRhdGVFdmVudCkpOwogfQogCi1zdGF0aWMgQk9PTAorc3RhdGljIGJvb2wKIHNfYkNpcGhlck1hdGNoICgKICAgICBQS25vd25CU1MgICAgICAgICAgICAgICAgICAgICAgICBwQlNTTm9kZSwKICAgICBORElTXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUyAgICBFbmNTdGF0dXMsCi0gICAgUEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICBwYnlDQ1NQSywKLSAgICBQQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBieUNDU0dLCisgICAgdW5zaWduZWQgY2hhciAqcGJ5Q0NTUEssCisgICAgdW5zaWduZWQgY2hhciAqcGJ5Q0NTR0sKICAgICApCiB7Ci0gICAgQllURSBieU11bHRpY2FzdENpcGhlciA9IEtFWV9DVExfSU5WQUxJRDsKLSAgICBCWVRFIGJ5Q2lwaGVyTWFzayA9IDB4MDA7CisgICAgdW5zaWduZWQgY2hhciBieU11bHRpY2FzdENpcGhlciA9IEtFWV9DVExfSU5WQUxJRDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q2lwaGVyTWFzayA9IDB4MDA7CiAgICAgaW50IGk7CiAKICAgICBpZiAocEJTU05vZGUgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBjaGVjayBjYXAuIG9mIEJTUwogICAgIGlmICgoV0xBTl9HRVRfQ0FQX0lORk9fUFJJVkFDWShwQlNTTm9kZS0+d0NhcEluZm8pICE9IDApICYmCkBAIC00OTA0LDcgKzQ5MDUsNyBAQAogICAgIH0KIAogICAgIGlmICgoV0xBTl9HRVRfQ0FQX0lORk9fUFJJVkFDWShwQlNTTm9kZS0+d0NhcEluZm8pICE9IDApICYmCi0gICAgICAgIChwQlNTTm9kZS0+YldQQTJWYWxpZCA9PSBUUlVFKSAmJgorICAgICAgICAocEJTU05vZGUtPmJXUEEyVmFsaWQgPT0gdHJ1ZSkgJiYKICAgICAgICAgICAvLzIwMDgwMTIzLTAxLDxBZGQ+IGJ5IEVpbnNuIExpdQogICAgICAgICAoKEVuY1N0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKXx8KEVuY1N0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSkpIHsKICAgICAgICAgLy9XUEEyCkBAIC00OTM4LDcgKzQ5MzksNyBAQAogICAgICAgICB9CiAKICAgICB9IGVsc2UgaWYgKChXTEFOX0dFVF9DQVBfSU5GT19QUklWQUNZKHBCU1NOb2RlLT53Q2FwSW5mbykgIT0gMCkgJiYKLSAgICAgICAgICAgICAgICAocEJTU05vZGUtPmJXUEFWYWxpZCA9PSBUUlVFKSAmJgorICAgICAgICAgICAgICAgIChwQlNTTm9kZS0+YldQQVZhbGlkID09IHRydWUpICYmCiAgICAgICAgICAgICAgICAgKChFbmNTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkgfHwgKEVuY1N0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSkpIHsKICAgICAgICAgLy9XUEEKICAgICAgICAgLy8gY2hlY2sgR3JvdXAgS2V5IENpcGhlcgpAQCAtNDk3OCw5ICs0OTc5LDkgQEAKICAgICAgICAgICAgIChieUNpcGhlck1hc2sgPT0gMCkpIHsKICAgICAgICAgICAgICpwYnlDQ1NHSyA9IEtFWV9DVExfV0VQOwogICAgICAgICAgICAgKnBieUNDU1BLID0gS0VZX0NUTF9OT05FOwotICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCiAgICAgfSBlbHNlIGlmIChFbmNTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkgewpAQCAtNDk4OCw0NSArNDk4OSw0NSBAQAogICAgICAgICAgICAgKGJ5Q2lwaGVyTWFzayA9PSAwKSkgewogICAgICAgICAgICAgKnBieUNDU0dLID0gS0VZX0NUTF9US0lQOwogICAgICAgICAgICAgKnBieUNDU1BLID0gS0VZX0NUTF9OT05FOwotICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBlbHNlIGlmICgoYnlNdWx0aWNhc3RDaXBoZXIgPT0gS0VZX0NUTF9XRVApICYmCiAgICAgICAgICAgICAgICAgICAgKChieUNpcGhlck1hc2sgJiAweDAyKSAhPSAwKSkgewogICAgICAgICAgICAgKnBieUNDU0dLID0gS0VZX0NUTF9XRVA7CiAgICAgICAgICAgICAqcGJ5Q0NTUEsgPSBLRVlfQ1RMX1RLSVA7Ci0gICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9IGVsc2UgaWYgKChieU11bHRpY2FzdENpcGhlciA9PSBLRVlfQ1RMX1RLSVApICYmCiAgICAgICAgICAgICAgICAgICAgKChieUNpcGhlck1hc2sgJiAweDAyKSAhPSAwKSkgewogICAgICAgICAgICAgKnBieUNDU0dLID0gS0VZX0NUTF9US0lQOwogICAgICAgICAgICAgKnBieUNDU1BLID0gS0VZX0NUTF9US0lQOwotICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoRW5jU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpIHsKICAgICAgICAgaWYgKChieU11bHRpY2FzdENpcGhlciA9PSBLRVlfQ1RMX0NDTVApICYmCiAgICAgICAgICAgICAoYnlDaXBoZXJNYXNrID09IDApKSB7CiAgICAgICAgICAgICAvLyBXaGVuIENDTVAgaXMgZW5hYmxlLCAiVXNlIGdyb3VwIGNpcGhlciBzdWl0ZSIgc2hhbGwgbm90IGJlIGEgdmFsaWQgb3B0aW9uLgotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9IGVsc2UgaWYgKChieU11bHRpY2FzdENpcGhlciA9PSBLRVlfQ1RMX1dFUCkgJiYKICAgICAgICAgICAgICAgICAgICAoKGJ5Q2lwaGVyTWFzayAmIDB4MDQpICE9IDApKSB7CiAgICAgICAgICAgICAqcGJ5Q0NTR0sgPSBLRVlfQ1RMX1dFUDsKICAgICAgICAgICAgICpwYnlDQ1NQSyA9IEtFWV9DVExfQ0NNUDsKLSAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAoKGJ5TXVsdGljYXN0Q2lwaGVyID09IEtFWV9DVExfVEtJUCkgJiYKICAgICAgICAgICAgICAgICAgICAoKGJ5Q2lwaGVyTWFzayAmIDB4MDQpICE9IDApKSB7CiAgICAgICAgICAgICAqcGJ5Q0NTR0sgPSBLRVlfQ1RMX1RLSVA7CiAgICAgICAgICAgICAqcGJ5Q0NTUEsgPSBLRVlfQ1RMX0NDTVA7Ci0gICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9IGVsc2UgaWYgKChieU11bHRpY2FzdENpcGhlciA9PSBLRVlfQ1RMX0NDTVApICYmCiAgICAgICAgICAgICAgICAgICAgKChieUNpcGhlck1hc2sgJiAweDA0KSAhPSAwKSkgewogICAgICAgICAgICAgKnBieUNDU0dLID0gS0VZX0NUTF9DQ01QOwogICAgICAgICAgICAgKnBieUNDU1BLID0gS0VZX0NUTF9DQ01QOwotICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dtZ3IuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd21nci5oCmluZGV4IDlhZTdlMGQuLjE0MWU4MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd21nci5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd21nci5oCkBAIC04Myw0NyArODMsNDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBUeXBlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNkZWZpbmUgdGltZXJfZXhwaXJlKHRpbWVyLG5leHRfdGljaykgICBtb2RfdGltZXIoJnRpbWVyLCBSVU5fQVQobmV4dF90aWNrKSkKLXR5cGVkZWYgdm9pZCAoKlRpbWVyRnVuY3Rpb24pKFVMT05HKTsKK3R5cGVkZWYgdm9pZCAoKlRpbWVyRnVuY3Rpb24pKHVuc2lnbmVkIGxvbmcpOwogCiAKIC8vKysrIE5ESVMgcmVsYXRlZAogCi10eXBlZGVmIFVDSEFSICAgTkRJU184MDJfMTFfTUFDX0FERFJFU1NbNl07Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgTkRJU184MDJfMTFfTUFDX0FERFJFU1NbNl07CiB0eXBlZGVmIHN0cnVjdCBfTkRJU184MDJfMTFfQUlfUkVRRkkKIHsKLSAgICBVU0hPUlQgQ2FwYWJpbGl0aWVzOwotICAgIFVTSE9SVCBMaXN0ZW5JbnRlcnZhbDsKKyAgICB1bnNpZ25lZCBzaG9ydCBDYXBhYmlsaXRpZXM7CisgICAgdW5zaWduZWQgc2hvcnQgTGlzdGVuSW50ZXJ2YWw7CiAgICAgTkRJU184MDJfMTFfTUFDX0FERFJFU1MgIEN1cnJlbnRBUEFkZHJlc3M7CiB9IE5ESVNfODAyXzExX0FJX1JFUUZJLCAqUE5ESVNfODAyXzExX0FJX1JFUUZJOwogCiB0eXBlZGVmIHN0cnVjdCBfTkRJU184MDJfMTFfQUlfUkVTRkkKIHsKLSAgICBVU0hPUlQgQ2FwYWJpbGl0aWVzOwotICAgIFVTSE9SVCBTdGF0dXNDb2RlOwotICAgIFVTSE9SVCBBc3NvY2lhdGlvbklkOworICAgIHVuc2lnbmVkIHNob3J0IENhcGFiaWxpdGllczsKKyAgICB1bnNpZ25lZCBzaG9ydCBTdGF0dXNDb2RlOworICAgIHVuc2lnbmVkIHNob3J0IEFzc29jaWF0aW9uSWQ7CiB9IE5ESVNfODAyXzExX0FJX1JFU0ZJLCAqUE5ESVNfODAyXzExX0FJX1JFU0ZJOwogCiB0eXBlZGVmIHN0cnVjdCBfTkRJU184MDJfMTFfQVNTT0NJQVRJT05fSU5GT1JNQVRJT04KIHsKLSAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBMZW5ndGg7Ci0gICAgVVNIT1JUICAgICAgICAgICAgICAgICAgQXZhaWxhYmxlUmVxdWVzdEZpeGVkSUVzOworICAgIHVuc2lnbmVkIGxvbmcgTGVuZ3RoOworICAgIHVuc2lnbmVkIHNob3J0ICAgICAgICAgIEF2YWlsYWJsZVJlcXVlc3RGaXhlZElFczsKICAgICBORElTXzgwMl8xMV9BSV9SRVFGSSAgICBSZXF1ZXN0Rml4ZWRJRXM7Ci0gICAgVUxPTkcgICAgICAgICAgICAgICAgICAgUmVxdWVzdElFTGVuZ3RoOwotICAgIFVMT05HICAgICAgICAgICAgICAgICAgIE9mZnNldFJlcXVlc3RJRXM7Ci0gICAgVVNIT1JUICAgICAgICAgICAgICAgICAgQXZhaWxhYmxlUmVzcG9uc2VGaXhlZElFczsKKyAgICB1bnNpZ25lZCBsb25nIFJlcXVlc3RJRUxlbmd0aDsKKyAgICB1bnNpZ25lZCBsb25nIE9mZnNldFJlcXVlc3RJRXM7CisgICAgdW5zaWduZWQgc2hvcnQgICAgICAgICAgQXZhaWxhYmxlUmVzcG9uc2VGaXhlZElFczsKICAgICBORElTXzgwMl8xMV9BSV9SRVNGSSAgICBSZXNwb25zZUZpeGVkSUVzOwotICAgIFVMT05HICAgICAgICAgICAgICAgICAgIFJlc3BvbnNlSUVMZW5ndGg7Ci0gICAgVUxPTkcgICAgICAgICAgICAgICAgICAgT2Zmc2V0UmVzcG9uc2VJRXM7CisgICAgdW5zaWduZWQgbG9uZyBSZXNwb25zZUlFTGVuZ3RoOworICAgIHVuc2lnbmVkIGxvbmcgT2Zmc2V0UmVzcG9uc2VJRXM7CiB9IE5ESVNfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OLCAqUE5ESVNfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OOwogCiAKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU0Fzc29jSW5mbyB7CiAgICAgTkRJU184MDJfMTFfQVNTT0NJQVRJT05fSU5GT1JNQVRJT04gICAgIEFzc29jSW5mbzsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJ5SUVzW1dMQU5fQkVBQ09OX0ZSX01BWExFTitXTEFOX0JFQUNPTl9GUl9NQVhMRU5dOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5SUVzW1dMQU5fQkVBQ09OX0ZSX01BWExFTitXTEFOX0JFQUNPTl9GUl9NQVhMRU5dOwogICAgIC8vIHN0b3JlIFJlcUlFcyBzZXQgYnkgT0lEXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTgotICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0SUVMZW5ndGg7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFieVJlcUlFc1tXTEFOX0JFQUNPTl9GUl9NQVhMRU5dOworICAgIHVuc2lnbmVkIGxvbmcgUmVxdWVzdElFTGVuZ3RoOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5UmVxSUVzW1dMQU5fQkVBQ09OX0ZSX01BWExFTl07CiB9IFNBc3NvY0luZm8sICpQU0Fzc29jSW5mbzsKIC8vLS0tCiAKQEAgLTIyNCw4ICsyMjQsOCBAQAogdHlwZWRlZiBzdHJ1Y3QgdGFnU1R4TWdtdFBhY2tldCB7CiAKICAgICBQVVdMQU5fODAyMTFIRFIgICAgIHA4MDIxMUhlYWRlcjsKLSAgICBVSU5UICAgICAgICAgICAgICAgIGNiTVBEVUxlbjsKLSAgICBVSU5UICAgICAgICAgICAgICAgIGNiUGF5bG9hZExlbjsKKyAgICB1bnNpZ25lZCBpbnQgY2JNUERVTGVuOworICAgIHVuc2lnbmVkIGludCBjYlBheWxvYWRMZW47CiAKIH0gU1R4TWdtdFBhY2tldCwgKlBTVHhNZ210UGFja2V0OwogCkBAIC0yMzUsMTIgKzIzNSwxMiBAQAogCiAgICAgUFVXTEFOXzgwMjExSERSICAgICBwODAyMTFIZWFkZXI7CiAgICAgUVdPUkQgICAgICAgICAgICAgICBxd0xvY2FsVFNGOwotICAgIFVJTlQgICAgICAgICAgICAgICAgY2JNUERVTGVuOwotICAgIFVJTlQgICAgICAgICAgICAgICAgY2JQYXlsb2FkTGVuOwotICAgIFVJTlQgICAgICAgICAgICAgICAgdVJTU0k7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieVNROwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlSeFJhdGU7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieVJ4Q2hhbm5lbDsKKyAgICB1bnNpZ25lZCBpbnQgY2JNUERVTGVuOworICAgIHVuc2lnbmVkIGludCBjYlBheWxvYWRMZW47CisgICAgdW5zaWduZWQgaW50IHVSU1NJOworICAgIHVuc2lnbmVkIGNoYXIgYnlTUTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UnhSYXRlOworICAgIHVuc2lnbmVkIGNoYXIgYnlSeENoYW5uZWw7CiAKIH0gU1J4TWdtdFBhY2tldCwgKlBTUnhNZ210UGFja2V0OwogCkBAIC0yNTEsNyArMjUxLDcgQEAKIAogICAgIHZvaWQgKiAgICAgICAgICAgICAgICAgICBwQWRhcHRlcjsKICAgICAvLyBNQUMgYWRkcmVzcwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGFieU1BQ0FkZHJbV0xBTl9BRERSX0xFTl07CisgICAgdW5zaWduZWQgY2hhciBhYnlNQUNBZGRyW1dMQU5fQUREUl9MRU5dOwogCiAgICAgLy8gQ29uZmlndXJhdGlvbiBNb2RlCiAgICAgV01BQ19DT05GSUdfTU9ERSAgICAgICAgZUNvbmZpZ01vZGU7IC8vIE1BQyBwcmUtY29uZmlnZWQgbW9kZQpAQCAtMjY0LDg2ICsyNjQsODYgQEAKICAgICBXTUFDX0JTU19TVEFURSAgICAgICAgICBlQ3VyclN0YXRlOyAgLy8gTUFDIGN1cnJlbnQgQlNTIHN0YXRlCiAKICAgICBQS25vd25CU1MgICAgICAgICAgICAgICBwQ3VyckJTUzsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBieUNTU0dLOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGJ5Q1NTUEs7CisgICAgdW5zaWduZWQgY2hhciBieUNTU0dLOworICAgIHVuc2lnbmVkIGNoYXIgYnlDU1NQSzsKIAotLy8gICAgQllURSAgICAgICAgICAgICAgICAgICAgYWJ5TmV3U3VwcFJhdGVzW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9SQVRFU19NQVhMRU5dOwotLy8gICAgQllURSAgICAgICAgICAgICAgICAgICAgYWJ5TmV3RXh0U3VwcFJhdGVzW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9SQVRFU19NQVhMRU5dOworLy8gICAgdW5zaWduZWQgY2hhciBhYnlOZXdTdXBwUmF0ZXNbV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1JBVEVTX01BWExFTl07CisvLyAgICB1bnNpZ25lZCBjaGFyIGFieU5ld0V4dFN1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOXTsKIAogICAgIC8vIEN1cnJlbnQgc3RhdGUgdmFycwotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIHVDdXJyQ2hhbm5lbDsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlDdXJyU3VwcFJhdGVzW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9SQVRFU19NQVhMRU4gKyAxXTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlDdXJyRXh0U3VwcFJhdGVzW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9SQVRFU19NQVhMRU4gKyAxXTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlDdXJyU1NJRFtXTEFOX0lFSERSX0xFTiArIFdMQU5fU1NJRF9NQVhMRU4gKyAxXTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlDdXJyQlNTSURbV0xBTl9CU1NJRF9MRU5dOwotICAgIFdPUkQgICAgICAgICAgICAgICAgICAgIHdDdXJyQ2FwSW5mbzsKLSAgICBXT1JEICAgICAgICAgICAgICAgICAgICB3Q3VyckFJRDsKLSAgICBXT1JEICAgICAgICAgICAgICAgICAgICB3Q3VyckFUSU1XaW5kb3c7Ci0gICAgV09SRCAgICAgICAgICAgICAgICAgICAgd0N1cnJCZWFjb25QZXJpb2Q7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYklzRFM7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlFUlBDb250ZXh0OworICAgIHVuc2lnbmVkIGludAl1Q3VyckNoYW5uZWw7CisgICAgdW5zaWduZWQgY2hhciBhYnlDdXJyU3VwcFJhdGVzW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9SQVRFU19NQVhMRU4gKyAxXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUN1cnJFeHRTdXBwUmF0ZXNbV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1JBVEVTX01BWExFTiArIDFdOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5Q3VyclNTSURbV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1NTSURfTUFYTEVOICsgMV07CisgICAgdW5zaWduZWQgY2hhciBhYnlDdXJyQlNTSURbV0xBTl9CU1NJRF9MRU5dOworICAgIHVuc2lnbmVkIHNob3J0IHdDdXJyQ2FwSW5mbzsKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VyckFJRDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VyckFUSU1XaW5kb3c7CisgICAgdW5zaWduZWQgc2hvcnQgd0N1cnJCZWFjb25QZXJpb2Q7CisgICAgYm9vbCBiSXNEUzsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RVJQQ29udGV4dDsKIAogICAgIENNRF9TVEFURSAgICAgICAgICAgICAgIGVDb21tYW5kU3RhdGU7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdVNjYW5DaGFubmVsOworICAgIHVuc2lnbmVkIGludAl1U2NhbkNoYW5uZWw7CiAKICAgICAvLyBEZXNpcmUgam9pbm5pbmcgQlNTIHZhcnMKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlEZXNpcmVTU0lEW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9TU0lEX01BWExFTiArIDFdOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGFieURlc2lyZUJTU0lEW1dMQU5fQlNTSURfTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieURlc2lyZVNTSURbV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1NTSURfTUFYTEVOICsgMV07CisgICAgdW5zaWduZWQgY2hhciBhYnlEZXNpcmVCU1NJRFtXTEFOX0JTU0lEX0xFTl07CiAKICAgICAvLyBBZGhvYyBvciBBUCBjb25maWd1cmF0aW9uIHZhcnMKLSAgLy9CWVRFICAgICAgICAgICAgICAgICAgICBhYnlBZEhvY1NTSURbV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1NTSURfTUFYTEVOICsgMV07Ci0gICAgV09SRCAgICAgICAgICAgICAgICAgICAgd0lCU1NCZWFjb25QZXJpb2Q7Ci0gICAgV09SRCAgICAgICAgICAgICAgICAgICAgd0lCU1NBVElNV2luZG93OwotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIHVJQlNTQ2hhbm5lbDsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlJQlNTU3VwcFJhdGVzW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9SQVRFU19NQVhMRU4gKyAxXTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBieUFQQkJUeXBlOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGFieVdQQUlFW01BWF9XUEFfSUVfTEVOXTsKLSAgICBXT1JEICAgICAgICAgICAgICAgICAgICB3V1BBSUVMZW47CisgIC8vdW5zaWduZWQgY2hhciBhYnlBZEhvY1NTSURbV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1NTSURfTUFYTEVOICsgMV07CisgICAgdW5zaWduZWQgc2hvcnQgd0lCU1NCZWFjb25QZXJpb2Q7CisgICAgdW5zaWduZWQgc2hvcnQgd0lCU1NBVElNV2luZG93OworICAgIHVuc2lnbmVkIGludAl1SUJTU0NoYW5uZWw7CisgICAgdW5zaWduZWQgY2hhciBhYnlJQlNTU3VwcFJhdGVzW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9SQVRFU19NQVhMRU4gKyAxXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5QVBCQlR5cGU7CisgICAgdW5zaWduZWQgY2hhciBhYnlXUEFJRVtNQVhfV1BBX0lFX0xFTl07CisgICAgdW5zaWduZWQgc2hvcnQgd1dQQUlFTGVuOwogCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdUFzc29jQ291bnQ7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYk1vcmVEYXRhOworICAgIHVuc2lnbmVkIGludAl1QXNzb2NDb3VudDsKKyAgICBib29sIGJNb3JlRGF0YTsKIAogICAgIC8vIFNjYW4gc3RhdGUgdmFycwogICAgIFdNQUNfU0NBTl9TVEFURSAgICAgICAgIGVTY2FuU3RhdGU7CiAgICAgV01BQ19TQ0FOX1RZUEUgICAgICAgICAgZVNjYW5UeXBlOwotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIHVTY2FuU3RhcnRDaDsKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICB1U2NhbkVuZENoOwotICAgIFdPUkQgICAgICAgICAgICAgICAgICAgIHdTY2FuU3RlcHM7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdVNjYW5CU1NUeXBlOworICAgIHVuc2lnbmVkIGludAl1U2NhblN0YXJ0Q2g7CisgICAgdW5zaWduZWQgaW50CXVTY2FuRW5kQ2g7CisgICAgdW5zaWduZWQgc2hvcnQgd1NjYW5TdGVwczsKKyAgICB1bnNpZ25lZCBpbnQJdVNjYW5CU1NUeXBlOwogICAgIC8vIERlc2lyZSBzY2FubmlnIHZhcnMKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlTY2FuU1NJRFtXTEFOX0lFSERSX0xFTiArIFdMQU5fU1NJRF9NQVhMRU4gKyAxXTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlTY2FuQlNTSURbV0xBTl9CU1NJRF9MRU5dOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5U2NhblNTSURbV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1NTSURfTUFYTEVOICsgMV07CisgICAgdW5zaWduZWQgY2hhciBhYnlTY2FuQlNTSURbV0xBTl9CU1NJRF9MRU5dOwogCiAgICAgLy8gUHJpdmFjeQogICAgIFdNQUNfQVVUSEVOVElDQVRJT05fTU9ERSBlQXV0aGVuTW9kZTsKICAgICBXTUFDX0VOQ1JZUFRJT05fTU9ERSAgICBlRW5jcnlwdGlvbk1vZGU7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYlNoYXJlS2V5QWxnb3JpdGhtOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGFieUNoYWxsZW5nZVtXTEFOX0NIQUxMRU5HRV9MRU5dOwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgIGJQcml2YWN5SW52b2tlZDsKKyAgICBib29sIGJTaGFyZUtleUFsZ29yaXRobTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUNoYWxsZW5nZVtXTEFOX0NIQUxMRU5HRV9MRU5dOworICAgIGJvb2wgYlByaXZhY3lJbnZva2VkOwogCiAgICAgLy8gUmVjZWl2ZWQgYmVhY29uIHN0YXRlIHZhcnMKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiSW5USU07Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYk11bHRpY2FzdFRJTTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBieURUSU1Db3VudDsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBieURUSU1QZXJpb2Q7CisgICAgYm9vbCBiSW5USU07CisgICAgYm9vbCBiTXVsdGljYXN0VElNOworICAgIHVuc2lnbmVkIGNoYXIgYnlEVElNQ291bnQ7CisgICAgdW5zaWduZWQgY2hhciBieURUSU1QZXJpb2Q7CiAKICAgICAvLyBQb3dlciBzYXZpbmcgc3RhdGUgdmFycwogICAgIFdNQUNfUE9XRVJfTU9ERSAgICAgICAgIGVQU01vZGU7Ci0gICAgV09SRCAgICAgICAgICAgICAgICAgICAgd0xpc3RlbkludGVydmFsOwotICAgIFdPUkQgICAgICAgICAgICAgICAgICAgIHdDb3VudFRvV2FrZVVwOwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgIGJJblRJTVdha2U7Ci0gICAgUEJZVEUgICAgICAgICAgICAgICAgICAgcGJ5UFNQYWNrZXRQb29sOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGJ5UFNQYWNrZXRQb29sW3NpemVvZihTVHhNZ210UGFja2V0KSArIFdMQU5fTlVMTERBVEFfRlJfTUFYTEVOXTsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiUnhCZWFjb25JblRCVFRXYWtlOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGFieVBTVHhNYXBbTUFYX05PREVfTlVNICsgMV07CisgICAgdW5zaWduZWQgc2hvcnQgd0xpc3RlbkludGVydmFsOworICAgIHVuc2lnbmVkIHNob3J0IHdDb3VudFRvV2FrZVVwOworICAgIGJvb2wgYkluVElNV2FrZTsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlQU1BhY2tldFBvb2w7CisgICAgdW5zaWduZWQgY2hhciBieVBTUGFja2V0UG9vbFtzaXplb2YoU1R4TWdtdFBhY2tldCkgKyBXTEFOX05VTExEQVRBX0ZSX01BWExFTl07CisgICAgYm9vbCBiUnhCZWFjb25JblRCVFRXYWtlOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5UFNUeE1hcFtNQVhfTk9ERV9OVU0gKyAxXTsKIAogICAgIC8vIG1hbmFnZW1lbnQgY29tbWFuZCByZWxhdGVkCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdUNtZEJ1c3k7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdUNtZEhvc3RBUEJ1c3k7CisgICAgdW5zaWduZWQgaW50CXVDbWRCdXN5OworICAgIHVuc2lnbmVkIGludAl1Q21kSG9zdEFQQnVzeTsKIAogICAgIC8vIG1hbmFnZW1lbnQgcGFja2V0IHBvb2wKLSAgICBQQllURSAgICAgICAgICAgICAgICAgICBwYnlNZ210UGFja2V0UG9vbDsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBieU1nbXRQYWNrZXRQb29sW3NpemVvZihTVHhNZ210UGFja2V0KSArIFdMQU5fQTNGUl9NQVhMRU5dOworICAgIHVuc2lnbmVkIGNoYXIgKnBieU1nbXRQYWNrZXRQb29sOworICAgIHVuc2lnbmVkIGNoYXIgYnlNZ210UGFja2V0UG9vbFtzaXplb2YoU1R4TWdtdFBhY2tldCkgKyBXTEFOX0EzRlJfTUFYTEVOXTsKIAogCiAgICAgLy8gT25lIHNlY29uZCBjYWxsYmFjayB0aW1lcgpAQCAtMzY2LDcgKzM2Niw3IEBACiAKICAgICAvLyBXUEEyIFBNS0lEIENhY2hlCiAgICAgU1BNS0lEQ2FjaGUgICAgICAgICAgICAgZ3NQTUtJRENhY2hlOwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgIGJSb2FtaW5nOworICAgIGJvb2wgYlJvYW1pbmc7CiAKICAgICAvLyByYXRlIGZhbGwgYmFjayB2YXJzCiAKQEAgLTM3NywxNiArMzc3LDE2IEBACiAKIAogICAgIC8vIGZvciA4MDIuMTFoCi0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYjExaEVuYWJsZTsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiU3dpdGNoQ2hhbm5lbDsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBieU5ld0NoYW5uZWw7CisgICAgYm9vbCBiMTFoRW5hYmxlOworICAgIGJvb2wgYlN3aXRjaENoYW5uZWw7CisgICAgdW5zaWduZWQgY2hhciBieU5ld0NoYW5uZWw7CiAgICAgUFdMQU5fSUVfTUVBU1VSRV9SRVAgICAgcEN1cnJNZWFzdXJlRUlEUmVwOwotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIHVMZW5ndGhPZlJlcEVJRHM7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYWJ5Q3VycmVudE1TUlJlcVtzaXplb2YoU1R4TWdtdFBhY2tldCkgKyBXTEFOX0EzRlJfTUFYTEVOXTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlDdXJyZW50TVNSUmVwW3NpemVvZihTVHhNZ210UGFja2V0KSArIFdMQU5fQTNGUl9NQVhMRU5dOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGFieUlFQ291bnRyeVtXTEFOX0EzRlJfTUFYTEVOXTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlJQlNTREZTT3duZXJbNl07Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlJQlNTREZTUmVjb3Zlcnk7CisgICAgdW5zaWduZWQgaW50CXVMZW5ndGhPZlJlcEVJRHM7CisgICAgdW5zaWduZWQgY2hhciBhYnlDdXJyZW50TVNSUmVxW3NpemVvZihTVHhNZ210UGFja2V0KSArIFdMQU5fQTNGUl9NQVhMRU5dOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5Q3VycmVudE1TUlJlcFtzaXplb2YoU1R4TWdtdFBhY2tldCkgKyBXTEFOX0EzRlJfTUFYTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUlFQ291bnRyeVtXTEFOX0EzRlJfTUFYTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUlCU1NERlNPd25lcls2XTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5SUJTU0RGU1JlY292ZXJ5OwogCiAgICAgc3RydWN0IHNrX2J1ZmYgIHNrYjsKIApAQCAtNDMyLDggKzQzMiw4IEBACiB2TWdyRGlzYXNzb2NCZWdpblN0YSgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKICAgICBQU01nbXRPYmplY3QgcE1nbXQsCi0gICAgUEJZVEUgIGFieURlc3RBZGRyZXNzLAotICAgIFdPUkQgICAgd1JlYXNvbiwKKyAgICB1bnNpZ25lZCBjaGFyICphYnlEZXN0QWRkcmVzcywKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmVhc29uLAogICAgIFBDTURfU1RBVFVTIHBTdGF0dXMKICAgICApOwogCkBAIC00NzUsMjIgKzQ3NSwyMiBAQAogdk1nckRlQXV0aGVuQmVnaW5TdGEoCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQsCiAgICAgUFNNZ210T2JqZWN0ICBwTWdtdCwKLSAgICBQQllURSAgIGFieURlc3RBZGRyZXNzLAotICAgIFdPUkQgICAgd1JlYXNvbiwKKyAgICB1bnNpZ25lZCBjaGFyICphYnlEZXN0QWRkcmVzcywKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmVhc29uLAogICAgIFBDTURfU1RBVFVTIHBTdGF0dXMKICAgICApOwogCi1CT09MCitib29sCiBiTWdyUHJlcGFyZUJlYWNvblRvU2VuZCgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKICAgICBQU01nbXRPYmplY3QgcE1nbXQKICAgICApOwogCiAKLUJPT0wKK2Jvb2wKIGJBZGRfUE1LSURfQ2FuZGlkYXRlICgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKLSAgICBQQllURSAgICAgICAgICBwYnlCU1NJRCwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCU1NJRCwKICAgICBQU1JTTkNhcE9iamVjdCBwc1JTTkNhcE9iagogICAgICk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3BhLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dwYS5jCmluZGV4IGRhNWM4MTQuLjYxYWM0NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3BhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cGEuYwpAQCAtNDUsMTIgKzQ1LDEyIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIFZhcmlhYmxlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIGludCAgICAgICAgICBtc2dsZXZlbCAgICAgICAgICAgICAgICA9TVNHX0xFVkVMX0lORk87CiAKLWNvbnN0IEJZVEUgYWJ5T1VJMDBbNF0gPSB7IDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDAgfTsKLWNvbnN0IEJZVEUgYWJ5T1VJMDFbNF0gPSB7IDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDEgfTsKLWNvbnN0IEJZVEUgYWJ5T1VJMDJbNF0gPSB7IDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDIgfTsKLWNvbnN0IEJZVEUgYWJ5T1VJMDNbNF0gPSB7IDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDMgfTsKLWNvbnN0IEJZVEUgYWJ5T1VJMDRbNF0gPSB7IDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDQgfTsKLWNvbnN0IEJZVEUgYWJ5T1VJMDVbNF0gPSB7IDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDUgfTsKK2NvbnN0IHVuc2lnbmVkIGNoYXIgYWJ5T1VJMDBbNF0gPSB7IDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDAgfTsKK2NvbnN0IHVuc2lnbmVkIGNoYXIgYWJ5T1VJMDFbNF0gPSB7IDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDEgfTsKK2NvbnN0IHVuc2lnbmVkIGNoYXIgYWJ5T1VJMDJbNF0gPSB7IDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDIgfTsKK2NvbnN0IHVuc2lnbmVkIGNoYXIgYWJ5T1VJMDNbNF0gPSB7IDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDMgfTsKK2NvbnN0IHVuc2lnbmVkIGNoYXIgYWJ5T1VJMDRbNF0gPSB7IDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDQgfTsKK2NvbnN0IHVuc2lnbmVkIGNoYXIgYWJ5T1VJMDVbNF0gPSB7IDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDUgfTsKIAogCiAvKisKQEAgLTgzLDkgKzgzLDkgQEAKICAgICBwQlNTTGlzdC0+d0F1dGhDb3VudCA9IDA7CiAgICAgcEJTU0xpc3QtPmJ5RGVmYXVsdEtfYXNfUEsgPSAwOwogICAgIHBCU1NMaXN0LT5ieVJlcGxheUlkeCA9IDA7Ci0gICAgcEJTU0xpc3QtPnNSU05DYXBPYmouYlJTTkNhcEV4aXN0ID0gRkFMU0U7CisgICAgcEJTU0xpc3QtPnNSU05DYXBPYmouYlJTTkNhcEV4aXN0ID0gZmFsc2U7CiAgICAgcEJTU0xpc3QtPnNSU05DYXBPYmoud1JTTkNhcCA9IDA7Ci0gICAgcEJTU0xpc3QtPmJXUEFWYWxpZCA9IEZBTFNFOworICAgIHBCU1NMaXN0LT5iV1BBVmFsaWQgPSBmYWxzZTsKIH0KIAogCkBAIC0xMTIsNyArMTEyLDcgQEAKIHsKICAgICBQV0xBTl9JRV9SU05fQVVUSCAgcElFX1JTTl9BdXRoID0gTlVMTDsKICAgICBpbnQgICAgICAgICAgICAgICAgaSwgaiwgbSwgbiA9IDA7Ci0gICAgUEJZVEUgICAgICAgICAgICAgIHBieUNhcHM7CisgICAgdW5zaWduZWQgY2hhciAqcGJ5Q2FwczsKIAogICAgIFdQQV9DbGVhclJTTihwQlNTTGlzdCk7CiAKQEAgLTE0OCw3ICsxNDgsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICBqID0gMDsKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8id1BLQ291bnQ6ICVkLCBzaXplb2YocEJTU0xpc3QtPmFieVBLVHlwZSk6ICV6dVxuIiwgcFJTTi0+d1BLQ291bnQsIHNpemVvZihwQlNTTGlzdC0+YWJ5UEtUeXBlKSk7Ci0gICAgICAgICAgICBmb3IoaSA9IDA7IChpIDwgcFJTTi0+d1BLQ291bnQpICYmIChqIDwgc2l6ZW9mKHBCU1NMaXN0LT5hYnlQS1R5cGUpL3NpemVvZihCWVRFKSk7IGkrKykgeworICAgICAgICAgICAgZm9yKGkgPSAwOyAoaSA8IHBSU04tPndQS0NvdW50KSAmJiAoaiA8IHNpemVvZihwQlNTTGlzdC0+YWJ5UEtUeXBlKS9zaXplb2YodW5zaWduZWQgY2hhcikpOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZihwUlNOLT5sZW4gPj0gMTIraSo0KzQpIHsgLy9vdWkxKDQpK3ZlcigyKStHS1MoNCkrUEtTQ250KDIpK1BLUyg0KmkpCiAgICAgICAgICAgICAgICAgICAgIGlmICggIW1lbWNtcChwUlNOLT5QS1NMaXN0W2ldLmFieU9VSSwgYWJ5T1VJMDAsIDQpKQogICAgICAgICAgICAgICAgICAgICAgICAgcEJTU0xpc3QtPmFieVBLVHlwZVtqKytdID0gV1BBX05PTkU7CkBAIC0xNjYsNyArMTY2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgLy9EQkdfUFJOX0dSUDE0KCgiYWJ5UEtUeXBlWyVkXTogJVhcbiIsIGotMSwgcEJTU0xpc3QtPmFieVBLVHlwZVtqLTFdKSk7CiAgICAgICAgICAgICB9IC8vZm9yCi0gICAgICAgICAgICBwQlNTTGlzdC0+d1BLQ291bnQgPSAoV09SRClqOworICAgICAgICAgICAgcEJTU0xpc3QtPndQS0NvdW50ID0gKHVuc2lnbmVkIHNob3J0KWo7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIndQS0NvdW50OiAlZFxuIiwgcEJTU0xpc3QtPndQS0NvdW50KTsKICAgICAgICAgfQogCkBAIC0xODAsNyArMTgwLDcgQEAKICAgICAgICAgICAgIGogPSAwOwogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJ3QXV0aENvdW50OiAlZCwgc2l6ZW9mKHBCU1NMaXN0LT5hYnlBdXRoVHlwZSk6ICV6dVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgcElFX1JTTl9BdXRoLT53QXV0aENvdW50LCBzaXplb2YocEJTU0xpc3QtPmFieUF1dGhUeXBlKSk7Ci0gICAgICAgICAgICBmb3IoaSA9IDA7IChpIDwgcElFX1JTTl9BdXRoLT53QXV0aENvdW50KSAmJiAoaiA8IHNpemVvZihwQlNTTGlzdC0+YWJ5QXV0aFR5cGUpL3NpemVvZihCWVRFKSk7IGkrKykgeworICAgICAgICAgICAgZm9yKGkgPSAwOyAoaSA8IHBJRV9SU05fQXV0aC0+d0F1dGhDb3VudCkgJiYgKGogPCBzaXplb2YocEJTU0xpc3QtPmFieUF1dGhUeXBlKS9zaXplb2YodW5zaWduZWQgY2hhcikpOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZihwUlNOLT5sZW4gPj0gMTQrNCsobStpKSo0KSB7IC8vb3VpMSg0KSt2ZXIoMikrR0tTKDQpK1BLU0NudCgyKStQS1MoNCptKStBS0MoMikrQUtTKDQqaSkKICAgICAgICAgICAgICAgICAgICAgaWYgKCAhbWVtY21wKHBJRV9SU05fQXV0aC0+QXV0aEtTTGlzdFtpXS5hYnlPVUksIGFieU9VSTAxLCA0KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBCU1NMaXN0LT5hYnlBdXRoVHlwZVtqKytdID0gV1BBX0FVVEhfSUVFRTgwMl8xWDsKQEAgLTE5NSw3ICsxOTUsNyBAQAogICAgICAgICAgICAgICAgIC8vREJHX1BSTl9HUlAxNCgoImFieUF1dGhUeXBlWyVkXTogJVhcbiIsIGotMSwgcEJTU0xpc3QtPmFieUF1dGhUeXBlW2otMV0pKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmKGogPiAwKQotICAgICAgICAgICAgICAgIHBCU1NMaXN0LT53QXV0aENvdW50ID0gKFdPUkQpajsKKyAgICAgICAgICAgICAgICBwQlNTTGlzdC0+d0F1dGhDb3VudCA9ICh1bnNpZ25lZCBzaG9ydClqOwogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJ3QXV0aENvdW50OiAlZFxuIiwgcEJTU0xpc3QtPndBdXRoQ291bnQpOwogICAgICAgICB9CiAKQEAgLTIwNywxNyArMjA3LDE3IEBACiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIjE0KzQrKG0rbikqNDogJWRcbiIsIDE0KzQrKG0rbikqNCk7CiAKICAgICAgICAgICAgIGlmKHBSU04tPmxlbisyID49IDE0KzQrKG0rbikqNCkgeyAvL291aTEoNCkrdmVyKDIpK0dLUyg0KStQS1NDbnQoMikrUEtTKDQqbSkrQUtDKDIpK0FLUyg0Km4pK0NhcCgyKQotICAgICAgICAgICAgICAgIHBieUNhcHMgPSAoUEJZVEUpcElFX1JTTl9BdXRoLT5BdXRoS1NMaXN0W25dLmFieU9VSTsKKyAgICAgICAgICAgICAgICBwYnlDYXBzID0gKHVuc2lnbmVkIGNoYXIgKilwSUVfUlNOX0F1dGgtPkF1dGhLU0xpc3Rbbl0uYWJ5T1VJOwogICAgICAgICAgICAgICAgIHBCU1NMaXN0LT5ieURlZmF1bHRLX2FzX1BLID0gKCpwYnlDYXBzKSAmIFdQQV9HUk9VUEZMQUc7CiAgICAgICAgICAgICAgICAgcEJTU0xpc3QtPmJ5UmVwbGF5SWR4ID0gMiA8PCAoKCpwYnlDYXBzID4+IFdQQV9SRVBMQVlCSVRTU0hJRlQpICYgV1BBX1JFUExBWUJJVFMpOwotICAgICAgICAgICAgICAgIHBCU1NMaXN0LT5zUlNOQ2FwT2JqLmJSU05DYXBFeGlzdCA9IFRSVUU7Ci0gICAgICAgICAgICAgICAgcEJTU0xpc3QtPnNSU05DYXBPYmoud1JTTkNhcCA9ICooUFdPUkQpcGJ5Q2FwczsKKyAgICAgICAgICAgICAgICBwQlNTTGlzdC0+c1JTTkNhcE9iai5iUlNOQ2FwRXhpc3QgPSB0cnVlOworICAgICAgICAgICAgICAgIHBCU1NMaXN0LT5zUlNOQ2FwT2JqLndSU05DYXAgPSAqKHVuc2lnbmVkIHNob3J0ICopcGJ5Q2FwczsKICAgICAgICAgICAgICAgICAvL0RCR19QUk5fR1JQMTQoKCJwYnlDYXBzOiAlWFxuIiwgKnBieUNhcHMpKTsKICAgICAgICAgICAgICAgICAvL0RCR19QUk5fR1JQMTQoKCJieURlZmF1bHRLX2FzX1BLOiAlWFxuIiwgcEJTU0xpc3QtPmJ5RGVmYXVsdEtfYXNfUEspKTsKICAgICAgICAgICAgICAgICAvL0RCR19QUk5fR1JQMTQoKCJieVJlcGxheUlkeDogJVhcbiIsIHBCU1NMaXN0LT5ieVJlcGxheUlkeCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHBCU1NMaXN0LT5iV1BBVmFsaWQgPSBUUlVFOworICAgICAgICBwQlNTTGlzdC0+YldQQVZhbGlkID0gdHJ1ZTsKICAgICB9CiB9CiAKQEAgLTIzNywyNCArMjM3LDI0IEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUuCiAgKgogLSovCi1CT09MCitib29sCiBXUEFfU2VhcmNoUlNOICgKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5Q21kLAotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlFbmNyeXB0LAorICAgIHVuc2lnbmVkIGNoYXIgYnlDbWQsCisgICAgdW5zaWduZWQgY2hhciBieUVuY3J5cHQsCiAgICAgUEtub3duQlNTICAgICAgICBwQlNTTGlzdAogICAgICkKIHsKICAgICBpbnQgaWk7Ci0gICAgQllURSBieVBLVHlwZSA9IFdQQV9OT05FOworICAgIHVuc2lnbmVkIGNoYXIgYnlQS1R5cGUgPSBXUEFfTk9ORTsKIAotICAgIGlmIChwQlNTTGlzdC0+YldQQVZhbGlkID09IEZBTFNFKQotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgaWYgKHBCU1NMaXN0LT5iV1BBVmFsaWQgPT0gZmFsc2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHN3aXRjaChieUNtZCkgewogICAgIGNhc2UgMDoKIAogICAgICAgICBpZiAoYnlFbmNyeXB0ICE9IHBCU1NMaXN0LT5ieUdLVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBpZiAocEJTU0xpc3QtPndQS0NvdW50ID4gMCkgewogICAgICAgICAgICAgZm9yIChpaSA9IDA7IGlpIDwgcEJTU0xpc3QtPndQS0NvdW50OyBpaSArKykgewpAQCAtMjY4LDkgKzI2OCw5IEBACiAgICAgICAgICAgICAgICAgICAgICBieVBLVHlwZSA9IFdQQV9XRVAxMDQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoYnlFbmNyeXB0ICE9IGJ5UEtUeXBlKQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIHJldHVybiB0cnVlOwogLy8gICAgICAgIGlmIChwQlNTTGlzdC0+d0F1dGhDb3VudCA+IDApCiAvLyAgICAgICAgICAgIGZvciAoaWk9MDsgaWkgPCBwQlNTTGlzdC0+d0F1dGhDb3VudDsgaWkgKyspCiAvLyAgICAgICAgICAgICAgICBpZiAoYnlBdXRoID09IHBCU1NMaXN0LT5hYnlBdXRoVHlwZVtpaV0pCkBAIC0yODAsNyArMjgwLDcgQEAKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgcmV0dXJuIEZBTFNFOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogLyorCkBAIC0yOTcsMjAgKzI5NywyMCBAQAogICogUmV0dXJuIFZhbHVlOiBub25lLgogICoKIC0qLwotQk9PTAorYm9vbAogV1BBYl9Jc19SU04gKAogICAgIFBXTEFOX0lFX1JTTl9FWFQgcFJTTgogICAgICkKIHsKICAgICBpZiAocFJTTiA9PSBOVUxMKQotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICgocFJTTi0+bGVuID49IDYpICYmIC8vIG91aTEoNCkrdmVyKDIpCiAgICAgICAgIChwUlNOLT5ieUVsZW1lbnRJRCA9PSBXTEFOX0VJRF9SU05fV1BBKSAmJiAgIW1lbWNtcChwUlNOLT5hYnlPVUksIGFieU9VSTAxLCA0KSAmJgogICAgICAgICAocFJTTi0+d1ZlcnNpb24gPT0gMSkpIHsKLSAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBlbHNlCi0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dwYS5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cGEuaAppbmRleCA4MGQ5OTBiLi45MjFmZDdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dwYS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3BhLmgKQEAgLTY5LDE0ICs2OSwxNCBAQAogICAgIFBXTEFOX0lFX1JTTl9FWFQgcFJTTgogICAgICk7CiAKLUJPT0wKK2Jvb2wKIFdQQV9TZWFyY2hSU04oCi0gICAgQllURSAgICAgICAgICAgICAgICBieUNtZCwKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5RW5jcnlwdCwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q21kLAorICAgIHVuc2lnbmVkIGNoYXIgYnlFbmNyeXB0LAogICAgIFBLbm93bkJTUyAgICAgICAgcEJTU0xpc3QKICAgICApOwogCi1CT09MCitib29sCiBXUEFiX0lzX1JTTigKICAgICBQV0xBTl9JRV9SU05fRVhUIHBSU04KICAgICApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cGEyLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dwYTIuYwppbmRleCA3YTQyYTBhLi44MDUxNjRiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cGEyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cGEyLmMKQEAgLTQyLDE0ICs0MiwxNCBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIFZhcmlhYmxlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1jb25zdCBCWVRFIGFieU9VSUdLWzRdICAgICAgPSB7IDB4MDAsIDB4MEYsIDB4QUMsIDB4MDAgfTsKLWNvbnN0IEJZVEUgYWJ5T1VJV0VQNDBbNF0gICA9IHsgMHgwMCwgMHgwRiwgMHhBQywgMHgwMSB9OwotY29uc3QgQllURSBhYnlPVUlXRVAxMDRbNF0gID0geyAweDAwLCAweDBGLCAweEFDLCAweDA1IH07Ci1jb25zdCBCWVRFIGFieU9VSVRLSVBbNF0gICAgPSB7IDB4MDAsIDB4MEYsIDB4QUMsIDB4MDIgfTsKLWNvbnN0IEJZVEUgYWJ5T1VJQ0NNUFs0XSAgICA9IHsgMHgwMCwgMHgwRiwgMHhBQywgMHgwNCB9OworY29uc3QgdW5zaWduZWQgY2hhciBhYnlPVUlHS1s0XSAgICAgID0geyAweDAwLCAweDBGLCAweEFDLCAweDAwIH07Citjb25zdCB1bnNpZ25lZCBjaGFyIGFieU9VSVdFUDQwWzRdICAgPSB7IDB4MDAsIDB4MEYsIDB4QUMsIDB4MDEgfTsKK2NvbnN0IHVuc2lnbmVkIGNoYXIgYWJ5T1VJV0VQMTA0WzRdICA9IHsgMHgwMCwgMHgwRiwgMHhBQywgMHgwNSB9OworY29uc3QgdW5zaWduZWQgY2hhciBhYnlPVUlUS0lQWzRdICAgID0geyAweDAwLCAweDBGLCAweEFDLCAweDAyIH07Citjb25zdCB1bnNpZ25lZCBjaGFyIGFieU9VSUNDTVBbNF0gICAgPSB7IDB4MDAsIDB4MEYsIDB4QUMsIDB4MDQgfTsKIAotY29uc3QgQllURSBhYnlPVUk4MDIxWFs0XSAgID0geyAweDAwLCAweDBGLCAweEFDLCAweDAxIH07Ci1jb25zdCBCWVRFIGFieU9VSVBTS1s0XSAgICAgPSB7IDB4MDAsIDB4MEYsIDB4QUMsIDB4MDIgfTsKK2NvbnN0IHVuc2lnbmVkIGNoYXIgYWJ5T1VJODAyMVhbNF0gICA9IHsgMHgwMCwgMHgwRiwgMHhBQywgMHgwMSB9OworY29uc3QgdW5zaWduZWQgY2hhciBhYnlPVUlQU0tbNF0gICAgID0geyAweDAwLCAweDBGLCAweEFDLCAweDAyIH07CiAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTc5LDcgKzc5LDcgQEAKIHsKICAgICBpbnQgaWk7CiAKLSAgICBwQlNTTm9kZS0+YldQQTJWYWxpZCA9IEZBTFNFOworICAgIHBCU1NOb2RlLT5iV1BBMlZhbGlkID0gZmFsc2U7CiAKICAgICBwQlNTTm9kZS0+YnlDU1NHSyA9IFdMQU5fMTFpX0NTU19DQ01QOwogICAgIGZvciAoaWk9MDsgaWkgPCA0OyBpaSArKykKQEAgLTg4LDcgKzg4LDcgQEAKICAgICBmb3IgKGlpPTA7IGlpIDwgNDsgaWkgKyspCiAgICAgICAgIHBCU1NOb2RlLT5hYnlBS01TU0F1dGhUeXBlW2lpXSA9IFdMQU5fMTFpX0FLTVNTXzgwMl8xWDsKICAgICBwQlNTTm9kZS0+d0FLTVNTQXV0aENvdW50ID0gMTsKLSAgICBwQlNTTm9kZS0+c1JTTkNhcE9iai5iUlNOQ2FwRXhpc3QgPSBGQUxTRTsKKyAgICBwQlNTTm9kZS0+c1JTTkNhcE9iai5iUlNOQ2FwRXhpc3QgPSBmYWxzZTsKICAgICBwQlNTTm9kZS0+c1JTTkNhcE9iai53UlNOQ2FwID0gMDsKIH0KIApAQCAtMTE0LDkgKzExNCw5IEBACiAgICAgKQogewogICAgIGludCAgICAgICAgICAgICAgICAgaSwgajsKLSAgICBXT1JEICAgICAgICAgICAgICAgIG0gPSAwLCBuID0gMDsKLSAgICBQQllURSAgICAgICAgICAgICAgIHBieU9VSTsKLSAgICBCT09MICAgICAgICAgICAgICAgIGJVc2VHSyA9IEZBTFNFOworICAgIHVuc2lnbmVkIHNob3J0IG0gPSAwLCBuID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlPVUk7CisgICAgYm9vbCBiVXNlR0sgPSBmYWxzZTsKIAogICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iV1BBMl9QYXJzZVJTTjogWyVkXVxuIiwgcFJTTi0+bGVuKTsKIApAQCAtMTI0LDcgKzEyNCw3IEBACiAKICAgICBpZiAocFJTTi0+bGVuID09IDIpIHsgLy8gdmVyKDIpCiAgICAgICAgIGlmICgocFJTTi0+YnlFbGVtZW50SUQgPT0gV0xBTl9FSURfUlNOKSAmJiAocFJTTi0+d1ZlcnNpb24gPT0gMSkpIHsKLSAgICAgICAgICAgIHBCU1NOb2RlLT5iV1BBMlZhbGlkID0gVFJVRTsKKyAgICAgICAgICAgIHBCU1NOb2RlLT5iV1BBMlZhbGlkID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTU5LDIxICsxNTksMjEgQEAKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyI4MDIuMTFpIENTUzogJVhcbiIsIHBCU1NOb2RlLT5ieUNTU0dLKTsKIAogICAgICAgICBpZiAocFJTTi0+bGVuID09IDYpIHsKLSAgICAgICAgICAgIHBCU1NOb2RlLT5iV1BBMlZhbGlkID0gVFJVRTsKKyAgICAgICAgICAgIHBCU1NOb2RlLT5iV1BBMlZhbGlkID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChwUlNOLT5sZW4gPj0gOCkgeyAvLyB2ZXIoMikgKyBHSyg0KSArIFBLIGNvdW50KDIpCi0gICAgICAgICAgICBwQlNTTm9kZS0+d0NTU1BLQ291bnQgPSAqKChQV09SRCkgJihwUlNOLT5hYnlSU05bNF0pKTsKKyAgICAgICAgICAgIHBCU1NOb2RlLT53Q1NTUEtDb3VudCA9ICooKHVuc2lnbmVkIHNob3J0ICopICYocFJTTi0+YWJ5UlNOWzRdKSk7CiAgICAgICAgICAgICBqID0gMDsKICAgICAgICAgICAgIHBieU9VSSA9ICYocFJTTi0+YWJ5UlNOWzZdKTsKIAotICAgICAgICAgICAgZm9yIChpID0gMDsgKGkgPCBwQlNTTm9kZS0+d0NTU1BLQ291bnQpICYmIChqIDwgc2l6ZW9mKHBCU1NOb2RlLT5hYnlDU1NQSykvc2l6ZW9mKEJZVEUpKTsgaSsrKSB7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyAoaSA8IHBCU1NOb2RlLT53Q1NTUEtDb3VudCkgJiYgKGogPCBzaXplb2YocEJTU05vZGUtPmFieUNTU1BLKS9zaXplb2YodW5zaWduZWQgY2hhcikpOyBpKyspIHsKIAogICAgICAgICAgICAgICAgIGlmIChwUlNOLT5sZW4gPj0gOCtpKjQrNCkgeyAvLyB2ZXIoMikrR0soNCkrUEtDbnQoMikrUEtTKDQqaSkKICAgICAgICAgICAgICAgICAgICAgaWYgKCAhbWVtY21wKHBieU9VSSwgYWJ5T1VJR0ssIDQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwQlNTTm9kZS0+YWJ5Q1NTUEtbaisrXSA9IFdMQU5fMTFpX0NTU19VU0VfR1JPVVA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiVXNlR0sgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgICAgYlVzZUdLID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggIW1lbWNtcChwYnlPVUksIGFieU9VSVdFUDQwLCA0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW52aWFsaWQgQ1NTLCBjb250aW51ZSB0byBwYXJzaW5nCiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICFtZW1jbXAocGJ5T1VJLCBhYnlPVUlUS0lQLCA0KSkgewpAQCAtMTk1LDcgKzE5NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfSAvL2ZvcgogCi0gICAgICAgICAgICBpZiAoYlVzZUdLID09IFRSVUUpIHsKKyAgICAgICAgICAgIGlmIChiVXNlR0sgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgIGlmIChqICE9IDEpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gaW52YWxpZCBDU1MsIFRoaXMgc2hvdWxkIGJlIG9ubHkgUEsgQ1NTLgogICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yMDksMTcgKzIwOSwxNyBAQAogICAgICAgICAgICAgICAgIC8vIGludmFsaWQgQ1NTLCBObyB2YWxpZCBQSy4KICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwQlNTTm9kZS0+d0NTU1BLQ291bnQgPSAoV09SRClqOworICAgICAgICAgICAgcEJTU05vZGUtPndDU1NQS0NvdW50ID0gKHVuc2lnbmVkIHNob3J0KWo7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIndDU1NQS0NvdW50OiAlZFxuIiwgcEJTU05vZGUtPndDU1NQS0NvdW50KTsKICAgICAgICAgfQogCi0gICAgICAgIG0gPSAqKChQV09SRCkgJihwUlNOLT5hYnlSU05bNF0pKTsKKyAgICAgICAgbSA9ICooKHVuc2lnbmVkIHNob3J0ICopICYocFJTTi0+YWJ5UlNOWzRdKSk7CiAKICAgICAgICAgaWYgKHBSU04tPmxlbiA+PSAxMCttKjQpIHsgLy8gdmVyKDIpICsgR0soNCkgKyBQSyBjb3VudCgyKSArIFBLUyg0Km0pICsgQUtNU1MgY291bnQoMikKLSAgICAgICAgICAgIHBCU1NOb2RlLT53QUtNU1NBdXRoQ291bnQgPSAqKChQV09SRCkgJihwUlNOLT5hYnlSU05bNis0Km1dKSk7OworICAgICAgICAgICAgcEJTU05vZGUtPndBS01TU0F1dGhDb3VudCA9ICooKHVuc2lnbmVkIHNob3J0ICopICYocFJTTi0+YWJ5UlNOWzYrNCptXSkpOzsKICAgICAgICAgICAgIGogPSAwOwogICAgICAgICAgICAgcGJ5T1VJID0gJihwUlNOLT5hYnlSU05bOCs0Km1dKTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IChpIDwgcEJTU05vZGUtPndBS01TU0F1dGhDb3VudCkgJiYgKGogPCBzaXplb2YocEJTU05vZGUtPmFieUFLTVNTQXV0aFR5cGUpL3NpemVvZihCWVRFKSk7IGkrKykgeworICAgICAgICAgICAgZm9yIChpID0gMDsgKGkgPCBwQlNTTm9kZS0+d0FLTVNTQXV0aENvdW50KSAmJiAoaiA8IHNpemVvZihwQlNTTm9kZS0+YWJ5QUtNU1NBdXRoVHlwZSkvc2l6ZW9mKHVuc2lnbmVkIGNoYXIpKTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKHBSU04tPmxlbiA+PSAxMCsobStpKSo0KzQpIHsgLy8gdmVyKDIpK0dLKDQpK1BLQ250KDIpK1BLUyg0Km0pK0FLTVNTKDIpK0FLUyg0KmkpCiAgICAgICAgICAgICAgICAgICAgIGlmICggIW1lbWNtcChwYnlPVUksIGFieU9VSTgwMjFYLCA0KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBCU1NOb2RlLT5hYnlBS01TU0F1dGhUeXBlW2orK10gPSBXTEFOXzExaV9BS01TU184MDJfMVg7CkBAIC0yMzIsMTcgKzIzMiwxNyBAQAogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBCU1NOb2RlLT53QUtNU1NBdXRoQ291bnQgPSAoV09SRClqOworICAgICAgICAgICAgcEJTU05vZGUtPndBS01TU0F1dGhDb3VudCA9ICh1bnNpZ25lZCBzaG9ydClqOwogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJ3QUtNU1NBdXRoQ291bnQ6ICVkXG4iLCBwQlNTTm9kZS0+d0FLTVNTQXV0aENvdW50KTsKIAotICAgICAgICAgICAgbiA9ICooKFBXT1JEKSAmKHBSU04tPmFieVJTTls2KzQqbV0pKTs7CisgICAgICAgICAgICBuID0gKigodW5zaWduZWQgc2hvcnQgKikgJihwUlNOLT5hYnlSU05bNis0Km1dKSk7OwogICAgICAgICAgICAgaWYgKHBSU04tPmxlbiA+PSAxMis0Km0rNCpuKSB7IC8vIHZlcigyKStHSyg0KStQS0NudCgyKStQS1MoNCptKStBS01TU0NudCgyKStBS01TUyg0Km4pK0NhcCgyKQotICAgICAgICAgICAgICAgIHBCU1NOb2RlLT5zUlNOQ2FwT2JqLmJSU05DYXBFeGlzdCA9IFRSVUU7Ci0gICAgICAgICAgICAgICAgcEJTU05vZGUtPnNSU05DYXBPYmoud1JTTkNhcCA9ICooKFBXT1JEKSAmKHBSU04tPmFieVJTTls4KzQqbSs0Km5dKSk7CisgICAgICAgICAgICAgICAgcEJTU05vZGUtPnNSU05DYXBPYmouYlJTTkNhcEV4aXN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBwQlNTTm9kZS0+c1JTTkNhcE9iai53UlNOQ2FwID0gKigodW5zaWduZWQgc2hvcnQgKikgJihwUlNOLT5hYnlSU05bOCs0Km0rNCpuXSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIC8vaWdub3JlIFBNS0lEIGxpc3RzIGJjcyBvbmx5IChSZSlBc3NvY3JlcXVlc3QgaGFzIHRoaXMgZmllbGQKLSAgICAgICAgcEJTU05vZGUtPmJXUEEyVmFsaWQgPSBUUlVFOworICAgICAgICBwQlNTTm9kZS0+YldQQTJWYWxpZCA9IHRydWU7CiAgICAgfQogfQogCkBAIC0yNjEsMTYgKzI2MSwxNiBAQAogICogUmV0dXJuIFZhbHVlOiBsZW5ndGggb2YgSUVzLgogICoKIC0qLwotVUlOVAordW5zaWduZWQgaW50CiBXUEEydVNldElFcygKICAgICB2b2lkICpwTWdtdEhhbmRsZSwKICAgICBQV0xBTl9JRV9SU04gcFJTTklFcwogICAgICkKIHsKICAgICBQU01nbXRPYmplY3QgICAgcE1nbXQgPSAoUFNNZ210T2JqZWN0KSBwTWdtdEhhbmRsZTsKLSAgICBQQllURSAgICAgICAgICAgcGJ5QnVmZmVyID0gTlVMTDsKLSAgICBVSU5UICAgICAgICAgICAgaWkgPSAwOwotICAgIFBXT1JEICAgICAgICAgICBwd1BNS0lEID0gTlVMTDsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCdWZmZXIgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCBpaSA9IDA7CisgICAgdW5zaWduZWQgc2hvcnQgKnB3UE1LSUQgPSBOVUxMOwogCiAgICAgaWYgKHBSU05JRXMgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4oMCk7CkBAIC0yNzksNyArMjc5LDcgQEAKICAgICAgICAgIChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQTJQU0spKSAmJgogICAgICAgICAocE1nbXQtPnBDdXJyQlNTICE9IE5VTEwpKSB7CiAgICAgICAgIC8qIFdQQTIgSUUgKi8KLSAgICAgICAgcGJ5QnVmZmVyID0gKFBCWVRFKSBwUlNOSUVzOworICAgICAgICBwYnlCdWZmZXIgPSAodW5zaWduZWQgY2hhciAqKSBwUlNOSUVzOwogICAgICAgICBwUlNOSUVzLT5ieUVsZW1lbnRJRCA9IFdMQU5fRUlEX1JTTjsKICAgICAgICAgcFJTTklFcy0+bGVuID0gNjsgLy9WZXJzaW9uKDIpK0dLKDQpCiAgICAgICAgIHBSU05JRXMtPndWZXJzaW9uID0gMTsKQEAgLTMzMCw3ICszMzAsNyBAQAogICAgICAgICBwUlNOSUVzLT5sZW4gKz02OwogCiAgICAgICAgIC8vIFJTTiBDYXBhYmlsaXRlcwotICAgICAgICBpZiAocE1nbXQtPnBDdXJyQlNTLT5zUlNOQ2FwT2JqLmJSU05DYXBFeGlzdCA9PSBUUlVFKSB7CisgICAgICAgIGlmIChwTWdtdC0+cEN1cnJCU1MtPnNSU05DYXBPYmouYlJTTkNhcEV4aXN0ID09IHRydWUpIHsKICAgICAgICAgICAgIG1lbWNweSgmcFJTTklFcy0+YWJ5UlNOWzE2XSwgJnBNZ210LT5wQ3VyckJTUy0+c1JTTkNhcE9iai53UlNOQ2FwLCAyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHBSU05JRXMtPmFieVJTTlsxNl0gPSAwOwpAQCAtMzM5LDEwICszMzksMTAgQEAKICAgICAgICAgcFJTTklFcy0+bGVuICs9MjsKIAogICAgICAgICBpZiAoKHBNZ210LT5nc1BNS0lEQ2FjaGUuQlNTSURJbmZvQ291bnQgPiAwKSAmJgotICAgICAgICAgICAgKHBNZ210LT5iUm9hbWluZyA9PSBUUlVFKSAmJgorICAgICAgICAgICAgKHBNZ210LT5iUm9hbWluZyA9PSB0cnVlKSAmJgogICAgICAgICAgICAgKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBMikpIHsKICAgICAgICAgICAgIC8vIFJTTiBQTUtJRAotICAgICAgICAgICAgcHdQTUtJRCA9IChQV09SRCkoJnBSU05JRXMtPmFieVJTTlsxOF0pOyAgLy8gUG9pbnQgdG8gUE1LSUQgY291bnQKKyAgICAgICAgICAgIHB3UE1LSUQgPSAodW5zaWduZWQgc2hvcnQgKikoJnBSU05JRXMtPmFieVJTTlsxOF0pOyAgLy8gUG9pbnQgdG8gUE1LSUQgY291bnQKICAgICAgICAgICAgICpwd1BNS0lEID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBQTUtJRCBjb3VudAogICAgICAgICAgICAgcGJ5QnVmZmVyID0gJnBSU05JRXMtPmFieVJTTlsyMF07ICAgICAgICAgICAvLyBQb2ludCB0byBQTUtJRCBsaXN0CiAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCBwTWdtdC0+Z3NQTUtJRENhY2hlLkJTU0lESW5mb0NvdW50OyBpaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dwYTIuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3BhMi5oCmluZGV4IDcyMDBkYjMuLjcxODIwOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3BhMi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3BhMi5oCkBAIC00MCwxMiArNDAsMTIgQEAKICNkZWZpbmUgTUFYX1BNS0lEX0NBQ0hFICAgICAgICAgMTYKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnc1BNS0lESW5mbyB7Ci0gICAgQllURSAgICBhYnlCU1NJRFs2XTsKLSAgICBCWVRFICAgIGFieVBNS0lEWzE2XTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUJTU0lEWzZdOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5UE1LSURbMTZdOwogfSBQTUtJREluZm8sICpQUE1LSURJbmZvOwogCiB0eXBlZGVmIHN0cnVjdCB0YWdTUE1LSURDYWNoZSB7Ci0gICAgVUxPTkcgICAgICAgQlNTSURJbmZvQ291bnQ7CisgICAgdW5zaWduZWQgbG9uZyBCU1NJREluZm9Db3VudDsKICAgICBQTUtJREluZm8gICBCU1NJREluZm9bTUFYX1BNS0lEX0NBQ0hFXTsKIH0gU1BNS0lEQ2FjaGUsICpQU1BNS0lEQ2FjaGU7CiAKQEAgLTY5LDcgKzY5LDcgQEAKICAgICBQV0xBTl9JRV9SU04gICAgIHBSU04KICAgICApOwogCi1VSU5UCit1bnNpZ25lZCBpbnQKIFdQQTJ1U2V0SUVzKAogICAgIHZvaWQgKnBNZ210SGFuZGxlLAogICAgIFBXTEFOX0lFX1JTTiBwUlNOSUVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dwYWN0bC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cGFjdGwuYwppbmRleCAyMmMyZmFiLi4wMTQyMzM4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cGFjdGwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dwYWN0bC5jCkBAIC0xOTksMTYgKzE5OSwxNiBAQAogICoKICAqLwogCi0gaW50IHdwYV9zZXRfa2V5cyhQU0RldmljZSBwRGV2aWNlLCB2b2lkICpjdHgsIEJPT0wgIGZjcGZrZXJuZWwpCisgaW50IHdwYV9zZXRfa2V5cyhQU0RldmljZSBwRGV2aWNlLCB2b2lkICpjdHgsIGJvb2wgZmNwZmtlcm5lbCkKIHsKICAgICBzdHJ1Y3Qgdmlhd2dldF93cGFfcGFyYW0gKnBhcmFtPWN0eDsKICAgICBQU01nbXRPYmplY3QgcE1nbXQgPSBwRGV2aWNlLT5wTWdtdDsKLSAgICBEV09SRCAgIGR3S2V5SW5kZXggPSAwOwotICAgIEJZVEUgICAgYWJ5S2V5W01BWF9LRVlfTEVOXTsKLSAgICBCWVRFICAgIGFieVNlcVtNQVhfS0VZX0xFTl07CisgICAgdW5zaWduZWQgbG9uZyBkd0tleUluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUtleVtNQVhfS0VZX0xFTl07CisgICAgdW5zaWduZWQgY2hhciBhYnlTZXFbTUFYX0tFWV9MRU5dOwogICAgIFFXT1JEICAgS2V5UlNDOwogLy8gICAgTkRJU184MDJfMTFfS0VZX1JTQyBLZXlSU0M7Ci0gICAgQllURSAgICBieUtleURlY01vZGUgPSBLRVlfQ1RMX1dFUDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5S2V5RGVjTW9kZSA9IEtFWV9DVExfV0VQOwogCWludCByZXQgPSAwOwogCWludCB1dSwgaWk7CiAKQEAgLTIxOSw5ICsyMTksOSBAQAogICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInBhcmFtLT51LndwYV9rZXkuYWxnX25hbWUgPSAlZCBcbiIsIHBhcmFtLT51LndwYV9rZXkuYWxnX25hbWUpOwogCWlmIChwYXJhbS0+dS53cGFfa2V5LmFsZ19uYW1lID09IFdQQV9BTEdfTk9ORSkgewogICAgICAgICBwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQ7Ci0gICAgICAgIHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID0gRkFMU0U7CisgICAgICAgIHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID0gZmFsc2U7CiAgICAgICAgIHBEZXZpY2UtPmJ5S2V5SW5kZXggPSAwOwotICAgICAgICBwRGV2aWNlLT5iVHJhbnNtaXRLZXkgPSBGQUxTRTsKKyAgICAgICAgcERldmljZS0+YlRyYW5zbWl0S2V5ID0gZmFsc2U7CiAgICAgICAgIEtleXZSZW1vdmVBbGxXRVBLZXkoJihwRGV2aWNlLT5zS2V5KSwgcERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgICAgIGZvciAodXU9MDsgdXU8TUFYX0tFWV9UQUJMRTsgdXUrKykgewogICAgICAgICAgICAgTUFDdkRpc2FibGVLZXlFbnRyeShwRGV2aWNlLT5Qb3J0T2Zmc2V0LCB1dSk7CkBAIC0yNDMsNyArMjQzLDcgQEAKIHNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogICAgIAl9CiAKLSAgICBkd0tleUluZGV4ID0gKERXT1JEKShwYXJhbS0+dS53cGFfa2V5LmtleV9pbmRleCk7CisgICAgZHdLZXlJbmRleCA9ICh1bnNpZ25lZCBsb25nKShwYXJhbS0+dS53cGFfa2V5LmtleV9pbmRleCk7CiAKIAlpZiAocGFyYW0tPnUud3BhX2tleS5hbGdfbmFtZSA9PSBXUEFfQUxHX1dFUCkgewogICAgICAgICBpZiAoZHdLZXlJbmRleCA+IDMpIHsKQEAgLTI1MSw4ICsyNTEsOCBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKHBhcmFtLT51LndwYV9rZXkuc2V0X3R4KSB7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlLZXlJbmRleCA9IChCWVRFKWR3S2V5SW5kZXg7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YlRyYW5zbWl0S2V5ID0gVFJVRTsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUtleUluZGV4ID0gKHVuc2lnbmVkIGNoYXIpZHdLZXlJbmRleDsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5iVHJhbnNtaXRLZXkgPSB0cnVlOwogCQkgICAgICAgIGR3S2V5SW5kZXggfD0gKDEgPDwgMzEpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgS2V5YlNldERlZmF1bHRLZXkoJihwRGV2aWNlLT5zS2V5KSwKQEAgLTI2Niw3ICsyNjYsNyBAQAogCiAgICAgICAgIH0KICAgICAgICAgcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOwotICAgICAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IFRSVUU7CisgICAgICAgIHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHJldDsKIAl9CiAKQEAgLTM1MSwyNiArMzUxLDI2IEBACiAgICAgfQogCiAgICAvLyBzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLSAgICBpZiAoSVNfQlJPQURDQVNUX0FERFJFU1MoJnBhcmFtLT5hZGRyWzBdKSB8fCAocGFyYW0tPmFkZHIgPT0gTlVMTCkpIHsKLSAgICAgICAgLy8gSWYgSVNfQlJPQURDQVNUX0FERFJFU1MsIHNldCB0aGUga2V5IGFzIGV2ZXJ5IGtleSBlbnRyeSdzIGdyb3VwIGtleS4KKyAgICBpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoJnBhcmFtLT5hZGRyWzBdKSB8fCAocGFyYW0tPmFkZHIgPT0gTlVMTCkpIHsKKyAgICAgICAgLy8gSWYgaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIsIHNldCB0aGUga2V5IGFzIGV2ZXJ5IGtleSBlbnRyeSdzIGdyb3VwIGtleS4KICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiR3JvdXBlIEtleSBBc3NpZ24uXG4iKTsKIAogICAgICAgICBpZiAoKEtleWJTZXRBbGxHcm91cEtleSgmKHBEZXZpY2UtPnNLZXkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR3S2V5SW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0tPnUud3BhX2tleS5rZXlfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQUVdPUkQpICYoS2V5UlNDKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUEJZVEUpYWJ5S2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopYWJ5S2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5S2V5RGVjTW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5Qb3J0T2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5TG9jYWxJRCkgPT0gVFJVRSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUxvY2FsSUQpID09IHRydWUpICYmCiAgICAgICAgICAgICAoS2V5YlNldERlZmF1bHRLZXkoJihwRGV2aWNlLT5zS2V5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkd0tleUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLT51LndwYV9rZXkua2V5X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUFFXT1JEKSAmKEtleVJTQyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBCWVRFKWFieUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKWFieUtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieUtleURlY01vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+UG9ydE9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUxvY2FsSUQpID09IFRSVUUpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5TG9jYWxJRCkgPT0gdHJ1ZSkgKSB7CiAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiR1JPVVAgS2V5IEFzc2lnbi5cbiIpOwogCiAgICAgICAgIH0gZWxzZSB7CkBAIC00MDAsMTUgKzQwMCwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICBkd0tleUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS0+dS53cGFfa2V5LmtleV9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIChQUVdPUkQpICYoS2V5UlNDKSwKLSAgICAgICAgICAgICAgICAgICAgICAgKFBCWVRFKWFieUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilhYnlLZXksCiAgICAgICAgICAgICAgICAgICAgICAgICBieUtleURlY01vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5Qb3J0T2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YnlMb2NhbElEKSA9PSBUUlVFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUxvY2FsSUQpID09IHRydWUpIHsKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlBhaXJ3aXNlIEtleSBTZXRcbiIpOwogCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBLZXkgVGFibGUgRnVsbAotICAgICAgICAgICAgaWYgKElTX0VUSF9BRERSRVNTX0VRVUFMKCZwYXJhbS0+YWRkclswXSwgcERldmljZS0+YWJ5QlNTSUQpKSB7CisgICAgICAgICAgICBpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcigmcGFyYW0tPmFkZHJbMF0sIHBEZXZpY2UtPmFieUJTU0lEKSkgewogICAgICAgICAgICAgICAgIC8vREJHX1BSTl9XTEFOMDMoKCJyZXR1cm4gTkRJU19TVEFUVVNfSU5WQUxJRF9EQVRBIC1LZXkgVGFibGUgRnVsbC4yXG4iKSk7CiAgICAgICAgICAgICAgICAgLy9zcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwpAQCAtNDIyLDEwICs0MjIsMTAgQEAKICAgICAgICAgfQogICAgIH0gLy8gQlNTSUQgbm90IDB4ZmZmZmZmZmZmZmZmCiAgICAgaWYgKChyZXQgPT0gMCkgJiYgKChwYXJhbS0+dS53cGFfa2V5LnNldF90eCkgIT0gMCkpIHsKLSAgICAgICAgcERldmljZS0+YnlLZXlJbmRleCA9IChCWVRFKXBhcmFtLT51LndwYV9rZXkua2V5X2luZGV4OwotICAgICAgICBwRGV2aWNlLT5iVHJhbnNtaXRLZXkgPSBUUlVFOworICAgICAgICBwRGV2aWNlLT5ieUtleUluZGV4ID0gKHVuc2lnbmVkIGNoYXIpcGFyYW0tPnUud3BhX2tleS5rZXlfaW5kZXg7CisgICAgICAgIHBEZXZpY2UtPmJUcmFuc21pdEtleSA9IHRydWU7CiAgICAgfQotICAgIHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID0gVFJVRTsKKyAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IHRydWU7CiAgICAgLy9zcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogCiAvKgpAQCAtNDY1LDcgKzQ2NSw3IEBACiAJaW50IHJldCA9IDA7CiAKICAgICBwTWdtdC0+ZUF1dGhlbk1vZGUgPSBXTUFDX0FVVEhfT1BFTjsKLSAgICBwTWdtdC0+YlNoYXJlS2V5QWxnb3JpdGhtID0gRkFMU0U7CisgICAgcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9IGZhbHNlOwogCiAgICAgcmV0dXJuIHJldDsKIH0KQEAgLTYxMywxMyArNjEzLDEzIEBACiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7CiAgICAgUFdMQU5fSUVfU1NJRCAgIHBJdGVtU1NJRDsKICAgICBQS25vd25CU1MgcEJTUzsKLQlQQllURSAgcEJ1ZjsKKwl1bnNpZ25lZCBjaGFyICpwQnVmOwogCWludCByZXQgPSAwOwogCXUxNiBjb3VudCA9IDA7CiAJdTE2IGlpLCBqajsKICNpZiAxCiAKLSAgICBQQllURSBwdGVtcEJTUzsKKyAgICB1bnNpZ25lZCBjaGFyICpwdGVtcEJTUzsKIAogCiAKQEAgLTYzOSw5ICs2MzksOSBAQAogCiAgICAgICAgICBmb3Ioamo9MDtqajxNQVhfQlNTX05VTS1paS0xO2pqKyspIHsKIAotICAgICAgICAgICBpZigocE1nbXQtPnNCU1NMaXN0W2pqXS5iQWN0aXZlIT1UUlVFKSB8fAorICAgICAgICAgICBpZigocE1nbXQtPnNCU1NMaXN0W2pqXS5iQWN0aXZlIT10cnVlKSB8fAogCi0gICAgICAgICAgICAgICAgKChwTWdtdC0+c0JTU0xpc3RbampdLnVSU1NJPnBNZ210LT5zQlNTTGlzdFtqaisxXS51UlNTSSkgJiYocE1nbXQtPnNCU1NMaXN0W2pqKzFdLmJBY3RpdmUhPUZBTFNFKSkpIHsKKyAgICAgICAgICAgICAgICAoKHBNZ210LT5zQlNTTGlzdFtqal0udVJTU0k+cE1nbXQtPnNCU1NMaXN0W2pqKzFdLnVSU1NJKSAmJihwTWdtdC0+c0JTU0xpc3RbamorMV0uYkFjdGl2ZSE9ZmFsc2UpKSkgewogCiAgICAgICAgICAgICAgICAgIG1lbWNweShwdGVtcEJTUywmcE1nbXQtPnNCU1NMaXN0W2pqXSxzaXplb2YoS25vd25CU1MpKTsKIApAQCAtNzEzLDcgKzcxMyw3IEBACiAgICAgICAgICAgICAgICAgc2Nhbl9idWYtPnJzbl9pZV9sZW4gPSBwQlNTLT53UlNOTGVuOwogICAgICAgICAgICAgICAgIG1lbWNweShzY2FuX2J1Zi0+cnNuX2llLCBwQlNTLT5ieVJTTklFLCBwQlNTLT53UlNOTGVuKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNjYW5fYnVmID0gKHN0cnVjdCB2aWF3Z2V0X3NjYW5fcmVzdWx0ICopKChQQllURSlzY2FuX2J1ZiArIHNpemVvZihzdHJ1Y3Qgdmlhd2dldF9zY2FuX3Jlc3VsdCkpOworICAgICAgICAgICAgc2Nhbl9idWYgPSAoc3RydWN0IHZpYXdnZXRfc2Nhbl9yZXN1bHQgKikoKHVuc2lnbmVkIGNoYXIgKilzY2FuX2J1ZiArIHNpemVvZihzdHJ1Y3Qgdmlhd2dldF9zY2FuX3Jlc3VsdCkpOwogICAgICAgICAgICAgamogKys7CiAgICAgICAgIH0KICAgICB9CkBAIC03NTIsMTAgKzc1MiwxMCBAQAogewogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwogICAgIFBXTEFOX0lFX1NTSUQgICBwSXRlbVNTSUQ7Ci0gICAgQllURSAgICBhYnlOdWxsQWRkcltdID0gezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OwotICAgIEJZVEUgICAgYWJ5V1BBSUVbNjRdOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5TnVsbEFkZHJbXSA9IHsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVdQQUlFWzY0XTsKICAgICBpbnQgcmV0ID0gMDsKLSAgICBCT09MIGJXZXBFbmFibGVkPUZBTFNFOworICAgIGJvb2wgYldlcEVuYWJsZWQ9ZmFsc2U7CiAKIAkvLyBzZXQga2V5IHR5cGUgJiBhbGdvcml0aG0KICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJwYWlyd2lzZV9zdWl0ZSA9ICVkXG4iLCBwYXJhbS0+dS53cGFfYXNzb2NpYXRlLnBhaXJ3aXNlX3N1aXRlKTsKQEAgLTgxNyw3ICs4MTcsNyBAQAogCWNhc2UgQ0lQSEVSX1dFUDQwOgogCWNhc2UgQ0lQSEVSX1dFUDEwNDoKIAkJcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOwotCQliV2VwRW5hYmxlZD1UUlVFOworCQliV2VwRW5hYmxlZD10cnVlOwogCQlicmVhazsKIAljYXNlIENJUEhFUl9OT05FOgogCQlpZiAocGFyYW0tPnUud3BhX2Fzc29jaWF0ZS5ncm91cF9zdWl0ZSA9PSBDSVBIRVJfQ0NNUCkKQEAgLTgzNCwyNiArODM0LDI2IEBACiAgICAgICBpZiAocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9TSEFSRUtFWSkgewogICAgICAgICAgICAgcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOwogICAgICAgICAgICAgLy9wTWdtdC0+ZUF1dGhlbk1vZGUgPSBXTUFDX0FVVEhfU0hBUkVLRVk7Ci0gICAgICAgICAgICBwTWdtdC0+YlNoYXJlS2V5QWxnb3JpdGhtID0gVFJVRTsKKyAgICAgICAgICAgIHBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0gPSB0cnVlOwogICAgICAgICAgICAgIH0KICAgICAgZWxzZSBpZiAocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9PUEVOKSB7CiAgICAgICAgICAgaWYoIWJXZXBFbmFibGVkKSAgcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkOwogCWVsc2UgcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOwogICAgICAgICAgICAgLy9wTWdtdC0+ZUF1dGhlbk1vZGUgPSBXTUFDX0FVVEhfT1BFTjsKLSAgICAgICAgICAgIC8vcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9IEZBTFNFOyAvLzIwMDgwNzE3LTA2LDxNb2RpZnk+IGJ5IGNoZXN0ZXIvL0ZpeCBPcGVuIG1vZGUsIFdFUCBlbmNyeXRpb24KKyAgICAgICAgICAgIC8vcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9IGZhbHNlOyAvLzIwMDgwNzE3LTA2LDxNb2RpZnk+IGJ5IGNoZXN0ZXIvL0ZpeCBPcGVuIG1vZGUsIFdFUCBlbmNyeXRpb24KICAgICAgICAgICAgfQogLy9taWtlIHNhdmUgb2xkIGVuY3J5cHRpb24gc3RhdHVzCiAJcERldmljZS0+ZU9sZEVuY3J5cHRpb25TdGF0dXMgPSBwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1czsKIAogICAgIGlmIChwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyAhPSAgTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZCkKLSAgICAgICAgcERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPSBUUlVFOworICAgICAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IHRydWU7CiAgICAgZWxzZQotICAgICAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IEZBTFNFOworICAgICAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IGZhbHNlOwogaWYgKCEoKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfU0hBUkVLRVkpIHx8Ci0gICAgICAoKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfT1BFTikgJiYgKGJXZXBFbmFibGVkPT1UUlVFKSkpICkgIC8vRGF2aWRXYW5nICAvLzIwMDgwNzE3LTA2LDxNb2RpZnk+IGJ5IGNoZXN0ZXIvL05vdCB0byBpbml0aWFsIFdFUAorICAgICAgKChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX09QRU4pICYmIChiV2VwRW5hYmxlZD09dHJ1ZSkpKSApICAvL0RhdmlkV2FuZyAgLy8yMDA4MDcxNy0wNiw8TW9kaWZ5PiBieSBjaGVzdGVyLy9Ob3QgdG8gaW5pdGlhbCBXRVAKICAgICBLZXl2SW5pdFRhYmxlKCZwRGV2aWNlLT5zS2V5LCBwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKICAgICBzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLSAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBGQUxTRTsKKyAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBmYWxzZTsKICAgICBtZW1zZXQocE1nbXQtPmFieUN1cnJCU1NJRCwgMCwgNik7CiAgICAgcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX0lETEU7CiAgICAgbmV0aWZfc3RvcF9xdWV1ZShwRGV2aWNlLT5kZXYpOwpAQCAtOTIyLDcgKzkyMiw3IEBACiAJY2FzZSBWSUFXR0VUX1NFVF9LRVk6CiAJICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlZJQVdHRVRfU0VUX0tFWSBcbiIpOwogCSAgICBzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLSAgICAgICAgcmV0ID0gd3BhX3NldF9rZXlzKHBEZXZpY2UsIHBhcmFtLCBGQUxTRSk7CisgICAgICAgIHJldCA9IHdwYV9zZXRfa2V5cyhwRGV2aWNlLCBwYXJhbSwgZmFsc2UpOwogICAgICAgICBzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cGFjdGwuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3BhY3RsLmgKaW5kZXggYjBkOTJkNS4uZGJlOGU4NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3BhY3RsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cGFjdGwuaApAQCAtNTQsNyArNTQsNyBAQAogCiAKIAotdHlwZWRlZiBVTE9OR0xPTkcgICBORElTXzgwMl8xMV9LRVlfUlNDOwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgICBORElTXzgwMl8xMV9LRVlfUlNDOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IENsYXNzZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC02NCw3ICs2NCw3IEBACiAKIGludCB3cGFfc2V0X3dwYWRldihQU0RldmljZSBwRGV2aWNlLCBpbnQgdmFsKTsKIGludCB3cGFfaW9jdGwoUFNEZXZpY2UgcERldmljZSwgc3RydWN0IGl3X3BvaW50ICpwKTsKLWludCB3cGFfc2V0X2tleXMoUFNEZXZpY2UgcERldmljZSwgdm9pZCAqY3R4LCBCT09MICBmY3Bma2VybmVsKTsKK2ludCB3cGFfc2V0X2tleXMoUFNEZXZpY2UgcERldmljZSwgdm9pZCAqY3R4LCBib29sIGZjcGZrZXJuZWwpOwogCiAjZW5kaWYgLy8gX19XUEFDTF9IX18KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cm91dGUuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3JvdXRlLmMKaW5kZXggYmY5MmZiOS4uNjZlMmVlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cm91dGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dyb3V0ZS5jCkBAIC01Myw0NSArNTMsNDUgQEAKIAogLyoKICAqIERlc2NyaXB0aW9uOgotICogICAgICBSZWxheSBwYWNrZXQuICBSZXR1cm4gVFJVRSBpZiBwYWNrZXQgaXMgY29weSB0byBETUExCisgKiAgICAgIFJlbGF5IHBhY2tldC4gIFJldHVybiB0cnVlIGlmIHBhY2tldCBpcyBjb3B5IHRvIERNQTEKICAqCiAgKiBQYXJhbWV0ZXJzOgogICogIEluOgogICogICAgICBwRGV2aWNlICAgICAgICAgICAgIC0KICAqICAgICAgcGJ5U2tiRGF0YSAgICAgICAgICAtIHJ4IHBhY2tldCBza2IgZGF0YQogICogIE91dDoKLSAqICAgICAgVFVSRSwgRkFMU0UKKyAqICAgICAgdHJ1ZSwgZmFsc2UKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgcGFja2V0IGR1cGxpY2F0ZTsgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgcGFja2V0IGR1cGxpY2F0ZTsgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIFJPVVRFYlJlbGF5IChQU0RldmljZSBwRGV2aWNlLCBQQllURSBwYnlTa2JEYXRhLCBVSU5UIHVEYXRhTGVuLCBVSU5UIHVOb2RlSW5kZXgpCitib29sIFJPVVRFYlJlbGF5IChQU0RldmljZSBwRGV2aWNlLCB1bnNpZ25lZCBjaGFyICpwYnlTa2JEYXRhLCB1bnNpZ25lZCBpbnQgdURhdGFMZW4sIHVuc2lnbmVkIGludCB1Tm9kZUluZGV4KQogewogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwogICAgIFBTVHhEZXNjICAgICAgICBwSGVhZFRELCBwTGFzdFREOwotICAgIFVJTlQgICAgICAgICAgICBjYkZyYW1lQm9keVNpemU7Ci0gICAgVUlOVCAgICAgICAgICAgIHVNQUNmcmFnTnVtOwotICAgIEJZVEUgICAgICAgICAgICBieVBrdFR5cGU7Ci0gICAgQk9PTCAgICAgICAgICAgIGJOZWVkRW5jcnlwdGlvbiA9IEZBTFNFOworICAgIHVuc2lnbmVkIGludCBjYkZyYW1lQm9keVNpemU7CisgICAgdW5zaWduZWQgaW50IHVNQUNmcmFnTnVtOworICAgIHVuc2lnbmVkIGNoYXIgYnlQa3RUeXBlOworICAgIGJvb2wgYk5lZWRFbmNyeXB0aW9uID0gZmFsc2U7CiAgICAgU0tleUl0ZW0gICAgICAgIFNUZW1wS2V5OwogICAgIFBTS2V5SXRlbSAgICAgICBwVHJhbnNtaXRLZXkgPSBOVUxMOwotICAgIFVJTlQgICAgICAgICAgICBjYkhlYWRlclNpemU7Ci0gICAgVUlOVCAgICAgICAgICAgIGlpOwotICAgIFBCWVRFICAgICAgICAgICBwYnlCU1NJRDsKKyAgICB1bnNpZ25lZCBpbnQgY2JIZWFkZXJTaXplOworICAgIHVuc2lnbmVkIGludCBpaTsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCU1NJRDsKIAogCiAKIAogICAgIGlmIChBVkFJTF9URChwRGV2aWNlLCBUWVBFX0FDMERNQSk8PTApIHsKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiUmVsYXkgY2FuJ3QgYWxsb2NhdGUgVEQxLi5cbiIpOwotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBwSGVhZFREID0gcERldmljZS0+YXBDdXJyVERbVFlQRV9BQzBETUFdOwogCiAgICAgcEhlYWRURC0+bV90ZDFURDEuYnlUQ1IgPSAoVENSX0VEUHxUQ1JfU1RQKTsKIAotICAgIG1lbWNweShwRGV2aWNlLT5zVHhFdGhIZWFkZXIuYWJ5RHN0QWRkciwgKFBCWVRFKXBieVNrYkRhdGEsIEVUSF9ITEVOKTsKKyAgICBtZW1jcHkocERldmljZS0+c1R4RXRoSGVhZGVyLmFieURzdEFkZHIsICh1bnNpZ25lZCBjaGFyICopcGJ5U2tiRGF0YSwgRVRIX0hMRU4pOwogCiAgICAgY2JGcmFtZUJvZHlTaXplID0gdURhdGFMZW4gLSBFVEhfSExFTjsKIApAQCAtOTksMTIgKzk5LDEyIEBACiAgICAgICAgIGNiRnJhbWVCb2R5U2l6ZSArPSA4OwogICAgIH0KIAotICAgIGlmIChwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9PSBUUlVFKSB7Ci0gICAgICAgIGJOZWVkRW5jcnlwdGlvbiA9IFRSVUU7CisgICAgaWYgKHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID09IHRydWUpIHsKKyAgICAgICAgYk5lZWRFbmNyeXB0aW9uID0gdHJ1ZTsKIAogICAgICAgICAvLyBnZXQgZ3JvdXAga2V5CiAgICAgICAgIHBieUJTU0lEID0gcERldmljZS0+YWJ5QnJvYWRjYXN0QWRkcjsKLSAgICAgICAgaWYoS2V5YkdldFRyYW5zbWl0S2V5KCYocERldmljZS0+c0tleSksIHBieUJTU0lELCBHUk9VUF9LRVksICZwVHJhbnNtaXRLZXkpID09IEZBTFNFKSB7CisgICAgICAgIGlmKEtleWJHZXRUcmFuc21pdEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwYnlCU1NJRCwgR1JPVVBfS0VZLCAmcFRyYW5zbWl0S2V5KSA9PSBmYWxzZSkgewogICAgICAgICAgICAgcFRyYW5zbWl0S2V5ID0gTlVMTDsKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0RFQlVHIktFWSBpcyBOVUxMLiBbJWRdXG4iLCBwRGV2aWNlLT5wTWdtdC0+ZUN1cnJNb2RlKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTEzMCwxNiArMTMwLDE2IEBACiAgICAgdU1BQ2ZyYWdOdW0gPSBjYkdldEZyYWdDb3VudChwRGV2aWNlLCBwVHJhbnNtaXRLZXksIGNiRnJhbWVCb2R5U2l6ZSwgJnBEZXZpY2UtPnNUeEV0aEhlYWRlcik7CiAKICAgICBpZiAodU1BQ2ZyYWdOdW0gPiBBVkFJTF9URChwRGV2aWNlLFRZUEVfQUMwRE1BKSkgewotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgYnlQa3RUeXBlID0gKEJZVEUpcERldmljZS0+YnlQYWNrZXRUeXBlOworICAgIGJ5UGt0VHlwZSA9ICh1bnNpZ25lZCBjaGFyKXBEZXZpY2UtPmJ5UGFja2V0VHlwZTsKIAogICAgIGlmIChwRGV2aWNlLT5iRml4UmF0ZSkgewogICAgICAgICBpZiAocERldmljZS0+ZUN1cnJlbnRQSFlUeXBlID09IFBIWV9UWVBFXzExQikgewogICAgICAgICAgICAgaWYgKHBEZXZpY2UtPnVDb25uZWN0aW9uUmF0ZSA+PSBSQVRFXzExTSkgewogICAgICAgICAgICAgICAgIHBEZXZpY2UtPndDdXJyZW50UmF0ZSA9IFJBVEVfMTFNOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT53Q3VycmVudFJhdGUgPSAoV09SRClwRGV2aWNlLT51Q29ubmVjdGlvblJhdGU7CisgICAgICAgICAgICAgICAgcERldmljZS0+d0N1cnJlbnRSYXRlID0gKHVuc2lnbmVkIHNob3J0KXBEZXZpY2UtPnVDb25uZWN0aW9uUmF0ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmICgocERldmljZS0+ZUN1cnJlbnRQSFlUeXBlID09IFBIWV9UWVBFXzExQSkgJiYKQEAgLTE0OSw3ICsxNDksNyBAQAogICAgICAgICAgICAgICAgIGlmIChwRGV2aWNlLT51Q29ubmVjdGlvblJhdGUgPj0gUkFURV81NE0pCiAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPndDdXJyZW50UmF0ZSA9IFJBVEVfNTRNOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcERldmljZS0+d0N1cnJlbnRSYXRlID0gKFdPUkQpcERldmljZS0+dUNvbm5lY3Rpb25SYXRlOworICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT53Q3VycmVudFJhdGUgPSAodW5zaWduZWQgc2hvcnQpcERldmljZS0+dUNvbm5lY3Rpb25SYXRlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTcyLDcgKzE3Miw3IEBACiAgICAgICAgIE1BQ2JQU1dha2V1cChwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKICAgICB9CiAKLSAgICBwRGV2aWNlLT5iUFdCaXRPbiA9IEZBTFNFOworICAgIHBEZXZpY2UtPmJQV0JpdE9uID0gZmFsc2U7CiAKICAgICBwTGFzdFREID0gcEhlYWRURDsKICAgICBmb3IgKGlpID0gMDsgaWkgPCB1TUFDZnJhZ051bTsgaWkrKykgewpAQCAtMTkyLDcgKzE5Miw3IEBACiAKICAgICBNQUN2VHJhbnNtaXRBQzAocERldmljZS0+UG9ydE9mZnNldCk7CiAKLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dyb3V0ZS5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cm91dGUuaAppbmRleCAyOTVjZGM1Li4zNGY5ZTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dyb3V0ZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3JvdXRlLmgKQEAgLTM5LDcgKzM5LDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotQk9PTCBST1VURWJSZWxheSAoUFNEZXZpY2UgcERldmljZSwgUEJZVEUgcGJ5U2tiRGF0YSwgVUlOVCB1RGF0YUxlbiwgVUlOVCB1Tm9kZUluZGV4KTsKK2Jvb2wgUk9VVEViUmVsYXkgKFBTRGV2aWNlIHBEZXZpY2UsIHVuc2lnbmVkIGNoYXIgKnBieVNrYkRhdGEsIHVuc2lnbmVkIGludCB1RGF0YUxlbiwgdW5zaWduZWQgaW50IHVOb2RlSW5kZXgpOwogCiAjZW5kaWYgLy8gX19XUk9VVEVfSF9fCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvODAyMTFtZ3IuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvODAyMTFtZ3IuYwppbmRleCBmMjRkYzU1Li5mY2VlYzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2LzgwMjExbWdyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni84MDIxMW1nci5jCkBAIC0xOCw3ICsxOCw3IEBACiAgKgogICogRmlsZTogODAyMTFtZ3IuYwogICoKLSAqIFB1cnBvc2U6IEhhbmRsZXMgdGhlIDgwMi4xMSBtYW5hZ21lbnQgc3VwcG9ydCBmdW5jdGlvbnMKKyAqIFB1cnBvc2U6IEhhbmRsZXMgdGhlIDgwMi4xMSBtYW5hZ2VtZW50IHN1cHBvcnQgZnVuY3Rpb25zCiAgKgogICogQXV0aG9yOiBMeW5kb24gQ2hlbgogICoKQEAgLTY3LDggKzY3LDggQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBWYXJpYWJsZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCAgICAgICAgICBtc2dsZXZlbCAgICAgICAgICAgICAgICA9TVNHX0xFVkVMX0lORk87Ci0vL3N0YXRpYyBpbnQgICAgICAgICAgbXNnbGV2ZWwgICAgICAgICAgICAgICAgPU1TR19MRVZFTF9ERUJVRzsKK3N0YXRpYyBpbnQgICAgICAgICAgbXNnbGV2ZWwgICAgICAgICAgICAgICAgPSBNU0dfTEVWRUxfSU5GTzsKKy8qc3RhdGljIGludCAgICAgICAgICBtc2dsZXZlbCAgICAgICAgICAgICAgICA9TVNHX0xFVkVMX0RFQlVHOyovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAKQEAgLTk2LDcgKzk2LDcgQEAKIHsKICAgICBwRnJhbWUtPnBIZHIgPSAoUFVXTEFOXzgwMjExSERSKXBGcmFtZS0+cEJ1ZjsKIAotICAgIC8vIEZpeGVkIEZpZWxkcworICAgIC8qIEZpeGVkIEZpZWxkcyAqLwogICAgIHBGcmFtZS0+cHF3VGltZXN0YW1wID0gKFBRV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQkVBQ09OX09GRl9UUyk7CiAgICAgcEZyYW1lLT5wd0JlYWNvbkludGVydmFsID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKQEAgLTEzMCw3ICsxMzAsNyBAQAogCiAgICAgcEZyYW1lLT5wSGRyID0gKFBVV0xBTl84MDIxMUhEUilwRnJhbWUtPnBCdWY7CiAKLSAgICAvLyBGaXhlZCBGaWVsZHMKKyAgICAvKiBGaXhlZCBGaWVsZHMgKi8KICAgICBwRnJhbWUtPnBxd1RpbWVzdGFtcCA9IChQUVdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0JFQUNPTl9PRkZfVFMpOwogICAgIHBGcmFtZS0+cHdCZWFjb25JbnRlcnZhbCA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCkBAIC0xMzgsODggKzEzOCw4NyBAQAogICAgIHBGcmFtZS0+cHdDYXBJbmZvID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0JFQUNPTl9PRkZfQ0FQSU5GTyk7CiAKLSAgICAvLyBJbmZvcm1hdGlvbiBlbGVtZW50cworICAgIC8qIEluZm9ybWF0aW9uIGVsZW1lbnRzICovCiAgICAgcEl0ZW0gPSAoUFdMQU5fSUUpKChQQllURSkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpKQogICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQkVBQ09OX09GRl9TU0lEKTsKLSAgICB3aGlsZSggKChQQllURSlwSXRlbSkgPCAocEZyYW1lLT5wQnVmICsgcEZyYW1lLT5sZW4pICl7CisgICAgd2hpbGUgKCgoUEJZVEUpcEl0ZW0pIDwgKHBGcmFtZS0+cEJ1ZiArIHBGcmFtZS0+bGVuKSkgewogCiAgICAgICAgIHN3aXRjaCAocEl0ZW0tPmJ5RWxlbWVudElEKSB7Ci0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX1NTSUQ6Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFNTSUQgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcEZyYW1lLT5wU1NJRCA9IChQV0xBTl9JRV9TU0lEKXBJdGVtOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXTEFOX0VJRF9TVVBQX1JBVEVTOgotICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBTdXBwUmF0ZXMgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcEZyYW1lLT5wU3VwcFJhdGVzID0gKFBXTEFOX0lFX1NVUFBfUkFURVMpcEl0ZW07Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX0ZIX1BBUk1TOgotICAgICAgICAgICAgICAgIC8vcEZyYW1lLT5wRkhQYXJtcyA9IChQV0xBTl9JRV9GSF9QQVJNUylwSXRlbTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfRFNfUEFSTVM6Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cERTUGFybXMgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcEZyYW1lLT5wRFNQYXJtcyA9IChQV0xBTl9JRV9EU19QQVJNUylwSXRlbTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfQ0ZfUEFSTVM6Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cENGUGFybXMgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcEZyYW1lLT5wQ0ZQYXJtcyA9IChQV0xBTl9JRV9DRl9QQVJNUylwSXRlbTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfSUJTU19QQVJNUzoKLSAgICAgICAgICAgICAgICBpZiAocEZyYW1lLT5wSUJTU1Bhcm1zID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cElCU1NQYXJtcyA9IChQV0xBTl9JRV9JQlNTX1BBUk1TKXBJdGVtOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXTEFOX0VJRF9USU06Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFRJTSA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBwRnJhbWUtPnBUSU0gPSAoUFdMQU5fSUVfVElNKXBJdGVtOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX1NTSUQ6CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wU1NJRCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHBGcmFtZS0+cFNTSUQgPSAoUFdMQU5fSUVfU1NJRClwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX1NVUFBfUkFURVM6CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wU3VwcFJhdGVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgcEZyYW1lLT5wU3VwcFJhdGVzID0gKFBXTEFOX0lFX1NVUFBfUkFURVMpcEl0ZW07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTEFOX0VJRF9GSF9QQVJNUzoKKyAgICAgICAgICAgIC8qIHBGcmFtZS0+cEZIUGFybXMgPSAoUFdMQU5fSUVfRkhfUEFSTVMpcEl0ZW07ICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTEFOX0VJRF9EU19QQVJNUzoKKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBEU1Bhcm1zID09IE5VTEwpCisgICAgICAgICAgICAgICAgcEZyYW1lLT5wRFNQYXJtcyA9IChQV0xBTl9JRV9EU19QQVJNUylwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX0NGX1BBUk1TOgorICAgICAgICAgICAgaWYgKHBGcmFtZS0+cENGUGFybXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwRnJhbWUtPnBDRlBhcm1zID0gKFBXTEFOX0lFX0NGX1BBUk1TKXBJdGVtOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0xBTl9FSURfSUJTU19QQVJNUzoKKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBJQlNTUGFybXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwRnJhbWUtPnBJQlNTUGFybXMgPSAoUFdMQU5fSUVfSUJTU19QQVJNUylwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX1RJTToKKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBUSU0gPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwRnJhbWUtPnBUSU0gPSAoUFdMQU5fSUVfVElNKXBJdGVtOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfUlNOOgotICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBSU04gPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBwRnJhbWUtPnBSU04gPSAoUFdMQU5fSUVfUlNOKXBJdGVtOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfUlNOX1dQQToKLSAgICAgICAgICAgICAgICBpZiAocEZyYW1lLT5wUlNOV1BBID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFdQQWJfSXNfUlNOKChQV0xBTl9JRV9SU05fRVhUKXBJdGVtKSA9PSBUUlVFKQotICAgICAgICAgICAgICAgICAgICAgICAgcEZyYW1lLT5wUlNOV1BBID0gKFBXTEFOX0lFX1JTTl9FWFQpcEl0ZW07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX1JTTjoKKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBSU04gPT0gTlVMTCkgCisgICAgICAgICAgICAgICAgcEZyYW1lLT5wUlNOID0gKFBXTEFOX0lFX1JTTilwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX1JTTl9XUEE6CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wUlNOV1BBID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoV1BBYl9Jc19SU04oKFBXTEFOX0lFX1JTTl9FWFQpcEl0ZW0pID09IFRSVUUpCisgICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cFJTTldQQSA9IChQV0xBTl9JRV9SU05fRVhUKXBJdGVtOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfRVJQOgotICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBFUlAgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcEZyYW1lLT5wRVJQID0gKFBXTEFOX0lFX0VSUClwSXRlbTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfRVhUU1VQUF9SQVRFUzoKLSAgICAgICAgICAgICAgICBpZiAocEZyYW1lLT5wRXh0U3VwcFJhdGVzID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cEV4dFN1cHBSYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKXBJdGVtOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX0VSUDoKKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBFUlAgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwRnJhbWUtPnBFUlAgPSAoUFdMQU5fSUVfRVJQKXBJdGVtOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0xBTl9FSURfRVhUU1VQUF9SQVRFUzoKKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBFeHRTdXBwUmF0ZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwRnJhbWUtPnBFeHRTdXBwUmF0ZXMgPSAoUFdMQU5fSUVfU1VQUF9SQVRFUylwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX0NPVU5UUlk6ICAgICAgLy83Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cElFX0NvdW50cnkgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcEZyYW1lLT5wSUVfQ291bnRyeSA9IChQV0xBTl9JRV9DT1VOVFJZKXBJdGVtOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX0NPVU5UUlk6ICAgICAgLyogNyAqLworICAgICAgICAgICAgaWYgKHBGcmFtZS0+cElFX0NvdW50cnkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwRnJhbWUtPnBJRV9Db3VudHJ5ID0gKFBXTEFOX0lFX0NPVU5UUlkpcEl0ZW07CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgY2FzZSBXTEFOX0VJRF9QV1JfQ09OU1RSQUlOVDogICAvLzMyCi0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cElFX1Bvd2VyQ29uc3RyYWludCA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBwRnJhbWUtPnBJRV9Qb3dlckNvbnN0cmFpbnQgPSAoUFdMQU5fSUVfUFdfQ09OU1QpcEl0ZW07Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0xBTl9FSURfUFdSX0NPTlNUUkFJTlQ6ICAgLyogMzIgKi8KKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBJRV9Qb3dlckNvbnN0cmFpbnQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwRnJhbWUtPnBJRV9Qb3dlckNvbnN0cmFpbnQgPSAoUFdMQU5fSUVfUFdfQ09OU1QpcEl0ZW07CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgY2FzZSBXTEFOX0VJRF9DSF9TV0lUQ0g6ICAgIC8vMzcKLSAgICAgICAgICAgICAgICBpZiAocEZyYW1lLT5wSUVfQ0hTVyA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBwRnJhbWUtPnBJRV9DSFNXID0gKFBXTEFOX0lFX0NIX1NXKXBJdGVtOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX0NIX1NXSVRDSDogICAgLyogMzcgKi8KKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBJRV9DSFNXID09IE5VTEwpCisgICAgICAgICAgICAgICAgcEZyYW1lLT5wSUVfQ0hTVyA9IChQV0xBTl9JRV9DSF9TVylwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX1FVSUVUOiAgICAgICAgLy80MAotICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBJRV9RdWlldCA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBwRnJhbWUtPnBJRV9RdWlldCA9IChQV0xBTl9JRV9RVUlFVClwSXRlbTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTEFOX0VJRF9RVUlFVDogICAgICAgIC8qIDQwICovCisgICAgICAgICAgICBpZiAocEZyYW1lLT5wSUVfUXVpZXQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwRnJhbWUtPnBJRV9RdWlldCA9IChQV0xBTl9JRV9RVUlFVClwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX0lCU1NfREZTOgotICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBJRV9JQlNTREZTID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cElFX0lCU1NERlMgPSAoUFdMQU5fSUVfSUJTU19ERlMpcEl0ZW07Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0xBTl9FSURfSUJTU19ERlM6CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wSUVfSUJTU0RGUyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHBGcmFtZS0+cElFX0lCU1NERlMgPSAoUFdMQU5fSUVfSUJTU19ERlMpcEl0ZW07CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJVbnJlY29nbml6ZWQgRUlEPSVkZCBpbiBiZWFjb24gZGVjb2RlLlxuIiwgcEl0ZW0tPmJ5RWxlbWVudElEKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlVucmVjb2duaXplZCBFSUQ9JWRkIGluIGJlYWNvbiBkZWNvZGUuXG4iLCBwSXRlbS0+YnlFbGVtZW50SUQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIH0KQEAgLTI5NSw3ICsyOTQsNyBAQAogICAgIHBGcmFtZS0+cEhkciA9IChQVVdMQU5fODAyMTFIRFIpcEZyYW1lLT5wQnVmOwogCiAKLSAgICAvLyBGaXhlZCBGaWVsZHMKKyAgICAvKiBGaXhlZCBGaWVsZHMgKi8KICAgICBwRnJhbWUtPnB3UmVhc29uID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fRElTQVNTT0NfT0ZGX1JFQVNPTik7CiAgICAgcEZyYW1lLT5sZW4gPSBXTEFOX0hEUl9BRERSM19MRU4gKyBXTEFOX0RJU0FTU09DX09GRl9SRUFTT04gKyBzaXplb2YoKihwRnJhbWUtPnB3UmVhc29uKSk7CkBAIC0zMjIsNyArMzIxLDcgQEAKIHsKICAgICBwRnJhbWUtPnBIZHIgPSAoUFVXTEFOXzgwMjExSERSKXBGcmFtZS0+cEJ1ZjsKIAotICAgIC8vIEZpeGVkIEZpZWxkcworICAgIC8qIEZpeGVkIEZpZWxkcyAqLwogICAgIHBGcmFtZS0+cHdSZWFzb24gPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9ESVNBU1NPQ19PRkZfUkVBU09OKTsKIApAQCAtMzQ3LDcgKzM0Niw3IEBACiAgICAgKQogewogICAgIHBGcmFtZS0+cEhkciA9IChQVVdMQU5fODAyMTFIRFIpcEZyYW1lLT5wQnVmOwotICAgIC8vIEZpeGVkIEZpZWxkcworICAgIC8qIEZpeGVkIEZpZWxkcyAqLwogICAgIHBGcmFtZS0+cHdDYXBJbmZvID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FTU09DUkVRX09GRl9DQVBfSU5GTyk7CiAgICAgcEZyYW1lLT5wd0xpc3RlbkludGVydmFsID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKQEAgLTM3Niw0NyArMzc1LDQ2IEBACiAgICAgUFdMQU5fSUUgICBwSXRlbTsKIAogICAgIHBGcmFtZS0+cEhkciA9IChQVVdMQU5fODAyMTFIRFIpcEZyYW1lLT5wQnVmOwotICAgIC8vIEZpeGVkIEZpZWxkcworICAgIC8qIEZpeGVkIEZpZWxkcyAqLwogICAgIHBGcmFtZS0+cHdDYXBJbmZvID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FTU09DUkVRX09GRl9DQVBfSU5GTyk7CiAgICAgcEZyYW1lLT5wd0xpc3RlbkludGVydmFsID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FTU09DUkVRX09GRl9MSVNURU5fSU5UKTsKIAotICAgIC8vIEluZm9ybWF0aW9uIGVsZW1lbnRzCisgICAgLyogSW5mb3JtYXRpb24gZWxlbWVudHMgKi8KICAgICBwSXRlbSA9IChQV0xBTl9JRSkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FTU09DUkVRX09GRl9TU0lEKTsKIAogICAgIHdoaWxlICgoKFBCWVRFKXBJdGVtKSA8IChwRnJhbWUtPnBCdWYgKyBwRnJhbWUtPmxlbikpIHsKLSAgICAgICAgc3dpdGNoIChwSXRlbS0+YnlFbGVtZW50SUQpewotICAgICAgICAgICAgY2FzZSBXTEFOX0VJRF9TU0lEOgotICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBTU0lEID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cFNTSUQgPSAoUFdMQU5fSUVfU1NJRClwSXRlbTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfU1VQUF9SQVRFUzoKLSAgICAgICAgICAgICAgICBpZiAocEZyYW1lLT5wU3VwcFJhdGVzID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cFN1cHBSYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKXBJdGVtOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzd2l0Y2ggKHBJdGVtLT5ieUVsZW1lbnRJRCkgeworICAgICAgICBjYXNlIFdMQU5fRUlEX1NTSUQ6CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wU1NJRCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHBGcmFtZS0+cFNTSUQgPSAoUFdMQU5fSUVfU1NJRClwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX1NVUFBfUkFURVM6CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wU3VwcFJhdGVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgcEZyYW1lLT5wU3VwcFJhdGVzID0gKFBXTEFOX0lFX1NVUFBfUkFURVMpcEl0ZW07CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgY2FzZSBXTEFOX0VJRF9SU046Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFJTTiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cFJTTiA9IChQV0xBTl9JRV9SU04pcEl0ZW07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXTEFOX0VJRF9SU05fV1BBOgotICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBSU05XUEEgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoV1BBYl9Jc19SU04oKFBXTEFOX0lFX1JTTl9FWFQpcEl0ZW0pID09IFRSVUUpCi0gICAgICAgICAgICAgICAgICAgICAgICBwRnJhbWUtPnBSU05XUEEgPSAoUFdMQU5fSUVfUlNOX0VYVClwSXRlbTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX0VYVFNVUFBfUkFURVM6Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cEV4dFN1cHBSYXRlcyA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBwRnJhbWUtPnBFeHRTdXBwUmF0ZXMgPSAoUFdMQU5fSUVfU1VQUF9SQVRFUylwSXRlbTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTEFOX0VJRF9SU046CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wUlNOID09IE5VTEwpCisgICAgICAgICAgICAgICAgcEZyYW1lLT5wUlNOID0gKFBXTEFOX0lFX1JTTilwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX1JTTl9XUEE6CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wUlNOV1BBID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoV1BBYl9Jc19SU04oKFBXTEFOX0lFX1JTTl9FWFQpcEl0ZW0pID09IFRSVUUpCisgICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cFJTTldQQSA9IChQV0xBTl9JRV9SU05fRVhUKXBJdGVtOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0xBTl9FSURfRVhUU1VQUF9SQVRFUzoKKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBFeHRTdXBwUmF0ZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwRnJhbWUtPnBFeHRTdXBwUmF0ZXMgPSAoUFdMQU5fSUVfU1VQUF9SQVRFUylwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlVucmVjb2duaXplZCBFSUQ9JWRkIGluIGFzc29jcmVxIGRlY29kZS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBwSXRlbS0+YnlFbGVtZW50SUQpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiVW5yZWNvZ25pemVkIEVJRD0lZGQgaW4gYXNzb2NyZXEgZGVjb2RlLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgcEl0ZW0tPmJ5RWxlbWVudElEKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHBJdGVtID0gKFBXTEFOX0lFKSgoKFBCWVRFKXBJdGVtKSArIDIgKyBwSXRlbS0+bGVuKTsKICAgICB9CkBAIC00NDEsNyArNDM5LDcgQEAKIHsKICAgICBwRnJhbWUtPnBIZHIgPSAoUFVXTEFOXzgwMjExSERSKXBGcmFtZS0+cEJ1ZjsKIAotICAgIC8vIEZpeGVkIEZpZWxkcworICAgIC8qIEZpeGVkIEZpZWxkcyAqLwogICAgIHBGcmFtZS0+cHdDYXBJbmZvID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FTU09DUkVTUF9PRkZfQ0FQX0lORk8pOwogICAgIHBGcmFtZS0+cHdTdGF0dXMgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQpAQCAtNDc1LDcgKzQ3Myw3IEBACiAKICAgICBwRnJhbWUtPnBIZHIgPSAoUFVXTEFOXzgwMjExSERSKXBGcmFtZS0+cEJ1ZjsKIAotICAgIC8vIEZpeGVkIEZpZWxkcworICAgIC8qIEZpeGVkIEZpZWxkcyAqLwogICAgIHBGcmFtZS0+cHdDYXBJbmZvID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FTU09DUkVTUF9PRkZfQ0FQX0lORk8pOwogICAgIHBGcmFtZS0+cHdTdGF0dXMgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQpAQCAtNDgzLDcgKzQ4MSw3IEBACiAgICAgcEZyYW1lLT5wd0FpZCA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FTU09DUkVTUF9PRkZfQUlEKTsKIAotICAgIC8vIEluZm9ybWF0aW9uIGVsZW1lbnRzCisgICAgLyogSW5mb3JtYXRpb24gZWxlbWVudHMgKi8KICAgICBwRnJhbWUtPnBTdXBwUmF0ZXMgID0gKFBXTEFOX0lFX1NVUFBfUkFURVMpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FTU09DUkVTUF9PRkZfU1VQUF9SQVRFUyk7CiAKQEAgLTQ5Myw4ICs0OTEsNyBAQAogICAgIGlmICgoKChQQllURSlwSXRlbSkgPCAocEZyYW1lLT5wQnVmICsgcEZyYW1lLT5sZW4pKSAmJiAocEl0ZW0tPmJ5RWxlbWVudElEID09IFdMQU5fRUlEX0VYVFNVUFBfUkFURVMpKSB7CiAgICAgICAgIHBGcmFtZS0+cEV4dFN1cHBSYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKXBJdGVtOwogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJwRnJhbWUtPnBFeHRTdXBwUmF0ZXM9WyVwXS5cbiIsIHBJdGVtKTsKLSAgICB9Ci0gICAgZWxzZSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgcEZyYW1lLT5wRXh0U3VwcFJhdGVzID0gTlVMTDsKICAgICB9CiAgICAgcmV0dXJuOwpAQCAtNTE5LDcgKzUxNiw3IEBACiB7CiAgICAgcEZyYW1lLT5wSGRyID0gKFBVV0xBTl84MDIxMUhEUilwRnJhbWUtPnBCdWY7CiAKLSAgICAvLyBGaXhlZCBGaWVsZHMKKyAgICAvKiBGaXhlZCBGaWVsZHMgKi8KICAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9SRUFTU09DUkVRX09GRl9DQVBfSU5GTyk7CiAgICAgcEZyYW1lLT5wd0xpc3RlbkludGVydmFsID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKQEAgLTU1Miw3ICs1NDksNyBAQAogICAgIFBXTEFOX0lFICAgcEl0ZW07CiAgICAgcEZyYW1lLT5wSGRyID0gKFBVV0xBTl84MDIxMUhEUilwRnJhbWUtPnBCdWY7CiAKLSAgICAvLyBGaXhlZCBGaWVsZHMKKyAgICAvKiBGaXhlZCBGaWVsZHMgKi8KICAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9SRUFTU09DUkVRX09GRl9DQVBfSU5GTyk7CiAgICAgcEZyYW1lLT5wd0xpc3RlbkludGVydmFsID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKQEAgLTU2MCw0MiArNTU3LDQxIEBACiAgICAgcEZyYW1lLT5wQWRkckN1cnJBUCA9IChQSUVFRV9BRERSKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9SRUFTU09DUkVRX09GRl9DVVJSX0FQKTsKIAotICAgIC8vIEluZm9ybWF0aW9uIGVsZW1lbnRzCisgICAgLyogSW5mb3JtYXRpb24gZWxlbWVudHMgKi8KICAgICBwSXRlbSA9IChQV0xBTl9JRSkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9SRUFTU09DUkVRX09GRl9TU0lEKTsKIAotICAgIHdoaWxlKCgoUEJZVEUpcEl0ZW0pIDwgKHBGcmFtZS0+cEJ1ZiArIHBGcmFtZS0+bGVuKSkgeworICAgIHdoaWxlICgoKFBCWVRFKXBJdGVtKSA8IChwRnJhbWUtPnBCdWYgKyBwRnJhbWUtPmxlbikpIHsKIAotICAgICAgICBzd2l0Y2ggKHBJdGVtLT5ieUVsZW1lbnRJRCl7Ci0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX1NTSUQ6Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFNTSUQgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcEZyYW1lLT5wU1NJRCA9IChQV0xBTl9JRV9TU0lEKXBJdGVtOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXTEFOX0VJRF9TVVBQX1JBVEVTOgotICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBTdXBwUmF0ZXMgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcEZyYW1lLT5wU3VwcFJhdGVzID0gKFBXTEFOX0lFX1NVUFBfUkFURVMpcEl0ZW07Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN3aXRjaCAocEl0ZW0tPmJ5RWxlbWVudElEKSB7CisgICAgICAgIGNhc2UgV0xBTl9FSURfU1NJRDoKKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBTU0lEID09IE5VTEwpCisgICAgICAgICAgICAgICAgcEZyYW1lLT5wU1NJRCA9IChQV0xBTl9JRV9TU0lEKXBJdGVtOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0xBTl9FSURfU1VQUF9SQVRFUzoKKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBTdXBwUmF0ZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwRnJhbWUtPnBTdXBwUmF0ZXMgPSAoUFdMQU5fSUVfU1VQUF9SQVRFUylwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX1JTTjoKLSAgICAgICAgICAgICAgICBpZiAocEZyYW1lLT5wUlNOID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgcEZyYW1lLT5wUlNOID0gKFBXTEFOX0lFX1JTTilwSXRlbTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX1JTTl9XUEE6Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFJTTldQQSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChXUEFiX0lzX1JTTigoUFdMQU5fSUVfUlNOX0VYVClwSXRlbSkgPT0gVFJVRSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cFJTTldQQSA9IChQV0xBTl9JRV9SU05fRVhUKXBJdGVtOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTEFOX0VJRF9SU046CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wUlNOID09IE5VTEwpCisgICAgICAgICAgICAgICAgcEZyYW1lLT5wUlNOID0gKFBXTEFOX0lFX1JTTilwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX1JTTl9XUEE6CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wUlNOV1BBID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoV1BBYl9Jc19SU04oKFBXTEFOX0lFX1JTTl9FWFQpcEl0ZW0pID09IFRSVUUpCisgICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cFJTTldQQSA9IChQV0xBTl9JRV9SU05fRVhUKXBJdGVtOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfRVhUU1VQUF9SQVRFUzoKLSAgICAgICAgICAgICAgICBpZiAocEZyYW1lLT5wRXh0U3VwcFJhdGVzID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cEV4dFN1cHBSYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKXBJdGVtOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJVbnJlY29nbml6ZWQgRUlEPSVkZCBpbiByZWFzc29jcmVxIGRlY29kZS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcEl0ZW0tPmJ5RWxlbWVudElEKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTEFOX0VJRF9FWFRTVVBQX1JBVEVTOgorICAgICAgICAgICAgaWYgKHBGcmFtZS0+cEV4dFN1cHBSYXRlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHBGcmFtZS0+cEV4dFN1cHBSYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKXBJdGVtOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJVbnJlY29nbml6ZWQgRUlEPSVkZCBpbiByZWFzc29jcmVxIGRlY29kZS5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwSXRlbS0+YnlFbGVtZW50SUQpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgcEl0ZW0gPSAoUFdMQU5fSUUpKCgoUEJZVEUpcEl0ZW0pICsgMiArIHBJdGVtLT5sZW4pOwogICAgIH0KQEAgLTY0NiwzMCArNjQyLDMwIEBACiAKICAgICBwRnJhbWUtPnBIZHIgPSAoUFVXTEFOXzgwMjExSERSKXBGcmFtZS0+cEJ1ZjsKIAotICAgIC8vIEluZm9ybWF0aW9uIGVsZW1lbnRzCisgICAgLyogSW5mb3JtYXRpb24gZWxlbWVudHMgKi8KICAgICBwSXRlbSA9IChQV0xBTl9JRSkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpKTsKIAotICAgIHdoaWxlKCAoKFBCWVRFKXBJdGVtKSA8IChwRnJhbWUtPnBCdWYgKyBwRnJhbWUtPmxlbikgKSB7CisgICAgd2hpbGUgKCgoUEJZVEUpcEl0ZW0pIDwgKHBGcmFtZS0+cEJ1ZiArIHBGcmFtZS0+bGVuKSkgewogCiAgICAgICAgIHN3aXRjaCAocEl0ZW0tPmJ5RWxlbWVudElEKSB7Ci0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX1NTSUQ6Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFNTSUQgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcEZyYW1lLT5wU1NJRCA9IChQV0xBTl9JRV9TU0lEKXBJdGVtOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX1NTSUQ6CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wU1NJRCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHBGcmFtZS0+cFNTSUQgPSAoUFdMQU5fSUVfU1NJRClwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX1NVUFBfUkFURVM6Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFN1cHBSYXRlcyA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBwRnJhbWUtPnBTdXBwUmF0ZXMgPSAoUFdMQU5fSUVfU1VQUF9SQVRFUylwSXRlbTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTEFOX0VJRF9TVVBQX1JBVEVTOgorICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFN1cHBSYXRlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHBGcmFtZS0+cFN1cHBSYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKXBJdGVtOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfRVhUU1VQUF9SQVRFUzoKLSAgICAgICAgICAgICAgICBpZiAocEZyYW1lLT5wRXh0U3VwcFJhdGVzID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cEV4dFN1cHBSYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKXBJdGVtOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX0VYVFNVUFBfUkFURVM6CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wRXh0U3VwcFJhdGVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgcEZyYW1lLT5wRXh0U3VwcFJhdGVzID0gKFBXTEFOX0lFX1NVUFBfUkFURVMpcEl0ZW07CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJCYWQgRUlEPSVkZCBpbiBwcm9iZXJlcVxuIiwgcEl0ZW0tPmJ5RWxlbWVudElEKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkJhZCBFSUQ9JWRkIGluIHByb2JlcmVxXG4iLCBwSXRlbS0+YnlFbGVtZW50SUQpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBwSXRlbSA9IChQV0xBTl9JRSkoKChQQllURSlwSXRlbSkgKyAyICsgIHBJdGVtLT5sZW4pOwpAQCAtNjk3LDcgKzY5Myw3IEBACiB7CiAgICAgcEZyYW1lLT5wSGRyID0gKFBVV0xBTl84MDIxMUhEUilwRnJhbWUtPnBCdWY7CiAKLSAgICAvLyBGaXhlZCBGaWVsZHMKKyAgICAvKiBGaXhlZCBGaWVsZHMgKi8KICAgICBwRnJhbWUtPnBxd1RpbWVzdGFtcCA9IChQUVdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX1BST0JFUkVTUF9PRkZfVFMpOwogICAgIHBGcmFtZS0+cHdCZWFjb25JbnRlcnZhbCA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCkBAIC03MzQsNyArNzMwLDcgQEAKIAogICAgIHBGcmFtZS0+cEhkciA9IChQVVdMQU5fODAyMTFIRFIpcEZyYW1lLT5wQnVmOwogCi0gICAgLy8gRml4ZWQgRmllbGRzCisgICAgLyogRml4ZWQgRmllbGRzICovCiAgICAgcEZyYW1lLT5wcXdUaW1lc3RhbXAgPSAoUFFXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9QUk9CRVJFU1BfT0ZGX1RTKTsKICAgICBwRnJhbWUtPnB3QmVhY29uSW50ZXJ2YWwgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQpAQCAtNzQyLDgzICs3MzgsODIgQEAKICAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9QUk9CRVJFU1BfT0ZGX0NBUF9JTkZPKTsKIAotICAgIC8vIEluZm9ybWF0aW9uIGVsZW1lbnRzCisgICAgLyogSW5mb3JtYXRpb24gZWxlbWVudHMgKi8KICAgICBwSXRlbSA9IChQV0xBTl9JRSkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9QUk9CRVJFU1BfT0ZGX1NTSUQpOwogCi0gICAgd2hpbGUoICgoUEJZVEUpcEl0ZW0pIDwgKHBGcmFtZS0+cEJ1ZiArIHBGcmFtZS0+bGVuKSApIHsKKyAgICB3aGlsZSAoKChQQllURSlwSXRlbSkgPCAocEZyYW1lLT5wQnVmICsgcEZyYW1lLT5sZW4pKSB7CiAgICAgICAgIHN3aXRjaCAocEl0ZW0tPmJ5RWxlbWVudElEKSB7Ci0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX1NTSUQ6Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFNTSUQgPT0gTlVMTCkKKyAgICAgICAgY2FzZSBXTEFOX0VJRF9TU0lEOgorICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFNTSUQgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBwRnJhbWUtPnBTU0lEID0gKFBXTEFOX0lFX1NTSUQpcEl0ZW07Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX1NVUFBfUkFURVM6Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFN1cHBSYXRlcyA9PSBOVUxMKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0xBTl9FSURfU1VQUF9SQVRFUzoKKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBTdXBwUmF0ZXMgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBwRnJhbWUtPnBTdXBwUmF0ZXMgPSAoUFdMQU5fSUVfU1VQUF9SQVRFUylwSXRlbTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfRkhfUEFSTVM6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX0RTX1BBUk1TOgotICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBEU1Bhcm1zID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cERTUGFybXMgPSAoUFdMQU5fSUVfRFNfUEFSTVMpcEl0ZW07Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX0NGX1BBUk1TOgotICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBDRlBhcm1zID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cENGUGFybXMgPSAoUFdMQU5fSUVfQ0ZfUEFSTVMpcEl0ZW07Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX0lCU1NfUEFSTVM6Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cElCU1NQYXJtcyA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBwRnJhbWUtPnBJQlNTUGFybXMgPSAoUFdMQU5fSUVfSUJTU19QQVJNUylwSXRlbTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX0ZIX1BBUk1TOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0xBTl9FSURfRFNfUEFSTVM6CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wRFNQYXJtcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHBGcmFtZS0+cERTUGFybXMgPSAoUFdMQU5fSUVfRFNfUEFSTVMpcEl0ZW07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTEFOX0VJRF9DRl9QQVJNUzoKKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBDRlBhcm1zID09IE5VTEwpCisgICAgICAgICAgICAgICAgcEZyYW1lLT5wQ0ZQYXJtcyA9IChQV0xBTl9JRV9DRl9QQVJNUylwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX0lCU1NfUEFSTVM6CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wSUJTU1Bhcm1zID09IE5VTEwpCisgICAgICAgICAgICAgICAgcEZyYW1lLT5wSUJTU1Bhcm1zID0gKFBXTEFOX0lFX0lCU1NfUEFSTVMpcEl0ZW07CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgY2FzZSBXTEFOX0VJRF9SU046Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFJTTiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cFJTTiA9IChQV0xBTl9JRV9SU04pcEl0ZW07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXTEFOX0VJRF9SU05fV1BBOgotICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBSU05XUEEgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoV1BBYl9Jc19SU04oKFBXTEFOX0lFX1JTTl9FWFQpcEl0ZW0pID09IFRSVUUpCi0gICAgICAgICAgICAgICAgICAgICAgICBwRnJhbWUtPnBSU05XUEEgPSAoUFdMQU5fSUVfUlNOX0VYVClwSXRlbTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX0VSUDoKLSAgICAgICAgICAgICAgICBpZiAocEZyYW1lLT5wRVJQID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cEVSUCA9IChQV0xBTl9JRV9FUlApcEl0ZW07Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX0VYVFNVUFBfUkFURVM6Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cEV4dFN1cHBSYXRlcyA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBwRnJhbWUtPnBFeHRTdXBwUmF0ZXMgPSAoUFdMQU5fSUVfU1VQUF9SQVRFUylwSXRlbTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTEFOX0VJRF9SU046CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wUlNOID09IE5VTEwpCisgICAgICAgICAgICAgICAgcEZyYW1lLT5wUlNOID0gKFBXTEFOX0lFX1JTTilwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX1JTTl9XUEE6CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wUlNOV1BBID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoV1BBYl9Jc19SU04oKFBXTEFOX0lFX1JTTl9FWFQpcEl0ZW0pID09IFRSVUUpCisgICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cFJTTldQQSA9IChQV0xBTl9JRV9SU05fRVhUKXBJdGVtOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0xBTl9FSURfRVJQOgorICAgICAgICAgICAgaWYgKHBGcmFtZS0+cEVSUCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHBGcmFtZS0+cEVSUCA9IChQV0xBTl9JRV9FUlApcEl0ZW07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTEFOX0VJRF9FWFRTVVBQX1JBVEVTOgorICAgICAgICAgICAgaWYgKHBGcmFtZS0+cEV4dFN1cHBSYXRlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHBGcmFtZS0+cEV4dFN1cHBSYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKXBJdGVtOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfQ09VTlRSWTogICAgICAvLzcKLSAgICAgICAgICAgICAgICBpZiAocEZyYW1lLT5wSUVfQ291bnRyeSA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBwRnJhbWUtPnBJRV9Db3VudHJ5ID0gKFBXTEFOX0lFX0NPVU5UUlkpcEl0ZW07Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0xBTl9FSURfQ09VTlRSWTogICAgICAvKiA3ICovCisgICAgICAgICAgICBpZiAocEZyYW1lLT5wSUVfQ291bnRyeSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHBGcmFtZS0+cElFX0NvdW50cnkgPSAoUFdMQU5fSUVfQ09VTlRSWSlwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX1BXUl9DT05TVFJBSU5UOiAgIC8vMzIKLSAgICAgICAgICAgICAgICBpZiAocEZyYW1lLT5wSUVfUG93ZXJDb25zdHJhaW50ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cElFX1Bvd2VyQ29uc3RyYWludCA9IChQV0xBTl9JRV9QV19DT05TVClwSXRlbTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTEFOX0VJRF9QV1JfQ09OU1RSQUlOVDogICAvKiAzMiAqLworICAgICAgICAgICAgaWYgKHBGcmFtZS0+cElFX1Bvd2VyQ29uc3RyYWludCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHBGcmFtZS0+cElFX1Bvd2VyQ29uc3RyYWludCA9IChQV0xBTl9JRV9QV19DT05TVClwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX0NIX1NXSVRDSDogICAgLy8zNwotICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBJRV9DSFNXID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cElFX0NIU1cgPSAoUFdMQU5fSUVfQ0hfU1cpcEl0ZW07Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0xBTl9FSURfQ0hfU1dJVENIOiAgICAvKiAzNyAqLworICAgICAgICAgICAgaWYgKHBGcmFtZS0+cElFX0NIU1cgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwRnJhbWUtPnBJRV9DSFNXID0gKFBXTEFOX0lFX0NIX1NXKXBJdGVtOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfUVVJRVQ6ICAgICAgICAvLzQwCi0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cElFX1F1aWV0ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cElFX1F1aWV0ID0gKFBXTEFOX0lFX1FVSUVUKXBJdGVtOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX1FVSUVUOiAgICAgICAgLyogNDAgKi8KKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBJRV9RdWlldCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHBGcmFtZS0+cElFX1F1aWV0ID0gKFBXTEFOX0lFX1FVSUVUKXBJdGVtOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfSUJTU19ERlM6Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cElFX0lCU1NERlMgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcEZyYW1lLT5wSUVfSUJTU0RGUyA9IChQV0xBTl9JRV9JQlNTX0RGUylwSXRlbTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTEFOX0VJRF9JQlNTX0RGUzoKKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBJRV9JQlNTREZTID09IE5VTEwpCisgICAgICAgICAgICAgICAgcEZyYW1lLT5wSUVfSUJTU0RGUyA9IChQV0xBTl9JRV9JQlNTX0RGUylwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkJhZCBFSUQ9JWRkIGluIHByb2JlcmVzcFxuIiwgcEl0ZW0tPmJ5RWxlbWVudElEKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkJhZCBFSUQ9JWRkIGluIHByb2JlcmVzcFxuIiwgcEl0ZW0tPmJ5RWxlbWVudElEKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgcEl0ZW0gPSAoUFdMQU5fSUUpKCgoUEJZVEUpcEl0ZW0pICsgMiArICBwSXRlbS0+bGVuKTsKQEAgLTg0NSw3ICs4NDAsNyBAQAogewogICAgIHBGcmFtZS0+cEhkciA9IChQVVdMQU5fODAyMTFIRFIpcEZyYW1lLT5wQnVmOwogCi0gICAgLy8gRml4ZWQgRmllbGRzCisgICAgLyogRml4ZWQgRmllbGRzICovCiAgICAgcEZyYW1lLT5wd0F1dGhBbGdvcml0aG0gPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQVVUSEVOX09GRl9BVVRIX0FMRyk7CiAgICAgcEZyYW1lLT5wd0F1dGhTZXF1ZW5jZSA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCkBAIC04NTMsNyArODQ4LDYgQEAKICAgICBwRnJhbWUtPnB3U3RhdHVzID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQVVUSEVOX09GRl9TVEFUVVMpOwogICAgIHBGcmFtZS0+bGVuID0gV0xBTl9IRFJfQUREUjNfTEVOICsgV0xBTl9BVVRIRU5fT0ZGX1NUQVRVUyArIHNpemVvZigqKHBGcmFtZS0+cHdTdGF0dXMpKTsKLQogICAgIHJldHVybjsKIH0KIApAQCAtODc4LDcgKzg3Miw3IEBACiAKICAgICBwRnJhbWUtPnBIZHIgPSAoUFVXTEFOXzgwMjExSERSKXBGcmFtZS0+cEJ1ZjsKIAotICAgIC8vIEZpeGVkIEZpZWxkcworICAgIC8qIEZpeGVkIEZpZWxkcyAqLwogICAgIHBGcmFtZS0+cHdBdXRoQWxnb3JpdGhtID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FVVEhFTl9PRkZfQVVUSF9BTEcpOwogICAgIHBGcmFtZS0+cHdBdXRoU2VxdWVuY2UgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQpAQCAtODg2LDE0ICs4ODAsMTIgQEAKICAgICBwRnJhbWUtPnB3U3RhdHVzID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQVVUSEVOX09GRl9TVEFUVVMpOwogCi0gICAgLy8gSW5mb3JtYXRpb24gZWxlbWVudHMKKyAgICAvKiBJbmZvcm1hdGlvbiBlbGVtZW50cyAqLwogICAgIHBJdGVtID0gKFBXTEFOX0lFKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FVVEhFTl9PRkZfQ0hBTExFTkdFKTsKIAotICAgIGlmICgoKChQQllURSlwSXRlbSkgPCAocEZyYW1lLT5wQnVmICsgcEZyYW1lLT5sZW4pKSAmJiAocEl0ZW0tPmJ5RWxlbWVudElEID09IFdMQU5fRUlEX0NIQUxMRU5HRSkpIHsKKyAgICBpZiAoKCgoUEJZVEUpcEl0ZW0pIDwgKHBGcmFtZS0+cEJ1ZiArIHBGcmFtZS0+bGVuKSkgJiYgKHBJdGVtLT5ieUVsZW1lbnRJRCA9PSBXTEFOX0VJRF9DSEFMTEVOR0UpKQogICAgICAgICBwRnJhbWUtPnBDaGFsbGVuZ2UgPSAoUFdMQU5fSUVfQ0hBTExFTkdFKXBJdGVtOwotICAgIH0KLQogICAgIHJldHVybjsKIH0KIApAQCAtOTE2LDExICs5MDgsMTAgQEAKIHsKICAgICBwRnJhbWUtPnBIZHIgPSAoUFVXTEFOXzgwMjExSERSKXBGcmFtZS0+cEJ1ZjsKIAotICAgIC8vIEZpeGVkIEZpZWxkcworICAgIC8qIEZpeGVkIEZpZWxkcyAqLwogICAgIHBGcmFtZS0+cHdSZWFzb24gPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9ERUFVVEhFTl9PRkZfUkVBU09OKTsKICAgICBwRnJhbWUtPmxlbiA9IFdMQU5fSERSX0FERFIzX0xFTiArIFdMQU5fREVBVVRIRU5fT0ZGX1JFQVNPTiArIHNpemVvZigqKHBGcmFtZS0+cHdSZWFzb24pKTsKLQogICAgIHJldHVybjsKIH0KIApAQCAtOTQzLDEwICs5MzQsOSBAQAogewogICAgIHBGcmFtZS0+cEhkciA9IChQVVdMQU5fODAyMTFIRFIpcEZyYW1lLT5wQnVmOwogCi0gICAgLy8gRml4ZWQgRmllbGRzCisgICAgLyogRml4ZWQgRmllbGRzICovCiAgICAgcEZyYW1lLT5wd1JlYXNvbiA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0RFQVVUSEVOX09GRl9SRUFTT04pOwotCiAgICAgcmV0dXJuOwogfQogCkBAIC05NjksNyArOTU5LDcgQEAKIHsKICAgICBwRnJhbWUtPnBIZHIgPSAoUFVXTEFOXzgwMjExSERSKXBGcmFtZS0+cEJ1ZjsKIAotICAgIC8vIEZpeGVkIEZpZWxkcworICAgIC8qIEZpeGVkIEZpZWxkcyAqLwogICAgIHBGcmFtZS0+cHdDYXBJbmZvID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX1JFQVNTT0NSRVNQX09GRl9DQVBfSU5GTyk7CiAgICAgcEZyYW1lLT5wd1N0YXR1cyA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCkBAIC05NzgsNyArOTY4LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fUkVBU1NPQ1JFU1BfT0ZGX0FJRCk7CiAKICAgICBwRnJhbWUtPmxlbiA9IFdMQU5fSERSX0FERFIzX0xFTiArIFdMQU5fUkVBU1NPQ1JFU1BfT0ZGX0FJRCArIHNpemVvZigqKHBGcmFtZS0+cHdBaWQpKTsKLQogICAgIHJldHVybjsKIH0KIApAQCAtMTAwNCw3ICs5OTMsNyBAQAogCiAgICAgcEZyYW1lLT5wSGRyID0gKFBVV0xBTl84MDIxMUhEUilwRnJhbWUtPnBCdWY7CiAKLSAgICAvLyBGaXhlZCBGaWVsZHMKKyAgICAvKiBGaXhlZCBGaWVsZHMgKi8KICAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9SRUFTU09DUkVTUF9PRkZfQ0FQX0lORk8pOwogICAgIHBGcmFtZS0+cHdTdGF0dXMgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQpAQCAtMTAxMiwxNSArMTAwMSwxNCBAQAogICAgIHBGcmFtZS0+cHdBaWQgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9SRUFTU09DUkVTUF9PRkZfQUlEKTsKIAotICAgIC8vSW5mb3JtYXRpb24gZWxlbWVudHMKKyAgICAvKiBJbmZvcm1hdGlvbiBlbGVtZW50cyAqLwogICAgIHBGcmFtZS0+cFN1cHBSYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX1JFQVNTT0NSRVNQX09GRl9TVVBQX1JBVEVTKTsKIAogICAgIHBJdGVtID0gKFBXTEFOX0lFKShwRnJhbWUtPnBTdXBwUmF0ZXMpOwogICAgIHBJdGVtID0gKFBXTEFOX0lFKSgoKFBCWVRFKXBJdGVtKSArIDIgKyBwSXRlbS0+bGVuKTsKIAotICAgIGlmICgoKChQQllURSlwSXRlbSkgPCAocEZyYW1lLT5wQnVmICsgcEZyYW1lLT5sZW4pKSAmJiAocEl0ZW0tPmJ5RWxlbWVudElEID09IFdMQU5fRUlEX0VYVFNVUFBfUkFURVMpKSB7CisgICAgaWYgKCgoKFBCWVRFKXBJdGVtKSA8IChwRnJhbWUtPnBCdWYgKyBwRnJhbWUtPmxlbikpICYmIChwSXRlbS0+YnlFbGVtZW50SUQgPT0gV0xBTl9FSURfRVhUU1VQUF9SQVRFUykpCiAgICAgICAgIHBGcmFtZS0+cEV4dFN1cHBSYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKXBJdGVtOwotICAgIH0KICAgICByZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2LzgwMjExbWdyLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2LzgwMjExbWdyLmgKaW5kZXggYzE0MGE5NS4uM2Q1N2Y3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni84MDIxMW1nci5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvODAyMTFtZ3IuaApAQCAtMTksNyArMTksNyBAQAogICoKICAqIEZpbGU6IDgwMjExbWdyLmgKICAqCi0gKiBQdXJwb3NlOiA4MDIuMTEgbWFuYWdtZW50IGZyYW1lcyBwcmUtZGVmaW5lcy4KKyAqIFB1cnBvc2U6IDgwMi4xMSBtYW5hZ2VtZW50IGZyYW1lcyBwcmUtZGVmaW5lcy4KICAqCiAgKgogICogQXV0aG9yOiBMeW5kb24gQ2hlbgpAQCAtMjIyLDQ2ICsyMjIsMzkgQEAKICNkZWZpbmUgTUVBU1VSRV9NT0RFX0lOQ0FQQUJMRSAgMHgwMgogI2RlZmluZSBNRUFTVVJFX01PREVfUkVGVVNFRCAgICAweDA0CiAKLQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IENsYXNzZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IFZhcmlhYmxlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IFR5cGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0KIC8vIEluZm9ybWF0aW9uIEVsZW1lbnQgVHlwZXMKIAogI3ByYWdtYSBwYWNrKDEpCiB0eXBlZGVmIHN0cnVjdCB0YWdXTEFOX0lFIHsKICAgICBCWVRFICAgYnlFbGVtZW50SUQ7CiAgICAgQllURSAgIGxlbjsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFdMQU5fSUUsICpQV0xBTl9JRTsKIAotCiAvLyBTZXJ2aWNlIFNldCBJZGVudGl0eSAoU1NJRCkKICNwcmFnbWEgcGFjaygxKQogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl9JRV9TU0lEIHsKICAgICBCWVRFICAgYnlFbGVtZW50SUQ7CiAgICAgQllURSAgIGxlbjsKICAgICBCWVRFICAgYWJ5U1NJRFsxXTsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFdMQU5fSUVfU1NJRCwgKlBXTEFOX0lFX1NTSUQ7CiAKLQogLy8gU3VwcG9ydGVkIFJhdGVzCiAjcHJhZ21hIHBhY2soMSkKIHR5cGVkZWYgc3RydWN0IHRhZ1dMQU5fSUVfU1VQUF9SQVRFUyB7CiAgICAgQllURSAgIGJ5RWxlbWVudElEOwogICAgIEJZVEUgICBsZW47CiAgICAgQllURSAgIGFieVJhdGVzWzFdOwotfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogV0xBTl9JRV9TVVBQX1JBVEVTLCAgKlBXTEFOX0lFX1NVUFBfUkFURVM7CiAKLQotCiAvLyBGSCBQYXJhbWV0ZXIgU2V0CiAjcHJhZ21hIHBhY2soMSkKIHR5cGVkZWYgc3RydWN0IF9XTEFOX0lFX0ZIX1BBUk1TIHsKQEAgLTI3OSwxMCArMjcyLDkgQEAKICAgICBCWVRFICAgYnlFbGVtZW50SUQ7CiAgICAgQllURSAgIGxlbjsKICAgICBCWVRFICAgYnlDdXJyQ2hhbm5lbDsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFdMQU5fSUVfRFNfUEFSTVMsICAqUFdMQU5fSUVfRFNfUEFSTVM7CiAKLQogLy8gQ0YgUGFyYW1ldGVyIFNldAogI3ByYWdtYSBwYWNrKDEpCiB0eXBlZGVmIHN0cnVjdCB0YWdXTEFOX0lFX0NGX1BBUk1TIHsKQEAgLTI5MiwxMCArMjg0LDkgQEAKICAgICBCWVRFICAgYnlDRlBQZXJpb2Q7CiAgICAgV09SRCAgIHdDRlBNYXhEdXJhdGlvbjsKICAgICBXT1JEICAgd0NGUER1clJlbWFpbmluZzsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFdMQU5fSUVfQ0ZfUEFSTVMsICAqUFdMQU5fSUVfQ0ZfUEFSTVM7CiAKLQogLy8gVElNCiAjcHJhZ21hIHBhY2soMSkKIHR5cGVkZWYgc3RydWN0IHRhZ1dMQU5fSUVfVElNIHsKQEAgLTMwNSwzMCArMjk2LDI3IEBACiAgICAgQllURSAgIGJ5RFRJTVBlcmlvZDsKICAgICBCWVRFICAgYnlCaXRNYXBDdGw7CiAgICAgQllURSAgIGJ5VmlydEJpdE1hcFsxXTsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFdMQU5fSUVfVElNLCAgKlBXTEFOX0lFX1RJTTsKIAotCiAvLyBJQlNTIFBhcmFtZXRlciBTZXQKICNwcmFnbWEgcGFjaygxKQogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl9JRV9JQlNTX1BBUk1TIHsKICAgICBCWVRFICAgYnlFbGVtZW50SUQ7CiAgICAgQllURSAgIGxlbjsKICAgICBXT1JEICAgd0FUSU1XaW5kb3c7Ci19X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQorfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBXTEFOX0lFX0lCU1NfUEFSTVMsICpQV0xBTl9JRV9JQlNTX1BBUk1TOwogCi0KIC8vIENoYWxsZW5nZSBUZXh0CiAjcHJhZ21hIHBhY2soMSkKIHR5cGVkZWYgc3RydWN0IHRhZ1dMQU5fSUVfQ0hBTExFTkdFIHsKICAgICBCWVRFICAgYnlFbGVtZW50SUQ7CiAgICAgQllURSAgIGxlbjsKICAgICBCWVRFICAgYWJ5Q2hhbGxlbmdlWzFdOwotfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogV0xBTl9JRV9DSEFMTEVOR0UsICAqUFdMQU5fSUVfQ0hBTExFTkdFOwogCi0KICNwcmFnbWEgcGFjaygxKQogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl9JRV9SU05fRVhUIHsKICAgICBCWVRFIGJ5RWxlbWVudElEOwpAQCAtMzkxLDEwICszNzksOSBAQAogICAgIEJZVEUgICBieUVsZW1lbnRJRDsKICAgICBCWVRFICAgbGVuOwogICAgIEJZVEUgICBieUNvbnRleHQ7Ci19X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQorfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBXTEFOX0lFX0VSUCwgICpQV0xBTl9JRV9FUlA7CiAKLQogI3ByYWdtYSBwYWNrKDEpCiB0eXBlZGVmIHN0cnVjdCBfTUVBU0VVUkVfUkVRIHsKICAgICBCWVRFICAgICAgICAgICAgICAgIGJ5Q2hhbm5lbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvYWVzX2NjbXAuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvYWVzX2NjbXAuYwppbmRleCBiM2QzNjdiLi5mN2EzYjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2Flc19jY21wLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9hZXNfY2NtcC5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotdm9pZCB4b3JfMTI4KEJZVEUgKmEsIEJZVEUgKmIsIEJZVEUgKm91dCkKK3N0YXRpYyB2b2lkIHhvcl8xMjgoQllURSAqYSwgQllURSAqYiwgQllURSAqb3V0KQogewogCVBEV09SRCBkd1B0ckEgPSAoUERXT1JEKSBhOwogCVBEV09SRCBkd1B0ckIgPSAoUERXT1JEKSBiOwpAQCAtMTE5LDcgKzExOSw3IEBACiB9CiAKIAotdm9pZCB4b3JfMzIoQllURSAqYSwgQllURSAqYiwgQllURSAqb3V0KQorc3RhdGljIHZvaWQgeG9yXzMyKEJZVEUgKmEsIEJZVEUgKmIsIEJZVEUgKm91dCkKIHsKIAlQRFdPUkQgZHdQdHJBID0gKFBEV09SRCkgYTsKIAlQRFdPUkQgZHdQdHJCID0gKFBEV09SRCkgYjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvYmFzZWJhbmQuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvYmFzZWJhbmQuYwppbmRleCBkM2RlOTRmLi4yOTkwMjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2Jhc2ViYW5kLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9iYXNlYmFuZC5jCkBAIC05ODksMTAgKzk4OSwxMCBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi1CT09MCi1CQmJWVDMxODRJbml0IChQU0RldmljZSBwRGV2aWNlKQorCitCT09MIEJCYlZUMzE4NEluaXQoUFNEZXZpY2UgcERldmljZSkKIHsKLSAgICBOVFNUQVRVUyAgICAgICAgICAgICAgICBudFN0YXR1czsKKwlpbnQgbnRTdGF0dXM7CiAgICAgV09SRCAgICAgICAgICAgICAgICAgICAgd0xlbmd0aDsKICAgICBQQllURSAgICAgICAgICAgICAgICAgICBwYnlBZGRyOwogICAgIFBCWVRFICAgICAgICAgICAgICAgICAgIHBieUFnYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvYmFzZWJhbmQuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvYmFzZWJhbmQuaAppbmRleCBiYzQ2MzNkLi44ZGI4Y2QwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2Jhc2ViYW5kLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9iYXNlYmFuZC5oCkBAIC0xMDQsMTYgKzEwNCwxMyBAQAogICAgICBXT1JEIHdSYXRlCiAgICAgKTsKIAotdm9pZAotQkJ2Q2FjdWxhdGVQYXJhbWV0ZXIgKAotICAgICAgUFNEZXZpY2UgcERldmljZSwKLSAgICAgIHVuc2lnbmVkIGludCBjYkZyYW1lTGVuZ3RoLAotICAgICAgV09SRCB3UmF0ZSwKLSAgICAgIEJZVEUgYnlQYWNrZXRUeXBlLAotICAgICBQV09SRCBwd1BoeUxlbiwKLSAgICAgUEJZVEUgcGJ5UGh5U3J2LAotICAgICBQQllURSBwYnlQaHlTZ24KLSAgICApOwordm9pZCBCQnZDYWN1bGF0ZVBhcmFtZXRlcihQU0RldmljZSBwRGV2aWNlLAorCQkJICB1bnNpZ25lZCBpbnQgY2JGcmFtZUxlbmd0aCwKKwkJCSAgV09SRCB3UmF0ZSwKKwkJCSAgQllURSBieVBhY2tldFR5cGUsCisJCQkgIFBXT1JEIHB3UGh5TGVuLAorCQkJICBQQllURSBwYnlQaHlTcnYsCisJCQkgIFBCWVRFIHBieVBoeVNnbik7CiAKIC8vIHRpbWVyIGZvciBhbnRlbm5hIGRpdmVyc2l0eQogCkBAIC0xMjgsNyArMTI1LDcgQEAKIHZvaWQgQkJ2U2V0U2hvcnRTbG90VGltZShQU0RldmljZSBwRGV2aWNlKTsKIHZvaWQgQkJ2U2V0VkdBR2Fpbk9mZnNldChQU0RldmljZSBwRGV2aWNlLCBCWVRFIGJ5RGF0YSk7CiB2b2lkIEJCdlNldEFudGVubmFNb2RlKFBTRGV2aWNlIHBEZXZpY2UsIEJZVEUgYnlBbnRlbm5hTW9kZSk7Ci1CT09MIEJCYlZUMzE4NEluaXQgKFBTRGV2aWNlIHBEZXZpY2UpOworQk9PTCBCQmJWVDMxODRJbml0KFBTRGV2aWNlIHBEZXZpY2UpOwogdm9pZCBCQnZTZXREZWVwU2xlZXAoUFNEZXZpY2UgcERldmljZSk7CiB2b2lkIEJCdkV4aXREZWVwU2xlZXAoUFNEZXZpY2UgcERldmljZSk7CiB2b2lkIEJCdlVwZGF0ZVByZUVEVGhyZXNob2xkKApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9ic3NkYi5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9ic3NkYi5jCmluZGV4IDM2ZWQ2MWIuLmE5ZjY4YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvYnNzZGIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2Jzc2RiLmMKQEAgLTkzLDEwICs5Myw3IEBACiAKIHZvaWQgc192Q2hlY2tTZW5zaXRpdml0eSh2b2lkICpoRGV2aWNlQ29udGV4dCk7CiB2b2lkIHNfdkNoZWNrUHJlRURUaHJlc2hvbGQodm9pZCAqaERldmljZUNvbnRleHQpOwotCi0jaWZkZWYgQ2FsY3VfTGlua1F1YWwKIHZvaWQgc191Q2FsY3VsYXRlTGlua1F1YWwodm9pZCAqaERldmljZUNvbnRleHQpOwotI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgVmFyaWFibGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTEzNSw3ICsxMzIsNyBAQAogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIkJTU3BTZWFyY2hCU1NMaXN0IEJTU0lEWyUwMlggJTAyWCAlMDJYLSUwMlggJTAyWCAlMDJYXVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGJ5RGVzaXJlQlNTSUQsKihwYnlEZXNpcmVCU1NJRCsxKSwqKHBieURlc2lyZUJTU0lEKzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICoocGJ5RGVzaXJlQlNTSUQrMyksKihwYnlEZXNpcmVCU1NJRCs0KSwqKHBieURlc2lyZUJTU0lEKzUpKTsKLSAgICAgICAgaWYgKCghSVNfQlJPQURDQVNUX0FERFJFU1MocGJ5RGVzaXJlQlNTSUQpKSAmJgorCWlmICgoIWlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKHBieURlc2lyZUJTU0lEKSkgJiYKIAkgICAgIChtZW1jbXAocGJ5RGVzaXJlQlNTSUQsIFplcm9CU1NJRCwgNikhPSAwKSl7CiAgICAgICAgICAgICBwYnlCU1NJRCA9IHBieURlc2lyZUJTU0lEOwogICAgICAgICB9CkBAIC0xNTYsNyArMTUzLDcgQEAKIAogICAgICAgICAgICAgaWYgKChwQ3VyckJTUy0+YkFjdGl2ZSkgJiYKICAgICAgICAgICAgICAgICAocEN1cnJCU1MtPmJTZWxlY3RlZCA9PSBGQUxTRSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoSVNfRVRIX0FERFJFU1NfRVFVQUwocEN1cnJCU1MtPmFieUJTU0lELCBwYnlCU1NJRCkpIHsKKwkJICAgIGlmICghY29tcGFyZV9ldGhlcl9hZGRyKHBDdXJyQlNTLT5hYnlCU1NJRCwgcGJ5QlNTSUQpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwU1NJRCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb21wYXJlIHNzaWQKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIW1lbWNtcChwU1NJRC0+YWJ5U1NJRCwKQEAgLTI5Niw3ICsyOTMsOCBAQAogICAgIGZvciAoaWkgPSAwOyBpaSA8IE1BWF9CU1NfTlVNOyBpaSsrKSB7CiAgICAgICAgIGlmIChiS2VlcEN1cnJCU1NJRCkgewogICAgICAgICAgICAgaWYgKHBNZ210LT5zQlNTTGlzdFtpaV0uYkFjdGl2ZSAmJgotICAgICAgICAgICAgICAgIElTX0VUSF9BRERSRVNTX0VRVUFMKHBNZ210LT5zQlNTTGlzdFtpaV0uYWJ5QlNTSUQsIHBNZ210LT5hYnlDdXJyQlNTSUQpKSB7CisJCSFjb21wYXJlX2V0aGVyX2FkZHIocE1nbXQtPnNCU1NMaXN0W2lpXS5hYnlCU1NJRCwKKwkJCQkgICAgcE1nbXQtPmFieUN1cnJCU1NJRCkpIHsKICAvL21pa2UgbWFyazogdGhlcmUgYXJlIHR3byBzYW1lIEJTU0lEIGluIGxpc3QgaWYgdGhhdCBBUCBpcyBpbiBoaWRkZW4gc3NpZCBtb2RlLG9uZSAncyBTU0lEIGlzIG51bGwsCiAgLy8gICAgICAgICAgICAgICAgIGJ1dCBvdGhlcidzIGlzIG9idmlvdXMsIHNvIGlmIGl0IGFjc3NvY2lhdGUgd2l0aCB5b3VyIFNUQSAgZXhhY3RseSx5b3UgbXVzdCBrZWVwIHR3bwogIC8vICAgICAgICAgICAgICAgICBvZiB0aGVtISEhISEhISEhCkBAIC0zNDEsNyArMzM5LDcgQEAKICAgICBmb3IgKGlpID0gMDsgaWkgPCBNQVhfQlNTX05VTTsgaWkrKykgewogICAgICAgICBwQlNTTGlzdCA9ICYocE1nbXQtPnNCU1NMaXN0W2lpXSk7CiAgICAgICAgIGlmIChwQlNTTGlzdC0+YkFjdGl2ZSkgewotICAgICAgICAgICAgaWYgKElTX0VUSF9BRERSRVNTX0VRVUFMKHBCU1NMaXN0LT5hYnlCU1NJRCwgYWJ5QlNTSUQpKSB7CisJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKHBCU1NMaXN0LT5hYnlCU1NJRCwgYWJ5QlNTSUQpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHBTU0lELT5sZW4gPT0gKChQV0xBTl9JRV9TU0lEKXBCU1NMaXN0LT5hYnlTU0lEKS0+bGVuKXsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1lbWNtcChwU1NJRC0+YWJ5U1NJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBXTEFOX0lFX1NTSUQpcEJTU0xpc3QtPmFieVNTSUQpLT5hYnlTU0lELApAQCAtNjk5LDEyICs2OTcsMTQgQEAKICAgICAgICAgcEJTU0xpc3QtPmJ5UlNTSVN0YXRDbnQgJT0gUlNTSV9TVEFUX0NPVU5UOwogICAgICAgICBwQlNTTGlzdC0+bGRCbUF2ZXJhZ2VbcEJTU0xpc3QtPmJ5UlNTSVN0YXRDbnRdID0gbGRCbTsKICAgICAgICAgbGRCbVN1bSA9IDA7Ci0gICAgICAgIGZvcihpaT0wLCBqaj0wO2lpPFJTU0lfU1RBVF9DT1VOVDtpaSsrKSB7Ci0gICAgICAgICAgICBpZiAocEJTU0xpc3QtPmxkQm1BdmVyYWdlW2lpXSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgcEJTU0xpc3QtPmxkQm1NQVggPSBtYXgocEJTU0xpc3QtPmxkQm1BdmVyYWdlW2lpXSwgbGRCbSk7Ci0gICAgICAgICAgICAgICAgbGRCbVN1bSArPSBwQlNTTGlzdC0+bGRCbUF2ZXJhZ2VbaWldOwotICAgICAgICAgICAgICAgIGpqKys7Ci0gICAgICAgICAgICB9CisJZm9yIChpaSA9IDAsIGpqID0gMDsgaWkgPCBSU1NJX1NUQVRfQ09VTlQ7IGlpKyspIHsKKwkJaWYgKHBCU1NMaXN0LT5sZEJtQXZlcmFnZVtpaV0gIT0gMCkgeworCQkJcEJTU0xpc3QtPmxkQm1NQVggPQorCQkJCW1heChwQlNTTGlzdC0+bGRCbUF2ZXJhZ2VbaWldLCBsZEJtKTsKKwkJCWxkQm1TdW0gKz0KKwkJCQlwQlNTTGlzdC0+bGRCbUF2ZXJhZ2VbaWldOworCQkJamorKzsKKwkJfQogICAgICAgICB9CiAgICAgICAgIHBCU1NMaXN0LT5sZEJtQXZlclJhbmdlID0gbGRCbVN1bSAvamo7CiAgICAgfQpAQCAtNzE0LDI4ICs3MTQsNiBAQAogICAgICAgICBwQlNTTGlzdC0+dUlFTGVuZ3RoID0gV0xBTl9CRUFDT05fRlJfTUFYTEVOOwogICAgIG1lbWNweShwQlNTTGlzdC0+YWJ5SUVzLCBwYnlJRXMsIHBCU1NMaXN0LT51SUVMZW5ndGgpOwogCi0vL21pa2UgYWRkOiBpZiAgdGhlIEFQIGluIHRoaXMgcEJTU0xpc3QgaXMgaGlkZGVuIHNzaWQgYW5kIHdlIGNhbiBmaW5kIHR3byBvZiB0aGVtLAotLy8gICAgICAgICAgICAgICAgICB5b3UgbmVlZCB1cGdyYWRlIHRoZSBvdGhlciByZWxhdGVkIHBCU1NMaXN0IG9mIHdoaWNoIHNzaWQgaXMgb2J2aW91cywKLS8vICAgICAgICAgICAgICAgICAgZm9yIHRoZXNlIHR3byBBUCBpcyB0aGUgc2FtZSBvbmUhISEhCi0vKioqKioqKipqdWRnZSBieTpCU1NJRCBpcyB0aGUgc2FtZSxidXQgc3NpZCBpcyBkaWZmZXJlbnQhKioqKioqKioqKioqKioqKiovCi0jaWYgMAotICAgZm9yIChpaSA9IDA7IGlpIDwgTUFYX0JTU19OVU07IGlpKyspIHsKLSAgICAgIGlmIChJU19FVEhfQUREUkVTU19FUVVBTChwTWdtdC0+c0JTU0xpc3RbaWldLmFieUJTU0lELCBwQlNTTGlzdC0+YWJ5QlNTSUQpKSB7ICAgLy9CU1NJRCBpcyB0aGUgc2FtZSEKLSAgICAgICAgIGlmIChtZW1jbXAoKChQV0xBTl9JRV9TU0lEKXBNZ210LT5zQlNTTGlzdFtpaV0uYWJ5U1NJRCktPmFieVNTSUQsICAgICAgICAgICAgICAgICAgLy9zc2lkIGlzIGRpZmZlcmVudD8/Ci0JCSAJICAgICAgKChQV0xBTl9JRV9TU0lEKXBCU1NMaXN0LT5hYnlTU0lEKS0+YWJ5U1NJRCwKLQkJIAkgICAgICAoKFBXTEFOX0lFX1NTSUQpcEJTU0xpc3QtPmFieVNTSUQpLT5sZW4pICE9IDApIHsKLSAgICAgICAgICAgICAgICAgIC8vcmVzZXJ2ZSB0ZW1wCi0gICAgICAgICAgICAgICBtZW1zZXQoYWJ5VG1wU1NJRCwwLHNpemVvZihhYnlUbXBTU0lEKSk7Ci0JICAgICAgbWVtY3B5KGFieVRtcFNTSUQscE1nbXQtPnNCU1NMaXN0W2lpXS5hYnlTU0lELHNpemVvZihhYnlUbXBTU0lEKSk7Ci0JCSAgLy91cGdyYWRlIHRoZSBvdGhlciBvbmUgcEJTU0xpc3QKLQkgICAgICBtZW1jcHkoJihwTWdtdC0+c0JTU0xpc3RbaWldKSxwQlNTTGlzdCxzaXplb2YoS25vd25CU1MpKTsKLQkJICAvL3JlY292ZXIgc3NpZCBpbmZvCi0JICAgICAgbWVtY3B5KHBNZ210LT5zQlNTTGlzdFtpaV0uYWJ5U1NJRCxhYnlUbXBTU0lELHNpemVvZihhYnlUbXBTU0lEKSk7Ci0gICAgICAgICAgIH0KLSAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KICAgICByZXR1cm4gVFJVRTsKIH0KIApAQCAtNzU1LDcgKzczMyw3IEBACiAKIEJPT0wgQlNTYklzU1RBSW5Ob2RlREIodm9pZCAqaERldmljZUNvbnRleHQsCiAJCSAgICAgICBQQllURSBhYnlEc3RBZGRyLAotCQkgICAgICAgUFVJTlQgcHVOb2RlSW5kZXgpCisJCSAgICAgICB1bnNpZ25lZCBpbnQgKnB1Tm9kZUluZGV4KQogewogICAgIFBTRGV2aWNlICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKWhEZXZpY2VDb250ZXh0OwogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9ICYocERldmljZS0+c01nbXRPYmopOwpAQCAtNzY0LDcgKzc0Miw4IEBACiAgICAgLy8gSW5kZXggPSAwIHJlc2VydmVkIGZvciBBUCBOb2RlCiAgICAgZm9yIChpaSA9IDE7IGlpIDwgKE1BWF9OT0RFX05VTSArIDEpOyBpaSsrKSB7CiAgICAgICAgIGlmIChwTWdtdC0+c05vZGVEQlRhYmxlW2lpXS5iQWN0aXZlKSB7Ci0gICAgICAgICAgICBpZiAoSVNfRVRIX0FERFJFU1NfRVFVQUwoYWJ5RHN0QWRkciwgcE1nbXQtPnNOb2RlREJUYWJsZVtpaV0uYWJ5TUFDQWRkcikpIHsKKwkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIoYWJ5RHN0QWRkciwKKwkJCQkJcE1nbXQtPnNOb2RlREJUYWJsZVtpaV0uYWJ5TUFDQWRkcikpIHsKICAgICAgICAgICAgICAgICAqcHVOb2RlSW5kZXggPSBpaTsKICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKICAgICAgICAgICAgIH0KQEAgLTc4Niw3ICs3NjUsNyBAQAogICogICAgTm9uZQogICoKIC0qLwotdm9pZCBCU1N2Q3JlYXRlT25lTm9kZSh2b2lkICpoRGV2aWNlQ29udGV4dCwgUFVJTlQgcHVOb2RlSW5kZXgpCit2b2lkIEJTU3ZDcmVhdGVPbmVOb2RlKHZvaWQgKmhEZXZpY2VDb250ZXh0LCB1bnNpZ25lZCBpbnQgKnB1Tm9kZUluZGV4KQogewogCiAgICAgUFNEZXZpY2UgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpaERldmljZUNvbnRleHQ7CkBAIC0xMDIzLDcgKzEwMDIsNiBAQAogICAgCXBEZXZpY2UtPmJ5UmVBc3NvY0NvdW50ID0gMDsKIH0KIAotI2lmZGVmIFNuZEV2dF9Ub0FQSQogaWYoKHBNZ210LT5lQ3VyclN0YXRlIT1XTUFDX1NUQVRFX0FTU09DKSAmJgogICAgICAocE1nbXQtPmVMYXN0U3RhdGU9PVdNQUNfU1RBVEVfQVNTT0MpKQogewpAQCAtMTAzMywxMSArMTAxMSw4IEBACiAgIHdpcmVsZXNzX3NlbmRfZXZlbnQocERldmljZS0+ZGV2LCBJV0VWQ1VTVE9NLCAmd3JxdSwgTlVMTCk7CiB9CiAgcE1nbXQtPmVMYXN0U3RhdGUgPSBwTWdtdC0+ZUN1cnJTdGF0ZSA7Ci0jZW5kaWYKIAotI2lmZGVmIENhbGN1X0xpbmtRdWFsCiAgICBzX3VDYWxjdWxhdGVMaW5rUXVhbCgodm9pZCAqKXBEZXZpY2UpOwotI2VuZGlmCiAKICAgICBmb3IgKGlpID0gMDsgaWkgPCAoTUFYX05PREVfTlVNICsgMSk7IGlpKyspIHsKIApAQCAtMTQyMiwyMSArMTM5NywyNSBAQAogICAgICAgICAgICAgICAgICAgICAgKHdSYXRlIDwgUkFURV8xOE0pICkgewogICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlWzBdLnVUeEZhaWxbd1JhdGVdKz1ieVR4UmV0cnk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChieUZhbGxCYWNrID09IEFVVE9fRkJfMCkgewotICAgICAgICAgICAgICAgICAgICBmb3IoaWk9MDtpaTxieVR4UmV0cnk7aWkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlpIDwgNSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3RmFsbEJhY2tSYXRlID0gYXdIV1JldHJ5MFt3UmF0ZS1SQVRFXzE4TV1baWldOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdGYWxsQmFja1JhdGUgPSBhd0hXUmV0cnkwW3dSYXRlLVJBVEVfMThNXVs0XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0udVR4RmFpbFt3RmFsbEJhY2tSYXRlXSsrOwotICAgICAgICAgICAgICAgICAgICB9CisJCQlmb3IgKGlpID0gMDsgaWkgPCBieVR4UmV0cnk7IGlpKyspIHsKKwkJCQlpZiAoaWkgPCA1KQorCQkJCQl3RmFsbEJhY2tSYXRlID0KKwkJCQkJCWF3SFdSZXRyeTBbd1JhdGUtUkFURV8xOE1dW2lpXTsKKwkJCQllbHNlCisJCQkJCXdGYWxsQmFja1JhdGUgPQorCQkJCQkJYXdIV1JldHJ5MFt3UmF0ZS1SQVRFXzE4TV1bNF07CisJCQkJcE1nbXQtPnNOb2RlREJUYWJsZVswXS51VHhGYWlsW3dGYWxsQmFja1JhdGVdKys7CisJCQl9CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChieUZhbGxCYWNrID09IEFVVE9fRkJfMSkgewotICAgICAgICAgICAgICAgICAgICBmb3IoaWk9MDtpaTxieVR4UmV0cnk7aWkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlpIDwgNSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3RmFsbEJhY2tSYXRlID0gYXdIV1JldHJ5MVt3UmF0ZS1SQVRFXzE4TV1baWldOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdGYWxsQmFja1JhdGUgPSBhd0hXUmV0cnkxW3dSYXRlLVJBVEVfMThNXVs0XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0udVR4RmFpbFt3RmFsbEJhY2tSYXRlXSsrOwotICAgICAgICAgICAgICAgICAgICB9CisJCQlmb3IgKGlpID0gMDsgaWkgPCBieVR4UmV0cnk7IGlpKyspIHsKKwkJCQlpZiAoaWkgPCA1KQorCQkJCQl3RmFsbEJhY2tSYXRlID0KKwkJCQkJCWF3SFdSZXRyeTFbd1JhdGUtUkFURV8xOE1dW2lpXTsKKwkJCQllbHNlCisJCQkJCXdGYWxsQmFja1JhdGUgPQorCQkJCQkJYXdIV1JldHJ5MVt3UmF0ZS1SQVRFXzE4TV1bNF07CisJCQkJcE1nbXQtPnNOb2RlREJUYWJsZVswXS51VHhGYWlsW3dGYWxsQmFja1JhdGVdKys7CisJCQl9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9OwpAQCAtMTQ3NiwyMSArMTQ1NSwyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICh3UmF0ZSA8IFJBVEVfMThNKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0udVR4RmFpbFt3UmF0ZV0rPWJ5VHhSZXRyeTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChieUZhbGxCYWNrID09IEFVVE9fRkJfMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGlpPTA7aWk8YnlUeFJldHJ5O2lpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWkgPCA1KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3RmFsbEJhY2tSYXRlID0gYXdIV1JldHJ5MFt3UmF0ZS1SQVRFXzE4TV1baWldOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0ZhbGxCYWNrUmF0ZSA9IGF3SFdSZXRyeTBbd1JhdGUtUkFURV8xOE1dWzRdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0udVR4RmFpbFt3RmFsbEJhY2tSYXRlXSsrOworCQkJZm9yIChpaSA9IDA7IGlpIDwgYnlUeFJldHJ5OyBpaSsrKSB7CisJCQkJaWYgKGlpIDwgNSkKKwkJCQkJd0ZhbGxCYWNrUmF0ZSA9CisJCQkJCQlhd0hXUmV0cnkwW3dSYXRlLVJBVEVfMThNXVtpaV07CisJCQkJZWxzZQorCQkJCQl3RmFsbEJhY2tSYXRlID0KKwkJCQkJCWF3SFdSZXRyeTBbd1JhdGUtUkFURV8xOE1dWzRdOworCQkJCXBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0udVR4RmFpbFt3RmFsbEJhY2tSYXRlXSsrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJ5RmFsbEJhY2sgPT0gQVVUT19GQl8xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IoaWk9MDtpaTxieVR4UmV0cnk7aWkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpaSA8IDUpCisJCSAgICAgIGZvciAoaWkgPSAwOyBpaSA8IGJ5VHhSZXRyeTsgaWkrKykgeworCQkJaWYgKGlpIDwgNSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0ZhbGxCYWNrUmF0ZSA9IGF3SFdSZXRyeTFbd1JhdGUtUkFURV8xOE1dW2lpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisJCQllbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdGYWxsQmFja1JhdGUgPSBhd0hXUmV0cnkxW3dSYXRlLVJBVEVfMThNXVs0XTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLnVUeEZhaWxbd0ZhbGxCYWNrUmF0ZV0rKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJCXBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0udVR4RmFpbFt3RmFsbEJhY2tSYXRlXSsrOworCQkgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9OwpAQCAtMTU4Nyw3ICsxNTY4LDYgQEAKICAgICB9CiB9CiAKLSNpZmRlZiBDYWxjdV9MaW5rUXVhbAogdm9pZCBzX3VDYWxjdWxhdGVMaW5rUXVhbCh2b2lkICpoRGV2aWNlQ29udGV4dCkKIHsKICAgIFBTRGV2aWNlICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKWhEZXZpY2VDb250ZXh0OwpAQCAtMTYzMiw3ICsxNjEyLDYgQEAKICAgIHBEZXZpY2UtPnNjU3RhdGlzdGljLlR4UmV0cnlPa0NvdW50ID0gMDsKICAgIHJldHVybjsKIH0KLSNlbmRpZgogCiB2b2lkIEJTU3ZDbGVhckFueUJTU0pvaW5SZWNvcmQodm9pZCAqaERldmljZUNvbnRleHQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2Jzc2RiLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2Jzc2RiLmgKaW5kZXggOTY4NmQ4Ni4uYThmOTdlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9ic3NkYi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvYnNzZGIuaApAQCAtNDAsNyArNDAsNyBAQAogCiAjZGVmaW5lIE1BWF9OT0RFX05VTSAgICAgICAgICAgICA2NAogI2RlZmluZSBNQVhfQlNTX05VTSAgICAgICAgICAgICAgNDIKLSNkZWZpbmUgTE9TVF9CRUFDT05fQ09VTlQgICAgICAJIDEwICAgLy8gMTAgc2VjLCBYUCBkZWZpbmVkCisjZGVmaW5lIExPU1RfQkVBQ09OX0NPVU5UICAgICAgICAxMCAgIC8qIDEwIHNlYywgWFAgZGVmaW5lZCAqLwogI2RlZmluZSBNQVhfUFNfVFhfQlVGICAgICAgICAgICAgMzIgICAvLyBzdGEgbWF4IHBvd2VyIHNhdmluZyB0eCBidWYKICNkZWZpbmUgQURIT0NfTE9TVF9CRUFDT05fQ09VTlQgIDMwICAgLy8gMzAgc2VjLCBiZWFjb24gbG9zdCBmb3IgYWRob2Mgb25seQogI2RlZmluZSBNQVhfSU5BQ1RJVkVfQ09VTlQgICAgICAgMzAwICAvLyAzMDAgc2VjLCBpbmFjdGl2ZSBTVEEgbm9kZSByZWZyZXNoCkBAIC04MywxMyArODMsMTMgQEAKIHR5cGVkZWYgc3RydWN0IHRhZ1NFUlBPYmplY3QgewogICAgIEJPT0wgICAgYkVSUEV4aXN0OwogICAgIEJZVEUgICAgYnlFUlA7Ci19RVJQT2JqZWN0LCAqUEVSUE9iamVjdDsKK30gRVJQT2JqZWN0LCAqUEVSUE9iamVjdDsKIAogCiB0eXBlZGVmIHN0cnVjdCB0YWdTUlNOQ2FwT2JqZWN0IHsKICAgICBCT09MICAgIGJSU05DYXBFeGlzdDsKICAgICBXT1JEICAgIHdSU05DYXA7Ci19U1JTTkNhcE9iamVjdCwgKlBTUlNOQ2FwT2JqZWN0OworfSBTUlNOQ2FwT2JqZWN0LCAqUFNSU05DYXBPYmplY3Q7CiAKIC8vIEJTUyBpbmZvKEFQKQogI3ByYWdtYSBwYWNrKDEpCkBAIC0xNTMsNyArMTUzLDcgQEAKICAgICBTUlNOQ2FwT2JqZWN0ICAgc1JTTkNhcE9iajsKICAgICBCWVRFICAgICAgICAgICAgYWJ5SUVzWzEwMjRdOyAgIC8vIGRvbid0IG1vdmUgdGhpcyBmaWVsZCAhIQogCi19X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQorfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBLbm93bkJTUyAsICpQS25vd25CU1M7CiAKIApAQCAtMjc4LDkgKzI3OCw5IEBACiAKIEJPT0wgQlNTYklzU1RBSW5Ob2RlREIodm9pZCAqaERldmljZUNvbnRleHQsCiAJCSAgICAgICBQQllURSBhYnlEc3RBZGRyLAotCQkgICAgICAgUFVJTlQgcHVOb2RlSW5kZXgpOworCQkgICAgICAgdW5zaWduZWQgaW50ICpwdU5vZGVJbmRleCk7CiAKLXZvaWQgQlNTdkNyZWF0ZU9uZU5vZGUodm9pZCAqaERldmljZUNvbnRleHQsIFBVSU5UIHB1Tm9kZUluZGV4KTsKK3ZvaWQgQlNTdkNyZWF0ZU9uZU5vZGUodm9pZCAqaERldmljZUNvbnRleHQsIHVuc2lnbmVkIGludCAqcHVOb2RlSW5kZXgpOwogCiB2b2lkIEJTU3ZVcGRhdGVBUE5vZGUodm9pZCAqaERldmljZUNvbnRleHQsCiAJCSAgICAgIFBXT1JEIHB3Q2FwSW5mbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvY2FyZC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jYXJkLmMKaW5kZXggZmU0ZWM5MS4uMzViZjRmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jYXJkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jYXJkLmMKQEAgLTQ1NywxMiArNDU3LDExIEBACiAgICAgYWJ5RGF0YVsxNF0gPSBhYnlTaWduYWxbM107CiAgICAgYWJ5RGF0YVsxNV0gPSBhYnlTZXJ2WzNdOwogCi0gICAgZm9yKGk9MDtpPDk7aSsrKSB7Ci0gICAgICAgIGFieURhdGFbMTYraSoyXSA9IGFieVR4UmF0ZVtpXTsKLSAgICAgICAgYWJ5RGF0YVsxNitpKjIrMV0gPSBhYnlSc3ZUaW1lW2ldOworICAgIGZvciAoaSA9IDA7IGkgPCA5OyBpKyspIHsKKwlhYnlEYXRhWzE2K2kqMl0gPSBhYnlUeFJhdGVbaV07CisJYWJ5RGF0YVsxNitpKjIrMV0gPSBhYnlSc3ZUaW1lW2ldOwogICAgIH0KIAotCiAgICAgQ09OVFJPTG5zUmVxdWVzdE91dChwRGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgTUVTU0FHRV9UWVBFX1dSSVRFLAogICAgICAgICAgICAgICAgICAgICAgICAgTUFDX1JFR19SU1BJTkZfQl8xLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jaGFubmVsLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2NoYW5uZWwuYwppbmRleCBmNDliNmUxLi42YWQwM2U0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2NoYW5uZWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2NoYW5uZWwuYwpAQCAtNDQxLDExICs0NDEsMTAgQEAKIHsKICAgICBQU0RldmljZSAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKICAgICBCT09MICAgICAgICBiTXVsdGlCYW5kID0gRkFMU0U7Ci0gICAgdW5zaWduZWQgaW50ICAgICAgICBpaTsKKyAgICB1bnNpZ25lZCBpbnQgaWk7CiAKLSAgICBmb3IoaWk9MTtpaTw9Q0JfTUFYX0NIQU5ORUw7aWkrKykgewotICAgICAgICBzQ2hhbm5lbFRibFtpaV0uYlZhbGlkID0gRkFMU0U7Ci0gICAgfQorICAgIGZvciAoaWkgPSAxOyBpaSA8PSBDQl9NQVhfQ0hBTk5FTDsgaWkrKykKKwlzQ2hhbm5lbFRibFtpaV0uYlZhbGlkID0gRkFMU0U7CiAKICAgICBzd2l0Y2ggKHBEZXZpY2UtPmJ5UkZUeXBlKSB7CiAgICAgICAgIGNhc2UgUkZfQUwyMjMwOgpAQCAtNDY0LDQzICs0NjMsNDMgQEAKICAgICBpZiAoKHBEZXZpY2UtPmR3RGlhZ1JlZkNvdW50ICE9IDApIHx8CiAgICAgICAgIChwRGV2aWNlLT5iMTFoRWFibGUgPT0gVFJVRSkpIHsKICAgICAgICAgaWYgKGJNdWx0aUJhbmQgPT0gVFJVRSkgewotICAgICAgICAgICAgZm9yKGlpPTA7aWk8Q0JfTUFYX0NIQU5ORUw7aWkrKykgewotICAgICAgICAgICAgICAgIHNDaGFubmVsVGJsW2lpKzFdLmJWYWxpZCA9IFRSVUU7CisJCWZvciAoaWkgPSAwOyBpaSA8IENCX01BWF9DSEFOTkVMOyBpaSsrKSB7CisJCQlzQ2hhbm5lbFRibFtpaSsxXS5iVmFsaWQgPSBUUlVFOwogICAgICAgICAgICAgICAgIC8vcERldmljZS0+YWJ5UmVnUHdyW2lpKzFdID0gcERldmljZS0+YWJ5T0ZETURlZmF1bHRQd3JbaWkrMV07CiAgICAgICAgICAgICAgICAgLy9wRGV2aWNlLT5hYnlMb2NhbFB3cltpaSsxXSA9IHBEZXZpY2UtPmFieU9GRE1EZWZhdWx0UHdyW2lpKzFdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yKGlpPTA7aWk8Q0JfTUFYX0NIQU5ORUxfMjRHO2lpKyspIHsKKwkJfQorCQlmb3IgKGlpID0gMDsgaWkgPCBDQl9NQVhfQ0hBTk5FTF8yNEc7IGlpKyspIHsKICAgICAgICAgICAgICAgICAvL3BEZXZpY2UtPmFieVJlZ1B3cltpaSsxXSA9IHBEZXZpY2UtPmFieUNDS0RlZmF1bHRQd3JbaWkrMV07CiAgICAgICAgICAgICAgICAgLy9wRGV2aWNlLT5hYnlMb2NhbFB3cltpaSsxXSA9IHBEZXZpY2UtPmFieUNDS0RlZmF1bHRQd3JbaWkrMV07Ci0gICAgICAgICAgICB9CisJCX0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvcihpaT0wO2lpPENCX01BWF9DSEFOTkVMXzI0RztpaSsrKSB7Ci0gICAgICAgICAgICAgICAgc0NoYW5uZWxUYmxbaWkrMV0uYlZhbGlkID0gVFJVRTsKKwkJZm9yIChpaSA9IDA7IGlpIDwgQ0JfTUFYX0NIQU5ORUxfMjRHOyBpaSsrKSB7CisJCQlzQ2hhbm5lbFRibFtpaSsxXS5iVmFsaWQgPSBUUlVFOwogICAgICAgICAgICAgICAgIC8vcERldmljZS0+YWJ5UmVnUHdyW2lpKzFdID0gcERldmljZS0+YWJ5Q0NLRGVmYXVsdFB3cltpaSsxXTsKICAgICAgICAgICAgICAgICAvL3BEZXZpY2UtPmFieUxvY2FsUHdyW2lpKzFdID0gcERldmljZS0+YWJ5Q0NLRGVmYXVsdFB3cltpaSsxXTsKLSAgICAgICAgICAgIH0KKwkJfQogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChwRGV2aWNlLT5ieVpvbmVUeXBlIDw9IENDT0RFX01BWCkgewogICAgICAgICBpZiAoYk11bHRpQmFuZCA9PSBUUlVFKSB7Ci0gICAgICAgICAgICBmb3IoaWk9MDtpaTxDQl9NQVhfQ0hBTk5FTDtpaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJDaGFubmVsSWR4TGlzdFtpaV0gIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBzQ2hhbm5lbFRibFtpaSsxXS5iVmFsaWQgPSBUUlVFOworCQlmb3IgKGlpID0gMDsgaWkgPCBDQl9NQVhfQ0hBTk5FTDsgaWkrKykgeworCQkJaWYgKENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJDaGFubmVsSWR4TGlzdFtpaV0gIT0gMCkgeworCQkJCXNDaGFubmVsVGJsW2lpKzFdLmJWYWxpZCA9IFRSVUU7CiAgICAgICAgICAgICAgICAgICAgIC8vcERldmljZS0+YWJ5UmVnUHdyW2lpKzFdID0gQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYnlQb3dlcltpaV07CiAgICAgICAgICAgICAgICAgICAgIC8vcERldmljZS0+YWJ5TG9jYWxQd3JbaWkrMV0gPSBDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5ieVBvd2VyW2lpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisJCQl9CisJCX0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvcihpaT0wO2lpPENCX01BWF9DSEFOTkVMXzI0RztpaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJDaGFubmVsSWR4TGlzdFtpaV0gIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBzQ2hhbm5lbFRibFtpaSsxXS5iVmFsaWQgPSBUUlVFOworCQlmb3IgKGlpID0gMDsgaWkgPCBDQl9NQVhfQ0hBTk5FTF8yNEc7IGlpKyspIHsKKwkJCWlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbaWldICE9IDApIHsKKwkJCQlzQ2hhbm5lbFRibFtpaSsxXS5iVmFsaWQgPSBUUlVFOwogICAgICAgICAgICAgICAgICAgICAvL3BEZXZpY2UtPmFieVJlZ1B3cltpaSsxXSA9IENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJ5UG93ZXJbaWldOwogICAgICAgICAgICAgICAgICAgICAvL3BEZXZpY2UtPmFieUxvY2FsUHdyW2lpKzFdID0gQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYnlQb3dlcltpaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorCQkJfQorCQl9CiAgICAgICAgIH0KICAgICB9CiAgICAgREJHX1BSVChNU0dfTEVWRUxfTk9USUNFLCBLRVJOX0lORk8iWm9uZT1bJWRdWyVjXVslY10hIVxuIixwRGV2aWNlLT5ieVpvbmVUeXBlLENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmNoQ291bnRyeUNvZGVbMF0sQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uY2hDb3VudHJ5Q29kZVsxXSk7Ci0gICAgZm9yKGlpPTA7aWk8Q0JfTUFYX0NIQU5ORUw7aWkrKykgeworICAgIGZvciAoaWkgPSAwOyBpaSA8IENCX01BWF9DSEFOTkVMOyBpaSsrKSB7CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iQ2hhbm5lbFslZF0gaXMgWyVkXVxuIixzQ2hhbm5lbFRibFtpaV0uYnlDaGFubmVsTnVtYmVyLHNDaGFubmVsVGJsW2lpKzFdLmJWYWxpZCk7CiAgICAgICAgIC8qaWYgKHBEZXZpY2UtPmFieVJlZ1B3cltpaSsxXSA9PSAwKSB7CiAgICAgICAgICAgICBwRGV2aWNlLT5hYnlSZWdQd3JbaWkrMV0gPSBwRGV2aWNlLT5hYnlPRkRNRGVmYXVsdFB3cltpaSsxXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvY2hhbm5lbC5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jaGFubmVsLmgKaW5kZXggOTFjMmZmYy4uZTdiM2MxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jaGFubmVsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jaGFubmVsLmgKQEAgLTM1LDIzICszNSwyMSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBEZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBDbGFzc2VzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwogdHlwZWRlZiBzdHJ1Y3QgdGFnU0NoYW5uZWxUYmxFbGVtZW50IHsKICAgICBCWVRFICAgIGJ5Q2hhbm5lbE51bWJlcjsKICAgICB1bnNpZ25lZCBpbnQgICAgdUZyZXF1ZW5jeTsKICAgICBCT09MICAgIGJWYWxpZDsKLX1TQ2hhbm5lbFRibEVsZW1lbnQsICpQU0NoYW5uZWxUYmxFbGVtZW50OworfSBTQ2hhbm5lbFRibEVsZW1lbnQsICpQU0NoYW5uZWxUYmxFbGVtZW50OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IFZhcmlhYmxlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiBCT09MICAgIENoYW5uZWxWYWxpZCh1bnNpZ25lZCBpbnQgQ291bnRyeUNvZGUsIHVuc2lnbmVkIGludCBDaGFubmVsTnVtKTsKIHZvaWQgICAgQ0h2SW5pdENoYW5uZWxUYWJsZSh2b2lkICpwRGV2aWNlSGFuZGxlcik7CiBCWVRFICAgIENIYnlHZXRDaGFubmVsTWFwcGluZyhCWVRFIGJ5Q2hhbm5lbE51bWJlcik7CiAKLUJPT0wKLUNIdkNoYW5uZWxHZXRMaXN0ICgKLSAgICAgIHVuc2lnbmVkIGludCAgICAgICB1Q291bnRyeUNvZGVJZHgsCi0gICAgIFBCWVRFICAgICAgcGJ5Q2hhbm5lbFRhYmxlCi0gICAgKTsKK0JPT0wgQ0h2Q2hhbm5lbEdldExpc3QodW5zaWduZWQgaW50IHVDb3VudHJ5Q29kZUlkeCwgUEJZVEUgcGJ5Q2hhbm5lbFRhYmxlKTsKIAotI2VuZGlmICAvKiBfUkVHVUxBVEVfSF8gKi8KKyNlbmRpZiAgLyogX0NIQU5ORUxfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvY29udHJvbC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jb250cm9sLmMKaW5kZXggOGFhYjY3MS4uNWQ4YzU3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jb250cm9sLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jb250cm9sLmMKQEAgLTcyLDcgKzcyLDcgQEAKIHZvaWQgQ29udHJvbHZSZWFkQnl0ZShQU0RldmljZSBwRGV2aWNlLCBCWVRFIGJ5UmVnVHlwZSwgQllURSBieVJlZ09mcywKIAkJCVBCWVRFIHBieURhdGEpCiB7Ci0JTlRTVEFUVVMJbnRTdGF0dXM7CisJaW50IG50U3RhdHVzOwogCUJZVEUJYnlEYXRhMTsKIAludFN0YXR1cyA9IENPTlRST0xuc1JlcXVlc3RJbihwRGV2aWNlLAogCQkJCQlNRVNTQUdFX1RZUEVfUkVBRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvY29udHJvbC5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jb250cm9sLmgKaW5kZXggMTQ2YjQ1MC4uYmJlNjEwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jb250cm9sLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jb250cm9sLmgKQEAgLTM2LDE2ICszNiwxNCBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IERlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisjZGVmaW5lIENPTlRST0xuc1JlcXVlc3RPdXQoRGV2aWNlLCBSZXF1ZXN0LCBWYWx1ZSwgSW5kZXgsIExlbmd0aCwgQnVmZmVyKSBcCisJUElQRW5zQ29udHJvbE91dChEZXZpY2UsIFJlcXVlc3QsIFZhbHVlLCBJbmRleCwgTGVuZ3RoLCBCdWZmZXIpCiAKLSNkZWZpbmUgQ09OVFJPTG5zUmVxdWVzdE91dCggRGV2aWNlLFJlcXVlc3QsVmFsdWUsSW5kZXgsTGVuZ3RoLEJ1ZmZlcikgXAotICAgICAgICBQSVBFbnNDb250cm9sT3V0KCBEZXZpY2UsUmVxdWVzdCxWYWx1ZSxJbmRleCxMZW5ndGgsQnVmZmVyKQorI2RlZmluZSBDT05UUk9MbnNSZXF1ZXN0T3V0QXN5bihEZXZpY2UsIFJlcXVlc3QsIFZhbHVlLCBJbmRleCwgTGVuZ3RoLCBCdWZmZXIpIFwKKwlQSVBFbnNDb250cm9sT3V0QXN5bihEZXZpY2UsIFJlcXVlc3QsIFZhbHVlLCBJbmRleCwgTGVuZ3RoLCBCdWZmZXIpCiAKLSNkZWZpbmUgQ09OVFJPTG5zUmVxdWVzdE91dEFzeW4oIERldmljZSxSZXF1ZXN0LFZhbHVlLEluZGV4LExlbmd0aCxCdWZmZXIpIFwKLSAgICAgICAgUElQRW5zQ29udHJvbE91dEFzeW4oIERldmljZSxSZXF1ZXN0LFZhbHVlLEluZGV4LExlbmd0aCxCdWZmZXIpCi0KLSNkZWZpbmUgQ09OVFJPTG5zUmVxdWVzdEluKCBEZXZpY2UsUmVxdWVzdCxWYWx1ZSxJbmRleCxMZW5ndGgsQnVmZmVyKSBcCi0gICAgICAgIFBJUEVuc0NvbnRyb2xJbiggRGV2aWNlLFJlcXVlc3QsVmFsdWUsSW5kZXgsTGVuZ3RoLEJ1ZmZlcikKLQorI2RlZmluZSBDT05UUk9MbnNSZXF1ZXN0SW4oRGV2aWNlLCBSZXF1ZXN0LCBWYWx1ZSwgSW5kZXgsIExlbmd0aCwgQnVmZmVyKSBcCisJUElQRW5zQ29udHJvbEluKERldmljZSwgUmVxdWVzdCwgVmFsdWUsIEluZGV4LCBMZW5ndGgsIEJ1ZmZlcikKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBDbGFzc2VzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9kYXRhcmF0ZS5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9kYXRhcmF0ZS5jCmluZGV4IDJlMTgzZGQuLjVjMjcxOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZGF0YXJhdGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2RhdGFyYXRlLmMKQEAgLTcyLDcgKzcyLDcgQEAKICAgICBCWVRFICAgICAgICAgICAgaWk7CiAKICAgICAvLyBjbGVhciBzdGF0aXN0aWMgY291bnRlciBmb3IgYXV0b19yYXRlCi0gICAgZm9yKGlpPTA7aWk8PU1BWF9SQVRFO2lpKyspIHsKKyAgICBmb3IgKGlpID0gMDsgaWkgPD0gTUFYX1JBVEU7IGlpKyspIHsKICAgICAgICAgcHNOb2RlREJUYWJsZS0+dVR4T2tbaWldID0gMDsKICAgICAgICAgcHNOb2RlREJUYWJsZS0+dVR4RmFpbFtpaV0gPSAwOwogICAgIH0KQEAgLTMwOSw3ICszMDksNiBAQAogewogUFNEZXZpY2UgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwogUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gJihwRGV2aWNlLT5zTWdtdE9iaik7Ci0jaWYgMSAgLy9taWtlIGZpeGVkIG9sZDogdXNlIHBhY2tldCBsb3NlIHJhdGlvIGFsZ29yaXRobSB0byBjb250cm9sIHJhdGUKIFdPUkQgICAgICAgICAgICB3SWR4RG93blJhdGUgPSAwOwogdW5zaWduZWQgaW50ICAgICAgICAgICAgaWk7CiBCT09MICAgICAgICAgICAgYkF1dG9SYXRlW01BWF9SQVRFXSAgICA9IHtUUlVFLFRSVUUsVFJVRSxUUlVFLEZBTFNFLEZBTFNFLFRSVUUsVFJVRSxUUlVFLFRSVUUsVFJVRSxUUlVFfTsKQEAgLTMzNyw3ICszMzYsNyBAQAogICAgICAgICBwc05vZGVEQlRhYmxlLT51VGltZUNvdW50ID0gMDsKICAgICB9CiAKLSAgICBmb3IoaWk9MDtpaTxNQVhfUkFURTtpaSsrKSB7CisgICAgZm9yIChpaSA9IDA7IGlpIDwgTUFYX1JBVEU7IGlpKyspIHsKICAgICAgICAgaWYgKHBzTm9kZURCVGFibGUtPndTdXBwUmF0ZSAmICgweDAwMDE8PGlpKSkgewogICAgICAgICAgICAgaWYgKGJBdXRvUmF0ZVtpaV0gPT0gVFJVRSkgewogICAgICAgICAgICAgICAgIHdJZHhVcFJhdGUgPSAoV09SRCkgaWk7CkBAIC0zNDcsNyArMzQ2LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGZvcihpaT0wO2lpPD1wc05vZGVEQlRhYmxlLT53VHhEYXRhUmF0ZTtpaSsrKSB7CisgICAgZm9yIChpaSA9IDA7IGlpIDw9IHBzTm9kZURCVGFibGUtPndUeERhdGFSYXRlOyBpaSsrKSB7CiAgICAgICAgIGlmICggKHBzTm9kZURCVGFibGUtPnVUeE9rW2lpXSAhPSAwKSB8fAogICAgICAgICAgICAgIChwc05vZGVEQlRhYmxlLT51VHhGYWlsW2lpXSAhPSAwKSApIHsKICAgICAgICAgICAgIGR3VGhyb3VnaHB1dFRibFtpaV0gKj0gcHNOb2RlREJUYWJsZS0+dVR4T2tbaWldOwpAQCAtMzYyLDcgKzM2MSw3IEBACiAgICAgZHdUaHJvdWdocHV0ID0gZHdUaHJvdWdocHV0VGJsW3BzTm9kZURCVGFibGUtPndUeERhdGFSYXRlXTsKIAogICAgIHdJZHhEb3duUmF0ZSA9IHBzTm9kZURCVGFibGUtPndUeERhdGFSYXRlOwotICAgIGZvcihpaSA9IHBzTm9kZURCVGFibGUtPndUeERhdGFSYXRlOyBpaSA+IDA7KSB7CisgICAgZm9yIChpaSA9IHBzTm9kZURCVGFibGUtPndUeERhdGFSYXRlOyBpaSA+IDA7KSB7CiAgICAgICAgIGlpLS07CiAgICAgICAgIGlmICggKGR3VGhyb3VnaHB1dFRibFtpaV0gPiBkd1Rocm91Z2hwdXQpICYmCiAgICAgICAgICAgICAgKGJBdXRvUmF0ZVtpaV09PVRSVUUpICkgewpAQCAtMzg5LDY2ICszODgsNiBAQAogICAgIHNfdlJlc2V0Q291bnRlcihwc05vZGVEQlRhYmxlKTsKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIlJhdGU6ICVkLCBVOiVkLCBEOiVkXG4iLCAoaW50KXBzTm9kZURCVGFibGUtPndUeERhdGFSYXRlLCAoaW50KXdJZHhVcFJhdGUsIChpbnQpd0lkeERvd25SYXRlKTsKICAgICByZXR1cm47Ci0jZWxzZSAgLy9taWtlIGZpeGVkIG5ldzogdXNlIGRpZmZlci1zaWduYWwgc3RyZW5ndGggdG8gY29udHJvbCByYXRlCi1XT1JEICAgICAgICAgICAgd0lkeFVwUmF0ZSA9IDA7Ci1CT09MICAgICAgICAgICAgYkF1dG9SYXRlW01BWF9SQVRFXSAgICA9IHtUUlVFLFRSVUUsVFJVRSxUUlVFLEZBTFNFLEZBTFNFLFRSVUUsVFJVRSxUUlVFLFRSVUUsVFJVRSxUUlVFfTsKLXVuc2lnbmVkIGludCAgICAgICAgICAgIGlpOwotbG9uZyAgbGRCbTsKLQotICAgIGlmIChwTWdtdC0+ZVNjYW5TdGF0ZSAhPSBXTUFDX05PX1NDQU5OSU5HKSB7Ci0gICAgICAgIC8vIERvbid0IGRvIEZhbGxiYWNrIHdoZW4gc2Nhbm5pbmcgQ2hhbm5lbAotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZm9yKGlpPTA7aWk8TUFYX1JBVEU7aWkrKykgewotICAgICAgICBpZiAocHNOb2RlREJUYWJsZS0+d1N1cHBSYXRlICYgKDB4MDAwMTw8aWkpKSB7Ci0gICAgICAgICAgICBpZiAoYkF1dG9SYXRlW2lpXSA9PSBUUlVFKSB7Ci0gICAgICAgICAgICAgICAgd0lkeFVwUmF0ZSA9IChXT1JEKSBpaTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJBdXRvUmF0ZVtpaV0gPSBGQUxTRTsKLSAgICAgICAgfQotICAgIH0KLQotICAgICAgICAgUkZ2UlNTSVRvZEJtKHBEZXZpY2UsIChCWVRFKShwRGV2aWNlLT51Q3VyclJTU0kpLCAmbGRCbSk7Ci0KLQlpZiAobGRCbSA+IC01NSkgewotCQlpZiAoIHBzTm9kZURCVGFibGUtPndTdXBwUmF0ZSAmICgweDAwMDE8PFJBVEVfNTRNKSApICAvLzExYS9nCi0gICAgICAJCXsKLQkgIAkJcHNOb2RlREJUYWJsZS0+d1R4RGF0YVJhdGUgPSBSQVRFXzU0TTsKLQkJfQotCQllbHNleyAvLzExYgotCSAgCQlwc05vZGVEQlRhYmxlLT53VHhEYXRhUmF0ZSA9IFJBVEVfMTFNOwotCQl9Ci0JfQotCi1pZiAod0lkeFVwUmF0ZSA9PSBSQVRFXzU0TSApIHsgICAgIC8vMTFhL2cKLQkJaWYgKGxkQm0gPiAtNTYgKQotCQkJcHNOb2RlREJUYWJsZS0+d1R4RGF0YVJhdGUgPSBSQVRFXzU0TTsKLQkJZWxzZSBpZiAobGRCbSA+IC02MSApCi0JCQlwc05vZGVEQlRhYmxlLT53VHhEYXRhUmF0ZSA9IFJBVEVfNDhNOwotCQllbHNlIGlmIChsZEJtID4gLTY2ICkKLQkJCXBzTm9kZURCVGFibGUtPndUeERhdGFSYXRlID0gUkFURV8zNk07Ci0JCWVsc2UgaWYgKGxkQm0gPiAtNzIgKQotCQkJcHNOb2RlREJUYWJsZS0+d1R4RGF0YVJhdGUgPSBSQVRFXzI0TTsKLQkJZWxzZSBpZiAobGRCbSA+IC04MCApCi0JCQlwc05vZGVEQlRhYmxlLT53VHhEYXRhUmF0ZSA9IFJBVEVfNU07Ci0JCWVsc2UgewotCQkJcHNOb2RlREJUYWJsZS0+d1R4RGF0YVJhdGUgPSBSQVRFXzFNOwotCQkJLy9pbmNyZWFzaW5nVkdBID0gVFJVRTsKLQkJfQotCX0KLQllbHNlIHsgIC8vMTFiCi0JCWlmIChsZEJtID4gLTY1ICkKLQkJCXBzTm9kZURCVGFibGUtPndUeERhdGFSYXRlID0gUkFURV8xMU07Ci0JCWVsc2UgaWYgKGxkQm0gPiAtNzUgKQotCQkJcHNOb2RlREJUYWJsZS0+d1R4RGF0YVJhdGUgPSBSQVRFXzVNOwotCQllbHNlCi0JCQlwc05vZGVEQlRhYmxlLT53VHhEYXRhUmF0ZSA9IFJBVEVfMU07Ci0JfQotCi0gICByZXR1cm47Ci0jZW5kaWYKIH0KIAogLyorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2Rlc2MuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZGVzYy5oCmluZGV4IDA3Zjc5NGUuLjc2NzExMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZGVzYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZGVzYy5oCkBAIC01MSw3ICs1MSw2IEBACiAKICNkZWZpbmUgTUFYX0lOVEVSUlVQVF9TSVpFICAgICAgICAgICAgICAzMgogCi0KICNkZWZpbmUgUlhfQkxPQ0tTICAgICAgICAgICA2NCAgICAgICAgICAvLyBmb3JtIDB4NjAgdG8gMHhBMAogI2RlZmluZSBUWF9CTE9DS1MgICAgICAgICAgIDMyICAgICAgICAgIC8vIGZyb20gMHhBMCB0byAweEMwCiAKQEAgLTYzLDggKzYyLDYgQEAKICNkZWZpbmUgQ0JfUkRfTlVNICAgICAgICAgICA2NCAgICAgICAgICAvLyBkZWZhdWx0ICMgb2YgUkQKICNkZWZpbmUgQ0JfVERfTlVNICAgICAgICAgICA2NCAgICAgICAgICAvLyBkZWZhdWx0ICMgb2YgVEQKIAotCi0KIC8vCiAvLyBCaXRzIGluIHRoZSBSU1IgcmVnaXN0ZXIKIC8vCkBAIC04Nyw3ICs4NCw2IEBACiAjZGVmaW5lIE5FV1JTUl9CQ05ISVRBSUQgICAgMHgwMiAgICAgICAgLy8gMDAwMCAwMDEwCiAjZGVmaW5lIE5FV1JTUl9CQ05ISVRBSUQwICAgMHgwMSAgICAgICAgLy8gMDAwMCAwMDAxCiAKLQogLy8KIC8vIEJpdHMgaW4gdGhlIFRTUiByZWdpc3RlcgogLy8KQEAgLTk2LDE3ICs5MiwxMyBAQAogI2RlZmluZSBUU1JfQUNLREFUQSAgICAgICAgIDB4MDIgICAgICAgIC8vIDAwMDAgMDAxMAogI2RlZmluZSBUU1JfVkFMSUQgICAgICAgICAgIDB4MDEgICAgICAgIC8vIDAwMDAgMDAwMQogCi0KICNkZWZpbmUgQ0JfUFJPVE9DT0xfUkVTRVJWRURfU0VDVElPTiAgICAxNgogCi0KLQogLy8gaWYgcmV0cnlzIGV4Y2VzcyAxNSB0aW1lcyAsIHR4IHdpbGwgYWJvcnQsIGFuZAogLy8gaWYgdHggZmlmbyB1bmRlcmZsb3csIHR4IHdpbGwgZmFpbAogLy8gd2Ugc2hvdWxkIHRyeSB0byByZXNlbmQgaXQKICNkZWZpbmUgQ0JfTUFYX1RYX0FCT1JUX1JFVFJZICAgMwogCi0KICNkZWZpbmUgRklGT0NUTF9BVVRPX0ZCXzEgICAweDEwMDAgLy8gMDAwMSAwMDAwIDAwMDAgMDAwMAogI2RlZmluZSBGSUZPQ1RMX0FVVE9fRkJfMCAgIDB4MDgwMCAvLyAwMDAwIDEwMDAgMDAwMCAwMDAwCiAjZGVmaW5lIEZJRk9DVExfR1JQQUNLICAgICAgMHgwNDAwIC8vIDAwMDAgMDEwMCAwMDAwIDAwMDAKQEAgLTEzNyw3ICsxMjksNiBAQAogI2RlZmluZSBGUkFHQ1RMX1NUQUZSQUcgICAgIDB4MDAwMSAvLyAwMDAwIDAwMDAgMDAwMCAwMDAxCiAjZGVmaW5lIEZSQUdDVExfTk9ORlJBRyAgICAgMHgwMDAwIC8vIDAwMDAgMDAwMCAwMDAwIDAwMDAKIAotCiAvLyNkZWZpbmUgVFlQRV9BQzBETUEgICAgIDAKIC8vI2RlZmluZSBUWVBFX1RYRE1BMCAgICAgMQogI2RlZmluZSBUWVBFX1RYRE1BMCAgICAgMApAQCAtMTUyLDggKzE0Myw2IEBACiAjZGVmaW5lIFRZUEVfUlhETUExICAgICAxCiAjZGVmaW5lIFRZUEVfTUFYUkQgICAgICAyCiAKLQotCiAvLyBURF9JTkZPIGZsYWdzIGNvbnRyb2wgYml0CiAjZGVmaW5lIFREX0ZMQUdTX05FVElGX1NLQiAgICAgICAgICAgICAgIDB4MDEgICAgICAgLy8gY2hlY2sgaWYgbmVlZCByZWxlYXNlIHNrYgogI2RlZmluZSBURF9GTEFHU19QUklWX1NLQiAgICAgICAgICAgICAgICAweDAyICAgICAgIC8vIGNoZWNrIGlmIGNhbGxlZCBmcm9tIHByaXZhdGUgc2tiKGhvc3RhcCkKQEAgLTE2Miw3ICsxNTEsNiBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IFR5cGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0KIC8vCiAvLyBSc3ZUaW1lIGJ1ZmZlciBoZWFkZXIKIC8vCkBAIC0xNzMsOCArMTYxLDkgQEAKICAgICBXT1JEICAgICAgICB3UmVzZXJ2ZWQ7CiAgICAgV09SRCAgICAgICAgd1R4UnJ2VGltZV9iOwogICAgIFdPUkQgICAgICAgIHdUeFJydlRpbWVfYTsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNScnZUaW1lX2dSVFMsICpQU1JydlRpbWVfZ1JUUzsKKwogdHlwZWRlZiBjb25zdCBTUnJ2VGltZV9nUlRTICpQQ1NScnZUaW1lX2dSVFM7CiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NScnZUaW1lX2dDVFMgewpAQCAtMTgyLDIyICsxNzEsMjUgQEAKICAgICBXT1JEICAgICAgICB3UmVzZXJ2ZWQ7CiAgICAgV09SRCAgICAgICAgd1R4UnJ2VGltZV9iOwogICAgIFdPUkQgICAgICAgIHdUeFJydlRpbWVfYTsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNScnZUaW1lX2dDVFMsICpQU1JydlRpbWVfZ0NUUzsKKwogdHlwZWRlZiBjb25zdCBTUnJ2VGltZV9nQ1RTICpQQ1NScnZUaW1lX2dDVFM7CiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NScnZUaW1lX2FiIHsKICAgICBXT1JEICAgICAgICB3UlRTVHhScnZUaW1lOwogICAgIFdPUkQgICAgICAgIHdUeFJydlRpbWU7Ci19X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQorfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTUnJ2VGltZV9hYiwgKlBTUnJ2VGltZV9hYjsKKwogdHlwZWRlZiBjb25zdCBTUnJ2VGltZV9hYiAqUENTUnJ2VGltZV9hYjsKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU1JydlRpbWVfYXRpbSB7CiAgICAgV09SRCAgICAgICAgd0NUU1R4UnJ2VGltZV9iYTsKICAgICBXT1JEICAgICAgICB3VHhScnZUaW1lX2E7Ci19X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQorfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTUnJ2VGltZV9hdGltLCAqUFNScnZUaW1lX2F0aW07CisKIHR5cGVkZWYgY29uc3QgU1JydlRpbWVfYXRpbSAqUENTUnJ2VGltZV9hdGltOwogCiAvLwpAQCAtMjA4LDggKzIwMCw5IEBACiAgICAgV09SRCAgICB3RHVyYXRpb25JRDsKICAgICBCWVRFICAgIGFieVJBW0VUSF9BTEVOXTsKICAgICBCWVRFICAgIGFieVRBW0VUSF9BTEVOXTsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNSVFNEYXRhLCAqUFNSVFNEYXRhOworCiB0eXBlZGVmIGNvbnN0IFNSVFNEYXRhICpQQ1NSVFNEYXRhOwogCiB0eXBlZGVmIHN0cnVjdCB0YWdTUlRTX2cgewpAQCAtMjI0LDExICsyMTcsMTAgQEAKICAgICBXT1JEICAgICAgICB3RHVyYXRpb25fYmI7CiAgICAgV09SRCAgICAgICAgd1Jlc2VydmVkOwogICAgIFNSVFNEYXRhICAgIERhdGE7Ci19X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQorfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTUlRTX2csICpQU1JUU19nOwogdHlwZWRlZiBjb25zdCBTUlRTX2cgKlBDU1JUU19nOwogCi0KIHR5cGVkZWYgc3RydWN0IHRhZ1NSVFNfZ19GQiB7CiAgICAgQllURSAgICAgICAgYnlTaWduYWxGaWVsZF9iOwogICAgIEJZVEUgICAgICAgIGJ5U2VydmljZUZpZWxkX2I7CkBAIC0yNDUsMTAgKzIzNywxMCBAQAogICAgIFdPUkQgICAgICAgIHdSVFNEdXJhdGlvbl9iYV9mMTsKICAgICBXT1JEICAgICAgICB3UlRTRHVyYXRpb25fYWFfZjE7CiAgICAgU1JUU0RhdGEgICAgRGF0YTsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNSVFNfZ19GQiwgKlBTUlRTX2dfRkI7Ci10eXBlZGVmIGNvbnN0IFNSVFNfZ19GQiAqUENTUlRTX2dfRkI7CiAKK3R5cGVkZWYgY29uc3QgU1JUU19nX0ZCICpQQ1NSVFNfZ19GQjsKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU1JUU19hYiB7CiAgICAgQllURSAgICAgICAgYnlTaWduYWxGaWVsZDsKQEAgLTI1NywxMCArMjQ5LDEwIEBACiAgICAgV09SRCAgICAgICAgd0R1cmF0aW9uOwogICAgIFdPUkQgICAgICAgIHdSZXNlcnZlZDsKICAgICBTUlRTRGF0YSAgICBEYXRhOwotfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1JUU19hYiwgKlBTUlRTX2FiOwotdHlwZWRlZiBjb25zdCBTUlRTX2FiICpQQ1NSVFNfYWI7CiAKK3R5cGVkZWYgY29uc3QgU1JUU19hYiAqUENTUlRTX2FiOwogCiB0eXBlZGVmIHN0cnVjdCB0YWdTUlRTX2FfRkIgewogICAgIEJZVEUgICAgICAgIGJ5U2lnbmFsRmllbGQ7CkBAIC0yNzEsOCArMjYzLDkgQEAKICAgICBXT1JEICAgICAgICB3UlRTRHVyYXRpb25fZjA7CiAgICAgV09SRCAgICAgICAgd1JUU0R1cmF0aW9uX2YxOwogICAgIFNSVFNEYXRhICAgIERhdGE7Ci19X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQorfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTUlRTX2FfRkIsICpQU1JUU19hX0ZCOworCiB0eXBlZGVmIGNvbnN0IFNSVFNfYV9GQiAqUENTUlRTX2FfRkI7CiAKIApAQCAtMjg0LDcgKzI3Nyw3IEBACiAgICAgV09SRCAgICB3RHVyYXRpb25JRDsKICAgICBCWVRFICAgIGFieVJBW0VUSF9BTEVOXTsKICAgICBXT1JEICAgIHdSZXNlcnZlZDsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNDVFNEYXRhLCAqUFNDVFNEYXRhOwogCiB0eXBlZGVmIHN0cnVjdCB0YWdTQ1RTIHsKQEAgLTI5NCw4ICsyODcsOSBAQAogICAgIFdPUkQgICAgICAgIHdEdXJhdGlvbl9iYTsKICAgICBXT1JEICAgICAgICB3UmVzZXJ2ZWQ7CiAgICAgU0NUU0RhdGEgICAgRGF0YTsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNDVFMsICpQU0NUUzsKKwogdHlwZWRlZiBjb25zdCBTQ1RTICpQQ1NDVFM7CiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NDVFNfRkIgewpAQCAtMzA3LDEwICszMDEsMTAgQEAKICAgICBXT1JEICAgICAgICB3Q1RTRHVyYXRpb25fYmFfZjA7CiAgICAgV09SRCAgICAgICAgd0NUU0R1cmF0aW9uX2JhX2YxOwogICAgIFNDVFNEYXRhICAgIERhdGE7Ci19X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQorfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTQ1RTX0ZCLCAqUFNDVFNfRkI7Ci10eXBlZGVmIGNvbnN0IFNDVFNfRkIgKlBDU0NUU19GQjsKIAordHlwZWRlZiBjb25zdCBTQ1RTX0ZCICpQQ1NDVFNfRkI7CiAKIC8vCiAvLyBUeCBGSUZPIGhlYWRlcgpAQCAtMzIxLDE0ICszMTUsMTQgQEAKICAgICBXT1JEICAgIHdUaW1lU3RhbXA7CiAgICAgV09SRCAgICB3RnJhZ0N0bDsKICAgICBXT1JEICAgIHdSZXNlcnZlZDsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNUeEJ1ZkhlYWQsICpQU1R4QnVmSGVhZDsKIHR5cGVkZWYgY29uc3QgU1R4QnVmSGVhZCAqUENTVHhCdWZIZWFkOwogCiB0eXBlZGVmIHN0cnVjdCB0YWdTVHhTaG9ydEJ1ZkhlYWQgewogICAgIFdPUkQgICAgd0ZJRk9DdGw7CiAgICAgV09SRCAgICB3VGltZVN0YW1wOwotfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1R4U2hvcnRCdWZIZWFkLCAqUFNUeFNob3J0QnVmSGVhZDsKIHR5cGVkZWYgY29uc3QgU1R4U2hvcnRCdWZIZWFkICpQQ1NUeFNob3J0QnVmSGVhZDsKIApAQCAtMzQ2LDggKzM0MCw5IEBACiAgICAgV09SRCAgICB3RHVyYXRpb25fYTsKICAgICBXT1JEICAgIHdUaW1lU3RhbXBPZmZfYjsKICAgICBXT1JEICAgIHdUaW1lU3RhbXBPZmZfYTsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNUeERhdGFIZWFkX2csICpQU1R4RGF0YUhlYWRfZzsKKwogdHlwZWRlZiBjb25zdCBTVHhEYXRhSGVhZF9nICpQQ1NUeERhdGFIZWFkX2c7CiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NUeERhdGFIZWFkX2dfRkIgewpAQCAtMzYzLDIyICszNTgsMjAgQEAKICAgICBXT1JEICAgIHdEdXJhdGlvbl9hX2YxOwogICAgIFdPUkQgICAgd1RpbWVTdGFtcE9mZl9iOwogICAgIFdPUkQgICAgd1RpbWVTdGFtcE9mZl9hOwotfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1R4RGF0YUhlYWRfZ19GQiwgKlBTVHhEYXRhSGVhZF9nX0ZCOwogdHlwZWRlZiBjb25zdCBTVHhEYXRhSGVhZF9nX0ZCICpQQ1NUeERhdGFIZWFkX2dfRkI7CiAKLQogdHlwZWRlZiBzdHJ1Y3QgdGFnU1R4RGF0YUhlYWRfYWIgewogICAgIEJZVEUgICAgYnlTaWduYWxGaWVsZDsKICAgICBCWVRFICAgIGJ5U2VydmljZUZpZWxkOwogICAgIFdPUkQgICAgd1RyYW5zbWl0TGVuZ3RoOwogICAgIFdPUkQgICAgd0R1cmF0aW9uOwogICAgIFdPUkQgICAgd1RpbWVTdGFtcE9mZjsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNUeERhdGFIZWFkX2FiLCAqUFNUeERhdGFIZWFkX2FiOwogdHlwZWRlZiBjb25zdCBTVHhEYXRhSGVhZF9hYiAqUENTVHhEYXRhSGVhZF9hYjsKIAotCiB0eXBlZGVmIHN0cnVjdCB0YWdTVHhEYXRhSGVhZF9hX0ZCIHsKICAgICBCWVRFICAgIGJ5U2lnbmFsRmllbGQ7CiAgICAgQllURSAgICBieVNlcnZpY2VGaWVsZDsKQEAgLTM4Nyw3ICszODAsNyBAQAogICAgIFdPUkQgICAgd1RpbWVTdGFtcE9mZjsKICAgICBXT1JEICAgIHdEdXJhdGlvbl9mMDsKICAgICBXT1JEICAgIHdEdXJhdGlvbl9mMTsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNUeERhdGFIZWFkX2FfRkIsICpQU1R4RGF0YUhlYWRfYV9GQjsKIHR5cGVkZWYgY29uc3QgU1R4RGF0YUhlYWRfYV9GQiAqUENTVHhEYXRhSGVhZF9hX0ZCOwogCkBAIC0zOTgsMjMgKzM5MSwyMyBAQAogICAgIERXT1JEICAgYWR3SERSMFs0XTsKICAgICBEV09SRCAgIGFkd0hEUjFbNF07CiAgICAgRFdPUkQgICBhZHdIRFIyWzRdOwotfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU01JQ0hEUkhlYWQsICpQU01JQ0hEUkhlYWQ7CisKIHR5cGVkZWYgY29uc3QgU01JQ0hEUkhlYWQgKlBDU01JQ0hEUkhlYWQ7CiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NCRUFDT05DdGwgewogICAgIERXT1JEICAgQnVmUmVhZHkgOiAxOwotICAgIERXT1JEICAgVFNGICAgICAgOiAxNTsKLSAgICBEV09SRCAgIEJ1ZkxlbiAgIDogMTE7CisgICAgRFdPUkQgICBUU0YgOiAxNTsKKyAgICBEV09SRCAgIEJ1ZkxlbiA6IDExOwogICAgIERXT1JEICAgUmVzZXJ2ZWQgOiA1OwotfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU0JFQUNPTkN0bDsKIAotCiB0eXBlZGVmIHN0cnVjdCB0YWdTU2VjcmV0S2V5IHsKICAgICBEV09SRCAgIGR3TG93RHdvcmQ7CiAgICAgQllURSAgICBieUhpZ2hCeXRlOwotfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1NlY3JldEtleTsKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU0tleUVudHJ5IHsKQEAgLTQyNiw3ICs0MTksNyBAQAogICAgIERXT1JEIGR3S2V5Mls0XTsKICAgICBEV09SRCBkd0tleTNbNF07CiAgICAgRFdPUkQgZHdLZXk0WzRdOwotfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU0tleUVudHJ5OwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9kZXZpY2UuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZGV2aWNlLmgKaW5kZXggZWY5ZmQ5Ny4uYjk4NTJhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9kZXZpY2UuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2RldmljZS5oCkBAIC03MSw5ICs3MSw2IEBACiAjZGVmaW5lIFdQQV9TVVBQTElDQU5UX0RSSVZFUl9XRVhUX1NVUFBPUlQKICNlbmRpZgogCi0vLzIwMDctMDkyMC0wMTxBZGQ+YnkgTWlrZUxpdQotI2lmbmRlZiBTbmRFdnRfVG9BUEkKLSNkZWZpbmUgU25kRXZ0X1RvQVBJCiAvL3BsZWFzZSBjb3B5IGJlbG93IG1hY3JvIHRvIGRyaXZlcl9ldmVudC5jIGZvciBBUEkKICNkZWZpbmUgUlRfSU5TTU9EX0VWRU5UX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMQogI2RlZmluZSBSVF9VUERFVl9FVkVOVF9GTEFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMgpAQCAtODEsNyArNzgsNiBAQAogI2RlZmluZSBSVF9XUEFDT05ORUNURURfRVZFTlRfRkxBRyAgICAgICAgICAgICAweDAxMDQKICNkZWZpbmUgUlRfRE9XTkRFVl9FVkVOVF9GTEFHICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTA1CiAjZGVmaW5lIFJUX1JNTU9EX0VWRU5UX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDYKLSNlbmRpZgogCiAvLwogLy8gZGV2aWNlIHNwZWNpZmljCkBAIC0xMDksNyArMTA1LDYgQEAKICNkZWZpbmUgTUFYX01VTFRJQ0FTVF9BRERSRVNTX05VTSAgICAgICAzMgogI2RlZmluZSBNVUxUSUNBU1RfQUREUkVTU19MSVNUX1NJWkUgICAgIChNQVhfTVVMVElDQVNUX0FERFJFU1NfTlVNICogRVRIX0FMRU4pCiAKLQogLy8jZGVmaW5lIE9QX01PREVfSU5GUkFTVFJVQ1RVUkUgIDAKIC8vI2RlZmluZSBPUF9NT0RFX0FESE9DICAgICAgICAgICAxCiAvLyNkZWZpbmUgT1BfTU9ERV9BUCAgICAgICAgICAgICAgMgpAQCAtMTMwLDggKzEyNSw2IEBACiAjZGVmaW5lIEtFWVNFTF9US0lQICAgICAgICAgICAgICAgICAgICAgMgogI2RlZmluZSBLRVlTRUxfQ0NNUCAgICAgICAgICAgICAgICAgICAgIDMKIAotCi0KICNkZWZpbmUgQVVUT19GQl9OT05FICAgICAgICAgICAgMAogI2RlZmluZSBBVVRPX0ZCXzAgICAgICAgICAgICAgICAxCiAjZGVmaW5lIEFVVE9fRkJfMSAgICAgICAgICAgICAgIDIKQEAgLTE2Miw4ICsxNTUsNiBAQAogI2RlZmluZSBCQl9WR0FfTEVWRUwgICAgICAgICAgICA0CiAjZGVmaW5lIEJCX1ZHQV9DSEFOR0VfVEhSRVNIT0xEIDMKIAotCi0KICNpZm5kZWYgUlVOX0FUCiAjZGVmaW5lIFJVTl9BVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKGppZmZpZXMrKHgpKQogI2VuZGlmCkBAIC0xNzUsMjQgKzE2NiwyMyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IFR5cGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0jZGVmaW5lIERCR19QUlQobCwgcCwgYXJncy4uLikge2lmIChsPD1tc2dsZXZlbCkgcHJpbnRrKCBwICwjI2FyZ3MpO30KLSNkZWZpbmUgUFJJTlRfSyhwLCBhcmdzLi4uKSB7aWYgKFBSSVZBVEVfTWVzc2FnZSkgcHJpbnRrKCBwICwjI2FyZ3MpO30KKyNkZWZpbmUgREJHX1BSVChsLCBwLCBhcmdzLi4uKSB7IGlmIChsIDw9IG1zZ2xldmVsKSBwcmludGsocCwgIyNhcmdzKTsgfQorI2RlZmluZSBQUklOVF9LKHAsIGFyZ3MuLi4pIHsgaWYgKFBSSVZBVEVfTWVzc2FnZSkgcHJpbnRrKHAsICMjYXJncyk7IH0KIAogdHlwZWRlZiBlbnVtIF9fZGV2aWNlX21zZ19sZXZlbCB7Ci0gICAgTVNHX0xFVkVMX0VSUj0wLCAgICAgICAgICAgIC8vRXJyb3JzIHRoYXQgd2lsbCBjYXVzZSBhYm5vcm1hbCBvcGVyYXRpb24uCi0gICAgTVNHX0xFVkVMX05PVElDRT0xLCAgICAgICAgIC8vU29tZSBlcnJvcnMgbmVlZCB1c2VycyB0byBiZSBub3RpZmllZC4KLSAgICBNU0dfTEVWRUxfSU5GTz0yLCAgICAgICAgICAgLy9Ob3JtYWwgbWVzc2FnZS4KLSAgICBNU0dfTEVWRUxfVkVSQk9TRT0zLCAgICAgICAgLy9XaWxsIHJlcG9ydCBhbGwgdHJpdmFsIGVycm9ycy4KLSAgICBNU0dfTEVWRUxfREVCVUc9NCAgICAgICAgICAgLy9Pbmx5IGZvciBkZWJ1ZyBwdXJwb3NlLgorCU1TR19MRVZFTF9FUlIgPSAwLCAgICAgICAgICAgIC8qIEVycm9ycyBjYXVzaW5nIGFibm9ybWFsIG9wZXJhdGlvbiAqLworCU1TR19MRVZFTF9OT1RJQ0UgPSAxLCAgICAgICAgIC8qIEVycm9ycyBuZWVkaW5nIHVzZXIgbm90aWZpY2F0aW9uICovCisJTVNHX0xFVkVMX0lORk8gPSAyLCAgICAgICAgICAgLyogTm9ybWFsIG1lc3NhZ2UuICovCisJTVNHX0xFVkVMX1ZFUkJPU0UgPSAzLCAgICAgICAgLyogV2lsbCByZXBvcnQgYWxsIHRyaXZhbCBlcnJvcnMuICovCisJTVNHX0xFVkVMX0RFQlVHID0gNCAgICAgICAgICAgLyogT25seSBmb3IgZGVidWcgcHVycG9zZS4gKi8KIH0gREVWSUNFX01TR19MRVZFTCwgKlBERVZJQ0VfTVNHX0xFVkVMOwogCiB0eXBlZGVmIGVudW0gX19kZXZpY2VfaW5pdF90eXBlIHsKLSAgICBERVZJQ0VfSU5JVF9DT0xEPTAsICAgICAgICAgLy8gY29sZCBpbml0Ci0gICAgREVWSUNFX0lOSVRfUkVTRVQsICAgICAgICAgIC8vIHJlc2V0IGluaXQgb3IgRHggdG8gRDAgcG93ZXIgcmVtYWluIGluaXQKLSAgICBERVZJQ0VfSU5JVF9EWFBMICAgICAgICAgICAgLy8gRHggdG8gRDAgcG93ZXIgbG9zdCBpbml0CisJREVWSUNFX0lOSVRfQ09MRCA9IDAsICAgICAgIC8qIGNvbGQgaW5pdCAqLworCURFVklDRV9JTklUX1JFU0VULCAgICAgICAgICAvKiByZXNldCBpbml0IG9yIER4IHRvIEQwIHBvd2VyIHJlbWFpbiAqLworCURFVklDRV9JTklUX0RYUEwgICAgICAgICAgICAvKiBEeCB0byBEMCBwb3dlciBsb3N0IGluaXQgKi8KIH0gREVWSUNFX0lOSVRfVFlQRSwgKlBERVZJQ0VfSU5JVF9UWVBFOwogCi0KIC8vVVNCCiAKIC8vCkBAIC0yMDMsOSArMTkzLDYgQEAKICAgICBDT05URVhUX01HTVRfUEFDS0VUCiB9IENPTlRFWFRfVFlQRTsKIAotCi0KLQogLy8gUkNCIChSZWNlaXZlIENvbnRyb2wgQmxvY2spCiB0eXBlZGVmIHN0cnVjdCBfUkNCCiB7CkBAIC0yMTksNyArMjA2LDYgQEAKIAogfSBSQ0IsICpQUkNCOwogCi0KIC8vIHVzZWQgdG8gdHJhY2sgYnVsayBvdXQgaXJwcwogdHlwZWRlZiBzdHJ1Y3QgX1VTQl9TRU5EX0NPTlRFWFQgewogICAgIHZvaWQgKnBEZXZpY2U7CkBAIC0yMzMsNyArMjE5LDYgQEAKICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICBEYXRhW01BWF9UT1RBTF9TSVpFX1dJVEhfQUxMX0hFQURFUlNdOwogfSBVU0JfU0VORF9DT05URVhULCAqUFVTQl9TRU5EX0NPTlRFWFQ7CiAKLQogLyogc3RydWN0dXJlIGdvdCBmcm9tIGNvbmZpZ3VyYXRpb24gZmlsZSBhcyB1c2VyLWRlc2lyZWQgZGVmYXVsdCBzZXR0aW5ncyAqLwogdHlwZWRlZiBzdHJ1Y3QgX0RFRkFVTFRfQ09ORklHIHsKIAlzaWduZWQgaW50ICAgIFpvbmVUeXBlOwpAQCAtMjU0LDEyICsyMzksMTAgQEAKICAgICBCT09MICAgICAgICAgICAgYkluVXNlOwogfSBJTlRfQlVGRkVSLCAqUElOVF9CVUZGRVI7CiAKLQotCiAvLzA6MTFBIDE6MTFCIDI6MTFHCiB0eXBlZGVmIGVudW0gX1ZJQV9CQl9UWVBFCiB7Ci0gICAgQkJfVFlQRV8xMUE9MCwKKyAgICBCQl9UWVBFXzExQSA9IDAsCiAgICAgQkJfVFlQRV8xMUIsCiAgICAgQkJfVFlQRV8xMUcKIH0gVklBX0JCX1RZUEUsICpQVklBX0JCX1RZUEU7CkBAIC0yNjcsMjIgKzI1MCwxOCBAQAogLy8wOjExYSwxOjExYiwyOjExZ2Iob25seSBDQ0sgaW4gQmFzaWNSYXRlKSwzOjExZ2EoT0ZETSBpbiBCYXNpYyBSYXRlKQogdHlwZWRlZiBlbnVtIF9WSUFfUEtUX1RZUEUKIHsKLSAgICBQS19UWVBFXzExQT0wLAorICAgIFBLX1RZUEVfMTFBID0gMCwKICAgICBQS19UWVBFXzExQiwKICAgICBQS19UWVBFXzExR0IsCiAgICAgUEtfVFlQRV8xMUdBCiB9IFZJQV9QS1RfVFlQRSwgKlBWSUFfUEtUX1RZUEU7CiAKLQotCi0KIC8vKysgTkRJUyByZWxhdGVkCiAKICNkZWZpbmUgTkRJU19TVEFUVVMgICAgIGludAotI2RlZmluZSBOVFNUQVRVUyAgICAgICAgaW50CiAKIHR5cGVkZWYgZW51bSBfX0RFVklDRV9ORElTX1NUQVRVUyB7Ci0gICAgU1RBVFVTX1NVQ0NFU1M9MCwKKyAgICBTVEFUVVNfU1VDQ0VTUyA9IDAsCiAgICAgU1RBVFVTX0ZBSUxVUkUsCiAgICAgU1RBVFVTX1JFU09VUkNFUywKICAgICBTVEFUVVNfUEVORElORywKQEAgLTgxMCwxNyArNzg5LDEyIEBACiAgICAgLy8gY29tbWFuZCB0aW1lcgogICAgIHN0cnVjdCB0aW1lcl9saXN0ICAgICAgIHNUaW1lckNvbW1hbmQ7CiAKLS8vMjAwNy0wMTE1LTAxPEFkZD5ieSBNaWtlTGl1Ci0jaWZkZWYgVHhJblNsZWVwCiAgICAgIHN0cnVjdCB0aW1lcl9saXN0ICAgICAgIHNUaW1lclR4RGF0YTsKICAgICAgdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgICAgICAgICAgblR4RGF0YVRpbWVDb3V0OwogICAgICBCT09MICBmVHhEYXRhSW5TbGVlcDsKICAgICAgQk9PTCAgSXNUeERhdGFUcmlnZ2VyOwotI2VuZGlmCiAKLSNpZmRlZiBXUEFfU01fVHJhbnN0YXR1cwogICAgIEJPT0wgIGZXUEFfQXV0aGVuZWQ7ICAgICAgICAgICAvL2lzIFdQQS9XUEEtUFNLIG9yIFdQQTIvV1BBMi1QU0sgYXV0aGVuPz8KLSNlbmRpZgogICAgIEJZVEUgICAgICAgICAgICBieVJlQXNzb2NDb3VudDsgICAvL21pa2UgYWRkOnJlLWFzc29jaWF0aW9uIHJldHJ5IHRpbWVzIQogICAgIEJZVEUgICAgICAgICAgICBieUxpbmtXYWl0Q291bnQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZGV2aWNlX2NmZy5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9kZXZpY2VfY2ZnLmgKaW5kZXggYzgxNjkwMS4uYTBiODIxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9kZXZpY2VfY2ZnLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9kZXZpY2VfY2ZnLmgKQEAgLTc3LDI1ICs3NywyMCBAQAogLy9NYXg6IDIzNzg9MjMxMlBheWxvYWQgKyAzMEhEICs0Q1JDICsgMlBhZGRpbmcgKyA0TGVuICsgOFRTRiArIDRSU1IKICNkZWZpbmUgUEtUX0JVRl9TWiAgICAgICAgICAyMzkwCiAKLQogI2RlZmluZSBNQVhfVUlOVFMgICAgICAgICAgIDgKICNkZWZpbmUgT1BUSU9OX0RFRkFVTFQgICAgICB7IFswIC4uLiBNQVhfVUlOVFMtMV0gPSAtMX0KIAotCi0KLXR5cGVkZWYgZW51bSAgX2NoaXBfdHlwZXsKLSAgICBWVDMxODQ9MQordHlwZWRlZiBlbnVtICBfY2hpcF90eXBlIHsKKyAgICBWVDMxODQgPSAxCiB9IENISVBfVFlQRSwgKlBDSElQX1RZUEU7CiAKLQotCiAjaWZkZWYgVklBV0VUX0RFQlVHCiAjZGVmaW5lIEFTU0VSVCh4KSB7IFwKICAgICBpZiAoISh4KSkgeyBcCi0gICAgICAgIHByaW50ayhLRVJOX0VSUiAiYXNzZXJ0aW9uICVzIGZhaWxlZDogZmlsZSAlcyBsaW5lICVkXG4iLCAjeCxcCisJcHJpbnRrKEtFUk5fRVJSICJhc3NlcnRpb24gJXMgZmFpbGVkOiBmaWxlICVzIGxpbmUgJWRcbiIsICN4LCBcCiAgICAgICAgIF9fRlVOQ1RJT05fXywgX19MSU5FX18pO1wKLSAgICAgICAgKihpbnQqKSAwPTA7XAotICAgIH1cCisJKihpbnQgKikgMCA9IDA7CQlcCisgICAgfSBcCiB9CiAjZGVmaW5lIERCR19QT1JUODAodmFsdWUpICAgICAgICAgICAgICAgICAgIG91dGIodmFsdWUsIDB4ODApCiAjZWxzZQpAQCAtMTAzLDUgKzk4LDQgQEAKICNkZWZpbmUgREJHX1BPUlQ4MCh2YWx1ZSkKICNlbmRpZgogCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9kcGMuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZHBjLmMKaW5kZXggOWFmZTc2Yy4uNWU4ODM0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9kcGMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2RwYy5jCkBAIC04MCw3ICs4MCw3IEBACiB2b2lkCiBzX3ZHZXREQVNBKAogICAgICAgUEJZVEUgcGJ5UnhCdWZmZXJBZGRyLAotICAgICBQVUlOVCBwY2JIZWFkZXJTaXplLAorICAgICB1bnNpZ25lZCBpbnQgKnBjYkhlYWRlclNpemUsCiAgICAgIFBTRXRoZXJuZXRIZWFkZXIgcHNFdGhIZWFkZXIKICAgICApOwogCkBAIC05Miw3ICs5Miw3IEBACiAgICAgICB1bnNpZ25lZCBpbnQgY2JQYWNrZXRTaXplLAogICAgICAgQk9PTCBiSXNXRVAsCiAgICAgICBCT09MIGJFeHRJViwKLSAgICAgUFVJTlQgcGNiSGVhZFNpemUKKyAgICAgdW5zaWduZWQgaW50ICpwY2JIZWFkU2l6ZQogICAgICk7CiAKIHN0YXRpYyBCT09MIHNfYkFQTW9kZVJ4Q3RsKApAQCAtMTY3LDcgKzE2Nyw3IEBACiAgICAgICB1bnNpZ25lZCBpbnQgY2JQYWNrZXRTaXplLAogICAgICAgQk9PTCBiSXNXRVAsCiAgICAgICBCT09MIGJFeHRJViwKLSAgICAgUFVJTlQgcGNiSGVhZFNpemUKKyAgICAgdW5zaWduZWQgaW50ICpwY2JIZWFkU2l6ZQogICAgICkKIHsKICAgICBQQllURSAgICAgICAgICAgcGJ5UnhCdWZmZXI7CkBAIC0xOTUsMTAgKzE5NSw5IEBACiAgICAgfTsKIAogICAgIHBieVJ4QnVmZmVyID0gKFBCWVRFKSAocGJ5UnhCdWZmZXJBZGRyICsgY2JIZWFkZXJTaXplKTsKLSAgICBpZiAoSVNfRVRIX0FERFJFU1NfRVFVQUwocGJ5UnhCdWZmZXIsICZwRGV2aWNlLT5hYnlTTkFQX0JyaWRnZXR1bm5lbFswXSkpIHsKKyAgICBpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihwYnlSeEJ1ZmZlciwgJnBEZXZpY2UtPmFieVNOQVBfQnJpZGdldHVubmVsWzBdKSkgewogICAgICAgICBjYkhlYWRlclNpemUgKz0gNjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoSVNfRVRIX0FERFJFU1NfRVFVQUwocGJ5UnhCdWZmZXIsICZwRGV2aWNlLT5hYnlTTkFQX1JGQzEwNDJbMF0pKSB7CisgICAgfSBlbHNlIGlmICghY29tcGFyZV9ldGhlcl9hZGRyKHBieVJ4QnVmZmVyLCAmcERldmljZS0+YWJ5U05BUF9SRkMxMDQyWzBdKSkgewogICAgICAgICBjYkhlYWRlclNpemUgKz0gNjsKICAgICAgICAgcHdUeXBlID0gKFBXT1JEKSAocGJ5UnhCdWZmZXJBZGRyICsgY2JIZWFkZXJTaXplKTsKICAgICAgICAgaWYgKCgqcHdUeXBlIT0gVFlQRV9QS1RfSVBYKSAmJiAoKnB3VHlwZSAhPSBjcHVfdG9fbGUxNigweEYzODApKSkgewpAQCAtMjYyLDcgKzI2MSw3IEBACiB2b2lkCiBzX3ZHZXREQVNBICgKICAgICAgIFBCWVRFIHBieVJ4QnVmZmVyQWRkciwKLSAgICAgUFVJTlQgcGNiSGVhZGVyU2l6ZSwKKyAgICAgdW5zaWduZWQgaW50ICpwY2JIZWFkZXJTaXplLAogICAgICBQU0V0aGVybmV0SGVhZGVyIHBzRXRoSGVhZGVyCiAgICAgKQogewpAQCAtMzQzLDkgKzM0Miw3IEBACiAgICAgUEJZVEUgICAgICAgICAgIHBieVJ4U3RzOwogICAgIFBCWVRFICAgICAgICAgICBwYnlSeFJhdGU7CiAgICAgUEJZVEUgICAgICAgICAgIHBieVNROwotI2lmZGVmIENhbGN1X0xpbmtRdWFsCiAgICAgUEJZVEUgICAgICAgICAgIHBieTNTUTsKLSNlbmRpZgogICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgIGNiSGVhZGVyU2l6ZTsKICAgICBQU0tleUl0ZW0gICAgICAgcEtleSA9IE5VTEw7CiAgICAgV09SRCAgICAgICAgICAgIHdSeFRTQzE1XzAgPSAwOwpAQCAtNDE2LDcgKzQxMyw2IEBACiAgICAgd1BMQ1B3aXRoUGFkZGluZyA9ICggKCpwd1BMQ1BfTGVuZ3RoIC8gNCkgKyAoICgqcHdQTENQX0xlbmd0aCAlIDQpID8gMTowICkgKSAqNDsKIAogICAgIHBxd1RTRlRpbWUgPSAoUFFXT1JEKSAocGJ5REFkZHJlc3MgKyA4ICsgd1BMQ1B3aXRoUGFkZGluZyk7Ci0jaWZkZWYgQ2FsY3VfTGlua1F1YWwKICAgaWYocERldmljZS0+YnlCQlR5cGUgPT0gQkJfVFlQRV8xMUcpICB7CiAgICAgICBwYnkzU1EgPSBwYnlEQWRkcmVzcyArIDggKyB3UExDUHdpdGhQYWRkaW5nICsgMTI7CiAgICAgICBwYnlTUSA9IHBieTNTUTsKQEAgLTQyNSw5ICs0MjEsNiBAQAogICAgcGJ5U1EgPSBwYnlEQWRkcmVzcyArIDggKyB3UExDUHdpdGhQYWRkaW5nICsgODsKICAgIHBieTNTUSA9IHBieVNROwogICB9Ci0jZWxzZQotICAgIHBieVNRID0gcGJ5REFkZHJlc3MgKyA4ICsgd1BMQ1B3aXRoUGFkZGluZyArIDg7Ci0jZW5kaWYKICAgICBwYnlOZXdSc3IgPSBwYnlEQWRkcmVzcyArIDggKyB3UExDUHdpdGhQYWRkaW5nICsgOTsKICAgICBwYnlSU1NJID0gcGJ5REFkZHJlc3MgKyA4ICsgd1BMQ1B3aXRoUGFkZGluZyArIDEwOwogICAgIHBieVJzciA9IHBieURBZGRyZXNzICsgOCArIHdQTENQd2l0aFBhZGRpbmcgKyAxMTsKQEAgLTQ1MywyMSArNDQ2LDIyIEBACiAgICAgaWYgKChwTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9TVEFOREJZKSB8fAogICAgICAgICAocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX1NUQSkpIHsKICAgICAgICBpZiAocE1nbXQtPnNOb2RlREJUYWJsZVswXS5iQWN0aXZlKSB7Ci0gICAgICAgICBpZihJU19FVEhfQUREUkVTU19FUVVBTCAocE1nbXQtPmFieUN1cnJCU1NJRCwgcE1BQ0hlYWRlci0+YWJ5QWRkcjIpICkgeworCSBpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihwTWdtdC0+YWJ5Q3VyckJTU0lELCBwTUFDSGVhZGVyLT5hYnlBZGRyMikpIHsKIAkgICAgaWYgKHBNZ210LT5zTm9kZURCVGFibGVbMF0udUluQWN0aXZlQ291bnQgIT0gMCkKICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0udUluQWN0aXZlQ291bnQgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgIH0KIAotICAgIGlmICghSVNfTVVMVElDQVNUX0FERFJFU1MocE1BQ0hlYWRlci0+YWJ5QWRkcjEpICYmICFJU19CUk9BRENBU1RfQUREUkVTUyhwTUFDSGVhZGVyLT5hYnlBZGRyMSkpIHsKKyAgICBpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHBNQUNIZWFkZXItPmFieUFkZHIxKSAmJiAhaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIocE1BQ0hlYWRlci0+YWJ5QWRkcjEpKSB7CiAgICAgICAgIGlmICggV0NUTGJJc0R1cGxpY2F0ZSgmKHBEZXZpY2UtPnNEdXBSeENhY2hlKSwgKFBTODAyXzExSGVhZGVyKSBwYnlGcmFtZSkgKSB7CiAgICAgICAgICAgICBwRGV2aWNlLT5zODAyXzExQ291bnRlci5GcmFtZUR1cGxpY2F0ZUNvdW50Kys7CiAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoICFJU19FVEhfQUREUkVTU19FUVVBTCAocERldmljZS0+YWJ5Q3VycmVudE5ldEFkZHIsIHBNQUNIZWFkZXItPmFieUFkZHIxKSApIHsKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKwlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKHBEZXZpY2UtPmFieUN1cnJlbnROZXRBZGRyLAorCQkJICAgICAgIHBNQUNIZWFkZXItPmFieUFkZHIxKSkgeworCQlyZXR1cm4gRkFMU0U7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQ3NSw3ICs0NjksOCBAQAogICAgIC8vIFVzZSBmb3IgVEtJUCBNSUMKICAgICBzX3ZHZXREQVNBKHBieUZyYW1lLCAmY2JIZWFkZXJTaXplLCAmcERldmljZS0+c1J4RXRoSGVhZGVyKTsKIAotICAgIGlmIChJU19FVEhfQUREUkVTU19FUVVBTCgoUEJZVEUpJihwRGV2aWNlLT5zUnhFdGhIZWFkZXIuYWJ5U3JjQWRkclswXSksIHBEZXZpY2UtPmFieUN1cnJlbnROZXRBZGRyKSkKKyAgICBpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcigoUEJZVEUpJihwRGV2aWNlLT5zUnhFdGhIZWFkZXIuYWJ5U3JjQWRkclswXSksCisJCQkgICAgcERldmljZS0+YWJ5Q3VycmVudE5ldEFkZHIpKQogICAgICAgICByZXR1cm4gRkFMU0U7CiAKICAgICBpZiAoKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0VTU19BUCkgfHwgKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0lCU1NfU1RBKSkgewpAQCAtNTY4LDggKzU2Myw4IEBACiAgICAgLy8KICAgICAvLyBSWCBPSwogICAgIC8vCi0gICAgLy9yZW1vdmUgdGhlIENSQyBsZW5ndGgKLSAgICBGcmFtZVNpemUgLT0gVV9DUkNfTEVOOworICAgIC8qIHJlbW92ZSB0aGUgRkNTL0NSQyBsZW5ndGggKi8KKyAgICBGcmFtZVNpemUgLT0gRVRIX0ZDU19MRU47CiAKICAgICBpZiAoICEoKnBieVJzciAmIChSU1JfQUREUkJST0FEIHwgUlNSX0FERFJNVUxUSSkpICYmIC8vIHVuaWNhc3QgYWRkcmVzcwogICAgICAgICAoSVNfRlJBR01FTlRfUEtUKChwYnlGcmFtZSkpKQpAQCAtNzU4LDEwICs3NTMsMTEgQEAKICAgICAgICAgcE1nbXQtPnBDdXJyQlNTLT5ieVJTU0lTdGF0Q250Kys7CiAgICAgICAgIHBNZ210LT5wQ3VyckJTUy0+YnlSU1NJU3RhdENudCAlPSBSU1NJX1NUQVRfQ09VTlQ7CiAgICAgICAgIHBNZ210LT5wQ3VyckJTUy0+bGRCbUF2ZXJhZ2VbcE1nbXQtPnBDdXJyQlNTLT5ieVJTU0lTdGF0Q250XSA9IGxkQm07Ci0gICAgICAgIGZvcihpaT0wO2lpPFJTU0lfU1RBVF9DT1VOVDtpaSsrKSB7Ci0gICAgICAgICAgICBpZiAocE1nbXQtPnBDdXJyQlNTLT5sZEJtQXZlcmFnZVtpaV0gIT0gMCkgewotICAgICAgICAgICAgcE1nbXQtPnBDdXJyQlNTLT5sZEJtTUFYID0gbWF4KHBNZ210LT5wQ3VyckJTUy0+bGRCbUF2ZXJhZ2VbaWldLCBsZEJtKTsKLSAgICAgICAgICAgIH0KKwlmb3IgKGlpID0gMDsgaWkgPCBSU1NJX1NUQVRfQ09VTlQ7IGlpKyspIHsKKwkJaWYgKHBNZ210LT5wQ3VyckJTUy0+bGRCbUF2ZXJhZ2VbaWldICE9IDApIHsKKwkJCXBNZ210LT5wQ3VyckJTUy0+bGRCbU1BWCA9CisJCQkJbWF4KHBNZ210LT5wQ3VyckJTUy0+bGRCbUF2ZXJhZ2VbaWldLCBsZEJtKTsKKwkJfQogICAgICAgICB9CiAgICAgfQogKi8KQEAgLTE0NDgsNyArMTQ0NCw3IEBACiAgICAgaWYgKEZyYW1lU2l6ZSA+IENCX01BWF9CVUZfU0laRSkKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIC8vIGNoZWNrIERBCi0gICAgaWYoSVNfTVVMVElDQVNUX0FERFJFU1MoKFBCWVRFKShza2ItPmRhdGErY2JIZWFkZXJPZmZzZXQpKSkgeworICAgIGlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcigoUEJZVEUpKHNrYi0+ZGF0YStjYkhlYWRlck9mZnNldCkpKSB7CiAgICAgICAgaWYgKHBNZ210LT5zTm9kZURCVGFibGVbMF0uYlBTRW5hYmxlKSB7CiAKICAgICAgICAgICAgc2tiY3B5ID0gZGV2X2FsbG9jX3NrYigoaW50KXBEZXZpY2UtPnJ4X2J1Zl9zeik7CkBAIC0xNTIzLDcgKzE1MTksNyBAQAogdm9pZCBSWHZXb3JrSXRlbSh2b2lkICpDb250ZXh0KQogewogICAgIFBTRGV2aWNlIHBEZXZpY2UgPSAoUFNEZXZpY2UpIENvbnRleHQ7Ci0gICAgTlRTVEFUVVMgICAgICAgIG50U3RhdHVzOworICAgIGludCBudFN0YXR1czsKICAgICBQUkNCICAgICAgICAgICAgcFJDQj1OVUxMOwogCiAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyItLS0tPlJ4IFBvbGxpbmcgVGhyZWFkXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZmlybXdhcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZmlybXdhcmUuYwppbmRleCBlMWY5NmQ3Li5lYmI5Yzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2Zpcm13YXJlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9maXJtd2FyZS5jCkBAIC04NDgsNyArODQ4LDcgQEAKICAgICAgUFNEZXZpY2UgcERldmljZQogICAgICkKIHsKLSAgICBOVFNUQVRVUyAgICAgICAgICAgICAgICBudFN0YXR1czsKKwlpbnQgbnRTdGF0dXM7CiAKICAgICBudFN0YXR1cyA9IENPTlRST0xuc1JlcXVlc3RJbihwRGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVTU0FHRV9UWVBFX1JFQUQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2ludC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pbnQuYwppbmRleCA4OWY1YjE4Li5jOTU4MzNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2ludC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvaW50LmMKQEAgLTgyLDcgKzgyLDcgQEAKIHZvaWQgSU5UdldvcmtJdGVtKHZvaWQgKkNvbnRleHQpCiB7CiAJUFNEZXZpY2UgcERldmljZSA9IChQU0RldmljZSkgQ29udGV4dDsKLQlOVFNUQVRVUyBudFN0YXR1czsKKwlpbnQgbnRTdGF0dXM7CiAKIAlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIi0tLS0+SW50ZXJydXB0IFBvbGxpbmcgVGhyZWFkXG4iKTsKIApAQCAtOTIsMTAgKzkyLDkgQEAKIAlzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogfQogCi1OVFNUQVRVUwotSU5UbnNQcm9jZXNzRGF0YShQU0RldmljZSBwRGV2aWNlKQoraW50IElOVG5zUHJvY2Vzc0RhdGEoUFNEZXZpY2UgcERldmljZSkKIHsKLQlOVFNUQVRVUwlzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKwlpbnQgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CiAJUFNJTlREYXRhCXBJTlREYXRhOwogCVBTTWdtdE9iamVjdAlwTWdtdCA9ICYocERldmljZS0+c01nbXRPYmopOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpwU3RhdHMgPSAmcERldmljZS0+c3RhdHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2ludC5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pbnQuaAppbmRleCBjZGYzNTUxLi4zMTc2YzhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2ludC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvaW50LmgKQEAgLTU3LDcgKzU3LDcgQEAKICAgICBCWVRFICAgIGJ5QUNLRmFpbDsKICAgICBCWVRFICAgIGJ5RkNTRXJyOwogICAgIEJZVEUgICAgYWJ5U1dbMl07Ci19X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQorfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTSU5URGF0YSwgKlBTSU5URGF0YTsKIAogCkBAIC02OCwxMCArNjgsNiBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogdm9pZCBJTlR2V29ya0l0ZW0odm9pZCAqQ29udGV4dCk7Ci0KLU5UU1RBVFVTCi1JTlRuc1Byb2Nlc3NEYXRhKAotICAgICAgUFNEZXZpY2UgcERldmljZQotICAgICk7CitpbnQgSU5UbnNQcm9jZXNzRGF0YShQU0RldmljZSBwRGV2aWNlKTsKIAogI2VuZGlmIC8qIF9fSU5UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pb2NtZC5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pb2NtZC5oCmluZGV4IGZiYmExZDUuLjFjZTM5YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvaW9jbWQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2lvY21kLmgKQEAgLTcwLDEwICs3MCwxMCBAQAogfSBXTUFDX0NNRCwgKlBXTUFDX0NNRDsKIAogdHlwZWRlZiBlbnVtIHRhZ1daT05FVFlQRSB7Ci0gIFpvbmVUeXBlX1VTQT0wLAotICBab25lVHlwZV9KYXBhbj0xLAotICBab25lVHlwZV9FdXJvcGU9MgotfVdaT05FVFlQRTsKKyAgWm9uZVR5cGVfVVNBID0gMCwKKyAgWm9uZVR5cGVfSmFwYW4gPSAxLAorICBab25lVHlwZV9FdXJvcGUgPSAyCit9IFdaT05FVFlQRTsKIAogI2RlZmluZSBBREhPQwkwCiAjZGVmaW5lIElORlJBCTEKQEAgLTgzLDkgKzgzLDkgQEAKICNkZWZpbmUgQURIT0NfU1RBUlRFRAkgICAxCiAjZGVmaW5lIEFESE9DX0pPSU5URUQJICAgMgogCi0jZGVmaW5lIFBIWTgwMjExYSAJICAgIDAKLSNkZWZpbmUgUEhZODAyMTFiICAgICAgIDEKLSNkZWZpbmUgUEhZODAyMTFnICAgICAgIDIKKyNkZWZpbmUgUEhZODAyMTFhIDAKKyNkZWZpbmUgUEhZODAyMTFiIDEKKyNkZWZpbmUgUEhZODAyMTFnIDIKIAogI2RlZmluZSBTU0lEX0lEICAgICAgICAgICAgICAgIDAKICNkZWZpbmUgU1NJRF9NQVhMRU4gICAgICAgICAgICAzMgpAQCAtMTQzLDcgKzE0Myw2IEBACiAKIH0gU0NtZFpvbmVUeXBlU2V0LCAqUFNDbWRab25lVHlwZVNldDsKIAotI2lmZGVmIFdQQV9TTV9UcmFuc3RhdHVzCiB0eXBlZGVmIHN0cnVjdCB0YWdTV1BBUmVzdWx0IHsKICAgICAgICAgIGNoYXIJaWZuYW1lWzEwMF07CiAJdTggcHJvdG87CkBAIC0xNTEsNyArMTUwLDYgQEAKIAl1OCBlYXBfdHlwZTsKICAgICAgICAgIEJPT0wgYXV0aGVudGljYXRlZDsKIH0gU1dQQVJlc3VsdCwgKlBTV1BBUmVzdWx0OwotI2VuZGlmCiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NDbWRTdGFydEFQIHsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pb2N0bC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pb2N0bC5jCmluZGV4IDE5YTg0YjYuLmQ1MzI2MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvaW9jdGwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2lvY3RsLmMKQEAgLTQ4LDkgKzQ4LDcgQEAKIC8vc3RhdGljIGludCAgICAgICAgICBtc2dsZXZlbCAgICAgICAgICAgICAgICA9TVNHX0xFVkVMX0RFQlVHOwogc3RhdGljIGludCAgICAgICAgICBtc2dsZXZlbCAgICAgICAgICAgICAgICA9TVNHX0xFVkVMX0lORk87CiAKLSNpZmRlZiBXUEFfU01fVHJhbnN0YXR1cwogICAgIFNXUEFSZXN1bHQgd3BhX1Jlc3VsdDsKLSNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0yMzIsMTAgKzIzMCwxMCBAQAogICAgICAgICAgICAgcERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPSBGQUxTRTsKICAgICAgICAgICAgIHBEZXZpY2UtPmVFbmNyeXB0aW9uU3RhdHVzID0gTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZDsKICAgICAgICAgICAgIHNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotICAgICAgICAgICAgZm9yKHV1PTA7dXU8TUFYX0tFWV9UQUJMRTt1dSsrKQotICAgICAgICAgICAgICAgIE1BQ3ZEaXNhYmxlS2V5RW50cnkocERldmljZSx1dSk7CisJICAgIGZvciAodXUgPSAwOyB1dSA8IE1BWF9LRVlfVEFCTEU7IHV1KyspCisJCU1BQ3ZEaXNhYmxlS2V5RW50cnkocERldmljZSwgdXUpOwogICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLSAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIldFUCBmdW5jdGlvbiBkaXNhYmxlLiBcbiIpOworCSAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJXRVAgZnVuY3Rpb24gZGlzYWJsZS5cbiIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtNjU2LDcgKzY1NCw2IEBACiAgICAgICAgIHBSZXEtPndSZXN1bHQgPSAwOwogICAgICAgICBicmVhazsKIAotI2lmZGVmIFdQQV9TTV9UcmFuc3RhdHVzCiAgICAgY2FzZSAweEZGOgogICAgICAgICBtZW1zZXQod3BhX1Jlc3VsdC5pZm5hbWUsMCxzaXplb2Yod3BhX1Jlc3VsdC5pZm5hbWUpKTsKIAkgICAgd3BhX1Jlc3VsdC5wcm90byA9IDA7CkBAIC02NzYsNyArNjczLDYgQEAKIC8vRGF2aWRXYW5nCiAKIGlmKHdwYV9SZXN1bHQuYXV0aGVudGljYXRlZD09VFJVRSkgewotICAgI2lmZGVmIFNuZEV2dF9Ub0FQSQogICAgewogICAgICB1bmlvbiBpd3JlcV9kYXRhICAgICAgd3JxdTsKIApAQCAtNjg3LDcgKzY4Myw2IEBACiAgICAgIHdycXUuZGF0YS5sZW5ndGggPXBJdGVtU1NJRC0+bGVuOwogICAgICB3aXJlbGVzc19zZW5kX2V2ZW50KHBEZXZpY2UtPmRldiwgSVdFVkNVU1RPTSwgJndycXUsIHBJdGVtU1NJRC0+YWJ5U1NJRCk7CiAgICB9Ci0gICAjZW5kaWYKICAgICAgICAgIHBEZXZpY2UtPmZXUEFfQXV0aGVuZWQgPSBUUlVFOyAgICAgICAgICAgLy9pcyBzdWNjZXNzZnVsIHBlZXIgdG8gd3BhX1Jlc3VsdC5hdXRoZW50aWNhdGVkPwogfQogCkBAIC03MDAsNyArNjk1LDYgQEAKIAogCXBSZXEtPndSZXN1bHQgPSAwOwogICAgICAgICBicmVhazsKLSNlbmRpZgogCiAgICAgZGVmYXVsdDoKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiUHJpdmF0ZSBjb21tYW5kIG5vdCBzdXBwb3J0Li5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pb3dwYS5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pb3dwYS5oCmluZGV4IGRhMDNlZGMuLjk1OWM4ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvaW93cGEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2lvd3BhLmgKQEAgLTMxLDEwICszMSw4IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLQogI2RlZmluZSBXUEFfSUVfTEVOIDY0CiAKLQogLy9XUEEgcmVsYXRlZAogLyoKIHR5cGVkZWYgZW51bSB7IFdQQV9BTEdfTk9ORSwgV1BBX0FMR19XRVAsIFdQQV9BTEdfVEtJUCwgV1BBX0FMR19DQ01QIH0gd3BhX2FsZzsKQEAgLTU0LDcgKzUyLDcgQEAKIAlWSUFXR0VUX1NFVF9EUk9QX1VORU5DUllQVCA9IDcsCiAJVklBV0dFVF9TRVRfREVBVVRIRU5USUNBVEUgPSA4LAogCVZJQVdHRVRfU0VUX0FTU09DSUFURSA9IDksCi0JVklBV0dFVF9TRVRfRElTQVNTT0NJQVRFPSAxMAorCVZJQVdHRVRfU0VUX0RJU0FTU09DSUFURSA9IDEwCiB9OwogCiAKQEAgLTc2LDggKzc0LDYgQEAKIAl1MTYgcmVzcF9pZV9sZW47CiB9IHZpYXdnZXRfd3BhX2hlYWRlcjsKIAotCi0KIHN0cnVjdCB2aWF3Z2V0X3dwYV9wYXJhbSB7CiAJdTMyIGNtZDsKIAl1OCBhZGRyWzZdOwpAQCAtODYsNDMgKzgyLDM3IEBACiAJCQl1OCBsZW47CiAJCQl1OCBkYXRhWzBdOwogCQl9IGdlbmVyaWNfZWxlbTsKLQogCQlzdHJ1Y3QgewotICAgICAgICAJdTggYnNzaWRbNl07CisJCQl1OCBic3NpZFs2XTsKIAkJCXU4IHNzaWRbMzJdOwogCQkJdTggc3NpZF9sZW47Ci0gICAgICAgIAl1OCAqd3BhX2llOwotICAgICAgICAJdTE2IHdwYV9pZV9sZW47Ci0gICAgICAgIAlpbnQgcGFpcndpc2Vfc3VpdGU7Ci0gICAgICAgIAlpbnQgZ3JvdXBfc3VpdGU7Ci0gICAgICAgIAlpbnQga2V5X21nbXRfc3VpdGU7Ci0gICAgICAgIAlpbnQgYXV0aF9hbGc7Ci0gICAgICAgIAlpbnQgbW9kZTsKLSAgICAgICAgICAgICAgICB1OCByb2FtX2RibTsgIC8vRGF2aWRXYW5nCisJCQl1OCAqd3BhX2llOworCQkJdTE2IHdwYV9pZV9sZW47CisJCQlpbnQgcGFpcndpc2Vfc3VpdGU7CisJCQlpbnQgZ3JvdXBfc3VpdGU7CisJCQlpbnQga2V5X21nbXRfc3VpdGU7CisJCQlpbnQgYXV0aF9hbGc7CisJCQlpbnQgbW9kZTsKKwkJCXU4IHJvYW1fZGJtOwogCQl9IHdwYV9hc3NvY2lhdGU7Ci0KIAkJc3RydWN0IHsKLQkgICAgICAgIGludCBhbGdfbmFtZTsKLQkgICAgICAgIHUxNiBrZXlfaW5kZXg7Ci0JICAgICAgICB1MTYgc2V0X3R4OwotCSAgICAgICAgdTggKnNlcTsKLQkgICAgICAgIHUxNiBzZXFfbGVuOwotCSAgICAgICAgdTggKmtleTsKLQkgICAgICAgIHUxNiBrZXlfbGVuOworCQkJaW50IGFsZ19uYW1lOworCQkJdTE2IGtleV9pbmRleDsKKwkJCXUxNiBzZXRfdHg7CisJCQl1OCAqc2VxOworCQkJdTE2IHNlcV9sZW47CisJCQl1OCAqa2V5OworCQkJdTE2IGtleV9sZW47CiAJCX0gd3BhX2tleTsKLQogCQlzdHJ1Y3QgewogCQkJdTggc3NpZF9sZW47CiAJCQl1OCBzc2lkWzMyXTsKIAkJfSBzY2FuX3JlcTsKLQogCQlzdHJ1Y3QgewogCQkJdTE2IHNjYW5fY291bnQ7CiAJCQl1OCAqYnVmOwogCQl9IHNjYW5fcmVzdWx0czsKLQogCX0gdTsKLQogfTsKIAogI3ByYWdtYSBwYWNrKDEpCkBAIC0xNDIsMTUgKzEzMiwxMiBAQAogCWludCBtYXhyYXRlOwogfTsKIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IENsYXNzZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IFZhcmlhYmxlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgVHlwZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2VuZGlmIC8qIF9fSU9XUEFfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2l3Y3RsLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2l3Y3RsLmMKaW5kZXggZmE0MDUyMi4uMDE2YjhlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pd2N0bC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvaXdjdGwuYwpAQCAtODMsMzEgKzgzLDkgQEAKIAlsb25nIGxkQm07CiAKIAlwRGV2aWNlLT53c3RhdHMuc3RhdHVzID0gcERldmljZS0+ZU9QTW9kZTsKLQkjaWZkZWYgQ2FsY3VfTGlua1F1YWwKLQkgI2lmIDAKLQkgIGlmKHBEZXZpY2UtPmJ5QkJUeXBlID09IEJCX1RZUEVfMTFCKSB7Ci0JICAgICBpZihwRGV2aWNlLT5ieUN1cnJTUSA+IDEyMCkKLSAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPnNjU3RhdGlzdGljLkxpbmtRdWFsaXR5ID0gMTAwOwotCSAgICAgZWxzZQotCQkgcERldmljZS0+c2NTdGF0aXN0aWMuTGlua1F1YWxpdHkgPSBwRGV2aWNlLT5ieUN1cnJTUSoxMDAvMTIwOwotCSAgICB9Ci0JICBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJUeXBlID09IEJCX1RZUEVfMTFHKSB7Ci0gICAgICAgICAgICAgICAgaWYocERldmljZS0+YnlDdXJyU1EgPCAyMCkKLQkJICAgcERldmljZS0+c2NTdGF0aXN0aWMuTGlua1F1YWxpdHkgPSAxMDA7Ci0JICAgICAgIGVsc2UgaWYocERldmljZS0+YnlDdXJyU1EgPjk2KQotCQkgICBwRGV2aWNlLT5zY1N0YXRpc3RpYy5MaW5rUXVhbGl0eSAgPSAwOwotCSAgICAgICBlbHNlCi0JCSAgIHBEZXZpY2UtPnNjU3RhdGlzdGljLkxpbmtRdWFsaXR5ID0gKDk2LXBEZXZpY2UtPmJ5Q3VyclNRKSoxMDAvNzY7Ci0JICAgfQotCSAgIGlmKHBEZXZpY2UtPmJMaW5rUGFzcyAhPVRSVUUpCi0JICAgICAgIHBEZXZpY2UtPnNjU3RhdGlzdGljLkxpbmtRdWFsaXR5ID0gMDsKLQkgICNlbmRpZgogCSAgIGlmKHBEZXZpY2UtPnNjU3RhdGlzdGljLkxpbmtRdWFsaXR5ID4gMTAwKQogICAgCSAgICAgICBwRGV2aWNlLT5zY1N0YXRpc3RpYy5MaW5rUXVhbGl0eSA9IDEwMDsKICAgICAgICAgICAgICAgIHBEZXZpY2UtPndzdGF0cy5xdWFsLnF1YWwgPShCWVRFKSBwRGV2aWNlLT5zY1N0YXRpc3RpYy5MaW5rUXVhbGl0eTsKLQkjZWxzZQotCXBEZXZpY2UtPndzdGF0cy5xdWFsLnF1YWwgPSBwRGV2aWNlLT5ieUN1cnJTUTsKLQkjZW5kaWYKIAlSRnZSU1NJVG9kQm0ocERldmljZSwgKEJZVEUpKHBEZXZpY2UtPnVDdXJyUlNTSSksICZsZEJtKTsKIAlwRGV2aWNlLT53c3RhdHMucXVhbC5sZXZlbCA9IGxkQm07CiAJLy9wRGV2aWNlLT53c3RhdHMucXVhbC5sZXZlbCA9IDB4MTAwIC0gcERldmljZS0+dUN1cnJSU1NJOwpAQCAtMTMzLDE4ICsxMTEsOSBAQAogCQkJICAgICAgdm9pZCAqd3JxLAogCQkJICAgICAgY2hhciAqZXh0cmEpCiB7Ci0vLzIwMDgtMDQwOS0wMiwgPE1hcms+IGJ5IEVpbnNuIExpdQotLyoKLSNpZmRlZiBTYWZlX0Nsb3NlCi0gIFBTRGV2aWNlCSAgICAgICAgcERldmljZSA9IChQU0RldmljZSluZXRkZXZfcHJpdihkZXYpOwotICBpZiAoIShwRGV2aWNlLT5mbGFncyAmIERFVklDRV9GTEFHU19PUEVORUQpKQotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSNlbmRpZgotKi8KLSAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIgU0lPQ1NJV0NPTU1JVCBcbiIpOworICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiBTSU9DU0lXQ09NTUlUXG4iKTsKIAogCXJldHVybiAwOwotCiB9CiAKIC8qCkBAIC0yMDksOSArMTc4LDcgQEAKIAogCXNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogCi0jaWZkZWYgdXBkYXRlX0Jzc0xpc3QKIAlCU1N2Q2xlYXJCU1NMaXN0KCh2b2lkICopIHBEZXZpY2UsIHBEZXZpY2UtPmJMaW5rUGFzcyk7Ci0jZW5kaWYKIAogLy9taWtlIGFkZDogYWN0aXZlIHNjYW4gT1IgcGFzc2l2ZSBzY2FuIE9SIGRlc2lyZV9zc2lkIHNjYW4KICBpZih3cnEtPmxlbmd0aCA9PSBzaXplb2Yoc3RydWN0IGl3X3NjYW5fcmVxKSkgewpAQCAtMjczLDE0ICsyNDAsNyBAQAogCWxvbmcgbGRCbTsKIAljaGFyIGJ1ZltNQVhfV1BBX0lFX0xFTiAqIDIgKyAzMF07CiAKLS8vMjAwOC0wNDA5LTAyLCA8TWFyaz4gYnkgRWluc24gTGl1Ci0vKgotI2lmZGVmIFNhZmVfQ2xvc2UKLSAgaWYgKCEocERldmljZS0+ZmxhZ3MgJiBERVZJQ0VfRkxBR1NfT1BFTkVEKSkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0jZW5kaWYKLSovCi0gICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIFNJT0NHSVdTQ0FOIFxuIik7CisgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIFNJT0NHSVdTQ0FOXG4iKTsKIAogICAgIGlmIChwTWdtdC0+ZVNjYW5TdGF0ZSA9PSAgV01BQ19JU19TQ0FOTklORykgewogICAgICAgICAvLyBJbiBzY2FubmluZy4uCkBAIC0zNDksMzkgKzMwOSw2IEBACiAJCQl9CiAJCQlpd2UudS5xdWFsLnVwZGF0ZWQ9NzsKIAotLy8yMDA4LTA0MDktMDEsIDxNYXJrPiBieSBFaW5zbiBMaXUKLS8qCi0vLzIwMDgtMDIyMC0wMywgPE1vZGlmeT4gIGJ5IEVpbnNuIExpdQotCWlmKHBEZXZpY2UtPmJMaW5rUGFzcz09IFRSVUUgJiYgSVNfRVRIX0FERFJFU1NfRVFVQUwocEJTUy0+YWJ5QlNTSUQsIHBNZ210LT5hYnlDdXJyQlNTSUQpKXsKLQkjaWZkZWYgQ2FsY3VfTGlua1F1YWwKLQkgI2lmIDAKLQkgIGlmKHBEZXZpY2UtPmJ5QkJUeXBlID09IEJCX1RZUEVfMTFCKSB7Ci0JICAgICBpZihwRGV2aWNlLT5ieUN1cnJTUSA+IDEyMCkKLSAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPnNjU3RhdGlzdGljLkxpbmtRdWFsaXR5ID0gMTAwOwotCSAgICAgZWxzZQotCQkgcERldmljZS0+c2NTdGF0aXN0aWMuTGlua1F1YWxpdHkgPSBwRGV2aWNlLT5ieUN1cnJTUSoxMDAvMTIwOwotCSAgICB9Ci0JICBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJUeXBlID09IEJCX1RZUEVfMTFHKSB7Ci0gICAgICAgICAgICAgICAgaWYocERldmljZS0+YnlDdXJyU1EgPCAyMCkKLQkJICAgcERldmljZS0+c2NTdGF0aXN0aWMuTGlua1F1YWxpdHkgPSAxMDA7Ci0JICAgICAgIGVsc2UgaWYocERldmljZS0+YnlDdXJyU1EgPjk2KQotCQkgICBwRGV2aWNlLT5zY1N0YXRpc3RpYy5MaW5rUXVhbGl0eSAgPSAwOwotCSAgICAgICBlbHNlCi0JCSAgIHBEZXZpY2UtPnNjU3RhdGlzdGljLkxpbmtRdWFsaXR5ID0gKDk2LXBEZXZpY2UtPmJ5Q3VyclNRKSoxMDAvNzY7Ci0JICAgfQotCSAgIGlmKHBEZXZpY2UtPmJMaW5rUGFzcyAhPVRSVUUpCi0JICAgICAgIHBEZXZpY2UtPnNjU3RhdGlzdGljLkxpbmtRdWFsaXR5ID0gMDsKLQkgICNlbmRpZgotCSAgIGlmKHBEZXZpY2UtPnNjU3RhdGlzdGljLkxpbmtRdWFsaXR5ID4gMTAwKQotICAgCSAgICAgICBwRGV2aWNlLT5zY1N0YXRpc3RpYy5MaW5rUXVhbGl0eSA9IDEwMDsKLSAgICAgICAgICAgICAgaXdlLnUucXVhbC5xdWFsID0oQllURSkgcERldmljZS0+c2NTdGF0aXN0aWMuTGlua1F1YWxpdHk7Ci0JI2Vsc2UKLQlpd2UudS5xdWFsLnF1YWwgPSBwRGV2aWNlLT5ieUN1cnJTUTsKLQkjZW5kaWYKLQkJfWVsc2UgewotCSAgICAgICAgaXdlLnUucXVhbC5xdWFsID0gMDsKLQkJfQotKi8KICAgICAgICAgICAgICAgICAgY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOwogICAgICAgIAkvL0FERCBlbmNyeXB0aW9uCiAgICAgICAgICAgICBtZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwpAQCAtNjM0LDE2ICs1NjEsOCBAQAogCXN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopIGV4dHJhOwogCWludAkJaSxrOwogICAgIEJZVEUgYWJ5U3VwcG9ydGVkUmF0ZXNbMTNdPSB7MHgwMiwgMHgwNCwgMHgwQiwgMHgxNiwgMHgwYywgMHgxMiwgMHgxOCwgMHgyNCwgMHgzMCwgMHg0OCwgMHg2MCwgMHg2QywgMHg5MH07Ci0vLzIwMDgtMDQwOS0wMiwgPE1hcms+IGJ5IEVpbnNuIExpdQotLyoKLSAjaWZkZWYgU2FmZV9DbG9zZQotICBQU0RldmljZQkgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpbmV0ZGV2X3ByaXYoZGV2KTsKLSAgaWYgKCEocERldmljZS0+ZmxhZ3MgJiBERVZJQ0VfRkxBR1NfT1BFTkVEKSkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0jZW5kaWYKLSAqLwogCi0gICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIFNJT0NHSVdSQU5HRSBcbiIpOworICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiBTSU9DR0lXUkFOR0VcbiIpOwogCWlmICh3cnEtPnBvaW50ZXIpIHsKIAkJd3JxLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKTsKIAkJbWVtc2V0KHJhbmdlLCAwLCBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKSk7CkBAIC02NTMsMjMgKzU3MiwxOSBAQAogCQkvLyBTaG91bGQgYmUgYmFzZWQgb24gY2FwX3JpZC5jb3VudHJ5IHRvIGdpdmUgb25seQogCQkvLyAgd2hhdCB0aGUgY3VycmVudCBjYXJkIHN1cHBvcnQKIAkJayA9IDA7Ci0JCWZvcihpID0gMDsgaSA8IDE0OyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IDE0OyBpKyspIHsKIAkJCXJhbmdlLT5mcmVxW2tdLmkgPSBpICsgMTsgLy8gTGlzdCBpbmRleAogCQkJcmFuZ2UtPmZyZXFba10ubSA9IGZyZXF1ZW5jeV9saXN0W2ldICogMTAwMDAwOwogCQkJcmFuZ2UtPmZyZXFbaysrXS5lID0gMTsJLy8gVmFsdWVzIGluIHRhYmxlIGluIE1IeiAtPiAqIDEwXjUgKiAxMAogCQl9CiAJCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gazsKIAkJLy8gSHVtLi4uIFNob3VsZCBwdXQgdGhlIHJpZ2h0IHZhbHVlcyB0aGVyZQotCSAgICAgI2lmZGVmIENhbGN1X0xpbmtRdWFsCiAgICAgICAgICAgICAgICAgIHJhbmdlLT5tYXhfcXVhbC5xdWFsID0gMTAwOwotCSAgICAgI2Vsc2UKLQkJcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSAyNTU7Ci0JICAgICAjZW5kaWYKIAkJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMDsKIAkJcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gMDsKIAkJcmFuZ2UtPnNlbnNpdGl2aXR5ID0gMjU1OwogCi0JCWZvcihpID0gMCA7IGkgPCAxMyA7IGkrKykgeworCQlmb3IgKGkgPSAwIDsgaSA8IDEzIDsgaSsrKSB7CiAJCQlyYW5nZS0+Yml0cmF0ZVtpXSA9IGFieVN1cHBvcnRlZFJhdGVzW2ldICogNTAwMDAwOwogCQkJaWYocmFuZ2UtPmJpdHJhdGVbaV0gPT0gMCkKIAkJCQlicmVhazsKQEAgLTc2MSw3ICs2NzYsNyBAQAogCQltZW1jcHkocE1nbXQtPmFieURlc2lyZUJTU0lELCB3cnEtPnNhX2RhdGEsIDYpOwogCiAJLy9taWtlIDphZGQKLQkgaWYgKChJU19CUk9BRENBU1RfQUREUkVTUyhwTWdtdC0+YWJ5RGVzaXJlQlNTSUQpKSB8fAorCSBpZiAoKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKHBNZ210LT5hYnlEZXNpcmVCU1NJRCkpIHx8CiAJICAgICAobWVtY21wKHBNZ210LT5hYnlEZXNpcmVCU1NJRCwgWmVyb0JTU0lELCA2KSA9PSAwKSl7CiAJICAgICAgUFJJTlRfSygiU0lPQ1NJV0FQOmludmFsaWQgZGVzaXJlZCBCU1NJRCByZXR1cm4hXG4iKTsKICAgICAgICAgICAgICAgIHJldHVybiByYzsKQEAgLTc3Miw3ICs2ODcsOCBAQAogCQl1bnNpZ25lZCBpbnQgaWksIHVTYW1lQnNzaWROdW0gPSAwOwogICAgICAgICAgICAgICAgICAgZm9yIChpaSA9IDA7IGlpIDwgTUFYX0JTU19OVU07IGlpKyspIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChwTWdtdC0+c0JTU0xpc3RbaWldLmJBY3RpdmUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIElTX0VUSF9BRERSRVNTX0VRVUFMKHBNZ210LT5zQlNTTGlzdFtpaV0uYWJ5QlNTSUQscE1nbXQtPmFieURlc2lyZUJTU0lEKSkgeworCQkJICFjb21wYXJlX2V0aGVyX2FkZHIocE1nbXQtPnNCU1NMaXN0W2lpXS5hYnlCU1NJRCwKKwkJCQkJICAgICBwTWdtdC0+YWJ5RGVzaXJlQlNTSUQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB1U2FtZUJzc2lkTnVtKys7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICB9CkBAIC05NTcsNyArODczLDggQEAKICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgYnkgbWVhbnMgb2YganVkZ2luZyBpZiB0aGVyZSBhcmUgdHdvIHNhbWUgQlNTSUQgZXhpc3QgaW4gbGlzdCA/CiAgICAgICAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCBNQVhfQlNTX05VTTsgaWkrKykgewogICAgICAgICAgICAgICAgICAgICAgaWYgKHBNZ210LT5zQlNTTGlzdFtpaV0uYkFjdGl2ZSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgSVNfRVRIX0FERFJFU1NfRVFVQUwocE1nbXQtPnNCU1NMaXN0W2lpXS5hYnlCU1NJRCwgcEN1cnItPmFieUJTU0lEKSkgeworCQkJICFjb21wYXJlX2V0aGVyX2FkZHIocE1nbXQtPnNCU1NMaXN0W2lpXS5hYnlCU1NJRCwKKwkJCQkJICAgICBwQ3Vyci0+YWJ5QlNTSUQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB1U2FtZUJzc2lkTnVtKys7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICB9CkBAIC0xMDU3LDcgKzk3NCw3IEBACiAJCXU4CW5vcm12YWx1ZSA9ICh1OCkgKHdycS0+dmFsdWUvNTAwMDAwKTsKIAogCQkvLyBDaGVjayBpZiByYXRlIGlzIHZhbGlkCi0JCWZvcihpID0gMCA7IGkgPCAxMyA7IGkrKykgeworCQlmb3IgKGkgPSAwIDsgaSA8IDEzIDsgaSsrKSB7CiAJCQlpZihub3JtdmFsdWUgPT0gYWJ5U3VwcG9ydGVkUmF0ZXNbaV0pIHsKIAkJCQlicmF0ZSA9IGk7CiAJCQkJYnJlYWs7CkBAIC0xMDY3LDcgKzk4NCw3IEBACiAJLy8gLTEgZGVzaWduZWQgdGhlIG1heCByYXRlIChtb3N0bHkgYXV0byBtb2RlKQogCWlmKHdycS0+dmFsdWUgPT0gLTEpIHsKIAkJLy8gR2V0IHRoZSBoaWdoZXN0IGF2YWlsYWJsZSByYXRlCi0JCWZvcihpID0gMCA7IGkgPCAxMyA7IGkrKykgeworCQlmb3IgKGkgPSAwIDsgaSA8IDEzIDsgaSsrKSB7CiAJCQlpZihhYnlTdXBwb3J0ZWRSYXRlc1tpXSA9PSAwKQogCQkJCWJyZWFrOwogCQl9CkBAIC0xNDA1LDggKzEzMjIsOCBAQAogICAgICAgICBwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQ7CiAgICAgICAgIGlmIChwRGV2aWNlLT5mbGFncyAmIERFVklDRV9GTEFHU19PUEVORUQpIHsKICAgICAgICAgICAgIHNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotICAgICAgICAgICAgZm9yKHV1PTA7dXU8TUFYX0tFWV9UQUJMRTt1dSsrKQotICAgICAgICAgICAgICAgIE1BQ3ZEaXNhYmxlS2V5RW50cnkocERldmljZSx1dSk7CisJICAgIGZvciAodXUgPSAwOyB1dSA8IE1BWF9LRVlfVEFCTEU7IHV1KyspCisJCU1BQ3ZEaXNhYmxlS2V5RW50cnkocERldmljZSwgdXUpOwogICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKICAgICAgICAgfQogCX0KQEAgLTE5MjYsMjYgKzE4NDMsNiBAQAogcGFyYW0tPnUud3BhX2tleS5zZXEgPSAodTggKilzZXE7CiBwYXJhbS0+dS53cGFfa2V5LnNlcV9sZW4gPSBzZXFfbGVuOwogCi0jaWYgMAotcHJpbnRrKCJwYXJhbS0+dS53cGFfa2V5LmFsZ19uYW1lID0lZFxuIixwYXJhbS0+dS53cGFfa2V5LmFsZ19uYW1lKTsKLXByaW50aygicGFyYW0tPmFkZHI9JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCi0JICAgICAgcGFyYW0tPmFkZHJbMF0scGFyYW0tPmFkZHJbMV0scGFyYW0tPmFkZHJbMl0sCi0JICAgICAgcGFyYW0tPmFkZHJbM10scGFyYW0tPmFkZHJbNF0scGFyYW0tPmFkZHJbNV0pOwotcHJpbnRrKCJwYXJhbS0+dS53cGFfa2V5LnNldF90eCA9JWRcbiIscGFyYW0tPnUud3BhX2tleS5zZXRfdHgpOwotcHJpbnRrKCJwYXJhbS0+dS53cGFfa2V5LmtleV9pbmRleCA9JWRcbiIscGFyYW0tPnUud3BhX2tleS5rZXlfaW5kZXgpOwotcHJpbnRrKCJwYXJhbS0+dS53cGFfa2V5LmtleV9sZW4gPSVkXG4iLHBhcmFtLT51LndwYV9rZXkua2V5X2xlbik7Ci1wcmludGsoInBhcmFtLT51LndwYV9rZXkua2V5ID0iKTsKLWZvcihpaT0wO2lpPHBhcmFtLT51LndwYV9rZXkua2V5X2xlbjtpaSsrKQotCXByaW50aygiJTAyeDoiLHBhcmFtLT51LndwYV9rZXkua2V5W2lpXSk7Ci0gICAgICAgICBwcmludGsoIlxuIik7Ci1wcmludGsoInBhcmFtLT51LndwYV9rZXkuc2VxX2xlbiA9JWRcbiIscGFyYW0tPnUud3BhX2tleS5zZXFfbGVuKTsKLXByaW50aygicGFyYW0tPnUud3BhX2tleS5zZXEgPSIpOwotZm9yKGlpPTA7aWk8cGFyYW0tPnUud3BhX2tleS5zZXFfbGVuO2lpKyspCi0JcHJpbnRrKCIlMDJ4OiIscGFyYW0tPnUud3BhX2tleS5zZXFbaWldKTsKLSAgICAgICAgIHByaW50aygiXG4iKTsKLQotcHJpbnRrKCIuLi4uLi4uLi4uLlxuIik7Ci0jZW5kaWYKIC8vKioqKnNldCBpZiBjdXJyZW50IGFjdGlvbiBpcyBOZXR3b3JrIE1hbmFnZXIgY291bnQ/PwogLy8qKioqdGhpcyBtZXRob2QgaXMgc28gZm9vbGlzaCxidXQgdGhlcmUgaXMgbm8gb3RoZXIgd2F5Pz8/CiBpZihwYXJhbS0+dS53cGFfa2V5LmFsZ19uYW1lID09IFdQQV9BTEdfTk9ORSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pd2N0bC5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pd2N0bC5oCmluZGV4IGRmOWE0Y2YuLmQ2MDFlOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvaXdjdGwuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2l3Y3RsLmgKQEAgLTMzLDE1ICszMywxMyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IERlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgQ2xhc3NlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgVmFyaWFibGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0cnVjdCBpd19zdGF0aXN0aWNzICppd2N0bF9nZXRfd2lyZWxlc3Nfc3RhdHMgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCitzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqaXdjdGxfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBpbnQgaXdjdGxfc2l3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9rZXkuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYva2V5LmMKaW5kZXggYjA4OTBjMS4uZDE4MWEyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9rZXkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2tleS5jCkBAIC0xNzQsNyArMTc0LDcgQEAKICAgICAqcEtleSA9IE5VTEw7CiAgICAgZm9yIChpPTA7aTxNQVhfS0VZX1RBQkxFO2krKykgewogICAgICAgICBpZiAoKHBUYWJsZS0+S2V5VGFibGVbaV0uYkluVXNlID09IFRSVUUpICYmCi0gICAgICAgICAgICBJU19FVEhfQUREUkVTU19FUVVBTChwVGFibGUtPktleVRhYmxlW2ldLmFieUJTU0lELHBieUJTU0lEKSkgeworCSAgICAhY29tcGFyZV9ldGhlcl9hZGRyKHBUYWJsZS0+S2V5VGFibGVbaV0uYWJ5QlNTSUQsIHBieUJTU0lEKSkgewogICAgICAgICAgICAgaWYgKGR3S2V5SW5kZXggPT0gMHhGRkZGRkZGRikgewogICAgICAgICAgICAgICAgIGlmIChwVGFibGUtPktleVRhYmxlW2ldLlBhaXJ3aXNlS2V5LmJLZXlWYWxpZCA9PSBUUlVFKSB7CiAgICAgICAgICAgICAgICAgICAgICpwS2V5ID0gJihwVGFibGUtPktleVRhYmxlW2ldLlBhaXJ3aXNlS2V5KTsKQEAgLTI0NSw3ICsyNDUsNyBAQAogICAgICAgICAgICAgaiA9IGk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKChwVGFibGUtPktleVRhYmxlW2ldLmJJblVzZSA9PSBUUlVFKSAmJgotICAgICAgICAgICAgSVNfRVRIX0FERFJFU1NfRVFVQUwocFRhYmxlLT5LZXlUYWJsZVtpXS5hYnlCU1NJRCxwYnlCU1NJRCkpIHsKKwkgICAgIWNvbXBhcmVfZXRoZXJfYWRkcihwVGFibGUtPktleVRhYmxlW2ldLmFieUJTU0lELCBwYnlCU1NJRCkpIHsKICAgICAgICAgICAgIC8vIGZvdW5kIHRhYmxlIGFscmVhZHkgZXhpc3QKICAgICAgICAgICAgIGlmICgoZHdLZXlJbmRleCAmIFBBSVJXSVNFX0tFWSkgIT0gMCkgewogICAgICAgICAgICAgICAgIC8vIFBhaXJ3aXNlIGtleQpAQCAtNDAyLDcgKzQwMiw3IEBACiAgICAgaW50ICAgICBpOwogICAgIEJPT0wgICAgYlJldHVyblZhbHVlID0gRkFMU0U7CiAKLSAgICBpZiAoSVNfQlJPQURDQVNUX0FERFJFU1MocGJ5QlNTSUQpKSB7CisgICAgaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKHBieUJTU0lEKSkgewogICAgICAgICAvLyBkZWFsdGUgYWxsIGtleQogICAgICAgICBpZiAoKGR3S2V5SW5kZXggJiBQQUlSV0lTRV9LRVkpICE9IDApIHsKICAgICAgICAgICAgIGZvciAoaT0wO2k8TUFYX0tFWV9UQUJMRTtpKyspIHsKQEAgLTQyNyw3ICs0MjcsNyBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoaT0wO2k8TUFYX0tFWV9UQUJMRTtpKyspIHsKICAgICAgICAgICAgIGlmICggKHBUYWJsZS0+S2V5VGFibGVbaV0uYkluVXNlID09IFRSVUUpICYmCi0gICAgICAgICAgICAgICAgIElTX0VUSF9BRERSRVNTX0VRVUFMKHBUYWJsZS0+S2V5VGFibGVbaV0uYWJ5QlNTSUQscGJ5QlNTSUQpKSB7CisJCSAhY29tcGFyZV9ldGhlcl9hZGRyKHBUYWJsZS0+S2V5VGFibGVbaV0uYWJ5QlNTSUQsIHBieUJTU0lEKSkgewogCiAgICAgICAgICAgICAgICAgaWYgKChkd0tleUluZGV4ICYgUEFJUldJU0VfS0VZKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0uUGFpcndpc2VLZXkuYktleVZhbGlkID0gRkFMU0U7CkBAIC00ODMsMTEgKzQ4MywxMSBAQAogCiAgICAgZm9yIChpPTA7aTxNQVhfS0VZX1RBQkxFO2krKykgewogICAgICAgICBpZiAoKHBUYWJsZS0+S2V5VGFibGVbaV0uYkluVXNlID09IFRSVUUpICYmCi0gICAgICAgICAgICBJU19FVEhfQUREUkVTU19FUVVBTChwVGFibGUtPktleVRhYmxlW2ldLmFieUJTU0lELHBieUJTU0lEKSkgeworCSAgICAhY29tcGFyZV9ldGhlcl9hZGRyKHBUYWJsZS0+S2V5VGFibGVbaV0uYWJ5QlNTSUQsIHBieUJTU0lEKSkgewogICAgICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtpXS5QYWlyd2lzZUtleS5iS2V5VmFsaWQgPSBGQUxTRTsKLSAgICAgICAgICAgIGZvcih1PTA7dTxNQVhfR1JPVVBfS0VZO3UrKykgewotICAgICAgICAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0uR3JvdXBLZXlbdV0uYktleVZhbGlkID0gRkFMU0U7Ci0gICAgICAgICAgICB9CisJICAgIGZvciAodSA9IDA7IHUgPCBNQVhfR1JPVVBfS0VZOyB1KyspCisJCXBUYWJsZS0+S2V5VGFibGVbaV0uR3JvdXBLZXlbdV0uYktleVZhbGlkID0gRkFMU0U7CisKICAgICAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0uZHdHVEtleUluZGV4ID0gMDsKICAgICAgICAgICAgIHNfdkNoZWNrS2V5VGFibGVWYWxpZChwRGV2aWNlLCBwVGFibGUpOwogICAgICAgICAgICAgcmV0dXJuIChUUlVFKTsKQEAgLTUzMSwxOSArNTMxLDEzIEBACiAgICAgcmV0dXJuOwogfQogCi12b2lkIEtleXZSZW1vdmVBbGxXRVBLZXkoCi0gICAgdm9pZCAqcERldmljZUhhbmRsZXIsCi0gICAgUFNLZXlNYW5hZ2VtZW50IHBUYWJsZQotICAgICkKK3ZvaWQgS2V5dlJlbW92ZUFsbFdFUEtleSh2b2lkICpwRGV2aWNlSGFuZGxlciwgUFNLZXlNYW5hZ2VtZW50IHBUYWJsZSkKIHsKLSAgICBQU0RldmljZSAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKKwlQU0RldmljZSBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKKwlpbnQgaTsKIAotICAgIGludCBpOwotCi0gICAgZm9yKGk9MDtpPE1BWF9HUk9VUF9LRVk7aSsrKSB7Ci0gICAgICAgIEtleXZSZW1vdmVXRVBLZXkocERldmljZSxwVGFibGUsIGkpOwotICAgIH0KLQorCWZvciAoaSA9IDA7IGkgPCBNQVhfR1JPVVBfS0VZOyBpKyspCisJCUtleXZSZW1vdmVXRVBLZXkocERldmljZSwgcFRhYmxlLCBpKTsKIH0KIAogLyoKQEAgLTU2Nyw3ICs1NjEsNyBAQAogICAgICpwS2V5ID0gTlVMTDsKICAgICBmb3IgKGk9MDtpPE1BWF9LRVlfVEFCTEU7aSsrKSB7CiAgICAgICAgIGlmICgocFRhYmxlLT5LZXlUYWJsZVtpXS5iSW5Vc2UgPT0gVFJVRSkgJiYKLSAgICAgICAgICAgIElTX0VUSF9BRERSRVNTX0VRVUFMKHBUYWJsZS0+S2V5VGFibGVbaV0uYWJ5QlNTSUQscGJ5QlNTSUQpKSB7CisJICAgICFjb21wYXJlX2V0aGVyX2FkZHIocFRhYmxlLT5LZXlUYWJsZVtpXS5hYnlCU1NJRCwgcGJ5QlNTSUQpKSB7CiAKICAgICAgICAgICAgIGlmIChkd0tleVR5cGUgPT0gUEFJUldJU0VfS0VZKSB7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21hYy5jCmluZGV4IDBhYjNkYjAuLjMzNjk4ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9tYWMuYwpAQCAtMzA2LDggKzMwNiw4IEBACiAgICAgcGJ5RGF0YVs1XSA9IChCWVRFKShkd0RhdGEyPj44KTsKICAgICBwYnlEYXRhWzZdID0gKEJZVEUpKGR3RGF0YTI+PjE2KTsKICAgICBwYnlEYXRhWzddID0gKEJZVEUpKGR3RGF0YTI+PjI0KTsKLSAgICBmb3IoaWk9ODtpaTwyNDtpaSsrKQotICAgICAgICBwYnlEYXRhW2lpXSA9ICpwYnlLZXkrKzsKKyAgICBmb3IgKGlpID0gODsgaWkgPCAyNDsgaWkrKykKKwlwYnlEYXRhW2lpXSA9ICpwYnlLZXkrKzsKIAogICAgIENPTlRST0xuc1JlcXVlc3RPdXQocERldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgIE1FU1NBR0VfVFlQRV9TRVRLRVksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21hYy5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9tYWMuaAppbmRleCA3NzVjNzA5Li40OTFmZjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21hYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFjLmgKQEAgLTQyMCwxMSArNDIwLDExIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXZvaWQgTUFDdlNldE11bHRpQWRkckJ5SGFzaCAoUFNEZXZpY2UgcERldmljZSwgQllURSBieUhhc2hJZHgpOwordm9pZCBNQUN2U2V0TXVsdGlBZGRyQnlIYXNoKFBTRGV2aWNlIHBEZXZpY2UsIEJZVEUgYnlIYXNoSWR4KTsKIHZvaWQgTUFDdldyaXRlTXVsdGlBZGRyKFBTRGV2aWNlIHBEZXZpY2UsIHVuc2lnbmVkIGludCB1Qnl0ZUlkeCwgQllURSBieURhdGEpOwotQk9PTCBNQUNiU2h1dGRvd24oUFNEZXZpY2UgcERldmljZSk7Owotdm9pZCBNQUN2U2V0QkJUeXBlKFBTRGV2aWNlIHBEZXZpY2UsQllURSBieVR5cGUpOwotdm9pZCBNQUN2U2V0TUlTQ0ZpZm8gKFBTRGV2aWNlIHBEZXZpY2UsIFdPUkQgd09mZnNldCwgRFdPUkQgZHdEYXRhKTsKK0JPT0wgTUFDYlNodXRkb3duKFBTRGV2aWNlIHBEZXZpY2UpOwordm9pZCBNQUN2U2V0QkJUeXBlKFBTRGV2aWNlIHBEZXZpY2UsIEJZVEUgYnlUeXBlKTsKK3ZvaWQgTUFDdlNldE1JU0NGaWZvKFBTRGV2aWNlIHBEZXZpY2UsIFdPUkQgd09mZnNldCwgRFdPUkQgZHdEYXRhKTsKIHZvaWQgTUFDdkRpc2FibGVLZXlFbnRyeShQU0RldmljZSBwRGV2aWNlLCB1bnNpZ25lZCBpbnQgdUVudHJ5SWR4KTsKIHZvaWQgTUFDdlNldEtleUVudHJ5KFBTRGV2aWNlIHBEZXZpY2UsIFdPUkQgd0tleUN0bCwgdW5zaWduZWQgaW50IHVFbnRyeUlkeCwKIAkJICAgICB1bnNpZ25lZCBpbnQgdUtleUlkeCwgUEJZVEUgcGJ5QWRkciwgUERXT1JEIHBkd0tleSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21haW5fdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21haW5fdXNiLmMKaW5kZXggMDk4YjA0NS4uYzUyOGVmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9tYWluX3VzYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFpbl91c2IuYwpAQCAtMzY2LDcgKzM2Niw3IEBACiAgICAgQllURSAgICAgICAgICAgIGJ5QW50ZW5uYTsKICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICBpaTsKICAgICBDTURfQ0FSRF9JTklUICAgc0luaXRDbWQ7Ci0gICAgTlRTVEFUVVMgICAgICAgIG50U3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgaW50IG50U3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CiAgICAgUlNQX0NBUkRfSU5JVCAgIHNJbml0UnNwOwogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9ICYocERldmljZS0+c01nbXRPYmopOwogICAgIEJZVEUgICAgICAgICAgICBieVRtcDsKQEAgLTQwNyw4ICs0MDcsOCBAQAogCiAgICAgc0luaXRDbWQuYnlJbml0Q2xhc3MgPSAoQllURSlJbml0VHlwZTsKICAgICBzSW5pdENtZC5iRXhpc3RTV05ldEFkZHIgPSAoQllURSkgcERldmljZS0+YkV4aXN0U1dOZXRBZGRyOwotICAgIGZvcihpaT0wO2lpPDY7aWkrKykKLSAgICAgICAgc0luaXRDbWQuYnlTV05ldEFkZHJbaWldID0gcERldmljZS0+YWJ5Q3VycmVudE5ldEFkZHJbaWldOworICAgIGZvciAoaWkgPSAwOyBpaSA8IDY7IGlpKyspCisJc0luaXRDbWQuYnlTV05ldEFkZHJbaWldID0gcERldmljZS0+YWJ5Q3VycmVudE5ldEFkZHJbaWldOwogICAgIHNJbml0Q21kLmJ5U2hvcnRSZXRyeUxpbWl0ID0gcERldmljZS0+YnlTaG9ydFJldHJ5TGltaXQ7CiAgICAgc0luaXRDbWQuYnlMb25nUmV0cnlMaW1pdCA9IHBEZXZpY2UtPmJ5TG9uZ1JldHJ5TGltaXQ7CiAKQEAgLTQ4NywxMCArNDg3LDEwIEBACiAgICAgICAgICAgaWYoKChwRGV2aWNlLT5hYnlFRVBST01bRUVQX09GU19aT05FVFlQRV0gPT0gWm9uZVR5cGVfSmFwYW4pIHx8CiAJICAgICAgICAocERldmljZS0+YWJ5RUVQUk9NW0VFUF9PRlNfWk9ORVRZUEVdID09IFpvbmVUeXBlX0V1cm9wZSkpJiYKIAkgICAgIChwRGV2aWNlLT5ieU9yaWdpbmFsWm9uZXR5cGUgPT0gWm9uZVR5cGVfVVNBKSkgewotCSAgICBmb3IoaWk9MTE7aWk8MTQ7aWkrKykgewotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmFieUNDS1B3clRibFtpaV0gPSBwRGV2aWNlLT5hYnlDQ0tQd3JUYmxbMTBdOwotCSAgICAgICBwRGV2aWNlLT5hYnlPRkRNUHdyVGJsW2lpXSA9IHBEZXZpY2UtPmFieU9GRE1Qd3JUYmxbMTBdOwotCSAgICB9CisJCWZvciAoaWkgPSAxMTsgaWkgPCAxNDsgaWkrKykgeworCQkJcERldmljZS0+YWJ5Q0NLUHdyVGJsW2lpXSA9IHBEZXZpY2UtPmFieUNDS1B3clRibFsxMF07CisJCQlwRGV2aWNlLT5hYnlPRkRNUHdyVGJsW2lpXSA9IHBEZXZpY2UtPmFieU9GRE1Qd3JUYmxbMTBdOworCQl9CiAJICB9CiAKICAgICAgICAgLy97eyBSb2JlcnRZdTogMjAwNDExMjQKQEAgLTcxOCwzMyArNzE4LDMyIEBACiAKIHN0YXRpYyBpbnQgdnQ2NjU2X3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQogewotIFBTRGV2aWNlICBwRGV2aWNlID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcERldmljZS0+ZGV2OworCVBTRGV2aWNlIGRldmljZSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAKLSBwcmludGsoIlZOVFdVU0IgU3VzcGVuZCBTdGFydD09PT09PT5cbiIpOwotaWYoZGV2ICE9IE5VTEwpIHsKLSAgaWYocERldmljZS0+ZmxhZ3MgJiBERVZJQ0VfRkxBR1NfT1BFTkVEKQotICAgICBkZXZpY2VfY2xvc2UoZGV2KTsKLX0KKwlpZiAoIWRldmljZSB8fCAhZGV2aWNlLT5kZXYpCisJCXJldHVybiAtRU5PREVWOwogCi0gdXNiX3B1dF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSk7Ci0gcmV0dXJuIDA7CisJaWYgKGRldmljZS0+ZmxhZ3MgJiBERVZJQ0VfRkxBR1NfT1BFTkVEKQorCQlkZXZpY2VfY2xvc2UoZGV2aWNlLT5kZXYpOworCisJdXNiX3B1dF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2dDY2NTZfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewotIFBTRGV2aWNlICBwRGV2aWNlID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcERldmljZS0+ZGV2OworCVBTRGV2aWNlIGRldmljZSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAKLSBwcmludGsoIlZOVFdVU0IgUmVzdW1lIFN0YXJ0PT09PT09PlxuIik7Ci0gaWYoZGV2ICE9IE5VTEwpIHsKLSAgdXNiX2dldF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSk7Ci0gIGlmKCEocERldmljZS0+ZmxhZ3MgJiBERVZJQ0VfRkxBR1NfT1BFTkVEKSkgewotICAgIGlmKGRldmljZV9vcGVuKGRldikhPTApCi0gICAgICAgIHByaW50aygiVk5UV1VTQiBSZXN1bWUgU3RhcnQ9PT09PT0+b3BlbiBmYWlsXG4iKTsKLSAgIH0KLSB9Ci0gcmV0dXJuIDA7CisJaWYgKCFkZXZpY2UgfHwgIWRldmljZS0+ZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZikpOworCisJaWYgKCEoZGV2aWNlLT5mbGFncyAmIERFVklDRV9GTEFHU19PUEVORUQpKQorCQlkZXZpY2Vfb3BlbihkZXZpY2UtPmRldik7CisKKwlyZXR1cm4gMDsKIH0KIAogI2VuZGlmIC8qIENPTkZJR19QTSAqLwpAQCAtNzU4LDkzICs3NTcsNzUgQEAKICAgICAubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGRldmljZV9zZXRfbXVsdGksCiB9OwogCi0KIHN0YXRpYyBpbnQgX19kZXZpbml0CiB2dDY2NTZfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAl1OCBmYWtlX21hY1tFVEhfQUxFTl0gPSB7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMX07CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwotICAgIGludCAgICAgICAgIHJjID0gMDsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gTlVMTDsKLSAgICBQU0RldmljZSAgICBwRGV2aWNlID0gTlVMTDsKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBOVUxMOworCVBTRGV2aWNlIHBEZXZpY2UgPSBOVUxMOwogCisJcHJpbnRrKEtFUk5fTk9USUNFICIlcyBWZXIuICVzXG4iLCBERVZJQ0VfRlVMTF9EUlZfTkFNLCBERVZJQ0VfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fTk9USUNFICJDb3B5cmlnaHQgKGMpIDIwMDQgVklBIE5ldHdvcmtpbmcgVGVjaG5vbG9naWVzLCBJbmMuXG4iKTsKIAotICAgIHByaW50ayhLRVJOX05PVElDRSAiJXMgVmVyLiAlc1xuIixERVZJQ0VfRlVMTF9EUlZfTkFNLCBERVZJQ0VfVkVSU0lPTik7Ci0gICAgcHJpbnRrKEtFUk5fTk9USUNFICJDb3B5cmlnaHQgKGMpIDIwMDQgVklBIE5ldHdvcmtpbmcgVGVjaG5vbG9naWVzLCBJbmMuXG4iKTsKKwl1ZGV2ID0gdXNiX2dldF9kZXYodWRldik7CisJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKERFVklDRV9JTkZPKSk7CiAKLSAgdWRldiA9IHVzYl9nZXRfZGV2KHVkZXYpOworCWlmICghbmV0ZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiBERVZJQ0VfTkFNRSAiOiBhbGxvY2F0ZSBuZXQgZGV2aWNlIGZhaWxlZFxuIik7CisJCWtmcmVlKHBEZXZpY2UpOworCQlnb3RvIGVycl9ub21lbTsKKwl9CiAKLSAgICBuZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YoREVWSUNFX0lORk8pKTsKKwlwRGV2aWNlID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwltZW1zZXQocERldmljZSwgMCwgc2l6ZW9mKERFVklDRV9JTkZPKSk7CiAKLSAgICBpZiAobmV0ZGV2ID09IE5VTEwpIHsKLSAgICAgICAgcHJpbnRrKEtFUk5fRVJSIERFVklDRV9OQU1FICI6IGFsbG9jYXRlIG5ldCBkZXZpY2UgZmFpbGVkIFxuIik7Ci0gICAgICAgIGtmcmVlKHBEZXZpY2UpOwotCSAgICBnb3RvIGVycl9ub21lbTsKLSAgICB9CisJcERldmljZS0+ZGV2ID0gbmV0ZGV2OworCXBEZXZpY2UtPnVzYiA9IHVkZXY7CiAKLSAgICBwRGV2aWNlID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLSAgICBtZW1zZXQocERldmljZSwgMCwgc2l6ZW9mKERFVklDRV9JTkZPKSk7CisJZGV2aWNlX3NldF9vcHRpb25zKHBEZXZpY2UpOworCXNwaW5fbG9ja19pbml0KCZwRGV2aWNlLT5sb2NrKTsKIAotICAgIHBEZXZpY2UtPmRldiA9IG5ldGRldjsKLSAgICBwRGV2aWNlLT51c2IgPSB1ZGV2OworCXBEZXZpY2UtPnR4XzgwMjExID0gZGV2aWNlX2RtYTBfdHhfODAyMTE7CisJcERldmljZS0+c01nbXRPYmoucEFkYXB0ZXIgPSAodm9pZCAqKSBwRGV2aWNlOwogCi0gICAgLy8gU2V0IGluaXRpYWwgc2V0dGluZ3MKLSAgICBkZXZpY2Vfc2V0X29wdGlvbnMocERldmljZSk7Ci0gICAgc3Bpbl9sb2NrX2luaXQoJnBEZXZpY2UtPmxvY2spOworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZkZXZpY2VfbmV0ZGV2X29wczsKKwluZXRkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0KKwkJKHN0cnVjdCBpd19oYW5kbGVyX2RlZiAqKSAmaXdjdGxfaGFuZGxlcl9kZWY7CiAKLSAgICBwRGV2aWNlLT50eF84MDIxMSA9IGRldmljZV9kbWEwX3R4XzgwMjExOwotICAgIHBEZXZpY2UtPnNNZ210T2JqLnBBZGFwdGVyID0gKHZvaWQgKilwRGV2aWNlOwotCi0gICAgbmV0ZGV2LT5uZXRkZXZfb3BzICAgICAgICAgPSAmZGV2aWNlX25ldGRldl9vcHM7Ci0KLQluZXRkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gKHN0cnVjdCBpd19oYW5kbGVyX2RlZiAqKSZpd2N0bF9oYW5kbGVyX2RlZjsKLQotICAgLy8yMDA4LTA2MjMtMDE8UmVtYXJrPmJ5IE1pa2VMaXUKLSAgLy8yMDA3LTA4MjEtMDE8QWRkPmJ5IE1pa2VMaXUKLSAgICAgICAgIHVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgcERldmljZSk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBwRGV2aWNlKTsKIAlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZpbnRmLT5kZXYpOwotICAgIG1lbWNweShwRGV2aWNlLT5kZXYtPmRldl9hZGRyLCBmYWtlX21hYywgRVRIX0FMRU4pOwotICAgIHJjID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7Ci0gICAgaWYgKHJjICE9IDApIHsKLSAgICAgICAgcHJpbnRrKEtFUk5fRVJSIERFVklDRV9OQU1FICIgRmFpbGVkIHRvIHJlZ2lzdGVyIG5ldGRldlxuIik7CisJbWVtY3B5KHBEZXZpY2UtPmRldi0+ZGV2X2FkZHIsIGZha2VfbWFjLCBFVEhfQUxFTik7CisJcmMgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERFVklDRV9OQU1FICIgRmFpbGVkIHRvIHJlZ2lzdGVyIG5ldGRldlxuIik7CiAJCWZyZWVfbmV0ZGV2KG5ldGRldik7Ci0gICAgICAgIGtmcmVlKHBEZXZpY2UpOwotICAgICAgICByZXR1cm4gLUVOT0RFVjsKLSAgICB9CisJCWtmcmVlKHBEZXZpY2UpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKLS8vMjAwOC0wNy0yMS0wMTxBZGQ+YnkgTWlrZUxpdQotLy9yZWdpc3RlciB3cGFkZXYKLSNpZiAwCi0gICBpZih3cGFfc2V0X3dwYWRldihwRGV2aWNlLCAxKSE9MCkgewotICAgICBwcmludGsoIkZhaWwgdG8gUmVnaXN0ZXIgV1BBREVWP1xuIik7Ci0gICAgICAgIHVucmVnaXN0ZXJfbmV0ZGV2KHBEZXZpY2UtPmRldik7Ci0gICAgICAgIGZyZWVfbmV0ZGV2KG5ldGRldik7Ci0gICAgICAgIGtmcmVlKHBEZXZpY2UpOwotICAgfQotI2VuZGlmCi0gICAgICAgICB1c2JfZGV2aWNlX3Jlc2V0KHBEZXZpY2UpOworCXVzYl9kZXZpY2VfcmVzZXQocERldmljZSk7CiAKLSNpZmRlZiBTbmRFdnRfVG9BUEkKLXsKLSAgdW5pb24gaXdyZXFfZGF0YSAgICAgIHdycXU7Ci0gIG1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKLSAgd3JxdS5kYXRhLmZsYWdzID0gUlRfSU5TTU9EX0VWRU5UX0ZMQUc7Ci0gIHdycXUuZGF0YS5sZW5ndGggPUlGTkFNU0laOwotICB3aXJlbGVzc19zZW5kX2V2ZW50KHBEZXZpY2UtPmRldiwgSVdFVkNVU1RPTSwgJndycXUsIHBEZXZpY2UtPmRldi0+bmFtZSk7Ci19Ci0jZW5kaWYKKwl7CisJCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKKwkJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworCQl3cnF1LmRhdGEuZmxhZ3MgPSBSVF9JTlNNT0RfRVZFTlRfRkxBRzsKKwkJd3JxdS5kYXRhLmxlbmd0aCA9IElGTkFNU0laOworCQl3aXJlbGVzc19zZW5kX2V2ZW50KHBEZXZpY2UtPmRldiwKKwkJCQkgICAgSVdFVkNVU1RPTSwKKwkJCQkgICAgJndycXUsCisJCQkJICAgIHBEZXZpY2UtPmRldi0+bmFtZSk7CisJfQogCiAJcmV0dXJuIDA7CiAKLQogZXJyX25vbWVtOgotIC8vMjAwOC0wOTIyLTAxPEFkZD5ieSBNaWtlTGl1LCBkZWNyZWFzZSB1c2IgY291bnRlci4KLSAgICB1c2JfcHV0X2Rldih1ZGV2KTsKKwl1c2JfcHV0X2Rldih1ZGV2KTsKIAotICAgIHJldHVybiAtRU5PTUVNOworCXJldHVybiAtRU5PTUVNOwogfQogCi0KIHN0YXRpYyB2b2lkIGRldmljZV9mcmVlX3R4X2J1ZnMoUFNEZXZpY2UgcERldmljZSkKIHsKICAgICBQVVNCX1NFTkRfQ09OVEVYVCBwVHhDb250ZXh0OwpAQCAtMTA2NSw3ICsxMDQ2LDYgQEAKIHN0YXRpYyBpbnQgIGRldmljZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsKICAgICBQU0RldmljZSAgICBwRGV2aWNlPShQU0RldmljZSkgbmV0ZGV2X3ByaXYoZGV2KTsKIAotI2lmZGVmIFdQQV9TTV9UcmFuc3RhdHVzCiAgICAgIGV4dGVybiBTV1BBUmVzdWx0IHdwYV9SZXN1bHQ7CiAgICAgIG1lbXNldCh3cGFfUmVzdWx0LmlmbmFtZSwwLHNpemVvZih3cGFfUmVzdWx0LmlmbmFtZSkpOwogICAgICB3cGFfUmVzdWx0LnByb3RvID0gMDsKQEAgLTEwNzMsNyArMTA1Myw2IEBACiAgICAgIHdwYV9SZXN1bHQuZWFwX3R5cGUgPSAwOwogICAgICB3cGFfUmVzdWx0LmF1dGhlbnRpY2F0ZWQgPSBGQUxTRTsKICAgICAgcERldmljZS0+ZldQQV9BdXRoZW5lZCA9IEZBTFNFOwotI2VuZGlmCiAKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIgZGV2aWNlX29wZW4uLi5cbiIpOwogCkBAIC0xMTcyLDE0ICsxMTUxLDEyIEBACiAgICAgbmV0aWZfc3RvcF9xdWV1ZShwRGV2aWNlLT5kZXYpOwogICAgIHBEZXZpY2UtPmZsYWdzIHw9IERFVklDRV9GTEFHU19PUEVORUQ7CiAKLSNpZmRlZiBTbmRFdnRfVG9BUEkKIHsKICAgdW5pb24gaXdyZXFfZGF0YSAgICAgIHdycXU7CiAgIG1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKICAgd3JxdS5kYXRhLmZsYWdzID0gUlRfVVBERVZfRVZFTlRfRkxBRzsKICAgd2lyZWxlc3Nfc2VuZF9ldmVudChwRGV2aWNlLT5kZXYsIElXRVZDVVNUT00sICZ3cnF1LCBOVUxMKTsKIH0KLSNlbmRpZgogCiAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiZGV2aWNlX29wZW4gc3VjY2Vzcy4uIFxuIik7CiAgICAgcmV0dXJuIDA7CkBAIC0xMjExLDE0ICsxMTg4LDEyIEBACiAgICAgaWYgKHBEZXZpY2UgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CiAKLSNpZmRlZiBTbmRFdnRfVG9BUEkKIHsKICAgdW5pb24gaXdyZXFfZGF0YSAgICAgIHdycXU7CiAgIG1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKICAgd3JxdS5kYXRhLmZsYWdzID0gUlRfRE9XTkRFVl9FVkVOVF9GTEFHOwogICB3aXJlbGVzc19zZW5kX2V2ZW50KHBEZXZpY2UtPmRldiwgSVdFVkNVU1RPTSwgJndycXUsIE5VTEwpOwogfQotI2VuZGlmCiAKIC8vMjAwNy0xMTIxLTAyPEFkZD5ieSBFaW5zbkxpdQogICAgIGlmIChwRGV2aWNlLT5iTGlua1Bhc3MpIHsKQEAgLTEyMzQsMTAgKzEyMDksMTAgQEAKICAgICAgICAgcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9IEZBTFNFOwogICAgICAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IEZBTFNFOwogICAgICAgICBwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQ7Ci0gICAgICAgICAgICBzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLSAgICAgICAgICAgIGZvcih1dT0wO3V1PE1BWF9LRVlfVEFCTEU7dXUrKykKKwlzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKKwlmb3IgKHV1ID0gMDsgdXUgPCBNQVhfS0VZX1RBQkxFOyB1dSsrKQogICAgICAgICAgICAgICAgIE1BQ3ZEaXNhYmxlS2V5RW50cnkocERldmljZSx1dSk7Ci0gICAgICAgICAgICBzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAKICAgICBpZiAoKHBEZXZpY2UtPmZsYWdzICYgREVWSUNFX0ZMQUdTX1VOUExVRykgPT0gRkFMU0UpIHsKICAgICAgICAgTUFDYlNodXRkb3duKHBEZXZpY2UpOwpAQCAtMTI1MCwxMCArMTIyNSw3IEBACiAgICAgZGVsX3RpbWVyKCZwRGV2aWNlLT5zVGltZXJDb21tYW5kKTsKICAgICBkZWxfdGltZXIoJnBNZ210LT5zVGltZXJTZWNvbmRDYWxsYmFjayk7CiAKLS8vMjAwNy0wMTE1LTAyPEFkZD5ieSBNaWtlTGl1Ci0jaWZkZWYgVHhJblNsZWVwCiAgICAgZGVsX3RpbWVyKCZwRGV2aWNlLT5zVGltZXJUeERhdGEpOwotI2VuZGlmCiAKICAgICBpZiAocERldmljZS0+YkRpdmVyc2l0eVJlZ0N0bE9OKSB7CiAgICAgICAgIGRlbF90aW1lcigmcERldmljZS0+VGltZXJTUTNUbWF4MSk7CkBAIC0xMjkwLDExMiArMTI2Miw4MSBAQAogICAgIHJldHVybiAwOwogfQogCi0KIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCB2dDY2NTZfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKKwlQU0RldmljZSBkZXZpY2UgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCi0JUFNEZXZpY2UgIHBEZXZpY2UgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCWlmICghZGV2aWNlKQorCQlyZXR1cm47CiAKLSAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJkZXZpY2VfZGlzY29ubmVjdDEuLiBcbiIpOwotICAgIGlmIChwRGV2aWNlID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKKwl7CisJCXVuaW9uIGl3cmVxX2RhdGEgcmVxOworCQltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOworCQlyZXEuZGF0YS5mbGFncyA9IFJUX1JNTU9EX0VWRU5UX0ZMQUc7CisJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2aWNlLT5kZXYsIElXRVZDVVNUT00sICZyZXEsIE5VTEwpOworCX0KIAotI2lmZGVmIFNuZEV2dF9Ub0FQSQotewotICB1bmlvbiBpd3JlcV9kYXRhICAgICAgd3JxdTsKLSAgbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOwotICB3cnF1LmRhdGEuZmxhZ3MgPSBSVF9STU1PRF9FVkVOVF9GTEFHOwotICB3aXJlbGVzc19zZW5kX2V2ZW50KHBEZXZpY2UtPmRldiwgSVdFVkNVU1RPTSwgJndycXUsIE5VTEwpOwotfQotI2VuZGlmCi0KLS8vMjAwOC0wNzE0LTAxPEFkZD5ieSBNaWtlTGl1Ci1kZXZpY2VfcmVsZWFzZV9XUEFERVYocERldmljZSk7CisJZGV2aWNlX3JlbGVhc2VfV1BBREVWKGRldmljZSk7CiAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwotLy8yMDA4LTA5MjItMDE8QWRkPmJ5IE1pa2VMaXUsIGRlY3JlYXNlIHVzYiBjb3VudGVyLgotICAgICB1c2JfcHV0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpKTsKKwl1c2JfcHV0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpKTsKIAotICAgIHBEZXZpY2UtPmZsYWdzIHw9IERFVklDRV9GTEFHU19VTlBMVUc7Ci0gICAgaWYgKHBEZXZpY2UtPmRldiAhPSBOVUxMKSB7Ci0gICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInVucmVnaXN0ZXJfbmV0ZGV2Li5cbiIpOwotICAgICAgICB1bnJlZ2lzdGVyX25ldGRldihwRGV2aWNlLT5kZXYpOworCWRldmljZS0+ZmxhZ3MgfD0gREVWSUNFX0ZMQUdTX1VOUExVRzsKIAotLy8yMDA4LTA3LTIxLTAxPEFkZD5ieSBNaWtlTGl1Ci0vL3VucmVnaXN0ZXIgd3BhZGV2Ci0gICBpZih3cGFfc2V0X3dwYWRldihwRGV2aWNlLCAwKSE9MCkKLSAgICAgcHJpbnRrKCJ1bnJlZ2lzdGVyIHdwYWRldiBmYWlsP1xuIik7Ci0KLSAgICAgICAgZnJlZV9uZXRkZXYocERldmljZS0+ZGV2KTsKLSAgICB9Ci0KLSAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJkZXZpY2VfZGlzY29ubmVjdDMuLiBcbiIpOworCWlmIChkZXZpY2UtPmRldikgeworCQl1bnJlZ2lzdGVyX25ldGRldihkZXZpY2UtPmRldik7CisJCXdwYV9zZXRfd3BhZGV2KGRldmljZSwgMCk7CisJCWZyZWVfbmV0ZGV2KGRldmljZS0+ZGV2KTsKKwl9CiB9CiAKK3N0YXRpYyBpbnQgZGV2aWNlX2RtYTBfdHhfODAyMTEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlQU0RldmljZSBwRGV2aWNlID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAorCXNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogCisJaWYgKHVubGlrZWx5KHBEZXZpY2UtPmJTdG9wVHgwUGt0KSkKKwkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKwllbHNlCisJCXZETUEwX3R4XzgwMjExKHBEZXZpY2UsIHNrYik7CiAKLXN0YXRpYyBpbnQgZGV2aWNlX2RtYTBfdHhfODAyMTEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikgewotICAgIFBTRGV2aWNlICAgICAgICBwRGV2aWNlPW5ldGRldl9wcml2KGRldik7Ci0gICAgUEJZVEUgICAgICAgICAgIHBiTVBEVTsKLSAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICBjYk1QRFVMZW4gPSAwOworCXNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAKLQotICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImRldmljZV9kbWEwX3R4XzgwMjExXG4iKTsKLSAgICBzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLQotICAgIGlmIChwRGV2aWNlLT5iU3RvcFR4MFBrdCA9PSBUUlVFKSB7Ci0gICAgICAgIGRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci0gICAgICAgIHNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH07Ci0KLQotICAgIGNiTVBEVUxlbiA9IHNrYi0+bGVuOwotICAgIHBiTVBEVSA9IHNrYi0+ZGF0YTsKLQotICAgIHZETUEwX3R4XzgwMjExKHBEZXZpY2UsIHNrYik7Ci0KLSAgICBzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotCi0gICAgcmV0dXJuIDA7Ci0KKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCitzdGF0aWMgaW50IGRldmljZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJUFNEZXZpY2UgcERldmljZSA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnBEZXZpY2UtPnN0YXRzOwogCi1zdGF0aWMgaW50ICBkZXZpY2VfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7Ci0gICAgUFNEZXZpY2UgICAgcERldmljZT1uZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKiBwU3RhdHMgPSAmcERldmljZS0+c3RhdHM7CisJc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKLSAgICBzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKKwlpZiAoIXBEZXZpY2UtPmJMaW5rUGFzcykgeworCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCQlnb3RvIG91dDsKKwl9CiAKLSAgICBuZXRpZl9zdG9wX3F1ZXVlKHBEZXZpY2UtPmRldik7CisJaWYgKHBEZXZpY2UtPmJTdG9wRGF0YVBrdCkgeworCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCQlzdGF0cy0+dHhfZHJvcHBlZCsrOworCQlnb3RvIG91dDsKKwl9CiAKLSAgICBpZiAocERldmljZS0+YkxpbmtQYXNzID09IEZBTFNFKSB7Ci0gICAgICAgIGRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci0gICAgICAgIHNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAocERldmljZS0+YlN0b3BEYXRhUGt0ID09IFRSVUUpIHsKLSAgICAgICAgZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKLSAgICAgICAgcFN0YXRzLT50eF9kcm9wcGVkKys7Ci0gICAgICAgIHNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKwlpZiAobnNETUFfdHhfcGFja2V0KHBEZXZpY2UsIFRZUEVfQUMwRE1BLCBza2IpKSB7CisJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpCisJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJfQogCi0gICAgaWYobnNETUFfdHhfcGFja2V0KHBEZXZpY2UsIFRZUEVfQUMwRE1BLCBza2IpICE9MCkgeyAgLy9taWtlIGFkZDp4bWl0IGZhaWwhCi0gICAgICAgICBpZiAobmV0aWZfcXVldWVfc3RvcHBlZChwRGV2aWNlLT5kZXYpKQotICAgICAgICAgICAgICBuZXRpZl93YWtlX3F1ZXVlKHBEZXZpY2UtPmRldik7Ci0gICAgfQorb3V0OgorCXNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAKLSAgICBzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAotCi0KIHN0YXRpYyB1bnNpZ25lZCBjb25zdCBldGhlcm5ldF9wb2x5bm9taWFsID0gMHgwNGMxMWRiN1U7CiBzdGF0aWMgaW5saW5lIHUzMiBldGhlcl9jcmMoaW50IGxlbmd0aCwgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKQEAgLTE0NDcsMTIgKzEzODgsMTIgQEAKIAlyZXR1cm4gRkFMU0U7CiAKIC8vY2hlY2sgaWYgY3VycmVudCBjb25maWcgbGluZSBpcyBtYXJrZWQgYnkgIiMiID8/Ci1mb3IoaWk9MTs7aWkrKykgewotICBpZihtZW1jbXAoc3RhcnRfcC1paSwiXG4iLDEpPT0wKQotICAgICAgYnJlYWs7Ci0gIGlmKG1lbWNtcChzdGFydF9wLWlpLCIjIiwxKT09MCkKLSAgICAgIHJldHVybiBGQUxTRTsKLX0KKyAgICBmb3IgKGlpID0gMTsgOyBpaSsrKSB7CisJaWYgKG1lbWNtcChzdGFydF9wIC0gaWksICJcbiIsIDEpID09IDApCisJCWJyZWFrOworCWlmIChtZW1jbXAoc3RhcnRfcCAtIGlpLCAiIyIsIDEpID09IDApCisJCXJldHVybiBGQUxTRTsKKyAgICB9CiAKIC8vZmluZCB0YXJnZXQgc3RyaW5nIGVuZCBwb2ludAogICAgICBlbmRfcCA9IGtzdHJzdHIoc3RhcnRfcCwiXG4iKTsKQEAgLTE1ODUsNyArMTUyNiw2IEBACiAgfQogfQogCi0jaWYgMQogLy9nZXQgb3RoZXIgcGFyYW1ldGVyCiAgIHsKIAltZW1zZXQodG1wYnVmZmVyLDAsc2l6ZW9mKHRtcGJ1ZmZlcikpOwpAQCAtMTU5OCw3ICsxNTM4LDYgQEAKIAkgcERldmljZS0+Y29uZmlnX2ZpbGUuZUVuY3J5cHRpb25TdGF0dXM9IChpbnQpIHNpbXBsZV9zdHJ0b2wodG1wYnVmZmVyLCBOVUxMLCAxMCk7CiAgICAgICAgfQogICB9Ci0jZW5kaWYKIAogICBrZnJlZShidWZmZXIpOwogICByZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9taWIuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWliLmMKaW5kZXggYjY5NGZjOC4uOGE2ZWU3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9taWIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21pYi5jCkBAIC0zNDcsMTAgKzM0Nyw5IEBACiAgICAgaWYgKFdMQU5fR0VUX0ZDX01PUkVGUkFHKHBIZWFkZXItPndGcmFtZUN0bCkpCiAgICAgICAgIHBTdGF0aXN0aWMtPmR3UnNyUnhGcmFnbWVudCsrOwogCi0gICAgaWYgKGNiRnJhbWVMZW5ndGggPCBNSU5fUEFDS0VUX0xFTiArIDQpIHsKKyAgICBpZiAoY2JGcmFtZUxlbmd0aCA8IEVUSF9aTEVOICsgNCkgewogICAgICAgICBwU3RhdGlzdGljLT5kd1JzclJ1bnQrKzsKLSAgICB9Ci0gICAgZWxzZSBpZiAoY2JGcmFtZUxlbmd0aCA9PSBNSU5fUEFDS0VUX0xFTiArIDQpIHsKKyAgICB9IGVsc2UgaWYgKGNiRnJhbWVMZW5ndGggPT0gRVRIX1pMRU4gKyA0KSB7CiAgICAgICAgIHBTdGF0aXN0aWMtPmR3UnNyUnhGcm1MZW42NCsrOwogICAgIH0KICAgICBlbHNlIGlmICgoNjUgPD0gY2JGcmFtZUxlbmd0aCkgJiYgKGNiRnJhbWVMZW5ndGggPD0gMTI3KSkgewpAQCAtMzY0LDE3ICszNjMsMTQgQEAKICAgICB9CiAgICAgZWxzZSBpZiAoKDUxMiA8PSBjYkZyYW1lTGVuZ3RoKSAmJiAoY2JGcmFtZUxlbmd0aCA8PSAxMDIzKSkgewogICAgICAgICBwU3RhdGlzdGljLT5kd1JzclJ4RnJtTGVuNTEyXzEwMjMrKzsKLSAgICB9Ci0gICAgZWxzZSBpZiAoKDEwMjQgPD0gY2JGcmFtZUxlbmd0aCkgJiYgKGNiRnJhbWVMZW5ndGggPD0gTUFYX1BBQ0tFVF9MRU4gKyA0KSkgeworICAgIH0gZWxzZSBpZiAoKDEwMjQgPD0gY2JGcmFtZUxlbmd0aCkgJiYKKwkgICAgICAgKGNiRnJhbWVMZW5ndGggPD0gRVRIX0ZSQU1FX0xFTiArIDQpKSB7CiAgICAgICAgIHBTdGF0aXN0aWMtPmR3UnNyUnhGcm1MZW4xMDI0XzE1MTgrKzsKLSAgICB9IGVsc2UgaWYgKGNiRnJhbWVMZW5ndGggPiBNQVhfUEFDS0VUX0xFTiArIDQpIHsKKyAgICB9IGVsc2UgaWYgKGNiRnJhbWVMZW5ndGggPiBFVEhfRlJBTUVfTEVOICsgNCkgewogICAgICAgICBwU3RhdGlzdGljLT5kd1JzckxvbmcrKzsKICAgICB9Ci0KIH0KIAotCi0KIC8qCiAgKiBEZXNjcmlwdGlvbjogVXBkYXRlIFJ4IFN0YXRpc3RpYyBDb3VudGVyIGFuZCBjb3B5IFJ4IGJ1ZmZlcgogICoKQEAgLTQ2NywxMiArNDYzLDEwIEBACiAgICAgfQogICAgIGlmICggIShieVRTUiAmIChUU1JfVE1PIHwgVFNSX1JFVFJZVE1PKSkpIHsKIAotI2lmZGVmIENhbGN1X0xpbmtRdWFsCiAgICBpZiAoYnlSZXR5Q250IDwgMikKICAgICAgICAgcFN0YXRpc3RpYy0+VHhOb1JldHJ5T2tDb3VudCArKzsKICAgIGVsc2UKICAgICAgICAgcFN0YXRpc3RpYy0+VHhSZXRyeU9rQ291bnQgKys7Ci0jZW5kaWYKIAogICAgICAgICBwU3RhdGlzdGljLT51bGxUc3JPSysrOwogICAgICAgICBwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFRzckFsbE9LKys7CkBAIC00OTMsOSArNDg3LDcgQEAKICAgICB9CiAgICAgZWxzZSB7CiAKLSNpZmRlZiBDYWxjdV9MaW5rUXVhbAogICAgICAgICBwU3RhdGlzdGljLT5UeEZhaWxDb3VudCArKzsKLSNlbmRpZgogCiAgICAgICAgIHBTdGF0aXN0aWMtPmR3VHNyRXJyKys7CiAgICAgICAgIGlmIChieVRTUiAmIFRTUl9SRVRSWVRNTykKQEAgLTU5MSwxMCArNTgzLDcgQEAKICAqCiAgKi8KIAotdm9pZAotU1RBdlVwZGF0ZVVTQkNvdW50ZXIoUFNVU0JDb3VudGVyIHBVc2JDb3VudGVyLAotICAgICAgICAgICAgICAgICAgICAgTlRTVEFUVVMgbnRTdGF0dXMKLSAgICAgICAgICAgICAgICAgICAgICkKK3ZvaWQgU1RBdlVwZGF0ZVVTQkNvdW50ZXIoUFNVU0JDb3VudGVyIHBVc2JDb3VudGVyLCBpbnQgbnRTdGF0dXMpCiB7CiAKIC8vICAgIGlmICggbnRTdGF0dXMgPT0gVVNCRF9TVEFUVVNfQ1JDICkgewpAQCAtNjAyLDUgKzU5MSwzIEBACiAvLyAgICB9CiAKIH0KLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21pYi5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9taWIuaAppbmRleCAwNDU1ZWM5Li5hODljY2EwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21pYi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWliLmgKQEAgLTM1Niw3ICszNTYsNiBAQAogCiAgICAgU0N1c3RvbUNvdW50ZXJzIEN1c3RvbVN0YXQ7CiAKLSAgICNpZmRlZiBDYWxjdV9MaW5rUXVhbAogICAgICAgIC8vVHggY291bnQ6CiAgIHVuc2lnbmVkIGxvbmcgVHhOb1JldHJ5T2tDb3VudDsgICAgICAgICAvKiBzdWNjZXNzIHR4IG5vIHJldHJ5ICEgKi8KICAgdW5zaWduZWQgbG9uZyBUeFJldHJ5T2tDb3VudDsgICAgICAgICAgIC8qIHN1Y2Nlc3MgdHggYnV0IHJldHJ5ICEgKi8KQEAgLTM2NywxMiArMzY2LDkgQEAKICAgICAgIC8vc3RhdGlzdGljCiAgICAgdW5zaWduZWQgbG9uZyBTaWduYWxTdHJlbjsKICAgICB1bnNpZ25lZCBsb25nIExpbmtRdWFsaXR5OwotICAgI2VuZGlmCiAKIH0gU1N0YXRDb3VudGVyLCAqUFNTdGF0Q291bnRlcjsKIAotI2RlZmluZSBOVFNUQVRVUyAgICAgICAgaW50Ci0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgQ2xhc3NlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgVmFyaWFibGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0zODEsNyArMzc3LDkgQEAKIAogdm9pZCBTVEF2Q2xlYXJBbGxDb3VudGVyKFBTU3RhdENvdW50ZXIgcFN0YXRpc3RpYyk7CiAKLXZvaWQgU1RBdlVwZGF0ZUlzclN0YXRDb3VudGVyIChQU1N0YXRDb3VudGVyIHBTdGF0aXN0aWMsIEJZVEUgYnlJc3IwLCBCWVRFIGJ5SXNyMSk7Cit2b2lkIFNUQXZVcGRhdGVJc3JTdGF0Q291bnRlcihQU1N0YXRDb3VudGVyIHBTdGF0aXN0aWMsCisJCQkgICAgICBCWVRFIGJ5SXNyMCwKKwkJCSAgICAgIEJZVEUgYnlJc3IxKTsKIAogdm9pZCBTVEF2VXBkYXRlUkRTdGF0Q291bnRlcihQU1N0YXRDb3VudGVyIHBTdGF0aXN0aWMsCiAJCQkgICAgIEJZVEUgYnlSU1IsIEJZVEUgYnlOZXdSU1IsIEJZVEUgYnlSeFN0cywKQEAgLTM5MywxNCArMzkxLDggQEAKIAkJCSAgICAgICBCWVRFIGJ5UnhSYXRlLCBQQllURSBwYnlCdWZmZXIsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGNiRnJhbWVMZW5ndGgpOwogCi12b2lkCi1TVEF2VXBkYXRlVERTdGF0Q291bnRlciAoCi0gICAgUFNTdGF0Q291bnRlciAgIHBTdGF0aXN0aWMsCi0gICAgQllURSAgICAgICAgICAgIGJ5UGt0TnVtLAotICAgIEJZVEUgICAgICAgICAgICBieVJhdGUsCi0gICAgQllURSAgICAgICAgICAgIGJ5VFNSCi0gICAgKTsKLQordm9pZCBTVEF2VXBkYXRlVERTdGF0Q291bnRlcihQU1N0YXRDb3VudGVyIHBTdGF0aXN0aWMsIEJZVEUgYnlQa3ROdW0sCisJCQkgICAgIEJZVEUgYnlSYXRlLCBCWVRFIGJ5VFNSKTsKIAogdm9pZAogU1RBdlVwZGF0ZTgwMl8xMUNvdW50ZXIoCkBAIC00MTMsMTEgKzQwNSw2IEBACiAgICAgKTsKIAogdm9pZCBTVEF2Q2xlYXI4MDJfMTFDb3VudGVyKFBTRG90MTFDb3VudGVycyBwODAyXzExQ291bnRlcik7Ci0KLXZvaWQKLVNUQXZVcGRhdGVVU0JDb3VudGVyKAotICAgIFBTVVNCQ291bnRlciAgICBwVXNiQ291bnRlciwKLSAgICBOVFNUQVRVUyAgICAgICAgbnRTdGF0dXMKLSAgICApOwordm9pZCBTVEF2VXBkYXRlVVNCQ291bnRlcihQU1VTQkNvdW50ZXIgcFVzYkNvdW50ZXIsIGludCBudFN0YXR1cyk7CiAKICNlbmRpZiAvKiBfX01JQl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWljaGFlbC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9taWNoYWVsLmMKaW5kZXggNjcxYThjZi4uNGQ0MTk4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9taWNoYWVsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9taWNoYWVsLmMKQEAgLTc0LDcgKzc0LDcgQEAKIHsKIAlEV09SRCByZXMgPSAwOwogCXVuc2lnbmVkIGludCBpOwotCWZvcihpPTA7IGk8NDsgaSsrICkKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQogCQlyZXMgfD0gKCpwKyspIDw8ICg4KmkpOwogCXJldHVybiByZXM7CiB9CkBAIC04Myw3ICs4Myw3IEBACiAvLyBDb252ZXJ0IGZyb20gRFdPUkQgdG8gQllURVtdIGluIGEgcG9ydGFibGUgd2F5CiB7CiAJdW5zaWduZWQgaW50IGk7Ci0JZm9yKGk9MDsgaTw0OyBpKysgKSB7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQkqcCsrID0gKEJZVEUpICh2YWwgJiAweGZmKTsKIAkJdmFsID4+PSA4OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWljaGFlbC5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9taWNoYWVsLmgKaW5kZXggM2FiNjA5Mi4uODEzNTFmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9taWNoYWVsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9taWNoYWVsLmgKQEAgLTQ5LDggKzQ5LDggQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8vIFJvdGF0aW9uIGZ1bmN0aW9ucyBvbiAzMiBiaXQgdmFsdWVzCi0jZGVmaW5lIFJPTDMyKCBBLCBuICkgXAotICggKChBKSA8PCAobikpIHwgKCAoKEEpPj4oMzItKG4pKSkgICYgKCAoMVVMIDw8IChuKSkgLSAxICkgKSApCi0jZGVmaW5lIFJPUjMyKCBBLCBuICkgUk9MMzIoIChBKSwgMzItKG4pICkKKyNkZWZpbmUgUk9MMzIoQSwgbikgXAorICgoKEEpIDw8IChuKSkgfCAoKChBKT4+KDMyLShuKSkpICAmICgoMVVMIDw8IChuKSkgLSAxKSkpCisjZGVmaW5lIFJPUjMyKEEsIG4pIFJPTDMyKChBKSwgMzItKG4pKQogCiAjZW5kaWYgLyogX19NSUNIQUVMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9wb3dlci5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9wb3dlci5jCmluZGV4IDc2NmM1YmUuLjRkN2Q0ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcG93ZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3Bvd2VyLmMKQEAgLTE5LDcgKzE5LDcgQEAKICAqCiAgKiBGaWxlOiBwb3dlci5jCiAgKgotICogUHVycG9zZTogSGFuZGxlcyA4MDIuMTEgcG93ZXIgbWFuYWdtZW50ICBmdW5jdGlvbnMKKyAqIFB1cnBvc2U6IEhhbmRsZXMgODAyLjExIHBvd2VyIG1hbmFnZW1lbnQgIGZ1bmN0aW9ucwogICoKICAqIEF1dGhvcjogTHluZG9uIENoZW4KICAqCkBAIC0yOTAsMTcgKzI5MCwxMSBAQAogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCi0vLzIwMDctMDExNS0wMzxBZGQ+YnkgTWlrZUxpdQotI2lmZGVmIFR4SW5TbGVlcAogICAgICBpZiAoKHBEZXZpY2UtPmJFbmFibGVQU01vZGUgPT0gRkFMU0UpICYmCiAJICAocERldmljZS0+ZlR4RGF0YUluU2xlZXAgPT0gRkFMU0UpKXsKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KLSNlbHNlCi0gICAgaWYgKHBEZXZpY2UtPmJFbmFibGVQU01vZGUgPT0gRkFMU0UpIHsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSNlbmRpZgorCiAgICAgbWVtc2V0KHBNZ210LT5wYnlQU1BhY2tldFBvb2wsIDAsIHNpemVvZihTVHhNZ210UGFja2V0KSArIFdMQU5fTlVMTERBVEFfRlJfTUFYTEVOKTsKICAgICBwVHhQYWNrZXQgPSAoUFNUeE1nbXRQYWNrZXQpcE1nbXQtPnBieVBTUGFja2V0UG9vbDsKICAgICBwVHhQYWNrZXQtPnA4MDIxMUhlYWRlciA9IChQVVdMQU5fODAyMTFIRFIpKChQQllURSlwVHhQYWNrZXQgKyBzaXplb2YoU1R4TWdtdFBhY2tldCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9wb3dlci5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9wb3dlci5oCmluZGV4IDUwNzkyYmIuLjQxYmZmZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcG93ZXIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3Bvd2VyLmgKQEAgLTE4LDcgKzE4LDcgQEAKICAqCiAgKiBGaWxlOiBwb3dlci5oCiAgKgotICogUHVycG9zZTogSGFuZGxlcyA4MDIuMTEgcG93ZXIgbWFuYWdtZW50ICBmdW5jdGlvbnMKKyAqIFB1cnBvc2U6IEhhbmRsZXMgODAyLjExIHBvd2VyIG1hbmFnZW1lbnQgIGZ1bmN0aW9ucwogICoKICAqIEF1dGhvcjogTHluZG9uIENoZW4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3JmLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3JmLmgKaW5kZXggZDRmOGI5NC4uZjViYThmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9yZi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcmYuaApAQCAtNjQsMTEgKzY0LDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIEJPT0wgSUZSRmJXcml0ZUVtYmVkZWQoUFNEZXZpY2UgcERldmljZSwgRFdPUkQgZHdEYXRhKTsKLUJPT0wgUkZiU2V0UG93ZXIgKAotICAgICAgUFNEZXZpY2UgIHBEZXZpY2UsCi0gICAgICB1bnNpZ25lZCBpbnQgICAgICB1UkFURSwKLSAgICAgIHVuc2lnbmVkIGludCAgICAgIHVDSAotICAgICk7CitCT09MIFJGYlNldFBvd2VyKFBTRGV2aWNlIHBEZXZpY2UsIHVuc2lnbmVkIGludCB1UkFURSwgdW5zaWduZWQgaW50IHVDSCk7CiAKIEJPT0wgUkZiUmF3U2V0UG93ZXIoCiAgICAgICBQU0RldmljZSAgcERldmljZSwKQEAgLTc2LDE3ICs3Miw4IEBACiAgICAgICB1bnNpZ25lZCBpbnQgICAgICB1UkFURQogICAgICk7CiAKLXZvaWQKLVJGdlJTU0lUb2RCbSAoCi0gICAgICBQU0RldmljZSBwRGV2aWNlLAotICAgICAgQllURSAgICAgYnlDdXJyUlNTSSwKLSAgICBsb25nICogICAgcGxkQm0KLSAgICApOwotCi12b2lkCi1SRmJSRlRhYmxlRG93bmxvYWQgKAotICAgICAgUFNEZXZpY2UgcERldmljZQotICAgICk7Cit2b2lkIFJGdlJTU0lUb2RCbShQU0RldmljZSBwRGV2aWNlLCBCWVRFIGJ5Q3VyclJTU0ksIGxvbmcgKnBsZEJtKTsKK3ZvaWQgUkZiUkZUYWJsZURvd25sb2FkKFBTRGV2aWNlIHBEZXZpY2UpOwogCiBCT09MIHNfYlZUMzIyNkQwXzExYkxvQ3VycmVudEFkanVzdCgKICAgICAgIFBTRGV2aWNlICAgIHBEZXZpY2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3JuZGlzLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3JuZGlzLmgKaW5kZXggYWM4NDJkZC4uZmNjZjdlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9ybmRpcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcm5kaXMuaApAQCAtMTUyLDcgKzE1Miw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0jZGVmaW5lIEVYQ0hfV09SRCh3KSAgICAgICAgKCAoV09SRCkoKFdPUkQpKHcpPDw4KSB8IChXT1JEKSgoV09SRCkodyk+PjgpICkKKyNkZWZpbmUgRVhDSF9XT1JEKHcpICgoV09SRCkoKFdPUkQpKHcpPDw4KSB8IChXT1JEKSgoV09SRCkodyk+PjgpKQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IFZhcmlhYmxlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3J4dHguYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcnh0eC5jCmluZGV4IDNlN2U1NjYuLmRlY2EyMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcnh0eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcnh0eC5jCkBAIC02MSwxMCArNjEsNyBAQAogI2luY2x1ZGUgInJmLmgiCiAjaW5jbHVkZSAiZGF0YXJhdGUuaCIKICNpbmNsdWRlICJ1c2JwaXBlLmgiCi0KLSNpZmRlZiBXUEFfU01fVHJhbnN0YXR1cwogI2luY2x1ZGUgImlvY21kLmgiCi0jZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBEZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMzA0LDEwICszMDEsOSBAQAogewogICAgIFBTU3RhdENvdW50ZXIgICAgICAgICAgIHBTdGF0aXN0aWM9JihwRGV2aWNlLT5zY1N0YXRpc3RpYyk7CiAKLQotICAgIGlmIChJU19CUk9BRENBU1RfQUREUkVTUyhwYnlEZXN0QWRkcikpCisgICAgaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKHBieURlc3RBZGRyKSkKICAgICAgICAgcFN0YXRpc3RpYy0+YWJ5VHhQa3RJbmZvW2J5UGt0TnVtXS5ieUJyb2FkTXVsdGlVbmkgPSBUWF9QS1RfQlJPQUQ7Ci0gICAgZWxzZSBpZiAoSVNfTVVMVElDQVNUX0FERFJFU1MocGJ5RGVzdEFkZHIpKQorICAgIGVsc2UgaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHBieURlc3RBZGRyKSkKICAgICAgICAgcFN0YXRpc3RpYy0+YWJ5VHhQa3RJbmZvW2J5UGt0TnVtXS5ieUJyb2FkTXVsdGlVbmkgPSBUWF9QS1RfTVVMVEk7CiAgICAgZWxzZQogICAgICAgICBwU3RhdGlzdGljLT5hYnlUeFBrdEluZm9bYnlQa3ROdW1dLmJ5QnJvYWRNdWx0aVVuaSA9IFRYX1BLVF9VTkk7CkBAIC0zMTksOSArMzE1LDYgQEAKIAkgICBFVEhfQUxFTik7CiB9CiAKLQotCi0KIHN0YXRpYwogdm9pZAogc192RmlsbFR4S2V5ICgKQEAgLTE0NzMsNyArMTQ2Niw3IEBACiAgICAgbWVtc2V0KHBUeEJ1ZkhlYWQsIDAsIHNpemVvZihUWF9CVUZGRVIpKTsKIAogICAgIC8vIEdldCBwa3QgdHlwZQotICAgIGlmIChudG9ocyhwc0V0aEhlYWRlci0+d1R5cGUpID4gTUFYX0RBVEFfTEVOKSB7CisgICAgaWYgKG50b2hzKHBzRXRoSGVhZGVyLT53VHlwZSkgPiBFVEhfREFUQV9MRU4pIHsKICAgICAgICAgaWYgKHBEZXZpY2UtPmR3RGlhZ1JlZkNvdW50ID09IDApIHsKICAgICAgICAgICAgIGNiODAyXzFfSF9sZW4gPSA4OwogICAgICAgICB9IGVsc2UgewpAQCAtMTQ5MiwxNyArMTQ4NSwxNiBAQAogICAgICAgICBiTmVlZEFDSyA9IEZBTFNFOwogICAgICAgICBwVHhCdWZIZWFkLT53RklGT0N0bCA9IHBUeEJ1ZkhlYWQtPndGSUZPQ3RsICYgKH5GSUZPQ1RMX05FRURBQ0spOwogICAgIH0gZWxzZSB7IC8vaWYgKHBEZXZpY2UtPmR3RGlhZ1JlZkNvdW50ICE9IDApIHsKLSAgICAgICAgaWYgKChwRGV2aWNlLT5lT1BNb2RlID09IE9QX01PREVfQURIT0MpIHx8Ci0gICAgICAgICAgICAocERldmljZS0+ZU9QTW9kZSA9PSBPUF9NT0RFX0FQKSkgewotICAgICAgICAgICAgaWYgKElTX01VTFRJQ0FTVF9BRERSRVNTKCYocHNFdGhIZWFkZXItPmFieURzdEFkZHJbMF0pKSB8fAotICAgICAgICAgICAgICAgIElTX0JST0FEQ0FTVF9BRERSRVNTKCYocHNFdGhIZWFkZXItPmFieURzdEFkZHJbMF0pKSkgewotICAgICAgICAgICAgICAgIGJOZWVkQUNLID0gRkFMU0U7Ci0gICAgICAgICAgICAgICAgcFR4QnVmSGVhZC0+d0ZJRk9DdGwgPSBwVHhCdWZIZWFkLT53RklGT0N0bCAmICh+RklGT0NUTF9ORUVEQUNLKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGJOZWVkQUNLID0gVFJVRTsKLSAgICAgICAgICAgICAgICBwVHhCdWZIZWFkLT53RklGT0N0bCB8PSBGSUZPQ1RMX05FRURBQ0s7Ci0gICAgICAgICAgICB9CisJaWYgKChwRGV2aWNlLT5lT1BNb2RlID09IE9QX01PREVfQURIT0MpIHx8CisJICAgIChwRGV2aWNlLT5lT1BNb2RlID09IE9QX01PREVfQVApKSB7CisJCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihwc0V0aEhlYWRlci0+YWJ5RHN0QWRkcikpIHsKKwkJCWJOZWVkQUNLID0gRkFMU0U7CisJCQlwVHhCdWZIZWFkLT53RklGT0N0bCA9CisJCQkJcFR4QnVmSGVhZC0+d0ZJRk9DdGwgJiAofkZJRk9DVExfTkVFREFDSyk7CisJCX0gZWxzZSB7CisJCQliTmVlZEFDSyA9IFRSVUU7CisJCQlwVHhCdWZIZWFkLT53RklGT0N0bCB8PSBGSUZPQ1RMX05FRURBQ0s7CisJCX0KICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIE1TRFVzIGluIEluZnJhIG1vZGUgYWx3YXlzIG5lZWQgQUNLCkBAIC0xNzA4LDcgKzE3MDAsNyBAQAogICAgIH0KIAogICAgIC8vIDgwMi4xSAotICAgIGlmIChudG9ocyhwc0V0aEhlYWRlci0+d1R5cGUpID4gTUFYX0RBVEFfTEVOKSB7CisgICAgaWYgKG50b2hzKHBzRXRoSGVhZGVyLT53VHlwZSkgPiBFVEhfREFUQV9MRU4pIHsKICAgICAgICAgaWYgKHBEZXZpY2UtPmR3RGlhZ1JlZkNvdW50ID09IDApIHsKICAgICAgICAgICAgIGlmICggKHBzRXRoSGVhZGVyLT53VHlwZSA9PSBUWVBFX1BLVF9JUFgpIHx8CiAgICAgICAgICAgICAgICAgIChwc0V0aEhlYWRlci0+d1R5cGUgPT0gY3B1X3RvX2xlMTYoMHhGMzgwKSkpIHsKQEAgLTIwMzcsOSArMjAyOSw3IEBACiAgICAgcFR4QnVmSGVhZC0+d0ZJRk9DdGwgfD0gRklGT0NUTF9UTU9FTjsKICAgICBwVHhCdWZIZWFkLT53VGltZVN0YW1wID0gY3B1X3RvX2xlMTYoREVGQVVMVF9NR05fTElGRVRJTUVfUkVTXzY0dXMpOwogCi0KLSAgICBpZiAoSVNfTVVMVElDQVNUX0FERFJFU1MoJihwUGFja2V0LT5wODAyMTFIZWFkZXItPnNBMy5hYnlBZGRyMVswXSkpIHx8Ci0gICAgICAgIElTX0JST0FEQ0FTVF9BRERSRVNTKCYocFBhY2tldC0+cDgwMjExSGVhZGVyLT5zQTMuYWJ5QWRkcjFbMF0pKSkgeworICAgIGlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihwUGFja2V0LT5wODAyMTFIZWFkZXItPnNBMy5hYnlBZGRyMSkpIHsKICAgICAgICAgYk5lZWRBQ0sgPSBGQUxTRTsKICAgICB9CiAgICAgZWxzZSB7CkBAIC0yNDQ2LDkgKzI0MzYsNyBAQAogICAgIHBUeEJ1ZkhlYWQtPndGSUZPQ3RsIHw9IEZJRk9DVExfVE1PRU47CiAgICAgcFR4QnVmSGVhZC0+d1RpbWVTdGFtcCA9IGNwdV90b19sZTE2KERFRkFVTFRfTUdOX0xJRkVUSU1FX1JFU182NHVzKTsKIAotCi0gICAgaWYgKElTX01VTFRJQ0FTVF9BRERSRVNTKCYocDgwMjExSGVhZGVyLT5zQTMuYWJ5QWRkcjFbMF0pKSB8fAotICAgICAgICBJU19CUk9BRENBU1RfQUREUkVTUygmKHA4MDIxMUhlYWRlci0+c0EzLmFieUFkZHIxWzBdKSkpIHsKKyAgICBpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIocDgwMjExSGVhZGVyLT5zQTMuYWJ5QWRkcjEpKSB7CiAgICAgICAgIGJOZWVkQUNLID0gRkFMU0U7CiAgICAgICAgIGlmIChwRGV2aWNlLT5iRW5hYmxlSG9zdFdFUCkgewogICAgICAgICAgICAgdU5vZGVJbmRleCA9IDA7CkBAIC0yNzQxLDE0ICsyNzI5LDcgQEAKICAqIFJldHVybiBWYWx1ZTogTlVMTAogICovCiAKLQotCi1OVFNUQVRVUwotbnNETUFfdHhfcGFja2V0KAotICAgICAgUFNEZXZpY2UgcERldmljZSwKLSAgICAgIHVuc2lnbmVkIGludCAgICB1RE1BSWR4LAotICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYgotICAgICkKK2ludCBuc0RNQV90eF9wYWNrZXQoUFNEZXZpY2UgcERldmljZSwgdW5zaWduZWQgaW50IHVETUFJZHgsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gJihwRGV2aWNlLT5zTWdtdE9iaik7CiAgICAgdW5zaWduZWQgaW50IEJ5dGVzVG9Xcml0ZSA9IDAsIHVIZWFkZXJMZW4gPSAwOwpAQCAtMjc3MCw5ICsyNzUxLDYgQEAKICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICBzdGF0dXM7CiAgICAgV09SRCAgICAgICAgICAgIHdLZWVwUmF0ZSA9IHBEZXZpY2UtPndDdXJyZW50UmF0ZTsKICAgICBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyogcFN0YXRzID0gJnBEZXZpY2UtPnN0YXRzOwotLy8jaWZkZWYgV1BBX1NNX1RyYW5zdGF0dXMKLSAgLy8gIGV4dGVybiBTV1BBUmVzdWx0IHdwYV9SZXN1bHQ7Ci0vLyNlbmRpZgogICAgICBCT09MICAgICAgICAgICAgYlR4ZWFwb2xfa2V5ID0gRkFMU0U7CiAKIApAQCAtMjc4Myw3ICsyNzYxLDcgQEAKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKElTX01VTFRJQ0FTVF9BRERSRVNTKChQQllURSkoc2tiLT5kYXRhKSkpIHsKKwlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoKFBCWVRFKShza2ItPmRhdGEpKSkgewogICAgICAgICAgICAgdU5vZGVJbmRleCA9IDA7CiAgICAgICAgICAgICBiTm9kZUV4aXN0ID0gVFJVRTsKICAgICAgICAgICAgIGlmIChwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJQU0VuYWJsZSkgewpAQCAtMjk3NSw3ICsyOTUzLDcgQEAKICAgICBlbHNlIHsKICAgICAgICAgaWYgKHBEZXZpY2UtPmVPUE1vZGUgPT0gT1BfTU9ERV9BREhPQykgewogICAgICAgICAgICAgLy8gQWRob2MgVHggcmF0ZSBkZWNpZGVkIGZyb20gbm9kZSBEQgotICAgICAgICAgICAgaWYgKElTX01VTFRJQ0FTVF9BRERSRVNTKCYocERldmljZS0+c1R4RXRoSGVhZGVyLmFieURzdEFkZHJbMF0pKSkgeworCSAgICBpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIocERldmljZS0+c1R4RXRoSGVhZGVyLmFieURzdEFkZHIpKSB7CiAgICAgICAgICAgICAgICAgLy8gTXVsdGljYXN0IHVzZSBoaWdoZXN0IGRhdGEgcmF0ZQogICAgICAgICAgICAgICAgIHBEZXZpY2UtPndDdXJyZW50UmF0ZSA9IHBNZ210LT5zTm9kZURCVGFibGVbMF0ud1R4RGF0YVJhdGU7CiAgICAgICAgICAgICAgICAgLy8gcHJlYW1ibGUgdHlwZQpAQCAtMzA3MSwyOCArMzA0OSwxMiBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogCi0jaWYgMAotICAgICAgICAgICAgaWYoKHBEZXZpY2UtPmZXUEFfQXV0aGVuZWQgPT0gRkFMU0UpICYmCi0JCSgocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9XUEFQU0spfHwocE1nbXQtPmVBdXRoZW5Nb2RlID0gV01BQ19BVVRIX1dQQTJQU0spKSl7Ci0gICAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2lycShza2IpOwotICAgICAgICAgICAgICAgICAgcFN0YXRzLT50eF9kcm9wcGVkKys7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4gU1RBVFVTX0ZBSUxVUkU7Ci0gICAgICAgICAgICB9Ci0JICAgICAgICBlbHNlIGlmIChwVHJhbnNtaXRLZXkgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8icmV0dXJuIG5vIHR4IGtleVxuIik7Ci0gICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKLSAgICAgICAgICAgICAgICBwU3RhdHMtPnR4X2Ryb3BwZWQrKzsKLSAgICAgICAgICAgICAgICByZXR1cm4gU1RBVFVTX0ZBSUxVUkU7Ci0gICAgICAgICAgICB9Ci0jZWxzZQogICAgICAgICAgICAgaWYgKHBUcmFuc21pdEtleSA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJyZXR1cm4gbm8gdHgga2V5XG4iKTsKICAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogICAgICAgICAgICAgICAgIHBTdGF0cy0+dHhfZHJvcHBlZCsrOwogICAgICAgICAgICAgICAgIHJldHVybiBTVEFUVVNfRkFJTFVSRTsKICAgICAgICAgICAgIH0KLSNlbmRpZgotCiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMyNjEsNyArMzIyMyw4IEBACiAgICAgaWYgKHBEZXZpY2UtPndDdXJyZW50UmF0ZSA8PSBSQVRFXzExTSkKICAgICAgICAgYnlQa3RUeXBlID0gUEtfVFlQRV8xMUI7CiAKLSAgICBCeXRlc1RvV3JpdGUgPSB1RGF0YUxlbiArIFVfQ1JDX0xFTjsKKyAgICBCeXRlc1RvV3JpdGUgPSB1RGF0YUxlbiArIEVUSF9GQ1NfTEVOOworCiAgICAgLy8gQ29udmVydCB0aGUgcGFja2V0IHRvIGFuIHVzYiBmcmFtZSBhbmQgY29weSBpbnRvIG91ciBidWZmZXIKICAgICAvLyBhbmQgc2VuZCB0aGUgaXJwLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3J4dHguaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcnh0eC5oCmluZGV4IGY5MGRlNDIuLmY5OWFjZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcnh0eC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcnh0eC5oCkBAIC02ODMsOSArNjgzLDkgQEAKICAgICApOwogCiB2b2lkIHZETUEwX3R4XzgwMjExKFBTRGV2aWNlICBwRGV2aWNlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLU5UU1RBVFVTIG5zRE1BX3R4X3BhY2tldChQU0RldmljZSAgcERldmljZSwKLQkJCSB1bnNpZ25lZCBpbnQgdURNQUlkeCwKLQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBuc0RNQV90eF9wYWNrZXQoUFNEZXZpY2UgcERldmljZSwKKwkJICAgIHVuc2lnbmVkIGludCB1RE1BSWR4LAorCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBDTURfU1RBVFVTIGNzTWdtdF94bWl0KFBTRGV2aWNlIHBEZXZpY2UsIFBTVHhNZ210UGFja2V0IHBQYWNrZXQpOwogQ01EX1NUQVRVUyBjc0JlYWNvbl94bWl0KFBTRGV2aWNlIHBEZXZpY2UsIFBTVHhNZ210UGFja2V0IHBQYWNrZXQpOwogQk9PTCBiUmVsYXlQYWNrZXRTZW5kKFBTRGV2aWNlIHBEZXZpY2UsIFBCWVRFIHBieVNrYkRhdGEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3RldGhlci5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni90ZXRoZXIuaAppbmRleCBkNjM1ODZkLi5iZTg3MDIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3RldGhlci5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvdGV0aGVyLmgKQEAgLTM2LDI1ICszNiwxMCBAQAogLy8KIC8vIGNvbnN0YW50cwogLy8KLSNkZWZpbmUgVV9DUkNfTEVOICAgICAgICAgICA0ICAgICAgICAgICAvLwogI2RlZmluZSBVX0VUSEVSX0FERFJfU1RSX0xFTiAoRVRIX0FMRU4gKiAyICsgMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFdGhlcm5ldCBhZGRyZXNzIHN0cmluZyBsZW5ndGgKLQotI2RlZmluZSBNSU5fREFUQV9MRU4gICAgICAgIDQ2ICAgICAgICAgIC8vIG1pbiBkYXRhIGxlbmd0aAotI2RlZmluZSBNQVhfREFUQV9MRU4gICAgICAgIDE1MDAgICAgICAgIC8vIG1heCBkYXRhIGxlbmd0aAotCi0jZGVmaW5lIE1JTl9QQUNLRVRfTEVOICAgICAgKE1JTl9EQVRBX0xFTiArIEVUSF9ITEVOKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDYwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWluIHRvdGFsIHBhY2tldCBsZW5ndGggKHR4KQotI2RlZmluZSBNQVhfUEFDS0VUX0xFTiAgICAgIChNQVhfREFUQV9MRU4gKyBFVEhfSExFTikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxNTE0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4IHRvdGFsIHBhY2tldCBsZW5ndGggKHR4KQotCi0jZGVmaW5lIE1BWF9MT09LQUhFQURfU0laRSAgTUFYX1BBQ0tFVF9MRU4KLQogI2RlZmluZSBVX01VTFRJX0FERFJfTEVOICAgIDggICAgICAgICAgIC8vIG11bHRpY2FzdCBhZGRyZXNzIGxlbmd0aAogCi0KICNpZmRlZiBfX0JJR19FTkRJQU4KIAogI2RlZmluZSBUWVBFX1BLVF9JUCAgICAgICAgIDB4MDgwMCAgICAgIC8vCkBAIC0xNjgsNyArMTUzLDcgQEAKICAgICBCWVRFICAgIGFieURzdEFkZHJbRVRIX0FMRU5dOwogICAgIEJZVEUgICAgYWJ5U3JjQWRkcltFVEhfQUxFTl07CiAgICAgV09SRCAgICB3VHlwZTsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNFdGhlcm5ldEhlYWRlciwgKlBTRXRoZXJuZXRIZWFkZXI7CiAKIApAQCAtMTc5LDcgKzE2NCw3IEBACiAgICAgQllURSAgICBhYnlEc3RBZGRyW0VUSF9BTEVOXTsKICAgICBCWVRFICAgIGFieVNyY0FkZHJbRVRIX0FMRU5dOwogICAgIFdPUkQgICAgd0xlbjsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFM4MDJfM0hlYWRlciwgKlBTODAyXzNIZWFkZXI7CiAKIC8vCkBAIC0xOTMsMzAgKzE3OCwxMCBAQAogICAgIEJZVEUgICAgYWJ5QWRkcjNbRVRIX0FMRU5dOwogICAgIFdPUkQgICAgd1NlcUN0bDsKICAgICBCWVRFICAgIGFieUFkZHI0W0VUSF9BTEVOXTsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFM4MDJfMTFIZWFkZXIsICpQUzgwMl8xMUhlYWRlcjsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8vIEZyYW1lIHR5cGUgbWFjcm8KLQotI2RlZmluZSBJU19NVUxUSUNBU1RfQUREUkVTUyhwYnlFdGhlckFkZHIpICAgICAgICAgIFwKLSAgICAoKCooUEJZVEUpKHBieUV0aGVyQWRkcikgJiAweDAxKSA9PSAxKQotCi0jZGVmaW5lIElTX0JST0FEQ0FTVF9BRERSRVNTKHBieUV0aGVyQWRkcikgKCAgICAgICAgXAotICAgICgqKFBEV09SRCkocGJ5RXRoZXJBZGRyKSA9PSAweEZGRkZGRkZGTCkgJiYgICAgIFwKLSAgICAoKihQV09SRCkoKFBCWVRFKShwYnlFdGhlckFkZHIpICsgNCkgPT0gMHhGRkZGKSBcCi0pCi0KLSNkZWZpbmUgSVNfTlVMTF9BRERSRVNTKHBieUV0aGVyQWRkcikgKCAgICAgICAgICAgICBcCi0gICAgKCooUERXT1JEKShwYnlFdGhlckFkZHIpID09IDBMKSAmJiAgICAgICAgICAgICAgXAotICAgICgqKFBXT1JEKSgoUEJZVEUpKHBieUV0aGVyQWRkcikgKyA0KSA9PSAwKSAgICAgIFwKLSkKLQotI2RlZmluZSBJU19FVEhfQUREUkVTU19FUVVBTChwYnlBZGRyMSwgcGJ5QWRkcjIpICggIFwKLSAgICAoKihQRFdPUkQpKHBieUFkZHIxKSA9PSAqKFBEV09SRCkocGJ5QWRkcjIpKSAmJiBcCi0gICAgKCooUFdPUkQpKChQQllURSkocGJ5QWRkcjEpICsgNCkgPT0gICAgICAgICAgICAgXAotICAgICooUFdPUkQpKChQQllURSkocGJ5QWRkcjIpICsgNCkpICAgICAgICAgICAgICAgIFwKLSkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBDbGFzc2VzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni90a2lwLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3RraXAuYwppbmRleCBmODNhZjU5Li5hNmJkNTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3RraXAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3RraXAuYwpAQCAtMTI5LDggKzEyOSw2IEBACiAvL1NUS0lQS2V5TWFuYWdlbWVudCAgc1RLSVBLZXlUYWJsZVtNQVhfVEtJUF9LRVldOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdW5zaWduZWQgaW50IHRraXBfc2JveCh1bnNpZ25lZCBpbnQgaW5kZXgpOwotdW5zaWduZWQgaW50IHJvdHIxKHVuc2lnbmVkIGludCBhKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBWYXJpYWJsZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTM5LDcgKzEzNyw3IEBACiAvKiBSZXR1cm5zIGEgMTYgYml0IHZhbHVlIGZyb20gYSA2NEsgZW50cnkgdGFibGUuIFRoZSBUYWJsZSAqLwogLyogaXMgc3ludGhlc2l6ZWQgZnJvbSB0d28gMjU2IGVudHJ5IGJ5dGUgd2lkZSB0YWJsZXMuICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi11bnNpZ25lZCBpbnQgdGtpcF9zYm94KHVuc2lnbmVkIGludCBpbmRleCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdGtpcF9zYm94KHVuc2lnbmVkIGludCBpbmRleCkKIHsKICAgICB1bnNpZ25lZCBpbnQgaW5kZXhfbG93OwogICAgIHVuc2lnbmVkIGludCBpbmRleF9oaWdoOwpAQCAtMTU1LDcgKzE1Myw3IEBACiB9OwogCiAKLXVuc2lnbmVkIGludCByb3RyMSh1bnNpZ25lZCBpbnQgYSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcm90cjEodW5zaWduZWQgaW50IGEpCiB7CiAgICAgdW5zaWduZWQgaW50IGI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvdHR5cGUuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvdHR5cGUuaAppbmRleCBjMjdmOTg1Li44ZTk0NTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3R0eXBlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni90dHlwZS5oCkBAIC0zMSwyMyArMzEsNiBAQAogCiAvKioqKioqKiBDb21tb24gZGVmaW5pdGlvbnMgYW5kIHR5cGVkZWZzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vLzIwMDctMDExNS0wNTxBZGQ+YnkgTWlrZUxpdQotI2lmbmRlZiBUeEluU2xlZXAKLSNkZWZpbmUgVHhJblNsZWVwCi0jZW5kaWYKLQotLy9EYXZpZFdhbmcKLQotLy8yMDA3LTA4MTQtMDE8QWRkPmJ5IE1pa2VMaXUKLSNpZm5kZWYgU2FmZV9DbG9zZQotI2RlZmluZSBTYWZlX0Nsb3NlCi0jZW5kaWYKLQotLy8yMDA4LTAxMzEtMDI8QWRkPmJ5IE1pa2VMaXUKLSNpZm5kZWYgQWRob2NfU1RBCi0jZGVmaW5lIEFkaG9jX1NUQQotI2VuZGlmCi0KIHR5cGVkZWYgaW50ICAgICAgICAgICAgIEJPT0w7CiAKICNpZiAhZGVmaW5lZChUUlVFKQpAQCAtNTcsMTkgKzQwLDYgQEAKICNkZWZpbmUgRkFMU0UgICAgICAgICAgIDAKICNlbmRpZgogCi0vLzIwMDctMDgwOS0wMTxBZGQ+YnkgTWlrZUxpdQotI2lmbmRlZiAgdXBkYXRlX0Jzc0xpc3QKLSNkZWZpbmUgdXBkYXRlX0Jzc0xpc3QKLSNlbmRpZgotCi0jaWZuZGVmIFdQQV9TTV9UcmFuc3RhdHVzCi0jZGVmaW5lIFdQQV9TTV9UcmFuc3RhdHVzCi0jZW5kaWYKLQotI2lmbmRlZiBDYWxjdV9MaW5rUXVhbAotI2RlZmluZSBDYWxjdV9MaW5rUXVhbAotI2VuZGlmCi0KIC8qKioqKiogU2ltcGxlIHR5cGVkZWZzICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5zaWduZWQgY2hhciAgIEJZVEU7ICAgICAgICAgICAvLyAgOC1iaXQKQEAgLTk0LDcgKzY0LDYgQEAKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgIERXT1JEX1BUUjsgICAgICAvLyAzMi1iaXQKIAogLy8gYm9vbGVhbiBwb2ludGVyCi10eXBlZGVmIHVuc2lnbmVkIGludCAqICAgUFVJTlQ7CiAKIHR5cGVkZWYgQllURSAqICAgICAgICAgICBQQllURTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni91c2JwaXBlLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3VzYnBpcGUuYwppbmRleCBmZDIzNTVlLi5hMzI3ODVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3VzYnBpcGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3VzYnBpcGUuYwpAQCAtMTA3LDEwICsxMDcsNyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0KLQotTlRTVEFUVVMKLVBJUEVuc0NvbnRyb2xPdXRBc3luKAoraW50IFBJUEVuc0NvbnRyb2xPdXRBc3luKAogICAgICBQU0RldmljZSAgICAgcERldmljZSwKICAgICAgQllURSAgICAgICAgIGJ5UmVxdWVzdCwKICAgICAgV09SRCAgICAgICAgIHdWYWx1ZSwKQEAgLTExOSw4ICsxMTYsNyBAQAogICAgICBQQllURSAgICAgICAgcGJ5QnVmZmVyCiAgICAgKQogewotICAgIE5UU1RBVFVTICAgICAgICAgICAgICAgIG50U3RhdHVzOwotCisJaW50IG50U3RhdHVzOwogCiAgICAgaWYgKE1QX1RFU1RfRkxBRyhwRGV2aWNlLCBmTVBfRElTQ09OTkVDVEVEKSkKICAgICAgICAgcmV0dXJuIFNUQVRVU19GQUlMVVJFOwpAQCAtMTU2LDEyICsxNTIsNyBAQAogICAgIHJldHVybiBudFN0YXR1czsKIH0KIAotCi0KLQotCi1OVFNUQVRVUwotUElQRW5zQ29udHJvbE91dCgKK2ludCBQSVBFbnNDb250cm9sT3V0KAogICAgICBQU0RldmljZSAgICAgcERldmljZSwKICAgICAgQllURSAgICAgICAgIGJ5UmVxdWVzdCwKICAgICAgV09SRCAgICAgICAgIHdWYWx1ZSwKQEAgLTE3MCwxMCArMTYxLDkgQEAKICAgICAgUEJZVEUgICAgICAgIHBieUJ1ZmZlcgogICAgICkKIHsKLSAgICBOVFNUQVRVUyAgICAgICAgICAgIG50U3RhdHVzID0gMDsKKwlpbnQgbnRTdGF0dXMgPSAwOwogICAgIGludCBpaTsKIAotCiAgICAgaWYgKE1QX1RFU1RfRkxBRyhwRGV2aWNlLCBmTVBfRElTQ09OTkVDVEVEKSkKICAgICAgICAgcmV0dXJuIFNUQVRVU19GQUlMVVJFOwogCkBAIC0yMTksMTEgKzIwOSw3IEBACiAgICAgcmV0dXJuIFNUQVRVU19TVUNDRVNTOwogfQogCi0KLQotCi1OVFNUQVRVUwotUElQRW5zQ29udHJvbEluKAoraW50IFBJUEVuc0NvbnRyb2xJbigKICAgICAgUFNEZXZpY2UgICAgIHBEZXZpY2UsCiAgICAgIEJZVEUgICAgICAgICBieVJlcXVlc3QsCiAgICAgIFdPUkQgICAgICAgICB3VmFsdWUsCkBAIC0yMzIsNyArMjE4LDcgQEAKICAgICAgICBQQllURSAgIHBieUJ1ZmZlcgogICAgICkKIHsKLSAgICBOVFNUQVRVUyAgICAgICAgICAgIG50U3RhdHVzID0gMDsKKwlpbnQgbnRTdGF0dXMgPSAwOwogICAgIGludCBpaTsKIAogICAgIGlmIChNUF9URVNUX0ZMQUcocERldmljZSwgZk1QX0RJU0NPTk5FQ1RFRCkpCkBAIC0zNjAsMTMgKzM0Niw5IEBACiAgKiBSZXR1cm4gVmFsdWU6IFNUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTIG9yIHJlc3VsdCBvZiBJb0NhbGxEcml2ZXIKICAqCiAgKi8KLU5UU1RBVFVTCi1QSVBFbnNJbnRlcnJ1cHRSZWFkKAotICAgICBQU0RldmljZSBwRGV2aWNlCi0gICAgKQoraW50IFBJUEVuc0ludGVycnVwdFJlYWQoUFNEZXZpY2UgcERldmljZSkKIHsKLSAgICBOVFNUQVRVUyAgICAgICAgICAgIG50U3RhdHVzID0gU1RBVFVTX0ZBSUxVUkU7Ci0KKyAgICBpbnQgbnRTdGF0dXMgPSBTVEFUVVNfRkFJTFVSRTsKIAogICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iLS0tLT5zX25zU3RhcnRJbnRlcnJ1cHRVc2JSZWFkKClcbiIpOwogCkBAIC0zODEsMjkgKzM2Myw2IEBACiAgICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBjcmVhdGVkIHRoZSB1cmIsIHdlIHdpbGwgc2VuZCBhCiAgICAgLy8gcmVxdWVzdCB0byB0aGUgVVNCIGRldmljZSBvYmplY3QuCiAgICAgLy8KLSNpZiAwICAgICAgICAgICAgLy9yZXNlcnZlIGludCBVUkIgc3VibWl0Ci0JdXNiX2ZpbGxfaW50X3VyYihwRGV2aWNlLT5wSW50ZXJydXB0VVJCLAotCSAgICAgICAgICAgICAgICAgcERldmljZS0+dXNiLAotCSAgICAgICAgICAgICAgICAgdXNiX3JjdmludHBpcGUocERldmljZS0+dXNiLCAxKSwKLQkJCSAodm9pZCAqKSBwRGV2aWNlLT5pbnRCdWYucERhdGFCdWYsCi0JICAgICAgICAgICAgICAgICBNQVhfSU5URVJSVVBUX1NJWkUsCi0JICAgICAgICAgICAgICAgICBzX25zSW50ZXJydXB0VXNiSW9Db21wbGV0ZVJlYWQsCi0JICAgICAgICAgICAgICAgICBwRGV2aWNlLAotCSAgICAgICAgICAgICAgICAgcERldmljZS0+aW50X2ludGVydmFsCi0JICAgICAgICAgICAgICAgICApOwotI2Vsc2UgICAgICAgICAgICAvL3JlcGxhY2UgaW50IFVSQiBzdWJtaXQgYnkgYnVsayB0cmFuc2ZlcgotI2lmbmRlZiBTYWZlX0Nsb3NlCi0JdXNiX2ZpbGxfaW50X3VyYihwRGV2aWNlLT5wSW50ZXJydXB0VVJCLAotCSAgICAgICAgICAgICAgICAgcERldmljZS0+dXNiLAotCSAgICAgICAgICAgICAgICAgdXNiX3JjdmludHBpcGUocERldmljZS0+dXNiLCAxKSwKLQkJCSAodm9pZCAqKSBwRGV2aWNlLT5pbnRCdWYucERhdGFCdWYsCi0JICAgICAgICAgICAgICAgICBNQVhfSU5URVJSVVBUX1NJWkUsCi0JICAgICAgICAgICAgICAgICBzX25zSW50ZXJydXB0VXNiSW9Db21wbGV0ZVJlYWQsCi0JICAgICAgICAgICAgICAgICBwRGV2aWNlLAotCSAgICAgICAgICAgICAgICAgcERldmljZS0+aW50X2ludGVydmFsCi0JICAgICAgICAgICAgICAgICApOwotI2Vsc2UKLQogICAgIHBEZXZpY2UtPnBJbnRlcnJ1cHRVUkItPmludGVydmFsID0gcERldmljZS0+aW50X2ludGVydmFsOwogCiB1c2JfZmlsbF9idWxrX3VyYihwRGV2aWNlLT5wSW50ZXJydXB0VVJCLApAQCAtNDEzLDggKzM3Miw2IEBACiAJCU1BWF9JTlRFUlJVUFRfU0laRSwKIAkJc19uc0ludGVycnVwdFVzYklvQ29tcGxldGVSZWFkLAogCQlwRGV2aWNlKTsKLSNlbmRpZgotI2VuZGlmCiAKIAludFN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHBEZXZpY2UtPnBJbnRlcnJ1cHRVUkIsIEdGUF9BVE9NSUMpOwogCWlmIChudFN0YXR1cyAhPSAwKSB7CkBAIC00NDgsOCArNDA1LDcgQEAKIAogewogICAgIFBTRGV2aWNlICAgICAgICBwRGV2aWNlOwotICAgIE5UU1RBVFVTICAgICAgICBudFN0YXR1czsKLQorICAgIGludCBudFN0YXR1czsKIAogICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iLS0tLT5zX25zSW50ZXJydXB0VXNiSW9Db21wbGV0ZVJlYWRcbiIpOwogICAgIC8vCkBAIC00OTUsMTMgKzQ1MSw2IEBACiAKIAogICAgIGlmIChwRGV2aWNlLT5mS2lsbEV2ZW50UG9sbGluZ1RocmVhZCAhPSBUUlVFKSB7Ci0gICAjaWYgMCAgICAgICAgICAgICAgIC8vcmVzZXJ2ZSBpbnQgVVJCIHN1Ym1pdAotCW50U3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLQlpZiAobnRTdGF0dXMgIT0gMCkgewotCSAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIlJlLVN1Ym1pdCBpbnQgVVJCIGZhaWxlZCAlZFxuIiwgbnRTdGF0dXMpOwotICAgIH0KLSAgICNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVwbGFjZSBpbnQgVVJCIHN1Ym1pdCBieSBidWxrIHRyYW5zZmVyCi0gICAgI2lmZGVmIFNhZmVfQ2xvc2UKICAgICAgICB1c2JfZmlsbF9idWxrX3VyYihwRGV2aWNlLT5wSW50ZXJydXB0VVJCLAogCQkgICAgICBwRGV2aWNlLT51c2IsCiAJCSAgICAgIHVzYl9yY3ZidWxrcGlwZShwRGV2aWNlLT51c2IsIDEpLApAQCAtNTE0LDExICs0NjMsNiBAQAogCWlmIChudFN0YXR1cyAhPSAwKSB7CiAJICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iU3VibWl0IGludCBVUkIgZmFpbGVkICVkXG4iLCBudFN0YXR1cyk7CiAgICAgICAgICAgIH0KLQotICAgICNlbHNlCi0gICAgICAgIHRhc2tsZXRfc2NoZWR1bGUoJnBEZXZpY2UtPkV2ZW50V29ya0l0ZW0pOwotICAgICNlbmRpZgotI2VuZGlmCiAgICAgfQogICAgIC8vCiAgICAgLy8gV2UgcmV0dXJuIFNUQVRVU19NT1JFX1BST0NFU1NJTkdfUkVRVUlSRUQgc28gdGhhdCB0aGUgY29tcGxldGlvbgpAQCAtNTQwLDEzICs0ODQsOSBAQAogICogUmV0dXJuIFZhbHVlOiBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUyBvciByZXN1bHQgb2YgSW9DYWxsRHJpdmVyCiAgKgogICovCi1OVFNUQVRVUwotUElQRW5zQnVsa0luVXNiUmVhZCgKLSAgICAgUFNEZXZpY2UgcERldmljZSwKLSAgICAgUFJDQiAgICAgcFJDQgotICAgICkKK2ludCBQSVBFbnNCdWxrSW5Vc2JSZWFkKFBTRGV2aWNlIHBEZXZpY2UsIFBSQ0IgcFJDQikKIHsKLSAgICBOVFNUQVRVUyAgICAgICAgICAgIG50U3RhdHVzPSAwOworCWludCBudFN0YXR1cyA9IDA7CiAgICAgc3RydWN0IHVyYiAgICAgICAgICAqcFVyYjsKIAogCkBAIC02MTYsOSArNTU2LDcgQEAKICAgICB1bnNpZ25lZCBsb25nICAgYnl0ZXNSZWFkOwogICAgIEJPT0wgICAgYkluZGljYXRlUmVjZWl2ZSA9IEZBTFNFOwogICAgIEJPT0wgICAgYlJlQWxsb2NTa2IgPSBGQUxTRTsKLSAgICBOVFNUQVRVUyAgICBzdGF0dXM7Ci0KLQorICAgIGludCBzdGF0dXM7CiAKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIi0tLS0+c19uc0J1bGtJblVzYklvQ29tcGxldGVSZWFkXG4iKTsKICAgICBzdGF0dXMgPSB1cmItPnN0YXR1czsKQEAgLTYyOCw5ICs1NjYsNyBAQAogICAgICAgICBwRGV2aWNlLT51bEJ1bGtJbkVycm9yKys7CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iQlVMSyBJbiBmYWlsZWQgJWRcbiIsIHN0YXR1cyk7CiAKLSAgICAgCSNpZmRlZiBDYWxjdV9MaW5rUXVhbAogICAgICAgICAgICBwRGV2aWNlLT5zY1N0YXRpc3RpYy5SeEZjc0VyckNudCArKzsKLQkjZW5kaWYKIC8vdG9kby4uLnh4eHh4eAogLy8gICAgICAgIGlmIChzdGF0dXMgPT0gVVNCRF9TVEFUVVNfQ1JDKSB7CiAvLyAgICAgICAgICAgIHBEZXZpY2UtPnVsQnVsa0luQ29udENSQ0Vycm9yKys7CkBAIC02NDQsOSArNTgwLDcgQEAKICAgICAgICAgcERldmljZS0+dWxCdWxrSW5Db250Q1JDRXJyb3IgPSAwOwogICAgICAgICBwRGV2aWNlLT51bEJ1bGtJbkJ5dGVzUmVhZCArPSBieXRlc1JlYWQ7CiAKLQkjaWZkZWYgQ2FsY3VfTGlua1F1YWwKICAgICAgICAgICAgcERldmljZS0+c2NTdGF0aXN0aWMuUnhPa0NudCArKzsKLQkjZW5kaWYKICAgICB9CiAKIApAQCAtNjkwLDcgKzYyNCw3IEBACiAgICAgICBQVVNCX1NFTkRfQ09OVEVYVCBwQ29udGV4dAogICAgICkKIHsKLSAgICBOVFNUQVRVUyAgICAgICAgICAgIHN0YXR1czsKKyAgICBpbnQgc3RhdHVzOwogICAgIHN0cnVjdCB1cmIgICAgICAgICAgKnBVcmI7CiAKIApAQCAtNzcxLDcgKzcwNSw3IEBACiAgICAgKQogewogICAgIFBTRGV2aWNlICAgICAgICAgICAgcERldmljZTsKLSAgICBOVFNUQVRVUyAgICAgICAgICAgIHN0YXR1czsKKyAgICBpbnQgc3RhdHVzOwogICAgIENPTlRFWFRfVFlQRSAgICAgICAgQ29udGV4dFR5cGU7CiAgICAgdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgIHVsQnVmTGVuOwogICAgIFBVU0JfU0VORF9DT05URVhUICAgcENvbnRleHQ7CkBAIC04MDMsMTAgKzczNyw3IEBACiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iV3JpdGUgJWQgYnl0ZXNcbiIsKGludCl1bEJ1Zkxlbik7CiAgICAgICAgIHBEZXZpY2UtPnVsQnVsa091dEJ5dGVzV3JpdGUgKz0gdWxCdWZMZW47CiAgICAgICAgIHBEZXZpY2UtPnVsQnVsa091dENvbnRDUkNFcnJvciA9IDA7Ci0JLy8yMDA3LTAxMTUtMDY8QWRkPmJ5IE1pa2VMaXUKLSAgICAgICAgICAgI2lmZGVmIFR4SW5TbGVlcAotICAgICAgICAgICAgIHBEZXZpY2UtPm5UeERhdGFUaW1lQ291dCA9IDA7Ci0gICAgICAgICAgICNlbmRpZgorCXBEZXZpY2UtPm5UeERhdGFUaW1lQ291dCA9IDA7CiAKICAgICB9IGVsc2UgewogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIkJVTEsgT3V0IGZhaWxlZCAlZFxuIiwgc3RhdHVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvdXNicGlwZS5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni91c2JwaXBlLmgKaW5kZXggZjg1MmIzOS4uYjM2NzM0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni91c2JwaXBlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni91c2JwaXBlLmgKQEAgLTQxLDggKzQxLDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotTlRTVEFUVVMKLVBJUEVuc0NvbnRyb2xPdXQoCitpbnQgUElQRW5zQ29udHJvbE91dCgKICAgICAgUFNEZXZpY2UgICAgIHBEZXZpY2UsCiAgICAgIEJZVEUgICAgICAgICBieVJlcXVlc3QsCiAgICAgIFdPUkQgICAgICAgICB3VmFsdWUsCkBAIC01MSwxMCArNTAsNyBAQAogICAgICBQQllURSAgICAgICAgcGJ5QnVmZmVyCiAgICAgKTsKIAotCi0KLU5UU1RBVFVTCi1QSVBFbnNDb250cm9sT3V0QXN5bigKK2ludCBQSVBFbnNDb250cm9sT3V0QXN5bigKICAgICAgUFNEZXZpY2UgICAgIHBEZXZpY2UsCiAgICAgIEJZVEUgICAgICAgICBieVJlcXVlc3QsCiAgICAgIFdPUkQgICAgICAgICB3VmFsdWUsCkBAIC02Myw4ICs1OSw3IEBACiAgICAgIFBCWVRFICAgICAgICBwYnlCdWZmZXIKICAgICApOwogCi1OVFNUQVRVUwotUElQRW5zQ29udHJvbEluKAoraW50IFBJUEVuc0NvbnRyb2xJbigKICAgICAgUFNEZXZpY2UgICAgIHBEZXZpY2UsCiAgICAgIEJZVEUgICAgICAgICBieVJlcXVlc3QsCiAgICAgIFdPUkQgICAgICAgICB3VmFsdWUsCkBAIC03MywyNCArNjgsOCBAQAogICAgICAgIFBCWVRFICAgcGJ5QnVmZmVyCiAgICAgKTsKIAotCi0KLQotTlRTVEFUVVMKLVBJUEVuc0ludGVycnVwdFJlYWQoCi0gICAgIFBTRGV2aWNlIHBEZXZpY2UKLSAgICApOwotCi1OVFNUQVRVUwotUElQRW5zQnVsa0luVXNiUmVhZCgKLSAgICAgUFNEZXZpY2UgcERldmljZSwKLSAgICAgUFJDQiAgICAgcFJDQgotICAgICk7Ci0KLU5UU1RBVFVTCi1QSVBFbnNTZW5kQnVsa091dCgKLSAgICAgIFBTRGV2aWNlIHBEZXZpY2UsCi0gICAgICBQVVNCX1NFTkRfQ09OVEVYVCBwQ29udGV4dAotICAgICk7CitpbnQgUElQRW5zSW50ZXJydXB0UmVhZChQU0RldmljZSBwRGV2aWNlKTsKK2ludCBQSVBFbnNCdWxrSW5Vc2JSZWFkKFBTRGV2aWNlIHBEZXZpY2UsIFBSQ0IgcFJDQik7CitpbnQgUElQRW5zU2VuZEJ1bGtPdXQoUFNEZXZpY2UgcERldmljZSwgUFVTQl9TRU5EX0NPTlRFWFQgcENvbnRleHQpOwogCiAjZW5kaWYgLyogX19VU0JQSVBFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93Y21kLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3djbWQuYwppbmRleCA3MmUyMWI2Li42ODY3NDdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3djbWQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3djbWQuYwpAQCAtNTY1LDExICs1NjUsOSBAQAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotLy8yMDA4MDEzMS0wMyw8QWRkPiBieSBNaWtlIExpdQotCSNpZmRlZiBBZGhvY19TVEEKICAgICAgICAgICAgIG1lbWNweShwTWdtdC0+YWJ5QWRIb2NTU0lELHBNZ210LT5hYnlEZXNpcmVTU0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQV0xBTl9JRV9TU0lEKXBNZ210LT5hYnlEZXNpcmVTU0lEKS0+bGVuICsgV0xBTl9JRUhEUl9MRU4pOwotCSNlbmRpZgorCiAgICAgICAgICAgICBwSXRlbVNTSUQgPSAoUFdMQU5fSUVfU1NJRClwTWdtdC0+YWJ5RGVzaXJlU1NJRDsKICAgICAgICAgICAgIHBJdGVtU1NJREN1cnIgPSAoUFdMQU5fSUVfU1NJRClwTWdtdC0+YWJ5Q3VyclNTSUQ7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiBjbWQ6IGRlc2lyZSBzc2lkID0gJXNcbiIsIHBJdGVtU1NJRC0+YWJ5U1NJRCk7CkBAIC03MTYsMTggKzcxNCw2IEBACiAJICAgICAgIHJldHVybjsKIAkgICB9CiAJICAgICAgICAgIHBEZXZpY2UtPmJ5TGlua1dhaXRDb3VudCA9IDA7Ci0JCSAjaWYgMAotICAgICAgICAgICAgICAgICAgICAgI2lmZGVmIFdQQV9TVVBQTElDQU5UX0RSSVZFUl9XRVhUX1NVUFBPUlQKLSAgICAgICAgICAgICAgICAgICAgLy8gaWYocERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9PSBUUlVFKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgCXVuaW9uIGl3cmVxX2RhdGEgIHdycXU7Ci0gICAgICAgICAgICAgICAgICAJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2YgKHdycXUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgd3JxdS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLSAgICAgICAgICAgICAgICAgIAlwcmludGsoIndpcmVsZXNzX3NlbmRfZXZlbnQtLS0+U0lPQ0dJV0FQKGRpc2Fzc29jaWF0ZWQ6QVVUSEVOVElDQVRFX1dBSVRfdGltZW91dClcbiIpOwotICAgICAgICAgICAgICAgICAgCXdpcmVsZXNzX3NlbmRfZXZlbnQocERldmljZS0+ZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAjZW5kaWYKLQkgICAgICAgICAjZW5kaWYKIAogICAgICAgICAgICAgc19iQ29tbWFuZENvbXBsZXRlKHBEZXZpY2UpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC03NTQsOCArNzQwLDYgQEAKICAgICAgICAgICAgICAgICAgICAgbmV0aWZfd2FrZV9xdWV1ZShwRGV2aWNlLT5kZXYpOwogICAgICAgICAgICAgICAgIH0KIAotCS8vMjAwNy0wMTE1LTA3PEFkZD5ieSBNaWtlTGl1Ci0JICAgICAjaWZkZWYgVHhJblNsZWVwCiAJCSBpZihwRGV2aWNlLT5Jc1R4RGF0YVRyaWdnZXIgIT0gRkFMU0UpICAgeyAgICAvL1R4RGF0YVRpbWVyIGlzIG5vdCB0cmlnZ2VyZWQgYXQgdGhlIGZpcnN0IHRpbWUKICAgICAgICAgICAgICAgICAgICAgIC8vIHByaW50aygiUmUtaW5pdGlhbCBUeERhdGFUaW1lcioqKipcbiIpOwogCQkgICAgZGVsX3RpbWVyKCZwRGV2aWNlLT5zVGltZXJUeERhdGEpOwpAQCAtNzcxLDcgKzc1NSw2IEBACiAJCSB9CiAJCXBEZXZpY2UtPklzVHhEYXRhVHJpZ2dlciA9IFRSVUU7CiAgICAgICAgICAgICAgICAgYWRkX3RpbWVyKCZwRGV2aWNlLT5zVGltZXJUeERhdGEpOwotICAgICAgICAgICAgICNlbmRpZgogCiAgICAgICAgICAgICB9CiAJICAgZWxzZSBpZihwTWdtdC0+ZUN1cnJTdGF0ZSA8IFdNQUNfU1RBVEVfQVNTT0NQRU5ESU5HKSB7CkBAIC03ODUsMTggKzc2OCw2IEBACiAJICAgICAgIHJldHVybjsKIAkgICB9CiAJICAgICAgICAgIHBEZXZpY2UtPmJ5TGlua1dhaXRDb3VudCA9IDA7Ci0JCSNpZiAwCi0gICAgICAgICAgICAgICAgICAgICAjaWZkZWYgV1BBX1NVUFBMSUNBTlRfRFJJVkVSX1dFWFRfU1VQUE9SVAotICAgICAgICAgICAgICAgICAgICAvLyBpZihwRGV2aWNlLT5iV1BBU3VwcFdleHRFbmFibGVkID09IFRSVUUpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAJdW5pb24gaXdyZXFfZGF0YSAgd3JxdTsKLSAgICAgICAgICAgICAgICAgIAltZW1zZXQoJndycXUsIDAsIHNpemVvZiAod3JxdSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICB3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotICAgICAgICAgICAgICAgICAgCXByaW50aygid2lyZWxlc3Nfc2VuZF9ldmVudC0tLT5TSU9DR0lXQVAoZGlzYXNzb2NpYXRlZDpBU1NPQ0lBVEVfV0FJVF90aW1lb3V0KVxuIik7Ci0gICAgICAgICAgICAgICAgICAJd2lyZWxlc3Nfc2VuZF9ldmVudChwRGV2aWNlLT5kZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOwotICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICNlbmRpZgotCQkjZW5kaWYKIAogICAgICAgICAgICAgc19iQ29tbWFuZENvbXBsZXRlKHBEZXZpY2UpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC05MDcsNyArODc4LDcgQEAKICAgICAgICAvLyAgICAgICAgIENBUkRiUmFkaW9Qb3dlck9mZihwRGV2aWNlKTsKICAgICAgICAvLzIwMDgtMDktMDk8QWRkPiBCWSBNaWtlOkhvdCBLZXkgZm9yIFJhZGlvIE9uL09mZgogICAgICAgIHsKLSAgICAgICAgTlRTVEFUVVMgICAgICAgIG50U3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisJICAgICAgIGludCBudFN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOwogICAgICAgICBCWVRFICAgICAgICAgICAgYnlUbXA7CiAKICAgICAgICAgbnRTdGF0dXMgPSBDT05UUk9MbnNSZXF1ZXN0SW4ocERldmljZSwKQEAgLTEzMDAsOCArMTI3MSw2IEBACiAgICAgcERldmljZS0+YkNtZENsZWFyID0gRkFMU0U7CiB9CiAKLS8vMjAwNy0wMTE1LTA4PEFkZD5ieSBNaWtlTGl1Ci0jaWZkZWYgVHhJblNsZWVwCiB2b2lkIEJTU3ZTZWNvbmRUeERhdGEodm9pZCAqaERldmljZUNvbnRleHQpCiB7CiAgIFBTRGV2aWNlICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKWhEZXZpY2VDb250ZXh0OwpAQCAtMTMyMCwxMiArMTI4OSw4IEBACiAKICAgc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAgIC8vaXMgd2FwX3N1cHBsaWNhbnQgcnVubmluZyBzdWNjZXNzZnVsIE9SIG9ubHkgb3BlbiAmJiBzaGFyZWtleSBtb2RlIQotICAjaWYgMQogICBpZigoKHBEZXZpY2UtPmJMaW5rUGFzcyA9PVRSVUUpJiYocE1nbXQtPmVBdXRoZW5Nb2RlIDwgV01BQ19BVVRIX1dQQSkpIHx8ICAvL29wZW4gJiYgc2hhcmVrZXkgbGlua2luZwogICAgICAgKHBEZXZpY2UtPmZXUEFfQXV0aGVuZWQgPT0gVFJVRSkpIHsgICAvL3dwYSBsaW5raW5nCi0gI2Vsc2UKLSAgaWYocERldmljZS0+YkxpbmtQYXNzID09VFJVRSkgewotICNlbmRpZgogICAgICAgICAvLyAgIHByaW50aygibWlrZTolcy0tPkluU2xlZXAgVHggRGF0YSBQcm9jZWR1cmVcbiIsX19GVU5DVElPTl9fKTsKIAkgIHBEZXZpY2UtPmZUeERhdGFJblNsZWVwID0gVFJVRTsKIAkgIFBTYlNlbmROdWxsUGFja2V0KHBEZXZpY2UpOyAgICAgIC8vc2VuZCBudWxsIHBhY2tldApAQCAtMTMzNyw1ICsxMzAyLDMgQEAKICAgYWRkX3RpbWVyKCZwRGV2aWNlLT5zVGltZXJUeERhdGEpOwogICByZXR1cm47CiB9Ci0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93Y21kLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3djbWQuaAppbmRleCAwOWM0NDExLi5kMjRhNzlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3djbWQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3djbWQuaApAQCAtMTI4LDkgKzEyOCw2IEBACiAgICAgKTsKICovCiAKLS8vMjAwNy0wMTE1LTA5PEFkZD5ieSBNaWtlTGl1Ci0jaWZkZWYgVHhJblNsZWVwCiB2b2lkIEJTU3ZTZWNvbmRUeERhdGEodm9pZCAqaERldmljZUNvbnRleHQpOwotI2VuZGlmCiAKICNlbmRpZiAvKiBfX1dDTURfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3djdGwuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd2N0bC5jCmluZGV4IDg1N2NlMGIuLmMyMzFhZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd2N0bC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd2N0bC5jCkBAIC03OSw3ICs3OSw4IEBACiAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IERVUExJQ0FURV9SWF9DQUNIRV9MRU5HVEg7IGlpKyspIHsKICAgICAgICAgICAgIHBDYWNoZUVudHJ5ID0gJihwQ2FjaGUtPmFzQ2FjaGVFbnRyeVt1SW5kZXhdKTsKICAgICAgICAgICAgIGlmICgocENhY2hlRW50cnktPndGbVNlcXVlbmNlID09IHBNQUNIZWFkZXItPndTZXFDdGwpICYmCi0gICAgICAgICAgICAgICAgKElTX0VUSF9BRERSRVNTX0VRVUFMICgmKHBDYWNoZUVudHJ5LT5hYnlBZGRyMlswXSksICYocE1BQ0hlYWRlci0+YWJ5QWRkcjJbMF0pKSkgJiYKKwkJKCFjb21wYXJlX2V0aGVyX2FkZHIoJihwQ2FjaGVFbnRyeS0+YWJ5QWRkcjJbMF0pLAorCQkJCSAgICAgJihwTUFDSGVhZGVyLT5hYnlBZGRyMlswXSkpKSAmJgogICAgICAgICAgICAgICAgIChMT0JZVEUocENhY2hlRW50cnktPndGcmFtZUN0bCkgPT0gTE9CWVRFKHBNQUNIZWFkZXItPndGcmFtZUN0bCkpCiAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgLyogRHVwbGljYXRlIG1hdGNoICovCkBAIC0xMTEsMjIgKzExMiwyMSBAQAogICogUmV0dXJuIFZhbHVlOiBpbmRleCBudW1iZXIgaW4gRGVmcmFnbWVudCBEYXRhYmFzZQogICoKICAqLworCiB1bnNpZ25lZCBpbnQgV0NUTHVTZWFyY2hERkNCKFBTRGV2aWNlIHBEZXZpY2UsIFBTODAyXzExSGVhZGVyIHBNQUNIZWFkZXIpCiB7CiAJdW5zaWduZWQgaW50IGlpOwogCi0gICAgZm9yKGlpPTA7aWk8cERldmljZS0+Y2JERkNCO2lpKyspIHsKLSAgICAgICAgaWYgKChwRGV2aWNlLT5zUnhERkNCW2lpXS5iSW5Vc2UgPT0gVFJVRSkgJiYKLSAgICAgICAgICAgIChJU19FVEhfQUREUkVTU19FUVVBTCAoJihwRGV2aWNlLT5zUnhERkNCW2lpXS5hYnlBZGRyMlswXSksICYocE1BQ0hlYWRlci0+YWJ5QWRkcjJbMF0pKSkKLSAgICAgICAgICAgICkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIHJldHVybihpaSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuKHBEZXZpY2UtPmNiREZDQik7CisJZm9yIChpaSA9IDA7IGlpIDwgcERldmljZS0+Y2JERkNCOyBpaSsrKSB7CisJCWlmICgocERldmljZS0+c1J4REZDQltpaV0uYkluVXNlID09IFRSVUUpICYmCisJCSAgICAoIWNvbXBhcmVfZXRoZXJfYWRkcigmKHBEZXZpY2UtPnNSeERGQ0JbaWldLmFieUFkZHIyWzBdKSwKKwkJCQkJICAmKHBNQUNIZWFkZXItPmFieUFkZHIyWzBdKSkpKSB7CisJCQlyZXR1cm4gaWk7CisJCX0KKwl9CisJcmV0dXJuIHBEZXZpY2UtPmNiREZDQjsKIH0KIAotCiAvKgogICogRGVzY3JpcHRpb246CiAgKiAgICAgIEluc2VydCByZWNlaXZlZCBmcmFnbWVudCBwYWNrZXQgaW4gRGVmcmFnbWVudCBEYXRhYmFzZQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAKICAgICBpZiAocERldmljZS0+Y2JGcmVlREZDQiA9PSAwKQogICAgICAgICByZXR1cm4ocERldmljZS0+Y2JERkNCKTsKLSAgICBmb3IoaWk9MDtpaTxwRGV2aWNlLT5jYkRGQ0I7aWkrKykgeworICAgIGZvciAoaWkgPSAwOyBpaSA8IHBEZXZpY2UtPmNiREZDQjsgaWkrKykgewogICAgICAgICBpZiAocERldmljZS0+c1J4REZDQltpaV0uYkluVXNlID09IEZBTFNFKSB7CiAgICAgICAgICAgICBwRGV2aWNlLT5jYkZyZWVERkNCLS07CiAgICAgICAgICAgICBwRGV2aWNlLT5zUnhERkNCW2lpXS51TGlmZXRpbWUgPSBwRGV2aWNlLT5kd01heFJlY2VpdmVMaWZldGltZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd21nci5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93bWdyLmMKaW5kZXggOTNjMTVmMC4uZTRlY2E5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93bWdyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93bWdyLmMKQEAgLTM1Myw5ICszNTMsOSBAQAogICAgIHBNZ210LT5wYnlQU1BhY2tldFBvb2wgPSAmcE1nbXQtPmJ5UFNQYWNrZXRQb29sWzBdOwogICAgIHBNZ210LT5wYnlNZ210UGFja2V0UG9vbCA9ICZwTWdtdC0+YnlNZ210UGFja2V0UG9vbFswXTsKICAgICBwTWdtdC0+dUN1cnJDaGFubmVsID0gcERldmljZS0+dUNoYW5uZWw7Ci0gICAgZm9yKGlpPTA7aWk8V0xBTl9CU1NJRF9MRU47aWkrKykgewotICAgICAgICBwTWdtdC0+YWJ5RGVzaXJlQlNTSURbaWldID0gMHhGRjsKLSAgICB9CisgICAgZm9yIChpaSA9IDA7IGlpIDwgV0xBTl9CU1NJRF9MRU47IGlpKyspCisJcE1nbXQtPmFieURlc2lyZUJTU0lEW2lpXSA9IDB4RkY7CisKICAgICBwTWdtdC0+c0Fzc29jSW5mby5Bc3NvY0luZm8uTGVuZ3RoID0gc2l6ZW9mKE5ESVNfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OKTsKICAgICAvL21lbXNldChwTWdtdC0+YWJ5RGVzaXJlU1NJRCwgMCwgV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1NTSURfTUFYTEVOICsxKTsKICAgICBwTWdtdC0+YnlDU1NQSyA9IEtFWV9DVExfTk9ORTsKQEAgLTM3Myw4ICszNzMsNiBAQAogICAgIHBEZXZpY2UtPnNUaW1lckNvbW1hbmQuZnVuY3Rpb24gPSAoVGltZXJGdW5jdGlvbil2UnVuQ29tbWFuZDsKICAgICBwRGV2aWNlLT5zVGltZXJDb21tYW5kLmV4cGlyZXMgPSBSVU5fQVQoSFopOwogCi0vLzIwMDctMDExNS0xMDxBZGQ+YnkgTWlrZUxpdQotICAgI2lmZGVmIFR4SW5TbGVlcAogICAgIGluaXRfdGltZXIoJnBEZXZpY2UtPnNUaW1lclR4RGF0YSk7CiAgICAgcERldmljZS0+c1RpbWVyVHhEYXRhLmRhdGEgPSAodW5zaWduZWQgbG9uZylwRGV2aWNlOwogICAgIHBEZXZpY2UtPnNUaW1lclR4RGF0YS5mdW5jdGlvbiA9IChUaW1lckZ1bmN0aW9uKUJTU3ZTZWNvbmRUeERhdGE7CkBAIC0zODIsNyArMzgwLDYgQEAKICAgICBwRGV2aWNlLT5mVHhEYXRhSW5TbGVlcCA9IEZBTFNFOwogICAgIHBEZXZpY2UtPklzVHhEYXRhVHJpZ2dlciA9IEZBTFNFOwogICAgIHBEZXZpY2UtPm5UeERhdGFUaW1lQ291dCA9IDA7Ci0gICAjZW5kaWYKIAogICAgIHBEZXZpY2UtPmNiRnJlZUNtZFF1ZXVlID0gQ01EX1FfU0laRTsKICAgICBwRGV2aWNlLT51Q21kRGVxdWV1ZUlkeCA9IDA7CkBAIC0xMDU2LDcgKzEwNTMsNiBAQAogCiAgICAgfQogCi0jaWYgMQogI2lmZGVmIFdQQV9TVVBQTElDQU5UX0RSSVZFUl9XRVhUX1NVUFBPUlQKIC8vbmVlZCBjbGVhciBmbGFncyByZWxhdGVkIHRvIE5ldHdvcmttYW5hZ2VyCiAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ3ZXh0c3RlcDAgPSBGQUxTRTsKQEAgLTEwNjUsNyArMTA2MSw2IEBACiAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ3ZXh0c3RlcDMgPSBGQUxTRTsKICAgICAgICAgICAgICAgcERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9IEZBTFNFOwogI2VuZGlmCi0jZW5kaWYKIAogaWYocE1nbXQtPmVDdXJyU3RhdGUgPT0gV01BQ19TVEFURV9BU1NPQykKICAgICAgIHRpbWVyX2V4cGlyZShwRGV2aWNlLT5zVGltZXJDb21tYW5kLCAwKTsKQEAgLTE3MDUsNyArMTcwMCw4IEBACiAJICAgcERldmljZS0+ZldQQV9BdXRoZW5lZCA9IEZBTFNFOwogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfTk9USUNFLCBLRVJOX0lORk8gICJBUCBkZWF1dGhlZCBtZSwgcmVhc29uPSVkLlxuIiwgY3B1X3RvX2xlMTYoKCooc0ZyYW1lLnB3UmVhc29uKSkpKTsKICAgICAgICAgICAgIC8vIFRPRE86IHVwZGF0ZSBCU1MgbGlzdCBmb3Igc3BlY2lmaWMgQlNTSUQgaWYgcHJlLWF1dGhlbnRpY2F0aW9uIGNhc2UKLSAgICAgICAgICAgIGlmIChJU19FVEhfQUREUkVTU19FUVVBTChzRnJhbWUucEhkci0+c0EzLmFieUFkZHIzLCBwTWdtdC0+YWJ5Q3VyckJTU0lEKSkgeworCSAgICBpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihzRnJhbWUucEhkci0+c0EzLmFieUFkZHIzLAorCQkJCSAgICBwTWdtdC0+YWJ5Q3VyckJTU0lEKSkgewogICAgICAgICAgICAgICAgIGlmIChwTWdtdC0+ZUN1cnJTdGF0ZSA+PSBXTUFDX1NUQVRFX0FVVEhQRU5ESU5HKSB7CiAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYkFjdGl2ZSA9IEZBTFNFOwogICAgICAgICAgICAgICAgICAgICBwTWdtdC0+ZUN1cnJNb2RlID0gV01BQ19NT0RFX1NUQU5EQlk7CkBAIC0yNDcxLDExICsyNDY3LDggQEAKICAgICBwRGV2aWNlLT51Q3VyclJTU0kgPSAwOwogICAgIHBEZXZpY2UtPmJ5Q3VyclNRID0gMDsKIAotLy8yMDA4MDEzMS0wNCw8QWRkPiBieSBNaWtlIExpdQotI2lmZGVmIEFkaG9jX1NUQQogICAgIG1lbWNweShwTWdtdC0+YWJ5RGVzaXJlU1NJRCxwTWdtdC0+YWJ5QWRIb2NTU0lELAogICAgICAgICAgICAgICAgICAgICAgICgoUFdMQU5fSUVfU1NJRClwTWdtdC0+YWJ5QWRIb2NTU0lEKS0+bGVuICsgV0xBTl9JRUhEUl9MRU4pOwotI2VuZGlmCiAKICAgICBtZW1zZXQocE1nbXQtPmFieUN1cnJTU0lELCAwLCBXTEFOX0lFSERSX0xFTiArIFdMQU5fU1NJRF9NQVhMRU4gKyAxKTsKICAgICBtZW1jcHkocE1nbXQtPmFieUN1cnJTU0lELApAQCAtMzA5OSwxMiArMzA5Miw2IEBACiAgIFBTTWdtdE9iamVjdCAgcE1nbXQgPSAmKHBEZXZpY2UtPnNNZ210T2JqKTsKICAgLyogdW5zaWduZWQgaW50IGlpLCB1U2FtZUJzc2lkTnVtPTA7ICovCiAKLSAgICAgICAgLy8gIGZvciAoaWkgPSAwOyBpaSA8IE1BWF9CU1NfTlVNOyBpaSsrKSB7Ci0gICAgICAgICAgLy8gICBpZiAocE1nbXQtPnNCU1NMaXN0W2lpXS5iQWN0aXZlICYmCi0gICAgICAgICAgICAvLyAgICAgIElTX0VUSF9BRERSRVNTX0VRVUFMKHBNZ210LT5zQlNTTGlzdFtpaV0uYWJ5QlNTSUQsIHBDdXJyLT5hYnlCU1NJRCkpIHsKLSAgICAgICAgICAgICAvLyAgICAgICB1U2FtZUJzc2lkTnVtKys7Ci0gICAgICAgICAgICAgICAvLyAgIH0KLSAgICAgICAgICAgLy8gfQogICAvLyAgIGlmKCB1U2FtZUJzc2lkTnVtPj0yKSB7CSAvL3dlIG9ubHkgY2hlY2sgQVAgaW4gaGlkZGVuIHNzc2lkICBtb2RlCiAgICAgICAgIGlmICgocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9XUEFQU0spIHx8ICAgICAgICAgICAvL25ldHdvcmttYW5hZ2VyIDAuNy4wIGRvZXMgbm90IGdpdmUgdGhlIHBhaXJ3aXNlLWtleSBzZWxzZWN0aW9uLAogICAgICAgICAgICAgIChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQTJQU0spKSB7ICAgICAgICAgLy8gc28gd2UgbmVlZCByZS1zZWxzZWN0IGl0IGFjY29yZGluZyB0byByZWFsIHBhaXJ3aXNlLWtleSBpbmZvLgpAQCAtNDc5NSwyMSArNDc4MiwyMSBAQAogICAgICAgICAgICAgYnlNdWx0aWNhc3RDaXBoZXIgPSBLRVlfQ1RMX0lOVkFMSUQ7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBjaGVjayBQYWlyd2lzZSBLZXkgQ2lwaGVyCi0gICAgICAgIGZvcihpPTA7aTxwQlNTTm9kZS0+d0NTU1BLQ291bnQ7aSsrKSB7Ci0gICAgICAgICAgICBpZiAoKHBCU1NOb2RlLT5hYnlDU1NQS1tpXSA9PSBXTEFOXzExaV9DU1NfV0VQNDApIHx8Ci0gICAgICAgICAgICAgICAgKHBCU1NOb2RlLT5hYnlDU1NQS1tpXSA9PSBXTEFOXzExaV9DU1NfV0VQMTA0KSkgewotICAgICAgICAgICAgICAgIC8vIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gYXMgZGVmaW5lZCA4MDIuMTFpCi0gICAgICAgICAgICAgICAgYnlDaXBoZXJNYXNrIHw9IDB4MDE7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHBCU1NOb2RlLT5hYnlDU1NQS1tpXSA9PSBXTEFOXzExaV9DU1NfVEtJUCkgewotICAgICAgICAgICAgICAgIGJ5Q2lwaGVyTWFzayB8PSAweDAyOwotICAgICAgICAgICAgfSBlbHNlIGlmIChwQlNTTm9kZS0+YWJ5Q1NTUEtbaV0gPT0gV0xBTl8xMWlfQ1NTX0NDTVApIHsKLSAgICAgICAgICAgICAgICBieUNpcGhlck1hc2sgfD0gMHgwNDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocEJTU05vZGUtPmFieUNTU1BLW2ldID09IFdMQU5fMTFpX0NTU19VU0VfR1JPVVApIHsKLSAgICAgICAgICAgICAgICAvLyB1c2UgZ3JvdXAga2V5IG9ubHkgaWdub3JlIGFsbCBvdGhlcnMKLSAgICAgICAgICAgICAgICBieUNpcGhlck1hc2sgPSAwOwotICAgICAgICAgICAgICAgIGkgPSBwQlNTTm9kZS0+d0NTU1BLQ291bnQ7Ci0gICAgICAgICAgICB9CisJLyogY2hlY2sgUGFpcndpc2UgS2V5IENpcGhlciAqLworCWZvciAoaSA9IDA7IGkgPCBwQlNTTm9kZS0+d0NTU1BLQ291bnQ7IGkrKykgeworCQlpZiAoKHBCU1NOb2RlLT5hYnlDU1NQS1tpXSA9PSBXTEFOXzExaV9DU1NfV0VQNDApIHx8CisJCSAgICAocEJTU05vZGUtPmFieUNTU1BLW2ldID09IFdMQU5fMTFpX0NTU19XRVAxMDQpKSB7CisJCQkvKiB0aGlzIHNob3VsZCBub3QgaGFwcGVuIGFzIGRlZmluZWQgODAyLjExaSAqLworCQkJYnlDaXBoZXJNYXNrIHw9IDB4MDE7CisJCX0gZWxzZSBpZiAocEJTU05vZGUtPmFieUNTU1BLW2ldID09IFdMQU5fMTFpX0NTU19US0lQKSB7CisJCQlieUNpcGhlck1hc2sgfD0gMHgwMjsKKwkJfSBlbHNlIGlmIChwQlNTTm9kZS0+YWJ5Q1NTUEtbaV0gPT0gV0xBTl8xMWlfQ1NTX0NDTVApIHsKKwkJCWJ5Q2lwaGVyTWFzayB8PSAweDA0OworCQl9IGVsc2UgaWYgKHBCU1NOb2RlLT5hYnlDU1NQS1tpXSA9PSBXTEFOXzExaV9DU1NfVVNFX0dST1VQKSB7CisJCQkvKiB1c2UgZ3JvdXAga2V5IG9ubHkgaWdub3JlIGFsbCBvdGhlcnMgKi8KKwkJCWJ5Q2lwaGVyTWFzayA9IDA7CisJCQlpID0gcEJTU05vZGUtPndDU1NQS0NvdW50OworCQl9CiAgICAgICAgIH0KIAogICAgIH0gZWxzZSBpZiAoKFdMQU5fR0VUX0NBUF9JTkZPX1BSSVZBQ1kocEJTU05vZGUtPndDYXBJbmZvKSAhPSAwKSAmJgpAQCAtNDgyOCwxNyArNDgxNSwxNyBAQAogICAgICAgICAgICAgYnlNdWx0aWNhc3RDaXBoZXIgPSBLRVlfQ1RMX0lOVkFMSUQ7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBjaGVjayBQYWlyd2lzZSBLZXkgQ2lwaGVyCi0gICAgICAgIGZvcihpPTA7aTxwQlNTTm9kZS0+d1BLQ291bnQ7aSsrKSB7Ci0gICAgICAgICAgICBpZiAocEJTU05vZGUtPmFieVBLVHlwZVtpXSA9PSBXUEFfVEtJUCkgewotICAgICAgICAgICAgICAgIGJ5Q2lwaGVyTWFzayB8PSAweDAyOwotICAgICAgICAgICAgfSBlbHNlIGlmIChwQlNTTm9kZS0+YWJ5UEtUeXBlW2ldID09IFdQQV9BRVNDQ01QKSB7Ci0gICAgICAgICAgICAgICAgYnlDaXBoZXJNYXNrIHw9IDB4MDQ7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHBCU1NOb2RlLT5hYnlQS1R5cGVbaV0gPT0gV1BBX05PTkUpIHsKLSAgICAgICAgICAgICAgICAvLyB1c2UgZ3JvdXAga2V5IG9ubHkgaWdub3JlIGFsbCBvdGhlcnMKLSAgICAgICAgICAgICAgICBieUNpcGhlck1hc2sgPSAwOwotICAgICAgICAgICAgICAgIGkgPSBwQlNTTm9kZS0+d1BLQ291bnQ7Ci0gICAgICAgICAgICB9CisJLyogY2hlY2sgUGFpcndpc2UgS2V5IENpcGhlciAqLworCWZvciAoaSA9IDA7IGkgPCBwQlNTTm9kZS0+d1BLQ291bnQ7IGkrKykgeworCQlpZiAocEJTU05vZGUtPmFieVBLVHlwZVtpXSA9PSBXUEFfVEtJUCkgeworCQkJYnlDaXBoZXJNYXNrIHw9IDB4MDI7CisJCX0gZWxzZSBpZiAocEJTU05vZGUtPmFieVBLVHlwZVtpXSA9PSBXUEFfQUVTQ0NNUCkgeworCQkJYnlDaXBoZXJNYXNrIHw9IDB4MDQ7CisJCX0gZWxzZSBpZiAocEJTU05vZGUtPmFieVBLVHlwZVtpXSA9PSBXUEFfTk9ORSkgeworCQkJLyogdXNlIGdyb3VwIGtleSBvbmx5IGlnbm9yZSBhbGwgb3RoZXJzICovCisJCQlieUNpcGhlck1hc2sgPSAwOworCQkJaSA9IHBCU1NOb2RlLT53UEtDb3VudDsKKwkJfQogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3dtZ3IuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd21nci5oCmluZGV4IDFlNWI5MTYuLjY4Mzg0MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd21nci5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd21nci5oCkBAIC04Miw3ICs4Miw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgVHlwZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvL21pa2UgZGVmaW5lOiBtYWtlIHRpbWVyICB0byBleHBpcmUgYWZ0ZXIgZGVzaXJlZCB0aW1lcwotI2RlZmluZSB0aW1lcl9leHBpcmUodGltZXIsbmV4dF90aWNrKSAgIG1vZF90aW1lcigmdGltZXIsIFJVTl9BVChuZXh0X3RpY2spKQorI2RlZmluZSB0aW1lcl9leHBpcmUodGltZXIsIG5leHRfdGljaykgbW9kX3RpbWVyKCZ0aW1lciwgUlVOX0FUKG5leHRfdGljaykpCiAKIHR5cGVkZWYgdm9pZCAoKlRpbWVyRnVuY3Rpb24pKHVuc2lnbmVkIGxvbmcpOwogCkBAIC0yNTksOSArMjU5LDcgQEAKICAgICAvLyBPcGVyYXRpb24gc3RhdGUgdmFyaWFibGVzCiAgICAgV01BQ19DVVJSRU5UX01PREUgICAgICAgZUN1cnJNb2RlOyAgIC8vIE1BQyBjdXJyZW50IGNvbm5lY3Rpb24gbW9kZQogICAgIFdNQUNfQlNTX1NUQVRFICAgICAgICAgIGVDdXJyU3RhdGU7ICAvLyBNQUMgY3VycmVudCBCU1Mgc3RhdGUKLSAgICAjaWZkZWYgU25kRXZ0X1RvQVBJCiAgICAgV01BQ19CU1NfU1RBVEUgICAgICAgICAgZUxhc3RTdGF0ZTsgIC8vIE1BQyBsYXN0IEJTUyBzdGF0ZQotICAgICNlbmRpZgogCiAgICAgUEtub3duQlNTICAgICAgICAgICAgICAgcEN1cnJCU1M7CiAgICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlDU1NHSzsKQEAgLTI5MywxMCArMjkxLDcgQEAKICAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlEZXNpcmVCU1NJRFtXTEFOX0JTU0lEX0xFTl07CiAKIC8vcmVzdG9yZSBCU1MgaW5mbyBmb3IgQWQtSG9jIG1vZGUKLS8vMjAwODAxMzEtMDUsPEFkZD4gYnkgTWlrZSBMaXUKLSNpZmRlZiBBZGhvY19TVEEKICAgICAgQllURSAgICAgICAgICAgICAgICAgICAgYWJ5QWRIb2NTU0lEW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9TU0lEX01BWExFTiArIDFdOwotI2VuZGlmCiAKICAgICAvLyBBZGhvYyBvciBBUCBjb25maWd1cmF0aW9uIHZhcnMKICAgICBXT1JEICAgICAgICAgICAgICAgICAgICB3SUJTU0JlYWNvblBlcmlvZDsKQEAgLTM0MywxMSArMzM4LDExIEBACiAgICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYlJ4QmVhY29uSW5UQlRUV2FrZTsKICAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlQU1R4TWFwW01BWF9OT0RFX05VTSArIDFdOwogCi0gICAgLy8gbWFuYWdtZW50IGNvbW1hbmQgcmVsYXRlZAorICAgIC8vIG1hbmFnZW1lbnQgY29tbWFuZCByZWxhdGVkCiAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICB1Q21kQnVzeTsKICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgIHVDbWRIb3N0QVBCdXN5OwogCi0gICAgLy8gbWFuYWdtZW50IHBhY2tldCBwb29sCisgICAgLy8gbWFuYWdlbWVudCBwYWNrZXQgcG9vbAogICAgIFBCWVRFICAgICAgICAgICAgICAgICAgIHBieU1nbXRQYWNrZXRQb29sOwogICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGJ5TWdtdFBhY2tldFBvb2xbc2l6ZW9mKFNUeE1nbXRQYWNrZXQpICsgV0xBTl9BM0ZSX01BWExFTl07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd3BhLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3dwYS5jCmluZGV4IDFmYTZjOWIuLmY0OTI3NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd3BhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93cGEuYwpAQCAtMTQ4LDcgKzE0OCw4IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIGogPSAwOwogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJ3UEtDb3VudDogJWQsIHNpemVvZihwQlNTTGlzdC0+YWJ5UEtUeXBlKTogJXp1XG4iLCBwUlNOLT53UEtDb3VudCwgc2l6ZW9mKHBCU1NMaXN0LT5hYnlQS1R5cGUpKTsKLSAgICAgICAgICAgIGZvcihpID0gMDsgKGkgPCBwUlNOLT53UEtDb3VudCkgJiYgKGogPCBzaXplb2YocEJTU0xpc3QtPmFieVBLVHlwZSkvc2l6ZW9mKEJZVEUpKTsgaSsrKSB7CisJICAgIGZvciAoaSA9IDA7IChpIDwgcFJTTi0+d1BLQ291bnQpICYmCisJCSAgIChqIDwgc2l6ZW9mKHBCU1NMaXN0LT5hYnlQS1R5cGUpL3NpemVvZihCWVRFKSk7IGkrKykgewogICAgICAgICAgICAgICAgIGlmKHBSU04tPmxlbiA+PSAxMitpKjQrNCkgeyAvL291aTEoNCkrdmVyKDIpK0dLUyg0KStQS1NDbnQoMikrUEtTKDQqaSkKICAgICAgICAgICAgICAgICAgICAgaWYgKCAhbWVtY21wKHBSU04tPlBLU0xpc3RbaV0uYWJ5T1VJLCBhYnlPVUkwMCwgNCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBwQlNTTGlzdC0+YWJ5UEtUeXBlW2orK10gPSBXUEFfTk9ORTsKQEAgLTE4MCw3ICsxODEsOCBAQAogICAgICAgICAgICAgaiA9IDA7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIndBdXRoQ291bnQ6ICVkLCBzaXplb2YocEJTU0xpc3QtPmFieUF1dGhUeXBlKTogJXp1XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICBwSUVfUlNOX0F1dGgtPndBdXRoQ291bnQsIHNpemVvZihwQlNTTGlzdC0+YWJ5QXV0aFR5cGUpKTsKLSAgICAgICAgICAgIGZvcihpID0gMDsgKGkgPCBwSUVfUlNOX0F1dGgtPndBdXRoQ291bnQpICYmIChqIDwgc2l6ZW9mKHBCU1NMaXN0LT5hYnlBdXRoVHlwZSkvc2l6ZW9mKEJZVEUpKTsgaSsrKSB7CisJICAgIGZvciAoaSA9IDA7IChpIDwgcElFX1JTTl9BdXRoLT53QXV0aENvdW50KSAmJgorCQkgICAoaiA8IHNpemVvZihwQlNTTGlzdC0+YWJ5QXV0aFR5cGUpL3NpemVvZihCWVRFKSk7IGkrKykgewogICAgICAgICAgICAgICAgIGlmKHBSU04tPmxlbiA+PSAxNCs0KyhtK2kpKjQpIHsgLy9vdWkxKDQpK3ZlcigyKStHS1MoNCkrUEtTQ250KDIpK1BLUyg0Km0pK0FLQygyKStBS1MoNCppKQogICAgICAgICAgICAgICAgICAgICBpZiAoICFtZW1jbXAocElFX1JTTl9BdXRoLT5BdXRoS1NMaXN0W2ldLmFieU9VSSwgYWJ5T1VJMDEsIDQpKQogICAgICAgICAgICAgICAgICAgICAgICAgcEJTU0xpc3QtPmFieUF1dGhUeXBlW2orK10gPSBXUEFfQVVUSF9JRUVFODAyXzFYOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93cGEyLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3dwYTIuaAppbmRleCA0MjlhOTEwLi40NmMyOTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3dwYTIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3dwYTIuaApAQCAtNTgsMjEgKzU4LDkgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotdm9pZAotV1BBMl9DbGVhclJTTiAoCi0gICAgIFBLbm93bkJTUyAgICAgICAgcEJTU05vZGUKLSAgICApOwordm9pZCBXUEEyX0NsZWFyUlNOKFBLbm93bkJTUyBwQlNTTm9kZSk7Cit2b2lkIFdQQTJ2UGFyc2VSU04oUEtub3duQlNTIHBCU1NOb2RlLCBQV0xBTl9JRV9SU04gcFJTTik7CiAKLXZvaWQKLVdQQTJ2UGFyc2VSU04gKAotICAgICBQS25vd25CU1MgICAgICAgIHBCU1NOb2RlLAotICAgICBQV0xBTl9JRV9SU04gICAgIHBSU04KLSAgICApOwotCi11bnNpZ25lZCBpbnQKLVdQQTJ1U2V0SUVzKAotCXZvaWQgKnBNZ210SGFuZGxlLAotICAgICBQV0xBTl9JRV9SU04gcFJTTklFcwotICAgICk7Cit1bnNpZ25lZCBpbnQgV1BBMnVTZXRJRXModm9pZCAqcE1nbXRIYW5kbGUsIFBXTEFOX0lFX1JTTiBwUlNOSUVzKTsKIAogI2VuZGlmIC8qIF9fV1BBMl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd3BhY3RsLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3dwYWN0bC5jCmluZGV4IDk2MWY1ODMuLmI0MDdhZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd3BhY3RsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93cGFjdGwuYwpAQCAtMTg2LDcgKzE4Niw2IEBACiAJCXJldHVybiB3cGFfcmVsZWFzZV93cGFkZXYocERldmljZSk7CiB9CiAKLQogLyoKICAqIERlc2NyaXB0aW9uOgogICogICAgICBTZXQgV1BBIGFsZ29yaXRobSAmIGtleXMKQEAgLTM0OSw5ICszNDgsOCBAQAogICAgICAgICByZXR1cm4gLUVJTlZBTDsKICAgICB9CiAKLQotICAgIGlmIChJU19CUk9BRENBU1RfQUREUkVTUygmcGFyYW0tPmFkZHJbMF0pIHx8IChwYXJhbS0+YWRkciA9PSBOVUxMKSkgewotICAgICAgICAvLyBJZiBJU19CUk9BRENBU1RfQUREUkVTUywgc2V0IHRoZSBrZXkgYXMgZXZlcnkga2V5IGVudHJ5J3MgZ3JvdXAga2V5LgorICAgIGlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcigmcGFyYW0tPmFkZHJbMF0pIHx8IChwYXJhbS0+YWRkciA9PSBOVUxMKSkgeworCS8qIGlmIGJyb2FkY2FzdCwgc2V0IHRoZSBrZXkgYXMgZXZlcnkga2V5IGVudHJ5J3MgZ3JvdXAga2V5ICovCiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkdyb3VwZSBLZXkgQXNzaWduLlxuIik7CiAKICAgICAgICAgaWYgKChLZXliU2V0QWxsR3JvdXBLZXkocERldmljZSwKQEAgLTQwNCw3ICs0MDIsNyBAQAogCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBLZXkgVGFibGUgRnVsbAotICAgICAgICAgICAgaWYgKElTX0VUSF9BRERSRVNTX0VRVUFMKCZwYXJhbS0+YWRkclswXSwgcERldmljZS0+YWJ5QlNTSUQpKSB7CisJICAgIGlmICghY29tcGFyZV9ldGhlcl9hZGRyKCZwYXJhbS0+YWRkclswXSwgcERldmljZS0+YWJ5QlNTSUQpKSB7CiAgICAgICAgICAgICAgICAgLy9EQkdfUFJOX1dMQU4wMygoInJldHVybiBORElTX1NUQVRVU19JTlZBTElEX0RBVEEgLUtleSBUYWJsZSBGdWxsLjJcbiIpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKIApAQCAtNjQ3LDkgKzY0NSw5IEBACiAKICAgICBmb3IgKGlpID0gMDsgaWkgPCBNQVhfQlNTX05VTTsgaWkrKykgewogCi0gICAgICAgICBmb3Ioamo9MDtqajxNQVhfQlNTX05VTS1paS0xO2pqKyspIHsKKwlmb3IgKGpqID0gMDsgamogPCBNQVhfQlNTX05VTSAtIGlpIC0gMTsgamorKykgewogCi0gICAgICAgICAgIGlmKChwTWdtdC0+c0JTU0xpc3RbampdLmJBY3RpdmUhPVRSVUUpIHx8CisJCWlmICgocE1nbXQtPnNCU1NMaXN0W2pqXS5iQWN0aXZlICE9IFRSVUUpIHx8CiAKICAgICAgICAgICAgICAgICAoKHBNZ210LT5zQlNTTGlzdFtqal0udVJTU0k+cE1nbXQtPnNCU1NMaXN0W2pqKzFdLnVSU1NJKSAmJihwTWdtdC0+c0JTU0xpc3RbamorMV0uYkFjdGl2ZSE9RkFMU0UpKSkgewogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tYWNfc3RydWN0dXJlcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWFjX3N0cnVjdHVyZXMuaAppbmRleCA3NDQxMDE1Li40MTUyNTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tYWNfc3RydWN0dXJlcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21hY19zdHJ1Y3R1cmVzLmgKQEAgLTQxLDggKzQxLDEwIEBACiAjZGVmaW5lIERPVF8xMV9NQUNfSEVBREVSX1NJWkUJCTI0CiAjZGVmaW5lIERPVF8xMV9TTkFQX1NJWkUJCQk2CiAjZGVmaW5lIERPVF8xMV9EVVJBVElPTl9PRkZTRVQJCTIKLSNkZWZpbmUgRE9UXzExX1NFUVVFTkNFX09GRlNFVAkJMjIgLyogU2VxdWVuY2UgY29udHJvbCBvZmZzZXQgKi8KLSNkZWZpbmUgRE9UXzExX1RZUEVfT0ZGU0VUCQkJMzAgLyogVGhlIHN0YXJ0IG9mZnNldCBvZiA4MDIuMTEgRnJhbWUvLyAqLworLyogU2VxdWVuY2UgY29udHJvbCBvZmZzZXQgKi8KKyNkZWZpbmUgRE9UXzExX1NFUVVFTkNFX09GRlNFVAkJMjIKKy8qIFRoZSBzdGFydCBvZmZzZXQgb2YgODAyLjExIEZyYW1lLy8gKi8KKyNkZWZpbmUgRE9UXzExX1RZUEVfT0ZGU0VUCQkJMzAKICNkZWZpbmUgRE9UXzExX0RBVEFfT0ZGU0VUICAgICAgICAgIDI0CiAjZGVmaW5lIERPVF8xMV9EQV9PRkZTRVQJCQk0CiAjZGVmaW5lIERPVF8zX1RZUEVfQVJQCQkJCTB4ODBGMwpAQCAtOTgsMjggKzEwMCwyOCBAQAogI2RlZmluZSBFTEVNRU5UX0lEX0NGX1BBUkFNRVRFUl9TRVQgICAgICAgICA0CiAjZGVmaW5lIEVMRU1FTlRfSURfVElNICAgICAgICAgICAgICAgICAgICAgIDUKICNkZWZpbmUgRUxFTUVOVF9JRF9JQlNTX1BBUkFNRVRFUl9TRVQgICAgICAgNgotLy8gN34xNSByZXNlcnZlcmQKKy8qIDd+MTUgcmVzZXJ2ZXJkICovCiAjZGVmaW5lIEVMRU1FTlRfSURfQ0hBTExFTkdFX1RFWFQgICAgICAgICAgIDE2Ci0vLyAxN34zMSByZXNlcnZlZCBmb3IgY2hhbGxlbmdlIHRleHQgZXh0ZW5zaW9uCi0vLyAzMn4yNTUgcmVzZXJ2ZWQKLS8vLS0gIDExRyAgLS0KKy8qIDE3fjMxIHJlc2VydmVkIGZvciBjaGFsbGVuZ2UgdGV4dCBleHRlbnNpb24gKi8KKy8qIDMyfjI1NSByZXNlcnZlZCAqLworLyotLSAgMTFHICAtLSAqLwogI2RlZmluZSBFTEVNRU5UX0lEX0VSUF9JTkZPUk1BVElPTgkJCTQyCiAjZGVmaW5lIEVMRU1FTlRfSURfRVhURU5ERURfU1VQUE9SVEVEX1JBVEVTIDUwCiAKLS8vLS0gIFdQQSAgLS0KKy8qIC0tICBXUEEgIC0tICovCiAKICNkZWZpbmUgRUxFTUVOVF9JRF9SU05fV1BBCQkJCQkyMjEKICNpZmRlZiBfV1BBMl8KICNkZWZpbmUgRUxFTUVOVF9JRF9SU05fV1BBMgkJCQkgICAgNDgKLSNlbmRpZiAvL2VuZGlmIFdQQTIKKyNlbmRpZiAvKiBlbmRpZiBXUEEyICovCiAKICNkZWZpbmUgV0xBTl9NQVhfUEFJUldJU0VfQ0lQSEVSX1NVSVRFX0NPVU5UICAgICgodTE2KSA2KQogI2RlZmluZSBXTEFOX01BWF9BVVRIX0tFWV9NR1RfU1VJVEVfTElTVF9DT1VOVCAgKCh1MTYpIDIpCiAKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gIFJlYXNvbiBDb2RlIChUYWJsZSAxOCk6IGluZGljYXRlIHRoZSByZWFzb24gb2YgRGlzQXNzb2MsIERlQXV0aGVuCi0vLyAgbGVuZ3RoIG9mIFJlYXNvbkNvZGUgaXMgMiBPY3RzLgotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqICBSZWFzb24gQ29kZSAoVGFibGUgMTgpOiBpbmRpY2F0ZSB0aGUgcmVhc29uIG9mIERpc0Fzc29jLCBEZUF1dGhlbgorKiAgbGVuZ3RoIG9mIFJlYXNvbkNvZGUgaXMgMiBPY3RzLgorKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAjZGVmaW5lIFJFQVNPTl9SRUFTRVJFRCAgICAgICAgICAgICAwCiAjZGVmaW5lIFJFQVNPTl9VTlNQRUNJRElFRCAgICAgICAgICAxCiAjZGVmaW5lIFJFQVNPTl9QUkVBVVRIX0lOVkFMSUQgICAgICAyCkBAIC0zODUsOSArMzg3LDExIEBACiAjaWZkZWYgX1dQQTJfCiAjZGVmaW5lIFZFUlNJT05fV1BBMiAgICAgICAgICAgIDEKICNlbmRpZiAvKiBlbmQgZGVmICBfV1BBMl8gKi8KLSNkZWZpbmUgT1VJX1dQQQkJCQkJMHgwMEYyNTAwMAkvKiBXUEEyLjAgT1VJPTAwOjUwOkYyLCB0aGUgTVNCIGlzIHJlc2VydmVkIGZvciBzdWl0ZSB0eXBlICovCisvKiBXUEEyLjAgT1VJPTAwOjUwOkYyLCB0aGUgTVNCIGlzIHJlc2VydmVkIGZvciBzdWl0ZSB0eXBlICovCisjZGVmaW5lIE9VSV9XUEEJCQkJCTB4MDBGMjUwMDAKICNpZmRlZiBfV1BBMl8KLSNkZWZpbmUgT1VJX1dQQTIJCQkJMHgwMEFDMEYwMAkvKiBmb3Igd3BhMiBjaGFuZ2UgdG8gMHgwMEFDT0YwNCBieSBXcyAyNi8wNC8wNCAqLworLyogZm9yIHdwYTIgY2hhbmdlIHRvIDB4MDBBQ09GMDQgYnkgV3MgMjYvMDQvMDQgKi8KKyNkZWZpbmUgT1VJX1dQQTIJCQkJMHgwMEFDMEYwMAogI2VuZGlmIC8qIGVuZCBkZWYgX1dQQTJfICovCiAKICNkZWZpbmUgT1VJX1dQQV9BRERJVElPTkFMCQkweDAxCkBAIC00MDAsOCArNDA0LDggQEAKIAogI2RlZmluZSBXUEFfT1VJX0JJRyAgICAoKHUzMikgMHgwMUYyNTAwMCkvKiBhZGRlZCBieSB3cyAwOS8yMy8wNCAqLwogI2RlZmluZSBXUEFfT1VJX0xJVFRMRSAgKCh1MzIpIDB4MDFGMjUwMDEpLyogYWRkZWQgYnkgd3MgMDkvMjMvMDQgKi8KLQotI2RlZmluZSBXUEFfV1BTX09VSQkJCQljcHVfdG9fbGUzMigweDA0RjI1MDAwKSAvKiAyMDA2MTEwOCBGb3IgV1BTLiBJdCdzIGxpdHRsZSBlbmRpYW4uIEJpZyBlbmRpYW4gaXMgMHgwMDUwRjIwNCAqLworLyogMjAwNjExMDggRm9yIFdQUy4gSXQncyBsaXR0bGUgZW5kaWFuLiBCaWcgZW5kaWFuIGlzIDB4MDA1MEYyMDQgKi8KKyNkZWZpbmUgV1BBX1dQU19PVUkJCQkJY3B1X3RvX2xlMzIoMHgwNEYyNTAwMCkKIAogLyogLS0tLS1XUEEyLS0tLS0gKi8KICNpZmRlZiBfV1BBMl8KQEAgLTQyMCw3NSArNDI0LDY1IEBACiAjZGVmaW5lIE9VSV9DSVBIRVJfQ0NNUAkJCQkweDA0CiAjZGVmaW5lIE9VSV9DSVBIRVJfV0VQXzEwNAkJCTB4MDUKIAotc3RydWN0IHN1aXRlX3NlbGVjdG9yCi17Ci0JdW5pb24KLQl7CitzdHJ1Y3Qgc3VpdGVfc2VsZWN0b3J7CisJdW5pb257CiAJCXU4CVZhbHVlWzRdOwotCQlzdHJ1Y3QgX1NVSVRfCi0JCXsKKwkJc3RydWN0IF9TVUlUXyB7CiAJCQl1OAlPVUlbM107CiAJCQl1OAlUeXBlOwotCQl9U3VpdFNlbGVjdG9yOworCQl9IFN1aXRTZWxlY3RvcjsKIAl9OwogfTsKIAotLy8tLSAgV1BBICAtLQotc3RydWN0CVJTTl9JbmZvcm1hdGlvbl9FbGVtZW50Ci17CisvKiAtLSAgV1BBICAtLSAqLworc3RydWN0CVJTTl9JbmZvcm1hdGlvbl9FbGVtZW50ewogCXU4CQkJCQlFbGVtZW50X0lEOwogCXU4CQkJCQlMZW5ndGg7Ci0Jc3RydWN0IHN1aXRlX3NlbGVjdG9yCU91aVdQQUFkZGl0aW9uYWw7IC8qIFdQQSB2ZXJzaW9uIDIuMCBhZGRpdGlvbmFsIGZpZWxkLCBhbmQgc2hvdWxkIGJlIDAwOjUwOkYyOjAxICovCisgLyogV1BBIHZlcnNpb24gMi4wIGFkZGl0aW9uYWwgZmllbGQsIGFuZCBzaG91bGQgYmUgMDA6NTA6RjI6MDEgKi8KKwlzdHJ1Y3Qgc3VpdGVfc2VsZWN0b3IJT3VpV1BBQWRkaXRpb25hbDsKIAl1MTYJCQkJCVZlcnNpb247CiAJc3RydWN0IHN1aXRlX3NlbGVjdG9yCQlHcm91cEtleVN1aXRlOwogCXUxNgkJCQkJUGFpcndpc2VLZXlTdWl0ZUNvdW50OwogCXN0cnVjdCBzdWl0ZV9zZWxlY3RvcgkJUGFpcndpc2VLZXlTdWl0ZVsxXTsKLX1fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci1zdHJ1Y3QgUlNOX0F1dGhfU3ViX0luZm9ybWF0aW9uX0VsZW1lbnQKLXsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworc3RydWN0IFJTTl9BdXRoX1N1Yl9JbmZvcm1hdGlvbl9FbGVtZW50IHsKIAl1MTYJCQkJQXV0aEtleU1uZ3RTdWl0ZUNvdW50OwogCXN0cnVjdCBzdWl0ZV9zZWxlY3RvcglBdXRoS2V5TW5ndFN1aXRlWzFdOwotfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiAtLSAgV1BBMiAgLS0gKi8KLXN0cnVjdCBSU05fQ2FwYWJpbGl0eV9FbGVtZW50Ci17Ci0gIHVuaW9uCi0gIHsKK3N0cnVjdCBSU05fQ2FwYWJpbGl0eV9FbGVtZW50IHsKKyAgdW5pb24gewogCXUxNglfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkJd1ZhbHVlOwogICAgICNpZmRlZiBfQklHX0VORElBTl8JIC8qIDIwMDYwOTI3IGFkZCBieSBhbnNvbidzIGVuZGlhbiAqLwotICAgIHN0cnVjdCBfUlNOX0NhcGFiaWxpdHkKLSAgICB7Ci0gICAgCXUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgUmVzZXJ2ZWQyIDogODsgLyogMjAwNTEyMDEgKi8KLQl1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIFJlc2VydmVkMSA6IDI7Ci0JdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBHVEtfUmVwbGF5X0NvdW50ZXIgOiAyOwotCXUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgUFRLX1JlcGxheV9Db3VudGVyIDogMjsKLQl1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIE5vX1BhaXJ3aXNlIDogMTsKLSAgICAgICAgdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBQcmVfQXV0aCA6IDE7Ci0gICAgfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgUlNOX0NhcGFiaWxpdHk7CisgICAgc3RydWN0IF9SU05fQ2FwYWJpbGl0eSB7CisJdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBSZXNlcnZlZDI6ODsgLyogMjAwNTEyMDEgKi8KKwl1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIFJlc2VydmVkMToyOworCXUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgR1RLX1JlcGxheV9Db3VudGVyOjI7CisJdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBQVEtfUmVwbGF5X0NvdW50ZXI6MjsKKwl1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIE5vX1BhaXJ3aXNlOjE7CisJdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBQcmVfQXV0aDoxOworICAgIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBSU05fQ2FwYWJpbGl0eTsKICAgICAjZWxzZQotICAgIHN0cnVjdCBfUlNOX0NhcGFiaWxpdHkKLSAgICB7Ci0gICAgICAgIHUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgUHJlX0F1dGggOiAxOwotICAgICAgICB1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIE5vX1BhaXJ3aXNlIDogMTsKLSAgICAgICAgdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBQVEtfUmVwbGF5X0NvdW50ZXIgOiAyOwotCSAgICB1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIEdUS19SZXBsYXlfQ291bnRlciA6IDI7Ci0JICAgIHUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgUmVzZXJ2ZWQxIDogMjsKLQkgICAgdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBSZXNlcnZlZDIgOiA4OyAvKiAyMDA1MTIwMSAqLwotICAgIH1fX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIFJTTl9DYXBhYmlsaXR5OworICAgIHN0cnVjdCBfUlNOX0NhcGFiaWxpdHkgeworCXUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgUHJlX0F1dGg6MTsKKwl1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIE5vX1BhaXJ3aXNlOjE7CisJdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBQVEtfUmVwbGF5X0NvdW50ZXI6MjsKKwl1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIEdUS19SZXBsYXlfQ291bnRlcjoyOworCXUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgUmVzZXJ2ZWQxOjI7CisJdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBSZXNlcnZlZDI6ODsgLyogMjAwNTEyMDEgKi8KKyAgICB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgUlNOX0NhcGFiaWxpdHk7CiAgICAgI2VuZGlmCiAKLSAgfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKSA7Ci19X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIDsKKyAgfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgOwogCiAjaWZkZWYgX1dQQTJfCi1zdHJ1Y3QgcG1raWQKLXsKK3N0cnVjdCBwbWtpZCB7CiAgIHU4IHBWYWx1ZVsxNl07CiB9OwogCi1zdHJ1Y3QJV1BBMl9SU05fSW5mb3JtYXRpb25fRWxlbWVudAoteworc3RydWN0CVdQQTJfUlNOX0luZm9ybWF0aW9uX0VsZW1lbnQgewogCXU4CQkJCQlFbGVtZW50X0lEOwogCXU4CQkJCQlMZW5ndGg7CiAJdTE2CQkJCQlWZXJzaW9uOwpAQCAtNDk2LDI5ICs0OTAsMjggQEAKIAl1MTYJCQkJCVBhaXJ3aXNlS2V5U3VpdGVDb3VudDsKIAlzdHJ1Y3Qgc3VpdGVfc2VsZWN0b3IJCVBhaXJ3aXNlS2V5U3VpdGVbMV07CiAKLX1fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotc3RydWN0IFdQQTJfUlNOX0F1dGhfU3ViX0luZm9ybWF0aW9uX0VsZW1lbnQKLXsKK3N0cnVjdCBXUEEyX1JTTl9BdXRoX1N1Yl9JbmZvcm1hdGlvbl9FbGVtZW50IHsKIAl1MTYJCQkJQXV0aEtleU1uZ3RTdWl0ZUNvdW50OwogCXN0cnVjdCBzdWl0ZV9zZWxlY3RvcglBdXRoS2V5TW5ndFN1aXRlWzFdOwotfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAKLXN0cnVjdCBQTUtJRF9JbmZvcm1hdGlvbl9FbGVtZW50Ci17CitzdHJ1Y3QgUE1LSURfSW5mb3JtYXRpb25fRWxlbWVudCB7CiAJdTE2CQkJCVBNS0lEX0NvdW50OwogCXN0cnVjdCBwbWtpZCBwbWtpZFsxNl07Ci19X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKICNlbmRpZiAvKiBlbmRkZWYgX1dQQTJfICovCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8gTUFDIEZyYW1lIHN0cnVjdHVyZSAoZGlmZmVyZW50IHR5cGUpIGFuZCBzdWJmaWVsZCBzdHJ1Y3R1cmUKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0cnVjdCBNQUNfZnJhbWVfY29udHJvbAotewotICAgIHU4ICAgIG1hY19mcmFtZV9pbmZvOyAvKiBhIGNvbWJpbmF0aW9uIG9mIHRoZSBbUHJvdG9jb2wgVmVyc2lvbiwgQ29udHJvbCBUeXBlLCBDb250cm9sIFN1YnR5cGVdKi8KLSAgICAjaWZkZWYgX0JJR19FTkRJQU5fIC8qIDIwMDYwOTI3IGFkZCBieSBhbnNvbidzIGVuZGlhbiAqLworc3RydWN0IE1BQ19mcmFtZV9jb250cm9sIHsKKy8qIGEgY29tYmluYXRpb24gb2YgdGhlIFtQcm90b2NvbCBWZXJzaW9uLCBDb250cm9sIFR5cGUsIENvbnRyb2wgU3VidHlwZV0qLworICAgIHU4ICAgIG1hY19mcmFtZV9pbmZvOworLyogMjAwNjA5MjcgYWRkIGJ5IGFuc29uJ3MgZW5kaWFuICovCisgICAgI2lmZGVmIF9CSUdfRU5ESUFOXwogICAgIHU4ICAgIG9yZGVyOjE7CiAgICAgdTggICAgV0VQOjE7CiAgICAgdTggICAgbW9yZV9kYXRhOjE7CkBAIC01NDAsNyArNTMzLDggQEAKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgTWFuYWdlbWVudF9GcmFtZSB7Ci0gICAgc3RydWN0IE1BQ19mcmFtZV9jb250cm9sIGZyYW1lX2NvbnRyb2w7IC8qIDJCLCBUb0RTLEZyb21EUyxNb3JlRnJhZyxNb3JlRGF0YSxPcmRlcj0wICovCisvKiAyQiwgVG9EUyxGcm9tRFMsTW9yZUZyYWcsTW9yZURhdGEsT3JkZXI9MCAqLworICAgIHN0cnVjdCBNQUNfZnJhbWVfY29udHJvbCBmcmFtZV9jb250cm9sOwogICAgIHUxNgkJZHVyYXRpb247CiAgICAgdTgJCURBW01BQ19BRERSX0xFTkdUSF07CQkJLyogQWRkcjEgKi8KICAgICB1OAkJU0FbTUFDX0FERFJfTEVOR1RIXTsJCQkvKiBBZGRyMiAqLwpAQCAtNTUyLDcgKzU0Niw4IEBACiAKIC8qIFNXLU1BQyBkb24ndCBUeC9SeCBDb250cm9sLUZyYW1lLCBIVy1NQUMgZG8gaXQuICovCiBzdHJ1Y3QgQ29udHJvbF9GcmFtZSB7Ci0gICAgc3RydWN0IE1BQ19mcmFtZV9jb250cm9sIGZyYW1lX2NvbnRyb2w7IC8qIFRvRFMsRnJvbURTLE1vcmVGcmFnLFJldHJ5LE1vcmVEYXRhLFdFUCxPcmRlcj0wICovCisvKiBUb0RTLEZyb21EUyxNb3JlRnJhZyxSZXRyeSxNb3JlRGF0YSxXRVAsT3JkZXI9MCAqLworICAgIHN0cnVjdCBNQUNfZnJhbWVfY29udHJvbCBmcmFtZV9jb250cm9sOwogICAgIHUxNgkJZHVyYXRpb247CiAgICAgdTgJCVJBW01BQ19BRERSX0xFTkdUSF07CiAgICAgdTgJCVRBW01BQ19BRERSX0xFTkdUSF07CkBAIC02MjcsOCArNjIyLDkgQEAKICAgICB1MTYgICAgYWxnb3JpdGhtTnVtYmVyOwogICAgIHUxNiAgICBzZXF1ZW5jZU51bWJlcjsKICAgICB1MTYgICAgc3RhdHVzQ29kZTsKLSAgICAvKiBOQjogZG9uJ3QgaW5jbHVkZSBDaGFsbGVuZ2VUZXh0IGluIHRoaXMgc3RydWN0dXJlCi0JLy8gc3RydWN0IENoYWxsZW5nZV9UZXh0X0VsZW1lbnQgc0NoYWxsZW5nZVRleHRFbGVtZW50OyAvLyB3a2NoZW4gYWRkZWQgKi8KKwkvKiBOQjogZG9uJ3QgaW5jbHVkZSBDaGFsbGVuZ2VUZXh0IGluIHRoaXMgc3RydWN0dXJlCisJLy8gc3RydWN0IENoYWxsZW5nZV9UZXh0X0VsZW1lbnQgc0NoYWxsZW5nZVRleHRFbGVtZW50OworCS8vIHdrY2hlbiBhZGRlZCAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcGh5X2NhbGlicmF0aW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9waHlfY2FsaWJyYXRpb24uYwppbmRleCA3ODkzNTg2Li41YzFmMDUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9waHlfY2FsaWJyYXRpb24uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9waHlfY2FsaWJyYXRpb24uYwpAQCAtMTksMjMgKzE5LDI1IEBACiAKIC8qKioqKioqKioqKioqKioqKiogTE9DQUwgQ09OU1RBTlQgQU5EIE1BQ1JPIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKioqKioqLwogI2RlZmluZSBMT09QX1RJTUVTICAgICAgMjAKLSNkZWZpbmUgVVMgICAgICAgICAgICAgIDEwMDAvL01JQ1JPU0VDT05ECisjZGVmaW5lIFVTICAgICAgICAgICAgICAxMDAwLyogTUlDUk9TRUNPTkQqLwogCiAjZGVmaW5lIEFHX0NPTlNUICAgICAgICAwLjYwNzI1MjkzNTAKICNkZWZpbmUgRklYRUQoWCkgICAgICAgICgoczMyKSgoWCkgKiAzMjc2OC4wKSkKICNkZWZpbmUgREVHMlJBRChYKSAgICAgIDAuMDE3NDUzICogKFgpCiAKLXN0YXRpYyBjb25zdCBzMzIgQW5nbGVzW10gPQotewotICAgIEZJWEVEKERFRzJSQUQoNDUuMCkpLCAgICBGSVhFRChERUcyUkFEKDI2LjU2NSkpLCAgRklYRUQoREVHMlJBRCgxNC4wMzYyKSksCi0gICAgRklYRUQoREVHMlJBRCg3LjEyNTAyKSksIEZJWEVEKERFRzJSQUQoMy41NzYzMykpLCBGSVhFRChERUcyUkFEKDEuNzg5OTEpKSwKLSAgICBGSVhFRChERUcyUkFEKDAuODk1MTc0KSksRklYRUQoREVHMlJBRCgwLjQ0NzYxNCkpLEZJWEVEKERFRzJSQUQoMC4yMjM4MTEpKSwKLSAgICBGSVhFRChERUcyUkFEKDAuMTExOTA2KSksRklYRUQoREVHMlJBRCgwLjA1NTk1MykpLEZJWEVEKERFRzJSQUQoMC4wMjc5NzcpKQorc3RhdGljIGNvbnN0IHMzMiBBbmdsZXNbXSA9IHsKKyAgICBGSVhFRChERUcyUkFEKDQ1LjApKSwgICAgIEZJWEVEKERFRzJSQUQoMjYuNTY1KSksICAgRklYRUQoREVHMlJBRCgxNC4wMzYyKSksCisgICAgRklYRUQoREVHMlJBRCg3LjEyNTAyKSksICBGSVhFRChERUcyUkFEKDMuNTc2MzMpKSwgIEZJWEVEKERFRzJSQUQoMS43ODk5MSkpLAorICAgIEZJWEVEKERFRzJSQUQoMC44OTUxNzQpKSwgRklYRUQoREVHMlJBRCgwLjQ0NzYxNCkpLCBGSVhFRChERUcyUkFEKDAuMjIzODExKSksCisgICAgRklYRUQoREVHMlJBRCgwLjExMTkwNikpLCBGSVhFRChERUcyUkFEKDAuMDU1OTUzKSksIEZJWEVEKERFRzJSQUQoMC4wMjc5NzcpKQogfTsKIAogLyoqKioqKioqKioqKioqKioqKiBMT0NBTCBGVU5DVElPTiBERUNMQVJBVElPTiBTRUNUSU9OICoqKioqKioqKioqKioqKioqKioqKiovCi0vL3ZvaWQgICAgX3BoeV9yZl93cml0ZV9kZWxheShzdHJ1Y3QgaHdfZGF0YSAqcGh3X2RhdGEpOwotLy92b2lkICAgIHBoeV9pbml0X3JmKHN0cnVjdCBod19kYXRhICpwaHdfZGF0YSk7CisKKy8qCisgKiB2b2lkICAgIF9waHlfcmZfd3JpdGVfZGVsYXkoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhKTsKKyAqIHZvaWQgICAgcGh5X2luaXRfcmYoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhKTsKKyAqLwogCiAvKioqKioqKioqKioqKioqKioqIEZVTkNUSU9OIERFRklOSVRJT04gU0VDVElPTiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtNDYsOSArNDgsNyBAQAogICAgIHZhbCA9IChkYXRhICYgMHgwRkZGKTsKIAogICAgIGlmICgoZGF0YSAmIEJJVCgxMikpICE9IDApCi0gICAgewogICAgICAgICB2YWwgfD0gMHhGRkZGRjAwMDsKLSAgICB9CiAKICAgICByZXR1cm4gKChzMzIpIHZhbCk7CiB9CkBAIC01OCwxMyArNTgsOSBAQAogICAgIHUzMiAgICAgdmFsOwogCiAgICAgaWYgKGRhdGEgPiA0MDk1KQotICAgIHsKICAgICAgICAgZGF0YSA9IDQwOTU7Ci0gICAgfQogICAgIGVsc2UgaWYgKGRhdGEgPCAtNDA5NikKLSAgICB7CiAgICAgICAgIGRhdGEgPSAtNDA5NjsKLSAgICB9CiAKICAgICB2YWwgPSBkYXRhICYgMHgxRkZGOwogCkBAIC03OSw5ICs3NSw3IEBACiAgICAgdmFsID0gKGRhdGEgJiAweDAwMDcpOwogCiAgICAgaWYgKChkYXRhICYgQklUKDMpKSAhPSAwKQotICAgIHsKICAgICAgICAgdmFsIHw9IDB4RkZGRkZGRjg7Ci0gICAgfQogCiAgICAgcmV0dXJuIHZhbDsKIH0KQEAgLTkxLDEzICs4NSw5IEBACiAgICAgdTMyICAgICB2YWw7CiAKICAgICBpZiAoZGF0YSA+IDcpCi0gICAgewogICAgICAgICBkYXRhID0gNzsKLSAgICB9CiAgICAgZWxzZSBpZiAoZGF0YSA8IC04KQotICAgIHsKICAgICAgICAgZGF0YSA9IC04OwotICAgIH0KIAogICAgIHZhbCA9IGRhdGEgJiAweDAwMEY7CiAKQEAgLTExMiw5ICsxMDIsNyBAQAogICAgIHZhbCA9IChkYXRhICYgMHgwMDBGKTsKIAogICAgIGlmICgoZGF0YSAmIEJJVCg0KSkgIT0gMCkKLSAgICB7CiAgICAgICAgIHZhbCB8PSAweEZGRkZGRkYwOwotICAgIH0KIAogICAgIHJldHVybiB2YWw7CiB9CkBAIC0xMjQsMTMgKzExMiw5IEBACiAgICAgdTMyICAgICB2YWw7CiAKICAgICBpZiAoZGF0YSA+IDE1KQotICAgIHsKICAgICAgICAgZGF0YSA9IDE1OwotICAgIH0KICAgICBlbHNlIGlmIChkYXRhIDwgLTE2KQotICAgIHsKICAgICAgICAgZGF0YSA9IC0xNjsKLSAgICB9CiAKICAgICB2YWwgPSBkYXRhICYgMHgwMDFGOwogCkBAIC0xNDUsOSArMTI5LDcgQEAKICAgICB2YWwgPSAoZGF0YSAmIDB4MDAxRik7CiAKICAgICBpZiAoKGRhdGEgJiBCSVQoNSkpICE9IDApCi0gICAgewogICAgICAgICB2YWwgfD0gMHhGRkZGRkZFMDsKLSAgICB9CiAKICAgICByZXR1cm4gdmFsOwogfQpAQCAtMTU3LDEzICsxMzksOSBAQAogICAgIHUzMiAgICAgdmFsOwogCiAgICAgaWYgKGRhdGEgPiAzMSkKLSAgICB7CiAgICAgICAgIGRhdGEgPSAzMTsKLSAgICB9CiAgICAgZWxzZSBpZiAoZGF0YSA8IC0zMikKLSAgICB7CiAgICAgICAgIGRhdGEgPSAtMzI7Ci0gICAgfQogCiAgICAgdmFsID0gZGF0YSAmIDB4MDAzRjsKIApAQCAtMTc4LDkgKzE1Niw3IEBACiAgICAgdmFsID0gZGF0YSAmIDB4MDBGRjsKIAogICAgIGlmICgoZGF0YSAmIEJJVCg4KSkgIT0gMCkKLSAgICB7CiAgICAgICAgIHZhbCB8PSAweEZGRkZGRjAwOwotICAgIH0KIAogICAgIHJldHVybiB2YWw7CiB9CkBAIC0xOTAsMTMgKzE2Niw5IEBACiAgICAgdTMyICAgICB2YWw7CiAKICAgICBpZiAoZGF0YSA+IDI1NSkKLSAgICB7CiAgICAgICAgIGRhdGEgPSAyNTU7Ci0gICAgfQogICAgIGVsc2UgaWYgKGRhdGEgPCAtMjU2KQotICAgIHsKICAgICAgICAgZGF0YSA9IC0yNTY7Ci0gICAgfQogCiAgICAgdmFsID0gZGF0YSAmIDB4MDFGRjsKIApAQCAtMjA3LDIxICsxNzksMTkgQEAKIHMzMiBfZmxvb3IoczMyIG4pCiB7CiAgICAgaWYgKG4gPiAwKQotICAgIHsKLSAgICAgICAgbiArPSA1OwotICAgIH0KKwluICs9IDU7CiAgICAgZWxzZQotICAgIHsKICAgICAgICAgbiAtPSA1OwotICAgIH0KIAogICAgIHJldHVybiAobi8xMCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8gVGhlIGZvbGxvd2luZyBjb2RlIGlzIHNxYXJlLXJvb3QgZnVuY3Rpb24uCi0vLyBzcXN1bSBpcyB0aGUgaW5wdXQgYW5kIHRoZSBvdXRwdXQgaXMgc3FfcnQ7Ci0vLyBUaGUgbWF4aW11bSBvZiBzcXN1bSA9IDJeMjcgLTE7CisvKgorICogVGhlIGZvbGxvd2luZyBjb2RlIGlzIHNxYXJlLXJvb3QgZnVuY3Rpb24uCisgKiBzcXN1bSBpcyB0aGUgaW5wdXQgYW5kIHRoZSBvdXRwdXQgaXMgc3FfcnQ7CisgKiBUaGUgbWF4aW11bSBvZiBzcXN1bSA9IDJeMjcgLTE7CisgKi8KIHUzMiBfc3FydCh1MzIgc3FzdW0pCiB7CiAgICAgdTMyICAgICBzcV9ydDsKQEAgLTIzMiwxOCArMjAyLDE3IEBACiAgICAgaW50ICAgICBzdGVwOwogCiAgICAgZzQgPSAgc3FzdW0gLyAxMDAwMDAwMDA7Ci0gICAgZzMgPSAoc3FzdW0gLSBnNCoxMDAwMDAwMDApIC8xMDAwMDAwOwotICAgIGcyID0gKHNxc3VtIC0gZzQqMTAwMDAwMDAwIC0gZzMqMTAwMDAwMCkgLzEwMDAwOwotICAgIGcxID0gKHNxc3VtIC0gZzQqMTAwMDAwMDAwIC0gZzMqMTAwMDAwMCAtIGcyKjEwMDAwKSAvMTAwOworICAgIGczID0gKHNxc3VtIC0gZzQqMTAwMDAwMDAwKSAvIDEwMDAwMDA7CisgICAgZzIgPSAoc3FzdW0gLSBnNCoxMDAwMDAwMDAgLSBnMyoxMDAwMDAwKSAvIDEwMDAwOworICAgIGcxID0gKHNxc3VtIC0gZzQqMTAwMDAwMDAwIC0gZzMqMTAwMDAwMCAtIGcyKjEwMDAwKSAvIDEwMDsKICAgICBnMCA9IChzcXN1bSAtIGc0KjEwMDAwMDAwMCAtIGczKjEwMDAwMDAgLSBnMioxMDAwMCAtIGcxKjEwMCk7CiAKICAgICBuZXh0ID0gZzQ7CiAgICAgc3RlcCA9IDA7CiAgICAgc2VlZCA9IDA7Ci0gICAgd2hpbGUgKCgoc2VlZCsxKSooc3RlcCsxKSkgPD0gbmV4dCkKLSAgICB7Ci0gICAgCXN0ZXArKzsKLSAgICAJc2VlZCsrOworICAgIHdoaWxlICgoKHNlZWQrMSkqKHN0ZXArMSkpIDw9IG5leHQpIHsKKyAgICAgICAgc3RlcCsrOworICAgICAgICBzZWVkKys7CiAgICAgfQogCiAgICAgc3FfcnQgPSBzZWVkICogMTAwMDA7CkBAIC0yNTEsMjAgKzIyMCwxOCBAQAogCiAgICAgc3RlcCA9IDA7CiAgICAgc2VlZCA9IDIgKiBzZWVkICogMTA7Ci0gICAgd2hpbGUgKCgoc2VlZCsxKSooc3RlcCsxKSkgPD0gbmV4dCkKLSAgICB7CisgICAgd2hpbGUgKCgoc2VlZCsxKSooc3RlcCsxKSkgPD0gbmV4dCkgewogICAgICAgICBzdGVwKys7Ci0gICAgCXNlZWQrKzsKKyAgICAgICAgc2VlZCsrOwogICAgIH0KIAogICAgIHNxX3J0ID0gc3FfcnQgKyBzdGVwICogMTAwMDsKICAgICBuZXh0ID0gKG5leHQgLSBzZWVkICogc3RlcCkgKiAxMDAgKyBnMjsKICAgICBzZWVkID0gKHNlZWQgKyBzdGVwKSAqIDEwOwogICAgIHN0ZXAgPSAwOwotICAgIHdoaWxlICgoKHNlZWQrMSkqKHN0ZXArMSkpIDw9IG5leHQpCi0gICAgeworICAgIHdoaWxlICgoKHNlZWQrMSkqKHN0ZXArMSkpIDw9IG5leHQpIHsKICAgICAgICAgc3RlcCsrOwotICAgIAlzZWVkKys7CisgICAgICAgIHNlZWQrKzsKICAgICB9CiAKICAgICBzcV9ydCA9IHNxX3J0ICsgc3RlcCAqIDEwMDsKQEAgLTI3MiwyMSArMjM5LDE5IEBACiAgICAgc2VlZCA9IChzZWVkICsgc3RlcCkgKiAxMDsKICAgICBzdGVwID0gMDsKIAotICAgIHdoaWxlICgoKHNlZWQrMSkqKHN0ZXArMSkpIDw9IG5leHQpCi0gICAgeworICAgIHdoaWxlICgoKHNlZWQrMSkqKHN0ZXArMSkpIDw9IG5leHQpIHsKICAgICAgICAgc3RlcCsrOwotICAgIAlzZWVkKys7CisgICAgICAgIHNlZWQrKzsKICAgICB9CiAKICAgICBzcV9ydCA9IHNxX3J0ICsgc3RlcCAqIDEwOwotICAgIG5leHQgPSAobmV4dCAtIHNlZWQqIHN0ZXApICogMTAwICsgZzA7CisgICAgbmV4dCA9IChuZXh0IC0gc2VlZCAqIHN0ZXApICogMTAwICsgZzA7CiAgICAgc2VlZCA9IChzZWVkICsgc3RlcCkgKiAxMDsKICAgICBzdGVwID0gMDsKIAotICAgIHdoaWxlICgoKHNlZWQrMSkqKHN0ZXArMSkpIDw9IG5leHQpCi0gICAgeworICAgIHdoaWxlICgoKHNlZWQrMSkqKHN0ZXArMSkpIDw9IG5leHQpIHsKICAgICAgICAgc3RlcCsrOwotICAgIAlzZWVkKys7CisgICAgICAgIHNlZWQrKzsKICAgICB9CiAKICAgICBzcV9ydCA9IHNxX3J0ICsgc3RlcDsKQEAgLTMwMCwzOCArMjY1LDMxIEBACiAgICAgczMyIFgsIFksIFRhcmdldEFuZ2xlLCBDdXJyQW5nbGU7CiAgICAgdW5zaWduZWQgICAgU3RlcDsKIAotICAgIFg9RklYRUQoQUdfQ09OU1QpOyAgICAgIC8vIEFHX0NPTlNUICogY29zKDApCi0gICAgWT0wOyAgICAgICAgICAgICAgICAgICAgLy8gQUdfQ09OU1QgKiBzaW4oMCkKLSAgICBUYXJnZXRBbmdsZT1hYnMoYW5nbGUpOwotICAgIEN1cnJBbmdsZT0wOworICAgIFggPSBGSVhFRChBR19DT05TVCk7ICAgICAgLyogQUdfQ09OU1QgKiBjb3MoMCkgKi8KKyAgICBZID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIEFHX0NPTlNUICogc2luKDApICovCisgICAgVGFyZ2V0QW5nbGUgPSBhYnMoYW5nbGUpOworICAgIEN1cnJBbmdsZSA9IDA7CiAKLSAgICBmb3IgKFN0ZXA9MDsgU3RlcCA8IDEyOyBTdGVwKyspCi0gICAgeworICAgIGZvciAoU3RlcCA9IDA7IFN0ZXAgPCAxMjsgU3RlcCsrKSB7CiAJczMyIE5ld1g7CiAKLSAgICAgICAgaWYoVGFyZ2V0QW5nbGUgPiBDdXJyQW5nbGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIE5ld1g9WCAtIChZID4+IFN0ZXApOwotICAgICAgICAgICAgWT0oWCA+PiBTdGVwKSArIFk7Ci0gICAgICAgICAgICBYPU5ld1g7CisgICAgICAgIGlmIChUYXJnZXRBbmdsZSA+IEN1cnJBbmdsZSkgeworICAgICAgICAgICAgTmV3WCA9IFggLSAoWSA+PiBTdGVwKTsKKyAgICAgICAgICAgIFkgPSAoWCA+PiBTdGVwKSArIFk7CisgICAgICAgICAgICBYID0gTmV3WDsKICAgICAgICAgICAgIEN1cnJBbmdsZSArPSBBbmdsZXNbU3RlcF07Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBOZXdYPVggKyAoWSA+PiBTdGVwKTsKLSAgICAgICAgICAgIFk9LShYID4+IFN0ZXApICsgWTsKLSAgICAgICAgICAgIFg9TmV3WDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIE5ld1ggPSBYICsgKFkgPj4gU3RlcCk7CisgICAgICAgICAgICBZID0gLShYID4+IFN0ZXApICsgWTsKKyAgICAgICAgICAgIFggPSBOZXdYOwogICAgICAgICAgICAgQ3VyckFuZ2xlIC09IEFuZ2xlc1tTdGVwXTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChhbmdsZSA+IDApCi0gICAgeworICAgIGlmIChhbmdsZSA+IDApIHsKICAgICAgICAgKmNvcyA9IFg7CiAgICAgICAgICpzaW4gPSBZOwotICAgIH0KLSAgICBlbHNlCi0gICAgeworICAgIH0gZWxzZSB7CiAgICAgICAgICpjb3MgPSBYOwogICAgICAgICAqc2luID0gLVk7CiAgICAgfQpAQCAtMzQzLDcgKzMwMSw3IEBACiAJCW51bWJlciArPSAweDEwMDA7CiAJcmV0dXJuIFdiMzVSZWdfUmVhZFN5bmMocEh3RGF0YSwgbnVtYmVyLCBwVmFsdWUpOwogfQotI2RlZmluZSBod19nZXRfZHh4X3JlZyggX0EsIF9CLCBfQyApIGhhbF9nZXRfZHh4X3JlZyggX0EsIF9CLCAodTMyICopX0MgKQorI2RlZmluZSBod19nZXRfZHh4X3JlZyhfQSwgX0IsIF9DKSBoYWxfZ2V0X2R4eF9yZWcoX0EsIF9CLCAodTMyICopX0MpCiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGhhbF9zZXRfZHh4X3JlZyhzdHJ1Y3QgaHdfZGF0YSAqcEh3RGF0YSwgdTE2IG51bWJlciwgdTMyIHZhbHVlKQogewpAQCAtMzU0LDcgKzMxMiw3IEBACiAJcmV0ID0gV2IzNVJlZ19Xcml0ZVN5bmMocEh3RGF0YSwgbnVtYmVyLCB2YWx1ZSk7CiAJcmV0dXJuIHJldDsKIH0KLSNkZWZpbmUgaHdfc2V0X2R4eF9yZWcoIF9BLCBfQiwgX0MgKSBoYWxfc2V0X2R4eF9yZWcoIF9BLCBfQiwgKHUzMilfQyApCisjZGVmaW5lIGh3X3NldF9keHhfcmVnKF9BLCBfQiwgX0MpIGhhbF9zZXRfZHh4X3JlZyhfQSwgX0IsICh1MzIpX0MpCiAKIAogdm9pZCBfcmVzZXRfcnhfY2FsKHN0cnVjdCBod19kYXRhICpwaHdfZGF0YSkKQEAgLTM2MywyNSArMzIxLDIwIEBACiAKIAlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgJnZhbCk7CiAKLQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAotCXsKKwlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLyogMXN0LWN1dCAqLwogCQl2YWwgJj0gMHhGRkZGMDAwMDsKLQl9Ci0JZWxzZSAvLyAybmQtY3V0Ci0JeworCWVsc2UgLyogMm5kLWN1dCAqLwogCQl2YWwgJj0gMHgwMDAwMDNGRjsKLQl9CiAKIAlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgdmFsKTsKIH0KIAogCi0vLyAqKioqKioqKioqKipmb3Igd2luYm9uZCBjYWxpYnJhdGlvbioqKioqKioqKgotLy8KKy8qKioqKioqKioqKioqKmZvciB3aW5ib25kIGNhbGlicmF0aW9uKioqKioqKioqLwogCi0vLwotLy8KLS8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBfcnhhZGNfZGNfb2Zmc2V0X2NhbmNlbGxhdGlvbl93aW5ib25kKHN0cnVjdCBod19kYXRhICpwaHdfZGF0YSwgdTMyIGZyZXF1ZW5jeSkKIHsKICAgICB1MzIgICAgIHJlZ19hZ2NfY3RybDM7CkBAIC0zOTIsMzUgKzM0NSwzMSBAQAogICAgIFBIWV9ERUJVRygoIltDQUxdIC0+IFsxXV9yeGFkY19kY19vZmZzZXRfY2FuY2VsbGF0aW9uKClcbiIpKTsKICAgICBwaHlfaW5pdF9yZihwaHdfZGF0YSk7CiAKLSAgICAvLyBzZXQgY2FsaWJyYXRpb24gY2hhbm5lbAotICAgIGlmKCAoUkZfV0JfMjQyID09IHBod19kYXRhLT5waHlfdHlwZSkgfHwKLQkJKFJGX1dCXzI0Ml8xID09IHBod19kYXRhLT5waHlfdHlwZSkgKSAvLyAyMDA2MDYxOS41IEFkZAotICAgIHsKLSAgICAgICAgaWYgKChmcmVxdWVuY3kgPj0gMjQxMikgJiYgKGZyZXF1ZW5jeSA8PSAyNDg0KSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gdzg5cmYyNDIgY2hhbmdlIGZyZXF1ZW5jeSB0byAyMzkwTWh6CisgICAgLyogc2V0IGNhbGlicmF0aW9uIGNoYW5uZWwgKi8KKyAgICBpZiAoKFJGX1dCXzI0MiA9PSBwaHdfZGF0YS0+cGh5X3R5cGUpIHx8CisJCShSRl9XQl8yNDJfMSA9PSBwaHdfZGF0YS0+cGh5X3R5cGUpKSAvKiAyMDA2MDYxOS41IEFkZCAqL3sKKyAgICAgICAgaWYgKChmcmVxdWVuY3kgPj0gMjQxMikgJiYgKGZyZXF1ZW5jeSA8PSAyNDg0KSkgeworICAgICAgICAgICAgLyogdzg5cmYyNDIgY2hhbmdlIGZyZXF1ZW5jeSB0byAyMzkwTWh6ICovCiAgICAgICAgICAgICBQSFlfREVCVUcoKCJbQ0FMXSBXODlSRjI0Mi8xMUcvQ2hhbm5lbD0yMzkwTWh6XG4iKSk7CiAJCQlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDMsICgzPDwyNCl8MHgwMjU1ODYpOwogCiAgICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotCXsKKyAgICB9IGVsc2UgewogCiAJfQogCi0JLy8gcmVzZXQgY2FuY2VsX2RjX2lbOTo1XSBhbmQgY2FuY2VsX2RjX3FbNDowXSBpbiByZWdpc3RlciBEQ19DYW5jZWwKKwkvKiByZXNldCBjYW5jZWxfZGNfaVs5OjVdIGFuZCBjYW5jZWxfZGNfcVs0OjBdIGluIHJlZ2lzdGVyIERDX0NhbmNlbCAqLwogCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDVDLCAmdmFsKTsKIAl2YWwgJj0gfigweDAzRkYpOwogCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDVDLCB2YWwpOwogCi0JLy8gcmVzZXQgdGhlIFRYIGFuZCBSWCBJUSBjYWxpYnJhdGlvbiBkYXRhCisJLyogcmVzZXQgdGhlIFRYIGFuZCBSWCBJUSBjYWxpYnJhdGlvbiBkYXRhICovCiAJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4M0MsIDApOwogCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCAwKTsKIAotCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU4LCAweDMwMzAzMDMwKTsgLy8gSVFfQWxwaGEgQ2hhbmdlZAorCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU4LCAweDMwMzAzMDMwKTsgLyogSVFfQWxwaGEgQ2hhbmdlZCAqLwogCi0JLy8gYS4gRGlzYWJsZSBBR0MKKwkvKiBhLiBEaXNhYmxlIEFHQyAqLwogCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCAmcmVnX2FnY19jdHJsMyk7CiAJcmVnX2FnY19jdHJsMyAmPSB+QklUKDIpOwogCXJlZ19hZ2NfY3RybDMgfD0gKE1BU0tfTE5BX0ZJWF9HQUlOfE1BU0tfQUdDX0ZJWCk7CkBAIC00MzAsNyArMzc5LDcgQEAKIAl2YWwgfD0gTUFTS19BR0NfRklYX0dBSU47CiAJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDUsIHZhbCk7CiAKLQkvLyBiLiBUdXJuIG9mZiBCQiBSWAorCS8qIGIuIFR1cm4gb2ZmIEJCIFJYICovCiAJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BX0FDUV9DVFJMLCAmcmVnX2FfYWNxX2N0cmwpOwogCXJlZ19hX2FjcV9jdHJsIHw9IE1BU0tfQU1FUl9PRkZfUkVHOwogCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQV9BQ1FfQ1RSTCwgcmVnX2FfYWNxX2N0cmwpOwpAQCAtNDM5LDkgKzM4OCw5IEBACiAJcmVnX2JfYWNxX2N0cmwgfD0gTUFTS19CTUVSX09GRl9SRUc7CiAJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19CX0FDUV9DVFJMLCByZWdfYl9hY3FfY3RybCk7CiAKLQkvLyBjLiBNYWtlIHN1cmUgTUFDIGlzIGluIHJlY2VpdmluZyBtb2RlCi0JLy8gZC4gVHVybiBPTiBBREMgY2FsaWJyYXRpb24KLQkvLyAgICAtIEFEQyBjYWxpYnJhdG9yIGlzIHRyaWdnZXJlZCBieSB0aGlzIHNpZ25hbCByaXNpbmcgZnJvbSAwIHRvIDEKKwkvKiBjLiBNYWtlIHN1cmUgTUFDIGlzIGluIHJlY2VpdmluZyBtb2RlCisJICogZC4gVHVybiBPTiBBREMgY2FsaWJyYXRpb24KKwkgKiAgICAtIEFEQyBjYWxpYnJhdG9yIGlzIHRyaWdnZXJlZCBieSB0aGlzIHNpZ25hbCByaXNpbmcgZnJvbSAwIHRvIDEgKi8KIAlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgJnZhbCk7CiAJdmFsICY9IH5NQVNLX0FEQ19EQ19DQUxfU1RSOwogCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCB2YWwpOwpAQCAtNDQ5LDcgKzM5OCw3IEBACiAJdmFsIHw9IE1BU0tfQURDX0RDX0NBTF9TVFI7CiAJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHZhbCk7CiAKLQkvLyBlLiBUaGUgcmVzdWx0IGFyZSBzaG93biBpbiAiYWRjX2RjX2NhbF9pWzg6MF0gYW5kIGFkY19kY19jYWxfcVs4OjBdIgorCS8qIGUuIFRoZSByZXN1bHQgYXJlIHNob3duIGluICJhZGNfZGNfY2FsX2lbODowXSBhbmQgYWRjX2RjX2NhbF9xWzg6MF0iICovCiAjaWZkZWYgX0RFQlVHCiAJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19PRkZTRVRfUkVBRCwgJnZhbCk7CiAJUEhZX0RFQlVHKCgiW0NBTF0gICAgUkVHX09GRlNFVF9SRUFEID0gMHglMDhYXG4iLCB2YWwpKTsKQEAgLTQ2NCwyMyArNDEzLDIzIEBACiAJdmFsICY9IH5NQVNLX0FEQ19EQ19DQUxfU1RSOwogCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCB2YWwpOwogCi0JLy8gZi4gVHVybiBvbiBCQiBSWAotCS8vaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BX0FDUV9DVFJMLCAmcmVnX2FfYWNxX2N0cmwpOworCS8qIGYuIFR1cm4gb24gQkIgUlggKi8KKwkvKiBod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FfQUNRX0NUUkwsICZyZWdfYV9hY3FfY3RybCk7ICovCiAJcmVnX2FfYWNxX2N0cmwgJj0gfk1BU0tfQU1FUl9PRkZfUkVHOwogCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQV9BQ1FfQ1RSTCwgcmVnX2FfYWNxX2N0cmwpOwogCi0JLy9od19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0JfQUNRX0NUUkwsICZyZWdfYl9hY3FfY3RybCk7CisJLyogaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19CX0FDUV9DVFJMLCAmcmVnX2JfYWNxX2N0cmwpOyAqLwogCXJlZ19iX2FjcV9jdHJsICY9IH5NQVNLX0JNRVJfT0ZGX1JFRzsKIAlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0JfQUNRX0NUUkwsIHJlZ19iX2FjcV9jdHJsKTsKIAotCS8vIGcuIEVuYWJsZSBBR0MKLQkvL2h3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCAmdmFsKTsKKwkvKiBnLiBFbmFibGUgQUdDICovCisJLyogaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDMsICZ2YWwpOyAqLwogCXJlZ19hZ2NfY3RybDMgfD0gQklUKDIpOwogCXJlZ19hZ2NfY3RybDMgJj0gfihNQVNLX0xOQV9GSVhfR0FJTnxNQVNLX0FHQ19GSVgpOwogCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCByZWdfYWdjX2N0cmwzKTsKIH0KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBfdHhpZGFjX2RjX29mZnNldF9jYW5jZWxsYXRpb25fd2luYm9uZChzdHJ1Y3QgaHdfZGF0YSAqcGh3X2RhdGEpCiB7CiAJdTMyICAgICByZWdfYWdjX2N0cmwzOwpAQCAtNDk3LDIyICs0NDYsMjIgQEAKIAogCVBIWV9ERUJVRygoIltDQUxdIC0+IFsyXV90eGlkYWNfZGNfb2Zmc2V0X2NhbmNlbGxhdGlvbigpXG4iKSk7CiAKLQkvLyBhLiBTZXQgdG8gIlRYIGNhbGlicmF0aW9uIG1vZGUiCisJLyogYS4gU2V0IHRvICJUWCBjYWxpYnJhdGlvbiBtb2RlIiAqLwogCi0JLy8weDAxIDB4RUUzRkMyICA7IDNCOEZGICA7IENhbGlicmF0aW9uICg2YSkuIGVuYWJsZSBUWCBJUSBjYWxpYnJhdGlvbiBsb29wIGNpcmN1aXRzCisJLyogMHgwMSAweEVFM0ZDMiAgOyAzQjhGRiAgOyBDYWxpYnJhdGlvbiAoNmEpLiBlbmFibGUgVFggSVEgY2FsaWJyYXRpb24gbG9vcCBjaXJjdWl0cyAqLwogCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMSwgKDE8PDI0KXwweEVFM0ZDMik7Ci0JLy8weDBCIDB4MTkwNUQ2ICA7IDA2NDE3ICA7IENhbGlicmF0aW9uICg2YikuIGVuYWJsZSBUWCBJL1EgY2FsIGxvb3Agc3F1YXJpbmcgY2lyY3VpdAorCS8qIDB4MEIgMHgxOTA1RDYgIDsgMDY0MTcgIDsgQ2FsaWJyYXRpb24gKDZiKS4gZW5hYmxlIFRYIEkvUSBjYWwgbG9vcCBzcXVhcmluZyBjaXJjdWl0ICovCiAJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAxMSwgKDExPDwyNCl8MHgxOTAxRDYpOwotCS8vMHgwNSAweDI0QzYwQSAgOyAwOTMxOCAgOyBDYWxpYnJhdGlvbiAoNmMpLiBzZXR0aW5nIFRYLVZHQSBnYWluOiBUWEdDSD0yICYgR1BLPTExMCAtLT4gdG8gYmUgb3B0aW1pemVkCisJLyogMHgwNSAweDI0QzYwQSAgOyAwOTMxOCAgOyBDYWxpYnJhdGlvbiAoNmMpLiBzZXR0aW5nIFRYLVZHQSBnYWluOiBUWEdDSD0yICYgR1BLPTExMCAtLT4gdG8gYmUgb3B0aW1pemVkICovCiAJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCA1LCAoNTw8MjQpfDB4MjRDNDhBKTsKLSAgICAvLzB4MDYgMHgwNjg4MEMgIDsgMDFBMjAgIDsgQ2FsaWJyYXRpb24gKDZkKS4gUlhHQ0g9MDA7IFJYR0NMPTEwMCAwMDAgKFJYVkdBPTMyKSAtLT4gdG8gYmUgb3B0aW1pemVkCisgICAgICAgIC8qIDB4MDYgMHgwNjg4MEMgIDsgMDFBMjAgIDsgQ2FsaWJyYXRpb24gKDZkKS4gUlhHQ0g9MDA7IFJYR0NMPTEwMCAwMDAgKFJYVkdBPTMyKSAtLT4gdG8gYmUgb3B0aW1pemVkICovCiAJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCA2LCAoNjw8MjQpfDB4MDY4OTBDKTsKLQkvLzB4MDAgMHhGREYxQzAgIDsgM0Y3QzcgIDsgQ2FsaWJyYXRpb24gKDZlKS4gdHVybiBvbiBJUSBpbWJhbGFuY2UvVGVzdCBtb2RlCisJLyogMHgwMCAweEZERjFDMCAgOyAzRjdDNyAgOyBDYWxpYnJhdGlvbiAoNmUpLiB0dXJuIG9uIElRIGltYmFsYW5jZS9UZXN0IG1vZGUgKi8KIAlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDAsICgwPDwyNCl8MHhGREYxQzApOwogCi0JaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTgsIDB4MzAzMDMwMzApOyAvLyBJUV9BbHBoYSBDaGFuZ2VkCisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTgsIDB4MzAzMDMwMzApOyAvKiBJUV9BbHBoYSBDaGFuZ2VkICovCiAKLQkvLyBhLiBEaXNhYmxlIEFHQworCS8qIGEuIERpc2FibGUgQUdDICovCiAJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDMsICZyZWdfYWdjX2N0cmwzKTsKIAlyZWdfYWdjX2N0cmwzICY9IH5CSVQoMik7CiAJcmVnX2FnY19jdHJsMyB8PSAoTUFTS19MTkFfRklYX0dBSU58TUFTS19BR0NfRklYKTsKQEAgLTUyMiwxOSArNDcxLDE5IEBACiAJdmFsIHw9IE1BU0tfQUdDX0ZJWF9HQUlOOwogCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkw1LCB2YWwpOwogCi0JLy8gYi4gc2V0IGlxY2FsX21vZGVbMTowXSB0byAweDIgYW5kIHNldCBpcWNhbF90b25lWzM6Ml0gdG8gMAorCS8qIGIuIHNldCBpcWNhbF9tb2RlWzE6MF0gdG8gMHgyIGFuZCBzZXQgaXFjYWxfdG9uZVszOjJdIHRvIDAgKi8KIAlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgJnJlZ19tb2RlX2N0cmwpOwogCiAJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMIChyZWFkKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOwogCXJlZ19tb2RlX2N0cmwgJj0gfihNQVNLX0lRQ0FMX1RPTkVfU0VMfE1BU0tfSVFDQUxfTU9ERSk7CiAKLQkvLyBtb2RlPTIsIHRvbmU9MAotCS8vcmVnX21vZGVfY3RybCB8PSAoTUFTS19DQUxJQl9TVEFSVHwyKTsKKwkvKiBtb2RlPTIsIHRvbmU9MCAqLworCS8qIHJlZ19tb2RlX2N0cmwgfD0gKE1BU0tfQ0FMSUJfU1RBUlR8Mik7ICovCiAKLQkvLyBtb2RlPTIsIHRvbmU9MQotCS8vcmVnX21vZGVfY3RybCB8PSAoTUFTS19DQUxJQl9TVEFSVHwyfCgxPDwyKSk7CisJLyogbW9kZT0yLCB0b25lPTEgKi8KKwkvKiByZWdfbW9kZV9jdHJsIHw9IChNQVNLX0NBTElCX1NUQVJUfDJ8KDE8PDIpKTsgKi8KIAotCS8vIG1vZGU9MiwgdG9uZT0yCisJLyogbW9kZT0yLCB0b25lPTIgKi8KIAlyZWdfbW9kZV9jdHJsIHw9IChNQVNLX0NBTElCX1NUQVJUfDJ8KDI8PDIpKTsKIAlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CiAJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKQEAgLTU0MiwxMiArNDkxLDEwIEBACiAJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NUMsICZyZWdfZGNfY2FuY2VsKTsKIAlQSFlfREVCVUcoKCJbQ0FMXSAgICBEQ19DQU5DRUwgKHJlYWQpID0gMHglMDhYXG4iLCByZWdfZGNfY2FuY2VsKSk7CiAKLQlmb3IgKGxvb3AgPSAwOyBsb29wIDwgTE9PUF9USU1FUzsgbG9vcCsrKQotCXsKKwlmb3IgKGxvb3AgPSAwOyBsb29wIDwgTE9PUF9USU1FUzsgbG9vcCsrKSB7CiAJCVBIWV9ERUJVRygoIltDQUxdIFslZC5dID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIsIGxvb3ApKTsKIAotCQkvLyBjLgotCQkvLyByZXNldCBjYW5jZWxfZGNfaVs5OjVdIGFuZCBjYW5jZWxfZGNfcVs0OjBdIGluIHJlZ2lzdGVyIERDX0NhbmNlbAorCQkvKiBjLiByZXNldCBjYW5jZWxfZGNfaVs5OjVdIGFuZCBjYW5jZWxfZGNfcVs0OjBdIGluIHJlZ2lzdGVyIERDX0NhbmNlbCAqLwogCQlyZWdfZGNfY2FuY2VsICY9IH4oMHgwM0ZGKTsKIAkJUEhZX0RFQlVHKCgiW0NBTF0gICAgRENfQ0FOQ0VMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19kY19jYW5jZWwpKTsKIAkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NUMsIHJlZ19kY19jYW5jZWwpOwpAQCAtNTYyLDcgKzUwOSw3IEBACiAJCVBIWV9ERUJVRygoIltDQUxdICAgIG1hZ18wPSVkIChpcWNhbF9pbWFnZV9pPSVkLCBpcWNhbF9pbWFnZV9xPSVkKVxuIiwKIAkJCQkgICBtYWdfMCwgaXFjYWxfaW1hZ2VfaSwgaXFjYWxfaW1hZ2VfcSkpOwogCi0JCS8vIGQuCisJCS8qIGQuICovCiAJCXJlZ19kY19jYW5jZWwgfD0gKDEgPDwgQ0FOQ0VMX0RDX0lfU0hJRlQpOwogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBEQ19DQU5DRUwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX2RjX2NhbmNlbCkpOwogCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1QywgcmVnX2RjX2NhbmNlbCk7CkBAIC01NzcsMTggKzUyNCwxMiBAQAogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBtYWdfMT0lZCAoaXFjYWxfaW1hZ2VfaT0lZCwgaXFjYWxfaW1hZ2VfcT0lZClcbiIsCiAJCQkJICAgbWFnXzEsIGlxY2FsX2ltYWdlX2ksIGlxY2FsX2ltYWdlX3EpKTsKIAotCQkvLyBlLiBDYWxjdWxhdGUgdGhlIGNvcnJlY3QgREMgb2Zmc2V0IGNhbmNlbGxhdGlvbiB2YWx1ZSBmb3IgSQorCQkvKiBlLiBDYWxjdWxhdGUgdGhlIGNvcnJlY3QgREMgb2Zmc2V0IGNhbmNlbGxhdGlvbiB2YWx1ZSBmb3IgSSAqLwogCQlpZiAobWFnXzAgIT0gbWFnXzEpCi0JCXsKIAkJCWZpeF9jYW5jZWxfZGNfaSA9IChtYWdfMCoxMDAwMCkgLyAobWFnXzAqMTAwMDAgLSBtYWdfMSoxMDAwMCk7Ci0JCX0KLQkJZWxzZQotCQl7CisJCWVsc2UgewogCQkJaWYgKG1hZ18wID09IG1hZ18xKQotCQkJewogCQkJCVBIWV9ERUJVRygoIltDQUxdICAgKioqKiogbWFnXzAgPSBtYWdfMSAhIVxuIikpOwotCQkJfQotCiAJCQlmaXhfY2FuY2VsX2RjX2kgPSAwOwogCQl9CiAKQEAgLTU5NiwxMiArNTM3LDEwIEBACiAJCQkJICAgZml4X2NhbmNlbF9kY19pLCBfczMyX3RvX3M1KGZpeF9jYW5jZWxfZGNfaSkpKTsKIAogCQlpZiAoKGFicyhtYWdfMS1tYWdfMCkqNikgPiBtYWdfMCkKLQkJewogCQkJYnJlYWs7Ci0JCX0KIAl9CiAKLQlpZiAoIGxvb3AgPj0gMTkgKQorCWlmIChsb29wID49IDE5KQogCSAgIGZpeF9jYW5jZWxfZGNfaSA9IDA7CiAKIAlyZWdfZGNfY2FuY2VsICY9IH4oMHgwM0ZGKTsKQEAgLTYwOSwxMyArNTQ4LDEzIEBACiAJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NUMsIHJlZ19kY19jYW5jZWwpOwogCVBIWV9ERUJVRygoIltDQUxdICAgIERDX0NBTkNFTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfZGNfY2FuY2VsKSk7CiAKLQkvLyBnLgorCS8qIGcuICovCiAJcmVnX21vZGVfY3RybCAmPSB+TUFTS19DQUxJQl9TVEFSVDsKIAlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CiAJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKIH0KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBfdHhxZGFjX2RjX29mZnNldF9jYWNlbGxhdGlvbl93aW5ib25kKHN0cnVjdCBod19kYXRhICpwaHdfZGF0YSkKIHsKIAl1MzIgICAgIHJlZ19hZ2NfY3RybDM7CkBAIC02MzEsMjAgKzU3MCwyMCBAQAogCWludCAgICAgbG9vcDsKIAogCVBIWV9ERUJVRygoIltDQUxdIC0+IFszXV90eHFkYWNfZGNfb2Zmc2V0X2NhY2VsbGF0aW9uKClcbiIpKTsKLQkvLzB4MDEgMHhFRTNGQzIgIDsgM0I4RkYgIDsgQ2FsaWJyYXRpb24gKDZhKS4gZW5hYmxlIFRYIElRIGNhbGlicmF0aW9uIGxvb3AgY2lyY3VpdHMKKwkvKjB4MDEgMHhFRTNGQzIgIDsgM0I4RkYgIDsgQ2FsaWJyYXRpb24gKDZhKS4gZW5hYmxlIFRYIElRIGNhbGlicmF0aW9uIGxvb3AgY2lyY3VpdHMgKi8KIAlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDEsICgxPDwyNCl8MHhFRTNGQzIpOwotCS8vMHgwQiAweDE5MDVENiAgOyAwNjQxNyAgOyBDYWxpYnJhdGlvbiAoNmIpLiBlbmFibGUgVFggSS9RIGNhbCBsb29wIHNxdWFyaW5nIGNpcmN1aXQKKwkvKiAweDBCIDB4MTkwNUQ2ICA7IDA2NDE3ICA7IENhbGlicmF0aW9uICg2YikuIGVuYWJsZSBUWCBJL1EgY2FsIGxvb3Agc3F1YXJpbmcgY2lyY3VpdCAqLwogCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMTEsICgxMTw8MjQpfDB4MTkwMUQ2KTsKLQkvLzB4MDUgMHgyNEM2MEEgIDsgMDkzMTggIDsgQ2FsaWJyYXRpb24gKDZjKS4gc2V0dGluZyBUWC1WR0EgZ2FpbjogVFhHQ0g9MiAmIEdQSz0xMTAgLS0+IHRvIGJlIG9wdGltaXplZAorCS8qIDB4MDUgMHgyNEM2MEEgIDsgMDkzMTggIDsgQ2FsaWJyYXRpb24gKDZjKS4gc2V0dGluZyBUWC1WR0EgZ2FpbjogVFhHQ0g9MiAmIEdQSz0xMTAgLS0+IHRvIGJlIG9wdGltaXplZCAqLwogCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgNSwgKDU8PDI0KXwweDI0QzQ4QSk7Ci0gICAgLy8weDA2IDB4MDY4ODBDICA7IDAxQTIwICA7IENhbGlicmF0aW9uICg2ZCkuIFJYR0NIPTAwOyBSWEdDTD0xMDAgMDAwIChSWFZHQT0zMikgLS0+IHRvIGJlIG9wdGltaXplZAorICAgICAgICAvKiAweDA2IDB4MDY4ODBDICA7IDAxQTIwICA7IENhbGlicmF0aW9uICg2ZCkuIFJYR0NIPTAwOyBSWEdDTD0xMDAgMDAwIChSWFZHQT0zMikgLS0+IHRvIGJlIG9wdGltaXplZCAqLwogCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgNiwgKDY8PDI0KXwweDA2ODkwQyk7Ci0JLy8weDAwIDB4RkRGMUMwICA7IDNGN0M3ICA7IENhbGlicmF0aW9uICg2ZSkuIHR1cm4gb24gSVEgaW1iYWxhbmNlL1Rlc3QgbW9kZQorCS8qIDB4MDAgMHhGREYxQzAgIDsgM0Y3QzcgIDsgQ2FsaWJyYXRpb24gKDZlKS4gdHVybiBvbiBJUSBpbWJhbGFuY2UvVGVzdCBtb2RlICovCiAJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAwLCAoMDw8MjQpfDB4RkRGMUMwKTsKIAotCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU4LCAweDMwMzAzMDMwKTsgLy8gSVFfQWxwaGEgQ2hhbmdlZAorCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU4LCAweDMwMzAzMDMwKTsgLyogSVFfQWxwaGEgQ2hhbmdlZCAqLwogCi0JLy8gYS4gRGlzYWJsZSBBR0MKKwkvKiBhLiBEaXNhYmxlIEFHQyAqLwogCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCAmcmVnX2FnY19jdHJsMyk7CiAJcmVnX2FnY19jdHJsMyAmPSB+QklUKDIpOwogCXJlZ19hZ2NfY3RybDMgfD0gKE1BU0tfTE5BX0ZJWF9HQUlOfE1BU0tfQUdDX0ZJWCk7CkBAIC02NTQsMTEgKzU5MywxMSBAQAogCXZhbCB8PSBNQVNLX0FHQ19GSVhfR0FJTjsKIAlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMNSwgdmFsKTsKIAotCS8vIGEuIHNldCBpcWNhbF9tb2RlWzE6MF0gdG8gMHgzIGFuZCBzZXQgaXFjYWxfdG9uZVszOjJdIHRvIDAKKwkvKiBhLiBzZXQgaXFjYWxfbW9kZVsxOjBdIHRvIDB4MyBhbmQgc2V0IGlxY2FsX3RvbmVbMzoyXSB0byAwICovCiAJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsICZyZWdfbW9kZV9jdHJsKTsKIAlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHJlYWQpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CiAKLQkvL3JlZ19tb2RlX2N0cmwgJj0gfihNQVNLX0lRQ0FMX1RPTkVfU0VMfE1BU0tfSVFDQUxfTU9ERSk7CisJLyogcmVnX21vZGVfY3RybCAmPSB+KE1BU0tfSVFDQUxfVE9ORV9TRUx8TUFTS19JUUNBTF9NT0RFKTsgKi8KIAlyZWdfbW9kZV9jdHJsICY9IH4oTUFTS19JUUNBTF9NT0RFKTsKIAlyZWdfbW9kZV9jdHJsIHw9IChNQVNLX0NBTElCX1NUQVJUfDMpOwogCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKTsKQEAgLTY2NywxMiArNjA2LDEwIEBACiAJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NUMsICZyZWdfZGNfY2FuY2VsKTsKIAlQSFlfREVCVUcoKCJbQ0FMXSAgICBEQ19DQU5DRUwgKHJlYWQpID0gMHglMDhYXG4iLCByZWdfZGNfY2FuY2VsKSk7CiAKLQlmb3IgKGxvb3AgPSAwOyBsb29wIDwgTE9PUF9USU1FUzsgbG9vcCsrKQotCXsKKwlmb3IgKGxvb3AgPSAwOyBsb29wIDwgTE9PUF9USU1FUzsgbG9vcCsrKSB7CiAJCVBIWV9ERUJVRygoIltDQUxdIFslZC5dID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIsIGxvb3ApKTsKIAotCQkvLyBiLgotCQkvLyByZXNldCBjYW5jZWxfZGNfcVs0OjBdIGluIHJlZ2lzdGVyIERDX0NhbmNlbAorCQkvKiBiLiByZXNldCBjYW5jZWxfZGNfcVs0OjBdIGluIHJlZ2lzdGVyIERDX0NhbmNlbCAqLwogCQlyZWdfZGNfY2FuY2VsICY9IH4oMHgwMDFGKTsKIAkJUEhZX0RFQlVHKCgiW0NBTF0gICAgRENfQ0FOQ0VMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19kY19jYW5jZWwpKTsKIAkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NUMsIHJlZ19kY19jYW5jZWwpOwpAQCAtNjg3LDcgKzYyNCw3IEBACiAJCVBIWV9ERUJVRygoIltDQUxdICAgIG1hZ18wPSVkIChpcWNhbF9pbWFnZV9pPSVkLCBpcWNhbF9pbWFnZV9xPSVkKVxuIiwKIAkJCQkgICBtYWdfMCwgaXFjYWxfaW1hZ2VfaSwgaXFjYWxfaW1hZ2VfcSkpOwogCi0JCS8vIGMuCisJCS8qIGMuICovCiAJCXJlZ19kY19jYW5jZWwgfD0gKDEgPDwgQ0FOQ0VMX0RDX1FfU0hJRlQpOwogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBEQ19DQU5DRUwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX2RjX2NhbmNlbCkpOwogCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1QywgcmVnX2RjX2NhbmNlbCk7CkBAIC03MDIsMTggKzYzOSwxMiBAQAogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBtYWdfMT0lZCAoaXFjYWxfaW1hZ2VfaT0lZCwgaXFjYWxfaW1hZ2VfcT0lZClcbiIsCiAJCQkJICAgbWFnXzEsIGlxY2FsX2ltYWdlX2ksIGlxY2FsX2ltYWdlX3EpKTsKIAotCQkvLyBkLiBDYWxjdWxhdGUgdGhlIGNvcnJlY3QgREMgb2Zmc2V0IGNhbmNlbGxhdGlvbiB2YWx1ZSBmb3IgSQorCQkvKiBkLiBDYWxjdWxhdGUgdGhlIGNvcnJlY3QgREMgb2Zmc2V0IGNhbmNlbGxhdGlvbiB2YWx1ZSBmb3IgSSAqLwogCQlpZiAobWFnXzAgIT0gbWFnXzEpCi0JCXsKIAkJCWZpeF9jYW5jZWxfZGNfcSA9IChtYWdfMCoxMDAwMCkgLyAobWFnXzAqMTAwMDAgLSBtYWdfMSoxMDAwMCk7Ci0JCX0KLQkJZWxzZQotCQl7CisJCWVsc2UgewogCQkJaWYgKG1hZ18wID09IG1hZ18xKQotCQkJewogCQkJCVBIWV9ERUJVRygoIltDQUxdICAgKioqKiogbWFnXzAgPSBtYWdfMSAhIVxuIikpOwotCQkJfQotCiAJCQlmaXhfY2FuY2VsX2RjX3EgPSAwOwogCQl9CiAKQEAgLTcyMSwxMiArNjUyLDEwIEBACiAJCQkJICAgZml4X2NhbmNlbF9kY19xLCBfczMyX3RvX3M1KGZpeF9jYW5jZWxfZGNfcSkpKTsKIAogCQlpZiAoKGFicyhtYWdfMS1tYWdfMCkqNikgPiBtYWdfMCkKLQkJewogCQkJYnJlYWs7Ci0JCX0KIAl9CiAKLQlpZiAoIGxvb3AgPj0gMTkgKQorCWlmIChsb29wID49IDE5KQogCSAgIGZpeF9jYW5jZWxfZGNfcSA9IDA7CiAKIAlyZWdfZGNfY2FuY2VsICY9IH4oMHgwMDFGKTsKQEAgLTczNSwxMyArNjY0LDEzIEBACiAJUEhZX0RFQlVHKCgiW0NBTF0gICAgRENfQ0FOQ0VMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19kY19jYW5jZWwpKTsKIAogCi0JLy8gZi4KKwkvKiBmLiAqLwogCXJlZ19tb2RlX2N0cmwgJj0gfk1BU0tfQ0FMSUJfU1RBUlQ7CiAJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHJlZ19tb2RlX2N0cmwpOwogCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CiB9CiAKLS8vMjAwNjA2MTIuMS5hIDIwMDYwNzE4LjEgTW9kaWZ5CisvKiAyMDA2MDYxMi4xLmEgMjAwNjA3MTguMSBNb2RpZnkgKi8KIHU4IF90eF9pcV9jYWxpYnJhdGlvbl9sb29wX3dpbmJvbmQoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhLAogCQkJCQkJICAgczMyIGFfMl90aHJlc2hvbGQsCiAJCQkJCQkgICBzMzIgYl8yX3RocmVzaG9sZCkKQEAgLTc2NSw3ICs2OTQsNyBAQAogCXMzMiAgICAgdGVtcDEsIHRlbXAyOwogCXUzMiAgICAgdmFsOwogCXUxNiAgICAgbG9vcDsKLQlzMzIgICAgIGlxY2FsX3RvbmVfaV9hdmcsaXFjYWxfdG9uZV9xX2F2ZzsKKwlzMzIgICAgIGlxY2FsX3RvbmVfaV9hdmcsIGlxY2FsX3RvbmVfcV9hdmc7CiAJdTggICAgICB2ZXJpZnlfY291bnQ7CiAJaW50IGNhcHR1cmVfdGltZTsKIApAQCAtNzgwLDE4ICs3MDksMTggQEAKIAogCWxvb3AgPSBMT09QX1RJTUVTOwogCi0Jd2hpbGUgKGxvb3AgPiAwKQotCXsKKwl3aGlsZSAobG9vcCA+IDApIHsKIAkJUEhZX0RFQlVHKCgiW0NBTF0gWyVkLl0gPF90eF9pcV9jYWxpYnJhdGlvbl9sb29wPlxuIiwgKExPT1BfVElNRVMtbG9vcCsxKSkpOwogCi0JCWlxY2FsX3RvbmVfaV9hdmc9MDsKLQkJaXFjYWxfdG9uZV9xX2F2Zz0wOwotCQlpZiggIWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDNDLCAweDAwKSApIC8vIDIwMDYwNzE4LjEgbW9kaWZ5CisJCWlxY2FsX3RvbmVfaV9hdmcgPSAwOworCQlpcWNhbF90b25lX3FfYXZnID0gMDsKKwkJaWYgKCFod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgMHgwMCkpIC8qIDIwMDYwNzE4LjEgbW9kaWZ5ICovCiAJCQlyZXR1cm4gMDsKLQkJZm9yKGNhcHR1cmVfdGltZT0wO2NhcHR1cmVfdGltZTwxMDtjYXB0dXJlX3RpbWUrKykKLQkJewotCQkJLy8gYS4gU2V0IGlxY2FsX21vZGVbMTowXSB0byAweDIgYW5kIHNldCAiY2FsaWJfc3RhcnQiIHRvIDB4MSB0bwotCQkJLy8gICAgZW5hYmxlICJJUSBhbGlicmF0aW9uIE1vZGUgSUkiCisJCWZvciAoY2FwdHVyZV90aW1lID0gMDsgY2FwdHVyZV90aW1lIDwgMTA7IGNhcHR1cmVfdGltZSsrKSB7CisJCQkvKgorCQkJICogYS4gU2V0IGlxY2FsX21vZGVbMTowXSB0byAweDIgYW5kIHNldCAiY2FsaWJfc3RhcnQiIHRvIDB4MSB0bworCQkJICogICAgZW5hYmxlICJJUSBhbGlicmF0aW9uIE1vZGUgSUkiCisJCQkgKi8KIAkJCXJlZ19tb2RlX2N0cmwgJj0gfihNQVNLX0lRQ0FMX1RPTkVfU0VMfE1BU0tfSVFDQUxfTU9ERSk7CiAJCQlyZWdfbW9kZV9jdHJsICY9IH5NQVNLX0lRQ0FMX01PREU7CiAJCQlyZWdfbW9kZV9jdHJsIHw9IChNQVNLX0NBTElCX1NUQVJUfDB4MDIpOwpAQCAtNzk5LDcgKzcyOCw3IEBACiAJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CiAJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOwogCi0JCQkvLyBiLgorCQkJLyogYi4gKi8KIAkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQ0FMSUJfUkVBRDEsICZ2YWwpOwogCQkJUEhZX0RFQlVHKCgiW0NBTF0gICAgQ0FMSUJfUkVBRDEgPSAweCUwOFhcbiIsIHZhbCkpOwogCkBAIC04MTMsMjEgKzc0MiwyMyBAQAogCQkJaXFfbWFnXzBfdHggPSAoczMyKSBfc3FydChzcXN1bSk7CiAJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBpcV9tYWdfMF90eD0lZFxuIiwgaXFfbWFnXzBfdHgpKTsKIAotCQkJLy8gYy4gU2V0ICJjYWxpYl9zdGFydCIgdG8gMHgwCisJCQkvKiBjLiBTZXQgImNhbGliX3N0YXJ0IiB0byAweDAgKi8KIAkJCXJlZ19tb2RlX2N0cmwgJj0gfk1BU0tfQ0FMSUJfU1RBUlQ7CiAJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CiAJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOwogCi0JCQkvLyBkLiBTZXQgaXFjYWxfbW9kZVsxOjBdIHRvIDB4MyBhbmQgc2V0ICJjYWxpYl9zdGFydCIgdG8gMHgxIHRvCi0JCQkvLyAgICBlbmFibGUgIklRIGFsaWJyYXRpb24gTW9kZSBJSSIKLQkJCS8vaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsICZ2YWwpOworCQkJLyoKKwkJCSAqIGQuIFNldCBpcWNhbF9tb2RlWzE6MF0gdG8gMHgzIGFuZCBzZXQgImNhbGliX3N0YXJ0IiB0byAweDEgdG8KKwkJCSAqICAgIGVuYWJsZSAiSVEgYWxpYnJhdGlvbiBNb2RlIElJIgorCQkJICovCisJCQkvKiBod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgJnZhbCk7ICovCiAJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgJnJlZ19tb2RlX2N0cmwpOwogCQkJcmVnX21vZGVfY3RybCAmPSB+TUFTS19JUUNBTF9NT0RFOwogCQkJcmVnX21vZGVfY3RybCB8PSAoTUFTS19DQUxJQl9TVEFSVHwweDAzKTsKIAkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKTsKIAkJCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CiAKLQkJCS8vIGUuCisJCQkvKiBlLiAqLwogCQkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19DQUxJQl9SRUFEMSwgJnZhbCk7CiAJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBDQUxJQl9SRUFEMSA9IDB4JTA4WFxuIiwgdmFsKSk7CiAKQEAgLTgzNSwxNCArNzY2LDExIEBACiAJCQlpcWNhbF90b25lX3EgPSBfczEzX3RvX3MzMigodmFsICYgMHgwM0ZGRTAwMCkgPj4gMTMpOwogCQkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogaXFjYWxfdG9uZV9pID0gJWQsIGlxY2FsX3RvbmVfcSA9ICVkXG4iLAogCQkJaXFjYWxfdG9uZV9pLCBpcWNhbF90b25lX3EpKTsKLQkJCWlmKCBjYXB0dXJlX3RpbWUgPT0gMCkKLQkJCXsKKwkJCWlmIChjYXB0dXJlX3RpbWUgPT0gMCkKIAkJCQljb250aW51ZTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlpcWNhbF90b25lX2lfYXZnPSggaXFjYWxfdG9uZV9pX2F2ZyooY2FwdHVyZV90aW1lLTEpICtpcWNhbF90b25lX2kpL2NhcHR1cmVfdGltZTsKLQkJCQlpcWNhbF90b25lX3FfYXZnPSggaXFjYWxfdG9uZV9xX2F2ZyooY2FwdHVyZV90aW1lLTEpICtpcWNhbF90b25lX3EpL2NhcHR1cmVfdGltZTsKKwkJCWVsc2UgeworCQkJCWlxY2FsX3RvbmVfaV9hdmcgPSAoaXFjYWxfdG9uZV9pX2F2ZyooY2FwdHVyZV90aW1lLTEpICsgaXFjYWxfdG9uZV9pKS9jYXB0dXJlX3RpbWU7CisJCQkJaXFjYWxfdG9uZV9xX2F2ZyA9IChpcWNhbF90b25lX3FfYXZnKihjYXB0dXJlX3RpbWUtMSkgKyBpcWNhbF90b25lX3EpL2NhcHR1cmVfdGltZTsKIAkJCX0KIAkJfQogCkBAIC04NTcsMTEgKzc4NSwxMCBAQAogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiByb3RfaV9iID0gJWQsIHJvdF9xX2IgPSAlZFxuIiwKIAkJCQkgICByb3RfaV9iLCByb3RfcV9iKSk7CiAKLQkJLy8gZi4KKwkJLyogZi4gKi8KIAkJZGl2aXNvciA9ICgoaXFfbWFnXzBfdHggKiBpcV9tYWdfMF90eCAqIDIpLzEwMjQgLSByb3RfaV9iKSAqIDI7CiAKLQkJaWYgKGRpdmlzb3IgPT0gMCkKLQkJeworCQlpZiAoZGl2aXNvciA9PSAwKSB7CiAJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3R4X2lxX2NhbGlicmF0aW9uX2xvb3A+IEVSUk9SICoqKioqKipcbiIpKTsKIAkJCVBIWV9ERUJVRygoIltDQUxdICoqIGRpdmlzb3I9MCB0byBjYWxjdWxhdGUgRVBTIGFuZCBUSEVUQSAhIVxuIikpOwogCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CkBAIC04NzYsMTggKzgwMywxNiBAQAogCQlwaHdfZGF0YS0+aXFfcnNkbF9nYWluX3R4X2QyID0gYV8yOwogCQlwaHdfZGF0YS0+aXFfcnNkbF9waGFzZV90eF9kMiA9IGJfMjsKIAotCQkvL2lmICgoYWJzKGFfMikgPCAxNTApICYmIChhYnMoYl8yKSA8IDEwMCkpCi0JCS8vaWYgKChhYnMoYV8yKSA8IDIwMCkgJiYgKGFicyhiXzIpIDwgMjAwKSkKLQkJaWYgKChhYnMoYV8yKSA8IGFfMl90aHJlc2hvbGQpICYmIChhYnMoYl8yKSA8IGJfMl90aHJlc2hvbGQpKQotCQl7CisJCS8qIGlmICgoYWJzKGFfMikgPCAxNTApICYmIChhYnMoYl8yKSA8IDEwMCkpICovCisJCS8qIGlmICgoYWJzKGFfMikgPCAyMDApICYmIChhYnMoYl8yKSA8IDIwMCkpICovCisJCWlmICgoYWJzKGFfMikgPCBhXzJfdGhyZXNob2xkKSAmJiAoYWJzKGJfMikgPCBiXzJfdGhyZXNob2xkKSkgewogCQkJdmVyaWZ5X2NvdW50Kys7CiAKIAkJCVBIWV9ERUJVRygoIltDQUxdICoqIDxfdHhfaXFfY2FsaWJyYXRpb25fbG9vcD4gKioqKioqKioqKioqKlxuIikpOwogCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogVkVSSUZZIE9LICMgJWQgISFcbiIsIHZlcmlmeV9jb3VudCkpOwogCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CiAKLQkJCWlmICh2ZXJpZnlfY291bnQgPiAyKQotCQkJeworCQkJaWYgKHZlcmlmeV9jb3VudCA+IDIpIHsKIAkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3R4X2lxX2NhbGlicmF0aW9uX2xvb3A+ICoqKioqKioqKlxuIikpOwogCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIFRYX0lRX0NBTElCUkFUSU9OIChFUFMsVEhFVEEpIE9LICEhXG4iKSk7CiAJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKQEAgLTg5NSwzNyArODIwLDI5IEBACiAJCQl9CiAKIAkJCWNvbnRpbnVlOwotCQl9Ci0JCWVsc2UKLQkJeworCQl9IGVsc2UKIAkJCXZlcmlmeV9jb3VudCA9IDA7Ci0JCX0KIAogCQlfc2luX2NvcyhiXzIsICZzaW5fYiwgJmNvc19iKTsKIAkJX3Npbl9jb3MoYl8yKjIsICZzaW5fMmIsICZjb3NfMmIpOwogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBzaW4oYi8yKT0lZCwgY29zKGIvMik9JWRcbiIsIHNpbl9iLCBjb3NfYikpOwogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBzaW4oYik9JWQsIGNvcyhiKT0lZFxuIiwgc2luXzJiLCBjb3NfMmIpKTsKIAotCQlpZiAoY29zXzJiID09IDApCi0JCXsKKwkJaWYgKGNvc18yYiA9PSAwKSB7CiAJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3R4X2lxX2NhbGlicmF0aW9uX2xvb3A+IEVSUk9SICoqKioqKipcbiIpKTsKIAkJCVBIWV9ERUJVRygoIltDQUxdICoqIGNvcyhiKT0wICEhXG4iKSk7CiAJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKIAkJCWJyZWFrOwogCQl9CiAKLQkJLy8gMTI4MCAqIDMyNzY4ID0gNDE5NDMwNDAKKwkJLyogMTI4MCAqIDMyNzY4ID0gNDE5NDMwNDAgKi8KIAkJdGVtcDEgPSAoNDE5NDMwNDAvY29zXzJiKSpjb3NfYjsKIAotCQkvL3RlbXAyID0gKDQxOTQzMDQwL2Nvc18yYikqc2luX2IqKC0xKTsKLQkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKLQkJeworCQkvKiB0ZW1wMiA9ICg0MTk0MzA0MC9jb3NfMmIpKnNpbl9iKigtMSk7ICovCisJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvKiAxc3QtY3V0ICovCiAJCQl0ZW1wMiA9ICg0MTk0MzA0MC9jb3NfMmIpKnNpbl9iKigtMSk7Ci0JCX0KLQkJZWxzZSAvLyAybmQtY3V0Ci0JCXsKKwkJZWxzZSAvKiAybmQtY3V0ICovCiAJCQl0ZW1wMiA9ICg0MTk0MzA0MCo0L2Nvc18yYikqc2luX2IqKC0xKTsKLQkJfQogCiAJCXR4X2NhbF9mbHRfYlswXSA9IF9mbG9vcih0ZW1wMS8oMzI3NjgrYV8yKSk7CiAJCXR4X2NhbF9mbHRfYlsxXSA9IF9mbG9vcih0ZW1wMi8oMzI3NjgrYV8yKSk7CkBAIC05MzcsMzcgKzg1NCwzNCBAQAogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICB0eF9jYWxfZmx0X2JbM10gPSAlZFxuIiwgdHhfY2FsX2ZsdF9iWzNdKSk7CiAKIAkJdHhfY2FsWzJdID0gdHhfY2FsX2ZsdF9iWzJdOwotCQl0eF9jYWxbMl0gPSB0eF9jYWxbMl0gKzM7CisJCXR4X2NhbFsyXSA9IHR4X2NhbFsyXSArIDM7CiAJCXR4X2NhbFsxXSA9IHR4X2NhbFsyXTsKIAkJdHhfY2FsWzNdID0gdHhfY2FsX2ZsdF9iWzNdIC0gMTI4OwotCQl0eF9jYWxbMF0gPSAtdHhfY2FsWzNdKzE7CisJCXR4X2NhbFswXSA9IC10eF9jYWxbM10gKyAxOwogCiAJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHR4X2NhbFswXSA9ICVkXG4iLCB0eF9jYWxbMF0pKTsKIAkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgdHhfY2FsWzFdID0gJWRcbiIsIHR4X2NhbFsxXSkpOwogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICB0eF9jYWxbMl0gPSAlZFxuIiwgdHhfY2FsWzJdKSk7CiAJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHR4X2NhbFszXSA9ICVkXG4iLCB0eF9jYWxbM10pKTsKIAotCQkvL2lmICgodHhfY2FsWzBdID09IDApICYmICh0eF9jYWxbMV0gPT0gMCkgJiYKLQkJLy8gICAgKHR4X2NhbFsyXSA9PSAwKSAmJiAodHhfY2FsWzNdID09IDApKQotCQkvL3sKLQkJLy8gICAgUEhZX0RFQlVHKCgiW0NBTF0gKiogPF90eF9pcV9jYWxpYnJhdGlvbl9sb29wPiAqKioqKioqKioqKioqXG4iKSk7Ci0JCS8vICAgIFBIWV9ERUJVRygoIltDQUxdICoqIFRYX0lRX0NBTElCUkFUSU9OIENPTVBMRVRFICEhXG4iKSk7Ci0JCS8vICAgIFBIWV9ERUJVRygoIltDQUxdICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOwotCQkvLyAgICByZXR1cm4gMDsKLQkJLy99CisJCS8qIGlmICgodHhfY2FsWzBdID09IDApICYmICh0eF9jYWxbMV0gPT0gMCkgJiYKKwkJICAgICAgKHR4X2NhbFsyXSA9PSAwKSAmJiAodHhfY2FsWzNdID09IDApKQorCQkgIHsgKi8KKwkJLyogICAgUEhZX0RFQlVHKCgiW0NBTF0gKiogPF90eF9pcV9jYWxpYnJhdGlvbl9sb29wPiAqKioqKioqKioqKioqXG4iKSk7CisJCSAqICAgIFBIWV9ERUJVRygoIltDQUxdICoqIFRYX0lRX0NBTElCUkFUSU9OIENPTVBMRVRFICEhXG4iKSk7CisJCSAqICAgIFBIWV9ERUJVRygoIltDQUxdICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOworCQkgKiAgICByZXR1cm4gMDsKKwkJICB9ICovCiAKLQkJLy8gZy4KLQkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKLQkJeworCQkvKiBnLiAqLworCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLyogMXN0LWN1dCAqL3sKIAkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCAmdmFsKTsKIAkJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIDB4NTQgPSAweCUwOFhcbiIsIHZhbCkpOwogCQkJdHhfY2FsX3JlZ1swXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4RjAwMDAwMDApID4+IDI4KTsKIAkJCXR4X2NhbF9yZWdbMV0gPSBfczRfdG9fczMyKCh2YWwgJiAweDBGMDAwMDAwKSA+PiAyNCk7CiAJCQl0eF9jYWxfcmVnWzJdID0gX3M0X3RvX3MzMigodmFsICYgMHgwMEYwMDAwMCkgPj4gMjApOwogCQkJdHhfY2FsX3JlZ1szXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwRjAwMDApID4+IDE2KTsKLQkJfQotCQllbHNlIC8vIDJuZC1jdXQKLQkJeworCQl9IGVsc2UgLyogMm5kLWN1dCAqL3sKIAkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDNDLCAmdmFsKTsKIAkJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIDB4M0MgPSAweCUwOFhcbiIsIHZhbCkpOwogCQkJdHhfY2FsX3JlZ1swXSA9IF9zNV90b19zMzIoKHZhbCAmIDB4RjgwMDAwMDApID4+IDI3KTsKQEAgLTk4MiwyMiArODk2LDE3IEBACiAJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHR4X2NhbF9yZWdbMl0gPSAlZFxuIiwgdHhfY2FsX3JlZ1syXSkpOwogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICB0eF9jYWxfcmVnWzNdID0gJWRcbiIsIHR4X2NhbF9yZWdbM10pKTsKIAotCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAotCQl7Ci0JCQlpZiAoKCh0eF9jYWxfcmVnWzBdPT03KSB8fCAodHhfY2FsX3JlZ1swXT09KC04KSkpICYmCi0JCQkJKCh0eF9jYWxfcmVnWzNdPT03KSB8fCAodHhfY2FsX3JlZ1szXT09KC04KSkpKQotCQkJeworCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLyogMXN0LWN1dCAqL3sKKwkJCWlmICgoKHR4X2NhbF9yZWdbMF0gPT0gNykgfHwgKHR4X2NhbF9yZWdbMF0gPT0gKC04KSkpICYmCisJCQkJKCh0eF9jYWxfcmVnWzNdID09IDcpIHx8ICh0eF9jYWxfcmVnWzNdID09ICgtOCkpKSkgewogCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIDxfdHhfaXFfY2FsaWJyYXRpb25fbG9vcD4gKioqKioqKioqXG4iKSk7CiAJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogVFhfSVFfQ0FMSUJSQVRJT04gU0FUVUFUSU9OICEhXG4iKSk7CiAJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKIAkJCQlicmVhazsKIAkJCX0KLQkJfQotCQllbHNlIC8vIDJuZC1jdXQKLQkJewotCQkJaWYgKCgodHhfY2FsX3JlZ1swXT09MzEpIHx8ICh0eF9jYWxfcmVnWzBdPT0oLTMyKSkpICYmCi0JCQkJKCh0eF9jYWxfcmVnWzNdPT0zMSkgfHwgKHR4X2NhbF9yZWdbM109PSgtMzIpKSkpCi0JCQl7CisJCX0gZWxzZSAvKiAybmQtY3V0ICoveworCQkJaWYgKCgodHhfY2FsX3JlZ1swXSA9PSAzMSkgfHwgKHR4X2NhbF9yZWdbMF0gPT0gKC0zMikpKSAmJgorCQkJCSgodHhfY2FsX3JlZ1szXSA9PSAzMSkgfHwgKHR4X2NhbF9yZWdbM10gPT0gKC0zMikpKSkgewogCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIDxfdHhfaXFfY2FsaWJyYXRpb25fbG9vcD4gKioqKioqKioqXG4iKSk7CiAJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogVFhfSVFfQ0FMSUJSQVRJT04gU0FUVUFUSU9OICEhXG4iKSk7CiAJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKQEAgLTEwMTQsOCArOTIzLDcgQEAKIAkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgYXBwbHkgdHhfY2FsWzJdID0gJWRcbiIsIHR4X2NhbFsyXSkpOwogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICBhcHBseSB0eF9jYWxbM10gPSAlZFxuIiwgdHhfY2FsWzNdKSk7CiAKLQkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKLQkJeworCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLyogMXN0LWN1dCAqL3sKIAkJCXZhbCAmPSAweDAwMDBGRkZGOwogCQkJdmFsIHw9ICgoX3MzMl90b19zNCh0eF9jYWxbMF0pIDw8IDI4KXwKIAkJCQkJKF9zMzJfdG9fczQodHhfY2FsWzFdKSA8PCAyNCl8CkBAIC0xMDI0LDkgKzkzMiw3IEBACiAJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgdmFsKTsKIAkJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIENBTElCX0RBVEEgPSAweCUwOFhcbiIsIHZhbCkpOwogCQkJcmV0dXJuIDA7Ci0JCX0KLQkJZWxzZSAvLyAybmQtY3V0Ci0JCXsKKwkJfSBlbHNlIC8qIDJuZC1jdXQgKi97CiAJCQl2YWwgJj0gMHgwMDAwMDNGRjsKIAkJCXZhbCB8PSAoKF9zMzJfdG9fczUodHhfY2FsWzBdKSA8PCAyNyl8CiAJCQkJCShfczMyX3RvX3M2KHR4X2NhbFsxXSkgPDwgMjEpfApAQCAtMTAzNyw3ICs5NDMsNyBAQAogCQkJcmV0dXJuIDA7CiAJCX0KIAotCQkvLyBpLiBTZXQgImNhbGliX3N0YXJ0IiB0byAweDAKKwkJLyogaS4gU2V0ICJjYWxpYl9zdGFydCIgdG8gMHgwICovCiAJCXJlZ19tb2RlX2N0cmwgJj0gfk1BU0tfQ0FMSUJfU1RBUlQ7CiAJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKTsKIAkJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKQEAgLTEwNjEsMjYgKzk2NywyNiBAQAogCiAJUEhZX0RFQlVHKCgiW0NBTF0gLT4gWzRdX3R4X2lxX2NhbGlicmF0aW9uKClcbiIpKTsKIAotCS8vMHgwMSAweEVFM0ZDMiAgOyAzQjhGRiAgOyBDYWxpYnJhdGlvbiAoNmEpLiBlbmFibGUgVFggSVEgY2FsaWJyYXRpb24gbG9vcCBjaXJjdWl0cworCS8qIDB4MDEgMHhFRTNGQzIgIDsgM0I4RkYgIDsgQ2FsaWJyYXRpb24gKDZhKS4gZW5hYmxlIFRYIElRIGNhbGlicmF0aW9uIGxvb3AgY2lyY3VpdHMgKi8KIAlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDEsICgxPDwyNCl8MHhFRTNGQzIpOwotCS8vMHgwQiAweDE5MDVENiAgOyAwNjQxNyAgOyBDYWxpYnJhdGlvbiAoNmIpLiBlbmFibGUgVFggSS9RIGNhbCBsb29wIHNxdWFyaW5nIGNpcmN1aXQKLQlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDExLCAoMTE8PDI0KXwweDE5QkRENik7IC8vIDIwMDYwNjEyLjEuYSAweDE5MDVENik7Ci0JLy8weDA1IDB4MjRDNjBBICA7IDA5MzE4ICA7IENhbGlicmF0aW9uICg2YykuIHNldHRpbmcgVFgtVkdBIGdhaW46IFRYR0NIPTIgJiBHUEs9MTEwIC0tPiB0byBiZSBvcHRpbWl6ZWQKLQlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDUsICg1PDwyNCl8MHgyNEM2MEEpOyAvLzB4MjRDNjBBIChoaWdoIHRlbXBlcmF0dXJlKQotICAgIC8vMHgwNiAweDA2ODgwQyAgOyAwMUEyMCAgOyBDYWxpYnJhdGlvbiAoNmQpLiBSWEdDSD0wMDsgUlhHQ0w9MTAwIDAwMCAoUlhWR0E9MzIpIC0tPiB0byBiZSBvcHRpbWl6ZWQKLQlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDYsICg2PDwyNCl8MHgzNDg4MEMpOyAvLyAyMDA2MDYxMi4xLmEgMHgwNjg5MEMpOwotCS8vMHgwMCAweEZERjFDMCAgOyAzRjdDNyAgOyBDYWxpYnJhdGlvbiAoNmUpLiB0dXJuIG9uIElRIGltYmFsYW5jZS9UZXN0IG1vZGUKKwkvKiAweDBCIDB4MTkwNUQ2ICA7IDA2NDE3ICA7IENhbGlicmF0aW9uICg2YikuIGVuYWJsZSBUWCBJL1EgY2FsIGxvb3Agc3F1YXJpbmcgY2lyY3VpdCAqLworCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMTEsICgxMTw8MjQpfDB4MTlCREQ2KTsgLyogMjAwNjA2MTIuMS5hIDB4MTkwNUQ2KTsgKi8KKwkvKiAweDA1IDB4MjRDNjBBICA7IDA5MzE4ICA7IENhbGlicmF0aW9uICg2YykuIHNldHRpbmcgVFgtVkdBIGdhaW46IFRYR0NIPTIgJiBHUEs9MTEwIC0tPiB0byBiZSBvcHRpbWl6ZWQgKi8KKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDUsICg1PDwyNCl8MHgyNEM2MEEpOyAvKiAweDI0QzYwQSAoaGlnaCB0ZW1wZXJhdHVyZSkgKi8KKyAgICAgICAgLyogMHgwNiAweDA2ODgwQyAgOyAwMUEyMCAgOyBDYWxpYnJhdGlvbiAoNmQpLiBSWEdDSD0wMDsgUlhHQ0w9MTAwIDAwMCAoUlhWR0E9MzIpIC0tPiB0byBiZSBvcHRpbWl6ZWQgKi8KKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDYsICg2PDwyNCl8MHgzNDg4MEMpOyAvKiAyMDA2MDYxMi4xLmEgMHgwNjg5MEMpOyAqLworCS8qIDB4MDAgMHhGREYxQzAgIDsgM0Y3QzcgIDsgQ2FsaWJyYXRpb24gKDZlKS4gdHVybiBvbiBJUSBpbWJhbGFuY2UvVGVzdCBtb2RlICovCiAJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAwLCAoMDw8MjQpfDB4RkRGMUMwKTsKLQkvLzsgW0JCLWNoaXBdOiBDYWxpYnJhdGlvbiAoNmYpLlNlbmQgdGVzdCBwYXR0ZXJuCi0JLy87IFtCQi1jaGlwXTogQ2FsaWJyYXRpb24gKDZnKS4gU2VhcmNoIFJYR0NMIG9wdGltYWwgdmFsdWUKLQkvLzsgW0JCLWNoaXBdOiBDYWxpYnJhdGlvbiAoNmgpLiBDYWN1bGF0ZSBUWC1wYXRoIElRIGltYmFsYW5jZSBhbmQgc2V0dGluZyBUWCBwYXRoIElRIGNvbXBlbnNhdGlvbiB0YWJsZQotCS8vcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAzLCAoMzw8MjQpfDB4MDI1NTg2KTsKKwkvKiA7IFtCQi1jaGlwXTogQ2FsaWJyYXRpb24gKDZmKS5TZW5kIHRlc3QgcGF0dGVybiAqLworCS8qIDsgW0JCLWNoaXBdOiBDYWxpYnJhdGlvbiAoNmcpLiBTZWFyY2ggUlhHQ0wgb3B0aW1hbCB2YWx1ZSAqLworCS8qIDsgW0JCLWNoaXBdOiBDYWxpYnJhdGlvbiAoNmgpLiBDYWN1bGF0ZSBUWC1wYXRoIElRIGltYmFsYW5jZSBhbmQgc2V0dGluZyBUWCBwYXRoIElRIGNvbXBlbnNhdGlvbiB0YWJsZSAqLworCS8qIHBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMywgKDM8PDI0KXwweDAyNTU4Nik7ICovCiAKLQltc2xlZXAoMzApOyAvLyAyMDA2MDYxMi4xLmEgMzBtcyBkZWxheS4gQWRkIHRoZSBmb2xsb3cgMiBsaW5lcwotCS8vVG8gYWRqdXN0IFRYVkdBIHRvIGZpdCBpcV9tYWdfMCByYW5nZSBmcm9tIDEyNTAgfiAxNzUwCi0JYWRqdXN0X1RYVkdBX2Zvcl9pcV9tYWcoIHBod19kYXRhICk7CisJbXNsZWVwKDMwKTsgLyogMjAwNjA2MTIuMS5hIDMwbXMgZGVsYXkuIEFkZCB0aGUgZm9sbG93IDIgbGluZXMgKi8KKwkvKiBUbyBhZGp1c3QgVFhWR0EgdG8gZml0IGlxX21hZ18wIHJhbmdlIGZyb20gMTI1MCB+IDE3NTAgKi8KKwlhZGp1c3RfVFhWR0FfZm9yX2lxX21hZyhwaHdfZGF0YSk7CiAKLQkvLyBhLiBEaXNhYmxlIEFHQworCS8qIGEuIERpc2FibGUgQUdDICovCiAJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDMsICZyZWdfYWdjX2N0cmwzKTsKIAlyZWdfYWdjX2N0cmwzICY9IH5CSVQoMik7CiAJcmVnX2FnY19jdHJsMyB8PSAoTUFTS19MTkFfRklYX0dBSU58TUFTS19BR0NfRklYKTsKQEAgLTEwOTIsMTYgKzk5OCwxMiBAQAogCiAJcmVzdWx0ID0gX3R4X2lxX2NhbGlicmF0aW9uX2xvb3Bfd2luYm9uZChwaHdfZGF0YSwgMTUwLCAxMDApOwogCi0JaWYgKHJlc3VsdCA+IDApCi0JewotCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAotCQl7CisJaWYgKHJlc3VsdCA+IDApIHsKKwkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8qIDFzdC1jdXQgKi97CiAJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgJnZhbCk7CiAJCQl2YWwgJj0gMHgwMDAwRkZGRjsKIAkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCB2YWwpOwotCQl9Ci0JCWVsc2UgLy8gMm5kLWN1dAotCQl7CisJCX0gZWxzZSAvKiAybmQtY3V0Ki97CiAJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgJnZhbCk7CiAJCQl2YWwgJj0gMHgwMDAwMDNGRjsKIAkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDNDLCB2YWwpOwpAQCAtMTEwOSwzMiArMTAxMSwyNCBAQAogCiAJCXJlc3VsdCA9IF90eF9pcV9jYWxpYnJhdGlvbl9sb29wX3dpbmJvbmQocGh3X2RhdGEsIDMwMCwgMjAwKTsKIAotCQlpZiAocmVzdWx0ID4gMCkKLQkJewotCQkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKLQkJCXsKKwkJaWYgKHJlc3VsdCA+IDApIHsKKwkJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvKiAxc3QtY3V0ICovewogCQkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCAmdmFsKTsKIAkJCQl2YWwgJj0gMHgwMDAwRkZGRjsKIAkJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgdmFsKTsKLQkJCX0KLQkJCWVsc2UgLy8gMm5kLWN1dAotCQkJeworCQkJfSBlbHNlIC8qIDJuZC1jdXQqL3sKIAkJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgJnZhbCk7CiAJCQkJdmFsICY9IDB4MDAwMDAzRkY7CiAJCQkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4M0MsIHZhbCk7CiAJCQl9CiAKIAkJCXJlc3VsdCA9IF90eF9pcV9jYWxpYnJhdGlvbl9sb29wX3dpbmJvbmQocGh3X2RhdGEsIDUwMCwgNDAwKTsKLQkJCWlmIChyZXN1bHQgPiAwKQotCQkJewotCQkJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0Ci0JCQkJeworCQkJaWYgKHJlc3VsdCA+IDApIHsKKwkJCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLyogMXN0LWN1dCAqL3sKIAkJCQkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsICZ2YWwpOwogCQkJCQl2YWwgJj0gMHgwMDAwRkZGRjsKIAkJCQkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsIHZhbCk7Ci0JCQkJfQotCQkJCWVsc2UgLy8gMm5kLWN1dAotCQkJCXsKKwkJCQl9IGVsc2UgLyogMm5kLWN1dCAqL3sKIAkJCQkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4M0MsICZ2YWwpOwogCQkJCQl2YWwgJj0gMHgwMDAwMDNGRjsKIAkJCQkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4M0MsIHZhbCk7CkBAIC0xMTQzLDIwICsxMDM3LDE2IEBACiAKIAkJCQlyZXN1bHQgPSBfdHhfaXFfY2FsaWJyYXRpb25fbG9vcF93aW5ib25kKHBod19kYXRhLCA3MDAsIDUwMCk7CiAKLQkJCQlpZiAocmVzdWx0ID4gMCkKLQkJCQl7CisJCQkJaWYgKHJlc3VsdCA+IDApIHsKIAkJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF90eF9pcV9jYWxpYnJhdGlvbj4gKioqKioqKioqKioqKipcbiIpKTsKIAkJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogVFhfSVFfQ0FMSUJSQVRJT04gRkFJTFVSRSAhIVxuIikpOwogCQkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOwogCi0JCQkJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0Ci0JCQkJCXsKKwkJCQkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8qIDFzdC1jdXQgKi97CiAJCQkJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgJnZhbCk7CiAJCQkJCQl2YWwgJj0gMHgwMDAwRkZGRjsKIAkJCQkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCB2YWwpOwotCQkJCQl9Ci0JCQkJCWVsc2UgLy8gMm5kLWN1dAotCQkJCQl7CisJCQkJCX0gZWxzZSAvKiAybmQtY3V0ICovewogCQkJCQkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4M0MsICZ2YWwpOwogCQkJCQkJdmFsICY9IDB4MDAwMDAzRkY7CiAJCQkJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgdmFsKTsKQEAgLTExNjYsMzAgKzEwNTYsMjcgQEAKIAkJfQogCX0KIAotCS8vIGkuIFNldCAiY2FsaWJfc3RhcnQiIHRvIDB4MAorCS8qIGkuIFNldCAiY2FsaWJfc3RhcnQiIHRvIDB4MCAqLwogCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCAmcmVnX21vZGVfY3RybCk7CiAJcmVnX21vZGVfY3RybCAmPSB+TUFTS19DQUxJQl9TVEFSVDsKIAlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CiAJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKIAotCS8vIGcuIEVuYWJsZSBBR0MKLQkvL2h3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCAmdmFsKTsKKwkvKiBnLiBFbmFibGUgQUdDICovCisJLyogaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDMsICZ2YWwpOyAqLwogCXJlZ19hZ2NfY3RybDMgfD0gQklUKDIpOwogCXJlZ19hZ2NfY3RybDMgJj0gfihNQVNLX0xOQV9GSVhfR0FJTnxNQVNLX0FHQ19GSVgpOwogCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCByZWdfYWdjX2N0cmwzKTsKIAogI2lmZGVmIF9ERUJVRwotCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0Ci0JeworCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvKiAxc3QtY3V0ICovewogCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgJnZhbCk7CiAJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIDB4NTQgPSAweCUwOFhcbiIsIHZhbCkpOwogCQl0eF9jYWxfcmVnWzBdID0gX3M0X3RvX3MzMigodmFsICYgMHhGMDAwMDAwMCkgPj4gMjgpOwogCQl0eF9jYWxfcmVnWzFdID0gX3M0X3RvX3MzMigodmFsICYgMHgwRjAwMDAwMCkgPj4gMjQpOwogCQl0eF9jYWxfcmVnWzJdID0gX3M0X3RvX3MzMigodmFsICYgMHgwMEYwMDAwMCkgPj4gMjApOwogCQl0eF9jYWxfcmVnWzNdID0gX3M0X3RvX3MzMigodmFsICYgMHgwMDBGMDAwMCkgPj4gMTYpOwotCX0KLQllbHNlIC8vIDJuZC1jdXQKLQl7CisJfSBlbHNlIC8qIDJuZC1jdXQgKi8gewogCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgJnZhbCk7CiAJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIDB4M0MgPSAweCUwOFhcbiIsIHZhbCkpOwogCQl0eF9jYWxfcmVnWzBdID0gX3M1X3RvX3MzMigodmFsICYgMHhGODAwMDAwMCkgPj4gMjcpOwpAQCAtMTIwNiwxMSArMTA5MywxMyBAQAogI2VuZGlmCiAKIAotCS8vIGZvciB0ZXN0IC0gQkVOCi0JLy8gUkYgQ29udHJvbCBPdmVycmlkZQorCS8qCisJICogZm9yIHRlc3QgLSBCRU4KKwkgKiBSRiBDb250cm9sIE92ZXJyaWRlCisJICovCiB9CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB1OCBfcnhfaXFfY2FsaWJyYXRpb25fbG9vcF93aW5ib25kKHN0cnVjdCBod19kYXRhICpwaHdfZGF0YSwgdTE2IGZhY3RvciwgdTMyIGZyZXF1ZW5jeSkKIHsKIAl1MzIgICAgIHJlZ19tb2RlX2N0cmw7CkBAIC0xMjM2LDUxICsxMTI1LDQ5IEBACiAJdTMyICAgICBwd3JfaW1hZ2U7CiAJdTggICAgICB2ZXJpZnlfY291bnQ7CiAKLQlzMzIgICAgIGlxY2FsX3RvbmVfaV9hdmcsaXFjYWxfdG9uZV9xX2F2ZzsKLQlzMzIgICAgIGlxY2FsX2ltYWdlX2lfYXZnLGlxY2FsX2ltYWdlX3FfYXZnOwotCXUxNgkJY2FwdHVyZV90aW1lOworCXMzMiAgICAgaXFjYWxfdG9uZV9pX2F2ZywgaXFjYWxfdG9uZV9xX2F2ZzsKKwlzMzIgICAgIGlxY2FsX2ltYWdlX2lfYXZnLCBpcWNhbF9pbWFnZV9xX2F2ZzsKKwl1MTYJY2FwdHVyZV90aW1lOwogCiAJUEhZX0RFQlVHKCgiW0NBTF0gLT4gWzVdX3J4X2lxX2NhbGlicmF0aW9uX2xvb3AoKVxuIikpOwogCVBIWV9ERUJVRygoIltDQUxdICoqIGZhY3RvciA9ICVkXG4iLCBmYWN0b3IpKTsKIAogCi0vLyBSRiBDb250cm9sIE92ZXJyaWRlCisvKiBSRiBDb250cm9sIE92ZXJyaWRlICovCiAJaHdfZ2V0X2N4eF9yZWcocGh3X2RhdGEsIDB4ODAsICZ2YWwpOwogCXZhbCB8PSBCSVQoMTkpOwogCWh3X3NldF9jeHhfcmVnKHBod19kYXRhLCAweDgwLCB2YWwpOwogCi0vLyBSRl9DdHJsCisvKiBSRl9DdHJsICovCiAJaHdfZ2V0X2N4eF9yZWcocGh3X2RhdGEsIDB4RTQsICZ2YWwpOwogCXZhbCB8PSBCSVQoMCk7CiAJaHdfc2V0X2N4eF9yZWcocGh3X2RhdGEsIDB4RTQsIHZhbCk7CiAJUEhZX0RFQlVHKCgiW0NBTF0gKiogUkZfQ1RSTCgweEU0KSA9IDB4JTA4WCIsIHZhbCkpOwogCi0JaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTgsIDB4NDQ0NDQ0NDQpOyAvLyBJUV9BbHBoYQorCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU4LCAweDQ0NDQ0NDQ0KTsgLyogSVFfQWxwaGEgKi8KIAotCS8vIGIuCisJLyogYi4gKi8KIAogCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCAmcmVnX21vZGVfY3RybCk7CiAJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMIChyZWFkKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOwogCiAJdmVyaWZ5X2NvdW50ID0gMDsKIAotCS8vZm9yIChsb29wID0gMDsgbG9vcCA8IDE7IGxvb3ArKykKLQkvL2ZvciAobG9vcCA9IDA7IGxvb3AgPCBMT09QX1RJTUVTOyBsb29wKyspCisJLyogZm9yIChsb29wID0gMDsgbG9vcCA8IDE7IGxvb3ArKykgKi8KKwkvKiBmb3IgKGxvb3AgPSAwOyBsb29wIDwgTE9PUF9USU1FUzsgbG9vcCsrKSAqLwogCWxvb3AgPSBMT09QX1RJTUVTOwotCXdoaWxlIChsb29wID4gMCkKLQl7CisJd2hpbGUgKGxvb3AgPiAwKSB7CiAJCVBIWV9ERUJVRygoIltDQUxdIFslZC5dIDxfcnhfaXFfY2FsaWJyYXRpb25fbG9vcD5cbiIsIChMT09QX1RJTUVTLWxvb3ArMSkpKTsKLQkJaXFjYWxfdG9uZV9pX2F2Zz0wOwotCQlpcWNhbF90b25lX3FfYXZnPTA7Ci0JCWlxY2FsX2ltYWdlX2lfYXZnPTA7Ci0JCWlxY2FsX2ltYWdlX3FfYXZnPTA7Ci0JCWNhcHR1cmVfdGltZT0wOworCQlpcWNhbF90b25lX2lfYXZnID0gMDsKKwkJaXFjYWxfdG9uZV9xX2F2ZyA9IDA7CisJCWlxY2FsX2ltYWdlX2lfYXZnID0gMDsKKwkJaXFjYWxfaW1hZ2VfcV9hdmcgPSAwOworCQljYXB0dXJlX3RpbWUgPSAwOwogCi0JCWZvcihjYXB0dXJlX3RpbWU9MDsgY2FwdHVyZV90aW1lPDEwOyBjYXB0dXJlX3RpbWUrKykKLQkJewotCQkvLyBpLiBTZXQgImNhbGliX3N0YXJ0IiB0byAweDAKKwkJZm9yIChjYXB0dXJlX3RpbWUgPSAwOyBjYXB0dXJlX3RpbWUgPCAxMDsgY2FwdHVyZV90aW1lKyspIHsKKwkJLyogaS4gU2V0ICJjYWxpYl9zdGFydCIgdG8gMHgwICovCiAJCXJlZ19tb2RlX2N0cmwgJj0gfk1BU0tfQ0FMSUJfU1RBUlQ7Ci0JCWlmKCAhaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHJlZ19tb2RlX2N0cmwpICkvLzIwMDYwNzE4LjEgbW9kaWZ5CisJCWlmICghaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHJlZ19tb2RlX2N0cmwpKS8qMjAwNjA3MTguMSBtb2RpZnkgKi8KIAkJCXJldHVybiAwOwogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOwogCkBAIC0xMjg5LDcgKzExNzYsNyBAQAogCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CiAJCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CiAKLQkJLy8gYy4KKwkJLyogYy4gKi8KIAkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19DQUxJQl9SRUFEMSwgJnZhbCk7CiAJCVBIWV9ERUJVRygoIltDQUxdICAgIENBTElCX1JFQUQxID0gMHglMDhYXG4iLCB2YWwpKTsKIApAQCAtMTMwNSwxNiArMTE5MiwxMyBAQAogCQlpcWNhbF9pbWFnZV9xID0gX3MxM190b19zMzIoKHZhbCAmIDB4MDNGRkUwMDApID4+IDEzKTsKIAkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogaXFjYWxfaW1hZ2VfaSA9ICVkLCBpcWNhbF9pbWFnZV9xID0gJWRcbiIsCiAJCQkJICAgaXFjYWxfaW1hZ2VfaSwgaXFjYWxfaW1hZ2VfcSkpOwotCQkJaWYoIGNhcHR1cmVfdGltZSA9PSAwKQotCQkJeworCQkJaWYgKGNhcHR1cmVfdGltZSA9PSAwKQogCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCWlxY2FsX2ltYWdlX2lfYXZnPSggaXFjYWxfaW1hZ2VfaV9hdmcqKGNhcHR1cmVfdGltZS0xKSAraXFjYWxfaW1hZ2VfaSkvY2FwdHVyZV90aW1lOwotCQkJCWlxY2FsX2ltYWdlX3FfYXZnPSggaXFjYWxfaW1hZ2VfcV9hdmcqKGNhcHR1cmVfdGltZS0xKSAraXFjYWxfaW1hZ2VfcSkvY2FwdHVyZV90aW1lOwotCQkJCWlxY2FsX3RvbmVfaV9hdmc9KCBpcWNhbF90b25lX2lfYXZnKihjYXB0dXJlX3RpbWUtMSkgK2lxY2FsX3RvbmVfaSkvY2FwdHVyZV90aW1lOwotCQkJCWlxY2FsX3RvbmVfcV9hdmc9KCBpcWNhbF90b25lX3FfYXZnKihjYXB0dXJlX3RpbWUtMSkgK2lxY2FsX3RvbmVfcSkvY2FwdHVyZV90aW1lOworCQkJZWxzZSB7CisJCQkJaXFjYWxfaW1hZ2VfaV9hdmcgPSAoaXFjYWxfaW1hZ2VfaV9hdmcqKGNhcHR1cmVfdGltZS0xKSArIGlxY2FsX2ltYWdlX2kpL2NhcHR1cmVfdGltZTsKKwkJCQlpcWNhbF9pbWFnZV9xX2F2ZyA9IChpcWNhbF9pbWFnZV9xX2F2ZyooY2FwdHVyZV90aW1lLTEpICsgaXFjYWxfaW1hZ2VfcSkvY2FwdHVyZV90aW1lOworCQkJCWlxY2FsX3RvbmVfaV9hdmcgPSAoaXFjYWxfdG9uZV9pX2F2ZyooY2FwdHVyZV90aW1lLTEpICsgaXFjYWxfdG9uZV9pKS9jYXB0dXJlX3RpbWU7CisJCQkJaXFjYWxfdG9uZV9xX2F2ZyA9IChpcWNhbF90b25lX3FfYXZnKihjYXB0dXJlX3RpbWUtMSkgKyBpcWNhbF90b25lX3EpL2NhcHR1cmVfdGltZTsKIAkJCX0KIAkJfQogCkBAIC0xMzI0LDcgKzEyMDgsNyBAQAogCQlpcWNhbF90b25lX2kgPSBpcWNhbF90b25lX2lfYXZnOwogCQlpcWNhbF90b25lX3EgPSBpcWNhbF90b25lX3FfYXZnOwogCi0JCS8vIGQuCisJCS8qIGQuICovCiAJCXJvdF90b25lX2lfYiA9IChpcWNhbF90b25lX2kgKiBpcWNhbF90b25lX2kgKwogCQkJCQkJaXFjYWxfdG9uZV9xICogaXFjYWxfdG9uZV9xKSAvIDEwMjQ7CiAJCXJvdF90b25lX3FfYiA9IChpcWNhbF90b25lX2kgKiBpcWNhbF90b25lX3EgKiAoLTEpICsKQEAgLTEzMzksOSArMTIyMyw4IEBACiAJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHJvdF9pbWFnZV9pX2IgPSAlZFxuIiwgcm90X2ltYWdlX2lfYikpOwogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiByb3RfaW1hZ2VfcV9iID0gJWRcbiIsIHJvdF9pbWFnZV9xX2IpKTsKIAotCQkvLyBmLgotCQlpZiAocm90X3RvbmVfaV9iID09IDApCi0JCXsKKwkJLyogZi4gKi8KKwkJaWYgKHJvdF90b25lX2lfYiA9PSAwKSB7CiAJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3J4X2lxX2NhbGlicmF0aW9uX2xvb3A+IEVSUk9SICoqKioqKipcbiIpKTsKIAkJCVBIWV9ERUJVRygoIltDQUxdICoqIHJvdF90b25lX2lfYj0wIHRvIGNhbGN1bGF0ZSBFUFMgYW5kIFRIRVRBICEhXG4iKSk7CiAJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKQEAgLTEzNjMsMjYgKzEyNDYsMjEgQEAKIAkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogc2luKGIvMik9JWQsIGNvcyhiLzIpPSVkXG4iLCBzaW5fYiwgY29zX2IpKTsKIAkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogc2luKGIpPSVkLCBjb3MoYik9JWRcbiIsIHNpbl8yYiwgY29zXzJiKSk7CiAKLQkJaWYgKGNvc18yYiA9PSAwKQotCQl7CisJCWlmIChjb3NfMmIgPT0gMCkgewogCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF9yeF9pcV9jYWxpYnJhdGlvbl9sb29wPiBFUlJPUiAqKioqKioqXG4iKSk7CiAJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBjb3MoYik9MCAhIVxuIikpOwogCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CiAJCQlicmVhazsKIAkJfQogCi0JCS8vIDEyODAgKiAzMjc2OCA9IDQxOTQzMDQwCisJCS8qIDEyODAgKiAzMjc2OCA9IDQxOTQzMDQwICovCiAJCXRlbXAxID0gKDQxOTQzMDQwL2Nvc18yYikqY29zX2I7CiAKLQkJLy90ZW1wMiA9ICg0MTk0MzA0MC9jb3NfMmIpKnNpbl9iKigtMSk7Ci0JCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0Ci0JCXsKKwkJLyogdGVtcDIgPSAoNDE5NDMwNDAvY29zXzJiKSpzaW5fYiooLTEpOyAqLworCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikvKiAxc3QtY3V0ICovCiAJCQl0ZW1wMiA9ICg0MTk0MzA0MC9jb3NfMmIpKnNpbl9iKigtMSk7Ci0JCX0KLQkJZWxzZSAvLyAybmQtY3V0Ci0JCXsKKwkJZWxzZS8qIDJuZC1jdXQgKi8KIAkJCXRlbXAyID0gKDQxOTQzMDQwKjQvY29zXzJiKSpzaW5fYiooLTEpOwotCQl9CiAKIAkJcnhfY2FsX2ZsdF9iWzBdID0gX2Zsb29yKHRlbXAxLygzMjc2OCthXzIpKTsKIAkJcnhfY2FsX2ZsdF9iWzFdID0gX2Zsb29yKHRlbXAyLygzMjc2OC1hXzIpKTsKQEAgLTE0MDMsMjMgKzEyODEsMjEgQEAKIAkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgcnhfY2FsWzJdID0gJWRcbiIsIHJ4X2NhbFsyXSkpOwogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICByeF9jYWxbM10gPSAlZFxuIiwgcnhfY2FsWzNdKSk7CiAKLQkJLy8gZS4KKwkJLyogZS4gKi8KIAkJcHdyX3RvbmUgPSAoaXFjYWxfdG9uZV9pKmlxY2FsX3RvbmVfaSArIGlxY2FsX3RvbmVfcSppcWNhbF90b25lX3EpOwogCQlwd3JfaW1hZ2UgPSAoaXFjYWxfaW1hZ2VfaSppcWNhbF9pbWFnZV9pICsgaXFjYWxfaW1hZ2VfcSppcWNhbF9pbWFnZV9xKSpmYWN0b3I7CiAKIAkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogcHdyX3RvbmUgID0gJWRcbiIsIHB3cl90b25lKSk7CiAJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHB3cl9pbWFnZSAgPSAlZFxuIiwgcHdyX2ltYWdlKSk7CiAKLQkJaWYgKHB3cl90b25lID4gcHdyX2ltYWdlKQotCQl7CisJCWlmIChwd3JfdG9uZSA+IHB3cl9pbWFnZSkgewogCQkJdmVyaWZ5X2NvdW50Kys7CiAKIAkJCVBIWV9ERUJVRygoIltDQUxdICoqIDxfcnhfaXFfY2FsaWJyYXRpb25fbG9vcD4gKioqKioqKioqKioqKlxuIikpOwogCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogVkVSSUZZIE9LICMgJWQgISFcbiIsIHZlcmlmeV9jb3VudCkpOwogCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CiAKLQkJCWlmICh2ZXJpZnlfY291bnQgPiAyKQotCQkJeworCQkJaWYgKHZlcmlmeV9jb3VudCA+IDIpIHsKIAkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3J4X2lxX2NhbGlicmF0aW9uX2xvb3A+ICoqKioqKioqKlxuIikpOwogCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIFJYX0lRX0NBTElCUkFUSU9OIE9LICEhXG4iKSk7CiAJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKQEAgLTE0MjgsMTkgKzEzMDQsMTYgQEAKIAogCQkJY29udGludWU7CiAJCX0KLQkJLy8gZy4KKwkJLyogZy4gKi8KIAkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsICZ2YWwpOwogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiAweDU0ID0gMHglMDhYXG4iLCB2YWwpKTsKIAotCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAotCQl7CisJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvKiAxc3QtY3V0ICovewogCQkJcnhfY2FsX3JlZ1swXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwMEYwMDApID4+IDEyKTsKIAkJCXJ4X2NhbF9yZWdbMV0gPSBfczRfdG9fczMyKCh2YWwgJiAweDAwMDAwRjAwKSA+PiAgOCk7CiAJCQlyeF9jYWxfcmVnWzJdID0gX3M0X3RvX3MzMigodmFsICYgMHgwMDAwMDBGMCkgPj4gIDQpOwogCQkJcnhfY2FsX3JlZ1szXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwMDAwMEYpKTsKLQkJfQotCQllbHNlIC8vIDJuZC1jdXQKLQkJeworCQl9IGVsc2UgLyogMm5kLWN1dCAqL3sKIAkJCXJ4X2NhbF9yZWdbMF0gPSBfczVfdG9fczMyKCh2YWwgJiAweEY4MDAwMDAwKSA+PiAyNyk7CiAJCQlyeF9jYWxfcmVnWzFdID0gX3M2X3RvX3MzMigodmFsICYgMHgwN0UwMDAwMCkgPj4gMjEpOwogCQkJcnhfY2FsX3JlZ1syXSA9IF9zNl90b19zMzIoKHZhbCAmIDB4MDAxRjgwMDApID4+IDE1KTsKQEAgLTE0NTIsMjIgKzEzMjUsMTcgQEAKIAkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgcnhfY2FsX3JlZ1syXSA9ICVkXG4iLCByeF9jYWxfcmVnWzJdKSk7CiAJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHJ4X2NhbF9yZWdbM10gPSAlZFxuIiwgcnhfY2FsX3JlZ1szXSkpOwogCi0JCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0Ci0JCXsKLQkJCWlmICgoKHJ4X2NhbF9yZWdbMF09PTcpIHx8IChyeF9jYWxfcmVnWzBdPT0oLTgpKSkgJiYKLQkJCQkoKHJ4X2NhbF9yZWdbM109PTcpIHx8IChyeF9jYWxfcmVnWzNdPT0oLTgpKSkpCi0JCQl7CisJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvKiAxc3QtY3V0ICoveworCQkJaWYgKCgocnhfY2FsX3JlZ1swXSA9PSA3KSB8fCAocnhfY2FsX3JlZ1swXSA9PSAoLTgpKSkgJiYKKwkJCQkoKHJ4X2NhbF9yZWdbM10gPT0gNykgfHwgKHJ4X2NhbF9yZWdbM10gPT0gKC04KSkpKSB7CiAJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF9yeF9pcV9jYWxpYnJhdGlvbl9sb29wPiAqKioqKioqKipcbiIpKTsKIAkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBSWF9JUV9DQUxJQlJBVElPTiBTQVRVQVRJT04gISFcbiIpKTsKIAkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOwogCQkJCWJyZWFrOwogCQkJfQotCQl9Ci0JCWVsc2UgLy8gMm5kLWN1dAotCQl7Ci0JCQlpZiAoKChyeF9jYWxfcmVnWzBdPT0zMSkgfHwgKHJ4X2NhbF9yZWdbMF09PSgtMzIpKSkgJiYKLQkJCQkoKHJ4X2NhbF9yZWdbM109PTMxKSB8fCAocnhfY2FsX3JlZ1szXT09KC0zMikpKSkKLQkJCXsKKwkJfSBlbHNlIC8qIDJuZC1jdXQgKi97CisJCQlpZiAoKChyeF9jYWxfcmVnWzBdID09IDMxKSB8fCAocnhfY2FsX3JlZ1swXSA9PSAoLTMyKSkpICYmCisJCQkJKChyeF9jYWxfcmVnWzNdID09IDMxKSB8fCAocnhfY2FsX3JlZ1szXSA9PSAoLTMyKSkpKSB7CiAJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF9yeF9pcV9jYWxpYnJhdGlvbl9sb29wPiAqKioqKioqKipcbiIpKTsKIAkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBSWF9JUV9DQUxJQlJBVElPTiBTQVRVQVRJT04gISFcbiIpKTsKIAkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOwpAQCAtMTQ4NSwxNyArMTM1MywxNCBAQAogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICBhcHBseSByeF9jYWxbM10gPSAlZFxuIiwgcnhfY2FsWzNdKSk7CiAKIAkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsICZ2YWwpOwotCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAotCQl7CisJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvKiAxc3QtY3V0ICovewogCQkJdmFsICY9IDB4MDAwMEZGRkY7CiAJCQl2YWwgfD0gKChfczMyX3RvX3M0KHJ4X2NhbFswXSkgPDwgMTIpfAogCQkJCQkoX3MzMl90b19zNChyeF9jYWxbMV0pIDw8ICA4KXwKIAkJCQkJKF9zMzJfdG9fczQocnhfY2FsWzJdKSA8PCAgNCl8CiAJCQkJCShfczMyX3RvX3M0KHJ4X2NhbFszXSkpKTsKIAkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCB2YWwpOwotCQl9Ci0JCWVsc2UgLy8gMm5kLWN1dAotCQl7CisJCX0gZWxzZSAvKiAybmQtY3V0ICovewogCQkJdmFsICY9IDB4MDAwMDAzRkY7CiAJCQl2YWwgfD0gKChfczMyX3RvX3M1KHJ4X2NhbFswXSkgPDwgMjcpfAogCQkJCQkoX3MzMl90b19zNihyeF9jYWxbMV0pIDw8IDIxKXwKQEAgLTE1MDMsNyArMTM2OCw3IEBACiAJCQkJCShfczMyX3RvX3M1KHJ4X2NhbFszXSkgPDwgMTApKTsKIAkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCB2YWwpOwogCi0JCQlpZiggbG9vcCA9PSAzICkKKwkJCWlmIChsb29wID09IDMpCiAJCQlyZXR1cm4gMDsKIAkJfQogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBDQUxJQl9EQVRBID0gMHglMDhYXG4iLCB2YWwpKTsKQEAgLTE1MTQsMTIgKzEzNzksMTIgQEAKIAlyZXR1cm4gMTsKIH0KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBfcnhfaXFfY2FsaWJyYXRpb25fd2luYm9uZChzdHJ1Y3QgaHdfZGF0YSAqcGh3X2RhdGEsIHUzMiBmcmVxdWVuY3kpCiB7Ci0vLyBmaWdvIDIwMDUwNTIzIG1hcmtlZCB0aHNpIGZsYWcgZm9yIGNhbid0IGNvbXBpbGUgZm9yIHJlbGVzYXNlCisvKiBmaWdvIDIwMDUwNTIzIG1hcmtlZCB0aGlzIGZsYWcgZm9yIGNhbid0IGNvbXBpbGUgZm9yIHJlbGVzYXNlICovCiAjaWZkZWYgX0RFQlVHCiAJczMyICAgICByeF9jYWxfcmVnWzRdOwogCXUzMiAgICAgdmFsOwpAQCAtMTUyOCwzNyArMTM5MywzNCBAQAogCXU4ICAgICAgcmVzdWx0OwogCiAJUEhZX0RFQlVHKCgiW0NBTF0gLT4gWzVdX3J4X2lxX2NhbGlicmF0aW9uKClcbiIpKTsKLS8vIGEuIFNldCBSRklDIHRvICJSWCBjYWxpYnJhdGlvbiBtb2RlIgotCS8vOyAtLS0tLSBDYWxpYnJhdGlvbiAoNykuIFJYIHBhdGggSVEgaW1iYWxhbmNlIGNhbGlicmF0aW9uIGxvb3AKLQkvLwkweDAxIDB4RkZCRkMyICA7IDNGRUZGICA7IENhbGlicmF0aW9uICg3YSkuIGVuYWJsZSBSWCBJUSBjYWxpYnJhdGlvbiBsb29wIGNpcmN1aXRzCisvKiBhLiBTZXQgUkZJQyB0byAiUlggY2FsaWJyYXRpb24gbW9kZSIgKi8KKwkvKiA7IC0tLS0tIENhbGlicmF0aW9uICg3KS4gUlggcGF0aCBJUSBpbWJhbGFuY2UgY2FsaWJyYXRpb24gbG9vcCAqLworCS8qCTB4MDEgMHhGRkJGQzIgIDsgM0ZFRkYgIDsgQ2FsaWJyYXRpb24gKDdhKS4gZW5hYmxlIFJYIElRIGNhbGlicmF0aW9uIGxvb3AgY2lyY3VpdHMgKi8KIAlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDEsICgxPDwyNCl8MHhFRkJGQzIpOwotCS8vCTB4MEIgMHgxQTAxRDYgIDsgMDY4MTcgIDsgQ2FsaWJyYXRpb24gKDdiKS4gZW5hYmxlIFJYIEkvUSBjYWwgbG9vcCBTVzEgY2lyY3VpdAorCS8qCTB4MEIgMHgxQTAxRDYgIDsgMDY4MTcgIDsgQ2FsaWJyYXRpb24gKDdiKS4gZW5hYmxlIFJYIEkvUSBjYWwgbG9vcCBTVzEgY2lyY3VpdHMgKi8KIAlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDExLCAoMTE8PDI0KXwweDFBMDVENik7Ci0JLy8weDA1IDB4MjQ4NDhBICA7IDA5MjEyICA7IENhbGlicmF0aW9uICg3YykuIHNldHRpbmcgVFgtVkdBIGdhaW4gKFRYR0NIKSB0byAyIC0tPiB0byBiZSBvcHRpbWl6ZWQKLQlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDUsICg1PDwyNCl8IHBod19kYXRhLT50eHZnYV9zZXR0aW5nX2Zvcl9jYWwpOwotCS8vMHgwNiAweDA2ODQwQyAgOyAwMUExMCAgOyBDYWxpYnJhdGlvbiAoN2QpLiBSWEdDSD0wMDsgUlhHQ0w9MDEwIDAwMCAoUlhWR0EpIC0tPiB0byBiZSBvcHRpbWl6ZWQKKwkvKiAweDA1IDB4MjQ4NDhBICA7IDA5MjEyICA7IENhbGlicmF0aW9uICg3YykuIHNldHRpbmcgVFgtVkdBIGdhaW4gKFRYR0NIKSB0byAyIC0tPiB0byBiZSBvcHRpbWl6ZWQgKi8KKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDUsICg1PDwyNCkgfCBwaHdfZGF0YS0+dHh2Z2Ffc2V0dGluZ19mb3JfY2FsKTsKKwkvKiAweDA2IDB4MDY4NDBDICA7IDAxQTEwICA7IENhbGlicmF0aW9uICg3ZCkuIFJYR0NIPTAwOyBSWEdDTD0wMTAgMDAwIChSWFZHQSkgLS0+IHRvIGJlIG9wdGltaXplZCAqLwogCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgNiwgKDY8PDI0KXwweDA2ODM0Qyk7Ci0JLy8weDAwIDB4RkZGMUMwICA7IDNGN0M3ICA7IENhbGlicmF0aW9uICg3ZSkuIHR1cm4gb24gSVEgaW1iYWxhbmNlL1Rlc3QgbW9kZQorCS8qIDB4MDAgMHhGRkYxQzAgIDsgM0Y3QzcgIDsgQ2FsaWJyYXRpb24gKDdlKS4gdHVybiBvbiBJUSBpbWJhbGFuY2UvVGVzdCBtb2RlICovCiAJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAwLCAoMDw8MjQpfDB4RkZGMUMwKTsKIAotCS8vICA7IFtCQi1jaGlwXTogQ2FsaWJyYXRpb24gKDdmKS4gU2VuZCB0ZXN0IHBhdHRlcm4KLQkvLwk7IFtCQi1jaGlwXTogQ2FsaWJyYXRpb24gKDdnKS4gU2VhcmNoIFJYR0NMIG9wdGltYWwgdmFsdWUKLQkvLwk7IFtCQi1jaGlwXTogQ2FsaWJyYXRpb24gKDdoKS4gQ2FjdWxhdGUgUlgtcGF0aCBJUSBpbWJhbGFuY2UgYW5kIHNldHRpbmcgUlggcGF0aCBJUSBjb21wZW5zYXRpb24gdGFibGUKKwkvKiAgOyBbQkItY2hpcF06IENhbGlicmF0aW9uICg3ZikuIFNlbmQgdGVzdCBwYXR0ZXJuICovCisJLyoJOyBbQkItY2hpcF06IENhbGlicmF0aW9uICg3ZykuIFNlYXJjaCBSWEdDTCBvcHRpbWFsIHZhbHVlICovCisJLyoJOyBbQkItY2hpcF06IENhbGlicmF0aW9uICg3aCkuIENhY3VsYXRlIFJYLXBhdGggSVEgaW1iYWxhbmNlIGFuZCBzZXR0aW5nIFJYIHBhdGggSVEgY29tcGVuc2F0aW9uIHRhYmxlICovCiAKIAlyZXN1bHQgPSBfcnhfaXFfY2FsaWJyYXRpb25fbG9vcF93aW5ib25kKHBod19kYXRhLCAxMjU4OSwgZnJlcXVlbmN5KTsKIAotCWlmIChyZXN1bHQgPiAwKQotCXsKKwlpZiAocmVzdWx0ID4gMCkgewogCQlfcmVzZXRfcnhfY2FsKHBod19kYXRhKTsKIAkJcmVzdWx0ID0gX3J4X2lxX2NhbGlicmF0aW9uX2xvb3Bfd2luYm9uZChwaHdfZGF0YSwgNzk0MywgZnJlcXVlbmN5KTsKIAotCQlpZiAocmVzdWx0ID4gMCkKLQkJeworCQlpZiAocmVzdWx0ID4gMCkgewogCQkJX3Jlc2V0X3J4X2NhbChwaHdfZGF0YSk7CiAJCQlyZXN1bHQgPSBfcnhfaXFfY2FsaWJyYXRpb25fbG9vcF93aW5ib25kKHBod19kYXRhLCA1MDExLCBmcmVxdWVuY3kpOwogCi0JCQlpZiAocmVzdWx0ID4gMCkKLQkJCXsKKwkJCWlmIChyZXN1bHQgPiAwKSB7CiAJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF9yeF9pcV9jYWxpYnJhdGlvbj4gKioqKioqKioqKioqKipcbiIpKTsKIAkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBSWF9JUV9DQUxJQlJBVElPTiBGQUlMVVJFICEhXG4iKSk7CiAJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKQEAgLTE1NzEsMTUgKzE0MzMsMTIgQEAKIAlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgJnZhbCk7CiAJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogMHg1NCA9IDB4JTA4WFxuIiwgdmFsKSk7CiAKLQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAotCXsKKwlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLyogMXN0LWN1dCAqL3sKIAkJcnhfY2FsX3JlZ1swXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwMEYwMDApID4+IDEyKTsKIAkJcnhfY2FsX3JlZ1sxXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwMDBGMDApID4+ICA4KTsKIAkJcnhfY2FsX3JlZ1syXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwMDAwRjApID4+ICA0KTsKIAkJcnhfY2FsX3JlZ1szXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwMDAwMEYpKTsKLQl9Ci0JZWxzZSAvLyAybmQtY3V0Ci0JeworCX0gZWxzZSAvKiAybmQtY3V0ICovewogCQlyeF9jYWxfcmVnWzBdID0gX3M1X3RvX3MzMigodmFsICYgMHhGODAwMDAwMCkgPj4gMjcpOwogCQlyeF9jYWxfcmVnWzFdID0gX3M2X3RvX3MzMigodmFsICYgMHgwN0UwMDAwMCkgPj4gMjEpOwogCQlyeF9jYWxfcmVnWzJdID0gX3M2X3RvX3MzMigodmFsICYgMHgwMDFGODAwMCkgPj4gMTUpOwpAQCAtMTU5NCw3ICsxNDUzLDcgQEAKIAogfQogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBwaHlfY2FsaWJyYXRpb25fd2luYm9uZChzdHJ1Y3QgaHdfZGF0YSAqcGh3X2RhdGEsIHUzMiBmcmVxdWVuY3kpCiB7CiAJdTMyICAgICByZWdfbW9kZV9jdHJsOwpAQCAtMTYwMiw3ICsxNDYxLDcgQEAKIAogCVBIWV9ERUJVRygoIltDQUxdIC0+IHBoeV9jYWxpYnJhdGlvbl93aW5ib25kKClcbiIpKTsKIAotCS8vIDIwMDQwNzAxIDEuMS4yNS4xMDAwIGtldmluCisJLyogMjAwNDA3MDEgMS4xLjI1LjEwMDAga2V2aW4gKi8KIAlod19nZXRfY3h4X3JlZyhwaHdfZGF0YSwgMHg4MCwgJm1hY19jdHJsKTsKIAlod19nZXRfY3h4X3JlZyhwaHdfZGF0YSwgMHhFNCwgJnJmX2N0cmwpOwogCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDU4LCAmaXFfYWxwaGEpOwpAQCAtMTYxMCw3MiArMTQ2OSw3MSBAQAogCiAKIAlfcnhhZGNfZGNfb2Zmc2V0X2NhbmNlbGxhdGlvbl93aW5ib25kKHBod19kYXRhLCBmcmVxdWVuY3kpOwotCS8vX3R4aWRhY19kY19vZmZzZXRfY2FuY2VsbGF0aW9uX3dpbmJvbmQocGh3X2RhdGEpOwotCS8vX3R4cWRhY19kY19vZmZzZXRfY2FjZWxsYXRpb25fd2luYm9uZChwaHdfZGF0YSk7CisJLyogX3R4aWRhY19kY19vZmZzZXRfY2FuY2VsbGF0aW9uX3dpbmJvbmQocGh3X2RhdGEpOyAqLworCS8qIF90eHFkYWNfZGNfb2Zmc2V0X2NhY2VsbGF0aW9uX3dpbmJvbmQocGh3X2RhdGEpOyAqLwogCiAJX3R4X2lxX2NhbGlicmF0aW9uX3dpbmJvbmQocGh3X2RhdGEpOwogCV9yeF9pcV9jYWxpYnJhdGlvbl93aW5ib25kKHBod19kYXRhLCBmcmVxdWVuY3kpOwogCi0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCAmcmVnX21vZGVfY3RybCk7Ci0JcmVnX21vZGVfY3RybCAmPSB+KE1BU0tfSVFDQUxfVE9ORV9TRUx8TUFTS19JUUNBTF9NT0RFfE1BU0tfQ0FMSUJfU1RBUlQpOyAvLyBzZXQgd2hlbiBmaW5pc2gKKwlyZWdfbW9kZV9jdHJsICY9IH4oTUFTS19JUUNBTF9UT05FX1NFTHxNQVNLX0lRQ0FMX01PREV8TUFTS19DQUxJQl9TVEFSVCk7IC8qIHNldCB3aGVuIGZpbmlzaCAqLwogCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKTsKIAlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOwogCi0JLy8gaS4gU2V0IFJGSUMgdG8gIk5vcm1hbCBtb2RlIgorCS8qIGkuIFNldCBSRklDIHRvICJOb3JtYWwgbW9kZSIgKi8KIAlod19zZXRfY3h4X3JlZyhwaHdfZGF0YSwgMHg4MCwgbWFjX2N0cmwpOwogCWh3X3NldF9jeHhfcmVnKHBod19kYXRhLCAweEU0LCByZl9jdHJsKTsKIAlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1OCwgaXFfYWxwaGEpOwogCiAKLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAJcGh5X2luaXRfcmYocGh3X2RhdGEpOwogCiB9CiAKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09Ci12b2lkIHBoeV9zZXRfcmZfZGF0YSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHUzMiBpbmRleCwgIHUzMiB2YWx1ZSApCisvKioqKioqKioqKioqKioqKioqLwordm9pZCBwaHlfc2V0X3JmX2RhdGEoc3RydWN0IGh3X2RhdGEgKnBId0RhdGEsIHUzMiBpbmRleCwgdTMyIHZhbHVlKQogewotICAgdTMyIGx0bXA9MDsKKyAgIHUzMiBsdG1wID0gMDsKIAotICAgIHN3aXRjaCggcEh3RGF0YS0+cGh5X3R5cGUgKQotCXsKLQkJY2FzZSBSRl9NQVhJTV8yODI1OgotCQljYXNlIFJGX01BWElNX1YxOiAvLyAxMWcgV2luYm9uZCAybmQgQkIod2l0aCBQaHkgYm9hcmQgKHYxKSArIE1heGltIDMzMSkKLQkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggdmFsdWUsIDE4ICk7Ci0JCQlicmVhazsKKyAgICBzd2l0Y2ggKHBId0RhdGEtPnBoeV90eXBlKSB7CisgICAgY2FzZSBSRl9NQVhJTV8yODI1OgorICAgIGNhc2UgUkZfTUFYSU1fVjE6IC8qIDExZyBXaW5ib25kIDJuZCBCQih3aXRoIFBoeSBib2FyZCAodjEpICsgTWF4aW0gMzMxKSAqLworICAgICAgICAgICAgbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKHZhbHVlLCAxOCk7CisgICAgICAgICAgICBicmVhazsKIAotCQljYXNlIFJGX01BWElNXzI4Mjc6Ci0JCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UoIHZhbHVlLCAxOCApOwotCQkJYnJlYWs7CisgICAgY2FzZSBSRl9NQVhJTV8yODI3OgorICAgICAgICAgICAgbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKHZhbHVlLCAxOCk7CisJICAgIGJyZWFrOwogCi0JCWNhc2UgUkZfTUFYSU1fMjgyODoKLQkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggdmFsdWUsIDE4ICk7Ci0JCQlicmVhazsKKyAgICBjYXNlIFJGX01BWElNXzI4Mjg6CisJICAgIGx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSh2YWx1ZSwgMTgpOworCSAgICBicmVhazsKIAotCQljYXNlIFJGX01BWElNXzI4Mjk6Ci0JCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UoIHZhbHVlLCAxOCApOwotCQkJYnJlYWs7CisgICAgY2FzZSBSRl9NQVhJTV8yODI5OgorCSAgICBsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UodmFsdWUsIDE4KTsKKwkgICAgYnJlYWs7CiAKLQkJY2FzZSBSRl9BSVJPSEFfMjIzMDoKLQkJY2FzZSBSRl9BSVJPSEFfMjIzMFM6IC8vIDIwMDYwNDIwIEFkZCB0aGlzCi0JCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDIwIDw8IDI0KSB8IEJpdFJldmVyc2UoIHZhbHVlLCAyMCApOwotCQkJYnJlYWs7CisgICAgY2FzZSBSRl9BSVJPSEFfMjIzMDoKKyAgICBjYXNlIFJGX0FJUk9IQV8yMjMwUzogLyogMjAwNjA0MjAgQWRkIHRoaXMgKi8KKwkgICAgbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyMCA8PCAyNCkgfCBCaXRSZXZlcnNlKHZhbHVlLCAyMCk7CisJICAgIGJyZWFrOwogCi0JCWNhc2UgUkZfQUlST0hBXzcyMzA6Ci0JCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8ICh2YWx1ZSYweGZmZmZmZik7Ci0JCQlicmVhazsKKyAgICBjYXNlIFJGX0FJUk9IQV83MjMwOgorCSAgICBsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8ICh2YWx1ZSYweGZmZmZmZik7CisJICAgIGJyZWFrOwogCi0JCWNhc2UgUkZfV0JfMjQyOgotCQljYXNlIFJGX1dCXzI0Ml8xOiAvLyAyMDA2MDYxOS41IEFkZAotCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCB2YWx1ZSwgMjQgKTsKLQkJCWJyZWFrOwotCX0KKyAgICBjYXNlIFJGX1dCXzI0MjoKKyAgICBjYXNlIFJGX1dCXzI0Ml8xOi8qIDIwMDYwNjE5LjUgQWRkICovCisJICAgIGx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSh2YWx1ZSwgMjQpOworCSAgICBicmVhazsKKyAgICB9CiAKLQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJV2IzNVJlZ19Xcml0ZVN5bmMocEh3RGF0YSwgMHgwODY0LCBsdG1wKTsKIH0KIAotLy8gMjAwNjA3MTcgbW9kaWZ5IGFzIEJydWNlJ3MgbWFpbAorLyogMjAwNjA3MTcgbW9kaWZ5IGFzIEJydWNlJ3MgbWFpbCAqLwogdW5zaWduZWQgY2hhciBhZGp1c3RfVFhWR0FfZm9yX2lxX21hZyhzdHJ1Y3QgaHdfZGF0YSAqcGh3X2RhdGEpCiB7CiAJaW50IGluaXRfdHh2Z2EgPSAwOwpAQCAtMTY4NSwyNiArMTU0MywyNyBAQAogCXMzMiAgICAgaXFjYWxfdG9uZV9xMDsKIAl1MzIgICAgIHNxc3VtOwogCXMzMiAgICAgaXFfbWFnXzBfdHg7Ci0JdTgJCXJlZ19zdGF0ZTsKLQlpbnQJCWN1cnJlbnRfdHh2Z2E7CisJdTgJcmVnX3N0YXRlOworCWludAljdXJyZW50X3R4dmdhOwogCiAKIAlyZWdfc3RhdGUgPSAwOwotCWZvciggaW5pdF90eHZnYT0wOyBpbml0X3R4dmdhPDEwOyBpbml0X3R4dmdhKyspCi0JewotCQljdXJyZW50X3R4dmdhID0gKCAweDI0QzQwQXwoaW5pdF90eHZnYTw8NikgKTsKLQkJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCA1LCAoKDU8PDI0KXxjdXJyZW50X3R4dmdhKSApOworCWZvciAoaW5pdF90eHZnYSA9IDA7IGluaXRfdHh2Z2EgPCAxMDsgaW5pdF90eHZnYSsrKSB7CisJCWN1cnJlbnRfdHh2Z2EgPSAoMHgyNEM0MEF8KGluaXRfdHh2Z2E8PDYpKTsKKwkJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCA1LCAoKDU8PDI0KXxjdXJyZW50X3R4dmdhKSk7CiAJCXBod19kYXRhLT50eHZnYV9zZXR0aW5nX2Zvcl9jYWwgPSBjdXJyZW50X3R4dmdhOwogCi0JCW1zbGVlcCgzMCk7IC8vIDIwMDYwNjEyLjEuYQorCQltc2xlZXAoMzApOy8qIDIwMDYwNjEyLjEuYSAqLwogCi0JCWlmKCAhaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsICZyZWdfbW9kZV9jdHJsKSApIC8vIDIwMDYwNzE4LjEgbW9kaWZ5CisJCWlmICghaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsICZyZWdfbW9kZV9jdHJsKSkvKiAyMDA2MDcxOC4xIG1vZGlmeSAqLwogCQkJcmV0dXJuIGZhbHNlOwogCiAJCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAocmVhZCkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKIAotCQkvLyBhLiBTZXQgaXFjYWxfbW9kZVsxOjBdIHRvIDB4MiBhbmQgc2V0ICJjYWxpYl9zdGFydCIgdG8gMHgxIHRvCi0JCS8vICAgIGVuYWJsZSAiSVEgYWxpYnJhdGlvbiBNb2RlIElJIgorCQkvKgorCQkgKiBhLiBTZXQgaXFjYWxfbW9kZVsxOjBdIHRvIDB4MiBhbmQgc2V0ICJjYWxpYl9zdGFydCIgdG8gMHgxIHRvCisJCSAqICAgIGVuYWJsZSAiSVEgYWxpYnJhdGlvbiBNb2RlIElJIgorCQkgKi8KIAkJcmVnX21vZGVfY3RybCAmPSB+KE1BU0tfSVFDQUxfVE9ORV9TRUx8TUFTS19JUUNBTF9NT0RFKTsKIAkJcmVnX21vZGVfY3RybCAmPSB+TUFTS19JUUNBTF9NT0RFOwogCQlyZWdfbW9kZV9jdHJsIHw9IChNQVNLX0NBTElCX1NUQVJUfDB4MDIpOwpAQCAtMTcxMiwxNSArMTU3MSwxNSBAQAogCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CiAJCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CiAKLQkJdWRlbGF5KDEpOyAvLyAyMDA2MDYxMi4xLmEKKwkJdWRlbGF5KDEpOy8qIDIwMDYwNjEyLjEuYSAqLwogCi0JCXVkZWxheSgzMDApOyAvLyAyMDA2MDYxMi4xLmEKKwkJdWRlbGF5KDMwMCk7LyogMjAwNjA2MTIuMS5hICovCiAKLQkJLy8gYi4KKwkJLyogYi4gKi8KIAkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19DQUxJQl9SRUFEMSwgJnZhbCk7CiAKIAkJUEhZX0RFQlVHKCgiW0NBTF0gICAgQ0FMSUJfUkVBRDEgPSAweCUwOFhcbiIsIHZhbCkpOwotCQl1ZGVsYXkoMzAwKTsgLy8gMjAwNjA2MTIuMS5hCisJCXVkZWxheSgzMDApOy8qIDIwMDYwNjEyLjEuYSAqLwogCiAJCWlxY2FsX3RvbmVfaTAgPSBfczEzX3RvX3MzMih2YWwgJiAweDAwMDAxRkZGKTsKIAkJaXFjYWxfdG9uZV9xMCA9IF9zMTNfdG9fczMyKCh2YWwgJiAweDAzRkZFMDAwKSA+PiAxMyk7CkBAIC0xNzMxLDIzICsxNTkwLDE4IEBACiAJCWlxX21hZ18wX3R4ID0gKHMzMikgX3NxcnQoc3FzdW0pOwogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBhdXRvX2FkanVzdF90eHZnYV9mb3JfaXFfbWFnXzBfdHg9JWRcbiIsIGlxX21hZ18wX3R4KSk7CiAKLQkJaWYoIGlxX21hZ18wX3R4Pj03MDAgJiYgaXFfbWFnXzBfdHg8PTE3NTAgKQorCQlpZiAoaXFfbWFnXzBfdHggPj0gNzAwICYmIGlxX21hZ18wX3R4IDw9IDE3NTApCiAJCQlicmVhazsKLQkJZWxzZSBpZihpcV9tYWdfMF90eCA+IDE3NTApCi0JCXsKLQkJCWluaXRfdHh2Z2E9LTI7CisJCWVsc2UgaWYgKGlxX21hZ18wX3R4ID4gMTc1MCkgeworCQkJaW5pdF90eHZnYSA9IC0yOwogCQkJY29udGludWU7Ci0JCX0KLQkJZWxzZQorCQl9IGVsc2UKIAkJCWNvbnRpbnVlOwogCiAJfQogCi0JaWYoIGlxX21hZ18wX3R4Pj03MDAgJiYgaXFfbWFnXzBfdHg8PTE3NTAgKQorCWlmIChpcV9tYWdfMF90eCA+PSA3MDAgJiYgaXFfbWFnXzBfdHggPD0gMTc1MCkKIAkJcmV0dXJuIHRydWU7CiAJZWxzZQogCQlyZXR1cm4gZmFsc2U7CiB9Ci0KLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9yZWcuYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3JlZy5jCmluZGV4IGQ5YTgxMjguLjk5MGY5ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3JlZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3JlZy5jCkBAIC05NjYsNDIgKzk2Niw0MiBAQAogCXN3aXRjaCAocEh3RGF0YS0+cGh5X3R5cGUpIHsKIAljYXNlIFJGX01BWElNXzI4MjU6CiAJY2FzZSBSRl9NQVhJTV9WMTogLyogMTFnIFdpbmJvbmQgMm5kIEJCKHdpdGggUGh5IGJvYXJkICh2MSkgKyBNYXhpbSAzMzEpICovCi0JCW51bWJlciA9IHNpemVvZihtYXgyODI1X3JmX2RhdGEpIC8gc2l6ZW9mKG1heDI4MjVfcmZfZGF0YVswXSk7CisJCW51bWJlciA9IEFSUkFZX1NJWkUobWF4MjgyNV9yZl9kYXRhKTsKIAkJZm9yIChpID0gMDsgaSA8IG51bWJlcjsgaSsrKSB7CiAJCQlwSHdEYXRhLT5waHlfcGFyYVtpXSA9IG1heDI4MjVfcmZfZGF0YVtpXTsgLyogQmFja3VwIFJmIHBhcmFtZXRlciAqLwogCQkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZShtYXgyODI1X3JmX2RhdGFbaV0sIDE4KTsKIAkJfQogCQlicmVhazsKIAljYXNlIFJGX01BWElNXzI4Mjc6Ci0JCW51bWJlciA9IHNpemVvZihtYXgyODI3X3JmX2RhdGEpIC8gc2l6ZW9mKG1heDI4MjdfcmZfZGF0YVswXSk7CisJCW51bWJlciA9IEFSUkFZX1NJWkUobWF4MjgyN19yZl9kYXRhKTsKIAkJZm9yIChpID0gMDsgaSA8IG51bWJlcjsgaSsrKSB7CiAJCQlwSHdEYXRhLT5waHlfcGFyYVtpXSA9IG1heDI4MjdfcmZfZGF0YVtpXTsKIAkJCXBsdG1wW2ldID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UobWF4MjgyN19yZl9kYXRhW2ldLCAxOCk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBSRl9NQVhJTV8yODI4OgotCQludW1iZXIgPSBzaXplb2YobWF4MjgyOF9yZl9kYXRhKSAvIHNpemVvZihtYXgyODI4X3JmX2RhdGFbMF0pOworCQludW1iZXIgPSBBUlJBWV9TSVpFKG1heDI4MjhfcmZfZGF0YSk7CiAJCWZvciAoaSA9IDA7IGkgPCBudW1iZXI7IGkrKykgewogCQkJcEh3RGF0YS0+cGh5X3BhcmFbaV0gPSBtYXgyODI4X3JmX2RhdGFbaV07CiAJCQlwbHRtcFtpXSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKG1heDI4MjhfcmZfZGF0YVtpXSwgMTgpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUkZfTUFYSU1fMjgyOToKLQkJbnVtYmVyID0gc2l6ZW9mKG1heDI4MjlfcmZfZGF0YSkgLyBzaXplb2YobWF4MjgyOV9yZl9kYXRhWzBdKTsKKwkJbnVtYmVyID0gQVJSQVlfU0laRShtYXgyODI5X3JmX2RhdGEpOwogCQlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyOyBpKyspIHsKIAkJCXBId0RhdGEtPnBoeV9wYXJhW2ldID0gbWF4MjgyOV9yZl9kYXRhW2ldOwogCQkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZShtYXgyODI5X3JmX2RhdGFbaV0sIDE4KTsKIAkJfQogCQlicmVhazsKIAljYXNlIFJGX0FJUk9IQV8yMjMwOgotCQludW1iZXIgPSBzaXplb2YoYWwyMjMwX3JmX2RhdGEpIC8gc2l6ZW9mKGFsMjIzMF9yZl9kYXRhWzBdKTsKKwkJbnVtYmVyID0gQVJSQVlfU0laRShhbDIyMzBfcmZfZGF0YSk7CiAJCWZvciAoaSA9IDA7IGkgPCBudW1iZXI7IGkrKykgewogCQkJcEh3RGF0YS0+cGh5X3BhcmFbaV0gPSBhbDIyMzBfcmZfZGF0YVtpXTsKIAkJCXBsdG1wW2ldID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDIwIDw8IDI0KSB8IEJpdFJldmVyc2UoYWwyMjMwX3JmX2RhdGFbaV0sIDIwKTsKIAkJfQogCQlicmVhazsKIAljYXNlIFJGX0FJUk9IQV8yMjMwUzoKLQkJbnVtYmVyID0gc2l6ZW9mKGFsMjIzMHNfcmZfZGF0YSkgLyBzaXplb2YoYWwyMjMwc19yZl9kYXRhWzBdKTsKKwkJbnVtYmVyID0gQVJSQVlfU0laRShhbDIyMzBzX3JmX2RhdGEpOwogCQlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyOyBpKyspIHsKIAkJCXBId0RhdGEtPnBoeV9wYXJhW2ldID0gYWwyMjMwc19yZl9kYXRhW2ldOwogCQkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjAgPDwgMjQpIHwgQml0UmV2ZXJzZShhbDIyMzBzX3JmX2RhdGFbaV0sIDIwKTsKQEAgLTEwMTMsMTIgKzEwMTMsMTIgQEAKIAkJI2lmZGVmIF9QRV9TVEFURV9EVU1QXwogCQlwcmludGsoIiogUExMX09OICAgIGxvd1xuIik7CiAJCSNlbmRpZgotCQludW1iZXIgPSBzaXplb2YoYWw3MjMwX3JmX2RhdGFfMjQpIC8gc2l6ZW9mKGFsNzIzMF9yZl9kYXRhXzI0WzBdKTsKKwkJbnVtYmVyID0gQVJSQVlfU0laRShhbDcyMzBfcmZfZGF0YV8yNCk7CiAJCVNldF9DaGFuSW5kZXBfUmZEYXRhX2FsNzIzMF8yNChwSHdEYXRhLCBwbHRtcCwgbnVtYmVyKTsKIAkJYnJlYWs7CiAJY2FzZSBSRl9XQl8yNDI6CiAJY2FzZSBSRl9XQl8yNDJfMToKLQkJbnVtYmVyID0gc2l6ZW9mKHc4OXJmMjQyX3JmX2RhdGEpIC8gc2l6ZW9mKHc4OXJmMjQyX3JmX2RhdGFbMF0pOworCQludW1iZXIgPSBBUlJBWV9TSVpFKHc4OXJmMjQyX3JmX2RhdGEpOwogCQlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyOyBpKyspIHsKIAkJCWx0bXAgPSB3ODlyZjI0Ml9yZl9kYXRhW2ldOwogCQkJaWYgKGkgPT0gNCkgeyAvKiBVcGRhdGUgdGhlIFZDTyB0cmltIGZyb20gRUVQUk9NICovCkBAIC0xMTE5LDcgKzExMTksNyBAQAogCQlwcmludGsoIiogUExMX09OICAgIGxvd1xuIik7CiAJCSNlbmRpZgogCi0JCW51bWJlciA9IHNpemVvZihhbDcyMzBfcmZfZGF0YV81MCkgLyBzaXplb2YoYWw3MjMwX3JmX2RhdGFfNTBbMF0pOworCQludW1iZXIgPSBBUlJBWV9TSVpFKGFsNzIzMF9yZl9kYXRhXzUwKTsKIAkJU2V0X0NoYW5JbmRlcF9SZkRhdGFfYWw3MjMwXzUwKHBId0RhdGEsIHBsdG1wLCBudW1iZXIpOwogCQkvKiBXcml0ZSB0byByZWdpc3Rlci4gbnVtYmVyIG11c3QgbGVzcyBhbmQgZXF1YWwgdGhhbiAxNiAqLwogCQlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyOyBpKyspCkBAIC0xNzQ3LDcgKzE3NDcsNyBAQAogCQkJCXBsdG1wW2ldID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UobWF4MjgyOV9jaGFubmVsX2RhdGFfMjRbQ2hhbm5lbC5DaGFuTm8tMV1baV0sIDE4KTsKIAkJCVdiMzVSZWdfQnVyc3RXcml0ZShwSHdEYXRhLCAweDA4NjQsIHBsdG1wLCAzLCBOT19JTkNSRU1FTlQpOwogCQl9IGVsc2UgaWYgKENoYW5uZWwuYmFuZCA9PSBCQU5EX1RZUEVfT0ZETV81KSB7Ci0JCQljb3VudCA9IHNpemVvZihtYXgyODI5X2NoYW5uZWxfZGF0YV81MCkgLyBzaXplb2YobWF4MjgyOV9jaGFubmVsX2RhdGFfNTBbMF0pOworCQkJY291bnQgPSBBUlJBWV9TSVpFKG1heDI4MjlfY2hhbm5lbF9kYXRhXzUwKTsKIAogCQkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJCQlpZiAobWF4MjgyOV9jaGFubmVsX2RhdGFfNTBbaV1bMF0gPT0gQ2hhbm5lbC5DaGFuTm8pIHsKQEAgLTE3ODMsMTMgKzE3ODMsMTMgQEAKIAkJCQkvKiBVcGRhdGUgQkIgcmVnaXN0ZXIgKi8KIAkJCQlCQlByb2Nlc3Nvcl9BTDcyMzBfMjQwMChwSHdEYXRhKTsKIAotCQkJCW51bWJlciA9IHNpemVvZihhbDcyMzBfcmZfZGF0YV8yNCkgLyBzaXplb2YoYWw3MjMwX3JmX2RhdGFfMjRbMF0pOworCQkJCW51bWJlciA9IEFSUkFZX1NJWkUoYWw3MjMwX3JmX2RhdGFfMjQpOwogCQkJCVNldF9DaGFuSW5kZXBfUmZEYXRhX2FsNzIzMF8yNChwSHdEYXRhLCBwbHRtcCwgbnVtYmVyKTsKIAkJCX0gZWxzZSB7CiAJCQkJLyogVXBkYXRlIEJCIHJlZ2lzdGVyICovCiAJCQkJQkJQcm9jZXNzb3JfQUw3MjMwXzUwMDAocEh3RGF0YSk7CiAKLQkJCQludW1iZXIgPSBzaXplb2YoYWw3MjMwX3JmX2RhdGFfNTApIC8gc2l6ZW9mKGFsNzIzMF9yZl9kYXRhXzUwWzBdKTsKKwkJCQludW1iZXIgPSBBUlJBWV9TSVpFKGFsNzIzMF9yZl9kYXRhXzUwKTsKIAkJCQlTZXRfQ2hhbkluZGVwX1JmRGF0YV9hbDcyMzBfNTAocEh3RGF0YSwgcGx0bXAsIG51bWJlcik7CiAJCQl9CiAKQEAgLTE4MTQsNyArMTgxNCw3IEBACiAJCQkJV2IzNVJlZ19Xcml0ZShwSHdEYXRhLCAweDA4NjQsIGx0bXApOwogCQkJfQogCi0JCQljb3VudCA9IHNpemVvZihhbDcyMzBfY2hhbm5lbF9kYXRhXzUpIC8gc2l6ZW9mKGFsNzIzMF9jaGFubmVsX2RhdGFfNVswXSk7CisJCQljb3VudCA9IEFSUkFZX1NJWkUoYWw3MjMwX2NoYW5uZWxfZGF0YV81KTsKIAogCQkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJCQlpZiAoYWw3MjMwX2NoYW5uZWxfZGF0YV81W2ldWzBdID09IENoYW5uZWwuQ2hhbk5vKSB7CkBAIC0xOTc4LDcgKzE5NzgsNyBAQAogCXUzMglQb3dlckRhdGE7CiAJdTgJaSwgY291bnQ7CiAKLQljb3VudCA9IHNpemVvZihhbDIyMzBfdHh2Z2FfZGF0YSkgLyBzaXplb2YoYWwyMjMwX3R4dmdhX2RhdGFbMF0pOworCWNvdW50ID0gQVJSQVlfU0laRShhbDIyMzBfdHh2Z2FfZGF0YSk7CiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJaWYgKGFsMjIzMF90eHZnYV9kYXRhW2ldWzFdID49IGluZGV4KQogCQkJYnJlYWs7CkBAIC0xOTk2LDcgKzE5OTYsNyBAQAogCXUzMglQb3dlckRhdGE7CiAJdTgJaSwgY291bnQ7CiAKLQljb3VudCA9IHNpemVvZihhbDcyMzBfdHh2Z2FfZGF0YSkgLyBzaXplb2YoYWw3MjMwX3R4dmdhX2RhdGFbMF0pOworCWNvdW50ID0gQVJSQVlfU0laRShhbDcyMzBfdHh2Z2FfZGF0YSk7CiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJaWYgKGFsNzIzMF90eHZnYV9kYXRhW2ldWzFdID49IGluZGV4KQogCQkJYnJlYWs7CkBAIC0yMDEzLDcgKzIwMTMsNyBAQAogCXUzMglQb3dlckRhdGE7CiAJdTgJaSwgY291bnQ7CiAKLQljb3VudCA9IHNpemVvZih3ODlyZjI0Ml90eHZnYV9kYXRhKSAvIHNpemVvZih3ODlyZjI0Ml90eHZnYV9kYXRhWzBdKTsKKwljb3VudCA9IEFSUkFZX1NJWkUodzg5cmYyNDJfdHh2Z2FfZGF0YSk7CiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJaWYgKHc4OXJmMjQyX3R4dmdhX2RhdGFbaV1bMV0gPj0gaW5kZXgpCiAJCQlicmVhazsKQEAgLTIxODQsMTQgKzIxODQsMTQgQEAKIAkvKiBBZGp1c3QgV0JfMjQyIHRvIFdCXzI0Ml8xIFR4VmdhIHNjYWxlICovCiAJaWYgKHBId0RhdGEtPnBoeV90eXBlID09IFJGX1dCXzI0MikgewogCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7IC8qIE9ubHkgMjQxMiAyNDM3IDI0NjIgMjQ4NCBjYXNlIG11c3QgYmUgbW9kaWZpZWQgKi8KLQkJCWZvciAoaiA9IDA7IGogPCAoc2l6ZW9mKHc4OXJmMjQyX3R4dmdhX29sZF9tYXBwaW5nKSAvIHNpemVvZih3ODlyZjI0Ml90eHZnYV9vbGRfbWFwcGluZ1swXSkpOyBqKyspIHsKKwkJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHc4OXJmMjQyX3R4dmdhX29sZF9tYXBwaW5nKTsgaisrKSB7CiAJCQkJaWYgKHBjdG1wW2ldIDwgKHU4KSB3ODlyZjI0Ml90eHZnYV9vbGRfbWFwcGluZ1tqXVsxXSkgewogCQkJCQlwY3RtcFtpXSA9ICh1OCkgdzg5cmYyNDJfdHh2Z2Ffb2xkX21hcHBpbmdbal1bMF07CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KIAotCQkJaWYgKGogPT0gKHNpemVvZih3ODlyZjI0Ml90eHZnYV9vbGRfbWFwcGluZykgLyBzaXplb2Yodzg5cmYyNDJfdHh2Z2Ffb2xkX21hcHBpbmdbMF0pKSkKKwkJCWlmIChqID09IEFSUkFZX1NJWkUodzg5cmYyNDJfdHh2Z2Ffb2xkX21hcHBpbmcpKQogCQkJCXBjdG1wW2ldID0gKHU4KXc4OXJmMjQyX3R4dmdhX29sZF9tYXBwaW5nW2otMV1bMF07CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYi5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2J1c2IuYwppbmRleCA2ODE0MTlkLi5hYmFhMDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3didXNiLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDggUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PgorICogQ29weXJpZ2h0IDIwMDggUGF2ZWwgTWFjaGVrIDxwYXZlbEB1Y3cuY3o+CiAgKgogICogRGlzdHJpYnV0ZSB1bmRlciBHUEx2Mi4KICAqCkBAIC03MDAsNyArNzAwLDcgQEAKIAlNZHNfaW5pdGlhbChwcml2KTsKIAogCS8qCi0JICogSWYgbm8gdXNlci1kZWZpbmVkIGFkZHJlc3MgaW4gdGhlIHJlZ2lzdHJ5LCB1c2UgdGhlIGFkZHJlc3NzCisJICogSWYgbm8gdXNlci1kZWZpbmVkIGFkZHJlc3MgaW4gdGhlIHJlZ2lzdHJ5LCB1c2UgdGhlIGFkZHJlc3MKIAkgKiAiYnVybmVkIiBvbiB0aGUgTklDIGluc3RlYWQuCiAJICovCiAJcE1hY0FkZHIgPSBwcml2LT5zTG9jYWxQYXJhLlRoaXNNYWNBZGRyZXNzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvaGNmLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi9oY2YuYwppbmRleCAzOTA2MjhjLi5jNGZlMGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi9oY2YuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi9oY2YuYwpAQCAtNTAyLDcgKzUwMiw3IEBACiAjZW5kaWYgLy8gTVNGX0NPTVBPTkVOVF9JRAogCU5VTEwJCQkJCQkJCQkvL2VuZHNlbnRpbmVsCiAgIH07Ci0jZGVmaW5lIHh4eHhfUFJJX0lERU5USVRZX09GRlNFVAkoc2l6ZW9mKHh4eHgpL3NpemVvZih4eHh4WzBdKSAtIDMpCisjZGVmaW5lIHh4eHhfUFJJX0lERU5USVRZX09GRlNFVAkoQVJSQVlfU0laRSh4eHh4KSAtIDMpCiAKICNlbmRpZiAvLyBNU0ZfQ09NUE9ORU5UX0lEIC8gSENGX0VYVF9NQgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi9tZGQuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL21kZC5oCmluZGV4IGI0NWM3ZGQuLmI1MGI3YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL21kZC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL21kZC5oCkBAIC03MjcsMTAgKzcyNywxMCBAQAogI2RlZmluZSBDRkdfRkNCRQkweEZDQkUJLy9GVyBjb2RlcyBhaGVhZCBvZiBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbiwgc28gPz8/Pz8/PwogI2RlZmluZSBDRkdfRkNCRgkweEZDQkYJLy9GVyBjb2RlcyBhaGVhZCBvZiBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbiwgc28gPz8/Pz8/PwogCi0jZGVmaW5lIENGR19IQU5ET1ZFUl9BRERSCQkJCTB4RkNDMAkJLy9bQVBdIFN0YXRpb24gTUFDIEFkcnJlc3MgcmUtYXNzb2NpYXRlZCB3aXRoIG90aGVyIEFQCisjZGVmaW5lIENGR19IQU5ET1ZFUl9BRERSCQkJCTB4RkNDMAkJLy9bQVBdIFN0YXRpb24gTUFDIEFkZHJlc3MgcmUtYXNzb2NpYXRlZCB3aXRoIG90aGVyIEFQCiAjZGVmaW5lIENGR19TQ0FOX0NIQU5ORUwJCQkJMHhGQ0MyCQkvL0NoYW5uZWwgc2V0IGZvciBob3N0IHJlcXVlc3RlZCBzY2FuCiAvLzs/I2RlZmluZSBDRkdfU0NBTl9DSEFOTkVMX01BU0sJCQkweEZDQzIJCS8vIGNvbnRhaW5zCi0jZGVmaW5lIENGR19ESVNBU1NPQ0lBVEVfQUREUgkJCTB4RkNDNAkJLy9bQVBdIFN0YXRpb24gTUFDIEFkcnJlc3MgdG8gYmUgZGlzYXNzb2NpYXRlZAorI2RlZmluZSBDRkdfRElTQVNTT0NJQVRFX0FERFIJCQkweEZDQzQJCS8vW0FQXSBTdGF0aW9uIE1BQyBBZGRyZXNzIHRvIGJlIGRpc2Fzc29jaWF0ZWQKICNkZWZpbmUgQ0ZHX1BST0JFX0RBVEFfUkFURQkJCQkweEZDQzUJCS8vV0FSUCBjb25uZWN0aW9uIGNvbnRyb2wKICNkZWZpbmUgQ0ZHX0ZSQU1FX0JVUlNUX0xJTUlUCQkJMHhGQ0M2CQkvLwogI2RlZmluZSBDRkdfQ09FWElTVEVOU0VfQkVIQVZJT1VSCQkweEZDQzcJCS8vW0FQXQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfY3MuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX2NzLmMKaW5kZXggMTBhYmQ0MC4uMTljMzM1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfY3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9jcy5jCkBAIC0yMyw3ICsyMyw3IEBACiAgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCiAgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCiAgKgotICogQ29weXJpZ2h0IKkgMjAwMyBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwMyBBZ2VyZSBTeXN0ZW1zIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQ0LDcgKzQ0LDcgQEAKICAqCiAgKiBEaXNjbGFpbWVyCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAogICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgogICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQogICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KQEAgLTgzLDcgKzgzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CkBAIC0xMzMsMzYgKzEzMiwzNSBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBpbnQgd2xfYWRhcHRlcl9hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgc3RydWN0IG5ldF9kZXZpY2UgICAqZGV2OwotICAgIHN0cnVjdCB3bF9wcml2YXRlCSpscDsKLSAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJc3RydWN0IG5ldF9kZXZpY2UgICAqZGV2OworCXN0cnVjdCB3bF9wcml2YXRlICAgKmxwOworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0gICAgREJHX0ZVTkMoICJ3bF9hZGFwdGVyX2F0dGFjaCIgKTsKLSAgICBEQkdfRU5URVIoIERiZ0luZm8gKTsKKwlEQkdfRlVOQygid2xfYWRhcHRlcl9hdHRhY2giKTsKKwlEQkdfRU5URVIoRGJnSW5mbyk7CiAKLSAgICBkZXYgPSB3bF9kZXZpY2VfYWxsb2MoKTsKLSAgICBpZihkZXYgPT0gTlVMTCkgewotICAgICAgICBEQkdfRVJST1IoIERiZ0luZm8sICJ3bF9kZXZpY2VfYWxsb2MgcmV0dXJuZWQgTlVMTFxuIik7Ci0JcmV0dXJuIC1FTk9NRU07Ci0gICAgfQorCWRldiA9IHdsX2RldmljZV9hbGxvYygpOworCWlmIChkZXYgPT0gTlVMTCkgeworCQlEQkdfRVJST1IoRGJnSW5mbywgIndsX2RldmljZV9hbGxvYyByZXR1cm5lZCBOVUxMXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCi0gICAgbGluay0+aW8uTnVtUG9ydHMxICAgICAgPSBIQ0ZfTlVNX0lPX1BPUlRTOwotICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxICAgID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OwotICAgIGxpbmstPmlvLklPQWRkckxpbmVzICAgID0gNjsKLSAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgICA9IENPTkZfRU5BQkxFX0lSUTsKLSAgICBsaW5rLT5jb25mLkludFR5cGUgICAgICA9IElOVF9NRU1PUllfQU5EX0lPOwotICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXggID0gNTsKLSAgICBsaW5rLT5jb25mLlByZXNlbnQgICAgICA9IFBSRVNFTlRfT1BUSU9OOworCWxpbmstPnJlc291cmNlWzBdLT5lbmQgID0gSENGX05VTV9JT19QT1JUUzsKKwlsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3M9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKKwlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgICA9IENPTkZfRU5BQkxFX0lSUTsKKwlsaW5rLT5jb25mLkludFR5cGUgICAgICA9IElOVF9NRU1PUllfQU5EX0lPOworCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggID0gNTsKKwlsaW5rLT5jb25mLlByZXNlbnQgICAgICA9IFBSRVNFTlRfT1BUSU9OOwogCi0gICAgbGluay0+cHJpdiA9IGRldjsKLSAgICBscCA9IHdsX3ByaXYoZGV2KTsKLSAgICBscC0+bGluayA9IGxpbms7CisJbGluay0+cHJpdiA9IGRldjsKKwlscCA9IHdsX3ByaXYoZGV2KTsKKwlscC0+bGluayA9IGxpbms7CiAKLSAgICB3bF9hZGFwdGVyX2luc2VydChsaW5rKTsKKwl3bF9hZGFwdGVyX2luc2VydChsaW5rKTsKIAotICAgIERCR19MRUFWRSggRGJnSW5mbyApOwotICAgIHJldHVybiAwOwotfSAvLyB3bF9hZGFwdGVyX2F0dGFjaAorCURCR19MRUFWRShEYmdJbmZvKTsKKwlyZXR1cm4gMDsKK30gLyogd2xfYWRhcHRlcl9hdHRhY2ggKi8KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIApAQCAtMTkwLDI1ICsxODgsMjQgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdm9pZCB3bF9hZGFwdGVyX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZSAgICpkZXYgPSBsaW5rLT5wcml2OwotICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlzdHJ1Y3QgbmV0X2RldmljZSAgICpkZXYgPSBsaW5rLT5wcml2OworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisJREJHX0ZVTkMoIndsX2FkYXB0ZXJfZGV0YWNoIik7CisJREJHX0VOVEVSKERiZ0luZm8pOworCURCR19QQVJBTShEYmdJbmZvLCAibGluayIsICIweCVwIiwgbGluayk7CiAKLSAgICBEQkdfRlVOQyggIndsX2FkYXB0ZXJfZGV0YWNoIiApOwotICAgIERCR19FTlRFUiggRGJnSW5mbyApOwotICAgIERCR19QQVJBTSggRGJnSW5mbywgImxpbmsiLCAiMHglcCIsIGxpbmsgKTsKKwl3bF9hZGFwdGVyX3JlbGVhc2UobGluayk7CiAKLSAgICB3bF9hZGFwdGVyX3JlbGVhc2UobGluayk7CisJaWYgKGRldikgeworCQl1bnJlZ2lzdGVyX3dsYWdzX3N5c2ZzKGRldik7CisJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJfQogCi0gICAgaWYgKGRldikgewotCXVucmVnaXN0ZXJfd2xhZ3Nfc3lzZnMoZGV2KTsKLQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotICAgIH0KKwl3bF9kZXZpY2VfZGVhbGxvYyhkZXYpOwogCi0gICAgd2xfZGV2aWNlX2RlYWxsb2MoZGV2KTsKLQotICAgIERCR19MRUFWRSggRGJnSW5mbyApOwotfSAvLyB3bF9hZGFwdGVyX2RldGFjaAorCURCR19MRUFWRShEYmdJbmZvKTsKK30gLyogd2xfYWRhcHRlcl9kZXRhY2ggKi8KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIApAQCAtMjMyLDMzICsyMjksMzMgQEAKICAqICAgICAgTi9BCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgd2xfYWRhcHRlcl9yZWxlYXNlKCBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayApCit2b2lkIHdsX2FkYXB0ZXJfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBEQkdfRlVOQyggIndsX2FkYXB0ZXJfcmVsZWFzZSIgKTsKLSAgICBEQkdfRU5URVIoIERiZ0luZm8gKTsKLSAgICBEQkdfUEFSQU0oIERiZ0luZm8sICJsaW5rIiwgIjB4JXAiLCBsaW5rKTsKKwlEQkdfRlVOQygid2xfYWRhcHRlcl9yZWxlYXNlIik7CisJREJHX0VOVEVSKERiZ0luZm8pOworCURCR19QQVJBTShEYmdJbmZvLCAibGluayIsICIweCVwIiwgbGluayk7CiAKLSAgICAvKiBTdG9wIGhhcmR3YXJlICovCi0gICAgd2xfcmVtb3ZlKGxpbmstPnByaXYpOworCS8qIFN0b3AgaGFyZHdhcmUgKi8KKwl3bF9yZW1vdmUobGluay0+cHJpdik7CiAKLSAgICBwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogCi0gICAgREJHX0xFQVZFKCBEYmdJbmZvICk7Ci19IC8vIHdsX2FkYXB0ZXJfcmVsZWFzZQorCURCR19MRUFWRShEYmdJbmZvKTsKK30gLyogd2xfYWRhcHRlcl9yZWxlYXNlICovCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBzdGF0aWMgaW50IHdsX2FkYXB0ZXJfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAotICAgIC8vaWYgKGxpbmstPm9wZW4pIHsKKwkvKiBpZiAobGluay0+b3BlbikgeyAqLwogCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKIAl3bF9zdXNwZW5kKGRldik7Ci0vLy8vIENIRUNLISAgICAgICAgICAgIHBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLSAgICAvL30KKwkvKiBDSEVDSyEgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOyAqLworCS8qIH0gKi8KIAotICAgIHJldHVybiAwOwotfSAvLyB3bF9hZGFwdGVyX3N1c3BlbmQKKwlyZXR1cm4gMDsKK30gLyogd2xfYWRhcHRlcl9zdXNwZW5kICovCiAKIHN0YXRpYyBpbnQgd2xfYWRhcHRlcl9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CkBAIC0yNjYsMTAgKzI2MywxMCBAQAogCiAJd2xfcmVzdW1lKGRldik7CiAKLQluZXRpZl9kZXZpY2VfYXR0YWNoKCBkZXYgKTsKKwluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CiAKIAlyZXR1cm4gMDsKLX0gLy8gd2xfYWRhcHRlcl9yZXN1bWUKK30gLyogd2xfYWRhcHRlcl9yZXN1bWUgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCXdsX2FkYXB0ZXJfaW5zZXJ0KCkKQEAgLTI5MSw2MCArMjg4LDYwIEBACiAgKiAgICAgIE4vQQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkIHdsX2FkYXB0ZXJfaW5zZXJ0KCBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayApCit2b2lkIHdsX2FkYXB0ZXJfaW5zZXJ0KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIHN0cnVjdCBuZXRfZGV2aWNlICAgICAgICpkZXY7Ci0gICAgaW50IGk7Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgcmV0OwotICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCWludCBpOworCWludCByZXQ7CisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSAgICBEQkdfRlVOQyggIndsX2FkYXB0ZXJfaW5zZXJ0IiApOwotICAgIERCR19FTlRFUiggRGJnSW5mbyApOwotICAgIERCR19QQVJBTSggRGJnSW5mbywgImxpbmsiLCAiMHglcCIsIGxpbmsgKTsKKwlEQkdfRlVOQygid2xfYWRhcHRlcl9pbnNlcnQiKTsKKwlEQkdfRU5URVIoRGJnSW5mbyk7CisJREJHX1BBUkFNKERiZ0luZm8sICJsaW5rIiwgIjB4JXAiLCBsaW5rKTsKIAotICAgIGRldiAgICAgPSBsaW5rLT5wcml2OworCWRldiAgICAgPSBsaW5rLT5wcml2OwogCi0gICAgLyogRG8gd2UgbmVlZCB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQ/ICovCi0gICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKKwkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KKwlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROworCWxpbmstPmlvX2xpbmVzID0gNjsKIAotICAgIHJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7Ci0gICAgaWYgKHJldCAhPSAwKQotICAgICAgICBnb3RvIGZhaWxlZDsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZmFpbGVkOwogCi0gICAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICh2b2lkICopIHdsX2lzcik7Ci0gICAgaWYgKHJldCAhPSAwKQotICAgICAgICBnb3RvIGZhaWxlZDsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgKHZvaWQgKikgd2xfaXNyKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZmFpbGVkOwogCi0gICAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7Ci0gICAgaWYgKHJldCAhPSAwKQotICAgICAgICBnb3RvIGZhaWxlZDsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZmFpbGVkOwogCi0gICAgZGV2LT5pcnEgICAgICAgID0gbGluay0+aXJxOwotICAgIGRldi0+YmFzZV9hZGRyICA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKwlkZXYtPmlycSAgICAgICAgPSBsaW5rLT5pcnE7CisJZGV2LT5iYXNlX2FkZHIgID0gbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCi0gICAgU0VUX05FVERFVl9ERVYoZGV2LCAmbGluay0+ZGV2KTsKLSAgICBpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikgIT0gMCkgewotCXByaW50aygiJXM6IHJlZ2lzdGVyX25ldGRldigpIGZhaWxlZFxuIiwgTU9EVUxFX05BTUUpOwotCWdvdG8gZmFpbGVkOwotICAgIH0KKwlTRVRfTkVUREVWX0RFVihkZXYsICZsaW5rLT5kZXYpOworCWlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSAhPSAwKSB7CisJCXByaW50aygiJXM6IHJlZ2lzdGVyX25ldGRldigpIGZhaWxlZFxuIiwgTU9EVUxFX05BTUUpOworCQlnb3RvIGZhaWxlZDsKKwl9CiAKLSAgICByZWdpc3Rlcl93bGFnc19zeXNmcyhkZXYpOworCXJlZ2lzdGVyX3dsYWdzX3N5c2ZzKGRldik7CiAKLSAgICBwcmludGsoS0VSTl9JTkZPICIlczogV2lyZWxlc3MsIGlvX2FkZHIgJSMwM2x4LCBpcnEgJWQsICIibWFjX2FkZHJlc3MgIiwKLSAgICAgICAgICAgICAgIGRldi0+bmFtZSwgZGV2LT5iYXNlX2FkZHIsIGRldi0+aXJxKTsKLSAgICBmb3IoIGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKyApIHsKLSAgICAgICAgcHJpbnRrKCIlMDJYJWMiLCBkZXYtPmRldl9hZGRyW2ldLCAoKGkgPCAoRVRIX0FMRU4tMSkpID8gJzonIDogJ1xuJykpOwotICAgIH0KKwlwcmludGsoS0VSTl9JTkZPICIlczogV2lyZWxlc3MsIGlvX2FkZHIgJSMwM2x4LCBpcnEgJWQsICIibWFjX2FkZHJlc3MgIiwKKwkJZGV2LT5uYW1lLCBkZXYtPmJhc2VfYWRkciwgZGV2LT5pcnEpOworCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQorCQlwcmludGsoIiUwMlglYyIsIGRldi0+ZGV2X2FkZHJbaV0sICgoaSA8IChFVEhfQUxFTi0xKSkgPyAnOicgOiAnXG4nKSk7CiAKLSAgICBEQkdfTEVBVkUoIERiZ0luZm8gKTsKLSAgICByZXR1cm47CisJREJHX0xFQVZFKERiZ0luZm8pOworCXJldHVybjsKIAogZmFpbGVkOgotICAgIHdsX2FkYXB0ZXJfcmVsZWFzZSggbGluayApOworCXdsX2FkYXB0ZXJfcmVsZWFzZShsaW5rKTsKIAotICAgIERCR19MRUFWRShEYmdJbmZvKTsKLSAgICByZXR1cm47Ci19IC8vIHdsX2FkYXB0ZXJfaW5zZXJ0CisJREJHX0xFQVZFKERiZ0luZm8pOworCXJldHVybjsKK30gLyogd2xfYWRhcHRlcl9pbnNlcnQgKi8KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIApAQCAtMzY3LDM4ICszNjQsMzYgQEAKICAqICAgICAgZXJybm8gdmFsdWUgb3RoZXJ3aXNlCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludCB3bF9hZGFwdGVyX29wZW4oIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgKQoraW50IHdsX2FkYXB0ZXJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIHN0cnVjdCB3bF9wcml2YXRlICpscCA9IHdsX3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxwLT5saW5rOwotICAgIGludCAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgaW50ICAgICAgICAgaGNmX3N0YXR1cyA9IEhDRl9TVUNDRVNTOwotICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlzdHJ1Y3Qgd2xfcHJpdmF0ZSAqbHAgPSB3bF9wcml2KGRldik7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBscC0+bGluazsKKwlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgaGNmX3N0YXR1cyA9IEhDRl9TVUNDRVNTOworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisJREJHX0ZVTkMoIndsX2FkYXB0ZXJfb3BlbiIpOworCURCR19FTlRFUihEYmdJbmZvKTsKKwlEQkdfUFJJTlQoIiVzXG4iLCBWRVJTSU9OX0lORk8pOworCURCR19QQVJBTShEYmdJbmZvLCAiZGV2IiwgIiVzICgweCVwKSIsIGRldi0+bmFtZSwgZGV2KTsKIAotICAgIERCR19GVU5DKCAid2xfYWRhcHRlcl9vcGVuIiApOwotICAgIERCR19FTlRFUiggRGJnSW5mbyApOwotCURCR19QUklOVCggIiVzXG4iLCBWRVJTSU9OX0lORk8gKTsKLSAgICBEQkdfUEFSQU0oIERiZ0luZm8sICJkZXYiLCAiJXMgKDB4JXApIiwgZGV2LT5uYW1lLCBkZXYgKTsKKwlpZiAoIXBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkgeworCQlEQkdfTEVBVkUoRGJnSW5mbyk7CisJCXJldHVybiAtRU5PREVWOworCX0KIAotICAgIGlmKCFwY21jaWFfZGV2X3ByZXNlbnQobGluaykpCi0gICAgewotICAgICAgICBEQkdfTEVBVkUoIERiZ0luZm8gKTsKLSAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0gICAgfQorCWxpbmstPm9wZW4rKzsKIAotICAgIGxpbmstPm9wZW4rKzsKKwloY2Zfc3RhdHVzID0gd2xfb3BlbihkZXYpOwogCi0gICAgaGNmX3N0YXR1cyA9IHdsX29wZW4oIGRldiApOworCWlmIChoY2Zfc3RhdHVzICE9IEhDRl9TVUNDRVNTKSB7CisJCWxpbmstPm9wZW4tLTsKKwkJcmVzdWx0ID0gLUVOT0RFVjsKKwl9CiAKLSAgICBpZiggaGNmX3N0YXR1cyAhPSBIQ0ZfU1VDQ0VTUyApIHsKLSAgICAgICAgbGluay0+b3Blbi0tOwotICAgICAgICByZXN1bHQgPSAtRU5PREVWOwotICAgIH0KLQotICAgIERCR19MRUFWRSggRGJnSW5mbyApOwotICAgIHJldHVybiByZXN1bHQ7Ci19IC8vIHdsX2FkYXB0ZXJfb3BlbgorCURCR19MRUFWRShEYmdJbmZvKTsKKwlyZXR1cm4gcmVzdWx0OworfSAvKiB3bF9hZGFwdGVyX29wZW4gKi8KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIApAQCAtNDIxLDU2ICs0MTYsNTUgQEAKICAqICAgICAgZXJybm8gdmFsdWUgb3RoZXJ3aXNlCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludCB3bF9hZGFwdGVyX2Nsb3NlKCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ICkKK2ludCB3bF9hZGFwdGVyX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gICAgc3RydWN0IHdsX3ByaXZhdGUgKmxwID0gd2xfcHJpdihkZXYpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbHAtPmxpbms7Ci0gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCXN0cnVjdCB3bF9wcml2YXRlICpscCA9IHdsX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxwLT5saW5rOworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisJREJHX0ZVTkMoIndsX2FkYXB0ZXJfY2xvc2UiKTsKKwlEQkdfRU5URVIoRGJnSW5mbyk7CisJREJHX1BBUkFNKERiZ0luZm8sICJkZXYiLCAiJXMgKDB4JXApIiwgZGV2LT5uYW1lLCBkZXYpOwogCi0gICAgREJHX0ZVTkMoICJ3bF9hZGFwdGVyX2Nsb3NlIiApOwotICAgIERCR19FTlRFUiggRGJnSW5mbyApOwotICAgIERCR19QQVJBTSggRGJnSW5mbywgImRldiIsICIlcyAoMHglcCkiLCBkZXYtPm5hbWUsIGRldiApOworCWlmIChsaW5rID09IE5VTEwpIHsKKwkJREJHX0xFQVZFKERiZ0luZm8pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKLSAgICBpZiggbGluayA9PSBOVUxMICkgewotICAgICAgICBEQkdfTEVBVkUoIERiZ0luZm8gKTsKLSAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0gICAgfQorCURCR19UUkFDRShEYmdJbmZvLCAiJXM6IFNodXR0aW5nIGRvd24gYWRhcHRlci5cbiIsIGRldi0+bmFtZSk7CisJd2xfY2xvc2UoZGV2KTsKIAotICAgIERCR19UUkFDRSggRGJnSW5mbywgIiVzOiBTaHV0dGluZyBkb3duIGFkYXB0ZXIuXG4iLCBkZXYtPm5hbWUgKTsKLSAgICB3bF9jbG9zZSggZGV2ICk7CisJbGluay0+b3Blbi0tOwogCi0gICAgbGluay0+b3Blbi0tOwotCi0gICAgREJHX0xFQVZFKCBEYmdJbmZvICk7Ci0gICAgcmV0dXJuIDA7Ci19IC8vIHdsX2FkYXB0ZXJfY2xvc2UKKwlEQkdfTEVBVkUoRGJnSW5mbyk7CisJcmV0dXJuIDA7Cit9IC8qIHdsX2FkYXB0ZXJfY2xvc2UgKi8KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCB3bF9hZGFwdGVyX2lkc1tdID0gewotI2lmICEgKChIQ0ZfVFlQRSkgJiBIQ0ZfVFlQRV9ISUk1KQorI2lmICEoKEhDRl9UWVBFKSAmIEhDRl9UWVBFX0hJSTUpCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTU2LCAweDAwMDMpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJBZ2VyZSBTeXN0ZW1zIiwgIldpcmVsZXNzIFBDIENhcmQgTW9kZWwgMDExMCIsCi0JCQkgICAgMHgzMzEwM2E5YiwgMHhlMTc1YjBkZCksCisJCQkJMHgzMzEwM2E5YiwgMHhlMTc1YjBkZCksCiAjZWxzZQogCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDE1NiwgMHgwMDA0KSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiTGlua3N5cyIsICJXQ0Y1NEdfV2lyZWxlc3MtR19Db21wYWN0Rmxhc2hfQ2FyZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzMzY2M4MSwgMHg5OGE1OTllMSksCi0jZW5kaWYgIC8vIChIQ0ZfVFlQRSkgJiBIQ0ZfVFlQRV9ISUk1CisJCQkJMHgwNzMzY2M4MSwgMHg5OGE1OTllMSksCisjZW5kaWYgIC8qIChIQ0ZfVFlQRSkgJiBIQ0ZfVFlQRV9ISUk1ICovCiAJUENNQ0lBX0RFVklDRV9OVUxMLAotCX07Cit9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY21jaWEsIHdsX2FkYXB0ZXJfaWRzKTsKIAogc3RhdGljIHN0cnVjdCBwY21jaWFfZHJpdmVyIHdsYWdzNDlfZHJpdmVyID0gewotICAgIC5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAotICAgIC5kcnYgICAgICAgICAgICA9IHsKLQkubmFtZSAgID0gRFJJVkVSX05BTUUsCi0gICAgfSwKLSAgICAucHJvYmUJPSB3bF9hZGFwdGVyX2F0dGFjaCwKLSAgICAucmVtb3ZlCT0gd2xfYWRhcHRlcl9kZXRhY2gsCi0gICAgLmlkX3RhYmxlCT0gd2xfYWRhcHRlcl9pZHMsCi0gICAgLnN1c3BlbmQJPSB3bF9hZGFwdGVyX3N1c3BlbmQsCi0gICAgLnJlc3VtZQk9IHdsX2FkYXB0ZXJfcmVzdW1lLAorCS5vd25lcgkgICAgPSBUSElTX01PRFVMRSwKKwkuZHJ2CSAgICA9IHsKKwkJLm5hbWUgPSBEUklWRVJfTkFNRSwKKwl9LAorCS5wcm9iZQkgICAgPSB3bF9hZGFwdGVyX2F0dGFjaCwKKwkucmVtb3ZlCSAgICA9IHdsX2FkYXB0ZXJfZGV0YWNoLAorCS5pZF90YWJsZSAgID0gd2xfYWRhcHRlcl9pZHMsCisJLnN1c3BlbmQgICAgPSB3bF9hZGFwdGVyX3N1c3BlbmQsCisJLnJlc3VtZQkgICAgPSB3bF9hZGFwdGVyX3Jlc3VtZSwKIH07CiAKIApAQCAtNDkzLDIxICs0ODcsMjAgQEAKICAqICAgICAgLTEgb24gZXJyb3IKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50IHdsX2FkYXB0ZXJfaW5pdF9tb2R1bGUoIHZvaWQgKQoraW50IHdsX2FkYXB0ZXJfaW5pdF9tb2R1bGUodm9pZCkKIHsKLSAgICBpbnQgcmV0OwotICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlpbnQgcmV0OworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisJREJHX0ZVTkMoIndsX2FkYXB0ZXJfaW5pdF9tb2R1bGUiKTsKKwlEQkdfRU5URVIoRGJnSW5mbyk7CisJREJHX1RSQUNFKERiZ0luZm8sICJ3bF9hZGFwdGVyX2luaXRfbW9kdWxlKCkgLS0gUENNQ0lBXG4iKTsKIAotICAgIERCR19GVU5DKCAid2xfYWRhcHRlcl9pbml0X21vZHVsZSIgKTsKLSAgICBEQkdfRU5URVIoIERiZ0luZm8gKTsKLSAgICBEQkdfVFJBQ0UoIERiZ0luZm8sICJ3bF9hZGFwdGVyX2luaXRfbW9kdWxlKCkgLS0gUENNQ0lBXG4iICk7CisJcmV0ID0gcGNtY2lhX3JlZ2lzdGVyX2RyaXZlcigmd2xhZ3M0OV9kcml2ZXIpOwogCi0gICAgcmV0ID0gcGNtY2lhX3JlZ2lzdGVyX2RyaXZlcigmd2xhZ3M0OV9kcml2ZXIpOwotCi0gICAgREJHX0xFQVZFKCBEYmdJbmZvICk7Ci0gICAgcmV0dXJuIHJldDsKLX0gLy8gd2xfYWRhcHRlcl9pbml0X21vZHVsZQorCURCR19MRUFWRShEYmdJbmZvKTsKKwlyZXR1cm4gcmV0OworfSAvKiB3bF9hZGFwdGVyX2luaXRfbW9kdWxlICovCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiAKQEAgLTUyOCwxOCArNTIxLDE4IEBACiAgKiAgICAgIE4vQQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkIHdsX2FkYXB0ZXJfY2xlYW51cF9tb2R1bGUoIHZvaWQgKQordm9pZCB3bF9hZGFwdGVyX2NsZWFudXBfbW9kdWxlKHZvaWQpCiB7Ci0gICAgREJHX0ZVTkMoICJ3bF9hZGFwdGVyX2NsZWFudXBfbW9kdWxlIiApOwotICAgIERCR19FTlRFUiggRGJnSW5mbyApOwotICAgIERCR19UUkFDRSggRGJnSW5mbywgIndsX2FkYXB0ZXJfY2xlYW51cF9tb2R1bGUoKSAtLSBQQ01DSUFcbiIgKTsKKwlEQkdfRlVOQygid2xfYWRhcHRlcl9jbGVhbnVwX21vZHVsZSIpOworCURCR19FTlRFUihEYmdJbmZvKTsKKwlEQkdfVFJBQ0UoRGJnSW5mbywgIndsX2FkYXB0ZXJfY2xlYW51cF9tb2R1bGUoKSAtLSBQQ01DSUFcbiIpOwogCiAKLSAgICBwY21jaWFfdW5yZWdpc3Rlcl9kcml2ZXIoJndsYWdzNDlfZHJpdmVyKTsKKwlwY21jaWFfdW5yZWdpc3Rlcl9kcml2ZXIoJndsYWdzNDlfZHJpdmVyKTsKIAotICAgIERCR19MRUFWRSggRGJnSW5mbyApOwotICAgIHJldHVybjsKLX0gLy8gd2xfYWRhcHRlcl9jbGVhbnVwX21vZHVsZQorCURCR19MRUFWRShEYmdJbmZvKTsKKwlyZXR1cm47Cit9IC8qIHdsX2FkYXB0ZXJfY2xlYW51cF9tb2R1bGUgKi8KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIApAQCAtNTYyLDE3ICs1NTUsMTYgQEAKICAqICAgICAgMCBvdGhlcndpc2UKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50IHdsX2FkYXB0ZXJfaXNfb3Blbiggc3RydWN0IG5ldF9kZXZpY2UgKmRldiApCitpbnQgd2xfYWRhcHRlcl9pc19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gICAgc3RydWN0IHdsX3ByaXZhdGUgKmxwID0gd2xfcHJpdihkZXYpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbHAtPmxpbms7CisJc3RydWN0IHdsX3ByaXZhdGUgKmxwID0gd2xfcHJpdihkZXYpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbHAtPmxpbms7CiAKLSAgICBpZighcGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKwlpZiAoIXBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkKKwkJcmV0dXJuIDA7CiAKLSAgICByZXR1cm4oIGxpbmstPm9wZW4gKTsKLX0gLy8gd2xfYWRhcHRlcl9pc19vcGVuCisJcmV0dXJuIGxpbmstPm9wZW47Cit9IC8qIHdsX2FkYXB0ZXJfaXNfb3BlbiAqLwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogCkBAIC01OTYsOTcgKzU4OCw5NSBAQAogICogICAgICBhIHBvaW50ZXIgdG8gYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZXJyb3IocykKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotY29uc3QgY2hhciogRGJnRXZlbnQoIGludCBtYXNrICkKK2NvbnN0IGNoYXIgKkRiZ0V2ZW50KGludCBtYXNrKQogewotICAgIHN0YXRpYyBjaGFyIERiZ0J1ZmZlclsyNTZdOwotICAgIGNoYXIgKnBCdWY7Ci0gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCXN0YXRpYyBjaGFyIERiZ0J1ZmZlclsyNTZdOworCWNoYXIgKnBCdWY7CisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKwlwQnVmICAgID0gRGJnQnVmZmVyOworCSpwQnVmICAgPSAnXDAnOwogCiAKLSAgICBwQnVmICAgID0gRGJnQnVmZmVyOwotICAgICpwQnVmICAgPSAnXDAnOworCWlmIChtYXNrICYgQ1NfRVZFTlRfV1JJVEVfUFJPVEVDVCkKKwkJc3RyY2F0KHBCdWYsICJXUklURV9QUk9URUNUICIpOworCisJaWYgKG1hc2sgJiBDU19FVkVOVF9DQVJEX0xPQ0spCisJCXN0cmNhdChwQnVmLCAiQ0FSRF9MT0NLICIpOworCisJaWYgKG1hc2sgJiBDU19FVkVOVF9DQVJEX0lOU0VSVElPTikKKwkJc3RyY2F0KHBCdWYsICJDQVJEX0lOU0VSVElPTiAiKTsKKworCWlmIChtYXNrICYgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMKQorCQlzdHJjYXQocEJ1ZiwgIkNBUkRfUkVNT1ZBTCAiKTsKKworCWlmIChtYXNrICYgQ1NfRVZFTlRfQkFUVEVSWV9ERUFEKQorCQlzdHJjYXQocEJ1ZiwgIkJBVFRFUllfREVBRCAiKTsKKworCWlmIChtYXNrICYgQ1NfRVZFTlRfQkFUVEVSWV9MT1cpCisJCXN0cmNhdChwQnVmLCAiQkFUVEVSWV9MT1cgIik7CisKKwlpZiAobWFzayAmIENTX0VWRU5UX1JFQURZX0NIQU5HRSkKKwkJc3RyY2F0KHBCdWYsICJSRUFEWV9DSEFOR0UgIik7CisKKwlpZiAobWFzayAmIENTX0VWRU5UX0NBUkRfREVURUNUKQorCQlzdHJjYXQocEJ1ZiwgIkNBUkRfREVURUNUICIpOworCisJaWYgKG1hc2sgJiBDU19FVkVOVF9SRVNFVF9SRVFVRVNUKQorCQlzdHJjYXQocEJ1ZiwgIlJFU0VUX1JFUVVFU1QgIik7CisKKwlpZiAobWFzayAmIENTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMKQorCQlzdHJjYXQocEJ1ZiwgIlJFU0VUX1BIWVNJQ0FMICIpOworCisJaWYgKG1hc2sgJiBDU19FVkVOVF9DQVJEX1JFU0VUKQorCQlzdHJjYXQocEJ1ZiwgIkNBUkRfUkVTRVQgIik7CisKKwlpZiAobWFzayAmIENTX0VWRU5UX1JFR0lTVFJBVElPTl9DT01QTEVURSkKKwkJc3RyY2F0KHBCdWYsICJSRUdJU1RSQVRJT05fQ09NUExFVEUgIik7CisKKwkvKiBpZiAobWFzayAmIENTX0VWRU5UX1JFU0VUX0NPTVBMRVRFKQorCQlzdHJjYXQocEJ1ZiwgIlJFU0VUX0NPTVBMRVRFICIpOyAqLworCisJaWYgKG1hc2sgJiBDU19FVkVOVF9QTV9TVVNQRU5EKQorCQlzdHJjYXQocEJ1ZiwgIlBNX1NVU1BFTkQgIik7CisKKwlpZiAobWFzayAmIENTX0VWRU5UX1BNX1JFU1VNRSkKKwkJc3RyY2F0KHBCdWYsICJQTV9SRVNVTUUgIik7CisKKwlpZiAobWFzayAmIENTX0VWRU5UX0lOU0VSVElPTl9SRVFVRVNUKQorCQlzdHJjYXQocEJ1ZiwgIklOU0VSVElPTl9SRVFVRVNUICIpOworCisJaWYgKG1hc2sgJiBDU19FVkVOVF9FSkVDVElPTl9SRVFVRVNUKQorCQlzdHJjYXQocEJ1ZiwgIkVKRUNUSU9OX1JFUVVFU1QgIik7CisKKwlpZiAobWFzayAmIENTX0VWRU5UX01URF9SRVFVRVNUKQorCQlzdHJjYXQocEJ1ZiwgIk1URF9SRVFVRVNUICIpOworCisJaWYgKG1hc2sgJiBDU19FVkVOVF9FUkFTRV9DT01QTEVURSkKKwkJc3RyY2F0KHBCdWYsICJFUkFTRV9DT01QTEVURSAiKTsKKworCWlmIChtYXNrICYgQ1NfRVZFTlRfUkVRVUVTVF9BVFRFTlRJT04pCisJCXN0cmNhdChwQnVmLCAiUkVRVUVTVF9BVFRFTlRJT04gIik7CisKKwlpZiAobWFzayAmIENTX0VWRU5UX0NCX0RFVEVDVCkKKwkJc3RyY2F0KHBCdWYsICJDQl9ERVRFQ1QgIik7CisKKwlpZiAobWFzayAmIENTX0VWRU5UXzNWQ0FSRCkKKwkJc3RyY2F0KHBCdWYsICIzVkNBUkQgIik7CisKKwlpZiAobWFzayAmIENTX0VWRU5UX1hWQ0FSRCkKKwkJc3RyY2F0KHBCdWYsICJYVkNBUkQgIik7CiAKIAotICAgIGlmKCBtYXNrICYgQ1NfRVZFTlRfV1JJVEVfUFJPVEVDVCApCi0gICAgICAgIHN0cmNhdCggcEJ1ZiwgIldSSVRFX1BST1RFQ1QgIiApOworCWlmICgqcEJ1ZikgeworCQlwQnVmW3N0cmxlbihwQnVmKSAtIDFdID0gJ1wwJzsKKwl9IGVsc2UgeworCQlpZiAobWFzayAhPSAweDApCisJCQlzcHJpbnRmKHBCdWYsICI8PDB4JTA4eD4+IiwgbWFzayk7CisJfQogCi0gICAgaWYobWFzayAmIENTX0VWRU5UX0NBUkRfTE9DSykKLSAgICAgICAgc3RyY2F0KCBwQnVmLCAiQ0FSRF9MT0NLICIgKTsKLQotICAgIGlmKG1hc2sgJiBDU19FVkVOVF9DQVJEX0lOU0VSVElPTikKLSAgICAgICAgc3RyY2F0KCBwQnVmLCAiQ0FSRF9JTlNFUlRJT04gIiApOwotCi0gICAgaWYobWFzayAmIENTX0VWRU5UX0NBUkRfUkVNT1ZBTCkKLSAgICAgICAgc3RyY2F0KCBwQnVmLCAiQ0FSRF9SRU1PVkFMICIgKTsKLQotICAgIGlmKG1hc2sgJiBDU19FVkVOVF9CQVRURVJZX0RFQUQpCi0gICAgICAgIHN0cmNhdCggcEJ1ZiwgIkJBVFRFUllfREVBRCAiICk7Ci0KLSAgICBpZihtYXNrICYgQ1NfRVZFTlRfQkFUVEVSWV9MT1cpCi0gICAgICAgIHN0cmNhdCggcEJ1ZiwgIkJBVFRFUllfTE9XICIgKTsKLQotICAgIGlmKG1hc2sgJiBDU19FVkVOVF9SRUFEWV9DSEFOR0UpCi0gICAgICAgIHN0cmNhdCggcEJ1ZiwgIlJFQURZX0NIQU5HRSAiICk7Ci0KLSAgICBpZihtYXNrICYgQ1NfRVZFTlRfQ0FSRF9ERVRFQ1QpCi0gICAgICAgIHN0cmNhdCggcEJ1ZiwgIkNBUkRfREVURUNUICIgKTsKLQotICAgIGlmKG1hc2sgJiBDU19FVkVOVF9SRVNFVF9SRVFVRVNUKQotICAgICAgICBzdHJjYXQoIHBCdWYsICJSRVNFVF9SRVFVRVNUICIgKTsKLQotICAgIGlmKG1hc2sgJiBDU19FVkVOVF9SRVNFVF9QSFlTSUNBTCkKLSAgICAgICAgc3RyY2F0KCBwQnVmLCAiUkVTRVRfUEhZU0lDQUwgIiApOwotCi0gICAgaWYobWFzayAmIENTX0VWRU5UX0NBUkRfUkVTRVQpCi0gICAgICAgIHN0cmNhdCggcEJ1ZiwgIkNBUkRfUkVTRVQgIiApOwotCi0gICAgaWYobWFzayAmIENTX0VWRU5UX1JFR0lTVFJBVElPTl9DT01QTEVURSkKLSAgICAgICAgc3RyY2F0KCBwQnVmLCAiUkVHSVNUUkFUSU9OX0NPTVBMRVRFICIgKTsKLQotICAgIC8vIGlmKG1hc2sgJiBDU19FVkVOVF9SRVNFVF9DT01QTEVURSkKLSAgICAvLyAgICAgc3RyY2F0KCBwQnVmLCAiUkVTRVRfQ09NUExFVEUgIiApOwotCi0gICAgaWYobWFzayAmIENTX0VWRU5UX1BNX1NVU1BFTkQpCi0gICAgICAgIHN0cmNhdCggcEJ1ZiwgIlBNX1NVU1BFTkQgIiApOwotCi0gICAgaWYobWFzayAmIENTX0VWRU5UX1BNX1JFU1VNRSkKLSAgICAgICAgc3RyY2F0KCBwQnVmLCAiUE1fUkVTVU1FICIgKTsKLQotICAgIGlmKG1hc2sgJiBDU19FVkVOVF9JTlNFUlRJT05fUkVRVUVTVCkKLSAgICAgICAgc3RyY2F0KCBwQnVmLCAiSU5TRVJUSU9OX1JFUVVFU1QgIiApOwotCi0gICAgaWYobWFzayAmIENTX0VWRU5UX0VKRUNUSU9OX1JFUVVFU1QpCi0gICAgICAgIHN0cmNhdCggcEJ1ZiwgIkVKRUNUSU9OX1JFUVVFU1QgIiApOwotCi0gICAgaWYobWFzayAmIENTX0VWRU5UX01URF9SRVFVRVNUKQotICAgICAgICBzdHJjYXQoIHBCdWYsICJNVERfUkVRVUVTVCAiICk7Ci0KLSAgICBpZihtYXNrICYgQ1NfRVZFTlRfRVJBU0VfQ09NUExFVEUpCi0gICAgICAgIHN0cmNhdCggcEJ1ZiwgIkVSQVNFX0NPTVBMRVRFICIgKTsKLQotICAgIGlmKG1hc2sgJiBDU19FVkVOVF9SRVFVRVNUX0FUVEVOVElPTikKLSAgICAgICAgc3RyY2F0KCBwQnVmLCAiUkVRVUVTVF9BVFRFTlRJT04gIiApOwotCi0gICAgaWYobWFzayAmIENTX0VWRU5UX0NCX0RFVEVDVCkKLSAgICAgICAgc3RyY2F0KCBwQnVmLCAiQ0JfREVURUNUICIgKTsKLQotICAgIGlmKG1hc2sgJiBDU19FVkVOVF8zVkNBUkQpCi0gICAgICAgIHN0cmNhdCggcEJ1ZiwgIjNWQ0FSRCAiICk7Ci0KLSAgICBpZihtYXNrICYgQ1NfRVZFTlRfWFZDQVJEKQotICAgICAgICBzdHJjYXQoIHBCdWYsICJYVkNBUkQgIiApOwotCi0KLSAgICBpZiggKnBCdWYgKSB7Ci0gICAgICAgIHBCdWZbc3RybGVuKHBCdWYpIC0gMV0gPSAnXDAnOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmKCBtYXNrICE9IDB4MCApIHsKLSAgICAgICAgICAgIHNwcmludGYoIHBCdWYsICI8PDB4JTA4eD4+IiwgbWFzayApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBCdWY7Ci19IC8vIERiZ0V2ZW50CisJcmV0dXJuIHBCdWY7Cit9IC8qIERiZ0V2ZW50ICovCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiAjZW5kaWYgIC8qIERCRyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfY3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX2NzLmgKaW5kZXggYTliODgyOC4uMjFmMTdiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfY3MuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9jcy5oCkBAIC03Miw4ICs3Miw2IEBACiAKIHZvaWQgd2xfYWRhcHRlcl9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKIAotaW50IHdsX2FkYXB0ZXJfZXZlbnQoZXZlbnRfdCBldmVudCwgaW50IHByaW9yaXR5LCBldmVudF9jYWxsYmFja19hcmdzX3QgKmFyZ3MgKTsKLQogaW50IHdsX2FkYXB0ZXJfaW5pdF9tb2R1bGUoIHZvaWQgKTsKIAogdm9pZCB3bF9hZGFwdGVyX2NsZWFudXBfbW9kdWxlKCB2b2lkICk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9pbnRlcm5hbC5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfaW50ZXJuYWwuaAppbmRleCBkOWEwYWQwLi4wMmYwYTIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX2ludGVybmFsLmgKQEAgLTY5LDcgKzY5LDYgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2lmZGVmIEJVU19QQ01DSUEKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfbmV0ZGV2LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9uZXRkZXYuYwppbmRleCAxYWE2MWRiLi5lMmE3YWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9uZXRkZXYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9uZXRkZXYuYwpAQCAtMTkwNSw4ICsxOTA1LDggQEAKICAgICBEQkdfRlVOQygid2xfcngiKQogICAgIERCR19QQVJBTShEYmdJbmZvLCAiZGV2IiwgIiVzICgweCVwKSIsIGRldi0+bmFtZSwgZGV2KTsKIAotICAgIGlmKCgoIGxwID0gKHN0cnVjdCB3bF9wcml2YXRlICopZGV2LT5wcml2ICkgIT0gTlVMTCApICYmCi0gICAgICAgICAgISggbHAtPmZsYWdzICYgV1ZMQU4yX1VJTF9CVVNZICkpIHsKKyAgICBpZigoKCBscCA9IGRldi0+cHJpdiApICE9IE5VTEwgKSAmJgorCSEoIGxwLT5mbGFncyAmIFdWTEFOMl9VSUxfQlVTWSApKSB7CiAKICNpZmRlZiBVU0VfUlRTCiAgICAgICAgIGlmKCBscC0+dXNlUlRTID09IDEgKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9wY2kuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3BjaS5jCmluZGV4IDY3NTFiNGIuLjAyMGIxN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3BjaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3BjaS5jCkBAIC0xMTcsOSArMTE3LDEzIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgd2xfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JeyBXTF9MS01fUENJX1ZFTkRPUl9JRCwgV0xfTEtNX1BDSV9ERVZJQ0VfSURfMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hfQWdlcmVfU3lzdGVtc19NaW5pX1BDSV9WMSB9LAotICAgIHsgV0xfTEtNX1BDSV9WRU5ET1JfSUQsIFdMX0xLTV9QQ0lfREVWSUNFX0lEXzEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENIX0FnZXJlX1N5c3RlbXNfTWluaV9QQ0lfVjEgfSwKLSAgICB7IFdMX0xLTV9QQ0lfVkVORE9SX0lELCBXTF9MS01fUENJX0RFVklDRV9JRF8yLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSF9BZ2VyZV9TeXN0ZW1zX01pbmlfUENJX1YxIH0sCisJeyBQQ0lfVkVORE9SX0lEX1dMX0xLTSwgUENJX0RFVklDRV9JRF9XTF9MS01fMCwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENIX0FnZXJlX1N5c3RlbXNfTWluaV9QQ0lfVjEgfSwKKwl7IFBDSV9WRU5ET1JfSURfV0xfTEtNLCBQQ0lfREVWSUNFX0lEX1dMX0xLTV8xLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hfQWdlcmVfU3lzdGVtc19NaW5pX1BDSV9WMSB9LAorCXsgUENJX1ZFTkRPUl9JRF9XTF9MS00sIFBDSV9ERVZJQ0VfSURfV0xfTEtNXzIsCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSF9BZ2VyZV9TeXN0ZW1zX01pbmlfUENJX1YxIH0sCisKIAl7IH0JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIApAQCAtNDY1LDcgKzQ2OSw3IEBACiAgICAgZnJlZV9pcnEoIGRldi0+aXJxLCBkZXYgKTsKIAogI2lmZGVmIEVOQUJMRV9ETUEKLSAgICB3bF9wY2lfZG1hX2ZyZWUoIHBkZXYsIChzdHJ1Y3Qgd2xfcHJpdmF0ZSAqKWRldi0+cHJpdiApOworICAgIHdsX3BjaV9kbWFfZnJlZSggcGRldiwgZGV2LT5wcml2ICk7CiAjZW5kaWYKIAogICAgIHdsX2RldmljZV9kZWFsbG9jKCBkZXYgKTsKQEAgLTUzNCw3ICs1MzgsNyBAQAogCiAjaWZkZWYgRU5BQkxFX0RNQQogICAgIC8qIEFsbG9jYXRlIERNQSBEZXNjcmlwdG9ycyAqLwotICAgIGlmKCB3bF9wY2lfZG1hX2FsbG9jKCBwZGV2LCAoc3RydWN0IHdsX3ByaXZhdGUgKilkZXYtPnByaXYgKSA8IDAgKSB7CisgICAgaWYoIHdsX3BjaV9kbWFfYWxsb2MoIHBkZXYsIGRldi0+cHJpdiApIDwgMCApIHsKICAgICAgICAgREJHX0VSUk9SKCBEYmdJbmZvLCAiQ291bGQgbm90IGFsbG9jYXRlIERNQSBkZXNjcmlwdG9yIG1lbW9yeSEhIVxuIiApOwogICAgICAgICBEQkdfTEVBVkUoIERiZ0luZm8gKTsKICAgICAgICAgcmV0dXJuIC1FTk9NRU07CkBAIC01NzAsNyArNTc0LDcgQEAKIAl9CiAKICAgICAvKiBNYWtlIHN1cmUgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCBwcm9wZXJseSBmb3IgQ2FyZEJ1cyAqLwotICAgIGxwID0gKHN0cnVjdCB3bF9wcml2YXRlICopZGV2LT5wcml2OworICAgIGxwID0gZGV2LT5wcml2OwogCiAgICAgaWYoIGxwLT5oY2ZDdHguSUZCX0J1c1R5cGUgPT0gQ0ZHX05JQ19CVVNfVFlQRV9DQVJEQlVTIHx8CiAJICAgIGxwLT5oY2ZDdHguSUZCX0J1c1R5cGUgPT0gQ0ZHX05JQ19CVVNfVFlQRV9QQ0kgCQkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3BjaS5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfcGNpLmgKaW5kZXggMThkN2I1MS4uY2VhMDRjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfcGNpLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfcGNpLmgKQEAgLTY3LDEwICs2NywxMCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICBjb25zdGFudCBkZWZpbml0aW9ucwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgV0xfTEtNX1BDSV9WRU5ET1JfSUQgICAgMHgxMUMxICAvLyBMdWNlbnQgTWljcm9lbGVjdHJvbmljcwotI2RlZmluZSBXTF9MS01fUENJX0RFVklDRV9JRF8wICAweEFCMzAgIC8vIE1pbmkgUENJCi0jZGVmaW5lIFdMX0xLTV9QQ0lfREVWSUNFX0lEXzEgIDB4QUIzNCAgLy8gTWluaSBQQ0kKLSNkZWZpbmUgV0xfTEtNX1BDSV9ERVZJQ0VfSURfMiAgMHhBQjExICAvLyBXQVJQIENhcmRCdXMKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRFdMX0xLTSAgICAgMHgxMUMxICAvKiBMdWNlbnQgTWljcm9lbGVjdHJvbmljcyAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1dMX0xLTV8wICAweEFCMzAgIC8qIE1pbmkgUENJICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfV0xfTEtNXzEgIDB4QUIzNCAgLyogTWluaSBQQ0kgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9XTF9MS01fMiAgMHhBQjExICAvKiBXQVJQIENhcmRCdXMgKi8KIAogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3Byb2ZpbGUuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3Byb2ZpbGUuYwppbmRleCAyOTJkNTc5Li43YTEzMzdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9wcm9maWxlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfcHJvZmlsZS5jCkBAIC0xNjksNyArMTY5LDcgQEAKIAlEQkdfRU5URVIoRGJnSW5mbyk7CiAKIAkvKiBHZXQgdGhlIHdhdmVsYW4gc3BlY2lmaWMgaW5mbyBmb3IgdGhpcyBkZXZpY2UgKi8KLQl3dmxhbl9jb25maWcgPSAoc3RydWN0IHdsX3ByaXZhdGUgKilkZXYtPnByaXY7CisJd3ZsYW5fY29uZmlnID0gZGV2LT5wcml2OwogCWlmICh3dmxhbl9jb25maWcgPT0gTlVMTCkgewogCQlEQkdfRVJST1IoRGJnSW5mbywgIldhdmVsYW4gc3BlY2lmaWMgaW5mbyBzdHJ1Y3Qgbm90IHByZXNlbnQ/XG4iKTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfdXRpbC5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfdXRpbC5jCmluZGV4IGJiZGI5OTcuLmNlOGVkNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3V0aWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF91dGlsLmMKQEAgLTI1OSw0MSArMjU5LDYgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJaGV4ZGlnaXQyaW50KCkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogIERFU0NSSVBUSU9OOgotICoKLSAqICAgICAgQ29udmVydHMgYSBoZXhhZGVjaW1hbCBkaWdpdCBjaGFyYWN0ZXIgdG8gYW4gaW50ZWdlcgotICoKLSAqICBQQVJBTUVURVJTOgotICoKLSAqICAgICAgYyAgIC0gdGhlIGhleGFkZWNpbWFsIGRpZ2l0IGNoYXJhY3RlcgotICoKLSAqICBSRVRVUk5TOgotICoKLSAqICAgICAgdGhlIGNvbnZlcnRlZCBpbnRlZ2VyCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludCBoZXhkaWdpdDJpbnQoIGNoYXIgYyApCi17Ci0gICBpZiggYyA+PSAnMCcgJiYgYyA8PSAnOScgKQotICAgICAgIHJldHVybiBjIC0gJzAnOwotCi0gICBpZiggYyA+PSAnQScgJiYgYyA8PSAnRicgKQotICAgICAgIHJldHVybiBjIC0gJ0EnICsgMTA7Ci0KLSAgIGlmKCBjID49ICdhJyAmJiBjIDw9ICdmJyApCi0gICAgICAgcmV0dXJuIGMgLSAnYScgKyAxMDsKLQotICAgcmV0dXJuIDA7Ci19IC8vIGhleGRpZ2l0MmludAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCWtleV9zdHJpbmcya2V5KCkKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMzI4LDcgKzI5Myw3IEBACiAgICAgICAgIHAgPSAoY2hhciAqKWtleS0+a2V5OwogCiAgICAgICAgIGZvciggaSA9IDI7IGkgPCBsOyBpKz0yICkgewotICAgICAgICAgICAqcCsrID0gKCBoZXhkaWdpdDJpbnQoIGtzW2ldICkgPDwgNCApICsgaGV4ZGlnaXQyaW50IChrc1tpKzFdICk7CisJCQkqcCsrID0gKGhleF90b19iaW4oa3NbaV0pIDw8IDQpICsgaGV4X3RvX2Jpbihrc1tpKzFdKTsKICAgICAgICAgICAgbisrOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3V0aWwuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3V0aWwuaAppbmRleCA1NjFlODViLi5iYTUzN2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF91dGlsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfdXRpbC5oCkBAIC03MSw4ICs3MSw2IEBACiAKIHZvaWQga2V5X3N0cmluZzJrZXkoIGNoYXIgKmtzLCBLRVlfU1RSQ1QgKmtleSApOwogCi1pbnQgaGV4ZGlnaXQyaW50KCBjaGFyIGMgKTsKLQogdm9pZCB3bF9oY2ZfZXJyb3IoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBoY2ZTdGF0dXMgKTsKIAogdm9pZCB3bF9lbmRpYW5fdHJhbnNsYXRlX2V2ZW50KCBsdHZfdCAqcEx0diApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL0tjb25maWcKaW5kZXggODJmY2MxNi4uNDI2ZDRlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFBSSVNNMl9VU0IKIAl0cmlzdGF0ZSAiUHJpc20yLjUvMyBVU0IgZHJpdmVyIgotCWRlcGVuZHMgb24gV0xBTiAmJiBVU0IKKwlkZXBlbmRzIG9uIFdMQU4gJiYgVVNCICYmIENGRzgwMjExCiAJc2VsZWN0IFdJUkVMRVNTX0VYVAogCXNlbGVjdCBXRVhUX1BSSVYKIAlkZWZhdWx0IG4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvTWFrZWZpbGUKaW5kZXggNWVkYWM1Yy4uZGI1ZDU5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvTWFrZWZpbGUKQEAgLTQsNSArNCw0IEBACiAJCXA4MDIxMWNvbnYubyBcCiAJCXA4MDIxMXJlcS5vIFwKIAkJcDgwMjExd2VwLm8gXAotCQlwODAyMTF3ZXh0Lm8gXAogCQlwODAyMTFuZXRkZXYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvY2ZnODAyMTEuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2NmZzgwMjExLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY4YzMwYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2NmZzgwMjExLmMKQEAgLTAsMCArMSw3NjAgQEAKKy8qIGNmZzgwMjExIEludGVyZmFjZSBmb3IgcHJpc20yX3VzYiBtb2R1bGUgKi8KKworCisvKiBQcmlzbTIgY2hhbm5lbGwvZnJlcXVlbmN5L2JpdHJhdGUgZGVjbGFyYXRpb25zICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHByaXNtMl9jaGFubmVsc1tdID0geworCXsgLmNlbnRlcl9mcmVxID0gMjQxMiB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQxNyB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQyMiB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQyNyB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQzMiB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQzNyB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ0MiB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ0NyB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ1MiB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ1NyB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ2MiB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ2NyB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ3MiB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ4NCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBwcmlzbTJfcmF0ZXNbXSA9IHsKKwl7IC5iaXRyYXRlID0gMTAgfSwKKwl7IC5iaXRyYXRlID0gMjAgfSwKKwl7IC5iaXRyYXRlID0gNTUgfSwKKwl7IC5iaXRyYXRlID0gMTEwIH0KK307CisKKyNkZWZpbmUgUFJJU00yX05VTV9DSVBIRVJfU1VJVEVTIDIKK3N0YXRpYyBjb25zdCB1MzIgcHJpc20yX2NpcGhlcl9zdWl0ZXNbUFJJU00yX05VTV9DSVBIRVJfU1VJVEVTXSA9IHsKKwlXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCwKKwlXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQKK307CisKKworLyogcHJpc20yIGRldmljZSBwcml2YXRlIGRhdGEgKi8KK3N0cnVjdCBwcmlzbTJfd2lwaHlfcHJpdmF0ZSB7CisJd2xhbmRldmljZV90ICp3bGFuZGV2OworCisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFubmVsc1tBUlJBWV9TSVpFKHByaXNtMl9jaGFubmVscyldOworCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSByYXRlc1tBUlJBWV9TSVpFKHByaXNtMl9yYXRlcyldOworCisJc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqc2Nhbl9yZXF1ZXN0OworfTsKKworc3RhdGljIGNvbnN0IHZvaWQgKiBjb25zdCBwcmlzbTJfd2lwaHlfcHJpdmlkID0gJnByaXNtMl93aXBoeV9wcml2aWQ7CisKKworLyogSGVscGVyIEZ1bmN0aW9ucyAqLworc3RhdGljIGludCBwcmlzbTJfcmVzdWx0MmVycihpbnQgcHJpc20yX3Jlc3VsdCkKK3sKKwlpbnQgZXJyID0gMDsKKworCXN3aXRjaCAocHJpc20yX3Jlc3VsdCkgeworCWNhc2UgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczoKKwkJZXJyID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZToKKwkJZXJyID0gLUVJTzsKKwkJYnJlYWs7CisJY2FzZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDoKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVyciA9IDA7CisJCWJyZWFrOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcHJpc20yX2RvbWlic2V0X3VpbnQzMih3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHUzMiBkaWQsIHUzMiBkYXRhKQoreworCXN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0IG1zZzsKKwlwODAyMTFpdGVtX3VpbnQzMl90ICptaWJpdGVtID0gKHA4MDIxMWl0ZW1fdWludDMyX3QgKikgJm1zZy5taWJhdHRyaWJ1dGUuZGF0YTsKKworCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKKwltaWJpdGVtLT5kaWQgPSBkaWQ7CisJbWliaXRlbS0+ZGF0YSA9IGRhdGE7CisKKwlyZXR1cm4gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJm1zZyk7Cit9CisKK3N0YXRpYyBpbnQgcHJpc20yX2RvbWlic2V0X3BzdHIzMih3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJICB1MzIgZGlkLCB1OCBsZW4sIHU4ICpkYXRhKQoreworCXN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0IG1zZzsKKwlwODAyMTFpdGVtX3BzdHIzMl90ICptaWJpdGVtID0gKHA4MDIxMWl0ZW1fcHN0cjMyX3QgKikgJm1zZy5taWJhdHRyaWJ1dGUuZGF0YTsKKworCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKKwltaWJpdGVtLT5kaWQgPSBkaWQ7CisJbWliaXRlbS0+ZGF0YS5sZW4gPSBsZW47CisJbWVtY3B5KG1pYml0ZW0tPmRhdGEuZGF0YSwgZGF0YSwgbGVuKTsKKworCXJldHVybiBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKK30KKworCisvKiBUaGUgaW50ZXJmYWNlIGZ1bmN0aW9ucywgY2FsbGVkIGJ5IHRoZSBjZmc4MDIxMSBsYXllciAqLworaW50IHByaXNtMl9jaGFuZ2VfdmlydHVhbF9pbnRmKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUsIHUzMiAqZmxhZ3MsCisJCQkgICAgICAgc3RydWN0IHZpZl9wYXJhbXMgKnBhcmFtcykKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7CisJdTMyIGRhdGE7CisJaW50IHJlc3VsdDsKKwlpbnQgZXJyID0gMDsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCWlmICh3bGFuZGV2LT5tYWNtb2RlID09IFdMQU5fTUFDTU9ERV9JQlNTX1NUQSkKKwkJCWdvdG8gZXhpdDsKKwkJd2xhbmRldi0+bWFjbW9kZSA9IFdMQU5fTUFDTU9ERV9JQlNTX1NUQTsKKwkJZGF0YSA9IDA7CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJaWYgKHdsYW5kZXYtPm1hY21vZGUgPT0gV0xBTl9NQUNNT0RFX0VTU19TVEEpCisJCQlnb3RvIGV4aXQ7CisJCXdsYW5kZXYtPm1hY21vZGUgPSBXTEFOX01BQ01PREVfRVNTX1NUQTsKKwkJZGF0YSA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIk9wZXJhdGlvbiBtb2RlOiAlZCBub3Qgc3VwcG9ydFxuIiwgdHlwZSk7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwkvKiBTZXQgT3BlcmF0aW9uIG1vZGUgdG8gdGhlIFBPUlQgVFlQRSBSSUQgKi8KKwlyZXN1bHQgPSBwcmlzbTJfZG9taWJzZXRfdWludDMyKHdsYW5kZXYsIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlBvcnRUeXBlLCBkYXRhKTsKKworCWlmIChyZXN1bHQpCisJCWVyciA9IC1FRkFVTFQ7CisKKwlkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSA9IHR5cGU7CisKK2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworaW50IHByaXNtMl9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgIHU4IGtleV9pbmRleCwgY29uc3QgdTggKm1hY19hZGRyLAorCQkgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKKwl1MzIgZGlkOworCisJaW50IGVyciA9IDA7CisJaW50IHJlc3VsdCA9IDA7CisKKwlzd2l0Y2ggKHBhcmFtcy0+Y2lwaGVyKSB7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDoKKwkJcmVzdWx0ID0gcHJpc20yX2RvbWlic2V0X3VpbnQzMih3bGFuZGV2LAorCQkJCQkJRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQRGVmYXVsdEtleUlELAorCQkJCQkJa2V5X2luZGV4KTsKKwkJaWYgKHJlc3VsdCkKKwkJCWdvdG8gZXhpdDsKKworCQkvKiBzZW5kIGtleSB0byBkcml2ZXIgKi8KKwkJc3dpdGNoIChrZXlfaW5kZXgpIHsKKwkJY2FzZSAwOgorCQkJZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkwOworCQkJYnJlYWs7CisKKwkJY2FzZSAxOgorCQkJZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkxOworCQkJYnJlYWs7CisKKwkJY2FzZSAyOgorCQkJZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkyOworCQkJYnJlYWs7CisKKwkJY2FzZSAzOgorCQkJZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkzOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQlyZXN1bHQgPSBwcmlzbTJfZG9taWJzZXRfcHN0cjMyKHdsYW5kZXYsIGRpZCwgcGFyYW1zLT5rZXlfbGVuLCBwYXJhbXMtPmtleSk7CisJCWlmIChyZXN1bHQpCisJCQlnb3RvIGV4aXQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJfZGVidWcoIlVuc3VwcG9ydGVkIGNpcGhlciBzdWl0ZVxuIik7CisJCXJlc3VsdCA9IDE7CisJfQorCitleGl0OgorCWlmIChyZXN1bHQpCisJCWVyciA9IC1FRkFVTFQ7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgcHJpc20yX2dldF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgdTgga2V5X2luZGV4LCBjb25zdCB1OCAqbWFjX2FkZHIsIHZvaWQgKmNvb2tpZSwKKwkJICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpjb29raWUsIHN0cnVjdCBrZXlfcGFyYW1zKikpCit7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OworCXN0cnVjdCBrZXlfcGFyYW1zIHBhcmFtczsKKwlpbnQgbGVuOworCisJaWYgKGtleV9pbmRleCA+PSBOVU1fV0VQS0VZUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlsZW4gPSB3bGFuZGV2LT53ZXBfa2V5bGVuc1trZXlfaW5kZXhdOworCW1lbXNldCgmcGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7CisKKwlpZiAobGVuID09IDEzKQorCQlwYXJhbXMuY2lwaGVyID0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OworCWVsc2UgaWYgKGxlbiA9PSA1KQorCQlwYXJhbXMuY2lwaGVyID0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OworCWVsc2UKKwkJcmV0dXJuIC1FTk9FTlQ7CisJcGFyYW1zLmtleV9sZW4gPSBsZW47CisJcGFyYW1zLmtleSA9IHdsYW5kZXYtPndlcF9rZXlzW2tleV9pbmRleF07CisKKwljYWxsYmFjayhjb29raWUsICZwYXJhbXMpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBwcmlzbTJfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICB1OCBrZXlfaW5kZXgsIGNvbnN0IHU4ICptYWNfYWRkcikKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7CisJdTMyIGRpZDsKKwlpbnQgZXJyID0gMDsKKwlpbnQgcmVzdWx0ID0gMDsKKworCS8qIFRoZXJlIGlzIG5vIGRpcmVjdCB3YXkgaW4gdGhlIGhhcmR3YXJlIChBRkFJSykgb2YgcmVtb3ZpbmcKKwkgICBhIGtleSwgc28gd2Ugd2lsbCBjaGVhdCBieSBzZXR0aW5nIHRoZSBrZXkgdG8gYSBib2d1cyB2YWx1ZSAqLworCS8qIHNlbmQga2V5IHRvIGRyaXZlciAqLworCXN3aXRjaCAoa2V5X2luZGV4KSB7CisJY2FzZSAwOgorCQlkaWQgPQorCQkgICAgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkwOworCQlicmVhazsKKworCWNhc2UgMToKKwkJZGlkID0KKwkJICAgIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MTsKKwkJYnJlYWs7CisKKwljYXNlIDI6CisJCWRpZCA9CisJCSAgICBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTI7CisJCWJyZWFrOworCisJY2FzZSAzOgorCQlkaWQgPQorCQkgICAgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkzOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXN1bHQgPSBwcmlzbTJfZG9taWJzZXRfcHN0cjMyKHdsYW5kZXYsIGRpZCwgMTMsICIwMDAwMDAwMDAwMDAwIik7CisKK2V4aXQ6CisJaWYgKHJlc3VsdCkKKwkJZXJyID0gLUVGQVVMVDsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBwcmlzbTJfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICB1OCBrZXlfaW5kZXgpCit7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OworCisJaW50IGVyciA9IDA7CisJaW50IHJlc3VsdCA9IDA7CisKKwlyZXN1bHQgPSBwcmlzbTJfZG9taWJzZXRfdWludDMyKHdsYW5kZXYsCisJCURJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXlJRCwKKwkJa2V5X2luZGV4KTsKKworCWlmIChyZXN1bHQpCisJCWVyciA9IC1FRkFVTFQ7CisKKwlyZXR1cm4gZXJyOworfQorCisKK2ludCBwcmlzbTJfZ2V0X3N0YXRpb24oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICAgIHU4ICptYWMsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKKwlzdHJ1Y3QgcDgwMjExbXNnX2xueHJlcV9jb21tc3F1YWxpdHkgcXVhbGl0eTsKKwlpbnQgcmVzdWx0OworCisJbWVtc2V0KHNpbmZvLCAwLCBzaXplb2YoKnNpbmZvKSk7CisKKwlpZiAoKHdsYW5kZXYgPT0gTlVMTCkgfHwgKHdsYW5kZXYtPm1zZHN0YXRlICE9IFdMQU5fTVNEX1JVTk5JTkcpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwkvKiBidWlsZCByZXF1ZXN0IG1lc3NhZ2UgKi8KKwlxdWFsaXR5Lm1zZ2NvZGUgPSBESURtc2dfbG54cmVxX2NvbW1zcXVhbGl0eTsKKwlxdWFsaXR5LmRibS5kYXRhID0gUDgwMjExRU5VTV90cnV0aF90cnVlOworCXF1YWxpdHkuZGJtLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKworCS8qIHNlbmQgbWVzc2FnZSB0byBuc2QgKi8KKwlpZiAod2xhbmRldi0+bWxtZXJlcXVlc3QgPT0gTlVMTCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmVzdWx0ID0gd2xhbmRldi0+bWxtZXJlcXVlc3Qod2xhbmRldiwgKHN0cnVjdCBwODAyMTFtc2cgKikgJnF1YWxpdHkpOworCisKKwlpZiAocmVzdWx0ID09IDApIHsKKwkJc2luZm8tPnR4cmF0ZS5sZWdhY3kgPSBxdWFsaXR5LnR4cmF0ZS5kYXRhOworCQlzaW5mby0+ZmlsbGVkIHw9IFNUQVRJT05fSU5GT19UWF9CSVRSQVRFOworCQlzaW5mby0+c2lnbmFsID0gcXVhbGl0eS5sZXZlbC5kYXRhOworCQlzaW5mby0+ZmlsbGVkIHw9IFNUQVRJT05fSU5GT19TSUdOQUw7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworaW50IHByaXNtMl9zY2FuKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IHByaXNtMl93aXBoeV9wcml2YXRlICpwcml2ID0gd2lwaHlfcHJpdih3aXBoeSk7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OworCXN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfc2NhbiBtc2cxOworCXN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzIG1zZzI7CisJaW50IHJlc3VsdDsKKwlpbnQgZXJyID0gMDsKKwlpbnQgbnVtYnNzID0gMDsKKwlpbnQgaSA9IDA7CisJdTggaWVfYnVmWzQ2XTsKKwlpbnQgaWVfbGVuOworCisJaWYgKCFyZXF1ZXN0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChwcml2LT5zY2FuX3JlcXVlc3QgJiYgcHJpdi0+c2Nhbl9yZXF1ZXN0ICE9IHJlcXVlc3QpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAod2xhbmRldi0+bWFjbW9kZSA9PSBXTEFOX01BQ01PREVfRVNTX0FQKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3Qgc2NhbiBpbiBBUCBtb2RlXG4iKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCXByaXYtPnNjYW5fcmVxdWVzdCA9IHJlcXVlc3Q7CisKKwltZW1zZXQoJm1zZzEsIDB4MDAsIHNpemVvZihzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX3NjYW4pKTsKKwltc2cxLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfc2NhbjsKKwltc2cxLmJzc3R5cGUuZGF0YSA9IFA4MDIxMUVOVU1fYnNzdHlwZV9hbnk7CisKKwltZW1zZXQoJihtc2cxLmJzc2lkLmRhdGEpLCAweEZGLCBzaXplb2YocDgwMjExaXRlbV9wc3RyNl90KSk7CisJbXNnMS5ic3NpZC5kYXRhLmxlbiA9IDY7CisKKwlpZiAocmVxdWVzdC0+bl9zc2lkcyA+IDApIHsKKwkJbXNnMS5zY2FudHlwZS5kYXRhID0gUDgwMjExRU5VTV9zY2FudHlwZV9hY3RpdmU7CisJCW1zZzEuc3NpZC5kYXRhLmxlbiA9IHJlcXVlc3QtPnNzaWRzLT5zc2lkX2xlbjsKKwkJbWVtY3B5KG1zZzEuc3NpZC5kYXRhLmRhdGEsIHJlcXVlc3QtPnNzaWRzLT5zc2lkLCByZXF1ZXN0LT5zc2lkcy0+c3NpZF9sZW4pOworCX0gZWxzZSB7CisJCW1zZzEuc2NhbnR5cGUuZGF0YSA9IDA7CisJfQorCW1zZzEucHJvYmVkZWxheS5kYXRhID0gMDsKKworCWZvciAoaSA9IDA7CisJCShpIDwgcmVxdWVzdC0+bl9jaGFubmVscykgJiYgaSA8IEFSUkFZX1NJWkUocHJpc20yX2NoYW5uZWxzKTsKKwkJaSsrKQorCQltc2cxLmNoYW5uZWxsaXN0LmRhdGEuZGF0YVtpXSA9CisJCQlpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwocmVxdWVzdC0+Y2hhbm5lbHNbaV0tPmNlbnRlcl9mcmVxKTsKKwltc2cxLmNoYW5uZWxsaXN0LmRhdGEubGVuID0gcmVxdWVzdC0+bl9jaGFubmVsczsKKworCW1zZzEubWF4Y2hhbm5lbHRpbWUuZGF0YSA9IDI1MDsKKwltc2cxLm1pbmNoYW5uZWx0aW1lLmRhdGEgPSAyMDA7CisKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnMSk7CisJaWYgKHJlc3VsdCkgeworCQllcnIgPSBwcmlzbTJfcmVzdWx0MmVycihtc2cxLnJlc3VsdGNvZGUuZGF0YSk7CisJCWdvdG8gZXhpdDsKKwl9CisJLyogTm93IHJldHJpZXZlIHNjYW4gcmVzdWx0cyAqLworCW51bWJzcyA9IG1zZzEubnVtYnNzLmRhdGE7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtYnNzOyBpKyspIHsKKwkJbWVtc2V0KCZtc2cyLCAwLCBzaXplb2YobXNnMikpOworCQltc2cyLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzOworCQltc2cyLmJzc2luZGV4LmRhdGEgPSBpOworCisJCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICZtc2cyKTsKKwkJaWYgKChyZXN1bHQgIT0gMCkgfHwKKwkJICAgIChtc2cyLnJlc3VsdGNvZGUuZGF0YSAhPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzcykpIHsKKwkJCWJyZWFrOworCQl9CisKKwkJaWVfYnVmWzBdID0gV0xBTl9FSURfU1NJRDsKKwkJaWVfYnVmWzFdID0gbXNnMi5zc2lkLmRhdGEubGVuOworCQlpZV9sZW4gPSBpZV9idWZbMV0gKyAyOworCQltZW1jcHkoJmllX2J1ZlsyXSwgJihtc2cyLnNzaWQuZGF0YS5kYXRhKSwgbXNnMi5zc2lkLmRhdGEubGVuKTsKKwkJY2ZnODAyMTFfaW5mb3JtX2Jzcyh3aXBoeSwKKwkJCWllZWU4MDIxMV9nZXRfY2hhbm5lbCh3aXBoeSwgaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKG1zZzIuZHNjaGFubmVsLmRhdGEpKSwKKwkJCShjb25zdCB1OCAqKSAmKG1zZzIuYnNzaWQuZGF0YS5kYXRhKSwKKwkJCW1zZzIudGltZXN0YW1wLmRhdGEsIG1zZzIuY2FwaW5mby5kYXRhLAorCQkJbXNnMi5iZWFjb25wZXJpb2QuZGF0YSwKKwkJCWllX2J1ZiwKKwkJCWllX2xlbiwKKwkJCShtc2cyLnNpZ25hbC5kYXRhIC0gNjU1MzYpICogMTAwLCAvKiBDb252ZXJzaW9uIHRvIHNpZ25lZCB0eXBlICovCisJCQlHRlBfS0VSTkVMCisJCSk7CisJfQorCisJaWYgKHJlc3VsdCkKKwkJZXJyID0gcHJpc20yX3Jlc3VsdDJlcnIobXNnMi5yZXN1bHRjb2RlLmRhdGEpOworCitleGl0OgorCWNmZzgwMjExX3NjYW5fZG9uZShyZXF1ZXN0LCBlcnIgPyAxIDogMCk7CisJcHJpdi0+c2Nhbl9yZXF1ZXN0ID0gTlVMTDsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgcHJpc20yX3NldF93aXBoeV9wYXJhbXMoc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIGNoYW5nZWQpCit7CisJc3RydWN0IHByaXNtMl93aXBoeV9wcml2YXRlICpwcml2ID0gd2lwaHlfcHJpdih3aXBoeSk7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gcHJpdi0+d2xhbmRldjsKKwl1MzIgZGF0YTsKKwlpbnQgcmVzdWx0OworCWludCBlcnIgPSAwOworCisJaWYgKGNoYW5nZWQgJiBXSVBIWV9QQVJBTV9SVFNfVEhSRVNIT0xEKSB7CisJCWlmICh3aXBoeS0+cnRzX3RocmVzaG9sZCA9PSAtMSkKKwkJCWRhdGEgPSAyMzQ3OworCQllbHNlCisJCQlkYXRhID0gd2lwaHktPnJ0c190aHJlc2hvbGQ7CisKKwkJcmVzdWx0ID0gcHJpc20yX2RvbWlic2V0X3VpbnQzMih3bGFuZGV2LAorCQkJCQkJRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFSVFNUaHJlc2hvbGQsCisJCQkJCQlkYXRhKTsKKwkJaWYgKHJlc3VsdCkgeworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0KKworCWlmIChjaGFuZ2VkICYgV0lQSFlfUEFSQU1fRlJBR19USFJFU0hPTEQpIHsKKwkJaWYgKHdpcGh5LT5mcmFnX3RocmVzaG9sZCA9PSAtMSkKKwkJCWRhdGEgPSAyMzQ2OworCQllbHNlCisJCQlkYXRhID0gd2lwaHktPmZyYWdfdGhyZXNob2xkOworCisJCXJlc3VsdCA9IHByaXNtMl9kb21pYnNldF91aW50MzIod2xhbmRldiwKKwkJCQkJCURJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExRnJhZ21lbnRhdGlvblRocmVzaG9sZCwKKwkJCQkJCWRhdGEpOworCQlpZiAocmVzdWx0KSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJZ290byBleGl0OworCQl9CisJfQorCitleGl0OgorCXJldHVybiBlcnI7Cit9CisKK2ludCBwcmlzbTJfY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSkKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gc21lLT5jaGFubmVsOworCXN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luIG1zZ19qb2luOworCXUzMiBkaWQ7CisJaW50IGxlbmd0aCA9IHNtZS0+c3NpZF9sZW47CisJaW50IGNoYW4gPSAtMTsKKwlpbnQgaXNfd2VwID0gKHNtZS0+Y3J5cHRvLmNpcGhlcl9ncm91cCA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCkgfHwKKwkgICAgKHNtZS0+Y3J5cHRvLmNpcGhlcl9ncm91cCA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQpOworCWludCByZXN1bHQ7CisJaW50IGVyciA9IDA7CisKKwkvKiBTZXQgdGhlIGNoYW5uZWwgKi8KKwlpZiAoY2hhbm5lbCkgeworCQljaGFuID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKKwkJcmVzdWx0ID0gcHJpc20yX2RvbWlic2V0X3VpbnQzMih3bGFuZGV2LAorCQkJCQkJRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlX2RvdDExQ3VycmVudENoYW5uZWwsCisJCQkJCQljaGFuKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBTZXQgdGhlIGF1dGhvcmlzYXRpb24gKi8KKwlpZiAoKHNtZS0+YXV0aF90eXBlID09IE5MODAyMTFfQVVUSFRZUEVfT1BFTl9TWVNURU0pIHx8CisJCSgoc21lLT5hdXRoX3R5cGUgPT0gTkw4MDIxMV9BVVRIVFlQRV9BVVRPTUFUSUMpICYmICFpc193ZXApKQorCQkJbXNnX2pvaW4uYXV0aHR5cGUuZGF0YSA9IFA4MDIxMUVOVU1fYXV0aGFsZ19vcGVuc3lzdGVtOworCWVsc2UgaWYgKChzbWUtPmF1dGhfdHlwZSA9PSBOTDgwMjExX0FVVEhUWVBFX1NIQVJFRF9LRVkpIHx8CisJCSgoc21lLT5hdXRoX3R5cGUgPT0gTkw4MDIxMV9BVVRIVFlQRV9BVVRPTUFUSUMpICYmIGlzX3dlcCkpCisJCQltc2dfam9pbi5hdXRodHlwZS5kYXRhID0gUDgwMjExRU5VTV9hdXRoYWxnX3NoYXJlZGtleTsKKwllbHNlCisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJVbmhhbmRsZWQgYXV0aG9yaXNhdGlvbiB0eXBlIGZvciBjb25uZWN0ICglZClcbiIsCisJCQlzbWUtPmF1dGhfdHlwZSk7CisKKwkvKiBTZXQgdGhlIGVuY3J5cHRpb24gLSB3ZSBvbmx5IHN1cHBvcnQgd2VwICovCisJaWYgKGlzX3dlcCkgeworCQlpZiAoc21lLT5rZXkpIHsKKwkJCXJlc3VsdCA9IHByaXNtMl9kb21pYnNldF91aW50MzIod2xhbmRldiwKKwkJCQlESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFXRVBEZWZhdWx0S2V5SUQsCisJCQkJc21lLT5rZXlfaWR4KTsKKwkJCWlmIChyZXN1bHQpCisJCQkJZ290byBleGl0OworCisJCQkvKiBzZW5kIGtleSB0byBkcml2ZXIgKi8KKwkJCXN3aXRjaCAoc21lLT5rZXlfaWR4KSB7CisJCQljYXNlIDA6CisJCQkJZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkwOworCQkJCWJyZWFrOworCisJCQljYXNlIDE6CisJCQkJZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkxOworCQkJCWJyZWFrOworCisJCQljYXNlIDI6CisJCQkJZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkyOworCQkJCWJyZWFrOworCisJCQljYXNlIDM6CisJCQkJZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkzOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJZ290byBleGl0OworCQkJfQorCisJCQlyZXN1bHQgPSBwcmlzbTJfZG9taWJzZXRfcHN0cjMyKHdsYW5kZXYsIGRpZCwgc21lLT5rZXlfbGVuLCAodTggKikgc21lLT5rZXkpOworCQkJaWYgKHJlc3VsdCkKKwkJCQlnb3RvIGV4aXQ7CisKKwkJfQorCisJCS8qIEFzc3VtZSB3ZSBzaG91bGQgc2V0IHByaXZhY3kgaW52b2tlZCBhbmQgZXhjbHVkZSB1bmVuY3J5cHRlZAorCQkgICBXZSBjb3VsZCBwb3NzaWJseSB1c2Ugc21lLT5wcml2YWN5IGhlcmUsIGJ1dCB0aGUgYXNzdW1wdGlvbgorCQkgICBzZWVtcyByZWFzb25hYmxlIGFueXdheSAqLworCQlyZXN1bHQgPSBwcmlzbTJfZG9taWJzZXRfdWludDMyKHdsYW5kZXYsCisJCQkJCQlESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFQcml2YWN5SW52b2tlZCwKKwkJCQkJCVA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSk7CisJCWlmIChyZXN1bHQpCisJCQlnb3RvIGV4aXQ7CisKKwkJcmVzdWx0ID0gcHJpc20yX2RvbWlic2V0X3VpbnQzMih3bGFuZGV2LAorCQkJCQkJRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkLAorCQkJCQkJUDgwMjExRU5VTV90cnV0aF90cnVlKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWdvdG8gZXhpdDsKKworCX0gZWxzZSB7CisJCS8qIEFzc3VtZSB3ZSBzaG91bGQgdW5zZXQgcHJpdmFjeSBpbnZva2VkCisJCSAgIGFuZCBleGNsdWRlIHVuZW5jcnlwdGVkICovCisJCXJlc3VsdCA9IHByaXNtMl9kb21pYnNldF91aW50MzIod2xhbmRldiwKKwkJCQkJCURJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkLAorCQkJCQkJUDgwMjExRU5VTV90cnV0aF9mYWxzZSk7CisJCWlmIChyZXN1bHQpCisJCQlnb3RvIGV4aXQ7CisKKwkJcmVzdWx0ID0gcHJpc20yX2RvbWlic2V0X3VpbnQzMih3bGFuZGV2LAorCQkJCQkJRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkLAorCQkJCQkJUDgwMjExRU5VTV90cnV0aF9mYWxzZSk7CisJCWlmIChyZXN1bHQpCisJCQlnb3RvIGV4aXQ7CisKKwl9CisKKwkvKiBOb3cgZG8gdGhlIGFjdHVhbCBqb2luLiBOb3RlIHRoZXJlIGlzIG5vIHdheSB0aGF0IEkgY2FuCisJICAgc2VlIHRvIHJlcXVlc3QgYSBzcGVjaWZpYyBic3NpZCAqLworCW1zZ19qb2luLm1zZ2NvZGUgPSBESURtc2dfbG54cmVxX2F1dG9qb2luOworCisJbWVtY3B5KG1zZ19qb2luLnNzaWQuZGF0YS5kYXRhLCBzbWUtPnNzaWQsIGxlbmd0aCk7CisJbXNnX2pvaW4uc3NpZC5kYXRhLmxlbiA9IGxlbmd0aDsKKworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICZtc2dfam9pbik7CisKK2V4aXQ6CisJaWYgKHJlc3VsdCkKKwkJZXJyID0gLUVGQVVMVDsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBwcmlzbTJfZGlzY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICAgICB1MTYgcmVhc29uX2NvZGUpCit7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OworCXN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luIG1zZ19qb2luOworCWludCByZXN1bHQ7CisJaW50IGVyciA9IDA7CisKKworCS8qIERvIGEgam9pbiwgd2l0aCBhIGJvZ3VzIHNzaWQuIFRoYXRzIHRoZSBvbmx5IHdheSBJIGNhbiB0aGluayBvZiAqLworCW1zZ19qb2luLm1zZ2NvZGUgPSBESURtc2dfbG54cmVxX2F1dG9qb2luOworCisJbWVtY3B5KG1zZ19qb2luLnNzaWQuZGF0YS5kYXRhLCAiLS0tIiwgMyk7CisJbXNnX2pvaW4uc3NpZC5kYXRhLmxlbiA9IDM7CisKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnX2pvaW4pOworCisJaWYgKHJlc3VsdCkKKwkJZXJyID0gLUVGQVVMVDsKKworCXJldHVybiBlcnI7Cit9CisKKworaW50IHByaXNtMl9qb2luX2lic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICBzdHJ1Y3QgY2ZnODAyMTFfaWJzc19wYXJhbXMgKnBhcmFtcykKK3sKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK2ludCBwcmlzbTJfbGVhdmVfaWJzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworCitpbnQgcHJpc20yX3NldF90eF9wb3dlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIG5sODAyMTFfdHhfcG93ZXJfc2V0dGluZyB0eXBlLAorCQkJaW50IG1ibSkKK3sKKwlzdHJ1Y3QgcHJpc20yX3dpcGh5X3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBwcml2LT53bGFuZGV2OworCXUzMiBkYXRhOworCWludCByZXN1bHQ7CisJaW50IGVyciA9IDA7CisKKwlpZiAodHlwZSA9PSBOTDgwMjExX1RYX1BPV0VSX0FVVE9NQVRJQykKKwkJZGF0YSA9IDMwOworCWVsc2UKKwkJZGF0YSA9IE1CTV9UT19EQk0obWJtKTsKKworCXJlc3VsdCA9IHByaXNtMl9kb21pYnNldF91aW50MzIod2xhbmRldiwKKwkJRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExQ3VycmVudFR4UG93ZXJMZXZlbCwKKwkJZGF0YSk7CisKKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKK2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworaW50IHByaXNtMl9nZXRfdHhfcG93ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwgaW50ICpkYm0pCit7CisJc3RydWN0IHByaXNtMl93aXBoeV9wcml2YXRlICpwcml2ID0gd2lwaHlfcHJpdih3aXBoeSk7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gcHJpdi0+d2xhbmRldjsKKwlzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYmdldCBtc2c7CisJcDgwMjExaXRlbV91aW50MzJfdCAqbWliaXRlbSA9IChwODAyMTFpdGVtX3VpbnQzMl90ICopICZtc2cubWliYXR0cmlidXRlLmRhdGE7CisJaW50IHJlc3VsdDsKKwlpbnQgZXJyID0gMDsKKworCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYmdldDsKKwltaWJpdGVtLT5kaWQgPQorCSAgICBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFDdXJyZW50VHhQb3dlckxldmVsOworCisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJm1zZyk7CisKKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkqZGJtID0gbWliaXRlbS0+ZGF0YTsKKworZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCisKKworCisvKiBJbnRlcmZhY2UgY2FsbGJhY2sgZnVuY3Rpb25zLCBwYXNzaW5nIGRhdGEgYmFjayB1cCB0byB0aGUgY2ZnODAyMTEgbGF5ZXIgKi8KK3ZvaWQgcHJpc20yX2Nvbm5lY3RfcmVzdWx0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTggZmFpbGVkKQoreworCXUxNiBzdGF0dXMgPSBmYWlsZWQgPyBXTEFOX1NUQVRVU19VTlNQRUNJRklFRF9GQUlMVVJFIDogV0xBTl9TVEFUVVNfU1VDQ0VTUzsKKworCWNmZzgwMjExX2Nvbm5lY3RfcmVzdWx0KHdsYW5kZXYtPm5ldGRldiwgd2xhbmRldi0+YnNzaWQsCisJCQkJTlVMTCwgMCwgTlVMTCwgMCwgc3RhdHVzLCBHRlBfS0VSTkVMKTsKK30KKwordm9pZCBwcmlzbTJfZGlzY29ubmVjdGVkKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwljZmc4MDIxMV9kaXNjb25uZWN0ZWQod2xhbmRldi0+bmV0ZGV2LCAwLCBOVUxMLAorCQkwLCBHRlBfS0VSTkVMKTsKK30KKwordm9pZCBwcmlzbTJfcm9hbWVkKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwljZmc4MDIxMV9yb2FtZWQod2xhbmRldi0+bmV0ZGV2LCB3bGFuZGV2LT5ic3NpZCwKKwkJTlVMTCwgMCwgTlVMTCwgMCwgR0ZQX0tFUk5FTCk7Cit9CisKKworLyogU3RydWN0dXJlcyBmb3IgZGVjbGFyaW5nIHdpcGh5IGludGVyZmFjZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgcHJpc20yX3VzYl9jZmdfb3BzID0geworCS5jaGFuZ2VfdmlydHVhbF9pbnRmID0gcHJpc20yX2NoYW5nZV92aXJ0dWFsX2ludGYsCisJLmFkZF9rZXkgPSBwcmlzbTJfYWRkX2tleSwKKwkuZ2V0X2tleSA9IHByaXNtMl9nZXRfa2V5LAorCS5kZWxfa2V5ID0gcHJpc20yX2RlbF9rZXksCisJLnNldF9kZWZhdWx0X2tleSA9IHByaXNtMl9zZXRfZGVmYXVsdF9rZXksCisJLmdldF9zdGF0aW9uID0gcHJpc20yX2dldF9zdGF0aW9uLAorCS5zY2FuID0gcHJpc20yX3NjYW4sCisJLnNldF93aXBoeV9wYXJhbXMgPSBwcmlzbTJfc2V0X3dpcGh5X3BhcmFtcywKKwkuY29ubmVjdCA9IHByaXNtMl9jb25uZWN0LAorCS5kaXNjb25uZWN0ID0gcHJpc20yX2Rpc2Nvbm5lY3QsCisJLmpvaW5faWJzcyA9IHByaXNtMl9qb2luX2lic3MsCisJLmxlYXZlX2lic3MgPSBwcmlzbTJfbGVhdmVfaWJzcywKKwkuc2V0X3R4X3Bvd2VyID0gcHJpc20yX3NldF90eF9wb3dlciwKKwkuZ2V0X3R4X3Bvd2VyID0gcHJpc20yX2dldF90eF9wb3dlciwKK307CisKKworLyogRnVuY3Rpb25zIHRvIGNyZWF0ZS9mcmVlIHdpcGh5IGludGVyZmFjZSAqLworc3RydWN0IHdpcGh5ICp3bGFuX2NyZWF0ZV93aXBoeShzdHJ1Y3QgZGV2aWNlICpkZXYsIHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5OworCXN0cnVjdCBwcmlzbTJfd2lwaHlfcHJpdmF0ZSAqcHJpdjsKKwl3aXBoeSA9IHdpcGh5X25ldygmcHJpc20yX3VzYl9jZmdfb3BzLCBzaXplb2Yoc3RydWN0IHByaXNtMl93aXBoeV9wcml2YXRlKSk7CisJaWYgKCF3aXBoeSkKKwkJcmV0dXJuIE5VTEw7CisKKwlwcml2ID0gd2lwaHlfcHJpdih3aXBoeSk7CisJcHJpdi0+d2xhbmRldiA9IHdsYW5kZXY7CisJbWVtY3B5KHByaXYtPmNoYW5uZWxzLCBwcmlzbTJfY2hhbm5lbHMsIHNpemVvZihwcmlzbTJfY2hhbm5lbHMpKTsKKwltZW1jcHkocHJpdi0+cmF0ZXMsIHByaXNtMl9yYXRlcywgc2l6ZW9mKHByaXNtMl9yYXRlcykpOworCXByaXYtPmJhbmQuY2hhbm5lbHMgPSBwcml2LT5jaGFubmVsczsKKwlwcml2LT5iYW5kLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHByaXNtMl9jaGFubmVscyk7CisJcHJpdi0+YmFuZC5iaXRyYXRlcyA9IHByaXYtPnJhdGVzOworCXByaXYtPmJhbmQubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUocHJpc20yX3JhdGVzKTsKKwl3aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmcHJpdi0+YmFuZDsKKworCXNldF93aXBoeV9kZXYod2lwaHksIGRldik7CisJd2lwaHktPnByaXZpZCA9IHByaXNtMl93aXBoeV9wcml2aWQ7CisJd2lwaHktPm1heF9zY2FuX3NzaWRzID0gMTsKKwl3aXBoeS0+aW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQkJIHwgQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKTsKKwl3aXBoeS0+c2lnbmFsX3R5cGUgPSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9NQk07CisJd2lwaHktPm5fY2lwaGVyX3N1aXRlcyA9IFBSSVNNMl9OVU1fQ0lQSEVSX1NVSVRFUzsKKwl3aXBoeS0+Y2lwaGVyX3N1aXRlcyA9IHByaXNtMl9jaXBoZXJfc3VpdGVzOworCisJaWYgKHdpcGh5X3JlZ2lzdGVyKHdpcGh5KSA8IDApCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHdpcGh5OworfQorCisKK3ZvaWQgd2xhbl9mcmVlX3dpcGh5KHN0cnVjdCB3aXBoeSAqd2lwaHkpCit7CisJd2lwaHlfdW5yZWdpc3Rlcih3aXBoeSk7CisJd2lwaHlfZnJlZSh3aXBoeSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9oZmEzODR4LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9oZmEzODR4LmgKaW5kZXggMWZhNDJlMC4uZmE5NGE3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHguaApAQCAtMTI4NCw2ICsxMjg0LDggQEAKIAl1MTYgbGlua19zdGF0dXNfbmV3OwogCXN0cnVjdCBza19idWZmX2hlYWQgYXV0aHE7CiAKKwl1MzIgdHhyYXRlOworCiAJLyogQW5kIGhlcmUgd2UgaGF2ZSBzdHVmZiB0aGF0IHVzZWQgdG8gYmUgaW4gcHJpdiAqLwogCiAJLyogU3RhdGUgdmFyaWFibGVzICovCkBAIC0xNDA3LDcgKzE0MDksNyBAQAogaW50IGhmYTM4NHhfZHJ2cl9zdG9wKGhmYTM4NHhfdCAqaHcpOwogaW50CiBoZmEzODR4X2RydnJfdHhmcmFtZShoZmEzODR4X3QgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICAgIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCk7CisJCSAgICAgdW5pb24gcDgwMjExX2hkciAqcDgwMjExX2hkciwgc3RydWN0IHA4MDIxMV9tZXRhd2VwICpwODAyMTFfd2VwKTsKIHZvaWQgaGZhMzg0eF90eF90aW1lb3V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CiAKIGludCBoZmEzODR4X2NtZF9pbml0aWFsaXplKGhmYTM4NHhfdCAqaHcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eF91c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHhfdXNiLmMKaW5kZXggYTQxZGI1ZC4uZWE4MWNiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eF91c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9oZmEzODR4X3VzYi5jCkBAIC0yNzA2LDggKzI3MDYsOCBAQAogKglpbnRlcnJ1cHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50IGhmYTM4NHhfZHJ2cl90eGZyYW1lKGhmYTM4NHhfdCAqaHcsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLAotCQkJIHA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXApCisJCQkgdW5pb24gcDgwMjExX2hkciAqcDgwMjExX2hkciwKKwkJCSBzdHJ1Y3QgcDgwMjExX21ldGF3ZXAgKnA4MDIxMV93ZXApCiB7CiAJaW50IHVzYnBrdGxlbiA9IHNpemVvZihoZmEzODR4X3R4X2ZyYW1lX3QpOwogCWludCByZXN1bHQ7CkBAIC0yNzUyLDcgKzI3NTIsNyBAQAogCiAJLyogY29weSB0aGUgaGVhZGVyIG92ZXIgdG8gdGhlIHR4ZGVzYyAqLwogCW1lbWNweSgmKGh3LT50eGJ1ZmYudHhmcm0uZGVzYy5mcmFtZV9jb250cm9sKSwgcDgwMjExX2hkciwKLQkgICAgICAgc2l6ZW9mKHA4MDIxMV9oZHJfdCkpOworCSAgICAgICBzaXplb2YodW5pb24gcDgwMjExX2hkcikpOwogCiAJLyogaWYgd2UncmUgdXNpbmcgaG9zdCBXRVAsIGluY3JlYXNlIHNpemUgYnkgSVYrSUNWICovCiAJaWYgKHA4MDIxMV93ZXAtPmRhdGEpIHsKQEAgLTI4MDUsMTEgKzI4MDUsMTMgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwogCi0JaWYgKCFody0+d2xhbmRldi0+aHdyZW1vdmVkICYmCi0JICAgIC8qIE5vdGUgdGhlIGJpdHdpc2UgT1IsIG5vdCB0aGUgbG9naWNhbCBPUi4gKi8KLQkgICAgKCF0ZXN0X2FuZF9zZXRfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpIHwKLQkgICAgICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfUlhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpKSkgewotCQlzY2hlZHVsZV93b3JrKCZody0+dXNiX3dvcmspOworCWlmICghaHctPndsYW5kZXYtPmh3cmVtb3ZlZCkgeworCQlpbnQgc2NoZWQ7CisKKwkJc2NoZWQgPSAhdGVzdF9hbmRfc2V0X2JpdChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKTsKKwkJc2NoZWQgfD0gIXRlc3RfYW5kX3NldF9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncyk7CisJCWlmIChzY2hlZCkKKwkJCXNjaGVkdWxlX3dvcmsoJmh3LT51c2Jfd29yayk7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKQEAgLTM0NzEsNyArMzQ3Myw3IEBACiAJaGZhMzg0eF91c2Jpbl90ICp1c2JpbiA9IChoZmEzODR4X3VzYmluX3QgKikgc2tiLT5kYXRhOwogCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OwogCWludCBoZHJsZW47Ci0JcDgwMjExX3J4bWV0YV90ICpyeG1ldGE7CisJc3RydWN0IHA4MDIxMV9yeG1ldGEgKnJ4bWV0YTsKIAl1MTYgZGF0YV9sZW47CiAJdTE2IGZjOwogCkBAIC0zNTg4LDE0ICszNTkwLDE0IEBACiAJZGF0YWxlbiA9IGxlMTZfdG9fY3B1KHJ4ZGVzYy0+ZGF0YV9sZW4pOwogCiAJLyogQWxsb2NhdGUgYW4gaW5kIG1lc3NhZ2UrZnJhbWVzaXplIHNrYiAqLwotCXNrYmxlbiA9IHNpemVvZihwODAyMTFfY2FwaGRyX3QpICsgaGRybGVuICsgZGF0YWxlbiArIFdMQU5fQ1JDX0xFTjsKKwlza2JsZW4gPSBzaXplb2Yoc3RydWN0IHA4MDIxMV9jYXBoZHIpICsgaGRybGVuICsgZGF0YWxlbiArIFdMQU5fQ1JDX0xFTjsKIAogCS8qIHNhbml0eSBjaGVjayB0aGUgbGVuZ3RoICovCiAJaWYgKHNrYmxlbiA+Ci0JICAgIChzaXplb2YocDgwMjExX2NhcGhkcl90KSArCisJICAgIChzaXplb2Yoc3RydWN0IHA4MDIxMV9jYXBoZHIpICsKIAkgICAgIFdMQU5fSERSX0E0X0xFTiArIFdMQU5fREFUQV9NQVhMRU4gKyBXTEFOX0NSQ19MRU4pKSB7CiAJCXByX2RlYnVnKCJvdmVybGVuIGZybTogbGVuPSV6ZFxuIiwKLQkJCSBza2JsZW4gLSBzaXplb2YocDgwMjExX2NhcGhkcl90KSk7CisJCQkgc2tibGVuIC0gc2l6ZW9mKHN0cnVjdCBwODAyMTFfY2FwaGRyKSk7CiAJfQogCiAJc2tiID0gZGV2X2FsbG9jX3NrYihza2JsZW4pOwpAQCAtMzYwOSwxMyArMzYxMSwxMyBAQAogCS8qIG9ubHkgcHJlcGVuZCB0aGUgcHJpc20gaGVhZGVyIGlmIGluIHRoZSByaWdodCBtb2RlICovCiAJaWYgKCh3bGFuZGV2LT5uZXRkZXYtPnR5cGUgPT0gQVJQSFJEX0lFRUU4MDIxMV9QUklTTSkgJiYKIAkgICAgKGh3LT5zbmlmZmhkciAhPSAwKSkgewotCQlwODAyMTFfY2FwaGRyX3QgKmNhcGhkcjsKKwkJc3RydWN0IHA4MDIxMV9jYXBoZHIgKmNhcGhkcjsKIAkJLyogVGhlIE5FVyBoZWFkZXIgZm9ybWF0ISAqLwotCQlkYXRhcCA9IHNrYl9wdXQoc2tiLCBzaXplb2YocDgwMjExX2NhcGhkcl90KSk7Ci0JCWNhcGhkciA9IChwODAyMTFfY2FwaGRyX3QgKikgZGF0YXA7CisJCWRhdGFwID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgcDgwMjExX2NhcGhkcikpOworCQljYXBoZHIgPSAoc3RydWN0IHA4MDIxMV9jYXBoZHIgKikgZGF0YXA7CiAKIAkJY2FwaGRyLT52ZXJzaW9uID0gaHRvbmwoUDgwMjExQ0FQVFVSRV9WRVJTSU9OKTsKLQkJY2FwaGRyLT5sZW5ndGggPSBodG9ubChzaXplb2YocDgwMjExX2NhcGhkcl90KSk7CisJCWNhcGhkci0+bGVuZ3RoID0gaHRvbmwoc2l6ZW9mKHN0cnVjdCBwODAyMTFfY2FwaGRyKSk7CiAJCWNhcGhkci0+bWFjdGltZSA9IF9fY3B1X3RvX2JlNjQocnhkZXNjLT50aW1lKSAqIDEwMDA7CiAJCWNhcGhkci0+aG9zdHRpbWUgPSBfX2NwdV90b19iZTY0KGppZmZpZXMpOwogCQljYXBoZHItPnBoeXR5cGUgPSBodG9ubCg0KTsJLyogZHNzX2RvdDExX2IgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWNvbnYuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWNvbnYuYwppbmRleCAwNTllMTUwLi44Mzg3OWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5jCkBAIC0xMDMsMTUgKzEwMywxNSBAQAogKglNYXkgYmUgY2FsbGVkIGluIGludGVycnVwdCBvciBub24taW50ZXJydXB0IGNvbnRleHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50IHNrYl9ldGhlcl90b19wODAyMTEod2xhbmRldmljZV90ICp3bGFuZGV2LCB1MzIgZXRoY29udiwKLQkJCXN0cnVjdCBza19idWZmICpza2IsIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwKLQkJCXA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXApCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bmlvbiBwODAyMTFfaGRyICpwODAyMTFfaGRyLAorCQkJc3RydWN0IHA4MDIxMV9tZXRhd2VwICpwODAyMTFfd2VwKQogewogCiAJdTE2IGZjOwogCXUxNiBwcm90bzsKLQl3bGFuX2V0aGhkcl90IGVfaGRyOwotCXdsYW5fbGxjX3QgKmVfbGxjOwotCXdsYW5fc25hcF90ICplX3NuYXA7CisJc3RydWN0IHdsYW5fZXRoaGRyIGVfaGRyOworCXN0cnVjdCB3bGFuX2xsYyAqZV9sbGM7CisJc3RydWN0IHdsYW5fc25hcCAqZV9zbmFwOwogCWludCBmb287CiAKIAltZW1jcHkoJmVfaGRyLCBza2ItPmRhdGEsIHNpemVvZihlX2hkcikpOwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAKIAkJCS8qIHRhY2sgb24gU05BUCAqLwogCQkJZV9zbmFwID0KLQkJCSAgICAod2xhbl9zbmFwX3QgKikgc2tiX3B1c2goc2tiLCBzaXplb2Yod2xhbl9zbmFwX3QpKTsKKwkJCSAgICAoc3RydWN0IHdsYW5fc25hcCAqKSBza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3Qgd2xhbl9zbmFwKSk7CiAJCQllX3NuYXAtPnR5cGUgPSBodG9ucyhwcm90byk7CiAJCQlpZiAoZXRoY29udiA9PSBXTEFOX0VUSENPTlZfODAyMWgKIAkJCSAgICAmJiBwODAyMTFfc3R0X2ZpbmRwcm90byhwcm90bykpIHsKQEAgLTE2MSw3ICsxNjEsNyBAQAogCiAJCQkvKiB0YWNrIG9uIGxsYyAqLwogCQkJZV9sbGMgPQotCQkJICAgICh3bGFuX2xsY190ICopIHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHdsYW5fbGxjX3QpKTsKKwkJCSAgICAoc3RydWN0IHdsYW5fbGxjICopIHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCB3bGFuX2xsYykpOwogCQkJZV9sbGMtPmRzYXAgPSAweEFBOwkvKiBTTkFQLCBzZWUgSUVFRSA4MDIgKi8KIAkJCWVfbGxjLT5zc2FwID0gMHhBQTsKIAkJCWVfbGxjLT5jdGwgPSAweDAzOwpAQCAtMjMwLDcgKzIzMCw3IEBACiAKIC8qIGprcmllZ2w6IGZyb20gb3Jpbm9jbywgbW9kaWZpZWQgKi8KIHN0YXRpYyB2b2lkIG9yaW5vY29fc3B5X2dhdGhlcih3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGNoYXIgKm1hYywKLQkJCSAgICAgICBwODAyMTFfcnhtZXRhX3QgKnJ4bWV0YSkKKwkJCSAgICAgICBzdHJ1Y3QgcDgwMjExX3J4bWV0YSAqcnhtZXRhKQogewogCWludCBpOwogCkBAIC0yODAsMTcgKzI4MCwxNyBAQAogCXVuc2lnbmVkIGludCBwYXlsb2FkX29mZnNldDsKIAl1OCBkYWRkcltXTEFOX0VUSEFERFJfTEVOXTsKIAl1OCBzYWRkcltXTEFOX0VUSEFERFJfTEVOXTsKLQlwODAyMTFfaGRyX3QgKndfaGRyOwotCXdsYW5fZXRoaGRyX3QgKmVfaGRyOwotCXdsYW5fbGxjX3QgKmVfbGxjOwotCXdsYW5fc25hcF90ICplX3NuYXA7CisJdW5pb24gcDgwMjExX2hkciAqd19oZHI7CisJc3RydWN0IHdsYW5fZXRoaGRyICplX2hkcjsKKwlzdHJ1Y3Qgd2xhbl9sbGMgKmVfbGxjOworCXN0cnVjdCB3bGFuX3NuYXAgKmVfc25hcDsKIAogCWludCBmb287CiAKIAlwYXlsb2FkX2xlbmd0aCA9IHNrYi0+bGVuIC0gV0xBTl9IRFJfQTNfTEVOIC0gV0xBTl9DUkNfTEVOOwogCXBheWxvYWRfb2Zmc2V0ID0gV0xBTl9IRFJfQTNfTEVOOwogCi0Jd19oZHIgPSAocDgwMjExX2hkcl90ICopIHNrYi0+ZGF0YTsKKwl3X2hkciA9ICh1bmlvbiBwODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAogCS8qIHNldHVwIHNvbWUgdmFycyBmb3IgY29udmVuaWVuY2UgKi8KIAlmYyA9IGxlMTZfdG9fY3B1KHdfaGRyLT5hMy5mYyk7CkBAIC0zNDUsMTQgKzM0NSwxNCBAQAogCQl3bGFuZGV2LT5yeC5kZWNyeXB0Kys7CiAJfQogCi0JZV9oZHIgPSAod2xhbl9ldGhoZHJfdCAqKSAoc2tiLT5kYXRhICsgcGF5bG9hZF9vZmZzZXQpOworCWVfaGRyID0gKHN0cnVjdCB3bGFuX2V0aGhkciAqKSAoc2tiLT5kYXRhICsgcGF5bG9hZF9vZmZzZXQpOwogCi0JZV9sbGMgPSAod2xhbl9sbGNfdCAqKSAoc2tiLT5kYXRhICsgcGF5bG9hZF9vZmZzZXQpOworCWVfbGxjID0gKHN0cnVjdCB3bGFuX2xsYyAqKSAoc2tiLT5kYXRhICsgcGF5bG9hZF9vZmZzZXQpOwogCWVfc25hcCA9Ci0JICAgICh3bGFuX3NuYXBfdCAqKSAoc2tiLT5kYXRhICsgcGF5bG9hZF9vZmZzZXQgKyBzaXplb2Yod2xhbl9sbGNfdCkpOworCSAgICAoc3RydWN0IHdsYW5fc25hcCAqKSAoc2tiLT5kYXRhICsgcGF5bG9hZF9vZmZzZXQgKyBzaXplb2Yoc3RydWN0IHdsYW5fbGxjKSk7CiAKIAkvKiBUZXN0IGZvciB0aGUgdmFyaW91cyBlbmNvZGluZ3MgKi8KLQlpZiAoKHBheWxvYWRfbGVuZ3RoID49IHNpemVvZih3bGFuX2V0aGhkcl90KSkgJiYKKwlpZiAoKHBheWxvYWRfbGVuZ3RoID49IHNpemVvZihzdHJ1Y3Qgd2xhbl9ldGhoZHIpKSAmJgogCSAgICAoZV9sbGMtPmRzYXAgIT0gMHhhYSB8fCBlX2xsYy0+c3NhcCAhPSAweGFhKSAmJgogCSAgICAoKG1lbWNtcChkYWRkciwgZV9oZHItPmRhZGRyLCBXTEFOX0VUSEFERFJfTEVOKSA9PSAwKSB8fAogCSAgICAgKG1lbWNtcChzYWRkciwgZV9oZHItPnNhZGRyLCBXTEFOX0VUSEFERFJfTEVOKSA9PSAwKSkpIHsKQEAgLTM3Miw3ICszNzIsNyBAQAogCQkvKiBjaG9wIG9mZiB0aGUgODAyLjExIENSQyAqLwogCQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gV0xBTl9DUkNfTEVOKTsKIAotCX0gZWxzZSBpZiAoKHBheWxvYWRfbGVuZ3RoID49IHNpemVvZih3bGFuX2xsY190KSArIHNpemVvZih3bGFuX3NuYXBfdCkpCisJfSBlbHNlIGlmICgocGF5bG9hZF9sZW5ndGggPj0gc2l6ZW9mKHN0cnVjdCB3bGFuX2xsYykgKyBzaXplb2Yoc3RydWN0IHdsYW5fc25hcCkpCiAJCSAgICYmIChlX2xsYy0+ZHNhcCA9PSAweGFhKSAmJiAoZV9sbGMtPnNzYXAgPT0gMHhhYSkKIAkJICAgJiYgKGVfbGxjLT5jdGwgPT0gMHgwMykKIAkJICAgJiYKQEAgLTM5OCw3ICszOTgsNyBAQAogCQlza2JfcHVsbChza2IsIHBheWxvYWRfb2Zmc2V0KTsKIAogCQkvKiBjcmVhdGUgODAyLjMgaGVhZGVyIGF0IGJlZ2lubmluZyBvZiBza2IuICovCi0JCWVfaGRyID0gKHdsYW5fZXRoaGRyX3QgKikgc2tiX3B1c2goc2tiLCBXTEFOX0VUSEhEUl9MRU4pOworCQllX2hkciA9IChzdHJ1Y3Qgd2xhbl9ldGhoZHIgKikgc2tiX3B1c2goc2tiLCBXTEFOX0VUSEhEUl9MRU4pOwogCQltZW1jcHkoZV9oZHItPmRhZGRyLCBkYWRkciwgV0xBTl9FVEhBRERSX0xFTik7CiAJCW1lbWNweShlX2hkci0+c2FkZHIsIHNhZGRyLCBXTEFOX0VUSEFERFJfTEVOKTsKIAkJZV9oZHItPnR5cGUgPSBodG9ucyhwYXlsb2FkX2xlbmd0aCk7CkBAIC00MDYsNyArNDA2LDcgQEAKIAkJLyogY2hvcCBvZmYgdGhlIDgwMi4xMSBDUkMgKi8KIAkJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIFdMQU5fQ1JDX0xFTik7CiAKLQl9IGVsc2UgaWYgKChwYXlsb2FkX2xlbmd0aCA+PSBzaXplb2Yod2xhbl9sbGNfdCkgKyBzaXplb2Yod2xhbl9zbmFwX3QpKQorCX0gZWxzZSBpZiAoKHBheWxvYWRfbGVuZ3RoID49IHNpemVvZihzdHJ1Y3Qgd2xhbl9sbGMpICsgc2l6ZW9mKHN0cnVjdCB3bGFuX3NuYXApKQogCQkgICAmJiAoZV9sbGMtPmRzYXAgPT0gMHhhYSkgJiYgKGVfbGxjLT5zc2FwID09IDB4YWEpCiAJCSAgICYmIChlX2xsYy0+Y3RsID09IDB4MDMpKSB7CiAJCXByX2RlYnVnKCI4MDIuMWgvUkZDMTA0MiBsZW46ICVkXG4iLCBwYXlsb2FkX2xlbmd0aCk7CkBAIC00MTQsMTMgKzQxNCwxMyBAQAogCQkvKiBidWlsZCBhIERJWElJICsgUkZDODk0ICovCiAKIAkJLyogVGVzdCBmb3IgYW4gb3Zlcmxlbmd0aCBmcmFtZSAqLwotCQlpZiAoKHBheWxvYWRfbGVuZ3RoIC0gc2l6ZW9mKHdsYW5fbGxjX3QpIC0gc2l6ZW9mKHdsYW5fc25hcF90KSkKKwkJaWYgKChwYXlsb2FkX2xlbmd0aCAtIHNpemVvZihzdHJ1Y3Qgd2xhbl9sbGMpIC0gc2l6ZW9mKHN0cnVjdCB3bGFuX3NuYXApKQogCQkgICAgPiBuZXRkZXYtPm10dSkgewogCQkJLyogQSBib2d1cyBsZW5ndGggZXRoZnJtIGhhcyBiZWVuIHNlbnQuICovCiAJCQkvKiBJcyBzb21lb25lIHRyeWluZyBhbiBvZmxvdyBhdHRhY2s/ICovCiAJCQlwcmludGsoS0VSTl9FUlIgIkRJWElJIGZyYW1lIHRvbyBsYXJnZSAoJWxkID4gJWQpXG4iLAotCQkJICAgICAgIChsb25nIGludCkocGF5bG9hZF9sZW5ndGggLSBzaXplb2Yod2xhbl9sbGNfdCkgLQotCQkJCQkgIHNpemVvZih3bGFuX3NuYXBfdCkpLCBuZXRkZXYtPm10dSk7CisJCQkgICAgICAgKGxvbmcgaW50KShwYXlsb2FkX2xlbmd0aCAtIHNpemVvZihzdHJ1Y3Qgd2xhbl9sbGMpIC0KKwkJCQkJICBzaXplb2Yoc3RydWN0IHdsYW5fc25hcCkpLCBuZXRkZXYtPm10dSk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCkBAIC00MjgsMTMgKzQyOCwxMyBAQAogCQlza2JfcHVsbChza2IsIHBheWxvYWRfb2Zmc2V0KTsKIAogCQkvKiBjaG9wIGxsYyBoZWFkZXIgZnJvbSBza2IuICovCi0JCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHdsYW5fbGxjX3QpKTsKKwkJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHdsYW5fbGxjKSk7CiAKIAkJLyogY2hvcCBzbmFwIGhlYWRlciBmcm9tIHNrYi4gKi8KLQkJc2tiX3B1bGwoc2tiLCBzaXplb2Yod2xhbl9zbmFwX3QpKTsKKwkJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHdsYW5fc25hcCkpOwogCiAJCS8qIGNyZWF0ZSA4MDIuMyBoZWFkZXIgYXQgYmVnaW5uaW5nIG9mIHNrYi4gKi8KLQkJZV9oZHIgPSAod2xhbl9ldGhoZHJfdCAqKSBza2JfcHVzaChza2IsIFdMQU5fRVRISERSX0xFTik7CisJCWVfaGRyID0gKHN0cnVjdCB3bGFuX2V0aGhkciAqKSBza2JfcHVzaChza2IsIFdMQU5fRVRISERSX0xFTik7CiAJCWVfaGRyLT50eXBlID0gZV9zbmFwLT50eXBlOwogCQltZW1jcHkoZV9oZHItPmRhZGRyLCBkYWRkciwgV0xBTl9FVEhBRERSX0xFTik7CiAJCW1lbWNweShlX2hkci0+c2FkZHIsIHNhZGRyLCBXTEFOX0VUSEFERFJfTEVOKTsKQEAgLTQ2MSw3ICs0NjEsNyBAQAogCQlza2JfcHVsbChza2IsIHBheWxvYWRfb2Zmc2V0KTsKIAogCQkvKiBjcmVhdGUgODAyLjMgaGVhZGVyIGF0IGJlZ2lubmluZyBvZiBza2IuICovCi0JCWVfaGRyID0gKHdsYW5fZXRoaGRyX3QgKikgc2tiX3B1c2goc2tiLCBXTEFOX0VUSEhEUl9MRU4pOworCQllX2hkciA9IChzdHJ1Y3Qgd2xhbl9ldGhoZHIgKikgc2tiX3B1c2goc2tiLCBXTEFOX0VUSEhEUl9MRU4pOwogCQltZW1jcHkoZV9oZHItPmRhZGRyLCBkYWRkciwgV0xBTl9FVEhBRERSX0xFTik7CiAJCW1lbWNweShlX2hkci0+c2FkZHIsIHNhZGRyLCBXTEFOX0VUSEFERFJfTEVOKTsKIAkJZV9oZHItPnR5cGUgPSBodG9ucyhwYXlsb2FkX2xlbmd0aCk7CkBAIC01NDIsOCArNTQyLDggQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogdm9pZCBwODAyMTFza2JfcnhtZXRhX2RldGFjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXA4MDIxMV9yeG1ldGFfdCAqcnhtZXRhOwotCXA4MDIxMV9mcm1tZXRhX3QgKmZybW1ldGE7CisJc3RydWN0IHA4MDIxMV9yeG1ldGEgKnJ4bWV0YTsKKwlzdHJ1Y3QgcDgwMjExX2ZybW1ldGEgKmZybW1ldGE7CiAKIAkvKiBTYW5pdHkgY2hlY2tzICovCiAJaWYgKHNrYiA9PSBOVUxMKSB7CS8qIGJhZCBza2IgKi8KQEAgLTU4OSw4ICs1ODksOCBAQAogaW50IHA4MDIxMXNrYl9yeG1ldGFfYXR0YWNoKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCByZXN1bHQgPSAwOwotCXA4MDIxMV9yeG1ldGFfdCAqcnhtZXRhOwotCXA4MDIxMV9mcm1tZXRhX3QgKmZybW1ldGE7CisJc3RydWN0IHA4MDIxMV9yeG1ldGEgKnJ4bWV0YTsKKwlzdHJ1Y3QgcDgwMjExX2ZybW1ldGEgKmZybW1ldGE7CiAKIAkvKiBJZiB0aGVzZSBhbHJlYWR5IGhhdmUgbWV0YWRhdGEsIHdlIGVycm9yIG91dCEgKi8KIAlpZiAoUDgwMjExU0tCX1JYTUVUQShza2IpICE9IE5VTEwpIHsKQEAgLTYwMSw3ICs2MDEsNyBAQAogCX0KIAogCS8qIEFsbG9jYXRlIHRoZSByeG1ldGEgKi8KLQlyeG1ldGEgPSBremFsbG9jKHNpemVvZihwODAyMTFfcnhtZXRhX3QpLCBHRlBfQVRPTUlDKTsKKwlyeG1ldGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcDgwMjExX3J4bWV0YSksIEdGUF9BVE9NSUMpOwogCiAJaWYgKHJ4bWV0YSA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byBhbGxvY2F0ZSByeG1ldGEuXG4iLApAQCAtNjE1LDggKzYxNSw4IEBACiAJcnhtZXRhLT5ob3N0dGltZSA9IGppZmZpZXM7CiAKIAkvKiBPdmVybGF5IGEgZnJtbWV0YV90IG9udG8gc2tiLT5jYiAqLwotCW1lbXNldChza2ItPmNiLCAwLCBzaXplb2YocDgwMjExX2ZybW1ldGFfdCkpOwotCWZybW1ldGEgPSAocDgwMjExX2ZybW1ldGFfdCAqKSAoc2tiLT5jYik7CisJbWVtc2V0KHNrYi0+Y2IsIDAsIHNpemVvZihzdHJ1Y3QgcDgwMjExX2ZybW1ldGEpKTsKKwlmcm1tZXRhID0gKHN0cnVjdCBwODAyMTFfZnJtbWV0YSAqKSAoc2tiLT5jYik7CiAJZnJtbWV0YS0+bWFnaWMgPSBQODAyMTFfRlJNTUVUQV9NQUdJQzsKIAlmcm1tZXRhLT5yeCA9IHJ4bWV0YTsKIGV4aXQ6CkBAIC02NDEsNyArNjQxLDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogdm9pZCBwODAyMTFza2JfZnJlZShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlwODAyMTFfZnJtbWV0YV90ICptZXRhOworCXN0cnVjdCBwODAyMTFfZnJtbWV0YSAqbWV0YTsKIAogCW1ldGEgPSBQODAyMTFTS0JfRlJNTUVUQShza2IpOwogCWlmIChtZXRhICYmIG1ldGEtPnJ4KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5oCmluZGV4IDZmZTE2M2IuLmVjYTAzOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWNvbnYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmgKQEAgLTYzLDE3ICs2MywxNyBAQAogCiAjZGVmaW5lIFA4MDIxMUNBUFRVUkVfVkVSU0lPTgkweDgwMjExMDAxCiAKLSNkZWZpbmUJUDgwMjExX0ZSTU1FVEFfTUFHSUMJCTB4ODAyMTEwCisjZGVmaW5lCVA4MDIxMV9GUk1NRVRBX01BR0lDCTB4ODAyMTEwCiAKICNkZWZpbmUgUDgwMjExU0tCX0ZSTU1FVEEocykgXAotCSgoKCgocDgwMjExX2ZybW1ldGFfdCAqKSgocyktPmNiKSktPm1hZ2ljKSA9PSBQODAyMTFfRlJNTUVUQV9NQUdJQykgPyBcCi0JCSgocDgwMjExX2ZybW1ldGFfdCAqKSgocyktPmNiKSkgOiBcCisJKCgoKChzdHJ1Y3QgcDgwMjExX2ZybW1ldGEgKikoKHMpLT5jYikpLT5tYWdpYykgPT0gUDgwMjExX0ZSTU1FVEFfTUFHSUMpID8gXAorCQkoKHN0cnVjdCBwODAyMTFfZnJtbWV0YSAqKSgocyktPmNiKSkgOiBcCiAJCShOVUxMKSkKIAogI2RlZmluZSBQODAyMTFTS0JfUlhNRVRBKHMpIFwKLQkoUDgwMjExU0tCX0ZSTU1FVEEoKHMpKSA/ICBQODAyMTFTS0JfRlJNTUVUQSgocykpLT5yeCA6ICgocDgwMjExX3J4bWV0YV90ICopKE5VTEwpKSkKKwkoUDgwMjExU0tCX0ZSTU1FVEEoKHMpKSA/ICBQODAyMTFTS0JfRlJNTUVUQSgocykpLT5yeCA6ICgoc3RydWN0IHA4MDIxMV9yeG1ldGEgKikoTlVMTCkpKQogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFfcnhtZXRhIHsKK3N0cnVjdCBwODAyMTFfcnhtZXRhIHsKIAlzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldjsKIAogCXU2NCBtYWN0aW1lOwkJLyogSGktcmV6IE1BQy1zdXBwbGllZCB0aW1lIHZhbHVlICovCkBAIC04NywxMiArODcsMTIgQEAKIAl1bnNpZ25lZCBpbnQgcHJlYW1ibGU7CS8qIFA4MDIxMUVOVU1fcHJlYW1ibGV0eXBlXyogKi8KIAl1bnNpZ25lZCBpbnQgZW5jb2Rpbmc7CS8qIFA4MDIxMUVOVU1fZW5jb2RpbmdfKiAqLwogCi19IHA4MDIxMV9yeG1ldGFfdDsKK307CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMV9mcm1tZXRhIHsKK3N0cnVjdCBwODAyMTFfZnJtbWV0YSB7CiAJdW5zaWduZWQgaW50IG1hZ2ljOwotCXA4MDIxMV9yeG1ldGFfdCAqcng7Ci19IHA4MDIxMV9mcm1tZXRhX3Q7CisJc3RydWN0IHA4MDIxMV9yeG1ldGEgKnJ4OworfTsKIAogdm9pZCBwODAyMTFza2JfZnJlZShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgcDgwMjExc2tiX3J4bWV0YV9hdHRhY2goc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMTAxLDcgKzEwMSw3IEBACiAvKgogICogRnJhbWUgY2FwdHVyZSBoZWFkZXIuICAoU2VlIGRvYy9jYXB0dXJlZnJtLnR4dCkKICAqLwotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExX2NhcGhkciB7CitzdHJ1Y3QgcDgwMjExX2NhcGhkciB7CiAJdTMyIHZlcnNpb247CiAJdTMyIGxlbmd0aDsKIAl1NjQgbWFjdGltZTsKQEAgLTExNiwzNiArMTE2LDM2IEBACiAJczMyIHNzaV9ub2lzZTsKIAl1MzIgcHJlYW1ibGU7CiAJdTMyIGVuY29kaW5nOwotfSBwODAyMTFfY2FwaGRyX3Q7Cit9OwogCiAvKiBidWZmZXIgZnJlZSBtZXRob2QgcG9pbnRlciB0eXBlICovCiB0eXBlZGVmIHZvaWQgKCpmcmVlYnVmX21ldGhvZF90KSAodm9pZCAqYnVmLCBpbnQgc2l6ZSk7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMV9tZXRhd2VwIHsKK3N0cnVjdCBwODAyMTFfbWV0YXdlcCB7CiAJdm9pZCAqZGF0YTsKIAl1OCBpdls0XTsKIAl1OCBpY3ZbNF07Ci19IHA4MDIxMV9tZXRhd2VwX3Q7Cit9OwogCiAvKiBsb2NhbCBldGhlciBoZWFkZXIgdHlwZSAqLwotdHlwZWRlZiBzdHJ1Y3Qgd2xhbl9ldGhoZHIgeworc3RydWN0IHdsYW5fZXRoaGRyIHsKIAl1OCBkYWRkcltXTEFOX0VUSEFERFJfTEVOXTsKIAl1OCBzYWRkcltXTEFOX0VUSEFERFJfTEVOXTsKIAl1MTYgdHlwZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHdsYW5fZXRoaGRyX3Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogbG9jYWwgbGxjIGhlYWRlciB0eXBlICovCi10eXBlZGVmIHN0cnVjdCB3bGFuX2xsYyB7CitzdHJ1Y3Qgd2xhbl9sbGMgewogCXU4IGRzYXA7CiAJdTggc3NhcDsKIAl1OCBjdGw7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB3bGFuX2xsY190OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIGxvY2FsIHNuYXAgaGVhZGVyIHR5cGUgKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5fc25hcCB7CitzdHJ1Y3Qgd2xhbl9zbmFwIHsKIAl1OCBvdWlbV0xBTl9JRUVFX09VSV9MRU5dOwogCXUxNiB0eXBlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgd2xhbl9zbmFwX3Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogQ2lyY3VsYXIgaW5jbHVkZSB0cmljayAqLwogc3RydWN0IHdsYW5kZXZpY2U7CkBAIC0xNTMsOCArMTUzLDggQEAKIGludCBza2JfcDgwMjExX3RvX2V0aGVyKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCB1MzIgZXRoY29udiwKIAkJCXN0cnVjdCBza19idWZmICpza2IpOwogaW50IHNrYl9ldGhlcl90b19wODAyMTEoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHUzMiBldGhjb252LAotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLAotCQkJcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCk7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bmlvbiBwODAyMTFfaGRyICpwODAyMTFfaGRyLAorCQkJc3RydWN0IHA4MDIxMV9tZXRhd2VwICpwODAyMTFfd2VwKTsKIAogaW50IHA4MDIxMV9zdHRfZmluZHByb3RvKHUxNiBwcm90byk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWhkci5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExaGRyLmgKaW5kZXggNDE5ZGU0ZC4uMWY2ZTRlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExaGRyLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExaGRyLmgKQEAgLTk0LDcgKzk0LDcgQEAKIAogLyogQ29udHJvbCAqLwogI2RlZmluZSBXTEFOX0ZTVFlQRV9CTE9DS0FDS1JFUQkJMHg4Ci0jZGVmaW5lIFdMQU5fRlNUWVBFX0JMT0NLQUNLICAJCTB4OQorI2RlZmluZSBXTEFOX0ZTVFlQRV9CTE9DS0FDSwkJMHg5CiAjZGVmaW5lIFdMQU5fRlNUWVBFX1BTUE9MTAkJMHgwYQogI2RlZmluZSBXTEFOX0ZTVFlQRV9SVFMJCQkweDBiCiAjZGVmaW5lIFdMQU5fRlNUWVBFX0NUUwkJCTB4MGMKQEAgLTEzMywxMyArMTMzLDEzIEBACiAKICNkZWZpbmUgV0xBTl9HRVRfRkNfRlRZUEUobikJKCgoKHUxNikobikpICYgKEJJVCgyKSB8IEJJVCgzKSkpID4+IDIpCiAjZGVmaW5lIFdMQU5fR0VUX0ZDX0ZTVFlQRShuKQkoKCgodTE2KShuKSkgJiAoQklUKDQpfEJJVCg1KXxCSVQoNil8QklUKDcpKSkgPj4gNCkKLSNkZWZpbmUgV0xBTl9HRVRfRkNfVE9EUyhuKSAJKCgoKHUxNikobikpICYgKEJJVCg4KSkpID4+IDgpCisjZGVmaW5lIFdMQU5fR0VUX0ZDX1RPRFMobikJKCgoKHUxNikobikpICYgKEJJVCg4KSkpID4+IDgpCiAjZGVmaW5lIFdMQU5fR0VUX0ZDX0ZST01EUyhuKQkoKCgodTE2KShuKSkgJiAoQklUKDkpKSkgPj4gOSkKICNkZWZpbmUgV0xBTl9HRVRfRkNfSVNXRVAobikJKCgoKHUxNikobikpICYgKEJJVCgxNCkpKSA+PiAxNCkKIAogI2RlZmluZSBXTEFOX1NFVF9GQ19GVFlQRShuKQkoKCh1MTYpKG4pKSA8PCAyKQogI2RlZmluZSBXTEFOX1NFVF9GQ19GU1RZUEUobikJKCgodTE2KShuKSkgPDwgNCkKLSNkZWZpbmUgV0xBTl9TRVRfRkNfVE9EUyhuKSAJKCgodTE2KShuKSkgPDwgOCkKKyNkZWZpbmUgV0xBTl9TRVRfRkNfVE9EUyhuKQkoKCh1MTYpKG4pKSA8PCA4KQogI2RlZmluZSBXTEFOX1NFVF9GQ19GUk9NRFMobikJKCgodTE2KShuKSkgPDwgOSkKICNkZWZpbmUgV0xBTl9TRVRfRkNfSVNXRVAobikJKCgodTE2KShuKSkgPDwgMTQpCiAKQEAgLTE0NywxNiArMTQ3LDE2IEBACiAKIC8qIEdlbmVyaWMgODAyLjExIEhlYWRlciB0eXBlcyAqLwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFfaGRyX2EzIHsKK3N0cnVjdCBwODAyMTFfaGRyX2EzIHsKIAl1MTYgZmM7CiAJdTE2IGR1cjsKIAl1OCBhMVtFVEhfQUxFTl07CiAJdTggYTJbRVRIX0FMRU5dOwogCXU4IGEzW0VUSF9BTEVOXTsKIAl1MTYgc2VxOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExX2hkcl9hM190OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMV9oZHJfYTQgeworc3RydWN0IHA4MDIxMV9oZHJfYTQgewogCXUxNiBmYzsKIAl1MTYgZHVyOwogCXU4IGExW0VUSF9BTEVOXTsKQEAgLTE2NCwxOCArMTY0LDE4IEBACiAJdTggYTNbRVRIX0FMRU5dOwogCXUxNiBzZXE7CiAJdTggYTRbRVRIX0FMRU5dOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExX2hkcl9hNF90OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgdW5pb24gcDgwMjExX2hkciB7Ci0JcDgwMjExX2hkcl9hM190IGEzOwotCXA4MDIxMV9oZHJfYTRfdCBhNDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMV9oZHJfdDsKK3VuaW9uIHA4MDIxMV9oZHIgeworCXN0cnVjdCBwODAyMTFfaGRyX2EzIGEzOworCXN0cnVjdCBwODAyMTFfaGRyX2E0IGE0OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIEZyYW1lIGFuZCBoZWFkZXIgbGVuZ3RoIG1hY3JvcyAqLwogCiAjZGVmaW5lIFdMQU5fQ1RMX0ZSQU1FTEVOKGZzdHlwZSkgKFwKIAkoZnN0eXBlKSA9PSBXTEFOX0ZTVFlQRV9CTE9DS0FDS1JFUQk/IDI0IDogXAotCShmc3R5cGUpID09IFdMQU5fRlNUWVBFX0JMT0NLQUNLICAgCT8gMTUyIDogXAorCShmc3R5cGUpID09IFdMQU5fRlNUWVBFX0JMT0NLQUNLCT8gMTUyIDogXAogCShmc3R5cGUpID09IFdMQU5fRlNUWVBFX1BTUE9MTAkJPyAyMCA6IFwKIAkoZnN0eXBlKSA9PSBXTEFOX0ZTVFlQRV9SVFMJCT8gMjAgOiBcCiAJKGZzdHlwZSkgPT0gV0xBTl9GU1RZUEVfQ1RTCQk/IDE0IDogXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExaW9jdGwuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWlvY3RsLmgKaW5kZXggNjRjYTdmOS4uMGQ0Nzc2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExaW9jdGwuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFpb2N0bC5oCkBAIC03OCwxMiArNzgsMTIgQEAKIC8qICBhcmd1bWVudCB0byB0aGUgaW9jdGwgc3lzdGVtIGNhbGwgd2hlbiBpc3N1aW5nIGEgcmVxdWVzdCB0byAqLwogLyogIHRoZSBwODAyMTEgbW9kdWxlLiAqLwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFpb2N0bF9yZXEgeworc3RydWN0IHA4MDIxMWlvY3RsX3JlcSB7CiAJY2hhciBuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOwogCWNhZGRyX3QgZGF0YTsKIAl1MzIgbWFnaWM7CiAJdTE2IGxlbjsKIAl1MzIgcmVzdWx0OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExaW9jdGxfcmVxX3Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2VuZGlmIC8qIF9QODAyMTFJT0NUTF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhLmgKaW5kZXggYjliYWRjZi4uYzVmMWE2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGEuaApAQCAtNjIsNyArNjIsNyBAQAogLyogcmVwcmVzZW50YXRpb24gb2YgY2F0ZWdvcnkgbGlzdCBtZXRhZGF0YSwgZ3JvdXAgbGlzdCBtZXRhZGF0YSwgKi8KIC8qIGFuZCBkYXRhIGl0ZW0gbWV0YWRhdGEgZm9yIGJvdGggTWliIGFuZCBNZXNzYWdlcy4gKi8KIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbWV0YSB7CitzdHJ1Y3QgcDgwMjExbWV0YSB7CiAJY2hhciAqbmFtZTsJCS8qIGRhdGEgaXRlbSBuYW1lICovCiAJdTMyIGRpZDsJCS8qIHBhcnRpYWwgZGlkICovCiAJdTMyIGZsYWdzOwkJLyogc2V0IG9mIHZhcmlvdXMgZmxhZyBiaXRzICovCkBAIC03NSwxNiArNzUsMTYgQEAKIAlwODAyMTFfdG90ZXh0X3QgdG90ZXh0cHRyOwkvKiBwdHIgdG8gdG90ZXh0IGNvbnZlcnNpb24gZnVuY3Rpb24gKi8KIAlwODAyMTFfZnJvbXRleHRfdCBmcm9tdGV4dHB0cjsJLyogcHRyIHRvIHRvdGV4dCBjb252ZXJzaW9uIGZ1bmN0aW9uICovCiAJcDgwMjExX3ZhbGlkX3QgdmFsaWRmdW5wdHI7CS8qIHB0ciB0byB0b3RleHQgY29udmVyc2lvbiBmdW5jdGlvbiAqLwotfSBwODAyMTFtZXRhX3Q7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBncnBsaXN0aXRlbSB7CitzdHJ1Y3QgZ3JwbGlzdGl0ZW0gewogCWNoYXIgKm5hbWU7Ci0JcDgwMjExbWV0YV90ICppdGVtbGlzdDsKLX0gZ3JwbGlzdGl0ZW1fdDsKKwlzdHJ1Y3QgcDgwMjExbWV0YSAqaXRlbWxpc3Q7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBjYXRsaXN0aXRlbSB7CitzdHJ1Y3QgY2F0bGlzdGl0ZW0gewogCWNoYXIgKm5hbWU7Ci0JZ3JwbGlzdGl0ZW1fdCAqZ3JwbGlzdDsKLX0gY2F0bGlzdGl0ZW1fdDsKKwlzdHJ1Y3QgZ3JwbGlzdGl0ZW0gKmdycGxpc3Q7Cit9OwogCiAjZW5kaWYgLyogX1A4MDIxMU1FVEFfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YXN0cnVjdC5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YXN0cnVjdC5oCmluZGV4IGRiMTI3MTMuLmE4YTRlM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFzdHJ1Y3QuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhc3RydWN0LmgKQEAgLTQ3LDIzICs0NywyMyBAQAogI2lmbmRlZiBfUDgwMjExTUtNRVRBU1RSVUNUX0gKICNkZWZpbmUgX1A4MDIxMU1LTUVUQVNUUlVDVF9ICiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9taWJnZXQgeworc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9taWJnZXQgewogCXUzMiBtc2djb2RlOwogCXUzMiBtc2dsZW47CiAJdTggZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKIAlwODAyMTFpdGVtX3VuazM5Ml90IG1pYmF0dHJpYnV0ZTsKIAlwODAyMTFpdGVtX3VpbnQzMl90IHJlc3VsdGNvZGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0X3Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldCB7CitzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldCB7CiAJdTMyIG1zZ2NvZGU7CiAJdTMyIG1zZ2xlbjsKIAl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOwogCXA4MDIxMWl0ZW1fdW5rMzkyX3QgbWliYXR0cmlidXRlOwogCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfc2NhbiB7CitzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX3NjYW4gewogCXUzMiBtc2djb2RlOwogCXUzMiBtc2dsZW47CiAJdTggZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKQEAgLTgxLDkgKzgxLDkgQEAKIAlwODAyMTFpdGVtX3VpbnQzMl90IHJlc3VsdGNvZGU7CiAJcDgwMjExaXRlbV91aW50MzJfdCBudW1ic3M7CiAJcDgwMjExaXRlbV91aW50MzJfdCBhcHBlbmQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl90OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHMgeworc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHMgewogCXUzMiBtc2djb2RlOwogCXUzMiBtc2dsZW47CiAJdTggZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKQEAgLTExMyw2ICsxMTMsNyBAQAogCXA4MDIxMWl0ZW1fdWludDMyX3QgY2Zwb2xsYWJsZTsKIAlwODAyMTFpdGVtX3VpbnQzMl90IGNmcG9sbHJlcTsKIAlwODAyMTFpdGVtX3VpbnQzMl90IHByaXZhY3k7CisJcDgwMjExaXRlbV91aW50MzJfdCBjYXBpbmZvOwogCXA4MDIxMWl0ZW1fdWludDMyX3QgYmFzaWNyYXRlMTsKIAlwODAyMTFpdGVtX3VpbnQzMl90IGJhc2ljcmF0ZTI7CiAJcDgwMjExaXRlbV91aW50MzJfdCBiYXNpY3JhdGUzOwpAQCAtMTI5LDkgKzEzMCw5IEBACiAJcDgwMjExaXRlbV91aW50MzJfdCBzdXBwcmF0ZTY7CiAJcDgwMjExaXRlbV91aW50MzJfdCBzdXBwcmF0ZTc7CiAJcDgwMjExaXRlbV91aW50MzJfdCBzdXBwcmF0ZTg7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX3N0YXJ0IHsKK3N0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfc3RhcnQgewogCXUzMiBtc2djb2RlOwogCXUzMiBtc2dsZW47CiAJdTggZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKQEAgLTE2NywxNyArMTY4LDE3IEBACiAJcDgwMjExaXRlbV91aW50MzJfdCBvcGVyYXRpb25hbHJhdGU3OwogCXA4MDIxMWl0ZW1fdWludDMyX3Qgb3BlcmF0aW9uYWxyYXRlODsKIAlwODAyMTFpdGVtX3VpbnQzMl90IHJlc3VsdGNvZGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfZG90MTFyZXFfc3RhcnRfdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2lmc3RhdGUgeworc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfaWZzdGF0ZSB7CiAJdTMyIG1zZ2NvZGU7CiAJdTMyIG1zZ2xlbjsKIAl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOwogCXA4MDIxMWl0ZW1fdWludDMyX3QgaWZzdGF0ZTsKIAlwODAyMTFpdGVtX3VpbnQzMl90IHJlc3VsdGNvZGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfbG54cmVxX2lmc3RhdGVfdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfbG54cmVxX3dsYW5zbmlmZiB7CitzdHJ1Y3QgcDgwMjExbXNnX2xueHJlcV93bGFuc25pZmYgewogCXUzMiBtc2djb2RlOwogCXUzMiBtc2dsZW47CiAJdTggZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKQEAgLTE4OSwxOCArMTkwLDE4IEBACiAJcDgwMjExaXRlbV91aW50MzJfdCBzdHJpcGZjczsKIAlwODAyMTFpdGVtX3VpbnQzMl90IHBhY2tldF90cnVuYzsKIAlwODAyMTFpdGVtX3VpbnQzMl90IHJlc3VsdGNvZGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfbG54cmVxX3dsYW5zbmlmZl90OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfaG9zdHdlcCB7CitzdHJ1Y3QgcDgwMjExbXNnX2xueHJlcV9ob3N0d2VwIHsKIAl1MzIgbXNnY29kZTsKIAl1MzIgbXNnbGVuOwogCXU4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CiAJcDgwMjExaXRlbV91aW50MzJfdCByZXN1bHRjb2RlOwogCXA4MDIxMWl0ZW1fdWludDMyX3QgZGVjcnlwdDsKIAlwODAyMTFpdGVtX3VpbnQzMl90IGVuY3J5cHQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfbG54cmVxX2hvc3R3ZXBfdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eSB7CitzdHJ1Y3QgcDgwMjExbXNnX2xueHJlcV9jb21tc3F1YWxpdHkgewogCXUzMiBtc2djb2RlOwogCXUzMiBtc2dsZW47CiAJdTggZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKQEAgLTIwOSw5ICsyMTAsMTAgQEAKIAlwODAyMTFpdGVtX3VpbnQzMl90IGxpbms7CiAJcDgwMjExaXRlbV91aW50MzJfdCBsZXZlbDsKIAlwODAyMTFpdGVtX3VpbnQzMl90IG5vaXNlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExbXNnX2xueHJlcV9jb21tc3F1YWxpdHlfdDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IHR4cmF0ZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luIHsKK3N0cnVjdCBwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luIHsKIAl1MzIgbXNnY29kZTsKIAl1MzIgbXNnbGVuOwogCXU4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CkBAIC0yMTksMjYgKzIyMSwyNiBAQAogCXU4IHBhZF8xOURbM107CiAJcDgwMjExaXRlbV91aW50MzJfdCBhdXRodHlwZTsKIAlwODAyMTFpdGVtX3VpbnQzMl90IHJlc3VsdGNvZGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luX3Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JlYWRwZGEgeworc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9yZWFkcGRhIHsKIAl1MzIgbXNnY29kZTsKIAl1MzIgbXNnbGVuOwogCXU4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CiAJcDgwMjExaXRlbV91bmsxMDI0X3QgcGRhOwogCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ19wMnJlcV9yZWFkcGRhX3Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JhbWRsX3N0YXRlIHsKK3N0cnVjdCBwODAyMTFtc2dfcDJyZXFfcmFtZGxfc3RhdGUgewogCXUzMiBtc2djb2RlOwogCXUzMiBtc2dsZW47CiAJdTggZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKIAlwODAyMTFpdGVtX3VpbnQzMl90IGVuYWJsZTsKIAlwODAyMTFpdGVtX3VpbnQzMl90IGV4ZWFkZHI7CiAJcDgwMjExaXRlbV91aW50MzJfdCByZXN1bHRjb2RlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExbXNnX3AycmVxX3JhbWRsX3N0YXRlX3Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JhbWRsX3dyaXRlIHsKK3N0cnVjdCBwODAyMTFtc2dfcDJyZXFfcmFtZGxfd3JpdGUgewogCXUzMiBtc2djb2RlOwogCXUzMiBtc2dsZW47CiAJdTggZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKQEAgLTI0NiwxNyArMjQ4LDE3IEBACiAJcDgwMjExaXRlbV91aW50MzJfdCBsZW47CiAJcDgwMjExaXRlbV91bms0MDk2X3QgZGF0YTsKIAlwODAyMTFpdGVtX3VpbnQzMl90IHJlc3VsdGNvZGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfcDJyZXFfcmFtZGxfd3JpdGVfdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF9zdGF0ZSB7CitzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX2ZsYXNoZGxfc3RhdGUgewogCXUzMiBtc2djb2RlOwogCXUzMiBtc2dsZW47CiAJdTggZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKIAlwODAyMTFpdGVtX3VpbnQzMl90IGVuYWJsZTsKIAlwODAyMTFpdGVtX3VpbnQzMl90IHJlc3VsdGNvZGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF9zdGF0ZV90OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9mbGFzaGRsX3dyaXRlIHsKK3N0cnVjdCBwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF93cml0ZSB7CiAJdTMyIG1zZ2NvZGU7CiAJdTMyIG1zZ2xlbjsKIAl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOwpAQCAtMjY0LDYgKzI2Niw2IEBACiAJcDgwMjExaXRlbV91aW50MzJfdCBsZW47CiAJcDgwMjExaXRlbV91bms0MDk2X3QgZGF0YTsKIAlwODAyMTFpdGVtX3VpbnQzMl90IHJlc3VsdGNvZGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF93cml0ZV90OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWdtdC5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWdtdC5oCmluZGV4IGRlYjUyZjUuLjNiNWU4MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1nbXQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZ210LmgKQEAgLTI5OCw3ICsyOTgsNyBAQAogCXUxNiB0eXBlOwogCXUxNiBsZW47CQkvKiBET0VTIE5PVCBpbmNsdWRlIENSQyAhISEhICovCiAJdTggKmJ1ZjsKLQlwODAyMTFfaGRyX3QgKmhkcjsKKwl1bmlvbiBwODAyMTFfaGRyICpoZHI7CiAJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLwogCXZvaWQgKnByaXY7CiAJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLwpAQCAtMzEwLDcgKzMxMCw3IEBACiAJdTE2IHR5cGU7CiAJdTE2IGxlbjsKIAl1OCAqYnVmOwotCXA4MDIxMV9oZHJfdCAqaGRyOworCXVuaW9uIHA4MDIxMV9oZHIgKmhkcjsKIAkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCiAJdm9pZCAqcHJpdjsKIAkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCkBAIC0zMzMsNyArMzMzLDcgQEAKIAl1MTYgdHlwZTsKIAl1MTYgbGVuOwogCXU4ICpidWY7Ci0JcDgwMjExX2hkcl90ICpoZHI7CisJdW5pb24gcDgwMjExX2hkciAqaGRyOwogCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KIAl2b2lkICpwcml2OwogCkBAIC0zNDksNyArMzQ5LDcgQEAKIAl1MTYgdHlwZTsKIAl1MTYgbGVuOwogCXU4ICpidWY7Ci0JcDgwMjExX2hkcl90ICpoZHI7CisJdW5pb24gcDgwMjExX2hkciAqaGRyOwogCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KIAl2b2lkICpwcml2OwogCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KQEAgLTM2NCw3ICszNjQsNyBAQAogCXUxNiB0eXBlOwogCXUxNiBsZW47CiAJdTggKmJ1ZjsKLQlwODAyMTFfaGRyX3QgKmhkcjsKKwl1bmlvbiBwODAyMTFfaGRyICpoZHI7CiAJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLwogCXZvaWQgKnByaXY7CiAJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLwpAQCAtMzgxLDcgKzM4MSw3IEBACiAJdTE2IHR5cGU7CiAJdTE2IGxlbjsKIAl1OCAqYnVmOwotCXA4MDIxMV9oZHJfdCAqaGRyOworCXVuaW9uIHA4MDIxMV9oZHIgKmhkcjsKIAkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCiAJdm9pZCAqcHJpdjsKIAkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCkBAIC0zOTgsNyArMzk4LDcgQEAKIAl1MTYgdHlwZTsKIAl1MTYgbGVuOwogCXU4ICpidWY7Ci0JcDgwMjExX2hkcl90ICpoZHI7CisJdW5pb24gcDgwMjExX2hkciAqaGRyOwogCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KIAl2b2lkICpwcml2OwogCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KQEAgLTQxNiw3ICs0MTYsNyBAQAogCXUxNiB0eXBlOwogCXUxNiBsZW47CiAJdTggKmJ1ZjsKLQlwODAyMTFfaGRyX3QgKmhkcjsKKwl1bmlvbiBwODAyMTFfaGRyICpoZHI7CiAJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLwogCXZvaWQgKnByaXY7CiAJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLwpAQCAtNDMzLDcgKzQzMyw3IEBACiAJdTE2IHR5cGU7CiAJdTE2IGxlbjsKIAl1OCAqYnVmOwotCXA4MDIxMV9oZHJfdCAqaGRyOworCXVuaW9uIHA4MDIxMV9oZHIgKmhkcjsKIAkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCiAJdm9pZCAqcHJpdjsKIAkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCkBAIC00NDgsNyArNDQ4LDcgQEAKIAl1MTYgdHlwZTsKIAl1MTYgbGVuOwogCXU4ICpidWY7Ci0JcDgwMjExX2hkcl90ICpoZHI7CisJdW5pb24gcDgwMjExX2hkciAqaGRyOwogCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KIAl2b2lkICpwcml2OwogCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KQEAgLTQ2OSw3ICs0NjksNyBAQAogCXUxNiB0eXBlOwogCXUxNiBsZW47CiAJdTggKmJ1ZjsKLQlwODAyMTFfaGRyX3QgKmhkcjsKKwl1bmlvbiBwODAyMTFfaGRyICpoZHI7CiAJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLwogCXZvaWQgKnByaXY7CiAJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLwpAQCAtNDg2LDcgKzQ4Niw3IEBACiAJdTE2IHR5cGU7CiAJdTE2IGxlbjsKIAl1OCAqYnVmOwotCXA4MDIxMV9oZHJfdCAqaGRyOworCXVuaW9uIHA4MDIxMV9oZHIgKmhkcjsKIAkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCiAJdm9pZCAqcHJpdjsKIAkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtc2cuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1zZy5oCmluZGV4IGM2OTFkM2UuLjhlMGY5YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1zZy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1zZy5oCkBAIC01MCwxMCArNTAsMTAgQEAKIAogI2RlZmluZSBXTEFOX0RFVk5BTUVMRU5fTUFYCTE2CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMW1zZyB7CitzdHJ1Y3QgcDgwMjExbXNnIHsKIAl1MzIgbXNnY29kZTsKIAl1MzIgbXNnbGVuOwogCXU4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAjZW5kaWYgLyogX1A4MDIxMU1TR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5jCmluZGV4IDc2M2FiMTEuLmFhMTc5MmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuYwpAQCAtNzUsNiArNzUsNyBAQAogCiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgogCiAjaW5jbHVkZSAicDgwMjExdHlwZXMuaCIKICNpbmNsdWRlICJwODAyMTFoZHIuaCIKQEAgLTg3LDYgKzg4LDggQEAKICNpbmNsdWRlICJwODAyMTFtZXRhc3RydWN0LmgiCiAjaW5jbHVkZSAicDgwMjExbWV0YWRlZi5oIgogCisjaW5jbHVkZSAiY2ZnODAyMTEuYyIKKwogLyogU3VwcG9ydCBmdW5jdGlvbnMgKi8KIHN0YXRpYyB2b2lkIHA4MDIxMW5ldGRldl9yeF9iaCh1bnNpZ25lZCBsb25nIGFyZyk7CiAKQEAgLTI2MSw3ICsyNjQsNyBAQAogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QgKikgYXJnOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCW5ldGRldmljZV90ICpkZXYgPSB3bGFuZGV2LT5uZXRkZXY7Ci0JcDgwMjExX2hkcl9hM190ICpoZHI7CisJc3RydWN0IHA4MDIxMV9oZHJfYTMgKmhkcjsKIAl1MTYgZmM7CiAKIAkvKiBMZXQncyBlbXB0eSBvdXIgb3VyIHF1ZXVlICovCkBAIC0yODUsNyArMjg4LDcgQEAKIAkJCQluZXRpZl9yeF9uaShza2IpOwogCQkJCWNvbnRpbnVlOwogCQkJfSBlbHNlIHsKLQkJCQloZHIgPSAocDgwMjExX2hkcl9hM190ICopIHNrYi0+ZGF0YTsKKwkJCQloZHIgPSAoc3RydWN0IHA4MDIxMV9oZHJfYTMgKikgc2tiLT5kYXRhOwogCQkJCWZjID0gbGUxNl90b19jcHUoaGRyLT5mYyk7CiAJCQkJaWYgKHA4MDIxMV9yeF90eXBlZHJvcCh3bGFuZGV2LCBmYykpIHsKIAkJCQkJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtMzQ3LDggKzM1MCw4IEBACiAJaW50IHJlc3VsdCA9IDA7CiAJaW50IHR4cmVzdWx0ID0gLTE7CiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gbmV0ZGV2LT5tbF9wcml2OwotCXA4MDIxMV9oZHJfdCBwODAyMTFfaGRyOwotCXA4MDIxMV9tZXRhd2VwX3QgcDgwMjExX3dlcDsKKwl1bmlvbiBwODAyMTFfaGRyIHA4MDIxMV9oZHI7CisJc3RydWN0IHA4MDIxMV9tZXRhd2VwIHA4MDIxMV93ZXA7CiAKIAlpZiAoc2tiID09IE5VTEwpCiAJCXJldHVybiBORVRERVZfVFhfT0s7CkBAIC0zNTgsOCArMzYxLDggQEAKIAkJZ290byBmYWlsZWQ7CiAJfQogCi0JbWVtc2V0KCZwODAyMTFfaGRyLCAwLCBzaXplb2YocDgwMjExX2hkcl90KSk7Ci0JbWVtc2V0KCZwODAyMTFfd2VwLCAwLCBzaXplb2YocDgwMjExX21ldGF3ZXBfdCkpOworCW1lbXNldCgmcDgwMjExX2hkciwgMCwgc2l6ZW9mKHVuaW9uIHA4MDIxMV9oZHIpKTsKKwltZW1zZXQoJnA4MDIxMV93ZXAsIDAsIHNpemVvZihzdHJ1Y3QgcDgwMjExX21ldGF3ZXApKTsKIAogCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKG5ldGRldikpIHsKIAkJcHJfZGVidWcoImNhbGxlZCB3aGVuIHF1ZXVlIHN0b3BwZWQuXG4iKTsKQEAgLTM5OCw4ICs0MDEsOCBAQAogCQkJZ290byBmYWlsZWQ7CiAJCX0KIAkJLyogbW92ZSB0aGUgaGVhZGVyIG92ZXIgKi8KLQkJbWVtY3B5KCZwODAyMTFfaGRyLCBza2ItPmRhdGEsIHNpemVvZihwODAyMTFfaGRyX3QpKTsKLQkJc2tiX3B1bGwoc2tiLCBzaXplb2YocDgwMjExX2hkcl90KSk7CisJCW1lbWNweSgmcDgwMjExX2hkciwgc2tiLT5kYXRhLCBzaXplb2YodW5pb24gcDgwMjExX2hkcikpOworCQlza2JfcHVsbChza2IsIHNpemVvZih1bmlvbiBwODAyMTFfaGRyKSk7CiAJfSBlbHNlIHsKIAkJaWYgKHNrYl9ldGhlcl90b19wODAyMTEKIAkJICAgICh3bGFuZGV2LCB3bGFuZGV2LT5ldGhjb252LCBza2IsICZwODAyMTFfaGRyLApAQCAtNTU3LDcgKzU2MCw3IEBACiBzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfZG9faW9jdGwobmV0ZGV2aWNlX3QgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCiB7CiAJaW50IHJlc3VsdCA9IDA7Ci0JcDgwMjExaW9jdGxfcmVxX3QgKnJlcSA9IChwODAyMTFpb2N0bF9yZXFfdCAqKSBpZnI7CisJc3RydWN0IHA4MDIxMWlvY3RsX3JlcSAqcmVxID0gKHN0cnVjdCBwODAyMTFpb2N0bF9yZXEgKikgaWZyOwogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKIAl1OCAqbXNnYnVmOwogCkBAIC02MDQsNyArNjA3LDggQEAKIAkJcmVzdWx0ID0gLUVOT01FTTsKIAl9CiBiYWlsOgotCXJldHVybiByZXN1bHQ7CQkvKiBJZiBhbGxvY2F0ZSxjb3B5ZnJvbSBvciBjb3B5dG8gZmFpbHMsIHJldHVybiBlcnJubyAqLworCS8qIElmIGFsbG9jYXRlLGNvcHlmcm9tIG9yIGNvcHl0byBmYWlscywgcmV0dXJuIGVycm5vICovCisJcmV0dXJuIHJlc3VsdDsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02MzUsNyArNjM5LDcgQEAKIHN0YXRpYyBpbnQgcDgwMjExa25ldGRldl9zZXRfbWFjX2FkZHJlc3MobmV0ZGV2aWNlX3QgKmRldiwgdm9pZCAqYWRkcikKIHsKIAlzdHJ1Y3Qgc29ja2FkZHIgKm5ld19hZGRyID0gYWRkcjsKLQlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgZG90MTFyZXE7CisJc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXQgZG90MTFyZXE7CiAJcDgwMjExaXRlbV91bmszOTJfdCAqbWliYXR0cjsKIAlwODAyMTFpdGVtX3BzdHI2X3QgKm1hY2FkZHI7CiAJcDgwMjExaXRlbV91aW50MzJfdCAqcmVzdWx0Y29kZTsKQEAgLTY1MSw5ICs2NTUsOSBAQAogCXJlc3VsdGNvZGUgPSAmZG90MTFyZXEucmVzdWx0Y29kZTsKIAogCS8qIFNldCB1cCBhIGRvdDExcmVxX21pYnNldCAqLwotCW1lbXNldCgmZG90MTFyZXEsIDAsIHNpemVvZihwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QpKTsKKwltZW1zZXQoJmRvdDExcmVxLCAwLCBzaXplb2Yoc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXQpKTsKIAlkb3QxMXJlcS5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKLQlkb3QxMXJlcS5tc2dsZW4gPSBzaXplb2YocDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90KTsKKwlkb3QxMXJlcS5tc2dsZW4gPSBzaXplb2Yoc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXQpOwogCW1lbWNweShkb3QxMXJlcS5kZXZuYW1lLAogCSAgICAgICAoKHdsYW5kZXZpY2VfdCAqKSBkZXYtPm1sX3ByaXYpLT5uYW1lLCBXTEFOX0RFVk5BTUVMRU5fTUFYIC0gMSk7CiAKQEAgLTczMiw2ICs3MzYsNyBAQAogKiBBcmd1bWVudHM6CiAqCXdsYW5kZXYJCXB0ciB0byB0aGUgd2xhbmRldiBzdHJ1Y3R1cmUgZm9yIHRoZQogKgkJCWludGVyZmFjZS4KKyoJcGh5c2RldgkJcHRyIHRvIHVzYiBkZXZpY2UKICogUmV0dXJuczoKICoJemVybyBvbiBzdWNjZXNzLCBub24temVybyBvdGhlcndpc2UuCiAqIENhbGwgQ29udGV4dDoKQEAgLTc0MCwxMCArNzQ1LDEyIEBACiAqCWNvbXBpbGVkIGRyaXZlcnMsIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdGhlCiAqCWNvbnRleHQgb2YgdGhlIGtlcm5lbCBzdGFydHVwIGNvZGUuCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWludCB3bGFuX3NldHVwKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK2ludCB3bGFuX3NldHVwKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgc3RydWN0IGRldmljZSAqcGh5c2RldikKIHsKIAlpbnQgcmVzdWx0ID0gMDsKLQluZXRkZXZpY2VfdCAqZGV2OworCW5ldGRldmljZV90ICpuZXRkZXY7CisJc3RydWN0IHdpcGh5ICp3aXBoeTsKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2OwogCiAJLyogU2V0IHVwIHRoZSB3bGFuZGV2ICovCiAJd2xhbmRldi0+c3RhdGUgPSBXTEFOX0RFVklDRV9DTE9TRUQ7CkBAIC03NTUsMjAgKzc2MiwzMCBAQAogCXRhc2tsZXRfaW5pdCgmd2xhbmRldi0+cnhfYmgsCiAJCSAgICAgcDgwMjExbmV0ZGV2X3J4X2JoLCAodW5zaWduZWQgbG9uZyl3bGFuZGV2KTsKIAorCS8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSB3aXBoeSBzdHJ1Y3QgKi8KKwl3aXBoeSA9IHdsYW5fY3JlYXRlX3dpcGh5KHBoeXNkZXYsIHdsYW5kZXYpOworCWlmICh3aXBoeSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGFsbG9jIHdpcGh5LlxuIik7CisJCXJldHVybiAxOworCX0KKwogCS8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBzdHJ1Y3QgZGV2aWNlICovCi0JZGV2ID0gYWxsb2NfbmV0ZGV2KDAsICJ3bGFuJWQiLCBldGhlcl9zZXR1cCk7Ci0JaWYgKGRldiA9PSBOVUxMKSB7CisJbmV0ZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3Qgd2lyZWxlc3NfZGV2KSwgIndsYW4lZCIsIGV0aGVyX3NldHVwKTsKKwlpZiAobmV0ZGV2ID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gYWxsb2MgbmV0ZGV2LlxuIik7CisJCXdsYW5fZnJlZV93aXBoeSh3aXBoeSk7CiAJCXJlc3VsdCA9IDE7CiAJfSBlbHNlIHsKLQkJd2xhbmRldi0+bmV0ZGV2ID0gZGV2OwotCQlkZXYtPm1sX3ByaXYgPSB3bGFuZGV2OwotCQlkZXYtPm5ldGRldl9vcHMgPSAmcDgwMjExX25ldGRldl9vcHM7CisJCXdsYW5kZXYtPm5ldGRldiA9IG5ldGRldjsKKwkJbmV0ZGV2LT5tbF9wcml2ID0gd2xhbmRldjsKKwkJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJnA4MDIxMV9uZXRkZXZfb3BzOworCQl3ZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwkJd2Rldi0+d2lwaHkgPSB3aXBoeTsKKwkJd2Rldi0+aWZ0eXBlID0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTjsKKwkJbmV0ZGV2LT5pZWVlODAyMTFfcHRyID0gd2RldjsKIAotCQlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJnA4MDIxMXdleHRfaGFuZGxlcl9kZWY7Ci0KLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAJfQogCiAJcmV0dXJuIHJlc3VsdDsKQEAgLTc5NywxNCArODE0LDE0IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGludCB3bGFuX3Vuc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KQogewotCWludCByZXN1bHQgPSAwOworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7CiAKIAl0YXNrbGV0X2tpbGwoJndsYW5kZXYtPnJ4X2JoKTsKIAotCWlmICh3bGFuZGV2LT5uZXRkZXYgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgImNhbGxlZCB3aXRob3V0IHdsYW5kZXYtPm5ldGRldiBzZXQuXG4iKTsKLQkJcmVzdWx0ID0gMTsKLQl9IGVsc2UgeworCWlmICh3bGFuZGV2LT5uZXRkZXYpIHsKKwkJd2RldiA9IG5ldGRldl9wcml2KHdsYW5kZXYtPm5ldGRldik7CisJCWlmICh3ZGV2LT53aXBoeSkKKwkJCXdsYW5fZnJlZV93aXBoeSh3ZGV2LT53aXBoeSk7CiAJCWZyZWVfbmV0ZGV2KHdsYW5kZXYtPm5ldGRldik7CiAJCXdsYW5kZXYtPm5ldGRldiA9IE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuaAppbmRleCAzYzhjNjQ4Li4xZWMzMzc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuaApAQCAtMTQ4LDYgKzE0OCw3IEBACiAjZGVmaW5lIE1BWF9LRVlMRU4gMzIKIAogI2RlZmluZSBIT1NUV0VQX0RFRkFVTFRLRVlfTUFTSyAoQklUKDEpfEJJVCgwKSkKKyNkZWZpbmUgSE9TVFdFUF9TSEFSRURLRVkgQklUKDMpCiAjZGVmaW5lIEhPU1RXRVBfREVDUllQVCAgQklUKDQpCiAjZGVmaW5lIEhPU1RXRVBfRU5DUllQVCAgQklUKDUpCiAjZGVmaW5lIEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQgQklUKDYpCkBAIC0xODMsOSArMTg0LDkgQEAKIAlpbnQgKCpjbG9zZSkgKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2KTsKIAl2b2lkICgqcmVzZXQpIChzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldik7CiAJaW50ICgqdHhmcmFtZSkgKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLAotCQkJcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCk7Ci0JaW50ICgqbWxtZXJlcXVlc3QpIChzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgcDgwMjExbXNnX3QgKm1zZyk7CisJCQl1bmlvbiBwODAyMTFfaGRyICpwODAyMTFfaGRyLAorCQkJc3RydWN0IHA4MDIxMV9tZXRhd2VwICpwODAyMTFfd2VwKTsKKwlpbnQgKCptbG1lcmVxdWVzdCkgKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBzdHJ1Y3QgcDgwMjExbXNnICptc2cpOwogCWludCAoKnNldF9tdWx0aWNhc3RfbGlzdCkgKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LAogCQkJCSAgIG5ldGRldmljZV90ICpkZXYpOwogCXZvaWQgKCp0eF90aW1lb3V0KSAoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYpOwpAQCAtMjMzLDcgKzIzNCw3IEBACiBpbnQgd2VwX2VuY3J5cHQod2xhbmRldmljZV90ICp3bGFuZGV2LCB1OCAqYnVmLCB1OCAqZHN0LCB1MzIgbGVuLCBpbnQga2V5bnVtLAogCQl1OCAqaXYsIHU4ICppY3YpOwogCi1pbnQgd2xhbl9zZXR1cCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworaW50IHdsYW5fc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3QgZGV2aWNlICpwaHlzZGV2KTsKIGludCB3bGFuX3Vuc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KTsKIGludCByZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CiBpbnQgdW5yZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXJlcS5jCmluZGV4IDIwN2YwODBjLi4xNzkxOTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuYwpAQCAtNzIsOSArNzIsOSBAQAogI2luY2x1ZGUgInA4MDIxMW1ldGFzdHJ1Y3QuaCIKICNpbmNsdWRlICJwODAyMTFyZXEuaCIKIAotc3RhdGljIHZvaWQgcDgwMjExcmVxX2hhbmRsZW1zZyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHA4MDIxMW1zZ190ICptc2cpOworc3RhdGljIHZvaWQgcDgwMjExcmVxX2hhbmRsZW1zZyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBwODAyMTFtc2cgKm1zZyk7CiBzdGF0aWMgaW50IHA4MDIxMXJlcV9taWJzZXRfbWliZ2V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKLQkJCQkgICBwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0X3QgKm1pYl9tc2csCisJCQkJICAgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9taWJnZXQgKm1pYl9tc2csCiAJCQkJICAgaW50IGlzZ2V0KTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC05Niw3ICs5Niw3IEBACiBpbnQgcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHU4ICptc2didWYpCiB7CiAJaW50IHJlc3VsdCA9IDA7Ci0JcDgwMjExbXNnX3QgKm1zZyA9IChwODAyMTFtc2dfdCAqKSBtc2didWY7CisJc3RydWN0IHA4MDIxMW1zZyAqbXNnID0gKHN0cnVjdCBwODAyMTFtc2cgKikgbXNnYnVmOwogCiAJLyogQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBNU0QgaXMgcnVubmluZyAqLwogCWlmICghKCh3bGFuZGV2LT5tc2RzdGF0ZSA9PSBXTEFOX01TRF9IV1BSRVNFTlQgJiYKQEAgLTE1MCwxMyArMTUwLDEzIEBACiAqIENhbGwgY29udGV4dDoKICoJUHJvY2VzcyB0aHJlYWQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQgcDgwMjExcmVxX2hhbmRsZW1zZyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHA4MDIxMW1zZ190ICptc2cpCitzdGF0aWMgdm9pZCBwODAyMTFyZXFfaGFuZGxlbXNnKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgc3RydWN0IHA4MDIxMW1zZyAqbXNnKQogewogCXN3aXRjaCAobXNnLT5tc2djb2RlKSB7CiAKIAljYXNlIERJRG1zZ19sbnhyZXFfaG9zdHdlcDp7Ci0JCQlwODAyMTFtc2dfbG54cmVxX2hvc3R3ZXBfdCAqcmVxID0KLQkJCSAgICAocDgwMjExbXNnX2xueHJlcV9ob3N0d2VwX3QgKikgbXNnOworCQkJc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfaG9zdHdlcCAqcmVxID0KKwkJCSAgICAoc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfaG9zdHdlcCAqKSBtc2c7CiAJCQl3bGFuZGV2LT5ob3N0d2VwICY9CiAJCQkgICAgfihIT1NUV0VQX0RFQ1JZUFQgfCBIT1NUV0VQX0VOQ1JZUFQpOwogCQkJaWYgKHJlcS0+ZGVjcnlwdC5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkKQEAgLTE2OSw4ICsxNjksOCBAQAogCWNhc2UgRElEbXNnX2RvdDExcmVxX21pYmdldDoKIAljYXNlIERJRG1zZ19kb3QxMXJlcV9taWJzZXQ6ewogCQkJaW50IGlzZ2V0ID0gKG1zZy0+bXNnY29kZSA9PSBESURtc2dfZG90MTFyZXFfbWliZ2V0KTsKLQkJCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJnZXRfdCAqbWliX21zZyA9Ci0JCQkgICAgKHA4MDIxMW1zZ19kb3QxMXJlcV9taWJnZXRfdCAqKSBtc2c7CisJCQlzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYmdldCAqbWliX21zZyA9CisJCQkgICAgKHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0ICopIG1zZzsKIAkJCXA4MDIxMXJlcV9taWJzZXRfbWliZ2V0KHdsYW5kZXYsIG1pYl9tc2csIGlzZ2V0KTsKIAkJfQogCWRlZmF1bHQ6CkBAIC0xODEsNyArMTgxLDcgQEAKIH0KIAogc3RhdGljIGludCBwODAyMTFyZXFfbWlic2V0X21pYmdldCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCi0JCQkJICAgcDgwMjExbXNnX2RvdDExcmVxX21pYmdldF90ICptaWJfbXNnLAorCQkJCSAgIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0ICptaWJfbXNnLAogCQkJCSAgIGludCBpc2dldCkKIHsKIAlwODAyMTFpdGVtZF90ICptaWJpdGVtID0gKHA4MDIxMWl0ZW1kX3QgKikgbWliX21zZy0+bWliYXR0cmlidXRlLmRhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF3ZXh0LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF3ZXh0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4NzE5NGQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExd2V4dC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY5MCArMCwwIEBACi0vKiBzcmMvcDgwMjExL3A4MDIxMXdleHQuYwotKgotKiBHbHVlIGNvZGUgdG8gbWFrZSBsaW51eC13bGFuLW5nIGEgaGFwcHkgd2lyZWxlc3MgZXh0ZW5zaW9uIGNhbXBlci4KLSoKLSogb3JpZ2luYWwgYXV0aG9yOiAgUmV5ayBGbG9ldGVyIDxyZXlrQHN5bmFjay5kZT4KLSogQ29tcGxldGVseSByZS13cml0dGVuIGJ5IFNvbG9tb24gUGVhY2h5IDxzb2xvbW9uQGxpbnV4LXdsYW4uY29tPgotKgotKiBDb3B5cmlnaHQgKEMpIDIwMDIgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKgotKiBsaW51eC13bGFuCi0qCi0qICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKLSogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQotKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgotKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLwotKgotKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUwotKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKLSogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKLSogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotKgotKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCi0qICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCi0qICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCi0qICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKLSogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQotKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgotKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCi0qICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCi0qICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKLSogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCi0qCi0qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogU3lzdGVtIEluY2x1ZGVzICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgotI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+Ci0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgotCi0jaW5jbHVkZSAicDgwMjExdHlwZXMuaCIKLSNpbmNsdWRlICJwODAyMTFoZHIuaCIKLSNpbmNsdWRlICJwODAyMTFjb252LmgiCi0jaW5jbHVkZSAicDgwMjExbWdtdC5oIgotI2luY2x1ZGUgInA4MDIxMW1zZy5oIgotI2luY2x1ZGUgInA4MDIxMW1ldGFzdHJ1Y3QuaCIKLSNpbmNsdWRlICJwODAyMTFtZXRhZGVmLmgiCi0jaW5jbHVkZSAicDgwMjExbmV0ZGV2LmgiCi0jaW5jbHVkZSAicDgwMjExaW9jdGwuaCIKLSNpbmNsdWRlICJwODAyMTFyZXEuaCIKLQotc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd3JhdGUobmV0ZGV2aWNlX3QgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpOwotc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd2Vzc2lkKG5ldGRldmljZV90ICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmVzc2lkKTsKLQotc3RhdGljIHU4IHA4MDIxMV9taHpfdG9fY2hhbm5lbCh1MTYgbWh6KQotewotCWlmIChtaHogPj0gNTAwMCkKLQkJcmV0dXJuIChtaHogLSA1MDAwKSAvIDU7Ci0KLQlpZiAobWh6ID09IDI0ODQpCi0JCXJldHVybiAxNDsKLQotCWlmIChtaHogPj0gMjQwNykKLQkJcmV0dXJuIChtaHogLSAyNDA3KSAvIDU7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHUxNiBwODAyMTFfY2hhbm5lbF90b19taHoodTggY2gsIGludCBkb3QxMWEpCi17Ci0KLQlpZiAoY2ggPT0gMCkKLQkJcmV0dXJuIDA7Ci0JaWYgKGNoID4gMjAwKQotCQlyZXR1cm4gMDsKLQotCS8qIDVHICovCi0JaWYgKGRvdDExYSkKLQkJcmV0dXJuIDUwMDAgKyAoNSAqIGNoKTsKLQotCS8qIDIuNEcgKi8KLQlpZiAoY2ggPT0gMTQpCi0JCXJldHVybiAyNDg0OwotCi0JaWYgKChjaCA8IDE0KSAmJiAoY2ggPiAwKSkKLQkJcmV0dXJuIDI0MDcgKyAoNSAqIGNoKTsKLQotCXJldHVybiAwOwotfQotCi0vKiB0YWtlbiBmcm9tIG9yaW5vY28uYyA7LSkgKi8KLXN0YXRpYyBjb25zdCBsb25nIHA4MDIxMXdleHRfY2hhbm5lbF9mcmVxW10gPSB7Ci0JMjQxMiwgMjQxNywgMjQyMiwgMjQyNywgMjQzMiwgMjQzNywgMjQ0MiwKLQkyNDQ3LCAyNDUyLCAyNDU3LCAyNDYyLCAyNDY3LCAyNDcyLCAyNDg0Ci19OwotCi0jZGVmaW5lIE5VTV9DSEFOTkVMUyBBUlJBWV9TSVpFKHA4MDIxMXdleHRfY2hhbm5lbF9mcmVxKQotCi0vKiBzdGVhbCBhIHNwYXJlIGJpdCB0byBzdG9yZSB0aGUgc2hhcmVkL29wZW5zeXN0ZW1zIHN0YXRlLgotICAgc2hvdWxkIGRlZmF1bHQgdG8gb3BlbiBpZiBub3Qgc2V0ICovCi0jZGVmaW5lIEhPU1RXRVBfU0hBUkVES0VZIEJJVCgzKQotCi1zdGF0aWMgaW50IHF1YWxfYXNfcGVyY2VudChpbnQgc25yKQotewotCWlmIChzbnIgPD0gMCkKLQkJcmV0dXJuIDA7Ci0JaWYgKHNuciA8PSA0MCkKLQkJcmV0dXJuIHNuciAqIDUgLyAyOwotCXJldHVybiAxMDA7Ci19Ci0KLXN0YXRpYyBpbnQgcDgwMjExd2V4dF9zZXRtaWIod2xhbmRldmljZV90ICp3bGFuZGV2LCB1MzIgZGlkLCB1MzIgZGF0YSkKLXsKLQlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgbXNnOwotCXA4MDIxMWl0ZW1fdWludDMyX3QgKm1pYml0ZW0gPQotCQkocDgwMjExaXRlbV91aW50MzJfdCAqKSZtc2cubWliYXR0cmlidXRlLmRhdGE7Ci0JaW50IHJlc3VsdDsKLQotCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKLQltZW1zZXQobWliaXRlbSwgMCwgc2l6ZW9mKCptaWJpdGVtKSk7Ci0JbWliaXRlbS0+ZGlkID0gZGlkOwotCW1pYml0ZW0tPmRhdGEgPSBkYXRhOwotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICZtc2cpOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoKLSAqIGdldCBhIDMyIGJpdCBtaWIgdmFsdWUKLSAqLwotc3RhdGljIGludCBwODAyMTF3ZXh0X2dldG1pYih3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHUzMiBkaWQsIHUzMiAqZGF0YSkKLXsKLQlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgbXNnOwotCXA4MDIxMWl0ZW1fdWludDMyX3QgKm1pYml0ZW0gPQotCQkocDgwMjExaXRlbV91aW50MzJfdCAqKSZtc2cubWliYXR0cmlidXRlLmRhdGE7Ci0JaW50IHJlc3VsdDsKLQotCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYmdldDsKLQltZW1zZXQobWliaXRlbSwgMCwgc2l6ZW9mKCptaWJpdGVtKSk7Ci0JbWliaXRlbS0+ZGlkID0gZGlkOwotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICZtc2cpOwotCWlmICghcmVzdWx0KQotCQkqZGF0YSA9IG1pYml0ZW0tPmRhdGE7Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW50IHA4MDIxMXdleHRfYXV0b2pvaW4od2xhbmRldmljZV90ICp3bGFuZGV2KQotewotCXA4MDIxMW1zZ19sbnhyZXFfYXV0b2pvaW5fdCBtc2c7Ci0Jc3RydWN0IGl3X3BvaW50IGRhdGE7Ci0JY2hhciBzc2lkW0lXX0VTU0lEX01BWF9TSVpFXTsKLQotCWludCByZXN1bHQ7Ci0JaW50IGVyciA9IDA7Ci0KLQkvKiBHZXQgRVNTSUQgKi8KLQlyZXN1bHQgPSBwODAyMTF3ZXh0X2dpd2Vzc2lkKHdsYW5kZXYtPm5ldGRldiwgTlVMTCwgJmRhdGEsIHNzaWQpOwotCi0JaWYgKHJlc3VsdCkgewotCQllcnIgPSAtRUZBVUxUOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaWYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX1NIQVJFREtFWSkKLQkJbXNnLmF1dGh0eXBlLmRhdGEgPSBQODAyMTFFTlVNX2F1dGhhbGdfc2hhcmVka2V5OwotCWVsc2UKLQkJbXNnLmF1dGh0eXBlLmRhdGEgPSBQODAyMTFFTlVNX2F1dGhhbGdfb3BlbnN5c3RlbTsKLQotCW1zZy5tc2djb2RlID0gRElEbXNnX2xueHJlcV9hdXRvam9pbjsKLQotCS8qIFRyaW0gdGhlIGxhc3QgJ1wwJyB0byBmaXQgdGhlIFNTSUQgZm9ybWF0ICovCi0KLQlpZiAoZGF0YS5sZW5ndGggJiYgc3NpZFtkYXRhLmxlbmd0aCAtIDFdID09ICdcMCcpCi0JCWRhdGEubGVuZ3RoID0gZGF0YS5sZW5ndGggLSAxOwotCi0JbWVtY3B5KG1zZy5zc2lkLmRhdGEuZGF0YSwgc3NpZCwgZGF0YS5sZW5ndGgpOwotCW1zZy5zc2lkLmRhdGEubGVuID0gZGF0YS5sZW5ndGg7Ci0KLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKLQotCWlmIChyZXN1bHQpIHsKLQkJZXJyID0gLUVGQVVMVDsKLQkJZ290byBleGl0OwotCX0KLQotZXhpdDoKLQotCXJldHVybiBlcnI7Ci0KLX0KLQotLyogY2FsbGVkIGJ5IC9wcm9jL25ldC93aXJlbGVzcyAqLwotc3RydWN0IGl3X3N0YXRpc3RpY3MgKnA4MDIxMXdleHRfZ2V0X3dpcmVsZXNzX3N0YXRzKG5ldGRldmljZV90ICpkZXYpCi17Ci0JcDgwMjExbXNnX2xueHJlcV9jb21tc3F1YWxpdHlfdCBxdWFsaXR5OwotCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqd3N0YXRzID0gJndsYW5kZXYtPndzdGF0czsKLQlpbnQgcmV0dmFsOwotCi0JLyogQ2hlY2sgKi8KLQlpZiAoKHdsYW5kZXYgPT0gTlVMTCkgfHwgKHdsYW5kZXYtPm1zZHN0YXRlICE9IFdMQU5fTVNEX1JVTk5JTkcpKQotCQlyZXR1cm4gTlVMTDsKLQotCS8qIFhYWCBPbmx5IHZhbGlkIGluIHN0YXRpb24gbW9kZSAqLwotCXdzdGF0cy0+c3RhdHVzID0gMDsKLQotCS8qIGJ1aWxkIHJlcXVlc3QgbWVzc2FnZSAqLwotCXF1YWxpdHkubXNnY29kZSA9IERJRG1zZ19sbnhyZXFfY29tbXNxdWFsaXR5OwotCXF1YWxpdHkuZGJtLmRhdGEgPSBQODAyMTFFTlVNX3RydXRoX3RydWU7Ci0JcXVhbGl0eS5kYm0uc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwotCi0JLyogc2VuZCBtZXNzYWdlIHRvIG5zZCAqLwotCWlmICh3bGFuZGV2LT5tbG1lcmVxdWVzdCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHZhbCA9IHdsYW5kZXYtPm1sbWVyZXF1ZXN0KHdsYW5kZXYsIChwODAyMTFtc2dfdCAqKSAmcXVhbGl0eSk7Ci0KLQl3c3RhdHMtPnF1YWwucXVhbCA9IHF1YWxfYXNfcGVyY2VudChxdWFsaXR5LmxpbmsuZGF0YSk7CS8qIG92ZXJhbGwgbGluayBxdWFsaXR5ICovCi0Jd3N0YXRzLT5xdWFsLmxldmVsID0gcXVhbGl0eS5sZXZlbC5kYXRhOwkvKiBpbnN0YW50IHNpZ25hbCBsZXZlbCAqLwotCXdzdGF0cy0+cXVhbC5ub2lzZSA9IHF1YWxpdHkubm9pc2UuZGF0YTsJLyogaW5zdGFudCBub2lzZSBsZXZlbCAqLwotCi0Jd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX0FMTF9VUERBVEVEIHwgSVdfUVVBTF9EQk07Ci0Jd3N0YXRzLT5kaXNjYXJkLmNvZGUgPSB3bGFuZGV2LT5yeC5kZWNyeXB0X2VycjsKLQl3c3RhdHMtPmRpc2NhcmQubndpZCA9IDA7Ci0Jd3N0YXRzLT5kaXNjYXJkLm1pc2MgPSAwOwotCi0Jd3N0YXRzLT5kaXNjYXJkLmZyYWdtZW50ID0gMDsJLyogaW5jb21wbGV0ZSBmcmFnbWVudHMgKi8KLQl3c3RhdHMtPmRpc2NhcmQucmV0cmllcyA9IDA7CS8qIHR4IHJldHJpZXMuICovCi0Jd3N0YXRzLT5taXNzLmJlYWNvbiA9IDA7Ci0KLQlyZXR1cm4gd3N0YXRzOwotfQotCi1zdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3bmFtZShuZXRkZXZpY2VfdCAqZGV2LAotCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgIGNoYXIgKm5hbWUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpd19wYXJhbSByYXRlOwotCWludCByZXN1bHQ7Ci0JaW50IGVyciA9IDA7Ci0KLQlyZXN1bHQgPSBwODAyMTF3ZXh0X2dpd3JhdGUoZGV2LCBOVUxMLCAmcmF0ZSwgTlVMTCk7Ci0KLQlpZiAocmVzdWx0KSB7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlzd2l0Y2ggKHJhdGUudmFsdWUpIHsKLQljYXNlIDEwMDAwMDA6Ci0JY2FzZSAyMDAwMDAwOgotCQlzdHJjcHkobmFtZSwgIklFRUUgODAyLjExLURTIik7Ci0JCWJyZWFrOwotCWNhc2UgNTUwMDAwMDoKLQljYXNlIDExMDAwMDAwOgotCQlzdHJjcHkobmFtZSwgIklFRUUgODAyLjExLWIiKTsKLQkJYnJlYWs7Ci0JfQotZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3ZnJlcShuZXRkZXZpY2VfdCAqZGV2LAotCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKLXsKLQl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JaW50IHJlc3VsdDsKLQlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0KLQlyZXN1bHQgPSBwODAyMTF3ZXh0X2dldG1pYih3bGFuZGV2LAotCQkJCSAgIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMUN1cnJlbnRDaGFubmVsLAotCQkJCSAgICZ2YWx1ZSk7Ci0JaWYgKHJlc3VsdCkgewotCQllcnIgPSAtRUZBVUxUOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaWYgKHZhbHVlID4gTlVNX0NIQU5ORUxTKSB7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQkvKiBjb252ZXJ0IGludG8gZnJlcXVlbmN5IGluc3RlYWQgb2YgYSBjaGFubmVsICovCi0JZnJlcS0+ZSA9IDE7Ci0JZnJlcS0+bSA9IHA4MDIxMV9jaGFubmVsX3RvX21oeih2YWx1ZSwgMCkgKiAxMDAwMDA7Ci0KLWV4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBwODAyMTF3ZXh0X3Npd2ZyZXEobmV0ZGV2aWNlX3QgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCi17Ci0Jd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCWludCByZXN1bHQ7Ci0JaW50IGVyciA9IDA7Ci0JdW5zaWduZWQgaW50IHZhbHVlOwotCi0JaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKLQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlpZiAoKGZyZXEtPmUgPT0gMCkgJiYgKGZyZXEtPm0gPD0gMTAwMCkpCi0JCXZhbHVlID0gZnJlcS0+bTsKLQllbHNlCi0JCXZhbHVlID0gcDgwMjExX21oel90b19jaGFubmVsKGZyZXEtPm0pOwotCi0JcmVzdWx0ID0gcDgwMjExd2V4dF9zZXRtaWIod2xhbmRldiwKLQkJCSAgICAgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlX2RvdDExQ3VycmVudENoYW5uZWwsCi0JCQkgICAgIHZhbHVlKTsKLQotCWlmIChyZXN1bHQpIHsKLQkJZXJyID0gLUVGQVVMVDsKLQkJZ290byBleGl0OwotCX0KLQotZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3bW9kZShuZXRkZXZpY2VfdCAqZGV2LAotCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgIF9fdTMyICptb2RlLCBjaGFyICpleHRyYSkKLXsKLQl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0KLQlzd2l0Y2ggKHdsYW5kZXYtPm1hY21vZGUpIHsKLQljYXNlIFdMQU5fTUFDTU9ERV9JQlNTX1NUQToKLQkJKm1vZGUgPSBJV19NT0RFX0FESE9DOwotCQlicmVhazsKLQljYXNlIFdMQU5fTUFDTU9ERV9FU1NfU1RBOgotCQkqbW9kZSA9IElXX01PREVfSU5GUkE7Ci0JCWJyZWFrOwotCWNhc2UgV0xBTl9NQUNNT0RFX0VTU19BUDoKLQkJKm1vZGUgPSBJV19NT0RFX01BU1RFUjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogTm90IHNldCB5ZXQuICovCi0JCSptb2RlID0gSVdfTU9ERV9BVVRPOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHA4MDIxMXdleHRfc2l3bW9kZShuZXRkZXZpY2VfdCAqZGV2LAotCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgIF9fdTMyICptb2RlLCBjaGFyICpleHRyYSkKLXsKLQl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JaW50IHJlc3VsdDsKLQlpbnQgZXJyID0gMDsKLQotCWlmICghd2xhbl93ZXh0X3dyaXRlKSB7Ci0JCWVyciA9IC1FT1BOT1RTVVBQOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaWYgKCptb2RlICE9IElXX01PREVfQURIT0MgJiYgKm1vZGUgIT0gSVdfTU9ERV9JTkZSQSAmJgotCSAgICAqbW9kZSAhPSBJV19NT0RFX01BU1RFUikgewotCQllcnIgPSAoLUVPUE5PVFNVUFApOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JLyogT3BlcmF0aW9uIG1vZGUgaXMgdGhlIHNhbWUgd2l0aCBjdXJyZW50IG1vZGUgKi8KLQlpZiAoKm1vZGUgPT0gd2xhbmRldi0+bWFjbW9kZSkKLQkJZ290byBleGl0OwotCi0Jc3dpdGNoICgqbW9kZSkgewotCWNhc2UgSVdfTU9ERV9BREhPQzoKLQkJd2xhbmRldi0+bWFjbW9kZSA9IFdMQU5fTUFDTU9ERV9JQlNTX1NUQTsKLQkJYnJlYWs7Ci0JY2FzZSBJV19NT0RFX0lORlJBOgotCQl3bGFuZGV2LT5tYWNtb2RlID0gV0xBTl9NQUNNT0RFX0VTU19TVEE7Ci0JCWJyZWFrOwotCWNhc2UgSVdfTU9ERV9NQVNURVI6Ci0JCXdsYW5kZXYtPm1hY21vZGUgPSBXTEFOX01BQ01PREVfRVNTX0FQOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBOb3Qgc2V0IHlldC4gKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiT3BlcmF0aW9uIG1vZGU6ICVkIG5vdCBzdXBwb3J0XG4iLCAqbW9kZSk7Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KLQkvKiBTZXQgT3BlcmF0aW9uIG1vZGUgdG8gdGhlIFBPUlQgVFlQRSBSSUQgKi8KLQlyZXN1bHQgPSBwODAyMTF3ZXh0X3NldG1pYih3bGFuZGV2LAotCQkJCURJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlBvcnRUeXBlLAotCQkJCSgqbW9kZSA9PSBJV19NT0RFX0FESE9DKSA/IDAgOiAxKTsKLQlpZiAocmVzdWx0KQotCQllcnIgPSAtRUZBVUxUOwotZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3cmFuZ2UobmV0ZGV2aWNlX3QgKmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKilleHRyYTsKLQlpbnQgaSwgdmFsOwotCi0JLyogZm9yIGJhY2t3YXJkIGNvbXBhdGFiaWxpdHkgc2V0IHNpemUgYW5kIHplcm8gZXZlcnl0aGluZyB3ZSBkb24ndCB1bmRlcnN0YW5kICovCi0JZGF0YS0+bGVuZ3RoID0gc2l6ZW9mKCpyYW5nZSk7Ci0JbWVtc2V0KHJhbmdlLCAwLCBzaXplb2YoKnJhbmdlKSk7Ci0KLQlyYW5nZS0+dHhwb3dlcl9jYXBhID0gSVdfVFhQT1dfREJNOwotCS8qIFhYWCB3aGF0IGFib3V0IG1pbi9tYXhfcG1wLCBtaW4vbWF4X3BtdCwgZXRjLiAqLwotCi0JcmFuZ2UtPndlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7Ci0JcmFuZ2UtPndlX3ZlcnNpb25fc291cmNlID0gMTM7Ci0KLQlyYW5nZS0+cmV0cnlfY2FwYSA9IElXX1JFVFJZX0xJTUlUOwotCXJhbmdlLT5yZXRyeV9mbGFncyA9IElXX1JFVFJZX0xJTUlUOwotCXJhbmdlLT5taW5fcmV0cnkgPSAwOwotCXJhbmdlLT5tYXhfcmV0cnkgPSAyNTU7Ci0KLQlyYW5nZS0+ZXZlbnRfY2FwYVswXSA9IChJV19FVkVOVF9DQVBBX0tfMCB8CS8qIG1vZGUvZnJlcS9zc2lkICovCi0JCQkJSVdfRVZFTlRfQ0FQQV9NQVNLKFNJT0NHSVdBUCkgfAotCQkJCUlXX0VWRU5UX0NBUEFfTUFTSyhTSU9DR0lXU0NBTikpOwotCXJhbmdlLT5ldmVudF9jYXBhWzFdID0gSVdfRVZFTlRfQ0FQQV9LXzE7CS8qIGVuY29kZSAqLwotCXJhbmdlLT5ldmVudF9jYXBhWzRdID0gKElXX0VWRU5UX0NBUEFfTUFTSyhJV0VWUVVBTCkgfAotCQkJCUlXX0VWRU5UX0NBUEFfTUFTSyhJV0VWQ1VTVE9NKSk7Ci0KLQlyYW5nZS0+bnVtX2NoYW5uZWxzID0gTlVNX0NIQU5ORUxTOwotCi0JLyogWFhYIG5lZWQgdG8gZmlsdGVyIGFnYWluc3QgdGhlIHJlZ3VsYXRvcnkgZG9tYWluICZ8IGFjdGl2ZSBzZXQgKi8KLQl2YWwgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBOVU1fQ0hBTk5FTFM7IGkrKykgewotCQlyYW5nZS0+ZnJlcVt2YWxdLmkgPSBpICsgMTsKLQkJcmFuZ2UtPmZyZXFbdmFsXS5tID0gcDgwMjExd2V4dF9jaGFubmVsX2ZyZXFbaV0gKiAxMDAwMDA7Ci0JCXJhbmdlLT5mcmVxW3ZhbF0uZSA9IDE7Ci0JCXZhbCsrOwotCX0KLQotCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gdmFsOwotCi0JLyogTWF4IG9mIC9wcm9jL25ldC93aXJlbGVzcyAqLwotCXJhbmdlLT5tYXhfcXVhbC5xdWFsID0gMTAwOwotCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IDA7Ci0JcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gMDsKLQlyYW5nZS0+c2Vuc2l0aXZpdHkgPSAzOwotCS8qIFhYWCB0aGVzZSBuZWVkIHRvIGJlIG5zZC1zcGVjaWZpYyEgKi8KLQotCXJhbmdlLT5taW5fcnRzID0gMDsKLQlyYW5nZS0+bWF4X3J0cyA9IDIzNDc7Ci0JcmFuZ2UtPm1pbl9mcmFnID0gMjU2OwotCXJhbmdlLT5tYXhfZnJhZyA9IDIzNDY7Ci0KLQlyYW5nZS0+bWF4X2VuY29kaW5nX3Rva2VucyA9IE5VTV9XRVBLRVlTOwotCXJhbmdlLT5udW1fZW5jb2Rpbmdfc2l6ZXMgPSAyOwotCXJhbmdlLT5lbmNvZGluZ19zaXplWzBdID0gNTsKLQlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVsxXSA9IDEzOwotCi0JLyogWFhYIHdoYXQgYWJvdXQgbnVtX2JpdHJhdGVzL3Rocm91Z2hwdXQ/ICovCi0JcmFuZ2UtPm51bV9iaXRyYXRlcyA9IDA7Ci0KLQkvKiBlc3RpbWF0ZWQgbWF4IHRocm91Z2hwdXQgKi8KLQkvKiBYWFggbmVlZCB0byBjYXAgaXQgaWYgd2UncmUgcnVubmluZyBhdCB+Mk1icHMuLiAqLwotCXJhbmdlLT50aHJvdWdocHV0ID0gNTUwMDAwMDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3YXAobmV0ZGV2aWNlX3QgKmRldiwKLQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgIHN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpCi17Ci0KLQl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0KLQltZW1jcHkoYXBfYWRkci0+c2FfZGF0YSwgd2xhbmRldi0+YnNzaWQsIFdMQU5fQlNTSURfTEVOKTsKLQlhcF9hZGRyLT5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd2VuY29kZShuZXRkZXZpY2VfdCAqZGV2LAotCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJc3RydWN0IGl3X3BvaW50ICplcnEsIGNoYXIgKmtleSkKLXsKLQl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JaW50IGVyciA9IDA7Ci0JaW50IGk7Ci0KLQlpID0gKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKLQllcnEtPmZsYWdzID0gMDsKLQotCWlmICh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9QUklWQUNZSU5WT0tFRCkKLQkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfRU5BQkxFRDsKLQllbHNlCi0JCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0RJU0FCTEVEOwotCi0JaWYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0VYQ0xVREVVTkVOQ1JZUFRFRCkKLQkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfUkVTVFJJQ1RFRDsKLQllbHNlCi0JCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX09QRU47Ci0KLQlpID0gKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKLQotCWlmIChpID09IC0xKQotCQlpID0gd2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfREVGQVVMVEtFWV9NQVNLOwotCi0JaWYgKChpIDwgMCkgfHwgKGkgPj0gTlVNX1dFUEtFWVMpKSB7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQllcnEtPmZsYWdzIHw9IGkgKyAxOwotCi0JLyogY29weSB0aGUga2V5IGZyb20gdGhlIGRyaXZlciBjYWNoZSBhcyB0aGUga2V5cyBhcmUgcmVhZC1vbmx5IE1JQnMgKi8KLQllcnEtPmxlbmd0aCA9IHdsYW5kZXYtPndlcF9rZXlsZW5zW2ldOwotCW1lbWNweShrZXksIHdsYW5kZXYtPndlcF9rZXlzW2ldLCBlcnEtPmxlbmd0aCk7Ci0KLWV4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBwODAyMTF3ZXh0X3Npd2VuY29kZShuZXRkZXZpY2VfdCAqZGV2LAotCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJc3RydWN0IGl3X3BvaW50ICplcnEsIGNoYXIgKmtleSkKLXsKLQl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90IG1zZzsKLQlwODAyMTFpdGVtX3BzdHIzMl90IHBzdHI7Ci0KLQlpbnQgZXJyID0gMDsKLQlpbnQgcmVzdWx0ID0gMDsKLQlpbnQgaTsKLQotCWlmICghd2xhbl93ZXh0X3dyaXRlKSB7Ci0JCWVyciA9ICgtRU9QTk9UU1VQUCk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQkvKiBDaGVjayB0aGUgS2V5IGluZGV4IGZpcnN0LiAqLwotCWkgPSAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCk7Ci0JaWYgKGkpIHsKLQkJaWYgKChpIDwgMSkgfHwgKGkgPiBOVU1fV0VQS0VZUykpIHsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0gZWxzZSB7Ci0JCQlpLS07Ci0JCX0KLQkJLyogU2V0IGN1cnJlbnQga2V5IG51bWJlciBvbmx5IGlmIG5vIGtleXMgYXJlIGdpdmVuICovCi0JCWlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX05PS0VZKSB7Ci0JCQlyZXN1bHQgPQotCQkJCXA4MDIxMXdleHRfc2V0bWliKHdsYW5kZXYsCi0JCQkJCQkgIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXlJRCwKLQkJCQkJCSAgaSk7Ci0KLQkJCWlmIChyZXN1bHQpIHsKLQkJCQllcnIgPSAtRUZBVUxUOwotCQkJCWdvdG8gZXhpdDsKLQkJCX0KLQkJfQotCi0JfSBlbHNlIHsKLQkJLyogVXNlIGRlZmF1bHRrZXkgaWYgbm8gS2V5IEluZGV4ICovCi0JCWkgPSB3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9ERUZBVUxUS0VZX01BU0s7Ci0JfQotCi0JLyogQ2hlY2sgaWYgdGhlcmUgaXMgbm8ga2V5IGluZm9ybWF0aW9uIGluIHRoZSBpd2NvbmZpZyByZXF1ZXN0ICovCi0JaWYgKChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX05PS0VZKSA9PSAwKSB7Ci0KLQkJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkJICogSWYgdGhlcmUgaXMgV0VQIEtleSBmb3Igc2V0dGluZywgY2hlY2sgdGhlIEtleSBJbmZvcm1hdGlvbgotCQkgKiBhbmQgdGhlbiBzZXQgaXQgdG8gdGhlIGZpcm13YXJlLgotCQkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLQkJaWYgKGVycS0+bGVuZ3RoID4gMCkgewotCQkJLyogY29weSB0aGUga2V5IGZyb20gdGhlIGRyaXZlciBjYWNoZSBhcyB0aGUga2V5cyBhcmUgcmVhZC1vbmx5IE1JQnMgKi8KLQkJCXdsYW5kZXYtPndlcF9rZXlsZW5zW2ldID0gZXJxLT5sZW5ndGg7Ci0JCQltZW1jcHkod2xhbmRldi0+d2VwX2tleXNbaV0sIGtleSwgZXJxLT5sZW5ndGgpOwotCi0JCQkvKiBQcmVwYXJlIGRhdGEgc3RydXR1cmUgZm9yIHA4MDIxMXJlcV9kb3JlcXVlc3QuICovCi0JCQltZW1jcHkocHN0ci5kYXRhLmRhdGEsIGtleSwgZXJxLT5sZW5ndGgpOwotCQkJcHN0ci5kYXRhLmxlbiA9IGVycS0+bGVuZ3RoOwotCi0JCQlzd2l0Y2ggKGkpIHsKLQkJCWNhc2UgMDoKLQkJCQlwc3RyLmRpZCA9Ci0JCQkJICAgIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MDsKLQkJCQlicmVhazsKLQotCQkJY2FzZSAxOgotCQkJCXBzdHIuZGlkID0KLQkJCQkgICAgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkxOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDI6Ci0JCQkJcHN0ci5kaWQgPQotCQkJCSAgICBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTI7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMzoKLQkJCQlwc3RyLmRpZCA9Ci0JCQkJICAgIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MzsKLQkJCQlicmVhazsKLQotCQkJZGVmYXVsdDoKLQkJCQllcnIgPSAtRUlOVkFMOwotCQkJCWdvdG8gZXhpdDsKLQkJCX0KLQotCQkJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OwotCQkJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZwc3RyLCBzaXplb2YocHN0cikpOwotCQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJm1zZyk7Ci0KLQkJCWlmIChyZXN1bHQpIHsKLQkJCQllcnIgPSAtRUZBVUxUOwotCQkJCWdvdG8gZXhpdDsKLQkJCX0KLQkJfQotCi0JfQotCi0JLyogQ2hlY2sgdGhlIFByaXZhY3lJbnZva2VkIGZsYWcgKi8KLQlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9ESVNBQkxFRCkgewotCQlyZXN1bHQgPQotCQkgICAgcDgwMjExd2V4dF9zZXRtaWIod2xhbmRldiwKLQkJCQkJIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkLAotCQkJCQkgUDgwMjExRU5VTV90cnV0aF9mYWxzZSk7Ci0JfSBlbHNlIHsKLQkJcmVzdWx0ID0KLQkJICAgIHA4MDIxMXdleHRfc2V0bWliKHdsYW5kZXYsCi0JCQkJCSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFQcml2YWN5SW52b2tlZCwKLQkJCQkJIFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSk7Ci0JfQotCi0JaWYgKHJlc3VsdCkgewotCQllcnIgPSAtRUZBVUxUOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JLyogIFRoZSAgc2VjdXJpdHkgIG1vZGUgIG1heSAgYmUgb3BlbiBvciByZXN0cmljdGVkLCBhbmQgaXRzIG1lYW5pbmcKLQkgICBkZXBlbmRzIG9uIHRoZSBjYXJkIHVzZWQuIFdpdGggIG1vc3QgIGNhcmRzLCAgaW4gIG9wZW4gIG1vZGUgIG5vCi0JICAgYXV0aGVudGljYXRpb24gIGlzICB1c2VkICBhbmQgIHRoZSAgY2FyZCAgbWF5ICBhbHNvICBhY2NlcHQgbm9uLQotCSAgIGVuY3J5cHRlZCBzZXNzaW9ucywgd2hlcmVhcyBpbiByZXN0cmljdGVkICBtb2RlICBvbmx5ICBlbmNyeXB0ZWQKLQkgICBzZXNzaW9ucyAgYXJlICBhY2NlcHRlZCAgYW5kIHRoZSBjYXJkIHdpbGwgdXNlIGF1dGhlbnRpY2F0aW9uIGlmCi0JICAgYXZhaWxhYmxlLgotCSAqLwotCWlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX1JFU1RSSUNURUQpIHsKLQkJcmVzdWx0ID0KLQkJICAgIHA4MDIxMXdleHRfc2V0bWliKHdsYW5kZXYsCi0JCQkJCSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQsCi0JCQkJCSBQODAyMTFFTlVNX3RydXRoX3RydWUpOwotCX0gZWxzZSBpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9PUEVOKSB7Ci0JCXJlc3VsdCA9Ci0JCSAgICBwODAyMTF3ZXh0X3NldG1pYih3bGFuZGV2LAotCQkJCQkgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkLAotCQkJCQkgUDgwMjExRU5VTV90cnV0aF9mYWxzZSk7Ci0JfQotCi0JaWYgKHJlc3VsdCkgewotCQllcnIgPSAtRUZBVUxUOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi1leGl0OgotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd2Vzc2lkKG5ldGRldmljZV90ICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmVzc2lkKQotewotCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQotCWlmICh3bGFuZGV2LT5zc2lkLmxlbikgewotCQlkYXRhLT5sZW5ndGggPSB3bGFuZGV2LT5zc2lkLmxlbjsKLQkJZGF0YS0+ZmxhZ3MgPSAxOwotCQltZW1jcHkoZXNzaWQsIHdsYW5kZXYtPnNzaWQuZGF0YSwgZGF0YS0+bGVuZ3RoKTsKLQkJZXNzaWRbZGF0YS0+bGVuZ3RoXSA9IDA7Ci0JfSBlbHNlIHsKLQkJbWVtc2V0KGVzc2lkLCAwLCBzaXplb2Yod2xhbmRldi0+c3NpZC5kYXRhKSk7Ci0JCWRhdGEtPmxlbmd0aCA9IDA7Ci0JCWRhdGEtPmZsYWdzID0gMDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwODAyMTF3ZXh0X3Npd2Vzc2lkKG5ldGRldmljZV90ICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmVzc2lkKQotewotCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luX3QgbXNnOwotCi0JaW50IHJlc3VsdDsKLQlpbnQgZXJyID0gMDsKLQlpbnQgbGVuZ3RoID0gZGF0YS0+bGVuZ3RoOwotCi0JaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKLQkJZXJyID0gKC1FT1BOT1RTVVBQKTsKLQkJZ290byBleGl0OwotCX0KLQotCWlmICh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9TSEFSRURLRVkpCi0JCW1zZy5hdXRodHlwZS5kYXRhID0gUDgwMjExRU5VTV9hdXRoYWxnX3NoYXJlZGtleTsKLQllbHNlCi0JCW1zZy5hdXRodHlwZS5kYXRhID0gUDgwMjExRU5VTV9hdXRoYWxnX29wZW5zeXN0ZW07Ci0KLQltc2cubXNnY29kZSA9IERJRG1zZ19sbnhyZXFfYXV0b2pvaW47Ci0KLQkvKiBUcmltIHRoZSBsYXN0ICdcMCcgdG8gZml0IHRoZSBTU0lEIGZvcm1hdCAqLwotCWlmIChsZW5ndGggJiYgZXNzaWRbbGVuZ3RoIC0gMV0gPT0gJ1wwJykKLQkJbGVuZ3RoLS07Ci0KLQltZW1jcHkobXNnLnNzaWQuZGF0YS5kYXRhLCBlc3NpZCwgbGVuZ3RoKTsKLQltc2cuc3NpZC5kYXRhLmxlbiA9IGxlbmd0aDsKLQotCXByX2RlYnVnKCJhdXRvam9pbl9zc2lkIGZvciAlcyBcbiIsIGVzc2lkKTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKLQlwcl9kZWJ1ZygiYXV0b2pvaW5fc3NpZCAlZFxuIiwgcmVzdWx0KTsKLQotCWlmIChyZXN1bHQpIHsKLQkJZXJyID0gLUVGQVVMVDsKLQkJZ290byBleGl0OwotCX0KLQotZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHA4MDIxMXdleHRfc2l3Y29tbWl0KG5ldGRldmljZV90ICpkZXYsCi0JCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQlzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmVzc2lkKQotewotCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlpbnQgZXJyID0gMDsKLQotCWlmICghd2xhbl93ZXh0X3dyaXRlKSB7Ci0JCWVyciA9ICgtRU9QTk9UU1VQUCk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQkvKiBBdXRvIEpvaW4gKi8KLQllcnIgPSBwODAyMTF3ZXh0X2F1dG9qb2luKHdsYW5kZXYpOwotCi1leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgcDgwMjExd2V4dF9naXdyYXRlKG5ldGRldmljZV90ICpkZXYsCi0JCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICAgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQotewotCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlpbnQgcmVzdWx0OwotCWludCBlcnIgPSAwOwotCXVuc2lnbmVkIGludCB2YWx1ZTsKLQotCXJlc3VsdCA9IHA4MDIxMXdleHRfZ2V0bWliKHdsYW5kZXYsIERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGUsICZ2YWx1ZSk7Ci0JaWYgKHJlc3VsdCkgewotCQllcnIgPSAtRUZBVUxUOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JcnJxLT5maXhlZCA9IDA7CQkvKiBjYW4gaXQgY2hhbmdlPyAqLwotCXJycS0+ZGlzYWJsZWQgPSAwOwotCXJycS0+dmFsdWUgPSAwOwotCi0jZGVmaW5lCQlIRkEzODR4X1JBVEVCSVRfMQkJCSgodTE2KTEpCi0jZGVmaW5lCQlIRkEzODR4X1JBVEVCSVRfMgkJCSgodTE2KTIpCi0jZGVmaW5lCQlIRkEzODR4X1JBVEVCSVRfNWRvdDUJCQkoKHUxNik0KQotI2RlZmluZQkJSEZBMzg0eF9SQVRFQklUXzExCQkJKCh1MTYpOCkKLQotCXN3aXRjaCAodmFsdWUpIHsKLQljYXNlIEhGQTM4NHhfUkFURUJJVF8xOgotCQlycnEtPnZhbHVlID0gMTAwMDAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBIRkEzODR4X1JBVEVCSVRfMjoKLQkJcnJxLT52YWx1ZSA9IDIwMDAwMDA7Ci0JCWJyZWFrOwotCWNhc2UgSEZBMzg0eF9SQVRFQklUXzVkb3Q1OgotCQlycnEtPnZhbHVlID0gNTUwMDAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBIRkEzODR4X1JBVEVCSVRfMTE6Ci0JCXJycS0+dmFsdWUgPSAxMTAwMDAwMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZXJyID0gLUVJTlZBTDsKLQl9Ci1leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgcDgwMjExd2V4dF9naXdydHMobmV0ZGV2aWNlX3QgKmRldiwKLQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgc3RydWN0IGl3X3BhcmFtICpydHMsIGNoYXIgKmV4dHJhKQotewotCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlpbnQgcmVzdWx0OwotCWludCBlcnIgPSAwOwotCXVuc2lnbmVkIGludCB2YWx1ZTsKLQotCXJlc3VsdCA9IHA4MDIxMXdleHRfZ2V0bWliKHdsYW5kZXYsCi0JCQkJICAgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFSVFNUaHJlc2hvbGQsCi0JCQkJICAgJnZhbHVlKTsKLQlpZiAocmVzdWx0KSB7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlydHMtPnZhbHVlID0gdmFsdWU7Ci0JcnRzLT5kaXNhYmxlZCA9IChydHMtPnZhbHVlID09IDIzNDcpOwotCXJ0cy0+Zml4ZWQgPSAxOwotCi1leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgcDgwMjExd2V4dF9zaXdydHMobmV0ZGV2aWNlX3QgKmRldiwKLQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgc3RydWN0IGl3X3BhcmFtICpydHMsIGNoYXIgKmV4dHJhKQotewotCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlpbnQgcmVzdWx0OwotCWludCBlcnIgPSAwOwotCXVuc2lnbmVkIGludCB2YWx1ZTsKLQotCWlmICghd2xhbl93ZXh0X3dyaXRlKSB7Ci0JCWVyciA9IC1FT1BOT1RTVVBQOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaWYgKHJ0cy0+ZGlzYWJsZWQpCi0JCXZhbHVlID0gMjM0NzsKLQllbHNlCi0JCXZhbHVlID0gcnRzLT52YWx1ZTsKLQotCXJlc3VsdCA9IHA4MDIxMXdleHRfc2V0bWliKHdsYW5kZXYsCi0JCQkJICAgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFSVFNUaHJlc2hvbGQsCi0JCQkJICAgdmFsdWUpOwotCWlmIChyZXN1bHQpIHsKLQkJZXJyID0gLUVGQVVMVDsKLQkJZ290byBleGl0OwotCX0KLQotZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3ZnJhZyhuZXRkZXZpY2VfdCAqZGV2LAotCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgIHN0cnVjdCBpd19wYXJhbSAqZnJhZywgY2hhciAqZXh0cmEpCi17Ci0Jd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCWludCByZXN1bHQ7Ci0JaW50IGVyciA9IDA7Ci0JdW5zaWduZWQgaW50IHZhbHVlOwotCi0JcmVzdWx0ID0gcDgwMjExd2V4dF9nZXRtaWIod2xhbmRldiwKLQkJCQkgICBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUZyYWdtZW50YXRpb25UaHJlc2hvbGQsCi0JCQkJICAgJnZhbHVlKTsKLQlpZiAocmVzdWx0KSB7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlmcmFnLT52YWx1ZSA9IHZhbHVlOwotCWZyYWctPmRpc2FibGVkID0gKGZyYWctPnZhbHVlID09IDIzNDYpOwotCWZyYWctPmZpeGVkID0gMTsKLQotZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHA4MDIxMXdleHRfc2l3ZnJhZyhuZXRkZXZpY2VfdCAqZGV2LAotCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgIHN0cnVjdCBpd19wYXJhbSAqZnJhZywgY2hhciAqZXh0cmEpCi17Ci0Jd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCWludCByZXN1bHQ7Ci0JaW50IGVyciA9IDA7Ci0JaW50IHZhbHVlOwotCi0JaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKLQkJZXJyID0gKC1FT1BOT1RTVVBQKTsKLQkJZ290byBleGl0OwotCX0KLQotCWlmIChmcmFnLT5kaXNhYmxlZCkKLQkJdmFsdWUgPSAyMzQ2OwotCWVsc2UKLQkJdmFsdWUgPSBmcmFnLT52YWx1ZTsKLQotCXJlc3VsdCA9IHA4MDIxMXdleHRfc2V0bWliKHdsYW5kZXYsCi0JCSAgIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExRnJhZ21lbnRhdGlvblRocmVzaG9sZCwKLQkJCQkgICAgICB2YWx1ZSk7Ci0KLQlpZiAocmVzdWx0KSB7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLWV4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotI2lmbmRlZiBJV19SRVRSWV9MT05HCi0jZGVmaW5lIElXX1JFVFJZX0xPTkcgSVdfUkVUUllfTUFYCi0jZW5kaWYKLQotI2lmbmRlZiBJV19SRVRSWV9TSE9SVAotI2RlZmluZSBJV19SRVRSWV9TSE9SVCBJV19SRVRSWV9NSU4KLSNlbmRpZgotCi1zdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3cmV0cnkobmV0ZGV2aWNlX3QgKmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICAgIHN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKLXsKLQl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JaW50IHJlc3VsdDsKLQlpbnQgZXJyID0gMDsKLQl1MTYgc2hvcnRyZXRyeSwgbG9uZ3JldHJ5LCBsaWZldGltZTsKLQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0KLQlyZXN1bHQgPSBwODAyMTF3ZXh0X2dldG1pYih3bGFuZGV2LAotCQkJCSAgIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExU2hvcnRSZXRyeUxpbWl0LAotCQkJCSAgICZ2YWx1ZSk7Ci0JaWYgKHJlc3VsdCkgewotCQllcnIgPSAtRUZBVUxUOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0Jc2hvcnRyZXRyeSA9IHZhbHVlOwotCi0JcmVzdWx0ID0gcDgwMjExd2V4dF9nZXRtaWIod2xhbmRldiwKLQkJCQkgICBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUxvbmdSZXRyeUxpbWl0LAotCQkJCSAgICZ2YWx1ZSk7Ci0JaWYgKHJlc3VsdCkgewotCQllcnIgPSAtRUZBVUxUOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JbG9uZ3JldHJ5ID0gdmFsdWU7Ci0KLQlyZXN1bHQgPSBwODAyMTF3ZXh0X2dldG1pYih3bGFuZGV2LAotCQkJCSAgIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTWF4VHJhbnNtaXRNU0RVTGlmZXRpbWUsCi0JCQkJICAgJnZhbHVlKTsKLQlpZiAocmVzdWx0KSB7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlsaWZldGltZSA9IHZhbHVlOwotCi0JcnJxLT5kaXNhYmxlZCA9IDA7Ci0KLQlpZiAoKHJycS0+ZmxhZ3MgJiBJV19SRVRSWV9UWVBFKSA9PSBJV19SRVRSWV9MSUZFVElNRSkgewotCQlycnEtPmZsYWdzID0gSVdfUkVUUllfTElGRVRJTUU7Ci0JCXJycS0+dmFsdWUgPSBsaWZldGltZSAqIDEwMjQ7Ci0JfSBlbHNlIHsKLQkJaWYgKHJycS0+ZmxhZ3MgJiBJV19SRVRSWV9MT05HKSB7Ci0JCQlycnEtPmZsYWdzID0gSVdfUkVUUllfTElNSVQgfCBJV19SRVRSWV9MT05HOwotCQkJcnJxLT52YWx1ZSA9IGxvbmdyZXRyeTsKLQkJfSBlbHNlIHsKLQkJCXJycS0+ZmxhZ3MgPSBJV19SRVRSWV9MSU1JVDsKLQkJCXJycS0+dmFsdWUgPSBzaG9ydHJldHJ5OwotCQkJaWYgKHNob3J0cmV0cnkgIT0gbG9uZ3JldHJ5KQotCQkJCXJycS0+ZmxhZ3MgfD0gSVdfUkVUUllfU0hPUlQ7Ci0JCX0KLQl9Ci0KLWV4aXQ6Ci0JcmV0dXJuIGVycjsKLQotfQotCi1zdGF0aWMgaW50IHA4MDIxMXdleHRfc2l3cmV0cnkobmV0ZGV2aWNlX3QgKmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICAgIHN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKLXsKLQl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JcDgwMjExaXRlbV91aW50MzJfdCBtaWJpdGVtOwotCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCBtc2c7Ci0JaW50IHJlc3VsdDsKLQlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0KLQlpZiAoIXdsYW5fd2V4dF93cml0ZSkgewotCQllcnIgPSAoLUVPUE5PVFNVUFApOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaWYgKHJycS0+ZGlzYWJsZWQpIHsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBleGl0OwotCX0KLQotCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKLQotCWlmICgocnJxLT5mbGFncyAmIElXX1JFVFJZX1RZUEUpID09IElXX1JFVFJZX0xJRkVUSU1FKSB7Ci0KLQkJdmFsdWUgPSBycnEtPnZhbHVlIC89IDEwMjQ7Ci0JCXJlc3VsdCA9IHA4MDIxMXdleHRfc2V0bWliKHdsYW5kZXYsCi0JCQkJCSAgIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTWF4VHJhbnNtaXRNU0RVTGlmZXRpbWUsCi0JCQkJCSAgIHZhbHVlKTsKLQkJaWYgKHJlc3VsdCkgewotCQkJZXJyID0gLUVGQVVMVDsKLQkJCWdvdG8gZXhpdDsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChycnEtPmZsYWdzICYgSVdfUkVUUllfTE9ORykgewotCQkJcmVzdWx0ID0gcDgwMjExd2V4dF9zZXRtaWIod2xhbmRldiwKLQkJCQkJCSAgIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTG9uZ1JldHJ5TGltaXQsCi0JCQkJCQkgICBycnEtPnZhbHVlKTsKLQotCQkJaWYgKHJlc3VsdCkgewotCQkJCWVyciA9IC1FRkFVTFQ7Ci0JCQkJZ290byBleGl0OwotCQkJfQotCQl9Ci0KLQkJaWYgKHJycS0+ZmxhZ3MgJiBJV19SRVRSWV9TSE9SVCkgewotCQkJcmVzdWx0ID0gcDgwMjExd2V4dF9zZXRtaWIod2xhbmRldiwKLQkJCQkJCSAgIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExU2hvcnRSZXRyeUxpbWl0LAotCQkJCQkJICAgcnJxLT52YWx1ZSk7Ci0KLQkJCWlmIChyZXN1bHQpIHsKLQkJCQllcnIgPSAtRUZBVUxUOwotCQkJCWdvdG8gZXhpdDsKLQkJCX0KLQkJfQotCX0KLQotZXhpdDoKLQlyZXR1cm4gZXJyOwotCi19Ci0KLXN0YXRpYyBpbnQgcDgwMjExd2V4dF9zaXd0eHBvdyhuZXRkZXZpY2VfdCAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICAgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQotewotCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlwODAyMTFpdGVtX3VpbnQzMl90IG1pYml0ZW07Ci0JcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90IG1zZzsKLQlpbnQgcmVzdWx0OwotCWludCBlcnIgPSAwOwotCXVuc2lnbmVkIGludCB2YWx1ZTsKLQotCWlmICghd2xhbl93ZXh0X3dyaXRlKSB7Ci0JCWVyciA9ICgtRU9QTk9UU1VQUCk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlpZiAocnJxLT5maXhlZCA9PSAwKQotCQl2YWx1ZSA9IDMwOwotCWVsc2UKLQkJdmFsdWUgPSBycnEtPnZhbHVlOwotCXJlc3VsdCA9IHA4MDIxMXdleHRfc2V0bWliKHdsYW5kZXYsCi0JCQkJICAgRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExQ3VycmVudFR4UG93ZXJMZXZlbCwKLQkJCQkgICB2YWx1ZSk7Ci0KLQlpZiAocmVzdWx0KSB7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLWV4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd3R4cG93KG5ldGRldmljZV90ICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCi17Ci0Jd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCWludCByZXN1bHQ7Ci0JaW50IGVyciA9IDA7Ci0JdW5zaWduZWQgaW50IHZhbHVlOwotCi0JcmVzdWx0ID0gcDgwMjExd2V4dF9nZXRtaWIod2xhbmRldiwKLQkJCQkgICBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFDdXJyZW50VHhQb3dlckxldmVsLAotCQkJCSAgICZ2YWx1ZSk7Ci0KLQlpZiAocmVzdWx0KSB7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQkvKiBYWFggaGFuZGxlIE9GRiBieSBzZXR0aW5nIGRpc2FibGVkID0gMTsgKi8KLQotCXJycS0+ZmxhZ3MgPSAwOwkJLyogSVdfVFhQT1dfREJNOyAqLwotCXJycS0+ZGlzYWJsZWQgPSAwOwotCXJycS0+Zml4ZWQgPSAwOwotCXJycS0+dmFsdWUgPSB2YWx1ZTsKLQotZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHA4MDIxMXdleHRfc2l3c3B5KG5ldGRldmljZV90ICpkZXYsCi0JCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgIHN0cnVjdCBpd19wb2ludCAqc3JxLCBjaGFyICpleHRyYSkKLXsKLQl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0Jc3RydWN0IHNvY2thZGRyIGFkZHJlc3NbSVdfTUFYX1NQWV07Ci0JaW50IG51bWJlciA9IHNycS0+bGVuZ3RoOwotCWludCBpOwotCi0JLyogQ29weSB0aGUgZGF0YSBmcm9tIHRoZSBpbnB1dCBidWZmZXIgKi8KLQltZW1jcHkoYWRkcmVzcywgZXh0cmEsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpICogbnVtYmVyKTsKLQotCXdsYW5kZXYtPnNweV9udW1iZXIgPSAwOwotCi0JaWYgKG51bWJlciA+IDApIHsKLQotCQkvKiBleHRyYWN0IHRoZSBhZGRyZXNzZXMgKi8KLQkJZm9yIChpID0gMDsgaSA8IG51bWJlcjsgaSsrKSB7Ci0KLQkJCW1lbWNweSh3bGFuZGV2LT5zcHlfYWRkcmVzc1tpXSwgYWRkcmVzc1tpXS5zYV9kYXRhLAotCQkJICAgICAgIEVUSF9BTEVOKTsKLQkJfQotCi0JCS8qIHJlc2V0IHN0YXRzICovCi0JCW1lbXNldCh3bGFuZGV2LT5zcHlfc3RhdCwgMCwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdfcXVhbGl0eSkgKiBJV19NQVhfU1BZKTsKLQotCQkvKiBzZXQgbnVtYmVyIG9mIGFkZHJlc3NlcyAqLwotCQl3bGFuZGV2LT5zcHlfbnVtYmVyID0gbnVtYmVyOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKiBqa3JpZWdsOiBmcm9tIG9yaW5vY28sIG1vZGlmaWVkICovCi1zdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3c3B5KG5ldGRldmljZV90ICpkZXYsCi0JCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgIHN0cnVjdCBpd19wb2ludCAqc3JxLCBjaGFyICpleHRyYSkKLXsKLQl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0KLQlzdHJ1Y3Qgc29ja2FkZHIgYWRkcmVzc1tJV19NQVhfU1BZXTsKLQlzdHJ1Y3QgaXdfcXVhbGl0eSBzcHlfc3RhdFtJV19NQVhfU1BZXTsKLQlpbnQgbnVtYmVyOwotCWludCBpOwotCi0JbnVtYmVyID0gd2xhbmRldi0+c3B5X251bWJlcjsKLQotCWlmIChudW1iZXIgPiAwKSB7Ci0KLQkJLyogcG9wdWxhdGUgYWRkcmVzcyBhbmQgc3B5IHN0cnVjdCdzICovCi0JCWZvciAoaSA9IDA7IGkgPCBudW1iZXI7IGkrKykgewotCQkJbWVtY3B5KGFkZHJlc3NbaV0uc2FfZGF0YSwgd2xhbmRldi0+c3B5X2FkZHJlc3NbaV0sCi0JCQkgICAgICAgRVRIX0FMRU4pOwotCQkJYWRkcmVzc1tpXS5zYV9mYW1pbHkgPSBBRl9VTklYOwotCQkJbWVtY3B5KCZzcHlfc3RhdFtpXSwgJndsYW5kZXYtPnNweV9zdGF0W2ldLAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdfcXVhbGl0eSkpOwotCQl9Ci0KLQkJLyogcmVzZXQgdXBkYXRlIGZsYWcgKi8KLQkJZm9yIChpID0gMDsgaSA8IG51bWJlcjsgaSsrKQotCQkJd2xhbmRldi0+c3B5X3N0YXRbaV0udXBkYXRlZCA9IDA7Ci0JfQotCi0JLyogcHVzaCBzdHVmZiB0byB1c2VyIHNwYWNlICovCi0Jc3JxLT5sZW5ndGggPSBudW1iZXI7Ci0JbWVtY3B5KGV4dHJhLCBhZGRyZXNzLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSAqIG51bWJlcik7Ci0JbWVtY3B5KGV4dHJhICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikgKiBudW1iZXIsIHNweV9zdGF0LAotCSAgICAgICBzaXplb2Yoc3RydWN0IGl3X3F1YWxpdHkpICogbnVtYmVyKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHByaXNtMl9yZXN1bHQyZXJyKGludCBwcmlzbTJfcmVzdWx0KQotewotCWludCBlcnIgPSAwOwotCi0Jc3dpdGNoIChwcmlzbTJfcmVzdWx0KSB7Ci0JY2FzZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOgotCQllcnIgPSAtRUlOVkFMOwotCQlicmVhazsKLQljYXNlIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOgotCQllcnIgPSAtRUlPOwotCQlicmVhazsKLQljYXNlIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOgotCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZXJyID0gMDsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBwODAyMTF3ZXh0X3Npd3NjYW4obmV0ZGV2aWNlX3QgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKnNycSwgY2hhciAqZXh0cmEpCi17Ci0Jd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCXA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3QgbXNnOwotCWludCByZXN1bHQ7Ci0JaW50IGVyciA9IDA7Ci0JaW50IGkgPSAwOwotCi0JaWYgKHdsYW5kZXYtPm1hY21vZGUgPT0gV0xBTl9NQUNNT0RFX0VTU19BUCkgewotCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IHNjYW4gaW4gQVAgbW9kZVxuIik7Ci0JCWVyciA9ICgtRU9QTk9UU1VQUCk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQltZW1zZXQoJm1zZywgMHgwMCwgc2l6ZW9mKHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3QpKTsKLQltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9zY2FuOwotCW1zZy5ic3N0eXBlLmRhdGEgPSBQODAyMTFFTlVNX2Jzc3R5cGVfYW55OwotCi0JbWVtc2V0KCYobXNnLmJzc2lkLmRhdGEpLCAweEZGLCBzaXplb2YocDgwMjExaXRlbV9wc3RyNl90KSk7Ci0JbXNnLmJzc2lkLmRhdGEubGVuID0gNjsKLQotCW1zZy5zY2FudHlwZS5kYXRhID0gUDgwMjExRU5VTV9zY2FudHlwZV9hY3RpdmU7Ci0JbXNnLnByb2JlZGVsYXkuZGF0YSA9IDA7Ci0KLQlmb3IgKGkgPSAxOyBpIDw9IDE0OyBpKyspCi0JCW1zZy5jaGFubmVsbGlzdC5kYXRhLmRhdGFbaSAtIDFdID0gaTsKLQltc2cuY2hhbm5lbGxpc3QuZGF0YS5sZW4gPSAxNDsKLQotCW1zZy5tYXhjaGFubmVsdGltZS5kYXRhID0gMjUwOwotCW1zZy5taW5jaGFubmVsdGltZS5kYXRhID0gMjAwOwotCi0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJm1zZyk7Ci0JaWYgKHJlc3VsdCkKLQkJZXJyID0gcHJpc20yX3Jlc3VsdDJlcnIobXNnLnJlc3VsdGNvZGUuZGF0YSk7Ci0KLWV4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotLyogSGVscGVyIHRvIHRyYW5zbGF0ZSBzY2FuIGludG8gV2lyZWxlc3MgRXh0ZW5zaW9ucyBzY2FuIHJlc3VsdHMuCi0gKiBJbnNwaXJlZCBieSB0aGUgcHJpc201NCBjb2RlLCB3aGljaCB3YXMgaW4gdHVybiBpbnNwaXJlZCBieSB0aGUKLSAqIGFpcm8gZHJpdmVyIGNvZGUuCi0gKi8KLXN0YXRpYyBjaGFyICp3ZXh0X3RyYW5zbGF0ZV9ic3Moc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgY2hhciAqY3VycmVudF9ldiwKLQkJCQljaGFyICplbmRfYnVmLAotCQkJCXA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfdCAqYnNzKQotewotCXN0cnVjdCBpd19ldmVudCBpd2U7CS8qIFRlbXBvcmFyeSBidWZmZXIgKi8KLQotCS8qIFRoZSBmaXJzdCBlbnRyeSBtdXN0IGJlIHRoZSBNQUMgYWRkcmVzcyAqLwotCW1lbWNweShpd2UudS5hcF9hZGRyLnNhX2RhdGEsIGJzcy0+YnNzaWQuZGF0YS5kYXRhLCBXTEFOX0JTU0lEX0xFTik7Ci0JaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0JaXdlLmNtZCA9IFNJT0NHSVdBUDsKLQljdXJyZW50X2V2ID0KLQkgICAgaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKLQkJCQkgSVdfRVZfQUREUl9MRU4pOwotCi0JLyogVGhlIGZvbGxvd2luZyBlbnRyaWVzIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBzYW1lIG9yZGVyIHdlIGdpdmUgdGhlbSAqLwotCi0JLyogVGhlIEVTU0lELiAqLwotCWlmIChic3MtPnNzaWQuZGF0YS5sZW4gPiAwKSB7Ci0JCWNoYXIgZXNzaWRbSVdfRVNTSURfTUFYX1NJWkUgKyAxXTsKLQkJaW50IHNpemU7Ci0KLQkJc2l6ZSA9Ci0JCSAgICBtaW5fdCh1bnNpZ25lZCBzaG9ydCwgSVdfRVNTSURfTUFYX1NJWkUsCi0JCQkgIGJzcy0+c3NpZC5kYXRhLmxlbik7Ci0JCW1lbXNldCgmZXNzaWQsIDAsIHNpemVvZihlc3NpZCkpOwotCQltZW1jcHkoJmVzc2lkLCBic3MtPnNzaWQuZGF0YS5kYXRhLCBzaXplKTsKLQkJcHJfZGVidWcoIiBlc3NpZCBzaXplID0gJWRcbiIsIHNpemUpOwotCQlpd2UudS5kYXRhLmxlbmd0aCA9IHNpemU7Ci0JCWl3ZS51LmRhdGEuZmxhZ3MgPSAxOwotCQlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOwotCQljdXJyZW50X2V2ID0KLQkJICAgIGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJCSAmZXNzaWRbMF0pOwotCQlwcl9kZWJ1ZygiIGVzc2lkIHNpemUgT0suXG4iKTsKLQl9Ci0KLQlzd2l0Y2ggKGJzcy0+YnNzdHlwZS5kYXRhKSB7Ci0JY2FzZSBQODAyMTFFTlVNX2Jzc3R5cGVfaW5mcmFzdHJ1Y3R1cmU6Ci0JCWl3ZS51Lm1vZGUgPSBJV19NT0RFX01BU1RFUjsKLQkJYnJlYWs7Ci0KLQljYXNlIFA4MDIxMUVOVU1fYnNzdHlwZV9pbmRlcGVuZGVudDoKLQkJaXdlLnUubW9kZSA9IElXX01PREVfQURIT0M7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJaXdlLnUubW9kZSA9IDA7Ci0JCWJyZWFrOwotCX0KLQlpd2UuY21kID0gU0lPQ0dJV01PREU7Ci0JaWYgKGl3ZS51Lm1vZGUpCi0JCWN1cnJlbnRfZXYgPQotCQkgICAgaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKLQkJCQkJIElXX0VWX1VJTlRfTEVOKTsKLQotCS8qIEVuY3J5cHRpb24gY2FwYWJpbGl0eSAqLwotCWlmIChic3MtPnByaXZhY3kuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpCi0JCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKLQllbHNlCi0JCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSAwOwotCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOwotCWN1cnJlbnRfZXYgPQotCSAgICBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBOVUxMKTsKLQotCS8qIEFkZCBmcmVxdWVuY3kuIChzaG9ydCkgYnNzLT5jaGFubmVsIGlzIHRoZSBmcmVxdWVuY3kgaW4gTUh6ICovCi0JaXdlLnUuZnJlcS5tID0gYnNzLT5kc2NoYW5uZWwuZGF0YTsKLQlpd2UudS5mcmVxLmUgPSAwOwotCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKLQljdXJyZW50X2V2ID0KLQkgICAgaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKLQkJCQkgSVdfRVZfRlJFUV9MRU4pOwotCi0JLyogQWRkIHF1YWxpdHkgc3RhdGlzdGljcyAqLwotCWl3ZS51LnF1YWwubGV2ZWwgPSBic3MtPnNpZ25hbC5kYXRhOwotCWl3ZS51LnF1YWwubm9pc2UgPSBic3MtPm5vaXNlLmRhdGE7Ci0JLyogZG8gYSBzaW1wbGUgU05SIGZvciBxdWFsaXR5ICovCi0JaXdlLnUucXVhbC5xdWFsID0gcXVhbF9hc19wZXJjZW50KGJzcy0+c2lnbmFsLmRhdGEgLSBic3MtPm5vaXNlLmRhdGEpOwotCWl3ZS5jbWQgPSBJV0VWUVVBTDsKLQljdXJyZW50X2V2ID0KLQkgICAgaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKLQkJCQkgSVdfRVZfUVVBTF9MRU4pOwotCi0JcmV0dXJuIGN1cnJlbnRfZXY7Ci19Ci0KLXN0YXRpYyBpbnQgcDgwMjExd2V4dF9naXdzY2FuKG5ldGRldmljZV90ICpkZXYsCi0JCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICAgc3RydWN0IGl3X3BvaW50ICpzcnEsIGNoYXIgKmV4dHJhKQotewotCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3QgbXNnOwotCWludCByZXN1bHQgPSAwOwotCWludCBlcnIgPSAwOwotCWludCBpID0gMDsKLQlpbnQgc2Nhbl9nb29kID0gMDsKLQljaGFyICpjdXJyZW50X2V2ID0gZXh0cmE7Ci0KLQkvKiBTaW5jZSB3aXJlbGVzcyB0b29scyBkb2Vzbid0IHJlYWxseSBoYXZlIGEgd2F5IG9mIHBhc3NpbmcgaG93Ci0JICogbWFueSBzY2FuIHJlc3VsdHMgcmVzdWx0cyB0aGVyZSB3ZXJlIGJhY2sgaGVyZSwga2VlcCBncmFiYmluZyB0aGVtCi0JICogdW50aWwgd2UgZmFpbC4KLQkgKi8KLQlkbyB7Ci0JCW1lbXNldCgmbXNnLCAwLCBzaXplb2YobXNnKSk7Ci0JCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0czsKLQkJbXNnLmJzc2luZGV4LmRhdGEgPSBpOwotCi0JCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICZtc2cpOwotCQlpZiAoKHJlc3VsdCAhPSAwKSB8fAotCQkgICAgKG1zZy5yZXN1bHRjb2RlLmRhdGEgIT0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3MpKSB7Ci0JCQlicmVhazsKLQkJfQotCi0JCWN1cnJlbnRfZXYgPQotCQkgICAgd2V4dF90cmFuc2xhdGVfYnNzKGluZm8sIGN1cnJlbnRfZXYsCi0JCQkJICAgICAgIGV4dHJhICsgSVdfU0NBTl9NQVhfREFUQSwgJm1zZyk7Ci0JCXNjYW5fZ29vZCA9IDE7Ci0JCWkrKzsKLQl9IHdoaWxlIChpIDwgSVdfTUFYX0FQKTsKLQotCXNycS0+bGVuZ3RoID0gKGN1cnJlbnRfZXYgLSBleHRyYSk7Ci0Jc3JxLT5mbGFncyA9IDA7CQkvKiB0b2RvICovCi0KLQlpZiAocmVzdWx0ICYmICFzY2FuX2dvb2QpCi0JCWVyciA9IHByaXNtMl9yZXN1bHQyZXJyKG1zZy5yZXN1bHRjb2RlLmRhdGEpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotLyogZXh0cmEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBzdHVmZiB0byBzdXBwb3J0IE5ldHdvcmtNYW5hZ2VyIChJIGhvcGUpICovCi0KLS8qIFNJT0NTSVdFTkNPREVFWFQgKi8KLXN0YXRpYyBpbnQgcDgwMjExd2V4dF9zZXRfZW5jb2RlZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7Ci0JcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90IG1zZzsKLQlwODAyMTFpdGVtX3BzdHIzMl90ICpwc3RyOwotCi0JaW50IHJlc3VsdCA9IDA7Ci0Jc3RydWN0IGl3X3BvaW50ICplbmNvZGluZyA9ICZ3cnF1LT5lbmNvZGluZzsKLQlpbnQgaWR4ID0gZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOwotCi0JcHJfZGVidWcoInNldF9lbmNvZGVfZXh0IGZsYWdzWyVkXSBhbGdbJWRdIGtleWxlblslZF1cbiIsCi0JCSBleHQtPmV4dF9mbGFncywgKGludClleHQtPmFsZywgKGludClleHQtPmtleV9sZW4pOwotCi0JaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9HUk9VUF9LRVkpIHsKLQkJLyogc2V0IGRlZmF1bHQga2V5ID8gSSdtIG5vdCBzdXJlIGlmIHRoaXMgdGhlIHRoZSBjb3JyZWN0IHRoaW5nIHRvIGRvIGhlcmUgKi8KLQotCQlpZiAoaWR4KSB7Ci0JCQlpZiAoaWR4IDwgMSB8fCBpZHggPiBOVU1fV0VQS0VZUykKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWVsc2UKLQkJCQlpZHgtLTsKLQkJfQotCQlwcl9kZWJ1Zygic2V0dGluZyBkZWZhdWx0IGtleSAoJWQpXG4iLCBpZHgpOwotCQlyZXN1bHQgPQotCQkgICAgcDgwMjExd2V4dF9zZXRtaWIod2xhbmRldiwKLQkJCQkJIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXlJRCwKLQkJCQkJIGlkeCk7Ci0JCWlmIChyZXN1bHQpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlpZiAoZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX1NFVF9UWF9LRVkpIHsKLQkJaWYgKGV4dC0+YWxnICE9IElXX0VOQ09ERV9BTEdfV0VQKSB7Ci0JCQlwcl9kZWJ1ZygiYXNrZWQgdG8gc2V0IGEgbm9uIHdlcCBrZXkgOihcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJaWYgKGlkeCkgewotCQkJaWYgKGlkeCA8IDEgfHwgaWR4ID4gTlVNX1dFUEtFWVMpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQllbHNlCi0JCQkJaWR4LS07Ci0JCX0KLQkJcHJfZGVidWcoIlNldCBXRVAga2V5ICglZClcbiIsIGlkeCk7Ci0JCXdsYW5kZXYtPndlcF9rZXlsZW5zW2lkeF0gPSBleHQtPmtleV9sZW47Ci0JCW1lbWNweSh3bGFuZGV2LT53ZXBfa2V5c1tpZHhdLCBleHQtPmtleSwgZXh0LT5rZXlfbGVuKTsKLQotCQltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOwotCQlwc3RyID0gKHA4MDIxMWl0ZW1fcHN0cjMyX3QgKikgJm1zZy5taWJhdHRyaWJ1dGUuZGF0YTsKLQkJbWVtY3B5KHBzdHItPmRhdGEuZGF0YSwgZXh0LT5rZXksIGV4dC0+a2V5X2xlbik7Ci0JCXBzdHItPmRhdGEubGVuID0gZXh0LT5rZXlfbGVuOwotCQlzd2l0Y2ggKGlkeCkgewotCQljYXNlIDA6Ci0JCQlwc3RyLT5kaWQgPQotCQkJICAgIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MDsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQlwc3RyLT5kaWQgPQotCQkJICAgIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MTsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlwc3RyLT5kaWQgPQotCQkJICAgIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MjsKLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQlwc3RyLT5kaWQgPQotCQkJICAgIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MzsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQkJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OwotCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKLQkJcHJfZGVidWcoInJlc3VsdCAoJWQpXG4iLCByZXN1bHQpOwotCX0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKiBTSU9DR0lXRU5DT0RFRVhUICovCi1zdGF0aWMgaW50IHA4MDIxMXdleHRfZ2V0X2VuY29kZWV4dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0Jc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOwotCi0Jc3RydWN0IGl3X3BvaW50ICplbmNvZGluZyA9ICZ3cnF1LT5lbmNvZGluZzsKLQlpbnQgcmVzdWx0ID0gMDsKLQlpbnQgbWF4X2xlbjsKLQlpbnQgaWR4OwotCi0JcHJfZGVidWcoImdldF9lbmNvZGVfZXh0IGZsYWdzWyVkXSBhbGdbJWRdIGtleWxlblslZF1cbiIsCi0JCSBleHQtPmV4dF9mbGFncywgKGludClleHQtPmFsZywgKGludClleHQtPmtleV9sZW4pOwotCi0JbWF4X2xlbiA9IGVuY29kaW5nLT5sZW5ndGggLSBzaXplb2YoKmV4dCk7Ci0JaWYgKG1heF9sZW4gPD0gMCkgewotCQlwcl9kZWJ1ZygiZ2V0X2VuY29kZWV4dCBtYXhfbGVuIFslZF0gaW52YWxpZFxuIiwgbWF4X2xlbik7Ci0JCXJlc3VsdCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0JaWR4ID0gZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOwotCi0JcHJfZGVidWcoImdldF9lbmNvZGVfZXh0IGluZGV4IFslZF1cbiIsIGlkeCk7Ci0KLQlpZiAoaWR4KSB7Ci0JCWlmIChpZHggPCAxIHx8IGlkeCA+IE5VTV9XRVBLRVlTKSB7Ci0JCQlwcl9kZWJ1ZygiZ2V0X2VuY29kZV9leHQgaW52YWxpZCBrZXkgaW5kZXggWyVkXVxuIiwKLQkJCQkgaWR4KTsKLQkJCXJlc3VsdCA9IC1FSU5WQUw7Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0KLQkJaWR4LS07Ci0JfSBlbHNlIHsKLQkJLyogZGVmYXVsdCBrZXkgPyBub3Qgc3VyZSB3aGF0IHRvIGRvICovCi0JCS8qIHdpbGwganVzdCB1c2Uga2V5WzBdIGZvciBub3cgISBGSVggTUUgKi8KLQl9Ci0KLQllbmNvZGluZy0+ZmxhZ3MgPSBpZHggKyAxOwotCW1lbXNldChleHQsIDAsIHNpemVvZigqZXh0KSk7Ci0KLQlleHQtPmFsZyA9IElXX0VOQ09ERV9BTEdfV0VQOwotCWV4dC0+a2V5X2xlbiA9IHdsYW5kZXYtPndlcF9rZXlsZW5zW2lkeF07Ci0JbWVtY3B5KGV4dC0+a2V5LCB3bGFuZGV2LT53ZXBfa2V5c1tpZHhdLCBleHQtPmtleV9sZW4pOwotCi0JZW5jb2RpbmctPmZsYWdzIHw9IElXX0VOQ09ERV9FTkFCTEVEOwotZXhpdDoKLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKiBTSU9DU0lXQVVUSCAqLwotc3RhdGljIGludCBwODAyMTFfd2V4dF9zZXRfaXdhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCXN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07Ci0JaW50IHJlc3VsdCA9IDA7Ci0KLQlwcl9kZWJ1Zygic2V0X2l3YXV0aCBmbGFnc1slZF1cbiIsIChpbnQpcGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCk7Ci0KLQlzd2l0Y2ggKHBhcmFtLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKLQljYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDoKLQkJcHJfZGVidWcoImRyb3BfdW5lbmNyeXB0ZWQgJWRcbiIsIHBhcmFtLT52YWx1ZSk7Ci0JCWlmIChwYXJhbS0+dmFsdWUpCi0JCQlyZXN1bHQgPQotCQkJICAgIHA4MDIxMXdleHRfc2V0bWliKHdsYW5kZXYsCi0JCQkJCQkgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkLAotCQkJCQkJIFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSk7Ci0JCWVsc2UKLQkJCXJlc3VsdCA9Ci0JCQkgICAgcDgwMjExd2V4dF9zZXRtaWIod2xhbmRldiwKLQkJCQkJCSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQsCi0JCQkJCQkgUDgwMjExRU5VTV90cnV0aF9mYWxzZSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRDoKLQkJcHJfZGVidWcoInByaXZhY3kgaW52b2tlZCAlZFxuIiwgcGFyYW0tPnZhbHVlKTsKLQkJaWYgKHBhcmFtLT52YWx1ZSkKLQkJCXJlc3VsdCA9Ci0JCQkgICAgcDgwMjExd2V4dF9zZXRtaWIod2xhbmRldiwKLQkJCQkJCSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFQcml2YWN5SW52b2tlZCwKLQkJCQkJCSBQODAyMTFFTlVNX3RydXRoX3RydWUpOwotCQllbHNlCi0JCQlyZXN1bHQgPQotCQkJICAgIHA4MDIxMXdleHRfc2V0bWliKHdsYW5kZXYsCi0JCQkJCQkgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExUHJpdmFjeUludm9rZWQsCi0JCQkJCQkgUDgwMjExRU5VTV90cnV0aF9mYWxzZSk7Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6Ci0JCWlmIChwYXJhbS0+dmFsdWUgJiBJV19BVVRIX0FMR19PUEVOX1NZU1RFTSkgewotCQkJcHJfZGVidWcoInNldCBvcGVuX3N5c3RlbVxuIik7Ci0JCQl3bGFuZGV2LT5ob3N0d2VwICY9IH5IT1NUV0VQX1NIQVJFREtFWTsKLQkJfSBlbHNlIGlmIChwYXJhbS0+dmFsdWUgJiBJV19BVVRIX0FMR19TSEFSRURfS0VZKSB7Ci0JCQlwcl9kZWJ1Zygic2V0IHNoYXJlZCBrZXlcbiIpOwotCQkJd2xhbmRldi0+aG9zdHdlcCB8PSBIT1NUV0VQX1NIQVJFREtFWTsKLQkJfSBlbHNlIHsKLQkJCS8qIGRvbid0IGtub3cgd2hhdCB0byBkbyBrbm93ICAqLwotCQkJcHJfZGVidWcoInVua25vd24gQVVUSF9BTEcgKCVkKVxuIiwgcGFyYW0tPnZhbHVlKTsKLQkJCXJlc3VsdCA9IC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKiBTSU9DU0lXQVVUSCAqLwotc3RhdGljIGludCBwODAyMTFfd2V4dF9nZXRfaXdhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCXN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07Ci0JaW50IHJlc3VsdCA9IDA7Ci0KLQlwcl9kZWJ1ZygiZ2V0X2l3YXV0aCBmbGFnc1slZF1cbiIsIChpbnQpcGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCk7Ci0KLQlzd2l0Y2ggKHBhcmFtLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKLQljYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDoKLQkJcGFyYW0tPnZhbHVlID0KLQkJICAgIHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0VYQ0xVREVVTkVOQ1JZUFRFRCA/IDEgOiAwOwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQ6Ci0JCXBhcmFtLT52YWx1ZSA9Ci0JCSAgICB3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9QUklWQUNZSU5WT0tFRCA/IDEgOiAwOwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKLQkJcGFyYW0tPnZhbHVlID0KLQkJICAgIHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX1NIQVJFREtFWSA/Ci0JCSAgICBJV19BVVRIX0FMR19TSEFSRURfS0VZIDogSVdfQVVUSF9BTEdfT1BFTl9TWVNURU07Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotI2RlZmluZSBJV19JT0NUTCh4KSBbKHgpLVNJT0NTSVdDT01NSVRdCi0KLXN0YXRpYyBpd19oYW5kbGVyIHA4MDIxMXdleHRfaGFuZGxlcnNbXSA9IHsKLQlJV19JT0NUTChTSU9DU0lXQ09NTUlUKSA9IChpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd2NvbW1pdCwKLQlJV19JT0NUTChTSU9DR0lXTkFNRSkgPSAoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXduYW1lLAotLyogU0lPQ1NJV05XSUQsU0lPQ0dJV05XSUQgKi8KLQlJV19JT0NUTChTSU9DU0lXRlJFUSkgPSAoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdmcmVxLAotCUlXX0lPQ1RMKFNJT0NHSVdGUkVRKSA9IChpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd2ZyZXEsCi0JSVdfSU9DVEwoU0lPQ1NJV01PREUpID0gKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3bW9kZSwKLQlJV19JT0NUTChTSU9DR0lXTU9ERSkgPSAoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdtb2RlLAotLyogU0lPQ1NJV1NFTlMsU0lPQ0dJV1NFTlMsU0lPQ1NJV1JBTkdFICovCi0JSVdfSU9DVEwoU0lPQ0dJV1JBTkdFKSA9IChpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd3JhbmdlLAotLyogU0lPQ1NJV1BSSVYsU0lPQ0dJV1BSSVYsU0lPQ1NJV1NUQVRTLFNJT0NHSVdTVEFUUyAqLwotCUlXX0lPQ1RMKFNJT0NTSVdTUFkpID0gKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3c3B5LAotCUlXX0lPQ1RMKFNJT0NHSVdTUFkpID0gKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3c3B5LAotLyogU0lPQ1NJV0FQICovCi0JSVdfSU9DVEwoU0lPQ0dJV0FQKSA9IChpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd2FwLAotLyogU0lPQ0dJV0FQTElTVCAqLwotCUlXX0lPQ1RMKFNJT0NTSVdTQ0FOKSA9IChpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd3NjYW4sCi0JSVdfSU9DVEwoU0lPQ0dJV1NDQU4pID0gKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3c2NhbiwKLQlJV19JT0NUTChTSU9DU0lXRVNTSUQpID0gKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3ZXNzaWQsCi0JSVdfSU9DVEwoU0lPQ0dJV0VTU0lEKSA9IChpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd2Vzc2lkLAotLyogU0lPQ1NJV05JQ0tOICovCi0JSVdfSU9DVEwoU0lPQ0dJV05JQ0tOKSA9IChpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd2Vzc2lkLAotLyogU0lPQ1NJV1JBVEUgKi8KLQlJV19JT0NUTChTSU9DR0lXUkFURSkgPSAoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdyYXRlLAotCUlXX0lPQ1RMKFNJT0NTSVdSVFMpID0gKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3cnRzLAotCUlXX0lPQ1RMKFNJT0NHSVdSVFMpID0gKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3cnRzLAotCUlXX0lPQ1RMKFNJT0NTSVdGUkFHKSA9IChpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd2ZyYWcsCi0JSVdfSU9DVEwoU0lPQ0dJV0ZSQUcpID0gKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3ZnJhZywKLQlJV19JT0NUTChTSU9DU0lXVFhQT1cpID0gKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3dHhwb3csCi0JSVdfSU9DVEwoU0lPQ0dJV1RYUE9XKSA9IChpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd3R4cG93LAotCUlXX0lPQ1RMKFNJT0NTSVdSRVRSWSkgPSAoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdyZXRyeSwKLQlJV19JT0NUTChTSU9DR0lXUkVUUlkpID0gKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3cmV0cnksCi0JSVdfSU9DVEwoU0lPQ1NJV0VOQ09ERSkgPSAoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdlbmNvZGUsCi0JSVdfSU9DVEwoU0lPQ0dJV0VOQ09ERSkgPSAoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdlbmNvZGUsCi0vKiBTSU9DU0lXUE9XRVIsU0lPQ0dJV1BPV0VSICovCi0vKiBXUEEgb3BlcmF0aW9ucyAqLwotLyogU0lPQ1NJV0dFTklFLFNJT0NHSVdHRU5JRSBnZW5lcmljIElFICovCi0JSVdfSU9DVEwoU0lPQ1NJV0FVVEgpID0gKGl3X2hhbmRsZXIpIHA4MDIxMV93ZXh0X3NldF9pd2F1dGgsIC8qc2V0IGF1dGhlbnRpY2F0aW9uIG1vZGUgcGFyYW1zICovCi0JSVdfSU9DVEwoU0lPQ0dJV0FVVEgpID0gKGl3X2hhbmRsZXIpIHA4MDIxMV93ZXh0X2dldF9pd2F1dGgsIC8qZ2V0IGF1dGhlbnRpY2F0aW9uIG1vZGUgcGFyYW1zICovCi0JSVdfSU9DVEwoU0lPQ1NJV0VOQ09ERUVYVCkgPSAoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zZXRfZW5jb2RlZXh0LCAvKnNldCBlbmNvZGluZyB0b2tlbiAmIG1vZGUgKi8KLQlJV19JT0NUTChTSU9DR0lXRU5DT0RFRVhUKSA9IChpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dldF9lbmNvZGVleHQsIC8qZ2V0IGVuY29kaW5nIHRva2VuICYgbW9kZSAqLwotLyogU0lPQ1NJV1BNS1NBICAgICAgUE1LU0EgY2FjaGUgb3BlcmF0aW9uICovCi19OwotCi1zdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgcDgwMjExd2V4dF9oYW5kbGVyX2RlZiA9IHsKLQkubnVtX3N0YW5kYXJkID0gQVJSQVlfU0laRShwODAyMTF3ZXh0X2hhbmRsZXJzKSwKLQkuc3RhbmRhcmQgPSBwODAyMTF3ZXh0X2hhbmRsZXJzLAotCS5nZXRfd2lyZWxlc3Nfc3RhdHMgPSBwODAyMTF3ZXh0X2dldF93aXJlbGVzc19zdGF0cwotfTsKLQotaW50IHA4MDIxMXdleHRfZXZlbnRfYXNzb2NpYXRlZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGludCBhc3NvYykKLXsKLQl1bmlvbiBpd3JlcV9kYXRhIGRhdGE7Ci0KLQkvKiBTZW5kIHRoZSBhc3NvY2lhdGlvbiBzdGF0ZSBmaXJzdCAqLwotCWRhdGEuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0JaWYgKGFzc29jKQotCQltZW1jcHkoZGF0YS5hcF9hZGRyLnNhX2RhdGEsIHdsYW5kZXYtPmJzc2lkLCBFVEhfQUxFTik7Ci0JZWxzZQotCQltZW1zZXQoZGF0YS5hcF9hZGRyLnNhX2RhdGEsIDAsIEVUSF9BTEVOKTsKLQotCWlmICh3bGFuX3dleHRfd3JpdGUpCi0JCXdpcmVsZXNzX3NlbmRfZXZlbnQod2xhbmRldi0+bmV0ZGV2LCBTSU9DR0lXQVAsICZkYXRhLCBOVUxMKTsKLQotCWlmICghYXNzb2MpCi0JCWdvdG8gZG9uZTsKLQotCS8qIFhYWCBzZW5kIGFzc29jaWF0aW9uIGRhdGEsIGxpa2UgSUVzLCBldGMgZXRjLiAqLwotCi1kb25lOgotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yZncuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMmZ3LmMKaW5kZXggZDIwYzg3OS4uZmQ1ZGRiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yZncuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJmdy5jCkBAIC03MywyNiArNzMsMjYgQEAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBMb2NhbCBUeXBlcyAqLwogCi10eXBlZGVmIHN0cnVjdCBzM2RhdGFyZWMgeworc3RydWN0IHMzZGF0YXJlYyB7CiAJdTMyIGxlbjsKIAl1MzIgYWRkcjsKIAl1OCBjaGVja3N1bTsKIAl1OCAqZGF0YTsKLX0gczNkYXRhcmVjX3Q7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBzM3BsdWdyZWMgeworc3RydWN0IHMzcGx1Z3JlYyB7CiAJdTMyIGl0ZW1jb2RlOwogCXUzMiBhZGRyOwogCXUzMiBsZW47Ci19IHMzcGx1Z3JlY190OworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgczNjcmNyZWMgeworc3RydWN0IHMzY3JjcmVjIHsKIAl1MzIgYWRkcjsKIAl1MzIgbGVuOwogCXVuc2lnbmVkIGludCBkb3dyaXRlOwotfSBzM2NyY3JlY190OworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgczNpbmZvcmVjIHsKK3N0cnVjdCBzM2luZm9yZWMgewogCXUxNiBsZW47CiAJdTE2IHR5cGU7CiAJdW5pb24gewpAQCAtMTAxLDIwICsxMDEsMjAgQEAKIAkJdTE2IGJ1aWxkc2VxOwogCQloZmEzODR4X2NvbXBpZGVudF90IHBsYXRmb3JtOwogCX0gaW5mbzsKLX0gczNpbmZvcmVjX3Q7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBwZGEgeworc3RydWN0IHBkYSB7CiAJdTggYnVmW0hGQTM4NHhfUERBX0xFTl9NQVhdOwogCWhmYTM4NHhfcGRyZWNfdCAqcmVjW0hGQTM4NHhfUERBX1JFQ1NfTUFYXTsKIAl1bnNpZ25lZCBpbnQgbnJlYzsKLX0gcGRhX3Q7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBpbWdjaHVuayB7CitzdHJ1Y3QgaW1nY2h1bmsgewogCXUzMiBhZGRyOwkvKiBzdGFydCBhZGRyZXNzICovCiAJdTMyIGxlbjsJLyogaW4gYnl0ZXMgKi8KIAl1MTYgY3JjOwkvKiBDUkMgdmFsdWUgKGlmIGl0IGZhbGxzIGF0IGEgY2h1bmsgYm91bmRhcnkpICovCiAJdTggKmRhdGE7Ci19IGltZ2NodW5rX3Q7Cit9OwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogTG9jYWwgU3RhdGljIERlZmluaXRpb25zICovCkBAIC0xMjQsMjYgKzEyNCwyNiBAQAogCiAvKiBEYXRhIHJlY29yZHMgKi8KIHVuc2lnbmVkIGludCBuczNkYXRhOwotczNkYXRhcmVjX3QgczNkYXRhW1MzREFUQV9NQVhdOworc3RydWN0IHMzZGF0YXJlYyBzM2RhdGFbUzNEQVRBX01BWF07CiAKIC8qIFBsdWcgcmVjb3JkcyAqLwogdW5zaWduZWQgaW50IG5zM3BsdWc7Ci1zM3BsdWdyZWNfdCBzM3BsdWdbUzNQTFVHX01BWF07CitzdHJ1Y3QgczNwbHVncmVjIHMzcGx1Z1tTM1BMVUdfTUFYXTsKIAogLyogQ1JDIHJlY29yZHMgKi8KIHVuc2lnbmVkIGludCBuczNjcmM7Ci1zM2NyY3JlY190IHMzY3JjW1MzQ1JDX01BWF07CitzdHJ1Y3QgczNjcmNyZWMgczNjcmNbUzNDUkNfTUFYXTsKIAogLyogSW5mbyByZWNvcmRzICovCiB1bnNpZ25lZCBpbnQgbnMzaW5mbzsKLXMzaW5mb3JlY190IHMzaW5mb1tTM0lORk9fTUFYXTsKK3N0cnVjdCBzM2luZm9yZWMgczNpbmZvW1MzSU5GT19NQVhdOwogCiAvKiBTNyByZWNvcmQgKHRoZXJlIF9iZXR0ZXJfIGJlIG9ubHkgb25lKSAqLwogdTMyIHN0YXJ0YWRkcjsKIAogLyogTG9hZCBpbWFnZSBjaHVua3MgKi8KIHVuc2lnbmVkIGludCBuZmNodW5rczsKLWltZ2NodW5rX3QgZmNodW5rW0NIVU5LU19NQVhdOworc3RydWN0IGltZ2NodW5rIGZjaHVua1tDSFVOS1NfTUFYXTsKIAogLyogTm90ZSB0aGF0IGZvciB0aGUgZm9sbG93aW5nIHBkcmVjX3QgYXJyYXlzLCB0aGUgbGVuIGFuZCBjb2RlICovCiAvKiAgIGZpZWxkcyBhcmUgc3RvcmVkIGluIEhPU1QgYnl0ZSBvcmRlci4gVGhlIG1rcGRybGlzdCgpIGZ1bmN0aW9uICovCkBAIC0xNTEsNyArMTUxLDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQREEsIGJ1aWx0IGZyb20gW2NhcmR8bmV3ZmlsZV0rW2FkZGZpbGUxK2FkZGZpbGUyLi4uXSAqLwogCi1wZGFfdCBwZGE7CitzdHJ1Y3QgcGRhIHBkYTsKIGhmYTM4NHhfY29tcGlkZW50X3QgbmljaWQ7CiBoZmEzODR4X2NhcGxldmVsX3QgcmZpZDsKIGhmYTM4NHhfY2FwbGV2ZWxfdCBtYWNpZDsKQEAgLTE2NSwyMSArMTY1LDIxIEBACiAKIHN0YXRpYyBpbnQgcmVhZF9md2ZpbGUoY29uc3Qgc3RydWN0IGloZXhfYmlucmVjICpyZnB0cik7CiAKLXN0YXRpYyBpbnQgbWtpbWFnZShpbWdjaHVua190ICpjbGlzdCwgdW5zaWduZWQgaW50ICpjY250KTsKK3N0YXRpYyBpbnQgbWtpbWFnZShzdHJ1Y3QgaW1nY2h1bmsgKmNsaXN0LCB1bnNpZ25lZCBpbnQgKmNjbnQpOwogCi1zdGF0aWMgaW50IHJlYWRfY2FyZHBkYShwZGFfdCAqcGRhLCB3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworc3RhdGljIGludCByZWFkX2NhcmRwZGEoc3RydWN0IHBkYSAqcGRhLCB3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwogCi1zdGF0aWMgaW50IG1rcGRybGlzdChwZGFfdCAqcGRhKTsKK3N0YXRpYyBpbnQgbWtwZHJsaXN0KHN0cnVjdCBwZGEgKnBkYSk7CiAKLXN0YXRpYyBpbnQgcGx1Z2ltYWdlKGltZ2NodW5rX3QgKmZjaHVuaywgdW5zaWduZWQgaW50IG5mY2h1bmtzLAotCSAgICAgIHMzcGx1Z3JlY190ICpzM3BsdWcsIHVuc2lnbmVkIGludCBuczNwbHVnLCBwZGFfdCAqIHBkYSk7CitzdGF0aWMgaW50IHBsdWdpbWFnZShzdHJ1Y3QgaW1nY2h1bmsgKmZjaHVuaywgdW5zaWduZWQgaW50IG5mY2h1bmtzLAorCSAgICAgIHN0cnVjdCBzM3BsdWdyZWMgKnMzcGx1ZywgdW5zaWduZWQgaW50IG5zM3BsdWcsIHN0cnVjdCBwZGEgKiBwZGEpOwogCi1zdGF0aWMgaW50IGNyY2ltYWdlKGltZ2NodW5rX3QgKmZjaHVuaywgdW5zaWduZWQgaW50IG5mY2h1bmtzLAotCSAgICAgczNjcmNyZWNfdCAqczNjcmMsIHVuc2lnbmVkIGludCBuczNjcmMpOworc3RhdGljIGludCBjcmNpbWFnZShzdHJ1Y3QgaW1nY2h1bmsgKmZjaHVuaywgdW5zaWduZWQgaW50IG5mY2h1bmtzLAorCSAgICAgc3RydWN0IHMzY3JjcmVjICpzM2NyYywgdW5zaWduZWQgaW50IG5zM2NyYyk7CiAKLXN0YXRpYyBpbnQgd3JpdGVpbWFnZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGltZ2NodW5rX3QgKmZjaHVuaywKK3N0YXRpYyBpbnQgd3JpdGVpbWFnZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBpbWdjaHVuayAqZmNodW5rLAogCSAgICAgICB1bnNpZ25lZCBpbnQgbmZjaHVua3MpOwotc3RhdGljIHZvaWQgZnJlZV9jaHVua3MoaW1nY2h1bmtfdCAqZmNodW5rLCB1bnNpZ25lZCBpbnQgKm5mY2h1bmtzKTsKK3N0YXRpYyB2b2lkIGZyZWVfY2h1bmtzKHN0cnVjdCBpbWdjaHVuayAqZmNodW5rLCB1bnNpZ25lZCBpbnQgKm5mY2h1bmtzKTsKIAogc3RhdGljIHZvaWQgZnJlZV9zcmVjcyh2b2lkKTsKIApAQCAtMjM5LDcgKzIzOSw3IEBACiBpbnQgcHJpc20yX2Z3YXBwbHkoY29uc3Qgc3RydWN0IGloZXhfYmlucmVjICpyZnB0ciwgd2xhbmRldmljZV90ICp3bGFuZGV2KQogewogCXNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKLQlwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0X3QgZ2V0bXNnOworCXN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0IGdldG1zZzsKIAlwODAyMTFpdGVtZF90ICppdGVtOwogCXUzMiAqZGF0YTsKIApAQCAtMzc1LDggKzM3NSw4IEBACiAqCTAJc3VjY2VzcwogKgl+MAlmYWlsdXJlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWludCBjcmNpbWFnZShpbWdjaHVua190ICpmY2h1bmssIHVuc2lnbmVkIGludCBuZmNodW5rcywgczNjcmNyZWNfdCAqczNjcmMsCi0JICAgICB1bnNpZ25lZCBpbnQgbnMzY3JjKQoraW50IGNyY2ltYWdlKHN0cnVjdCBpbWdjaHVuayAqZmNodW5rLCB1bnNpZ25lZCBpbnQgbmZjaHVua3MsCisJICAgICBzdHJ1Y3QgczNjcmNyZWMgKnMzY3JjLCB1bnNpZ25lZCBpbnQgbnMzY3JjKQogewogCWludCByZXN1bHQgPSAwOwogCWludCBpOwpAQCAtMzk3LDE1ICszOTcsMTQgQEAKIAkJZm9yIChjID0gMDsgYyA8IG5mY2h1bmtzOyBjKyspIHsKIAkJCWNzdGFydCA9IGZjaHVua1tjXS5hZGRyOwogCQkJY2VuZCA9IGZjaHVua1tjXS5hZGRyICsgZmNodW5rW2NdLmxlbjsKLQkJCS8qICB0aGUgbGluZSBiZWxvdyBkb2VzIGFuIGFkZHJlc3MgJiBsZW4gbWF0Y2ggc2VhcmNoICovCi0JCQkvKiAgdW5mb3J0dW5hdGVseSwgSSd2ZSBmb3VuZCB0aGF0IHRoZSBsZW4gZmllbGRzIG9mICovCi0JCQkvKiAgc29tZSBjcmMgcmVjb3JkcyBkb24ndCBtYXRjaCB3aXRoIHRoZSBsZW5ndGggb2YgKi8KLQkJCS8qICB0aGUgYWN0dWFsIGRhdGEsIHNvIHdlJ3JlIG5vdCBjaGVja2luZyByaWdodCAqLwotCQkJLyogIG5vdyAqLwotCQkJLyogaWYgKCBjcmNzdGFydC0yID49IGNzdGFydCAmJiBjcmNlbmQgPD0gY2VuZCApIGJyZWFrOyAqLworCQkJLyogdGhlIGxpbmUgYmVsb3cgZG9lcyBhbiBhZGRyZXNzICYgbGVuIG1hdGNoIHNlYXJjaCAqLworCQkJLyogdW5mb3J0dW5hdGVseSwgSSd2ZSBmb3VuZCB0aGF0IHRoZSBsZW4gZmllbGRzIG9mICovCisJCQkvKiBzb21lIGNyYyByZWNvcmRzIGRvbid0IG1hdGNoIHdpdGggdGhlIGxlbmd0aCBvZiAqLworCQkJLyogdGhlIGFjdHVhbCBkYXRhLCBzbyB3ZSdyZSBub3QgY2hlY2tpbmcgcmlnaHQgbm93ICovCisJCQkvKiBpZiAoY3Jjc3RhcnQtMiA+PSBjc3RhcnQgJiYgY3JjZW5kIDw9IGNlbmQpIGJyZWFrOyAqLwogCiAJCQkvKiBub3RlIHRoZSAtMiBiZWxvdywgaXQncyB0byBtYWtlIHN1cmUgdGhlIGNodW5rIGhhcyAqLwotCQkJLyogICBzcGFjZSBmb3IgdGhlIENSQyB2YWx1ZSAqLworCQkJLyogc3BhY2UgZm9yIHRoZSBDUkMgdmFsdWUgKi8KIAkJCWlmIChjcmNzdGFydCAtIDIgPj0gY3N0YXJ0ICYmIGNyY3N0YXJ0IDwgY2VuZCkKIAkJCQlicmVhazsKIAkJfQpAQCAtNDQwLDcgKzQzOSw3IEBACiAqIFJldHVybnM6CiAqCW5vdGhpbmcKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdm9pZCBmcmVlX2NodW5rcyhpbWdjaHVua190ICpmY2h1bmssIHVuc2lnbmVkIGludCAqbmZjaHVua3MpCit2b2lkIGZyZWVfY2h1bmtzKHN0cnVjdCBpbWdjaHVuayAqZmNodW5rLCB1bnNpZ25lZCBpbnQgKm5mY2h1bmtzKQogewogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCAqbmZjaHVua3M7IGkrKykgewpAQCAtNDkwLDcgKzQ4OSw3IEBACiAqCTAJLSBzdWNjZXNzCiAqCX4wCS0gZmFpbHVyZSAocHJvYmFibHkgYW4gZXJybm8pCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWludCBta2ltYWdlKGltZ2NodW5rX3QgKmNsaXN0LCB1bnNpZ25lZCBpbnQgKmNjbnQpCitpbnQgbWtpbWFnZShzdHJ1Y3QgaW1nY2h1bmsgKmNsaXN0LCB1bnNpZ25lZCBpbnQgKmNjbnQpCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAJaW50IGk7CkBAIC01ODMsNyArNTgyLDcgQEAKICoJMAktIHN1Y2Nlc3MKICoJfjAJLSBmYWlsdXJlIChwcm9iYWJseSBhbiBlcnJubykKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotaW50IG1rcGRybGlzdChwZGFfdCAqcGRhKQoraW50IG1rcGRybGlzdChzdHJ1Y3QgcGRhICpwZGEpCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAJdTE2ICpwZGExNiA9ICh1MTYgKikgcGRhLT5idWY7CkBAIC02NTYsOCArNjU1LDggQEAKICoJMAlzdWNjZXNzCiAqCX4wCWZhaWx1cmUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotaW50IHBsdWdpbWFnZShpbWdjaHVua190ICpmY2h1bmssIHVuc2lnbmVkIGludCBuZmNodW5rcywKLQkgICAgICBzM3BsdWdyZWNfdCAqczNwbHVnLCB1bnNpZ25lZCBpbnQgbnMzcGx1ZywgcGRhX3QgKiBwZGEpCitpbnQgcGx1Z2ltYWdlKHN0cnVjdCBpbWdjaHVuayAqZmNodW5rLCB1bnNpZ25lZCBpbnQgbmZjaHVua3MsCisJICAgICAgc3RydWN0IHMzcGx1Z3JlYyAqczNwbHVnLCB1bnNpZ25lZCBpbnQgbnMzcGx1Zywgc3RydWN0IHBkYSAqIHBkYSkKIHsKIAlpbnQgcmVzdWx0ID0gMDsKIAlpbnQgaTsJCQkvKiBwbHVnIGluZGV4ICovCkBAIC02NzUsNyArNjc0LDcgQEAKIAkJcHN0YXJ0ID0gczNwbHVnW2ldLmFkZHI7CiAJCXBlbmQgPSBzM3BsdWdbaV0uYWRkciArIHMzcGx1Z1tpXS5sZW47CiAJCS8qIGZpbmQgdGhlIG1hdGNoaW5nIFBEUiAob3IgZmlsZW5hbWUpICovCi0JCWlmIChzM3BsdWdbaV0uaXRlbWNvZGUgIT0gMHhmZmZmZmZmZlVMKSB7CS8qIG5vdCBmaWxlbmFtZSAqLworCQlpZiAoczNwbHVnW2ldLml0ZW1jb2RlICE9IDB4ZmZmZmZmZmZVTCkgeyAvKiBub3QgZmlsZW5hbWUgKi8KIAkJCWZvciAoaiA9IDA7IGogPCBwZGEtPm5yZWM7IGorKykgewogCQkJCWlmIChzM3BsdWdbaV0uaXRlbWNvZGUgPT0KIAkJCQkgICAgbGUxNl90b19jcHUocGRhLT5yZWNbal0tPmNvZGUpKQpAQCAtNjg0LDcgKzY4Myw3IEBACiAJCX0gZWxzZSB7CiAJCQlqID0gLTE7CiAJCX0KLQkJaWYgKGogPj0gcGRhLT5ucmVjICYmIGogIT0gLTEpIHsJLyogIGlmIG5vIG1hdGNoaW5nIFBEUiwgZmFpbCAqLworCQlpZiAoaiA+PSBwZGEtPm5yZWMgJiYgaiAhPSAtMSkgeyAvKiAgaWYgbm8gbWF0Y2hpbmcgUERSLCBmYWlsICovCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkgICAgICAgIndhcm5pbmc6IEZhaWxlZCB0byBmaW5kIFBEUiBmb3IgIgogCQkJICAgICAgICJwbHVncmVjIDB4JTA0eC5cbiIsIHMzcGx1Z1tpXS5pdGVtY29kZSk7CkBAIC03NjQsMTAgKzc2MywxMCBAQAogKgkwCS0gc3VjY2VzcwogKgl+MAktIGZhaWx1cmUgKHByb2JhYmx5IGFuIGVycm5vKQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1pbnQgcmVhZF9jYXJkcGRhKHBkYV90ICpwZGEsIHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK2ludCByZWFkX2NhcmRwZGEoc3RydWN0IHBkYSAqcGRhLCB3bGFuZGV2aWNlX3QgKndsYW5kZXYpCiB7CiAJaW50IHJlc3VsdCA9IDA7Ci0JcDgwMjExbXNnX3AycmVxX3JlYWRwZGFfdCBtc2c7CisJc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9yZWFkcGRhIG1zZzsKIAogCS8qIHNldCB1cCB0aGUgbXNnICovCiAJbXNnLm1zZ2NvZGUgPSBESURtc2dfcDJyZXFfcmVhZHBkYTsKQEAgLTgzOSw3ICs4MzgsNyBAQAogKiAgICAgICAgICAgICAgICBzc3NzdHR0dGRkLi5kZAogKiAgICAgICAgICAgICAgICBzIC0gU2l6ZSBpbiB3b3JkcyAobGl0dGxlIGVuZGlhbikKICogICAgICAgICAgICAgICAgdCAtIEluZm8gdHlwZSAobGl0dGxlIGVuZGlhbiksIHNlZSAjZGVmaW5lcyBhbmQKLSogICAgICAgICAgICAgICAgICAgIHMzaW5mb3JlY190IGZvciBkZXRhaWxzIGFib3V0IHR5cGVzLgorKiAgICAgICAgICAgICAgICAgICAgc3RydWN0IHMzaW5mb3JlYyBmb3IgZGV0YWlscyBhYm91dCB0eXBlcy4KICogICAgICAgICAgICAgICAgZCAtIChzIC0gMSkgbGl0dGxlIGVuZGlhbiB3b3JkcyBnaXZpbmcgdGhlIGNvbnRlbnRzIG9mCiAqICAgICAgICAgICAgICAgICAgICB0aGUgZ2l2ZW4gaW5mbyB0eXBlLgogKgpAQCAtOTc4LDEzICs5NzcsMTMgQEAKICoJMAlzdWNjZXNzCiAqCX4wCWZhaWx1cmUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotaW50IHdyaXRlaW1hZ2Uod2xhbmRldmljZV90ICp3bGFuZGV2LCBpbWdjaHVua190ICpmY2h1bmssCitpbnQgd3JpdGVpbWFnZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBpbWdjaHVuayAqZmNodW5rLAogCSAgICAgICB1bnNpZ25lZCBpbnQgbmZjaHVua3MpCiB7CiAJaW50IHJlc3VsdCA9IDA7Ci0JcDgwMjExbXNnX3AycmVxX3JhbWRsX3N0YXRlX3QgcnN0YXRlbXNnOwotCXA4MDIxMW1zZ19wMnJlcV9yYW1kbF93cml0ZV90IHJ3cml0ZW1zZzsKLQlwODAyMTFtc2dfdCAqbXNncDsKKwlzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JhbWRsX3N0YXRlIHJzdGF0ZW1zZzsKKwlzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JhbWRsX3dyaXRlIHJ3cml0ZW1zZzsKKwlzdHJ1Y3QgcDgwMjExbXNnICptc2dwOwogCXUzMiByZXN1bHRjb2RlOwogCWludCBpOwogCWludCBqOwpAQCAtMTAzMCw3ICsxMDI5LDcgQEAKIAlyc3RhdGVtc2cuZW5hYmxlLmRhdGEgPSBQODAyMTFFTlVNX3RydXRoX3RydWU7CiAJcnN0YXRlbXNnLmV4ZWFkZHIuZGF0YSA9IHN0YXJ0YWRkcjsKIAotCW1zZ3AgPSAocDgwMjExbXNnX3QgKikgJnJzdGF0ZW1zZzsKKwltc2dwID0gKHN0cnVjdCBwODAyMTFtc2cgKikgJnJzdGF0ZW1zZzsKIAlyZXN1bHQgPSBwcmlzbTJtZ210X3JhbWRsX3N0YXRlKHdsYW5kZXYsIG1zZ3ApOwogCWlmIChyZXN1bHQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCkBAIC0xMDUyLDExICsxMDUxLDEyIEBACiAJCW53cml0ZXMgKz0gKGZjaHVua1tpXS5sZW4gJSBXUklURVNJWkVfTUFYKSA/IDEgOiAwOwogCQljdXJyb2ZmID0gMDsKIAkJZm9yIChqID0gMDsgaiA8IG53cml0ZXM7IGorKykgewotCQkJY3VycmxlbiA9Ci0JCQkgICAgKGZjaHVua1tpXS5sZW4gLSAoV1JJVEVTSVpFX01BWCAqIGopKSA+Ci0JCQkgICAgV1JJVEVTSVpFX01BWCA/IFdSSVRFU0laRV9NQVggOiAoZmNodW5rW2ldLmxlbiAtCi0JCQkJCQkJICAgICAoV1JJVEVTSVpFX01BWCAqCi0JCQkJCQkJICAgICAgaikpOworCQkJLyogVE9ETyBNb3ZlIHRoaXMgdG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiAqLworCQkJaW50IGxlbmxlZnQgPSBmY2h1bmtbaV0ubGVuIC0gKFdSSVRFU0laRV9NQVggKiBqKTsKKwkJCWlmIChmY2h1bmtbaV0ubGVuID4gV1JJVEVTSVpFX01BWCkKKwkJCQljdXJybGVuID0gV1JJVEVTSVpFX01BWDsKKwkJCWVsc2UKKwkJCQljdXJybGVuID0gbGVubGVmdDsKIAkJCWN1cnJvZmYgPSBqICogV1JJVEVTSVpFX01BWDsKIAkJCWN1cnJkYWRkciA9IGZjaHVua1tpXS5hZGRyICsgY3Vycm9mZjsKIAkJCS8qIFNldHVwIHRoZSBtZXNzYWdlICovCkBAIC0xMDcwLDcgKzEwNzAsNyBAQAogCQkJICAgICgiU2VuZGluZyB4eHhkbF93cml0ZSBtZXNzYWdlIGFkZHI9JTA2eCBsZW49JWQuXG4iLAogCQkJICAgICBjdXJyZGFkZHIsIGN1cnJsZW4pOwogCi0JCQltc2dwID0gKHA4MDIxMW1zZ190ICopICZyd3JpdGVtc2c7CisJCQltc2dwID0gKHN0cnVjdCBwODAyMTFtc2cgKikgJnJ3cml0ZW1zZzsKIAkJCXJlc3VsdCA9IHByaXNtMm1nbXRfcmFtZGxfd3JpdGUod2xhbmRldiwgbXNncCk7CiAKIAkJCS8qIENoZWNrIHRoZSByZXN1bHRzICovCkBAIC0xMDk3LDcgKzEwOTcsNyBAQAogCXJzdGF0ZW1zZy5lbmFibGUuZGF0YSA9IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U7CiAJcnN0YXRlbXNnLmV4ZWFkZHIuZGF0YSA9IDA7CiAKLQltc2dwID0gKHA4MDIxMW1zZ190ICopICZyc3RhdGVtc2c7CisJbXNncCA9IChzdHJ1Y3QgcDgwMjExbXNnICopICZyc3RhdGVtc2c7CiAJcmVzdWx0ID0gcHJpc20ybWdtdF9yYW1kbF9zdGF0ZSh3bGFuZGV2LCBtc2dwKTsKIAlpZiAocmVzdWx0KSB7CiAJCXByaW50ayhLRVJOX0VSUgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWdtdC5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWdtdC5jCmluZGV4IDRkMWNkZmMuLjA0NTE0YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtZ210LmMKQEAgLTExNyw3ICsxMTcsNyBAQAogewogCWludCByZXN1bHQgPSAwOwogCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OwotCXA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3QgKm1zZyA9IG1zZ3A7CisJc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuICptc2cgPSBtc2dwOwogCXUxNiByb2FtaW5nbW9kZSwgd29yZDsKIAlpbnQgaSwgdGltZW91dDsKIAlpbnQgaXN0bXBlbmFibGUgPSAwOwpAQCAtMzYxLDEzICszNjEsMTMgQEAKIGludCBwcmlzbTJtZ210X3NjYW5fcmVzdWx0cyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCiB7CiAJaW50IHJlc3VsdCA9IDA7Ci0JcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c190ICpyZXE7CisJc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHMgKnJlcTsKIAloZmEzODR4X3QgKmh3ID0gd2xhbmRldi0+cHJpdjsKIAloZmEzODR4X0hTY2FuUmVzdWx0U3ViX3QgKml0ZW0gPSBOVUxMOwogCiAJaW50IGNvdW50OwogCi0JcmVxID0gKHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfdCAqKSBtc2dwOworCXJlcSA9IChzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0cyAqKSBtc2dwOwogCiAJcmVxLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKIApAQCAtNDYzLDYgKzQ2Myw4IEBACiAKIAkvKiBjYXBpbmZvIGJpdHMgKi8KIAljb3VudCA9IGxlMTZfdG9fY3B1KGl0ZW0tPmNhcGluZm8pOworCXJlcS0+Y2FwaW5mby5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJcmVxLT5jYXBpbmZvLmRhdGEgPSBjb3VudDsKIAogCS8qIHByaXZhY3kgZmxhZyAqLwogCXJlcS0+cHJpdmFjeS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CkBAIC01MTEsNyArNTEzLDcgQEAKIHsKIAlpbnQgcmVzdWx0ID0gMDsKIAloZmEzODR4X3QgKmh3ID0gd2xhbmRldi0+cHJpdjsKLQlwODAyMTFtc2dfZG90MTFyZXFfc3RhcnRfdCAqbXNnID0gbXNncDsKKwlzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX3N0YXJ0ICptc2cgPSBtc2dwOwogCiAJcDgwMjExcHN0cmRfdCAqcHN0cjsKIAl1OCBieXRlYnVmWzgwXTsKQEAgLTY4Nyw3ICs2ODksNyBAQAogaW50IHByaXNtMm1nbXRfcmVhZHBkYSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCiB7CiAJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7Ci0JcDgwMjExbXNnX3AycmVxX3JlYWRwZGFfdCAqbXNnID0gbXNncDsKKwlzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JlYWRwZGEgKm1zZyA9IG1zZ3A7CiAJaW50IHJlc3VsdDsKIAogCS8qIFdlIG9ubHkgc3VwcG9ydCBjb2xsZWN0aW5nIHRoZSBQREEgd2hlbiBpbiB0aGUgRldMT0FECkBAIC03NTMsNyArNzU1LDcgQEAKIGludCBwcmlzbTJtZ210X3JhbWRsX3N0YXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKIHsKIAloZmEzODR4X3QgKmh3ID0gd2xhbmRldi0+cHJpdjsKLQlwODAyMTFtc2dfcDJyZXFfcmFtZGxfc3RhdGVfdCAqbXNnID0gbXNncDsKKwlzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JhbWRsX3N0YXRlICptc2cgPSBtc2dwOwogCiAJaWYgKHdsYW5kZXYtPm1zZHN0YXRlICE9IFdMQU5fTVNEX0ZXTE9BRCkgewogCQlwcmludGsoS0VSTl9FUlIKQEAgLTgwOSw3ICs4MTEsNyBAQAogaW50IHByaXNtMm1nbXRfcmFtZGxfd3JpdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQogewogCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OwotCXA4MDIxMW1zZ19wMnJlcV9yYW1kbF93cml0ZV90ICptc2cgPSBtc2dwOworCXN0cnVjdCBwODAyMTFtc2dfcDJyZXFfcmFtZGxfd3JpdGUgKm1zZyA9IG1zZ3A7CiAJdTMyIGFkZHI7CiAJdTMyIGxlbjsKIAl1OCAqYnVmOwpAQCAtODcyLDcgKzg3NCw3IEBACiB7CiAJaW50IHJlc3VsdCA9IDA7CiAJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7Ci0JcDgwMjExbXNnX3AycmVxX2ZsYXNoZGxfc3RhdGVfdCAqbXNnID0gbXNncDsKKwlzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX2ZsYXNoZGxfc3RhdGUgKm1zZyA9IG1zZ3A7CiAKIAlpZiAod2xhbmRldi0+bXNkc3RhdGUgIT0gV0xBTl9NU0RfRldMT0FEKSB7CiAJCXByaW50ayhLRVJOX0VSUgpAQCAtOTQyLDcgKzk0NCw3IEBACiBpbnQgcHJpc20ybWdtdF9mbGFzaGRsX3dyaXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKIHsKIAloZmEzODR4X3QgKmh3ID0gd2xhbmRldi0+cHJpdjsKLQlwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF93cml0ZV90ICptc2cgPSBtc2dwOworCXN0cnVjdCBwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF93cml0ZSAqbXNnID0gbXNncDsKIAl1MzIgYWRkcjsKIAl1MzIgbGVuOwogCXU4ICpidWY7CkBAIC0xMDA2LDcgKzEwMDgsNyBAQAogCWludCByZXN1bHQgPSAwOwogCXUxNiByZWc7CiAJdTE2IHBvcnRfdHlwZTsKLQlwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luX3QgKm1zZyA9IG1zZ3A7CisJc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfYXV0b2pvaW4gKm1zZyA9IG1zZ3A7CiAJcDgwMjExcHN0cmRfdCAqcHN0cjsKIAl1OCBieXRlYnVmWzI1Nl07CiAJaGZhMzg0eF9ieXRlc3RyX3QgKnAyYnl0ZXN0ciA9IChoZmEzODR4X2J5dGVzdHJfdCAqKSBieXRlYnVmOwpAQCAtMTA3NCw3ICsxMDc2LDcgQEAKIGludCBwcmlzbTJtZ210X3dsYW5zbmlmZih3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCiB7CiAJaW50IHJlc3VsdCA9IDA7Ci0JcDgwMjExbXNnX2xueHJlcV93bGFuc25pZmZfdCAqbXNnID0gbXNncDsKKwlzdHJ1Y3QgcDgwMjExbXNnX2xueHJlcV93bGFuc25pZmYgKm1zZyA9IG1zZ3A7CiAKIAloZmEzODR4X3QgKmh3ID0gd2xhbmRldi0+cHJpdjsKIAl1MTYgd29yZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1pYi5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWliLmMKaW5kZXggMGIwZWM5Yy4uZDNhMDZmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWliLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWliLmMKQEAgLTc5LDcgKzc5LDcgQEAKICNkZWZpbmUgIEZfUkVBRCAgICAgICAweDIJLyogTUlCIG1heSBiZSByZWFkLiAqLwogI2RlZmluZSAgRl9XUklURSAgICAgIDB4NAkvKiBNSUIgbWF5IGJlIHdyaXR0ZW4uICovCiAKLXR5cGVkZWYgc3RydWN0IG1pYnJlYyB7CitzdHJ1Y3QgbWlicmVjIHsKIAl1MzIgZGlkOwogCXUxNiBmbGFnOwogCXUxNiBwYXJtMTsKQEAgLTg5LDYzICs4OSw2MyBAQAogCQkgICAgIGludCBpc2dldCwKIAkJICAgICB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCiAJCSAgICAgaGZhMzg0eF90ICpodywKLQkJICAgICBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgKm1zZywgdm9pZCAqZGF0YSk7Ci19IG1pYnJlY190OworCQkgICAgIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0ICptc2csIHZvaWQgKmRhdGEpOworfTsKIAotc3RhdGljIGludCBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0cihtaWJyZWNfdCAqbWliLAorc3RhdGljIGludCBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0cihzdHJ1Y3QgbWlicmVjICptaWIsCiAJCQkJICAgaW50IGlzZ2V0LAogCQkJCSAgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKIAkJCQkgICBoZmEzODR4X3QgKmh3LAotCQkJCSAgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLAorCQkJCSAgIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0ICptc2csCiAJCQkJICAgdm9pZCAqZGF0YSk7CiAKLXN0YXRpYyBpbnQgcHJpc20ybWliX3VpbnQzMihtaWJyZWNfdCAqbWliLAorc3RhdGljIGludCBwcmlzbTJtaWJfdWludDMyKHN0cnVjdCBtaWJyZWMgKm1pYiwKIAkJCSAgICBpbnQgaXNnZXQsCiAJCQkgICAgd2xhbmRldmljZV90ICp3bGFuZGV2LAogCQkJICAgIGhmYTM4NHhfdCAqaHcsCi0JCQkgICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csIHZvaWQgKmRhdGEpOworCQkJICAgIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0ICptc2csIHZvaWQgKmRhdGEpOwogCi1zdGF0aWMgaW50IHByaXNtMm1pYl9mbGFnKG1pYnJlY190ICptaWIsCitzdGF0aWMgaW50IHByaXNtMm1pYl9mbGFnKHN0cnVjdCBtaWJyZWMgKm1pYiwKIAkJCSAgaW50IGlzZ2V0LAogCQkJICB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCiAJCQkgIGhmYTM4NHhfdCAqaHcsCi0JCQkgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLCB2b2lkICpkYXRhKTsKKwkJCSAgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXQgKm1zZywgdm9pZCAqZGF0YSk7CiAKLXN0YXRpYyBpbnQgcHJpc20ybWliX3dlcGRlZmF1bHRrZXkobWlicmVjX3QgKm1pYiwKK3N0YXRpYyBpbnQgcHJpc20ybWliX3dlcGRlZmF1bHRrZXkoc3RydWN0IG1pYnJlYyAqbWliLAogCQkJCSAgIGludCBpc2dldCwKIAkJCQkgICB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCiAJCQkJICAgaGZhMzg0eF90ICpodywKLQkJCQkgICBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgKm1zZywKKwkJCQkgICBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldCAqbXNnLAogCQkJCSAgIHZvaWQgKmRhdGEpOwogCi1zdGF0aWMgaW50IHByaXNtMm1pYl9wcml2YWN5aW52b2tlZChtaWJyZWNfdCAqbWliLAorc3RhdGljIGludCBwcmlzbTJtaWJfcHJpdmFjeWludm9rZWQoc3RydWN0IG1pYnJlYyAqbWliLAogCQkJCSAgICBpbnQgaXNnZXQsCiAJCQkJICAgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKIAkJCQkgICAgaGZhMzg0eF90ICpodywKLQkJCQkgICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csCisJCQkJICAgIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0ICptc2csCiAJCQkJICAgIHZvaWQgKmRhdGEpOwogCi1zdGF0aWMgaW50IHByaXNtMm1pYl9leGNsdWRldW5lbmNyeXB0ZWQobWlicmVjX3QgKm1pYiwKK3N0YXRpYyBpbnQgcHJpc20ybWliX2V4Y2x1ZGV1bmVuY3J5cHRlZChzdHJ1Y3QgbWlicmVjICptaWIsCiAJCQkJCWludCBpc2dldCwKIAkJCQkJd2xhbmRldmljZV90ICp3bGFuZGV2LAogCQkJCQloZmEzODR4X3QgKmh3LAotCQkJCQlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgKm1zZywKKwkJCQkJc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXQgKm1zZywKIAkJCQkJdm9pZCAqZGF0YSk7CiAKLXN0YXRpYyBpbnQgcHJpc20ybWliX2ZyYWdtZW50YXRpb250aHJlc2hvbGQobWlicmVjX3QgKm1pYiwKK3N0YXRpYyBpbnQgcHJpc20ybWliX2ZyYWdtZW50YXRpb250aHJlc2hvbGQoc3RydWN0IG1pYnJlYyAqbWliLAogCQkJCQkgICAgaW50IGlzZ2V0LAogCQkJCQkgICAgd2xhbmRldmljZV90ICp3bGFuZGV2LAogCQkJCQkgICAgaGZhMzg0eF90ICpodywKLQkJCQkJICAgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLAorCQkJCQkgICAgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXQgKm1zZywKIAkJCQkJICAgIHZvaWQgKmRhdGEpOwogCi1zdGF0aWMgaW50IHByaXNtMm1pYl9wcml2KG1pYnJlY190ICptaWIsCitzdGF0aWMgaW50IHByaXNtMm1pYl9wcml2KHN0cnVjdCBtaWJyZWMgKm1pYiwKIAkJCSAgaW50IGlzZ2V0LAogCQkJICB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCiAJCQkgIGhmYTM4NHhfdCAqaHcsCi0JCQkgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLCB2b2lkICpkYXRhKTsKKwkJCSAgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXQgKm1zZywgdm9pZCAqZGF0YSk7CiAKLXN0YXRpYyBtaWJyZWNfdCBtaWJ0YWJbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgbWlicmVjIG1pYnRhYltdID0gewogCiAJLyogZG90MTFzbXQgTUlCJ3MgKi8KIAl7RElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkwLApAQCAtMjYxLDExICsyNjEsMTEgQEAKIHsKIAloZmEzODR4X3QgKmh3ID0gd2xhbmRldi0+cHJpdjsKIAlpbnQgcmVzdWx0LCBpc2dldDsKLQltaWJyZWNfdCAqbWliOworCXN0cnVjdCBtaWJyZWMgKm1pYjsKIAogCXUxNiB3aGljaDsKIAotCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnID0gbXNncDsKKwlzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldCAqbXNnID0gbXNncDsKIAlwODAyMTFpdGVtZF90ICptaWJpdGVtOwogCiAJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKQEAgLTM3MSwxMSArMzcxLDExIEBACiAqCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0cihtaWJyZWNfdCAqbWliLAorc3RhdGljIGludCBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0cihzdHJ1Y3QgbWlicmVjICptaWIsCiAJCQkJICAgaW50IGlzZ2V0LAogCQkJCSAgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKIAkJCQkgICBoZmEzODR4X3QgKmh3LAotCQkJCSAgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLAorCQkJCSAgIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0ICptc2csCiAJCQkJICAgdm9pZCAqZGF0YSkKIHsKIAlpbnQgcmVzdWx0OwpAQCAtNDIxLDExICs0MjEsMTEgQEAKICoKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IHByaXNtMm1pYl91aW50MzIobWlicmVjX3QgKm1pYiwKK3N0YXRpYyBpbnQgcHJpc20ybWliX3VpbnQzMihzdHJ1Y3QgbWlicmVjICptaWIsCiAJCQkgICAgaW50IGlzZ2V0LAogCQkJICAgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKIAkJCSAgICBoZmEzODR4X3QgKmh3LAotCQkJICAgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLCB2b2lkICpkYXRhKQorCQkJICAgIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0ICptc2csIHZvaWQgKmRhdGEpCiB7CiAJaW50IHJlc3VsdDsKIAl1MzIgKnVpbnQzMiA9ICh1MzIgKikgZGF0YTsKQEAgLTQ2OCwxMSArNDY4LDExIEBACiAqCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBwcmlzbTJtaWJfZmxhZyhtaWJyZWNfdCAqbWliLAorc3RhdGljIGludCBwcmlzbTJtaWJfZmxhZyhzdHJ1Y3QgbWlicmVjICptaWIsCiAJCQkgIGludCBpc2dldCwKIAkJCSAgd2xhbmRldmljZV90ICp3bGFuZGV2LAogCQkJICBoZmEzODR4X3QgKmh3LAotCQkJICBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgKm1zZywgdm9pZCAqZGF0YSkKKwkJCSAgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXQgKm1zZywgdm9pZCAqZGF0YSkKIHsKIAlpbnQgcmVzdWx0OwogCXUzMiAqdWludDMyID0gKHUzMiAqKSBkYXRhOwpAQCAtNTI1LDExICs1MjUsMTEgQEAKICoKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IHByaXNtMm1pYl93ZXBkZWZhdWx0a2V5KG1pYnJlY190ICptaWIsCitzdGF0aWMgaW50IHByaXNtMm1pYl93ZXBkZWZhdWx0a2V5KHN0cnVjdCBtaWJyZWMgKm1pYiwKIAkJCQkgICBpbnQgaXNnZXQsCiAJCQkJICAgd2xhbmRldmljZV90ICp3bGFuZGV2LAogCQkJCSAgIGhmYTM4NHhfdCAqaHcsCi0JCQkJICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csCisJCQkJICAgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXQgKm1zZywKIAkJCQkgICB2b2lkICpkYXRhKQogewogCWludCByZXN1bHQ7CkBAIC01NzUsMTEgKzU3NSwxMSBAQAogKgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgcHJpc20ybWliX3ByaXZhY3lpbnZva2VkKG1pYnJlY190ICptaWIsCitzdGF0aWMgaW50IHByaXNtMm1pYl9wcml2YWN5aW52b2tlZChzdHJ1Y3QgbWlicmVjICptaWIsCiAJCQkJICAgIGludCBpc2dldCwKIAkJCQkgICAgd2xhbmRldmljZV90ICp3bGFuZGV2LAogCQkJCSAgICBoZmEzODR4X3QgKmh3LAotCQkJCSAgICBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgKm1zZywKKwkJCQkgICAgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXQgKm1zZywKIAkJCQkgICAgdm9pZCAqZGF0YSkKIHsKIAlpbnQgcmVzdWx0OwpAQCAtNjIxLDExICs2MjEsMTEgQEAKICoKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IHByaXNtMm1pYl9leGNsdWRldW5lbmNyeXB0ZWQobWlicmVjX3QgKm1pYiwKK3N0YXRpYyBpbnQgcHJpc20ybWliX2V4Y2x1ZGV1bmVuY3J5cHRlZChzdHJ1Y3QgbWlicmVjICptaWIsCiAJCQkJCWludCBpc2dldCwKIAkJCQkJd2xhbmRldmljZV90ICp3bGFuZGV2LAogCQkJCQloZmEzODR4X3QgKmh3LAotCQkJCQlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgKm1zZywKKwkJCQkJc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXQgKm1zZywKIAkJCQkJdm9pZCAqZGF0YSkKIHsKIAlpbnQgcmVzdWx0OwpAQCAtNjYwLDExICs2NjAsMTEgQEAKICoKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IHByaXNtMm1pYl9mcmFnbWVudGF0aW9udGhyZXNob2xkKG1pYnJlY190ICptaWIsCitzdGF0aWMgaW50IHByaXNtMm1pYl9mcmFnbWVudGF0aW9udGhyZXNob2xkKHN0cnVjdCBtaWJyZWMgKm1pYiwKIAkJCQkJICAgIGludCBpc2dldCwKIAkJCQkJICAgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKIAkJCQkJICAgIGhmYTM4NHhfdCAqaHcsCi0JCQkJCSAgICBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgKm1zZywKKwkJCQkJICAgIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0ICptc2csCiAJCQkJCSAgICB2b2lkICpkYXRhKQogewogCWludCByZXN1bHQ7CkBAIC03MDksMTEgKzcwOSwxMSBAQAogKgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgcHJpc20ybWliX3ByaXYobWlicmVjX3QgKm1pYiwKK3N0YXRpYyBpbnQgcHJpc20ybWliX3ByaXYoc3RydWN0IG1pYnJlYyAqbWliLAogCQkJICBpbnQgaXNnZXQsCiAJCQkgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKIAkJCSAgaGZhMzg0eF90ICpodywKLQkJCSAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csIHZvaWQgKmRhdGEpCisJCQkgIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0ICptc2csIHZvaWQgKmRhdGEpCiB7CiAJcDgwMjExcHN0cmRfdCAqcHN0ciA9IChwODAyMTFwc3RyZF90ICopIGRhdGE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnN0YS5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yc3RhLmMKaW5kZXggNmNkMDkzNS4uZWQ3NTFmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yc3RhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yc3RhLmMKQEAgLTgzLDggKzgzLDYgQEAKICNpbmNsdWRlICJoZmEzODR4LmgiCiAjaW5jbHVkZSAicHJpc20ybWdtdC5oIgogCi0jZGVmaW5lIHdsYW5faGV4Y2hhcih4KSAoKCh4KSA8IDB4MGEpID8gKCcwJyArICh4KSkgOiAoJ2EnICsgKCh4KSAtIDB4MGEpKSkKLQogLyogQ3JlYXRlIGEgc3RyaW5nIG9mIHByaW50YWJsZSBjaGFycyBmcm9tIHNvbWV0aGluZyB0aGF0IG1pZ2h0IG5vdCBiZSAqLwogLyogSXQncyByZWNvbW1lbmRlZCB0aGF0IHRoZSBzdHIgYmUgNCpsZW4gKyAxIGJ5dGVzIGxvbmcgKi8KICNkZWZpbmUgd2xhbl9ta3ByaW50c3RyKGJ1ZiwgYnVmbGVuLCBzdHIsIHN0cmxlbikgXApAQCAtOTksOCArOTcsOCBAQAogCQl9IGVsc2UgeyBcCiAJCQkoc3RyKVtqXSA9ICdcXCc7IFwKIAkJCShzdHIpW2orMV0gPSAneCc7IFwKLQkJCShzdHIpW2orMl0gPSB3bGFuX2hleGNoYXIoKChidWYpW2ldICYgMHhmMCkgPj4gNCk7IFwKLQkJCShzdHIpW2orM10gPSB3bGFuX2hleGNoYXIoKChidWYpW2ldICYgMHgwZikpOyBcCisJCQkoc3RyKVtqKzJdID0gaGV4X2FzY19oaSgoYnVmKVtpXSk7IFwKKwkJCShzdHIpW2orM10gPSBoZXhfYXNjX2xvKChidWYpW2ldKTsgXAogCQkJaiArPSA0OyBcCiAJCX0gXAogCX0gXApAQCAtMTI0LDEzICsxMjIsMTcgQEAKIAogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgTVBML0dQTCIpOwogCit2b2lkIHByaXNtMl9jb25uZWN0X3Jlc3VsdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHU4IGZhaWxlZCk7Cit2b2lkIHByaXNtMl9kaXNjb25uZWN0ZWQod2xhbmRldmljZV90ICp3bGFuZGV2KTsKK3ZvaWQgcHJpc20yX3JvYW1lZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworCiBzdGF0aWMgaW50IHByaXNtMnN0YV9vcGVuKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CiBzdGF0aWMgaW50IHByaXNtMnN0YV9jbG9zZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwogc3RhdGljIHZvaWQgcHJpc20yc3RhX3Jlc2V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CiBzdGF0aWMgaW50IHByaXNtMnN0YV90eGZyYW1lKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLAotCQkJICAgICBwODAyMTFfbWV0YXdlcF90ICpwODAyMTFfd2VwKTsKLXN0YXRpYyBpbnQgcHJpc20yc3RhX21sbWVyZXF1ZXN0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgcDgwMjExbXNnX3QgKm1zZyk7CisJCQkgICAgIHVuaW9uIHA4MDIxMV9oZHIgKnA4MDIxMV9oZHIsCisJCQkgICAgIHN0cnVjdCBwODAyMTFfbWV0YXdlcCAqcDgwMjExX3dlcCk7CitzdGF0aWMgaW50IHByaXNtMnN0YV9tbG1lcmVxdWVzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBwODAyMTFtc2cgKm1zZyk7CiBzdGF0aWMgaW50IHByaXNtMnN0YV9nZXRjYXJkaW5mbyh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwogc3RhdGljIGludCBwcmlzbTJzdGFfZ2xvYmFsc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KTsKIHN0YXRpYyBpbnQgcHJpc20yc3RhX3NldG11bHRpY2FzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIG5ldGRldmljZV90ICpkZXYpOwpAQCAtMjY2LDggKzI2OCw4IEBACiAqCXByb2Nlc3MgdGhyZWFkCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyBpbnQgcHJpc20yc3RhX3R4ZnJhbWUod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsCi0JCQkgICAgIHA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXApCisJCQkgICAgIHVuaW9uIHA4MDIxMV9oZHIgKnA4MDIxMV9oZHIsCisJCQkgICAgIHN0cnVjdCBwODAyMTFfbWV0YXdlcCAqcDgwMjExX3dlcCkKIHsKIAloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSB3bGFuZGV2LT5wcml2OwogCWludCByZXN1bHQ7CkBAIC0zMDcsNyArMzA5LDcgQEAKICogQ2FsbCBjb250ZXh0OgogKglwcm9jZXNzIHRocmVhZAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50IHByaXNtMnN0YV9tbG1lcmVxdWVzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHA4MDIxMW1zZ190ICptc2cpCitzdGF0aWMgaW50IHByaXNtMnN0YV9tbG1lcmVxdWVzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBwODAyMTFtc2cgKm1zZykKIHsKIAloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSB3bGFuZGV2LT5wcml2OwogCkBAIC0zNjQsOSArMzY2LDkgQEAKIAkJYnJlYWs7CQkvKiBpZ25vcmUgbWUuICovCiAJY2FzZSBESURtc2dfbG54cmVxX2lmc3RhdGU6CiAJCXsKLQkJCXA4MDIxMW1zZ19sbnhyZXFfaWZzdGF0ZV90ICppZnN0YXRlbXNnOworCQkJc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfaWZzdGF0ZSAqaWZzdGF0ZW1zZzsKIAkJCXByX2RlYnVnKCJSZWNlaXZlZCBtbG1lIGlmc3RhdGUgcmVxdWVzdFxuIik7Ci0JCQlpZnN0YXRlbXNnID0gKHA4MDIxMW1zZ19sbnhyZXFfaWZzdGF0ZV90ICopIG1zZzsKKwkJCWlmc3RhdGVtc2cgPSAoc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfaWZzdGF0ZSAqKSBtc2c7CiAJCQlyZXN1bHQgPQogCQkJICAgIHByaXNtMnN0YV9pZnN0YXRlKHdsYW5kZXYsCiAJCQkJCSAgICAgIGlmc3RhdGVtc2ctPmlmc3RhdGUuZGF0YSk7CkBAIC0zODUsMTEgKzM4NywxMSBAQAogCQlyZXN1bHQgPSBwcmlzbTJtZ210X2F1dG9qb2luKHdsYW5kZXYsIG1zZyk7CiAJCWJyZWFrOwogCWNhc2UgRElEbXNnX2xueHJlcV9jb21tc3F1YWxpdHk6ewotCQkJcDgwMjExbXNnX2xueHJlcV9jb21tc3F1YWxpdHlfdCAqcXVhbG1zZzsKKwkJCXN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eSAqcXVhbG1zZzsKIAogCQkJcHJfZGVidWcoIlJlY2VpdmVkIGNvbW1zcXVhbGl0eSByZXF1ZXN0XG4iKTsKIAotCQkJcXVhbG1zZyA9IChwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV90ICopIG1zZzsKKwkJCXF1YWxtc2cgPSAoc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfY29tbXNxdWFsaXR5ICopIG1zZzsKIAogCQkJcXVhbG1zZy0+bGluay5zdGF0dXMgPQogCQkJICAgIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKQEAgLTQwMSw2ICs0MDMsNyBAQAogCQkJcXVhbG1zZy0+bGluay5kYXRhID0gbGUxNl90b19jcHUoaHctPnF1YWwuQ1FfY3VyckJTUyk7CiAJCQlxdWFsbXNnLT5sZXZlbC5kYXRhID0gbGUxNl90b19jcHUoaHctPnF1YWwuQVNMX2N1cnJCU1MpOwogCQkJcXVhbG1zZy0+bm9pc2UuZGF0YSA9IGxlMTZfdG9fY3B1KGh3LT5xdWFsLkFOTF9jdXJyRkMpOworCQkJcXVhbG1zZy0+dHhyYXRlLmRhdGEgPSBody0+dHhyYXRlOwogCiAJCQlicmVhazsKIAkJfQpAQCAtMTMwMCw2ICsxMzAzLDkgQEAKIAkJCSAgICAocG9ydHN0YXR1cyA9PSBIRkEzODR4X1BTVEFUVVNfQ09OTl9JQlNTKSA/CiAJCQkgICAgV0xBTl9NQUNNT0RFX0lCU1NfU1RBIDogV0xBTl9NQUNNT0RFX0VTU19TVEE7CiAKKwkJCS8qIHNpZ25hbCBiYWNrIHVwIHRvIGNmZzgwMjExIGxheWVyICovCisJCQlwcmlzbTJfY29ubmVjdF9yZXN1bHQod2xhbmRldiwgUDgwMjExRU5VTV90cnV0aF9mYWxzZSk7CisKIAkJCS8qIEdldCB0aGUgYmFsbCByb2xsaW5nIG9uIHRoZSBjb21tcyBxdWFsaXR5IHN0dWZmICovCiAJCQlwcmlzbTJzdGFfY29tbXNxdWFsX2RlZmVyKCZody0+Y29tbXNxdWFsX2JoKTsKIAkJfQpAQCAtMTMxNSwyNSArMTMyMSwxNiBAQAogCQkgKiBJbmRpY2F0ZSBEZWF1dGhlbnRpY2F0aW9uCiAJCSAqIEJsb2NrIFRyYW5zbWl0cywgSWdub3JlIHJlY2VpdmVzIG9mIGRhdGEgZnJhbWVzCiAJCSAqLwotCQlpZiAoaHctPmpvaW5fYXAgPT0gMikgewotCQkJaGZhMzg0eF9Kb2luUmVxdWVzdF9kYXRhX3Qgam9pbnJlcTsKLQkJCWpvaW5yZXEgPSBody0+am9pbnJlcTsKLQkJCS8qIFNlbmQgdGhlIGpvaW4gcmVxdWVzdCAqLwotCQkJaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywKLQkJCQkJICAgICAgIEhGQTM4NHhfUklEX0pPSU5SRVFVRVNULAotCQkJCQkgICAgICAgJmpvaW5yZXEsCi0JCQkJCSAgICAgICBIRkEzODR4X1JJRF9KT0lOUkVRVUVTVF9MRU4pOworCQlpZiAod2xhbmRldi0+bmV0ZGV2LT50eXBlID09IEFSUEhSRF9FVEhFUikKIAkJCXByaW50ayhLRVJOX0lORk8KLQkJCSAgICAibGlua3N0YXR1cz1ESVNDT05ORUNURUQgKHJlLXN1Ym1pdHRpbmcgam9pbilcbiIpOwotCQl9IGVsc2UgewotCQkJaWYgKHdsYW5kZXYtPm5ldGRldi0+dHlwZSA9PSBBUlBIUkRfRVRIRVIpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSAgICAgICAibGlua3N0YXR1cz1ESVNDT05ORUNURUQgKHVuaGFuZGxlZClcbiIpOwotCQl9CisJCQkgICAgICAgImxpbmtzdGF0dXM9RElTQ09OTkVDVEVEICh1bmhhbmRsZWQpXG4iKTsKIAkJd2xhbmRldi0+bWFjbW9kZSA9IFdMQU5fTUFDTU9ERV9OT05FOwogCiAJCW5ldGlmX2NhcnJpZXJfb2ZmKHdsYW5kZXYtPm5ldGRldik7CiAKKwkJLyogc2lnbmFsIGJhY2sgdXAgdG8gY2ZnODAyMTEgbGF5ZXIgKi8KKwkJcHJpc20yX2Rpc2Nvbm5lY3RlZCh3bGFuZGV2KTsKKwogCQlicmVhazsKIAogCWNhc2UgSEZBMzg0eF9MSU5LX0FQX0NIQU5HRToKQEAgLTEzNzYsNiArMTM3Myw5IEBACiAJCWh3LT5saW5rX3N0YXR1cyA9IEhGQTM4NHhfTElOS19DT05ORUNURUQ7CiAJCW5ldGlmX2NhcnJpZXJfb24od2xhbmRldi0+bmV0ZGV2KTsKIAorCQkvKiBzaWduYWwgYmFjayB1cCB0byBjZmc4MDIxMSBsYXllciAqLworCQlwcmlzbTJfcm9hbWVkKHdsYW5kZXYpOworCiAJCWJyZWFrOwogCiAJY2FzZSBIRkEzODR4X0xJTktfQVBfT1VUT0ZSQU5HRToKQEAgLTE0MzUsNiArMTQzNSw5IEBACiAKIAkJbmV0aWZfY2Fycmllcl9vZmYod2xhbmRldi0+bmV0ZGV2KTsKIAorCQkvKiBzaWduYWwgYmFjayB1cCB0byBjZmc4MDIxMSBsYXllciAqLworCQlwcmlzbTJfY29ubmVjdF9yZXN1bHQod2xhbmRldiwgUDgwMjExRU5VTV90cnV0aF90cnVlKTsKKwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0xNDQ2LDcgKzE0NDksNiBAQAogCX0KIAogCXdsYW5kZXYtPmxpbmtzdGF0dXMgPSAoaHctPmxpbmtfc3RhdHVzID09IEhGQTM4NHhfTElOS19DT05ORUNURUQpOwotCXA4MDIxMXdleHRfZXZlbnRfYXNzb2NpYXRlZCh3bGFuZGV2LCB3bGFuZGV2LT5saW5rc3RhdHVzKTsKIAogZmFpbGVkOgogCXJldHVybjsKQEAgLTE5ODUsNiArMTk4Nyw5IEBACiAJaGZhMzg0eF90ICpodyA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaGZhMzg0eCwgY29tbXNxdWFsX2JoKTsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBody0+d2xhbmRldjsKIAloZmEzODR4X2J5dGVzdHIzMl90IHNzaWQ7CisJc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9taWJnZXQgbXNnOworCXA4MDIxMWl0ZW1fdWludDMyX3QgKm1pYml0ZW0gPSAocDgwMjExaXRlbV91aW50MzJfdCAqKQorCQkJCQkJJm1zZy5taWJhdHRyaWJ1dGUuZGF0YTsKIAlpbnQgcmVzdWx0ID0gMDsKIAogCWlmIChody0+d2xhbmRldi0+aHdyZW1vdmVkKQpAQCAtMjAxMyw2ICsyMDE4LDM0IEBACiAJCQkgbGUxNl90b19jcHUoaHctPnF1YWwuQU5MX2N1cnJGQykpOwogCX0KIAorCS8qIEdldCB0aGUgc2lnbmFsIHJhdGUgKi8KKwltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJnZXQ7CisJbWliaXRlbS0+ZGlkID0gRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKKworCWlmIChyZXN1bHQpIHsKKwkJcHJfZGVidWcoImdldCBzaWduYWwgcmF0ZSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAorCQkJIHJlc3VsdCk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlzd2l0Y2ggKG1pYml0ZW0tPmRhdGEpIHsKKwljYXNlIEhGQTM4NHhfUkFURUJJVF8xOgorCQlody0+dHhyYXRlID0gMTA7CisJCWJyZWFrOworCWNhc2UgSEZBMzg0eF9SQVRFQklUXzI6CisJCWh3LT50eHJhdGUgPSAyMDsKKwkJYnJlYWs7CisJY2FzZSBIRkEzODR4X1JBVEVCSVRfNWRvdDU6CisJCWh3LT50eHJhdGUgPSA1NTsKKwkJYnJlYWs7CisJY2FzZSBIRkEzODR4X1JBVEVCSVRfMTE6CisJCWh3LT50eHJhdGUgPSAxMTA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2RlYnVnKCJCYWQgcmF0ZWJpdCAoJWQpXG4iLCBtaWJpdGVtLT5kYXRhKTsKKwl9CisKIAkvKiBMYXN0bHksIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBCU1NJRCBkaWRuJ3QgY2hhbmdlIG9uIHVzICovCiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywKIAkJCQkJSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lELApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ydXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJ1c2IuYwppbmRleCBmNWNmZjc1Li40ZWZhMDI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJ1c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJ1c2IuYwpAQCAtMTE5LDcgKzExOSw3IEBACiAJfQogCWh3ID0gd2xhbmRldi0+cHJpdjsKIAotCWlmICh3bGFuX3NldHVwKHdsYW5kZXYpICE9IDApIHsKKwlpZiAod2xhbl9zZXR1cCh3bGFuZGV2LCAmKGludGVyZmFjZS0+ZGV2KSkgIT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiB3bGFuX3NldHVwKCkgZmFpbGVkLlxuIiwgZGV2X2luZm8pOwogCQlyZXN1bHQgPSAtRUlPOwogCQlnb3RvIGZhaWxlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi9YR0kuaCBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi9YR0kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc4MDNkZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0jaWZuZGVmIF9YR0lfSAotI2RlZmluZSBfWEdJX0gKLQotI2lmIDEKLSNkZWZpbmUgVFdERUJVRyh4KQotI2Vsc2UKLSNkZWZpbmUgVFdERUJVRyh4KSBwcmludGsoS0VSTl9JTkZPIHggIlxuIik7Ci0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJX2FjY2VsLmMgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJX2FjY2VsLmMKaW5kZXggODZlYzM0Mi4uNzk1NDk3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL1hHSV9hY2NlbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi9YR0lfYWNjZWwuYwpAQCAtMzcsMzcgKzM3LDE3IEBACiAjaW5jbHVkZSA8bGludXgvYWdwX2JhY2tlbmQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0vKgotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotI2luY2x1ZGUgPGxpbnV4L1hHSWZiLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHZpZGVvL1hHSWZiLmg+Ci0jZW5kaWYKLSovCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpZmRlZiBDT05GSUdfTVRSUgogI2luY2x1ZGUgPGFzbS9tdHJyLmg+CiAjZW5kaWYKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotI2luY2x1ZGUgPHZpZGVvL2ZiY29uLmg+Ci0jaW5jbHVkZSA8dmlkZW8vZmJjb24tY2ZiOC5oPgotI2luY2x1ZGUgPHZpZGVvL2ZiY29uLWNmYjE2Lmg+Ci0jaW5jbHVkZSA8dmlkZW8vZmJjb24tY2ZiMjQuaD4KLSNpbmNsdWRlIDx2aWRlby9mYmNvbi1jZmIzMi5oPgotI2VuZGlmCi0KLSNpbmNsdWRlICJvc2RlZi5oIgogI2luY2x1ZGUgInZnYXR5cGVzLmgiCiAjaW5jbHVkZSAidmJfc3RydWN0LmgiCiAjaW5jbHVkZSAiWEdJZmIuaCIKICNpbmNsdWRlICJYR0lfYWNjZWwuaCIKIAotCi1leHRlcm4gc3RydWN0ICAgICB2aWRlb19pbmZvIHhnaV92aWRlb19pbmZvOwotZXh0ZXJuIGludCBYR0lmYl9hY2NlbDsKLQogc3RhdGljIGNvbnN0IGludCBYR0lBTFVDb252W10gPQogewogICAgIDB4MDAsICAgICAgIC8qIGRlc3QgPSAwOyAgICAgICAgICAgIDAsICAgICAgR1hjbGVhciwgICAgICAgIDAgKi8KQEAgLTEwOCwxMDkgKzg4LDE3IEBACiAgICAgMHhGRiwgICAgICAgLyogZGVzdCA9IDB4RkY7ICAgICAgICAgMSwgICAgICBHWHNldCwgICAgICAgICAgMHhGICovCiB9OwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwzNCkKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG15cm9wc1tdID0gewogICAgCTMsIDEwLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzCiAgICB9OwotI2VuZGlmCiAKIC8qIDMwMCBzZXJpZXMgKi8KLSNpZiAwCi1zdGF0aWMgdm9pZAotWEdJMzAwU3luYyh2b2lkKQotewotCVhHSTMwMElkbGUKLX0KLSNlbmRpZgogc3RhdGljIHZvaWQKIFhHSTMxMFN5bmModm9pZCkKIHsKIAlYR0kzMTBJZGxlCiB9Ci0jaWYgMAotc3RhdGljIHZvaWQKLVhHSTMwMFNldHVwRm9yU2NyZWVuVG9TY3JlZW5Db3B5KGludCB4ZGlyLCBpbnQgeWRpciwgaW50IHJvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBsYW5lbWFzaywgaW50IHRyYW5zX2NvbG9yKQotewotCVhHSTMwMFNldHVwRFNUQ29sb3JEZXB0aCh4Z2lfdmlkZW9faW5mby5Ec3RDb2xvcik7Ci0JWEdJMzAwU2V0dXBTUkNQaXRjaCh4Z2lfdmlkZW9faW5mby52aWRlb19saW5lbGVuZ3RoKQotCVhHSTMwMFNldHVwRFNUUmVjdCh4Z2lfdmlkZW9faW5mby52aWRlb19saW5lbGVuZ3RoLCAweEZGRikKIAotCWlmKHRyYW5zX2NvbG9yICE9IC0xKSB7Ci0JCVhHSTMwMFNldHVwUk9QKDB4MEEpCi0JCVhHSTMwMFNldHVwU1JDVHJhbnModHJhbnNfY29sb3IpCi0JCVhHSTMwMFNldHVwQ01ERmxhZyhUUkFOU1BBUkVOVF9CSVRCTFQpCi0JfSBlbHNlIHsKLQkgICAgICAgIFhHSTMwMFNldHVwUk9QKFhHSUFMVUNvbnZbcm9wXSkKLQl9Ci0JaWYoeGRpciA+IDApIHsKLQkJWEdJMzAwU2V0dXBDTURGbGFnKFhfSU5DKQotCX0KLQlpZih5ZGlyID4gMCkgewotCQlYR0kzMDBTZXR1cENNREZsYWcoWV9JTkMpCi0JfQotfQotCi1zdGF0aWMgdm9pZAotWEdJMzAwU3Vic2VxdWVudFNjcmVlblRvU2NyZWVuQ29weShpbnQgc3JjX3gsIGludCBzcmNfeSwgaW50IGRzdF94LCBpbnQgZHN0X3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLQlsb25nIHNyY2Jhc2UsIGRzdGJhc2U7Ci0KLQlzcmNiYXNlID0gZHN0YmFzZSA9IDA7Ci0JaWYgKHNyY195ID49IDIwNDgpIHsKLQkJc3JjYmFzZSA9IHhnaV92aWRlb19pbmZvLnZpZGVvX2xpbmVsZW5ndGggKiBzcmNfeTsKLQkJc3JjX3kgPSAwOwotCX0KLQlpZiAoZHN0X3kgPj0gMjA0OCkgewotCQlkc3RiYXNlID0geGdpX3ZpZGVvX2luZm8udmlkZW9fbGluZWxlbmd0aCAqIGRzdF95OwotCQlkc3RfeSA9IDA7Ci0JfQotCi0JWEdJMzAwU2V0dXBTUkNCYXNlKHNyY2Jhc2UpOwotCVhHSTMwMFNldHVwRFNUQmFzZShkc3RiYXNlKTsKLQotCWlmKCEoeGdpX3ZpZGVvX2luZm8uQ29tbWFuZFJlZyAmIFhfSU5DKSkgIHsKLQkJc3JjX3ggKz0gd2lkdGgtMTsKLQkJZHN0X3ggKz0gd2lkdGgtMTsKLQl9Ci0JaWYoISh4Z2lfdmlkZW9faW5mby5Db21tYW5kUmVnICYgWV9JTkMpKSAgewotCQlzcmNfeSArPSBoZWlnaHQtMTsKLQkJZHN0X3kgKz0gaGVpZ2h0LTE7Ci0JfQotCVhHSTMwMFNldHVwUmVjdCh3aWR0aCwgaGVpZ2h0KQotCVhHSTMwMFNldHVwU1JDWFkoc3JjX3gsIHNyY195KQotCVhHSTMwMFNldHVwRFNUWFkoZHN0X3gsIGRzdF95KQotCVhHSTMwMERvQ01ECi19Ci0KLXN0YXRpYyB2b2lkCi1YR0kzMDBTZXR1cEZvclNvbGlkRmlsbChpbnQgY29sb3IsIGludCByb3AsIHVuc2lnbmVkIGludCBwbGFuZW1hc2spCi17Ci0JWEdJMzAwU2V0dXBQQVRGRyhjb2xvcikKLQlYR0kzMDBTZXR1cERTVFJlY3QoeGdpX3ZpZGVvX2luZm8udmlkZW9fbGluZWxlbmd0aCwgMHhGRkYpCi0JWEdJMzAwU2V0dXBEU1RDb2xvckRlcHRoKHhnaV92aWRlb19pbmZvLkRzdENvbG9yKTsKLQlYR0kzMDBTZXR1cFJPUChYR0lQYXRBTFVDb252W3JvcF0pCi0JWEdJMzAwU2V0dXBDTURGbGFnKFBBVEZHKQotfQotCi1zdGF0aWMgdm9pZAotWEdJMzAwU3Vic2VxdWVudFNvbGlkRmlsbFJlY3QoaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCi17Ci0JbG9uZyBkc3RiYXNlOwotCi0JZHN0YmFzZSA9IDA7Ci0JaWYoeSA+PSAyMDQ4KSB7Ci0JCWRzdGJhc2UgPSB4Z2lfdmlkZW9faW5mby52aWRlb19saW5lbGVuZ3RoICogeTsKLQkJeSA9IDA7Ci0JfQotCVhHSTMwMFNldHVwRFNUQmFzZShkc3RiYXNlKQotCVhHSTMwMFNldHVwRFNUWFkoeCx5KQotCVhHSTMwMFNldHVwUmVjdCh3LGgpCi0JWEdJMzAwU2V0dXBDTURGbGFnKFhfSU5DIHwgWV9JTkMgfCBCSVRCTFQpCi0JWEdJMzAwRG9DTUQKLX0KLSNlbmRpZgogLyogMzEwLzMyNSBzZXJpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyB2b2lkCkBAIC0zMjYsOCArMjE0LDYgQEAKIAogfQogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwzNCkgIC8qIC0tLSBLRVJORUwgMi41LjM0IGFuZCBsYXRlciAtLS0gKi8KLQogaW50IGZiY29uX1hHSV9zeW5jKHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogICAgIGlmKCFYR0lmYl9hY2NlbCkgcmV0dXJuIDA7CkBAIC0zOTksMTk4ICsyODUsNSBAQAogCiB9CiAKLSNlbmRpZgotCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9IEtFUk5FTF9WRVJTSU9OKDIsNSwzMykgIC8qIC0tLS0tLSBLRVJORUwgPDIuNS4zNCAtLS0tLS0gKi8KLQotdm9pZCBmYmNvbl9YR0lfYm1vdmUoc3RydWN0IGRpc3BsYXkgKnAsIGludCBzcmN5LCBpbnQgc3JjeCwKLQkJCSAgICBpbnQgZHN0eSwgaW50IGRzdHgsIGludCBoZWlnaHQsIGludCB3aWR0aCkKLXsKLSAgICAgICAgaW50IHhkaXIsIHlkaXI7Ci0JQ1JJVEZMQUdTCi0KLQlpZigheGdpX3ZpZGVvX2luZm8uYWNjZWwpIHsKLQkgICAgc3dpdGNoKHhnaV92aWRlb19pbmZvLnZpZGVvX2JwcCkgewotCSAgICBjYXNlIDg6Ci0jaWZkZWYgRkJDT05fSEFTX0NGQjgKLQkgICAgICAgZmJjb25fY2ZiOF9ibW92ZShwLCBzcmN5LCBzcmN4LCBkc3R5LCBkc3R4LCBoZWlnaHQsIHdpZHRoKTsKLSNlbmRpZgotCSAgICAgICBicmVhazsKLQkgICAgY2FzZSAxNjoKLSNpZmRlZiBGQkNPTl9IQVNfQ0ZCMTYKLQkgICAgICAgZmJjb25fY2ZiMTZfYm1vdmUocCwgc3JjeSwgc3JjeCwgZHN0eSwgZHN0eCwgaGVpZ2h0LCB3aWR0aCk7Ci0jZW5kaWYKLQkgICAgICAgYnJlYWs7Ci0JICAgIGNhc2UgMzI6Ci0jaWZkZWYgRkJDT05fSEFTX0NGQjMyCi0JICAgICAgIGZiY29uX2NmYjMyX2Jtb3ZlKHAsIHNyY3ksIHNyY3gsIGRzdHksIGRzdHgsIGhlaWdodCwgd2lkdGgpOwotI2VuZGlmCi0JICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCSAgICByZXR1cm47Ci0JfQotCi0Jc3JjeCAqPSBmb250d2lkdGgocCk7Ci0Jc3JjeSAqPSBmb250aGVpZ2h0KHApOwotCWRzdHggKj0gZm9udHdpZHRoKHApOwotCWRzdHkgKj0gZm9udGhlaWdodChwKTsKLQl3aWR0aCAqPSBmb250d2lkdGgocCk7Ci0JaGVpZ2h0ICo9IGZvbnRoZWlnaHQocCk7Ci0KLQlpZihzcmN4IDwgZHN0eCkgeGRpciA9IDA7Ci0JZWxzZSAgICAgICAgICAgIHhkaXIgPSAxOwotCWlmKHNyY3kgPCBkc3R5KSB5ZGlyID0gMDsKLQllbHNlICAgICAgICAgICAgeWRpciA9IDE7Ci0KLQotCSAgIENSSVRCRUdJTgotCSAgIFhHSTMxMFNldHVwRm9yU2NyZWVuVG9TY3JlZW5Db3B5KHhkaXIsIHlkaXIsIDMsIDAsIC0xKTsKLQkgICBYR0kzMTBTdWJzZXF1ZW50U2NyZWVuVG9TY3JlZW5Db3B5KHNyY3gsIHNyY3ksIGRzdHgsIGRzdHksIHdpZHRoLCBoZWlnaHQpOwotCSAgIENSSVRFTkQKLQkgICBYR0kzMTBTeW5jKCk7Ci0jaWYgMAotCSAgIHByaW50ayhLRVJOX0lORk8gIlhHSV9ibW92ZSBzeCAlZCBzeSAlZCBkeCAlZCBkeSAlZCB3ICVkIGggJWRcbiIsCi0JCXNyY3gsIHNyY3ksIGRzdHgsIGRzdHksIHdpZHRoLCBoZWlnaHQpOwotI2VuZGlmCi0KLX0KLQotCi1zdGF0aWMgdm9pZCBmYmNvbl9YR0lfY2xlYXIoc3RydWN0IHZjX2RhdGEgKmNvbnAsIHN0cnVjdCBkaXNwbGF5ICpwLAotCQkJaW50IHNyY3ksIGludCBzcmN4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIGludCBjb2xvcikKLXsKLQlDUklURkxBR1MKLQotCXNyY3ggKj0gZm9udHdpZHRoKHApOwotCXNyY3kgKj0gZm9udGhlaWdodChwKTsKLQl3aWR0aCAqPSBmb250d2lkdGgocCk7Ci0JaGVpZ2h0ICo9IGZvbnRoZWlnaHQocCk7Ci0KLQotCSAgIENSSVRCRUdJTgotCSAgIFhHSTMxMFNldHVwRm9yU29saWRGaWxsKGNvbG9yLCAzLCAwKTsKLQkgICBYR0kzMTBTdWJzZXF1ZW50U29saWRGaWxsUmVjdChzcmN4LCBzcmN5LCB3aWR0aCwgaGVpZ2h0KTsKLQkgICBDUklURU5ECi0JICAgWEdJMzEwU3luYygpOwotCi19Ci0KLXZvaWQgZmJjb25fWEdJX2NsZWFyOChzdHJ1Y3QgdmNfZGF0YSAqY29ucCwgc3RydWN0IGRpc3BsYXkgKnAsCi0JCQlpbnQgc3JjeSwgaW50IHNyY3gsIGludCBoZWlnaHQsIGludCB3aWR0aCkKLXsKLQl1MzIgYmd4OwotCi0JaWYoIXhnaV92aWRlb19pbmZvLmFjY2VsKSB7Ci0jaWZkZWYgRkJDT05fSEFTX0NGQjgKLQkgICAgZmJjb25fY2ZiOF9jbGVhcihjb25wLCBwLCBzcmN5LCBzcmN4LCBoZWlnaHQsIHdpZHRoKTsKLSNlbmRpZgotCSAgICByZXR1cm47Ci0JfQotCi0JYmd4ID0gYXR0cl9iZ2NvbF9lYyhwLCBjb25wKTsKLQlmYmNvbl9YR0lfY2xlYXIoY29ucCwgcCwgc3JjeSwgc3JjeCwgaGVpZ2h0LCB3aWR0aCwgYmd4KTsKLX0KLQotdm9pZCBmYmNvbl9YR0lfY2xlYXIxNihzdHJ1Y3QgdmNfZGF0YSAqY29ucCwgc3RydWN0IGRpc3BsYXkgKnAsCi0JCQlpbnQgc3JjeSwgaW50IHNyY3gsIGludCBoZWlnaHQsIGludCB3aWR0aCkKLXsKLQl1MzIgYmd4OwotCWlmKCF4Z2lfdmlkZW9faW5mby5hY2NlbCkgewotI2lmZGVmIEZCQ09OX0hBU19DRkIxNgotCSAgICBmYmNvbl9jZmIxNl9jbGVhcihjb25wLCBwLCBzcmN5LCBzcmN4LCBoZWlnaHQsIHdpZHRoKTsKLSNlbmRpZgotCSAgICByZXR1cm47Ci0JfQotCi0JYmd4ID0gKCh1X2ludDE2X3QqKXAtPmRpc3Bzd19kYXRhKVthdHRyX2JnY29sX2VjKHAsIGNvbnApXTsKLQlmYmNvbl9YR0lfY2xlYXIoY29ucCwgcCwgc3JjeSwgc3JjeCwgaGVpZ2h0LCB3aWR0aCwgYmd4KTsKLX0KLQotdm9pZCBmYmNvbl9YR0lfY2xlYXIzMihzdHJ1Y3QgdmNfZGF0YSAqY29ucCwgc3RydWN0IGRpc3BsYXkgKnAsCi0JCQlpbnQgc3JjeSwgaW50IHNyY3gsIGludCBoZWlnaHQsIGludCB3aWR0aCkKLXsKLQl1MzIgYmd4OwotCi0JaWYoIXhnaV92aWRlb19pbmZvLmFjY2VsKSB7Ci0jaWZkZWYgRkJDT05fSEFTX0NGQjMyCi0JICAgIGZiY29uX2NmYjMyX2NsZWFyKGNvbnAsIHAsIHNyY3ksIHNyY3gsIGhlaWdodCwgd2lkdGgpOwotI2VuZGlmCi0JICAgIHJldHVybjsKLQl9Ci0KLQliZ3ggPSAoKHVfaW50MzJfdCopcC0+ZGlzcHN3X2RhdGEpW2F0dHJfYmdjb2xfZWMocCwgY29ucCldOwotCWZiY29uX1hHSV9jbGVhcihjb25wLCBwLCBzcmN5LCBzcmN4LCBoZWlnaHQsIHdpZHRoLCBiZ3gpOwotfQotCi12b2lkIGZiY29uX1hHSV9yZXZjKHN0cnVjdCBkaXNwbGF5ICpwLCBpbnQgc3JjeCwgaW50IHNyY3kpCi17Ci0JQ1JJVEZMQUdTCi0KLQlpZigheGdpX3ZpZGVvX2luZm8uYWNjZWwpIHsKLQkgICAgc3dpdGNoKHhnaV92aWRlb19pbmZvLnZpZGVvX2JwcCkgewotCSAgICBjYXNlIDE2OgotI2lmZGVmIEZCQ09OX0hBU19DRkIxNgotCSAgICAgICBmYmNvbl9jZmIxNl9yZXZjKHAsIHNyY3gsIHNyY3kpOwotI2VuZGlmCi0JICAgICAgIGJyZWFrOwotCSAgICBjYXNlIDMyOgotI2lmZGVmIEZCQ09OX0hBU19DRkIzMgotCSAgICAgICBmYmNvbl9jZmIzMl9yZXZjKHAsIHNyY3gsIHNyY3kpOwotI2VuZGlmCi0JICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCSAgICByZXR1cm47Ci0JfQotCi0Jc3JjeCAqPSBmb250d2lkdGgocCk7Ci0Jc3JjeSAqPSBmb250aGVpZ2h0KHApOwotCi0KLQkgICBDUklUQkVHSU4KLQkgICBYR0kzMTBTZXR1cEZvclNvbGlkRmlsbCgwLCAweDBhLCAwKTsKLQkgICBYR0kzMTBTdWJzZXF1ZW50U29saWRGaWxsUmVjdChzcmN4LCBzcmN5LCBmb250d2lkdGgocCksIGZvbnRoZWlnaHQocCkpOwotCSAgIENSSVRFTkQKLQkgICBYR0kzMTBTeW5jKCk7Ci0KLX0KLQotI2lmZGVmIEZCQ09OX0hBU19DRkI4Ci1zdHJ1Y3QgZGlzcGxheV9zd2l0Y2ggZmJjb25fWEdJOCA9IHsKLQlzZXR1cDoJCQlmYmNvbl9jZmI4X3NldHVwLAotCWJtb3ZlOgkJCWZiY29uX1hHSV9ibW92ZSwKLQljbGVhcjoJCQlmYmNvbl9YR0lfY2xlYXI4LAotCXB1dGM6CQkJZmJjb25fY2ZiOF9wdXRjLAotCXB1dGNzOgkJCWZiY29uX2NmYjhfcHV0Y3MsCi0JcmV2YzoJCQlmYmNvbl9jZmI4X3JldmMsCi0JY2xlYXJfbWFyZ2luczoJCWZiY29uX2NmYjhfY2xlYXJfbWFyZ2lucywKLQlmb250d2lkdGhtYXNrOgkJRk9OVFdJRFRIKDQpfEZPTlRXSURUSCg4KXxGT05UV0lEVEgoMTIpfEZPTlRXSURUSCgxNikKLX07Ci0jZW5kaWYKLSNpZmRlZiBGQkNPTl9IQVNfQ0ZCMTYKLXN0cnVjdCBkaXNwbGF5X3N3aXRjaCBmYmNvbl9YR0kxNiA9IHsKLQlzZXR1cDoJCQlmYmNvbl9jZmIxNl9zZXR1cCwKLQlibW92ZToJCQlmYmNvbl9YR0lfYm1vdmUsCi0JY2xlYXI6CQkJZmJjb25fWEdJX2NsZWFyMTYsCi0JcHV0YzoJCQlmYmNvbl9jZmIxNl9wdXRjLAotCXB1dGNzOgkJCWZiY29uX2NmYjE2X3B1dGNzLAotCXJldmM6CQkJZmJjb25fWEdJX3JldmMsCi0JY2xlYXJfbWFyZ2luczoJCWZiY29uX2NmYjE2X2NsZWFyX21hcmdpbnMsCi0JZm9udHdpZHRobWFzazoJCUZPTlRXSURUSCg0KXxGT05UV0lEVEgoOCl8Rk9OVFdJRFRIKDEyKXxGT05UV0lEVEgoMTYpCi19OwotI2VuZGlmCi0jaWZkZWYgRkJDT05fSEFTX0NGQjMyCi1zdHJ1Y3QgZGlzcGxheV9zd2l0Y2ggZmJjb25fWEdJMzIgPSB7Ci0Jc2V0dXA6CQkJZmJjb25fY2ZiMzJfc2V0dXAsCi0JYm1vdmU6CQkJZmJjb25fWEdJX2Jtb3ZlLAotCWNsZWFyOgkJCWZiY29uX1hHSV9jbGVhcjMyLAotCXB1dGM6CQkJZmJjb25fY2ZiMzJfcHV0YywKLQlwdXRjczoJCQlmYmNvbl9jZmIzMl9wdXRjcywKLQlyZXZjOgkJCWZiY29uX1hHSV9yZXZjLAotCWNsZWFyX21hcmdpbnM6CQlmYmNvbl9jZmIzMl9jbGVhcl9tYXJnaW5zLAotCWZvbnR3aWR0aG1hc2s6CQlGT05UV0lEVEgoNCl8Rk9OVFdJRFRIKDgpfEZPTlRXSURUSCgxMil8Rk9OVFdJRFRIKDE2KQotfTsKLSNlbmRpZgotCi0jZW5kaWYgLyogS0VSTkVMIFZFUlNJT04gKi8KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJX2FjY2VsLmggYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJX2FjY2VsLmgKaW5kZXggMDRlMTI2Ny4uMjhjMDU3OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi9YR0lfYWNjZWwuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJX2FjY2VsLmgKQEAgLTQ5MSwyMSArNDkxLDkgQEAKIAogZXh0ZXJuIHN0cnVjdCB2aWRlb19pbmZvIHhnaV92aWRlb19pbmZvOwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9IEtFUk5FTF9WRVJTSU9OKDIsNSwzMykKLXZvaWQgZmJjb25fWEdJX2Jtb3ZlKHN0cnVjdCBkaXNwbGF5ICpwLCBpbnQgc3JjeSwgaW50IHNyY3gsIGludCBkc3R5LAotICAgICAgICAgICAgICAgICAgICAgaW50IGRzdHgsIGludCBoZWlnaHQsIGludCB3aWR0aCk7Ci12b2lkIGZiY29uX1hHSV9yZXZjKHN0cnVjdCBkaXNwbGF5ICpwLCBpbnQgc3JjeSwgaW50IHNyY3gpOwotdm9pZCBmYmNvbl9YR0lfY2xlYXI4KHN0cnVjdCB2Y19kYXRhICpjb25wLCBzdHJ1Y3QgZGlzcGxheSAqcCwgaW50IHNyY3ksCi0gICAgICAgICAgICAgICAgICAgICAgaW50IHNyY3gsIGludCBoZWlnaHQsIGludCB3aWR0aCk7Ci12b2lkIGZiY29uX1hHSV9jbGVhcjE2KHN0cnVjdCB2Y19kYXRhICpjb25wLCBzdHJ1Y3QgZGlzcGxheSAqcCwgaW50IHNyY3ksCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBzcmN4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpOwotdm9pZCBmYmNvbl9YR0lfY2xlYXIzMihzdHJ1Y3QgdmNfZGF0YSAqY29ucCwgc3RydWN0IGRpc3BsYXkgKnAsIGludCBzcmN5LAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjeCwgaW50IGhlaWdodCwgaW50IHdpZHRoKTsKLSNlbmRpZgotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMzQpCiBleHRlcm4gaW50IFhHSWZiX2FjY2VsOwogdm9pZCBmYmNvbl9YR0lfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCk7CiB2b2lkIGZiY29uX1hHSV9jb3B5YXJlYShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICphcmVhKTsKLSNlbmRpZgorCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL1hHSV9tYWluLmggYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJX21haW4uaAppbmRleCA0ZjQxNzFlLi5mZDExNTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJX21haW4uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJX21haW4uaApAQCAtNDIsMTcgKzQyLDEwIEBACiAKIAogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDgpCiAjZGVmaW5lIFhHSV9JT1RZUEUxIHZvaWQgX19pb21lbQogI2RlZmluZSBYR0lfSU9UWVBFMiBfX2lvbWVtCiAjZGVmaW5lIFhHSUlOSVRTVEFUSUMgc3RhdGljCi0jZWxzZQotI2RlZmluZSBYR0lfSU9UWVBFMSB1bnNpZ25lZCBjaGFyCi0jZGVmaW5lIFhHSV9JT1RZUEUyCi0jZGVmaW5lIFhHSUlOSVRTVEFUSUMKLSNlbmRpZgogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fZGV2aW5pdGRhdGEgeGdpZmJfcGNpX3RhYmxlW10gPSB7CiAKIAl7IFBDSV9WRU5ET1JfSURfWEcsIFBDSV9ERVZJQ0VfSURfWEdfMjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LApAQCAtNjMsNyArNTYsNyBAQAogfTsKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHhnaWZiX3BjaV90YWJsZSk7Ci0jZW5kaWYKKwogLyogVG8gYmUgaW5jbHVkZWQgaW4gZmIuaCAqLwogI2lmbmRlZiBGQl9BQ0NFTF9YR0lfR0xBTU9VUl8yCiAjZGVmaW5lIEZCX0FDQ0VMX1hHSV9HTEFNT1VSXzIgIDQwCS8qIFhHSSAzMTUsIDY1MCwgNzQwCQkqLwpAQCAtMjU1LDkgKzI0OCw2IEBACiAjZGVmaW5lIEJSSV9EUkFNX1NJWkVfMzJNQiAgICAgICAgMHgwNAogI2RlZmluZSBCUklfRFJBTV9TSVpFXzY0TUIgICAgICAgIDB4MDUKIAotI2RlZmluZSBIV19ERVZJQ0VfRVhURU5TSU9OCSAgWEdJX0hXX0RFVklDRV9JTkZPCi0jZGVmaW5lIFBIV19ERVZJQ0VfRVhURU5TSU9OICAgICAgUFhHSV9IV19ERVZJQ0VfSU5GTwotCiAjZGVmaW5lIFNSX0JVRkZFUl9TSVpFICAgICAgICAgICAgNQogI2RlZmluZSBDUl9CVUZGRVJfU0laRSAgICAgICAgICAgIDUKIApAQCAtMzAwLDExICsyOTAsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBHbG9iYWwgVmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qIEZiY29uIHZhcmlhYmxlcyAqLwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKIHN0YXRpYyBzdHJ1Y3QgZmJfaW5mbyogZmJfaW5mbzsKLSNlbHNlCi1zdGF0aWMgc3RydWN0IGZiX2luZm8gWEdJX2ZiX2luZm87Ci0jZW5kaWYKIAogCiBzdGF0aWMgaW50ICAgIHZpZGVvX3R5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CkBAIC0zMzYsMTIgKzMyMiw4IEBACiAJLnZzeW5jX2xlbgk9IDAsCiAJLnN5bmMJCT0gMCwKIAkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkKLQkucmVzZXJ2ZWQJPSB7MCwgMCwgMCwgMCwgMCwgMH0KLSNlbmRpZgogfTsKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKIHN0YXRpYyBzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gWEdJZmJfZml4ID0gewogCS5pZAkJPSAiWEdJIiwKIAkudHlwZQkJPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFMsCkBAIC0zNTAsMjggKzMzMiw3IEBACiB9Owogc3RhdGljIGNoYXIgbXlpZFsyMF07CiBzdGF0aWMgdTMyIHBzZXVkb19wYWxldHRlWzE3XTsKLSNlbmRpZgogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi1zdGF0aWMgc3RydWN0IGRpc3BsYXkgWEdJX2Rpc3A7Ci0KLXN0YXRpYyBzdHJ1Y3QgZGlzcGxheV9zd2l0Y2ggWEdJZmJfc3c7Ci0KLXN0YXRpYyBzdHJ1Y3QgewotCXUxNiBibHVlLCBncmVlbiwgcmVkLCBwYWQ7Ci19IFhHSV9wYWxldHRlWzI1Nl07Ci0KLXN0YXRpYyB1bmlvbiB7Ci0jaWZkZWYgRkJDT05fSEFTX0NGQjE2Ci0JdTE2IGNmYjE2WzE2XTsKLSNlbmRpZgotI2lmZGVmIEZCQ09OX0hBU19DRkIzMgotCXUzMiBjZmIzMlsxNl07Ci0jZW5kaWYKLX0gWEdJX2ZiY29uX2NtYXA7Ci0KLXN0YXRpYyBpbnQgWEdJZmJfaW52ZXJzZSA9IDA7Ci0jZW5kaWYKIAogLyogZGlzcGxheSBzdGF0dXMgKi8KIHN0YXRpYyBpbnQgWEdJZmJfb2ZmID0gMDsKQEAgLTM4MCw5ICszNDEsNiBAQAogc3RhdGljIGludCBYR0l2Z2FfZW5hYmxlZCA9IDA7CiBzdGF0aWMgaW50IFhHSWZiX3VzZXJvbSA9IDA7CiAvL3N0YXRpYyBpbnQgWEdJZmJfdXNlb2VtID0gLTE7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi1zdGF0aWMgaW50IGN1cnJjb24gPSAwOwotI2VuZGlmCiAKIC8qIGdsb2JhbCBmbGFncyAqLwogc3RhdGljIGludCBYR0lmYl9yZWdpc3RlcmVkOwpAQCAtNDE1LDEwICszNzMsMTAgQEAKIC8qIFhHSWZiX2luZm8gWEdJZmJpbmZvOyAqLwogCiAvKiBUVzogSGFyZHdhcmUgZXh0ZW5zaW9uOyBjb250YWlucyBkYXRhIG9uIGhhcmR3YXJlICovCi1IV19ERVZJQ0VfRVhURU5TSU9OIFhHSWh3X2V4dDsKK3N0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gWEdJaHdfZXh0OwogCiAvKiBUVzogWEdJIHByaXZhdGUgc3RydWN0dXJlICovCi1WQl9ERVZJQ0VfSU5GTyAgWEdJX1ByOworc3RydWN0IHZiX2RldmljZV9pbmZvICBYR0lfUHI7CiAKIC8qIGNhcmQgcGFyYW1ldGVycyAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgWEdJZmJfbW1pb19zaXplID0gMDsKQEAgLTUzMCwyOSArNDg4LDIxIEBACiAKIC8qIG1vZGUtcmVsYXRlZCB2YXJpYWJsZXMgKi8KICNpZmRlZiBNT0RVTEUKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiBzdGF0aWMgaW50IHhnaWZiX21vZGVfaWR4ID0gMTsKICNlbHNlCi1zdGF0aWMgaW50IFhHSWZiX21vZGVfaWR4ID0gTU9ERV9JTkRFWF9OT05FOyAgLyogRG9uJ3QgdXNlIGEgbW9kZSBieSBkZWZhdWx0IGlmIHdlIGFyZSBhIG1vZHVsZSAqLwotI2VuZGlmCi0jZWxzZQotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKIHN0YXRpYyBpbnQgeGdpZmJfbW9kZV9pZHggPSAtMTsgICAgICAgICAgICAgICAvKiBVc2UgYSBkZWZhdWx0IG1vZGUgaWYgd2UgYXJlIGluc2lkZSB0aGUga2VybmVsICovCi0jZWxzZQotc3RhdGljIGludCBYR0lmYl9tb2RlX2lkeCA9IC0xOwotI2VuZGlmCiAjZW5kaWYKIHU4ICBYR0lmYl9tb2RlX25vICA9IDA7CiB1OCAgWEdJZmJfcmF0ZV9pZHggPSAwOwogCiAvKiBUVzogQ1IzNiBldmFsdWF0aW9uICovCi1jb25zdCBVU0hPUlQgWEdJMzAwcGFuZWx0eXBlW10gPQorY29uc3QgdW5zaWduZWQgc2hvcnQgWEdJMzAwcGFuZWx0eXBlW10gPQogICAgIHsgTENEX1VOS05PV04sICAgTENEXzgwMHg2MDAsICBMQ0RfMTAyNHg3NjgsICBMQ0RfMTI4MHgxMDI0LAogICAgICAgTENEXzEyODB4OTYwLCAgTENEXzY0MHg0ODAsICBMQ0RfMTAyNHg2MDAsICBMQ0RfMTE1Mng3NjgsCiAgICAgICAgTENEXzEwMjR4NzY4LCBMQ0RfMTAyNHg3NjgsICBMQ0RfMTAyNHg3NjgsCiAgICAgICBMQ0RfMTAyNHg3NjgsICBMQ0RfMTAyNHg3NjgsIExDRF8xMDI0eDc2OCwgIExDRF8xMDI0eDc2OCB9OwogCi1jb25zdCBVU0hPUlQgWEdJMzEwcGFuZWx0eXBlW10gPQorY29uc3QgdW5zaWduZWQgc2hvcnQgWEdJMzEwcGFuZWx0eXBlW10gPQogICAgIHsgTENEX1VOS05PV04sICAgTENEXzgwMHg2MDAsICBMQ0RfMTAyNHg3NjgsICBMQ0RfMTI4MHgxMDI0LAogICAgICAgTENEXzY0MHg0ODAsICAgTENEXzEwMjR4NjAwLCBMQ0RfMTE1Mng4NjQsICBMQ0RfMTI4MHg5NjAsCiAgICAgICBMQ0RfMTE1Mng3NjgsICBMQ0RfMTQwMHgxMDUwLExDRF8xMjgweDc2OCwgIExDRF8xNjAweDEyMDAsCkBAIC02NDgsMTcgKzU5OCw2IEBACiAJeyAwLCAgICAgIDAsICAgICAgIiIgICAgICAgLCAiIiAgICAgICB9CiB9OwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0vKiBPZmZzY3JlZW4gbGF5b3V0ICovCi10eXBlZGVmIHN0cnVjdCBfWEdJX0dMWUlORk8gewotCXVuc2lnbmVkIGNoYXIgY2g7Ci0JaW50IGZvbnR3aWR0aDsKLQlpbnQgZm9udGhlaWdodDsKLQl1OCBnbWFza1s3Ml07Ci0JaW50IG5nbWFzazsKLX0gWEdJX0dMWUlORk87Ci0jZW5kaWYKLQogdHlwZWRlZiBzdHJ1Y3QgX1hHSV9PSCB7CiAJc3RydWN0IF9YR0lfT0ggKnBvaF9uZXh0OwogCXN0cnVjdCBfWEdJX09IICpwb2hfcHJldjsKQEAgLTg1Miw1MCArNzkxLDYgQEAKIAogCiAvKiBmYmRldiByb3V0aW5lcyAqLwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotICAgICAgIGludAlYR0lmYl9pbml0KHZvaWQpOwotc3RhdGljIGludCAgICAgIFhHSWZiX2dldF9maXgoc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXgsCi0JCQkgICAgICBpbnQgY29uLAotCQkJICAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pOwotc3RhdGljIGludCAgICAgIFhHSWZiX2dldF92YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCi0JCQkgICAgICBpbnQgY29uLAotCQkJICAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pOwotc3RhdGljIGludCAgICAgIFhHSWZiX3NldF92YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCi0JCQkgICAgICBpbnQgY29uLAotCQkJICAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pOwotc3RhdGljIHZvaWQgICAgIFhHSWZiX2NydGNfdG9fdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKTsKLXN0YXRpYyBpbnQgICAgICBYR0lmYl9nZXRfY21hcChzdHJ1Y3QgZmJfY21hcCAqY21hcCwKLQkJCSAgICAgICBpbnQga3NwYywKLQkJCSAgICAgICBpbnQgY29uLAotCQkJICAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLXN0YXRpYyBpbnQgICAgICBYR0lmYl9zZXRfY21hcChzdHJ1Y3QgZmJfY21hcCAqY21hcCwKLQkJCSAgICAgICBpbnQga3NwYywKLQkJCSAgICAgICBpbnQgY29uLAotCQkJICAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLXN0YXRpYyBpbnQgICAgICBYR0lmYl91cGRhdGVfdmFyKGludCBjb24sCi0JCQkJIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLXN0YXRpYyBpbnQgICAgICBYR0lmYl9zd2l0Y2goaW50IGNvbiwKLQkJCSAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pOwotc3RhdGljIHZvaWQgICAgIFhHSWZiX2JsYW5rKGludCBibGFuaywKLQkJCSAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci1zdGF0aWMgdm9pZCAgICAgWEdJZmJfc2V0X2Rpc3AoaW50IGNvbiwKLQkJCSAgICAgICBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci1zdGF0aWMgaW50ICAgICAgWEdJX2dldGNvbHJlZyh1bnNpZ25lZCByZWdubywgdW5zaWduZWQgKnJlZCwgdW5zaWduZWQgKmdyZWVuLAotCQkJICAgICAgdW5zaWduZWQgKmJsdWUsIHVuc2lnbmVkICp0cmFuc3AsCi0JCQkgICAgICBzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyk7Ci1zdGF0aWMgdm9pZCAgICAgWEdJZmJfZG9faW5zdGFsbF9jbWFwKGludCBjb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLXN0YXRpYyB2b2lkICAgICBYR0lfZ2V0X2dseXBoKHN0cnVjdCBmYl9pbmZvICppbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEdJX0dMWUlORk8gKmdseSk7Ci1zdGF0aWMgaW50IAlYR0lmYl9tbWFwKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJICAgICAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Ci1zdGF0aWMgaW50ICAgICAgWEdJZmJfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCSAgICAgICAJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnLCBpbnQgY29uLAotCQkgICAgICAgCSAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci0jZW5kaWYKLQotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKIFhHSUlOSVRTVEFUSUMgaW50IF9faW5pdCB4Z2lmYl9pbml0KHZvaWQpOwogc3RhdGljIGludCAgICAgIFhHSWZiX3NldF9wYXIoc3RydWN0IGZiX2luZm8gKmluZm8pOwogc3RhdGljIGludCAgICAgIFhHSWZiX2JsYW5rKGludCBibGFuaywKQEAgLTkwNywzNiArODAyLDI1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCk7CiBleHRlcm4gdm9pZCAgICAgZmJjb25fWEdJX2NvcHlhcmVhKHN0cnVjdCBmYl9pbmZvICppbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKmFyZWEpOwotI2lmIDAKLWV4dGVybiB2b2lkICAgICBjZmJfaW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSk7Ci0jZW5kaWYKIGV4dGVybiBpbnQgICAgICBmYmNvbl9YR0lfc3luYyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDE1KQogc3RhdGljIGludCBYR0lmYl9pb2N0bChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdW5zaWduZWQgaW50IGNtZCwKIAkJCSAgICB1bnNpZ25lZCBsb25nIGFyZyk7Ci0jZWxzZQotc3RhdGljIGludCAgICAgIFhHSWZiX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JIAkJICAgIHN0cnVjdCBmaWxlICpmaWxlLAotCQkgICAgICAgCSAgICB1bnNpZ25lZCBpbnQgY21kLAotCQkJICAgIHVuc2lnbmVkIGxvbmcgYXJnLAotCQkgICAgICAgCSAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci0jZW5kaWYKIAogLyoKIGV4dGVybiBpbnQJWEdJZmJfbW9kZV9yYXRlX3RvX2RjbG9jayhWQl9ERVZJQ0VfSU5GTyAqWEdJX1ByLAotCQkJICAgICAgUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwKKwkJCSAgICAgIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAogCQkJICAgICAgdW5zaWduZWQgY2hhciBtb2Rlbm8sIHVuc2lnbmVkIGNoYXIgcmF0ZWluZGV4KTsKLWV4dGVybiBpbnQgICAgICBYR0lmYl9tb2RlX3JhdGVfdG9fZGRhdGEoVkJfREVWSUNFX0lORk8gKlhHSV9QciwgUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwKK2V4dGVybiBpbnQgICAgICBYR0lmYl9tb2RlX3JhdGVfdG9fZGRhdGEoVkJfREVWSUNFX0lORk8gKlhHSV9Qciwgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCiAJCQkgdW5zaWduZWQgY2hhciBtb2Rlbm8sIHVuc2lnbmVkIGNoYXIgcmF0ZWluZGV4LAogCQkJIHVuc2lnbmVkIGludCAqbGVmdF9tYXJnaW4sIHVuc2lnbmVkIGludCAqcmlnaHRfbWFyZ2luLAogCQkJIHVuc2lnbmVkIGludCAqdXBwZXJfbWFyZ2luLCB1bnNpZ25lZCBpbnQgKmxvd2VyX21hcmdpbiwKIAkJCSB1bnNpZ25lZCBpbnQgKmhzeW5jX2xlbiwgdW5zaWduZWQgaW50ICp2c3luY19sZW4sCiAJCQkgdW5zaWduZWQgaW50ICpzeW5jLCB1bnNpZ25lZCBpbnQgKnZtb2RlKTsKICovCi0jZW5kaWYKLQkJCWV4dGVybiAgIEJPT0xFQU4gIFhHSV9TZWFyY2hNb2RlSUQoIFVTSE9SVCBNb2RlTm8sVVNIT1JUICAqTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyApOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgWEdJX1NlYXJjaE1vZGVJRCh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCQkJdW5zaWduZWQgc2hvcnQgKk1vZGVJZEluZGV4LAorCQkJCXN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKIHN0YXRpYyBpbnQgICAgICBYR0lmYl9nZXRfZml4KHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyAqZml4LCBpbnQgY29uLAogCQkJICAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pOwogCkBAIC05NTYsMTAgKzg0MCwxMCBAQAogc3RhdGljIHZvaWQgICAgIFhHSWZiX3ByZV9zZXRtb2RlKHZvaWQpOwogc3RhdGljIHZvaWQgICAgIFhHSWZiX3Bvc3Rfc2V0bW9kZSh2b2lkKTsKIAotc3RhdGljIEJPT0xFQU4gIFhHSWZiX0NoZWNrVkJSZXRyYWNlKHZvaWQpOwotc3RhdGljIEJPT0xFQU4gIFhHSWZiY2hlY2t2cmV0cmFjZWNydDIodm9pZCk7Ci1zdGF0aWMgQk9PTEVBTiAgWEdJZmJjaGVja3ZyZXRyYWNlY3J0MSh2b2lkKTsKLXN0YXRpYyBCT09MRUFOICBYR0lmYl9icmlkZ2Vpc3NsYXZlKHZvaWQpOworc3RhdGljIHVuc2lnbmVkIGNoYXIgIFhHSWZiX0NoZWNrVkJSZXRyYWNlKHZvaWQpOworc3RhdGljIHVuc2lnbmVkIGNoYXIgIFhHSWZiY2hlY2t2cmV0cmFjZWNydDIodm9pZCk7CitzdGF0aWMgdW5zaWduZWQgY2hhciAgWEdJZmJjaGVja3ZyZXRyYWNlY3J0MSh2b2lkKTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICBYR0lmYl9icmlkZ2Vpc3NsYXZlKHZvaWQpOwogCiBzdHJ1Y3QgWEdJX21lbXJlcSB7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CkBAIC05OTQsMzAgKzg3OCw0MCBAQAogc3RhdGljIHZvaWQgICAgIFhHSWZiX2ZyZWVfbm9kZShYR0lfT0ggKnBvaCk7CiAKIC8qIEludGVybmFsIHJvdXRpbmVzIHRvIGFjY2VzcyBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSAqLwotQk9PTEVBTiAgICAgICAgIFhHSWZiX3F1ZXJ5X1ZHQV9jb25maWdfc3BhY2UoUFhHSV9IV19ERVZJQ0VfSU5GTyBwWEdJaHdfZXh0LAotCSAgICAgICAgICAJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2V0LCB1bnNpZ25lZCBsb25nICp2YWx1ZSk7Cit1bnNpZ25lZCBjaGFyIFhHSWZiX3F1ZXJ5X1ZHQV9jb25maWdfc3BhY2Uoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqcFhHSWh3X2V4dCwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgc2V0LAorCQkJCQkgICB1bnNpZ25lZCBsb25nICp2YWx1ZSk7CiAvL0JPT0xFQU4gICAgICAgICBYR0lmYl9xdWVyeV9ub3J0aF9icmlkZ2Vfc3BhY2UoUFhHSV9IV19ERVZJQ0VfSU5GTyBwWEdJaHdfZXh0LAogLy8JICAgICAgICAgCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNldCwgdW5zaWduZWQgbG9uZyAqdmFsdWUpOwogCiAKIC8qIFJvdXRpbmVzIGZyb20gaW5pdC5jL2luaXQzMDEuYyAqLwotZXh0ZXJuIHZvaWQgICAgIEluaXRUbzMzMFBvaW50ZXIoVUNIQVIsUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotZXh0ZXJuIEJPT0xFQU4gIFhHSUluaXROZXcoUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbik7Ci1leHRlcm4gQk9PTEVBTiAgWEdJU2V0TW9kZU5ldyhQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCBVU0hPUlQgTW9kZU5vKTsKK2V4dGVybiB2b2lkICAgICBJbml0VG8zMzBQb2ludGVyKHVuc2lnbmVkIGNoYXIsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7CitleHRlcm4gdW5zaWduZWQgY2hhciAgWEdJSW5pdE5ldyhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbik7CitleHRlcm4gdW5zaWduZWQgY2hhciBYR0lTZXRNb2RlTmV3KHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJCSAgIHVuc2lnbmVkIHNob3J0IE1vZGVObyk7CiAvL2V4dGVybiB2b2lkICAgICBYR0lfU2V0RW5hYmxlRHN0bihWQl9ERVZJQ0VfSU5GTyAqWEdJX1ByKTsKLWV4dGVybiB2b2lkICAgICBYR0lfTG9uZ1dhaXQoVkJfREVWSUNFX0lORk8gKlhHSV9Qcik7Ci1leHRlcm4gVVNIT1JUICAgWEdJX0dldFJhdGVQdHJDUlQyKCBQWEdJX0hXX0RFVklDRV9JTkZPIHBYR0lIV0RFLCBVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCxQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApOworZXh0ZXJuIHZvaWQgICAgIFhHSV9Mb25nV2FpdChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKlhHSV9Qcik7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgWEdJX0dldFJhdGVQdHJDUlQyKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKnBYR0lIV0RFLAorCQkJCQkgdW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkJCQkgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCQkJCSBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwogLyogVFc6IENocm9udGVsIFRWIGZ1bmN0aW9ucyAqLwotZXh0ZXJuIFVTSE9SVCAJWEdJX0dldENINzAweChWQl9ERVZJQ0VfSU5GTyAqWEdJX1ByLCBVU0hPUlQgdGVtcGJ4KTsKLWV4dGVybiB2b2lkIAlYR0lfU2V0Q0g3MDB4KFZCX0RFVklDRV9JTkZPICpYR0lfUHIsIFVTSE9SVCB0ZW1wYngpOwotZXh0ZXJuIFVTSE9SVCAJWEdJX0dldENINzAxeChWQl9ERVZJQ0VfSU5GTyAqWEdJX1ByLCBVU0hPUlQgdGVtcGJ4KTsKLWV4dGVybiB2b2lkIAlYR0lfU2V0Q0g3MDF4KFZCX0RFVklDRV9JTkZPICpYR0lfUHIsIFVTSE9SVCB0ZW1wYngpOwotZXh0ZXJuIHZvaWQgICAgIFhHSV9TZXRDSDcweHhBTkRPUihWQl9ERVZJQ0VfSU5GTyAqWEdJX1ByLCBVU0hPUlQgdGVtcGF4LFVTSE9SVCB0ZW1wYmgpOwotZXh0ZXJuIHZvaWQgICAgIFhHSV9EREMyRGVsYXkoVkJfREVWSUNFX0lORk8gKlhHSV9QciwgVVNIT1JUIGRlbGF5dGltZSk7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgWEdJX0dldENINzAweChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKlhHSV9QciwKKwkJCQkgICAgdW5zaWduZWQgc2hvcnQgdGVtcGJ4KTsKK2V4dGVybiB2b2lkIFhHSV9TZXRDSDcwMHgoc3RydWN0IHZiX2RldmljZV9pbmZvICpYR0lfUHIsIHVuc2lnbmVkIHNob3J0IHRlbXBieCk7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgWEdJX0dldENINzAxeChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKlhHSV9QciwKKwkJCQkgICAgdW5zaWduZWQgc2hvcnQgdGVtcGJ4KTsKK2V4dGVybiB2b2lkIFhHSV9TZXRDSDcwMXgoc3RydWN0IHZiX2RldmljZV9pbmZvICpYR0lfUHIsIHVuc2lnbmVkIHNob3J0IHRlbXBieCk7CitleHRlcm4gdm9pZCBYR0lfU2V0Q0g3MHh4QU5ET1Ioc3RydWN0IHZiX2RldmljZV9pbmZvICpYR0lfUHIsCisJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgdGVtcGF4LAorCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IHRlbXBiaCk7CitleHRlcm4gdm9pZCBYR0lfRERDMkRlbGF5KHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqWEdJX1ByLCB1bnNpZ25lZCBzaG9ydCBkZWxheXRpbWUpOwogCiAvKiBUVzogU2Vuc2luZyByb3V0aW5lcyAqLwogdm9pZCAgICAgICAgICAgIFhHSV9TZW5zZTMweCh2b2lkKTsKIGludCAgICAgICAgICAgICBYR0lEb1NlbnNlKGludCB0ZW1wYmwsIGludCB0ZW1wYmgsIGludCB0ZW1wY2wsIGludCB0ZW1wY2gpOwogCi1leHRlcm4gWEdJMjFfTFZEU0NhcFN0cnVjdCBYR0kyMV9MQ0RDYXBMaXN0WzEzXTsKK2V4dGVybiBzdHJ1Y3QgWEdJMjFfTFZEU0NhcFN0cnVjdCBYR0kyMV9MQ0RDYXBMaXN0WzEzXTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL1hHSV9tYWluXzI2LmMgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJX21haW5fMjYuYwppbmRleCA4NjcwMTJiLi45NzZjMzliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJX21haW5fMjYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJX21haW5fMjYuYwpAQCAtMjgsOSArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0KLSNpbmNsdWRlICJvc2RlZi5oIgogCiAKICNpZm5kZWYgWEdJRkJfUEFOCkBAIC0xNjQsMTYgKzE2MSwxNSBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0gSGFyZHdhcmUgQWNjZXNzIFJvdXRpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLSNpZmRlZiBMSU5VWF9LRVJORUwKIGludAotWEdJZmJfbW9kZV9yYXRlX3RvX2RjbG9jayhWQl9ERVZJQ0VfSU5GTyAqWEdJX1ByLCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLAorWEdJZmJfbW9kZV9yYXRlX3RvX2RjbG9jayhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKlhHSV9Qciwgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCiAJCQkgIHVuc2lnbmVkIGNoYXIgbW9kZW5vLCB1bnNpZ25lZCBjaGFyIHJhdGVpbmRleCkKIHsKLSAgICBVU0hPUlQgTW9kZU5vID0gbW9kZW5vOwotICAgIFVTSE9SVCBNb2RlSWRJbmRleCA9IDAsIENsb2NrSW5kZXggPSAwOwotICAgIFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXggPSAwOworICAgIHVuc2lnbmVkIHNob3J0IE1vZGVObyA9IG1vZGVubzsKKyAgICB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCA9IDAsIENsb2NrSW5kZXggPSAwOworICAgIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCA9IDA7CiAKLSAgICAvKlVMT05HICB0ZW1wID0gMDsqLworICAgIC8qdW5zaWduZWQgbG9uZyAgdGVtcCA9IDA7Ki8KICAgICBpbnQgICAgQ2xvY2s7CiAgICAgWEdJX1ByLT5ST01BZGRyICA9IEh3RGV2aWNlRXh0ZW5zaW9uLT5walZpcnR1YWxSb21CYXNlOwogICAgIEluaXRUbzMzMFBvaW50ZXIoIEh3RGV2aWNlRXh0ZW5zaW9uLT5qQ2hpcFR5cGUsIFhHSV9QciApIDsKQEAgLTIwMSwxNiArMTk3LDE2IEBACiB9CiAKIGludAotWEdJZmJfbW9kZV9yYXRlX3RvX2RkYXRhKFZCX0RFVklDRV9JTkZPICpYR0lfUHIsIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sCitYR0lmYl9tb2RlX3JhdGVfdG9fZGRhdGEoc3RydWN0IHZiX2RldmljZV9pbmZvICpYR0lfUHIsIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAogCQkJIHVuc2lnbmVkIGNoYXIgbW9kZW5vLCB1bnNpZ25lZCBjaGFyIHJhdGVpbmRleCwKIAkJCSB1MzIgKmxlZnRfbWFyZ2luLCB1MzIgKnJpZ2h0X21hcmdpbiwKIAkJCSB1MzIgKnVwcGVyX21hcmdpbiwgdTMyICpsb3dlcl9tYXJnaW4sCiAJCQkgdTMyICpoc3luY19sZW4sIHUzMiAqdnN5bmNfbGVuLAogCQkJIHUzMiAqc3luYywgdTMyICp2bW9kZSkKIHsKLSAgICBVU0hPUlQgTW9kZU5vID0gbW9kZW5vOwotICAgIFVTSE9SVCBNb2RlSWRJbmRleCA9IDAsIGluZGV4ID0gMDsKLSAgICBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBzaG9ydCBNb2RlTm8gPSBtb2Rlbm87CisgICAgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXggPSAwLCBpbmRleCA9IDA7CisgICAgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4ID0gMDsKIAogICAgIHVuc2lnbmVkIHNob3J0IFZSRSwgVkJFLCBWUlMsIFZCUywgVkRFLCBWVDsKICAgICB1bnNpZ25lZCBzaG9ydCBIUkUsIEhCRSwgSFJTLCBIQlMsIEhERSwgSFQ7CkBAIC0zNzUsMjYgKzM3MSwxMyBAQAogICAgICAgfQogICAgIH0KIAotI2lmIDAgIC8qIFRoYXQncyBidWxsc2hpdCwgb25seSB0aGUgcmVzb2x1dGlvbiBuZWVkcyB0byBiZSBzaGlmdGVkICovCi0gICAgaWYoKCp2bW9kZSAmIEZCX1ZNT0RFX01BU0spID09IEZCX1ZNT0RFX0lOVEVSTEFDRUQpIHsKLSAgICAgICAqdXBwZXJfbWFyZ2luIDw8PSAxOwotICAgICAgICpsb3dlcl9tYXJnaW4gPDw9IDE7Ci0gICAgICAgKnZzeW5jX2xlbiA8PD0gMTsKLSAgICB9IGVsc2UgaWYoKCp2bW9kZSAmIEZCX1ZNT0RFX01BU0spID09IEZCX1ZNT0RFX0RPVUJMRSkgewotICAgICAgICp1cHBlcl9tYXJnaW4gPj49IDE7Ci0gICAgICAgKmxvd2VyX21hcmdpbiA+Pj0gMTsKLSAgICAgICAqdnN5bmNfbGVuID4+PSAxOwotICAgIH0KLSNlbmRpZgotCiAgICAgcmV0dXJuIDE7CiB9CiAKLSNlbmRpZgogCiAKIAotdm9pZCBYR0lSZWdJbml0KFZCX0RFVklDRV9JTkZPICpYR0lfUHIsIFVMT05HIEJhc2VBZGRyKQordm9pZCBYR0lSZWdJbml0KHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqWEdJX1ByLCB1bnNpZ25lZCBsb25nIEJhc2VBZGRyKQogewogICAgWEdJX1ByLT5SZWxJTyA9IEJhc2VBZGRyOwogICAgWEdJX1ByLT5QM2M0ID0gQmFzZUFkZHIgKyAweDE0OwpAQCAtNDMyLDggKzQxNSw4IEBACiAKIC8qIC0tLS0tLS0tLS0tLSBJbnRlcmZhY2UgZm9yIGluaXQgJiBtb2RlIHN3aXRjaGluZyBjb2RlIC0tLS0tLS0tLS0tLS0gKi8KIAotQk9PTEVBTgotWEdJZmJfcXVlcnlfVkdBX2NvbmZpZ19zcGFjZShQWEdJX0hXX0RFVklDRV9JTkZPIHBYR0lod19leHQsCit1bnNpZ25lZCBjaGFyCitYR0lmYl9xdWVyeV9WR0FfY29uZmlnX3NwYWNlKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKnBYR0lod19leHQsCiAJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2V0LCB1bnNpZ25lZCBsb25nICp2YWx1ZSkKIHsKIAlzdGF0aWMgc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOwpAQCAtNDQ1LDEwICs0MjgsMTAgQEAKIAkJRFBSSU5USygiWEdJZmI6IFNldCBvZmZzZXQgMHglbHggdG8gMHglbHhcbiIsIG9mZnNldCwgKnZhbHVlKTsKIAogCWlmICghaW5pdCkgewotCQlpbml0ID0gVFJVRTsKKwkJaW5pdCA9IDE7CiAJCXBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX1hHLCB4Z2lfdmlkZW9faW5mby5jaGlwX2lkLCBwZGV2KTsKIAkJaWYgKHBkZXYpIHsKLQkJCXZhbGlkX3BkZXYgPSBUUlVFOworCQkJdmFsaWRfcGRldiA9IDE7CiAJCQlwY2lfZGV2X3B1dChwZGV2KTsKIAkJfQogCX0KQEAgLTQ1Niw3ICs0MzksNyBAQAogCWlmICghdmFsaWRfcGRldikgewogCQlwcmludGsoS0VSTl9ERUJVRyAiWEdJZmI6IENhbid0IGZpbmQgWEdJICVkIFZHQSBkZXZpY2UuXG4iLAogCQkJCXhnaV92aWRlb19pbmZvLmNoaXBfaWQpOwotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiAwOwogCX0KIAogCWlmIChzZXQgPT0gMCkKQEAgLTQ2NCwxMCArNDQ3LDEwIEBACiAJZWxzZQogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIG9mZnNldCwgKHUzMikoKnZhbHVlKSk7CiAKLQlyZXR1cm4gVFJVRTsKKwlyZXR1cm4gMTsKIH0KIAotLypCT09MRUFOIFhHSWZiX3F1ZXJ5X25vcnRoX2JyaWRnZV9zcGFjZShQWEdJX0hXX0RFVklDRV9JTkZPIHBYR0lod19leHQsCisvKnVuc2lnbmVkIGNoYXIgWEdJZmJfcXVlcnlfbm9ydGhfYnJpZGdlX3NwYWNlKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKnBYR0lod19leHQsCiAJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2V0LCB1bnNpZ25lZCBsb25nICp2YWx1ZSkKIHsKIAlzdGF0aWMgc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOwpAQCAtNDc1LDcgKzQ1OCw3IEBACiAJdTE2IG5icmlkZ2VfaWQgPSAwOwogCiAJaWYgKCFpbml0KSB7Ci0JCWluaXQgPSBUUlVFOworCQlpbml0ID0gMTsKIAkJc3dpdGNoICh4Z2lfdmlkZW9faW5mby5jaGlwKSB7CiAJCWNhc2UgWEdJXzU0MDoKIAkJCW5icmlkZ2VfaWQgPSBQQ0lfREVWSUNFX0lEX1hHXzU0MDsKQEAgLTUwMiwxMyArNDg1LDEzIEBACiAKIAkJcGRldiA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX1NJLCBuYnJpZGdlX2lkLCBwZGV2KTsKIAkJaWYgKHBkZXYpCi0JCQl2YWxpZF9wZGV2ID0gVFJVRTsKKwkJCXZhbGlkX3BkZXYgPSAxOwogCX0KIAogCWlmICghdmFsaWRfcGRldikgewogCQlwcmludGsoS0VSTl9ERUJVRyAiWEdJZmI6IENhbid0IGZpbmQgWEdJICVkIE5vcnRoIEJyaWRnZSBkZXZpY2UuXG4iLAogCQkJCW5icmlkZ2VfaWQpOwotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiAwOwogCX0KIAogCWlmIChzZXQgPT0gMCkKQEAgLTUxNiw3ICs0OTksNyBAQAogCWVsc2UKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBvZmZzZXQsICh1MzIpKCp2YWx1ZSkpOwogCi0JcmV0dXJuIFRSVUU7CisJcmV0dXJuIDE7CiB9CiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tIEludGVybmFsIGhlbHBlciByb3V0aW5lcyAtLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNjI3LDcgKzYxMCw4IEBACiAgICAgICAgICAgICAgICAgaSArPSAyNTsKICAgICAgICAgICAgICAgICBqLS07CiAgICAgICAgICAgICAgICAgaysrOwotICAgICAgICB9IHdoaWxlICggKGo+MCkgJiYgKCBrIDwgKHNpemVvZihYR0kyMV9MQ0RDYXBMaXN0KS9zaXplb2YoWEdJMjFfTFZEU0NhcFN0cnVjdCkpICkgKTsKKwl9IHdoaWxlICgoaiA+IDApICYmCisJCSAoayA8IChzaXplb2YoWEdJMjFfTENEQ2FwTGlzdCkvc2l6ZW9mKHN0cnVjdCBYR0kyMV9MVkRTQ2FwU3RydWN0KSkpKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogICAgIHJldHVybiAwOwpAQCAtOTU0LDQ2ICs5MzgsNTIgQEAKIAl9CiB9CiAKLXN0YXRpYyBCT09MRUFOIFhHSWZiX2JyaWRnZWlzc2xhdmUodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSWZiX2JyaWRnZWlzc2xhdmUodm9pZCkKIHsKICAgIHVuc2lnbmVkIGNoYXIgdXNTY3JhdGNoUDFfMDA7CiAKLSAgIGlmKHhnaV92aWRlb19pbmZvLmhhc1ZCID09IEhBU1ZCX05PTkUpIHJldHVybiBGQUxTRTsKKyAgIGlmICh4Z2lfdmlkZW9faW5mby5oYXNWQiA9PSBIQVNWQl9OT05FKQorCSAgIHJldHVybiAwOwogCiAgICBpblhHSUlEWFJFRyhYR0lQQVJUMSwweDAwLHVzU2NyYXRjaFAxXzAwKTsKLSAgIGlmKCAodXNTY3JhdGNoUDFfMDAgJiAweDUwKSA9PSAweDEwKSAgewotCSAgIHJldHVybiBUUlVFOwotICAgfSBlbHNlIHsKLSAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgfQorICAgaWYgKCh1c1NjcmF0Y2hQMV8wMCAmIDB4NTApID09IDB4MTApCisJICAgcmV0dXJuIDE7CisgICBlbHNlCisJICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBCT09MRUFOIFhHSWZiY2hlY2t2cmV0cmFjZWNydDEodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSWZiY2hlY2t2cmV0cmFjZWNydDEodm9pZCkKIHsKICAgIHVuc2lnbmVkIGNoYXIgdGVtcDsKIAogICAgaW5YR0lJRFhSRUcoWEdJQ1IsMHgxNyx0ZW1wKTsKLSAgIGlmKCEodGVtcCAmIDB4ODApKSByZXR1cm4gRkFMU0U7CisgICBpZiAoISh0ZW1wICYgMHg4MCkpCisJICAgcmV0dXJuIDA7CiAKIAogICAgaW5YR0lJRFhSRUcoWEdJU1IsMHgxZix0ZW1wKTsKLSAgIGlmKHRlbXAgJiAweGMwKSByZXR1cm4gRkFMU0U7CisgICBpZiAodGVtcCAmIDB4YzApCisJICAgcmV0dXJuIDA7CiAKLQotICAgaWYoaW5YR0lSRUcoWEdJSU5QU1RBVCkgJiAweDA4KSByZXR1cm4gVFJVRTsKLSAgIGVsc2UgCQkJICAgcmV0dXJuIEZBTFNFOworICAgaWYgKGluWEdJUkVHKFhHSUlOUFNUQVQpICYgMHgwOCkKKwkgICByZXR1cm4gMTsKKyAgIGVsc2UKKwkgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIEJPT0xFQU4gWEdJZmJjaGVja3ZyZXRyYWNlY3J0Mih2b2lkKQorc3RhdGljIHVuc2lnbmVkIGNoYXIgWEdJZmJjaGVja3ZyZXRyYWNlY3J0Mih2b2lkKQogewogICAgdW5zaWduZWQgY2hhciB0ZW1wOwotICAgaWYoeGdpX3ZpZGVvX2luZm8uaGFzVkIgPT0gSEFTVkJfTk9ORSkgcmV0dXJuIEZBTFNFOworICAgaWYgKHhnaV92aWRlb19pbmZvLmhhc1ZCID09IEhBU1ZCX05PTkUpCisJICAgcmV0dXJuIDA7CiAgICBpblhHSUlEWFJFRyhYR0lQQVJUMSwgMHgzMCwgdGVtcCk7Ci0gICBpZih0ZW1wICYgMHgwMikgcmV0dXJuIEZBTFNFOwotICAgZWxzZSAJICAgcmV0dXJuIFRSVUU7CisgICBpZiAodGVtcCAmIDB4MDIpCisJICAgcmV0dXJuIDA7CisgICBlbHNlCisJICAgcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBCT09MRUFOIFhHSWZiX0NoZWNrVkJSZXRyYWNlKHZvaWQpCitzdGF0aWMgdW5zaWduZWQgY2hhciBYR0lmYl9DaGVja1ZCUmV0cmFjZSh2b2lkKQogewogICAgaWYoeGdpX3ZpZGVvX2luZm8uZGlzcF9zdGF0ZSAmIERJU1BUWVBFX0RJU1AyKSB7CiAgICAgICBpZihYR0lmYl9icmlkZ2Vpc3NsYXZlKCkpIHsKQEAgLTEzNTAsMTEgKzEzNDAsNyBAQAogLy8JcHJpbnRrKCJYR0lmYjogaW5zaWRlIHNldF9wYXJcbiIpOwogICAgICAgICBpZigoZXJyID0gWEdJZmJfZG9fc2V0X3ZhcigmaW5mby0+dmFyLCAxLCBpbmZvKSkpCiAJCXJldHVybiBlcnI7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDEwKQotCVhHSWZiX2dldF9maXgoJmluZm8tPmZpeCwgaW5mby0+Y3VycmNvbiwgaW5mbyk7Ci0jZWxzZQogCVhHSWZiX2dldF9maXgoJmluZm8tPmZpeCwgLTEsIGluZm8pOwotI2VuZGlmCiAvLwlwcmludGsoIlhHSWZiOmVuZCBvZiBzZXRfcGFyXG4iKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE1NDAsNTggKzE1MjYsNyBAQAogfQogI2VuZGlmCiAKLSNpZiAwCi1zdGF0aWMgaW50IFhHSWZiX21tYXAoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBmaWxlICpmaWxlLAotCQkgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0OwotCXVuc2lnbmVkIGxvbmcgb2ZmOwotCXUzMiBsZW4sIG1taW9fb2ZmOwogCi0JREVCVUdQUk4oImluc2lkZSBtbWFwIik7Ci0JaWYodm1hLT52bV9wZ29mZiA+ICh+MFVMID4+IFBBR0VfU0hJRlQpKSAgcmV0dXJuIC1FSU5WQUw7Ci0KLQlvZmYgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7Ci0KLQlzdGFydCA9ICh1bnNpZ25lZCBsb25nKSB4Z2lfdmlkZW9faW5mby52aWRlb19iYXNlOwotCWxlbiA9IFBBR0VfQUxJR04oKHN0YXJ0ICYgflBBR0VfTUFTSykgKyB4Z2lfdmlkZW9faW5mby52aWRlb19zaXplKTsKLQlzdGFydCAmPSBQQUdFX01BU0s7Ci0jaWYgMAotCWlmIChvZmYgPj0gbGVuKSB7Ci0JCW9mZiAtPSBsZW47Ci0jZW5kaWYKLQkvKiBCeSBKYWtlIFBhZ2U6IFRyZWF0IG1tYXAgcmVxdWVzdCB3aXRoIG9mZnNldCBiZXlvbmQgaGVhcHN0YXJ0Ci0JICogICAgICAgICAgICAgICBhcyByZXF1ZXN0IGZvciBtYXBwaW5nIHRoZSBtbWlvIGFyZWEKLQkgKi8KLQkjaWYgMQotCW1taW9fb2ZmID0gUEFHRV9BTElHTigoc3RhcnQgJiB+UEFHRV9NQVNLKSArIHhnaV92aWRlb19pbmZvLmhlYXBzdGFydCk7Ci0JaWYob2ZmID49IG1taW9fb2ZmKSB7Ci0JCW9mZiAtPSBtbWlvX29mZjsKLQkJaWYoaW5mby0+dmFyLmFjY2VsX2ZsYWdzKSByZXR1cm4gLUVJTlZBTDsKLQotCQlzdGFydCA9ICh1bnNpZ25lZCBsb25nKSB4Z2lfdmlkZW9faW5mby5tbWlvX2Jhc2U7Ci0JCWxlbiA9IFBBR0VfQUxJR04oKHN0YXJ0ICYgflBBR0VfTUFTSykgKyBYR0lmYl9tbWlvX3NpemUpOwotCX0KLQlzdGFydCAmPSBQQUdFX01BU0s7Ci0JI2VuZGlmCi0JaWYoKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCArIG9mZikgPiBsZW4pCXJldHVybiAtRUlOVkFMOwotCi0Jb2ZmICs9IHN0YXJ0OwotCXZtYS0+dm1fcGdvZmYgPSBvZmYgPj4gUEFHRV9TSElGVDsKLQl2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPOyAgIC8qIGJ5IEpha2UgUGFnZTsgaXMgdGhhdCByZWFsbHkgbmVlZGVkPyAqLwotCi0jaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQotCWlmIChib290X2NwdV9kYXRhLng4NiA+IDMpCi0JCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpIHw9IF9QQUdFX1BDRDsKLSNlbmRpZgotCWlmIChpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCBvZmYgPj4gUEFHRV9TSElGVCwgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAotCQkJCXZtYS0+dm1fcGFnZV9wcm90KSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0KLSAgICAgICAgREVCVUdQUk4oImVuZCBvZiBtbWFwIik7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKIHN0YXRpYyBpbnQgWEdJZmJfYmxhbmsoaW50IGJsYW5rLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAl1OCByZWc7CkBAIC0xNjEwLDE1ICsxNTQ1LDggQEAKIH0KIAogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwxNSkKIHN0YXRpYyBpbnQgWEdJZmJfaW9jdGwoc3RydWN0IGZiX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBjbWQsCiAJCQkgICAgdW5zaWduZWQgbG9uZyBhcmcpCi0jZWxzZQotc3RhdGljIGludCBYR0lmYl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnLAotCQkgICAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCi0jZW5kaWYKLQogewogCURFQlVHUFJOKCJpbnNpZGUgaW9jdGwiKTsKIAlzd2l0Y2ggKGNtZCkgewpAQCAtMTY4Nyw3ICsxNjE1LDcgQEAKIAkJYnJlYWs7CiAJICAgY2FzZSBYR0lGQl9HRVRfSU5GTzogIC8qIFRXOiBOZXcgZm9yIGNvbW11bmljYXRpb24gd2l0aCBYIGRyaXZlciAqLwogCSAgICAgICAgewotCQkJWEdJZmJfaW5mbyAqeCA9IChYR0lmYl9pbmZvICopYXJnOworCQkJc3RydWN0IFhHSWZiX2luZm8gKnggPSAoc3RydWN0IFhHSWZiX2luZm8gKilhcmc7CiAKIAkJCS8veC0+WEdJZmJfaWQgPSBYR0lGQl9JRDsKIAkJCXgtPlhHSWZiX3ZlcnNpb24gPSBWRVJfTUFKT1I7CkBAIC0xNzg2LDkgKzE3MTQsNiBAQAogCS5mYl9maWxscmVjdCAgPSBmYmNvbl9YR0lfZmlsbHJlY3QsCiAJLmZiX2NvcHlhcmVhICA9IGZiY29uX1hHSV9jb3B5YXJlYSwKIAkuZmJfaW1hZ2VibGl0ID0gY2ZiX2ltYWdlYmxpdCwKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTUpCi0JLmZiX2N1cnNvciAgICA9IHNvZnRfY3Vyc29yLAotI2VuZGlmCiAJLmZiX3N5bmMgICAgICA9IGZiY29uX1hHSV9zeW5jLAogCS5mYl9pb2N0bCAgICAgPQlYR0lmYl9pb2N0bCwKIC8vCS5mYl9tbWFwICAgICAgPQlYR0lmYl9tbWFwLApAQCAtMjAwOCw5ICsxOTMzLDkgQEAKIAkJYnJlYWs7CiAJICAgZGVmYXVsdDoKIAkJeGdpX3ZpZGVvX2luZm8uaGFzVkIgPSBIQVNWQl9OT05FOwotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiAwOwogCX0KLQlyZXR1cm4gVFJVRTsKKwlyZXR1cm4gMTsKIH0KIAogCkBAIC0yNjY0LDEzICsyNTg5LDcgQEAKIHN0YXRpYyB2b2lkIFhHSWZiX3Bvc3Rfc2V0bW9kZSh2b2lkKQogewogCXU4IHJlZzsKLQlCT09MRUFOIGRvaXQgPSBUUlVFOwotI2lmIDAJLyogVFc6IFdyb25nOiBJcyBub3QgaW4gTU1JTyBzcGFjZSwgYnV0IGluIFJBTSAqLwotCS8qIEJhY2t1cCBtb2RlIG51bWJlciB0byBNTUlPIHNwYWNlICovCi0JaWYoeGdpX3ZpZGVvX2luZm8ubW1pb192YmFzZSkgewotCSAgKih2b2xhdGlsZSB1OCAqKSgoKHU4Kil4Z2lfdmlkZW9faW5mby5tbWlvX3ZiYXNlKSArIDB4NDQ5KSA9ICh1bnNpZ25lZCBjaGFyKVhHSWZiX21vZGVfbm87Ci0JfQotI2VuZGlmCisJdW5zaWduZWQgY2hhciBkb2l0ID0gMTsKIC8qCW91dFhHSUlEWFJFRyhYR0lTUixJTkRfWEdJX1BBU1NXT1JELFhHSV9QQVNTV09SRCk7CiAJb3V0WEdJSURYUkVHKFhHSUNSLDB4MTMsMHgwMCk7CiAJc2V0WEdJSURYUkVHKFhHSVNSLDB4MEUsMHhGMCwweDAxKTsKQEAgLTI2NzgsMTEgKzI1OTcsMTEgQEAKIAlpZiAoeGdpX3ZpZGVvX2luZm8udmlkZW9fYnBwID09IDgpIHsKIAkJLyogVFc6IFdlIGNhbid0IHN3aXRjaCBvZmYgQ1JUMSBvbiBMVkRTL0Nocm9udGVsIGluIDhicHAgTW9kZXMgKi8KIAkJaWYgKCh4Z2lfdmlkZW9faW5mby5oYXNWQiA9PSBIQVNWQl9MVkRTKSB8fCAoeGdpX3ZpZGVvX2luZm8uaGFzVkIgPT0gSEFTVkJfTFZEU19DSFJPTlRFTCkpIHsKLQkJCWRvaXQgPSBGQUxTRTsKKwkJCWRvaXQgPSAwOwogCQl9CiAJCS8qIFRXOiBXZSBjYW4ndCBzd2l0Y2ggb2ZmIENSVDEgb24gMzAxQi1ESCBpbiA4YnBwIE1vZGVzIGlmIHVzaW5nIExDRCAqLwogCQlpZiAgKHhnaV92aWRlb19pbmZvLmRpc3Bfc3RhdGUgJiBESVNQVFlQRV9MQ0QpICB7Ci0JICAgICAgICAJZG9pdCA9IEZBTFNFOworCQkJZG9pdCA9IDA7CiAJICAgICAgICB9CiAJfQogCkBAIC0yNjkxLDE0ICsyNjEwLDE1IEBACiAJCWluWEdJSURYUkVHKFhHSVBBUlQxLCAweDAwLCByZWcpOwogCiAKLQkJaWYoKHJlZyAmIDB4NTApID09IDB4MTApIHsKLQkJCWRvaXQgPSBGQUxTRTsKLQkJfQorCQlpZiAoKHJlZyAmIDB4NTApID09IDB4MTApCisJCQlkb2l0ID0gMDsKIAotCX0gZWxzZSBYR0lmYl9jcnQxb2ZmID0gMDsKKworCX0gZWxzZQorCQlYR0lmYl9jcnQxb2ZmID0gMDsKIAogCWluWEdJSURYUkVHKFhHSUNSLCAweDE3LCByZWcpOwotCWlmKChYR0lmYl9jcnQxb2ZmKSAmJiAoZG9pdCkpCisJaWYgKChYR0lmYl9jcnQxb2ZmKSAmJiAoZG9pdCkpCiAJCXJlZyAmPSB+MHg4MDsKIAllbHNlCiAJCXJlZyB8PSAweDgwOwpAQCAtMjkwNyw3ICsyODI3LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgVkJJT1NfQlVGWzY1NTM1XTsKIAotdW5zaWduZWQgY2hhciogYXR0ZW1wdF9tYXBfcm9tKHN0cnVjdCBwY2lfZGV2ICpkZXYsdm9pZCAqY29weV9hZGRyZXNzKQordW5zaWduZWQgY2hhciAqYXR0ZW1wdF9tYXBfcm9tKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmNvcHlfYWRkcmVzcykKIHsKICAgICB1MzIgcm9tX3NpemUgICAgICA9IDA7CiAgICAgdTMyIHJvbV9hZGRyZXNzICAgPSAwOwpAQCAtMjk2MiwxNSArMjg4Miw5IEBACiAKIAlYR0lmYl9yZWdpc3RlcmVkID0gMDsKIAotCW1lbXNldCgmWEdJaHdfZXh0LCAwLCBzaXplb2YoSFdfREVWSUNFX0VYVEVOU0lPTikpOwotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDMpKQorCW1lbXNldCgmWEdJaHdfZXh0LCAwLCBzaXplb2Yoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbykpOwogCSAgZmJfaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgZmJfaW5mbyksICZwZGV2LT5kZXYpOwogCSAgaWYoIWZiX2luZm8pIHJldHVybiAtRU5PTUVNOwotI2Vsc2UKLQkgIFhHSV9mYl9pbmZvID0ga21hbGxvYyggc2l6ZW9mKHN0cnVjdCBmYl9pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0JICBpZighWEdJX2ZiX2luZm8pIHJldHVybiAtRU5PTUVNOwotCSAgbWVtc2V0KFhHSV9mYl9pbmZvLCAwLCAgc2l6ZW9mKHN0cnVjdCBmYl9pbmZvKSk7Ci0jZW5kaWYKIAogICAJeGdpX3ZpZGVvX2luZm8uY2hpcF9pZCA9IHBkZXYtPmRldmljZTsKIAkgIHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9SRVZJU0lPTl9JRCwmeGdpX3ZpZGVvX2luZm8ucmV2aXNpb25faWQpOwpAQCAtMjk4OCwxNCArMjkwMiwxNSBAQAogCSAgeGdpX3ZpZGVvX2luZm8ubW1pb19iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOwogCSAgWEdJZmJfbW1pb19zaXplID0gIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSk7CiAJICB4Z2lfdmlkZW9faW5mby52Z2FfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKSArIDB4MzA7Ci0JICBYR0lod19leHQucGpJT0FkZHJlc3MgPSAoUFVDSEFSKXhnaV92aWRlb19pbmZvLnZnYV9iYXNlOworCSAgWEdJaHdfZXh0LnBqSU9BZGRyZXNzID0gKHVuc2lnbmVkIGNoYXIgKil4Z2lfdmlkZW9faW5mby52Z2FfYmFzZTsKIAkgIC8vWEdJX1ByLlJlbElPICA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpLCAxMjgpICsgMHgzMDsKLQkgIHByaW50aygiWEdJZmI6IFJlbG9jYXRlIElPIGFkZHJlc3M6ICVseCBbJTA4bHhdIFxuIiwgKHVuc2lnbmVkIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpLCBYR0lfUHIuUmVsSU8pOworCSAgcHJpbnRrKCJYR0lmYjogUmVsb2NhdGUgSU8gYWRkcmVzczogJWx4IFslMDhseF1cbiIsCisJCSAodW5zaWduZWQgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMiksIFhHSV9Qci5SZWxJTyk7CiAKIAkgIGlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKIAkgICAgICAgICAgcmV0dXJuIC1FSU87CiAKLSAgICBYR0lSZWdJbml0KCZYR0lfUHIsIChVTE9ORylYR0lod19leHQucGpJT0FkZHJlc3MpOworICAgIFhHSVJlZ0luaXQoJlhHSV9QciwgKHVuc2lnbmVkIGxvbmcpWEdJaHdfZXh0LnBqSU9BZGRyZXNzKTsKIAogICAgIG91dFhHSUlEWFJFRyhYR0lTUiwgSU5EX1hHSV9QQVNTV09SRCwgWEdJX1BBU1NXT1JEKTsKICAgICBpblhHSUlEWFJFRyhYR0lTUiwgSU5EX1hHSV9QQVNTV09SRCwgcmVnMSk7CkBAIC0zMDUyLDcgKzI5NjcsNyBAQAogCQkgICBjYXNlIFhHMjA6CiAJCSAgIGNhc2UgWEcyMToKICAgICAgICAgICAgICAgICAgICBjYXNlIFhHMjc6Ci0gICAgICAgICAgICAgICAgICAgWEdJaHdfZXh0LmJJbnRlZ3JhdGVkTU1FbmFibGVkID0gVFJVRTsKKwkJCSAgIFhHSWh3X2V4dC5iSW50ZWdyYXRlZE1NRW5hYmxlZCA9IDE7CiAJCQlicmVhazsKIAogCQkgICBkZWZhdWx0OgpAQCAtMzA4MCw3ICsyOTk1LDcgQEAKIAkgIHN0cmNweShYR0lod19leHQuc3pWQklPU1ZlciwgIjAuODQiKTsKIAogCi0gICAgWEdJaHdfZXh0LnBTUiA9IHZtYWxsb2Moc2l6ZW9mKFhHSV9EU1JlZykgKiBTUl9CVUZGRVJfU0laRSk7CisgICAgWEdJaHdfZXh0LnBTUiA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBYR0lfRFNSZWcpICogU1JfQlVGRkVSX1NJWkUpOwogCSAgaWYgKFhHSWh3X2V4dC5wU1IgPT0gTlVMTCkKIAkgIHsKIAkJICAgIHByaW50ayhLRVJOX0VSUiAiWEdJZmI6IEZhdGFsIGVycm9yOiBBbGxvY2F0aW5nIFNSUmVnIHNwYWNlIGZhaWxlZC5cbiIpOwpAQCAtMzA4OCw3ICszMDAzLDcgQEAKIAkgIH0KIAkgIFhHSWh3X2V4dC5wU1JbMF0uaklkeCA9IFhHSWh3X2V4dC5wU1JbMF0ualZhbCA9IDB4RkY7CiAKLQkgIFhHSWh3X2V4dC5wQ1IgPSB2bWFsbG9jKHNpemVvZihYR0lfRFNSZWcpICogQ1JfQlVGRkVSX1NJWkUpOworCSAgWEdJaHdfZXh0LnBDUiA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBYR0lfRFNSZWcpICogQ1JfQlVGRkVSX1NJWkUpOwogCSAgaWYgKFhHSWh3X2V4dC5wQ1IgPT0gTlVMTCkKIAkgIHsKIAkgICAgICB2ZnJlZShYR0lod19leHQucFNSKTsKQEAgLTMyMTgsNyArMzEzMyw3IEBACiAJCSAgICB4Z2lfdmlkZW9faW5mby5kaXNwX3N0YXRlID0gRElTUFRZUEVfTENEOwogICAgICAgICAJICAgIGlmICghWEdJZmJfR2V0WEcyMUxWRFNEYXRhKCkpIHsKIAkJCSAgICBpbnQgbTsKLQkJCSAgICBmb3IgKG09MDsgbSA8IHNpemVvZihYR0kyMV9MQ0RDYXBMaXN0KS9zaXplb2YoWEdJMjFfTFZEU0NhcFN0cnVjdCk7IG0rKykgeworCQkJICAgIGZvciAobSA9IDA7IG0gPCBzaXplb2YoWEdJMjFfTENEQ2FwTGlzdCkvc2l6ZW9mKHN0cnVjdCBYR0kyMV9MVkRTQ2FwU3RydWN0KTsgbSsrKSB7CiAJCQkJICAgIGlmICgoWEdJMjFfTENEQ2FwTGlzdFttXS5MVkRTSERFID09IFhHSWJpb3NfbW9kZVt4Z2lmYl9tb2RlX2lkeF0ueHJlcykgJiYKIAkJCQkJKFhHSTIxX0xDRENhcExpc3RbbV0uTFZEU1ZERSA9PSBYR0liaW9zX21vZGVbeGdpZmJfbW9kZV9pZHhdLnlyZXMpKSB7CiAJCQkJCQlYR0lOZXdfU2V0UmVnMSggWEdJX1ByLlAzZDQgLCAweDM2LCBtKSA7CkBAIC0zMzQxLDE0ICszMjU2LDE0IEBACiAJICAgICAgICAgIGluWEdJSURYUkVHKFhHSUNSLDB4MzgsdG1wKTsKIAkJICAgICAgaWYoKHRtcCAmIDB4MDMpID09IDB4MDMpCiAJCSAgICAgIHsKLS8vCQkgICAgICAgICAgWEdJX1ByLlhHSV9Vc2VMQ0RBID0gVFJVRTsKKy8qCQkgICAgICAgICAgWEdJX1ByLlhHSV9Vc2VMQ0RBID0gMTsgKi8KIAkJICAgICAgfWVsc2UKIAkJICAgICAgewogCQkgICAgIC8vICBDdXJyZW50bHkgb24gTENEQT8gKFNvbWUgbmV3ZXIgQklPU2VzIHNldCBEMCBpbiBDUjM1KQogCQkgICAgICAgICBpblhHSUlEWFJFRyhYR0lDUiwweDM1LHRtcCk7CiAJCSAgICAgICAgIGlmKHRtcCAmIDB4MDEpCiAJCSAgICAgICAgIHsKLS8vCQkgICAgICAgICAgICAgIFhHSV9Qci5YR0lfVXNlTENEQSA9IFRSVUU7CisvKgkJICAgICAgICAgICAgICBYR0lfUHIuWEdJX1VzZUxDREEgPSAxOyAqLwogCQkgICAgICAgICAgIH1lbHNlCiAJCSAgICAgICAgICAgewogCQkgICAgICAgICAgICAgICBpblhHSUlEWFJFRyhYR0lDUiwweDMwLHRtcCk7CkBAIC0zMzU3LDcgKzMyNzIsNyBAQAogCQkgICAgICAgICAgICAgICAgICAgaW5YR0lJRFhSRUcoWEdJUEFSVDEsMHgxMyx0bXApOwogCQkJICAgICAgICAgICAgICAgaWYodG1wICYgMHgwNCkKIAkJCSAgICAgICAgICAgICAgIHsKLS8vCQkJICAgICAgICAgICAgICAgIFhHSV9Qci5YR0lfVXNlTENEQSA9IFRSVUU7CisvKgkJCSAgICAgICAgICAgICAgICBYR0lfUHIuWEdJX1VzZUxDREEgPSAxOyAqLwogCQkJICAgICAgICAgICAgICAgfQogCQkgICAgICAgICAgICAgICB9CiAJCSAgICAgICAgICAgfQpAQCAtMzQ2MiwyMCArMzM3Nyw2IEBACiAKIAkgICAgICAgIH0KIAotCi0jaWYgMAotI2lmZGVmIFhHSUZCX1BBTgotCQlpZihYR0lmYl95cGFuKSB7Ci0JICAgIAkJZGVmYXVsdF92YXIueXJlc192aXJ0dWFsID0KLQkJCQl4Z2lfdmlkZW9faW5mby5oZWFwc3RhcnQgLyAoZGVmYXVsdF92YXIueHJlcyAqIChkZWZhdWx0X3Zhci5iaXRzX3Blcl9waXhlbCA+PiAzKSk7Ci0JICAgIAkJaWYoZGVmYXVsdF92YXIueXJlc192aXJ0dWFsIDw9IGRlZmF1bHRfdmFyLnlyZXMpIHsKLQkgICAgICAgIAkJZGVmYXVsdF92YXIueXJlc192aXJ0dWFsID0gZGVmYXVsdF92YXIueXJlczsKLQkgICAgCQl9Ci0JCX0KLSNlbmRpZgotI2VuZGlmCi0KLQogCQl4Z2lfdmlkZW9faW5mby5hY2NlbCA9IDA7CiAJCWlmKFhHSWZiX2FjY2VsKSB7CiAJCSAgIHhnaV92aWRlb19pbmZvLmFjY2VsID0gLTE7CkBAIC0zNTExLDcgKzM0MTIsOCBAQAogCiAJCVhHSWZiX3JlZ2lzdGVyZWQgPSAxOwogCi0JCXByaW50ayhLRVJOX0lORk8gIlhHSWZiOiBJbnN0YWxsZWQgWEdJRkJfR0VUX0lORk8gaW9jdGwgKCV4KVxuIiwgWEdJRkJfR0VUX0lORk8pOworCQlwcmludGsoS0VSTl9JTkZPICJYR0lmYjogSW5zdGFsbGVkIFhHSUZCX0dFVF9JTkZPIGlvY3RsICglbHgpXG4iLAorCQkgICAgICAgWEdJRkJfR0VUX0lORk8pOwogCiAvKgkJcHJpbnRrKEtFUk5fSU5GTyAiWEdJZmI6IDJEIGFjY2VsZXJhdGlvbiBpcyAlcywgc2Nyb2xsaW5nIG1vZGUgJXNcbiIsCiAJCSAgICAgWEdJZmJfYWNjZWwgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLApAQCAtMzUzOCwxMSArMzQ0MCw3IEBACiAJLyogVW5yZWdpc3RlciB0aGUgZnJhbWVidWZmZXIgKi8KIC8vCWlmKHhnaV92aWRlb19pbmZvLnJlZ2lzdGVyZWQpIHsKIAkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihmYl9pbmZvKTsKLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwzKSkKIAkJZnJhbWVidWZmZXJfcmVsZWFzZShmYl9pbmZvKTsKLSNlbHNlCi0JCWtmcmVlKGZiX2luZm8pOwotI2VuZGlmCiAvLwl9CiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CkBAIC0zNTU4LDcgKzM0NTYsNiBAQAogCiBYR0lJTklUU1RBVElDIGludCBfX2luaXQgeGdpZmJfaW5pdCh2b2lkKQogewotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiw4KQogI2lmbmRlZiBNT0RVTEUKIAljaGFyICpvcHRpb24gPSBOVUxMOwogCkBAIC0zNTY2LDE1ICszNDYzLDEzIEBACiAJCXJldHVybiAtRU5PREVWOwogCVhHSWZiX3NldHVwKG9wdGlvbik7CiAjZW5kaWYKLSNlbmRpZgogCXJldHVybihwY2lfcmVnaXN0ZXJfZHJpdmVyKCZ4Z2lmYl9kcml2ZXIpKTsKIH0KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiw4KQorCiAjaWZuZGVmIE1PRFVMRQogbW9kdWxlX2luaXQoeGdpZmJfaW5pdCk7CiAjZW5kaWYKLSNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICBNT0RVTEUgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJZmIuaCBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi9YR0lmYi5oCmluZGV4IDQxYmYxNjMuLmVmODZhNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi9YR0lmYi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi9YR0lmYi5oCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIFhHSUZCX0lEICAgICAgICAgIDB4NTM0OTUzNDYgICAgLyogSWRlbnRpZnkgbXlzZWxmIHdpdGggJ1hHSUYnICovCiAjZW5kaWYKIAotdHlwZWRlZiBlbnVtIF9YR0lfQ0hJUF9UWVBFIHsKK2VudW0gWEdJX0NISVBfVFlQRSB7CiAgICAgWEdJX1ZHQUxlZ2FjeSA9IDAsCiAgICAgWEdJXzMwMCwKICAgICBYR0lfNjMwLApAQCAtNTMsOSArNTMsOSBAQAogICAgIFhHMjEsCiAgICAgWEcyNywKICAgICBNQVhfWEdJX0NISVAKLX0gWEdJX0NISVBfVFlQRTsKK307CiAKLXR5cGVkZWYgZW51bSBfVFZUWVBFIHsKK2VudW0geGdpX3R2dHlwZSB7CiAJVFZNT0RFX05UU0MgPSAwLAogCVRWTU9ERV9QQUwsCiAJVFZNT0RFX0hJVklTSU9OLApAQCAtNjMsMTMgKzYzLDExIEBACiAgICAgCVRWVFlQRV9QQUxOLAkvLyB2aWNraUAwMzAyMjYKICAgICAJVFZUWVBFX05UU0NKLAkvLyB2aWNraUAwMzAyMjYKIAlUVk1PREVfVE9UQUwKLX0gWEdJX1RWX1RZUEU7Cit9OwogCiAKLXR5cGVkZWYgc3RydWN0IF9YR0lGQl9JTkZPIFhHSWZiX2luZm87Ci1zdHJ1Y3QgX1hHSUZCX0lORk8gewotCi11bnNpZ25lZCBsb25nIFhHSWZiX2lkOworc3RydWN0IFhHSWZiX2luZm8geworCXVuc2lnbmVkIGxvbmcgWEdJZmJfaWQ7CiAgCWludCAgICBjaGlwX2lkOwkJCS8qIFBDSSBJRCBvZiBkZXRlY3RlZCBjaGlwICovCiAJaW50ICAgIG1lbW9yeTsJCQkvKiB2aWRlbyBtZW1vcnkgaW4gS0Igd2hpY2ggWEdJZmIgbWFuYWdlcyAqLwogCWludCAgICBoZWFwc3RhcnQ7ICAgICAgICAgICAgICAgLyogaGVhcCBzdGFydCAoPSBYR0lmYiAibWVtIiBhcmd1bWVudCkgaW4gS0IgKi8KQEAgLTk3LDcgKzk1LDcgQEAKIAogCiAKLXR5cGVkZWYgZW51bSBfVFZQTFVHVFlQRSB7CS8vIHZpY2tpQDAzMDIyNgorZW51bSB4Z2lfdHZfcGx1ZyB7CS8qIHZpY2tpQDAzMDIyNiAqLwogLy8JVFZQTFVHX0xlZ2FjeSA9IDAsCiAvLwlUVlBMVUdfQ09NUE9TSVRFLAogLy8JVFZQTFVHX1NWSURFTywKQEAgLTExMyw3ICsxMTEsNyBAQAogICAgIAlUVlBMVUdfWVBCUFJfNzUwUCA9IDcsCiAgICAgCVRWUExVR19ZUEJQUl8xMDgwaSA9IDgsCiAJVFZQTFVHX1RPVEFMCi19IFhHSV9UVl9QTFVHOworfTsKIAogCiBzdHJ1Y3QgbW9kZV9pbmZvIHsKQEAgLTEzMiwxMCArMTMwLDEwIEBACiAJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CiAJdW5zaWduZWQgaW50ICBtZW1fc2l6ZTsKIAl1bnNpZ25lZCBsb25nIGRpc3Bfc3RhdGU7Ci0JWEdJX0NISVBfVFlQRSBjaGlwOworCWVudW0gWEdJX0NISVBfVFlQRSBjaGlwOwogCXVuc2lnbmVkIGNoYXIgaGFzVkI7Ci0JWEdJX1RWX1RZUEUgVFZfdHlwZTsKLQlYR0lfVFZfUExVRyBUVl9wbHVnOworCWVudW0geGdpX3R2dHlwZSBUVl90eXBlOworCWVudW0geGdpX3R2X3BsdWcgVFZfcGx1ZzsKIAl1bnNpZ25lZCBsb25nIHZlcnNpb247CiAJY2hhciByZXNlcnZlZFsyNTZdOwogfTsKQEAgLTE4NCw3ICsxODIsNyBAQAogICAgICAgICB1bnNpZ25lZCBjaGFyIFRWX3R5cGU7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgVFZfcGx1ZzsKIAotICAgICAgICBYR0lfQ0hJUF9UWVBFIGNoaXA7CisJZW51bSBYR0lfQ0hJUF9UWVBFIGNoaXA7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmV2aXNpb25faWQ7CiAKICAgICAgICAgdW5zaWduZWQgc2hvcnQgRHN0Q29sb3I7CkBAIC0yMDcsOSArMjA1LDQgQEAKIAogZXh0ZXJuIHN0cnVjdCB2aWRlb19pbmZvIHhnaV92aWRlb19pbmZvOwogCi0jaWZkZWYgX19LRVJORUxfXwotLy9leHRlcm4gdm9pZCB4Z2lfbWFsbG9jKHN0cnVjdCB4Z2lfbWVtcmVxICpyZXEpOwotZXh0ZXJuIHZvaWQgeGdpX2ZyZWUodW5zaWduZWQgbG9uZyBiYXNlKTsKLWV4dGVybiB2b2lkIHhnaV9kaXNwaW5mbyhzdHJ1Y3QgYXBfZGF0YSAqcmVjKTsKLSNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvb3NkZWYuaCBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi9vc2RlZi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmM3ZDNhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi9vc2RlZi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUzICswLDAgQEAKLSNpZm5kZWYgX09TREVGX0hfCi0jZGVmaW5lIF9PU0RFRl9IXwotCi0vKiAjZGVmaW5lIFdJTkNFX0hFQURFUiovCi0vKiNkZWZpbmUgV0lOMjAwMCovCi0vKiAjZGVmaW5lIFRDICovCi0jZGVmaW5lIExJTlVYX0tFUk5FTAotLyogI2RlZmluZSBMSU5VWF9YRjg2ICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmZGVmIExJTlVYX0tFUk5FTAotLy8jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jZW5kaWYKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZmRlZiBUQwotI2VuZGlmCi0jaWZkZWYgV0lOMjAwMAotI2VuZGlmCi0jaWZkZWYgV0lOQ0VfSEVBREVSCi0jZW5kaWYKLSNpZmRlZiBMSU5VWF9YRjg2Ci0jZGVmaW5lIExJTlVYCi0jZW5kaWYKLSNpZmRlZiBMSU5VWF9LRVJORUwKLSNkZWZpbmUgTElOVVgKLSNlbmRpZgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZmRlZiBUQwotI2RlZmluZSBYR0lfU2V0TWVtb3J5KE1lbW9yeUFkZHJlc3MsTWVtb3J5U2l6ZSx2YWx1ZSkgbWVtc2V0KE1lbW9yeUFkZHJlc3MsIHZhbHVlLCBNZW1vcnlTaXplKTsKLSNlbmRpZgotI2lmZGVmIFdJTjIwMDAKLSNkZWZpbmUgWEdJX1NldE1lbW9yeShNZW1vcnlBZGRyZXNzLE1lbW9yeVNpemUsdmFsdWUpIE1lbUZpbGwoKFBWT0lEKSBNZW1vcnlBZGRyZXNzLChVTE9ORykgTWVtb3J5U2l6ZSwoVUNIQVIpIHZhbHVlKTsKLSNlbmRpZgotI2lmZGVmIFdJTkNFX0hFQURFUgotI2RlZmluZSBYR0lfU2V0TWVtb3J5KE1lbW9yeUFkZHJlc3MsTWVtb3J5U2l6ZSx2YWx1ZSkgbWVtc2V0KE1lbW9yeUFkZHJlc3MsIHZhbHVlLCBNZW1vcnlTaXplKTsKLSNlbmRpZgotI2lmZGVmIExJTlVYX1hGODYKLSNkZWZpbmUgWEdJX1NldE1lbW9yeShNZW1vcnlBZGRyZXNzLE1lbW9yeVNpemUsdmFsdWUpIG1lbXNldChNZW1vcnlBZGRyZXNzLCB2YWx1ZSwgTWVtb3J5U2l6ZSkKLSNlbmRpZgotI2lmZGVmIExJTlVYX0tFUk5FTAotI2RlZmluZSBYR0lfU2V0TWVtb3J5KE1lbW9yeUFkZHJlc3MsTWVtb3J5U2l6ZSx2YWx1ZSkgbWVtc2V0KE1lbW9yeUFkZHJlc3MsIHZhbHVlLCBNZW1vcnlTaXplKQotI2VuZGlmCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZmRlZiBUQwotI2RlZmluZSBYR0lfTWVtb3J5Q29weShEZXN0aW5hdGlvbixTb3J1Y2UsTGVuZ3RoKSBtZW1tb3ZlKERlc3RpbmF0aW9uLCBTb3J1Y2UsIExlbmd0aCk7Ci0jZW5kaWYKLSNpZmRlZiBXSU4yMDAwCi0jZGVmaW5lIFhHSV9NZW1vcnlDb3B5KERlc3RpbmF0aW9uLFNvcnVjZSxMZW5ndGgpICAvKlZpZGVvUG9ydE1vdmVNZW1vcnkoKFBVQ0hBUilEZXN0aW5hdGlvbiAsIFNvcnVjZSxsZW5ndGgpOyovCi0jZW5kaWYKLSNpZmRlZiBXSU5DRV9IRUFERVIKLSNkZWZpbmUgWEdJX01lbW9yeUNvcHkoRGVzdGluYXRpb24sU29ydWNlLExlbmd0aCkgbWVtbW92ZShEZXN0aW5hdGlvbiwgU29ydWNlLCBMZW5ndGgpOwotI2VuZGlmCi0jaWZkZWYgTElOVVhfWEY4NgotI2RlZmluZSBYR0lfTWVtb3J5Q29weShEZXN0aW5hdGlvbixTb3J1Y2UsTGVuZ3RoKSBtZW1jcHkoRGVzdGluYXRpb24sU29ydWNlLExlbmd0aCkKLSNlbmRpZgotI2lmZGVmIExJTlVYX0tFUk5FTAotI2RlZmluZSBYR0lfTWVtb3J5Q29weShEZXN0aW5hdGlvbixTb3J1Y2UsTGVuZ3RoKSBtZW1jcHkoRGVzdGluYXRpb24sU29ydWNlLExlbmd0aCkKLSNlbmRpZgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmZGVmIE91dFBvcnRCeXRlCi0jdW5kZWYgT3V0UG9ydEJ5dGUKLSNlbmRpZiAvKiBPdXRQb3J0Qnl0ZSAqLwotCi0jaWZkZWYgT3V0UG9ydFdvcmQKLSN1bmRlZiBPdXRQb3J0V29yZAotI2VuZGlmIC8qIE91dFBvcnRXb3JkICovCi0KLSNpZmRlZiBPdXRQb3J0TG9uZwotI3VuZGVmIE91dFBvcnRMb25nCi0jZW5kaWYgLyogT3V0UG9ydExvbmcgKi8KLQotI2lmZGVmIEluUG9ydEJ5dGUKLSN1bmRlZiBJblBvcnRCeXRlCi0jZW5kaWYgLyogSW5Qb3J0Qnl0ZSAqLwotCi0jaWZkZWYgSW5Qb3J0V29yZAotI3VuZGVmIEluUG9ydFdvcmQKLSNlbmRpZiAvKiBJblBvcnRXb3JkICovCi0KLSNpZmRlZiBJblBvcnRMb25nCi0jdW5kZWYgSW5Qb3J0TG9uZwotI2VuZGlmIC8qIEluUG9ydExvbmcgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgVEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZkZWYgVEMKLSNkZWZpbmUgT3V0UG9ydEJ5dGUocCx2KSBvdXRwKCh1bnNpZ25lZCBzaG9ydCkocCksKHVuc2lnbmVkIGNoYXIpKHYpKQotI2RlZmluZSBPdXRQb3J0V29yZChwLHYpIG91dHAoKHVuc2lnbmVkIHNob3J0KShwKSwodW5zaWduZWQgc2hvcnQpKHYpKQotI2RlZmluZSBPdXRQb3J0TG9uZyhwLHYpIG91dHAoKHVuc2lnbmVkIHNob3J0KShwKSwodW5zaWduZWQgbG9uZykodikpCi0jZGVmaW5lIEluUG9ydEJ5dGUocCkgICAgaW5wKCh1bnNpZ25lZCBzaG9ydCkocCkpCi0jZGVmaW5lIEluUG9ydFdvcmQocCkgICAgaW5wKCh1bnNpZ25lZCBzaG9ydCkocCkpCi0jZGVmaW5lIEluUG9ydExvbmcocCkgICAgKChpbnAoKHVuc2lnbmVkIHNob3J0KShwKzIpKTw8MTYpIHwgaW5wKCh1bnNpZ25lZCBzaG9ydCkocCkpKQotI2VuZGlmCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIExJTlVYIFhGODYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmZGVmIExJTlVYX1hGODYKLSNkZWZpbmUgT3V0UG9ydEJ5dGUocCx2KSBvdXRiKChDQVJEMTYpKHApLChDQVJEOCkodikpCi0jZGVmaW5lIE91dFBvcnRXb3JkKHAsdikgb3V0dygoQ0FSRDE2KShwKSwoQ0FSRDE2KSh2KSkKLSNkZWZpbmUgT3V0UG9ydExvbmcocCx2KSBvdXRsKChDQVJEMTYpKHApLChDQVJEMzIpKHYpKQotI2RlZmluZSBJblBvcnRCeXRlKHApICAgIGluYigoQ0FSRDE2KShwKSkKLSNkZWZpbmUgSW5Qb3J0V29yZChwKSAgICBpbncoKENBUkQxNikocCkpCi0jZGVmaW5lIEluUG9ydExvbmcocCkgICAgaW5sKChDQVJEMTYpKHApKQotI2VuZGlmCi0KLSNpZmRlZiBMSU5VWF9LRVJORUwKLSNkZWZpbmUgT3V0UG9ydEJ5dGUocCx2KSBvdXRiKCh1OCkodiksKHApKQotI2RlZmluZSBPdXRQb3J0V29yZChwLHYpIG91dHcoKHUxNikodiksKHApKQotI2RlZmluZSBPdXRQb3J0TG9uZyhwLHYpIG91dGwoKHUzMikodiksKHApKQotI2RlZmluZSBJblBvcnRCeXRlKHApICAgIGluYihwKQotI2RlZmluZSBJblBvcnRXb3JkKHApICAgIGludyhwKQotI2RlZmluZSBJblBvcnRMb25nKHApICAgIGlubChwKQotI2VuZGlmCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFdJTiAyMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmZGVmIFdJTjIwMDAKLSNkZWZpbmUgT3V0UG9ydEJ5dGUocCx2KSBWaWRlb1BvcnRXcml0ZVBvcnRVY2hhciAoKFBVQ0hBUikgKHApLCAoVUNIQVIpICh2KSkKLSNkZWZpbmUgT3V0UG9ydFdvcmQocCx2KSBWaWRlb1BvcnRXcml0ZVBvcnRVc2hvcnQoKFBVU0hPUlQpIChwKSwgKFVTSE9SVCkgKHYpKQotI2RlZmluZSBPdXRQb3J0TG9uZyhwLHYpIFZpZGVvUG9ydFdyaXRlUG9ydFVsb25nICgoUFVMT05HKSAocCksIChVTE9ORykgKHYpKQotI2RlZmluZSBJblBvcnRCeXRlKHApICAgIFZpZGVvUG9ydFJlYWRQb3J0VWNoYXIgICgoUFVDSEFSKSAocCkpCi0jZGVmaW5lIEluUG9ydFdvcmQocCkgICAgVmlkZW9Qb3J0UmVhZFBvcnRVc2hvcnQgKChQVVNIT1JUKSAocCkpCi0jZGVmaW5lIEluUG9ydExvbmcocCkgICAgVmlkZW9Qb3J0UmVhZFBvcnRVbG9uZyAgKChQVUxPTkcpIChwKSkKLSNlbmRpZgotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFdJTiBDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZmRlZiBXSU5DRV9IRUFERVIKLSNkZWZpbmUgT3V0UG9ydEJ5dGUocCx2KSBXUklURV9QT1JUX1VDSEFSICgoUFVDSEFSKSAocCksIChVQ0hBUikgKHYpKQotI2RlZmluZSBPdXRQb3J0V29yZChwLHYpIFdSSVRFX1BPUlRfVVNIT1JUKChQVVNIT1JUKSAocCksIChVU0hPUlQpICh2KSkKLSNkZWZpbmUgT3V0UG9ydExvbmcocCx2KSBXUklURV9QT1JUX1VMT05HICgoUFVMT05HKSAocCksIChVTE9ORykgKHYpKQotI2RlZmluZSBJblBvcnRCeXRlKHApICAgIFJFQURfUE9SVF9VQ0hBUiAgKChQVUNIQVIpIChwKSkKLSNkZWZpbmUgSW5Qb3J0V29yZChwKSAgICBSRUFEX1BPUlRfVVNIT1JUICgoUFVTSE9SVCkgKHApKQotI2RlZmluZSBJblBvcnRMb25nKHApICAgIFJFQURfUE9SVF9VTE9ORyAgKChQVUxPTkcpIChwKSkKLSNlbmRpZgotI2VuZGlmIC8vIF9PU0RFRl9IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX2RlZi5oIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX2RlZi5oCmluZGV4IDE3YTdhZGEuLjRkZTE4MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9kZWYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfZGVmLmgKQEAgLTYsNyArNiw3IEBACiAjZGVmaW5lIE5ld1NjcmF0Y2gKICNlbmRpZgogLyogc2hhbXBvbyAqLwotI2lmZGVmIExJTlVYX0tFUk5FTAorCiAjZGVmaW5lIFNFUV9BRERSRVNTX1BPUlQJICAweDAwMTQKICNkZWZpbmUgU0VRX0RBVEFfUE9SVAkJICAweDAwMTUKICNkZWZpbmUgTUlTQ19PVVRQVVRfUkVHX1JFQURfUE9SVCAweDAwMUMKQEAgLTE3LDcgKzE3LDcgQEAKICNkZWZpbmUgQ1JUQ19BRERSRVNTX1BPUlRfQ09MT1IgICAweDAwMjQKICNkZWZpbmUgVklERU9fU1VCU1lTVEVNX0VOQUJMRV9QT1JUIDB4MDAxMwogI2RlZmluZSBQQ0lfQ09NTUFORAkJMHgwNAotI2VuZGlmCisKIC8qIH5zaGFtcG9vICovCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX2V4dC5jIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX2V4dC5jCmluZGV4IDQ5YjM5ZWUuLjFlY2Y5ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9leHQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfZXh0LmMKQEAgLTEsNDAgKzEsNyBAQAotI2luY2x1ZGUgIm9zZGVmLmgiCi0KLQotCi0KLSNpZmRlZiBXSU4yMDAwCi0KLSNpbmNsdWRlIDxkZGVycm9yLmg+Ci0jaW5jbHVkZSA8ZGV2aW9jdGwuaD4KLSNpbmNsdWRlIDxtaW5pcG9ydC5oPgotI2luY2x1ZGUgPG50ZGR2ZGVvLmg+Ci0jaW5jbHVkZSA8dmlkZW8uaD4KLSNpbmNsdWRlICJ4Z2l2LmgiCi0jaW5jbHVkZSAiZGRfaTJjLmgiCi0jaW5jbHVkZSAidG9vbHMuaCIKLSNlbmRpZiAvKiBXSU4yMDAwICovCi0KLSNpZmRlZiBMSU5VWF9YRjg2Ci0jaW5jbHVkZSAieGY4Ni5oIgotI2luY2x1ZGUgInhmODZQY2lJbmZvLmgiCi0jaW5jbHVkZSAieGdpLmgiCi0jaW5jbHVkZSAieGdpX3JlZ3MuaCIKLSNlbmRpZgotCi0jaWZkZWYgTElOVVhfS0VSTkVMCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSAiWEdJZmIuaCIKLS8qI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSNpbmNsdWRlIDx2aWRlby9YR0lmYi5oPgotI2Vsc2UKLSNpbmNsdWRlIDxsaW51eC9YR0lmYi5oPgotI2VuZGlmKi8KLSNlbmRpZgotCi0KIAogI2luY2x1ZGUgInZiX2RlZi5oIgogI2luY2x1ZGUgInZnYXR5cGVzLmgiCkBAIC00Miw0MyArOSwzMyBAQAogI2luY2x1ZGUgInZiX3V0aWwuaCIKICNpbmNsdWRlICJ2Yl9zZXRtb2RlLmgiCiAjaW5jbHVkZSAidmJfZXh0LmgiCi1leHRlcm4gICBVQ0hBUiBYR0kzMzBfU29mdFNldHRpbmc7Ci1leHRlcm4gICBVQ0hBUiBYR0kzMzBfT3V0cHV0U2VsZWN0OwotZXh0ZXJuICAgVVNIT1JUIFhHSTMzMF9SR0JTZW5zZURhdGEyOwotZXh0ZXJuICAgVVNIT1JUIFhHSTMzMF9ZQ1NlbnNlRGF0YTI7Ci1leHRlcm4gICBVU0hPUlQgWEdJMzMwX1ZpZGVvU2Vuc2VEYXRhMjsKLSNpZmRlZiBXSU4yMDAwCi1leHRlcm4gICBVQ0hBUiBTZW5zZUNIVFYoUEhXX0RFVklDRV9FWFRFTlNJT04gcEhXREUpOyAgICAgICAvKiAyMDA3LzA1LzE3IEJpbGx5ICovCi0jZW5kaWYKLXZvaWQgICAgIFhHSV9HZXRTZW5zZVN0YXR1cyggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICk7Ci1CT09MRUFOICBYR0lOZXdfR2V0UGFuZWxJRChQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci1VU0hPUlQgICBYR0lOZXdfU2Vuc2VMQ0QoUFhHSV9IV19ERVZJQ0VfSU5GTyxQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci1CT09MRUFOICBYR0lOZXdfR2V0TENERERDSW5mbyhQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgWEdJU2V0RFBNUyggUFhHSV9IV19ERVZJQ0VfSU5GTyBwWEdJSFdERSAsIFVMT05HIFZFU0FfUE9XRVJfU1RBVEUgKSA7Ci1CT09MRUFOICBYR0lOZXdfQnJpZGdlSXNFbmFibGUoUFhHSV9IV19ERVZJQ0VfSU5GTyxQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApOwotQk9PTEVBTiAgWEdJTmV3X1NlbnNlKFVTSE9SVCB0ZW1wYngsVVNIT1JUIHRlbXBjeCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotQk9PTEVBTiAgWEdJTmV3X1NlbnNlSGlUViggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkgOworZXh0ZXJuICAgdW5zaWduZWQgY2hhciBYR0kzMzBfU29mdFNldHRpbmc7CitleHRlcm4gICB1bnNpZ25lZCBjaGFyIFhHSTMzMF9PdXRwdXRTZWxlY3Q7CitleHRlcm4gICB1bnNpZ25lZCBzaG9ydCBYR0kzMzBfUkdCU2Vuc2VEYXRhMjsKK2V4dGVybiAgIHVuc2lnbmVkIHNob3J0IFhHSTMzMF9ZQ1NlbnNlRGF0YTI7CitleHRlcm4gICB1bnNpZ25lZCBzaG9ydCBYR0kzMzBfVmlkZW9TZW5zZURhdGEyOwordm9pZCAgICAgWEdJX0dldFNlbnNlU3RhdHVzKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordW5zaWduZWQgY2hhciAgWEdJTmV3X0dldFBhbmVsSUQoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3Vuc2lnbmVkIHNob3J0IFhHSU5ld19TZW5zZUxDRChzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICosCisJCQkgICAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3Vuc2lnbmVkIGNoYXIgWEdJTmV3X0dldExDREREQ0luZm8oc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCQkgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkIFhHSVNldERQTVMoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqcFhHSUhXREUsCisJCXVuc2lnbmVkIGxvbmcgVkVTQV9QT1dFUl9TVEFURSk7Cit1bnNpZ25lZCBjaGFyIFhHSU5ld19CcmlkZ2VJc0VuYWJsZShzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICosIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit1bnNpZ25lZCBjaGFyIFhHSU5ld19TZW5zZSh1bnNpZ25lZCBzaG9ydCB0ZW1wYngsIHVuc2lnbmVkIHNob3J0IHRlbXBjeCwKKwkJICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordW5zaWduZWQgY2hhciBYR0lOZXdfU2Vuc2VIaVRWKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJICAgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCUR5bmFtaWMgU2Vuc2UKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHZvaWQgWEdJX1dhaXREaXNwbGF5KHZvaWQpOwotQk9PTEVBTiBYR0lfSXMzMDFDKFBWQl9ERVZJQ0VfSU5GTyk7Ci1CT09MRUFOIFhHSV9JczMwMUxWKFBWQl9ERVZJQ0VfSU5GTyk7Cit1bnNpZ25lZCBjaGFyIFhHSV9JczMwMUMoc3RydWN0IHZiX2RldmljZV9pbmZvICopOwordW5zaWduZWQgY2hhciBYR0lfSXMzMDFMVihzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CiAKLSNpZmRlZiBXSU4yMDAwCi1VQ0hBUiBYR0lfU2Vuc2VMQ0QoUEhXX0RFVklDRV9FWFRFTlNJT04sIFBWQl9ERVZJQ0VfSU5GTyk7Ci1VQ0hBUiBYR0lfR2V0TENERERDSW5mbyhQSFdfREVWSUNFX0VYVEVOU0lPTixQVkJfREVWSUNFX0lORk8pOwotCi1leHRlcm4gQk9PTCBiR2V0RGRjSW5mbygKLVBIV19ERVZJQ0VfRVhURU5TSU9OICBwSFdERSwKLVVMT05HICAgICAgICAgICAgICAgICB1bFdoaWNoT25lLAotUFVDSEFSICAgICAgICAgICAgICAgIHBqUXVlcnlCdWZmZXIsCi1VTE9ORyAgICAgICAgICAgICAgICAgdWxCdWZmZXJTaXplCi0gICApOwotCi0jZW5kaWYKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTg3LDkgKzQ0LDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLUJPT0xFQU4gWEdJTmV3X0lzMzAxQiggUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordW5zaWduZWQgY2hhciBYR0lOZXdfSXMzMDFCKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgZmxhZyA7CisgICAgdW5zaWduZWQgc2hvcnQgZmxhZyA7CiAKICAgICBmbGFnID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlBhcnQ0UG9ydCAsIDB4MDEgKSA7CiAKQEAgLTEwNSw3ICs2Miw3IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1CT09MRUFOIFhHSV9JczMwMUMoIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3Vuc2lnbmVkIGNoYXIgWEdJX0lzMzAxQyhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAgICAgaWYgKCAoIFhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QYXJ0NFBvcnQgLCAweDAxICkgJiAweEYwICkgPT0gMHhDMCApCiAgICAgICAgIHJldHVybiggMSApIDsKQEAgLTEyNiw3ICs4Myw3IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1CT09MRUFOIFhHSV9JczMwMUxWKCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit1bnNpZ25lZCBjaGFyIFhHSV9JczMwMUxWKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKICAgICBpZiAoIFhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QYXJ0NFBvcnQgLCAweDAxICkgPj0gMHhEMCApCiAgICAgewpAQCAtMTQ1LDkgKzEwMiwxMSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotQk9PTEVBTiBYR0lOZXdfU2Vuc2UoICBVU0hPUlQgdGVtcGJ4ICwgVVNIT1JUIHRlbXBjeCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordW5zaWduZWQgY2hhciBYR0lOZXdfU2Vuc2UodW5zaWduZWQgc2hvcnQgdGVtcGJ4LAorCQkgICAgIHVuc2lnbmVkIHNob3J0IHRlbXBjeCwKKwkJICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXAgLCBpICwgdGVtcGNoIDsKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wLCBpLCB0ZW1wY2g7CiAKICAgICB0ZW1wID0gdGVtcGJ4ICYgMHhGRiA7CiAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlBhcnQ0UG9ydCAsIDB4MTEgLCB0ZW1wICkgOwpAQCAtMTY5LDI4NCArMTI4LDYgQEAKICAgICAgICAgcmV0dXJuKCAwICkgOwogfQogCi0jaWZkZWYgV0lOMjAwMAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBGdW5jdGlvbiA6IFhHSV9TZW5zZUxDRCAqLwotLyogSW5wdXQgOiAqLwotLyogT3V0cHV0IDogKi8KLS8qIERlc2NyaXB0aW9uIDogKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotVUNIQVIgWEdJX1NlbnNlTENEKCBQSFdfREVWSUNFX0VYVEVOU0lPTiBwSFdERSwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCi17Ci0gICAgVVNIT1JUIHRlbXBheCAsIHRlbXBieCAsIHRlbXBjeCA7Ci0gICAgVUNIQVIgU29mdFNldHRpbmcgPSBYR0kzMzBfU29mdFNldHRpbmcgOwotCi0gICAgaWYgKCBwVkJJbmZvLT5WQlR5cGUgJiAoIFZCX1hHSTMwMUxWIHwgVkJfWEdJMzAyTFYgKSApCi0gICAgICAgIHJldHVybiggMSApIDsKLQotCi0gICAgaWYgKCBTb2Z0U2V0dGluZyAmIEhvdFBsdWdGdW5jdGlvbiApCS8qIEhvdCBQbHVnIERldGVjdGlvbiAqLwotICAgIHsKLSAgICAgICAgWEdJTmV3X1NldFJlZ0FORCggcFZCSW5mby0+UGFydDRQb3J0ICwgMHgwRiAsIDB4M0YgKSA7Ci0gICAgICAgIHRlbXBieCA9IDAgOwotICAgICAgICB0ZW1wY3ggPSAweDkwMTAgOwotICAgICAgICBpZiAoIFhHSU5ld19TZW5zZSggdGVtcGJ4ICwgdGVtcGN4LCBwVkJJbmZvICkgKQotICAgICAgICAgICAgcmV0dXJuKCAxICkgOwotCi0gICAgICAgIHJldHVybiggMCApIDsKLSAgICB9Ci0gICAgZWxzZQkvKiBHZXQgTENEIEluZm8gZnJvbSBFRElEICovCi0gICAgICAgIHJldHVybihYR0lfR2V0TENERERDSW5mbyhwSFdERSwgcFZCSW5mbykpOwotfQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogRnVuY3Rpb24gOiBYR0lfR2V0TENERERDSW5mbyAqLwotLyogSW5wdXQgOiAqLwotLyogT3V0cHV0IDogKi8KLS8qIERlc2NyaXB0aW9uIDogKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotVUNIQVIgWEdJX0dldExDREREQ0luZm8oIFBIV19ERVZJQ0VfRVhURU5TSU9OIHBIV0RFICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCi17Ci0gICAgVUNIQVIgdGVtcGFoICwgdGVtcGJsICwgdGVtcGJoIDsKLSAgICBVU0hPUlQgdGVtcGJ4ICwgdGVtcCA7Ci0gICAgVUNIQVIgcGpFRElEQnVmWyAyNTYgXSA7Ci0gICAgVUxPTkcgdWxCdWZmZXJTaXplID0gMjU2IDsKLSAgICBVQ0hBUiBiTUFTS19PVVRQVVRTVEFURV9DUlQyTENEID0gMiA7IC8qIDA0MjMgc2hhbXBvbyAqLwotCi0gICAgYkdldERkY0luZm8oIHBIV0RFICwgTUFTS19PVVRQVVRTVEFURV9DUlQyTENEICwgcGpFRElEQnVmICwgdWxCdWZmZXJTaXplICkgOwotICAgIGlmICggKCAqKCAoIFBVTE9ORyApcGpFRElEQnVmICkgPT0gMHhGRkZGRkYwMCApICYmICggKiggKCBQVUxPTkcgKSggcGpFRElEQnVmICsgNCApICkgPT0gMHgwMEZGRkZGRiApICkKLSAgICB7Ci0gICAgICAgIHRlbXBhaCA9IFBhbmVsMTAyNHg3NjggOwotICAgICAgICB0ZW1wYmw9KCAqKCBwakVESURCdWYgKyAweDNBICkgKSAmIDB4ZjAgOwotCi0gICAgICAgIGlmICggdGVtcGJsICE9IDB4NDAgKQotICAgICAgICB7Ci0gICAgICAgICAgICB0ZW1wYWggPSBQYW5lbDE2MDB4MTIwMCA7Ci0gICAgICAgICAgICBpZiAoIHRlbXBibCAhPSAweDYwICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0ZW1wYWggPSBQYW5lbDEyODB4MTAyNCA7Ci0gICAgICAgICAgICAgICAgdGVtcGJoID0gKCAqKCBwakVESURCdWYgKyAweDNCICkgKSA7Ci0gICAgICAgICAgICAgICAgaWYgKCB0ZW1wYmggIT0gMHgwMCApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0ZW1wYWggPSBQYW5lbDEyODB4OTYwIDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCB0ZW1wYmggIT0gMHgwQzAgKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wYnggPSAoICggKiggcGpFRElEQnVmICsgMHgyNCApICkgPDwgOCApIHwgKCAqKCBwakVESURCdWYgKyAweDIzICkgKSA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wYWggPSBQYW5lbDEyODB4MTAyNCA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEoIHRlbXBieCAmIDB4MDEwMCApICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wYWggPSBQYW5lbDEwMjR4NzY4IDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEoIHRlbXBieCAmIDB4MEUwMCApICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBhaCA9IFBhbmVsMTI4MHgxMDI0IDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoIHRlbXBieCAmIDB4MDBGRiApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSBTY2FsaW5nTENEIDsKLSAgICAgICAgICAgICAgICAgICAgICAgIFhHSU5ld19TZXRSZWdPUiggcFZCSW5mby0+UDNkNCAsIDB4MzcgLCB0ZW1wICkgOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIFhHSU5ld19TZXRSZWdBTkRPUiggcFZCSW5mby0+UDNkNCAsIDB4MzYgLCAoIH4weDA3ICkgLCB0ZW1wYWggKSA7Ci0gICAgICAgIHRlbXBhaCA9ICggKCAqKCBwakVESURCdWYgKyAweDQ3ICkgKSAmIDB4MDYgKSA7CQkvKiBQb2xhcml0eSAqLwotICAgICAgICB0ZW1wYWggPSAoIHRlbXBhaCBeIDB4MDYgKSA8PCA0IDsKLSAgICAgICAgdGVtcGFoIHw9IExDRFN5bmMgOwotICAgICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlAzZDQgLCAweDM3ICwgKCB+TENEU3luY0JpdCApICwgdGVtcGFoICkgOwotICAgICAgICB0ZW1wYmg9IFhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHgzNiApIDsKLSAgICAgICAgdGVtcGJoICY9IDB4MDcgOwotICAgICAgICBpZiAoIHRlbXBiaCA9PSBQYW5lbDEyODB4OTYwICkKLSAgICAgICAgICAgIFhHSU5ld19TZXRSZWdBTkQoIHBWQkluZm8tPlAzZDQgLCAweDM3ICwgMHgwRSApIDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoICpwakVESURCdWYgPT0gMHgyMCApCi0gICAgewotICAgICAgICB0ZW1wYWggPSBQYW5lbDEwMjR4NzY4IDsKLSAgICAgICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QM2Q0ICwgMHgzNiAsICggfjB4MDcgKSAsIHRlbXBhaCApIDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuKCAwICkgOwotICAgIH0KLQotICAgIHJldHVybiggMSApIDsKLX0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qIEZ1bmN0aW9uIDogWEdJX0R5U2Vuc2UgKi8KLS8qIElucHV0IDogKi8KLS8qIE91dHB1dCA6ICovCi0vKiBEZXNjcmlwdGlvbiA6ICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLUJPT0xFQU4gWEdJX0R5U2Vuc2UoIFBIV19ERVZJQ0VfRVhURU5TSU9OIHBIV0RFICwgUFVDSEFSIHVqQ29ubmVjdFN0YXR1cykKLXsKLSAgICBVQ0hBUiBwcmVfQ1JELHByZV9TUjFFICwgcHJlX1BhcnQyXzAgLCBwcmVfUGFydDRfRCA7Ci0gICAgVVNIT1JUIHRlbXBheCAsIHRlbXBieCAsIHRlbXBjeCAsIHB1c2hheCAsIHRlbXAgOwotICAgIFZCX0RFVklDRV9JTkZPIFZCSU5GOwotICAgIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvID0gJlZCSU5GOwotICAgIFVDSEFSIE91dHB1dFNlbGVjdCA9IFhHSTMzMF9PdXRwdXRTZWxlY3QgOwotICAgIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb249IHBIV0RFLT5wWEdJSFdERSA7Ci0gICAgVUNIQVIgICBiQ29ubmVjdFN0YXR1cyA9IDAgOwotICAgIHBWQkluZm8tPkJhc2VBZGRyID0gSHdEZXZpY2VFeHRlbnNpb24tPnBqSU9BZGRyZXNzIDsKLSAgICBwVkJJbmZvLT5ST01BZGRyICA9IHBIV0RFLT5walZpcnR1YWxSb21CYXNlIDsKLQotICAgIHBWQkluZm8tPlAzYzIgPSBwVkJJbmZvLT5CYXNlQWRkciArIDB4MTIgOwotICAgIHBWQkluZm8tPlAzYzQgPSBwVkJJbmZvLT5CYXNlQWRkciArIDB4MTQgOwotICAgIHBWQkluZm8tPlAzZDQgPSBwVkJJbmZvLT5CYXNlQWRkciArIDB4MjQgOwotICAgIHBWQkluZm8tPlBhcnQyUG9ydCA9IHBWQkluZm8tPkJhc2VBZGRyICsgWEdJX0NSVDJfUE9SVF8xMCA7Ci0gICAgcFZCSW5mby0+UGFydDRQb3J0ID0gcFZCSW5mby0+QmFzZUFkZHIgKyBYR0lfQ1JUMl9QT1JUXzE0IDsKLSAgICBwdXNoYXggPSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4MTcgKSA7CS8qIDA1MTIgRml4IER5c2Vuc2UgaGFuZ2VkICovCi0gICAgdGVtcCA9ICggcHVzaGF4ICYgMHgwMEZGICkgfCAweDgwIDsKLSAgICBYR0lOZXdfU2V0UmVnT1IoIHBWQkluZm8tPlAzZDQgLCAweDE3ICwgdGVtcCApIDsKLSAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MDUgLCAweDg2ICkgOwotICAgIC8qIGJlZ2lubmluZyBvZiBkeW5hbWljIHNlbnNlIENSVDEgKi8KLQotICAgIHBWQkluZm8tPklGX0RFRl9DSDcwMDcgPSAwOwotICAgIGlmIChwSFdERS0+YkNINzAwNykKLSAgICB7Ci0gICAgCUluaXRUbzMzMFBvaW50ZXIoIHBIV0RFLT5wWEdJSFdERS0+akNoaXBUeXBlLCBwVkJJbmZvICkgOwotICAgICAgICBId0RldmljZUV4dGVuc2lvbi0+cERldmljZSA9IChQVk9JRClwSFdERTsKLSAgICAgICAgcFZCSW5mby0+SUZfREVGX0NINzAwNyA9IDE7Ci0gICAgICAgIC8qIFtCaWxseV0gMjAwNy8wNS8xNCBGb3IgQ0g3MDA3ICovCi0gICAgICAgIGlmICggcFZCSW5mby0+SUZfREVGX0NINzAwNyA9PSAxICkKLSAgICAgICAgewotICAgICAgICAgICBiQ29ubmVjdFN0YXR1cyA9IFNlbnNlQ0hUVihId0RldmljZUV4dGVuc2lvbi0+cERldmljZSkgOyAvKiAwNy8wNS8yOCAqLwotICAgICAgICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlAzZDQgLCAweDMyICwgfjB4MDMgLCAoVUNIQVIpYkNvbm5lY3RTdGF0dXMgKSA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYoKCBwSFdERS0+akNoaXBJRCA+PSBYRzQwICkgfHwgKCBwSFdERS0+akNoaXBJRCA+PSBYRzIwICkpCi0gICAgewotCi0gICAgICAgIGlmICggcEhXREUtPmpDaGlwSUQgPj0gWEc0MCApCi0gICAgCSAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4NTcgLCAweDRBICkgOwkvKiB3cml0ZSBzZW5zZSBwYXR0ZXJuIDMwLT40YSAqLwotICAgIAllbHNlCi0gICAgICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4NTcgLCAweDVGICkgOwkvKiB3cml0ZSBzZW5zZSBwYXR0ZXJuICovCi0KLSAgICAgICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QM2Q0ICwgMHg1MyAsIDB4RkYgLCAweDAyICkgOwkvKiBlbmFibGUgc2Vuc2UgREFDICovCi0gICAgICAgIFhHSV9XYWl0RGlzcGx5KHBWQkluZm8pIDsKLQotICAgICAgICBpZihYR0lOZXdfR2V0UmVnMiggcFZCSW5mby0+UDNjMiApICYgMHgxMCApCi0gICAgICAgICAgICBiQ29ubmVjdFN0YXR1cyB8PSBNb25pdG9yMVNlbnNlIDsKLQotICAgICAgICBYR0lOZXdfU2V0UmVnQU5EKCBwVkJJbmZvLT5QM2Q0ICwgMHg1MyAsIDB4RkQgKSA7CS8qIGRpc2FibGUgc2Vuc2UgREFDICovCi0gICAgICAgIFhHSU5ld19TZXRSZWdBTkQoIHBWQkluZm8tPlAzZDQgLCAweDU3ICwgMHgwMCApIDsJLyogY2xlYXIgc2Vuc2UgcGF0dGVybiAqLwotCi0KLSAgICAgICAgLyogLS0tLS0tLS0tLSBFbmQgb2YgZHluYW1pYyBzZW5zZSBDUlQxIC0tLS0tLS0tLS0tICovCi0KLSAgICAgICAgLyogLS0tLS0tLS0tLSBiZWdpbm5pbmcgb2YgZHluYW1pYyBzZW5zZSBWQiAtLS0tLS0tLS0tLS0gKi8KLSAgICAgICAgcHJlX1NSMUUgPSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MUUgKSA7Ci0gICAgICAgIFhHSU5ld19TZXRSZWdPUiggcFZCSW5mby0+UDNjNCAsIDB4MUUgLCAweDIwICkgOwkvKiBFbmFibGUgQ1JUMix3b3JrLWEtcm91bmQgZm9yIDMwMUIvMzAxTFYvMzAyTFYgKi8KLSAgICAgICAgcHJlX1BhcnQyXzAgPSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UGFydDJQb3J0ICwgMHgwMCApIDsKLSAgICAgICAgcHJlX1BhcnQ0X0QgPSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UGFydDRQb3J0ICwgMHgwRCApIDsKLQotICAgICAgICBpZiAoIFhHSV9JczMwMUMoIHBWQkluZm8gKSApCS8qIDMwMUMgb25seSAqLwotICAgICAgICAgICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QYXJ0NFBvcnQgLCAweDBEICwgfjB4MDcgLCAweDAxICkgOwkvKiBTZXQgUGFydDQgMHgwRCBEWzI6MF0gdG8gMDAxYiAqLwotCi0gICAgICAgIC8qIHRlbXBheCA9IDAgOyAqLwotICAgICAgICBpZiAoICFYR0lfSXMzMDFMViggcFZCSW5mbyApICkKLSAgICAgICAgewotICAgICAgICAgICB0ZW1wYnggPSBYR0kzMzBfUkdCU2Vuc2VEYXRhMiA7Ci0gICAgICAgICAgICB0ZW1wY3ggPSAweDBFMDggOwotICAgICAgICAgICAgaWYoWEdJTmV3X1NlbnNlKCB0ZW1wYnggLCB0ZW1wY3gsIHBWQkluZm8gKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYkNvbm5lY3RTdGF0dXMgfD0gTW9uaXRvcjJTZW5zZSA7Ci0gICAgICAgICAgICAgICAgaWYgKCBPdXRwdXRTZWxlY3QgJiBTZXRTQ0FSVE91dHB1dCApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBiQ29ubmVjdFN0YXR1cyBePSAoIE1vbml0b3IyU2Vuc2UgfCBTQ0FSVFNlbnNlICkgOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIFhHSV9JczMwMUMoIHBWQkluZm8gKSApCS8qIDMwMUMgb25seSAqLwotICAgICAgICAgICAgWEdJTmV3X1NldFJlZ09SKCBwVkJJbmZvLT5QYXJ0NFBvcnQgLCAweDBEICwgMHgwNCApIDsJLyogU2V0IFBhcnQ0IDB4MEQgRFsyXT0xIGZvciBkeW5hbWljIHNlbnNlICovCi0KLSAgICAgICAgaWYgKCAoIFhHSU5ld19JczMwMUIoIHBWQkluZm8gKSApICkKLSAgICAgICAgICAgIFhHSU5ld19TZXRSZWdPUiggcFZCSW5mby0+UGFydDJQb3J0ICwgMHgwMCAsIDB4MEMgKSA7ICAgIC8qID8/Pz8/Pz8/PyAqLwotCi0JaWYgKCBYR0lOZXdfU2Vuc2VIaVRWKCBId0RldmljZUV4dGVuc2lvbiAsIHBWQkluZm8pICkJCS8qIGFkZCBieSBrdWt1IGZvciBEeXNlbnNlIEhpVFYgLy9zdGFydCAqLwotCXsKLQkgICAgYkNvbm5lY3RTdGF0dXN8PSBZUGJQclNlbnNlIDsKLQl9Ci0JZWxzZQotCXsKLSAgICAgICAgdGVtcGJ4ID0gWEdJMzMwX1lDU2Vuc2VEYXRhMiA7CS8qIFkvQyBTZW5zZSBEYXRhIFB0ciAqLwotICAgICAgICB0ZW1wY3ggPSAweDA2MDQgOwotICAgICAgICBpZiAoIFhHSU5ld19TZW5zZSggdGVtcGJ4ICwgdGVtcGN4ICwgcFZCSW5mbykgKQotICAgICAgICAgICAgYkNvbm5lY3RTdGF0dXMgfD0gU1ZJREVPU2Vuc2UgOwotCi0gICAgICAgIGlmICggT3V0cHV0U2VsZWN0ICYgQm9hcmRUVlR5cGUgKQotICAgICAgICB7Ci0gICAgICAgICAgICB0ZW1wYnggPSBYR0kzMzBfVmlkZW9TZW5zZURhdGEyIDsKLSAgICAgICAgICAgIHRlbXBjeCA9IDB4MDgwNCA7Ci0gICAgICAgICAgICBpZiAoIFhHSU5ld19TZW5zZSh0ZW1wYnggLCB0ZW1wY3gsIHBWQkluZm8pICkKLSAgICAgICAgICAgICAgICBiQ29ubmVjdFN0YXR1c3w9IEFWSURFT1NlbnNlIDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICggISggYkNvbm5lY3RTdGF0dXMgJiBTVklERU9TZW5zZSApICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0ZW1wYnggPSBYR0kzMzBfVmlkZW9TZW5zZURhdGEyIDsKLSAgICAgICAgICAgICAgICB0ZW1wY3ggPSAweDA4MDQgOwotICAgICAgICAgICAgICAgIGlmICggWEdJTmV3X1NlbnNlKCB0ZW1wYnggLCB0ZW1wY3gsIHBWQkluZm8gKSApCi0gICAgICAgICAgICAgICAgICAgIGJDb25uZWN0U3RhdHVzIHw9IEFWSURFT1NlbnNlIDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIAl9IC8qIGVuZCAqLwotICAgICAgICAvKiBEeVNlbnNlVkJDbnQgKi8KLQotICAgICAgICB0ZW1wYnggPSAwIDsKLSAgICAgICAgdGVtcGN4ID0gMCA7Ci0gICAgICAgIFhHSU5ld19TZW5zZSh0ZW1wYnggLCB0ZW1wY3gsIHBWQkluZm8gKSA7Ci0KLSAgICAgICAgaWYgKCAhKCBiQ29ubmVjdFN0YXR1cyAmIE1vbml0b3IyU2Vuc2UgKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICggWEdJX1NlbnNlTENEKCBwSFdERSAsIHBWQkluZm8gKSApCi0gICAgICAgICAgICAgICAgYkNvbm5lY3RTdGF0dXMgfD0gTENEU2Vuc2UgOwotICAgICAgICB9Ci0KLSAgICAgICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QM2Q0ICwgMHgzMiAsIH4oIEFWSURFT1NlbnNlIHwgU1ZJREVPU2Vuc2UgfCBMQ0RTZW5zZSB8IE1vbml0b3IyU2Vuc2UgfCBNb25pdG9yMVNlbnNlICkgLCBiQ29ubmVjdFN0YXR1cyApIDsKLQotICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDRQb3J0ICwgMHgwRCAsIHByZV9QYXJ0NF9EICkgOwotICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDJQb3J0ICwgMHgwMCAsIHByZV9QYXJ0Ml8wICkgOwotICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MUUgLCBwcmVfU1IxRSApIDsKLQotICAgICAgICBpZiAoIFhHSV9JczMwMUMoIHBWQkluZm8gKSApCS8qIDMwMUMgb25seSAqLwotICAgICAgICB7Ci0gICAgICAgICAgICB0ZW1wYXggPSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UGFydDJQb3J0ICwgMHgwMCApIDsKLSAgICAgICAgICAgIGlmICggdGVtcGF4ICYgMHgyMCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogUmVzZXQgVkJQcm8gKi8KLSAgICAgICAgICAgICAgICBmb3IoIHRlbXBjeCA9IDIgOyB0ZW1wY3ggPiAwIDsgdGVtcGN4LS0gKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGVtcGF4IF49IDB4MjAgOwotICAgICAgICAgICAgICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDJQb3J0ICwgMHgwMCAsIHRlbXBheCApIDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLyogRW5kIG9mIGR5bmFtaWMgc2Vuc2UgVkIgKi8KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgWEdJX1NlbnNlQ1JUMShwVkJJbmZvKSA7Ci0gICAgICAgIFhHSV9HZXRTZW5zZVN0YXR1cyggSHdEZXZpY2VFeHRlbnNpb24sIHBWQkluZm8gKSA7CS8qIHNlbnNlIENSVDIgKi8KLSAgICAgICAgYkNvbm5lY3RTdGF0dXMgPSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4MzIgKSA7Ci0gICAgfQotICAgIHRlbXAgPSBwdXNoYXggJiAweDAwRkYgOwkJLyogMDUxMiBGaXggRHlzZW5zZSBoYW5nZWQgKi8KLSAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4MTcgLCB0ZW1wICkgOwotICAgIGlmICggYkNvbm5lY3RTdGF0dXMgKQotICAgIHsKLSAgICAgICAgKnVqQ29ubmVjdFN0YXR1cyA9IGJDb25uZWN0U3RhdHVzIDsKLSAgICAgICAgcmV0dXJuKCAxICkgOwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIHJldHVybiggMCApIDsKLX0KLQotI2VuZGlmIC8qIFdJTjIwMDAgKi8KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBGdW5jdGlvbiA6IFhHSVNldERQTVMgKi8KQEAgLTQ1NCwxMyArMTM1LDE0IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1WT0lEIFhHSVNldERQTVMoIFBYR0lfSFdfREVWSUNFX0lORk8gcFhHSUhXREUgLCBVTE9ORyBWRVNBX1BPV0VSX1NUQVRFICkKK3ZvaWQgWEdJU2V0RFBNUyhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpwWEdJSFdERSwKKwkJdW5zaWduZWQgbG9uZyBWRVNBX1BPV0VSX1NUQVRFKQogewotICAgIFVTSE9SVCBNb2RlTm8sIE1vZGVJZEluZGV4IDsKLSAgICBVQ0hBUiAgdGVtcCA7Ci0gICAgVkJfREVWSUNFX0lORk8gVkJJTkY7Ci0gICAgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gPSAmVkJJTkY7Ci0gICAgcFZCSW5mby0+QmFzZUFkZHIgPSAoVUxPTkcpcFhHSUhXREUtPnBqSU9BZGRyZXNzIDsKKyAgICB1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIE1vZGVJZEluZGV4OworICAgIHVuc2lnbmVkIGNoYXIgdGVtcDsKKyAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gVkJJTkY7CisgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvID0gJlZCSU5GOworICAgIHBWQkluZm8tPkJhc2VBZGRyID0gKHVuc2lnbmVkIGxvbmcpcFhHSUhXREUtPnBqSU9BZGRyZXNzIDsKICAgICBwVkJJbmZvLT5ST01BZGRyICA9IHBYR0lIV0RFLT5walZpcnR1YWxSb21CYXNlIDsKIAogCkBAIC01MjcsMTggKzIwOSwxOCBAQAogICAgIH0KIAogICAgIGlmICggVkVTQV9QT1dFUl9TVEFURSA9PSAweDAwMDAwNDAwICkKLSAgICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QYXJ0NFBvcnQgLCAweDMxICwgKCBVQ0hBUiApKCBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UGFydDRQb3J0ICwgMHgzMSApICYgMHhGRSApICkgOworCSAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QYXJ0NFBvcnQsIDB4MzEsICh1bnNpZ25lZCBjaGFyKShYR0lOZXdfR2V0UmVnMShwVkJJbmZvLT5QYXJ0NFBvcnQsIDB4MzEpICYgMHhGRSkpOwogICAgIGVsc2UKLSAgICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QYXJ0NFBvcnQgLCAweDMxICwgKCBVQ0hBUiApKCBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UGFydDRQb3J0ICwgMHgzMSApIHwgMHgwMSApICkgOworCSAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QYXJ0NFBvcnQsIDB4MzEsICh1bnNpZ25lZCBjaGFyKShYR0lOZXdfR2V0UmVnMShwVkJJbmZvLT5QYXJ0NFBvcnQsIDB4MzEpIHwgMHgwMSkpOwogCi0gICAgdGVtcCA9ICggVUNIQVIgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgxZiApIDsKKyAgICB0ZW1wID0gKHVuc2lnbmVkIGNoYXIpWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UDNjNCwgMHgxZik7CiAgICAgdGVtcCAmPSAweDNmIDsKICAgICBzd2l0Y2ggKCBWRVNBX1BPV0VSX1NUQVRFICkKICAgICB7CiAgICAgICAgIGNhc2UgMHgwMDAwMDAwMDogLyogb24gKi8KICAgICAgICAgICAgIGlmICggKCBwWEdJSFdERS0+dWpWQkNoaXBJRCA9PSBWQl9DSElQXzMwMSApIHx8ICggcFhHSUhXREUtPnVqVkJDaGlwSUQgPT0gVkJfQ0hJUF8zMDIgKSApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDFmICwgKCBVQ0hBUiApKCB0ZW1wIHwgMHgwMCApICkgOworCQlYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QM2M0LCAweDFmLCAodW5zaWduZWQgY2hhcikodGVtcCB8IDB4MDApKTsKICAgICAgICAgICAgICAgICBYR0lfRW5hYmxlQnJpZGdlKCBwWEdJSFdERSwgcFZCSW5mbyApIDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKQEAgLTU5Niw3ICsyNzgsNyBAQAogICAgICAgICAgICAgICAgIFhHSV9EaXNwbGF5T2ZmKCBwWEdJSFdERSwgcFZCSW5mbyApOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MWYgLCAoIFVDSEFSICkoIHRlbXAgfCAweDQwICkgKSA7CisJICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlAzYzQsIDB4MWYsICh1bnNpZ25lZCBjaGFyKSh0ZW1wIHwgMHg0MCkpOwogICAgICAgICAgICAgYnJlYWsgOwogICAgICAgICBjYXNlIDB4MDAwMDAyMDA6IC8qIHN1c3BlbmQgKi8KICAgICAgICAgICAgIGlmICggcFhHSUhXREUtPmpDaGlwVHlwZSA9PSBYRzIxICkKQEAgLTYwOSwxMiArMjkxLDEyIEBACiAgICAgICAgICAgICAgICAgWEdJX0Rpc3BsYXlPZmYoIHBYR0lIV0RFLCBwVkJJbmZvICk7CiAgICAgICAgICAgICAgICAgWEdJX1hHMjdCTFNpZ25hbFZERCggMHgyMCAsIDB4MDAsIHBWQkluZm8gKSA7IC8qIExWRFMgc2lnbmFsIG9mZiAqLwogICAgICAgICAgICAgfQotICAgICAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDFmICwgKCBVQ0hBUiApKCB0ZW1wIHwgMHg4MCApICkgOworCSAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QM2M0LCAweDFmLCAodW5zaWduZWQgY2hhcikodGVtcCB8IDB4ODApKTsKICAgICAgICAgICAgIGJyZWFrIDsKICAgICAgICAgY2FzZSAweDAwMDAwNDAwOiAvKiBvZmYgKi8KICAgICAgICAgICAgIGlmICggKHBYR0lIV0RFLT51alZCQ2hpcElEID09IFZCX0NISVBfMzAxICkgfHwgKCBwWEdJSFdERS0+dWpWQkNoaXBJRCA9PSBWQl9DSElQXzMwMiApICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MWYgLCAoIFVDSEFSICkoIHRlbXAgfCAweGMwICkgKSA7CisJCVhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlAzYzQsIDB4MWYsICh1bnNpZ25lZCBjaGFyKSh0ZW1wIHwgMHhjMCkpOwogICAgICAgICAgICAgICAgIFhHSV9EaXNhYmxlQnJpZGdlKCBwWEdJSFdERSwgcFZCSW5mbyApIDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKQEAgLTY3NywxMiArMzU5LDEyIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9HZXRTZW5zZVN0YXR1cyggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lfR2V0U2Vuc2VTdGF0dXMoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcGF4ID0gMCAsIHRlbXBieCAsIHRlbXBjeCAsIHRlbXAgLAorICAgIHVuc2lnbmVkIHNob3J0IHRlbXBheCA9IDAgLCB0ZW1wYnggLCB0ZW1wY3ggLCB0ZW1wICwKICAgICAgICAgICAgUDJyZWcwID0gMCAsIFNlbnNlTW9kZU5vID0gMCAsIE91dHB1dFNlbGVjdCA9ICpwVkJJbmZvLT5wT3V0cHV0U2VsZWN0ICwKICAgICAgICAgICAgTW9kZUlkSW5kZXggLCBpIDsKLSAgICBwVkJJbmZvLT5CYXNlQWRkciA9IChVTE9ORylId0RldmljZUV4dGVuc2lvbi0+cGpJT0FkZHJlc3MgOworICAgIHBWQkluZm8tPkJhc2VBZGRyID0gKHVuc2lnbmVkIGxvbmcpSHdEZXZpY2VFeHRlbnNpb24tPnBqSU9BZGRyZXNzIDsKIAogICAgIGlmICggcFZCSW5mby0+SUZfREVGX0xWRFMgPT0gMSApCiAgICAgewpAQCAtODc2LDEwICs1NTgsMTEgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLVVTSE9SVCBYR0lOZXdfU2Vuc2VMQ0QoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordW5zaWduZWQgc2hvcnQgWEdJTmV3X1NlbnNlTENEKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJICAgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICAvKiBVU0hPUlQgU29mdFNldHRpbmcgOyAqLwotICAgIFVTSE9SVCB0ZW1wIDsKKyAgICAvKiB1bnNpZ25lZCBzaG9ydCBTb2Z0U2V0dGluZyA7ICovCisgICAgdW5zaWduZWQgc2hvcnQgdGVtcCA7CiAKICAgICBpZiAoICggSHdEZXZpY2VFeHRlbnNpb24tPmpDaGlwVHlwZSA+PSBYRzIwICkgfHwgKCBId0RldmljZUV4dGVuc2lvbi0+akNoaXBUeXBlID49IFhHNDAgKSApCiAgICAgICAgIHRlbXAgPSAwIDsKQEAgLTg5OSw5ICs1ODIsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotQk9PTEVBTiBYR0lOZXdfR2V0TENERERDSW5mbyggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbixQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3Vuc2lnbmVkIGNoYXIgWEdJTmV3X0dldExDREREQ0luZm8oc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcCA7CisgICAgdW5zaWduZWQgc2hvcnQgdGVtcCA7CiAKICAgICAvKiBhZGQgbGNkIHNlbnNlICovCiAgICAgaWYgKCBId0RldmljZUV4dGVuc2lvbi0+dWxDUlQyTENEVHlwZSA9PSBMQ0RfVU5LTk9XTiApCkBAIC05MTAsNyArNTkzLDcgQEAKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgdGVtcCA9ICggVVNIT1JUIClId0RldmljZUV4dGVuc2lvbi0+dWxDUlQyTENEVHlwZSA7CisJICAgIHRlbXAgPSAodW5zaWduZWQgc2hvcnQpSHdEZXZpY2VFeHRlbnNpb24tPnVsQ1JUMkxDRFR5cGUgOwogICAgICAgICBzd2l0Y2goIEh3RGV2aWNlRXh0ZW5zaW9uLT51bENSVDJMQ0RUeXBlICkKICAgICAgICAgewogICAgICAgICAgICAgY2FzZSBMQ0RfSU5WQUxJRDoKQEAgLTk1MiwyNiArNjM1LDI3IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1CT09MRUFOIFhHSU5ld19HZXRQYW5lbElEKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3Vuc2lnbmVkIGNoYXIgWEdJTmV3X0dldFBhbmVsSUQoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBQYW5lbFR5cGVUYWJsZVsgMTYgXSA9IHsgU3luY05OIHwgUGFuZWxSR0IxOEJpdCB8IFBhbmVsODAweDYwMCAgfCBfUGFuZWxUeXBlMDAgLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY05OIHwgUGFuZWxSR0IxOEJpdCB8IFBhbmVsMTAyNHg3NjggfCBfUGFuZWxUeXBlMDEgLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY05OIHwgUGFuZWxSR0IxOEJpdCB8IFBhbmVsODAweDYwMCAgfCBfUGFuZWxUeXBlMDIgLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY05OIHwgUGFuZWxSR0IxOEJpdCB8IFBhbmVsNjQweDQ4MCAgfCBfUGFuZWxUeXBlMDMgLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY05OIHwgUGFuZWxSR0IxOEJpdCB8IFBhbmVsMTAyNHg3NjggfCBfUGFuZWxUeXBlMDQgLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY05OIHwgUGFuZWxSR0IxOEJpdCB8IFBhbmVsMTAyNHg3NjggfCBfUGFuZWxUeXBlMDUgLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY05OIHwgUGFuZWxSR0IxOEJpdCB8IFBhbmVsMTAyNHg3NjggfCBfUGFuZWxUeXBlMDYgLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY05OIHwgUGFuZWxSR0IyNEJpdCB8IFBhbmVsMTAyNHg3NjggfCBfUGFuZWxUeXBlMDcgLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY05OIHwgUGFuZWxSR0IxOEJpdCB8IFBhbmVsODAweDYwMCAgfCBfUGFuZWxUeXBlMDggLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY05OIHwgUGFuZWxSR0IxOEJpdCB8IFBhbmVsMTAyNHg3NjggfCBfUGFuZWxUeXBlMDkgLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY05OIHwgUGFuZWxSR0IxOEJpdCB8IFBhbmVsODAweDYwMCAgfCBfUGFuZWxUeXBlMEEgLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY05OIHwgUGFuZWxSR0IxOEJpdCB8IFBhbmVsMTAyNHg3NjggfCBfUGFuZWxUeXBlMEIgLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY05OIHwgUGFuZWxSR0IxOEJpdCB8IFBhbmVsMTAyNHg3NjggfCBfUGFuZWxUeXBlMEMgLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY05OIHwgUGFuZWxSR0IyNEJpdCB8IFBhbmVsMTAyNHg3NjggfCBfUGFuZWxUeXBlMEQgLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY05OIHwgUGFuZWxSR0IxOEJpdCB8IFBhbmVsMTAyNHg3NjggfCBfUGFuZWxUeXBlMEUgLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY05OIHwgUGFuZWxSR0IxOEJpdCB8IFBhbmVsMTAyNHg3NjggfCBfUGFuZWxUeXBlMEYgfSA7Ci0gICAgVVNIT1JUIHRlbXBheCAsIHRlbXBieCAsIHRlbXAgOwotICAgIC8qIFVTSE9SVCByZXR1cm5fZmxhZyA7ICovCisJdW5zaWduZWQgc2hvcnQgUGFuZWxUeXBlVGFibGVbMTZdID0geworCQlTeW5jTk4gfCBQYW5lbFJHQjE4Qml0IHwgUGFuZWw4MDB4NjAwICB8IF9QYW5lbFR5cGUwMCwKKwkJU3luY05OIHwgUGFuZWxSR0IxOEJpdCB8IFBhbmVsMTAyNHg3NjggfCBfUGFuZWxUeXBlMDEsCisJCVN5bmNOTiB8IFBhbmVsUkdCMThCaXQgfCBQYW5lbDgwMHg2MDAgIHwgX1BhbmVsVHlwZTAyLAorCQlTeW5jTk4gfCBQYW5lbFJHQjE4Qml0IHwgUGFuZWw2NDB4NDgwICB8IF9QYW5lbFR5cGUwMywKKwkJU3luY05OIHwgUGFuZWxSR0IxOEJpdCB8IFBhbmVsMTAyNHg3NjggfCBfUGFuZWxUeXBlMDQsCisJCVN5bmNOTiB8IFBhbmVsUkdCMThCaXQgfCBQYW5lbDEwMjR4NzY4IHwgX1BhbmVsVHlwZTA1LAorCQlTeW5jTk4gfCBQYW5lbFJHQjE4Qml0IHwgUGFuZWwxMDI0eDc2OCB8IF9QYW5lbFR5cGUwNiwKKwkJU3luY05OIHwgUGFuZWxSR0IyNEJpdCB8IFBhbmVsMTAyNHg3NjggfCBfUGFuZWxUeXBlMDcsCisJCVN5bmNOTiB8IFBhbmVsUkdCMThCaXQgfCBQYW5lbDgwMHg2MDAgIHwgX1BhbmVsVHlwZTA4LAorCQlTeW5jTk4gfCBQYW5lbFJHQjE4Qml0IHwgUGFuZWwxMDI0eDc2OCB8IF9QYW5lbFR5cGUwOSwKKwkJU3luY05OIHwgUGFuZWxSR0IxOEJpdCB8IFBhbmVsODAweDYwMCAgfCBfUGFuZWxUeXBlMEEsCisJCVN5bmNOTiB8IFBhbmVsUkdCMThCaXQgfCBQYW5lbDEwMjR4NzY4IHwgX1BhbmVsVHlwZTBCLAorCQlTeW5jTk4gfCBQYW5lbFJHQjE4Qml0IHwgUGFuZWwxMDI0eDc2OCB8IF9QYW5lbFR5cGUwQywKKwkJU3luY05OIHwgUGFuZWxSR0IyNEJpdCB8IFBhbmVsMTAyNHg3NjggfCBfUGFuZWxUeXBlMEQsCisJCVN5bmNOTiB8IFBhbmVsUkdCMThCaXQgfCBQYW5lbDEwMjR4NzY4IHwgX1BhbmVsVHlwZTBFLAorCQlTeW5jTk4gfCBQYW5lbFJHQjE4Qml0IHwgUGFuZWwxMDI0eDc2OCB8IF9QYW5lbFR5cGUwRiB9OworCXVuc2lnbmVkIHNob3J0IHRlbXBheCAsIHRlbXBieCwgdGVtcDsKKyAgICAvKiB1bnNpZ25lZCBzaG9ydCByZXR1cm5fZmxhZyA7ICovCiAKICAgICB0ZW1wYXggPSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MUEgKSA7CiAgICAgdGVtcGJ4ID0gdGVtcGF4ICYgMHgxRSA7CkBAIC0xMDI0LDkgKzcwOCw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1CT09MRUFOIFhHSU5ld19CcmlkZ2VJc0VuYWJsZSggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit1bnNpZ25lZCBjaGFyIFhHSU5ld19CcmlkZ2VJc0VuYWJsZShzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBmbGFnIDsKKyAgICB1bnNpZ25lZCBzaG9ydCBmbGFnIDsKIAogICAgIGlmICggWEdJX0JyaWRnZUlzT24oIHBWQkluZm8gKSA9PSAwICkKICAgICB7CkBAIC0xMDUxLDkgKzczNSw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1CT09MRUFOIFhHSU5ld19TZW5zZUhpVFYoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit1bnNpZ25lZCBjaGFyIFhHSU5ld19TZW5zZUhpVFYoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcGJ4ICwgdGVtcGN4ICwgdGVtcCAsIGkgLCB0ZW1wY2g7CisgICAgdW5zaWduZWQgc2hvcnQgdGVtcGJ4ICwgdGVtcGN4ICwgdGVtcCAsIGkgLCB0ZW1wY2g7CiAKICAgICB0ZW1wYnggPSAqcFZCSW5mby0+cFlDU2Vuc2VEYXRhMiA7CiAKQEAgLTExMzIsMTQgKzgxNiwxNCBAQAogOwkJICAgICBEWDogUEFuZWwgVi4gcmVzb2x1dGlvbgogOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwotdm9pZCBYR0lfWEcyMUZ1bjE0U3ViNzAoIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICwgUFg4Nl9SRUdTIHBCaW9zQXJndW1lbnRzICkKK3ZvaWQgWEdJX1hHMjFGdW4xNFN1YjcwKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbywgUFg4Nl9SRUdTIHBCaW9zQXJndW1lbnRzKQogewogCi0gICAgVVNIT1JUIE1vZGVJZEluZGV4OwotICAgIFVTSE9SVCBNb2RlTm87CisgICAgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXg7CisgICAgdW5zaWduZWQgc2hvcnQgTW9kZU5vOwogCi0gICAgVVNIT1JUIEVNb2RlQ291bnQ7Ci0gICAgVVNIT1JUIGx2ZHN0YWJsZWluZGV4OworICAgIHVuc2lnbmVkIHNob3J0IEVNb2RlQ291bnQ7CisgICAgdW5zaWduZWQgc2hvcnQgbHZkc3RhYmxlaW5kZXg7CiAKICAgICBsdmRzdGFibGVpbmRleCA9IFhHSV9HZXRMVkRTT0VNVGFibGVJbmRleCggcFZCSW5mbyApOwogICAgIHBCaW9zQXJndW1lbnRzLT5oLmJsID0gMHg4MTsKQEAgLTExNTMsNyArODM3LDcgQEAKICAgICAgICAgTW9kZU5vID0gcFZCSW5mby0+RU1vZGVJRFRhYmxlWyBNb2RlSWRJbmRleCBdLkV4dF9Nb2RlSUQ7CiAgICAgICAgIGlmICggcFZCSW5mby0+RU1vZGVJRFRhYmxlWyBNb2RlSWRJbmRleCBdLkV4dF9Nb2RlSUQgPT0gMHhGRiApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHBCaW9zQXJndW1lbnRzLT5oLmJoID0gKFVDSEFSKSBFTW9kZUNvdW50OworCSAgICBwQmlvc0FyZ3VtZW50cy0+aC5iaCA9ICh1bnNpZ25lZCBjaGFyKSBFTW9kZUNvdW50OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICggIVhHSV9YRzIxQ2hlY2tMVkRTTW9kZSggTW9kZU5vICwgTW9kZUlkSW5kZXgsIHBWQkluZm8pICkKQEAgLTExNzUsMTMgKzg1OSwxMyBAQAogOwogOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwotdm9pZCBYR0lfWEcyMUZ1bjE0U3ViNzEoIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICwgUFg4Nl9SRUdTIHBCaW9zQXJndW1lbnRzICkKK3ZvaWQgWEdJX1hHMjFGdW4xNFN1YjcxKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbywgUFg4Nl9SRUdTIHBCaW9zQXJndW1lbnRzKQogewogCi0gICAgVVNIT1JUIEVNb2RlQ291bnQ7Ci0gICAgVVNIT1JUIE1vZGVJZEluZGV4LHJlc2luZGV4OwotICAgIFVTSE9SVCBNb2RlTm87Ci0gICAgVVNIT1JUIEVNb2RlSW5kZXggPSBwQmlvc0FyZ3VtZW50cy0+aC5iaDsKKyAgICB1bnNpZ25lZCBzaG9ydCBFTW9kZUNvdW50OworICAgIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCByZXNpbmRleDsKKyAgICB1bnNpZ25lZCBzaG9ydCBNb2RlTm87CisgICAgdW5zaWduZWQgc2hvcnQgRU1vZGVJbmRleCA9IHBCaW9zQXJndW1lbnRzLT5oLmJoOwogCiAgICAgRU1vZGVDb3VudCA9IDA7CiAgICAgZm9yKCBNb2RlSWRJbmRleCA9IDAgOyA7ICBNb2RlSWRJbmRleCArKyApCkBAIC0xMTk5LDcgKzg4Myw3IEBACiAgICAgICAgIGlmIChFTW9kZUNvdW50ID09IEVNb2RlSW5kZXgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJlc2luZGV4ID0gWEdJX0dldFJlc0luZm8oIE1vZGVObyAsIE1vZGVJZEluZGV4LCBwVkJJbmZvICkgOwotICAgICAgICAgICAgcEJpb3NBcmd1bWVudHMtPmguYmwgPSAoVUNIQVIpIE1vZGVObzsKKwkgICAgcEJpb3NBcmd1bWVudHMtPmguYmwgPSAodW5zaWduZWQgY2hhcikgTW9kZU5vOwogICAgICAgICAgICAgcEJpb3NBcmd1bWVudHMtPnguY3ggPSBwVkJJbmZvLT5Nb2RlUmVzSW5mb1sgcmVzaW5kZXggXS5IVG90YWwgOwkJCSAgLyogeHJlcy0+YXggKi8KICAgICAgICAgICAgIHBCaW9zQXJndW1lbnRzLT54LmR4ID0gcFZCSW5mby0+TW9kZVJlc0luZm9bIHJlc2luZGV4IF0uVlRvdGFsIDsJCQkgIC8qIHlyZXMtPmJ4ICovCiAgICAgICAgICAgICBwQmlvc0FyZ3VtZW50cy0+eC5heCA9IDB4MDAxNDsKQEAgLTEyMjEsMTAgKzkwNSwxMCBAQAogOwogOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwotdm9pZCBYR0lfWEcyMUZ1bjE0U3ViNzIoIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICwgUFg4Nl9SRUdTIHBCaW9zQXJndW1lbnRzICkKK3ZvaWQgWEdJX1hHMjFGdW4xNFN1YjcyKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbywgUFg4Nl9SRUdTIHBCaW9zQXJndW1lbnRzKQogewotICAgIFVTSE9SVCBNb2RlSWRJbmRleCxyZXNpbmRleDsKLSAgICBVU0hPUlQgTW9kZU5vOworICAgIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCByZXNpbmRleDsKKyAgICB1bnNpZ25lZCBzaG9ydCBNb2RlTm87CiAKIAogICAgIE1vZGVObyA9IHBCaW9zQXJndW1lbnRzLT5oLmJsIDsKQEAgLTEyODAsMTEgKzk2NCwxMSBAQAogOyAgICAgICAgICAgICAgICAgICAgICAgQlhbNl06ICpWYWx1ZTEgRFs2XSBQYW5lbCBILiBQb2xhcml0eQogOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwotdm9pZCBYR0lfWEcyMUZ1bjE0U3ViNzMoIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICwgUFg4Nl9SRUdTIHBCaW9zQXJndW1lbnRzICkKK3ZvaWQgWEdJX1hHMjFGdW4xNFN1YjczKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbywgUFg4Nl9SRUdTIHBCaW9zQXJndW1lbnRzKQogewotICAgIFVDSEFSIFNlbGVjdDsKKyAgICB1bnNpZ25lZCBjaGFyIFNlbGVjdDsKIAotICAgIFVTSE9SVCBsdmRzdGFibGVpbmRleDsKKyAgICB1bnNpZ25lZCBzaG9ydCBsdmRzdGFibGVpbmRleDsKIAogICAgIGx2ZHN0YWJsZWluZGV4ID0gWEdJX0dldExWRFNPRU1UYWJsZUluZGV4KCBwVkJJbmZvICk7CiAgICAgU2VsZWN0ID0gcEJpb3NBcmd1bWVudHMtPmguYmw7CkBAIC0xMzE0LDEwICs5OTgsMTAgQEAKIH0KIAogCi12b2lkIFhHSV9YRzIxRnVuMTQoIFBYR0lfSFdfREVWSUNFX0lORk8gcFhHSUhXREUsIFBYODZfUkVHUyBwQmlvc0FyZ3VtZW50cykKK3ZvaWQgWEdJX1hHMjFGdW4xNChzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpwWEdJSFdERSwgUFg4Nl9SRUdTIHBCaW9zQXJndW1lbnRzKQogewotICAgIFZCX0RFVklDRV9JTkZPIFZCSU5GOwotICAgIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvID0gJlZCSU5GOworICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyBWQklORjsKKyAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8gPSAmVkJJTkY7CiAKICAgICBwVkJJbmZvLT5JRl9ERUZfTFZEUyA9IDAgOwogICAgIHBWQkluZm8tPklGX0RFRl9DSDcwMDUgPSAwIDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9leHQuaCBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9leHQuaAppbmRleCA5YTcyZjVlLi41Y2M0ZDEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfZXh0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX2V4dC5oCkBAIC0yLDE1ICsyLDE3IEBACiAjZGVmaW5lICBfVkJFWFRfCiAKIHN0cnVjdCBEV09SRFJFR1MgewotICAgIFVMT05HICAgIEVheCwgRWJ4LCBFY3gsIEVkeCwgRXNpLCBFZGksIEVicDsKKyAgICB1bnNpZ25lZCBsb25nICAgIEVheCwgRWJ4LCBFY3gsIEVkeCwgRXNpLCBFZGksIEVicDsKIH07CiAKIHN0cnVjdCBXT1JEUkVHUyB7Ci0gICAgVVNIT1JUICAgIGF4LCBoaV9heCwgYngsIGhpX2J4LCBjeCwgaGlfY3gsIGR4LCBoaV9keCwgc2ksIGhpX3NpLCBkaSAsaGlfZGksIGJwLCBoaV9icDsKKyAgICB1bnNpZ25lZCBzaG9ydCBheCwgaGlfYXgsIGJ4LCBoaV9ieCwgY3gsIGhpX2N4LCBkeCwgaGlfZHgsIHNpLAorCSAgICBoaV9zaSwgZGksIGhpX2RpLCBicCwgaGlfYnA7CiB9OwogCiBzdHJ1Y3QgQllURVJFR1MgewotICAgIFVDSEFSICAgYWwsIGFoLCBoaV9hbCwgaGlfYWgsIGJsLCBiaCwgaGlfYmwsIGhpX2JoLCBjbCwgY2gsIGhpX2NsLCBoaV9jaCwgZGwsIGRoLCBoaV9kbCwgaGlfZGg7CisgICAgIHVuc2lnbmVkIGNoYXIgYWwsIGFoLCBoaV9hbCwgaGlfYWgsIGJsLCBiaCwgaGlfYmwsIGhpX2JoLCBjbCwgY2gsCisJICAgICBoaV9jbCwgaGlfY2gsIGRsLCBkaCwgaGlfZGwsIGhpX2RoOwogfTsKIAogdHlwZWRlZiB1bmlvbiAgIF9YODZfUkVHUyAgICB7CkBAIC0xOSwxNCArMjEsMTQgQEAKICAgICBzdHJ1Y3QgIEJZVEVSRUdTIGg7CiB9IFg4Nl9SRUdTLCAqUFg4Nl9SRUdTOwogCi1leHRlcm4gICB2b2lkICAgICBYR0lfWEcyMUZ1bjE0KCBQWEdJX0hXX0RFVklDRV9JTkZPIHBYR0lIV0RFLCBQWDg2X1JFR1MgcEJpb3NBcmd1bWVudHMpOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJU2V0RFBNUyggUFhHSV9IV19ERVZJQ0VfSU5GTyBwWEdJSFdERSAsIFVMT05HIFZFU0FfUE9XRVJfU1RBVEUgKSA7Ci1leHRlcm4gICB2b2lkICAgICBYR0lfR2V0U2Vuc2VTdGF0dXMoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJTmV3X1NldE1vZGVTY3JhdGNoICggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkgOwotZXh0ZXJuICAgdm9pZCAJICBSZWFkVkJJT1NUYWJsRGF0YSggVUNIQVIgQ2hpcFR5cGUgLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci1leHRlcm4gICBVU0hPUlQgICBYR0lOZXdfU2Vuc2VMQ0QoUFhHSV9IV19ERVZJQ0VfSU5GTyxQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci0jaWZkZWYgV0lOMjAwMAotZXh0ZXJuICAgQk9PTEVBTiAgWEdJX0R5U2Vuc2UoIFBIV19ERVZJQ0VfRVhURU5TSU9OIHBIV0RFICwgUFVDSEFSIHVqQ29ubmVjdFN0YXR1cyApOwotI2VuZGlmIC8qIFdJTjIwMDAgKi8KK2V4dGVybiAgIHZvaWQgICAgIFhHSV9YRzIxRnVuMTQoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqcFhHSUhXREUsIFBYODZfUkVHUyBwQmlvc0FyZ3VtZW50cyk7CitleHRlcm4gdm9pZCBYR0lTZXREUE1TKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKnBYR0lIV0RFLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBWRVNBX1BPV0VSX1NUQVRFKTsKK2V4dGVybiAgIHZvaWQgICAgIFhHSV9HZXRTZW5zZVN0YXR1cyhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK2V4dGVybiAgIHZvaWQgICAgIFhHSU5ld19TZXRNb2RlU2NyYXRjaChzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKSA7CitleHRlcm4gdm9pZCBSZWFkVkJJT1NUYWJsRGF0YSh1bnNpZ25lZCBjaGFyIENoaXBUeXBlLAorCQkJICAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBYR0lOZXdfU2Vuc2VMQ0Qoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqLAorCQkJCSAgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX2luaXQuYyBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9pbml0LmMKaW5kZXggYjg1Y2E5Yi4uZTAyNzIyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX2luaXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfaW5pdC5jCkBAIC0xLDI5ICsxLDkgQEAKLSNpbmNsdWRlICJvc2RlZi5oIgogI2luY2x1ZGUgInZnYXR5cGVzLmgiCiAKLQotI2lmZGVmIExJTlVYX0tFUk5FTAogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+IC8qIHVkZWxheSAqLwogI2luY2x1ZGUgIlhHSWZiLmgiCi0vKiNpZiBMSU5VWF9WRVJTeElPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotI2luY2x1ZGUgPHZpZGVvL1hHSWZiLmg+Ci0jZWxzZQotI2luY2x1ZGUgPGxpbnV4L1hHSWZiLmg+Ci0jZW5kaWYgKi8KLSNlbmRpZgotCi0jaWZkZWYgV0lOMjAwMAotI2luY2x1ZGUgPGRkZXJyb3IuaD4KLSNpbmNsdWRlIDxkZXZpb2N0bC5oPgotI2luY2x1ZGUgPG1pbmlwb3J0Lmg+Ci0jaW5jbHVkZSA8bnRkZHZkZW8uaD4KLSNpbmNsdWRlIDx2aWRlby5oPgotI2luY2x1ZGUgInhnaXYuaCIKLSNpbmNsdWRlICJkZF9pMmMuaCIKLSNpbmNsdWRlICJ0b29scy5oIgotI2VuZGlmCiAKICNpbmNsdWRlICJ2Yl9kZWYuaCIKICNpbmNsdWRlICJ2Yl9zdHJ1Y3QuaCIKQEAgLTMyLDEyMyArMTIsMTA1IEBACiAjaW5jbHVkZSAidmJfaW5pdC5oIgogI2luY2x1ZGUgInZiX2V4dC5oIgogCi0jaWZkZWYgTElOVVhfWEY4NgotI2luY2x1ZGUgInhmODYuaCIKLSNpbmNsdWRlICJ4Zjg2UGNpSW5mby5oIgotI2luY2x1ZGUgInhnaS5oIgotI2luY2x1ZGUgInhnaV9yZWdzLmgiCi0jZW5kaWYKIAotI2lmZGVmIExJTlVYX0tFUk5FTAogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jZW5kaWYKIAogCiAKIAotVUNIQVIgICAgWEdJTmV3X0NoYW5uZWxBQixYR0lOZXdfRGF0YUJ1c1dpZHRoOwordW5zaWduZWQgY2hhciBYR0lOZXdfQ2hhbm5lbEFCLCBYR0lOZXdfRGF0YUJ1c1dpZHRoOwogCi1VU0hPUlQgWEdJTmV3X0RSQU1UeXBlWzE3XVs1XT17ezB4MEMsMHgwQSwweDAyLDB4NDAsMHgzOX0sezB4MEQsMHgwQSwweDAxLDB4NDAsMHg0OH0sCi0gICAgICAgICAgICAgICAgICAgICB7MHgwQywweDA5LDB4MDIsMHgyMCwweDM1fSx7MHgwRCwweDA5LDB4MDEsMHgyMCwweDQ0fSwKLSAgICAgICAgICAgICAgICAgICAgIHsweDBDLDB4MDgsMHgwMiwweDEwLDB4MzF9LHsweDBELDB4MDgsMHgwMSwweDEwLDB4NDB9LAotICAgICAgICAgICAgICAgICAgICAgezB4MEMsMHgwQSwweDAxLDB4MjAsMHgzNH0sezB4MEMsMHgwOSwweDAxLDB4MDgsMHgzMn0sCi0gICAgICAgICAgICAgICAgICAgICB7MHgwQiwweDA4LDB4MDIsMHgwOCwweDIxfSx7MHgwQywweDA4LDB4MDEsMHgwOCwweDMwfSwKLSAgICAgICAgICAgICAgICAgICAgIHsweDBBLDB4MDgsMHgwMiwweDA0LDB4MTF9LHsweDBCLDB4MEEsMHgwMSwweDEwLDB4Mjh9LAotICAgICAgICAgICAgICAgICAgICAgezB4MDksMHgwOCwweDAyLDB4MDIsMHgwMX0sezB4MEIsMHgwOSwweDAxLDB4MDgsMHgyNH0sCi0gICAgICAgICAgICAgICAgICAgICB7MHgwQiwweDA4LDB4MDEsMHgwNCwweDIwfSx7MHgwQSwweDA4LDB4MDEsMHgwMiwweDEwfSwKLSAgICAgICAgICAgICAgICAgICAgIHsweDA5LDB4MDgsMHgwMSwweDAxLDB4MDB9fTsKK3Vuc2lnbmVkIHNob3J0IFhHSU5ld19EUkFNVHlwZVsxN11bNV0gPSB7CisJezB4MEMsIDB4MEEsIDB4MDIsIDB4NDAsIDB4Mzl9LCB7MHgwRCwgMHgwQSwgMHgwMSwgMHg0MCwgMHg0OH0sCisJezB4MEMsIDB4MDksIDB4MDIsIDB4MjAsIDB4MzV9LCB7MHgwRCwgMHgwOSwgMHgwMSwgMHgyMCwgMHg0NH0sCisJezB4MEMsIDB4MDgsIDB4MDIsIDB4MTAsIDB4MzF9LCB7MHgwRCwgMHgwOCwgMHgwMSwgMHgxMCwgMHg0MH0sCisJezB4MEMsIDB4MEEsIDB4MDEsIDB4MjAsIDB4MzR9LCB7MHgwQywgMHgwOSwgMHgwMSwgMHgwOCwgMHgzMn0sCisJezB4MEIsIDB4MDgsIDB4MDIsIDB4MDgsIDB4MjF9LCB7MHgwQywgMHgwOCwgMHgwMSwgMHgwOCwgMHgzMH0sCisJezB4MEEsIDB4MDgsIDB4MDIsIDB4MDQsIDB4MTF9LCB7MHgwQiwgMHgwQSwgMHgwMSwgMHgxMCwgMHgyOH0sCisJezB4MDksIDB4MDgsIDB4MDIsIDB4MDIsIDB4MDF9LCB7MHgwQiwgMHgwOSwgMHgwMSwgMHgwOCwgMHgyNH0sCisJezB4MEIsIDB4MDgsIDB4MDEsIDB4MDQsIDB4MjB9LCB7MHgwQSwgMHgwOCwgMHgwMSwgMHgwMiwgMHgxMH0sCisJezB4MDksIDB4MDgsIDB4MDEsIDB4MDEsIDB4MDB9IH07CiAKLVVTSE9SVCBYR0lOZXdfU0RSRFJBTV9UWVBFWzEzXVs1XT0KLXsKLXsgMiwxMiwgOSw2NCwweDM1fSwKLXsgMSwxMywgOSw2NCwweDQ0fSwKLXsgMiwxMiwgOCwzMiwweDMxfSwKLXsgMiwxMSwgOSwzMiwweDI1fSwKLXsgMSwxMiwgOSwzMiwweDM0fSwKLXsgMSwxMywgOCwzMiwweDQwfSwKLXsgMiwxMSwgOCwxNiwweDIxfSwKLXsgMSwxMiwgOCwxNiwweDMwfSwKLXsgMSwxMSwgOSwxNiwweDI0fSwKLXsgMSwxMSwgOCwgOCwweDIwfSwKLXsgMiwgOSwgOCwgNCwweDAxfSwKLXsgMSwxMCwgOCwgNCwweDEwfSwKLXsgMSwgOSwgOCwgMiwweDAwfQotfTsKK3Vuc2lnbmVkIHNob3J0IFhHSU5ld19TRFJEUkFNX1RZUEVbMTNdWzVdID0geworCXsgMiwgMTIsIDksIDY0LCAweDM1fSwKKwl7IDEsIDEzLCA5LCA2NCwgMHg0NH0sCisJeyAyLCAxMiwgOCwgMzIsIDB4MzF9LAorCXsgMiwgMTEsIDksIDMyLCAweDI1fSwKKwl7IDEsIDEyLCA5LCAzMiwgMHgzNH0sCisJeyAxLCAxMywgOCwgMzIsIDB4NDB9LAorCXsgMiwgMTEsIDgsIDE2LCAweDIxfSwKKwl7IDEsIDEyLCA4LCAxNiwgMHgzMH0sCisJeyAxLCAxMSwgOSwgMTYsIDB4MjR9LAorCXsgMSwgMTEsIDgsICA4LCAweDIwfSwKKwl7IDIsICA5LCA4LCAgNCwgMHgwMX0sCisJeyAxLCAxMCwgOCwgIDQsIDB4MTB9LAorCXsgMSwgIDksIDgsICAyLCAweDAwfSB9OwogCi1VU0hPUlQgWEdJTmV3X0REUkRSQU1fVFlQRVs0XVs1XT0KLXsKLXsgMiwxMiwgOSw2NCwweDM1fSwKLXsgMiwxMiwgOCwzMiwweDMxfSwKLXsgMiwxMSwgOCwxNiwweDIxfSwKLXsgMiwgOSwgOCwgNCwweDAxfQotfTsKLVVTSE9SVCBYR0lOZXdfRERSRFJBTV9UWVBFMzQwWzRdWzVdPQotewoteyAyLDEzLCA5LDY0LDB4NDV9LAoteyAyLDEyLCA5LDMyLDB4MzV9LAoteyAyLDEyLCA4LDE2LDB4MzF9LAoteyAyLDExLCA4LCA4LDB4MjF9Ci19OwotVVNIT1JUIFhHSU5ld19ERFJEUkFNX1RZUEUyMFsxMl1bNV09Ci17Ci17IDIsMTQsMTEsMTI4LDB4NUR9LAoteyAyLDE0LDEwLDY0LDB4NTl9LAoteyAyLDEzLDExLDY0LDB4NER9LAoteyAyLDE0LCA5LDMyLDB4NTV9LAoteyAyLDEzLDEwLDMyLDB4NDl9LAoteyAyLDEyLDExLDMyLDB4M0R9LAoteyAyLDE0LCA4LDE2LDB4NTF9LAoteyAyLDEzLCA5LDE2LDB4NDV9LAoteyAyLDEyLDEwLDE2LDB4Mzl9LAoteyAyLDEzLCA4LCA4LDB4NDF9LAoteyAyLDEyLCA5LCA4LDB4MzV9LAoteyAyLDEyLCA4LCA0LDB4MzF9Ci19OwordW5zaWduZWQgc2hvcnQgWEdJTmV3X0REUkRSQU1fVFlQRVs0XVs1XSA9IHsKKwl7IDIsIDEyLCA5LCA2NCwgMHgzNX0sCisJeyAyLCAxMiwgOCwgMzIsIDB4MzF9LAorCXsgMiwgMTEsIDgsIDE2LCAweDIxfSwKKwl7IDIsICA5LCA4LCAgNCwgMHgwMX0gfTsKIAotdm9pZCAgICAgWEdJTmV3X1NldERSQU1TaXplXzM0MChQWEdJX0hXX0RFVklDRV9JTkZPLCBQVkJfREVWSUNFX0lORk8pOwotdm9pZCAgICAgWEdJTmV3X1NldERSQU1TaXplXzMxMChQWEdJX0hXX0RFVklDRV9JTkZPLCBQVkJfREVWSUNFX0lORk8pOwotdm9pZCAgICAgWEdJTmV3X1NldE1lbW9yeUNsb2NrKFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyApOwotdm9pZCAgICAgWEdJTmV3X1NldERSQU1Nb2RlUmVnaXN0ZXIoUFZCX0RFVklDRV9JTkZPICk7Ci12b2lkICAgICBYR0lOZXdfU2V0RFJBTU1vZGVSZWdpc3RlcjM0MCggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiApOwotdm9pZCAJIFhHSU5ld19TZXREUkFNRGVmYXVsdFJlZ2lzdGVyMzQwKFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFVMT05HLCBQVkJfREVWSUNFX0lORk8gKTsKLVVDSEFSICAgIFhHSU5ld19HZXRYRzIwRFJBTVR5cGUoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci1CT09MRUFOICBYR0lJbml0TmV3KCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uKSA7Cit1bnNpZ25lZCBzaG9ydCBYR0lOZXdfRERSRFJBTV9UWVBFMzQwWzRdWzVdID0geworCXsgMiwgMTMsIDksIDY0LCAweDQ1fSwKKwl7IDIsIDEyLCA5LCAzMiwgMHgzNX0sCisJeyAyLCAxMiwgOCwgMTYsIDB4MzF9LAorCXsgMiwgMTEsIDgsICA4LCAweDIxfSB9OwogCi1pbnQgICAgICBYR0lOZXdfRERSU2l6aW5nMzQwKCBQWEdJX0hXX0RFVklDRV9JTkZPLCBQVkJfREVWSUNFX0lORk8gKTsKLXZvaWQgICAgIFhHSU5ld19EaXNhYmxlUmVmcmVzaCggUFhHSV9IV19ERVZJQ0VfSU5GTyAsUFZCX0RFVklDRV9JTkZPKSA7Ci12b2lkICAgICBYR0lOZXdfQ2hlY2tCdXNXaWR0aF8zMTAoIFBWQl9ERVZJQ0VfSU5GTykgOwotaW50ICAgICAgWEdJTmV3X1NEUlNpemluZyhQVkJfREVWSUNFX0lORk8pOwotaW50ICAgICAgWEdJTmV3X0REUlNpemluZyggUFZCX0RFVklDRV9JTkZPICk7Ci12b2lkICAgICBYR0lOZXdfRW5hYmxlUmVmcmVzaCggUFhHSV9IV19ERVZJQ0VfSU5GTywgUFZCX0RFVklDRV9JTkZPKTsKK3Vuc2lnbmVkIHNob3J0IFhHSU5ld19ERFJEUkFNX1RZUEUyMFsxMl1bNV0gPSB7CisJeyAyLCAxNCwgMTEsIDEyOCwgMHg1RH0sCisJeyAyLCAxNCwgMTAsIDY0LCAweDU5fSwKKwl7IDIsIDEzLCAxMSwgNjQsIDB4NER9LAorCXsgMiwgMTQsICA5LCAzMiwgMHg1NX0sCisJeyAyLCAxMywgMTAsIDMyLCAweDQ5fSwKKwl7IDIsIDEyLCAxMSwgMzIsIDB4M0R9LAorCXsgMiwgMTQsICA4LCAxNiwgMHg1MX0sCisJeyAyLCAxMywgIDksIDE2LCAweDQ1fSwKKwl7IDIsIDEyLCAxMCwgMTYsIDB4Mzl9LAorCXsgMiwgMTMsICA4LCAgOCwgMHg0MX0sCisJeyAyLCAxMiwgIDksICA4LCAweDM1fSwKKwl7IDIsIDEyLCAgOCwgIDQsIDB4MzF9IH07CisKK3ZvaWQgICAgIFhHSU5ld19TZXREUkFNU2l6ZV8zNDAoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7Cit2b2lkICAgICBYR0lOZXdfU2V0RFJBTVNpemVfMzEwKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKiwgc3RydWN0IHZiX2RldmljZV9pbmZvICopOwordm9pZCAgICAgWEdJTmV3X1NldE1lbW9yeUNsb2NrKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7Cit2b2lkICAgICBYR0lOZXdfU2V0RFJBTU1vZGVSZWdpc3RlcihzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7Cit2b2lkICAgICBYR0lOZXdfU2V0RFJBTU1vZGVSZWdpc3RlcjM0MChzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbik7Cit2b2lkIFhHSU5ld19TZXREUkFNRGVmYXVsdFJlZ2lzdGVyMzQwKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKK3Vuc2lnbmVkIGNoYXIgWEdJTmV3X0dldFhHMjBEUkFNVHlwZShzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJCQkgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit1bnNpZ25lZCBjaGFyIFhHSUluaXROZXcoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24pOworCitpbnQgICAgICBYR0lOZXdfRERSU2l6aW5nMzQwKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKiwgc3RydWN0IHZiX2RldmljZV9pbmZvICopOwordm9pZCAgICAgWEdJTmV3X0Rpc2FibGVSZWZyZXNoKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKiwgc3RydWN0IHZiX2RldmljZV9pbmZvICopIDsKK3ZvaWQgICAgIFhHSU5ld19DaGVja0J1c1dpZHRoXzMxMChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKikgOworaW50ICAgICAgWEdJTmV3X1NEUlNpemluZyhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CitpbnQgICAgICBYR0lOZXdfRERSU2l6aW5nKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKK3ZvaWQgICAgIFhHSU5ld19FbmFibGVSZWZyZXNoKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKiwgc3RydWN0IHZiX2RldmljZV9pbmZvICopOwogaW50ICAgICAgWEdJTmV3X1JBTVR5cGU7ICAgICAgICAgICAgICAgICAgLyppbnQgICAgICBNb2RlSURPZmZzZXQsU3RhbmRUYWJsZSxDUlQxVGFibGUsU2NyZWVuT2Zmc2V0LFJFRkluZGV4OyovCi1VTE9ORwkgVU5JUk9NOwkJCSAgLyogVU5JUk9NICovCi1CT09MRUFOICBDaGtMRkIoIFBWQl9ERVZJQ0VfSU5GTyApOwotdm9pZCAgICAgWEdJTmV3X0RlbGF5MTV1cyhVTE9ORyk7Ci12b2lkICAgICBTZXRQb3dlckNvbnN1bWUgKFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sVUxPTkcgWEdJX1AzZDRQb3J0KTsKLXZvaWQgCSBSZWFkVkJJT1NUYWJsRGF0YSggVUNIQVIgQ2hpcFR5cGUgLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkIAkgWEdJTmV3X0REUjF4X01SU19YRzIwKCBVTE9ORyBQM2M0ICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJTmV3X1NldERSQU1Nb2RlUmVnaXN0ZXJfWEcyMCggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiApOwotdm9pZCAgICAgWEdJTmV3X1NldERSQU1Nb2RlUmVnaXN0ZXJfWEcyNyggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiApOwotdm9pZCAJIFhHSU5ld19DaGtTZW5zZVN0YXR1cyAoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApIDsKLXZvaWQgICAgIFhHSU5ld19TZXRNb2RlU2NyYXRjaCAoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApIDsKLXZvaWQgICAgIFhHSU5ld19HZXRYRzIxU2Vuc2UoUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pIDsKLVVDSEFSICAgIEdldFhHMjFGUEJpdHMoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJTmV3X0dldFhHMjdTZW5zZShQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykgOwotVUNIQVIgICAgR2V0WEcyN0ZQQml0cyhQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Cit1bnNpZ25lZCBsb25nCSBVTklST007CQkJICAvKiBVTklST00gKi8KK3Vuc2lnbmVkIGNoYXIgIENoa0xGQihzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7Cit2b2lkICAgICBYR0lOZXdfRGVsYXkxNXVzKHVuc2lnbmVkIGxvbmcpOwordm9pZCAgICAgU2V0UG93ZXJDb25zdW1lKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJIHVuc2lnbmVkIGxvbmcgWEdJX1AzZDRQb3J0KTsKK3ZvaWQgICAgIFJlYWRWQklPU1RhYmxEYXRhKHVuc2lnbmVkIGNoYXIgQ2hpcFR5cGUsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lOZXdfRERSMXhfTVJTX1hHMjAodW5zaWduZWQgbG9uZyBQM2M0LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJTmV3X1NldERSQU1Nb2RlUmVnaXN0ZXJfWEcyMChzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbik7Cit2b2lkICAgICBYR0lOZXdfU2V0RFJBTU1vZGVSZWdpc3Rlcl9YRzI3KHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uKTsKK3ZvaWQgICAgIFhHSU5ld19DaGtTZW5zZVN0YXR1cyhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKSA7Cit2b2lkICAgICBYR0lOZXdfU2V0TW9kZVNjcmF0Y2goc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykgOwordm9pZCAgICAgWEdJTmV3X0dldFhHMjFTZW5zZShzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKSA7Cit1bnNpZ25lZCBjaGFyICAgIEdldFhHMjFGUEJpdHMoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSU5ld19HZXRYRzI3U2Vuc2Uoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykgOwordW5zaWduZWQgY2hhciAgICBHZXRYRzI3RlBCaXRzKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7CiAKLSNpZmRlZiBXSU4yMDAwCi0vKiBbQmlsbHldIDIwMDcvMDUvMjAgRm9yIENINzAwNyAqLwotZXh0ZXJuICBVQ0hBUiBDSDcwMDdUVlJlZ19VTlRTQ1tdWzhdLENINzAwN1RWUmVnX09OVFNDW11bOF0sQ0g3MDA3VFZSZWdfVVBBTFtdWzhdLENINzAwN1RWUmVnX09QQUxbXVs4XTsKLWV4dGVybiAgVUNIQVIgWEdJNzAwN19DSFRWVkNMS1VOVFNDW10sWEdJNzAwN19DSFRWVkNMS09OVFNDW10sWEdJNzAwN19DSFRWVkNMS1VQQUxbXSxYR0k3MDA3X0NIVFZWQ0xLT1BBTFtdOwotI2VuZGlmCi0KLSNpZmRlZiBMSU5VWF9LRVJORUwKLXZvaWQgRGVsYXlVUyhVTE9ORyBNaWNyb1NlY29uZHMpCit2b2lkIERlbGF5VVModW5zaWduZWQgbG9uZyBNaWNyb1NlY29uZHMpCiB7CiAJdWRlbGF5KE1pY3JvU2Vjb25kcyk7CiB9Ci0jZW5kaWYKKwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIEZ1bmN0aW9uIDogWEdJSW5pdE5ldyAqLwpAQCAtMTU2LDQ2ICsxMTgsNDQgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLUJPT0xFQU4gWEdJSW5pdE5ldyggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiApCit1bnNpZ25lZCBjaGFyIFhHSUluaXROZXcoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24pCiB7CiAKLSAgICBWQl9ERVZJQ0VfSU5GTyBWQklORjsKLSAgICBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyA9ICZWQklORjsKLSAgICBVQ0hBUiAgIGkgLCB0ZW1wID0gMCAsIHRlbXAxIDsKKyAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gVkJJTkY7CisgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvID0gJlZCSU5GOworICAgIHVuc2lnbmVkIGNoYXIgICBpLCB0ZW1wID0gMCwgdGVtcDEgOwogICAgICAvLyAgICAgICBWQklPU1ZlcnNpb25bIDUgXSA7Ci0gICAgUFVDSEFSICB2b2xhdGlsZSBwVmlkZW9NZW1vcnk7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcFZpZGVvTWVtb3J5OwogCi0gICAgLyogVUxPTkcgaiwgayA7ICovCisgICAgLyogdW5zaWduZWQgbG9uZyBqLCBrIDsgKi8KIAotICAgIFBYR0lfRFNSZWcgcFNSIDsKKyAgICBzdHJ1Y3QgWEdJX0RTUmVnICpwU1IgOwogCi0gICAgVUxPTkcgVGVtcCA7CisgICAgdW5zaWduZWQgbG9uZyBUZW1wIDsKIAogICAgIHBWQkluZm8tPlJPTUFkZHIgPSBId0RldmljZUV4dGVuc2lvbi0+cGpWaXJ0dWFsUm9tQmFzZSA7CiAKICAgICBwVkJJbmZvLT5GQkFkZHIgPSBId0RldmljZUV4dGVuc2lvbi0+cGpWaWRlb01lbW9yeUFkZHJlc3MgOwogCi0gICAgcFZCSW5mby0+QmFzZUFkZHIgPSAoVUxPTkcpSHdEZXZpY2VFeHRlbnNpb24tPnBqSU9BZGRyZXNzIDsKKyAgICBwVkJJbmZvLT5CYXNlQWRkciA9ICh1bnNpZ25lZCBsb25nKUh3RGV2aWNlRXh0ZW5zaW9uLT5waklPQWRkcmVzcyA7CiAKLSAgICBwVmlkZW9NZW1vcnkgPSAoIFBVQ0hBUiApcFZCSW5mby0+Uk9NQWRkcjsKKyAgICBwVmlkZW9NZW1vcnkgPSAodW5zaWduZWQgY2hhciAqKXBWQkluZm8tPlJPTUFkZHI7CiAKIAogLy8gICAgTmV3ZGVidWdjb2RlKCAweDk5ICkgOwogCiAKICAgIC8qIGlmICggcFZCSW5mby0+Uk9NQWRkciA9PSAwICkgKi8KLSAgIC8qIHJldHVybiggRkFMU0UgKSA7ICovCisgICAvKiByZXR1cm4oIDAgKSA7ICovCiAKLSAgICBpZiAoIHBWQkluZm8tPkZCQWRkciA9PSAwICkKLXsKKyAgICBpZiAocFZCSW5mby0+RkJBZGRyID09IDApIHsKICAgICAgICBwcmludGsoIlxuIHBWQkluZm8tPkZCQWRkciA9PSAwICIpOwotICAgICAgIHJldHVybiggRkFMU0UgKSA7Ci19CisgICAgICAgcmV0dXJuIDA7CisgICAgfQogcHJpbnRrKCIxIik7Ci0gICAgaWYgKCBwVkJJbmZvLT5CYXNlQWRkciA9PSAwICkKLXsKLSAgICAgICBwcmludGsoIlxucFZCSW5mby0+QmFzZUFkZHIgPT0gMCAiKTsKLSAgICAgICAgcmV0dXJuKCBGQUxTRSApIDsKK2lmIChwVkJJbmZvLT5CYXNlQWRkciA9PSAwKSB7CisJcHJpbnRrKCJcbnBWQkluZm8tPkJhc2VBZGRyID09IDAgIik7CisJcmV0dXJuIDA7CiB9CiBwcmludGsoIjIiKTsKIApAQCAtMjA1LDEyICsxNjUsOSBAQAogcHJpbnRrKCIzIik7CiAKIGlmICggIUh3RGV2aWNlRXh0ZW5zaW9uLT5iSW50ZWdyYXRlZE1NRW5hYmxlZCApCi17Ci0gICAgICAgIHJldHVybiggRkFMU0UgKSA7CS8qIGFsYW4gKi8KLX0KLXByaW50aygiNCIpOworCXJldHVybiAwOwkvKiBhbGFuICovCiAKLS8vICAgIFhHSV9NZW1vcnlDb3B5KCBWQklPU1ZlcnNpb24gLCBId0RldmljZUV4dGVuc2lvbi0+c3pWQklPU1ZlciAsIDQgKSA7CitwcmludGsoIjQiKTsKIAogIC8vICAgVkJJT1NWZXJzaW9uWyA0IF0gPSAweDAgOwogCkBAIC00MDcsOCArMzY0LDggQEAKICAgICBYR0lfVW5Mb2NrQ1JUMiggSHdEZXZpY2VFeHRlbnNpb24sIHBWQkluZm8pIDsKICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlBhcnQwUG9ydCAsIDB4M0YgLCAweEVGICwgMHgwMCApIDsJLyogYWxhbiwgZGlzYWJsZSBWaWRlb0NhcHR1cmUgKi8KICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgwMCAsIDB4MDAgKSA7Ci0gICAgdGVtcDEgPSAoIFVDSEFSIClYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4N0IgKSA7CQkvKiBjaGsgaWYgQkNMSz49MTAwTUh6ICovCi0gICAgdGVtcCA9ICggVUNIQVIgKSggKCB0ZW1wMSA+PiA0ICkgJiAweDBGICkgOworICAgIHRlbXAxID0gKHVuc2lnbmVkIGNoYXIpWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UDNkNCwgMHg3Qik7CS8qIGNoayBpZiBCQ0xLPj0xMDBNSHogKi8KKyAgICB0ZW1wID0gKHVuc2lnbmVkIGNoYXIpKCh0ZW1wMSA+PiA0KSAmIDB4MEYpOwogCiAKICAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MDIgLCAoICpwVkJJbmZvLT5wQ1JUMkRhdGFfMV8yICkgKSA7CkBAIC00NjAsMTUgKzQxNywxNCBAQAogICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4ODMgLCAweDAwICkgOwogcHJpbnRrKCIxODEiKTsKIAotICAgIGlmICggSHdEZXZpY2VFeHRlbnNpb24tPmJTa2lwU2Vuc2UgPT0gRkFMU0UgKQotICAgIHsKLXByaW50aygiMTgyIik7CitpZiAoSHdEZXZpY2VFeHRlbnNpb24tPmJTa2lwU2Vuc2UgPT0gMCkgeworCXByaW50aygiMTgyIik7CiAKICAgICAgICAgWEdJX1NlbnNlQ1JUMShwVkJJbmZvKSA7CiAKLXByaW50aygiMTgzIik7CisJcHJpbnRrKCIxODMiKTsKICAgICAgICAgLyogWEdJTmV3X0RldGVjdE1vbml0b3IoIEh3RGV2aWNlRXh0ZW5zaW9uICkgOyAqLwotcFZCSW5mby0+SUZfREVGX0NINzAwNyA9IDA7CisJcFZCSW5mby0+SUZfREVGX0NINzAwNyA9IDA7CiAgICAgICAgIGlmICggKCBId0RldmljZUV4dGVuc2lvbi0+akNoaXBUeXBlID09IFhHMjEgKSAmJiAocFZCSW5mby0+SUZfREVGX0NINzAwNykgKQogICAgICAgICB7CiBwcmludGsoIjE4NCIpOwpAQCAtNTA0LDggKzQ2MCw3IEBACiAKICAgICAgICAgWEdJTmV3X1NldERSQU1EZWZhdWx0UmVnaXN0ZXIzNDAoIEh3RGV2aWNlRXh0ZW5zaW9uICwgIHBWQkluZm8tPlAzZDQsICBwVkJJbmZvICkgOwogCi0gICAgICAgIGlmICggSHdEZXZpY2VFeHRlbnNpb24tPmJTa2lwRHJhbVNpemluZyA9PSBUUlVFICkKLSAgICAgICAgeworCWlmIChId0RldmljZUV4dGVuc2lvbi0+YlNraXBEcmFtU2l6aW5nID09IDEpIHsKICAgICAgICAgICAgIHBTUiA9IEh3RGV2aWNlRXh0ZW5zaW9uLT5wU1IgOwogICAgICAgICAgICAgaWYgKCBwU1IhPU5VTEwgKQogICAgICAgICAgICAgewpAQCAtNTE5LDE1ICs0NzQsNiBAQAogICAgICAgICB9ICAgCS8qIFNraXBEcmFtU2l6aW5nICovCiAgICAgICAgIGVsc2UKICAgICAgICAgewotI2lmIDAKLSAgICAgICAgICAgaWYgKCBId0RldmljZUV4dGVuc2lvbi0+akNoaXBUeXBlID09IFhHMjAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgCVhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgxMyAsIHBWQkluZm8tPlNSMTVbMF1bWEdJTmV3X1JBTVR5cGVdICkgOwotICAgICAgICAgICAgICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgxNCAsIHBWQkluZm8tPlNSMTVbMV1bWEdJTmV3X1JBTVR5cGVdICkgOwotICAgICAgICAgICAgICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgyMCAsIDB4MjAgKSA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0jZW5kaWYKIHsKIHByaW50aygiMjAiKTsKIApAQCAtNTQ0LDcgKzQ5MCw3IEBACiAgICAgLyogU2V0RGVmRXh0MlJlZ3MgYmVnaW4gKi8KIC8qCiAgICAgQUdQID0gMSA7Ci0gICAgdGVtcCA9KCBVQ0hBUiApWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDNBICkgOworICAgIHRlbXAgPSh1bnNpZ25lZCBjaGFyKVhHSU5ld19HZXRSZWcxKHBWQkluZm8tPlAzYzQsIDB4M0EpIDsKICAgICB0ZW1wICY9IDB4MzAgOwogICAgIGlmICggdGVtcCA9PSAweDMwICkKICAgICAgICAgQUdQID0gMCA7CkBAIC01NjMsNyArNTA5LDcgQEAKIC8vICAgIFRlbXAgPSAoIEluUG9ydExvbmcoIDB4Y2ZjICkgJiAweEZGRkYgKSA7CiAvLyAgICBpZiAoIFRlbXAgPT0gMHgxMDM5ICkKIC8vICAgIHsKLSAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDIyICwgKCBVQ0hBUiApKCAoICpwVkJJbmZvLT5wU1IyMiApICYgMHhGRSApICkgOworCVhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlAzYzQsIDB4MjIsICh1bnNpZ25lZCBjaGFyKSgoKnBWQkluZm8tPnBTUjIyKSAmIDB4RkUpKTsKIC8vICAgIH0KIC8vICAgIGVsc2UKIC8vICAgIHsKQEAgLTU4NSw3ICs1MzEsNyBAQAogWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDE0ICwgMHgzMSk7CiBwcmludGsoIjI1Iik7CiAKLSAgICByZXR1cm4oIFRSVUUgKSA7CityZXR1cm4gMTsKIH0gLyogZW5kIG9mIGluaXQgKi8KIAogCkBAIC02MDAsOSArNTQ2LDEwIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1VQ0hBUiBYR0lOZXdfR2V0WEcyMERSQU1UeXBlKCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit1bnNpZ25lZCBjaGFyIFhHSU5ld19HZXRYRzIwRFJBTVR5cGUoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCQkJICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVUNIQVIgZGF0YSwgdGVtcCA7CisgICAgdW5zaWduZWQgY2hhciBkYXRhLCB0ZW1wOwogCiAgICAgaWYgKCBId0RldmljZUV4dGVuc2lvbi0+akNoaXBUeXBlIDwgWEcyMCApCiAgICAgewpAQCAtNjcwLDkgKzYxNyw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1VQ0hBUiBYR0lOZXdfR2V0MzEwRFJBTVR5cGUoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit1bnNpZ25lZCBjaGFyIFhHSU5ld19HZXQzMTBEUkFNVHlwZShzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVUNIQVIgZGF0YSA7CisgICAgdW5zaWduZWQgY2hhciBkYXRhIDsKIAogICAvKiBpbmRleCA9IFhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgxQSApIDsgKi8KICAgLyogaW5kZXggJj0gMDcgOyAqLwpAQCAtNjk0LDcgKzY0MSw3IEBACiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qCi12b2lkIFhHSU5ld19EZWxheTE1dXMoVUxPTkcgdWxNaWNyc29TZWMpCit2b2lkIFhHSU5ld19EZWxheTE1dXModW5zaWduZWQgbG9uZyB1bE1pY3Jzb1NlYykKIHsKIH0KICovCkBAIC03MDYsOSArNjUzLDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJTmV3X1NEUl9NUlMoICBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSU5ld19TRFJfTVJTKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgZGF0YSA7CisgICAgdW5zaWduZWQgc2hvcnQgZGF0YSA7CiAKICAgICBkYXRhID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDE2ICkgOwogICAgIGRhdGEgJj0gMHgzRiA7ICAgICAgICAgIC8qIFNSMTYgRDc9MCxENj0wICovCkBAIC03MjYsNyArNjczLDcgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJTmV3X0REUjF4X01SU18zNDAoIFVMT05HIFAzYzQgLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJTmV3X0REUjF4X01SU18zNDAodW5zaWduZWQgbG9uZyBQM2M0LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAgICAgWEdJTmV3X1NldFJlZzEoIFAzYzQgLCAweDE4ICwgMHgwMSApIDsKICAgICBYR0lOZXdfU2V0UmVnMSggUDNjNCAsIDB4MTkgLCAweDIwICkgOwpAQCAtNzY0LDcgKzcxMSw3IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19ERFIyeF9NUlNfMzQwKCBVTE9ORyBQM2M0ICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSU5ld19ERFIyeF9NUlNfMzQwKHVuc2lnbmVkIGxvbmcgUDNjNCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogICAgIFhHSU5ld19TZXRSZWcxKCBQM2M0ICwgMHgxOCAsIDB4MDAgKSA7CiAgICAgWEdJTmV3X1NldFJlZzEoIFAzYzQgLCAweDE5ICwgMHgyMCApIDsKQEAgLTc5Myw5ICs3NDAsMTAgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJTmV3X0REUklJX0Jvb3R1cF9YRzI3KCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICwgIFVMT05HIFAzYzQgLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJTmV3X0REUklJX0Jvb3R1cF9YRzI3KHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBQM2M0LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVUxPTkcgUDNkNCA9IFAzYzQgKyAweDEwIDsKKyAgICB1bnNpZ25lZCBsb25nIFAzZDQgPSBQM2M0ICsgMHgxMCA7CiAgICAgWEdJTmV3X1JBTVR5cGUgPSAoIGludCApWEdJTmV3X0dldFhHMjBEUkFNVHlwZSggSHdEZXZpY2VFeHRlbnNpb24gLCBwVkJJbmZvICkgOwogICAgIFhHSU5ld19TZXRNZW1vcnlDbG9jayggSHdEZXZpY2VFeHRlbnNpb24gLCBwVkJJbmZvICkgOwogCkBAIC04NzEsOSArODE5LDEwIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19ERFIyX01SU19YRzIwKCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICwgIFVMT05HIFAzYzQgLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJTmV3X0REUjJfTVJTX1hHMjAoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCQkgIHVuc2lnbmVkIGxvbmcgUDNjNCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVMT05HIFAzZDQgPSBQM2M0ICsgMHgxMCA7CisgICAgdW5zaWduZWQgbG9uZyBQM2Q0ID0gUDNjNCArIDB4MTAgOwogCiAgICAgWEdJTmV3X1JBTVR5cGUgPSAoIGludCApWEdJTmV3X0dldFhHMjBEUkFNVHlwZSggSHdEZXZpY2VFeHRlbnNpb24gLCBwVkJJbmZvICkgOwogICAgIFhHSU5ld19TZXRNZW1vcnlDbG9jayggSHdEZXZpY2VFeHRlbnNpb24gLCBwVkJJbmZvICkgOwpAQCAtOTIzLDkgKzg3MiwxMCBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lOZXdfRERSMl9NUlNfWEcyNyggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsICBVTE9ORyBQM2M0ICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSU5ld19ERFIyX01SU19YRzI3KHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJICB1bnNpZ25lZCBsb25nIFAzYzQsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVTE9ORyBQM2Q0ID0gUDNjNCArIDB4MTAgOworICAgIHVuc2lnbmVkIGxvbmcgUDNkNCA9IFAzYzQgKyAweDEwIDsKIAogICAgICBYR0lOZXdfUkFNVHlwZSA9ICggaW50IClYR0lOZXdfR2V0WEcyMERSQU1UeXBlKCBId0RldmljZUV4dGVuc2lvbiAsIHBWQkluZm8gKSA7CiAgICAgIFhHSU5ld19TZXRNZW1vcnlDbG9jayggSHdEZXZpY2VFeHRlbnNpb24gLCBwVkJJbmZvICkgOwpAQCAtMTAwMSw5ICs5NTEsMTAgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJTmV3X0REUjF4X0RlZmF1bHRSZWdpc3RlciggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsICBVTE9ORyBQb3J0ICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSU5ld19ERFIxeF9EZWZhdWx0UmVnaXN0ZXIoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCQkJICB1bnNpZ25lZCBsb25nIFBvcnQsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVTE9ORyBQM2Q0ID0gUG9ydCAsCisgICAgdW5zaWduZWQgbG9uZyBQM2Q0ID0gUG9ydCAsCiAgICAgICAgICAgIFAzYzQgPSBQb3J0IC0gMHgxMCA7CiAKICAgICBpZiAoIEh3RGV2aWNlRXh0ZW5zaW9uLT5qQ2hpcFR5cGUgPj0gWEcyMCApCkBAIC0xMDYxLDkgKzEwMTIsMTAgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJTmV3X0REUjJ4X0RlZmF1bHRSZWdpc3RlciggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsICBVTE9ORyBQb3J0ICxQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJTmV3X0REUjJ4X0RlZmF1bHRSZWdpc3RlcihzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgUG9ydCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVMT05HIFAzZDQgPSBQb3J0ICwKKyAgICB1bnNpZ25lZCBsb25nIFAzZDQgPSBQb3J0ICwKICAgICAgICAgICAgUDNjNCA9IFBvcnQgLSAweDEwIDsKIAogICAgIFhHSU5ld19TZXRNZW1vcnlDbG9jayggSHdEZXZpY2VFeHRlbnNpb24gLCBwVkJJbmZvICkgOwpAQCAtMTExMiw5ICsxMDY0LDEwIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19ERFIyX0RlZmF1bHRSZWdpc3RlciggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgVUxPTkcgUG9ydCAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lOZXdfRERSMl9EZWZhdWx0UmVnaXN0ZXIoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCQkJIHVuc2lnbmVkIGxvbmcgUG9ydCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVMT05HIFAzZDQgPSBQb3J0ICwKKyAgICB1bnNpZ25lZCBsb25nIFAzZDQgPSBQb3J0ICwKICAgICAgICAgICAgUDNjNCA9IFBvcnQgLSAweDEwIDsKIAogICAgIC8qIGtlZXAgZm9sbG93aW5nIHNldHRpbmcgc2VxdWVuY2UsIGVhY2ggc2V0dGluZyBpbiB0aGUgc2FtZSByZWcgaW5zZXJ0IGlkbGUgKi8KQEAgLTExNTAsMTIgKzExMDMsMTMgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJTmV3X1NldERSQU1EZWZhdWx0UmVnaXN0ZXIzNDAoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLCAgVUxPTkcgUG9ydCAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lOZXdfU2V0RFJBTURlZmF1bHRSZWdpc3RlcjM0MChzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIFBvcnQsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVQ0hBUiB0ZW1wICwgdGVtcDEgLCB0ZW1wMiAsIHRlbXAzICwKKyAgICB1bnNpZ25lZCBjaGFyIHRlbXAsIHRlbXAxLCB0ZW1wMiwgdGVtcDMgLAogICAgICAgICAgIGkgLCBqICwgayA7CiAKLSAgICBVTE9ORyBQM2Q0ID0gUG9ydCAsCisgICAgdW5zaWduZWQgbG9uZyBQM2Q0ID0gUG9ydCAsCiAgICAgICAgICAgIFAzYzQgPSBQb3J0IC0gMHgxMCA7CiAKICAgICBYR0lOZXdfU2V0UmVnMSggUDNkNCAsIDB4NkQgLCBwVkJJbmZvLT5DUjQwWyA4IF1bIFhHSU5ld19SQU1UeXBlIF0gKSA7CkBAIC0xMjkzLDExICsxMjQ3LDExIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19ERFJfTVJTKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lOZXdfRERSX01SUyhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIGRhdGEgOworICAgIHVuc2lnbmVkIHNob3J0IGRhdGEgOwogCi0gICAgUFVDSEFSIHZvbGF0aWxlIHBWaWRlb01lbW9yeSA9ICggUFVDSEFSIClwVkJJbmZvLT5ST01BZGRyIDsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwVmlkZW9NZW1vcnkgPSAodW5zaWduZWQgY2hhciAqKXBWQkluZm8tPlJPTUFkZHI7CiAKICAgICAvKiBTUjE2IDwtIDFGLERGLDJGLEFGICovCiAgICAgLyogeXJpdmVyIG1vZGlmaWVkIFNSMTYgPC0gMEYsREYsMEYsQUYgKi8KQEAgLTEzNjEsMTEgKzEzMTUsMTEgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJTmV3X1ZlcmlmeU1jbGsoIFBYR0lfSFdfREVWSUNFX0lORk8gIEh3RGV2aWNlRXh0ZW5zaW9uICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSU5ld19WZXJpZnlNY2xrKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgUFVDSEFSIHBWaWRlb01lbW9yeSA9IHBWQkluZm8tPkZCQWRkciA7Ci0gICAgVUNIQVIgaSAsIGogOwotICAgIFVTSE9SVCBUZW1wICwgU1IyMSA7CisgICAgdW5zaWduZWQgY2hhciAqcFZpZGVvTWVtb3J5ID0gcFZCSW5mby0+RkJBZGRyIDsKKyAgICB1bnNpZ25lZCBjaGFyIGksIGogOworICAgIHVuc2lnbmVkIHNob3J0IFRlbXAgLCBTUjIxIDsKIAogICAgIHBWaWRlb01lbW9yeVsgMCBdID0gMHhhYSA7IAkJLyogYWxhbiAqLwogICAgIHBWaWRlb01lbW9yeVsgMTYgXSA9IDB4NTUgOyAJLyogbm90ZTogUENJIHJlYWQgY2FjaGUgaXMgb2ZmICovCkBAIC0xNDA3LDkgKzEzNjEsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lOZXdfU2V0RFJBTVNpemVfMzQwKCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSU5ld19TZXREUkFNU2l6ZV8zNDAoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgIGRhdGEgOworICAgIHVuc2lnbmVkIHNob3J0ICBkYXRhIDsKIAogICAgIHBWQkluZm8tPlJPTUFkZHIgPSBId0RldmljZUV4dGVuc2lvbi0+cGpWaXJ0dWFsUm9tQmFzZSA7CiAgICAgcFZCSW5mby0+RkJBZGRyID0gSHdEZXZpY2VFeHRlbnNpb24tPnBqVmlkZW9NZW1vcnlBZGRyZXNzIDsKQEAgLTE0MTgsNyArMTM3Miw3IEBACiAKIAogICAgIGRhdGEgPSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MjEgKSA7Ci0gICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDIxICwgKCBVU0hPUlQgKSggZGF0YSAmIDB4REYgKSApIDsJLyogZGlzYWJsZSByZWFkIGNhY2hlICovCisgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UDNjNCwgMHgyMSwgKHVuc2lnbmVkIHNob3J0KShkYXRhICYgMHhERikpOwkvKiBkaXNhYmxlIHJlYWQgY2FjaGUgKi8KICAgICBYR0lfRGlzcGxheU9mZiggSHdEZXZpY2VFeHRlbnNpb24sIHBWQkluZm8gKTsKIAogICAgIC8qZGF0YSA9IFhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgxICkgOyovCkBAIC0xNDI2LDggKzEzODAsNyBAQAogICAgIC8qWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDAxICwgZGF0YSApIDsqLwkJCS8qIFR1cm4gT0ZGIERpc3BsYXkgKi8KICAgICBYR0lOZXdfRERSU2l6aW5nMzQwKCBId0RldmljZUV4dGVuc2lvbiwgcFZCSW5mbyApIDsKICAgICBkYXRhPVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgyMSApIDsKLSAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MjEgLCAoIFVTSE9SVCApKCBkYXRhIHwgMHgyMCApICkgOwkvKiBlbmFibGUgcmVhZCBjYWNoZSAqLwotCisgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UDNjNCwgMHgyMSwgKHVuc2lnbmVkIHNob3J0KShkYXRhIHwgMHgyMCkpOyAvKiBlbmFibGUgcmVhZCBjYWNoZSAqLwogfQogCiAKQEAgLTE0MzcsOSArMTM5MCw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19TZXREUkFNU2l6ZV8zMTAoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJTmV3X1NldERSQU1TaXplXzMxMChzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBkYXRhIDsKKyAgICB1bnNpZ25lZCBzaG9ydCBkYXRhIDsKICAgICBwVkJJbmZvLT5ST01BZGRyICA9IEh3RGV2aWNlRXh0ZW5zaW9uLT5walZpcnR1YWxSb21CYXNlICwKICAgICBwVkJJbmZvLT5GQkFkZHIgPSBId0RldmljZUV4dGVuc2lvbi0+cGpWaWRlb01lbW9yeUFkZHJlc3MgOwogI2lmZGVmIFhHSTMwMQpAQCAtMTQ1NSw3ICsxNDA4LDcgQEAKICAgICBYR0lTZXRNb2RlTmV3KCBId0RldmljZUV4dGVuc2lvbiAsIDB4MmUgKSA7CiAKICAgICBkYXRhID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDIxICkgOwotICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgyMSAsICggVVNIT1JUICkoIGRhdGEgJiAweERGICkgKSA7CS8qIGRpc2FibGUgcmVhZCBjYWNoZSAqLworICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlAzYzQsIDB4MjEsICh1bnNpZ25lZCBzaG9ydCkoZGF0YSAmIDB4REYpKTsJLyogZGlzYWJsZSByZWFkIGNhY2hlICovCiAKICAgICBkYXRhID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDEgKSA7CiAgICAgZGF0YSB8PSAweDIwIDsKQEAgLTE0NjQsNyArMTQxNyw3IEBACiAgICAgZGF0YSA9IFhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgxNiApIDsKIAogCi0gICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDE2ICwgKCBVU0hPUlQgKSggZGF0YSB8IDB4MEYgKSApIDsJCS8qIGFzc3VtZSBsb3dlc3Qgc3BlZWQgRFJBTSAqLworICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlAzYzQsIDB4MTYsICh1bnNpZ25lZCBzaG9ydCkoZGF0YSB8IDB4MEYpKTsJLyogYXNzdW1lIGxvd2VzdCBzcGVlZCBEUkFNICovCiAKICAgICBYR0lOZXdfU2V0RFJBTU1vZGVSZWdpc3RlciggcFZCSW5mbyApIDsKICAgICBYR0lOZXdfRGlzYWJsZVJlZnJlc2goIEh3RGV2aWNlRXh0ZW5zaW9uLCBwVkJJbmZvICkgOwpAQCAtMTQ4NSwxMSArMTQzOCwxMSBAQAogCiAKIAotICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgxNiAsIHBWQkluZm8tPlNSMTVbIDEgXVsgWEdJTmV3X1JBTVR5cGUgXSApIDsJLyogcmVzdG9yZSBTUjE2ICovCisgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UDNjNCwgMHgxNiwgcFZCSW5mby0+U1IxNVsxXVtYR0lOZXdfUkFNVHlwZV0pOyAvKiByZXN0b3JlIFNSMTYgKi8KIAogICAgIFhHSU5ld19FbmFibGVSZWZyZXNoKCAgSHdEZXZpY2VFeHRlbnNpb24sIHBWQkluZm8gKSA7CiAgICAgZGF0YT1YR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNjNCAsMHgyMSApIDsKLSAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MjEgLCAoIFVTSE9SVCApKCBkYXRhIHwgMHgyMCApICkgOwkvKiBlbmFibGUgcmVhZCBjYWNoZSAqLworICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlAzYzQsIDB4MjEsICh1bnNpZ25lZCBzaG9ydCkoZGF0YSB8IDB4MjApKTsJLyogZW5hYmxlIHJlYWQgY2FjaGUgKi8KIH0KIAogCkBAIC0xNTAxLDE0ICsxNDU0LDE0IEBACiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotdm9pZCBYR0lOZXdfU2V0RFJBTU1vZGVSZWdpc3RlcjM0MCggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiApCit2b2lkIFhHSU5ld19TZXREUkFNTW9kZVJlZ2lzdGVyMzQwKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uKQogewotICAgIFVDSEFSIGRhdGEgOwotICAgIFZCX0RFVklDRV9JTkZPIFZCSU5GOwotICAgIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvID0gJlZCSU5GOworICAgIHVuc2lnbmVkIGNoYXIgZGF0YSA7CisgICAgc3RydWN0IHZiX2RldmljZV9pbmZvIFZCSU5GOworICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyA9ICZWQklORjsKICAgICBwVkJJbmZvLT5ST01BZGRyID0gSHdEZXZpY2VFeHRlbnNpb24tPnBqVmlydHVhbFJvbUJhc2UgOwogICAgIHBWQkluZm8tPkZCQWRkciA9IEh3RGV2aWNlRXh0ZW5zaW9uLT5walZpZGVvTWVtb3J5QWRkcmVzcyA7Ci0gICAgcFZCSW5mby0+QmFzZUFkZHIgPSAoVUxPTkcpSHdEZXZpY2VFeHRlbnNpb24tPnBqSU9BZGRyZXNzIDsKKyAgICBwVkJJbmZvLT5CYXNlQWRkciA9ICh1bnNpZ25lZCBsb25nKUh3RGV2aWNlRXh0ZW5zaW9uLT5waklPQWRkcmVzcyA7CiAgICAgcFZCSW5mby0+SVNYUERPUyA9IDAgOwogCiAgICAgcFZCSW5mby0+UDNjNCA9IHBWQkluZm8tPkJhc2VBZGRyICsgMHgxNCA7CkBAIC0xNTU1LDcgKzE1MDgsNyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lOZXdfU2V0RFJBTU1vZGVSZWdpc3RlciggUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSU5ld19TZXREUkFNTW9kZVJlZ2lzdGVyKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKICAgICBpZiAoIFhHSU5ld19HZXQzMTBEUkFNVHlwZSggcFZCSW5mbyApIDwgMiApCiAgICAgewpAQCAtMTU3NSw5ICsxNTI4LDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJTmV3X0Rpc2FibGVSZWZyZXNoKCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSU5ld19EaXNhYmxlUmVmcmVzaChzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCAgZGF0YSA7CisgICAgdW5zaWduZWQgc2hvcnQgIGRhdGEgOwogCiAKICAgICBkYXRhID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDFCICkgOwpAQCAtMTU5Myw3ICsxNTQ2LDcgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJTmV3X0VuYWJsZVJlZnJlc2goIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJTmV3X0VuYWJsZVJlZnJlc2goc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKIAogICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgxQiAsIHBWQkluZm8tPlNSMTVbIDMgXVsgWEdJTmV3X1JBTVR5cGUgXSApIDsJLyogU1IxQiAqLwpAQCAtMTYwOCw5ICsxNTYxLDExIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19EaXNhYmxlQ2hhbm5lbEludGVybGVhdmluZyggaW50IGluZGV4ICwgVVNIT1JUIFhHSU5ld19ERFJEUkFNX1RZUEVbXVsgNSBdICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSU5ld19EaXNhYmxlQ2hhbm5lbEludGVybGVhdmluZyhpbnQgaW5kZXgsCisJCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IFhHSU5ld19ERFJEUkFNX1RZUEVbXVs1XSwKKwkJCQkgICAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBkYXRhIDsKKyAgICB1bnNpZ25lZCBzaG9ydCBkYXRhIDsKIAogICAgIGRhdGEgPSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MTUgKSA7CiAgICAgZGF0YSAmPSAweDFGIDsKQEAgLTE2NDIsOSArMTU5NywxMSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lOZXdfU2V0RFJBTVNpemluZ1R5cGUoIGludCBpbmRleCAsIFVTSE9SVCBEUkFNVFlQRV9UQUJMRVtdWyA1IF0gLFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lOZXdfU2V0RFJBTVNpemluZ1R5cGUoaW50IGluZGV4LAorCQkJICAgICAgdW5zaWduZWQgc2hvcnQgRFJBTVRZUEVfVEFCTEVbXVs1XSwKKwkJCSAgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgZGF0YSA7CisgICAgdW5zaWduZWQgc2hvcnQgZGF0YTsKIAogICAgIGRhdGEgPSBEUkFNVFlQRV9UQUJMRVsgaW5kZXggXVsgNCBdIDsKICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlAzYzQgLCAweDEzICwgMHg4MCAsIGRhdGEgKSA7CkBAIC0xNjU5LDEyICsxNjE2LDEyIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19DaGVja0J1c1dpZHRoXzMxMCggIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lOZXdfQ2hlY2tCdXNXaWR0aF8zMTAoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBkYXRhIDsKLSAgICBQVUxPTkcgdm9sYXRpbGUgcFZpZGVvTWVtb3J5IDsKKyAgICB1bnNpZ25lZCBzaG9ydCBkYXRhIDsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpwVmlkZW9NZW1vcnkgOwogCi0gICAgcFZpZGVvTWVtb3J5ID0gKFBVTE9ORykgcFZCSW5mby0+RkJBZGRyOworICAgIHBWaWRlb01lbW9yeSA9ICh1bnNpZ25lZCBsb25nICopIHBWQkluZm8tPkZCQWRkcjsKIAogICAgIGlmICggWEdJTmV3X0dldDMxMERSQU1UeXBlKCBwVkJJbmZvICkgPCAyICkKICAgICB7CkBAIC0xNjkwLDcgKzE2NDcsNyBAQAogICAgICAgICAgICAgWEdJTmV3X0RhdGFCdXNXaWR0aCA9IDY0IDsKICAgICAgICAgICAgIFhHSU5ld19DaGFubmVsQUIgPSAwIDsKICAgICAgICAgICAgIGRhdGE9WEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDE0ICkgOwotICAgICAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDE0ICwgKCBVU0hPUlQgKSggZGF0YSAmIDB4RkQgKSApIDsKKwkgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UDNjNCwgMHgxNCwgKHVuc2lnbmVkIHNob3J0KShkYXRhICYgMHhGRCkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCAoIHBWaWRlb01lbW9yeVsgMSBdICE9IDB4NDU2Nzg5QUJMICkgfHwgKCBwVmlkZW9NZW1vcnlbIDAgXSAhPSAweDAxMjM0NTY3TCApICkKQEAgLTE2OTksNyArMTY1Niw4IEBACiAgICAgICAgICAgICBYR0lOZXdfRGF0YUJ1c1dpZHRoID0gNjQgOwogICAgICAgICAgICAgWEdJTmV3X0NoYW5uZWxBQiA9IDEgOwogICAgICAgICAgICAgZGF0YT1YR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MTQgKSA7Ci0gICAgICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MTQgLCAoIFVTSE9SVCApKCAoIGRhdGEgJiAweEZEICkgfCAweDAxICkgKSA7CisJICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlAzYzQsIDB4MTQsCisJCQkgICAodW5zaWduZWQgc2hvcnQpKChkYXRhICYgMHhGRCkgfCAweDAxKSk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gOwpAQCAtMTc5Miw5ICsxNzUwLDEzIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1pbnQgWEdJTmV3X1NldFJhbmsoIGludCBpbmRleCAsIFVDSEFSIFJhbmtObyAsIFVDSEFSIFhHSU5ld19DaGFubmVsQUIgLCBVU0hPUlQgRFJBTVRZUEVfVEFCTEVbXVsgNSBdICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCitpbnQgWEdJTmV3X1NldFJhbmsoaW50IGluZGV4LAorCQkgICB1bnNpZ25lZCBjaGFyIFJhbmtObywKKwkJICAgdW5zaWduZWQgY2hhciBYR0lOZXdfQ2hhbm5lbEFCLAorCQkgICB1bnNpZ25lZCBzaG9ydCBEUkFNVFlQRV9UQUJMRVtdWzVdLAorCQkgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIGRhdGEgOworICAgIHVuc2lnbmVkIHNob3J0IGRhdGE7CiAgICAgaW50IFJhbmtTaXplIDsKIAogICAgIGlmICggKCBSYW5rTm8gPT0gMiApICYmICggRFJBTVRZUEVfVEFCTEVbIGluZGV4IF1bIDAgXSA9PSAyICkgKQpAQCAtMTgyOSw5ICsxNzkxLDEzIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1pbnQgWEdJTmV3X1NldEREUkNoYW5uZWwoIGludCBpbmRleCAsIFVDSEFSIENoYW5uZWxObyAsIFVDSEFSIFhHSU5ld19DaGFubmVsQUIgLCBVU0hPUlQgRFJBTVRZUEVfVEFCTEVbXVsgNSBdICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCitpbnQgWEdJTmV3X1NldEREUkNoYW5uZWwoaW50IGluZGV4LAorCQkJIHVuc2lnbmVkIGNoYXIgQ2hhbm5lbE5vLAorCQkJIHVuc2lnbmVkIGNoYXIgWEdJTmV3X0NoYW5uZWxBQiwKKwkJCSB1bnNpZ25lZCBzaG9ydCBEUkFNVFlQRV9UQUJMRVtdWzVdLAorCQkJIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgIGRhdGEgOworICAgIHVuc2lnbmVkIHNob3J0IGRhdGE7CiAgICAgaW50IFJhbmtTaXplIDsKIAogICAgIFJhbmtTaXplID0gRFJBTVRZUEVfVEFCTEVbaW5kZXhdWzNdLzIgKiBYR0lOZXdfRGF0YUJ1c1dpZHRoLzMyOwpAQCAtMTg2NSwzMCArMTgzMSwyOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotaW50IFhHSU5ld19DaGVja0NvbHVtbiggaW50IGluZGV4ICwgVVNIT1JUIERSQU1UWVBFX1RBQkxFW11bIDUgXSwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCitpbnQgWEdJTmV3X0NoZWNrQ29sdW1uKGludCBpbmRleCwKKwkJICAgICAgIHVuc2lnbmVkIHNob3J0IERSQU1UWVBFX1RBQkxFW11bNV0sCisJCSAgICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAgICAgaW50IGkgOwotICAgIFVMT05HIEluY3JlbWVudCAsIFBvc2l0aW9uIDsKKyAgICB1bnNpZ25lZCBsb25nIEluY3JlbWVudCAsIFBvc2l0aW9uIDsKIAogICAgIC8qIEluY3JlbWVudCA9IDEgPDwgKCBEUkFNVFlQRV9UQUJMRVsgaW5kZXggXVsgMiBdICsgWEdJTmV3X0RhdGFCdXNXaWR0aCAvIDY0ICsgMSApIDsgKi8KICAgICBJbmNyZW1lbnQgPSAxIDw8ICggMTAgKyBYR0lOZXdfRGF0YUJ1c1dpZHRoIC8gNjQgKSA7CiAKICAgICBmb3IoIGkgPSAwICwgUG9zaXRpb24gPSAwIDsgaSA8IDIgOyBpKysgKQogICAgIHsKLSAgICAgICAgKiggKCBQVUxPTkcgKSggcFZCSW5mby0+RkJBZGRyICsgUG9zaXRpb24gKSApID0gUG9zaXRpb24gOwotICAgICAgICBQb3NpdGlvbiArPSBJbmNyZW1lbnQgOworCSAgICAqKCh1bnNpZ25lZCBsb25nICopKHBWQkluZm8tPkZCQWRkciArIFBvc2l0aW9uKSkgPSBQb3NpdGlvbjsKKwkgICAgUG9zaXRpb24gKz0gSW5jcmVtZW50IDsKICAgICB9CiAKLSNpZmRlZiBXSU4yMDAwICAvKiBjaGlhd2VuIGZvciBsaW51eCBzb2x1dGlvbiAqLwotICAgIERlbGF5VVMoIDEwMCApIDsKLSNlbmRpZgogCiAgICAgZm9yKCBpID0gMCAsIFBvc2l0aW9uID0gMCA7IGkgPCAyIDsgaSsrICkKICAgICB7CiAgICAgICAgIC8qIGlmICggcFZCSW5mby0+RkJBZGRyWyBQb3NpdGlvbiBdICE9IFBvc2l0aW9uICkgKi8KLSAgICAgICAgaWYgKCAoICooIFBVTE9ORyApKCBwVkJJbmZvLT5GQkFkZHIgKyBQb3NpdGlvbiApICkgIT0gUG9zaXRpb24gKQotICAgICAgICAgICAgcmV0dXJuKCAwICkgOwotICAgICAgICBQb3NpdGlvbiArPSBJbmNyZW1lbnQgOworCSAgICBpZiAoKCoodW5zaWduZWQgbG9uZyAqKShwVkJJbmZvLT5GQkFkZHIgKyBQb3NpdGlvbikpICE9IFBvc2l0aW9uKQorCQkgICAgcmV0dXJuIDA7CisJICAgIFBvc2l0aW9uICs9IEluY3JlbWVudDsKICAgICB9CiAgICAgcmV0dXJuKCAxICkgOwogfQpAQCAtMTkwMCwyNiArMTg2NSwyOCBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotaW50IFhHSU5ld19DaGVja0JhbmtzKCBpbnQgaW5kZXggLCBVU0hPUlQgRFJBTVRZUEVfVEFCTEVbXVsgNSBdLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK2ludCBYR0lOZXdfQ2hlY2tCYW5rcyhpbnQgaW5kZXgsCisJCSAgICAgIHVuc2lnbmVkIHNob3J0IERSQU1UWVBFX1RBQkxFW11bNV0sCisJCSAgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKICAgICBpbnQgaSA7Ci0gICAgVUxPTkcgSW5jcmVtZW50ICwgUG9zaXRpb24gOworICAgIHVuc2lnbmVkIGxvbmcgSW5jcmVtZW50ICwgUG9zaXRpb24gOwogCiAgICAgSW5jcmVtZW50ID0gMSA8PCAoIERSQU1UWVBFX1RBQkxFWyBpbmRleCBdWyAyIF0gKyBYR0lOZXdfRGF0YUJ1c1dpZHRoIC8gNjQgKyAyICkgOwogCiAgICAgZm9yKCBpID0gMCAsIFBvc2l0aW9uID0gMCA7IGkgPCA0IDsgaSsrICkKICAgICB7CiAgICAgICAgIC8qIHBWQkluZm8tPkZCQWRkclsgUG9zaXRpb24gXSA9IFBvc2l0aW9uIDsgKi8KLSAgICAgICAgKiggKCBQVUxPTkcgKSggcFZCSW5mby0+RkJBZGRyICsgUG9zaXRpb24gKSApID0gUG9zaXRpb24gOwotICAgICAgICBQb3NpdGlvbiArPSBJbmNyZW1lbnQgOworCSAgICAqKCh1bnNpZ25lZCBsb25nICopKHBWQkluZm8tPkZCQWRkciArIFBvc2l0aW9uKSkgPSBQb3NpdGlvbjsKKwkgICAgUG9zaXRpb24gKz0gSW5jcmVtZW50IDsKICAgICB9CiAKICAgICBmb3IoIGkgPSAwICwgUG9zaXRpb24gPSAwIDsgaSA8IDQgOyBpKysgKQogICAgIHsKICAgICAgICAgLyogaWYgKHBWQkluZm8tPkZCQWRkclsgUG9zaXRpb24gXSAhPSBQb3NpdGlvbiApICovCi0gICAgICAgIGlmICggKCAqKCBQVUxPTkcgKSggcFZCSW5mby0+RkJBZGRyICsgUG9zaXRpb24gKSApICE9IFBvc2l0aW9uICkKLSAgICAgICAgICAgIHJldHVybiggMCApIDsKLSAgICAgICAgUG9zaXRpb24gKz0gSW5jcmVtZW50IDsKKwkgICAgaWYgKCgqKHVuc2lnbmVkIGxvbmcgKikocFZCSW5mby0+RkJBZGRyICsgUG9zaXRpb24pKSAhPSBQb3NpdGlvbikKKwkJICAgIHJldHVybiAwOworCSAgICBQb3NpdGlvbiArPSBJbmNyZW1lbnQ7CiAgICAgfQogICAgIHJldHVybiggMSApIDsKIH0KQEAgLTE5MzEsMTAgKzE4OTgsMTIgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLWludCBYR0lOZXdfQ2hlY2tSYW5rKCBpbnQgUmFua05vICwgaW50IGluZGV4ICwgVVNIT1JUIERSQU1UWVBFX1RBQkxFW11bIDUgXSwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCitpbnQgWEdJTmV3X0NoZWNrUmFuayhpbnQgUmFua05vLCBpbnQgaW5kZXgsCisJCSAgICAgdW5zaWduZWQgc2hvcnQgRFJBTVRZUEVfVEFCTEVbXVs1XSwKKwkJICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAgICAgaW50IGkgOwotICAgIFVMT05HIEluY3JlbWVudCAsIFBvc2l0aW9uIDsKKyAgICB1bnNpZ25lZCBsb25nIEluY3JlbWVudCAsIFBvc2l0aW9uIDsKIAogICAgIEluY3JlbWVudCA9IDEgPDwgKCBEUkFNVFlQRV9UQUJMRVsgaW5kZXggXVsgMiBdICsgRFJBTVRZUEVfVEFCTEVbIGluZGV4IF1bIDEgXSArCiAgICAgICAgICAgICAgICAgICBEUkFNVFlQRV9UQUJMRVsgaW5kZXggXVsgMCBdICsgWEdJTmV3X0RhdGFCdXNXaWR0aCAvIDY0ICsgUmFua05vICkgOwpAQCAtMTk0MiwxOCArMTkxMSwxOCBAQAogICAgIGZvciggaSA9IDAgLCBQb3NpdGlvbiA9IDAgOyBpIDwgMiA7IGkrKyApCiAgICAgewogICAgICAgICAvKiBwVkJJbmZvLT5GQkFkZHJbIFBvc2l0aW9uIF0gPSBQb3NpdGlvbiA7ICovCi0gICAgICAgIC8qICooICggUFVMT05HICkoIHBWQkluZm8tPkZCQWRkciApICkgPSBQb3NpdGlvbiA7ICovCi0gICAgICAgICooICggUFVMT05HICkoIHBWQkluZm8tPkZCQWRkciArIFBvc2l0aW9uICkgKSA9IFBvc2l0aW9uIDsKLSAgICAgICAgUG9zaXRpb24gKz0gSW5jcmVtZW50IDsKKyAgICAgICAgLyogKiggKHVuc2lnbmVkIGxvbmcgKikoIHBWQkluZm8tPkZCQWRkciApICkgPSBQb3NpdGlvbiA7ICovCisJICAgICooKHVuc2lnbmVkIGxvbmcgKikocFZCSW5mby0+RkJBZGRyICsgUG9zaXRpb24pKSA9IFBvc2l0aW9uOworCSAgICBQb3NpdGlvbiArPSBJbmNyZW1lbnQ7CiAgICAgfQogCiAgICAgZm9yKCBpID0gMCAsIFBvc2l0aW9uID0gMCA7IGkgPCAyIDsgaSsrICkKICAgICB7CiAgICAgICAgIC8qIGlmICggcFZCSW5mby0+RkJBZGRyWyBQb3NpdGlvbiBdICE9IFBvc2l0aW9uICkgKi8KLSAgICAgICAgLyogaWYgKCAoICooIFBVTE9ORyApKCBwVkJJbmZvLT5GQkFkZHIgKSApICE9IFBvc2l0aW9uICkgKi8KLSAgICAgICAgaWYgKCAoICooIFBVTE9ORyApKCBwVkJJbmZvLT5GQkFkZHIgKyBQb3NpdGlvbiApICkgIT0gUG9zaXRpb24gKQotICAgICAgICAgICAgcmV0dXJuKCAwICkgOwotICAgICAgICBQb3NpdGlvbiArPSBJbmNyZW1lbnQgOworICAgICAgICAvKiBpZiAoICggKih1bnNpZ25lZCBsb25nICopKCBwVkJJbmZvLT5GQkFkZHIgKSApICE9IFBvc2l0aW9uICkgKi8KKwkgICAgaWYgKCgqKHVuc2lnbmVkIGxvbmcgKikocFZCSW5mby0+RkJBZGRyICsgUG9zaXRpb24pKSAhPSBQb3NpdGlvbikKKwkJICAgIHJldHVybiAwOworCSAgICBQb3NpdGlvbiArPSBJbmNyZW1lbnQ7CiAgICAgfQogICAgIHJldHVybiggMSApOwogfQpAQCAtMTk2NSwxMCArMTkzNCwxMiBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotaW50IFhHSU5ld19DaGVja0REUlJhbmsoIGludCBSYW5rTm8gLCBpbnQgaW5kZXggLCBVU0hPUlQgRFJBTVRZUEVfVEFCTEVbXVsgNSBdLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK2ludCBYR0lOZXdfQ2hlY2tERFJSYW5rKGludCBSYW5rTm8sIGludCBpbmRleCwKKwkJCXVuc2lnbmVkIHNob3J0IERSQU1UWVBFX1RBQkxFW11bNV0sCisJCQlzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVUxPTkcgSW5jcmVtZW50ICwgUG9zaXRpb24gOwotICAgIFVTSE9SVCBkYXRhIDsKKyAgICB1bnNpZ25lZCBsb25nIEluY3JlbWVudCAsIFBvc2l0aW9uIDsKKyAgICB1bnNpZ25lZCBzaG9ydCBkYXRhIDsKIAogICAgIEluY3JlbWVudCA9IDEgPDwgKCBEUkFNVFlQRV9UQUJMRVsgaW5kZXggXVsgMiBdICsgRFJBTVRZUEVfVEFCTEVbIGluZGV4IF1bIDEgXSArCiAgICAgICAgICAgICAgICAgICAgICAgIERSQU1UWVBFX1RBQkxFWyBpbmRleCBdWyAwIF0gKyBYR0lOZXdfRGF0YUJ1c1dpZHRoIC8gNjQgKyBSYW5rTm8gKSA7CkBAIC0xOTc2LDE4ICsxOTQ3LDE4IEBACiAgICAgSW5jcmVtZW50ICs9IEluY3JlbWVudCAvIDIgOwogCiAgICAgUG9zaXRpb24gPSAwOwotICAgICooICggUFVMT05HICkoIHBWQkluZm8tPkZCQWRkciArIFBvc2l0aW9uICsgMCApICkgPSAweDAxMjM0NTY3IDsKLSAgICAqKCAoIFBVTE9ORyApKCBwVkJJbmZvLT5GQkFkZHIgKyBQb3NpdGlvbiArIDEgKSApID0gMHg0NTY3ODlBQiA7Ci0gICAgKiggKCBQVUxPTkcgKSggcFZCSW5mby0+RkJBZGRyICsgUG9zaXRpb24gKyAyICkgKSA9IDB4NTU1NTU1NTUgOwotICAgICooICggUFVMT05HICkoIHBWQkluZm8tPkZCQWRkciArIFBvc2l0aW9uICsgMyApICkgPSAweDU1NTU1NTU1IDsKLSAgICAqKCAoIFBVTE9ORyApKCBwVkJJbmZvLT5GQkFkZHIgKyBQb3NpdGlvbiArIDQgKSApID0gMHhBQUFBQUFBQSA7Ci0gICAgKiggKCBQVUxPTkcgKSggcFZCSW5mby0+RkJBZGRyICsgUG9zaXRpb24gKyA1ICkgKSA9IDB4QUFBQUFBQUEgOworICAgICooKHVuc2lnbmVkIGxvbmcgKikocFZCSW5mby0+RkJBZGRyICsgUG9zaXRpb24gKyAwKSkgPSAweDAxMjM0NTY3OworICAgICooKHVuc2lnbmVkIGxvbmcgKikocFZCSW5mby0+RkJBZGRyICsgUG9zaXRpb24gKyAxKSkgPSAweDQ1Njc4OUFCOworICAgICooKHVuc2lnbmVkIGxvbmcgKikocFZCSW5mby0+RkJBZGRyICsgUG9zaXRpb24gKyAyKSkgPSAweDU1NTU1NTU1OworICAgICooKHVuc2lnbmVkIGxvbmcgKikocFZCSW5mby0+RkJBZGRyICsgUG9zaXRpb24gKyAzKSkgPSAweDU1NTU1NTU1OworICAgICooKHVuc2lnbmVkIGxvbmcgKikocFZCSW5mby0+RkJBZGRyICsgUG9zaXRpb24gKyA0KSkgPSAweEFBQUFBQUFBOworICAgICooKHVuc2lnbmVkIGxvbmcgKikocFZCSW5mby0+RkJBZGRyICsgUG9zaXRpb24gKyA1KSkgPSAweEFBQUFBQUFBOwogCi0gICAgaWYgKCAoICooIFBVTE9ORyApKCBwVkJJbmZvLT5GQkFkZHIgKyAxICkgKSA9PSAweDQ1Njc4OUFCICkKLSAgICAgICAgcmV0dXJuKCAxICkgOworICAgIGlmICgoKih1bnNpZ25lZCBsb25nICopKHBWQkluZm8tPkZCQWRkciArIDEpKSA9PSAweDQ1Njc4OUFCKQorCSAgICByZXR1cm4gMTsKIAotICAgIGlmICggKCAqKCBQVUxPTkcgKSggcFZCSW5mby0+RkJBZGRyICsgMCApICkgPT0gMHgwMTIzNDU2NyApCi0gICAgICAgIHJldHVybiggMCApIDsKKyAgICBpZiAoKCoodW5zaWduZWQgbG9uZyAqKShwVkJJbmZvLT5GQkFkZHIgKyAwKSkgPT0gMHgwMTIzNDU2NykKKwkgICAgcmV0dXJuIDA7CiAKICAgICBkYXRhID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDE0ICkgOwogICAgIGRhdGEgJj0gMHhGMyA7CkBAIC0yMDA3LDcgKzE5NzgsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotaW50IFhHSU5ld19DaGVja1JhbmtzKCBpbnQgUmFua05vICwgaW50IGluZGV4ICwgVVNIT1JUIERSQU1UWVBFX1RBQkxFW11bIDUgXSwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCitpbnQgWEdJTmV3X0NoZWNrUmFua3MoaW50IFJhbmtObywgaW50IGluZGV4LAorCQkgICAgICB1bnNpZ25lZCBzaG9ydCBEUkFNVFlQRV9UQUJMRVtdWzVdLAorCQkgICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAgICAgaW50IHIgOwogCkBAIC0yMDMzLDcgKzIwMDYsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotaW50IFhHSU5ld19DaGVja0REUlJhbmtzKCBpbnQgUmFua05vICwgaW50IGluZGV4ICwgVVNIT1JUIERSQU1UWVBFX1RBQkxFW11bIDUgXSwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCitpbnQgWEdJTmV3X0NoZWNrRERSUmFua3MoaW50IFJhbmtObywgaW50IGluZGV4LAorCQkJIHVuc2lnbmVkIHNob3J0IERSQU1UWVBFX1RBQkxFW11bNV0sCisJCQkgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogICAgIGludCByIDsKIApAQCAtMjA1OSwxMCArMjAzNCwxMCBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotaW50IFhHSU5ld19TRFJTaXppbmcoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCitpbnQgWEdJTmV3X1NEUlNpemluZyhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAgICAgaW50ICAgIGkgOwotICAgIFVDSEFSICBqIDsKKyAgICB1bnNpZ25lZCBjaGFyICBqIDsKIAogICAgIGZvciggaSA9IDAgOyBpIDwgMTMgOyBpKysgKQogICAgIHsKQEAgLTIwNzAsNyArMjA0NSw4IEBACiAKICAgICAgICAgZm9yKCBqID0gMiA7IGogPiAwIDsgai0tICkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCAhWEdJTmV3X1NldFJhbmsoIGkgLCAoIFVDSEFSIClqICwgWEdJTmV3X0NoYW5uZWxBQiAsIFhHSU5ld19TRFJEUkFNX1RZUEUgLCBwVkJJbmZvKSApCisJICAgIGlmICghWEdJTmV3X1NldFJhbmsoaSwgKHVuc2lnbmVkIGNoYXIpaiwgWEdJTmV3X0NoYW5uZWxBQiwKKwkJCQkgWEdJTmV3X1NEUkRSQU1fVFlQRSwgcFZCSW5mbykpCiAgICAgICAgICAgICAgICAgY29udGludWUgOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewpAQCAtMjA4OSwxMSArMjA2NSwxMyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotVVNIT1JUIFhHSU5ld19TZXREUkFNU2l6ZVJlZyggaW50IGluZGV4ICwgVVNIT1JUIERSQU1UWVBFX1RBQkxFW11bIDUgXSwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit1bnNpZ25lZCBzaG9ydCBYR0lOZXdfU2V0RFJBTVNpemVSZWcoaW50IGluZGV4LAorCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgRFJBTVRZUEVfVEFCTEVbXVs1XSwKKwkJCQkgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgZGF0YSA9IDAgLCBtZW1zaXplID0gMCA7CisgICAgdW5zaWduZWQgc2hvcnQgZGF0YSA9IDAgLCBtZW1zaXplID0gMDsKICAgICBpbnQgUmFua1NpemUgOwotICAgIFVDSEFSIENoYW5uZWxObyA7CisgICAgdW5zaWduZWQgY2hhciBDaGFubmVsTm8gOwogCiAgICAgUmFua1NpemUgPSBEUkFNVFlQRV9UQUJMRVsgaW5kZXggXVsgMyBdICogWEdJTmV3X0RhdGFCdXNXaWR0aCAvIDMyIDsKICAgICBkYXRhID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDEzICkgOwpAQCAtMjEzOCwxMSArMjExNiwxMyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotVVNIT1JUIFhHSU5ld19TZXREUkFNU2l6ZTIwUmVnKCBpbnQgaW5kZXggLCBVU0hPUlQgRFJBTVRZUEVfVEFCTEVbXVsgNSBdLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3Vuc2lnbmVkIHNob3J0IFhHSU5ld19TZXREUkFNU2l6ZTIwUmVnKGludCBpbmRleCwKKwkJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgRFJBTVRZUEVfVEFCTEVbXVs1XSwKKwkJCQkgICAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBkYXRhID0gMCAsIG1lbXNpemUgPSAwIDsKKyAgICB1bnNpZ25lZCBzaG9ydCBkYXRhID0gMCAsIG1lbXNpemUgPSAwOwogICAgIGludCBSYW5rU2l6ZSA7Ci0gICAgVUNIQVIgQ2hhbm5lbE5vIDsKKyAgICB1bnNpZ25lZCBjaGFyIENoYW5uZWxObyA7CiAKICAgICBSYW5rU2l6ZSA9IERSQU1UWVBFX1RBQkxFWyBpbmRleCBdWyAzIF0gKiBYR0lOZXdfRGF0YUJ1c1dpZHRoIC8gOCA7CiAgICAgZGF0YSA9IFhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgxMyApIDsKQEAgLTIxODgsMzEgKzIxNjgsMzIgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLWludCBYR0lOZXdfUmVhZFdyaXRlUmVzdCggVVNIT1JUIFN0b3BBZGRyICwgVVNIT1JUIFN0YXJ0QWRkciwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCitpbnQgWEdJTmV3X1JlYWRXcml0ZVJlc3QodW5zaWduZWQgc2hvcnQgU3RvcEFkZHIsIHVuc2lnbmVkIHNob3J0IFN0YXJ0QWRkciwKKwkJCSBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAgICAgaW50IGkgOwotICAgIFVMT05HIFBvc2l0aW9uID0gMCA7CisgICAgdW5zaWduZWQgbG9uZyBQb3NpdGlvbiA9IDAgOwogCi0gICAqKCAoIFBVTE9ORyApKCBwVkJJbmZvLT5GQkFkZHIgKyBQb3NpdGlvbiApICkgPSBQb3NpdGlvbiA7CisgICAgKigodW5zaWduZWQgbG9uZyAqKShwVkJJbmZvLT5GQkFkZHIgKyBQb3NpdGlvbikpID0gUG9zaXRpb247CiAKICAgICBmb3IoIGkgPSBTdGFydEFkZHIgOyBpIDw9IFN0b3BBZGRyIDsgaSsrICkKICAgICB7CiAgICAgICAgIFBvc2l0aW9uID0gMSA8PCBpIDsKLSAgICAgICAgKiggKCBQVUxPTkcgKSggcFZCSW5mby0+RkJBZGRyICsgUG9zaXRpb24gKSApID0gUG9zaXRpb24gOworCSooKHVuc2lnbmVkIGxvbmcgKikocFZCSW5mby0+RkJBZGRyICsgUG9zaXRpb24pKSA9IFBvc2l0aW9uOwogICAgIH0KIAogICAgIERlbGF5VVMoIDUwMCApIDsJLyogW1ZpY2VudF0gMjAwNC8wNC8xNi4gRml4ICMxNzU5IE1lbW9yeSBTaXplIGVycm9yIGluIE11bHRpLUFkYXB0ZXIuICovCiAKICAgICBQb3NpdGlvbiA9IDAgOwogCi0gICBpZiAoICggKiggUFVMT05HICkoIHBWQkluZm8tPkZCQWRkciArIFBvc2l0aW9uICkgKSAhPSBQb3NpdGlvbiApCi0gICAgICAgIHJldHVybiggMCApIDsKKyAgIGlmICgoKih1bnNpZ25lZCBsb25nICopKHBWQkluZm8tPkZCQWRkciArIFBvc2l0aW9uKSkgIT0gUG9zaXRpb24pCisJICAgcmV0dXJuIDA7CiAKICAgICBmb3IoIGkgPSBTdGFydEFkZHIgOyBpIDw9IFN0b3BBZGRyIDsgaSsrICkKICAgICB7CiAgICAgICAgIFBvc2l0aW9uID0gMSA8PCBpIDsKLSAgICAgICAgaWYgKCAoICooIFBVTE9ORyApKCBwVkJJbmZvLT5GQkFkZHIgKyBQb3NpdGlvbiApICkgIT0gUG9zaXRpb24gKQotICAgICAgICAgICAgcmV0dXJuKCAwICkgOworCWlmICgoKih1bnNpZ25lZCBsb25nICopKHBWQkluZm8tPkZCQWRkciArIFBvc2l0aW9uKSkgIT0gUG9zaXRpb24pCisJCXJldHVybiAwOwogICAgIH0KICAgICByZXR1cm4oIDEgKSA7CiB9CkBAIC0yMjI0LDkgKzIyMDUsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotVUNIQVIgWEdJTmV3X0NoZWNrRnJlcXVlbmNlKCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit1bnNpZ25lZCBjaGFyIFhHSU5ld19DaGVja0ZyZXF1ZW5jZShzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVUNIQVIgZGF0YSA7CisgICAgdW5zaWduZWQgY2hhciBkYXRhIDsKIAogICAgIGRhdGEgPSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4OTcgKSA7CiAKQEAgLTIyNDcsOSArMjIyOCw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19DaGVja0NoYW5uZWwoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lOZXdfQ2hlY2tDaGFubmVsKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVUNIQVIgZGF0YTsKKyAgICB1bnNpZ25lZCBjaGFyIGRhdGE7CiAKICAgICBzd2l0Y2goIEh3RGV2aWNlRXh0ZW5zaW9uLT5qQ2hpcFR5cGUgKQogICAgIHsKQEAgLTI1MjgsMTAgKzI1MDksMTAgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLWludCBYR0lOZXdfRERSU2l6aW5nMzQwKCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK2ludCBYR0lOZXdfRERSU2l6aW5nMzQwKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAgICAgaW50IGkgOwotICAgIFVTSE9SVCBtZW1zaXplICwgYWRkciA7CisgICAgdW5zaWduZWQgc2hvcnQgbWVtc2l6ZSAsIGFkZHIgOwogCiAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDE1ICwgMHgwMCApIDsJLyogbm9uaW50ZXJsZWF2aW5nICovCiAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDFDICwgMHgwMCApIDsJLyogbm9udGlsaW5nICovCkBAIC0yNTQ4LDcgKzI1MjksNyBAQAogICAgICAgICAgICAgY29udGludWUgOwogCiAgICAgICAgIGFkZHIgPSBtZW1zaXplICsgKCBYR0lOZXdfQ2hhbm5lbEFCIC0gMiApICsgMjAgOwotICAgICAgICBpZiAoICggSHdEZXZpY2VFeHRlbnNpb24tPnVsVmlkZW9NZW1vcnlTaXplIC0gMSApIDwgKCBVTE9ORyApKCAxIDw8IGFkZHIgKSApCisJaWYgKChId0RldmljZUV4dGVuc2lvbi0+dWxWaWRlb01lbW9yeVNpemUgLSAxKSA8ICh1bnNpZ25lZCBsb25nKSgxIDw8IGFkZHIpKQogICAgICAgICAgICAgY29udGludWUgOwogCiAgICAgICAgIGlmICggWEdJTmV3X1JlYWRXcml0ZVJlc3QoIGFkZHIgLCA1LCBwVkJJbmZvICkgPT0gMSApCkBAIC0yNTY2LDcgKzI1NDcsNyBAQAogICAgICAgICAgICAgY29udGludWUgOwogCiAgICAgICAgIGFkZHIgPSBtZW1zaXplICsgKCBYR0lOZXdfQ2hhbm5lbEFCIC0gMiApICsgMjAgOwotICAgICAgICBpZiAoICggSHdEZXZpY2VFeHRlbnNpb24tPnVsVmlkZW9NZW1vcnlTaXplIC0gMSApIDwgKCBVTE9ORyApKCAxIDw8IGFkZHIgKSApCisJaWYgKChId0RldmljZUV4dGVuc2lvbi0+dWxWaWRlb01lbW9yeVNpemUgLSAxKSA8ICh1bnNpZ25lZCBsb25nKSgxIDw8IGFkZHIpKQogICAgICAgICAgICAgY29udGludWUgOwogCiAgICAgICAgIGlmICggWEdJTmV3X1JlYWRXcml0ZVJlc3QoIGFkZHIgLCA5LCBwVkJJbmZvICkgPT0gMSApCkBAIC0yNTgzLDEwICsyNTY0LDEwIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1pbnQgWEdJTmV3X0REUlNpemluZyhQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK2ludCBYR0lOZXdfRERSU2l6aW5nKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKICAgICBpbnQgICAgaSA7Ci0gICAgVUNIQVIgIGogOworICAgIHVuc2lnbmVkIGNoYXIgIGogOwogCiAgICAgZm9yKCBpID0gMCA7IGkgPCA0IDsgaSsrICkKICAgICB7CkBAIC0yNTk1LDcgKzI1NzYsOCBAQAogICAgICAgICBmb3IoIGogPSAyIDsgaiA+IDAgOyBqLS0gKQogICAgICAgICB7CiAgICAgICAgICAgICBYR0lOZXdfU2V0RERSQ2hhbm5lbCggaSAsIGogLCBYR0lOZXdfQ2hhbm5lbEFCICwgWEdJTmV3X0REUkRSQU1fVFlQRSAsIHBWQkluZm8gKSA7Ci0gICAgICAgICAgICBpZiAoICFYR0lOZXdfU2V0UmFuayggaSAsICggVUNIQVIgKWogLCBYR0lOZXdfQ2hhbm5lbEFCICwgWEdJTmV3X0REUkRSQU1fVFlQRSwgcFZCSW5mbyApICkKKwkgICAgaWYgKCFYR0lOZXdfU2V0UmFuayhpLCAodW5zaWduZWQgY2hhcilqLCBYR0lOZXdfQ2hhbm5lbEFCLAorCQkJCVhHSU5ld19ERFJEUkFNX1RZUEUsIHBWQkluZm8pKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlIDsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKQEAgLTI2MTMsNyArMjU5NSw3IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19TZXRNZW1vcnlDbG9jayggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSU5ld19TZXRNZW1vcnlDbG9jayhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogCiAKQEAgLTI2MzQsOSArMjYxNiw3IEBACiAgICAgICBpZiAoICggcFZCSW5mby0+TUNMS0RhdGFbIFhHSU5ld19SQU1UeXBlIF0uU1IyOCA9PSAweDFDICkgJiYgKCBwVkJJbmZvLT5NQ0xLRGF0YVsgWEdJTmV3X1JBTVR5cGUgXS5TUjI5ID09IDB4MDEgKQogICAgICAgICAmJiAoICggKCBwVkJJbmZvLT5FQ0xLRGF0YVsgWEdJTmV3X1JBTVR5cGUgXS5TUjJFID09IDB4MUMgKSAmJiAoIHBWQkluZm8tPkVDTEtEYXRhWyBYR0lOZXdfUkFNVHlwZSBdLlNSMkYgPT0gMHgwMSApICkKICAgICAgICAgfHwgKCAoIHBWQkluZm8tPkVDTEtEYXRhWyBYR0lOZXdfUkFNVHlwZSBdLlNSMkUgPT0gMHgyMiApICYmICggcFZCSW5mby0+RUNMS0RhdGFbIFhHSU5ld19SQU1UeXBlIF0uU1IyRiA9PSAweDAxICkgKSApICkKLSAgICAgIHsKLSAgICAgIAlYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MzIgLCAoICggVUNIQVIgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgzMiApICYgMHhGQyApIHwgMHgwMiApIDsKLSAgICAgIH0KKwkgICAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QM2M0LCAweDMyLCAoKHVuc2lnbmVkIGNoYXIpWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UDNjNCwgMHgzMikgJiAweEZDKSB8IDB4MDIpOwogICAgIH0KIH0KIApAQCAtMjY0NywxMiArMjYyNywxMiBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotQk9PTEVBTiBDaGtMRkIoIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3Vuc2lnbmVkIGNoYXIgQ2hrTEZCKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBpZiAoIExGQkRSQU1UcmFwICYgWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDc4ICkgKQotICAgICAgICByZXR1cm4oIFRSVUUgKSA7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4oIEZBTFNFICk7CisJaWYgKExGQkRSQU1UcmFwICYgWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UDNkNCAsIDB4NzgpKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOwogfQogCiAKQEAgLTI2NjQsMTcgKzI2NDQsMTggQEAKIC8qIGluIHNlY29uZCBjaGlwLCBhc3N1bWUgQ1IgQTEgRFs2XT0iMSIgaW4gdGhpcyBjYXNlICovCiAvKiBvdXRwdXQgOiBub25lICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgU2V0UG93ZXJDb25zdW1lICggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsIFVMT05HIFhHSV9QM2Q0UG9ydCApCit2b2lkIFNldFBvd2VyQ29uc3VtZShzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJICAgICB1bnNpZ25lZCBsb25nIFhHSV9QM2Q0UG9ydCkKIHsKLSAgICBVTE9ORyAgIGxUZW1wIDsKLSAgICBVQ0hBUiAgIGJUZW1wOworICAgIHVuc2lnbmVkIGxvbmcgICBsVGVtcCA7CisgICAgdW5zaWduZWQgY2hhciAgIGJUZW1wOwogCiAgICAgSHdEZXZpY2VFeHRlbnNpb24tPnBRdWVyeVZHQUNvbmZpZ1NwYWNlKCBId0RldmljZUV4dGVuc2lvbiAsIDB4MDggLCAwICwgJmxUZW1wICkgOyAvKiBHZXQgKi8KICAgICBpZiAoKGxUZW1wJjB4RkYpPT0wKQogICAgIHsKICAgICAgICAgLyogc2V0IENSNTggRFs1XT0wIERbM109MCAqLwogICAgICAgICBYR0lOZXdfU2V0UmVnQU5EKCBYR0lfUDNkNFBvcnQgLCAweDU4ICwgMHhENyApIDsKLSAgICAgICAgYlRlbXAgPSAoVUNIQVIpIFhHSU5ld19HZXRSZWcxKCBYR0lfUDNkNFBvcnQgLCAweENCICkgOworCWJUZW1wID0gKHVuc2lnbmVkIGNoYXIpIFhHSU5ld19HZXRSZWcxKFhHSV9QM2Q0UG9ydCwgMHhDQik7CiAgICAgCWlmIChiVGVtcCYweDIwKQogICAgIAl7CiAgICAgICAgICAgICBpZiAoIShiVGVtcCYweDEwKSkKQEAgLTI2OTIsMTUgKzI2NzMsMTMgQEAKIH0KIAogCi0KLSNpZiBkZWZpbmVkKExJTlVYX1hGODYpfHxkZWZpbmVkKExJTlVYX0tFUk5FTCkKLXZvaWQgWEdJTmV3X0luaXRWQklPU0RhdGEoUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSU5ld19Jbml0VkJJT1NEYXRhKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAKLQkvKiBVTE9ORyBST01BZGRyID0gKFVMT05HKUh3RGV2aWNlRXh0ZW5zaW9uLT5walZpcnR1YWxSb21CYXNlOyAqLworCS8qIHVuc2lnbmVkIGxvbmcgUk9NQWRkciA9ICh1bnNpZ25lZCBsb25nKUh3RGV2aWNlRXh0ZW5zaW9uLT5walZpcnR1YWxSb21CYXNlOyAqLwogICAgIHBWQkluZm8tPlJPTUFkZHIgPSBId0RldmljZUV4dGVuc2lvbi0+cGpWaXJ0dWFsUm9tQmFzZSA7CiAgICAgcFZCSW5mby0+RkJBZGRyID0gSHdEZXZpY2VFeHRlbnNpb24tPnBqVmlkZW9NZW1vcnlBZGRyZXNzIDsKLSAgICBwVkJJbmZvLT5CYXNlQWRkciA9IChVTE9ORylId0RldmljZUV4dGVuc2lvbi0+cGpJT0FkZHJlc3MgOworICAgIHBWQkluZm8tPkJhc2VBZGRyID0gKHVuc2lnbmVkIGxvbmcpSHdEZXZpY2VFeHRlbnNpb24tPnBqSU9BZGRyZXNzIDsKICAgICBwVkJJbmZvLT5JU1hQRE9TID0gMCA7CiAKICAgICBwVkJJbmZvLT5QM2M0ID0gcFZCSW5mby0+QmFzZUFkZHIgKyAweDE0IDsKQEAgLTI3MzYsNyArMjcxNSw2IEBACiAJfQogCiB9Ci0jZW5kaWYgLyogRm9yIExpbnV4ICovCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogRnVuY3Rpb24gOiBSZWFkVkJJT1NUYWJsRGF0YSAqLwpAQCAtMjc0NCwyMDAgKzI3MjIsMTEgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgUmVhZFZCSU9TVGFibERhdGEoIFVDSEFSIENoaXBUeXBlICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFJlYWRWQklPU1RhYmxEYXRhKHVuc2lnbmVkIGNoYXIgQ2hpcFR5cGUsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBQVUNIQVIgIHZvbGF0aWxlIHBWaWRlb01lbW9yeSA9ICggUFVDSEFSIClwVkJJbmZvLT5ST01BZGRyIDsKLSAgICBVTE9ORyAgIGkgOwotICAgIFVDSEFSICAgaiAsIGsgOwotI2lmIDAKLSAgICBVTE9ORyAgIGlpICwgamogOwotICAgIGkgPSBwVmlkZW9NZW1vcnlbIDB4MUNGIF0gfCAoIHBWaWRlb01lbW9yeVsgMHgxRDAgXSA8PCA4ICkgOwkJLyogVW5pUk9NICovCi0gICAgaWYgKCBpICE9IDAgKQotICAgICAgICBVTklST00gPSAxIDsKLQotICAgIGlpID0gMHg5MCA7Ci0gICAgZm9yKCBqaiA9IDB4MDAgOyBqaiA8IDB4MDggOyBqaisrICkKLSAgICB7Ci0gICAgICAgIHBWQkluZm8tPk1DTEtEYXRhWyBqaiBdLlNSMjggPSBwVmlkZW9NZW1vcnlbIGlpIF0gOwotICAgICAgICBwVkJJbmZvLT5NQ0xLRGF0YVsgamogXS5TUjI5ID0gcFZpZGVvTWVtb3J5WyBpaSArIDFdIDsKLSAgICAgICAgcFZCSW5mby0+TUNMS0RhdGFbIGpqIF0uU1IyQSA9IHBWaWRlb01lbW9yeVsgaWkgKyAyXSA7Ci0gICAgICAgIHBWQkluZm8tPk1DTEtEYXRhWyBqaiBdLkNMT0NLID0gcFZpZGVvTWVtb3J5WyBpaSArIDMgXSB8ICggcFZpZGVvTWVtb3J5WyBpaSArIDQgXSA8PCA4ICkgOwotICAgICAgICBpaSArPSAweDA1IDsKLSAgICB9Ci0KLSAgICBpaSA9IDB4QjggOwotICAgIGZvciggamogPSAweDAwIDsgamogPCAweDA4IDsgamorKyApCi0gICAgewotICAgICAgICBwVkJJbmZvLT5FQ0xLRGF0YVsgamogXS5TUjJFID0gcFZpZGVvTWVtb3J5WyBpaSBdIDsKLSAgICAgICAgcFZCSW5mby0+RUNMS0RhdGFbIGpqIF0uU1IyRj1wVmlkZW9NZW1vcnlbIGlpICsgMSBdIDsKLSAgICAgICAgcFZCSW5mby0+RUNMS0RhdGFbIGpqIF0uU1IzMD0gcFZpZGVvTWVtb3J5WyBpaSArIDIgXSA7Ci0gICAgICAgIHBWQkluZm8tPkVDTEtEYXRhWyBqaiBdLkNMT0NLPSBwVmlkZW9NZW1vcnlbIGlpICsgMyBdIHwgKCBwVmlkZW9NZW1vcnlbIGlpICsgNCBdIDw8IDggKSA7Ci0gICAgICAgIGlpICs9IDB4MDUgOwotICAgIH0KLQotICAgIC8qIFZvbGFyaSBjdXN0b21pemUgZGF0YSBhcmVhIHN0YXJ0ICovCi0gICAgLyogaWYgKCBDaGlwVHlwZSA9PSBYRzQwICkgKi8KLSAgICBpZiAoIENoaXBUeXBlID49IFhHNDAgKQotICAgIHsKLSAgICAgICAgaWkgPSAweEUwIDsKLSAgICAgICAgZm9yKCBqaiA9IDB4MDAgOyBqaiA8IDB4MDMgOyBqaisrICkKLSAgICAgICAgewotICAgICAgICAgICAgcFZCSW5mby0+U1IxNVsgamogXVsgMCBdID0gcFZpZGVvTWVtb3J5WyBpaSBdIDsJCS8qIFNSMTMsIFNSMTQsIGFuZCBTUjE4ICovCi0gICAgICAgICAgICBwVkJJbmZvLT5TUjE1WyBqaiBdWyAxIF0gPSBwVmlkZW9NZW1vcnlbIGlpICsgMSBdIDsKLSAgICAgICAgICAgIHBWQkluZm8tPlNSMTVbIGpqIF1bIDIgXSA9IHBWaWRlb01lbW9yeVsgaWkgKyAyIF0gOwotICAgICAgICAgICAgcFZCSW5mby0+U1IxNVsgamogXVsgMyBdID0gcFZpZGVvTWVtb3J5WyBpaSArIDMgXSA7Ci0gICAgICAgICAgICBwVkJJbmZvLT5TUjE1WyBqaiBdWyA0IF0gPSBwVmlkZW9NZW1vcnlbIGlpICsgNCBdIDsKLSAgICAgICAgICAgIHBWQkluZm8tPlNSMTVbIGpqIF1bIDUgXSA9IHBWaWRlb01lbW9yeVsgaWkgKyA1IF0gOwotICAgICAgICAgICAgcFZCSW5mby0+U1IxNVsgamogXVsgNiBdID0gcFZpZGVvTWVtb3J5WyBpaSArIDYgXSA7Ci0gICAgICAgICAgICBwVkJJbmZvLT5TUjE1WyBqaiBdWyA3IF0gPSBwVmlkZW9NZW1vcnlbIGlpICsgNyBdIDsKLSAgICAgICAgICAgIGlpICs9IDB4MDggOwotICAgICAgICB9Ci0gICAgICAgIGlpID0gMHgxMTAgOwotICAgICAgICBqaiA9IDB4MDMgOwotICAgICAgICBwVkJJbmZvLT5TUjE1WyBqaiBdWyAwIF0gPSBwVmlkZW9NZW1vcnlbIGlpIF0gOwkJLyogU1IxQiAqLwotICAgICAgICBwVkJJbmZvLT5TUjE1WyBqaiBdWyAxIF0gPSBwVmlkZW9NZW1vcnlbIGlpICsgMSBdIDsKLSAgICAgICAgcFZCSW5mby0+U1IxNVsgamogXVsgMiBdID0gcFZpZGVvTWVtb3J5WyBpaSArIDIgXSA7Ci0gICAgICAgIHBWQkluZm8tPlNSMTVbIGpqIF1bIDMgXSA9IHBWaWRlb01lbW9yeVsgaWkgKyAzIF0gOwotICAgICAgICBwVkJJbmZvLT5TUjE1WyBqaiBdWyA0IF0gPSBwVmlkZW9NZW1vcnlbIGlpICsgNCBdIDsKLSAgICAgICAgcFZCSW5mby0+U1IxNVsgamogXVsgNSBdID0gcFZpZGVvTWVtb3J5WyBpaSArIDUgXSA7Ci0gICAgICAgIHBWQkluZm8tPlNSMTVbIGpqIF1bIDYgXSA9IHBWaWRlb01lbW9yeVsgaWkgKyA2IF0gOwotICAgICAgICBwVkJJbmZvLT5TUjE1WyBqaiBdWyA3IF0gPSBwVmlkZW9NZW1vcnlbIGlpICsgNyBdIDsKLQotICAgICAgICAqcFZCSW5mby0+cFNSMDcgPSBwVmlkZW9NZW1vcnlbIDB4NzQgXSA7Ci0gICAgICAgICpwVkJJbmZvLT5wU1IxRiA9IHBWaWRlb01lbW9yeVsgMHg3NSBdIDsKLSAgICAgICAgKnBWQkluZm8tPnBTUjIxID0gcFZpZGVvTWVtb3J5WyAweDc2IF0gOwotICAgICAgICAqcFZCSW5mby0+cFNSMjIgPSBwVmlkZW9NZW1vcnlbIDB4NzcgXSA7Ci0gICAgICAgICpwVkJJbmZvLT5wU1IyMyA9IHBWaWRlb01lbW9yeVsgMHg3OCBdIDsKLSAgICAgICAgKnBWQkluZm8tPnBTUjI0ID0gcFZpZGVvTWVtb3J5WyAweDc5IF0gOwotICAgICAgICBwVkJJbmZvLT5TUjI1WyAwIF0gPSBwVmlkZW9NZW1vcnlbIDB4N0EgXSA7Ci0gICAgICAgICpwVkJJbmZvLT5wU1IzMSA9IHBWaWRlb01lbW9yeVsgMHg3QiBdIDsKLSAgICAgICAgKnBWQkluZm8tPnBTUjMyID0gcFZpZGVvTWVtb3J5WyAweDdDIF0gOwotICAgICAgICAqcFZCSW5mby0+cFNSMzMgPSBwVmlkZW9NZW1vcnlbIDB4N0QgXSA7Ci0gICAgICAgIGlpID0gMHhGOCA7Ci0KLSAgICAgICAgZm9yKCBqaiA9IDAgOyBqaiA8IDMgOyBqaisrICkKLSAgICAgICAgewotICAgICAgICAgICAgcFZCSW5mby0+Q1I0MFsgamogXVsgMCBdID0gcFZpZGVvTWVtb3J5WyBpaSBdIDsKLSAgICAgICAgICAgIHBWQkluZm8tPkNSNDBbIGpqIF1bIDEgXSA9IHBWaWRlb01lbW9yeVsgaWkgKyAxIF0gOwotICAgICAgICAgICAgcFZCSW5mby0+Q1I0MFsgamogXVsgMiBdID0gcFZpZGVvTWVtb3J5WyBpaSArIDIgXSA7Ci0gICAgICAgICAgICBwVkJJbmZvLT5DUjQwWyBqaiBdWyAzIF0gPSBwVmlkZW9NZW1vcnlbIGlpICsgMyBdIDsKLSAgICAgICAgICAgIHBWQkluZm8tPkNSNDBbIGpqIF1bIDQgXSA9IHBWaWRlb01lbW9yeVsgaWkgKyA0IF0gOwotICAgICAgICAgICAgcFZCSW5mby0+Q1I0MFsgamogXVsgNSBdID0gcFZpZGVvTWVtb3J5WyBpaSArIDUgXSA7Ci0gICAgICAgICAgICBwVkJJbmZvLT5DUjQwWyBqaiBdWyA2IF0gPSBwVmlkZW9NZW1vcnlbIGlpICsgNiBdIDsKLSAgICAgICAgICAgIHBWQkluZm8tPkNSNDBbIGpqIF1bIDcgXSA9IHBWaWRlb01lbW9yeVsgaWkgKyA3IF0gOwotICAgICAgICAgICAgaWkgKz0gMHgwOCA7Ci0gICAgICAgIH0KLQotICAgICAgICBpaSA9IDB4MTE4IDsKLSAgICAgICAgZm9yKCBqID0gMyA7IGogPCAyNCA7IGorKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBWQkluZm8tPkNSNDBbIGogXVsgMCBdID0gcFZpZGVvTWVtb3J5WyBpaSBdIDsKLSAgICAgICAgICAgIHBWQkluZm8tPkNSNDBbIGogXVsgMSBdID0gcFZpZGVvTWVtb3J5WyBpaSArIDEgXSA7Ci0gICAgICAgICAgICBwVkJJbmZvLT5DUjQwWyBqIF1bIDIgXSA9IHBWaWRlb01lbW9yeVsgaWkgKyAyIF0gOwotICAgICAgICAgICAgcFZCSW5mby0+Q1I0MFsgaiBdWyAzIF0gPSBwVmlkZW9NZW1vcnlbIGlpICsgMyBdIDsKLSAgICAgICAgICAgIHBWQkluZm8tPkNSNDBbIGogXVsgNCBdID0gcFZpZGVvTWVtb3J5WyBpaSArIDQgXSA7Ci0gICAgICAgICAgICBwVkJJbmZvLT5DUjQwWyBqIF1bIDUgXSA9IHBWaWRlb01lbW9yeVsgaWkgKyA1IF0gOwotICAgICAgICAgICAgcFZCSW5mby0+Q1I0MFsgaiBdWyA2IF0gPSBwVmlkZW9NZW1vcnlbIGlpICsgNiBdIDsKLSAgICAgICAgICAgIHBWQkluZm8tPkNSNDBbIGogXVsgNyBdID0gcFZpZGVvTWVtb3J5WyBpaSArIDcgXSA7Ci0gICAgICAgICAgICBpaSArPSAweDA4IDsKLSAgICAgICAgfQotCi0gICAgICAgIGkgPSBwVmlkZW9NZW1vcnlbIDB4MUMwIF0gfCAoIHBWaWRlb01lbW9yeVsgMHgxQzEgXSA8PCA4ICkgOwotCi0gICAgICAgIGZvciggaiA9IDAgOyBqIDwgOCA7IGorKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciggayA9IDAgOyBrIDwgNCA7IGsrKyApCi0gICAgICAgICAgICAgICAgcFZCSW5mby0+Q1I2QlsgaiBdWyBrIF0gPSBwVmlkZW9NZW1vcnlbIGkgKyA0ICogaiArIGsgXSA7Ci0gICAgICAgIH0KLQotICAgICAgICBpID0gcFZpZGVvTWVtb3J5WyAweDFDMiBdIHwgKCBwVmlkZW9NZW1vcnlbIDB4MUMzIF0gPDwgOCApIDsKLQotICAgICAgICBmb3IoIGogPSAwIDsgaiA8IDggOyBqKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IoIGsgPSAwIDsgayA8IDQgOyBrKysgKQotICAgICAgICAgICAgICAgIHBWQkluZm8tPkNSNkVbIGogXVsgayBdID0gcFZpZGVvTWVtb3J5WyBpICsgNCAqIGogKyBrIF0gOwotICAgICAgICB9Ci0KLSAgICAgICAgaSA9IHBWaWRlb01lbW9yeVsgMHgxQzQgXSB8ICggcFZpZGVvTWVtb3J5WyAweDFDNSBdIDw8IDggKSA7Ci0gICAgICAgIGZvciggaiA9IDAgOyBqIDwgOCA7IGorKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciggayA9IDAgOyBrIDwgMzIgOyBrKysgKQotICAgICAgICAgICAgICAgIHBWQkluZm8tPkNSNkZbIGogXVsgayBdID0gcFZpZGVvTWVtb3J5WyBpICsgMzIgKiBqICsgayBdIDsKLSAgICAgICAgfQotCi0gICAgICAgIGkgPSBwVmlkZW9NZW1vcnlbIDB4MUM2IF0gfCAoIHBWaWRlb01lbW9yeVsgMHgxQzcgXSA8PCA4ICkgOwotCi0gICAgICAgIGZvciggaiA9IDAgOyBqIDwgOCA7IGorKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciggayA9IDAgOyBrIDwgMiA7IGsrKyApCi0gICAgICAgICAgICAgICAgcFZCSW5mby0+Q1I4OVsgaiBdWyBrIF0gPSBwVmlkZW9NZW1vcnlbIGkgKyAyICogaiArIGsgXSA7Ci0gICAgICAgIH0KLQotICAgICAgICBpID0gcFZpZGVvTWVtb3J5WyAweDFDOCBdIHwgKCBwVmlkZW9NZW1vcnlbIDB4MUM5IF0gPDwgOCApIDsKLSAgICAgICAgZm9yKCBqID0gMCA7IGogPCAxMiA7IGorKyApCi0gICAgICAgICAgICBwVkJJbmZvLT5BR1BSZWdbIGogXSA9IHBWaWRlb01lbW9yeVsgaSArIGogXSA7Ci0KLSAgICAgICAgaSA9IHBWaWRlb01lbW9yeVsgMHgxQ0YgXSB8ICggcFZpZGVvTWVtb3J5WyAweDFEMCBdIDw8IDggKSA7Ci0gICAgICAgIGZvciggaiA9IDAgOyBqIDwgNCA7IGorKyApCi0gICAgICAgICAgICBwVkJJbmZvLT5TUjE2WyBqIF0gPSBwVmlkZW9NZW1vcnlbIGkgKyBqIF0gOwotCi0gICAgICAgIGlmICggQ2hpcFR5cGUgPT0gWEcyMSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChwVmlkZW9NZW1vcnlbIDB4NjcgXSAmIDB4ODApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBWQkluZm8tPnBEVk9TZXR0aW5nID0gcFZpZGVvTWVtb3J5WyAweDY3IF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIChwVmlkZW9NZW1vcnlbIDB4NjcgXSAmIDB4QzApID09IDB4QzAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwVkJJbmZvLT5wQ1IyRSA9IHBWaWRlb01lbW9yeVsgaSArIDQgXSA7Ci0gICAgICAgICAgICAgICAgKnBWQkluZm8tPnBDUjJGID0gcFZpZGVvTWVtb3J5WyBpICsgNSBdIDsKLSAgICAgICAgICAgICAgICAqcFZCSW5mby0+cENSNDYgPSBwVmlkZW9NZW1vcnlbIGkgKyA2IF0gOwotICAgICAgICAgICAgICAgICpwVkJJbmZvLT5wQ1I0NyA9IHBWaWRlb01lbW9yeVsgaSArIDcgXSA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIENoaXBUeXBlID09IFhHMjcgKQotICAgICAgICB7Ci0gICAgICAgICAgICBqaiA9IGkrajsKLSAgICAgICAgICAgIGZvciggaSA9IDAgOyBpIDw9IDB4QiA7IGkrKyxqaisrICkKLSAgICAgICAgICAgICAgcFZCSW5mby0+cENSRDBbaV0gPSBwVmlkZW9NZW1vcnlbIGpqIF0gOwotICAgICAgICAgICAgZm9yKCBpID0gMHgwIDsgaSA8PSAweDEgOyBpKyssamorKyApCi0gICAgICAgICAgICAgIHBWQkluZm8tPnBDUkRFW2ldID0gcFZpZGVvTWVtb3J5WyBqaiBdIDsKLQotICAgICAgICAgICAgKnBWQkluZm8tPnBTUjQwID0gcFZpZGVvTWVtb3J5WyBqaiBdIDsKLSAgICAgICAgICAgIGpqKys7Ci0gICAgICAgICAgICAqcFZCSW5mby0+cFNSNDEgPSBwVmlkZW9NZW1vcnlbIGpqIF0gOwotCi0gICAgICAgICAgICBpZiAocFZpZGVvTWVtb3J5WyAweDY3IF0gJiAweDgwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwVkJJbmZvLT5wRFZPU2V0dGluZyA9IHBWaWRlb01lbW9yeVsgMHg2NyBdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCAocFZpZGVvTWVtb3J5WyAweDY3IF0gJiAweEMwKSA9PSAweEMwICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBqaisrOwotICAgICAgICAgICAgICAgICpwVkJJbmZvLT5wQ1IyRSA9IHBWaWRlb01lbW9yeVsgamogXSA7Ci0gICAgICAgICAgICAgICAgKnBWQkluZm8tPnBDUjJGID0gcFZpZGVvTWVtb3J5WyBqaiArIDEgXSA7Ci0gICAgICAgICAgICAgICAgKnBWQkluZm8tPnBDUjQ2ID0gcFZpZGVvTWVtb3J5WyBqaiArIDIgXSA7Ci0gICAgICAgICAgICAgICAgKnBWQkluZm8tPnBDUjQ3ID0gcFZpZGVvTWVtb3J5WyBqaiArIDMgXSA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfQotCi0gICAgICAgICpwVkJJbmZvLT5wQ1JDRiA9IHBWaWRlb01lbW9yeVsgMHgxQ0EgXSA7Ci0gICAgICAgICpwVkJJbmZvLT5wWEdJTmV3X0RSQU1UeXBlRGVmaW5pdGlvbiA9IHBWaWRlb01lbW9yeVsgMHgxQ0IgXSA7Ci0gICAgICAgICpwVkJJbmZvLT5wWEdJTmV3X0kyQ0RlZmluaXRpb24gPSBwVmlkZW9NZW1vcnlbIDB4MUQxIF0gOwotICAgICAgICBpZiAoIENoaXBUeXBlID49IFhHMjAgKQotICAgICAgICB7Ci0gICAgICAgICAgICpwVkJJbmZvLT5wWEdJTmV3X0NSOTcgPSBwVmlkZW9NZW1vcnlbIDB4MUQyIF0gOwotICAgICAgICAgICBpZiAoIENoaXBUeXBlID09IFhHMjcgKQotICAgICAgICAgICB7Ci0gICAgICAgICAgICAgKnBWQkluZm8tPnBTUjM2ID0gcFZpZGVvTWVtb3J5WyAweDFEMyBdIDsKLSAgICAgICAgICAgICAqcFZCSW5mby0+cENSOEYgPSBwVmlkZW9NZW1vcnlbIDB4MUQ1IF0gOwotICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgIH0KLSNlbmRpZgorCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnBWaWRlb01lbW9yeSA9ICh1bnNpZ25lZCBjaGFyICopcFZCSW5mby0+Uk9NQWRkcjsKKyAgICB1bnNpZ25lZCBsb25nICAgaSA7CisgICAgdW5zaWduZWQgY2hhciAgIGosIGsgOwogICAgIC8qIFZvbGFyaSBjdXN0b21pemUgZGF0YSBhcmVhIGVuZCAqLwogCiAgICAgaWYgKCBDaGlwVHlwZSA9PSBYRzIxICkKQEAgLTI5NzIsNyArMjc2MSw4IEBACiAgICAgICAgICAgICAgICAgaSArPSAyNTsKICAgICAgICAgICAgICAgICBqLS07CiAgICAgICAgICAgICAgICAgaysrOwotICAgICAgICAgICAgICB9IHdoaWxlICggKGo+MCkgJiYgKCBrIDwgKHNpemVvZihYR0kyMV9MQ0RDYXBMaXN0KS9zaXplb2YoWEdJMjFfTFZEU0NhcFN0cnVjdCkpICkgKTsKKwkgICAgICB9IHdoaWxlICgoaiA+IDApICYmCisJCSAgICAgICAoayA8IChzaXplb2YoWEdJMjFfTENEQ2FwTGlzdCkvc2l6ZW9mKHN0cnVjdCBYR0kyMV9MVkRTQ2FwU3RydWN0KSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKQEAgLTMwMDMsNyArMjc5Myw3IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19ERFIxeF9NUlNfWEcyMCggVUxPTkcgUDNjNCAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lOZXdfRERSMXhfTVJTX1hHMjAodW5zaWduZWQgbG9uZyBQM2M0LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAKICAgICBYR0lOZXdfU2V0UmVnMSggUDNjNCAsIDB4MTggLCAweDAxICkgOwpAQCAtMzAzOSwxMyArMjgyOSwxMyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lOZXdfU2V0RFJBTU1vZGVSZWdpc3Rlcl9YRzIwKCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICkKK3ZvaWQgWEdJTmV3X1NldERSQU1Nb2RlUmVnaXN0ZXJfWEcyMChzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbikKIHsKLSAgICBWQl9ERVZJQ0VfSU5GTyBWQklORjsKLSAgICBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyA9ICZWQklORjsKKyAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gVkJJTkY7CisgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvID0gJlZCSU5GOwogICAgIHBWQkluZm8tPlJPTUFkZHIgPSBId0RldmljZUV4dGVuc2lvbi0+cGpWaXJ0dWFsUm9tQmFzZSA7CiAgICAgcFZCSW5mby0+RkJBZGRyID0gSHdEZXZpY2VFeHRlbnNpb24tPnBqVmlkZW9NZW1vcnlBZGRyZXNzIDsKLSAgICBwVkJJbmZvLT5CYXNlQWRkciA9IChVTE9ORylId0RldmljZUV4dGVuc2lvbi0+cGpJT0FkZHJlc3MgOworICAgIHBWQkluZm8tPkJhc2VBZGRyID0gKHVuc2lnbmVkIGxvbmcpSHdEZXZpY2VFeHRlbnNpb24tPnBqSU9BZGRyZXNzIDsKICAgICBwVkJJbmZvLT5JU1hQRE9TID0gMCA7CiAKICAgICBwVkJJbmZvLT5QM2M0ID0gcFZCSW5mby0+QmFzZUFkZHIgKyAweDE0IDsKQEAgLTMwNzgsMTMgKzI4NjgsMTMgQEAKICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MUIgLCAweDAzICkgOwogfQogCi12b2lkIFhHSU5ld19TZXREUkFNTW9kZVJlZ2lzdGVyX1hHMjcoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gKQordm9pZCBYR0lOZXdfU2V0RFJBTU1vZGVSZWdpc3Rlcl9YRzI3KHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uKQogewotICAgIFZCX0RFVklDRV9JTkZPIFZCSU5GOwotICAgIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvID0gJlZCSU5GOworICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyBWQklORjsKKyAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8gPSAmVkJJTkY7CiAgICAgcFZCSW5mby0+Uk9NQWRkciA9IEh3RGV2aWNlRXh0ZW5zaW9uLT5walZpcnR1YWxSb21CYXNlIDsKICAgICBwVkJJbmZvLT5GQkFkZHIgPSBId0RldmljZUV4dGVuc2lvbi0+cGpWaWRlb01lbW9yeUFkZHJlc3MgOwotICAgIHBWQkluZm8tPkJhc2VBZGRyID0gKFVMT05HKUh3RGV2aWNlRXh0ZW5zaW9uLT5waklPQWRkcmVzcyA7CisgICAgcFZCSW5mby0+QmFzZUFkZHIgPSAodW5zaWduZWQgbG9uZylId0RldmljZUV4dGVuc2lvbi0+cGpJT0FkZHJlc3MgOwogICAgIHBWQkluZm8tPklTWFBET1MgPSAwIDsKIAogICAgIHBWQkluZm8tPlAzYzQgPSBwVkJJbmZvLT5CYXNlQWRkciArIDB4MTQgOwpAQCAtMzEyMCwxMyArMjkxMCwxMiBAQAogCiB9CiAvKgotdm9pZCBYR0lOZXdfU2V0RFJBTU1vZGVSZWdpc3Rlcl9YRzI3KCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICkKK3ZvaWQgWEdJTmV3X1NldERSQU1Nb2RlUmVnaXN0ZXJfWEcyNyhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbikKIHsKLSNpZm5kZWYgTElOVVhfWEY4NgotICAgIFVDSEFSIGRhdGEgOwotI2VuZGlmCi0gICAgVkJfREVWSUNFX0lORk8gVkJJTkY7Ci0gICAgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gPSAmVkJJTkY7CisKKyAgICB1bnNpZ25lZCBjaGFyIGRhdGEgOworICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyBWQklORjsKKyAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8gPSAmVkJJTkY7CiAgICAgcFZCSW5mby0+Uk9NQWRkciA9IEh3RGV2aWNlRXh0ZW5zaW9uLT5walZpcnR1YWxSb21CYXNlIDsKICAgICBwVkJJbmZvLT5GQkFkZHIgPSBId0RldmljZUV4dGVuc2lvbi0+cGpWaWRlb01lbW9yeUFkZHJlc3MgOwogICAgIHBWQkluZm8tPkJhc2VBZGRyID0gSHdEZXZpY2VFeHRlbnNpb24tPnBqSU9BZGRyZXNzIDsKQEAgLTMxNjgsOSArMjk1Nyw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJTmV3X0Noa1NlbnNlU3RhdHVzICggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lOZXdfQ2hrU2Vuc2VTdGF0dXMoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcGJ4PTAgLCB0ZW1wICwgdGVtcGN4ICwgQ1IzQ0RhdGE7CisgICAgdW5zaWduZWQgc2hvcnQgdGVtcGJ4ID0gMCwgdGVtcCwgdGVtcGN4LCBDUjNDRGF0YTsKIAogICAgIHRlbXAgPSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4MzIgKSA7CiAKQEAgLTMyMjksOSArMzAxOCw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJTmV3X1NldE1vZGVTY3JhdGNoICggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJTmV3X1NldE1vZGVTY3JhdGNoKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXAgLCB0ZW1wY2wgPSAwICwgdGVtcGNoID0gMCAsIENSMzFEYXRhICwgQ1IzOERhdGE7CisgICAgdW5zaWduZWQgc2hvcnQgdGVtcCAsIHRlbXBjbCA9IDAgLCB0ZW1wY2ggPSAwICwgQ1IzMURhdGEgLCBDUjM4RGF0YTsKIAogICAgIHRlbXAgPSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4M2QgKSA7CiAgICAgdGVtcCB8PSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4M2UgKSA8PCA4IDsKQEAgLTMzMjYsMjMgKzMxMTUsMTMgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lOZXdfR2V0WEcyMVNlbnNlKFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lOZXdfR2V0WEcyMVNlbnNlKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVUNIQVIgVGVtcDsKLSAgICBQVUNIQVIgIHZvbGF0aWxlIHBWaWRlb01lbW9yeSA9ICggUFVDSEFSIClwVkJJbmZvLT5ST01BZGRyIDsKKyAgICB1bnNpZ25lZCBjaGFyIFRlbXA7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcFZpZGVvTWVtb3J5ID0gKHVuc2lnbmVkIGNoYXIgKilwVkJJbmZvLT5ST01BZGRyOwogCiAgICAgcFZCSW5mby0+SUZfREVGX0xWRFMgPSAwIDsKIAotI2lmZGVmIFdJTjIwMDAKLSAgIHBWQkluZm8tPklGX0RFRl9DSDcwMDcgPSAwIDsKLSAgICBpZiAoICggcFZpZGVvTWVtb3J5WyAweDY1IF0gJiAweDAyICkgKQkJCS8qIEZvciBYRzIxIENINzAwNyAqLwotICAgIHsKLSAgICAgICAgLyogVmlkZW9EZWJ1Z1ByaW50KCgwLCAiUmVhZFZCSU9TVGFibERhdGE6IHBWaWRlb01lbW9yeVsgMHg2NSBdID0leFxuIixwVmlkZW9NZW1vcnlbIDB4NjUgXSkpOyAqLwotICAgICAgICBwVkJJbmZvLT5JRl9ERUZfQ0g3MDA3ID0gMSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFtCaWxseV0gMDcvMDUvMDMgKi8KLSAgICAgICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QM2Q0ICwgMHgzOCAsIH4weEUwICwgMHg2MCApIDsgLyogQ0g3MDA3IG9uIGNoaXAgKi8KLSAgICB9Ci0gICAgZWxzZQotI2VuZGlmCiAjaWYgMQogICAgIGlmICgoIHBWaWRlb01lbW9yeVsgMHg2NSBdICYgMHgwMSApICkJCQkvKiBGb3IgWEcyMSBMVkRTICovCiAgICAgewpAQCAtMzM3OCw5ICszMTU3LDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lOZXdfR2V0WEcyN1NlbnNlKFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lOZXdfR2V0WEcyN1NlbnNlKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVUNIQVIgVGVtcCxiQ1I0QTsKKwl1bnNpZ25lZCBjaGFyIFRlbXAsIGJDUjRBOwogCiAgICAgIHBWQkluZm8tPklGX0RFRl9MVkRTID0gMCA7CiAgICAgIGJDUjRBID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDRBICkgOwpAQCAtMzQwMiw5ICszMTgxLDkgQEAKIAogfQogCi1VQ0hBUiBHZXRYRzIxRlBCaXRzKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordW5zaWduZWQgY2hhciBHZXRYRzIxRlBCaXRzKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVQ0hBUiBDUjM4LENSNEEsdGVtcDsKKwl1bnNpZ25lZCBjaGFyIENSMzgsIENSNEEsIHRlbXA7CiAKICAgICBDUjRBID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDRBICkgOwogICAgIFhHSU5ld19TZXRSZWdBTkRPUiggcFZCSW5mby0+UDNkNCAsIDB4NEEgLCB+MHgxMCAsIDB4MTAgKSA7IC8qIGVuYWJsZSBHUElPRSByZWFkICovCkBAIC0zNDIyLDkgKzMyMDEsOSBAQAogICAgIHJldHVybiB0ZW1wOwogfQogCi1VQ0hBUiBHZXRYRzI3RlBCaXRzKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordW5zaWduZWQgY2hhciBHZXRYRzI3RlBCaXRzKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVQ0hBUiBDUjRBLHRlbXA7CisJdW5zaWduZWQgY2hhciBDUjRBLCB0ZW1wOwogCiAgICAgQ1I0QSA9IFhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHg0QSApIDsKICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlAzZDQgLCAweDRBICwgfjB4MDMgLCAweDAzICkgOyAvKiBlbmFibGUgR1BJT0EvQi9DIHJlYWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9pbml0LmggYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfaW5pdC5oCmluZGV4IDFmMzlkOWMuLmI0NzM1MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9pbml0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX2luaXQuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgIF9WQklOSVRfCiAjZGVmaW5lICBfVkJJTklUXwotZXh0ZXJuICAgQk9PTEVBTiAgICBYR0lJbml0TmV3KCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICkgOwotZXh0ZXJuIFhHSTIxX0xWRFNDYXBTdHJ1Y3QgIFhHSTIxX0xDRENhcExpc3RbMTNdOworZXh0ZXJuICAgdW5zaWduZWQgY2hhciAgICBYR0lJbml0TmV3KHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uKSA7CitleHRlcm4gc3RydWN0IFhHSTIxX0xWRFNDYXBTdHJ1Y3QgIFhHSTIxX0xDRENhcExpc3RbMTNdOwogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3NldG1vZGUuYyBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9zZXRtb2RlLmMKaW5kZXggYmQ3ZjczOC4uZDkwYmYwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3NldG1vZGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfc2V0bW9kZS5jCkBAIC0xLDQzICsxLDkgQEAKLSNpbmNsdWRlICJvc2RlZi5oIgogCi0jaWZkZWYgVEMKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGNvbmlvLmg+Ci0jaW5jbHVkZSA8ZG9zLmg+Ci0jZW5kaWYKLQotCi0jaWZkZWYgTElOVVhfWEY4NgotI2luY2x1ZGUgInhmODYuaCIKLSNpbmNsdWRlICJ4Zjg2UGNpSW5mby5oIgotI2luY2x1ZGUgInhnaS5oIgotI2luY2x1ZGUgInhnaV9yZWdzLmgiCi0jZW5kaWYKLQotI2lmZGVmIExJTlVYX0tFUk5FTAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgIlhHSWZiLmgiCi0vKiNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0jaW5jbHVkZSA8dmlkZW8vWEdJZmIuaD4KLSNlbHNlCi0jaW5jbHVkZSA8bGludXgvWEdJZmIuaD4KLSNlbmRpZiovCi0jZW5kaWYKIAotI2lmZGVmIFdJTjIwMDAKLSNpbmNsdWRlIDxkZGVycm9yLmg+Ci0jaW5jbHVkZSA8ZGV2aW9jdGwuaD4KLSNpbmNsdWRlIDxtaW5pcG9ydC5oPgotI2luY2x1ZGUgPG50ZGR2ZGVvLmg+Ci0jaW5jbHVkZSA8dmlkZW8uaD4KLQotI2luY2x1ZGUgInhnaXYuaCIKLSNpbmNsdWRlICJkZF9pMmMuaCIKLSNpbmNsdWRlICJ0b29scy5oIgotI2VuZGlmCiAKICNpbmNsdWRlICJ2Yl9kZWYuaCIKICNpbmNsdWRlICJ2Z2F0eXBlcy5oIgpAQCAtNTQsMTk0ICsyMCwyMTggQEAKIAogCiAKLUJPT0xFQU4gIFhHSV9Jc0xDRER1YWxMaW5rKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLUJPT0xFQU4gIFhHSV9TZXRDUlQyR3JvdXAzMDEoVVNIT1JUIE1vZGVObywgUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbixQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci1CT09MRUFOICBYR0lfQmFja2xpZ2h0QnlEcnYoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwordW5zaWduZWQgY2hhciAgWEdJX0lzTENERHVhbExpbmsoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3Vuc2lnbmVkIGNoYXIgIFhHSV9TZXRDUlQyR3JvdXAzMDEodW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkJICAgICBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJCSAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3Vuc2lnbmVkIGNoYXIgIFhHSV9CYWNrbGlnaHRCeURydihzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwogCi1CT09MRUFOICBYR0lfSXNMQ0RPTihQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci1CT09MRUFOICBYR0lfRGlzYWJsZUNoSVNMQ0QoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotQk9PTEVBTiAgWEdJX0VuYWJsZUNoSVNMQ0QoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotQk9PTEVBTiAgWEdJX0FqdXN0Q1JUMlJhdGUoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCxVU0hPUlQgKmksIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLUJPT0xFQU4gIFhHSV9TZWFyY2hNb2RlSUQoIFVTSE9SVCBNb2RlTm8sVVNIT1JUICAqTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLUJPT0xFQU4gIFhHSV9HZXRMQ0RJbmZvKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci1CT09MRUFOICBYR0lTZXRNb2RlTmV3KCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICwgVVNIT1JUIE1vZGVObyApIDsKLUJPT0xFQU4gIFhHSV9CcmlkZ2VJc09uKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLVVDSEFSICAgIFhHSV9HZXRNb2RlUHRyKCBVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCxQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci1VU0hPUlQgICBYR0lfR2V0T2Zmc2V0KFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbixQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci1VU0hPUlQgICBYR0lfR2V0UmF0ZVB0ckNSVDIoIFBYR0lfSFdfREVWSUNFX0lORk8gcFhHSUhXREUsIFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICk7Ci1VU0hPUlQgICBYR0lfR2V0UmVzSW5mbyhVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotVVNIT1JUICAgWEdJX0dldENvbG9yRGVwdGgoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotVVNIT1JUICAgWEdJX0dldFZHQUhUMihQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci1VU0hPUlQgICBYR0lfR2V0VkNMSzJQdHIoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCxQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9WQkxvbmdXYWl0KFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9TYXZlQ1JUMkluZm8oVVNIT1JUIE1vZGVObywgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX0dldENSVDJEYXRhKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9HZXRDUlQyUmVzSW5mbyhVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1ByZVNldEdyb3VwMShVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCwgUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbixVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2V0R3JvdXAxKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9TZXRMb2NrUmVncyhVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCwgUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbixVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2V0TENEUmVncyhVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCwgUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbixVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2V0R3JvdXAyKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldEdyb3VwMyhVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldEdyb3VwNChVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCxVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9TZXRHcm91cDUoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQqICAgIFhHSV9HZXRMY2RQdHIoVVNIT1JUIEJYLCAgVVNIT1JUIE1vZGVObywgVVNIT1JUIE1vZGVJZEluZGV4LCBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkKiAgICBYR0lfR2V0VFZQdHIoVVNIT1JUIEJYLCBVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCxVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkIAkgWEdJX0ZpcmVQV0RFbmFibGUoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAJIFhHSV9FbmFibGVHYXRpbmdDUlQoUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAJIFhHSV9EaXNhYmxlR2F0aW5nQ1JUKFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgCSBYR0lfU2V0UGFuZWxEZWxheShVU0hPUlQgdGVtcGJsLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkIAkgWEdJX1NldFBhbmVsUG93ZXIoVVNIT1JUIHRlbXBhaCxVU0hPUlQgdGVtcGJsLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkIAkgWEdJX0VuYWJsZVBXRCggUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAJIFhHSV9EaXNhYmxlUFdEKCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfQXV0b1RocmVzaG9sZCggUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldFRhcDRSZWdzKCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Cit1bnNpZ25lZCBjaGFyICBYR0lfSXNMQ0RPTihzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordW5zaWduZWQgY2hhciAgWEdJX0Rpc2FibGVDaElTTENEKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit1bnNpZ25lZCBjaGFyICBYR0lfRW5hYmxlQ2hJU0xDRChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordW5zaWduZWQgY2hhciAgWEdJX0FqdXN0Q1JUMlJhdGUodW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkJICAgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCQkgICB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCisJCQkgICB1bnNpZ25lZCBzaG9ydCAqaSwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3Vuc2lnbmVkIGNoYXIgIFhHSV9TZWFyY2hNb2RlSUQodW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkJICB1bnNpZ25lZCBzaG9ydCAqTW9kZUlkSW5kZXgsCisJCQkgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit1bnNpZ25lZCBjaGFyICBYR0lfR2V0TENESW5mbyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCQl1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCXN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit1bnNpZ25lZCBjaGFyICBYR0lTZXRNb2RlTmV3KHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkgICAgICAgdW5zaWduZWQgc2hvcnQgTW9kZU5vKTsKK3Vuc2lnbmVkIGNoYXIgIFhHSV9CcmlkZ2VJc09uKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit1bnNpZ25lZCBjaGFyICAgIFhHSV9HZXRNb2RlUHRyKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCXVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3Vuc2lnbmVkIHNob3J0IFhHSV9HZXRPZmZzZXQodW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkJICAgICB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCSAgICAgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LAorCQkJICAgICBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJCSAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3Vuc2lnbmVkIHNob3J0IFhHSV9HZXRSYXRlUHRyQ1JUMihzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpwWEdJSFdERSwKKwkJCQkgIHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCQkgIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJCSAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3Vuc2lnbmVkIHNob3J0IFhHSV9HZXRSZXNJbmZvKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCSAgICAgIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJICAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3Vuc2lnbmVkIHNob3J0IFhHSV9HZXRDb2xvckRlcHRoKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCQkgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCQkJIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit1bnNpZ25lZCBzaG9ydCBYR0lfR2V0VkdBSFQyKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit1bnNpZ25lZCBzaG9ydCBYR0lfR2V0VkNMSzJQdHIodW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwKKwkJCSAgICAgICBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJCSAgICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1ZCTG9uZ1dhaXQoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TYXZlQ1JUMkluZm8odW5zaWduZWQgc2hvcnQgTW9kZU5vLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX0dldENSVDJEYXRhKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9HZXRDUlQyUmVzSW5mbyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1ByZVNldEdyb3VwMSh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1NldEdyb3VwMSh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1NldExvY2tSZWdzKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2V0TENEUmVncyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1NldEdyb3VwMih1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1NldEdyb3VwMyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1NldEdyb3VwNCh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1NldEdyb3VwNSh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgKlhHSV9HZXRMY2RQdHIodW5zaWduZWQgc2hvcnQgQlgsICB1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICAqWEdJX0dldFRWUHRyKHVuc2lnbmVkIHNob3J0IEJYLCB1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfRmlyZVBXREVuYWJsZShzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX0VuYWJsZUdhdGluZ0NSVChzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9EaXNhYmxlR2F0aW5nQ1JUKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1NldFBhbmVsRGVsYXkodW5zaWduZWQgc2hvcnQgdGVtcGJsLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1NldFBhbmVsUG93ZXIodW5zaWduZWQgc2hvcnQgdGVtcGFoLCB1bnNpZ25lZCBzaG9ydCB0ZW1wYmwsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfRW5hYmxlUFdEKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfRGlzYWJsZVBXRChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX0F1dG9UaHJlc2hvbGQoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRUYXA0UmVncyhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwogCi12b2lkICAgICBYR0lfRGlzcGxheU9uKFBYR0lfSFdfREVWSUNFX0lORk8sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9EaXNwbGF5T2ZmKCBQWEdJX0hXX0RFVklDRV9JTkZPLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApOwotdm9pZCAgICAgWEdJX1NldENSVDFHcm91cChQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9TZXRYRzIxQ1JUQyhVU0hPUlQgTW9kZU5vLCBVU0hPUlQgTW9kZUlkSW5kZXgsIFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9TZXRYRzIxTENEKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvLFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsVVNIT1JUIE1vZGVObyk7Ci12b2lkICAgICBYR0lfU2V0WEcyN0NSVEMoVVNIT1JUIE1vZGVObywgVVNIT1JUIE1vZGVJZEluZGV4LCBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2V0WEcyN0xDRChQVkJfREVWSUNFX0lORk8gcFZCSW5mbyxVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LFVTSE9SVCBNb2RlTm8pOwotdm9pZAkgWEdJX1VwZGF0ZVhHMjFDUlRDKFVTSE9SVCBNb2RlTm8sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvLCBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4KTsKLXZvaWQgICAgIFhHSV9XYWl0RGlzcGx5KFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9TZW5zZUNSVDEoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldFNlcVJlZ3MoVVNIT1JUIE1vZGVObyxVU0hPUlQgU3RhbmRUYWJsZUluZGV4LFVTSE9SVCBNb2RlSWRJbmRleCxQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2V0TWlzY1JlZ3MoVVNIT1JUIFN0YW5kVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldENSVENSZWdzKFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sVVNIT1JUIFN0YW5kVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldEFUVFJlZ3MoVVNIT1JUIE1vZGVObyxVU0hPUlQgU3RhbmRUYWJsZUluZGV4LFVTSE9SVCBNb2RlSWRJbmRleCxQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApOwotdm9pZCAgICAgWEdJX1NldEdSQ1JlZ3MoVVNIT1JUIFN0YW5kVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX0NsZWFyRXh0MVJlZ3MoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwordm9pZCAgICAgWEdJX0Rpc3BsYXlPbihzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICosIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfRGlzcGxheU9mZihzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICosIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2V0Q1JUMUdyb3VwKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCB1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1NldFhHMjFDUlRDKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRYRzIxTENEKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbywgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCB1bnNpZ25lZCBzaG9ydCBNb2RlTm8pOwordm9pZCAgICAgWEdJX1NldFhHMjdDUlRDKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRYRzI3TENEKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbywgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCB1bnNpZ25lZCBzaG9ydCBNb2RlTm8pOwordm9pZAkgWEdJX1VwZGF0ZVhHMjFDUlRDKHVuc2lnbmVkIHNob3J0IE1vZGVObywgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvLCB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgpOwordm9pZCAgICAgWEdJX1dhaXREaXNwbHkoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZW5zZUNSVDEoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRTZXFSZWdzKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgU3RhbmRUYWJsZUluZGV4LCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRNaXNjUmVncyh1bnNpZ25lZCBzaG9ydCBTdGFuZFRhYmxlSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2V0Q1JUQ1JlZ3Moc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHVuc2lnbmVkIHNob3J0IFN0YW5kVGFibGVJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRBVFRSZWdzKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgU3RhbmRUYWJsZUluZGV4LCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRHUkNSZWdzKHVuc2lnbmVkIHNob3J0IFN0YW5kVGFibGVJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9DbGVhckV4dDFSZWdzKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7CiAKLXZvaWQgICAgIFhHSV9TZXRTeW5jKFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldENSVDFDUlRDKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsUFZCX0RFVklDRV9JTkZPIHBWQkluZm8sUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbik7Ci12b2lkICAgICBYR0lfU2V0Q1JUMVRpbWluZ19IKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvLFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24pOwotdm9pZCAgICAgWEdJX1NldENSVDFUaW1pbmdfVihVU0hPUlQgTW9kZUlkSW5kZXgsVVNIT1JUIE1vZGVObyxQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2V0Q1JUMURFKFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCxQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2V0Q1JUMVZDTEsoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbixVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2V0Q1JUMUZJRk8oVVNIT1JUIE1vZGVObyxQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2V0Q1JUMU1vZGVSZWdzKFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCxQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2V0VkNMS1N0YXRlKFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sVVNIT1JUIE1vZGVObyxVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRTeW5jKHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRDUlQxQ1JUQyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbywgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24pOwordm9pZCAgICAgWEdJX1NldENSVDFUaW1pbmdfSChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8sIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uKTsKK3ZvaWQgICAgIFhHSV9TZXRDUlQxVGltaW5nX1YodW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHVuc2lnbmVkIHNob3J0IE1vZGVObywgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRDUlQxREUoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRDUlQxVkNMSyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1NldENSVDFGSUZPKHVuc2lnbmVkIHNob3J0IE1vZGVObywgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2V0Q1JUMU1vZGVSZWdzKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCB1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2V0VkNMS1N0YXRlKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCB1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKIAotdm9pZCAgICAgWEdJX0xvYWREQUMoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1dyaXRlREFDKFVTSE9SVCBkbCwgVVNIT1JUIGFoLCBVU0hPUlQgYWwsIFVTSE9SVCBkaCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotLyp2b2lkICAgICBYR0lfQ2xlYXJCdWZmZXIoUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbixVU0hPUlQgTW9kZU5vLFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsqLwotdm9pZCAgICAgWEdJX1NldExDREFHcm91cChVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCxQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLFBWQl9ERVZJQ0VfSU5GTyAgcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfR2V0TFZEU1Jlc0luZm8oIFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFBWQl9ERVZJQ0VfSU5GTyAgcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfR2V0TFZEU0RhdGEoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCxQVkJfREVWSUNFX0lORk8gIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX01vZENSVDFSZWdzKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbixQVkJfREVWSUNFX0lORk8gIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldExWRFNSZWdzKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsUFZCX0RFVklDRV9JTkZPICBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9VcGRhdGVNb2RlSW5mbyhQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLFBWQl9ERVZJQ0VfSU5GTyAgcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfR2V0VkdBVHlwZShQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLFBWQl9ERVZJQ0VfSU5GTyAgcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfR2V0VkJUeXBlKFBWQl9ERVZJQ0VfSU5GTyAgcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfR2V0VkJJbmZvKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sUFZCX0RFVklDRV9JTkZPICBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9HZXRUVkluZm8oVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsUFZCX0RFVklDRV9JTkZPICBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9TZXRDUlQyRUNMSyggVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCxQVkJfREVWSUNFX0lORk8gIHBWQkluZm8pOwotdm9pZCAgICAgSW5pdFRvMzMwUG9pbnRlcihVQ0hBUixQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfR2V0TENEU3luYyhVU0hPUlQqIEhTeW5jV2lkdGgsIFVTSE9SVCogVlN5bmNXaWR0aCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAJIFhHSV9EaXNhYmxlQnJpZGdlKFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgIAkgWEdJX0VuYWJsZUJyaWRnZShQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2V0Q1JUMlZDTEsoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX09FTTMxMFNldHRpbmcoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9TZXREZWxheUNvbXAoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldExDRENhcChQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2V0TENEQ2FwX0EoVVNIT1JUIHRlbXBjeCxQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2V0TENEQ2FwX0IoVVNIT1JUIHRlbXBjeCxQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBTZXRTcGVjdHJ1bShQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2V0QW50aUZsaWNrZXIoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9TZXRFZGdlRW5oYW5jZShVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldFBoYXNlSW5jcihQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2V0WUZpbHRlcihVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX0dldFRWUHRySW5kZXgyKFVTSE9SVCogdGVtcGJ4LFVDSEFSKiB0ZW1wY2wsVUNIQVIqIHRlbXBjaCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotVVNIT1JUICAgWEdJX0dldFRWUHRySW5kZXgoICBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApOwotdm9pZCAgICAgWEdJX1NldENSVDJNb2RlUmVncyhVU0hPUlQgTW9kZU5vLFBYR0lfSFdfREVWSUNFX0lORk8sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICk7Ci12b2lkICAgICBYR0lfQ2xvc2VDUlRDKFBYR0lfSFdfREVWSUNFX0lORk8sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9PcGVuQ1JUQyhQWEdJX0hXX0RFVklDRV9JTkZPLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfR2V0UkFNREFDMkRBVEEoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1VuTG9ja0NSVDIoUFhHSV9IV19ERVZJQ0VfSU5GTywgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX0xvY2tDUlQyKFBYR0lfSFdfREVWSUNFX0lORk8sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSU5ld19FbmFibGVDUlQyKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSU5ld19MQ0RfV2FpdF9UaW1lKFVDSEFSIERlbGF5VGltZSwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX0xvbmdXYWl0KFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9TZXRDUlQxT2Zmc2V0KCBVU0hPUlQgTW9kZU5vICwgVVNIT1JUIE1vZGVJZEluZGV4ICwgVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCAsIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKTsKLXZvaWQgICAgIFhHSV9HZXRMQ0RWQ0xLUHRyKFVDSEFSKiBkaV8wLFVDSEFSICpkaV8xLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci1VQ0hBUiAgICBYR0lfR2V0VkNMS1B0cihVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfR2V0VkNMS0xlbihVQ0hBUiB0ZW1wYWwsVUNIQVIqIGRpXzAsVUNIQVIqIGRpXzEsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLVVTSE9SVCAgIFhHSV9HZXRMQ0RDYXBQdHIoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotVVNIT1JUICAgWEdJX0dldExDRENhcFB0cjEoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotWEdJMzAxQ19UYXA0VGltaW5nU3RydWN0KiBYR0lfR2V0VGFwNFB0cihVU0hPUlQgdGVtcGN4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2V0WEcyMUZQQml0cyhQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2V0WEcyN0ZQQml0cyhQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci1VQ0hBUiAgICBYR0lfWEcyMUdldFBTQ1ZhbHVlKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLVVDSEFSICAgIFhHSV9YRzI3R2V0UFNDVmFsdWUoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1hHMjFCTFNpZ25hbFZERChVU0hPUlQgdGVtcGJoLFVTSE9SVCB0ZW1wYmwsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9YRzI3QkxTaWduYWxWREQoVVNIT1JUIHRlbXBiaCxVU0hPUlQgdGVtcGJsLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfWEcyMVNldFBhbmVsRGVsYXkoVVNIT1JUIHRlbXBibCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotQk9PTEVBTiAgWEdJX1hHMjFDaGVja0xWRFNNb2RlKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApOwotdm9pZCAgICAgWEdJX1NldFhHMjFMVkRTUGFyYShVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKTsKLXZvaWQgICAgIFhHSV9TZXRYRzI3TFZEU1BhcmEoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICk7Ci1VQ0hBUiAgICBYR0lfU2V0RGVmYXVsdFZDTEsoIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICk7Cit2b2lkICAgICBYR0lfTG9hZERBQyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1dyaXRlREFDKHVuc2lnbmVkIHNob3J0IGRsLCB1bnNpZ25lZCBzaG9ydCBhaCwgdW5zaWduZWQgc2hvcnQgYWwsIHVuc2lnbmVkIHNob3J0IGRoLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOworLyp2b2lkICAgICBYR0lfQ2xlYXJCdWZmZXIoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHVuc2lnbmVkIHNob3J0IE1vZGVObywgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsqLwordm9pZCAgICAgWEdJX1NldExDREFHcm91cCh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9HZXRMVkRTUmVzSW5mbyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfR2V0TFZEU0RhdGEodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX01vZENSVDFSZWdzKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCQkgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LAorCQkJIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2V0TFZEU1JlZ3ModW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1VwZGF0ZU1vZGVJbmZvKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX0dldFZHQVR5cGUoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfR2V0VkJUeXBlKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfR2V0VkJJbmZvKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX0dldFRWSW5mbyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1NldENSVDJFQ0xLKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIEluaXRUbzMzMFBvaW50ZXIodW5zaWduZWQgY2hhciwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9HZXRMQ0RTeW5jKHVuc2lnbmVkIHNob3J0ICpIU3luY1dpZHRoLCB1bnNpZ25lZCBzaG9ydCAqVlN5bmNXaWR0aCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9EaXNhYmxlQnJpZGdlKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX0VuYWJsZUJyaWRnZShzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRDUlQyVkNMSyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfT0VNMzEwU2V0dGluZyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1NldERlbGF5Q29tcChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1NldExDRENhcChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1NldExDRENhcF9BKHVuc2lnbmVkIHNob3J0IHRlbXBjeCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRMQ0RDYXBfQih1bnNpZ25lZCBzaG9ydCB0ZW1wY3gsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBTZXRTcGVjdHJ1bShzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1NldEFudGlGbGlja2VyKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2V0RWRnZUVuaGFuY2UodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRQaGFzZUluY3Ioc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRZRmlsdGVyKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfR2V0VFZQdHJJbmRleDIodW5zaWduZWQgc2hvcnQgKnRlbXBieCwgdW5zaWduZWQgY2hhciogdGVtcGNsLAorCQkJICAgIHVuc2lnbmVkIGNoYXIgKnRlbXBjaCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3Vuc2lnbmVkIHNob3J0ICAgWEdJX0dldFRWUHRySW5kZXgoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRDUlQyTW9kZVJlZ3ModW5zaWduZWQgc2hvcnQgTW9kZU5vLCBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICosIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfQ2xvc2VDUlRDKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9PcGVuQ1JUQyhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICosIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfR2V0UkFNREFDMkRBVEEodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1VuTG9ja0NSVDIoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX0xvY2tDUlQyKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSU5ld19FbmFibGVDUlQyKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lOZXdfTENEX1dhaXRfVGltZSh1bnNpZ25lZCBjaGFyIERlbGF5VGltZSwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9Mb25nV2FpdChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1NldENSVDFPZmZzZXQodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9HZXRMQ0RWQ0xLUHRyKHVuc2lnbmVkIGNoYXIgKmRpXzAsIHVuc2lnbmVkIGNoYXIgKmRpXzEsCisJCQkgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordW5zaWduZWQgY2hhciAgICBYR0lfR2V0VkNMS1B0cih1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCisJCQkJdW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkJCXVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJCXN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfR2V0VkNMS0xlbih1bnNpZ25lZCBjaGFyIHRlbXBhbCwgdW5zaWduZWQgY2hhciAqZGlfMCwKKwkJCXVuc2lnbmVkIGNoYXIgKmRpXzEsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit1bnNpZ25lZCBzaG9ydCAgIFhHSV9HZXRMQ0RDYXBQdHIoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3Vuc2lnbmVkIHNob3J0ICAgWEdJX0dldExDRENhcFB0cjEoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3N0cnVjdCBYR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3QgKlhHSV9HZXRUYXA0UHRyKHVuc2lnbmVkIHNob3J0IHRlbXBjeCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRYRzIxRlBCaXRzKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2V0WEcyN0ZQQml0cyhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordW5zaWduZWQgY2hhciAgICBYR0lfWEcyMUdldFBTQ1ZhbHVlKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit1bnNpZ25lZCBjaGFyICAgIFhHSV9YRzI3R2V0UFNDVmFsdWUoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9YRzIxQkxTaWduYWxWREQodW5zaWduZWQgc2hvcnQgdGVtcGJoLCB1bnNpZ25lZCBzaG9ydCB0ZW1wYmwsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfWEcyN0JMU2lnbmFsVkREKHVuc2lnbmVkIHNob3J0IHRlbXBiaCwgdW5zaWduZWQgc2hvcnQgdGVtcGJsLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1hHMjFTZXRQYW5lbERlbGF5KHVuc2lnbmVkIHNob3J0IHRlbXBibCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3Vuc2lnbmVkIGNoYXIgIFhHSV9YRzIxQ2hlY2tMVkRTTW9kZSh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1NldFhHMjFMVkRTUGFyYSh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1NldFhHMjdMVkRTUGFyYSh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordW5zaWduZWQgY2hhciAgWEdJX1NldERlZmF1bHRWQ0xLKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7CiAKLWV4dGVybiAgIHZvaWQgCSAgUmVhZFZCSU9TVGFibERhdGEoIFVDSEFSIENoaXBUeXBlICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotI2lmZGVmIFdJTjIwMDAKLS8qIFtCaWxseV0gMjAwNy8wNS8xNyBGb3IgQ0g3MDA3ICovCi1leHRlcm4gIFVDSEFSIENINzAwN1RWUmVnX1VOVFNDW11bOF0sQ0g3MDA3VFZSZWdfT05UU0NbXVs4XSxDSDcwMDdUVlJlZ19VUEFMW11bOF0sQ0g3MDA3VFZSZWdfT1BBTFtdWzhdOwotZXh0ZXJuICBVQ0hBUiBDSDcwMDdUVkNSVDFVTlRTQ19IW11bMTBdLENINzAwN1RWQ1JUMU9OVFNDX0hbXVsxMF0sQ0g3MDA3VFZDUlQxVVBBTF9IW11bMTBdLENINzAwN1RWQ1JUMU9QQUxfSFtdWzEwXSA7Ci1leHRlcm4gIFVDSEFSIENINzAwN1RWQ1JUMVVOVFNDX1ZbXVsxMF0sQ0g3MDA3VFZDUlQxT05UU0NfVltdWzEwXSxDSDcwMDdUVkNSVDFVUEFMX1ZbXVsxMF0sQ0g3MDA3VFZDUlQxT1BBTF9WW11bMTBdIDsKLWV4dGVybiAgVUNIQVIgWEdJNzAwN19DSFRWVkNMS1VOVFNDW10sWEdJNzAwN19DSFRWVkNMS09OVFNDW10sWEdJNzAwN19DSFRWVkNMS1VQQUxbXSxYR0k3MDA3X0NIVFZWQ0xLT1BBTFtdOworZXh0ZXJuIHZvaWQgUmVhZFZCSU9TVGFibERhdGEodW5zaWduZWQgY2hhciBDaGlwVHlwZSwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKIAotZXh0ZXJuICBCT09MRUFOIFhHSV9YRzIxQ2hlY2tDSDcwMDdUVk1vZGUoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkgOwotZXh0ZXJuICB2b2lkIFNldENINzAwN1JlZ3MoUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgVVNIT1JUIE1vZGVObywgVVNIT1JUIE1vZGVJZEluZGV4LCBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBQVkJfREVWSUNFX0lORk8gIHBWQkluZm8gKSA7Ci1leHRlcm4gIFZQX1NUQVRVUyBUdXJuT25DSDcwMDcoUEhXX0RFVklDRV9FWFRFTlNJT04gcEhXREUpIDsKLWV4dGVybiAgVlBfU1RBVFVTIFR1cm5PZmZDSDcwMDcoUEhXX0RFVklDRV9FWFRFTlNJT04gcEhXREUpIDsKLWV4dGVybiAgQk9PTEVBTiBJc0NINzAwN1RWTW9kZShQVkJfREVWSUNFX0lORk8gcFZCSW5mbykgOwotI2VuZGlmCi0KLS8qIFVTSE9SVCBYR0lOZXdfZmxhZ19jbGVhcmJ1ZmZlcjsgMDogbm8gY2xlYXIgZnJhbWUgYnVmZmVyIDE6Y2xlYXIgZnJhbWUgYnVmZmVyICovCisvKiB1bnNpZ25lZCBzaG9ydCBYR0lOZXdfZmxhZ19jbGVhcmJ1ZmZlcjsgMDogbm8gY2xlYXIgZnJhbWUgYnVmZmVyIDE6Y2xlYXIgZnJhbWUgYnVmZmVyICovCiAKIAordW5zaWduZWQgc2hvcnQgWEdJTmV3X01EQV9EQUNbXSA9IHsKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MTUsIDB4MTUsIDB4MTUsIDB4MTUsIDB4MTUsIDB4MTUsIDB4MTUsIDB4MTUsCisJMHgxNSwgMHgxNSwgMHgxNSwgMHgxNSwgMHgxNSwgMHgxNSwgMHgxNSwgMHgxNSwKKwkweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgxNSwgMHgxNSwgMHgxNSwgMHgxNSwgMHgxNSwgMHgxNSwgMHgxNSwgMHgxNSwKKwkweDE1LCAweDE1LCAweDE1LCAweDE1LCAweDE1LCAweDE1LCAweDE1LCAweDE1LAorCTB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0Z9OwogCit1bnNpZ25lZCBzaG9ydCBYR0lOZXdfQ0dBX0RBQ1tdID0geworCTB4MDAsIDB4MTAsIDB4MDQsIDB4MTQsIDB4MDEsIDB4MTEsIDB4MDksIDB4MTUsCisJMHgwMCwgMHgxMCwgMHgwNCwgMHgxNCwgMHgwMSwgMHgxMSwgMHgwOSwgMHgxNSwKKwkweDJBLCAweDNBLCAweDJFLCAweDNFLCAweDJCLCAweDNCLCAweDJGLCAweDNGLAorCTB4MkEsIDB4M0EsIDB4MkUsIDB4M0UsIDB4MkIsIDB4M0IsIDB4MkYsIDB4M0YsCisJMHgwMCwgMHgxMCwgMHgwNCwgMHgxNCwgMHgwMSwgMHgxMSwgMHgwOSwgMHgxNSwKKwkweDAwLCAweDEwLCAweDA0LCAweDE0LCAweDAxLCAweDExLCAweDA5LCAweDE1LAorCTB4MkEsIDB4M0EsIDB4MkUsIDB4M0UsIDB4MkIsIDB4M0IsIDB4MkYsIDB4M0YsCisJMHgyQSwgMHgzQSwgMHgyRSwgMHgzRSwgMHgyQiwgMHgzQiwgMHgyRiwgMHgzRn07CiAKK3Vuc2lnbmVkIHNob3J0IFhHSU5ld19FR0FfREFDW10gPSB7CisJMHgwMCwgMHgxMCwgMHgwNCwgMHgxNCwgMHgwMSwgMHgxMSwgMHgwNSwgMHgxNSwKKwkweDIwLCAweDMwLCAweDI0LCAweDM0LCAweDIxLCAweDMxLCAweDI1LCAweDM1LAorCTB4MDgsIDB4MTgsIDB4MEMsIDB4MUMsIDB4MDksIDB4MTksIDB4MEQsIDB4MUQsCisJMHgyOCwgMHgzOCwgMHgyQywgMHgzQywgMHgyOSwgMHgzOSwgMHgyRCwgMHgzRCwKKwkweDAyLCAweDEyLCAweDA2LCAweDE2LCAweDAzLCAweDEzLCAweDA3LCAweDE3LAorCTB4MjIsIDB4MzIsIDB4MjYsIDB4MzYsIDB4MjMsIDB4MzMsIDB4MjcsIDB4MzcsCisJMHgwQSwgMHgxQSwgMHgwRSwgMHgxRSwgMHgwQiwgMHgxQiwgMHgwRiwgMHgxRiwKKwkweDJBLCAweDNBLCAweDJFLCAweDNFLCAweDJCLCAweDNCLCAweDJGLCAweDNGfTsKIAotVVNIT1JUIFhHSU5ld19NREFfREFDW109ezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSAgICAgICAgICAgICAgIDB4MTUsMHgxNSwweDE1LDB4MTUsMHgxNSwweDE1LDB4MTUsMHgxNSwKLSAgICAgICAgICAgICAgIDB4MTUsMHgxNSwweDE1LDB4MTUsMHgxNSwweDE1LDB4MTUsMHgxNSwKLSAgICAgICAgICAgICAgIDB4M0YsMHgzRiwweDNGLDB4M0YsMHgzRiwweDNGLDB4M0YsMHgzRiwKLSAgICAgICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSAgICAgICAgICAgICAgIDB4MTUsMHgxNSwweDE1LDB4MTUsMHgxNSwweDE1LDB4MTUsMHgxNSwKLSAgICAgICAgICAgICAgIDB4MTUsMHgxNSwweDE1LDB4MTUsMHgxNSwweDE1LDB4MTUsMHgxNSwKLSAgICAgICAgICAgICAgIDB4M0YsMHgzRiwweDNGLDB4M0YsMHgzRiwweDNGLDB4M0YsMHgzRn07Ci0KLVVTSE9SVCBYR0lOZXdfQ0dBX0RBQ1tdPXsweDAwLDB4MTAsMHgwNCwweDE0LDB4MDEsMHgxMSwweDA5LDB4MTUsCi0gICAgICAgICAgICAgICAweDAwLDB4MTAsMHgwNCwweDE0LDB4MDEsMHgxMSwweDA5LDB4MTUsCi0gICAgICAgICAgICAgICAweDJBLDB4M0EsMHgyRSwweDNFLDB4MkIsMHgzQiwweDJGLDB4M0YsCi0gICAgICAgICAgICAgICAweDJBLDB4M0EsMHgyRSwweDNFLDB4MkIsMHgzQiwweDJGLDB4M0YsCi0gICAgICAgICAgICAgICAweDAwLDB4MTAsMHgwNCwweDE0LDB4MDEsMHgxMSwweDA5LDB4MTUsCi0gICAgICAgICAgICAgICAweDAwLDB4MTAsMHgwNCwweDE0LDB4MDEsMHgxMSwweDA5LDB4MTUsCi0gICAgICAgICAgICAgICAweDJBLDB4M0EsMHgyRSwweDNFLDB4MkIsMHgzQiwweDJGLDB4M0YsCi0gICAgICAgICAgICAgICAweDJBLDB4M0EsMHgyRSwweDNFLDB4MkIsMHgzQiwweDJGLDB4M0Z9OwotCi1VU0hPUlQgWEdJTmV3X0VHQV9EQUNbXT17MHgwMCwweDEwLDB4MDQsMHgxNCwweDAxLDB4MTEsMHgwNSwweDE1LAotICAgICAgICAgICAgICAgMHgyMCwweDMwLDB4MjQsMHgzNCwweDIxLDB4MzEsMHgyNSwweDM1LAotICAgICAgICAgICAgICAgMHgwOCwweDE4LDB4MEMsMHgxQywweDA5LDB4MTksMHgwRCwweDFELAotICAgICAgICAgICAgICAgMHgyOCwweDM4LDB4MkMsMHgzQywweDI5LDB4MzksMHgyRCwweDNELAotICAgICAgICAgICAgICAgMHgwMiwweDEyLDB4MDYsMHgxNiwweDAzLDB4MTMsMHgwNywweDE3LAotICAgICAgICAgICAgICAgMHgyMiwweDMyLDB4MjYsMHgzNiwweDIzLDB4MzMsMHgyNywweDM3LAotICAgICAgICAgICAgICAgMHgwQSwweDFBLDB4MEUsMHgxRSwweDBCLDB4MUIsMHgwRiwweDFGLAotICAgICAgICAgICAgICAgMHgyQSwweDNBLDB4MkUsMHgzRSwweDJCLDB4M0IsMHgyRiwweDNGfTsKLQotVVNIT1JUIFhHSU5ld19WR0FfREFDW109ezB4MDAsMHgxMCwweDA0LDB4MTQsMHgwMSwweDExLDB4MDksMHgxNSwKLSAgICAgICAgICAgICAgIDB4MkEsMHgzQSwweDJFLDB4M0UsMHgyQiwweDNCLDB4MkYsMHgzRiwKLSAgICAgICAgICAgICAgIDB4MDAsMHgwNSwweDA4LDB4MEIsMHgwRSwweDExLDB4MTQsMHgxOCwKLSAgICAgICAgICAgICAgIDB4MUMsMHgyMCwweDI0LDB4MjgsMHgyRCwweDMyLDB4MzgsMHgzRiwKLQotICAgICAgICAgICAgICAgMHgwMCwweDEwLDB4MUYsMHgyRiwweDNGLDB4MUYsMHgyNywweDJGLAotICAgICAgICAgICAgICAgMHgzNywweDNGLDB4MkQsMHgzMSwweDM2LDB4M0EsMHgzRiwweDAwLAotICAgICAgICAgICAgICAgMHgwNywweDBFLDB4MTUsMHgxQywweDBFLDB4MTEsMHgxNSwweDE4LAotICAgICAgICAgICAgICAgMHgxQywweDE0LDB4MTYsMHgxOCwweDFBLDB4MUMsMHgwMCwweDA0LAotICAgICAgICAgICAgICAgMHgwOCwweDBDLDB4MTAsMHgwOCwweDBBLDB4MEMsMHgwRSwweDEwLAotICAgICAgICAgICAgICAgMHgwQiwweDBDLDB4MEQsMHgwRiwweDEwfTsKK3Vuc2lnbmVkIHNob3J0IFhHSU5ld19WR0FfREFDW10gPSB7CisJMHgwMCwgMHgxMCwgMHgwNCwgMHgxNCwgMHgwMSwgMHgxMSwgMHgwOSwgMHgxNSwKKwkweDJBLCAweDNBLCAweDJFLCAweDNFLCAweDJCLCAweDNCLCAweDJGLCAweDNGLAorCTB4MDAsIDB4MDUsIDB4MDgsIDB4MEIsIDB4MEUsIDB4MTEsIDB4MTQsIDB4MTgsCisJMHgxQywgMHgyMCwgMHgyNCwgMHgyOCwgMHgyRCwgMHgzMiwgMHgzOCwgMHgzRiwKKwkweDAwLCAweDEwLCAweDFGLCAweDJGLCAweDNGLCAweDFGLCAweDI3LCAweDJGLAorCTB4MzcsIDB4M0YsIDB4MkQsIDB4MzEsIDB4MzYsIDB4M0EsIDB4M0YsIDB4MDAsCisJMHgwNywgMHgwRSwgMHgxNSwgMHgxQywgMHgwRSwgMHgxMSwgMHgxNSwgMHgxOCwKKwkweDFDLCAweDE0LCAweDE2LCAweDE4LCAweDFBLCAweDFDLCAweDAwLCAweDA0LAorCTB4MDgsIDB4MEMsIDB4MTAsIDB4MDgsIDB4MEEsIDB4MEMsIDB4MEUsIDB4MTAsCisJMHgwQiwgMHgwQywgMHgwRCwgMHgwRiwgMHgxMH07CiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0yNTAsMzUgKzI0MCwzNSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBJbml0VG8zMzBQb2ludGVyKCBVQ0hBUiBDaGlwVHlwZSAsUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIEluaXRUbzMzMFBvaW50ZXIodW5zaWduZWQgY2hhciBDaGlwVHlwZSwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIHBWQkluZm8tPlNNb2RlSURUYWJsZSA9IChYR0lfU3RTdHJ1Y3QgKikgWEdJMzMwX1NNb2RlSURUYWJsZSA7Ci0gICAgcFZCSW5mby0+U3RhbmRUYWJsZSA9IChYR0lfU3RhbmRUYWJsZVN0cnVjdCAqKSBYR0kzMzBfU3RhbmRUYWJsZSA7Ci0gICAgcFZCSW5mby0+RU1vZGVJRFRhYmxlID0gKFhHSV9FeHRTdHJ1Y3QgKikgWEdJMzMwX0VNb2RlSURUYWJsZSA7Ci0gICAgcFZCSW5mby0+UmVmSW5kZXggPSAoWEdJX0V4dDJTdHJ1Y3QgKikgWEdJMzMwX1JlZkluZGV4IDsKLSAgICBwVkJJbmZvLT5YR0lORVdVQl9DUlQxVGFibGUgPSAoWEdJX0NSVDFUYWJsZVN0cnVjdCAqKSBYR0lfQ1JUMVRhYmxlIDsKKyAgICBwVkJJbmZvLT5TTW9kZUlEVGFibGUgPSAoc3RydWN0IFhHSV9TdFN0cnVjdCAqKSBYR0kzMzBfU01vZGVJRFRhYmxlIDsKKyAgICBwVkJJbmZvLT5TdGFuZFRhYmxlID0gKHN0cnVjdCBYR0lfU3RhbmRUYWJsZVN0cnVjdCAqKSBYR0kzMzBfU3RhbmRUYWJsZSA7CisgICAgcFZCSW5mby0+RU1vZGVJRFRhYmxlID0gKHN0cnVjdCBYR0lfRXh0U3RydWN0ICopIFhHSTMzMF9FTW9kZUlEVGFibGUgOworICAgIHBWQkluZm8tPlJlZkluZGV4ID0gKHN0cnVjdCBYR0lfRXh0MlN0cnVjdCAqKSBYR0kzMzBfUmVmSW5kZXggOworICAgIHBWQkluZm8tPlhHSU5FV1VCX0NSVDFUYWJsZSA9IChzdHJ1Y3QgWEdJX0NSVDFUYWJsZVN0cnVjdCAqKSBYR0lfQ1JUMVRhYmxlIDsKIAogICAgIC8qIGFkZCBmb3IgbmV3IFVOSVZHQUJJT1MgKi8KLSAgICAvKiBYR0lOZXdfVUJMQ0REYXRhVGFibGUgPSAoWEdJX0xDRERhdGFUYWJsU3RydWN0ICopIFhHSV9MQ0REYXRhVGFibGUgOyAqLworICAgIC8qIFhHSU5ld19VQkxDRERhdGFUYWJsZSA9IChzdHJ1Y3QgWEdJX0xDRERhdGFUYWJsU3RydWN0ICopIFhHSV9MQ0REYXRhVGFibGUgOyAqLwogICAgIC8qIFhHSU5ld19VQlRWRGF0YVRhYmxlID0gKFhHSV9UVkRhdGFUYWJsU3RydWN0ICopIFhHSV9UVkRhdGFUYWJsZSA7ICovCiAKIAogICAgIGlmICggQ2hpcFR5cGUgPj0gWEc0MCApCiAgICAgewotICAgICAgICBwVkJJbmZvLT5NQ0xLRGF0YSA9IChYR0lfTUNMS0RhdGFTdHJ1Y3QgKikgWEdJMzQwTmV3X01DTEtEYXRhIDsKLSAgICAgICAgcFZCSW5mby0+RUNMS0RhdGEgPSAoWEdJX0VDTEtEYXRhU3RydWN0ICopIFhHSTM0MF9FQ0xLRGF0YSA7CisJcFZCSW5mby0+TUNMS0RhdGEgPSAoc3RydWN0IFhHSV9NQ0xLRGF0YVN0cnVjdCAqKSBYR0kzNDBOZXdfTUNMS0RhdGE7CisJcFZCSW5mby0+RUNMS0RhdGEgPSAoc3RydWN0IFhHSV9FQ0xLRGF0YVN0cnVjdCAqKSBYR0kzNDBfRUNMS0RhdGE7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHBWQkluZm8tPk1DTEtEYXRhID0gKFhHSV9NQ0xLRGF0YVN0cnVjdCAqKSBYR0kzMzBOZXdfTUNMS0RhdGEgOwotICAgICAgICBwVkJJbmZvLT5FQ0xLRGF0YSA9IChYR0lfRUNMS0RhdGFTdHJ1Y3QgKikgWEdJMzMwX0VDTEtEYXRhIDsKKwlwVkJJbmZvLT5NQ0xLRGF0YSA9IChzdHJ1Y3QgWEdJX01DTEtEYXRhU3RydWN0ICopIFhHSTMzME5ld19NQ0xLRGF0YTsKKwlwVkJJbmZvLT5FQ0xLRGF0YSA9IChzdHJ1Y3QgWEdJX0VDTEtEYXRhU3RydWN0ICopIFhHSTMzMF9FQ0xLRGF0YTsKICAgICB9CiAKLSAgICBwVkJJbmZvLT5WQ0xLRGF0YSA9IChYR0lfVkNMS0RhdGFTdHJ1Y3QgKikgWEdJX1ZDTEtEYXRhIDsKLSAgICBwVkJJbmZvLT5WQlZDTEtEYXRhID0gKFhHSV9WQlZDTEtEYXRhU3RydWN0ICopIFhHSV9WQlZDTEtEYXRhIDsKKyAgICBwVkJJbmZvLT5WQ0xLRGF0YSA9IChzdHJ1Y3QgWEdJX1ZDTEtEYXRhU3RydWN0ICopIFhHSV9WQ0xLRGF0YSA7CisgICAgcFZCSW5mby0+VkJWQ0xLRGF0YSA9IChzdHJ1Y3QgWEdJX1ZCVkNMS0RhdGFTdHJ1Y3QgKikgWEdJX1ZCVkNMS0RhdGEgOwogICAgIHBWQkluZm8tPlNjcmVlbk9mZnNldCA9IFhHSTMzMF9TY3JlZW5PZmZzZXQgOwotICAgIHBWQkluZm8tPlN0UmVzSW5mbyA9IChYR0lfU3RSZXNJbmZvU3RydWN0ICopIFhHSTMzMF9TdFJlc0luZm8gOwotICAgIHBWQkluZm8tPk1vZGVSZXNJbmZvID0gKFhHSV9Nb2RlUmVzSW5mb1N0cnVjdCAqKSBYR0kzMzBfTW9kZVJlc0luZm8gOworICAgIHBWQkluZm8tPlN0UmVzSW5mbyA9IChzdHJ1Y3QgWEdJX1N0UmVzSW5mb1N0cnVjdCAqKSBYR0kzMzBfU3RSZXNJbmZvIDsKKyAgICBwVkJJbmZvLT5Nb2RlUmVzSW5mbyA9IChzdHJ1Y3QgWEdJX01vZGVSZXNJbmZvU3RydWN0ICopIFhHSTMzMF9Nb2RlUmVzSW5mbyA7CiAKICAgICBwVkJJbmZvLT5wT3V0cHV0U2VsZWN0ID0gJlhHSTMzMF9PdXRwdXRTZWxlY3QgOwogICAgIHBWQkluZm8tPnBTb2Z0U2V0dGluZyA9ICZYR0kzMzBfU29mdFNldHRpbmcgOwpAQCAtMzQyLDkgKzMzMiw5IEBACiAgICAgcFZCSW5mby0+UmVuNzUwcEdyb3VwMyA9IFhHSTMzMF9SZW43NTBwR3JvdXAzIDsKIAogCi0gICAgcFZCSW5mby0+VGltaW5nSCA9IChYR0lfVGltaW5nSFN0cnVjdCAqKSBYR0lfVGltaW5nSCA7Ci0gICAgcFZCSW5mby0+VGltaW5nViA9IChYR0lfVGltaW5nVlN0cnVjdCAqKSBYR0lfVGltaW5nViA7Ci0gICAgcFZCSW5mby0+VXBkYXRlQ1JUMSA9IChYR0lfWEcyMUNSVDFTdHJ1Y3QgKikgWEdJX1VwZGF0ZUNSVDFUYWJsZSA7CisgICAgcFZCSW5mby0+VGltaW5nSCA9IChzdHJ1Y3QgWEdJX1RpbWluZ0hTdHJ1Y3QgKikgWEdJX1RpbWluZ0ggOworICAgIHBWQkluZm8tPlRpbWluZ1YgPSAoc3RydWN0IFhHSV9UaW1pbmdWU3RydWN0ICopIFhHSV9UaW1pbmdWIDsKKyAgICBwVkJJbmZvLT5VcGRhdGVDUlQxID0gKHN0cnVjdCBYR0lfWEcyMUNSVDFTdHJ1Y3QgKikgWEdJX1VwZGF0ZUNSVDFUYWJsZSA7CiAKICAgICBwVkJJbmZvLT5DSFRWVkNMS1VOVFNDID0gWEdJMzMwX0NIVFZWQ0xLVU5UU0MgOwogICAgIHBWQkluZm8tPkNIVFZWQ0xLT05UU0MgPSBYR0kzMzBfQ0hUVlZDTEtPTlRTQyA7CkBAIC0zNzEsNyArMzYxLDcgQEAKIAogICAgIGlmICggQ2hpcFR5cGUgPT0gWEcyNyApCiAgICAgewotICAgICAgICBwVkJJbmZvLT5NQ0xLRGF0YSA9IChYR0lfTUNMS0RhdGFTdHJ1Y3QgKikgWEdJMjdOZXdfTUNMS0RhdGEgOworCXBWQkluZm8tPk1DTEtEYXRhID0gKHN0cnVjdCBYR0lfTUNMS0RhdGFTdHJ1Y3QgKikgWEdJMjdOZXdfTUNMS0RhdGE7CiAgICAgICAgIHBWQkluZm8tPkNSNDAgPSBYR0kyN19jcjQxIDsKICAgICAJcFZCSW5mby0+cFhHSU5ld19DUjk3ID0gJlhHMjdfQ1I5NyA7CiAgICAgCXBWQkluZm8tPnBTUjM2ID0gJlhHMjdfU1IzNiA7CkBAIC00MDUsMTQgKzM5NSwxNSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotQk9PTEVBTiBYR0lTZXRNb2RlTmV3KCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICwgVVNIT1JUIE1vZGVObyApCit1bnNpZ25lZCBjaGFyIFhHSVNldE1vZGVOZXcoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCQkgICAgdW5zaWduZWQgc2hvcnQgTW9kZU5vKQogewotICAgIFVTSE9SVCBNb2RlSWRJbmRleCA7Ci0gICAgICAgIC8qIFBVQ0hBUiBwVkJJbmZvLT5GQkFkZHIgPSBId0RldmljZUV4dGVuc2lvbi0+cGpWaWRlb01lbW9yeUFkZHJlc3MgOyAqLwotICAgIFZCX0RFVklDRV9JTkZPIFZCSU5GOwotICAgIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvID0gJlZCSU5GOworICAgIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4IDsKKyAgICAgICAgLyogdW5zaWduZWQgY2hhciAqcFZCSW5mby0+RkJBZGRyID0gSHdEZXZpY2VFeHRlbnNpb24tPnBqVmlkZW9NZW1vcnlBZGRyZXNzIDsgKi8KKyAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gVkJJTkY7CisgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvID0gJlZCSU5GOwogICAgIHBWQkluZm8tPlJPTUFkZHIgPSBId0RldmljZUV4dGVuc2lvbi0+cGpWaXJ0dWFsUm9tQmFzZSA7Ci0gICAgcFZCSW5mby0+QmFzZUFkZHIgPSAoVUxPTkcpSHdEZXZpY2VFeHRlbnNpb24tPnBqSU9BZGRyZXNzIDsKKyAgICBwVkJJbmZvLT5CYXNlQWRkciA9ICh1bnNpZ25lZCBsb25nKUh3RGV2aWNlRXh0ZW5zaW9uLT5waklPQWRkcmVzcyA7CiAgICAgcFZCSW5mby0+SUZfREVGX0xWRFMgPSAwIDsKICAgICBwVkJJbmZvLT5JRl9ERUZfQ0g3MDA1ID0gMCA7CiAgICAgcFZCSW5mby0+SUZfREVGX0xDREEgPSAxIDsKQEAgLTQ4NSw5ICs0NzYsNiBAQAogICAgIFhHSV9HZXRWQlR5cGUoIHBWQkluZm8gKSA7CiAKICAgICBJbml0VG8zMzBQb2ludGVyKCBId0RldmljZUV4dGVuc2lvbi0+akNoaXBUeXBlLCBwVkJJbmZvICkgOwotI2lmZGVmIFdJTjIwMDAKLSAgICBSZWFkVkJJT1NUYWJsRGF0YSggSHdEZXZpY2VFeHRlbnNpb24tPmpDaGlwVHlwZSAsIHBWQkluZm8pIDsKLSNlbmRpZgogICAgIGlmICggTW9kZU5vICYgMHg4MCApCiAgICAgewogICAgICAgICBNb2RlTm8gPSBNb2RlTm8gJiAweDdGIDsKQEAgLTU2MCwzMCArNTQ4LDkgQEAKICAgICB9CS8qICFYRzIwICovCiAgICAgZWxzZQogICAgIHsKLSNpZmRlZiBXSU4yMDAwCi0gICAgICAgIGlmICggcFZCSW5mby0+SUZfREVGX0NINzAwNyA9PSAxICkKLSAgICAgICAgewotCi0gICAgICAgICAgICBWaWRlb0RlYnVnUHJpbnQoKDAsICJYR0lTZXRNb2RlTmV3OiBwVkJJZm8tPklGX0RFRl9DSDcwMDc9PTFcbiIpKTsKLSAgICAgICAgICAgIHBWQkluZm8tPlZCVHlwZSA9IFZCX0NINzAwNyA7Ci0gICAgICAgICAgICBYR0lfR2V0VkJJbmZvKE1vZGVObyAsIE1vZGVJZEluZGV4ICwgSHdEZXZpY2VFeHRlbnNpb24sIHBWQkluZm8gKSA7Ci0gICAgICAgICAgICBYR0lfR2V0VFZJbmZvKE1vZGVObyAsIE1vZGVJZEluZGV4LCBwVkJJbmZvICkgOwotICAgICAgICAgICAgWEdJX0dldExDREluZm8oTW9kZU5vICwgTW9kZUlkSW5kZXgsIHBWQkluZm8gKSA7Ci0gICAgICAgICAgICBpZiggIShYR0lfWEcyMUNoZWNrQ0g3MDA3VFZNb2RlKE1vZGVObywgTW9kZUlkSW5kZXgsIHBWQkluZm8gKSkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZgotCi0KLSAgICAgICAgaWYgKCBwVkJJbmZvLT5JRl9ERUZfTFZEUyA9PSAxICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCAhWEdJX1hHMjFDaGVja0xWRFNNb2RlKE1vZGVObyAsIE1vZGVJZEluZGV4LCBwVkJJbmZvKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCSAgICBpZiAocFZCSW5mby0+SUZfREVGX0xWRFMgPT0gMSkKKwkJICAgIGlmICghWEdJX1hHMjFDaGVja0xWRFNNb2RlKE1vZGVObyAsIE1vZGVJZEluZGV4LCBwVkJJbmZvKSkKKwkJCSAgICByZXR1cm4gMDsKIAogICAgICAgICBpZiAoIE1vZGVObyA8PSAweDEzICkKICAgICAgICAgewpAQCAtNjQyLDcgKzYwOSw3IEBACiAgICAgWEdJX0xvY2tDUlQyKCBId0RldmljZUV4dGVuc2lvbiwgcFZCSW5mbyApIDsKIH0KIAotICAgIHJldHVybiggVFJVRSApIDsKKyAgICByZXR1cm4gMTsKIH0KIAogCkBAIC02NTIsMTQgKzYxOSwxNiBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2V0Q1JUMUdyb3VwKCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICwgVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfU2V0Q1JUMUdyb3VwKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkgICAgICB1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCSAgICAgIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIFN0YW5kVGFibGVJbmRleCAsCisgICAgdW5zaWduZWQgc2hvcnQgU3RhbmRUYWJsZUluZGV4ICwKICAgICAgICAgICAgUmVmcmVzaFJhdGVUYWJsZUluZGV4ICwKICAgICAgICAgICAgYjNDQyAsCiAgICAgICAgICAgIHRlbXAgOwogCi0gICAgVVNIT1JUIFhHSU5ld19QM2NjID0gIHBWQkluZm8tPlAzY2M7CisgICAgdW5zaWduZWQgc2hvcnQgWEdJTmV3X1AzY2MgPSAgcFZCSW5mby0+UDNjYzsKIAogICAgIC8qIFhHSU5ld19DUlQxTW9kZSA9IE1vZGVObyA7IC8vIFNhdmVNb2RlSUQgKi8KICAgICBTdGFuZFRhYmxlSW5kZXggPSBYR0lfR2V0TW9kZVB0ciggTW9kZU5vICwgTW9kZUlkSW5kZXgsIHBWQkluZm8gKSA7CkBAIC03MTAsMTQgKzY3OSwxNCBAQAogICAgIAl7CiAgICAgCSAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MkIgLCAweDRFKSA7CiAgICAgCSAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MkMgLCAweEU5KSA7Ci0gICAgCSAgICBiM0NDID0oVUNIQVIpIFhHSU5ld19HZXRSZWcyKFhHSU5ld19QM2NjKSA7CisJICAgIGIzQ0MgPSAodW5zaWduZWQgY2hhcikgWEdJTmV3X0dldFJlZzIoWEdJTmV3X1AzY2MpIDsKICAgICAJICAgIFhHSU5ld19TZXRSZWczKFhHSU5ld19QM2NjICwgIChiM0NDIHw9IDB4MEMpICkgOwogICAgIAl9CiAgICAgCWVsc2UgaWYgKCAoIE1vZGVObyA9PSAweDA0KSB8ICggTW9kZU5vID09IDB4MDUpIHwgKCBNb2RlTm8gPT0gMHgwRCkgKQogICAgIAl7CiAgICAgCSAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MkIgLCAweDFCKSA7CiAgICAgCSAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MkMgLCAweEUzKSA7Ci0gICAgCSAgICBiM0NDID0gKFVDSEFSKVhHSU5ld19HZXRSZWcyKFhHSU5ld19QM2NjKSA7CisJICAgIGIzQ0MgPSAodW5zaWduZWQgY2hhcilYR0lOZXdfR2V0UmVnMihYR0lOZXdfUDNjYykgOwogICAgIAkgICAgWEdJTmV3X1NldFJlZzMoWEdJTmV3X1AzY2MgLCAgKGIzQ0MgfD0gMHgwQykgKSA7CiAgICAgCX0KICAgICB9CkBAIC03NjMsMTMgKzczMiw2IEBACiAKICAgICBYR0lfTG9hZERBQyggTW9kZU5vICwgTW9kZUlkSW5kZXgsIHBWQkluZm8gKSA7CiAgICAgLyogWEdJX0NsZWFyQnVmZmVyKCBId0RldmljZUV4dGVuc2lvbiAsIE1vZGVObywgcFZCSW5mbyApIDsgKi8KLSNpZmRlZiBXSU4yMDAwCi0gICBpZiAoIHBWQkluZm8tPklGX0RFRl9DSDcwMDcgPT0gMSApICAvKiBbQmlsbHldICAyMDA3LzA1LzE0ICAqLwotICAgewotICAgICAgIFZpZGVvRGVidWdQcmludCgoMCwgIlhHSV9TZXRDUlQxR3JvdXA6IFZCSW5mby0+SUZfREVGX0NINzAwNz09MVxuIikpOwotICAgICAgIFNldENINzAwN1JlZ3MoSHdEZXZpY2VFeHRlbnNpb24sIE1vZGVObywgTW9kZUlkSW5kZXgsIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgcFZCSW5mbyApIDsgLyogMDcvMDUvMjggKi8KLSAgIH0KLSNlbmRpZgogfQogCiAKQEAgLTc3OSw5ICs3NDEsMTAgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLVVDSEFSIFhHSV9HZXRNb2RlUHRyKCBVU0hPUlQgTW9kZU5vICwgVVNIT1JUIE1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit1bnNpZ25lZCBjaGFyIFhHSV9HZXRNb2RlUHRyKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCSAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVDSEFSIGluZGV4IDsKKyAgICB1bnNpZ25lZCBjaGFyIGluZGV4IDsKIAogICAgIGlmICggTW9kZU5vIDw9IDB4MTMgKQogICAgICAgICBpbmRleCA9IHBWQkluZm8tPlNNb2RlSURUYWJsZVsgTW9kZUlkSW5kZXggXS5TdF9TdFRhYmxlSW5kZXggOwpAQCAtODAyLDcgKzc2NSw3IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKlVDSEFSIFhHSV9TZXRCSU9TRGF0YSggVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCApCisvKnVuc2lnbmVkIGNoYXIgWEdJX1NldEJJT1NEYXRhKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgpCiB7CiAgICAgcmV0dXJuKCAwICkgOwogfQpAQCAtODE0LDcgKzc3Nyw3IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKlVDSEFSIFhHSV9DbGVhckJhbmtSZWdzKCBVU0hPUlQgTW9kZU5vICwgVVNIT1JUIE1vZGVJZEluZGV4ICkKKy8qdW5zaWduZWQgY2hhciBYR0lfQ2xlYXJCYW5rUmVncyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4KQogewogICAgIHJldHVybiggMCApIDsKIH0KQEAgLTgyNiwxMiArNzg5LDEzIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRTZXFSZWdzKCAgVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBTdGFuZFRhYmxlSW5kZXggLCBVU0hPUlQgTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1NldFNlcVJlZ3ModW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBTdGFuZFRhYmxlSW5kZXgsCisJCSAgICB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVDSEFSIHRlbXBhaCAsCisgICAgdW5zaWduZWQgY2hhciB0ZW1wYWggLAogICAgICAgICAgIFNSZGF0YSA7CiAKLSAgICBVU0hPUlQgaSAsCisgICAgdW5zaWduZWQgc2hvcnQgaSAsCiAgICAgICAgICAgIG1vZGVmbGFnIDsKIAogICAgIGlmICggTW9kZU5vIDw9IDB4MTMgKQpAQCAtODczLDkgKzgzNyw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRNaXNjUmVncyggVVNIT1JUIFN0YW5kVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfU2V0TWlzY1JlZ3ModW5zaWduZWQgc2hvcnQgU3RhbmRUYWJsZUluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVUNIQVIgTWlzY2RhdGEgOworICAgIHVuc2lnbmVkIGNoYXIgTWlzY2RhdGEgOwogCiAgICAgTWlzY2RhdGEgPSBwVkJJbmZvLT5TdGFuZFRhYmxlWyBTdGFuZFRhYmxlSW5kZXggXS5NSVNDIDsJLyogR2V0IE1pc2MgZnJvbSBmaWxlICovCiAvKgpAQCAtODk4LDEyICs4NjIsMTMgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldENSVENSZWdzKCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICwgVVNIT1JUIFN0YW5kVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfU2V0Q1JUQ1JlZ3Moc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCSAgICAgdW5zaWduZWQgc2hvcnQgU3RhbmRUYWJsZUluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVUNIQVIgQ1JUQ2RhdGEgOwotICAgIFVTSE9SVCBpIDsKKyAgICB1bnNpZ25lZCBjaGFyIENSVENkYXRhIDsKKyAgICB1bnNpZ25lZCBzaG9ydCBpIDsKIAotICAgIENSVENkYXRhID0gKCBVQ0hBUiApWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDExICkgOworICAgIENSVENkYXRhID0gKHVuc2lnbmVkIGNoYXIpWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UDNkNCwgMHgxMSk7CiAgICAgQ1JUQ2RhdGEgJj0gMHg3ZiA7CiAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDExICwgQ1JUQ2RhdGEgKSA7CQkvKiBVbmxvY2sgQ1JUQyAqLwogCkBAIC05MzMsMTEgKzg5OCwxMSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2V0QVRUUmVncyggVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBTdGFuZFRhYmxlSW5kZXggLCBVU0hPUlQgTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1NldEFUVFJlZ3ModW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBTdGFuZFRhYmxlSW5kZXgsCisJCSAgICB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVDSEFSIEFSZGF0YSA7Ci0gICAgVVNIT1JUIGkgLAotICAgICAgICAgICBtb2RlZmxhZyA7CisgICAgdW5zaWduZWQgY2hhciBBUmRhdGEgOworICAgIHVuc2lnbmVkIHNob3J0IGksIG1vZGVmbGFnOwogCiAgICAgaWYgKCBNb2RlTm8gPD0gMHgxMyApCiAgICAgICAgIG1vZGVmbGFnID0gcFZCSW5mby0+U01vZGVJRFRhYmxlWyBNb2RlSWRJbmRleCBdLlN0X01vZGVGbGFnIDsKQEAgLTk4MywxMCArOTQ4LDEwIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRHUkNSZWdzKCBVU0hPUlQgU3RhbmRUYWJsZUluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9TZXRHUkNSZWdzKHVuc2lnbmVkIHNob3J0IFN0YW5kVGFibGVJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVDSEFSIEdSZGF0YSA7Ci0gICAgVVNIT1JUIGkgOworICAgIHVuc2lnbmVkIGNoYXIgR1JkYXRhIDsKKyAgICB1bnNpZ25lZCBzaG9ydCBpIDsKIAogICAgIGZvciggaSA9IDAgOyBpIDw9IDB4MDggOyBpKysgKQogICAgIHsKQEAgLTk5Niw3ICs5NjEsNyBAQAogCiAgICAgaWYgKCBwVkJJbmZvLT5Nb2RlVHlwZSA+IE1vZGVWR0EgKQogICAgIHsKLSAgICAgICAgR1JkYXRhID0gKCBVQ0hBUiApWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzY2UgLCAweDA1ICkgOworCUdSZGF0YSA9ICh1bnNpZ25lZCBjaGFyKVhHSU5ld19HZXRSZWcxKHBWQkluZm8tPlAzY2UsIDB4MDUpOwogICAgICAgICBHUmRhdGEgJj0gMHhCRiA7CQkJCQkJLyogMjU2IGNvbG9yIGRpc2FibGUgKi8KICAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzY2UgLCAweDA1ICwgR1JkYXRhICkgOwogICAgIH0KQEAgLTEwMDksOSArOTc0LDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX0NsZWFyRXh0MVJlZ3MoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSV9DbGVhckV4dDFSZWdzKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgaSA7CisgICAgdW5zaWduZWQgc2hvcnQgaSA7CiAKICAgICBmb3IoIGkgPSAweDBBIDsgaSA8PSAweDBFIDsgaSsrICkKICAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCBpICwgMHgwMCApIDsJLyogQ2xlYXIgU1IwQS1TUjBFICovCkBAIC0xMDI0LDcgKzk4OSw3IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1VQ0hBUiBYR0lfU2V0RGVmYXVsdFZDTEsoIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3Vuc2lnbmVkIGNoYXIgWEdJX1NldERlZmF1bHRWQ0xLKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKIAogICAgIFhHSU5ld19TZXRSZWdBTkRPUiggcFZCSW5mby0+UDNjNCAsIDB4MzEgLCB+MHgzMCAsIDB4MjAgKSA7CkBAIC0xMDQ2LDEzICsxMDExLDE1IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1VU0hPUlQgWEdJX0dldFJhdGVQdHJDUlQyKCBQWEdJX0hXX0RFVklDRV9JTkZPIHBYR0lIV0RFLCBVU0hPUlQgTW9kZU5vICwgVVNIT1JUIE1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit1bnNpZ25lZCBzaG9ydCBYR0lfR2V0UmF0ZVB0ckNSVDIoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqcFhHSUhXREUsCisJCQkJICB1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCQkJICB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCQkgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBTSE9SVCAgTENEUmVmcmVzaEluZGV4W10gPSB7IDB4MDAgLCAweDAwICwgMHgwMyAsIDB4MDEgfSAsCisgICAgc2hvcnQgTENEUmVmcmVzaEluZGV4W10gPSB7IDB4MDAgLCAweDAwICwgMHgwMyAsIDB4MDEgfSAsCiAgICAgICAgICAgIExDREFSZWZyZXNoSW5kZXhbXSA9IHsgMHgwMCAsIDB4MDAgLCAweDAzICwgMHgwMSAsIDB4MDEgLCAweDAxICwgMHgwMSB9IDsKIAotICAgIFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXggLCBpICwKLSAgICAgICAgIG1vZGVmbGFnICwgaW5kZXggLCB0ZW1wIDsKKyAgICB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIGksIG1vZGVmbGFnLCBpbmRleCwgdGVtcDsKIAogICAgIGlmICggTW9kZU5vIDw9IDB4MTMgKQogICAgIHsKQEAgLTExODMsMTMgKzExNTAsMTEgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLUJPT0xFQU4gWEdJX0FqdXN0Q1JUMlJhdGUoIFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgTW9kZUlkSW5kZXggLCBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4ICwgVVNIT1JUICppLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit1bnNpZ25lZCBjaGFyIFhHSV9BanVzdENSVDJSYXRlKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCQkJdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LAorCQkJCXVuc2lnbmVkIHNob3J0ICppLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXBheCAsCi0gICAgICAgICAgIHRlbXBieCAsCi0gICAgICAgICAgIHJlc2luZm8gLAotICAgICAgICAgICBtb2RlZmxhZyAsCi0gICAgICAgICAgIGluZm9mbGFnIDsKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wYXgsIHRlbXBieCwgcmVzaW5mbywgbW9kZWZsYWcsIGluZm9mbGFnOwogCiAgICAgaWYgKCBNb2RlTm8gPD0gMHgxMyApCiAgICAgewpAQCAtMTM1OSw5ICsxMzI0LDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldFN5bmMoVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfU2V0U3luYyh1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgc3luYyAsCisgICAgdW5zaWduZWQgc2hvcnQgc3luYyAsCiAgICAgICAgICAgIHRlbXAgOwogCiAgICAgc3luYyA9IHBWQkluZm8tPlJlZkluZGV4WyBSZWZyZXNoUmF0ZVRhYmxlSW5kZXggXS5FeHRfSW5mb0ZsYWcgPj4gOCA7CS8qIGRpKzB4MDAgKi8KQEAgLTEzNzgsMTcgKzEzNDMsMTggQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldENSVDFDUlRDKCBVU0hPUlQgTW9kZU5vICwgVVNIT1JUIE1vZGVJZEluZGV4ICwgVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCxQVkJfREVWSUNFX0lORk8gcFZCSW5mbywgUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiApCit2b2lkIFhHSV9TZXRDUlQxQ1JUQyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkgICAgIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwKKwkJICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8sCisJCSAgICAgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24pCiB7Ci0gICAgVUNIQVIgIGluZGV4ICwKLSAgICAgICAgICAgZGF0YSA7Ci0KLSAgICBVU0hPUlQgaSA7CisgICAgdW5zaWduZWQgY2hhciBpbmRleCwgZGF0YTsKKyAgICB1bnNpZ25lZCBzaG9ydCBpOwogCiAgICAgaW5kZXggPSBwVkJJbmZvLT5SZWZJbmRleFsgUmVmcmVzaFJhdGVUYWJsZUluZGV4IF0uRXh0X0NSVDFDUlRDIDsJLyogR2V0IGluZGV4ICovCiAgICAgaW5kZXggPSBpbmRleCZJbmRleE1hc2sgOwogCi0gICAgZGF0YSA9KCBVQ0hBUiApWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDExICkgOworICAgIGRhdGEgPSAodW5zaWduZWQgY2hhcilYR0lOZXdfR2V0UmVnMShwVkJJbmZvLT5QM2Q0LCAweDExKTsKICAgICBkYXRhICY9IDB4N0YgOwogICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlAzZDQsMHgxMSxkYXRhKTsJCQkJLyogVW5sb2NrIENSVEMgKi8KIApAQCAtMTQxNiwxNiArMTM4MiwxNiBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2V0Q1JUMVRpbWluZ19IKCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbywgUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiApCit2b2lkIFhHSV9TZXRDUlQxVGltaW5nX0goc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvLCBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbikKIHsKLSAgICBVQ0hBUiBkYXRhICwgZGF0YTEsIHB1c2hheDsKLSAgICBVU0hPUlQgaSAsIGogOworICAgIHVuc2lnbmVkIGNoYXIgZGF0YSwgZGF0YTEsIHB1c2hheDsKKyAgICB1bnNpZ25lZCBzaG9ydCBpLCBqOwogCiAgICAgLyogWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDUxICwgMCApIDsgKi8KICAgICAvKiBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4NTYgLCAwICkgOyAqLwogICAgIC8qIFhHSU5ld19TZXRSZWdBTkRPUiggcFZCSW5mby0+UDNkNCAsMHgxMSAsIDB4N2YgLCAweDAwICkgOyAqLwogCi0gICAgZGF0YSA9ICggVUNIQVIgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHgxMSApIDsJCS8qIHVubG9jayBjcjAtNyAqLworICAgIGRhdGEgPSAodW5zaWduZWQgY2hhcilYR0lOZXdfR2V0UmVnMShwVkJJbmZvLT5QM2Q0LCAweDExKTsgLyogdW5sb2NrIGNyMC03ICovCiAgICAgZGF0YSAmPSAweDdGIDsKICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4MTEgLCBkYXRhICkgOwogCkBAIC0xNDM1LDE2ICsxNDAxLDE2IEBACiAgICAgZm9yKCBpID0gMHgwMSA7IGkgPD0gMHgwNCA7IGkrKyApCiAgICAgewogICAgICAgICBkYXRhID0gcFZCSW5mby0+VGltaW5nSFsgMCBdLmRhdGFbIGkgXSA7Ci0gICAgICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgKCBVU0hPUlQgKSggaSArIDEgKSAsIGRhdGEgKSA7CisJWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzZDQsICh1bnNpZ25lZCBzaG9ydCkoaSArIDEpLCBkYXRhKTsKICAgICB9CiAKICAgICBmb3IoIGkgPSAweDA1IDsgaSA8PSAweDA2IDsgaSsrICkKICAgICB7CiAgICAgICAgIGRhdGEgPSBwVkJJbmZvLT5UaW1pbmdIWyAwIF0uZGF0YVsgaSBdOwotICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsKCBVU0hPUlQgKSggaSArIDYgKSAsIGRhdGEgKSA7CisJWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UDNjNCwgKHVuc2lnbmVkIHNob3J0KShpICsgNiksIGRhdGEpOwogICAgIH0KIAotICAgIGogPSAoIFVDSEFSIClYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MGUgKSA7CisgICAgaiA9ICh1bnNpZ25lZCBjaGFyKVhHSU5ld19HZXRSZWcxKHBWQkluZm8tPlAzYzQsIDB4MGUpOwogICAgIGogJj0gMHgxRiA7CiAgICAgZGF0YSA9IHBWQkluZm8tPlRpbWluZ0hbIDAgXS5kYXRhWyA3IF0gOwogICAgIGRhdGEgJj0gMHhFMCA7CkBAIC0xNDUzLDE3ICsxNDE5LDE3IEBACiAKICAgICBpZiAoIEh3RGV2aWNlRXh0ZW5zaW9uLT5qQ2hpcFR5cGUgPj0gWEcyMCApCiAgICAgewotICAgIAlkYXRhID0gKCBVQ0hBUiApWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDA0ICkgOworCWRhdGEgPSAodW5zaWduZWQgY2hhcilYR0lOZXdfR2V0UmVnMShwVkJJbmZvLT5QM2Q0LCAweDA0KTsKICAgICAJZGF0YSA9IGRhdGEgLSAxIDsKICAgICAJWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDA0ICwgZGF0YSApIDsKLSAgICAJZGF0YSA9ICggVUNIQVIgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHgwNSApIDsKKwlkYXRhID0gKHVuc2lnbmVkIGNoYXIpWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UDNkNCwgMHgwNSk7CiAgICAgCWRhdGExID0gZGF0YSA7CiAgICAgCWRhdGExICY9IDB4RTAgOwogICAgIAlkYXRhICY9IDB4MUYgOwogICAgIAlpZiAoIGRhdGEgPT0gMCApCiAgICAgCXsKICAgICAJICAgIHB1c2hheCA9IGRhdGEgOwotICAgIAkgICAgZGF0YSA9ICggVUNIQVIgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgwYyApIDsKKwkgICAgZGF0YSA9ICh1bnNpZ25lZCBjaGFyKVhHSU5ld19HZXRSZWcxKHBWQkluZm8tPlAzYzQsIDB4MGMpOwogICAgIAkgICAgZGF0YSAmPSAweEZCIDsKICAgICAJICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgwYyAsIGRhdGEgKSA7CiAgICAgCSAgICBkYXRhID0gcHVzaGF4IDsKQEAgLTE0NzEsNyArMTQzNyw3IEBACiAgICAgCWRhdGEgPSBkYXRhIC0gMSA7CiAgICAgCWRhdGEgfD0gZGF0YTEgOwogICAgIAlYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4MDUgLCBkYXRhICkgOwotICAgIAlkYXRhID0gKCBVQ0hBUiApWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDBlICkgOworCWRhdGEgPSAodW5zaWduZWQgY2hhcilYR0lOZXdfR2V0UmVnMShwVkJJbmZvLT5QM2M0LCAweDBlKTsKICAgICAJZGF0YSA9IGRhdGEgPj4gNSA7CiAgICAgCWRhdGEgPSBkYXRhICsgMyA7CiAgICAgCWlmICggZGF0YSA+IDcgKQpAQCAtMTQ4OCwxMCArMTQ1NCwxMiBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2V0Q1JUMVRpbWluZ19WKCBVU0hPUlQgTW9kZUlkSW5kZXggLCBVU0hPUlQgTW9kZU5vLFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1NldENSVDFUaW1pbmdfVih1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCSB1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCQkgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVDSEFSIGRhdGEgOwotICAgIFVTSE9SVCBpICwgaiA7CisgICAgdW5zaWduZWQgY2hhciBkYXRhOworICAgIHVuc2lnbmVkIHNob3J0IGksIGo7CiAKICAgICAvKiBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4NTEgLCAwICkgOyAqLwogICAgIC8qIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHg1NiAsIDAgKSA7ICovCkBAIC0xNTAwLDIyICsxNDY4LDIyIEBACiAgICAgZm9yKCBpID0gMHgwMCA7IGkgPD0gMHgwMSA7IGkrKyApCiAgICAgewogICAgICAgICBkYXRhID0gcFZCSW5mby0+VGltaW5nVlsgMCBdLmRhdGFbIGkgXSA7Ci0gICAgICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgKCBVU0hPUlQgKSggaSArIDYgKSAsIGRhdGEgKSA7CisJWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UDNkNCwgKHVuc2lnbmVkIHNob3J0KShpICsgNiksIGRhdGEpOwogICAgIH0KIAogICAgIGZvciggaSA9IDB4MDIgOyBpIDw9IDB4MDMgOyBpKysgKQogICAgIHsKICAgICAgICAgZGF0YSA9IHBWQkluZm8tPlRpbWluZ1ZbIDAgXS5kYXRhWyBpIF0gOwotICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNkNCAsICggVVNIT1JUICkoIGkgKyAweDBlICkgLCBkYXRhICkgOworCVhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlAzZDQsICh1bnNpZ25lZCBzaG9ydCkoaSArIDB4MGUpLCBkYXRhKTsKICAgICB9CiAKICAgICBmb3IoIGkgPSAweDA0IDsgaSA8PSAweDA1IDsgaSsrICkKICAgICB7CiAgICAgICAgIGRhdGEgPSBwVkJJbmZvLT5UaW1pbmdWWyAwIF0uZGF0YVsgaSBdIDsKLSAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAoIFVTSE9SVCApKCBpICsgMHgxMSApICwgZGF0YSApIDsKKwlYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QM2Q0LCAodW5zaWduZWQgc2hvcnQpKGkgKyAweDExKSwgZGF0YSk7CiAgICAgfQogCi0gICAgaiA9ICggVUNIQVIgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgwYSApIDsKKyAgICBqID0gKHVuc2lnbmVkIGNoYXIpWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UDNjNCwgMHgwYSk7CiAgICAgaiAmPSAweEMwIDsKICAgICBkYXRhID0gcFZCSW5mby0+VGltaW5nVlsgMCBdLmRhdGFbIDYgXSA7CiAgICAgZGF0YSAmPSAweDNGIDsKQEAgLTE1MzUsNyArMTUwMyw3IEBACiAgICAgaWYgKCBpICkKICAgICAgICAgZGF0YSB8PSAweDgwIDsKIAotICAgIGogPSAoIFVDSEFSIClYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4MDkgKSA7CisgICAgaiA9ICh1bnNpZ25lZCBjaGFyKVhHSU5ld19HZXRSZWcxKHBWQkluZm8tPlAzZDQsIDB4MDkpOwogICAgIGogJj0gMHg1RiA7CiAgICAgZGF0YSB8PSBqIDsKICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4MDkgLCBkYXRhICkgOwpAQCAtMTU0OCwxMCArMTUxNiwxMiBAQAogLyogT3V0cHV0IDogRmlsbCBDUlQgSHN5bmMvVnN5bmMgdG8gU1IyRS9TUjJGL1NSMzAvU1IzMy9TUjM0L1NSM0YgKi8KIC8qIERlc2NyaXB0aW9uIDogU2V0IExDRCB0aW1pbmcgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2V0WEcyMUNSVEMoVVNIT1JUIE1vZGVObywgVVNIT1JUIE1vZGVJZEluZGV4LCBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJX1NldFhHMjFDUlRDKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCSAgICAgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LAorCQkgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgVUNIQVIgU3RhbmRUYWJsZUluZGV4LCBpbmRleCwgVGVtcGF4LCBUZW1wYngsIFRlbXBjeCwgVGVtcGR4IDsKLSAgVVNIT1JUIFRlbXAxLCBUZW1wMiwgVGVtcDMgOworICB1bnNpZ25lZCBjaGFyIFN0YW5kVGFibGVJbmRleCwgaW5kZXgsIFRlbXBheCwgVGVtcGJ4LCBUZW1wY3gsIFRlbXBkeDsKKyAgdW5zaWduZWQgc2hvcnQgVGVtcDEsIFRlbXAyLCBUZW1wMzsKIAogICBpZiAoIE1vZGVObyA8PSAweDEzICkKICAgewpAQCAtMTU4MCw3ICsxNTUwLDcgQEAKICAgICBUZW1wZHggfD0gVGVtcGN4IDsJCQkJCQkJLyogVGVtcGR4OiBWUlNbODoxXSAqLwogICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgzNCAsIFRlbXBkeCApIDsgICAgCQkvKiBTUjM0Wzc6MF06IFZSU1s4OjFdICovCiAKLSAgICBUZW1wMSA9IFRlbXBjeCA8PCAxIDsJCQkJCQkvKiBUZW1wMVs4XTogVlJTWzhdIFVDSEFSIC0+IFVTSE9SVCAqLworICAgIFRlbXAxID0gVGVtcGN4IDw8IDEgOwkJCQkJCS8qIFRlbXAxWzhdOiBWUlNbOF0gdW5zaWduZWQgY2hhciAtPiB1bnNpZ25lZCBzaG9ydCAqLwogICAgIFRlbXAxIHw9IFRlbXBieCA7CQkJCQkJCS8qIFRlbXAxWzg6MF06IFZSU1s4OjBdICovCiAgICAgVGVtcGF4ICY9IDB4ODAgOwkJCQkJCQkvKiBUZW1wYXhbN106IENSN1s3XSAqLwogICAgIFRlbXAyID0gVGVtcGF4IDw8IDIgOwkJCQkJCS8qIFRlbXAyWzldOiBWUlNbOV0gKi8KQEAgLTE1OTQsMTEgKzE1NjQsMTEgQEAKICAgICBpZiAoIFRlbXBheCA8IFRlbXAzICkJCQkJCQkvKiBWUkVbMzowXTxWUlNbMzowXSAqLwogICAgICAgVGVtcDIgfD0gMHgxMCA7CQkJCQkJCS8qIFRlbXAyOiBWUkUgKyAweDEwICovCiAgICAgVGVtcDIgJj0gMHhGRiA7CQkJCQkJCS8qIFRlbXAyWzc6MF06IFZSRVs3OjBdICovCi0gICAgVGVtcGF4ID0gKFVDSEFSKVRlbXAyIDsJCQkJCQkvKiBUZW1wYXhbNzowXTogVlJFWzc6MF0gKi8KKyAgICBUZW1wYXggPSAodW5zaWduZWQgY2hhcilUZW1wMjsJCQkJCS8qIFRlbXBheFs3OjBdOiBWUkVbNzowXSAqLwogICAgIFRlbXBheCA8PD0gMiA7CQkJCQkJCS8qIFRlbXBheCA8PCAyOiBWUkVbNTowXSAqLwogICAgIFRlbXAxICY9IDB4NjAwIDsJCQkJCQkJLyogVGVtcDFbMTA6OV06IFZSU1sxMDo5XSAqLwogICAgIFRlbXAxID4+PSA5IDsJCQkJCQkJLyogWzEwOjldLT5bMTowXSAqLwotICAgIFRlbXBieCA9IChVQ0hBUilUZW1wMSA7CQkJCQkJLyogVGVtcGJ4WzE6MF06IFZSU1sxMDo5XSAqLworICAgIFRlbXBieCA9ICh1bnNpZ25lZCBjaGFyKVRlbXAxOwkJCQkJLyogVGVtcGJ4WzE6MF06IFZSU1sxMDo5XSAqLwogICAgIFRlbXBheCB8PSBUZW1wYnggOwkJCQkJCQkvKiBWUkVbNTowXVZSU1sxMDo5XSAqLwogICAgIFRlbXBheCAmPSAweDdGIDsKICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4M0YgLCBUZW1wYXggKSA7ICAgCQkvKiBTUjNGIERbNzoyXS0+VlJFIERbMTowXS0+VlJTICovCkBAIC0xNjMyLDcgKzE2MDIsNyBAQAogICAgICAgVGVtcDIgfD0gMHg0MCA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGVtcDIgKyAweDQwICovCiAKICAgICBUZW1wMiAmPSAweEZGIDsKLSAgICBUZW1wYXggPSAoVUNIQVIpVGVtcDIgOwkJCQkJCS8qIFRlbXBheDogSFJFWzc6MF0gKi8KKyAgICBUZW1wYXggPSAodW5zaWduZWQgY2hhcilUZW1wMjsJCQkJCS8qIFRlbXBheDogSFJFWzc6MF0gKi8KICAgICBUZW1wYXggPDw9IDIgOwkJCQkJCQkvKiBUZW1wYXhbNzoyXTogSFJFWzU6MF0gKi8KICAgICBUZW1wZHggPj49IDYgOwkJCQkJCQkvKiBUZW1wZHhbNzo2XS0+WzE6MF0gSFJTWzk6OF0gKi8KICAgICBUZW1wYXggfD0gVGVtcGR4IDsJCQkJCQkJLyogSFJFWzU6MF1IUlNbOTo4XSAqLwpAQCAtMTY3NiwyMCArMTY0NiwyMiBAQAogICAgICAgVGVtcDIgfD0gMHgyMCA7CQkJCQkJCS8qIFZSRSArIDB4MjAgKi8KIAogICAgIFRlbXAyICY9IDB4RkYgOwotICAgIFRlbXBheCA9IChVQ0hBUilUZW1wMiA7CQkJCQkJLyogVGVtcGF4OiBWUkVbNzowXSAqLworICAgIFRlbXBheCA9ICh1bnNpZ25lZCBjaGFyKVRlbXAyOwkJCQkJLyogVGVtcGF4OiBWUkVbNzowXSAqLwogICAgIFRlbXBheCA8PD0gMiA7CQkJCQkJCS8qIFRlbXBheFs3OjBdOyBWUkVbNTowXTAwICovCiAgICAgVGVtcDEgJj0gMHg2MDAgOwkJCQkJCQkvKiBUZW1wMVsxMDo5XTogVlJTWzEwOjldICovCiAgICAgVGVtcDEgPj49IDkgOyAgCQkJCQkJCS8qIFRlbXAxWzE6MF06IFZSU1sxMDo5XSAqLwotICAgIFRlbXBieCA9IChVQ0hBUilUZW1wMSA7CisgICAgVGVtcGJ4ID0gKHVuc2lnbmVkIGNoYXIpVGVtcDE7CiAgICAgVGVtcGF4IHw9IFRlbXBieCA7CQkJCQkJCS8qIFRlbXBheFs3OjBdOiBWUkVbNTowXVZSU1sxMDo5XSAqLwogICAgIFRlbXBheCAmPSAweDdGIDsKICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4M0YgLCBUZW1wYXggKSA7ICAgCQkvKiBTUjNGIERbNzoyXS0+VlJFIERbMTowXS0+VlJTICovCiAgIH0KIH0KIAotdm9pZCBYR0lfU2V0WEcyN0NSVEMoVVNIT1JUIE1vZGVObywgVVNIT1JUIE1vZGVJZEluZGV4LCBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJX1NldFhHMjdDUlRDKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCSAgICAgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LAorCQkgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgVVNIT1JUIFN0YW5kVGFibGVJbmRleCwgaW5kZXgsIFRlbXBheCwgVGVtcGJ4LCBUZW1wY3gsIFRlbXBkeCA7CisJdW5zaWduZWQgc2hvcnQgU3RhbmRUYWJsZUluZGV4LCBpbmRleCwgVGVtcGF4LCBUZW1wYngsIFRlbXBjeCwgVGVtcGR4OwogCiAgIGlmICggTW9kZU5vIDw9IDB4MTMgKQogICB7CkBAIC0xNzI2LDcgKzE2OTgsNyBAQAogICAgIFRlbXBieCB8PSBUZW1wYXggOwkJCQkJCQkvKiBUZW1wYnhbOTowXTogVlJFWzk6MF0gKi8KICAgICBpZiAoIFRlbXBheCA8PSAoVGVtcGN4ICYgMHgwRikgKQkJCQkJLyogVlJFWzM6MF08PVZSU1szOjBdICovCiAgICAgICBUZW1wYnggfD0gMHgxMCA7CQkJCQkJCS8qIFRlbXBieDogVlJFICsgMHgxMCAqLwotICAgIFRlbXBheCA9IChVQ0hBUilUZW1wYnggJiAweEZGOwkJCQkJLyogVGVtcGF4Wzc6MF06IFZSRVs3OjBdICovCisgICAgVGVtcGF4ID0gKHVuc2lnbmVkIGNoYXIpVGVtcGJ4ICYgMHhGRjsJCQkJLyogVGVtcGF4Wzc6MF06IFZSRVs3OjBdICovCiAgICAgVGVtcGF4IDw8PSAyIDsJCQkJCQkJLyogVGVtcGF4IDw8IDI6IFZSRVs1OjBdICovCiAgICAgVGVtcGN4ID0gKFRlbXBjeCYweDYwMCk+Pjg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZW1wY3ggVlJTWzEwOjldICovCiAgICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QM2M0ICwgMHgzRiAsIH4weEZDLCBUZW1wYXggKSA7ICAgICAgICAvKiBTUjNGIERbNzoyXS0+VlJFIERbNTowXSAqLwpAQCAtMTgxMCwxMCArMTc4MiwxMiBAQAogLyogT3V0cHV0IDogRkNMSyBkdXR5IGN5Y2xlLCBGQ0xLIGRlbGF5IGNvbXBlbnNhdGlvbiAqLwogLyogRGVzY3JpcHRpb24gOiBBbGwgdmFsdWVzIHNldCB6ZXJvICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldFhHMjFMQ0QoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8sVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCxVU0hPUlQgTW9kZU5vKQordm9pZCBYR0lfU2V0WEcyMUxDRChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8sCisJCSAgICB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCisJCSAgICB1bnNpZ25lZCBzaG9ydCBNb2RlTm8pCiB7Ci0gIFVTSE9SVCBEYXRhICwgVGVtcCAsIGIzQ0MgOwotICBVU0hPUlQgWEdJX1AzY2MgOworCXVuc2lnbmVkIHNob3J0IERhdGEsIFRlbXAsIGIzQ0M7CisJdW5zaWduZWQgc2hvcnQgWEdJX1AzY2M7CiAKICAgWEdJX1AzY2MgPSBwVkJJbmZvLT5QM2NjIDsKIApAQCAtMTg0NCw3ICsxODE4LDcgQEAKIAogICBpZiAoIE1vZGVObyA8PSAweDEzICkKICAgewotICAgIGIzQ0MgPSAoVUNIQVIpIFhHSU5ld19HZXRSZWcyKCBYR0lfUDNjYyApIDsKKyAgICBiM0NDID0gKHVuc2lnbmVkIGNoYXIpIFhHSU5ld19HZXRSZWcyKFhHSV9QM2NjKTsKICAgICBpZiAoIGIzQ0MgJiAweDQwICkKICAgICAgIFhHSU5ld19TZXRSZWdPUiggcFZCSW5mby0+UDNjNCAsIDB4MzAgLCAweDIwICkgOyAvKiBIc3luYyBwb2xhcml0eSAqLwogICAgIGlmICggYjNDQyAmIDB4ODAgKQpAQCAtMTg2MCwxMCArMTgzNCwxMiBAQAogICB9CiB9CiAKLXZvaWQgWEdJX1NldFhHMjdMQ0QoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8sVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCxVU0hPUlQgTW9kZU5vKQordm9pZCBYR0lfU2V0WEcyN0xDRChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8sCisJCSAgICB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCisJCSAgICB1bnNpZ25lZCBzaG9ydCBNb2RlTm8pCiB7Ci0gIFVTSE9SVCBEYXRhICwgVGVtcCAsIGIzQ0MgOwotICBVU0hPUlQgWEdJX1AzY2MgOworICB1bnNpZ25lZCBzaG9ydCBEYXRhICwgVGVtcCAsIGIzQ0MgOworICB1bnNpZ25lZCBzaG9ydCBYR0lfUDNjYyA7CiAKICAgWEdJX1AzY2MgPSBwVkJJbmZvLT5QM2NjIDsKIApAQCAtMTg5Niw3ICsxODcyLDcgQEAKIAogICBpZiAoIE1vZGVObyA8PSAweDEzICkKICAgewotICAgIGIzQ0MgPSAoVUNIQVIpIFhHSU5ld19HZXRSZWcyKCBYR0lfUDNjYyApIDsKKyAgICBiM0NDID0gKHVuc2lnbmVkIGNoYXIpIFhHSU5ld19HZXRSZWcyKFhHSV9QM2NjKTsKICAgICBpZiAoIGIzQ0MgJiAweDQwICkKICAgICAgIFhHSU5ld19TZXRSZWdPUiggcFZCSW5mby0+UDNjNCAsIDB4MzAgLCAweDIwICkgOyAvKiBIc3luYyBwb2xhcml0eSAqLwogICAgIGlmICggYjNDQyAmIDB4ODAgKQpAQCAtMTkxOCw3ICsxODk0LDkgQEAKIC8qIE91dHB1dCA6IENSVDEgQ1JUQyAqLwogLyogRGVzY3JpcHRpb24gOiBNb2RpZnkgQ1JUMSBIc3luYy9Wc3luYyB0byBmaXggTENEIG1vZGUgdGltaW5nICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1VwZGF0ZVhHMjFDUlRDKCBVU0hPUlQgTW9kZU5vICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gLCBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4ICkKK3ZvaWQgWEdJX1VwZGF0ZVhHMjFDUlRDKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCXN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbywKKwkJCXVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCkKIHsKICAgaW50IGkgLCBpbmRleCA9IC0xOwogCkBAIC0xOTYxLDE2ICsxOTM5LDE1IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRDUlQxREUoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLCBVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCAsIFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1NldENSVDFERShzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJICAgdW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkgICB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJICAgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LAorCQkgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHJlc2luZGV4ICwKLSAgICAgICAgICAgdGVtcGF4ICwKLSAgICAgICAgICAgdGVtcGJ4ICwKLSAgICAgICAgICAgdGVtcGN4ICwKLSAgICAgICAgICAgdGVtcCAsCi0gICAgICAgICAgIG1vZGVmbGFnIDsKKwl1bnNpZ25lZCBzaG9ydCByZXNpbmRleCwgdGVtcGF4LCB0ZW1wYngsIHRlbXBjeCwgdGVtcCwgbW9kZWZsYWc7CiAKLSAgICBVQ0hBUiBkYXRhIDsKKyAgICB1bnNpZ25lZCBjaGFyIGRhdGE7CiAKICAgICByZXNpbmRleCA9IFhHSV9HZXRSZXNJbmZvKCBNb2RlTm8gLCBNb2RlSWRJbmRleCwgcFZCSW5mbyApIDsKIApAQCAtMjAxMywxMyArMTk5MCwxMyBAQAogICAgIHRlbXBheCAtPSAxIDsKICAgICB0ZW1wYnggLT0gMSA7CiAgICAgdGVtcGN4ID0gdGVtcGF4IDsKLSAgICB0ZW1wID0gKCBVQ0hBUiApWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDExICkgOwotICAgIGRhdGEgPSAoIFVDSEFSIClYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4MTEgKSA7CisgICAgdGVtcCA9ICh1bnNpZ25lZCBjaGFyKVhHSU5ld19HZXRSZWcxKHBWQkluZm8tPlAzZDQsIDB4MTEpOworICAgIGRhdGEgPSAodW5zaWduZWQgY2hhcilYR0lOZXdfR2V0UmVnMShwVkJJbmZvLT5QM2Q0LCAweDExKTsKICAgICBkYXRhICY9IDB4N0YgOwogICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHgxMSAsIGRhdGEgKSA7CQkvKiBVbmxvY2sgQ1JUQyAqLwotICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHgwMSAsICggVVNIT1JUICkoIHRlbXBjeCAmIDB4ZmYgKSApIDsKLSAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlAzZDQgLCAweDBiICwgfjB4MGMgLCAoIFVTSE9SVCApKCAoIHRlbXBjeCAmIDB4MGZmMDAgKSA+PiAxMCApICkgOwotICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHgxMiAsICggVVNIT1JUICkoIHRlbXBieCAmIDB4ZmYgKSApIDsKKyAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QM2Q0LCAweDAxLCAodW5zaWduZWQgc2hvcnQpKHRlbXBjeCAmIDB4ZmYpKTsKKyAgICBYR0lOZXdfU2V0UmVnQU5ET1IocFZCSW5mby0+UDNkNCwgMHgwYiwgfjB4MGMsICh1bnNpZ25lZCBzaG9ydCkoKHRlbXBjeCAmIDB4MGZmMDApID4+IDEwKSk7CisgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UDNkNCwgMHgxMiwgKHVuc2lnbmVkIHNob3J0KSh0ZW1wYnggJiAweGZmKSk7CiAgICAgdGVtcGF4ID0gMCA7CiAgICAgdGVtcGJ4ID0gdGVtcGJ4ID4+IDggOwogCkBAIC0yMDMwLDcgKzIwMDcsNyBAQAogICAgICAgICB0ZW1wYXggfD0gMHg0MCA7CiAKICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlAzZDQgLCAweDA3ICwgfjB4NDIgLCB0ZW1wYXggKSA7Ci0gICAgZGF0YSA9KCBVQ0hBUiApWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDA3ICkgOworICAgIGRhdGEgPSAodW5zaWduZWQgY2hhcilYR0lOZXdfR2V0UmVnMShwVkJJbmZvLT5QM2Q0LCAweDA3KTsKICAgICBkYXRhICY9IDB4RkYgOwogICAgIHRlbXBheCA9IDAgOwogCkBAIC0yMDQ4LDkgKzIwMjUsMTEgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLVVTSE9SVCAJWEdJX0dldFJlc0luZm8oVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordW5zaWduZWQgc2hvcnQgWEdJX0dldFJlc0luZm8odW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkJICAgICAgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCQkgICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHJlc2luZGV4IDsKKwl1bnNpZ25lZCBzaG9ydCByZXNpbmRleDsKIAogICAgIGlmICggTW9kZU5vIDw9IDB4MTMgKQogICAgIHsKQEAgLTIwNzAsOSArMjA0OSwxMyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2V0Q1JUMU9mZnNldCggIFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgTW9kZUlkSW5kZXggLCBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4ICwgUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfU2V0Q1JUMU9mZnNldCh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJICAgICAgIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwKKwkJICAgICAgIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkgICAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCB0ZW1wICwKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wICwKICAgICAgICAgICAgYWggLAogICAgICAgICAgICBhbCAsCiAgICAgICAgICAgIHRlbXAyICwKQEAgLTIxMzEsNyArMjExNCw3IEBACiAgICAgaSB8PSB0ZW1wIDsKICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MEUgLCBpICkgOwogCi0gICAgdGVtcCA9KCBVQ0hBUiApdGVtcDIgOworICAgIHRlbXAgPSAodW5zaWduZWQgY2hhcil0ZW1wMjsKICAgICB0ZW1wICY9IDB4RkYgOwkJLyogYWwgKi8KICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4MTMgLCB0ZW1wICkgOwogCkBAIC0yMTYzLDExICsyMTQ2LDEzIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRDUlQxVkNMSyggVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCAsCi0gICAgICAgICAgICAgICAgICAgICAgICBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICwgVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfU2V0Q1JUMVZDTEsodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJICAgICBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJICAgICB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCisJCSAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVDSEFSIGluZGV4ICwgZGF0YSA7Ci0gICAgVVNIT1JUIHZjbGtpbmRleCA7CisJdW5zaWduZWQgY2hhciBpbmRleCwgZGF0YTsKKyAgICB1bnNpZ25lZCBzaG9ydCB2Y2xraW5kZXggOwogCiAgICAgaWYgKCBwVkJJbmZvLT5JRl9ERUZfTFZEUyA9PSAxICkKICAgICB7CkBAIC0yMjI0LDkgKzIyMDksMTEgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldENSVDFGSUZPKCBVU0hPUlQgTW9kZU5vICwgUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbixQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9TZXRDUlQxRklGTyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCSAgICAgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCSAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBkYXRhIDsKKyAgICB1bnNpZ25lZCBzaG9ydCBkYXRhIDsKIAogICAgIGRhdGEgPSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4M0QgKSA7CiAgICAgZGF0YSAmPSAweGZlIDsKQEAgLTIyNzMsMTAgKzIyNjAsMTIgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldENSVDFNb2RlUmVncyggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCAsIFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfU2V0Q1JUMU1vZGVSZWdzKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJIHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCQkgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LAorCQkJIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgZGF0YSAsCisgICAgdW5zaWduZWQgc2hvcnQgZGF0YSAsCiAgICAgICAgICAgIGRhdGEyICwKICAgICAgICAgICAgZGF0YTMgLAogICAgICAgICAgICBpbmZvZmxhZyA9IDAgLApAQCAtMjQxMSwxMyArMjQwMCwxNiBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2V0VkNMS1N0YXRlKCAgUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsIFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1NldFZDTEtTdGF0ZShzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJICAgICAgdW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkgICAgICB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCisJCSAgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgZGF0YSAsCisgICAgdW5zaWduZWQgc2hvcnQgZGF0YSAsCiAgICAgICAgICAgIGRhdGEyID0gMCA7Ci0gICAgU0hPUlQgIFZDTEsgOworICAgIHNob3J0IFZDTEsgOwogCi0gICAgVUNIQVIgIGluZGV4IDsKKyAgICB1bnNpZ25lZCBjaGFyIGluZGV4OwogCiAgICAgaWYgKCBNb2RlTm8gPD0gMHgxMyApCiAgICAgICAgIFZDTEsgPSAwIDsKQEAgLTI0NzUsOSArMjQ2Nyw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKnZvaWQgWEdJX1Zlc2FMb3dSZXNvbHV0aW9uKCBVU0hPUlQgTW9kZU5vICwgVVNIT1JUIE1vZGVJZEluZGV4ICxQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKKy8qdm9pZCBYR0lfVmVzYUxvd1Jlc29sdXRpb24odW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBtb2RlZmxhZzsKKyAgICB1bnNpZ25lZCBzaG9ydCBtb2RlZmxhZzsKIAogICAgIGlmICggTW9kZU5vID4gMHgxMyApCiAgICAgICAgIG1vZGVmbGFnID0gcFZCSW5mby0+RU1vZGVJRFRhYmxlWyBNb2RlSWRJbmRleCBdLkV4dF9Nb2RlRmxhZyA7CkBAIC0yNTE4LDkgKzI1MTAsMTEgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX0xvYWREQUMoIFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgTW9kZUlkSW5kZXgsUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfTG9hZERBQyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCSB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgZGF0YSAsIGRhdGEyICwgdGltZSAsCisgICAgdW5zaWduZWQgc2hvcnQgZGF0YSAsIGRhdGEyICwgdGltZSAsCiAgICAgICAgICAgIGkgICwgaiAsIGsgLCBtICwgbiAsIG8gLAogICAgICAgICAgICBzaSAsIGRpICwgYnggLCBkbCAsIGFsICwgYWggLCBkaCAsCiAgICAgICAgICAgICp0YWJsZSA9IE5VTEwgOwpAQCAtMjYyNyw5ICsyNjIxLDExIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9Xcml0ZURBQyggVVNIT1JUIGRsICwgVVNIT1JUIGFoICwgVVNIT1JUIGFsICwgVVNIT1JUIGRoLFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1dyaXRlREFDKHVuc2lnbmVkIHNob3J0IGRsLCB1bnNpZ25lZCBzaG9ydCBhaCwKKwkJICB1bnNpZ25lZCBzaG9ydCBhbCwgdW5zaWduZWQgc2hvcnQgZGgsCisJCSAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCB0ZW1wICwgYmggLCBibCA7CisgICAgdW5zaWduZWQgc2hvcnQgdGVtcCAsIGJoICwgYmwgOwogCiAgICAgYmggPSBhaCA7CiAgICAgYmwgPSBhbCA7CkBAIC0yNjUyLDcwICsyNjQ4LDI0IEBACiAgICAgICAgICAgICBiaCA9IHRlbXAgOwogICAgICAgICB9CiAgICAgfQotICAgIFhHSU5ld19TZXRSZWczKCBwVkJJbmZvLT5QM2M5ICwgKCBVU0hPUlQgKWRoICkgOwotICAgIFhHSU5ld19TZXRSZWczKCBwVkJJbmZvLT5QM2M5ICwgKCBVU0hPUlQgKWJoICkgOwotICAgIFhHSU5ld19TZXRSZWczKCBwVkJJbmZvLT5QM2M5ICwgKCBVU0hPUlQgKWJsICkgOworICAgIFhHSU5ld19TZXRSZWczKHBWQkluZm8tPlAzYzksICh1bnNpZ25lZCBzaG9ydClkaCk7CisgICAgWEdJTmV3X1NldFJlZzMocFZCSW5mby0+UDNjOSwgKHVuc2lnbmVkIHNob3J0KWJoKTsKKyAgICBYR0lOZXdfU2V0UmVnMyhwVkJJbmZvLT5QM2M5LCAodW5zaWduZWQgc2hvcnQpYmwpOwogfQogCi0jaWYgMAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBGdW5jdGlvbiA6IFhHSV9DbGVhckJ1ZmZlciAqLwotLyogSW5wdXQgOiAqLwotLyogT3V0cHV0IDogKi8KLS8qIERlc2NyaXB0aW9uIDogKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfQ2xlYXJCdWZmZXIoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLCBVU0hPUlQgTW9kZU5vLCBQVkJfREVWSUNFX0lORk8gIHBWQkluZm8pCi17Ci0gICAgUFZPSUQgVmlkZW9NZW1vcnlBZGRyZXNzID0gKCBQVk9JRCApSHdEZXZpY2VFeHRlbnNpb24tPnBqVmlkZW9NZW1vcnlBZGRyZXNzIDsKLSAgICBVTE9ORyBBZGFwdGVyTWVtb3J5U2l6ZSAgPSAoIFVMT05HIClId0RldmljZUV4dGVuc2lvbi0+dWxWaWRlb01lbW9yeVNpemUgOwotICAgIFBVU0hPUlQgcEJ1ZmZlciA7Ci0jaWZuZGVmIExJTlVYX1hGODYKLSAgICBpbnQgaSA7Ci0jZW5kaWYKLQotICAgIGlmICggcFZCSW5mby0+TW9kZVR5cGUgPj0gTW9kZUVHQSApCi0gICAgewotICAgICAgICBpZiAoIE1vZGVObyA+IDB4MTMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBBZGFwdGVyTWVtb3J5U2l6ZSA9IDB4NDAwMDAgOwkvKiBjbGVhciAyNTZrICovCi0gICAgICAgICAgICAvKiBHZXREUkFNU2l6ZSggSHdEZXZpY2VFeHRlbnNpb24gKSA7ICovCi0gICAgICAgICAgICBYR0lfU2V0TWVtb3J5KCBWaWRlb01lbW9yeUFkZHJlc3MgLCBBZGFwdGVyTWVtb3J5U2l6ZSAsIDAgKSA7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0vKgotICAgICAgICAgICAgcEJ1ZmZlciA9IFZpZGVvTWVtb3J5QWRkcmVzcyA7Ci0gICAgICAgICAgICBmb3IoIGkgPSAwIDsgaSA8IDB4NDAwMCA7IGkrKyApCi0gICAgICAgICAgICAgICAgcEJ1ZmZlclsgaSBdID0gMHgwMDAwIDsKLSovCi0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcEJ1ZmZlciA9IFZpZGVvTWVtb3J5QWRkcmVzcyA7Ci0gICAgICAgIGlmICggcFZCSW5mby0+TW9kZVR5cGUgPCBNb2RlQ0dBICkKLSAgICAgICAgewotLyoKLSAgICAgICAgICAgIGZvciAoIGkgPSAwIDsgaSA8IDB4NDAwMCA7IGkrKyApCi0gICAgICAgICAgICAgICAgcEJ1ZmZlclsgaSBdID0gMHgwNzIwIDsKLSovCi0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgWEdJX1NldE1lbW9yeSggVmlkZW9NZW1vcnlBZGRyZXNzICwgMHg4MDAwICwgMCApIDsKLSAgICB9Ci19Ci0KLSNlbmRpZgogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBGdW5jdGlvbiA6IFhHSV9TZXRMQ0RBR3JvdXAgKi8KIC8qIElucHV0IDogKi8KIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldExDREFHcm91cCggVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCAsIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyAgcFZCSW5mbyApCit2b2lkIFhHSV9TZXRMQ0RBR3JvdXAodW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkgICAgICB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJICAgICAgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCSAgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4IDsKLSAgICAvKiBVU0hPUlQgdGVtcCA7ICovCisgICAgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4IDsKKyAgICAvKiB1bnNpZ25lZCBzaG9ydCB0ZW1wIDsgKi8KIAogICAgIC8qIHBWQkluZm8tPlNlbGVjdENSVDJSYXRlID0gMCA7ICovCiAKQEAgLTI3MzUsOSArMjY4NSwxMSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfR2V0TFZEU1Jlc0luZm8oIFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgTW9kZUlkSW5kZXgsUFZCX0RFVklDRV9JTkZPICBwVkJJbmZvICkKK3ZvaWQgWEdJX0dldExWRFNSZXNJbmZvKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCXVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCByZXNpbmRleCAsIHhyZXMgLCB5cmVzICwgbW9kZWZsYWcgOworICAgIHVuc2lnbmVkIHNob3J0IHJlc2luZGV4ICwgeHJlcyAsIHlyZXMgLCBtb2RlZmxhZyA7CiAKICAgICBpZiAoIE1vZGVObyA8PSAweDEzICkKICAgICB7CkBAIC0yODAzLDE3ICsyNzU1LDIwIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9HZXRMVkRTRGF0YSggIFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgTW9kZUlkSW5kZXggLCBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBQVkJfREVWSUNFX0lORk8gIHBWQkluZm8gKQordm9pZCBYR0lfR2V0TFZEU0RhdGEodW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkgICAgIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkgICAgIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwKKwkJICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXBieCA7Ci0gICAgWEdJMzMwX0xWRFNEYXRhU3RydWN0ICpMQ0RQdHIgPSBOVUxMIDsKLSAgICBYR0kzMzBfQ0hUVkRhdGFTdHJ1Y3QgICpUVlB0ciA9IE5VTEwgOworICAgIHVuc2lnbmVkIHNob3J0IHRlbXBieCA7CisgICAgc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAqTENEUHRyID0gTlVMTCA7CisgICAgc3RydWN0IFhHSTMzMF9DSFRWRGF0YVN0cnVjdCAgKlRWUHRyID0gTlVMTCA7CiAKICAgICB0ZW1wYnggPSAyIDsKIAogICAgIGlmICggcFZCSW5mby0+VkJJbmZvICYgKCBTZXRDUlQyVG9MQ0QgfCBTZXRDUlQyVG9MQ0RBICkgKQogICAgIHsKLSAgICAgICAgTENEUHRyID0gKCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgKiApWEdJX0dldExjZFB0ciggdGVtcGJ4LCBNb2RlTm8gLCBNb2RlSWRJbmRleCAsIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgcFZCSW5mbykgOworCUxDRFB0ciA9IChzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0ICopWEdJX0dldExjZFB0cih0ZW1wYngsIE1vZGVObywgTW9kZUlkSW5kZXgsIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgcFZCSW5mbyk7CiAgICAgICAgIHBWQkluZm8tPlZHQUhUID0gTENEUHRyLT5WR0FIVCA7CiAgICAgICAgIHBWQkluZm8tPlZHQVZUID0gTENEUHRyLT5WR0FWVCA7CiAgICAgICAgIHBWQkluZm8tPkhUID0gTENEUHRyLT5MQ0RIVCA7CkBAIC0yODIzLDcgKzI3NzgsNyBAQAogICAgIHsKICAgICAgICAgaWYgKCBwVkJJbmZvLT5WQkluZm8gJiBTZXRDUlQyVG9UViApCiAgICAgICAgIHsKLSAgICAgICAgICAgIFRWUHRyID0gKCBYR0kzMzBfQ0hUVkRhdGFTdHJ1Y3QgKiApWEdJX0dldFRWUHRyKCB0ZW1wYnggLCBNb2RlTm8gLCBNb2RlSWRJbmRleCAsIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgcFZCSW5mbyApIDsKKwkgICAgVFZQdHIgPSAoc3RydWN0IFhHSTMzMF9DSFRWRGF0YVN0cnVjdCAqKVhHSV9HZXRUVlB0cih0ZW1wYngsIE1vZGVObywgTW9kZUlkSW5kZXgsIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgcFZCSW5mbyk7CiAgICAgICAgICAgICBwVkJJbmZvLT5WR0FIVCA9IFRWUHRyLT5WR0FIVCA7CiAgICAgICAgICAgICBwVkJJbmZvLT5WR0FWVCA9IFRWUHRyLT5WR0FWVCA7CiAgICAgICAgICAgICBwVkJJbmZvLT5IVCA9IFRWUHRyLT5MQ0RIVCA7CkBAIC0yODY2LDE2ICsyODIxLDE4IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9Nb2RDUlQxUmVncyggVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCAsCi0gICAgICAgICAgICAgICAgICAgICAgICBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4ICwgUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbixQVkJfREVWSUNFX0lORk8gIHBWQkluZm8gKQordm9pZCBYR0lfTW9kQ1JUMVJlZ3ModW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJICAgICB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCisJCSAgICAgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCSAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVDSEFSIGluZGV4IDsKLSAgICBVU0hPUlQgdGVtcGJ4ICwgaSA7Ci0gICAgWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QgICpMQ0RQdHIgPSBOVUxMIDsKLSAgICBYR0lfTFZEU0NSVDFWRGF0YVN0cnVjdCAgKkxDRFB0cjEgPU5VTEwgOwotICAgIC8qIFhHSTMzMF9DSFRWRGF0YVN0cnVjdCAqVFZQdHIgPSBOVUxMIDsgKi8KLSAgICBYR0lfQ0g3MDA3VFZfVGltaW5nSFN0cnVjdCAqQ0g3MDA3VFZfVGltaW5nSFB0ciA9IE5VTEw7Ci0gICAgWEdJX0NINzAwN1RWX1RpbWluZ1ZTdHJ1Y3QgKkNINzAwN1RWX1RpbWluZ1ZQdHIgPSBOVUxMOworICAgIHVuc2lnbmVkIGNoYXIgaW5kZXg7CisgICAgdW5zaWduZWQgc2hvcnQgdGVtcGJ4ICwgaSA7CisgICAgc3RydWN0IFhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0ICAqTENEUHRyID0gTlVMTDsKKyAgICBzdHJ1Y3QgWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QgICpMQ0RQdHIxID0gTlVMTDsKKyAgICAvKiBzdHJ1Y3QgWEdJMzMwX0NIVFZEYXRhU3RydWN0ICpUVlB0ciA9IE5VTEwgOyAqLworICAgIHN0cnVjdCBYR0lfQ0g3MDA3VFZfVGltaW5nSFN0cnVjdCAqQ0g3MDA3VFZfVGltaW5nSFB0ciA9IE5VTEw7CisgICAgc3RydWN0IFhHSV9DSDcwMDdUVl9UaW1pbmdWU3RydWN0ICpDSDcwMDdUVl9UaW1pbmdWUHRyID0gTlVMTDsKIAogICAgIGlmKCBNb2RlTm8gPD0gMHgxMyApCiAgICAgICAgIGluZGV4ID0gcFZCSW5mby0+U01vZGVJRFRhYmxlWyBNb2RlSWRJbmRleCBdLlN0X0NSVDJDUlRDIDsKQEAgLTI4OTAsNyArMjg0Nyw3IEBACiAKICAgICAgICAgaWYgKCBwVkJJbmZvLT5WQkluZm8gJiAoIFNldENSVDJUb0xDRCB8IFNldENSVDJUb0xDREEgKSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIExDRFB0ciA9ICggWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QgKiApWEdJX0dldExjZFB0ciggdGVtcGJ4ICwgTW9kZU5vICwgTW9kZUlkSW5kZXggLCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHBWQkluZm8gKSA7CisJICAgIExDRFB0ciA9IChzdHJ1Y3QgWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QgKilYR0lfR2V0TGNkUHRyKHRlbXBieCwgTW9kZU5vLCBNb2RlSWRJbmRleCwgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBwVkJJbmZvKTsKIAogICAgICAgICAgICAgZm9yKCBpID0gMCA7IGkgPCA4IDsgaSsrICkKICAgICAgICAgICAgICAgICBwVkJJbmZvLT5UaW1pbmdIWyAwIF0uZGF0YVsgaSBdID0gTENEUHRyWyAwIF0uUmVnWyBpIF0gOwpAQCAtMjkwMCw3ICsyODU3LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCBwVkJJbmZvLT5WQkluZm8gJiBTZXRDUlQyVG9UViApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ0g3MDA3VFZfVGltaW5nSFB0ciA9ICggWEdJX0NINzAwN1RWX1RpbWluZ0hTdHJ1Y3QgKilYR0lfR2V0VFZQdHIoIHRlbXBieCAsIE1vZGVObyAsIE1vZGVJZEluZGV4ICwgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBwVkJJbmZvICkgOworCQlDSDcwMDdUVl9UaW1pbmdIUHRyID0gKHN0cnVjdCBYR0lfQ0g3MDA3VFZfVGltaW5nSFN0cnVjdCAqKVhHSV9HZXRUVlB0cih0ZW1wYngsIE1vZGVObywgTW9kZUlkSW5kZXgsIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgcFZCSW5mbyk7CiAKICAgICAgICAgICAgICAgICBmb3IoIGkgPSAwIDsgaSA8IDggOyBpKysgKQogICAgICAgICAgICAgICAgICAgICBwVkJJbmZvLT5UaW1pbmdIWyAwIF0uZGF0YVsgaSBdID0gQ0g3MDA3VFZfVGltaW5nSFB0clsgMCBdLmRhdGFbIGkgXSA7CkBAIC0yOTEwLDcgKzI4NjcsNyBAQAogICAgICAgICAvKiBpZiAoIHBWQkluZm8tPklGX0RFRl9DSDcwMTcgPT0gMSApCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICggcFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvVFYgKQotICAgICAgICAgICAgICAgIFRWUHRyID0gKCBYR0kzMzBfQ0hUVkRhdGFTdHJ1Y3QgKilYR0lfR2V0VFZQdHIoIHRlbXBieCAsIE1vZGVObyAsIE1vZGVJZEluZGV4ICwgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBwVkJJbmZvICkgOworCQlUVlB0ciA9ICggc3RydWN0IFhHSTMzMF9DSFRWRGF0YVN0cnVjdCAqKVhHSV9HZXRUVlB0ciggdGVtcGJ4ICwgTW9kZU5vICwgTW9kZUlkSW5kZXggLCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHBWQkluZm8gKSA7CiAgICAgICAgIH0gKi8KIAogICAgICAgICBYR0lfU2V0Q1JUMVRpbWluZ19IKHBWQkluZm8sSHdEZXZpY2VFeHRlbnNpb24pIDsKQEAgLTI5MjUsNyArMjg4Miw3IEBACiAKICAgICAgICAgaWYgKCBwVkJJbmZvLT5WQkluZm8gJiAoIFNldENSVDJUb0xDRCB8IFNldENSVDJUb0xDREEgKSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIExDRFB0cjEgPSAoIFhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0ICogKVhHSV9HZXRMY2RQdHIoIHRlbXBieCAsIE1vZGVObyAsIE1vZGVJZEluZGV4ICwgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBwVkJJbmZvICkgOworCSAgICBMQ0RQdHIxID0gKHN0cnVjdCBYR0lfTFZEU0NSVDFWRGF0YVN0cnVjdCAqKVhHSV9HZXRMY2RQdHIodGVtcGJ4LCBNb2RlTm8sIE1vZGVJZEluZGV4LCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHBWQkluZm8pOwogICAgICAgICAgICAgZm9yKCBpID0gMCA7IGkgPCA3IDsgaSsrICkKICAgICAgICAgICAgICAgICBwVkJJbmZvLT5UaW1pbmdWWyAwIF0uZGF0YVsgaSBdID0gTENEUHRyMVsgMCBdLlJlZ1sgaSBdIDsKICAgICAgICAgfQpAQCAtMjkzNCw3ICsyODkxLDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCBwVkJJbmZvLT5WQkluZm8gJiBTZXRDUlQyVG9UViApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ0g3MDA3VFZfVGltaW5nVlB0ciA9ICggWEdJX0NINzAwN1RWX1RpbWluZ1ZTdHJ1Y3QgKilYR0lfR2V0VFZQdHIoIHRlbXBieCAsIE1vZGVObyAsIE1vZGVJZEluZGV4ICwgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBwVkJJbmZvICkgOworCQlDSDcwMDdUVl9UaW1pbmdWUHRyID0gKHN0cnVjdCBYR0lfQ0g3MDA3VFZfVGltaW5nVlN0cnVjdCAqKVhHSV9HZXRUVlB0cih0ZW1wYngsIE1vZGVObywgTW9kZUlkSW5kZXgsIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgcFZCSW5mbyk7CiAKICAgICAgICAgICAgICAgICBmb3IoIGkgPSAwIDsgaSA8IDcgOyBpKysgKQogICAgICAgICAgICAgICAgICAgICBwVkJJbmZvLT5UaW1pbmdWWyAwIF0uZGF0YVsgaSBdID0gQ0g3MDA3VFZfVGltaW5nVlB0clsgMCBdLmRhdGFbIGkgXSA7CkBAIC0yOTQzLDcgKzI5MDAsNyBAQAogICAgICAgICAvKiBpZiAoIHBWQkluZm8tPklGX0RFRl9DSDcwMTcgPT0gMSApCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICggcFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvVFYgKQotICAgICAgICAgICAgICAgIFRWUHRyID0gKCBYR0kzMzBfQ0hUVkRhdGFTdHJ1Y3QgKilYR0lfR2V0VFZQdHIoIHRlbXBieCAsIE1vZGVObyAsIE1vZGVJZEluZGV4ICwgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBwVkJJbmZvICkgOworCQlUVlB0ciA9ICggc3RydWN0IFhHSTMzMF9DSFRWRGF0YVN0cnVjdCAqKVhHSV9HZXRUVlB0ciggdGVtcGJ4ICwgTW9kZU5vICwgTW9kZUlkSW5kZXggLCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHBWQkluZm8gKSA7CiAgICAgICAgIH0gKi8KIAogICAgICAgICBYR0lfU2V0Q1JUMVRpbWluZ19WKCBNb2RlSWRJbmRleCAsIE1vZGVObyAsIHBWQkluZm8pIDsKQEAgLTI5NjYsMTIgKzI5MjMsMTQgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldExWRFNSZWdzKCBVU0hPUlQgTW9kZU5vICwgVVNIT1JUIE1vZGVJZEluZGV4ICwgVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPICBwVkJJbmZvICkKK3ZvaWQgWEdJX1NldExWRFNSZWdzKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCSAgICAgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LAorCQkgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcGJ4ICwgdGVtcGF4ICwgdGVtcGN4ICwgdGVtcGR4ICwgcHVzaDEgLCBwdXNoMiAsIG1vZGVmbGFnIDsKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wYnggLCB0ZW1wYXggLCB0ZW1wY3ggLCB0ZW1wZHggLCBwdXNoMSAsIHB1c2gyICwgbW9kZWZsYWcgOwogICAgIHVuc2lnbmVkIGxvbmcgdGVtcCAsIHRlbXAxICwgdGVtcDIgLCB0ZW1wMyAsIHB1c2gzIDsKLSAgICBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgKkxDRFB0ciA9IE5VTEwgOwotICAgIFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0MiAgKkxDRFB0cjEgPSBOVUxMIDsKKyAgICBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgICpMQ0RQdHIgPSBOVUxMIDsKKyAgICBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QyICAqTENEUHRyMSA9IE5VTEwgOwogCiAgICAgaWYgKCBNb2RlTm8gPiAweDEzICkKICAgICAgICAgbW9kZWZsYWcgPSBwVkJJbmZvLT5FTW9kZUlEVGFibGVbIE1vZGVJZEluZGV4IF0uRXh0X01vZGVGbGFnIDsKQEAgLTI5ODUsMTYgKzI5NDQsMTYgQEAKICAgICAgICAgICAgIGlmICggcFZCSW5mby0+SUZfREVGX09FTVV0aWwgPT0gMSApCiAgICAgICAgICAgICB7CiAgICAgCSAgICAgICAgdGVtcGJ4ID0gOCA7Ci0gICAgCSAgICAgICAgTENEUHRyID0gKCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAqIClYR0lfR2V0TGNkUHRyKCB0ZW1wYnggLCBNb2RlTm8gLCBNb2RlSWRJbmRleCAsIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgcFZCSW5mbyApIDsKKwkJTENEUHRyID0gKHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAqKVhHSV9HZXRMY2RQdHIodGVtcGJ4LCBNb2RlTm8sIE1vZGVJZEluZGV4LCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHBWQkluZm8pOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoICggcFZCSW5mby0+SUZfREVGX09FTVV0aWwgPT0gMCApIHx8ICggTENEUHRyID09IDAgKSApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdGVtcGJ4ID0gMyA7CiAgICAgICAgICAgICAgICAgaWYgKCBwVkJJbmZvLT5MQ0RJbmZvICYgRW5hYmxlU2NhbGluZ0xDRCApCi0gICAgICAgICAgICAgICAgICAgIExDRFB0cjEgPSAoIFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0MiAqIClYR0lfR2V0TGNkUHRyKCB0ZW1wYnggLCBNb2RlTm8gLCBNb2RlSWRJbmRleCAsIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgcFZCSW5mbyApIDsKKwkJICAgIExDRFB0cjEgPSAoc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0MiAqKVhHSV9HZXRMY2RQdHIodGVtcGJ4LCBNb2RlTm8sIE1vZGVJZEluZGV4LCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHBWQkluZm8pOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgTENEUHRyID0gKCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAqIClYR0lfR2V0TGNkUHRyKCB0ZW1wYnggLCBNb2RlTm8gLCBNb2RlSWRJbmRleCAsIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgcFZCSW5mbyApIDsKKwkJICAgIExDRFB0ciA9IChzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgKilYR0lfR2V0TGNkUHRyKHRlbXBieCwgTW9kZU5vLCBNb2RlSWRJbmRleCwgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBwVkJJbmZvKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgWEdJX0dldExDRFN5bmMoICZ0ZW1wYXggLCAmdGVtcGJ4ICxwVkJJbmZvKSA7CkBAIC0zMDU2LDggKzMwMTUsOCBAQAogICAgICAgICAgICAgdGVtcGN4ID0gdGVtcGN4ID4+IDMgOwogICAgICAgICAgICAgdGVtcGJ4ID0gdGVtcGJ4ID4+IDMgOwogCi0gICAgICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgxNiAsICggVVNIT1JUICkoIHRlbXBieCAmIDB4ZmYgKSApIDsKLSAgICAgICAgICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QYXJ0MVBvcnQgLCAweDE3ICwgKCBVU0hPUlQgKSggdGVtcGN4ICYgMHhmZiApICkgOworCSAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MTYsICh1bnNpZ25lZCBzaG9ydCkodGVtcGJ4ICYgMHhmZikpOworCSAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MTcsICh1bnNpZ25lZCBzaG9ydCkodGVtcGN4ICYgMHhmZikpOwogCiAgICAgICAgICAgICB0ZW1wYXggPSBwVkJJbmZvLT5IVCA7CiAKQEAgLTMwODUsNyArMzA0NCw3IEBACiAgICAgICAgICAgICB0ZW1wYXggfD0gdGVtcGN4IDsKIAogICAgICAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MTUgLCB0ZW1wYXggKSA7Ci0gICAgICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgxNCAsICggVVNIT1JUICkoIHRlbXBieCAmIDB4ZmYgKSApIDsKKwkgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UGFydDFQb3J0LCAweDE0LCAodW5zaWduZWQgc2hvcnQpKHRlbXBieCAmIDB4ZmYpKTsKIAogICAgICAgICAgICAgdGVtcGF4ID0gcFZCSW5mby0+VlQgOwogICAgICAgICAgICAgaWYgKCBwVkJJbmZvLT5MQ0RJbmZvICYgRW5hYmxlU2NhbGluZ0xDRCApCkBAIC0zMDk5LDEzICszMDU4LDEzIEBACiAgICAgICAgICAgICBpZiAoIHRlbXBjeCA+PSB0ZW1wYXggKQogICAgICAgICAgICAgICAgIHRlbXBjeCAtPSB0ZW1wYXggOwogCi0gICAgICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgxYiAsICggVVNIT1JUICkoIHRlbXBieCAmIDB4ZmYgKSApIDsKLSAgICAgICAgICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QYXJ0MVBvcnQgLCAweDFjICwgKCBVU0hPUlQgKSggdGVtcGN4ICYgMHhmZiApICkgOworCSAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MWIsICh1bnNpZ25lZCBzaG9ydCkodGVtcGJ4ICYgMHhmZikpOworCSAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MWMsICh1bnNpZ25lZCBzaG9ydCkodGVtcGN4ICYgMHhmZikpOwogCiAgICAgICAgICAgICB0ZW1wYnggPSAoIHRlbXBieCA+PiA4ICkgJiAweDA3IDsKICAgICAgICAgICAgIHRlbXBjeCA9ICggdGVtcGN4ID4+IDggKSAmIDB4MDcgOwogCi0gICAgICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgxZCAsICggVVNIT1JUICkoICggdGVtcGN4IDw8IDMgKSB8IHRlbXBieCApICkgOworCSAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MWQsICh1bnNpZ25lZCBzaG9ydCkoKHRlbXBjeCA8PCAzKSB8IHRlbXBieCkpOwogCiAgICAgICAgICAgICB0ZW1wYXggPSBwVkJJbmZvLT5WVCA7CiAgICAgICAgICAgICBpZiAoIHBWQkluZm8tPkxDREluZm8gJiBFbmFibGVTY2FsaW5nTENEICkKQEAgLTMxMjMsOCArMzA4Miw4IEBACiAgICAgICAgICAgICBpZiAoIHRlbXBjeCA+PSB0ZW1wYXggKQogICAgICAgICAgICAgICAgIHRlbXBjeCAtPSB0ZW1wYXggOwogCi0gICAgICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgxOCAsICggVVNIT1JUICkoIHRlbXBieCAmIDB4ZmYgKSApIDsKLSAgICAgICAgICAgIFhHSU5ld19TZXRSZWdBTkRPUiggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgxOSAsIH4weDBmICwgKCBVU0hPUlQgKSggdGVtcGN4ICYgMHgwZiApICkgOworCSAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MTgsICh1bnNpZ25lZCBzaG9ydCkodGVtcGJ4ICYgMHhmZikpOworCSAgICBYR0lOZXdfU2V0UmVnQU5ET1IocFZCSW5mby0+UGFydDFQb3J0LCAweDE5LCB+MHgwZiwgKHVuc2lnbmVkIHNob3J0KSh0ZW1wY3ggJiAweDBmKSk7CiAKICAgICAgICAgICAgIHRlbXBheCA9ICggKCB0ZW1wYnggPj4gOCApICYgMHgwNyApIDw8IDMgOwogCkBAIC0zMTQ1LDcgKzMxMDQsNyBAQAogICAgICAgICAgICAgdGVtcCA9IHRlbXBheCA7ICAgICAgICAgICAgLyogMDQzMCB5bHNoaWVoICovCiAgICAgICAgICAgICB0ZW1wMSA9ICggdGVtcCA8PCAxOCApIC8gdGVtcGJ4IDsKIAotICAgICAgICAgICAgdGVtcGR4ID0gKCBVU0hPUlQgKSggKCB0ZW1wIDw8IDE4ICkgJSB0ZW1wYnggKSA7CisJICAgIHRlbXBkeCA9ICh1bnNpZ25lZCBzaG9ydCkoKHRlbXAgPDwgMTgpICUgdGVtcGJ4KTsKIAogICAgICAgICAgICAgaWYgKCB0ZW1wZHggIT0gMCApCiAgICAgICAgICAgICB0ZW1wMSArPSAxIDsKQEAgLTMxNTMsMTAgKzMxMTIsMTAgQEAKICAgICAgICAgICAgIHRlbXAyID0gdGVtcDEgOwogICAgICAgICAgICAgcHVzaDMgPSB0ZW1wMiA7CiAKLSAgICAgICAgICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QYXJ0MVBvcnQgLCAweDM3ICwgKCBVU0hPUlQgKSggdGVtcDIgJiAweGZmICkgKSA7Ci0gICAgICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgzNiAsICggVVNIT1JUICkoICggdGVtcDIgPj4gOCApICYgMHhmZiApICkgOworCSAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MzcsICh1bnNpZ25lZCBzaG9ydCkodGVtcDIgJiAweGZmKSk7CisJICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlBhcnQxUG9ydCwgMHgzNiwgKHVuc2lnbmVkIHNob3J0KSgodGVtcDIgPj4gOCkgJiAweGZmKSk7CiAKLSAgICAgICAgICAgIHRlbXBieCA9ICggVVNIT1JUICkoIHRlbXAyID4+IDE2ICkgOworCSAgICB0ZW1wYnggPSAodW5zaWduZWQgc2hvcnQpKHRlbXAyID4+IDE2KTsKICAgICAgICAgICAgIHRlbXBheCA9IHRlbXBieCAmIDB4MDMgOwogCiAgICAgICAgICAgICB0ZW1wYnggPSBwVkJJbmZvLT5WR0FWREUgOwpAQCAtMzE2OCwxMCArMzEyNywxMCBAQAogICAgICAgICAgICAgaWYgKCBwVkJJbmZvLT5WQlR5cGUgJiBWQl9YR0kzMDFDICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB0ZW1wMiA9IHB1c2gzIDsKLSAgICAgIAkgICAgICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QYXJ0NFBvcnQgLCAweDNjICwgKCBVU0hPUlQgKSggdGVtcDIgJiAweGZmICkgKSA7Ci0gICAgICAJICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDRQb3J0ICwgMHgzYiAsICggVVNIT1JUICkoICggdGVtcDIgPj4gOCApICYgMHhmZiApICkgOwotICAgICAgCSAgICAgICAgdGVtcGJ4ID0gKCBVU0hPUlQgKSggdGVtcDIgPj4gMTYgKSA7Ci0gICAgICAJICAgICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlBhcnQ0UG9ydCAsIDB4M2EgLCB+MHhjMCAsICggVVNIT1JUICkoICggdGVtcGJ4ICYgMHhmZiApIDw8IDYgKSApIDsKKwkJWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UGFydDRQb3J0LCAweDNjLCAodW5zaWduZWQgc2hvcnQpKHRlbXAyICYgMHhmZikpOworCQlYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QYXJ0NFBvcnQsIDB4M2IsICh1bnNpZ25lZCBzaG9ydCkoKHRlbXAyID4+IDgpICYgMHhmZikpOworCQl0ZW1wYnggPSAodW5zaWduZWQgc2hvcnQpKHRlbXAyID4+IDE2KTsKKwkJWEdJTmV3X1NldFJlZ0FORE9SKHBWQkluZm8tPlBhcnQ0UG9ydCwgMHgzYSwgfjB4YzAsICh1bnNpZ25lZCBzaG9ydCkoKHRlbXBieCAmIDB4ZmYpIDw8IDYpKTsKIAogICAgICAgICAgICAgICAgIHRlbXBjeCA9IHBWQkluZm8tPlZHQVZERSA7CiAgICAgICAgICAgICAgICAgaWYgKCB0ZW1wY3ggPT0gcFZCSW5mby0+VkRFICkKQEAgLTMxODUsNyArMzE0NCw3IEBACiAKICAgICAgICAgICAgIHRlbXAxID0gdGVtcGN4IDw8IDE2IDsKIAotICAgICAgICAgICAgdGVtcGF4ID0gKCBVU0hPUlQgKSggdGVtcDEgLyB0ZW1wYnggKSA7CisJICAgIHRlbXBheCA9ICh1bnNpZ25lZCBzaG9ydCkodGVtcDEgLyB0ZW1wYngpOwogCiAgICAgICAgICAgICBpZiAoICggdGVtcGJ4ICYgMHhmZmZmICkgPT0gKCB0ZW1wY3ggJiAweGZmZmYgKSApCiAgICAgICAgICAgICAgICAgdGVtcGF4ID0gNjU1MzUgOwpAQCAtMzE5OSwyOCArMzE1OCwyOCBAQAogCiAgICAgICAgICAgICB0ZW1wMyA9ICggdGVtcDMgJiAweGZmZmYwMDAwICkgKyAoIHRlbXAxICYgMHhmZmZmICkgOwogCi0gICAgICAgICAgICB0ZW1wYXggPSAoIFVTSE9SVCApKCB0ZW1wMyAmIDB4ZmYgKSA7CisJICAgIHRlbXBheCA9ICh1bnNpZ25lZCBzaG9ydCkodGVtcDMgJiAweGZmKTsKICAgICAgICAgICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QYXJ0MVBvcnQgLCAweDFmICwgdGVtcGF4ICkgOwogCiAgICAgICAgICAgICB0ZW1wMSA9IHBWQkluZm8tPlZHQVZERSA8PCAxOCA7CiAgICAgICAgICAgICB0ZW1wMSA9IHRlbXAxIC8gcHVzaDMgOwotICAgICAgICAgICAgdGVtcGJ4ID0gKCBVU0hPUlQgKSggdGVtcDEgJiAweGZmZmYgKSA7CisJICAgIHRlbXBieCA9ICh1bnNpZ25lZCBzaG9ydCkodGVtcDEgJiAweGZmZmYpOwogCiAgICAgICAgICAgICBpZiAoIHBWQkluZm8tPkxDRFJlc0luZm8gPT0gUGFuZWwxMDI0eDc2OCApCiAgICAgICAgICAgICAgICAgdGVtcGJ4IC09IDEgOwogCiAgICAgICAgICAgICB0ZW1wYXggPSAoICggdGVtcGJ4ID4+IDggKSAmIDB4ZmYgKSA8PCAzIDsKLSAgICAgICAgICAgIHRlbXBheCB8PSAoIFVTSE9SVCApKCAoIHRlbXAzID4+IDggKSAmIDB4MDcgKSA7Ci0gICAgICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgyMCAsICggVVNIT1JUICkoIHRlbXBheCAmIDB4ZmYgKSApIDsKLSAgICAgICAgICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QYXJ0MVBvcnQgLCAweDIxICwgKCBVU0hPUlQgKSggdGVtcGJ4ICYgMHhmZiApICkgOworCSAgICB0ZW1wYXggfD0gKHVuc2lnbmVkIHNob3J0KSgodGVtcDMgPj4gOCkgJiAweDA3KTsKKwkgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UGFydDFQb3J0LCAweDIwLCAodW5zaWduZWQgc2hvcnQpKHRlbXBheCAmIDB4ZmYpKTsKKwkgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UGFydDFQb3J0LCAweDIxLCAodW5zaWduZWQgc2hvcnQpKHRlbXBieCAmIDB4ZmYpKTsKIAogICAgICAgICAgICAgdGVtcDMgPSB0ZW1wMyA+PiAxNiA7CiAKICAgICAgICAgICAgIGlmICggbW9kZWZsYWcgJiBIYWxmRENMSyApCiAgICAgICAgICAgICAgICAgdGVtcDMgPSB0ZW1wMyA+PiAxIDsKIAotICAgICAgICAgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UGFydDFQb3J0ICwgMHgyMiAsICggVVNIT1JUICkoICggdGVtcDMgPj4gOCApICYgMHhmZiApICkgOwotICAgICAgICAgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UGFydDFQb3J0ICwgMHgyMyAsICggVVNIT1JUICkoIHRlbXAzICYgMHhmZiApICkgOworCSAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QYXJ0MVBvcnQgLCAweDIyLCAodW5zaWduZWQgc2hvcnQpKCh0ZW1wMyA+PiA4KSAmIDB4ZmYpKTsKKwkgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UGFydDFQb3J0ICwgMHgyMywgKHVuc2lnbmVkIHNob3J0KSh0ZW1wMyAmIDB4ZmYpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTMyMzIsOSArMzE5MSw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRDUlQyRUNMSyggVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCAsIFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyAgcFZCSW5mbyApCit2b2lkIFhHSV9TZXRDUlQyRUNMSyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVQ0hBUiBkaV8wICwgZGlfMSAsIHRlbXBhbCA7CisgICAgdW5zaWduZWQgY2hhciBkaV8wLCBkaV8xLCB0ZW1wYWw7CiAgICAgaW50IGkgOwogCiAgICAgdGVtcGFsID0gWEdJX0dldFZDTEtQdHIoIFJlZnJlc2hSYXRlVGFibGVJbmRleCAsIE1vZGVObyAsIE1vZGVJZEluZGV4LCBwVkJJbmZvICkgOwpAQCAtMzI0Myw3ICszMjAyLDcgQEAKIAogICAgIGZvciggaSA9IDAgOyBpIDwgNCA7IGkrKyApCiAgICAgewotICAgICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlAzZDQgLCAweDMxICwgfjB4MzAgLCAoIFVTSE9SVCApKCAweDEwICogaSApICkgOworCVhHSU5ld19TZXRSZWdBTkRPUihwVkJJbmZvLT5QM2Q0LCAweDMxLCB+MHgzMCwgKHVuc2lnbmVkIHNob3J0KSgweDEwICogaSkpOwogICAgICAgICBpZiAoIHBWQkluZm8tPklGX0RFRl9DSDcwMDcgPT0gMSApCiAgICAgICAgIHsKICAgICAgICAgICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgyYiAsIGRpXzAgKSA7CkBAIC0zMjY5LDkgKzMyMjgsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfVXBkYXRlTW9kZUluZm8oIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sUFZCX0RFVklDRV9JTkZPICBwVkJJbmZvICkKK3ZvaWQgWEdJX1VwZGF0ZU1vZGVJbmZvKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXBjbCAsCisgICAgdW5zaWduZWQgc2hvcnQgdGVtcGNsICwKICAgICAgICAgICAgdGVtcGNoICwKICAgICAgICAgICAgdGVtcCAsCiAgICAgICAgICAgIHRlbXBibCAsCkBAIC0zMzc3LDcgKzMzMzYsNyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfR2V0VkdBVHlwZSggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgUFZCX0RFVklDRV9JTkZPICBwVkJJbmZvKQordm9pZCBYR0lfR2V0VkdBVHlwZShzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogICAgIC8qCiAgICAgaWYgKCBId0RldmljZUV4dGVuc2lvbi0+akNoaXBUeXBlID49IFhHMjAgKQpAQCAtMzM5OSw5ICszMzU4LDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX0dldFZCVHlwZShQVkJfREVWSUNFX0lORk8gIHBWQkluZm8pCit2b2lkIFhHSV9HZXRWQlR5cGUoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBmbGFnICwgdGVtcGJ4ICwgdGVtcGFoIDsKKyAgICB1bnNpZ25lZCBzaG9ydCBmbGFnICwgdGVtcGJ4ICwgdGVtcGFoIDsKIAogICAgIGlmICggcFZCSW5mby0+SUZfREVGX0NINzAwNyA9PSAxICkKICAgICB7CkBAIC0zNDYyLDkgKzM0MjEsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfR2V0VkJJbmZvKCBVU0hPUlQgTW9kZU5vICwgVVNIT1JUIE1vZGVJZEluZGV4ICwgUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgUFZCX0RFVklDRV9JTkZPICBwVkJJbmZvICkKK3ZvaWQgWEdJX0dldFZCSW5mbyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCB0ZW1wYXggLAorICAgIHVuc2lnbmVkIHNob3J0IHRlbXBheCAsCiAgICAgICAgICAgIHB1c2ggLAogICAgICAgICAgICB0ZW1wYnggLAogICAgICAgICAgICB0ZW1wICwKQEAgLTM3MDMsOSArMzY2Miw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9HZXRUVkluZm8oIFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgTW9kZUlkSW5kZXggLFBWQl9ERVZJQ0VfSU5GTyAgcFZCSW5mbyApCit2b2lkIFhHSV9HZXRUVkluZm8odW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCB0ZW1wICwKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wICwKICAgICAgICAgICAgdGVtcGJ4ID0gMCAsCiAgICAgICAgICAgIHJlc2luZm8gPSAwICwKICAgICAgICAgICAgbW9kZWZsYWcgLApAQCAtMzgzOCw5ICszNzk3LDEwIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1CT09MRUFOIFhHSV9HZXRMQ0RJbmZvKCBVU0hPUlQgTW9kZU5vICwgVVNIT1JUIE1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3Vuc2lnbmVkIGNoYXIgWEdJX0dldExDREluZm8odW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCSAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCB0ZW1wICwKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wICwKICAgICAgICAgICAgdGVtcGF4ICwKICAgICAgICAgICAgdGVtcGJ4ICwKICAgICAgICAgICAgbW9kZWZsYWcgLApAQCAtNDA0Nyw5NiArNDAwNywxMiBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotQk9PTEVBTiBYR0lfU2VhcmNoTW9kZUlEKCBVU0hPUlQgTW9kZU5vICwgVVNIT1JUICpNb2RlSWRJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordW5zaWduZWQgY2hhciBYR0lfU2VhcmNoTW9kZUlEKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCAqTW9kZUlkSW5kZXgsCisJCQkgICAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogCi0jaWZkZWYgVEMKIAotICAgIGlmICggTW9kZU5vIDw9IDUgKQotICAgICAgICBNb2RlTm8gfD0gMSA7Ci0KLSAgICBpZiAoIE1vZGVObyA8PSAweDEzICkKLSAgICB7Ci0gICAgICAgIC8qIGZvciAoKk1vZGVJZEluZGV4PTA7Kk1vZGVJZEluZGV4PHNpemVvZihwVkJJbmZvLT5TTW9kZUlEVGFibGUpL3NpemVvZihYR0lfU3RTdHJ1Y3QpOygqTW9kZUlkSW5kZXgpKyspICovCi0gICAgICAgIGZvciggKk1vZGVJZEluZGV4ID0gMCA7IDsgKCAqTW9kZUlkSW5kZXggKSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCBwVkJJbmZvLT5TTW9kZUlEVGFibGVbICpNb2RlSWRJbmRleCBdLlN0X01vZGVJRCA9PSBNb2RlTm8gKQotICAgICAgICAgICAgICAgIGJyZWFrIDsKLSAgICAgICAgICAgIGlmICggcFZCSW5mby0+U01vZGVJRFRhYmxlWyAqTW9kZUlkSW5kZXggXS5TdF9Nb2RlSUQgPT0gMHhGRiApCi0gICAgICAgICAgICAgICAgcmV0dXJuKCBGQUxTRSApIDsKLSAgICAgICAgfQotCi0gICAgICAgIFZHQV9JTkZPID0gKCBQVUNIQVIgKU1LX0ZQKCAwICwgMHg0ODkgKSA7Ci0KLSAgICAgICAgaWYgKCBNb2RlTm8gPT0gMHgwNyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICggKCAqVkdBX0lORk8gJiAweDEwICkgIT0gMCApCi0gICAgICAgICAgICAgICAgKCAqTW9kZUlkSW5kZXggKSsrIDsgLyogNDAwIGxpbmVzICovCi0gICAgICAgICAgICAvKiBlbHNlIDM1MCBsaW5lcyAqLwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBNb2RlTm8gPD0gMyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICggKCAqVkdBX0lORk8gJiAweDgwICkgPT0gMCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKCAqTW9kZUlkSW5kZXggKSsrIDsKLSAgICAgICAgICAgICAgICBpZiAoICggKlZHQV9JTkZPICYgMHgxMCApICE9IDAgKQotICAgICAgICAgICAgICAgICAgICAoICpNb2RlSWRJbmRleCApKysgOyAvKiA0MDAgbGluZXMgKi8KLSAgICAgICAgICAgICAgICAvKiBlbHNlIDM1MCBsaW5lcyAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogZWxzZSAyMDAgbGluZXMgKi8KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICAvKiBmb3IgKCpNb2RlSWRJbmRleD0wOypNb2RlSWRJbmRleDxzaXplb2YocFZCSW5mby0+RU1vZGVJRFRhYmxlKS9zaXplb2YoWEdJX0V4dFN0cnVjdCk7KCpNb2RlSWRJbmRleCkrKykgKi8KLSAgICAgICAgZm9yKCAqTW9kZUlkSW5kZXggPSAwIDsgOyAoICpNb2RlSWRJbmRleCApKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIHBWQkluZm8tPkVNb2RlSURUYWJsZVsgKk1vZGVJZEluZGV4IF0uRXh0X01vZGVJRCA9PSBNb2RlTm8gKQotICAgICAgICAgICAgICAgIGJyZWFrIDsKLSAgICAgICAgICAgIGlmICggcFZCSW5mby0+RU1vZGVJRFRhYmxlWyAqTW9kZUlkSW5kZXggXS5FeHRfTW9kZUlEID09IDB4RkYgKQotICAgICAgICAgICAgICAgIHJldHVybiggRkFMU0UgKSA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLQotI2VuZGlmCi0KLSNpZmRlZiBXSU4yMDAwCi0KLSAgICBpZiAoIE1vZGVObyA8PSA1ICkKLSAgICAgICAgTW9kZU5vIHw9IDEgOwotICAgIGlmICggTW9kZU5vIDw9IDB4MTMgKQotICAgIHsKLSAgICAgICAgLyogZm9yICgqTW9kZUlkSW5kZXg9MDsqTW9kZUlkSW5kZXg8c2l6ZW9mKHBWQkluZm8tPlNNb2RlSURUYWJsZSkvc2l6ZW9mKFhHSV9TdFN0cnVjdCk7KCpNb2RlSWRJbmRleCkrKykgKi8KLSAgICAgICAgZm9yKCAqTW9kZUlkSW5kZXggPSAwIDsgOyAoICpNb2RlSWRJbmRleCApKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIHBWQkluZm8tPlNNb2RlSURUYWJsZVsgKk1vZGVJZEluZGV4IF0uU3RfTW9kZUlEID09IE1vZGVObyApCi0gICAgICAgICAgICAgICAgYnJlYWsgOwotICAgICAgICAgICAgaWYgKCBwVkJJbmZvLT5TTW9kZUlEVGFibGVbICpNb2RlSWRJbmRleCBdLlN0X01vZGVJRCA9PSAweEZGICkKLSAgICAgICAgICAgICAgICByZXR1cm4oIEZBTFNFICkgOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBNb2RlTm8gPT0gMHgwNyApCi0gICAgICAgICAgICAoICpNb2RlSWRJbmRleCApKysgOyAvKiA0MDAgbGluZXMgKi8KLQotICAgICAgICBpZiAoIE1vZGVObyA8PTMgKQotICAgICAgICAgICAgKCAqTW9kZUlkSW5kZXggKSArPSAyIDsgLyogNDAwIGxpbmVzICovCi0gICAgICAgIC8qIGVsc2UgMzUwIGxpbmVzICovCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIC8qIGZvciAoKk1vZGVJZEluZGV4PTA7Kk1vZGVJZEluZGV4PHNpemVvZihwVkJJbmZvLT5FTW9kZUlEVGFibGUpL3NpemVvZihYR0lfRXh0U3RydWN0KTsoKk1vZGVJZEluZGV4KSsrKSAqLwotICAgICAgICBmb3IoICpNb2RlSWRJbmRleCA9IDAgOyA7ICggKk1vZGVJZEluZGV4ICkrKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICggcFZCSW5mby0+RU1vZGVJRFRhYmxlWyAqTW9kZUlkSW5kZXggXS5FeHRfTW9kZUlEID09IE1vZGVObyApCi0gICAgICAgICAgICAgICAgYnJlYWsgOwotICAgICAgICAgICAgaWYgKCBwVkJJbmZvLT5FTW9kZUlEVGFibGVbICpNb2RlSWRJbmRleCBdLkV4dF9Nb2RlSUQgPT0gMHhGRiApCi0gICAgICAgICAgICAgICAgcmV0dXJuKCBGQUxTRSApIDsKLSAgICAgICAgfQotICAgIH0KLQotI2VuZGlmCiAKICNpZmRlZiBMSU5VWCAvKiBjaGlhd2VuIGZvciBsaW51eCBzb2x1dGlvbiAqLwogCkBAIC00MTQ0LDEzICs0MDIwLDEzIEBACiAgICAgICAgIE1vZGVObyB8PSAxIDsKICAgICBpZiAoIE1vZGVObyA8PSAweDEzICkKICAgICB7Ci0gICAgICAgIC8qIGZvciAoKk1vZGVJZEluZGV4PTA7Kk1vZGVJZEluZGV4PHNpemVvZihwVkJJbmZvLT5TTW9kZUlEVGFibGUpL3NpemVvZihYR0lfU3RTdHJ1Y3QpOygqTW9kZUlkSW5kZXgpKyspICovCisJLyogZm9yICgqTW9kZUlkSW5kZXg9MDsqTW9kZUlkSW5kZXg8c2l6ZW9mKHBWQkluZm8tPlNNb2RlSURUYWJsZSkvc2l6ZW9mKHN0cnVjdCBYR0lfU3RTdHJ1Y3QpOygqTW9kZUlkSW5kZXgpKyspICovCiAgICAgICAgIGZvciggKk1vZGVJZEluZGV4ID0gMCA7IDsgKCAqTW9kZUlkSW5kZXggKSsrICkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCBwVkJJbmZvLT5TTW9kZUlEVGFibGVbICpNb2RlSWRJbmRleCBdLlN0X01vZGVJRCA9PSBNb2RlTm8gKQotICAgICAgICAgICAgICAgIGJyZWFrIDsKLSAgICAgICAgICAgIGlmICggcFZCSW5mby0+U01vZGVJRFRhYmxlWyAqTW9kZUlkSW5kZXggXS5TdF9Nb2RlSUQgPT0gMHhGRiApCi0gICAgICAgICAgICAgICAgcmV0dXJuKCBGQUxTRSApIDsKKwkJaWYgKHBWQkluZm8tPlNNb2RlSURUYWJsZVsqTW9kZUlkSW5kZXhdLlN0X01vZGVJRCA9PSBNb2RlTm8pCisJCQlicmVhazsKKwkJaWYgKHBWQkluZm8tPlNNb2RlSURUYWJsZVsqTW9kZUlkSW5kZXhdLlN0X01vZGVJRCA9PSAweEZGKQorCQkJcmV0dXJuIDA7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIE1vZGVObyA9PSAweDA3ICkKQEAgLTQxNjIsMTkgKzQwMzgsMTkgQEAKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgLyogZm9yICgqTW9kZUlkSW5kZXg9MDsqTW9kZUlkSW5kZXg8c2l6ZW9mKHBWQkluZm8tPkVNb2RlSURUYWJsZSkvc2l6ZW9mKFhHSV9FeHRTdHJ1Y3QpOygqTW9kZUlkSW5kZXgpKyspICovCisJLyogZm9yICgqTW9kZUlkSW5kZXg9MDsqTW9kZUlkSW5kZXg8c2l6ZW9mKHBWQkluZm8tPkVNb2RlSURUYWJsZSkvc2l6ZW9mKHN0cnVjdCBYR0lfRXh0U3RydWN0KTsoKk1vZGVJZEluZGV4KSsrKSAqLwogICAgICAgICBmb3IoICpNb2RlSWRJbmRleCA9IDAgOyA7ICggKk1vZGVJZEluZGV4ICkrKyApCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICggcFZCSW5mby0+RU1vZGVJRFRhYmxlWyAqTW9kZUlkSW5kZXggXS5FeHRfTW9kZUlEID09IE1vZGVObyApCi0gICAgICAgICAgICAgICAgYnJlYWsgOwotICAgICAgICAgICAgaWYgKCBwVkJJbmZvLT5FTW9kZUlEVGFibGVbICpNb2RlSWRJbmRleCBdLkV4dF9Nb2RlSUQgPT0gMHhGRiApCi0gICAgICAgICAgICAgICAgcmV0dXJuKCBGQUxTRSApIDsKKwkJaWYgKHBWQkluZm8tPkVNb2RlSURUYWJsZVsqTW9kZUlkSW5kZXhdLkV4dF9Nb2RlSUQgPT0gTW9kZU5vKQorCQkJYnJlYWs7CisJCWlmIChwVkJJbmZvLT5FTW9kZUlEVGFibGVbKk1vZGVJZEluZGV4XS5FeHRfTW9kZUlEID09IDB4RkYpCisJCQlyZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0KIAogI2VuZGlmCiAKLSAgICByZXR1cm4oIFRSVUUgKSA7CisgICAgcmV0dXJuIDE7CiB9CiAKIApAQCAtNDE4OCw5ICs0MDY0LDEyIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1CT09MRUFOIFhHSU5ld19DaGVja01lbW9yeVNpemUoUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbixVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCxQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3Vuc2lnbmVkIGNoYXIgWEdJTmV3X0NoZWNrTWVtb3J5U2l6ZShzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJCQkgICAgIHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCQkgICAgIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJCSAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBtZW1vcnlzaXplICwKKyAgICB1bnNpZ25lZCBzaG9ydCBtZW1vcnlzaXplICwKICAgICAgICAgICAgbW9kZWZsYWcgLAogICAgICAgICAgICB0ZW1wICwKICAgICAgICAgICAgdGVtcDEgLApAQCAtNDE5OSw3ICs0MDc4LDcgQEAKIC8qICBpZiAoICggSHdEZXZpY2VFeHRlbnNpb24tPmpDaGlwVHlwZSA9PSBYR0lfNjUwICkgfHwKICAgICAgICAgICggSHdEZXZpY2VFeHRlbnNpb24tPmpDaGlwVHlwZSA9PSBYR0lfNjUwTSApICkKICAgICB7Ci0gICAgICAgIHJldHVybiggVFJVRSApIDsKKwlyZXR1cm4gMTsKICAgICB9ICovCiAKICAgICBpZiAoIE1vZGVObyA8PSAweDEzICkKQEAgLTQyNTcsMTAgKzQxMzYsMTAgQEAKICAgICAgICAgICAgIHRlbXAgPDw9IDEgOwogICAgICAgICB9CiAgICAgfQotICAgIGlmICggdGVtcCA8IG1lbW9yeXNpemUgKQotICAgICAgICByZXR1cm4oIEZBTFNFICkgOworICAgIGlmICh0ZW1wIDwgbWVtb3J5c2l6ZSkKKwkgICAgcmV0dXJuIDA7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4oIFRSVUUgKSA7CisJICAgIHJldHVybiAxOwogfQogCiAKQEAgLTQyNzAsMTAgKzQxNDksMTAgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qdm9pZCBYR0lOZXdfSXNMb3dSZXNvbHV0aW9uKCBVU0hPUlQgTW9kZU5vICwgVVNIT1JUIE1vZGVJZEluZGV4LCBCT09MRUFOIFhHSU5ld19DaGVja01lbW9yeVNpemUoUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbixVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCxQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKKy8qdm9pZCBYR0lOZXdfSXNMb3dSZXNvbHV0aW9uKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHVuc2lnbmVkIGNoYXIgWEdJTmV3X0NoZWNrTWVtb3J5U2l6ZShzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgdW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBkYXRhIDsKLSAgICBVU0hPUlQgTW9kZUZsYWcgOworICAgIHVuc2lnbmVkIHNob3J0IGRhdGEgOworICAgIHVuc2lnbmVkIHNob3J0IE1vZGVGbGFnIDsKIAogICAgIGRhdGEgPSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MEYgKSA7CiAgICAgZGF0YSAmPSAweDdGIDsKQEAgLTQzMDIsNyArNDE4MSw3IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9EaXNwbGF5T24oIFBYR0lfSFdfREVWSUNFX0lORk8gcFhHSUhXREUgLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9EaXNwbGF5T24oc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqcFhHSUhXREUsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKIAogICAgIFhHSU5ld19TZXRSZWdBTkRPUihwVkJJbmZvLT5QM2M0LDB4MDEsMHhERiwweDAwKTsKQEAgLTQzMzEsMTIgKzQyMTAsNiBAQAogCiAgICAgaWYgKHBWQkluZm8tPklGX0RFRl9DSDcwMDcgPT0gMSkgLyogW0JpbGx5XSAwNy8wNS8yMyBGb3IgQ0g3MDA3ICovCiAgICAgewotI2lmZGVmIFdJTjIwMDAKLSAgICAgICBpZiAoIElzQ0g3MDA3VFZNb2RlKCBwVkJJbmZvICkgKQotICAgICAgIHsKLSAgICAgICAgICAgVHVybk9uQ0g3MDA3KHBYR0lIV0RFLT5wRGV2aWNlKSA7IC8qIDA3LzA1LzI4ICovCi0gICAgICAgfQotI2VuZGlmCiAKICAgICB9CiAKQEAgLTQzNzIsNyArNDI0NSw3IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9EaXNwbGF5T2ZmKCBQWEdJX0hXX0RFVklDRV9JTkZPIHBYR0lIV0RFICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfRGlzcGxheU9mZihzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpwWEdJSFdERSwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogCiAgICAgaWYgKCBwWEdJSFdERS0+akNoaXBUeXBlID09IFhHMjEgKQpAQCAtNDM5Miw5ICs0MjY1LDYgQEAKICAgICB7CiAgICAgICAgLyogaWYoIElzQ0g3MDA3VFZNb2RlKCBwVkJJbmZvICkgPT0gMCApICovCiAgICAgICAgewotI2lmZGVmIFdJTjIwMDAKLSAgICAgICAgIFR1cm5PZmZDSDcwMDcocFhHSUhXREUtPnBEZXZpY2UpIDsgIC8qIDA3LzA1LzI4ICovCi0jZW5kaWYKICAgICAgICB9CiAgICAgfQogCkBAIC00NDIzLDcgKzQyOTMsNyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogY2hpYXdlbiBmb3Igc2Vuc2VjcnQxICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1dhaXREaXNwbHkoIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1dhaXREaXNwbHkoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogICAgIHdoaWxlKCAoIFhHSU5ld19HZXRSZWcyKCBwVkJJbmZvLT5QM2RhICkgJiAweDAxICkgKQogICAgICAgICBicmVhayA7CkBAIC00NDM5LDU4ICs0MzA5LDU5IEBACiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotdm9pZCBYR0lfU2Vuc2VDUlQxKCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9TZW5zZUNSVDEoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVDSEFSIENSVENEYXRhWyAxNyBdID0geyAweDVGICwgMHg0RiAsIDB4NTAgLCAweDgyICwgMHg1NSAsIDB4ODEgLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCICwgMHgzRSAsIDB4RTkgLCAweDBCICwgMHhERiAsIDB4RTcgLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0ICwgMHgwMCAsIDB4MDAgLCAweDA1ICwgMHgwMCB9IDsKKwl1bnNpZ25lZCBjaGFyIENSVENEYXRhWzE3XSA9IHsKKwkJMHg1RiAsIDB4NEYgLCAweDUwICwgMHg4MiAsIDB4NTUgLCAweDgxICwKKwkJMHgwQiAsIDB4M0UgLCAweEU5ICwgMHgwQiAsIDB4REYgLCAweEU3ICwKKwkJMHgwNCAsIDB4MDAgLCAweDAwICwgMHgwNSAsIDB4MDAgfTsKIAotICAgIFVDSEFSIFNSMDEgPSAwICwgU1IxRiA9IDAgLCBTUjA3ID0gMCAsIFNSMDYgPSAwIDsKKwl1bnNpZ25lZCBjaGFyIFNSMDEgPSAwLCBTUjFGID0gMCwgU1IwNyA9IDAsIFNSMDYgPSAwOwogCi0gICAgVUNIQVIgQ1IxNyAsIENSNjMgLCBTUjMxIDsKLSAgICBVU0hPUlQgdGVtcCA7Ci0gICAgVUNIQVIgREFDX1RFU1RfUEFSTVNbIDMgXSA9IHsgMHgwRiAsIDB4MEYgLCAweDBGIH0gOworCXVuc2lnbmVkIGNoYXIgQ1IxNywgQ1I2MywgU1IzMTsKKwl1bnNpZ25lZCBzaG9ydCB0ZW1wIDsKKwl1bnNpZ25lZCBjaGFyIERBQ19URVNUX1BBUk1TWzNdID0geyAweDBGLCAweDBGLCAweDBGIH0gOwogCiAgICAgaW50IGkgOwogICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgwNSAsIDB4ODYgKSA7CiAKICAgICAvKiBbMjAwNC8wNS8wNl0gVmljZW50IHRvIGZpeCBYRzQyIHNpbmdsZSBMQ0Qgc2Vuc2UgdG8gQ1JUK0xDRCAqLwogICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHg1NyAsIDB4NEEgKSA7Ci0gICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDUzICwgKCBVQ0hBUiApKCBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4NTMgKSB8IDB4MDIgKSApIDsKKyAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QM2Q0LCAweDUzLCAodW5zaWduZWQgY2hhcikoWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UDNkNCwgMHg1MykgfCAweDAyKSk7CiAKLSAgICBTUjMxID0gKCBVQ0hBUiApWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDMxICkgOwotICAgIENSNjMgPSAoIFVDSEFSIClYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4NjMgKSA7Ci0gICAgU1IwMSA9ICggVUNIQVIgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgwMSApIDsKKyAgICBTUjMxID0gKHVuc2lnbmVkIGNoYXIpWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UDNjNCwgMHgzMSk7CisgICAgQ1I2MyA9ICh1bnNpZ25lZCBjaGFyKVhHSU5ld19HZXRSZWcxKHBWQkluZm8tPlAzZDQsIDB4NjMpOworICAgIFNSMDEgPSAodW5zaWduZWQgY2hhcilYR0lOZXdfR2V0UmVnMShwVkJJbmZvLT5QM2M0LCAweDAxKTsKIAotICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgwMSAsICggVUNIQVIgKSggU1IwMSAmIDB4REYgKSApIDsKLSAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4NjMgLCAoIFVDSEFSICkoIENSNjMgJiAweEJGICkgKSA7CisgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UDNjNCwgMHgwMSwgKHVuc2lnbmVkIGNoYXIpKFNSMDEgJiAweERGKSk7CisgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UDNkNCwgMHg2MywgKHVuc2lnbmVkIGNoYXIpKENSNjMgJiAweEJGKSk7CiAKLSAgICBDUjE3ID0gKCBVQ0hBUiApWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDE3ICkgOwotICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHgxNyAsICggVUNIQVIgKSggQ1IxNyB8IDB4ODAgKSApIDsKKyAgICBDUjE3ID0gKHVuc2lnbmVkIGNoYXIpWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UDNkNCwgMHgxNyk7CisgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UDNkNCwgMHgxNywgKHVuc2lnbmVkIGNoYXIpKENSMTcgfCAweDgwKSkgOwogCi0gICAgU1IxRiA9ICggVUNIQVIgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgxRiApIDsKLSAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MUYgLCAoIFVDSEFSICkoIFNSMUYgfCAweDA0ICkgKSA7CisgICAgU1IxRiA9ICh1bnNpZ25lZCBjaGFyKVhHSU5ld19HZXRSZWcxKHBWQkluZm8tPlAzYzQsIDB4MUYpOworICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlAzYzQsIDB4MUYsICh1bnNpZ25lZCBjaGFyKShTUjFGIHwgMHgwNCkpOwogCi0gICAgU1IwNyA9ICggVUNIQVIgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgwNyApIDsKLSAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MDcgLCAoIFVDSEFSICkoIFNSMDcgJiAweEZCICkgKSA7Ci0gICAgU1IwNiA9ICggVUNIQVIgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgwNiApIDsKLSAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MDYgLCAoIFVDSEFSICkoIFNSMDYgJiAweEMzICkgKSA7CisgICAgU1IwNyA9ICh1bnNpZ25lZCBjaGFyKVhHSU5ld19HZXRSZWcxKHBWQkluZm8tPlAzYzQsIDB4MDcpOworICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlAzYzQsIDB4MDcsICh1bnNpZ25lZCBjaGFyKShTUjA3ICYgMHhGQikpOworICAgIFNSMDYgPSAodW5zaWduZWQgY2hhcilYR0lOZXdfR2V0UmVnMShwVkJJbmZvLT5QM2M0LCAweDA2KTsKKyAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QM2M0LCAweDA2LCAodW5zaWduZWQgY2hhcikoU1IwNiAmIDB4QzMpKTsKIAogICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHgxMSAsIDB4MDAgKSA7CiAKICAgICBmb3IoIGkgPSAwIDsgaSA8IDggOyBpKysgKQotICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNkNCAsICggVVNIT1JUIClpICwgQ1JUQ0RhdGFbIGkgXSApIDsKKwkgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UDNkNCwgKHVuc2lnbmVkIHNob3J0KWksIENSVENEYXRhW2ldKTsKIAogICAgIGZvciggaSA9IDggOyBpIDwgMTEgOyBpKysgKQotICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNkNCAsICggVVNIT1JUICkoIGkgKyA4ICkgLCBDUlRDRGF0YVsgaSBdICkgOworCSAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QM2Q0LCAodW5zaWduZWQgc2hvcnQpKGkgKyA4KSwgQ1JUQ0RhdGFbaV0pOwogCiAgICAgZm9yKCBpID0gMTEgOyBpIDwgMTMgOyBpKysgKQotICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNkNCAsICggVVNIT1JUICkoIGkgKyA0ICkgLCBDUlRDRGF0YVsgaSBdICkgOworCSAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QM2Q0LCAodW5zaWduZWQgc2hvcnQpKGkgKyA0KSwgQ1JUQ0RhdGFbaV0pOwogCiAgICAgZm9yKCBpID0gMTMgOyBpIDwgMTYgOyBpKysgKQotICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsICggVVNIT1JUICkoIGkgLSAzICkgLCBDUlRDRGF0YVsgaSBdICkgOworCSAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QM2M0LCAodW5zaWduZWQgc2hvcnQpKGkgLSAzKSwgQ1JUQ0RhdGFbaV0pOwogCi0gICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDBFICwgKCBVQ0hBUiApKCBDUlRDRGF0YVsgMTYgXSAmIDB4RTAgKSApIDsKKyAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QM2M0LCAweDBFLCAodW5zaWduZWQgY2hhcikoQ1JUQ0RhdGFbMTZdICYgMHhFMCkpOwogCiAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDMxICwgMHgwMCApIDsKICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MkIgLCAweDFCICkgOwpAQCAtNDUwMCw5ICs0MzcxLDkgQEAKIAogICAgIGZvciggaSA9IDAgOyBpIDwgMjU2IDsgaSsrICkKICAgICB7Ci0gICAgICAgIFhHSU5ld19TZXRSZWczKCAoIHBWQkluZm8tPlAzYzggKyAxICkgLCAoIFVDSEFSIClEQUNfVEVTVF9QQVJNU1sgMCBdICkgOwotICAgICAgICBYR0lOZXdfU2V0UmVnMyggKCBwVkJJbmZvLT5QM2M4ICsgMSApICwgKCBVQ0hBUiApREFDX1RFU1RfUEFSTVNbIDEgXSApIDsKLSAgICAgICAgWEdJTmV3X1NldFJlZzMoICggcFZCSW5mby0+UDNjOCArIDEgKSAsICggVUNIQVIgKURBQ19URVNUX1BBUk1TWyAyIF0gKSA7CisJWEdJTmV3X1NldFJlZzMoKHBWQkluZm8tPlAzYzggKyAxKSwgKHVuc2lnbmVkIGNoYXIpREFDX1RFU1RfUEFSTVNbMF0pOworCVhHSU5ld19TZXRSZWczKChwVkJJbmZvLT5QM2M4ICsgMSksICh1bnNpZ25lZCBjaGFyKURBQ19URVNUX1BBUk1TWzFdKTsKKwlYR0lOZXdfU2V0UmVnMygocFZCSW5mby0+UDNjOCArIDEpLCAodW5zaWduZWQgY2hhcilEQUNfVEVTVF9QQVJNU1syXSk7CiAgICAgfQogCiAgICAgWEdJX1ZCTG9uZ1dhaXQoIHBWQkluZm8gKSA7CkBAIC00NTM4LDE0OCArNDQwOSwxOCBAQAogICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgzMSAsIFNSMzEgKSA7CiAKICAgICAvKiBbMjAwNC8wNS8xMV0gVmljZW50ICovCi0gICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDUzICwgKCBVQ0hBUiApKCBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4NTMgKSAmIDB4RkQgKSApIDsKLSAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MUYgLCAoIFVDSEFSICkgU1IxRiApIDsKKyAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QM2Q0LCAweDUzLAorCQkgICAodW5zaWduZWQgY2hhcikoWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UDNkNCwgMHg1MykgJiAweEZEKSk7CisgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UDNjNCwgMHgxRiwgKHVuc2lnbmVkIGNoYXIpU1IxRik7CiB9CiAKIAogCiAKIAotI2lmZGVmIFRDCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qIEZ1bmN0aW9uIDogSU5UMUFSZXR1cm5Db2RlICovCi0vKiBJbnB1dCA6ICovCi0vKiBPdXRwdXQgOiAqLwotLyogRGVzY3JpcHRpb24gOiAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1pbnQgSU5UMUFSZXR1cm5Db2RlKCB1bmlvbiBSRUdTIHJlZ3MgKQotewotICAgIGlmICggcmVncy54LmNmbGFnICkKLSAgICB7Ci0gICAgICAgIC8qIHByaW50ZiggIkVycm9yIHRvIGZpbmQgcGNpIGRldmljZSFcbiIgKSA7ICovCi0gICAgICAgIHJldHVybiggMSApIDsKLSAgICB9Ci0KLSAgICBzd2l0Y2gocmVncy5oLmFoKQotICAgIHsKLSAgICAgICAgY2FzZSAwOiByZXR1cm4gMDsKLSAgICAgICAgICAgIGJyZWFrIDsKLSAgICAgICAgY2FzZSAweDgxOgotICAgICAgICAgICAgcHJpbnRmKCAiRnVuY3Rpb24gbm90IHN1cHBvcnRcbiIgKSA7Ci0gICAgICAgICAgICBicmVhayA7Ci0gICAgICAgIGNhc2UgMHg4MzoKLSAgICAgICAgICAgIHByaW50ZiggImJhZCB2ZW5kb3IgaWRcbiIgKSA7Ci0gICAgICAgICAgICBicmVhayA7Ci0gICAgICAgIGNhc2UgMHg4NjoKLSAgICAgICAgICAgIHByaW50ZiggImRldmljZSBub3QgZm91bmRcbiIgKSA7Ci0gICAgICAgICAgICBicmVhayA7Ci0gICAgICAgIGNhc2UgMHg4NzoKLSAgICAgICAgICAgIHByaW50ZiggImJhZCByZWdpc3RlciBudW1iZXJcbiIgKSA7Ci0gICAgICAgICAgICBicmVhayA7Ci0gICAgICAgIGNhc2UgMHg4ODoKLSAgICAgICAgICAgIHByaW50ZiggInNldCBmYWlsZWRcbiIgKSA7Ci0gICAgICAgICAgICBicmVhayA7Ci0gICAgICAgIGNhc2UgMHg4OToKLSAgICAgICAgICAgIHByaW50ZiggImJ1ZmZlciB0b28gc21hbGwiICkgOwotICAgICAgICAgICAgYnJlYWsgOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWsgOwotICAgIH0KLSAgICByZXR1cm4oIDEgKSA7Ci19Ci0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBGdW5jdGlvbiA6IEZpbmRQQ0lJT0Jhc2UgKi8KLS8qIElucHV0IDogKi8KLS8qIE91dHB1dCA6ICovCi0vKiBEZXNjcmlwdGlvbiA6ICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXVuc2lnbmVkIEZpbmRQQ0lJT0Jhc2UoIHVuc2lnbmVkIGluZGV4ICwgdW5zaWduZWQgZGV2aWNlaWQgKQotewotICAgIHVuaW9uIFJFR1MgcmVncyA7Ci0KLSAgICByZWdzLmguYWggPSAweGIxIDsJLyogUENJX0ZVTkNUSU9OX0lEICovCi0gICAgcmVncy5oLmFsID0gMHgwMiA7CS8qIEZJTkRfUENJX0RFVklDRSAqLwotICAgIHJlZ3MueC5jeCA9IGRldmljZWlkIDsKLSAgICByZWdzLnguZHggPSAweDEwMzkgOwotICAgIHJlZ3MueC5zaSA9IGluZGV4IDsJLyogZmluZCBuLXRoIGRldmljZSAqLwotCi0gICAgaW50ODYoIDB4MUEgLCAmcmVncyAsICZyZWdzICkgOwotCi0gICAgaWYgKCBJTlQxQVJldHVybkNvZGUoIHJlZ3MgKSAhPSAwICkKLSAgICAgICAgcmV0dXJuKCAwICkgOwotCi0gICAgLyogcmVncy5oLmJoIGJ1cyBudW1iZXIgKi8KLSAgICAvKiByZWdzLmguYmwgZGV2aWNlIG51bWJlciAqLwotICAgIHJlZ3MuaC5haCA9IDB4YjEgOyAgLyogUENJX0ZVTkNUSU9OX0lEICovCi0gICAgcmVncy5oLmFsID0gMHgwOSA7ICAvKiBSRUFEX0NPTkZJR19XT1JEICovCi0gICAgcmVncy54LmN4ID0gZGV2aWNlaWQgOwotICAgIHJlZ3MueC5keCA9IDB4MTAzOSA7Ci0gICAgcmVncy54LmRpID0gMHgxOCA7ICAvKiByZWdpc3RlciBudW1iZXIgKi8KLSAgICBpbnQ4NiggMHgxQSAsICZyZWdzICwgJnJlZ3MgKSA7Ci0KLSAgICBpZiAoIElOVDFBUmV0dXJuQ29kZSggcmVncyApICE9IDAgKQotICAgICAgICByZXR1cm4oIDAgKSA7Ci0KLSAgICByZXR1cm4oIHJlZ3MueC5jeCApIDsKLX0KLQotI2VuZGlmCiAKIAogCi0jaWZkZWYgVEMKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogRnVuY3Rpb24gOiBtYWluICovCi0vKiBJbnB1dCA6ICovCi0vKiBPdXRwdXQgOiAqLwotLyogRGVzY3JpcHRpb24gOiAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLSAgICBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gOwotICAgIFVTSE9SVCB0ZW1wIDsKLSAgICBVU0hPUlQgTW9kZU5vIDsKLQotICAgIC8qIEh3RGV2aWNlRXh0ZW5zaW9uLnBqVmlydHVhbFJvbUJhc2UgPShQVUNIQVIpIE1LX0ZQKDB4QzAwMCwwKTsgKi8KLSAgICAvKiBId0RldmljZUV4dGVuc2lvbi5walZpZGVvTWVtb3J5QWRkcmVzcyA9IChQVUNIQVIpTUtfRlAoMHhBMDAwLDApOyAqLwotCi0KLSAgICBId0RldmljZUV4dGVuc2lvbi5waklPQWRkcmVzcyA9ICggRmluZFBDSUlPQmFzZSggMCAsMHg2MzAwICkgJiAweEZGODAgKSArIDB4MzAgOwotICAgIEh3RGV2aWNlRXh0ZW5zaW9uLmpDaGlwVHlwZSA9IFhHSV8zNDAgOwotCi0KLQotICAgIC8qIEh3RGV2aWNlRXh0ZW5zaW9uLnBqSU9BZGRyZXNzID0gKCBGaW5kUENJSU9CYXNlKCAwICwgMHg1MzE1ICkgJiAweEZGODAgKSArIDB4MzAgOyAqLwotCi0gICAgSHdEZXZpY2VFeHRlbnNpb24ucGpJT0FkZHJlc3MgPSAoIEZpbmRQQ0lJT0Jhc2UoIDAgLCAweDMzMCApICYgMHhGRjgwICkgKyAweDMwIDsKLSAgICBId0RldmljZUV4dGVuc2lvbi5qQ2hpcFR5cGUgPSBYR0lfMzQwIDsKLQotCi0gICAgSHdEZXZpY2VFeHRlbnNpb24udWpWQkNoaXBJRCA9IFZCX0NISVBfMzAxIDsKLSAgICBTdHJDcHkoSHdEZXZpY2VFeHRlbnNpb24uc3pWQklPU1ZlciAsICIwLjg0IiApIDsKLSAgICBId0RldmljZUV4dGVuc2lvbi5iU2tpcERyYW1TaXppbmcgPSBGQUxTRSA7Ci0gICAgSHdEZXZpY2VFeHRlbnNpb24udWxWaWRlb01lbW9yeVNpemUgPSAwIDsKLQotICAgIGlmICggYXJnYyA9PSAyICkKLSAgICB7Ci0gICAgICAgIE1vZGVObyA9IGF0b2koIGFyZ3ZbIDEgXSApIDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgTW9kZU5vID0gMHgyZSA7Ci0gICAgICAgIC8qIE1vZGVObyA9IDB4MzcgOyAxMDI0eDc2OHggNGJwcCAqLwotICAgICAgICAvKiBNb2RlTm8gPSAweDM4IDsgMTAyNHg3Njh4IDhicHAgKi8KLSAgICAgICAgLyogTW9kZU5vID0gMHg0QSA7IDEwMjR4NzY4eCAxNmJwcCAqLwotICAgICAgICAvKiBNb2RlTm8gPSAweDQ3IDsgODAweDYwMHggMTZicHAgKi8KLSAgICB9Ci0KLSAgICAvKiBYR0lJbml0TmV3KCAmSHdEZXZpY2VFeHRlbnNpb24gKSA7ICovCi0gICAgWEdJU2V0TW9kZU5ldyggJkh3RGV2aWNlRXh0ZW5zaW9uICwgTW9kZU5vICkgOwotfQotI2VuZGlmCiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC00Njg4LDcgKzQ0MjksNyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfV2FpdERpc3BsYXkoIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1dhaXREaXNwbGF5KHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKICAgICB3aGlsZSggISggWEdJTmV3X0dldFJlZzIoIHBWQkluZm8tPlAzZGEgKSAmIDB4MDEgKSApIDsKIApAQCAtNDcwNCw5ICs0NDQ1LDExIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1CT09MRUFOIFhHSV9TZXRDUlQyR3JvdXAzMDEoIFVTSE9SVCBNb2RlTm8gLCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit1bnNpZ25lZCBjaGFyIFhHSV9TZXRDUlQyR3JvdXAzMDEodW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkJCSAgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCQkJICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXBieCAsCisgICAgdW5zaWduZWQgc2hvcnQgdGVtcGJ4ICwKICAgICAgICAgICAgTW9kZUlkSW5kZXggLAogICAgICAgICAgICBSZWZyZXNoUmF0ZVRhYmxlSW5kZXggOwogCkBAIC00NzM5LDcgKzQ0ODIsNyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfQXV0b1RocmVzaG9sZCggIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX0F1dG9UaHJlc2hvbGQoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogICAgIGlmICggISggcFZCSW5mby0+U2V0RmxhZyAmIFdpbjl4RE9TTW9kZSApICkKICAgICAgIFhHSU5ld19TZXRSZWdPUiggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgwMSAsIDB4NDAgKSA7CkBAIC00NzUyLDkgKzQ0OTUsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2F2ZUNSVDJJbmZvKCBVU0hPUlQgTW9kZU5vICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSV9TYXZlQ1JUMkluZm8odW5zaWduZWQgc2hvcnQgTW9kZU5vLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXAxICwKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wMSAsCiAgICAgICAgICAgIHRlbXAyIDsKIAogICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHgzNCAsIE1vZGVObyApIDsgIC8qIHJlc2VydmUgQ1IzNCBmb3IgQ1JUMSBNb2RlIE5vICovCkBAIC00NzcwLDkgKzQ1MTMsMTEgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX0dldENSVDJSZXNJbmZvKCBVU0hPUlQgTW9kZU5vICwgVVNIT1JUIE1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9HZXRDUlQyUmVzSW5mbyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCQl1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCXN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgeHJlcyAsCisgICAgdW5zaWduZWQgc2hvcnQgeHJlcyAsCiAgICAgICAgICAgIHlyZXMgLAogICAgICAgICAgICBtb2RlZmxhZyAsCiAgICAgICAgICAgIHJlc2luZGV4IDsKQEAgLTQ4NjcsNyArNDYxMiw3IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1CT09MRUFOIFhHSV9Jc0xDRER1YWxMaW5rKCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit1bnNpZ25lZCBjaGFyIFhHSV9Jc0xDRER1YWxMaW5rKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKIAogICAgIGlmICggKCAoICggcFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvTENEICkgfCBTZXRDUlQyVG9MQ0RBICkgKSAmJiAoIHBWQkluZm8tPkxDREluZm8gJiBTZXRMQ0REdWFsTGluayApICkgLyogc2hhbXBvbzAxMjkgKi8KQEAgLTQ4ODMsMTUgKzQ2MjgsMTUgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX0dldENSVDJEYXRhKCAgVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCAsIFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX0dldENSVDJEYXRhKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCB0ZW1wYXggPSAwLAorICAgIHVuc2lnbmVkIHNob3J0IHRlbXBheCA9IDAsCiAgICAgICAgICAgIHRlbXBieCAsCiAgICAgICAgICAgIG1vZGVmbGFnICwKICAgICAgICAgICAgcmVzaW5mbyA7CiAKLSAgICBYR0lfTENERGF0YVN0cnVjdCAqTENEUHRyID0gTlVMTCA7Ci0gICAgWEdJX1RWRGF0YVN0cnVjdCAgKlRWUHRyID0gTlVMTCA7CisgICAgc3RydWN0IFhHSV9MQ0REYXRhU3RydWN0ICpMQ0RQdHIgPSBOVUxMIDsKKyAgICBzdHJ1Y3QgWEdJX1RWRGF0YVN0cnVjdCAgKlRWUHRyID0gTlVMTCA7CiAKICAgICBpZiAoIE1vZGVObyA8PSAweDEzICkKICAgICB7CkBAIC00OTE3LDcgKzQ2NjIsNyBAQAogCiAgICAgaWYgKCBwVkJJbmZvLT5WQkluZm8gJiAoIFNldENSVDJUb0xDRCB8IFNldENSVDJUb0xDREEgKSApCiAgICAgewotICAgICAgICBMQ0RQdHIgPSAoWEdJX0xDRERhdGFTdHJ1Y3QqIClYR0lfR2V0TGNkUHRyKCB0ZW1wYngsIE1vZGVObyAsIE1vZGVJZEluZGV4ICwgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBwVkJJbmZvICkgOworCUxDRFB0ciA9IChzdHJ1Y3QgWEdJX0xDRERhdGFTdHJ1Y3QgKilYR0lfR2V0TGNkUHRyKHRlbXBieCwgTW9kZU5vLCBNb2RlSWRJbmRleCwgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBwVkJJbmZvKTsKIAogICAgICAgICBwVkJJbmZvLT5SVkJIQ01BWCA9IExDRFB0ci0+UlZCSENNQVggOwogICAgICAgICBwVkJJbmZvLT5SVkJIQ0ZBQ1QgPSBMQ0RQdHItPlJWQkhDRkFDVCA7CkBAIC01MDIxLDcgKzQ3NjYsNyBAQAogICAgIGlmICggcFZCSW5mby0+VkJJbmZvICYgKCBTZXRDUlQyVG9UViApICkKICAgICB7CiAgICAgICAgIHRlbXBieCA9IDQgOwotICAgICAgICBUVlB0ciA9ICggWEdJX1RWRGF0YVN0cnVjdCAqIClYR0lfR2V0VFZQdHIoIHRlbXBieCAsIE1vZGVObyAsIE1vZGVJZEluZGV4ICwgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBwVkJJbmZvICkgOworCVRWUHRyID0gKHN0cnVjdCBYR0lfVFZEYXRhU3RydWN0ICopWEdJX0dldFRWUHRyKHRlbXBieCwgTW9kZU5vLCBNb2RlSWRJbmRleCwgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBwVkJJbmZvKTsKIAogICAgICAgICBwVkJJbmZvLT5SVkJIQ01BWCA9IFRWUHRyLT5SVkJIQ01BWCA7CiAgICAgICAgIHBWQkluZm8tPlJWQkhDRkFDVCA9IFRWUHRyLT5SVkJIQ0ZBQ1QgOwpAQCAtNTEwOSwxMSArNDg1NCw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRDUlQyVkNMSyggVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCAsIFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1NldENSVDJWQ0xLKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVDSEFSIGRpXzAgLAotICAgICAgICAgIGRpXzEgLAotICAgICAgICAgIHRlbXBhbCA7CisJdW5zaWduZWQgY2hhciBkaV8wLCBkaV8xLCB0ZW1wYWw7CiAKICAgICB0ZW1wYWwgPSBYR0lfR2V0VkNMS1B0ciggUmVmcmVzaFJhdGVUYWJsZUluZGV4ICwgTW9kZU5vICwgTW9kZUlkSW5kZXgsIHBWQkluZm8gKSA7CiAgICAgWEdJX0dldFZDTEtMZW4oIHRlbXBhbCwgJmRpXzAgLCAmZGlfMSwgcFZCSW5mbyApIDsKQEAgLTUxNDYsOSArNDg4OSwxMCBAQAogLyogT3V0cHV0IDogYWwgLT4gVkNMSyBJbmRleCAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9HZXRMQ0RWQ0xLUHRyKCBVQ0hBUiogZGlfMCAsIFVDSEFSICpkaV8xLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9HZXRMQ0RWQ0xLUHRyKHVuc2lnbmVkIGNoYXIgKmRpXzAsIHVuc2lnbmVkIGNoYXIgKmRpXzEsCisJCSAgICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIGluZGV4IDsKKyAgICB1bnNpZ25lZCBzaG9ydCBpbmRleCA7CiAKICAgICBpZiAoIHBWQkluZm8tPlZCSW5mbyAmICggU2V0Q1JUMlRvTENEIHwgU2V0Q1JUMlRvTENEQSApICkKICAgICB7CkBAIC01MTgyLDE3ICs0OTI2LDE2IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1VQ0hBUiBYR0lfR2V0VkNMS1B0cihVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3Vuc2lnbmVkIGNoYXIgWEdJX0dldFZDTEtQdHIodW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LAorCQkJICAgICB1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAKLSAgICBVU0hPUlQgaW5kZXggLAorICAgIHVuc2lnbmVkIHNob3J0IGluZGV4ICwKICAgICAgICAgICAgbW9kZWZsYWcgOwotI2lmbmRlZiBMSU5VWF9YRjg2Ci0gICAgVVNIT1JUIHRlbXBieCA7Ci0jZW5kaWYKLQotICAgIFVDSEFSIHRlbXBhbCA7Ci0gICAgVUNIQVIgKkNIVFZWQ0xLUHRyID0gTlVMTCA7CisgICAgdW5zaWduZWQgc2hvcnQgdGVtcGJ4IDsKKyAgICB1bnNpZ25lZCBjaGFyIHRlbXBhbDsKKyAgICB1bnNpZ25lZCBjaGFyICpDSFRWVkNMS1B0ciA9IE5VTEw7CiAKICAgICBpZiAoIE1vZGVObyA8PSAweDEzICkKICAgICAgICAgbW9kZWZsYWcgPSBwVkJJbmZvLT5TTW9kZUlEVGFibGVbIE1vZGVJZEluZGV4IF0uU3RfTW9kZUZsYWcgOyAgICAgIC8qIHNpK1N0X1Jlc0luZm8gKi8KQEAgLTUzNDQsNyArNTA4Nyw3IEBACiAKICAgICB9CiAKLSAgICB0ZW1wYWwgPSAoIFVDSEFSIClYR0lOZXdfR2V0UmVnMiggKCBwVkJJbmZvLT5QM2NhICsgMHgwMiApICkgOworICAgIHRlbXBhbCA9ICh1bnNpZ25lZCBjaGFyKVhHSU5ld19HZXRSZWcyKChwVkJJbmZvLT5QM2NhICsgMHgwMikpOwogICAgIHRlbXBhbCA9IHRlbXBhbCA+PiAyIDsKICAgICB0ZW1wYWwgJj0gMHgwMyA7CiAKQEAgLTUzNjUsMTkgKzUxMDgsMjAgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX0dldFZDTEtMZW4oVUNIQVIgdGVtcGFsLFVDSEFSKiBkaV8wLFVDSEFSKiBkaV8xLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJX0dldFZDTEtMZW4odW5zaWduZWQgY2hhciB0ZW1wYWwsIHVuc2lnbmVkIGNoYXIgKmRpXzAsCisJCSAgICB1bnNpZ25lZCBjaGFyICpkaV8xLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAgICAgaWYgKCBwVkJJbmZvLT5JRl9ERUZfQ0g3MDA3ID09IDEgKSAvKiBbQmlsbHldIDIwMDcvMDUvMTYgKi8KICAgICB7CiAgICAgICAgLyogVmlkZW9EZWJ1Z1ByaW50KCgwLCAiWEdJX0dldFZDTEtMZW46IHBWQkluZm8tPklGX0RFRl9DSDcwMDc9PTFcbiIpKTsgKi8KLSAgICAgICAgKmRpXzAgPSAoIFVDSEFSIClYR0lfQ0g3MDA3VkNMS0RhdGFbIHRlbXBhbCBdLlNSMkIgOwotICAgICAgICAqZGlfMSA9ICggVUNIQVIgKVhHSV9DSDcwMDdWQ0xLRGF0YVsgdGVtcGFsIF0uU1IyQyA7CisJKmRpXzAgPSAodW5zaWduZWQgY2hhcilYR0lfQ0g3MDA3VkNMS0RhdGFbdGVtcGFsXS5TUjJCOworCSpkaV8xID0gKHVuc2lnbmVkIGNoYXIpWEdJX0NINzAwN1ZDTEtEYXRhW3RlbXBhbF0uU1IyQzsKICAgICB9CiAgICAgZWxzZSBpZiAoIHBWQkluZm8tPlZCVHlwZSAmICggVkJfWEdJMzAxIHwgVkJfWEdJMzAxQiB8IFZCX1hHSTMwMkIgfCBWQl9YR0kzMDFMViB8IFZCX1hHSTMwMkxWIHwgVkJfWEdJMzAxQyApICkKICAgICB7CiAgICAgICAgIGlmICggKCAhKCBwVkJJbmZvLT5WQkluZm8gJiBTZXRDUlQyVG9MQ0RBICkgKSAmJiAoIHBWQkluZm8tPlNldEZsYWcgJiBQcm9ncmFtbWluZ0NSVDIgKSApCiAgICAgICAgIHsKLSAgICAgICAgICAgICpkaV8wID0gKCBVQ0hBUiApWEdJX1ZCVkNMS0RhdGFbIHRlbXBhbCBdLlNSMkIgOworCSAgICAqZGlfMCA9ICh1bnNpZ25lZCBjaGFyKVhHSV9WQlZDTEtEYXRhW3RlbXBhbF0uU1IyQjsKICAgICAgICAgICAgICpkaV8xID0gWEdJX1ZCVkNMS0RhdGFbIHRlbXBhbCBdLlNSMkMgOwogICAgICAgICB9CiAgICAgfQpAQCAtNTM5NSwxMSArNTEzOSwxNCBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2V0Q1JUMk9mZnNldCggVVNIT1JUIE1vZGVObyAsCi0JCQkJICAgVVNIT1JUIE1vZGVJZEluZGV4ICwgVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCAsIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1NldENSVDJPZmZzZXQodW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkgICAgICAgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCisJCSAgICAgICBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJICAgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgb2Zmc2V0IDsKLSAgICBVQ0hBUiB0ZW1wIDsKKyAgICB1bnNpZ25lZCBzaG9ydCBvZmZzZXQgOworICAgIHVuc2lnbmVkIGNoYXIgdGVtcDsKIAogICAgIGlmICggcFZCSW5mby0+VkJJbmZvICYgU2V0SW5TbGF2ZU1vZGUgKQogICAgIHsKQEAgLTU0MDcsMTIgKzUxNTQsMTIgQEAKICAgICB9CiAKICAgICBvZmZzZXQgPSBYR0lfR2V0T2Zmc2V0KCAgTW9kZU5vICwgTW9kZUlkSW5kZXggLCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXggLCBId0RldmljZUV4dGVuc2lvbiwgcFZCSW5mbyApIDsKLSAgICB0ZW1wID0gKCBVQ0hBUiApKCBvZmZzZXQgJiAweEZGICkgOworICAgIHRlbXAgPSAodW5zaWduZWQgY2hhcikob2Zmc2V0ICYgMHhGRik7CiAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MDcgLCB0ZW1wICkgOwotICAgIHRlbXAgPSggVUNIQVIpKCAoIG9mZnNldCAmIDB4RkYwMCApID4+IDggKSA7Ci0gICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MDkgLCB0ZW1wICkgOwotICAgIHRlbXAgPSggVUNIQVIgKSggKCAoIG9mZnNldCA+PiAzICkgJiAweEZGICkgKyAxICkgOwotICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QYXJ0MVBvcnQgLCAweDAzICwgdGVtcCApIDsKKyAgICB0ZW1wID0gKHVuc2lnbmVkIGNoYXIpKChvZmZzZXQgJiAweEZGMDApID4+IDgpOworICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MDkgLCB0ZW1wKTsKKyAgICB0ZW1wID0gKHVuc2lnbmVkIGNoYXIpKCgob2Zmc2V0ID4+IDMpICYgMHhGRikgKyAxKSA7CisgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UGFydDFQb3J0LCAweDAzLCB0ZW1wKTsKIH0KIAogCkBAIC01NDIyLDkgKzUxNjksOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotVVNIT1JUIFhHSV9HZXRPZmZzZXQoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCxQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordW5zaWduZWQgc2hvcnQgWEdJX0dldE9mZnNldCh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXAgLAorICAgIHVuc2lnbmVkIHNob3J0IHRlbXAgLAogICAgICAgICAgICBjb2xvcmRlcHRoICwKICAgICAgICAgICAgbW9kZWluZm8gLAogICAgICAgICAgICBpbmRleCAsCkBAIC01NDcxLDcgKzUyMTgsNyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2V0Q1JUMkZJRk8oIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lfU2V0Q1JUMkZJRk8oc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QYXJ0MVBvcnQgLCAweDAxICwgMHgzQiApIDsJCQkvKiB0aHJlc2hvbGQgaGlnaCAsZGlzYWJsZSBhdXRvIHRocmVzaG9sZCAqLwogICAgIFhHSU5ld19TZXRSZWdBTkRPUiggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgwMiAsIH4oIDB4M0YgKSAsIDB4MDQgKSA7CS8qIHRocmVzaG9sZCBsb3cgZGVmYXVsdCAwNGggKi8KQEAgLTU0ODQsMTAgKzUyMzEsMTIgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1ByZVNldEdyb3VwMShVU0hPUlQgTW9kZU5vICwgVVNIT1JUIE1vZGVJZEluZGV4ICxQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLAotICAgICAgICAgICAgICAgICAgICAgICBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9QcmVTZXRHcm91cDEodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJICAgICAgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCSAgICAgIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwKKwkJICAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCB0ZW1wY3ggPSAwICwKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wY3ggPSAwICwKICAgICAgICAgICAgQ1JUMUluZGV4ID0gMCAsCiAgICAgICAgICAgIHJlc2luZm8gPSAwIDsKIApAQCAtNTUxOCwxMCArNTI2NywxMiBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2V0R3JvdXAxKCBVU0hPUlQgTW9kZU5vICwgVVNIT1JUIE1vZGVJZEluZGV4ICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICwgVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfU2V0R3JvdXAxKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCSAgIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkgICB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCisJCSAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcCA9IDAgLAorICAgIHVuc2lnbmVkIHNob3J0IHRlbXAgPSAwICwKICAgICAgICAgICAgdGVtcGF4ID0gMCAsCiAgICAgICAgICAgIHRlbXBieCA9IDAgLAogICAgICAgICAgICB0ZW1wY3ggPSAwICwKQEAgLTU2OTQsMTAgKzU0NDUsMTIgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgIFhHSV9TZXRMb2NrUmVncyggVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLCBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkICBYR0lfU2V0TG9ja1JlZ3ModW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJICAgICAgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCSAgICAgIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwKKwkJICAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBwdXNoMSAsCisgICAgdW5zaWduZWQgc2hvcnQgcHVzaDEgLAogICAgICAgICAgICBwdXNoMiAsCiAgICAgICAgICAgIHRlbXBheCAsCiAgICAgICAgICAgIHRlbXBieCA9IDAgLApAQCAtNjE0MSwxMCArNTg5NCwxMCBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2V0R3JvdXAyKCBVU0hPUlQgTW9kZU5vLCBVU0hPUlQgTW9kZUlkSW5kZXgsIFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCi0gICAgICAgICAgICAgICAgICAgIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1NldEdyb3VwMih1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCisJCSAgIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIGkgLAorICAgIHVuc2lnbmVkIHNob3J0IGkgLAogICAgICAgICAgICBqICwKICAgICAgICAgICAgdGVtcGF4ICwKICAgICAgICAgICAgdGVtcGJ4ICwKQEAgLTYxNTUsOSArNTkwOCw5IEBACiAgICAgICAgICAgIG1vZGVmbGFnICwKICAgICAgICAgICAgcmVzaW5mbyAsCiAgICAgICAgICAgIGNydDJjcnRjIDsKLSAgICBVQ0hBUiAqVGltaW5nUG9pbnQgOworICAgIHVuc2lnbmVkIGNoYXIgKlRpbWluZ1BvaW50IDsKIAotICAgIFVMT05HIGxvbmd0ZW1wICwKKyAgICB1bnNpZ25lZCBsb25nIGxvbmd0ZW1wICwKICAgICAgICAgICB0ZW1wZWF4ICwKICAgICAgICAgICB0ZW1wZWJ4ICwKICAgICAgICAgICB0ZW1wMiAsCkBAIC02MjY2LDcgKzYwMTksNyBAQAogICAgICAgICB0ZW1wYXggPSAoIHRlbXBheCAmIDB4MDBGRiApIHwgKCAoIHRlbXBheCAmIDB4MDBGRiApIDw8IDggKSA7CiAgICAgICAgIHB1c2gxID0gdGVtcGF4IDsKICAgICAgICAgdGVtcCA9ICggdGVtcGF4ICYgMHhGRjAwICkgPj4gOCA7Ci0gICAgICAgIHRlbXAgKz0gKCBVU0hPUlQgKVRpbWluZ1BvaW50WyAwIF0gOworCXRlbXAgKz0gKHVuc2lnbmVkIHNob3J0KVRpbWluZ1BvaW50WzBdOwogCiAgICAgICAgIGlmICggcFZCSW5mby0+VkJUeXBlICYgKCBWQl9YR0kzMDFCIHwgVkJfWEdJMzAyQiB8IFZCX1hHSTMwMUxWIHwgVkJfWEdJMzAyTFYgfCBWQl9YR0kzMDFDICkgKQogICAgICAgICB7CkBAIC02NTQzLDcgKzYyOTYsNyBAQAogICAgICAgICAgICAgdGVtcGVheCArPSAxIDsKICAgICAgICAgfQogCi0gICAgICAgIHRlbXBheCA9ICggVVNIT1JUICl0ZW1wZWF4IDsKKwl0ZW1wYXggPSAodW5zaWduZWQgc2hvcnQpdGVtcGVheDsKIAogCS8qIDMwMWIgKi8KICAgICAgICAgaWYgKCBwVkJJbmZvLT5WQlR5cGUgJiAoIFZCX1hHSTMwMUIgfCBWQl9YR0kzMDJCIHwgVkJfWEdJMzAxTFYgfCBWQl9YR0kzMDJMViB8IFZCX1hHSTMwMUMgKSApCkBAIC02NTUzLDggKzYzMDYsOCBAQAogICAgICAgICAvKiBlbmQgMzAxYiAqLwogCiAgICAgICAgIHRlbXBieCA9IHB1c2gxIDsKLSAgICAgICAgdGVtcGJ4ID0oIFVTSE9SVCApKCAoICggdGVtcGVheCAmIDB4MDAwMEZGMDAgKSAmIDB4MUYwMCApIHwgKCB0ZW1wYnggJiAweDAwRkYgKSApIDsKLSAgICAgICAgdGVtcGF4ID0oIFVTSE9SVCApKCAoICggdGVtcGVheCAmIDB4MDAwMDAwRkYgKSA8PCA4ICkgfCAoIHRlbXBheCAmIDB4MDBGRiApICkgOworCXRlbXBieCA9ICh1bnNpZ25lZCBzaG9ydCkoKCh0ZW1wZWF4ICYgMHgwMDAwRkYwMCkgJiAweDFGMDApIHwgKHRlbXBieCAmIDB4MDBGRikpOworCXRlbXBheCA9ICh1bnNpZ25lZCBzaG9ydCkoKCh0ZW1wZWF4ICYgMHgwMDAwMDBGRikgPDwgOCkgfCAodGVtcGF4ICYgMHgwMEZGKSk7CiAgICAgICAgIHRlbXAgPSAoIHRlbXBheCAmIDB4RkYwMCApID4+IDggOwogICAgIH0KICAgICBlbHNlCkBAIC02NjA3LDcgKzYzNjAsNyBAQAogCiAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlBhcnQyUG9ydCAsIDB4NGQgLCB0ZW1wICkgOwogICAgIHRlbXA9WEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlBhcnQyUG9ydCAsIDB4NDMgKSA7CQkvKiAzMDFiIGNoYW5nZSAqLwotICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QYXJ0MlBvcnQgLCAweDQzICwgKCBVU0hPUlQgKSggdGVtcCAtIDMgKSApIDsKKyAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDJQb3J0ICwgMHg0MywgKHVuc2lnbmVkIHNob3J0KSggdGVtcCAtIDMgKSApIDsKIAogICAgIGlmICggISggcFZCSW5mby0+VFZJbmZvICYgKCBTZXRZUGJQck1vZGU1MjVwIHwgU2V0WVBiUHJNb2RlNzUwcCApICkgKQogICAgIHsKQEAgLTY2MzEsNyArNjM4NCw3IEBACiAKICAgICBpZiAoIHBWQkluZm8tPlRWSW5mbyAmIFNldFBBTE1UViApCiAgICAgewotICAgICAgICB0ZW1wYXggPSAoIFVDSEFSIClYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UGFydDJQb3J0ICwgMHgwMSApIDsKKwl0ZW1wYXggPSAodW5zaWduZWQgY2hhcilYR0lOZXdfR2V0UmVnMShwVkJJbmZvLT5QYXJ0MlBvcnQsIDB4MDEpOwogICAgICAgICB0ZW1wYXgtLSA7CiAgICAgICAgIFhHSU5ld19TZXRSZWdBTkQoIHBWQkluZm8tPlBhcnQyUG9ydCAsIDB4MDEgLCB0ZW1wYXggKSA7CiAKQEAgLTY2NjAsOSArNjQxMyw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkICBYR0lfU2V0TENEUmVncyhVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCwgUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbixVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgIFhHSV9TZXRMQ0RSZWdzKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgcHVzaDEgLAorICAgIHVuc2lnbmVkIHNob3J0IHB1c2gxICwKICAgICAgICAgICAgcHVzaDIgLAogICAgICAgICAgICBwdXNoYnggLAogICAgICAgICAgICB0ZW1wYXggLApAQCAtNjY3Niw3ICs2NDI5LDcgQEAKICAgICAgICAgICAgbW9kZWZsYWcgLAogICAgICAgICAgICBDUlQxSW5kZXggOwogCi0gICAgWEdJX0xDRERlc1N0cnVjdCAqTENEQkRlc1B0ciA9IE5VTEwgOworICAgIHN0cnVjdCBYR0lfTENERGVzU3RydWN0ICpMQ0RCRGVzUHRyID0gTlVMTCA7CiAKIAogICAgIGlmICggTW9kZU5vIDw9IDB4MTMgKQpAQCAtNjc0Niw3ICs2NDk5LDcgQEAKIAogICAgIC8qIEN1c3RvbWl6ZWQgTENEQiBEZXMgbm8gYWRkICovCiAgICAgdGVtcGJ4ID0gNSA7Ci0gICAgTENEQkRlc1B0ciA9ICggWEdJX0xDRERlc1N0cnVjdCAqIClYR0lfR2V0TGNkUHRyKCB0ZW1wYnggLCBNb2RlTm8gLCBNb2RlSWRJbmRleCAsIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgcFZCSW5mbyApIDsKKyAgICBMQ0RCRGVzUHRyID0gKHN0cnVjdCBYR0lfTENERGVzU3RydWN0ICopWEdJX0dldExjZFB0cih0ZW1wYngsIE1vZGVObywgTW9kZUlkSW5kZXgsIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgcFZCSW5mbyk7CiAgICAgdGVtcGFoID0gcFZCSW5mby0+TENEUmVzSW5mbyA7CiAgICAgdGVtcGFoICY9IFBhbmVsUmVzSW5mbyA7CiAKQEAgLTY5MTQsMTMgKzY2NjcsMTQgQEAKIC8qIE91dHB1dCA6IGRpIC0+IFRhcDQgUmVnLiBTZXR0aW5nIFBvaW50ZXIgKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotWEdJMzAxQ19UYXA0VGltaW5nU3RydWN0KiBYR0lfR2V0VGFwNFB0cihVU0hPUlQgdGVtcGN4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3N0cnVjdCBYR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3QgKlhHSV9HZXRUYXA0UHRyKHVuc2lnbmVkIHNob3J0IHRlbXBjeCwKKwkJCQkJIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcGF4ICwKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wYXggLAogICAgICAgICAgICB0ZW1wYnggLAogICAgICAgICAgICBpIDsKIAotICAgIFhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdCAqVGFwNFRpbWluZ1B0ciA7CisgICAgc3RydWN0IFhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdCAqVGFwNFRpbWluZ1B0ciA7CiAKICAgICBpZiAoIHRlbXBjeCA9PSAwICkKICAgICB7CkBAIC02OTc0LDEyICs2NzI4LDEyIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRUYXA0UmVncyggUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSV9TZXRUYXA0UmVncyhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIGkgLAorICAgIHVuc2lnbmVkIHNob3J0IGkgLAogICAgICAgICAgICBqIDsKIAotICAgIFhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdCAqVGFwNFRpbWluZ1B0ciA7CisgICAgc3RydWN0IFhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdCAqVGFwNFRpbWluZ1B0ciA7CiAKICAgICBpZiAoICEoIHBWQkluZm8tPlZCVHlwZSAmIFZCX1hHSTMwMUMgKSApCiAgICAgICAgIHJldHVybiA7CkBAIC03MDEyLDExICs2NzY2LDExIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRHcm91cDMoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lfU2V0R3JvdXAzKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgaTsKLSAgICBVQ0hBUiAqdGVtcGRpOwotICAgIFVTSE9SVCAgbW9kZWZsYWc7CisgICAgdW5zaWduZWQgc2hvcnQgaTsKKyAgICB1bnNpZ25lZCBjaGFyICp0ZW1wZGk7CisgICAgdW5zaWduZWQgc2hvcnQgIG1vZGVmbGFnOwogCiAgICAgaWYoTW9kZU5vPD0weDEzKQogICAgIHsKQEAgLTcwOTksMTYgKzY4NTMsMTYgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldEdyb3VwNChVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCxVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lfU2V0R3JvdXA0KHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcGF4ICwKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wYXggLAogICAgICAgICAgICB0ZW1wY3ggLAogICAgICAgICAgICB0ZW1wYnggLAogICAgICAgICAgICBtb2RlZmxhZyAsCiAgICAgICAgICAgIHRlbXAgLAogICAgICAgICAgICB0ZW1wMiA7CiAKLSAgICBVTE9ORyB0ZW1wZWJ4ICwKKyAgICB1bnNpZ25lZCBsb25nIHRlbXBlYnggLAogICAgICAgICAgIHRlbXBlYXggLAogICAgICAgICAgIHRlbXBsb25nIDsKIApAQCAtNzIzMCwxMiArNjk4NCwxMiBAQAogICAgIH0KIAogCi0gICAgdGVtcCA9ICggVVNIT1JUICkoIHRlbXBlYnggJiAweDAwMDAwMEZGICkgOworICAgIHRlbXAgPSAodW5zaWduZWQgc2hvcnQpKHRlbXBlYnggJiAweDAwMDAwMEZGKTsKICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDRQb3J0ICwgMHgxQiAsIHRlbXAgKSA7CiAKLSAgICB0ZW1wID0gKCBVU0hPUlQgKSggKCB0ZW1wZWJ4ICYgMHgwMDAwRkYwMCApID4+IDggKSA7CisgICAgdGVtcCA9ICh1bnNpZ25lZCBzaG9ydCkoKHRlbXBlYnggJiAweDAwMDBGRjAwKSA+PiA4KTsKICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDRQb3J0ICwgMHgxQSAsIHRlbXAgKSA7Ci0gICAgdGVtcGJ4ID0gKCBVU0hPUlQgKSggdGVtcGVieCA+PiAxNiApIDsKKyAgICB0ZW1wYnggPSAodW5zaWduZWQgc2hvcnQpKHRlbXBlYnggPj4gMTYpOwogICAgIHRlbXAgPSB0ZW1wYnggJiAweDAwRkYgOwogICAgIHRlbXAgPSB0ZW1wIDw8IDQgOwogICAgIHRlbXAgfD0gKCAoIHRlbXBjeCAmIDB4RkYwMCApID4+IDggKSA7CkBAIC03MzUwLDkgKzcxMDQsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2V0R3JvdXA1KCBVU0hPUlQgTW9kZU5vICwgVVNIT1JUIE1vZGVJZEluZGV4ICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSV9TZXRHcm91cDUodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBQaW5kZXggLAorICAgIHVuc2lnbmVkIHNob3J0IFBpbmRleCAsCiAgICAgICAgICAgIFBkYXRhIDsKIAogICAgIFBpbmRleCA9IHBWQkluZm8tPlBhcnQ1UG9ydCA7CkBAIC03Mzc1LDkgKzcxMjksMTMgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQqIFhHSV9HZXRMY2RQdHIoIFVTSE9SVCBCWCAsIFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgTW9kZUlkSW5kZXggLCBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkICpYR0lfR2V0TGNkUHRyKHVuc2lnbmVkIHNob3J0IEJYLAorCQkgICAgdW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkgICAgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCSAgICB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCisJCSAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIGkgLAorICAgIHVuc2lnbmVkIHNob3J0IGkgLAogICAgICAgICAgICB0ZW1wZHggLAogICAgICAgICAgICB0ZW1wY3ggLAogICAgICAgICAgICB0ZW1wYnggLApAQCAtNzM4NSw3ICs3MTQzLDcgQEAKICAgICAgICAgICAgbW9kZWZsYWcgLAogICAgICAgICAgICB0YWJsZSA7CiAKLSAgICBYR0kzMzBfTENERGF0YVRhYmxTdHJ1Y3QgKnRlbXBkaSA9IDAgOworICAgIHN0cnVjdCBYR0kzMzBfTENERGF0YVRhYmxTdHJ1Y3QgKnRlbXBkaSA9IDAgOwogCiAKICAgICB0ZW1wYnggPSBCWDsKQEAgLTc4NzcsMTAgKzc2MzUsMTMgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQqIFhHSV9HZXRUVlB0ciAoVVNIT1JUIEJYLFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgKlhHSV9HZXRUVlB0cih1bnNpZ25lZCBzaG9ydCBCWCwgdW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkgICB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJICAgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LAorCQkgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIGkgLCB0ZW1wZHggLCB0ZW1wYnggLCB0ZW1wYWwgLCBtb2RlZmxhZyAsIHRhYmxlIDsKLSAgICBYR0kzMzBfVFZEYXRhVGFibFN0cnVjdCAqdGVtcGRpID0gMCA7CisgICAgdW5zaWduZWQgc2hvcnQgaSAsIHRlbXBkeCAsIHRlbXBieCAsIHRlbXBhbCAsIG1vZGVmbGFnICwgdGFibGUgOworICAgIHN0cnVjdCBYR0kzMzBfVFZEYXRhVGFibFN0cnVjdCAqdGVtcGRpID0gMCA7CiAKICAgICB0ZW1wYnggPSBCWCA7CiAKQEAgLTc5NTUsNTMgKzc3MTYsOSBAQAogCiAgICAgaWYgKCB0YWJsZSA9PSAweDAwICkgLyogMDcvMDUvMjIgKi8KICAgICB7Ci0jaWZkZWYgV0lOMjAwMAotICAgICAgICBpZiAoIHBWQkluZm8tPklGX0RFRl9DSDcwMDcgPT0gMSApCi0gICAgICAgIHsKLSAgICAgICAgICBzd2l0Y2goIHRlbXBkaVsgaSBdLkRBVEFQVFIgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJkNINzAwN1RWQ1JUMVVOVFNDX0hbIHRlbXBhbCBdIDsKLSAgICAgICAgICAgICAgICBicmVhayA7Ci0gICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZDSDcwMDdUVkNSVDFPTlRTQ19IWyB0ZW1wYWwgXSA7Ci0gICAgICAgICAgICAgICAgYnJlYWsgOwotICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgIHJldHVybiAmQ0g3MDA3VFZDUlQxVVBBTF9IWyB0ZW1wYWwgXSA7Ci0gICAgICAgICAgICAgICAgYnJlYWsgOwotICAgICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICAgIHJldHVybiAmQ0g3MDA3VFZDUlQxT1BBTF9IWyB0ZW1wYWwgXSA7Ci0gICAgICAgICAgICAgICAgYnJlYWsgOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhayA7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYKICAgICB9CiAgICAgZWxzZSBpZiAoIHRhYmxlID09IDB4MDEgKQogICAgIHsKLSNpZmRlZiBXSU4yMDAwCi0gICAgICAgIGlmICggcFZCSW5mby0+SUZfREVGX0NINzAwNyA9PSAxICkKLSAgICAgICAgewotICAgICAgICAgIHN3aXRjaCggdGVtcGRpWyBpIF0uREFUQVBUUiApCi0gICAgICAgICAgewotICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgIHJldHVybiAmQ0g3MDA3VFZDUlQxVU5UU0NfVlsgdGVtcGFsIF0gOwotICAgICAgICAgICAgICAgIGJyZWFrIDsKLSAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICByZXR1cm4gJkNINzAwN1RWQ1JUMU9OVFNDX1ZbIHRlbXBhbCBdIDsKLSAgICAgICAgICAgICAgICBicmVhayA7Ci0gICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZDSDcwMDdUVkNSVDFVUEFMX1ZbIHRlbXBhbCBdIDsKLSAgICAgICAgICAgICAgICBicmVhayA7Ci0gICAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZDSDcwMDdUVkNSVDFPUEFMX1ZbIHRlbXBhbCBdIDsKLSAgICAgICAgICAgICAgICBicmVhayA7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrIDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZgogICAgIH0KICAgICBlbHNlIGlmICggdGFibGUgPT0gMHgwNCApCiAgICAgewpAQCAtODA3NSw0OSArNzc5Miw2IEBACiAgICAgfQogICAgIGVsc2UgaWYoIHRhYmxlID09IDB4MDYgKQogICAgIHsKLSNpZmRlZiBXSU4yMDAwCi0gICAgICAgIGlmICggcFZCSW5mby0+SUZfREVGX0NINzAwNyA9PSAxICkKLSAgICAgICAgewotICAgICAgICAgIC8qIFZpZGVvRGVidWdQcmludCgoMCwgIlhHSV9HZXRUVlB0cjogcFZCSW5mby0+SUZfREVGX0NINzAwNz09MVxuIikpOyAqLwotICAgICAgICAgIHN3aXRjaCggdGVtcGRpWyBpIF0uREFUQVBUUiApCi0gICAgICAgICAgewotICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgIHJldHVybiAmQ0g3MDA3VFZSZWdfVU5UU0NbIHRlbXBhbCBdIDsKLSAgICAgICAgICAgICAgICBicmVhayA7Ci0gICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZDSDcwMDdUVlJlZ19PTlRTQ1sgdGVtcGFsIF0gOwotICAgICAgICAgICAgICAgIGJyZWFrIDsKLSAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICByZXR1cm4gJkNINzAwN1RWUmVnX1VQQUxbIHRlbXBhbCBdIDsKLSAgICAgICAgICAgICAgICBicmVhayA7Ci0gICAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZDSDcwMDdUVlJlZ19PUEFMWyB0ZW1wYWwgXSA7Ci0gICAgICAgICAgICAgICAgYnJlYWsgOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhayA7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoKCB0ZW1wZGlbIGkgXS5EQVRBUFRSICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgIHJldHVybiAmWEdJX0NIVFZSZWdVTlRTQ1sgdGVtcGFsIF0gOwotICAgICAgICAgICAgICAgIGJyZWFrIDsKLSAgICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgIHJldHVybiAmWEdJX0NIVFZSZWdPTlRTQ1sgdGVtcGFsIF0gOwotICAgICAgICAgICAgICAgIGJyZWFrIDsKLSAgICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgIHJldHVybiAmWEdJX0NIVFZSZWdVUEFMWyB0ZW1wYWwgXSA7Ci0gICAgICAgICAgICAgICAgYnJlYWsgOwotICAgICAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZYR0lfQ0hUVlJlZ09QQUxbIHRlbXBhbCBdIDsKLSAgICAgICAgICAgICAgICBicmVhayA7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWsgOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYKICAgICB9CiAgICAgcmV0dXJuKCAwICkgOwogfQpAQCAtODEyNiwxOCArNzgwMCwxOCBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBGdW5jdGlvbiA6IFhHSV9CYWNrbGlnaHRCeURydiAqLwogLyogSW5wdXQgOiAqLwotLyogT3V0cHV0IDogVFJVRSAtPiBTa2lwIGJhY2tsaWdodCBjb250cm9sICovCisvKiBPdXRwdXQgOiAxIC0+IFNraXAgYmFja2xpZ2h0IGNvbnRyb2wgKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotQk9PTEVBTiBYR0lfQmFja2xpZ2h0QnlEcnYoIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3Vuc2lnbmVkIGNoYXIgWEdJX0JhY2tsaWdodEJ5RHJ2KHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVQ0hBUiB0ZW1wYWggOworICAgIHVuc2lnbmVkIGNoYXIgdGVtcGFoIDsKIAotICAgIHRlbXBhaCA9ICggVUNIQVIgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHgzQSApIDsKLSAgICBpZiAoIHRlbXBhaCAmIEJhY2tsaWdodENvbnRyb2xCaXQgKQotICAgICAgICByZXR1cm4gVFJVRSA7CisgICAgdGVtcGFoID0gKHVuc2lnbmVkIGNoYXIpWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UDNkNCwgMHgzQSkgOworICAgIGlmICh0ZW1wYWggJiBCYWNrbGlnaHRDb250cm9sQml0KQorCSAgICByZXR1cm4gMTsKICAgICBlbHNlCi0gICAgICAgIHJldHVybiBGQUxTRSA7CisJICAgIHJldHVybiAwOwogfQogCiAKQEAgLTgxNDgsNyArNzgyMiw3IEBACiAvKiBEZXNjcmlwdGlvbiA6IFR1cm4gb2ZmIFZERCAmIEJhY2tsaWdodCA6IEZpcmUgZGlzYWJsZSBwcm9jZWR1cmUgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyoKLXZvaWQgWEdJX0ZpcmVQV0REaXNhYmxlKCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9GaXJlUFdERGlzYWJsZShzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAgICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QYXJ0MVBvcnQgLCAweDI2ICwgMHgwMCAsIDB4RkMgKSA7CiB9CkBAIC04MTYwLDcgKzc4MzQsNyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogVHVybiBvbiBWREQgJiBCYWNrbGlnaHQgOiBGaXJlIGVuYWJsZSBwcm9jZWR1cmUgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfRmlyZVBXREVuYWJsZShQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9GaXJlUFdERW5hYmxlKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MjYgLCAweDAzICwgMHhGQyApIDsKIH0KQEAgLTgxNzIsNyArNzg0Niw3IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9FbmFibGVHYXRpbmdDUlQoUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSV9FbmFibGVHYXRpbmdDUlQoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlAzZDQgLCAweDYzICwgMHhCRiAsIDB4NDAgKSA7CiB9CkBAIC04MTg0LDcgKzc4NTgsNyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfRGlzYWJsZUdhdGluZ0NSVChQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJX0Rpc2FibGVHYXRpbmdDUlQoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKIAogICAgIFhHSU5ld19TZXRSZWdBTkRPUiggcFZCSW5mby0+UDNkNCAsIDB4NjMgLCAweEJGICwgMHgwMCApIDsKQEAgLTgyMDEsOSArNzg3NSw5IEBACiAvKiA6IGJsIDogMyA7IFQzIDogdGhlIGR1cmF0aW9uIGJldHdlZW4gQ1BMIG9mZiBhbmQgc2lnbmFsIG9mZiAqLwogLyogOiBibCA6IDQgOyBUNCA6IHRoZSBkdXJhdGlvbiBzaWduYWwgb2ZmIGFuZCBWZGQgb2ZmICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldFBhbmVsRGVsYXkoVVNIT1JUIHRlbXBibCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSV9TZXRQYW5lbERlbGF5KHVuc2lnbmVkIHNob3J0IHRlbXBibCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBpbmRleCA7CisgICAgdW5zaWduZWQgc2hvcnQgaW5kZXggOwogCiAgICAgaW5kZXggPSBYR0lfR2V0TENEQ2FwUHRyKHBWQkluZm8pIDsKIApAQCAtODIzMSw3ICs3OTA1LDcgQEAKIC8qID0gMTAxMWIgPSAwQmggOyBCYWNrbGlnaHQgb2ZmLCBQb3dlciBvbiAqLwogLyogPSAxMTExYiA9IDBGaCA7IEJhY2tsaWdodCBvZmYsIFBvd2VyIG9mZiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRQYW5lbFBvd2VyKFVTSE9SVCB0ZW1wYWgsVVNIT1JUIHRlbXBibCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSV9TZXRQYW5lbFBvd2VyKHVuc2lnbmVkIHNob3J0IHRlbXBhaCwgdW5zaWduZWQgc2hvcnQgdGVtcGJsLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAgICAgaWYgKCBwVkJJbmZvLT5WQlR5cGUgJiAoIFZCX1hHSTMwMUxWIHwgVkJfWEdJMzAyTFYgfCBWQl9YR0kzMDFDICkgKQogICAgICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlBhcnQ0UG9ydCAsIDB4MjYgLCB0ZW1wYmwgLCB0ZW1wYWggKSA7CkBAIC04MjM5LDEwICs3OTEzLDEwIEBACiAgICAgICAgIFhHSU5ld19TZXRSZWdBTkRPUiggcFZCSW5mby0+UDNjNCAsIDB4MTEgLCB0ZW1wYmwgLCB0ZW1wYWggKSA7CiB9CiAKLVVDSEFSIFhHMjFHUElPRGF0YVRyYW5zZmVyKFVDSEFSIHVqRGF0ZSkKK3Vuc2lnbmVkIGNoYXIgWEcyMUdQSU9EYXRhVHJhbnNmZXIodW5zaWduZWQgY2hhciB1akRhdGUpCiB7Ci0gICAgVUNIQVIgIHVqUmV0ID0gMDsKLSAgICBVQ0hBUiAgaSA9IDA7CisgICAgdW5zaWduZWQgY2hhciAgdWpSZXQgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgIGkgPSAwOwogCiAgICAgZm9yIChpPTA7IGk8ODsgaSsrKQogCXsKQEAgLTgyNjAsOSArNzkzNCw5IEBACiAvKiAgICAgIGJsWzFdIDogTFZEUyBiYWNrbGlnaHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICBibFswXSA6IExWRFMgVkREICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1VQ0hBUiBYR0lfWEcyMUdldFBTQ1ZhbHVlKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordW5zaWduZWQgY2hhciBYR0lfWEcyMUdldFBTQ1ZhbHVlKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVQ0hBUiBDUjRBLHRlbXA7CisgICAgdW5zaWduZWQgY2hhciBDUjRBLCB0ZW1wOwogCiAgICAgQ1I0QSA9IFhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHg0QSApIDsKICAgICBYR0lOZXdfU2V0UmVnQU5EKCBwVkJJbmZvLT5QM2Q0ICwgMHg0QSAsIH4weDIzICkgOyAvKiBlbmFibGUgR1BJTyB3cml0ZSAqLwpAQCAtODI4MSw5ICs3OTU1LDkgQEAKIC8qICAgICAgYmxbMV0gOiBMVkRTIGJhY2tsaWdodCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgIGJsWzBdIDogTFZEUyBWREQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLVVDSEFSIFhHSV9YRzI3R2V0UFNDVmFsdWUoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit1bnNpZ25lZCBjaGFyIFhHSV9YRzI3R2V0UFNDVmFsdWUoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVDSEFSIENSNEEsQ1JCNCx0ZW1wOworICAgIHVuc2lnbmVkIGNoYXIgQ1I0QSwgQ1JCNCwgdGVtcDsKIAogICAgIENSNEEgPSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4NEEgKSA7CiAgICAgWEdJTmV3X1NldFJlZ0FORCggcFZCSW5mby0+UDNkNCAsIDB4NEEgLCB+MHgwQyApIDsgLyogZW5hYmxlIEdQSU8gd3JpdGUgKi8KQEAgLTgzMDYsOSArNzk4MCw5IEBACiAvKiAgICAgICAgICAwMDAwMTBiIDogY2xlYXIgYml0IDEsIHRvIHNldCBiaXQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgMDAwMDAxYiA6IGNsZWFyIGJpdCAwLCB0byBzZXQgYml0MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi12b2lkIFhHSV9YRzIxQkxTaWduYWxWREQoVVNIT1JUIHRlbXBiaCxVU0hPUlQgdGVtcGJsLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJX1hHMjFCTFNpZ25hbFZERCh1bnNpZ25lZCBzaG9ydCB0ZW1wYmgsIHVuc2lnbmVkIHNob3J0IHRlbXBibCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVDSEFSIENSNEEsdGVtcDsKKyAgICB1bnNpZ25lZCBjaGFyIENSNEEsIHRlbXA7CiAKICAgICBDUjRBID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDRBICkgOwogICAgIHRlbXBiaCAmPSAweDIzOwpAQCAtODMzMSwxMCArODAwNSwxMCBAQAogICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHg0OCAsIHRlbXAgKSA7CiB9CiAKLXZvaWQgWEdJX1hHMjdCTFNpZ25hbFZERChVU0hPUlQgdGVtcGJoLFVTSE9SVCB0ZW1wYmwsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lfWEcyN0JMU2lnbmFsVkREKHVuc2lnbmVkIHNob3J0IHRlbXBiaCwgdW5zaWduZWQgc2hvcnQgdGVtcGJsLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVUNIQVIgQ1I0QSx0ZW1wOwotICAgIFVTSE9SVCB0ZW1wYmgwLHRlbXBibDA7CisgICAgdW5zaWduZWQgY2hhciBDUjRBLCB0ZW1wOworICAgIHVuc2lnbmVkIHNob3J0IHRlbXBiaDAsIHRlbXBibDA7CiAKICAgICB0ZW1wYmgwID0gdGVtcGJoOwogICAgIHRlbXBibDAgPSB0ZW1wYmw7CkBAIC04MzYyLDE1ICs4MDM2LDEzIEBACiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotVVNIT1JUIFhHSV9HZXRMVkRTT0VNVGFibGVJbmRleChQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3Vuc2lnbmVkIHNob3J0IFhHSV9HZXRMVkRTT0VNVGFibGVJbmRleChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIGluZGV4IDsKKyAgICB1bnNpZ25lZCBzaG9ydCBpbmRleCA7CiAKICAgICBpbmRleCA9IFhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHgzNiApIDsKLSAgICBpZiAoaW5kZXg8c2l6ZW9mKFhHSTIxX0xDRENhcExpc3QpL3NpemVvZihYR0kyMV9MVkRTQ2FwU3RydWN0KSkKLSAgICB7Ci0gICAgICByZXR1cm4gaW5kZXg7Ci0gICAgfQorICAgIGlmIChpbmRleCA8IHNpemVvZihYR0kyMV9MQ0RDYXBMaXN0KS9zaXplb2Yoc3RydWN0IFhHSTIxX0xWRFNDYXBTdHJ1Y3QpKQorCSAgICByZXR1cm4gaW5kZXg7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTgzODQsOSArODA1Niw5IEBACiAvKiA6IGJsIDogMyA7IFQzIDogdGhlIGR1cmF0aW9uIGJldHdlZW4gQ1BMIG9mZiBhbmQgc2lnbmFsIG9mZiAqLwogLyogOiBibCA6IDQgOyBUNCA6IHRoZSBkdXJhdGlvbiBzaWduYWwgb2ZmIGFuZCBWZGQgb2ZmICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1hHMjFTZXRQYW5lbERlbGF5KFVTSE9SVCB0ZW1wYmwsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lfWEcyMVNldFBhbmVsRGVsYXkodW5zaWduZWQgc2hvcnQgdGVtcGJsLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIGluZGV4IDsKKyAgICB1bnNpZ25lZCBzaG9ydCBpbmRleCA7CiAKICAgICBpbmRleCA9IFhHSV9HZXRMVkRTT0VNVGFibGVJbmRleCggcFZCSW5mbyApOwogICAgIGlmICggdGVtcGJsID09IDEgKQpAQCAtODQwMiw5ICs4MDc0LDExIEBACiAgICAgICAgIFhHSU5ld19MQ0RfV2FpdF9UaW1lKCBwVkJJbmZvLT5YRzIxX0xWRFNDYXBMaXN0WyBpbmRleCBdLlBTQ19TNCwgcFZCSW5mbyApIDsKIH0KIAotQk9PTEVBTiBYR0lfWEcyMUNoZWNrTFZEU01vZGUoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3Vuc2lnbmVkIGNoYXIgWEdJX1hHMjFDaGVja0xWRFNNb2RlKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCQkgICAgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCQkJICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgeHJlcyAsCisgICAgdW5zaWduZWQgc2hvcnQgeHJlcyAsCiAgICAgICAgICAgIHlyZXMgLAogICAgICAgICAgICBjb2xvcmRlcHRoICwKICAgICAgICAgICAgbW9kZWZsYWcgLApAQCAtODQ0NSwxMCArODExOSwxMCBAQAogCiAgICAgbHZkc3RhYmxlaW5kZXggPSBYR0lfR2V0TFZEU09FTVRhYmxlSW5kZXgoIHBWQkluZm8gKTsKICAgICBpZiAoIHhyZXMgPiAocFZCSW5mby0+WEcyMV9MVkRTQ2FwTGlzdFtsdmRzdGFibGVpbmRleF0uTFZEU0hERSkgKQotICAgICAgcmV0dXJuIEZBTFNFOworCSAgICByZXR1cm4gMDsKIAogICAgIGlmICggeXJlcyA+IChwVkJJbmZvLT5YRzIxX0xWRFNDYXBMaXN0W2x2ZHN0YWJsZWluZGV4XS5MVkRTVkRFKSApCi0gICAgICByZXR1cm4gRkFMU0U7CisJICAgIHJldHVybiAwOwogCiAgICAgaWYgKCBNb2RlTm8gPiAweDEzICkKICAgICB7CkBAIC04NDU2LDE4ICs4MTMwLDE3IEBACiAgICAgICAgICAgICggeXJlcyAhPSAocFZCSW5mby0+WEcyMV9MVkRTQ2FwTGlzdFtsdmRzdGFibGVpbmRleF0uTFZEU1ZERSkpICkKICAgICAgIHsKICAgICAgICAgICBjb2xvcmRlcHRoID0gWEdJX0dldENvbG9yRGVwdGgoIE1vZGVObyAsIE1vZGVJZEluZGV4LCBwVkJJbmZvICkgOwotICAgICAgICAgIGlmICggY29sb3JkZXB0aCA+IDIgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgICB9CisJICBpZiAoY29sb3JkZXB0aCA+IDIpCisJCSAgcmV0dXJuIDA7CisKICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIDE7CiB9CiAKLXZvaWQgWEdJX1NldFhHMjFGUEJpdHMoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSV9TZXRYRzIxRlBCaXRzKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVQ0hBUiB0ZW1wOworICAgIHVuc2lnbmVkIGNoYXIgdGVtcDsKIAogICAgIHRlbXAgPSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNkNCAgLCAweDM3ICkgOyAgLyogRFswXSAxOiAxOGJpdCAqLwogICAgIHRlbXAgPSAoIHRlbXAgJiAxICkgPDwgNjsKQEAgLTg0NzYsOSArODE0OSw5IEBACiAKIH0KIAotdm9pZCBYR0lfU2V0WEcyN0ZQQml0cyhQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJX1NldFhHMjdGUEJpdHMoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVDSEFSIHRlbXA7CisgICAgdW5zaWduZWQgY2hhciB0ZW1wOwogCiAgICAgdGVtcCA9IFhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICAsIDB4MzcgKSA7ICAvKiBEWzE6MF0gMDE6IDE4Yml0LCAwMDogZHVhbCAxMiwgMTA6IHNpbmdsZSAyNCAqLwogICAgIHRlbXAgPSAoIHRlbXAgJiAzICkgPDwgNjsKQEAgLTg0ODcsMjcgKzgxNjAsMjggQEAKIAogfQogCi12b2lkIFhHSV9TZXRYRzIxTFZEU1BhcmEoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1NldFhHMjFMVkRTUGFyYSh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVQ0hBUiB0ZW1wLE1pc2NkYXRhOwotICAgIFVTSE9SVCB4cmVzICwKKyAgICB1bnNpZ25lZCBjaGFyIHRlbXAsIE1pc2NkYXRhOworICAgIHVuc2lnbmVkIHNob3J0IHhyZXMgLAogICAgICAgICAgICB5cmVzICwKICAgICAgICAgICAgbW9kZWZsYWcgLAogICAgICAgICAgICByZXNpbmRleCAsCiAgICAgICAgICAgIGx2ZHN0YWJsZWluZGV4IDsKLSAgICBVU0hPUlQgTFZEU0hULExWRFNIQlMsTFZEU0hSUyxMVkRTSFJFLExWRFNIQkU7Ci0gICAgVVNIT1JUIExWRFNWVCxMVkRTVkJTLExWRFNWUlMsTFZEU1ZSRSxMVkRTVkJFOwotICAgIFVTSE9SVCB2YWx1ZTsKKyAgICB1bnNpZ25lZCBzaG9ydCBMVkRTSFQsTFZEU0hCUyxMVkRTSFJTLExWRFNIUkUsTFZEU0hCRTsKKyAgICB1bnNpZ25lZCBzaG9ydCBMVkRTVlQsTFZEU1ZCUyxMVkRTVlJTLExWRFNWUkUsTFZEU1ZCRTsKKyAgICB1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKIAogICAgIGx2ZHN0YWJsZWluZGV4ID0gWEdJX0dldExWRFNPRU1UYWJsZUluZGV4KCBwVkJJbmZvICk7CiAKLSAgICB0ZW1wID0gKFVDSEFSKSAoICggcFZCSW5mby0+WEcyMV9MVkRTQ2FwTGlzdFtsdmRzdGFibGVpbmRleF0uTFZEU19DYXBhYmlsaXR5ICYgKExDRFBvbGFyaXR5IDw8IDggKSApID4+IDggKTsKKyAgICB0ZW1wID0gKHVuc2lnbmVkIGNoYXIpICgocFZCSW5mby0+WEcyMV9MVkRTQ2FwTGlzdFtsdmRzdGFibGVpbmRleF0uTFZEU19DYXBhYmlsaXR5ICYgKExDRFBvbGFyaXR5IDw8IDgpKSA+PiA4KTsKICAgICB0ZW1wICY9IExDRFBvbGFyaXR5OwotICAgIE1pc2NkYXRhID0oVUNIQVIpIFhHSU5ld19HZXRSZWcyKHBWQkluZm8tPlAzY2MpIDsKKyAgICBNaXNjZGF0YSA9ICh1bnNpZ25lZCBjaGFyKSBYR0lOZXdfR2V0UmVnMihwVkJJbmZvLT5QM2NjKSA7CiAKICAgICBYR0lOZXdfU2V0UmVnMyggcFZCSW5mby0+UDNjMiAsIChNaXNjZGF0YSAmIDB4M0YpIHwgdGVtcCApIDsKIAotICAgIHRlbXAgPSAoVUNIQVIpICggcFZCSW5mby0+WEcyMV9MVkRTQ2FwTGlzdFtsdmRzdGFibGVpbmRleF0uTFZEU19DYXBhYmlsaXR5ICYgTENEUG9sYXJpdHkgKSA7CisgICAgdGVtcCA9ICh1bnNpZ25lZCBjaGFyKSAocFZCSW5mby0+WEcyMV9MVkRTQ2FwTGlzdFtsdmRzdGFibGVpbmRleF0uTFZEU19DYXBhYmlsaXR5ICYgTENEUG9sYXJpdHkpIDsKICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlAzYzQgLCAweDM1ICwgfjB4ODAgLCB0ZW1wJjB4ODAgKSA7ICAgICAgLyogU1IzNVs3XSBGUCBWU3luYyBwb2xhcml0eSAqLwogICAgIFhHSU5ld19TZXRSZWdBTkRPUiggcFZCSW5mby0+UDNjNCAsIDB4MzAgLCB+MHgyMCAsICh0ZW1wJjB4NDApPj4xICkgOyAgIC8qIFNSMzBbNV0gRlAgSFN5bmMgcG9sYXJpdHkgKi8KIApAQCAtODU2Myw3ICs4MjM3LDcgQEAKIAogICAgIExWRFNWQkUgPSBMVkRTVkJTICsgTFZEU1ZUIC0gcFZCSW5mby0+WEcyMV9MVkRTQ2FwTGlzdFtsdmRzdGFibGVpbmRleF0uTFZEU1ZERSA7CiAKLSAgICB0ZW1wID0gKCBVQ0hBUiApWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDExICkgOworICAgIHRlbXAgPSAodW5zaWduZWQgY2hhcilYR0lOZXdfR2V0UmVnMShwVkJJbmZvLT5QM2Q0LCAweDExKSA7CiAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDExICwgdGVtcCAmIDB4N2YgKSA7CQkvKiBVbmxvY2sgQ1JUQyAqLwogCiAgICAgaWYgKCEoIG1vZGVmbGFnICYgQ2hhcng4RG90ICkpCkBAIC04NjcwLDI2ICs4MzQ0LDI3IEBACiB9CiAKIC8qIG5vIHNoYWRvdyBjYXNlICovCi12b2lkIFhHSV9TZXRYRzI3TFZEU1BhcmEoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1NldFhHMjdMVkRTUGFyYSh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVQ0hBUiB0ZW1wLE1pc2NkYXRhOwotICAgIFVTSE9SVCB4cmVzICwKKyAgICB1bnNpZ25lZCBjaGFyIHRlbXAsIE1pc2NkYXRhOworICAgIHVuc2lnbmVkIHNob3J0IHhyZXMgLAogICAgICAgICAgICB5cmVzICwKICAgICAgICAgICAgbW9kZWZsYWcgLAogICAgICAgICAgICByZXNpbmRleCAsCiAgICAgICAgICAgIGx2ZHN0YWJsZWluZGV4IDsKLSAgICBVU0hPUlQgTFZEU0hULExWRFNIQlMsTFZEU0hSUyxMVkRTSFJFLExWRFNIQkU7Ci0gICAgVVNIT1JUIExWRFNWVCxMVkRTVkJTLExWRFNWUlMsTFZEU1ZSRSxMVkRTVkJFOwotICAgIFVTSE9SVCB2YWx1ZTsKKyAgICB1bnNpZ25lZCBzaG9ydCBMVkRTSFQsTFZEU0hCUyxMVkRTSFJTLExWRFNIUkUsTFZEU0hCRTsKKyAgICB1bnNpZ25lZCBzaG9ydCBMVkRTVlQsTFZEU1ZCUyxMVkRTVlJTLExWRFNWUkUsTFZEU1ZCRTsKKyAgICB1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKIAogICAgIGx2ZHN0YWJsZWluZGV4ID0gWEdJX0dldExWRFNPRU1UYWJsZUluZGV4KCBwVkJJbmZvICk7Ci0gICAgdGVtcCA9IChVQ0hBUikgKCAoIHBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3RbbHZkc3RhYmxlaW5kZXhdLkxWRFNfQ2FwYWJpbGl0eSAmIChMQ0RQb2xhcml0eSA8PCA4ICkgKSA+PiA4ICk7CisgICAgdGVtcCA9ICh1bnNpZ25lZCBjaGFyKSAoKHBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3RbbHZkc3RhYmxlaW5kZXhdLkxWRFNfQ2FwYWJpbGl0eSAmIChMQ0RQb2xhcml0eSA8PCA4KSkgPj4gOCk7CiAgICAgdGVtcCAmPSBMQ0RQb2xhcml0eTsKLSAgICBNaXNjZGF0YSA9KFVDSEFSKSBYR0lOZXdfR2V0UmVnMihwVkJJbmZvLT5QM2NjKSA7CisgICAgTWlzY2RhdGEgPSAodW5zaWduZWQgY2hhcikgWEdJTmV3X0dldFJlZzIocFZCSW5mby0+UDNjYyk7CiAKICAgICBYR0lOZXdfU2V0UmVnMyggcFZCSW5mby0+UDNjMiAsIChNaXNjZGF0YSAmIDB4M0YpIHwgdGVtcCApIDsKIAotICAgIHRlbXAgPSAoVUNIQVIpICggcFZCSW5mby0+WEcyMV9MVkRTQ2FwTGlzdFtsdmRzdGFibGVpbmRleF0uTFZEU19DYXBhYmlsaXR5ICYgTENEUG9sYXJpdHkgKSA7CisgICAgdGVtcCA9ICh1bnNpZ25lZCBjaGFyKSAocFZCSW5mby0+WEcyMV9MVkRTQ2FwTGlzdFtsdmRzdGFibGVpbmRleF0uTFZEU19DYXBhYmlsaXR5ICYgTENEUG9sYXJpdHkpIDsKICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlAzYzQgLCAweDM1ICwgfjB4ODAgLCB0ZW1wJjB4ODAgKSA7ICAgICAgLyogU1IzNVs3XSBGUCBWU3luYyBwb2xhcml0eSAqLwogICAgIFhHSU5ld19TZXRSZWdBTkRPUiggcFZCSW5mby0+UDNjNCAsIDB4MzAgLCB+MHgyMCAsICh0ZW1wJjB4NDApPj4xICkgOyAgIC8qIFNSMzBbNV0gRlAgSFN5bmMgcG9sYXJpdHkgKi8KIApAQCAtODc0NSw3ICs4NDIwLDcgQEAKIAogICAgIExWRFNWQkUgPSBMVkRTVkJTICsgTFZEU1ZUIC0gcFZCSW5mby0+WEcyMV9MVkRTQ2FwTGlzdFtsdmRzdGFibGVpbmRleF0uTFZEU1ZERSA7CiAKLSAgICB0ZW1wID0gKCBVQ0hBUiApWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDExICkgOworICAgIHRlbXAgPSAodW5zaWduZWQgY2hhcilYR0lOZXdfR2V0UmVnMShwVkJJbmZvLT5QM2Q0LCAweDExKSA7CiAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDExICwgdGVtcCAmIDB4N2YgKSA7CQkvKiBVbmxvY2sgQ1JUQyAqLwogCiAgICAgaWYgKCEoIG1vZGVmbGFnICYgQ2hhcng4RG90ICkpCkBAIC04ODUzLDIxICs4NTI4LDIxIEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIEZ1bmN0aW9uIDogWEdJX0lzTENET04gKi8KIC8qIElucHV0IDogKi8KLS8qIE91dHB1dCA6IEZBTFNFIDogU2tpcCBQU0MgQ29udHJvbCAqLwotLyogVFJVRTogRGlzYWJsZSBQU0MgKi8KKy8qIE91dHB1dCA6IDAgOiBTa2lwIFBTQyBDb250cm9sICovCisvKiAxOiBEaXNhYmxlIFBTQyAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1CT09MRUFOIFhHSV9Jc0xDRE9OKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordW5zaWduZWQgY2hhciBYR0lfSXNMQ0RPTihzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXBheCA7CisgICAgdW5zaWduZWQgc2hvcnQgdGVtcGF4IDsKIAogICAgIHRlbXBheCA9IHBWQkluZm8tPlZCSW5mbyA7CiAgICAgaWYgKCB0ZW1wYXggJiBTZXRDUlQyVG9EdWFsRWRnZSApCi0gICAgICAgIHJldHVybiBGQUxTRSA7CisJICAgIHJldHVybiAwOwogICAgIGVsc2UgaWYgKCB0ZW1wYXggJiAoIERpc2FibGVDUlQyRGlzcGxheSB8IFN3aXRjaFRvQ1JUMiB8IFNldFNpbXVTY2FuTW9kZSApICkKLSAgICAgICAgcmV0dXJuIFRSVUUgOworCSAgICByZXR1cm4gMTsKIAotICAgIHJldHVybiBGQUxTRSA7CisgICAgcmV0dXJuIDA7CiB9CiAKIApAQCAtODg3Nyw5ICs4NTUyLDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX0VuYWJsZVBXRCggIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX0VuYWJsZVBXRChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIGluZGV4ICwKKyAgICB1bnNpZ25lZCBzaG9ydCBpbmRleCAsCiAgICAgICAgICAgIHRlbXAgOwogCiAgICAgaW5kZXggPSBYR0lfR2V0TENEQ2FwUHRyKHBWQkluZm8pIDsKQEAgLTg4OTksNyArODU3NCw3IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9EaXNhYmxlUFdEKCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9EaXNhYmxlUFdEKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKICAgICBYR0lOZXdfU2V0UmVnQU5EKCBwVkJJbmZvLT5QYXJ0NFBvcnQgLCAweDI3ICwgMHg3RiApIDsJLyogZGlzYWJsZSBQV0QgKi8KIH0KQEAgLTg5MDgsMzAgKzg1ODMsMzAgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogRnVuY3Rpb24gOiBYR0lfRGlzYWJsZUNoSVNMQ0QgKi8KIC8qIElucHV0IDogKi8KLS8qIE91dHB1dCA6IEZBTFNFIC0+IE5vdCBMQ0QgTW9kZSAqLworLyogT3V0cHV0IDogMCAtPiBOb3QgTENEIE1vZGUgKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotQk9PTEVBTiBYR0lfRGlzYWJsZUNoSVNMQ0QoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit1bnNpZ25lZCBjaGFyIFhHSV9EaXNhYmxlQ2hJU0xDRChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXBieCAsCisgICAgdW5zaWduZWQgc2hvcnQgdGVtcGJ4ICwKICAgICAgICAgICAgdGVtcGFoIDsKIAogICAgIHRlbXBieCA9IHBWQkluZm8tPlNldEZsYWcgJiAoIERpc2FibGVDaEEgfCBEaXNhYmxlQ2hCICkgOwotICAgIHRlbXBhaCA9IH4oICggVVNIT1JUIClYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UGFydDFQb3J0ICAsIDB4MkUgKSApIDsKKyAgICB0ZW1wYWggPSB+KCh1bnNpZ25lZCBzaG9ydCkgWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UGFydDFQb3J0LCAweDJFKSk7CiAKICAgICBpZiAoIHRlbXBieCAmICggRW5hYmxlQ2hBIHwgRGlzYWJsZUNoQSApICkKICAgICB7CiAgICAgICAgIGlmICggISggdGVtcGFoICYgMHgwOCApICkJCS8qIENoayBMQ0RBIE1vZGUgKi8KLSAgICAgICAgICAgIHJldHVybiBGQUxTRSA7CisJCXJldHVybiAwIDsKICAgICB9CiAKICAgICBpZiAoICEoIHRlbXBieCAmICggRW5hYmxlQ2hCIHwgRGlzYWJsZUNoQiApICkgKQotICAgICAgICByZXR1cm4gRkFMU0UgOworCSAgICByZXR1cm4gMDsKIAogICAgIGlmICggdGVtcGFoICYgMHgwMSApICAgICAgIC8qIENoayBMQ0RCIE1vZGUgKi8KLSAgICAgICAgcmV0dXJuIFRSVUUgOworCSAgICByZXR1cm4gMTsKIAotICAgIHJldHVybiBGQUxTRSA7CisgICAgcmV0dXJuIDA7CiB9CiAKIApAQCAtODk0MSwyOCArODYxNiwyOCBAQAogLyogT3V0cHV0IDogMCAtPiBOb3QgTENEIG1vZGUgKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotQk9PTEVBTiBYR0lfRW5hYmxlQ2hJU0xDRChQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3Vuc2lnbmVkIGNoYXIgWEdJX0VuYWJsZUNoSVNMQ0Qoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCB0ZW1wYnggLAorICAgIHVuc2lnbmVkIHNob3J0IHRlbXBieCAsCiAgICAgICAgICAgIHRlbXBhaCA7CiAKIAogICAgIHRlbXBieCA9IHBWQkluZm8tPlNldEZsYWcgJiAoIEVuYWJsZUNoQSB8IEVuYWJsZUNoQiApIDsKLSAgICB0ZW1wYWggPSB+KCAoIFVTSE9SVCApWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MkUgKSApIDsKKyAgICB0ZW1wYWggPSB+KCAodW5zaWduZWQgc2hvcnQpWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MkUgKSApIDsKIAogICAgIGlmICggdGVtcGJ4ICYgKCBFbmFibGVDaEEgfCBEaXNhYmxlQ2hBICkgKQogICAgIHsKICAgICAgICAgaWYgKCAhKCB0ZW1wYWggJiAweDA4ICkgKQkJLyogQ2hrIExDREEgTW9kZSAqLwotICAgICAgICAgICAgcmV0dXJuIEZBTFNFIDsKKwkJcmV0dXJuIDA7CiAgICAgfQogCiAgICAgaWYgKCAhKCB0ZW1wYnggJiAoIEVuYWJsZUNoQiB8IERpc2FibGVDaEIgKSApICkKLSAgICAgICAgcmV0dXJuIEZBTFNFIDsKKwkgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIHRlbXBhaCAmIDB4MDEgKSAgICAgICAvKiBDaGsgTENEQiBNb2RlICovCi0gICAgICAgIHJldHVybiBUUlVFIDsKKwkgICAgcmV0dXJuIDE7CiAKLSAgICByZXR1cm4gRkFMU0UgOworICAgIHJldHVybiAwOwogfQogCiAKQEAgLTg5NzIsOSArODY0Nyw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1VU0hPUlQgWEdJX0dldExDRENhcFB0ciggIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3Vuc2lnbmVkIHNob3J0IFhHSV9HZXRMQ0RDYXBQdHIoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVDSEFSIHRlbXBhbCAsCisgICAgdW5zaWduZWQgY2hhciB0ZW1wYWwgLAogICAgICAgICAgIHRlbXBhaCAsCiAgICAgICAgICAgdGVtcGJsICwKICAgICAgICAgICBpIDsKQEAgLTkwMTEsOSArODY4Niw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1VU0hPUlQgWEdJX0dldExDRENhcFB0cjEoIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3Vuc2lnbmVkIHNob3J0IFhHSV9HZXRMQ0RDYXBQdHIxKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcGFoICwKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wYWggLAogICAgICAgICAgICB0ZW1wYWwgLAogICAgICAgICAgICB0ZW1wYmwgLAogICAgICAgICAgICBpIDsKQEAgLTkwNTYsOSArODczMSwxMCBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfR2V0TENEU3luYyggVVNIT1JUKiBIU3luY1dpZHRoICwgVVNIT1JUKiBWU3luY1dpZHRoLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9HZXRMQ0RTeW5jKHVuc2lnbmVkIHNob3J0ICpIU3luY1dpZHRoICwgdW5zaWduZWQgc2hvcnQgKlZTeW5jV2lkdGgsCisJCSAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIEluZGV4IDsKKyAgICB1bnNpZ25lZCBzaG9ydCBJbmRleCA7CiAKICAgICBJbmRleCA9IFhHSV9HZXRMQ0RDYXBQdHIocFZCSW5mbykgOwogICAgICpIU3luY1dpZHRoID0gcFZCSW5mby0+TENEQ2FwTGlzdFsgSW5kZXggXS5MQ0RfSFN5bmNXaWR0aCA7CkBAIC05MDc1LDkgKzg3NTEsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfRW5hYmxlQnJpZGdlKCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSV9FbmFibGVCcmlkZ2Uoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcGJsICwKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wYmwgLAogICAgICAgICAgICB0ZW1wYWggOwogCiAgICAgaWYgKCBwVkJJbmZvLT5TZXRGbGFnID09IFdpbjl4RE9TTW9kZSApCkBAIC05MTQ2LDcgKzg4MjIsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoICggcFZCSW5mby0+U2V0RmxhZyAmIEVuYWJsZUNoQiApIHx8ICggcFZCSW5mby0+VkJJbmZvICYgKCBTZXRDUlQyVG9MQ0QgfCBTZXRDUlQyVG9UViB8IFNldENSVDJUb1JBTURBQyApICkgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRlbXBhaCA9ICggVUNIQVIgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgzMiApIDsKKwkJdGVtcGFoID0gKHVuc2lnbmVkIGNoYXIpWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UDNjNCwgMHgzMik7CiAgICAgICAgICAgICAgICAgdGVtcGFoICY9IDB4REY7CiAgICAgICAgICAgICAgICAgaWYgKCBwVkJJbmZvLT5WQkluZm8gJiBTZXRJblNsYXZlTW9kZSApCiAgICAgICAgICAgICAgICAgewpAQCAtOTE1Niw4ICs4ODMyLDcgQEAKICAgICAgICAgICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MzIgLCB0ZW1wYWggKSA7CiAgICAgICAgICAgICAgICAgWEdJTmV3X1NldFJlZ09SKCBwVkJJbmZvLT5QM2M0ICwgMHgxRSAsIDB4MjAgKSA7CiAKLQotICAgICAgICAgICAgICAgIHRlbXBhaCA9ICggVUNIQVIgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QYXJ0MVBvcnQgLCAweDJFICkgOworCQl0ZW1wYWggPSAodW5zaWduZWQgY2hhcilYR0lOZXdfR2V0UmVnMShwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MkUpOwogCiAgICAgICAgICAgICAgICAgaWYgKCAhKCB0ZW1wYWggJiAweDgwICkgKQogICAgICAgICAgICAgICAgICAgICBYR0lOZXdfU2V0UmVnT1IoIHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MkUgLCAweDgwICkgOyAgIAkvKiBCVkJET0VOQUJMRSA9IDEgKi8KQEAgLTkyMzgsNyArODkxMyw3IEBACiAKIAogCi0gICAgICAgIHRlbXBhaCA9ICggVUNIQVIgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QYXJ0MVBvcnQgLCAweDJFICkgOworCXRlbXBhaCA9ICh1bnNpZ25lZCBjaGFyKVhHSU5ld19HZXRSZWcxKHBWQkluZm8tPlBhcnQxUG9ydCwgMHgyRSk7CiAgICAgICAgIGlmICggISggdGVtcGFoICYgMHg4MCApICkKICAgICAgICAgICAgIFhHSU5ld19TZXRSZWdPUiggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgyRSAsIDB4ODAgKSA7CS8qIEJWQkRPRU5BQkxFID0gMSAqLwogCkBAIC05Mjg5LDkgKzg5NjQsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfRGlzYWJsZUJyaWRnZShQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJX0Rpc2FibGVCcmlkZ2Uoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcGF4ICwKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wYXggLAogICAgICAgICAgICB0ZW1wYnggLAogICAgICAgICAgICB0ZW1wYWggPSAwICwKICAgICAgICAgICAgdGVtcGJsID0gMCA7CkBAIC05NDcwLDkgKzkxNDUsOSBAQAogLyogQSA6IEV4dDc1MHAgKi8KIC8qIEIgOiBTdDc1MHAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotVVNIT1JUIFhHSV9HZXRUVlB0ckluZGV4KCAgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordW5zaWduZWQgc2hvcnQgWEdJX0dldFRWUHRySW5kZXgoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCB0ZW1wYnggPSAwIDsKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wYnggPSAwIDsKIAogICAgIGlmICggcFZCSW5mby0+VFZJbmZvICYgU2V0UEFMVFYgKQogICAgICAgICB0ZW1wYnggPSAyIDsKQEAgLTk0OTcsNyArOTE3Miw3IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiBDdXN0b21pemVkIFBhcmFtLiBmb3IgMzAxICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX09FTTMxMFNldHRpbmcoIFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lfT0VNMzEwU2V0dGluZyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAgICAgaWYgKCBwVkJJbmZvLT5TZXRGbGFnICYgV2luOXhET1NNb2RlICkKICAgICAgICAgcmV0dXJuIDsKQEAgLTk1MjcsMTEgKzkyMDIsMTEgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldERlbGF5Q29tcCggUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfU2V0RGVsYXlDb21wKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgaW5kZXggOworICAgIHVuc2lnbmVkIHNob3J0IGluZGV4IDsKIAotICAgIFVDSEFSICB0ZW1wYWggLAorICAgIHVuc2lnbmVkIGNoYXIgIHRlbXBhaCAsCiAgICAgICAgICAgIHRlbXBibCAsCiAgICAgICAgICAgIHRlbXBiaCA7CiAKQEAgLTk2MDUsOSArOTI4MCw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRMQ0RDYXAoIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1NldExDRENhcChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXBjeCA7CisgICAgdW5zaWduZWQgc2hvcnQgdGVtcGN4IDsKIAogICAgIHRlbXBjeCA9IHBWQkluZm8tPkxDRENhcExpc3RbIFhHSV9HZXRMQ0RDYXBQdHIocFZCSW5mbykgXS5MQ0RfQ2FwYWJpbGl0eSA7CiAKQEAgLTk2MTYsMTAgKzkyOTEsMTIgQEAKICAgICAgICAgaWYgKCBwVkJJbmZvLT5WQlR5cGUgJiAoIFZCX1hHSTMwMUxWIHwgVkJfWEdJMzAyTFYgfCBWQl9YR0kzMDFDICkgKQogICAgICAgICB7ICAgICAgICAJCQkJLyogMzAxTFYvMzAyTFYgb25seSAqLwogICAgICAgICAgICAgLyogU2V0IDMwMUxWIENhcGFiaWxpdHkgKi8KLSAgICAgICAgICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QYXJ0NFBvcnQgLCAweDI0ICwgKCBVQ0hBUiApKCB0ZW1wY3ggJiAweDFGICkgKSA7CisJCVhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlBhcnQ0UG9ydCwgMHgyNCwgKHVuc2lnbmVkIGNoYXIpKHRlbXBjeCAmIDB4MUYpKTsKIAl9CiAgICAgICAgIC8qIFZCIERyaXZpbmcgKi8KLSAgICAgICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QYXJ0NFBvcnQgLCAweDBEICwgfiggKCBFbmFibGVWQkNMS0RSVkxPVyB8IEVuYWJsZVBMTFNQTE9XICkgPj4gOCApICwgKCBVU0hPUlQgKSggKCB0ZW1wY3ggJiAoIEVuYWJsZVZCQ0xLRFJWTE9XIHwgRW5hYmxlUExMU1BMT1cgKSApID4+IDggKSApIDsKKwlYR0lOZXdfU2V0UmVnQU5ET1IocFZCSW5mby0+UGFydDRQb3J0LCAweDBELAorCQkJICAgfigoRW5hYmxlVkJDTEtEUlZMT1cgfCBFbmFibGVQTExTUExPVykgPj4gOCksCisJCQkgICAodW5zaWduZWQgc2hvcnQpKCh0ZW1wY3ggJiAoRW5hYmxlVkJDTEtEUlZMT1cgfCBFbmFibGVQTExTUExPVykpID4+IDgpKTsKICAgICB9CiAKICAgICBpZiAoIHBWQkluZm8tPlZCVHlwZSAmICggVkJfWEdJMzAxQiB8IFZCX1hHSTMwMkIgfCBWQl9YR0kzMDFMViB8IFZCX1hHSTMwMkxWIHwgVkJfWEdJMzAxQyApICkKQEAgLTk2NDYsMzIgKzkzMjMsMzQgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldExDRENhcF9BKFVTSE9SVCB0ZW1wY3gsUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSV9TZXRMQ0RDYXBfQSh1bnNpZ25lZCBzaG9ydCB0ZW1wY3gsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcCA7CisgICAgdW5zaWduZWQgc2hvcnQgdGVtcCA7CiAKICAgICB0ZW1wID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDM3ICkgOwogCiAgICAgaWYgKCB0ZW1wICYgTENEUkdCMThCaXQgKQogICAgIHsKLSAgICAgICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QYXJ0MVBvcnQgLCAweDE5ICwgMHgwRiAsICggVVNIT1JUICkoIDB4MjAgfCAoIHRlbXBjeCAmIDB4MDBDMCApICkgKSA7IC8qIEVuYWJsZSBEaXRoZXIgKi8KKwlYR0lOZXdfU2V0UmVnQU5ET1IocFZCSW5mby0+UGFydDFQb3J0LCAweDE5LCAweDBGLAorCQkJICAgKHVuc2lnbmVkIHNob3J0KSgweDIwIHwgKHRlbXBjeCAmIDB4MDBDMCkpKTsgLyogRW5hYmxlIERpdGhlciAqLwogICAgICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MUEgLCAweDdGICwgMHg4MCApIDsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QYXJ0MVBvcnQgLCAweDE5ICwgMHgwRiAsICggVVNIT1JUICkoIDB4MzAgfCAoIHRlbXBjeCAmIDB4MDBDMCApICkgKSA7CisJWEdJTmV3X1NldFJlZ0FORE9SKHBWQkluZm8tPlBhcnQxUG9ydCwgMHgxOSwgMHgwRiwKKwkJCSAgICh1bnNpZ25lZCBzaG9ydCkoMHgzMCB8ICh0ZW1wY3ggJiAweDAwQzApKSk7CiAgICAgICAgIFhHSU5ld19TZXRSZWdBTkRPUiggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgxQSAsIDB4N0YgLCAweDAwICkgOwogICAgIH0KIAogLyoKICAgICBpZiAoIHRlbXBjeCAmIEVuYWJsZUxDRDI0YnBwICkJLy8gMjRiaXRzCiAgICAgewotICAgICAgICBYR0lOZXdfU2V0UmVnQU5ET1IocFZCSW5mby0+UGFydDFQb3J0LDB4MTksIDB4MEYsKFVTSE9SVCkoMHgzMHwodGVtcGN4JjB4MDBDMCkpICk7CisJWEdJTmV3X1NldFJlZ0FORE9SKHBWQkluZm8tPlBhcnQxUG9ydCwweDE5LCAweDBGLCh1bnNpZ25lZCBzaG9ydCkoMHgzMHwodGVtcGN4JjB4MDBDMCkpICk7CiAgICAgICAgIFhHSU5ld19TZXRSZWdBTkRPUihwVkJJbmZvLT5QYXJ0MVBvcnQsMHgxQSwweDdGLDB4MDApOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBYR0lOZXdfU2V0UmVnQU5ET1IocFZCSW5mby0+UGFydDFQb3J0LDB4MTksIDB4MEYsKFVTSE9SVCkoMHgyMHwodGVtcGN4JjB4MDBDMCkpICk7Ly9FbmFibGUgRGl0aGVyCisJWEdJTmV3X1NldFJlZ0FORE9SKHBWQkluZm8tPlBhcnQxUG9ydCwweDE5LCAweDBGLCh1bnNpZ25lZCBzaG9ydCkoMHgyMHwodGVtcGN4JjB4MDBDMCkpICk7IC8vIEVuYWJsZSBEaXRoZXIKICAgICAgICAgWEdJTmV3X1NldFJlZ0FORE9SKHBWQkluZm8tPlBhcnQxUG9ydCwweDFBLDB4N0YsMHg4MCk7CiAgICAgfQogKi8KQEAgLTk2ODQsMTIgKzkzNjMsMTQgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldExDRENhcF9CKFVTSE9SVCB0ZW1wY3gsUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSV9TZXRMQ0RDYXBfQih1bnNpZ25lZCBzaG9ydCB0ZW1wY3gsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKICAgICBpZiAoIHRlbXBjeCAmIEVuYWJsZUxDRDI0YnBwICkJLyogMjRiaXRzICovCi0gICAgICAgIFhHSU5ld19TZXRSZWdBTkRPUiggcFZCSW5mby0+UGFydDJQb3J0ICwgMHgxQSAsIDB4RTAgLCAoIFVTSE9SVCApKCAoICggdGVtcGN4ICYgMHgwMGZmICkgPj4gNiApIHwgMHgwYyApICkgOworCSAgICBYR0lOZXdfU2V0UmVnQU5ET1IocFZCSW5mby0+UGFydDJQb3J0LCAweDFBLCAweEUwLAorCQkJICAgICAgICh1bnNpZ25lZCBzaG9ydCkoKCh0ZW1wY3ggJiAweDAwZmYpID4+IDYpIHwgMHgwYykpOwogICAgIGVsc2UKLSAgICAgICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QYXJ0MlBvcnQgLCAweDFBICwgMHhFMCAsICggVVNIT1JUICkoICggKCB0ZW1wY3ggJiAweDAwZmYgKSA+PiA2ICkgfCAweDE4ICkgKSA7IC8qIEVuYWJsZSBEaXRoZXIgKi8KKwkgICAgWEdJTmV3X1NldFJlZ0FORE9SKHBWQkluZm8tPlBhcnQyUG9ydCwgMHgxQSwgMHhFMCwKKwkJCSAgICAgICAodW5zaWduZWQgc2hvcnQpKCgodGVtcGN4ICYgMHgwMGZmKSA+PiA2KSB8IDB4MTgpKTsgLyogRW5hYmxlIERpdGhlciAqLwogfQogCiAKQEAgLTk2OTksOSArOTM4MCw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFNldFNwZWN0cnVtKCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFNldFNwZWN0cnVtKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgaW5kZXggOworICAgIHVuc2lnbmVkIHNob3J0IGluZGV4IDsKIAogICAgIGluZGV4ID0gWEdJX0dldExDRENhcFB0cihwVkJJbmZvKSA7CiAKQEAgLTk3MjUsMTIgKzk0MDYsMTMgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6IFNldCBUViBDdXN0b21pemVkIFBhcmFtLiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRBbnRpRmxpY2tlciggVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfU2V0QW50aUZsaWNrZXIodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCXN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcGJ4ICwKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wYnggLAogICAgICAgICAgICBpbmRleCA7CiAKLSAgICBVQ0hBUiB0ZW1wYWggOworICAgIHVuc2lnbmVkIGNoYXIgdGVtcGFoIDsKIAogICAgIGlmIChwVkJJbmZvLT5UVkluZm8gJiAoIFNldFlQYlByTW9kZTUyNXAgfCBTZXRZUGJQck1vZGU3NTBwICkgKQogICAgICAgICByZXR1cm4gOwpAQCAtOTc2MSwxMiArOTQ0MywxMiBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2V0RWRnZUVuaGFuY2UoIFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgTW9kZUlkSW5kZXggLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJX1NldEVkZ2VFbmhhbmNlKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcGJ4ICwKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wYnggLAogICAgICAgICAgICBpbmRleCA7CiAKLSAgICBVQ0hBUiB0ZW1wYWggOworICAgIHVuc2lnbmVkIGNoYXIgdGVtcGFoIDsKIAogCiAgICAgdGVtcGJ4ID0gWEdJX0dldFRWUHRySW5kZXgocFZCSW5mbyApIDsKQEAgLTk3OTUsMjIgKzk0NzcsMjYgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldFBoYXNlSW5jciggUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfU2V0UGhhc2VJbmNyKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcGJ4IDsKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wYnggOwogCi0gICAgVUNIQVIgdGVtcGNsICwKKyAgICB1bnNpZ25lZCBjaGFyIHRlbXBjbCAsCiAgICAgICAgICAgdGVtcGNoIDsKIAotICAgIFVMT05HIHRlbXBEYXRhIDsKKyAgICB1bnNpZ25lZCBsb25nIHRlbXBEYXRhIDsKIAogICAgIFhHSV9HZXRUVlB0ckluZGV4MiggJnRlbXBieCAsICZ0ZW1wY2wgLCAmdGVtcGNoLCBwVkJJbmZvICkgOyAvKiBieCwgY2wsIGNoICovCiAgICAgdGVtcERhdGEgPSBUVlBoYXNlTGlzdFsgdGVtcGJ4IF0gOwogCi0gICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlBhcnQyUG9ydCAsIDB4MzEgLCAoIFVTSE9SVCApKCB0ZW1wRGF0YSAmIDB4MDAwMDAwRkYgKSApIDsKLSAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDJQb3J0ICwgMHgzMiAsICggVVNIT1JUICkoICggdGVtcERhdGEgJiAweDAwMDBGRjAwICkgPj4gOCApICkgOwotICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QYXJ0MlBvcnQgLCAweDMzICwgKCBVU0hPUlQgKSggKCB0ZW1wRGF0YSAmIDB4MDBGRjAwMDAgKSA+PiAxNiApICkgOwotICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QYXJ0MlBvcnQgLCAweDM0ICwgKCBVU0hPUlQgKSggKCB0ZW1wRGF0YSAmIDB4RkYwMDAwMDAgKSA+PiAyNCApICkgOworICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlBhcnQyUG9ydCwgMHgzMSwKKwkJICAgKHVuc2lnbmVkIHNob3J0KSh0ZW1wRGF0YSAmIDB4MDAwMDAwRkYpKTsKKyAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QYXJ0MlBvcnQsIDB4MzIsCisJCSAgICh1bnNpZ25lZCBzaG9ydCkoKHRlbXBEYXRhICYgMHgwMDAwRkYwMCkgPj4gOCkpOworICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlBhcnQyUG9ydCwgMHgzMywKKwkJICAgKHVuc2lnbmVkIHNob3J0KSgodGVtcERhdGEgJiAweDAwRkYwMDAwKSA+PiAxNikpOworICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlBhcnQyUG9ydCwgMHgzNCwKKwkJICAgKHVuc2lnbmVkIHNob3J0KSgodGVtcERhdGEgJiAweEZGMDAwMDAwKSA+PiAyNCkpOwogfQogCiAKQEAgLTk4MjAsMTIgKzk1MDYsMTMgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldFlGaWx0ZXIoIFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lfU2V0WUZpbHRlcih1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCB0ZW1wYnggLAorICAgIHVuc2lnbmVkIHNob3J0IHRlbXBieCAsCiAgICAgICAgICAgIGluZGV4IDsKIAotICAgIFVDSEFSIHRlbXBjbCAsCisgICAgdW5zaWduZWQgY2hhciB0ZW1wY2wgLAogICAgICAgICAgIHRlbXBjaCAsCiAgICAgICAgICAgdGVtcGFsICwKICAgICAgICAgICAqZmlsdGVyUHRyIDsKQEAgLTk5MjQsNyArOTYxMSw4IEBACiAvKiAxIDogMzAxQi8zMDJCLzMwMUxWLzMwMkxWICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX0dldFRWUHRySW5kZXgyKFVTSE9SVCogdGVtcGJ4LFVDSEFSKiB0ZW1wY2wsVUNIQVIqIHRlbXBjaCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSV9HZXRUVlB0ckluZGV4Mih1bnNpZ25lZCBzaG9ydCAqdGVtcGJ4LCB1bnNpZ25lZCBjaGFyICp0ZW1wY2wsCisJCQl1bnNpZ25lZCBjaGFyICp0ZW1wY2gsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKICAgICAqdGVtcGJ4ID0gMCA7CiAgICAgKnRlbXBjbCA9IDAgOwpAQCAtOTk2NiwxMiArOTY1NCwxNCBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogT3JpZ2luIGNvZGUgZm9yIGNydDJncm91cCAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRDUlQyTW9kZVJlZ3MoVVNIT1JUIE1vZGVObyxQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJX1NldENSVDJNb2RlUmVncyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCQkgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCQkgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCB0ZW1wYmwgOwotICAgIFNIT1JUICB0ZW1wY2wgOworICAgIHVuc2lnbmVkIHNob3J0IHRlbXBibCA7CisgICAgc2hvcnQgIHRlbXBjbCA7CiAKLSAgICBVQ0hBUiAgdGVtcGFoIDsKKyAgICB1bnNpZ25lZCBjaGFyICB0ZW1wYWggOwogCiAgICAgLyogWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MDMgLCAweDAwICkgOyAvLyBmaXggd3JpdGUgcGFydDEgaW5kZXggMCBCVERSQU0gYml0IEJ1ZyAqLwogICAgIHRlbXBhaD0wOwpAQCAtMTAxOTUsOSArOTg4NSw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9DbG9zZUNSVEMoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX0Nsb3NlQ1JUQyhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCB0ZW1wYnggOworICAgIHVuc2lnbmVkIHNob3J0IHRlbXBieCA7CiAKICAgICB0ZW1wYnggPSAwIDsKIApAQCAtMTAyMTQsOSArOTkwNCw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9PcGVuQ1JUQyggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfT3BlbkNSVEMoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcGJ4IDsKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wYnggOwogCiAgICAgdGVtcGJ4ID0gMCA7CiAKQEAgLTEwMjMwLDkgKzk5MjAsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfR2V0UkFNREFDMkRBVEEoVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCAsIFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX0dldFJBTURBQzJEQVRBKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCB0ZW1wYXggLAorICAgIHVuc2lnbmVkIHNob3J0IHRlbXBheCAsCiAgICAgICAgICAgIHRlbXBieCAsCiAgICAgICAgICAgIHRlbXAxICwKICAgICAgICAgICAgdGVtcDIgLApAQCAtMTAyNTcsMTUgKzk5NDcsMTUgQEAKICAgICAgICAgbW9kZWZsYWcgPSBwVkJJbmZvLT5FTW9kZUlEVGFibGVbIE1vZGVJZEluZGV4IF0uRXh0X01vZGVGbGFnIDsKICAgICAgICAgQ1JUMUluZGV4ID0gcFZCSW5mby0+UmVmSW5kZXhbIFJlZnJlc2hSYXRlVGFibGVJbmRleCBdLkV4dF9DUlQxQ1JUQyA7CiAgICAgICAgIENSVDFJbmRleCAmPSBJbmRleE1hc2sgOwotICAgICAgICB0ZW1wMSA9ICggVVNIT1JUIClwVkJJbmZvLT5YR0lORVdVQl9DUlQxVGFibGVbIENSVDFJbmRleCBdLkNSWyAwIF0gOwotICAgICAgICB0ZW1wMiA9ICggVVNIT1JUIClwVkJJbmZvLT5YR0lORVdVQl9DUlQxVGFibGVbIENSVDFJbmRleCBdLkNSWyA1IF0gOworCXRlbXAxID0gKHVuc2lnbmVkIHNob3J0KXBWQkluZm8tPlhHSU5FV1VCX0NSVDFUYWJsZVtDUlQxSW5kZXhdLkNSWzBdOworCXRlbXAyID0gKHVuc2lnbmVkIHNob3J0KXBWQkluZm8tPlhHSU5FV1VCX0NSVDFUYWJsZVtDUlQxSW5kZXhdLkNSWzVdOwogCXRlbXBheCA9ICggdGVtcDEgJiAweEZGICkgfCAoICggdGVtcDIgJiAweDAzICkgPDwgOCApIDsKLSAgICAgICAgdGVtcGJ4ID0gKCBVU0hPUlQgKXBWQkluZm8tPlhHSU5FV1VCX0NSVDFUYWJsZVsgQ1JUMUluZGV4IF0uQ1JbIDggXSA7Ci0gICAgICAgIHRlbXBjeCA9ICggVVNIT1JUIClwVkJJbmZvLT5YR0lORVdVQl9DUlQxVGFibGVbIENSVDFJbmRleCBdLkNSWyAxNCBdIDw8IDggOworCXRlbXBieCA9ICh1bnNpZ25lZCBzaG9ydClwVkJJbmZvLT5YR0lORVdVQl9DUlQxVGFibGVbQ1JUMUluZGV4XS5DUls4XTsKKwl0ZW1wY3ggPSAodW5zaWduZWQgc2hvcnQpcFZCSW5mby0+WEdJTkVXVUJfQ1JUMVRhYmxlW0NSVDFJbmRleF0uQ1JbMTRdIDw8IDg7CiAJdGVtcGN4ICY9IDB4MDEwMCA7CiAJdGVtcGN4ID0gdGVtcGN4IDw8IDIgOwogCXRlbXBieCB8PSB0ZW1wY3g7Ci0gICAgICAgIHRlbXAxID0gKCBVU0hPUlQgKXBWQkluZm8tPlhHSU5FV1VCX0NSVDFUYWJsZVsgQ1JUMUluZGV4IF0uQ1JbIDkgXSA7CisJdGVtcDEgPSAodW5zaWduZWQgc2hvcnQpcFZCSW5mby0+WEdJTkVXVUJfQ1JUMVRhYmxlW0NSVDFJbmRleF0uQ1JbOV07CiAgICAgfQogCiAgICAgaWYgKCB0ZW1wMSAmIDB4MDEgKQpAQCAtMTAyOTUsMTEgKzk5ODUsMTEgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLVVTSE9SVCBYR0lfR2V0Q29sb3JEZXB0aChVU0hPUlQgTW9kZU5vICwgVVNIT1JUIE1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3Vuc2lnbmVkIHNob3J0IFhHSV9HZXRDb2xvckRlcHRoKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgQ29sb3JEZXB0aFsgNiBdID0geyAxICwgMiAsIDQgLCA0ICwgNiAsIDggfSA7Ci0gICAgU0hPUlQgIGluZGV4IDsKLSAgICBVU0hPUlQgbW9kZWZsYWcgOworICAgIHVuc2lnbmVkIHNob3J0IENvbG9yRGVwdGhbIDYgXSA9IHsgMSAsIDIgLCA0ICwgNCAsIDYgLCA4IH0gOworICAgIHNob3J0IGluZGV4IDsKKyAgICB1bnNpZ25lZCBzaG9ydCBtb2RlZmxhZyA7CiAKICAgICBpZiAoIE1vZGVObyA8PSAweDEzICkKICAgICB7CkBAIC0xMDMyNiw3ICsxMDAxNiw3IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9VbkxvY2tDUlQyKCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCAgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfVW5Mb2NrQ1JUMihzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKIAogICAgIFhHSU5ld19TZXRSZWdBTkRPUiggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgyZiAsIDB4RkYgLCAweDAxICkgOwpAQCAtMTAzNDAsNyArMTAwMzAsNyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfTG9ja0NSVDIoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sICBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9Mb2NrQ1JUMihzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKIAogICAgIFhHSU5ld19TZXRSZWdBTkRPUiggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgyRiAsIDB4RkUgLCAweDAwICkgOwpAQCAtMTAzNTUsNyArMTAwNDUsNyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lOZXdfRW5hYmxlQ1JUMiggUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSU5ld19FbmFibGVDUlQyKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlAzYzQgLCAweDFFICwgMHhGRiAsIDB4MjAgKSA7CiB9CkBAIC0xMDM2OCwxMiArMTAwNTgsMTIgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJTmV3X0xDRF9XYWl0X1RpbWUoVUNIQVIgRGVsYXlUaW1lLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJTmV3X0xDRF9XYWl0X1RpbWUodW5zaWduZWQgY2hhciBEZWxheVRpbWUsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgaSAsCisgICAgdW5zaWduZWQgc2hvcnQgaSAsCiAgICAgICAgICAgIGogOwogCi0gICAgVUxPTkcgdGVtcCAsCisgICAgdW5zaWduZWQgbG9uZyB0ZW1wICwKICAgICAgICAgICBmbGFnIDsKIAogICAgIGZsYWcgPSAwIDsKQEAgLTEwNDA1LDkgKzEwMDk1LDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLUJPT0xFQU4gWEdJX0JyaWRnZUlzT24oIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3Vuc2lnbmVkIGNoYXIgWEdJX0JyaWRnZUlzT24oc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBmbGFnIDsKKyAgICB1bnNpZ25lZCBzaG9ydCBmbGFnIDsKIAogICAgIGlmICggcFZCSW5mby0+SUZfREVGX0xWRFMgPT0gMSApCiAgICAgewpAQCAtMTA0MzEsOSArMTAxMjEsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfTG9uZ1dhaXQoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSV9Mb25nV2FpdChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIGkgOworICAgIHVuc2lnbmVkIHNob3J0IGkgOwogCiAgICAgaSA9IFhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgxRiApIDsKIApAQCAtMTA0NjAsOSArMTAxNTAsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfVkJMb25nV2FpdCggUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfVkJMb25nV2FpdChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXBhbCAsCisgICAgdW5zaWduZWQgc2hvcnQgdGVtcGFsICwKICAgICAgICAgICAgdGVtcCAsCiAgICAgICAgICAgIGkgLAogICAgICAgICAgICBqIDsKQEAgLTEwNTE5LDE2ICsxMDIwOSwxNiBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotVVNIT1JUIFhHSV9HZXRWR0FIVDIoIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3Vuc2lnbmVkIHNob3J0IFhHSV9HZXRWR0FIVDIoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVMT05HIHRlbXBheCAsCisgICAgdW5zaWduZWQgbG9uZyB0ZW1wYXggLAogICAgICAgICAgIHRlbXBieCA7CiAKICAgICB0ZW1wYnggPSAoICggcFZCSW5mby0+VkdBVlQgLSBwVkJJbmZvLT5WR0FWREUgKSAqIHBWQkluZm8tPlJWQkhDTUFYICkgJiAweEZGRkYgOwogICAgIHRlbXBheCA9ICggcFZCSW5mby0+VlQgLSBwVkJJbmZvLT5WREUgKSAqIHBWQkluZm8tPlJWQkhDRkFDVCA7CiAgICAgdGVtcGF4ID0gKCB0ZW1wYXggKiBwVkJJbmZvLT5IVCApIC90ZW1wYnggOwogCi0gICAgcmV0dXJuKCAoIFVTSE9SVCApdGVtcGF4ICkgOworICAgIHJldHVybiggKHVuc2lnbmVkIHNob3J0KXRlbXBheCApIDsKIH0KIAogCkBAIC0xMDUzOCwxOSArMTAyMjgsMjMgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLVVTSE9SVCBYR0lfR2V0VkNMSzJQdHIoIFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgTW9kZUlkSW5kZXggLCBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4ICwgUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit1bnNpZ25lZCBzaG9ydCBYR0lfR2V0VkNMSzJQdHIodW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwKKwkJCSAgICAgICBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJCSAgICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXBieCA7CisgICAgdW5zaWduZWQgc2hvcnQgdGVtcGJ4IDsKIAotICAgIFVTSE9SVCBMQ0RYbGF0MVZDTEtbIDQgXSA9IHsgVkNMSzY1ICsgMiAsIFZDTEs2NSArIDIgLCBWQ0xLNjUgKyAyICwgVkNMSzY1ICsgMiB9IDsKLSAgICBVU0hPUlQgTENEWGxhdDJWQ0xLWyA0IF0gPSB7IFZDTEsxMDhfMiArIDUgLCBWQ0xLMTA4XzIgKyA1ICwgVkNMSzEwOF8yICsgNSAsIFZDTEsxMDhfMiArIDUgfSA7Ci0gICAgVVNIT1JUIExWRFNYbGF0MVZDTEtbIDQgXSA9IHsgVkNMSzQwICwgVkNMSzQwICwgVkNMSzQwICwgVkNMSzQwIH0gOwotICAgIFVTSE9SVCBMVkRTWGxhdDJWQ0xLWyA0IF0gPSB7IFZDTEs2NSArIDIgLCBWQ0xLNjUgKyAyICwgVkNMSzY1ICsgMiAsIFZDTEs2NSArIDIgfSA7Ci0gICAgVVNIT1JUIExWRFNYbGF0M1ZDTEtbIDQgXSA9IHsgVkNMSzY1ICsgMiAsIFZDTEs2NSArIDIgLCBWQ0xLNjUgKyAyICwgVkNMSzY1ICsgMiB9IDsKKyAgICB1bnNpZ25lZCBzaG9ydCBMQ0RYbGF0MVZDTEtbIDQgXSA9IHsgVkNMSzY1ICsgMiAsIFZDTEs2NSArIDIgLCBWQ0xLNjUgKyAyICwgVkNMSzY1ICsgMiB9IDsKKyAgICB1bnNpZ25lZCBzaG9ydCBMQ0RYbGF0MlZDTEtbIDQgXSA9IHsgVkNMSzEwOF8yICsgNSAsIFZDTEsxMDhfMiArIDUgLCBWQ0xLMTA4XzIgKyA1ICwgVkNMSzEwOF8yICsgNSB9IDsKKyAgICB1bnNpZ25lZCBzaG9ydCBMVkRTWGxhdDFWQ0xLWyA0IF0gPSB7IFZDTEs0MCAsIFZDTEs0MCAsIFZDTEs0MCAsIFZDTEs0MCB9IDsKKyAgICB1bnNpZ25lZCBzaG9ydCBMVkRTWGxhdDJWQ0xLWyA0IF0gPSB7IFZDTEs2NSArIDIgLCBWQ0xLNjUgKyAyICwgVkNMSzY1ICsgMiAsIFZDTEs2NSArIDIgfSA7CisgICAgdW5zaWduZWQgc2hvcnQgTFZEU1hsYXQzVkNMS1sgNCBdID0geyBWQ0xLNjUgKyAyICwgVkNMSzY1ICsgMiAsIFZDTEs2NSArIDIgLCBWQ0xLNjUgKyAyIH0gOwogCi0gICAgVVNIT1JUIENSVDJJbmRleCAsIFZDTEtJbmRleCA7Ci0gICAgVVNIT1JUIG1vZGVmbGFnICwgcmVzaW5mbyA7Ci0gICAgVUNIQVIgKkNIVFZWQ0xLUHRyID0gTlVMTCA7CisgICAgdW5zaWduZWQgc2hvcnQgQ1JUMkluZGV4ICwgVkNMS0luZGV4IDsKKyAgICB1bnNpZ25lZCBzaG9ydCBtb2RlZmxhZyAsIHJlc2luZm8gOworICAgIHVuc2lnbmVkIGNoYXIgKkNIVFZWQ0xLUHRyID0gTlVMTCA7CiAKICAgICBpZiAoIE1vZGVObyA8PSAweDEzICkKICAgICB7CkBAIC0xMDY2NSw3ICsxMDM1OSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7CS8qIGZvciBDUlQyICovCi0gICAgICAgICAgICAgICAgVkNMS0luZGV4ID0gKCBVQ0hBUiApWEdJTmV3X0dldFJlZzIoICggcFZCSW5mby0+UDNjYSArIDB4MDIgKSApIDsJLyogUG9ydCAzY2NoICovCisJCVZDTEtJbmRleCA9ICh1bnNpZ25lZCBjaGFyKVhHSU5ld19HZXRSZWcyKChwVkJJbmZvLT5QM2NhICsgMHgwMikpOwkvKiBQb3J0IDNjY2ggKi8KIAkJVkNMS0luZGV4ID0gKCAoIFZDTEtJbmRleCA+PiAyICkgJiAweDAzICkgOwogICAgICAgICAgICAgICAgIGlmICggTW9kZU5vID4gMHgxMyApCiAgICAgICAgICAgICAgICAgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3NldG1vZGUuaCBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9zZXRtb2RlLmgKaW5kZXggMDk3NTNkNy4uMGRjYzI5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3NldG1vZGUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfc2V0bW9kZS5oCkBAIC0xLDQwICsxLDQyIEBACiAjaWZuZGVmICBfVkJTRVRNT0RFXwogI2RlZmluZSAgX1ZCU0VUTU9ERV8KIAotZXh0ZXJuICAgdm9pZCAgICAgSW5pdFRvMzMwUG9pbnRlcihVQ0hBUixQVkJfREVWSUNFX0lORk8pOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJX1VuTG9ja0NSVDIoUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgUFZCX0RFVklDRV9JTkZPICk7Ci1leHRlcm4gICB2b2lkICAgICBYR0lfTG9ja0NSVDIoUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgUFZCX0RFVklDRV9JTkZPICk7Ci1leHRlcm4gICB2b2lkICAgICBYR0lfTG9uZ1dhaXQoIFBWQl9ERVZJQ0VfSU5GTyApOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJX1NldENSVDJNb2RlUmVncyhVU0hPUlQgTW9kZU5vLFBYR0lfSFdfREVWSUNFX0lORk8sICBQVkJfREVWSUNFX0lORk8gICk7Ci1leHRlcm4gICB2b2lkICAgICBYR0lfRGlzYWJsZUJyaWRnZShQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCBQVkJfREVWSUNFX0lORk8gKTsKLWV4dGVybiAgIHZvaWQgIAkgIFhHSV9FbmFibGVCcmlkZ2UoUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgUFZCX0RFVklDRV9JTkZPICk7Ci1leHRlcm4gICB2b2lkICAgICBYR0lfRGlzcGxheU9mZiggUFhHSV9IV19ERVZJQ0VfSU5GTywgUFZCX0RFVklDRV9JTkZPICk7Ci1leHRlcm4gICB2b2lkICAgICBYR0lfRGlzcGxheU9uKCBQWEdJX0hXX0RFVklDRV9JTkZPLCBQVkJfREVWSUNFX0lORk8gKTsKLWV4dGVybiAgIHZvaWQgICAgIFhHSV9HZXRWQlR5cGUoUFZCX0RFVklDRV9JTkZPKTsKLWV4dGVybiAgIHZvaWQgICAgIFhHSV9TZW5zZUNSVDEoUFZCX0RFVklDRV9JTkZPICk7Ci1leHRlcm4gICB2b2lkICAgICBYR0lfR2V0VkdBVHlwZShQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCBQVkJfREVWSUNFX0lORk8gKTsKLWV4dGVybiAgIHZvaWQgICAgIFhHSV9HZXRWQkluZm8oVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgUFZCX0RFVklDRV9JTkZPICk7Ci1leHRlcm4gICB2b2lkICAgICBYR0lfR2V0VFZJbmZvKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gKTsKLWV4dGVybiAgIHZvaWQgICAgIFhHSV9TZXRDUlQxT2Zmc2V0KFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgUFZCX0RFVklDRV9JTkZPICk7Ci1leHRlcm4gICB2b2lkICAgICBYR0lfU2V0TENEQUdyb3VwKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyApOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJX1dhaXREaXNwbHkoIFBWQl9ERVZJQ0VfSU5GTyApOwotZXh0ZXJuICAgVVNIT1JUICAgWEdJX0dldFJlc0luZm8oVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKK2V4dGVybiAgIHZvaWQgICAgIEluaXRUbzMzMFBvaW50ZXIodW5zaWduZWQgY2hhciwgc3RydWN0IHZiX2RldmljZV9pbmZvICopOworZXh0ZXJuICAgdm9pZCAgICAgWEdJX1VuTG9ja0NSVDIoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKK2V4dGVybiAgIHZvaWQgICAgIFhHSV9Mb2NrQ1JUMihzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICopOworZXh0ZXJuICAgdm9pZCAgICAgWEdJX0xvbmdXYWl0KHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKK2V4dGVybiAgIHZvaWQgICAgIFhHSV9TZXRDUlQyTW9kZVJlZ3ModW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkJCSAgICAgIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKiwKKwkJCQkgICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CitleHRlcm4gICB2b2lkICAgICBYR0lfRGlzYWJsZUJyaWRnZShzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICopOworZXh0ZXJuICAgdm9pZCAgICAgWEdJX0VuYWJsZUJyaWRnZShzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICopOworZXh0ZXJuICAgdm9pZCAgICAgWEdJX0Rpc3BsYXlPZmYoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CitleHRlcm4gICB2b2lkICAgICBYR0lfRGlzcGxheU9uKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKiwgc3RydWN0IHZiX2RldmljZV9pbmZvICopOworZXh0ZXJuICAgdm9pZCAgICAgWEdJX0dldFZCVHlwZShzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CitleHRlcm4gICB2b2lkICAgICBYR0lfU2Vuc2VDUlQxKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKK2V4dGVybiAgIHZvaWQgICAgIFhHSV9HZXRWR0FUeXBlKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CitleHRlcm4gICB2b2lkICAgICBYR0lfR2V0VkJJbmZvKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CitleHRlcm4gICB2b2lkICAgICBYR0lfR2V0VFZJbmZvKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKK2V4dGVybiAgIHZvaWQgICAgIFhHSV9TZXRDUlQxT2Zmc2V0KHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKK2V4dGVybiAgIHZvaWQgICAgIFhHSV9TZXRMQ0RBR3JvdXAodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKK2V4dGVybiAgIHZvaWQgICAgIFhHSV9XYWl0RGlzcGx5KHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKK2V4dGVybiAgIHVuc2lnbmVkIHNob3J0ICAgWEdJX0dldFJlc0luZm8odW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKIAotZXh0ZXJuICAgQk9PTEVBTiAgWEdJU2V0TW9kZU5ldyggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsIFVTSE9SVCBNb2RlTm8gKSA7CitleHRlcm4gICB1bnNpZ25lZCBjaGFyICBYR0lTZXRNb2RlTmV3KHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCB1bnNpZ25lZCBzaG9ydCBNb2RlTm8pIDsKIAotZXh0ZXJuICAgQk9PTEVBTiAgWEdJX1NlYXJjaE1vZGVJRCggVVNIT1JUIE1vZGVObyxVU0hPUlQgICpNb2RlSWRJbmRleCwgUFZCX0RFVklDRV9JTkZPICk7Ci1leHRlcm4gICBCT09MRUFOICBYR0lfR2V0TENESW5mbyhVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCxQVkJfREVWSUNFX0lORk8gKTsKLWV4dGVybiAgIEJPT0xFQU4gIFhHSV9CcmlkZ2VJc09uKCBQVkJfREVWSUNFX0lORk8gKTsKLWV4dGVybiAgIEJPT0xFQU4gIFhHSV9TZXRDUlQyR3JvdXAzMDEoVVNIT1JUIE1vZGVObywgUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgUFZCX0RFVklDRV9JTkZPKTsKLWV4dGVybiAgIFVTSE9SVCAgIFhHSV9HZXRSYXRlUHRyQ1JUMiggUFhHSV9IV19ERVZJQ0VfSU5GTyBwWEdJSFdERSwgVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyApOworZXh0ZXJuICAgdW5zaWduZWQgY2hhciAgWEdJX1NlYXJjaE1vZGVJRCh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0ICAqTW9kZUlkSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKK2V4dGVybiAgIHVuc2lnbmVkIGNoYXIgIFhHSV9HZXRMQ0RJbmZvKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKK2V4dGVybiAgIHVuc2lnbmVkIGNoYXIgIFhHSV9CcmlkZ2VJc09uKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKK2V4dGVybiAgIHVuc2lnbmVkIGNoYXIgIFhHSV9TZXRDUlQyR3JvdXAzMDEodW5zaWduZWQgc2hvcnQgTW9kZU5vLCBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICopOworZXh0ZXJuICAgdW5zaWduZWQgc2hvcnQgICBYR0lfR2V0UmF0ZVB0ckNSVDIoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqcFhHSUhXREUsIHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKIAotZXh0ZXJuICAgdm9pZCAgICAgWEdJX1NldFhHMjFGUEJpdHMoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJX1NldFhHMjdGUEJpdHMoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJX1hHMjFCTFNpZ25hbFZERChVU0hPUlQgdGVtcGJoLFVTSE9SVCB0ZW1wYmwsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLWV4dGVybiAgIHZvaWQgICAgIFhHSV9YRzI3QkxTaWduYWxWREQoVVNIT1JUIHRlbXBiaCxVU0hPUlQgdGVtcGJsLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci1leHRlcm4gICB2b2lkICAgICBYR0lfWEcyMVNldFBhbmVsRGVsYXkoVVNIT1JUIHRlbXBibCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotZXh0ZXJuICAgQk9PTEVBTiAgWEdJX1hHMjFDaGVja0xWRFNNb2RlKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJX1NldFhHMjFMVkRTUGFyYShVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKTsKLWV4dGVybiAgIFVTSE9SVCBYR0lfR2V0TFZEU09FTVRhYmxlSW5kZXgoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOworZXh0ZXJuICAgdm9pZCAgICAgWEdJX1NldFhHMjFGUEJpdHMoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK2V4dGVybiAgIHZvaWQgICAgIFhHSV9TZXRYRzI3RlBCaXRzKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7CitleHRlcm4gICB2b2lkICAgICBYR0lfWEcyMUJMU2lnbmFsVkREKHVuc2lnbmVkIHNob3J0IHRlbXBiaCwgdW5zaWduZWQgc2hvcnQgdGVtcGJsLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOworZXh0ZXJuICAgdm9pZCAgICAgWEdJX1hHMjdCTFNpZ25hbFZERCh1bnNpZ25lZCBzaG9ydCB0ZW1wYmgsIHVuc2lnbmVkIHNob3J0IHRlbXBibCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK2V4dGVybiAgIHZvaWQgICAgIFhHSV9YRzIxU2V0UGFuZWxEZWxheSh1bnNpZ25lZCBzaG9ydCB0ZW1wYmwsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7CitleHRlcm4gICB1bnNpZ25lZCBjaGFyICBYR0lfWEcyMUNoZWNrTFZEU01vZGUodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK2V4dGVybiAgIHZvaWQgICAgIFhHSV9TZXRYRzIxTFZEU1BhcmEodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK2V4dGVybiAgIHVuc2lnbmVkIHNob3J0IFhHSV9HZXRMVkRTT0VNVGFibGVJbmRleChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9zdHJ1Y3QuaCBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9zdHJ1Y3QuaAppbmRleCBiYjI1YzBlLi45YzZlMGM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfc3RydWN0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3N0cnVjdC5oCkBAIC0xMCw1MjUgKzEwLDUxOCBAQAogCiAKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSV9QYW5lbERlbGF5VGJsU3RydWN0CitzdHJ1Y3QgWEdJX1BhbmVsRGVsYXlUYmxTdHJ1Y3QKIHsKLSBVQ0hBUiB0aW1lclsyXTsKLX0gWEdJX1BhbmVsRGVsYXlUYmxTdHJ1Y3Q7CisgdW5zaWduZWQgY2hhciB0aW1lclsyXTsKK307CiAKLXR5cGVkZWYgc3RydWN0IF9YR0lfTENERGF0YVN0cnVjdAorc3RydWN0IFhHSV9MQ0REYXRhU3RydWN0CiB7Ci0gVVNIT1JUIFJWQkhDTUFYOwotIFVTSE9SVCBSVkJIQ0ZBQ1Q7Ci0gVVNIT1JUIFZHQUhUOwotIFVTSE9SVCBWR0FWVDsKLSBVU0hPUlQgTENESFQ7Ci0gVVNIT1JUIExDRFZUOwotfSBYR0lfTENERGF0YVN0cnVjdDsKKyB1bnNpZ25lZCBzaG9ydCBSVkJIQ01BWDsKKyB1bnNpZ25lZCBzaG9ydCBSVkJIQ0ZBQ1Q7CisgdW5zaWduZWQgc2hvcnQgVkdBSFQ7CisgdW5zaWduZWQgc2hvcnQgVkdBVlQ7CisgdW5zaWduZWQgc2hvcnQgTENESFQ7CisgdW5zaWduZWQgc2hvcnQgTENEVlQ7Cit9OwogCiAKLXR5cGVkZWYgc3RydWN0IF9YR0lfTFZEU0NSVDFIRGF0YVN0cnVjdAorc3RydWN0IFhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0CiB7Ci0gVUNIQVIgUmVnWzhdOwotfSBYR0lfTFZEU0NSVDFIRGF0YVN0cnVjdDsKLXR5cGVkZWYgc3RydWN0IF9YR0lfTFZEU0NSVDFWRGF0YVN0cnVjdAorIHVuc2lnbmVkIGNoYXIgUmVnWzhdOworfTsKKworc3RydWN0IFhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0CiB7Ci0gVUNIQVIgUmVnWzddOwotfSBYR0lfTFZEU0NSVDFWRGF0YVN0cnVjdDsKKyB1bnNpZ25lZCBjaGFyIFJlZ1s3XTsKK307CiAKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSV9UVkRhdGFTdHJ1Y3QKK3N0cnVjdCBYR0lfVFZEYXRhU3RydWN0CiB7Ci0gVVNIT1JUIFJWQkhDTUFYOwotIFVTSE9SVCBSVkJIQ0ZBQ1Q7Ci0gVVNIT1JUIFZHQUhUOwotIFVTSE9SVCBWR0FWVDsKLSBVU0hPUlQgVFZIREU7Ci0gVVNIT1JUIFRWVkRFOwotIFVTSE9SVCBSVkJIUlM7Ci0gVUNIQVIgRmxpY2tlck1vZGU7Ci0gVVNIT1JUIEhBTEZSVkJIUlM7Ci0gVUNIQVIgUlkxQ09FOwotIFVDSEFSIFJZMkNPRTsKLSBVQ0hBUiBSWTNDT0U7Ci0gVUNIQVIgUlk0Q09FOwotfSBYR0lfVFZEYXRhU3RydWN0OworIHVuc2lnbmVkIHNob3J0IFJWQkhDTUFYOworIHVuc2lnbmVkIHNob3J0IFJWQkhDRkFDVDsKKyB1bnNpZ25lZCBzaG9ydCBWR0FIVDsKKyB1bnNpZ25lZCBzaG9ydCBWR0FWVDsKKyB1bnNpZ25lZCBzaG9ydCBUVkhERTsKKyB1bnNpZ25lZCBzaG9ydCBUVlZERTsKKyB1bnNpZ25lZCBzaG9ydCBSVkJIUlM7CisgdW5zaWduZWQgY2hhciBGbGlja2VyTW9kZTsKKyB1bnNpZ25lZCBzaG9ydCBIQUxGUlZCSFJTOworIHVuc2lnbmVkIGNoYXIgUlkxQ09FOworIHVuc2lnbmVkIGNoYXIgUlkyQ09FOworIHVuc2lnbmVkIGNoYXIgUlkzQ09FOworIHVuc2lnbmVkIGNoYXIgUlk0Q09FOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSV9MVkRTRGF0YVN0cnVjdAorc3RydWN0IFhHSV9MVkRTRGF0YVN0cnVjdAogewotIFVTSE9SVCBWR0FIVDsKLSBVU0hPUlQgVkdBVlQ7Ci0gVVNIT1JUIExDREhUOwotIFVTSE9SVCBMQ0RWVDsKLX0gWEdJX0xWRFNEYXRhU3RydWN0OworIHVuc2lnbmVkIHNob3J0IFZHQUhUOworIHVuc2lnbmVkIHNob3J0IFZHQVZUOworIHVuc2lnbmVkIHNob3J0IExDREhUOworIHVuc2lnbmVkIHNob3J0IExDRFZUOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSV9MVkRTRGVzU3RydWN0CitzdHJ1Y3QgWEdJX0xWRFNEZXNTdHJ1Y3QKIHsKLSBVU0hPUlQgTENESERFUzsKLSBVU0hPUlQgTENEVkRFUzsKLX0gWEdJX0xWRFNEZXNTdHJ1Y3Q7CisgdW5zaWduZWQgc2hvcnQgTENESERFUzsKKyB1bnNpZ25lZCBzaG9ydCBMQ0RWREVTOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSV9MVkRTQ1JUMURhdGFTdHJ1Y3QKK3N0cnVjdCBYR0lfTFZEU0NSVDFEYXRhU3RydWN0CiB7Ci0gVUNIQVIgQ1JbMTVdOwotfSBYR0lfTFZEU0NSVDFEYXRhU3RydWN0OworIHVuc2lnbmVkIGNoYXIgQ1JbMTVdOworfTsKIAogLyphZGQgZm9yIExDREEqLwogCi0KLXR5cGVkZWYgc3RydWN0IF9YR0lfU3RTdHJ1Y3QKK3N0cnVjdCBYR0lfU3RTdHJ1Y3QKIHsKLSBVQ0hBUiBTdF9Nb2RlSUQ7Ci0gVVNIT1JUIFN0X01vZGVGbGFnOwotIFVDSEFSIFN0X1N0VGFibGVJbmRleDsKLSBVQ0hBUiBTdF9DUlQyQ1JUQzsKLSBVQ0hBUiBTdF9DUlQyQ1JUQzI7Ci0gVUNIQVIgU3RfUmVzSW5mbzsKLSBVQ0hBUiBWQl9TdFRWRmxpY2tlckluZGV4OwotIFVDSEFSIFZCX1N0VFZFZGdlSW5kZXg7Ci0gVUNIQVIgVkJfU3RUVllGaWx0ZXJJbmRleDsKLX0gWEdJX1N0U3RydWN0OworIHVuc2lnbmVkIGNoYXIgU3RfTW9kZUlEOworIHVuc2lnbmVkIHNob3J0IFN0X01vZGVGbGFnOworIHVuc2lnbmVkIGNoYXIgU3RfU3RUYWJsZUluZGV4OworIHVuc2lnbmVkIGNoYXIgU3RfQ1JUMkNSVEM7CisgdW5zaWduZWQgY2hhciBTdF9DUlQyQ1JUQzI7CisgdW5zaWduZWQgY2hhciBTdF9SZXNJbmZvOworIHVuc2lnbmVkIGNoYXIgVkJfU3RUVkZsaWNrZXJJbmRleDsKKyB1bnNpZ25lZCBjaGFyIFZCX1N0VFZFZGdlSW5kZXg7CisgdW5zaWduZWQgY2hhciBWQl9TdFRWWUZpbHRlckluZGV4OworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSV9TdGFuZFRhYmxlU3RydWN0CitzdHJ1Y3QgWEdJX1N0YW5kVGFibGVTdHJ1Y3QKIHsKLSBVQ0hBUiBDUlRfQ09MUzsKLSBVQ0hBUiBST1dTOwotIFVDSEFSIENIQVJfSEVJR0hUOwotIFVTSE9SVCBDUlRfTEVOOwotIFVDSEFSIFNSWzRdOwotIFVDSEFSIE1JU0M7Ci0gVUNIQVIgQ1JUQ1sweDE5XTsKLSBVQ0hBUiBBVFRSWzB4MTRdOwotIFVDSEFSIEdSQ1s5XTsKLX0gWEdJX1N0YW5kVGFibGVTdHJ1Y3Q7CisgdW5zaWduZWQgY2hhciBDUlRfQ09MUzsKKyB1bnNpZ25lZCBjaGFyIFJPV1M7CisgdW5zaWduZWQgY2hhciBDSEFSX0hFSUdIVDsKKyB1bnNpZ25lZCBzaG9ydCBDUlRfTEVOOworIHVuc2lnbmVkIGNoYXIgU1JbNF07CisgdW5zaWduZWQgY2hhciBNSVNDOworIHVuc2lnbmVkIGNoYXIgQ1JUQ1sweDE5XTsKKyB1bnNpZ25lZCBjaGFyIEFUVFJbMHgxNF07CisgdW5zaWduZWQgY2hhciBHUkNbOV07Cit9OwogCi10eXBlZGVmIHN0cnVjdCBfWEdJX0V4dFN0cnVjdAorc3RydWN0IFhHSV9FeHRTdHJ1Y3QKIHsKLSBVQ0hBUiBFeHRfTW9kZUlEOwotIFVTSE9SVCBFeHRfTW9kZUZsYWc7Ci0gVVNIT1JUIEV4dF9Nb2RlSW5mbzsKLSBVU0hPUlQgRXh0X1BvaW50OwotIFVTSE9SVCBFeHRfVkVTQUlEOwotIFVDSEFSIEV4dF9WRVNBTUVNU2l6ZTsKLSBVQ0hBUiBFeHRfUkVTSU5GTzsKLSBVQ0hBUiBWQl9FeHRUVkZsaWNrZXJJbmRleDsKLSBVQ0hBUiBWQl9FeHRUVkVkZ2VJbmRleDsKLSBVQ0hBUiBWQl9FeHRUVllGaWx0ZXJJbmRleDsKLSBVQ0hBUiBSRUZpbmRleDsKLX0gWEdJX0V4dFN0cnVjdDsKKyB1bnNpZ25lZCBjaGFyIEV4dF9Nb2RlSUQ7CisgdW5zaWduZWQgc2hvcnQgRXh0X01vZGVGbGFnOworIHVuc2lnbmVkIHNob3J0IEV4dF9Nb2RlSW5mbzsKKyB1bnNpZ25lZCBzaG9ydCBFeHRfUG9pbnQ7CisgdW5zaWduZWQgc2hvcnQgRXh0X1ZFU0FJRDsKKyB1bnNpZ25lZCBjaGFyIEV4dF9WRVNBTUVNU2l6ZTsKKyB1bnNpZ25lZCBjaGFyIEV4dF9SRVNJTkZPOworIHVuc2lnbmVkIGNoYXIgVkJfRXh0VFZGbGlja2VySW5kZXg7CisgdW5zaWduZWQgY2hhciBWQl9FeHRUVkVkZ2VJbmRleDsKKyB1bnNpZ25lZCBjaGFyIFZCX0V4dFRWWUZpbHRlckluZGV4OworIHVuc2lnbmVkIGNoYXIgUkVGaW5kZXg7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBfWEdJX0V4dDJTdHJ1Y3QKK3N0cnVjdCBYR0lfRXh0MlN0cnVjdAogewotIFVTSE9SVCBFeHRfSW5mb0ZsYWc7Ci0gVUNIQVIgRXh0X0NSVDFDUlRDOwotIFVDSEFSIEV4dF9DUlRWQ0xLOwotIFVDSEFSIEV4dF9DUlQyQ1JUQzsKLSBVQ0hBUiBFeHRfQ1JUMkNSVEMyOwotIFVDSEFSICBNb2RlSUQ7Ci0gVVNIT1JUIFhSZXM7Ci0gVVNIT1JUIFlSZXM7Ci0gLyogVVNIT1JUIFJPTV9PRkZTRVQ7ICovCi19IFhHSV9FeHQyU3RydWN0OworIHVuc2lnbmVkIHNob3J0IEV4dF9JbmZvRmxhZzsKKyB1bnNpZ25lZCBjaGFyIEV4dF9DUlQxQ1JUQzsKKyB1bnNpZ25lZCBjaGFyIEV4dF9DUlRWQ0xLOworIHVuc2lnbmVkIGNoYXIgRXh0X0NSVDJDUlRDOworIHVuc2lnbmVkIGNoYXIgRXh0X0NSVDJDUlRDMjsKKyB1bnNpZ25lZCBjaGFyICBNb2RlSUQ7CisgdW5zaWduZWQgc2hvcnQgWFJlczsKKyB1bnNpZ25lZCBzaG9ydCBZUmVzOworIC8qIHVuc2lnbmVkIHNob3J0IFJPTV9PRkZTRVQ7ICovCit9OwogCiAKLXR5cGVkZWYgc3RydWN0IF9YR0lfTUNMS0RhdGFTdHJ1Y3QKK3N0cnVjdCBYR0lfTUNMS0RhdGFTdHJ1Y3QKIHsKLSBVQ0hBUiBTUjI4LFNSMjksU1IyQTsKLSBVU0hPUlQgQ0xPQ0s7Ci19IFhHSV9NQ0xLRGF0YVN0cnVjdDsKKyB1bnNpZ25lZCBjaGFyIFNSMjgsIFNSMjksIFNSMkE7CisgdW5zaWduZWQgc2hvcnQgQ0xPQ0s7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBfWEdJX0VDTEtEYXRhU3RydWN0CitzdHJ1Y3QgWEdJX0VDTEtEYXRhU3RydWN0CiB7Ci0gVUNIQVIgU1IyRSxTUjJGLFNSMzA7Ci0gVVNIT1JUIENMT0NLOwotfSBYR0lfRUNMS0RhdGFTdHJ1Y3Q7CisgdW5zaWduZWQgY2hhciBTUjJFLCBTUjJGLCBTUjMwOworIHVuc2lnbmVkIHNob3J0IENMT0NLOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSV9WQ0xLRGF0YVN0cnVjdAorc3RydWN0IFhHSV9WQ0xLRGF0YVN0cnVjdAogewotIFVDSEFSIFNSMkIsU1IyQzsKLSBVU0hPUlQgQ0xPQ0s7Ci19IFhHSV9WQ0xLRGF0YVN0cnVjdDsKKyB1bnNpZ25lZCBjaGFyIFNSMkIsIFNSMkM7CisgdW5zaWduZWQgc2hvcnQgQ0xPQ0s7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBfWEdJX1ZCVkNMS0RhdGFTdHJ1Y3QKK3N0cnVjdCBYR0lfVkJWQ0xLRGF0YVN0cnVjdAogewotIFVDSEFSIFBhcnQ0X0EsUGFydDRfQjsKLSBVU0hPUlQgQ0xPQ0s7Ci19IFhHSV9WQlZDTEtEYXRhU3RydWN0OworIHVuc2lnbmVkIGNoYXIgUGFydDRfQSwgUGFydDRfQjsKKyB1bnNpZ25lZCBzaG9ydCBDTE9DSzsKK307CiAKLXR5cGVkZWYgc3RydWN0IF9YR0lfU3RSZXNJbmZvU3RydWN0CitzdHJ1Y3QgWEdJX1N0UmVzSW5mb1N0cnVjdAogewotIFVTSE9SVCBIVG90YWw7Ci0gVVNIT1JUIFZUb3RhbDsKLX0gWEdJX1N0UmVzSW5mb1N0cnVjdDsKKyB1bnNpZ25lZCBzaG9ydCBIVG90YWw7CisgdW5zaWduZWQgc2hvcnQgVlRvdGFsOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSV9Nb2RlUmVzSW5mb1N0cnVjdAorc3RydWN0IFhHSV9Nb2RlUmVzSW5mb1N0cnVjdAogewotIFVTSE9SVCBIVG90YWw7Ci0gVVNIT1JUIFZUb3RhbDsKLSBVQ0hBUiAgWENoYXI7Ci0gVUNIQVIgIFlDaGFyOwotfSBYR0lfTW9kZVJlc0luZm9TdHJ1Y3Q7CisgdW5zaWduZWQgc2hvcnQgSFRvdGFsOworIHVuc2lnbmVkIHNob3J0IFZUb3RhbDsKKyB1bnNpZ25lZCBjaGFyICBYQ2hhcjsKKyB1bnNpZ25lZCBjaGFyICBZQ2hhcjsKK307CiAKLXR5cGVkZWYgc3RydWN0IF9YR0lfTENETkJEZXNTdHJ1Y3QKK3N0cnVjdCBYR0lfTENETkJEZXNTdHJ1Y3QKIHsKLSAgVUNIQVIgTkJbMTJdOwotfSBYR0lfTENETkJEZXNTdHJ1Y3Q7CisgIHVuc2lnbmVkIGNoYXIgTkJbMTJdOworfTsKICAvKmFkZCBmb3IgbmV3IFVOSVZHQUJJT1MqLwotdHlwZWRlZiBzdHJ1Y3QgX1hHSV9MQ0REZXNTdHJ1Y3QKK3N0cnVjdCBYR0lfTENERGVzU3RydWN0CiB7Ci0gVVNIT1JUIExDREhERVM7Ci0gVVNIT1JUIExDREhSUzsKLSBVU0hPUlQgTENEVkRFUzsKLSBVU0hPUlQgTENEVlJTOwotfSBYR0lfTENERGVzU3RydWN0OworIHVuc2lnbmVkIHNob3J0IExDREhERVM7CisgdW5zaWduZWQgc2hvcnQgTENESFJTOworIHVuc2lnbmVkIHNob3J0IExDRFZERVM7CisgdW5zaWduZWQgc2hvcnQgTENEVlJTOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSV9MQ0REYXRhVGFibFN0cnVjdAorc3RydWN0IFhHSV9MQ0REYXRhVGFibFN0cnVjdAogewotIFVDSEFSICBQQU5FTElEOwotIFVTSE9SVCBNQVNLOwotIFVTSE9SVCBDQVA7Ci0gVVNIT1JUIERBVEFQVFI7Ci19IFhHSV9MQ0REYXRhVGFibFN0cnVjdDsKKyB1bnNpZ25lZCBjaGFyICBQQU5FTElEOworIHVuc2lnbmVkIHNob3J0IE1BU0s7CisgdW5zaWduZWQgc2hvcnQgQ0FQOworIHVuc2lnbmVkIHNob3J0IERBVEFQVFI7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBfWEdJX1RWVGFibERhdGFTdHJ1Y3QKK3N0cnVjdCBYR0lfVFZUYWJsRGF0YVN0cnVjdAogewotIFVTSE9SVCBNQVNLOwotIFVTSE9SVCBDQVA7Ci0gVVNIT1JUIERBVEFQVFI7Ci19IFhHSV9UVkRhdGFUYWJsU3RydWN0OworIHVuc2lnbmVkIHNob3J0IE1BU0s7CisgdW5zaWduZWQgc2hvcnQgQ0FQOworIHVuc2lnbmVkIHNob3J0IERBVEFQVFI7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBfWEdJMzMwX0xDRERlc0RhdGFTdHJ1Y3QKK3N0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdAogewotIFVTSE9SVCBMQ0RIREVTOwotIFVTSE9SVCBMQ0RIUlM7Ci0gVVNIT1JUIExDRFZERVM7Ci0gVVNIT1JUIExDRFZSUzsKLX0gWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3Q7CisgdW5zaWduZWQgc2hvcnQgTENESERFUzsKKyB1bnNpZ25lZCBzaG9ydCBMQ0RIUlM7CisgdW5zaWduZWQgc2hvcnQgTENEVkRFUzsKKyB1bnNpZ25lZCBzaG9ydCBMQ0RWUlM7Cit9OwogCiAKLXR5cGVkZWYgc3RydWN0IF9YR0kzMzBfTFZEU0RhdGFTdHJ1Y3QKK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QKIHsKLSBVU0hPUlQgVkdBSFQ7Ci0gVVNIT1JUIFZHQVZUOwotIFVTSE9SVCBMQ0RIVDsKLSBVU0hPUlQgTENEVlQ7Ci19IFhHSTMzMF9MVkRTRGF0YVN0cnVjdDsKKyB1bnNpZ25lZCBzaG9ydCBWR0FIVDsKKyB1bnNpZ25lZCBzaG9ydCBWR0FWVDsKKyB1bnNpZ25lZCBzaG9ydCBMQ0RIVDsKKyB1bnNpZ25lZCBzaG9ydCBMQ0RWVDsKK307CiAKLXR5cGVkZWYgc3RydWN0IF9YR0kzMzBfTENERGVzRGF0YVN0cnVjdDIKK3N0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdDIKIHsKLSBVU0hPUlQgTENESERFUzsKLSBVU0hPUlQgTENESFJTOwotIFVTSE9SVCBMQ0RWREVTOwotIFVTSE9SVCBMQ0RWUlM7Ci0gVVNIT1JUIExDREhTeW5jOwotIFVTSE9SVCBMQ0RWU3luYzsKLX0gWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QyOworIHVuc2lnbmVkIHNob3J0IExDREhERVM7CisgdW5zaWduZWQgc2hvcnQgTENESFJTOworIHVuc2lnbmVkIHNob3J0IExDRFZERVM7CisgdW5zaWduZWQgc2hvcnQgTENEVlJTOworIHVuc2lnbmVkIHNob3J0IExDREhTeW5jOworIHVuc2lnbmVkIHNob3J0IExDRFZTeW5jOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSTMzMF9MQ0REYXRhU3RydWN0CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QKIHsKLSBVU0hPUlQgUlZCSENNQVg7Ci0gVVNIT1JUIFJWQkhDRkFDVDsKLSBVU0hPUlQgVkdBSFQ7Ci0gVVNIT1JUIFZHQVZUOwotIFVTSE9SVCBMQ0RIVDsKLSBVU0hPUlQgTENEVlQ7Ci19IFhHSTMzMF9MQ0REYXRhU3RydWN0OworIHVuc2lnbmVkIHNob3J0IFJWQkhDTUFYOworIHVuc2lnbmVkIHNob3J0IFJWQkhDRkFDVDsKKyB1bnNpZ25lZCBzaG9ydCBWR0FIVDsKKyB1bnNpZ25lZCBzaG9ydCBWR0FWVDsKKyB1bnNpZ25lZCBzaG9ydCBMQ0RIVDsKKyB1bnNpZ25lZCBzaG9ydCBMQ0RWVDsKK307CiAKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSTMzMF9UVkRhdGFTdHJ1Y3QKK3N0cnVjdCBYR0kzMzBfVFZEYXRhU3RydWN0CiB7Ci0gVVNIT1JUIFJWQkhDTUFYOwotIFVTSE9SVCBSVkJIQ0ZBQ1Q7Ci0gVVNIT1JUIFZHQUhUOwotIFVTSE9SVCBWR0FWVDsKLSBVU0hPUlQgVFZIREU7Ci0gVVNIT1JUIFRWVkRFOwotIFVTSE9SVCBSVkJIUlM7Ci0gVUNIQVIgRmxpY2tlck1vZGU7Ci0gVVNIT1JUIEhBTEZSVkJIUlM7Ci19IFhHSTMzMF9UVkRhdGFTdHJ1Y3Q7CisgdW5zaWduZWQgc2hvcnQgUlZCSENNQVg7CisgdW5zaWduZWQgc2hvcnQgUlZCSENGQUNUOworIHVuc2lnbmVkIHNob3J0IFZHQUhUOworIHVuc2lnbmVkIHNob3J0IFZHQVZUOworIHVuc2lnbmVkIHNob3J0IFRWSERFOworIHVuc2lnbmVkIHNob3J0IFRWVkRFOworIHVuc2lnbmVkIHNob3J0IFJWQkhSUzsKKyB1bnNpZ25lZCBjaGFyIEZsaWNrZXJNb2RlOworIHVuc2lnbmVkIHNob3J0IEhBTEZSVkJIUlM7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBfWEdJMzMwX0xDRERhdGFUYWJsU3RydWN0CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFUYWJsU3RydWN0CiB7Ci0gVUNIQVIgIFBBTkVMSUQ7Ci0gVVNIT1JUIE1BU0s7Ci0gVVNIT1JUIENBUDsKLSBVU0hPUlQgREFUQVBUUjsKLX0gWEdJMzMwX0xDRERhdGFUYWJsU3RydWN0OworIHVuc2lnbmVkIGNoYXIgIFBBTkVMSUQ7CisgdW5zaWduZWQgc2hvcnQgTUFTSzsKKyB1bnNpZ25lZCBzaG9ydCBDQVA7CisgdW5zaWduZWQgc2hvcnQgREFUQVBUUjsKK307CiAKLXR5cGVkZWYgc3RydWN0IF9YR0kzMzBfVFZEYXRhVGFibFN0cnVjdAorc3RydWN0IFhHSTMzMF9UVkRhdGFUYWJsU3RydWN0CiB7Ci0gVVNIT1JUIE1BU0s7Ci0gVVNIT1JUIENBUDsKLSBVU0hPUlQgREFUQVBUUjsKLX0gWEdJMzMwX1RWRGF0YVRhYmxTdHJ1Y3Q7CisgdW5zaWduZWQgc2hvcnQgTUFTSzsKKyB1bnNpZ25lZCBzaG9ydCBDQVA7CisgdW5zaWduZWQgc2hvcnQgREFUQVBUUjsKK307CiAKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSTMzMF9DSFRWRGF0YVN0cnVjdAorc3RydWN0IFhHSTMzMF9DSFRWRGF0YVN0cnVjdAogewotIFVTSE9SVCBWR0FIVDsKLSBVU0hPUlQgVkdBVlQ7Ci0gVVNIT1JUIExDREhUOwotIFVTSE9SVCBMQ0RWVDsKLX0gWEdJMzMwX0NIVFZEYXRhU3RydWN0OworIHVuc2lnbmVkIHNob3J0IFZHQUhUOworIHVuc2lnbmVkIHNob3J0IFZHQVZUOworIHVuc2lnbmVkIHNob3J0IExDREhUOworIHVuc2lnbmVkIHNob3J0IExDRFZUOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSV9UaW1pbmdIU3RydWN0CitzdHJ1Y3QgWEdJX1RpbWluZ0hTdHJ1Y3QKIHsKLSAgVUNIQVIgZGF0YVs4XTsKLX0gWEdJX1RpbWluZ0hTdHJ1Y3Q7CisgIHVuc2lnbmVkIGNoYXIgZGF0YVs4XTsKK307CiAKLXR5cGVkZWYgc3RydWN0IF9YR0lfVGltaW5nVlN0cnVjdAorc3RydWN0IFhHSV9UaW1pbmdWU3RydWN0CiB7Ci0gIFVDSEFSIGRhdGFbN107Ci19IFhHSV9UaW1pbmdWU3RydWN0OworICB1bnNpZ25lZCBjaGFyIGRhdGFbN107Cit9OwogCi10eXBlZGVmIHN0cnVjdCBfWEdJX0NINzAwN1RWX1RpbWluZ0hTdHJ1Y3QKK3N0cnVjdCBYR0lfQ0g3MDA3VFZfVGltaW5nSFN0cnVjdAogewotICBVQ0hBUiBkYXRhWzEwXTsKLX0gWEdJX0NINzAwN1RWX1RpbWluZ0hTdHJ1Y3Q7CisgIHVuc2lnbmVkIGNoYXIgZGF0YVsxMF07Cit9OwogCi10eXBlZGVmIHN0cnVjdCBfWEdJX0NINzAwN1RWX1RpbWluZ1ZTdHJ1Y3QKK3N0cnVjdCBYR0lfQ0g3MDA3VFZfVGltaW5nVlN0cnVjdAogewotICBVQ0hBUiBkYXRhWzEwXTsKLX0gWEdJX0NINzAwN1RWX1RpbWluZ1ZTdHJ1Y3Q7CisgIHVuc2lnbmVkIGNoYXIgZGF0YVsxMF07Cit9OwogCi10eXBlZGVmIHN0cnVjdCBfWEdJX1hHMjFDUlQxU3RydWN0CitzdHJ1Y3QgWEdJX1hHMjFDUlQxU3RydWN0CiB7Ci0gVUNIQVIgTW9kZUlELENSMDIsQ1IwMyxDUjE1LENSMTY7Ci19IFhHSV9YRzIxQ1JUMVN0cnVjdDsKKyB1bnNpZ25lZCBjaGFyIE1vZGVJRCwgQ1IwMiwgQ1IwMywgQ1IxNSwgQ1IxNjsKK307CiAKLXR5cGVkZWYgc3RydWN0IF9YR0kzMzBfQ0hUVlJlZ0RhdGFTdHJ1Y3QKK3N0cnVjdCBYR0kzMzBfQ0hUVlJlZ0RhdGFTdHJ1Y3QKIHsKLSBVQ0hBUiBSZWdbMTZdOwotfSBYR0kzMzBfQ0hUVlJlZ0RhdGFTdHJ1Y3Q7CisgdW5zaWduZWQgY2hhciBSZWdbMTZdOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSTMzMF9MQ0RDYXBTdHJ1Y3QKK3N0cnVjdCBYR0kzMzBfTENEQ2FwU3RydWN0CiB7Ci0gCQlVQ0hBUiAgICAgIExDRF9JRDsKLSAgICAgICAgICAgICAgICBVU0hPUlQgICAgIExDRF9DYXBhYmlsaXR5OwotICAgICAgICAgICAgICAgIFVDSEFSICAgICAgTENEX1NldEZsYWc7Ci0gICAgICAgICAgICAgICAgVUNIQVIgICAgICBMQ0RfRGVsYXlDb21wZW5zYXRpb247Ci0gICAgICAgICAgICAgICAgVUNIQVIgICAgICBMQ0RfSFN5bmNXaWR0aDsKLSAgICAgICAgICAgICAgICBVQ0hBUiAgICAgIExDRF9WU3luY1dpZHRoOwotICAgICAgICAgICAgICAgIFVDSEFSICAgICAgTENEX1ZDTEs7Ci0gICAgICAgICAgICAgICAgVUNIQVIgICAgICBMQ0RBX1ZDTEtEYXRhMTsKLSAgICAgICAgICAgICAgICBVQ0hBUiAgICAgIExDREFfVkNMS0RhdGEyOwotICAgICAgICAgICAgICAgIFVDSEFSICAgICAgTENVQ0hBUl9WQ0xLRGF0YTE7Ci0gICAgICAgICAgICAgICAgVUNIQVIgICAgICBMQ1VDSEFSX1ZDTEtEYXRhMjsKLSAgICAgICAgICAgICAgICBVQ0hBUiAgICAgIFBTQ19TMTsKLSAgICAgICAgICAgICAgICBVQ0hBUiAgICAgIFBTQ19TMjsKLSAgICAgICAgICAgICAgICBVQ0hBUiAgICAgIFBTQ19TMzsKLSAgICAgICAgICAgICAgICBVQ0hBUiAgICAgIFBTQ19TNDsKLSAgICAgICAgICAgICAgICBVQ0hBUiAgICAgIFBTQ19TNTsKLSAgICAgICAgICAgICAgICBVQ0hBUiAgICAgIFBXRF8yQjsKLSAgICAgICAgICAgICAgICBVQ0hBUiAgICAgIFBXRF8yQzsKLSAgICAgICAgICAgICAgICBVQ0hBUiAgICAgIFBXRF8yRDsKLSAgICAgICAgICAgICAgICBVQ0hBUiAgICAgIFBXRF8yRTsKLSAgICAgICAgICAgICAgICBVQ0hBUiAgICAgIFBXRF8yRjsKLSAgICAgICAgICAgICAgICBVQ0hBUiAgICAgIFNwZWN0cnVtXzMxOwotICAgICAgICAgICAgICAgIFVDSEFSICAgICAgU3BlY3RydW1fMzI7Ci0gICAgICAgICAgICAgICAgVUNIQVIgICAgICBTcGVjdHJ1bV8zMzsKLSAgICAgICAgICAgICAgICBVQ0hBUiAgICAgIFNwZWN0cnVtXzM0OwotfSBYR0kzMzBfTENEQ2FwU3RydWN0OworCQl1bnNpZ25lZCBjaGFyCSAgIExDRF9JRDsKKwkJdW5zaWduZWQgc2hvcnQJICAgTENEX0NhcGFiaWxpdHk7CisJCXVuc2lnbmVkIGNoYXIJICAgTENEX1NldEZsYWc7CisJCXVuc2lnbmVkIGNoYXIJICAgTENEX0RlbGF5Q29tcGVuc2F0aW9uOworCQl1bnNpZ25lZCBjaGFyCSAgIExDRF9IU3luY1dpZHRoOworCQl1bnNpZ25lZCBjaGFyCSAgIExDRF9WU3luY1dpZHRoOworCQl1bnNpZ25lZCBjaGFyCSAgIExDRF9WQ0xLOworCQl1bnNpZ25lZCBjaGFyCSAgIExDREFfVkNMS0RhdGExOworCQl1bnNpZ25lZCBjaGFyCSAgIExDREFfVkNMS0RhdGEyOworCQl1bnNpZ25lZCBjaGFyCSAgIExDVUNIQVJfVkNMS0RhdGExOworCQl1bnNpZ25lZCBjaGFyCSAgIExDVUNIQVJfVkNMS0RhdGEyOworCQl1bnNpZ25lZCBjaGFyCSAgIFBTQ19TMTsKKwkJdW5zaWduZWQgY2hhcgkgICBQU0NfUzI7CisJCXVuc2lnbmVkIGNoYXIJICAgUFNDX1MzOworCQl1bnNpZ25lZCBjaGFyCSAgIFBTQ19TNDsKKwkJdW5zaWduZWQgY2hhcgkgICBQU0NfUzU7CisJCXVuc2lnbmVkIGNoYXIJICAgUFdEXzJCOworCQl1bnNpZ25lZCBjaGFyCSAgIFBXRF8yQzsKKwkJdW5zaWduZWQgY2hhcgkgICBQV0RfMkQ7CisJCXVuc2lnbmVkIGNoYXIJICAgUFdEXzJFOworCQl1bnNpZ25lZCBjaGFyCSAgIFBXRF8yRjsKKwkJdW5zaWduZWQgY2hhcgkgICBTcGVjdHJ1bV8zMTsKKwkJdW5zaWduZWQgY2hhcgkgICBTcGVjdHJ1bV8zMjsKKwkJdW5zaWduZWQgY2hhcgkgICBTcGVjdHJ1bV8zMzsKKwkJdW5zaWduZWQgY2hhcgkgICBTcGVjdHJ1bV8zNDsKK307CiAKLXR5cGVkZWYgc3RydWN0IF9YR0kyMV9MVkRTQ2FwU3RydWN0CitzdHJ1Y3QgWEdJMjFfTFZEU0NhcFN0cnVjdAogewotICAgICAgICAgICAgICAgIFVTSE9SVCAgICAgTFZEU19DYXBhYmlsaXR5OwotICAgICAgICAgICAgICAgIFVTSE9SVCAgICAgTFZEU0hUOwotICAgICAgICAgICAgICAgIFVTSE9SVCAgICAgTFZEU1ZUOwotICAgICAgICAgICAgICAgIFVTSE9SVCAgICAgTFZEU0hERTsKLSAgICAgICAgICAgICAgICBVU0hPUlQgICAgIExWRFNWREU7Ci0gICAgICAgICAgICAgICAgVVNIT1JUICAgICBMVkRTSEZQOwotICAgICAgICAgICAgICAgIFVTSE9SVCAgICAgTFZEU1ZGUDsKLSAgICAgICAgICAgICAgICBVU0hPUlQgICAgIExWRFNIU1lOQzsKLSAgICAgICAgICAgICAgICBVU0hPUlQgICAgIExWRFNWU1lOQzsKLSAgICAgICAgICAgICAgICBVQ0hBUiAgICAgIFZDTEtEYXRhMTsKLSAgICAgICAgICAgICAgICBVQ0hBUiAgICAgIFZDTEtEYXRhMjsKLSAgICAgICAgICAgICAgICBVQ0hBUiAgICAgIFBTQ19TMTsKLSAgICAgICAgICAgICAgICBVQ0hBUiAgICAgIFBTQ19TMjsKLSAgICAgICAgICAgICAgICBVQ0hBUiAgICAgIFBTQ19TMzsKLSAgICAgICAgICAgICAgICBVQ0hBUiAgICAgIFBTQ19TNDsKLSAgICAgICAgICAgICAgICBVQ0hBUiAgICAgIFBTQ19TNTsKLX0gWEdJMjFfTFZEU0NhcFN0cnVjdDsKKwkJdW5zaWduZWQgc2hvcnQJICAgTFZEU19DYXBhYmlsaXR5OworCQl1bnNpZ25lZCBzaG9ydAkgICBMVkRTSFQ7CisJCXVuc2lnbmVkIHNob3J0CSAgIExWRFNWVDsKKwkJdW5zaWduZWQgc2hvcnQJICAgTFZEU0hERTsKKwkJdW5zaWduZWQgc2hvcnQJICAgTFZEU1ZERTsKKwkJdW5zaWduZWQgc2hvcnQJICAgTFZEU0hGUDsKKwkJdW5zaWduZWQgc2hvcnQJICAgTFZEU1ZGUDsKKwkJdW5zaWduZWQgc2hvcnQJICAgTFZEU0hTWU5DOworCQl1bnNpZ25lZCBzaG9ydAkgICBMVkRTVlNZTkM7CisJCXVuc2lnbmVkIGNoYXIJICAgVkNMS0RhdGExOworCQl1bnNpZ25lZCBjaGFyCSAgIFZDTEtEYXRhMjsKKwkJdW5zaWduZWQgY2hhcgkgICBQU0NfUzE7CisJCXVuc2lnbmVkIGNoYXIJICAgUFNDX1MyOworCQl1bnNpZ25lZCBjaGFyCSAgIFBTQ19TMzsKKwkJdW5zaWduZWQgY2hhcgkgICBQU0NfUzQ7CisJCXVuc2lnbmVkIGNoYXIJICAgUFNDX1M1OworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSV9DUlQxVGFibGVTdHJ1Y3QKK3N0cnVjdCBYR0lfQ1JUMVRhYmxlU3RydWN0CiB7Ci0gIFVDSEFSIENSWzE2XTsKLX0gWEdJX0NSVDFUYWJsZVN0cnVjdDsKKyAgdW5zaWduZWQgY2hhciBDUlsxNl07Cit9OwogCiAKLXR5cGVkZWYgc3RydWN0IF9YR0kzMzBfVkNMS0RhdGFTdHJ1Y3QKK3N0cnVjdCBYR0kzMzBfVkNMS0RhdGFTdHJ1Y3QKIHsKLSAgICBVQ0hBUiBTUjJCLFNSMkM7Ci0gICAgVVNIT1JUIENMT0NLOwotfSBYR0kzMzBfVkNMS0RhdGFTdHJ1Y3Q7CisgICAgdW5zaWduZWQgY2hhciBTUjJCLCBTUjJDOworICAgIHVuc2lnbmVkIHNob3J0IENMT0NLOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdAorc3RydWN0IFhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdAogewotICAgIFVTSE9SVCBERTsKLSAgICBVQ0hBUiAgUmVnWzY0XTsgICAvKiBDMC1GRiAqLwotfSBYR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3Q7CisgICAgdW5zaWduZWQgc2hvcnQgREU7CisgICAgdW5zaWduZWQgY2hhciAgUmVnWzY0XTsgICAvKiBDMC1GRiAqLworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSV9OZXdfU3RhbmRUYWJsZVN0cnVjdAorc3RydWN0IFhHSV9OZXdfU3RhbmRUYWJsZVN0cnVjdAogewotCVVDSEFSICBDUlRfQ09MUzsKLQlVQ0hBUiAgUk9XUzsKLQlVQ0hBUiAgQ0hBUl9IRUlHSFQ7Ci0JVVNIT1JUIENSVF9MRU47Ci0JVUNIQVIgIFNSWzRdOwotCVVDSEFSICBNSVNDOwotCVVDSEFSICBDUlRDWzB4MTldOwotCVVDSEFSICBBVFRSWzB4MTRdOwotCVVDSEFSICBHUkNbOV07Ci19IFhHSV9OZXdfU3RhbmRUYWJsZVN0cnVjdDsKKwl1bnNpZ25lZCBjaGFyICBDUlRfQ09MUzsKKwl1bnNpZ25lZCBjaGFyICBST1dTOworCXVuc2lnbmVkIGNoYXIgIENIQVJfSEVJR0hUOworCXVuc2lnbmVkIHNob3J0IENSVF9MRU47CisJdW5zaWduZWQgY2hhciAgU1JbNF07CisJdW5zaWduZWQgY2hhciAgTUlTQzsKKwl1bnNpZ25lZCBjaGFyICBDUlRDWzB4MTldOworCXVuc2lnbmVkIGNoYXIgIEFUVFJbMHgxNF07CisJdW5zaWduZWQgY2hhciAgR1JDWzldOworfTsKIAotdHlwZWRlZiBVQ0hBUiBEUkFNOFR5cGVbOF07Ci10eXBlZGVmIFVDSEFSIERSQU00VHlwZVs0XTsKLXR5cGVkZWYgVUNIQVIgRFJBTTMyVHlwZVszMl07Ci10eXBlZGVmIFVDSEFSIERSQU0yVHlwZVsyXTsKLQotdHlwZWRlZiBzdHJ1Y3QgX1ZCX0RFVklDRV9JTkZPICBWQl9ERVZJQ0VfSU5GTzsKLXR5cGVkZWYgVkJfREVWSUNFX0lORk8gKglQVkJfREVWSUNFX0lORk87Ci0KLXN0cnVjdCBfVkJfREVWSUNFX0lORk8KK3N0cnVjdCB2Yl9kZXZpY2VfaW5mbwogewotICAgIEJPT0xFQU4gIElTWFBET1M7Ci0gICAgVUxPTkcgICBQM2M0LFAzZDQsUDNjMCxQM2NlLFAzYzIsUDNjYzsKLSAgICBVTE9ORyAgIFAzY2EsUDNjNixQM2M3LFAzYzgsUDNjOSxQM2RhOwotICAgIFVMT05HICAgUGFydDBQb3J0LFBhcnQxUG9ydCxQYXJ0MlBvcnQ7Ci0gICAgVUxPTkcgICBQYXJ0M1BvcnQsUGFydDRQb3J0LFBhcnQ1UG9ydDsKLSAgICBVU0hPUlQgICBSVkJIQ0ZBQ1QsUlZCSENNQVgsUlZCSFJTOwotICAgIFVTSE9SVCAgIFZHQVZULFZHQUhULFZHQVZERSxWR0FIREU7Ci0gICAgVVNIT1JUICAgVlQsSFQsVkRFLEhERTsKLSAgICBVU0hPUlQgICBMQ0RIUlMsTENEVlJTLExDREhERVMsTENEVkRFUzsKKyAgICB1bnNpZ25lZCBjaGFyICBJU1hQRE9TOworICAgIHVuc2lnbmVkIGxvbmcgICBQM2M0LFAzZDQsUDNjMCxQM2NlLFAzYzIsUDNjYzsKKyAgICB1bnNpZ25lZCBsb25nICAgUDNjYSxQM2M2LFAzYzcsUDNjOCxQM2M5LFAzZGE7CisgICAgdW5zaWduZWQgbG9uZyAgIFBhcnQwUG9ydCxQYXJ0MVBvcnQsUGFydDJQb3J0OworICAgIHVuc2lnbmVkIGxvbmcgICBQYXJ0M1BvcnQsUGFydDRQb3J0LFBhcnQ1UG9ydDsKKyAgICB1bnNpZ25lZCBzaG9ydCAgIFJWQkhDRkFDVCxSVkJIQ01BWCxSVkJIUlM7CisgICAgdW5zaWduZWQgc2hvcnQgICBWR0FWVCxWR0FIVCxWR0FWREUsVkdBSERFOworICAgIHVuc2lnbmVkIHNob3J0ICAgVlQsSFQsVkRFLEhERTsKKyAgICB1bnNpZ25lZCBzaG9ydCAgIExDREhSUyxMQ0RWUlMsTENESERFUyxMQ0RWREVTOwogCi0gICAgVVNIT1JUICAgTW9kZVR5cGU7Ci0gICAgVVNIT1JUICAgSUZfREVGX0xWRFMsSUZfREVGX1RSVU1QSU9OLElGX0RFRl9EU1ROOy8qICxJRl9ERUZfRlNUTjsgYWRkIGZvciBkc3RuICovCi0gICAgVVNIT1JUICAgSUZfREVGX0NSVDJNb25pdG9yLElGX0RFRl9WaWRlb0NhcHR1cmU7Ci0gICAgVVNIT1JUICAgSUZfREVGX0xDREEsSUZfREVGX0NINzAxNyxJRl9ERUZfWVBiUHIsSUZfREVGX1NjYWxlTENELElGX0RFRl9PRU1VdGlsLElGX0RFRl9QV0Q7Ci0gICAgVVNIT1JUICAgSUZfREVGX0V4cExpbms7Ci0gICAgVVNIT1JUICAgSUZfREVGX0NINzAwNSxJRl9ERUZfSGlWaXNpb247Ci0gICAgVVNIT1JUICAgSUZfREVGX0NINzAwNzsgLyogQmlsbHkgMjAwNy8wNS8wMyAqLwotICAgIFVTSE9SVCAgIExDRFJlc0luZm8sTENEVHlwZUluZm8sIFZCVHlwZTsvKjMwMWIqLwotICAgIFVTSE9SVCAgIFZCSW5mbyxUVkluZm8sTENESW5mbywgU2V0X1ZHQVR5cGU7Ci0gICAgVVNIT1JUICAgVkJFeHRJbmZvOy8qMzAxbHYqLwotICAgIFVTSE9SVCAgIFNldEZsYWc7Ci0gICAgVVNIT1JUICAgTmV3RmxpY2tlck1vZGU7Ci0gICAgVVNIT1JUICAgU2VsZWN0Q1JUMlJhdGU7CisgICAgdW5zaWduZWQgc2hvcnQgICBNb2RlVHlwZTsKKyAgICB1bnNpZ25lZCBzaG9ydCAgIElGX0RFRl9MVkRTLElGX0RFRl9UUlVNUElPTixJRl9ERUZfRFNUTjsvKiAsSUZfREVGX0ZTVE47IGFkZCBmb3IgZHN0biAqLworICAgIHVuc2lnbmVkIHNob3J0ICAgSUZfREVGX0NSVDJNb25pdG9yLElGX0RFRl9WaWRlb0NhcHR1cmU7CisgICAgdW5zaWduZWQgc2hvcnQgICBJRl9ERUZfTENEQSxJRl9ERUZfQ0g3MDE3LElGX0RFRl9ZUGJQcixJRl9ERUZfU2NhbGVMQ0QsSUZfREVGX09FTVV0aWwsSUZfREVGX1BXRDsKKyAgICB1bnNpZ25lZCBzaG9ydCAgIElGX0RFRl9FeHBMaW5rOworICAgIHVuc2lnbmVkIHNob3J0ICAgSUZfREVGX0NINzAwNSxJRl9ERUZfSGlWaXNpb247CisgICAgdW5zaWduZWQgc2hvcnQgICBJRl9ERUZfQ0g3MDA3OyAvKiBCaWxseSAyMDA3LzA1LzAzICovCisgICAgdW5zaWduZWQgc2hvcnQgICBMQ0RSZXNJbmZvLExDRFR5cGVJbmZvLCBWQlR5cGU7LyozMDFiKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgIFZCSW5mbyxUVkluZm8sTENESW5mbywgU2V0X1ZHQVR5cGU7CisgICAgdW5zaWduZWQgc2hvcnQgICBWQkV4dEluZm87LyozMDFsdiovCisgICAgdW5zaWduZWQgc2hvcnQgICBTZXRGbGFnOworICAgIHVuc2lnbmVkIHNob3J0ICAgTmV3RmxpY2tlck1vZGU7CisgICAgdW5zaWduZWQgc2hvcnQgICBTZWxlY3RDUlQyUmF0ZTsKIAotICAgIFBVQ0hBUiBST01BZGRyOwotICAgIFBVQ0hBUiBGQkFkZHI7Ci0gICAgVUxPTkcgQmFzZUFkZHI7Ci0gICAgVUxPTkcgUmVsSU87CisgICAgdW5zaWduZWQgY2hhciAqUk9NQWRkcjsKKyAgICB1bnNpZ25lZCBjaGFyICpGQkFkZHI7CisgICAgdW5zaWduZWQgbG9uZyBCYXNlQWRkcjsKKyAgICB1bnNpZ25lZCBsb25nIFJlbElPOwogCi0gICAgRFJBTTRUeXBlICAqQ1I2QjsKLSAgICBEUkFNNFR5cGUgICpDUjZFOwotICAgIERSQU0zMlR5cGUgKkNSNkY7Ci0gICAgRFJBTTJUeXBlICAqQ1I4OTsKKwl1bnNpZ25lZCBjaGFyICgqQ1I2QilbNF07CisJdW5zaWduZWQgY2hhciAoKkNSNkUpWzRdOworCXVuc2lnbmVkIGNoYXIgKCpDUjZGKVszMl07CisJdW5zaWduZWQgY2hhciAoKkNSODkpWzJdOwogCi0gICAgRFJBTThUeXBlICAqU1IxNTsgLyogcG9pbnRlciA6IHBvaW50IHRvIGFycmF5ICovCi0gICAgRFJBTThUeXBlICAqQ1I0MDsKLSAgICBVQ0hBUiAgKnBTb2Z0U2V0dGluZzsKLSAgICBVQ0hBUiAgKnBPdXRwdXRTZWxlY3Q7CisJdW5zaWduZWQgY2hhciAoKlNSMTUpWzhdOworCXVuc2lnbmVkIGNoYXIgKCpDUjQwKVs4XTsKIAotICAgIFVTSE9SVCAqcFJHQlNlbnNlRGF0YTsKLSAgICBVU0hPUlQgKnBSR0JTZW5zZURhdGEyOyAvKjMwMWIqLwotICAgIFVTSE9SVCAqcFZpZGVvU2Vuc2VEYXRhOwotICAgIFVTSE9SVCAqcFZpZGVvU2Vuc2VEYXRhMjsKLSAgICBVU0hPUlQgKnBZQ1NlbnNlRGF0YTsKLSAgICBVU0hPUlQgKnBZQ1NlbnNlRGF0YTI7CisgICAgdW5zaWduZWQgY2hhciAgKnBTb2Z0U2V0dGluZzsKKyAgICB1bnNpZ25lZCBjaGFyICAqcE91dHB1dFNlbGVjdDsKIAotICAgIFVDSEFSICAqcFNSMDc7Ci0gICAgVUNIQVIgICpDUjQ5OwotICAgIFVDSEFSICAqcFNSMUY7Ci0gICAgVUNIQVIgICpBR1BSZWc7Ci0gICAgVUNIQVIgICpTUjE2OwotICAgIFVDSEFSICAqcFNSMjE7Ci0gICAgVUNIQVIgICpwU1IyMjsKLSAgICBVQ0hBUiAgKnBTUjIzOwotICAgIFVDSEFSICAqcFNSMjQ7Ci0gICAgVUNIQVIgICpTUjI1OwotICAgIFVDSEFSICAqcFNSMzE7Ci0gICAgVUNIQVIgICpwU1IzMjsKLSAgICBVQ0hBUiAgKnBTUjMzOwotICAgIFVDSEFSICAqcFNSMzY7ICAgICAgLyogYWxhbiAxMi8wNy8yMDA2ICovCi0gICAgVUNIQVIgICpwQ1JDRjsKLSAgICBVQ0hBUiAgKnBDUkQwOyAgICAgIC8qIGFsYW4gMTIvMDcvMjAwNiAqLwotICAgIFVDSEFSICAqcENSREU7ICAgICAgLyogYWxhbiAxMi8wNy8yMDA2ICovCi0gICAgVUNIQVIgICpwQ1I4RjsgICAgICAvKiBhbGFuIDEyLzA3LzIwMDYgKi8KLSAgICBVQ0hBUiAgKnBTUjQwOyAgICAgIC8qIGFsYW4gMTIvMDcvMjAwNiAqLwotICAgIFVDSEFSICAqcFNSNDE7ICAgICAgLyogYWxhbiAxMi8wNy8yMDA2ICovCi0gICAgVUNIQVIgICpwRFZPU2V0dGluZzsKLSAgICBVQ0hBUiAgKnBDUjJFOwotICAgIFVDSEFSICAqcENSMkY7Ci0gICAgVUNIQVIgICpwQ1I0NjsKLSAgICBVQ0hBUiAgKnBDUjQ3OwotICAgIFVDSEFSICAqcENSVDJEYXRhXzFfMjsKLSAgICBVQ0hBUiAgKnBDUlQyRGF0YV80X0Q7Ci0gICAgVUNIQVIgICpwQ1JUMkRhdGFfNF9FOwotICAgIFVDSEFSICAqcENSVDJEYXRhXzRfMTA7Ci0gICAgWEdJX01DTEtEYXRhU3RydWN0ICAqTUNMS0RhdGE7Ci0gICAgWEdJX0VDTEtEYXRhU3RydWN0ICAqRUNMS0RhdGE7CisgICAgdW5zaWduZWQgc2hvcnQgKnBSR0JTZW5zZURhdGE7CisgICAgdW5zaWduZWQgc2hvcnQgKnBSR0JTZW5zZURhdGEyOyAvKjMwMWIqLworICAgIHVuc2lnbmVkIHNob3J0ICpwVmlkZW9TZW5zZURhdGE7CisgICAgdW5zaWduZWQgc2hvcnQgKnBWaWRlb1NlbnNlRGF0YTI7CisgICAgdW5zaWduZWQgc2hvcnQgKnBZQ1NlbnNlRGF0YTsKKyAgICB1bnNpZ25lZCBzaG9ydCAqcFlDU2Vuc2VEYXRhMjsKIAotICAgIFVDSEFSICAgKlhHSV9UVkRlbGF5TGlzdDsKLSAgICBVQ0hBUiAgICpYR0lfVFZEZWxheUxpc3QyOwotICAgIFVDSEFSICAgKkNIVFZWQ0xLVU5UU0M7Ci0gICAgVUNIQVIgICAqQ0hUVlZDTEtPTlRTQzsKLSAgICBVQ0hBUiAgICpDSFRWVkNMS1VQQUw7Ci0gICAgVUNIQVIgICAqQ0hUVlZDTEtPUEFMOwotICAgIFVDSEFSICAgKk5UU0NUaW1pbmc7Ci0gICAgVUNIQVIgICAqUEFMVGltaW5nOwotICAgIFVDSEFSICAgKkhpVFZFeHRUaW1pbmc7Ci0gICAgVUNIQVIgICAqSGlUVlN0MVRpbWluZzsKLSAgICBVQ0hBUiAgICpIaVRWU3QyVGltaW5nOwotICAgIFVDSEFSICAgKkhpVFZUZXh0VGltaW5nOwotICAgIFVDSEFSICAgKllQYlByNzUwcFRpbWluZzsKLSAgICBVQ0hBUiAgICpZUGJQcjUyNXBUaW1pbmc7Ci0gICAgVUNIQVIgICAqWVBiUHI1MjVpVGltaW5nOwotICAgIFVDSEFSICAgKkhpVFZHcm91cDNEYXRhOwotICAgIFVDSEFSICAgKkhpVFZHcm91cDNTaW11OwotICAgIFVDSEFSICAgKkhpVFZHcm91cDNUZXh0OwotICAgIFVDSEFSICAgKlJlbjUyNXBHcm91cDM7Ci0gICAgVUNIQVIgICAqUmVuNzUwcEdyb3VwMzsKLSAgICBVQ0hBUiAgICpTY3JlZW5PZmZzZXQ7Ci0gICAgVUNIQVIgICAqcFhHSU5ld19EUkFNVHlwZURlZmluaXRpb247Ci0gICAgVUNIQVIgICAqcFhHSU5ld19JMkNEZWZpbml0aW9uIDsKLSAgICBVQ0hBUiAgICpwWEdJTmV3X0NSOTcgOworICAgIHVuc2lnbmVkIGNoYXIgICpwU1IwNzsKKyAgICB1bnNpZ25lZCBjaGFyICAqQ1I0OTsKKyAgICB1bnNpZ25lZCBjaGFyICAqcFNSMUY7CisgICAgdW5zaWduZWQgY2hhciAgKkFHUFJlZzsKKyAgICB1bnNpZ25lZCBjaGFyICAqU1IxNjsKKyAgICB1bnNpZ25lZCBjaGFyICAqcFNSMjE7CisgICAgdW5zaWduZWQgY2hhciAgKnBTUjIyOworICAgIHVuc2lnbmVkIGNoYXIgICpwU1IyMzsKKyAgICB1bnNpZ25lZCBjaGFyICAqcFNSMjQ7CisgICAgdW5zaWduZWQgY2hhciAgKlNSMjU7CisgICAgdW5zaWduZWQgY2hhciAgKnBTUjMxOworICAgIHVuc2lnbmVkIGNoYXIgICpwU1IzMjsKKyAgICB1bnNpZ25lZCBjaGFyICAqcFNSMzM7CisgICAgdW5zaWduZWQgY2hhciAgKnBTUjM2OyAgICAgIC8qIGFsYW4gMTIvMDcvMjAwNiAqLworICAgIHVuc2lnbmVkIGNoYXIgICpwQ1JDRjsKKyAgICB1bnNpZ25lZCBjaGFyICAqcENSRDA7ICAgICAgLyogYWxhbiAxMi8wNy8yMDA2ICovCisgICAgdW5zaWduZWQgY2hhciAgKnBDUkRFOyAgICAgIC8qIGFsYW4gMTIvMDcvMjAwNiAqLworICAgIHVuc2lnbmVkIGNoYXIgICpwQ1I4RjsgICAgICAvKiBhbGFuIDEyLzA3LzIwMDYgKi8KKyAgICB1bnNpZ25lZCBjaGFyICAqcFNSNDA7ICAgICAgLyogYWxhbiAxMi8wNy8yMDA2ICovCisgICAgdW5zaWduZWQgY2hhciAgKnBTUjQxOyAgICAgIC8qIGFsYW4gMTIvMDcvMjAwNiAqLworICAgIHVuc2lnbmVkIGNoYXIgICpwRFZPU2V0dGluZzsKKyAgICB1bnNpZ25lZCBjaGFyICAqcENSMkU7CisgICAgdW5zaWduZWQgY2hhciAgKnBDUjJGOworICAgIHVuc2lnbmVkIGNoYXIgICpwQ1I0NjsKKyAgICB1bnNpZ25lZCBjaGFyICAqcENSNDc7CisgICAgdW5zaWduZWQgY2hhciAgKnBDUlQyRGF0YV8xXzI7CisgICAgdW5zaWduZWQgY2hhciAgKnBDUlQyRGF0YV80X0Q7CisgICAgdW5zaWduZWQgY2hhciAgKnBDUlQyRGF0YV80X0U7CisgICAgdW5zaWduZWQgY2hhciAgKnBDUlQyRGF0YV80XzEwOworICAgIHN0cnVjdCBYR0lfTUNMS0RhdGFTdHJ1Y3QgICpNQ0xLRGF0YTsKKyAgICBzdHJ1Y3QgWEdJX0VDTEtEYXRhU3RydWN0ICAqRUNMS0RhdGE7CiAKLSAgICBYR0kzMzBfTENEQ2FwU3RydWN0ICAqTENEQ2FwTGlzdDsKLSAgICBYR0kyMV9MVkRTQ2FwU3RydWN0ICAqWEcyMV9MVkRTQ2FwTGlzdDsKKyAgICB1bnNpZ25lZCBjaGFyICAgKlhHSV9UVkRlbGF5TGlzdDsKKyAgICB1bnNpZ25lZCBjaGFyICAgKlhHSV9UVkRlbGF5TGlzdDI7CisgICAgdW5zaWduZWQgY2hhciAgICpDSFRWVkNMS1VOVFNDOworICAgIHVuc2lnbmVkIGNoYXIgICAqQ0hUVlZDTEtPTlRTQzsKKyAgICB1bnNpZ25lZCBjaGFyICAgKkNIVFZWQ0xLVVBBTDsKKyAgICB1bnNpZ25lZCBjaGFyICAgKkNIVFZWQ0xLT1BBTDsKKyAgICB1bnNpZ25lZCBjaGFyICAgKk5UU0NUaW1pbmc7CisgICAgdW5zaWduZWQgY2hhciAgICpQQUxUaW1pbmc7CisgICAgdW5zaWduZWQgY2hhciAgICpIaVRWRXh0VGltaW5nOworICAgIHVuc2lnbmVkIGNoYXIgICAqSGlUVlN0MVRpbWluZzsKKyAgICB1bnNpZ25lZCBjaGFyICAgKkhpVFZTdDJUaW1pbmc7CisgICAgdW5zaWduZWQgY2hhciAgICpIaVRWVGV4dFRpbWluZzsKKyAgICB1bnNpZ25lZCBjaGFyICAgKllQYlByNzUwcFRpbWluZzsKKyAgICB1bnNpZ25lZCBjaGFyICAgKllQYlByNTI1cFRpbWluZzsKKyAgICB1bnNpZ25lZCBjaGFyICAgKllQYlByNTI1aVRpbWluZzsKKyAgICB1bnNpZ25lZCBjaGFyICAgKkhpVFZHcm91cDNEYXRhOworICAgIHVuc2lnbmVkIGNoYXIgICAqSGlUVkdyb3VwM1NpbXU7CisgICAgdW5zaWduZWQgY2hhciAgICpIaVRWR3JvdXAzVGV4dDsKKyAgICB1bnNpZ25lZCBjaGFyICAgKlJlbjUyNXBHcm91cDM7CisgICAgdW5zaWduZWQgY2hhciAgICpSZW43NTBwR3JvdXAzOworICAgIHVuc2lnbmVkIGNoYXIgICAqU2NyZWVuT2Zmc2V0OworICAgIHVuc2lnbmVkIGNoYXIgICAqcFhHSU5ld19EUkFNVHlwZURlZmluaXRpb247CisgICAgdW5zaWduZWQgY2hhciAgICpwWEdJTmV3X0kyQ0RlZmluaXRpb24gOworICAgIHVuc2lnbmVkIGNoYXIgICAqcFhHSU5ld19DUjk3IDsKIAotICAgIFhHSV9UaW1pbmdIU3RydWN0ICAqVGltaW5nSDsKLSAgICBYR0lfVGltaW5nVlN0cnVjdCAgKlRpbWluZ1Y7CisgICAgc3RydWN0IFhHSTMzMF9MQ0RDYXBTdHJ1Y3QgICpMQ0RDYXBMaXN0OworICAgIHN0cnVjdCBYR0kyMV9MVkRTQ2FwU3RydWN0ICAqWEcyMV9MVkRTQ2FwTGlzdDsKIAotICAgIFhHSV9TdFN0cnVjdCAgICAgICAgICAqU01vZGVJRFRhYmxlOwotICAgIFhHSV9TdGFuZFRhYmxlU3RydWN0ICAqU3RhbmRUYWJsZTsKLSAgICBYR0lfRXh0U3RydWN0ICAgICAgICAgKkVNb2RlSURUYWJsZTsKLSAgICBYR0lfRXh0MlN0cnVjdCAgICAgICAgKlJlZkluZGV4OworICAgIHN0cnVjdCBYR0lfVGltaW5nSFN0cnVjdCAgKlRpbWluZ0g7CisgICAgc3RydWN0IFhHSV9UaW1pbmdWU3RydWN0ICAqVGltaW5nVjsKKworICAgIHN0cnVjdCBYR0lfU3RTdHJ1Y3QgICAgICAgICAgKlNNb2RlSURUYWJsZTsKKyAgICBzdHJ1Y3QgWEdJX1N0YW5kVGFibGVTdHJ1Y3QgICpTdGFuZFRhYmxlOworICAgIHN0cnVjdCBYR0lfRXh0U3RydWN0ICAgICAgICAgKkVNb2RlSURUYWJsZTsKKyAgICBzdHJ1Y3QgWEdJX0V4dDJTdHJ1Y3QgICAgICAgICpSZWZJbmRleDsKICAgICAvKiBYR0lOZXdfQ1JUMVRhYmxlU3RydWN0ICpDUlQxVGFibGU7ICovCi0gICAgWEdJX0NSVDFUYWJsZVN0cnVjdCAgICAqWEdJTkVXVUJfQ1JUMVRhYmxlOwotICAgIFhHSV9WQ0xLRGF0YVN0cnVjdCAgICAqVkNMS0RhdGE7Ci0gICAgWEdJX1ZCVkNMS0RhdGFTdHJ1Y3QgICpWQlZDTEtEYXRhOwotICAgIFhHSV9TdFJlc0luZm9TdHJ1Y3QgICAqU3RSZXNJbmZvOwotICAgIFhHSV9Nb2RlUmVzSW5mb1N0cnVjdCAqTW9kZVJlc0luZm87Ci0gICAgWEdJX1hHMjFDUlQxU3RydWN0CSAgKlVwZGF0ZUNSVDE7Ci19OyAgLyogX1ZCX0RFVklDRV9JTkZPICovCisgICAgc3RydWN0IFhHSV9DUlQxVGFibGVTdHJ1Y3QgICAgKlhHSU5FV1VCX0NSVDFUYWJsZTsKKyAgICBzdHJ1Y3QgWEdJX1ZDTEtEYXRhU3RydWN0ICAgICpWQ0xLRGF0YTsKKyAgICBzdHJ1Y3QgWEdJX1ZCVkNMS0RhdGFTdHJ1Y3QgICpWQlZDTEtEYXRhOworICAgIHN0cnVjdCBYR0lfU3RSZXNJbmZvU3RydWN0ICAgKlN0UmVzSW5mbzsKKyAgICBzdHJ1Y3QgWEdJX01vZGVSZXNJbmZvU3RydWN0ICpNb2RlUmVzSW5mbzsKKyAgICBzdHJ1Y3QgWEdJX1hHMjFDUlQxU3RydWN0CSAgKlVwZGF0ZUNSVDE7Cit9OyAgLyogX3N0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqLwogCiAKLXR5cGVkZWYgc3RydWN0CitzdHJ1Y3QgVGltaW5nSW5mbwogewotICAgIFVTSE9SVCAgICBIb3Jpem9udGFsX0FDVElWRTsKLSAgICBVU0hPUlQgICAgSG9yaXpvbnRhbF9GUDsKLSAgICBVU0hPUlQgICAgSG9yaXpvbnRhbF9TWU5DOwotICAgIFVTSE9SVCAgICBIb3Jpem9udGFsX0JQOwotICAgIFVTSE9SVCAgICBWZXJ0aWNhbF9BQ1RJVkU7Ci0gICAgVVNIT1JUICAgIFZlcnRpY2FsX0ZQOwotICAgIFVTSE9SVCAgICBWZXJ0aWNhbF9TWU5DOwotICAgIFVTSE9SVCAgICBWZXJ0aWNhbF9CUDsKKyAgICB1bnNpZ25lZCBzaG9ydCAgICBIb3Jpem9udGFsX0FDVElWRTsKKyAgICB1bnNpZ25lZCBzaG9ydCAgICBIb3Jpem9udGFsX0ZQOworICAgIHVuc2lnbmVkIHNob3J0ICAgIEhvcml6b250YWxfU1lOQzsKKyAgICB1bnNpZ25lZCBzaG9ydCAgICBIb3Jpem9udGFsX0JQOworICAgIHVuc2lnbmVkIHNob3J0ICAgIFZlcnRpY2FsX0FDVElWRTsKKyAgICB1bnNpZ25lZCBzaG9ydCAgICBWZXJ0aWNhbF9GUDsKKyAgICB1bnNpZ25lZCBzaG9ydCAgICBWZXJ0aWNhbF9TWU5DOworICAgIHVuc2lnbmVkIHNob3J0ICAgIFZlcnRpY2FsX0JQOwogICAgIGRvdWJsZSAgICBEQ0xLOwotICAgIFVDSEFSICAgICBGcmFtZVJhdGU7Ci0gICAgVUNIQVIgICAgIEludGVybGFjZTsKLSAgICBVU0hPUlQgICAgTWFyZ2luOwotfSBUaW1pbmdJbmZvOworICAgIHVuc2lnbmVkIGNoYXIgICAgIEZyYW1lUmF0ZTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICBJbnRlcmxhY2U7CisgICAgdW5zaWduZWQgc2hvcnQgICAgTWFyZ2luOworfTsKIAogI2RlZmluZSBfVkJfU1RSVUNUXwogI2VuZGlmIC8qIF9WQl9TVFJVQ1RfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfdGFibGUuaCBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl90YWJsZS5oCmluZGV4IDc4MWNhZWYuLjUxMGVmNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl90YWJsZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl90YWJsZS5oCkBAIC0xLDcgKzEsNyBAQAogI2RlZmluZSAgVGFwNAogCiAKLVhHSV9NQ0xLRGF0YVN0cnVjdCBYR0kzMzBOZXdfTUNMS0RhdGFbXT0KK3N0cnVjdCBYR0lfTUNMS0RhdGFTdHJ1Y3QgWEdJMzMwTmV3X01DTEtEYXRhW10gPQogewogIHsgMHg1YywweDIzLDB4MDEsMTY2fSwKICB7IDB4NWMsMHgyMywweDAxLDE2Nn0sCkBAIC0xMyw3ICsxMyw3IEBACiAgeyAweDI5LDB4MDEsMHg4MSwzMDB9CiB9OwogLy95aWxpbiBtb2RpZnkgZm9yIHhnaTIwCi1YR0lfTUNMS0RhdGFTdHJ1Y3QgWEdJMzQwTmV3X01DTEtEYXRhW109CitzdHJ1Y3QgWEdJX01DTEtEYXRhU3RydWN0IFhHSTM0ME5ld19NQ0xLRGF0YVtdID0KIHsKICB7IDB4MTYsMHgwMSwweDAxLDE2Nn0sCiAgeyAweDE5LDB4MDIsMHgwMSwxMjR9LApAQCAtMjUsNyArMjUsNyBAQAogIHsgMHg1YywweDIzLDB4MDEsMTY2fQogfTsKIAotWEdJX01DTEtEYXRhU3RydWN0IFhHSTI3TmV3X01DTEtEYXRhW109CitzdHJ1Y3QgWEdJX01DTEtEYXRhU3RydWN0IFhHSTI3TmV3X01DTEtEYXRhW10gPQogewogIHsgMHg1YywweDIzLDB4MDEsMTY2fSwKICB7IDB4MTksMHgwMiwweDAxLDEyNH0sCkBAIC0zNyw3ICszNyw3IEBACiAgeyAweDVjLDB4MjMsMHgwMSwxNjZ9CiB9OwogCi1YR0lfRUNMS0RhdGFTdHJ1Y3QgWEdJMzMwX0VDTEtEYXRhW109CitzdHJ1Y3QgWEdJX0VDTEtEYXRhU3RydWN0IFhHSTMzMF9FQ0xLRGF0YVtdID0KIHsKICB7IDB4N2MsMHgwOCwweDAxLDIwMH0sCiAgeyAweDdjLDB4MDgsMHgwMSwyMDB9LApAQCAtNDksNyArNDksNyBAQAogIHsgMHgyOSwweDAxLDB4ODEsMzAwfQogfTsKIC8veWlsaW4gbW9kaWZ5IGZvciB4Z2kyMAotWEdJX0VDTEtEYXRhU3RydWN0IFhHSTM0MF9FQ0xLRGF0YVtdPQorc3RydWN0IFhHSV9FQ0xLRGF0YVN0cnVjdCBYR0kzNDBfRUNMS0RhdGFbXSA9CiB7CiAgeyAweDVjLDB4MjMsMHgwMSwxNjZ9LAogIHsgMHg1NSwweDg0LDB4MDEsMTIzfSwKQEAgLTYzLDE0ICs2MywxNCBAQAogCiAKIAotVUNIQVIgWEdJMzQwX1NSMTNbNF1bOF09ewordW5zaWduZWQgY2hhciBYR0kzNDBfU1IxM1s0XVs4XSA9IHsKIHsweDM1LDB4NDUsMHhiMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIFNSMTMgKi8KIHsweDQxLDB4NTEsMHg1YywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIFNSMTQgKi8KIHsweDMxLDB4NDIsMHg0MiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIFNSMTggKi8KIHsweDAzLDB4MDMsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LyogU1IxQiAqLwogfTsKIAotVUNIQVIgWEdJMzQwX2NyNDFbMjRdWzhdPQordW5zaWduZWQgY2hhciBYR0kzNDBfY3I0MVsyNF1bOF0gPQoge3sweDIwLDB4NTAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDAgQ1I0MSAqLwogezB4YzQsMHg0MCwweDg0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMSBDUjhBICovCiB7MHhjNCwweDQwLDB4ODQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwvKiAyIENSOEIgKi8KQEAgLTk4LDcgKzk4LDcgQEAKIH07CiAKIAotVUNIQVIgWEdJMjdfY3I0MVsyNF1bOF09Cit1bnNpZ25lZCBjaGFyIFhHSTI3X2NyNDFbMjRdWzhdID0KIHsKIHsweDIwLDB4NDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDAgQ1I0MSAqLwogezB4QzQsMHg0MCwweDg0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMSBDUjhBICovCkBAIC0xMjYsMzcgKzEyNiw3IEBACiB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfS8qIDIzIENSQzUgKi8KIH07CiAKLQotI2lmIDAKLVVDSEFSIFhHSTI3X2NyNDFbMjRdWzhdPQotewotezB4MjAsMHg2MCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMCBDUjQxICovCi17MHgwNCwweDQ0LDB4ODQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwvKiAxIENSOEEgKi8KLXsweDA0LDB4NDAsMHg4NCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDIgQ1I4QiAqLwotezB4YjUsMHgwMywweGE0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMyBDUjQwWzddLENSOTlbMjowXSxDUjQ1WzM6MF0qLwotezB4ZjAsMHhmNSwweGYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogNCBDUjU5ICovCi17MHhhNCwweDFDLDB4MjQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwvKiA1IENSNjggKi8KLXsweDc3LDB4NzcsMHg0NCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDYgQ1I2OSAqLwotezB4NzcsMHg3NywweDQ0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogNyBDUjZBICovCi17MHhmZiwweGZmLDB4ZmYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwvKiA4IENSNkQgKi8KLXsweDU1LDB4NTUsMHg1NSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDkgQ1I4MCAqLwotezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMTAgQ1I4MSAqLwotezB4NDgsMHhhOCwweDQ4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMTEgQ1I4MiAqLwotezB4NzcsMHg4OCwweDc3LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMTIgQ1I4NSAqLwotezB4ODgsMHg4OCwweDg4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMTMgQ1I4NiAqLwotezB4NDQsMHgzMiwweDQ0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMTQgQ1I5MCAqLwotezB4NDQsMHgzMywweDQ0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMTUgQ1I5MSAqLwotezB4MDcsMHgwNywweDA3LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMTYgQ1I5MiAqLwotezB4NDQsMHg2MywweDQ0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMTcgQ1I5MyAqLwotezB4MEEsMHgxNCwweDBBLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMTggQ1I5NCAqLwotezB4MEMsMHgwQiwweDBDLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMTkgQ1I5NSAqLwotezB4MDUsMHgyMiwweDA1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMjAgQ1I5NiAqLwotezB4ZjAsMHhmMCwweGYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMjEgQ1JDMyAqLwotezB4MDMsMHgwMCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMjIgQ1JDNCAqLwotezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0vKiAyMyBDUkM1ICovCi19OwotI2VuZGlmCi1VQ0hBUiBYR0kzNDBfQ1I2Qls4XVs0XT17Cit1bnNpZ25lZCBjaGFyIFhHSTM0MF9DUjZCWzhdWzRdID0gewogezB4YWEsMHhhYSwweGFhLDB4YWF9LAogezB4YWEsMHhhYSwweGFhLDB4YWF9LAogezB4YWEsMHhhYSwweGFhLDB4YWF9LApAQCAtMTY3LDcgKzEzNyw3IEBACiB7MHgwMCwweDAwLDB4MDAsMHgwMH0KIH07CiAKLVVDSEFSIFhHSTM0MF9DUjZFWzhdWzRdPXsKK3Vuc2lnbmVkIGNoYXIgWEdJMzQwX0NSNkVbOF1bNF0gPSB7CiB7MHgwMCwweDAwLDB4MDAsMHgwMH0sCiB7MHgwMCwweDAwLDB4MDAsMHgwMH0sCiB7MHgwMCwweDAwLDB4MDAsMHgwMH0sCkBAIC0xNzgsNyArMTQ4LDcgQEAKIHsweDAwLDB4MDAsMHgwMCwweDAwfQogfTsKIAotVUNIQVIgWEdJMzQwX0NSNkZbOF1bMzJdPXsKK3Vuc2lnbmVkIGNoYXIgWEdJMzQwX0NSNkZbOF1bMzJdID0gewogezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCiB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LApAQCAtMTg5LDcgKzE1OSw3IEBACiB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfQogfTsKIAotVUNIQVIgWEdJMzQwX0NSODlbOF1bMl09ewordW5zaWduZWQgY2hhciBYR0kzNDBfQ1I4OVs4XVsyXSA9IHsKIHsweDAwLDB4MDB9LAogezB4MDAsMHgwMH0sCiB7MHgwMCwweDAwfSwKQEAgLTIwMCwxMSArMTcwLDEyIEBACiB7MHgwMCwweDAwfQogfTsKIAkJCSAvKiBDUjQ3LENSNDgsQ1I0OSxDUjRBLENSNEIsQ1I0QyxDUjcwLENSNzEsQ1I3NCxDUjc1LENSNzYsQ1I3NyAqLwotVUNIQVIgWEdJMzQwX0FHUFJlZ1sxMl09ezB4MjgsMHgyMywweDAwLDB4MjAsMHgwMCwweDIwLDB4MDAsMHgwNSwweGQwLDB4MTAsMHgxMCwweDAwfTsKK3Vuc2lnbmVkIGNoYXIgWEdJMzQwX0FHUFJlZ1sxMl0gPSB7MHgyOCwgMHgyMywgMHgwMCwgMHgyMCwgMHgwMCwgMHgyMCwgMHgwMCwKKwkJCQkgICAweDA1LCAweGQwLCAweDEwLCAweDEwLCAweDAwfTsKIAotVUNIQVIgWEdJMzQwX1NSMTZbNF09ezB4MDMsMHg4MywweDAzLDB4ODN9OwordW5zaWduZWQgY2hhciBYR0kzNDBfU1IxNls0XSA9IHsweDAzLCAweDgzLCAweDAzLCAweDgzfTsKIAotVUNIQVIgWEdJMzMwX1NSMTVfMVs4XVs4XT17Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9TUjE1XzFbOF1bOF0gPSB7CiB7MHgwLDB4MCwweDAwLDB4MDAsMHgyMCwweDIwLDB4MDAsMHgwMH0sCiB7MHg1LDB4MTUsMHgxNSwweDE1LDB4MTUsMHgxNSwweDAwLDB4MDB9LAogezB4YmEsMHhiYSwweGJhLDB4YmEsMHhCQSwweEJBLDB4MDAsMHgwMH0sCkBAIC0yMTUsNyArMTg2LDcgQEAKIHsweDAsMHhhNSwweGZiLDB4ZjYsMHhGNiwweEY2LDB4MDAsMHgwMH0KIH07CiAKLVVDSEFSIFhHSTMzMF9jcjQwXzFbMTVdWzhdPXsKK3Vuc2lnbmVkIGNoYXIgWEdJMzMwX2NyNDBfMVsxNV1bOF0gPSB7CiB7MHg2NiwweDQwLDB4NDAsMHgyOCwweDI0LDB4MjQsMHgwMCwweDAwfSwKIHsweDY2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAogezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCkBAIC0yMzMsMTQgKzIwNCwxNCBAQAogezB4MDAsMHhBMiwweDAwLDB4MDAsMHhBMiwweEEyLDB4MDAsMHgwMH0sCiB9OwogCi1VQ0hBUiBYR0kzMzBfc3IyNVtdPXsweDAwLDB4MH07Ci1VQ0hBUiBYR0kzMzBfc3IzMT0weGMwOwotVUNIQVIgWEdJMzMwX3NyMzI9MHgxMTsKLVVDSEFSIFhHSTMzMF9TUjMzPTB4MDA7Ci1VQ0hBUiBYRzQwX0NSQ0Y9MHgxMzsKLVVDSEFSIFhHNDBfRFJBTVR5cGVEZWZpbml0aW9uPTB4RkYgOwordW5zaWduZWQgY2hhciBYR0kzMzBfc3IyNVtdID0gezB4MDAsIDB4MH07Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9zcjMxID0gMHhjMDsKK3Vuc2lnbmVkIGNoYXIgWEdJMzMwX3NyMzIgPSAweDExOwordW5zaWduZWQgY2hhciBYR0kzMzBfU1IzMyA9IDB4MDA7Cit1bnNpZ25lZCBjaGFyIFhHNDBfQ1JDRiA9IDB4MTM7Cit1bnNpZ25lZCBjaGFyIFhHNDBfRFJBTVR5cGVEZWZpbml0aW9uID0gMHhGRiA7CiAKLVhHSV9TdFN0cnVjdCBYR0kzMzBfU01vZGVJRFRhYmxlW109CitzdHJ1Y3QgWEdJX1N0U3RydWN0IFhHSTMzMF9TTW9kZUlEVGFibGVbXSA9CiB7CiAgezB4MDEsMHg5MjA4LDB4MDEsMHgwMCwweDEwLDB4MDAsMHgwMCwweDAxLDB4MDB9LAogIHsweDAxLDB4MTIxMCwweDE0LDB4MDEsMHgwMCwweDAxLDB4MDAsMHgwMSwweDAwfSwKQEAgLTI2NSw3ICsyMzYsNyBAQAogfTsKIAogCi1YR0lfRXh0U3RydWN0ICBYR0kzMzBfRU1vZGVJRFRhYmxlW109CitzdHJ1Y3QgWEdJX0V4dFN0cnVjdCAgWEdJMzMwX0VNb2RlSURUYWJsZVtdID0KIHsKICB7MHg2YSwweDIyMTIsMHgwNDA3LDB4M2E4MSwweDAxMDIsMHgwOCwweDA3LDB4MDAsMHgwMCwweDA3LDB4MGV9LAogIHsweDJlLDB4MGExYiwweDAzMDYsMHgzYTU3LDB4MDEwMSwweDA4LDB4MDYsMHgwMCwweDAwLDB4MDUsMHgwNn0sCkBAIC0zMzcsNyArMzA4LDcgQEAKICB7MHhmZiwweDAwMDAsMHgwMDAwLDB4MDAwMCwweDAwMDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9CiB9OwogCi1YR0lfU3RhbmRUYWJsZVN0cnVjdCBYR0kzMzBfU3RhbmRUYWJsZVtdPQorc3RydWN0IFhHSV9TdGFuZFRhYmxlU3RydWN0IFhHSTMzMF9TdGFuZFRhYmxlW10gPQogewogLyogTURfMF8yMDAgKi8KICB7CkBAIC03NzUsMTMgKzc0NiwxMyBAQAogIH0KIH07CiAKLVhHSV9UaW1pbmdIU3RydWN0IFhHSV9UaW1pbmdIW109CitzdHJ1Y3QgWEdJX1RpbWluZ0hTdHJ1Y3QgWEdJX1RpbWluZ0hbXSA9CiB7e3sweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fX07CiAKLVhHSV9UaW1pbmdWU3RydWN0IFhHSV9UaW1pbmdWW109CitzdHJ1Y3QgWEdJX1RpbWluZ1ZTdHJ1Y3QgWEdJX1RpbWluZ1ZbXSA9CiB7e3sweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX19OwogCi1YR0lfWEcyMUNSVDFTdHJ1Y3QgWEdJX1VwZGF0ZUNSVDFUYWJsZVtdPQorc3RydWN0IFhHSV9YRzIxQ1JUMVN0cnVjdCBYR0lfVXBkYXRlQ1JUMVRhYmxlW10gPQogewogIHsweDAxLDB4MjcsMHg5MSwweDhmLDB4YzB9LAkvKiAwMCAqLwogIHsweDAzLDB4NGYsMHg4MywweDhmLDB4YzB9LAkvKiAwMSAqLwpAQCAtODAyLDcgKzc3Myw3IEBACiAgezB4NTksMHgyNywweDkxLDB4OGYsMHhjMH0JLyogMTYgKi8KIH07CiAKLVhHSV9DUlQxVGFibGVTdHJ1Y3QgWEdJX0NSVDFUYWJsZVtdPQorc3RydWN0IFhHSV9DUlQxVGFibGVTdHJ1Y3QgWEdJX0NSVDFUYWJsZVtdID0KIHsKICB7ezB4MmQsMHgyOCwweDkwLDB4MmMsMHg5MCwweDAwLDB4MDQsMHgwMCwKICAgICAweGJmLDB4MWYsMHg5YywweDhlLDB4OTYsMHhiOSwweDMwfX0sIC8qIDB4MCAqLwpAQCAtOTUwLDcgKzkyMSw3IEBACiAgICAgMHgwMywweERFLDB4QzAsMHg4NCwweEJGLDB4MDQsMHg5MH19ICAvKiAweDQ3ICovCiB9OwogCi1YR0kzMzBfQ0hUVlJlZ0RhdGFTdHJ1Y3QgWEdJX0NIVFZSZWdVTlRTQ1tdID0geworc3RydWN0IFhHSTMzMF9DSFRWUmVnRGF0YVN0cnVjdCBYR0lfQ0hUVlJlZ1VOVFNDW10gPSB7CiAgICAgICAgICAgICAgICAgLyogSW5kZXg6MDAwaCwwMDFoLDAwMmgsMDA0aCwwMDNoLDAwNWgsMDA2aCwwMDdoLDAwOGgsMDE1aCwwMUZoLDAwQ2gsMDBEaCwwMEVoLDAwRmgsMDEwaCAqLwogICAgICAgICAgICAgICAgIHt7ICAgICAgMHg0QSwweDc3LDB4QkIsMHg5NCwweDg0LDB4NDgsMHhGRSwweDUwLDB4MDQsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSAgfX0sLyogMDAgKDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgICAgICAgICB7eyAgICAgIDB4NEEsMHg3NywweEJCLDB4OTQsMHg4NCwweDQ4LDB4RkUsMHg1MCwweDA0LDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEgIH19LC8qIDAxICg2NDB4MzUwKSAqLwpAQCAtOTYxLDcgKzkzMiw3IEBACiAgICAgICAgICAgICAgICAge3sgICAgICAweEVFLDB4NzcsMHhCQiwweDY2LDB4ODcsMHgzMiwweDAxLDB4NUEsMHgwNCwweDAwLDB4ODAsMHgxQiwweEQ0LDB4MkYsMHg2RiwweDAwICB9fS8qIDA2ICgxMDI0eDc2OCkgOzs1LzYvMDIgKi8KICAgICAgICAgICB9OwogCi1YR0kzMzBfQ0hUVlJlZ0RhdGFTdHJ1Y3QgWEdJX0NIVFZSZWdPTlRTQ1tdPSB7CitzdHJ1Y3QgWEdJMzMwX0NIVFZSZWdEYXRhU3RydWN0IFhHSV9DSFRWUmVnT05UU0NbXSA9IHsKICAgICAgICAgICAgICAgICAvKiBJbmRleDowMDBoLDAwMWgsMDAyaCwwMDRoLDAwM2gsMDA1aCwwMDZoLDAwN2gsMDA4aCwwMTVoLDAxRmgsMDBDaCwwMERoLDAwRWgsMDBGaCwwMTBoICovCiAgICAgICAgICAgICAgICAge3sgICAgICAweDQ5LDB4NzcsMHhCQiwweDdCLDB4ODQsMHgzNCwweDAwLDB4NTAsMHgwNCwweDAwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxICB9fSwvKiAwMCAoNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICAgICAgICAgIHt7ICAgICAgMHg0OSwweDc3LDB4QkIsMHg3QiwweDg0LDB4MzQsMHgwMCwweDUwLDB4MDQsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSAgfX0sLyogMDEgKDY0MHgzNTApICovCkBAIC05NzIsNyArOTQzLDcgQEAKICAgICAgICAgICAgICAgICB7eyAgICAgIDB4RUQsMHg3NywweEJCLDB4NjYsMHg4QywweDIxLDB4MDIsMHg1QSwweDA0LDB4MDAsMHg4MCwweDFGLDB4QTAsMHg3RSwweDczLDB4MDAgIH19LyogMDYgKDEwMjR4NzY4KSA7OzUvNi8wMiAqLwogICAgICAgICAgIH07CiAKLVhHSTMzMF9DSFRWUmVnRGF0YVN0cnVjdCBYR0lfQ0hUVlJlZ1VQQUxbXT0gIHsKK3N0cnVjdCBYR0kzMzBfQ0hUVlJlZ0RhdGFTdHJ1Y3QgWEdJX0NIVFZSZWdVUEFMW10gPSB7CiAgICAgICAgICAgICAgICAgLyogSW5kZXg6MDAwaCwwMDFoLDAwMmgsMDA0aCwwMDNoLDAwNWgsMDA2aCwwMDdoLDAwOGgsMDE1aCwwMUZoLDAwQ2gsMDBEaCwwMEVoLDAwRmgsMDEwaCAqLwogICAgICAgICAgICAgICAgIHt7ICAgICAgMHg0MSwweDdGLDB4QjcsMHgzNCwweEFELDB4NTAsMHgzNCwweDgzLDB4MDUsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSAgfX0sLyogOyAwMCAoNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICAgICAgICAgIHt7ICAgICAgMHg0MSwweDdGLDB4QjcsMHg4MCwweDg1LDB4NTAsMHgwMCwweDgzLDB4MDUsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSAgfX0sLyogOyAwMSAoNjQweDM1MCkgKi8KQEAgLTk4Myw3ICs5NTQsNyBAQAogICAgICAgICAgICAgICAgIHt7ICAgICAgMHhFNSwweDdGLDB4QjcsMHgxRCwweEE3LDB4M0UsMHgwNCwweDVBLDB4MDUsMHgwMCwweDgwLDB4MjAsMHgzRSwweEU0LDB4MjIsMHgwMCAgfX0vKiA7IDA2ICgxMDI0eDc2OCkgOzsxLzEyLzAyICovCiAJICB9OwogCi1YR0kzMzBfQ0hUVlJlZ0RhdGFTdHJ1Y3QgWEdJX0NIVFZSZWdPUEFMW109eworc3RydWN0IFhHSTMzMF9DSFRWUmVnRGF0YVN0cnVjdCBYR0lfQ0hUVlJlZ09QQUxbXSA9IHsKICAgICAgICAgICAgICAgICAvKiBJbmRleDowMDAsMHgwMSwweDAyLDB4MDQsMHgwMywweDA1LDB4MDYsMHgwNywweDA4LDB4MTUsMHgxRiwweDBDLDB4MEQsMHgwRSwweDBGLDB4MTBoICovCiAgICAgICAgICAgICAgICAge3sgICAgICAweDQxLDB4N0YsMHhCNywweDM2LDB4QUQsMHg1MCwweDM0LDB4ODMsMHgwNSwweDAwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxIH19LC8qIDAwICg2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgICAgICAgICAge3sgICAgICAweDQxLDB4N0YsMHhCNywweDg2LDB4ODUsMHg1MCwweDAwLDB4ODMsMHgwNSwweDAwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxIH19LC8qIDAxICg2NDB4MzUwKSAqLwpAQCAtOTk0LDE0ICs5NjUsMTQgQEAKICAgICAgICAgICAgICAgICB7eyAgICAgIDB4RTQsMHg3RiwweEI3LDB4MUUsMHhBRiwweDI5LDB4MzcsMHg1QSwweDA1LDB4MDAsMHg4MCwweDI1LDB4OEMsMHhCMiwweDJBLDB4MDAgfX0vKiAwNiAoMTAyNHg3NjgpIDs7MS8xMi8wMiAqLwogCSAgICAgfTsKIAotVUNIQVIgWEdJX0NINzAxN0xWMTAyNHg3NjhbXT17MHg2MCwweDAyLDB4MDAsMHgwNywweDQwLDB4RUQsMHhBMywKLSAgICAgICAgICAgICAgICAgICAJCQkweEM4LDB4QzcsMHhBQywweEUwLDB4MDJ9OwotVUNIQVIgWEdJX0NINzAxN0xWMTQwMHgxMDUwW109ezB4NjAsMHgwMywweDExLDB4MDAsMHg0MCwweEUzLDB4QUQsCi0gICAgICAgICAgICAgICAgICAgCQkJMHhEQiwweEY2LDB4QUMsMHhFMCwweDAyfTsKK3Vuc2lnbmVkIGNoYXIgWEdJX0NINzAxN0xWMTAyNHg3NjhbXSA9IHsweDYwLCAweDAyLCAweDAwLCAweDA3LCAweDQwLCAweEVELCAweEEzLAorCQkJCQkweEM4LCAweEM3LCAweEFDLCAweEUwLCAweDAyfTsKK3Vuc2lnbmVkIGNoYXIgWEdJX0NINzAxN0xWMTQwMHgxMDUwW10gPSB7MHg2MCwgMHgwMywgMHgxMSwgMHgwMCwgMHg0MCwgMHhFMywgMHhBRCwKKwkJCQkJIDB4REIsIDB4RjYsIDB4QUMsIDB4RTAsIDB4MDJ9OwogCiAKIC8qYWRkIGZvciBuZXcgVU5JVkdBQklPUyovCi1YR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX1N0TENEMTAyNHg3NjhEYXRhW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9TdExDRDEwMjR4NzY4RGF0YVtdID0KIHsKICB7ICAgNjIsICAyNSwgODAwLCA1NDYsMTM0NCwgODA2fSwKICB7ICAgMzIsICAxNSwgOTMwLCA1NDYsMTM0NCwgODA2fSwKQEAgLTEwMTIsNyArOTgzLDcgQEAKICB7ICAgIDEsICAgMSwxMzQ0LCA4MDYsMTM0NCwgODA2fQogfTsKIAotWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9FeHRMQ0QxMDI0eDc2OERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX0V4dExDRDEwMjR4NzY4RGF0YVtdID0KIHsKICB7ICAgNDIsICAyNSwxNTM2LCA0MTksMTM0NCwgODA2fSwgLyogeyAxMiwgNSwgODk2LCA1MTIsMTM0NCwgODA2fSwgLy8gYWxhbiAwOS8xMi8yMDAzICovCiAgeyAgIDQ4LCAgMjUsMTUzNiwgMzY5LDEzNDQsIDgwNn0sIC8qIHsgMTIsIDUsIDg5NiwgNTEwLDEzNDQsIDgwNn0sIC8vIGFsYW4gMDkvMTIvMjAwMyAqLwpAQCAtMTAyOSw3ICsxMDAwLDcgQEAKICB7ICAgIDEsICAgMSwxMzQ0LCA4MDYsMTM0NCwgODA2fQogfTsKIAotLypYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX1N0MkxDRDEwMjR4NzY4RGF0YVtdPQorLypzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9TdDJMQ0QxMDI0eDc2OERhdGFbXSA9CiB7CiAgeyAgIDYyLCAgMjUsIDgwMCwgNTQ2LDEzNDQsIDgwNn0sCiAgeyAgIDMyLCAgMTUsIDkzMCwgNTQ2LDEzNDQsIDgwNn0sCkBAIC0xMDQwLDcgKzEwMTEsNyBAQAogIHsgICAgMSwgICAxLDEzNDQsIDgwNiwxMzQ0LCA4MDZ9CiB9OyovCiAKLVhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfQ2V0TENEMTAyNHg3NjhEYXRhW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9DZXRMQ0QxMDI0eDc2OERhdGFbXSA9CiB7CiAJeyAgICAgICAgIDEsMSwxMzQ0LDgwNiwxMzQ0LDgwNiAgICAgICAgICAgfSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgeyAgICAgICAgIDEsMSwxMzQ0LDgwNiwxMzQ0LDgwNiAgICAgICAgICAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTEwNTEsNyArMTAyMiw3IEBACiAgICAgICAgIHsgICAgICAgICAxLDEsMTM0NCw4MDYsMTM0NCw4MDYgICAgICAgICAgIH0gIC8qIDA2ICgxMDI0eDc2OHg2MEh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9TdExDRDEyODB4MTAyNERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX1N0TENEMTI4MHgxMDI0RGF0YVtdID0KIHsKICB7ICAgMjIsICAgNSwgODAwLCA1MTAsMTY1MCwxMDg4fSwKICB7ICAgMjIsICAgNSwgODAwLCA1MTAsMTY1MCwxMDg4fSwKQEAgLTEwNjMsNyArMTAzNCw3IEBACiAgeyAgICAxLCAgIDEsMTY4OCwxMDY2LDE2ODgsMTA2Nn0KIH07CiAKLVhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfRXh0TENEMTI4MHgxMDI0RGF0YVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfRXh0TENEMTI4MHgxMDI0RGF0YVtdID0KIHsKICB7ICAyMTEsICA2MCwxMDI0LCA1MDEsMTY4OCwxMDY2fSwKICB7ICAyMTEsICA2MCwxMDI0LCA1MDgsMTY4OCwxMDY2fSwKQEAgLTEwNzUsNyArMTA0Niw3IEBACiAgeyAgICAxLCAgIDEsMTY4OCwxMDY2LDE2ODgsMTA2Nn0KIH07CiAKLVhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfU3QyTENEMTI4MHgxMDI0RGF0YVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfU3QyTENEMTI4MHgxMDI0RGF0YVtdID0KIHsKICB7ICAgMjIsICAgNSwgODAwLCA1MTAsMTY1MCwxMDg4fSwKICB7ICAgMjIsICAgNSwgODAwLCA1MTAsMTY1MCwxMDg4fSwKQEAgLTEwODcsNyArMTA1OCw3IEBACiAgeyAgICAxLCAgIDEsMTY4OCwxMDY2LDE2ODgsMTA2Nn0KIH07CiAKLVhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfQ2V0TENEMTI4MHgxMDI0RGF0YVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfQ2V0TENEMTI4MHgxMDI0RGF0YVtdID0KIHsKIAl7ICAgICAgICAgMSwxLDE2ODgsMTA2NiwxNjg4LDEwNjYgICAgICAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgeyAgICAgICAgIDEsMSwxNjg4LDEwNjYsMTY4OCwxMDY2ICAgICAgICAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTExMDAsNyArMTA3MSw3IEBACiAgICAgICAgIHsgICAgICAgICAxLDEsMTY4OCwxMDY2LDE2ODgsMTA2NiAgICAgICAgIH0gLyogMDggKDE0MDB4MTA1MHg2MEh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9TdExDRDE0MDB4MTA1MERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX1N0TENEMTQwMHgxMDUwRGF0YVtdID0KIHsKIAl7ICAgICAgICAgMjExLDEwMCwyMTAwLDQwOCwxNjg4LDEwNjYgICAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgeyAgICAgICAgIDIxMSw2NCwxNTM2LDM1OCwxNjg4LDEwNjYgICAgICAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTExMTMsNyArMTA4NCw3IEBACiAgICAgICAgIHsgICAgICAgICAxLDEsMTY4OCwxMDY2LDE2ODgsMTA2NiAgICAgICAgIH0gIC8qIDA4ICgxNDAweDEwNTB4NjBIeikgKi8KIH07CiAKLVhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfRXh0TENEMTQwMHgxMDUwRGF0YVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfRXh0TENEMTQwMHgxMDUwRGF0YVtdID0KIHsKIAl7ICAgICAgICAgMjExLDEwMCwyMTAwLDQwOCwxNjg4LDEwNjYgICAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgeyAgICAgICAgIDIxMSw2NCwxNTM2LDM1OCwxNjg4LDEwNjYgICAgICAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTExMjYsNyArMTA5Nyw3IEBACiAgICAgICAgIHsgICAgICAgICAxLDEsMTY4OCwxMDY2LDE2ODgsMTA2NiAgICAgICAgIH0gIC8qIDA4ICgxNDAweDEwNTB4NjBIeikgKi8KIH07CiAKLVhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfRXh0TENEMTYwMHgxMjAwRGF0YVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfRXh0TENEMTYwMHgxMjAwRGF0YVtdID0KIHsKICAgICAgICAgeyAgICAgICAgIDQsMSwxNjIwLDQyMCwyMTYwLDEyNTAgICAgICAgICAgfSwgLyogeyAzLDEsMjE2MCw0MjUsMjE2MCwxMjUwIH0sIC8vIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAvLyBhbGFuIDEwLzE0LzIwMDMgKi8KICAgICAgICAgeyAgICAgICAgIDI3LDcsMTkyMCwzNzUsMjE2MCwxMjUwICAgICAgICAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTExNDAsNyArMTExMSw3IEBACiAgICAgICAgIHsgICAgICAgICAxLDEsMjE2MCwxMjUwLDIxNjAsMTI1MCAgICAgICAgIH0gIC8qIDA5ICgxNjAweDEyMDB4NjBIeikgOzMwMmx2ICovCiB9OwogCi1YR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX1N0TENEMTYwMHgxMjAwRGF0YVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfU3RMQ0QxNjAweDEyMDBEYXRhW10gPQogewogICAgICAgICB7ICAgICAgICAgMjcsNCw4MDAsNTAwLDIxNjAsMTI1MCAgICAgICAgICB9LC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7ICAgICAgICAgMjcsNCw4MDAsNTAwLDIxNjAsMTI1MCAgICAgICAgICB9LC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xMTU0LDcgKzExMjUsNyBAQAogICAgICAgICB7ICAgICAgICAgMSwxLDIxNjAsMTI1MCwyMTYwLDEyNTAgICAgICAgICB9IC8qIDA5ICgxNjAweDEyMDApICovCiB9OwogCi1YR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX0NldExDRDE0MDB4MTA1MERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX0NldExDRDE0MDB4MTA1MERhdGFbXSA9CiB7CiAJeyAgICAgICAgIDEsMSwxNjg4LDEwNjYsMTY4OCwxMDY2ICAgICAgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICAgICAxLDEsMTY4OCwxMDY2LDE2ODgsMTA2NiAgICAgICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xMTY3LDcgKzExMzgsNyBAQAogICAgICAgICB7ICAgICAgICAgMSwxLDE2ODgsMTA2NiwxNjg4LDEwNjYgICAgICAgICB9ICAvKiAwOCAoMTQwMHgxMDUweDYwSHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX05vU2NhbGluZ0RhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX05vU2NhbGluZ0RhdGFbXSA9CiB7CiAgeyAgICAxLCAgIDEsIDgwMCwgNDQ5LCA4MDAsIDQ0OX0sCiAgeyAgICAxLCAgIDEsIDgwMCwgNDQ5LCA4MDAsIDQ0OX0sCkBAIC0xMTc5LDcgKzExNTAsNyBAQAogIHsgICAgMSwgICAxLDE2ODgsMTA2NiwxNjg4LDEwNjZ9CiB9OwogCi1YR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX0V4dExDRDEwMjR4NzY4eDc1RGF0YVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfRXh0TENEMTAyNHg3Njh4NzVEYXRhW10gPQogewogICAgICAgICB7NDIsMjUsMTUzNiw0MTksMTM0NCw4MDYgfSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgezQ4LDI1LDE1MzYsMzY5LDEzNDQsODA2IH0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTExOTAsNyArMTE2MSw3IEBACiAgICAgICAgIHsxLDEsMTMxMiw4MDAsMTMxMiw4MDAgICB9ICAvKiA7IDA2ICgxMDI0eDc2OHg3NUh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9TdExDRDEwMjR4NzY4eDc1RGF0YVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfU3RMQ0QxMDI0eDc2OHg3NURhdGFbXSA9CiB7CiAgICAgICAgIHs0MiwyNSwxNTM2LDQxOSwxMzQ0LDgwNiB9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7NDgsMjUsMTUzNiwzNjksMTM0NCw4MDYgfSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTIwMSw3ICsxMTcyLDcgQEAKICAgICAgICAgezEsMSwxMzEyLDgwMCwxMzEyLDgwMCAgIH0gIC8qIDsgMDYgKDEwMjR4NzY4eDc1SHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX0NldExDRDEwMjR4NzY4eDc1RGF0YVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfQ2V0TENEMTAyNHg3Njh4NzVEYXRhW10gPQogewogICAgICAgICB7MSwxLDEzMTIsODAwLDEzMTIsODAwfSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgezEsMSwxMzEyLDgwMCwxMzEyLDgwMH0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTEyMTIsNyArMTE4Myw3IEBACiAgICAgICAgIHsxLDEsMTMxMiw4MDAsMTMxMiw4MDB9IC8qIDsgMDYgKDEwMjR4NzY4eDc1SHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX0V4dExDRDEyODB4MTAyNHg3NURhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX0V4dExDRDEyODB4MTAyNHg3NURhdGFbXSA9CiB7CiAgICAgICAgIHsyMTEsNjAsMTAyNCw1MDEsMTY4OCwxMDY2ICAgfSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgezIxMSw2MCwxMDI0LDUwOCwxNjg4LDEwNjYgICB9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xMjI0LDcgKzExOTUsNyBAQAogICAgICAgICB7MSwxLDE2ODgsMTA2NiwxNjg4LDEwNjYgICAgIH0gIC8qIDsgMDcgKDEyODB4MTAyNHg3NUh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9TdExDRDEyODB4MTAyNHg3NURhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX1N0TENEMTI4MHgxMDI0eDc1RGF0YVtdID0KIHsKICAgICAgICAgezIxMSw2MCwxMDI0LDUwMSwxNjg4LDEwNjYgfSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgezIxMSw2MCwxMDI0LDUwOCwxNjg4LDEwNjYgfSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTIzNiw3ICsxMjA3LDcgQEAKICAgICAgICAgezEsMSwxNjg4LDEwNjYsMTY4OCwxMDY2ICAgfSAgLyogOyAwNyAoMTI4MHgxMDI0eDc1SHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX0NldExDRDEyODB4MTAyNHg3NURhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX0NldExDRDEyODB4MTAyNHg3NURhdGFbXSA9CiB7CiAgICAgICAgIHsxLDEsMTY4OCwxMDY2LDE2ODgsMTA2Nn0sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsxLDEsMTY4OCwxMDY2LDE2ODgsMTA2Nn0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTEyNDgsNyArMTIxOSw3IEBACiAgICAgICAgIHsxLDEsMTY4OCwxMDY2LDE2ODgsMTA2Nn0gIC8qIDsgMDcgKDEyODB4MTAyNHg3NUh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9Ob1NjYWxpbmdEYXRheDc1W109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9Ob1NjYWxpbmdEYXRheDc1W10gPQogewogICAgICAgICB7MSwxLDgwMCw0NDksODAwLDQ0OSAgICB9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7MSwxLDgwMCw0NDksODAwLDQ0OSAgICB9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xMjYzLDcgKzEyMzQsNyBAQAogICAgICAgICB7MSwxLDE2ODgsODA2LDE2ODgsODA2ICB9ICAvKiA7IDBBICgxMjgweDc2OHg3NUh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9FeHRMQ0REZXMxMDI0eDc2OERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0V4dExDRERlczEwMjR4NzY4RGF0YVtdID0KIHsKICAgIHsgIDksMTA1NywwLCA3NzEgIH0sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICB7ICA5LDEwNTcsMCwgNzcxICB9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xMjc0LDcgKzEyNDUsNyBAQAogICAgeyAgOSwxMDU3LDgwNSwgNzcwICB9ICAvKiA7IDA2ICgxMDI0eDc2OHg2MEh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9TdExDRERlczEwMjR4NzY4RGF0YVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfU3RMQ0REZXMxMDI0eDc2OERhdGFbXSA9CiB7CiAgICAgICAgIHsgOSwxMDU3LDczNyw3MDMgICB9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7IDksMTA1Nyw2ODYsNjUxICAgfSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTI4NSw3ICsxMjU2LDcgQEAKICAgICAgICAgeyA5LDEwNTcsODA1LDc3MCAgIH0gIC8qIDsgMDYgKDEwMjR4NzY4eDYwSHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0NldExDRERlczEwMjR4NzY4RGF0YVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfQ2V0TENERGVzMTAyNHg3NjhEYXRhW10gPQogewogICAgICAgIAl7ICAgICAgMTE1Miw4NTYsNjIyLDU4NyAgIH0sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICAxMTUyLDg1Niw1OTcsNTYyICAgfSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTI5Niw3ICsxMjY3LDcgQEAKICAgICAgICAgeyAgICAgIDAsMTA0OCw4MDUsNzcwICAgfSAgLyogOyAwNiAoMTAyNHg3Njh4NjBIeikgKi8KIH07CiAKLVhHSTMzMF9MQ0REYXRhRGVzU3RydWN0IFhHSV9FeHRMQ0RETERlczEyODB4MTAyNERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCBYR0lfRXh0TENERExEZXMxMjgweDEwMjREYXRhW10gPQogewogICAgICAgICB7ICAgICAgMTgsMTM0Niw5ODEsOTQwICAgICB9LC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7ICAgICAgMTgsMTM0Niw5MjYsODY1ICAgICB9LC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xMzA4LDcgKzEyNzksNyBAQAogICAgICAgICB7ICAgICAgMTgsMTM0NiwxMDY1LDEwMjQgICAgIH0vKiAwNyAoMTI4MHgxMDI0eDYwSHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YURlc1N0cnVjdCBYR0lfU3RMQ0RETERlczEyODB4MTAyNERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCBYR0lfU3RMQ0RETERlczEyODB4MTAyNERhdGFbXSA9CiB7CiAgICAgICAgIHsgICAgICAxOCwxMzQ2LDk3MCw5MDcgICAgIH0sLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICAxOCwxMzQ2LDkxNyw4NTQgICAgIH0sLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTEzMjAsNyArMTI5MSw3IEBACiAgICAgICAgIHsgICAgICAxOCwxMzQ2LDEwNjUsMTAyNCAgICAgfS8qIDA3ICgxMjgweDEwMjR4NjBIeikgKi8KIH07CiAKLVhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfQ2V0TENERExEZXMxMjgweDEwMjREYXRhW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9DZXRMQ0RETERlczEyODB4MTAyNERhdGFbXSA9CiB7CiAgICAgICAgIHsgICAgICAxMzY4LDEwMDgsNzUyLDcxMSAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgeyAgICAgIDEzNjgsMTAwOCw3MjksNjg4ICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xMzMyLDcgKzEzMDMsNyBAQAogICAgICAgICB7ICAgICAgMTgsMTM0NiwxMDY1LDEwMjQgICAgfSAgLyogMDcgKDEyODB4MTAyNHg2MEh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9FeHRMQ0REZXMxMjgweDEwMjREYXRhW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9FeHRMQ0REZXMxMjgweDEwMjREYXRhW10gPQogewogICAgICAgICB7ICAgICAgOSwxMzM3LDk4MSw5NDAgICAgfSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgeyAgICAgIDksMTMzNyw5MjYsODg0ICAgIH0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgYWxhbiwgMjAwMy8wOS8zMCAqLwpAQCAtMTM0NCw3ICsxMzE1LDcgQEAKICAgICAgICAgeyAgICAgIDksMTMzNywxMDY1LDEwMjQgICAgfSAgLyogOyAwNyAoMTI4MHgxMDI0eDYwSHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX1N0TENERGVzMTI4MHgxMDI0RGF0YVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfU3RMQ0REZXMxMjgweDEwMjREYXRhW10gPQogewogICAgICAgICB7ICAgICAgOSwxMzM3LDk3MCw5MDcgICAgfSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgeyAgICAgIDksMTMzNyw5MTcsODU0ICAgIH0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTEzNTYsNyArMTMyNyw3IEBACiAgICAgICAgIHsgICAgICA5LDEzMzcsMTA2NSwxMDI0ICAgIH0gIC8qIDsgMDcgKDEyODB4MTAyNHg2MEh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9DZXRMQ0REZXMxMjgweDEwMjREYXRhW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9DZXRMQ0REZXMxMjgweDEwMjREYXRhW10gPQogewogICAgICAgICB7ICAgICAgMTM2OCwxMDA4LDc1Miw3MTEgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICAxMzY4LDEwMDgsNzI5LDY4OCAgICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTM2OCw3ICsxMzM5LDcgQEAKICAgICAgICAgeyAgICAgIDksMTMzNywxMDY1LDEwMjQgICAgfSAgLyogMDcgKDEyODB4MTAyNHg2MEh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9TdExDRERMRGVzMTQwMHgxMDUwRGF0YVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfU3RMQ0RETERlczE0MDB4MTA1MERhdGFbXSA9CiB7CiAgICAgICAgIHsgICAgICAxOCwxNDY0LDAsMTA1MSAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgeyAgICAgIDE4LDE0NjQsMCwxMDUxICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xMzgxLDcgKzEzNTIsNyBAQAogICAgICAgICB7ICAgICAgMTgsMTQ2NCwwLDEwNTEgICAgfSAgLyogMDggKDE0MDB4MTA1MHg2MEh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9FeHRMQ0RETERlczE0MDB4MTA1MERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0V4dExDRERMRGVzMTQwMHgxMDUwRGF0YVtdID0KIHsKICAgICAgICAgeyAgICAgIDE4LDE0NjQsMCwxMDUxICAgIH0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7ICAgICAgMTgsMTQ2NCwwLDEwNTEgICAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTEzOTQsNyArMTM2NSw3IEBACiAgICAgICAgIHsgICAgICAxOCwxNDY0LDAsMTA1MSAgICB9ICAvKiAwOCAoMTQwMHgxMDUweDYwSHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX1N0TENERGVzMTQwMHgxMDUwRGF0YVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfU3RMQ0REZXMxNDAweDEwNTBEYXRhW10gPQogewogICAgICAgICB7ICAgICAgOSwxNDU1LDAsMTA1MSAgICAgfSwvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgeyAgICAgIDksMTQ1NSwwLDEwNTEgICAgIH0sLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTE0MDcsNyArMTM3OCw3IEBACiAgICAgICAgIHsgICAgICA5LDE0NTUsMCwxMDUxICAgICB9IC8qIDA4ICgxNDAweDEwNTB4NjBIeikgKi8KIH07CiAKLVhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfRXh0TENERGVzMTQwMHgxMDUwRGF0YVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfRXh0TENERGVzMTQwMHgxMDUwRGF0YVtdID0KIHsKICAgICAgICAgeyAgICAgIDksMTQ1NSwwLDEwNTEgICAgIH0sLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICA5LDE0NTUsMCwxMDUxICAgICB9LC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xNDIwLDcgKzEzOTEsNyBAQAogICAgICAgICB7ICAgICAgOSwxNDU1LDAsMTA1MSAgICAgfSAvKiAwOCAoMTQwMHgxMDUweDYwSHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0NldExDRERlczE0MDB4MTA1MERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0NldExDRERlczE0MDB4MTA1MERhdGFbXSA9CiB7CiAgICAgICAgIHsgICAgICAxMzA4LDEwNjgsNzgxLDc2NiAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgeyAgICAgIDEzMDgsMTA2OCw3ODEsNzY2ICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xNDMzLDcgKzE0MDQsNyBAQAogICAgICAgICB7ICAgICAgMTgsMTQ2NCwwLDEwNTEgICAgfSAvKiAwOCAoMTQwMHgxMDUweDYwSHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0NldExDRERlczE0MDB4MTA1MERhdGEyW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9DZXRMQ0REZXMxNDAweDEwNTBEYXRhMltdID0KIHsKICAgICAgICAgeyAgICAgIDAsMTQ0OCwwLDEwNTEgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICAwLDE0NDgsMCwxMDUxICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xNDQ0LDcgKzE0MTUsNyBAQAogCiAKIAotWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9FeHRMQ0RETERlczE2MDB4MTIwMERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0V4dExDRERMRGVzMTYwMHgxMjAwRGF0YVtdID0KIHsKIAl7ICAgICAgMTgsMTY4MiwwLDEyMDEgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICAxOCwxNjgyLDAsMTIwMSAgICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTQ1OCw3ICsxNDI5LDcgQEAKICAgICAgICAgeyAgICAgIDE4LDE2ODIsMCwxMjAxICAgIH0gIC8qIDA5ICgxNjAweDEyMDB4NjBIeikgKi8KIH07CiAKLVhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfU3RMQ0RETERlczE2MDB4MTIwMERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX1N0TENERExEZXMxNjAweDEyMDBEYXRhW10gPQogewogICAgICAgICB7ICAgICAgMTgsMTY4MiwxMTUwLDExMDEgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICAxOCwxNjgyLDEwODMsMTAzNCAgICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTQ3Miw3ICsxNDQzLDcgQEAKICAgICAgICAgeyAgICAgIDE4LDE2ODIsMCwxMjAxICAgIH0gLyogMDkgKDE2MDB4MTIwMHg2MEh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9FeHRMQ0REZXMxNjAweDEyMDBEYXRhW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9FeHRMQ0REZXMxNjAweDEyMDBEYXRhW10gPQogewogICAgICAgICB7ICAgICAgOSwxNjczLDAsMTIwMSAgICAgfSwvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgeyAgICAgIDksMTY3MywwLDEyMDEgICAgIH0sLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTE0ODYsNyArMTQ1Nyw3IEBACiAgICAgICAgIHsgICAgICA5LDE2NzMsMCwxMjAxICAgICB9IC8qIDA5ICgxNjAweDEyMDB4NjBIeikgKi8KIH07CiAKLVhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfU3RMQ0REZXMxNjAweDEyMDBEYXRhW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9TdExDRERlczE2MDB4MTIwMERhdGFbXSA9CiB7CiAJeyAgICAgIDksMTY3MywxMTUwLDExMDEgICAgIH0sLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICA5LDE2NzMsMTA4MywxMDM0ICAgICB9LC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xNTAwLDcgKzE0NzEsNyBAQAogICAgICAgICB7ICAgICAgOSwxNjczLDAsMTIwMSAgICAgfSAvKiAwOSAoMTYwMHgxMjAweDYwSHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YURlc1N0cnVjdDIgIFhHSV9Ob1NjYWxpbmdEZXNEYXRhW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QyICBYR0lfTm9TY2FsaW5nRGVzRGF0YVtdID0KIHsKICAgICAgICAgeyAgICAgOSw2NTcsNDQ4LDQwNSw5NiwyICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgeyAgICAgOSw2NTcsNDQ4LDM1NSw5NiwyICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTUxNSw3ICsxNDg2LDcgQEAKICAgICAgICAgeyAgICAgOSwxMzM3LDAsNzcxLDExMiw2ICB9ICAvKiAwQSAoMTI4MHg3Njh4NjBIeikgKi8KIH07CiAKLVhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfRXh0TENERGVzMTAyNHg3Njh4NzVEYXRhW109CQkvKiA7OzEwMjR4NzY4eDc1SHogKi8KK3N0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0V4dExDRERlczEwMjR4NzY4eDc1RGF0YVtdID0JCS8qIDs7MTAyNHg3Njh4NzVIeiAqLwogewogICAgICAgICB7OSwxMDQ5LDAsNzY5fSwgICAgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgezksMTA0OSwwLDc2OX0sICAgIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTE1MjYsNyArMTQ5Nyw3IEBACiAgICAgICAgIHs5LDEwNDksMCw3Njl9ICAgICAvKiA7IDA2ICgxMDI0eDc2OHg3NUh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9TdExDRERlczEwMjR4NzY4eDc1RGF0YVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfU3RMQ0REZXMxMDI0eDc2OHg3NURhdGFbXSA9CiB7CiAgICAgICAgIHs5LDEwNDksMCw3Njl9LCAgICAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7OSwxMDQ5LDAsNzY5fSwgICAgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTUzNyw3ICsxNTA4LDcgQEAKICAgICAgICAgezksMTA0OSwwLDc2OX0gICAgIC8qIDsgMDYgKDEwMjR4NzY4eDc1SHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0NldExDRERlczEwMjR4NzY4eDc1RGF0YVtdPQkvKiA7OzEwMjR4NzY4eDc1SHogKi8KK3N0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0NldExDRERlczEwMjR4NzY4eDc1RGF0YVtdID0JLyogOzsxMDI0eDc2OHg3NUh6ICovCiB7CiAgICAgICAgIHsxMTUyLDg1Niw2MjIsNTg3fSwgICAgIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsxMTUyLDg1Niw1OTcsNTYyfSwgICAgIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTE1NDgsNyArMTUxOSw3IEBACiAgICAgICAgIHs5LDEwNDksMCw3Njl9IAkgICAJLyogOyAwNiAoMTAyNHg3Njh4NzVIeikgKi8KIH07CiAKLVhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfRXh0TENERExEZXMxMjgweDEwMjR4NzVEYXRhW109ICAgICAgICAgLyogOzsxMjgweDEwMjR4NzVIeiAqLworc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfRXh0TENERExEZXMxMjgweDEwMjR4NzVEYXRhW10gPSAgICAgICAgIC8qIDs7MTI4MHgxMDI0eDc1SHogKi8KIHsKICAgICAgICAgezE4LDEzMTQsMCwxMDI1ICAgICB9LC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsxOCwxMzE0LDAsMTAyNSAgICAgfSwvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xNTYwLDcgKzE1MzEsNyBAQAogICAgICAgICB7MTgsMTMxNCwwLDEwMjUgICAgIH0vKiA7IDA3ICgxMjgweDEwMjR4NjBIeikgKi8KIH07CiAKLVhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfU3RMQ0RETERlczEyODB4MTAyNHg3NURhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX1N0TENERExEZXMxMjgweDEwMjR4NzVEYXRhW10gPQogewogICAgICAgICB7MTgsMTMxNCwwLDEwMjUgICAgIH0sLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgezE4LDEzMTQsMCwxMDI1ICAgICB9LC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTE1NzIsNyArMTU0Myw3IEBACiAgICAgICAgIHsxOCwxMzE0LDAsMTAyNSAgICAgfS8qIDsgMDcgKDEyODB4MTAyNHg2MEh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9DZXRMQ0RETERlczEyODB4MTAyNHg3NURhdGFbXT0JLyogMTI4MHgxMDI0eDc1SHogKi8KK3N0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0NldExDRERMRGVzMTI4MHgxMDI0eDc1RGF0YVtdID0JLyogMTI4MHgxMDI0eDc1SHogKi8KIHsKICAgICAgICAgezEzNjgsMTAwOCw3NTIsNzExfSwgICAgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgezEzNjgsMTAwOCw3MjksNjg4fSwgICAgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTU4NCw3ICsxNTU1LDcgQEAKICAgICAgICAgezE4LDEzMTQsMCwxMDI1fSAgICAgCSAgLyogOyAwNyAoMTI4MHgxMDI0eDc1SHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0V4dExDRERlczEyODB4MTAyNHg3NURhdGFbXT0gICAgICAgICAvKiA7OzEyODB4MTAyNHg3NUh6ICovCitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9FeHRMQ0REZXMxMjgweDEwMjR4NzVEYXRhW10gPSAgICAgICAgIC8qIDs7MTI4MHgxMDI0eDc1SHogKi8KIHsKIAl7OSwxMzA1LDAsMTAyNX0sLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgezksMTMwNSwwLDEwMjV9LC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTE1OTYsNyArMTU2Nyw3IEBACiAgICAgICAgIHs5LDEzMDUsMCwxMDI1fSAvKiA7IDA3ICgxMjgweDEwMjR4NjBIeikgKi8KIH07CiAKLVhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfU3RMQ0REZXMxMjgweDEwMjR4NzVEYXRhW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9TdExDRERlczEyODB4MTAyNHg3NURhdGFbXSA9CiB7CiAJezksMTMwNSwwLDEwMjV9LC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHs5LDEzMDUsMCwxMDI1fSwvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xNjA4LDcgKzE1NzksNyBAQAogICAgICAgICB7OSwxMzA1LDAsMTAyNX0gLyogOyAwNyAoMTI4MHgxMDI0eDYwSHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0NldExDRERlczEyODB4MTAyNHg3NURhdGFbXT0JLyogMTI4MHgxMDI0eDc1SHogKi8KK3N0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0NldExDRERlczEyODB4MTAyNHg3NURhdGFbXSA9CS8qIDEyODB4MTAyNHg3NUh6ICovCiB7CiAgICAgICAgIHsxMzY4LDEwMDgsNzUyLDcxMX0sICAgIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsxMzY4LDEwMDgsNzI5LDY4OH0sICAgIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTE2MjAsNyArMTU5MSw3IEBACiAgICAgICAgIHs5LDEzMDUsMCwxMDI1fSAgICAgCSAgLyogOyAwNyAoMTI4MHgxMDI0eDc1SHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YURlc1N0cnVjdDIgWEdJX05vU2NhbGluZ0Rlc0RhdGF4NzVbXT0gLyogU2NhbGluZyBMQ0QgNzVIeiAqLworc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0MiBYR0lfTm9TY2FsaW5nRGVzRGF0YXg3NVtdID0gLyogU2NhbGluZyBMQ0QgNzVIeiAqLwogewogCXs5LDY1Nyw0NDgsNDA1LDk2LDJ9LCAgIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHs5LDY1Nyw0NDgsMzU1LDk2LDJ9LCAgIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTE2MzUsNyArMTYwNiw3IEBACiAgICAgICAgIHs5LDEzMzcsMCw3NzEsMTEyLDZ9ICAgIC8qIDsgMEEgKDEyODB4NzY4eDYwSHopICovCiB9OwogCi1YR0kzMzBfVFZEYXRhU3RydWN0ICBYR0lfU3RQQUxEYXRhW109CitzdHJ1Y3QgWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX1N0UEFMRGF0YVtdID0KIHsKICB7ICAgIDEsICAgMSwgODY0LCA1MjUsMTI3MCwgNDAwLCAxMDAsICAgMCwgNzYwfSwKICB7ICAgIDEsICAgMSwgODY0LCA1MjUsMTI3MCwgMzUwLCAxMDAsICAgMCwgNzYwfSwKQEAgLTE2NDUsNyArMTYxNiw3IEBACiAgeyAgICAxLCAgIDEsIDg2NCwgNTI1LDEyNzAsIDYwMCwgIDUwLCAgIDAsICAgMH0KIH07CiAKLVhHSTMzMF9UVkRhdGFTdHJ1Y3QgIFhHSV9FeHRQQUxEYXRhW109CitzdHJ1Y3QgWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX0V4dFBBTERhdGFbXSA9CiB7CiAgeyAgICAyLCAgIDEsMTA4MCwgNDYzLDEyNzAsIDUwMCwgIDUwLCAgIDAsICA1MH0sCiAgeyAgIDE1LCAgIDcsMTE1MiwgNDEzLDEyNzAsIDUwMCwgIDUwLCAgIDAsICA1MH0sCkBAIC0xNjU3LDcgKzE2MjgsNyBAQAogIHsgICAgMywgICAyLDEwODAsIDYxOSwxMjcwLCA1NDAsIDQzOCwgICAwLCA0Mzh9CiB9OwogCi1YR0kzMzBfVFZEYXRhU3RydWN0ICBYR0lfU3ROVFNDRGF0YVtdPQorc3RydWN0IFhHSTMzMF9UVkRhdGFTdHJ1Y3QgIFhHSV9TdE5UU0NEYXRhW10gPQogewogIHsgICAgMSwgICAxLCA4NTgsIDUyNSwxMjcwLCA0MDAsICA1MCwgICAwLCA3NjB9LAogIHsgICAgMSwgICAxLCA4NTgsIDUyNSwxMjcwLCAzNTAsICA1MCwgICAwLCA2NDB9LApAQCAtMTY2Niw3ICsxNjM3LDcgQEAKICB7ICAgIDEsICAgMSwgODU4LCA1MjUsMTI3MCwgNDgwLCAgIDAsICAgMCwgNzYwfQogfTsKIAotWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX0V4dE5UU0NEYXRhW109CitzdHJ1Y3QgWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX0V4dE5UU0NEYXRhW10gPQogewogIHsgICAgOSwgIDUsIDEwMDEsIDQ1MywxMjcwLCA0MjAsIDE3MSwgICAwLCAxNzF9LAogIHsgICAxMiwgIDUsICA4NTgsIDQwMywxMjcwLCA0MjAsIDE3MSwgICAwLCAxNzF9LApAQCAtMTY3OSw3ICsxNjUwLDcgQEAKICB7ICAgIDMsICAgMiwxMDAxLCA1MzMsMTI3MCwgNDIwLCAgIDAsICAgMCwgICAwfQogfTsKIAotWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX1N0MUhpVFZEYXRhW109CitzdHJ1Y3QgWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX1N0MUhpVFZEYXRhW10gPQogewogICAgIAl7ICAgICAgICAxLDEsODkyLDU2Myw2OTAsODAwLDAsMCwwICAgICAgICAgICAgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICAgIDEsMSw4OTIsNTYzLDY5MCw3MDAsMCwwLDAgICAgICAgICAgICAgICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTY4OSw3ICsxNjYwLDcgQEAKICAgICAgICAgeyAgICAgICAgOCw1LDEwNTAsNjgzLDE2NDgsOTYwLDB4MTUwLDEsMCAgICAgICAgIH0gIC8qIDA1ICg0MDB4MzAwLDgwMHg2MDApICovCiB9OwogCi1YR0kzMzBfVFZEYXRhU3RydWN0ICBYR0lfU3QySGlUVkRhdGFbXT0KK3N0cnVjdCBYR0kzMzBfVFZEYXRhU3RydWN0ICBYR0lfU3QySGlUVkRhdGFbXSA9CiB7CiAgICAgICAgIHsgICAgICAgIDMsMSw4NDAsNDgzLDE2NDgsOTYwLDB4MDMyLDAsMCAgICAgICAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgeyAgICAgICAgMSwxLDg5Miw1NjMsNjkwLDcwMCwwLDAsMCAgICAgICAgICAgICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xNzAwLDcgKzE2NzEsNyBAQAogCiB9OwogCi1YR0kzMzBfVFZEYXRhU3RydWN0ICBYR0lfRXh0SGlUVkRhdGFbXT0KK3N0cnVjdCBYR0kzMzBfVFZEYXRhU3RydWN0ICBYR0lfRXh0SGlUVkRhdGFbXSA9CiB7CiAgICAgICAgIHsgICAgICAgIDYsMSw4NDAsNTYzLDE2MzIsOTYwLDAsMCwwICAgICAgICAgICAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgeyAgICAgICAgMywxLDk2MCw1NjMsMTYzMiw5NjAsMCwwLDAgICAgICAgICAgICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xNzE2LDcgKzE2ODcsNyBAQAogCiB9OwogCi1YR0kzMzBfVFZEYXRhU3RydWN0ICBYR0lfRXh0WVBiUHI1MjVpRGF0YVtdPQorc3RydWN0IFhHSTMzMF9UVkRhdGFTdHJ1Y3QgIFhHSV9FeHRZUGJQcjUyNWlEYXRhW10gPQogewogIHsgICAgOSwgIDUsIDEwMDEsIDQ1MywxMjcwLCA0MjAsIDE3MSwgICAwLCAxNzF9LAogIHsgICAxMiwgIDUsICA4NTgsIDQwMywxMjcwLCA0MjAsIDE3MSwgICAwLCAxNzF9LApAQCAtMTcyOSw3ICsxNzAwLDcgQEAKICB7ICAgIDMsICAgMiwxMDAxLCA1MzMsMTI1MCwgNDIwLCAgIDAsICAgMCwgICAwfQogfTsKIAotWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX1N0WVBiUHI1MjVpRGF0YVtdPQorc3RydWN0IFhHSTMzMF9UVkRhdGFTdHJ1Y3QgIFhHSV9TdFlQYlByNTI1aURhdGFbXSA9CiB7CiAgeyAgICAxLCAgIDEsIDg1OCwgNTI1LDEyNzAsIDQwMCwgIDUwLCAgIDAsIDc2MH0sCiAgeyAgICAxLCAgIDEsIDg1OCwgNTI1LDEyNzAsIDM1MCwgIDUwLCAgIDAsIDY0MH0sCkBAIC0xNzM4LDcgKzE3MDksNyBAQAogIHsgICAgMSwgICAxLCA4NTgsIDUyNSwxMjcwLCA0ODAsICAgMCwgICAwLCA3NjB9LAogfTsKIAotWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX0V4dFlQYlByNTI1cERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfVFZEYXRhU3RydWN0ICBYR0lfRXh0WVBiUHI1MjVwRGF0YVtdID0KIHsKICB7ICAgIDksICA1LCAxMDAxLCA0NTMsMTI3MCwgNDIwLCAxNzEsICAgMCwgMTcxfSwKICB7ICAgMTIsICA1LCAgODU4LCA0MDMsMTI3MCwgNDIwLCAxNzEsICAgMCwgMTcxfSwKQEAgLTE3NTEsNyArMTcyMiw3IEBACiAgeyAgICAzLCAgIDIsMTAwMSwgNTMzLDEyNzAsIDQyMCwgICAwLCAgIDAsICAgMH0KICB9OwogCi1YR0kzMzBfVFZEYXRhU3RydWN0ICBYR0lfU3RZUGJQcjUyNXBEYXRhW109CitzdHJ1Y3QgWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX1N0WVBiUHI1MjVwRGF0YVtdID0KIHsKICB7ICAgIDEsICAgMSwxNzE2LCA1MjUsMTI3MCwgNDAwLCAgNTAsICAgMCwgNzYwfSwKICB7ICAgIDEsICAgMSwxNzE2LCA1MjUsMTI3MCwgMzUwLCAgNTAsICAgMCwgNjQwfSwKQEAgLTE3NjAsNyArMTczMSw3IEBACiAgeyAgICAxLCAgIDEsMTcxNiwgNTI1LDEyNzAsIDQ4MCwgICAwLCAgIDAsIDc2MH0sCiB9OwogCi1YR0kzMzBfVFZEYXRhU3RydWN0ICBYR0lfRXh0WVBiUHI3NTBwRGF0YVtdPQorc3RydWN0IFhHSTMzMF9UVkRhdGFTdHJ1Y3QgIFhHSV9FeHRZUGJQcjc1MHBEYXRhW10gPQogewogIHsgICAgMywgICAxLCA5MzUsIDQ3MCwxMTMwLCA2ODAsICA1MCwgICAwLCAgIDB9LCAgICAgICAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICB7ICAgMjQsICAgNywgOTM1LCA0MjAsMTEzMCwgNjgwLCAgNTAsICAgMCwgICAwfSwgICAgICAgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTE3NzUsNyArMTc0Niw3IEBACiAgeyAgIDEwLCAgIDksMTMyMCwgODMwLDExMzAsIDY0MCwgIDUwLCAgIDAsICAgMH0KIH07CiAKLVhHSTMzMF9UVkRhdGFTdHJ1Y3QgIFhHSV9TdFlQYlByNzUwcERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfVFZEYXRhU3RydWN0ICBYR0lfU3RZUGJQcjc1MHBEYXRhW10gPQogewogIHsgICAgMSwgICAxLDE2NTAsIDc1MCwxMjgwLCA0MDAsICA1MCwgICAwLCA3NjB9LAogIHsgICAgMSwgICAxLDE2NTAsIDc1MCwxMjgwLCAzNTAsICA1MCwgICAwLCA2NDB9LApAQCAtMTc4NCw3ICsxNzU1LDcgQEAKICB7ICAgIDEsICAgMSwxNjUwLCA3NTAsMTI4MCwgNDgwLCAgIDAsICAgMCwgNzYwfSwKIH07CiAKLVVDSEFSIFhHSTMzMF9OVFNDVGltaW5nW10gPSB7Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9OVFNDVGltaW5nW10gPSB7CiAgIDB4MTcsMHgxZCwweDAzLDB4MDksMHgwNSwweDA2LDB4MGMsMHgwYywKICAgMHg5NCwweDQ5LDB4MDEsMHgwYSwweDA2LDB4MGQsMHgwNCwweDBhLAogICAweDA2LDB4MTQsMHgwZCwweDA0LDB4MGEsMHgwMCwweDg1LDB4MWIsCkBAIC0xNzk0LDcgKzE3NjUsNyBAQAogICAweDYwLDB4ODAsMHgxNCwweDkwLDB4OGMsMHg2MCwweDE0LDB4NTAsCiAgIDB4MDAsMHg0MCwweDQ0LDB4MDAsMHhkYiwweDAyLDB4M2IsMHgwMH07CiAKLVVDSEFSIFhHSTMzMF9QQUxUaW1pbmdbXSA9IHsKK3Vuc2lnbmVkIGNoYXIgWEdJMzMwX1BBTFRpbWluZ1tdID0gewogICAweDIxLDB4NUEsMHgzNSwweDZlLDB4MDQsMHgzOCwweDNkLDB4NzAsCiAgIDB4OTQsMHg0OSwweDAxLDB4MTIsMHgwNiwweDNlLDB4MzUsMHg2ZCwKICAgMHgwNiwweDE0LDB4M2UsMHgzNSwweDZkLDB4MDAsMHg0NSwweDJiLApAQCAtMTgwNCw3ICsxNzc1LDcgQEAKICAgMHg2MCwweDgwLDB4MTQsMHg5MCwweDhjLDB4NjAsMHgxNCwweDYzLAogICAweDAwLDB4NDAsMHgzZSwweDAwLDB4ZTEsMHgwMiwweDI4LDB4MDB9OwogCi1VQ0hBUiBYR0kzMzBfSGlUVkV4dFRpbWluZ1tdID0KK3Vuc2lnbmVkIGNoYXIgWEdJMzMwX0hpVFZFeHRUaW1pbmdbXSA9CiB7CiAgICAgICAweDJELDB4NjAsMHgyQywweDVGLDB4MDgsMHgzMSwweDNBLDB4NjQsCiAgICAgICAweDI4LDB4MDIsMHgwMSwweDNELDB4MDYsMHgzRSwweDM1LDB4NkQsCkBAIC0xODE4LDcgKzE3ODksNyBAQAogCiB9OwogCi1VQ0hBUiBYR0kzMzBfSGlUVlN0MVRpbWluZ1tdID0KK3Vuc2lnbmVkIGNoYXIgWEdJMzMwX0hpVFZTdDFUaW1pbmdbXSA9CiB7CiAgICAgICAweDMyLDB4NjUsMHgyQywweDVGLDB4MDgsMHgzMSwweDNBLDB4NjUsCiAgICAgICAweDI4LDB4MDIsMHgwMSwweDNELDB4MDYsMHgzRSwweDM1LDB4NkQsCkBAIC0xODMxLDcgKzE4MDIsNyBAQAogICAgICAgMHgwRSwweDAwLDB4ZmMsMHhmZiwweDJkLDB4MDAKIH07CiAKLVVDSEFSIFhHSTMzMF9IaVRWU3QyVGltaW5nW10gPQordW5zaWduZWQgY2hhciBYR0kzMzBfSGlUVlN0MlRpbWluZ1tdID0KIHsKICAgICAgIDB4MzIsMHg2NSwweDJDLDB4NUYsMHgwOCwweDMxLDB4M0EsMHg2NCwKICAgICAgIDB4MjgsMHgwMiwweDAxLDB4M0QsMHgwNiwweDNFLDB4MzUsMHg2RCwKQEAgLTE4NDQsNyArMTgxNSw3IEBACiAgICAgICAweDI3LDB4MDAsMHhGQywweGZmLDB4NmEsMHgwMAogfTsKIAotVUNIQVIgWEdJMzMwX0hpVFZUZXh0VGltaW5nW10gPQordW5zaWduZWQgY2hhciBYR0kzMzBfSGlUVlRleHRUaW1pbmdbXSA9CiB7CiAgICAgICAweDMyLDB4NjUsMHgyQywweDVGLDB4MDgsMHgzMSwweDNBLDB4NjUsCiAgICAgICAweDI4LDB4MDIsMHgwMSwweDNELDB4MDYsMHgzRSwweDM1LDB4NkQsCkBAIC0xODU3LDcgKzE4MjgsNyBAQAogICAgICAgMHgxMSwweDAwLDB4RkMsMHhGRiwweDMyLDB4MDAKIH07CiAKLVVDSEFSIFhHSTMzMF9ZUGJQcjc1MHBUaW1pbmdbXSA9Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9ZUGJQcjc1MHBUaW1pbmdbXSA9CiB7CiAgICAgICAweDMwLDB4MWQsMHhlOCwweDA5LDB4MDksMHhlZCwweDBjLDB4MGMsCiAgICAgICAweDk4LDB4MGEsMHgwMSwweDBjLDB4MDYsMHgwZCwweDA0LDB4MGEsCkBAIC0xODcwLDcgKzE4NDEsNyBAQAogICAgICAgMHgxMSwweDAwLDB4ZmMsMHhmZiwweDMyLDB4MDAKIH07CiAKLVVDSEFSIFhHSTMzMF9ZUGJQcjUyNXBUaW1pbmdbXSA9Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9ZUGJQcjUyNXBUaW1pbmdbXSA9CiB7CiAgICAgICAweDNFLDB4MTEsMHgwNiwweDA5LDB4MGIsMHgwYywweDBjLDB4MGMsCiAgICAgICAweDk4LDB4MGEsMHgwMSwweDBkLDB4MDYsMHgwZCwweDA0LDB4MGEsCkBAIC0xODgzLDcgKzE4NTQsNyBAQAogICAgICAgMHgxMSwweDAwLDB4RkMsMHhGRiwweDMyLDB4MDAKIH07CiAKLVVDSEFSIFhHSTMzMF9ZUGJQcjUyNWlUaW1pbmdbXSA9Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9ZUGJQcjUyNWlUaW1pbmdbXSA9CiB7CiAgICAgICAweDFCLDB4MjEsMHgwMywweDA5LDB4MDUsMHgwNiwweDBDLDB4MEMsCiAgICAgICAweDk0LDB4NDksMHgwMSwweDBBLDB4MDYsMHgwRCwweDA0LDB4MEEsCkBAIC0xODk3LDcgKzE4NjgsNyBAQAogCiB9OwogCi1VQ0hBUiBYR0kzMzBfSGlUVkdyb3VwM0RhdGFbXSA9Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9IaVRWR3JvdXAzRGF0YVtdID0KIHsKICAgICAgIDB4MDAsMHgxQSwweDIyLDB4NjMsMHg2MiwweDIyLDB4MDgsMHg1RiwKICAgICAgIDB4MDUsMHgyMSwweEIyLDB4QjIsMHg1NSwweDc3LDB4MkEsMHhBNiwKQEAgLTE5MDksNyArMTg4MCw3IEBACiAgICAgICAweDE4LDB4MDUsMHgxOCwweDA1LDB4NEMsMHhBOCwweDAxCiB9OwogCi1VQ0hBUiBYR0kzMzBfSGlUVkdyb3VwM1NpbXVbXSA9Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9IaVRWR3JvdXAzU2ltdVtdID0KIHsKICAgICAgIDB4MDAsMHgxQSwweDIyLDB4NjMsMHg2MiwweDIyLDB4MDgsMHg5NSwKICAgICAgIDB4REIsMHgyMCwweEI4LDB4QjgsMHg1NSwweDQ3LDB4MkEsMHhBNiwKQEAgLTE5MjEsNyArMTg5Miw3IEBACiAgICAgICAweDE4LDB4MDUsMHgxOCwweDA1LDB4NEMsMHhBOCwweDAxCiB9OwogCi1VQ0hBUiBYR0kzMzBfSGlUVkdyb3VwM1RleHRbXSA9Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9IaVRWR3JvdXAzVGV4dFtdID0KIHsKICAgICAgIDB4MDAsMHgxQSwweDIyLDB4NjMsMHg2MiwweDIyLDB4MDgsMHhBNywKICAgICAgIDB4RjUsMHgyMCwweENFLDB4Q0UsMHg1NSwweDQ3LDB4MkEsMHhBNiwKQEAgLTE5MzMsNyArMTkwNCw3IEBACiAgICAgICAweDE4LDB4MDUsMHgxOCwweDA1LDB4NEMsMHhBOCwweDAxCiB9OwogCi1VQ0hBUiBYR0kzMzBfUmVuNTI1cEdyb3VwM1tdID0KK3Vuc2lnbmVkIGNoYXIgWEdJMzMwX1JlbjUyNXBHcm91cDNbXSA9CiB7CiAgIDB4MDAsMHgxNCwweDE1LDB4MjUsMHg1NSwweDE1LDB4MGIsMHgxMywKICAgMHhCMSwweDQxLDB4NjIsMHg2MiwweEZGLDB4RjQsMHg0NSwweGE2LApAQCAtMTk0NSw3ICsxOTE2LDcgQEAKICAgMHgxYSwweDFGLDB4MjUsMHgyYSwweDRDLDB4QUEsMHgwMQogfTsKIAotVUNIQVIgWEdJMzMwX1Jlbjc1MHBHcm91cDNbXSA9Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9SZW43NTBwR3JvdXAzW10gPQogewogICAweDAwLDB4MTQsMHgxNSwweDI1LDB4NTUsMHgxNSwweDBiLDB4N2EsCiAgIDB4NTQsMHg0MSwweEU3LDB4RTcsMHhGRiwweEY0LDB4NDUsMHhhNiwKQEAgLTE5NTcsNyArMTkyOCw3IEBACiAgIDB4MTgsMHgxRCwweDIzLDB4MjgsMHg0QywweEFBLDB4MDEKIH07CiAKLVhHSV9QYW5lbERlbGF5VGJsU3RydWN0IFhHSTMzMF9QYW5lbERlbGF5VGJsW109CitzdHJ1Y3QgWEdJX1BhbmVsRGVsYXlUYmxTdHJ1Y3QgWEdJMzMwX1BhbmVsRGVsYXlUYmxbXSA9CiB7CiB7ezB4MDAsMHgwMH19LAoge3sweDAwLDB4MDB9fSwKQEAgLTE5NzcsNyArMTk0OCw3IEBACiB7ezB4MDAsMHgwMH19CiB9OwogCi1YR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgIFhHSTMzMF9MVkRTMzIweDQ4MERhdGFfMVtdPQorc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJMzMwX0xWRFMzMjB4NDgwRGF0YV8xW10gPQogewogIHs4NDgsIDQzMyw0MDAsNTI1fSwKICB7ODQ4LCAzODksNDAwLDUyNX0sCkBAIC0xOTkwLDcgKzE5NjEsNyBAQAogIHs4MDAsIDUyNSwxMDAwLCA2MzV9CiB9OwogCi1YR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgIFhHSTMzMF9MVkRTODAweDYwMERhdGFfMVtdPQorc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJMzMwX0xWRFM4MDB4NjAwRGF0YV8xW10gPQogewogIHs4NDgsIDQzMywxMDYwLCA2Mjl9LAogIHs4NDgsIDM4OSwxMDYwLCA2Mjl9LApAQCAtMjAwMyw3ICsxOTc0LDcgQEAKICB7ODAwLCA1MjUsMTAwMCwgNjM1fQogfTsKIAotWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0kzMzBfTFZEUzgwMHg2MDBEYXRhXzJbXT0KK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgIFhHSTMzMF9MVkRTODAweDYwMERhdGFfMltdID0KIHsKICB7MTA1NiwgNjI4LDEwNTYsIDYyOH0sCiAgezEwNTYsIDYyOCwxMDU2LCA2Mjh9LApAQCAtMjAxNiw3ICsxOTg3LDcgQEAKICB7ODAwLCA1MjUsMTAwMCwgNjM1fQogfTsKIAotWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzEwMjR4NzY4RGF0YV8xW109CitzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzEwMjR4NzY4RGF0YV8xW10gPQogewogIHsgOTYwICwgNDM4ICwgMTM0NCAsIDgwNiB9ICwJLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgeyA5NjAgLCAzODggLCAxMzQ0ICwgODA2IH0gLAkvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMjAyOCw3ICsxOTk5LDcgQEAKIH07CiAKIAotWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzEwMjR4NzY4RGF0YV8yW109CitzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzEwMjR4NzY4RGF0YV8yW10gPQogewogIHsxMzQ0LCA4MDYsMTM0NCwgODA2fSwKICB7MTM0NCwgODA2LDEzNDQsIDgwNn0sCkBAIC0yMDQxLDcgKzIwMTIsNyBAQAogIHs4MDAsIDUyNSwxMjgwLCA4MTN9CiB9OwogCi1YR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgIFhHSV9MVkRTMTI4MHgxMDI0RGF0YV8xW109CitzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzEyODB4MTAyNERhdGFfMVtdID0KIHsKICB7MTA0OCwgNDQyLDE2ODgsIDEwNjZ9LAogIHsxMDQ4LCAzOTIsMTY4OCwgMTA2Nn0sCkBAIC0yMDUzLDcgKzIwMjQsNyBAQAogIHsxNjg4LCAxMDY2LDE2ODgsIDEwNjZ9CiB9OwogCi1YR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgIFhHSV9MVkRTMTI4MHgxMDI0RGF0YV8yW109CitzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzEyODB4MTAyNERhdGFfMltdID0KIHsKICB7MTM0NCwgODA2LDEzNDQsIDgwNn0sCiAgezEzNDQsIDgwNiwxMzQ0LCA4MDZ9LApAQCAtMjA2Niw3ICsyMDM3LDcgQEAKICB7ODAwLCA1MjUsMTI4MCwgODEzfQogfTsKIC8qCi1YR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgIFhHSV9MVkRTMTI4MHg3NjhEYXRhXzFbXT0KK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgIFhHSV9MVkRTMTI4MHg3NjhEYXRhXzFbXSA9CiB7CiAgezc2OCw0MzgsMTQwOCw4MDZ9LAogIHs3NjgsMzg4LDE0MDgsODA2fSwKQEAgLTIwNzksNyArMjA1MCw3IEBACiAgezE0MDgsODA2LDE0MDgsODA2fQogfTsKIAotWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzEyODB4NzY4RGF0YV8yW109CitzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzEyODB4NzY4RGF0YV8yW10gPQogewogIHsxNDA4LCA4MDYsMTQwOCwgODA2fSwKICB7MTQwOCwgODA2LDE0MDgsIDgwNn0sCkBAIC0yMDkyLDcgKzIwNjMsNyBAQAogIHsxNDA4LCA4MDYsMTQwOCwgODA2fQogfTsKIAotWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzEyODB4NzY4TkRhdGFfMVtdPQorc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJX0xWRFMxMjgweDc2OE5EYXRhXzFbXSA9CiB7CiAgezcwNCwgNDM4LDEzNDQsIDgwNn0sCiAgezcwNCwgMzg4LDEzNDQsIDgwNn0sCkBAIC0yMTA1LDcgKzIwNzYsNyBAQAogIHsxMzQ0LCA4MDYsMTM0NCwgODA2fQogfTsKIAotWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzEyODB4NzY4TkRhdGFfMltdPQorc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJX0xWRFMxMjgweDc2OE5EYXRhXzJbXSA9CiB7CiAgezEzNDQsIDgwNiwxMzQ0LCA4MDZ9LAogIHsxMzQ0LCA4MDYsMTM0NCwgODA2fSwKQEAgLTIxMTgsNyArMjA4OSw3IEBACiAgezEzNDQsIDgwNiwxMzQ0LCA4MDZ9CiB9OwogCi1YR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgIFhHSV9MVkRTMTI4MHg3NjhTRGF0YV8xW109CitzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzEyODB4NzY4U0RhdGFfMVtdID0KIHsKICB7MTA0OCw0MzgsMTY4OCw4MDZ9LAogIHsxMDQ4LDM4OCwxNjg4LDgwNn0sCkBAIC0yMTMxLDcgKzIxMDIsNyBAQAogIHsxNjg4LDgwNiwxNjg4LDgwNn0KIH07CiAKLVhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJX0xWRFMxMjgweDc2OFNEYXRhXzJbXT0KK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgIFhHSV9MVkRTMTI4MHg3NjhTRGF0YV8yW10gPQogewogIHsxNjg4LDgwNiwxNjg4LDgwNn0sCiAgezE2ODgsODA2LDE2ODgsODA2fSwKQEAgLTIxNDQsNyArMjExNSw3IEBACiAgezE2ODgsODA2LDE2ODgsODA2fQogfTsKICovCi1YR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgIFhHSV9MVkRTMTQwMHgxMDUwRGF0YV8xW109CitzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzE0MDB4MTA1MERhdGFfMVtdID0KIHsKICB7OTI4LDQxNiwxNjg4LDEwNjZ9LAogIHs5MjgsMzY2LDE2ODgsMTA2Nn0sCkBAIC0yMTU3LDcgKzIxMjgsNyBAQAogIHsxNjg4LDEwNjYsMTY4OCwxMDY2fQogfTsKIAotWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzE0MDB4MTA1MERhdGFfMltdPQorc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJX0xWRFMxNDAweDEwNTBEYXRhXzJbXSA9CiB7CiAgezE2ODgsMTA2NiwxNjg4LDEwNjZ9LAogIHsxNjg4LDEwNjYsMTY4OCwxMDY2fSwKQEAgLTIxNzAsNyArMjE0MSw3IEBACiAgezE2ODgsMTA2NiwxNjg4LDEwNjZ9CiB9OwogCi1YR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxNjAweDEyMDBEYXRhXzFbXT0KK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxNjAweDEyMDBEYXRhXzFbXSA9CiB7ICAgICAgLyogOztbeWNjaGVuXSAxMi8wNS8wMiBMQ0RIVHhMQ0RWVD0yMDQ4eDEzMjAgKi8KICAgICAgICAgeyAgICAgICAgMTA4OCw1MjAsMjA0OCwxMzIwICAgICAgfSwvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgeyAgICAgICAgMTA4OCw0NzAsMjA0OCwxMzIwICAgICAgfSwvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMjE4NCw3ICsyMTU1LDcgQEAKICAgICAgICAgeyAgICAgICAgMjA0OCwxMzIwLDIwNDgsMTMyMCAgICAgfSAvKiAwOSAoMTYwMHgxMjAwKSAqLwogfTsKIAotWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTTm9TY2FsaW5nRGF0YVtdPQorc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEU05vU2NhbGluZ0RhdGFbXSA9CiB7CiAgICAgICAgIHsgICAgICAgIDgwMCw0NDksODAwLDQ0OSAgICAgICAgICAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgeyAgICAgICAgODAwLDQ0OSw4MDAsNDQ5ICAgICAgICAgICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0yMTk5LDcgKzIxNzAsNyBAQAogICAgICAgICB7ICAgICAgICAxNjg4LDgwNiwxNjg4LDgwNiAgICAgICAgICAgfSAgLyogMEEgKDEyODB4NzY4eDYwSHopICovCiB9OwogCi1YR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMDI0eDc2OERhdGFfMXg3NVtdPQorc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzEwMjR4NzY4RGF0YV8xeDc1W10gPQogewogCXs5NjAsNDM4LDEzMTIsODAwICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgezk2MCwzODgsMTMxMiw4MDAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0yMjExLDcgKzIxODIsNyBAQAogfTsKIAogCi1YR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMDI0eDc2OERhdGFfMng3NVtdPQorc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzEwMjR4NzY4RGF0YV8yeDc1W10gPQogewogICAgICAgICB7MTMxMiw4MDAsMTMxMiw4MDB9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7MTMxMiw4MDAsMTMxMiw4MDB9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0yMjIyLDcgKzIxOTMsNyBAQAogICAgICAgICB7MTMxMiw4MDAsMTMxMiw4MDB9LCAvKiA7IDA2ICg1MTJ4Mzg0LDEwMjR4NzY4KSAqLwogfTsKIAotWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTI4MHgxMDI0RGF0YV8xeDc1W109CitzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTI4MHgxMDI0RGF0YV8xeDc1W10gPQogewogICAgICAgICB7MTA0OCw0NDIsMTY4OCwxMDY2ICB9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7MTA0OCwzOTIsMTY4OCwxMDY2ICB9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0yMjM0LDcgKzIyMDUsNyBAQAogICAgICAgICB7MTY4OCwxMDY2LDE2ODgsMTA2NiB9LCAvKiA7IDA2OyAwNyAoNjQweDUxMiwxMjgweDEwMjQpICovCiB9OwogCi1YR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMjgweDEwMjREYXRhXzJ4NzVbXT0KK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMjgweDEwMjREYXRhXzJ4NzVbXSA9CiB7CiAgICAgICAgIHsxNjg4LDEwNjYsMTY4OCwxMDY2IH0sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsxNjg4LDEwNjYsMTY4OCwxMDY2IH0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTIyNDYsNyArMjIxNyw3IEBACiAgICAgICAgIHsxNjg4LDEwNjYsMTY4OCwxMDY2IH0sIC8qIDsgMDY7IDA3ICg2NDB4NTEyLDEyODB4MTAyNCkgKi8KIH07CiAKLVhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEU05vU2NhbGluZ0RhdGF4NzVbXT0KK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFNOb1NjYWxpbmdEYXRheDc1W10gPQogewogICAgICAgICB7ODAwLDQ0OSw4MDAsNDQ5ICAgICB9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7ODAwLDQ0OSw4MDAsNDQ5ICAgICB9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0yMjYxLDcgKzIyMzIsNyBAQAogICAgICAgICB7MTY4OCw4MDYsMTY4OCw4MDYgICB9LCAvKiA7IDBBICgxMjgweDc2OHg3NUh6KSAqLwogfTsKIAotWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTAyNHg3NjhEZXNfMVtdPQorc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzEwMjR4NzY4RGVzXzFbXSA9CiB7CiAJeyAgICAgIDAsMTA0OCwgICAwLCA3NzEgICAgIH0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7ICAgICAgMCwxMDQ4LCAgIDAsIDc3MSAgICAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTIyNzIsNyArMjI0Myw3IEBACiAgICAgICAgIHsgICAgICAwLDEwNDgsIDgwNSwgNzcwICAgICB9ICAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KIH0gOwogCi1YR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMDI0eDc2OERlc18yW109CitzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTAyNHg3NjhEZXNfMltdID0KIHsKICAgICAJeyAgICAgIDExNDIsIDg1NiwgNjIyLCA1ODcgICAgIH0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7ICAgICAgMTE0MiwgODU2LCA1OTcsIDU2MiAgICAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTIyODMsNyArMjI1NCw3IEBACiAgICAgICAgIHsgICAgICAgICAwLDEwNDgsIDgwNSwgNzcxICAgICB9ICAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KIH07CiAKLVhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzEwMjR4NzY4RGVzXzNbXT0KK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMDI0eDc2OERlc18zW10gPQogewogICAgIAl7ICAgICAgIDMyMCwgIDI0LCA2MjIsIDU4NyAgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICAgMzIwLCAgMjQsIDU5NywgNTYyICAgICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMjI5Miw3ICsyMjYzLDcgQEAKICAgICAgICAgeyAgICAgICAzMjAsICAyNCwgNzIyLCA2ODcgICAgIH0gIC8qIDA0ICg2NDB4NDgweDYwSHopICovCiB9OwogCi1YR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMjgweDEwMjREZXNfMVtdPQorc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzEyODB4MTAyNERlc18xW10gPQogewogICAgIAl7ICAgICAgMCwxMzI4LCAgICAwLCAxMDI1ICAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgeyAgICAgIDAsMTMyOCwgICAgMCwgMTAyNSAgICAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTIzMDUsNyArMjI3Niw3IEBACiB9OwogCiAgLyogVGhlIERpc3BsYXkgc2V0dGluZyBmb3IgREUgTW9kZSBQYW5lbCAqLwotWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTI4MHgxMDI0RGVzXzJbXT0KK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMjgweDEwMjREZXNfMltdID0KIHsKICAgICAJeyAgICAgIDEzNjgsMTAwOCw3NTIsNzExICAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgeyAgICAgIDEzNjgsMTAwOCw3MjksNjg4ICAgICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMjMxNyw3ICsyMjg4LDcgQEAKICAgICAgICAgeyAgICAgIDAwMDAsMTMyOCwwLDEwMjUgICAgIH0gIC8qIDA3ICgxMjgweDEwMjR4NjBIeikgKi8KIH07CiAKLVhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzE0MDB4MTA1MERlc18xW109CitzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTQwMHgxMDUwRGVzXzFbXSA9CiB7CiAgICAgCXsgICAgICAwLDE0NDgsMCwxMDUxICAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgeyAgICAgIDAsMTQ0OCwwLDEwNTEgICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0yMzMwLDcgKzIzMDEsNyBAQAogICAgICAgICB7ICAgICAgMCwxNDQ4LDAsMTA1MSAgICAgfSAgLyogMDggKDE0MDB4MTA1MHg2MEh6KSAqLwogfTsKIAotWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTQwMHgxMDUwRGVzXzJbXT0KK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxNDAweDEwNTBEZXNfMltdID0KIHsKICAgICAJeyAgICAgIDEzMDgsMTA2OCwgNzgxLCA3NjYgICAgIH0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7ICAgICAgMTMwOCwxMDY4LCA3ODEsIDc2NiAgICAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTIzNDMsNyArMjMxNCw3IEBACiAgICAgICAgIHsgICAgICAwLDE0NDgsMCwxMDUxICAgICB9ICAvKiAwOCAoMTQwMHgxMDUweDYwSHopICovCiB9OwogCi1YR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxNjAweDEyMDBEZXNfMVtdPQorc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzE2MDB4MTIwMERlc18xW10gPQogewogICAgIAl7ICAgICAgMCwxNjY0LDAsMTIwMSAgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICAwLDE2NjQsMCwxMjAxICAgICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMjM1OSw3ICsyMzMwLDcgQEAKIAogCiAKLVhHSTMzMF9MQ0REYXRhRGVzU3RydWN0MiAgWEdJX0xWRFNOb1NjYWxpbmdEZXNEYXRhW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QyICBYR0lfTFZEU05vU2NhbGluZ0Rlc0RhdGFbXSA9CiB7CiAgICAgCXsgICAgIDAsIDY0OCwgNDQ4LCA0MDUsICA5NiwgICAyICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgIDAsIDY0OCwgNDQ4LCAzNTUsICA5NiwgICAyICAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTIzNzQsNyArMjM0NSw3IEBACiAgICAgICAgIHsgICAgIDAsMTMyOCwwLDA3NzEsIDExMiwgICA2ICAgfSAgLyogMEEgKDEyODB4NzY4eDYwSHopICovCiB9OwogCi1YR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMDI0eDc2OERlc18xeDc1W109CQkJLyogOyAxMDI0eDc2OCBGdWxsLXNjcmVlbiAqLworc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzEwMjR4NzY4RGVzXzF4NzVbXSA9CQkJLyogOyAxMDI0eDc2OCBGdWxsLXNjcmVlbiAqLwogewogICAgICAgICB7MCwxMDQwLDAsNzY5fSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgezAsMTA0MCwwLDc2OX0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTIzODUsNyArMjM1Niw3IEBACiAgICAgICAgIHswLDEwNDAsMCw3Njl9IC8qIDsgMDYgKDEwMjR4NzY4eDc1SHopICovCiB9OwogCi1YR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMDI0eDc2OERlc18yeDc1W109IC8qIDsgMTAyNHg3NjggY2VudGVyLXNjcmVlbiAoRW5oLiBNb2RlKSAqLworc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzEwMjR4NzY4RGVzXzJ4NzVbXSA9IC8qIDsgMTAyNHg3NjggY2VudGVyLXNjcmVlbiAoRW5oLiBNb2RlKSAqLwogewogICAgICAgICB7MTE0MiwgODU2LDYyMiw1ODcgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsxMTQyLCA4NTYsNTk3LDU2MiB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMjM5Niw3ICsyMzY3LDcgQEAKICAgICAgICAgeyAgIDAsMTA0OCw4MDUsNzcxIH0gIC8qIDA2ICgxMDI0eDc2OHg2MEh6KSAqLwogfTsKIAotWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTAyNHg3NjhEZXNfM3g3NVtdPSAvKiA7IDEwMjR4NzY4IGNlbnRlci1zY3JlZW4gKFN0Lk1vZGUpICovCitzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTAyNHg3NjhEZXNfM3g3NVtdID0gLyogOyAxMDI0eDc2OCBjZW50ZXItc2NyZWVuIChTdC5Nb2RlKSAqLwogewogICAgICAgICB7MzIwLDI0LDYyMiw1ODcgIH0sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHszMjAsMjQsNTk3LDU2MiAgfSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMjQwNSw3ICsyMzc2LDcgQEAKICAgICAgICAgezMyMCwyNCw3MjIsNjg3ICB9IC8qIDsgMDQgKDY0MHg0ODB4NjBIeikgKi8KIH07CiAKLVhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzEyODB4MTAyNERlc18xeDc1W109CitzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTI4MHgxMDI0RGVzXzF4NzVbXSA9CiB7CiAgICAgICAgIHswLDEyOTYsMCwxMDI1fSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgezAsMTI5NiwwLDEwMjV9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0yNDE4LDcgKzIzODksNyBAQAogfTsKIAogLyogVGhlIERpc3BsYXkgc2V0dGluZyBmb3IgREUgTW9kZSBQYW5lbCAqLwotWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTI4MHgxMDI0RGVzXzJ4NzVbXT0gICAvKiBbeWNjaGVuXSAwMi8xOC8wMyBTZXQgREUgYXMgZGVmYXVsdCAqLworc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzEyODB4MTAyNERlc18yeDc1W10gPSAgIC8qIFt5Y2NoZW5dIDAyLzE4LzAzIFNldCBERSBhcyBkZWZhdWx0ICovCiB7CiAgICAgICAgIHsxMzY4LDk3Niw3NTIsNzExIH0sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsxMzY4LDk3Niw3MjksNjg4IH0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTI0MzAsNyArMjQwMSw3IEBACiAgICAgICAgIHswLDEyOTYsMCwxMDI1ICAgIH0gLyogOyAwNyAoMTI4MHgxMDI0eDc1SHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YURlc1N0cnVjdDIgWEdJX0xWRFNOb1NjYWxpbmdEZXNEYXRheDc1W109ICAvKiBTY2FsaW5nIExDRCA3NUh6ICovCitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QyIFhHSV9MVkRTTm9TY2FsaW5nRGVzRGF0YXg3NVtdID0gIC8qIFNjYWxpbmcgTENEIDc1SHogKi8KIHsKICAgICAgICB7IDAsNjQ4LDQ0OCw0MDUsOTYsMiAgfSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICB7IDAsNjQ4LDQ0OCwzNTUsOTYsMiAgfSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMjQ0NSw3ICsyNDE2LDcgQEAKICAgICAgICB7IDAsMTMyOCwwLDc3MSwxMTIsNiAgfSAgLyogOyAwQSAoMTI4MHg3Njh4NzVIeikgKi8KIH07CiAKLVhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJMzMwX0xWRFM2NDB4NDgwRGF0YV8xW109CitzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0kzMzBfTFZEUzY0MHg0ODBEYXRhXzFbXSA9CiB7CiAgezgwMCwgNDQ5LCA4MDAsIDQ0OX0sCiAgezgwMCwgNDQ5LCA4MDAsIDQ0OX0sCkBAIC0yNDU4LDcgKzI0MjksNyBAQAogIHsxMDU2LCA2MjgsMTA1NiwgNjI4fQogfTsKIAotWEdJMzMwX0NIVFZEYXRhU3RydWN0ICBYR0lfQ0hUVlVOVFNDRGF0YVtdPQorc3RydWN0IFhHSTMzMF9DSFRWRGF0YVN0cnVjdCAgWEdJX0NIVFZVTlRTQ0RhdGFbXSA9CiB7CiAgezg0MCwgNjAwLCA4NDAsIDYwMH0sCiAgezg0MCwgNjAwLCA4NDAsIDYwMH0sCkBAIC0yNDY4LDcgKzI0MzksNyBAQAogIHsxMDY0LCA3NTAsMTA2NCwgNzUwfQogfTsKIAotWEdJMzMwX0NIVFZEYXRhU3RydWN0ICBYR0lfQ0hUVk9OVFNDRGF0YVtdPQorc3RydWN0IFhHSTMzMF9DSFRWRGF0YVN0cnVjdCAgWEdJX0NIVFZPTlRTQ0RhdGFbXSA9CiB7CiAgezg0MCwgNTI1LCA4NDAsIDUyNX0sCiAgezg0MCwgNTI1LCA4NDAsIDUyNX0sCkBAIC0yNDc4LDcgKzI0NDksNyBAQAogIHsxMDQwLCA3MDAsMTA0MCwgNzAwfQogfTsKIAotWEdJMzMwX0NIVFZEYXRhU3RydWN0ICBYR0lfQ0hUVlVQQUxEYXRhW109CitzdHJ1Y3QgWEdJMzMwX0NIVFZEYXRhU3RydWN0ICBYR0lfQ0hUVlVQQUxEYXRhW10gPQogewogIHsxMDA4LCA2MjUsMTAwOCwgNjI1fSwKICB7MTAwOCwgNjI1LDEwMDgsIDYyNX0sCkBAIC0yNDg4LDcgKzI0NTksNyBAQAogIHs5MzYsIDgzNiwgOTM2LCA4MzZ9CiB9OwogCi1YR0kzMzBfQ0hUVkRhdGFTdHJ1Y3QgIFhHSV9DSFRWT1BBTERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfQ0hUVkRhdGFTdHJ1Y3QgIFhHSV9DSFRWT1BBTERhdGFbXSA9CiB7CiAgezEwMDgsIDYyNSwxMDA4LCA2MjV9LAogIHsxMDA4LCA2MjUsMTAwOCwgNjI1fSwKQEAgLTI0OTgsNyArMjQ2OSw3IEBACiAgezk2MCwgNzUwLCA5NjAsIDc1MH0KIH07CiAKLVhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0ICBYR0lfTFZEU0NSVDExMDI0eDc2OF8xX0hbXT0KK3N0cnVjdCBYR0lfTFZEU0NSVDFIRGF0YVN0cnVjdCAgWEdJX0xWRFNDUlQxMTAyNHg3NjhfMV9IW10gPQogewogCSAgICAgICAgLyogQ1IwMCxDUjAyLENSMDMsQ1IwNCxDUjA1LFNSMEIsU1IwQyxTUjBFICovCiAgICAgICAgICAgICAgICAge3sgICAgICAweDRCLDB4MjcsMHg4RiwweDMyLDB4MUIsMHgwMCwweDQ1LDB4MDAgfX0sIC8qIDAwICgzMjB4KSAqLwpAQCAtMjUxMSw3ICsyNDgyLDcgQEAKICAgICAgICAgICAgICAgICB7eyAgICAgIDB4QTMsMHg3RiwweDg3LDB4ODYsMHg5NywweDAwLDB4MDIsMHgwMCB9fSAvKiAwNyAoMTAyNHgpICovCiB9OwogCi1YR0lfTFZEU0NSVDFIRGF0YVN0cnVjdCAgWEdJX0xWRFNDUlQxMTI4MHgxMDI0XzFfSFtdPQorc3RydWN0IFhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0ICBYR0lfTFZEU0NSVDExMjgweDEwMjRfMV9IW10gPQogewogCQkvKiBDUjAwLENSMDIsQ1IwMyxDUjA0LENSMDUsU1IwQixTUjBDLFNSMEUgKi8KICAgICAgICAgICAgICAgICB7eyAgICAgIDB4NTYsMHgyNywweDlBLDB4MzAsMHgxRSwweDAwLDB4MDUsMHgwMCB9fSwgLyogMDAgKDMyMHgpICovCkBAIC0yNTI1LDcgKzI0OTYsNyBAQAogICAgICAgICAgICAgICAgIHt7ICAgICAgMHhDRSwweDlGLDB4OTIsMHhBOCwweDE2LDB4MDAsMHgwNywweDAwIH19IC8qIDA4ICgxMjgweCkgKi8KIH07CiAKLVhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0ICBYR0lfTFZEU0NSVDExMDI0eDc2OF8yX0hbXT0KK3N0cnVjdCBYR0lfTFZEU0NSVDFIRGF0YVN0cnVjdCAgWEdJX0xWRFNDUlQxMTAyNHg3NjhfMl9IW10gPQogewogCQkvKiBDUjAwLENSMDIsQ1IwMyxDUjA0LENSMDUsU1IwQixTUjBDLFNSMEUgKi8KICAgICAgICAgICAgICAgICB7eyAgICAgIDB4NjMsMHgyNywweDg3LDB4M0IsMHg4QywweDAwLDB4MDEsMHgwMCB9fSwgLyogMDAgKDMyMHgpICovCkBAIC0yNTM4LDcgKzI1MDksNyBAQAogICAgICAgICAgICAgICAgIHt7ICAgICAgMHhBMywweDdGLDB4ODcsMHg4NiwweDk3LDB4MDAsMHgwMiwweDAwIH19IC8qIDA3ICgxMDI0eCkgKi8KIH07CiAKLVhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0ICBYR0lfTFZEU0NSVDExMjgweDEwMjRfMl9IW109CitzdHJ1Y3QgWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QgIFhHSV9MVkRTQ1JUMTEyODB4MTAyNF8yX0hbXSA9CiB7CiAgICAgICAgICAgICAgICAgLyogQ1IwMCxDUjAyLENSMDMsQ1IwNCxDUjA1LFNSMEIsU1IwQyxTUjBFICovCiAgICAgICAgICAgICAgICAge3sgICAgICAweDdFLDB4M0IsMHg5QSwweDQ0LDB4MTIsMHgwMCwweDAxLDB4MDAgfX0sIC8qIDAwICgzMjB4KSAqLwpAQCAtMjU1Miw3ICsyNTIzLDcgQEAKICAgICAgICAgICAgICAgICB7eyAgICAgIDB4Q0UsMHg5RiwweDkyLDB4QTgsMHgxNiwweDAwLDB4MDcsMHgwMCB9fSAvKiAwOCAoMTI4MHgpICovCiB9OwogCi1YR0lfTFZEU0NSVDFIRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExNDAweDEwNTBfMV9IW109CitzdHJ1Y3QgWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTQwMHgxMDUwXzFfSFtdID0KIHsgICAgICAgICAgICAgICAvKiBDUjAwLENSMDIsQ1IwMyxDUjA0LENSMDUsU1IwQixTUjBDLFNSMEUgKi8KICAgICAgICAgICAgICAgICB7eyAgICAgIDB4NDcsMHgyNywweDhCLDB4MkMsMHgxQSwweDAwLDB4MDUsMHgwMCB9fSwgLyogMDAgKDMyMHgpICovCiAgICAgICAgICAgICAgICAge3sgICAgICAweDQ3LDB4MjcsMHg4QiwweDMwLDB4MUUsMHgwMCwweDA1LDB4MDAgfX0sIC8qIDAxICgzNjB4KSAqLwpAQCAtMjU2Niw3ICsyNTM3LDcgQEAKICAgICAgICAgICAgICAgICB7eyAgICAgIDB4Q0UsMHhBRSwweDkyLDB4QjMsMHgwMSwweDAwLDB4MDMsMHgwMCB9fSAvKiAwOSAoMTQwMHgpICovCiB9OwogCi1YR0lfTFZEU0NSVDFIRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExNDAweDEwNTBfMl9IW109CitzdHJ1Y3QgWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTQwMHgxMDUwXzJfSFtdID0KIHsgICAgICAgICAgICAgICAvKiBDUjAwLENSMDIsQ1IwMyxDUjA0LENSMDUsU1IwQixTUjBDLFNSMEUgKi8KICAgICAgICAgICAgICAgICB7eyAgICAgIDB4NzYsMHgzRiwweDgzLDB4NDUsMHg4QywweDAwLDB4NDEsMHgwMCB9fSwgLyogMDAgKDMyMHgpICovCiAgICAgICAgICAgICAgICAge3sgICAgICAweDc2LDB4M0YsMHg4MywweDQ1LDB4OEMsMHgwMCwweDQxLDB4MDAgfX0sIC8qIDAxICgzNjB4KSAqLwpAQCAtMjU4MCw3ICsyNTUxLDcgQEAKICAgICAgICAgICAgICAgICB7eyAgICAgIDB4Q0UsMHhBRSwweDkyLDB4QkMsMHgwQSwweDAwLDB4MDMsMHgwMCB9fSAvKiAwOSAoMTQwMHgpICovCiB9OwogCi1YR0lfTFZEU0NSVDFIRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExNjAweDEyMDBfMV9IW109CitzdHJ1Y3QgWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTYwMHgxMjAwXzFfSFtdID0KIC8qIDszMDJsdiBjaGFubmVsQSBbeWNjaGVuXSAxMi8wNS8wMiBMQ0RIVD0yMDQ4ICovCiB7ICAgLyogOyBDUjAwLENSMDIsQ1IwMyxDUjA0LENSMDUsU1IwQixTUjBDLFNSMEUgKi8KICAgICAgICAgICAgICAgICB7eyAgICAgIDB4NUIsMHgyNywweDlGLDB4MzIsMHgwQSwweDAwLDB4MDEsMHgwMCB9fSwvKiAwMCAoMzIweCkgKi8KQEAgLTI1OTYsNyArMjU2Nyw3IEBACiAJCXt7ICAgICAgMHhGQiwweEM3LDB4OUYsMHhDOSwweDgxLDB4MDAsMHgwNywweDAwIH19IC8qIDBBICgxNjAweCkgKi8KIH07CiAKLVhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzFfVltdPQorc3RydWN0IFhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzFfVltdID0KIHsgICAgICAgICAgICAgICAvKiBDUjA2LENSMDcsQ1IxMCxDUjExLENSMTUsQ1IxNixTUjBBK0NSMDkoNS0+NykgKi8KICAgICAgICAgICAgICAgICB7eyAgICAgIDB4OTcsMHgxRiwweDYwLDB4ODcsMHg1RCwweDgzLDB4MTAgICAgICB9fSwgLyogMDAgKHgzNTApICovCiAgICAgICAgICAgICAgICAge3sgICAgICAweEI0LDB4MUYsMHg5MiwweDg5LDB4OEYsMHhCNSwweDMwICAgICAgfX0sIC8qIDAxICh4NDAwKSAqLwpAQCAtMjYwNSw3ICsyNTc2LDcgQEAKICAgICAgICAgICAgICAgICB7eyAgICAgIDB4MjQsMHhGNSwweDAyLDB4ODgsMHhGRiwweDI1LDB4OTAgICAgICB9fSAvKiAwNCAoeDc2OCkgKi8KIH07CiAKLVhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzJfVltdPQorc3RydWN0IFhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzJfVltdID0KIHsgICAgICAgICAgICAgICAvKiBDUjA2LENSMDcsQ1IxMCxDUjExLENSMTUsQ1IxNixTUjBBICovCiAgICAgICAgICAgICAgICAge3sgICAgICAweDI0LDB4QkIsMHgzMSwweDg3LDB4NUQsMHgyNSwweDMwICAgICAgfX0sIC8qIDAwICh4MzUwKSAqLwogICAgICAgICAgICAgICAgIHt7ICAgICAgMHgyNCwweEJCLDB4NEEsMHg4MCwweDhGLDB4MjUsMHgzMCAgICAgIH19LCAvKiAwMSAoeDQwMCkgKi8KQEAgLTI2MTQsNyArMjU4NSw3IEBACiAgICAgICAgICAgICAgICAge3sgICAgICAweDI0LDB4RjUsMHgwMiwweDg4LDB4RkYsMHgyNSwweDkwICAgICAgfX0gLyogMDQgKHg3NjgpICovCiB9OwogCi1YR0lfTFZEU0NSVDFWRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExMjgweDEwMjRfMV9WW109CitzdHJ1Y3QgWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTI4MHgxMDI0XzFfVltdID0KIHsgICAgICAgICAgICAgICAvKiBDUjA2LENSMDcsQ1IxMCxDUjExLENSMTUsQ1IxNixTUjBBICovCiAgICAgICAgICAgICAgICAge3sgICAgICAgMHg4NiwweDFGLDB4NUUsMHg4MiwweDVELDB4ODcsMHgwMCAgICAgfX0sIC8qIDAwICh4MzUwKSAqLwogICAgICAgICAgICAgICAgIHt7ICAgICAgIDB4QjgsMHgxRiwweDkwLDB4ODQsMHg4RiwweEI5LDB4MzAgICAgIH19LCAvKiAwMSAoeDQwMCkgKi8KQEAgLTI2MjQsNyArMjU5NSw3IEBACiAgICAgICAgICAgICAgICAge3sgICAgICAgMHgyOCwweDVBLDB4MTMsMHg4NywweEZGLDB4MjksMHhBOSAgICAgfX0gLyogMDUgKHgxMDI0KSAqLwogfTsKIAotWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTI4MHgxMDI0XzJfVltdPQorc3RydWN0IFhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEyODB4MTAyNF8yX1ZbXSA9CiB7ICAgICAgICAgICAgICAgLyogQ1IwNixDUjA3LENSMTAsQ1IxMSxDUjE1LENSMTYsU1IwQSAqLwogICAgICAgICAgICAgICAgIHt7ICAgICAgMHgyOCwweEQyLDB4QUYsMHg4MywweEFFLDB4RDgsMHhBMSAgICAgIH19LCAvKiAwMCAoeDM1MCkgKi8KICAgICAgICAgICAgICAgICB7eyAgICAgIDB4MjgsMHhEMiwweEM4LDB4OEMsMHhDNywweEYyLDB4ODEgICAgICB9fSwgLyogMDEgKHg0MDApICovCkBAIC0yNjM0LDcgKzI2MDUsNyBAQAogICAgICAgICAgICAgICAgIHt7ICAgICAgMHgyOCwweDVBLDB4MTMsMHg4NywweEZGLDB4MjksMHhBOSAgICAgIH19IC8qIDA1ICh4MTAyNCkgKi8KIH07CiAKLVhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTE0MDB4MTA1MF8xX1ZbXT0KK3N0cnVjdCBYR0lfTFZEU0NSVDFWRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExNDAweDEwNTBfMV9WW10gPQogeyAgICAgICAgICAgICAgIC8qIENSMDYsQ1IwNyxDUjEwLENSMTEsQ1IxNSxDUjE2LFNSMEEgKi8KICAgICAgICAgICAgICAgICB7eyAgICAgIDB4NkMsMHgxRiwweDYwLDB4ODQsMHg1RCwweDZELDB4MTAgICAgICB9fSwgLyogMDAgKHgzNTApICovCiAgICAgICAgICAgICAgICAge3sgICAgICAweDlFLDB4MUYsMHg5MywweDg2LDB4OEYsMHg5RiwweDMwICAgICAgfX0sIC8qIDAxICh4NDAwKSAqLwpAQCAtMjY0NSw3ICsyNjE2LDcgQEAKICAgICAgICAgICAgICAgICB7eyAgICAgIDB4MjgsMHgxMCwweDFBLDB4ODAsMHgxOSwweDI5LDB4MEYgICAgICB9fSAvKiAwNiAoeDEwNTApICovCiB9OwogCi1YR0lfTFZEU0NSVDFWRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExNDAweDEwNTBfMl9WW109CitzdHJ1Y3QgWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTQwMHgxMDUwXzJfVltdID0KIHsgICAgICAgICAgICAgIC8qIENSMDYsQ1IwNyxDUjEwLENSMTEsQ1IxNSxDUjE2LFNSMEEgKi8KICAgICAgICAgICAgICAgICB7eyAgICAgIDB4MjgsMHg5MiwweEI2LDB4ODMsMHhCNSwweENGLDB4ODEgICAgICB9fSwgLyogMDAgKHgzNTApICovCiAgICAgICAgICAgICAgICAge3sgICAgICAweDI4LDB4OTIsMHhENSwweDgyLDB4RDQsMHhFRSwweDgxICAgICAgfX0sIC8qIDAxICh4NDAwKSAqLwpAQCAtMjY1Niw3ICsyNjI3LDcgQEAKICAgICAgICAgICAgICAgICB7eyAgICAgIDB4MjgsMHgxMCwweDFBLDB4ODcsMHgxOSwweDI5LDB4OEYgICAgICB9fSAvKiAwNiAoeDEwNTApICovCiB9OwogCi1YR0lfTFZEU0NSVDFWRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExNjAweDEyMDBfMV9WW109CitzdHJ1Y3QgWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTYwMHgxMjAwXzFfVltdID0KIHsKICAgICAgICAgICAgICAgIC8qIENSMDYsQ1IwNyxDUjEwLENSMTEsQ1IxNSxDUjE2LFNSMEErQ1IwOSg1LT43KSAqLwogICAgICAgICAgICAgICAgIHt7ICAgICAgMHhkNCwweDFGLDB4ODEsMHg4NCwweDVELDB4ZDUsMHgxMCAgICAgIH19LCAvKiAwMCAoeDM1MCkgKi8KQEAgLTI2NjksNyArMjY0MCw3IEBACiAgICAgICAgICAgICAgICAge3sgICAgICAweDI2LDB4MTEsMHhkMywweDg2LDB4YUYsMHgyNywweDNmICAgICAgfX0gLyogMDcgKHgxMjAwKSAqLwogfTsKIAotWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTAyNHg3NjhfMV9IeDc1W109CitzdHJ1Y3QgWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTAyNHg3NjhfMV9IeDc1W10gPQogeyAJLyogQ1IwMCxDUjAyLENSMDMsQ1IwNCxDUjA1LFNSMEIsU1IwQyxTUjBFICovCiAgICAge3sgICAgICAweDRCLDB4MjcsMHg4RiwweDMyLDB4MUIsMHgwMCwweDQ1LDB4MDAgfX0sLyogOyAwMCAoMzIweCkgKi8KICAgICB7eyAgICAgIDB4NEIsMHgyNywweDhGLDB4MkIsMHgwMywweDAwLDB4NDQsMHgwMCB9fSwvKiA7IDAxICgzNjB4KSAqLwpAQCAtMjY4MSw3ICsyNjUyLDcgQEAKICAgICB7eyAgICAgIDB4OUYsMHg3RiwweDgzLDB4ODUsMHg5MSwweDAwLDB4MDIsMHgwMCB9fSAvKiA7IDA3ICgxMDI0eCkgKi8KIH07CiAKLVhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzFfVng3NVtdPQorc3RydWN0IFhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzFfVng3NVtdID0KIHsJLyogQ1IwNixDUjA3LENSMTAsQ1IxMSxDUjE1LENSMTYsU1IwQStDUjA5KDUtPjcpICovCiAgICAge3sgICAgICAweDk3LDB4MUYsMHg2MCwweDg3LDB4NUQsMHg4MywweDEwICAgICAgfX0sLyogOyAwMCAoeDM1MCkgKi8KICAgICB7eyAgICAgIDB4QjQsMHgxRiwweDkyLDB4ODksMHg4RiwweEI1LDB4MzAgICAgICB9fSwvKiA7IDAxICh4NDAwKSAqLwpAQCAtMjY5MCw3ICsyNjYxLDcgQEAKICAgICB7eyAgICAgIDB4MUUsMHhGNSwweDAwLDB4ODMsMHhGRiwweDFGLDB4OTAgICAgICB9fSAvKiA7IDA0ICh4NzY4KSAqLwogfTsKIAotWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTAyNHg3NjhfMl9IeDc1W109CitzdHJ1Y3QgWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTAyNHg3NjhfMl9IeDc1W10gPQogeyAgICAgICAvKiBDUjAwLENSMDIsQ1IwMyxDUjA0LENSMDUsU1IwQixTUjBDLFNSMEUgKi8KICAgICB7eyAgICAgIDB4NjMsMHgyNywweDg3LDB4M0IsMHg4QywweDAwLDB4MDEsMHgwMCB9fSwvKiA7IDAwICgzMjB4KSAqLwogICAgIHt7ICAgICAgMHg2MywweDI3LDB4ODcsMHgzQiwweDhDLDB4MDAsMHgwMSwweDAwIH19LC8qIDsgMDEgKDM2MHgpICovCkBAIC0yNzAyLDcgKzI2NzMsNyBAQAogICAgIHt7ICAgICAgMHhBMywweDdGLDB4ODcsMHg4NiwweDk3LDB4MDAsMHgwMiwweDAwIH19IC8qIDsgMDcgKDEwMjR4KSAqLwogfTsKIAotWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTAyNHg3NjhfMl9WeDc1W109CitzdHJ1Y3QgWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTAyNHg3NjhfMl9WeDc1W10gPQogeyAgICAgICAvKiBDUjA2LENSMDcsQ1IxMCxDUjExLENSMTUsQ1IxNixTUjBBICovCiAgICAge3sgICAgICAweDI0LDB4QkIsMHgzMSwweDg3LDB4NUQsMHgyNSwweDMwICAgICAgfX0sLyogOyAwMCAoeDM1MCkgKi8KICAgICB7eyAgICAgIDB4MjQsMHhCQiwweDRBLDB4ODAsMHg4RiwweDI1LDB4MzAgICAgICB9fSwvKiA7IDAxICh4NDAwKSAqLwpAQCAtMjcxMSw3ICsyNjgyLDcgQEAKICAgICB7eyAgICAgIDB4MjQsMHhGNSwweDAyLDB4ODgsMHhGRiwweDI1LDB4OTAgICAgICB9fSAvKiA7IDA0ICh4NzY4KSAqLwogfTsKIAotWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTI4MHgxMDI0XzFfSHg3NVtdPQorc3RydWN0IFhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEyODB4MTAyNF8xX0h4NzVbXSA9CiB7ICAgICAgLyogQ1IwMCxDUjAyLENSMDMsQ1IwNCxDUjA1LFNSMEIsU1IwQyxTUjBFICovCiAgICAge3sgICAgICAweDU2LDB4MjcsMHg5QSwweDMwLDB4MUUsMHgwMCwweDA1LDB4MDAgfX0sLyogOyAwMCAoMzIweCkgKi8KICAgICB7eyAgICAgIDB4NTYsMHgyNywweDlBLDB4MzAsMHgxRSwweDAwLDB4MDUsMHgwMCB9fSwvKiA7IDAxICgzNjB4KSAqLwpAQCAtMjcyNCw3ICsyNjk1LDcgQEAKICAgICB7eyAgICAgIDB4Q0UsMHg5RiwweDkyLDB4QTUsMHgxNywweDAwLDB4MDcsMHgwMCB9fSAvKiA7IDA4ICgxMjgweCkgKi8KIH07CiAKLVhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEyODB4MTAyNF8xX1Z4NzVbXT0KK3N0cnVjdCBYR0lfTFZEU0NSVDFWRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExMjgweDEwMjRfMV9WeDc1W10gPQogewkvKiBDUjA2LENSMDcsQ1IxMCxDUjExLENSMTUsQ1IxNixTUjBBICovCiAgICAge3sgICAgICAweDg2LDB4RDEsMHhCQywweDgwLDB4QkIsMHhFNSwweDAwICAgICAgfX0sLyogOyAwMCAoeDM1MCkgKi8KICAgICB7eyAgICAgIDB4QjgsMHgxRiwweDkwLDB4ODQsMHg4RiwweEI5LDB4MzAgICAgICB9fSwvKiA7IDAxICh4NDAwKSAqLwpAQCAtMjczNCw3ICsyNzA1LDcgQEAKICAgICB7eyAgICAgIDB4MjgsMHg1QSwweDEzLDB4ODcsMHhGRiwweDI5LDB4QTkgICAgICB9fSAvKiA7IDA1ICh4MTAyNCkgKi8KIH07CiAKLVhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEyODB4MTAyNF8yX0h4NzVbXT0KK3N0cnVjdCBYR0lfTFZEU0NSVDFIRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExMjgweDEwMjRfMl9IeDc1W10gPQogewogCS8qIENSMDAsQ1IwMixDUjAzLENSMDQsQ1IwNSxTUjBCLFNSMEMsU1IwRSAqLwogICAgIHt7ICAgICAgMHg3RSwweDNCLDB4OUEsMHg0NCwweDEyLDB4MDAsMHgwMSwweDAwIH19LC8qIDsgMDAgKDMyMHgpICovCkBAIC0yNzQ4LDcgKzI3MTksNyBAQAogICAgIHt7ICAgICAgMHhDRSwweDlGLDB4OTIsMHhBOCwweDE2LDB4MDAsMHgwNywweDAwIH19IC8qIDsgMDggKDEyODB4KSAqLwogfTsKIAotWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTI4MHgxMDI0XzJfVng3NVtdPQorc3RydWN0IFhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEyODB4MTAyNF8yX1Z4NzVbXSA9CiB7CiAgICAgICAgIC8qIENSMDYsQ1IwNyxDUjEwLENSMTEsQ1IxNSxDUjE2LFNSMEEgKi8KICAgICAge3sgICAgIDB4MjgsMHhEMiwweEFGLDB4ODMsMHhBRSwweEQ4LDB4QTEgICAgIH19LC8qIDsgMDAgKHgzNTApICovCkBAIC0yNzU5LDcgKzI3MzAsNyBAQAogICAgICB7eyAgICAgMHgyOCwweDVBLDB4MTMsMHg4NywweEZGLDB4MjksMHhBOSAgICAgfX0gLyogOyAwNSAoeDEwMjQpICovCiB9OwogCi1YR0lfTFZEU0NSVDFEYXRhU3RydWN0ICBYR0lfQ0hUVkNSVDFVTlRTQ1tdPQorc3RydWN0IFhHSV9MVkRTQ1JUMURhdGFTdHJ1Y3QgIFhHSV9DSFRWQ1JUMVVOVFNDW10gPQogewogIHt7MHg2NCwweDRmLDB4ODgsMHg1NiwweDlmLDB4NTYsMHgzZSwKICAgICAweGU4LDB4ODQsMHg4ZiwweDU3LDB4MjAsMHgwMCwweDAxLDB4MDAgfX0sCkBAIC0yNzc1LDcgKzI3NDYsNyBAQAogICAgMHg5MCwweDhjLDB4NTcsMHhlZCwweDIwLDB4MDAsMHgwNiwweDAxIH19CiB9OwogCi1YR0lfTFZEU0NSVDFEYXRhU3RydWN0ICBYR0lfQ0hUVkNSVDFPTlRTQ1tdPQorc3RydWN0IFhHSV9MVkRTQ1JUMURhdGFTdHJ1Y3QgIFhHSV9DSFRWQ1JUMU9OVFNDW10gPQogewogIHt7MHg2NCwweDRmLDB4ODgsMHg1YSwweDlmLDB4MGIsMHgzZSwKICAgICAweGMwLDB4ODQsMHg4ZiwweDBjLDB4MjAsMHgwMCwweDAxLDB4MDAgfX0sCkBAIC0yNzkxLDcgKzI3NjIsNyBAQAogICAgMHg3ZiwweDg2LDB4NTcsMHhiYiwweDAwLDB4MDAsMHgwNiwweDAxIH19CiB9OwogCi1YR0lfTFZEU0NSVDFEYXRhU3RydWN0ICBYR0lfQ0hUVkNSVDFVUEFMW109CitzdHJ1Y3QgWEdJX0xWRFNDUlQxRGF0YVN0cnVjdCAgWEdJX0NIVFZDUlQxVVBBTFtdID0KIHsKICB7ezB4NzksMHg0ZiwweDlkLDB4NWEsMHg5MCwweDZmLDB4M2UsCiAgICAgMHhmOCwweDgzLDB4OGYsMHg3MCwweDIwLDB4MDAsMHgwNSwweDAwIH19LApAQCAtMjgwNyw3ICsyNzc4LDcgQEAKICAgIDB4YzgsMHg4YywweDU3LDB4ZTksMHgyMCwweDAwLDB4MDUsMHgwMSB9fQogfTsKIAotWEdJX0xWRFNDUlQxRGF0YVN0cnVjdCAgWEdJX0NIVFZDUlQxT1BBTFtdPQorc3RydWN0IFhHSV9MVkRTQ1JUMURhdGFTdHJ1Y3QgIFhHSV9DSFRWQ1JUMU9QQUxbXSA9CiB7CiAge3sweDc5LDB4NGYsMHg5ZCwweDVhLDB4OTAsMHg2ZiwweDNlLAogICAgIDB4ZjAsMHg4MywweDhmLDB4NzAsMHgyMCwweDAwLDB4MDUsMHgwMCB9fSwKQEAgLTI4MjQsNyArMjc5NSw3IEBACiB9OwogCiAvKmFkZCBmb3IgbmV3IFVOSVZHQUJJT1MqLwotWEdJMzMwX0xDRERhdGFUYWJsU3RydWN0IFhHSV9MQ0REYXRhVGFibGVbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YVRhYmxTdHJ1Y3QgWEdJX0xDRERhdGFUYWJsZVtdID0KIHsKICAge1BhbmVsMTAyNHg3NjgsMHgwMDE5LDB4MDAwMSwwfSwgIC8qIFhHSV9FeHRMQ0QxMDI0eDc2OERhdGEgKi8KICAge1BhbmVsMTAyNHg3NjgsMHgwMDE5LDB4MDAwMCwxfSwgIC8qIFhHSV9TdExDRDEwMjR4NzY4RGF0YSAqLwpAQCAtMjg0OCw3ICsyODE5LDcgQEAKICAgezB4RkYsMHgwMDAwLDB4MDAwMCwwfSAgIAkJLyogRW5kIG9mIHRhYmxlICovCiB9OwogCi1YR0kzMzBfTENERGF0YVRhYmxTdHJ1Y3QgWEdJX0xDRERlc0RhdGFUYWJsZVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhVGFibFN0cnVjdCBYR0lfTENERGVzRGF0YVRhYmxlW10gPQogewogICB7UGFuZWwxMDI0eDc2OCwweDAwMTksMHgwMDAxLDB9LCAvKiBYR0lfRXh0TENERGVzMTAyNHg3NjhEYXRhICovCiAgIHtQYW5lbDEwMjR4NzY4LDB4MDAxOSwweDAwMDAsMX0sIC8qIFhHSV9TdExDRERlczEwMjR4NzY4RGF0YSAqLwpAQCAtMjg3Myw3ICsyODQ0LDcgQEAKICAgezB4RkYsMHgwMDAwLDB4MDAwMCwwfQogfTsKIAotWEdJMzMwX0xDRERhdGFUYWJsU3RydWN0IFhHSV9FUExMQ0RDUlQxUHRyX0hbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YVRhYmxTdHJ1Y3QgWEdJX0VQTExDRENSVDFQdHJfSFtdID0KIHsKICAge1BhbmVsMTAyNHg3NjgsMHgwMDE4LDB4MDAwMCwwfSwgLyogWEdJX0xWRFNDUlQxMTAyNHg3NjhfMV9IICovCiAgIHtQYW5lbDEwMjR4NzY4LDB4MDAxOCwweDAwMTAsMX0sIC8qIFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzJfSCAqLwpAQCAtMjg4OSw3ICsyODYwLDcgQEAKICAgezB4RkYsMHgwMDAwLDB4MDAwMCwwfQogfTsKIAotWEdJMzMwX0xDRERhdGFUYWJsU3RydWN0IFhHSV9FUExMQ0RDUlQxUHRyX1ZbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YVRhYmxTdHJ1Y3QgWEdJX0VQTExDRENSVDFQdHJfVltdID0KIHsKICAge1BhbmVsMTAyNHg3NjgsMHgwMDE4LDB4MDAwMCwwfSwgLyogWEdJX0xWRFNDUlQxMTAyNHg3NjhfMV9WICovCiAgIHtQYW5lbDEwMjR4NzY4LDB4MDAxOCwweDAwMTAsMX0sIC8qIFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzJfViAqLwpAQCAtMjkwNSw3ICsyODc2LDcgQEAKICAgezB4RkYsMHgwMDAwLDB4MDAwMCwwfQogfTsKIAotWEdJMzMwX0xDRERhdGFUYWJsU3RydWN0IFhHSV9FUExMQ0REYXRhUHRyW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFUYWJsU3RydWN0IFhHSV9FUExMQ0REYXRhUHRyW10gPQogewogICB7UGFuZWwxMDI0eDc2OCwweDAwMTgsMHgwMDAwLDB9LCAvKiBYR0lfTFZEUzEwMjR4NzY4RGF0YV8xICovCiAgIHtQYW5lbDEwMjR4NzY4LDB4MDAxOCwweDAwMTAsMX0sIC8qIFhHSV9MVkRTMTAyNHg3NjhEYXRhXzIgKi8KQEAgLTI5MjMsNyArMjg5NCw3IEBACiAgIHsweEZGLDB4MDAwMCwweDAwMDAsMH0KIH07CiAKLVhHSTMzMF9MQ0REYXRhVGFibFN0cnVjdCBYR0lfRVBMTENERGVzRGF0YVB0cltdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhVGFibFN0cnVjdCBYR0lfRVBMTENERGVzRGF0YVB0cltdID0KIHsKICAge1BhbmVsMTAyNHg3NjgsMHgwMDE4LDB4MDAwMCwwfSwgLyogWEdJX0xWRFMxMDI0eDc2OERlc18xICovCiAgIHtQYW5lbDEwMjR4NzY4LDB4MDYxOCwweDA0MTAsMX0sIC8qIFhHSV9MVkRTMTAyNHg3NjhEZXNfMyAqLwpAQCAtMjk0MywxNCArMjkxNCwxNCBAQAogICB7MHhGRiwweDAwMDAsMHgwMDAwLDB9CiB9OwogCi1YR0kzMzBfTENERGF0YVRhYmxTdHJ1Y3QgWEdJX0VQTENITENEUmVnUHRyW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFUYWJsU3RydWN0IFhHSV9FUExDSExDRFJlZ1B0cltdID0KIHsKICAge1BhbmVsMTAyNHg3NjgsMHgwMDAwLDB4MDAwMCwwfSwgLyogWEdJX0NINzAxN0xWMTAyNHg3NjggKi8KICAge1BhbmVsMTQwMHgxMDUwLDB4MDAwMCwweDAwMDAsMX0sIC8qIFhHSV9DSDcwMTdMVjE0MDB4MTA1MCAqLwogICB7MHhGRiwweDAwMDAsMHgwMDAwLDB9CiB9OwogCi1YR0kzMzBfVFZEYXRhVGFibFN0cnVjdCBYR0lfVFZEYXRhVGFibGVbXT0KK3N0cnVjdCBYR0kzMzBfVFZEYXRhVGFibFN0cnVjdCBYR0lfVFZEYXRhVGFibGVbXSA9CiB7CiAgezB4MDlFMSwweDAwMDEsMH0sCS8qIFhHSV9FeHRQQUxEYXRhICovCiAgezB4MDlFMSwweDAwMDAsMX0sCS8qIFhHSV9FeHROVFNDRGF0YSAqLwpAQCAtMjk2OCw3ICsyOTM5LDcgQEAKICB7MHhmZmZmLDB4MDAwMCwxMn0gIAkvKiBFTkQgKi8KIH07CiAKLVVTSE9SVCBUVkxlbkxpc3RbXT0KK3Vuc2lnbmVkIHNob3J0IFRWTGVuTGlzdFtdID0KIHsKICAgIExWRFNDUlQxTGVuX0gsCiAgICBMVkRTQ1JUMUxlbl9WLApAQCAtMjk4MSw3ICsyOTUyLDcgQEAKIH0gOwogCiAvKiBDaHJvbnRlbCA3MDE3IFRWIENSVDEgVGltaW5nIExpc3QgKi8KLVhHSTMzMF9UVkRhdGFUYWJsU3RydWN0IFhHSV9FUExDSFRWQ1JUMVB0cltdPQorc3RydWN0IFhHSTMzMF9UVkRhdGFUYWJsU3RydWN0IFhHSV9FUExDSFRWQ1JUMVB0cltdID0KIHsKICAgezB4MDAxMSwweDAwMDAsMH0sIC8qIFhHSV9DSFRWQ1JUMVVOVFNDICovCiAgIHsweDAwMTEsMHgwMDEwLDF9LCAvKiBYR0lfQ0hUVkNSVDFPTlRTQyAqLwpAQCAtMjk5MSw3ICsyOTYyLDcgQEAKIH07CiAKIC8qIDs7Q2hyb250ZWwgNzAxNyBUViBUaW1pbmcgTGlzdCAqLwotWEdJMzMwX1RWRGF0YVRhYmxTdHJ1Y3QgWEdJX0VQTENIVFZEYXRhUHRyW109CitzdHJ1Y3QgWEdJMzMwX1RWRGF0YVRhYmxTdHJ1Y3QgWEdJX0VQTENIVFZEYXRhUHRyW10gPQogewogICB7MHgwMDExLDB4MDAwMCwwfSwgLyogWEdJX0NIVFZVTlRTQ0RhdGEgKi8KICAgezB4MDAxMSwweDAwMTAsMX0sIC8qIFhHSV9DSFRWT05UU0NEYXRhICovCkBAIC0zMDAxLDcgKzI5NzIsNyBAQAogfTsKIAogLyogOztDaHJvbnRlbCA3MDE3IFRWIFJlZy4gTGlzdCAqLwotWEdJMzMwX1RWRGF0YVRhYmxTdHJ1Y3QgWEdJX0VQTENIVFZSZWdQdHJbXT0KK3N0cnVjdCBYR0kzMzBfVFZEYXRhVGFibFN0cnVjdCBYR0lfRVBMQ0hUVlJlZ1B0cltdID0KIHsKICAgezB4MDAxMSwweDAwMDAsMH0sIC8qIFhHSV9DSFRWUmVnVU5UU0MgKi8KICAgezB4MDAxMSwweDAwMTAsMX0sIC8qIFhHSV9DSFRWUmVnT05UU0MgKi8KQEAgLTMwMTAsNyArMjk4MSw3IEBACiAgIHsweEZGRkYsMHgwMDAwLDR9CiB9OwogCi1VU0hPUlQgTENETGVuTGlzdFtdPQordW5zaWduZWQgc2hvcnQgTENETGVuTGlzdFtdID0KIHsKICAgIExWRFNDUlQxTGVuX0gsCiAgICBMVkRTQ1JUMUxlbl9WLApAQCAtMzAyNCw3ICsyOTk1LDcgQEAKICAgIDAKIH0gOwogCi1YR0kzMzBfTENEQ2FwU3RydWN0ICBYR0k2NjBfTENERExDYXBMaXN0W109ICAvKiA2NjAsIER1YWwgbGluayAqLworc3RydWN0IFhHSTMzMF9MQ0RDYXBTdHJ1Y3QgIFhHSTY2MF9MQ0RETENhcExpc3RbXSA9ICAvKiA2NjAsIER1YWwgbGluayAqLwogewogLyogTENEQ2FwMTAyNHg3NjggKi8KIAkJe1BhbmVsMTAyNHg3NjgsIERlZmF1bHRMQ0RDYXAsIDAsIDB4MDE0LCAweDg4LCAweDA2LCBWQ0xLNjUsCkBAIC0zMDU2LDcgKzMwMjcsNyBAQAogCQkweDMwLCAweDEwLCAweDVBLCAweDEwLCAweDEwLCAweDBBLCAweEMwLCAweDI4LCAweDEwfQogfTsKIAotWEdJMzMwX0xDRENhcFN0cnVjdCAgWEdJX0xDRERMQ2FwTGlzdFtdPSAgLyogRHVhbCBsaW5rIG9ubHkgKi8KK3N0cnVjdCBYR0kzMzBfTENEQ2FwU3RydWN0ICBYR0lfTENERExDYXBMaXN0W10gPSAgLyogRHVhbCBsaW5rIG9ubHkgKi8KIHsKIC8qIExDRENhcDEwMjR4NzY4ICovCiAJCXtQYW5lbDEwMjR4NzY4LCBEZWZhdWx0TENEQ2FwLCAwLCAweDAxMiwgMHg4OCwgMHgwNiwgVkNMSzY1LApAQCAtMzA4OCw3ICszMDU5LDcgQEAKIAkJMHgzMCwgMHgxMCwgMHg1QSwgMHgxMCwgMHgxMCwgMHgwQSwgMHhDMCwgMHgyOCwgMHgxMH0KIH07CiAKLVhHSTMzMF9MQ0RDYXBTdHJ1Y3QgIFhHSTY2MF9MQ0RDYXBMaXN0W109CitzdHJ1Y3QgWEdJMzMwX0xDRENhcFN0cnVjdCAgWEdJNjYwX0xDRENhcExpc3RbXSA9CiB7CiAvKiBMQ0RDYXAxMDI0eDc2OCAqLwogICAgICAgICAgICAgICAgIHtQYW5lbDEwMjR4NzY4LCBEZWZhdWx0TENEQ2FwLCAwLCAweDAxNCwgMHg4OCwgMHgwNiwgVkNMSzY1LApAQCAtMzEyMCw3ICszMDkxLDcgQEAKIAkJMHgzMCwgMHgxMCwgMHg1QSwgMHgxMCwgMHgxMCwgMHgwQSwgMHhDMCwgMHgyOCwgMHgxMH0KIH07CiAKLVhHSTMzMF9MQ0RDYXBTdHJ1Y3QgIFhHSV9MQ0RDYXBMaXN0W109CitzdHJ1Y3QgWEdJMzMwX0xDRENhcFN0cnVjdCAgWEdJX0xDRENhcExpc3RbXSA9CiB7CiAvKiBMQ0RDYXAxMDI0eDc2OCAqLwogCQl7UGFuZWwxMDI0eDc2OCwgRGVmYXVsdExDRENhcCwgMCwgMHgwMTIsIDB4ODgsIDB4MDYsIFZDTEs2NSwKQEAgLTMxNTIsNyArMzEyMyw3IEBACiAJCTB4MzAsIDB4MTAsIDB4NUEsIDB4MTAsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MjgsIDB4MTB9CiB9OwogCi1YR0kyMV9MVkRTQ2FwU3RydWN0IFhHSTIxX0xDRENhcExpc3RbXT0KK3N0cnVjdCBYR0kyMV9MVkRTQ2FwU3RydWN0IFhHSTIxX0xDRENhcExpc3RbXSA9CiB7CiAgICAge0Rpc2FibGVMQ0QyNGJwcCArIExDRFBvbGFyaXR5LAogICAgICAyMTYwLDEyNTAsMTYwMCwxMjAwLCAgNjQsICAxLCAgMTkyLCAgIDMsCkBAIC0zMTgxLDcgKzMxNTIsNyBAQAogCiB9OwogCi1YR0lfRXh0MlN0cnVjdCBYR0kzMzBfUmVmSW5kZXhbXT0KK3N0cnVjdCBYR0lfRXh0MlN0cnVjdCBYR0kzMzBfUmVmSW5kZXhbXSA9CiB7CiB7U3VwcG9ydDMyQnBwICsgU3VwcG9ydEFsbENSVDIgKyBTeW5jUE4sCQkJUkVTMzIweDIwMCwJIFZDTEsyNV8xNzUsIDB4MDAsMHgxMCwweDU5LCAzMjAsIDIwMH0sLyogMDAgKi8KIHtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0QWxsQ1JUMiArIFN5bmNQTiwJCQlSRVMzMjB4MjAwLAkgVkNMSzI1XzE3NSwgMHgwMCwweDEwLDB4MDAsIDMyMCwgNDAwfSwvKiAwMSAqLwpAQCAtMzI2MCw3ICszMjMxLDcgQEAKIAogCiAKLVhHSTMzMF9WQ0xLRGF0YVN0cnVjdCBYR0kzMzBfVkNMS0RhdGFbXT0KK3N0cnVjdCBYR0kzMzBfVkNMS0RhdGFTdHJ1Y3QgWEdJMzMwX1ZDTEtEYXRhW10gPQogewogIHsgMHgxYiwweGUxLCAyNX0sIC8qIDB4MCAqLwogIHsgMHg0ZSwweGU0LCAyOH0sIC8qIDB4MSAqLwpAQCAtMzM0NCw3ICszMzE1LDcgQEAKICB7IDB4M2IsMHg2MSwxMDh9ICAvKiAweDRmICovCiB9OwogCi1YR0lfVkJWQ0xLRGF0YVN0cnVjdCBYR0kzMzBfVkJWQ0xLRGF0YVtdPQorc3RydWN0IFhHSV9WQlZDTEtEYXRhU3RydWN0IFhHSTMzMF9WQlZDTEtEYXRhW10gPQogewogIHsgMHgxYiwweGUxLCAyNX0sIC8qIDB4MCAqLwogIHsgMHg0ZSwweGU0LCAyOH0sIC8qIDB4MSAqLwpAQCAtMzQyMiw5ICszMzkzLDExIEBACiAgeyAweDcwLDB4NDQsMTA4fSwgLyogMHg0OSBjaGlhd2VuIGZvciAxNDAweDEwNTAqLwogfTsKIAotVUNIQVIgWEdJMzMwX1NjcmVlbk9mZnNldFtdPXsgMHgxNCwweDE5LDB4MjAsMHgyOCwweDMyLDB4NDAsMHg1MCwweDY0LDB4NzgsMHg4MCwweDJkLDB4MzUsMHg1NywweDQ4IH07Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9TY3JlZW5PZmZzZXRbXSA9IHsgMHgxNCwgMHgxOSwgMHgyMCwgMHgyOCwgMHgzMiwgMHg0MCwKKwkJCQkJMHg1MCwgMHg2NCwgMHg3OCwgMHg4MCwgMHgyZCwgMHgzNSwKKwkJCQkJMHg1NywgMHg0OH07CiAKLVhHSV9TdFJlc0luZm9TdHJ1Y3QgWEdJMzMwX1N0UmVzSW5mb1tdPQorc3RydWN0IFhHSV9TdFJlc0luZm9TdHJ1Y3QgWEdJMzMwX1N0UmVzSW5mb1tdID0KIHsKICB7IDY0MCw0MDB9LAogIHsgNjQwLDM1MH0sCkBAIC0zNDMzLDcgKzM0MDYsNyBAQAogIHsgNjQwLDQ4MH0KIH07CiAKLVhHSV9Nb2RlUmVzSW5mb1N0cnVjdCBYR0kzMzBfTW9kZVJlc0luZm9bXT0KK3N0cnVjdCBYR0lfTW9kZVJlc0luZm9TdHJ1Y3QgWEdJMzMwX01vZGVSZXNJbmZvW10gPQogewogIHsgIDMyMCwgMjAwLCA4LCA4fSwKICB7ICAzMjAsIDI0MCwgOCwgOH0sCkBAIC0zNDYwLDEwICszNDMzLDEwIEBACiAgeyAxMTUyLCA4NjQsIDgsMTZ9CiB9OwogCi1VQ0hBUiBYR0kzMzBfT3V0cHV0U2VsZWN0ID0weDQwOwotVUNIQVIgWEdJMzMwX1NvZnRTZXR0aW5nID0gMHgzMDsKLVVDSEFSIFhHSTMzMF9TUjA3PTB4MTg7Ci1VQ0hBUiBYR0kzMzBOZXdfU1IxNVs4XVs4XT17Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9PdXRwdXRTZWxlY3QgPSAweDQwOwordW5zaWduZWQgY2hhciBYR0kzMzBfU29mdFNldHRpbmcgPSAweDMwOwordW5zaWduZWQgY2hhciBYR0kzMzBfU1IwNyA9IDB4MTg7Cit1bnNpZ25lZCBjaGFyIFhHSTMzME5ld19TUjE1WzhdWzhdID0gewogezB4MCwweDQsMHg2MCwweDYwfSwKIHsweGYsMHhmLDB4ZiwweGZ9LAogezB4YmEsMHhiYSwweGJhLDB4YmF9LApAQCAtMzQ3NCw3ICszNDQ3LDcgQEAKIHsweDAsMHhhNSwweGZiLDB4ZjZ9CiB9OwogCi1VQ0hBUiBYR0kzMzBOZXdfQ1I0MFs1XVs4XT17Cit1bnNpZ25lZCBjaGFyIFhHSTMzME5ld19DUjQwWzVdWzhdID0gewogezB4NzcsMHg3NywweDQ0LDB4NDR9LAogezB4NzcsMHg3NywweDQ0LDB4NDR9LAogezB4MCwweDAsMHgwLDB4MH0sCkBAIC0zNDgyLDYzICszNDU1LDYzIEBACiB7MHgwLDB4MCwweGYwLDB4Zjh9CiB9OwogCi1VQ0hBUiBYR0kzMzBfQ1I0OVtdPXsweGFhLDB4ODh9OwotVUNIQVIgWEdJMzMwX1NSMUY9MHgwOwotVUNIQVIgWEdJMzMwX1NSMjE9MHhhMzsKLVVDSEFSIFhHSTMzMF82NTBfU1IyMT0weGE3OwotVUNIQVIgWEdJMzMwX1NSMjI9MHhmYjsKLVVDSEFSIFhHSTMzMF9TUjIzPTB4ZjY7Ci1VQ0hBUiBYR0kzMzBfU1IyND0weGQ7Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9DUjQ5W10gPSB7MHhhYSwgMHg4OH07Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9TUjFGID0gMHgwOwordW5zaWduZWQgY2hhciBYR0kzMzBfU1IyMSA9IDB4YTM7Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF82NTBfU1IyMSA9IDB4YTc7Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9TUjIyID0gMHhmYjsKK3Vuc2lnbmVkIGNoYXIgWEdJMzMwX1NSMjMgPSAweGY2OwordW5zaWduZWQgY2hhciBYR0kzMzBfU1IyNCA9IDB4ZDsKIAotVUNIQVIgWEdJNjYwX1NSMjE9MHhhMzsvKiAyMDAzLjAzMTIgKi8KLVVDSEFSIFhHSTY2MF9TUjIyPTB4ZjM7LyogMjAwMy4wMzEyICovCit1bnNpZ25lZCBjaGFyIFhHSTY2MF9TUjIxID0gMHhhMzsvKiAyMDAzLjAzMTIgKi8KK3Vuc2lnbmVkIGNoYXIgWEdJNjYwX1NSMjIgPSAweGYzOy8qIDIwMDMuMDMxMiAqLwogCi1VQ0hBUiBYR0kzMzBfTFZEU19TUjMyPTB4MDA7ICAgLyogeW5sYWkgZm9yIDY1MCBMVkRTICovCi1VQ0hBUiBYR0kzMzBfTFZEU19TUjMzPTB4MDA7CS8qIGNoaWF3ZW4gZm9yIDY1MCBMVkRTICovCi1VQ0hBUiBYR0kzMzBfNjUwX1NSMzE9MHg0MDsKLVVDSEFSIFhHSTMzMF82NTBfU1IzMz0weDA0OwotVUNIQVIgWEdJMzMwX0NSVDJEYXRhXzFfMiA9IDB4MDsKLVVDSEFSIFhHSTMzMF9DUlQyRGF0YV80X0QgPSAweDA7Ci1VQ0hBUiBYR0kzMzBfQ1JUMkRhdGFfNF9FID0gMHgwOwotVUNIQVIgWEdJMzMwX0NSVDJEYXRhXzRfMTAgPSAweDgwOwotVVNIT1JUIFhHSTMzMF9SR0JTZW5zZURhdGEgPSAweGQxOwotVVNIT1JUIFhHSTMzMF9WaWRlb1NlbnNlRGF0YSA9IDB4Yjk7Ci1VU0hPUlQgWEdJMzMwX1lDU2Vuc2VEYXRhID0gMHhiMzsKLVVTSE9SVCBYR0kzMzBfUkdCU2Vuc2VEYXRhMiA9IDB4MDE5MDsgICAgIC8qMzAxYiovCi1VU0hPUlQgWEdJMzMwX1ZpZGVvU2Vuc2VEYXRhMiA9IDB4MDExMDsKLVVTSE9SVCBYR0kzMzBfWUNTZW5zZURhdGEyID0gMHgwMTZCOwotVUNIQVIgWEdJMzMwX05UU0NQaGFzZVtdID0gezB4MjEsMHhlZCwweDhhLDB4OH07Ci1VQ0hBUiBYR0kzMzBfUEFMUGhhc2VbXSA9IHsweDJhLDB4NSwweGQzLDB4MH07Ci1VQ0hBUiBYR0kzMzBfTlRTQ1BoYXNlMltdID0gezB4MjEsMHhGMCwweDdCLDB4RDZ9Oy8qMzAxYiovCi1VQ0hBUiBYR0kzMzBfUEFMUGhhc2UyW10gPSB7MHgyYSwweDA5LDB4ODYsMHhlOX07Ci1VQ0hBUiBYR0kzMzBfUEFMTVBoYXNlW10gPSB7MHgyMSwweEU0LDB4MkUsMHg5Qn07ICAgLypwYWxtbiovCi1VQ0hBUiBYR0kzMzBfUEFMTlBoYXNlW10gPSB7MHgyMSwweEY0LDB4M0UsMHhCQX07Ci1VQ0hBUiBYRzQwX0kyQ0RlZmluaXRpb24gPSAweDAwIDsKLVVDSEFSIFhHMjBfQ1I5NyA9IDB4MTAgOwordW5zaWduZWQgY2hhciBYR0kzMzBfTFZEU19TUjMyID0gMHgwMDsgICAvKiB5bmxhaSBmb3IgNjUwIExWRFMgKi8KK3Vuc2lnbmVkIGNoYXIgWEdJMzMwX0xWRFNfU1IzMyA9IDB4MDA7CS8qIGNoaWF3ZW4gZm9yIDY1MCBMVkRTICovCit1bnNpZ25lZCBjaGFyIFhHSTMzMF82NTBfU1IzMSA9IDB4NDA7Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF82NTBfU1IzMyA9IDB4MDQ7Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9DUlQyRGF0YV8xXzIgPSAweDA7Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9DUlQyRGF0YV80X0QgPSAweDA7Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9DUlQyRGF0YV80X0UgPSAweDA7Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9DUlQyRGF0YV80XzEwID0gMHg4MDsKK3Vuc2lnbmVkIHNob3J0IFhHSTMzMF9SR0JTZW5zZURhdGEgPSAweGQxOwordW5zaWduZWQgc2hvcnQgWEdJMzMwX1ZpZGVvU2Vuc2VEYXRhID0gMHhiOTsKK3Vuc2lnbmVkIHNob3J0IFhHSTMzMF9ZQ1NlbnNlRGF0YSA9IDB4YjM7Cit1bnNpZ25lZCBzaG9ydCBYR0kzMzBfUkdCU2Vuc2VEYXRhMiA9IDB4MDE5MDsgICAgIC8qMzAxYiovCit1bnNpZ25lZCBzaG9ydCBYR0kzMzBfVmlkZW9TZW5zZURhdGEyID0gMHgwMTEwOwordW5zaWduZWQgc2hvcnQgWEdJMzMwX1lDU2Vuc2VEYXRhMiA9IDB4MDE2QjsKK3Vuc2lnbmVkIGNoYXIgWEdJMzMwX05UU0NQaGFzZVtdID0gezB4MjEsIDB4ZWQsIDB4OGEsIDB4OH07Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9QQUxQaGFzZVtdID0gezB4MmEsIDB4NSwgMHhkMywgMHgwfTsKK3Vuc2lnbmVkIGNoYXIgWEdJMzMwX05UU0NQaGFzZTJbXSA9IHsweDIxLCAweEYwLCAweDdCLCAweEQ2fTsvKjMwMWIqLwordW5zaWduZWQgY2hhciBYR0kzMzBfUEFMUGhhc2UyW10gPSB7MHgyYSwgMHgwOSwgMHg4NiwgMHhlOX07Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9QQUxNUGhhc2VbXSA9IHsweDIxLCAweEU0LCAweDJFLCAweDlCfTsgICAvKnBhbG1uKi8KK3Vuc2lnbmVkIGNoYXIgWEdJMzMwX1BBTE5QaGFzZVtdID0gezB4MjEsIDB4RjQsIDB4M0UsIDB4QkF9OwordW5zaWduZWQgY2hhciBYRzQwX0kyQ0RlZmluaXRpb24gPSAweDAwIDsKK3Vuc2lnbmVkIGNoYXIgWEcyMF9DUjk3ID0gMHgxMCA7CiAKLVVDSEFSIFhHMjFfRFZPU2V0dGluZyA9IDB4MDAgOwotVUNIQVIgWEcyMV9DUjJFID0gMHgwMCA7Ci1VQ0hBUiBYRzIxX0NSMkYgPSAweDAwIDsKLVVDSEFSIFhHMjFfQ1I0NiA9IDB4MDAgOwotVUNIQVIgWEcyMV9DUjQ3ID0gMHgwMCA7Cit1bnNpZ25lZCBjaGFyIFhHMjFfRFZPU2V0dGluZyA9IDB4MDAgOwordW5zaWduZWQgY2hhciBYRzIxX0NSMkUgPSAweDAwIDsKK3Vuc2lnbmVkIGNoYXIgWEcyMV9DUjJGID0gMHgwMCA7Cit1bnNpZ25lZCBjaGFyIFhHMjFfQ1I0NiA9IDB4MDAgOwordW5zaWduZWQgY2hhciBYRzIxX0NSNDcgPSAweDAwIDsKIAotVUNIQVIgWEcyN19DUjk3ID0gMHhDMSA7Ci1VQ0hBUiBYRzI3X1NSMzYgPSAweDMwIDsKLVVDSEFSIFhHMjdfQ1I4RiA9IDB4MEMgOwotVUNIQVIgWEcyN19DUkQwW10gPSB7MCwwLDAsMCwwLDAsMCwweDgyLDB4MDAsMHg2NiwweDAxLDB4MDB9IDsKLVVDSEFSIFhHMjdfQ1JERVtdID0gezAsMH0gOwotVUNIQVIgWEcyN19TUjQwID0gMHgwNCA7Ci1VQ0hBUiBYRzI3X1NSNDEgPSAweDAwIDsKK3Vuc2lnbmVkIGNoYXIgWEcyN19DUjk3ID0gMHhDMSA7Cit1bnNpZ25lZCBjaGFyIFhHMjdfU1IzNiA9IDB4MzAgOwordW5zaWduZWQgY2hhciBYRzI3X0NSOEYgPSAweDBDIDsKK3Vuc2lnbmVkIGNoYXIgWEcyN19DUkQwW10gPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMHg4MiwgMHgwMCwgMHg2NiwgMHgwMSwgMHgwMH07Cit1bnNpZ25lZCBjaGFyIFhHMjdfQ1JERVtdID0gezAsIDB9OwordW5zaWduZWQgY2hhciBYRzI3X1NSNDAgPSAweDA0IDsKK3Vuc2lnbmVkIGNoYXIgWEcyN19TUjQxID0gMHgwMCA7CiAKLVVDSEFSIFhHSTMzMF9DSFRWVkNMS1VOVFNDW109ezB4MDAgfTsKK3Vuc2lnbmVkIGNoYXIgWEdJMzMwX0NIVFZWQ0xLVU5UU0NbXSA9IHsweDAwfTsKIAotVUNIQVIgWEdJMzMwX0NIVFZWQ0xLT05UU0NbXT17MHgwMCB9OwordW5zaWduZWQgY2hhciBYR0kzMzBfQ0hUVlZDTEtPTlRTQ1tdID0gezB4MDB9OwogCi1VQ0hBUiBYR0kzMzBfQ0hUVlZDTEtVUEFMW109ezB4MDAgfTsKK3Vuc2lnbmVkIGNoYXIgWEdJMzMwX0NIVFZWQ0xLVVBBTFtdID0gezB4MDB9OwogCi1VQ0hBUiBYR0kzMzBfQ0hUVlZDTEtPUEFMW109ezB4MDAgfTsKK3Vuc2lnbmVkIGNoYXIgWEdJMzMwX0NIVFZWQ0xLT1BBTFtdID0gezB4MDB9OwogCi1VQ0hBUiBYR0k3MDA3X0NIVFZWQ0xLVU5UU0NbXT17Q0g3MDA3VFZWQ0xLMzBfMiwKK3Vuc2lnbmVkIGNoYXIgWEdJNzAwN19DSFRWVkNMS1VOVFNDW10gPSB7Q0g3MDA3VFZWQ0xLMzBfMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSDcwMDdUVlZDTEszMF8yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENINzAwN1RWVkNMSzMwXzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0g3MDA3VFZWQ0xLMzBfMiwKQEAgLTM1NDYsNyArMzUxOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0g3MDA3VFZWQ0xLNDdfOAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKIAotVUNIQVIgWEdJNzAwN19DSFRWVkNMS09OVFNDW109e0NINzAwN1RWVkNMSzI2XzQsCit1bnNpZ25lZCBjaGFyIFhHSTcwMDdfQ0hUVlZDTEtPTlRTQ1tdID0ge0NINzAwN1RWVkNMSzI2XzQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0g3MDA3VFZWQ0xLMjZfNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSDcwMDdUVlZDTEsyNl80LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENINzAwN1RWVkNMSzI2XzQsCkBAIC0zNTU0LDcgKzM1MjcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENINzAwN1RWVkNMSzQzXzYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAKLVVDSEFSIFhHSTcwMDdfQ0hUVlZDTEtVUEFMW109e0NINzAwN1RWVkNMSzMxXzUsCit1bnNpZ25lZCBjaGFyIFhHSTcwMDdfQ0hUVlZDTEtVUEFMW10gPSB7Q0g3MDA3VFZWQ0xLMzFfNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENINzAwN1RWVkNMSzMxXzUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSDcwMDdUVlZDTEszMV81LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0g3MDA3VFZWQ0xLMzFfNSwKQEAgLTM1NjIsNyArMzUzNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSDcwMDdUVlZDTEszOQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogCi1VQ0hBUiBYR0k3MDA3X0NIVFZWQ0xLT1BBTFtdPXtDSDcwMDdUVlZDTEszMV81LAordW5zaWduZWQgY2hhciBYR0k3MDA3X0NIVFZWQ0xLT1BBTFtdID0ge0NINzAwN1RWVkNMSzMxXzUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSDcwMDdUVlZDTEszMV81LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0g3MDA3VFZWQ0xLMzFfNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENINzAwN1RWVkNMSzMxXzUsCkBAIC0zNTcwLDcgKzM1NDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0g3MDA3VFZWQ0xLMzYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKIAotWEdJMzMwX1ZDTEtEYXRhU3RydWN0IFhHSV9DSDcwMDdWQ0xLRGF0YVtdPQorc3RydWN0IFhHSTMzMF9WQ0xLRGF0YVN0cnVjdCBYR0lfQ0g3MDA3VkNMS0RhdGFbXSA9CiB7CiAgeyAweDYwLDB4MzYsMzB9LCAgLyogMCAzMC4yIE1IWiAqLwogIHsgMHg0MCwweDRBLDI4fSwgIC8qIDEgMjguMTkgTUhaICovCkBAIC0zNTg1LDcgKzM1NTgsNyBAQAogIHsgMHhGRiwweDAwLDAgfSAgIC8qIEVuZCBtYXJrICAgICAgKi8KIH07CiAKLVhHSTMzMF9WQ0xLRGF0YVN0cnVjdCBYR0lfVkNMS0RhdGFbXT0KK3N0cnVjdCBYR0kzMzBfVkNMS0RhdGFTdHJ1Y3QgWEdJX1ZDTEtEYXRhW10gPQogewogICAgICAgICAgICAgICAgCS8qIFNSMkIsU1IyQyxTUjJEICovCiAgCQl7ICAgICAgMHgxQiwweEUxLDI1ICAgICAgICAgICAgICAgfSwvKiAwMCAoMjUuMTc1TUh6KSAqLwpAQCAtMzc4Niw3ICszNzU5LDcgQEAKICAgICAgICAgICAgICAgICB7ICAgICAgMHhGRiwweDAwLDAgICAgICAgICAgICAgICAgfS8qIEVuZCBtYXJrICovCiAgfSAgOwogCi1YR0kzMzBfVkNMS0RhdGFTdHJ1Y3QgWEdJX1ZCVkNMS0RhdGFbXT0KK3N0cnVjdCBYR0kzMzBfVkNMS0RhdGFTdHJ1Y3QgWEdJX1ZCVkNMS0RhdGFbXSA9CiB7CiAgICAgICAgICAgICAgICAgeyAgICAgIDB4MUIsMHhFMSwyNSAgICAgICAgICAgICAgIH0sLyogMDAgKDI1LjE3NU1IeikgKi8KIApAQCAtMzk4Nyw3ICszOTYwLDcgQEAKICAgICAgICAgICAgICAgICB7ICAgICAgMHhGRiwweDAwLDAgICAgICAgICAgICAgICAgfSAgICAgIC8qIEVuZCBtYXJrICovCiB9OwogCi1VQ0hBUiBYR0k2NjBfVFZEZWxheUxpc3RbXT0KK3Vuc2lnbmVkIGNoYXIgWEdJNjYwX1RWRGVsYXlMaXN0W10gPQogewogICAgICAgICAgIDB4NDQsICAgICAgICAgICAgLyogOyAwIEV4dE5UU0NEZWxheSAqLwogICAgICAgICAgIDB4NDQsICAgICAgICAgICAgLyogOyAxIFN0TlRTQ0RlbGF5ICovCkBAIC00MDAzLDcgKzM5NzYsNyBAQAogICAgICAgICAgIDB4NDQgICAgICAgICAgICAgLyogOyBCIFN0WVBiUHJEZWFseSg3NTBwKSAqLwogfTsKIAotVUNIQVIgWEdJNjYwX1RWRGVsYXlMaXN0MltdPQordW5zaWduZWQgY2hhciBYR0k2NjBfVFZEZWxheUxpc3QyW10gPQogewogICAgICAgICAgIDB4NDQsICAgICAgICAgICAvKiA7IDAgRXh0TlRTQ0RlbGF5ICovCiAgICAgICAgICAgMHg0NCwgICAgICAgICAgIC8qIDsgMSBTdE5UU0NEZWxheSAqLwpAQCAtNDAxOSw3ICszOTkyLDcgQEAKICAgICAgICAgICAweDQ0ICAgICAgICAgICAgLyogOyBCIFN0WVBiUHJEZWFseSg3NTBwKSAqLwogfTsKIAotVUNIQVIgWEdJMzAxVFZEZWxheUxpc3RbXT0KK3Vuc2lnbmVkIGNoYXIgWEdJMzAxVFZEZWxheUxpc3RbXSA9CiB7CiAJMHgyMiwgICAgICAgICAgICAvKiA7IDAgRXh0TlRTQ0RlbGF5ICovCiAJMHgyMiwgICAgICAgICAgICAvKiA7IDEgU3ROVFNDRGVsYXkgKi8KQEAgLTQwMzUsNyArNDAwOCw3IEBACiAJMHgyMiAgICAgICAgICAgIC8qIEIgU3RZUGJQckRlYWx5KDc1MHApICovCiB9OwogCi1VQ0hBUiBYR0kzMDFUVkRlbGF5TGlzdDJbXT0KK3Vuc2lnbmVkIGNoYXIgWEdJMzAxVFZEZWxheUxpc3QyW10gPQogewogCTB4MjIsICAgICAgICAgICAvKiA7IDAgRXh0TlRTQ0RlbGF5ICovCiAJMHgyMiwgICAgICAgICAgIC8qIDsgMSBTdE5UU0NEZWxheSAqLwpAQCAtNDA1Miw3ICs0MDI1LDcgQEAKIH07CiAKIAotVUNIQVIgVFZBbnRpRmxpY2tMaXN0W109Cit1bnNpZ25lZCBjaGFyIFRWQW50aUZsaWNrTGlzdFtdID0KIHsvKiBOVFNDQW50aUZsaWNrZXIgKi8KICAgICAgICAgICAgICAgICAgICAgICAweDA0LCAgICAgICAgICAgLyogOyAwIEFkYXB0aXZlICovCiAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgICAgICAgICAgIC8qIDsgMSBuZXcgYW50aS1mbGlja2VyID8gKi8KQEAgLTQwNjUsNyArNDAzOCw3IEBACiB9OwogCiAKLVVDSEFSIFRWRWRnZUxpc3RbXT0KK3Vuc2lnbmVkIGNoYXIgVFZFZGdlTGlzdFtdID0KIHsKICAgICAgIDB4MDAsICAgICAgICAgICAgLyogOyAwIE5UU0MgTm8gRWRnZSBlbmhhbmNlICovCiAgICAgICAweDA0LCAgICAgICAgICAgIC8qIDsgMSBOVFNDIEFkYXB0aXZlIEVkZ2UgZW5oYW5jZSAqLwpAQCAtNDA3NSw3ICs0MDQ4LDcgQEAKICAgICAgIDB4MDAgICAgICAgICAgICAgLyogOyAxIEhpVFYgKi8KIH07CiAKLVVMT05HIFRWUGhhc2VMaXN0W109Cit1bnNpZ25lZCBsb25nIFRWUGhhc2VMaXN0W10gPQogeyAgICAgIDB4MDhCQUVEMjEsIC8qIDsgMCBOVFNDIHBoYXNlICovCiAgICAgICAgMHgwMEUzMDUyQSwgLyogOyAxIFBBTCBwaGFzZSAqLwogICAgICAgIDB4OUIyRUU0MjEsIC8qIDsgMiBQQUwtTSBwaGFzZSAqLwpAQCAtNDA5Miw3ICs0MDY1LDcgQEAKICAgICAgICAweEUwMEE4MzFFICAvKiA7IEQgUEFMLU0gMTAyNHg3NjggKi8KIH07CiAKLVVDSEFSIE5UU0NZRmlsdGVyMVtdPQordW5zaWduZWQgY2hhciBOVFNDWUZpbHRlcjFbXSA9CiB7CiAJCSAgICAgIDB4MDAsMHhGNCwweDEwLDB4MzggICAgICwvKiAwIDogMzIweCB0ZXh0IG1vZGUgKi8KICAgICAgICAgICAgICAgICAgICAgICAweDAwLDB4RjQsMHgxMCwweDM4ICAgICAsLyogMSA6IDM2MHggdGV4dCBtb2RlICovCkBAIC00MTAzLDcgKzQwNzYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIDB4RUIsMHgxNSwweDI1LDB4RjYgICAgIC8qIDYgOiA4MDB4IGdyYS4gbW9kZSAqLwogfTsKIAotVUNIQVIgUEFMWUZpbHRlcjFbXT0KK3Vuc2lnbmVkIGNoYXIgUEFMWUZpbHRlcjFbXSA9CiB7CiAJCSAgICAgIDB4MDAsMHhGNCwweDEwLDB4MzgsIC8qIDAgOiAzMjB4IHRleHQgbW9kZSAqLwogICAgICAgICAgICAgICAgICAgICAgIDB4MDAsMHhGNCwweDEwLDB4MzggICAgICwvKiAxIDogMzYweCB0ZXh0IG1vZGUgKi8KQEAgLTQxMTQsNyArNDA4Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgMHhGQywweEZCLDB4MTQsMHgyQSAgICAgLyogNiA6IDgwMHggZ3JhLiBtb2RlICovCiB9OwogCi1VQ0hBUiBQQUxNWUZpbHRlcjFbXT0KK3Vuc2lnbmVkIGNoYXIgUEFMTVlGaWx0ZXIxW10gPQogewogCQkgICAgICAweDAwLDB4RjQsMHgxMCwweDM4LCAvKiAwIDogMzIweCB0ZXh0IG1vZGUgKi8KICAgICAgICAgICAgICAgICAgICAgICAweDAwLDB4RjQsMHgxMCwweDM4LCAvKiAxIDogMzYweCB0ZXh0IG1vZGUgKi8KQEAgLTQxMjYsNyArNDA5OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgMHhGRiwweEZGLDB4RkYsMHhGRiAgLyogRW5kIG9mIFRhYmxlICovCiB9OwogCi1VQ0hBUiBQQUxOWUZpbHRlcjFbXT0KK3Vuc2lnbmVkIGNoYXIgUEFMTllGaWx0ZXIxW10gPQogewogCQkgICAgICAweDAwLDB4RjQsMHgxMCwweDM4LCAvKiAwIDogMzIweCB0ZXh0IG1vZGUgKi8KICAgICAgICAgICAgICAgICAgICAgICAweDAwLDB4RjQsMHgxMCwweDM4LCAvKiAxIDogMzYweCB0ZXh0IG1vZGUgKi8KQEAgLTQxMzgsNyArNDExMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgMHhGRiwweEZGLDB4RkYsMHhGRiAgLyogRW5kIG9mIFRhYmxlICovCiB9OwogCi1VQ0hBUiBOVFNDWUZpbHRlcjJbXT0KK3Vuc2lnbmVkIGNoYXIgTlRTQ1lGaWx0ZXIyW10gPQogewogCQkgICAgICAweEZGLDB4MDMsMHgwMiwweEY2LDB4RkMsMHgyNywweDQ2LCAvKiAwIDogMzIweCB0ZXh0IG1vZGUgKi8KICAgICAgICAgICAgICAgICAgICAgICAweDAxLDB4MDIsMHhGRSwweEY3LDB4MDMsMHgyNywweDNDLCAvKiAxIDogMzYweCB0ZXh0IG1vZGUgKi8KQEAgLTQxNTAsNyArNDEyMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgMHhGRiwweEZGLDB4RkMsMHgwMCwweDBGLDB4MjIsMHgyOCAgLyogNyA6IDEwMjR4Z3JhLiBtb2RlICovCiB9OwogCi1VQ0hBUiBQQUxZRmlsdGVyMltdPQordW5zaWduZWQgY2hhciBQQUxZRmlsdGVyMltdID0KIHsKIAkJICAgICAgMHhGRiwweDAzLDB4MDIsMHhGNiwweEZDLDB4MjcsMHg0NiwgLyogMCA6IDMyMHggdGV4dCBtb2RlICovCiAgICAgICAgICAgICAgICAgICAgICAgMHgwMSwweDAyLDB4RkUsMHhGNywweDAzLDB4MjcsMHgzQywgLyogMSA6IDM2MHggdGV4dCBtb2RlICovCkBAIC00MTYyLDcgKzQxMzUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIDB4RkYsMHhGRiwweEZDLDB4MDAsMHgwRiwweDIyLDB4MjggIC8qIDcgOiAxMDI0eGdyYS4gbW9kZSAqLwogfTsKIAotVUNIQVIgUEFMTVlGaWx0ZXIyW109Cit1bnNpZ25lZCBjaGFyIFBBTE1ZRmlsdGVyMltdID0KIHsKIAkJICAgICAgMHhGRiwweDAzLDB4MDIsMHhGNiwweEZDLDB4MjcsMHg0NiwgLyogMCA6IDMyMHggdGV4dCBtb2RlICovCiAgICAgICAgICAgICAgICAgICAgICAgMHgwMSwweDAyLDB4RkUsMHhGNywweDAzLDB4MjcsMHgzQywgLyogMSA6IDM2MHggdGV4dCBtb2RlICovCkBAIC00MTc0LDcgKzQxNDcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIDB4RkYsMHhGRiwweEZDLDB4MDAsMHgwRiwweDIyLDB4MjggIC8qIDcgOiAxMDI0eGdyYS4gbW9kZSAqLwogfTsKIAotVUNIQVIgUEFMTllGaWx0ZXIyW109Cit1bnNpZ25lZCBjaGFyIFBBTE5ZRmlsdGVyMltdID0KIHsKIAkJICAgICAgMHhGRiwweDAzLDB4MDIsMHhGNiwweEZDLDB4MjcsMHg0NiwgLyogMCA6IDMyMHggdGV4dCBtb2RlICovCiAgICAgICAgICAgICAgICAgICAgICAgMHgwMSwweDAyLDB4RkUsMHhGNywweDAzLDB4MjcsMHgzQywgLyogMSA6IDM2MHggdGV4dCBtb2RlICovCkBAIC00MTg2LDE0ICs0MTU5LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgMHhGRiwweEZGLDB4RkMsMHgwMCwweDBGLDB4MjIsMHgyOCAgLyogNyA6IDEwMjR4Z3JhLiBtb2RlICovCiB9OwogCi1VQ0hBUiBYR0lfTlRTQzEwMjRBZGpUaW1lW109Cit1bnNpZ25lZCBjaGFyIFhHSV9OVFNDMTAyNEFkalRpbWVbXSA9CiB7CiAgICAgICAweGE3LDB4MDcsMHhmMiwweDZlLDB4MTcsMHg4YiwweDczLDB4NTMsCiAgICAgICAweDEzLDB4NDAsMHgzNCwweEY0LDB4NjMsMHhCQiwweENDLDB4N0EsCiAgICAgICAweDU4LDB4ZTQsMHg3MywweGQwLDB4MTMKIH07CiAKLVhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdCBIaVRWVGFwNFRpbWluZ1tdPQorc3RydWN0IFhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdCBIaVRWVGFwNFRpbWluZ1tdID0KIHsKIAl7MCx7CiAJMHgwMCwweDIwLDB4MDAsMHgwMCwweDdGLDB4MjAsMHgwMiwweDdGLCAvKiA7IEMwLUM3ICovCkBAIC00MjA4LDcgKzQxODEsNyBAQAogCX0KIH07CiAKLVhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdCBFbmxhcmdlVGFwNFRpbWluZ1tdPQorc3RydWN0IFhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdCBFbmxhcmdlVGFwNFRpbWluZ1tdID0KIHsKIAl7MCx7CiAJMHgwMCwweDIwLDB4MDAsMHgwMCwweDdGLDB4MjAsMHgwMiwweDdGLCAvKiA7IEMwLUM3ICovCkBAIC00MjIzLDcgKzQxOTYsNyBAQAogCX0KIH07CiAKLVhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdCBOb1NjYWxlVGFwNFRpbWluZ1tdPQorc3RydWN0IFhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdCBOb1NjYWxlVGFwNFRpbWluZ1tdID0KIHsKIAl7MCx7CiAJMHgwMCwweDIwLDB4MDAsMHgwMCwweDdGLDB4MjAsMHgwMiwweDdGLCAvKiA7IEMwLUM3ICovCkBAIC00MjM4LDcgKzQyMTEsNyBAQAogCX0KIH07CiAKLVhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdCBQQUxUYXA0VGltaW5nW109CitzdHJ1Y3QgWEdJMzAxQ19UYXA0VGltaW5nU3RydWN0IFBBTFRhcDRUaW1pbmdbXSA9CiB7CiAJezYwMCwgIHsKICAgICAgICAgICAgICAgICAweDA1LDB4MTksMHgwNSwweDdELDB4MDMsMHgxOSwweDA2LDB4N0UsIC8qIDsgQzAtQzcgKi8KQEAgLTQyNzYsNyArNDI0OSw3IEBACiAgICAgICAgIH0KIH07CiAKLVhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdCBOVFNDVGFwNFRpbWluZ1tdPQorc3RydWN0IFhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdCBOVFNDVGFwNFRpbWluZ1tdID0KIHsKIAl7NDgwLAl7CiAgICAgICAgICAgICAgIAkweDA0LDB4MUEsMHgwNCwweDdFLDB4MDMsMHgxQSwweDA2LDB4N0QsIC8qIDsgQzAtQzcgKi8KQEAgLTQzMTQsNyArNDI4Nyw3IEBACiAgICAgICAgIH0KIH07CiAKLVhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdCBZUGJQcjUyNXBUYXA0VGltaW5nW109CitzdHJ1Y3QgWEdJMzAxQ19UYXA0VGltaW5nU3RydWN0IFlQYlByNTI1cFRhcDRUaW1pbmdbXSA9CiB7CiAJezQ4MCwJewogICAgICAgICAgICAgICAJMHgwNCwweDFBLDB4MDQsMHg3RSwweDAzLDB4MUEsMHgwNiwweDdELCAvKiA7IEMwLUM3ICovCkBAIC00MzUyLDcgKzQzMjUsNyBAQAogICAgICAgICB9CiB9OwogCi1YR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3QgWVBiUHI1MjVpVGFwNFRpbWluZ1tdPQorc3RydWN0IFhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdCBZUGJQcjUyNWlUYXA0VGltaW5nW10gPQogewogCXs0ODAsCXsKICAgICAgICAgICAgICAgCTB4MDQsMHgxQSwweDA0LDB4N0UsMHgwMywweDFBLDB4MDYsMHg3RCwgLyogOyBDMC1DNyAqLwpAQCAtNDM5MCw3ICs0MzYzLDcgQEAKICAgICAgICAgfQogfTsKIAotWEdJMzAxQ19UYXA0VGltaW5nU3RydWN0IFlQYlByNzUwcFRhcDRUaW1pbmdbXT0KK3N0cnVjdCBYR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3QgWVBiUHI3NTBwVGFwNFRpbWluZ1tdID0KIHsgICAgICAgIHsweEZGRkYsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAweDA1LDB4MTksMHgwNSwweDdELDB4MDMsMHgxOSwweDA2LDB4N0UsIC8qIDsgQzAtQzcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl91dGlsLmMgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfdXRpbC5jCmluZGV4IDg3NTMxYjQuLjJjNDAzNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl91dGlsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3V0aWwuYwpAQCAtMSw1NCArMSwyNSBAQAotI2luY2x1ZGUgIm9zZGVmLmgiCiAjaW5jbHVkZSAidmJfZGVmLmgiCiAjaW5jbHVkZSAidmdhdHlwZXMuaCIKICNpbmNsdWRlICJ2Yl9zdHJ1Y3QuaCIKIAotI2lmZGVmIExJTlVYX0tFUk5FTAogI2luY2x1ZGUgIlhHSWZiLmgiCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNlbmRpZgogCi0jaWZkZWYgVEMKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGNvbmlvLmg+Ci0jaW5jbHVkZSA8ZG9zLmg+Ci0jZW5kaWYKLQotI2lmZGVmIFdJTjIwMDAKLSNpbmNsdWRlIDxkZGVycm9yLmg+Ci0jaW5jbHVkZSA8ZGV2aW9jdGwuaD4KLSNpbmNsdWRlIDxtaW5pcG9ydC5oPgotI2luY2x1ZGUgPG50ZGR2ZGVvLmg+Ci0jaW5jbHVkZSA8dmlkZW8uaD4KLQotI2luY2x1ZGUgInhnaXYuaCIKLSNpbmNsdWRlICJkZF9pMmMuaCIKLSNpbmNsdWRlICJ0b29scy5oIgotI2VuZGlmCi0KLSNpZmRlZiBMSU5VWF9YRjg2Ci0jaW5jbHVkZSAieGY4Ni5oIgotI2luY2x1ZGUgInhmODZQY2lJbmZvLmgiCi0jaW5jbHVkZSAieGdpLmgiCi0jaW5jbHVkZSAieGdpX3JlZ3MuaCIKLSNlbmRpZgotCi0KLQotCi12b2lkIFhHSU5ld19TZXRSZWcxKCBVTE9ORyAsIFVTSE9SVCAsIFVTSE9SVCApIDsKLXZvaWQgWEdJTmV3X1NldFJlZzIoIFVMT05HICwgVVNIT1JUICwgVVNIT1JUICkgOwotdm9pZCBYR0lOZXdfU2V0UmVnMyggVUxPTkcgLCBVU0hPUlQgKSA7Ci12b2lkIFhHSU5ld19TZXRSZWc0KCBVTE9ORyAsIFVMT05HICkgOwotVUNIQVIgWEdJTmV3X0dldFJlZzEoIFVMT05HICwgVVNIT1JUKSA7Ci1VQ0hBUiBYR0lOZXdfR2V0UmVnMiggVUxPTkcgKSA7Ci1VTE9ORyBYR0lOZXdfR2V0UmVnMyggVUxPTkcgKSA7Ci12b2lkIFhHSU5ld19DbGVhckRBQyggUFVDSEFSICkgOwotdm9pZCAgICAgWEdJTmV3X1NldFJlZ0FORE9SKFVMT05HIFBvcnQsVVNIT1JUIEluZGV4LFVTSE9SVCBEYXRhQU5ELFVTSE9SVCBEYXRhT1IpOwotdm9pZCAgICAgWEdJTmV3X1NldFJlZ09SKFVMT05HIFBvcnQsVVNIT1JUIEluZGV4LFVTSE9SVCBEYXRhT1IpOwotdm9pZCAgICAgWEdJTmV3X1NldFJlZ0FORChVTE9ORyBQb3J0LFVTSE9SVCBJbmRleCxVU0hPUlQgRGF0YUFORCk7Cit2b2lkIFhHSU5ld19TZXRSZWcxKHVuc2lnbmVkIGxvbmcsdW5zaWduZWQgc2hvcnQsdW5zaWduZWQgc2hvcnQpOwordm9pZCBYR0lOZXdfU2V0UmVnMih1bnNpZ25lZCBsb25nLHVuc2lnbmVkIHNob3J0LHVuc2lnbmVkIHNob3J0KTsKK3ZvaWQgWEdJTmV3X1NldFJlZzModW5zaWduZWQgbG9uZyx1bnNpZ25lZCBzaG9ydCk7Cit2b2lkIFhHSU5ld19TZXRSZWc0KHVuc2lnbmVkIGxvbmcsdW5zaWduZWQgbG9uZyk7Cit1bnNpZ25lZCBjaGFyIFhHSU5ld19HZXRSZWcxKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIHNob3J0KTsKK3Vuc2lnbmVkIGNoYXIgWEdJTmV3X0dldFJlZzIodW5zaWduZWQgbG9uZyk7Cit1bnNpZ25lZCBsb25nIFhHSU5ld19HZXRSZWczKHVuc2lnbmVkIGxvbmcpOwordm9pZCBYR0lOZXdfQ2xlYXJEQUModW5zaWduZWQgY2hhciAqKTsKK3ZvaWQgWEdJTmV3X1NldFJlZ0FORE9SKHVuc2lnbmVkIGxvbmcgUG9ydCx1bnNpZ25lZCBzaG9ydCBJbmRleCwKKwkJCXVuc2lnbmVkIHNob3J0IERhdGFBTkQsdW5zaWduZWQgc2hvcnQgRGF0YU9SKTsKK3ZvaWQgWEdJTmV3X1NldFJlZ09SKHVuc2lnbmVkIGxvbmcgUG9ydCx1bnNpZ25lZCBzaG9ydCBJbmRleCwKKwkJICAgICB1bnNpZ25lZCBzaG9ydCBEYXRhT1IpOwordm9pZCBYR0lOZXdfU2V0UmVnQU5EKHVuc2lnbmVkIGxvbmcgUG9ydCx1bnNpZ25lZCBzaG9ydCBJbmRleCwKKwkJICAgICAgdW5zaWduZWQgc2hvcnQgRGF0YUFORCk7CiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC01NywxNSArMjgsMTAgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6IFNSIENSVEMgR1IgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lOZXdfU2V0UmVnMSggVUxPTkcgcG9ydCAsIFVTSE9SVCBpbmRleCAsIFVTSE9SVCBkYXRhICkKK3ZvaWQgWEdJTmV3X1NldFJlZzEoIHVuc2lnbmVkIGxvbmcgcG9ydCAsIHVuc2lnbmVkIHNob3J0IGluZGV4ICwgdW5zaWduZWQgc2hvcnQgZGF0YSApCiB7Ci0jaWZkZWYgTElOVVhfWEY4NgotICAgIE91dFBvcnRCeXRlKCAoIFBVQ0hBUiApKFVMT05HKXBvcnQgLCBpbmRleCApIDsKLSAgICBPdXRQb3J0Qnl0ZSggKCBQVUNIQVIgKShVTE9ORylwb3J0ICsgMSAsIGRhdGEgKSA7Ci0jZWxzZQotICAgIE91dFBvcnRCeXRlKCBwb3J0ICwgaW5kZXggKSA7Ci0gICAgT3V0UG9ydEJ5dGUoIHBvcnQgKyAxICwgZGF0YSApIDsKLSNlbmRpZgorCW91dGIoaW5kZXgsIHBvcnQpOworCW91dGIoZGF0YSwgcG9ydCArIDEpOwogfQogCiAKQEAgLTc1LDkgKzQxLDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6IEFSKCAzQzAgKSAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKnZvaWQgWEdJTmV3X1NldFJlZzIoIFVMT05HIHBvcnQgLCBVU0hPUlQgaW5kZXggLCBVU0hPUlQgZGF0YSApCisvKnZvaWQgWEdJTmV3X1NldFJlZzIoIHVuc2lnbmVkIGxvbmcgcG9ydCAsIHVuc2lnbmVkIHNob3J0IGluZGV4ICwgdW5zaWduZWQgc2hvcnQgZGF0YSApCiB7Ci0gICAgSW5Qb3J0Qnl0ZSggKCBQVUNIQVIgKXBvcnQgKyAweDNkYSAtIDB4M2MwICkgOworICAgIEluUG9ydEJ5dGUoKFAgdW5zaWduZWQgY2hhciApcG9ydCArIDB4M2RhIC0gMHgzYzApIDsKICAgICBPdXRQb3J0Qnl0ZSggWEdJTmV3X1AzYzAgLCBpbmRleCApIDsKICAgICBPdXRQb3J0Qnl0ZSggWEdJTmV3X1AzYzAgLCBkYXRhICkgOwogICAgIE91dFBvcnRCeXRlKCBYR0lOZXdfUDNjMCAsIDB4MjAgKSA7CkBAIC05MCw5ICs1Niw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19TZXRSZWczKCBVTE9ORyBwb3J0ICwgVVNIT1JUIGRhdGEgKQordm9pZCBYR0lOZXdfU2V0UmVnMyggdW5zaWduZWQgbG9uZyBwb3J0ICwgdW5zaWduZWQgc2hvcnQgZGF0YSApCiB7Ci0gICAgT3V0UG9ydEJ5dGUoIHBvcnQgLCBkYXRhICkgOworCW91dGIoZGF0YSwgcG9ydCk7CiB9CiAKIApAQCAtMTAyLDkgKzY4LDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJTmV3X1NldFJlZzQoIFVMT05HIHBvcnQgLCBVTE9ORyBkYXRhICkKK3ZvaWQgWEdJTmV3X1NldFJlZzQoIHVuc2lnbmVkIGxvbmcgcG9ydCAsIHVuc2lnbmVkIGxvbmcgZGF0YSApCiB7Ci0gICAgT3V0UG9ydExvbmcoIHBvcnQgLCBkYXRhICkgOworCW91dGwoZGF0YSwgcG9ydCk7CiB9CiAKIApAQCAtMTE0LDE4ICs4MCwxMiBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotVUNIQVIgWEdJTmV3X0dldFJlZzEoIFVMT05HIHBvcnQgLCBVU0hPUlQgaW5kZXggKQordW5zaWduZWQgY2hhciBYR0lOZXdfR2V0UmVnMSh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIHNob3J0IGluZGV4KQogewotICAgIFVDSEFSIGRhdGEgOworICAgIHVuc2lnbmVkIGNoYXIgZGF0YSA7CiAKLSNpZmRlZiBMSU5VWF9YRjg2Ci0gICAgT3V0UG9ydEJ5dGUoICggUFVDSEFSICkoVUxPTkcpcG9ydCAsIGluZGV4ICkgOwotICAgIGRhdGEgPSBJblBvcnRCeXRlKCAoIFBVQ0hBUiApKFVMT05HKXBvcnQgKyAxICkgOwotI2Vsc2UKLSAgICBPdXRQb3J0Qnl0ZSggcG9ydCAsIGluZGV4ICkgOwotICAgIGRhdGEgPSBJblBvcnRCeXRlKCBwb3J0ICsgMSApIDsKLSNlbmRpZgotCisgICAgb3V0YihpbmRleCwgcG9ydCk7CisgICAgZGF0YSA9IGluYihwb3J0ICsgMSkgOwogICAgIHJldHVybiggZGF0YSApIDsKIH0KIApAQCAtMTM2LDExICs5NiwxMSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotVUNIQVIgWEdJTmV3X0dldFJlZzIoIFVMT05HIHBvcnQgKQordW5zaWduZWQgY2hhciBYR0lOZXdfR2V0UmVnMih1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0gICAgVUNIQVIgZGF0YSA7CisgICAgdW5zaWduZWQgY2hhciBkYXRhIDsKIAotICAgIGRhdGEgPSBJblBvcnRCeXRlKCBwb3J0ICkgOworICAgIGRhdGEgPSBpbmIocG9ydCkgOwogCiAgICAgcmV0dXJuKCBkYXRhICkgOwogfQpAQCAtMTUyLDExICsxMTIsMTEgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLVVMT05HIFhHSU5ld19HZXRSZWczKCBVTE9ORyBwb3J0ICkKK3Vuc2lnbmVkIGxvbmcgWEdJTmV3X0dldFJlZzMoIHVuc2lnbmVkIGxvbmcgcG9ydCApCiB7Ci0gICAgVUxPTkcgZGF0YSA7CisgICAgdW5zaWduZWQgbG9uZyBkYXRhIDsKIAotICAgIGRhdGEgPSBJblBvcnRMb25nKCBwb3J0ICkgOworICAgIGRhdGEgPSBpbmwocG9ydCkgOwogCiAgICAgcmV0dXJuKCBkYXRhICkgOwogfQpAQCAtMTY5LDkgKzEyOSw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19TZXRSZWdBTkRPUiggVUxPTkcgUG9ydCAsIFVTSE9SVCBJbmRleCAsIFVTSE9SVCBEYXRhQU5EICwgVVNIT1JUIERhdGFPUiApCit2b2lkIFhHSU5ld19TZXRSZWdBTkRPUiggdW5zaWduZWQgbG9uZyBQb3J0ICwgdW5zaWduZWQgc2hvcnQgSW5kZXggLCB1bnNpZ25lZCBzaG9ydCBEYXRhQU5EICwgdW5zaWduZWQgc2hvcnQgRGF0YU9SICkKIHsKLSAgICBVU0hPUlQgdGVtcCA7CisgICAgdW5zaWduZWQgc2hvcnQgdGVtcCA7CiAKICAgICB0ZW1wID0gWEdJTmV3X0dldFJlZzEoIFBvcnQgLCBJbmRleCApIDsJCS8qIFhHSU5ld19QYXJ0MVBvcnQgaW5kZXggMDIgKi8KICAgICB0ZW1wID0gKCB0ZW1wICYgKCBEYXRhQU5EICkgKSB8IERhdGFPUiA7CkBAIC0xODUsOSArMTQ1LDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJTmV3X1NldFJlZ0FORChVTE9ORyBQb3J0LFVTSE9SVCBJbmRleCxVU0hPUlQgRGF0YUFORCkKK3ZvaWQgWEdJTmV3X1NldFJlZ0FORCh1bnNpZ25lZCBsb25nIFBvcnQsdW5zaWduZWQgc2hvcnQgSW5kZXgsdW5zaWduZWQgc2hvcnQgRGF0YUFORCkKIHsKLSAgICBVU0hPUlQgdGVtcCA7CisgICAgdW5zaWduZWQgc2hvcnQgdGVtcCA7CiAKICAgICB0ZW1wID0gWEdJTmV3X0dldFJlZzEoIFBvcnQgLCBJbmRleCApIDsJLyogWEdJTmV3X1BhcnQxUG9ydCBpbmRleCAwMiAqLwogICAgIHRlbXAgJj0gRGF0YUFORCA7CkBAIC0yMDEsOSArMTYxLDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJTmV3X1NldFJlZ09SKCBVTE9ORyBQb3J0ICwgVVNIT1JUIEluZGV4ICwgVVNIT1JUIERhdGFPUiApCit2b2lkIFhHSU5ld19TZXRSZWdPUiggdW5zaWduZWQgbG9uZyBQb3J0ICwgdW5zaWduZWQgc2hvcnQgSW5kZXggLCB1bnNpZ25lZCBzaG9ydCBEYXRhT1IgKQogewotICAgIFVTSE9SVCB0ZW1wIDsKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wIDsKIAogICAgIHRlbXAgPSBYR0lOZXdfR2V0UmVnMSggUG9ydCAsIEluZGV4ICkgOwkvKiBYR0lOZXdfUGFydDFQb3J0IGluZGV4IDAyICovCiAgICAgdGVtcCB8PSBEYXRhT1IgOwpAQCAtMjE5LDI5ICsxNzksMTQgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogdm9pZCBOZXdEZWxheVNlY29uZHMoIGludCBzZWNvbmRzICkKIHsKLSNpZmRlZiBXSU4yMDAwCi0gICAgaW50IGogOwotI2VuZGlmCiAgICAgaW50IGkgOwogCiAKICAgICBmb3IoIGkgPSAwIDsgaSA8IHNlY29uZHMgOyBpKysgKQogICAgIHsKLSNpZmRlZiBUQwotICAgICAgICBkZWxheSggMTAwMCApIDsKLSNlbmRpZgogCi0jaWZkZWYgV0lOMjAwMAogCi0gICAgICAgIGZvciAoIGogPSAwIDsgaiA8IDIwMDAwIDsgaisrICkKLSAgICAgICAgICAgIFZpZGVvUG9ydFN0YWxsRXhlY3V0aW9uKCA1MCApIDsKLSNlbmRpZgogCi0jaWZkZWYgV0lOQ0VfSEVBREVSCi0jZW5kaWYKLQotI2lmZGVmIExJTlVYX0tFUk5FTAotI2VuZGlmCiAgICAgfQogfQogCkBAIC0yNTIsNyArMTk3LDcgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgTmV3ZGVidWdjb2RlKCBVQ0hBUiBjb2RlICkKK3ZvaWQgTmV3ZGVidWdjb2RlKHVuc2lnbmVkIGNoYXIgY29kZSkKIHsKIC8vICAgIE91dFBvcnRCeXRlICggMHg4MCAsIGNvZGUgKSA7CiAgICAgLyogT3V0UG9ydEJ5dGUgKCAweDMwMCAsIGNvZGUgKSA7ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfdXRpbC5oIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3V0aWwuaAppbmRleCA5MTc3OWQ4Li4xNTZmNjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfdXRpbC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl91dGlsLmgKQEAgLTEsMTUgKzEsMTUgQEAKICNpZm5kZWYgX1ZCVVRJTF8KICNkZWZpbmUgX1ZCVVRJTF8KIGV4dGVybiAgIHZvaWQgICAgIE5ld0RlbGF5U2Vjb25kcyggaW50ICk7Ci1leHRlcm4gICB2b2lkICAgICBOZXdkZWJ1Z2NvZGUoIFVDSEFSICk7Ci1leHRlcm4gICB2b2lkICAgICBYR0lOZXdfU2V0UmVnMShVTE9ORywgVVNIT1JULCBVU0hPUlQpOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJTmV3X1NldFJlZzMoVUxPTkcsIFVTSE9SVCk7Ci1leHRlcm4gICBVQ0hBUiAgICBYR0lOZXdfR2V0UmVnMShVTE9ORywgVVNIT1JUKTsKLWV4dGVybiAgIFVDSEFSICAgIFhHSU5ld19HZXRSZWcyKFVMT05HKTsKLWV4dGVybiAgIHZvaWQgICAgIFhHSU5ld19TZXRSZWc0KFVMT05HLCBVTE9ORyk7Ci1leHRlcm4gICBVTE9ORyAgICBYR0lOZXdfR2V0UmVnMyhVTE9ORyk7Ci1leHRlcm4gICB2b2lkICAgICBYR0lOZXdfU2V0UmVnT1IoVUxPTkcgUG9ydCxVU0hPUlQgSW5kZXgsVVNIT1JUIERhdGFPUik7Ci1leHRlcm4gICB2b2lkICAgICBYR0lOZXdfU2V0UmVnQU5EKFVMT05HIFBvcnQsVVNIT1JUIEluZGV4LFVTSE9SVCBEYXRhQU5EKTsKLWV4dGVybiAgIHZvaWQgICAgIFhHSU5ld19TZXRSZWdBTkRPUihVTE9ORyBQb3J0LFVTSE9SVCBJbmRleCxVU0hPUlQgRGF0YUFORCxVU0hPUlQgRGF0YU9SKTsKK2V4dGVybiAgIHZvaWQgICAgIE5ld2RlYnVnY29kZSh1bnNpZ25lZCBjaGFyKTsKK2V4dGVybiAgIHZvaWQgICAgIFhHSU5ld19TZXRSZWcxKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCk7CitleHRlcm4gICB2b2lkICAgICBYR0lOZXdfU2V0UmVnMyh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBzaG9ydCk7CitleHRlcm4gICAgdW5zaWduZWQgY2hhciAgICAgWEdJTmV3X0dldFJlZzEodW5zaWduZWQgbG9uZywgdW5zaWduZWQgc2hvcnQpOworZXh0ZXJuICAgIHVuc2lnbmVkIGNoYXIgICAgIFhHSU5ld19HZXRSZWcyKHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuICAgdm9pZCAgICAgWEdJTmV3X1NldFJlZzQodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gICB1bnNpZ25lZCBsb25nICAgIFhHSU5ld19HZXRSZWczKHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuICAgdm9pZCAgICAgWEdJTmV3X1NldFJlZ09SKHVuc2lnbmVkIGxvbmcgUG9ydCx1bnNpZ25lZCBzaG9ydCBJbmRleCx1bnNpZ25lZCBzaG9ydCBEYXRhT1IpOworZXh0ZXJuICAgdm9pZCAgICAgWEdJTmV3X1NldFJlZ0FORCh1bnNpZ25lZCBsb25nIFBvcnQsdW5zaWduZWQgc2hvcnQgSW5kZXgsdW5zaWduZWQgc2hvcnQgRGF0YUFORCk7CitleHRlcm4gICB2b2lkICAgICBYR0lOZXdfU2V0UmVnQU5ET1IodW5zaWduZWQgbG9uZyBQb3J0LHVuc2lnbmVkIHNob3J0IEluZGV4LHVuc2lnbmVkIHNob3J0IERhdGFBTkQsdW5zaWduZWQgc2hvcnQgRGF0YU9SKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmdhdHlwZXMuaCBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Z2F0eXBlcy5oCmluZGV4IDI5NWVhODYuLmRmODM5ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Z2F0eXBlcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Z2F0eXBlcy5oCkBAIC0yLDEzNiArMiwxNCBAQAogI2lmbmRlZiBfVkdBVFlQRVNfCiAjZGVmaW5lIF9WR0FUWVBFU18KIAotI2luY2x1ZGUgIm9zZGVmLmgiCi0KLSNpZmRlZiBMSU5VWF9YRjg2Ci0jaW5jbHVkZSAieGY4NlZlcnNpb24uaCIKLSNpbmNsdWRlICJ4Zjg2UGNpLmgiCi0jZW5kaWYKLQotI2lmZGVmIExJTlVYX0tFUk5FTCAgLyogV2UgZG9uJ3Qgd2FudCB0aGUgWCBkcml2ZXIgdG8gZGVwZW5kIG9uIGtlcm5lbCBzb3VyY2UgKi8KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotI2VuZGlmCi0KLSNpZm5kZWYgRkFMU0UKLSNkZWZpbmUgRkFMU0UgICAwCi0jZW5kaWYKLQotI2lmbmRlZiBUUlVFCi0jZGVmaW5lIFRSVUUgICAgMQotI2VuZGlmCi0KLSNpZm5kZWYgTlVMTAotI2RlZmluZSBOVUxMICAgIDAKLSNlbmRpZgotCi0jaWZuZGVmIENIQVIKLXR5cGVkZWYgY2hhciBDSEFSOwotI2VuZGlmCi0KLSNpZm5kZWYgU0hPUlQKLXR5cGVkZWYgc2hvcnQgU0hPUlQ7Ci0jZW5kaWYKLQotI2lmbmRlZiBMT05HCi10eXBlZGVmIGxvbmcgIExPTkc7Ci0jZW5kaWYKLQotI2lmbmRlZiBVQ0hBUgotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVDSEFSOwotI2VuZGlmCi0KLSNpZm5kZWYgVVNIT1JUCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IFVTSE9SVDsKLSNlbmRpZgotCi0jaWZuZGVmIFVMT05HCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgVUxPTkc7Ci0jZW5kaWYKLQotI2lmbmRlZiBQVUNIQVIKLXR5cGVkZWYgVUNIQVIgKlBVQ0hBUjsKLSNlbmRpZgotCi0jaWZuZGVmIFBVU0hPUlQKLXR5cGVkZWYgVVNIT1JUICpQVVNIT1JUOwotI2VuZGlmCi0KLSNpZm5kZWYgUExPTkdVCi10eXBlZGVmIFVMT05HICpQVUxPTkc7Ci0jZW5kaWYKLQotI2lmbmRlZiBWT0lECi10eXBlZGVmIHZvaWQgVk9JRDsKLSNlbmRpZgotCi0jaWZuZGVmIFBWT0lECi10eXBlZGVmIHZvaWQgKlBWT0lEOwotI2VuZGlmCi0KLSNpZm5kZWYgQk9PTEVBTgotdHlwZWRlZiBVQ0hBUiBCT09MRUFOOwotI2VuZGlmCi0vKgotI2lmbmRlZiBib29sCi10eXBlZGVmIFVDSEFSIGJvb2w7Ci0jZW5kaWYKLSovCi0jaWZkZWYgTElOVVhfS0VSTkVMCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgWEdJSU9BRERSRVNTOwotI2VuZGlmCi0KLSNpZmRlZiBMSU5VWF9YRjg2Ci0jaWYgWEY4Nl9WRVJTSU9OX0NVUlJFTlQgPCBYRjg2X1ZFUlNJT05fTlVNRVJJQyg0LDIsMCwwLDApCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgSU9BRERSRVNTOwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFhHSUlPQUREUkVTUzsKLSNlbHNlCi10eXBlZGVmIElPQUREUkVTUyBYR0lJT0FERFJFU1M7Ci0jZW5kaWYKLSNlbmRpZgogCiAjaWZuZGVmIFZCSU9TX1ZFUl9NQVhfTEVOR1RICi0jZGVmaW5lIFZCSU9TX1ZFUl9NQVhfTEVOR1RIICAgIDQKLSNlbmRpZgotCi0jaWZuZGVmIFdJTjIwMDAKLQotI2lmbmRlZiBMSU5VWF9LRVJORUwgICAvKiBGb3IgdGhlIGxpbnV4IGtlcm5lbCwgdGhpcyBpcyBkZWZpbmVkIGluIHhnaWZiLmggKi8KLSNpZm5kZWYgWEdJX0NISVBfVFlQRQotdHlwZWRlZiBlbnVtIF9YR0lfQ0hJUF9UWVBFIHsKLSAgICBYR0lfVkdBTGVnYWN5ID0gMCwKLSNpZmRlZiBMSU5VWF9YRjg2Ci0gICAgWEdJXzUzMCwKLSAgICBYR0lfT0xELAotI2VuZGlmCi0gICAgWEdJXzMwMCwKLSAgICBYR0lfNjMwLAotICAgIFhHSV82NDAsCi0gICAgWEdJXzMxNUgsCi0gICAgWEdJXzMxNSwKLSAgICBYR0lfMzE1UFJPLAotICAgIFhHSV81NTAsCi0gICAgWEdJXzY1MCwKLSAgICBYR0lfNjUwTSwKLSAgICBYR0lfNzQwLAotICAgIFhHSV8zMzAsCi0gICAgWEdJXzY2MSwKLSAgICBYR0lfNjYwLAotICAgIFhHSV83NjAsCi0gICAgWEc0MCA9IDMyLAotICAgIFhHNDEsCi0gICAgWEc0MiwKLSAgICBYRzQ1LAotICAgIFhHMjAgPSA0OCwKLSAgICBYRzIxLAotICAgIFhHMjcsCi0gICAgTUFYX1hHSV9DSElQCi19IFhHSV9DSElQX1RZUEU7Ci0jZW5kaWYKKyNkZWZpbmUgVkJJT1NfVkVSX01BWF9MRU5HVEggICAgNQogI2VuZGlmCiAKICNpZm5kZWYgWEdJX1ZCX0NISVBfVFlQRQotdHlwZWRlZiBlbnVtIF9YR0lfVkJfQ0hJUF9UWVBFIHsKK2VudW0gWEdJX1ZCX0NISVBfVFlQRSB7CiAgICAgVkJfQ0hJUF9MZWdhY3kgPSAwLAogICAgIFZCX0NISVBfMzAxLAogICAgIFZCX0NISVBfMzAxQiwKQEAgLTE0MywxMSArMjEsMTEgQEAKICAgICBWQl9DSElQXzMwMkVMViwKICAgICBWQl9DSElQX1VOS05PV04sIC8qIG90aGVyIHZpZGVvIGJyaWRnZSBvciBubyB2aWRlbyBicmlkZ2UgKi8KICAgICBNQVhfVkJfQ0hJUAotfSBYR0lfVkJfQ0hJUF9UWVBFOworfTsKICNlbmRpZgogCiAjaWZuZGVmIFhHSV9MQ0RfVFlQRQotdHlwZWRlZiBlbnVtIF9YR0lfTENEX1RZUEUgeworZW51bSBYR0lfTENEX1RZUEUgewogICAgIExDRF9JTlZBTElEID0gMCwKICAgICBMQ0RfMzIweDQ4MCwgICAgICAgLyogRlNUTiwgRFNUTiAqLwogICAgIExDRF82NDB4NDgwLApAQCAtMTcxLDE1NSArNDksOTAgQEAKICAgICBMQ0RfMjA0OHgxNTM2LAogICAgIExDRF9DVVNUT00sCiAgICAgTENEX1VOS05PV04KLX0gWEdJX0xDRF9UWVBFOworfTsKICNlbmRpZgogCi0jZW5kaWYgICAvKiBub3QgV0lOMjAwMCAqLwotCi0jaWZuZGVmIFBYR0lfRFNSZWcKLXR5cGVkZWYgc3RydWN0IF9YR0lfRFNSZWcKK3N0cnVjdCBYR0lfRFNSZWcKIHsKLSAgVUNIQVIgIGpJZHg7Ci0gIFVDSEFSICBqVmFsOwotfSBYR0lfRFNSZWcsICpQWEdJX0RTUmVnOwotI2VuZGlmCisgIHVuc2lnbmVkIGNoYXIgIGpJZHg7CisgIHVuc2lnbmVkIGNoYXIgIGpWYWw7Cit9OwogCi0jaWZuZGVmIFhHSV9IV19ERVZJQ0VfSU5GTwotCi10eXBlZGVmIHN0cnVjdCBfWEdJX0hXX0RFVklDRV9JTkZPICBYR0lfSFdfREVWSUNFX0lORk8sICpQWEdJX0hXX0RFVklDRV9JTkZPOwotCi10eXBlZGVmIEJPT0xFQU4gKCpQWEdJX1FVRVJZU1BBQ0UpICAgKFBYR0lfSFdfREVWSUNFX0lORk8sIFVMT05HLCBVTE9ORywgVUxPTkcgKik7Ci0KLXN0cnVjdCBfWEdJX0hXX0RFVklDRV9JTkZPCitzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvCiB7Ci0gICAgVUxPTkcgIHVsRXh0ZXJuYWxDaGlwOyAgICAgICAvKiBOTyBWQiBvciBvdGhlciB2aWRlbyBicmlkZ2UqLworICAgIHVuc2lnbmVkIGxvbmcgIHVsRXh0ZXJuYWxDaGlwOyAgICAgICAvKiBOTyBWQiBvciBvdGhlciB2aWRlbyBicmlkZ2UqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWYgdWpWQkNoaXBJRCA9IFZCX0NISVBfVU5LTk9XTiwgKi8KLSNpZmRlZiBMSU5VWF9YRjg2Ci0gICAgUENJVEFHIFBjaVRhZzsJCSAvKiBQQ0kgVGFnICovCi0jZW5kaWYKIAotICAgIFBVQ0hBUiAgcGpWaXJ0dWFsUm9tQmFzZTsgICAgLyogUk9NIGltYWdlICovCisgICAgdW5zaWduZWQgY2hhciAqcGpWaXJ0dWFsUm9tQmFzZTsgICAgLyogUk9NIGltYWdlICovCiAKLSAgICBCT09MRUFOIFVzZVJPTTsJCSAvKiBVc2UgdGhlIFJPTSBpbWFnZSBpZiBwcm92aWRlZCAqLworICAgIHVuc2lnbmVkIGNoYXIgVXNlUk9NOwkJIC8qIFVzZSB0aGUgUk9NIGltYWdlIGlmIHByb3ZpZGVkICovCiAKLSAgICBQVk9JRCAgIHBEZXZpY2U7CisgICAgdm9pZCAqcERldmljZTsKIAotICAgIFBVQ0hBUiAgcGpWaWRlb01lbW9yeUFkZHJlc3M7LyogYmFzZSB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzICovCisgICAgdW5zaWduZWQgY2hhciAqcGpWaWRlb01lbW9yeUFkZHJlc3M7LyogYmFzZSB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvZiBMaW5lYXIgVkdBIG1lbW9yeSAqLwogCi0gICAgVUxPTkcgIHVsVmlkZW9NZW1vcnlTaXplOyAgICAvKiBzaXplLCBpbiBieXRlcywgb2YgdGhlIG1lbW9yeSBvbiB0aGUgYm9hcmQgKi8KKyAgICB1bnNpZ25lZCBsb25nICB1bFZpZGVvTWVtb3J5U2l6ZTsgICAgLyogc2l6ZSwgaW4gYnl0ZXMsIG9mIHRoZSBtZW1vcnkgb24gdGhlIGJvYXJkICovCiAKLSAgICBQVUNIQVIgcGpJT0FkZHJlc3M7ICAgICAgICAgIC8qIGJhc2UgSS9PIGFkZHJlc3Mgb2YgVkdBIHBvcnRzICgweDNCMCkgKi8KKyAgICB1bnNpZ25lZCBjaGFyICpwaklPQWRkcmVzczsgICAgICAgICAgLyogYmFzZSBJL08gYWRkcmVzcyBvZiBWR0EgcG9ydHMgKDB4M0IwKSAqLwogCi0gICAgUFVDSEFSIHBqQ3VzdG9taXplZFJPTUltYWdlOworICAgIHVuc2lnbmVkIGNoYXIgKnBqQ3VzdG9taXplZFJPTUltYWdlOwogCi0gICAgUFVDSEFSIHBqMm5kVmlkZW9NZW1vcnlBZGRyZXNzOwotICAgIFVMT05HICB1bDJuZFZpZGVvTWVtb3J5U2l6ZTsKKyAgICB1bnNpZ25lZCBjaGFyICpwajJuZFZpZGVvTWVtb3J5QWRkcmVzczsKKyAgICB1bnNpZ25lZCBsb25nICB1bDJuZFZpZGVvTWVtb3J5U2l6ZTsKIAotICAgIFBVQ0hBUiBwajJuZElPQWRkcmVzczsKLS8qI2lmbmRlZiBXSU4yMDAwCi0gICAgWEdJSU9BRERSRVNTIHBqSU9BZGRyZXNzOyAgIC8vICBiYXNlIEkvTyBhZGRyZXNzIG9mIFZHQSBwb3J0cyAoMHgzQjApCi0jZW5kaWYgKi8KLSAgICBVQ0hBUiAgakNoaXBUeXBlOyAgICAgICAgICAgIC8qIFVzZWQgdG8gSWRlbnRpZnkgR3JhcGhpY3MgQ2hpcCAqLworICAgIHVuc2lnbmVkIGNoYXIgKnBqMm5kSU9BZGRyZXNzOworICAgIHVuc2lnbmVkIGNoYXIgIGpDaGlwVHlwZTsgICAgICAgICAgICAvKiBVc2VkIHRvIElkZW50aWZ5IEdyYXBoaWNzIENoaXAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmluZWQgaW4gdGhlIGRhdGEgc3RydWN0dXJlIHR5cGUgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAiWEdJX0NISVBfVFlQRSIgKi8KIAotICAgIFVDSEFSICBqQ2hpcFJldmlzaW9uOyAgICAgICAgLyogVXNlZCB0byBJZGVudGlmeSBHcmFwaGljcyBDaGlwIFJldmlzaW9uICovCisgICAgdW5zaWduZWQgY2hhciAgakNoaXBSZXZpc2lvbjsgICAgICAgIC8qIFVzZWQgdG8gSWRlbnRpZnkgR3JhcGhpY3MgQ2hpcCBSZXZpc2lvbiAqLwogCi0gICAgVUNIQVIgIHVqVkJDaGlwSUQ7ICAgICAgICAgICAvKiB0aGUgSUQgb2YgdmlkZW8gYnJpZGdlICovCisgICAgdW5zaWduZWQgY2hhciAgdWpWQkNoaXBJRDsgICAgICAgICAgIC8qIHRoZSBJRCBvZiB2aWRlbyBicmlkZ2UgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmluZWQgaW4gdGhlIGRhdGEgc3RydWN0dXJlIHR5cGUgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICJYR0lfVkJfQ0hJUF9UWVBFIiAqLwogCi0gICAgQk9PTEVBTiAgICBiTmV3U2NyYXRjaDsKKyAgICB1bnNpZ25lZCBjaGFyICAgIGJOZXdTY3JhdGNoOwogCi0gICAgVUxPTkcgIHVsQ1JUMkxDRFR5cGU7ICAgICAgICAvKiBkZWZpbmVkIGluIHRoZSBkYXRhIHN0cnVjdHVyZSB0eXBlICovCisgICAgdW5zaWduZWQgbG9uZyAgdWxDUlQyTENEVHlwZTsgICAgICAgIC8qIGRlZmluZWQgaW4gdGhlIGRhdGEgc3RydWN0dXJlIHR5cGUgKi8KIAotICAgIFVMT05HIHVzRXh0ZXJuYWxDaGlwOyAgICAgICAvKiBOTyBWQiBvciBvdGhlciB2aWRlbyBicmlkZ2UgKG90aGVyIHRoYW4gICovCisgICAgdW5zaWduZWQgbG9uZyB1c0V4dGVybmFsQ2hpcDsgICAgICAgLyogTk8gVkIgb3Igb3RoZXIgdmlkZW8gYnJpZGdlIChvdGhlciB0aGFuICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHZpZGVvIGJyaWRnZSkgKi8KIAotICAgIEJPT0xFQU4gYkludGVncmF0ZWRNTUVuYWJsZWQ7Lyogc3VwcG9ydGluZyBpbnRlZ3JhdGlvbiBNTSBlbmFibGUgKi8KKyAgICB1bnNpZ25lZCBjaGFyIGJJbnRlZ3JhdGVkTU1FbmFibGVkOy8qIHN1cHBvcnRpbmcgaW50ZWdyYXRpb24gTU0gZW5hYmxlICovCiAKLSAgICBCT09MRUFOIGJTa2lwRHJhbVNpemluZzsgICAgIC8qIFRydWU6IFNraXAgdmlkZW8gbWVtb3J5IHNpemluZy4gKi8KKyAgICB1bnNpZ25lZCBjaGFyIGJTa2lwRHJhbVNpemluZzsgICAgIC8qIFRydWU6IFNraXAgdmlkZW8gbWVtb3J5IHNpemluZy4gKi8KIAotICAgIEJPT0xFQU4gYlNraXBTZW5zZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJTa2lwU2Vuc2U7CiAKLSAgICBCT09MRUFOIGJJc1Bvd2VyU2F2aW5nOyAgICAgLyogVHJ1ZTogWEdJSW5pdCgpIGlzIGludm9rZWQgYnkgcG93ZXIgbWFuYWdlbWVudCwKKyAgICB1bnNpZ25lZCBjaGFyIGJJc1Bvd2VyU2F2aW5nOyAgICAgLyogVHJ1ZTogWEdJSW5pdCgpIGlzIGludm9rZWQgYnkgcG93ZXIgbWFuYWdlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIGJ5IDJuZCBhZGFwdGVyJ3MgaW5pdGlhbHphdGlvbiAqLwogCi0gICAgUFhHSV9EU1JlZyAgcFNSOyAgICAgICAgICAgICAvKiByZXN0b3JlIFNSIHJlZ2lzdGVycyBpbiBpbml0aWFsIGZ1bmN0aW9uLiAqLworICAgIHN0cnVjdCBYR0lfRFNSZWcgICpwU1I7ICAgICAgICAgICAgIC8qIHJlc3RvcmUgU1IgcmVnaXN0ZXJzIGluIGluaXRpYWwgZnVuY3Rpb24uICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgZGF0YSA6KGlkeCwgdmFsKSA9ICAoRkYsIEZGKS4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdGUgOiByZXN0b3JlIFNSIHJlZ2lzdGVycyBpZiAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJTa2lwRHJhbVNpemluZyA9IFRSVUUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJTa2lwRHJhbVNpemluZyA9IDEgKi8KIAotICAgIFBYR0lfRFNSZWcgIHBDUjsgICAgICAgICAgICAgLyogcmVzdG9yZSBDUiByZWdpc3RlcnMgaW4gaW5pdGlhbCBmdW5jdGlvbi4gKi8KKyAgICBzdHJ1Y3QgWEdJX0RTUmVnICAqcENSOyAgICAgICAgICAgICAvKiByZXN0b3JlIENSIHJlZ2lzdGVycyBpbiBpbml0aWFsIGZ1bmN0aW9uLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIGRhdGEgOihpZHgsIHZhbCkgPSAgKEZGLCBGRikgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdGUgOiByZXN0b3JlIGNSIHJlZ2lzdGVycyBpZiAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJTa2lwRHJhbVNpemluZyA9IFRSVUUgKi8KLS8qCi0jZW5kaWYKLSovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBiU2tpcERyYW1TaXppbmcgPSAxICovCiAKLSAgICBQWEdJX1FVRVJZU1BBQ0UgIHBRdWVyeVZHQUNvbmZpZ1NwYWNlOworCXVuc2lnbmVkIGNoYXIoKnBRdWVyeVZHQUNvbmZpZ1NwYWNlKShzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICosCisJCQkJCSAgICB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyAqKTsKIAotICAgIFBYR0lfUVVFUllTUEFDRSAgcFF1ZXJ5Tm9ydGhCcmlkZ2VTcGFjZTsKKwl1bnNpZ25lZCBjaGFyKCpwUXVlcnlOb3J0aEJyaWRnZVNwYWNlKShzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICosCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKik7CiAKLSAgICBVQ0hBUiAgc3pWQklPU1ZlcltWQklPU19WRVJfTUFYX0xFTkdUSF07CisgICAgdW5zaWduZWQgY2hhciBzelZCSU9TVmVyW1ZCSU9TX1ZFUl9NQVhfTEVOR1RIXTsKIAogfTsKLSNlbmRpZgogCiAvKiBBZGR0aW9uYWwgSU9DVEwgZm9yIGNvbW11bmljYXRpb24geGdpZmIgPD4gWCBkcml2ZXIgICAgICAgICovCiAvKiBJZiBjaGFuZ2luZyB0aGlzLCB4Z2lmYi5oIG11c3QgYWxzbyBiZSBjaGFuZ2VkIChmb3IgeGdpZmIpICovCiAKLSNpZmRlZiBMSU5VWF9YRjg2ICAvKiBXZSBkb24ndCB3YW50IHRoZSBYIGRyaXZlciB0byBkZXBlbmQgb24gdGhlIGtlcm5lbCBzb3VyY2UgKi8KLQotLyogaW9jdGwgZm9yIGlkZW50aWZ5aW5nIGFuZCBnaXZpbmcgc29tZSBpbmZvIChlc3AuIG1lbW9yeSBoZWFwIHN0YXJ0KSAqLwotI2RlZmluZSBYR0lGQl9HRVRfSU5GTyAgICAweDgwMDQ2ZWY4ICAvKiBXb3csIHdoYXQgYSB0ZXJyaWJsZSBoYWNrLi4uICovCi0KLS8qIFN0cnVjdHVyZSBhcmd1bWVudCBmb3IgWEdJRkJfR0VUX0lORk8gaW9jdGwgICovCi10eXBlZGVmIHN0cnVjdCBfWEdJRkJfSU5GTyB4Z2lmYl9pbmZvLCAqcHhnaWZiX2luZm87Ci0KLXN0cnVjdCBfWEdJRkJfSU5GTyB7Ci0JQ0FSRDMyIAl4Z2lmYl9pZDsgICAgICAgICAJLyogZm9yIGlkZW50aWZ5aW5nIHhnaWZiICovCi0jaWZuZGVmIFhHSUZCX0lECi0jZGVmaW5lIFhHSUZCX0lECSAgMHg1MzQ5NTM0NiAgICAvKiBJZGVudGlmeSBteXNlbGYgd2l0aCAnWEdJRicgKi8KLSNlbmRpZgotIAlDQVJEMzIgCWNoaXBfaWQ7CQkvKiBQQ0kgSUQgb2YgZGV0ZWN0ZWQgY2hpcCAqLwotCUNBUkQzMgltZW1vcnk7CQkJLyogdmlkZW8gbWVtb3J5IGluIEtCIHdoaWNoIHhnaWZiIG1hbmFnZXMgKi8KLQlDQVJEMzIJaGVhcHN0YXJ0OyAgICAgICAgICAgICAJLyogaGVhcCBzdGFydCAoPSB4Z2lmYiAibWVtIiBhcmd1bWVudCkgaW4gS0IgKi8KLQlDQVJEOCAJZmJ2aWRtb2RlOwkJLyogY3VycmVudCB4Z2lmYiBtb2RlICovCi0KLQlDQVJEOCAJeGdpZmJfdmVyc2lvbjsKLQlDQVJEOAl4Z2lmYl9yZXZpc2lvbjsKLQlDQVJEOCAJeGdpZmJfcGF0Y2hsZXZlbDsKLQotCUNBUkQ4IAl4Z2lmYl9jYXBzOwkJLyogeGdpZmIncyBjYXBhYmlsaXRpZXMgKi8KLQotCUNBUkQzMiAJeGdpZmJfdHFsZW47CQkvKiB0dXJibyBxdWV1ZSBsZW5ndGggKGluIEtCKSAqLwotCi0JQ0FSRDMyIAl4Z2lmYl9wY2lidXM7ICAgICAgCS8qIFRoZSBjYXJkJ3MgUENJIElEICovCi0JQ0FSRDMyIAl4Z2lmYl9wY2lzbG90OwotCUNBUkQzMiAJeGdpZmJfcGNpZnVuYzsKLQotCUNBUkQ4IAl4Z2lmYl9sY2RwZGM7Ci0KLQlDQVJEOAl4Z2lmYl9sY2RhOwotCi0JQ0FSRDMyCXhnaWZiX3ZiZmxhZ3M7Ci0JQ0FSRDMyCXhnaWZiX2N1cnJlbnR2YmZsYWdzOwotCi0JQ0FSRDMyIAl4Z2lmYl9zY2FsZWxjZDsKLQlDQVJEMzIgCXhnaWZiX3NwZWNpYWx0aW1pbmc7Ci0KLQlDQVJEOCAJeGdpZmJfaGF2ZWVtaTsKLQlDQVJEOCAJeGdpZmJfZW1pMzAseGdpZmJfZW1pMzEseGdpZmJfZW1pMzIseGdpZmJfZW1pMzM7Ci0JQ0FSRDggCXhnaWZiX2hhdmVlbWlsY2Q7Ci0KLQlDQVJEOCAJeGdpZmJfbGNkcGRjYTsKLQotCUNBUkQ4IHJlc2VydmVkWzIxMl07IAkJLyogZm9yIGZ1dHVyZSB1c2UgKi8KLX07Ci0jZW5kaWYKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy96cmFtL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvenJhbS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NTRhZTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvenJhbS9LY29uZmlnCkBAIC0wLDAgKzEsMjkgQEAKK2NvbmZpZyBaUkFNCisJdHJpc3RhdGUgIkNvbXByZXNzZWQgUkFNIGJsb2NrIGRldmljZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gQkxPQ0sKKwlzZWxlY3QgTFpPX0NPTVBSRVNTCisJc2VsZWN0IExaT19ERUNPTVBSRVNTCisJZGVmYXVsdCBuCisJaGVscAorCSAgQ3JlYXRlcyB2aXJ0dWFsIGJsb2NrIGRldmljZXMgY2FsbGVkIC9kZXYvenJhbVggKFggPSAwLCAxLCAuLi4pLgorCSAgUGFnZXMgd3JpdHRlbiB0byB0aGVzZSBkaXNrcyBhcmUgY29tcHJlc3NlZCBhbmQgc3RvcmVkIGluIG1lbW9yeQorCSAgaXRzZWxmLiBUaGVzZSBkaXNrcyBhbGxvdyB2ZXJ5IGZhc3QgSS9PIGFuZCBjb21wcmVzc2lvbiBwcm92aWRlcworCSAgZ29vZCBhbW91bnRzIG9mIG1lbW9yeSBzYXZpbmdzLgorCisJICBJdCBoYXMgc2V2ZXJhbCB1c2UgY2FzZXMsIGZvciBleGFtcGxlOiAvdG1wIHN0b3JhZ2UsIHVzZSBhcyBzd2FwCisJICBkaXNrcyBhbmQgbWF5YmUgbWFueSBtb3JlLgorCisJICBTZWUgenJhbS50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisJICBQcm9qZWN0IGhvbWU6IGh0dHA6Ly9jb21wY2FjaGUuZ29vZ2xlY29kZS5jb20vCisKK2NvbmZpZyBaUkFNX1NUQVRTCisJYm9vbCAiRW5hYmxlIHN0YXRpc3RpY3MgZm9yIGNvbXByZXNzZWQgUkFNIGRpc2tzIgorCWRlcGVuZHMgb24gWlJBTQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIEVuYWJsZSBzdGF0aXN0aWNzIGNvbGxlY3Rpb24gZm9yIGNvbXByZXNzZWQgUkFNIGRldmljZXMuIFN0YXRpc3RpY3MKKwkgIGFyZSBleHBvcnRlZCB0aHJvdWdoIGlvY3RsIGludGVyZmFjZSwgc28geW91IGhhdmUgdG8gdXNlIHpyYW1jb25maWcKKwkgIHByb2dyYW0gdG8gZ2V0IHRoZW0uIFRoaXMgYWRkcyBvbmx5IGEgbWluaW1hbCBvdmVyaGVhZC4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3pyYW0vTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvenJhbS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmMwODdhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3pyYW0vTWFrZWZpbGUKQEAgLTAsMCArMSwzIEBACit6cmFtLW9ianMJOj0JenJhbV9kcnYubyB4dm1hbGxvYy5vCisKK29iai0kKENPTkZJR19aUkFNKQkrPQl6cmFtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC94dm1hbGxvYy5jIGIvZHJpdmVycy9zdGFnaW5nL3pyYW0veHZtYWxsb2MuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3h2bWFsbG9jLmMKcmVuYW1lIHRvIGRyaXZlcnMvc3RhZ2luZy96cmFtL3h2bWFsbG9jLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC94dm1hbGxvYy5oIGIvZHJpdmVycy9zdGFnaW5nL3pyYW0veHZtYWxsb2MuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3h2bWFsbG9jLmgKcmVuYW1lIHRvIGRyaXZlcnMvc3RhZ2luZy96cmFtL3h2bWFsbG9jLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC94dm1hbGxvY19pbnQuaCBiL2RyaXZlcnMvc3RhZ2luZy96cmFtL3h2bWFsbG9jX2ludC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAveHZtYWxsb2NfaW50LmgKcmVuYW1lIHRvIGRyaXZlcnMvc3RhZ2luZy96cmFtL3h2bWFsbG9jX2ludC5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvenJhbS96cmFtLnR4dCBiL2RyaXZlcnMvc3RhZ2luZy96cmFtL3pyYW0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMGVkYzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvenJhbS96cmFtLnR4dApAQCAtMCwwICsxLDYyIEBACit6cmFtOiBDb21wcmVzc2VkIFJBTSBiYXNlZCBibG9jayBkZXZpY2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Byb2plY3QgaG9tZTogaHR0cDovL2NvbXBjYWNoZS5nb29nbGVjb2RlLmNvbS8KKworKiBJbnRyb2R1Y3Rpb24KKworVGhlIHpyYW0gbW9kdWxlIGNyZWF0ZXMgUkFNIGJhc2VkIGJsb2NrIGRldmljZXM6IC9kZXYvcmFtWCAoWCA9IDAsIDEsIC4uLikuCitQYWdlcyB3cml0dGVuIHRvIHRoZXNlIGRpc2tzIGFyZSBjb21wcmVzc2VkIGFuZCBzdG9yZWQgaW4gbWVtb3J5IGl0c2VsZi4KK1RoZXNlIGRpc2tzIGFsbG93IHZlcnkgZmFzdCBJL08gYW5kIGNvbXByZXNzaW9uIHByb3ZpZGVzIGdvb2QgYW1vdW50cyBvZgorbWVtb3J5IHNhdmluZ3MuCisKK1NlZSBwcm9qZWN0IGhvbWUgZm9yIHVzZSBjYXNlcywgcGVyZm9ybWFuY2UgbnVtYmVycyBhbmQgYSBsb3QgbW9yZS4KKworSW5kaXZpZHVhbCB6cmFtIGRldmljZXMgYXJlIGNvbmZpZ3VyZWQgYW5kIGluaXRpYWxpemVkIHVzaW5nIHpyYW1jb25maWcKK3VzZXJzcGFjZSB1dGlsaXR5IGFzIHNob3duIGluIGV4YW1wbGVzIGJlbG93LiBTZWUgenJhbWNvbmZpZyBtYW4gcGFnZSBmb3IKK21vcmUgZGV0YWlscy4KKworKiBVc2FnZQorCitGb2xsb3dpbmcgc2hvd3MgYSB0eXBpY2FsIHNlcXVlbmNlIG9mIHN0ZXBzIGZvciB1c2luZyB6cmFtLgorCisxKSBMb2FkIE1vZHVsZXM6CisJbW9kcHJvYmUgenJhbSBudW1fZGV2aWNlcz00CisJVGhpcyBjcmVhdGVzIDQgKHVuaW5pdGlhbGl6ZWQpIGRldmljZXM6IC9kZXYvenJhbXswLDEsMiwzfQorCShudW1fZGV2aWNlcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwuIERlZmF1bHQ6IDEpCisKKzIpIEluaXRpYWxpemU6CisJVXNlIHpyYW1jb25maWcgdXRpbGl0eSB0byBjb25maWd1cmUgYW5kIGluaXRpYWxpemUgaW5kaXZpZHVhbAorCXpyYW0gZGV2aWNlcy4gRm9yIGV4YW1wbGU6CisJenJhbWNvbmZpZyAvZGV2L3pyYW0wIC0taW5pdCAjIHVzZXMgZGVmYXVsdCB2YWx1ZSBvZiBkaXNrc2l6ZV9rYgorCXpyYW1jb25maWcgL2Rldi96cmFtMSAtLWRpc2tzaXplX2tiPTEwMjQwMCAjIDEwME1CIC9kZXYvenJhbTEKKworCSpTZWUgenJhbWNvbmZpZyBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBleGFtcGxlcyoKKworMykgQWN0aXZhdGU6CisJbWtzd2FwIC9kZXYvenJhbTAKKwlzd2Fwb24gL2Rldi96cmFtMAorCisJbWtmcy5leHQ0IC9kZXYvenJhbTEKKwltb3VudCAvZGV2L3pyYW0xIC90bXAKKworNCkgU3RhdHM6CisJenJhbWNvbmZpZyAvZGV2L3pyYW0wIC0tc3RhdHMKKwl6cmFtY29uZmlnIC9kZXYvenJhbTEgLS1zdGF0cworCis1KSBEZWFjdGl2YXRlOgorCXN3YXBvZmYgL2Rldi96cmFtMAorCXVtb3VudCAvZGV2L3pyYW0xCisKKzYpIFJlc2V0OgorCXpyYW1jb25maWcgL2Rldi96cmFtMCAtLXJlc2V0CisJenJhbWNvbmZpZyAvZGV2L3pyYW0xIC0tcmVzZXQKKwkoVGhpcyBmcmVlcyBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgZ2l2ZW4gZGV2aWNlKS4KKworCitQbGVhc2UgcmVwb3J0IGFueSBwcm9ibGVtcyBhdDoKKyAtIE1haWxpbmcgbGlzdDogbGludXgtbW0tY2MgYXQgbGFwdG9wIGRvdCBvcmcKKyAtIElzc3VlIHRyYWNrZXI6IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jb21wY2FjaGUvaXNzdWVzL2xpc3QKKworTml0aW4gR3VwdGEKK25ndXB0YUB2ZmxhcmUub3JnCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvenJhbS96cmFtX2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL3pyYW0venJhbV9kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2Q0ZDcxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3pyYW0venJhbV9kcnYuYwpAQCAtMCwwICsxLDgwNSBAQAorLyoKKyAqIENvbXByZXNzZWQgUkFNIGJsb2NrIGRldmljZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCAgTml0aW4gR3VwdGEKKyAqCisgKiBUaGlzIGNvZGUgaXMgcmVsZWFzZWQgdXNpbmcgYSBkdWFsIGxpY2Vuc2Ugc3RyYXRlZ3k6IEJTRC9HUEwKKyAqIFlvdSBjYW4gY2hvb3NlIHRoZSBsaWNlbmNlIHRoYXQgYmV0dGVyIGZpdHMgeW91ciByZXF1aXJlbWVudHMuCisgKgorICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIDMtY2xhdXNlIEJTRCBMaWNlbnNlCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjAKKyAqCisgKiBQcm9qZWN0IGhvbWU6IGh0dHA6Ly9jb21wY2FjaGUuZ29vZ2xlY29kZS5jb20KKyAqLworCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ6cmFtIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvYmlvLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbHpvLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisjaW5jbHVkZSAienJhbV9kcnYuaCIKKworLyogR2xvYmFscyAqLworc3RhdGljIGludCB6cmFtX21ham9yOworc3RhdGljIHN0cnVjdCB6cmFtICpkZXZpY2VzOworCisvKiBNb2R1bGUgcGFyYW1zIChkb2N1bWVudGF0aW9uIGF0IGVuZCkgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgbnVtX2RldmljZXM7CisKK3N0YXRpYyBpbnQgenJhbV90ZXN0X2ZsYWcoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwKKwkJCWVudW0genJhbV9wYWdlZmxhZ3MgZmxhZykKK3sKKwlyZXR1cm4genJhbS0+dGFibGVbaW5kZXhdLmZsYWdzICYgQklUKGZsYWcpOworfQorCitzdGF0aWMgdm9pZCB6cmFtX3NldF9mbGFnKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsCisJCQllbnVtIHpyYW1fcGFnZWZsYWdzIGZsYWcpCit7CisJenJhbS0+dGFibGVbaW5kZXhdLmZsYWdzIHw9IEJJVChmbGFnKTsKK30KKworc3RhdGljIHZvaWQgenJhbV9jbGVhcl9mbGFnKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsCisJCQllbnVtIHpyYW1fcGFnZWZsYWdzIGZsYWcpCit7CisJenJhbS0+dGFibGVbaW5kZXhdLmZsYWdzICY9IH5CSVQoZmxhZyk7Cit9CisKK3N0YXRpYyBpbnQgcGFnZV96ZXJvX2ZpbGxlZCh2b2lkICpwdHIpCit7CisJdW5zaWduZWQgaW50IHBvczsKKwl1bnNpZ25lZCBsb25nICpwYWdlOworCisJcGFnZSA9ICh1bnNpZ25lZCBsb25nICopcHRyOworCisJZm9yIChwb3MgPSAwOyBwb3MgIT0gUEFHRV9TSVpFIC8gc2l6ZW9mKCpwYWdlKTsgcG9zKyspIHsKKwkJaWYgKHBhZ2VbcG9zXSkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCB6cmFtX3NldF9kaXNrc2l6ZShzdHJ1Y3QgenJhbSAqenJhbSwgc2l6ZV90IHRvdGFscmFtX2J5dGVzKQoreworCWlmICghenJhbS0+ZGlza3NpemUpIHsKKwkJcHJfaW5mbygKKwkJImRpc2sgc2l6ZSBub3QgcHJvdmlkZWQuIFlvdSBjYW4gdXNlIGRpc2tzaXplX2tiIG1vZHVsZSAiCisJCSJwYXJhbSB0byBzcGVjaWZ5IHNpemUuXG5Vc2luZyBkZWZhdWx0OiAoJXUlJSBvZiBSQU0pLlxuIiwKKwkJZGVmYXVsdF9kaXNrc2l6ZV9wZXJjX3JhbQorCQkpOworCQl6cmFtLT5kaXNrc2l6ZSA9IGRlZmF1bHRfZGlza3NpemVfcGVyY19yYW0gKgorCQkJCQkodG90YWxyYW1fYnl0ZXMgLyAxMDApOworCX0KKworCWlmICh6cmFtLT5kaXNrc2l6ZSA+IDIgKiAodG90YWxyYW1fYnl0ZXMpKSB7CisJCXByX2luZm8oCisJCSJUaGVyZSBpcyBsaXR0bGUgcG9pbnQgY3JlYXRpbmcgYSB6cmFtIG9mIGdyZWF0ZXIgdGhhbiAiCisJCSJ0d2ljZSB0aGUgc2l6ZSBvZiBtZW1vcnkgc2luY2Ugd2UgZXhwZWN0IGEgMjoxIGNvbXByZXNzaW9uICIKKwkJInJhdGlvLiBOb3RlIHRoYXQgenJhbSB1c2VzIGFib3V0IDAuMSUlIG9mIHRoZSBzaXplIG9mICIKKwkJInRoZSBkaXNrIHdoZW4gbm90IGluIHVzZSBzbyBhIGh1Z2UgenJhbSBpcyAiCisJCSJ3YXN0ZWZ1bC5cbiIKKwkJIlx0TWVtb3J5IFNpemU6ICV6dSBrQlxuIgorCQkiXHRTaXplIHlvdSBzZWxlY3RlZDogJXp1IGtCXG4iCisJCSJDb250aW51aW5nIGFueXdheSAuLi5cbiIsCisJCXRvdGFscmFtX2J5dGVzID4+IDEwLCB6cmFtLT5kaXNrc2l6ZQorCQkpOworCX0KKworCXpyYW0tPmRpc2tzaXplICY9IFBBR0VfTUFTSzsKK30KKworc3RhdGljIHZvaWQgenJhbV9pb2N0bF9nZXRfc3RhdHMoc3RydWN0IHpyYW0gKnpyYW0sCisJCQlzdHJ1Y3QgenJhbV9pb2N0bF9zdGF0cyAqcykKK3sKKwlzLT5kaXNrc2l6ZSA9IHpyYW0tPmRpc2tzaXplOworCisjaWYgZGVmaW5lZChDT05GSUdfWlJBTV9TVEFUUykKKwl7CisJc3RydWN0IHpyYW1fc3RhdHMgKnJzID0gJnpyYW0tPnN0YXRzOworCXNpemVfdCBzdWNjX3dyaXRlcywgbWVtX3VzZWQ7CisJdW5zaWduZWQgaW50IGdvb2RfY29tcHJlc3NfcGVyYyA9IDAsIG5vX2NvbXByZXNzX3BlcmMgPSAwOworCisJbWVtX3VzZWQgPSB4dl9nZXRfdG90YWxfc2l6ZV9ieXRlcyh6cmFtLT5tZW1fcG9vbCkKKwkJCSsgKHJzLT5wYWdlc19leHBhbmQgPDwgUEFHRV9TSElGVCk7CisJc3VjY193cml0ZXMgPSB6cmFtX3N0YXQ2NF9yZWFkKHpyYW0sICZycy0+bnVtX3dyaXRlcykgLQorCQkJenJhbV9zdGF0NjRfcmVhZCh6cmFtLCAmcnMtPmZhaWxlZF93cml0ZXMpOworCisJaWYgKHN1Y2Nfd3JpdGVzICYmIHJzLT5wYWdlc19zdG9yZWQpIHsKKwkJZ29vZF9jb21wcmVzc19wZXJjID0gcnMtPmdvb2RfY29tcHJlc3MgKiAxMDAKKwkJCQkJLyBycy0+cGFnZXNfc3RvcmVkOworCQlub19jb21wcmVzc19wZXJjID0gcnMtPnBhZ2VzX2V4cGFuZCAqIDEwMAorCQkJCQkvIHJzLT5wYWdlc19zdG9yZWQ7CisJfQorCisJcy0+bnVtX3JlYWRzID0genJhbV9zdGF0NjRfcmVhZCh6cmFtLCAmcnMtPm51bV9yZWFkcyk7CisJcy0+bnVtX3dyaXRlcyA9IHpyYW1fc3RhdDY0X3JlYWQoenJhbSwgJnJzLT5udW1fd3JpdGVzKTsKKwlzLT5mYWlsZWRfcmVhZHMgPSB6cmFtX3N0YXQ2NF9yZWFkKHpyYW0sICZycy0+ZmFpbGVkX3JlYWRzKTsKKwlzLT5mYWlsZWRfd3JpdGVzID0genJhbV9zdGF0NjRfcmVhZCh6cmFtLCAmcnMtPmZhaWxlZF93cml0ZXMpOworCXMtPmludmFsaWRfaW8gPSB6cmFtX3N0YXQ2NF9yZWFkKHpyYW0sICZycy0+aW52YWxpZF9pbyk7CisJcy0+bm90aWZ5X2ZyZWUgPSB6cmFtX3N0YXQ2NF9yZWFkKHpyYW0sICZycy0+bm90aWZ5X2ZyZWUpOworCXMtPnBhZ2VzX3plcm8gPSBycy0+cGFnZXNfemVybzsKKworCXMtPmdvb2RfY29tcHJlc3NfcGN0ID0gZ29vZF9jb21wcmVzc19wZXJjOworCXMtPnBhZ2VzX2V4cGFuZF9wY3QgPSBub19jb21wcmVzc19wZXJjOworCisJcy0+cGFnZXNfc3RvcmVkID0gcnMtPnBhZ2VzX3N0b3JlZDsKKwlzLT5wYWdlc191c2VkID0gbWVtX3VzZWQgPj4gUEFHRV9TSElGVDsKKwlzLT5vcmlnX2RhdGFfc2l6ZSA9IHJzLT5wYWdlc19zdG9yZWQgPDwgUEFHRV9TSElGVDsKKwlzLT5jb21wcl9kYXRhX3NpemUgPSBycy0+Y29tcHJfc2l6ZTsKKwlzLT5tZW1fdXNlZF90b3RhbCA9IG1lbV91c2VkOworCX0KKyNlbmRpZiAvKiBDT05GSUdfWlJBTV9TVEFUUyAqLworfQorCitzdGF0aWMgdm9pZCB6cmFtX2ZyZWVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc2l6ZV90IGluZGV4KQoreworCXUzMiBjbGVuOworCXZvaWQgKm9iajsKKworCXN0cnVjdCBwYWdlICpwYWdlID0genJhbS0+dGFibGVbaW5kZXhdLnBhZ2U7CisJdTMyIG9mZnNldCA9IHpyYW0tPnRhYmxlW2luZGV4XS5vZmZzZXQ7CisKKwlpZiAodW5saWtlbHkoIXBhZ2UpKSB7CisJCS8qCisJCSAqIE5vIG1lbW9yeSBpcyBhbGxvY2F0ZWQgZm9yIHplcm8gZmlsbGVkIHBhZ2VzLgorCQkgKiBTaW1wbHkgY2xlYXIgemVybyBwYWdlIGZsYWcuCisJCSAqLworCQlpZiAoenJhbV90ZXN0X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fWkVSTykpIHsKKwkJCXpyYW1fY2xlYXJfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9aRVJPKTsKKwkJCXpyYW1fc3RhdF9kZWMoJnpyYW0tPnN0YXRzLnBhZ2VzX3plcm8pOworCQl9CisJCXJldHVybjsKKwl9CisKKwlpZiAodW5saWtlbHkoenJhbV90ZXN0X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fVU5DT01QUkVTU0VEKSkpIHsKKwkJY2xlbiA9IFBBR0VfU0laRTsKKwkJX19mcmVlX3BhZ2UocGFnZSk7CisJCXpyYW1fY2xlYXJfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9VTkNPTVBSRVNTRUQpOworCQl6cmFtX3N0YXRfZGVjKCZ6cmFtLT5zdGF0cy5wYWdlc19leHBhbmQpOworCQlnb3RvIG91dDsKKwl9CisKKwlvYmogPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCkgKyBvZmZzZXQ7CisJY2xlbiA9IHh2X2dldF9vYmplY3Rfc2l6ZShvYmopIC0gc2l6ZW9mKHN0cnVjdCB6b2JqX2hlYWRlcik7CisJa3VubWFwX2F0b21pYyhvYmosIEtNX1VTRVIwKTsKKworCXh2X2ZyZWUoenJhbS0+bWVtX3Bvb2wsIHBhZ2UsIG9mZnNldCk7CisJaWYgKGNsZW4gPD0gUEFHRV9TSVpFIC8gMikKKwkJenJhbV9zdGF0X2RlYygmenJhbS0+c3RhdHMuZ29vZF9jb21wcmVzcyk7CisKK291dDoKKwl6cmFtLT5zdGF0cy5jb21wcl9zaXplIC09IGNsZW47CisJenJhbV9zdGF0X2RlYygmenJhbS0+c3RhdHMucGFnZXNfc3RvcmVkKTsKKworCXpyYW0tPnRhYmxlW2luZGV4XS5wYWdlID0gTlVMTDsKKwl6cmFtLT50YWJsZVtpbmRleF0ub2Zmc2V0ID0gMDsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3plcm9fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwl2b2lkICp1c2VyX21lbTsKKworCXVzZXJfbWVtID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCW1lbXNldCh1c2VyX21lbSwgMCwgUEFHRV9TSVpFKTsKKwlrdW5tYXBfYXRvbWljKHVzZXJfbWVtLCBLTV9VU0VSMCk7CisKKwlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3VuY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLAorCQkJCXN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpCit7CisJdW5zaWduZWQgY2hhciAqdXNlcl9tZW0sICpjbWVtOworCisJdXNlcl9tZW0gPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJY21lbSA9IGttYXBfYXRvbWljKHpyYW0tPnRhYmxlW2luZGV4XS5wYWdlLCBLTV9VU0VSMSkgKworCQkJenJhbS0+dGFibGVbaW5kZXhdLm9mZnNldDsKKworCW1lbWNweSh1c2VyX21lbSwgY21lbSwgUEFHRV9TSVpFKTsKKwlrdW5tYXBfYXRvbWljKHVzZXJfbWVtLCBLTV9VU0VSMCk7CisJa3VubWFwX2F0b21pYyhjbWVtLCBLTV9VU0VSMSk7CisKKwlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKK30KKworc3RhdGljIGludCB6cmFtX3JlYWQoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbykKK3sKKworCWludCBpOworCXUzMiBpbmRleDsKKwlzdHJ1Y3QgYmlvX3ZlYyAqYnZlYzsKKworCXpyYW1fc3RhdDY0X2luYyh6cmFtLCAmenJhbS0+c3RhdHMubnVtX3JlYWRzKTsKKworCWluZGV4ID0gYmlvLT5iaV9zZWN0b3IgPj4gU0VDVE9SU19QRVJfUEFHRV9TSElGVDsKKwliaW9fZm9yX2VhY2hfc2VnbWVudChidmVjLCBiaW8sIGkpIHsKKwkJaW50IHJldDsKKwkJc2l6ZV90IGNsZW47CisJCXN0cnVjdCBwYWdlICpwYWdlOworCQlzdHJ1Y3Qgem9ial9oZWFkZXIgKnpoZWFkZXI7CisJCXVuc2lnbmVkIGNoYXIgKnVzZXJfbWVtLCAqY21lbTsKKworCQlwYWdlID0gYnZlYy0+YnZfcGFnZTsKKworCQlpZiAoenJhbV90ZXN0X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fWkVSTykpIHsKKwkJCWhhbmRsZV96ZXJvX3BhZ2UocGFnZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFJlcXVlc3RlZCBwYWdlIGlzIG5vdCBwcmVzZW50IGluIGNvbXByZXNzZWQgYXJlYSAqLworCQlpZiAodW5saWtlbHkoIXpyYW0tPnRhYmxlW2luZGV4XS5wYWdlKSkgeworCQkJcHJfZGVidWcoIlJlYWQgYmVmb3JlIHdyaXRlOiBzZWN0b3I9JWx1LCBzaXplPSV1IiwKKwkJCQkodWxvbmcpKGJpby0+Ymlfc2VjdG9yKSwgYmlvLT5iaV9zaXplKTsKKwkJCS8qIERvIG5vdGhpbmcgKi8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogUGFnZSBpcyBzdG9yZWQgdW5jb21wcmVzc2VkIHNpbmNlIGl0J3MgaW5jb21wcmVzc2libGUgKi8KKwkJaWYgKHVubGlrZWx5KHpyYW1fdGVzdF9mbGFnKHpyYW0sIGluZGV4LCBaUkFNX1VOQ09NUFJFU1NFRCkpKSB7CisJCQloYW5kbGVfdW5jb21wcmVzc2VkX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpOworCQkJY29udGludWU7CisJCX0KKworCQl1c2VyX21lbSA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwkJY2xlbiA9IFBBR0VfU0laRTsKKworCQljbWVtID0ga21hcF9hdG9taWMoenJhbS0+dGFibGVbaW5kZXhdLnBhZ2UsIEtNX1VTRVIxKSArCisJCQkJenJhbS0+dGFibGVbaW5kZXhdLm9mZnNldDsKKworCQlyZXQgPSBsem8xeF9kZWNvbXByZXNzX3NhZmUoCisJCQljbWVtICsgc2l6ZW9mKCp6aGVhZGVyKSwKKwkJCXh2X2dldF9vYmplY3Rfc2l6ZShjbWVtKSAtIHNpemVvZigqemhlYWRlciksCisJCQl1c2VyX21lbSwgJmNsZW4pOworCisJCWt1bm1hcF9hdG9taWModXNlcl9tZW0sIEtNX1VTRVIwKTsKKwkJa3VubWFwX2F0b21pYyhjbWVtLCBLTV9VU0VSMSk7CisKKwkJLyogU2hvdWxkIE5FVkVSIGhhcHBlbi4gUmV0dXJuIGJpbyBlcnJvciBpZiBpdCBkb2VzLiAqLworCQlpZiAodW5saWtlbHkocmV0ICE9IExaT19FX09LKSkgeworCQkJcHJfZXJyKCJEZWNvbXByZXNzaW9uIGZhaWxlZCEgZXJyPSVkLCBwYWdlPSV1XG4iLAorCQkJCXJldCwgaW5kZXgpOworCQkJenJhbV9zdGF0NjRfaW5jKHpyYW0sICZ6cmFtLT5zdGF0cy5mYWlsZWRfcmVhZHMpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKKwkJaW5kZXgrKzsKKwl9CisKKwlzZXRfYml0KEJJT19VUFRPREFURSwgJmJpby0+YmlfZmxhZ3MpOworCWJpb19lbmRpbyhiaW8sIDApOworCXJldHVybiAwOworCitvdXQ6CisJYmlvX2lvX2Vycm9yKGJpbyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgenJhbV93cml0ZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpbyAqYmlvKQoreworCWludCBpOworCXUzMiBpbmRleDsKKwlzdHJ1Y3QgYmlvX3ZlYyAqYnZlYzsKKworCXpyYW1fc3RhdDY0X2luYyh6cmFtLCAmenJhbS0+c3RhdHMubnVtX3dyaXRlcyk7CisKKwlpbmRleCA9IGJpby0+Ymlfc2VjdG9yID4+IFNFQ1RPUlNfUEVSX1BBR0VfU0hJRlQ7CisKKwliaW9fZm9yX2VhY2hfc2VnbWVudChidmVjLCBiaW8sIGkpIHsKKwkJaW50IHJldDsKKwkJdTMyIG9mZnNldDsKKwkJc2l6ZV90IGNsZW47CisJCXN0cnVjdCB6b2JqX2hlYWRlciAqemhlYWRlcjsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UsICpwYWdlX3N0b3JlOworCQl1bnNpZ25lZCBjaGFyICp1c2VyX21lbSwgKmNtZW0sICpzcmM7CisKKwkJcGFnZSA9IGJ2ZWMtPmJ2X3BhZ2U7CisJCXNyYyA9IHpyYW0tPmNvbXByZXNzX2J1ZmZlcjsKKworCQkvKgorCQkgKiBTeXN0ZW0gb3ZlcndyaXRlcyB1bnVzZWQgc2VjdG9ycy4gRnJlZSBtZW1vcnkgYXNzb2NpYXRlZAorCQkgKiB3aXRoIHRoaXMgc2VjdG9yIG5vdy4KKwkJICovCisJCWlmICh6cmFtLT50YWJsZVtpbmRleF0ucGFnZSB8fAorCQkJCXpyYW1fdGVzdF9mbGFnKHpyYW0sIGluZGV4LCBaUkFNX1pFUk8pKQorCQkJenJhbV9mcmVlX3BhZ2UoenJhbSwgaW5kZXgpOworCisJCW11dGV4X2xvY2soJnpyYW0tPmxvY2spOworCisJCXVzZXJfbWVtID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCQlpZiAocGFnZV96ZXJvX2ZpbGxlZCh1c2VyX21lbSkpIHsKKwkJCWt1bm1hcF9hdG9taWModXNlcl9tZW0sIEtNX1VTRVIwKTsKKwkJCW11dGV4X3VubG9jaygmenJhbS0+bG9jayk7CisJCQl6cmFtX3N0YXRfaW5jKCZ6cmFtLT5zdGF0cy5wYWdlc196ZXJvKTsKKwkJCXpyYW1fc2V0X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fWkVSTyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXJldCA9IGx6bzF4XzFfY29tcHJlc3ModXNlcl9tZW0sIFBBR0VfU0laRSwgc3JjLCAmY2xlbiwKKwkJCQkJenJhbS0+Y29tcHJlc3Nfd29ya21lbSk7CisKKwkJa3VubWFwX2F0b21pYyh1c2VyX21lbSwgS01fVVNFUjApOworCisJCWlmICh1bmxpa2VseShyZXQgIT0gTFpPX0VfT0spKSB7CisJCQltdXRleF91bmxvY2soJnpyYW0tPmxvY2spOworCQkJcHJfZXJyKCJDb21wcmVzc2lvbiBmYWlsZWQhIGVycj0lZFxuIiwgcmV0KTsKKwkJCXpyYW1fc3RhdDY0X2luYyh6cmFtLCAmenJhbS0+c3RhdHMuZmFpbGVkX3dyaXRlcyk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCS8qCisJCSAqIFBhZ2UgaXMgaW5jb21wcmVzc2libGUuIFN0b3JlIGl0IGFzLWlzICh1bmNvbXByZXNzZWQpCisJCSAqIHNpbmNlIHdlIGRvIG5vdCB3YW50IHRvIHJldHVybiB0b28gbWFueSBkaXNrIHdyaXRlCisJCSAqIGVycm9ycyB3aGljaCBoYXMgc2lkZSBlZmZlY3Qgb2YgaGFuZ2luZyB0aGUgc3lzdGVtLgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KGNsZW4gPiBtYXhfenBhZ2Vfc2l6ZSkpIHsKKwkJCWNsZW4gPSBQQUdFX1NJWkU7CisJCQlwYWdlX3N0b3JlID0gYWxsb2NfcGFnZShHRlBfTk9JTyB8IF9fR0ZQX0hJR0hNRU0pOworCQkJaWYgKHVubGlrZWx5KCFwYWdlX3N0b3JlKSkgeworCQkJCW11dGV4X3VubG9jaygmenJhbS0+bG9jayk7CisJCQkJcHJfaW5mbygiRXJyb3IgYWxsb2NhdGluZyBtZW1vcnkgZm9yICIKKwkJCQkJImluY29tcHJlc3NpYmxlIHBhZ2U6ICV1XG4iLCBpbmRleCk7CisJCQkJenJhbV9zdGF0NjRfaW5jKHpyYW0sCisJCQkJCSZ6cmFtLT5zdGF0cy5mYWlsZWRfd3JpdGVzKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJb2Zmc2V0ID0gMDsKKwkJCXpyYW1fc2V0X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fVU5DT01QUkVTU0VEKTsKKwkJCXpyYW1fc3RhdF9pbmMoJnpyYW0tPnN0YXRzLnBhZ2VzX2V4cGFuZCk7CisJCQl6cmFtLT50YWJsZVtpbmRleF0ucGFnZSA9IHBhZ2Vfc3RvcmU7CisJCQlzcmMgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJCQlnb3RvIG1lbXN0b3JlOworCQl9CisKKwkJaWYgKHh2X21hbGxvYyh6cmFtLT5tZW1fcG9vbCwgY2xlbiArIHNpemVvZigqemhlYWRlciksCisJCQkJJnpyYW0tPnRhYmxlW2luZGV4XS5wYWdlLCAmb2Zmc2V0LAorCQkJCUdGUF9OT0lPIHwgX19HRlBfSElHSE1FTSkpIHsKKwkJCW11dGV4X3VubG9jaygmenJhbS0+bG9jayk7CisJCQlwcl9pbmZvKCJFcnJvciBhbGxvY2F0aW5nIG1lbW9yeSBmb3IgY29tcHJlc3NlZCAiCisJCQkJInBhZ2U6ICV1LCBzaXplPSV6dVxuIiwgaW5kZXgsIGNsZW4pOworCQkJenJhbV9zdGF0NjRfaW5jKHpyYW0sICZ6cmFtLT5zdGF0cy5mYWlsZWRfd3JpdGVzKTsKKwkJCWdvdG8gb3V0OworCQl9CisKK21lbXN0b3JlOgorCQl6cmFtLT50YWJsZVtpbmRleF0ub2Zmc2V0ID0gb2Zmc2V0OworCisJCWNtZW0gPSBrbWFwX2F0b21pYyh6cmFtLT50YWJsZVtpbmRleF0ucGFnZSwgS01fVVNFUjEpICsKKwkJCQl6cmFtLT50YWJsZVtpbmRleF0ub2Zmc2V0OworCisjaWYgMAorCQkvKiBCYWNrLXJlZmVyZW5jZSBuZWVkZWQgZm9yIG1lbW9yeSBkZWZyYWdtZW50YXRpb24gKi8KKwkJaWYgKCF6cmFtX3Rlc3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9VTkNPTVBSRVNTRUQpKSB7CisJCQl6aGVhZGVyID0gKHN0cnVjdCB6b2JqX2hlYWRlciAqKWNtZW07CisJCQl6aGVhZGVyLT50YWJsZV9pZHggPSBpbmRleDsKKwkJCWNtZW0gKz0gc2l6ZW9mKCp6aGVhZGVyKTsKKwkJfQorI2VuZGlmCisKKwkJbWVtY3B5KGNtZW0sIHNyYywgY2xlbik7CisKKwkJa3VubWFwX2F0b21pYyhjbWVtLCBLTV9VU0VSMSk7CisJCWlmICh1bmxpa2VseSh6cmFtX3Rlc3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9VTkNPTVBSRVNTRUQpKSkKKwkJCWt1bm1hcF9hdG9taWMoc3JjLCBLTV9VU0VSMCk7CisKKwkJLyogVXBkYXRlIHN0YXRzICovCisJCXpyYW0tPnN0YXRzLmNvbXByX3NpemUgKz0gY2xlbjsKKwkJenJhbV9zdGF0X2luYygmenJhbS0+c3RhdHMucGFnZXNfc3RvcmVkKTsKKwkJaWYgKGNsZW4gPD0gUEFHRV9TSVpFIC8gMikKKwkJCXpyYW1fc3RhdF9pbmMoJnpyYW0tPnN0YXRzLmdvb2RfY29tcHJlc3MpOworCisJCW11dGV4X3VubG9jaygmenJhbS0+bG9jayk7CisJCWluZGV4Kys7CisJfQorCisJc2V0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKTsKKwliaW9fZW5kaW8oYmlvLCAwKTsKKwlyZXR1cm4gMDsKKworb3V0OgorCWJpb19pb19lcnJvcihiaW8pOworCXJldHVybiAwOworfQorCisvKgorICogQ2hlY2sgaWYgcmVxdWVzdCBpcyB3aXRoaW4gYm91bmRzIGFuZCBwYWdlIGFsaWduZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHZhbGlkX2lvX3JlcXVlc3Qoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbykKK3sKKwlpZiAodW5saWtlbHkoCisJCShiaW8tPmJpX3NlY3RvciA+PSAoenJhbS0+ZGlza3NpemUgPj4gU0VDVE9SX1NISUZUKSkgfHwKKwkJKGJpby0+Ymlfc2VjdG9yICYgKFNFQ1RPUlNfUEVSX1BBR0UgLSAxKSkgfHwKKwkJKGJpby0+Ymlfc2l6ZSAmIChQQUdFX1NJWkUgLSAxKSkpKSB7CisKKwkJcmV0dXJuIDA7CisJfQorCisJLyogSS9PIHJlcXVlc3QgaXMgdmFsaWQgKi8KKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIEhhbmRsZXIgZnVuY3Rpb24gZm9yIGFsbCB6cmFtIEkvTyByZXF1ZXN0cy4KKyAqLworc3RhdGljIGludCB6cmFtX21ha2VfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcXVldWUsIHN0cnVjdCBiaW8gKmJpbykKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgenJhbSAqenJhbSA9IHF1ZXVlLT5xdWV1ZWRhdGE7CisKKwlpZiAodW5saWtlbHkoIXpyYW0tPmluaXRfZG9uZSkpIHsKKwkJYmlvX2lvX2Vycm9yKGJpbyk7CisJCXJldHVybiAwOworCX0KKworCWlmICghdmFsaWRfaW9fcmVxdWVzdCh6cmFtLCBiaW8pKSB7CisJCXpyYW1fc3RhdDY0X2luYyh6cmFtLCAmenJhbS0+c3RhdHMuaW52YWxpZF9pbyk7CisJCWJpb19pb19lcnJvcihiaW8pOworCQlyZXR1cm4gMDsKKwl9CisKKwlzd2l0Y2ggKGJpb19kYXRhX2RpcihiaW8pKSB7CisJY2FzZSBSRUFEOgorCQlyZXQgPSB6cmFtX3JlYWQoenJhbSwgYmlvKTsKKwkJYnJlYWs7CisKKwljYXNlIFdSSVRFOgorCQlyZXQgPSB6cmFtX3dyaXRlKHpyYW0sIGJpbyk7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHJlc2V0X2RldmljZShzdHJ1Y3QgenJhbSAqenJhbSkKK3sKKwlzaXplX3QgaW5kZXg7CisKKwkvKiBEbyBub3QgYWNjZXB0IGFueSBuZXcgSS9PIHJlcXVlc3QgKi8KKwl6cmFtLT5pbml0X2RvbmUgPSAwOworCisJLyogRnJlZSB2YXJpb3VzIHBlci1kZXZpY2UgYnVmZmVycyAqLworCWtmcmVlKHpyYW0tPmNvbXByZXNzX3dvcmttZW0pOworCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpenJhbS0+Y29tcHJlc3NfYnVmZmVyLCAxKTsKKworCXpyYW0tPmNvbXByZXNzX3dvcmttZW0gPSBOVUxMOworCXpyYW0tPmNvbXByZXNzX2J1ZmZlciA9IE5VTEw7CisKKwkvKiBGcmVlIGFsbCBwYWdlcyB0aGF0IGFyZSBzdGlsbCBpbiB0aGlzIHpyYW0gZGV2aWNlICovCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgenJhbS0+ZGlza3NpemUgPj4gUEFHRV9TSElGVDsgaW5kZXgrKykgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwkJdTE2IG9mZnNldDsKKworCQlwYWdlID0genJhbS0+dGFibGVbaW5kZXhdLnBhZ2U7CisJCW9mZnNldCA9IHpyYW0tPnRhYmxlW2luZGV4XS5vZmZzZXQ7CisKKwkJaWYgKCFwYWdlKQorCQkJY29udGludWU7CisKKwkJaWYgKHVubGlrZWx5KHpyYW1fdGVzdF9mbGFnKHpyYW0sIGluZGV4LCBaUkFNX1VOQ09NUFJFU1NFRCkpKQorCQkJX19mcmVlX3BhZ2UocGFnZSk7CisJCWVsc2UKKwkJCXh2X2ZyZWUoenJhbS0+bWVtX3Bvb2wsIHBhZ2UsIG9mZnNldCk7CisJfQorCisJdmZyZWUoenJhbS0+dGFibGUpOworCXpyYW0tPnRhYmxlID0gTlVMTDsKKworCXh2X2Rlc3Ryb3lfcG9vbCh6cmFtLT5tZW1fcG9vbCk7CisJenJhbS0+bWVtX3Bvb2wgPSBOVUxMOworCisJLyogUmVzZXQgc3RhdHMgKi8KKwltZW1zZXQoJnpyYW0tPnN0YXRzLCAwLCBzaXplb2YoenJhbS0+c3RhdHMpKTsKKworCXpyYW0tPmRpc2tzaXplID0gMDsKK30KKworc3RhdGljIGludCB6cmFtX2lvY3RsX2luaXRfZGV2aWNlKHN0cnVjdCB6cmFtICp6cmFtKQoreworCWludCByZXQ7CisJc2l6ZV90IG51bV9wYWdlczsKKworCWlmICh6cmFtLT5pbml0X2RvbmUpIHsKKwkJcHJfaW5mbygiRGV2aWNlIGFscmVhZHkgaW5pdGlhbGl6ZWQhXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwl6cmFtX3NldF9kaXNrc2l6ZSh6cmFtLCB0b3RhbHJhbV9wYWdlcyA8PCBQQUdFX1NISUZUKTsKKworCXpyYW0tPmNvbXByZXNzX3dvcmttZW0gPSBremFsbG9jKExaTzFYX01FTV9DT01QUkVTUywgR0ZQX0tFUk5FTCk7CisJaWYgKCF6cmFtLT5jb21wcmVzc193b3JrbWVtKSB7CisJCXByX2VycigiRXJyb3IgYWxsb2NhdGluZyBjb21wcmVzc29yIHdvcmtpbmcgbWVtb3J5IVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisKKwl6cmFtLT5jb21wcmVzc19idWZmZXIgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoX19HRlBfWkVSTywgMSk7CisJaWYgKCF6cmFtLT5jb21wcmVzc19idWZmZXIpIHsKKwkJcHJfZXJyKCJFcnJvciBhbGxvY2F0aW5nIGNvbXByZXNzb3IgYnVmZmVyIHNwYWNlXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCW51bV9wYWdlcyA9IHpyYW0tPmRpc2tzaXplID4+IFBBR0VfU0hJRlQ7CisJenJhbS0+dGFibGUgPSB2bWFsbG9jKG51bV9wYWdlcyAqIHNpemVvZigqenJhbS0+dGFibGUpKTsKKwlpZiAoIXpyYW0tPnRhYmxlKSB7CisJCXByX2VycigiRXJyb3IgYWxsb2NhdGluZyB6cmFtIGFkZHJlc3MgdGFibGVcbiIpOworCQkvKiBUbyBwcmV2ZW50IGFjY2Vzc2luZyB0YWJsZSBlbnRyaWVzIGR1cmluZyBjbGVhbnVwICovCisJCXpyYW0tPmRpc2tzaXplID0gMDsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKwltZW1zZXQoenJhbS0+dGFibGUsIDAsIG51bV9wYWdlcyAqIHNpemVvZigqenJhbS0+dGFibGUpKTsKKworCXNldF9jYXBhY2l0eSh6cmFtLT5kaXNrLCB6cmFtLT5kaXNrc2l6ZSA+PiBTRUNUT1JfU0hJRlQpOworCisJLyogenJhbSBkZXZpY2VzIHNvcnQgb2YgcmVzZW1ibGVzIG5vbi1yb3RhdGlvbmFsIGRpc2tzICovCisJcXVldWVfZmxhZ19zZXRfdW5sb2NrZWQoUVVFVUVfRkxBR19OT05ST1QsIHpyYW0tPmRpc2stPnF1ZXVlKTsKKworCXpyYW0tPm1lbV9wb29sID0geHZfY3JlYXRlX3Bvb2woKTsKKwlpZiAoIXpyYW0tPm1lbV9wb29sKSB7CisJCXByX2VycigiRXJyb3IgY3JlYXRpbmcgbWVtb3J5IHBvb2xcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJenJhbS0+aW5pdF9kb25lID0gMTsKKworCXByX2RlYnVnKCJJbml0aWFsaXphdGlvbiBkb25lIVxuIik7CisJcmV0dXJuIDA7CisKK2ZhaWw6CisJcmVzZXRfZGV2aWNlKHpyYW0pOworCisJcHJfZXJyKCJJbml0aWFsaXphdGlvbiBmYWlsZWQ6IGVycj0lZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHpyYW1faW9jdGxfcmVzZXRfZGV2aWNlKHN0cnVjdCB6cmFtICp6cmFtKQoreworCWlmICh6cmFtLT5pbml0X2RvbmUpCisJCXJlc2V0X2RldmljZSh6cmFtKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpyYW1faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IHJldCA9IDA7CisJc2l6ZV90IGRpc2tzaXplX2tiOworCisJc3RydWN0IHpyYW0gKnpyYW0gPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgWlJBTUlPX1NFVF9ESVNLU0laRV9LQjoKKwkJaWYgKHpyYW0tPmluaXRfZG9uZSkgeworCQkJcmV0ID0gLUVCVVNZOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZkaXNrc2l6ZV9rYiwgKHZvaWQgKilhcmcsCisJCQkJCQlfSU9DX1NJWkUoY21kKSkpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCQl6cmFtLT5kaXNrc2l6ZSA9IGRpc2tzaXplX2tiIDw8IDEwOworCQlwcl9pbmZvKCJEaXNrIHNpemUgc2V0IHRvICV6dSBrQlxuIiwgZGlza3NpemVfa2IpOworCQlicmVhazsKKworCWNhc2UgWlJBTUlPX0dFVF9TVEFUUzoKKwl7CisJCXN0cnVjdCB6cmFtX2lvY3RsX3N0YXRzICpzdGF0czsKKwkJaWYgKCF6cmFtLT5pbml0X2RvbmUpIHsKKwkJCXJldCA9IC1FTk9UVFk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlzdGF0cyA9IGt6YWxsb2Moc2l6ZW9mKCpzdGF0cyksIEdGUF9LRVJORUwpOworCQlpZiAoIXN0YXRzKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKwkJenJhbV9pb2N0bF9nZXRfc3RhdHMoenJhbSwgc3RhdHMpOworCQlpZiAoY29weV90b191c2VyKCh2b2lkICopYXJnLCBzdGF0cywgc2l6ZW9mKCpzdGF0cykpKSB7CisJCQlrZnJlZShzdGF0cyk7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKwkJa2ZyZWUoc3RhdHMpOworCQlicmVhazsKKwl9CisJY2FzZSBaUkFNSU9fSU5JVDoKKwkJcmV0ID0genJhbV9pb2N0bF9pbml0X2RldmljZSh6cmFtKTsKKwkJYnJlYWs7CisKKwljYXNlIFpSQU1JT19SRVNFVDoKKwkJLyogRG8gbm90IHJlc2V0IGFuIGFjdGl2ZSBkZXZpY2UhICovCisJCWlmIChiZGV2LT5iZF9ob2xkZXJzKSB7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCS8qIE1ha2Ugc3VyZSBhbGwgcGVuZGluZyBJL08gaXMgZmluaXNoZWQgKi8KKwkJaWYgKGJkZXYpCisJCQlmc3luY19iZGV2KGJkZXYpOworCisJCXJldCA9IHpyYW1faW9jdGxfcmVzZXRfZGV2aWNlKHpyYW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByX2luZm8oIkludmFsaWQgaW9jdGwgJXVcbiIsIGNtZCk7CisJCXJldCA9IC1FTk9UVFk7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCB6cmFtX3Nsb3RfZnJlZV9ub3RpZnkoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgbG9uZyBpbmRleCkKK3sKKwlzdHJ1Y3QgenJhbSAqenJhbTsKKworCXpyYW0gPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJenJhbV9mcmVlX3BhZ2UoenJhbSwgaW5kZXgpOworCXpyYW1fc3RhdDY0X2luYyh6cmFtLCAmenJhbS0+c3RhdHMubm90aWZ5X2ZyZWUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHpyYW1fZGV2b3BzID0geworCS5pb2N0bCA9IHpyYW1faW9jdGwsCisJLnN3YXBfc2xvdF9mcmVlX25vdGlmeSA9IHpyYW1fc2xvdF9mcmVlX25vdGlmeSwKKwkub3duZXIgPSBUSElTX01PRFVMRQorfTsKKworc3RhdGljIGludCBjcmVhdGVfZGV2aWNlKHN0cnVjdCB6cmFtICp6cmFtLCBpbnQgZGV2aWNlX2lkKQoreworCWludCByZXQgPSAwOworCisJbXV0ZXhfaW5pdCgmenJhbS0+bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnpyYW0tPnN0YXQ2NF9sb2NrKTsKKworCXpyYW0tPnF1ZXVlID0gYmxrX2FsbG9jX3F1ZXVlKEdGUF9LRVJORUwpOworCWlmICghenJhbS0+cXVldWUpIHsKKwkJcHJfZXJyKCJFcnJvciBhbGxvY2F0aW5nIGRpc2sgcXVldWUgZm9yIGRldmljZSAlZFxuIiwKKwkJCWRldmljZV9pZCk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWJsa19xdWV1ZV9tYWtlX3JlcXVlc3QoenJhbS0+cXVldWUsIHpyYW1fbWFrZV9yZXF1ZXN0KTsKKwl6cmFtLT5xdWV1ZS0+cXVldWVkYXRhID0genJhbTsKKworCSAvKiBnZW5kaXNrIHN0cnVjdHVyZSAqLworCXpyYW0tPmRpc2sgPSBhbGxvY19kaXNrKDEpOworCWlmICghenJhbS0+ZGlzaykgeworCQlibGtfY2xlYW51cF9xdWV1ZSh6cmFtLT5xdWV1ZSk7CisJCXByX3dhcm5pbmcoIkVycm9yIGFsbG9jYXRpbmcgZGlzayBzdHJ1Y3R1cmUgZm9yIGRldmljZSAlZFxuIiwKKwkJCWRldmljZV9pZCk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXpyYW0tPmRpc2stPm1ham9yID0genJhbV9tYWpvcjsKKwl6cmFtLT5kaXNrLT5maXJzdF9taW5vciA9IGRldmljZV9pZDsKKwl6cmFtLT5kaXNrLT5mb3BzID0gJnpyYW1fZGV2b3BzOworCXpyYW0tPmRpc2stPnF1ZXVlID0genJhbS0+cXVldWU7CisJenJhbS0+ZGlzay0+cHJpdmF0ZV9kYXRhID0genJhbTsKKwlzbnByaW50Zih6cmFtLT5kaXNrLT5kaXNrX25hbWUsIDE2LCAienJhbSVkIiwgZGV2aWNlX2lkKTsKKworCS8qIEFjdHVhbCBjYXBhY2l0eSBzZXQgdXNpbmcgWlJBTUlPX1NFVF9ESVNLU0laRV9LQiBpb2N0bCAqLworCXNldF9jYXBhY2l0eSh6cmFtLT5kaXNrLCAwKTsKKworCS8qCisJICogVG8gZW5zdXJlIHRoYXQgd2UgYWx3YXlzIGdldCBQQUdFX1NJWkUgYWxpZ25lZAorCSAqIGFuZCBuKlBBR0VfU0laRUQgc2l6ZWQgSS9PIHJlcXVlc3RzLgorCSAqLworCWJsa19xdWV1ZV9waHlzaWNhbF9ibG9ja19zaXplKHpyYW0tPmRpc2stPnF1ZXVlLCBQQUdFX1NJWkUpOworCWJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUoenJhbS0+ZGlzay0+cXVldWUsIFBBR0VfU0laRSk7CisJYmxrX3F1ZXVlX2lvX21pbih6cmFtLT5kaXNrLT5xdWV1ZSwgUEFHRV9TSVpFKTsKKwlibGtfcXVldWVfaW9fb3B0KHpyYW0tPmRpc2stPnF1ZXVlLCBQQUdFX1NJWkUpOworCisJYWRkX2Rpc2soenJhbS0+ZGlzayk7CisKKwl6cmFtLT5pbml0X2RvbmUgPSAwOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZGVzdHJveV9kZXZpY2Uoc3RydWN0IHpyYW0gKnpyYW0pCit7CisJaWYgKHpyYW0tPmRpc2spIHsKKwkJZGVsX2dlbmRpc2soenJhbS0+ZGlzayk7CisJCXB1dF9kaXNrKHpyYW0tPmRpc2spOworCX0KKworCWlmICh6cmFtLT5xdWV1ZSkKKwkJYmxrX2NsZWFudXBfcXVldWUoenJhbS0+cXVldWUpOworfQorCitzdGF0aWMgaW50IF9faW5pdCB6cmFtX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0LCBkZXZfaWQ7CisKKwlpZiAobnVtX2RldmljZXMgPiBtYXhfbnVtX2RldmljZXMpIHsKKwkJcHJfd2FybmluZygiSW52YWxpZCB2YWx1ZSBmb3IgbnVtX2RldmljZXM6ICV1XG4iLAorCQkJCW51bV9kZXZpY2VzKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJenJhbV9tYWpvciA9IHJlZ2lzdGVyX2Jsa2RldigwLCAienJhbSIpOworCWlmICh6cmFtX21ham9yIDw9IDApIHsKKwkJcHJfd2FybmluZygiVW5hYmxlIHRvIGdldCBtYWpvciBudW1iZXJcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghbnVtX2RldmljZXMpIHsKKwkJcHJfaW5mbygibnVtX2RldmljZXMgbm90IHNwZWNpZmllZC4gVXNpbmcgZGVmYXVsdDogMVxuIik7CisJCW51bV9kZXZpY2VzID0gMTsKKwl9CisKKwkvKiBBbGxvY2F0ZSB0aGUgZGV2aWNlIGFycmF5IGFuZCBpbml0aWFsaXplIGVhY2ggb25lICovCisJcHJfaW5mbygiQ3JlYXRpbmcgJXUgZGV2aWNlcyAuLi5cbiIsIG51bV9kZXZpY2VzKTsKKwlkZXZpY2VzID0ga3phbGxvYyhudW1fZGV2aWNlcyAqIHNpemVvZihzdHJ1Y3QgenJhbSksIEdGUF9LRVJORUwpOworCWlmICghZGV2aWNlcykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIHVucmVnaXN0ZXI7CisJfQorCisJZm9yIChkZXZfaWQgPSAwOyBkZXZfaWQgPCBudW1fZGV2aWNlczsgZGV2X2lkKyspIHsKKwkJcmV0ID0gY3JlYXRlX2RldmljZSgmZGV2aWNlc1tkZXZfaWRdLCBkZXZfaWQpOworCQlpZiAocmV0KQorCQkJZ290byBmcmVlX2RldmljZXM7CisJfQorCisJcmV0dXJuIDA7CisKK2ZyZWVfZGV2aWNlczoKKwl3aGlsZSAoZGV2X2lkKQorCQlkZXN0cm95X2RldmljZSgmZGV2aWNlc1stLWRldl9pZF0pOwordW5yZWdpc3RlcjoKKwl1bnJlZ2lzdGVyX2Jsa2Rldih6cmFtX21ham9yLCAienJhbSIpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB6cmFtX2V4aXQodm9pZCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgenJhbSAqenJhbTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fZGV2aWNlczsgaSsrKSB7CisJCXpyYW0gPSAmZGV2aWNlc1tpXTsKKworCQlkZXN0cm95X2RldmljZSh6cmFtKTsKKwkJaWYgKHpyYW0tPmluaXRfZG9uZSkKKwkJCXJlc2V0X2RldmljZSh6cmFtKTsKKwl9CisKKwl1bnJlZ2lzdGVyX2Jsa2Rldih6cmFtX21ham9yLCAienJhbSIpOworCisJa2ZyZWUoZGV2aWNlcyk7CisJcHJfZGVidWcoIkNsZWFudXAgZG9uZSFcbiIpOworfQorCittb2R1bGVfcGFyYW0obnVtX2RldmljZXMsIHVpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhudW1fZGV2aWNlcywgIk51bWJlciBvZiB6cmFtIGRldmljZXMiKTsKKworbW9kdWxlX2luaXQoenJhbV9pbml0KTsKK21vZHVsZV9leGl0KHpyYW1fZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKK01PRFVMRV9BVVRIT1IoIk5pdGluIEd1cHRhIDxuZ3VwdGFAdmZsYXJlLm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tcHJlc3NlZCBSQU0gQmxvY2sgRGV2aWNlIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvenJhbS96cmFtX2Rydi5oIGIvZHJpdmVycy9zdGFnaW5nL3pyYW0venJhbV9kcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDVmOTc0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3pyYW0venJhbV9kcnYuaApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvbXByZXNzZWQgUkFNIGJsb2NrIGRldmljZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCAgTml0aW4gR3VwdGEKKyAqCisgKiBUaGlzIGNvZGUgaXMgcmVsZWFzZWQgdXNpbmcgYSBkdWFsIGxpY2Vuc2Ugc3RyYXRlZ3k6IEJTRC9HUEwKKyAqIFlvdSBjYW4gY2hvb3NlIHRoZSBsaWNlbmNlIHRoYXQgYmV0dGVyIGZpdHMgeW91ciByZXF1aXJlbWVudHMuCisgKgorICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIDMtY2xhdXNlIEJTRCBMaWNlbnNlCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjAKKyAqCisgKiBQcm9qZWN0IGhvbWU6IGh0dHA6Ly9jb21wY2FjaGUuZ29vZ2xlY29kZS5jb20KKyAqLworCisjaWZuZGVmIF9aUkFNX0RSVl9IXworI2RlZmluZSBfWlJBTV9EUlZfSF8KKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKworI2luY2x1ZGUgInpyYW1faW9jdGwuaCIKKyNpbmNsdWRlICJ4dm1hbGxvYy5oIgorCisvKgorICogU29tZSBhcmJpdHJhcnkgdmFsdWUuIFRoaXMgaXMganVzdCB0byBjYXRjaAorICogaW52YWxpZCB2YWx1ZSBmb3IgbnVtX2RldmljZXMgbW9kdWxlIHBhcmFtZXRlci4KKyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heF9udW1fZGV2aWNlcyA9IDMyOworCisvKgorICogU3RvcmVkIGF0IGJlZ2lubmluZyBvZiBlYWNoIGNvbXByZXNzZWQgb2JqZWN0LgorICoKKyAqIEl0IHN0b3JlcyBiYWNrLXJlZmVyZW5jZSB0byB0YWJsZSBlbnRyeSB3aGljaCBwb2ludHMgdG8gdGhpcworICogb2JqZWN0LiBUaGlzIGlzIHJlcXVpcmVkIHRvIHN1cHBvcnQgbWVtb3J5IGRlZnJhZ21lbnRhdGlvbi4KKyAqLworc3RydWN0IHpvYmpfaGVhZGVyIHsKKyNpZiAwCisJdTMyIHRhYmxlX2lkeDsKKyNlbmRpZgorfTsKKworLyotLSBDb25maWd1cmFibGUgcGFyYW1ldGVycyAqLworCisvKiBEZWZhdWx0IHpyYW0gZGlzayBzaXplOiAyNSUgb2YgdG90YWwgUkFNICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdF9kaXNrc2l6ZV9wZXJjX3JhbSA9IDI1OworCisvKgorICogUGFnZXMgdGhhdCBjb21wcmVzcyB0byBzaXplIGdyZWF0ZXIgdGhhbiB0aGlzIGFyZSBzdG9yZWQKKyAqIHVuY29tcHJlc3NlZCBpbiBtZW1vcnkuCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhfenBhZ2Vfc2l6ZSA9IFBBR0VfU0laRSAvIDQgKiAzOworCisvKgorICogTk9URTogbWF4X3pwYWdlX3NpemUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG86CisgKiAgIFhWX01BWF9BTExPQ19TSVpFIC0gc2l6ZW9mKHN0cnVjdCB6b2JqX2hlYWRlcikKKyAqIG90aGVyd2lzZSwgeHZfbWFsbG9jKCkgd291bGQgYWx3YXlzIHJldHVybiBmYWlsdXJlLgorICovCisKKy8qLS0gRW5kIG9mIGNvbmZpZ3VyYWJsZSBwYXJhbXMgKi8KKworI2RlZmluZSBTRUNUT1JfU0hJRlQJCTkKKyNkZWZpbmUgU0VDVE9SX1NJWkUJCSgxIDw8IFNFQ1RPUl9TSElGVCkKKyNkZWZpbmUgU0VDVE9SU19QRVJfUEFHRV9TSElGVAkoUEFHRV9TSElGVCAtIFNFQ1RPUl9TSElGVCkKKyNkZWZpbmUgU0VDVE9SU19QRVJfUEFHRQkoMSA8PCBTRUNUT1JTX1BFUl9QQUdFX1NISUZUKQorCisvKiBGbGFncyBmb3IgenJhbSBwYWdlcyAodGFibGVbcGFnZV9ub10uZmxhZ3MpICovCitlbnVtIHpyYW1fcGFnZWZsYWdzIHsKKwkvKiBQYWdlIGlzIHN0b3JlZCB1bmNvbXByZXNzZWQgKi8KKwlaUkFNX1VOQ09NUFJFU1NFRCwKKworCS8qIFBhZ2UgY29uc2lzdHMgZW50aXJlbHkgb2YgemVyb3MgKi8KKwlaUkFNX1pFUk8sCisKKwlfX05SX1pSQU1fUEFHRUZMQUdTLAorfTsKKworLyotLSBEYXRhIHN0cnVjdHVyZXMgKi8KKworLyogQWxsb2NhdGVkIGZvciBlYWNoIGRpc2sgcGFnZSAqLworc3RydWN0IHRhYmxlIHsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1MTYgb2Zmc2V0OworCXU4IGNvdW50OwkvKiBvYmplY3QgcmVmIGNvdW50IChub3QgeWV0IHVzZWQpICovCisJdTggZmxhZ3M7Cit9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKTsKKworc3RydWN0IHpyYW1fc3RhdHMgeworCS8qIGJhc2ljIHN0YXRzICovCisJc2l6ZV90IGNvbXByX3NpemU7CS8qIGNvbXByZXNzZWQgc2l6ZSBvZiBwYWdlcyBzdG9yZWQgLQorCQkJCSAqIG5lZWRlZCB0byBlbmZvcmNlIG1lbWxpbWl0ICovCisJLyogbW9yZSBzdGF0cyAqLworI2lmIGRlZmluZWQoQ09ORklHX1pSQU1fU1RBVFMpCisJdTY0IG51bV9yZWFkczsJCS8qIGZhaWxlZCArIHN1Y2Nlc3NmdWwgKi8KKwl1NjQgbnVtX3dyaXRlczsJCS8qIC0tZG8tLSAqLworCXU2NCBmYWlsZWRfcmVhZHM7CS8qIHNob3VsZCBORVZFUiEgaGFwcGVuICovCisJdTY0IGZhaWxlZF93cml0ZXM7CS8qIGNhbiBoYXBwZW4gd2hlbiBtZW1vcnkgaXMgdG9vIGxvdyAqLworCXU2NCBpbnZhbGlkX2lvOwkJLyogbm9uLXBhZ2UtYWxpZ25lZCBJL08gcmVxdWVzdHMgKi8KKwl1NjQgbm90aWZ5X2ZyZWU7CS8qIG5vLiBvZiBzd2FwIHNsb3QgZnJlZSBub3RpZmljYXRpb25zICovCisJdTMyIHBhZ2VzX3plcm87CQkvKiBuby4gb2YgemVybyBmaWxsZWQgcGFnZXMgKi8KKwl1MzIgcGFnZXNfc3RvcmVkOwkvKiBuby4gb2YgcGFnZXMgY3VycmVudGx5IHN0b3JlZCAqLworCXUzMiBnb29kX2NvbXByZXNzOwkvKiAlIG9mIHBhZ2VzIHdpdGggY29tcHJlc3Npb24gcmF0aW88PTUwJSAqLworCXUzMiBwYWdlc19leHBhbmQ7CS8qICUgb2YgaW5jb21wcmVzc2libGUgcGFnZXMgKi8KKyNlbmRpZgorfTsKKworc3RydWN0IHpyYW0geworCXN0cnVjdCB4dl9wb29sICptZW1fcG9vbDsKKwl2b2lkICpjb21wcmVzc193b3JrbWVtOworCXZvaWQgKmNvbXByZXNzX2J1ZmZlcjsKKwlzdHJ1Y3QgdGFibGUgKnRhYmxlOworCXNwaW5sb2NrX3Qgc3RhdDY0X2xvY2s7CS8qIHByb3RlY3QgNjQtYml0IHN0YXRzICovCisJc3RydWN0IG11dGV4IGxvY2s7CS8qIHByb3RlY3QgY29tcHJlc3Npb24gYnVmZmVycyBhZ2FpbnN0CisJCQkJICogY29uY3VycmVudCB3cml0ZXMgKi8KKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcXVldWU7CisJc3RydWN0IGdlbmRpc2sgKmRpc2s7CisJaW50IGluaXRfZG9uZTsKKwkvKgorCSAqIFRoaXMgaXMgdGhlIGxpbWl0IG9uIGFtb3VudCBvZiAqdW5jb21wcmVzc2VkKiB3b3J0aCBvZiBkYXRhCisJICogd2UgY2FuIHN0b3JlIGluIGEgZGlzay4KKwkgKi8KKwlzaXplX3QgZGlza3NpemU7CS8qIGJ5dGVzICovCisKKwlzdHJ1Y3QgenJhbV9zdGF0cyBzdGF0czsKK307CisKKy8qLS0gKi8KKworLyogRGVidWdnaW5nIGFuZCBTdGF0cyAqLworI2lmIGRlZmluZWQoQ09ORklHX1pSQU1fU1RBVFMpCitzdGF0aWMgdm9pZCB6cmFtX3N0YXRfaW5jKHUzMiAqdikKK3sKKwkqdiA9ICp2ICsgMTsKK30KKworc3RhdGljIHZvaWQgenJhbV9zdGF0X2RlYyh1MzIgKnYpCit7CisJKnYgPSAqdiAtIDE7Cit9CisKK3N0YXRpYyB2b2lkIHpyYW1fc3RhdDY0X2luYyhzdHJ1Y3QgenJhbSAqenJhbSwgdTY0ICp2KQoreworCXNwaW5fbG9jaygmenJhbS0+c3RhdDY0X2xvY2spOworCSp2ID0gKnYgKyAxOworCXNwaW5fdW5sb2NrKCZ6cmFtLT5zdGF0NjRfbG9jayk7Cit9CisKK3N0YXRpYyB1NjQgenJhbV9zdGF0NjRfcmVhZChzdHJ1Y3QgenJhbSAqenJhbSwgdTY0ICp2KQoreworCXU2NCB2YWw7CisKKwlzcGluX2xvY2soJnpyYW0tPnN0YXQ2NF9sb2NrKTsKKwl2YWwgPSAqdjsKKwlzcGluX3VubG9jaygmenJhbS0+c3RhdDY0X2xvY2spOworCisJcmV0dXJuIHZhbDsKK30KKyNlbHNlCisjZGVmaW5lIHpyYW1fc3RhdF9pbmModikKKyNkZWZpbmUgenJhbV9zdGF0X2RlYyh2KQorI2RlZmluZSB6cmFtX3N0YXQ2NF9pbmMociwgdikKKyNkZWZpbmUgenJhbV9zdGF0NjRfcmVhZChyLCB2KQorI2VuZGlmIC8qIENPTkZJR19aUkFNX1NUQVRTICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3pyYW0venJhbV9pb2N0bC5oIGIvZHJpdmVycy9zdGFnaW5nL3pyYW0venJhbV9pb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNDE1ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvenJhbS96cmFtX2lvY3RsLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvbXByZXNzZWQgUkFNIGJsb2NrIGRldmljZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCAgTml0aW4gR3VwdGEKKyAqCisgKiBUaGlzIGNvZGUgaXMgcmVsZWFzZWQgdXNpbmcgYSBkdWFsIGxpY2Vuc2Ugc3RyYXRlZ3k6IEJTRC9HUEwKKyAqIFlvdSBjYW4gY2hvb3NlIHRoZSBsaWNlbmNlIHRoYXQgYmV0dGVyIGZpdHMgeW91ciByZXF1aXJlbWVudHMuCisgKgorICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIDMtY2xhdXNlIEJTRCBMaWNlbnNlCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjAKKyAqCisgKiBQcm9qZWN0IGhvbWU6IGh0dHA6Ly9jb21wY2FjaGUuZ29vZ2xlY29kZS5jb20KKyAqLworCisjaWZuZGVmIF9aUkFNX0lPQ1RMX0hfCisjZGVmaW5lIF9aUkFNX0lPQ1RMX0hfCisKK3N0cnVjdCB6cmFtX2lvY3RsX3N0YXRzIHsKKwl1NjQgZGlza3NpemU7CQkvKiBkaXNrc2l6ZSBpbiBieXRlcyAodXNlciBzcGVjaWZpZXMgaW4gS0IpICovCisJdTY0IG51bV9yZWFkczsJCS8qIGZhaWxlZCArIHN1Y2Nlc3NmdWwgKi8KKwl1NjQgbnVtX3dyaXRlczsJCS8qIC0tZG8tLSAqLworCXU2NCBmYWlsZWRfcmVhZHM7CS8qIHNob3VsZCBORVZFUiEgaGFwcGVuICovCisJdTY0IGZhaWxlZF93cml0ZXM7CS8qIGNhbiBoYXBwZW4gd2hlbiBtZW1vcnkgaXMgdG9vIGxvdyAqLworCXU2NCBpbnZhbGlkX2lvOwkJLyogbm9uLXBhZ2UtYWxpZ25lZCBJL08gcmVxdWVzdHMgKi8KKwl1NjQgbm90aWZ5X2ZyZWU7CS8qIG5vLiBvZiBzd2FwIHNsb3QgZnJlZSBub3RpZmljYXRpb25zICovCisJdTMyIHBhZ2VzX3plcm87CQkvKiBuby4gb2YgemVybyBmaWxsZWQgcGFnZXMgKi8KKwl1MzIgZ29vZF9jb21wcmVzc19wY3Q7CS8qIG5vLiBvZiBwYWdlcyB3aXRoIGNvbXByZXNzaW9uIHJhdGlvPD01MCUgKi8KKwl1MzIgcGFnZXNfZXhwYW5kX3BjdDsJLyogbm8uIG9mIGluY29tcHJlc3NpYmxlIHBhZ2VzICovCisJdTMyIHBhZ2VzX3N0b3JlZDsKKwl1MzIgcGFnZXNfdXNlZDsKKwl1NjQgb3JpZ19kYXRhX3NpemU7CisJdTY0IGNvbXByX2RhdGFfc2l6ZTsKKwl1NjQgbWVtX3VzZWRfdG90YWw7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQsIGFsaWduZWQoNCkpKTsKKworI2RlZmluZSBaUkFNSU9fU0VUX0RJU0tTSVpFX0tCCV9JT1coJ3onLCAwLCBzaXplX3QpCisjZGVmaW5lIFpSQU1JT19HRVRfU1RBVFMJX0lPUigneicsIDEsIHN0cnVjdCB6cmFtX2lvY3RsX3N0YXRzKQorI2RlZmluZSBaUkFNSU9fSU5JVAkJX0lPKCd6JywgMikKKyNkZWZpbmUgWlJBTUlPX1JFU0VUCQlfSU8oJ3onLCAzKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGVsZXBob255L2l4al9wY21jaWEuYyBiL2RyaXZlcnMvdGVsZXBob255L2l4al9wY21jaWEuYwppbmRleCA5OWNiMjI0Li5hMTkwMGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RlbGVwaG9ueS9peGpfcGNtY2lhLmMKKysrIGIvZHJpdmVycy90ZWxlcGhvbnkvaXhqX3BjbWNpYS5jCkBAIC04LDcgKzgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CS8qIGVycm9yIGNvZGVzICovCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgpAQCAtMzMsOSArMzIsOCBAQAogewogCWRldl9kYmcoJnBfZGV2LT5kZXYsICJpeGpfYXR0YWNoKClcbiIpOwogCS8qIENyZWF0ZSBuZXcgaXhqIGRldmljZSAqLwotCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotCXBfZGV2LT5pby5BdHRyaWJ1dGVzMiA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IDM7CisJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwlwX2Rldi0+cmVzb3VyY2VbMV0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF84OwogCXBfZGV2LT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAlwX2Rldi0+cHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpeGpfaW5mb190KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwX2Rldi0+cHJpdikgewpAQCAtMTIxLDEzICsxMTksMTQgQEAKIHsKIAlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKIAkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKLQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKLQkJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gaW8tPndpblswXS5iYXNlOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmVuZCA9IGlvLT53aW5bMF0ubGVuOworCQlwX2Rldi0+aW9fbGluZXMgPSAzOwogCQlpZiAoaW8tPm53aW4gPT0gMikgewotCQkJcF9kZXYtPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKLQkJCXBfZGV2LT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+c3RhcnQgPSBpby0+d2luWzFdLmJhc2U7CisJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA9IGlvLT53aW5bMV0ubGVuOwogCQl9Ci0JCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKQorCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2KSkKIAkJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVOT0RFVjsKQEAgLTE1MSw3ICsxNTAsOCBAQAogCS8qCiAgCSAqCVJlZ2lzdGVyIHRoZSBjYXJkIHdpdGggdGhlIGNvcmUuCiAJICovCi0JaiA9IGl4al9wY21jaWFfcHJvYmUobGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pby5CYXNlUG9ydDEgKyAweDEwKTsKKwlqID0gaXhqX3BjbWNpYV9wcm9iZShsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQsCisJCQkgICAgIGxpbmstPnJlc291cmNlWzBdLT5zdGFydCArIDB4MTApOwogCiAJaW5mby0+bmRldiA9IDE7CiAJaXhqX2dldF9zZXJpYWwobGluaywgaik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Vpby91aW9fY2lmLmMgYi9kcml2ZXJzL3Vpby91aW9fY2lmLmMKaW5kZXggMzcxZjg3Zi4uYThlYTJmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91aW8vdWlvX2NpZi5jCisrKyBiL2RyaXZlcnMvdWlvL3Vpb19jaWYuYwpAQCAtNzksNyArNzksNyBAQAogCX0KIAlpbmZvLT52ZXJzaW9uID0gIjAuMC4xIjsKIAlpbmZvLT5pcnEgPSBkZXYtPmlycTsKLQlpbmZvLT5pcnFfZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQ7CisJaW5mby0+aXJxX2ZsYWdzID0gSVJRRl9TSEFSRUQ7CiAJaW5mby0+aGFuZGxlciA9IGhpbHNjaGVyX2hhbmRsZXI7CiAKIAlpZiAodWlvX3JlZ2lzdGVyX2RldmljZSgmZGV2LT5kZXYsIGluZm8pKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vdWlvX3BkcnZfZ2VuaXJxLmMgYi9kcml2ZXJzL3Vpby91aW9fcGRydl9nZW5pcnEuYwppbmRleCA2MWU1NjlkLi43MTc0ZDUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Vpby91aW9fcGRydl9nZW5pcnEuYworKysgYi9kcml2ZXJzL3Vpby91aW9fcGRydl9nZW5pcnEuYwpAQCAtMTU1LDcgKzE1NSw2IEBACiAJICogSW50ZXJydXB0IHNoYXJpbmcgaXMgbm90IHN1cHBvcnRlZC4KIAkgKi8KIAotCXVpb2luZm8tPmlycV9mbGFncyB8PSBJUlFGX0RJU0FCTEVEOwogCXVpb2luZm8tPmhhbmRsZXIgPSB1aW9fcGRydl9nZW5pcnFfaGFuZGxlcjsKIAl1aW9pbmZvLT5pcnFjb250cm9sID0gdWlvX3BkcnZfZ2VuaXJxX2lycWNvbnRyb2w7CiAJdWlvaW5mby0+b3BlbiA9IHVpb19wZHJ2X2dlbmlycV9vcGVuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vdWlvX3NlcmNvczMuYyBiL2RyaXZlcnMvdWlvL3Vpb19zZXJjb3MzLmMKaW5kZXggM2Q0NjFjZC4uYTE4N2ZhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91aW8vdWlvX3NlcmNvczMuYworKysgYi9kcml2ZXJzL3Vpby91aW9fc2VyY29zMy5jCkBAIC0xNTQsNyArMTU0LDcgQEAKIAlpbmZvLT5uYW1lID0gIlNlcmNvc19JSUlfUENJIjsKIAlpbmZvLT52ZXJzaW9uID0gIjAuMC4xIjsKIAlpbmZvLT5pcnEgPSBkZXYtPmlycTsKLQlpbmZvLT5pcnFfZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQ7CisJaW5mby0+aXJxX2ZsYWdzID0gSVJRRl9TSEFSRUQ7CiAJaW5mby0+aGFuZGxlciA9IHNlcmNvczNfaGFuZGxlcjsKIAlpbmZvLT5pcnFjb250cm9sID0gc2VyY29zM19pcnFjb250cm9sOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9LY29uZmlnIGIvZHJpdmVycy91c2IvS2NvbmZpZwppbmRleCA2YTU4Y2IxLi40YWEwMGU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL0tjb25maWcKQEAgLTQ1LDcgKzQ1LDggQEAKIAlkZWZhdWx0IHkgaWYgU1RCMDN4eHgKIAlkZWZhdWx0IHkgaWYgUFBDX01QQzUyeHgKIAkjIE1JUFM6Ci0JZGVmYXVsdCB5IGlmIFNPQ19BVTFYMDAKKwlkZWZhdWx0IHkgaWYgTUlQU19BTENIRU1ZCisJZGVmYXVsdCB5IGlmIE1BQ0hfSlo0NzQwCiAJIyBTSDoKIAlkZWZhdWx0IHkgaWYgQ1BVX1NVQlRZUEVfU0g3NzIwCiAJZGVmYXVsdCB5IGlmIENQVV9TVUJUWVBFX1NINzcyMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jIGIvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jCmluZGV4IGM4OTk5MGYuLjEwMWZmYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYworKysgYi9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMKQEAgLTg2Niw1MCArODY2LDUwIEBACiAJaW5zdGFuY2UtPmxpbmVfc3RhdHVzID0gYnVmW0NYSU5GX0xJTkVfU1RBVFVTXTsKIAlzd2l0Y2ggKGluc3RhbmNlLT5saW5lX3N0YXR1cykgewogCWNhc2UgMDoKLQkJYXRtX2Rldi0+c2lnbmFsID0gQVRNX1BIWV9TSUdfTE9TVDsKKwkJYXRtX2Rldl9zaWduYWxfY2hhbmdlKGF0bV9kZXYsIEFUTV9QSFlfU0lHX0xPU1QpOwogCQlhdG1faW5mbyh1c2JhdG0sICJBRFNMIGxpbmU6IGRvd25cbiIpOwogCQlicmVhazsKIAogCWNhc2UgMToKLQkJYXRtX2Rldi0+c2lnbmFsID0gQVRNX1BIWV9TSUdfTE9TVDsKKwkJYXRtX2Rldl9zaWduYWxfY2hhbmdlKGF0bV9kZXYsIEFUTV9QSFlfU0lHX0xPU1QpOwogCQlhdG1faW5mbyh1c2JhdG0sICJBRFNMIGxpbmU6IGF0dGVtcHRpbmcgdG8gYWN0aXZhdGVcbiIpOwogCQlicmVhazsKIAogCWNhc2UgMjoKLQkJYXRtX2Rldi0+c2lnbmFsID0gQVRNX1BIWV9TSUdfTE9TVDsKKwkJYXRtX2Rldl9zaWduYWxfY2hhbmdlKGF0bV9kZXYsIEFUTV9QSFlfU0lHX0xPU1QpOwogCQlhdG1faW5mbyh1c2JhdG0sICJBRFNMIGxpbmU6IHRyYWluaW5nXG4iKTsKIAkJYnJlYWs7CiAKIAljYXNlIDM6Ci0JCWF0bV9kZXYtPnNpZ25hbCA9IEFUTV9QSFlfU0lHX0xPU1Q7CisJCWF0bV9kZXZfc2lnbmFsX2NoYW5nZShhdG1fZGV2LCBBVE1fUEhZX1NJR19MT1NUKTsKIAkJYXRtX2luZm8odXNiYXRtLCAiQURTTCBsaW5lOiBjaGFubmVsIGFuYWx5c2lzXG4iKTsKIAkJYnJlYWs7CiAKIAljYXNlIDQ6Ci0JCWF0bV9kZXYtPnNpZ25hbCA9IEFUTV9QSFlfU0lHX0xPU1Q7CisJCWF0bV9kZXZfc2lnbmFsX2NoYW5nZShhdG1fZGV2LCBBVE1fUEhZX1NJR19MT1NUKTsKIAkJYXRtX2luZm8odXNiYXRtLCAiQURTTCBsaW5lOiBleGNoYW5nZVxuIik7CiAJCWJyZWFrOwogCiAJY2FzZSA1OgogCQlhdG1fZGV2LT5saW5rX3JhdGUgPSBidWZbQ1hJTkZfRE9XTlNUUkVBTV9SQVRFXSAqIDEwMDAgLyA0MjQ7Ci0JCWF0bV9kZXYtPnNpZ25hbCA9IEFUTV9QSFlfU0lHX0ZPVU5EOworCQlhdG1fZGV2X3NpZ25hbF9jaGFuZ2UoYXRtX2RldiwgQVRNX1BIWV9TSUdfRk9VTkQpOwogCiAJCWF0bV9pbmZvKHVzYmF0bSwgIkFEU0wgbGluZTogdXAgKCVkIGtiL3MgZG93biB8ICVkIGtiL3MgdXApXG4iLAogCQkgICAgIGJ1ZltDWElORl9ET1dOU1RSRUFNX1JBVEVdLCBidWZbQ1hJTkZfVVBTVFJFQU1fUkFURV0pOwogCQlicmVhazsKIAogCWNhc2UgNjoKLQkJYXRtX2Rldi0+c2lnbmFsID0gQVRNX1BIWV9TSUdfTE9TVDsKKwkJYXRtX2Rldl9zaWduYWxfY2hhbmdlKGF0bV9kZXYsIEFUTV9QSFlfU0lHX0xPU1QpOwogCQlhdG1faW5mbyh1c2JhdG0sICJBRFNMIGxpbmU6IHdhaXRpbmdcbiIpOwogCQlicmVhazsKIAogCWNhc2UgNzoKLQkJYXRtX2Rldi0+c2lnbmFsID0gQVRNX1BIWV9TSUdfTE9TVDsKKwkJYXRtX2Rldl9zaWduYWxfY2hhbmdlKGF0bV9kZXYsIEFUTV9QSFlfU0lHX0xPU1QpOwogCQlhdG1faW5mbyh1c2JhdG0sICJBRFNMIGxpbmU6IGluaXRpYWxpemluZ1xuIik7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJYXRtX2Rldi0+c2lnbmFsID0gQVRNX1BIWV9TSUdfVU5LTk9XTjsKKwkJYXRtX2Rldl9zaWduYWxfY2hhbmdlKGF0bV9kZXYsIEFUTV9QSFlfU0lHX1VOS05PV04pOwogCQlhdG1faW5mbyh1c2JhdG0sICJVbmtub3duIGxpbmUgc3RhdGUgJTAyeFxuIiwgaW5zdGFuY2UtPmxpbmVfc3RhdHVzKTsKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3NwZWVkdGNoLmMgYi9kcml2ZXJzL3VzYi9hdG0vc3BlZWR0Y2guYwppbmRleCAxMzM1NDU2Li44MGY5NjE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9hdG0vc3BlZWR0Y2guYworKysgYi9kcml2ZXJzL3VzYi9hdG0vc3BlZWR0Y2guYwpAQCAtNTI1LDcgKzUyNSw3IEBACiAKIAkJc3dpdGNoIChzdGF0dXMpIHsKIAkJY2FzZSAwOgotCQkJYXRtX2Rldi0+c2lnbmFsID0gQVRNX1BIWV9TSUdfTE9TVDsKKwkJCWF0bV9kZXZfc2lnbmFsX2NoYW5nZShhdG1fZGV2LCBBVE1fUEhZX1NJR19MT1NUKTsKIAkJCWlmIChpbnN0YW5jZS0+bGFzdF9zdGF0dXMpCiAJCQkJYXRtX2luZm8odXNiYXRtLCAiQURTTCBsaW5lIGlzIGRvd25cbiIpOwogCQkJLyogSXQgbWF5IG5ldmVyIHJlc3luYyBhZ2FpbiB1bmxlc3Mgd2UgYXNrIGl0IHRvLi4uICovCkBAIC01MzMsMTIgKzUzMywxMiBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSAweDA4OgotCQkJYXRtX2Rldi0+c2lnbmFsID0gQVRNX1BIWV9TSUdfVU5LTk9XTjsKKwkJCWF0bV9kZXZfc2lnbmFsX2NoYW5nZShhdG1fZGV2LCBBVE1fUEhZX1NJR19VTktOT1dOKTsKIAkJCWF0bV9pbmZvKHVzYmF0bSwgIkFEU0wgbGluZSBpcyBibG9ja2VkP1xuIik7CiAJCQlicmVhazsKIAogCQljYXNlIDB4MTA6Ci0JCQlhdG1fZGV2LT5zaWduYWwgPSBBVE1fUEhZX1NJR19MT1NUOworCQkJYXRtX2Rldl9zaWduYWxfY2hhbmdlKGF0bV9kZXYsIEFUTV9QSFlfU0lHX0xPU1QpOwogCQkJYXRtX2luZm8odXNiYXRtLCAiQURTTCBsaW5lIGlzIHN5bmNocm9uaXNpbmdcbiIpOwogCQkJYnJlYWs7CiAKQEAgLTU1NCw3ICs1NTQsNyBAQAogCQkJfQogCiAJCQlhdG1fZGV2LT5saW5rX3JhdGUgPSBkb3duX3NwZWVkICogMTAwMCAvIDQyNDsKLQkJCWF0bV9kZXYtPnNpZ25hbCA9IEFUTV9QSFlfU0lHX0ZPVU5EOworCQkJYXRtX2Rldl9zaWduYWxfY2hhbmdlKGF0bV9kZXYsIEFUTV9QSFlfU0lHX0ZPVU5EKTsKIAogCQkJYXRtX2luZm8odXNiYXRtLAogCQkJCSAiQURTTCBsaW5lIGlzIHVwICglZCBrYi9zIGRvd24gfCAlZCBrYi9zIHVwKVxuIiwKQEAgLTU2Miw3ICs1NjIsNyBAQAogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCWF0bV9kZXYtPnNpZ25hbCA9IEFUTV9QSFlfU0lHX1VOS05PV047CisJCQlhdG1fZGV2X3NpZ25hbF9jaGFuZ2UoYXRtX2RldiwgQVRNX1BIWV9TSUdfVU5LTk9XTik7CiAJCQlhdG1faW5mbyh1c2JhdG0sICJ1bmtub3duIGxpbmUgc3RhdGUgJTAyeFxuIiwgc3RhdHVzKTsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vdWVhZ2xlLWF0bS5jIGIvZHJpdmVycy91c2IvYXRtL3VlYWdsZS1hdG0uYwppbmRleCBlMjEzZDNmLi5lYmFlOTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9hdG0vdWVhZ2xlLWF0bS5jCisrKyBiL2RyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmMKQEAgLTU3NSw2ICs1NzUsMTMgQEAKIAkJCXNjLT51c2JhdG0tPmF0bV9kZXYtPnR5cGUgPSB2YWw7IFwKIAl9IHdoaWxlICgwKQogCisjZGVmaW5lIFVQREFURV9BVE1fU0lHTkFMKHZhbCkgXAorCWRvIHsgXAorCQlpZiAoc2MtPnVzYmF0bS0+YXRtX2RldikgXAorCQkJYXRtX2Rldl9zaWduYWxfY2hhbmdlKHNjLT51c2JhdG0tPmF0bV9kZXYsIHZhbCk7IFwKKwl9IHdoaWxlICgwKQorCisKIC8qIEZpcm13YXJlIGxvYWRpbmcgKi8KICNkZWZpbmUgTE9BRF9JTlRFUk5BTCAgICAgMHhBMAogI2RlZmluZSBGODA1MV9VU0JDUyAgICAgICAweDdmOTIKQEAgLTEzNTksNyArMTM2Niw3IEBACiAJLyogYWx3YXlzIHVwZGF0ZSBpdCBhcyBhdG0gbGF5ZXIgY291bGQgbm90IGJlIGluaXQgd2hlbiB3ZSBzd2l0Y2ggdG8KIAkgKiBvcGVyYXRpb25hbCBzdGF0ZQogCSAqLwotCVVQREFURV9BVE1fU1RBVChzaWduYWwsIEFUTV9QSFlfU0lHX0ZPVU5EKTsKKwlVUERBVEVfQVRNX1NJR05BTChBVE1fUEhZX1NJR19GT1VORCk7CiAKIAkvKiB3YWtlIHVwIHByb2Nlc3NlcyB3YWl0aW5nIGZvciBzeW5jaHJvbml6YXRpb24gKi8KIAl3YWtlX3VwKCZzYy0+c3luY19xKTsKQEAgLTE0OTgsNyArMTUwNSw3IEBACiAJLyogYWx3YXlzIHVwZGF0ZSBpdCBhcyBhdG0gbGF5ZXIgY291bGQgbm90IGJlIGluaXQgd2hlbiB3ZSBzd2l0Y2ggdG8KIAkgKiBvcGVyYXRpb25hbCBzdGF0ZQogCSAqLwotCVVQREFURV9BVE1fU1RBVChzaWduYWwsIEFUTV9QSFlfU0lHX0ZPVU5EKTsKKwlVUERBVEVfQVRNX1NJR05BTChBVE1fUEhZX1NJR19GT1VORCk7CiAKIAkvKiB3YWtlIHVwIHByb2Nlc3NlcyB3YWl0aW5nIGZvciBzeW5jaHJvbml6YXRpb24gKi8KIAl3YWtlX3VwKCZzYy0+c3luY19xKTsKQEAgLTE4MjUsNyArMTgzMiw3IEBACiAJICogU28gd2Ugd2lsbCBmYWlsZWQgdG8gd2FpdCBSZWFkeSBDTVYuCiAJICovCiAJc2MtPmNtdl9hY2sgPSAwOwotCVVQREFURV9BVE1fU1RBVChzaWduYWwsIEFUTV9QSFlfU0lHX0xPU1QpOworCVVQREFURV9BVE1fU0lHTkFMKEFUTV9QSFlfU0lHX0xPU1QpOwogCiAJLyogcmVzZXQgc3RhdGlzdGljcyAqLwogCW1lbXNldCgmc2MtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IHVlYV9zdGF0cykpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCmluZGV4IDYxZDc1NTAuLjg5ZDI2MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKQEAgLTIsNyArMiw3IEBACiAgKiBjZGMtYWNtLmMKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTkgQXJtaW4gRnVlcnN0CTxmdWVyc3RAaW4udHVtLmRlPgotICogQ29weXJpZ2h0IChjKSAxOTk5IFBhdmVsIE1hY2hlawk8cGF2ZWxAc3VzZS5jej4KKyAqIENvcHlyaWdodCAoYykgMTk5OSBQYXZlbCBNYWNoZWsJPHBhdmVsQHVjdy5jej4KICAqIENvcHlyaWdodCAoYykgMTk5OSBKb2hhbm5lcyBFcmRmZWx0CTxqb2hhbm5lc0BlcmRmZWx0LmNvbT4KICAqIENvcHlyaWdodCAoYykgMjAwMCBWb2p0ZWNoIFBhdmxpawk8dm9qdGVjaEBzdXNlLmN6PgogICogQ29weXJpZ2h0IChjKSAyMDA0IE9saXZlciBOZXVrdW0JPG9saXZlckBuZXVrdW0ubmFtZT4KQEAgLTE1OTYsNiArMTU5Niw3IEBACiAJeyBOT0tJQV9QQ1NVSVRFX0FDTV9JTkZPKDB4MDBlOSksIH0sIC8qIE5va2lhIDUzMjAgWHByZXNzTXVzaWMgKi8KIAl7IE5PS0lBX1BDU1VJVEVfQUNNX0lORk8oMHgwMTA4KSwgfSwgLyogTm9raWEgNTMyMCBYcHJlc3NNdXNpYyAyRyAqLwogCXsgTk9LSUFfUENTVUlURV9BQ01fSU5GTygweDAxZjUpLCB9LCAvKiBOb2tpYSBOOTcsIFJNLTUwNSAqLworCXsgTk9LSUFfUENTVUlURV9BQ01fSU5GTygweDAyZTMpLCB9LCAvKiBOb2tpYSA1MjMwLCBSTS01ODggKi8KIAogCS8qIE5PVEU6IG5vbi1Ob2tpYSBDT01NL0FDTS8weGZmIGlzIGxpa2VseSBNU0ZUIFJORElTLi4uIE5PVCBhIG1vZGVtISAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jIGIvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYwppbmRleCAyMjUwMDk1Li44NGY5ZTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMKQEAgLTIsNyArMiw3IEBACiAgKiB1c2JscC5jCiAgKgogICogQ29weXJpZ2h0IChjKSAxOTk5IE1pY2hhZWwgR2VlCTxtaWNoYWVsQGxpbnV4c3BlY2lmaWMuY29tPgotICogQ29weXJpZ2h0IChjKSAxOTk5IFBhdmVsIE1hY2hlawk8cGF2ZWxAc3VzZS5jej4KKyAqIENvcHlyaWdodCAoYykgMTk5OSBQYXZlbCBNYWNoZWsJPHBhdmVsQHVjdy5jej4KICAqIENvcHlyaWdodCAoYykgMjAwMCBSYW5keSBEdW5sYXAJPHJkdW5sYXBAeGVub3RpbWUubmV0PgogICogQ29weXJpZ2h0IChjKSAyMDAwIFZvanRlY2ggUGF2bGlrCTx2b2p0ZWNoQHN1c2UuY3o+CiAgIyBDb3B5cmlnaHQgKGMpIDIwMDEgUGV0ZSBaYWl0Y2V2CTx6YWl0Y2V2QHJlZGhhdC5jb20+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCA4M2U3YmJiLi43MGNjY2M3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTE5ODIsNiArMTk4Miw4IEBACiAJCSAgICAocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfRU5BQkxFKSkgewogCQkJaWYgKGh1Yl9pc193dXNiKGh1YikpCiAJCQkJdWRldi0+c3BlZWQgPSBVU0JfU1BFRURfV0lSRUxFU1M7CisJCQllbHNlIGlmIChwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9TVVBFUl9TUEVFRCkKKwkJCQl1ZGV2LT5zcGVlZCA9IFVTQl9TUEVFRF9TVVBFUjsKIAkJCWVsc2UgaWYgKHBvcnRzdGF0dXMgJiBVU0JfUE9SVF9TVEFUX0hJR0hfU1BFRUQpCiAJCQkJdWRldi0+c3BlZWQgPSBVU0JfU1BFRURfSElHSDsKIAkJCWVsc2UgaWYgKHBvcnRzdGF0dXMgJiBVU0JfUE9SVF9TVEFUX0xPV19TUEVFRCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jCmluZGV4IGYyMmQwM2QuLmRiOTljMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYwpAQCAtNDEsNiArNDEsMTAgQEAKIAkvKiBQaGlsaXBzIFBTQzgwNSBhdWRpbyBkZXZpY2UgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNDcxLCAweDAxNTUpLCAuZHJpdmVyX2luZm8gPSBVU0JfUVVJUktfUkVTRVRfUkVTVU1FIH0sCiAKKwkvKiBBcnRpc21hbiBXYXRjaGRvZyBEb25nbGUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNGI0LCAweDA1MjYpLCAuZHJpdmVyX2luZm8gPQorCQkJVVNCX1FVSVJLX0NPTkZJR19JTlRGX1NUUklOR1MgfSwKKwogCS8qIFJvbGFuZCBTQy04ODIwICovCiAJeyBVU0JfREVWSUNFKDB4MDU4MiwgMHgwMDA3KSwgLmRyaXZlcl9pbmZvID0gVVNCX1FVSVJLX1JFU0VUX1JFU1VNRSB9LAogCkBAIC02NCw2ICs2OCw5IEBACiAJLyogWC1SaXRlL0dyZXRhZy1NYWNiZXRoIEV5ZS1PbmUgUHJvIGRpc3BsYXkgY29sb3JpbWV0ZXIgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwOTcxLCAweDIwMDApLCAuZHJpdmVyX2luZm8gPSBVU0JfUVVJUktfTk9fU0VUX0lOVEYgfSwKIAorCS8qIEJyb2FkY29tIEJDTTkyMDM1REdST00gQlQgZG9uZ2xlICovCisJeyBVU0JfREVWSUNFKDB4MGE1YywgMHgyMDIxKSwgLmRyaXZlcl9pbmZvID0gVVNCX1FVSVJLX1JFU0VUX1JFU1VNRSB9LAorCiAJLyogQWN0aW9uIFNlbWljb25kdWN0b3IgZmxhc2ggZGlzayAqLwogCXsgVVNCX0RFVklDRSgweDEwZDYsIDB4MjIwMCksIC5kcml2ZXJfaW5mbyA9CiAJCQlVU0JfUVVJUktfU1RSSU5HX0ZFVENIXzI1NSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYwppbmRleCBlYWE3OWM4Li45M2VhZDE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYwpAQCAtNzYsMTEgKzc2LDEyIEBACiBzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfbmFtZSBbXSA9ICJhdDkxX3VkYyI7CiBzdGF0aWMgY29uc3QgY2hhciBlcDBuYW1lW10gPSAiZXAwIjsKIAorI2RlZmluZSBWQlVTX1BPTExfVElNRU9VVAltc2Vjc190b19qaWZmaWVzKDEwMDApCiAKLSNkZWZpbmUgYXQ5MV91ZHBfcmVhZChkZXYsIHJlZykgXAotCV9fcmF3X3JlYWRsKChkZXYpLT51ZHBfYmFzZWFkZHIgKyAocmVnKSkKLSNkZWZpbmUgYXQ5MV91ZHBfd3JpdGUoZGV2LCByZWcsIHZhbCkgXAotCV9fcmF3X3dyaXRlbCgodmFsKSwgKGRldiktPnVkcF9iYXNlYWRkciArIChyZWcpKQorI2RlZmluZSBhdDkxX3VkcF9yZWFkKHVkYywgcmVnKSBcCisJX19yYXdfcmVhZGwoKHVkYyktPnVkcF9iYXNlYWRkciArIChyZWcpKQorI2RlZmluZSBhdDkxX3VkcF93cml0ZSh1ZGMsIHJlZywgdmFsKSBcCisJX19yYXdfd3JpdGVsKCh2YWwpLCAodWRjKS0+dWRwX2Jhc2VhZGRyICsgKHJlZykpCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTEwMiw4ICsxMDMsOSBAQAogCXUzMgkJCWNzcjsKIAlzdHJ1Y3QgYXQ5MV9yZXF1ZXN0CSpyZXE7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKKwlzdHJ1Y3QgYXQ5MV91ZGMJKnVkYyA9IGVwLT51ZGM7CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOwogCiAJY3NyID0gX19yYXdfcmVhZGwoZXAtPmNyZWcpOwogCkBAIC0xNDcsNyArMTQ5LDcgQEAKIAkJCQkmcmVxLT5yZXEsIGxlbmd0aCwKIAkJCQlyZXEtPnJlcS5sZW5ndGgsIHJlcS0+cmVxLmJ1Zik7CiAJfQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgcHJvY19pcnFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGNvbnN0IGNoYXIgKmxhYmVsLCB1MzIgbWFzaykKQEAgLTI3Miw3ICsyNzQsOSBAQAogCQlWREJHKCIlcyBkb25lICVwLCBzdGF0dXMgJWRcbiIsIGVwLT5lcC5uYW1lLCByZXEsIHN0YXR1cyk7CiAKIAllcC0+c3RvcHBlZCA9IDE7CisJc3Bpbl91bmxvY2soJnVkYy0+bG9jayk7CiAJcmVxLT5yZXEuY29tcGxldGUoJmVwLT5lcCwgJnJlcS0+cmVxKTsKKwlzcGluX2xvY2soJnVkYy0+bG9jayk7CiAJZXAtPnN0b3BwZWQgPSBzdG9wcGVkOwogCiAJLyogZXAwIGlzIGFsd2F5cyByZWFkeTsgb3RoZXIgZW5kcG9pbnRzIG5lZWQgYSBub24tZW1wdHkgcXVldWUgKi8KQEAgLTQ3Miw3ICs0NzYsNyBAQAogCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYykKIHsKIAlzdHJ1Y3QgYXQ5MV9lcAkqZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgYXQ5MV9lcCwgZXApOwotCXN0cnVjdCBhdDkxX3VkYwkqZGV2ID0gZXAtPnVkYzsKKwlzdHJ1Y3QgYXQ5MV91ZGMJKnVkYyA9IGVwLT51ZGM7CiAJdTE2CQltYXhwYWNrZXQ7CiAJdTMyCQl0bXA7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKQEAgLTQ4Nyw3ICs0OTEsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoIWRldi0+ZHJpdmVyIHx8IGRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKSB7CisJaWYgKCF1ZGMtPmRyaXZlciB8fCB1ZGMtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikgewogCQlEQkcoImJvZ3VzIGRldmljZSBzdGF0ZVxuIik7CiAJCXJldHVybiAtRVNIVVRET1dOOwogCX0KQEAgLTUyMSw3ICs1MjUsNyBAQAogCX0KIAogb2s6Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKIAogCS8qIGluaXRpYWxpemUgZW5kcG9pbnQgdG8gbWF0Y2ggdGhpcyBkZXNjcmlwdG9yICovCiAJZXAtPmlzX2luID0gdXNiX2VuZHBvaW50X2Rpcl9pbihkZXNjKTsKQEAgLTU0MCwxMCArNTQ0LDEwIEBACiAJICogcmVzZXQvaW5pdCBlbmRwb2ludCBmaWZvLiAgTk9URTogIGxlYXZlcyBmaWZvX2JhbmsgYWxvbmUsCiAJICogc2luY2UgZW5kcG9pbnQgcmVzZXRzIGRvbid0IHJlc2V0IGh3IHBpbmdwb25nIHN0YXRlLgogCSAqLwotCWF0OTFfdWRwX3dyaXRlKGRldiwgQVQ5MV9VRFBfUlNUX0VQLCBlcC0+aW50X21hc2spOwotCWF0OTFfdWRwX3dyaXRlKGRldiwgQVQ5MV9VRFBfUlNUX0VQLCAwKTsKKwlhdDkxX3VkcF93cml0ZSh1ZGMsIEFUOTFfVURQX1JTVF9FUCwgZXAtPmludF9tYXNrKTsKKwlhdDkxX3VkcF93cml0ZSh1ZGMsIEFUOTFfVURQX1JTVF9FUCwgMCk7CiAKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU1Niw3ICs1NjAsNyBAQAogCWlmIChlcCA9PSAmZXAtPnVkYy0+ZXBbMF0pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKIAogCW51a2UoZXAsIC1FU0hVVERPV04pOwogCkBAIC01NzEsNyArNTc1LDcgQEAKIAkJX19yYXdfd3JpdGVsKDAsIGVwLT5jcmVnKTsKIAl9CiAKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYwNyw3ICs2MTEsNyBAQAogewogCXN0cnVjdCBhdDkxX3JlcXVlc3QJKnJlcTsKIAlzdHJ1Y3QgYXQ5MV9lcAkJKmVwOwotCXN0cnVjdCBhdDkxX3VkYwkJKmRldjsKKwlzdHJ1Y3QgYXQ5MV91ZGMJCSp1ZGM7CiAJaW50CQkJc3RhdHVzOwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCkBAIC02MjUsOSArNjI5LDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZGV2ID0gZXAtPnVkYzsKKwl1ZGMgPSBlcC0+dWRjOwogCi0JaWYgKCFkZXYgfHwgIWRldi0+ZHJpdmVyIHx8IGRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKSB7CisJaWYgKCF1ZGMgfHwgIXVkYy0+ZHJpdmVyIHx8IHVkYy0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKSB7CiAJCURCRygiaW52YWxpZCBkZXZpY2VcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC02MzUsNyArNjM5LDcgQEAKIAlfcmVxLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CiAJX3JlcS0+YWN0dWFsID0gMDsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CiAKIAkvKiB0cnkgdG8ga2lja3N0YXJ0IGFueSBlbXB0eSBhbmQgaWRsZSBxdWV1ZSAqLwogCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpICYmICFlcC0+c3RvcHBlZCkgewpAQCAtNjUzLDcgKzY1Nyw3IEBACiAJCWlmIChpc19lcDApIHsKIAkJCXUzMgl0bXA7CiAKLQkJCWlmICghZGV2LT5yZXFfcGVuZGluZykgeworCQkJaWYgKCF1ZGMtPnJlcV9wZW5kaW5nKSB7CiAJCQkJc3RhdHVzID0gLUVJTlZBTDsKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CkBAIC02NjIsMTEgKzY2NiwxMSBAQAogCQkJICogZGVmZXIgY2hhbmdpbmcgQ09ORkcgdW50aWwgYWZ0ZXIgdGhlIGdhZGdldCBkcml2ZXIKIAkJCSAqIHJlY29uZmlndXJlcyB0aGUgZW5kcG9pbnRzLgogCQkJICovCi0JCQlpZiAoZGV2LT53YWl0X2Zvcl9jb25maWdfYWNrKSB7Ci0JCQkJdG1wID0gYXQ5MV91ZHBfcmVhZChkZXYsIEFUOTFfVURQX0dMQl9TVEFUKTsKKwkJCWlmICh1ZGMtPndhaXRfZm9yX2NvbmZpZ19hY2spIHsKKwkJCQl0bXAgPSBhdDkxX3VkcF9yZWFkKHVkYywgQVQ5MV9VRFBfR0xCX1NUQVQpOwogCQkJCXRtcCBePSBBVDkxX1VEUF9DT05GRzsKIAkJCQlWREJHKCJ0b2dnbGUgY29uZmlnXG4iKTsKLQkJCQlhdDkxX3VkcF93cml0ZShkZXYsIEFUOTFfVURQX0dMQl9TVEFULCB0bXApOworCQkJCWF0OTFfdWRwX3dyaXRlKHVkYywgQVQ5MV9VRFBfR0xCX1NUQVQsIHRtcCk7CiAJCQl9CiAJCQlpZiAocmVxLT5yZXEubGVuZ3RoID09IDApIHsKIGVwMF9pbl9zdGF0dXM6CkBAIC02NzYsNyArNjgwLDcgQEAKIAkJCQl0bXAgJj0gflNFVF9GWDsKIAkJCQl0bXAgfD0gQ0xSX0ZYIHwgQVQ5MV9VRFBfVFhQS1RSRFk7CiAJCQkJX19yYXdfd3JpdGVsKHRtcCwgZXAtPmNyZWcpOwotCQkJCWRldi0+cmVxX3BlbmRpbmcgPSAwOworCQkJCXVkYy0+cmVxX3BlbmRpbmcgPSAwOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KIAkJfQpAQCAtNjk1LDMxICs2OTksNDAgQEAKIAogCWlmIChyZXEgJiYgIXN0YXR1cykgewogCQlsaXN0X2FkZF90YWlsICgmcmVxLT5xdWV1ZSwgJmVwLT5xdWV1ZSk7Ci0JCWF0OTFfdWRwX3dyaXRlKGRldiwgQVQ5MV9VRFBfSUVSLCBlcC0+aW50X21hc2spOworCQlhdDkxX3VkcF93cml0ZSh1ZGMsIEFUOTFfVURQX0lFUiwgZXAtPmludF9tYXNrKTsKIAl9CiBkb25lOgotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gKHN0YXR1cyA8IDApID8gc3RhdHVzIDogMDsKIH0KIAogc3RhdGljIGludCBhdDkxX2VwX2RlcXVldWUoc3RydWN0IHVzYl9lcCAqX2VwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKl9yZXEpCiB7Ci0Jc3RydWN0IGF0OTFfZXAJKmVwOworCXN0cnVjdCBhdDkxX2VwCQkqZXA7CiAJc3RydWN0IGF0OTFfcmVxdWVzdAkqcmVxOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCXN0cnVjdCBhdDkxX3VkYwkJKnVkYzsKIAogCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IGF0OTFfZXAsIGVwKTsKIAlpZiAoIV9lcCB8fCBlcC0+ZXAubmFtZSA9PSBlcDBuYW1lKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCXVkYyA9IGVwLT51ZGM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKIAkvKiBtYWtlIHN1cmUgaXQncyBhY3R1YWxseSBxdWV1ZWQgb24gdGhpcyBlbmRwb2ludCAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkgKHJlcSwgJmVwLT5xdWV1ZSwgcXVldWUpIHsKIAkJaWYgKCZyZXEtPnJlcSA9PSBfcmVxKQogCQkJYnJlYWs7CiAJfQotCWlmICgmcmVxLT5yZXEgIT0gX3JlcSkKKwlpZiAoJnJlcS0+cmVxICE9IF9yZXEpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAogCWRvbmUoZXAsIHJlcSwgLUVDT05OUkVTRVQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC03MzYsNyArNzQ5LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAljcmVnID0gZXAtPmNyZWc7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKIAogCWNzciA9IF9fcmF3X3JlYWRsKGNyZWcpOwogCkBAIC03NjEsNyArNzc0LDcgQEAKIAkJX19yYXdfd3JpdGVsKGNzciwgY3JlZyk7CiAJfQogCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTc5NSw3ICs4MDgsNyBAQAogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAKIAlEQkcoIiVzXG4iLCBfX2Z1bmNfXyApOwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoIXVkYy0+Y2xvY2tlZCB8fCAhdWRjLT5zdXNwZW5kZWQpCiAJCWdvdG8gZG9uZTsKQEAgLTgwOSw3ICs4MjIsNyBAQAogCWF0OTFfdWRwX3dyaXRlKHVkYywgQVQ5MV9VRFBfR0xCX1NUQVQsIGdsYnN0YXRlKTsKIAogZG9uZToKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtODUxLDggKzg2NCwxMSBAQAogCQllcC0+c3RvcHBlZCA9IDE7CiAJCW51a2UoZXAsIC1FU0hVVERPV04pOwogCX0KLQlpZiAoZHJpdmVyKQorCWlmIChkcml2ZXIpIHsKKwkJc3Bpbl91bmxvY2soJnVkYy0+bG9jayk7CiAJCWRyaXZlci0+ZGlzY29ubmVjdCgmdWRjLT5nYWRnZXQpOworCQlzcGluX2xvY2soJnVkYy0+bG9jayk7CisJfQogCiAJdWRjX3JlaW5pdCh1ZGMpOwogfQpAQCAtOTM1LDEzICs5NTEsMTMgQEAKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCiAJLy8gVkRCRygidmJ1cyAlc1xuIiwgaXNfYWN0aXZlID8gIm9uIiA6ICJvZmYiKTsKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOwogCXVkYy0+dmJ1cyA9IChpc19hY3RpdmUgIT0gMCk7CiAJaWYgKHVkYy0+ZHJpdmVyKQogCQlwdWxsdXAodWRjLCBpc19hY3RpdmUpOwogCWVsc2UKIAkJcHVsbHVwKHVkYywgMCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC05NTAsMTAgKzk2NiwxMCBAQAogCXN0cnVjdCBhdDkxX3VkYwkqdWRjID0gdG9fdWRjKGdhZGdldCk7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CiAJdWRjLT5lbmFibGVkID0gaXNfb24gPSAhIWlzX29uOwogCXB1bGx1cCh1ZGMsIGlzX29uKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk2Miw5ICs5NzgsOSBAQAogCXN0cnVjdCBhdDkxX3VkYwkqdWRjID0gdG9fdWRjKGdhZGdldCk7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CiAJdWRjLT5zZWxmcG93ZXJlZCA9IChpc19vbiAhPSAwKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyMjYsOCArMTI0MiwxMSBAQAogI3VuZGVmIHdfbGVuZ3RoCiAKIAkvKiBwYXNzIHJlcXVlc3QgdXAgdG8gdGhlIGdhZGdldCBkcml2ZXIgKi8KLQlpZiAodWRjLT5kcml2ZXIpCisJaWYgKHVkYy0+ZHJpdmVyKSB7CisJCXNwaW5fdW5sb2NrKCZ1ZGMtPmxvY2spOwogCQlzdGF0dXMgPSB1ZGMtPmRyaXZlci0+c2V0dXAoJnVkYy0+Z2FkZ2V0LCAmcGt0LnIpOworCQlzcGluX2xvY2soJnVkYy0+bG9jayk7CisJfQogCWVsc2UKIAkJc3RhdHVzID0gLUVOT0RFVjsKIAlpZiAoc3RhdHVzIDwgMCkgewpAQCAtMTM3OCw2ICsxMzk3LDkgQEAKIAlzdHJ1Y3QgYXQ5MV91ZGMJCSp1ZGMgPSBfdWRjOwogCXUzMgkJCXJlc2NhbnMgPSA1OwogCWludAkJCWRpc2FibGVfY2xvY2sgPSAwOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKCF1ZGMtPmNsb2NrZWQpIHsKIAkJY2xrX29uKHVkYyk7CkBAIC0xNDMzLDggKzE0NTUsMTEgQEAKIAkJCSAqIGFuZCB0aGVuIGludG8gc3RhbmRieSB0byBhdm9pZCBkcmF3aW5nIG1vcmUgdGhhbgogCQkJICogNTAwdUEgcG93ZXIgKDI1MDB1QSBmb3Igc29tZSBoaWdoLXBvd2VyIGNvbmZpZ3MpLgogCQkJICovCi0JCQlpZiAodWRjLT5kcml2ZXIgJiYgdWRjLT5kcml2ZXItPnN1c3BlbmQpCisJCQlpZiAodWRjLT5kcml2ZXIgJiYgdWRjLT5kcml2ZXItPnN1c3BlbmQpIHsKKwkJCQlzcGluX3VubG9jaygmdWRjLT5sb2NrKTsKIAkJCQl1ZGMtPmRyaXZlci0+c3VzcGVuZCgmdWRjLT5nYWRnZXQpOworCQkJCXNwaW5fbG9jaygmdWRjLT5sb2NrKTsKKwkJCX0KIAogCQkvKiBob3N0IGluaXRpYXRlZCByZXN1bWUgKi8KIAkJfSBlbHNlIGlmIChzdGF0dXMgJiBBVDkxX1VEUF9SWFJTTSkgewpAQCAtMTQ1MSw4ICsxNDc2LDExIEBACiAJCQkgKiB3b3VsZCBub3JtYWxseSB3YW50IHRvIHN3aXRjaCBvdXQgb2Ygc2xvdyBjbG9jawogCQkJICogbW9kZSBpbnRvIG5vcm1hbCBtb2RlLgogCQkJICovCi0JCQlpZiAodWRjLT5kcml2ZXIgJiYgdWRjLT5kcml2ZXItPnJlc3VtZSkKKwkJCWlmICh1ZGMtPmRyaXZlciAmJiB1ZGMtPmRyaXZlci0+cmVzdW1lKSB7CisJCQkJc3Bpbl91bmxvY2soJnVkYy0+bG9jayk7CiAJCQkJdWRjLT5kcml2ZXItPnJlc3VtZSgmdWRjLT5nYWRnZXQpOworCQkJCXNwaW5fbG9jaygmdWRjLT5sb2NrKTsKKwkJCX0KIAogCQkvKiBlbmRwb2ludCBJUlFzIGFyZSBjbGVhcmVkIGJ5IGhhbmRsaW5nIHRoZW0gKi8KIAkJfSBlbHNlIHsKQEAgLTE0NzQsNiArMTUwMiw4IEBACiAJaWYgKGRpc2FibGVfY2xvY2spCiAJCWNsa19vZmYodWRjKTsKIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC0xNTU2LDI0ICsxNTg2LDUzIEBACiAJLyogZXA2IGFuZCBlcDcgYXJlIGFsc28gcmVzZXJ2ZWQgKGN1c3RvbSBzaWxpY29uIG1pZ2h0IHVzZSB0aGVtKSAqLwogfTsKIAorc3RhdGljIHZvaWQgYXQ5MV92YnVzX3VwZGF0ZShzdHJ1Y3QgYXQ5MV91ZGMgKnVkYywgdW5zaWduZWQgdmFsdWUpCit7CisJdmFsdWUgXj0gdWRjLT5ib2FyZC52YnVzX2FjdGl2ZV9sb3c7CisJaWYgKHZhbHVlICE9IHVkYy0+dmJ1cykKKwkJYXQ5MV92YnVzX3Nlc3Npb24oJnVkYy0+Z2FkZ2V0LCB2YWx1ZSk7Cit9CisKIHN0YXRpYyBpcnFyZXR1cm5fdCBhdDkxX3ZidXNfaXJxKGludCBpcnEsIHZvaWQgKl91ZGMpCiB7CiAJc3RydWN0IGF0OTFfdWRjCSp1ZGMgPSBfdWRjOwotCXVuc2lnbmVkCXZhbHVlOwogCiAJLyogdmJ1cyBuZWVkcyBhdCBsZWFzdCBicmllZiBkZWJvdW5jaW5nICovCiAJdWRlbGF5KDEwKTsKLQl2YWx1ZSA9IGdwaW9fZ2V0X3ZhbHVlKHVkYy0+Ym9hcmQudmJ1c19waW4pOwotCWlmICh2YWx1ZSAhPSB1ZGMtPnZidXMpCi0JCWF0OTFfdmJ1c19zZXNzaW9uKCZ1ZGMtPmdhZGdldCwgdmFsdWUpOworCWF0OTFfdmJ1c191cGRhdGUodWRjLCBncGlvX2dldF92YWx1ZSh1ZGMtPmJvYXJkLnZidXNfcGluKSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKK3N0YXRpYyB2b2lkIGF0OTFfdmJ1c190aW1lcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXQ5MV91ZGMgKnVkYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXQ5MV91ZGMsCisJCQkJCSAgICB2YnVzX3RpbWVyX3dvcmspOworCisJYXQ5MV92YnVzX3VwZGF0ZSh1ZGMsIGdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKHVkYy0+Ym9hcmQudmJ1c19waW4pKTsKKworCWlmICghdGltZXJfcGVuZGluZygmdWRjLT52YnVzX3RpbWVyKSkKKwkJbW9kX3RpbWVyKCZ1ZGMtPnZidXNfdGltZXIsIGppZmZpZXMgKyBWQlVTX1BPTExfVElNRU9VVCk7Cit9CisKK3N0YXRpYyB2b2lkIGF0OTFfdmJ1c190aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGF0OTFfdWRjICp1ZGMgPSAoc3RydWN0IGF0OTFfdWRjICopZGF0YTsKKworCS8qCisJICogSWYgd2UgYXJlIHBvbGxpbmcgdmJ1cyBpdCBpcyBsaWtlbHkgdGhhdCB0aGUgZ3BpbyBpcyBvbiBhbgorCSAqIGJ1cyBzdWNoIGFzIGkyYyBvciBzcGkgd2hpY2ggbWF5IHNsZWVwLCBzbyBzY2hlZHVsZSBzb21lIHdvcmsKKwkgKiB0byByZWFkIHRoZSB2YnVzIGdwaW8KKwkgKi8KKwlpZiAoIXdvcmtfcGVuZGluZygmdWRjLT52YnVzX3RpbWVyX3dvcmspKQorCQlzY2hlZHVsZV93b3JrKCZ1ZGMtPnZidXNfdGltZXJfd29yayk7Cit9CisKIGludCB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlciAoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCiB7CiAJc3RydWN0IGF0OTFfdWRjCSp1ZGMgPSAmY29udHJvbGxlcjsKIAlpbnQJCXJldHZhbDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOwogCiAJaWYgKCFkcml2ZXIKIAkJCXx8IGRyaXZlci0+c3BlZWQgPCBVU0JfU1BFRURfRlVMTApAQCAtMTYwNSw5ICsxNjY0LDkgQEAKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKIAlwdWxsdXAodWRjLCAxKTsKLQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CiAKIAlEQkcoImJvdW5kIHRvICVzXG4iLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKIAlyZXR1cm4gMDsKQEAgLTE2MTcsMTUgKzE2NzYsMTYgQEAKIGludCB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyIChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKIHsKIAlzdHJ1Y3QgYXQ5MV91ZGMgKnVkYyA9ICZjb250cm9sbGVyOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAKIAlpZiAoIWRyaXZlciB8fCBkcml2ZXIgIT0gdWRjLT5kcml2ZXIgfHwgIWRyaXZlci0+dW5iaW5kKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOwogCXVkYy0+ZW5hYmxlZCA9IDA7CiAJYXQ5MV91ZHBfd3JpdGUodWRjLCBBVDkxX1VEUF9JRFIsIH4wKTsKIAlwdWxsdXAodWRjLCAwKTsKLQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CiAKIAlkcml2ZXItPnVuYmluZCgmdWRjLT5nYWRnZXQpOwogCXVkYy0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOwpAQCAtMTY0MSw4ICsxNzAxLDEzIEBACiAKIHN0YXRpYyB2b2lkIGF0OTF1ZGNfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogeworCXN0cnVjdCBhdDkxX3VkYyAqdWRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCiAJLyogZm9yY2UgZGlzY29ubmVjdCBvbiByZWJvb3QgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CiAJcHVsbHVwKHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldiksIDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBhdDkxdWRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC0xNjgzLDYgKzE3NDgsNyBAQAogCXVkYy0+Ym9hcmQgPSAqKHN0cnVjdCBhdDkxX3VkY19kYXRhICopIGRldi0+cGxhdGZvcm1fZGF0YTsKIAl1ZGMtPnBkZXYgPSBwZGV2OwogCXVkYy0+ZW5hYmxlZCA9IDA7CisJc3Bpbl9sb2NrX2luaXQoJnVkYy0+bG9jayk7CiAKIAkvKiBybTkyMDAgbmVlZHMgbWFudWFsIEQrIHB1bGx1cDsgb2ZmIGJ5IGRlZmF1bHQgKi8KIAlpZiAoY3B1X2lzX2F0OTFybTkyMDAoKSkgewpAQCAtMTc2MywxMyArMTgyOSwyMyBAQAogCQkgKiBHZXQgdGhlIGluaXRpYWwgc3RhdGUgb2YgVkJVUyAtIHdlIGNhbm5vdCBleHBlY3QKIAkJICogYSBwZW5kaW5nIGludGVycnVwdC4KIAkJICovCi0JCXVkYy0+dmJ1cyA9IGdwaW9fZ2V0X3ZhbHVlKHVkYy0+Ym9hcmQudmJ1c19waW4pOwotCQlpZiAocmVxdWVzdF9pcnEodWRjLT5ib2FyZC52YnVzX3BpbiwgYXQ5MV92YnVzX2lycSwKLQkJCQlJUlFGX0RJU0FCTEVELCBkcml2ZXJfbmFtZSwgdWRjKSkgewotCQkJREJHKCJyZXF1ZXN0IHZidXMgaXJxICVkIGZhaWxlZFxuIiwKLQkJCQkJdWRjLT5ib2FyZC52YnVzX3Bpbik7Ci0JCQlyZXR2YWwgPSAtRUJVU1k7Ci0JCQlnb3RvIGZhaWwzOworCQl1ZGMtPnZidXMgPSBncGlvX2dldF92YWx1ZV9jYW5zbGVlcCh1ZGMtPmJvYXJkLnZidXNfcGluKSBeCisJCQl1ZGMtPmJvYXJkLnZidXNfYWN0aXZlX2xvdzsKKworCQlpZiAodWRjLT5ib2FyZC52YnVzX3BvbGxlZCkgeworCQkJSU5JVF9XT1JLKCZ1ZGMtPnZidXNfdGltZXJfd29yaywgYXQ5MV92YnVzX3RpbWVyX3dvcmspOworCQkJc2V0dXBfdGltZXIoJnVkYy0+dmJ1c190aW1lciwgYXQ5MV92YnVzX3RpbWVyLAorCQkJCSAgICAodW5zaWduZWQgbG9uZyl1ZGMpOworCQkJbW9kX3RpbWVyKCZ1ZGMtPnZidXNfdGltZXIsCisJCQkJICBqaWZmaWVzICsgVkJVU19QT0xMX1RJTUVPVVQpOworCQl9IGVsc2UgeworCQkJaWYgKHJlcXVlc3RfaXJxKHVkYy0+Ym9hcmQudmJ1c19waW4sIGF0OTFfdmJ1c19pcnEsCisJCQkJCUlSUUZfRElTQUJMRUQsIGRyaXZlcl9uYW1lLCB1ZGMpKSB7CisJCQkJREJHKCJyZXF1ZXN0IHZidXMgaXJxICVkIGZhaWxlZFxuIiwKKwkJCQkgICAgdWRjLT5ib2FyZC52YnVzX3Bpbik7CisJCQkJcmV0dmFsID0gLUVCVVNZOworCQkJCWdvdG8gZmFpbDM7CisJCQl9CiAJCX0KIAl9IGVsc2UgewogCQlEQkcoIm5vIFZCVVMgZGV0ZWN0aW9uLCBhc3N1bWluZyBhbHdheXMtb25cbiIpOwpAQCAtMTgwNCwxMyArMTg4MCwxNiBAQAogewogCXN0cnVjdCBhdDkxX3VkYyAqdWRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKIAogCURCRygicmVtb3ZlXG4iKTsKIAogCWlmICh1ZGMtPmRyaXZlcikKIAkJcmV0dXJuIC1FQlVTWTsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKIAlwdWxsdXAodWRjLCAwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKIAogCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAwKTsKIAlyZW1vdmVfZGVidWdfZmlsZSh1ZGMpOwpAQCAtMTg0MCw2ICsxOTE5LDcgQEAKIHsKIAlzdHJ1Y3QgYXQ5MV91ZGMgKnVkYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCWludAkJd2FrZSA9IHVkYy0+ZHJpdmVyICYmIGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAKIAkvKiBVbmxlc3Mgd2UgY2FuIGFjdCBub3JtYWxseSB0byB0aGUgaG9zdCAobGV0dGluZyBpdCB3YWtlIHVzIHVwCiAJICogd2hlbmV2ZXIgaXQgaGFzIHdvcmsgZm9yIHVzKSBmb3JjZSBkaXNjb25uZWN0LiAgV2FrZXVwIHJlcXVpcmVzCkBAIC0xODQ5LDEzICsxOTI5LDE1IEBACiAJaWYgKCghdWRjLT5zdXNwZW5kZWQgJiYgdWRjLT5hZGRyKQogCQkJfHwgIXdha2UKIAkJCXx8IGF0OTFfc3VzcGVuZF9lbnRlcmluZ19zbG93X2Nsb2NrKCkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOwogCQlwdWxsdXAodWRjLCAwKTsKIAkJd2FrZSA9IDA7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOwogCX0gZWxzZQogCQllbmFibGVfaXJxX3dha2UodWRjLT51ZHBfaXJxKTsKIAogCXVkYy0+YWN0aXZlX3N1c3BlbmQgPSB3YWtlOwotCWlmICh1ZGMtPmJvYXJkLnZidXNfcGluID4gMCAmJiB3YWtlKQorCWlmICh1ZGMtPmJvYXJkLnZidXNfcGluID4gMCAmJiAhdWRjLT5ib2FyZC52YnVzX3BvbGxlZCAmJiB3YWtlKQogCQllbmFibGVfaXJxX3dha2UodWRjLT5ib2FyZC52YnVzX3Bpbik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xODYzLDE1ICsxOTQ1LDIwIEBACiBzdGF0aWMgaW50IGF0OTF1ZGNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGF0OTFfdWRjICp1ZGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOwogCi0JaWYgKHVkYy0+Ym9hcmQudmJ1c19waW4gPiAwICYmIHVkYy0+YWN0aXZlX3N1c3BlbmQpCisJaWYgKHVkYy0+Ym9hcmQudmJ1c19waW4gPiAwICYmICF1ZGMtPmJvYXJkLnZidXNfcG9sbGVkICYmCisJICAgIHVkYy0+YWN0aXZlX3N1c3BlbmQpCiAJCWRpc2FibGVfaXJxX3dha2UodWRjLT5ib2FyZC52YnVzX3Bpbik7CiAKIAkvKiBtYXliZSByZWNvbm5lY3QgdG8gaG9zdDsgaWYgc28sIGNsb2NrcyBvbiAqLwogCWlmICh1ZGMtPmFjdGl2ZV9zdXNwZW5kKQogCQlkaXNhYmxlX2lycV93YWtlKHVkYy0+dWRwX2lycSk7Ci0JZWxzZQorCWVsc2UgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CiAJCXB1bGx1cCh1ZGMsIDEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuaAppbmRleCBjNjVkNjIyLi4xMDhjYTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuaApAQCAtMTQ0LDYgKzE0NCw5IEBACiAJc3RydWN0IHByb2NfZGlyX2VudHJ5CQkqcGRlOwogCXZvaWQgX19pb21lbQkJCSp1ZHBfYmFzZWFkZHI7CiAJaW50CQkJCXVkcF9pcnE7CisJc3BpbmxvY2tfdAkJCWxvY2s7CisJc3RydWN0IHRpbWVyX2xpc3QJCXZidXNfdGltZXI7CisJc3RydWN0IHdvcmtfc3RydWN0CQl2YnVzX3RpbWVyX3dvcms7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhdDkxX3VkYyAqdG9fdWRjKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfZnMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2ZzLmMKaW5kZXggZDY5ZWNjZi4uMmFhYTBmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfZnMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9mcy5jCkBAIC0xMzYsNyArMTM2LDcgQEAKIAkgKiBoYW5kbGluZyBzZXR1cCByZXF1ZXN0cyBpbW1pZGlhdGVsbHkgdXNlciBzcGFjZSBtYXkgYmUgc28KIAkgKiBzbG93IHRoYXQgYW5vdGhlciBzZXR1cCB3aWxsIGJlIHNlbnQgdG8gdGhlIGdhZGdldCBidXQgdGhpcwogCSAqIHRpbWUgbm90IHRvIHVzIGJ1dCBhbm90aGVyIGZ1bmN0aW9uIGFuZCB0aGVuIHRoZXJlIGNvdWxkIGJlCi0JICogYSByYWNlLiAgSXMgdGFodCB0aGUgY2FzZT8gT3IgbWF5YmUgd2UgY2FuIHVzZSBjZGV2LT5yZXEKKwkgKiBhIHJhY2UuICBJcyB0aGF0IHRoZSBjYXNlPyBPciBtYXliZSB3ZSBjYW4gdXNlIGNkZXYtPnJlcQogCSAqIGFmdGVyIGFsbCwgbWF5YmUgd2UganVzdCBuZWVkIHNvbWUgc3BpbmxvY2sgZm9yIHRoYXQ/ICovCiAJc3RydWN0IHVzYl9yZXF1ZXN0CQkqZXAwcmVxOwkJLyogUDogbXV0ZXggKi8KIAlzdHJ1Y3QgY29tcGxldGlvbgkJZXAwcmVxX2NvbXBsZXRpb247CS8qIFA6IG11dGV4ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl91dmMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3V2Yy5jCmluZGV4IGZjMjYxMWYuLmJlNDQ2YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3V2Yy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3V2Yy5jCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJ1dmMuaCIKIAotdW5zaWduZWQgaW50IHV2Y190cmFjZV9wYXJhbTsKK3Vuc2lnbmVkIGludCB1dmNfZ2FkZ2V0X3RyYWNlX3BhcmFtOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRnVuY3Rpb24gZGVzY3JpcHRvcnMKQEAgLTYxLDEyICs2MSwxMiBAQAogI2RlZmluZSBVVkNfSU5URl9WSURFT19TVFJFQU1JTkcJCTEKIAogc3RhdGljIHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Fzc29jX2Rlc2NyaXB0b3IgdXZjX2lhZCBfX2luaXRkYXRhID0gewotCS5iTGVuZ3RoCQk9IFVTQl9EVF9JTlRFUkZBQ0VfQVNTT0NJQVRJT05fU0laRSwKKwkuYkxlbmd0aAkJPSBzaXplb2YodXZjX2lhZCksCiAJLmJEZXNjcmlwdG9yVHlwZQk9IFVTQl9EVF9JTlRFUkZBQ0VfQVNTT0NJQVRJT04sCiAJLmJGaXJzdEludGVyZmFjZQk9IDAsCiAJLmJJbnRlcmZhY2VDb3VudAk9IDIsCiAJLmJGdW5jdGlvbkNsYXNzCQk9IFVTQl9DTEFTU19WSURFTywKLQkuYkZ1bmN0aW9uU3ViQ2xhc3MJPSAweDAzLAorCS5iRnVuY3Rpb25TdWJDbGFzcwk9IFVWQ19TQ19WSURFT19JTlRFUkZBQ0VfQ09MTEVDVElPTiwKIAkuYkZ1bmN0aW9uUHJvdG9jb2wJPSAweDAwLAogCS5pRnVuY3Rpb24JCT0gMCwKIH07CkBAIC03OCw3ICs3OCw3IEBACiAJLmJBbHRlcm5hdGVTZXR0aW5nCT0gMCwKIAkuYk51bUVuZHBvaW50cwkJPSAxLAogCS5iSW50ZXJmYWNlQ2xhc3MJPSBVU0JfQ0xBU1NfVklERU8sCi0JLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDB4MDEsCisJLmJJbnRlcmZhY2VTdWJDbGFzcwk9IFVWQ19TQ19WSURFT0NPTlRST0wsCiAJLmJJbnRlcmZhY2VQcm90b2NvbAk9IDB4MDAsCiAJLmlJbnRlcmZhY2UJCT0gMCwKIH07CkBAIC0xMDYsNyArMTA2LDcgQEAKIAkuYkFsdGVybmF0ZVNldHRpbmcJPSAwLAogCS5iTnVtRW5kcG9pbnRzCQk9IDAsCiAJLmJJbnRlcmZhY2VDbGFzcwk9IFVTQl9DTEFTU19WSURFTywKLQkuYkludGVyZmFjZVN1YkNsYXNzCT0gMHgwMiwKKwkuYkludGVyZmFjZVN1YkNsYXNzCT0gVVZDX1NDX1ZJREVPU1RSRUFNSU5HLAogCS5iSW50ZXJmYWNlUHJvdG9jb2wJPSAweDAwLAogCS5pSW50ZXJmYWNlCQk9IDAsCiB9OwpAQCAtMTE4LDcgKzExOCw3IEBACiAJLmJBbHRlcm5hdGVTZXR0aW5nCT0gMSwKIAkuYk51bUVuZHBvaW50cwkJPSAxLAogCS5iSW50ZXJmYWNlQ2xhc3MJPSBVU0JfQ0xBU1NfVklERU8sCi0JLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDB4MDIsCisJLmJJbnRlcmZhY2VTdWJDbGFzcwk9IFVWQ19TQ19WSURFT1NUUkVBTUlORywKIAkuYkludGVyZmFjZVByb3RvY29sCT0gMHgwMCwKIAkuaUludGVyZmFjZQkJPSAwLAogfTsKQEAgLTYwMywxNSArNjAzLDE1IEBACiAKIAkvKiBWYWxpZGF0ZSB0aGUgZGVzY3JpcHRvcnMuICovCiAJaWYgKGNvbnRyb2wgPT0gTlVMTCB8fCBjb250cm9sWzBdID09IE5VTEwgfHwKLQkgICAgY29udHJvbFswXS0+YkRlc2NyaXB0b3JTdWJUeXBlICE9IFVWQ19EVF9IRUFERVIpCisJICAgIGNvbnRyb2xbMF0tPmJEZXNjcmlwdG9yU3ViVHlwZSAhPSBVVkNfVkNfSEVBREVSKQogCQlnb3RvIGVycm9yOwogCiAJaWYgKGZzX3N0cmVhbWluZyA9PSBOVUxMIHx8IGZzX3N0cmVhbWluZ1swXSA9PSBOVUxMIHx8Ci0JICAgIGZzX3N0cmVhbWluZ1swXS0+YkRlc2NyaXB0b3JTdWJUeXBlICE9IFVWQ19EVF9JTlBVVF9IRUFERVIpCisJICAgIGZzX3N0cmVhbWluZ1swXS0+YkRlc2NyaXB0b3JTdWJUeXBlICE9IFVWQ19WU19JTlBVVF9IRUFERVIpCiAJCWdvdG8gZXJyb3I7CiAKIAlpZiAoaHNfc3RyZWFtaW5nID09IE5VTEwgfHwgaHNfc3RyZWFtaW5nWzBdID09IE5VTEwgfHwKLQkgICAgaHNfc3RyZWFtaW5nWzBdLT5iRGVzY3JpcHRvclN1YlR5cGUgIT0gVVZDX0RUX0lOUFVUX0hFQURFUikKKwkgICAgaHNfc3RyZWFtaW5nWzBdLT5iRGVzY3JpcHRvclN1YlR5cGUgIT0gVVZDX1ZTX0lOUFVUX0hFQURFUikKIAkJZ290byBlcnJvcjsKIAogCXV2Yy0+ZGVzYy5jb250cm9sID0gY29udHJvbDsKQEAgLTY1Niw2ICs2NTYsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLW1vZHVsZV9wYXJhbV9uYW1lZCh0cmFjZSwgdXZjX3RyYWNlX3BhcmFtLCB1aW50LCBTX0lSVUdPfFNfSVdVU1IpOworbW9kdWxlX3BhcmFtX25hbWVkKHRyYWNlLCB1dmNfZ2FkZ2V0X3RyYWNlX3BhcmFtLCB1aW50LCBTX0lSVUdPfFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyh0cmFjZSwgIlRyYWNlIGxldmVsIGJpdG1hc2siKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfdXZjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl91dmMuaAppbmRleCA4YTVkYjdjLi5lMThhNjYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl91dmMuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl91dmMuaApAQCAtMTUsMzU3ICsxNSw3IEBACiAjZGVmaW5lIF9GX1VWQ19IXwogCiAjaW5jbHVkZSA8bGludXgvdXNiL2NvbXBvc2l0ZS5oPgotCi0jZGVmaW5lIFVTQl9DTEFTU19WSURFT19DT05UUk9MCQkxCi0jZGVmaW5lIFVTQl9DTEFTU19WSURFT19TVFJFQU1JTkcJMgotCi1zdHJ1Y3QgdXZjX2Rlc2NyaXB0b3JfaGVhZGVyIHsKLQlfX3U4ICBiTGVuZ3RoOwotCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKLQlfX3U4ICBiRGVzY3JpcHRvclN1YlR5cGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHV2Y19oZWFkZXJfZGVzY3JpcHRvciB7Ci0JX191OCAgYkxlbmd0aDsKLQlfX3U4ICBiRGVzY3JpcHRvclR5cGU7Ci0JX191OCAgYkRlc2NyaXB0b3JTdWJUeXBlOwotCV9fdTE2IGJjZFVWQzsKLQlfX3UxNiB3VG90YWxMZW5ndGg7Ci0JX191MzIgZHdDbG9ja0ZyZXF1ZW5jeTsKLQlfX3U4ICBiSW5Db2xsZWN0aW9uOwotCV9fdTggIGJhSW50ZXJmYWNlTnJbXTsKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi0jZGVmaW5lIFVWQ19IRUFERVJfREVTQ1JJUFRPUihuKQl1dmNfaGVhZGVyX2Rlc2NyaXB0b3JfIyNuCi0KLSNkZWZpbmUgREVDTEFSRV9VVkNfSEVBREVSX0RFU0NSSVBUT1IobikgCQkJXAotc3RydWN0IFVWQ19IRUFERVJfREVTQ1JJUFRPUihuKSB7CQkJCVwKLQlfX3U4ICBiTGVuZ3RoOwkJCQkJCVwKLQlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CQkJCQlcCi0JX191OCAgYkRlc2NyaXB0b3JTdWJUeXBlOwkJCQlcCi0JX191MTYgYmNkVVZDOwkJCQkJCVwKLQlfX3UxNiB3VG90YWxMZW5ndGg7CQkJCQlcCi0JX191MzIgZHdDbG9ja0ZyZXF1ZW5jeTsJCQkJCVwKLQlfX3U4ICBiSW5Db2xsZWN0aW9uOwkJCQkJXAotCV9fdTggIGJhSW50ZXJmYWNlTnJbbl07CQkJCQlcCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKQotCi1zdHJ1Y3QgdXZjX2lucHV0X3Rlcm1pbmFsX2Rlc2NyaXB0b3IgewotCV9fdTggIGJMZW5ndGg7Ci0JX191OCAgYkRlc2NyaXB0b3JUeXBlOwotCV9fdTggIGJEZXNjcmlwdG9yU3ViVHlwZTsKLQlfX3U4ICBiVGVybWluYWxJRDsKLQlfX3UxNiB3VGVybWluYWxUeXBlOwotCV9fdTggIGJBc3NvY1Rlcm1pbmFsOwotCV9fdTggIGlUZXJtaW5hbDsKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi1zdHJ1Y3QgdXZjX291dHB1dF90ZXJtaW5hbF9kZXNjcmlwdG9yIHsKLQlfX3U4ICBiTGVuZ3RoOwotCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKLQlfX3U4ICBiRGVzY3JpcHRvclN1YlR5cGU7Ci0JX191OCAgYlRlcm1pbmFsSUQ7Ci0JX191MTYgd1Rlcm1pbmFsVHlwZTsKLQlfX3U4ICBiQXNzb2NUZXJtaW5hbDsKLQlfX3U4ICBiU291cmNlSUQ7Ci0JX191OCAgaVRlcm1pbmFsOwotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0KLXN0cnVjdCB1dmNfY2FtZXJhX3Rlcm1pbmFsX2Rlc2NyaXB0b3IgewotCV9fdTggIGJMZW5ndGg7Ci0JX191OCAgYkRlc2NyaXB0b3JUeXBlOwotCV9fdTggIGJEZXNjcmlwdG9yU3ViVHlwZTsKLQlfX3U4ICBiVGVybWluYWxJRDsKLQlfX3UxNiB3VGVybWluYWxUeXBlOwotCV9fdTggIGJBc3NvY1Rlcm1pbmFsOwotCV9fdTggIGlUZXJtaW5hbDsKLQlfX3UxNiB3T2JqZWN0aXZlRm9jYWxMZW5ndGhNaW47Ci0JX191MTYgd09iamVjdGl2ZUZvY2FsTGVuZ3RoTWF4OwotCV9fdTE2IHdPY3VsYXJGb2NhbExlbmd0aDsKLQlfX3U4ICBiQ29udHJvbFNpemU7Ci0JX191OCAgYm1Db250cm9sc1szXTsKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi1zdHJ1Y3QgdXZjX3NlbGVjdG9yX3VuaXRfZGVzY3JpcHRvciB7Ci0JX191OCAgYkxlbmd0aDsKLQlfX3U4ICBiRGVzY3JpcHRvclR5cGU7Ci0JX191OCAgYkRlc2NyaXB0b3JTdWJUeXBlOwotCV9fdTggIGJVbml0SUQ7Ci0JX191OCAgYk5ySW5QaW5zOwotCV9fdTggIGJhU291cmNlSURbMF07Ci0JX191OCAgaVNlbGVjdG9yOwotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0KLSNkZWZpbmUgVVZDX1NFTEVDVE9SX1VOSVRfREVTQ1JJUFRPUihuKQlcCi0JdXZjX3NlbGVjdG9yX3VuaXRfZGVzY3JpcHRvcl8jI24KLQotI2RlZmluZSBERUNMQVJFX1VWQ19TRUxFQ1RPUl9VTklUX0RFU0NSSVBUT1IobikgCQlcCi1zdHJ1Y3QgVVZDX1NFTEVDVE9SX1VOSVRfREVTQ1JJUFRPUihuKSB7CQkJXAotCV9fdTggIGJMZW5ndGg7CQkJCQkJXAotCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsJCQkJCVwKLQlfX3U4ICBiRGVzY3JpcHRvclN1YlR5cGU7CQkJCVwKLQlfX3U4ICBiVW5pdElEOwkJCQkJCVwKLQlfX3U4ICBiTnJJblBpbnM7CQkJCQlcCi0JX191OCAgYmFTb3VyY2VJRFtuXTsJCQkJCVwKLQlfX3U4ICBpU2VsZWN0b3I7CQkJCQlcCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKQotCi1zdHJ1Y3QgdXZjX3Byb2Nlc3NpbmdfdW5pdF9kZXNjcmlwdG9yIHsKLQlfX3U4ICBiTGVuZ3RoOwotCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKLQlfX3U4ICBiRGVzY3JpcHRvclN1YlR5cGU7Ci0JX191OCAgYlVuaXRJRDsKLQlfX3U4ICBiU291cmNlSUQ7Ci0JX191MTYgd01heE11bHRpcGxpZXI7Ci0JX191OCAgYkNvbnRyb2xTaXplOwotCV9fdTggIGJtQ29udHJvbHNbMl07Ci0JX191OCAgaVByb2Nlc3Npbmc7Ci19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKLQotc3RydWN0IHV2Y19leHRlbnNpb25fdW5pdF9kZXNjcmlwdG9yIHsKLQlfX3U4ICBiTGVuZ3RoOwotCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKLQlfX3U4ICBiRGVzY3JpcHRvclN1YlR5cGU7Ci0JX191OCAgYlVuaXRJRDsKLQlfX3U4ICBndWlkRXh0ZW5zaW9uQ29kZVsxNl07Ci0JX191OCAgYk51bUNvbnRyb2xzOwotCV9fdTggIGJOckluUGluczsKLQlfX3U4ICBiYVNvdXJjZUlEWzBdOwotCV9fdTggIGJDb250cm9sU2l6ZTsKLQlfX3U4ICBibUNvbnRyb2xzWzBdOwotCV9fdTggIGlFeHRlbnNpb247Ci19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKLQotI2RlZmluZSBVVkNfRVhURU5TSU9OX1VOSVRfREVTQ1JJUFRPUihwLCBuKSBcCi0JdXZjX2V4dGVuc2lvbl91bml0X2Rlc2NyaXB0b3JfIyNwXyMjbgotCi0jZGVmaW5lIERFQ0xBUkVfVVZDX0VYVEVOU0lPTl9VTklUX0RFU0NSSVBUT1IocCwgbikgCQlcCi1zdHJ1Y3QgVVZDX0VYVEVOU0lPTl9VTklUX0RFU0NSSVBUT1IocCwgbikgewkJCVwKLQlfX3U4ICBiTGVuZ3RoOwkJCQkJCVwKLQlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CQkJCQlcCi0JX191OCAgYkRlc2NyaXB0b3JTdWJUeXBlOwkJCQlcCi0JX191OCAgYlVuaXRJRDsJCQkJCQlcCi0JX191OCAgZ3VpZEV4dGVuc2lvbkNvZGVbMTZdOwkJCQlcCi0JX191OCAgYk51bUNvbnRyb2xzOwkJCQkJXAotCV9fdTggIGJOckluUGluczsJCQkJCVwKLQlfX3U4ICBiYVNvdXJjZUlEW3BdOwkJCQkJXAotCV9fdTggIGJDb250cm9sU2l6ZTsJCQkJCVwKLQlfX3U4ICBibUNvbnRyb2xzW25dOwkJCQkJXAotCV9fdTggIGlFeHRlbnNpb247CQkJCQlcCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKQotCi1zdHJ1Y3QgdXZjX2NvbnRyb2xfZW5kcG9pbnRfZGVzY3JpcHRvciB7Ci0JX191OCAgYkxlbmd0aDsKLQlfX3U4ICBiRGVzY3JpcHRvclR5cGU7Ci0JX191OCAgYkRlc2NyaXB0b3JTdWJUeXBlOwotCV9fdTE2IHdNYXhUcmFuc2ZlclNpemU7Ci19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKLQotI2RlZmluZSBVVkNfRFRfSEVBREVSCQkJCTEKLSNkZWZpbmUgVVZDX0RUX0lOUFVUX1RFUk1JTkFMCQkJMgotI2RlZmluZSBVVkNfRFRfT1VUUFVUX1RFUk1JTkFMCQkJMwotI2RlZmluZSBVVkNfRFRfU0VMRUNUT1JfVU5JVAkJCTQKLSNkZWZpbmUgVVZDX0RUX1BST0NFU1NJTkdfVU5JVAkJCTUKLSNkZWZpbmUgVVZDX0RUX0VYVEVOU0lPTl9VTklUCQkJNgotCi0jZGVmaW5lIFVWQ19EVF9IRUFERVJfU0laRShuKQkJCSgxMisobikpCi0jZGVmaW5lIFVWQ19EVF9JTlBVVF9URVJNSU5BTF9TSVpFCQk4Ci0jZGVmaW5lIFVWQ19EVF9PVVRQVVRfVEVSTUlOQUxfU0laRQkJOQotI2RlZmluZSBVVkNfRFRfQ0FNRVJBX1RFUk1JTkFMX1NJWkUobikJCSgxNSsobikpCi0jZGVmaW5lIFVWQ19EVF9TRUxFQ1RPUl9VTklUX1NJWkUobikJCSg2KyhuKSkKLSNkZWZpbmUgVVZDX0RUX1BST0NFU1NJTkdfVU5JVF9TSVpFKG4pCQkoOSsobikpCi0jZGVmaW5lIFVWQ19EVF9FWFRFTlNJT05fVU5JVF9TSVpFKHAsbikJCSgyNCsocCkrKG4pKQotI2RlZmluZSBVVkNfRFRfQ09OVFJPTF9FTkRQT0lOVF9TSVpFCQk1Ci0KLXN0cnVjdCB1dmNfaW5wdXRfaGVhZGVyX2Rlc2NyaXB0b3IgewotCV9fdTggIGJMZW5ndGg7Ci0JX191OCAgYkRlc2NyaXB0b3JUeXBlOwotCV9fdTggIGJEZXNjcmlwdG9yU3ViVHlwZTsKLQlfX3U4ICBiTnVtRm9ybWF0czsKLQlfX3UxNiB3VG90YWxMZW5ndGg7Ci0JX191OCAgYkVuZHBvaW50QWRkcmVzczsKLQlfX3U4ICBibUluZm87Ci0JX191OCAgYlRlcm1pbmFsTGluazsKLQlfX3U4ICBiU3RpbGxDYXB0dXJlTWV0aG9kOwotCV9fdTggIGJUcmlnZ2VyU3VwcG9ydDsKLQlfX3U4ICBiVHJpZ2dlclVzYWdlOwotCV9fdTggIGJDb250cm9sU2l6ZTsKLQlfX3U4ICBibWFDb250cm9sc1tdOwotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0KLSNkZWZpbmUgVVZDX0lOUFVUX0hFQURFUl9ERVNDUklQVE9SKG4sIHApIFwKLQl1dmNfaW5wdXRfaGVhZGVyX2Rlc2NyaXB0b3JfIyNuXyMjcAotCi0jZGVmaW5lIERFQ0xBUkVfVVZDX0lOUFVUX0hFQURFUl9ERVNDUklQVE9SKG4sIHApCQlcCi1zdHJ1Y3QgVVZDX0lOUFVUX0hFQURFUl9ERVNDUklQVE9SKG4sIHApIHsJCQlcCi0JX191OCAgYkxlbmd0aDsJCQkJCQlcCi0JX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJCQkJXAotCV9fdTggIGJEZXNjcmlwdG9yU3ViVHlwZTsJCQkJXAotCV9fdTggIGJOdW1Gb3JtYXRzOwkJCQkJXAotCV9fdTE2IHdUb3RhbExlbmd0aDsJCQkJCVwKLQlfX3U4ICBiRW5kcG9pbnRBZGRyZXNzOwkJCQkJXAotCV9fdTggIGJtSW5mbzsJCQkJCQlcCi0JX191OCAgYlRlcm1pbmFsTGluazsJCQkJCVwKLQlfX3U4ICBiU3RpbGxDYXB0dXJlTWV0aG9kOwkJCQlcCi0JX191OCAgYlRyaWdnZXJTdXBwb3J0OwkJCQkJXAotCV9fdTggIGJUcmlnZ2VyVXNhZ2U7CQkJCQlcCi0JX191OCAgYkNvbnRyb2xTaXplOwkJCQkJXAotCV9fdTggIGJtYUNvbnRyb2xzW3BdW25dOwkJCQlcCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKQotCi1zdHJ1Y3QgdXZjX291dHB1dF9oZWFkZXJfZGVzY3JpcHRvciB7Ci0JX191OCAgYkxlbmd0aDsKLQlfX3U4ICBiRGVzY3JpcHRvclR5cGU7Ci0JX191OCAgYkRlc2NyaXB0b3JTdWJUeXBlOwotCV9fdTggIGJOdW1Gb3JtYXRzOwotCV9fdTE2IHdUb3RhbExlbmd0aDsKLQlfX3U4ICBiRW5kcG9pbnRBZGRyZXNzOwotCV9fdTggIGJUZXJtaW5hbExpbms7Ci0JX191OCAgYkNvbnRyb2xTaXplOwotCV9fdTggIGJtYUNvbnRyb2xzW107Ci19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKLQotI2RlZmluZSBVVkNfT1VUUFVUX0hFQURFUl9ERVNDUklQVE9SKG4sIHApIFwKLQl1dmNfb3V0cHV0X2hlYWRlcl9kZXNjcmlwdG9yXyMjbl8jI3AKLQotI2RlZmluZSBERUNMQVJFX1VWQ19PVVRQVVRfSEVBREVSX0RFU0NSSVBUT1IobiwgcCkJCVwKLXN0cnVjdCBVVkNfT1VUUFVUX0hFQURFUl9ERVNDUklQVE9SKG4sIHApIHsJCQlcCi0JX191OCAgYkxlbmd0aDsJCQkJCQlcCi0JX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJCQkJXAotCV9fdTggIGJEZXNjcmlwdG9yU3ViVHlwZTsJCQkJXAotCV9fdTggIGJOdW1Gb3JtYXRzOwkJCQkJXAotCV9fdTE2IHdUb3RhbExlbmd0aDsJCQkJCVwKLQlfX3U4ICBiRW5kcG9pbnRBZGRyZXNzOwkJCQkJXAotCV9fdTggIGJUZXJtaW5hbExpbms7CQkJCQlcCi0JX191OCAgYkNvbnRyb2xTaXplOwkJCQkJXAotCV9fdTggIGJtYUNvbnRyb2xzW3BdW25dOwkJCQlcCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKQotCi1zdHJ1Y3QgdXZjX2Zvcm1hdF91bmNvbXByZXNzZWQgewotCV9fdTggIGJMZW5ndGg7Ci0JX191OCAgYkRlc2NyaXB0b3JUeXBlOwotCV9fdTggIGJEZXNjcmlwdG9yU3ViVHlwZTsKLQlfX3U4ICBiRm9ybWF0SW5kZXg7Ci0JX191OCAgYk51bUZyYW1lRGVzY3JpcHRvcnM7Ci0JX191OCAgZ3VpZEZvcm1hdFsxNl07Ci0JX191OCAgYkJpdHNQZXJQaXhlbDsKLQlfX3U4ICBiRGVmYXVsdEZyYW1lSW5kZXg7Ci0JX191OCAgYkFzcGVjdFJhdGlvWDsKLQlfX3U4ICBiQXNwZWN0UmF0aW9ZOwotCV9fdTggIGJtSW50ZXJmYWNlRmxhZ3M7Ci0JX191OCAgYkNvcHlQcm90ZWN0OwotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0KLXN0cnVjdCB1dmNfZnJhbWVfdW5jb21wcmVzc2VkIHsKLQlfX3U4ICBiTGVuZ3RoOwotCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKLQlfX3U4ICBiRGVzY3JpcHRvclN1YlR5cGU7Ci0JX191OCAgYkZyYW1lSW5kZXg7Ci0JX191OCAgYm1DYXBhYmlsaXRpZXM7Ci0JX191MTYgd1dpZHRoOwotCV9fdTE2IHdIZWlnaHQ7Ci0JX191MzIgZHdNaW5CaXRSYXRlOwotCV9fdTMyIGR3TWF4Qml0UmF0ZTsKLQlfX3UzMiBkd01heFZpZGVvRnJhbWVCdWZmZXJTaXplOwotCV9fdTMyIGR3RGVmYXVsdEZyYW1lSW50ZXJ2YWw7Ci0JX191OCAgYkZyYW1lSW50ZXJ2YWxUeXBlOwotCV9fdTMyIGR3RnJhbWVJbnRlcnZhbFtdOwotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0KLSNkZWZpbmUgVVZDX0ZSQU1FX1VOQ09NUFJFU1NFRChuKSBcCi0JdXZjX2ZyYW1lX3VuY29tcHJlc3NlZF8jI24KLQotI2RlZmluZSBERUNMQVJFX1VWQ19GUkFNRV9VTkNPTVBSRVNTRUQobikgCQkJXAotc3RydWN0IFVWQ19GUkFNRV9VTkNPTVBSRVNTRUQobikgewkJCQlcCi0JX191OCAgYkxlbmd0aDsJCQkJCQlcCi0JX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJCQkJXAotCV9fdTggIGJEZXNjcmlwdG9yU3ViVHlwZTsJCQkJXAotCV9fdTggIGJGcmFtZUluZGV4OwkJCQkJXAotCV9fdTggIGJtQ2FwYWJpbGl0aWVzOwkJCQkJXAotCV9fdTE2IHdXaWR0aDsJCQkJCQlcCi0JX191MTYgd0hlaWdodDsJCQkJCQlcCi0JX191MzIgZHdNaW5CaXRSYXRlOwkJCQkJXAotCV9fdTMyIGR3TWF4Qml0UmF0ZTsJCQkJCVwKLQlfX3UzMiBkd01heFZpZGVvRnJhbWVCdWZmZXJTaXplOwkJCVwKLQlfX3UzMiBkd0RlZmF1bHRGcmFtZUludGVydmFsOwkJCQlcCi0JX191OCAgYkZyYW1lSW50ZXJ2YWxUeXBlOwkJCQlcCi0JX191MzIgZHdGcmFtZUludGVydmFsW25dOwkJCQlcCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKQotCi1zdHJ1Y3QgdXZjX2Zvcm1hdF9tanBlZyB7Ci0JX191OCAgYkxlbmd0aDsKLQlfX3U4ICBiRGVzY3JpcHRvclR5cGU7Ci0JX191OCAgYkRlc2NyaXB0b3JTdWJUeXBlOwotCV9fdTggIGJGb3JtYXRJbmRleDsKLQlfX3U4ICBiTnVtRnJhbWVEZXNjcmlwdG9yczsKLQlfX3U4ICBibUZsYWdzOwotCV9fdTggIGJEZWZhdWx0RnJhbWVJbmRleDsKLQlfX3U4ICBiQXNwZWN0UmF0aW9YOwotCV9fdTggIGJBc3BlY3RSYXRpb1k7Ci0JX191OCAgYm1JbnRlcmZhY2VGbGFnczsKLQlfX3U4ICBiQ29weVByb3RlY3Q7Ci19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKLQotc3RydWN0IHV2Y19mcmFtZV9tanBlZyB7Ci0JX191OCAgYkxlbmd0aDsKLQlfX3U4ICBiRGVzY3JpcHRvclR5cGU7Ci0JX191OCAgYkRlc2NyaXB0b3JTdWJUeXBlOwotCV9fdTggIGJGcmFtZUluZGV4OwotCV9fdTggIGJtQ2FwYWJpbGl0aWVzOwotCV9fdTE2IHdXaWR0aDsKLQlfX3UxNiB3SGVpZ2h0OwotCV9fdTMyIGR3TWluQml0UmF0ZTsKLQlfX3UzMiBkd01heEJpdFJhdGU7Ci0JX191MzIgZHdNYXhWaWRlb0ZyYW1lQnVmZmVyU2l6ZTsKLQlfX3UzMiBkd0RlZmF1bHRGcmFtZUludGVydmFsOwotCV9fdTggIGJGcmFtZUludGVydmFsVHlwZTsKLQlfX3UzMiBkd0ZyYW1lSW50ZXJ2YWxbXTsKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi0jZGVmaW5lIFVWQ19GUkFNRV9NSlBFRyhuKSBcCi0JdXZjX2ZyYW1lX21qcGVnXyMjbgotCi0jZGVmaW5lIERFQ0xBUkVfVVZDX0ZSQU1FX01KUEVHKG4pIAkJCQlcCi1zdHJ1Y3QgVVZDX0ZSQU1FX01KUEVHKG4pIHsJCQkJCVwKLQlfX3U4ICBiTGVuZ3RoOwkJCQkJCVwKLQlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CQkJCQlcCi0JX191OCAgYkRlc2NyaXB0b3JTdWJUeXBlOwkJCQlcCi0JX191OCAgYkZyYW1lSW5kZXg7CQkJCQlcCi0JX191OCAgYm1DYXBhYmlsaXRpZXM7CQkJCQlcCi0JX191MTYgd1dpZHRoOwkJCQkJCVwKLQlfX3UxNiB3SGVpZ2h0OwkJCQkJCVwKLQlfX3UzMiBkd01pbkJpdFJhdGU7CQkJCQlcCi0JX191MzIgZHdNYXhCaXRSYXRlOwkJCQkJXAotCV9fdTMyIGR3TWF4VmlkZW9GcmFtZUJ1ZmZlclNpemU7CQkJXAotCV9fdTMyIGR3RGVmYXVsdEZyYW1lSW50ZXJ2YWw7CQkJCVwKLQlfX3U4ICBiRnJhbWVJbnRlcnZhbFR5cGU7CQkJCVwKLQlfX3UzMiBkd0ZyYW1lSW50ZXJ2YWxbbl07CQkJCVwKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpCi0KLXN0cnVjdCB1dmNfY29sb3JfbWF0Y2hpbmdfZGVzY3JpcHRvciB7Ci0JX191OCAgYkxlbmd0aDsKLQlfX3U4ICBiRGVzY3JpcHRvclR5cGU7Ci0JX191OCAgYkRlc2NyaXB0b3JTdWJUeXBlOwotCV9fdTggIGJDb2xvclByaW1hcmllczsKLQlfX3U4ICBiVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M7Ci0JX191OCAgYk1hdHJpeENvZWZmaWNpZW50czsKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi0jZGVmaW5lIFVWQ19EVF9JTlBVVF9IRUFERVIJCQkxCi0jZGVmaW5lIFVWQ19EVF9PVVRQVVRfSEVBREVSCQkJMgotI2RlZmluZSBVVkNfRFRfRk9STUFUX1VOQ09NUFJFU1NFRAkJNAotI2RlZmluZSBVVkNfRFRfRlJBTUVfVU5DT01QUkVTU0VECQk1Ci0jZGVmaW5lIFVWQ19EVF9GT1JNQVRfTUpQRUcJCQk2Ci0jZGVmaW5lIFVWQ19EVF9GUkFNRV9NSlBFRwkJCTcKLSNkZWZpbmUgVVZDX0RUX0NPTE9SX01BVENISU5HCQkJMTMKLQotI2RlZmluZSBVVkNfRFRfSU5QVVRfSEVBREVSX1NJWkUobiwgcCkJCSgxMysobipwKSkKLSNkZWZpbmUgVVZDX0RUX09VVFBVVF9IRUFERVJfU0laRShuLCBwKQkJKDkrKG4qcCkpCi0jZGVmaW5lIFVWQ19EVF9GT1JNQVRfVU5DT01QUkVTU0VEX1NJWkUJCTI3Ci0jZGVmaW5lIFVWQ19EVF9GUkFNRV9VTkNPTVBSRVNTRURfU0laRShuKQkoMjYrNCoobikpCi0jZGVmaW5lIFVWQ19EVF9GT1JNQVRfTUpQRUdfU0laRQkJMTEKLSNkZWZpbmUgVVZDX0RUX0ZSQU1FX01KUEVHX1NJWkUobikJCSgyNis0KihuKSkKLSNkZWZpbmUgVVZDX0RUX0NPTE9SX01BVENISU5HX1NJWkUJCTYKKyNpbmNsdWRlIDxsaW51eC91c2IvdmlkZW8uaD4KIAogZXh0ZXJuIGludCB1dmNfYmluZF9jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLAogCQkJICAgY29uc3Qgc3RydWN0IHV2Y19kZXNjcmlwdG9yX2hlYWRlciAqIGNvbnN0ICpjb250cm9sLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9teGNfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX214Y191ZGMuYwppbmRleCBkMGI4YmRlLi5lYWZhNmQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX214Y191ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX214Y191ZGMuYwpAQCAtMzAsNyArMzAsNyBAQAogCiAJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAotCWlmICghY3B1X2lzX214MzUoKSkgeworCWlmICghY3B1X2lzX214MzUoKSAmJiAhY3B1X2lzX214MjUoKSkgewogCQlteGNfYWhiX2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInVzYl9haGIiKTsKIAkJaWYgKElTX0VSUihteGNfYWhiX2NsaykpCiAJCQlyZXR1cm4gUFRSX0VSUihteGNfYWhiX2Nsayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuYwppbmRleCA4MjUwNmNhLi45NjQ4Yjc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYwppbmRleCA4NWIwZDg5Li45ODA3NjI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMKQEAgLTI1NjEsNyArMjU2MSw3IEBACiAJCXVkY19kaXNhYmxlKHVkYyk7CiB9CiAKLSNpZmRlZiBDT05GSUdfQ1BVX1BYQTI3eAorI2lmZGVmIENPTkZJR19QWEEyN3gKIGV4dGVybiB2b2lkIHB4YTI3eF9jbGVhcl9vdGdwaCh2b2lkKTsKICNlbHNlCiAjZGVmaW5lIHB4YTI3eF9jbGVhcl9vdGdwaCgpICAgZG8ge30gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5jCmluZGV4IDVjMGQwNmMuLjAyMGZhNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5jCkBAIC0xNzEsNyArMTcxLDggQEAKIAlpbnQJCQlpLCBjb3VudDsKIAlybmRpc19xdWVyeV9jbXBsdF90eXBlCSpyZXNwOwogCXN0cnVjdCBuZXRfZGV2aWNlCSpuZXQ7Ci0JY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMJKnN0YXRzOworCXN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCB0ZW1wOworCWNvbnN0IHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHM7CiAKIAlpZiAoIXIpIHJldHVybiAtRU5PTUVNOwogCXJlc3AgPSAocm5kaXNfcXVlcnlfY21wbHRfdHlwZSAqKSByLT5idWY7CkBAIC0xOTQsNyArMTk1LDcgQEAKIAlyZXNwLT5JbmZvcm1hdGlvbkJ1ZmZlck9mZnNldCA9IGNwdV90b19sZTMyICgxNik7CiAKIAluZXQgPSBybmRpc19wZXJfZGV2X3BhcmFtc1tjb25maWdOcl0uZGV2OwotCXN0YXRzID0gZGV2X2dldF9zdGF0cyhuZXQpOworCXN0YXRzID0gZGV2X2dldF9zdGF0cyhuZXQsICZ0ZW1wKTsKIAogCXN3aXRjaCAoT0lEKSB7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MyNDEwX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYzI0MTBfdWRjLmMKaW5kZXggZTcyNGEwNS4uZWEyYjNjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYzI0MTBfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYzI0MTBfdWRjLmMKQEAgLTczNSw2ICs3MzUsMTAgQEAKIAllbHNlCiAJCWRldi0+ZXAwc3RhdGUgPSBFUDBfT1VUX0RBVEFfUEhBU0U7CiAKKwlpZiAoIWRldi0+ZHJpdmVyKQorCQlyZXR1cm47CisKKwkvKiBkZWxpdmVyIHRoZSByZXF1ZXN0IHRvIHRoZSBnYWRnZXQgZHJpdmVyICovCiAJcmV0ID0gZGV2LT5kcml2ZXItPnNldHVwKCZkZXYtPmdhZGdldCwgY3JxKTsKIAlpZiAocmV0IDwgMCkgewogCQlpZiAoZGV2LT5yZXFfY29uZmlnKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvdXZjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvdXZjLmgKaW5kZXggMGE3MDVlNi4uNWI3OTE5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3V2Yy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC91dmMuaApAQCAtNDgsMzkgKzQ4LDYgQEAKICNkZWZpbmUgVVZDX0lOVEZfU1RSRUFNSU5HCQkxCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogVVZDIGNvbnN0YW50cyAmIHN0cnVjdHVyZXMKLSAqLwotCi0vKiBWYWx1ZXMgZm9yIGJtSGVhZGVySW5mbyAoVmlkZW8gYW5kIFN0aWxsIEltYWdlIFBheWxvYWQgSGVhZGVycywgMi40LjMuMykgKi8KLSNkZWZpbmUgVVZDX1NUUkVBTV9FT0gJCQkJKDEgPDwgNykKLSNkZWZpbmUgVVZDX1NUUkVBTV9FUlIJCQkJKDEgPDwgNikKLSNkZWZpbmUgVVZDX1NUUkVBTV9TVEkJCQkJKDEgPDwgNSkKLSNkZWZpbmUgVVZDX1NUUkVBTV9SRVMJCQkJKDEgPDwgNCkKLSNkZWZpbmUgVVZDX1NUUkVBTV9TQ1IJCQkJKDEgPDwgMykKLSNkZWZpbmUgVVZDX1NUUkVBTV9QVFMJCQkJKDEgPDwgMikKLSNkZWZpbmUgVVZDX1NUUkVBTV9FT0YJCQkJKDEgPDwgMSkKLSNkZWZpbmUgVVZDX1NUUkVBTV9GSUQJCQkJKDEgPDwgMCkKLQotc3RydWN0IHV2Y19zdHJlYW1pbmdfY29udHJvbCB7Ci0JX191MTYgYm1IaW50OwotCV9fdTggIGJGb3JtYXRJbmRleDsKLQlfX3U4ICBiRnJhbWVJbmRleDsKLQlfX3UzMiBkd0ZyYW1lSW50ZXJ2YWw7Ci0JX191MTYgd0tleUZyYW1lUmF0ZTsKLQlfX3UxNiB3UEZyYW1lUmF0ZTsKLQlfX3UxNiB3Q29tcFF1YWxpdHk7Ci0JX191MTYgd0NvbXBXaW5kb3dTaXplOwotCV9fdTE2IHdEZWxheTsKLQlfX3UzMiBkd01heFZpZGVvRnJhbWVTaXplOwotCV9fdTMyIGR3TWF4UGF5bG9hZFRyYW5zZmVyU2l6ZTsKLQlfX3UzMiBkd0Nsb2NrRnJlcXVlbmN5OwotCV9fdTggIGJtRnJhbWluZ0luZm87Ci0JX191OCAgYlByZWZlcmVkVmVyc2lvbjsKLQlfX3U4ICBiTWluVmVyc2lvbjsKLQlfX3U4ICBiTWF4VmVyc2lvbjsKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIERlYnVnZ2luZywgcHJpbnRpbmcgYW5kIGxvZ2dpbmcKICAqLwogCkBAIC0xMDcsMTEgKzc0LDExIEBACiAjZGVmaW5lIFVWQ19XQVJOX01JTk1BWAkJCQkwCiAjZGVmaW5lIFVWQ19XQVJOX1BST0JFX0RFRgkJCTEKIAotZXh0ZXJuIHVuc2lnbmVkIGludCB1dmNfdHJhY2VfcGFyYW07CitleHRlcm4gdW5zaWduZWQgaW50IHV2Y19nYWRnZXRfdHJhY2VfcGFyYW07CiAKICNkZWZpbmUgdXZjX3RyYWNlKGZsYWcsIG1zZy4uLikgXAogCWRvIHsgXAotCQlpZiAodXZjX3RyYWNlX3BhcmFtICYgZmxhZykgXAorCQlpZiAodXZjX2dhZGdldF90cmFjZV9wYXJhbSAmIGZsYWcpIFwKIAkJCXByaW50ayhLRVJOX0RFQlVHICJ1dmN2aWRlbzogIiBtc2cpOyBcCiAJfSB3aGlsZSAoMCkKIApAQCAtMTM3LDkgKzEwNCw2IEBACiAjZGVmaW5lIFVWQ19NQVhfUkVRVUVTVF9TSVpFCQkJNjQKICNkZWZpbmUgVVZDX01BWF9FVkVOVFMJCQkJNAogCi0jZGVmaW5lIFVTQl9EVF9JTlRFUkZBQ0VfQVNTT0NJQVRJT05fU0laRQk4Ci0jZGVmaW5lIFVTQl9DTEFTU19NSVNDCQkJCTB4ZWYKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBTdHJ1Y3R1cmVzCiAgKi8KQEAgLTIyMCwxNiArMTg0LDEwIEBACiAjZGVmaW5lIHRvX3V2Y19maWxlX2hhbmRsZShoYW5kbGUpIFwKIAljb250YWluZXJfb2YoaGFuZGxlLCBzdHJ1Y3QgdXZjX2ZpbGVfaGFuZGxlLCB2ZmgpCiAKLWV4dGVybiBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdXZjX3Y0bDJfZm9wczsKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBGdW5jdGlvbnMKICAqLwogCi1leHRlcm4gaW50IHV2Y192aWRlb19lbmFibGUoc3RydWN0IHV2Y192aWRlbyAqdmlkZW8sIGludCBlbmFibGUpOwotZXh0ZXJuIGludCB1dmNfdmlkZW9faW5pdChzdHJ1Y3QgdXZjX3ZpZGVvICp2aWRlbyk7Ci1leHRlcm4gaW50IHV2Y192aWRlb19wdW1wKHN0cnVjdCB1dmNfdmlkZW8gKnZpZGVvKTsKLQogZXh0ZXJuIHZvaWQgdXZjX2VuZHBvaW50X3N0cmVhbShzdHJ1Y3QgdXZjX2RldmljZSAqZGV2KTsKIAogZXh0ZXJuIHZvaWQgdXZjX2Z1bmN0aW9uX2Nvbm5lY3Qoc3RydWN0IHV2Y19kZXZpY2UgKnV2Yyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvdXZjX3F1ZXVlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdXZjX3F1ZXVlLmMKaW5kZXggNDM4OTE5OS4uZjczOTVhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3V2Y19xdWV1ZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC91dmNfcXVldWUuYwpAQCAtNzgsNyArNzgsOCBAQAogICoKICAqLwogCi12b2lkIHV2Y19xdWV1ZV9pbml0KHN0cnVjdCB1dmNfdmlkZW9fcXVldWUgKnF1ZXVlLCBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSkKK3N0YXRpYyB2b2lkCit1dmNfcXVldWVfaW5pdChzdHJ1Y3QgdXZjX3ZpZGVvX3F1ZXVlICpxdWV1ZSwgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpCiB7CiAJbXV0ZXhfaW5pdCgmcXVldWUtPm11dGV4KTsKIAlzcGluX2xvY2tfaW5pdCgmcXVldWUtPmlycWxvY2spOwpAQCAtODgsNiArODksMjggQEAKIH0KIAogLyoKKyAqIEZyZWUgdGhlIHZpZGVvIGJ1ZmZlcnMuCisgKgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBxdWV1ZSBsb2NrIGhlbGQuCisgKi8KK3N0YXRpYyBpbnQgdXZjX2ZyZWVfYnVmZmVycyhzdHJ1Y3QgdXZjX3ZpZGVvX3F1ZXVlICpxdWV1ZSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBxdWV1ZS0+Y291bnQ7ICsraSkgeworCQlpZiAocXVldWUtPmJ1ZmZlcltpXS52bWFfdXNlX2NvdW50ICE9IDApCisJCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWlmIChxdWV1ZS0+Y291bnQpIHsKKwkJdmZyZWUocXVldWUtPm1lbSk7CisJCXF1ZXVlLT5jb3VudCA9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiBBbGxvY2F0ZSB0aGUgdmlkZW8gYnVmZmVycy4KICAqCiAgKiBQYWdlcyBhcmUgcmVzZXJ2ZWQgdG8gbWFrZSBzdXJlIHRoZXkgd2lsbCBub3QgYmUgc3dhcHBlZCwgYXMgdGhleSB3aWxsIGJlCkBAIC05NSw4ICsxMTgsOSBAQAogICoKICAqIEJ1ZmZlcnMgd2lsbCBiZSBpbmRpdmlkdWFsbHkgbWFwcGVkLCBzbyB0aGV5IG11c3QgYWxsIGJlIHBhZ2UgYWxpZ25lZC4KICAqLwotaW50IHV2Y19hbGxvY19idWZmZXJzKHN0cnVjdCB1dmNfdmlkZW9fcXVldWUgKnF1ZXVlLCB1bnNpZ25lZCBpbnQgbmJ1ZmZlcnMsCi0JCXVuc2lnbmVkIGludCBidWZsZW5ndGgpCitzdGF0aWMgaW50Cit1dmNfYWxsb2NfYnVmZmVycyhzdHJ1Y3QgdXZjX3ZpZGVvX3F1ZXVlICpxdWV1ZSwgdW5zaWduZWQgaW50IG5idWZmZXJzLAorCQkgIHVuc2lnbmVkIGludCBidWZsZW5ndGgpCiB7CiAJdW5zaWduZWQgaW50IGJ1ZnNpemUgPSBQQUdFX0FMSUdOKGJ1Zmxlbmd0aCk7CiAJdW5zaWduZWQgaW50IGk7CkBAIC0xNTAsMjggKzE3NCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIEZyZWUgdGhlIHZpZGVvIGJ1ZmZlcnMuCi0gKgotICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBxdWV1ZSBsb2NrIGhlbGQuCi0gKi8KLWludCB1dmNfZnJlZV9idWZmZXJzKHN0cnVjdCB1dmNfdmlkZW9fcXVldWUgKnF1ZXVlKQotewotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHF1ZXVlLT5jb3VudDsgKytpKSB7Ci0JCWlmIChxdWV1ZS0+YnVmZmVyW2ldLnZtYV91c2VfY291bnQgIT0gMCkKLQkJCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JaWYgKHF1ZXVlLT5jb3VudCkgewotCQl2ZnJlZShxdWV1ZS0+bWVtKTsKLQkJcXVldWUtPmNvdW50ID0gMDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgX191dmNfcXVlcnlfYnVmZmVyKHN0cnVjdCB1dmNfYnVmZmVyICpidWYsCiAJCXN0cnVjdCB2NGwyX2J1ZmZlciAqdjRsMl9idWYpCiB7CkBAIC0xOTUsOCArMTk3LDggQEAKIAl9CiB9CiAKLWludCB1dmNfcXVlcnlfYnVmZmVyKHN0cnVjdCB1dmNfdmlkZW9fcXVldWUgKnF1ZXVlLAotCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKnY0bDJfYnVmKQorc3RhdGljIGludAordXZjX3F1ZXJ5X2J1ZmZlcihzdHJ1Y3QgdXZjX3ZpZGVvX3F1ZXVlICpxdWV1ZSwgc3RydWN0IHY0bDJfYnVmZmVyICp2NGwyX2J1ZikKIHsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMjE3LDggKzIxOSw4IEBACiAgKiBRdWV1ZSBhIHZpZGVvIGJ1ZmZlci4gQXR0ZW1wdGluZyB0byBxdWV1ZSBhIGJ1ZmZlciB0aGF0IGhhcyBhbHJlYWR5IGJlZW4KICAqIHF1ZXVlZCB3aWxsIHJldHVybiAtRUlOVkFMLgogICovCi1pbnQgdXZjX3F1ZXVlX2J1ZmZlcihzdHJ1Y3QgdXZjX3ZpZGVvX3F1ZXVlICpxdWV1ZSwKLQlzdHJ1Y3QgdjRsMl9idWZmZXIgKnY0bDJfYnVmKQorc3RhdGljIGludAordXZjX3F1ZXVlX2J1ZmZlcihzdHJ1Y3QgdXZjX3ZpZGVvX3F1ZXVlICpxdWV1ZSwgc3RydWN0IHY0bDJfYnVmZmVyICp2NGwyX2J1ZikKIHsKIAlzdHJ1Y3QgdXZjX2J1ZmZlciAqYnVmOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yOTgsOCArMzAwLDkgQEAKICAqIERlcXVldWUgYSB2aWRlbyBidWZmZXIuIElmIG5vbmJsb2NraW5nIGlzIGZhbHNlLCBibG9jayB1bnRpbCBhIGJ1ZmZlciBpcwogICogYXZhaWxhYmxlLgogICovCi1pbnQgdXZjX2RlcXVldWVfYnVmZmVyKHN0cnVjdCB1dmNfdmlkZW9fcXVldWUgKnF1ZXVlLAotCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKnY0bDJfYnVmLCBpbnQgbm9uYmxvY2tpbmcpCitzdGF0aWMgaW50Cit1dmNfZGVxdWV1ZV9idWZmZXIoc3RydWN0IHV2Y192aWRlb19xdWV1ZSAqcXVldWUsIHN0cnVjdCB2NGwyX2J1ZmZlciAqdjRsMl9idWYsCisJCSAgIGludCBub25ibG9ja2luZykKIHsKIAlzdHJ1Y3QgdXZjX2J1ZmZlciAqYnVmOwogCWludCByZXQgPSAwOwpAQCAtMzU5LDggKzM2Miw5IEBACiAgKiBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdmlkZW8gcXVldWUgcG9sbGluZyBhbmQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieQogICogdGhlIGRldmljZSBwb2xsIGhhbmRsZXIuCiAgKi8KLXVuc2lnbmVkIGludCB1dmNfcXVldWVfcG9sbChzdHJ1Y3QgdXZjX3ZpZGVvX3F1ZXVlICpxdWV1ZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCXBvbGxfdGFibGUgKndhaXQpCitzdGF0aWMgdW5zaWduZWQgaW50Cit1dmNfcXVldWVfcG9sbChzdHJ1Y3QgdXZjX3ZpZGVvX3F1ZXVlICpxdWV1ZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJICAgICAgIHBvbGxfdGFibGUgKndhaXQpCiB7CiAJc3RydWN0IHV2Y19idWZmZXIgKmJ1ZjsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CkBAIC00MDcsNyArNDExLDggQEAKICAqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB2aWRlbyBidWZmZXIgbWVtb3J5IG1hcHBpbmcgYW5kIGlzIGludGVuZGVkIHRvIGJlCiAgKiB1c2VkIGJ5IHRoZSBkZXZpY2UgbW1hcCBoYW5kbGVyLgogICovCi1pbnQgdXZjX3F1ZXVlX21tYXAoc3RydWN0IHV2Y192aWRlb19xdWV1ZSAqcXVldWUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQorc3RhdGljIGludAordXZjX3F1ZXVlX21tYXAoc3RydWN0IHV2Y192aWRlb19xdWV1ZSAqcXVldWUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCB1dmNfYnVmZmVyICp1bmluaXRpYWxpemVkX3ZhcihidWZmZXIpOwogCXN0cnVjdCBwYWdlICpwYWdlOwpAQCAtNDU4LDYgKzQ2Myw0MiBAQAogfQogCiAvKgorICogQ2FuY2VsIHRoZSB2aWRlbyBidWZmZXJzIHF1ZXVlLgorICoKKyAqIENhbmNlbGxpbmcgdGhlIHF1ZXVlIG1hcmtzIGFsbCBidWZmZXJzIG9uIHRoZSBpcnEgcXVldWUgYXMgZXJyb25lb3VzLAorICogd2FrZXMgdGhlbSB1cCBhbmQgcmVtb3ZlcyB0aGVtIGZyb20gdGhlIHF1ZXVlLgorICoKKyAqIElmIHRoZSBkaXNjb25uZWN0IHBhcmFtZXRlciBpcyBzZXQsIGZ1cnRoZXIgY2FsbHMgdG8gdXZjX3F1ZXVlX2J1ZmZlciB3aWxsCisgKiBmYWlsIHdpdGggLUVOT0RFVi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFjcXVpcmVzIHRoZSBpcnEgc3BpbmxvY2sgYW5kIGNhbiBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQKKyAqIGNvbnRleHQuCisgKi8KK3N0YXRpYyB2b2lkIHV2Y19xdWV1ZV9jYW5jZWwoc3RydWN0IHV2Y192aWRlb19xdWV1ZSAqcXVldWUsIGludCBkaXNjb25uZWN0KQoreworCXN0cnVjdCB1dmNfYnVmZmVyICpidWY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZxdWV1ZS0+aXJxbG9jaywgZmxhZ3MpOworCXdoaWxlICghbGlzdF9lbXB0eSgmcXVldWUtPmlycXF1ZXVlKSkgeworCQlidWYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZxdWV1ZS0+aXJxcXVldWUsIHN0cnVjdCB1dmNfYnVmZmVyLAorCQkJCSAgICAgICBxdWV1ZSk7CisJCWxpc3RfZGVsKCZidWYtPnF1ZXVlKTsKKwkJYnVmLT5zdGF0ZSA9IFVWQ19CVUZfU1RBVEVfRVJST1I7CisJCXdha2VfdXAoJmJ1Zi0+d2FpdCk7CisJfQorCS8qIFRoaXMgbXVzdCBiZSBwcm90ZWN0ZWQgYnkgdGhlIGlycWxvY2sgc3BpbmxvY2sgdG8gYXZvaWQgcmFjZQorCSAqIGNvbmRpdGlvbnMgYmV0d2VlbiB1dmNfcXVldWVfYnVmZmVyIGFuZCB0aGUgZGlzY29ubmVjdGlvbiBldmVudCB0aGF0CisJICogY291bGQgcmVzdWx0IGluIGFuIGludGVycnVwdGlibGUgd2FpdCBpbiB1dmNfZGVxdWV1ZV9idWZmZXIuIERvIG5vdAorCSAqIGJsaW5kbHkgcmVwbGFjZSB0aGlzIGxvZ2ljIGJ5IGNoZWNraW5nIGZvciB0aGUgVVZDX0RFVl9ESVNDT05ORUNURUQKKwkgKiBzdGF0ZSBvdXRzaWRlIHRoZSBxdWV1ZSBjb2RlLgorCSAqLworCWlmIChkaXNjb25uZWN0KQorCQlxdWV1ZS0+ZmxhZ3MgfD0gVVZDX1FVRVVFX0RJU0NPTk5FQ1RFRDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxdWV1ZS0+aXJxbG9jaywgZmxhZ3MpOworfQorCisvKgogICogRW5hYmxlIG9yIGRpc2FibGUgdGhlIHZpZGVvIGJ1ZmZlcnMgcXVldWUuCiAgKgogICogVGhlIHF1ZXVlIG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgc3RhcnRpbmcgdmlkZW8gYWNxdWlzaXRpb24gYW5kIG11c3QgYmUKQEAgLTQ3NCw3ICs1MTUsNyBAQAogICogVGhpcyBmdW5jdGlvbiBjYW4ndCBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dC4gVXNlCiAgKiB1dmNfcXVldWVfY2FuY2VsKCkgaW5zdGVhZC4KICAqLwotaW50IHV2Y19xdWV1ZV9lbmFibGUoc3RydWN0IHV2Y192aWRlb19xdWV1ZSAqcXVldWUsIGludCBlbmFibGUpCitzdGF0aWMgaW50IHV2Y19xdWV1ZV9lbmFibGUoc3RydWN0IHV2Y192aWRlb19xdWV1ZSAqcXVldWUsIGludCBlbmFibGUpCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJaW50IHJldCA9IDA7CkBAIC01MDMsNDQgKzU0NCw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIENhbmNlbCB0aGUgdmlkZW8gYnVmZmVycyBxdWV1ZS4KLSAqCi0gKiBDYW5jZWxsaW5nIHRoZSBxdWV1ZSBtYXJrcyBhbGwgYnVmZmVycyBvbiB0aGUgaXJxIHF1ZXVlIGFzIGVycm9uZW91cywKLSAqIHdha2VzIHRoZW0gdXAgYW5kIHJlbW92ZXMgdGhlbSBmcm9tIHRoZSBxdWV1ZS4KLSAqCi0gKiBJZiB0aGUgZGlzY29ubmVjdCBwYXJhbWV0ZXIgaXMgc2V0LCBmdXJ0aGVyIGNhbGxzIHRvIHV2Y19xdWV1ZV9idWZmZXIgd2lsbAotICogZmFpbCB3aXRoIC1FTk9ERVYuCi0gKgotICogVGhpcyBmdW5jdGlvbiBhY3F1aXJlcyB0aGUgaXJxIHNwaW5sb2NrIGFuZCBjYW4gYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0Ci0gKiBjb250ZXh0LgotICovCi12b2lkIHV2Y19xdWV1ZV9jYW5jZWwoc3RydWN0IHV2Y192aWRlb19xdWV1ZSAqcXVldWUsIGludCBkaXNjb25uZWN0KQotewotCXN0cnVjdCB1dmNfYnVmZmVyICpidWY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZxdWV1ZS0+aXJxbG9jaywgZmxhZ3MpOwotCXdoaWxlICghbGlzdF9lbXB0eSgmcXVldWUtPmlycXF1ZXVlKSkgewotCQlidWYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZxdWV1ZS0+aXJxcXVldWUsIHN0cnVjdCB1dmNfYnVmZmVyLAotCQkJCSAgICAgICBxdWV1ZSk7Ci0JCWxpc3RfZGVsKCZidWYtPnF1ZXVlKTsKLQkJYnVmLT5zdGF0ZSA9IFVWQ19CVUZfU1RBVEVfRVJST1I7Ci0JCXdha2VfdXAoJmJ1Zi0+d2FpdCk7Ci0JfQotCS8qIFRoaXMgbXVzdCBiZSBwcm90ZWN0ZWQgYnkgdGhlIGlycWxvY2sgc3BpbmxvY2sgdG8gYXZvaWQgcmFjZQotCSAqIGNvbmRpdGlvbnMgYmV0d2VlbiB1dmNfcXVldWVfYnVmZmVyIGFuZCB0aGUgZGlzY29ubmVjdGlvbiBldmVudCB0aGF0Ci0JICogY291bGQgcmVzdWx0IGluIGFuIGludGVycnVwdGlibGUgd2FpdCBpbiB1dmNfZGVxdWV1ZV9idWZmZXIuIERvIG5vdAotCSAqIGJsaW5kbHkgcmVwbGFjZSB0aGlzIGxvZ2ljIGJ5IGNoZWNraW5nIGZvciB0aGUgVVZDX0RFVl9ESVNDT05ORUNURUQKLQkgKiBzdGF0ZSBvdXRzaWRlIHRoZSBxdWV1ZSBjb2RlLgotCSAqLwotCWlmIChkaXNjb25uZWN0KQotCQlxdWV1ZS0+ZmxhZ3MgfD0gVVZDX1FVRVVFX0RJU0NPTk5FQ1RFRDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxdWV1ZS0+aXJxbG9jaywgZmxhZ3MpOwotfQotCi1zdHJ1Y3QgdXZjX2J1ZmZlciAqdXZjX3F1ZXVlX25leHRfYnVmZmVyKHN0cnVjdCB1dmNfdmlkZW9fcXVldWUgKnF1ZXVlLAotCQlzdHJ1Y3QgdXZjX2J1ZmZlciAqYnVmKQorc3RhdGljIHN0cnVjdCB1dmNfYnVmZmVyICoKK3V2Y19xdWV1ZV9uZXh0X2J1ZmZlcihzdHJ1Y3QgdXZjX3ZpZGVvX3F1ZXVlICpxdWV1ZSwgc3RydWN0IHV2Y19idWZmZXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgdXZjX2J1ZmZlciAqbmV4dGJ1ZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNTY4LDcgKzU3Myw3IEBACiAJcmV0dXJuIG5leHRidWY7CiB9CiAKLXN0cnVjdCB1dmNfYnVmZmVyICp1dmNfcXVldWVfaGVhZChzdHJ1Y3QgdXZjX3ZpZGVvX3F1ZXVlICpxdWV1ZSkKK3N0YXRpYyBzdHJ1Y3QgdXZjX2J1ZmZlciAqdXZjX3F1ZXVlX2hlYWQoc3RydWN0IHV2Y192aWRlb19xdWV1ZSAqcXVldWUpCiB7CiAJc3RydWN0IHV2Y19idWZmZXIgKmJ1ZiA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91dmNfcXVldWUuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC91dmNfcXVldWUuaAppbmRleCA3ZjVhMzNmLi4xODEyYThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvdXZjX3F1ZXVlLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3V2Y19xdWV1ZS5oCkBAIC01OCwzMCArNTgsMTAgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGlycXF1ZXVlOwogfTsKIAotZXh0ZXJuIHZvaWQgdXZjX3F1ZXVlX2luaXQoc3RydWN0IHV2Y192aWRlb19xdWV1ZSAqcXVldWUsCi0JCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlKTsKLWV4dGVybiBpbnQgdXZjX2FsbG9jX2J1ZmZlcnMoc3RydWN0IHV2Y192aWRlb19xdWV1ZSAqcXVldWUsCi0JCXVuc2lnbmVkIGludCBuYnVmZmVycywgdW5zaWduZWQgaW50IGJ1Zmxlbmd0aCk7Ci1leHRlcm4gaW50IHV2Y19mcmVlX2J1ZmZlcnMoc3RydWN0IHV2Y192aWRlb19xdWV1ZSAqcXVldWUpOwotZXh0ZXJuIGludCB1dmNfcXVlcnlfYnVmZmVyKHN0cnVjdCB1dmNfdmlkZW9fcXVldWUgKnF1ZXVlLAotCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKnY0bDJfYnVmKTsKLWV4dGVybiBpbnQgdXZjX3F1ZXVlX2J1ZmZlcihzdHJ1Y3QgdXZjX3ZpZGVvX3F1ZXVlICpxdWV1ZSwKLQkJc3RydWN0IHY0bDJfYnVmZmVyICp2NGwyX2J1Zik7Ci1leHRlcm4gaW50IHV2Y19kZXF1ZXVlX2J1ZmZlcihzdHJ1Y3QgdXZjX3ZpZGVvX3F1ZXVlICpxdWV1ZSwKLQkJc3RydWN0IHY0bDJfYnVmZmVyICp2NGwyX2J1ZiwgaW50IG5vbmJsb2NraW5nKTsKLWV4dGVybiBpbnQgdXZjX3F1ZXVlX2VuYWJsZShzdHJ1Y3QgdXZjX3ZpZGVvX3F1ZXVlICpxdWV1ZSwgaW50IGVuYWJsZSk7Ci1leHRlcm4gdm9pZCB1dmNfcXVldWVfY2FuY2VsKHN0cnVjdCB1dmNfdmlkZW9fcXVldWUgKnF1ZXVlLCBpbnQgZGlzY29ubmVjdCk7Ci1leHRlcm4gc3RydWN0IHV2Y19idWZmZXIgKnV2Y19xdWV1ZV9uZXh0X2J1ZmZlcihzdHJ1Y3QgdXZjX3ZpZGVvX3F1ZXVlICpxdWV1ZSwKLQkJc3RydWN0IHV2Y19idWZmZXIgKmJ1Zik7Ci1leHRlcm4gdW5zaWduZWQgaW50IHV2Y19xdWV1ZV9wb2xsKHN0cnVjdCB1dmNfdmlkZW9fcXVldWUgKnF1ZXVlLAotCQlzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCk7Ci1leHRlcm4gaW50IHV2Y19xdWV1ZV9tbWFwKHN0cnVjdCB1dmNfdmlkZW9fcXVldWUgKnF1ZXVlLAotCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiBzdGF0aWMgaW5saW5lIGludCB1dmNfcXVldWVfc3RyZWFtaW5nKHN0cnVjdCB1dmNfdmlkZW9fcXVldWUgKnF1ZXVlKQogewogCXJldHVybiBxdWV1ZS0+ZmxhZ3MgJiBVVkNfUVVFVUVfU1RSRUFNSU5HOwogfQotZXh0ZXJuIHN0cnVjdCB1dmNfYnVmZmVyICp1dmNfcXVldWVfaGVhZChzdHJ1Y3QgdXZjX3ZpZGVvX3F1ZXVlICpxdWV1ZSk7CiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91dmNfdjRsMi5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3V2Y192NGwyLmMKaW5kZXggYTc5ODlmMi4uMmRjZmZkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3V2Y192NGwyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3V2Y192NGwyLmMKQEAgLTM2Myw3ICszNjMsNyBAQAogCXJldHVybiBtYXNrOwogfQogCi1zdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdXZjX3Y0bDJfZm9wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdXZjX3Y0bDJfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCT0gdXZjX3Y0bDJfb3BlbiwKIAkucmVsZWFzZQk9IHV2Y192NGwyX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvdXZjX3ZpZGVvLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdXZjX3ZpZGVvLmMKaW5kZXggZGU4Y2JjNC4uYjA4ZjM1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3V2Y192aWRlby5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC91dmNfdmlkZW8uYwpAQCAtMjcxLDcgKzI3MSw3IEBACiAgKiBUaGlzIGZ1bmN0aW9uIGZpbGxzIHRoZSBhdmFpbGFibGUgVVNCIHJlcXVlc3RzIChsaXN0ZWQgaW4gcmVxX2ZyZWUpIHdpdGgKICAqIHZpZGVvIGRhdGEgZnJvbSB0aGUgcXVldWVkIGJ1ZmZlcnMuCiAgKi8KLWludAorc3RhdGljIGludAogdXZjX3ZpZGVvX3B1bXAoc3RydWN0IHV2Y192aWRlbyAqdmlkZW8pCiB7CiAJc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXE7CkBAIC0zMjgsNyArMzI4LDcgQEAKIC8qCiAgKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgdmlkZW8gc3RyZWFtLgogICovCi1pbnQKK3N0YXRpYyBpbnQKIHV2Y192aWRlb19lbmFibGUoc3RydWN0IHV2Y192aWRlbyAqdmlkZW8sIGludCBlbmFibGUpCiB7CiAJdW5zaWduZWQgaW50IGk7CkBAIC0zNjcsNyArMzY3LDcgQEAKIC8qCiAgKiBJbml0aWFsaXplIHRoZSBVVkMgdmlkZW8gc3RyZWFtLgogICovCi1pbnQKK3N0YXRpYyBpbnQKIHV2Y192aWRlb19pbml0KHN0cnVjdCB1dmNfdmlkZW8gKnZpZGVvKQogewogCUlOSVRfTElTVF9IRUFEKCZ2aWRlby0+cmVxX2ZyZWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3dlYmNhbS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3dlYmNhbS5jCmluZGV4IDQxN2ZkNjguLjI4OGQyMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC93ZWJjYW0uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvd2ViY2FtLmMKQEAgLTI4LDEwICsyOCwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5jIgogI2luY2x1ZGUgImVwYXV0b2NvbmYuYyIKIAotI2luY2x1ZGUgImZfdXZjLmMiCiAjaW5jbHVkZSAidXZjX3F1ZXVlLmMiCi0jaW5jbHVkZSAidXZjX3Y0bDIuYyIKICNpbmNsdWRlICJ1dmNfdmlkZW8uYyIKKyNpbmNsdWRlICJ1dmNfdjRsMi5jIgorI2luY2x1ZGUgImZfdXZjLmMiCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBEZXZpY2UgZGVzY3JpcHRvcgpAQCAtOTAsNyArOTAsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBVVkNfSEVBREVSX0RFU0NSSVBUT1IoMSkgdXZjX2NvbnRyb2xfaGVhZGVyID0gewogCS5iTGVuZ3RoCQk9IFVWQ19EVF9IRUFERVJfU0laRSgxKSwKIAkuYkRlc2NyaXB0b3JUeXBlCT0gVVNCX0RUX0NTX0lOVEVSRkFDRSwKLQkuYkRlc2NyaXB0b3JTdWJUeXBlCT0gVVZDX0RUX0hFQURFUiwKKwkuYkRlc2NyaXB0b3JTdWJUeXBlCT0gVVZDX1ZDX0hFQURFUiwKIAkuYmNkVVZDCQkJPSBjcHVfdG9fbGUxNigweDAxMDApLAogCS53VG90YWxMZW5ndGgJCT0gMCwgLyogZHluYW1pYyAqLwogCS5kd0Nsb2NrRnJlcXVlbmN5CT0gY3B1X3RvX2xlMzIoNDgwMDAwMDApLApAQCAtMTAxLDcgKzEwMSw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHV2Y19jYW1lcmFfdGVybWluYWxfZGVzY3JpcHRvciB1dmNfY2FtZXJhX3Rlcm1pbmFsID0gewogCS5iTGVuZ3RoCQk9IFVWQ19EVF9DQU1FUkFfVEVSTUlOQUxfU0laRSgzKSwKIAkuYkRlc2NyaXB0b3JUeXBlCT0gVVNCX0RUX0NTX0lOVEVSRkFDRSwKLQkuYkRlc2NyaXB0b3JTdWJUeXBlCT0gVVZDX0RUX0lOUFVUX1RFUk1JTkFMLAorCS5iRGVzY3JpcHRvclN1YlR5cGUJPSBVVkNfVkNfSU5QVVRfVEVSTUlOQUwsCiAJLmJUZXJtaW5hbElECQk9IDEsCiAJLndUZXJtaW5hbFR5cGUJCT0gY3B1X3RvX2xlMTYoMHgwMjAxKSwKIAkuYkFzc29jVGVybWluYWwJCT0gMCwKQEAgLTExOCw3ICsxMTgsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCB1dmNfcHJvY2Vzc2luZ191bml0X2Rlc2NyaXB0b3IgdXZjX3Byb2Nlc3NpbmcgPSB7CiAJLmJMZW5ndGgJCT0gVVZDX0RUX1BST0NFU1NJTkdfVU5JVF9TSVpFKDIpLAogCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfQ1NfSU5URVJGQUNFLAotCS5iRGVzY3JpcHRvclN1YlR5cGUJPSBVVkNfRFRfUFJPQ0VTU0lOR19VTklULAorCS5iRGVzY3JpcHRvclN1YlR5cGUJPSBVVkNfVkNfUFJPQ0VTU0lOR19VTklULAogCS5iVW5pdElECQk9IDIsCiAJLmJTb3VyY2VJRAkJPSAxLAogCS53TWF4TXVsdGlwbGllcgkJPSBjcHVfdG9fbGUxNigxNioxMDI0KSwKQEAgLTEzMSw3ICsxMzEsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCB1dmNfb3V0cHV0X3Rlcm1pbmFsX2Rlc2NyaXB0b3IgdXZjX291dHB1dF90ZXJtaW5hbCA9IHsKIAkuYkxlbmd0aAkJPSBVVkNfRFRfT1VUUFVUX1RFUk1JTkFMX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZQk9IFVTQl9EVF9DU19JTlRFUkZBQ0UsCi0JLmJEZXNjcmlwdG9yU3ViVHlwZQk9IFVWQ19EVF9PVVRQVVRfVEVSTUlOQUwsCisJLmJEZXNjcmlwdG9yU3ViVHlwZQk9IFVWQ19WQ19PVVRQVVRfVEVSTUlOQUwsCiAJLmJUZXJtaW5hbElECQk9IDMsCiAJLndUZXJtaW5hbFR5cGUJCT0gY3B1X3RvX2xlMTYoMHgwMTAxKSwKIAkuYkFzc29jVGVybWluYWwJCT0gMCwKQEAgLTE0NCw3ICsxNDQsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBVVkNfSU5QVVRfSEVBREVSX0RFU0NSSVBUT1IoMSwgMikgdXZjX2lucHV0X2hlYWRlciA9IHsKIAkuYkxlbmd0aAkJPSBVVkNfRFRfSU5QVVRfSEVBREVSX1NJWkUoMSwgMiksCiAJLmJEZXNjcmlwdG9yVHlwZQk9IFVTQl9EVF9DU19JTlRFUkZBQ0UsCi0JLmJEZXNjcmlwdG9yU3ViVHlwZQk9IFVWQ19EVF9JTlBVVF9IRUFERVIsCisJLmJEZXNjcmlwdG9yU3ViVHlwZQk9IFVWQ19WU19JTlBVVF9IRUFERVIsCiAJLmJOdW1Gb3JtYXRzCQk9IDIsCiAJLndUb3RhbExlbmd0aAkJPSAwLCAvKiBkeW5hbWljICovCiAJLmJFbmRwb2ludEFkZHJlc3MJPSAwLCAvKiBkeW5hbWljICovCkBAIC0xNjEsNyArMTYxLDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXZjX2Zvcm1hdF91bmNvbXByZXNzZWQgdXZjX2Zvcm1hdF95dXYgPSB7CiAJLmJMZW5ndGgJCT0gVVZDX0RUX0ZPUk1BVF9VTkNPTVBSRVNTRURfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlCT0gVVNCX0RUX0NTX0lOVEVSRkFDRSwKLQkuYkRlc2NyaXB0b3JTdWJUeXBlCT0gVVZDX0RUX0ZPUk1BVF9VTkNPTVBSRVNTRUQsCisJLmJEZXNjcmlwdG9yU3ViVHlwZQk9IFVWQ19WU19GT1JNQVRfVU5DT01QUkVTU0VELAogCS5iRm9ybWF0SW5kZXgJCT0gMSwKIAkuYk51bUZyYW1lRGVzY3JpcHRvcnMJPSAyLAogCS5ndWlkRm9ybWF0CQk9CkBAIC0xODEsNyArMTgxLDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgVVZDX0ZSQU1FX1VOQ09NUFJFU1NFRCgzKSB1dmNfZnJhbWVfeXV2XzM2MHAgPSB7CiAJLmJMZW5ndGgJCT0gVVZDX0RUX0ZSQU1FX1VOQ09NUFJFU1NFRF9TSVpFKDMpLAogCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfQ1NfSU5URVJGQUNFLAotCS5iRGVzY3JpcHRvclN1YlR5cGUJPSBVVkNfRFRfRlJBTUVfVU5DT01QUkVTU0VELAorCS5iRGVzY3JpcHRvclN1YlR5cGUJPSBVVkNfVlNfRlJBTUVfVU5DT01QUkVTU0VELAogCS5iRnJhbWVJbmRleAkJPSAxLAogCS5ibUNhcGFiaWxpdGllcwkJPSAwLAogCS53V2lkdGgJCQk9IGNwdV90b19sZTE2KDY0MCksCkBAIC0xOTksNyArMTk5LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgVVZDX0ZSQU1FX1VOQ09NUFJFU1NFRCgxKSB1dmNfZnJhbWVfeXV2XzcyMHAgPSB7CiAJLmJMZW5ndGgJCT0gVVZDX0RUX0ZSQU1FX1VOQ09NUFJFU1NFRF9TSVpFKDEpLAogCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfQ1NfSU5URVJGQUNFLAotCS5iRGVzY3JpcHRvclN1YlR5cGUJPSBVVkNfRFRfRlJBTUVfVU5DT01QUkVTU0VELAorCS5iRGVzY3JpcHRvclN1YlR5cGUJPSBVVkNfVlNfRlJBTUVfVU5DT01QUkVTU0VELAogCS5iRnJhbWVJbmRleAkJPSAyLAogCS5ibUNhcGFiaWxpdGllcwkJPSAwLAogCS53V2lkdGgJCQk9IGNwdV90b19sZTE2KDEyODApLApAQCAtMjE1LDcgKzIxNSw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHV2Y19mb3JtYXRfbWpwZWcgdXZjX2Zvcm1hdF9tanBnID0gewogCS5iTGVuZ3RoCQk9IFVWQ19EVF9GT1JNQVRfTUpQRUdfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlCT0gVVNCX0RUX0NTX0lOVEVSRkFDRSwKLQkuYkRlc2NyaXB0b3JTdWJUeXBlCT0gVVZDX0RUX0ZPUk1BVF9NSlBFRywKKwkuYkRlc2NyaXB0b3JTdWJUeXBlCT0gVVZDX1ZTX0ZPUk1BVF9NSlBFRywKIAkuYkZvcm1hdEluZGV4CQk9IDIsCiAJLmJOdW1GcmFtZURlc2NyaXB0b3JzCT0gMiwKIAkuYm1GbGFncwkJPSAwLApAQCAtMjMyLDcgKzIzMiw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IFVWQ19GUkFNRV9NSlBFRygzKSB1dmNfZnJhbWVfbWpwZ18zNjBwID0gewogCS5iTGVuZ3RoCQk9IFVWQ19EVF9GUkFNRV9NSlBFR19TSVpFKDMpLAogCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfQ1NfSU5URVJGQUNFLAotCS5iRGVzY3JpcHRvclN1YlR5cGUJPSBVVkNfRFRfRlJBTUVfTUpQRUcsCisJLmJEZXNjcmlwdG9yU3ViVHlwZQk9IFVWQ19WU19GUkFNRV9NSlBFRywKIAkuYkZyYW1lSW5kZXgJCT0gMSwKIAkuYm1DYXBhYmlsaXRpZXMJCT0gMCwKIAkud1dpZHRoCQkJPSBjcHVfdG9fbGUxNig2NDApLApAQCAtMjUwLDcgKzI1MCw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IFVWQ19GUkFNRV9NSlBFRygxKSB1dmNfZnJhbWVfbWpwZ183MjBwID0gewogCS5iTGVuZ3RoCQk9IFVWQ19EVF9GUkFNRV9NSlBFR19TSVpFKDEpLAogCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfQ1NfSU5URVJGQUNFLAotCS5iRGVzY3JpcHRvclN1YlR5cGUJPSBVVkNfRFRfRlJBTUVfTUpQRUcsCisJLmJEZXNjcmlwdG9yU3ViVHlwZQk9IFVWQ19WU19GUkFNRV9NSlBFRywKIAkuYkZyYW1lSW5kZXgJCT0gMiwKIAkuYm1DYXBhYmlsaXRpZXMJCT0gMCwKIAkud1dpZHRoCQkJPSBjcHVfdG9fbGUxNigxMjgwKSwKQEAgLTI2Niw3ICsyNjYsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCB1dmNfY29sb3JfbWF0Y2hpbmdfZGVzY3JpcHRvciB1dmNfY29sb3JfbWF0Y2hpbmcgPSB7CiAJLmJMZW5ndGgJCT0gVVZDX0RUX0NPTE9SX01BVENISU5HX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZQk9IFVTQl9EVF9DU19JTlRFUkZBQ0UsCi0JLmJEZXNjcmlwdG9yU3ViVHlwZQk9IFVWQ19EVF9DT0xPUl9NQVRDSElORywKKwkuYkRlc2NyaXB0b3JTdWJUeXBlCT0gVVZDX1ZTX0NPTE9SRk9STUFULAogCS5iQ29sb3JQcmltYXJpZXMJPSAxLAogCS5iVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MJPSAxLAogCS5iTWF0cml4Q29lZmZpY2llbnRzCT0gNCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1teGMuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1teGMuYwppbmRleCBiZDQwMjc3Li5hOGFkOGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbXhjLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW14Yy5jCkBAIC0xODIsNyArMTgyLDcgQEAKIAl9CiAJY2xrX2VuYWJsZShwcml2LT51c2JjbGspOwogCi0JaWYgKCFjcHVfaXNfbXgzNSgpKSB7CisJaWYgKCFjcHVfaXNfbXgzNSgpICYmICFjcHVfaXNfbXgyNSgpKSB7CiAJCXByaXYtPmFoYmNsayA9IGNsa19nZXQoZGV2LCAidXNiX2FoYiIpOwogCQlpZiAoSVNfRVJSKHByaXYtPmFoYmNsaykpIHsKIAkJCXJldCA9IFBUUl9FUlIocHJpdi0+YWhiY2xrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1zY2hlZC5jIGIvZHJpdmVycy91c2IvaG9zdC9maGNpLXNjaGVkLmMKaW5kZXggNGYyY2JkYy4uYTQyZWYzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9maGNpLXNjaGVkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9maGNpLXNjaGVkLmMKQEAgLTEyNSw3ICsxMjUsNyBAQAogLyoKICAqIEZsdXNoIGFsbCB0cmFuc21pdHRlZCBwYWNrZXRzIGZyb20gQkRzCiAgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHdoZW4gZGlzYWJsaW5nIHRoZSBVU0IgcG9ydCB0byBmbHVzaCBhbGwKLSAqIHRyYW5zbWlzc2lvbnMgdGhhdCBhcmUgYWxscmVhZHkgc2NoZWR1bGVkIGluIHRoZSBCRHMKKyAqIHRyYW5zbWlzc2lvbnMgdGhhdCBhcmUgYWxyZWFkeSBzY2hlZHVsZWQgaW4gdGhlIEJEcwogICovCiB2b2lkIGZoY2lfZmx1c2hfYWxsX3RyYW5zbWlzc2lvbnMoc3RydWN0IGZoY2lfdXNiICp1c2IpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKaW5kZXggZmM1NzY1NS4uMDI4NjRhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwpAQCAtMTAzMSw3ICsxMDMxLDcgQEAKICNkZWZpbmUgUExBVEZPUk1fRFJJVkVSCQlvaGNpX2hjZF9lcDkzeHhfZHJpdmVyCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19TT0NfQVUxWDAwCisjaWZkZWYgQ09ORklHX01JUFNfQUxDSEVNWQogI2luY2x1ZGUgIm9oY2ktYXUxeHh4LmMiCiAjZGVmaW5lIFBMQVRGT1JNX0RSSVZFUgkJb2hjaV9oY2RfYXUxeHh4X2RyaXZlcgogI2VuZGlmCkBAIC0xMDk1LDYgKzEwOTUsMTEgQEAKICNkZWZpbmUgVE1JT19PSENJX0RSSVZFUglvaGNpX2hjZF90bWlvX2RyaXZlcgogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfTUFDSF9KWjQ3NDAKKyNpbmNsdWRlICJvaGNpLWp6NDc0MC5jIgorI2RlZmluZSBQTEFURk9STV9EUklWRVIJb2hjaV9oY2Rfano0NzQwX2RyaXZlcgorI2VuZGlmCisKICNpZgkhZGVmaW5lZChQQ0lfRFJJVkVSKSAmJgkJXAogCSFkZWZpbmVkKFBMQVRGT1JNX0RSSVZFUikgJiYJXAogCSFkZWZpbmVkKE9NQVAxX1BMQVRGT1JNX0RSSVZFUikgJiYJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWp6NDc0MC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWp6NDc0MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZTE4NzJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWp6NDc0MC5jCkBAIC0wLDAgKzEsMjc2IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMCwgTGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisKK3N0cnVjdCBqejQ3NDBfb2hjaV9oY2QgeworCXN0cnVjdCBvaGNpX2hjZCBvaGNpX2hjZDsKKworCXN0cnVjdCByZWd1bGF0b3IgKnZidXM7CisJYm9vbCB2YnVzX2VuYWJsZWQ7CisJc3RydWN0IGNsayAqY2xrOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgano0NzQwX29oY2lfaGNkICpoY2RfdG9fano0NzQwX2hjZChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXJldHVybiAoc3RydWN0IGp6NDc0MF9vaGNpX2hjZCAqKShoY2QtPmhjZF9wcml2KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdXNiX2hjZCAqano0NzQwX2hjZF90b19oY2Qoc3RydWN0IGp6NDc0MF9vaGNpX2hjZCAqano0NzQwX29oY2kpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZigodm9pZCAqKWp6NDc0MF9vaGNpLCBzdHJ1Y3QgdXNiX2hjZCwgaGNkX3ByaXYpOworfQorCitzdGF0aWMgaW50IG9oY2lfano0NzQwX3N0YXJ0KHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IG9oY2lfaGNkICpvaGNpID0gaGNkX3RvX29oY2koaGNkKTsKKwlpbnQJcmV0OworCisJcmV0ID0gb2hjaV9pbml0KG9oY2kpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJb2hjaS0+bnVtX3BvcnRzID0gMTsKKworCXJldCA9IG9oY2lfcnVuKG9oY2kpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICJDYW4gbm90IHN0YXJ0ICVzIiwKKwkJCWhjZC0+c2VsZi5idXNfbmFtZSk7CisJCW9oY2lfc3RvcChoY2QpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvaGNpX2p6NDc0MF9zZXRfdmJ1c19wb3dlcihzdHJ1Y3Qgano0NzQwX29oY2lfaGNkICpqejQ3NDBfb2hjaSwKKwlib29sIGVuYWJsZWQpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWp6NDc0MF9vaGNpLT52YnVzKQorCQlyZXR1cm4gMDsKKworCWlmIChlbmFibGVkICYmICFqejQ3NDBfb2hjaS0+dmJ1c19lbmFibGVkKSB7CisJCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoano0NzQwX29oY2ktPnZidXMpOworCQlpZiAocmV0KQorCQkJZGV2X2VycihqejQ3NDBfaGNkX3RvX2hjZChqejQ3NDBfb2hjaSktPnNlbGYuY29udHJvbGxlciwKKwkJCQkiQ291bGQgbm90IHBvd2VyIHZidXNcbiIpOworCX0gZWxzZSBpZiAoIWVuYWJsZWQgJiYgano0NzQwX29oY2ktPnZidXNfZW5hYmxlZCkgeworCQlyZXQgPSByZWd1bGF0b3JfZGlzYWJsZShqejQ3NDBfb2hjaS0+dmJ1cyk7CisJfQorCisJaWYgKHJldCA9PSAwKQorCQlqejQ3NDBfb2hjaS0+dmJ1c19lbmFibGVkID0gZW5hYmxlZDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2hjaV9qejQ3NDBfaHViX2NvbnRyb2woc3RydWN0IHVzYl9oY2QgKmhjZCwgdTE2IHR5cGVSZXEsIHUxNiB3VmFsdWUsCisJdTE2IHdJbmRleCwgY2hhciAqYnVmLCB1MTYgd0xlbmd0aCkKK3sKKwlzdHJ1Y3Qgano0NzQwX29oY2lfaGNkICpqejQ3NDBfb2hjaSA9IGhjZF90b19qejQ3NDBfaGNkKGhjZCk7CisJaW50IHJldDsKKworCXN3aXRjaCAodHlwZVJlcSkgeworCWNhc2UgU2V0SHViRmVhdHVyZToKKwkJaWYgKHdWYWx1ZSA9PSBVU0JfUE9SVF9GRUFUX1BPV0VSKQorCQkJcmV0ID0gb2hjaV9qejQ3NDBfc2V0X3ZidXNfcG93ZXIoano0NzQwX29oY2ksIHRydWUpOworCQlicmVhazsKKwljYXNlIENsZWFySHViRmVhdHVyZToKKwkJaWYgKHdWYWx1ZSA9PSBVU0JfUE9SVF9GRUFUX1BPV0VSKQorCQkJcmV0ID0gb2hjaV9qejQ3NDBfc2V0X3ZidXNfcG93ZXIoano0NzQwX29oY2ksIGZhbHNlKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBvaGNpX2h1Yl9jb250cm9sKGhjZCwgdHlwZVJlcSwgd1ZhbHVlLCB3SW5kZXgsIGJ1Ziwgd0xlbmd0aCk7Cit9CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgb2hjaV9qejQ3NDBfaGNfZHJpdmVyID0geworCS5kZXNjcmlwdGlvbiA9CQloY2RfbmFtZSwKKwkucHJvZHVjdF9kZXNjID0JCSJKWjQ3NDAgT0hDSSIsCisJLmhjZF9wcml2X3NpemUgPQlzaXplb2Yoc3RydWN0IGp6NDc0MF9vaGNpX2hjZCksCisKKwkvKgorCSAqIGdlbmVyaWMgaGFyZHdhcmUgbGlua2FnZQorCSAqLworCS5pcnEgPQkJCW9oY2lfaXJxLAorCS5mbGFncyA9CQlIQ0RfVVNCMTEgfCBIQ0RfTUVNT1JZLAorCisJLyoKKwkgKiBiYXNpYyBsaWZlY3ljbGUgb3BlcmF0aW9ucworCSAqLworCS5zdGFydCA9CQlvaGNpX2p6NDc0MF9zdGFydCwKKwkuc3RvcCA9CQkJb2hjaV9zdG9wLAorCS5zaHV0ZG93biA9CQlvaGNpX3NodXRkb3duLAorCisJLyoKKwkgKiBtYW5hZ2luZyBpL28gcmVxdWVzdHMgYW5kIGFzc29jaWF0ZWQgZGV2aWNlIHJlc291cmNlcworCSAqLworCS51cmJfZW5xdWV1ZSA9CQlvaGNpX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZSA9CQlvaGNpX3VyYl9kZXF1ZXVlLAorCS5lbmRwb2ludF9kaXNhYmxlID0Jb2hjaV9lbmRwb2ludF9kaXNhYmxlLAorCisJLyoKKwkgKiBzY2hlZHVsaW5nIHN1cHBvcnQKKwkgKi8KKwkuZ2V0X2ZyYW1lX251bWJlciA9CW9oY2lfZ2V0X2ZyYW1lLAorCisJLyoKKwkgKiByb290IGh1YiBzdXBwb3J0CisJICovCisJLmh1Yl9zdGF0dXNfZGF0YSA9CW9oY2lfaHViX3N0YXR1c19kYXRhLAorCS5odWJfY29udHJvbCA9CQlvaGNpX2p6NDc0MF9odWJfY29udHJvbCwKKyNpZmRlZglDT05GSUdfUE0KKwkuYnVzX3N1c3BlbmQgPQkJb2hjaV9idXNfc3VzcGVuZCwKKwkuYnVzX3Jlc3VtZSA9CQlvaGNpX2J1c19yZXN1bWUsCisjZW5kaWYKKwkuc3RhcnRfcG9ydF9yZXNldCA9CW9oY2lfc3RhcnRfcG9ydF9yZXNldCwKK307CisKKworc3RhdGljIF9fZGV2aW5pdCBpbnQgano0NzQwX29oY2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CisJc3RydWN0IGp6NDc0MF9vaGNpX2hjZCAqano0NzQwX29oY2k7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGlycTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IHBsYXRmb3JtIHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IHBsYXRmb3JtIGlycVxuIik7CisJCXJldHVybiBpcnE7CisJfQorCisJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJm9oY2lfano0NzQwX2hjX2RyaXZlciwgJnBkZXYtPmRldiwgImp6NDc0MCIpOworCWlmICghaGNkKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBjcmVhdGUgaGNkLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWp6NDc0MF9vaGNpID0gaGNkX3RvX2p6NDc0MF9oY2QoaGNkKTsKKworCXJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIGhjZF9uYW1lKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBtZW0gcmVnaW9uLlxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwloY2QtPnJzcmNfc3RhcnQgPSByZXMtPnN0YXJ0OworCWhjZC0+cnNyY19sZW4gPSByZXNvdXJjZV9zaXplKHJlcyk7CisJaGNkLT5yZWdzID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCisJaWYgKCFoY2QtPnJlZ3MpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGlvcmVtYXAgcmVnaXN0ZXJzLlxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnJfcmVsZWFzZV9tZW07CisJfQorCisJano0NzQwX29oY2ktPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInVoYyIpOworCWlmIChJU19FUlIoano0NzQwX29oY2ktPmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihqejQ3NDBfb2hjaS0+Y2xrKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBjbG9jazogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2lvdW5tYXA7CisJfQorCisJano0NzQwX29oY2ktPnZidXMgPSByZWd1bGF0b3JfZ2V0KCZwZGV2LT5kZXYsICJ2YnVzIik7CisJaWYgKElTX0VSUihqejQ3NDBfb2hjaS0+dmJ1cykpCisJCWp6NDc0MF9vaGNpLT52YnVzID0gTlVMTDsKKworCisJY2xrX3NldF9yYXRlKGp6NDc0MF9vaGNpLT5jbGssIDQ4MDAwMDAwKTsKKwljbGtfZW5hYmxlKGp6NDc0MF9vaGNpLT5jbGspOworCWlmIChqejQ3NDBfb2hjaS0+dmJ1cykKKwkJb2hjaV9qejQ3NDBfc2V0X3ZidXNfcG93ZXIoano0NzQwX29oY2ksIHRydWUpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaGNkKTsKKworCW9oY2lfaGNkX2luaXQoaGNkX3RvX29oY2koaGNkKSk7CisKKwlyZXQgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgMCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gYWRkIGhjZDogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2Rpc2FibGU7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9kaXNhYmxlOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWlmIChqejQ3NDBfb2hjaS0+dmJ1cykgeworCQlyZWd1bGF0b3JfZGlzYWJsZShqejQ3NDBfb2hjaS0+dmJ1cyk7CisJCXJlZ3VsYXRvcl9wdXQoano0NzQwX29oY2ktPnZidXMpOworCX0KKwljbGtfZGlzYWJsZShqejQ3NDBfb2hjaS0+Y2xrKTsKKworCWNsa19wdXQoano0NzQwX29oY2ktPmNsayk7CitlcnJfaW91bm1hcDoKKwlpb3VubWFwKGhjZC0+cmVncyk7CitlcnJfcmVsZWFzZV9tZW06CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CitlcnJfZnJlZToKKwl1c2JfcHV0X2hjZChoY2QpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9fZGV2ZXhpdCBpbnQgano0NzQwX29oY2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBqejQ3NDBfb2hjaV9oY2QgKmp6NDc0MF9vaGNpID0gaGNkX3RvX2p6NDc0MF9oY2QoaGNkKTsKKworCXVzYl9yZW1vdmVfaGNkKGhjZCk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCWlmIChqejQ3NDBfb2hjaS0+dmJ1cykgeworCQlyZWd1bGF0b3JfZGlzYWJsZShqejQ3NDBfb2hjaS0+dmJ1cyk7CisJCXJlZ3VsYXRvcl9wdXQoano0NzQwX29oY2ktPnZidXMpOworCX0KKworCWNsa19kaXNhYmxlKGp6NDc0MF9vaGNpLT5jbGspOworCWNsa19wdXQoano0NzQwX29oY2ktPmNsayk7CisKKwlpb3VubWFwKGhjZC0+cmVncyk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisKKwl1c2JfcHV0X2hjZChoY2QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9oY2lfaGNkX2p6NDc0MF9kcml2ZXIgPSB7CisJLnByb2JlID0gano0NzQwX29oY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGp6NDc0MF9vaGNpX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiano0NzQwLW9oY2kiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworTU9EVUxFX0FMSUFTKCJwbGF0ZnJvbTpqejQ3NDAtb2hjaSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCmluZGV4IGExOGRlYmQuLjQxODE2MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKQEAgLTIwMyw3ICsyMDMsNyBAQAogCV9fcmF3X3dyaXRlbCh1aGNociAmIH5VSENIUl9GSFIsIG9oY2ktPm1taW9fYmFzZSArIFVIQ0hSKTsKIH0KIAotI2lmZGVmIENPTkZJR19DUFVfUFhBMjd4CisjaWZkZWYgQ09ORklHX1BYQTI3eAogZXh0ZXJuIHZvaWQgcHhhMjd4X2NsZWFyX290Z3BoKHZvaWQpOwogI2Vsc2UKICNkZWZpbmUgcHhhMjd4X2NsZWFyX290Z3BoKCkJZG8ge30gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3NsODExX2NzLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExX2NzLmMKaW5kZXggNThjYjczYy4uMGUxM2EwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMV9jcy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTFfY3MuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KQEAgLTQzLDggKzQyLDYgQEAKIC8qIFZBUklBQkxFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9uYW1lW0RFVl9OQU1FX0xFTl0gID0gInNsODExX2NzIjsKLQogdHlwZWRlZiBzdHJ1Y3QgbG9jYWxfaW5mb190IHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqcF9kZXY7CiB9IGxvY2FsX2luZm9fdDsKQEAgLTE2NSwxNiArMTYyLDE2IEBACiAJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7CiAKIAkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KLQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gcF9kZXYtPmlvLk51bVBvcnRzMiA9IDA7CisJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA9IDA7CiAJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC0+aW8ubndpbiA+IDApKSB7CiAJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC0+aW87CisJCXBfZGV2LT5pb19saW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwogCi0JCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKLQkJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF84OworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gaW8tPndpblswXS5iYXNlOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmVuZCA9IGlvLT53aW5bMF0ubGVuOwogCi0JCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbyk7CisJCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2Rldik7CiAJfQogCXBjbWNpYV9kaXNhYmxlX2RldmljZShwX2Rldik7CiAJcmV0dXJuIC1FTk9ERVY7CkBAIC0xOTIsNyArMTg5LDcgQEAKIAkJZ290byBmYWlsZWQ7CiAKIAkvKiByZXF1aXJlIGFuIElSUSBhbmQgdHdvIHJlZ2lzdGVycyAqLwotCWlmICghbGluay0+aW8uTnVtUG9ydHMxIHx8IGxpbmstPmlvLk51bVBvcnRzMSA8IDIpCisJaWYgKHJlc291cmNlX3NpemUobGluay0+cmVzb3VyY2VbMF0pIDwgMikKIAkJZ290byBmYWlsZWQ7CiAKIAlpZiAoIWxpbmstPmlycSkKQEAgLTIwNywxMSArMjA0LDEwIEBACiAJaWYgKGxpbmstPmNvbmYuVnBwKQogCQlwcmludGsoIiwgVnBwICVkLiVkIiwgbGluay0+Y29uZi5WcHAvMTAsIGxpbmstPmNvbmYuVnBwJTEwKTsKIAlwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxKTsKLQlwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKLQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQxK2xpbmstPmlvLk51bVBvcnRzMS0xKTsKKwlwcmludGsoIiwgaW8gJXBSIiwgbGluay0+cmVzb3VyY2VbMF0pOwogCXByaW50aygiXG4iKTsKIAotCWlmIChzbDgxMV9oY19pbml0KHBhcmVudCwgbGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pcnEpCisJaWYgKHNsODExX2hjX2luaXQocGFyZW50LCBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQsIGxpbmstPmlycSkKIAkJCTwgMCkgewogZmFpbGVkOgogCQlwcmludGsoS0VSTl9XQVJOSU5HICJzbDgxMV9jc19jb25maWcgZmFpbGVkXG4iKTsKQEAgLTI0Niw3ICsyNDIsNyBAQAogc3RhdGljIHN0cnVjdCBwY21jaWFfZHJpdmVyIHNsODExX2NzX2RyaXZlciA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmRydgkJPSB7Ci0JCS5uYW1lCT0gKGNoYXIgKilkcml2ZXJfbmFtZSwKKwkJLm5hbWUJPSAic2w4MTFfY3MiLAogCX0sCiAJLnByb2JlCQk9IHNsODExX2NzX3Byb2JlLAogCS5yZW1vdmUJCT0gc2w4MTFfY3NfZGV0YWNoLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jCmluZGV4IGZkOWUwM2EuLjJlYjY1OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMKQEAgLTgzNSw2ICs4MzUsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCB4aGNpX2NvcHlfZXAwX2RlcXVldWVfaW50b19pbnB1dF9jdHgoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlzdHJ1Y3QgeGhjaV92aXJ0X2RldmljZSAqdmlydF9kZXY7CisJc3RydWN0IHhoY2lfZXBfY3R4CSplcDBfY3R4OworCXN0cnVjdCB4aGNpX3JpbmcJKmVwX3Jpbmc7CisKKwl2aXJ0X2RldiA9IHhoY2ktPmRldnNbdWRldi0+c2xvdF9pZF07CisJZXAwX2N0eCA9IHhoY2lfZ2V0X2VwX2N0eCh4aGNpLCB2aXJ0X2Rldi0+aW5fY3R4LCAwKTsKKwllcF9yaW5nID0gdmlydF9kZXYtPmVwc1swXS5yaW5nOworCS8qCisJICogRklYTUUgd2UgZG9uJ3Qga2VlcCB0cmFjayBvZiB0aGUgZGVxdWV1ZSBwb2ludGVyIHZlcnkgd2VsbCBhZnRlciBhCisJICogU2V0IFRSIGRlcXVldWUgcG9pbnRlciwgc28gd2UncmUgc2V0dGluZyB0aGUgZGVxdWV1ZSBwb2ludGVyIG9mIHRoZQorCSAqIGhvc3QgdG8gb3VyIGVucXVldWUgcG9pbnRlci4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGEKKwkgKiBjb25maWd1cmVkIGRldmljZSBoYXMgcmVzZXQsIHNvIGFsbCBjb250cm9sIHRyYW5zZmVycyBzaG91bGQgaGF2ZQorCSAqIGJlZW4gY29tcGxldGVkIG9yIGNhbmNlbGxlZCBiZWZvcmUgdGhlIHJlc2V0LgorCSAqLworCWVwMF9jdHgtPmRlcSA9IHhoY2lfdHJiX3ZpcnRfdG9fZG1hKGVwX3JpbmctPmVucV9zZWcsIGVwX3JpbmctPmVucXVldWUpOworCWVwMF9jdHgtPmRlcSB8PSBlcF9yaW5nLT5jeWNsZV9zdGF0ZTsKK30KKwogLyogU2V0dXAgYW4geEhDSSB2aXJ0dWFsIGRldmljZSBmb3IgYSBTZXQgQWRkcmVzcyBjb21tYW5kICovCiBpbnQgeGhjaV9zZXR1cF9hZGRyZXNzYWJsZV92aXJ0X2RldihzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQogewpAQCAtMTAwMiw3ICsxMDIzLDcgQEAKIAlyZXR1cm4gRVBfSU5URVJWQUwoaW50ZXJ2YWwpOwogfQogCi0vKiBUaGUgIk11bHQiIGZpZWxkIGluIHRoZSBlbmRwb2ludCBjb250ZXh0IGlzIG9ubHkgc2V0IGZvciBTdXBlclNwZWVkIGRldmljZXMuCisvKiBUaGUgIk11bHQiIGZpZWxkIGluIHRoZSBlbmRwb2ludCBjb250ZXh0IGlzIG9ubHkgc2V0IGZvciBTdXBlclNwZWVkIGlzb2MgZXBzLgogICogSGlnaCBzcGVlZCBlbmRwb2ludCBkZXNjcmlwdG9ycyBjYW4gZGVmaW5lICJ0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwKICAqIHRyYW5zYWN0aW9uIG9wcG9ydHVuaXRpZXMgcGVyIG1pY3JvZnJhbWUiLCBidXQgdGhhdCBnb2VzIGluIHRoZSBNYXggQnVyc3QKICAqIGVuZHBvaW50IGNvbnRleHQgZmllbGQuCkBAIC0xMDEwLDcgKzEwMzEsOCBAQAogc3RhdGljIGlubGluZSB1MzIgeGhjaV9nZXRfZW5kcG9pbnRfbXVsdChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKIAkJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCkKIHsKLQlpZiAodWRldi0+c3BlZWQgIT0gVVNCX1NQRUVEX1NVUEVSKQorCWlmICh1ZGV2LT5zcGVlZCAhPSBVU0JfU1BFRURfU1VQRVIgfHwKKwkJCSF1c2JfZW5kcG9pbnRfeGZlcl9pc29jKCZlcC0+ZGVzYykpCiAJCXJldHVybiAwOwogCXJldHVybiBlcC0+c3NfZXBfY29tcC5ibUF0dHJpYnV0ZXM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYwppbmRleCA5NGU2OTM0Li5iZmM5OWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKQEAgLTIzODAsMTYgKzIzODAsMTkgQEAKIAkJdTMyIGZpZWxkMywgdTMyIGZpZWxkNCwgYm9vbCBjb21tYW5kX211c3Rfc3VjY2VlZCkKIHsKIAlpbnQgcmVzZXJ2ZWRfdHJicyA9IHhoY2ktPmNtZF9yaW5nX3Jlc2VydmVkX3RyYnM7CisJaW50IHJldDsKKwogCWlmICghY29tbWFuZF9tdXN0X3N1Y2NlZWQpCiAJCXJlc2VydmVkX3RyYnMrKzsKIAotCWlmICghcm9vbV9vbl9yaW5nKHhoY2ksIHhoY2ktPmNtZF9yaW5nLCByZXNlcnZlZF90cmJzKSkgewotCQlpZiAoIWluX2ludGVycnVwdCgpKQotCQkJeGhjaV9lcnIoeGhjaSwgIkVSUjogTm8gcm9vbSBmb3IgY29tbWFuZCBvbiBjb21tYW5kIHJpbmdcbiIpOworCXJldCA9IHByZXBhcmVfcmluZyh4aGNpLCB4aGNpLT5jbWRfcmluZywgRVBfU1RBVEVfUlVOTklORywKKwkJCXJlc2VydmVkX3RyYnMsIEdGUF9BVE9NSUMpOworCWlmIChyZXQgPCAwKSB7CisJCXhoY2lfZXJyKHhoY2ksICJFUlI6IE5vIHJvb20gZm9yIGNvbW1hbmQgb24gY29tbWFuZCByaW5nXG4iKTsKIAkJaWYgKGNvbW1hbmRfbXVzdF9zdWNjZWVkKQogCQkJeGhjaV9lcnIoeGhjaSwgIkVSUjogUmVzZXJ2ZWQgVFJCIGNvdW50aW5nIGZvciAiCiAJCQkJCSJ1bmZhaWxhYmxlIGNvbW1hbmRzIGZhaWxlZC5cbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIHJldDsKIAl9CiAJcXVldWVfdHJiKHhoY2ksIHhoY2ktPmNtZF9yaW5nLCBmYWxzZSwgZmFsc2UsIGZpZWxkMSwgZmllbGQyLCBmaWVsZDMsCiAJCQlmaWVsZDQgfCB4aGNpLT5jbWRfcmluZy0+Y3ljbGVfc3RhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYwppbmRleCAyNzM0NWNkLi4zOTk4ZjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYwpAQCAtMjEzNCw2ICsyMTM0LDggQEAKIAkvKiBJZiB0aGlzIGlzIGEgU2V0IEFkZHJlc3MgdG8gYW4gdW5jb25maWd1cmVkIGRldmljZSwgc2V0dXAgZXAgMCAqLwogCWlmICghdWRldi0+Y29uZmlnKQogCQl4aGNpX3NldHVwX2FkZHJlc3NhYmxlX3ZpcnRfZGV2KHhoY2ksIHVkZXYpOworCWVsc2UKKwkJeGhjaV9jb3B5X2VwMF9kZXF1ZXVlX2ludG9faW5wdXRfY3R4KHhoY2ksIHVkZXYpOwogCS8qIE90aGVyd2lzZSwgYXNzdW1lIHRoZSBjb3JlIGhhcyB0aGUgZGV2aWNlIGNvbmZpZ3VyZWQgaG93IGl0IHdhbnRzICovCiAJeGhjaV9kYmcoeGhjaSwgIlNsb3QgSUQgJWQgSW5wdXQgQ29udGV4dDpcbiIsIHVkZXYtPnNsb3RfaWQpOwogCXhoY2lfZGJnX2N0eCh4aGNpLCB2aXJ0X2Rldi0+aW5fY3R4LCAyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmgKaW5kZXggOGI0YjdkMy4uNmM3ZTM0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmgKQEAgLTEyOTIsNiArMTI5Miw4IEBACiB2b2lkIHhoY2lfZnJlZV92aXJ0X2RldmljZShzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGludCBzbG90X2lkKTsKIGludCB4aGNpX2FsbG9jX3ZpcnRfZGV2aWNlKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgaW50IHNsb3RfaWQsIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBnZnBfdCBmbGFncyk7CiBpbnQgeGhjaV9zZXR1cF9hZGRyZXNzYWJsZV92aXJ0X2RldihzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KTsKK3ZvaWQgeGhjaV9jb3B5X2VwMF9kZXF1ZXVlX2ludG9faW5wdXRfY3R4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKKwkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpOwogdW5zaWduZWQgaW50IHhoY2lfZ2V0X2VuZHBvaW50X2luZGV4KHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYyk7CiB1bnNpZ25lZCBpbnQgeGhjaV9nZXRfZW5kcG9pbnRfZmxhZyhzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2MpOwogdW5zaWduZWQgaW50IHhoY2lfZ2V0X2VuZHBvaW50X2ZsYWdfZnJvbV9pbmRleCh1bnNpZ25lZCBpbnQgZXBfaW5kZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmMgYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuYwppbmRleCAzMGQ5MzAzLi5kMjU4MTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuYwpAQCAtMjQzNiw3ICsyNDM2LDggQEAKIAl9CiAKIAlpZiAoIXNpc3VzYi0+ZGV2aW5pdCkgewotCQlpZiAoc2lzdXNiLT5zaXN1c2JfZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgeworCQlpZiAoc2lzdXNiLT5zaXN1c2JfZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCB8fAorCQkgICAgc2lzdXNiLT5zaXN1c2JfZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfU1VQRVIpIHsKIAkJCWlmIChzaXN1c2JfaW5pdF9nZnhkZXZpY2Uoc2lzdXNiLCAwKSkgewogCQkJCW11dGV4X3VubG9jaygmc2lzdXNiLT5sb2NrKTsKIAkJCQlkZXZfZXJyKCZzaXN1c2ItPnNpc3VzYl9kZXYtPmRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIGRldmljZVxuIik7CkBAIC0zMTY2LDcgKzMxNjcsNyBAQAogCiAJc2lzdXNiLT5wcmVzZW50ID0gMTsKIAotCWlmIChkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSB7CisJaWYgKGRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0ggfHwgZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfU1VQRVIpIHsKIAkJaW50IGluaXRzY3JlZW4gPSAxOwogI2lmZGVmIElOQ0xfU0lTVVNCX0NPTgogCQlpZiAoc2lzdXNiX2ZpcnN0X3ZjID4gMCAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi90dXNiNjAxMC5jIGIvZHJpdmVycy91c2IvbXVzYi90dXNiNjAxMC5jCmluZGV4IDA1YzA3N2YuLjNjNDhlNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvdHVzYjYwMTAuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL3R1c2I2MDEwLmMKQEAgLTI5LDE5ICsyOSw2IEBACiAjZGVmaW5lIFRVU0JfUkVWX01BSk9SKHJlZ192YWwpCQkoKHJlZ192YWwgPj4gNCkgJiAweGYpCiAjZGVmaW5lIFRVU0JfUkVWX01JTk9SKHJlZ192YWwpCQkocmVnX3ZhbCAmIDB4ZikKIAotI2lmZGVmIENPTkZJR19QTQotLyogUkVWSVNJVDogVGhlc2Ugc2hvdWxkIGJlIG9ubHkgbmVlZGVkIGlmIHNvbWVib2R5IGltcGxlbWVudHMgb2ZmIGlkbGUgKi8KLXZvaWQgbXVzYl9wbGF0Zm9ybV9zYXZlX2NvbnRleHQoc3RydWN0IG11c2IgKm11c2IsCi0JCQlzdHJ1Y3QgbXVzYl9jb250ZXh0X3JlZ2lzdGVycyAqbXVzYl9jb250ZXh0KQotewotfQotCi12b2lkIG11c2JfcGxhdGZvcm1fcmVzdG9yZV9jb250ZXh0KHN0cnVjdCBtdXNiICptdXNiLAotCQkJc3RydWN0IG11c2JfY29udGV4dF9yZWdpc3RlcnMgKm11c2JfY29udGV4dCkKLXsKLX0KLSNlbmRpZgotCiAvKgogICogQ2hlY2tzIHRoZSByZXZpc2lvbi4gV2UgbmVlZCB0byB1c2UgdGhlIERNQSByZWdpc3RlciBhcyAzLjAgZG9lcyBub3QKICAqIGhhdmUgY29ycmVjdCB2ZXJzaW9ucyBmb3IgVFVTQl9QUkNNX1JFViBvciBUVVNCX0lOVF9DVFJMX1JFVi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKaW5kZXggZGE3ZTMzNC4uZTI5OGRjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKQEAgLTY5MSw2ICs2OTEsNyBAQAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9ORElfQVVST1JBX1NDVV9QSUQpLAogCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJmZ0ZGlfTkRJX2RldmljZV9xdWlyayB9LAogCXsgVVNCX0RFVklDRShURUxMRFVTX1ZJRCwgVEVMTERVU19URUxMU1RJQ0tfUElEKSB9LAorCXsgVVNCX0RFVklDRShSVFNZU1RFTVNfVklELCBSVFNZU1RFTVNfU0VSSUFMX1ZYN19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX01BWFNUUkVBTV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1BISV9GSVNDT19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKFRNTF9WSUQsIFRNTF9VU0JfU0VSSUFMX1BJRCkgfSwKQEAgLTczNyw2ICs3MzgsMTQgQEAKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIE1KU0dfU1JfUkFESU9fUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgTUpTR19IRF9SQURJT19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBNSlNHX1hNX1JBRElPX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIFhWRVJWRV9TSUdOQUxZWkVSX1NUX1BJRCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmZnRkaV9qdGFnX3F1aXJrIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBYVkVSVkVfU0lHTkFMWVpFUl9TTElURV9QSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJmZ0ZGlfanRhZ19xdWlyayB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgWFZFUlZFX1NJR05BTFlaRVJfU0gyX1BJRCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmZnRkaV9qdGFnX3F1aXJrIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBYVkVSVkVfU0lHTkFMWVpFUl9TSDRfUElEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZmdGRpX2p0YWdfcXVpcmsgfSwKIAl7IH0sCQkJCQkvKiBPcHRpb25hbCBwYXJhbWV0ZXIgZW50cnkgKi8KIAl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oCmluZGV4IGJiYzE1OWEuLmQwMTk0NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKQEAgLTY5Niw2ICs2OTYsMTIgQEAKICNkZWZpbmUgVEVMTERVU19URUxMU1RJQ0tfUElECQkweDBDMzAJLyogUkYgY29udHJvbCBkb25nbGUgNDMzIE1IeiB1c2luZyBGVDIzMlJMICovCiAKIC8qCisgKiBSVCBTeXN0ZW1zIHByb2dyYW1taW5nIGNhYmxlcyBmb3IgdmFyaW91cyBoYW0gcmFkaW9zCisgKi8KKyNkZWZpbmUgUlRTWVNURU1TX1ZJRAkJCTB4MjEwMAkvKiBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgUlRTWVNURU1TX1NFUklBTF9WWDdfUElECTB4OWU1MgkvKiBTZXJpYWwgY29udmVydGVyIGZvciBWWC03IFJhZGlvcyB1c2luZyBGVDIzMlJMICovCisKKy8qCiAgKiBCYXllciBBc2NlbnNpYSBDb250b3VyIGJsb29kIGdsdWNvc2UgbWV0ZXIgVVNCLWNvbnZlcnRlciBjYWJsZS4KICAqIGh0dHA6Ly93aW5nbHVjb2ZhY3RzLmNvbS9jYWJsZXMvCiAgKi8KQEAgLTEwMTcsMyArMTAyMywxMiBAQAogI2RlZmluZSBNSlNHX1NSX1JBRElPX1BJRAkweDkzNzkKICNkZWZpbmUgTUpTR19YTV9SQURJT19QSUQJMHg5MzdBCiAjZGVmaW5lIE1KU0dfSERfUkFESU9fUElECTB4OTM3QworCisvKgorICogWHZlcnZlIFNpZ25hbHl6ZXIgdG9vbHMgKGh0dHA6Ly93d3cuc2lnbmFseXplci5jb20vKQorICovCisjZGVmaW5lIFhWRVJWRV9TSUdOQUxZWkVSX1NUX1BJRAkweEJDQTAKKyNkZWZpbmUgWFZFUlZFX1NJR05BTFlaRVJfU0xJVEVfUElECTB4QkNBMQorI2RlZmluZSBYVkVSVkVfU0lHTkFMWVpFUl9TSDJfUElECTB4QkNBMgorI2RlZmluZSBYVkVSVkVfU0lHTkFMWVpFUl9TSDRfUElECTB4QkNBNAorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYwppbmRleCBjZGJlOGJmLi5lOGE2NWNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMKQEAgLTI2MSw3ICsyNjEsNyBAQAogCiAJCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKIAotCQkvKiBwcml2LT50ZXJtaW9zIGlzIGxlZnQgdW5pbml0YWxpemVkIHVudGlsIHBvcnQgb3BlbmluZyAqLworCQkvKiBwcml2LT50ZXJtaW9zIGlzIGxlZnQgdW5pbml0aWFsaXplZCB1bnRpbCBwb3J0IG9wZW5pbmcgKi8KIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmc2VyaWFsLT5wb3J0W2ldLT53cml0ZV93YWl0KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwppbmRleCBlMjgwYWQ4Li41Y2QzMGU0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwpAQCAtMjA2LDYgKzIwNiw3IEBACiAjZGVmaW5lIEFNT0lfUFJPRFVDVF9IMDEJCQkweDA4MDAKICNkZWZpbmUgQU1PSV9QUk9EVUNUX0gwMUEJCQkweDcwMDIKICNkZWZpbmUgQU1PSV9QUk9EVUNUX0gwMgkJCTB4MDgwMgorI2RlZmluZSBBTU9JX1BST0RVQ1RfU0tZUEVQSE9ORV9TMgkJMHgwNDA3CiAKICNkZWZpbmUgREVMTF9WRU5ET1JfSUQJCQkJMHg0MTNDCiAKQEAgLTMwMiw2ICszMDMsNyBAQAogI2RlZmluZSBRSVNEQV9QUk9EVUNUX0gyMV80NTEyCQkJMHg0NTEyCiAjZGVmaW5lIFFJU0RBX1BST0RVQ1RfSDIxXzQ1MjMJCQkweDQ1MjMKICNkZWZpbmUgUUlTREFfUFJPRFVDVF9IMjBfNDUxNQkJCTB4NDUxNQorI2RlZmluZSBRSVNEQV9QUk9EVUNUX0gyMF80NTE4CQkJMHg0NTE4CiAjZGVmaW5lIFFJU0RBX1BST0RVQ1RfSDIwXzQ1MTkJCQkweDQ1MTkKIAogLyogVExBWVRFQ0ggUFJPRFVDVFMgKi8KQEAgLTUxNiw2ICs1MTgsNyBAQAogCXsgVVNCX0RFVklDRShBTU9JX1ZFTkRPUl9JRCwgQU1PSV9QUk9EVUNUX0gwMSkgfSwKIAl7IFVTQl9ERVZJQ0UoQU1PSV9WRU5ET1JfSUQsIEFNT0lfUFJPRFVDVF9IMDFBKSB9LAogCXsgVVNCX0RFVklDRShBTU9JX1ZFTkRPUl9JRCwgQU1PSV9QUk9EVUNUX0gwMikgfSwKKwl7IFVTQl9ERVZJQ0UoQU1PSV9WRU5ET1JfSUQsIEFNT0lfUFJPRFVDVF9TS1lQRVBIT05FX1MyKSB9LAogCiAJeyBVU0JfREVWSUNFKERFTExfVkVORE9SX0lELCBERUxMX1BST0RVQ1RfNTcwMF9NSU5JQ0FSRCkgfSwJCS8qIERlbGwgV2lyZWxlc3MgNTcwMCBNb2JpbGUgQnJvYWRiYW5kIENETUEvRVZETyBNaW5pLUNhcmQgPT0gTm92YXRlbCBFeHBlZGl0ZSBFVjYyMCBDRE1BL0VWLURPICovCiAJeyBVU0JfREVWSUNFKERFTExfVkVORE9SX0lELCBERUxMX1BST0RVQ1RfNTUwMF9NSU5JQ0FSRCkgfSwJCS8qIERlbGwgV2lyZWxlc3MgNTUwMCBNb2JpbGUgQnJvYWRiYW5kIEhTRFBBIE1pbmktQ2FyZCA9PSBOb3ZhdGVsIEV4cGVkaXRlIEVVNzQwIEhTRFBBLzNHICovCkBAIC04NTIsNiArODU1LDcgQEAKIAl7IFVTQl9ERVZJQ0UoUUlTREFfVkVORE9SX0lELCBRSVNEQV9QUk9EVUNUX0gyMV80NTEyKSB9LAogCXsgVVNCX0RFVklDRShRSVNEQV9WRU5ET1JfSUQsIFFJU0RBX1BST0RVQ1RfSDIxXzQ1MjMpIH0sCiAJeyBVU0JfREVWSUNFKFFJU0RBX1ZFTkRPUl9JRCwgUUlTREFfUFJPRFVDVF9IMjBfNDUxNSkgfSwKKwl7IFVTQl9ERVZJQ0UoUUlTREFfVkVORE9SX0lELCBRSVNEQV9QUk9EVUNUX0gyMF80NTE4KSB9LAogCXsgVVNCX0RFVklDRShRSVNEQV9WRU5ET1JfSUQsIFFJU0RBX1BST0RVQ1RfSDIwXzQ1MTkpIH0sCiAJeyBVU0JfREVWSUNFKFRPU0hJQkFfVkVORE9SX0lELCBUT1NISUJBX1BST0RVQ1RfRzQ1MCkgfSwKIAl7IFVTQl9ERVZJQ0UoVE9TSElCQV9WRU5ET1JfSUQsIFRPU0hJQkFfUFJPRFVDVF9IU0RQQV9NSU5JQ0FSRCApIH0sIC8qIFRvc2hpYmEgM0cgSFNEUEEgPT0gTm92YXRlbCBFeHBlZGl0ZSBFVTg3MEQgTWluaUNhcmQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9xY3NlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Fjc2VyaWFsLmMKaW5kZXggOTNkNzJlYi4uY2RlNjdjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3Fjc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Fjc2VyaWFsLmMKQEAgLTUxLDYgKzUxLDggQEAKIAl7VVNCX0RFVklDRSgweDFmNDUsIDB4MDAwMSl9LAkvKiBVbmtub3duIEdvYmkgUURMIGRldmljZSAqLwogCXtVU0JfREVWSUNFKDB4NDEzYywgMHg4MTg1KX0sCS8qIERlbGwgR29iaSAyMDAwIFFETCBkZXZpY2UgKE4wMjE4LCBWVTkzNikgKi8KIAl7VVNCX0RFVklDRSgweDQxM2MsIDB4ODE4Nil9LAkvKiBEZWxsIEdvYmkgMjAwMCBNb2RlbSBkZXZpY2UgKE4wMjE4LCBWVTkzNikgKi8KKwl7VVNCX0RFVklDRSgweDA1YzYsIDB4OTIwOCl9LAkvKiBHZW5lcmljIEdvYmkgMjAwMCBRREwgZGV2aWNlICovCisJe1VTQl9ERVZJQ0UoMHgwNWM2LCAweDkyMGIpfSwJLyogR2VuZXJpYyBHb2JpIDIwMDAgTW9kZW0gZGV2aWNlICovCiAJe1VTQl9ERVZJQ0UoMHgwNWM2LCAweDkyMjQpfSwJLyogU29ueSBHb2JpIDIwMDAgUURMIGRldmljZSAoTjAyNzksIFZVNzMwKSAqLwogCXtVU0JfREVWSUNFKDB4MDVjNiwgMHg5MjI1KX0sCS8qIFNvbnkgR29iaSAyMDAwIE1vZGVtIGRldmljZSAoTjAyNzksIFZVNzMwKSAqLwogCXtVU0JfREVWSUNFKDB4MDVjNiwgMHg5MjQ0KX0sCS8qIFNhbXN1bmcgR29iaSAyMDAwIFFETCBkZXZpY2UgKFZMMTc2KSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCmluZGV4IGVmMGJkYjAuLmQ0N2I1NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKQEAgLTI0NSw2ICsyNDUsNyBAQAogCXsgVVNCX0RFVklDRSgweDExOTksIDB4MDAyMSkgfSwJLyogU2llcnJhIFdpcmVsZXNzIEFpckNhcmQgNTk3RSAqLwogCXsgVVNCX0RFVklDRSgweDExOTksIDB4MDExMikgfSwgLyogU2llcnJhIFdpcmVsZXNzIEFpckNhcmQgNTgwICovCiAJeyBVU0JfREVWSUNFKDB4MTE5OSwgMHgwMTIwKSB9LAkvKiBTaWVycmEgV2lyZWxlc3MgVVNCIERvbmdsZSA1OTVVICovCisJeyBVU0JfREVWSUNFKDB4MTE5OSwgMHgwMzAxKSB9LAkvKiBTaWVycmEgV2lyZWxlc3MgVVNCIERvbmdsZSAyNTBVICovCiAJLyogU2llcnJhIFdpcmVsZXNzIEM1OTcgKi8KIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MTE5OSwgMHgwMDIzLCAweEZGLCAweEZGLCAweEZGKSB9LAogCS8qIFNpZXJyYSBXaXJlbGVzcyBUNTk4ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYwppbmRleCA0NDcxNjQyLi42NGVjMDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKQEAgLTEzOSw5ICsxMzksNyBAQAogCiAJLyogZmlsbCB0aGUgY29tbW9uIGZpZWxkcyBpbiB0aGUgVVJCICovCiAJdXMtPmN1cnJlbnRfdXJiLT5jb250ZXh0ID0gJnVyYl9kb25lOwotCXVzLT5jdXJyZW50X3VyYi0+YWN0dWFsX2xlbmd0aCA9IDA7Ci0JdXMtPmN1cnJlbnRfdXJiLT5lcnJvcl9jb3VudCA9IDA7Ci0JdXMtPmN1cnJlbnRfdXJiLT5zdGF0dXMgPSAwOworCXVzLT5jdXJyZW50X3VyYi0+dHJhbnNmZXJfZmxhZ3MgPSAwOwogCiAJLyogd2UgYXNzdW1lIHRoYXQgaWYgdHJhbnNmZXJfYnVmZmVyIGlzbid0IHVzLT5pb2J1ZiB0aGVuIGl0CiAJICogaGFzbid0IGJlZW4gbWFwcGVkIGZvciBETUEuICBZZXMsIHRoaXMgaXMgY2x1bmt5LCBidXQgaXQncwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvd3VzYmhjLmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS93dXNiaGMuYwppbmRleCBlYWI4NmU0Li4yMDU0ZDRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi93dXNiY29yZS93dXNiaGMuYworKysgYi9kcml2ZXJzL3VzYi93dXNiY29yZS93dXNiaGMuYwpAQCAtMjYsNyArMjYsNyBAQAogICogdGhlIG9uZSB0aGF0IHJlcXVpcmVzIChwaGFzZSBCLCB3dXNiaGNfYl97Y3JlYXRlLGRlc3Ryb3l9KS4KICAqCiAgKiBUaGlzIGlzIHNvIGJlY2F1c2UgdXNiX2FkZF9oY2QoKSB3aWxsIHN0YXJ0IHRoZSBIQywgYW5kIHRodXMsIGFsbAotICogdGhlIEhDIHNwZWNpZmljIHN0dWZmIGhhcyB0byBiZSBhbHJlYWR5IGluaXRpYWxpYXplZCAobGlrZSBzeXNmcworICogdGhlIEhDIHNwZWNpZmljIHN0dWZmIGhhcyB0byBiZSBhbHJlYWR5IGluaXRpYWxpemVkIChsaWtlIHN5c2ZzCiAgKiB0aGluZ2llcykuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL3dscC93c3MtbGMuYyBiL2RyaXZlcnMvdXdiL3dscC93c3MtbGMuYwppbmRleCA5MGFjY2RkLi5hMDA1ZDJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3V3Yi93bHAvd3NzLWxjLmMKKysrIGIvZHJpdmVycy91d2Ivd2xwL3dzcy1sYy5jCkBAIC0xODAsNyArMTgwLDcgQEAKICAqIElmIG1lbW9yeSB3YXMgYWxsb2NhdGVkIGZvciB0aGUga29iamVjdCdzIG5hbWUgdGhlbiBpdCB3aWxsCiAgKiBiZSBmcmVlZCBieSB0aGUga29iamVjdCBzeXN0ZW0gZHVyaW5nIHRoaXMgdGltZS4KICAqCi0gKiBUaGUgRURBIGNhY2hlIGlzIHJlbW92ZWQgYW5kIHJlaW5pdGlsaXplZCB3aGVuIHRoZSBXU1MgaXMgcmVtb3ZlZC4gV2UKKyAqIFRoZSBFREEgY2FjaGUgaXMgcmVtb3ZlZCBhbmQgcmVpbml0aWFsaXplZCB3aGVuIHRoZSBXU1MgaXMgcmVtb3ZlZC4gV2UKICAqIHRodXMgbG9vc2Uga25vd2xlZGdlIG9mIG1lbWJlcnMgb2YgdGhpcyBXU1MgYXQgdGhhdCB0aW1lIGFuZCBuZWVkIG5vdCBkbwogICogaXQgaGVyZS4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmMKaW5kZXggNTdhNTkzYy4uMjllODUwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC9uZXQuYworKysgYi9kcml2ZXJzL3Zob3N0L25ldC5jCkBAIC03NCw2ICs3NCwyMiBAQAogCX0KIAlyZXR1cm4gc2VnOwogfQorLyogQ29weSBpb3ZlYyBlbnRyaWVzIGZvciBsZW4gYnl0ZXMgZnJvbSBpb3ZlYy4gKi8KK3N0YXRpYyB2b2lkIGNvcHlfaW92ZWNfaGRyKGNvbnN0IHN0cnVjdCBpb3ZlYyAqZnJvbSwgc3RydWN0IGlvdmVjICp0bywKKwkJCSAgIHNpemVfdCBsZW4sIGludCBpb3Zjb3VudCkKK3sKKwlpbnQgc2VnID0gMDsKKwlzaXplX3Qgc2l6ZTsKKwl3aGlsZSAobGVuICYmIHNlZyA8IGlvdmNvdW50KSB7CisJCXNpemUgPSBtaW4oZnJvbS0+aW92X2xlbiwgbGVuKTsKKwkJdG8tPmlvdl9iYXNlID0gZnJvbS0+aW92X2Jhc2U7CisJCXRvLT5pb3ZfbGVuID0gc2l6ZTsKKwkJbGVuIC09IHNpemU7CisJCSsrZnJvbTsKKwkJKyt0bzsKKwkJKytzZWc7CisJfQorfQogCiAvKiBDYWxsZXIgbXVzdCBoYXZlIFRYIFZRIGxvY2sgKi8KIHN0YXRpYyB2b2lkIHR4X3BvbGxfc3RvcChzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQpCkBAIC0xMjksNyArMTQ1LDcgQEAKIAogCWlmICh3bWVtIDwgc29jay0+c2stPnNrX3NuZGJ1ZiAvIDIpCiAJCXR4X3BvbGxfc3RvcChuZXQpOwotCWhkcl9zaXplID0gdnEtPmhkcl9zaXplOworCWhkcl9zaXplID0gdnEtPnZob3N0X2hsZW47CiAKIAlmb3IgKDs7KSB7CiAJCWhlYWQgPSB2aG9zdF9nZXRfdnFfZGVzYygmbmV0LT5kZXYsIHZxLCB2cS0+aW92LApAQCAtMTcyLDEzICsxODgsMTMgQEAKIAkJLyogVE9ETzogQ2hlY2sgc3BlY2lmaWMgZXJyb3IgYW5kIGJvbWIgb3V0IHVubGVzcyBFTk9CVUZTPyAqLwogCQllcnIgPSBzb2NrLT5vcHMtPnNlbmRtc2coTlVMTCwgc29jaywgJm1zZywgbGVuKTsKIAkJaWYgKHVubGlrZWx5KGVyciA8IDApKSB7Ci0JCQl2aG9zdF9kaXNjYXJkX3ZxX2Rlc2ModnEpOworCQkJdmhvc3RfZGlzY2FyZF92cV9kZXNjKHZxLCAxKTsKIAkJCXR4X3BvbGxfc3RhcnQobmV0LCBzb2NrKTsKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChlcnIgIT0gbGVuKQotCQkJcHJfZXJyKCJUcnVuY2F0ZWQgVFggcGFja2V0OiAiCi0JCQkgICAgICAgIiBsZW4gJWQgIT0gJXpkXG4iLCBlcnIsIGxlbik7CisJCQlwcl9kZWJ1ZygiVHJ1bmNhdGVkIFRYIHBhY2tldDogIgorCQkJCSAiIGxlbiAlZCAhPSAlemRcbiIsIGVyciwgbGVuKTsKIAkJdmhvc3RfYWRkX3VzZWRfYW5kX3NpZ25hbCgmbmV0LT5kZXYsIHZxLCBoZWFkLCAwKTsKIAkJdG90YWxfbGVuICs9IGxlbjsKIAkJaWYgKHVubGlrZWx5KHRvdGFsX2xlbiA+PSBWSE9TVF9ORVRfV0VJR0hUKSkgewpAQCAtMTkxLDkgKzIwNyw4MiBAQAogCXVudXNlX21tKG5ldC0+ZGV2Lm1tKTsKIH0KIAorc3RhdGljIGludCBwZWVrX2hlYWRfbGVuKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqaGVhZDsKKwlpbnQgbGVuID0gMDsKKworCWxvY2tfc29jayhzayk7CisJaGVhZCA9IHNrYl9wZWVrKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CisJaWYgKGhlYWQpCisJCWxlbiA9IGhlYWQtPmxlbjsKKwlyZWxlYXNlX3NvY2soc2spOworCXJldHVybiBsZW47Cit9CisKKy8qIFRoaXMgaXMgYSBtdWx0aS1idWZmZXIgdmVyc2lvbiBvZiB2aG9zdF9nZXRfZGVzYywgdGhhdCB3b3JrcyBpZgorICoJdnEgaGFzIHJlYWQgZGVzY3JpcHRvcnMgb25seS4KKyAqIEB2cQkJLSB0aGUgcmVsZXZhbnQgdmlydHF1ZXVlCisgKiBAZGF0YWxlbgktIGRhdGEgbGVuZ3RoIHdlJ2xsIGJlIHJlYWRpbmcKKyAqIEBpb3Zjb3VudAktIHJldHVybmVkIGNvdW50IG9mIGlvIHZlY3RvcnMgd2UgZmlsbAorICogQGxvZwkJLSB2aG9zdCBsb2cKKyAqIEBsb2dfbnVtCS0gbG9nIG9mZnNldAorICoJcmV0dXJucyBudW1iZXIgb2YgYnVmZmVyIGhlYWRzIGFsbG9jYXRlZCwgbmVnYXRpdmUgb24gZXJyb3IKKyAqLworc3RhdGljIGludCBnZXRfcnhfYnVmcyhzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwKKwkJICAgICAgIHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLAorCQkgICAgICAgaW50IGRhdGFsZW4sCisJCSAgICAgICB1bnNpZ25lZCAqaW92Y291bnQsCisJCSAgICAgICBzdHJ1Y3Qgdmhvc3RfbG9nICpsb2csCisJCSAgICAgICB1bnNpZ25lZCAqbG9nX251bSkKK3sKKwl1bnNpZ25lZCBpbnQgb3V0LCBpbjsKKwlpbnQgc2VnID0gMDsKKwlpbnQgaGVhZGNvdW50ID0gMDsKKwl1bnNpZ25lZCBkOworCWludCByLCBubG9ncyA9IDA7CisKKwl3aGlsZSAoZGF0YWxlbiA+IDApIHsKKwkJaWYgKHVubGlrZWx5KGhlYWRjb3VudCA+PSBWSE9TVF9ORVRfTUFYX1NHKSkgeworCQkJciA9IC1FTk9CVUZTOworCQkJZ290byBlcnI7CisJCX0KKwkJZCA9IHZob3N0X2dldF92cV9kZXNjKHZxLT5kZXYsIHZxLCB2cS0+aW92ICsgc2VnLAorCQkJCSAgICAgIEFSUkFZX1NJWkUodnEtPmlvdikgLSBzZWcsICZvdXQsCisJCQkJICAgICAgJmluLCBsb2csIGxvZ19udW0pOworCQlpZiAoZCA9PSB2cS0+bnVtKSB7CisJCQlyID0gMDsKKwkJCWdvdG8gZXJyOworCQl9CisJCWlmICh1bmxpa2VseShvdXQgfHwgaW4gPD0gMCkpIHsKKwkJCXZxX2Vycih2cSwgInVuZXhwZWN0ZWQgZGVzY3JpcHRvciBmb3JtYXQgZm9yIFJYOiAiCisJCQkJIm91dCAlZCwgaW4gJWRcbiIsIG91dCwgaW4pOworCQkJciA9IC1FSU5WQUw7CisJCQlnb3RvIGVycjsKKwkJfQorCQlpZiAodW5saWtlbHkobG9nKSkgeworCQkJbmxvZ3MgKz0gKmxvZ19udW07CisJCQlsb2cgKz0gKmxvZ19udW07CisJCX0KKwkJaGVhZHNbaGVhZGNvdW50XS5pZCA9IGQ7CisJCWhlYWRzW2hlYWRjb3VudF0ubGVuID0gaW92X2xlbmd0aCh2cS0+aW92ICsgc2VnLCBpbik7CisJCWRhdGFsZW4gLT0gaGVhZHNbaGVhZGNvdW50XS5sZW47CisJCSsraGVhZGNvdW50OworCQlzZWcgKz0gaW47CisJfQorCWhlYWRzW2hlYWRjb3VudCAtIDFdLmxlbiArPSBkYXRhbGVuOworCSppb3Zjb3VudCA9IHNlZzsKKwlpZiAodW5saWtlbHkobG9nKSkKKwkJKmxvZ19udW0gPSBubG9nczsKKwlyZXR1cm4gaGVhZGNvdW50OworZXJyOgorCXZob3N0X2Rpc2NhcmRfdnFfZGVzYyh2cSwgaGVhZGNvdW50KTsKKwlyZXR1cm4gcjsKK30KKwogLyogRXhwZWN0cyB0byBiZSBhbHdheXMgcnVuIGZyb20gd29ya3F1ZXVlIC0gd2hpY2ggYWN0cyBhcwogICogcmVhZC1zaXplIGNyaXRpY2FsIHNlY3Rpb24gZm9yIG91ciBraW5kIG9mIFJDVS4gKi8KLXN0YXRpYyB2b2lkIGhhbmRsZV9yeChzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBoYW5kbGVfcnhfYmlnKHN0cnVjdCB2aG9zdF9uZXQgKm5ldCkKIHsKIAlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9ICZuZXQtPmRldi52cXNbVkhPU1RfTkVUX1ZRX1JYXTsKIAl1bnNpZ25lZCBvdXQsIGluLCBsb2csIHM7CkBAIC0yMjMsNyArMzEyLDcgQEAKIAl1c2VfbW0obmV0LT5kZXYubW0pOwogCW11dGV4X2xvY2soJnZxLT5tdXRleCk7CiAJdmhvc3RfZGlzYWJsZV9ub3RpZnkodnEpOwotCWhkcl9zaXplID0gdnEtPmhkcl9zaXplOworCWhkcl9zaXplID0gdnEtPnZob3N0X2hsZW47CiAKIAl2cV9sb2cgPSB1bmxpa2VseSh2aG9zdF9oYXNfZmVhdHVyZSgmbmV0LT5kZXYsIFZIT1NUX0ZfTE9HX0FMTCkpID8KIAkJdnEtPmxvZyA6IE5VTEw7CkBAIC0yNzAsMTQgKzM1OSwxNCBAQAogCQkJCQkgbGVuLCBNU0dfRE9OVFdBSVQgfCBNU0dfVFJVTkMpOwogCQkvKiBUT0RPOiBDaGVjayBzcGVjaWZpYyBlcnJvciBhbmQgYm9tYiBvdXQgdW5sZXNzIEVBR0FJTj8gKi8KIAkJaWYgKGVyciA8IDApIHsKLQkJCXZob3N0X2Rpc2NhcmRfdnFfZGVzYyh2cSk7CisJCQl2aG9zdF9kaXNjYXJkX3ZxX2Rlc2ModnEsIDEpOwogCQkJYnJlYWs7CiAJCX0KIAkJLyogVE9ETzogU2hvdWxkIGNoZWNrIGFuZCBoYW5kbGUgY2hlY2tzdW0uICovCiAJCWlmIChlcnIgPiBsZW4pIHsKLQkJCXByX2VycigiRGlzY2FyZGVkIHRydW5jYXRlZCByeCBwYWNrZXQ6ICIKLQkJCSAgICAgICAiIGxlbiAlZCA+ICV6ZFxuIiwgZXJyLCBsZW4pOwotCQkJdmhvc3RfZGlzY2FyZF92cV9kZXNjKHZxKTsKKwkJCXByX2RlYnVnKCJEaXNjYXJkZWQgdHJ1bmNhdGVkIHJ4IHBhY2tldDogIgorCQkJCSAiIGxlbiAlZCA+ICV6ZFxuIiwgZXJyLCBsZW4pOworCQkJdmhvc3RfZGlzY2FyZF92cV9kZXNjKHZxLCAxKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWxlbiA9IGVycjsKQEAgLTMwMiw1NCArMzkxLDE3NSBAQAogCXVudXNlX21tKG5ldC0+ZGV2Lm1tKTsKIH0KIAotc3RhdGljIHZvaWQgaGFuZGxlX3R4X2tpY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorLyogRXhwZWN0cyB0byBiZSBhbHdheXMgcnVuIGZyb20gd29ya3F1ZXVlIC0gd2hpY2ggYWN0cyBhcworICogcmVhZC1zaXplIGNyaXRpY2FsIHNlY3Rpb24gZm9yIG91ciBraW5kIG9mIFJDVS4gKi8KK3N0YXRpYyB2b2lkIGhhbmRsZV9yeF9tZXJnZWFibGUoc3RydWN0IHZob3N0X25ldCAqbmV0KQogewotCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxOwotCXN0cnVjdCB2aG9zdF9uZXQgKm5ldDsKLQl2cSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlLCBwb2xsLndvcmspOwotCW5ldCA9IGNvbnRhaW5lcl9vZih2cS0+ZGV2LCBzdHJ1Y3Qgdmhvc3RfbmV0LCBkZXYpOworCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gJm5ldC0+ZGV2LnZxc1tWSE9TVF9ORVRfVlFfUlhdOworCXVuc2lnbmVkIHVuaW5pdGlhbGl6ZWRfdmFyKGluKSwgbG9nOworCXN0cnVjdCB2aG9zdF9sb2cgKnZxX2xvZzsKKwlzdHJ1Y3QgbXNnaGRyIG1zZyA9IHsKKwkJLm1zZ19uYW1lID0gTlVMTCwKKwkJLm1zZ19uYW1lbGVuID0gMCwKKwkJLm1zZ19jb250cm9sID0gTlVMTCwgLyogRklYTUU6IGdldCBhbmQgaGFuZGxlIFJYIGF1eCBkYXRhLiAqLworCQkubXNnX2NvbnRyb2xsZW4gPSAwLAorCQkubXNnX2lvdiA9IHZxLT5pb3YsCisJCS5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQsCisJfTsKKworCXN0cnVjdCB2aXJ0aW9fbmV0X2hkcl9tcmdfcnhidWYgaGRyID0geworCQkuaGRyLmZsYWdzID0gMCwKKwkJLmhkci5nc29fdHlwZSA9IFZJUlRJT19ORVRfSERSX0dTT19OT05FCisJfTsKKworCXNpemVfdCB0b3RhbF9sZW4gPSAwOworCWludCBlcnIsIGhlYWRjb3VudDsKKwlzaXplX3Qgdmhvc3RfaGxlbiwgc29ja19obGVuOworCXNpemVfdCB2aG9zdF9sZW4sIHNvY2tfbGVuOworCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSByY3VfZGVyZWZlcmVuY2UodnEtPnByaXZhdGVfZGF0YSk7CisJaWYgKCFzb2NrIHx8IHNrYl9xdWV1ZV9lbXB0eSgmc29jay0+c2stPnNrX3JlY2VpdmVfcXVldWUpKQorCQlyZXR1cm47CisKKwl1c2VfbW0obmV0LT5kZXYubW0pOworCW11dGV4X2xvY2soJnZxLT5tdXRleCk7CisJdmhvc3RfZGlzYWJsZV9ub3RpZnkodnEpOworCXZob3N0X2hsZW4gPSB2cS0+dmhvc3RfaGxlbjsKKwlzb2NrX2hsZW4gPSB2cS0+c29ja19obGVuOworCisJdnFfbG9nID0gdW5saWtlbHkodmhvc3RfaGFzX2ZlYXR1cmUoJm5ldC0+ZGV2LCBWSE9TVF9GX0xPR19BTEwpKSA/CisJCXZxLT5sb2cgOiBOVUxMOworCisJd2hpbGUgKChzb2NrX2xlbiA9IHBlZWtfaGVhZF9sZW4oc29jay0+c2spKSkgeworCQlzb2NrX2xlbiArPSBzb2NrX2hsZW47CisJCXZob3N0X2xlbiA9IHNvY2tfbGVuICsgdmhvc3RfaGxlbjsKKwkJaGVhZGNvdW50ID0gZ2V0X3J4X2J1ZnModnEsIHZxLT5oZWFkcywgdmhvc3RfbGVuLAorCQkJCQkmaW4sIHZxX2xvZywgJmxvZyk7CisJCS8qIE9uIGVycm9yLCBzdG9wIGhhbmRsaW5nIHVudGlsIHRoZSBuZXh0IGtpY2suICovCisJCWlmICh1bmxpa2VseShoZWFkY291bnQgPCAwKSkKKwkJCWJyZWFrOworCQkvKiBPSywgbm93IHdlIG5lZWQgdG8ga25vdyBhYm91dCBhZGRlZCBkZXNjcmlwdG9ycy4gKi8KKwkJaWYgKCFoZWFkY291bnQpIHsKKwkJCWlmICh1bmxpa2VseSh2aG9zdF9lbmFibGVfbm90aWZ5KHZxKSkpIHsKKwkJCQkvKiBUaGV5IGhhdmUgc2xpcHBlZCBvbmUgaW4gYXMgd2Ugd2VyZQorCQkJCSAqIGRvaW5nIHRoYXQ6IGNoZWNrIGFnYWluLiAqLworCQkJCXZob3N0X2Rpc2FibGVfbm90aWZ5KHZxKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIE5vdGhpbmcgbmV3PyAgV2FpdCBmb3IgZXZlbnRmZCB0byB0ZWxsIHVzCisJCQkgKiB0aGV5IHJlZmlsbGVkLiAqLworCQkJYnJlYWs7CisJCX0KKwkJLyogV2UgZG9uJ3QgbmVlZCB0byBiZSBub3RpZmllZCBhZ2Fpbi4gKi8KKwkJaWYgKHVubGlrZWx5KCh2aG9zdF9obGVuKSkpCisJCQkvKiBTa2lwIGhlYWRlci4gVE9ETzogc3VwcG9ydCBUU08uICovCisJCQltb3ZlX2lvdmVjX2hkcih2cS0+aW92LCB2cS0+aGRyLCB2aG9zdF9obGVuLCBpbik7CisJCWVsc2UKKwkJCS8qIENvcHkgdGhlIGhlYWRlciBmb3IgdXNlIGluIFZJUlRJT19ORVRfRl9NUkdfUlhCVUY6CisJCQkgKiBuZWVkZWQgYmVjYXVzZSBzZW5kbXNnIGNhbiBtb2RpZnkgbXNnX2lvdi4gKi8KKwkJCWNvcHlfaW92ZWNfaGRyKHZxLT5pb3YsIHZxLT5oZHIsIHNvY2tfaGxlbiwgaW4pOworCQltc2cubXNnX2lvdmxlbiA9IGluOworCQllcnIgPSBzb2NrLT5vcHMtPnJlY3Ztc2coTlVMTCwgc29jaywgJm1zZywKKwkJCQkJIHNvY2tfbGVuLCBNU0dfRE9OVFdBSVQgfCBNU0dfVFJVTkMpOworCQkvKiBVc2Vyc3BhY2UgbWlnaHQgaGF2ZSBjb25zdW1lZCB0aGUgcGFja2V0IG1lYW53aGlsZToKKwkJICogaXQncyBub3Qgc3VwcG9zZWQgdG8gZG8gdGhpcyB1c3VhbGx5LCBidXQgbWlnaHQgYmUgaGFyZAorCQkgKiB0byBwcmV2ZW50LiBEaXNjYXJkIGRhdGEgd2UgZ290IChpZiBhbnkpIGFuZCBrZWVwIGdvaW5nLiAqLworCQlpZiAodW5saWtlbHkoZXJyICE9IHNvY2tfbGVuKSkgeworCQkJcHJfZGVidWcoIkRpc2NhcmRlZCByeCBwYWNrZXQ6ICIKKwkJCQkgIiBsZW4gJWQsIGV4cGVjdGVkICV6ZFxuIiwgZXJyLCBzb2NrX2xlbik7CisJCQl2aG9zdF9kaXNjYXJkX3ZxX2Rlc2ModnEsIGhlYWRjb3VudCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAodW5saWtlbHkodmhvc3RfaGxlbikgJiYKKwkJICAgIG1lbWNweV90b2lvdmVjZW5kKHZxLT5oZHIsICh1bnNpZ25lZCBjaGFyICopJmhkciwgMCwKKwkJCQkgICAgICB2aG9zdF9obGVuKSkgeworCQkJdnFfZXJyKHZxLCAiVW5hYmxlIHRvIHdyaXRlIHZuZXRfaGRyIGF0IGFkZHIgJXBcbiIsCisJCQkgICAgICAgdnEtPmlvdi0+aW92X2Jhc2UpOworCQkJYnJlYWs7CisJCX0KKwkJLyogVE9ETzogU2hvdWxkIGNoZWNrIGFuZCBoYW5kbGUgY2hlY2tzdW0uICovCisJCWlmICh2aG9zdF9oYXNfZmVhdHVyZSgmbmV0LT5kZXYsIFZJUlRJT19ORVRfRl9NUkdfUlhCVUYpICYmCisJCSAgICBtZW1jcHlfdG9pb3ZlY2VuZCh2cS0+aGRyLCAodW5zaWduZWQgY2hhciAqKSZoZWFkY291bnQsCisJCQkJICAgICAgb2Zmc2V0b2YodHlwZW9mKGhkciksIG51bV9idWZmZXJzKSwKKwkJCQkgICAgICBzaXplb2YgaGRyLm51bV9idWZmZXJzKSkgeworCQkJdnFfZXJyKHZxLCAiRmFpbGVkIG51bV9idWZmZXJzIHdyaXRlIik7CisJCQl2aG9zdF9kaXNjYXJkX3ZxX2Rlc2ModnEsIGhlYWRjb3VudCk7CisJCQlicmVhazsKKwkJfQorCQl2aG9zdF9hZGRfdXNlZF9hbmRfc2lnbmFsX24oJm5ldC0+ZGV2LCB2cSwgdnEtPmhlYWRzLAorCQkJCQkgICAgaGVhZGNvdW50KTsKKwkJaWYgKHVubGlrZWx5KHZxX2xvZykpCisJCQl2aG9zdF9sb2dfd3JpdGUodnEsIHZxX2xvZywgbG9nLCB2aG9zdF9sZW4pOworCQl0b3RhbF9sZW4gKz0gdmhvc3RfbGVuOworCQlpZiAodW5saWtlbHkodG90YWxfbGVuID49IFZIT1NUX05FVF9XRUlHSFQpKSB7CisJCQl2aG9zdF9wb2xsX3F1ZXVlKCZ2cS0+cG9sbCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmdnEtPm11dGV4KTsKKwl1bnVzZV9tbShuZXQtPmRldi5tbSk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9yeChzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQpCit7CisJaWYgKHZob3N0X2hhc19mZWF0dXJlKCZuZXQtPmRldiwgVklSVElPX05FVF9GX01SR19SWEJVRikpCisJCWhhbmRsZV9yeF9tZXJnZWFibGUobmV0KTsKKwllbHNlCisJCWhhbmRsZV9yeF9iaWcobmV0KTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3R4X2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspCit7CisJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSwKKwkJCQkJCSAgcG9sbC53b3JrKTsKKwlzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQgPSBjb250YWluZXJfb2YodnEtPmRldiwgc3RydWN0IHZob3N0X25ldCwgZGV2KTsKKwogCWhhbmRsZV90eChuZXQpOwogfQogCi1zdGF0aWMgdm9pZCBoYW5kbGVfcnhfa2ljayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgdm9pZCBoYW5kbGVfcnhfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaykKIHsKLQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTsKLQlzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQ7Ci0JdnEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSwgcG9sbC53b3JrKTsKLQluZXQgPSBjb250YWluZXJfb2YodnEtPmRldiwgc3RydWN0IHZob3N0X25ldCwgZGV2KTsKKwlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlLAorCQkJCQkJICBwb2xsLndvcmspOworCXN0cnVjdCB2aG9zdF9uZXQgKm5ldCA9IGNvbnRhaW5lcl9vZih2cS0+ZGV2LCBzdHJ1Y3Qgdmhvc3RfbmV0LCBkZXYpOworCiAJaGFuZGxlX3J4KG5ldCk7CiB9CiAKLXN0YXRpYyB2b2lkIGhhbmRsZV90eF9uZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHZvaWQgaGFuZGxlX3R4X25ldChzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaykKIHsKLQlzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQ7Ci0JbmV0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF9uZXQsIHBvbGxbVkhPU1RfTkVUX1ZRX1RYXS53b3JrKTsKKwlzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHZob3N0X25ldCwKKwkJCQkJICAgICBwb2xsW1ZIT1NUX05FVF9WUV9UWF0ud29yayk7CiAJaGFuZGxlX3R4KG5ldCk7CiB9CiAKLXN0YXRpYyB2b2lkIGhhbmRsZV9yeF9uZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHZvaWQgaGFuZGxlX3J4X25ldChzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaykKIHsKLQlzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQ7Ci0JbmV0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF9uZXQsIHBvbGxbVkhPU1RfTkVUX1ZRX1JYXS53b3JrKTsKKwlzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHZob3N0X25ldCwKKwkJCQkJICAgICBwb2xsW1ZIT1NUX05FVF9WUV9SWF0ud29yayk7CiAJaGFuZGxlX3J4KG5ldCk7CiB9CiAKIHN0YXRpYyBpbnQgdmhvc3RfbmV0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpCiB7CiAJc3RydWN0IHZob3N0X25ldCAqbiA9IGttYWxsb2Moc2l6ZW9mICpuLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXY7CiAJaW50IHI7CisKIAlpZiAoIW4pCiAJCXJldHVybiAtRU5PTUVNOworCisJZGV2ID0gJm4tPmRldjsKIAluLT52cXNbVkhPU1RfTkVUX1ZRX1RYXS5oYW5kbGVfa2ljayA9IGhhbmRsZV90eF9raWNrOwogCW4tPnZxc1tWSE9TVF9ORVRfVlFfUlhdLmhhbmRsZV9raWNrID0gaGFuZGxlX3J4X2tpY2s7Ci0JciA9IHZob3N0X2Rldl9pbml0KCZuLT5kZXYsIG4tPnZxcywgVkhPU1RfTkVUX1ZRX01BWCk7CisJciA9IHZob3N0X2Rldl9pbml0KGRldiwgbi0+dnFzLCBWSE9TVF9ORVRfVlFfTUFYKTsKIAlpZiAociA8IDApIHsKIAkJa2ZyZWUobik7CiAJCXJldHVybiByOwogCX0KIAotCXZob3N0X3BvbGxfaW5pdChuLT5wb2xsICsgVkhPU1RfTkVUX1ZRX1RYLCBoYW5kbGVfdHhfbmV0LCBQT0xMT1VUKTsKLQl2aG9zdF9wb2xsX2luaXQobi0+cG9sbCArIFZIT1NUX05FVF9WUV9SWCwgaGFuZGxlX3J4X25ldCwgUE9MTElOKTsKKwl2aG9zdF9wb2xsX2luaXQobi0+cG9sbCArIFZIT1NUX05FVF9WUV9UWCwgaGFuZGxlX3R4X25ldCwgUE9MTE9VVCwgZGV2KTsKKwl2aG9zdF9wb2xsX2luaXQobi0+cG9sbCArIFZIT1NUX05FVF9WUV9SWCwgaGFuZGxlX3J4X25ldCwgUE9MTElOLCBkZXYpOwogCW4tPnR4X3BvbGxfc3RhdGUgPSBWSE9TVF9ORVRfUE9MTF9ESVNBQkxFRDsKIAogCWYtPnByaXZhdGVfZGF0YSA9IG47CkBAIC01MjcsMTggKzczNywyMiBAQAogCiAJLyogc3RhcnQgcG9sbGluZyBuZXcgc29ja2V0ICovCiAJb2xkc29jayA9IHZxLT5wcml2YXRlX2RhdGE7Ci0JaWYgKHNvY2sgPT0gb2xkc29jaykKLQkJZ290byBkb25lOworCWlmIChzb2NrICE9IG9sZHNvY2spIHsKKyAgICAgICAgICAgICAgICB2aG9zdF9uZXRfZGlzYWJsZV92cShuLCB2cSk7CisgICAgICAgICAgICAgICAgcmN1X2Fzc2lnbl9wb2ludGVyKHZxLT5wcml2YXRlX2RhdGEsIHNvY2spOworICAgICAgICAgICAgICAgIHZob3N0X25ldF9lbmFibGVfdnEobiwgdnEpOworCX0KIAotCXZob3N0X25ldF9kaXNhYmxlX3ZxKG4sIHZxKTsKLQlyY3VfYXNzaWduX3BvaW50ZXIodnEtPnByaXZhdGVfZGF0YSwgc29jayk7Ci0Jdmhvc3RfbmV0X2VuYWJsZV92cShuLCB2cSk7Ci1kb25lOgorCW11dGV4X3VubG9jaygmdnEtPm11dGV4KTsKKwogCWlmIChvbGRzb2NrKSB7CiAJCXZob3N0X25ldF9mbHVzaF92cShuLCBpbmRleCk7CiAJCWZwdXQob2xkc29jay0+ZmlsZSk7CiAJfQogCisJbXV0ZXhfdW5sb2NrKCZuLT5kZXYubXV0ZXgpOworCXJldHVybiAwOworCiBlcnJfdnE6CiAJbXV0ZXhfdW5sb2NrKCZ2cS0+bXV0ZXgpOwogZXJyOgpAQCAtNTY5LDkgKzc4MywyMSBAQAogCiBzdGF0aWMgaW50IHZob3N0X25ldF9zZXRfZmVhdHVyZXMoc3RydWN0IHZob3N0X25ldCAqbiwgdTY0IGZlYXR1cmVzKQogewotCXNpemVfdCBoZHJfc2l6ZSA9IGZlYXR1cmVzICYgKDEgPDwgVkhPU1RfTkVUX0ZfVklSVElPX05FVF9IRFIpID8KLQkJc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fbmV0X2hkcikgOiAwOworCXNpemVfdCB2aG9zdF9obGVuLCBzb2NrX2hsZW4sIGhkcl9sZW47CiAJaW50IGk7CisKKwloZHJfbGVuID0gKGZlYXR1cmVzICYgKDEgPDwgVklSVElPX05FVF9GX01SR19SWEJVRikpID8KKwkJCXNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9oZHJfbXJnX3J4YnVmKSA6CisJCQlzaXplb2Yoc3RydWN0IHZpcnRpb19uZXRfaGRyKTsKKwlpZiAoZmVhdHVyZXMgJiAoMSA8PCBWSE9TVF9ORVRfRl9WSVJUSU9fTkVUX0hEUikpIHsKKwkJLyogdmhvc3QgcHJvdmlkZXMgdm5ldF9oZHIgKi8KKwkJdmhvc3RfaGxlbiA9IGhkcl9sZW47CisJCXNvY2tfaGxlbiA9IDA7CisJfSBlbHNlIHsKKwkJLyogc29ja2V0IHByb3ZpZGVzIHZuZXRfaGRyICovCisJCXZob3N0X2hsZW4gPSAwOworCQlzb2NrX2hsZW4gPSBoZHJfbGVuOworCX0KIAltdXRleF9sb2NrKCZuLT5kZXYubXV0ZXgpOwogCWlmICgoZmVhdHVyZXMgJiAoMSA8PCBWSE9TVF9GX0xPR19BTEwpKSAmJgogCSAgICAhdmhvc3RfbG9nX2FjY2Vzc19vaygmbi0+ZGV2KSkgewpAQCAtNTgyLDcgKzgwOCw4IEBACiAJc21wX3dtYigpOwogCWZvciAoaSA9IDA7IGkgPCBWSE9TVF9ORVRfVlFfTUFYOyArK2kpIHsKIAkJbXV0ZXhfbG9jaygmbi0+dnFzW2ldLm11dGV4KTsKLQkJbi0+dnFzW2ldLmhkcl9zaXplID0gaGRyX3NpemU7CisJCW4tPnZxc1tpXS52aG9zdF9obGVuID0gdmhvc3RfaGxlbjsKKwkJbi0+dnFzW2ldLnNvY2tfaGxlbiA9IHNvY2tfaGxlbjsKIAkJbXV0ZXhfdW5sb2NrKCZuLT52cXNbaV0ubXV0ZXgpOwogCX0KIAl2aG9zdF9uZXRfZmx1c2gobik7CkBAIC02MzQsNyArODYxLDcgQEAKIH0KICNlbmRpZgogCi1jb25zdCBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9uZXRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X25ldF9mb3BzID0gewogCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAogCS5yZWxlYXNlICAgICAgICA9IHZob3N0X25ldF9yZWxlYXNlLAogCS51bmxvY2tlZF9pb2N0bCA9IHZob3N0X25ldF9pb2N0bCwKQEAgLTY1MiwyNSArODc5LDEzIEBACiAKIHN0YXRpYyBpbnQgdmhvc3RfbmV0X2luaXQodm9pZCkKIHsKLQlpbnQgciA9IHZob3N0X2luaXQoKTsKLQlpZiAocikKLQkJZ290byBlcnJfaW5pdDsKLQlyID0gbWlzY19yZWdpc3Rlcigmdmhvc3RfbmV0X21pc2MpOwotCWlmIChyKQotCQlnb3RvIGVycl9yZWc7Ci0JcmV0dXJuIDA7Ci1lcnJfcmVnOgotCXZob3N0X2NsZWFudXAoKTsKLWVycl9pbml0OgotCXJldHVybiByOwotCisJcmV0dXJuIG1pc2NfcmVnaXN0ZXIoJnZob3N0X25ldF9taXNjKTsKIH0KIG1vZHVsZV9pbml0KHZob3N0X25ldF9pbml0KTsKIAogc3RhdGljIHZvaWQgdmhvc3RfbmV0X2V4aXQodm9pZCkKIHsKIAltaXNjX2RlcmVnaXN0ZXIoJnZob3N0X25ldF9taXNjKTsKLQl2aG9zdF9jbGVhbnVwKCk7CiB9CiBtb2R1bGVfZXhpdCh2aG9zdF9uZXRfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYwppbmRleCAwYjk5NzgzLi5lMDU1NTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmMKKysrIGIvZHJpdmVycy92aG9zdC92aG9zdC5jCkBAIC0xNywxMiArMTcsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jZ3JvdXAuaD4KIAogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3BhY2tldC5oPgpAQCAtMzcsOCArMzgsNiBAQAogCVZIT1NUX01FTU9SWV9GX0xPRyA9IDB4MSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqdmhvc3Rfd29ya3F1ZXVlOwotCiBzdGF0aWMgdm9pZCB2aG9zdF9wb2xsX2Z1bmMoc3RydWN0IGZpbGUgKmZpbGUsIHdhaXRfcXVldWVfaGVhZF90ICp3cWgsCiAJCQkgICAgcG9sbF90YWJsZSAqcHQpCiB7CkBAIC01MiwyMyArNTEsMzEgQEAKIHN0YXRpYyBpbnQgdmhvc3RfcG9sbF93YWtldXAod2FpdF9xdWV1ZV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywKIAkJCSAgICAgdm9pZCAqa2V5KQogewotCXN0cnVjdCB2aG9zdF9wb2xsICpwb2xsOwotCXBvbGwgPSBjb250YWluZXJfb2Yod2FpdCwgc3RydWN0IHZob3N0X3BvbGwsIHdhaXQpOworCXN0cnVjdCB2aG9zdF9wb2xsICpwb2xsID0gY29udGFpbmVyX29mKHdhaXQsIHN0cnVjdCB2aG9zdF9wb2xsLCB3YWl0KTsKKwogCWlmICghKCh1bnNpZ25lZCBsb25nKWtleSAmIHBvbGwtPm1hc2spKQogCQlyZXR1cm4gMDsKIAotCXF1ZXVlX3dvcmsodmhvc3Rfd29ya3F1ZXVlLCAmcG9sbC0+d29yayk7CisJdmhvc3RfcG9sbF9xdWV1ZShwb2xsKTsKIAlyZXR1cm4gMDsKIH0KIAogLyogSW5pdCBwb2xsIHN0cnVjdHVyZSAqLwotdm9pZCB2aG9zdF9wb2xsX2luaXQoc3RydWN0IHZob3N0X3BvbGwgKnBvbGwsIHdvcmtfZnVuY190IGZ1bmMsCi0JCSAgICAgdW5zaWduZWQgbG9uZyBtYXNrKQordm9pZCB2aG9zdF9wb2xsX2luaXQoc3RydWN0IHZob3N0X3BvbGwgKnBvbGwsIHZob3N0X3dvcmtfZm5fdCBmbiwKKwkJICAgICB1bnNpZ25lZCBsb25nIG1hc2ssIHN0cnVjdCB2aG9zdF9kZXYgKmRldikKIHsKLQlJTklUX1dPUksoJnBvbGwtPndvcmssIGZ1bmMpOworCXN0cnVjdCB2aG9zdF93b3JrICp3b3JrID0gJnBvbGwtPndvcms7CisKIAlpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5KCZwb2xsLT53YWl0LCB2aG9zdF9wb2xsX3dha2V1cCk7CiAJaW5pdF9wb2xsX2Z1bmNwdHIoJnBvbGwtPnRhYmxlLCB2aG9zdF9wb2xsX2Z1bmMpOwogCXBvbGwtPm1hc2sgPSBtYXNrOworCXBvbGwtPmRldiA9IGRldjsKKworCUlOSVRfTElTVF9IRUFEKCZ3b3JrLT5ub2RlKTsKKwl3b3JrLT5mbiA9IGZuOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJndvcmstPmRvbmUpOworCXdvcmstPmZsdXNoaW5nID0gMDsKKwl3b3JrLT5xdWV1ZV9zZXEgPSB3b3JrLT5kb25lX3NlcSA9IDA7CiB9CiAKIC8qIFN0YXJ0IHBvbGxpbmcgYSBmaWxlLiBXZSBhZGQgb3Vyc2VsdmVzIHRvIGZpbGUncyB3YWl0IHF1ZXVlLiBUaGUgY2FsbGVyIG11c3QKQEAgLTkyLDEyICs5OSw0MCBAQAogICogbG9ja3MgdGhhdCBhcmUgYWxzbyB1c2VkIGJ5IHRoZSBjYWxsYmFjay4gKi8KIHZvaWQgdmhvc3RfcG9sbF9mbHVzaChzdHJ1Y3Qgdmhvc3RfcG9sbCAqcG9sbCkKIHsKLQlmbHVzaF93b3JrKCZwb2xsLT53b3JrKTsKKwlzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yayA9ICZwb2xsLT53b3JrOworCXVuc2lnbmVkIHNlcTsKKwlpbnQgbGVmdDsKKwlpbnQgZmx1c2hpbmc7CisKKwlzcGluX2xvY2tfaXJxKCZwb2xsLT5kZXYtPndvcmtfbG9jayk7CisJc2VxID0gd29yay0+cXVldWVfc2VxOworCXdvcmstPmZsdXNoaW5nKys7CisJc3Bpbl91bmxvY2tfaXJxKCZwb2xsLT5kZXYtPndvcmtfbG9jayk7CisJd2FpdF9ldmVudCh3b3JrLT5kb25lLCAoeworCQkgICBzcGluX2xvY2tfaXJxKCZwb2xsLT5kZXYtPndvcmtfbG9jayk7CisJCSAgIGxlZnQgPSBzZXEgLSB3b3JrLT5kb25lX3NlcSA8PSAwOworCQkgICBzcGluX3VubG9ja19pcnEoJnBvbGwtPmRldi0+d29ya19sb2NrKTsKKwkJICAgbGVmdDsKKwl9KSk7CisJc3Bpbl9sb2NrX2lycSgmcG9sbC0+ZGV2LT53b3JrX2xvY2spOworCWZsdXNoaW5nID0gLS13b3JrLT5mbHVzaGluZzsKKwlzcGluX3VubG9ja19pcnEoJnBvbGwtPmRldi0+d29ya19sb2NrKTsKKwlCVUdfT04oZmx1c2hpbmcgPCAwKTsKIH0KIAogdm9pZCB2aG9zdF9wb2xsX3F1ZXVlKHN0cnVjdCB2aG9zdF9wb2xsICpwb2xsKQogewotCXF1ZXVlX3dvcmsodmhvc3Rfd29ya3F1ZXVlLCAmcG9sbC0+d29yayk7CisJc3RydWN0IHZob3N0X2RldiAqZGV2ID0gcG9sbC0+ZGV2OworCXN0cnVjdCB2aG9zdF93b3JrICp3b3JrID0gJnBvbGwtPndvcms7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPndvcmtfbG9jaywgZmxhZ3MpOworCWlmIChsaXN0X2VtcHR5KCZ3b3JrLT5ub2RlKSkgeworCQlsaXN0X2FkZF90YWlsKCZ3b3JrLT5ub2RlLCAmZGV2LT53b3JrX2xpc3QpOworCQl3b3JrLT5xdWV1ZV9zZXErKzsKKwkJd2FrZV91cF9wcm9jZXNzKGRldi0+d29ya2VyKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT53b3JrX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgdmhvc3RfdnFfcmVzZXQoc3RydWN0IHZob3N0X2RldiAqZGV2LApAQCAtMTE0LDcgKzE0OSw4IEBACiAJdnEtPnVzZWRfZmxhZ3MgPSAwOwogCXZxLT5sb2dfdXNlZCA9IGZhbHNlOwogCXZxLT5sb2dfYWRkciA9IC0xdWxsOwotCXZxLT5oZHJfc2l6ZSA9IDA7CisJdnEtPnZob3N0X2hsZW4gPSAwOworCXZxLT5zb2NrX2hsZW4gPSAwOwogCXZxLT5wcml2YXRlX2RhdGEgPSBOVUxMOwogCXZxLT5sb2dfYmFzZSA9IE5VTEw7CiAJdnEtPmVycm9yX2N0eCA9IE5VTEw7CkBAIC0xMjUsMTAgKzE2MSw1MSBAQAogCXZxLT5sb2dfY3R4ID0gTlVMTDsKIH0KIAorc3RhdGljIGludCB2aG9zdF93b3JrZXIodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYgPSBkYXRhOworCXN0cnVjdCB2aG9zdF93b3JrICp3b3JrID0gTlVMTDsKKwl1bnNpZ25lZCB1bmluaXRpYWxpemVkX3ZhcihzZXEpOworCisJZm9yICg7OykgeworCQkvKiBtYiBwYWlyZWQgdy8ga3RocmVhZF9zdG9wICovCisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisKKwkJc3Bpbl9sb2NrX2lycSgmZGV2LT53b3JrX2xvY2spOworCQlpZiAod29yaykgeworCQkJd29yay0+ZG9uZV9zZXEgPSBzZXE7CisJCQlpZiAod29yay0+Zmx1c2hpbmcpCisJCQkJd2FrZV91cF9hbGwoJndvcmstPmRvbmUpOworCQl9CisKKwkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPndvcmtfbG9jayk7CisJCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAoIWxpc3RfZW1wdHkoJmRldi0+d29ya19saXN0KSkgeworCQkJd29yayA9IGxpc3RfZmlyc3RfZW50cnkoJmRldi0+d29ya19saXN0LAorCQkJCQkJc3RydWN0IHZob3N0X3dvcmssIG5vZGUpOworCQkJbGlzdF9kZWxfaW5pdCgmd29yay0+bm9kZSk7CisJCQlzZXEgPSB3b3JrLT5xdWV1ZV9zZXE7CisJCX0gZWxzZQorCQkJd29yayA9IE5VTEw7CisJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT53b3JrX2xvY2spOworCisJCWlmICh3b3JrKSB7CisJCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCQl3b3JrLT5mbih3b3JrKTsKKwkJfSBlbHNlCisJCQlzY2hlZHVsZSgpOworCisJfQorfQorCiBsb25nIHZob3N0X2Rldl9pbml0KHN0cnVjdCB2aG9zdF9kZXYgKmRldiwKIAkJICAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxcywgaW50IG52cXMpCiB7CiAJaW50IGk7CisKIAlkZXYtPnZxcyA9IHZxczsKIAlkZXYtPm52cXMgPSBudnFzOwogCW11dGV4X2luaXQoJmRldi0+bXV0ZXgpOwpAQCAtMTM2LDYgKzIxMyw5IEBACiAJZGV2LT5sb2dfZmlsZSA9IE5VTEw7CiAJZGV2LT5tZW1vcnkgPSBOVUxMOwogCWRldi0+bW0gPSBOVUxMOworCXNwaW5fbG9ja19pbml0KCZkZXYtPndvcmtfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+d29ya19saXN0KTsKKwlkZXYtPndvcmtlciA9IE5VTEw7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udnFzOyArK2kpIHsKIAkJZGV2LT52cXNbaV0uZGV2ID0gZGV2OwpAQCAtMTQzLDkgKzIyMyw5IEBACiAJCXZob3N0X3ZxX3Jlc2V0KGRldiwgZGV2LT52cXMgKyBpKTsKIAkJaWYgKGRldi0+dnFzW2ldLmhhbmRsZV9raWNrKQogCQkJdmhvc3RfcG9sbF9pbml0KCZkZXYtPnZxc1tpXS5wb2xsLAotCQkJCQlkZXYtPnZxc1tpXS5oYW5kbGVfa2ljaywKLQkJCQkJUE9MTElOKTsKKwkJCQkJZGV2LT52cXNbaV0uaGFuZGxlX2tpY2ssIFBPTExJTiwgZGV2KTsKIAl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTU5LDEyICsyMzksMzYgQEAKIC8qIENhbGxlciBzaG91bGQgaGF2ZSBkZXZpY2UgbXV0ZXggKi8KIHN0YXRpYyBsb25nIHZob3N0X2Rldl9zZXRfb3duZXIoc3RydWN0IHZob3N0X2RldiAqZGV2KQogeworCXN0cnVjdCB0YXNrX3N0cnVjdCAqd29ya2VyOworCWludCBlcnI7CiAJLyogSXMgdGhlcmUgYW4gb3duZXIgYWxyZWFkeT8gKi8KLQlpZiAoZGV2LT5tbSkKLQkJcmV0dXJuIC1FQlVTWTsKKwlpZiAoZGV2LT5tbSkgeworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXJyX21tOworCX0KIAkvKiBObyBvd25lciwgYmVjb21lIG9uZSAqLwogCWRldi0+bW0gPSBnZXRfdGFza19tbShjdXJyZW50KTsKKwl3b3JrZXIgPSBrdGhyZWFkX2NyZWF0ZSh2aG9zdF93b3JrZXIsIGRldiwgInZob3N0LSVkIiwgY3VycmVudC0+cGlkKTsKKwlpZiAoSVNfRVJSKHdvcmtlcikpIHsKKwkJZXJyID0gUFRSX0VSUih3b3JrZXIpOworCQlnb3RvIGVycl93b3JrZXI7CisJfQorCisJZGV2LT53b3JrZXIgPSB3b3JrZXI7CisJZXJyID0gY2dyb3VwX2F0dGFjaF90YXNrX2N1cnJlbnRfY2cod29ya2VyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9jZ3JvdXA7CisJd2FrZV91cF9wcm9jZXNzKHdvcmtlcik7CS8qIGF2b2lkIGNvbnRyaWJ1dGluZyB0byBsb2FkYXZnICovCisKIAlyZXR1cm4gMDsKK2Vycl9jZ3JvdXA6CisJa3RocmVhZF9zdG9wKHdvcmtlcik7CitlcnJfd29ya2VyOgorCWlmIChkZXYtPm1tKQorCQltbXB1dChkZXYtPm1tKTsKKwlkZXYtPm1tID0gTlVMTDsKK2Vycl9tbToKKwlyZXR1cm4gZXJyOwogfQogCiAvKiBDYWxsZXIgc2hvdWxkIGhhdmUgZGV2aWNlIG11dGV4ICovCkBAIC0yMTcsNiArMzIxLDkgQEAKIAlpZiAoZGV2LT5tbSkKIAkJbW1wdXQoZGV2LT5tbSk7CiAJZGV2LT5tbSA9IE5VTEw7CisKKwlXQVJOX09OKCFsaXN0X2VtcHR5KCZkZXYtPndvcmtfbGlzdCkpOworCWt0aHJlYWRfc3RvcChkZXYtPndvcmtlcik7CiB9CiAKIHN0YXRpYyBpbnQgbG9nX2FjY2Vzc19vayh2b2lkIF9fdXNlciAqbG9nX2Jhc2UsIHU2NCBhZGRyLCB1bnNpZ25lZCBsb25nIHN6KQpAQCAtMjM3LDggKzM0NCw4IEBACiB7CiAJaW50IGk7CiAKLSAgICAgICAgaWYgKCFtZW0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7CisJaWYgKCFtZW0pCisJCXJldHVybiAwOwogCiAJZm9yIChpID0gMDsgaSA8IG1lbS0+bnJlZ2lvbnM7ICsraSkgewogCQlzdHJ1Y3Qgdmhvc3RfbWVtb3J5X3JlZ2lvbiAqbSA9IG1lbS0+cmVnaW9ucyArIGk7CkBAIC05OTUsOSArMTEwMiw5IEBACiB9CiAKIC8qIFJldmVyc2UgdGhlIGVmZmVjdCBvZiB2aG9zdF9nZXRfdnFfZGVzYy4gVXNlZnVsIGZvciBlcnJvciBoYW5kbGluZy4gKi8KLXZvaWQgdmhvc3RfZGlzY2FyZF92cV9kZXNjKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKQordm9pZCB2aG9zdF9kaXNjYXJkX3ZxX2Rlc2Moc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIGludCBuKQogewotCXZxLT5sYXN0X2F2YWlsX2lkeC0tOworCXZxLT5sYXN0X2F2YWlsX2lkeCAtPSBuOwogfQogCiAvKiBBZnRlciB3ZSd2ZSB1c2VkIG9uZSBvZiB0aGVpciBidWZmZXJzLCB3ZSB0ZWxsIHRoZW0gYWJvdXQgaXQuICBXZSdsbCB0aGVuCkBAIC0xMDQyLDYgKzExNDksNjcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBfX3Zob3N0X2FkZF91c2VkX24oc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsCisJCQkgICAgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsCisJCQkgICAgdW5zaWduZWQgY291bnQpCit7CisJc3RydWN0IHZyaW5nX3VzZWRfZWxlbSBfX3VzZXIgKnVzZWQ7CisJaW50IHN0YXJ0OworCisJc3RhcnQgPSB2cS0+bGFzdF91c2VkX2lkeCAlIHZxLT5udW07CisJdXNlZCA9IHZxLT51c2VkLT5yaW5nICsgc3RhcnQ7CisJaWYgKGNvcHlfdG9fdXNlcih1c2VkLCBoZWFkcywgY291bnQgKiBzaXplb2YgKnVzZWQpKSB7CisJCXZxX2Vycih2cSwgIkZhaWxlZCB0byB3cml0ZSB1c2VkIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAodW5saWtlbHkodnEtPmxvZ191c2VkKSkgeworCQkvKiBNYWtlIHN1cmUgZGF0YSBpcyBzZWVuIGJlZm9yZSBsb2cuICovCisJCXNtcF93bWIoKTsKKwkJLyogTG9nIHVzZWQgcmluZyBlbnRyeSB3cml0ZS4gKi8KKwkJbG9nX3dyaXRlKHZxLT5sb2dfYmFzZSwKKwkJCSAgdnEtPmxvZ19hZGRyICsKKwkJCSAgICgodm9pZCBfX3VzZXIgKil1c2VkIC0gKHZvaWQgX191c2VyICopdnEtPnVzZWQpLAorCQkJICBjb3VudCAqIHNpemVvZiAqdXNlZCk7CisJfQorCXZxLT5sYXN0X3VzZWRfaWR4ICs9IGNvdW50OworCXJldHVybiAwOworfQorCisvKiBBZnRlciB3ZSd2ZSB1c2VkIG9uZSBvZiB0aGVpciBidWZmZXJzLCB3ZSB0ZWxsIHRoZW0gYWJvdXQgaXQuICBXZSdsbCB0aGVuCisgKiB3YW50IHRvIG5vdGlmeSB0aGUgZ3Vlc3QsIHVzaW5nIGV2ZW50ZmQuICovCitpbnQgdmhvc3RfYWRkX3VzZWRfbihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsCisJCSAgICAgdW5zaWduZWQgY291bnQpCit7CisJaW50IHN0YXJ0LCBuLCByOworCisJc3RhcnQgPSB2cS0+bGFzdF91c2VkX2lkeCAlIHZxLT5udW07CisJbiA9IHZxLT5udW0gLSBzdGFydDsKKwlpZiAobiA8IGNvdW50KSB7CisJCXIgPSBfX3Zob3N0X2FkZF91c2VkX24odnEsIGhlYWRzLCBuKTsKKwkJaWYgKHIgPCAwKQorCQkJcmV0dXJuIHI7CisJCWhlYWRzICs9IG47CisJCWNvdW50IC09IG47CisJfQorCXIgPSBfX3Zob3N0X2FkZF91c2VkX24odnEsIGhlYWRzLCBjb3VudCk7CisKKwkvKiBNYWtlIHN1cmUgYnVmZmVyIGlzIHdyaXR0ZW4gYmVmb3JlIHdlIHVwZGF0ZSBpbmRleC4gKi8KKwlzbXBfd21iKCk7CisJaWYgKHB1dF91c2VyKHZxLT5sYXN0X3VzZWRfaWR4LCAmdnEtPnVzZWQtPmlkeCkpIHsKKwkJdnFfZXJyKHZxLCAiRmFpbGVkIHRvIGluY3JlbWVudCB1c2VkIGlkeCIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKHVubGlrZWx5KHZxLT5sb2dfdXNlZCkpIHsKKwkJLyogTG9nIHVzZWQgaW5kZXggdXBkYXRlLiAqLworCQlsb2dfd3JpdGUodnEtPmxvZ19iYXNlLAorCQkJICB2cS0+bG9nX2FkZHIgKyBvZmZzZXRvZihzdHJ1Y3QgdnJpbmdfdXNlZCwgaWR4KSwKKwkJCSAgc2l6ZW9mIHZxLT51c2VkLT5pZHgpOworCQlpZiAodnEtPmxvZ19jdHgpCisJCQlldmVudGZkX3NpZ25hbCh2cS0+bG9nX2N0eCwgMSk7CisJfQorCXJldHVybiByOworfQorCiAvKiBUaGlzIGFjdHVhbGx5IHNpZ25hbHMgdGhlIGd1ZXN0LCB1c2luZyBldmVudGZkLiAqLwogdm9pZCB2aG9zdF9zaWduYWwoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkKIHsKQEAgLTEwNzYsNiArMTI0NCwxNSBAQAogCXZob3N0X3NpZ25hbChkZXYsIHZxKTsKIH0KIAorLyogbXVsdGktYnVmZmVyIHZlcnNpb24gb2Ygdmhvc3RfYWRkX3VzZWRfYW5kX3NpZ25hbCAqLwordm9pZCB2aG9zdF9hZGRfdXNlZF9hbmRfc2lnbmFsX24oc3RydWN0IHZob3N0X2RldiAqZGV2LAorCQkJCSBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwKKwkJCQkgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsIHVuc2lnbmVkIGNvdW50KQoreworCXZob3N0X2FkZF91c2VkX24odnEsIGhlYWRzLCBjb3VudCk7CisJdmhvc3Rfc2lnbmFsKGRldiwgdnEpOworfQorCiAvKiBPSywgbm93IHdlIG5lZWQgdG8ga25vdyBhYm91dCBhZGRlZCBkZXNjcmlwdG9ycy4gKi8KIGJvb2wgdmhvc3RfZW5hYmxlX25vdGlmeShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkKIHsKQEAgLTExMDAsNyArMTI3Nyw3IEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlyZXR1cm4gYXZhaWxfaWR4ICE9IHZxLT5sYXN0X2F2YWlsX2lkeDsKKwlyZXR1cm4gYXZhaWxfaWR4ICE9IHZxLT5hdmFpbF9pZHg7CiB9CiAKIC8qIFdlIGRvbid0IG5lZWQgdG8gYmUgbm90aWZpZWQgYWdhaW4uICovCkBAIC0xMTE1LDE2ICsxMjkyLDMgQEAKIAkJdnFfZXJyKHZxLCAiRmFpbGVkIHRvIGVuYWJsZSBub3RpZmljYXRpb24gYXQgJXA6ICVkXG4iLAogCQkgICAgICAgJnZxLT51c2VkLT5mbGFncywgcik7CiB9Ci0KLWludCB2aG9zdF9pbml0KHZvaWQpCi17Ci0Jdmhvc3Rfd29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoInZob3N0Iik7Ci0JaWYgKCF2aG9zdF93b3JrcXVldWUpCi0JCXJldHVybiAtRU5PTUVNOwotCXJldHVybiAwOwotfQotCi12b2lkIHZob3N0X2NsZWFudXAodm9pZCkKLXsKLQlkZXN0cm95X3dvcmtxdWV1ZSh2aG9zdF93b3JrcXVldWUpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5oIGIvZHJpdmVycy92aG9zdC92aG9zdC5oCmluZGV4IDExZWUxM2QuLmFmZDc3MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaAorKysgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmgKQEAgLTUsMTMgKzUsMTMgQEAKICNpbmNsdWRlIDxsaW51eC92aG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fcmluZy5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogc3RydWN0IHZob3N0X2RldmljZTsKIApAQCAtMjAsMTkgKzIwLDMxIEBACiAJVkhPU1RfTkVUX01BWF9TRyA9IE1BWF9TS0JfRlJBR1MgKyAyLAogfTsKIAorc3RydWN0IHZob3N0X3dvcms7Cit0eXBlZGVmIHZvaWQgKCp2aG9zdF93b3JrX2ZuX3QpKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKTsKKworc3RydWN0IHZob3N0X3dvcmsgeworCXN0cnVjdCBsaXN0X2hlYWQJICBub2RlOworCXZob3N0X3dvcmtfZm5fdAkJICBmbjsKKwl3YWl0X3F1ZXVlX2hlYWRfdAkgIGRvbmU7CisJaW50CQkJICBmbHVzaGluZzsKKwl1bnNpZ25lZAkJICBxdWV1ZV9zZXE7CisJdW5zaWduZWQJCSAgZG9uZV9zZXE7Cit9OworCiAvKiBQb2xsIGEgZmlsZSAoZXZlbnRmZCBvciBzb2NrZXQpICovCiAvKiBOb3RlOiB0aGVyZSdzIG5vdGhpbmcgdmhvc3Qgc3BlY2lmaWMgYWJvdXQgdGhpcyBzdHJ1Y3R1cmUuICovCiBzdHJ1Y3Qgdmhvc3RfcG9sbCB7CiAJcG9sbF90YWJsZSAgICAgICAgICAgICAgICB0YWJsZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICAgKndxaDsKIAl3YWl0X3F1ZXVlX3QgICAgICAgICAgICAgIHdhaXQ7Ci0JLyogc3RydWN0IHdoaWNoIHdpbGwgaGFuZGxlIGFsbCBhY3R1YWwgd29yay4gKi8KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICAgIHdvcms7CisJc3RydWN0IHZob3N0X3dvcmsJICB3b3JrOwogCXVuc2lnbmVkIGxvbmcJCSAgbWFzazsKKwlzdHJ1Y3Qgdmhvc3RfZGV2CSAqZGV2OwogfTsKIAotdm9pZCB2aG9zdF9wb2xsX2luaXQoc3RydWN0IHZob3N0X3BvbGwgKnBvbGwsIHdvcmtfZnVuY190IGZ1bmMsCi0JCSAgICAgdW5zaWduZWQgbG9uZyBtYXNrKTsKK3ZvaWQgdmhvc3RfcG9sbF9pbml0KHN0cnVjdCB2aG9zdF9wb2xsICpwb2xsLCB2aG9zdF93b3JrX2ZuX3QgZm4sCisJCSAgICAgdW5zaWduZWQgbG9uZyBtYXNrLCBzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpOwogdm9pZCB2aG9zdF9wb2xsX3N0YXJ0KHN0cnVjdCB2aG9zdF9wb2xsICpwb2xsLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiB2b2lkIHZob3N0X3BvbGxfc3RvcChzdHJ1Y3Qgdmhvc3RfcG9sbCAqcG9sbCk7CiB2b2lkIHZob3N0X3BvbGxfZmx1c2goc3RydWN0IHZob3N0X3BvbGwgKnBvbGwpOwpAQCAtNjMsNyArNzUsNyBAQAogCXN0cnVjdCB2aG9zdF9wb2xsIHBvbGw7CiAKIAkvKiBUaGUgcm91dGluZSB0byBjYWxsIHdoZW4gdGhlIEd1ZXN0IHBpbmdzIHVzLCBvciB0aW1lb3V0LiAqLwotCXdvcmtfZnVuY190IGhhbmRsZV9raWNrOworCXZob3N0X3dvcmtfZm5fdCBoYW5kbGVfa2ljazsKIAogCS8qIExhc3QgYXZhaWxhYmxlIGluZGV4IHdlIHNhdy4gKi8KIAl1MTYgbGFzdF9hdmFpbF9pZHg7CkBAIC04NCwxMyArOTYsMTUgQEAKIAlzdHJ1Y3QgaW92ZWMgaW5kaXJlY3RbVkhPU1RfTkVUX01BWF9TR107CiAJc3RydWN0IGlvdmVjIGlvdltWSE9TVF9ORVRfTUFYX1NHXTsKIAlzdHJ1Y3QgaW92ZWMgaGRyW1ZIT1NUX05FVF9NQVhfU0ddOwotCXNpemVfdCBoZHJfc2l6ZTsKKwlzaXplX3Qgdmhvc3RfaGxlbjsKKwlzaXplX3Qgc29ja19obGVuOworCXN0cnVjdCB2cmluZ191c2VkX2VsZW0gaGVhZHNbVkhPU1RfTkVUX01BWF9TR107CiAJLyogV2UgdXNlIGEga2luZCBvZiBSQ1UgdG8gYWNjZXNzIHByaXZhdGUgcG9pbnRlci4KLQkgKiBBbGwgcmVhZGVycyBhY2Nlc3MgaXQgZnJvbSB3b3JrcXVldWUsIHdoaWNoIG1ha2VzIGl0IHBvc3NpYmxlIHRvCi0JICogZmx1c2ggdGhlIHdvcmtxdWV1ZSBpbnN0ZWFkIG9mIHN5bmNocm9uaXplX3JjdS4gVGhlcmVmb3JlIHJlYWRlcnMgZG8KKwkgKiBBbGwgcmVhZGVycyBhY2Nlc3MgaXQgZnJvbSB3b3JrZXIsIHdoaWNoIG1ha2VzIGl0IHBvc3NpYmxlIHRvCisJICogZmx1c2ggdGhlIHZob3N0X3dvcmsgaW5zdGVhZCBvZiBzeW5jaHJvbml6ZV9yY3UuIFRoZXJlZm9yZSByZWFkZXJzIGRvCiAJICogbm90IG5lZWQgdG8gY2FsbCByY3VfcmVhZF9sb2NrL3JjdV9yZWFkX3VubG9jazogdGhlIGJlZ2lubmluZyBvZgotCSAqIHdvcmsgaXRlbSBleGVjdXRpb24gYWN0cyBpbnN0ZWFkIG9mIHJjdV9yZWFkX2xvY2soKSBhbmQgdGhlIGVuZCBvZgotCSAqIHdvcmsgaXRlbSBleGVjdXRpb24gYWN0cyBpbnN0ZWFkIG9mIHJjdV9yZWFkX2xvY2soKS4KKwkgKiB2aG9zdF93b3JrIGV4ZWN1dGlvbiBhY3RzIGluc3RlYWQgb2YgcmN1X3JlYWRfbG9jaygpIGFuZCB0aGUgZW5kIG9mCisJICogdmhvc3Rfd29yayBleGVjdXRpb24gYWN0cyBpbnN0ZWFkIG9mIHJjdV9yZWFkX2xvY2soKS4KIAkgKiBXcml0ZXJzIHVzZSB2aXJ0cXVldWUgbXV0ZXguICovCiAJdm9pZCAqcHJpdmF0ZV9kYXRhOwogCS8qIExvZyB3cml0ZSBkZXNjcmlwdG9ycyAqLwpAQCAtMTEwLDYgKzEyNCw5IEBACiAJaW50IG52cXM7CiAJc3RydWN0IGZpbGUgKmxvZ19maWxlOwogCXN0cnVjdCBldmVudGZkX2N0eCAqbG9nX2N0eDsKKwlzcGlubG9ja190IHdvcmtfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHdvcmtfbGlzdDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKndvcmtlcjsKIH07CiAKIGxvbmcgdmhvc3RfZGV2X2luaXQoc3RydWN0IHZob3N0X2RldiAqLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cXMsIGludCBudnFzKTsKQEAgLTEyNCwyMSArMTQxLDIyIEBACiAJCSAgICAgIHN0cnVjdCBpb3ZlYyBpb3ZbXSwgdW5zaWduZWQgaW50IGlvdl9jb3VudCwKIAkJICAgICAgdW5zaWduZWQgaW50ICpvdXRfbnVtLCB1bnNpZ25lZCBpbnQgKmluX251bSwKIAkJICAgICAgc3RydWN0IHZob3N0X2xvZyAqbG9nLCB1bnNpZ25lZCBpbnQgKmxvZ19udW0pOwotdm9pZCB2aG9zdF9kaXNjYXJkX3ZxX2Rlc2Moc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqKTsKK3ZvaWQgdmhvc3RfZGlzY2FyZF92cV9kZXNjKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKiwgaW50IG4pOwogCiBpbnQgdmhvc3RfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqLCB1bnNpZ25lZCBpbnQgaGVhZCwgaW50IGxlbik7Ci12b2lkIHZob3N0X3NpZ25hbChzdHJ1Y3Qgdmhvc3RfZGV2ICosIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKik7CitpbnQgdmhvc3RfYWRkX3VzZWRfbihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICosIHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLAorCQkgICAgIHVuc2lnbmVkIGNvdW50KTsKIHZvaWQgdmhvc3RfYWRkX3VzZWRfYW5kX3NpZ25hbChzdHJ1Y3Qgdmhvc3RfZGV2ICosIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKiwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgaGVhZCwgaW50IGxlbik7CisJCQkgICAgICAgdW5zaWduZWQgaW50IGlkLCBpbnQgbGVuKTsKK3ZvaWQgdmhvc3RfYWRkX3VzZWRfYW5kX3NpZ25hbF9uKHN0cnVjdCB2aG9zdF9kZXYgKiwgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqLAorCQkJICAgICAgIHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLCB1bnNpZ25lZCBjb3VudCk7Cit2b2lkIHZob3N0X3NpZ25hbChzdHJ1Y3Qgdmhvc3RfZGV2ICosIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKik7CiB2b2lkIHZob3N0X2Rpc2FibGVfbm90aWZ5KHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKik7CiBib29sIHZob3N0X2VuYWJsZV9ub3RpZnkoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqKTsKIAogaW50IHZob3N0X2xvZ193cml0ZShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgc3RydWN0IHZob3N0X2xvZyAqbG9nLAogCQkgICAgdW5zaWduZWQgaW50IGxvZ19udW0sIHU2NCBsZW4pOwogCi1pbnQgdmhvc3RfaW5pdCh2b2lkKTsKLXZvaWQgdmhvc3RfY2xlYW51cCh2b2lkKTsKLQogI2RlZmluZSB2cV9lcnIodnEsIGZtdCwgLi4uKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkJcHJfZGVidWcocHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pOyAgICAgICBcCiAJCWlmICgodnEpLT5lcnJvcl9jdHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTE0OSw3ICsxNjcsOCBAQAogCVZIT1NUX0ZFQVRVUkVTID0gKDEgPDwgVklSVElPX0ZfTk9USUZZX09OX0VNUFRZKSB8CiAJCQkgKDEgPDwgVklSVElPX1JJTkdfRl9JTkRJUkVDVF9ERVNDKSB8CiAJCQkgKDEgPDwgVkhPU1RfRl9MT0dfQUxMKSB8Ci0JCQkgKDEgPDwgVkhPU1RfTkVUX0ZfVklSVElPX05FVF9IRFIpLAorCQkJICgxIDw8IFZIT1NUX05FVF9GX1ZJUlRJT19ORVRfSERSKSB8CisJCQkgKDEgPDwgVklSVElPX05FVF9GX01SR19SWEJVRiksCiB9OwogCiBzdGF0aWMgaW5saW5lIGludCB2aG9zdF9oYXNfZmVhdHVyZShzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIGludCBiaXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKaW5kZXggM2Q5NGExNC4uN2IxMWVhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwpAQCAtMTg3MSw2ICsxODcxLDcgQEAKIGNvbmZpZyBGQl9GU0xfRElVCiAJdHJpc3RhdGUgIkZyZWVzY2FsZSBESVUgZnJhbWVidWZmZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEZCICYmIEZTTF9TT0MKKwlzZWxlY3QgRkJfTU9ERV9IRUxQRVJTCiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVApAQCAtMjIyOSw2ICsyMjMwLDE1IEBACiAJICBhbmQgY291bGQgYWxzbyBoYXZlIGJlZW4gY2FsbGVkIGJ5IG90aGVyIG5hbWVzIHdoZW4gY291cGxlZCB3aXRoCiAJICBhIGJyaWRnZSBhZGFwdGVyLgogCitjb25maWcgRkJfSlo0NzQwCisJdHJpc3RhdGUgIkpaNDc0MCBMQ0QgZnJhbWVidWZmZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEZCICYmIE1BQ0hfSlo0NzQwCisJc2VsZWN0IEZCX1NZU19GSUxMUkVDVAorCXNlbGVjdCBGQl9TWVNfQ09QWUFSRUEKKwlzZWxlY3QgRkJfU1lTX0lNQUdFQkxJVAorCWhlbHAKKwkgIEZyYW1lYnVmZmVyIHN1cHBvcnQgZm9yIHRoZSBKWjQ3NDAgU29DLgorCiBzb3VyY2UgImRyaXZlcnMvdmlkZW8vb21hcC9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL3ZpZGVvL29tYXAyL0tjb25maWciCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUgYi9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCmluZGV4IGRkYzJhZjIuLmY1NmE5Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy92aWRlby9NYWtlZmlsZQpAQCAtMTMxLDYgKzEzMSw3IEBACiBvYmotJChDT05GSUdfRkJfTUI4NjJYWCkJICArPSBtYjg2Mnh4Lwogb2JqLSQoQ09ORklHX0ZCX01TTSkgICAgICAgICAgICAgICs9IG1zbS8KIG9iai0kKENPTkZJR19GQl9OVUM5MDApICAgICAgICAgICArPSBudWM5MDBmYi5vCitvYmotJChDT05GSUdfRkJfSlo0NzQwKQkJICArPSBqejQ3NDBfZmIubwogCiAjIFBsYXRmb3JtIG9yIGZhbGxiYWNrIGRyaXZlcnMgZ28gaGVyZQogb2JqLSQoQ09ORklHX0ZCX1VWRVNBKSAgICAgICAgICAgICs9IHV2ZXNhZmIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX3BtLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYwppbmRleCA1MTVjZjE5Li5jNGUxNzY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYwpAQCAtMjg3Miw3ICsyODcyLDcgQEAKIAkJfQogCiAjaWYgMAotCQkvKiBQb3dlciBkb3duIFRWIERBQywgdGFodCBzYXZlcyBhIHNpZ25pZmljYW50IGFtb3VudCBvZiBwb3dlciwKKwkJLyogUG93ZXIgZG93biBUViBEQUMsIHRoYXQgc2F2ZXMgYSBzaWduaWZpY2FudCBhbW91bnQgb2YgcG93ZXIsCiAJCSAqIHdlJ2xsIGhhdmUgc29tZXRoaW5nIGJldHRlciBvbmNlIHdlIGFjdHVhbGx5IGhhdmUgc29tZSBUVk91dAogCQkgKiBzdXBwb3J0CiAJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdTExMDBmYi5jIGIvZHJpdmVycy92aWRlby9hdTExMDBmYi5jCmluZGV4IDQwZjYxMzIuLjM0YjJmYzQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F1MTEwMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hdTExMDBmYi5jCkBAIC05NSw3ICs5NSw3IEBACiAJeyB7IDgsIDQsIDAgfSwgIHsgNCwgNCwgMCB9LCB7IDAsIDQsIDAgfSwgeyAwLCAwLCAwIH0gfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gYXUxMTAwZmJfZml4IF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvIGF1MTEwMGZiX2ZpeCBfX2RldmluaXRkYXRhID0gewogCS5pZAkJPSAiQVUxMTAwIEZCIiwKIAkueHBhbnN0ZXAgCT0gMSwKIAkueXBhbnN0ZXAgCT0gMSwKQEAgLTEwMyw3ICsxMDMsNyBAQAogCS5hY2NlbAkJPSBGQl9BQ0NFTF9OT05FLAogfTsKIAotc3RhdGljIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyBhdTExMDBmYl92YXIgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gYXUxMTAwZmJfdmFyIF9fZGV2aW5pdGRhdGEgPSB7CiAJLmFjdGl2YXRlCT0gRkJfQUNUSVZBVEVfTk9XLAogCS5oZWlnaHQJCT0gLTEsCiAJLndpZHRoCQk9IC0xLApAQCAtNDU4LDcgKzQ1OCw3IEBACiAKIC8qIEFVMTEwMCBMQ0QgY29udHJvbGxlciBkZXZpY2UgZHJpdmVyICovCiAKLXN0YXRpYyBpbnQgX19pbml0IGF1MTEwMGZiX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhdTExMDBmYl9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ3NfcmVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbG9jb21vbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sb2NvbW9sY2QuYwppbmRleCA3NTcxYmMyLi5kMmY1OTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sb2NvbW9sY2QuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sb2NvbW9sY2QuYwpAQCAtMiw3ICsyLDcgQEAKICAqIEJhY2tsaWdodCBjb250cm9sIGNvZGUgZm9yIFNoYXJwIFphdXJ1cyBTTC01NTAwCiAgKgogICogQ29weXJpZ2h0IDIwMDUgSm9obiBMZW56IDxsZW56QGNzLndpc2MuZWR1PgotICogTWFpbnRhaW5lcjogUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PiAodW5sZXNzIEpvaG4gd2FudHMgdG8gOi0pCisgKiBNYWludGFpbmVyOiBQYXZlbCBNYWNoZWsgPHBhdmVsQHVjdy5jej4gKHVubGVzcyBKb2huIHdhbnRzIHRvIDotKQogICogR1BMIHYyCiAgKgogICogVGhpcyBkcml2ZXIgYXNzdW1lcyBzaW5nbGUgQ1BVLiBUaGF0J3Mgb2theSwgYmVjYXVzZSBjb2xsaWUgaXMKQEAgLTI0Niw2ICsyNDYsNiBAQAogbW9kdWxlX2luaXQobG9jb21vbGNkX2luaXQpOwogbW9kdWxlX2V4aXQobG9jb21vbGNkX2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCJKb2huIExlbnogPGxlbnpAY3Mud2lzYy5lZHU+LCBQYXZlbCBNYWNoZWsgPHBhdmVsQHN1c2UuY3o+Iik7CitNT0RVTEVfQVVUSE9SKCJKb2huIExlbnogPGxlbnpAY3Mud2lzYy5lZHU+LCBQYXZlbCBNYWNoZWsgPHBhdmVsQHVjdy5jej4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQ29sbGllIExDRCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYncyLmMgYi9kcml2ZXJzL3ZpZGVvL2J3Mi5jCmluZGV4IDA5ZjFiOWIuLmM3Nzk2NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYncyLmMKKysrIGIvZHJpdmVycy92aWRlby9idzIuYwpAQCAtMzkwLDEyICszOTAsMTIgQEAKIAlpZiAoZmJfZ2V0X29wdGlvbnMoImJ3MmZiIiwgTlVMTCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0dXJuIG9mX3JlZ2lzdGVyX2RyaXZlcigmYncyX2RyaXZlciwgJm9mX2J1c190eXBlKTsKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZidzJfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGJ3Ml9leGl0KHZvaWQpCiB7Ci0Jb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoJmJ3Ml9kcml2ZXIpOworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZidzJfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoYncyX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jYXJtaW5lZmIuYyBiL2RyaXZlcnMvdmlkZW8vY2FybWluZWZiLmMKaW5kZXggZDgzNDVmYy4uNmIxOTEzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jYXJtaW5lZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2Nhcm1pbmVmYi5jCkBAIC00MzIsNyArNDMyLDcgQEAKIAl1MzIgbG9vcHM7CiAJdTMyIHJldDsKIAotCS8qIEluaXRhbGl6ZSBDYXJtaW5lICovCisJLyogSW5pdGlhbGl6ZSBDYXJtaW5lICovCiAJLyogU2V0cyBpbnRlcm5hbCBjbG9jayAqLwogCWNfc2V0X2h3X3JlZyhodywgQ0FSTUlORV9DVExfUkVHICsgQ0FSTUlORV9DVExfUkVHX0NMT0NLX0VOQUJMRSwKIAkJCUNBUk1JTkVfREZMVF9JUF9DTE9DS19FTkFCTEUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jZzE0LmMgYi9kcml2ZXJzL3ZpZGVvL2NnMTQuYwppbmRleCBlNWRjMjI0Li5kMDlmZGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NnMTQuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NnMTQuYwpAQCAtNjEwLDEyICs2MTAsMTIgQEAKIAlpZiAoZmJfZ2V0X29wdGlvbnMoImNnMTRmYiIsIE5VTEwpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldHVybiBvZl9yZWdpc3Rlcl9kcml2ZXIoJmNnMTRfZHJpdmVyLCAmb2ZfYnVzX3R5cGUpOworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmNnMTRfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNnMTRfZXhpdCh2b2lkKQogewotCW9mX3VucmVnaXN0ZXJfZHJpdmVyKCZjZzE0X2RyaXZlcik7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmNnMTRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoY2cxNF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY2czLmMgYi9kcml2ZXJzL3ZpZGVvL2NnMy5jCmluZGV4IDU1OGQ3M2EuLjY0YWEyOTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NnMy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY2czLmMKQEAgLTQ3NywxMiArNDc3LDEyIEBACiAJaWYgKGZiX2dldF9vcHRpb25zKCJjZzNmYiIsIE5VTEwpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldHVybiBvZl9yZWdpc3Rlcl9kcml2ZXIoJmNnM19kcml2ZXIsICZvZl9idXNfdHlwZSk7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmY2czX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjZzNfZXhpdCh2b2lkKQogewotCW9mX3VucmVnaXN0ZXJfZHJpdmVyKCZjZzNfZHJpdmVyKTsKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmY2czX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGNnM19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY2c2LmMgYi9kcml2ZXJzL3ZpZGVvL2NnNi5jCmluZGV4IDQ4MGQ3NjEuLjIzODlhNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY2c2LmMKKysrIGIvZHJpdmVycy92aWRlby9jZzYuYwpAQCAtODcwLDEyICs4NzAsMTIgQEAKIAlpZiAoZmJfZ2V0X29wdGlvbnMoImNnNmZiIiwgTlVMTCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0dXJuIG9mX3JlZ2lzdGVyX2RyaXZlcigmY2c2X2RyaXZlciwgJm9mX2J1c190eXBlKTsKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZjZzZfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNnNl9leGl0KHZvaWQpCiB7Ci0Jb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoJmNnNl9kcml2ZXIpOworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZjZzZfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoY2c2X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwppbmRleCBiMGEzZmEwLi4zYjNmNTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwpAQCAtMjM0Miw2ICsyMzQyLDMwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZmJjb25fZGVidWdfZW50ZXIoc3RydWN0IHZjX2RhdGEgKnZjKQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltjb24yZmJfbWFwW3ZjLT52Y19udW1dXTsKKwlzdHJ1Y3QgZmJjb25fb3BzICpvcHMgPSBpbmZvLT5mYmNvbl9wYXI7CisKKwlvcHMtPnNhdmVfZ3JhcGhpY3MgPSBvcHMtPmdyYXBoaWNzOworCW9wcy0+Z3JhcGhpY3MgPSAwOworCWlmIChpbmZvLT5mYm9wcy0+ZmJfZGVidWdfZW50ZXIpCisJCWluZm8tPmZib3BzLT5mYl9kZWJ1Z19lbnRlcihpbmZvKTsKKwlmYmNvbl9zZXRfcGFsZXR0ZSh2YywgY29sb3JfdGFibGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZiY29uX2RlYnVnX2xlYXZlKHN0cnVjdCB2Y19kYXRhICp2YykKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHJlZ2lzdGVyZWRfZmJbY29uMmZiX21hcFt2Yy0+dmNfbnVtXV07CisJc3RydWN0IGZiY29uX29wcyAqb3BzID0gaW5mby0+ZmJjb25fcGFyOworCisJb3BzLT5ncmFwaGljcyA9IG9wcy0+c2F2ZV9ncmFwaGljczsKKwlpZiAoaW5mby0+ZmJvcHMtPmZiX2RlYnVnX2xlYXZlKQorCQlpbmZvLT5mYm9wcy0+ZmJfZGVidWdfbGVhdmUoaW5mbyk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZmJjb25fZ2V0X2ZvbnQoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgY29uc29sZV9mb250ICpmb250KQogewogCXU4ICpmb250ZGF0YSA9IHZjLT52Y19mb250LmRhdGE7CkBAIC0zMjc2LDYgKzMzMDAsOCBAQAogCS5jb25fc2NyZWVuX3BvcyAJPSBmYmNvbl9zY3JlZW5fcG9zLAogCS5jb25fZ2V0eHkgCQk9IGZiY29uX2dldHh5LAogCS5jb25fcmVzaXplICAgICAgICAgICAgID0gZmJjb25fcmVzaXplLAorCS5jb25fZGVidWdfZW50ZXIJPSBmYmNvbl9kZWJ1Z19lbnRlciwKKwkuY29uX2RlYnVnX2xlYXZlCT0gZmJjb25fZGVidWdfbGVhdmUsCiB9OwogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGZiY29uX2V2ZW50X25vdGlmaWVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmggYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uaAppbmRleCA4OWEzNDY4OC4uNmJkMmUwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmgKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmgKQEAgLTc0LDYgKzc0LDcgQEAKIAlpbnQgICAgY3Vyc29yX3Jlc2V0OwogCWludCAgICBibGFua19zdGF0ZTsKIAlpbnQgICAgZ3JhcGhpY3M7CisJaW50ICAgIHNhdmVfZ3JhcGhpY3M7IC8qIGZvciBkZWJ1ZyBlbnRlci9sZWF2ZSAqLwogCWludCAgICBmbGFnczsKIAlpbnQgICAgcm90YXRlOwogCWludCAgICBjdXJfcm90YXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb250cm9sZmIuYyBiL2RyaXZlcnMvdmlkZW8vY29udHJvbGZiLmMKaW5kZXggNDlmY2JlOC4uYzIyNWRjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb250cm9sZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnRyb2xmYi5jCkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2N5YmVyMjAwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2N5YmVyMjAwMGZiLmMKaW5kZXggM2E1NjFkZjIuLjBjMWFmZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY3liZXIyMDAwZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2N5YmVyMjAwMGZiLmMKQEAgLTM4OCw2ICszODgsNyBAQAogCQlwc2V1ZG9fdmFsIHw9IGNvbnZlcnRfYml0ZmllbGQocmVkLCAmdmFyLT5yZWQpOwogCQlwc2V1ZG9fdmFsIHw9IGNvbnZlcnRfYml0ZmllbGQoZ3JlZW4sICZ2YXItPmdyZWVuKTsKIAkJcHNldWRvX3ZhbCB8PSBjb252ZXJ0X2JpdGZpZWxkKGJsdWUsICZ2YXItPmJsdWUpOworCQlyZXQgPSAwOwogCQlicmVhazsKIAl9CiAKQEAgLTQzNiw2ICs0MzcsOCBAQAogCWN5YmVyMjAwMGZiX3dyaXRlYihpIHwgNCwgMHgzY2YsIGNmYik7CiAJY3liZXIyMDAwZmJfd3JpdGViKHZhbCwgMHgzYzYsIGNmYik7CiAJY3liZXIyMDAwZmJfd3JpdGViKGksIDB4M2NmLCBjZmIpOworCS8qIHByZXZlbnQgY2FyZCBsb2NrLXVwIG9ic2VydmVkIG9uIHg4NiB3aXRoIEN5YmVyUHJvIDIwMDAgKi8KKwljeWJlcjIwMDBmYl9yZWFkYigweDNjZiwgY2ZiKTsKIH0KIAogc3RhdGljIHZvaWQgY3liZXIyMDAwZmJfc2V0X3RpbWluZyhzdHJ1Y3QgY2ZiX2luZm8gKmNmYiwgc3RydWN0IHBhcl9pbmZvICpodykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmZiLmMgYi9kcml2ZXJzL3ZpZGVvL2ZmYi5jCmluZGV4IDk1YzAyMjcuLmY2ZWNmYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmZiLmMKKysrIGIvZHJpdmVycy92aWRlby9mZmIuYwpAQCAtMTA2NywxMiArMTA2NywxMiBAQAogCWlmIChmYl9nZXRfb3B0aW9ucygiZmZiIiwgTlVMTCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0dXJuIG9mX3JlZ2lzdGVyX2RyaXZlcigmZmZiX2RyaXZlciwgJm9mX2J1c190eXBlKTsKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZmZmJfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGZmYl9leGl0KHZvaWQpCiB7Ci0Jb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoJmZmYl9kcml2ZXIpOworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZmZmJfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoZmZiX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mc2wtZGl1LWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2ZzbC1kaXUtZmIuYwppbmRleCAyNzQ1NWNlLi5lMzhhZDIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZzbC1kaXUtZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZzbC1kaXUtZmIuYwpAQCAtMzQsNyArMzQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CiAKICNpbmNsdWRlIDxzeXNkZXYvZnNsX3NvYy5oPgotI2luY2x1ZGUgImZzbC1kaXUtZmIuaCIKKyNpbmNsdWRlIDxsaW51eC9mc2wtZGl1LWZiLmg+CisjaW5jbHVkZSAiZWRpZC5oIgogCiAvKgogICogVGhlc2UgcGFyYW1ldGVycyBnaXZlIGRlZmF1bHQgcGFyYW1ldGVycwpAQCAtMjE3LDYgKzIxOCw3IEBACiAJaW50IHhfYW9pX2Q7CQkvKiBhb2kgZGlzcGxheSB4IG9mZnNldCB0byBwaHlzaWNhbCBzY3JlZW4gKi8KIAlpbnQgeV9hb2lfZDsJCS8qIGFvaSBkaXNwbGF5IHkgb2Zmc2V0IHRvIHBoeXNpY2FsIHNjcmVlbiAqLwogCXN0cnVjdCBmc2xfZGl1X2RhdGEgKnBhcmVudDsKKwl1OCAqZWRpZF9kYXRhOwogfTsKIAogCkBAIC0zMTcsNiArMzE5LDE3IEBACiAJCWZyZWVfcGFnZXNfZXhhY3QodmlydCwgc2l6ZSk7CiB9CiAKKy8qCisgKiBXb3JrYXJvdW5kIGZvciBmYWlsZWQgd3JpdGluZyBkZXNjIHJlZ2lzdGVyIG9mIHBsYW5lcy4KKyAqIE5lZWRlZCB3aXRoIE1QQzUxMjEgRElVIHJldiAyLjAgc2lsaWNvbi4KKyAqLwordm9pZCB3cl9yZWdfd2EodTMyICpyZWcsIHUzMiB2YWwpCit7CisJZG8geworCQlvdXRfYmUzMihyZWcsIHZhbCk7CisJfSB3aGlsZSAoaW5fYmUzMihyZWcpICE9IHZhbCk7Cit9CisKIHN0YXRpYyBpbnQgZnNsX2RpdV9lbmFibGVfcGFuZWwoc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IG1mYl9pbmZvICpwbWZiaSwgKmNtZmJpLCAqbWZiaSA9IGluZm8tPnBhcjsKQEAgLTMzMCw3ICszNDMsNyBAQAogCQlzd2l0Y2ggKG1mYmktPmluZGV4KSB7CiAJCWNhc2UgMDoJCQkJLyogcGxhbmUgMCAqLwogCQkJaWYgKGh3LT5kZXNjWzBdICE9IGFkLT5wYWRkcikKLQkJCQlvdXRfYmUzMigmaHctPmRlc2NbMF0sIGFkLT5wYWRkcik7CisJCQkJd3JfcmVnX3dhKCZody0+ZGVzY1swXSwgYWQtPnBhZGRyKTsKIAkJCWJyZWFrOwogCQljYXNlIDE6CQkJCS8qIHBsYW5lIDEgQU9JIDAgKi8KIAkJCWNtZmJpID0gbWFjaGluZV9kYXRhLT5mc2xfZGl1X2luZm9bMl0tPnBhcjsKQEAgLTM0MCw3ICszNTMsNyBAQAogCQkJCQkJY3B1X3RvX2xlMzIoY21mYmktPmFkLT5wYWRkcik7CiAJCQkJZWxzZQogCQkJCQlhZC0+bmV4dF9hZCA9IDA7Ci0JCQkJb3V0X2JlMzIoJmh3LT5kZXNjWzFdLCBhZC0+cGFkZHIpOworCQkJCXdyX3JlZ193YSgmaHctPmRlc2NbMV0sIGFkLT5wYWRkcik7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSAzOgkJCQkvKiBwbGFuZSAyIEFPSSAwICovCkBAIC0zNTEsMTQgKzM2NCwxNCBAQAogCQkJCQkJY3B1X3RvX2xlMzIoY21mYmktPmFkLT5wYWRkcik7CiAJCQkJZWxzZQogCQkJCQlhZC0+bmV4dF9hZCA9IDA7Ci0JCQkJb3V0X2JlMzIoJmh3LT5kZXNjWzJdLCBhZC0+cGFkZHIpOworCQkJCXdyX3JlZ193YSgmaHctPmRlc2NbMl0sIGFkLT5wYWRkcik7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSAyOgkJCQkvKiBwbGFuZSAxIEFPSSAxICovCiAJCQlwbWZiaSA9IG1hY2hpbmVfZGF0YS0+ZnNsX2RpdV9pbmZvWzFdLT5wYXI7CiAJCQlhZC0+bmV4dF9hZCA9IDA7CiAJCQlpZiAoaHctPmRlc2NbMV0gPT0gbWFjaGluZV9kYXRhLT5kdW1teV9hZC0+cGFkZHIpCi0JCQkJb3V0X2JlMzIoJmh3LT5kZXNjWzFdLCBhZC0+cGFkZHIpOworCQkJCXdyX3JlZ193YSgmaHctPmRlc2NbMV0sIGFkLT5wYWRkcik7CiAJCQllbHNlCQkJCQkvKiBBT0kwIG9wZW4gKi8KIAkJCQlwbWZiaS0+YWQtPm5leHRfYWQgPSBjcHVfdG9fbGUzMihhZC0+cGFkZHIpOwogCQkJYnJlYWs7CkBAIC0zNjYsNyArMzc5LDcgQEAKIAkJCXBtZmJpID0gbWFjaGluZV9kYXRhLT5mc2xfZGl1X2luZm9bM10tPnBhcjsKIAkJCWFkLT5uZXh0X2FkID0gMDsKIAkJCWlmIChody0+ZGVzY1syXSA9PSBtYWNoaW5lX2RhdGEtPmR1bW15X2FkLT5wYWRkcikKLQkJCQlvdXRfYmUzMigmaHctPmRlc2NbMl0sIGFkLT5wYWRkcik7CisJCQkJd3JfcmVnX3dhKCZody0+ZGVzY1syXSwgYWQtPnBhZGRyKTsKIAkJCWVsc2UJCQkJLyogQU9JMCB3YXMgb3BlbiAqLwogCQkJCXBtZmJpLT5hZC0+bmV4dF9hZCA9IGNwdV90b19sZTMyKGFkLT5wYWRkcik7CiAJCQlicmVhazsKQEAgLTM5MCwyNyArNDAzLDI0IEBACiAJc3dpdGNoIChtZmJpLT5pbmRleCkgewogCWNhc2UgMDoJCQkJCS8qIHBsYW5lIDAgKi8KIAkJaWYgKGh3LT5kZXNjWzBdICE9IG1hY2hpbmVfZGF0YS0+ZHVtbXlfYWQtPnBhZGRyKQotCQkJb3V0X2JlMzIoJmh3LT5kZXNjWzBdLAotCQkJCW1hY2hpbmVfZGF0YS0+ZHVtbXlfYWQtPnBhZGRyKTsKKwkJCXdyX3JlZ193YSgmaHctPmRlc2NbMF0sIG1hY2hpbmVfZGF0YS0+ZHVtbXlfYWQtPnBhZGRyKTsKIAkJYnJlYWs7CiAJY2FzZSAxOgkJCQkJLyogcGxhbmUgMSBBT0kgMCAqLwogCQljbWZiaSA9IG1hY2hpbmVfZGF0YS0+ZnNsX2RpdV9pbmZvWzJdLT5wYXI7CiAJCWlmIChjbWZiaS0+Y291bnQgPiAwKQkvKiBBT0kxIGlzIG9wZW4gKi8KLQkJCW91dF9iZTMyKCZody0+ZGVzY1sxXSwgY21mYmktPmFkLT5wYWRkcik7CisJCQl3cl9yZWdfd2EoJmh3LT5kZXNjWzFdLCBjbWZiaS0+YWQtPnBhZGRyKTsKIAkJCQkJLyogbW92ZSBBT0kxIHRvIHRoZSBmaXJzdCAqLwogCQllbHNlCQkJLyogQU9JMSB3YXMgY2xvc2VkICovCi0JCQlvdXRfYmUzMigmaHctPmRlc2NbMV0sCi0JCQkJbWFjaGluZV9kYXRhLT5kdW1teV9hZC0+cGFkZHIpOworCQkJd3JfcmVnX3dhKCZody0+ZGVzY1sxXSwgbWFjaGluZV9kYXRhLT5kdW1teV9hZC0+cGFkZHIpOwogCQkJCQkvKiBjbG9zZSBBT0kgMCAqLwogCQlicmVhazsKIAljYXNlIDM6CQkJCQkvKiBwbGFuZSAyIEFPSSAwICovCiAJCWNtZmJpID0gbWFjaGluZV9kYXRhLT5mc2xfZGl1X2luZm9bNF0tPnBhcjsKIAkJaWYgKGNtZmJpLT5jb3VudCA+IDApCS8qIEFPSTEgaXMgb3BlbiAqLwotCQkJb3V0X2JlMzIoJmh3LT5kZXNjWzJdLCBjbWZiaS0+YWQtPnBhZGRyKTsKKwkJCXdyX3JlZ193YSgmaHctPmRlc2NbMl0sIGNtZmJpLT5hZC0+cGFkZHIpOwogCQkJCQkvKiBtb3ZlIEFPSTEgdG8gdGhlIGZpcnN0ICovCiAJCWVsc2UJCQkvKiBBT0kxIHdhcyBjbG9zZWQgKi8KLQkJCW91dF9iZTMyKCZody0+ZGVzY1syXSwKLQkJCQltYWNoaW5lX2RhdGEtPmR1bW15X2FkLT5wYWRkcik7CisJCQl3cl9yZWdfd2EoJmh3LT5kZXNjWzJdLCBtYWNoaW5lX2RhdGEtPmR1bW15X2FkLT5wYWRkcik7CiAJCQkJCS8qIGNsb3NlIEFPSSAwICovCiAJCWJyZWFrOwogCWNhc2UgMjoJCQkJCS8qIHBsYW5lIDEgQU9JIDEgKi8KQEAgLTQyMSw3ICs0MzEsNyBAQAogCQkJCQkvKiBBT0kwIGlzIG9wZW4sIG11c3QgYmUgdGhlIGZpcnN0ICovCiAJCQkJcG1mYmktPmFkLT5uZXh0X2FkID0gMDsKIAkJfSBlbHNlCQkJLyogQU9JMSBpcyB0aGUgZmlyc3QgaW4gdGhlIGNoYWluICovCi0JCQlvdXRfYmUzMigmaHctPmRlc2NbMV0sIG1hY2hpbmVfZGF0YS0+ZHVtbXlfYWQtPnBhZGRyKTsKKwkJCXdyX3JlZ193YSgmaHctPmRlc2NbMV0sIG1hY2hpbmVfZGF0YS0+ZHVtbXlfYWQtPnBhZGRyKTsKIAkJCQkJLyogY2xvc2UgQU9JIDEgKi8KIAkJYnJlYWs7CiAJY2FzZSA0OgkJCQkJLyogcGxhbmUgMiBBT0kgMSAqLwpAQCAtNDMyLDcgKzQ0Miw3IEBACiAJCQkJLyogQU9JMCBpcyBvcGVuLCBtdXN0IGJlIHRoZSBmaXJzdCAqLwogCQkJCXBtZmJpLT5hZC0+bmV4dF9hZCA9IDA7CiAJCX0gZWxzZQkJLyogQU9JMSBpcyB0aGUgZmlyc3QgaW4gdGhlIGNoYWluICovCi0JCQlvdXRfYmUzMigmaHctPmRlc2NbMl0sIG1hY2hpbmVfZGF0YS0+ZHVtbXlfYWQtPnBhZGRyKTsKKwkJCXdyX3JlZ193YSgmaHctPmRlc2NbMl0sIG1hY2hpbmVfZGF0YS0+ZHVtbXlfYWQtPnBhZGRyKTsKIAkJCQkvKiBjbG9zZSBBT0kgMSAqLwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTEwMCw2ICsxMTEwLDEwIEBACiAJc3RydWN0IG1mYl9pbmZvICptZmJpID0gaW5mby0+cGFyOwogCWludCByZXMgPSAwOwogCisJLyogZnJlZSBib290IHNwbGFzaCBtZW1vcnkgb24gZmlyc3QgL2Rldi9mYjAgb3BlbiAqLworCWlmICghbWZiaS0+aW5kZXggJiYgZGl1X29wcy5yZWxlYXNlX2Jvb3RtZW0pCisJCWRpdV9vcHMucmVsZWFzZV9ib290bWVtKCk7CisKIAlzcGluX2xvY2soJmRpdV9sb2NrKTsKIAltZmJpLT5jb3VudCsrOwogCWlmIChtZmJpLT5jb3VudCA9PSAxKSB7CkBAIC0xMTczLDE4ICsxMTg3LDMwIEBACiAJaW50IHJjOwogCXN0cnVjdCBtZmJfaW5mbyAqbWZiaSA9IGluZm8tPnBhcjsKIAljb25zdCBjaGFyICphb2lfbW9kZSwgKmluaXRfYW9pX21vZGUgPSAiMzIweDI0MCI7CisJc3RydWN0IGZiX3ZpZGVvbW9kZSAqZGIgPSBmc2xfZGl1X21vZGVfZGI7CisJdW5zaWduZWQgaW50IGRic2l6ZSA9IEFSUkFZX1NJWkUoZnNsX2RpdV9tb2RlX2RiKTsKKwlpbnQgaGFzX2RlZmF1bHRfbW9kZSA9IDE7CiAKIAlpZiAoaW5pdF9mYmluZm8oaW5mbykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKG1mYmktPmluZGV4ID09IDApCS8qIHBsYW5lIDAgKi8KKwlpZiAobWZiaS0+aW5kZXggPT0gMCkgewkvKiBwbGFuZSAwICovCisJCWlmIChtZmJpLT5lZGlkX2RhdGEpIHsKKwkJCS8qIE5vdyBidWlsZCBtb2RlZGIgZnJvbSBFRElEICovCisJCQlmYl9lZGlkX3RvX21vbnNwZWNzKG1mYmktPmVkaWRfZGF0YSwgJmluZm8tPm1vbnNwZWNzKTsKKwkJCWZiX3ZpZGVvbW9kZV90b19tb2RlbGlzdChpbmZvLT5tb25zcGVjcy5tb2RlZGIsCisJCQkJCQkgaW5mby0+bW9uc3BlY3MubW9kZWRiX2xlbiwKKwkJCQkJCSAmaW5mby0+bW9kZWxpc3QpOworCQkJZGIgPSBpbmZvLT5tb25zcGVjcy5tb2RlZGI7CisJCQlkYnNpemUgPSBpbmZvLT5tb25zcGVjcy5tb2RlZGJfbGVuOworCQl9CiAJCWFvaV9tb2RlID0gZmJfbW9kZTsKLQllbHNlCisJfSBlbHNlIHsKIAkJYW9pX21vZGUgPSBpbml0X2FvaV9tb2RlOworCX0KIAlwcl9kZWJ1ZygibW9kZSB1c2VkID0gJXNcbiIsIGFvaV9tb2RlKTsKLQlyYyA9IGZiX2ZpbmRfbW9kZSgmaW5mby0+dmFyLCBpbmZvLCBhb2lfbW9kZSwgZnNsX2RpdV9tb2RlX2RiLAotCSAgICAgQVJSQVlfU0laRShmc2xfZGl1X21vZGVfZGIpLCAmZnNsX2RpdV9kZWZhdWx0X21vZGUsIGRlZmF1bHRfYnBwKTsKLQorCXJjID0gZmJfZmluZF9tb2RlKCZpbmZvLT52YXIsIGluZm8sIGFvaV9tb2RlLCBkYiwgZGJzaXplLAorCQkJICAmZnNsX2RpdV9kZWZhdWx0X21vZGUsIGRlZmF1bHRfYnBwKTsKIAlzd2l0Y2ggKHJjKSB7CiAJY2FzZSAxOgogCQlwcl9kZWJ1ZygidXNpbmcgbW9kZSBzcGVjaWZpZWQgaW4gQG1vZGVcbiIpOwpAQCAtMTIwMiwxMCArMTIyOCw1MCBAQAogCWRlZmF1bHQ6CiAJCXByX2RlYnVnKCJyYyA9ICVkXG4iLCByYyk7CiAJCXByX2RlYnVnKCJmYWlsZWQgdG8gZmluZCBtb2RlXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCS8qCisJCSAqIEZvciBwbGFuZSAwIHdlIGNvbnRpbnVlIGFuZCBsb29rIGludG8KKwkJICogZHJpdmVyJ3MgaW50ZXJuYWwgbW9kZWRiLgorCQkgKi8KKwkJaWYgKG1mYmktPmluZGV4ID09IDAgJiYgbWZiaS0+ZWRpZF9kYXRhKQorCQkJaGFzX2RlZmF1bHRfbW9kZSA9IDA7CisJCWVsc2UKKwkJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKIAl9CiAKKwlpZiAoIWhhc19kZWZhdWx0X21vZGUpIHsKKwkJcmMgPSBmYl9maW5kX21vZGUoJmluZm8tPnZhciwgaW5mbywgYW9pX21vZGUsIGZzbF9kaXVfbW9kZV9kYiwKKwkJCQkgIEFSUkFZX1NJWkUoZnNsX2RpdV9tb2RlX2RiKSwKKwkJCQkgICZmc2xfZGl1X2RlZmF1bHRfbW9kZSwKKwkJCQkgIGRlZmF1bHRfYnBwKTsKKwkJaWYgKHJjID4gMCAmJiByYyA8IDUpCisJCQloYXNfZGVmYXVsdF9tb2RlID0gMTsKKwl9CisKKwkvKiBTdGlsbCBub3QgZm91bmQsIHVzZSBwcmVmZXJyZWQgbW9kZSBmcm9tIGRhdGFiYXNlIGlmIGFueSAqLworCWlmICghaGFzX2RlZmF1bHRfbW9kZSAmJiBpbmZvLT5tb25zcGVjcy5tb2RlZGIpIHsKKwkJc3RydWN0IGZiX21vbnNwZWNzICpzcGVjcyA9ICZpbmZvLT5tb25zcGVjczsKKwkJc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZWRiID0gJnNwZWNzLT5tb2RlZGJbMF07CisKKwkJLyoKKwkJICogR2V0IHByZWZlcnJlZCB0aW1pbmcuIElmIG5vdCBmb3VuZCwKKwkJICogZmlyc3QgbW9kZSBpbiBkYXRhYmFzZSB3aWxsIGJlIHVzZWQuCisJCSAqLworCQlpZiAoc3BlY3MtPm1pc2MgJiBGQl9NSVNDXzFTVF9ERVRBSUwpIHsKKwkJCWludCBpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgc3BlY3MtPm1vZGVkYl9sZW47IGkrKykgeworCQkJCWlmIChzcGVjcy0+bW9kZWRiW2ldLmZsYWcgJiBGQl9NT0RFX0lTX0ZJUlNUKSB7CisJCQkJCW1vZGVkYiA9ICZzcGVjcy0+bW9kZWRiW2ldOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPSBkZWZhdWx0X2JwcDsKKwkJZmJfdmlkZW9tb2RlX3RvX3ZhcigmaW5mby0+dmFyLCBtb2RlZGIpOworCX0KKwogCXByX2RlYnVnKCJ4cmVzX3ZpcnR1YWwgJWRcbiIsIGluZm8tPnZhci54cmVzX3ZpcnR1YWwpOwogCXByX2RlYnVnKCJiaXRzX3Blcl9waXhlbCAlZFxuIiwgaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKTsKIApAQCAtMTI0NCw2ICsxMzEwLDkgQEAKIAlpZiAoIW1mYmktPnJlZ2lzdGVyZWQpCiAJCXJldHVybjsKIAorCWlmIChtZmJpLT5pbmRleCA9PSAwKQorCQlrZnJlZShtZmJpLT5lZGlkX2RhdGEpOworCiAJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKIAl1bm1hcF92aWRlb19tZW1vcnkoaW5mbyk7CiAJaWYgKCZpbmZvLT5jbWFwKQpAQCAtMTQyNyw2ICsxNDk2LDcgQEAKIAlpbnQgcmV0LCBpLCBlcnJvciA9IDA7CiAJc3RydWN0IHJlc291cmNlIHJlczsKIAlzdHJ1Y3QgZnNsX2RpdV9kYXRhICptYWNoaW5lX2RhdGE7CisJaW50IGRpdV9tb2RlOwogCiAJbWFjaGluZV9kYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZzbF9kaXVfZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghbWFjaGluZV9kYXRhKQpAQCAtMTQ0Myw2ICsxNTEzLDE3IEBACiAJCW1mYmkgPSBtYWNoaW5lX2RhdGEtPmZzbF9kaXVfaW5mb1tpXS0+cGFyOwogCQltZW1jcHkobWZiaSwgJm1mYl90ZW1wbGF0ZVtpXSwgc2l6ZW9mKHN0cnVjdCBtZmJfaW5mbykpOwogCQltZmJpLT5wYXJlbnQgPSBtYWNoaW5lX2RhdGE7CisKKwkJaWYgKG1mYmktPmluZGV4ID09IDApIHsKKwkJCWNvbnN0IHU4ICpwcm9wOworCQkJaW50IGxlbjsKKworCQkJLyogR2V0IEVESUQgKi8KKwkJCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJlZGlkIiwgJmxlbik7CisJCQlpZiAocHJvcCAmJiBsZW4gPT0gRURJRF9MRU5HVEgpCisJCQkJbWZiaS0+ZWRpZF9kYXRhID0ga21lbWR1cChwcm9wLCBFRElEX0xFTkdUSCwKKwkJCQkJCQkgIEdGUF9LRVJORUwpOworCQl9CiAJfQogCiAJcmV0ID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnJlcyk7CkBAIC0xNDYzLDcgKzE1NDQsOSBAQAogCQlnb3RvIGVycm9yMjsKIAl9CiAKLQlvdXRfYmUzMigmZHIuZGl1X3JlZy0+ZGl1X21vZGUsIDApOwkJLyogZGlzYWJsZSBESVUgYW55d2F5Ki8KKwlkaXVfbW9kZSA9IGluX2JlMzIoJmRyLmRpdV9yZWctPmRpdV9tb2RlKTsKKwlpZiAoZGl1X21vZGUgIT0gTUZCX01PREUxKQorCQlvdXRfYmUzMigmZHIuZGl1X3JlZy0+ZGl1X21vZGUsIDApOwkvKiBkaXNhYmxlIERJVSAqLwogCiAJLyogR2V0IHRoZSBJUlEgb2YgdGhlIERJVSAqLwogCW1hY2hpbmVfZGF0YS0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOwpAQCAtMTUxMSw3ICsxNTk0LDEzIEBACiAJbWFjaGluZV9kYXRhLT5kdW1teV9hZC0+b2Zmc2V0X3h5ZCA9IDA7CiAJbWFjaGluZV9kYXRhLT5kdW1teV9hZC0+bmV4dF9hZCA9IDA7CiAKLQlvdXRfYmUzMigmZHIuZGl1X3JlZy0+ZGVzY1swXSwgbWFjaGluZV9kYXRhLT5kdW1teV9hZC0+cGFkZHIpOworCS8qCisJICogTGV0IERJVSBkaXNwbGF5IHNwbGFzaCBzY3JlZW4gaWYgaXQgd2FzIHByZS1pbml0aWFsaXplZAorCSAqIGJ5IHRoZSBib290bG9hZGVyLCBzZXQgZHVtbXkgYXJlYSBkZXNjcmlwdG9yIG90aGVyd2lzZS4KKwkgKi8KKwlpZiAoZGl1X21vZGUgIT0gTUZCX01PREUxKQorCQlvdXRfYmUzMigmZHIuZGl1X3JlZy0+ZGVzY1swXSwgbWFjaGluZV9kYXRhLT5kdW1teV9hZC0+cGFkZHIpOworCiAJb3V0X2JlMzIoJmRyLmRpdV9yZWctPmRlc2NbMV0sIG1hY2hpbmVfZGF0YS0+ZHVtbXlfYWQtPnBhZGRyKTsKIAlvdXRfYmUzMigmZHIuZGl1X3JlZy0+ZGVzY1syXSwgbWFjaGluZV9kYXRhLT5kdW1teV9hZC0+cGFkZHIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2diZWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2diZWZiLmMKaW5kZXggN2Q4YzU1ZC4uY2EzMzU1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9nYmVmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZ2JlZmIuYwpAQCAtOTEsMTAgKzkxLDEwIEBACiBzdGF0aWMgdWludDMyX3QgZ2JlX2NtYXBbMjU2XTsKIHN0YXRpYyBpbnQgZ2JlX3R1cm5lZF9vbjsgLyogMCB0dXJuZWQgb2ZmLCAxIHR1cm5lZCBvbiAqLwogCi1zdGF0aWMgY2hhciAqbW9kZV9vcHRpb24gX19pbml0ZGF0YSA9IE5VTEw7CitzdGF0aWMgY2hhciAqbW9kZV9vcHRpb24gX19kZXZpbml0ZGF0YSA9IE5VTEw7CiAKIC8qIGRlZmF1bHQgQ1JUIG1vZGUgKi8KLXN0YXRpYyBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gZGVmYXVsdF92YXJfQ1JUIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIGRlZmF1bHRfdmFyX0NSVCBfX2RldmluaXRkYXRhID0gewogCS8qIDY0MHg0ODAsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoMjUuMTc1IE1IeiBkb3RjbG9jaykgKi8KIAkueHJlcwkJPSA2NDAsCiAJLnlyZXMJCT0gNDgwLApAQCAtMTI1LDcgKzEyNSw3IEBACiB9OwogCiAvKiBkZWZhdWx0IExDRCBtb2RlICovCi1zdGF0aWMgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIGRlZmF1bHRfdmFyX0xDRCBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyBkZWZhdWx0X3Zhcl9MQ0QgX19kZXZpbml0ZGF0YSA9IHsKIAkvKiAxNjAweDEwMjQsIDggYnBwICovCiAJLnhyZXMJCT0gMTYwMCwKIAkueXJlcwkJPSAxMDI0LApAQCAtMTU3LDcgKzE1Nyw3IEBACiAKIC8qIGRlZmF1bHQgbW9kZWRiIG1vZGUgKi8KIC8qIDY0MHg0ODAsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoMjUuMTcyIE1IeiBkb3RjbG9jaykgKi8KLXN0YXRpYyBzdHJ1Y3QgZmJfdmlkZW9tb2RlIGRlZmF1bHRfbW9kZV9DUlQgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZmJfdmlkZW9tb2RlIGRlZmF1bHRfbW9kZV9DUlQgX19kZXZpbml0ZGF0YSA9IHsKIAkucmVmcmVzaAk9IDYwLAogCS54cmVzCQk9IDY0MCwKIAkueXJlcwkJPSA0ODAsCkBAIC0xNzIsNyArMTcyLDcgQEAKIAkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKIH07CiAvKiAxNjAweDEwMjQgU0dJIGZsYXRwYW5lbCAxNjAwc3cgKi8KLXN0YXRpYyBzdHJ1Y3QgZmJfdmlkZW9tb2RlIGRlZmF1bHRfbW9kZV9MQ0QgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZmJfdmlkZW9tb2RlIGRlZmF1bHRfbW9kZV9MQ0QgX19kZXZpbml0ZGF0YSA9IHsKIAkvKiAxNjAweDEwMjQsIDggYnBwICovCiAJLnhyZXMJCT0gMTYwMCwKIAkueXJlcwkJPSAxMDI0LApAQCAtMTg2LDggKzE4Niw4IEBACiAJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZiX3ZpZGVvbW9kZSAqZGVmYXVsdF9tb2RlIF9faW5pdGRhdGEgPSAmZGVmYXVsdF9tb2RlX0NSVDsKLXN0YXRpYyBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKmRlZmF1bHRfdmFyIF9faW5pdGRhdGEgPSAmZGVmYXVsdF92YXJfQ1JUOworc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgKmRlZmF1bHRfbW9kZSBfX2RldmluaXRkYXRhID0gJmRlZmF1bHRfbW9kZV9DUlQ7CitzdGF0aWMgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICpkZWZhdWx0X3ZhciBfX2RldmluaXRkYXRhID0gJmRlZmF1bHRfdmFyX0NSVDsKIAogc3RhdGljIGludCBmbGF0X3BhbmVsX2VuYWJsZWQgPSAwOwogCkBAIC0xMDk4LDcgKzEwOTgsNyBAQAogICogSW5pdGlhbGl6YXRpb24KICAqLwogCi1zdGF0aWMgaW50IF9faW5pdCBnYmVmYl9zZXR1cChjaGFyICpvcHRpb25zKQorc3RhdGljIGludCBfX2RldmluaXQgZ2JlZmJfc2V0dXAoY2hhciAqb3B0aW9ucykKIHsKIAljaGFyICp0aGlzX29wdDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbXhmYi5jIGIvZHJpdmVycy92aWRlby9pbXhmYi5jCmluZGV4IGI0YjZkZWNlLi40M2YwNjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9pbXhmYi5jCkBAIC0xNzUsNiArMTc1LDcgQEAKIAogCXN0cnVjdCBpbXhfZmJfdmlkZW9tb2RlICptb2RlOwogCWludAkJCW51bV9tb2RlczsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmw7CiAKIAl2b2lkICgqbGNkX3Bvd2VyKShpbnQpOwogCXZvaWQgKCpiYWNrbGlnaHRfcG93ZXIpKGludCk7CkBAIC00NDksNiArNDUwLDczIEBACiAJcmV0dXJuIDA7CiB9CiAKKworCitzdGF0aWMgaW50IGlteGZiX2JsX2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCkKK3sKKwlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gYmxfZ2V0X2RhdGEoYmwpOworCisJcmV0dXJuIHJlYWRsKGZiaS0+cmVncyArIExDRENfUFdNUikgJiAweEZGOworfQorCitzdGF0aWMgaW50IGlteGZiX2JsX3VwZGF0ZV9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsKQoreworCXN0cnVjdCBpbXhmYl9pbmZvICpmYmkgPSBibF9nZXRfZGF0YShibCk7CisJaW50IGJyaWdodG5lc3MgPSBibC0+cHJvcHMuYnJpZ2h0bmVzczsKKworCWlmIChibC0+cHJvcHMucG93ZXIgIT0gRkJfQkxBTktfVU5CTEFOSykKKwkJYnJpZ2h0bmVzcyA9IDA7CisJaWYgKGJsLT5wcm9wcy5mYl9ibGFuayAhPSBGQl9CTEFOS19VTkJMQU5LKQorCQlicmlnaHRuZXNzID0gMDsKKworCWZiaS0+cHdtciA9IChmYmktPnB3bXIgJiB+MHhGRikgfCBicmlnaHRuZXNzOworCisJaWYgKGJsLT5wcm9wcy5mYl9ibGFuayAhPSBGQl9CTEFOS19VTkJMQU5LKQorCQljbGtfZW5hYmxlKGZiaS0+Y2xrKTsKKwl3cml0ZWwoZmJpLT5wd21yLCBmYmktPnJlZ3MgKyBMQ0RDX1BXTVIpOworCWlmIChibC0+cHJvcHMuZmJfYmxhbmsgIT0gRkJfQkxBTktfVU5CTEFOSykKKwkJY2xrX2Rpc2FibGUoZmJpLT5jbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBpbXhmYl9sY2RjX2JsX29wcyA9IHsKKwkudXBkYXRlX3N0YXR1cyA9IGlteGZiX2JsX3VwZGF0ZV9zdGF0dXMsCisJLmdldF9icmlnaHRuZXNzID0gaW14ZmJfYmxfZ2V0X2JyaWdodG5lc3MsCit9OworCitzdGF0aWMgdm9pZCBpbXhmYl9pbml0X2JhY2tsaWdodChzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpKQoreworCXN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyBwcm9wczsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZQkqYmw7CisKKwlpZiAoZmJpLT5ibCkKKwkJcmV0dXJuOworCisJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcykpOworCXByb3BzLm1heF9icmlnaHRuZXNzID0gMHhmZjsKKwl3cml0ZWwoZmJpLT5wd21yLCBmYmktPnJlZ3MgKyBMQ0RDX1BXTVIpOworCisJYmwgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJpbXhmYi1ibCIsICZmYmktPnBkZXYtPmRldiwgZmJpLAorCQkJCSAgICAgICAmaW14ZmJfbGNkY19ibF9vcHMsICZwcm9wcyk7CisJaWYgKElTX0VSUihibCkpIHsKKwkJZGV2X2VycigmZmJpLT5wZGV2LT5kZXYsICJlcnJvciAlbGQgb24gYmFja2xpZ2h0IHJlZ2lzdGVyXG4iLAorCQkJCVBUUl9FUlIoYmwpKTsKKwkJcmV0dXJuOworCX0KKworCWZiaS0+YmwgPSBibDsKKwlibC0+cHJvcHMucG93ZXIgPSBGQl9CTEFOS19VTkJMQU5LOworCWJsLT5wcm9wcy5mYl9ibGFuayA9IEZCX0JMQU5LX1VOQkxBTks7CisJYmwtPnByb3BzLmJyaWdodG5lc3MgPSBpbXhmYl9ibF9nZXRfYnJpZ2h0bmVzcyhibCk7Cit9CisKK3N0YXRpYyB2b2lkIGlteGZiX2V4aXRfYmFja2xpZ2h0KHN0cnVjdCBpbXhmYl9pbmZvICpmYmkpCit7CisJaWYgKGZiaS0+YmwpCisJCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihmYmktPmJsKTsKK30KKwogc3RhdGljIHZvaWQgaW14ZmJfZW5hYmxlX2NvbnRyb2xsZXIoc3RydWN0IGlteGZiX2luZm8gKmZiaSkKIHsKIAlwcl9kZWJ1ZygiRW5hYmxpbmcgTENEIGNvbnRyb2xsZXJcbiIpOwpAQCAtNTc5LDcgKzY0Nyw2IEBACiAJCQlmYmktPnJlZ3MgKyBMQ0RDX1NJWkUpOwogCiAJd3JpdGVsKGZiaS0+cGNyLCBmYmktPnJlZ3MgKyBMQ0RDX1BDUik7Ci0Jd3JpdGVsKGZiaS0+cHdtciwgZmJpLT5yZWdzICsgTENEQ19QV01SKTsKIAl3cml0ZWwoZmJpLT5sc2NyMSwgZmJpLT5yZWdzICsgTENEQ19MU0NSMSk7CiAJd3JpdGVsKGZiaS0+ZG1hY3IsIGZiaS0+cmVncyArIExDRENfRE1BQ1IpOwogCkBAIC03NzksNiArODQ2LDggQEAKIAl9CiAKIAlpbXhmYl9lbmFibGVfY29udHJvbGxlcihmYmkpOworCWZiaS0+cGRldiA9IHBkZXY7CisJaW14ZmJfaW5pdF9iYWNrbGlnaHQoZmJpKTsKIAogCXJldHVybiAwOwogCkBAIC04MTYsNiArODg1LDcgQEAKIAogCWlteGZiX2Rpc2FibGVfY29udHJvbGxlcihmYmkpOwogCisJaW14ZmJfZXhpdF9iYWNrbGlnaHQoZmJpKTsKIAl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOwogCiAJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vano0NzQwX2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL2p6NDc0MF9mYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MGVjYWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2p6NDc0MF9mYi5jCkBAIC0wLDAgKzEsODQ3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOS0yMDEwLCBMYXJzLVBldGVyIENsYXVzZW4gPGxhcnNAbWV0YWZvby5kZT4KKyAqCUpaNDc0MCBTb0MgTENEIGZyYW1lYnVmZmVyIGRyaXZlcgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorCisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLWp6NDc0MC9qejQ3NDBfZmIuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1qejQ3NDAvZ3Bpby5oPgorCisjZGVmaW5lIEpaX1JFR19MQ0RfQ0ZHCQkweDAwCisjZGVmaW5lIEpaX1JFR19MQ0RfVlNZTkMJMHgwNAorI2RlZmluZSBKWl9SRUdfTENEX0hTWU5DCTB4MDgKKyNkZWZpbmUgSlpfUkVHX0xDRF9WQVQJCTB4MEMKKyNkZWZpbmUgSlpfUkVHX0xDRF9EQUgJCTB4MTAKKyNkZWZpbmUgSlpfUkVHX0xDRF9EQVYJCTB4MTQKKyNkZWZpbmUgSlpfUkVHX0xDRF9QUwkJMHgxOAorI2RlZmluZSBKWl9SRUdfTENEX0NMUwkJMHgxQworI2RlZmluZSBKWl9SRUdfTENEX1NQTAkJMHgyMAorI2RlZmluZSBKWl9SRUdfTENEX1JFVgkJMHgyNAorI2RlZmluZSBKWl9SRUdfTENEX0NUUkwJCTB4MzAKKyNkZWZpbmUgSlpfUkVHX0xDRF9TVEFURQkweDM0CisjZGVmaW5lIEpaX1JFR19MQ0RfSUlECQkweDM4CisjZGVmaW5lIEpaX1JFR19MQ0RfREEwCQkweDQwCisjZGVmaW5lIEpaX1JFR19MQ0RfU0EwCQkweDQ0CisjZGVmaW5lIEpaX1JFR19MQ0RfRklEMAkJMHg0OAorI2RlZmluZSBKWl9SRUdfTENEX0NNRDAJCTB4NEMKKyNkZWZpbmUgSlpfUkVHX0xDRF9EQTEJCTB4NTAKKyNkZWZpbmUgSlpfUkVHX0xDRF9TQTEJCTB4NTQKKyNkZWZpbmUgSlpfUkVHX0xDRF9GSUQxCQkweDU4CisjZGVmaW5lIEpaX1JFR19MQ0RfQ01EMQkJMHg1QworCisjZGVmaW5lIEpaX0xDRF9DRkdfU0xDRAkJCUJJVCgzMSkKKyNkZWZpbmUgSlpfTENEX0NGR19QU19ESVNBQkxFCQlCSVQoMjMpCisjZGVmaW5lIEpaX0xDRF9DRkdfQ0xTX0RJU0FCTEUJCUJJVCgyMikKKyNkZWZpbmUgSlpfTENEX0NGR19TUExfRElTQUJMRQkJQklUKDIxKQorI2RlZmluZSBKWl9MQ0RfQ0ZHX1JFVl9ESVNBQkxFCQlCSVQoMjApCisjZGVmaW5lIEpaX0xDRF9DRkdfSFNZTkNNCQlCSVQoMTkpCisjZGVmaW5lIEpaX0xDRF9DRkdfUENMS00JCUJJVCgxOCkKKyNkZWZpbmUgSlpfTENEX0NGR19JTlYJCQlCSVQoMTcpCisjZGVmaW5lIEpaX0xDRF9DRkdfU1lOQ19ESVIJCUJJVCgxNikKKyNkZWZpbmUgSlpfTENEX0NGR19QU19QT0xBUklUWQkJQklUKDE1KQorI2RlZmluZSBKWl9MQ0RfQ0ZHX0NMU19QT0xBUklUWQkJQklUKDE0KQorI2RlZmluZSBKWl9MQ0RfQ0ZHX1NQTF9QT0xBUklUWQkJQklUKDEzKQorI2RlZmluZSBKWl9MQ0RfQ0ZHX1JFVl9QT0xBUklUWQkJQklUKDEyKQorI2RlZmluZSBKWl9MQ0RfQ0ZHX0hTWU5DX0FDVElWRV9MT1cJQklUKDExKQorI2RlZmluZSBKWl9MQ0RfQ0ZHX1BDTEtfRkFMTElOR19FREdFCUJJVCgxMCkKKyNkZWZpbmUgSlpfTENEX0NGR19ERV9BQ1RJVkVfTE9XCUJJVCg5KQorI2RlZmluZSBKWl9MQ0RfQ0ZHX1ZTWU5DX0FDVElWRV9MT1cJQklUKDgpCisjZGVmaW5lIEpaX0xDRF9DRkdfMThfQklUCQlCSVQoNykKKyNkZWZpbmUgSlpfTENEX0NGR19QRFcJCQkoQklUKDUpIHwgQklUKDQpKQorI2RlZmluZSBKWl9MQ0RfQ0ZHX01PREVfTUFTSyAweGYKKworI2RlZmluZSBKWl9MQ0RfQ1RSTF9CVVJTVF80CQkoMHgwIDw8IDI4KQorI2RlZmluZSBKWl9MQ0RfQ1RSTF9CVVJTVF84CQkoMHgxIDw8IDI4KQorI2RlZmluZSBKWl9MQ0RfQ1RSTF9CVVJTVF8xNgkJKDB4MiA8PCAyOCkKKyNkZWZpbmUgSlpfTENEX0NUUkxfUkdCNTU1CQlCSVQoMjcpCisjZGVmaW5lIEpaX0xDRF9DVFJMX09GVVAJCUJJVCgyNikKKyNkZWZpbmUgSlpfTENEX0NUUkxfRlJDX0dSQVlTQ0FMRV8xNgkoMHgwIDw8IDI0KQorI2RlZmluZSBKWl9MQ0RfQ1RSTF9GUkNfR1JBWVNDQUxFXzQJKDB4MSA8PCAyNCkKKyNkZWZpbmUgSlpfTENEX0NUUkxfRlJDX0dSQVlTQ0FMRV8yCSgweDIgPDwgMjQpCisjZGVmaW5lIEpaX0xDRF9DVFJMX1BERF9NQVNLCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgSlpfTENEX0NUUkxfRU9GX0lSUQkJQklUKDEzKQorI2RlZmluZSBKWl9MQ0RfQ1RSTF9TT0ZfSVJRCQlCSVQoMTIpCisjZGVmaW5lIEpaX0xDRF9DVFJMX09GVV9JUlEJCUJJVCgxMSkKKyNkZWZpbmUgSlpfTENEX0NUUkxfSUZVMF9JUlEJCUJJVCgxMCkKKyNkZWZpbmUgSlpfTENEX0NUUkxfSUZVMV9JUlEJCUJJVCg5KQorI2RlZmluZSBKWl9MQ0RfQ1RSTF9ERF9JUlEJCUJJVCg4KQorI2RlZmluZSBKWl9MQ0RfQ1RSTF9RRERfSVJRCQlCSVQoNykKKyNkZWZpbmUgSlpfTENEX0NUUkxfUkVWRVJTRV9FTkRJQU4JQklUKDYpCisjZGVmaW5lIEpaX0xDRF9DVFJMX0xTQl9GSVNSVAkJQklUKDUpCisjZGVmaW5lIEpaX0xDRF9DVFJMX0RJU0FCTEUJCUJJVCg0KQorI2RlZmluZSBKWl9MQ0RfQ1RSTF9FTkFCTEUJCUJJVCgzKQorI2RlZmluZSBKWl9MQ0RfQ1RSTF9CUFBfMQkJMHgwCisjZGVmaW5lIEpaX0xDRF9DVFJMX0JQUF8yCQkweDEKKyNkZWZpbmUgSlpfTENEX0NUUkxfQlBQXzQJCTB4MgorI2RlZmluZSBKWl9MQ0RfQ1RSTF9CUFBfOAkJMHgzCisjZGVmaW5lIEpaX0xDRF9DVFJMX0JQUF8xNV8xNgkJMHg0CisjZGVmaW5lIEpaX0xDRF9DVFJMX0JQUF8xOF8yNAkJMHg1CisKKyNkZWZpbmUgSlpfTENEX0NNRF9TT0ZfSVJRIEJJVCgxNSkKKyNkZWZpbmUgSlpfTENEX0NNRF9FT0ZfSVJRIEJJVCgxNikKKyNkZWZpbmUgSlpfTENEX0NNRF9FTkFCTEVfUEFMIEJJVCgxMikKKworI2RlZmluZSBKWl9MQ0RfU1lOQ19NQVNLIDB4M2ZmCisKKyNkZWZpbmUgSlpfTENEX1NUQVRFX0RJU0FCTEVEIEJJVCgwKQorCitzdHJ1Y3QganpmYl9mcmFtZWRlc2MgeworCXVpbnQzMl90IG5leHQ7CisJdWludDMyX3QgYWRkcjsKKwl1aW50MzJfdCBpZDsKKwl1aW50MzJfdCBjbWQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QganpmYiB7CisJc3RydWN0IGZiX2luZm8gKmZiOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCXN0cnVjdCByZXNvdXJjZSAqbWVtOworCXN0cnVjdCBqejQ3NDBfZmJfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisKKwlzaXplX3QgdmlkbWVtX3NpemU7CisJdm9pZCAqdmlkbWVtOworCWRtYV9hZGRyX3QgdmlkbWVtX3BoeXM7CisJc3RydWN0IGp6ZmJfZnJhbWVkZXNjICpmcmFtZWRlc2M7CisJZG1hX2FkZHJfdCBmcmFtZWRlc2NfcGh5czsKKworCXN0cnVjdCBjbGsgKmxkY2xrOworCXN0cnVjdCBjbGsgKmxwY2xrOworCisJdW5zaWduZWQgaXNfZW5hYmxlZDoxOworCXN0cnVjdCBtdXRleCBsb2NrOworCisJdWludDMyX3QgcHNldWRvX3BhbGV0dGVbMTZdOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyBqemZiX2ZpeCBfX2RldmluaXRkYXRhID0geworCS5pZAkJPSAiSlo0NzQwIEZCIiwKKwkudHlwZQkJPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFMsCisJLnZpc3VhbAkJPSBGQl9WSVNVQUxfVFJVRUNPTE9SLAorCS54cGFuc3RlcAk9IDAsCisJLnlwYW5zdGVwCT0gMCwKKwkueXdyYXBzdGVwCT0gMCwKKwkuYWNjZWwJCT0gRkJfQUNDRUxfTk9ORSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QganpfZ3Bpb19idWxrX3JlcXVlc3QganpfbGNkX2N0cmxfcGluc1tdID0geworCUpaX0dQSU9fQlVMS19QSU4oTENEX1BDTEspLAorCUpaX0dQSU9fQlVMS19QSU4oTENEX0hTWU5DKSwKKwlKWl9HUElPX0JVTEtfUElOKExDRF9WU1lOQyksCisJSlpfR1BJT19CVUxLX1BJTihMQ0RfREUpLAorCUpaX0dQSU9fQlVMS19QSU4oTENEX1BTKSwKKwlKWl9HUElPX0JVTEtfUElOKExDRF9SRVYpLAorCUpaX0dQSU9fQlVMS19QSU4oTENEX0NMUyksCisJSlpfR1BJT19CVUxLX1BJTihMQ0RfU1BMKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QganpfZ3Bpb19idWxrX3JlcXVlc3QganpfbGNkX2RhdGFfcGluc1tdID0geworCUpaX0dQSU9fQlVMS19QSU4oTENEX0RBVEEwKSwKKwlKWl9HUElPX0JVTEtfUElOKExDRF9EQVRBMSksCisJSlpfR1BJT19CVUxLX1BJTihMQ0RfREFUQTIpLAorCUpaX0dQSU9fQlVMS19QSU4oTENEX0RBVEEzKSwKKwlKWl9HUElPX0JVTEtfUElOKExDRF9EQVRBNCksCisJSlpfR1BJT19CVUxLX1BJTihMQ0RfREFUQTUpLAorCUpaX0dQSU9fQlVMS19QSU4oTENEX0RBVEE2KSwKKwlKWl9HUElPX0JVTEtfUElOKExDRF9EQVRBNyksCisJSlpfR1BJT19CVUxLX1BJTihMQ0RfREFUQTgpLAorCUpaX0dQSU9fQlVMS19QSU4oTENEX0RBVEE5KSwKKwlKWl9HUElPX0JVTEtfUElOKExDRF9EQVRBMTApLAorCUpaX0dQSU9fQlVMS19QSU4oTENEX0RBVEExMSksCisJSlpfR1BJT19CVUxLX1BJTihMQ0RfREFUQTEyKSwKKwlKWl9HUElPX0JVTEtfUElOKExDRF9EQVRBMTMpLAorCUpaX0dQSU9fQlVMS19QSU4oTENEX0RBVEExNCksCisJSlpfR1BJT19CVUxLX1BJTihMQ0RfREFUQTE1KSwKKwlKWl9HUElPX0JVTEtfUElOKExDRF9EQVRBMTYpLAorCUpaX0dQSU9fQlVMS19QSU4oTENEX0RBVEExNyksCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IGp6ZmJfbnVtX2N0cmxfcGlucyhzdHJ1Y3QganpmYiAqanpmYikKK3sKKwl1bnNpZ25lZCBpbnQgbnVtOworCisJc3dpdGNoIChqemZiLT5wZGF0YS0+bGNkX3R5cGUpIHsKKwljYXNlIEpaX0xDRF9UWVBFX0dFTkVSSUNfMTZfQklUOgorCQludW0gPSA0OworCQlicmVhazsKKwljYXNlIEpaX0xDRF9UWVBFX0dFTkVSSUNfMThfQklUOgorCQludW0gPSA0OworCQlicmVhazsKKwljYXNlIEpaX0xDRF9UWVBFXzhCSVRfU0VSSUFMOgorCQludW0gPSAzOworCQlicmVhazsKKwljYXNlIEpaX0xDRF9UWVBFX1NQRUNJQUxfVEZUXzE6CisJY2FzZSBKWl9MQ0RfVFlQRV9TUEVDSUFMX1RGVF8yOgorCWNhc2UgSlpfTENEX1RZUEVfU1BFQ0lBTF9URlRfMzoKKwkJbnVtID0gODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbnVtID0gMDsKKwkJYnJlYWs7CisJfQorCXJldHVybiBudW07Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQganpmYl9udW1fZGF0YV9waW5zKHN0cnVjdCBqemZiICpqemZiKQoreworCXVuc2lnbmVkIGludCBudW07CisKKwlzd2l0Y2ggKGp6ZmItPnBkYXRhLT5sY2RfdHlwZSkgeworCWNhc2UgSlpfTENEX1RZUEVfR0VORVJJQ18xNl9CSVQ6CisJCW51bSA9IDE2OworCQlicmVhazsKKwljYXNlIEpaX0xDRF9UWVBFX0dFTkVSSUNfMThfQklUOgorCQludW0gPSAxODsKKwkJYnJlYWs7CisJY2FzZSBKWl9MQ0RfVFlQRV84QklUX1NFUklBTDoKKwkJbnVtID0gODsKKwkJYnJlYWs7CisJY2FzZSBKWl9MQ0RfVFlQRV9TUEVDSUFMX1RGVF8xOgorCWNhc2UgSlpfTENEX1RZUEVfU1BFQ0lBTF9URlRfMjoKKwljYXNlIEpaX0xDRF9UWVBFX1NQRUNJQUxfVEZUXzM6CisJCWlmIChqemZiLT5wZGF0YS0+YnBwID09IDE4KQorCQkJbnVtID0gMTg7CisJCWVsc2UKKwkJCW51bSA9IDE2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQludW0gPSAwOworCQlicmVhazsKKwl9CisJcmV0dXJuIG51bTsKK30KKworLyogQmFzZWQgb24gQ05WVF9UT0hXIG1hY3JvIGZyb20gc2tlbGV0b25mYi5jICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGp6ZmJfY29udmVydF9jb2xvcl90b19odyh1bnNpZ25lZCB2YWwsCisJc3RydWN0IGZiX2JpdGZpZWxkICpiZikKK3sKKwlyZXR1cm4gKCgodmFsIDw8IGJmLT5sZW5ndGgpICsgMHg3RkZGIC0gdmFsKSA+PiAxNikgPDwgYmYtPm9mZnNldDsKK30KKworc3RhdGljIGludCBqemZiX3NldGNvbHJlZyh1bnNpZ25lZCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwKKwkJCXVuc2lnbmVkIGJsdWUsIHVuc2lnbmVkIHRyYW5zcCwgc3RydWN0IGZiX2luZm8gKmZiKQoreworCXVpbnQzMl90IGNvbG9yOworCisJaWYgKHJlZ25vID49IDE2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNvbG9yID0ganpmYl9jb252ZXJ0X2NvbG9yX3RvX2h3KHJlZCwgJmZiLT52YXIucmVkKTsKKwljb2xvciB8PSBqemZiX2NvbnZlcnRfY29sb3JfdG9faHcoZ3JlZW4sICZmYi0+dmFyLmdyZWVuKTsKKwljb2xvciB8PSBqemZiX2NvbnZlcnRfY29sb3JfdG9faHcoYmx1ZSwgJmZiLT52YXIuYmx1ZSk7CisJY29sb3IgfD0ganpmYl9jb252ZXJ0X2NvbG9yX3RvX2h3KHRyYW5zcCwgJmZiLT52YXIudHJhbnNwKTsKKworCSgodWludDMyX3QgKikoZmItPnBzZXVkb19wYWxldHRlKSlbcmVnbm9dID0gY29sb3I7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBqemZiX2dldF9jb250cm9sbGVyX2JwcChzdHJ1Y3QganpmYiAqanpmYikKK3sKKwlzd2l0Y2ggKGp6ZmItPnBkYXRhLT5icHApIHsKKwljYXNlIDE4OgorCWNhc2UgMjQ6CisJCXJldHVybiAzMjsKKwljYXNlIDE1OgorCQlyZXR1cm4gMTY7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGp6ZmItPnBkYXRhLT5icHA7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGZiX3ZpZGVvbW9kZSAqanpmYl9nZXRfbW9kZShzdHJ1Y3QganpmYiAqanpmYiwKKwlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcikKK3sKKwlzaXplX3QgaTsKKwlzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlID0ganpmYi0+cGRhdGEtPm1vZGVzOworCisJZm9yIChpID0gMDsgaSA8IGp6ZmItPnBkYXRhLT5udW1fbW9kZXM7ICsraSwgKyttb2RlKSB7CisJCWlmIChtb2RlLT54cmVzID09IHZhci0+eHJlcyAmJiBtb2RlLT55cmVzID09IHZhci0+eXJlcykKKwkJCXJldHVybiBtb2RlOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGp6ZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqZmIpCit7CisJc3RydWN0IGp6ZmIgKmp6ZmIgPSBmYi0+cGFyOworCXN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGU7CisKKwlpZiAodmFyLT5iaXRzX3Blcl9waXhlbCAhPSBqemZiX2dldF9jb250cm9sbGVyX2JwcChqemZiKSAmJgorCQl2YXItPmJpdHNfcGVyX3BpeGVsICE9IGp6ZmItPnBkYXRhLT5icHApCisJCXJldHVybiAtRUlOVkFMOworCisJbW9kZSA9IGp6ZmJfZ2V0X21vZGUoanpmYiwgdmFyKTsKKwlpZiAobW9kZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZiX3ZpZGVvbW9kZV90b192YXIodmFyLCBtb2RlKTsKKworCXN3aXRjaCAoanpmYi0+cGRhdGEtPmJwcCkgeworCWNhc2UgODoKKwkJYnJlYWs7CisJY2FzZSAxNToKKwkJdmFyLT5yZWQub2Zmc2V0ID0gMTA7CisJCXZhci0+cmVkLmxlbmd0aCA9IDU7CisJCXZhci0+Z3JlZW4ub2Zmc2V0ID0gNjsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA1OworCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKKwkJdmFyLT5ibHVlLmxlbmd0aCA9IDU7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCXZhci0+cmVkLm9mZnNldCA9IDExOworCQl2YXItPnJlZC5sZW5ndGggPSA1OworCQl2YXItPmdyZWVuLm9mZnNldCA9IDU7CisJCXZhci0+Z3JlZW4ubGVuZ3RoID0gNjsKKwkJdmFyLT5ibHVlLm9mZnNldCA9IDA7CisJCXZhci0+Ymx1ZS5sZW5ndGggPSA1OworCQlicmVhazsKKwljYXNlIDE4OgorCQl2YXItPnJlZC5vZmZzZXQgPSAxNjsKKwkJdmFyLT5yZWQubGVuZ3RoID0gNjsKKwkJdmFyLT5ncmVlbi5vZmZzZXQgPSA4OworCQl2YXItPmdyZWVuLmxlbmd0aCA9IDY7CisJCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOworCQl2YXItPmJsdWUubGVuZ3RoID0gNjsKKwkJdmFyLT5iaXRzX3Blcl9waXhlbCA9IDMyOworCQlicmVhazsKKwljYXNlIDMyOgorCWNhc2UgMjQ6CisJCXZhci0+dHJhbnNwLm9mZnNldCA9IDI0OworCQl2YXItPnRyYW5zcC5sZW5ndGggPSA4OworCQl2YXItPnJlZC5vZmZzZXQgPSAxNjsKKwkJdmFyLT5yZWQubGVuZ3RoID0gODsKKwkJdmFyLT5ncmVlbi5vZmZzZXQgPSA4OworCQl2YXItPmdyZWVuLmxlbmd0aCA9IDg7CisJCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOworCQl2YXItPmJsdWUubGVuZ3RoID0gODsKKwkJdmFyLT5iaXRzX3Blcl9waXhlbCA9IDMyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBqemZiX3NldF9wYXIoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGp6ZmIgKmp6ZmIgPSBpbmZvLT5wYXI7CisJc3RydWN0IGp6NDc0MF9mYl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGp6ZmItPnBkYXRhOworCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyID0gJmluZm8tPnZhcjsKKwlzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlOworCXVpbnQxNl90IGhkcywgdmRzOworCXVpbnQxNl90IGhkZSwgdmRlOworCXVpbnQxNl90IGh0LCB2dDsKKwl1aW50MzJfdCBjdHJsOworCXVpbnQzMl90IGNmZzsKKwl1bnNpZ25lZCBsb25nIHJhdGU7CisKKwltb2RlID0ganpmYl9nZXRfbW9kZShqemZiLCB2YXIpOworCWlmIChtb2RlID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG1vZGUgPT0gaW5mby0+bW9kZSkKKwkJcmV0dXJuIDA7CisKKwlpbmZvLT5tb2RlID0gbW9kZTsKKworCWhkcyA9IG1vZGUtPmhzeW5jX2xlbiArIG1vZGUtPmxlZnRfbWFyZ2luOworCWhkZSA9IGhkcyArIG1vZGUtPnhyZXM7CisJaHQgPSBoZGUgKyBtb2RlLT5yaWdodF9tYXJnaW47CisKKwl2ZHMgPSBtb2RlLT52c3luY19sZW4gKyBtb2RlLT51cHBlcl9tYXJnaW47CisJdmRlID0gdmRzICsgbW9kZS0+eXJlczsKKwl2dCA9IHZkZSArIG1vZGUtPmxvd2VyX21hcmdpbjsKKworCWN0cmwgPSBKWl9MQ0RfQ1RSTF9PRlVQIHwgSlpfTENEX0NUUkxfQlVSU1RfMTY7CisKKwlzd2l0Y2ggKHBkYXRhLT5icHApIHsKKwljYXNlIDE6CisJCWN0cmwgfD0gSlpfTENEX0NUUkxfQlBQXzE7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJY3RybCB8PSBKWl9MQ0RfQ1RSTF9CUFBfMjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQljdHJsIHw9IEpaX0xDRF9DVFJMX0JQUF80OworCQlicmVhazsKKwljYXNlIDg6CisJCWN0cmwgfD0gSlpfTENEX0NUUkxfQlBQXzg7CisJYnJlYWs7CisJY2FzZSAxNToKKwkJY3RybCB8PSBKWl9MQ0RfQ1RSTF9SR0I1NTU7IC8qIEZhbGx0cm91Z2ggKi8KKwljYXNlIDE2OgorCQljdHJsIHw9IEpaX0xDRF9DVFJMX0JQUF8xNV8xNjsKKwkJYnJlYWs7CisJY2FzZSAxODoKKwljYXNlIDI0OgorCWNhc2UgMzI6CisJCWN0cmwgfD0gSlpfTENEX0NUUkxfQlBQXzE4XzI0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwljZmcgPSBwZGF0YS0+bGNkX3R5cGUgJiAweGY7CisKKwlpZiAoIShtb2RlLT5zeW5jICYgRkJfU1lOQ19IT1JfSElHSF9BQ1QpKQorCQljZmcgfD0gSlpfTENEX0NGR19IU1lOQ19BQ1RJVkVfTE9XOworCisJaWYgKCEobW9kZS0+c3luYyAmIEZCX1NZTkNfVkVSVF9ISUdIX0FDVCkpCisJCWNmZyB8PSBKWl9MQ0RfQ0ZHX1ZTWU5DX0FDVElWRV9MT1c7CisKKwlpZiAocGRhdGEtPnBpeGNsa19mYWxsaW5nX2VkZ2UpCisJCWNmZyB8PSBKWl9MQ0RfQ0ZHX1BDTEtfRkFMTElOR19FREdFOworCisJaWYgKHBkYXRhLT5kYXRlX2VuYWJsZV9hY3RpdmVfbG93KQorCQljZmcgfD0gSlpfTENEX0NGR19ERV9BQ1RJVkVfTE9XOworCisJaWYgKHBkYXRhLT5sY2RfdHlwZSA9PSBKWl9MQ0RfVFlQRV9HRU5FUklDXzE4X0JJVCkKKwkJY2ZnIHw9IEpaX0xDRF9DRkdfMThfQklUOworCisJaWYgKG1vZGUtPnBpeGNsb2NrKSB7CisJCXJhdGUgPSBQSUNPUzJLSFoobW9kZS0+cGl4Y2xvY2spICogMTAwMDsKKwkJbW9kZS0+cmVmcmVzaCA9IHJhdGUgLyB2dCAvIGh0OworCX0gZWxzZSB7CisJCWlmIChwZGF0YS0+bGNkX3R5cGUgPT0gSlpfTENEX1RZUEVfOEJJVF9TRVJJQUwpCisJCQlyYXRlID0gbW9kZS0+cmVmcmVzaCAqICh2dCArIDIgKiBtb2RlLT54cmVzKSAqIGh0OworCQllbHNlCisJCQlyYXRlID0gbW9kZS0+cmVmcmVzaCAqIHZ0ICogaHQ7CisKKwkJbW9kZS0+cGl4Y2xvY2sgPSBLSFoyUElDT1MocmF0ZSAvIDEwMDApOworCX0KKworCW11dGV4X2xvY2soJmp6ZmItPmxvY2spOworCWlmICghanpmYi0+aXNfZW5hYmxlZCkKKwkJY2xrX2VuYWJsZShqemZiLT5sZGNsayk7CisJZWxzZQorCQljdHJsIHw9IEpaX0xDRF9DVFJMX0VOQUJMRTsKKworCXN3aXRjaCAocGRhdGEtPmxjZF90eXBlKSB7CisJY2FzZSBKWl9MQ0RfVFlQRV9TUEVDSUFMX1RGVF8xOgorCWNhc2UgSlpfTENEX1RZUEVfU1BFQ0lBTF9URlRfMjoKKwljYXNlIEpaX0xDRF9UWVBFX1NQRUNJQUxfVEZUXzM6CisJCXdyaXRlbChwZGF0YS0+c3BlY2lhbF90ZnRfY29uZmlnLnNwbCwganpmYi0+YmFzZSArIEpaX1JFR19MQ0RfU1BMKTsKKwkJd3JpdGVsKHBkYXRhLT5zcGVjaWFsX3RmdF9jb25maWcuY2xzLCBqemZiLT5iYXNlICsgSlpfUkVHX0xDRF9DTFMpOworCQl3cml0ZWwocGRhdGEtPnNwZWNpYWxfdGZ0X2NvbmZpZy5wcywganpmYi0+YmFzZSArIEpaX1JFR19MQ0RfUFMpOworCQl3cml0ZWwocGRhdGEtPnNwZWNpYWxfdGZ0X2NvbmZpZy5wcywganpmYi0+YmFzZSArIEpaX1JFR19MQ0RfUkVWKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY2ZnIHw9IEpaX0xDRF9DRkdfUFNfRElTQUJMRTsKKwkJY2ZnIHw9IEpaX0xDRF9DRkdfQ0xTX0RJU0FCTEU7CisJCWNmZyB8PSBKWl9MQ0RfQ0ZHX1NQTF9ESVNBQkxFOworCQljZmcgfD0gSlpfTENEX0NGR19SRVZfRElTQUJMRTsKKwkJYnJlYWs7CisJfQorCisJd3JpdGVsKG1vZGUtPmhzeW5jX2xlbiwganpmYi0+YmFzZSArIEpaX1JFR19MQ0RfSFNZTkMpOworCXdyaXRlbChtb2RlLT52c3luY19sZW4sIGp6ZmItPmJhc2UgKyBKWl9SRUdfTENEX1ZTWU5DKTsKKworCXdyaXRlbCgoaHQgPDwgMTYpIHwgdnQsIGp6ZmItPmJhc2UgKyBKWl9SRUdfTENEX1ZBVCk7CisKKwl3cml0ZWwoKGhkcyA8PCAxNikgfCBoZGUsIGp6ZmItPmJhc2UgKyBKWl9SRUdfTENEX0RBSCk7CisJd3JpdGVsKCh2ZHMgPDwgMTYpIHwgdmRlLCBqemZiLT5iYXNlICsgSlpfUkVHX0xDRF9EQVYpOworCisJd3JpdGVsKGNmZywganpmYi0+YmFzZSArIEpaX1JFR19MQ0RfQ0ZHKTsKKworCXdyaXRlbChjdHJsLCBqemZiLT5iYXNlICsgSlpfUkVHX0xDRF9DVFJMKTsKKworCWlmICghanpmYi0+aXNfZW5hYmxlZCkKKwkJY2xrX2Rpc2FibGUoanpmYi0+bGRjbGspOworCisJbXV0ZXhfdW5sb2NrKCZqemZiLT5sb2NrKTsKKworCWNsa19zZXRfcmF0ZShqemZiLT5scGNsaywgcmF0ZSk7CisJY2xrX3NldF9yYXRlKGp6ZmItPmxkY2xrLCByYXRlICogMyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQganpmYl9lbmFibGUoc3RydWN0IGp6ZmIgKmp6ZmIpCit7CisJdWludDMyX3QgY3RybDsKKworCWNsa19lbmFibGUoanpmYi0+bGRjbGspOworCisJanpfZ3Bpb19idWxrX3Jlc3VtZShqel9sY2RfY3RybF9waW5zLCBqemZiX251bV9jdHJsX3BpbnMoanpmYikpOworCWp6X2dwaW9fYnVsa19yZXN1bWUoanpfbGNkX2RhdGFfcGlucywganpmYl9udW1fZGF0YV9waW5zKGp6ZmIpKTsKKworCXdyaXRlbCgwLCBqemZiLT5iYXNlICsgSlpfUkVHX0xDRF9TVEFURSk7CisKKwl3cml0ZWwoanpmYi0+ZnJhbWVkZXNjLT5uZXh0LCBqemZiLT5iYXNlICsgSlpfUkVHX0xDRF9EQTApOworCisJY3RybCA9IHJlYWRsKGp6ZmItPmJhc2UgKyBKWl9SRUdfTENEX0NUUkwpOworCWN0cmwgfD0gSlpfTENEX0NUUkxfRU5BQkxFOworCWN0cmwgJj0gfkpaX0xDRF9DVFJMX0RJU0FCTEU7CisJd3JpdGVsKGN0cmwsIGp6ZmItPmJhc2UgKyBKWl9SRUdfTENEX0NUUkwpOworfQorCitzdGF0aWMgdm9pZCBqemZiX2Rpc2FibGUoc3RydWN0IGp6ZmIgKmp6ZmIpCit7CisJdWludDMyX3QgY3RybDsKKworCWN0cmwgPSByZWFkbChqemZiLT5iYXNlICsgSlpfUkVHX0xDRF9DVFJMKTsKKwljdHJsIHw9IEpaX0xDRF9DVFJMX0RJU0FCTEU7CisJd3JpdGVsKGN0cmwsIGp6ZmItPmJhc2UgKyBKWl9SRUdfTENEX0NUUkwpOworCWRvIHsKKwkJY3RybCA9IHJlYWRsKGp6ZmItPmJhc2UgKyBKWl9SRUdfTENEX1NUQVRFKTsKKwl9IHdoaWxlICghKGN0cmwgJiBKWl9MQ0RfU1RBVEVfRElTQUJMRUQpKTsKKworCWp6X2dwaW9fYnVsa19zdXNwZW5kKGp6X2xjZF9jdHJsX3BpbnMsIGp6ZmJfbnVtX2N0cmxfcGlucyhqemZiKSk7CisJanpfZ3Bpb19idWxrX3N1c3BlbmQoanpfbGNkX2RhdGFfcGlucywganpmYl9udW1fZGF0YV9waW5zKGp6ZmIpKTsKKworCWNsa19kaXNhYmxlKGp6ZmItPmxkY2xrKTsKK30KKworc3RhdGljIGludCBqemZiX2JsYW5rKGludCBibGFua19tb2RlLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QganpmYiAqanpmYiA9IGluZm8tPnBhcjsKKworCXN3aXRjaCAoYmxhbmtfbW9kZSkgeworCWNhc2UgRkJfQkxBTktfVU5CTEFOSzoKKwkJbXV0ZXhfbG9jaygmanpmYi0+bG9jayk7CisJCWlmIChqemZiLT5pc19lbmFibGVkKSB7CisJCQltdXRleF91bmxvY2soJmp6ZmItPmxvY2spOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlqemZiX2VuYWJsZShqemZiKTsKKwkJanpmYi0+aXNfZW5hYmxlZCA9IDE7CisKKwkJbXV0ZXhfdW5sb2NrKCZqemZiLT5sb2NrKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbXV0ZXhfbG9jaygmanpmYi0+bG9jayk7CisJCWlmICghanpmYi0+aXNfZW5hYmxlZCkgeworCQkJbXV0ZXhfdW5sb2NrKCZqemZiLT5sb2NrKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJanpmYl9kaXNhYmxlKGp6ZmIpOworCQlqemZiLT5pc19lbmFibGVkID0gMDsKKworCQltdXRleF91bmxvY2soJmp6ZmItPmxvY2spOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBqemZiX2FsbG9jX2Rldm1lbShzdHJ1Y3QganpmYiAqanpmYikKK3sKKwlpbnQgbWF4X3ZpZGVvc2l6ZSA9IDA7CisJc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZSA9IGp6ZmItPnBkYXRhLT5tb2RlczsKKwl2b2lkICpwYWdlOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGp6ZmItPnBkYXRhLT5udW1fbW9kZXM7ICsrbW9kZSwgKytpKSB7CisJCWlmIChtYXhfdmlkZW9zaXplIDwgbW9kZS0+eHJlcyAqIG1vZGUtPnlyZXMpCisJCQltYXhfdmlkZW9zaXplID0gbW9kZS0+eHJlcyAqIG1vZGUtPnlyZXM7CisJfQorCisJbWF4X3ZpZGVvc2l6ZSAqPSBqemZiX2dldF9jb250cm9sbGVyX2JwcChqemZiKSA+PiAzOworCisJanpmYi0+ZnJhbWVkZXNjID0gZG1hX2FsbG9jX2NvaGVyZW50KCZqemZiLT5wZGV2LT5kZXYsCisJCQkJCXNpemVvZigqanpmYi0+ZnJhbWVkZXNjKSwKKwkJCQkJJmp6ZmItPmZyYW1lZGVzY19waHlzLCBHRlBfS0VSTkVMKTsKKworCWlmICghanpmYi0+ZnJhbWVkZXNjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWp6ZmItPnZpZG1lbV9zaXplID0gUEFHRV9BTElHTihtYXhfdmlkZW9zaXplKTsKKwlqemZiLT52aWRtZW0gPSBkbWFfYWxsb2NfY29oZXJlbnQoJmp6ZmItPnBkZXYtPmRldiwKKwkJCQkJanpmYi0+dmlkbWVtX3NpemUsCisJCQkJCSZqemZiLT52aWRtZW1fcGh5cywgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWp6ZmItPnZpZG1lbSkKKwkJZ290byBlcnJfZnJlZV9mcmFtZWRlc2M7CisKKwlmb3IgKHBhZ2UgPSBqemZiLT52aWRtZW07CisJCSBwYWdlIDwganpmYi0+dmlkbWVtICsgUEFHRV9BTElHTihqemZiLT52aWRtZW1fc2l6ZSk7CisJCSBwYWdlICs9IFBBR0VfU0laRSkgeworCQlTZXRQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHBhZ2UpKTsKKwl9CisKKwlqemZiLT5mcmFtZWRlc2MtPm5leHQgPSBqemZiLT5mcmFtZWRlc2NfcGh5czsKKwlqemZiLT5mcmFtZWRlc2MtPmFkZHIgPSBqemZiLT52aWRtZW1fcGh5czsKKwlqemZiLT5mcmFtZWRlc2MtPmlkID0gMHhkZWFmYmVhZDsKKwlqemZiLT5mcmFtZWRlc2MtPmNtZCA9IDA7CisJanpmYi0+ZnJhbWVkZXNjLT5jbWQgfD0gbWF4X3ZpZGVvc2l6ZSAvIDQ7CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfZnJhbWVkZXNjOgorCWRtYV9mcmVlX2NvaGVyZW50KCZqemZiLT5wZGV2LT5kZXYsIHNpemVvZigqanpmYi0+ZnJhbWVkZXNjKSwKKwkJCQlqemZiLT5mcmFtZWRlc2MsIGp6ZmItPmZyYW1lZGVzY19waHlzKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQganpmYl9mcmVlX2Rldm1lbShzdHJ1Y3QganpmYiAqanpmYikKK3sKKwlkbWFfZnJlZV9jb2hlcmVudCgmanpmYi0+cGRldi0+ZGV2LCBqemZiLT52aWRtZW1fc2l6ZSwKKwkJCQlqemZiLT52aWRtZW0sIGp6ZmItPnZpZG1lbV9waHlzKTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmanpmYi0+cGRldi0+ZGV2LCBzaXplb2YoKmp6ZmItPmZyYW1lZGVzYyksCisJCQkJanpmYi0+ZnJhbWVkZXNjLCBqemZiLT5mcmFtZWRlc2NfcGh5cyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgIGZiX29wcyBqemZiX29wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZmJfY2hlY2tfdmFyID0ganpmYl9jaGVja192YXIsCisJLmZiX3NldF9wYXIgPSBqemZiX3NldF9wYXIsCisJLmZiX2JsYW5rID0ganpmYl9ibGFuaywKKwkuZmJfZmlsbHJlY3QJPSBzeXNfZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhCT0gc3lzX2NvcHlhcmVhLAorCS5mYl9pbWFnZWJsaXQJPSBzeXNfaW1hZ2VibGl0LAorCS5mYl9zZXRjb2xyZWcgPSBqemZiX3NldGNvbHJlZywKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGp6ZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBqemZiICpqemZiOworCXN0cnVjdCBmYl9pbmZvICpmYjsKKwlzdHJ1Y3Qgano0NzQwX2ZiX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHJlc291cmNlICptZW07CisKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk1pc3NpbmcgcGxhdGZvcm0gZGF0YVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIW1lbSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IHJlZ2lzdGVyIG1lbW9yeSByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJbWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSwgcGRldi0+bmFtZSk7CisJaWYgKCFtZW0pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgcmVnaXN0ZXIgbWVtb3J5IHJlZ2lvblxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJZmIgPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IGp6ZmIpLCAmcGRldi0+ZGV2KTsKKwlpZiAoIWZiKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBmcmFtZWJ1ZmZlciBkZXZpY2VcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9yZWxlYXNlX21lbV9yZWdpb247CisJfQorCisJZmItPmZib3BzID0gJmp6ZmJfb3BzOworCWZiLT5mbGFncyA9IEZCSU5GT19ERUZBVUxUOworCisJanpmYiA9IGZiLT5wYXI7CisJanpmYi0+cGRldiA9IHBkZXY7CisJanpmYi0+cGRhdGEgPSBwZGF0YTsKKwlqemZiLT5tZW0gPSBtZW07CisKKwlqemZiLT5sZGNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImxjZCIpOworCWlmIChJU19FUlIoanpmYi0+bGRjbGspKSB7CisJCXJldCA9IFBUUl9FUlIoanpmYi0+bGRjbGspOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IGxjZCBjbG9jazogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2ZyYW1lYnVmZmVyX3JlbGVhc2U7CisJfQorCisJanpmYi0+bHBjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJsY2RfcGNsayIpOworCWlmIChJU19FUlIoanpmYi0+bHBjbGspKSB7CisJCXJldCA9IFBUUl9FUlIoanpmYi0+bHBjbGspOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IGxjZCBwaXhlbCBjbG9jazogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3B1dF9sZGNsazsKKwl9CisKKwlqemZiLT5iYXNlID0gaW9yZW1hcChtZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbSkpOworCWlmICghanpmYi0+YmFzZSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gaW9yZW1hcCByZWdpc3RlciBtZW1vcnkgcmVnaW9uXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycl9wdXRfbHBjbGs7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwganpmYik7CisKKwltdXRleF9pbml0KCZqemZiLT5sb2NrKTsKKworCWZiX3ZpZGVvbW9kZV90b19tb2RlbGlzdChwZGF0YS0+bW9kZXMsIHBkYXRhLT5udW1fbW9kZXMsCisJCQkJICZmYi0+bW9kZWxpc3QpOworCWZiX3ZpZGVvbW9kZV90b192YXIoJmZiLT52YXIsIHBkYXRhLT5tb2Rlcyk7CisJZmItPnZhci5iaXRzX3Blcl9waXhlbCA9IHBkYXRhLT5icHA7CisJanpmYl9jaGVja192YXIoJmZiLT52YXIsIGZiKTsKKworCXJldCA9IGp6ZmJfYWxsb2NfZGV2bWVtKGp6ZmIpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHZpZGVvIG1lbW9yeVxuIik7CisJCWdvdG8gZXJyX2lvdW5tYXA7CisJfQorCisJZmItPmZpeCA9IGp6ZmJfZml4OworCWZiLT5maXgubGluZV9sZW5ndGggPSBmYi0+dmFyLmJpdHNfcGVyX3BpeGVsICogZmItPnZhci54cmVzIC8gODsKKwlmYi0+Zml4Lm1taW9fc3RhcnQgPSBtZW0tPnN0YXJ0OworCWZiLT5maXgubW1pb19sZW4gPSByZXNvdXJjZV9zaXplKG1lbSk7CisJZmItPmZpeC5zbWVtX3N0YXJ0ID0ganpmYi0+dmlkbWVtX3BoeXM7CisJZmItPmZpeC5zbWVtX2xlbiA9ICBmYi0+Zml4LmxpbmVfbGVuZ3RoICogZmItPnZhci55cmVzOworCWZiLT5zY3JlZW5fYmFzZSA9IGp6ZmItPnZpZG1lbTsKKwlmYi0+cHNldWRvX3BhbGV0dGUgPSBqemZiLT5wc2V1ZG9fcGFsZXR0ZTsKKworCWZiX2FsbG9jX2NtYXAoJmZiLT5jbWFwLCAyNTYsIDApOworCisJY2xrX2VuYWJsZShqemZiLT5sZGNsayk7CisJanpmYi0+aXNfZW5hYmxlZCA9IDE7CisKKwl3cml0ZWwoanpmYi0+ZnJhbWVkZXNjLT5uZXh0LCBqemZiLT5iYXNlICsgSlpfUkVHX0xDRF9EQTApOworCisJZmItPm1vZGUgPSBOVUxMOworCWp6ZmJfc2V0X3BhcihmYik7CisKKwlqel9ncGlvX2J1bGtfcmVxdWVzdChqel9sY2RfY3RybF9waW5zLCBqemZiX251bV9jdHJsX3BpbnMoanpmYikpOworCWp6X2dwaW9fYnVsa19yZXF1ZXN0KGp6X2xjZF9kYXRhX3BpbnMsIGp6ZmJfbnVtX2RhdGFfcGlucyhqemZiKSk7CisKKwlyZXQgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihmYik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgZnJhbWVidWZmZXI6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9mcmVlX2Rldm1lbTsKKwl9CisKKwlqemZiLT5mYiA9IGZiOworCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2Rldm1lbToKKwlqel9ncGlvX2J1bGtfZnJlZShqel9sY2RfY3RybF9waW5zLCBqemZiX251bV9jdHJsX3BpbnMoanpmYikpOworCWp6X2dwaW9fYnVsa19mcmVlKGp6X2xjZF9kYXRhX3BpbnMsIGp6ZmJfbnVtX2RhdGFfcGlucyhqemZiKSk7CisKKwlmYl9kZWFsbG9jX2NtYXAoJmZiLT5jbWFwKTsKKwlqemZiX2ZyZWVfZGV2bWVtKGp6ZmIpOworZXJyX2lvdW5tYXA6CisJaW91bm1hcChqemZiLT5iYXNlKTsKK2Vycl9wdXRfbHBjbGs6CisJY2xrX3B1dChqemZiLT5scGNsayk7CitlcnJfcHV0X2xkY2xrOgorCWNsa19wdXQoanpmYi0+bGRjbGspOworZXJyX2ZyYW1lYnVmZmVyX3JlbGVhc2U6CisJZnJhbWVidWZmZXJfcmVsZWFzZShmYik7CitlcnJfcmVsZWFzZV9tZW1fcmVnaW9uOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbSkpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGp6ZmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGp6ZmIgKmp6ZmIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWp6ZmJfYmxhbmsoRkJfQkxBTktfUE9XRVJET1dOLCBqemZiLT5mYik7CisKKwlqel9ncGlvX2J1bGtfZnJlZShqel9sY2RfY3RybF9waW5zLCBqemZiX251bV9jdHJsX3BpbnMoanpmYikpOworCWp6X2dwaW9fYnVsa19mcmVlKGp6X2xjZF9kYXRhX3BpbnMsIGp6ZmJfbnVtX2RhdGFfcGlucyhqemZiKSk7CisKKwlpb3VubWFwKGp6ZmItPmJhc2UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihqemZiLT5tZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKGp6ZmItPm1lbSkpOworCisJZmJfZGVhbGxvY19jbWFwKCZqemZiLT5mYi0+Y21hcCk7CisJanpmYl9mcmVlX2Rldm1lbShqemZiKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJY2xrX3B1dChqemZiLT5scGNsayk7CisJY2xrX3B1dChqemZiLT5sZGNsayk7CisKKwlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGp6ZmItPmZiKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyBpbnQganpmYl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QganpmYiAqanpmYiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWZiX3NldF9zdXNwZW5kKGp6ZmItPmZiLCAxKTsKKwlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisKKwltdXRleF9sb2NrKCZqemZiLT5sb2NrKTsKKwlpZiAoanpmYi0+aXNfZW5hYmxlZCkKKwkJanpmYl9kaXNhYmxlKGp6ZmIpOworCW11dGV4X3VubG9jaygmanpmYi0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBqemZiX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGp6ZmIgKmp6ZmIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwljbGtfZW5hYmxlKGp6ZmItPmxkY2xrKTsKKworCW11dGV4X2xvY2soJmp6ZmItPmxvY2spOworCWlmIChqemZiLT5pc19lbmFibGVkKQorCQlqemZiX2VuYWJsZShqemZiKTsKKwltdXRleF91bmxvY2soJmp6ZmItPmxvY2spOworCisJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWZiX3NldF9zdXNwZW5kKGp6ZmItPmZiLCAwKTsKKwlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGp6ZmJfcG1fb3BzID0geworCS5zdXNwZW5kCT0ganpmYl9zdXNwZW5kLAorCS5yZXN1bWUJCT0ganpmYl9yZXN1bWUsCisJLnBvd2Vyb2ZmCT0ganpmYl9zdXNwZW5kLAorCS5yZXN0b3JlCT0ganpmYl9yZXN1bWUsCit9OworCisjZGVmaW5lIEpaRkJfUE1fT1BTICgmanpmYl9wbV9vcHMpCisKKyNlbHNlCisjZGVmaW5lIEpaRkJfUE1fT1BTIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBqemZiX2RyaXZlciA9IHsKKwkucHJvYmUgPSBqemZiX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChqemZiX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiano0NzQwLWZiIiwKKwkJLnBtID0gSlpGQl9QTV9PUFMsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGp6ZmJfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmp6ZmJfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGp6ZmJfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBqemZiX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmanpmYl9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoanpmYl9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkpaNDc0MCBTb0MgTENEIGZyYW1lYnVmZmVyIGRyaXZlciIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpqejQ3NDAtZmIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbGVvLmMgYi9kcml2ZXJzL3ZpZGVvL2xlby5jCmluZGV4IDllOGJmN2QuLmFkNjc3NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbGVvLmMKKysrIGIvZHJpdmVycy92aWRlby9sZW8uYwpAQCAtNjc3LDEyICs2NzcsMTIgQEAKIAlpZiAoZmJfZ2V0X29wdGlvbnMoImxlb2ZiIiwgTlVMTCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0dXJuIG9mX3JlZ2lzdGVyX2RyaXZlcigmbGVvX2RyaXZlciwgJm9mX2J1c190eXBlKTsKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZsZW9fZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGxlb19leGl0KHZvaWQpCiB7Ci0Jb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoJmxlb19kcml2ZXIpOworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZsZW9fZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQobGVvX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vZmZiLmMgYi9kcml2ZXJzL3ZpZGVvL29mZmIuYwppbmRleCA0NmRkYTdkLi5jYjE2M2E1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vZmZiLmMKKysrIGIvZHJpdmVycy92aWRlby9vZmZiLmMKQEAgLTE5LDEzICsxOSwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb20uaD4KIAogI2lmZGVmIENPTkZJR19QUEM2NAogI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL3BhbmVsLWFjeDU2NWFrbS5jIGIvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9wYW5lbC1hY3g1NjVha20uYwppbmRleCAxZjhlYjcwLi4wN2ZiYjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL3BhbmVsLWFjeDU2NWFrbS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvcGFuZWwtYWN4NTY1YWttLmMKQEAgLTU5Miw3ICs1OTIsNyBAQAogCXIgPSBvbWFwZHNzX3NkaV9kaXNwbGF5X2VuYWJsZShkc3NkZXYpOwogCWlmIChyKSB7CiAJCXByX2VycigiJXMgc2RpIGVuYWJsZSBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIHI7CisJCWdvdG8gZmFpbF91bmxvY2s7CiAJfQogCiAJLypGSVhNRSB0d2VhayBtZSAqLwpAQCAtNjMzLDYgKzYzMyw4IEBACiAJcmV0dXJuIGFjeDU2NWFrbV9ibF91cGRhdGVfc3RhdHVzKG1kLT5ibF9kZXYpOwogZmFpbDoKIAlvbWFwZHNzX3NkaV9kaXNwbGF5X2Rpc2FibGUoZHNzZGV2KTsKK2ZhaWxfdW5sb2NrOgorCW11dGV4X3VubG9jaygmbWQtPm11dGV4KTsKIAlyZXR1cm4gcjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi92cmFtLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL3ZyYW0uYwppbmRleCAzYjEyMzdhLi5mNmZkYzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL3ZyYW0uYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL3ZyYW0uYwpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KQEAgLTUyNSwxMCArNTI1LDggQEAKICAqIENhbGxlZCBmcm9tIG1hcF9pby4gV2UgbmVlZCB0byBjYWxsIHRvIHRoaXMgZWFybHkgZW5vdWdoIHNvIHRoYXQgd2UKICAqIGNhbiByZXNlcnZlIHRoZSBmaXhlZCBTRFJBTSByZWdpb25zIGJlZm9yZSBWTSBjb3VsZCBnZXQgaG9sZCBvZiB0aGVtLgogICovCi12b2lkIF9faW5pdCBvbWFwX3ZyYW1fcmVzZXJ2ZV9zZHJhbSh2b2lkKQordm9pZCBfX2luaXQgb21hcF92cmFtX3Jlc2VydmVfc2RyYW1fbWVtYmxvY2sodm9pZCkKIHsKLQlzdHJ1Y3QgYm9vdG1lbV9kYXRhCSpiZGF0YTsKLQl1bnNpZ25lZCBsb25nCQlzZHJhbV9zdGFydCwgc2RyYW1fc2l6ZTsKIAl1MzIgcGFkZHI7CiAJdTMyIHNpemUgPSAwOwogCkBAIC01NTUsMjkgKzU1MywyOCBAQAogCiAJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CiAKLQliZGF0YSA9IE5PREVfREFUQSgwKS0+YmRhdGE7Ci0Jc2RyYW1fc3RhcnQgPSBiZGF0YS0+bm9kZV9taW5fcGZuIDw8IFBBR0VfU0hJRlQ7Ci0Jc2RyYW1fc2l6ZSA9IChiZGF0YS0+bm9kZV9sb3dfcGZuIDw8IFBBR0VfU0hJRlQpIC0gc2RyYW1fc3RhcnQ7Ci0KIAlpZiAocGFkZHIpIHsKLQkJaWYgKChwYWRkciAmIH5QQUdFX01BU0spIHx8IHBhZGRyIDwgc2RyYW1fc3RhcnQgfHwKLQkJCQlwYWRkciArIHNpemUgPiBzZHJhbV9zdGFydCArIHNkcmFtX3NpemUpIHsKKwkJc3RydWN0IG1lbWJsb2NrX3Byb3BlcnR5IHJlczsKKworCQlyZXMuYmFzZSA9IHBhZGRyOworCQlyZXMuc2l6ZSA9IHNpemU7CisJCWlmICgocGFkZHIgJiB+UEFHRV9NQVNLKSB8fCBtZW1ibG9ja19maW5kKCZyZXMpIHx8CisJCSAgICByZXMuYmFzZSAhPSBwYWRkciB8fCByZXMuc2l6ZSAhPSBzaXplKSB7CiAJCQlwcl9lcnIoIklsbGVnYWwgU0RSQU0gcmVnaW9uIGZvciBWUkFNXG4iKTsKIAkJCXJldHVybjsKIAkJfQogCi0JCWlmIChyZXNlcnZlX2Jvb3RtZW0ocGFkZHIsIHNpemUsIEJPT1RNRU1fRVhDTFVTSVZFKSA8IDApIHsKLQkJCXByX2VycigiRkI6IGZhaWxlZCB0byByZXNlcnZlIFZSQU1cbiIpOwotCQkJcmV0dXJuOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKHNpemUgPiBzZHJhbV9zaXplKSB7Ci0JCQlwcl9lcnIoIklsbGVnYWwgU0RSQU0gc2l6ZSBmb3IgVlJBTVxuIik7CisJCWlmIChtZW1ibG9ja19pc19yZWdpb25fcmVzZXJ2ZWQocGFkZHIsIHNpemUpKSB7CisJCQlwcl9lcnIoIkZCOiBmYWlsZWQgdG8gcmVzZXJ2ZSBWUkFNIC0gYnVzeVxuIik7CiAJCQlyZXR1cm47CiAJCX0KIAotCQlwYWRkciA9IHZpcnRfdG9fcGh5cyhhbGxvY19ib290bWVtX3BhZ2VzKHNpemUpKTsKLQkJQlVHX09OKHBhZGRyICYgflBBR0VfTUFTSyk7CisJCWlmIChtZW1ibG9ja19yZXNlcnZlKHBhZGRyLCBzaXplKSA8IDApIHsKKwkJCXByX2VycigiRkI6IGZhaWxlZCB0byByZXNlcnZlIFZSQU0gLSBubyBtZW1vcnlcbiIpOworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIHsKKwkJcGFkZHIgPSBtZW1ibG9ja19hbGxvY19iYXNlKHNpemUsIFBBR0VfU0laRSwgTUVNQkxPQ0tfUkVBTF9MSU1JVCk7CiAJfQogCiAJb21hcF92cmFtX2FkZF9yZWdpb24ocGFkZHIsIHNpemUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wOTEwMC5jIGIvZHJpdmVycy92aWRlby9wOTEwMC5jCmluZGV4IDY1NTI3NTEuLjY4OGIwNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcDkxMDAuYworKysgYi9kcml2ZXJzL3ZpZGVvL3A5MTAwLmMKQEAgLTM2NywxMiArMzY3LDEyIEBACiAJaWYgKGZiX2dldF9vcHRpb25zKCJwOTEwMGZiIiwgTlVMTCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0dXJuIG9mX3JlZ2lzdGVyX2RyaXZlcigmcDkxMDBfZHJpdmVyLCAmb2ZfYnVzX3R5cGUpOworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnA5MTAwX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwOTEwMF9leGl0KHZvaWQpCiB7Ci0Jb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoJnA5MTAwX2RyaXZlcik7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnA5MTAwX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHA5MTAwX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wbWFnLWJhLWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3BtYWctYmEtZmIuYwppbmRleCAwZjM2MWI2Li4wYzY5ZmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3BtYWctYmEtZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3BtYWctYmEtZmIuYwpAQCAtNDQsNyArNDQsNyBAQAogfTsKIAogCi1zdGF0aWMgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIHBtYWdiYWZiX2RlZmluZWQgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gcG1hZ2JhZmJfZGVmaW5lZCBfX2RldmluaXRkYXRhID0gewogCS54cmVzCQk9IDEwMjQsCiAJLnlyZXMJCT0gODY0LAogCS54cmVzX3ZpcnR1YWwJPSAxMDI0LApAQCAtNjgsNyArNjgsNyBAQAogCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAogfTsKIAotc3RhdGljIHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyBwbWFnYmFmYl9maXggX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gcG1hZ2JhZmJfZml4IF9fZGV2aW5pdGRhdGEgPSB7CiAJLmlkCQk9ICJQTUFHLUJBIiwKIAkuc21lbV9sZW4JPSAoMTAyNCAqIDEwMjQpLAogCS50eXBlCQk9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUywKQEAgLTE0Miw3ICsxNDIsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgX19pbml0IHBtYWdiYWZiX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBtYWdiYWZiX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdGNfZGV2ICp0ZGV2ID0gdG9fdGNfZGV2KGRldik7CiAJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCBsZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3BtYWdiLWItZmIuYyBiL2RyaXZlcnMvdmlkZW8vcG1hZ2ItYi1mYi5jCmluZGV4IDJkZTA4MDYuLjIyZmNiOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcG1hZ2ItYi1mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcG1hZ2ItYi1mYi5jCkBAIC00NSw3ICs0NSw3IEBACiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gcG1hZ2JiZmJfZGVmaW5lZCBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyBwbWFnYmJmYl9kZWZpbmVkIF9fZGV2aW5pdGRhdGEgPSB7CiAJLmJpdHNfcGVyX3BpeGVsCT0gOCwKIAkucmVkLmxlbmd0aAk9IDgsCiAJLmdyZWVuLmxlbmd0aAk9IDgsCkBAIC01OCw3ICs1OCw3IEBACiAJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvIHBtYWdiYmZiX2ZpeCBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyBwbWFnYmJmYl9maXggX19kZXZpbml0ZGF0YSA9IHsKIAkuaWQJCT0gIlBNQUdCLUJBIiwKIAkuc21lbV9sZW4JPSAoMjA0OCAqIDEwMjQpLAogCS50eXBlCQk9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUywKQEAgLTE0OCw3ICsxNDgsNyBAQAogLyoKICAqIFNldCB1cCBzY3JlZW4gcGFyYW1ldGVycy4KICAqLwotc3RhdGljIHZvaWQgX19pbml0IHBtYWdiYmZiX3NjcmVlbl9zZXR1cChzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBwbWFnYmJmYl9zY3JlZW5fc2V0dXAoc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IHBtYWdiYmZiX3BhciAqcGFyID0gaW5mby0+cGFyOwogCkBAIC0xODAsOSArMTgwLDkgQEAKIC8qCiAgKiBEZXRlcm1pbmUgb3NjaWxsYXRvciBjb25maWd1cmF0aW9uLgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgcG1hZ2JiZmJfb3NjX3NldHVwKHN0cnVjdCBmYl9pbmZvICppbmZvKQorc3RhdGljIHZvaWQgX19kZXZpbml0IHBtYWdiYmZiX29zY19zZXR1cChzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKLQlzdGF0aWMgdW5zaWduZWQgaW50IHBtYWdiYmZiX2ZyZXFzW10gX19pbml0ZGF0YSA9IHsKKwlzdGF0aWMgdW5zaWduZWQgaW50IHBtYWdiYmZiX2ZyZXFzW10gX19kZXZpbml0ZGF0YSA9IHsKIAkJMTMwODA4LCAxMTk4NDMsIDEwNDAwMCwgOTI5ODAsIDc0MzcwLCA3MjgwMCwKIAkJNjkxOTcsIDY2MDAwLCA2NTAwMCwgNTAzNTAsIDM2MDAwLCAzMjAwMCwgMjUxNzUKIAl9OwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiB9OwogCiAKLXN0YXRpYyBpbnQgX19pbml0IHBtYWdiYmZiX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBtYWdiYmZiX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdGNfZGV2ICp0ZGV2ID0gdG9fdGNfZGV2KGRldik7CiAJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCBsZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3N1bnh2cjEwMDAuYyBiL2RyaXZlcnMvdmlkZW8vc3VueHZyMTAwMC5jCmluZGV4IDQ4OWI0NGUuLjcyODg5MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc3VueHZyMTAwMC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc3VueHZyMTAwMC5jCkBAIC0yMTMsMTIgKzIxMywxMiBAQAogCWlmIChmYl9nZXRfb3B0aW9ucygiZ2ZiIiwgTlVMTCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0dXJuIG9mX3JlZ2lzdGVyX2RyaXZlcigmZ2ZiX2RyaXZlciwgJm9mX2J1c190eXBlKTsKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZnZmJfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGdmYl9leGl0KHZvaWQpCiB7Ci0Jb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoJmdmYl9kcml2ZXIpOworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZnZmJfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoZ2ZiX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby90Y3guYyBiL2RyaXZlcnMvdmlkZW8vdGN4LmMKaW5kZXggY2MwMzliMy4uZjM3NWUwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby90Y3guYworKysgYi9kcml2ZXJzL3ZpZGVvL3RjeC5jCkBAIC01MjYsMTIgKzUyNiwxMiBAQAogCWlmIChmYl9nZXRfb3B0aW9ucygidGN4ZmIiLCBOVUxMKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXR1cm4gb2ZfcmVnaXN0ZXJfZHJpdmVyKCZ0Y3hfZHJpdmVyLCAmb2ZfYnVzX3R5cGUpOworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnRjeF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgdGN4X2V4aXQodm9pZCkKIHsKLQlvZl91bnJlZ2lzdGVyX2RyaXZlcigmdGN4X2RyaXZlcik7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnRjeF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdCh0Y3hfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3RkZnhmYi5jIGIvZHJpdmVycy92aWRlby90ZGZ4ZmIuYwppbmRleCA5ODA1NDgzLi4zZWU1ZTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3RkZnhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdGRmeGZiLmMKQEAgLTE1NzEsOCArMTU3MSw4IEBACiAJaWYgKGRlZmF1bHRfcGFyLT5tdHJyX2hhbmRsZSA+PSAwKQogCQltdHJyX2RlbChkZWZhdWx0X3Bhci0+bXRycl9oYW5kbGUsIGluZm8tPmZpeC5zbWVtX3N0YXJ0LAogCQkJIGluZm8tPmZpeC5zbWVtX2xlbik7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKSwKLQkJCSAgIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMikpOworCXJlbGVhc2VfcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKSwKKwkJICAgICAgIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMikpOwogb3V0X2Vycl9zY3JlZW5iYXNlOgogCWlmIChpbmZvLT5zY3JlZW5fYmFzZSkKIAkJaW91bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3RnYWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3RnYWZiLmMKaW5kZXggMWIzYjFjNy4uYWJhNzY4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby90Z2FmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdGdhZmIuYwpAQCAtMzA1LDcgKzMwNSw3IEBACiAJVEdBX1dSSVRFX1JFRyhwYXIsIGh0aW1pbmdzLCBUR0FfSE9SSVpfUkVHKTsKIAlUR0FfV1JJVEVfUkVHKHBhciwgdnRpbWluZ3MsIFRHQV9WRVJUX1JFRyk7CiAKLQkvKiBJbml0YWxpc2UgUkFNREFDLiAqLworCS8qIEluaXRpYWxpc2UgUkFNREFDLiAqLwogCWlmICh0Z2FfdHlwZSA9PSBUR0FfVFlQRV84UExBTkUgJiYgdGdhX2J1c19wY2kpIHsKIAogCQkvKiBJbml0IEJUNDg1IFJBTURBQyByZWdpc3RlcnMuICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby94ZW4tZmJmcm9udC5jIGIvZHJpdmVycy92aWRlby94ZW4tZmJmcm9udC5jCmluZGV4IGZhOTdkM2UuLjdjN2Y0MmExMiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby94ZW4tZmJmcm9udC5jCisrKyBiL2RyaXZlcnMvdmlkZW8veGVuLWZiZnJvbnQuYwpAQCAtNjg0LDcgKzY4NCw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHhlbmZiX2luaXQodm9pZCkKIHsKLQlpZiAoIXhlbl9kb21haW4oKSkKKwlpZiAoIXhlbl9wdl9kb21haW4oKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBOb3RoaW5nIHRvIGRvIGlmIHJ1bm5pbmcgaW4gZG9tMC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8veGlsaW54ZmIuYyBiL2RyaXZlcnMvdmlkZW8veGlsaW54ZmIuYwppbmRleCA1NzRkYzU0Li4yOWI1ZGFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3hpbGlueGZiLmMKKysrIGIvZHJpdmVycy92aWRlby94aWxpbnhmYi5jCkBAIC00ODUsNiArNDg1LDggQEAKIC8qIE1hdGNoIHRhYmxlIGZvciBvZl9wbGF0Zm9ybSBiaW5kaW5nICovCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCB4aWxpbnhmYl9vZl9tYXRjaFtdIF9fZGV2aW5pdGRhdGEgPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJ4bG54LHhwcy10ZnQtMS4wMC5hIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gInhsbngseHBzLXRmdC0yLjAwLmEiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAieGxueCx4cHMtdGZ0LTIuMDEuYSIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJ4bG54LHBsYi10ZnQtY250bHItcmVmLTEuMDAuYSIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJ4bG54LHBsYi1kdmktY250bHItcmVmLTEuMDAuYyIsIH0sCiAJe30sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYwppbmRleCBhZmU3ZTIxLi4xNDc1ZWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKQEAgLTE2NCw3ICsxNjQsOCBAQAogCQkJICBnZnBfdCBnZnApCiB7CiAJc3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnEgPSB0b192dnEoX3ZxKTsKLQl1bnNpZ25lZCBpbnQgaSwgYXZhaWwsIGhlYWQsIHVuaW5pdGlhbGl6ZWRfdmFyKHByZXYpOworCXVuc2lnbmVkIGludCBpLCBhdmFpbCwgdW5pbml0aWFsaXplZF92YXIocHJldik7CisJaW50IGhlYWQ7CiAKIAlTVEFSVF9VU0UodnEpOwogCkBAIC0xNzQsNyArMTc1LDcgQEAKIAkgKiBidWZmZXJzLCB0aGVuIGdvIGluZGlyZWN0LiBGSVhNRTogdHVuZSB0aGlzIHRocmVzaG9sZCAqLwogCWlmICh2cS0+aW5kaXJlY3QgJiYgKG91dCArIGluKSA+IDEgJiYgdnEtPm51bV9mcmVlKSB7CiAJCWhlYWQgPSB2cmluZ19hZGRfaW5kaXJlY3QodnEsIHNnLCBvdXQsIGluLCBnZnApOwotCQlpZiAoaGVhZCAhPSB2cS0+dnJpbmcubnVtKQorCQlpZiAobGlrZWx5KGhlYWQgPj0gMCkpCiAJCQlnb3RvIGFkZF9oZWFkOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCmluZGV4IGFmY2ZhY2MuLmIwNGIxODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZworKysgYi9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKQEAgLTg3NSw2ICs4NzUsMjQgQEAKIAloZWxwCiAJICBIYXJkd2FyZSBkcml2ZXIgZm9yIHRoZSBidWlsdC1pbiB3YXRjaGRvZyB0aW1lciBvbiBUWHg5IE1JUFMgU29Dcy4KIAorY29uZmlnIE9DVEVPTl9XRFQKKwl0cmlzdGF0ZSAiQ2F2aXVtIE9DVEVPTiBTT0MgZmFtaWx5IFdhdGNoZG9nIFRpbWVyIgorCWRlcGVuZHMgb24gQ1BVX0NBVklVTV9PQ1RFT04KKwlkZWZhdWx0IHkKKwlzZWxlY3QgRVhQT1JUX1VBU00gaWYgT0NURU9OX1dEVCA9IG0KKwloZWxwCisJICBIYXJkd2FyZSBkcml2ZXIgZm9yIE9DVEVPTidzIG9uIGNoaXAgd2F0Y2hkb2cgdGltZXIuCisJICBFbmFibGVzIHRoZSB3YXRjaGRvZyBmb3IgYWxsIGNvcmVzIHJ1bm5pbmcgTGludXguIEl0CisJICBpbnN0YWxscyBhIE5NSSBoYW5kbGVyIGFuZCBwb2tlcyB0aGUgd2F0Y2hkb2cgYmFzZWQgb24gYW4KKwkgIGludGVycnVwdC4gIE9uIGZpcnN0IGV4cGlyYXRpb24gb2YgdGhlIHdhdGNoZG9nLCB0aGUKKwkgIGludGVycnVwdCBoYW5kbGVyIHBva2VzIGl0LiAgVGhlIHNlY29uZCBleHBpcmF0aW9uIGNhdXNlcyBhbgorCSAgTk1JIHRoYXQgcHJpbnRzIGEgbWVzc2FnZS4gVGhlIHRoaXJkIGV4cGlyYXRpb24gY2F1c2VzIGEKKwkgIGdsb2JhbCBzb2Z0IHJlc2V0LgorCisJICBXaGVuIHVzZXJzcGFjZSBoYXMgL2Rldi93YXRjaGRvZyBvcGVuLCBubyBwb2tpbmcgaXMgZG9uZQorCSAgZnJvbSB0aGUgZmlyc3QgaW50ZXJydXB0LCBpdCBpcyB0aGVuIG9ubHkgcG9rZWQgd2hlbiB0aGUKKwkgIGRldmljZSBpcyB3cml0dGVuLgorCiAjIFBBUklTQyBBcmNoaXRlY3R1cmUKIAogIyBQT1dFUlBDIEFyY2hpdGVjdHVyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZSBiL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUKaW5kZXggNzJmM2UyMC4uZTMwMjg5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlCkBAIC0xMTQsNiArMTE0LDggQEAKIG9iai0kKENPTkZJR19TSUJZVEVfV0RPRykgKz0gc2Jfd2RvZy5vCiBvYmotJChDT05GSUdfQVI3X1dEVCkgKz0gYXI3X3dkdC5vCiBvYmotJChDT05GSUdfVFhYOV9XRFQpICs9IHR4eDl3ZHQubworb2JqLSQoQ09ORklHX09DVEVPTl9XRFQpICs9IG9jdGVvbi13ZHQubworb2N0ZW9uLXdkdC15IDo9IG9jdGVvbi13ZHQtbWFpbi5vIG9jdGVvbi13ZHQtbm1pLm8KIAogIyBQQVJJU0MgQXJjaGl0ZWN0dXJlCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvY3B3ZC5jIGIvZHJpdmVycy93YXRjaGRvZy9jcHdkLmMKaW5kZXggZDYyYjljZS4uMzBhMjUxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9jcHdkLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9jcHdkLmMKQEAgLTU0NSw3ICs1NDUsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlwLT5pcnEgPSBvcC0+aXJxc1swXTsKKwlwLT5pcnEgPSBvcC0+YXJjaGRhdGEuaXJxc1swXTsKIAogCXNwaW5fbG9ja19pbml0KCZwLT5sb2NrKTsKIApAQCAtNjg4LDEyICs2ODgsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgY3B3ZF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIG9mX3JlZ2lzdGVyX2RyaXZlcigmY3B3ZF9kcml2ZXIsICZvZl9idXNfdHlwZSk7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmY3B3ZF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY3B3ZF9leGl0KHZvaWQpCiB7Ci0Jb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoJmNwd2RfZHJpdmVyKTsKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmY3B3ZF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChjcHdkX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9vY3Rlb24td2R0LW1haW4uYyBiL2RyaXZlcnMvd2F0Y2hkb2cvb2N0ZW9uLXdkdC1tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE0MTAxNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvb2N0ZW9uLXdkdC1tYWluLmMKQEAgLTAsMCArMSw3NDUgQEAKKy8qCisgKiBPY3Rlb24gV2F0Y2hkb2cgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIENhdml1bSBOZXR3b3JrcworICoKKyAqIFNvbWUgcGFydHMgZGVyaXZlZCBmcm9tIHdkdC5jCisgKgorICoJKGMpIENvcHlyaWdodCAxOTk2LTE5OTcgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4sCisgKgkJCQkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKglOZWl0aGVyIEFsYW4gQ294IG5vciBDeW1ydU5ldCBMdGQuIGFkbWl0IGxpYWJpbGl0eSBub3IgcHJvdmlkZQorICoJd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIHByb3ZpZGVkCisgKgkiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCisgKgorICoJKGMpIENvcHlyaWdodCAxOTk1ICAgIEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICoKKyAqIFRoZSBPQ1RFT04gd2F0Y2hkb2cgaGFzIGEgbWF4aW11bSB0aW1lb3V0IG9mIDJeMzIgKiBpb19jbG9jay4KKyAqIEZvciBtb3N0IHN5c3RlbXMgdGhpcyBpcyBsZXNzIHRoYW4gMTAgc2Vjb25kcywgc28gdG8gYWxsb3cgZm9yCisgKiBzb2Z0d2FyZSB0byByZXF1ZXN0IGxvbmdlciB3YXRjaGRvZyBoZWFydGJlYXRzLCB3ZSBtYWludGFpbiBzb2Z0d2FyZQorICogY291bnRlcnMgdG8gY291bnQgbXVsdGlwbGVzIG9mIHRoZSBiYXNlIHJhdGUuICBJZiB0aGUgc3lzdGVtIGxvY2tzCisgKiB1cCBpbiBzdWNoIGEgbWFubmVyIHRoYXQgd2UgY2FuIG5vdCBydW4gdGhlIHNvZnR3YXJlIGNvdW50ZXJzLCB0aGUKKyAqIG9ubHkgcmVzdWx0IGlzIGEgd2F0Y2hkb2cgcmVzZXQgc29vbmVyIHRoYW4gd2FzIHJlcXVlc3RlZC4gIEJ1dAorICogdGhhdCBpcyBPSywgYmVjYXVzZSBpbiB0aGlzIGNhc2UgdXNlcnNwYWNlIHdvdWxkIGxpa2VseSBub3QgYmUgYWJsZQorICogdG8gZG8gYW55dGhpbmcgYW55aG93LgorICoKKyAqIFRoZSBoYXJkd2FyZSB3YXRjaGRvZyBpbnRlcnZhbCB3ZSBjYWxsIHRoZSBwZXJpb2QuICBUaGUgT0NURU9OCisgKiB3YXRjaGRvZyBnb2VzIHRocm91Z2ggc2V2ZXJhbCBzdGFnZXMsIGFmdGVyIHRoZSBmaXJzdCBwZXJpb2QgYW4KKyAqIGlycSBpcyBhc3NlcnRlZCwgdGhlbiBpZiBpdCBpcyBub3QgcmVzZXQsIGFmdGVyIHRoZSBuZXh0IHBlcmlvZCBOTUkKKyAqIGlzIGFzc2VydGVkLCB0aGVuIGFmdGVyIGFuIGFkZGl0aW9uYWwgcGVyaW9kIGEgY2hpcCB3aWRlIHNvZnQgcmVzZXQuCisgKiBTbyBmb3IgdGhlIHNvZnR3YXJlIGNvdW50ZXJzLCB3ZSByZXNldCB3YXRjaGRvZyBhZnRlciBlYWNoIHBlcmlvZAorICogYW5kIGRlY3JlbWVudCB0aGUgY291bnRlci4gIEJ1dCBmb3IgdGhlIGxhc3QgdHdvIHBlcmlvZHMgd2UgbmVlZCB0bworICogbGV0IHRoZSB3YXRjaGRvZyBwcm9ncmVzcyB0byB0aGUgTk1JIHN0YWdlIHNvIHdlIGRpc2FibGUgdGhlIGlycQorICogYW5kIGxldCBpdCBwcm9jZWVkLiAgT25jZSBpbiB0aGUgTk1JLCB3ZSBwcmludCB0aGUgcmVnaXN0ZXIgc3RhdGUKKyAqIHRvIHRoZSBzZXJpYWwgcG9ydCBhbmQgdGhlbiB3YWl0IGZvciB0aGUgcmVzZXQuCisgKgorICogQSB3YXRjaGRvZyBpcyBtYWludGFpbmVkIGZvciBlYWNoIENQVSBpbiB0aGUgc3lzdGVtLCB0aGF0IHdheSBpZgorICogb25lIENQVSBzdWZmZXJzIGEgbG9ja3VwLCB3ZSBhbHNvIGdldCBhIHJlZ2lzdGVyIGR1bXAgYW5kIHJlc2V0LgorICogVGhlIHVzZXJzcGFjZSBwaW5nIHJlc2V0cyB0aGUgd2F0Y2hkb2cgb24gYWxsIENQVXMuCisgKgorICogQmVmb3JlIHVzZXJzcGFjZSBvcGVucyB0aGUgd2F0Y2hkb2cgZGV2aWNlLCB3ZSBzdGlsbCBydW4gdGhlCisgKiB3YXRjaGRvZ3MgdG8gY2F0Y2ggYW55IGxvY2t1cHMgdGhhdCBtYXkgYmUga2VybmVsIHJlbGF0ZWQuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorCisjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CisjaW5jbHVkZSA8YXNtL3Vhc20uaD4KKworI2luY2x1ZGUgPGFzbS9vY3Rlb24vb2N0ZW9uLmg+CisKKy8qIFRoZSBjb3VudCBuZWVkZWQgdG8gYWNoaWV2ZSB0aW1lb3V0X3NlYy4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdGltZW91dF9jbnQ7CisKKy8qIFRoZSBtYXhpbXVtIHBlcmlvZCBzdXBwb3J0ZWQuICovCitzdGF0aWMgdW5zaWduZWQgaW50IG1heF90aW1lb3V0X3NlYzsKKworLyogVGhlIGN1cnJlbnQgcGVyaW9kLiAgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdGltZW91dF9zZWM7CisKKy8qIFNldCB0byBub24temVybyB3aGVuIHVzZXJzcGFjZSBjb3VudGRvd24gbW9kZSBhY3RpdmUgKi8KK3N0YXRpYyBpbnQgZG9fY291bmRvd247CitzdGF0aWMgdW5zaWduZWQgaW50IGNvdW50ZG93bl9yZXNldDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGVyX2NwdV9jb3VudGRvd25bTlJfQ1BVU107CisKK3N0YXRpYyBjcHVtYXNrX3QgaXJxX2VuYWJsZWRfY3B1czsKKworI2RlZmluZSBXRF9USU1PIDYwCQkJLyogRGVmYXVsdCBoZWFydGJlYXQgPSA2MCBzZWNvbmRzICovCisKK3N0YXRpYyBpbnQgaGVhcnRiZWF0ID0gV0RfVElNTzsKK21vZHVsZV9wYXJhbShoZWFydGJlYXQsIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwKKwkiV2F0Y2hkb2cgaGVhcnRiZWF0IGluIHNlY29uZHMuICgwIDwgaGVhcnRiZWF0LCBkZWZhdWx0PSIKKwkJCQlfX01PRFVMRV9TVFJJTkcoV0RfVElNTykgIikiKTsKKworc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9HX05PV0FZT1VUOworbW9kdWxlX3BhcmFtKG5vd2F5b3V0LCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwKKwkiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIKKwkJCQlfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9jdGVvbl93ZHRfaXNfb3BlbjsKK3N0YXRpYyBjaGFyIGV4cGVjdF9jbG9zZTsKKworc3RhdGljIHUzMiBfX2luaXRkYXRhIG5taV9zdGFnZTFfaW5zbnNbNjRdOworLyogV2UgbmVlZCBvbmUgYnJhbmNoIGFuZCB0aGVyZWZvcmUgb25lIHJlbG9jYXRpb24gcGVyIHRhcmdldCBsYWJlbC4gKi8KK3N0YXRpYyBzdHJ1Y3QgdWFzbV9sYWJlbCBfX2luaXRkYXRhIGxhYmVsc1s1XTsKK3N0YXRpYyBzdHJ1Y3QgdWFzbV9yZWxvYyBfX2luaXRkYXRhIHJlbG9jc1s1XTsKKworZW51bSBsYWJsZV9pZCB7CisJbGFiZWxfZW50ZXJfYm9vdGxvYWRlciA9IDEKK307CisKKy8qIFNvbWUgQ1AwIHJlZ2lzdGVycyAqLworI2RlZmluZSBLMAkJMjYKKyNkZWZpbmUgQzBfQ1ZNTUVNQ1RMIDExLCA3CisjZGVmaW5lIEMwX1NUQVRVUyAxMiwgMAorI2RlZmluZSBDMF9FQkFTRSAxNSwgMQorI2RlZmluZSBDMF9ERVNBVkUgMzEsIDAKKwordm9pZCBvY3Rlb25fd2R0X25taV9zdGFnZTIodm9pZCk7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvY3Rlb25fd2R0X2J1aWxkX3N0YWdlMSh2b2lkKQoreworCWludCBpOworCWludCBsZW47CisJdTMyICpwID0gbm1pX3N0YWdlMV9pbnNuczsKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwlzdHJ1Y3QgdWFzbV9sYWJlbCAqbCA9IGxhYmVsczsKKwlzdHJ1Y3QgdWFzbV9yZWxvYyAqciA9IHJlbG9jczsKKyNlbmRpZgorCisJLyoKKwkgKiBGb3IgdGhlIG5leHQgZmV3IGluc3RydWN0aW9ucyBydW5uaW5nIHRoZSBkZWJ1Z2dlciBtYXkKKwkgKiBjYXVzZSBjb3JydXB0aW9uIG9mIGswIGluIHRoZSBzYXZlZCByZWdpc3RlcnMuIFNpbmNlIHdlJ3JlCisJICogYWJvdXQgdG8gY3Jhc2gsIG5vYm9keSBwcm9iYWJseSBjYXJlcy4KKwkgKgorCSAqIFNhdmUgSzAgaW50byB0aGUgZGVidWcgc2NyYXRjaCByZWdpc3RlcgorCSAqLworCXVhc21faV9kbXRjMCgmcCwgSzAsIEMwX0RFU0FWRSk7CisKKwl1YXNtX2lfbWZjMCgmcCwgSzAsIEMwX1NUQVRVUyk7CisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisJdWFzbV9pbF9iYml0MCgmcCwgJnIsIEswLCBpbG9nMihTVDBfTk1JKSwgbGFiZWxfZW50ZXJfYm9vdGxvYWRlcik7CisjZW5kaWYKKwkvKiBGb3JjZSA2NC1iaXQgYWRkcmVzc2luZyBlbmFibGVkICovCisJdWFzbV9pX29yaSgmcCwgSzAsIEswLCBTVDBfVVggfCBTVDBfU1ggfCBTVDBfS1gpOworCXVhc21faV9tdGMwKCZwLCBLMCwgQzBfU1RBVFVTKTsKKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCXVhc21faV9tZmMwKCZwLCBLMCwgQzBfRUJBU0UpOworCS8qIENvcmVpZCBudW1iZXIgaW4gSzAgKi8KKwl1YXNtX2lfYW5kaSgmcCwgSzAsIEswLCAweGYpOworCS8qIDggKiBjb3JlaWQgaW4gYml0cyAxNi0zMSAqLworCXVhc21faV9kc2xsX3NhZmUoJnAsIEswLCBLMCwgMyArIDE2KTsKKwl1YXNtX2lfb3JpKCZwLCBLMCwgSzAsIDB4ODAwMSk7CisJdWFzbV9pX2RzbGxfc2FmZSgmcCwgSzAsIEswLCAxNik7CisJdWFzbV9pX29yaSgmcCwgSzAsIEswLCAweDA3MDApOworCXVhc21faV9kcm90cl9zYWZlKCZwLCBLMCwgSzAsIDMyKTsKKwkvKgorCSAqIFNob3VsZCByZXN1bHQgaW46IDB4ODAwMSwwNzAwLDAwMDAsOCpjb3JlaWQgd2hpY2ggaXMKKwkgKiBDVk1YX0NJVV9XRE9HWChjb3JlaWQpIC0gMHgwNTAwCisJICoKKwkgKiBOb3cgbGQgSzAsIENWTVhfQ0lVX1dET0dYKGNvcmVpZCkKKwkgKi8KKwl1YXNtX2lfbGQoJnAsIEswLCAweDUwMCwgSzApOworCS8qCisJICogSWYgYml0IG9uZSBzZXQgaGFuZGxlIHRoZSBOTUkgYXMgYSB3YXRjaGRvZyBldmVudC4KKwkgKiBvdGhlcndpc2UgdHJhbnNmZXIgY29udHJvbCB0byBib290bG9hZGVyLgorCSAqLworCXVhc21faWxfYmJpdDAoJnAsICZyLCBLMCwgMSwgbGFiZWxfZW50ZXJfYm9vdGxvYWRlcik7CisJdWFzbV9pX25vcCgmcCk7CisjZW5kaWYKKworCS8qIENsZWFyIERjYWNoZSBzbyBjdm1zZWcgd29ya3MgcmlnaHQuICovCisJdWFzbV9pX2NhY2hlKCZwLCAxLCAwLCAwKTsKKworCS8qIFVzZSBLMCB0byBkbyBhIHJlYWQvbW9kaWZ5L3dyaXRlIG9mIENWTU1FTUNUTCAqLworCXVhc21faV9kbWZjMCgmcCwgSzAsIEMwX0NWTU1FTUNUTCk7CisJLyogQ2xlYXIgb3V0IHRoZSBzaXplIG9mIENWTVNFRwkqLworCXVhc21faV9kaW5zKCZwLCBLMCwgMCwgMCwgNik7CisJLyogU2V0IENWTVNFRyB0byBpdHMgbGFyZ2VzdCB2YWx1ZSAqLworCXVhc21faV9vcmkoJnAsIEswLCBLMCwgMHgxYzAgfCA1NCk7CisJLyogU3RvcmUgdGhlIENWTU1FTUNUTCB2YWx1ZSAqLworCXVhc21faV9kbXRjMCgmcCwgSzAsIEMwX0NWTU1FTUNUTCk7CisKKwkvKiBMb2FkIHRoZSBhZGRyZXNzIG9mIHRoZSBzZWNvbmQgc3RhZ2UgaGFuZGxlciAqLworCVVBU01faV9MQSgmcCwgSzAsIChsb25nKW9jdGVvbl93ZHRfbm1pX3N0YWdlMik7CisJdWFzbV9pX2pyKCZwLCBLMCk7CisJdWFzbV9pX2RtZmMwKCZwLCBLMCwgQzBfREVTQVZFKTsKKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCXVhc21fYnVpbGRfbGFiZWwoJmwsIHAsIGxhYmVsX2VudGVyX2Jvb3Rsb2FkZXIpOworCS8qIEp1bXAgdG8gdGhlIGJvb3Rsb2FkZXIgYW5kIHJlc3RvcmUgSzAgKi8KKwlVQVNNX2lfTEEoJnAsIEswLCAobG9uZylvY3Rlb25fYm9vdGxvYWRlcl9lbnRyeV9hZGRyKTsKKwl1YXNtX2lfanIoJnAsIEswKTsKKwl1YXNtX2lfZG1mYzAoJnAsIEswLCBDMF9ERVNBVkUpOworI2VuZGlmCisJdWFzbV9yZXNvbHZlX3JlbG9jcyhyZWxvY3MsIGxhYmVscyk7CisKKwlsZW4gPSAoaW50KShwIC0gbm1pX3N0YWdlMV9pbnNucyk7CisJcHJfZGVidWcoIlN5bnRoZXNpemVkIE5NSSBzdGFnZSAxIGhhbmRsZXIgKCVkIGluc3RydWN0aW9ucykuXG4iLCBsZW4pOworCisJcHJfZGVidWcoIlx0LnNldCBwdXNoXG4iKTsKKwlwcl9kZWJ1ZygiXHQuc2V0IG5vcmVvcmRlclxuIik7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlwcl9kZWJ1ZygiXHQud29yZCAweCUwOHhcbiIsIG5taV9zdGFnZTFfaW5zbnNbaV0pOworCXByX2RlYnVnKCJcdC5zZXQgcG9wXG4iKTsKKworCWlmIChsZW4gPiAzMikKKwkJcGFuaWMoIk5NSSBzdGFnZSAxIGhhbmRsZXIgZXhjZWVkcyAzMiBpbnN0cnVjdGlvbnMsIHdhcyAlZFxuIiwgbGVuKTsKK30KKworc3RhdGljIGludCBjcHUyY29yZShpbnQgY3B1KQoreworI2lmZGVmIENPTkZJR19TTVAKKwlyZXR1cm4gY3B1X2xvZ2ljYWxfbWFwKGNwdSk7CisjZWxzZQorCXJldHVybiBjdm14X2dldF9jb3JlX251bSgpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgY29yZTJjcHUoaW50IGNvcmVpZCkKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJcmV0dXJuIGNwdV9udW1iZXJfbWFwKGNvcmVpZCk7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CisKKy8qKgorICogUG9rZSB0aGUgd2F0Y2hkb2cgd2hlbiBhbiBpbnRlcnJ1cHQgaXMgcmVjZWl2ZWQKKyAqCisgKiBAY3BsOgorICogQGRldl9pZDoKKyAqCisgKiBSZXR1cm5zCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBvY3Rlb25fd2R0X3Bva2VfaXJxKGludCBjcGwsIHZvaWQgKmRldl9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgY29yZSA9IGN2bXhfZ2V0X2NvcmVfbnVtKCk7CisJaW50IGNwdSA9IGNvcmUyY3B1KGNvcmUpOworCisJaWYgKGRvX2NvdW5kb3duKSB7CisJCWlmIChwZXJfY3B1X2NvdW50ZG93bltjcHVdID4gMCkgeworCQkJLyogV2UncmUgYWxpdmUsIHBva2UgdGhlIHdhdGNoZG9nICovCisJCQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9QUF9QT0tFWChjb3JlKSwgMSk7CisJCQlwZXJfY3B1X2NvdW50ZG93bltjcHVdLS07CisJCX0gZWxzZSB7CisJCQkvKiBCYWQgbmV3cywgeW91IGFyZSBhYm91dCB0byByZWJvb3QuICovCisJCQlkaXNhYmxlX2lycV9ub3N5bmMoY3BsKTsKKwkJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgJmlycV9lbmFibGVkX2NwdXMpOworCQl9CisJfSBlbHNlIHsKKwkJLyogTm90IG9wZW4sIGp1c3QgcGluZyBhd2F5Li4uICovCisJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX1BQX1BPS0VYKGNvcmUpLCAxKTsKKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKiBGcm9tIHNldHVwLmMgKi8KK2V4dGVybiBpbnQgcHJvbV9wdXRjaGFyKGNoYXIgYyk7CisKKy8qKgorICogV3JpdGUgYSBzdHJpbmcgdG8gdGhlIHVhcnQKKyAqCisgKiBAc3RyOiAgICAgICAgU3RyaW5nIHRvIHdyaXRlCisgKi8KK3N0YXRpYyB2b2lkIG9jdGVvbl93ZHRfd3JpdGVfc3RyaW5nKGNvbnN0IGNoYXIgKnN0cikKK3sKKwkvKiBKdXN0IGxvb3Agd3JpdGluZyBvbmUgYnl0ZSBhdCBhIHRpbWUgKi8KKwl3aGlsZSAoKnN0cikKKwkJcHJvbV9wdXRjaGFyKCpzdHIrKyk7Cit9CisKKy8qKgorICogV3JpdGUgYSBoZXggbnVtYmVyIG91dCBvZiB0aGUgdWFydAorICoKKyAqIEB2YWx1ZTogICAgICBOdW1iZXIgdG8gZGlzcGxheQorICogQGRpZ2l0czogICAgIE51bWJlciBvZiBkaWdpdHMgdG8gcHJpbnQgKDEgdG8gMTYpCisgKi8KK3N0YXRpYyB2b2lkIG9jdGVvbl93ZHRfd3JpdGVfaGV4KHU2NCB2YWx1ZSwgaW50IGRpZ2l0cykKK3sKKwlpbnQgZDsKKwlpbnQgdjsKKwlmb3IgKGQgPSAwOyBkIDwgZGlnaXRzOyBkKyspIHsKKwkJdiA9ICh2YWx1ZSA+PiAoKGRpZ2l0cyAtIGQgLSAxKSAqIDQpKSAmIDB4ZjsKKwkJaWYgKHYgPj0gMTApCisJCQlwcm9tX3B1dGNoYXIoJ2EnICsgdiAtIDEwKTsKKwkJZWxzZQorCQkJcHJvbV9wdXRjaGFyKCcwJyArIHYpOworCX0KK30KKworY29uc3QgY2hhciAqcmVnX25hbWVbXSA9IHsKKwkiJDAiLCAiYXQiLCAidjAiLCAidjEiLCAiYTAiLCAiYTEiLCAiYTIiLCAiYTMiLAorCSJhNCIsICJhNSIsICJhNiIsICJhNyIsICJ0MCIsICJ0MSIsICJ0MiIsICJ0MyIsCisJInMwIiwgInMxIiwgInMyIiwgInMzIiwgInM0IiwgInM1IiwgInM2IiwgInM3IiwKKwkidDgiLCAidDkiLCAiazAiLCAiazEiLCAiZ3AiLCAic3AiLCAiczgiLCAicmEiCit9OworCisvKioKKyAqIE5NSSBzdGFnZSAzIGhhbmRsZXIuIE5NSXMgYXJlIGhhbmRsZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXI6CisgKiAxKSBUaGUgZmlyc3QgTk1JIGhhbmRsZXIgZW5hYmxlcyBDVk1TRUcgYW5kIHRyYW5zZmVycyBmcm9tCisgKiB0aGUgYm9vdGJ1cyByZWdpb24gaW50byBub3JtYWwgbWVtb3J5LiBJdCBpcyBjYXJlZnVsIHRvIG5vdAorICogZGVzdHJveSBhbnkgcmVnaXN0ZXJzLgorICogMikgVGhlIHNlY29uZCBzdGFnZSBoYW5kbGVyIHVzZXMgQ1ZNU0VHIHRvIHNhdmUgdGhlIHJlZ2lzdGVycworICogYW5kIGNyZWF0ZSBhIHN0YWNrIGZvciBDIGNvZGUuIEl0IHRoZW4gY2FsbHMgdGhlIHRoaXJkIGxldmVsCisgKiBoYW5kbGVyIHdpdGggb25lIGFyZ3VtZW50LCBhIHBvaW50ZXIgdG8gdGhlIHJlZ2lzdGVyIHZhbHVlcy4KKyAqIDMpIFRoZSB0aGlyZCwgYW5kIGZpbmFsLCBsZXZlbCBoYW5kbGVyIGlzIHRoZSBmb2xsb3dpbmcgQworICogZnVuY3Rpb24gdGhhdCBwcmludHMgb3V0IHNvbWUgdXNlZnVsIGluZm9tcmF0aW9uLgorICoKKyAqIEByZWc6ICAgIFBvaW50ZXIgdG8gcmVnaXN0ZXIgc3RhdGUgYmVmb3JlIHRoZSBOTUkKKyAqLwordm9pZCBvY3Rlb25fd2R0X25taV9zdGFnZTModTY0IHJlZ1szMl0pCit7CisJdTY0IGk7CisKKwl1bnNpZ25lZCBpbnQgY29yZWlkID0gY3ZteF9nZXRfY29yZV9udW0oKTsKKwkvKgorCSAqIFNhdmUgc3RhdHVzIGFuZCBjYXVzZSBlYXJseSB0byBnZXQgdGhlbSBiZWZvcmUgYW55IGNoYW5nZXMKKwkgKiBtaWdodCBoYXBwZW4uCisJICovCisJdTY0IGNwMF9jYXVzZSA9IHJlYWRfYzBfY2F1c2UoKTsKKwl1NjQgY3AwX3N0YXR1cyA9IHJlYWRfYzBfc3RhdHVzKCk7CisJdTY0IGNwMF9lcnJvcl9lcGMgPSByZWFkX2MwX2Vycm9yZXBjKCk7CisJdTY0IGNwMF9lcGMgPSByZWFkX2MwX2VwYygpOworCisJLyogRGVsYXkgc28gb3V0cHV0IGZyb20gYWxsIGNvcmVzIG91dHB1dCBpcyBub3QganVtYmxlZCB0b2dldGhlci4gKi8KKwlfX2RlbGF5KDEwMDAwMDAwMHVsbCAqIGNvcmVpZCk7CisKKwlvY3Rlb25fd2R0X3dyaXRlX3N0cmluZygiXHJcbioqKiBOTUkgV2F0Y2hkb2cgaW50ZXJydXB0IG9uIENvcmUgMHgiKTsKKwlvY3Rlb25fd2R0X3dyaXRlX2hleChjb3JlaWQsIDEpOworCW9jdGVvbl93ZHRfd3JpdGVfc3RyaW5nKCIgKioqXHJcbiIpOworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCW9jdGVvbl93ZHRfd3JpdGVfc3RyaW5nKCJcdCIpOworCQlvY3Rlb25fd2R0X3dyaXRlX3N0cmluZyhyZWdfbmFtZVtpXSk7CisJCW9jdGVvbl93ZHRfd3JpdGVfc3RyaW5nKCJcdDB4Iik7CisJCW9jdGVvbl93ZHRfd3JpdGVfaGV4KHJlZ1tpXSwgMTYpOworCQlpZiAoaSAmIDEpCisJCQlvY3Rlb25fd2R0X3dyaXRlX3N0cmluZygiXHJcbiIpOworCX0KKwlvY3Rlb25fd2R0X3dyaXRlX3N0cmluZygiXHRlcnJfZXBjXHQweCIpOworCW9jdGVvbl93ZHRfd3JpdGVfaGV4KGNwMF9lcnJvcl9lcGMsIDE2KTsKKworCW9jdGVvbl93ZHRfd3JpdGVfc3RyaW5nKCJcdGVwY1x0MHgiKTsKKwlvY3Rlb25fd2R0X3dyaXRlX2hleChjcDBfZXBjLCAxNik7CisJb2N0ZW9uX3dkdF93cml0ZV9zdHJpbmcoIlxyXG4iKTsKKworCW9jdGVvbl93ZHRfd3JpdGVfc3RyaW5nKCJcdHN0YXR1c1x0MHgiKTsKKwlvY3Rlb25fd2R0X3dyaXRlX2hleChjcDBfc3RhdHVzLCAxNik7CisJb2N0ZW9uX3dkdF93cml0ZV9zdHJpbmcoIlx0Y2F1c2VcdDB4Iik7CisJb2N0ZW9uX3dkdF93cml0ZV9oZXgoY3AwX2NhdXNlLCAxNik7CisJb2N0ZW9uX3dkdF93cml0ZV9zdHJpbmcoIlxyXG4iKTsKKworCW9jdGVvbl93ZHRfd3JpdGVfc3RyaW5nKCJcdHN1bTBcdDB4Iik7CisJb2N0ZW9uX3dkdF93cml0ZV9oZXgoY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX1NVTTAoY29yZWlkICogMikpLCAxNik7CisJb2N0ZW9uX3dkdF93cml0ZV9zdHJpbmcoIlx0ZW4wXHQweCIpOworCW9jdGVvbl93ZHRfd3JpdGVfaGV4KGN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY29yZWlkICogMikpLCAxNik7CisJb2N0ZW9uX3dkdF93cml0ZV9zdHJpbmcoIlxyXG4iKTsKKworCW9jdGVvbl93ZHRfd3JpdGVfc3RyaW5nKCIqKiogQ2hpcCBzb2Z0IHJlc2V0IHNvb24gKioqXHJcbiIpOworfQorCitzdGF0aWMgdm9pZCBvY3Rlb25fd2R0X2Rpc2FibGVfaW50ZXJydXB0KGludCBjcHUpCit7CisJdW5zaWduZWQgaW50IGNvcmU7CisJdW5zaWduZWQgaW50IGlycTsKKwl1bmlvbiBjdm14X2NpdV93ZG9neCBjaXVfd2RvZzsKKworCWNvcmUgPSBjcHUyY29yZShjcHUpOworCisJaXJxID0gT0NURU9OX0lSUV9XRE9HMCArIGNvcmU7CisKKwkvKiBQb2tlIHRoZSB3YXRjaGRvZyB0byBjbGVhciBvdXQgaXRzIHN0YXRlICovCisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfUFBfUE9LRVgoY29yZSksIDEpOworCisJLyogRGlzYWJsZSB0aGUgaGFyZHdhcmUuICovCisJY2l1X3dkb2cudTY0ID0gMDsKKwljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9XRE9HWChjb3JlKSwgY2l1X3dkb2cudTY0KTsKKworCWZyZWVfaXJxKGlycSwgb2N0ZW9uX3dkdF9wb2tlX2lycSk7Cit9CisKK3N0YXRpYyB2b2lkIG9jdGVvbl93ZHRfc2V0dXBfaW50ZXJydXB0KGludCBjcHUpCit7CisJdW5zaWduZWQgaW50IGNvcmU7CisJdW5zaWduZWQgaW50IGlycTsKKwl1bmlvbiBjdm14X2NpdV93ZG9neCBjaXVfd2RvZzsKKworCWNvcmUgPSBjcHUyY29yZShjcHUpOworCisJLyogRGlzYWJsZSBpdCBiZWZvcmUgZG9pbmcgYW55dGhpbmcgd2l0aCB0aGUgaW50ZXJydXB0cy4gKi8KKwljaXVfd2RvZy51NjQgPSAwOworCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX1dET0dYKGNvcmUpLCBjaXVfd2RvZy51NjQpOworCisJcGVyX2NwdV9jb3VudGRvd25bY3B1XSA9IGNvdW50ZG93bl9yZXNldDsKKworCWlycSA9IE9DVEVPTl9JUlFfV0RPRzAgKyBjb3JlOworCisJaWYgKHJlcXVlc3RfaXJxKGlycSwgb2N0ZW9uX3dkdF9wb2tlX2lycSwKKwkJCUlSUUZfRElTQUJMRUQsICJvY3Rlb25fd2R0Iiwgb2N0ZW9uX3dkdF9wb2tlX2lycSkpCisJCXBhbmljKCJvY3Rlb25fd2R0OiBDb3VsZG4ndCBvYnRhaW4gaXJxICVkIiwgaXJxKTsKKworCWNwdW1hc2tfc2V0X2NwdShjcHUsICZpcnFfZW5hYmxlZF9jcHVzKTsKKworCS8qIFBva2UgdGhlIHdhdGNoZG9nIHRvIGNsZWFyIG91dCBpdHMgc3RhdGUgKi8KKwljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9QUF9QT0tFWChjb3JlKSwgMSk7CisKKwkvKiBGaW5hbGx5IGVuYWJsZSB0aGUgd2F0Y2hkb2cgbm93IHRoYXQgYWxsIGhhbmRsZXJzIGFyZSBpbnN0YWxsZWQgKi8KKwljaXVfd2RvZy51NjQgPSAwOworCWNpdV93ZG9nLnMubGVuID0gdGltZW91dF9jbnQ7CisJY2l1X3dkb2cucy5tb2RlID0gMzsJLyogMyA9IEludGVycnVwdCArIE5NSSArIFNvZnQtUmVzZXQgKi8KKwljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9XRE9HWChjb3JlKSwgY2l1X3dkb2cudTY0KTsKK30KKworc3RhdGljIGludCBvY3Rlb25fd2R0X2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJdW5zaWduZWQgaW50IGNwdSA9ICh1bnNpZ25lZCBsb25nKWhjcHU7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKKwkJb2N0ZW9uX3dkdF9kaXNhYmxlX2ludGVycnVwdChjcHUpOworCQlicmVhazsKKwljYXNlIENQVV9PTkxJTkU6CisJY2FzZSBDUFVfRE9XTl9GQUlMRUQ6CisJCW9jdGVvbl93ZHRfc2V0dXBfaW50ZXJydXB0KGNwdSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgdm9pZCBvY3Rlb25fd2R0X3Bpbmcodm9pZCkKK3sKKwlpbnQgY3B1OworCWludCBjb3JlaWQ7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQljb3JlaWQgPSBjcHUyY29yZShjcHUpOworCQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9QUF9QT0tFWChjb3JlaWQpLCAxKTsKKwkJcGVyX2NwdV9jb3VudGRvd25bY3B1XSA9IGNvdW50ZG93bl9yZXNldDsKKwkJaWYgKChjb3VudGRvd25fcmVzZXQgfHwgIWRvX2NvdW5kb3duKSAmJgorCQkgICAgIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCAmaXJxX2VuYWJsZWRfY3B1cykpIHsKKwkJCS8qIFdlIGhhdmUgdG8gZW5hYmxlIHRoZSBpcnEgKi8KKwkJCWludCBpcnEgPSBPQ1RFT05fSVJRX1dET0cwICsgY29yZWlkOworCQkJZW5hYmxlX2lycShpcnEpOworCQkJY3B1bWFza19zZXRfY3B1KGNwdSwgJmlycV9lbmFibGVkX2NwdXMpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBvY3Rlb25fd2R0X2NhbGNfcGFyYW1ldGVycyhpbnQgdCkKK3sKKwl1bnNpZ25lZCBpbnQgcGVyaW9kczsKKworCXRpbWVvdXRfc2VjID0gbWF4X3RpbWVvdXRfc2VjOworCisKKwkvKgorCSAqIEZpbmQgdGhlIGxhcmdlc3QgaW50ZXJydXB0IHBlcmlvZCwgdGhhdCBjYW4gZXZlbmx5IGRpdmlkZQorCSAqIHRoZSByZXF1ZXN0ZWQgaGVhcnRiZWF0IHRpbWUuCisJICovCisJd2hpbGUgKCh0ICUgdGltZW91dF9zZWMpICE9IDApCisJCXRpbWVvdXRfc2VjLS07CisKKwlwZXJpb2RzID0gdCAvIHRpbWVvdXRfc2VjOworCisJLyoKKwkgKiBUaGUgbGFzdCB0d28gcGVyaW9kcyBhcmUgYWZ0ZXIgdGhlIGlycSBpcyBkaXNhYmxlZCwgYW5kCisJICogdGhlbiB0byB0aGUgbm1pLCBzbyB3ZSBzdWJ0cmFjdCB0aGVtIG9mZi4KKwkgKi8KKworCWNvdW50ZG93bl9yZXNldCA9IHBlcmlvZHMgPiAyID8gcGVyaW9kcyAtIDIgOiAwOworCWhlYXJ0YmVhdCA9IHQ7CisJdGltZW91dF9jbnQgPSAoKG9jdGVvbl9nZXRfY2xvY2tfcmF0ZSgpID4+IDgpICogdGltZW91dF9zZWMpID4+IDg7Cit9CisKK3N0YXRpYyBpbnQgb2N0ZW9uX3dkdF9zZXRfaGVhcnRiZWF0KGludCB0KQoreworCWludCBjcHU7CisJaW50IGNvcmVpZDsKKwl1bmlvbiBjdm14X2NpdV93ZG9neCBjaXVfd2RvZzsKKworCWlmICh0IDw9IDApCisJCXJldHVybiAtMTsKKworCW9jdGVvbl93ZHRfY2FsY19wYXJhbWV0ZXJzKHQpOworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJY29yZWlkID0gY3B1MmNvcmUoY3B1KTsKKwkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfUFBfUE9LRVgoY29yZWlkKSwgMSk7CisJCWNpdV93ZG9nLnU2NCA9IDA7CisJCWNpdV93ZG9nLnMubGVuID0gdGltZW91dF9jbnQ7CisJCWNpdV93ZG9nLnMubW9kZSA9IDM7CS8qIDMgPSBJbnRlcnJ1cHQgKyBOTUkgKyBTb2Z0LVJlc2V0ICovCisJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX1dET0dYKGNvcmVpZCksIGNpdV93ZG9nLnU2NCk7CisJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX1BQX1BPS0VYKGNvcmVpZCksIDEpOworCX0KKwlvY3Rlb25fd2R0X3BpbmcoKTsgLyogR2V0IHRoZSBpcnFzIGJhY2sgb24uICovCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJb2N0ZW9uX3dkdF93cml0ZToKKyAqCUBmaWxlOiBmaWxlIGhhbmRsZSB0byB0aGUgd2F0Y2hkb2cKKyAqCUBidWY6IGJ1ZmZlciB0byB3cml0ZSAodW51c2VkIGFzIGRhdGEgZG9lcyBub3QgbWF0dGVyIGhlcmUKKyAqCUBjb3VudDogY291bnQgb2YgYnl0ZXMKKyAqCUBwcG9zOiBwb2ludGVyIHRvIHRoZSBwb3NpdGlvbiB0byB3cml0ZS4gTm8gc2Vla3MgYWxsb3dlZAorICoKKyAqCUEgd3JpdGUgdG8gYSB3YXRjaGRvZyBkZXZpY2UgaXMgZGVmaW5lZCBhcyBhIGtlZXBhbGl2ZSBzaWduYWwuIEFueQorICoJd3JpdGUgb2YgZGF0YSB3aWxsIGRvLCBhcyB3ZSB3ZSBkb24ndCBkZWZpbmUgY29udGVudCBtZWFuaW5nLgorICovCisKK3N0YXRpYyBzc2l6ZV90IG9jdGVvbl93ZHRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJaWYgKGNvdW50KSB7CisJCWlmICghbm93YXlvdXQpIHsKKwkJCXNpemVfdCBpOworCisJCQkvKiBJbiBjYXNlIGl0IHdhcyBzZXQgbG9uZyBhZ28gKi8KKwkJCWV4cGVjdF9jbG9zZSA9IDA7CisKKwkJCWZvciAoaSA9IDA7IGkgIT0gY291bnQ7IGkrKykgeworCQkJCWNoYXIgYzsKKwkJCQlpZiAoZ2V0X3VzZXIoYywgYnVmICsgaSkpCisJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCWlmIChjID09ICdWJykKKwkJCQkJZXhwZWN0X2Nsb3NlID0gMTsKKwkJCX0KKwkJfQorCQlvY3Rlb25fd2R0X3BpbmcoKTsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCisvKioKKyAqCW9jdGVvbl93ZHRfaW9jdGw6CisgKglAZmlsZTogZmlsZSBoYW5kbGUgdG8gdGhlIGRldmljZQorICoJQGNtZDogd2F0Y2hkb2cgY29tbWFuZAorICoJQGFyZzogYXJndW1lbnQgcG9pbnRlcgorICoKKyAqCVRoZSB3YXRjaGRvZyBBUEkgZGVmaW5lcyBhIGNvbW1vbiBzZXQgb2YgZnVuY3Rpb25zIGZvciBhbGwKKyAqCXdhdGNoZG9ncyBhY2NvcmRpbmcgdG8gdGhlaXIgYXZhaWxhYmxlIGZlYXR1cmVzLiBXZSBvbmx5CisgKglhY3R1YWxseSB1c2VmdWxseSBzdXBwb3J0IHF1ZXJ5aW5nIGNhcGFiaWxpdGllcyBhbmQgc2V0dGluZworICoJdGhlIHRpbWVvdXQuCisgKi8KKworc3RhdGljIGxvbmcgb2N0ZW9uX3dkdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJaW50IF9fdXNlciAqcCA9IGFyZ3A7CisJaW50IG5ld19oZWFydGJlYXQ7CisKKwlzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CisJCS5vcHRpb25zID0JCVdESU9GX1NFVFRJTUVPVVR8CisJCQkJCVdESU9GX01BR0lDQ0xPU0V8CisJCQkJCVdESU9GX0tFRVBBTElWRVBJTkcsCisJCS5maXJtd2FyZV92ZXJzaW9uID0JMSwKKwkJLmlkZW50aXR5ID0JCSJPQ1RFT04iLAorCX07CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgV0RJT0NfR0VUU1VQUE9SVDoKKwkJcmV0dXJuIGNvcHlfdG9fdXNlcihhcmdwLCAmaWRlbnQsIHNpemVvZihpZGVudCkpID8gLUVGQVVMVCA6IDA7CisJY2FzZSBXRElPQ19HRVRTVEFUVVM6CisJY2FzZSBXRElPQ19HRVRCT09UU1RBVFVTOgorCQlyZXR1cm4gcHV0X3VzZXIoMCwgcCk7CisJY2FzZSBXRElPQ19LRUVQQUxJVkU6CisJCW9jdGVvbl93ZHRfcGluZygpOworCQlyZXR1cm4gMDsKKwljYXNlIFdESU9DX1NFVFRJTUVPVVQ6CisJCWlmIChnZXRfdXNlcihuZXdfaGVhcnRiZWF0LCBwKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAob2N0ZW9uX3dkdF9zZXRfaGVhcnRiZWF0KG5ld19oZWFydGJlYXQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCS8qIEZhbGwgdGhyb3VnaC4gKi8KKwljYXNlIFdESU9DX0dFVFRJTUVPVVQ6CisJCXJldHVybiBwdXRfdXNlcihoZWFydGJlYXQsIHApOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PVFRZOworCX0KK30KKworLyoqCisgKglvY3Rlb25fd2R0X29wZW46CisgKglAaW5vZGU6IGlub2RlIG9mIGRldmljZQorICoJQGZpbGU6IGZpbGUgaGFuZGxlIHRvIGRldmljZQorICoKKyAqCVRoZSB3YXRjaGRvZyBkZXZpY2UgaGFzIGJlZW4gb3BlbmVkLiBUaGUgd2F0Y2hkb2cgZGV2aWNlIGlzIHNpbmdsZQorICoJb3BlbiBhbmQgb24gb3BlbmluZyB3ZSBkbyBhIHBpbmcgdG8gcmVzZXQgdGhlIGNvdW50ZXJzLgorICovCisKK3N0YXRpYyBpbnQgb2N0ZW9uX3dkdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZvY3Rlb25fd2R0X2lzX29wZW4pKQorCQlyZXR1cm4gLUVCVVNZOworCS8qCisJICoJQWN0aXZhdGUKKwkgKi8KKwlvY3Rlb25fd2R0X3BpbmcoKTsKKwlkb19jb3VuZG93biA9IDE7CisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworfQorCisvKioKKyAqCW9jdGVvbl93ZHRfcmVsZWFzZToKKyAqCUBpbm9kZTogaW5vZGUgdG8gYm9hcmQKKyAqCUBmaWxlOiBmaWxlIGhhbmRsZSB0byBib2FyZAorICoKKyAqCVRoZSB3YXRjaGRvZyBoYXMgYSBjb25maWd1cmFibGUgQVBJLiBUaGVyZSBpcyBhIHJlbGlnaW91cyBkaXNwdXRlCisgKgliZXR3ZWVuIHBlb3BsZSB3aG8gd2FudCB0aGVpciB3YXRjaGRvZyB0byBiZSBhYmxlIHRvIHNodXQgZG93biBhbmQKKyAqCXRob3NlIHdobyB3YW50IHRvIGJlIHN1cmUgaWYgdGhlIHdhdGNoZG9nIG1hbmFnZXIgZGllcyB0aGUgbWFjaGluZQorICoJcmVib290cy4gSW4gdGhlIGZvcm1lciBjYXNlIHdlIGRpc2FibGUgdGhlIGNvdW50ZXJzLCBpbiB0aGUgbGF0dGVyCisgKgljYXNlIHlvdSBoYXZlIHRvIG9wZW4gaXQgYWdhaW4gdmVyeSBzb29uLgorICovCisKK3N0YXRpYyBpbnQgb2N0ZW9uX3dkdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmIChleHBlY3RfY2xvc2UpIHsKKwkJZG9fY291bmRvd24gPSAwOworCQlvY3Rlb25fd2R0X3BpbmcoKTsKKwl9IGVsc2UgeworCQlwcl9jcml0KCJvY3Rlb25fd2R0OiBXRFQgZGV2aWNlIGNsb3NlZCB1bmV4cGVjdGVkbHkuICBXRFQgd2lsbCBub3Qgc3RvcCFcbiIpOworCX0KKwljbGVhcl9iaXQoMCwgJm9jdGVvbl93ZHRfaXNfb3Blbik7CisJZXhwZWN0X2Nsb3NlID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb2N0ZW9uX3dkdF9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkubGxzZWVrCQk9IG5vX2xsc2VlaywKKwkud3JpdGUJCT0gb2N0ZW9uX3dkdF93cml0ZSwKKwkudW5sb2NrZWRfaW9jdGwJPSBvY3Rlb25fd2R0X2lvY3RsLAorCS5vcGVuCQk9IG9jdGVvbl93ZHRfb3BlbiwKKwkucmVsZWFzZQk9IG9jdGVvbl93ZHRfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBvY3Rlb25fd2R0X21pc2NkZXYgPSB7CisJLm1pbm9yCT0gV0FUQ0hET0dfTUlOT1IsCisJLm5hbWUJPSAid2F0Y2hkb2ciLAorCS5mb3BzCT0gJm9jdGVvbl93ZHRfZm9wcywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgb2N0ZW9uX3dkdF9jcHVfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBvY3Rlb25fd2R0X2NwdV9jYWxsYmFjaywKK307CisKKworLyoqCisgKiBNb2R1bGUvIGRyaXZlciBpbml0aWFsaXphdGlvbi4KKyAqCisgKiBSZXR1cm5zIFplcm8gb24gc3VjY2VzcworICovCitzdGF0aWMgaW50IF9faW5pdCBvY3Rlb25fd2R0X2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKwlpbnQgcmV0OworCWludCBjcHU7CisJdTY0ICpwdHI7CisKKwkvKgorCSAqIFdhdGNoZG9nIHRpbWUgZXhwaXJhdGlvbiBsZW5ndGggPSBUaGUgMTYgYml0cyBvZiBMRU4KKwkgKiByZXByZXNlbnQgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiBhIDI0IGJpdCBkZWNyZW1lbnRlcgorCSAqIHRoYXQgZGVjcmVtZW50cyBldmVyeSAyNTYgY3ljbGVzLgorCSAqCisJICogVHJ5IGZvciBhIHRpbWVvdXQgb2YgNSBzZWMsIGlmIHRoYXQgZmFpbHMgYSBzbWFsbGVyIG51bWJlcgorCSAqIG9mIGV2ZW4gc2Vjb25kcywKKwkgKi8KKwltYXhfdGltZW91dF9zZWMgPSA2OworCWRvIHsKKwkJbWF4X3RpbWVvdXRfc2VjLS07CisJCXRpbWVvdXRfY250ID0gKChvY3Rlb25fZ2V0X2Nsb2NrX3JhdGUoKSA+PiA4KSAqIG1heF90aW1lb3V0X3NlYykgPj4gODsKKwl9IHdoaWxlICh0aW1lb3V0X2NudCA+IDY1NTM1KTsKKworCUJVR19PTih0aW1lb3V0X2NudCA9PSAwKTsKKworCW9jdGVvbl93ZHRfY2FsY19wYXJhbWV0ZXJzKGhlYXJ0YmVhdCk7CisKKwlwcl9pbmZvKCJvY3Rlb25fd2R0OiBJbml0aWFsIGdyYW51bGFyaXR5ICVkIFNlYy5cbiIsIHRpbWVvdXRfc2VjKTsKKworCXJldCA9IG1pc2NfcmVnaXN0ZXIoJm9jdGVvbl93ZHRfbWlzY2Rldik7CisJaWYgKHJldCkgeworCQlwcl9lcnIoIm9jdGVvbl93ZHQ6IGNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAorCQkJV0FUQ0hET0dfTUlOT1IsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIEJ1aWxkIHRoZSBOTUkgaGFuZGxlciAuLi4gKi8KKwlvY3Rlb25fd2R0X2J1aWxkX3N0YWdlMSgpOworCisJLyogLi4uIGFuZCBpbnN0YWxsIGl0LiAqLworCXB0ciA9ICh1NjQgKikgbm1pX3N0YWdlMV9pbnNuczsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQljdm14X3dyaXRlX2NzcihDVk1YX01JT19CT09UX0xPQ19BRFIsIGkgKiA4KTsKKwkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9NSU9fQk9PVF9MT0NfREFULCBwdHJbaV0pOworCX0KKwljdm14X3dyaXRlX2NzcihDVk1YX01JT19CT09UX0xPQ19DRkdYKDApLCAweDgxZmMwMDAwKTsKKworCWNwdW1hc2tfY2xlYXIoJmlycV9lbmFibGVkX2NwdXMpOworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCisJCW9jdGVvbl93ZHRfc2V0dXBfaW50ZXJydXB0KGNwdSk7CisKKwlyZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJm9jdGVvbl93ZHRfY3B1X25vdGlmaWVyKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIE1vZHVsZSAvIGRyaXZlciBzaHV0ZG93bgorICovCitzdGF0aWMgdm9pZCBfX2V4aXQgb2N0ZW9uX3dkdF9jbGVhbnVwKHZvaWQpCit7CisJaW50IGNwdTsKKworCW1pc2NfZGVyZWdpc3Rlcigmb2N0ZW9uX3dkdF9taXNjZGV2KTsKKworCXVucmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZvY3Rlb25fd2R0X2NwdV9ub3RpZmllcik7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlpbnQgY29yZSA9IGNwdTJjb3JlKGNwdSk7CisJCS8qIERpc2FibGUgdGhlIHdhdGNoZG9nICovCisJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX1dET0dYKGNvcmUpLCAwKTsKKwkJLyogRnJlZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgKi8KKwkJZnJlZV9pcnEoT0NURU9OX0lSUV9XRE9HMCArIGNvcmUsIG9jdGVvbl93ZHRfcG9rZV9pcnEpOworCX0KKwkvKgorCSAqIERpc2FibGUgdGhlIGJvb3QtYnVzIG1lbW9yeSwgdGhlIGNvZGUgaXQgcG9pbnRzIHRvIGlzIHNvb24KKwkgKiB0byBnbyBtaXNzaW5nLgorCSAqLworCWN2bXhfd3JpdGVfY3NyKENWTVhfTUlPX0JPT1RfTE9DX0NGR1goMCksIDApOworfQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJDYXZpdW0gTmV0d29ya3MgPHN1cHBvcnRAY2F2aXVtbmV0d29ya3MuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDYXZpdW0gTmV0d29ya3MgT2N0ZW9uIFdhdGNoZG9nIGRyaXZlci4iKTsKK21vZHVsZV9pbml0KG9jdGVvbl93ZHRfaW5pdCk7Cittb2R1bGVfZXhpdChvY3Rlb25fd2R0X2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9vY3Rlb24td2R0LW5taS5TIGIvZHJpdmVycy93YXRjaGRvZy9vY3Rlb24td2R0LW5taS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhOTAwYTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3dhdGNoZG9nL29jdGVvbi13ZHQtbm1pLlMKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBDYXZpdW0gTmV0d29ya3MKKyAqLworI2luY2x1ZGUgPGFzbS9hc20uaD4KKyNpbmNsdWRlIDxhc20vcmVnZGVmLmg+CisKKyNkZWZpbmUgU0FWRV9SRUcocikJc2QgJHIsIC0zMjc2OCs2OTEyLSgzMi1yKSo4KCQwKQorCisgICAgICAgIE5FU1RFRChvY3Rlb25fd2R0X25taV9zdGFnZTIsIDAsIHNwKQorCS5zZXQgCXB1c2gKKwkuc2V0IAlub3Jlb3JkZXIKKwkuc2V0IAlub2F0CisJLyogU2F2ZSBhbGwgcmVnaXN0ZXJzIHRvIHRoZSB0b3AgQ1ZNU0VHLiBUaGlzIHNob3VsZG4ndAorCSAqIGNvcnJ1cHQgYW55IHN0YXRlIHVzZWQgYnkgdGhlIGtlcm5lbC4gQWxzbyBhbGwgcmVnaXN0ZXJzCisJICogc2hvdWxkIGhhdmUgdGhlIHZhbHVlIHJpZ2h0IGJlZm9yZSB0aGUgTk1JLiAqLworCVNBVkVfUkVHKDApCisJU0FWRV9SRUcoMSkKKwlTQVZFX1JFRygyKQorCVNBVkVfUkVHKDMpCisJU0FWRV9SRUcoNCkKKwlTQVZFX1JFRyg1KQorCVNBVkVfUkVHKDYpCisJU0FWRV9SRUcoNykKKwlTQVZFX1JFRyg4KQorCVNBVkVfUkVHKDkpCisJU0FWRV9SRUcoMTApCisJU0FWRV9SRUcoMTEpCisJU0FWRV9SRUcoMTIpCisJU0FWRV9SRUcoMTMpCisJU0FWRV9SRUcoMTQpCisJU0FWRV9SRUcoMTUpCisJU0FWRV9SRUcoMTYpCisJU0FWRV9SRUcoMTcpCisJU0FWRV9SRUcoMTgpCisJU0FWRV9SRUcoMTkpCisJU0FWRV9SRUcoMjApCisJU0FWRV9SRUcoMjEpCisJU0FWRV9SRUcoMjIpCisJU0FWRV9SRUcoMjMpCisJU0FWRV9SRUcoMjQpCisJU0FWRV9SRUcoMjUpCisJU0FWRV9SRUcoMjYpCisJU0FWRV9SRUcoMjcpCisJU0FWRV9SRUcoMjgpCisJU0FWRV9SRUcoMjkpCisJU0FWRV9SRUcoMzApCisJU0FWRV9SRUcoMzEpCisJLyogU2V0IHRoZSBzdGFjayB0byBiZWdpbiByaWdodCBiZWxvdyB0aGUgcmVnaXN0ZXJzICovCisJbGkJc3AsIC0zMjc2OCs2OTEyLTMyKjgKKwkvKiBMb2FkIHRoZSBhZGRyZXNzIG9mIHRoZSB0aGlyZCBzdGFnZSBoYW5kbGVyICovCisJZGxhCWEwLCBvY3Rlb25fd2R0X25taV9zdGFnZTMKKwkvKiBDYWxsIHRoZSB0aGlyZCBzdGFnZSBoYW5kbGVyICovCisJamFsCWEwCisJLyogYTAgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIHNhdmVkIHJlZ2lzdGVycyAqLworCSBtb3ZlCWEwLCBzcAorCS8qIExvb3AgZm9ydmV2ZXIgaWYgd2UgZ2V0IGhlcmUuICovCisxOgliCTFiCisJbm9wCisJLnNldCBwb3AKKwlFTkQob2N0ZW9uX3dkdF9ubWlfc3RhZ2UyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9yaW93ZC5jIGIvZHJpdmVycy93YXRjaGRvZy9yaW93ZC5jCmluZGV4IDVkY2VlZGQuLjQwODJiNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcmlvd2QuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3Jpb3dkLmMKQEAgLTI1MCwxMiArMjUwLDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHJpb3dkX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gb2ZfcmVnaXN0ZXJfZHJpdmVyKCZyaW93ZF9kcml2ZXIsICZvZl9idXNfdHlwZSk7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmcmlvd2RfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHJpb3dkX2V4aXQodm9pZCkKIHsKLQlvZl91bnJlZ2lzdGVyX2RyaXZlcigmcmlvd2RfZHJpdmVyKTsKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmcmlvd2RfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQocmlvd2RfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9LY29uZmlnIGIvZHJpdmVycy94ZW4vS2NvbmZpZwppbmRleCBmYWQzZGYyLi4wYTg4MjY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9LY29uZmlnCisrKyBiL2RyaXZlcnMveGVuL0tjb25maWcKQEAgLTYyLDQgKzYyLDEzIEBACiAJIHZpcnR1YWwgZW52aXJvbm1lbnQsIC9zeXMvaHlwZXJ2aXNvciB3aWxsIHN0aWxsIGJlIHByZXNlbnQsCiAJIGJ1dCB3aWxsIGhhdmUgbm8geGVuIGNvbnRlbnRzLgogCitjb25maWcgWEVOX1BMQVRGT1JNX1BDSQorCXRyaXN0YXRlICJ4ZW4gcGxhdGZvcm0gcGNpIGRldmljZSBkcml2ZXIiCisJZGVwZW5kcyBvbiBYRU5fUFZIVk0KKwlkZWZhdWx0IG0KKwloZWxwCisJICBEcml2ZXIgZm9yIHRoZSBYZW4gUENJIFBsYXRmb3JtIGRldmljZTogaXQgaXMgcmVzcG9uc2libGUgZm9yCisJICBpbml0aWFsaXppbmcgeGVuYnVzIGFuZCBncmFudF90YWJsZSB3aGVuIHJ1bm5pbmcgaW4gYSBYZW4gSFZNCisJICBkb21haW4uIEFzIGEgY29uc2VxdWVuY2UgdGhpcyBkcml2ZXIgaXMgcmVxdWlyZWQgdG8gcnVuIGFueSBYZW4gUFYKKwkgIGZyb250ZW5kIG9uIFhlbiBIVk0uCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9NYWtlZmlsZSBiL2RyaXZlcnMveGVuL01ha2VmaWxlCmluZGV4IDdjMjg0MzQuLmUzOTJmYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL01ha2VmaWxlCisrKyBiL2RyaXZlcnMveGVuL01ha2VmaWxlCkBAIC05LDQgKzksNSBAQAogb2JqLSQoQ09ORklHX1hFTl9CQUxMT09OKQkrPSBiYWxsb29uLm8KIG9iai0kKENPTkZJR19YRU5fREVWX0VWVENITikJKz0gZXZ0Y2huLm8KIG9iai0kKENPTkZJR19YRU5GUykJCSs9IHhlbmZzLwotb2JqLSQoQ09ORklHX1hFTl9TWVNfSFlQRVJWSVNPUikJKz0gc3lzLWh5cGVydmlzb3IubwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK29iai0kKENPTkZJR19YRU5fU1lTX0hZUEVSVklTT1IpCSs9IHN5cy1oeXBlcnZpc29yLm8KK29iai0kKENPTkZJR19YRU5fUExBVEZPUk1fUENJKQkrPSBwbGF0Zm9ybS1wY2kubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vZXZlbnRzLmMgYi9kcml2ZXJzL3hlbi9ldmVudHMuYwppbmRleCBkYjhmNTA2Li43MmY5MWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9ldmVudHMuYworKysgYi9kcml2ZXJzL3hlbi9ldmVudHMuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKKyNpbmNsdWRlIDxhc20vZGVzYy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lkbGUuaD4KQEAgLTM2LDEwICszNywxNCBAQAogI2luY2x1ZGUgPGFzbS94ZW4vaHlwZXJjYWxsLmg+CiAjaW5jbHVkZSA8YXNtL3hlbi9oeXBlcnZpc29yLmg+CiAKKyNpbmNsdWRlIDx4ZW4veGVuLmg+CisjaW5jbHVkZSA8eGVuL2h2bS5oPgogI2luY2x1ZGUgPHhlbi94ZW4tb3BzLmg+CiAjaW5jbHVkZSA8eGVuL2V2ZW50cy5oPgogI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UveGVuLmg+CiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9ldmVudF9jaGFubmVsLmg+CisjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9odm0vaHZtX29wLmg+CisjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9odm0vcGFyYW1zLmg+CiAKIC8qCiAgKiBUaGlzIGxvY2sgcHJvdGVjdHMgdXBkYXRlcyB0byB0aGUgZm9sbG93aW5nIG1hcHBpbmcgYW5kIHJlZmVyZW5jZS1jb3VudApAQCAtMzM1LDkgKzM0MCwxOCBAQAogCWludCBpcnE7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCi0JZm9yIChpcnEgPSAwOyBpcnEgPCBucl9pcnFzOyBpcnErKykKKwlmb3IgKGlycSA9IDA7IGlycSA8IG5yX2lycXM7IGlycSsrKSB7CisJCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCQkvKiBvbmx5IDAtPjE1IGhhdmUgaW5pdCdkIGRlc2M7IGhhbmRsZSBpcnEgPiAxNiAqLworCQlpZiAoZGVzYyA9PSBOVUxMKQorCQkJYnJlYWs7CisJCWlmIChkZXNjLT5jaGlwID09ICZub19pcnFfY2hpcCkKKwkJCWJyZWFrOworCQlpZiAoZGVzYy0+Y2hpcCAhPSAmeGVuX2R5bmFtaWNfY2hpcCkKKwkJCWNvbnRpbnVlOwogCQlpZiAoaXJxX2luZm9baXJxXS50eXBlID09IElSUVRfVU5CT1VORCkKIAkJCWJyZWFrOworCX0KIAogCWlmIChpcnEgPT0gbnJfaXJxcykKIAkJcGFuaWMoIk5vIGF2YWlsYWJsZSBJUlEgdG8gYmluZCB0bzogaW5jcmVhc2UgbnJfaXJxcyFcbiIpOwpAQCAtMzQ2LDcgKzM2MCw3IEBACiAJaWYgKFdBUk5fT04oZGVzYyA9PSBOVUxMKSkKIAkJcmV0dXJuIC0xOwogCi0JZHluYW1pY19pcnFfaW5pdChpcnEpOworCWR5bmFtaWNfaXJxX2luaXRfa2VlcF9jaGlwX2RhdGEoaXJxKTsKIAogCXJldHVybiBpcnE7CiB9CkBAIC01MzYsNiArNTUwLDcgQEAKIAlpZiAoaXJxIDwgMCkKIAkJcmV0dXJuIGlycTsKIAorCWlycWZsYWdzIHw9IElSUUZfTk9fU1VTUEVORDsKIAlyZXR2YWwgPSByZXF1ZXN0X2lycShpcnEsIGhhbmRsZXIsIGlycWZsYWdzLCBkZXZuYW1lLCBkZXZfaWQpOwogCWlmIChyZXR2YWwgIT0gMCkgewogCQl1bmJpbmRfZnJvbV9pcnEoaXJxKTsKQEAgLTYxNywxNyArNjMyLDEzIEBACiAgKiBhIGJpdHNldCBvZiB3b3JkcyB3aGljaCBjb250YWluIHBlbmRpbmcgZXZlbnQgYml0cy4gIFRoZSBzZWNvbmQKICAqIGxldmVsIGlzIGEgYml0c2V0IG9mIHBlbmRpbmcgZXZlbnRzIHRoZW1zZWx2ZXMuCiAgKi8KLXZvaWQgeGVuX2V2dGNobl9kb191cGNhbGwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBfX3hlbl9ldnRjaG5fZG9fdXBjYWxsKHZvaWQpCiB7CiAJaW50IGNwdSA9IGdldF9jcHUoKTsKLQlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3MgPSBzZXRfaXJxX3JlZ3MocmVncyk7CiAJc3RydWN0IHNoYXJlZF9pbmZvICpzID0gSFlQRVJWSVNPUl9zaGFyZWRfaW5mbzsKIAlzdHJ1Y3QgdmNwdV9pbmZvICp2Y3B1X2luZm8gPSBfX2dldF9jcHVfdmFyKHhlbl92Y3B1KTsKICAJdW5zaWduZWQgY291bnQ7CiAKLQlleGl0X2lkbGUoKTsKLQlpcnFfZW50ZXIoKTsKLQogCWRvIHsKIAkJdW5zaWduZWQgbG9uZyBwZW5kaW5nX3dvcmRzOwogCkBAIC02NjQsMTUgKzY3NSwzMiBAQAogCiAJCWNvdW50ID0gX19nZXRfY3B1X3Zhcih4ZWRfbmVzdGluZ19jb3VudCk7CiAJCV9fZ2V0X2NwdV92YXIoeGVkX25lc3RpbmdfY291bnQpID0gMDsKLQl9IHdoaWxlKGNvdW50ICE9IDEpOworCX0gd2hpbGUgKGNvdW50ICE9IDEgfHwgdmNwdV9pbmZvLT5ldnRjaG5fdXBjYWxsX3BlbmRpbmcpOwogCiBvdXQ6Ci0JaXJxX2V4aXQoKTsKLQlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOwogCiAJcHV0X2NwdSgpOwogfQogCit2b2lkIHhlbl9ldnRjaG5fZG9fdXBjYWxsKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKKworCWV4aXRfaWRsZSgpOworCWlycV9lbnRlcigpOworCisJX194ZW5fZXZ0Y2huX2RvX3VwY2FsbCgpOworCisJaXJxX2V4aXQoKTsKKwlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOworfQorCit2b2lkIHhlbl9odm1fZXZ0Y2huX2RvX3VwY2FsbCh2b2lkKQoreworCV9feGVuX2V2dGNobl9kb191cGNhbGwoKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHhlbl9odm1fZXZ0Y2huX2RvX3VwY2FsbCk7CisKIC8qIFJlYmluZCBhIG5ldyBldmVudCBjaGFubmVsIHRvIGFuIGV4aXN0aW5nIGlycS4gKi8KIHZvaWQgcmViaW5kX2V2dGNobl9pcnEoaW50IGV2dGNobiwgaW50IGlycSkKIHsKQEAgLTcwOCw3ICs3MzYsMTAgQEAKIAlzdHJ1Y3QgZXZ0Y2huX2JpbmRfdmNwdSBiaW5kX3ZjcHU7CiAJaW50IGV2dGNobiA9IGV2dGNobl9mcm9tX2lycShpcnEpOwogCi0JaWYgKCFWQUxJRF9FVlRDSE4oZXZ0Y2huKSkKKwkvKiBldmVudHMgZGVsaXZlcmVkIHZpYSBwbGF0Zm9ybSBQQ0kgaW50ZXJydXB0cyBhcmUgYWx3YXlzCisJICogcm91dGVkIHRvIHZjcHUgMCAqLworCWlmICghVkFMSURfRVZUQ0hOKGV2dGNobikgfHwKKwkJKHhlbl9odm1fZG9tYWluKCkgJiYgIXhlbl9oYXZlX3ZlY3Rvcl9jYWxsYmFjaykpCiAJCXJldHVybiAtMTsKIAogCS8qIFNlbmQgZnV0dXJlIGluc3RhbmNlcyBvZiB0aGlzIGludGVycnVwdCB0byBvdGhlciB2Y3B1LiAqLwpAQCAtOTMzLDYgKzk2NCw0NCBAQAogCS5yZXRyaWdnZXIJPSByZXRyaWdnZXJfZHluaXJxLAogfTsKIAoraW50IHhlbl9zZXRfY2FsbGJhY2tfdmlhKHVpbnQ2NF90IHZpYSkKK3sKKwlzdHJ1Y3QgeGVuX2h2bV9wYXJhbSBhOworCWEuZG9taWQgPSBET01JRF9TRUxGOworCWEuaW5kZXggPSBIVk1fUEFSQU1fQ0FMTEJBQ0tfSVJROworCWEudmFsdWUgPSB2aWE7CisJcmV0dXJuIEhZUEVSVklTT1JfaHZtX29wKEhWTU9QX3NldF9wYXJhbSwgJmEpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeGVuX3NldF9jYWxsYmFja192aWEpOworCisjaWZkZWYgQ09ORklHX1hFTl9QVkhWTQorLyogVmVjdG9yIGNhbGxiYWNrcyBhcmUgYmV0dGVyIHRoYW4gUENJIGludGVycnVwdHMgdG8gcmVjZWl2ZSBldmVudAorICogY2hhbm5lbCBub3RpZmljYXRpb25zIGJlY2F1c2Ugd2UgY2FuIHJlY2VpdmUgdmVjdG9yIGNhbGxiYWNrcyBvbiBhbnkKKyAqIHZjcHUgYW5kIHdlIGRvbid0IG5lZWQgUENJIHN1cHBvcnQgb3IgQVBJQyBpbnRlcmFjdGlvbnMuICovCit2b2lkIHhlbl9jYWxsYmFja192ZWN0b3Iodm9pZCkKK3sKKwlpbnQgcmM7CisJdWludDY0X3QgY2FsbGJhY2tfdmlhOworCWlmICh4ZW5faGF2ZV92ZWN0b3JfY2FsbGJhY2spIHsKKwkJY2FsbGJhY2tfdmlhID0gSFZNX0NBTExCQUNLX1ZFQ1RPUihYRU5fSFZNX0VWVENITl9DQUxMQkFDSyk7CisJCXJjID0geGVuX3NldF9jYWxsYmFja192aWEoY2FsbGJhY2tfdmlhKTsKKwkJaWYgKHJjKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlJlcXVlc3QgZm9yIFhlbiBIVk0gY2FsbGJhY2sgdmVjdG9yIgorCQkJCQkiIGZhaWxlZC5cbiIpOworCQkJeGVuX2hhdmVfdmVjdG9yX2NhbGxiYWNrID0gMDsKKwkJCXJldHVybjsKKwkJfQorCQlwcmludGsoS0VSTl9JTkZPICJYZW4gSFZNIGNhbGxiYWNrIHZlY3RvciBmb3IgZXZlbnQgZGVsaXZlcnkgaXMgIgorCQkJCSJlbmFibGVkXG4iKTsKKwkJLyogaW4gdGhlIHJlc3RvcmUgY2FzZSB0aGUgdmVjdG9yIGhhcyBhbHJlYWR5IGJlZW4gYWxsb2NhdGVkICovCisJCWlmICghdGVzdF9iaXQoWEVOX0hWTV9FVlRDSE5fQ0FMTEJBQ0ssIHVzZWRfdmVjdG9ycykpCisJCQlhbGxvY19pbnRyX2dhdGUoWEVOX0hWTV9FVlRDSE5fQ0FMTEJBQ0ssIHhlbl9odm1fY2FsbGJhY2tfdmVjdG9yKTsKKwl9Cit9CisjZWxzZQordm9pZCB4ZW5fY2FsbGJhY2tfdmVjdG9yKHZvaWQpIHt9CisjZW5kaWYKKwogdm9pZCBfX2luaXQgeGVuX2luaXRfSVJRKHZvaWQpCiB7CiAJaW50IGk7CkBAIC05NDcsNSArMTAxNiwxMCBAQAogCWZvciAoaSA9IDA7IGkgPCBOUl9FVkVOVF9DSEFOTkVMUzsgaSsrKQogCQltYXNrX2V2dGNobihpKTsKIAotCWlycV9jdHhfaW5pdChzbXBfcHJvY2Vzc29yX2lkKCkpOworCWlmICh4ZW5faHZtX2RvbWFpbigpKSB7CisJCXhlbl9jYWxsYmFja192ZWN0b3IoKTsKKwkJbmF0aXZlX2luaXRfSVJRKCk7CisJfSBlbHNlIHsKKwkJaXJxX2N0eF9pbml0KHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vZ3JhbnQtdGFibGUuYyBiL2RyaXZlcnMveGVuL2dyYW50LXRhYmxlLmMKaW5kZXggZjY2ZGIzYi4uNmM0NTMxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vZ3JhbnQtdGFibGUuYworKysgYi9kcml2ZXJzL3hlbi9ncmFudC10YWJsZS5jCkBAIC0zNywxMSArMzcsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8eGVuL3hlbi5oPgogI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UveGVuLmg+CiAjaW5jbHVkZSA8eGVuL3BhZ2UuaD4KICNpbmNsdWRlIDx4ZW4vZ3JhbnRfdGFibGUuaD4KKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL21lbW9yeS5oPgogI2luY2x1ZGUgPGFzbS94ZW4vaHlwZXJjYWxsLmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpAQCAtNTksNiArNjEsOCBAQAogc3RhdGljIGludCBnbnR0YWJfZnJlZV9jb3VudDsKIHN0YXRpYyBncmFudF9yZWZfdCBnbnR0YWJfZnJlZV9oZWFkOwogc3RhdGljIERFRklORV9TUElOTE9DSyhnbnR0YWJfbGlzdF9sb2NrKTsKK3Vuc2lnbmVkIGxvbmcgeGVuX2h2bV9yZXN1bWVfZnJhbWVzOworRVhQT1JUX1NZTUJPTF9HUEwoeGVuX2h2bV9yZXN1bWVfZnJhbWVzKTsKIAogc3RhdGljIHN0cnVjdCBncmFudF9lbnRyeSAqc2hhcmVkOwogCkBAIC00MzMsNyArNDM3LDcgQEAKIAlyZXR1cm4gcXVlcnkubWF4X25yX2ZyYW1lczsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWF4X25yX2dyYW50X2ZyYW1lcyh2b2lkKQordW5zaWduZWQgaW50IGdudHRhYl9tYXhfZ3JhbnRfZnJhbWVzKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IHhlbl9tYXggPSBfX21heF9ucl9ncmFudF9mcmFtZXMoKTsKIApAQCAtNDQxLDYgKzQ0NSw3IEBACiAJCXJldHVybiBib290X21heF9ucl9ncmFudF9mcmFtZXM7CiAJcmV0dXJuIHhlbl9tYXg7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChnbnR0YWJfbWF4X2dyYW50X2ZyYW1lcyk7CiAKIHN0YXRpYyBpbnQgZ250dGFiX21hcCh1bnNpZ25lZCBpbnQgc3RhcnRfaWR4LCB1bnNpZ25lZCBpbnQgZW5kX2lkeCkKIHsKQEAgLTQ0OSw2ICs0NTQsMzAgQEAKIAl1bnNpZ25lZCBpbnQgbnJfZ2ZyYW1lcyA9IGVuZF9pZHggKyAxOwogCWludCByYzsKIAorCWlmICh4ZW5faHZtX2RvbWFpbigpKSB7CisJCXN0cnVjdCB4ZW5fYWRkX3RvX3BoeXNtYXAgeGF0cDsKKwkJdW5zaWduZWQgaW50IGkgPSBlbmRfaWR4OworCQlyYyA9IDA7CisJCS8qCisJCSAqIExvb3AgYmFja3dhcmRzLCBzbyB0aGF0IHRoZSBmaXJzdCBoeXBlcmNhbGwgaGFzIHRoZSBsYXJnZXN0CisJCSAqIGluZGV4LCBlbnN1cmluZyB0aGF0IHRoZSB0YWJsZSB3aWxsIGdyb3cgb25seSBvbmNlLgorCQkgKi8KKwkJZG8geworCQkJeGF0cC5kb21pZCA9IERPTUlEX1NFTEY7CisJCQl4YXRwLmlkeCA9IGk7CisJCQl4YXRwLnNwYWNlID0gWEVOTUFQU1BBQ0VfZ3JhbnRfdGFibGU7CisJCQl4YXRwLmdwZm4gPSAoeGVuX2h2bV9yZXN1bWVfZnJhbWVzID4+IFBBR0VfU0hJRlQpICsgaTsKKwkJCXJjID0gSFlQRVJWSVNPUl9tZW1vcnlfb3AoWEVOTUVNX2FkZF90b19waHlzbWFwLCAmeGF0cCk7CisJCQlpZiAocmMgIT0gMCkgeworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJCSJncmFudCB0YWJsZSBhZGRfdG9fcGh5c21hcCBmYWlsZWQsIGVycj0lZFxuIiwgcmMpOworCQkJCWJyZWFrOworCQkJfQorCQl9IHdoaWxlIChpLS0gPiBzdGFydF9pZHgpOworCisJCXJldHVybiByYzsKKwl9CisKIAlmcmFtZXMgPSBrbWFsbG9jKG5yX2dmcmFtZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZyksIEdGUF9BVE9NSUMpOwogCWlmICghZnJhbWVzKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTQ2NSw3ICs0OTQsNyBAQAogCiAJQlVHX09OKHJjIHx8IHNldHVwLnN0YXR1cyk7CiAKLQlyYyA9IGFyY2hfZ250dGFiX21hcF9zaGFyZWQoZnJhbWVzLCBucl9nZnJhbWVzLCBtYXhfbnJfZ3JhbnRfZnJhbWVzKCksCisJcmMgPSBhcmNoX2dudHRhYl9tYXBfc2hhcmVkKGZyYW1lcywgbnJfZ2ZyYW1lcywgZ250dGFiX21heF9ncmFudF9mcmFtZXMoKSwKIAkJCQkgICAgJnNoYXJlZCk7CiAJQlVHX09OKHJjKTsKIApAQCAtNDc2LDkgKzUwNSwyNyBAQAogCiBpbnQgZ250dGFiX3Jlc3VtZSh2b2lkKQogewotCWlmIChtYXhfbnJfZ3JhbnRfZnJhbWVzKCkgPCBucl9ncmFudF9mcmFtZXMpCisJdW5zaWduZWQgaW50IG1heF9ucl9nZnJhbWVzOworCisJbWF4X25yX2dmcmFtZXMgPSBnbnR0YWJfbWF4X2dyYW50X2ZyYW1lcygpOworCWlmIChtYXhfbnJfZ2ZyYW1lcyA8IG5yX2dyYW50X2ZyYW1lcykKIAkJcmV0dXJuIC1FTk9TWVM7Ci0JcmV0dXJuIGdudHRhYl9tYXAoMCwgbnJfZ3JhbnRfZnJhbWVzIC0gMSk7CisKKwlpZiAoeGVuX3B2X2RvbWFpbigpKQorCQlyZXR1cm4gZ250dGFiX21hcCgwLCBucl9ncmFudF9mcmFtZXMgLSAxKTsKKworCWlmICghc2hhcmVkKSB7CisJCXNoYXJlZCA9IGlvcmVtYXAoeGVuX2h2bV9yZXN1bWVfZnJhbWVzLCBQQUdFX1NJWkUgKiBtYXhfbnJfZ2ZyYW1lcyk7CisJCWlmIChzaGFyZWQgPT0gTlVMTCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkiRmFpbGVkIHRvIGlvcmVtYXAgZ250dGFiIHNoYXJlIGZyYW1lcyEiKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCisJZ250dGFiX21hcCgwLCBucl9ncmFudF9mcmFtZXMgLSAxKTsKKworCXJldHVybiAwOwogfQogCiBpbnQgZ250dGFiX3N1c3BlbmQodm9pZCkKQEAgLTQ5NSw3ICs1NDIsNyBAQAogCWN1ciA9IG5yX2dyYW50X2ZyYW1lczsKIAlleHRyYSA9ICgocmVxX2VudHJpZXMgKyAoR1JFRlNfUEVSX0dSQU5UX0ZSQU1FLTEpKSAvCiAJCSBHUkVGU19QRVJfR1JBTlRfRlJBTUUpOwotCWlmIChjdXIgKyBleHRyYSA+IG1heF9ucl9ncmFudF9mcmFtZXMoKSkKKwlpZiAoY3VyICsgZXh0cmEgPiBnbnR0YWJfbWF4X2dyYW50X2ZyYW1lcygpKQogCQlyZXR1cm4gLUVOT1NQQzsKIAogCXJjID0gZ250dGFiX21hcChjdXIsIGN1ciArIGV4dHJhIC0gMSk7CkBAIC01MDUsMTUgKzU1MiwxMiBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgZ250dGFiX2luaXQodm9pZCkKK2ludCBnbnR0YWJfaW5pdCh2b2lkKQogewogCWludCBpOwogCXVuc2lnbmVkIGludCBtYXhfbnJfZ2xpc3RfZnJhbWVzLCBucl9nbGlzdF9mcmFtZXM7CiAJdW5zaWduZWQgaW50IG5yX2luaXRfZ3JlZnM7CiAKLQlpZiAoIXhlbl9kb21haW4oKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAlucl9ncmFudF9mcmFtZXMgPSAxOwogCWJvb3RfbWF4X25yX2dyYW50X2ZyYW1lcyA9IF9fbWF4X25yX2dyYW50X2ZyYW1lcygpOwogCkBAIC01NTYsNSArNjAwLDE4IEBACiAJa2ZyZWUoZ250dGFiX2xpc3QpOwogCXJldHVybiAtRU5PTUVNOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoZ250dGFiX2luaXQpOwogCi1jb3JlX2luaXRjYWxsKGdudHRhYl9pbml0KTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IF9fZ250dGFiX2luaXQodm9pZCkKK3sKKwkvKiBEZWxheSBncmFudC10YWJsZSBpbml0aWFsaXphdGlvbiBpbiB0aGUgUFYgb24gSFZNIGNhc2UgKi8KKwlpZiAoeGVuX2h2bV9kb21haW4oKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXhlbl9wdl9kb21haW4oKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gZ250dGFiX2luaXQoKTsKK30KKworY29yZV9pbml0Y2FsbChfX2dudHRhYl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL21hbmFnZS5jIGIvZHJpdmVycy94ZW4vbWFuYWdlLmMKaW5kZXggMDdlODU3Yi4uMTc5OWJkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vbWFuYWdlLmMKKysrIGIvZHJpdmVycy94ZW4vbWFuYWdlLmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RvcF9tYWNoaW5lLmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogCisjaW5jbHVkZSA8eGVuL3hlbi5oPgogI2luY2x1ZGUgPHhlbi94ZW5idXMuaD4KICNpbmNsdWRlIDx4ZW4vZ3JhbnRfdGFibGUuaD4KICNpbmNsdWRlIDx4ZW4vZXZlbnRzLmg+CkBAIC0xNyw2ICsxOCw3IEBACiAKICNpbmNsdWRlIDxhc20veGVuL2h5cGVyY2FsbC5oPgogI2luY2x1ZGUgPGFzbS94ZW4vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS94ZW4vaHlwZXJ2aXNvci5oPgogCiBlbnVtIHNodXRkb3duX3N0YXRlIHsKIAlTSFVURE9XTl9JTlZBTElEID0gLTEsCkBAIC0zMywxMCArMzUsMzAgQEAKIHN0YXRpYyBlbnVtIHNodXRkb3duX3N0YXRlIHNodXR0aW5nX2Rvd24gPSBTSFVURE9XTl9JTlZBTElEOwogCiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCitzdGF0aWMgaW50IHhlbl9odm1fc3VzcGVuZCh2b2lkICpkYXRhKQoreworCXN0cnVjdCBzY2hlZF9zaHV0ZG93biByID0geyAucmVhc29uID0gU0hVVERPV05fc3VzcGVuZCB9OworCWludCAqY2FuY2VsbGVkID0gZGF0YTsKKworCUJVR19PTighaXJxc19kaXNhYmxlZCgpKTsKKworCSpjYW5jZWxsZWQgPSBIWVBFUlZJU09SX3NjaGVkX29wKFNDSEVET1Bfc2h1dGRvd24sICZyKTsKKworCXhlbl9odm1fcG9zdF9zdXNwZW5kKCpjYW5jZWxsZWQpOworCWdudHRhYl9yZXN1bWUoKTsKKworCWlmICghKmNhbmNlbGxlZCkgeworCQl4ZW5faXJxX3Jlc3VtZSgpOworCQl4ZW5fdGltZXJfcmVzdW1lKCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgeGVuX3N1c3BlbmQodm9pZCAqZGF0YSkKIHsKLQlpbnQgKmNhbmNlbGxlZCA9IGRhdGE7CiAJaW50IGVycjsKKwlpbnQgKmNhbmNlbGxlZCA9IGRhdGE7CiAKIAlCVUdfT04oIWlycXNfZGlzYWJsZWQoKSk7CiAKQEAgLTEwNiw3ICsxMjgsMTAgQEAKIAkJZ290byBvdXRfcmVzdW1lOwogCX0KIAotCWVyciA9IHN0b3BfbWFjaGluZSh4ZW5fc3VzcGVuZCwgJmNhbmNlbGxlZCwgY3B1bWFza19vZigwKSk7CisJaWYgKHhlbl9odm1fZG9tYWluKCkpCisJCWVyciA9IHN0b3BfbWFjaGluZSh4ZW5faHZtX3N1c3BlbmQsICZjYW5jZWxsZWQsIGNwdW1hc2tfb2YoMCkpOworCWVsc2UKKwkJZXJyID0gc3RvcF9tYWNoaW5lKHhlbl9zdXNwZW5kLCAmY2FuY2VsbGVkLCBjcHVtYXNrX29mKDApKTsKIAogCWRwbV9yZXN1bWVfbm9pcnEoUE1TR19SRVNVTUUpOwogCkBAIC0yNTUsNyArMjgwLDE5IEBACiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBzZXR1cF9zaHV0ZG93bl9ldmVudCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgX19zZXR1cF9zaHV0ZG93bl9ldmVudCh2b2lkKQoreworCS8qIERlbGF5IGluaXRpYWxpemF0aW9uIGluIHRoZSBQViBvbiBIVk0gY2FzZSAqLworCWlmICh4ZW5faHZtX2RvbWFpbigpKQorCQlyZXR1cm4gMDsKKworCWlmICgheGVuX3B2X2RvbWFpbigpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiB4ZW5fc2V0dXBfc2h1dGRvd25fZXZlbnQoKTsKK30KKworaW50IHhlbl9zZXR1cF9zaHV0ZG93bl9ldmVudCh2b2lkKQogewogCXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgeGVuc3RvcmVfbm90aWZpZXIgPSB7CiAJCS5ub3RpZmllcl9jYWxsID0gc2h1dGRvd25fZXZlbnQKQEAgLTI2NCw1ICszMDEsNiBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh4ZW5fc2V0dXBfc2h1dGRvd25fZXZlbnQpOwogCi1zdWJzeXNfaW5pdGNhbGwoc2V0dXBfc2h1dGRvd25fZXZlbnQpOworc3Vic3lzX2luaXRjYWxsKF9fc2V0dXBfc2h1dGRvd25fZXZlbnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vcGxhdGZvcm0tcGNpLmMgYi9kcml2ZXJzL3hlbi9wbGF0Zm9ybS1wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDFiNWRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy94ZW4vcGxhdGZvcm0tcGNpLmMKQEAgLTAsMCArMSwyMDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHBsYXRmb3JtLXBjaS5jCisgKgorICogWGVuIHBsYXRmb3JtIFBDSSBkZXZpY2UgZHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIEludGVsIENvcnBvcmF0aW9uLgorICogQ29weXJpZ2h0IChjKSAyMDA3LCBYZW5Tb3VyY2UgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBDaXRyaXgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZQorICogUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCisgKgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKyNpbmNsdWRlIDx4ZW4vcGxhdGZvcm1fcGNpLmg+CisjaW5jbHVkZSA8eGVuL2dyYW50X3RhYmxlLmg+CisjaW5jbHVkZSA8eGVuL3hlbmJ1cy5oPgorI2luY2x1ZGUgPHhlbi9ldmVudHMuaD4KKyNpbmNsdWRlIDx4ZW4vaHZtLmg+CisjaW5jbHVkZSA8eGVuL3hlbi1vcHMuaD4KKworI2RlZmluZSBEUlZfTkFNRSAgICAieGVuLXBsYXRmb3JtLXBjaSIKKworTU9EVUxFX0FVVEhPUigic3NtaXRoQHhlbnNvdXJjZS5jb20gYW5kIHN0ZWZhbm8uc3RhYmVsbGluaUBldS5jaXRyaXguY29tIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlhlbiBwbGF0Zm9ybSBQQ0kgZGV2aWNlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBsYXRmb3JtX21taW87CitzdGF0aWMgdW5zaWduZWQgbG9uZyBwbGF0Zm9ybV9tbWlvX2FsbG9jOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGxhdGZvcm1fbW1pb2xlbjsKK3N0YXRpYyB1aW50NjRfdCBjYWxsYmFja192aWE7CisKK3Vuc2lnbmVkIGxvbmcgYWxsb2NfeGVuX21taW8odW5zaWduZWQgbG9uZyBsZW4pCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJYWRkciA9IHBsYXRmb3JtX21taW8gKyBwbGF0Zm9ybV9tbWlvX2FsbG9jOworCXBsYXRmb3JtX21taW9fYWxsb2MgKz0gbGVuOworCUJVR19PTihwbGF0Zm9ybV9tbWlvX2FsbG9jID4gcGxhdGZvcm1fbW1pb2xlbik7CisKKwlyZXR1cm4gYWRkcjsKK30KKworc3RhdGljIHVpbnQ2NF90IGdldF9jYWxsYmFja192aWEoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJdTggcGluOworCWludCBpcnE7CisKKwlpcnEgPSBwZGV2LT5pcnE7CisJaWYgKGlycSA8IDE2KQorCQlyZXR1cm4gaXJxOyAvKiBJU0EgSVJRICovCisKKwlwaW4gPSBwZGV2LT5waW47CisKKwkvKiBXZSBkb24ndCBrbm93IHRoZSBHU0kuIFNwZWNpZnkgdGhlIFBDSSBJTlR4IGxpbmUgaW5zdGVhZC4gKi8KKwlyZXR1cm4gKCh1aW50NjRfdCkweDAxIDw8IDU2KSB8IC8qIFBDSSBJTlR4IGlkZW50aWZpZXIgKi8KKwkJKCh1aW50NjRfdClwY2lfZG9tYWluX25yKHBkZXYtPmJ1cykgPDwgMzIpIHwKKwkJKCh1aW50NjRfdClwZGV2LT5idXMtPm51bWJlciA8PCAxNikgfAorCQkoKHVpbnQ2NF90KShwZGV2LT5kZXZmbiAmIDB4ZmYpIDw8IDgpIHwKKwkJKCh1aW50NjRfdCkocGluIC0gMSkgJiAzKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGRvX2h2bV9ldnRjaG5faW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJeGVuX2h2bV9ldnRjaG5fZG9fdXBjYWxsKCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHhlbl9hbGxvY2F0ZV9pcnEoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJcmV0dXJuIHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgZG9faHZtX2V2dGNobl9pbnRyLAorCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfTk9CQUxBTkNJTkcgfCBJUlFGX1RSSUdHRVJfUklTSU5HLAorCQkJInhlbi1wbGF0Zm9ybS1wY2kiLCBwZGV2KTsKK30KKworc3RhdGljIGludCBwbGF0Zm9ybV9wY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCBlcnI7CisJaWYgKHhlbl9oYXZlX3ZlY3Rvcl9jYWxsYmFjaykKKwkJcmV0dXJuIDA7CisJZXJyID0geGVuX3NldF9jYWxsYmFja192aWEoY2FsbGJhY2tfdmlhKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInBsYXRmb3JtX3BjaV9yZXN1bWUgZmFpbHVyZSFcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgcGxhdGZvcm1fcGNpX2luaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJaW50IGksIHJldDsKKwlsb25nIGlvYWRkciwgaW9sZW47CisJbG9uZyBtbWlvX2FkZHIsIG1taW9fbGVuOworCXVuc2lnbmVkIGludCBtYXhfbnJfZ2ZyYW1lczsKKworCWkgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoaSkKKwkJcmV0dXJuIGk7CisKKwlpb2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJaW9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOworCisJbW1pb19hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOworCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKTsKKworCWlmIChtbWlvX2FkZHIgPT0gMCB8fCBpb2FkZHIgPT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyByZXNvdXJjZXMgZm91bmRcbiIpOworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIHBjaV9vdXQ7CisJfQorCisJaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihtbWlvX2FkZHIsIG1taW9fbGVuLCBEUlZfTkFNRSkgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJNRU0gSS9PIHJlc291cmNlIDB4JWx4IEAgMHglbHggYnVzeVxuIiwKKwkJICAgICAgIG1taW9fYWRkciwgbW1pb19sZW4pOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gcGNpX291dDsKKwl9CisKKwlpZiAocmVxdWVzdF9yZWdpb24oaW9hZGRyLCBpb2xlbiwgRFJWX05BTUUpID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiSS9PIHJlc291cmNlIDB4JWx4IEAgMHglbHggYnVzeVxuIiwKKwkJICAgICAgIGlvbGVuLCBpb2FkZHIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gbWVtX291dDsKKwl9CisKKwlwbGF0Zm9ybV9tbWlvID0gbW1pb19hZGRyOworCXBsYXRmb3JtX21taW9sZW4gPSBtbWlvX2xlbjsKKworCWlmICgheGVuX2hhdmVfdmVjdG9yX2NhbGxiYWNrKSB7CisJCXJldCA9IHhlbl9hbGxvY2F0ZV9pcnEocGRldik7CisJCWlmIChyZXQpIHsKKwkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJyZXF1ZXN0X2lycSBmYWlsZWQgZXJyPSVkXG4iLCByZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwkJY2FsbGJhY2tfdmlhID0gZ2V0X2NhbGxiYWNrX3ZpYShwZGV2KTsKKwkJcmV0ID0geGVuX3NldF9jYWxsYmFja192aWEoY2FsbGJhY2tfdmlhKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIlVuYWJsZSB0byBzZXQgdGhlIGV2dGNobiBjYWxsYmFjayAiCisJCQkJCSAiZXJyPSVkXG4iLCByZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwltYXhfbnJfZ2ZyYW1lcyA9IGdudHRhYl9tYXhfZ3JhbnRfZnJhbWVzKCk7CisJeGVuX2h2bV9yZXN1bWVfZnJhbWVzID0gYWxsb2NfeGVuX21taW8oUEFHRV9TSVpFICogbWF4X25yX2dmcmFtZXMpOworCXJldCA9IGdudHRhYl9pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisJeGVuYnVzX3Byb2JlKE5VTEwpOworCXJldCA9IHhlbl9zZXR1cF9zaHV0ZG93bl9ldmVudCgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCXJldHVybiAwOworCitvdXQ6CisJcmVsZWFzZV9yZWdpb24oaW9hZGRyLCBpb2xlbik7CittZW1fb3V0OgorCXJlbGVhc2VfbWVtX3JlZ2lvbihtbWlvX2FkZHIsIG1taW9fbGVuKTsKK3BjaV9vdXQ6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwbGF0Zm9ybV9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9YRU4sIFBDSV9ERVZJQ0VfSURfWEVOX1BMQVRGT1JNLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MCx9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGxhdGZvcm1fcGNpX3RibCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBwbGF0Zm9ybV9kcml2ZXIgPSB7CisJLm5hbWUgPSAgICAgICAgICAgRFJWX05BTUUsCisJLnByb2JlID0gICAgICAgICAgcGxhdGZvcm1fcGNpX2luaXQsCisJLmlkX3RhYmxlID0gICAgICAgcGxhdGZvcm1fcGNpX3RibCwKKyNpZmRlZiBDT05GSUdfUE0KKwkucmVzdW1lX2Vhcmx5ID0gICBwbGF0Zm9ybV9wY2lfcmVzdW1lLAorI2VuZGlmCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwbGF0Zm9ybV9wY2lfbW9kdWxlX2luaXQodm9pZCkKK3sKKwkvKiBubyB1bnBsdWcgaGFzIGJlZW4gZG9uZSwgSUdOT1JFIGhhc24ndCBiZWVuIHNwZWNpZmllZDoganVzdAorCSAqIHJldHVybiBub3cgKi8KKwlpZiAoIXhlbl9wbGF0Zm9ybV9wY2lfdW5wbHVnKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZwbGF0Zm9ybV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChwbGF0Zm9ybV9wY2lfbW9kdWxlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4veGVuYnVzL3hlbmJ1c19wcm9iZS5jIGIvZHJpdmVycy94ZW4veGVuYnVzL3hlbmJ1c19wcm9iZS5jCmluZGV4IDM0NzkzMzIuLjI5YmFjNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL3hlbmJ1cy94ZW5idXNfcHJvYmUuYworKysgYi9kcml2ZXJzL3hlbi94ZW5idXMveGVuYnVzX3Byb2JlLmMKQEAgLTU2LDYgKzU2LDkgQEAKICNpbmNsdWRlIDx4ZW4vZXZlbnRzLmg+CiAjaW5jbHVkZSA8eGVuL3BhZ2UuaD4KIAorI2luY2x1ZGUgPHhlbi9wbGF0Zm9ybV9wY2kuaD4KKyNpbmNsdWRlIDx4ZW4vaHZtLmg+CisKICNpbmNsdWRlICJ4ZW5idXNfY29tbXMuaCIKICNpbmNsdWRlICJ4ZW5idXNfcHJvYmUuaCIKIApAQCAtNzUyLDEwICs3NTUsNyBAQAogewogCWludCByZXQgPSAwOwogCi0JaWYgKHhlbnN0b3JlZF9yZWFkeSA+IDApCi0JCXJldCA9IG5iLT5ub3RpZmllcl9jYWxsKG5iLCAwLCBOVUxMKTsKLQllbHNlCi0JCWJsb2NraW5nX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZ4ZW5zdG9yZV9jaGFpbiwgbmIpOworCWJsb2NraW5nX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZ4ZW5zdG9yZV9jaGFpbiwgbmIpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTc3OSw4ICs3NzksMjMgQEAKIAkvKiBOb3RpZnkgb3RoZXJzIHRoYXQgeGVuc3RvcmUgaXMgdXAgKi8KIAlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZ4ZW5zdG9yZV9jaGFpbiwgMCwgTlVMTCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh4ZW5idXNfcHJvYmUpOwogCi1zdGF0aWMgaW50IF9faW5pdCB4ZW5idXNfcHJvYmVfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgeGVuYnVzX3Byb2JlX2luaXRjYWxsKHZvaWQpCit7CisJaWYgKCF4ZW5fZG9tYWluKCkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHhlbl9pbml0aWFsX2RvbWFpbigpIHx8IHhlbl9odm1fZG9tYWluKCkpCisJCXJldHVybiAwOworCisJeGVuYnVzX3Byb2JlKE5VTEwpOworCXJldHVybiAwOworfQorCitkZXZpY2VfaW5pdGNhbGwoeGVuYnVzX3Byb2JlX2luaXRjYWxsKTsKKworc3RhdGljIGludCBfX2luaXQgeGVuYnVzX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyID0gMDsKIApAQCAtODA1LDExICs4MjAsMjQgQEAKIAlpZiAoeGVuX2luaXRpYWxfZG9tYWluKCkpIHsKIAkJLyogZG9tMCBub3QgeWV0IHN1cHBvcnRlZCAqLwogCX0gZWxzZSB7CisJCWlmICh4ZW5faHZtX2RvbWFpbigpKSB7CisJCQl1aW50NjRfdCB2ID0gMDsKKwkJCWVyciA9IGh2bV9nZXRfcGFyYW1ldGVyKEhWTV9QQVJBTV9TVE9SRV9FVlRDSE4sICZ2KTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBvdXRfZXJyb3I7CisJCQl4ZW5fc3RvcmVfZXZ0Y2huID0gKGludCl2OworCQkJZXJyID0gaHZtX2dldF9wYXJhbWV0ZXIoSFZNX1BBUkFNX1NUT1JFX1BGTiwgJnYpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIG91dF9lcnJvcjsKKwkJCXhlbl9zdG9yZV9tZm4gPSAodW5zaWduZWQgbG9uZyl2OworCQkJeGVuX3N0b3JlX2ludGVyZmFjZSA9IGlvcmVtYXAoeGVuX3N0b3JlX21mbiA8PCBQQUdFX1NISUZULCBQQUdFX1NJWkUpOworCQl9IGVsc2UgeworCQkJeGVuX3N0b3JlX2V2dGNobiA9IHhlbl9zdGFydF9pbmZvLT5zdG9yZV9ldnRjaG47CisJCQl4ZW5fc3RvcmVfbWZuID0geGVuX3N0YXJ0X2luZm8tPnN0b3JlX21mbjsKKwkJCXhlbl9zdG9yZV9pbnRlcmZhY2UgPSBtZm5fdG9fdmlydCh4ZW5fc3RvcmVfbWZuKTsKKwkJfQogCQl4ZW5zdG9yZWRfcmVhZHkgPSAxOwotCQl4ZW5fc3RvcmVfZXZ0Y2huID0geGVuX3N0YXJ0X2luZm8tPnN0b3JlX2V2dGNobjsKLQkJeGVuX3N0b3JlX21mbiA9IHhlbl9zdGFydF9pbmZvLT5zdG9yZV9tZm47CiAJfQotCXhlbl9zdG9yZV9pbnRlcmZhY2UgPSBtZm5fdG9fdmlydCh4ZW5fc3RvcmVfbWZuKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIGludGVyZmFjZSB0byB4ZW5zdG9yZS4gKi8KIAllcnIgPSB4c19pbml0KCk7CkBAIC04MTksOSArODQ3LDYgQEAKIAkJZ290byBvdXRfdW5yZWdfYmFjazsKIAl9CiAKLQlpZiAoIXhlbl9pbml0aWFsX2RvbWFpbigpKQotCQl4ZW5idXNfcHJvYmUoTlVMTCk7Ci0KICNpZmRlZiBDT05GSUdfWEVOX0NPTVBBVF9YRU5GUwogCS8qCiAJICogQ3JlYXRlIHhlbmZzIG1vdW50cG9pbnQgaW4gL3Byb2MgZm9yIGNvbXBhdGliaWxpdHkgd2l0aApAQCAtODQyLDcgKzg2Nyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotcG9zdGNvcmVfaW5pdGNhbGwoeGVuYnVzX3Byb2JlX2luaXQpOworcG9zdGNvcmVfaW5pdGNhbGwoeGVuYnVzX2luaXQpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKQEAgLTk1MCw2ICs5NzUsOSBAQAogI2lmbmRlZiBNT0RVTEUKIHN0YXRpYyBpbnQgX19pbml0IGJvb3Rfd2FpdF9mb3JfZGV2aWNlcyh2b2lkKQogeworCWlmICh4ZW5faHZtX2RvbWFpbigpICYmICF4ZW5fcGxhdGZvcm1fcGNpX3VucGx1ZykKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlyZWFkeV90b193YWl0X2Zvcl9kZXZpY2VzID0gMTsKIAl3YWl0X2Zvcl9kZXZpY2VzKE5VTEwpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4veGVuYnVzL3hlbmJ1c194cy5jIGIvZHJpdmVycy94ZW4veGVuYnVzL3hlbmJ1c194cy5jCmluZGV4IDdiNTQ3ZjUuLjU1MzQ2OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL3hlbmJ1cy94ZW5idXNfeHMuYworKysgYi9kcml2ZXJzL3hlbi94ZW5idXMveGVuYnVzX3hzLmMKQEAgLTc2LDYgKzc2LDE0IEBACiAJLyoKIAkgKiBNdXRleCBvcmRlcmluZzogdHJhbnNhY3Rpb25fbXV0ZXggLT4gd2F0Y2hfbXV0ZXggLT4gcmVxdWVzdF9tdXRleC4KIAkgKiByZXNwb25zZV9tdXRleCBpcyBuZXZlciB0YWtlbiBzaW11bHRhbmVvdXNseSB3aXRoIHRoZSBvdGhlciB0aHJlZS4KKwkgKgorCSAqIHRyYW5zYWN0aW9uX211dGV4IG11c3QgYmUgaGVsZCBiZWZvcmUgaW5jcmVtZW50aW5nCisJICogdHJhbnNhY3Rpb25fY291bnQuIFRoZSBtdXRleCBpcyBoZWxkIHdoZW4gYSBzdXNwZW5kIGlzIGluCisJICogcHJvZ3Jlc3MgdG8gcHJldmVudCBuZXcgdHJhbnNhY3Rpb25zIHN0YXJ0aW5nLgorCSAqCisJICogV2hlbiBkZWNyZW1lbnRpbmcgdHJhbnNhY3Rpb25fY291bnQgdG8gemVybyB0aGUgd2FpdCBxdWV1ZQorCSAqIHNob3VsZCBiZSB3b2tlbiB1cCwgdGhlIHN1c3BlbmQgY29kZSB3YWl0cyBmb3IgY291bnQgdG8KKwkgKiByZWFjaCB6ZXJvLgogCSAqLwogCiAJLyogT25lIHJlcXVlc3QgYXQgYSB0aW1lLiAqLwpAQCAtODUsNyArOTMsOSBAQAogCXN0cnVjdCBtdXRleCByZXNwb25zZV9tdXRleDsKIAogCS8qIFByb3RlY3QgdHJhbnNhY3Rpb25zIGFnYWluc3Qgc2F2ZS9yZXN0b3JlLiAqLwotCXN0cnVjdCByd19zZW1hcGhvcmUgdHJhbnNhY3Rpb25fbXV0ZXg7CisJc3RydWN0IG11dGV4IHRyYW5zYWN0aW9uX211dGV4OworCWF0b21pY190IHRyYW5zYWN0aW9uX2NvdW50OworCXdhaXRfcXVldWVfaGVhZF90IHRyYW5zYWN0aW9uX3dxOwogCiAJLyogUHJvdGVjdCB3YXRjaCAoZGUpcmVnaXN0ZXIgYWdhaW5zdCBzYXZlL3Jlc3RvcmUuICovCiAJc3RydWN0IHJ3X3NlbWFwaG9yZSB3YXRjaF9tdXRleDsKQEAgLTE1Nyw2ICsxNjcsMzEgQEAKIAlyZXR1cm4gYm9keTsKIH0KIAorc3RhdGljIHZvaWQgdHJhbnNhY3Rpb25fc3RhcnQodm9pZCkKK3sKKwltdXRleF9sb2NrKCZ4c19zdGF0ZS50cmFuc2FjdGlvbl9tdXRleCk7CisJYXRvbWljX2luYygmeHNfc3RhdGUudHJhbnNhY3Rpb25fY291bnQpOworCW11dGV4X3VubG9jaygmeHNfc3RhdGUudHJhbnNhY3Rpb25fbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCB0cmFuc2FjdGlvbl9lbmQodm9pZCkKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmeHNfc3RhdGUudHJhbnNhY3Rpb25fY291bnQpKQorCQl3YWtlX3VwKCZ4c19zdGF0ZS50cmFuc2FjdGlvbl93cSk7Cit9CisKK3N0YXRpYyB2b2lkIHRyYW5zYWN0aW9uX3N1c3BlbmQodm9pZCkKK3sKKwltdXRleF9sb2NrKCZ4c19zdGF0ZS50cmFuc2FjdGlvbl9tdXRleCk7CisJd2FpdF9ldmVudCh4c19zdGF0ZS50cmFuc2FjdGlvbl93cSwKKwkJICAgYXRvbWljX3JlYWQoJnhzX3N0YXRlLnRyYW5zYWN0aW9uX2NvdW50KSA9PSAwKTsKK30KKworc3RhdGljIHZvaWQgdHJhbnNhY3Rpb25fcmVzdW1lKHZvaWQpCit7CisJbXV0ZXhfdW5sb2NrKCZ4c19zdGF0ZS50cmFuc2FjdGlvbl9tdXRleCk7Cit9CisKIHZvaWQgKnhlbmJ1c19kZXZfcmVxdWVzdF9hbmRfcmVwbHkoc3RydWN0IHhzZF9zb2NrbXNnICptc2cpCiB7CiAJdm9pZCAqcmV0OwpAQCAtMTY0LDcgKzE5OSw3IEBACiAJaW50IGVycjsKIAogCWlmIChyZXFfbXNnLnR5cGUgPT0gWFNfVFJBTlNBQ1RJT05fU1RBUlQpCi0JCWRvd25fcmVhZCgmeHNfc3RhdGUudHJhbnNhY3Rpb25fbXV0ZXgpOworCQl0cmFuc2FjdGlvbl9zdGFydCgpOwogCiAJbXV0ZXhfbG9jaygmeHNfc3RhdGUucmVxdWVzdF9tdXRleCk7CiAKQEAgLTE4MCw3ICsyMTUsNyBAQAogCWlmICgobXNnLT50eXBlID09IFhTX1RSQU5TQUNUSU9OX0VORCkgfHwKIAkgICAgKChyZXFfbXNnLnR5cGUgPT0gWFNfVFJBTlNBQ1RJT05fU1RBUlQpICYmCiAJICAgICAobXNnLT50eXBlID09IFhTX0VSUk9SKSkpCi0JCXVwX3JlYWQoJnhzX3N0YXRlLnRyYW5zYWN0aW9uX211dGV4KTsKKwkJdHJhbnNhY3Rpb25fZW5kKCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDMyLDExICs0NjcsMTEgQEAKIHsKIAljaGFyICppZF9zdHI7CiAKLQlkb3duX3JlYWQoJnhzX3N0YXRlLnRyYW5zYWN0aW9uX211dGV4KTsKKwl0cmFuc2FjdGlvbl9zdGFydCgpOwogCiAJaWRfc3RyID0geHNfc2luZ2xlKFhCVF9OSUwsIFhTX1RSQU5TQUNUSU9OX1NUQVJULCAiIiwgTlVMTCk7CiAJaWYgKElTX0VSUihpZF9zdHIpKSB7Ci0JCXVwX3JlYWQoJnhzX3N0YXRlLnRyYW5zYWN0aW9uX211dGV4KTsKKwkJdHJhbnNhY3Rpb25fZW5kKCk7CiAJCXJldHVybiBQVFJfRVJSKGlkX3N0cik7CiAJfQogCkBAIC00NjEsNyArNDk2LDcgQEAKIAogCWVyciA9IHhzX2Vycm9yKHhzX3NpbmdsZSh0LCBYU19UUkFOU0FDVElPTl9FTkQsIGFib3J0c3RyLCBOVUxMKSk7CiAKLQl1cF9yZWFkKCZ4c19zdGF0ZS50cmFuc2FjdGlvbl9tdXRleCk7CisJdHJhbnNhY3Rpb25fZW5kKCk7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtNjYyLDcgKzY5Nyw3IEBACiAKIHZvaWQgeHNfc3VzcGVuZCh2b2lkKQogewotCWRvd25fd3JpdGUoJnhzX3N0YXRlLnRyYW5zYWN0aW9uX211dGV4KTsKKwl0cmFuc2FjdGlvbl9zdXNwZW5kKCk7CiAJZG93bl93cml0ZSgmeHNfc3RhdGUud2F0Y2hfbXV0ZXgpOwogCW11dGV4X2xvY2soJnhzX3N0YXRlLnJlcXVlc3RfbXV0ZXgpOwogCW11dGV4X2xvY2soJnhzX3N0YXRlLnJlc3BvbnNlX211dGV4KTsKQEAgLTY3Nyw3ICs3MTIsNyBAQAogCiAJbXV0ZXhfdW5sb2NrKCZ4c19zdGF0ZS5yZXNwb25zZV9tdXRleCk7CiAJbXV0ZXhfdW5sb2NrKCZ4c19zdGF0ZS5yZXF1ZXN0X211dGV4KTsKLQl1cF93cml0ZSgmeHNfc3RhdGUudHJhbnNhY3Rpb25fbXV0ZXgpOworCXRyYW5zYWN0aW9uX3Jlc3VtZSgpOwogCiAJLyogTm8gbmVlZCBmb3Igd2F0Y2hlc19sb2NrOiB0aGUgd2F0Y2hfbXV0ZXggaXMgc3VmZmljaWVudC4gKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdhdGNoLCAmd2F0Y2hlcywgbGlzdCkgewpAQCAtNjkzLDcgKzcyOCw3IEBACiAJbXV0ZXhfdW5sb2NrKCZ4c19zdGF0ZS5yZXNwb25zZV9tdXRleCk7CiAJbXV0ZXhfdW5sb2NrKCZ4c19zdGF0ZS5yZXF1ZXN0X211dGV4KTsKIAl1cF93cml0ZSgmeHNfc3RhdGUud2F0Y2hfbXV0ZXgpOwotCXVwX3dyaXRlKCZ4c19zdGF0ZS50cmFuc2FjdGlvbl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZ4c19zdGF0ZS50cmFuc2FjdGlvbl9tdXRleCk7CiB9CiAKIHN0YXRpYyBpbnQgeGVud2F0Y2hfdGhyZWFkKHZvaWQgKnVudXNlZCkKQEAgLTg0Myw4ICs4NzgsMTAgQEAKIAogCW11dGV4X2luaXQoJnhzX3N0YXRlLnJlcXVlc3RfbXV0ZXgpOwogCW11dGV4X2luaXQoJnhzX3N0YXRlLnJlc3BvbnNlX211dGV4KTsKLQlpbml0X3J3c2VtKCZ4c19zdGF0ZS50cmFuc2FjdGlvbl9tdXRleCk7CisJbXV0ZXhfaW5pdCgmeHNfc3RhdGUudHJhbnNhY3Rpb25fbXV0ZXgpOwogCWluaXRfcndzZW0oJnhzX3N0YXRlLndhdGNoX211dGV4KTsKKwlhdG9taWNfc2V0KCZ4c19zdGF0ZS50cmFuc2FjdGlvbl9jb3VudCwgMCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmeHNfc3RhdGUudHJhbnNhY3Rpb25fd3EpOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIG1lbW9yeSByaW5ncyB0byB0YWxrIHRvIHhlbnN0b3JlZCAqLwogCWVyciA9IHhiX2luaXRfY29tbXMoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL3hlbmZzL3N1cGVyLmMgYi9kcml2ZXJzL3hlbi94ZW5mcy9zdXBlci5jCmluZGV4IDg5MjRkOTMuLjc4YmZhYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL3hlbmZzL3N1cGVyLmMKKysrIGIvZHJpdmVycy94ZW4veGVuZnMvc3VwZXIuYwpAQCAtNjUsNyArNjUsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB4ZW5mc19pbml0KHZvaWQpCiB7Ci0JaWYgKHhlbl9wdl9kb21haW4oKSkKKwlpZiAoeGVuX2RvbWFpbigpKQogCQlyZXR1cm4gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmeGVuZnNfdHlwZSk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJYRU5GUzogbm90IHJlZ2lzdGVyaW5nIGZpbGVzeXN0ZW0gb24gbm9uLXhlbiBwbGF0Zm9ybVxuIik7CkBAIC03NCw3ICs3NCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB4ZW5mc19leGl0KHZvaWQpCiB7Ci0JaWYgKHhlbl9wdl9kb21haW4oKSkKKwlpZiAoeGVuX2RvbWFpbigpKQogCQl1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJnhlbmZzX3R5cGUpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi94ZW5mcy94ZW5idXMuYyBiL2RyaXZlcnMveGVuL3hlbmZzL3hlbmJ1cy5jCmluZGV4IGYyOGVjZTMuLjNiMzljMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL3hlbmZzL3hlbmJ1cy5jCisrKyBiL2RyaXZlcnMveGVuL3hlbmZzL3hlbmJ1cy5jCkBAIC0xMjQsNiArMTI0LDkgQEAKIAltdXRleF9sb2NrKCZ1LT5yZXBseV9tdXRleCk7CiAJd2hpbGUgKGxpc3RfZW1wdHkoJnUtPnJlYWRfYnVmZmVycykpIHsKIAkJbXV0ZXhfdW5sb2NrKCZ1LT5yZXBseV9tdXRleCk7CisJCWlmIChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykKKwkJCXJldHVybiAtRUFHQUlOOworCiAJCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh1LT5yZWFkX3dhaXRxLAogCQkJCQkgICAgICAgIWxpc3RfZW1wdHkoJnUtPnJlYWRfYnVmZmVycykpOwogCQlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvTWFrZWZpbGUgYi9maXJtd2FyZS9NYWtlZmlsZQppbmRleCAyNDM0MDlmLi5iMjdmMDlmIDEwMDY0NAotLS0gYS9maXJtd2FyZS9NYWtlZmlsZQorKysgYi9maXJtd2FyZS9NYWtlZmlsZQpAQCAtNDIsNyArNDIsNyBAQAogZnctc2hpcHBlZC0kKENPTkZJR19DT01QVVRPTkUpICs9IGludGVsbGlwb3J0Mi5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfQ0hFTFNJT19UMykgKz0gY3hnYjMvdDNiX3BzcmFtLTEuMS4wLmJpbiBcCiAJCQkJICAgY3hnYjMvdDNjX3BzcmFtLTEuMS4wLmJpbiBcCi0JCQkJICAgY3hnYjMvdDNmdy03LjQuMC5iaW4gXAorCQkJCSAgIGN4Z2IzL3QzZnctNy4xMC4wLmJpbiBcCiAJCQkJICAgY3hnYjMvYWVsMjAwNV9vcHRfZWRjLmJpbiBcCiAJCQkJICAgY3hnYjMvYWVsMjAwNV90d3hfZWRjLmJpbiBcCiAJCQkJICAgY3hnYjMvYWVsMjAyMF90d3hfZWRjLmJpbgpAQCAtODMsNiArODMsNyBAQAogZnctc2hpcHBlZC0kKENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwKSArPSBxbG9naWMvMTA0MC5iaW4gcWxvZ2ljLzEyODAuYmluIFwKIAkJCQkJIHFsb2dpYy8xMjE2MC5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfU0NTSV9RTE9HSUNQVEkpICs9IHFsb2dpYy9pc3AxMDAwLmJpbgorZnctc2hpcHBlZC0kKENPTkZJR19JTkZJTklCQU5EX1FJQikgKz0gcWxvZ2ljL3NkNzIyMC5mdwogZnctc2hpcHBlZC0kKENPTkZJR19TTUNUUikgKz0gdHJfc21jdHIuYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX1NORF9LT1JHMTIxMikgKz0ga29yZy9rMTIxMi5kc3AKIGZ3LXNoaXBwZWQtJChDT05GSUdfU05EX01BRVNUUk8zKSArPSBlc3MvbWFlc3RybzNfYXNzcF9rZXJuZWwuZncgXApkaWZmIC0tZ2l0IGEvZmlybXdhcmUvV0hFTkNFIGIvZmlybXdhcmUvV0hFTkNFCmluZGV4IGU4ZTU1MGYuLmFlNWY4YTQgMTAwNjQ0Ci0tLSBhL2Zpcm13YXJlL1dIRU5DRQorKysgYi9maXJtd2FyZS9XSEVOQ0UKQEAgLTg1OCwzICs4NTgsNDMgQEAKIEZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UuCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogaWJfcWliIC0gUUxvZ2ljIEluZmluaWJhbmQKKworRmlsZTogcWxvZ2ljL3NkNzIyMC5mdworCitMaWNlbmNlOgorCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggUUxvZ2ljIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisKK0ZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9maXJtd2FyZS9jeGdiMy90M2Z3LTcuMTAuMC5iaW4uaWhleCBiL2Zpcm13YXJlL2N4Z2IzL3QzZnctNy4xMC4wLmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2Mzk5ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9jeGdiMy90M2Z3LTcuMTAuMC5iaW4uaWhleApAQCAtMCwwICsxLDE5MzUgQEAKKzoxMDAwMDAwMDYwMDA3NDAwMjAwMzgwMDAyMDAzNzAwMDAwMDAxMDAwRDYKKzoxMDAwMTAwMDAwMDAyMDAwRTEwMDAyODQwMDA3MDAwMEUxMDAwMjg4RTcKKzoxMDAwMjAwMDAwMDEwMDAwRTAwMDAwMDBFMDAwMDBBMDAxMDAwMDAwNkUKKzoxMDAwMzAwMDQ0NDQ0NDQwRTMwMDAxODMyMDAyMDAwMDIwMDFFMDAwMkEKKzoxMDAwNDAwMDIwMDFGRjEwMUZGRkQwMDAxRkZGQzAwMEUzMDAwNDNDOTEKKzoxMDAwNTAwMDAyMDAwMDAwMjAwMDZDODQxRkZGQzJBMDIwMDA2Q0NDQjYKKzoxMDAwNjAwMDFGRkZDMkE0MjAwMDZEMEMxRkZGQzJBODIwMDA2RDgwREUKKzoxMDAwNzAwMDFGRkZDMkFDMjAwMDAzQzBDMDAwMDBFNDMxMDBFQTMxMjEKKzoxMDAwODAwMDAwQTEzMTAwQTAzMTAzMDIwMDAyRUQzMDZFMkEwNTAwMEMKKzoxMDAwOTAwMEVEMzEwMDAyMDAwMjE2MDAxMkZGREJDMDMwMTRGRkRBNUYKKzoxMDAwQTAwMEQzMEZEMzBGRDMwRjAzNDMxRjI0NEMxMDcyNDlGMEQzNDcKKzoxMDAwQjAwMDBGRDMwRkQzMEYxMkZGRDUyMzBBMDAyNDBBMDBEMzBGNEEKKzoxMDAwQzAwMEQzMEZEMzBGMDM0MzFGMjQ0QzEwNzI0OUYwRDMwRkQzMjcKKzoxMDAwRDAwMDBGRDMwRjE0RkZDRTAzNDIxRjE0RkZDQjAzNDIxRjEyOTYKKzoxMDAwRTAwMEZGQ0NDMDMwMkQzNzMwMkQzNzM0MkQzNzM4MkQzNzNDRUQKKzoxMDAwRjAwMDIzM0QwMTcyMzNFRDAwMDIwMDEyRkZDNEMwMzAyRjM3RTAKKzoxMDAxMDAwMDAwMkYzNzEwMkYzNzIwMkYzNzMwMjMzRDAxNzIzM0VENkEKKzoxMDAxMTAwMDAwMDIwMDEyRkZCRUMwMzAyNzM3MDAyNzM3MTAyNzM3RjQKKzoxMDAxMjAwMDIwMjczNzMwMjMzRDAxNzIzM0VEMDMwMjAwMTJGRkI5NUYKKzoxMDAxMzAwMDEzRkZCQTBDMDIwMDkzMjAxMkZGQjkxM0ZGQjkwQzAyOEYKKzoxMDAxNDAwMDAwOTMyMDEyRkZCOEMwMzE5MzIwODIyMDEyRkZCNzEzMTIKKzoxMDAxNTAwMEZGQjc5MzIwMTJGRkI3MTVGRkIzMTZGRkI2QzAzMEQ3MTUKKzoxMDAxNjAwMDIwMDU2NjAxNjAwMDFCMDAwMDAwMDAwMDAwMDAwMDAwODgKKzoxMDAxNzAwMDA0MzYwNTAwMDIwMEQzMEZEMzBGMDUzMzBDNkUzQjE0NzkKKzoxMDAxODAwMDA3NDcxNDA3MDQ0Mzc2MzFFNjA0MzYwNTA1MzMwQzZGNDAKKzoxMDAxOTAwMDNCRUQwMDAyMDAxMkZGQTYxNUZGQTMyMzBBMDBENzIwQTMKKzoxMDAxQTAwMDA3MDQ0MzA0M0UwNTA1MzMwQzA3NDcxNDZGM0JGMDAzNzcKKzoxMDAxQjAwMDAyMDAxMkZGQTFDMDMwMTRGRkExRDMwRkQzMEZEMzBGNDEKKzoxMDAxQzAwMDkzNDBCNDQ0NzI0OUYyRDMwRkQzMEZEMzBGMTRGRjlCNjMKKzoxMDAxRDAwMDgzNDAxNEZGOUI4MzQwMTJGRjlCMjMwQTAwMTRGRjlBNjUKKzoxMDAxRTAwMEQzMEZEMzBGRDMwRjkzNDBCNDQ0NzI0OUYyRDMwRkQzM0MKKzoxMDAxRjAwMDBGRDMwRjE0RkY5NTgzNDAxMkZGOTVDOTJGODMyMDg0REUKKzoxMDAyMDAwMDIxODUyMkJDMjI3NDNCMEY4NjUwQjQ1NTk2MzBCNDMzRkUKKzoxMDAyMTAwMDc0MzNGNDYzRkZFNjAwMDA2NTNGRTE2NTVGREUxMkZGQzMKKzoxMDAyMjAwMDdDMjMwQTAwMjgzNzQwMjgzNzQ0MjgzNzQ4MjgzNzRDOTEKKzoxMDAyMzAwMDIzM0QwMTcyMzNFRDAzMDIwMDAwMDIwMDEyRkY3QUMwNzkKKzoxMDAyNDAwMDMyMDMyRTA1MDMwMjAwMTJGRjc4MTNGRjgxOTMyMEMwQjIKKzoxMDAyNTAwMDExMDE0OTMxMDA0ODMxMDEwMjAwQzAwMDE0RkY3RTA0NDEKKzoxMDAyNjAwMEQyMzExNUZGN0Q5NDUwMTRGRjdEMDREMzMxMTVGRjdDRUUKKzoxMDAyNzAwMDk0NTAxNEZGN0MwNEQ0MzExNUZGN0MyNDU2MDAxNEZGRTUKKzoxMDAyODAwMDdCMDRENTMxMTVGRjdCMjQ1NjAwMTBGRjdBMDMwMDAwNTQKKzoxMDAyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMDAyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMDAyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDAyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKKzoxMDAyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKKzoxMDAyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDAyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKKzoxMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKKzoxMDAzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKKzoxMDAzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMDAzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMDAzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKKzoxMDAzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKKzoxMDAzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDAzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMDAzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKKzoxMDAzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKKzoxMDAzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDAzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKKzoxMDAzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKKzoxMDAzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKKzoxMDAzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKKzoxMDAzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKKzoxMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKKzoxMDA0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKKzoxMDA0MjAwMDYzRkZGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMDA0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGRkMwMDAwQTEKKzoxMDA0NDAwMDFGRkMwMDAwRTMwMDA1QzgxRkZDMDAwMDFGRkMwMDAwQUIKKzoxMDA0NTAwMEUzMDAwNUM4MUZGQzAwMDAxRkZDMDAwMEUzMDAwNUM4MDYKKzoxMDA0NjAwMDFGRkZDMDAwMUZGRkMwMDBFMzAwMDVDODFGRkZDMDAwNDIKKzoxMDA0NzAwMDFGRkZDMDE4RTMwMDA1QzgxRkZGQzAxODFGRkZDMDE4RUEKKzoxMDA0ODAwMEUzMDAwNUUwMUZGRkMwMTgxRkZGQzI5NEUzMDAwNUUwNzIKKzoxMDA0OTAwMDFGRkZDMjk0MUZGRkMyOTRFMzAwMDg1QzFGRkZDMkEwQUQKKzoxMDA0QTAwMDFGRkZDNTlDRTMwMDA4NUMyMDAwMDAwMDIwMDAwMTZBREIKKzoxMDA0QjAwMEUzMDAwQjU4MjAwMDAxODAyMDAwMDE4MEUzMDAwQ0M0MDEKKzoxMDA0QzAwMDIwMDAwMjAwMjAwMDAyMDNFMzAwMENDNDIwMDAwMjFDRjQKKzoxMDA0RDAwMDIwMDAwMjIwRTMwMDBDQzgyMDAwMDIyMDIwMDAwMjI2OTkKKzoxMDA0RTAwMEUzMDAwQ0NDMjAwMDAyM0MyMDAwMDI0MEUzMDAwQ0Q0Q0UKKzoxMDA0RjAwMDIwMDAwMjQwMjAwMDAyNDlFMzAwMENEODIwMDAwMjRDRkEKKzoxMDA1MDAwMDIwMDAwMjUwRTMwMDBDRTQyMDAwMDI1MDIwMDAwMjU5QjkKKzoxMDA1MTAwMEUzMDAwQ0U4MjAwMDAyNUMyMDAwMDI2MEUzMDAwQ0Y0MjEKKzoxMDA1MjAwMDIwMDAwMjYwMjAwMDAyNjlFMzAwMENGODIwMDAwMjZDNDkKKzoxMDA1MzAwMDIwMDAwMjcwRTMwMDBEMDQyMDAwMDI3MDIwMDAwMjc5MDgKKzoxMDA1NDAwMEUzMDAwRDA4MjAwMDAyOEMyMDAwMDI4Q0UzMDAwRDE0NTMKKzoxMDA1NTAwMDIwMDAwMjkwMjAwMDAyOTNFMzAwMEQxNDIwMDAwMkFDNjIKKzoxMDA1NjAwMDIwMDAwMkIwRTMwMDBEMTgyMDAwMDJEMDIwMDAwMkYyQUIKKzoxMDA1NzAwMEUzMDAwRDFDMjAwMDAzQjAyMDAwMDNCMEUzMDAwRDQwOTkKKzoxMDA1ODAwMDIwMDAwM0IwMjAwMDAzQjBFMzAwMEQ0MDIwMDAwM0IwQzIKKzoxMDA1OTAwMDIwMDAwM0IwRTMwMDBENDAyMDAwMDNCMDIwMDAwM0IwQjIKKzoxMDA1QTAwMEUzMDAwRDQwMjAwMDAzQjAyMDAwNkVBNEUzMDAwRDQwRTYKKzoxMDA1QjAwMDIwMDA2RUE0MjAwMDZFQTRFMzAwNzgzNDAwMDAwMDAwNDgKKzoxMDA1QzAwMDAwMDAwMDAwMDAwMDAwMDAxRkZDMDAwMDFGRkMwMDAwRjUKKzoxMDA1RDAwMDFGRkZDNUEwMUZGRkM2OTAyMDAwNkVBODIwMDA2RUE4QjgKKzoxMDA1RTAwMERFRkZGRTAwMDAwMDA4MENERUFEQkVFRjFGRkZDMkIwNTQKKzoxMDA1RjAwMDFGRkNGRTAwMUZGRkMwQTQxRkZGQzVEMDMwMDAwMDAwN0QKKzoxMDA2MDAwMDAwM0ZGRkZGODA0MDAwMDAxMDAwMDAwMDA4MEZGRkZGQzgKKzoxMDA2MTAwMDFGRkZDMjdEMDAwRkZGRkY4MDRGRkZGRjgwMDAwMDAwMjMKKzoxMDA2MjAwMDAwMDAwODgwQjAwMDAwMDU2MDUwMDAwMDYwMDAwMDAwN0QKKzoxMDA2MzAwMDQwMDAwMDExMzUwMDAwMDA0MTAwMDAwMDEwMDAwMDAxRTIKKzoxMDA2NDAwMDIwMDAwMDAwMDAwMDEwMDA0MDAwMDAwMDA1MDAwMDAwMzUKKzoxMDA2NTAwMDgwMDAwMDE5MDQwMDAwMDAwMDAwMDgwMEUxMDAwMjAwMTIKKzoxMDA2NjAwMDEwMDAwMDA1ODA2MDAwMDA3MDAwMDAwMDIwMDAwMDA5RkMKKzoxMDA2NzAwMDAwMUZGODAwODAwMDAwMUVBMDAwMDAwMEY4MDAwMDAwMkQKKzoxMDA2ODAwMDA3RkZGRkZGMDgwMDAwMDAxODAwMDAwMDAxMDA4MDAxQzQKKzoxMDA2OTAwMDQyMDAwMDAwMUZGRkMyMkQxRkZGQzBFQzAwMDEwMDgwQzAKKzoxMDA2QTAwMDYwNDAwMDAwMUEwMDAwMDAwQzAwMDAwMDEwMDAwMDBBNkEKKzoxMDA2QjAwMDAwMDAzMDAwMDAwMTAwMDA4MDAwMDAxOEZDMDAwMDAwNzUKKzoxMDA2QzAwMDgwMDAwMDAxMDAwMDQwMDA2MDAwMDgwMDgwMDAwMDFDNjUKKzoxMDA2RDAwMDgwMDAwMDFBMDMwMDAwMDA4MDAwMDQwMDA0MDMwNDAzRUIKKzoxMDA2RTAwMDUwMDAwMDAzRkZGRkJGRkYxRkZGQzNFNDAwMDAwRkZGMjgKKzoxMDA2RjAwMEZGRkZGMDAwMDAwMDE2RDAwMDAwRkZGN0E1MDAwMDAwOEIKKzoxMDA3MDAwMDFGRkZDNEMwMUZGRkM0NzEwMDAxMDAwODAwMDAwQjIwQzAKKzoxMDA3MTAwMDIwMkZGRjgwMUZGRkM0NjUwMDAwMkMwMEZGRkVGRkY4QTQKKzoxMDA3MjAwMDAwRkZGRkZGMUZGRkM1ODgwMDAwMjAwMEZGRkZERkZGNjUKKzoxMDA3MzAwMDAwMDBGRkVGMDEwMDExMDAxRkZGQzNFMjFGRkZDNUEwNzMKKzoxMDA3NDAwMEZGRkZFRkZGMDAwMEZGRkIxRkZGQzY1MDFGRkZCRUIwMDMKKzoxMDA3NTAwMEZGRkZGN0ZGMUZGRkMwNzQwMDAwRkZGRDFGRkZDNjQwMzMKKzoxMDA3NjAwMDAwMDFGQkQwMUZGRkM1QzAxRkZGQzY4MDFGRkZDNUExMzIKKzoxMDA3NzAwMEUwRkZGRTAwMUZGRkM1QjAwMDAwODAwMDFGRkZDNTRDNUEKKzoxMDA3ODAwMDFGRkZDNUM0MUZGRkMwNzgxRkZGQzRFNDFGRkNGRkQ4QjQKKzoxMDA3OTAwMDAwMDEwMDgxN0ZGRkZGRkZFMTAwMDYwMDAwMDAyNzEwM0QKKzoxMDA3QTAwMDFGRkNGRTMwMUZGQ0ZFNzAxRkZGQzU0ODFGRkZDNTYwMDkKKzoxMDA3QjAwMDAwMDNEMDkwMUZGRkM1NzQyQjUwNjM4MDJCNTA3OTgwQUQKKzoxMDA3QzAwMDJCNTA5MDgwMkI1MEE2ODAxRkZGQzQ3OTAxMDAxMTBGODEKKzoxMDA3RDAwMDIwMkZGRTAwMjAzMDAwODAyMDJGRkYwMDAwMDBGRkZGQjAKKzoxMDA3RTAwMDAwMDFGRkY4MkI1MEIyMDAyQjUwQjIwODAwMDEwMDEwOUUKKzoxMDA3RjAwMDJCNTBCMTgwMkI1MEIyODAyQjUwQkEwMDAwMDEwMDExNTkKKzoxMDA4MDAwMDJCNTBCRDI4MkI1MEJDODAyQjUwQkRBMDIwMzAwMDAwQTkKKzoxMDA4MTAwMERGRkZGRTAwNTAwMDAwMDIwMEMwMDAwMDAyMDAwMDAwRTgKKzoxMDA4MjAwMEZGRkZGN0Y0MUZGRkMwN0MwMDBGRjgwMDA0NDAwMDAwM0EKKzoxMDA4MzAwMDAwMTAwMDAwMEM0MDAwMDAxQzQwMDAwMEUwMDAwMEEwODAKKzoxMDA4NDAwMDFGRkZDNTUwMUZGRDAwMDgxRkZGQzU2NDFGRkZDNTc4QUYKKzoxMDA4NTAwMDFGRkZDNThDRTEwMDA2OTBFMTAwMDZFQzAwMDAwMDAwREYKKzoxMDA4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwODcKKzoxMDA4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMTAwMDQwMDgKKzoxMDA4ODAwMDIwMTAwMDQwMjAxMDAwNDAyMDE0MDA4MDIwMEMwMDAwQTgKKzoxMDA4OTAwMDIwMEMwMDAwMjAwQzAwMDAyMDEwMDA0MDIwMTQwMDgwREMKKzoxMDA4QTAwMDIwMTQwMDgwMjAxNDAwODAyMDE4MDBDMDIwMUMwMTAwQUIKKzoxMDA4QjAwMDIwMUMwMTAwMjAxQzAxMDAyMDIwMDE0MDIwMTgwMEMwNDUKKzoxMDA4QzAwMDIwMTgwMEMwMjAxODAwQzAyMDFDMDEwMDIwMTgwMEMwMDMKKzoxMDA4RDAwMDIwMTgwMEMwMjAxODAwQzAyMDFDMDEwMDIwMjAwMTQwNkEKKzoxMDA4RTAwMDIwMjAwMTQwMjAyMDAxNDAyMDIwMDk0MDIwMjAwOTQwRjQKKzoxMDA4RjAwMDIwMjAwOTQwMjAyMDA5NDAyMDI0MDk4MEZGRkZGRkZGMUQKKzoxMDA5MDAwMEZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMDA5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDA1NTg4REEKKzoxMDA5MjAwMDIwMDA1NDU4MjAwMDU1ODgyMDAwNTU4ODIwMDA1Mzk0RkEKKzoxMDA5MzAwMDIwMDA1Mzk0MjAwMDUzOTQyMDAwNTFENDIwMDA1MUQ0MUYKKzoxMDA5NDAwMDIwMDA1MUNDMjAwMDUxMzgyMDAwNEZFMDIwMDA0REMwNDUKKzoxMDA5NTAwMDIwMDA0Qjk0MDAwMDAwMDAwMDAwMDAwMDIwMDA1NTU4Q0IKKzoxMDA5NjAwMDIwMDA1NDI0MjAwMDU0QzgyMDAwNTRDODIwMDA1MjdDODkKKzoxMDA5NzAwMDIwMDA1MjdDMjAwMDUyN0MyMDAwNTI3QzIwMDA1MjdDQkYKKzoxMDA5ODAwMDIwMDA1MUM0MjAwMDUyN0MyMDAwNEYwMDIwMDA0RDcwRjgKKzoxMDA5OTAwMDIwMDA0QjQwMDAwMDAwMDAwMDAwMDAwMDIwMDAwQkYwOTEKKzoxMDA5QTAwMDIwMDAzQURDMjAwMDA0QzAyMDAwNDczMDIwMDAwQkU4ODMKKzoxMDA5QjAwMDIwMDA0MUY0MjAwMDAzRjAyMDAwNDZGMDIwMDA0QjFDRjIKKzoxMDA5QzAwMDIwMDAzRjAwMjAwMDNFMUMyMDAwM0E1ODIwMDAzOEU4NUMKKzoxMDA5RDAwMDIwMDAzNjU4MjAwMDMxQjgyMDAwM0M3ODIwMDAyREQwNkYKKzoxMDA5RTAwMDIwMDAyODY0MjAwMDY4MjgyMDAwMjNGMDIwMDAyMEQwNjgKKzoxMDA5RjAwMDIwMDAyMDdDMjAwMDFENjgyMDAwMTg2MDIwMDAxNTg4NDEKKzoxMDBBMDAwMDIwMDAwRTU0MjAwMDBDMzQyMDAwMTEzNDIwMDAxMzIwNEMKKzoxMDBBMTAwMDIwMDA0M0VDMjAwMDNFQjQyMDAwMEJGODIwMDAwNEMwNkUKKzoxMDBBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKKzoxMDBBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKKzoxMDBBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKKzoxMDBBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKKzoxMDBBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKKzoxMDBBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKKzoxMDBBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKKzoxMDBBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTYKKzoxMDBBQTAwMDMyNjQwMDAwMDAwMDAwMDAzMjY0MDAwMDY0MDA2NDAwNTIKKzoxMDBBQjAwMDY0MDA2NDAwNjQwMDY0MDA2NDAwNjQwMDAwMDAwMDAwREUKKzoxMDBBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDBBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDBBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKKzoxMDBBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjYKKzoxMDBCMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwRDUKKzoxMDBCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwQzUKKzoxMDBCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKKzoxMDBCMzAwMDAwNDMyMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKKzoxMDBCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTUKKzoxMDBCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDOTQwMTVEOTQwMjVFNTMKKzoxMDBCNjAwMDk0MDM1Rjk0MDA0MzAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKKzoxMDBCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKKzoxMDBCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKKzoxMDBCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDOTAwMTVEOTAwMjVFMUIKKzoxMDBCQTAwMDkwMDM1RjkwMDA1MzAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKKzoxMDBCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKKzoxMDBCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKKzoxMDBCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDOTQwMDFEOTAwMTlEOUEKKzoxMDBCRTAwMDk0MDI5RTk0MDM5Rjk0MDQwODk0MDUwOTk0MDYwQTk0MjEKKzoxMDBCRjAwMDA3MEI5NDAwNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKKzoxMDBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKKzoxMDBDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDOTAwMTlEOTAwMjlFREEKKzoxMDBDMjAwMDkwMDcxRDkwMDM5RjkwMDQ3ODkwMDU3OTkwMDY3QTkwMjQKKzoxMDBDMzAwMDA3N0I5MDAwNTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKKzoxMDBDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKKzoxMDBDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMERDOTQwMDFEOTAwMUREOTkKKzoxMDBDNjAwMDk0MDJERTk0MDNERjk0MDQwNDk0MDUwNTk0MDYwNjk0MkMKKzoxMDBDNzAwMDA3MDc5NDA4MDg5NDA5MDk5NDBBMEE5NDBCMEI5NDAwMzYKKzoxMDBDODAwMDQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKKzoxMDBDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMERDOTAwMUREOTAwMkRFOUEKKzoxMDBDQTAwMDkwMEIxRDkwMDNERjkwMDRCNDkwMDVCNTkwMDZCNjkwQUMKKzoxMDBDQjAwMDA3Qjc5MDA4Qjg5MDA5Qjk5MDBBQkE5MDBCQkI5MDAwOUEKKzoxMDBDQzAwMDUzMDAwMDAwNjNGRkZDMDAyMDAwNkM2MDEwRkZGRjBBNkYKKzoxMDBDRDAwMDAwMDAwMDAwMjAwMDZDODQwMEQyMzExMEZGRkUwQTAwRUEKKzoxMDBDRTAwMDAwMDAwMDAwMjAwMDZDQ0MwMEQzMzExMEZGRkUwQTAwOTEKKzoxMDBDRjAwMDAwMDAwMDAwMjAwMDZEMEMwMEQ0MzExMEZGRkUwQTAwM0YKKzoxMDBEMDAwMDAwMDAwMDAwMjAwMDZEODAwMEQ1MzExMEZGRkUwQTAwQjkKKzoxMDBEMTAwMDAwMDAwMDAwNjNGRkZDMDBFMDAwMDBBMDEyRkZGNzgyNkIKKzoxMDBEMjAwMDIwMDI4MjU3QzgyMTYzRkZGQzEyRkZGMzAzRTgzMDA0NUUKKzoxMDBEMzAwMEVFMzAwNUMwMzA5MzIwOTQyMTk1MjI2M0ZGRkMwMDAwMjMKKzoxMDBENDAwMDFGRkZEMDAwMDAwNDAwMjAxRkZGQzVBMDFGRkZDNjkwOUEKKzoxMDBENTAwMDIwMEEwMDExRkZGQjEzRkZGQjAzRTYzMTAxMDIwMDE2MUUKKzoxMDBENjAwMEZGRkExN0ZGRkFEMzBGNzc2QjA2OTA2MEI0NjY3NzYzQ0MKKzoxMDBENzAwMEY4NTQxNUYzNTQxQUE1MEYxNDAwNjNGRkY5MDAwMDAwOEUKKzoxMDBEODAwMDZDMTAwNEMwMjBEMTBGMDA2QzEwMDRDMEM3MUFFRjA2MEQKKzoxMDBEOTAwMEQ4MzBCQzJCRDcyMDg1NzIwRDQyMTE4MzcxMDU0NTBCQ0QKKzoxMDBEQTAwMDk1NzIwMjMzMEMyMzc2MDE3QjNCMDQyMzNEMDg5MzcxM0IKKzoxMDBEQjAwMEEzMkQxMkVFRkUxOUVFRkVBMjc2N0Q2MzJDMkUwQTAwMDQKKzoxMDBEQzAwMDA4ODIwMjI4MEEwMTAzOEUzODBFMEU0MkM4RUUyOUE2QjgKKzoxMDBERDAwMDdFNkQ0QTA1MDAyMDg4MDAzMDhDODI3MUQxMEZDMEYwRjIKKzoxMDBERTAwMDAyOEYzODdGQzBFQTYzRkZFNDAwQzBGMUMwNTAwMzdFODkKKzoxMDBERjAwMDBDQTJFRTBFM0QxMjA4ODIwMjAzRjUzODA1MDU0MkNCMjcKKzoxMDBFMDAwMDU3MjlBNjdFMkZEQzEwMEY0RjM2NkRGQTA1MDAyMDg4N0IKKzoxMDBFMTAwMDAwMzA4Q0JDNzVDMDMwMDhFMjA4MjgwQTAxMDU4MzM4MTAKKzoxMDBFMjAwMDAzMDM0MkM5M0UyOUE2N0UwRDQ4MENEMzBGNkQ4QTA1RTcKKzoxMDBFMzAwMDAwMjA4ODAwQjA4QzgyNzFEMTBGQzA1MDA4RjUzODc1NDEKKzoxMDBFNDAwMEMwQzE2M0ZGQkJDMDYwMDI4NjM4NzZDMERBNjNGRkQ0REUKKzoxMDBFNTAwMDZDMTAxMjE2RUVEOEMxRjlDMUU4QzFDNzJCMjIxRTI4QUEKKzoxMDBFNjAwMDIyMURDMEQwN0I4MTM1MjkyMDA2MEJCNzAyMjk5Q0ZBQjAKKzoxMDBFNzAwMDY1NTAwODI4MjA3MjI4OENGRjI4MjQ3MjY0OTE2NDJBMDcKKzoxMDBFODAwMEIwMDAwQ0E4MEM2NDgxNkYwRUE5MEM2NDkyQkI3RkExMEEKKzoxMDBFOTAwMDNGQzFDRTdDQTEzNjY5QUMzMzYwMDAzNzAwMjkyMDA2MDMKKzoxMDBFQTAwMEQ3RDAyOTlDRkFDQzU3MjgyMDcyMjg4Q0ZGMjgyNDcyOEUKKzoxMDBFQjAwMDY0OTEzOTJBRDAwMDBDQTgwQzY0ODE2ODBFQTkwQzY0RDYKKzoxMDBFQzAwMDkzMUY3RkExMEJDMUNFN0NBMTAyNjhBQzA2QzAyMEQxQ0MKKzoxMDBFRDAwMDBGMkQyNTAyOEEzMkMwOTAwQTZFNTA2NUU1QjUyOTI0OEYKKzoxMDBFRTAwMDY3MDkwRjQ3NjVGNUIxMkMyMDBDMUZFRUIzMENDRTExMkUKKzoxMDBFRjAwMEFGRUUyOUUyODZCNDQ4Nzk4MzAyNjAwNTgyMTlFRUFGMkQKKzoxMDBGMDAwMDA5QzkwQTI5OTJBMzY4OTAwNzhGMjAwOUZGMEM2NUY1OEIKKzoxMDBGMTAwMDZFMkZFMjg1NjRGNTY4NjU1NTk2MjgyMjFEN0I4MTA1NTQKKzoxMDBGMjAwMEQ5QjA2MDAwMDIwMEMwOTA4Qjk0MTdFRUE1MEI4ODE0MTYKKzoxMDBGMzAwMDg3NzQwQjBCNDdBODc3MThFRUEzMDlCQjEwMDg3NzAyM0MKKzoxMDBGNDAwMDk3RjAxOEVFQTExN0VFQTIwOEE4MDEwQjg4MDIwNzQ3MzgKKzoxMDBGNTAwMDAyMUJFRTlFOTdGMTBCODgwMjk4RjIyNzkwMjMyQjkwQUMKKzoxMDBGNjAwMDIyMDQ3ODEwMDZCQjEwMDc0NzEyMDhCQjAyMjg5MDIxMDQKKzoxMDBGNzAwMDA3NzcxMDBDODgxMDA3ODgwMjBCODgwMjE3RUU5NjhCRjMKKzoxMDBGODAwMDMzMDdCQjAxODczNDBCODgwMjk4RjM5Nzk5OTdGNDhCNEEKKzoxMDBGOTAwMDk1ODczOTlCRjU4ODk2OEIzODk4RjY4ODk3OUJGODk3QjQKKzoxMDBGQTAwMEY5OThGNzE3RUU4RDI4RTI4NTA3QzcwODJENzRDRjA4NEEKKzoxMDBGQjAwMDQ4MEIyOEU2ODU2NTU1MEYyQjIyMUUyODIyMUQ3Qjg5QUMKKzoxMDBGQzAwMDAyMkIwQTAwNjRCRjA1MkNCMDA3MjhCMDAwREEyMDA2MDcKKzoxMDBGRDAwMDg4MEEyODgyNENDMEQxMEI4MDAwREJBMDY1QUZFNzYzOTQKKzoxMDBGRTAwMEZFRUEwMDAwMjkyMDcyNjU5RTk0NjAwNEU3MkEyMDcyQzAKKzoxMDBGRjAwMDY1QUVCRjYwMDRERTAwMDAyRUIwMDMyQzIwNjdENEUwOTUKKzoxMDEwMDAwMDY1QzEwNThBMzI4QzMzMEFGRjUwMEM0NTU0QkM1NTY0QzcKKzoxMDEwMTAwMEY0RUIxOUVFNzI4ODJBMDlBOTAxMDk4ODBDNjQ4MjFGNzEKKzoxMDEwMjAwMEMwOTI2MDAwREQyRUQwMDMyQTIwNjdENEUwNjVBMEQ4RUUKKzoxMDEwMzAwMDhBMzI4QjMzMEFGQzUwMEI0NTU0QkM1NTY0QzRCRTE5MkMKKzoxMDEwNDAwMEVFNjc4ODJBMDlBOTAxNzk4OUQ1MEJFQTUwNjRBNEUzREYKKzoxMDEwNTAwMDBDRUUxMUMwRjAyRjE2MTMyRTE2MTY4QUU3OENFODJBMTQKKzoxMDEwNjAwMDE2MTI4RUU5REZDMEFBRUE3RUFCMDFCMUNGMEJBODUwMDEKKzoxMDEwNzAwMDY1ODM0Njg4MzdEQkMwQUU4OTk5MUU3ODlCMDIyQkNDRUUKKzoxMDEwODAwMDAxMkIxNjFCMjkxMjBFMkIwQTAwMjkxNjFBN0ZDMzA3RTMKKzoxMDEwOTAwMDdGQzkwMjdFQUIwMUMwQjE2NUI0OUQ4QjM1MkYwQTAwQkMKKzoxMDEwQTAwMDJBMEEwMDdBQzMwNTY0QzNDQjJGMEEwMTY1RjQ4OTJCOTEKKzoxMDEwQjAwMDEyMTYyQjE2MTkwMDUxMDRDMEMxMDBDQzFBMkNDQ0ZGRkIKKzoxMDEwQzAwMDJDMTYxNzBDRkMxMzJDMTYxODJCMTIxQTJBMTIxQkRDQzgKKzoxMDEwRDAwMDUwNTgxOUI2QzBEMEMwOTAyRTVDRjQyQzEyMTcyODEyQUMKKzoxMDEwRTAwMDE4MkYxMjFCMkExMjFBMDhGRjAxMENBQTAxODgzNDA3QjQKKzoxMDEwRjAwMDRDMEFBQjhCMjgxMjE5MkJDNjE2MkY4NjA4MkE4NjA5OTQKKzoxMDExMDAwMDJFNzQxMDI5MjQ2NzJFNzAwMzg5NzVCMUVBMkE3NDAzOUUKKzoxMDExMTAwMEIwOTkwOTQ5MEM2NTlEQjQyQjIwNjcyRDI1MDI2NUIzNTQKKzoxMDExMjAwMEZBMkIyMjFFMkMyMjFEN0JDOTAxQzBCMDY0QkQ5RDJDNTAKKzoxMDExMzAwMEIwMDcyOEIwMDBEQTIwMDY4ODBBMjg4MjRDQzBEMTBCRkMKKzoxMDExNDAwMDgwMDBEQkEwNjVBRkU3NjNGRDgyODlCQUIxOTk2NTkwNDUKKzoxMDExNTAwMDk3ODgzNDFDRUUyMzk4QkE4RjMzMUVFRTFDMEY0RjU0MjEKKzoxMDExNjAwMDJGQjQyQzhEMkE4QTMyMEVERDAyMENBQzAxN0RDOTY2QUIKKzoxMDExNzAwMDBBNDk1MTZGOTI2MDhBMzM3NUE2NUIyQ0IwMTMwQUVENTEKKzoxMDExODAwMDUxMERDRDAxMEQwRDQxMEMwQzQxN0RDOTQ5MkVCMDEyMDAKKzoxMDExOTAwMEIwRUU2NUUzQzZDMEQwOEUzNzhDQjg4QTM2OEZCOTdDODYKKzoxMDExQTAwMEEzMDc3QUM5MDI3RUZCMDFDMEQxQ0VEOTg4MzUwQUFEMkEKKzoxMDExQjAwMDAyMEU4RTA4NzhFQjAyMkRBQzAxODlCN0RBQzBBRjlCMjYKKzoxMDExQzAwMDc5QkIwMUIxQ0FEQ0IwQzBCMDdEQTMwNzdBRDkwMjdDN0IKKzoxMDExRDAwMEVCMDFDMEIxNjRCMTYxQzA5MTI5MjQ2N0MwMjBEMTBGNzcKKzoxMDExRTAwMDAwMDA4QURBQjFBQTY0QTBDMDJDMjA2NzJEMjUwMjY1MTAKKzoxMDExRjAwMEMzMTExREVERjY4QTMyMUVFREZCMERBRDAxMEVERDBDQTcKKzoxMDEyMDAwMDY1RDI4QTBBNEU1MTZGRTIwMjYwMDI4MUMwOTAyOTI0QTEKKzoxMDEyMTAwMDY3MDkwRjQ3NjVGMkY4MjgyMjFEN0I4OTAyMkIwQTAwMTcKKzoxMDEyMjAwMDY0QkNBOTJDQjAwNzI4QjAwMERBMjAwNjg4MEEyODgyRkUKKzoxMDEyMzAwMDRDQzBEMTBCODAwMERCQTA2NUFGRTc2M0ZDOEUwMDAwRTMKKzoxMDEyNDAwMDBDRTk1MDY0OTJFRDBDRUYxMUMwODAyODE2MTFBRkJGNkQKKzoxMDEyNTAwMDJGMTYxOThFRjg4QkY3REFFMDhGRjkyQjE2MTBBQkZCRUYKKzoxMDEyNjAwMDdGQkIwMUIxRUEwQ0E4NTA2NTgwRDY4ODM3RENFMEFGQkYKKzoxMDEyNzAwMDg5OTkxQzc4OUIwMjJDRUMwMTJDMTYxQjI5MTIwQzJDMzIKKzoxMDEyODAwMDBBMDAyOTE2MUE3QUUzMDc3QUU5MDI3RkJCMDFDMEMxNzYKKzoxMDEyOTAwMDY1QzJBNThCMzUyQzBBMDAyQTBBMDA3QUUzMDU2NEUxQjEKKzoxMDEyQTAwMENBMkMwQTAxNjRDRTBENjAwMjhFODgzNDFCRURDRDk4RTUKKzoxMDEyQjAwMERBOEYzMzFFRURDNjBGNEY1NDJGRDQyQzhDMkE4QTMyNkUKKzoxMDEyQzAwMDBFQ0MwMjBCQUIwMTBDQkIwQzY1QkYwQTBBNDk1MTZFNzgKKzoxMDEyRDAwMDkyMDI2M0ZGMDE4QTMzMEFBQjUwNjRCRUY5MkNEMDEzMkIKKzoxMDEyRTAwMDBBRUU1MTBFQ0UwMTBFMEU0MTBDMEM0MTBFQ0MwQzY1RDcKKzoxMDEyRjAwMENFRTQyRkQwMTJCMEZGNjVGMjZFQzBCMDhFMzc4Q0Q4MUUKKzoxMDEzMDAwMDhBMzYyRkQyMDk3Q0EzMDc3QUM5MDI3RUZCMDFDMEIxQkQKKzoxMDEzMTAwMDY1QkVDMzg4MzVEQkEwQUU4RTc4RUIwMUIxQUI4OUQ3NTMKKzoxMDEzMjAwMERBQzBBRjlENzlEQjAxQjFDQUMwQzA3QkEzMDc3QUI5MkYKKzoxMDEzMzAwMDAyN0RFQjAxQzBDMTY1Q0U5REMwOTAyOTI0NjdDMDIwMEQKKzoxMDEzNDAwMEQxMEY4ODM3OEMzNjk4MTQwQ0U5MEMyOTE2MTQwOEY4M0MKKzoxMDEzNTAwMDBDOTgxRDc4RkIwNzI4MTIxNEIwODgyODE2MTQ4OTFERDQKKzoxMDEzNjAwMDlGMTU5QjE2QzBGMDJCMTIxNDI5MTYxQTJCMTYxQjhCRDcKKzoxMDEzNzAwMDE0N0FFMzBCN0FFOTA2ODgxNThFMTY3OEVCMDFDMEYxMzIKKzoxMDEzODAwMDY1RjFCQTI5MTIxQTJGMTIxMThBMzUyRTEyMUI5QTFBRDgKKzoxMDEzOTAwMEFGRUUyRjEyMTBDMEEwQUY5Rjc5RkIwMUIxRUU5RjExRUQKKzoxMDEzQTAwMDg4MUFDMEYwOTgxMDdBRTMwQTdFQTkwNTJBMTIwMTdBRjkKKzoxMDEzQjAwMDhCMDFDMEYxNjRGMDgxNjAwMTgzODkzNjhCMzc5OTE3MDYKKzoxMDEzQzAwMDBCRTgwQzk4MUYwOUM5MEMyOTE2MTU3OEVCMDcyODEyOTEKKzoxMDEzRDAwMDE1QjA4ODI4MTYxNUQ5QzA5QTE5OUUxODhBMUYyRTEyODIKKzoxMDEzRTAwMDE1MkExNjFBMkUxNjFCREFDMEMwRTA4QzE3N0Y5MzBCMzUKKzoxMDEzRjAwMDdGQTkwNjg4MTg4RjE5NzhGQjAxQzBFMTY1RTEzRTI5QjUKKzoxMDE0MDAwMDEyMUEyRjEyMTM4QTM1MkUxMjFCOUExQkFGRUUyRjEyQUYKKzoxMDE0MTAwMDEyQzBBMEFGOUY3OUZCMDFCMUVFOUYxMzg4MUJDMEYwRjMKKzoxMDE0MjAwMDk4MTI3QUUzMEE3RUE5MDUyQTEyMDM3QThCMDFDMEYxODkKKzoxMDE0MzAwMDY1RjEwQTJFMTIxNjJFMTYxOTJBMTIxQjAwNTEwNEMwMkQKKzoxMDE0NDAwMEUxMDBFRTFBQjBFRTJFMTYxNzBFRkYxMzJGMTYxODBGMkUKKzoxMDE0NTAwMENDMDFBQ0FBMkYxMjFBMEVCQzAxQUNGQzdGQ0IwMUIxOUYKKzoxMDE0NjAwMEFBMkExNjFCMkMxNjFBNjNGQzVFMDAwMDdGQjMwMjYzQzcKKzoxMDE0NzAwMEZFMzE2M0ZFMkI3RUIzMDI2M0ZDMzA2M0ZDMkEwMDAwNjYKKzoxMDE0ODAwMDY0NTBDMERBMjBEQkMwNTgxNjhBQzAyMEQxMEZDMDkxNEEKKzoxMDE0OTAwMDYzRkQ3QTAwQzA5MTYzRkE0NERBMjBEQjcwQzBEMTJFN0MKKzoxMDE0QTAwMDBBODBDMDlBMjkyNDY4MkM3MDA3NTgxNTc1RDJBMEQxREIKKzoxMDE0QjAwMDBGMDM0NzBCMThFRDREREI3MEE4Mjg3ODczMDIyQjdEQzYKKzoxMDE0QzAwMEY4RDlCMDYzRkE2MTAwMDAyQTJDNzREQjQwNTgwRUVFQTQKKzoxMDE0RDAwMDYzRkFFNDAwMDAyOTIyMUQyRDI1MDI3Qjk5MDFDMEIwOEEKKzoxMDE0RTAwMEM5QjYyQ0IwMDcyOEIwMDBEQTIwMDY4ODBBMjg4MjRDM0EKKzoxMDE0RjAwMEMwRDEwQjgwMDBEQkEwNjVBRkU3QzAyMEQxMEZDMDkxNDkKKzoxMDE1MDAwMDYzRkJGRjAwMDIyQTAyNTgwMjRDMEFBMjAyMDYwMDAwRjYKKzoxMDE1MTAwMDAyMkEwMjU4MDI0OTBBQTIwMjA2MDAwMERCNzBEQTIwMDEKKzoxMDE1MjAwMEMwRDEyRTBBODBDMDlFMjkyNDY4MkM3MDA3NTgxNTU0RkIKKzoxMDE1MzAwMEMwMjBEMTBGQzA5NDYzRkJDOUMwOTY2M0ZCQzRDMDk2QTIKKzoxMDE1NDAwMDYzRkJCRjAwMkEyQzc0REIzMERDNDA1QkZFMEZEQkEwQUEKKzoxMDE1NTAwMEMyQTAyQUI0MDAyQzIwMEM2M0ZGMjcwMDhEMzU4Q0I3NjUKKzoxMDE1NjAwMDdEQ0IwMjYzRkREMjYzRkM2RDhGMzU4RUQ3N0ZFQjAyOUUKKzoxMDE1NzAwMDYzRkRDNTYzRkM2MDAwMDA2QzEwMDRDMDIwRDEwRjAwNDcKKzoxMDE1ODAwMDZDMTAwNEMwMjBEMTBGMDA2QzEwMDQyQjIyMUUyODIyRTYKKzoxMDE1OTAwMDFEQzBBMEMwOTQyOTI0MDYyQTI1MDI3Qjg5MDFEQkEwNTYKKzoxMDE1QTAwMEM5QjkxM0VEMDREQTIwMjhCMDAwMkNCMDA3MDM4ODBBNkIKKzoxMDE1QjAwMDI4ODI0Q0MwRDEwQjgwMDBEQkEwNjVBRkU3QzAyMEQxRjIKKzoxMDE1QzAwMDBGMDAwMDAwNkMxMDA0MkMyMDA2MkEyMTAyNjhDODA1QjgKKzoxMDE1RDAwMDI4Q0NGOTY1ODEyRTBBMDk0QzY1OTEwNDhGMzBDMUI4NzkKKzoxMDE1RTAwMDBGOEYxNDdGQjAwNTI4MjEyMzY1ODEyNzE2RUNGMzI5N0UKKzoxMDE1RjAwMDYyOUU2Rjk4MDI2MDAwRjgxOUVDRUYyOTkyMjY2ODkwQkQKKzoxMDE2MDAwMDA3OEEyMDA5QUEwQzY1QTBFNzJBNjI5RDY0QTBFMTJCNDUKKzoxMDE2MTAwMDIwMEMwQ0I5MTFBNjk5MkQ5Mjg2NkZEOTAyNjAwMERCQkYKKzoxMDE2MjAwMDFERUNFNzBEQkQwQTJERDJBMzY4RDAwNzhFMjAwREVFNkMKKzoxMDE2MzAwMDBDNjVFMEM3Mjc5Mjg1QzBFMDY0NzBCRjFERUNFQzY4QzQKKzoxMDE2NDAwMDQzNEUxQ0VDRUI4QTJCMENBQTAyOUE3MDg5MjAwODk5NTUKKzoxMDE2NTAwMDExMEQ5OTAyOTk3MTg4MkE5ODc0OEYzMjlGNzUyODIxRUIKKzoxMDE2NjAwMDA0MDg4ODExOTg3NzE4RUNEQzBDQkYxMUE2RkYyREYyNDYKKzoxMDE2NzAwMDg1QThCODJFODRDRjJEREMyODJERjY4NUM4NUEyQTJDQjMKKzoxMDE2ODAwMDc0REI0MDU4MEU4MUQyQTBEMTBGQzAyMEQxMEYwMDAwRDIKKzoxMDE2OTAwMDAwMjlDQ0Y5NjQ5MEIxMkMyMDY2ODkzMUIxQ0MwQzBDQjYKKzoxMDE2QTAwMDQ3MkMyNDY2NkVDNjAyNjAwMDg1MDlGODUwNjU4MDdGNkQKKzoxMDE2QjAwMDFDRUNEMThBMkIwRjA4NDAwQjg4MTAwOEFBMDIwQ0FBMzgKKzoxMDE2QzAwMDAyOUE3MDg5MjAwODk5MTEwRDk5MDI5OTcxODgzMzk4QUUKKzoxMDE2RDAwMDczOEMzMjlDNzI4QTJBOUE3NDg5MzQ5OTc1NjNGRjdENUYKKzoxMDE2RTAwMDAwQ0M1N0RBMjBEQjMwREM0MDU4MTU1RkMwMjBEMTBGMkEKKzoxMDE2RjAwMDAwREEyMEMwQjY1ODE1RUU2M0ZGRTUwMERBMjA1ODE1NzEKKzoxMDE3MDAwMEVDNjNGRkRDMDBEQTIwREIzMERDNDBERDUwNTgxNjdBNzkKKzoxMDE3MTAwMEQyQTBEMTBGQzg1OERBMjBEQjMwNTgxNEM3MkEyMTAyRDIKKzoxMDE3MjAwMDY1QUZCREMwOTQwOUE5MDIyOTI1MDI2M0ZGQjIwMDAwN0MKKzoxMDE3MzAwMDJCMjEwNDU4MTQ3MzFERUNBREMwRTAyRTI0NjY4RjMwQUQKKzoxMDE3NDAwMDJCMjAwQzBGOEYxNDYzRkY2NjI5MjEzOEMwODg3OTgzMDIKKzoxMDE3NTAwMDFGOEMzMTBDRkM1MDY0Q0Y1NjJCMjEwNEMwQzA1ODE0OTAKKzoxMDE3NjAwMDY4MURFQ0EyQzBFMDhGMzAyQjIwMEMwRjhGMTQ2M0ZGOUMKKzoxMDE3NzAwMDNFMkMyMDY2MkIyMTA0QjFDQzBDMEM0NzJDMjQ2NjU4M0YKKzoxMDE3ODAwMDE0NjAxREVDOUFDMEUwMkUyNDY2OEYzMDJCMjAwQzBGQzUKKzoxMDE3OTAwMDhGMTQ2M0ZGMUEwMDAwMDA2QzEwMDRDMEI3QzBBMTE2QkMKKzoxMDE3QTAwMEVDOTYxNUVDODhENzIwRDg0MEI4MjJDMDQwMDUzNTAyMDkKKzoxMDE3QjAwMDk2NzE5NTcwMDJBNDM4MDQwNDQyQzk0QjFBRUM3QjE5NDcKKzoxMDE3QzAwMEVDN0MyOUE2N0VDMTQwRDMwRjZENEEwNTAwODA4ODAwQkQKKzoxMDE3RDAwMDIwOEMyMjBBODhBMjcyRDEwRkMwNTAwOEE1Mzg3NUIwOUIKKzoxMDE3RTAwMEUzNjNGRkQ3NkMxMDA2OTMxMzk0MTEyOTIwMDY2NTUyMEEKKzoxMDE3RjAwMDg4QzA3MTY4OTgwNTJBOUNGOTY1QTI5ODE2RUM2RjI5MzMKKzoxMDE4MDAwMDIxMDI4QTEzMDkwOTRDNjU5MENEOEFBMDBBNkE1MTJBREYKKzoxMDE4MTAwMEFDRkQ2NUEwQzJDQzVGREIzMERBMjA4QzExNTgxNTEyMEMKKzoxMDE4MjAwMEMwNTE5QTEzQzdCRjlCQTk4RTEzMkVFMjA5NjhFMDYwQ0UKKzoxMDE4MzAwMDJGNjI5RTFERUM2MDZGRjgwMjYwMDA4NDJERDIyNjY4MzYKKzoxMDE4NDAwMEQwMDUyRjIyMDA3REY5NzgyQzYyOURDNzkwNjRDMDcwNkUKKzoxMDE4NTAwMDlDMTA4QTEzMkIyMDBDMkFBMDIwMENCRDExQTZERDBBOTcKKzoxMDE4NjAwMDRGMTRCRkE4MDk4ODAxMjlEMjg2QUY4ODI4OEMwOTc5MkUKKzoxMDE4NzAwMDhCNTkxRkVDNTIwRkJGMEEyRkYyQTM2OEYwMDUyODIyRTQKKzoxMDE4ODAwMDAwN0Y4OTQ3MjlEMjg1RDQ5MDY1OTA3NTYwMDA0MzAwMTgKKzoxMDE4OTAwMDAwMkIyMDBDMUZFQzRBMENCRDExQTZERDI5RDI4NjBGQUYKKzoxMDE4QTAwMEJGMEE2RTk2MTAyRkYyQTM2OEYwMDQ4ODIwN0Y4OTA1ODYKKzoxMDE4QjAwMDI5RDI4NTY1OTE2NURBMjA1ODE1N0RDOTVDNjAwMUZGRTQKKzoxMDE4QzAwMDAwREEyMEMwQjY1ODE1N0E2MDAwMEMwMEMwOTA2M0ZGQTMKKzoxMDE4RDAwMEI1MDAwMERBMjA1ODE1NzY2NTUxRTQ4RDEzOEMxMURCQzQKKzoxMDE4RTAwMEQwOEREMDAyMkEwMjBENkQ1MTU4MTNFMzlBMTM2NEExRDIKKzoxMDE4RjAwMENFQzc1RjhGQTE5NUE5QzA1MTBGMEY0NzlGMTE2M0ZFRkYKKzoxMDE5MDAwMEZEMDBDMDkxQzBGMTI4MjAwNjJDMjA2NjI4OENGOUE3ODQKKzoxMDE5MTAwMENDMEMwQzQ3MkMyNDY2NkZDNjA5OEQxMzhERDE3MERFNUMKKzoxMDE5MjAwMDAyMjkwQTAwMDk5RDAyNjQ4MTU5QzlEMzhBMTAyQjIxMUEKKzoxMDE5MzAwMDA0NTgxM0YzOEExM0MwQjAyQjI0NjYyRUEyMDkyQUEwRTAKKzoxMDE5NDAwMDIwMEUyODE0MUNFQzI5OEQxMzE1RUMxREMxNzAwQTc3OEMKKzoxMDE5NTAwMDM2ODU1NjJEREMyOEFDMkM5QzEyREVEMEE4NTU3Q0QzQzUKKzoxMDE5NjAwMDAyMkVEREY4RDNFMERBNDAwNTVCMDJEQzMwNUJGRjhBNTMKKzoxMDE5NzAwMEQ0QTAyODIwMENCNDU1QzBEMDJCMEE4ODJGMEE4MDBDODQKKzoxMDE5ODAwMDhDMTFBNkNDMjlDMjg1QUYzRkFCOTkyOUM2ODUxQ0VDMkEKKzoxMDE5OTAwMDEyREVGMEFDODgyRDg0Q0YyODEyMDIyOTEyMDM3OEYzQ0UKKzoxMDE5QTAwMDAyMkVGREY4Mjg5MDIwRDNFMDA3ODgwQ0MxNzAwODA4QUIKKzoxMDE5QjAwMDQ3Mjg5NDIwMDg3NzM2NjU3RkFCODkxMzEzRUMxMDg5OEMKKzoxMDE5QzAwMDkwQzBGNDc3OTc0OTFCRUMwRUMxQ0EyODIxMDQ4NTEzRjcKKzoxMDE5RDAwMDA5OUU0MDA2RUUxMTg3NTMwNDg4MTE4NTUyMEU4ODAyMzUKKzoxMDE5RTAwMDBDODgwMjlCQTA5RkExOEYyQjlEQTU5OEE0OTdBNzk1REIKKzoxMDE5RjAwMEE2MDNGRjAyOUZBMjJDMjAwQzFFRUJGN0FFQ0UwQ0NDNTAKKzoxMDFBMDAwMDExMDZDQzA4MkJDMjg1MkRFNENGMkJCQzIwMkJDNjg1MUMKKzoxMDFBMTAwMDJBMkM3NDhCMTE1ODBEOUNEMkEwRDEwRjI4MjAzREMwQzgKKzoxMDFBMjAwMEUwN0M4NzdGMkUyNDY3MEUwQTQ3NjVBMDdCMUFFQkY1QzIKKzoxMDFBMzAwMDg4MjAxRUVCRTM4RjEzOEVFNDhGRjQwODg4MTEwQTg4NDgKKzoxMDFBNDAwMDAyMEY4RjE0QUZFRTFGRUJGMDk4OTEwRkVFMDI5RTkwRjUKKzoxMDFBNTAwMDFFRUJFRkMwODAxQUVCRTAyQ0QyODVBQUJBQjhDQzI4RDYKKzoxMDFBNjAwMEE0Q0YyQ0Q2ODUyQzIxMDIyRjIwNzIwRUNDMDJCMUZGRTAKKzoxMDFBNzAwMDJGMjQ3MjJDMjUwMkMwMjBEMTBGODcxMzg3NzAwNzA3RUYKKzoxMDFBODAwMDQ3NjNGRDZFMjgyMTM4QzA5OTc5OEIwMjYzRkU5QUREODkKKzoxMDFBOTAwMEYwNjNGRTk1MDBEQTIwREIzMDhDMTFERDUwNTgxNTk2OEUKKzoxMDFBQTAwMEQyQTBEMTBGQzBFMTYzRkY3QThCMTM4QzExREQ1MEMwM0YKKzoxMDFBQjAwMEFBMkUwQTgwMkEyNDY4REEyMDU4MTNGMUQyQTBEMTBGNjYKKzoxMDFBQzAwMEMwMjBEMTBGNkMxMDA2MjkyMTAyQzBEMDc1OTcxMDJBQjIKKzoxMDFBRDAwMDMyMDQ3RkE3MEE4QjM1N0ZCRjA1MkQyNTAyMEREOTAyNjEKKzoxMDFBRTAwMDA5MEM0QzY1QzE4MjE2RUJCNDFFRUJCMjI4NjI5RUMwOTUKKzoxMDFBRjAwMEZBNzhGMzAyNjAwMTg4MjlFMjI2Njg5MDA3OEEyMDA5QjMKKzoxMDFCMDAwMEFBMEM2NUExN0EyQTYyOURERkEwNjRBMTc3MkIyMDBDMjQKKzoxMDFCMTAwMDBDQkMxMUE2Q0MyOUMyODZDMDhDNzk4MzAyNjAwMTU3MDcKKzoxMDFCMjAwMDE5RUJBNzA5QjkwQTI5OTJBMzY4OTAwNzg4MjAwOTg4QTgKKzoxMDFCMzAwMDBDNjU4MTQzMjdDMjg1MUNFQkE5NjQ3MTNBODkzMTA5ODAKKzoxMDFCNDAwMDhCMTQwQ0JCMDE2RkIxMUQyQzIwNjY5RjEwQjFDQzBDMDcKKzoxMDFCNTAwMDBDNDcyQzI0NjY2RUM2MDI2MDAxNDAwOUZGNTA2NUYxRjcKKzoxMDFCNjAwMDNBOEExMDJBQUMxODg5MzRDMEM0N0Y5NzNDMThFQkE5NzQKKzoxMDFCNzAwMDFCRUJBODhGMzU5QzcxOUI3MDhCMjA5RDc0MDhCQjAyNUEKKzoxMDFCODAwMDlCNzJDMDgyOTg3NTFCRUJBNDBGMDg0MDlCNzMwRjg4NTMKKzoxMDFCOTAwMDExOTg3NzdGRjcwQjJGMjEwMjI4NEEwMDA4RkYwMjJGQTgKKzoxMDFCQTAwMDI1MDJDMEI0NjAwMDA0MDAwMDAwQzBCMDdFOTcwNDhGMUUKKzoxMDFCQjAwMDM2MkYyNTIyN0Q5NzA0ODgzNzI4MjUyMTdDOTczNkMwMkIKKzoxMDFCQzAwMEYxQzA5MDBBRjkzODJGM0MyMDA5MDk0MjY0OTA4NjE5MjcKKzoxMDFCRDAwMEVCNzYxOEVCNzcyODk2N0UwMEYwODgwMEEwOEMwMEYwNUEKKzoxMDFCRTAwMDg4MDBBMDhDMDBGMDg4MDBBMDhDMkE2MjlEMkRFNEEyQzEKKzoxMDFCRjAwMDJBQUMxODJBNjY5RDg5MzA3Nzk3Mzg4RjMzOEEzMjE4MzUKKzoxMDFDMDAwMEVCODAwN0JFMEIyQzIxMDRCNEJCMDRDQzExOThFMEMwQzAKKzoxMDFDMTAwMDg0OThFMTg4MkI5REU1OUFFNjlGRTcxQUVCNzgwOTlGNjcKKzoxMDFDMjAwMDQwMDZGRjExMEZDQzAyMEE4ODAyOThFMkMxRkMwRkNDREIKKzoxMDFDMzAwMDAyMkNFNjA0QzlCODJDMjAwQzFFRUI2NzBDQ0ExMUFFQUUKKzoxMDFDNDAwMENDMDZBQTA4MjlBMjg1MkRDNENGMDlCOTBCMjlBNjg1REYKKzoxMDFDNTAwMENGNUNDMDIwRDEwRkMwODFDMDkwMEY4OTM4QzA4Nzc5NzgKKzoxMDFDNjAwMDg4MDI2M0ZGNzI2M0ZGNjYwMENDNTdEQTIwREIzMERDNEEKKzoxMDFDNzAwMDQwNTgxM0ZEQzAyMEQxMEZEQTIwNTgxNDhENjNGRkU4QkYKKzoxMDFDODAwMEMwQTA2M0ZFODJEQTIwQzBCNjU4MTQ4OTYzRkZEOTAwNzEKKzoxMDFDOTAwMERCNDAyQTJDNzQ1ODBDRkNEMkEwRDEwRjhBMTAyQjIxQzcKKzoxMDFDQTAwMDA0NTgxMzE3MUVFQjQ0QzBEMDJEMjQ2NjYzRkVCMTAwMDgKKzoxMDFDQjAwMDZDMTAwNkQ2MjAxOUVCM0YxRUVCNDEyODYxMDIxN0VCOTIKKzoxMDFDQzAwMDNFMDgwODRDNjU4MDVGOEEzMDBBNkE1MTY5QTM1NzJCMjkKKzoxMDFDRDAwMDcyOUU2RUI4M0YyQTkyMjY2OEEwMDQ4QzYwN0FDOTM0M0UKKzoxMDFDRTAwMDJBNzI5RDJDNENGRUNBQUIyQjYwMENCNjRGMENCRDExNUEKKzoxMDFDRjAwMEE3REQyOEQyODYwRUJFMEE3OEZCMjY5QzExMkVFMkEzMTEKKzoxMDFEMDAwMDJDMTYwMDY4RTAwNTJGNjIwMDdFRjkxNTIyRDI4NUNGREYKKzoxMDFEMTAwMDI1NjAwMDBEMDBEQTYwQzBCNjU4MTQ2NUM4NUE2MDAxMkQKKzoxMDFEMjAwMDBGMDBEQTYwNTgxNDYyNjU1MTA2REM0MERCMzA4RDMwRkMKKzoxMDFEMzAwMERBNjAwRDZENTE1ODEyRDBEM0EwNjRBMEYzODRBMUMwMTUKKzoxMDFENDAwMDUxMDQwNDQ3NjNGRjZEMDBDMEIwMkM2MDY2ODkzMUIxNTcKKzoxMDFENTAwMENDMEMwQzQ3MkM2NDY2NkZDNjAyNzA5NjBBMkI2MTA0OEIKKzoxMDFENjAwMDU4MTJFN0MwQjAyQjY0NjY2NTUwQjQyQTNDMTBDMEU3MzcKKzoxMDFENzAwMERDMjBDMEQxQzBGMDAyREYzODBGMEY0MjY0RjA5MDE5QjAKKzoxMDFEODAwMEVCMEExOEVCMEIyODk2N0U4RDEwNkREQTA1MDBBMDg4MDMKKzoxMDFEOTAwMDAwQzA4Q0MwQTA4OTMwMURFQjFBNzc5NzUzODgzMjhDMTUKKzoxMDFEQTAwMDEwOEYzMzAyQ0UwQkMwMjQ5MkUxMjI2MTA0OURFMDA0MjcKKzoxMDFEQjAwMDIyMTE4RDZCOUJFNTlGRTc5OEU2MUZFQjEwMDk5ODQwNzkKKzoxMDFEQzAwMDA2ODgxMTA4MjIwMjBGREQwMkMxOEQ5REUyMDgyMjAyNjEKKzoxMDFERDAwMDkyRTRCNEMyMkU2MDBDMUZFQjAwMENFODExQTc4ODJDMTMKKzoxMDFERTAwMDgyODVBRkVFMEMyMjBCMkJFNENGMjI4Njg1RDJBMEQxQzgKKzoxMDFERjAwMDBGMjg2MDBDRDJBMDhDMTExOUVBRjgwQzhEMTFBOTg4NUIKKzoxMDFFMDAwMEE3REQyRUQyODUyQjg0Q0YwRUNDMEIyQ0Q2ODVEMTBGRkYKKzoxMDFFMTAwMEMwRjAwQURGMzg3RkU4MDI2M0ZGNkM2M0ZGNjAwMDAwRjgKKzoxMDFFMjAwMDJBNkM3NEMwQjJEQzIwREQ0MDU4MTJDNUMwQjA2M0ZGMUMKKzoxMDFFMzAwMDYzQzAyMEQxMEYwMDAwMDA2QzEwMDQyOTIwMDYyQTIyNjQKKzoxMDFFNDAwMDFFQzAzOTJDMjIxRDIzMjQ2OEMwMzA3QUMxMDdEREEwQjIKKzoxMDFFNTAwMDYwMDAwNDAwMDAwMEMwRDA2RTk3MzhDMDhGMkUwQTgwNEEKKzoxMDFFNjAwMDJCMjAxNEMwOTYyOTI0MDYwRUJCMDIyRTIxMDIyQjI0RkYKKzoxMDFFNzAwMDE0N0U4MDA0MjMyNTAyREUzMDdBQzEwRUM4QUJEQkQwOEQKKzoxMDFFODAwMERBMjAyQzBBMDA1ODBCMDYyRTIxMDIwRTBGNENDOEZFMzkKKzoxMDFFOTAwMDYwMDA2OTAwNjg5NTY1MjgyMTAyMDgwODRDNjU4MDVDMkYKKzoxMDFFQTAwMDFBRUFDNjFFRUFDNDJCQTI5RUMwOUE3QjlCNUUyQkUyNTYKKzoxMDFFQjAwMDI2NjhCMDA0OEMyMDdCQzk1MzI5QTI5RDFGRUFDMTY0MDcKKzoxMDFFQzAwMDkwNEE5MzkwQzBDMzFERUFENTJCMjEwNDlEOTYwOEJCNzAKKzoxMDFFRDAwMDExMENCQjAyOUI5NzlCOTExQ0VBRDJDMDg1MjNFNEEyMDQKKzoxMDFFRTAwMDJCQTI5RDI4MjQwNjhERkEyODIxMDJCMEREMkJCQzMwQzAKKzoxMDFFRjAwMDJCQTY5RDlERkEwQzg4MDIyODI1MDJDOEQyQzAyMEQxQUQKKzoxMDFGMDAwMDBGOEVGOTEyRUFDODJFMjY4OUMwMjBEMTBGREEyMEMwMjAKKzoxMDFGMTAwMEI2NTgxM0U3QzAyMEQxMEY2QzEwMDYyQTIwMDY5NDEwODMKKzoxMDFGMjAwMDY4QTgwNTI4QUNGOTY1ODI1MDI5MjEwMjA5MDk0QzY1ODkKKzoxMDFGMzAwMDkyMEFDQzVGREIzMERBMjA4QzEwNTgxMzRCQzA1MUQzOUYKKzoxMDFGNDAwMEEwQzdBRjlBM0FDMEQwMUNFQTlEMTRFQUEzMUVFQTlDMkYKKzoxMDFGNTAwMDhGM0ExNkVBOTlCMUZCNjRCMTMxMjg2MjlFNkY4ODAyMEMKKzoxMDFGNjAwMDYwMDFFRDI5NEMzMzI5OTIyNjY4OTAwNzhBMjAwOUFBM0UKKzoxMDFGNzAwMDBDNjVBMURDMkE2MjlEQzA4RTY0QTFENDJCMjAwQzBDQzAKKzoxMDFGODAwMEI3MTEwNjc3MDgyOTcyODY3OTgzMDI2MDAxQ0QwQ0I5RjIKKzoxMDFGOTAwMDBBMjk5MkEzNjg5MDA4MkMyMjAwMDlDQzBDNjVDMUJCQzkKKzoxMDFGQTAwMDI3NzI4NTY0NzFCNTI4MjAwNjI4OENGOTY0ODFFNTJDOTgKKzoxMDFGQjAwMDIwNjY4OTMxQjFDQzBDMEM0NzJDMjQ2NjZFQzYwMjYwQjkKKzoxMDFGQzAwMDAxQTEwOUY4NTA2NTgxOUIyQTIxMDQ4Q0U0ODgzNjFFMDIKKzoxMDFGRDAwMEVBN0QwODg5MTRBOUNDMDgwODQ3MDk4ODEwMTlFQTkyRjMKKzoxMDFGRTAwMDBFQ0MwMjlDNzA5OTcxOEMyQTFFRUE5MDA4Q0MwMjBFQ0QKKzoxMDFGRjAwMENDMDI5QzcyMkUzMDJDMjkzMDEzMjgzMDEyMDQ5OTEwRjgKKzoxMDIwMDAwMDA2ODgxMDBDRUUxMDlGNzQwRUFFMDIwOTg4MDIwOEVFQ0UKKzoxMDIwMTAwMDAyOUU3MzhDMzcwNEFBMTE5Qzc1ODkzOEMwRjQ5OTc2OTYKKzoxMDIwMjAwMDg4MzlDMEMxOTg3NzE4RUE4MjhFMzU5QzdCOUU3ODBFREQKKzoxMDIwMzAwMDhFMTQwOEVFMDI5RTdBOEUzMDFDRUE3MTc3RTczMDg4QTMKKzoxMDIwNDAwMDMyODkzMzlDN0M5RjdEMEU5QzQwMDZDQzExOEYyQjI5QkUKKzoxMDIwNTAwMDc2MTMyRDc2MTEyODc2MTIwQ0FBMDIxOEVBNjhDMUM5RTcKKzoxMDIwNjAwMDBDQUEwMjJBNzYxMDA4RkYwMjlGN0VDMEFBNjAwMDAxMTcKKzoxMDIwNzAwMEMwQTZBNEJDMENCOTExQTY5OTI4OTI4NTJEQzRDRjA4N0UKKzoxMDIwODAwMEE4MEIyODk2ODU2NTUxMDBDMDIwRDEwRjJCMjAwQzBDODEKKzoxMDIwOTAwMEI3MTEwNjc3MDgyQTcyODYwQ0I5MEE2RkE5MDI2MDAxODcKKzoxMDIwQTAwMDE4Mjk5MkEzNjg5MDA4MkEyMjAwMDlBQTBDNjVBMTA5QTAKKzoxMDIwQjAwMDJBNzI4NTY0QTEwMzJDMjAzRDBDMkM0MDY0QzA4QzhDQkEKKzoxMDIwQzAwMDM1MEM4QzE0NjRDMDg0OEZFNTdDRjM3RjhDMzYwQzhDQ0IKKzoxMDIwRDAwMDE0NjRDMDc3N0NGMzc0MjgzMDEzQzBGQzc4Rjg2Q0MwQUIKKzoxMDIwRTAwMDkwMjkyNDY3MDkwQzQ3NjVDMEQ3MTlFQTQ3MThFQTQ1QzMKKzoxMDIwRjAwMDhGMjA4QzM1MDhGRjExMEM4QzE0MDhGRjAyODhFNDlGOTgKKzoxMDIxMDAwMEExQUM4QzA5Q0MwMjlDQTA4QzM2OUZBMzBDOEMxNEFDODcKKzoxMDIxMTAwMDg4MDk4ODAyOThBMjE4RUEzREE0QkMyRjcyODUyREM0QjQKKzoxMDIxMjAwMENGMkZGQzEwMkY3Njg1MkYyMTAyMjkyMDcyMDhGRjAyNjUKKzoxMDIxMzAwMEIyOTkyOTI0NzIyRjI1MDJDMDIwRDEwRjAwQ0M1N0RBODIKKzoxMDIxNDAwMDIwREIzMDhDMTA1ODEyQzhDMDIwRDEwRkMwOTE2M0ZGMjMKKzoxMDIxNTAwMDhGREEyMEMwQjY1ODEzNTY2M0ZGRTEwMERBMjA1ODEzMTcKKzoxMDIxNjAwMDU0NjNGRkQ4MkIyMTA0NTgxMUU2MUVFQTE1MkIyMDBDQ0UKKzoxMDIxNzAwMEMwRDAyRDI0NjY4RjNBNjNGRTREREEyMERCMzBEQzQwODAKKzoxMDIxODAwMERENTA1ODEzREREMkEwRDEwRjJBMkM3NDhCMTA1ODBCQzAKKzoxMDIxOTAwMEJFRDJBMEQxMEYyOTIxMzhDMDg4Nzk4MzJFOEMzMTBDNzIKKzoxMDIxQTAwMEZDNTA2NENFMjIyQjIxMDRDMEMwNTgxMUQ1QzBEMDFFRDMKKzoxMDIxQjAwMEVBMDQ4RjNBMkIyMDBDNjNGRTBEREEyMDU4MTMzQzYzOUYKKzoxMDIxQzAwMEZGN0FEQTIwNUJGRjFDRDJBMEQxMEYwMDJDMjA2NjJCRjcKKzoxMDIxRDAwMDIxMDRCMUNDMEMwQzQ3MkMyNDY2NTgxMUM5MUVFOUY4MTcKKzoxMDIxRTAwMDJCMjAwQ0MwRDAyRDI0NjY4RjNBNjNGRERBMDAwMDAwNEUKKzoxMDIxRjAwMDZDMTAwODk1MTRDMDYxQzFCMEQ5NDAyQTIwM0RDMDQwODAKKzoxMDIyMDAwMDBCQUEwMTBBNjQzODJBMjAwNjI5MTYwNTY4QTgwNTJDOUQKKzoxMDIyMTAwMEFDRjk2NUMzM0YxREU5RUE2NDQwMDUyRjEyMDQ2NEYyN0UKKzoxMDIyMjAwMEEwMjYyMTAyMUVFOUU2MDYwNjRDNjU2MkU2MTVFOUUyRjMKKzoxMDIyMzAwMDY0NDBEOThBMzUyOTMwMDM5QTEzMEE5OTBDNjQ5MENDRUEKKzoxMDIyNDAwMDJDMjAwQzhCMTM5QzEwMENDQzExQTVDQzlDMTEyQ0MyRjcKKzoxMDIyNTAwMDg2QjRCQjdDQjMwMjYwMDJENzhGMTAwRUZFMEEyRUUyNUEKKzoxMDIyNjAwMEEzNjhFMDA5ODYyMEQzMEYwRTY2MEM2NTYyQzI4ODExNTAKKzoxMDIyNzAwMDI4ODI4NTY0ODJCQTg5MTM2NDkwNUVEQTgwRDkzMDhDQjIKKzoxMDIyODAwMDIwMUVFOUUwMUZFOUUxMURFOUNFOEIxMzhERDRENEIwMDcKKzoxMDIyOTAwMDdGQjcxOEI4OEEyOTNDMTA4NTM2MDhDNjExMEU2NjAyMjkKKzoxMDIyQTAwMDk2ODEwNTg1MTRBNUQ1MEY1NTAyOTU4MDA0MTgxNDZERTcKKzoxMDIyQjAwMDg5Mjc4ODk2MDhDQjExMDg4ODE0MEVCQjAyQThEODI5NTQKKzoxMDIyQzAwMDlDMjAwRjg4MDI5QkExOThBMDg4OTI5QkEzMDg4ODE0NDkKKzoxMDIyRDAwMEE4RDgwRjg4MDI5OEEyMkFBQzEwMTlFOUNDQzBDMDhGRTgKKzoxMDIyRTAwMDEzMUVFOUJEODYxMThEMTAyODYyODVBRUREMDhGRjBCMzcKKzoxMDIyRjAwMDJDRDRDRjI4MjEwMjJGNjY4NThCMzUyQTIwNzIwOTg4OUQKKzoxMDIzMDAwMDAyQUJBQTI4MjUwMjJBMjQ3MkMwMjBEMTBGMjk1MjlFOEUKKzoxMDIzMTAwMDE4RTlBOTZGOTgwMjYwMDIwQjI4ODIyNjY4ODAwODI5QjQKKzoxMDIzMjAwMDIyMDAwODk5MEM2NTkxRkMyQTUyOURDMUNFOUExMjY0MzQKKzoxMDIzMzAwMEExRjIyQjIwMEMyNjIwMDYwQ0I4MTEwNTg4MDgyRDgyNEUKKzoxMDIzNDAwMDg2MEVCRTBBN0RDMzAyNjAwMjA1MkVFMkEzNjhFMDA4ODUKKzoxMDIzNTAwMDJGMjIwMDBFRkYwQzY1RjFGNjI4ODI4NUQ3ODBERTgwRTMKKzoxMDIzNjAwMDY0ODIwMDk4MTYyNjZDRjk2NDYyMDEyQzIwNjY4ODMxMUMKKzoxMDIzNzAwMDJDQ0MwMTBDMEM0NzJDMjQ2NjZFQzYwMjYwMDFCQzA4RjQKKzoxMDIzODAwMEZENTA2NUQxQjYxREU5QUIxQ0U5OEYxOUU5OTYyQTIxRUMKKzoxMDIzOTAwMDA0OEIyRDI4MzAxMDJGMjExRDBDODgxMDBCRkIwOTBBRUYKKzoxMDIzQTAwMDg4MDIwOTg4MDIwQ0JCMDI2NDQxNTI5QjcwOUQ3MTk4OUYKKzoxMDIzQjAwMDcyQzA0RDhEMzVEOUUwNjREMDZFRDczMERCRDBEODMwQzcKKzoxMDIzQzAwMDdGRDcxNDI3M0MxMEJDRTkyNjMyMTY4QzM5OTZFNjlDNDAKKzoxMDIzRDAwMEU3OEEzN0I0MzgyQUU2MDgwQjEzMTQ2NDMwNEEyQTgyOTUKKzoxMDIzRTAwMDE2ODY3OTlBOTY5Njk3OEM3NzhBN0Q5Qzk4MkI4MjE3NzkKKzoxMDIzRjAwMDJDN0MyMDlBOUEyQTlDMTg5Qjk5ODY3QkIwM0IyOThDMkUKKzoxMDI0MDAwMDA4NkRCOTIxOEJDOTk2QTUyNjkyMTYyQUFDMThCODk5RTEKKzoxMDI0MTAwMDlCQTE5NkEwOEJDNzg2Q0Q5QkEyMkI5MjE1OTZBNDlCQzEKKzoxMDI0MjAwMEEzODZDQjJDQ0MyMDI2QTYwNUMwMzQ2QkQ0MjAwRDNCMzQKKzoxMDI0MzAwMDBDMEREODA5MEU4ODBBN0ZCNzA1QzA5MDk5ODhCQzg4MTIKKzoxMDI0NDAwMEMwOTAwQjFBMTI2REFBMDY5OTg4OTk4QjI4OEMxOEMwMTcKKzoxMDI0NTAwMEQwMUJFOTdBMUNFOTc5MTZFOTZFQjFGRjJBMjExQzIzMDkKKzoxMDI0NjAwMEU2MTMwRjBGNEYyNkU2MTIyRjI1MUQ3RkE5MDZDMEYwOTkKKzoxMDI0NzAwMEMwODAyODI1MUQwNUY2MTExQUU5Njc4RjIwMkJFNjE1NjcKKzoxMDI0ODAwMDJDRTYxNjJERTYxNzI2RTYxODBBRkEwMjJBRTYxNDI5ODMKKzoxMDI0OTAwMDIwMDYyOTlDRjk2NDkwRjgyOTIwMEM4RDE0QzA4MDFBMUMKKzoxMDI0QTAwMEU5NEUwQzlDMTFBQTk5QTVDQ0RBMjAyQkMyODUyODk0NjAKKzoxMDI0QjAwMENGMEI0QjBCMkJDNjg1QzBCMDhDMTU1ODExQkJEMkEwQ0YKKzoxMDI0QzAwMEQxMEY4QTM1NkZBNTQ2RDgzMDhCRDU2REE5MEM4QTg2NzkKKzoxMDI0RDAwMDBBOEExNENCQTc3QUIzMzUyODhDMTBDMDgwMjgyNDY3QzkKKzoxMDI0RTAwMDA4MEI0NzY1QjEwQkRBMjBEQjMwMkMxMjA1NTgxMURFRTIKKzoxMDI0RjAwMEQzQTBDMEMxQzBEMDJEQTQwMzlDMTQ2M0ZEMjI4NjM2OTYKKzoxMDI1MDAwMDY0NjEwNTlCNzA5RDcxOTg3MkMwNEQ2M0ZFQTRDMDgxOEIKKzoxMDI1MTAwMDYzRkZDOTAwODgxNENDODdEQTIwREIzMDhDMTU1ODExOTIKKzoxMDI1MjAwMEQyQzAyMEQxMEZEQTIwQzBCNjU4MTI2MTYzRkZFNDAwOTgKKzoxMDI1MzAwMDAwREEyMDhCMTA1ODEyNUU2M0ZGRDgwMDlFMTc4QTEyQjMKKzoxMDI1NDAwMDJCMjEwNDU4MTBFRjhFMTdDMDkwMjkyNDY2NjNGRTM0QTcKKzoxMDI1NTAwMEMwODA2M0ZFMDZEQTIwREIzMDhDMTVERDUwNTgxMkU2QjEKKzoxMDI1NjAwMEQyQTBEMTBGREEyMDU4MTI1MjYzRkZBNzAwMkIyMTM4RDYKKzoxMDI1NzAwMEMwQTg3QkFCMDI2MDAxMDQ4QzMxMENGQzUwNjRDRTA0MUIKKzoxMDI1ODAwMDhBMTIyQjIxMDRDMEMwOTgxNzU4MTBERDhFMTc2M0ZERTYKKzoxMDI1OTAwMEYzMkQyMTM4MkREQ0ZGMEQwRDRGMkQyNTM4NjVERUY3OEQKKzoxMDI1QTAwMDI4MjA2QTdGODcwNTA4MjY0MTY0NjBBM0MwOTAxNkU5NDkKKzoxMDI1QjAwMDE0MUNFOTIzMkEyMDA3MjNFNjFCQjFBQTBDRkQwMjI2REUKKzoxMDI1QzAwMEU2MUEyQjIwMEEyOUU2MUQyREU2MUUwQ0JCMDIyQkU2N0YKKzoxMDI1RDAwMDFDOEIyNjBBMEE0NzJCRTYyMDhCMjgyQUU1M0UyQkU2OTEKKzoxMDI1RTAwMDIxMjkyNDA3MjgyMDA2MkEyMDY0Njg4MzQ2QjQ0NDYzRUUKKzoxMDI1RjAwMEZFQTVEQjMwREEyMDhDMTU4RDE0MkUwQTgwQzA4RTI4QzMKKzoxMDI2MDAwMDI0Njg1ODExMUZEMkEwRDEwRjJFN0M0ODE5RThFRDJBNUEKKzoxMDI2MTAwMDMyMTYyQjc2MTI5RDcxMkQ3NjEzMjg3NjE0ODk5NjBBMjAKKzoxMDI2MjAwMDJBMTRBQTk5MEM5OTAyOTk3MDY5RUQ3MUMxNDY2M0ZENEIKKzoxMDI2MzAwMDgxMDAwMDAwNjRBRkI1MURFOEUyMkMyMDE2OEREMjBBOUYKKzoxMDI2NDAwMENDMEMwMEQxMDQwMENDMUFBQ0JDOUMyOTYzRkY5RDAwQ0IKKzoxMDI2NTAwMDJCMjEwNDZFQjgxRTJDMjA2NkI4Q0MwQzBDNDcyQzI0MDEKKzoxMDI2NjAwMDY2QzlDMDlFMTc4QTEyNTgxMEE2OEUxN0MwMzQ4RjIwRDQKKzoxMDI2NzAwMEMwRDAyRDI0NjZDMDY4MjYyNDA2NjNGRjJFOEExMjJCNDQKKzoxMDI2ODAwMDIxMDQyQzIwNjY5ODE3QjFDQzBDMEM0NzJDMjQ2NjU4REEKKzoxMDI2OTAwMDEwOUM4RTE3ODcxNkMwRDAyRDI0NjY2M0ZDRTY4RDM1RkUKKzoxMDI2QTAwMEMwODA2NEQwNEFEOUUwREMzMERCRTBERjMwMUFFOEU1RjYKKzoxMDI2QjAwMEIxODhCNEZGMTZFOEU1ODRDOTJEOURGRjg3QzgyQ0NDRUUKKzoxMDI2QzAwMDEwMjdENjMwMDY0NjAxMjdENjMyMEE0NDAxMTdFOERGMjQKKzoxMDI2RDAwMDI0RDYzMUE3NDcyN0Q2MzMyNEYyMTU5NkI3OTRCNjhENjIKKzoxMDI2RTAwMEMzQkNCQjlEQjU4RDM1Mjk5QzEwN0Q4M0MyMkYyMTFEOTgKKzoxMDI2RjAwMEMxNDY2M0ZEMzMwMDAwMDA2QzEwMDYyOTIwMDYyODlDQUIKKzoxMDI3MDAwMEY4NjU4MkJGMjkyMTAyMkIyMDBDMDkwOTRDNjU5MEUxNTQKKzoxMDI3MTAwMDE2RThBQTBDQkExMUE2QUEyREEyODYyQzBBMTI3REMzMEQKKzoxMDI3MjAwMDAyNjAwMjhDMTlFOEE2MDlCOTBBMjk5MkEzNjg5MDA3RTkKKzoxMDI3MzAwMDhDMjAwOUNDMEM2NUMyNzgyOUEyODU2NDkyNzIyRDYyMjYKKzoxMDI3NDAwMDlFMUFFODlDNkZEODAyNjAwMjZFMkFBMjI2MjkxNjAxMDIKKzoxMDI3NTAwMDY4QTAwODJCMjIwMDBBQkIwQzY1QjI1QzI5NjI5REMxRUYKKzoxMDI3NjAwMDhDNjQ5MjU0MkEyMTIwMEE4MDYwOTkxMDJDMjAzQ0M3NDYKKzoxMDI3NzAwMEVGMDAwRjNFMDEwQjNFQjFCRDBGREIzOTBCQkIwOThGRTQKKzoxMDI3ODAwMDI2MERCRDExMkREQzFDMEQwRDQxMEVERDAzOEUyN0IxNzQKKzoxMDI3OTAwMEREMEQwRDQxMEZFRTBDMERCQjBCMkJCQzFDMEJCNzAyNUUKKzoxMDI3QTAwMDdFQzcxQzJDMjEyNTdCQ0IxNjJEMUFGQzBDQkEwQzBERDgKKzoxMDI3QjAwMEExNjAwMDA5M0UwMTA3M0VCMTc4MDk4NzM5MEI3NzBBMEQKKzoxMDI3QzAwMDc3RUIwMjYwMDIwQTJDMjEyMzI4MjEyMUIxQ0MwQzBDQ0EKKzoxMDI3RDAwMDRGMkMyNTIzN0M4QjI5QjBDRDJEMjUyM0M4NTVEQTIwRkQKKzoxMDI3RTAwMERCMzA1ODEwOTUyOTIxMDJDQzk2QzBFODBFOUUwMjJFQUYKKzoxMDI3RjAwMDI1MDJDQzU3REEyMERCMzBEQzQwNTgxMTFCQzAyMEQxMzkKKzoxMDI4MDAwMDBGMkMyMDY2ODkzMUIxQ0MwQzBDNDcyQzI0NjY2RUM2ODcKKzoxMDI4MTAwMDAyNjAwMUQzMDlGRDUwNjVEMUNEMkYwQTAxMkUzMDExODAKKzoxMDI4MjAwMDI5MjIxNDY0RTAxMTI4MjIxQjA5MEM0NDAwQzEwNDAwNzEKKzoxMDI4MzAwMEZBMUEwQTg4MDIyODI2MUIyRTMwMTBDMEEwQzBCMDk0QjUKKzoxMDI4NDAwMDEyOTUxMzFDRTg1Rjg4MzAyQ0MwMjIwODhEMTQ3Nzg3RkUKKzoxMDI4NTAwMDA0QzBGMTBDRkEzOEMwNDFDMEYyMjUyMDNDQzA4NDA4MDUKKzoxMDI4NjAwMDU4MDEwRjVGMDEwRjRCMzgwNTM1NDAwN0JCMTBDMEYwMTIKKzoxMDI4NzAwMDA4NEYzODA4RkYxMDBGQkIwMjI4RUNGRUMwRjAwODRGQ0QKKzoxMDI4ODAwMDM4ODQyQjBCQTgxMDBBRkYxMDJBMjEyMDBGODgwMjBCNzYKKzoxMDI4OTAwMDg4MDIwODQ0MDIxOEU4NkU4RjExMDg0NDAyMjgyMTI1OTYKKzoxMDI4QTAwMDBBMkExNDA4MjgxNDA0ODgxMTBBODgwMjJBMjEwNDk0ODgKKzoxMDI4QjAwMEYwOEIyMDA0RTQxMDA4QkIxMTA0QkIwMkMwNEEwNEJCMjcKKzoxMDI4QzAwMDAyOUJGMTg0MkEwOEFCMTEwQkVCMDI5NEY0MEE1NDExMTkKKzoxMDI4RDAwMDBCNDQwMjA1NTUxMDBEMUI0MDk0RjcwN0JCMTAwQjU1MTgKKzoxMDI4RTAwMDAyMDg1NTAyQzA4MTk1RjY4NDMzQzA1MDk0RjNCMTk0MjgKKzoxMDI4RjAwMDhCMzI5NUY4OThGOTlCRjJDMDgwQzFCQzI0MjYxNDk5QkMKKzoxMDI5MDAwMEZBOUJGNTk4RkI4NTM4OTVGQzg0M0E5NEZEOEIzQjlCQUMKKzoxMDI5MTAwMEZFODgzOTk4RkY4NTM1MjVGNjEwODQzNjg1MTMyNEY2MTAKKzoxMDI5MjAwMDExOEIzNzg0MTIyQkY2MTJDMEIwNjRDMDdFODkzMDc3QzkKKzoxMDI5MzAwMDk3NDM4RDMyODgzMzJFMzAxMDhGMTExQ0U4MzEwOTk5NUUKKzoxMDI5NDAwMDQwMDY5OTExMkNGNjE0QzBDNDJDRjYxNThDMkIyREY2Q0MKKzoxMDI5NTAwMDFBMjhGNjFCMkJGNjE5MDRBODExMDk4ODAyMDhFRTAyQTIKKzoxMDI5NjAwMDE5RTgyN0MxODAwOEVFMDIwOUM5MDIyOUY2MTYyRUY2RDkKKzoxMDI5NzAwMDE4QzA5RTYwMDAwMUMwOUEyRjIwMEMxOEU4MTcwQ0ZFQUEKKzoxMDI5ODAwMDExQThGRkE2RUUyREUyODUyQkY0Q0YwRDlEMEIyREU2QjEKKzoxMDI5OTAwMDg1Qzg3RjhBMjY4OTI5QTdBQTlBMjYwQTk5MEMwOTA5MzcKKzoxMDI5QTAwMDQ4MjkyNTI1NjU1MDUwQzAyMEQxMEYwMEMwOUE2M0ZGRUIKKzoxMDI5QjAwMEM2REEyMDU4MTEzRjYzRkUzOERBMjBDMEI2NTgxMTNDMDEKKzoxMDI5QzAwMDYzRkUyRTAwNjg5NzNDMkI5Q0ZENjRCRTI0QzAyMEQxODIKKzoxMDI5RDAwMDBGREEyMERCNzA1ODEwRjhDMEMwQzBEMTBBREEzOTBBMEIKKzoxMDI5RTAwMERDMzg2NUNERTA2M0ZFMDk4QTEwMkIyMTA0NTgwRkM0NDIKKzoxMDI5RjAwMEMwQjAyQjI0NjY2M0ZFMjFEQjQwMkEyQzc0NTgwOUEyNDgKKzoxMDJBMDAwMEQyQTBEMTBGREEyMDU4MEZDOTYzRkNGNzZDMTAwNEMwQjQKKzoxMDJBMTAwMDIwRDEwRjAwNkMxMDA0MjkwQTgwMUVFODBFMUZFODBFNUEKKzoxMDJBMjAwMDFDRTdFNjBDMkIxMUFDQkIyQzJDRkMyREIyODUwRkNDN0IKKzoxMDJBMzAwMDAyOUVEMTlDRDBDMDUxQzA3MDEzRTgwQTE0RTgwOTE4NTYKKzoxMDJBNDAwMEU4MDcyQUIyODVBODI4MDQyNDBBMjM0NjkxQTk4NkI4NTMKKzoxMDJBNTAwMEFBMkFCNjg1QTk4ODI3ODQ5RjI1NjQ5RkQxMEYwMDAwRTQKKzoxMDJBNjAwMDZDMTAwQUQ2MzAyODMwMTAyOTIwMDYyODhDRjk2NDgyOTAKKzoxMDJBNzAwMDlCNjg5ODBCMkE5Q0Y5NjVBMUIyMDIyQTAyNTgwRkFCRjkKKzoxMDJBODAwMDg5MzcxQkU3Q0ZDODkxNjQ1MjBFMkEyMTAyMEEwQzRDRTkKKzoxMDJBOTAwMDY1QzI1ODhEMzAxOUU3Qzg3NEQ3MDUyRTIxMjM2NUUyMjkKKzoxMDJBQTAwMDlFMkY5MjlFMUFFN0M0NkZGODAyNjAwMjUzMkFBMjI2NTQKKzoxMDJBQjAwMDY4QTAwODJDMjIwMDBBQ0MwQzY1QzI0NDJBOTI5RDY0QUUKKzoxMDJBQzAwMEEyM0U5QTE1MUZFN0JFOEQ2N0MxRTZDOEREMkI2MjA2RTAKKzoxMDJBRDAwMDE4RTdCQzY0QjAwNTI4ODAyMTdCOEI0MzJCMjAwQzE4QTEKKzoxMDJBRTAwMEU3QjYwQ0JDMTFBOENDMjlDMjg2NzlFQjQ2MEZCRTBBMEEKKzoxMDJBRjAwMDJFRTJBMzY4RTAwNTJGMjIwMDdFRjkzNzJDQzI4NTlDQzgKKzoxMDJCMDAwMDE4NjRDMjMzMkIyMTJGODc2NjBCN0IzNjBCNzkwQzZGMzEKKzoxMDJCMTAwMDlEMjY2RUQyNDYyQzIwM0Q3QkM3NDBDRTU1NjAwMDFFQzAKKzoxMDJCMjAwMDJBMjAwQ0MxQjI4QzIwNTgxMTIyOUExODY0QTI0NThEMUIKKzoxMDJCMzAwMDY3NjNGRkNGQzBDMDYzRkZDNUQ3QjA2M0ZGRDMwMEMwREEKKzoxMDJCNDAwMEUwNjAwMDAyMkU2MDAzMEVEQjBDNkVCMjBFREM3MDBDMzcKKzoxMDJCNTAwMEVBMTFBQTZBMkFBQzIwNTgwMTk5RDdBMERBMjBEQjcwQzIKKzoxMDJCNjAwMEMxQzgyRDIxMjA1ODEwQkM4QzI2OEIyNzlBMTYwQ0JCNkYKKzoxMDJCNzAwMDBDN0FCMzM0OEYxODg5NjM5OUYzODg2Mjk4RjI4RTY1NjIKKzoxMDJCODAwMDlFRjgyRDYwMTA4QTE4OUQxNzY4RDcyOUMwRDA5REE5N0UKKzoxMDJCOTAwMDJDMjIxODJCMjIxMzlDQUI5QkFBOTdBNThFNjY3RTczQzIKKzoxMDJCQTAwMDAyNjAwMDk3Q0Y1ODYwMDAxRkRBMjA4QjE2NTgxMDgyMDEKKzoxMDJCQjAwMDY1QTEzODYzRkZCREMwODFDMDkwOEYxOEMwQTI5QUY5OEIKKzoxMDJCQzAwMDk5RkI5OEZBOTdGNTYzRkZEMkRCMzBEQTIwREM0MDU4QTYKKzoxMDJCRDAwMDEwMjZDMDUxRDZBMEMwQzAyQkEwMTAyQ0E0MDM5QjE3NTgKKzoxMDJCRTAwMDJDMTIwODAyMkEwMjA2NkIwMkRGNzAyRDYwMDM4RTE3N0EKKzoxMDJCRjAwMDlEMTQ5RTEwMENERDExQzBFMEFENkQyRERDMjA1ODAxNDAKKzoxMDJDMDAwMDE4OEMxNDhCMTZBQ0FDMkM2NDAzOEEyNjg5MjlBQkFBQzkKKzoxMDJDMTAwMDBBOTkwQzlBMjY4ODY2MDkwOTQ4MjkyNTI1MDc4ODBDRUYKKzoxMDJDMjAwMDk4NjYyRjIyMThBN0ZGMkYyNjE4NjNGRTk2REEyMERCNUUKKzoxMDJDMzAwMDMwREM0MERENTA1ODExMzBEMkEwRDEwRkMwMzAyQzIwRjQKKzoxMDJDNDAwMDY2ODk2MUIxQ0MwQzBDNDcyQzI0NjY2RUM2MDI2MDAwMEMKKzoxMDJDNTAwMEQyQzAzMDA5RkQ1MDY1RDBDQThFNjc2NEUwNjk2NDcwRTcKKzoxMDJDNjAwMDY2REI2MDhDMThERjcwREEyMDJENjAwMzhFMTcwQ0REQjgKKzoxMDJDNzAwMDExOUUxMEFENkQyRERDMjAxRUU3NzU1ODAwRjkyMzI2M0UKKzoxMDJDODAwMDE4REEyMDhCMTZEQzQwMkYyMjEzREQ1MEIxRkYyRjI2REYKKzoxMDJDOTAwMDEzNTgwRkM1RDJBMEQxMEYwMDI4MjAzRDA4NDg0MDY1MjkKKzoxMDJDQTAwMDhERTc2Rjk1M0VEQTMwOERCNTZEOTkwQzhDQTgwQzhDNDQKKzoxMDJDQjAwMDE0Q0FDRjdDRDMyRDJBQUMxMEMwOTAyOTI0NjcwOTBERUIKKzoxMDJDQzAwMDQ3NjREREM1NjAwMDkyMDAyQzEyMDgwNjZCMDIyRDZDNzMKKzoxMDJDRDAwMDIwMDc3RjAyOEUxN0RBMjA5RTEwMUVFNzVDNTgwMDdEQzkKKzoxMDJDRTAwMDYzRkY5QTAwQzA5MTYzRkZEMTAwMDAwMDY1NTA4MURBNTQKKzoxMDJDRjAwMDIwREI2MERDNDA1ODBGRENDMDIwQzBGMDJGQTQwM0QxRTMKKzoxMDJEMDAwMDBGREEyMEMwQjY1ODEwNkE2M0ZGRTAwMDAwNkY5NTAyMkEKKzoxMDJEMTAwMDYzRkQ2Q0RBMjBEQjMwREM0MERENTBDNEUwNTgwRjU4MzYKKzoxMDJEMjAwMEQyQTBEMTBGOEExNTJCMjEwNDU4MEVGNTIzMjQ2NjI4MzIKKzoxMDJEMzAwMDYwMTA5ODE3NjNGRjIxMDBEQTIwNTgxMDVENjNGRkFCMjUKKzoxMDJENDAwMEM4NThEQjMwREEyMDU4MEYzQzJBMjEwMjY1QUY5Q0MwRkUKKzoxMDJENTAwMDk0MDlBOTAyMjkyNTAyNjNGRjkxREIzMERDNDBERDUwOTQKKzoxMDJENjAwMEMwQTMyRTBBODAyQTI0NjhEQTIwNTgwRjQ1RDJBMEQxQTkKKzoxMDJENzAwMDBGQzAyMEQxMEZEQTIwMkIyMDBDNTgxMDcyNjNGRjZCOEMKKzoxMDJEODAwMDZDMTAwNDI4MjAwNkMwNjIyODhDRjg2NTgxMjVDMDUwOEMKKzoxMDJEOTAwMEM3REYyQjIyMUJDMEUxMkEyMDZCMjkyMTIzMDBBMTA0QkQKKzoxMDJEQTAwMEIwOTkyOTI1MjNCMUFBMDBFQzFBMEJDNDAxMEEwQTQ0RTAKKzoxMDJEQjAwMDJBMjQ2QjA0RTQzOTBEQ0MwMzBDQkIwMTJCMjYxQjY0QzUKKzoxMDJEQzAwMDQwNjkyOTIwMEMxQkU2RkMwQzlBMTEwQkFBMDgyRkEyQzMKKzoxMDJERDAwMDg2MUJFNkZBNkZGOTAyNjAwMEI2MEI5QjBBMkJCMkEzQzIKKzoxMDJERTAwMDY4QjAwODJDMjIwMDBCQ0MwQzY1QzBBNDJCQTI4NTFENUEKKzoxMDJERjAwMEU3MUU2NEIwOUI4QzJCMjQyMTA0MERDQzAyOUNCMDg4NzAKKzoxMDJFMDAwMDIwQzBDNTA4ODgxMTBDODgwMjk4QjE4ODJBMDg0NDExOEUKKzoxMDJFMTAwMDk4QjQ4RjM0OTRCNzlGQjVDMDQwMUVFNkVGMkRBMjg1QkQKKzoxMDJFMjAwMDBFOUUwODI1RTRDRjJEREMyODJEQTY4NTI5MjEwMjA5MzgKKzoxMDJFMzAwMDA5NEM2ODk0MUE2ODk4MjBDOTQwMkEyMTAyNjVBMDBCQTEKKzoxMDJFNDAwMDJBMjIxRTJCMjIxRDdBQjEwMjY1QTA3OUMwMjBEMTBGNDMKKzoxMDJFNTAwMDJDMjEyMzY1Q0ZERTYwMDAwODJFMjEyMTJEMjEyMzdFMjkKKzoxMDJFNjAwMERCRDUyQjIyMUUyRjIyMUQyNTI1MDI3QkY5MDFDMEIwQTgKKzoxMDJFNzAwMDY0QkZDNDEzRTZEMDJDQjAwNzI4QjAwMERBMjAwMzg4NjIKKzoxMDJFODAwMDBBMjg4MjRDQzBEMTBCODAwMERCQTA2NUFGRTc2M0ZGNEUKKzoxMDJFOTAwMEE2MkEyQzc0QzBCMDJDMEEwMjU4MEUyRjFDRTZGNDlDRjMKKzoxMDJFQTAwMEEwOEIyMDA4QkIxMTA2QkIwMjlCQTE4OTM0OTlBMjYzQTkKKzoxMDJFQjAwMEZGNzkwMDAwMjYyNDY4REEyMERCMzBEQzQwREQ1MDU4NDIKKzoxMDJFQzAwMDEwOEVEMkEwRDEwRkRBMjAyQjIwMEM1ODBGRjlDMDIwODEKKzoxMDJFRDAwMEQxMEYwMDAwNkMxMDA2MDczRDE0QzA4MERDMzBEQjQwRDEKKzoxMDJFRTAwMERBMjBDMDQ3QzAyMTIzQkMzMDAzMjgzODA4MDg0Mjc3QzUKKzoxMDJFRjAwMDQwMDFCMURENjQ4MTVBMUVFNkFDMTlFNkFEMjlFNjdFREIKKzoxMDJGMDAwMEQzMEY2RERBMDUwMDUwODgwMDMwOENDMEUwQzAyMDI1NUEKKzoxMDJGMTAwMEEwM0MxNEU2QUJCNkQzOEZDMEMwRDAwRjg3MTQyNDQwQkEKKzoxMDJGMjAwMDIyMEY4OTQwOTQxMDc3RjcwNEMwODEwNDgyMzhDMEYxRTEKKzoxMDJGMzAwMDBCMjgxMEMwNDRDMDIyMDQ1NDAxMDRGRDM4MDI1MjAxODEKKzoxMDJGNDAwMDAyRkUzODA4REQxMDgyMUMwN0VFMTAwRTZFMDIwRURENDgKKzoxMDJGNTAwMDAyMjQyQ0ZFQzBFMDA0RkUzODBBRUUxMDBFODgwMjBEOUEKKzoxMDJGNjAwMDg4MDI4REFCMUVFNjlCMDhEODAyMEU4ODAyOThCMEMwN0UKKzoxMDJGNzAwMEU4MDQyODEwMEU1RTAxODRBMDI1QTEyNTA4NDQxMTA4NEMKKzoxMDJGODAwMDQ0MDIwNTI1MTQwNDU1MTEwNDM0MDJDMDgxMEU4RTM5MDMKKzoxMDJGOTAwMDk0QjE4RkFBODQxMDlGQjQ3NTY2MEMyNkExMUZDMEYyNEQKKzoxMDJGQTAwMDA2MjYxNDYwMDAwOTAwMDAyNkExMjBDMEYyMDYyNjE0OUYKKzoxMDJGQjAwMDA1NjUwMjBGNzcwMTA3ODczOTA1RTYxMDA3NzgxMDA4QzUKKzoxMDJGQzAwMDY2MDIwNjU1MDI5NUI2MjVBMTA0MEFFNjExMDg1ODExQjUKKzoxMDJGRDAwMDA4MjgwMjA4NjYwMjk2QjdDMDYwNjQ0MDU2NjQ5MDUzQTEKKzoxMDJGRTAwMDA2N0UxMUMwRjQ4OUMyODhDMzBCMzQwQjk2NDU5ODQ3RkUKKzoxMDJGRjAwMDk5NDYxOEU2ODI5RjQxMDQ1OTExMEU5OTAyMUZFNjgwRjYKKzoxMDMwMDAwMDAyMEU0NzA4RDgwMjk4NDIwRTk5MDI5RjQwQzFFMDBFNzYKKzoxMDMwMTAwMDk5MDI5OTQ0MkZBMDBDQjQzODBDRjkxMTE0RTY2RjFFRDQKKzoxMDMwMjAwMEU2NjZBNEZGQUU5OTJFOTI4NTI2RjRDRjBFODgwQjI4NzMKKzoxMDMwMzAwMDk2ODVEMTBGMkJBMDBDMUZFNjYwMUNFNjY3MENCRTExMTUKKzoxMDMwNDAwMEFDQkJBRkVFMkRFMjg1MjZCNENGMEQzRDBCMkRFNjg1NTIKKzoxMDMwNTAwMEQxMEZDMDgwMDUyODM4Nzg0ODAyNjNGRUEyNjNGRTk2MkYKKzoxMDMwNjAwMDZDMTAwNkMwQzA2NTcwRjE4ODMwQzAzMDA4ODcxNDc3RDYKKzoxMDMwNzAwMDg3MTJDMEIwQzBBNjE5RTY1MjI5OTAyMkMwMzBDQzk3NjIKKzoxMDMwODAwMEMwMzE2MDAwMDNDMEIwQzBBNkMwRTBDMDkxQzBENEMwRDEKKzoxMDMwOTAwMDgyMjUyMDNDMEIzRjEwOTcxMjgzMUNDMDcwMDg1ODAxRkEKKzoxMDMwQTAwMDBENUQwMTA4OTczOEMwODAwQjk4MzgwNzc3MTAwNDg4QTkKKzoxMDMwQjAwMDEwMDg2ODAyMDg3NzAyQzA4MDBEOTgzODJEM0NGRTA4ODEKKzoxMDMwQzAwMDg4MTAwRDlFMzg4RDJCMEFFRTEwMDhFRTAyMDdFRTAyRDYKKzoxMDMwRDAwMDBDQjgxMDBGREQwMjA1M0I0MDBFREQwMjlENDA4OTIwM0IKKzoxMDMwRTAwMDA0M0QxMDA4OTkxMTBEOTkwMjJEMjEwNDA5QTkwMjA4MjcKKzoxMDMwRjAwMEREMTE5OTQxODcyQTA1QjkxMDBEM0QwMjBBQkIxMTBENUEKKzoxMDMxMDAwMEJCMDIwODc3MDI5NzQ0MjgyMTI1ODcxMjA4MjgxNDA0NTcKKzoxMDMxMTAwMDg4MTEwNzFFNDAwN0VFMTAwRTk5MDI3NTY2MDkyNjIxRDgKKzoxMDMxMjAwMDFGMDYyNjE0NjAwMDA2MDAyNjIxMjAwNjI2MTQwODY4QzMKKzoxMDMxMzAwMDAyOUI0NzA5ODgwMjk4NDYyOTIwMENEMkMwQzA4MDBDMDcKKzoxMDMxNDAwMDlFMTExQkU2MjUxRkU2MUNBQjk5QUZFRTJERTI4NTI4RUMKKzoxMDMxNTAwMDk0Q0YwREFEMEIyREU2ODVEMTBGREQ0MEMwQTZDMEIwREMKKzoxMDMxNjAwMDhFNTFDQUUwQjJBQUIxQkIyRERDMTA4RjUwMEU3ODM2NUEKKzoxMDMxNzAwMDk4MTAwODc3MEM5RkQ4OThEOTg5NTM4RjUyOTkxMTk5MzQKKzoxMDMxODAwMERCOUZEQTdFODMwOUIxQ0MyNTVDMTBDOTc3NjNGRkNGNjIKKzoxMDMxOTAwMDg4MTA4RDExMDhFNzBDOTc1MUFEOEREN0YwNzhEQjAxQzEKKzoxMDMxQTAwMEIxRjc5RDUzOTc1Mjg4MzBDMDMwMDg4NzE0MDg4ODQwODMKKzoxMDMxQjAwMDY0OEVENTY1QkVDOTYzRkVCQzAwMDAwMDZDMTAwNEQ3RTgKKzoxMDMxQzAwMDIwQjAzQTg4MjBDMDMwODIyMUNBQTA3NDJCMUUyOTcyRjgKKzoxMDMxRDAwMDA0NkQwODBGQzk4MEM5OTE4NTc1QjEzM0EyNTI3QTNCM0QKKzoxMDMxRTAwMDBCNzQyQjA4NjNGRkU5MDA2NDlGRUNEMTBGRDI0MEQxMzAKKzoxMDMxRjAwMDBGMDAwMDAwNkMxMDBBRDYzMDJFMzAyN0Q5NTBEQTQwNkMKKzoxMDMyMDAwMDE1RTVGMDI0MzAyNjlBMTUyOTE2MDQ2NEUwMDI2NDkzMkIKKzoxMDMyMTAwMDczMjkyMDA2MkE5Q0Y4NjVBM0NFMkEyMTAyMjcwQTA0RDYKKzoxMDMyMjAwMDBBMEI0QzY1QjM5NzhDMzA3NEM3MDUyRDIxMjM2NUQ0RTgKKzoxMDMyMzAwMEEwQzBBNjJCMEEwMzJDMjIwMDU4MEYzNjY0QTNCOTE3OEUKKzoxMDMyNDAwMEU1REU4RTM4OUExNjY0RTNCQTJGNjAyNzI4NTAyMUM5MkMKKzoxMDMyNTAwMEYzN0U4MzExQzJCMDhDMjAyQTIwMEM1ODBGNTVEN0EwQzIKKzoxMDMyNjAwMENEQTE2MDA0QTIwMEMyQjA4QzIwMkEyMDBDNTgwRjI5RTYKKzoxMDMyNzAwMEQ3QTA2NEE0ODYyRjIxMkU4QjY4MEZCRjM2MEZCOTBDMDAKKzoxMDMyODAwMDZGOUQ1NDI5NjAyN0Q1QjA2RTkyMDUyODIwM0Q3QjhGMTUKKzoxMDMyOTAwMDRDREEyMERCNTBDMUM0MkQyMTFGNTgwRUVGOEIyNjlBMkIKKzoxMDMyQTAwMDE4OUExOTg5MjcyQUFDMzgwQjk5MEM3QTkzNTM4OTYzOTkKKzoxMDMyQjAwMEMwODA5OTczOEY2Mjk4Nzg5RjcyOEU2NTlFNzk4RDY3QjIKKzoxMDMyQzAwMDlEN0I4QzY2OTU3NTlDN0E4RTY4N0U1MzAyNjAwMEIxRkEKKzoxMDMyRDAwMDhCMTQ2NUIwNTA2MDAwMzhEQkYwNjNGRkE1MDA4QTE0RTIKKzoxMDMyRTAwMEM5QTkyRTYwMDMwRTlCMEM2RUIyQTVEQzUwMENFQTExMkUKKzoxMDMyRjAwMEFBNkEyQUFDMjg1QkZGQjFENUEwNjNGRjkzQzBFMDYzNDQKKzoxMDMzMDAwMEZGRTJEQTIwOEIxODU4MEVBQzY1QTJCMTYzRkY5RTAwNzUKKzoxMDMzMTAwMDAwREEyMERCMzA4QzE1NTgwRTU0RDZBMEMwQzBDMEQxQzYKKzoxMDMzMjAwMDJEMTYwNDJDQTQwM0RDNzBEQTIwREI2MERGNTAyRDYwNDYKKzoxMDMzMzAwMDAzQzBFMDlFMTA5RDE3MUVFNUI5MENERDExMEQ2RDA4NTAKKzoxMDMzNDAwMDJEREMyODVCRkY0NzhFNjY4RjY3ODgxN0FGNUZBOEE4QzQKKzoxMDMzNTAwMDI4NjQwMzc1RkIwMUIxRUU4QTE4OUU2NjlGNjc4OTI2NzMKKzoxMDMzNjAwMDg4MjlBQTk5MDk4ODBDOTkyNjhFNjgwODA4NDgwNUVFQ0MKKzoxMDMzNzAwMDBDMjgyNTI1MTVFNTkzOUU2ODY1RUVDQzYzRkVFNjAwRDYKKzoxMDMzODAwMDAwMDBDOTQzMkYyMTIzMkIyMTIxMkZGQzAxMEYwRjRGQjgKKzoxMDMzOTAwMDJGMjUyMzdGQkIwMjYwMDMxNDJDMjA2Njg5NjFCMUNDRUEKKzoxMDMzQTAwMDBDMEM0NzJDMjQ2NjZFQzYwMjYwMDIyODA5RkQ1MDY1OEQKKzoxMDMzQjAwMEQyMjI2NEUxQjYyRTYwMjc2NEUxQjBEQzcwREY1MERBMUYKKzoxMDMzQzAwMDIwREI2MDFFRTVBQjJENjAwM0MwODA5ODEwMENERDExODIKKzoxMDMzRDAwMEFENkQyRERDMjg1QkZGMjI2NDQxODFDMDQ0MkIwQTAwQzcKKzoxMDMzRTAwMDhDMjAyQTIwMEM1ODBFQ0IwQUE3MDI2NUEwMEZDMEIwNzMKKzoxMDMzRjAwMDJDMjIwMDJBMjAwQzU4MEVDN0Q3QTA2NEFGRUZEQTIwODkKKzoxMDM0MDAwMEMxQkNDMUM4MkQyMTIwOEYxODhFMjY4OTI5QUZFRTlFMDAKKzoxMDM0MTAwMDI2MEU5OTBDMDkwOTQ4MjkyNTI1NTgwRThGQzA5MEMwMDEKKzoxMDM0MjAwMDUwQzBDMjg4NjA5QTE5MUVFNTY2QzBBMTJFRTAyMjA4MkQKKzoxMDM0MzAwMDhGMTQ3Nzg3MDRDMDgxMEU4OTM4QzA4MDBCOTMxMDJEQkMKKzoxMDM0NDAwMDIwM0MyOTIxMjAwQ0RDMDEwNERCMDEwOTI5MTQwQkE4RjQKKzoxMDM0NTAwMDM4MENBNTM4MEQzRDQwMUNFNTdFOEIyQjA4ODgxMDA3RTUKKzoxMDM0NjAwMDU1MTAwODU1MDIwNTMzMDIyODIxMjUwRjE1NDAwM0JCQ0UKKzoxMDM0NzAwMDAyMENCQjAyMDc1NTEwMDVEMzEwMDgyODE0MEFERDExRjEKKzoxMDM0ODAwMDA0ODgxMTA5ODgwMjA1MzMwMjI5MjEwNDA4MzMwMjlCQUMKKzoxMDM0OTAwMDcwQzA4MDhBMjAxQkU1NzcwOEFBMTEwQkFBMDI5QTcxRDYKKzoxMDM0QTAwMEMwQTE4NTJBOTM3Njk1NzQwODkzMTEwM0REMDIwQUREODUKKzoxMDM0QjAwMDAyOUQ3NzhDNjNDMURDOUM3MzhCNjI5ODc4OUE3OTlCQjAKKzoxMDM0QzAwMDcyMjMyMjE0QzBDMEIxMzUyNTI2MTQ5QzdCOUQ3NTkzQjAKKzoxMDM0RDAwMDdBMkI2MjFBOUI3QzJBNjIxQzlBN0QyODYyMUQ5ODdFMzgKKzoxMDM0RTAwMDI1NjIxQjk1N0YyMzYyMTcyMzc2MTAyRDYyMTgyRDc2OTcKKzoxMDM0RjAwMDExMkM2MjE5MkM3NjEyNjRFMEI5OEU2MDc3RTczREMwMUEKKzoxMDM1MDAwMEZFMTNFNTNFMURFNTNGQzE4MThBNjI4QjYzMDQ5NTExODAKKzoxMDM1MTAwMDBFOUM0MDA2Q0MxMTBDNTUwMjI0NzYxNTA4NTUwMkMwQUQKKzoxMDM1MjAwMDgwMkQ3NjE0OEQyQjJCNzYxQjJBNzYxQTI4NzYxOTI1NUEKKzoxMDM1MzAwMDc2MTgwM0REMDIyRDc2MTY2MDAwMDMwMDAwQzBGQTJFMTcKKzoxMDM1NDAwMDIwMEMxOUU1MjUxOEU1MUNBOUU5MENFRTExQThFRUMwMjAKKzoxMDM1NTAwMDgwMkRFMjg1Mjg5NENGMERGRDBCMkRFNjg1REEyMDhCOUEKKzoxMDM1NjAwMDE5OEMxNThEMTQ1ODBEOTBEMkEwRDEwRkRDNzBERjUwM0UKKzoxMDM1NzAwMERCNjAyRDZDMjhDMEEwMUVFNTNFOUExMERBMjA1QkZFQjEKKzoxMDM1ODAwMDU1NjNGRTUzMDAyQjIwM0QwQjRCNDA2NUJDODI2RkU1MUQKKzoxMDM1OTAwMDI3REEzMDhGNTU2REU5MEM4RUFBMEU4RTE0QzlFODdFOUQKKzoxMDM1QTAwMEYzMTYyQUFDMTBDMDkwMjkyNDY3MDkwRjQ3NjRGQzYwMDkKKzoxMDM1QjAwMDYwMDE1RjAwQzBGQTYzRkY4NUMwOTE2M0ZGRTg4ODE0NzMKKzoxMDM1QzAwMDY1ODE2OERBMjBEQjYwOEMxNTU4MERBN0MwMjBDMDkwOUIKKzoxMDM1RDAwMDI5QTQwM0QxMEY4QTE2MkIyMTA0NTgwQ0M5QzBBMDJBOTQKKzoxMDM1RTAwMDI0NjY4RTY4NjNGRENBMDAwMDJCOUNGOTY1QjBGRERBODUKKzoxMDM1RjAwMDIwNTgwQ0NFNjNGQzIyMDAwMERBMjBDMEI2NTgwRTJDRjYKKzoxMDM2MDAwMDYzRkZCQTAwMkIyMDBDMENCRTExQTdFRTJERTI4NkMxODEKKzoxMDM2MTAwMEMyN0RDMzAyNjAwMTE4MTlFNEU5MDlCOTBBMjk5MkEzMUQKKzoxMDM2MjAwMDY4OTAwODJBMjIwMDA5QUEwQzY1QTEwMzI2RTI4NTY0OTUKKzoxMDM2MzAwMDYwRkQyQzIwNjY4OTMxQjFDQzBDMEM0NzJDMjQ2NjZGQzAKKzoxMDM2NDAwMEM2MDI3MDk2MEM4QTE2MkIyMTA0NTgwQ0FEQzBEMDJERTIKKzoxMDM2NTAwMDI0NjY4RTMwNzdFNzREMUNFNEU5MUJFNEU5OEYzMjg4NUQKKzoxMDM2NjAwMDMzQzBBNDJEMjEwNDBFOTk0MDA2OTkxMTA0REQxMTA5REYKKzoxMDM2NzAwMEREMDI5QTYxQzE5MDA5REQwMjlCNjBDMDkwOEIyQjlEOTkKKzoxMDM2ODAwMDY0OUY2Njk4Njc5OTY1MENCQjAyOUI2MjI4MjAwQzFBQTAKKzoxMDM2OTAwMEU0RDJBQThBMEM4ODExQTc4ODJGODI4NTI5QTRDRjJGNkIKKzoxMDM2QTAwMEZDMjAyRjg2ODU4QTE0NjVBMEE2QzAyMEQxMEZCMEZDMEYKKzoxMDM2QjAwMDhCMTQyQzI1MjNDOEI3MDIyQTAyMDY2QjAyNTgwQ0RFOTUKKzoxMDM2QzAwMDJBMjEwMjY1QUVGN0MwRDgwREFEMDIyRDI1MDI2M0ZFOUEKKzoxMDM2RDAwMEVDMDA4RTE0QzhFOERBMjBEQjMwNTgwQ0Q3MkEyMTAyMUYKKzoxMDM2RTAwMDY1QUVEQTA3QUYwMjJGMjUwMjYzRkVEMTAwREEyMERCRDgKKzoxMDM2RjAwMDMwOEMxNThEMTQ1ODBFODBEMkEwRDEwRkRBMjAyQjIwREIKKzoxMDM3MDAwMDBDNTgwREVCNjNGRUI2MDBEQTIwMkIyMDBDNTgwRTBEODIKKzoxMDM3MTAwMDYzRkVBQURBMjBEQjMwOEMxNTJEMTIwNDJFMEE4MDI4RDUKKzoxMDM3MjAwMDBBMDAyODI0Njg1ODBDRDY2M0ZBRTUwMEMwMjBEMTBGOUYKKzoxMDM3MzAwMERBMjA1ODBEREY4OTE0Q0Q5MkRBMjBEQjMwOEMxNTU4NTEKKzoxMDM3NDAwMDBENEFEQkEwQzAyMEMwQTAyQUI0MDNEMTBGQzAyMEQxRjUKKzoxMDM3NTAwMDBGMkEyQzc0OEIxNTU4MDY0Q0QyQTBEMTBGMDAwMDAwRjQKKzoxMDM3NjAwMDZDMTAwRTI4MjEwMjI0MTYwMTA4MDg0QzY1ODNBOTFGM0QKKzoxMDM3NzAwMEU0OTIyOUYyOUU2Rjk4MDI2MDAzQUQxRUU0OEUyOUUyNjYKKzoxMDM3ODAwMDI2Njg5MDA4MkEyMjAwMDlBQTBDNjVBMzlCMjRGMjlEQjIKKzoxMDM3OTAwMDY0NDM5NTJBMzExNjBBNEI0MTJCMjQwQkI0QkIwQjBCMDcKKzoxMDM3QTAwMDQ3MkIyNDBDMENCNjExQUY2NjI4NjI4NkMxQ0M3OEMzQjcKKzoxMDM3QjAwMDAyNjAwMzdGMTlFNDgyMDlCOTBBMjk5MkEzNjg5MDA3N0QKKzoxMDM3QzAwMDhDMjAwOUNDMEM2NUMzNkIyNzYyODU2NDczNjUyOTMxMzUKKzoxMDM3RDAwMDA5QzBEMDJEMjQ2NjhDMzU5OTEzOUMyQTg4MzY5QzE0RjgKKzoxMDM3RTAwMDk4MkI4RTM3OTgxNTlFMTY5RTJDOEMzOEMwRTEwQzVDNTkKKzoxMDM3RjAwMDE0OUMxNzlDMkQ4ODM5MjkyNTA0MkUyNTFEMjgyNTFDNEQKKzoxMDM4MDAwMDJDMzAyOEMwODIyQzI0M0MyOTMwMjkwQzBDNDcwOEM4QjUKKzoxMDM4MTAwMDAxMjkyNDNEMjkzMTE1OTgxODk5MTIwOTA4NDEwODk5NjAKKzoxMDM4MjAwMDBDMjk5Q0VDMjkyNTFGN0VDNzI1OTIxQzgyMTIyODJBNzAKKzoxMDM4MzAwMDAwMDgyMDYwOTkxQjAxMDIzRTAwMDkzRUIxMjgwOTgyNjAKKzoxMDM4NDAwMDM5ODkxQjBFMjIxMTAyOTkwQzgyMUMyOTI1MUY4MjFDMEEKKzoxMDM4NTAwMDk0MUQ5NTFFMjQyMTFGMTVFNDg4MDQ1MTYwOUExMEMxRkYKKzoxMDM4NjAwMDgwMkIxNjEwMjUyMDE0OTYxRjA1MDU0MzAxMDYzRTAwRTcKKzoxMDM4NzAwMDBEM0VCMTZCMERCNjM5OEIzQzJEOUNGQzA4NjYzNjA2QUYKKzoxMDM4ODAwMDQ0MUM4OTNEMkUyNjEzMkUyNjE0MkUyNjE1MkUyNDZCMUQKKzoxMDM4OTAwMDI1MjQxNDA2RDYxQ0MwNTAyNTI2MTgyNTI2MUIyNTI0QjEKKzoxMDM4QTAwMDY3MjUyNDY4MjgzMjExMjUyNTIzMjUyNTI0MjUyNTI1NEIKKzoxMDM4QjAwMDI1MjUyQzI5MjUyMjJEMjUyMDJCMjUyMTI0MjUyRTI2QTIKKzoxMDM4QzAwMDI1MkYxNEU0NkYxNkU0NkQxQkU0NTI5ODE5MkQyMTFDNkEKKzoxMDM4RDAwMEMwODQ5ODcxOUI3MDg5MjA5NTc1OTU3Nzk1N0Y5NjdDQUIKKzoxMDM4RTAwMDk2N0U5ODc5OUI3ODk0NzMxQkU0NjcxNEU0NjgwQzM4OEYKKzoxMDM4RjAwMDQwMDI4ODEwMEMwNjQwMTVFNDY0MDE2NjEwOTQ3RDlCMUMKKzoxMDM5MDAwMDc0ODQxRDFCRTQ0NDA4NjYwMjk1N0IxOEU0MzE4NTFFMEYKKzoxMDM5MTAwMDBCOTkwMjk5NzI5OTdBMDg2NjAyMkIxMjEwOTY3Njg2OTQKKzoxMDM5MjAwMDFGNkZEMjAyNjAwMUM4QzBBMDk5MUE2RDA4MEFCMUFBMUYKKzoxMDM5MzAwMDAwQTEwNDAwRTgxQTdEOEIwMjYzRkZFRTg5MUFDMEUwNDMKKzoxMDM5NDAwMDk2MUYxREU0M0UyQjE2MTA5NTFFOTQxRDI4MjAzRDI5MjAKKzoxMDM5NTAwMDc2MUEyOTc2MTJDMDQwQzA1MUMwQjIyRDc2MTMwODA2REYKKzoxMDM5NjAwMDQwOEQxNzBCODgwMTA2NUUzODBBRUUxMDFCRTQ0QTA4RUEKKzoxMDM5NzAwMDU0MzhCMEE2MDk2NjExODgxNDBCNDQxMDJCNzYxQjA0MkEKKzoxMDM5ODAwMEVFMDI4QjE2MTRFNDQzMDhEQTE0MDZFRTAyMEQ4ODEwREEKKzoxMDM5OTAwMDJBNzYxRTg2MTMxQUU0MUMwNEVFMDIwRDY2MTEwODY2RDAKKzoxMDM5QTAwMDAyMkU3NjE2MEQxNDE0MUVFNDFBMEQ0NDExMEJEODE0QjEKKzoxMDM5QjAwMDA4NjYwMjBBNDQwMjJFNzYxODJFNzYxMDI0NzYxNzI2MDAKKzoxMDM5QzAwMDc2MUZDMDg0Mjg3NjE5Mjg3NjExQzc2RjBDMjQ0MDBGMDMKKzoxMDM5RDAwMDQ0MTExQ0UzRkIyNjc2MUQyNjc2MUMyNjc2MTUyNjc2REEKKzoxMDM5RTAwMDE0OEEyNjI2NzYyNDI2NzYyNTI5NzYyMjJFNzYyMDI4RTUKKzoxMDM5RjAwMDc2MjE4RTE4ODgxNTBEQjkxMDE2RTQyNzhCQzcwRDg4MEYKKzoxMDNBMDAwMDExMEU1RTM5QURCQjg1MTkwNEVFMDIyNjc2MjMwOTg4QjYKKzoxMDNBMTAwMDAyODYxRjg5MTAyODc2MjYwQTA0NDgwNTQ0MTEwNTA1RTgKKzoxMDNBMjAwMDQ4MEU1NTExMDU0NDAyMDRFRTAyODUxRTg0MUQyRTc2QjMKKzoxMDNBMzAwMDI3MjgyMDA2OUIyRDI5MjQ2QTJFMzExNzJCMTIxMDJFQTEKKzoxMDNBNDAwMDI1MzhDQzgzQzBEMDJEMjQwN0MwRDcwOTA4NDA2NDgwMTYKKzoxMDNBNTAwMDhFOUEyOTA5Mjg0MTY0ODBBQTY0RTBCNDJEMjQwNkMwMDYKKzoxMDNBNjAwMDk4MDlFOTM2MkQwQUEwMkE2Mjg1MDFDNDA0QURBQTJENjEKKzoxMDNBNzAwMDIxMDQyQTY2ODUwOEREMTE4ODNGOEUzRTI3MzIxMDA4MTIKKzoxMDNBODAwMEVBMTgwMEM0MDQwOEU4MTgwMDg4MTEwRUNFNTMwODc3MUQKKzoxMDNBOTAwMDAyQzA4MzA4REQwMjlENDExOEU0MDEwOTBENEU5ODQwRTMKKzoxMDNBQTAwMDg4MjA5QTQzOTc0NDlENDUxN0UzRkUxREUzQ0IwNTg4ODQKKzoxMDNBQjAwMDExMDhFRTAyQURCREMwODAwN0VFMDI5RTQyMjhENENGQjEKKzoxMDNBQzAwMDJBRjI5RDg3Q0EyQUFDMThCMTc3MkFGNjlEMUFFM0I5NjMKKzoxMDNBRDAwMDk3Q0EyOEE0QTI2ODcxMUM2NTUwNjBDMDIwRDEwRjAwNEQKKzoxMDNBRTAwMDJEMjQwNkMwODBDMDk4MDlFOTM2MEU4OTM4NjNGRjczMUIKKzoxMDNBRjAwMEMwQTA2M0ZFNDgxQkUzQ0IxQUUzRUIyQUI2ODk2M0ZGNDEKKzoxMDNCMDAwMEQ2MDAwMDAwNjVFRjU0QzA5OEMwRDgyRDI0MDY2M0ZGOEUKKzoxMDNCMTAwMDUyMkQyNDA2QzA5MDYzRkY0QUNDNTdEQTIwREIzMDhDNEMKKzoxMDNCMjAwMDExNTgwQzUxQzAyMEQxMEYwMERBMjBDMEI2NTgwQ0UwNUIKKzoxMDNCMzAwMDYzRkZFNTAwREEyMDU4MENERTYzRkZEQzJBMkM3NDhCNkYKKzoxMDNCNDAwMDExNTgwNTUxRDJBMEQxMEY2QzEwMDYyODIwMDY4QTMzRDcKKzoxMDNCNTAwMDZGODIwMjYwMDE2MUMwNTAxM0UzOTcyOTIxMDIxNkUzQ0UKKzoxMDNCNjAwMDk2Njk5MjA0MjUyNTAyRDk1MDJDMjAxNTlBMjgxNEUzMzEKKzoxMDNCNzAwMDk0OEYyNjI3MjAwQjBBRkUwQzA0NzcwOTJCNzEyMDY0RjIKKzoxMDNCODAwMEUxMzk4RTQyOEQ0MzZGQkMwMjYwMDE2RjAwRTEwNEIwRTkKKzoxMDNCOTAwMEM4MDA4ODFBMDhBODA4MDhEODAyOTgyNzJCMjAwNjY4QTkKKzoxMDNCQTAwMEIzMkVDRTk3MkIyMjFFMkMyMjFEMDExMTAyN0JDOTAxQTAKKzoxMDNCQjAwMEMwQjA2NEIwMTcyQ0IwMDcyOEIwMDBEQTIwMDM4ODBBMjAKKzoxMDNCQzAwMDI4ODI0Q0MwRDEwQjgwMDBEQkEwNjVBRkU3QzAyMEQxQkMKKzoxMDNCRDAwMDBGMkQyMDY0NjRERkNBOEIyOUMwRjEwQkFCMEM2NkJGQ0MKKzoxMDNCRTAwMEMwMkIyMDBDMENCQzExQTZDQzI4QzI4NjJFMEEwODc4NEIKKzoxMDNCRjAwMEVCNjExRUUzNzIwRUJFMEEyRUUyQTM2OEUwMDUyODIyRTYKKzoxMDNDMDAwMDAwN0U4OTRGMjlDMjg1MUVFMzdFNjQ5MDQ2MUZFMzhDQTcKKzoxMDNDMTAwMDlFOTBDMDg0OTg5MTI4MjAwQTk1OTMwRjg4MDI5ODkyQ0MKKzoxMDNDMjAwMDhFMjAwRkVFMDI5RTk0MkYyMDA3ODgyNjJGOTUwQTk4NEIKKzoxMDNDMzAwMDk2OUE5NzJFMjAwNjI1MjQwNzY4RTM0MzI5MjEwMjJBMTUKKzoxMDNDNDAwMEMyODUxREUzNjUyQUFDMjBBREJEMjVENENGMkFDNjg1MkIKKzoxMDNDNTAwMDYzRkY0RTAwMkUyMDY1Q0JFREMwODIyODI0NjVDOUY2OTcKKzoxMDNDNjAwMDA1RTQzMTAwMDIwMDJBNjI4MjFCRTM2RDI5NDEwMjBCNDgKKzoxMDNDNzAwMEFBMDIyQTY2ODIwOUU0MzEyOTIxMDI2M0ZGMjMwMDAwOTcKKzoxMDNDODAwMDY0REZCODhGNDIyRTIwMTYwMEYxMDQwREVFMEMwMEVFMUEKKzoxMDNDOTAwMDFBQUVBRTlFMjk2M0ZGQTM4QTIwMkIzMjIxQjFBQTlBQzUKKzoxMDNDQTAwMEIwMjkzMjIxMjgzMjIzQjQ5OTI5MzYyMTc5ODlBOTJCQzgKKzoxMDNDQjAwMDMyMjIyQjM2MjE2M0ZGQTBDMDIwRDEwRjlGMjcyNTI0NUQKKzoxMDNDQzAwMDE1QUNCODI4NzUyMDJCMjAwNkMwQzEyRUJDRkU2NEUwQzAKKzoxMDNDRDAwMEFCNjhCNzc3MkRCQ0ZENjVERUM3MkQyMDY0QzBGMDY0RUUKKzoxMDNDRTAwMEQwODY4RTI5MEVBRTBDNjZFMDg5QzBGMTI4MjA1QTI4QjUKKzoxMDNDRjAwMDhDRkUwOENGMzg2NUZFRTg2M0ZGNTgwMDAwRTAwNDkzQUYKKzoxMDNEMDAwMDEwQzA4MTBBRjMwQzAzODMzOUM3OEYwOEQ4MDMwOEE4QjEKKzoxMDNEMTAwMDAxMDhGODBDMDgwODE5QTgzMzAzQzgwQ0E4QjgyODc1QkUKKzoxMDNEMjAwMDIwMDMwQjQ3MkIyNDE1ODMxMENCQjcwMEUxMDRCMEJDNTQKKzoxMDNEMzAwMDAwQ0MxQUFDQUMwQ0RDMDI5QzI3NjU5RTVFQzBCMjBCQkEKKzoxMDNENDAwMDk5MDIwOTA5NEYyOTI1MDI2M0ZFNTAwMDJEMjA2QTBEQjIKKzoxMDNENTAwMDJENDE2NURGN0VEQTIwQzBCMDU4MENBODY0QUYxOEMwRDIKKzoxMDNENjAwMEYxNjNGRUVGOUYyNzYzRkZEMDJFMjIxRjY1RUUzMjYzQzMKKzoxMDNENzAwMEZGNzkwMDAwMjgyMjFGNjU4RTI3NjNGRjZFMjUyNDA2MjkKKzoxMDNEODAwMDI5MjEwMjYzRkUxQjAwMDA2QzEwMDY2NTcxMzMyQjRDNjkKKzoxMDNEOTAwMDE4QzBDNzI5M0MxOEMwQTFDMDgwMDlBODM4MDgwODQyMkIKKzoxMDNEQTAwMDY0ODExMDFDRTMwMTFBRTMwMjJBQzY3RTJBNUNGREQzNUIKKzoxMDNEQjAwMDBGNkRBQTA1MDBCMDg4MDA5MDhDODk0MEMwQTAwOTg4Q0EKKzoxMDNEQzAwMDQ3MUZFMzJCMDgwQjQ3MDk0QzUwMDkwRDUzMDRERDEwMjYKKzoxMDNERDAwMEI0Q0MwNENDMTAwRDVEMDI5RDMxMENCQjAyOUIzMDg4MkQKKzoxMDNERTAwMDQzOEUyMDk4MzUwRkVFMDI5RTMyOEQyNkQ4NTBBNkRERTgKKzoxMDNERjAwMDlEMjY4RTQwQzA5MDBFNUU1MDY0RTA5NzFDRTMxMTFFMUQKKzoxMDNFMDAwMEUzMDAwMzhCMEJDMEY0OUZCMTlFQjAyRDIwMEE5OUIzNDEKKzoxMDNFMTAwMDBDREQwMjlEQjI4RjIwMENGRjAyOUZCNDhFMjYyRDIwNTgKKzoxMDNFMjAwMDA3OUVCNjhDMjgyREI1MEE5Q0I3MjkyNDA3MkYyMDA2OUIKKzoxMDNFMzAwMDJCMjA2NDY5RjMzOUNCQjYxREUyRTIyMzIwMTY4REQyMjQKKzoxMDNFNDAwMDBCMzMwQzAwRDEwNDAwMzMxQUI0OERBM0MzOTMyOTIyODEKKzoxMDNFNTAwMDIwMEMxM0UyRTExRkUyRDgwQzJFMTFBRkVFQTMyMjI5QjEKKzoxMDNFNjAwMDI0Q0YyRkUyODVEMkEwMEZERDBCMkRFNjg1RDEwRjAwRTgKKzoxMDNFNzAwMDJFMjAwQ0I0OEMwQ0VCMTExRkUyRDgxREUyQ0ZBRkVFNUMKKzoxMDNFODAwMEFEQkIyMkIyODUyOUU0Q0YwMkMyMEIyMkI2ODVEMkEwRjcKKzoxMDNFOTAwMEQxMEYwMDAwMkUyMDBDMUNFMkM4MUZFMkNGMENFQjExNEEKKzoxMDNFQTAwMEFGRUVBQ0JCMjJCMjg1MjlFNENGMDI4MjBCMjJCNjg1RUQKKzoxMDNFQjAwMEQyQTBEMTBGQzBEMDBCQUQzODdEQzgwMjYzRkVFQzYzMzkKKzoxMDNFQzAwMEZFRTA4RTQwMjcyQzc0N0JFRTEyREE3MEMwQjMyQzNDREYKKzoxMDNFRDAwMDE4REQ1MDU4MEE5Qjg5NDBDMDgwNjNGRUUzMDY2RTAyREQKKzoxMDNFRTAwMDAyMkEwMkRCMzBEQzQwREQ1MDU4MDAwNDlBMTBEQjUwMUYKKzoxMDNFRjAwMERBNzA1ODA0NjU4ODEwNjNGRUY3MDAwMDZDMTAwNjkyQjMKKzoxMDNGMDAwMDEyMUVFMkI5OEM0MEFFMkQwQzhDNDcyRTNDMTgwNENBMTAKKzoxMDNGMTAwMDBCRDlBMDdEQTMwMjI5QURGODc1QzMwMjYwMDA4NEMwNEYKKzoxMDNGMjAwMEIwQzAyM0MwQTA5RDEwNkQwODQ0Qjg5RjBFQjgwQThEODQKKzoxMDNGMzAwMDkwMEVCNzBCQjg3NzBENkQzNkFEQUE5RDgwMEQ2NjBDNEYKKzoxMDNGNDAwMEQ4RjAwMDgwODgwMDcwOEM4NzkwNjhCMTI0QjIyMjc3MDYKKzoxMDNGNTAwMEQzMjc4ODkxQzBEMENCODc5ODkwMjc5QzEwMDA3MDg4NzkKKzoxMDNGNjAwMDAwRjA4QzlEOTFDQjZGQzA4MTA4QkIwMzc1Q0IzNjYzOEQKKzoxMDNGNzAwMEZGQjRCMTIyMkVFQzE4NjNGRkQ0ODU5MjBENzcwQzg2MjYKKzoxMDNGODAwMDkzOTc5MEE2RDY3RDZCMDFCMTU1OTY5Mzk1OTI2MDAwNUMKKzoxMDNGOTAwMDE2QjNDQzJEOUMxODg4MTBEOUQwNzhEM0M3MjlEREY4NUEKKzoxMDNGQTAwMDYzRkZDMTAwQzAyMzhBNDIxQkUyQzAwMENEMzIyRDQ0MTIKKzoxMDNGQjAwMDAyOUIzMDkyMzE4OTQyODU0Mzc5QTEwNTFFRTJCQzBFRjUKKzoxMDNGQzAwMDU1MDE4NzEyMUJFMkFCODk3MDk1MzUwQjk5MDI5OTMyMjYKKzoxMDNGRDAwMDg4NDIwQTg4MEM5ODQyODY3NkE2QTY5Njc2OEY0NEFGQzkKKzoxMDNGRTAwMEFGOUY0NEQxMEYwMDAwMDA2QzEwMDg5MzExRDYzMDg4QTkKKzoxMDNGRjAwMDMwQzA5MTA4NjM1MTA4MDg0NzA1OTgzODk4MTIyODIxNjUKKzoxMDQwMDAwMDAyMjkzQ0ZEMDgwODRDNjU4MTY1NjU5MTYyOEE2MzBBNTYKKzoxMDQwMTAwMDJCNTA2NUIxOEIwQTZGMTQyRTBBRkY3Q0E2MEEyQzIwNDgKKzoxMDQwMjAwMDVBQ0NDNDJEMEEwMjJEMjQ1QTdGRTAwMjYwMDIxNTg5NjEKKzoxMDQwMzAwMDI4ODgyNjFGRTI5RjA5ODgwQzY1ODIwRjJFMjAwQjBGMEYKKzoxMDQwNDAwMEVFMEIyREUwRkUyRUUwRkYwOEREMTEwRUREMDIxRUUyN0MKKzoxMDQwNTAwMDk5QUVERDFFRTI5OTFDRTI5OTBFREQwMTBEQ0MzN0MxNEYKKzoxMDQwNjAwMDgwMDg0ODM3Qjg4REI0ODg5ODEwODk2MDFBRTI1NTdCNkIKKzoxMDQwNzAwMDk2MjE4QjYyMkFBMDIxOUMxNDdCQTMxNzlEMTMyQTIwRDIKKzoxMDQwODAwMDBDOEIxMDhDMjA1ODBCQ0E4QzE0OEQxM0RCQTBDRUFDN0IKKzoxMDQwOTAwMDYwMDFDNDAwMkUyMDBDMUJFMjQ4MENFQTExMEJBQTA4OTgKKzoxMDQwQTAwMDJCQTI4NjFGRTI0NjdCREIzQjBGRUYwQTJGRjJBMzY4QjEKKzoxMDQwQjAwMEYwMDUyODIyMDA3Rjg5MkMyQkEyODU2NEIwQUE4NzYyOTQKKzoxMDQwQzAwMDg4MjZERTcwMEM3OTM2MDk3QTBDNkZBRDFDOEYyNzlCMjEKKzoxMDQwRDAwMDE1MDhGRjBDNzdGMzE5N0U3QjcyOUQxMzlDMTQ5QjE1QkEKKzoxMDQwRTAwMENGNTY2MDAwMjVDMEIwNjNGRkQwRDc5MDYzRkZERDAwREUKKzoxMDQwRjAwMDAwOUQxMzlDMTREQTIwREI3MDU4MEIyRjhCMTU4QzE0NDkKKzoxMDQxMDAwMDhEMTM2NUEwNkE4RTYyNjNGRkNDMDBEQTIwOEIxMURDMTAKKzoxMDQxMTAwMDQwNTgwQUQ1RDZBMDhCMTVDMDUxREU3MERBMjBEQzYwN0QKKzoxMDQxMjAwMERENDA1QkZGNzY4RDEzOEMxNEQ5QTAyRTIwMEMxQkUyOTIKKzoxMDQxMzAwMDIyMUZFMjI5MENFQTExQUZFRkMwRTBBQkFBMkJBMjg1NDcKKzoxMDQxNDAwMDJFRjRDRjBCOTkwQjI5QTY4NTYzRkYxRDAwREEyMERDMjYKKzoxMDQxNTAwMDYwREQ0MERFNzA4OTEyMjgyMDA3REY1MEE5ODgyODI0RkUKKzoxMDQxNjAwMDA3NUJGRjA5RDJBMEQxMEYwMERCRTBEQTIwNTgwQjUwMkIKKzoxMDQxNzAwMDY1NTBFRjJBMjAxNDBBM0E0MDY1QTBFQkRCNjBEQzQwNzIKKzoxMDQxODAwMEREMzAwMjJBMDI1ODA5QkNENkEwNjRBMEQ1ODRBMTgzRTAKKzoxMDQxOTAwMEEwMDQwNDQ3MDMwNTQ3OTUxMjAzNjM1MUMwNTE2M0ZFMTEKKzoxMDQxQTAwMDVDMkMyMDA2RDMwRjI4Q0NGRDY0ODBBNTY4QzcwNEMwMTIKKzoxMDQxQjAwMDkzMjkyNDA2MkMyMDA2QzBCMThENjQxRkUyMDE5RDI3OUYKKzoxMDQxQzAwMDlEMjg5RDI5OEZGMjlEMjYwMEYxMDQwMEJCMUEwMEYwNjYKKzoxMDQxRDAwMDA0QjBCRTBFREQwMUMwRjBBREJCOEQ2NTJGMjQwNzBEMTAKKzoxMDQxRTAwMDBFNUUwMUVFMTFBRUJCMkUwQUZFQjBCQjBCMEIxOTBFMUMKKzoxMDQxRjAwMEJCMzZDMEUyMEIwQjQ3MEVCQjM3MkIyNDE2MThFMUY5NzgKKzoxMDQyMDAwMDBBMDk0NTBEMEI0MjJCMjQwQjI5MjQwQUI0QkUyRTI0ODcKKzoxMDQyMTAwMDBDN0Q4ODU3MjkyMDE2MkZDQ0ZEQjA5RDBBNUM1MjBEQ0QKKzoxMDQyMjAwMENDMzYyQzI0NjQ2NUZERUMwQzBDNDc2NENERTYxOEUxMUIKKzoxMDQyMzAwMEU0OEUyODg4ODIwQzlGMEMwMDgxMDQwMEZGMUFBRkVFRTgKKzoxMDQyNDAwMDlFMjk2M0ZEQ0YxQ0UyMTE2M0ZFMTMwMDFDRTIwQjYzODkKKzoxMDQyNTAwMEZFMEM4RDY1NjNGRkE1MDBEQTIwMkIyMDBDNTgwQjM5NkUKKzoxMDQyNjAwMDY0NUYwRkMwMjBEMTBGMDBDMDIwRDEwRkMwOTMyOTI0NUMKKzoxMDQyNzAwMDE2QzA5MzYzRkZBMDAwMDA2QzEwMDRDMDYwMTdFMUNENkUKKzoxMDQyODAwMDFERTFEMEMzODEyOTMxMDEyQTMwMDgyOTI0MEE3OEExRUYKKzoxMDQyOTAwMDA4QzNCMjdCQTE3MkQyNjBEMTBGQzBDMTY1NTA1MTI2NTQKKzoxMDQyQTAwMDI1MDIyQUQwMjAyRjIwMEIyOTBBRkIyQjIwMTQyRTIwOTgKKzoxMDQyQjAwMDE1MjYyNDE1MDlCQjAxMERGRjA5MjhGMTIwMkIyNDE0MTQKKzoxMDQyQzAwMEE4RUUyRUY1MjA2NEEwQTkyQjIyMUUyODIyMUQwMTExODQKKzoxMDQyRDAwMDAyN0I4OTAxREI2MDY0QjAxNzJDQjAwNzI4QjAwMERBREMKKzoxMDQyRTAwMDIwMDc4ODBBMjg4MjRDQzBEMTBCODAwMERCQTA2NUFGNzQKKzoxMDQyRjAwMEU3REIzMERDNDBERDUwREEyMDU4MDBERTI5MjEwMjA5RkUKKzoxMDQzMDAwMDBCNENDQUIyRDJBMEQxMEYwMENDNUEyQzMwMDg3QkMxQzIKKzoxMDQzMTAwMDM3MkVEMDIwNjRFMDJEMDIyQTAyMDMzQjAyREM0MERENzAKKzoxMDQzMjAwMDUwNTgwMEQ0RDJBMEQxMEYyQjIwMTRCMEJCMkIyNDE0OTIKKzoxMDQzMzAwMDBCMEY0MTY0RjA3OTdDQjdDQUMwQzEwQzlDMDIyQzI1REMKKzoxMDQzNDAwMDAyRDJBMEQxMEZDMDIwRDEwRjJFMjAwNjY5RTJDMTI2RDMKKzoxMDQzNTAwMDI0MDYyQjIyMUUyRjIyMUQyOTIwMEIyODIwMTUwRDk5MDMKKzoxMDQzNjAwMDA5MkE5MTIwMjYyNDE1QUE4ODI4OTUyMDdCRjE0OTYwRTYKKzoxMDQzNzAwMDAwNDhCMEJCMkIyNDE0MEIwQTQxNjRBMDYyN0NCNzAyMzYKKzoxMDQzODAwMDJDMjUwMjJCMjIxRTJDMjIxREQzMEY3QkM5MDFDMEIwNkQKKzoxMDQzOTAwMEM5QjYyQ0IwMDcyOEIwMDBEQTIwMDc4ODBBMjg4MjRDNUEKKzoxMDQzQTAwMEMwRDEwQjgwMDBEQkEwNjVBRkU3QzAyMEQxMEYwMDAwQkIKKzoxMDQzQjAwMDI2MjQwNkQyQTBEMTBGMDAwMERCNjAxREUxODE2NEJGN0UKKzoxMDQzQzAwMDRGMkNCMDA3MjhCMDAwREEyMDA3ODgwQTI4ODI0Q0MwOUEKKzoxMDQzRDAwMEQxMEI4MDAwREJBMDY1QUZFNzFERTE3OTYzRkYzMTAwMDEKKzoxMDQzRTAwMDI2MjQwNjYzRkY5QzAwMDA2QzEwMDQyODIwMDYyNjBBODEKKzoxMDQzRjAwMDA0NkY4NTYzNjQ1MDJBMjkyMDE0N0Q5NzI0MDIyQTAyQzEKKzoxMDQ0MDAwMERCMzBEQzQwREQ1MDU4MDAxOTI5MjEwMjA5MEE0Q0M4NzQKKzoxMDQ0MTAwMEEyQzAyMEQxMEZDMEIxMEI5QjAyMkIyNTAyQzAyMEQxMUUKKzoxMDQ0MjAwMDBGMDAwMjJBMDIwMzNCMDIyQzBBMDE1ODAwRDFDOUFBM0MKKzoxMDQ0MzAwMERBMjBEQjMwREM0MDU4MEEwQzI5QTAxMUQzQTA3RTk3OEIKKzoxMDQ0NDAwMDA4MkMwQUZEMEM5QzAxMkNBNDExQzA1MTJEMjAxNDA2MkYKKzoxMDQ0NTAwMEREMDIyRDI0MTQ2M0ZGQTREQTIwREIzMERDNDBERDUwQzQKKzoxMDQ0NjAwMEMwRTA1ODA5ODdEMkEwRDEwRjAwMDAwMDZDMTAwNjE2REEKKzoxMDQ0NzAwMEUxNTIxQ0UxNTI2NTUxNTdDMEUxMTdFMTRFMjgyMTAyN0IKKzoxMDQ0ODAwMDJEMjIwMDA4MDg0QzY1ODA5MzJCMzIwMDBCNjk1MTI5QkUKKzoxMDQ0OTAwMDlDRkQ2NTkwODcyQTYyOUU2RUE4NEMyQTcyMjY2OEEwQjEKKzoxMDQ0QTAwMDAyN0FEOTQzMkE2MjlEQ0JBRDdDQkU1MDJCMjAwQzBDRTYKKzoxMDQ0QjAwMEJEMTFBNkREMjhEMjg2MkY0QzA0NzhGQjE2MENCRjBBNEUKKzoxMDQ0QzAwMDJGRjJBMzY4RjAwNTI4MjIwMDdGODkwNzJERDI4NUQzMUIKKzoxMDQ0RDAwMDBGNjVEMDc0MkEyMTA0MTlFMTdBRDMwRjdBOUIyRURBNjIKKzoxMDQ0RTAwMDIwNTgwODgzNjAwMDM1MDAyRDIxMDQxQkUxNzU3REJCMzkKKzoxMDQ0RjAwMDI0REEyMEMwQjY1ODA4N0VDQTU0NjAwMTAzMEIyQjUwNDIKKzoxMDQ1MDAwMDJCMjQwQkI0QkIwQjBCNDcyQjI0MEM2M0ZGQTBEQTIwMkUKKzoxMDQ1MTAwMDU4MEE2NzYwMDAwNkRBMjBDMEI2NTgwQTY1NjU1MEUwQTAKKzoxMDQ1MjAwMERDNDBEQjMwMkQzMjAwMDIyQTAyMEQ2RDUxNTgwOEQyREEKKzoxMDQ1MzAwMDFDRTEyM0QzQTA2NEEwQzhDMDUxODRBMThFQTAwNDA0QjAKKzoxMDQ1NDAwMDQ3MEUwRTQ3NjNGRjM1MDAwMDJCMjEwNEMwOEI4OTMxRDUKKzoxMDQ1NTAwMEMwNzBERjcwMDlGOTUwMDk4RjM4NkVCODE3MkMyMDY2Q0IKKzoxMDQ1NjAwMEFFQ0MwQzBDNDcyQzI0NjY3Q0ZCMDk5RDEwNTgwOEU0NEIKKzoxMDQ1NzAwMDhEMTAyNzI0NjY5NEQxMUVFMTI2QjhEQzlFRDA2NTUwQUMKKzoxMDQ1ODAwMDU2QzBEN0I4M0FDMEIxQzBGMDBDQkYzODBGMEY0MkNCRkQKKzoxMDQ1OTAwMEYxMTlFMTA1MThFMTA3Mjg5NjdFQjA0QkQzMEY2REJBRUIKKzoxMDQ1QTAwMDA1MDBBMDg4MDBDMDhDMkMyMDBDQzAyMDFERTEwQjBDNDUKKzoxMDQ1QjAwMENGMTFBNkZGMkVGMjg1QURDQzI3QzRDRjBFNEUwQjJFMDkKKzoxMDQ1QzAwMEY2ODVEMTBGQzA4MDBBQjgzODc4RDBDRDYzRkZDMTAwMUUKKzoxMDQ1RDAwMDhFMzAwRTBFNDc2M0ZFQTEyQTJDNzQyQjBBMDEwNDRENjcKKzoxMDQ1RTAwMDAyNTgwOEQ3MkYyMDBDMTJFMEZDMENGOTExQTY5OUEyNTIKKzoxMDQ1RjAwMEZGMjdGNENGMjg5Mjg1RDJBMDA4NDgwQjI4OTY4NUQxQjIKKzoxMDQ2MDAwMDBGQzAyMEQxMEYwMDAwMDA2QzEwMDRDMDYwQ0I1NURCNDAKKzoxMDQ2MTAwMDMwREM0MDA1NUQwMjAyMkEwMjVCRkY5NDI5MjEwMjA5NzkKKzoxMDQ2MjAwMDA4NENDODgyRDJBMEQxMEYyQjIwMTRCMEJCMkIyNDE0NkQKKzoxMDQ2MzAwMDBCMEM0MUNCQzU3REI3RUJDMEMxMEM5QzAyMkMyNTAyRjUKKzoxMDQ2NDAwMEQyQTBEMTBGMDAwMDAyMkEwMjAzM0IwMjA2NkMwMkMwNzYKKzoxMDQ2NTAwMEQwQzdGNzJFMjAxNDI4MzEwMTI2MjUwMjI4MjQwQTBGNUUKKzoxMDQ2NjAwMEVFMDEyRTI0MTQ1ODAxMEU2M0ZGQTMwMDI2MjQwNkQyNjcKKzoxMDQ2NzAwMEEwRDEwRjAwNkMxMDA2MjgyMTAyRDYyMDA4MDg0QzY1MzYKKzoxMDQ2ODAwMDgwOUQyQjIwMEMxMkUwQ0MwQ0I4MTFBMjg4MkE4Mjg2QzcKKzoxMDQ2OTAwMEI1NDk3QTkzMDI2MDAwOTcxOUUwQzkwOUI5MEEyOTkyQ0QKKzoxMDQ2QTAwMEEzNjg5MDA4MkE2MjAwMDlBQTBDNjVBMDgyMjg4Mjg1NjYKKzoxMDQ2QjAwMDFDRTBENDY0ODA3OTlDODBCODg3QjE0QjlCODE5QjEwQUYKKzoxMDQ2QzAwMDY1NTA3NEMwQTdEOTcwMjgwQTAxQzBEMDA3OEQzODBENzUKKzoxMDQ2RDAwMDBENDJDQkRFMUZFMEI1MUVFMEI2MkVGNjdFRDgzMEQzRkQKKzoxMDQ2RTAwMDBGNkQ0QTA1MDA4MDg4MDA5MDhDMkUzMDA4QzBBMDAwMTUKKzoxMDQ2RjAwMEVFMzIyRTc0MDAyODYwMEMxOUUwQjgwQzhEMTFBMkREOEEKKzoxMDQ3MDAwMEE5ODhDMDIwMkNEMjg1MjI4NENGRDJBMDBDQkMwQjJDMkYKKzoxMDQ3MTAwMEQ2ODVEMTBGQzBGMDAzOEYzODdGQTBDMDYzRkZCNDAwRUYKKzoxMDQ3MjAwMENDNTgyQTZDNzREQjMwREM0MDU4MDgwQkMwMjBEMTBGMDkKKzoxMDQ3MzAwMERBNjA1ODA5REY2M0ZGRTdERDQwMkE2Qzc0QzBCMERDNDMKKzoxMDQ3NDAwMDcwNTgwODdGMkUzMDA4OEIxMDAwRUUzMjJFNzQwMDI4MkYKKzoxMDQ3NTAwMDYwMEMxOUUwQTEwQzhEMTFBMkREQTk4OEMwMjAyQ0QyMUIKKzoxMDQ3NjAwMDg1MjI4NENGRDJBMDBDQkMwQjJDRDY4NUQxMEYwMDAwQTMKKzoxMDQ3NzAwMDZDMTAwNDI5MjAxNDI4MjAwNkIxOTkyOTI0MTQ2ODgxN0EKKzoxMDQ3ODAwMDI0QzBBRjJDMEEwMTJCMjEwMjJDMjQwNjdCQTAwNEMwREMKKzoxMDQ3OTAwMEQwMkQyNTAyMDIyQTAyMDMzQjAyMDQ0QzAyQzBEMDU4NEQKKzoxMDQ3QTAwMDAwQzBEMkEwRDEwRkMwMjBEMTBGMDAwMDZDMTAwNDI5OEUKKzoxMDQ3QjAwMDMxMDFDMkI0MjkyNDBBMkEzMDExQzI4Mzc4QTE2QzdCNEEKKzoxMDQ3QzAwMEExNjk2NDUwNDcyQzIwMDZDMDY4NkZDNTYyQ0E1NzJEODYKKzoxMDQ3RDAwMDIwMTQ3Q0Q3MjJEQTIwREIzMERDNDBERDUwNUJGRkE1RTMKKzoxMDQ3RTAwMDI5MjEwMjA5MEU0Q0M4RTJDMDIwRDEwRkMwRjEwRjlGNTEKKzoxMDQ3RjAwMDAyMkYyNTAyQzAyMEQxMEZEQTIwREIzMEMwQzA1QkZGQzIKKzoxMDQ4MDAwMERDMjgyMDE0MDY4ODAyMjgyNDE0NjNGRkM3MjkyMDE1RjkKKzoxMDQ4MTAwMDFCRTA2QzJBMjAwQkMwQzA5QzI0MEJBQTA5MkJBMTIwRjIKKzoxMDQ4MjAwMDJDMjQxNUFCOTkyOUE1MjA2M0ZGOTkwMEMwMjBEMTBGMzYKKzoxMDQ4MzAwMERBMjBEQjMwREM0MERENTBDMEUwNTgwODkxRDJBMEQxNTYKKzoxMDQ4NDAwMDBGMDAwMDAwNkMxMDA0Q0I1NTEzRTA2NzI1MjIxRjBERUMKKzoxMDQ4NTAwMDQ2MTEwNjU1MENBMzIzMjYyMjFFMjUyNjFGMDY0NDBCQUYKKzoxMDQ4NjAwMDI0MjYxRTczNEIxREM4NTJEMjQwRDEwRjI4MEE4MEMwODcKKzoxMDQ4NzAwMDQwMjQyNjFGQTgyODI4MjYxRTI4MjYxREQyNDBEMTBGRjYKKzoxMDQ4ODAwMEMwMjBEMTBGMjQ0REY4MjQyNjFFNjNGRkQ4MDAwMDAwNUQKKzoxMDQ4OTAwMDZDMTAwNEQ2MjAyODIwMDZDMDcwNkU4NTAyNjAwMEQ0RkIKKzoxMDQ4QTAwMDFERTA0RTE5RTA0NjEyRTA0NDJBOENGQzY0QTEzMDJCMzYKKzoxMDQ4QjAwMDYxMDJCNDRDMEIwQjRDNjVCMEEyMkI2MDBDOEE2MDBDRUYKKzoxMDQ4QzAwMEI4MTEwMjg4MDgyRTgyODYwOUI5MEE3RUMzMDI2MDAwRTgKKzoxMDQ4RDAwMDlBMjk5MkEzNjg5MDA1MDlBQTBDNjVBMDhFMjg4Mjg1NjIKKzoxMDQ4RTAwMDY0ODA4OEI4ODkxQkUwNEE5NDgxOUI4MDY1NTE1NUMwREIKKzoxMDQ4RjAwMEI3QjgzODJBMEEwMUMwQzAwOUFDMzgwQzBDNDI2NEMwRjEKKzoxMDQ5MDAwMDQyMUZFMDI5MUVFMDJCMkVGNjdFQjA0QUQzMEY2REFBN0YKKzoxMDQ5MTAwMDA1MDA4MDg4MDA5MDhDQzBBMDI5NjAwQzBDOUMxMUEyMUUKKzoxMDQ5MjAwMENDMkJDMjg1QUQ5OTBCNEIwQjJCQzY4NTI4NjAwNjI3NzcKKzoxMDQ5MzAwMDk0Q0Y2ODgxMjIyRDYwMTVEMkEwQzlEMkMwRTIyRTY0MjYKKzoxMDQ5NDAwMDA2RDEwRjAwQzBGMDA4QUYzODdGQjBCRDYzRkZCMTAwRTMKKzoxMDQ5NTAwMDI3NjQwNkQyQTBEMTBGMDBEMkEwRDEwRjAwQ0M1N0RBMjUKKzoxMDQ5NjAwMDYwREIzMERDNDA1ODA4QzBDMDIwRDEwRkRBNjA1ODA5NDUKKzoxMDQ5NzAwMDUwNjNGRkU4MDAyODIyMUUyOTIyMUREMzBGNzg5OTAxRDkKKzoxMDQ5ODAwMEMwODBDMUQ2QzFDMTFCRTAxOEMxMjJBQjZCNjQ4MDQyOUMKKzoxMDQ5OTAwMDc4OTEzRjJBODAwMDBDQUUwQzY0RTBCQjAyQUYwQzY0M0YKKzoxMDQ5QTAwMEYwQjUyRUFDRUM2NEUwQUYwREFGMEM2NEYwQTkyRUFDMEEKKzoxMDQ5QjAwMEU4NjRFMEEzMkZBQ0U3NjRGMDlEMkVBQ0U2NjRFMDk3REEKKzoxMDQ5QzAwMDJGODAwNzA4RjgwQkRBODA3QjgzMDIyQThERjhEOEEwQTUKKzoxMDQ5RDAwMDY1QUZCQzI4NjEyMzA4RDczOUQ5NzA2MDAwN0IwMDAwMUYKKzoxMDQ5RTAwMDJCNjAwQzBDQjgxMUEyODgyQzgyODYyQTBBMDg3Q0FCOUEKKzoxMDQ5RjAwMDdFMDlCQTBBMkFBMkEzNjhBMDA1MkM2MjAwN0FDOTZGQjAKKzoxMDRBMDAwMDJBODI4NTY0QTA2OTFGREZGRTI3NjUwNEMwRTNDMEM0NTUKKzoxMDRBMTAwMDJFNjQwNjlDQTExQ0UwMkI5RkEwMkU2MDBBOTdBMzBDN0QKKzoxMDRBMjAwMEVFMDI5RUEyOEY2MDBDRkYwMjlGQTQyRTYwMTQ3QUVGMEMKKzoxMDRBMzAwMDQ2MjdBNDE3QURCQzJGODI4NTI3QzRDRjJGRkMyMDJGN0IKKzoxMDRBNDAwMDg2ODU2M0ZFNjkyQTZDNzRDMEIxREM5MERENDA1ODA3MkUKKzoxMDRBNTAwMEJDMURERkUxNjNGRUMxMDBEOUEwREE2MERCMzBDMkQwNEIKKzoxMDRBNjAwMEMxRTBEQzQwMDlERTM5REQ1MDU4MDgwNUQyQTBEMTBGODUKKzoxMDRBNzAwMERBNjA1ODA5MEY2M0ZFRTQyOTBBMDEyOUE0MTcwREJGNjMKKzoxMDRBODAwMDA4MkU4Mjg1MjdGNENGMkVFQzIwMkU4Njg1NjQ1MDBCQ0QKKzoxMDRBOTAwMDJBNkM3NERCNDA1ODAxN0NEMkEwRDEwRkMwMjBEMTBGMEEKKzoxMDRBQTAwMDZDMTAwNjJCMjIxRTI4MjIxRDkzMTA3Qjg5MDFDMEIwOUEKKzoxMDRBQjAwMEMwQzlDMDNCQzFGMjA0MDY0MDFEREZDQkMwRTJDMDc0RDgKKzoxMDRBQzAwMDA3NDcwMTBFNEUwMUFEMkQ5RTExQzA0MDJFMEExNDY0MDEKKzoxMDRBRDAwMEIwNkU2RDA4NDQyODIyMUQ3QjgxNjUyQUIwMDA3RUExM0UKKzoxMDRBRTAwMDNCN0ZBMTQ3N0I1MTIwN0NBMTQ5NjhBOTE3NjhBQTE0ODQKKzoxMDRBRjAwMDczQTExMUMwOUY3OUExMENDMThCNzhBMTA3QzFBRTI5MDgKKzoxMDRCMDAwMDBBMUUyOUI0MDA3Q0ExMkIyQUIwMDcwQkFCMEJEQUIwMkMKKzoxMDRCMTAwMDdEQjMwMjJBQkRGOERCQTBDQUE1NjNGRkI0MjhCMDEwOUMKKzoxMDRCMjAwMDg5MTE2OTg3QkI2NDlGQjg2M0ZGREMwMDY0N0ZCNDYzNEQKKzoxMDRCMzAwMEZGRDUwMDAwNjQ2RkQwQzA0MUMxQUUyQUI0MDA2M0ZGNEUKKzoxMDRCNDAwMEM2MkIyMTAyQ0VCRTJBMjIxRDJCMjIxRTdBQjEyQThDMTAKKzoxMDRCNTAwMDEwN0NCMTIxN0FCOTAxQzBCMEM5QjkxM0RGOTZEQTIwNEYKKzoxMDRCNjAwMDI4QjAwMDJDQjAwNzAzODgwQTI4ODI0Q0MwRDEwQjgwRTMKKzoxMDRCNzAwMDAwREJBMDY1QUZFN0QyNDBEMTBGODkxMDY1OUZENDYzRjkKKzoxMDRCODAwMEZGRjMwMDAwNkMxMDA4QzBEMEM4NTk4QzMwMjkyMTAyRjYKKzoxMDRCOTAwMDBDMEM0NzYwMDAwQzhFMzAwRTFFNTA2NUUxOUUyOTIxRTIKKzoxMDRCQTAwMDAyQzBDMTE2REY4NTA5MEI0QzY1QjA5MDhBMzAwQTZFRDEKKzoxMDRCQjAwMDUxNjhFMzAyNjAwMDg1MkY2MjlFMUJERjdFNkVGODUzMTIKKzoxMDRCQzAwMDJCQjIyNjY4QjAwNTJFMjIwMDdCRTk0NzI3NjI5REI3RUQKKzoxMDRCRDAwMDQ4Q0I3Rjk3MTAyQjIwMENCMDRFMENCRjExQTZGRjI5OUQKKzoxMDRCRTAwMEYyODY5RTEyNzk4QjQxMTdERjc1MDdCNzBBMjc3MkEzRTkKKzoxMDRCRjAwMDY4NzAwNDg4MjA3Nzg5MzAyOUYyODVERjkwRDc5MDY1MjYKKzoxMDRDMDAwMDkwNjUyQTIxMDQxOURGQUU3QTlCMjJEQTIwNTgwNkI4NzMKKzoxMDRDMTAwMDYwMDAyOTAwMkMyMTA0MUJERkFBN0NCQjE4REEyMEMwMEQKKzoxMDRDMjAwMEI2NTgwNkIzQzk1ODYwMDE0Q0MwOTA2M0ZGQ0NEQTIwNzcKKzoxMDRDMzAwMDU4MDg5RjYwMDAwNkRBMjBDMEI2NTgwODlENjU1MTM1QjcKKzoxMDRDNDAwMERDNDBEQjMwOEQzMERBMjAwRDZENTE1ODA3MEJDMEQwQzEKKzoxMDRDNTAwMEQzQTA2NEExMjAyOTIxMDJDMDUxODRBMThDQTAwNDA0MDYKKzoxMDRDNjAwMDQ3MEMwQzQ3NjNGRjNFMDBDMDlCODgzMURCRDAwOEY4M0YKKzoxMDRDNzAwMDUwMDg5QjM4MjgyMTA0OTgxMTZFODgyMzI4MjA2NkFDQTAKKzoxMDRDODAwMDhDMEMwQzQ3MkMyNDY2N0NCQjE1OUYxMzlFMTQ4QTEwMzkKKzoxMDRDOTAwMDhCMTE1ODA3MUI4RTE0OEYxM0MwRDAyRDI0NjY4QTMwQjkKKzoxMDRDQTAwMEMwOTJDMUM4MUJERjVCN0ZBNjA5OUJGMDk5RjEyQ0Y0NzEKKzoxMDRDQjAwMDA4MjdGQzEwNjU1MEE0QjgzQURGNzBDMDUxQzA4MDA3QzcKKzoxMDRDQzAwMDU4MzgwODA4NDI2NDgwNjcxOERGMzgxOURGMzkyOTg2QTgKKzoxMDRDRDAwMDdFNkE0MjBBRDMwRjZERTkwNTAwQTA4ODAwRjA4Q0MwRkYKKzoxMDRDRTAwMEEwODkzMEI0RTM3Rjk2MjhDMEYyMDdFOTBCMkM5NDA4MjIKKzoxMDRDRjAwMDlCOTA5RjkxMkYyMDBDMTJERjM4MENGODExQTY4ODI5NjkKKzoxMDREMDAwMDgyODVBMkZGMkRGNENGRDJBMDA5MzMwQjIzODY4NUQxNTMKKzoxMDREMTAwMDBGMjIyMDBDODkxMjE4REYzMDBDMkIxMUE2QkJBODIyMDEKKzoxMDREMjAwMDJEMjRDRjJDQjI4NUQyQTAwQzk5MEIyOUI2ODVEMTBGOUEKKzoxMDREMzAwMEMwODdDMDkwMEE1OTM4Nzk4MDk2NjNGRjhBREIzMERBRTEKKzoxMDRENDAwMDIwQzBDMUMwRDA1QkZGNTYyOTIxMDJDMEQwMkE5Q0ZFRTIKKzoxMDRENTAwMDY1QUU0RDJEMjUwMkMwOTA2M0ZFNDUwMDlFMTQyQTJDQTEKKzoxMDRENjAwMDc0QzBCMURDNzBERDQwNTgwNkY2OEUxNEMwRDAxQkRGNzUKKzoxMDRENzAwMDI4QzFDODYzRkY2QUMwMjBEMTBGMDAwMDZDMTAwNjI4NEMKKzoxMDREODAwMDIxMDIxN0RGMEQwODA4NEM2NTgyNDkyOTcyOUU2Rjk4MzEKKzoxMDREOTAwMDAyNjAwMjUwMTlERjA4MkE5MjI2NjhBMDA3OEIyMDBBQjkKKzoxMDREQTAwMEJCMEM2NUIyM0YyQTcyOURDMENCNjRBMjM3MURERjA0RTUKKzoxMDREQjAwMEMwNjAyQjMwMDhDMEYxNjRCMDcxMkUwQUZGQjBCODY0MzcKKzoxMDREQzAwMDgxNTEyREJDRkU2NEQwRjM2NDUwNUMyQTJDNzQwNDRCREEKKzoxMDRERDAwMDAyNTgwMEFEMEFBMjAyMDYwMDAwMDAwMDAwMUFERjA4MTcKKzoxMDRERTAwMDJDMjAwNzZFQkIwMjYwMDIyMjE4REVGRTEzREYwODFCQjgKKzoxMDRERjAwMERGMzZDMEUyMjkyMDBBOUFEMDlFRDFBQkNCMDM5OTAyQkMKKzoxMDRFMDAwMDk5RDIyM0IwODAyNkI0ODBCMTMzMDgzMzAyOTNEMzE4RUIKKzoxMDRFMTAwMERFRjIwQ0ZEMTFBN0REMkNEMjg1QThGODI2ODRDRjBDN0MKKzoxMDRFMjAwMEVDMEIyQ0Q2ODU2NTVGQTJDMDIwRDEwRjJCMjEwNDg4MDYKKzoxMDRFMzAwMDMxREU2MDA4Rjg1MDA4Q0UzODZFQjgxMDJDMjA2NkIxMEMKKzoxMDRFNDAwMENDMEMwQzQ3MkMyNDY2N0NFQjAyNjAwMUFGMkUzMDEwOUEKKzoxMDRFNTAwMDI5MzAxMTJDMzAxMzAwOTkzMjAwQ0IzMjY0RTE0NTJBRkQKKzoxMDRFNjAwMDMwMTQxRURGMUEwMEFBMzI3OENGMDUwRTlDMDkyQkM0MUQKKzoxMDRFNzAwMDdGMUNERjE3NjZBMDA1MEU5ODA5MkE4NDgwQjRBNzE4NDYKKzoxMDRFODAwMERGMTVDNzZGMDA5MTA0QUM5Q0RCQzAwMEFFMUEwMEYzQzUKKzoxMDRFOTAwMDFBNkVDMTA0OEJEMDBCQ0IwQzFDREYwRjA4QjgxQzA2OUMKKzoxMDRFQTAwMDMzMDNBQzg4MkE4NDhCMkNEMDM2Mjc4NDhDMDNDQzAxMjYKKzoxMDRFQjAwMDBFQ0MwMjJDRDQzNjU4MDFBRDYzRkYwQjJGMjAwQzBDMDYKKzoxMDRFQzAwMEZCMTFBN0JCMkRCMjg2QzA5ODdEOTMwMjYwMDEyMTE5MEEKKzoxMDRFRDAwMERFQkIwOUY5MEEyOTkyQTM2ODkwMDgyRDIyMDAwOUREOUEKKzoxMDRFRTAwMDBDNjVEMTBDMkRCMjg1REU2MDY0RDEwNDg4MzEyQjIxOTQKKzoxMDRFRjAwMDA0MDhGODUwMDhDRTM4NkZCODAyNjNGRURGMkMyMDY2MzUKKzoxMDRGMDAwMEIxQ0MwQzBDNDcyQzI0NjY3Q0UzMDI2M0ZFQ0U5RDEwRDIKKzoxMDRGMTAwMDYwMDEzMTAwMjkzMTA4MjkyNTA0MjgzMDE0QjA4ODY0NDMKKzoxMDRGMjAwMDgwQTYyQjMxMDkyQjI0MEFDMDgxMkIzMDE2MkZENDIzQzUKKzoxMDRGMzAwMDJCMjQwQkI0QkMyQzI0MEM4RDM3OEIzNjI5MjUwNERFOTYKKzoxMDRGNDAwMEQwMEQ4RTM5RENCMDBCOEMzOTBFQ0MwMjY0Q0U3ODA4RDMKKzoxMDRGNTAwMDlDMTEwMUM0MDQ4RjM4MERCRTE4MDBDNDA0MERCODE4OEMKKzoxMDRGNjAwMDAwODgxMTA4RkYwMkMwODMwOENDMDIxOERFQ0M5Q0ExODcKKzoxMDRGNzAwMDk4QTAxOERFQ0I4QzIwOUVBMzlGQTQwNUNDMTEwQkNGNEMKKzoxMDRGODAwMDUzQzFFMDlFQTUwQ0ZGMDIwOEZGMDI5RkEyMThERTg5MTQKKzoxMDRGOTAwMDI2MjQ2NjJDNzI5RDI2ODRBMjJDQ0MxODJDNzY5RDYzMjgKKzoxMDRGQTAwMEZFMjUwMDAwMDAyRDMwMTIxQ0RFQ0QwMERBMzI3OERGNDUKKzoxMDRGQjAwMDA1MEM5RTBCMkFFNDdGNjZCMDA1MEM5RjBCMkJGNDgwM0EKKzoxMDRGQzAwMDJBMzAxMTAwQUEzMjYzRkVFQzJFMjQwQTJCMzEwOTlCRjEKKzoxMDRGRDAwMDJCNjNGRjUzMDBDQzU3REEyMERCMzBEQzQwNTgwNzIyMkMKKzoxMDRGRTAwMEMwMjBEMTBGMDBEQTIwQzBCNjU4MDdCMTYzRkZFNTAwM0EKKzoxMDRGRjAwMDAwREJGMERBMjA1ODA3QUU2M0ZGRDkwMDAwNTgwNjQwMDYKKzoxMDUwMDAwMDFEREU3MEMwRjEyNjI0NjY2M0ZFNDEwMDhCMjAyODBBNTUKKzoxMDUwMTAwMEZGQjFDRTIzMjAwQTJDMjEwNDBFMEU0NzJFMjQwNzc4NDAKKzoxMDUwMjAwMDMxMzU5QUQwMkNENTBBOTZEMzE5REVBNjJFRDQxNkMwQzcKKzoxMDUwMzAwMDgzOThEMUMwRTMwOUI4MDI5OEQ0MDkzOTAyOTlEMjI2REQKKzoxMDUwNDAwMDI0MDc2M0ZEQzk1ODA2MkU4RDEwMjYyNDY2MkIyMTA0RTMKKzoxMDUwNTAwMDJGMjAwQzYzRkQ4NjAwMDAwOEI4MTExOURFNjgwOEVFRTkKKzoxMDUwNjAwMDAyODgyQjlFRDU5QUQwQzBFRjA5ODgwMjk4RDIwNEM5MzUKKzoxMDUwNzAwMDExMEU5OTAyOTlENEMwRTQ5RUQxNjNGRkMxMDAwMDAwRDMKKzoxMDUwODAwMDZDMTAwNEMwMjBEMTBGMDA2QzEwMDQ4NTIxMEQzODExNjQKKzoxMDUwOTAwMDE0REU0Nzg2MjJBNDI0MDg2NjBDOTYyMjA1MzMwQjkzNUYKKzoxMDUwQTAwMDIxNzQzQjEzQzg2MkQyMzBEMTBGQzAzMEJDMjk5OTIxODIKKzoxMDUwQjAwMDk5MjA5MzIyRDIzMEQxMEYyMzNERjg5MzIxNjNGRkUzNEYKKzoxMDUwQzAwMDZDMTAwQUQ2MjA5NDE4MTdERTNDRDkzMEI4Mzg5ODE5REQKKzoxMDUwRDAwMDk5MTQ2NTUyNTZDMEUxRDJFMDJFNjEwMjFEREUzOTBFRjAKKzoxMDUwRTAwMDBFNEM2NUUxNjI4RjMwOEUxOTBGNkY1MTJGRkNGRDY1RkMKKzoxMDUwRjAwMEYxNTU4RUUxMjlEMDIzMEU4RjUwNzdFNjZCOEYxODFFNjUKKzoxMDUxMDAwMERFNzhCMEZGMEZGNDExMEYxRjE0NjU5MENFMThERTc1MTYKKzoxMDUxMTAwMDhDNjBBOENDQzBCMTE5REUyNzI4NjAwQjA5Q0MwQjBEMjAKKzoxMDUxMjAwMDg4MDkyOTgxMjAyODgxMUUyQTBBMDAwOTg4MEMwOEJBQ0EKKzoxMDUxMzAwMDM4MUJERTZCMENBOTBBMjk5Mjk0N0I5QjAyNjAwMDhDQzEKKzoxMDUxNDAwMDJCNjAwQzk0MTYwQ0JEMTFBN0REMjlEMjg2Qjg0ODc5QzYKKzoxMDUxNTAwMDgzMDI2MDAwRDIxOURFMTkwOUI4MEEyODgyQTM5ODE3QzEKKzoxMDUxNjAwMDY4ODAwMjYwMDBBMzYwMDBBNTFBREU1Rjg0MTgwQUVFNjIKKzoxMDUxNzAwMDAxQ0E5ODFCREUxMDhDMTkyQkIwMDA4Q0MwNkVCMzEzQzMKKzoxMDUxODAwMDFEREUwRDBDMUM1MjBEQ0MwQjJEQzI5NUMwQTE3RURCN0IKKzoxMDUxOTAwMEFFNjAwMDM4MEMwQzUzNjAwMDA5MDAwMDAwMThERTUxQUUKKzoxMDUxQTAwMDhDNjBBOENDQzBCMTE5REUwMzI4NjAwQjA5Q0MwQjBEQjQKKzoxMDUxQjAwMDg4MDkyOTgxMjAyODgxMUUyQTBBMDAwOTg4MEMwOEJBM0EKKzoxMDUxQzAwMDM4MENBOTBBMjk5Mjk0N0U5MzAyNjNGRjcyREE2MEMwQjgKKzoxMDUxRDAwMEJBNTgwNzM3NjQ1MDczNjAwMjZBMDAwMDFBRERGNjhDMTMKKzoxMDUxRTAwMDE5MkFBMDAwOENDMDZFQTMxQTE4RERGMjBDMUM1MjA4RkMKKzoxMDUxRjAwMENDMEIxOERFM0IyQkMyOTVDMEExNzhCMzAyNjNGRjNGRjYKKzoxMDUyMDAwMDYzRkZDOTAwMEMwQzUzNjNGRjA5ODk2MDc4OTkxODI5NjIKKzoxMDUyMTAwMEQyODVDOTkyMkI3MjlFMUREREU3NkVCODIzMkREMjI2NTIKKzoxMDUyMjAwMDk5MTM2OUQwMEI2MDAwMEREQTYwNTgwNzIxNjAwMDE3RjAKKzoxMDUyMzAwMDAwODg2MDdEODkwQTlBMUEyOTcyOUQ5QzEyOTkxNUNGNUYKKzoxMDUyNDAwMDk1REE2MEMwQjY1ODA3MUE2NTUxRjk4RDE0OEMxOERCRDEKKzoxMDUyNTAwMEQwOEREMDA2NkEwMjBENkQ1MTU4MDU4N0QzQTA5QTE0REYKKzoxMDUyNjAwMDY0QTFFMTgyQTA4NUExQjhBRjlGMTkwNTA1NDcwMjAyOUMKKzoxMDUyNzAwMDQ3OTUxOEMwNTE2M0ZFNjAyQjYxMDRDMDhCODkzMUMwMTMKKzoxMDUyODAwMEEwMDlGOTUwMDk4QTM4NkVCODFGMkM2MDY2QTJDQzBDQjAKKzoxMDUyOTAwMDBDNDcyQzY0NjY3Q0FCMTE5RjExOUUxQjhBMTU1ODA1MjgKKzoxMDUyQTAwMDk4OEUxQjhGMTFDMEEwMkE2NDY2OUYxMTY0RjBFNTg5NTcKKzoxMDUyQjAwMDEzODgxOTBGRkQwMjJFMEEwMDZERDkxNzJGODEwMzAwRTQKKzoxMDUyQzAwMDkwOERBRUZFMDA4MDg4OUY5MjAwOTA4QzAwODA4OEI4MDAKKzoxMDUyRDAwMDk5MDA5MDhDNjU1MTRFOEExMDg1MUE4QjMwMUZEREM4NUQKKzoxMDUyRTAwMDg4MTIyOTYwMDcwODU4MEEyQzgyOTQyRDYxMDQwRUNDN0MKKzoxMDUyRjAwMDBDMkM4Njk0NkZEQjNDMUNEREY0QUM5QzI5QzA4MDBCMkQKKzoxMDUzMDAwMDVENTBBMjk5MDkwOTQ3MjlDNDgwNjVEMERBMkU2MDBDNDYKKzoxMDUzMTAwMEMwRDAxRkREQjEwQ0U4MTFBRkVFQTc4ODIyODI4NTJEMjkKKzoxMDUzMjAwMEU0Q0YwMjQyMEIyMjg2ODVEMkEwRDEwRjhFMzAwRTBFMjIKKzoxMDUzMzAwMDQ3NjNGREEyQTI5QzBDMEM0NzJDNjQwNzdBQjZDRDhCNjgKKzoxMDUzNDAwMDYwMkU2MDBBMjgwQUZGMDhFODBDNjQ4MTBFMThERERENzMKKzoxMDUzNTAwMDgzMTY4MjEzQjMzOTAyMzMwQjJDMzQxNjJEMzUwQUMwNTEKKzoxMDUzNjAwMDIzOTIzMTlGMzBDMDIwOTIzMzA4QjIwMjA4RTgwMjkyQTMKKzoxMDUzNzAwMDM0OTgzMkMwODAyODY0MDcyQjYwMENEMkEwMUNERDk2QzQKKzoxMDUzODAwMDBDQkUxMUE3RUUyREUyODVBQ0JCMjhCNENGMEQ5RDBCNTIKKzoxMDUzOTAwMDJERTY4NUQxMEY4QjE4ODgxMzhEMzBCODhDMEQ4RjQ3NzMKKzoxMDUzQTAwMDBENDk1MEI0OTkwNDk5MTAwRDBENUYwNEREMTAwOUZGRUIKKzoxMDUzQjAwMDAyOUY4MDBEQkIwMjlCODE2NTUwOEQ4NTFBQjgzQUMwNTMKKzoxMDUzQzAwMEYxQzA4MDBDRjgzODA4MDg0MjY0ODA2QjFCREQ3NzE5NDcKKzoxMDUzRDAwMERENzgyOUI2N0U4RDE4QjBERDZEREEwNTAwQTA4ODAwNzUKKzoxMDUzRTAwMEMwOENDMEEwNjNGRUYzMDA4MjEzOEIxNjFEREQ4ODI4REQKKzoxMDUzRjAwMDYwMEFDMEUwMkVDNDgwMEQ4ODAyMDJCMjBCOTkyMzlGODAKKzoxMDU0MDAwMDIwQzBEMjk4MjI5RDIxMjI2MDBDQjJCQjBDMkQxMUE3ODYKKzoxMDU0MTAwMEREMjhEMjg1MDhCQjBCMThERDcwMkJENjg1QTgyMjJFN0YKKzoxMDU0MjAwMDI0Q0ZEMkEwRDEwRjlFMUI4NTFBMkE2Qzc0OEIxODVCRDcKKzoxMDU0MzAwMEZGMTY4RTFCNjNGRUEzMDBDMDg3QzA5MDBBRjkzODc5NUYKKzoxMDU0NDAwMDgwOTI2M0ZGODZDMDIwRDEwRjlFMUIyQTZDNzRDMEIxNkUKKzoxMDU0NTAwMDhEMTg1ODA1M0I4RTFCODUxQTYzRkU3RTg4NkI4MjEzNjAKKzoxMDU0NjAwMDg5MTYwOEJFMTEwRUNFMDIwMjkyMEI5RTI1QjQ5OTFFMUIKKzoxMDU0NzAwMERENjM5RjIwMEU4ODAyOTgyMkMwRUYwNEQ4MTEwRTg4QTkKKzoxMDU0ODAwMDAyOTgyNEMwRTQ5RTIxQzA4MEQyQTAyQjYwMEMyODY0MjYKKzoxMDU0OTAwMDA3MUNERDUxMENCRTExQTdFRTJERTI4NUFDQkIyOEI0NzQKKzoxMDU0QTAwMENGMEQ5RDBCMkRFNjg1RDEwRjAwMDAwMDZDMTAwNEMwQzAKKzoxMDU0QjAwMDIwRDEwRjAwNkMxMDA0ODYzM0MwNzFDMDMwNjAwMDAxMzEKKzoxMDU0QzAwMEIxMzMwMDMxMDQwMDc0MUEwNDYyMDE3NDYwRjFEMTBGMjkKKzoxMDU0RDAwMDZDMTAwNDAyMkEwMjAzM0IwMjVCRkZGNjFDREQzOTFCNDEKKzoxMDU0RTAwMEREODNDNzlGODhCMDA5QTkwMzA5OEEwMTlBQjA3OTgwMzIKKzoxMDU0RjAwMDFFQzBGMDBGRTQzMTFEREQzMDAwMDIwMDJCRDI4MjFFRjEKKzoxMDU1MDAwMEREN0MyQUMxMDIwRUJCMDIyQkQ2ODIwQUU0MzFEMTBGMDgKKzoxMDU1MTAwMDI4QzEwMkMxOTAwOTg4MDIwODA4NEYyOEM1MDIwOEU0ODIKKzoxMDU1MjAwMDMxRDEwRjAwNkMxMDA0QzBDMDBDRTQzMTEyREQyNTFBMUIKKzoxMDU1MzAwMEREMjIwMDAyMDAyOUEyODIxOERENzAxQkRENkUyNjIxMEIKKzoxMDU1NDAwMDAyMEI5OTAxMDg2NjAxMjlBNjgyMjYyNTAyMDZFNDMxOEMKKzoxMDU1NTAwMDE0REQ2QjE1REQ2NjIzNkE5MDIzMjYxNjg1NTAyNDI2RkMKKzoxMDU1NjAwMDE1MjUyNjE3MjIyQzUwRDEwRjAwMDAwMDZDMTAwOEQ2RUMKKzoxMDU1NzAwMDEwMkIwQTY0MjkxQUI0MUFERDBGMEQyMzExMUNERDEwM0IKKzoxMDU1ODAwMDBGMjUxMUI4MTg5ODEzMEU1NTExMThERDVEQUM1NUE4RUMKKzoxMDU1OTAwMDM4QUEzMzJDODBGRjJBODBGRUE5MzMyODhEMDEyOTgwNjgKKzoxMDU1QTAwMDAxMDhBQTExMjg4MDAwMENBQTAyMDg4ODExMDk4ODAyQTMKKzoxMDU1QjAwMDA4QUExQzI4OEMwODI4MTYwNDU4MDg2ODE0REQwMTBBNUIKKzoxMDU1QzAwMEE3MDIyNDQxMUEyQTMwODAyQjEyMDQwN0FBMjg1ODA4NUYKKzoxMDU1RDAwMDYzQjEzMzhCMTNCNDU1OUE2MDA0QUMyOEI0NjYyQzU2NkYKKzoxMDU1RTAwMDJCN0I2OUUwMTZERDNBOTQxMkMwNTBDMEQwMTdEQ0Y0NzIKKzoxMDU1RjAwMDlEMTVEMzcwRDQxMDJGNjA4MDJFNjA4MjlGMTY5RTE3NDkKKzoxMDU2MDAwMDg4MTY3Mjg5MUE4RDEyOEM0MDJBNjA3RjBEQ0MyODJCNDcKKzoxMDU2MTAwMDNBMjAwQ0FBMjg1ODA4NTFDMEIxMEFCRTM3MkUzNTQ4ODYKKzoxMDU2MjAwMDhGMTc3MkY5MUE4RDEyOEM0MDJBNjA4MTBEQ0MyODJCQUQKKzoxMDU2MzAwMDNBMjAwQ0FBMjg1ODA4NDlDMEIxMEFCRTM3MkUzNTRBNkMKKzoxMDU2NDAwMEIyMzNCNDQ0QjE1NTY5NTJCNkI0NjZDMDUwOEYxNUI4ODAKKzoxMDU2NTAwMDc3RDM3MEIyRkY5RjE1NkVGODk5RDEwRjZDMTAwNEMwMEMKKzoxMDU2NjAwMDIxRDEwRjAwNkMxMDA0MjcwQTAwMUNEQ0QzMUZEQ0U0REUKKzoxMDU2NzAwMDFFRENFNzFERENEMDFBREQxNDFCREQyMkMwMjgyNEIwOUYKKzoxMDU2ODAwMDAwNkQyQTc1QUE0ODI4ODA4MEMwOTE2NDgwNjEwMDQxMUQKKzoxMDU2OTAwMDA0MTVEQ0NCQzAzMTI1NTAzNjAwMzYxQTA2NTUwMTA1RkQKKzoxMDU2QTAwMDk1MzkwQzU2MTEwQzY2MDgyOTYyOTY2RTk3NEQwRDU5NjYKKzoxMDU2QjAwMDBBMjk5MjI0Njg5MDA4MTJERDA2MDI0MjA4NzI5OTNCN0EKKzoxMDU2QzAwMDIzNjI5NTEyRENDOENCMzQ5RjMwMDI4MjAyMEU0NDAyNjIKKzoxMDU2RDAwMEMwOTI5OTMxOTQzMjkyMzNBRDUyMjQ2Mjk1QzA5MDI0OTUKKzoxMDU2RTAwMDRDMTAyNDY2OTUyNEIwMDAyOTI0QTBBQTQyMjkyNDgwQzUKKzoxMDU2RjAwMEIxNzdCMTQ0MDQwNDQyMjRCNDAwRDEwRkQxMEZEMTBGQ0IKKzoxMDU3MDAwMDZDMTAwNDFBRENBQzJBQTAwMDU4MDIxQzVCRkZENTAyMDYKKzoxMDU3MTAwMDJBMDIwMzNCMDI1QkZGRDExQkRDQUFDOUExMkNCMTAyMDgKKzoxMDU3MjAwMEMwRDQwRENDMDIwQzBDNEYyQ0I1MDIwQ0U0MzFEMTBGQkYKKzoxMDU3MzAwMEMwQTAwQUU0MzExOERDQTAwMDAyMDAyRjgyODIxOURDMkMKKzoxMDU3NDAwMEIzMkVCMTAyMDlGRjAyMkY4NjgyMEVFNDMxRDEwRjAwODEKKzoxMDU3NTAwMDZDMTAwNEMwMjAwMkU0MzExNERDOUExNkRDOTcwMDAyQkQKKzoxMDU3NjAwMDAwMjI2MjgyMjM0MTAyNzMyRjA2MDNFNDMxQzAyMEQxNUMKKzoxMDU3NzAwMDBGMTlEQ0U2MUFEQ0U1Mjg0MTAyMEEyQTAxMDk4ODAxMzIKKzoxMDU3ODAwMDJBNjY4MjI4NDUwMjA4RTQzMTE1RENEQzEyRENFMTI1QkEKKzoxMDU3OTAwMDQ2MjFEMTBGNkMxMDA0MjkyMDA2Mjg5Q0Y5NjQ4MEEwQjIKKzoxMDU3QTAwMDJBOUNGRDY1QTA5NjhBMjg4RDI2MkYwQTA4N0FEOTA0OUUKKzoxMDU3QjAwMDJCMjIxRkM4QkQyQzIwNjQ2NEMwODEyRTIyMDkwRUFFOEUKKzoxMDU3QzAwMDBDNjZFMDc4MkIyMDBDMUVEQzdDMENCQzExQUVDQzI4QzcKKzoxMDU3RDAwMEMyODYxOURDN0E3OEYzMDI2MDAwQUQwOUI5MEEyOTkyMTEKKzoxMDU3RTAwMEEzNjg5MDA4MkUyMjAwMDlFRTBDNjVFMDlCMjlDMjg1NzMKKzoxMDU3RjAwMDFGREM4NDY0OTA5MjlGOTBDMEU0MUZEQzkxOUU5MTI4RUUKKzoxMDU4MDAwMDIwMEFDMEUwOUU5MzBGODgwMjk4OTI4ODIwMEY4ODAyOTkKKzoxMDU4MTAwMDk4OTQyRjIwMDc5QTk3OUQ5NjJGOTUwQTJFMjQwNzI4NTMKKzoxMDU4MjAwMDIwMDYyOTIwNjQ2ODgzMzMyOEMyODUxMkRDNkIyODhDMEIKKzoxMDU4MzAwMDIwQTJCMjJFMjRDRjI4QzY4NUMwMjBEMTBGQzAyMEQxRUYKKzoxMDU4NDAwMDBGMkEyMDZBMDExMTAyMEEyQTQxNjVBRjUyREEyMEMwRUMKKzoxMDU4NTAwMEIwNTgwNUVBNjRBRkU1QzAyMUQxMEYwMDY0OUZDODFGQUUKKzoxMDU4NjAwMERDNTgyRDIwMTY4RkYyMDlERDBDMDBGMTA0MDBERDFBNDIKKzoxMDU4NzAwMEFEQUQ5RDI5MTJEQzU5MjhDMjg1QTJCMjJFMjRDRjI4QjUKKzoxMDU4ODAwMDhDMjAyOEM2ODVDMDIwRDEwRkMwMjFEMTBGMDAwMDAwNzgKKzoxMDU4OTAwMDZDMTAwNDI2MEEwMDFCREM5RjE1REM0OTI4MjA2NTE3QzQKKzoxMDU4QTAwMERDNDYyODhDRkU2NDgwOTQwQzREMTEwREJEMDgyQ0QyNzIKKzoxMDU4QjAwMEY1MkJEMkY0MkVEMkY3N0NCMTNEQjRCQjJCRDZGNDdCQzIKKzoxMDU4QzAwMEU5MDUyQkQyRjYyQkQ2RjQ3Q0I5MkMyQUQyRjYyQUQ2QUYKKzoxMDU4RDAwMEY1MkFENkY0MDZFNDMxMDAwMjAwMjg3MjgyMkFGQUZGODMKKzoxMDU4RTAwMDAwNDEwNDI5MEEwMTJGNTEwMjAwOTkxQTBBOTkwMzA5NUIKKzoxMDU4RjAwMDg4MDEyODc2ODIwRkU0MzEyNjI0NjUyQkQyRjQ4RTVDNTEKKzoxMDU5MDAwMDJDRDJGNUIwRUU5RTVDN0JDQjE2MjlEMkY2MkZEMkY3QzcKKzoxMDU5MTAwMDBDQjgwQzA5RkYwQzA4RkYwQzBGMkYxNEM4Rjk2MDAwMUQKKzoxMDU5MjAwMDMyMEJDQTBDMEEyQTE0Q0VBOTJCNTEwMkMwQzIwQ0JCREUKKzoxMDU5MzAwMDAyMEIwQjRGMkI1NTAyMEJFNDMxRDEwRjAwREIzMERBOTkKKzoxMDU5NDAwMDIwNUJGRjk0MUJEQzc0NjRBRjVEMEM0RDExQURCRDYzMzcKKzoxMDU5NTAwMEZGQTgwMDAwMDZFNDMxMDAwMjAwMkY3MjgyMThEQzMwM0MKKzoxMDU5NjAwMDJFNTEwMjA4RkYwMjJGNzY4MjBFRTQzMUQxMEYwMDAwODMKKzoxMDU5NzAwMDZDMTAwNEMwMzAwM0U0MzExNkRDMTAxNURDMTEwMDAyOTkKKzoxMDU5ODAwMDAwMjQ2MjgyNzQ0NzIxMThEQzY0ODc1QzA4NDgwMTI4N0YKKzoxMDU5OTAwMDY2ODJDRDczMTlEQzYyMEMyQTExQUE5OTIyOTI4MzI5OUUKKzoxMDU5QTAwMDkyODQ3MjkxMDM4MjIwQ0MyOTJCNTEwMjBCRTQzMUMwRTYKKzoxMDU5QjAwMDIwRDEwRjAwMUZEQzVCMkU1MTAyMEZFRTAxMkU1NTAyOEQKKzoxMDU5QzAwMDBFRTQzMUIwMkRCMTdDOUM1QzEyREM1NjA4REQxMTJENEIKKzoxMDU5RDAwMDU2MUREMTBGNkMxMDA2MUJEQkY3MUVEQkY5MjJCMDAwNDEKKzoxMDU5RTAwMDFBREM1MjZGMjM3MjFEREMzOUMwNDgxOERDNTExRkRDRjEKKzoxMDU5RjAwMDRGREMxMEQ1QzA4M0YwMDA4MDg2MDA1MDhBNkQ0QTRGN0UKKzoxMDVBMDAwMDBGMzUxMTBEMzQwOTI0NDA4MDBCNTYwQTI5NjI5NEIxRDgKKzoxMDVBMTAwMDMzMEU1NTA5MjI1MTQ4MEY0NDExMEM0NDBBODc0MDA5OUUKKzoxMDVBMjAwMEE4MEMwMjg4MzYyMjUxNDkwNzg4MzYwODc3MENBODk5QjUKKzoxMDVBMzAwMDI5NjY5NDk3NDAyOTYyOTU4NzQxMDlBODBDMDI4ODM2MDcKKzoxMDVBNDAwMDA3ODgzNjA4NzcwQ0E4OTkyOTY2OTU5NzQxMDMwMzQyODEKKzoxMDVBNTAwMEIxMzgwODA4NDI5OEYwRDEwRjFDREMzNjEzREMzNzI3MjgKKzoxMDVBNjAwMEIwMDAyMzMyQjU2NDcwNTdDMDkxQzBEMDE2REMzNTE1MzQKKzoxMDVBNzAwMERDMzNDMDQwMkFDMDAwMDM4ODQzMjhDNDAwNkQ3OTNDNTEKKzoxMDVBODAwMDAwNDEwNEIxNDQwMDk3MUE3NzgwMTQ4RTUwMkZCMjk1Q0MKKzoxMDVBOTAwMDJEQjY5NUFGRUUyRUVEMjAwNkVFMzY5RTUwNjAwMDE4MjYKKzoxMDVBQTAwMDc3QTAwOTgzNTA5RDUwMjNCNjk1NjAwMDAyMjNCMjk1REMKKzoxMDVBQjAwMDIyM0QyMDA2MjIzNjIyQjY5NUI0NTVCOEJCRDEwRjAwNDAKKzoxMDVBQzAwMDAzODg0MzI4QzQwMEQxMEY2QzEwMDRDMDQwMDRFNDMxQTMKKzoxMDVBRDAwMDE1REMxRDAwMDIwMDg4NTAxM0RDMUNDQjgxNUJGRkJENzAKKzoxMDVBRTAwMDFDREMxQjBDMkQxMUFEQ0MyQkMyODIyQUMyODM5NDUwMUUKKzoxMDVBRjAwMDdCQUIxNDJFQzI4NDI5QzI4NTBBQkQwQzBFOTkwQzBERjUKKzoxMDVCMDAwMDk5MEMwOTI5MTQ2MDAwMDUwQkE5MEMwOTI5MTQ5OTMwNzYKKzoxMDVCMTAwMDE1REJBQzJBNTEwMjBBRTQzMTJBMkNGQzU4MDA0QjJCMkQKKzoxMDVCMjAwMDMyMDAwQUEyMDIyQkJDRkY5QjMwQ0NCNkM4QTREMkEwODQKKzoxMDVCMzAwMEQxMEYwMDAwMDRFNDMxMUVEQkEwMDAwMjAwMkRFMjgyNDAKKzoxMDVCNDAwMDJGQkFGRjJDNTEwMjBGREQwMTJERTY4MjBDRTQzMUQxN0EKKzoxMDVCNTAwMDBGMDAwMDAwNkMxMDA0RDEwRjAwMDAwMDZDMTAwNEMwOTYKKzoxMDVCNjAwMDIwRDEwRjAwNkMxMDA0MTNEQkZBQzBEMTAzMjMwOTIzRUEKKzoxMDVCNzAwMDMxOEZDMEEwNkYzNDAyNjAwMDhEMTlEQjhGMUJEQjkwNkEKKzoxMDVCODAwMDE3REJGMzBDMjgxMUE4NzcyNjcyODMyNTcyODIyQ0ZBNzIKKzoxMDVCOTAwMEZGNzY1MTQ3ODg1MDJFNzI4NTI1NUMwNDI1NzY4Mjc1RTQKKzoxMDVCQTAwMEU5MDUyNTcyODQyNTc2ODI3NjU5MjkyRTcyODQyRTc2MEYKKzoxMDVCQjAwMDgyMkU3NjgzMEFFNDMxMDAwMjAwMjM5MjgyMDAyMTA0QkYKKzoxMDVCQzAwMDJGQjEwMjAwRDYxQTBDNjYwMzA2MzMwMTIzOTY4MjBGMEEKKzoxMDVCRDAwMEU0MzEyNjcyODMyNTcyODI2MDAwMDIwMEQ4QTA3NjU5RDMKKzoxMDVCRTAwMDIyMEFFNDMxMDAwMjAwMjM5MjgyMDAyMTA0MDBEMjFBMkEKKzoxMDVCRjAwMDJGQjEwMjBDMjIwMzAyMzIwMTIyOTY4MjBGRTQzMUQyMkQKKzoxMDVDMDAwMDgwRDEwRjAwRDI4MEQxMEZDMDIwRDEwRjZDMTAwNERCRTcKKzoxMDVDMTAwMDMwODYyMDE1REI2ODI4MEEwMDI4MjUwMkRBMjAyOEIwMDMKKzoxMDVDMjAwMDAwMkNCMDA3MDU4ODBBMjg4MjRDMkQwQTAxMEI4MDAwNDEKKzoxMDVDMzAwMERCQTA2NUFGRTYxQURCNjEwQTRBMEEyOUEyQTNDN0JGNDcKKzoxMDVDNDAwMDc2OTEwMUQxMEYyQkE2QTNEMTBGMDAwMDZDMTAwNEMwRDgKKzoxMDVDNTAwMEQxQzdDRjFCREI1QjE5REI1ODE3REI1NjBDMjgxMUE4MEIKKzoxMDVDNjAwMDc3ODY3NTg1NzRDMEEwNzY1MTYyODg1MDhFNzdCNDU1NUEKKzoxMDVDNzAwMDk1NzQ3NUU5MDM4NTc2OTU3NDc2NTkyNzhGNzY5Rjc1QTcKKzoxMDVDODAwMDlGNzQwQUU0MzEwMDAyMDAyMzkyODJCNDJFMkZCMTAyRTUKKzoxMDVDOTAwMDAwRTEwNDAwRDYxQTBDNjYwMzA2MzMwMTIzOTY4MjBGMzYKKzoxMDVDQTAwMEU0MzE4Njc1ODM3NDc2MzkyODBBRTQzMTAwMDIwMDJFQzcKKzoxMDVDQjAwMDkyODJCNDIyMDAyMTA0MjRCMTAyMDBERjFBMENGRjAzRjcKKzoxMDVDQzAwMDBGRUUwMTJFOTY4MjA0RTQzMUQyODBEMTBGRDhBMDc2NTcKKzoxMDVDRDAwMDUxRDZEMjgwRDEwRjAwMDA2QzEwMDQyOTBBODAxRURCM0YKKzoxMDVDRTAwMDVEMUZEQjVEMUNEQjM1MEMyQjExQUNCQjJDMkNGQzJEQTQKKzoxMDVDRjAwMEIyODUwRkNDMDI5RUQxOUNEMEMwNTFDMDcwMTNEQjU5MkQKKzoxMDVEMDAwMDE0REI1ODE4REI1NjJBQjI4NUE4MjgwNDI0MEEyMzQ2MzcKKzoxMDVEMTAwMDkxQTk4NkI4QUEyQUI2ODVBOTg4Mjc4NDlGMjU2NDlGNTkKKzoxMDVEMjAwMEQxMEYwMDAwNkMxMDA0MTlEQjhCMEMyQTExQTlBOTg5NzIKKzoxMDVEMzAwMDkwQzQ4NDc5OEI3NjFCREI3OUFCQUMyQUMyODMyQ0MyRUUKKzoxMDVENDAwMDg0N0FDMTY4OEFBMDJCQkMzMEQzQTA2NEEwNUUwQjJCRTAKKzoxMDVENTAwMDBBMkNCMkEzMTlEQjQyNjhDMDA3MUREQjdGRDMwRjdEN0QKKzoxMDVENjAwMEM5NEFBOTI5Mjk5RDAxMjk5MDFGNjg5MTMyNzBBNjAzNkIKKzoxMDVENzAwMEQzQTBDQTlFNjg5MjEwQzdBRjJBQjZBMzJBMkNGQzVCOTgKKzoxMDVEODAwMEZGQjNEMjMwRDEwRjAwMDAxM0RCNzUwM0EzMDE4QzMxQjgKKzoxMDVEOTAwMDFEREIxMzBDOEMxNDBEQ0MwMTJDQjZBMzYzRkZEQzAwQUYKKzoxMDVEQTAwMEMwMjBEMTBGREEyMDVCRkZDQ0MwMjBEMTBGQzAyMEQxQTIKKzoxMDVEQjAwMDBGMDAwMDAwNkMxMDA0REIzMEMwRDAxOURBRkVEQTIwQ0UKKzoxMDVEQzAwMDI4MzAwMDIyMzAwNzA4NDgxMjA5ODgwQTI4ODI0Q0RDNTMKKzoxMDVERDAwMDIwMEI4MDAwMUJEQUY5MEM0QTExQUJBQTI5QTI4NDA5MTYKKzoxMDVERTAwMDI5MEIyOUE2ODREMTBGMDA2QzEwMDRDMDQxMThEQUYyRTcKKzoxMDVERjAwMDE3REFGNDBDMjYxMUE3MjcyNzcwMzhBODY2MjU2Mjg2QzMKKzoxMDVFMDAwMDAwNzEwNEEzNTUwMDQ0MUE3NTQxNDgyMjYyODQxNURCRDEKKzoxMDVFMTAwMDE1MDIzMjBCQzkyMjg4MjExN0RBRjEwODg0MTQwNzQ0Q0QKKzoxMDVFMjAwMDAxNzU0OTA1QzgzNEMwMjBEMTBGRDEwRjA4MDk0NzFEOUQKKzoxMDVFMzAwMERCNEFDMEIyOEUyMDFGREFERjBFMEU0M0FGRUMyQkM0NUMKKzoxMDVFNDAwMEEwMEZFRTBBMkRFNjI0MkE2Mjg0QzAyMDBBOTkwQjI5QUQKKzoxMDVFNTAwMDY2ODREMTBGQzAyMEQxMEY2QzEwMDREQjMwQzBEMDE4ODUKKzoxMDVFNjAwMERBRDVEQTIwMjUzMDAwMjIzMDA3MDg1ODBBMjg4MjRDN0IKKzoxMDVFNzAwMERDMjAwQjgwMDA4OTMxNzA5RTEyMUJEQUNGMEM0QTExOTYKKzoxMDVFODAwMEFCQUEyOUEyODQwOTI5MEIyOUE2ODREMTBGMDlDOTUyREEKKzoxMDVFOTAwMDY4NTMyNjAwOTEwNDE4REFDQUMwQTEyRjgxMTYwMEFBRkYKKzoxMDVFQTAwMDFBMEFGRjAyMkY4NTE2MUVEQUM0MEM0RDExQUVERDJDMjYKKzoxMDVFQjAwMEQyODQwQzJDMEIyQ0Q2ODREMTBGQzA4MTFGREFDMUI4MzAKKzoxMDVFQzAwMDlBMEEwQTQ3MkVGMTE2MDBBMTA0MDA4ODFBMDhFRTAyNjkKKzoxMDVFRDAwMDJFRjUxNjFEREFCOTBDNEMxMUFEQ0MyQkMyODQwQjJCNTAKKzoxMDVFRTAwMDBCMkJDNjg0RDEwRjAwMDA2QzEwMDREQjMwQzBEMDE5MUUKKzoxMDVFRjAwMERBQjFEQTIwMjgzMDAwMjIzMDA3MDk4ODBBMjg4MjRDREIKKzoxMDVGMDAwMERDMjAwQjgwMDAxQ0RBQUMwQzRCMTFBQ0JCMkFCMjg0MzkKKzoxMDVGMTAwMDBBMkEwQjJBQjY4NEQxMEY2QzEwMDRDMDQxMThEQUE2RTUKKzoxMDVGMjAwMDE2REFBODBDMjcxMUE2MjYyNjYwMzhBODcyMjUyMjg2MjQKKzoxMDVGMzAwMDAwNjEwNEEzNTUwMDQ0MUE3NTQxMDgyMjIyODQwMjMyRUMKKzoxMDVGNDAwMDBCRDEwRjAwQzAyMEQxMEY2QzEwMDQxNURCMDUwMjQ5RTYKKzoxMDVGNTAwMDE0Mjk1NjExMjQ1MjEyMDIwODQzMEY4ODExQzA3MzAwRUQKKzoxMDVGNjAwMDgxMDQwMDM2MUEwMDgxMDRDNzhGMDA3NzFBMDg3NzAzNkUKKzoxMDVGNzAwMDA3NDQwMTA2NDQwMjI0NTYxMkQxMEYwMDZDMTAwNjZFMkQKKzoxMDVGODAwMDIzMDI2MDAwQUM2NDIwQTdDMEEwODUxMDEzREFERDE2RTAKKzoxMDVGOTAwMERBRjRDMDQwQTZBQTJCQTJBRTBCMTk0MTY0OTA2NjY4NDEKKzoxMDVGQTAwMDkxNUQ2ODkyNTI2ODkzM0MyQUEyQUEyODNDN0YyODhDNzMKKzoxMDVGQjAwMDdGMEEwQTREMjk4MDAxMjg4MDAwMkFBQ0YyMDg4ODExNDYKKzoxMDVGQzAwMDA5ODgwMjc1ODk0NjJCM0QwMTI5QjAwMDJCQjAwMTA4RDQKKzoxMDVGRDAwMDk5MTEwQjk5MDI3QTk5MzRCODMzMkEyQTAwQjE0NDcyODQKKzoxMDVGRTAwMDQ5QjE2MDAwNEE3RkJGMDcxNURBREY2M0ZGQjkwMDAwREYKKzoxMDVGRjAwMDI1M0FFODYzRkZCMTAwMDAyNTNBRTg2M0ZGQTkwMDAwRjUKKzoxMDYwMDAwMDI1MEE2NDYzRkZBMUMwNUE2M0ZGOUMwMDAwNzA1RjA4MEIKKzoxMDYwMTAwMDI1MzRGRjA1OEMxNDJDMzRGRTcwQUYwQjBBOEQxNDJFMjIKKzoxMDYwMjAwMDNEMDEyQUU0MDEyREU0MDBEQTQwNUJGRDUwNjNGRkE3NDcKKzoxMDYwMzAwMEQxMEZEMTBGNkMxMDA0MUFEQTYyMTlEQTVGMUNEQUNBQjgKKzoxMDYwNDAwMDFCREFDQkMwODBDMDcxNjAwMDBEMDAwMDAwMjJBNDM4QjQKKzoxMDYwNTAwMEIxQUEyOTlDMTA3QjkxNUYyNjkyODY3OUMyMTU2RTYyNDcKKzoxMDYwNjAwMDYyQzAyMDZEMDgwQUIxMjIwMDIxMDQwMDc0MUE3NjRCMjgKKzoxMDYwNzAwMERCNjNGRkVFMjI5Mjg1MEQ2MzExMDMyNTE0NjQ1RkNGNkQKKzoxMDYwODAwMEQ2NTAwMzJENDM2REQ5MDM5ODIwQjQyMjA2NDQxNDZERDUKKzoxMDYwOTAwMDQ5MjI5ODIwOTgyMTk4MjI5ODIzOTgyNDk4MjU5ODI2NzgKKzoxMDYwQTAwMDk4Mjc5ODI4OTgyOTk4MkE5ODJCOTgyQzk4MkQ5ODJFREMKKzoxMDYwQjAwMDk4MkYyMjJDNDA2M0ZGOTcxRURBNDAyN0U2ODAyN0U2QzAKKzoxMDYwQzAwMDgxRDEwRjAwQzAyMDYzRkY4MzAwMDAwMDZDMTAwNEMwNkEKKzoxMDYwRDAwMDYyQzA0MTEyREEzQjFBREEzNzEzREE1MjJBQTAwMDIzREYKKzoxMDYwRTAwMDMyMkQxOURBOUYyQkFDRkUyOTkyQUU2RUEzMDI2MDAwMEUKKzoxMDYwRjAwMDhFMDkwRTQwMkQxQUMyQzJDRDBFREMzOTJDMjUxQTY0MzEKKzoxMDYxMDAwMEIwODk1QkZGOUUxNURBOUExQURBOTUyQjNBRTgwQTNBQkIKKzoxMDYxMTAwMDAxNTgwNTkyMkIyMTFBMEFCQjI4RDNBMDlCNTA1ODA1ODEKKzoxMDYxMjAwMEE5MkI1MjAwMEFCQjA4MkEwQTAwNTgwNUE4MTVEQTkxQzMKKzoxMDYxMzAwMDJEMjEwMjJDM0FFODBDM0MyODA0REQwMjJEMjUwMjlDN0UKKzoxMDYxNDAwMDUwNTgwNUEwOEI1MEFBQkJDMEExNTgwNUEwMUNEQThBRTQKKzoxMDYxNTAwMDJEMjEwMjBDM0MyODA2REQwMjEzREE4ODJEMjUwMjlDMzUKKzoxMDYxNjAwMDMwNTgwNTk4OEIzMEFBQkJDMEEyNTgwNTk4MkEyMTAyNDYKKzoxMDYxNzAwMEMwQjQwQkFBMDIwQTBBNEYyQTI1MDI1ODA1QUNEMTBGNTcKKzoxMDYxODAwMDI0MjQyM0MzQ0MyQzI1MUE2M0ZGNzYwMDE4REE4MDFDNDQKKzoxMDYxOTAwMERBN0MxOURBN0QxQkRBN0IxN0RBNEY4NTIwMkUwQUZEQUYKKzoxMDYxQTAwMDFGREE3QzJEMjAzNjI0RjQ3QTI0RjQ3RTI0RjQ4MjBFMjcKKzoxMDYxQjAwMEREMDEyNEY0ODYyRTBBRjcwNzU1MjgwNkREMDJDMDc1OTYKKzoxMDYxQzAwMDBFREQwMTA1MDUwNkFCNUJBOTU5QzBFOEFDNUMyNEM0MzMKKzoxMDYxRDAwMEFCMEVERDAyMjdDNEFDMkUwQURGQTg1NTI3QjRFQzBFQTcKKzoxMDYxRTAwMEREMDEyNEI0RUJDMkUwMjc5NDJDMEVERDAyMjQ5NDJCQjUKKzoxMDYxRjAwMDJFMEE4MDBEMEQ0NjI3NTQ2QzI0NTQ2QjBFREQwMjJEQTMKKzoxMDYyMDAwMDI0MzY2M0ZFRkMwMDAwMDA2QzEwMDQyQTBBMzAyQjBBQkUKKzoxMDYyMTAwMDAzNUJGRjREMTJEQTUzQzM5MDI5MjYxNkMzQTFDMEIzMDYKKzoxMDYyMjAwMEMwOEEyODI2MTc1QkZGNDhDMDNDQzNCMTJCMjYxNjFBMkMKKzoxMDYyMzAwMEQ5RTQyQUEwMjAyMzI2MTc2NEEwNzlDM0EyQzBCMTVCQTkKKzoxMDYyNDAwMEZGNDJDM0EyQzBCMTVCRkY0MEMzQzIyQzI2MTZDMkFGM0YKKzoxMDYyNTAwMEMwQjEyMzI2MTc1QkZGM0NDMjhGMjgyNjE2QzBGRTJGMzUKKzoxMDYyNjAwMDI2MTdDMkUyMkUyNjE2MkEwQUExQzBCMUMwRDgyRDI2QjIKKzoxMDYyNzAwMDE3NUJGRjM1MkEwQUExMkEyNjE2QzNBNkMwQjNDMTkyMEUKKzoxMDYyODAwMDI5MjYxNzVCRkYzMUMzQzYyQzI2MTZDMUIzMkEwQUEyRTIKKzoxMDYyOTAwMDJCMjYxN0MwQjM1QkZGMkMyOTBBQTIyOTI2MTZDMTg1MUQKKzoxMDYyQTAwMDI4MjYxN0MyRkIyRjI2MTZDMEU3MkUyNjE3MUREQTM5MUYKKzoxMDYyQjAwMDJEMjYxMEQxMEZDM0EyQzBCMzVCRkYyMzYzRkY4MjAwNjIKKzoxMDYyQzAwMDZDMTAwNDFDREEwMzFCRDlFRDE4REEzMzE3REEzNDE2MTQKKzoxMDYyRDAwMERBMzQxNURBMzRDMEUwQzBENDE0RDlGRjFGRDlCOUMwRkMKKzoxMDYyRTAwMDI4OEZGMDZEMkEzNkRBQzBEOUMwN0M1QjAyMEZDOTBDNEEKKzoxMDYyRjAwMDFDRDlGOTBDOUMyOEE4QzNBNkMyMkEzNjgwMkEyNTg0NUEKKzoxMDYzMDAwMEE0QzJBN0NDMkQyNDhDMkIyNDhBMkIyNDg3MkUyNDhCNEIKKzoxMDYzMTAwMEIxQkIyRTM2OUYyQzM2OUUyQzM2OURCMUFDMUNEOUQ3RTYKKzoxMDYzMjAwMDFCREEyMkMwMjg2RDJBMzNEQUMwRDlDMDdDNUIwMjBGODkKKzoxMDYzMzAwMEM5MEMxQ0Q5RTgwQzlDMjhBOEMzQTZDMjJBMzY4MDJCRkQKKzoxMDYzNDAwMDI1ODRBNEMyQjFCQkE3Q0MyRDI0OEMyRTI0OEIyQTI0NTcKKzoxMDYzNTAwMDhBMkUzNjlGMkMzNjlFMkMzNjlEQjFBQ0MwNzkxOUQ5MjkKKzoxMDYzNjAwMEQ4MUJEQTE0MTNEQTEyMUFEQTEyMThEQTEzMTREOUQ5N0MKKzoxMDYzNzAwMDE2REExMzA0RjQyODEyREExMjA0NjYwQzA0MDUwNkEyRDUKKzoxMDYzODAwMDUyQTg1OEFBNUFBMzUzOUIzMDI5QTUwMDI3ODQ4QUMwMzMKKzoxMDYzOTAwMDkxQzBBNTJBODQ4QzI5ODQ4QjE3REEwQjE4REEwQUE3RjYKKzoxMDYzQTAwMDU3MjYzNjFEMjYzNjFFMkUzNjFGMTZEQTA4MTNEQTA4MzMKKzoxMDYzQjAwMEE2NTUwNDMzMEMyODI2QzgyRTc1MDAyRDU0QUMyRTU0MzcKKzoxMDYzQzAwMEFCMkU1NEFBMjMyNkU2MjMyNkU1MkUyNkU3RDEwRjAwN0UKKzoxMDYzRDAwMDZDMTAwNjEzRDk5NDE3RDlFMjI0NzIzRDIyMzI5MzdGQjAKKzoxMDYzRTAwMDJGMEI2RDA4MDUyODMyOTM3RjhGMDI2M0ZGRjNDMEM0MjMKKzoxMDYzRjAwMEMwQjAxQUQ5NzNDMDUxRDk0MDA0NTkzOTI5QTQyMDZFQUMKKzoxMDY0MDAwMDQ0MDIwQkI1MDJDMzI4MUVEOTZFRERCMDI1RTQyMjA1NzcKKzoxMDY0MTAwMDJEMzkyREU0MjFDMDUwMUVEOUVGMTlEOURGMThEOURGNEQKKzoxMDY0MjAwMDE2RDlFMTFERDlFRDk0MTAyQTcyNDUxN0Q5QUI2REE5ODMKKzoxMDY0MzAwMDRCRDQ1MEIzNTU3QTVCMTdERjUwNzU2QjA3MUZEOTYwOEIKKzoxMDY0NDAwMDhGRjAwRjVGMEMxMkQ5QTMwMkYyMjhBRTIyMjJENjgxNjAKKzoxMDY0NTAwMEQ1NDAxM0Q5QTA3NDZCMDcxNUQ5NUE4NTUwMDU0NTBDNDIKKzoxMDY0NjAwMDAzNTMyOEIxNDVBNzNGQTgzMkE5MzMyMjM2OUQyMjM2Q0YKKzoxMDY0NzAwMDlFMjQzNjgwMkIzNjlGMkJGNDhCMkNGNDhDMTREOTY5RjgKKzoxMDY0ODAwMDI0NDI0REMwMzAwNDE0MTRDODRDNkQwODA2QjEzMzA0QzYKKzoxMDY0OTAwMDE0MTRDODQyNjNGRkYyMDAxNUQ5NDdDNDQwMDAzMTA0MDgKKzoxMDY0QTAwMDFBRDk0OEMwRDE5M0EyMDBERDFBQzEzOEIwREQ5REEzMkUKKzoxMDY0QjAwMDE4RDk1RDJCODI0RDI5ODI0RTI5QTUyMDI4ODI1MzdBMzYKKzoxMDY0QzAwMDg3MUUyQzU0MDA4RTEwNkZFNDVEMTJEOTNEMkYyMTIxQzAKKzoxMDY0RDAwMDIzMjEyMDJGMjUxRjA0MzMwQzIzMjUyMDIzMjUxRUQxMDMKKzoxMDY0RTAwMDBGQzA2MjE4RDk5Rjg4ODA3RTg3RDk4OTEwMjY1NDAwRjIKKzoxMDY0RjAwMDZGOTQxOTFCRDkzMzJBQjEyMDBBMUExNDA0QUEwQzJBNDIKKzoxMDY1MDAwMEI1MjAyQUI1MjEyQUI1MUUyQUI1MUZEMTBGMUJEOTJDQkIKKzoxMDY1MTAwMDJBQjEyMDBBMUExNDAzQUEwQzJBQjUyMDJBQjUyMTJBNjYKKzoxMDY1MjAwMEI1MUUyQUI1MUZEMTBGMDAxQ0Q5MjYyQkMxMjEyREMxQTQKKzoxMDY1MzAwMDIwMkJDNTFGMDNERDBDMkRDNTIwMkRDNTFFRDEwRjAwM0UKKzoxMDY1NDAwMDZDMTAwNjE5RDkxRjE0RDk4NjEyRDkzNjE1RDlBM0M3Q0MKKzoxMDY1NTAwMDNGQzBFMDJFNTZBODJFNTZBOTJFNTZBQTJFNTZBQjIzODMKKzoxMDY1NjAwMDI2MjkxOEQ5NDZEQjEwMUNEOTlEQzBENDJBNDI0NTJEQjYKKzoxMDY1NzAwMDE2MDEyQzE2MDAwMEIwODkwQTg4MEM5ODkwNUJGRjk0RDUKKzoxMDY1ODAwMDJDMjJFMzE4RDkwRjBDNUMxNDlDODQyQjIyRTQ4Qzg0RkQKKzoxMDY1OTAwMEIxQkIwQjVCMTQwQ0JCMEM5Qjg1MkEyMkU1MEE1QTE0NzkKKzoxMDY1QTAwMDJBODYwNjI5MjJDRDA5NTkxNDI5ODYwNzJGMjI4OTJGRTgKKzoxMDY1QjAwMDg2MDk1QkZGNDM1QkZGMTQyMzQ2M0JDMUIwMUVEOTAwMzUKKzoxMDY1QzAwMDFERDk2MDJBRTEwMjJENDYzQTBCQUEwMjBBMEE0RjJBNzcKKzoxMDY1RDAwMEU1MDI1ODA0OTY1QkZFQkQ1QkZFOTZDMDUwQzBCMDE2NDcKKzoxMDY1RTAwMEQ4RjYxNEQ4RkUxN0Q5NkZDMEMwQzczRTkzMTIyQzI2MTgKKzoxMDY1RjAwMDJEQzAzMDYwMDA0NDAwMDAwMDdGOUYwRkIxNTUwOTE5ODUKKzoxMDY2MDAwMDE0NjU5RkY0QzA1MDBBQTkwMjdGQTdFRjE4RDhFQURBRjAKKzoxMDY2MTAwMDUwMDg1ODBBMjg4MjJDMkIwQTAwMEI4MDAwMDA1MTA0RDUKKzoxMDY2MjAwMEQyQTBDMDkxQzdBRjAwOTkxQTBBOTkwMzk5MTJDRTM4MjcKKzoxMDY2MzAwMDY0MjA2QkQzMjAyQjIwMDcyNTE2MDMyQzEyMDIyQTYyMUMKKzoxMDY2NDAwMDgyN0NBODYzMThEOERDMDExMTAyMDg1ODBBMjg4MjJDMjEKKzoxMDY2NTAwMERBNTAwQjgwMDBEMkEwNjQzRkQ1OEEzMTBBOEExNDA0MzQKKzoxMDY2NjAwMEFBMDFDODJBMkIyMjAxMEI4QjE0MDRCQjAxN0JBOTQ1NkMKKzoxMDY2NzAwMEREQTA3QTdCMDgxREQ4RDIyREQyMDAwREFEMENEQjMwMDkKKzoxMDY2ODAwMDE5RDhDRDFBRDkxNDg4MTMwQURBMjhEQzgwMUREOTUxRkIKKzoxMDY2OTAwMDA5ODgwQTI4ODIzQzBEQUEwODBCODAwMDY1MkY5M0QzMzUKKzoxMDY2QTAwMDIwQzBCMDYzRkY5NDAwMDA3RkFGMzRCMTU1MDA1MDA0QTgKKzoxMDY2QjAwMDBBMDkxOTYzRkY0MkRBQjA3QjdCMDgxQUQ4QzEyQUEyMDMKKzoxMDY2QzAwMDAwMEFCQTBDMUJEOTA0OEMzMTBCQUIyODBDOEExNDFDQTEKKzoxMDY2RDAwMEQ5NDFBQ0JCMUNEOTQxMDRBQTAxMkJDNjgxNjNGRjhGRjEKKzoxMDY2RTAwMDY0NUY2MEMwNTBDMEIwQzdDRTlDMTI2M0ZGNTUwMDAwMEQKKzoxMDY2RjAwMDZDMTAwNDI3MjIxRUMwODAwOEU0MzExQkQ4QUYwMDAyQjIKKzoxMDY3MDAwMDAwMkFCMjgyMTlEOEFGMDAzMTA0QzA2MTAwNjYxQTI5OEMKKzoxMDY3MTAwMDkxMDIwQTZBMDIyQUI2ODIwOUU0MzExNUQ5MEMwQzM4QjIKKzoxMDY3MjAwMDExQTg1MzI4MzI4MjI0MzI4NDJBOENGQzc4NDExMDI5MDMKKzoxMDY3MzAwMDIxMDIyQTM2ODI5N0EwMDk2OTAyMjkyNTAyRDEwRjAwNzkKKzoxMDY3NDAwMDJCMjEwMjJDMzI4NTBCNkIwMjJDQ0NGQzJDMzY4Mjk3MzEKKzoxMDY3NTAwMEMwMkIyNTAyRDEwRjAwMDA2QzEwMDRDMEU3MUREODkyOTkKKzoxMDY3NjAwMDFDRDg5NDBENDkxMUQ3MjA4QjIyOEEyMDBCNEIwQkQyQjkKKzoxMDY3NzAwMEEwMDdBODBDOUI3MjI4OENGNEM4MzQ2RjhFMDI2MDAwQUUKKzoxMDY3ODAwMEEzMUZEODhBQTI5OEFGN0I3OEIzMzRDOTNEQzA4MUMwMUIKKzoxMDY3OTAwMEYwMDI4RjM4MEYwRjQyQzlGQTJDRDY3RUQ1MjA2RDRBRjEKKzoxMDY3QTAwMDA1MDAzMDg4MDA1MDhDODg3MDA4OTgwODc4QjE2REQyNDgKKzoxMDY3QjAwMEEwOTg3MEQxMEZDMEYwMDM4RjM4N0ZFMERFNjNGRkQ4NjAKKzoxMDY3QzAwMDAyN0IwQ0FGQkIwQjk5MEM2NDMwNDdEODMwQzBGMUMwRDIKKzoxMDY3RDAwMDUwMDJGNTM4MDUwNTQyNjQ1MDc5MkNENjdFMEIzNjEyRUUKKzoxMDY3RTAwMDJGNkMxMDBGNEYzNjZERkEwNTAwODA4ODAwMjA4QzA2NDQKKzoxMDY3RjAwMDQ0MENDMDgxQzA1MDAzQjIwODIzN0MwQzAzODUzODA1Q0IKKzoxMDY4MDAwMDA1NDI2NDUwNUEyQ0Q2N0VEMzBGNkQ0QTA1MDAyMDg4NkQKKzoxMDY4MTAwMDAwMzA4Q0QyQTBBNzk4QkM4ODk4NzBEMTBGRDJBMEJDQjEKKzoxMDY4MjAwMDc5OTk3MEQxMEZEMjMwMkJBRDA4QzBGMUMwNTAwQkY1NjMKKzoxMDY4MzAwMDM4MDUwNTQyQ0I1NDJDRDY3RTA4M0YxNDI2MEExMDBGOEIKKzoxMDY4NDAwMDY2MEMwNjQ2MzY2RDZBMDUwMDIwODgwMEIwOEM4MjcwQTIKKzoxMDY4NTAwMDYzRkYyRDAwQzA1MDAzRjUzODc1RTA4MDYzRkY3QTAwQjgKKzoxMDY4NjAwMEMwNjAwMjg2Mzg3NkUwOUY2M0ZGOTkwMEMwNTAwM0Y1NTAKKzoxMDY4NzAwMDM4NzVFMEM0NjNGRkJFMDA2QzEwMDRENjIwNjg1MjBGNjgKKzoxMDY4ODAwMDY5NTMyNERBMjBEQjMwREM0MDU4MDBGN0QyQTBEMTBGNjYKKzoxMDY4OTAwMERBMjBEQjMwREM0MDU4MDBGNDlBMjQyNDI0MEVDMDIxOTYKKzoxMDY4QTAwMDIyNjQwRkMwMjBEMTBGMDBCODNCQjA0QzJBMkM3NDg5NTEKKzoxMDY4QjAwMDI0MkQyMDBFMkUyMDBGQTREREIxRUUyRTI0MEZCMERERUUKKzoxMDY4QzAwMDJEMjQwRTI4OTAwNzJEOTAwM0E0ODhCMDg4QjFERDJEQ0IKKzoxMDY4RDAwMDk0MDMyODk0MDc1QkZGQTA2OTUxMURDMEUwODIyNDJBMUQKKzoxMDY4RTAwMDYwMEYxOEQ4QkYyQTI0MDMyOTYwMEU4RjIwMjkyNDA3OUYKKzoxMDY4RjAwMDA4RkYwMjlGMjA5RTY0RDEwRkMwMjBEMTBGMDAwMDAwMkUKKzoxMDY5MDAwMDZDMTAwNDk0MjMxOUQ4QjdDMEIzMDgzQTExMEJBQTAyMkIKKzoxMDY5MTAwMDk5MjAxOUQ4Mjk5QTIxMTZEODI3QzA1MDI4OTI5RDI1NDgKKzoxMDY5MjAwMDY0QTIyODhDMTgyODk2OUREMTBGMDAwMDZDMTAwNDI4QjIKKzoxMDY5MzAwMDIwNjZDMDM4MjMyNDA2Qjc4ODI4MjQ2NkQxMEYwMDAwQkIKKzoxMDY5NDAwMDZDMTAwNjBEM0MxMTFBRDgxOUQ4MjAwMzVCMEM4NjIyNTYKKzoxMDY5NTAwMDBENTUxMTgyMjFBQTg5MDIzMjBCOTI4MTA1NjMwQzkzOTUKKzoxMDY5NjAwMDgyMEM1NTBDNzkyQjU0Q0I1MzFDRDgxMTFERDgwRkMwNTkKKzoxMDY5NzAwMEY3QTI1NkMwMzFDMEEwMDQzQTM4MEEwQTQyNzY5MzQzQkYKKzoxMDY5ODAwMDA0NDMwMkM5QUIyQ0Q2N0VEMzBGNkRCQTA1MDAyMDg4MTQKKzoxMDY5OTAwMDAwMzA4QzgyODFBMjUyNzI5MTdEOTI4MTgzODJDODNFQTYKKzoxMDY5QTAwMEQxMEZDMDcxQzA2MDAyNzYzODc2RjBEQjYzRkZENTAwOEUKKzoxMDY5QjAwMEMwMjBCQzg5OTk4MTk5ODA5MjgyRDEwRjIyMkRGODkyQjIKKzoxMDY5QzAwMDgxNjNGRkEyMTlEN0ZBMDI4NjBDQTk2Njk2MTFEOTQwRjUKKzoxMDY5RDAwMDA2MzYxMjk2MTAwNkJCMEM2NEEwNDQyQ0Q2N0U4QTEwOTQKKzoxMDY5RTAwMEQzMEY2REFBMDUwMDIwODgwMDkwOENCQzgyODMxMUMwNTMKKzoxMDY5RjAwMEUwQTQzMzI0MEEwMTAzNEUzODBFMEU0MkNBRUMyQ0Q2MTIKKzoxMDZBMDAwMDdFNkRCQTA1MDAyMDg4MDAzMDhDODIxMTAyNTIwQ0EyRTMKKzoxMDZBMTAwMDgyQkMyMjkyODE2M0ZGODNCQzgyOTI4MTYzRkY3QzAwRUYKKzoxMDZBMjAwMEMwNjAwMjM2Mzg3NkYwQjU2M0ZGQUYwMEMwNzAwMjQ3MzEKKzoxMDZBMzAwMDM4NzdGMENDNjNGRkM2MDA2QzEwMDQxNEQ3RUJDMTUyNUEKKzoxMDZBNDAwMEE0MjRDQTMxMjgyMjFENzM4MTFDMjkyMTAyNjU5MDE2QjUKKzoxMDZBNTAwMDJBMzAwMDc1QTkxMjAyMkEwMjAzM0IwMjJDMzAwN0MwMUIKKzoxMDZBNjAwMEQyNTgwMUQ1NjUzRkRDRDEwRjJCMzAwNzAzQkIwQjBCOTAKKzoxMDZBNzAwMEJBMDI3NEIzMDIyQUJERjhEM0EwNjNGRkM0MDAwMDAwQjkKKzoxMDZBODAwMDZDMTAwNDI5MjAwNkMwNzA2RTk3NDEyOTIxMDJDMDhGMjYKKzoxMDZBOTAwMDJBMjAxNEMwQjYyQjI0MDYwNkFBMDIyQTI0MTQ3OTgwQzAKKzoxMDZBQTAwMDAyMjcyNTAyMkEyMjFFMkMyMjFEN0FDMTBFQzhBQkRBMkIKKzoxMDZBQjAwMDIwREIzMDJDMEEwMDAzM0QwMjVCRjdGOTY0NTA4OTJEN0UKKzoxMDZBQzAwMDIxMDIwRDBENENDOUQzQzAyMEQxMEYwMDAwMkU5Q0ZCMUMKKzoxMDZBRDAwMDY0RTA5NjJGMjEwMjBGMEY0QzY1RjBBNTFBRDdCNzFFNjAKKzoxMDZBRTAwMEQ3QjUyOUEyOUVDMDhBNzk4QjcxMkJFMjI2NjhCMDA0QTMKKzoxMDZBRjAwMDhDMjA3QkM5NjYyOUEyOUQxRkQ3QjI2NDkwNUQ5NzkwQjgKKzoxMDZCMDAwMEMwQzMxREQ3QzYyQjIxMDQ5RDk2MDhCQjExMENCQjAyMjgKKzoxMDZCMTAwMDlCOTE5Qjk3MUNEN0MzQzA4NTI3RTRBMjJCQTI5RDI4REQKKzoxMDZCMjAwMDI0MDY4REZBMjgyMTAyQjBERDJCQkMzMDJCQTY5RDlEQkEKKzoxMDZCMzAwMEZBMEM4ODAyMjgyNTAyQzhEMkMwMjBEMTBGOEVGOTEyODMKKzoxMDZCNDAwMEQ3QjkyRTI2ODlDMDIwRDEwRjI4MzAwMDY4ODkzOERBQkQKKzoxMDZCNTAwMDIwREIzMERDNDA1ODAwNDQ2M0ZGNjMwMDAyMkEwMjJCMzQKKzoxMDZCNjAwMDBBMDY1ODAwRDMyMjBBMDBEMTBGNjU1MDEwMjkzMDAwQzAKKzoxMDZCNzAwMDY4OTkyNDAyMkEwMjAzM0IwMkRDNDA1ODAwM0JDMDIwRjMKKzoxMDZCODAwMEQxMEZEMjcwRDEwRjAwMDAyQTJDNzQwMzNCMDIwNDRDQTkKKzoxMDZCOTAwMDAyNUJGRUYxNjNGRjI3MDBEQjMwREM0MDJBMkM3NDVCRDQKKzoxMDZCQTAwMEZFRUVDMDIwRDEwRjAwMDA2QzEwMDRDODNGODkyNjg4N0IKKzoxMDZCQjAwMDI5QTM5OTk5MjYwOTg4MEMwODA4NDgyODI1MjVDQzUyMkMKKzoxMDZCQzAwMEMwMjBEMTBGREI0MDJBMkM3NDVCRjkyRkQyQTBEMTBGNEIKKzoxMDZCRDAwMDZDMTAwNEQ4MjBENzMwODIyMjBENDUxMTA1MjIwQzkyNkEKKzoxMDZCRTAwMDgyNjQyMDc0MDc0MjBCMTNENzcxRDQyMEEzODM3MzIzQ0MKKzoxMDZCRjAwMDAyMjQyREY4ODU4MDc0NTE0Q0JDODJDMDkwNkQwODE2MUIKKzoxMDZDMDAwMDAwNDA4ODAwNzA4Qzc3MzkwM0Q3MjBDMDkxODY4MDc0NEIKKzoxMDZDMTAwMDM5MDFENDIwNzQ2MTAyNjNGRkUyQ0E5OEMwOTdDMDQxNzEKKzoxMDZDMjAwMDFCRDdGMkMwQTAwQjhCMEMwQjRBMzgwQTBBNDJDOUFBMjgKKzoxMDZDMzAwMDFERDc1RTFDRDc1RjJDRDY3RUMxNDBEMzBGNkQ0QTA1OTEKKzoxMDZDNDAwMDAwMjA4ODAwMzA4Qzk3ODBEMjcwRDEwRkJDOEZDMEUwQkMKKzoxMDZDNTAwMDBGNEUzODdFOTBFMjYzRkZENkJDODI5MjgxOTI4MEMwNTQKKzoxMDZDNjAwMDIwOTI4MkQxMEYwMDAwMDA2QzEwMDZDMEQ3MUNENzRFQjYKKzoxMDZDNzAwMDFCRDc1MDBENDkxMUQ3MjAyRTIyMUYyODIyMUQwRTRFNDIKKzoxMDZDODAwMDBCRDI4MDA3OEEwQzJFNzYxRjJBQUM4MEM4MzQ2RkFFRDgKKzoxMDZDOTAwMDAyNjAwMENCMkYwQTgwMUFENzU0QTI5RUFBN0E3RUEzNDQKKzoxMDZDQTAwMDNGQzkzRkMwRTFDMDUwMDJFNTM4MDUwNTQyQ0E1NTJCMzcKKzoxMDZDQjAwMEM2N0VEQjIwRDMwRjZENEEwNTAwMzA4ODAwQjA4QzJFRDUKKzoxMDZDQzAwMDcyMURBRTlFMEVBNTBDNjQ1MDg2RDI4MDJFNzYxREMwMUQKKzoxMDZDRDAwMDkxMjk4NDAzRDEwRkMwNTAwM0U1Mzg3NUQwRDM2M0ZGRTkKKzoxMDZDRTAwMENEMTVENzQxMDI3RTBDQTVFRTY0MzA1MUMwQTEyNTBBMTYKKzoxMDZDRjAwMDAwMDJBNTM4MDMzQTAyMDUwNTQyNjQ1MDkyMkJDNjdFNzUKKzoxMDZEMDAwMDBFMzUxMjk1MTAyNTVDMTAwNTQ1MzZEMzBGNkQ1QTA1Q0EKKzoxMDZEMTAwMDAwQTA4ODAwMjA4Q0MwQTFBM0UyQzA1MDIzRkE4MDAzMDkKKzoxMDZEMjAwMDczMEMwM0E1MzhBRjczMDUwNTQyNjQ1MDcyMkJDNjdFMDEKKzoxMDZEMzAwMDg1MTAwNTQ1MEM2RDVBMDUwMDIwODgwMDMwOENEMjgwRTYKKzoxMDZENDAwMEMwQTEwRTlCMENBQjdCQUZCQjJCNzYxRDJBODQwM0QxNUQKKzoxMDZENTAwMDBGRDI4MEMwQzFBRjdEMkQ3NjFEMkM4NDAzRDEwRjAwRDIKKzoxMDZENjAwMEQyMzAyRThEMDhDMEYxQzA1MDBFRjUzODA1MDU0MkNCNEIKKzoxMDZENzAwMDU5MkJDNjdFMEEzRjE0QzE2MDBGNjYwQzA2NDYzNkQzRjcKKzoxMDZEODAwMDBGNkQ2QTA1MDAyMDg4MDBFMDhDMjI3MjFENjNGRjAzRUUKKzoxMDZEOTAwMEMwNjFDMDUwMDM2NTM4NzVEODAyNjNGRjYyNjNGRjVDNTEKKzoxMDZEQTAwMEMwNTAwMkE1Mzg3NUQwODc2M0ZGODEwMEMwNjAwM0Y2MkMKKzoxMDZEQjAwMDM4NzZEMEJGNjNGRkI5MDA2QzEwMDQyQTIwMTUyOTIwNTMKKzoxMDZEQzAwMDE2MTRENkZGMEE5OTBDQ0I5RDJFMjAwQjA0RUQwOTJCMkYKKzoxMDZERDAwMEQxMjA4RjI4MDlCQzM2QUNBQTBDQkIwQzJCRDUyMDBBQkQKKzoxMDZERTAwMDBBNDcyQTI0MTVDQUFGOEI0Mzg5NDJCMEE4MDA5MTA0RjAKKzoxMDZERjAwMDAwODgxQUE4RkYwRkJCMDI5QjI3OEYyNjBGQjgwQzc4QkMKKzoxMDZFMDAwMDNCMUFDMDIwRDEwRjAwMDAyOTIxMDJDMEEyMEE5OTAyMUEKKzoxMDZFMTAwMDI5MjUwMkMwMjFEMTBGMDA4QjI3NjNGRkRDMkJEMTIwNTUKKzoxMDZFMjAwMDBDQUEwQzBBMEE0NzJBMjQxNUFDQkIyQkQ1MjBDOUFFRTQKKzoxMDZFMzAwMDhCNDM4QzI4OEY0MkIwQUQwMEYxMDQwMEREMUFBRENDM0QKKzoxMDZFNDAwMDBDQkIwMjlCMjdEQTIwQjdFQjU4MDAxOUMwMjFEMTBGRTkKKzoxMDZFNTAwMDlGMjc2M0ZGRUYwMDAwMDA2QzEwMDQyODIwM0M2NDMwODMKKzoxMDZFNjAwMDQ3MDUzMDYwMDAwNzNFMDEwNTNFQjE1NjA3NjUzOTA1MEMKKzoxMDZFNzAwMDQ5MjhDNzdGQTkzMzAzMDY0MTA3NjYwM0IxNjYwNjA2QTIKKzoxMDZFODAwMDQxQTYzMzdFODcxRTIyMjEyNTI5MUFGQzczMkIxNTAyNjkKKzoxMDZFOTAwMDM4MEMwOTgxNjAwMDA2M0UwMTAyM0VCMTI0MDY0MjM5RTkKKzoxMDZFQTAwMDAzMjIwQUQxMEZEMjMwRDEwRkMwNTE2M0ZGQzAwMDAwQkUKKzoxMDZFQjAwMDZDMTAwNDI3MjIxRUMwODAwOEU0MzExREQ2QkYwMDAyREEKKzoxMDZFQzAwMDAwMkNEMjgyMUJENkJGMDAzMTA0QzA2MTAwNjYxQTJCOTEKKzoxMDZFRDAwMEIxMDIwQzZDMDIyQ0Q2ODIwQkU0MzExOUQ3NDQwQzNBNjcKKzoxMDZFRTAwMDExQUE5MzI4MzI4Mjk3ODAyNTMyODIyNDMyODRCNDU1QTUKKzoxMDZFRjAwMDI1MzY4Mjc1NDEwQTI5MjEwMjA5NjkwMjI5MjUwMkQxMTQKKzoxMDZGMDAwMDBGMkEyMTAyMkIzMjgzMEE2QTAyMkIzNjgyMkEyNTAyOUIKKzoxMDZGMTAwMEQxMEYwMDAwNkMxMDA0MThENkE4MEMyNzExMDg3NzA4QjAKKzoxMDZGMjAwMDI2NzI4NjI1M0MwNDc2NUIxMzE1RDZBNDA1MjIwQTIyMTgKKzoxMDZGMzAwMDIyQTM2ODIwMDI3NDI5MDQyMjcyODVEMTBGQzAyMEQxQjcKKzoxMDZGNDAwMDBGMDAwMDAwNkMxMDA0MTlENkE3MjcyMjFFQzA4MDA5NkMKKzoxMDZGNTAwMDc3MDIwOEU0MzExREQ2OTgwMDAyMDAyQ0QyODIxQkQ2OUQKKzoxMDZGNjAwMDk4MDAzMTA0QzA2MTAwNjYxQTJCQjEwMjBDNkMwMjJDMkYKKzoxMDZGNzAwMEQ2ODIwQkU0MzExOUQ3MUQwQzNBMTFBQTkzMjgzMjgyMUMKKzoxMDZGODAwMDk3ODAyNTMyODIyNDMyODRCNDU1MjUzNjgyNzU0MTBCOTAKKzoxMDZGOTAwMDJBMjEwMjBBNkEwMjJBMjUwMkQxMEYwMDJCMjEwMjJDODMKKzoxMDZGQTAwMDMyODMwQjZCMDIyQzM2ODIyQjI1MDJEMTBGMDAwMDAwOUUKKzoxMDZGQjAwMDZDMTAwNDFCRDY4MTBDMkExMUFCQUEyOUEyODZCNDM4MDYKKzoxMDZGQzAwMDc5OEIyMjFCRDY3RTE5RDZBNTBCMkIwQTJCQjJBMzA5Q0YKKzoxMDZGRDAwMDI5MDg2OEIwMDI3NEI5MEQyOTlEMDEyOTkwMUY2RTkyOEQKKzoxMDZGRTAwMDA4MjJBMjg1RDEwRkMwMjBEMTBGQzg5MkMwMjBEMTBGOTYKKzoxMDZGRjAwMERBMjA1QkVFODhDMDIwRDEwRjAwMDAwMDZDMTAwNDE0NzIKKzoxMDcwMDAwMEQ2NkUyODQyOUUxOUQ2NkI2Rjg4MDI2MDAwQkEyOTkyMEMKKzoxMDcwMTAwMDI2Njg5MDA3OEEyMDA5QUEwQzY1QTBBQzJBNDI5REMwNjgKKzoxMDcwMjAwMERDNjRBMEE0MkIyMDBDMTlENjY1MENCQzExQTRDQzJFQkEKKzoxMDcwMzAwMEMyODYwOUI5MEE3RUQzMDI2MDAwOUEyOTkyQTM2ODkwOTkKKzoxMDcwNDAwMDA3OEQyMDA5REQwQzY1RDA4QzI1QzI4NTY0NTA4NjJEMDYKKzoxMDcwNTAwMDIxMDRDMDMwNkVEODBEMkMyMDY2QjhDQzBDMEM0NzJDMDcKKzoxMDcwNjAwMDI0NjY2NUMwN0IxQ0Q2RTIxOEQ2NkIxQUQ2NjIxOUQ2ODgKKzoxMDcwNzAwMDczMURENjY3QzBFNDlFNTE5RDUwOEYyMDkzNTc5MzU1NDIKKzoxMDcwODAwMDk5NTM5QTU2OUE1NDA4RkYwMjFBRDY4MzlGNTI4ODI2MUIKKzoxMDcwOTAwMDlGNUE5RTU5OUQ1ODkzNUU5QzVEOTM1QzlBNUIwODA4MkQKKzoxMDcwQTAwMDQ4MDU4ODExOTg1RkMwRDgxRkQ2NEMwQ0I5MTFBNDk5MTcKKzoxMDcwQjAwMDI4OTI4NUFGQkYyM0Y0Q0YyODhDNDAyODk2ODU4RTI2NTIKKzoxMDcwQzAwMDJEMjQwNjlFMjlDMDIwRDEwRkNBMzNEQTIwQzBCNjVCMUEKKzoxMDcwRDAwMEZGNzhDNzJGRDEwRkM5M0FEQTIwNUJGRjc1QzcyRkQxRDAKKzoxMDcwRTAwMDBGREJEMDVCRkUwNzIzMjQ2NjJCMjAwQzYzRkY3NTAwQUIKKzoxMDcwRjAwMEM3MkZEMTBGQzcyRkQxMEY2QzEwMDRDODVCMjkyMDA2RjIKKzoxMDcxMDAwMDY4OTQxQzY4OTYwN0MwMjBEMTBGQzAyMEQxMEZEQTIwRTgKKzoxMDcxMTAwMERCMzBEQzQwREQ1MDJFMEEwMDVCRkU1OUQyQTBEMTBGREYKKzoxMDcxMjAwMDJFMjAwQzE4RDYyNTBDRUYxMUE4RkYyOUYyODZDMDg4NTYKKzoxMDcxMzAwMDc5OEI3OTFBRDYyMjBBRUEwQTJBQTJBMzY4QTAwNDhCQkMKKzoxMDcxNDAwMDIwN0FCOTY4MjNGMjg1NjQzMDYyMUJENjJDMjkwQTgwMjQKKzoxMDcxNTAwMDJDMjA2ODI4MjA2NzJEMjEwNDBCODgxMTA0REQxMTA4REMKKzoxMDcxNjAwMEREMDIwRENDMDJDMDg0MkQ0QTEwMERDQzAyMURENjI0QTgKKzoxMDcxNzAwMDk4MzE5RDMwOEEyQjk5Mzc5QzM0MEJBQTAyQzBDMDlDNTEKKzoxMDcxODAwMDM1OUMzNjlBMzIyQTJDNzREQjQwMjhGMjg1QzBEMzI4RUQKKzoxMDcxOTAwMDhDMjAyOEY2ODUyQzI1MDQyRDI0MDYxRkQ2MEZERDQwRDMKKzoxMDcxQTAwMEFGRUUyQ0U0Q0Y1QkZERTZEMkEwRDEwRjAwREEyMERCRkUKKzoxMDcxQjAwMEUwNUJGRjNGQzAyMEQxMEY2QzEwMEFENjMwMkEyMDA2QkEKKzoxMDcxQzAwMDI0MTYwMTI4QUNGODY1ODM4NjJCMjEyMkMwRjIyQTIxREYKKzoxMDcxRDAwMDI0Q0M1NzJBQUMwMTBBMEE0RjJBMjUyNDdBQkIwMjYwMjQKKzoxMDcxRTAwMDAzN0YyQzIxMDIwQzBDNEM2NUMzMTkyRTIyMTU4RDMyMDUKKzoxMDcxRjAwMEMwOTEwRUREMEM2NUQzOTA4ODM4MUVENUVGNjQ4MzZCOEIKKzoxMDcyMDAwMDhDMzdDMEI4QzA5NjBDQjkzOTk5MTRCNDlBOUExMjBEM0IKKzoxMDcyMTAwMDk5MTE5OTEzOEY2NzE4RDVFQUM5RkIyODgwMjE3RjgzQkMKKzoxMDcyMjAwMDE2OEIxNDJDMjIwMDJBMjAwQzVCRkY2MUQ0QTA2NEEzQ0YKKzoxMDcyMzAwMEIzOEY2NzYwMDAyODAwMDAyQjIwMEM4OTEyMENCQTExNTQKKzoxMDcyNDAwMEFFQUEyQ0EyODYxREQ1REQ3QzlCM0UwREJEMEEyREQyOUIKKzoxMDcyNTAwMEEzNjhEMDA0ODgyMDdEODkzMDI0QTI4NTY0NDM2NDI3RjQKKzoxMDcyNjAwMDIxMkUwN0Y3MzYwN0Y5MEM2RjlEMDFEN0YwREEyMERCRTYKKzoxMDcyNzAwMDcwQzFDNDJEMjExRjVCRkVGODg5MjY4ODI3RERBMDA5NzcKKzoxMDcyODAwMDg4MEM3QThCMTc5QTEwNjAwMDA2QzA0MDYzRkZDQzAwMTAKKzoxMDcyOTAwMDAwREEyMDhCMTA1QkZFQzg4RDEwNjVBMjY3QzBFMDlFRUYKKzoxMDcyQTAwMDQ4OEM2NDlDNDk4QjY1OEE2NjlCNEE5QTRCOTc0NThGQUMKKzoxMDcyQjAwMDY3N0Y3MzAyNjAwMTIwQ0Q1MjlEMTBEQTIwREIzMDJDRjUKKzoxMDcyQzAwMDEyMDE1QkZFNjk4RDEwQzA1MUQ2QTA4RkE3QzBDMDhBODUKKzoxMDcyRDAwMDY4OTc0RDlBNEM4ODY5ODk2QTk4NEU5OTRGOEU2QThBNDgKKzoxMDcyRTAwMDY5QUU3RTc3RUIwMUIxQUE5RTZBOUE2OThCNjBDMEEwRjUKKzoxMDcyRjAwMDBCOEUxNDc3QjcwMUMwQTFDMDkxQzA4NDkzMTU5RDE3NjAKKzoxMDczMDAwMDk1MTZDMEQwMjUyMDNDQzAzMDA4NTgwMTA4OTMzOEMwREQKKzoxMDczMTAwMDgyMDgzMzEwMDg1QjAxMDUzNTQwMEI5RDM4MDdERDEwRUUKKzoxMDczMjAwMDBCQUIxMDBFMTk0MDJBMjExRjA3OTkxMDAzREQwMjBEMjcKKzoxMDczMzAwMEJCMDIwNTUzMTAwOTMzMDIwQTU1MTEyOTIxMjUwQTJBRDcKKzoxMDczNDAwMDE0MDkyOTE0MDQ5OTExMEE5OTAyMDkzMzAyOEEyQjI5NzQKKzoxMDczNTAwMDIxMDQwQkFBMDIxQkQ2MjcwODk5MTEwOTU1MDIwODU1Q0EKKzoxMDczNjAwMDAyMEJBQTAyOUE0MDg5MjA4ODE0MDg5OTExMDk4ODAyMDAKKzoxMDczNzAwMDE5RDVBNjFERDYyMTA5ODgwMjk4NDE4QjJBOTM0Njk1RDYKKzoxMDczODAwMDQ3ODMxNTBEQkIwMjg1MTY4RDE3OUI0NDhBNjU4OTY2NTgKKzoxMDczOTAwMEFBQ0FBOTdDNzdDQjAxQjFBQTA3RkIwQzlDNjY5QTY1QTcKKzoxMDczQTAwMDg4MjY4RTI5QUQ4Nzk3MjYwN0VFMEMwRTBFNDgyRTI1Q0YKKzoxMDczQjAwMDI1OUI2NzJCMjAwQzg3MTMxRUQ1ODAwQ0I5MTFBRTk5MjUKKzoxMDczQzAwMDI4OTI4NUE3ODgyODk2ODUxN0Q1ODRDMDkwQTdCQjI5QzEKKzoxMDczRDAwMEI0Q0Y4NzE4NjNGRTNDMDA4QzYwQzBFMEMwOTFDMEYwNjEKKzoxMDczRTAwMEMwMzRDMEI4MkEyMTA0MjgyMDNDMDhBQTExMEI4QjAxMDQKKzoxMDczRjAwMDAzODMwMTAzOUYzODBCOUIzOUMwMzIwOEZGMTAwMzg4QjkKKzoxMDc0MDAwMDAxMDg5RTM4MEM4ODE0MDdFRTEwMEZFRTAyMDM4ODAxNjUKKzoxMDc0MTAwMDA4OTgzOTA1QkYxMDI5MjExRjBBQkIxMTA3ODgxMDA4RDkKKzoxMDc0MjAwMEZGMDIwQkFBMDIxOEQ1NzgwOTI5MTQwM0FBMDIyQjIxRkUKKzoxMDc0MzAwMDI1ODMyMDBCMkIxNDA0QkIxMTA4MzMxMTBGQkIwMjBCNDcKKzoxMDc0NDAwMDk5MDI4QjE0OEYyQTBCMzMwMjA4MzMwMjhCMkI2NDcwNDIKKzoxMDc0NTAwMDg2ODg2ODk3NEQ5ODRDODc2OTg4NkE5MzQxOTk0Njk3QzIKKzoxMDc0NjAwMDRFOTg0RkMwNzA3N0M3MDFDMDcxOUE0NzE4RDVFMzBCOEIKKzoxMDc0NzAwMDdDMTAwQ0VDMDIwOEY4MDI5ODQ0MThENUUwMENCQzAyMTEKKzoxMDc0ODAwMDA4Q0MwMjlDNDAyQTIwMEMyOTVDRkVDMDgwMUZENTRBRjMKKzoxMDc0OTAwMDFDRDU1MjBDQUUxMTJCMjEyNEFDQUFBRkVFQjBCQjhGODEKKzoxMDc0QTAwMDEzMkNFMjg1MjhBNENGQUZDQzJDRTY4NTJBMjIxNTJCRkQKKzoxMDc0QjAwMDI1MjRCMUFBMkEyNjE1NjQ5MERCQzlEMjhGMjYyRTIyNTQKKzoxMDc0QzAwMDA5MERGRjA4MkYyNjA2MEZFRTBDMEUwRTQ4MkUyNTI1NUYKKzoxMDc0RDAwMDY1NTBFNEMwMjBEMTBGMDBDMDcwOTM0MTlGNDQ5OTQ2OEQKKzoxMDc0RTAwMDlBNDc3N0M3MEExQ0Q1MzYyQ0MwMjJDMDgxMEM4NzM4MzIKKzoxMDc0RjAwMDFDRDVDNDBCNzgxMDA4RTgwMjA4QjgwMjBDODgwMjk4NjIKKzoxMDc1MDAwMDQwNjNGRjgwMDBDQzU3REEyMERCNjA4QzExNUJGREQ2MzYKKzoxMDc1MTAwMDI5MjEwMjY4OTgwNjY4OTQwM0MwMjBEMTBGMkIyMjFFRUYKKzoxMDc1MjAwMEMwQTAyOTIyMUQyQTI1MDI3Qjk5MDFDMEIwNjRCRkU4QjIKKzoxMDc1MzAwMDEzRDUyMTJDQjAwNzI4QjAwMERBMjAwMzg4MEEyODgyNEUKKzoxMDc1NDAwMDRDQzBEMTBCODAwMERCQTA2NUFGRTc2M0ZGQ0EwMDAwMzEKKzoxMDc1NTAwMDY4QTc3OURBMjBEQjMwREM0MERENTA1QkZFRTdEMkEwQTMKKzoxMDc1NjAwMEQxMEZDMTZEQzE5RDI5MjUyQzYwMDAwNDI5MjUyQ0Q2ODEKKzoxMDc1NzAwMDkwMjYyNDY3MkYyNDY4REEyMERCMzA4QzExREQ1MDJFMTIKKzoxMDc1ODAwMDBBODA1QkZEM0ZEMkEwRDEwRkMxNjhDMUE4MkEyNTJDN0IKKzoxMDc1OTAwMDYzRkZERDAwMDAwMEM4REY4QzI2OEIyOUFEQ0M5QzI2NjQKKzoxMDc1QTAwMDBDQkIwQzBCMEI0ODJCMjUyNTJBMkM3NERCNjAyQzEyRjIKKzoxMDc1QjAwMDAxNUJGRDg3RDJBMEQxMEYyQTJDNzQ4QjExNUJGNkIyMzAKKzoxMDc1QzAwMEQyQTBEMTBGREEyMDVCRkUzQTYzRkYzODAwREEyMEMwODgKKzoxMDc1RDAwMEIxNUJGRThBNjRBQkYxNjU1RjM1MkQyMTI0QjFERDJERjEKKzoxMDc1RTAwMDI1MjQ2M0ZGMUZEQTIwMkIyMDBDNUJGRTU2NjNGRjE0NUIKKzoxMDc1RjAwMDEyRDU4NTgyMjAwMjgyNTdDODIxNjNGRkZDMTJENTgxRjMKKzoxMDc2MDAwMDAzRTgzMDA0RUUzMDA1QjEzMDkzMjA5NDIxOTUyMjYzRDUKKzoxMDc2MTAwMEZGRkMwMDAwMTBENTdEOTEwMDkyMDE5MzAyOTQwMzExQUMKKzoxMDc2MjAwMEQ1NTQ4MjEwMDFFQTMwQTIxMTAxRjAzMUMwNDAwNEU0QzcKKzoxMDc2MzAwMDE2MDAwMjAwMTFENTc2ODIxMDIzNEEwMDAzMjIwMjkyMUUKKzoxMDc2NDAwMDEwMTFENTQwQzAyMTkyMTAwNEU0MzE4NDAzODMwMjgyREEKKzoxMDc2NTAwMDAxODEwMDAwRDIzMDAxMjMwMDAwMDAwMDEwRDU2RDkxOUYKKzoxMDc2NjAwMDAwOTIwMTkzMDI5NDAzMTFENTQzODIxMDAxRUEzMEEyRTMKKzoxMDc2NzAwMDExMDFGMTMxQzA0MDA0RTQxNjAwMDIwMDExRDU2NDgyMEEKKzoxMDc2ODAwMDEwMTNENEU3MDMyMjAyOTIxMDA0RTQzMTg0MDM4MzAyMkUKKzoxMDc2OTAwMDgyMDE4MTAwMDBEMzMwMDEzMzAwMDAwMDEwRDU1RTkxREIKKzoxMDc2QTAwMDAwODEwMTY1MTA0OTgxMDI2NTEwNDQ4MTAzQ0YxRjkyNUEKKzoxMDc2QjAwMDAxOTMwMjk0MDMxMUQ1MzE4MjEwMDFFQTMwQTIxMTAxMjUKKzoxMDc2QzAwMEYyMzFDMDQwMDRFNDE2MDAwMjAwMTFENTUwODIxMDEzQkMKKzoxMDc2RDAwMEQ0Q0YwMzIyMDI5MjEwMDRFNDMxODQwMzgzMDI4MjAxOTYKKzoxMDc2RTAwMEMwMTA5MTAzOTEwMjkxMDE4MTAwMDBENDMwMDE0MzAwNDgKKzoxMDc2RjAwMDEyRDUwMEMwMzAyODM3NDAyODM3NDQyODM3NDgyODM3NkIKKzoxMDc3MDAwMDRDMjMzRDAxNzIzM0VEMDMwMjAwNjNGRkZDMDAwMDAwRDcKKzoxMDc3MTAwMDEwRDU0MjkxMDA5MjAxOTMwMjk0MDMxMUQ1NDA4MjEwM0EKKzoxMDc3MjAwMDkyMTAxMUQ0RjI4MzEwMDMyMjAyOTIxMDExRDUzRDEyNEYKKzoxMDc3MzAwMEQ1MDQ5MjEwQzA0MDA0RTQxNjAwMDIwMDExRDUzNDgyMzIKKzoxMDc3NDAwMDEwMTNENEVCMDMyMjAyOTIxMDA0RTQzMTg0MDM4MzAyNjkKKzoxMDc3NTAwMDgyMDE4MTAwMDBENTMwMDE1MzAwMDAwMDZDMTAwMjZFRTAKKzoxMDc3NjAwMDMyMkZENjIwMDU2RjA0MDQzRjA0NzQ1QjJBMDU0NDBDQjUKKzoxMDc3NzAwMDAwNDEwNDAwMzMxQTIyMEEwMDZENDkwRDczNjMwNDAzQUIKKzoxMDc3ODAwMDY2MENCMTIyMEYyMjExMDMxMzE0NzM2MzAyMjIyQzAxMjEKKzoxMDc3OTAwMEQxMEZDODNCRDEwRjAwMDA3MzYzMENDMDIxRDEwRjAwODMKKzoxMDc3QTAwMDAwMDAwMDAwNDQ0OTU2MzBDMDIwRDEwRjZDMTAwMjAwODgKKzoxMDc3QjAwMDQwMDQ2QjRDMDcwMzIzMTgwMjAyMTlEMTBGMDIwMzE5NkUKKzoxMDc3QzAwMEMwMjBEMTBGNkMxMDAyMDJFQTMwRDEwRjZDMTAwMkNDMzUKKzoxMDc3RDAwMDI1MDNGMDMxNjAwMDBGMDA2RjIyMDUwM0YxMzE2MDAwRDYKKzoxMDc3RTAwMDA1NkYyMzA1MDNGMjMxMDAwMjAwRDEwRjZDMTAwMkNDQUIKKzoxMDc3RjAwMDI1MDJGMDMwRDEwRjAwMDA2RjIyMDQwMkYxMzBEMTBGQ0EKKzoxMDc4MDAwMDZGMjMwNDAyRjIzMEQxMEZDMDIwRDEwRjZDMTAwMjIyN0UKKzoxMDc4MTAwMDBBMjAyMzBBMDA2RDI4MEUyODM3NDAyODM3NDQyODM3Q0QKKzoxMDc4MjAwMDQ4MjgzNzRDMjMzRDAxMDMwMjAwRDEwRjZDMTAwMjAyOUYKKzoxMDc4MzAwMEU0MzFEMTBGMEEwMDAwMDA0MzY4NjU2QzczNjk2RjIwNjIKKzoxMDc4NDAwMDQ2NTcyMDQ0NDU0MjU1NDczRDMwMjAyODQyNzU2OTZDRDMKKzoxMDc4NTAwMDc0MjA0RDZGNkUyMDRENjE3MjIwMjAzODIwMzEzNzNBRjAKKzoxMDc4NjAwMDMyMzgzQTMxMzUyMDUwNTM1NDIwMzIzMDMxMzAyMDZGODUKKzoxMDc4NzAwMDZFMjA2MzZDNjU2RjcwNjE3NDcyNjEyRTYxNzM2OTYzRjEKKzoxMDc4ODAwMDY0NjU3MzY5Njc2RTY1NzI3MzJFNjM2RjZEM0EyRjY4RjYKKzoxMDc4OTAwMDZGNkQ2NTJGNjY2NTZDNjk3ODJGNzcyRjY2Nzc1RjM3MTgKKzoxMDc4QTAwMDJFMzkyRDY5Nzc2MTcyNzAyOTJDMjA1NjY1NzI3MzY5QTMKKzoxMDc4QjAwMDZGNkUyMDU0MzM3ODc4MjAzMDMwMzcyRTMwNjEyRTMwODAKKzoxMDc4QzAwMDMwMjAyRDIwMzEzMDMwMzczMDYxMzAzMDEwMDcwQTAwNDEKKzowNDc4RDAwMDBCREZFODc1NkQKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9jeGdiMy90M2Z3LTcuNC4wLmJpbi5paGV4IGIvZmlybXdhcmUvY3hnYjMvdDNmdy03LjQuMC5iaW4uaWhleApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhkZGE5NC4uMDAwMDAwMAotLS0gYS9maXJtd2FyZS9jeGdiMy90M2Z3LTcuNC4wLmJpbi5paGV4CisrKyAvZGV2L251bGwKQEAgLTEsMTkxNyArMCwwIEBACi06MTAwMDAwMDA2MDAwNzQwMDIwMDM4MDAwMjAwMzcwMDAwMDAwMTAwMEQ2Ci06MTAwMDEwMDAwMDAwMjAwMEUxMDAwMjg0MDAwNzAwMDBFMTAwMDI4OEU3Ci06MTAwMDIwMDAwMDAxMDAwMEUwMDAwMDAwRTAwMDAwQTAwMTAwMDAwMDZFCi06MTAwMDMwMDA0NDQ0NDQ0MEUzMDAwMTgzMjAwMjAwMDAyMDAxRTAwMDJBCi06MTAwMDQwMDAyMDAxRkYxMDFGRkZEMDAwMUZGRkMwMDBFMzAwMDQzQzkxCi06MTAwMDUwMDAwMjAwMDAwMDIwMDA2Qjc0MUZGRkMyOTAyMDAwNkJCQ0U4Ci06MTAwMDYwMDAxRkZGQzI5NDIwMDA2QkZDMUZGRkMyOTgyMDAwNkM3MDIxCi06MTAwMDcwMDAxRkZGQzI5QzIwMDAwM0MwQzAwMDAwRTQzMTAwRUEzMTMxCi06MTAwMDgwMDAwMEExMzEwMEEwMzEwMzAyMDAwMkVEMzA2RTJBMDUwMDBDCi06MTAwMDkwMDBFRDMxMDAwMjAwMDIxNjAwMTJGRkRCQzAzMDE0RkZEQTVGCi06MTAwMEEwMDBEMzBGRDMwRkQzMEYwMzQzMUYyNDRDMTA3MjQ5RjBEMzQ3Ci06MTAwMEIwMDAwRkQzMEZEMzBGMTJGRkQ1MjMwQTAwMjQwQTAwRDMwRjRBCi06MTAwMEMwMDBEMzBGRDMwRjAzNDMxRjI0NEMxMDcyNDlGMEQzMEZEMzI3Ci06MTAwMEQwMDAwRkQzMEYxNEZGQ0UwMzQyMUYxNEZGQ0IwMzQyMUYxMjk2Ci06MTAwMEUwMDBGRkNDQzAzMDJEMzczMDJEMzczNDJEMzczODJEMzczQ0VECi06MTAwMEYwMDAyMzNEMDE3MjMzRUQwMDAyMDAxMkZGQzRDMDMwMkYzN0UwCi06MTAwMTAwMDAwMDJGMzcxMDJGMzcyMDJGMzczMDIzM0QwMTcyMzNFRDZBCi06MTAwMTEwMDAwMDAyMDAxMkZGQkVDMDMwMjczNzAwMjczNzEwMjczN0Y0Ci06MTAwMTIwMDAyMDI3MzczMDIzM0QwMTcyMzNFRDAzMDIwMDEyRkZCOTVGCi06MTAwMTMwMDAxM0ZGQkEwQzAyMDA5MzIwMTJGRkI5MTNGRkI5MEMwMjhGCi06MTAwMTQwMDAwMDkzMjAxMkZGQjhDMDMxOTMyMDgyMjAxMkZGQjcxMzEyCi06MTAwMTUwMDBGRkI3OTMyMDEyRkZCNzE1RkZCMzE2RkZCNkMwMzBENzE1Ci06MTAwMTYwMDAyMDA1NjYwMTYwMDAxQjAwMDAwMDAwMDAwMDAwMDAwMDg4Ci06MTAwMTcwMDAwNDM2MDUwMDAyMDBEMzBGRDMwRjA1MzMwQzZFM0IxNDc5Ci06MTAwMTgwMDAwNzQ3MTQwNzA0NDM3NjMxRTYwNDM2MDUwNTMzMEM2RjQwCi06MTAwMTkwMDAzQkVEMDAwMjAwMTJGRkE2MTVGRkEzMjMwQTAwRDcyMEEzCi06MTAwMUEwMDAwNzA0NDMwNDNFMDUwNTMzMEMwNzQ3MTQ2RjNCRjAwMzc3Ci06MTAwMUIwMDAwMjAwMTJGRkExQzAzMDE0RkZBMUQzMEZEMzBGRDMwRjQxCi06MTAwMUMwMDA5MzQwQjQ0NDcyNDlGMkQzMEZEMzBGRDMwRjE0RkY5QjYzCi06MTAwMUQwMDA4MzQwMTRGRjlCODM0MDEyRkY5QjIzMEEwMDE0RkY5QTY1Ci06MTAwMUUwMDBEMzBGRDMwRkQzMEY5MzQwQjQ0NDcyNDlGMkQzMEZEMzNDCi06MTAwMUYwMDAwRkQzMEYxNEZGOTU4MzQwMTJGRjk1QzkyRjgzMjA4NERFCi06MTAwMjAwMDAyMTg1MjJCQzIyNzQzQjBGODY1MEI0NTU5NjMwQjQzM0ZFCi06MTAwMjEwMDA3NDMzRjQ2M0ZGRTYwMDAwNjUzRkUxNjU1RkRFMTJGRkMzCi06MTAwMjIwMDA3QzIzMEEwMDI4Mzc0MDI4Mzc0NDI4Mzc0ODI4Mzc0QzkxCi06MTAwMjMwMDAyMzNEMDE3MjMzRUQwMzAyMDAwMDAyMDAxMkZGN0FDMDc5Ci06MTAwMjQwMDAzMjAzMkUwNTAzMDIwMDEyRkY3ODEzRkY4MTkzMjBDMEIyCi06MTAwMjUwMDAxMTAxNDkzMTAwNDgzMTAxMDIwMEMwMDAxNEZGN0UwNDQxCi06MTAwMjYwMDBEMjMxMTVGRjdEOTQ1MDE0RkY3RDA0RDMzMTE1RkY3Q0VFCi06MTAwMjcwMDA5NDUwMTRGRjdDMDRENDMxMTVGRjdDMjQ1NjAwMTRGRkU1Ci06MTAwMjgwMDA3QjA0RDUzMTE1RkY3QjI0NTYwMDEwRkY3QTAzMDAwMDU0Ci06MTAwMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCi06MTAwMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCi06MTAwMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCi06MTAwMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCi06MTAwMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCi06MTAwMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCi06MTAwMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCi06MTAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECi06MTAwMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECi06MTAwMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECi06MTAwMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECi06MTAwMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECi06MTAwMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECi06MTAwMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECi06MTAwMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECi06MTAwMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECi06MTAwMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECi06MTAwM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECi06MTAwM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECi06MTAwM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECi06MTAwM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECi06MTAwM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECi06MTAwM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECi06MTAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCi06MTAwNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCi06MTAwNDIwMDA2M0ZGRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCi06MTAwNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRkZDMDAwMEExCi06MTAwNDQwMDAxRkZDMDAwMEUzMDAwNUM4MUZGQzAwMDAxRkZDMDAwMEFCCi06MTAwNDUwMDBFMzAwMDVDODFGRkMwMDAwMUZGQzAwMDBFMzAwMDVDODA2Ci06MTAwNDYwMDAxRkZGQzAwMDFGRkZDMDAwRTMwMDA1QzgxRkZGQzAwMDQyCi06MTAwNDcwMDAxRkZGQzAxOEUzMDAwNUM4MUZGRkMwMTgxRkZGQzAxOEVBCi06MTAwNDgwMDBFMzAwMDVFMDFGRkZDMDE4MUZGRkMyOTBFMzAwMDVFMDc2Ci06MTAwNDkwMDAxRkZGQzI5MDFGRkZDMjkwRTMwMDA4NTgxRkZGQzI5MEM5Ci06MTAwNEEwMDAxRkZGQzU4Q0UzMDAwODU4MjAwMDAwMDAyMDAwMDE2QUVGCi06MTAwNEIwMDBFMzAwMEI1NDIwMDAwMTgwMjAwMDAxODBFMzAwMENDMDA5Ci06MTAwNEMwMDAyMDAwMDIwMDIwMDAwMjAzRTMwMDBDQzAyMDAwMDIxQ0Y4Ci06MTAwNEQwMDAyMDAwMDIyMEUzMDAwQ0M0MjAwMDAyMjAyMDAwMDIyNjlECi06MTAwNEUwMDBFMzAwMENDODIwMDAwMjNDMjAwMDAyNDBFMzAwMENEMEQ2Ci06MTAwNEYwMDAyMDAwMDI0MDIwMDAwMjQ5RTMwMDBDRDQyMDAwMDI0Q0ZFCi06MTAwNTAwMDAyMDAwMDI1MEUzMDAwQ0UwMjAwMDAyNTAyMDAwMDI1OUJECi06MTAwNTEwMDBFMzAwMENFNDIwMDAwMjVDMjAwMDAyNjBFMzAwMENGMDI5Ci06MTAwNTIwMDAyMDAwMDI2MDIwMDAwMjY5RTMwMDBDRjQyMDAwMDI2QzRECi06MTAwNTMwMDAyMDAwMDI3MEUzMDAwRDAwMjAwMDAyNzAyMDAwMDI3OTBDCi06MTAwNTQwMDBFMzAwMEQwNDIwMDAwMjhDMjAwMDAyOENFMzAwMEQxMDVCCi06MTAwNTUwMDAyMDAwMDI5MDIwMDAwMjkzRTMwMDBEMTAyMDAwMDJBQzY2Ci06MTAwNTYwMDAyMDAwMDJCMEUzMDAwRDE0MjAwMDAyRDAyMDAwMDJGMkFGCi06MTAwNTcwMDBFMzAwMEQxODIwMDAwM0IwMjAwMDAzQjBFMzAwMEQzQ0ExCi06MTAwNTgwMDAyMDAwMDNCMDIwMDAwM0IwRTMwMDBEM0MyMDAwMDNCMEM2Ci06MTAwNTkwMDAyMDAwMDNCMEUzMDAwRDNDMjAwMDAzQjAyMDAwMDNCMEI2Ci06MTAwNUEwMDBFMzAwMEQzQzIwMDAwM0IwMjAwMDZEOTRFMzAwMEQzQ0ZGCi06MTAwNUIwMDAyMDAwNkQ5NDIwMDA2RDk0RTMwMDc3MjAwMDAwMDAwMDdGCi06MTAwNUMwMDAwMDAwMDAwMDAwMDAwMDAwMUZGQzAwMDAxRkZDMDAwMEY1Ci06MTAwNUQwMDAxRkZGQzU5MDFGRkZDNjcwMjAwMDZEOTgyMDAwNkQ5ODBBCi06MTAwNUUwMDBERUZGRkUwMDAwMDAwODBDREVBREJFRUYxRkZGQzJBMDY0Ci06MTAwNUYwMDAxRkZDRkUwMDFGRkZDMDk0MUZGRkM1QzAzMDAwMDAwMDlECi06MTAwNjAwMDAwMDNGRkZGRjgwNDAwMDAwMTAwMDAwMDAwODBGRkZGRkM4Ci06MTAwNjEwMDAxRkZGQzI2RDAwMEZGRkZGODA0RkZGRkY4MDAwMDAwMDMzCi06MTAwNjIwMDAwMDAwMDg4MEIwMDAwMDA1NjA1MDAwMDA2MDAwMDAwMDdECi06MTAwNjMwMDA0MDAwMDAxMTM1MDAwMDAwNDEwMDAwMDAxMDAwMDAwMUUyCi06MTAwNjQwMDAyMDAwMDAwMDAwMDAxMDAwNDAwMDAwMDAwNTAwMDAwMDM1Ci06MTAwNjUwMDA4MDAwMDAxOTA0MDAwMDAwMDAwMDA4MDAxMDAwMDAwNUUwCi06MTAwNjYwMDA4MDYwMDAwMDcwMDAwMDAwMjAwMDAwMDkwMDFGRjgwMEZBCi06MTAwNjcwMDA4MDAwMDAxRUEwMDAwMDAwRjgwMDAwMDAwN0ZGRkZGRjQwCi06MTAwNjgwMDAwODAwMDAwMDE4MDAwMDAwMDEwMDgwMDE0MjAwMDAwMDg2Ci06MTAwNjkwMDAxRkZGQzIxRDFGRkZDMERDMDAwMTAwODA2MDQwMDAwMDgyCi06MTAwNkEwMDAxQTAwMDAwMDBDMDAwMDAwMTAwMDAwMEEwMDAwMzAwMERBCi06MTAwNkIwMDA2MDAwMDgwMDgwMDAwMDFDMDAwMTAwMDA4MDAwMDAxQTlCCi06MTAwNkMwMDA4MDAwMDAxOEZDMDAwMDAwODAwMDAwMDEwMDAwNDAwMEQ1Ci06MTAwNkQwMDAwMzAwMDAwMDgwMDAwNDAwNTAwMDAwMDNGRkZGQkZGRjg0Ci06MTAwNkUwMDAxRkZGQzNENDAwMDAwRkZGRkZGRkYwMDAwMDAwMTZEMDczCi06MTAwNkYwMDAwMDAwRkZGN0E1MDAwMDAwMUZGRkM0QjAxRkZGQzQ2MThBCi06MTAwNzAwMDAwMDAxMDAwODAwMDAwQjIwMjAyRkZGODAxRkZGQzQ1NUIwCi06MTAwNzEwMDAwMDAwMkMwMEZGRkVGRkY4MDBGRkZGRkYxRkZGQzU3ODYxCi06MTAwNzIwMDAwMDAwMjAwMEZGRkZERkZGMDAwMEZGRUYwMTAwMTEwMENECi06MTAwNzMwMDAxRkZGQzNEMjFGRkZDNTkwRkZGRkVGRkYwMDAwRkZGQkFECi06MTAwNzQwMDAxRkZGQzYzMDFGRkZCRUEwRkZGRkY3RkYxRkZGQzA2NEUzCi06MTAwNzUwMDAwMDAwRkZGRDFGRkZDNjIwMDAwMUZCRDAxRkZGQzVCMDNBCi06MTAwNzYwMDAxRkZGQzY2MDFGRkZDNTkxRTBGRkZFMDAxRkZGQzVBMDcxCi06MTAwNzcwMDAwMDAwODAwMDFGRkZDNTNDMUZGRkM1QjQxRkZGQzA2OEZECi06MTAwNzgwMDAxRkZGQzREMDFGRkNGRkQ4MDAwMTAwODE3RkZGRkZGRkM3Ci06MTAwNzkwMDBFMTAwMDYwMDAwMDAyNzEwMUZGQ0ZFMzAxRkZDRkU3MDY5Ci06MTAwN0EwMDBFMTAwMDIwMDFGRkZDNTM4MUZGRkM1NTAwMDAzRDA5MEI1Ci06MTAwN0IwMDAxRkZGQzU2NDJCNTA2MzgwMkI1MDc5ODAyQjUwOTA4MDk1Ci06MTAwN0MwMDAyQjUwQTY4MDFGRkZDNDY5MDEwMDExMEYyMDJGRkUwMENGCi06MTAwN0QwMDAyMDMwMDA4MDIwMkZGRjAwMDAwMEZGRkYwMDAxRkZGODA1Ci06MTAwN0UwMDAyQjUwQjIwMDJCNTBCMjA4MDAwMTAwMTAyQjUwQjE4MEVBCi06MTAwN0YwMDAyQjUwQjI4MDJCNTBCQTAwMDAwMTAwMTEyQjUwQkQyOEE1Ci06MTAwODAwMDAyQjUwQkM4MDJCNTBCREEwMjAzMDAwMDBERkZGRkUwMDJECi06MTAwODEwMDA1MDAwMDAwMjAwQzAwMDAwMDIwMDAwMDBGRkZGRjdGNERCCi06MTAwODIwMDAxRkZGQzA2QzAwMEZGODAwMDQ0MDAwMDAwMDEwMDAwMDIzCi06MTAwODMwMDAwQzQwMDAwMDFDNDAwMDAwRTAwMDAwQTAxRkZGQzU0MDZECi06MTAwODQwMDAxRkZEMDAwODFGRkZDNTU0MUZGRkM1NjgxRkZGQzU3Q0EzCi06MTAwODUwMDBFMTAwMDY5MEUxMDAwNkVDMDAwMDAwMDAwMDAwMDAwMDRFCi06MTAwODYwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDg3Ci06MTAwODcwMDAwMDAwMDAwMDAwMDAwMDAwMjAxMDAwNDAyMDEwMDA0MDk4Ci06MTAwODgwMDAyMDEwMDA0MDIwMTQwMDgwMjAwQzAwMDAyMDBDMDAwMEVDCi06MTAwODkwMDAyMDBDMDAwMDIwMTAwMDQwMjAxNDAwODAyMDE0MDA4MDU0Ci06MTAwOEEwMDAyMDE0MDA4MDIwMTgwMEMwMjAxQzAxMDAyMDFDMDEwMDIyCi06MTAwOEIwMDAyMDFDMDEwMDIwMjAwMTQwMjAxODAwQzAyMDE4MDBDMDhBCi06MTAwOEMwMDAyMDE4MDBDMDIwMUMwMTAwMjAxODAwQzAyMDE4MDBDMDAzCi06MTAwOEQwMDAyMDE4MDBDMDIwMUMwMTAwMjAyMDAxNDAyMDIwMDE0MEUxCi06MTAwOEUwMDAyMDIwMDE0MDIwMjAwOTQwMjAyMDA5NDAyMDIwMDk0MEVDCi06MTAwOEYwMDAyMDIwMDk0MDIwMjQwOTgwRkZGRkZGRkZGRkZGRkZGRkFBCi06MTAwOTAwMDBGRkZGRkZGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCi06MTAwOTEwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDU0OTAyMDAwNTM2MDAwCi06MTAwOTIwMDAyMDAwNTQ5MDIwMDA1NDkwMjAwMDUyOUMyMDAwNTI5Q0EzCi06MTAwOTMwMDAyMDAwNTI5QzIwMDA1MERDMjAwMDUwREMyMDAwNTBENENECi06MTAwOTQwMDAyMDAwNTA0MDIwMDA0RUU4MjAwMDRDQzgyMDAwNEE5QzY3Ci06MTAwOTUwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDU0NjAyMDAwNTMyQzI0Ci06MTAwOTYwMDAyMDAwNTNEMDIwMDA1M0QwMjAwMDUxODQyMDAwNTE4NDE3Ci06MTAwOTcwMDAyMDAwNTE4NDIwMDA1MTg0MjAwMDUxODQyMDAwNTBDQzVDCi06MTAwOTgwMDAyMDAwNTE4NDIwMDA0RTA4MjAwMDRDNzgyMDAwNEE0ODY2Ci06MTAwOTkwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDBCRTgyMDAwM0EzMEJBCi06MTAwOUEwMDAyMDAwMDRDMDIwMDA0NjNDMjAwMDBCRTAyMDAwNDE0ODBECi06MTAwOUIwMDAyMDAwMDNGMDIwMDA0NUZDMjAwMDRBMjQyMDAwM0U1NDgzCi06MTAwOUMwMDAyMDAwM0Q3MDIwMDAzOUFDMjAwMDM4M0MyMDAwMzVBQ0MwCi06MTAwOUQwMDAyMDAwMzEwQzIwMDAzQkNDMjAwMDJENkMyMDAwMjgwMDkyCi06MTAwOUUwMDAyMDAwNjcxODIwMDAyMzhDMjAwMDIwNkMyMDAwMjAxODk1Ci06MTAwOUYwMDAyMDAwMUQwNDIwMDAxODE4MjAwMDE1NDgyMDAwMEUyQzhGCi06MTAwQTAwMDAyMDAwMEMyQzIwMDAxMTBDMjAwMDEyRjgyMDAwNDM0MDg0Ci06MTAwQTEwMDAyMDAwM0UwODIwMDAwQkYwMjAwMDA0QzAwMDAwMDAwMDcxCi06MTAwQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Ci06MTAwQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Ci06MTAwQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Ci06MTAwQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Ci06MTAwQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Ci06MTAwQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Ci06MTAwQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Ci06MTAwQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMjY0MDAwMEMwCi06MTAwQUEwMDAwMDAwMDAwMDMyNjQwMDAwNjQwMDY0MDA2NDAwNjQwMDIwCi06MTAwQUIwMDA2NDAwNjQwMDY0MDA2NDAwMDAwMDAwMDAwMDAwMDAwMEE2Ci06MTAwQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Ci06MTAwQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Ci06MTAwQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Ci06MTAwQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Ci06MTAwQjAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Ci06MTAwQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMEM1Ci06MTAwQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzMjM4MERGCi06MTAwQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Ci06MTAwQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Ci06MTAwQjUwMDAwMDAwMDAwMDAwNUM5NDAxNUQ5NDAyNUU5NDAzNUY5NEM5Ci06MTAwQjYwMDAwMDQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCi06MTAwQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Ci06MTAwQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Ci06MTAwQjkwMDAwMDAwMDAwMDAwNUM5MDAxNUQ5MDAyNUU5MDAzNUY5MDk5Ci06MTAwQkEwMDAwMDUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCi06MTAwQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Ci06MTAwQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Ci06MTAwQkQwMDAwMDAwMDAwMDAwOUM5NDAwMUQ5MDAxOUQ5NDAyOUU5NEQyCi06MTAwQkUwMDAwMzlGOTQwNDA4OTQwNTA5OTQwNjBBOTQwNzBCOTQwMDQzCi06MTAwQkYwMDA0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCi06MTAwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Ci06MTAwQzEwMDAwMDAwMDAwMDAwOUM5MDAxOUQ5MDAyOUU5MDA3MUQ5MDk2Ci06MTAwQzIwMDAwMzlGOTAwNDc4OTAwNTc5OTAwNjdBOTAwNzdCOTAwMDU2Ci06MTAwQzMwMDA1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCi06MTAwQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Ci06MTAwQzUwMDAwMDAwMDAwMDAwREM5NDAwMUQ5MDAxREQ5NDAyREU5NDkxCi06MTAwQzYwMDAwM0RGOTQwNDA0OTQwNTA1OTQwNjA2OTQwNzA3OTQwODhBCi06MTAwQzcwMDAwODk0MDkwOTk0MEEwQTk0MEIwQjk0MDA0MzAwMDAwMDlECi06MTAwQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Ci06MTAwQzkwMDAwMDAwMDAwMDAwREM5MDAxREQ5MDAyREU5MDBCMUQ5MDUyCi06MTAwQ0EwMDAwM0RGOTAwNEI0OTAwNUI1OTAwNkI2OTAwN0I3OTAwODlFCi06MTAwQ0IwMDBCODkwMDlCOTkwMEFCQTkwMEJCQjkwMDA1MzAwMDAwMDlECi06MTAwQ0MwMDA2M0ZGRkMwMDIwMDA2QjUwMTBGRkZGMEEwMDAwMDAwMEQzCi06MTAwQ0QwMDAyMDAwNkI3NDAwRDIzMTEwRkZGRTBBMDAwMDAwMDAwMEZCCi06MTAwQ0UwMDAyMDAwNkJCQzAwRDMzMTEwRkZGRTBBMDAwMDAwMDAwMEEyCi06MTAwQ0YwMDAyMDAwNkJGQzAwRDQzMTEwRkZGRTBBMDAwMDAwMDAwMDUxCi06MTAwRDAwMDAyMDAwNkM3MDAwRDUzMTEwRkZGRTBBMDAwMDAwMDAwMENBCi06MTAwRDEwMDA2M0ZGRkMwMEUwMDAwMEEwMTJGRkY3ODIyMDAyODI1NzcwCi06MTAwRDIwMDBDODIxNjNGRkZDMTJGRkYzMDNFODMwMDRFRTMwMDVDMDc2Ci06MTAwRDMwMDAzMDkzMjA5NDIxOTUyMjYzRkZGQzAwMDAxRkZGRDAwMDE4Ci06MTAwRDQwMDAwMDA0MDAyMDFGRkZDNTkwMUZGRkM2NzAyMDBBMDAxMTdECi06MTAwRDUwMDBGRkZCMTNGRkZCMDNFNjMxMDEwMjAwMTZGRkZBMTdGRjRBCi06MTAwRDYwMDBGQUQzMEY3NzZCMDY5MDYwQjQ2Njc3NjNGODU0MTVCNUM1Ci06MTAwRDcwMDA1NDFBNjEwRjE0MDA2M0ZGRjkwMDAwMDA2QzEwMDRDMEU2Ci06MTAwRDgwMDAyMEQxMEYwMDZDMTAwNEMwQzcxQUVGMDZEODMwQkMyQjVFCi06MTAwRDkwMDBENzIwODU3MjBENDIxMTgzNzEwNTQ1MEI5NTcyMDIzMzgwCi06MTAwREEwMDAwQzIzNzYwMTdCM0IwNDIzM0QwODkzNzFBMzJEMTJFRUE3Ci06MTAwREIwMDBGRTE5RUVGRUEyNzY3RDYzMkMyRTBBMDAwODgyMDIyODIwCi06MTAwREMwMDAwQTAxMDM4RTM4MEUwRTQyQzhFRTI5QTY3RTZENEEwNTMyCi06MTAwREQwMDAwMDIwODgwMDMwOEM4MjcxRDEwRkMwRjAwMjhGMzg3RkU0Ci06MTAwREUwMDBDMEVBNjNGRkU0MDBDMEYxQzA1MDAzN0UwQ0EyRUUwRTI3Ci06MTAwREYwMDAzRDEyMDg4MjAyMDNGNTM4MDUwNTQyQ0I1NzI5QTY3RTJECi06MTAwRTAwMDAyRkRDMTAwRjRGMzY2REZBMDUwMDIwODgwMDMwOENCQ0E3Ci06MTAwRTEwMDA3NUMwMzAwOEUyMDgyODBBMDEwNTgzMzgwMzAzNDJDOTc3Ci06MTAwRTIwMDAzRTI5QTY3RTBENDgwQ0QzMEY2RDhBMDUwMDIwODgwMDUwCi06MTAwRTMwMDBCMDhDODI3MUQxMEZDMDUwMDhGNTM4NzVDMEMxNjNGRjA2Ci06MTAwRTQwMDBCQkMwNjAwMjg2Mzg3NkMwREE2M0ZGRDQ2QzEwMTIxNjFECi06MTAwRTUwMDBFRUQ4QzFGOUMxRThDMUM3MkIyMjFFMjgyMjFEQzBEMDdGCi06MTAwRTYwMDA3QjgxMzEyOTIwMDYwQkI3MDIyOTlDRkE2NTUwMDgyODlFCi06MTAwRTcwMDAyMDcyMjg4Q0ZGMjgyNDcyNjQ5MTVDMkFCMDAwMENBODkwCi06MTAwRTgwMDAwQzY0ODE2NzBFQTkwQzY0OTJCMzdGQTEzNzY5QUMyRjAzCi06MTAwRTkwMDA2MDAwMzQwMDAwMjgyMDA2RDdEMDI4OENGQUNDNTcyQUNFCi06MTAwRUEwMDAyMDcyMkFBQ0ZGMkEyNDcyNjQ4MTM1MkFEMDAwMENBOTUyCi06MTAwRUIwMDAwQzY0OTE2NDBFQUMwQzY0QzMxQjdGQTEwNzY4QUMwNzgzCi06MTAwRUMwMDBDMDIwRDEwRjAwMkQyNTAyOEEzMkMwOTAwQTZFNTA2NUQ1Ci06MTAwRUQwMDBFNUI1MjkyNDY3MDkwRjQ3NjVGNUIxMkMyMDBDMUZFRUY1Ci06MTAwRUUwMDBCNTBDQ0UxMUFGRUUyOUUyODZCNDQ4Nzk4MzAyNjAwNUQ1Ci06MTAwRUYwMDA4MjE5RUVCMTA5QzkwQTI5OTJBMzY4OTAwNzhGMjAwOUM3Ci06MTAwRjAwMDBGRjBDNjVGNTZFMkZFMjg1NjRGNTY4NjU1NTk2MjgyMjFECi06MTAwRjEwMDAxRDdCODEwNUQ5QjA2MDAwMDIwMEMwOTA4Qjk0MTdFRTU0Ci06MTAwRjIwMDBBNzBCODgxNDg3NzQwQjBCNDdBODc3MThFRUE1MDlCQjhECi06MTAwRjMwMDAxMDA4NzcwMjk3RjAxOEVFQTMxN0VFQTQwOEE4MDEwQjhCCi06MTAwRjQwMDA4ODAyMDc0NzAyMUJFRUEwOTdGMTBCODgwMjk4RjIyNzUwCi06MTAwRjUwMDA5MDIzMkI5MDIyMDQ3ODEwMDZCQjEwMDc0NzEyMDhCQjgxCi06MTAwRjYwMDAwMjI4OTAyMTA3NzcxMDBDODgxMDA3ODgwMjBCODgwMjRFCi06MTAwRjcwMDAxN0VFOTg4QjMzMDdCQjAxODczNDBCODgwMjk4RjM5N0UxCi06MTAwRjgwMDA5OTk3RjQ4Qjk1ODczOTlCRjU4ODk2OEIzODk4RjY4OEQ2Ci06MTAwRjkwMDA5Nzk3Rjk5QkY4OThGNzE3RUU4RjI4RTI4NTA3QzcwODBGCi06MTAwRkEwMDAyRDc0Q0YwODQ4MEIyOEU2ODU2NTU1MEYyQjIyMUUyODg3Ci06MTAwRkIwMDAyMjFEN0I4OTAyMkIwQTAwNjRCRjA0MkNCMDA3MjhCMEQ1Ci06MTAwRkMwMDAwMERBMjAwNjg4MEEyODgyNENDMEQxMEI4MDAwREJBMDAyCi06MTAwRkQwMDA2NUFGRTc2M0ZFRTkwMDAwMjkyMDcyNjU5RTlDNjAwNDBFCi06MTAwRkUwMDBFNzJBMjA3MjY1QUVDMzYwMDRERTAwMDAyRUIwMDMyQzM5Ci06MTAwRkYwMDAyMDY3RDRFMDY1QzEwNThBMzI4QzMzMEFGRjUwMEM0NTY2Ci06MTAxMDAwMDA1NEJDNTU2NEY0RUIxOUVFNzQ4ODJBMDlBOTAxMDk4OEM3Ci06MTAxMDEwMDAwQzY0ODIxRkMwOTI2MDAwREQyRUQwMDMyQTIwNjdENEFBCi06MTAxMDIwMDBFMDY1QTBEODhBMzI4QjMzMEFGQzUwMEI0NTU0QkM1NTdFCi06MTAxMDMwMDA2NEM0QkUxOUVFNjk4ODJBMDlBOTAxNzk4OUQ1MEJFQTI5Ci06MTAxMDQwMDA1MDY0QTRFMzBDRUUxMUMwRjAyRjE2MTMyRTE2MTY4QTZFCi06MTAxMDUwMDBFNzhDRTgyQTE2MTI4RUU5REZDMEFBRUE3RUFCMDFCMTVFCi06MTAxMDYwMDBDRjBCQTg1MDY1ODM0Njg4MzdEQkMwQUU4OTk5MUU3OEMwCi06MTAxMDcwMDA5QjAyMkJDQzAxMkIxNjFCMjkxMjBFMkIwQTAwMjkxNkMyCi06MTAxMDgwMDAxQTdGQzMwNzdGQzkwMjdFQUIwMUMwQjE2NUI0OUQ4QkQ3Ci06MTAxMDkwMDAzNTJGMEEwMDJBMEEwMDdBQzMwNTY0QzNDQjJGMEEwMTQwCi06MTAxMEEwMDA2NUY0ODkyQjEyMTYyQjE2MTkwMDUxMDRDMEMxMDBDQzBGCi06MTAxMEIwMDAxQTJDQ0NGRjJDMTYxNzBDRkMxMzJDMTYxODJCMTIxQUZBCi06MTAxMEMwMDAyQTEyMUJEQzUwNTgxOTc0QzBEMEMwOTAyRTVDRjQyQzJFCi06MTAxMEQwMDAxMjE3MjgxMjE4MkYxMjFCMkExMjFBMDhGRjAxMENBQTI1Ci06MTAxMEUwMDAwMTg4MzQwNzRDMEFBQjhCMjgxMjE5MkJDNjE2MkY4NkExCi06MTAxMEYwMDAwODJBODYwOTJFNzQxMDI5MjQ2NzJFNzAwMzg5NzVCMTc5Ci06MTAxMTAwMDBFQTJBNzQwM0IwOTkwOTQ5MEM2NTlEQjMyQjIwNjcyRDE5Ci06MTAxMTEwMDAyNTAyNjVCM0ZBMkIyMjFFMkMyMjFEN0JDOTAxQzBCMDBCCi06MTAxMTIwMDA2NEJEOUMyQ0IwMDcyOEIwMDBEQTIwMDY4ODBBMjg4MjBCCi06MTAxMTMwMDA0Q0MwRDEwQjgwMDBEQkEwNjVBRkU3NjNGRDgxODlCQUFECi06MTAxMTQwMDBCMTk5NjU5MDk3ODgzNDFDRUUyNTk4QkE4RjMzMUVFRUJFCi06MTAxMTUwMDAxRTBGNEY1NDJGQjQyQzhEMkE4QTMyMEVERDAyMENBQzk4Ci06MTAxMTYwMDAwMTdEQzk2NjBBNDk1MTZGOTI2MDhBMzM3NUE2NUIyQzZFCi06MTAxMTcwMDBCMDEzMEFFRDUxMERDRDAxMEQwRDQxMEMwQzQxN0RDOThGCi06MTAxMTgwMDA0OTJFQjAxMkIwRUU2NUUzQzZDMEQwOEUzNzhDQjg4QTU3Ci06MTAxMTkwMDAzNjhGQjk3Q0EzMDc3QUM5MDI3RUZCMDFDMEQxQ0VEOUI0Ci06MTAxMUEwMDA4ODM1MEFBRDAyMEU4RTA4NzhFQjAyMkRBQzAxODlCN0E2Ci06MTAxMUIwMDBEQUMwQUY5Qjc5QkIwMUIxQ0FEQ0IwQzBCMDdEQTMwNzc4Ci06MTAxMUMwMDA3QUQ5MDI3Q0VCMDFDMEIxNjRCMTYxQzA5MTI5MjQ2Nzc2Ci06MTAxMUQwMDBDMDIwRDEwRjAwMDA4QURBQjFBQTY0QTBDMDJDMjA2NzE5Ci06MTAxMUUwMDAyRDI1MDI2NUMzMTExREVERjg4QTMyMUVFREZEMERBREYyCi06MTAxMUYwMDAwMTBFREQwQzY1RDI4QTBBNEU1MTZGRTIwMjYwMDI4MTU3Ci06MTAxMjAwMDBDMDkwMjkyNDY3MDkwRjQ3NjVGMkY4MjgyMjFEN0I4OUMxCi06MTAxMjEwMDAwMjJCMEEwMDY0QkNBODJDQjAwNzI4QjAwMERBMjAwNjE0Ci06MTAxMjIwMDA4ODBBMjg4MjRDQzBEMTBCODAwMERCQTA2NUFGRTc2MzQxCi06MTAxMjMwMDBGQzhEMDAwMDBDRTk1MDY0OTJFRDBDRUYxMUMwODAyODg5Ci06MTAxMjQwMDAxNjExQUZCRjJGMTYxOThFRjg4QkY3REFFMDhGRjkyQjM2Ci06MTAxMjUwMDAxNjEwQUJGQjdGQkIwMUIxRUEwQ0E4NTA2NTgwRDY4OEE1Ci06MTAxMjYwMDAzN0RDRTBBRjg5OTkxQzc4OUIwMjJDRUMwMTJDMTYxQjEzCi06MTAxMjcwMDAyOTEyMEMyQzBBMDAyOTE2MUE3QUUzMDc3QUU5MDI3RjUwCi06MTAxMjgwMDBCQjAxQzBDMTY1QzJBNThCMzUyQzBBMDAyQTBBMDA3QUIxCi06MTAxMjkwMDBFMzA1NjRFMUNBMkMwQTAxNjRDRTBENjAwMjhFODgzNDM1Ci06MTAxMkEwMDAxQkVEQ0Y5OERBOEYzMzFFRURDODBGNEY1NDJGRDQyQzdGCi06MTAxMkIwMDA4QzJBOEEzMjBFQ0MwMjBCQUIwMTBDQkIwQzY1QkYwQTI4Ci06MTAxMkMwMDAwQTQ5NTE2RTkyMDI2M0ZGMDE4QTMzMEFBQjUwNjRCRTMxCi06MTAxMkQwMDBGOTJDRDAxMzBBRUU1MTBFQ0UwMTBFMEU0MTBDMEM0MTJBCi06MTAxMkUwMDAwRUNDMEM2NUNFRTQyRkQwMTJCMEZGNjVGMjZFQzBCMDBDCi06MTAxMkYwMDA4RTM3OENEODhBMzYyRkQyMDk3Q0EzMDc3QUM5MDI3RTEyCi06MTAxMzAwMDBGQjAxQzBCMTY1QkVDMzg4MzVEQkEwQUU4RTc4RUIwMUIyCi06MTAxMzEwMDBCMUFCODlEN0RBQzBBRjlENzlEQjAxQjFDQUMwQzA3QjYwCi06MTAxMzIwMDBBMzA3N0FCOTAyN0RFQjAxQzBDMTY1Q0U5REMwOTAyOUFCCi06MTAxMzMwMDAyNDY3QzAyMEQxMEY4ODM3OEMzNjk4MTQwQ0U5MEMyOTBCCi06MTAxMzQwMDAxNjE0MDhGODBDOTgxRDc4RkIwNzI4MTIxNEIwODgyODhBCi06MTAxMzUwMDAxNjE0ODkxRDlGMTU5QjE2QzBGMDJCMTIxNDI5MTYxQUZFCi06MTAxMzYwMDAyQjE2MUI4QjE0N0FFMzBCN0FFOTA2ODgxNThFMTY3OEY4Ci06MTAxMzcwMDBFQjAxQzBGMTY1RjFCQTI5MTIxQTJGMTIxMThBMzUyRTJDCi06MTAxMzgwMDAxMjFCOUExQUFGRUUyRjEyMTBDMEEwQUY5Rjc5RkIwMTZCCi06MTAxMzkwMDBCMUVFOUYxMTg4MUFDMEYwOTgxMDdBRTMwQTdFQTkwNTcxCi06MTAxM0EwMDAyQTEyMDE3QThCMDFDMEYxNjRGMDgxNjAwMTgzODkzNkQxCi06MTAxM0IwMDA4QjM3OTkxNzBCRTgwQzk4MUYwOUM5MEMyOTE2MTU3ODVCCi06MTAxM0MwMDBFQjA3MjgxMjE1QjA4ODI4MTYxNUQ5QzA5QTE5OUUxODRGCi06MTAxM0QwMDA4QTFGMkUxMjE1MkExNjFBMkUxNjFCREFDMEMwRTA4QzkwCi06MTAxM0UwMDAxNzdGOTMwQjdGQTkwNjg4MTg4RjE5NzhGQjAxQzBFMTNFCi06MTAxM0YwMDA2NUUxM0UyOTEyMUEyRjEyMTM4QTM1MkUxMjFCOUExQkYxCi06MTAxNDAwMDBBRkVFMkYxMjEyQzBBMEFGOUY3OUZCMDFCMUVFOUYxMzc4Ci06MTAxNDEwMDA4ODFCQzBGMDk4MTI3QUUzMEE3RUE5MDUyQTEyMDM3QTgzCi06MTAxNDIwMDA4QjAxQzBGMTY1RjEwQTJFMTIxNjJFMTYxOTJBMTIxQjE1Ci06MTAxNDMwMDAwMDUxMDRDMEUxMDBFRTFBQjBFRTJFMTYxNzBFRkYxMzk1Ci06MTAxNDQwMDAyRjE2MTgwRkNDMDFBQ0FBMkYxMjFBMEVCQzAxQUNGQzNGCi06MTAxNDUwMDA3RkNCMDFCMUFBMkExNjFCMkMxNjFBNjNGQzVFMDAwMDcyCi06MTAxNDYwMDA3RkIzMDI2M0ZFMzE2M0ZFMkI3RUIzMDI2M0ZDMzA2MzA1Ci06MTAxNDcwMDBGQzJBMDAwMDY0NTBDMERBMjBEQkMwNTgxNjQ4QzAyMEE3Ci06MTAxNDgwMDBEMTBGQzA5MTYzRkQ3QTAwQzA5MTYzRkE0NERBMjBEQjhBCi06MTAxNDkwMDA3MEMwRDEyRTBBODBDMDlBMjkyNDY4MkM3MDA3NTgxNTc0Ci06MTAxNEEwMDAzOEQyQTBEMTBGMDM0NzBCMThFRDRGREI3MEE4Mjg3ODc2Ci06MTAxNEIwMDA3MzAyMkI3REY4RDlCMDYzRkE2MTAwMDAyQTJDNzREQjJCCi06MTAxNEMwMDA0MDU4MEVCMzYzRkFFNDAwMDAyOTIyMUQyRDI1MDI3QjRCCi06MTAxNEQwMDA5OTAxQzBCMEM5QjYyQ0IwMDcyOEIwMDBEQTIwMDY4ODQwCi06MTAxNEUwMDAwQTI4ODI0Q0MwRDEwQjgwMDBEQkEwNjVBRkU3QzAyMDhBCi06MTAxNEYwMDBEMTBGQzA5MTYzRkJGRjAwMDIyQTAyNTgwMjQ0MEFBMkU2Ci06MTAxNTAwMDAwMjA2MDAwMDAyMkEwMjU4MDI0MTBBQTIwMjA2MDAwMDU2Ci06MTAxNTEwMDBEQjcwREEyMEMwRDEyRTBBODBDMDlFMjkyNDY4MkM3MDhFCi06MTAxNTIwMDAwNzU4MTUxN0MwMjBEMTBGQzA5NDYzRkJDOUMwOTY2MzNDCi06MTAxNTMwMDBGQkM0QzA5NjYzRkJCRjAwMkEyQzc0REIzMERDNDA1QjJECi06MTAxNTQwMDBGRTExREJBMEMyQTAyQUI0MDAyQzIwMEM2M0ZGMjcwMEYwCi06MTAxNTUwMDA4RDM1OENCNzdEQ0IwMjYzRkREMjYzRkM2RDhGMzU4RUVDCi06MTAxNTYwMDBENzdGRUIwMjYzRkRDNTYzRkM2MDAwMDA2QzEwMDRDMDE0Ci06MTAxNTcwMDAyMEQxMEYwMDZDMTAwNEMwMjBEMTBGMDA2QzEwMDQyQjgwCi06MTAxNTgwMDAyMjFFMjgyMjFEQzBBMEMwOTQyOTI0MDYyQTI1MDI3QkUxCi06MTAxNTkwMDA4OTAxREJBMEM5QjkxM0VEMDZEQTIwMjhCMDAwMkNCMDEwCi06MTAxNUEwMDAwNzAzODgwQTI4ODI0Q0MwRDEwQjgwMDBEQkEwNjVBRkZFCi06MTAxNUIwMDBFN0MwMjBEMTBGMDAwMDAwNkMxMDA0MkMyMDA2MkEyMTY3Ci06MTAxNUMwMDAwMjY4QzgwNTI4Q0NGOTY1ODEyRTBBMDk0QzY1OTEwNDhBCi06MTAxNUQwMDA4RjMwQzFCODBGOEYxNDdGQjAwNTI4MjEyMzY1ODEyNzc0Ci06MTAxNUUwMDAxNkVDRjUyOTYyOUU2Rjk4MDI2MDAwRjgxOUVDRjEyOTVCCi06MTAxNUYwMDA5MjI2Njg5MDA3OEEyMDA5QUEwQzY1QTBFNzJBNjI5REI2Ci06MTAxNjAwMDA2NEEwRTEyQjIwMEMwQ0I5MTFBNjk5MkQ5Mjg2NkZEOUZDCi06MTAxNjEwMDAwMjYwMDBEQjFERUNFOTBEQkQwQTJERDJBMzY4RDAwN0U2Ci06MTAxNjIwMDA4RTIwMERFRTBDNjVFMEM3Mjc5Mjg1QzBFMDY0NzBCRjg4Ci06MTAxNjMwMDAxREVDRUU2ODQzNEUxQ0VDRUQ4QTJCMENBQTAyOUE3MDRFCi06MTAxNjQwMDA4OTIwMDg5OTExMEQ5OTAyOTk3MTg4MkE5ODc0OEYzMjBFCi06MTAxNjUwMDA5Rjc1MjgyMTA0MDg4ODExOTg3NzE4RUNERTBDQkYxMUJCCi06MTAxNjYwMDBBNkZGMkRGMjg1QThCODJFODRDRjJEREMyODJERjY4NTc3Ci06MTAxNjcwMDBDODVBMkEyQzc0REI0MDU4MEU0NkQyQTBEMTBGQzAyMDg1Ci06MTAxNjgwMDBEMTBGMDAwMDAwMjlDQ0Y5NjQ5MEIxMkMyMDY2ODkzMTdCCi06MTAxNjkwMDBCMUNDMEMwQzQ3MkMyNDY2NkVDNjAyNjAwMDg1MDlGODlDCi06MTAxNkEwMDA1MDY1ODA3RjFDRUNEMzhBMkIwRjA4NDAwQjg4MTAwOEY0Ci06MTAxNkIwMDBBQTAyMENBQTAyOUE3MDg5MjAwODk5MTEwRDk5MDI5OTIwCi06MTAxNkMwMDA3MTg4MzM5ODczOEMzMjlDNzI4QTJBOUE3NDg5MzQ5OUZGCi06MTAxNkQwMDA3NTYzRkY3RDAwQ0M1N0RBMjBEQjMwREM0MDU4MTUxREU4Ci06MTAxNkUwMDBDMDIwRDEwRjAwREEyMEMwQjY1ODE1QUM2M0ZGRTUwMDZBCi06MTAxNkYwMDBEQTIwNTgxNUFBNjNGRkRDMDBEQTIwREIzMERDNDBERDlECi06MTAxNzAwMDA1MDU4MTYzOEQyQTBEMTBGQzg1OERBMjBEQjMwNTgxNDAwCi06MTAxNzEwMDA4QTJBMjEwMjY1QUZCREMwOTQwOUE5MDIyOTI1MDI2MzY2Ci06MTAxNzIwMDBGRkIyMDAwMDJCMjEwNDU4MTQzNTFERUNBRkMwRTAyRTkxCi06MTAxNzMwMDAyNDY2OEYzMDJCMjAwQzBGOEYxNDYzRkY2NjI5MjEzODBECi06MTAxNzQwMDBDMDg4Nzk4MzAyNjNGRjVCMkMyMDY2MkIyMTA0QjFDQzE3Ci06MTAxNzUwMDAwQzBDNDcyQzI0NjY1ODE0MjkxREVDQTNDMEUwMkUyNDQxCi06MTAxNzYwMDA2NjhGMzAyQjIwMEMwRjhGMTQ2M0ZGMzc2QzEwMDRDMDcyCi06MTAxNzcwMDBCN0MwQTExNkVDQTAxNUVDOTJENzIwRDg0MEI4MjJDMDczCi06MTAxNzgwMDA0MDA1MzUwMjk2NzE5NTcwMDJBNDM4MDQwNDQyQzk0Qjk1Ci06MTAxNzkwMDAxQUVDODUxOUVDODYyOUE2N0VDMTQwRDMwRjZENEEwNTQ3Ci06MTAxN0EwMDAwMDgwODgwMDIwOEMyMjBBODhBMjcyRDEwRkMwNTAwOEM1Ci06MTAxN0IwMDBBNTM4NzVCMEUzNjNGRkQ3NkMxMDA2OTMxMzk0MTEyOTE1Ci06MTAxN0MwMDAyMDA2NjU1Mjg4QzA3MTY4OTgwNTJBOUNGOTY1QTI5ODIwCi06MTAxN0QwMDAxNkVDNzkyOTIxMDI4QTEzMDkwOTRDNjU5MENEOEFBMDVCCi06MTAxN0UwMDAwQTZBNTEyQUFDRkQ2NUEwQzJDQzVGREIzMERBMjA4Q0RFCi06MTAxN0YwMDAxMTU4MTREOEMwNTE5QTEzQzdCRjlCQTk4RTEzMkVFMjVCCi06MTAxODAwMDAwOTY4RTA2MDJGNjI5RTFERUM2QTZGRjgwMjYwMDA4NDM4Ci06MTAxODEwMDAyREQyMjY2OEQwMDUyRjIyMDA3REY5NzgyQzYyOURDNzM1Ci06MTAxODIwMDA5MDY0QzA3MDlDMTA4QTEzMkIyMDBDMkFBMDIwMENCRDQxCi06MTAxODMwMDAxMUE2REQwQTRGMTRCRkE4MDk4ODAxMjlEMjg2QUY4OEY2Ci06MTAxODQwMDAyODhDMDk3OThCNTkxRkVDNUMwRkJGMEEyRkYyQTM2ODEzCi06MTAxODUwMDBGMDA1MjgyMjAwN0Y4OTQ3MjlEMjg1RDQ5MDY1OTA3NUFDCi06MTAxODYwMDA2MDAwNDMwMDAwMkIyMDBDMUZFQzU0MENCRDExQTZEREMyCi06MTAxODcwMDAyOUQyODYwRkJGMEE2RTk2MTAyRkYyQTM2OEYwMDQ4ODUzCi06MTAxODgwMDAyMDdGODkwNTI5RDI4NTY1OTE2NURBMjA1ODE1NDNDOURECi06MTAxODkwMDA1QzYwMDFGRjAwREEyMEMwQjY1ODE1NDA2MDAwMEMwMDAzCi06MTAxOEEwMDBDMDkwNjNGRkI1MDAwMERBMjA1ODE1M0M2NTUxRTQ4RDA3Ci06MTAxOEIwMDAxMzhDMTFEQkQwOEREMDAyMkEwMjBENkQ1MTU4MTNBRDVGCi06MTAxOEMwMDA5QTEzNjRBMUNFQzc1RjhGQTE5NUE5QzA1MTBGMEY0NzhFCi06MTAxOEQwMDA5RjExNjNGRUZEMDBDMDkxQzBGMTI4MjAwNjJDMjA2NkY4Ci06MTAxOEUwMDAyODhDRjlBN0NDMEMwQzQ3MkMyNDY2NkZDNjA5OEQxM0U1Ci06MTAxOEYwMDA4REQxNzBERTAyMjkwQTAwMDk5RDAyNjQ4MTU5QzlEMzg1Ci06MTAxOTAwMDA4QTEwMkIyMTA0NTgxM0JEOEExM0MwQjAyQjI0NjYyRUQ1Ci06MTAxOTEwMDBBMjA5MkFBMDIwMEUyODE0MUNFQzMzOEQxMzE1RUMyN0U1Ci06MTAxOTIwMDBDMTcwMEE3NzM2ODU1NjJEREMyOEFDMkM5QzEyREVEMDhGCi06MTAxOTMwMDBBODU1N0NEMzAyMkVEREY4RDNFMERBNDAwNTVCMDJEQzRCCi06MTAxOTQwMDAzMDVCRkY4QUQ0QTAyODIwMENCNDU1QzBEMDJCMEE4ODY1Ci06MTAxOTUwMDAyRjBBODAwQzhDMTFBNkNDMjlDMjg1QUYzRkFCOTkyOUU4Ci06MTAxOTYwMDBDNjg1MUNFQzFDREVGMEFDODgyRDg0Q0YyODEyMDIyOTIxCi06MTAxOTcwMDAxMjAzNzhGMzAyMkVGREY4Mjg5MDIwRDNFMDA3ODgwQzlDCi06MTAxOTgwMDBDMTcwMDgwODQ3Mjg5NDIwMDg3NzM2NjU3RkFCODkxMzEzCi06MTAxOTkwMDAxM0VDMUE4OTkwQzBGNDc3OTc0OTFCRUMxOEMxQ0EyODM4Ci06MTAxOUEwMDAyMTA0ODUxMzA5OUU0MDA2RUUxMTg3NTMwNDg4MTE4NTkyCi06MTAxOUIwMDA1MjBFODgwMjBDODgwMjlCQTA5RkExOEYyQjlEQTU5ODk4Ci06MTAxOUMwMDBBNDk3QTc5NUE2MDNGRjAyOUZBMjJDMjAwQzFFRUMwMTUyCi06MTAxOUQwMDBBRUNFMENDQzExMDZDQzA4MkJDMjg1MkRFNENGMkJCQzhGCi06MTAxOUUwMDAyMDJCQzY4NTJBMkM3NDhCMTE1ODBENjlEMkEwRDEwRkRCCi06MTAxOUYwMDAyODIwM0RDMEUwN0M4NzdGMkUyNDY3MEUwQTQ3NjVBMDIzCi06MTAxQTAwMDA3QjFBRUJGRjg4MjAxRUVCRUQ4RjEzOEVFNDhGRjQwODFBCi06MTAxQTEwMDA4ODExMEE4ODAyMEY4RjE0QUZFRTFGRUJGQTk4OTEwRjBFCi06MTAxQTIwMDBFRTAyOUU5MDFFRUJGOUMwODAxQUVCRUEyQ0QyODVBQTNBCi06MTAxQTMwMDBCQUI4Q0MyOEE0Q0YyQ0Q2ODUyQzIxMDIyRjIwNzIwRTI4Ci06MTAxQTQwMDBDQzAyQjFGRjJGMjQ3MjJDMjUwMkMwMjBEMTBGODcxM0E2Ci06MTAxQTUwMDA4NzcwMDcwNzQ3NjNGRDZFMjgyMTM4QzA5OTc5OEIwMjhDCi06MTAxQTYwMDA2M0ZFOUFEREYwNjNGRTk1MDBEQTIwREIzMDhDMTFERDM5Ci06MTAxQTcwMDA1MDU4MTU1Q0QyQTBEMTBGQzBFMTYzRkY3QThCMTM4QzU0Ci06MTAxQTgwMDAxMURENTBDMEFBMkUwQTgwMkEyNDY4REEyMDU4MTNCQzFGCi06MTAxQTkwMDBEMkEwRDEwRkMwMjBEMTBGNkMxMDA2MjkyMTAyQzBEMEQ2Ci06MTAxQUEwMDA3NTk3MTAyQTMyMDQ3RkE3MEE4QjM1N0ZCRjA1MkQyNTM1Ci06MTAxQUIwMDAwMjBERDkwMjA5MEM0QzY1QzE4MjE2RUJCRTFFRUJCQ0FGCi06MTAxQUMwMDAyODYyOUVDMEZBNzhGMzAyNjAwMTg4MjlFMjI2Njg5MEI1Ci06MTAxQUQwMDAwNzhBMjAwOUFBMEM2NUExN0EyQTYyOURERkEwNjRBMTY5Ci06MTAxQUUwMDA3NzJCMjAwQzBDQkMxMUE2Q0MyOUMyODZDMDhDNzk4MzI0Ci06MTAxQUYwMDAwMjYwMDE1NzE5RUJCMTA5QjkwQTI5OTJBMzY4OTAwNzRFCi06MTAxQjAwMDA4ODIwMDk4ODBDNjU4MTQzMjdDMjg1MUNFQkIzNjQ3MTZBCi06MTAxQjEwMDAzQTg5MzEwOThCMTQwQ0JCMDE2RkIxMUQyQzIwNjY5RkQzCi06MTAxQjIwMDAxMEIxQ0MwQzBDNDcyQzI0NjY2RUM2MDI2MDAxNDAwOTMzCi06MTAxQjMwMDBGRjUwNjVGMTNBOEExMDJBQUMxODg5MzRDMEM0N0Y5N0U3Ci06MTAxQjQwMDAzQzE4RUJCMzFCRUJCMjhGMzU5QzcxOUI3MDhCMjA5REM3Ci06MTAxQjUwMDA3NDA4QkIwMjlCNzJDMDgyOTg3NTFCRUJBRTBGMDg0MEU1Ci06MTAxQjYwMDA5QjczMEY4ODExOTg3NzdGRjcwQjJGMjEwMjI4NEEwMDZCCi06MTAxQjcwMDAwOEZGMDIyRjI1MDJDMEI0NjAwMDA0MDAwMDAwQzBCMEJFCi06MTAxQjgwMDA3RTk3MDQ4RjM2MkYyNTIyN0Q5NzA0ODgzNzI4MjUyMUJDCi06MTAxQjkwMDA3Qzk3MzZDMEYxQzA5MDBBRjkzODJGM0MyMDA5MDk0MkUxCi06MTAxQkEwMDA2NDkwODYxOUVCODAxOEVCODEyODk2N0UwMEYwODgwMEZGCi06MTAxQkIwMDBBMDhDMDBGMDg4MDBBMDhDMDBGMDg4MDBBMDhDMkE2MjI1Ci06MTAxQkMwMDA5RDJERTRBMjJBQUMxODJBNjY5RDg5MzA3Nzk3Mzg4RjFDCi06MTAxQkQwMDAzMzhBMzIxOEVCOEEwN0JFMEIyQzIxMDRCNEJCMDRDQzI5Ci06MTAxQkUwMDAxMTk4RTBDMDg0OThFMTg4MkI5REU1OUFFNjlGRTcxQTVBCi06MTAxQkYwMDBFQjgyMDk5RjQwMDZGRjExMEZDQzAyMEE4ODAyOThFMjhGCi06MTAxQzAwMDBDMUZDMEZDQzAyMkNFNjA0QzlCODJDMjAwQzFFRUI3MUQxCi06MTAxQzEwMDAwQ0NBMTFBRUNDMDZBQTA4MjlBMjg1MkRDNENGMDlCOUQ5Ci06MTAxQzIwMDAwQjI5QTY4NUNGNUNDMDIwRDEwRkMwODFDMDkwMEY4OTQxCi06MTAxQzMwMDAzOEMwODc3OTg4MDI2M0ZGNzI2M0ZGNjYwMENDNTdEQTg5Ci06MTAxQzQwMDAyMERCMzBEQzQwNTgxM0MzQzAyMEQxMEZEQTIwNTgxNEY5Ci06MTAxQzUwMDA1MzYzRkZFOEMwQTA2M0ZFODJEQTIwQzBCNjU4MTQ0Rjc5Ci06MTAxQzYwMDA2M0ZGRDkwMERCNDAyQTJDNzQ1ODBDQzlEMkEwRDEwRkQ1Ci06MTAxQzcwMDA4QTEwMkIyMTA0NTgxMkUxMUVFQjRFQzBEMDJEMjQ2NjkxCi06MTAxQzgwMDA2M0ZFQjEwMDZDMTAwNkQ2MjAxOUVCNDkxRUVCNEIyODAxCi06MTAxQzkwMDA2MTAyMTdFQjQ4MDgwODRDNjU4MDVGOEEzMDBBNkE1MTc4Ci06MTAxQ0EwMDA2OUEzNTcyQjcyOUU2RUI4M0YyQTkyMjY2OEEwMDQ4Q0I3Ci06MTAxQ0IwMDA2MDdBQzkzNDJBNzI5RDJDNENGRUNBQUIyQjYwMENCNkRDCi06MTAxQ0MwMDA0RjBDQkQxMUE3REQyOEQyODYwRUJFMEE3OEZCMjY5Q0RDCi06MTAxQ0QwMDAxMTJFRTJBMzJDMTYwMDY4RTAwNTJGNjIwMDdFRjkxNTk0Ci06MTAxQ0UwMDAyMkQyODVDRjI1NjAwMDBEMDBEQTYwQzBCNjU4MTQyQkQzCi06MTAxQ0YwMDBDODVBNjAwMTBGMDBEQTYwNTgxNDI4NjU1MTA2REM0MEFDCi06MTAxRDAwMDBEQjMwOEQzMERBNjAwRDZENTE1ODEyOUFEM0EwNjRBMDhCCi06MTAxRDEwMDBGMzg0QTFDMDUxMDQwNDQ3NjNGRjZEMDBDMEIwMkM2MDgwCi06MTAxRDIwMDA2Njg5MzFCMUNDMEMwQzQ3MkM2NDY2NkZDNjAyNzA5Njg0Ci06MTAxRDMwMDAwQTJCNjEwNDU4MTJCMUMwQjAyQjY0NjY2NTUwQjQyQUY2Ci06MTAxRDQwMDAzQzEwQzBFN0RDMjBDMEQxQzBGMDAyREYzODBGMEY0MkVBCi06MTAxRDUwMDA2NEYwOTAxOUVCMTQxOEVCMTUyODk2N0U4RDEwNkREQTRGCi06MTAxRDYwMDAwNTAwQTA4ODAwQzA4Q0MwQTA4OTMwMURFQjI0Nzc5N0E3Ci06MTAxRDcwMDA1Mzg4MzI4QzEwOEYzMzAyQ0UwQkMwMjQ5MkUxMjI2MTQzCi06MTAxRDgwMDAwNDlERTAwNDIyMTE4RDZCOUJFNTlGRTc5OEU2MUZFQjE1Ci06MTAxRDkwMDAxQTA5OTg0MDA2ODgxMTA4MjIwMjBGREQwMkMxOEQ5REE0Ci06MTAxREEwMDBFMjA4MjIwMjkyRTRCNEMyMkU2MDBDMUZFQjBBMENFODk3Ci06MTAxREIwMDAxMUE3ODgyQzgyODVBRkVFMEMyMjBCMkJFNENGMjI4NjU0Ci06MTAxREMwMDA4NUQyQTBEMTBGMjg2MDBDRDJBMDhDMTExOUVCMDIwQzg3Ci06MTAxREQwMDA4RDExQTk4OEE3REQyRUQyODUyQjg0Q0YwRUNDMEIyQzlDCi06MTAxREUwMDBENjg1RDEwRkMwRjAwQURGMzg3RkU4MDI2M0ZGNkM2MzRECi06MTAxREYwMDBGRjYwMDAwMDJBNkM3NEMwQjJEQzIwREQ0MDU4MTI4RkY2Ci06MTAxRTAwMDBDMEIwNjNGRjYzQzAyMEQxMEYwMDAwMDA2QzEwMDQyQzMxCi06MTAxRTEwMDAyMjFEMkEyMjFFQzA0OUQzMjAyOTMwMDYyNDM0NjhDMDNFCi06MTAxRTIwMDA0MDdBQzEwNUREQTA2MDAwMDIwMEMwRDA2RTk3MzhDMEM2Ci06MTAxRTMwMDA4RjJFMEE4MDJCMzAxNEMwOTYyOTM0MDYwRUJCMDIyRTNBCi06MTAxRTQwMDAzMTAyMkIzNDE0N0U4MDA0MjQzNTAyREU0MDdBQzEwRTI4Ci06MTAxRTUwMDBDOEFCREJEMERBMzAyQzBBMDA1ODBBRTUyRTMxMDIwRTZFCi06MTAxRTYwMDAwRjRDQzhGRUMwMjBEMTBGNjg5NUY4MjgzMTAyMDgwODMxCi06MTAxRTcwMDA0QzY1OEZFRjFBRUFEMDFDRUFDRTJCQTI5RUMwOUE3QjRCCi06MTAxRTgwMDA5QjQ2MkJDMjI2NjhCMDA0OEQzMDdCRDkzQjI5QTI5RDhFCi06MTAxRTkwMDBDMEUzQ0I5Mzk0OTAxQkVBRTAyRDMxMDQ5Qjk2MDhEREMwCi06MTAxRUEwMDAxMTBFREQwMjlEOTc5RDkxMTJFQUREQzBFNTI0QzRBMkNBCi06MTAxRUIwMDAyRTM0MDYyRjMxMDIyOEEyOUQwMkZGMDIyODhDMzAyOEUyCi06MTAxRUMwMDBBNjlEMkYzNTAyQzAyMEQxMEZEQTMwQzBCNjU4MTNCMzBCCi06MTAxRUQwMDBDMDIwRDEwRjZDMTAwNjI5MjAwNjY4OTgwNTI4OUNGOUFGCi06MTAxRUUwMDA2NTgyNUQyOTIxMDIwOTA5NEM2NTkyMTBDRDUxREIzMEQ0Ci06MTAxRUYwMDBEQTIwMDQ0QzAyNTgxMzE3QzA1MUQzQTBDN0FGMkEzNkJBCi06MTAxRjAwMDAwQUMwRTAxOUVBQUQxREVBQjMxRkVBQUM4QTNBMTZFQTQ0Ci06MTAxRjEwMDBBOUIxQUM2NEMxMzUyODYyOUU2Rjg4MDI2MDAxRjEyOUM1Ci06MTAxRjIwMDBEQzMzMjk5MjI2Njg5MDA3OEIyMDA5QkIwQzY1QjFFMDUxCi06MTAxRjMwMDAyNzYyOURDMDhFNjQ3MUQ4MkIyMDBDMENCQzExQTZDQ0RFCi06MTAxRjQwMDAyOUMyODY3OTgzMDI2MDAxRDIxOUVBOUIwOUI5MEEyOTVDCi06MTAxRjUwMDA5MkEzOTcxMDY4OTAwODI4MjIwMDA5ODgwQzY1ODFCQjFECi06MTAxRjYwMDAyN0MyODU2NDcxQjUyOTIwMDYyOTlDRjk2NDkxRUMyQzVGCi06MTAxRjcwMDAyMDY2ODkzMUIxQ0MwQzBDNDcyQzI0NjY2RUM2MDI2MEY5Ci06MTAxRjgwMDAwMUExMDlGODUwNjU4MTlCODgzNjg5RjQwODhDMTRBQzRFCi06MTAxRjkwMDA5OTFDRUE4QjBDOTkwMjJDMjEwNDk5NzAxOUVBQTEwODZBCi06MTAxRkEwMDAwODQ3OTk3MTg5MkEwOTg4MTAwODk5MDIxOEVBOUUwODM5Ci06MTAxRkIwMDA5OTAyOTk3MjI4MzAxMzI5MzAxMjA0ODgxMDA2OTkxMDVBCi06MTAxRkMwMDAwODk5MDIyODMwMkM5QTc0MEM4ODEwMDhDODAyMDk4OEQ1Ci06MTAxRkQwMDAwMjk4NzM4OTM3OTk3NTg4Mzg5ODc2OEEzOUMwODE5QUJBCi06MTAxRkUwMDA3NzFBRUE5MTg5MzU5ODdCOTk3ODA5ODkxNDBBOTkwMkI4Ci06MTAxRkYwMDA5OTdBOEEzMDg5MzI3N0E3MzYxOEVBODA4RjMzOTg3Q0FECi06MTAyMDAwMDBDMDg0OTg3RDg4MkIyRTc2MTEyOTc2MTIyRjc2MTMxOThECi06MTAyMDEwMDBFQTdBMEE5RjQwMDZGRjExMDRDQTExMDk4ODAyMEZBQTMyCi06MTAyMDIwMDAwMjk4N0VDMUY5MEZBQTAyMkE3NjEwQzBBQTYwMDAwMUE4Ci06MTAyMDMwMDBDMEE2QURCRjBDQkMxMUE2Q0MyOUMyODUyRUY0Q0YwOTE5Ci06MTAyMDQwMDBBOTBCMjlDNjg1NjU1MTA3QzAyMEQxMEYyQjIwMEMwQzg4Ci06MTAyMDUwMDBCQzExMDZDQzA4MjhDMjg2MDlCOTBBNkY4OTAyNjAwMTQyCi06MTAyMDYwMDAyRTI5OTJBMzY4OTAwODJBMjIwMDA5QUEwQzY1QTExRkI0Ci06MTAyMDcwMDAyQUMyODU2NEExMTkyODIwM0QwODI4NDA2NDgwOEM4NEU4Ci06MTAyMDgwMDAzNTA0ODQxNDY0NDA4NDg1RjU3NDUzN0Y4NDM2MDQ4NDU1Ci06MTAyMDkwMDAxNDY0NDA3Nzc0NTM3NDI5MzAxM0MwOEM3OTg4NkNDMEYxCi06MTAyMEEwMDA5MDI5MjQ2NzA5MDg0NzY1ODBFRDg4MjA4OUY0ODQzNUU0Ci06MTAyMEIwMDAxRkVBNTUwNDg0MTRBNDk0MEY0NDAyOTRBMDE0RUE1MDE3Ci06MTAyMEMwMDAwODg4MTEwNDg4MDI5OEExODQzNjk4QTMwNDg0MTRBNDczCi06MTAyMEQwMDA5OTBGOTkwMjk5QTIxOUVBNENBREI0MjhDMjg1MkU0NEYxCi06MTAyMEUwMDBDRjI4OEMxMDI4QzY4NTI4MjEwMjJGMjA3MjA5ODgwMjRCCi06MTAyMEYwMDBCMkZGMkYyNDcyMjgyNTAyQzAyMEQxMEYwMENDNTdEQTVFCi06MTAyMTAwMDAyMERCMzBEQzQwNTgxMjkzQzAyMEQxMEZDMDkxNjNGRjE4Ci06MTAyMTEwMDA4RkRBMjBDMEI2NTgxMzIxNjNGRkUxMDBEQTIwNTgxMzhDCi06MTAyMTIwMDAxRjYzRkZEODhBMTAyQjIxMDQ1ODExQjQxREVBMkExRkZGCi06MTAyMTMwMDBFQTIzMkIyMDBDQzBFMDJFMjQ2NjhBM0E2M0ZFNDgwMDc2Ci06MTAyMTQwMDAwMERBMjBEQjMwREM0MERENTA1ODEzQTZEMkEwRDEwRkRFCi06MTAyMTUwMDAyQTJDNzREQjQwNTgwQjhFRDJBMEQxMEYyOTIxMzhDMDE1Ci06MTAyMTYwMDA4ODc5ODMwMjYzRkUyMDJBMTIwMDJDMjA2NjJCMjEwNDJBCi06MTAyMTcwMDAyQ0NDMDEwQzBDNDcyQzI0NjY1ODExQTAxREVBMTYxRjBDCi06MTAyMTgwMDBFQTBGMkIyMDBDQzBFMDJFMjQ2NjhBM0E2M0ZERjgwMDhCCi06MTAyMTkwMDBEQTIwNTgxMzAyNjNGRjY0REEyMDVCRkYxQ0QyQTBEMTVGCi06MTAyMUEwMDAwRjAwMDAwMDZDMTAwODk1MTVDMDYxQzFCMEQ5NDAyQTFECi06MTAyMUIwMDAyMDNEQzA0MDBCQUEwMTBBNjQzODJBMjAwNjI5MTYwNkQxCi06MTAyMUMwMDA2OEE4MDUyQ0FDRjk2NUMzM0IxREU5RkM2NDQwMDUyRkVDCi06MTAyMUQwMDAxMjA1NjRGMjlDMjYyMTAyMUVFOUY4MDYwNjRDNjU2MjhGCi06MTAyMUUwMDBFMzE1RTlGNDY0NDBEOThBMzUyOTMwMDM5QTE0MEE5OTMxCi06MTAyMUYwMDAwQzY0OTBDQzJDMjAwQzhCMTQ5QzExMENDQzExQTVDQzE1Ci06MTAyMjAwMDA5QzEyMkNDMjg2QjRCQjdDQjMwMjYwMDJEMzhGMTEwRTI5Ci06MTAyMjEwMDBGRTBBMkVFMkEzNjhFMDA5ODYyMEQzMEYwRTY2MEM2NTQ1Ci06MTAyMjIwMDA2MkJFODgxMjI4ODI4NTY0ODJCNjg5MTQ2NDkwNUVEQTYwCi06MTAyMjMwMDA4MEQ5MzA4QzIwMUVFOUYyMUZFOUYzMURFOUUwOEIxNEYwCi06MTAyMjQwMDA4REQ0RDRCMDdGQjcxOEI4OEEyOTNDMTA4NTM2MDhDNjFCCi06MTAyMjUwMDAxMTBFNjYwMjk2ODEwNTg1MTRBNUQ1MEY1NTAyOTU4MDRECi06MTAyMjYwMDAwNDE4MTQ2RDg5Mjc4ODk2MDhDQjExMDg4ODE0MEVCQkIyCi06MTAyMjcwMDAwMkE4RDgyOTlDMjAwRjg4MDI5QkExOThBMDg4OTI5QjM1Ci06MTAyMjgwMDBBMzA4ODgxNEE4RDgwRjg4MDI5OEEyMkFBQzEwMTlFOUNDCi06MTAyMjkwMDBERUMwQzA4RjE0MUVFOUNGODYxMjhEMTEyODYyODVBRTc0Ci06MTAyMkEwMDBERDA4RkYwQjJDRDRDRjI4MjEwMjJGNjY4NThCMzUyQTIxCi06MTAyMkIwMDAyMDcyMDk4ODAyQUJBQTI4MjUwMjJBMjQ3MkMwMjBEMUU0Ci06MTAyMkMwMDAwRjI5NTI5RTE4RTlCQjZGOTgwMjYwMDIwODI4ODIyNkU3Ci06MTAyMkQwMDA2ODgwMDgyOTIyMDAwODk5MEM2NTkxRjkyQTUyOURDMTRECi06MTAyMkUwMDBDQTlBMTM2NEExRUYyQjIwMEMyNjIwMDYwQ0I4MTFBNTY2Ci06MTAyMkYwMDA4ODJEODI4NjBFQkUwQTdEQzMwMjYwMDIwMjJFRTJBM0YyCi06MTAyMzAwMDA2OEUwMDgyRjIyMDAwRUZGMEM2NUYxRjMyODgyODVERUJECi06MTAyMzEwMDA4MDY0ODFGRjk4MTAyNjZDRjk2NDYxRkYyQzIwNjY4ODI4Ci06MTAyMzIwMDAzMUIxQ0MwQzBDNDcyQzI0NjY2RUM2MDI2MDAxQkMwODhGCi06MTAyMzMwMDBGRDUwNjVEMUI2MTdFOUJEMTlFOUEyMUFFOUE5MkMyMTBBCi06MTAyMzQwMDAwNDhCMkQyODMwMTAyRjIxMUQwQzg4MTAwQkZCMDkwQzNECi06MTAyMzUwMDA4ODAyMEE4ODAyMDlCQjAyNjQ0MTUyODkxMEMwNEQ5QjYxCi06MTAyMzYwMDA5MDk3OTE5ODkyOEQzNUQ5RTA2NEQwNkNENzMwREJEMEJFCi06MTAyMzcwMDBEODMwN0ZENzEzMjczQzEwQkNFOTI2MzIxNjhDMzk5NjBCCi06MTAyMzgwMDBFNjlDRTc4QTM3QjQzODlBRTgwQjEzMTQ2NDMwNDkyQTdDCi06MTAyMzkwMDA4MjE2ODY3OTlBOTY5Njk3OEM3NzhBN0Q5Qzk4MkI4MjVFCi06MTAyM0EwMDAxNzJDN0MyMDlBOUEyQTlDMTg5Qjk5ODY3QkIwM0JCODY0Ci06MTAyM0IwMDA4OTZEQjkyMThCQzk5NkE1MjY5MjE2MkFBQzE4Qjg5OUIxCi06MTAyM0MwMDA5QkExOTZBMDhCQzc4NkNEOUJBMjJCOTIxNTk2QTQ5QjEyCi06MTAyM0QwMDBBMzg2Q0IyQ0NDMjAyNkE2MDVDMDM0NkJENDIwMEQzQjg1Ci06MTAyM0UwMDAwQzBERDgwOTBFODgwQTdGQjcwNUMwOTA5OTg4QkM4ODYzCi06MTAyM0YwMDBDMDkwMEIxQTEyNkRBQTA2OTk4ODk5OEIyODhDMThDMDY4Ci06MTAyNDAwMDBEMDFCRTk4QzFDRTk4QjE2RTk4MUIxRkYyQTIxMUMyMzIyCi06MTAyNDEwMDBFNjEzMEYwRjRGMjZFNjEyMkYyNTFEN0ZBOTA2QzBGMEU5Ci06MTAyNDIwMDBDMDgwMjgyNTFEMDVGNjExMUFFOTdBOEYyMDJCRTYxNUE0Ci06MTAyNDMwMDAyQ0U2MTYyREU2MTcyNkU2MTgwQUZBMDIyQUU2MTQyOUQzCi06MTAyNDQwMDAyMDA2Mjk5Q0Y5NjQ5MEZGMjkyMDBDOEQxNUMwODAxQTY0Ci06MTAyNDUwMDBFOTYxMEM5QzExQUE5OUE1Q0NEQTIwMkJDMjg1Mjg5NDlECi06MTAyNDYwMDBDRjBCNEIwQjJCQzY4NUMwQjA4QzE2NTgxMThBRDJBMDRGCi06MTAyNDcwMDBEMTBGOEEzNTZGQTU0OEQ4MzA4QkQ1NkRBOTBDOEE4NkM3Ci06MTAyNDgwMDAwQThBMTRDQkE5N0FCMzM3Mjg4QzEwQzA4MDI4MjQ2NzE1Ci06MTAyNDkwMDAwODBCNDc2NUIxMTJEQTIwREIzMDJDMTIwNjU4MTFBRDVCCi06MTAyNEEwMDBEM0EwQzBDMUMwRDAyREE0MDM5QzE1NjNGRDI2ODYzNkUxCi06MTAyNEIwMDA2NDYxMEM4OTEwQzA0RDlCOTA5NzkxOTg5MjYzRkVBNDIzCi06MTAyNEMwMDBDMDgxNjNGRkM3OEExNUNDQTdEQTIwREIzMDhDMTY1ODkxCi06MTAyNEQwMDAxMUExQzAyMEQxMEZEQTIwQzBCNjU4MTIzMDYzRkZFNDNBCi06MTAyNEUwMDAwMERBMjA4QjExNTgxMjJENjNGRkQ5MDA5RTE3OEExMzMyCi06MTAyNEYwMDAyQjIxMDQ1ODEwQzI4RTE3QzBCMDJCMjQ2NjYzRkUzNDAzCi06MTAyNTAwMDBDMDgwNjNGRTA5REEyMERCMzA4QzE2REQ1MDU4MTJCNTJFCi06MTAyNTEwMDBEMkEwRDEwRkRBMjA1ODEyMjE2M0ZGQTgyRDIxMzhDMDk0Ci06MTAyNTIwMDBDODdEQzMwMjYzRkUwRDhBMTMyQjIxMDQyQzIwNjY5OEZDCi06MTAyNTMwMDAxN0IxQ0MwQzBDNDcyQzI0NjY1ODEwQjA4RTE3QzBEMEE1Ci06MTAyNTQwMDAyRDI0NjY2M0ZERUUwMDAwMjYyMTM4QjA2NjA2MDY0Rjk2Ci06MTAyNTUwMDAyNjI1Mzg2NTZFRjEyODIwNkE3Rjg3MDUwODI5NDE2NEExCi06MTAyNTYwMDA5MEE1QzBEMDFCRTkyNjE5RTkzNDI2MjAwNzIzRTYxQkQ1Ci06MTAyNTcwMDBCMTY2MDlGQTAyMkJFNjFBMjgyMDBBMkRFNjFEMkFFNjgyCi06MTAyNTgwMDAxRTA5ODgwMjI4RTYxQzg4MjYwNjA2NDcyOEU2MjAyQjE2Ci06MTAyNTkwMDAyMjA4MjZFNTNFMkJFNjIxMkQyNDA3MkMyMDA2MkEyMEEyCi06MTAyNUEwMDA2NDY4QzM0N0I0NDQ2M0ZFOUVEQjMwREEyMDhEMTVDMEY3Ci06MTAyNUIwMDBDRTJFMEE4MDJDMjQ2ODhDMTY1ODEwRjFEMkEwRDEwRjkwCi06MTAyNUMwMDA4RTEwMkEzMjE2MTZFOEZEMEEyQTE0ODY2NjJCRTYxMkE5Ci06MTAyNUQwMDA5N0UxMjdFNjEzMjhFNjE0QUE2NjA5NjYwMjk2RTAyRTFDCi06MTAyNUUwMDBFQzQ4NjlFRDUwQzE0NjYzRkQ3QTAwMDA2NEFGQjQxOTUwCi06MTAyNUYwMDBFOEYzMjgyMDE2ODk5MjBBODgwQzAwOTEwNDAwODgxQUIyCi06MTAyNjAwMDBBOEI4OTgyOTYzRkY5QzAwMkIyMTA0NkVCODFFMkMyMENCCi06MTAyNjEwMDA2NkI4Q0MwQzBDNDcyQzI0NjZDOUMwOUUxNzhBMTM1ODg4Ci06MTAyNjIwMDAxMDc3OEUxN0MwMzQ4RjIwQzBEMDJEMjQ2NkMwNjgyNjQ2Ci06MTAyNjMwMDAyNDA2NjNGRjJDMDA4RDM1QzA4MDY0RDA0QUQ5RTBEQ0NECi06MTAyNjQwMDAzMERCRTBERjMwMUFFOEZEQjE4OEI0RkYxN0U4RkQ4NjIzCi06MTAyNjUwMDBDOTI0OURGRjhEQzgyQ0NDMTAyRDQ2MzAwNzY3MDEyRDU1Ci06MTAyNjYwMDA0NjMyMEE2NjAxMURFOEY3MjY0NjMxQUQ2RDJENDYzMzI4Ci06MTAyNjcwMDAyNkYyMTU5N0I3OTZCNjg0QzNCQ0JCOTRCNThEMzUyOUExCi06MTAyNjgwMDA5QzEwN0Q4M0MyMkYyMTFEQzE0NjYzRkQ0QjAwMDAwMEJECi06MTAyNjkwMDA2QzEwMDYyOTIwMDYyODlDRjg2NTgyQkYyOTIxMDIyQjkwCi06MTAyNkEwMDAyMDBDMDkwOTRDNjU5MEUxMTZFOEMzMENCQTExQTZBQUUyCi06MTAyNkIwMDAyREEyODYyQzBBMTI3REMzMDI2MDAyOEMxOUU4QkYwOTg0Ci06MTAyNkMwMDBCOTBBMjk5MkEzNjg5MDA3OEMyMDA5Q0MwQzY1QzI3OEJFCi06MTAyNkQwMDAyOUEyODU2NDkyNzIyRDYyOUUxQUU4QjU2RkQ4MDI2MEI1Ci06MTAyNkUwMDAwMjZFMkFBMjI2MjkxNjAxNjhBMDA4MkIyMjAwMEFCQjI2Ci06MTAyNkYwMDAwQzY1QjI1QzI5NjI5REMxOEM2NDkyNTQyQTIxMjAwQTI3Ci06MTAyNzAwMDA4MDYwOTkxMDJDMjAzQ0M3RUYwMDBGM0UwMTBCM0VCMUJBCi06MTAyNzEwMDBCRDBGREIzOTBCQkIwOThGMjYwREJEMTEyRERDMUMwRDQ4Ci06MTAyNzIwMDAwRDQxMEVERDAzOEUyN0IxREQwRDBENDEwRkVFMEMwREI5Ci06MTAyNzMwMDBCQjBCMkJCQzFDMEJCNzAyN0VDNzFDMkMyMTI1N0JDQkYzCi06MTAyNzQwMDAxNjJEMUFGQzBDQkEwQzBEQTE2MDAwMDkzRTAxMDczRUMzCi06MTAyNzUwMDBCMTc4MDk4NzM5MEI3NzBBNzdFQjAyNjAwMjBBMkMyMURFCi06MTAyNzYwMDAyMzI4MjEyMUIxQ0MwQzBDNEYyQzI1MjM3QzhCMjlCMEE0Ci06MTAyNzcwMDBDRDJEMjUyM0M4NTVEQTIwREIzMDU4MTA2RjI5MjEwMkQyCi06MTAyNzgwMDBDQzk2QzBFODBFOUUwMjJFMjUwMkNDNTdEQTIwREIzMDE0Ci06MTAyNzkwMDBEQzQwNTgxMEYwQzAyMEQxMEYyQzIwNjY4OTMxQjFDQzFDCi06MTAyN0EwMDAwQzBDNDcyQzI0NjY2RUM2MDI2MDAxRDMwOUZENTA2NUVGCi06MTAyN0IwMDBEMUNEMkYwQTAxMkUzMDExMjkyMjE0NjRFMDExMjgyMkQ0Ci06MTAyN0MwMDAxQjA5MEM0NDAwQzEwNDAwRkExQTBBODgwMjI4MjYxQkJGCi06MTAyN0QwMDAyRTMwMTBDMEEwQzBCMDk0MTI5NTEzMUNFODc4ODgzMDM5Ci06MTAyN0UwMDAyQ0MwMjIwODhEMTQ3Nzg3MDRDMEYxMENGQTM4QzA0MTQwCi06MTAyN0YwMDBDMEYyMjUyMDNDQzA4NDA4NTgwMTBGNUYwMTBGNEIzODAwCi06MTAyODAwMDAwNTM1NDAwN0JCMTBDMEYwMDg0RjM4MDhGRjEwMEZCQjVDCi06MTAyODEwMDAwMjI4RUNGRUMwRjAwODRGMzg4NDJCMEJBODEwMEFGRkVBCi06MTAyODIwMDAxMDJBMjEyMDBGODgwMjBCODgwMjA4NDQwMjE4RTg4NjJCCi06MTAyODMwMDA4RjExMDg0NDAyMjgyMTI1MEEyQTE0MDgyODE0MDQ4ODI0Ci06MTAyODQwMDAxMTBBODgwMjJBMjEwNDk0RjA4QjIwMDRFNDEwMDhCQkFBCi06MTAyODUwMDAxMTA0QkIwMkMwNEEwNEJCMDI5QkYxODQyQTA4QUIxMURECi06MTAyODYwMDAwQkVCMDI5NEY0MEE1NDExMEI0NDAyMDU1NTEwMEQxQjk2Ci06MTAyODcwMDA0MDk0RjcwN0JCMTAwQjU1MDIwODU1MDJDMDgxOTVGNjJFCi06MTAyODgwMDA4NDMzQzA1MDk0RjNCMTk0OEIzMjk1Rjg5OEY5OUJGMjRECi06MTAyODkwMDBDMDgwQzFCQzI0MjYxNDk5RkE5QkY1OThGQjg1Mzg5NTE1Ci06MTAyOEEwMDBGQzg0M0E5NEZEOEIzQjlCRkU4ODM5OThGRjg1MzUyNTQ3Ci06MTAyOEIwMDBGNjEwODQzNjg1MTMyNEY2MTE4QjM3ODQxMjJCRjYxMjBBCi06MTAyOEMwMDBDMEIwNjRDMDdFODkzMDc3OTc0MzhEMzI4ODMzMkUzMDE0Ci06MTAyOEQwMDAxMDhGMTExQ0U4NEEwOTk5NDAwNjk5MTEyQ0Y2MTRDMDcyCi06MTAyOEUwMDBDNDJDRjYxNThDMkIyREY2MUEyOEY2MUIyQkY2MTkwNDgyCi06MTAyOEYwMDBBODExMDk4ODAyMDhFRTAyMTlFODQwQzE4MDA4RUUwMjFBCi06MTAyOTAwMDAwOUM5MDIyOUY2MTYyRUY2MThDMDlFNjAwMDAxQzA5QTY5Ci06MTAyOTEwMDAyRjIwMEMxOEU4MzAwQ0ZFMTFBOEZGQTZFRTJERTI4NTQyCi06MTAyOTIwMDAyQkY0Q0YwRDlEMEIyREU2ODVDODdGOEEyNjg5MjlBNzFDCi06MTAyOTMwMDBBQTlBMjYwQTk5MEMwOTA5NDgyOTI1MjU2NTUwNTBDMEVDCi06MTAyOTQwMDAyMEQxMEYwMEMwOUE2M0ZGQzZEQTIwNTgxMTE0NjNGRTJECi06MTAyOTUwMDAzOERBMjBDMEI2NTgxMTExNjNGRTJFMDA2ODk3M0MyQjYwCi06MTAyOTYwMDA5Q0ZENjRCRTI0QzAyMEQxMEZEQTIwREI3MDU4MTBDRDRFCi06MTAyOTcwMDBDMEMwQzBEMTBBREEzOTBBREMzODY1Q0RFMDYzRkUwOThGCi06MTAyOTgwMDA4QTEwMkIyMTA0NTgwRjlEQzBCMDJCMjQ2NjYzRkUyMUIyCi06MTAyOTkwMDBEQjQwMkEyQzc0NTgwOTdFRDJBMEQxMEZEQTIwNTgwRkMwCi06MTAyOUEwMDBBMjYzRkNGNzZDMTAwNEMwMjBEMTBGMDA2QzEwMDQyOTQ2Ci06MTAyOUIwMDAwQTgwMUVFODI2MUZFODI2MUNFN0ZGMEMyQjExQUNCQjgzCi06MTAyOUMwMDAyQzJDRkMyREIyODUwRkNDMDI5RUQxOUNEMEMwNTFDMEM2Ci06MTAyOUQwMDA3MDEzRTgyMjE0RTgyMTE4RTgxRjJBQjI4NUE4MjgwNEY5Ci06MTAyOUUwMDAyNDBBMjM0NjkxQTk4NkI4QUEyQUI2ODVBOTg4Mjc4NEVECi06MTAyOUYwMDA5RjI1NjQ5RkQxMEYwMDAwNkMxMDBBRDYzMDI4MzAxMDNDCi06MTAyQTAwMDAyOTIwMDYyODhDRjk2NDgyOUI2ODk4MEIyQTlDRjk2NTFBCi06MTAyQTEwMDBBMUIyMDIyQTAyNTgwRjg0ODkzNzFCRTdFOEM4OTE2NEUzCi06MTAyQTIwMDA1MjBFMkEyMTAyMEEwQzRDNjVDMjU4OEQzMDE5RTdFMTdBCi06MTAyQTMwMDA3NEQ3MDUyRTIxMjM2NUUyOUUyRjkyOUUxQUU3REQ2RjQzCi06MTAyQTQwMDBGODAyNjAwMjUzMkFBMjI2NjhBMDA4MkMyMjAwMEFDQ0IxCi06MTAyQTUwMDAwQzY1QzI0NDJBOTI5RDY0QTIzRTlBMTUxRkU3RDc4RDQ5Ci06MTAyQTYwMDA2N0MxRTZDOEREMkI2MjA2MThFN0Q1NjRCMDA1Mjg4MDhCCi06MTAyQTcwMDAyMTdCOEI0MzJCMjAwQzE4RTdDRjBDQkMxMUE4Q0MyOTUxCi06MTAyQTgwMDBDMjg2NzlFQjQ2MEZCRTBBMkVFMkEzNjhFMDA1MkYyMjJDCi06MTAyQTkwMDAwMDdFRjkzNzJDQzI4NTlDMTg2NEMyMzMyQjIxMkY4NzA2Ci06MTAyQUEwMDA2NjBCN0IzNjBCNzkwQzZGOUQyNjZFRDI0NjJDMjAzRDMzCi06MTAyQUIwMDA3QkM3NDBDRTU1NjAwMDFFMkEyMDBDQzFCMjhDMjA1ODI2Ci06MTAyQUMwMDAxMEY3OUExODY0QTI0NThENjc2M0ZGQ0ZDMEMwNjNGRkZCCi06MTAyQUQwMDBDNUQ3QjA2M0ZGRDMwMEMwRTA2MDAwMDIyRTYwMDMwRUQ0Ci06MTAyQUUwMDBEQjBDNkVCMjBFREM3MDBDRUExMUFBNkEyQUFDMjA1ODFDCi06MTAyQUYwMDAwMTk5RDdBMERBMjBEQjcwQzFDODJEMjEyMDU4MTA5MTkwCi06MTAyQjAwMDA4QzI2OEIyNzlBMTYwQ0JCMEM3QUIzMzQ4RjE4ODk2M0VBCi06MTAyQjEwMDA5OUYzODg2Mjk4RjI4RTY1OUVGODJENjAxMDhBMTg5RDUwCi06MTAyQjIwMDAxNzY4RDcyOUMwRDA5REE5MkMyMjE4MkIyMjEzOUNBQjQzCi06MTAyQjMwMDA5QkFBOTdBNThFNjY3RTczMDI2MDAwOTdDRjU4NjAwMEFGCi06MTAyQjQwMDAxRkRBMjA4QjE2NTgxMDU3NjVBMTM4NjNGRkJEQzA4MTZFCi06MTAyQjUwMDBDMDkwOEYxOEMwQTI5QUY5OTlGQjk4RkE5N0Y1NjNGRjc1Ci06MTAyQjYwMDBEMkRCMzBEQTIwREM0MDU4MEZGQkMwNTFENkEwQzBDMDA5Ci06MTAyQjcwMDAyQkEwMTAyQ0E0MDM5QjE3MkMxMjA4MDIyQTAyMDY2QjEwCi06MTAyQjgwMDAwMkRGNzAyRDYwMDM4RTE3OUQxNDlFMTAwQ0REMTFDMEE2Ci06MTAyQjkwMDBFMEFENkQyRERDMjA1ODAxMTg4QzE0OEIxNkFDQUMyQ0RDCi06MTAyQkEwMDA2NDAzOEEyNjg5MjlBQkFBMEE5OTBDOUEyNjg4NjYwOUExCi06MTAyQkIwMDAwOTQ4MjkyNTI1MDc4ODBDOTg2NjJGMjIxOEE3RkYyRjdBCi06MTAyQkMwMDAyNjE4NjNGRTk2REEyMERCMzBEQzQwREQ1MDU4MTEwNTE0Ci06MTAyQkQwMDBEMkEwRDEwRkMwMzAyQzIwNjY4OTYxQjFDQzBDMEM0NzNCCi06MTAyQkUwMDAyQzI0NjY2RUM2MDI2MDAwRDJDMDMwMDlGRDUwNjVEMDRDCi06MTAyQkYwMDBDQThFNjc2NEUwNjk2NDcwNjZEQjYwOEMxOERGNzBEQTI3Ci06MTAyQzAwMDAyMDJENjAwMzhFMTcwQ0REMTE5RTEwQUQ2RDJEREMyMDg0Ci06MTAyQzEwMDAxRUU3OEQ1ODAwRjkyMzI2MThEQTIwOEIxNkRDNDAyRjhBCi06MTAyQzIwMDAyMjEzREQ1MEIxRkYyRjI2MTM1ODBGOUFEMkEwRDEwRkQ3Ci06MTAyQzMwMDAwMDI4MjAzRDA4NDg0MDY1OERFNzZGOTUzRURBMzA4RENECi06MTAyQzQwMDBCNTZEOTkwQzhDQTgwQzhDMTRDQUNGN0NEMzJEMkFBQ0YyCi06MTAyQzUwMDAxMEMwOTAyOTI0NjcwOTBENDc2NEREQzU2MDAwOTIwMDBCCi06MTAyQzYwMDAyQzEyMDgwNjZCMDIyRDZDMjAwNzdGMDI4RTE3REEyMENCCi06MTAyQzcwMDA5RTEwMUVFNzc0NTgwMDdENjNGRjlBMDBDMDkxNjNGRkE5Ci06MTAyQzgwMDBEMTAwMDAwMDY1NTA4MURBMjBEQjYwREM0MDU4MEZCMUQ0Ci06MTAyQzkwMDBDMDIwQzBGMDJGQTQwM0QxMEZEQTIwQzBCNjU4MTAzRkQ3Ci06MTAyQ0EwMDA2M0ZGRTAwMDAwNkY5NTAyNjNGRDZDREEyMERCMzBEQzJGCi06MTAyQ0IwMDA0MERENTBDNEUwNTgwRjMyRDJBMEQxMEY4QTE1MkIyMTJECi06MTAyQ0MwMDAwNDU4MEVDRTIzMjQ2NjI4NjAxMDk4MTc2M0ZGMjEwMDU1Ci06MTAyQ0QwMDBEQTIwNTgxMDMyNjNGRkFCQzg1OERCMzBEQTIwNTgwRkM3Ci06MTAyQ0UwMDAxNjJBMjEwMjY1QUY5Q0MwOTQwOUE5MDIyOTI1MDI2MzE2Ci06MTAyQ0YwMDBGRjkxREIzMERDNDBERDUwQzBBMzJFMEE4MDJBMjQ2ODFGCi06MTAyRDAwMDBEQTIwNTgwRjFGRDJBMEQxMEZDMDIwRDEwRkRBMjAyQjBDCi06MTAyRDEwMDAyMDBDNTgxMDQ3NjNGRjZCNkMxMDA0MjgyMDA2QzA2MjFCCi06MTAyRDIwMDAyODhDRjg2NTgxMjVDMDUwQzdERjJCMjIxQkMwRTEyQTAzCi06MTAyRDMwMDAyMDZCMjkyMTIzMDBBMTA0QjA5OTI5MjUyM0IxQUEwMEUxCi06MTAyRDQwMDBFQzFBMEJDNDAxMEEwQTQ0MkEyNDZCMDRFNDM5MERDQ0EyCi06MTAyRDUwMDAwMzBDQkIwMTJCMjYxQjY0NDA2OTI5MjAwQzFCRTcxNUMzCi06MTAyRDYwMDAwQzlBMTEwQkFBMDgyRkEyODYxQkU3MTM2RkY5MDI2MEI5Ci06MTAyRDcwMDAwMEI2MEI5QjBBMkJCMkEzNjhCMDA4MkMyMjAwMEJDQzI4Ci06MTAyRDgwMDAwQzY1QzBBNDJCQTI4NTFERTczNjY0QjA5QjhDMkIyNDU4Ci06MTAyRDkwMDAyMTA0MERDQzAyOUNCMDg4MjBDMEM1MDg4ODExMEM4ODg1Ci06MTAyREEwMDAwMjk4QjE4ODJBMDg0NDExOThCNDhGMzQ5NEI3OUZCNTFCCi06MTAyREIwMDBDMDQwMUVFNzA4MkRBMjg1MEU5RTA4MjVFNENGMkREQzFECi06MTAyREMwMDAyODJEQTY4NTI5MjEwMjA5MDk0QzY4OTQxQTY4OTgyMEEzCi06MTAyREQwMDBDOTQwMkEyMTAyNjVBMDBCMkEyMjFFMkIyMjFEN0FCMThFCi06MTAyREUwMDAwMjY1QTA3OUMwMjBEMTBGMkMyMTIzNjVDRkRFNjAwMEMxCi06MTAyREYwMDAwODJFMjEyMTJEMjEyMzdFREJENTJCMjIxRTJGMjIxREUzCi06MTAyRTAwMDAyNTI1MDI3QkY5MDFDMEIwNjRCRkM0MTNFNkU5MkNCMEVDCi06MTAyRTEwMDAwNzI4QjAwMERBMjAwMzg4MEEyODgyNENDMEQxMEI4MDMyCi06MTAyRTIwMDAwMERCQTA2NUFGRTc2M0ZGQTYyQTJDNzRDMEIwMkMwQUI0Ci06MTAyRTMwMDAwMjU4MEUwODFDRTcwQzlDQTA4QjIwMDhCQjExMDZCQjk3Ci06MTAyRTQwMDAwMjlCQTE4OTM0OTlBMjYzRkY3OTAwMDAyNjI0NjhEQUU1Ci06MTAyRTUwMDAyMERCMzBEQzQwREQ1MDU4MTA2M0QyQTBEMTBGREEyMEU3Ci06MTAyRTYwMDAyQjIwMEM1ODBGQ0VDMDIwRDEwRjAwMDA2QzEwMDYwNzhECi06MTAyRTcwMDAzRDE0QzA4MERDMzBEQjQwREEyMEMwNDdDMDIxMjNCQ0Q5Ci06MTAyRTgwMDAzMDAzMjgzODA4MDg0Mjc3NDAwMUIxREQ2NDgxNUExRUJBCi06MTAyRTkwMDBFNkM1MTlFNkM2MjlFNjdFRDMwRjZEREEwNTAwNTA4ODJGCi06MTAyRUEwMDAwMDMwOENDMEUwQzAyMDI1QTAzQzE0RTZDNEI2RDM4RjBGCi06MTAyRUIwMDBDMEMwRDAwRjg3MTQyNDQwMjIwRjg5NDA5NDEwNzdGN0E4Ci06MTAyRUMwMDAwNEMwODEwNDgyMzhDMEYxMEIyODEwQzA0NEMwMjIwNDIxCi06MTAyRUQwMDA1NDAxMDRGRDM4MDI1MjAxMDJGRTM4MDhERDEwODIxQzQ0Ci06MTAyRUUwMDAwN0VFMTAwRTZFMDIwRUREMDIyNDJDRkVDMEUwMDRGRTgyCi06MTAyRUYwMDAzODBBRUUxMDBFODgwMjBEODgwMjhEQUIxRUU2QjQwODZCCi06MTAyRjAwMDBEODAyMEU4ODAyOThCMEMwRTgwNDI4MTAwRTVFMDE4NDMyCi06MTAyRjEwMDBBMDI1QTEyNTA4NDQxMTA4NDQwMjA1MjUxNDA0NTUxMUQzCi06MTAyRjIwMDAwNDM0MDJDMDgxMEU4RTM5OTRCMThGQUE4NDEwOUZCNEVDCi06MTAyRjMwMDA3NTY2MEMyNkExMUZDMEYyMDYyNjE0NjAwMDA5MDAwMDY5Ci06MTAyRjQwMDAyNkExMjBDMEYyMDYyNjE0MDU2NTAyMEY3NzAxMDc4NzI3Ci06MTAyRjUwMDAzOTA1RTYxMDA3NzgxMDA4NjYwMjA2NTUwMjk1QjYyNTcxCi06MTAyRjYwMDBBMTA0MEFFNjExMDg1ODExMDgyODAyMDg2NjAyOTZCNzVCCi06MTAyRjcwMDBDMDYwNjQ0MDU2NjQ5MDUzMDY3RTExQzBGNDg5QzI4OEQ0Ci06MTAyRjgwMDBDMzBCMzQwQjk2NDU5ODQ3OTk0NjE4RTY5QjlGNDEwNDFFCi06MTAyRjkwMDA1OTExMEU5OTAyMUZFNjk5MDIwRTQ3MDhEODAyOTg0MjZECi06MTAyRkEwMDAwRTk5MDI5RjQwQzFFMDBFOTkwMjk5NDQyRkEwMENCNEUzCi06MTAyRkIwMDAzODBDRjkxMTE0RTY4ODFFRTY3RkE0RkZBRTk5MkU5MjE0Ci06MTAyRkMwMDA4NTI2RjRDRjBFODgwQjI4OTY4NUQxMEYyQkEwMEMxRkQ5Ci06MTAyRkQwMDBFNjc5MUNFNjgwMENCRTExQUNCQkFGRUUyREUyODUyNjc3Ci06MTAyRkUwMDBCNENGMEQzRDBCMkRFNjg1RDEwRkMwODAwNTI4Mzg3ODc0Ci06MTAyRkYwMDA0ODAyNjNGRUEyNjNGRTk2NkMxMDA2QzBDMDY1NzBGMUM1Ci06MTAzMDAwMDA4ODMwQzAzMDA4ODcxNDc3ODcxMkMwQjBDMEE2MTlFNjkwCi06MTAzMDEwMDA2QjI5OTAyMkMwMzBDQzk3QzAzMTYwMDAwM0MwQjBDMDkzCi06MTAzMDIwMDBBNkMwRTBDMDkxQzBENEMwODIyNTIwM0MwQjNGMTA5N0MxCi06MTAzMDMwMDAxMjgzMUNDMDcwMDg1ODAxMEQ1RDAxMDg5NzM4QzA4MENDCi06MTAzMDQwMDAwQjk4MzgwNzc3MTAwNDg4MTAwODY4MDIwODc3MDJDMEM4Ci06MTAzMDUwMDA4MDBEOTgzODJEM0NGRTA4ODgxMDBEOUUzODhEMkIwQTY3Ci06MTAzMDYwMDBFRTEwMDhFRTAyMDdFRTAyMENCODEwMEZERDAyMDUzQjcxCi06MTAzMDcwMDA0MDBFREQwMjlENDA4OTIwMDQzRDEwMDg5OTExMEQ5OUY0Ci06MTAzMDgwMDAwMjJEMjEwNDA5QTkwMjA4REQxMTk5NDE4NzJBMDVCOUY5Ci06MTAzMDkwMDAxMDBEM0QwMjBBQkIxMTBEQkIwMjA4NzcwMjk3NDQyOEIwCi06MTAzMEEwMDAyMTI1ODcxMjA4MjgxNDA0ODgxMTA3MUU0MDA3RUUxMEY2Ci06MTAzMEIwMDAwRTk5MDI3NTY2MDkyNjIxMUYwNjI2MTQ2MDAwMDYwMDc3Ci06MTAzMEMwMDAyNjIxMjAwNjI2MTQwODY4MDI5QjQ3MDk4ODAyOTg0Njk0Ci06MTAzMEQwMDAyOTIwMENEMkMwQzA4MDBDOUUxMTFCRTYzRTFGRTYzNTk1Ci06MTAzMEUwMDBBQjk5QUZFRTJERTI4NTI4OTRDRjBEQUQwQjJERTY4NTgzCi06MTAzMEYwMDBEMTBGREQ0MEMwQTZDMEIwOEU1MUNBRTBCMkFBQjFCQkFDCi06MTAzMTAwMDAyRERDMTA4RjUwMEU3ODM2OTgxMDA4NzcwQzlGRDg5OEM5Ci06MTAzMTEwMDBEOTg5NTM4RjUyOTkxMTk5REI5RkRBN0U4MzA5QjFDQ0ZCCi06MTAzMTIwMDAyNTVDMTBDOTc3NjNGRkNGODgxMDhEMTEwOEU3MEM5N0Q1Ci06MTAzMTMwMDA1MUFEOEREN0YwNzhEQjAxQjFGNzlENTM5NzUyODgzMEIwCi06MTAzMTQwMDBDMDMwMDg4NzE0MDg4ODQwNjQ4RUQ1NjVCRUM5NjNGRTA4Ci06MTAzMTUwMDBCQzAwMDAwMDZDMTAwNEQ3MjBCMDNBODgyMEMwMzA4MjM4Ci06MTAzMTYwMDAyMUNBQTA3NDJCMUUyOTcyMDQ2RDA4MEZDOTgwQzk5MTUxCi06MTAzMTcwMDA4NTc1QjEzM0EyNTI3QTNCMEI3NDJCMDg2M0ZGRTkwMENCCi06MTAzMTgwMDA2NDlGRUNEMTBGRDI0MEQxMEYwMDAwMDA2QzEwMEFENjIyCi06MTAzMTkwMDAzMDJFMzAyN0Q5NTBEQTQwMTVFNjA5MjQzMDI2OUExNTBBCi06MTAzMUEwMDAyOTE2MDQ2NEUwMDI2NDkzNzMyOTIwMDYyQTlDRjg2NUJBCi06MTAzMUIwMDBBM0NFMkEyMTAyMjcwQTA0MEEwQjRDNjVCMzk3OEMzMDUwCi06MTAzMUMwMDA3NEM3MDUyRDIxMjM2NUQ0QTBDMEE2MkIwQTAzMkMyMjg5Ci06MTAzMUQwMDAwMDU4MEYwQjY0QTNCOTE3RTVGNzhFMzg5QTE2NjRFMzBECi06MTAzMUUwMDBCQTJGNjAyNzI4NTAyMUM5RjM3RTgzMTFDMkIwOEMyMEVBCi06MTAzMUYwMDAyQTIwMEM1ODBGMkFEN0EwQ0RBMTYwMDRBMjAwQzJCMDhCCi06MTAzMjAwMDA4QzIwMkEyMDBDNTgwRUZFRDdBMDY0QTQ4NjJGMjEyRUQ1Ci06MTAzMjEwMDA4QjY4MEZCRjM2MEZCOTBDNkY5RDU0Mjk2MDI3RDVCMDRFCi06MTAzMjIwMDA2RTkyMDUyODIwM0Q3QjhGNENEQTIwREI1MEMxQzQyREU3Ci06MTAzMjMwMDAyMTFGNTgwRUM0OEIyNjlBMTg5QTE5ODkyNzJBQUMzODUwCi06MTAzMjQwMDAwQjk5MEM3QTkzNTM4OTYzQzA4MDk5NzM4RjYyOTg3ODM1Ci06MTAzMjUwMDA5RjcyOEU2NTlFNzk4RDY3OUQ3QjhDNjY5NTc1OUM3QTM1Ci06MTAzMjYwMDA4RTY4N0U1MzAyNjAwMEIxOEIxNDY1QjA1MDYwMDAzOEU4Ci06MTAzMjcwMDBEQkYwNjNGRkE1MDA4QTE0QzlBOTJFNjAwMzBFOUIwQzI2Ci06MTAzMjgwMDA2RUIyQTVEQzUwMENFQTExQUE2QTJBQUMyODVCRkZCMTI5Ci06MTAzMjkwMDBENUEwNjNGRjkzQzBFMDYzRkZFMkRBMjA4QjE4NTgwRURECi06MTAzMkEwMDA4MTY1QTJCMTYzRkY5RTAwMDBEQTIwREIzMDhDMTU1OEU3Ci06MTAzMkIwMDAwRTI5RDZBMEMwQzBDMEQxMkQxNjA0MkNBNDAzREM3MEVBCi06MTAzMkMwMDBEQTIwREI2MERGNTAyRDYwMDNDMEUwOUUxMDlEMTcxRUVBCi06MTAzMkQwMDBFNUQyMENERDExMEQ2RDA4MkREQzI4NUJGRjQ3OEU2NkY1Ci06MTAzMkUwMDA4RjY3ODgxN0FGNUZBOEE4Mjg2NDAzNzVGQjAxQjFFRTRDCi06MTAzMkYwMDA4QTE4OUU2NjlGNjc4OTI2ODgyOUFBOTkwOTg4MEM5OTQ5Ci06MTAzMzAwMDAyNjhFNjgwODA4NDgwNUVFMEMyODI1MjUxNUU1QUM5RTk0Ci06MTAzMzEwMDA2ODY1RUVDQzYzRkVFNjAwMDAwMEM5NDMyRjIxMjMyQjM1Ci06MTAzMzIwMDAyMTIxMkZGQzAxMEYwRjRGMkYyNTIzN0ZCQjAyNjAwM0FDCi06MTAzMzMwMDAxNDJDMjA2Njg5NjFCMUNDMEMwQzQ3MkMyNDY2NkVDNjE3Ci06MTAzMzQwMDAwMjYwMDIyODA5RkQ1MDY1RDIyMjY0RTFCNjJFNjAyNzkyCi06MTAzMzUwMDA2NEUxQjBEQzcwREY1MERBMjBEQjYwMUVFNUMzMkQ2MDc1Ci06MTAzMzYwMDAwM0MwODA5ODEwMENERDExQUQ2RDJEREMyODVCRkYyMkIxCi06MTAzMzcwMDA2NDQxODFDMDQ0MkIwQTAwOEMyMDJBMjAwQzU4MEVBMEU2Ci06MTAzMzgwMDAwQUE3MDI2NUEwMEZDMEIwMkMyMjAwMkEyMDBDNTgwRUZDCi06MTAzMzkwMDA5Q0Q3QTA2NEFGRUZEQTIwQzFCQ0MxQzgyRDIxMjA4RjFCCi06MTAzM0EwMDAxODhFMjY4OTI5QUZFRTlFMjYwRTk5MEMwOTA5NDgyOTA4Ci06MTAzM0IwMDAyNTI1NTgwRTY0QzA5MEMwNTBDMEMyODg2MDlBMTkxRTVFCi06MTAzM0MwMDBFNTdGQzBBMTJFRTAyMjA4OEYxNDc3ODcwNEMwODEwRTBDCi06MTAzM0QwMDA4OTM4QzA4MDBCOTMxMDJEMjAzQzI5MjEyMDBDREMwMTYyCi06MTAzM0UwMDAwNERCMDEwOTI5MTQwQkE4MzgwQ0E1MzgwRDNENDAxQzNECi06MTAzM0YwMDBFNTk2OEIyQjA4ODgxMDA3NTUxMDA4NTUwMjA1MzMwMkY3Ci06MTAzNDAwMDAyODIxMjUwRjE1NDAwM0JCMDIwQ0JCMDIwNzU1MTAwNUYwCi06MTAzNDEwMDBEMzEwMDgyODE0MEFERDExMDQ4ODExMDk4ODAyMDUzMzI1Ci06MTAzNDIwMDAwMjI5MjEwNDA4MzMwMjlCNzBDMDgwOEEyMDFCRTU4RjhCCi06MTAzNDMwMDAwOEFBMTEwQkFBMDI5QTcxQzBBMTg1MkE5Mzc2OTU3NEU1Ci06MTAzNDQwMDAwODkzMTEwM0REMDIwQUREMDI5RDc3OEM2M0MxREM5Q0M5Ci06MTAzNDUwMDA3MzhCNjI5ODc4OUE3OTlCNzIyMzIyMTRDMEMwQjEzNTFECi06MTAzNDYwMDAyNTI2MTQ5QzdCOUQ3NTkzN0EyQjYyMUE5QjdDMkE2MjdECi06MTAzNDcwMDAxQzlBN0QyODYyMUQ5ODdFMjU2MjFCOTU3RjIzNjIxNzBBCi06MTAzNDgwMDAyMzc2MTAyRDYyMTgyRDc2MTEyQzYyMTkyQzc2MTI2NDc5Ci06MTAzNDkwMDBFMEI5OEU2MDc3RTczREMwRkUxM0U1NTcxREU1NThDMUUyCi06MTAzNEEwMDA4MThBNjI4QjYzMDQ5NTExMEU5QzQwMDZDQzExMEM1NUU5Ci06MTAzNEIwMDAwMjI0NzYxNTA4NTUwMkMwODAyRDc2MTQ4RDJCMkI3NkFDCi06MTAzNEMwMDAxQjJBNzYxQTI4NzYxOTI1NzYxODAzREQwMjJENzYxNjIyCi06MTAzNEQwMDA2MDAwMDMwMDAwQzBGQTJFMjAwQzE5RTUzRTE4RTUzNTA3Ci06MTAzNEUwMDBBOUU5MENFRTExQThFRUMwODAyREUyODUyODk0Q0YwRDNECi06MTAzNEYwMDBGRDBCMkRFNjg1REEyMDhCMTk4QzE1OEQxNDU4MEQ2NTgyCi06MTAzNTAwMDBEMkEwRDEwRkRDNzBERjUwREI2MDJENkMyOEMwQTAxRTc0Ci06MTAzNTEwMDBFNTU2OUExMERBMjA1QkZFNTU2M0ZFNTMwMDJCMjAzREUyCi06MTAzNTIwMDAwQjRCNDA2NUJDODI2RkU1MjdEQTMwOEY1NTZERTkwQzk3Ci06MTAzNTMwMDA4RUFBMEU4RTE0QzlFODdFRjMxNjJBQUMxMEMwOTAyOTBDCi06MTAzNTQwMDAyNDY3MDkwRjQ3NjRGQzYwNjAwMTVGMDBDMEZBNjNGRkY1Ci06MTAzNTUwMDA4NUMwOTE2M0ZGRTg4ODE0NjU4MTY4REEyMERCNjA4Q0EwCi06MTAzNTYwMDAxNTU4MEQ3Q0MwMjBDMDkwMjlBNDAzRDEwRjhBMTYyQkJBCi06MTAzNTcwMDAyMTA0NTgwQ0EyQzBBMDJBMjQ2NjhFNjg2M0ZEQ0EwMEVDCi06MTAzNTgwMDAwMDJCOUNGOTY1QjBGRERBMjA1ODBDQTc2M0ZDMjIwMEUzCi06MTAzNTkwMDAwMERBMjBDMEI2NTgwRTAxNjNGRkJBMDAyQjIwMEMwQ0Q1Ci06MTAzNUEwMDBCRTExQTdFRTJERTI4NkMxQzI3REMzMDI2MDAxMTgxOUNCCi06MTAzNUIwMDBFNTAyMDlCOTBBMjk5MkEzNjg5MDA4MkEyMjAwMDlBQUZCCi06MTAzNUMwMDAwQzY1QTEwMzI2RTI4NTY0NjBGRDJDMjA2Njg5MzFCMTdCCi06MTAzNUQwMDBDQzBDMEM0NzJDMjQ2NjZGQzYwMjcwOTYwQzhBMTYyQkY2Ci06MTAzNUUwMDAyMTA0NTgwQzg2QzBEMDJEMjQ2NjhFMzA3N0U3NEQxQzAwCi06MTAzNUYwMDBFNTAyMUJFNTAyOEYzMjg4MzNDMEE0MkQyMTA0MEU5OTA5Ci06MTAzNjAwMDA0MDA2OTkxMTA0REQxMTA5REQwMjlBNjFDMTkwMDlEREJFCi06MTAzNjEwMDAwMjlCNjBDMDkwOEIyQjlENjQ5RjY2OTg2Nzk5NjUwQzk4Ci06MTAzNjIwMDBCQjAyOUI2MjI4MjAwQzFBRTRFQkFBOEEwQzg4MTFBNzIzCi06MTAzNjMwMDA4ODJGODI4NTI5QTRDRjJGRkMyMDJGODY4NThBMTQ2NUE4Ci06MTAzNjQwMDBBMEE2QzAyMEQxMEZCMEZDOEIxNDJDMjUyM0M4QjcwMjM0Ci06MTAzNjUwMDAyQTAyMDY2QjAyNTgwQ0I4MkEyMTAyNjVBRUY3QzBEOEMwCi06MTAzNjYwMDAwREFEMDIyRDI1MDI2M0ZFRUMwMDhFMTRDOEU4REEyMEIxCi06MTAzNjcwMDBEQjMwNTgwQ0IxMkEyMTAyNjVBRURBMDdBRjAyMkYyNUU0Ci06MTAzNjgwMDAwMjYzRkVEMTAwREEyMERCMzA4QzE1OEQxNDU4MEU1NTA0Ci06MTAzNjkwMDBEMkEwRDEwRkRBMjAyQjIwMEM1ODBEQzA2M0ZFQjYwMDRCCi06MTAzNkEwMDBEQTIwMkIyMDBDNTgwREUyNjNGRUFBREEyMERCMzA4Q0U2Ci06MTAzNkIwMDAxNTJEMTIwNDJFMEE4MDI4MEEwMDI4MjQ2ODU4MENCMDAwCi06MTAzNkMwMDA2M0ZBRTUwMEMwMjBEMTBGREEyMDU4MERCNDg5MTRDRDdCCi06MTAzNkQwMDA5MkRBMjBEQjMwOEMxNTU4MEQxRkRCQTBDMDIwQzBBMDczCi06MTAzNkUwMDAyQUI0MDNEMTBGQzAyMEQxMEYyQTJDNzQ4QjE1NTgwNjkxCi06MTAzNkYwMDAyOEQyQTBEMTBGMDAwMDAwNkMxMDBDMjgyMTAyOTQxMEQ5Ci06MTAzNzAwMDAwODA4NEM2NTgzNjIxRkU0QUIyOUYyOUU2Rjk4MDI2MDQzCi06MTAzNzEwMDAwMzY2MURFNEE3MjlEMjI2Njg5MDA4MkEyMjAwMDlBQTc4Ci06MTAzNzIwMDAwQzY1QTM1NDJDRjI5RDY0QzM0RTJCMjAwQzBDQjYxMUQ3Ci06MTAzNzMwMDBBRjY2Mjg2Mjg2QzFFQzc4RTMwMjYwMDM0NjE5RTQ5RTE2Ci06MTAzNzQwMDAwOUI5MEEyOTkyQTM2ODkwMDc4QTIwMDlBQTBDNjVBM0RGCi06MTAzNzUwMDAzMjI0NjI4NTY0NDMyQ0MwRTEyQTMxMDlDMDcwMjcyNEQ5Ci06MTAzNzYwMDA2Njg5MzU5QTExOTkyQTg4MzY5OTEyOTgyQjg5Mzc5ODQzCi06MTAzNzcwMDAxMzk5MkM4ODM4OTkxNDA4NTgxNDk4MTU5ODJEODkzOTVDCi06MTAzNzgwMDAyQTI1MDQyRTI1MUQyOTI1MUMyODMwMjhDMDkyMjgyNEVFCi06MTAzNzkwMDAzQzJBMzAyOTA4MDg0Nzk4MTYwOTg5MDEyQTI0M0QyQTFECi06MTAzN0EwMDAzMTE1OTkxNzBBMDk0MTA5QTkwQzI5OUNFQzI5MjUxRkYzCi06MTAzN0IwMDA3RTg3MTkyRDJBMDAwREEwNjAwMDA4M0UwMTBBM0VCMTQ3Ci06MTAzN0MwMDBBRDA4REEzOTBFQUExMTBBOTkwQzI5MjUxRjJBMjExRkUyCi06MTAzN0QwMDAxOEU0QTgwQTgxNjBDMUQwOTQxQTk1MUIwMTA4M0UwMDI0Ci06MTAzN0UwMDAwNTNFQjE4NDA1NDgzOTg0M0MyNTlDRkMwRDg4MzYyOTZBCi06MTAzN0YwMDAyMDE0MDhBQTFDOEQzRDI3MjYxODJFMjYxMzJFMjYxNEM5Ci06MTAzODAwMDAyRTI2MTUyNzI2MUIyRTI0NkIyNzI0NjcyNzI0NjgwOEJECi06MTAzODEwMDA1ODFDMDkwOTQzMjkyNDE0MjkzMjExMkEyNTJFMjgyNTQ4Ci06MTAzODIwMDAyRjI3MjUyNDI3MjUyNTI3MjUyQzI3MjUyMzI1MjUyMDM3Ci06MTAzODMwMDAyNDI1MjEyRDI1MjI4NDFBMkQyMTFDODUxQjZGRDIwMkJGCi06MTAzODQwMDA2MDAyMDlDMEEwOTkxODZEMDgwQUIxQUEwMEExMDQwMDdECi06MTAzODUwMDBFOTFBN0Q5QjAyNjNGRkVFODkxOEMwODBDMEUxQzA3MDQ5Ci06MTAzODYwMDBDMEQyOUIxRDk1MUI5NjFDOUMxRTE2RTQ3MjJDMjAzREZECi06MTAzODcwMDAxNUU0ODIwQzBCNDAwRENDMDEwQkU3MzgxREU0NjQwQTAzCi06MTAzODgwMDA3NzEwMENFODM4MEI4ODEwQzBDNDlDNDEwODc3MDI5RDYzCi06MTAzODkwMDA0MEIwQTgwOTg4MTE4QjIwOUM0OTlENDg5NTRCOTY0M0MwCi06MTAzOEEwMDAwODc3MDI4NjE0MThFNDczMTVFNDVBMDg3NzAyMDVCQkZBCi06MTAzOEIwMDAwMjlCNEE5QjQyOTc0Njg4MTI4NzExMDhEQTE0OUE0RTU3Ci06MTAzOEMwMDAwRDg4MTAwRDc3MTEwODc3MDIxQUU0NEUwNkQ4MTQwREYyCi06MTAzOEQwMDA2NjEwMDg3NzAyOTc0RkM3OEY5ODREOTg0Qzk4NDU4Nzg4Ci06MTAzOEUwMDAxNTk4NDQwNzE1MTQwRDU1MTEwQTU1MDI5NTQ3MTVFNDBFCi06MTAzOEYwMDA2MzhBMjYyRDQ2MTAyRDQ2MTgyRDQ2MjAyQzQ2MTEyQzY1Ci06MTAzOTAwMDA0NjE5MkM0NjIxMkI0NjEyMkI0NjFBMjg0NjE0Mjg0NkM3Ci06MTAzOTEwMDAxNTJCNDYyMjg4MTYyNTQ2MjQyNTQ2MjY4QjE3MEEwQzg5Ci06MTAzOTIwMDA0ODA5MEQ0ODg1MTMwRUREMTEwNUNDMTEwODM5NDAwQkVGCi06MTAzOTMwMDBFQjM5MDI5OTEwMUVFNDUyMERDQzAyMEQ1NTExMDgyREUxCi06MTAzOTQwMDA0MDA2NTUwMjJFNDYxMzE2RTQxRDBGREQxMTI1NDYxNkJFCi06MTAzOTUwMDAwODA4NDA4NTFCMDE4ODEwMERCQjAyODY2NzFERTQ0OURECi06MTAzOTYwMDAwOTg4MDIwQ0JCMDIxOUU0MTkxQ0U0NDcyQjQ2MTcyREU5Ci06MTAzOTcwMDA0NjFCQTc2NjFCRTQ0NkMwNzAyQzQ2MUMwOTg4MDI4Q0I3Ci06MTAzOTgwMDAxRTI4NDYxRTJCNDYyM0MwOTA4QjFEMjk0NjFEMjk0NjA2Ci06MTAzOTkwMDAxRjE4RTQzRjI5NDYyNzI4NDYyNTI5MzExNjJFMjAwNkUwCi06MTAzOUEwMDAyOTI0NkEyNDMxMTc5NjJEMjQyNTM4ODYxQ0NDRTEyNzNBCi06MTAzOUIwMDAyNDA3QzBENzA5MEU0MDY0RTA4MjlBMjkwOTI4NDE2NDhGCi06MTAzOUMwMDA4MDkxNjQ0MDlCMkQyNDA2QzA5ODA5NDkzNjI4MEFBMDlFCi06MTAzOUQwMDAyNDYyODUwMUM0MDRBODQ0MjgyMTA0MjQ2Njg1MDg4ODNCCi06MTAzOUUwMDAxMThFM0Y4QTNFMkQzMjEwMEVBNDE4MDBDNDA0MEVBRTc0Ci06MTAzOUYwMDAxODAwRUUxMTBBQ0E1MzBFREQwMkMwRTMwRTg4MDI5OEM5Ci06MTAzQTAwMDBDMTFFRTQyNDA5MDg0RTlFQzA4RTIwOTRDMzk4QzU5RDEzCi06MTAzQTEwMDBDNDE4RTNGMDFERTQyMTA1RUUxMTBFQUEwMjBEQUEwMjVFCi06MTAzQTIwMDBBOEI4Mjc4NENGOUFDMjFFRTNFMjI0RjI5RDI3RTRBMjFECi06MTAzQTMwMDAyNDRDMTgyNEY2OUQ2NTUwNTJDMDIwRDEwRjJEMjQwNjI5Ci06MTAzQTQwMDBDMEEwQzA5ODA5NDkzNjA0QTkzODYzRkY3RkMwQTA2M0FECi06MTAzQTUwMDBGRTA3MDAwMDY1NEY2REMwOThDMEE4MkEyNDA2NjNGRkNBCi06MTAzQTYwMDA2QjJEMjQwNkMwOTA2M0ZGNjNDQzU3REEyMERCMzA4Q0NCCi06MTAzQTcwMDAxMDU4MEMzOEMwMjBEMTBGMDBEQTIwQzBCNjU4MENDNzNGCi06MTAzQTgwMDA2M0ZGRTUwMERBMjA1ODBDQzU2M0ZGREMyQTJDNzQ4QjM5Ci06MTAzQTkwMDAxMDU4MDUzRkQyQTBEMTBGNkMxMDA2MjgyMDA2OEEzMzlCCi06MTAzQUEwMDA2RjgyMDI2MDAxNjFDMDUwMTNFM0MyMjkyMTAyMTZFMzU0Ci06MTAzQUIwMDBDMTY5OTIwNDI1MjUwMkQ5NTAyQzIwMTU5QTI4MTRFM0I3Ci06MTAzQUMwMDBCRjhGMjYyNzIwMEIwQUZFMEMwNDc3MDkyQjcxMUM2NDdDCi06MTAzQUQwMDBFMTM5OEU0MjhENDM2RkJDMDI2MDAxNkYwMEUxMDRCMDlBCi06MTAzQUUwMDBDODAwODgxQTA4QTgwODA4RDgwMjk4MjcyQjIwMDY2ODVBCi06MTAzQUYwMDBCMzJFQ0U5NzJCMjIxRTJDMjIxRDAxMTEwMjdCQzkwMTUxCi06MTAzQjAwMDBDMEIwNjRCMDE3MkNCMDA3MjhCMDAwREEyMDAzODgwQUQwCi06MTAzQjEwMDAyODgyNENDMEQxMEI4MDAwREJBMDY1QUZFN0MwMjBEMTZDCi06MTAzQjIwMDAwRjJEMjA2NDY0REZDQThCMjlDMEYxMEJBQjBDNjZCRjdDCi06MTAzQjMwMDBDMDJCMjAwQzBDQkMxMUE2Q0MyOEMyODYyRTBBMDg3OEZCCi06MTAzQjQwMDBFQjYxMUVFMzlEMEVCRTBBMkVFMkEzNjhFMDA1MjgyMjZCCi06MTAzQjUwMDAwMDdFODk0RjI5QzI4NTFFRTNBOTY0OTA0NjFGRTNCNjAzCi06MTAzQjYwMDA5RTkwQzA4NDk4OTEyODIwMEE5NTkzMEY4ODAyOTg5MjdECi06MTAzQjcwMDA4RTIwMEZFRTAyOUU5NDJGMjAwNzg4MjYyRjk1MEE5OEZDCi06MTAzQjgwMDA5NjlBOTcyRTIwMDYyNTI0MDc2OEUzNDMyOTIxMDIyQUM2Ci06MTAzQjkwMDBDMjg1MURFMzkwMkFBQzIwQURCRDI1RDRDRjJBQzY4NUIxCi06MTAzQkEwMDA2M0ZGNEUwMDJFMjA2NUNCRURDMDgyMjgyNDY1QzlGNjQ4Ci06MTAzQkIwMDAwNUU0MzEwMDAyMDAyQTYyODIxQkUzOTgyOTQxMDIwQkNFCi06MTAzQkMwMDBBQTAyMkE2NjgyMDlFNDMxMjkyMTAyNjNGRjIzMDAwMDQ4Ci06MTAzQkQwMDA2NERGQjg4RjQyMkUyMDE2MDBGMTA0MERFRTBDMDBFRUNCCi06MTAzQkUwMDAxQUFFQUU5RTI5NjNGRkEzOEEyMDJCMzIyMUIxQUE5QTc2Ci06MTAzQkYwMDBCMDI5MzIyMTI4MzIyM0I0OTkyOTM2MjE3OTg5QTkyQjc5Ci06MTAzQzAwMDAzMjIyMkIzNjIxNjNGRkEwQzAyMEQxMEY5RjI3MjUyNDBECi06MTAzQzEwMDAxNUFDQjgyODc1MUMyQjIwMDZDMEMxMkVCQ0ZFNjRFMDc0Ci06MTAzQzIwMDBBQjY4Qjc3NzJEQkNGRDY1REVDNzJEMjA2NEMwRjA2NDlFCi06MTAzQzMwMDBEMDg2OEUyOTBFQUUwQzY2RTA4OUMwRjEyODIwNUEyODY1Ci06MTAzQzQwMDA4Q0ZFMDhDRjM4NjVGRUU4NjNGRjU4MDAwMEUwMDQ5MzVGCi06MTAzQzUwMDAxMEMwODEwQUYzMEMwMzgzMzlDNzhGMDhEODAzMDhBODYyCi06MTAzQzYwMDAwMTA4RjgwQzA4MDgxOUE4MzMwM0M4MENBOEI4Mjg3NTZGCi06MTAzQzcwMDAxQzAzMEI0NzJCMjQxNTgzMTBDQkI3MDBFMTA0QjBCQzA5Ci06MTAzQzgwMDAwMENDMUFBQ0FDMENEQzAyOUMyNzY1OUU1RUMwQjIwQjZCCi06MTAzQzkwMDA5OTAyMDkwOTRGMjkyNTAyNjNGRTUwMDAyRDIwNkEwRDYzCi06MTAzQ0EwMDAyRDQxNjVERjdFREEyMEMwQjA1ODBDOEY2NEFGMThDMDlDCi06MTAzQ0IwMDBGMTYzRkVFRjlGMjc2M0ZGRDAyRTIyMUY2NUVFMzI2Mzc0Ci06MTAzQ0MwMDBGRjc5MDAwMDI4MjIxRjY1OEUyNzYzRkY2RTI1MjQwNkRBCi06MTAzQ0QwMDAyOTIxMDI2M0ZFMUIwMDAwNkMxMDA2NjU3MTMzMkI0QzFBCi06MTAzQ0UwMDAxOEMwQzcyOTNDMThDMEExQzA4MDA5QTgzODA4MDg0MkRDCi06MTAzQ0YwMDA2NDgxMTAxQ0UzMkMxQUUzMkQyQUM2N0UyQTVDRkREM0I2Ci06MTAzRDAwMDAwRjZEQUEwNTAwQjA4ODAwOTA4Qzg5NDBDMEEwMDk4ODdBCi06MTAzRDEwMDA0NzFGRTM1NTA4MEI0NzA5NEM1MDA5MEQ1MzA0REQxMEFDCi06MTAzRDIwMDBCNENDMDRDQzEwMEQ1RDAyOUQzMTBDQkIwMjlCMzA4OERECi06MTAzRDMwMDA0MzhFMjA5ODM1MEZFRTAyOUUzMjhEMjZEODUwQTZERDk4Ci06MTAzRDQwMDA5RDI2OEU0MEMwOTAwRTVFNTA2NEUwOTcxQ0UzM0IxRUEzCi06MTAzRDUwMDBFMzJCMDM4QjBCQzBGNDlGQjE5RUIwMkQyMDBBOTlCM0M3Ci06MTAzRDYwMDAwQ0REMDI5REIyOEYyMDBDRkYwMjlGQjQ4RTI2MkQyMDA5Ci06MTAzRDcwMDAwNzlFQjY4QzI4MkRCNTBBOUNCNzI5MjQwNzJGMjAwNjRDCi06MTAzRDgwMDAyQjIwNjQ2OUYzMzlDQkI2MURFMzBEMjMyMDE2OEREMkE5Ci06MTAzRDkwMDAwQjMzMEMwMEQxMDQwMDMzMUFCNDhEQTNDMzkzMjkyMjMyCi06MTAzREEwMDAyMDBDMTNFMzBDMUZFMzAzMEMyRTExQUZFRUEzMjIyOTBBCi06MTAzREIwMDAyNENGMkZFMjg1RDJBMDBGREQwQjJERTY4NUQxMEYwMDk5Ci06MTAzREMwMDAyRTIwMENCNDhDMENFQjExMUZFMzAzMURFMkZBQUZFRUI2Ci06MTAzREQwMDBBREJCMjJCMjg1MjlFNENGMDJDMjBCMjJCNjg1RDJBMEE4Ci06MTAzREUwMDBEMTBGMDAwMDJFMjAwQzFDRTJGMzFGRTJGQTBDRUIxMUE1Ci06MTAzREYwMDBBRkVFQUNCQjIyQjI4NTI5RTRDRjAyODIwQjIyQjY4NTlFCi06MTAzRTAwMDBEMkEwRDEwRkMwRDAwQkFEMzg3REM4MDI2M0ZFRUM2M0U5Ci06MTAzRTEwMDBGRUUwOEU0MDI3MkM3NDdCRUUxMkRBNzBDMEIzMkMzQzhGCi06MTAzRTIwMDAxOERENTA1ODBBODY4OTQwQzA4MDYzRkVFMzA2NkUwMkEyCi06MTAzRTMwMDAwMjJBMDJEQjMwREM0MERENTA1ODAwMDQ5QTEwREI1MENGCi06MTAzRTQwMDBEQTcwNTgwNDUzODgxMDYzRkVGNzAwMDA2QzEwMDY5Mjc1Ci06MTAzRTUwMDAxMjFFRTJFNDhDNDBBRTJEMEM4QzQ3MkUzQzE4MDRDQTk2Ci06MTAzRTYwMDAwQkQ5QTA3REEzMDIyOUFERjg3NUMzMDI2MDAwODRDMDAwCi06MTAzRTcwMDBCMEMwMjNDMEEwOUQxMDZEMDg0NEI4OUYwRUI4MEE4RDM1Ci06MTAzRTgwMDA5MDBFQjcwQkI4NzcwRDZEMzZBREFBOUQ4MDBENjYwQzAwCi06MTAzRTkwMDBEOEYwMDA4MDg4MDA3MDhDODc5MDY4QjEyNEIyMjI3N0I3Ci06MTAzRUEwMDBEMzI3ODg5MUMwRDBDQjg3OTg5MDI3OUMxMDAwNzA4ODJBCi06MTAzRUIwMDAwMEYwOEM5RDkxQ0I2RkMwODEwOEJCMDM3NUNCMzY2MzNFCi06MTAzRUMwMDBGRkI0QjEyMjJFRUMxODYzRkZENDg1OTIwRDc3MEM4NkQ3Ci06MTAzRUQwMDA5Mzk3OTBBNkQ2N0Q2QjAxQjE1NTk2OTM5NTkyNjAwMDBECi06MTAzRUUwMDAxNkIzQ0MyRDlDMTg4ODEwRDlEMDc4RDNDNzI5RERGODBCCi06MTAzRUYwMDA2M0ZGQzEwMEMwMjM4QTQyMUJFMkU5MDBDRDMyMkQ0NDlBCi06MTAzRjAwMDAwMjlCMzA5MjMxODk0Mjg1NDM3OUExMDUxRUUyRTUwRTdDCi06MTAzRjEwMDA1NTAxODcxMjFCRTJENTg5NzA5NTM1MEI5OTAyOTkzMkFDCi06MTAzRjIwMDA4ODQyMEE4ODBDOTg0Mjg2NzZBNkE2OTY3NjhGNDRBRjc5Ci06MTAzRjMwMDBBRjlGNDREMTBGMDAwMDAwNkMxMDA4OTMxMUQ2MzA4ODU5Ci06MTAzRjQwMDAzMEMwOTEwODYzNTEwODA4NDcwNTk4Mzg5ODEyMjgyMTE1Ci06MTAzRjUwMDAwMjI5M0NGRDA4MDg0QzY1ODE2NTY1OTE2MjhBNjMwQTA3Ci06MTAzRjYwMDAyQjUwNjVCMThCMEE2RjE0MkUwQUZGN0NBNjBBMkMyMEY5Ci06MTAzRjcwMDA1QUNDQzQyRDBBMDIyRDI0NUE3RkUwMDI2MDAyMTU4OTEyCi06MTAzRjgwMDAyODg4MjYxRkUyQzgwOTg4MEM2NTgyMEYyRTIwMEIwRjk3Ci06MTAzRjkwMDBFRTBCMkRFMEZFMkVFMEZGMDhERDExMEVERDAyMUVFMjJECi06MTAzRkEwMDBDMkFFREQxRUUyQzIxQ0UyQzIwRUREMDEwRENDMzdDMTg1Ci06MTAzRkIwMDA4MDA4NDgzN0I4OERCNDg4OTgxMDg5NjAxQUUyODA3QkYxCi06MTAzRkMwMDA5NjIxOEI2MjJBQTAyMTlDMTQ3QkEzMTc5RDEzMkEyMDgzCi06MTAzRkQwMDAwQzhCMTA4QzIwNTgwQkIxOEMxNDhEMTNEQkEwQ0VBQzQ1Ci06MTAzRkUwMDA2MDAxQzQwMDJFMjAwQzFCRTI3MzBDRUExMTBCQUEwODFFCi06MTAzRkYwMDAyQkEyODYxRkUyNzE3QkRCM0IwRkVGMEEyRkYyQTM2ODM3Ci06MTA0MDAwMDBGMDA1MjgyMjAwN0Y4OTJDMkJBMjg1NjRCMEFBODc2MjQ0Ci06MTA0MDEwMDA4ODI2REU3MDBDNzkzNjA5N0EwQzZGQUQxQzhGMjc5QkQxCi06MTA0MDIwMDAxNTA4RkYwQzc3RjMxOTdFN0I3MjlEMTM5QzE0OUIxNTZBCi06MTA0MDMwMDBDRjU2NjAwMDI1QzBCMDYzRkZEMEQ3OTA2M0ZGREQwMDhFCi06MTA0MDQwMDAwMDlEMTM5QzE0REEyMERCNzA1ODBCMTY4QjE1OEMxNDEyCi06MTA0MDUwMDA4RDEzNjVBMDZBOEU2MjYzRkZDQzAwREEyMDhCMTFEQ0MxCi06MTA0MDYwMDA0MDU4MEFCQ0Q2QTA4QjE1QzA1MURFNzBEQTIwREM2MDQ3Ci06MTA0MDcwMDBERDQwNUJGRjc2OEQxMzhDMTREOUEwMkUyMDBDMUJFMjQzCi06MTA0MDgwMDA0RDFGRTI1NDBDRUExMUFGRUZDMEUwQUJBQTJCQTI4NUEyCi06MTA0MDkwMDAyRUY0Q0YwQjk5MEIyOUE2ODU2M0ZGMUQwMERBMjBEQ0Q3Ci06MTA0MEEwMDA2MERENDBERTcwODkxMjI4MjAwN0RGNTBBOTg4MjgyNEFGCi06MTA0MEIwMDAwNzVCRkYwOUQyQTBEMTBGMDBEQkUwREEyMDU4MEIzN0Y1Ci06MTA0MEMwMDA2NTUwRUYyQTIwMTQwQTNBNDA2NUEwRUJEQjYwREM0MDIzCi06MTA0MEQwMDBERDMwMDIyQTAyNTgwOUE3RDZBMDY0QTBENTg0QTE4M0E2Ci06MTA0MEUwMDBBMDA0MDQ0NzAzMDU0Nzk1MTIwMzYzNTFDMDUxNjNGRUMyCi06MTA0MEYwMDA1QzJDMjAwNkQzMEYyOENDRkQ2NDgwQTU2OEM3MDRDMEMzCi06MTA0MTAwMDA5MzI5MjQwNjJDMjAwNkMwQjE4RDY0MUZFMjJDOUQyNzI0Ci06MTA0MTEwMDA5RDI4OUQyOThGRjI5RDI2MDBGMTA0MDBCQjFBMDBGMDE2Ci06MTA0MTIwMDAwNEIwQkUwRUREMDFDMEYwQURCQjhENjUyRjI0MDcwREMwCi06MTA0MTMwMDAwRTVFMDFFRTExQUVCQjJFMEFGRUIwQkIwQjBCMTkwRUNDCi06MTA0MTQwMDBCQjM2QzBFMjBCMEI0NzBFQkIzNzJCMjQxNjE4RTIyNEZDCi06MTA0MTUwMDAwQTA5NDUwRDBCNDIyQjI0MEIyOTI0MEFCNEJFMkUyNDM4Ci06MTA0MTYwMDAwQzdEODg1NzI5MjAxNjJGQ0NGREIwOUQwQTVDNTIwRDdFCi06MTA0MTcwMDBDQzM2MkMyNDY0NjVGREVDMEMwQzQ3NjRDREU2MThFMkNCCi06MTA0MTgwMDAwRjhFMjg4ODgyMEM5RjBDMDA4MTA0MDBGRjFBQUZFRTZFCi06MTA0MTkwMDA5RTI5NjNGRENGMUNFMjNFNjNGRTEzMDAxQ0UyMzU2M0UzCi06MTA0MUEwMDBGRTBDOEQ2NTYzRkZBNTAwREEyMDJCMjAwQzU4MEIyMDM4Ci06MTA0MUIwMDA2NDVGMEZDMDIwRDEwRjAwQzAyMEQxMEZDMDkzMjkyNDBECi06MTA0MUMwMDAxNkMwOTM2M0ZGQTAwMDAwNkMxMDA0QzA2MDE3RTFGOEY0Ci06MTA0MUQwMDAxREUxRkJDMzgxMjkzMTAxMkEzMDA4MjkyNDBBNzhBMTc1Ci06MTA0MUUwMDAwOEMzQjI3QkExNzJEMjYwRDEwRkMwQzE2NTUwNTEyNjA1Ci06MTA0MUYwMDAyNTAyMkFEMDIwMkYyMDBCMjkwQUZCMkIyMDE0MkUyMDQ5Ci06MTA0MjAwMDAxNTI2MjQxNTA5QkIwMTBERkYwOTI4RjExQzJCMjQxNEM4Ci06MTA0MjEwMDBBOEVFMkVGNTFDNjRBMEE5MkIyMjFFMjgyMjFEMDExMTM4Ci06MTA0MjIwMDAwMjdCODkwMURCNjA2NEIwMTcyQ0IwMDcyOEIwMDBEQThDCi06MTA0MjMwMDAyMDA3ODgwQTI4ODI0Q0MwRDEwQjgwMDBEQkEwNjVBRjI0Ci06MTA0MjQwMDBFN0RCMzBEQzQwREQ1MERBMjA1ODAwREUyOTIxMDIwOUFFCi06MTA0MjUwMDAwQjRDQ0FCMkQyQTBEMTBGMDBDQzVBMkMzMDA4N0JDMTczCi06MTA0MjYwMDAzNzJFRDAyMDY0RTAyRDAyMkEwMjAzM0IwMkRDNDBERDIxCi06MTA0MjcwMDA1MDU4MDBENEQyQTBEMTBGMkIyMDE0QjBCQjJCMjQxNDQzCi06MTA0MjgwMDAwQjBGNDE2NEYwNzk3Q0I3Q0FDMEMxMEM5QzAyMkMyNThECi06MTA0MjkwMDAwMkQyQTBEMTBGQzAyMEQxMEYyRTIwMDY2OUUyQzEyNjg0Ci06MTA0MkEwMDAyNDA2MkIyMjFFMkYyMjFEMjkyMDBCMjgyMDE1MEQ5OUI0Ci06MTA0MkIwMDAwOTJBOTExQzI2MjQxNUFBODgyODk1MUM3QkYxNDk2MDlGCi06MTA0MkMwMDAwMDQ4QjBCQjJCMjQxNDBCMEE0MTY0QTA2MjdDQjcwMkU3Ci06MTA0MkQwMDAyQzI1MDIyQjIyMUUyQzIyMUREMzBGN0JDOTAxQzBCMDFFCi06MTA0MkUwMDBDOUI2MkNCMDA3MjhCMDAwREEyMDA3ODgwQTI4ODI0QzBCCi06MTA0MkYwMDBDMEQxMEI4MDAwREJBMDY1QUZFN0MwMjBEMTBGMDAwMDZDCi06MTA0MzAwMDAyNjI0MDZEMkEwRDEwRjAwMDBEQjYwMURFMUFDNjRCRjAzCi06MTA0MzEwMDA0RjJDQjAwNzI4QjAwMERBMjAwNzg4MEEyODgyNENDMDRBCi06MTA0MzIwMDBEMTBCODAwMERCQTA2NUFGRTcxREUxQTQ2M0ZGMzEwMDg2Ci06MTA0MzMwMDAyNjI0MDY2M0ZGOUMwMDAwNkMxMDA0MjgyMDA2MjYwQTMxCi06MTA0MzQwMDAwNDZGODU2MzY0NTAyQTI5MjAxNDdEOTcyNDAyMkEwMjcxCi06MTA0MzUwMDBEQjMwREM0MERENTA1ODAwMTkyOTIxMDIwOTBBNENDODI1Ci06MTA0MzYwMDBBMkMwMjBEMTBGQzBCMTBCOUIwMjJCMjUwMkMwMjBEMUNGCi06MTA0MzcwMDAwRjAwMDIyQTAyMDMzQjAyMkMwQTAxNTgwMEQxQzlBQUVECi06MTA0MzgwMDBEQTIwREIzMERDNDA1ODA5RjMyOUEwMTFEM0EwN0U5NzU2Ci06MTA0MzkwMDAwODJDMEFGRDBDOUMwMTJDQTQxMUMwNTEyRDIwMTQwNkUwCi06MTA0M0EwMDBERDAyMkQyNDE0NjNGRkE0REEyMERCMzBEQzQwREQ1MDc1Ci06MTA0M0IwMDBDMEUwNTgwOTczRDJBMEQxMEYwMDAwMDA2QzEwMDYxNjlGCi06MTA0M0MwMDBFMTdEMUNFMTdENjU1MTU3QzBFMTE3RTE3OTI4MjEwMkFCCi06MTA0M0QwMDAyRDIyMDAwODA4NEM2NTgwOTMyQjMyMDAwQjY5NTEyOTZGCi06MTA0M0UwMDA5Q0ZENjU5MDg3MkE2MjlFNkVBODRDMkE3MjI2NjhBMDYyCi06MTA0M0YwMDAwMjdBRDk0MzJBNjI5RENCQUQ3Q0JFNTAyQjIwMEMwQzk3Ci06MTA0NDAwMDBCRDExQTZERDI4RDI4NjJGNEMwNDc4RkIxNjBDQkYwQUZFCi06MTA0NDEwMDAyRkYyQTM2OEYwMDUyODIyMDA3Rjg5MDcyREQyODVEM0NCCi06MTA0NDIwMDAwRjY1RDA3NDJBMjEwNDE5RTFBM0QzMEY3QTlCMkVEQUU5Ci06MTA0NDMwMDAyMDU4MDg2RTYwMDAzNTAwMkQyMTA0MUJFMTlFN0RCQkQ1Ci06MTA0NDQwMDAyNERBMjBDMEI2NTgwODY5Q0E1NDYwMDEwMzBCMkI1MDA3Ci06MTA0NDUwMDAyQjI0MEJCNEJCMEIwQjQ3MkIyNDBDNjNGRkEwREEyMERGCi06MTA0NDYwMDA1ODBBNEU2MDAwMDZEQTIwQzBCNjU4MEE0QzY1NTBFMDgzCi06MTA0NDcwMDBEQzQwREIzMDJEMzIwMDAyMkEwMjBENkQ1MTU4MDhCREEwCi06MTA0NDgwMDAxQ0UxNEVEM0EwNjRBMEM4QzA1MTg0QTE4RUEwMDQwNDM2Ci06MTA0NDkwMDA0NzBFMEU0NzYzRkYzNTAwMDAyQjIxMDRDMDhDODkzMTg1Ci06MTA0NEEwMDBDMDcwREY3MDA5Rjk1MDA5OEYzODZFQjgxNzJDMjA2NjdDCi06MTA0NEIwMDBBRUNDMEMwQzQ3MkMyNDY2N0NGQjA5OUQxMDU4MDhDRjExCi06MTA0NEMwMDA4RDEwMjcyNDY2OTREMTFFRTE1MUI4REM5RUQwNjU1MDMyCi06MTA0NEQwMDA1NkMwRDdCODNBQzBCMUMwRjAwQ0JGMzgwRjBGNDJDQkFFCi06MTA0NEUwMDBGMTE5RTEzMDE4RTEzMjI4OTY3RUIwNEJEMzBGNkRCQTQ2Ci06MTA0NEYwMDAwNTAwQTA4ODAwQzA4QzJDMjAwQ0MwMjAxREUxMzYwQ0NCCi06MTA0NTAwMDBDRjExQTZGRjJFRjI4NUFEQ0MyN0M0Q0YwRTRFMEIyRUI5Ci06MTA0NTEwMDBGNjg1RDEwRkMwODAwQUI4Mzg3OEQwQ0Q2M0ZGQzEwMENFCi06MTA0NTIwMDA4RTMwMEUwRTQ3NjNGRUExMkEyQzc0MkIwQTAxMDQ0RDE3Ci06MTA0NTMwMDAwMjU4MDhDMjJGMjAwQzEyRTEyNzBDRjkxMUE2OTlBMkVCCi06MTA0NTQwMDBGRjI3RjRDRjI4OTI4NUQyQTAwODQ4MEIyODk2ODVEMTYyCi06MTA0NTUwMDAwRkMwMjBEMTBGMDAwMDAwNkMxMDA0QzA2MENCNTVEQkYxCi06MTA0NTYwMDAzMERDNDAwNTVEMDIwMjJBMDI1QkZGOTQyOTIxMDIwOTJBCi06MTA0NTcwMDAwODRDQzg4MkQyQTBEMTBGMkIyMDE0QjBCQjJCMjQxNDFFCi06MTA0NTgwMDAwQjBDNDFDQkM1N0RCN0VCQzBDMTBDOUMwMjJDMjUwMkE2Ci06MTA0NTkwMDBEMkEwRDEwRjAwMDAwMjJBMDIwMzNCMDIwNjZDMDJDMDI3Ci06MTA0NUEwMDBEMEM3RjcyRTIwMTQyODMxMDEyNjI1MDIyODI0MEEwRjBGCi06MTA0NUIwMDBFRTAxMkUyNDE0NTgwMTBFNjNGRkEzMDAyNjI0MDZEMjE4Ci06MTA0NUMwMDBBMEQxMEYwMDZDMTAwNjI4MjEwMkQ2MjAwODA4NEM2NUU3Ci06MTA0NUQwMDA4MDlEMkIyMDBDMTJFMEY3MENCODExQTI4ODJBODI4NjRECi06MTA0NUUwMDBCNTQ5N0E5MzAyNjAwMDk3MTlFMEY0MDlCOTBBMjk5MjUzCi06MTA0NUYwMDBBMzY4OTAwODJBNjIwMDA5QUEwQzY1QTA4MjI4ODI4NTE3Ci06MTA0NjAwMDAxQ0UwRkY2NDgwNzk5QzgwQjg4N0IxNEI5QjgxOUIxMDM0Ci06MTA0NjEwMDA2NTUwNzRDMEE3RDk3MDI4MEEwMUMwRDAwNzhEMzgwRDI1Ci06MTA0NjIwMDAwRDQyQ0JERTFGRTBFMDFFRTBFMTJFRjY3RUQ4MzBEMzU3Ci06MTA0NjMwMDAwRjZENEEwNTAwODA4ODAwOTA4QzJFMzAwOEMwQTAwMEM1Ci06MTA0NjQwMDBFRTMyMkU3NDAwMjg2MDBDMTlFMEUzMEM4RDExQTJERDBGCi06MTA0NjUwMDBBOTg4QzAyMDJDRDI4NTIyODRDRkQyQTAwQ0JDMEIyQ0UwCi06MTA0NjYwMDBENjg1RDEwRkMwRjAwMzhGMzg3RkEwQzA2M0ZGQjQwMEEwCi06MTA0NjcwMDBDQzU4MkE2Qzc0REIzMERDNDA1ODA3RjZDMDIwRDEwRkQwCi06MTA0NjgwMDBEQTYwNTgwOUM2NjNGRkU3REQ0MDJBNkM3NEMwQjBEQzBECi06MTA0NjkwMDA3MDU4MDg2QTJFMzAwODhCMTAwMEVFMzIyRTc0MDAyOEY1Ci06MTA0NkEwMDA2MDBDMTlFMENDMEM4RDExQTJEREE5ODhDMDIwMkNEMkExCi06MTA0NkIwMDA4NTIyODRDRkQyQTAwQ0JDMEIyQ0Q2ODVEMTBGMDAwMDU0Ci06MTA0NkMwMDA2QzEwMDQyOTIwMTQyODIwMDZCMTk5MjkyNDE0Njg4MTJCCi06MTA0NkQwMDAyNEMwQUYyQzBBMDEyQjIxMDIyQzI0MDY3QkEwMDRDMDhECi06MTA0NkUwMDBEMDJEMjUwMjAyMkEwMjAzM0IwMjA0NEMwMkMwRDA1OEZFCi06MTA0NkYwMDAwMEMwRDJBMEQxMEZDMDIwRDEwRjAwMDA2QzEwMDQyOTNGCi06MTA0NzAwMDAzMTAxQzJCNDI5MjQwQTJBMzAxMUMyODM3OEExNkM3QkZBCi06MTA0NzEwMDBBMTY5NjQ1MDQ3MkMyMDA2QzA2ODZGQzU2MkNBNTcyRDM2Ci06MTA0NzIwMDAyMDE0N0NENzIyREEyMERCMzBEQzQwREQ1MDVCRkZBNTkzCi06MTA0NzMwMDAyOTIxMDIwOTBFNENDOEUyQzAyMEQxMEZDMEYxMEY5RjAxCi06MTA0NzQwMDAwMjJGMjUwMkMwMjBEMTBGREEyMERCMzBDMEMwNUJGRjcyCi06MTA0NzUwMDBEQzI4MjAxNDA2ODgwMjI4MjQxNDYzRkZDNzI5MjAxNUFBCi06MTA0NzYwMDAxQkUwOTcyQTIwMEJDMEMwOUMyNDBCQUEwOTJCQTExQzdDCi06MTA0NzcwMDAyQzI0MTVBQjk5MjlBNTFDNjNGRjk5MDBDMDIwRDEwRkVCCi06MTA0NzgwMDBEQTIwREIzMERDNDBERDUwQzBFMDU4MDg3REQyQTBEMTFCCi06MTA0NzkwMDAwRjAwMDAwMDZDMTAwNENCNTUxM0UwOTIyNTIyMUYwRDcyCi06MTA0N0EwMDA0NjExMDY1NTBDQTMyMzI2MjIxRTI1MjYxRjA2NDQwQjYwCi06MTA0N0IwMDAyNDI2MUU3MzRCMURDODUyRDI0MEQxMEYyODBBODBDMDM4Ci06MTA0N0MwMDA0MDI0MjYxRkE4MjgyODI2MUUyODI2MUREMjQwRDEwRkE3Ci06MTA0N0QwMDBDMDIwRDEwRjI0NERGODI0MjYxRTYzRkZEODAwMDAwMDBFCi06MTA0N0UwMDA2QzEwMDRENjIwMjgyMDA2QzA3MDZFODUwMjYwMDBENEFDCi06MTA0N0YwMDAxREUwNzkxOUUwNzExMkUwNkYyQThDRkM2NEExMzAyQjY2Ci06MTA0ODAwMDA2MTAyQjQ0QzBCMEI0QzY1QjBBMjJCNjAwQzhBNjAwQzlGCi06MTA0ODEwMDBCODExMDI4ODA4MkU4Mjg2MDlCOTBBN0VDMzAyNjAwMDk4Ci06MTA0ODIwMDA5QTI5OTJBMzY4OTAwNTA5QUEwQzY1QTA4RTI4ODI4NTEyCi06MTA0ODMwMDA2NDgwODhCODg5MUJFMDc1OTQ4MTlCODA2NTUxNTVDMDYwCi06MTA0ODQwMDBCN0I4MzgyQTBBMDFDMEMwMDlBQzM4MEMwQzQyNjRDMEExCi06MTA0ODUwMDA0MjFGRTA1NDFFRTA1NjJFRjY3RUIwNEFEMzBGNkRBQURBCi06MTA0ODYwMDAwNTAwODA4ODAwOTA4Q0MwQTAyOTYwMEMwQzlDMTFBMkNGCi06MTA0ODcwMDBDQzJCQzI4NUFEOTkwQjRCMEIyQkM2ODUyODYwMDYyNzI4Ci06MTA0ODgwMDA5NENGNjg4MTIyMkQ2MDE1RDJBMEM5RDJDMEUyMkU2NEQ3Ci06MTA0ODkwMDAwNkQxMEYwMEMwRjAwOEFGMzg3RkIwQkQ2M0ZGQjEwMDk0Ci06MTA0OEEwMDAyNzY0MDZEMkEwRDEwRjAwRDJBMEQxMEYwMENDNTdEQUQ2Ci06MTA0OEIwMDA2MERCMzBEQzQwNTgwOEE3QzAyMEQxMEZEQTYwNTgwOTBGCi06MTA0OEMwMDAzNzYzRkZFODAwMjgyMjFFMjkyMjFERDMwRjc4OTkwMUEzCi06MTA0OEQwMDBDMDgwQzFENkMxQzExQkUwNDNDMTIyQUI2QjY0ODA0MjIyCi06MTA0OEUwMDA3ODkxM0YyQTgwMDAwQ0FFMEM2NEUwQkIwMkFGMEM2NEYwCi06MTA0OEYwMDBGMEI1MkVBQ0VDNjRFMEFGMERBRjBDNjRGMEE5MkVBQ0JCCi06MTA0OTAwMDBFODY0RTBBMzJGQUNFNzY0RjA5RDJFQUNFNjY0RTA5NzhBCi06MTA0OTEwMDAyRjgwMDcwOEY4MEJEQTgwN0I4MzAyMkE4REY4RDhBMDU1Ci06MTA0OTIwMDA2NUFGQkMyODYxMjMwOEQ3MzlEOTcwNjAwMDdCMDAwMENGCi06MTA0OTMwMDAyQjYwMEMwQ0I4MTFBMjg4MkM4Mjg2MkEwQTA4N0NBQjRBCi06MTA0OTQwMDA3RTA5QkEwQTJBQTJBMzY4QTAwNTJDNjIwMDdBQzk2RjYwCi06MTA0OTUwMDAyQTgyODU2NEEwNjkxRkUwMjkyNzY1MDRDMEUzQzBDNERBCi06MTA0OTYwMDAyRTY0MDY5Q0ExMUNFMDU0OUZBMDJFNjAwQTk3QTMwQzA1Ci06MTA0OTcwMDBFRTAyOUVBMjhGNjAwQ0ZGMDI5RkE0MkU2MDE0N0FFRkJECi06MTA0OTgwMDA0NjI3QTQxN0FEQkMyRjgyODUyN0M0Q0YyRkZDMjAyRjJDCi06MTA0OTkwMDA4Njg1NjNGRTY5MkE2Qzc0QzBCMURDOTBERDQwNTgwN0RGCi06MTA0OUEwMDBBNzFERTAwQzYzRkVDMTAwRDlBMERBNjBEQjMwQzJEMEU1Ci06MTA0OUIwMDBDMUUwREM0MDA5REUzOURENTA1ODA3RjFEMkEwRDEwRjRCCi06MTA0OUMwMDBEQTYwNTgwOEY2NjNGRUU0MjkwQTAxMjlBNDE3MERCRjJFCi06MTA0OUQwMDAwODJFODI4NTI3RjRDRjJFRUMyMDJFODY4NTY0NTAwQjdFCi06MTA0OUUwMDAyQTZDNzREQjQwNTgwMTZBRDJBMEQxMEZDMDIwRDEwRkNECi06MTA0OUYwMDA2QzEwMDYyQjIyMUUyODIyMUQ5MzEwN0I4OTAxQzBCMDRCCi06MTA0QTAwMDBDMEM5QzAzQkMxRjIwNDA2NDAxRERGRjZDMEUyQzA3NDVECi06MTA0QTEwMDAwNzQ3MDEwRTRFMDFBRDJEOUUxMUMwNDAyRTBBMTQ2NEIxCi06MTA0QTIwMDBCMDZFNkQwODQ0MjgyMjFEN0I4MTY1MkFCMDAwN0VBMUVFCi06MTA0QTMwMDAzQjdGQTE0NzdCNTEyMDdDQTE0OTY4QTkxNzY4QUExNDM0Ci06MTA0QTQwMDA3M0ExMTFDMDlGNzlBMTBDQzE4Qjc4QTEwN0MxQUUyOUI4Ci06MTA0QTUwMDAwQTFFMjlCNDAwN0NBMTJCMkFCMDA3MEJBQjBCREFCMERECi06MTA0QTYwMDA3REIzMDIyQUJERjhEQkEwQ0FBNTYzRkZCNDI4QjAxMDRECi06MTA0QTcwMDA4OTExNjk4N0JCNjQ5RkI4NjNGRkRDMDA2NDdGQjQ2M0ZFCi06MTA0QTgwMDBGRkQ1MDAwMDY0NkZEMEMwNDFDMUFFMkFCNDAwNjNGRkZGCi06MTA0QTkwMDBDNjJCMjEwMkNFQkUyQTIyMUQyQjIyMUU3QUIxMkE4Q0MxCi06MTA0QUEwMDAxMDdDQjEyMTdBQjkwMUMwQjBDOUI5MTNERkMxREEyMEQ1Ci06MTA0QUIwMDAyOEIwMDAyQ0IwMDcwMzg4MEEyODgyNENDMEQxMEI4MDk0Ci06MTA0QUMwMDAwMERCQTA2NUFGRTdEMjQwRDEwRjg5MTA2NTlGRDQ2M0FBCi06MTA0QUQwMDBGRkYzMDAwMDZDMTAwOEMwRDBDODU5OEMzMDI5MjEwMkE3Ci06MTA0QUUwMDAwQzBDNDc2MDAwMEM4RTMwMEUxRTUwNjVFMTlFMjkyMTkzCi06MTA0QUYwMDAwMkMwQzExNkRGQjAwOTBCNEM2NUIwOTA4QTMwMEE2RTU3Ci06MTA0QjAwMDA1MTY4RTMwMjYwMDA4NTJGNjI5RTFCREZBOTZFRjg1Mzk3Ci06MTA0QjEwMDAyQkIyMjY2OEIwMDUyRTIyMDA3QkU5NDcyNzYyOURCNzlECi06MTA0QjIwMDA0OENCN0Y5NzEwMkIyMDBDQjA0RTBDQkYxMUE2RkYyOTRECi06MTA0QjMwMDBGMjg2OUUxMjc5OEI0MTE3REZBMDA3QjcwQTI3NzJBMzZFCi06MTA0QjQwMDA2ODcwMDQ4ODIwNzc4OTMwMjlGMjg1REY5MEQ3OTA2NUQ2Ci06MTA0QjUwMDA5MDY1MkEyMTA0MTlERkQ3N0E5QjIyREEyMDU4MDZBMzEwCi06MTA0QjYwMDA2MDAwMjkwMDJDMjEwNDFCREZEMzdDQkIxOERBMjBDMDk1Ci06MTA0QjcwMDBCNjU4MDY5RUM5NTg2MDAxNENDMDkwNjNGRkNDREEyMDNECi06MTA0QjgwMDA1ODA4ODY2MDAwMDZEQTIwQzBCNjU4MDg4NDY1NTEzNTlBCi06MTA0QjkwMDBEQzQwREIzMDhEMzBEQTIwMEQ2RDUxNTgwNkY2QzBEMDg4Ci06MTA0QkEwMDBEM0EwNjRBMTIwMjkyMTAyQzA1MTg0QTE4Q0EwMDQwNEI3Ci06MTA0QkIwMDA0NzBDMEM0NzYzRkYzRTAwQzA5Qzg4MzFEQkQwMDhGOEVGCi06MTA0QkMwMDA1MDA4OUIzODI4MjEwNDk4MTE2RTg4MjMyODIwNjZBQzUxCi06MTA0QkQwMDA4QzBDMEM0NzJDMjQ2NjdDQkIxNTlGMTM5RTE0OEExMEVBCi06MTA0QkUwMDA4QjExNTgwNzA2OEUxNDhGMTNDMEQwMkQyNDY2OEEzMDdGCi06MTA0QkYwMDBDMDkyQzFDODFCREY4NjdGQTYwOTlCRjA5OUYxMkNGNEY3Ci06MTA0QzAwMDAwODI3RkMxMDY1NTBBNEI4M0FERjcwQzA1MUMwODAwNzc3Ci06MTA0QzEwMDA1ODM4MDgwODQyNjQ4MDY3MThERjYzMTlERjY0Mjk4NjAyCi06MTA0QzIwMDA3RTZBNDIwQUQzMEY2REU5MDUwMEEwODgwMEYwOENDMEFGCi06MTA0QzMwMDBBMDg5MzBCNEUzN0Y5NjI4QzBGMjA3RTkwQjJDOTQwOEQyCi06MTA0QzQwMDA5QjkwOUY5MTJGMjAwQzEyREY2MzBDRjgxMUE2ODgyOUVFCi06MTA0QzUwMDA4Mjg1QTJGRjJERjRDRkQyQTAwOTMzMEIyMzg2ODVEMTA0Ci06MTA0QzYwMDAwRjIyMjAwQzg5MTIxOERGNUIwQzJCMTFBNkJCQTgyMjg3Ci06MTA0QzcwMDAyRDI0Q0YyQ0IyODVEMkEwMEM5OTBCMjlCNjg1RDEwRjRCCi06MTA0QzgwMDBDMDg3QzA5MDBBNTkzODc5ODA5NjYzRkY4QURCMzBEQTkyCi06MTA0QzkwMDAyMEMwQzFDMEQwNUJGRjU2MjkyMTAyQzBEMDJBOUNGRTkzCi06MTA0Q0EwMDA2NUFFNEQyRDI1MDJDMDkwNjNGRTQ1MDA5RTE0MkEyQzUyCi06MTA0Q0IwMDA3NEMwQjFEQzcwREQ0MDU4MDZFMThFMTRDMEQwMUJERjNCCi06MTA0Q0MwMDA1M0MxQzg2M0ZGNkFDMDIwRDEwRjAwMDA2QzEwMDYyOEQyCi06MTA0Q0QwMDAyMTAyMTZERjM4MDgwODRDNjU4MjE5Mjk2MjlFNkY5OEY4Ci06MTA0Q0UwMDAwMjYwMDIyMDE5REYzMzI5OTIyNjY4OTAwNzhBMjAwOTgyCi06MTA0Q0YwMDBBQTBDNjVBMjBGMjc2MjlEQzBDQzY0NzIwNzJCMjEwNDA5Ci06MTA0RDAwMDA4RTMxQzBBMEREQTAwRUZFNTAwRUNEMzg2RUI4MTAyQzM2Ci06MTA0RDEwMDAyMDY2QjFDQzBDMEM0NzJDMjQ2NjdDREIwMjYwMDFFRkQyCi06MTA0RDIwMDBDMEMxMjkzMDA4MUJERjI1NjQ5MDlDMkYwQUZGQzBEMzI3Ci06MTA0RDMwMDBCMDlFNjRFMTAyNjg5MjEzNjQ1MDg4MkEyQzc0MDQ0QjdDCi06MTA0RDQwMDAwMjU4MDA5MzBBQTIwMjA2MDAwMDAwMDAyQjIwMEMyNzQ0Ci06MTA0RDUwMDAyMTA0MENCQzExQTZDQzI5QzI4NjI4MEEwODc5ODMwMjNBCi06MTA0RDYwMDA2MDAxQjkxOURGMTUwOUI5MEEyOTkyQTM2ODkwMDgyRUM0Ci06MTA0RDcwMDAyMjAwMDlFRTBDNjVFMUE0MkVDMjg1NjRFMTlFMjYyMDg2Ci06MTA0RDgwMDAwNzEzREYxRTZFN0IwMjYwMDE5QTE3REYxNTFGREYxRUZGCi06MTA0RDkwMDAxOURGNEJDMEQyMjgyMDBBOTNFMDlERTFBOTY5MEY4ODUyCi06MTA0REEwMDAwMjk4RTIyRjkwODAyQTk0ODBCMUZGMDdGRjAyOUZFM0QwCi06MTA0REIwMDAyRUMyODUxRkRGMDgwRURFMEJBRkJGMkFGNENGMkVDNjMyCi06MTA0REMwMDA4NTY1NUY3NkMwMjBEMTBGMjgzMDEwMjkzMDExMkUzMDM0Ci06MTA0REQwMDAxMzAwOTkzMjAwRUQzMjY0ODBFRTJBMzAxNDFGREYzODYwCi06MTA0REUwMDAwMEFBMzI3OEVGMDUwRjlFMDkyREU0N0YxRURGMzY2NjlDCi06MTA0REYwMDBBMDA1MEY5ODA5MkE4NDgwQjRBNzE4REYzM0M3NkYwMDc1Ci06MTA0RTAwMDA5MTA0QUU5RURERTAwMEFGMUEwMEMzMUE2RUUxMDUyRERECi06MTA0RTEwMDBCMjAwMERFRDBDMUVERjJEMDhEODFDMDYzMzAzQUU4ODQyCi06MTA0RTIwMDAyQTg0OEIyRUIwMkUyNzg0OEMwM0VFMDEwRkVFMDIyRUU3Ci06MTA0RTMwMDBCNDJFNTgwMThGNjNGRUZGMjkzMTA4MjkyNTA0MjgzMDNDCi06MTA0RTQwMDAxNDJFMzEwOUIwODg2NDgwQTMyRTI0MEFDMDgxMkUzMDJDCi06MTA0RTUwMDAxNjJDQjQyMzJFMjQwQkI0RUYyRjI0MEM4QzM3OEIzNjU2Ci06MTA0RTYwMDAyOTI1MDRERUIwREZDMDBDOEYzOTBCOEUzOTBGRUUwMjFFCi06MTA0RTcwMDA2NEVFQzQwODlGMTEwMUM0MDQ4RDM4MENCODE4MDBDNDM2Ci06MTA0RTgwMDAwNDBDQkUxODAwRUUxMTBFREQwMkMwRTMwRUZGMDIxRTgwCi06MTA0RTkwMDBERjAxOUY3MTlFNzAxRURGMDA4RjIwOTg3MzlENzQwNTQ3Ci06MTA0RUEwMDBGRjExMEJDRDUzQzE4MDk4NzUwRkREMDIwRUREMDI5RDAxCi06MTA0RUIwMDA3MjFFREVCRjJBMjQ2NjJGNjI5RDJBRTRBMjJGRkMxOEYwCi06MTA0RUMwMDAyRjY2OUQ2M0ZFNzEwMDAwMDAyRjMwMTIxQkRGMDEwMDcyCi06MTA0RUQwMDBGQTMyNzhGRjA1MEI5ODBCMkE4NDdGNjZEMDA1MEI5QTZGCi06MTA0RUUwMDAwQjJEQTQ4MDJBMzAxMTAwQUEzMjYzRkY0NDJGMjQwQTFDCi06MTA0RUYwMDA5RTJCNjNGRjU2Q0M1N0RBMjBEQjMwREM0MDU4MDcxNTc5Ci06MTA0RjAwMDBDMDIwRDEwRjAwREEyMEMwQjY1ODA3QTQ2M0ZGRTUwMDI3Ci06MTA0RjEwMDBEQTcwNTgwNjNBQzBBMDJBMjQ2NjYzRkUwMkRBMjA1OEU2Ci06MTA0RjIwMDAwNzlGNjNGRkNGQjE2OTI4MjAwQTg2MjAwOTA5NDc5OUE2Ci06MTA0RjMwMDAxMTI5MjQwNzk4MTA3RjgxMjY5M0UwMjdFNTBBOUFFMzM4Ci06MTA0RjQwMDA4ODEwOURFMTE5REVERDhEMTEwOTZGMDI5RkU0MkRFNENCCi06MTA0RjUwMDAxNjA5ODgwMkMwRDM5OEUyMkEyNDA3NjNGRTUxMDAwMDk0Ci06MTA0RjYwMDAxRERFQTYwODY4MTE4RjExODkyQjkzRTAwOEZGMDJDMDhGCi06MTA0RjcwMDA4RjlGRTUwRDk5MDI5OUUyMDQ3RjExQzBENDlERTEwODRECi06MTA0RjgwMDBGRjAyOUZFNDYzRkZEMDAwNkMxMDA0QzAyMEQxMEYwMDJCCi06MTA0RjkwMDA2QzEwMDQ4NTIxMEQzODExMTRERTg0ODYyMkE0MjQwOEE3Ci06MTA0RkEwMDA2NjBDOTYyMjA1MzMwQjkzMjE3NDNCMTNDODYyRDIzMEYyCi06MTA0RkIwMDBEMTBGQzAzMEJDMjk5OTIxOTkyMDkzMjJEMjMwRDEwRjMyCi06MTA0RkMwMDAyMzNERjg5MzIxNjNGRkUzNkMxMDBBRDYyMDk0MTgxNzUxCi06MTA0RkQwMDBERTc5RDkzMEI4Mzg5ODE5OTkxNDY1NTI1MkMwRTFEMkE3Ci06MTA0RkUwMDBFMDJFNjEwMjFEREU3NjBFMEU0QzY1RTE2MjhGMzA4RTgyCi06MTA0RkYwMDAxOTBGNkY1MTJGRkNGRDY1RjE1NThFRTEyOUQwMjMwRTVECi06MTA1MDAwMDA4RjUwNzdFNjZCOEYxODFFREVCM0IwRkYwRkY0MTEwRkQxCi06MTA1MDEwMDAxRjE0NjU5MENFMThERUIwOEM2MEE4Q0NDMEIxMTlERTJDCi06MTA1MDIwMDA2NDI4NjAwQjA5Q0MwQjBEODgwOTI5ODExQzI4ODExQTgyCi06MTA1MDMwMDAyQTBBMDAwOTg4MEMwOEJBMzgxQkRFQTYwQ0E5MEEyOTFFCi06MTA1MDQwMDA5Mjk0N0I5QjAyNjAwMDhDMkI2MDBDOTQxNjBDQkQxMTFCCi06MTA1MDUwMDBBN0REMjlEMjg2Qjg0ODc5ODMwMjYwMDBEMjE5REU1NkNFCi06MTA1MDYwMDAwOUI4MEEyODgyQTM5ODE3Njg4MDAyNjAwMEEzNjAwMDJDCi06MTA1MDcwMDBBNTFBREU5QTg0MTgwQUVFMDFDQTk4MUJERTREOEMxOTE3Ci06MTA1MDgwMDAyQkIwMDA4Q0MwNkVCMzEzMURERTRBMEMxQzUyMERDQzJECi06MTA1MDkwMDAwQjJEQzI5NUMwQTE3RURCQUU2MDAwMzgwQzBDNTM2MEI2Ci06MTA1MEEwMDAwMDA5MDAwMDAwMThERThDOEM2MEE4Q0NDMEIxMTlERUFECi06MTA1MEIwMDA0MDI4NjAwQjA5Q0MwQjBEODgwOTI5ODExQzI4ODExQTE2Ci06MTA1MEMwMDAyQTBBMDAwOTg4MEMwOEJBMzgwQ0E5MEEyOTkyOTQ3RTg5Ci06MTA1MEQwMDA5MzAyNjNGRjcyREE2MEMwQkE1ODA3MzA2NDUwNzM2MDlECi06MTA1MEUwMDAwMjY2MDAwMDFBREUzMzhDMTkyQUEwMDA4Q0MwNkVBMzYxCi06MTA1MEYwMDAxQTE4REUyRjBDMUM1MjA4Q0MwQjE4REU3NjJCQzI5NTJBCi06MTA1MTAwMDBDMEExNzhCMzAyNjNGRjNGNjNGRkM5MDAwQzBDNTM2Mzc3Ci06MTA1MTEwMDBGRjA5ODk2MDc4OTkxODI5RDI4NUM5OTIyQjcyOUUxRDQyCi06MTA1MTIwMDBERTI0NkVCODIzMkREMjI2OTkxMzY5RDAwQjYwMDAwREIyCi06MTA1MTMwMDBEQTYwNTgwNzFBNjAwMDE3MDA4ODYwN0Q4OTBBOUExQTk5Ci06MTA1MTQwMDAyOTcyOUQ5QzEyOTkxNUNGOTVEQTYwQzBCNjU4MDcxMzQ1Ci06MTA1MTUwMDA2NTUxRjU4RDE0OEMxOERCRDA4REQwMDY2QTAyMEQ2RDZCCi06MTA1MTYwMDA1MTU4MDU4NEQzQTA5QTE0NjRBMUREODJBMDg1QTFCODBBCi06MTA1MTcwMDBBRjlGMTkwNTA1NDcwMjAyNDc5NTE4QzA1MTYzRkU2MEFECi06MTA1MTgwMDAyQjYxMDRDMDhDODkzMUMwQTAwOUY5NTAwOThBMzg2RTlFCi06MTA1MTkwMDBCODFGMkM2MDY2QTJDQzBDMEM0NzJDNjQ2NjdDQUIxMTRCCi06MTA1MUEwMDA5RjExOUUxQjhBMTU1ODA1OTU4RTFCOEYxMUMwQTAyQTMyCi06MTA1MUIwMDA2NDY2OUYxMTY0RjBFMTI5MTIwMzI4MTIwOTZERjkxNzQyCi06MTA1MUMwMDAyRjgxMDMwMDkwOERBRUZFMDA4MDg4OUY5MjAwOTA4QzBFCi06MTA1MUQwMDAwMDgwODhCODk5MDA5MDhDNjU1MTRFOEExMDg1MUE4QjkyCi06MTA1MUUwMDAzMDFGREUwNjg4MTIyOTYwMDcwODU4MEEyQzgyOTQyRDg5Ci06MTA1MUYwMDA2MTA0MEVDQzBDMkM4Njk0NkZEQjNDMUNERTMwQUM5QzI2Ci06MTA1MjAwMDAyOUMwODAwQjVENTBBMjk5MDkwOTQ3MjlDNDgwNjVEMDQ3Ci06MTA1MjEwMDBEQTJFNjAwQ0MwRDAxRkRERUYwQ0U4MTFBRkVFQTc4OENFCi06MTA1MjIwMDAyMjgyODUyREU0Q0YwMjQyMEIyMjg2ODVEMkEwRDEwRkE3Ci06MTA1MjMwMDA4RTMwMEUwRTQ3NjNGREE2QTI5QzBDMEM0NzJDNjQwNzEzCi06MTA1MjQwMDA3QUI2Q0Q4QjYwMkU2MDBBMjgwQUZGMDhFODBDNjQ4MUNDCi06MTA1MjUwMDAwRTE4REUxOTgzMTY4MjEzQjMzOTAyMzMwQjJDMzQxNjYxCi06MTA1MjYwMDAyRDM1MEFDMDIzOTIzMTlGMzBDMDIwOTIzMzA4QjIwMkZDCi06MTA1MjcwMDAwOEU4MDI5MjM0OTgzMkMwODAyODY0MDcyQjYwMENEMjcwCi06MTA1MjgwMDBBMDFDRERENDBDQkUxMUE3RUUyREUyODVBQ0JCMjhCNDZBCi06MTA1MjkwMDBDRjBEOUQwQjJERTY4NUQxMEY4QjE4ODgxMzhEMzBCODVGCi06MTA1MkEwMDA4QzBEOEY0NzBENDk1MEI0OTkwNDk5MTAwRDBENUYwNDcyCi06MTA1MkIwMDBERDEwMDlGRjAyOUY4MDBEQkIwMjlCODE2NTUwOEQ4NTJCCi06MTA1MkMwMDAxQUI4M0FDMEYxQzA4MDBDRjgzODA4MDg0MjY0ODA2QjA0Ci06MTA1MkQwMDAxQkREQjUxOUREQjYyOUI2N0U4RDE4QjBERDZEREEwNTlBCi06MTA1MkUwMDAwMEEwODgwMEMwOENDMEEwNjNGRUYzMDA4MjEzOEIxNjYwCi06MTA1MkYwMDAxREREQzYyODYwMEFDMEUwMkVDNDgwMEQ4ODAyMDJCMkZGCi06MTA1MzAwMDAwQjk5MjM5RjIwQzBEMjk4MjI5RDIxMjI2MDBDQjJCQjEyCi06MTA1MzEwMDAwQzJEMTFBN0REMjhEMjg1MDhCQjBCMThEREFFMkJENkNFCi06MTA1MzIwMDA4NUE4MjIyRTI0Q0ZEMkEwRDEwRjlFMUI4NTFBMkE2Q0NECi06MTA1MzMwMDA3NDhCMTg1QkZGMTc4RTFCNjNGRUEzMDBDMDg3QzA5MEExCi06MTA1MzQwMDAwQUY5Mzg3OTgwOTI2M0ZGODZDMDIwRDEwRjlFMUIyQTBDCi06MTA1MzUwMDA2Qzc0QzBCMThEMTg1ODA1Mzk4RTFCODUxQTYzRkU3RTlBCi06MTA1MzYwMDA4ODZCODIxMzg5MTYwOEJFMTEwRUNFMDIwMjkyMEI5RTI0Ci06MTA1MzcwMDAyNUI0OTkxRUREQTE5RjIwMEU4ODAyOTgyMkMwRUYwNDVCCi06MTA1MzgwMDBEODExMEU4ODAyOTgyNEMwRTQ5RTIxQzA4MEQyQTAyQkEwCi06MTA1MzkwMDA2MDBDMjg2NDA3MUNERDhGMENCRTExQTdFRTJERTI4NTgyCi06MTA1M0EwMDBBQ0JCMjhCNENGMEQ5RDBCMkRFNjg1RDEwRjAwMDAwMEJFCi06MTA1M0IwMDA2QzEwMDRDMDIwRDEwRjAwNkMxMDA0ODYzM0MwNzFDMDgzCi06MTA1M0MwMDAzMDYwMDAwMUIxMzMwMDMxMDQwMDc0MUEwNDYyMDE3NENBCi06MTA1M0QwMDA2MEYxRDEwRjZDMTAwNDAyMkEwMjAzM0IwMjVCRkZGNjVFCi06MTA1M0UwMDAxQ0RENzcxQkREQkZDNzlGODhCMDA5QTkwMzA5OEEwMUFGCi06MTA1M0YwMDA5QUIwNzk4MDFFQzBGMDBGRTQzMTFEREQ2RTAwMDIwMDBFCi06MTA1NDAwMDAyQkQyODIxRUREQjgyQUMxMDIwRUJCMDIyQkQ2ODIwQTI1Ci06MTA1NDEwMDBFNDMxRDEwRjI4QzEwMkMxOTAwOTg4MDIwODA4NEYyODQxCi06MTA1NDIwMDBDNTAyMDhFNDMxRDEwRjAwNkMxMDA0QzBDMDBDRTQzMTk3Ci06MTA1NDMwMDAxMkRENjMxQURENjAwMDAyMDAyOUEyODIxOEREQUMxQkI4Ci06MTA1NDQwMDBEREFBMjYyMTAyMEI5OTAxMDg2NjAxMjlBNjgyMjYyNURDCi06MTA1NDUwMDAwMjA2RTQzMTE0RERBNzE1RERBMjIzNkE5MDIzMjYxMjhCCi06MTA1NDYwMDA4NTUwMjQyNjExMjUyNjEzMjIyQzQwRDEwRjAwMDAwMDQwCi06MTA1NDcwMDA2QzEwMDhENjEwMkIwQTY0MjkxQUI0MUFERDREMEQyM0JFCi06MTA1NDgwMDAxMTFDREQ0RTBGMjUxMUI4MTg5ODEzMEU1NTExMThERDlCCi06MTA1NDkwMDA5OUFDNTVBODM4QUEzMzJDODBGRjJBODBGRUE5MzMyODVFCi06MTA1NEEwMDA4RDAxMjk4MDAxMDhBQTExMjg4MDAwMENBQTAyMDg4ODExCi06MTA1NEIwMDAxMTA5ODgwMjA4QUExQzI4OEMwODI4MTYwNDU4MDg2MkJBCi06MTA1NEMwMDAxNEREM0YwQUE3MDIyNDQxMTYyQTMwODAyQjEyMDQwNzVDCi06MTA1NEQwMDBBQTI4NTgwODVEQjEzMzhCMTNCNDU1OUE2MDA0QUMyOEUwCi06MTA1NEUwMDBCNDY2MkM1NjI3N0I2OUUwMTZERDc2OTQxMkMwNTBDMDU2Ci06MTA1NEYwMDBEMDE3REQzMjlEMTVEMzcwRDQxMDJGNjA4MDJFNjA4MkJFCi06MTA1NTAwMDA5RjE2OUUxNzg4MTY3Mjg5MUE4RDEyOEM0MDJBNjA3RjBBCi06MTA1NTEwMDAwRENDMjgyQjNBMjAwQ0FBMjg1ODA4NEJDMEIxMEFCRTQzCi06MTA1NTIwMDAzNzJFMzU0MDhGMTc3MkY5MUE4RDEyOEM0MDJBNjA4MTAwCi06MTA1NTMwMDAwRENDMjgyQjNBMjAwQ0FBMjg1ODA4NDNDMEIxMEFCRTJCCi06MTA1NTQwMDAzNzJFMzU0MkIyMzNCNDQ0QjE1NTY5NTJCNkI0NjZDMDUxCi06MTA1NTUwMDA1MDhGMTVCODc3RDM3MEIyRkY5RjE1NkVGODk5RDEwRkExCi06MTA1NTYwMDA2QzEwMDRDMDIxRDEwRjAwNkMxMDA0MjcwQTAwMUNERDUwCi06MTA1NTcwMDAxMTFGREQyMjFFREQyNTFEREQwRTFBREQ1MDFCREQ1RTM3Ci06MTA1NTgwMDBDMDI4MjRCMDAwNkQyQTc1QUE0ODI4ODA4MEMwOTE2NDg0Ci06MTA1NTkwMDA4MDYxMDA0MTA0MTVERDA5QzAzMTI1NTAyRTAwMzYxQTA2Ci06MTA1NUEwMDAwNjU1MDEwNTk1MzkwQzU2MTEwQzY2MDgyOTYyOTY2RTUwCi06MTA1NUIwMDA5NzREMEQ1OTBBMjk5MjI0Njg5MDA4MTJERDQyMDI0MjQzCi06MTA1NUMwMDAwODcyOTkzQjIzNjI5NTEyREQwNkNCMzQ5RjMwMDI4MjJDCi06MTA1NUQwMDAwMjBFNDQwMkMwOTI5OTMxOTQzMjkyMzNBRDUyMjQ2MjQ5Ci06MTA1NUUwMDA5NUMwOTAyNDRDMTAyNDY2OTUyNEIwMDAyOTI0QTBBQUNDCi06MTA1NUYwMDA0MjI5MjQ4MEIxNzdCMTQ0MDQwNDQyMjRCNDAwRDEwRjdECi06MTA1NjAwMDBEMTBGRDEwRjZDMTAwNDFBRENFQTJBQTAwMDU4MDIxQzNBCi06MTA1NjEwMDA1QkZGRDUwMjJBMDIwMzNCMDI1QkZGRDExQkRDRThDOTFBCi06MTA1NjIwMDBBMTJDQjEwMkMwRDQwRENDMDIwQzBDNEYyQ0I1MDIwQzM1Ci06MTA1NjMwMDBFNDMxRDEwRkMwQTAwQUU0MzExOERDREUwMDAyMDAyRkYzCi06MTA1NjQwMDA4MjgyMTlEQ0YxMkVCMTAyMDlGRjAyMkY4NjgyMEVFNDVDCi06MTA1NjUwMDAzMUQxMEYwMDZDMTAwNEMwMjAwMkU0MzExNERDRDgxNkU0Ci06MTA1NjYwMDBEQ0Q1MDAwMjAwMjI2MjgyMjM0MTAyNzMyRjA2MDNFNDhDCi06MTA1NjcwMDAzMUMwMjBEMTBGMTlERDIyMUFERDIxMjg0MTAyMEEyQTZBCi06MTA1NjgwMDAwMTA5ODgwMTJBNjY4MjI4NDUwMjA4RTQzMTE1REQxOERGCi06MTA1NjkwMDAxMkREMUQyNTQ2MUREMTBGNkMxMDA0MjkyMDA2Mjg5QzAzCi06MTA1NkEwMDBGOTY0ODBBMDJBOUNGRDY1QTA5NjhBMjg4RDI2MkYwQTgxCi06MTA1NkIwMDAwODdBRDkwNDJCMjIxRkM4QkQyQzIwNjQ2NEMwODEyRTE3Ci06MTA1NkMwMDAyMjA5MEVBRTBDNjZFMDc4MkIyMDBDMUVEQ0JBMENCQzU2Ci06MTA1NkQwMDAxMUFFQ0MyOEMyODYxOURDQjg3OEYzMDI2MDAwQUQwOTlGCi06MTA1NkUwMDBCOTBBMjk5MkEzNjg5MDA4MkUyMjAwMDlFRTBDNjVFMDAxCi06MTA1NkYwMDA5QjI5QzI4NTFGRENDMjY0OTA5MjlGOTBDMEU0MUZEQzhFCi06MTA1NzAwMDBDRTlFOTEyODIwMEFDMEUwOUU5MzBGODgwMjk4OTI4ODJFCi06MTA1NzEwMDAyMDBGODgwMjk4OTQyRjIwMDc5QTk3OUQ5NjJGOTUwQTFDCi06MTA1NzIwMDAyRTI0MDcyODIwMDYyOTIwNjQ2ODgzMzMyOEMyODUxMjg2Ci06MTA1NzMwMDBEQ0E5Mjg4QzIwQTJCMjJFMjRDRjI4QzY4NUMwMjBEMTc3Ci06MTA1NzQwMDAwRkMwMjBEMTBGMkEyMDZBMDExMTAyMEEyQTQxNjVBRjM5Ci06MTA1NzUwMDA1MkRBMjBDMEIwNTgwNUU0NjRBRkU1QzAyMUQxMEYwMDkzCi06MTA1NzYwMDA2NDlGQzgxRkRDOTYyRDIwMTY4RkYyMDlERDBDMDBGMTE2Ci06MTA1NzcwMDAwNDAwREQxQUFEQUQ5RDI5MTJEQzk3MjhDMjg1QTJCMkM2Ci06MTA1NzgwMDAyRTI0Q0YyODhDMjAyOEM2ODVDMDIwRDEwRkMwMjFEMTNGCi06MTA1NzkwMDAwRjAwMDAwMDZDMTAwNDI2MEEwMDFCRENEQjE1REM4NzAwCi06MTA1N0EwMDAyODIwNjUxN0RDODQyODhDRkU2NDgwOTQwQzREMTEwRDM0Ci06MTA1N0IwMDBCRDA4MkNEMkY1MkJEMkY0MkVEMkY3N0NCMTNEQjRCQjcwCi06MTA1N0MwMDAyQkQ2RjQ3QkU5MDUyQkQyRjYyQkQ2RjQ3Q0I5MkMyQTA4Ci06MTA1N0QwMDBEMkY2MkFENkY1MkFENkY0MDZFNDMxMDAwMjAwMjg3MjYxCi06MTA1N0UwMDA4MjJBRkFGRjAwNDEwNDI5MEEwMTJGNTEwMjAwOTkxQTY2Ci06MTA1N0YwMDAwQTk5MDMwOTg4MDEyODc2ODIwRkU0MzEyNjI0NjUyQjUzCi06MTA1ODAwMDBEMkY0OEU1QTJDRDJGNUIwRUU5RTVBN0JDQjE2MjlEMjBBCi06MTA1ODEwMDBGNjJGRDJGNzBDQjgwQzA5RkYwQzA4RkYwQzBGMkYxNDUxCi06MTA1ODIwMDBDOEY5NjAwMDMyMEJDQTBDMEEyQTE0Q0VBOTJCNTEwMjA3Ci06MTA1ODMwMDBDMEMyMENCQjAyMEIwQjRGMkI1NTAyMEJFNDMxRDEwRjM2Ci06MTA1ODQwMDAwMERCMzBEQTIwNUJGRjk0MUJEQ0IwNjRBRjVEMEM0REY1Ci06MTA1ODUwMDAxMUFEQkQ2M0ZGQTgwMDAwMDZFNDMxMDAwMjAwMkY3MjA1Ci06MTA1ODYwMDA4MjE4REM2RTJFNTEwMjA4RkYwMjJGNzY4MjBFRTQzMTgwCi06MTA1ODcwMDBEMTBGMDAwMDZDMTAwNEMwMzAwM0U0MzExNkRDNEUxNTZCCi06MTA1ODgwMDBEQzRGMDAwMjAwMjQ2MjgyNzQ0NzIxMThEQ0EwODc1QTkyCi06MTA1ODkwMDAwODQ4MDEyODY2ODJDRDczMTlEQzlFMEMyQTExQUE5OTRBCi06MTA1OEEwMDAyMjkyODMyOTkyODQ3MjkxMDM4MjIwQ0MyOTJCNTEwMjY3Ci06MTA1OEIwMDAwQkU0MzFDMDIwRDEwRjAwMUZEQzk3MkU1MTAyMEZFRUY4Ci06MTA1OEMwMDAwMTJFNTUwMjBFRTQzMUIwMkRCMTdDOUM1QTEyREM5MkFGCi06MTA1OEQwMDAwOEREMTEyRDU2MTlEMTBGNkMxMDA2MUJEQzM1MUVEQ0FFCi06MTA1OEUwMDAzNzIyQjAwMDFBREM4RTZGMjM3MjFEREM3NUMwNDgxODk5Ci06MTA1OEYwMDBEQzhEMUZEQzhCREMxMEQ1QzA4M0YwMDA4MDg2MDA1MDZGCi06MTA1OTAwMDA4QTZENEE0RjBGMzUxMTBEMzQwOTI0NDA4MDBCNTYwQTE5Ci06MTA1OTEwMDAyOTYyOTRCMTMzMEU1NTA5MjI1MTQwMEY0NDExMEM0NEIxCi06MTA1OTIwMDAwQTg3NDAwOUE4MEMwMjg4MzYyMjUxNDEwNzg4MzYwOEE4Ci06MTA1OTMwMDA3NzBDQTg5OTI5NjY5NDk3NDAyOTYyOTU4NzQxMDlBODEwCi06MTA1OTQwMDAwQzAyODgzNjA3ODgzNjA4NzcwQ0E4OTkyOTY2OTU5NzNGCi06MTA1OTUwMDA0MTAzMDM0MkIxMzgwODA4NDI5OEYwRDEwRjFDREM3MkIxCi06MTA1OTYwMDAxM0RDNzMyN0IwMDAyMzMyQjU2NDcwNTdDMDkxQzBEMEU4Ci06MTA1OTcwMDAxNkRDNzExNURDNkZDMDQwMkFDMDAwMDM4ODQzMjhDNEMwCi06MTA1OTgwMDAwMDZENzkzQzAwNDEwNEIxNDQwMDk3MUE3NzgwMTQ4RTcxCi06MTA1OTkwMDA1MDJGQjI5NTJEQjY5NUFGRUUyRUVEMjAwNkVFMzY5RTI5Ci06MTA1OUEwMDA1MDYwMDAxODc3QTAwOTgzNTA5RDUwMjNCNjk1NjAwMDgxCi06MTA1OUIwMDAwMjIzQjI5NTIyM0QyMDA2MjIzNjIyQjY5NUI0NTVCODcwCi06MTA1OUMwMDBCQkQxMEYwMDAzODg0MzI4QzQwMEQxMEY2QzEwMDRDMDYyCi06MTA1OUQwMDA0MDA0RTQzMTE1REM1OTAwMDIwMDg4NTAxM0RDNThDQjM4Ci06MTA1OUUwMDA4MTVCRkZCRDFDREM1NzBDMkQxMUFEQ0MyQkMyODIyQTc0Ci06MTA1OUYwMDBDMjgzOTQ1MDdCQUIxNDJFQzI4NDI5QzI4NTBBQkQwQzhECi06MTA1QTAwMDAwRTk5MEMwRDk5MEMwOTI5MTQ2MDAwMDUwQkE5MEMwOUJECi06MTA1QTEwMDAyOTE0OTkzMDE1REJFQTJBNTEwMjBBRTQzMTJBMkNGQ0I4Ci06MTA1QTIwMDA1ODAwNEIyQjMyMDAwQUEyMDIyQkJDRkY5QjMwQ0NCNjk1Ci06MTA1QTMwMDBDOEE0RDJBMEQxMEYwMDAwMDRFNDMxMUVEQkRFMDAwMkI2Ci06MTA1QTQwMDAwMDJERTI4MjJGQkFGRjJDNTEwMjBGREQwMTJERTY4MkRDCi06MTA1QTUwMDAwQ0U0MzFEMTBGMDAwMDAwNkMxMDA0RDEwRjAwMDAwMEU1Ci06MTA1QTYwMDA2QzEwMDRDMDIwRDEwRjAwNkMxMDA0MTNEQzM2QzBEMUMwCi06MTA1QTcwMDAwMzIzMDkyMzMxOERDMEEwNkYzNDAyNjAwMDhEMTlEQjMwCi06MTA1QTgwMDBDRDFCREJDRTE3REMyRjBDMjgxMUE4NzcyNjcyODMyNUJGCi06MTA1QTkwMDA3MjgyMkNGQUZGNzY1MTQ3ODg1MDJFNzI4NTI1NUMwNDVECi06MTA1QUEwMDAyNTc2ODI3NUU5MDUyNTcyODQyNTc2ODI3NjU5MjkyRTE4Ci06MTA1QUIwMDA3Mjg0MkU3NjgyMkU3NjgzMEFFNDMxMDAwMjAwMjM5MkNECi06MTA1QUMwMDA4MjAwMjEwNDJGQjEwMjAwRDYxQTBDNjYwMzA2MzMwMUFFCi06MTA1QUQwMDAyMzk2ODIwRkU0MzEyNjcyODMyNTcyODI2MDAwMDIwMEQxCi06MTA1QUUwMDBEOEEwNzY1OTIyMEFFNDMxMDAwMjAwMjM5MjgyMDAyMUQ0Ci06MTA1QUYwMDAwNDAwRDIxQTJGQjEwMjBDMjIwMzAyMzIwMTIyOTY4MjM0Ci06MTA1QjAwMDAwRkU0MzFEMjgwRDEwRjAwRDI4MEQxMEZDMDIwRDEwRjRECi06MTA1QjEwMDA2QzEwMDREQjMwODYyMDE1REJBNjI4MEEwMDI4MjUwMjNECi06MTA1QjIwMDBEQTIwMjhCMDAwMkNCMDA3MDU4ODBBMjg4MjRDMkQwQUZDCi06MTA1QjMwMDAwMTBCODAwMERCQTA2NUFGRTYxQURCOUYwQTRBMEEyOTQ5Ci06MTA1QjQwMDBBMkEzQzdCRjc2OTEwMUQxMEYyQkE2QTNEMTBGMDAwMDRFCi06MTA1QjUwMDA2QzEwMDRDMEQxQzdDRjFCREI5OTE5REI5NjE3REI5NEZGCi06MTA1QjYwMDAwQzI4MTFBODc3ODY3NTg1NzRDMEEwNzY1MTYyODg1MDdDCi06MTA1QjcwMDA4RTc3QjQ1NTk1NzQ3NUU5MDM4NTc2OTU3NDc2NTkyN0IzCi06MTA1QjgwMDA4Rjc2OUY3NTlGNzQwQUU0MzEwMDAyMDAyMzkyODJCNERECi06MTA1QjkwMDAyRTJGQjEwMjAwRTEwNDAwRDYxQTBDNjYwMzA2MzMwMTcxCi06MTA1QkEwMDAyMzk2ODIwRkU0MzE4Njc1ODM3NDc2MzkyODBBRTQzMUFFCi06MTA1QkIwMDAwMDAyMDAyRTkyODJCNDIyMDAyMTA0MjRCMTAyMDBERkYwCi06MTA1QkMwMDAxQTBDRkYwMzBGRUUwMTJFOTY4MjA0RTQzMUQyODBEMTJECi06MTA1QkQwMDAwRkQ4QTA3NjUxRDZEMjgwRDEwRjAwMDA2QzEwMDQyOUM2Ci06MTA1QkUwMDAwQTgwMUVEQjlBMUZEQjlBMUNEQjczMEMyQjExQUNCQkVCCi06MTA1QkYwMDAyQzJDRkMyREIyODUwRkNDMDI5RUQxOUNEMEMwNTFDMDY0Ci06MTA1QzAwMDA3MDEzREI5NjE0REI5NTE4REI5MzJBQjI4NUE4MjgwNDYxCi06MTA1QzEwMDAyNDBBMjM0NjkxQTk4NkI4QUEyQUI2ODVBOTg4Mjc4NDhBCi06MTA1QzIwMDA5RjI1NjQ5RkQxMEYwMDAwNkMxMDA0MTlEQkM3MEMyQTVDCi06MTA1QzMwMDAxMUE5QTk4OTkwQzQ4NDc5OEI3NjFCREJCNUFCQUMyQUZBCi06MTA1QzQwMDBDMjgzMkNDMjg0N0FDMTY4OEFBMDJCQkMzMEQzQTA2NEUyCi06MTA1QzUwMDBBMDVFMEIyQjBBMkNCMkEzMTlEQjdGNjhDMDA3MUREQkVCCi06MTA1QzYwMDBCQkQzMEY3REM5NEFBOTI5Mjk5RDAxMjk5MDFGNjg5MTlECi06MTA1QzcwMDAzMjcwQTYwM0QzQTBDQTlFNjg5MjEwQzdBRjJBQjZBM0ZCCi06MTA1QzgwMDAyQTJDRkM1QkZGQjNEMjMwRDEwRjAwMDAxM0RCQjEwMzMxCi06MTA1QzkwMDBBMzAxOEMzMTFEREI1MTBDOEMxNDBEQ0MwMTJDQjZBMzRGCi06MTA1Q0EwMDA2M0ZGREMwMEMwMjBEMTBGREEyMDVCRkZDQ0MwMjBEMTI1Ci06MTA1Q0IwMDAwRkMwMjBEMTBGMDAwMDAwNkMxMDA0REIzMEMwRDAxOUUxCi06MTA1Q0MwMDBEQjNDREEyMDI4MzAwMDIyMzAwNzA4NDgxMjA5ODgwQTE1Ci06MTA1Q0QwMDAyODgyNENEQzIwMEI4MDAwMUJEQjM3MEM0QTExQUJBQTVFCi06MTA1Q0UwMDAyOUEyODQwOTI5MEIyOUE2ODREMTBGMDA2QzEwMDRDMEI1Ci06MTA1Q0YwMDA0MTE4REIzMDE3REIzMjBDMjYxMUE3MjcyNzcwMzBBODlDCi06MTA1RDAwMDA2NjI1NjI4NjAwNzEwNEEzNTUwMDQ0MUE3NTQxNDgyMjM1Ci06MTA1RDEwMDA2Mjg0MTVEQjUyMDIzMjBCQzkyMjg4MjExN0RCMkYwODVGCi06MTA1RDIwMDA4NDE0MDc0NDAxNzU0OTA1QzgzNEMwMjBEMTBGRDEwRjMwCi06MTA1RDMwMDAwODA5NDcxRERCODZDMEIyOEUyMDFGREIxRDBFMEU0M0Y3Ci06MTA1RDQwMDBBRkVDMkJDNEEwMEZFRTBBMkRFNjI0MkE2Mjg0QzAyMEZCCi06MTA1RDUwMDAwQTk5MEIyOTY2ODREMTBGQzAyMEQxMEY2QzEwMDREQjg3Ci06MTA1RDYwMDAzMEMwRDAxOERCMTNEQTIwMjUzMDAwMjIzMDA3MDg1ODY1Ci06MTA1RDcwMDAwQTI4ODI0Q0RDMjAwQjgwMDA4OTMxNzA5RTEyMUJEQkNDCi06MTA1RDgwMDAwRDBDNEExMUFCQUEyOUEyODQwOTI5MEIyOUE2ODREMTlBCi06MTA1RDkwMDAwRjA5Qzk1MjY4NTMyNjAwOTEwNDE4REIwOEMwQTEyRkNGCi06MTA1REEwMDA4MTEyMDBBQTFBMEFGRjAyMkY4NTEyMUVEQjAyMEM0RDc3Ci06MTA1REIwMDAxMUFFREQyQ0QyODQwQzJDMEIyQ0Q2ODREMTBGQzA4MURCCi06MTA1REMwMDAxRkRBRkZCODlBMEEwQTQ3MkVGMTEyMDBBMTA0MDA4OEQwCi06MTA1REQwMDAxQTA4RUUwMjJFRjUxMjFEREFGNzBDNEMxMUFEQ0MyQjgxCi06MTA1REUwMDBDMjg0MEIyQjBCMkJDNjg0RDEwRjAwMDA2QzEwMDREQjdDCi06MTA1REYwMDAzMEMwRDAxOURBRUZEQTIwMjgzMDAwMjIzMDA3MDk4OEM1Ci06MTA1RTAwMDAwQTI4ODI0Q0RDMjAwQjgwMDAxQ0RBRUEwQzRCMTFBQzE3Ci06MTA1RTEwMDBCQjJBQjI4NDBBMkEwQjJBQjY4NEQxMEY2QzEwMDRDMEE0Ci06MTA1RTIwMDA0MTE4REFFNDE2REFFNjBDMjcxMUE2MjYyNjYwMzBBODE3Ci06MTA1RTMwMDA3MjI1MjI4NjAwNjEwNEEzNTUwMDQ0MUE3NTQxMDgyMjg4Ci06MTA1RTQwMDAyMjg0MDIzMjBCRDEwRjAwQzAyMEQxMEY2QzEwMDQxNTM4Ci06MTA1RTUwMDBEQjQxMDI0OTE0Mjk1NjExMjQ1MjEyMDIwODQzMEY4OENCCi06MTA1RTYwMDAxMUMwNzMwMDgxMDQwMDM2MUEwMDgxMDRDNzhGMDA3N0M3Ci06MTA1RTcwMDAxQTA4NzcwMzA3NDQwMTA2NDQwMjI0NTYxMkQxMEYwMDgyCi06MTA1RTgwMDA2QzEwMDY2RTIzMDI2MDAwQUM2NDIwQTdDMEEwODUxMEQxCi06MTA1RTkwMDAxM0RCMTkxNkRCMzBDMDQwQTZBQTJCQTJBRTBCMTk0MUFBCi06MTA1RUEwMDA2NDkwNjY2ODkxNUQ2ODkyNTI2ODkzM0MyQUEyQUEyODIxCi06MTA1RUIwMDAzQzdGMjg4QzdGMEEwQTREMjk4MDAxMjg4MDAwMkFBQzZCCi06MTA1RUMwMDBGMjA4ODgxMTA5ODgwMjc1ODk0NjJCM0QwMTI5QjAwMDI2Ci06MTA1RUQwMDAyQkIwMDEwODk5MTEwQjk5MDI3QTk5MzRCODMzMkEyQTA4Ci06MTA1RUUwMDAwMEIxNDQ3MjQ5QjE2MDAwNEE3RkJGMDcxNURCMUI2M0Y0Ci06MTA1RUYwMDBGRkI5MDAwMDI1M0FFODYzRkZCMTAwMDAyNTNBRTg2M0U2Ci06MTA1RjAwMDBGRkE5MDAwMDI1MEE2NDYzRkZBMUMwNUE2M0ZGOUMwMDNCCi06MTA1RjEwMDAwMDcwNUYwODI1MzRGRjA1OEMxNDJDMzRGRTcwQUYwQjI1Ci06MTA1RjIwMDAwQThEMTQyRTNEMDEyQUU0MDEyREU0MDBEQTQwNUJGREM4Ci06MTA1RjMwMDA1MDYzRkZBN0QxMEZEMTBGNkMxMDA0MUFEQUEwMTlEQTQxCi06MTA1RjQwMDA5RDFDREIwNjFCREIwN0MwODBDMDcxNjAwMDBEMDAwMERDCi06MTA1RjUwMDAwMDIyQTQzMEIxQUEyOTlDMTA3QjkxNUYyNjkyODY3OUY5Ci06MTA1RjYwMDBDMjE1NkU2MjYyQzAyMDZEMDgwQUIxMjIwMDIxMDQwMEQxCi06MTA1RjcwMDA3NDFBNzY0QkRCNjNGRkVFMjI5Mjg1MEQ2MzExMDMyNUM1Ci06MTA1RjgwMDAxNDY0NUZDRkQ2NTAwMzJENDM2REQ5MDM5ODIwQjQyMkZCCi06MTA1RjkwMDAwNjQ0MTQ2RDQ5MjI5ODIwOTgyMTk4MjI5ODIzOTgyNDI5Ci06MTA1RkEwMDA5ODI1OTgyNjk4Mjc5ODI4OTgyOTk4MkE5ODJCOTgyQ0VECi06MTA1RkIwMDA5ODJEOTgyRTk4MkYyMjJDNDA2M0ZGOTcxRURBN0UyNzZCCi06MTA1RkMwMDBFNjgwMjdFNjgxRDEwRjAwQzAyMDYzRkY4MzAwMDAwMDM4Ci06MTA1RkQwMDA2QzEwMDRDMDYyQzA0MTEyREE3OTFBREE3NTEzREFFMTgyCi06MTA1RkUwMDAyQUEwMDAyMzMyMkQxOURBREIyQkFDRkUyOTkyQUU2RUVCCi06MTA1RkYwMDBBMzAyNjAwMDhFMDkwRTQwMkQxQUMyQzJDRDBFREMzOUZDCi06MTA2MDAwMDAyQzI1MTY2NEIwODk1QkZGOUUxNURBRDcxQURBRDEyQkRFCi06MTA2MDEwMDAzQUU4MEEzQTAxNTgwNThDMkIyMTE2MEFCQjI4RDNBMDZFCi06MTA2MDIwMDA5QjUwNTgwNUEzMkI1MjAwMEFCQjA4MkEwQTAwNTgwNUFBCi06MTA2MDMwMDBBMjE1REFDRTJEMjEwMjJDM0FFODBDM0MyODA0REQwMjEwCi06MTA2MDQwMDAyRDI1MDI5QzUwNTgwNTlBOEI1MEFBQkJDMEExNTgwNTFCCi06MTA2MDUwMDA5QTFDREFDNzJEMjEwMjBDM0MyODA2REQwMjEzREFDNTkyCi06MTA2MDYwMDAyRDI1MDI5QzMwNTgwNTkyOEIzMEFBQkJDMEEyNTgwNTQyCi06MTA2MDcwMDA5MjJBMjEwMkMwQjQwQkFBMDIwQTBBNEYyQTI1MDI1ODBBCi06MTA2MDgwMDAwNUE2RDEwRjI0MjQyM0MzQ0MyQzI1MTY2M0ZGNzYwMDRDCi06MTA2MDkwMDAxOERBQkQxQ0RBQjkxOURBQkExQkRBQjgxN0RBOEI4NTQ3Ci06MTA2MEEwMDAyMDJFMEFGRDFGREFCOTJEMjAyRTI0RjQ3QTI0RjQ3RTQ2Ci06MTA2MEIwMDAyNEY0ODIwRUREMDEyNEY0ODYyRTBBRjcwNzU1MjgwNjAzCi06MTA2MEMwMDBERDAyQzA3NTBFREQwMTA1MDUwNkFCNUJBOTU5QzBFODEwCi06MTA2MEQwMDBBQzVDMjRDNEFCMEVERDAyMjdDNEFDMkUwQURGQTg1NThECi06MTA2MEUwMDAyN0I0RUMwRUREMDEyNEI0RUJDMkUwMjc5NDJDMEVEREM2Ci06MTA2MEYwMDAwMjI0OTQyQjJFMEE4MDBEMEQ0NjI3NTQ2QzI0NTQ2QkQ5Ci06MTA2MTAwMDAwRUREMDIyRDI0MkU2M0ZFRkMwMDAwMDA2QzEwMDQyQTFDCi06MTA2MTEwMDAwQTMwMkIwQTAzNUJGRjREMTJEQThGQzM5MDI5MjYxNjMzCi06MTA2MTIwMDBDM0ExQzBCM0MwOEEyODI2MTc1QkZGNDhDMDNDQzNCMUQ3Ci06MTA2MTMwMDAyQjI2MTYxQURBMjIyQUEwMjAyMzI2MTc2NEEwNzlDMzU4Ci06MTA2MTQwMDBBMkMwQjE1QkZGNDJDM0EyQzBCMTVCRkY0MEMzQzIyQzdGCi06MTA2MTUwMDAyNjE2QzJBRkMwQjEyMzI2MTc1QkZGM0NDMjhGMjgyNjhDCi06MTA2MTYwMDAxNkMwRkUyRjI2MTdDMkUyMkUyNjE2MkEwQUExQzBCMTlCCi06MTA2MTcwMDBDMEQ4MkQyNjE3NUJGRjM1MkEwQUExMkEyNjE2QzNBNkVBCi06MTA2MTgwMDBDMEIzQzE5MjI5MjYxNzVCRkYzMUMzQzYyQzI2MTZDMUE2Ci06MTA2MTkwMDBCMzJBMEFBMjJCMjYxN0MwQjM1QkZGMkMyOTBBQTIyOTE3Ci06MTA2MUEwMDAyNjE2QzE4NTI4MjYxN0MyRkIyRjI2MTZDMEU3MkUyNkU1Ci06MTA2MUIwMDAxNzFEREE3NjJEMjYxMEQxMEZDM0EyQzBCMzVCRkYyM0MzCi06MTA2MUMwMDA2M0ZGODIwMDZDMTAwNDFDREEzRjFCREEyQzE4REE3MEIzCi06MTA2MUQwMDAxN0RBNzExNkRBNzExNURBNzFDMEUwQzBENDE0REEzQjNGCi06MTA2MUUwMDAxRkQ5RjdDMDI4OEZGMDZEMkEzNkRBQzBEOUMwN0M1QjgyCi06MTA2MUYwMDAwMjBGQzkwQzFDREEzNTBDOUMyOEE4QzNBNkMyMkEzNjhCCi06MTA2MjAwMDA4MDJBMjU4NEE0QzJBN0NDMkQyNDhDMkIyNDhBMkIyNDVECi06MTA2MjEwMDA4NzJFMjQ4QkIxQkIyRTM2OUYyQzM2OUUyQzM2OURCMUZCCi06MTA2MjIwMDBBQzFDREExNjFCREE1RkMwMjg2RDJBMzNEQUMwRDlDMDdECi06MTA2MjMwMDA3QzVCMDIwRkM5MEMxQ0RBMjQwQzlDMjhBOEMzQTZDMkU0Ci06MTA2MjQwMDAyQTM2ODAyQjI1ODRBNEMyQjFCQkE3Q0MyRDI0OEMyRTRBCi06MTA2MjUwMDAyNDhCMkEyNDhBMkUzNjlGMkMzNjlFMkMzNjlEQjFBQzU4Ci06MTA2MjYwMDBDMDc5MTlEQTE0MUJEQTUxMTNEQTRGMUFEQTRGMThEQTM3Ci06MTA2MjcwMDA1MDE0REExNTE2REE1MDA0RjQyODEyREE0RjA0NjYwQ0JBCi06MTA2MjgwMDAwNDA1MDZBMjUyQTg1OEFBNUFBMzUzOUIzMDI5QTUwMDc4Ci06MTA2MjkwMDAyNzg0OEFDMDkxQzBBNTJBODQ4QzI5ODQ4QjE3REE0ODY4Ci06MTA2MkEwMDAxOERBNDdBNzU3MjYzNjFEMjYzNjFFMkUzNjFGMTZEQTUxCi06MTA2MkIwMDA0NTEzREE0NUE2NTUwNDMzMEMyODI2QzgyRTc1MDAyRDQzCi06MTA2MkMwMDA1NEFDMkU1NEFCMkU1NEFBMjMyNkU2MjMyNkU1MkUyNkM0Ci06MTA2MkQwMDBFN0QxMEYwMDZDMTAwNjEzREEyMzE3REExRTI0NzIzRDgzCi06MTA2MkUwMDAyMjMyOTM3RjJGMEI2RDA4MDUyODMyOTM3RjhGMDI2MzM0Ci06MTA2MkYwMDBGRkYzQzBDNEMwQjAxQUQ5QjFDMDUxRDk0MDA0NTkzOTU0Ci06MTA2MzAwMDAyOUE0MjA2RTQ0MDIwQkI1MDJDMzI4MUVEOUFDRERCMDBGCi06MTA2MzEwMDAyNUU0MjIwNTJEMzkyREU0MjFDMDUwMUVEQTJDMTlEQThFCi06MTA2MzIwMDAxQzE4REExQzE2REExRTFEREEyQTk0MTAyQTcyNDUxNzc4Ci06MTA2MzMwMDBEOUU3NkRBOTRCRDQ1MEIzNTU3QTVCMTdERjUwNzU2QjE1Ci06MTA2MzQwMDAwNzFGRDk5RThGRjAwRjVGMEMxMkQ5REYwMkYyMjhBRTIzCi06MTA2MzUwMDAyMjIyRDY4MUQ1NDAxM0Q5REM3NDZCMDcxNUQ5OTg4NUQ0Ci06MTA2MzYwMDA1MDA1NDUwQzAzNTMyOEIxNDVBNzNGQTgzMkE5MzMyMjU1Ci06MTA2MzcwMDAzNjlEMjIzNjlFMjQzNjgwMkIzNjlGMkJGNDhCMkNGNEIwCi06MTA2MzgwMDA4QzE0RDlGODI0NDI0REMwMzAwNDE0MTRDODRDNkQwODQ0Ci06MTA2MzkwMDAwNkIxMzMwNDE0MTRDODQyNjNGRkYyMDAxNUQ5ODVDNDUyCi06MTA2M0EwMDA0MDAwMzEwNDFBRDk4NkMwRDE5M0EyMDBERDFBQzEzODQ5Ci06MTA2M0IwMDBCMEREOURBMzE4RDlFQzJCODI0RDI5ODI0RTI5QTUxQzU2Ci06MTA2M0MwMDAyODgyNTM3QTg3MUUyQzU0MDA4RTEwNkZFNDVEMTJEOUY4Ci06MTA2M0QwMDA3QjJGMjExRDIzMjExQzJGMjUxQjA0MzMwQzIzMjUxQzVGCi06MTA2M0UwMDAyMzI1MUFEMTBGQzA2MjE4RDlEQjg4ODA3RTg3RDk4OTBFCi06MTA2M0YwMDAxMDI2NTQwMDZGOTQxOTFCRDk3MTJBQjExQzBBMUExNDYzCi06MTA2NDAwMDAwNEFBMEMyQUI1MUMyQUI1MUQyQUI1MUEyQUI1MUJEMTE3Ci06MTA2NDEwMDAwRjFCRDk2QTJBQjExQzBBMUExNDAzQUEwQzJBQjUxQzJDCi06MTA2NDIwMDAyQUI1MUQyQUI1MUEyQUI1MUJEMTBGMDAxQ0Q5NjQyQjE5Ci06MTA2NDMwMDBDMTFEMkRDMTFDMkJDNTFCMDNERDBDMkRDNTFDMkRDNTdECi06MTA2NDQwMDAxQUQxMEYwMDZDMTAwNjE5RDk1RDE0RDlDMjEyRDlDNTIyCi06MTA2NDUwMDAxNUQ5RTBDNzNGQzBFMDJFNTZBODJFNTZBOTJFNTZBQTQxCi06MTA2NDYwMDAyRTU2QUIyMzI2MjkxOEQ5ODVEQjEwMUNEOURBQzBENEM3Ci06MTA2NDcwMDAyQTQyNDUyRDE2MDE5QzEwMDBCMDg5MEE4ODBDMjg5NkU2Ci06MTA2NDgwMDAwMDVCRkY5NDJCMjJFMzE4RDk0RDBCNUIxNDlCODQyQUVECi06MTA2NDkwMDAyMkU0OEI4NEIxQUEwQTVBMTQwQkFBMEM5QTg1MjkyMkU5Ci06MTA2NEEwMDBFNTA5NTkxNDk5ODYyRjIyQ0QwRjVGMTQ5Rjg3NUJGRjUyCi06MTA2NEIwMDA0NTVCRkYxNjIzNDYzQkMxQjAxREQ5NDAxQ0Q5OUUyQTFGCi06MTA2NEMwMDBEMTAyMkM0NjNBMEJBQTAyMEEwQTRGMkFENTAyNTgwNEQ2Ci06MTA2NEQwMDA5MjVCRkVCRjVCRkU5OEMwNTBDMEIwMTZEOTM2MTREOThGCi06MTA2NEUwMDAzRTE3RDlBRUMwQzBDNzNFOTMxMjJDMjYyREMwMzA2MEQ3Ci06MTA2NEYwMDAwMDQ0MDAwMDAwN0Y5RjBGQjE1NTA5MTkxNDY1OUZGNEY3Ci06MTA2NTAwMDBDMDUwMEFBOTAyN0ZBN0VGMThEOTJBREE1MDA4NTgwQTAyCi06MTA2NTEwMDAyODgyMkMyQjBBMDAwQjgwMDAwMDUxMDREMkEwQzA5MUNECi06MTA2NTIwMDBDN0FGMDA5OTFBMEE5OTAzOTkxMkNFMzg2NDIwNkJEMzI5Ci06MTA2NTMwMDAyMDJCMjAwNzI1MTYwMzJDMTIwMjJBNjI4MjdDQTg2M0Q2Ci06MTA2NTQwMDAxOEQ5MUMwMTExMDIwODU4MEEyODgyMkNEQTUwMEI4MDM1Ci06MTA2NTUwMDAwMEQyQTA2NDNGRDU4QTMxMEE4QTE0MDRBQTAxQzgyQTRECi06MTA2NTYwMDAyQjIyMDEwQjhCMTQwNEJCMDE3QkE5NDVEREEwN0E3Qjk4Ci06MTA2NTcwMDAwODFERDkxMjJERDIwMDBEQUQwQ0RCMzAxOUQ5MEQxQTIyCi06MTA2NTgwMDBEOTUyODgxMzBBREEyOERDODAxREQ5OTAwOTg4MEEyODk0Ci06MTA2NTkwMDA4MjNDMERBQTA4MEI4MDAwNjUyRjkzRDMyMEMwQjA2MzA2Ci06MTA2NUEwMDBGRjk0MDAwMDdGQUYzNEIxNTUwMDUwMDQwQTA5MTk2MzBECi06MTA2NUIwMDBGRjQyREFCMDdCN0IwODFBRDkwMTJBQTIwMDBBQkEwQzgyCi06MTA2NUMwMDAxQkQ5NDI4QzMxMEJBQjI4MEM4QTE0MUNEOTgwQUNCQjc0Ci06MTA2NUQwMDAxQ0Q5ODAwNEFBMDEyQkM2ODE2M0ZGOEY2NDVGNjBDMDUxCi06MTA2NUUwMDA1MEMwQjBDN0NFOUMxMjYzRkY1NTAwMDA2QzEwMDQyNzRBCi06MTA2NUYwMDAyMjFFQzA4MDA4RTQzMTFCRDhFRjAwMDIwMDJBQjI4MkJDCi06MTA2NjAwMDAxOUQ4RUYwMDMxMDRDMDYxMDA2NjFBMjk5MTAyMEE2QUE0Ci06MTA2NjEwMDAwMjJBQjY4MjA5RTQzMTE1RDk0QTBDMzgxMUE4NTMyODQ4Ci06MTA2NjIwMDAzMjgyMjQzMjg0MkE4Q0ZDNzg0MTEwMjkyMTAyMkEzNkI1Ci06MTA2NjMwMDA4Mjk3QTAwOTY5MDIyOTI1MDJEMTBGMDAyQjIxMDIyQzgzCi06MTA2NjQwMDAzMjg1MEI2QjAyMkNDQ0ZDMkMzNjgyOTdDMDJCMjUwMjlBCi06MTA2NjUwMDBEMTBGMDAwMDZDMTAwNEMwRTcxREQ4RDIxQ0Q4RDQwRDk3Ci06MTA2NjYwMDA0OTExRDcyMDhCMjI4QTIwMEI0QjBCRDJBMDA3QTgwQ0Y0Ci06MTA2NjcwMDA5QjcyMjg4Q0Y0QzgzNDZGOEUwMjYwMDBBMzFGRDhDQUE2Ci06MTA2NjgwMDBBMjk4QUY3Qjc4QjMzNEM5M0RDMDgxQzBGMDAyOEYzODg3Ci06MTA2NjkwMDAwRjBGNDJDOUZBMkNENjdFRDUyMDZENEEwNTAwMzA4OEVFCi06MTA2NkEwMDAwMDUwOEM4ODcwMDg5ODA4NzhCMTZERDJBMDk4NzBEMThECi06MTA2NkIwMDAwRkMwRjAwMzhGMzg3RkUwREU2M0ZGRDgwMjdCMENBRkEyCi06MTA2NkMwMDBCQjBCOTkwQzY0MzA0N0Q4MzBDMEYxQzA1MDAyRjUzODhDCi06MTA2NkQwMDAwNTA1NDI2NDUwNzkyQ0Q2N0UwQjM2MTIyRjZDMTAwRkI0Ci06MTA2NkUwMDA0RjM2NkRGQTA1MDA4MDg4MDAyMDhDMDY0NDBDQzA4MTZFCi06MTA2NkYwMDBDMDUwMDNCMjA4MjM3QzBDMDM4NTM4MDUwNTQyNjQ1MDYyCi06MTA2NzAwMDA1QTJDRDY3RUQzMEY2RDRBMDUwMDIwODgwMDMwOENEMkRCCi06MTA2NzEwMDBBMEE3OThCQzg4OTg3MEQxMEZEMkEwQkM3OTk5NzBEMUVECi06MTA2NzIwMDAwRkQyMzAyQkFEMDhDMEYxQzA1MDBCRjUzODA1MDU0MjMzCi06MTA2NzMwMDBDQjU0MkNENjdFMDgzRjE0MjYwQTEwMEY2NjBDMDY0NjUyCi06MTA2NzQwMDAzNjZENkEwNTAwMjA4ODAwQjA4QzgyNzA2M0ZGMkQwMEQyCi06MTA2NzUwMDBDMDUwMDNGNTM4NzVFMDgwNjNGRjdBMDBDMDYwMDI4NkEwCi06MTA2NzYwMDAzODc2RTA5RjYzRkY5OTAwQzA1MDAzRjUzODc1RTBDNEE4Ci06MTA2NzcwMDA2M0ZGQkUwMDZDMTAwNEQ2MjA2ODUyMEY2OTUzMjREQTAwCi06MTA2NzgwMDAyMERCMzBEQzQwNTgwMEYzRDJBMEQxMEZEQTIwREIzMDIwCi06MTA2NzkwMDBEQzQwNTgwMEYwOUEyNDI0MjQwRUMwMjEyMjY0MEZDMDRCCi06MTA2N0EwMDAyMEQxMEYwMEI4M0JCMDRDMkEyQzc0ODkyNDJEMjAwRTI4Ci06MTA2N0IwMDAyRTIwMEZBNEREQjFFRTJFMjQwRkIwREQyRDI0MEUyOEU3Ci06MTA2N0MwMDA5MDA3MkQ5MDAzQTQ4OEIwODhCMUREMkQ5NDAzMjg5NDAwCi06MTA2N0QwMDAwNzVCRkZBMDY5NTExREMwRTA4MjI0MkE2MDBGMThEODEyCi06MTA2N0UwMDBGRTJBMjQwMzI5NjAwRThGMjAyOTI0MDcwOEZGMDI5RjE4Ci06MTA2N0YwMDAyMDlFNjREMTBGQzAyMEQxMEYwMDAwMDA2QzEwMDQ5NEMzCi06MTA2ODAwMDAyMzE5RDhGNkMwQjMwODNBMTEwQkFBMDI5OTIwMTlEODU3Ci06MTA2ODEwMDA2OTlBMjExNkQ4NjdDMDUwMjg5MjlEMjU2NEEyMjg4Q0I5Ci06MTA2ODIwMDAxODI4OTY5REQxMEYwMDAwNkMxMDA0MjgyMDY2QzAzOEVGCi06MTA2ODMwMDAyMzI0MDZCNzg4MjgyNDY2RDEwRjAwMDA2QzEwMDYwM0I1Ci06MTA2ODQwMDA1QTBDMEQzNjExMEQ1QzExRDgyMDhCMjI4MjIxMENCQjA1Ci06MTA2ODUwMDAwQzA2NTUwRjlCODIwMjMyMEI5MjgxMTNEODUzRDkyMDFDCi06MTA2ODYwMDBBMzhGNjQ1MDU2MUNEODRGQzBENzFCRDg1MEEyNTZDMDE3Ci06MTA2ODcwMDBFMUMwOTAwNEU5MzgwOTA5NDI3NkYzNEYwNDQzMDJDQUEzCi06MTA2ODgwMDA5MTJCQzY3RUQzMEY2REFBMDUwMDIwODgwMDMwOEM4OTFECi06MTA2ODkwMDA4MUE5NTkwOUZBMEM2NEEwN0Q5OTgxOEE4MjY0QTAwRkFDCi06MTA2OEEwMDBEMjkwRDEwRkMwNjAwMkU2Mzg3NkQwRDc2M0ZGRDEwMDE2Ci06MTA2OEIwMDBDMDIwQkM4OTk5ODE5OTgwOTI4MkQxMEY3RjIzMDQyOUJECi06MTA2OEMwMDAyREY4OTk4MTY1QkZEODYzRkZFNTAwMDAwMjhGMENBMzA2Ci06MTA2OEQwMDBGRjBGMzMxMjkzMTAwM0FBMENEMzQwNjQ5MDQwMkJDNkQxCi06MTA2OEUwMDA3RTg2MTBEMzBGNkQ2QTA1MDAyMDg4MDAzMDhDQkM4MjM0Ci06MTA2OEYwMDBDMDkwQTRGM0MwNDEwMzQ5MzgwOTA5NDJDQTlCMkJDNjgyCi06MTA2OTAwMDA3RTZEQUEwNTAwMjA4ODAwMzA4QzBGNTkwQ0E5ODlCQzI3Ci06MTA2OTEwMDA5OTk5ODE2M0ZGODQwMEJDODk5OTgxNjNGRjdDMDBDMEUxCi06MTA2OTIwMDA2MDAyRTYzODc2RDBCOTYzRkZCMzAwQzA3MDAyNDczODIyCi06MTA2OTMwMDA3N0QwQ0Q2M0ZGQzcwMDAwNkMxMDA0MTREODJBQzE1MjcxCi06MTA2OTQwMDBBNDI0Q0EzMTI4MjIxRDczODExQzI5MjEwMjY1OTAxNkI2Ci06MTA2OTUwMDAyQTMwMDA3NUE5MTIwMjJBMDIwMzNCMDIyQzMwMDdDMDFDCi06MTA2OTYwMDBEMjU4MDFEMDY1M0ZEQ0QxMEYyQjMwMDcwM0JCMEIwQjk2Ci06MTA2OTcwMDBCQTAyNzRCMzAyMkFCREY4RDNBMDYzRkZDNDAwMDAwMEJBCi06MTA2OTgwMDA2QzEwMDQyOTIwMDZDMDcwNkU5NzQxMjkyMTAyQzA4RjI3Ci06MTA2OTkwMDAyQTIwMTRDMEI2MkIyNDA2MDZBQTAyMkEyNDE0Nzk4MEMxCi06MTA2OUEwMDAwMjI3MjUwMjJBMjIxRTJDMjIxRDdBQzEwRUM4QUJEQTJDCi06MTA2OUIwMDAyMERCMzAyQzBBMDAwMzNEMDI1QkY4MEQ2NDUwNzQyRDdGCi06MTA2OUMwMDAyMTAyMEQwRDRDQzlEM0MwMjBEMTBGMDAwMDJFOUNGQjFECi06MTA2OUQwMDA2NEUwODIyRjIxMDIwRjBGNEM2NUYwOTExQUQ3RjYxQzRDCi06MTA2OUUwMDBEN0Y0MjlBMjlFQzA4QTc5OEI1RDJCQzIyNjY4QjAwNDk5Ci06MTA2OUYwMDA4RDIwN0JEOTUyMjlBMjlEQzBGMzY0OTA0QTk3OTAxREE3Ci06MTA2QTAwMDBEODA2MkUyMTA0OUQ5NjA4RUUxMTBGRUUwMjlFOTc5RTQ5Ci06MTA2QTEwMDA5MTE4RDgwMkMwRTUyN0M0QTIyRTI0MDYyQkEyOUQyRkQwCi06MTA2QTIwMDAyMTAyMkJCQzMwMDhGRjAyMkYyNTAyMkJBNjlEQzAyMDdGCi06MTA2QTMwMDBEMTBGMDAwMDJGMzAwMDY4RjkzOURBMjBEQjMwMDQ0QzI4Ci06MTA2QTQwMDAwMjU4MDA0NDYzRkY3NzAwMDIyQTAyMkIwQTA2NTgwMDBFCi06MTA2QTUwMDBEMzIyMEEwMEQxMEY2NTUwMTAyODMwMDA2ODg5MjQwMjIzCi06MTA2QTYwMDAyQTAyMDMzQjAyREM0MDU4MDAzQkMwMjBEMTBGRDI3MDA5Ci06MTA2QTcwMDBEMTBGMDAwMDJBMkM3NDAzM0IwMjA0NEMwMjVCRkVGNThDCi06MTA2QTgwMDA2M0ZGM0IwMERCMzBEQzQwMkEyQzc0NUJGRUYyQzAyMDRECi06MTA2QTkwMDBEMTBGMDAwMDZDMTAwNEM4M0Y4OTI2ODgyOUEzOTk5OTVBCi06MTA2QUEwMDAyNjA5ODgwQzA4MDg0ODI4MjUyNUNDNTJDMDIwRDEwRjdCCi06MTA2QUIwMDBEQjQwMkEyQzc0NUJGOTM2RDJBMEQxMEY2QzEwMDREOEJECi06MTA2QUMwMDAyMEQ3MzA4MjIyMEQ0NTExMDUyMjBDOTI4MjY0MjA3NDU5Ci06MTA2QUQwMDAwNzQyMEIxM0Q3QjVENDIwQTM4MzczMjMwMjI0MkRGOEM4Ci06MTA2QUUwMDA4NTgwNzQ1MTRDQkM4MkMwOTA2RDA4MTYwMDQwODgwMEFGCi06MTA2QUYwMDA3MDhDNzczOTAzRDcyMEMwOTE4NjgwNzQzOTAxRDQyMEY3Ci06MTA2QjAwMDA3NDYxMDI2M0ZGRTJDQTk4QzA5N0MwNDExQkQ4MzVDMEM4Ci06MTA2QjEwMDBBMDBCOEIwQzBCNEEzODBBMEE0MkM5QUExREQ3QTIxQzJCCi06MTA2QjIwMDBEN0EzMkNENjdFQzE0MEQzMEY2RDRBMDUwMDIwODgwMDI0Ci06MTA2QjMwMDAzMDhDOTc4MEQyNzBEMTBGQkM4RkMwRTAwRjRFMzg3RTYyCi06MTA2QjQwMDA5MEUyNjNGRkQ2QkM4MjkyODE5MjgwQzAyMDkyODJEMTczCi06MTA2QjUwMDAwRjAwMDAwMDZDMTAwNkMwRDcxQ0Q3OTIxQkQ3OTQwREY1Ci06MTA2QjYwMDA0OTExRDcyMDJFMjIxRjI4MjIxRDBFNEUwQkQyODAwNzNFCi06MTA2QjcwMDA4QTBDMkU3NjFGMkFBQzgwQzgzNDZGQUUwMjYwMDBDQjIwCi06MTA2QjgwMDAyRjBBODAxQUQ3OThBMjlFQUE3QTdFQTMzRkM5M0ZDMDM3Ci06MTA2QjkwMDBFMUMwNTAwMkU1MzgwNTA1NDJDQTU1MkJDNjdFREIyMDEwCi06MTA2QkEwMDBEMzBGNkQ0QTA1MDAzMDg4MDBCMDhDMkU3MjFEQUU5RTRBCi06MTA2QkIwMDAwRUE1MEM2NDUwODZEMjgwMkU3NjFEQzA5MTI5ODQwM0M4Ci06MTA2QkMwMDBEMTBGQzA1MDAzRTUzODc1RDBEMzYzRkZDRDE1RDc4NUZECi06MTA2QkQwMDAwMjdFMENBNUVFNjQzMDUxQzBBMTI1MEEwMDAyQTUzODQyCi06MTA2QkUwMDAwMzNBMDIwNTA1NDI2NDUwOTIyQkM2N0UwRTM1MTI5NTdCCi06MTA2QkYwMDAxMDI1NUMxMDA1NDUzNkQzMEY2RDVBMDUwMEEwODgwMDlFCi06MTA2QzAwMDAyMDhDQzBBMUEzRTJDMDUwMjNGQTgwMDM3MzBDMDNBNTFCCi06MTA2QzEwMDAzOEFGNzMwNTA1NDI2NDUwNzIyQkM2N0U4NTEwMDU0NTVBCi06MTA2QzIwMDAwQzZENUEwNTAwMjA4ODAwMzA4Q0QyODBDMEExMEU5QkNDCi06MTA2QzMwMDAwQ0FCN0JBRkJCMkI3NjFEMkE4NDAzRDEwRkQyODBDMDU3Ci06MTA2QzQwMDBDMUFGN0QyRDc2MUQyQzg0MDNEMTBGMDBEMjMwMkU4RDQ3Ci06MTA2QzUwMDAwOEMwRjFDMDUwMEVGNTM4MDUwNTQyQ0I1OTJCQzY3RTUxCi06MTA2QzYwMDAwQTNGMTRDMTYwMEY2NjBDMDY0NjM2RDMwRjZENkEwNUU1Ci06MTA2QzcwMDAwMDIwODgwMEUwOEMyMjcyMUQ2M0ZGMDNDMDYxQzA1MEI5Ci06MTA2QzgwMDAwMzY1Mzg3NUQ4MDI2M0ZGNjI2M0ZGNUNDMDUwMDJBNURDCi06MTA2QzkwMDAzODc1RDA4NzYzRkY4MTAwQzA2MDAzRjYzODc2RDBCRkI3Ci06MTA2Q0EwMDA2M0ZGQjkwMDZDMTAwNDJBMjAxNTI5MjAxNjE0RDc0MzVECi06MTA2Q0IwMDAwQTk5MENDQjlEMkUyMDBCMDRFRDA5MkJEMTFDOEYyODlCCi06MTA2Q0MwMDAwOUJDMzZBQ0FBMENCQjBDMkJENTFDMEEwQTQ3MkEyNERCCi06MTA2Q0QwMDAxNUNBQUY4QjQzODk0MkIwQTgwMDkxMDQwMDg4MUFBODU2Ci06MTA2Q0UwMDBGRjBGQkIwMjlCMjc4RjI2MEZCODBDNzgzQjFBQzAyMEUyCi06MTA2Q0YwMDBEMTBGMDAwMDI5MjEwMkMwQTIwQTk5MDIyOTI1MDJDMDUxCi06MTA2RDAwMDAyMUQxMEYwMDhCMjc2M0ZGREMyQkQxMUMwQ0FBMEMwQUFFCi06MTA2RDEwMDAwQTQ3MkEyNDE1QUNCQjJCRDUxQ0M5QUU4QjQzOEMyODQzCi06MTA2RDIwMDA4RjQyQjBBRDAwRjEwNDAwREQxQUFEQ0MwQ0JCMDI5QjZDCi06MTA2RDMwMDAyN0RBMjBCN0VCNTgwMDE5QzAyMUQxMEY5RjI3NjNGRjM2Ci06MTA2RDQwMDBFRjAwMDAwMDZDMTAwNDI4MjAzQzY0MzA0NzA1MzA2MEUwCi06MTA2RDUwMDAwMDA3M0UwMTA1M0VCMTU2MDc2NTM5MDU0OTI4Qzc3RjQyCi06MTA2RDYwMDBBOTMzMDMwNjQxMDc2NjAzQjE2NjA2MDY0MUE2MzM3RUQyCi06MTA2RDcwMDA4NzFFMjIyMTI1MjkxQUZDNzMyQjE1MDIzODBDMDk4MTQ0Ci06MTA2RDgwMDA2MDAwMDYzRTAxMDIzRUIxMjQwNjQyMzkwMzIyMEFEMUM4Ci06MTA2RDkwMDAwRkQyMzBEMTBGQzA1MTYzRkZDMDAwMDA2QzEwMDQyNzI4Ci06MTA2REEwMDAyMjFFQzA4MDA4RTQzMTFERDcwMzAwMDIwMDJDRDI4MkNECi06MTA2REIwMDAxQkQ3MDMwMDMxMDRDMDYxMDA2NjFBMkJCMTAyMEM2Q0IyCi06MTA2REMwMDAwMjJDRDY4MjBCRTQzMTE5RDc4NzBDM0ExMUFBOTMyOEVBCi06MTA2REQwMDAzMjgyOTc4MDI1MzI4MjI0MzI4NEI0NTUyNTM2ODI3NURBCi06MTA2REUwMDA0MTBBMjkyMTAyMDk2OTAyMjkyNTAyRDEwRjJBMjEwMjFCCi06MTA2REYwMDAyQjMyODMwQTZBMDIyQjM2ODIyQTI1MDJEMTBGMDAwMDI5Ci06MTA2RTAwMDA2QzEwMDQxOEQ2RUMwQzI3MTEwODc3MDgyNjcyODYyNTFBCi06MTA2RTEwMDAzQzA0NzY1QjEzMTVENkU4MDUyMjBBMjIyMkEzNjgyMERCCi06MTA2RTIwMDAwMjc0MjkwNDIyNzI4NUQxMEZDMDIwRDEwRjAwMDAwMDA2Ci06MTA2RTMwMDA2QzEwMDQxOUQ2RUIyNzIyMUVDMDgwMDk3NzAyMDhFNEUzCi06MTA2RTQwMDAzMTFERDZEQzAwMDIwMDJDRDI4MjFCRDZEQzAwMzEwNEJFCi06MTA2RTUwMDBDMDYxMDA2NjFBMkJCMTAyMEM2QzAyMkNENjgyMEJFNEM2Ci06MTA2RTYwMDAzMTE5RDc2MDBDM0ExMUFBOTMyODMyODI5NzgwMjUzMkMzCi06MTA2RTcwMDA4MjI0MzI4NEI0NTUyNTM2ODI3NTQxMEIyQTIxMDIwQUI4Ci06MTA2RTgwMDA2QTAyMkEyNTAyRDEwRjAwMkIyMTAyMkMzMjgzMEI2QkMwCi06MTA2RTkwMDAwMjJDMzY4MjJCMjUwMkQxMEYwMDAwMDA2QzEwMDQxQjNGCi06MTA2RUEwMDBENkM1MEMyQTExQUJBQTI5QTI4NkI0Mzg3OThCMjIxQjJECi06MTA2RUIwMDBENkMyMTlENkU4MEIyQjBBMkJCMkEzMDkyOTA4NjhCMDUxCi06MTA2RUMwMDAwMjc0QjkwRDI5OUQwMTI5OTAxRjZFOTIwODIyQTI4NTk2Ci06MTA2RUQwMDBEMTBGQzAyMEQxMEZDODkyQzAyMEQxMEZEQTIwNUJFRUI1Ci06MTA2RUUwMDBCM0MwMjBEMTBGMDAwMDAwNkMxMDA0MTRENkIyMjg0MkE5Ci06MTA2RUYwMDA5RTE5RDZBRjZGODgwMjYwMDBCQTI5OTIyNjY4OTAwNzYzCi06MTA2RjAwMDA4QTIwMDlBQTBDNjVBMEFDMkE0MjlEQzBEQzY0QTBBNDFBCi06MTA2RjEwMDAyQjIwMEMxOUQ2QTkwQ0JDMTFBNENDMkVDMjg2MDlCOTAxCi06MTA2RjIwMDAwQTdFRDMwMjYwMDA5QTI5OTJBMzY4OTAwNzhEMjAwOUY3Ci06MTA2RjMwMDBERDBDNjVEMDhDMjVDMjg1NjQ1MDg2MkQyMTA0QzAzMEJGCi06MTA2RjQwMDA2RUQ4MEQyQzIwNjZCOENDMEMwQzQ3MkMyNDY2NjVDMDdFCi06MTA2RjUwMDA3QjFDRDcyNTE4RDZBRjFBRDZBNjE5RDZCNjFERDZBQjI4Ci06MTA2RjYwMDBDMEU0OUU1MTlENTA4RjIwOTM1NzkzNTU5OTUzOUE1NjQ0Ci06MTA2RjcwMDA5QTU0MDhGRjAyMUFENkMyOUY1Mjg4MjY5RjVBOUU1OUQ5Ci06MTA2RjgwMDA5RDU4OTM1RTlDNUQ5MzVDOUE1QjA4MDg0ODA1ODgxMTQ4Ci06MTA2RjkwMDA5ODVGQzBEODFGRDY5MDBDQjkxMUE0OTkyODkyODVBRkRDCi06MTA2RkEwMDBCRjIzRjRDRjI4OEM0MDI4OTY4NThFMjYyRDI0MDY5RTVDCi06MTA2RkIwMDAyOUMwMjBEMTBGQ0EzM0RBMjBDMEI2NUJGRjc4QzcyRkIzCi06MTA2RkMwMDBEMTBGQzkzQURBMjA1QkZGNzVDNzJGRDEwRkRCRDA1QjM5Ci06MTA2RkQwMDBGRTBCMjMyNDY2MkIyMDBDNjNGRjc1MDBDNzJGRDEwRkY3Ci06MTA2RkUwMDBDNzJGRDEwRjZDMTAwNEM4NUIyOTIwMDY2ODk0MUM2ODU5Ci06MTA2RkYwMDA5NjA3QzAyMEQxMEZDMDIwRDEwRkRBMjBEQjMwREM0MDUzCi06MTA3MDAwMDBERDUwMkUwQTAwNUJGRTVFRDJBMEQxMEYyRTIwMEMxOEEwCi06MTA3MDEwMDBENjY5MENFRjExQThGRjI5RjI4NkMwODg3OThCNzkxQUZFCi06MTA3MDIwMDBENjY2MEFFQTBBMkFBMkEzNjhBMDA0OEIyMDdBQjk2ODY1Ci06MTA3MDMwMDAyM0YyODU2NDMwNjIxQkQ2NzAyOTBBODAyQzIwNjgyOEQwCi06MTA3MDQwMDAyMDY3MkQyMTA0MEI4ODExMDRERDExMDhERDAyMERDQzExCi06MTA3MDUwMDAwMkMwODQyRDRBMTAwRENDMDIxREQ2Njg5ODMxOUQzMDk3Ci06MTA3MDYwMDA4QTJCOTkzNzlDMzQwQkFBMDJDMEMwOUMzNTlDMzY5QTU3Ci06MTA3MDcwMDAzMjJBMkM3NERCNDAyOEYyODVDMEQzMjg4QzIwMjhGNkQ1Ci06MTA3MDgwMDA4NTJDMjUwNDJEMjQwNjFGRDY1M0RENDBBRkVFMkNFNEJECi06MTA3MDkwMDBDRjVCRkRFQUQyQTBEMTBGMDBEQTIwREJFMDVCRkYzRjNGCi06MTA3MEEwMDBDMDIwRDEwRjZDMTAwQUQ2MzAyQTIwMDYyNDE2MDEyOEUxCi06MTA3MEIwMDBBQ0Y4NjU4Mzg2MkIyMTIyQzBGMjJBMjEyNENDNTcyQUUyCi06MTA3MEMwMDBBQzAxMEEwQTRGMkEyNTI0N0FCQjAyNjAwMzdGMkMyMUQ3Ci06MTA3MEQwMDAwMjBDMEM0QzY1QzMxOTJFMjIxNThEMzJDMDkxMEVEREE5Ci06MTA3MEUwMDAwQzY1RDM5MDg4MzgxRUQ2MzM2NDgzNkI4QzM3QzBCODU4Ci06MTA3MEYwMDBDMDk2MENCOTM5OTkxNEI0OUE5QTEyMEQ5OTExOTkxMzMyCi06MTA3MTAwMDA4RjY3MThENjJFQzlGQjI4ODAyMTdGODMxNjhCMTQyQ0ZECi06MTA3MTEwMDAyMjAwMkEyMDBDNUJGRjYxRDRBMDY0QTNCMzhGNjc2MEI4Ci06MTA3MTIwMDAwMDI4MDAwMDJCMjAwQzg5MTIwQ0JBMTFBRUFBMkNBMjQ4Ci06MTA3MTMwMDA4NjFERDYyMTdDOUIzRTBEQkQwQTJERDJBMzY4RDAwNEFFCi06MTA3MTQwMDA4ODIwN0Q4OTMwMjRBMjg1NjQ0MzY0MjcyMTJFMDdGNzk3Ci06MTA3MTUwMDAzNjA3RjkwQzZGOUQwMUQ3RjBEQTIwREI3MEMxQzQyRDIyCi06MTA3MTYwMDAyMTFGNUJGRUY4ODkyNjg4MjdEREEwMDk4ODBDN0E4QjExCi06MTA3MTcwMDAxNzlBMTA2MDAwMDZDMDQwNjNGRkNDMDAwMERBMjA4QjM1Ci06MTA3MTgwMDAxMDVCRkVDODhEMTA2NUEyNjdDMEUwOUU0ODhDNjQ5Q0IxCi06MTA3MTkwMDA0OThCNjU4QTY2OUI0QTlBNEI5NzQ1OEY2NzdGNzMwMjM2Ci06MTA3MUEwMDA2MDAxMjBDRDUyOUQxMERBMjBEQjMwMkMxMjAxNUJGRUY1Ci06MTA3MUIwMDA2OThEMTBDMDUxRDZBMDhGQTdDMEMwOEE2ODk3NEQ5QTFDCi06MTA3MUMwMDA0Qzg4Njk4OTZBOTg0RTk5NEY4RTZBOEE2OUFFN0U3NzMzCi06MTA3MUQwMDBFQjAxQjFBQTlFNkE5QTY5OEI2MEMwQTAwQjhFMTQ3N0VFCi06MTA3MUUwMDBCNzAxQzBBMUMwOTFDMDg0OTMxNTlEMTc5NTE2QzBEMDVBCi06MTA3MUYwMDAyNTIwM0NDMDMwMDg1ODAxMDg5MzM4QzA4MjA4MzMxMDVECi06MTA3MjAwMDAwODVCMDEwNTM1NDAwQjlEMzgwN0REMTAwQkFCMTAwRUY4Ci06MTA3MjEwMDAxOTQwMkEyMTFGMDc5OTEwMDNERDAyMERCQjAyMDU1M0Y3Ci06MTA3MjIwMDAxMDA5MzMwMjBBNTUxMTI5MjEyNTBBMkExNDA5MjkxNEEzCi06MTA3MjMwMDAwNDk5MTEwQTk5MDIwOTMzMDI4QTJCMjkyMTA0MEJBQTA1Ci06MTA3MjQwMDAwMjFCRDY2QTA4OTkxMTA5NTUwMjA4NTUwMjBCQUEwMkI5Ci06MTA3MjUwMDA5QTQwODkyMDg4MTQwODk5MTEwOTg4MDIxOUQ1RUExREQ1Ci06MTA3MjYwMDBENjY0MDk4ODAyOTg0MThCMkE5MzQ2OTU0NzgzMTUwRDY5Ci06MTA3MjcwMDBCQjAyODUxNjhEMTc5QjQ0OEE2NTg5NjZBQUNBQTk3Q0JDCi06MTA3MjgwMDA3N0NCMDFCMUFBMDdGQjBDOUM2NjlBNjU4ODI2OEUyOUVDCi06MTA3MjkwMDBBRDg3OTcyNjA3RUUwQzBFMEU0ODJFMjUyNTlCNjcyQkYzCi06MTA3MkEwMDAyMDBDODcxMzFFRDVDNDBDQjkxMUFFOTkyODkyODVBNzVFCi06MTA3MkIwMDA4ODI4OTY4NTE3RDVDOEMwOTBBN0JCMjlCNENGODcxODUyCi06MTA3MkMwMDA2M0ZFM0MwMDhDNjBDMEUwQzA5MUMwRjBDMDM0QzBCODI4Ci06MTA3MkQwMDAyQTIxMDQyODIwM0MwOEFBMTEwQjhCMDEwMzgzMDEwM0Y3Ci06MTA3MkUwMDA5RjM4MEI5QjM5QzAzMjA4RkYxMDAzODgwMTA4OUUzODc1Ci06MTA3MkYwMDAwQzg4MTQwN0VFMTAwRkVFMDIwMzg4MDEwODk4MzkwNTc4Ci06MTA3MzAwMDBCRjEwMjkyMTFGMEFCQjExMDc4ODEwMDhGRjAyMEJBQTEyCi06MTA3MzEwMDAwMjE4RDVCQzA5MjkxNDAzQUEwMjJCMjEyNTgzMjAwQkFFCi06MTA3MzIwMDAyQjE0MDRCQjExMDgzMzExMEZCQjAyMEI5OTAyOEIxNEYxCi06MTA3MzMwMDA4RjJBMEIzMzAyMDgzMzAyOEIyQjY0NzA4Njg4Njg5NzgwCi06MTA3MzQwMDA0RDk4NEM4NzY5ODg2QTkzNDE5OTQ2OTc0RTk4NEZDMEVCCi06MTA3MzUwMDA3MDc3QzcwMUMwNzE5QTQ3MThENjI2MEI3QzEwMENFQ0M5Ci06MTA3MzYwMDAwMjA4RjgwMjk4NDQxOEQ2MjMwQ0JDMDIwOENDMDI5Q0YwCi06MTA3MzcwMDA0MDJBMjAwQzI5NUNGRUMwODAxRkQ1OEUxQ0Q1OTYwQzlGCi06MTA3MzgwMDBBRTExMkIyMTI0QUNBQUFGRUVCMEJCOEYxMzJDRTI4NTNCCi06MTA3MzkwMDAyOEE0Q0ZBRkNDMkNFNjg1MkEyMjE1MkIyNTI0QjFBQTEwCi06MTA3M0EwMDAyQTI2MTU2NDkwREJDOUQyOEYyNjJFMjIwOTBERkYwOEVDCi06MTA3M0IwMDAyRjI2MDYwRkVFMEMwRTBFNDgyRTI1MjU2NTUwRTRDMDM0Ci06MTA3M0MwMDAyMEQxMEYwMEMwNzA5MzQxOUY0NDk5NDY5QTQ3NzdDN0Q4Ci06MTA3M0QwMDAwQTFDRDU3QTJDQzAyMkMwODEwQzg3MzgxQ0Q2MDcwQjFBCi06MTA3M0UwMDA3ODEwMDhFODAyMDhCODAyMEM4ODAyOTg0MDYzRkY4MDExCi06MTA3M0YwMDAwMENDNTdEQTIwREI2MDhDMTE1QkZERDYyOTIxMDI2OEI2Ci06MTA3NDAwMDA5ODA2Njg5NDAzQzAyMEQxMEYyQjIyMUVDMEEwMjkyMjA5Ci06MTA3NDEwMDAxRDJBMjUwMjdCOTkwMUMwQjA2NEJGRTgxM0Q1NjUyQ0Y1Ci06MTA3NDIwMDBCMDA3MjhCMDAwREEyMDAzODgwQTI4ODI0Q0MwRDEwQkFDCi06MTA3NDMwMDA4MDAwREJBMDY1QUZFNzYzRkZDQTAwMDA2OEE3NzlEQUM4Ci06MTA3NDQwMDAyMERCMzBEQzQwREQ1MDVCRkVFN0QyQTBEMTBGQzE2RDA4Ci06MTA3NDUwMDBDMTlEMjkyNTJDNjAwMDA0MjkyNTJDRDY5MDI2MjQ2NzVGCi06MTA3NDYwMDAyRjI0NjhEQTIwREIzMDhDMTFERDUwMkUwQTgwNUJGRDgyCi06MTA3NDcwMDA0NEQyQTBEMTBGQzE2OEMxQTgyQTI1MkM2M0ZGREQwMDJBCi06MTA3NDgwMDAwMDAwQzhERjhDMjY4QjI5QURDQzlDMjYwQ0JCMEMwQkQ2Ci06MTA3NDkwMDAwQjQ4MkIyNTI1MkEyQzc0REI2MDJDMTIwMTVCRkQ4NzAxCi06MTA3NEEwMDBEMkEwRDEwRjJBMkM3NDhCMTE1QkY2QjlEMkEwRDEwRkM4Ci06MTA3NEIwMDBEQTIwNUJGRTNBNjNGRjM4MDBEQTIwQzBCMTVCRkU4QTU3Ci06MTA3NEMwMDA2NEFCRjE2NTVGMzUyRDIxMjRCMUREMkQyNTI0NjNGRkVCCi06MTA3NEQwMDAxRkRBMjAyQjIwMEM1QkZFNTY2M0ZGMTQxMkQ1Qzg4MkU2Ci06MTA3NEUwMDAyMDAyODI1N0M4MjE2M0ZGRkMxMkQ1QzQwM0U4MzAwNDkwCi06MTA3NEYwMDBFRTMwMDVCMTMwOTMyMDk0MjE5NTIyNjNGRkZDMDAwMDBCCi06MTA3NTAwMDAxMEQ1QzA5MTAwOTIwMTkzMDI5NDAzMTFENTk3ODIxMDc3Ci06MTA3NTEwMDAwMUVBMzBBMjExMDFGMDMxQzA0MDA0RTQxNjAwMDIwMDdCCi06MTA3NTIwMDAxMUQ1Qjk4MjEwMjM0QTAwMDMyMjAyOTIxMDExRDU4MjhDCi06MTA3NTMwMDBDMDIxOTIxMDA0RTQzMTg0MDM4MzAyODIwMTgxMDAwMDlGCi06MTA3NTQwMDBEMjMwMDEyMzAwMDAwMDAwMTBENUIwOTEwMDkyMDE5M0M5Ci06MTA3NTUwMDAwMjk0MDMxMUQ1ODY4MjEwMDFFQTMwQTIxMTAxRjEzMUEzCi06MTA3NTYwMDBDMDQwMDRFNDE2MDAwMjAwMTFENUE3ODIxMDEzRDUyQkU5Ci06MTA3NTcwMDAwMzIyMDI5MjEwMDRFNDMxODQwMzgzMDI4MjAxODEwMDE5Ci06MTA3NTgwMDAwMEQzMzAwMTMzMDAwMDAwMTBENUExOTEwMDgxMDE2NUM2Ci06MTA3NTkwMDAxMDQ5ODEwMjY1MTA0NDgxMDNDRjFGOTIwMTkzMDI5NDI4Ci06MTA3NUEwMDAwMzExRDU3NDgyMTAwMUVBMzBBMjExMDFGMjMxQzA0MEZBCi06MTA3NUIwMDAwNEU0MTYwMDAyMDAxMUQ1OTM4MjEwMTNENTEzMDMyMkEwCi06MTA3NUMwMDAwMjkyMTAwNEU0MzE4NDAzODMwMjgyMDFDMDEwOTEwMzBCCi06MTA3NUQwMDA5MTAyOTEwMTgxMDAwMEQ0MzAwMTQzMDAxMkQ1NDJDMEQ0Ci06MTA3NUUwMDAzMDI4Mzc0MDI4Mzc0NDI4Mzc0ODI4Mzc0QzIzM0QwMTc2Ci06MTA3NUYwMDA3MjMzRUQwMzAyMDA2M0ZGRkMwMDAwMDAxMEQ1ODU5MTlCCi06MTA3NjAwMDAwMDkyMDE5MzAyOTQwMzExRDU4MzgyMTA5MjEwMTFENTM4Ci06MTA3NjEwMDAzNDgzMTAwMzIyMDI5MjEwMTFENTgwMTJENTQ2OTIxMEE1Ci06MTA3NjIwMDBDMDQwMDRFNDE2MDAwMjAwMTFENTc3ODIxMDEzRDUyRDU2Ci06MTA3NjMwMDAwMzIyMDI5MjEwMDRFNDMxODQwMzgzMDI4MjAxODEwMDU4Ci06MTA3NjQwMDAwMEQ1MzAwMTUzMDAwMDAwNkMxMDAyNkUzMjJGRDYyMDlFCi06MTA3NjUwMDAwNTZGMDQwNDNGMDQ3NDVCMkEwNTQ0MEMwMDQxMDQwMEQ4Ci06MTA3NjYwMDAzMzFBMjIwQTAwNkQ0OTBENzM2MzA0MDM2NjBDQjEyMkJDCi06MTA3NjcwMDAwRjIyMTEwMzEzMTQ3MzYzMDIyMjJDMDFEMTBGQzgzQjk0Ci06MTA3NjgwMDBEMTBGMDAwMDczNjMwQ0MwMjFEMTBGMDAwMDAwMDAwMDc3Ci06MTA3NjkwMDA0NDQ5NTYzMEMwMjBEMTBGNkMxMDAyMDA0MDA0NkI0QzlFCi06MTA3NkEwMDAwNzAzMjMxODAyMDIxOUQxMEYwMjAzMTlDMDIwRDEwRkJBCi06MTA3NkIwMDA2QzEwMDIwMkVBMzBEMTBGNkMxMDAyQ0MyNTAzRjAzMUJECi06MTA3NkMwMDA2MDAwMEYwMDZGMjIwNTAzRjEzMTYwMDAwNTZGMjMwNTk0Ci06MTA3NkQwMDAwM0YyMzEwMDAyMDBEMTBGNkMxMDAyQ0MyNTAyRjAzMDExCi06MTA3NkUwMDBEMTBGMDAwMDZGMjIwNDAyRjEzMEQxMEY2RjIzMDQwMjhBCi06MTA3NkYwMDBGMjMwRDEwRkMwMjBEMTBGNkMxMDAyMjIwQTIwMjMwQUQxCi06MTA3NzAwMDAwMDZEMjgwRTI4Mzc0MDI4Mzc0NDI4Mzc0ODI4Mzc0QzQyCi06MTA3NzEwMDAyMzNEMDEwMzAyMDBEMTBGNkMxMDAyMDJFNDMxRDEwRkFFCi06MTA3NzIwMDAwQTAwNDM2ODY1NkM3MzY5NkYyMDQ2NTcyMDQ0NDU0MkUwCi06MTA3NzMwMDA1NTQ3M0QzMDIwMjg0Mjc1Njk2Qzc0MjA0NjcyNjkyMDk3Ci06MTA3NzQwMDA0RDYxNzkyMDIwMzgyMDMxMzYzQTMwMzczQTMzMzYyMEFGCi06MTA3NzUwMDA1MDQ0NTQyMDMyMzAzMDM5MjA2RjZFMjA2MzZDNjU2Rjk2Ci06MTA3NzYwMDA3MDYxNzQ3MjYxMkU2MTczNjk2MzY0NjU3MzY5Njc2RUI5Ci06MTA3NzcwMDA2NTcyNzMyRTYzNkY2RDNBMkY2ODZGNkQ2NTJGNjY2NTQ2Ci06MTA3NzgwMDA2QzY5NzgyRjc3MkY2Njc3NUYzNzJFMzEyOTJDMjA1NjNBCi06MTA3NzkwMDA2NTcyNzM2OTZGNkUyMDU0MzM3ODc4MjAzMDMwMzcyRURECi06MTA3N0EwMDAzMDM0MkUzMDMwMjAyRDIwMzEzMDMwMzczMDM0MzAzMEVFCi06MDg3N0IwMDAxMDA3MDQwMDAwNzE0ODk0NjkKLTowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9xbG9naWMvc2Q3MjIwLmZ3LmloZXggYi9maXJtd2FyZS9xbG9naWMvc2Q3MjIwLmZ3LmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMzNjM2MwotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3Fsb2dpYy9zZDcyMjAuZncuaWhleApAQCAtMCwwICsxLDUxMyBAQAorOjEwMDAwMDAwMDIwQTI5MDIwQTg3RTVFNjMwRTYwNDdGMDE4MDAyN0ZDMgorOjEwMDAxMDAwMDBFNUUyMzBFNDA0N0UwMTgwMDI3RTAwRUU1RjYwMDhDRAorOjEwMDAyMDAwNTNGOUY3RTRGNUZFODAwODdGMEExMjE3MzExMjBFQTI4OQorOjEwMDAzMDAwNzVGQzA4RTRGNUZERTVFNzIwRTcwMzQzRjkwODIyMDAzNQorOjEwMDA0MDAwMDEyMDExMDAwNDIwMDA3NTUxMDFFNEY1NTJGNTUzRjUyQgorOjEwMDA1MDAwNTJGNTdFN0YwNDAyMDQzOEMyMzYwNTUyRTU1MkQzOTQyRAorOjEwMDA2MDAwMEM0MDA1NzU1MjAxRDIzNjkwMDcwQzc0MDdGMEEzNzQ0QQorOjEwMDA3MDAwRkZGMEU0RjUwQ0EzRjA5MDA3MTRGMEEzRjA3NTBCMjA0QgorOjEwMDA4MDAwRjUwOUU0RjUwOEU1MDhEMzk0MzA0MDAzMDIwNDA0MTJBRQorOjEwMDA5MDAwMDAwNjE1MEJFNTA4NzAwNDdGMDE4MDAyN0YwMEU1MDk2QQorOjEwMDBBMDAwNzAwNDdFMDE4MDAyN0UwMEVFNUY2MDA1MTIxODcxRDIzRQorOjEwMDBCMDAwMzU1M0UxRjdFNTA4NDUwOUZGRTUwQjI1RTAyNUUwMjQ4OAorOjEwMDBDMDAwODNGNTgyRTQzNDA3RjU4M0VGRjA4NUUyMjBFNTUyRDMyRgorOjEwMDBEMDAwOTQwMTQwMEQxMjE5RjNFMDU0QTA2NDQwNzAwMzAyMDMzMAorOjEwMDBFMDAwRkI1M0Y5Rjg5MDk0NzBFNEYwRTBGNTEwQUYwOTEyMUU5QworOjEwMDBGMDAwQjNBRjA4RUY0NDA4RjU4Mjc1ODM4MEUwRjUyOUVGNDQzQgorOjEwMDEwMDAwMDcxMjFBM0NGNTIyNTQ0MEQzOTQwMDQwMUVFNTI5NTRBRQorOjEwMDExMDAwRjA3MDIxMTIxOUYzRTA0NDgwRjBFNTIyNTQzMDY1MDhCNAorOjEwMDEyMDAwNzAwOTEyMTlGM0UwNTRCRkYwODAwOTEyMTlGMzc0NDBGQQorOjEwMDEzMDAwRjAwMjAzRkIxMjFBMTI3NTgzQUU3NEZGRjBBRjA4N0U1MworOjEwMDE0MDAwMDBFRjQ0MDdGNTgyRTBGREU1MEIyNUUwMjVFMDI0ODE4MgorOjEwMDE1MDAwRjU4MkU0MzQwN0Y1ODNFREYwOTAwNzBFRTAwNEYwRUY0QworOjEwMDE2MDAwNDQwN0Y1ODI3NTgzOThFMEY1MjgxMjFBMjM0MDBDMTI5MworOjEwMDE3MDAwMTlGM0UwNDQwMTEyMUEzMjAyMDNGNkFGMDg3RTAwNzQ0QworOjEwMDE4MDAwODBDREVGQ0Q4RDgyRjU4M0UwMzBFMDBBMTIxOUYzRTBFNworOjEwMDE5MDAwNDQyMEYwMDIwM0ZCMTIxOUYzRTA1NERGRjBFRTQ0QUUwQQorOjEwMDFBMDAwMTIxQTQzMzBFNDAzMDIwM0ZCNzQ5RTEyMUEwNTIwRTA4NgorOjEwMDFCMDAwMDMwMjAzRkI4RjgyOEU4M0UwMjBFMDAzMDIwM0ZCMTIyNQorOjEwMDFDMDAwMTlGM0UwNDQxMEYwRTVFMzIwRTcwOEU1MDgxMjFBM0FENQorOjEwMDFEMDAwNDQwNEYwQUYwODdFMDBFRjEyMUEzQTIwRTIzNDEyMTlGQworOjEwMDFFMDAwRjNFMDQ0MDhGMEU1RTQzMEU2MDQ3RDAxODAwMjdEMDBBMAorOjEwMDFGMDAwRTU3RUMzOTQwNDUwMDQ3QzAxODAwMjdDMDBFQzRENjBEOQorOjEwMDIwMDAwMDVDMjM1MDIwM0ZCRUU0NEQyMTIxQTQzNDQ0MEYwMDIwOQorOjEwMDIxMDAwMDNGQjEyMTlGM0UwNTRGN0YwMTIxQTEyNzU4M0QyRTBCRgorOjEwMDIyMDAwNTRCRkYwOTAwNzE0RTAwNEYwRTU3RTcwMDM3NTdFMDE4MgorOjEwMDIzMDAwQUYwODdFMDAxMjFBMjM0MDEyMTIxOUYzRTA0NDAxMTI5MworOjEwMDI0MDAwMTlGMkUwNTQwMjEyMUEzMjAyMDNGQjEyMTlGM0UwNDRDRAorOjEwMDI1MDAwMDIxMjE5RjJFMDU0RkVGMEMyMzVFRTQ0OEE4RjgyRjVBNAorOjEwMDI2MDAwODNFMEY1MTc1NDhGNDQ0MEYwNzQ5MEZDRTUwODQ0MDc5MAorOjEwMDI3MDAwRkRGNTgyOEM4M0UwNTQzRjkwMDcwMkYwRTA1NEMwOEQ3RQorOjEwMDI4MDAwODI4QzgzRjA3NDkyMTIxQTA1OTAwNzAzMTIxQTE5NzQ2MworOjEwMDI5MDAwODIxMjFBMDU5MDA3MDQxMjFBMTk3NEI0MTIxQTA1OTBFMgorOjEwMDJBMDAwMDcwNTEyMUExOTc0OTRGRUU1MDg0NDA2MTIxQTBBRjU5NQorOjEwMDJCMDAwMTAzMEUwMDREMjM3ODAwMkMyMzdFNTEwNTQ3RjhGODJCRAorOjEwMDJDMDAwOEU4M0YwMzA0NDMwMTIxQTAzNTQ4MEQzOTQwMDQwMDREQgorOjEwMDJEMDAwRDIzOTgwMDJDMjM5OEY4MjhFODNFMDQ0ODBGMDEyMUFCNAorOjEwMDJFMDAwMDM1NDQwRDM5NDAwNDAwNEQyM0E4MDAyQzIzQThGODIzMQorOjEwMDJGMDAwOEU4M0UwNDQ0MEYwNzQ5MkZFRTUwODQ0MDYxMjFBMEEyOAorOjEwMDMwMDAwMzBFNzA0RDIzODgwMDJDMjM4OEY4MjhFODNFMDU0N0Y3NworOjEwMDMxMDAwRjAxMjFFNDZFNEY1MEEyMDAzMDI4MDAzMzA0MzAzMTI2NAorOjEwMDMyMDAwMTk5NTIwMDIwMjgwMDMzMDQyMDMxMjBDOEYzMDMwMDZGMAorOjEwMDMzMDAwMTIxOTk1MTIwQzhGMTIwRDQ3MTIxOUYzRTA1NEZCRjBBRAorOjEwMDM0MDAwRTUwQUMzOTQwMTQwNDY0M0UxMDgxMjE5RjNFMDQ0MDQ2RQorOjEwMDM1MDAwRjBFNUU0MjBFNzJBMTIxQTEyNzU4M0QyRTA1NDA4RDM5QworOjEwMDM2MDAwOTQwMDQwMDQ3RjAxODAwMjdGMDBFNTBBQzM5NDAxNDBBRAorOjEwMDM3MDAwMDQ3RTAxODAwMjdFMDBFRjVFNjAwNTEyMURENzgwMTdBQgorOjEwMDM4MDAwMTIxQTEyNzU4M0QyRTA0NDA4RjAwMjAzRkIxMjFBMTIwQgorOjEwMDM5MDAwNzU4M0QyRTA1NEY3RjAxMjFFNDY3RjA4MTIxNzMxNzRBRAorOjEwMDNBMDAwOEVGRTEyMUExMjhFODNFMEY1MTA1NEZFRjBFNTEwNDQxMgorOjEwMDNCMDAwMDFGRkU1MDhGREVENDQwN0Y1ODJFRkYwRTUxMDU0RkU3RQorOjEwMDNDMDAwRkZFRDQ0MDdGNTgyRUYxMjFBMTE3NTgzODZFMDQ0MTBBMQorOjEwMDNEMDAwMTIxQTExRTA0NDEwRjAxMjE5RjNFMDU0RkQ0NDAxRkYyOQorOjEwMDNFMDAwMTIxOUYzRUYxMjFBMzIzMDMyMENFNTA4NDQwOEY1ODI4NAorOjEwMDNGMDAwNzU4MzgyNzQwNUYwQUYwQjEyMThENzc0MTAyNTA4RjVCOQorOjEwMDQwMDAwMDgwMjAwODUwNTA5RTUwOUQzOTQwNzUwMDMwMjAwODIxQworOjEwMDQxMDAwRTU3RUQzOTQwMDQwMDQ3RjAxODAwMjdGMDBFNTdFQzMyNworOjEwMDQyMDAwOTRGQTUwMDQ3RTAxODAwMjdFMDBFRTVGNjAwMjA1N0UzOQorOjEwMDQzMDAwMzAzNTBCNDNFMTAxN0YwOTEyMTczMTAyMDA1ODUzRTFCNworOjEwMDQ0MDAwRkUwMjAwNTg4RTZBOEY2QjhDNkM4RDZENzU2RTAxNzUxNworOjEwMDQ1MDAwNkYwMTc1NzAwMUU0RjU3M0Y1NzRGNTc1OTAwNzJGRjA3MQorOjEwMDQ2MDAwRjUzQ0Y1M0VGNTQ2RjU0N0Y1M0RGNTNGRjU2RkU1NkY5MworOjEwMDQ3MDAwNzAwRkU1NkI0NTZBMTIwNzJBNzU4MzgwNzQzQUYwODAyNQorOjEwMDQ4MDAwMDkxMjA3MkE3NTgzODA3NDFBRjBFNEY1NkVDMzc0M0Y2RAorOjEwMDQ5MDAwOTU2RUZGMTIwODY1NzU4MzgyRUZGMDEyMUE0RDEyMDhFRgorOjEwMDRBMDAwQzZFNTMzRjAxMjA4RkExMjA4QjE0MEUxRTU2RjcwMEJBRgorOjEwMDRCMDAwMTIwNzJBNzU4MzgwNzQzNkYwODAwOTEyMDcyQTc1ODMyMworOjEwMDRDMDAwODA3NDE2RjA3NTZFMDExMjA3MkE3NTgzQjRFNTZFRjAxQworOjEwMDREMDAwMTIxQTRENzQzRjI1NkVGNTgyRTQzNDAwRjU4M0U1MzMzRQorOjEwMDRFMDAwRjA3NEJGMjU2RUY1ODJFNDM0MDAxMjA4QjE0MEQ4RTQwMAorOjEwMDRGMDAwRjU3MEY1NDZGNTQ3RjU2RTEyMDhGQUY1ODNFMEZFMTI0MQorOjEwMDUwMDAwMDhDNkUwN0MwMDI0MDBGRkVDM0VGRUFEM0JEM0VGOUQyRgorOjEwMDUxMDAwRUU5QzUwMDQ3QjAxODAwMjdCMDBFNTcwNzAwNDdBMDE0MAorOjEwMDUyMDAwODAwMjdBMDBFQjVBNjAwNjg1NkU0Njc1NzAwMUQzRUY0MworOjEwMDUzMDAwOURFRTlDNTAwNDdGMDE4MDAyN0YwMEU1NzBCNDAxMDRCMQorOjEwMDU0MDAwN0UwMTgwMDI3RTAwRUY1RTYwMDM4NTZFNDcwNTZFRTVFQQorOjEwMDU1MDAwNkU2NDdGNzBBM0U1NDY2MDA1RTU0N0I0N0UwMzg1NDY3QgorOjEwMDU2MDAwNDdFNTZGNzAwODg1NDY3Njg1NDc3NzgwMEVDMzc0N0ZCMAorOjEwMDU3MDAwOTU0NkY1NzhDMzc0N0Y5NTQ3RjU3OUU1NkY3MDM3RTU1MworOjEwMDU4MDAwNDY2NTQ3NzAwQzc1NzMwMTc1NzQwMUY1M0NGNTNEODA0NworOjEwMDU5MDAwMzVFNEY1NEVDM0U1NDc5NTQ2RjUzQ0MzMTNGNTcxMjVBMworOjEwMDVBMDAwNDZGNTcyQzM5NDNGNDAwNUU0RjUzRDgwNDBDMzc0M0Y3NworOjEwMDVCMDAwOTU3MkY1M0Q4MDM3RTU0NjY1NDc3MDBGNzU3MzAxNzU5NworOjEwMDVDMDAwNzUwMUY1M0VGNTNGNzU0RTAxODAyMkU0RjU0RUMzRTUxOQorOjEwMDVEMDAwNDc5NTQ2RjUzRUMzMTNGNTcxMjU0NkY1NzJEMzk0M0YxMgorOjEwMDVFMDAwNTAwNUU0RjUzRjgwMDZFNTcyMjRDMUY1M0YwNTZGRTU0RgorOjEwMDVGMDAwNkZDMzk0MDI1MDAzMDIwNDZFRTU2RDQ1NkM3MDAyODA3NworOjEwMDYwMDAwMDRFNTc0NDU3NTkwMDcyRkYwN0YwMUU1M0U2MDA0RTUzMQorOjEwMDYxMDAwM0M3MDE0RTRGNTNDRjUzREY1M0VGNTNGMTIwOEQyNzAxMAorOjEwMDYyMDAwMDRGMDAyMDZBNDgwN0FFNTNDQzM5NTNFNDAwN0U1M0MxMQorOjEwMDYzMDAwOTUzRUZGODAwNkMzRTUzRTk1M0NGRkU1NzZEMzk1Nzk3MAorOjEwMDY0MDAwNDAwNTg1NzY3QTgwMDM4NTc5N0FFNTc3QzM5NTc4NTA3OQorOjEwMDY1MDAwMDU4NTc3N0I4MDAzODU3ODdCRTU3QkQzOTU3QTQwMzA3MQorOjEwMDY2MDAwRTU3Qjk1N0FGNTNDRjUzRUMzRTU3Qjk1N0E5MDA3MTlENQorOjEwMDY3MDAwRjBFNTNDQzMxM0Y1NzEyNTdBRjU3MkMzOTQzRjQwMDU0QworOjEwMDY4MDAwRTRGNTNEODAxRkMzNzQzRjk1NzJGNTNERjUzRjgwMTQzRQorOjEwMDY5MDAwRTRGNTNDRjUzRTkwMDcxOUYwMTIwOEQyNzAwM0YwODBBMworOjEwMDZBMDAwMDM3NDAxRjAxMjA4NjU3NTgzRDBFMDU0MEZGRUFEM0M3MQorOjEwMDZCMDAwNzAwMjdFMDdCRTBGMDI3RTgwRUVGQkVGRDM5Qjc0ODAzQworOjEwMDZDMDAwRjg5ODQwMUZFNEY1M0NGNTNFMTIwOEQyNzAwM0YwODAyNAorOjEwMDZEMDAwMTI3NDAxRjBFNTA4RkJFQjQ0MDdGNTgyNzU4M0QyRTA2NAorOjEwMDZFMDAwNDQxMEYwRTUwOEZCRUI0NDA5RjU4Mjc1ODM5RUVERjBCQworOjEwMDZGMDAwRUI0NDA3RjU4Mjc1ODNDQUVERjAxMjA4NjU3NTgzQ0M2QgorOjEwMDcwMDAwRUZGMDIyRTUwODQ0MDdGNTgyNzU4M0JDRTA1NEYwRjA3MQorOjEwMDcxMDAwRTUwODQ0MDdGNTgyNzU4M0JFRTA1NEYwRjBFNTA4NDQyRgorOjEwMDcyMDAwMDdGNTgyNzU4M0MwRTA1NEYwRjBFNTA4NDQwN0Y1ODJEMAorOjEwMDczMDAwMjJGMDkwMDcyOEUwRkVBM0UwRjU4MjhFODMyMjg1NDIxNgorOjEwMDc0MDAwNDI4NTQxNDE4NTQwNDA3NEMwMkZGNTgyNzQwMjNFRjVEOAorOjEwMDc1MDAwODNFNTQyRjA3NEUwMkZGNTgyNzQwMjNFRjU4MzIyRTVEMgorOjEwMDc2MDAwNDIyOUZERTQzM0ZDRTUzQ0MzOURFQzY0ODBGODc0ODBEMQorOjEwMDc3MDAwOTgyMkY1ODNFMDkwMDcyMjU0MUZGREUwRkFBM0UwRjVFQworOjEwMDc4MDAwODI4QTgzRURGMDIyOTAwNzIyRTBGQ0EzRTBGNTgyOENDMAorOjEwMDc5MDAwODMyMjkwMDcyNEZGRUQ0NDA3Q0ZGMEEzRUZGMDIyODVEQQorOjEwMDdBMDAwMzgzODg1MzkzOTg1M0EzQTc0QzAyRkY1ODI3NDAyM0U1QgorOjEwMDdCMDAwRjU4MzIyOTAwNzI2RkZFRDQ0MDdDRkYwQTNFRkYwMjI0OAorOjEwMDdDMDAwRjA3NEEwMkZGNTgyNzQwMjNFRjU4MzIyNzRDMDI1MTFDNworOjEwMDdEMDAwRjU4MkU0MzQwMUY1ODMyMjc0MDAyNTExRjU4MkU0MzRCNgorOjEwMDdFMDAwMDJGNTgzMjI3NDYwMjUxMUY1ODJFNDM0MDNGNTgzMjIzNworOjEwMDdGMDAwNzQ4MDI1MTFGNTgyRTQzNDAzRjU4MzIyNzRFMDI1MTExOQorOjEwMDgwMDAwRjU4MkU0MzQwM0Y1ODMyMjc0NDAyNTExRjU4MkU0MzQ0MworOjEwMDgxMDAwMDZGNTgzMjI3NDgwMkZGNTgyNzQwMjNFRjU4MzIyQUZBMQorOjEwMDgyMDAwMDg3RTAwRUY0NDA3RjU4MjIyRjU4M0U1ODI0NDA3RjU1MAorOjEwMDgzMDAwODJFNTQwRjAyMjc0NDAyNTExRjU4MkU0MzQwMkY1ODMwQworOjEwMDg0MDAwMjI3NEMwMjUxMUY1ODJFNDM0MDNGNTgzMjI3NDAwMjU1NworOjEwMDg1MDAwMTFGNTgyRTQzNDA2RjU4MzIyNzQyMDI1MTFGNTgyRTQzMworOjEwMDg2MDAwMzQwNkY1ODMyMkU1MDhGREVENDQwN0Y1ODIyMkU1NDFEMworOjEwMDg3MDAwRjBFNTY1NjQwMTQ1NjQyMjdFMDBGQjdBMDBGRDdDMDBBMgorOjEwMDg4MDAwMjI3NDIwMjUxMUY1ODJFNDM0MDIyMjc0QTAyNTExRjU4QQorOjEwMDg5MDAwODJFNDM0MDMyMjg1M0U0Mjg1M0Y0MThGNDAyMjg1M0NERAorOjEwMDhBMDAwNDI4NTNENDE4RjQwMjI3NTQ1M0Y5MDA3MjBFNEYwQTNFQgorOjEwMDhCMDAwMjJGNTgzRTUzMkYwMDU2RUU1NkVDMzk0NDAyMkYwRTU0MworOjEwMDhDMDAwMDg0NDA2RjU4MjIyNzQwMDI1NkVGNTgyRTQzNDAwRjVCMgorOjEwMDhEMDAwODMyMkU1NkQ0NTZDOTAwNzJGMjJFNEY5RTUzQ0QzOTUyMgorOjEwMDhFMDAwM0UyMjc0ODAyRUY1ODJFNDM0MDJGNTgzRTAyMjc0QTA2NworOjEwMDhGMDAwMkVGNTgyRTQzNDAyRjU4M0UwMjI3NDgwMjU2RUY1ODJDMQorOjEwMDkwMDAwRTQzNDAwMjIyNTQyRkRFNDMzRkMyMjg1NDI0Mjg1NDE0NQorOjEwMDkxMDAwNDE4NTQwNDAyMkVENEM2MDAzMDIwOUU1RUY0RTcwMzdGRgorOjEwMDkyMDAwOTAwNzI2MTIwNzg5RTBGRDEyMDdDQ0VERjA5MDA3MjgwQQorOjEwMDkzMDAwMTIwNzg5RTBGRDEyMDdEOEVERjAxMjA3ODZFMDU0MUY3OAorOjEwMDk0MDAwRkQxMjA4ODFGNTgzRURGMDkwMDcyNDEyMDc4OUUwNTQyOQorOjEwMDk1MDAwMUZGRDEyMDgzNUVERjBFRjY0MDQ0RTcwMzc5MDA3MjY0NgorOjEwMDk2MDAwMTIwNzg5RTBGRDEyMDdFNEVERjA5MDA3MjgxMjA3ODlDRAorOjEwMDk3MDAwRTBGRDEyMDdGMEVERjAxMjA3ODZFMDU0MUZGRDEyMDhBQgorOjEwMDk4MDAwOEJGNTgzRURGMDkwMDcyNDEyMDc4OUUwNTQxRkZEMTJDOAorOjEwMDk5MDAwMDg0MUVERjBFRjY0MDE0RTcwMDQ3RDAxODAwMjdEMDA5RQorOjEwMDlBMDAwRUY2NDAyNEU3MDA0N0YwMTgwMDI3RjAwRUY0RDYwNzg5QgorOjEwMDlCMDAwOTAwNzI2MTIwNzM1RTBGRjEyMDdGQ0VGMTIwNzMxRTAxRgorOjEwMDlDMDAwRkYxMjA4MDhFRkYwOTAwNzIyMTIwNzM1RTA1NDFGRkZDRQorOjEwMDlEMDAwMTIwODRERUZGMDkwMDcyNDEyMDczNUUwNTQxRkZGMTI2NAorOjEwMDlFMDAwMDg1OUVGRjAyMjEyMDdDQ0U0RjAxMjA3RDhFNEYwMTIxNQorOjEwMDlGMDAwMDg4MUY1ODNFNEYwMTIwODM1NzQxNEYwMTIwN0U0RTQ3QQorOjEwMEEwMDAwRjAxMjA3RjBFNEYwMTIwODhCRjU4M0U0RjAxMjA4NDFDRAorOjEwMEExMDAwNzQxNEYwMTIwN0ZDRTRGMDEyMDgwOEU0RjAxMjA4NEQxOAorOjEwMEEyMDAwRTRGMDEyMDg1OTc0MTRGMDIyNTNGOUY3NzVGQzEwRTQzRAorOjEwMEEzMDAwRjVGRDc1RkUzMEY1RkZFNUU3MjBFNzAzNDNGOTA4RTUyRQorOjEwMEE0MDAwRTYyMEU3MEI3OEZGRTRGNkQ4RkQ1M0U2RkU4MDA5Nzg1MAorOjEwMEE1MDAwMDhFNEY2RDhGRDUzRTZGRTc1ODE4MEU0RjVBOEQyQTgzNworOjEwMEE2MDAwQzJBOUQyQUZFNUUyMjBFNTA1MjBFNjAyODAwMzQzRTExQQorOjEwMEE3MDAwMDJFNUUyMjBFMDBFOTAwMDAwN0YwMDdFMDhFNEYwQTM5MworOjEwMEE4MDAwREZGQ0RFRkEwMjBBREI0M0ZBMDFDMEUwQzBGMEMwODNGQgorOjEwMEE5MDAwQzA4MkMwRDAxMjFDRTdEMEQwRDA4MkQwODNEMEYwRDA5QQorOjEwMEFBMDAwRTA1M0ZBRkUzMjAyMUI1NUU0OTNBM0Y4RTQ5M0EzRjY1NQorOjEwMEFCMDAwMDhERkY5ODAyOUU0OTNBM0Y4NTQwNzI0MENDOEMzMzM1MgorOjEwMEFDMDAwQzQ1NDBGNDQyMEM4ODM0MDA0RjQ1NjgwMDE0NkY2REYyNgorOjEwMEFEMDAwRTQ4MDBCMDEwMjA0MDgxMDIwNDA4MDkwMDAzRkU0N0U3NworOjEwMEFFMDAwMDE5MzYwQzFBM0ZGNTQzRjMwRTUwOTU0MUZGRUU0OTMxNgorOjEwMEFGMDAwQTM2MDAxMEVDRjU0QzAyNUUwNjBBRDQwQjg4MEZFOENFRAorOjEwMEIwMDAwNjQ4RDY1OEE2NjhCNjdFNEY1NjlFRjRFNzAwMzAyMUQ5QworOjEwMEIxMDAwNTVFNEY1NjhFNTY3NDU2NjcwMzIxMjA3MkE3NTgzOTBEQgorOjEwMEIyMDAwRTQxMjA3Mjk3NTgzQzJFNDEyMDcyOTc1ODNDNEU0MTIwRAorOjEwMEIzMDAwMDg3MDcwMjkxMjA3MkE3NTgzOTJFNDEyMDcyOTc1ODNCOQorOjEwMEI0MDAwQzZFNDEyMDcyOTc1ODNDOEU0RjA4MDExOTAwNzI2MTJDNQorOjEwMEI1MDAwMDczNUU0MTIwODcwNzAwNTEyMDczMkU0RjAxMjFENTVEMworOjEwMEI2MDAwMTIxRUJGRTU2NzQ1NjY3MDMzMTIwNzJBNzU4MzkwRTU0QworOjEwMEI3MDAwNDExMjA3Mjk3NTgzQzJFNTQxMTIwNzI5NzU4M0M0MTIwMgorOjEwMEI4MDAwMDg2RTcwMjkxMjA3MkE3NTgzOTJFNTQwMTIwNzI5NzVBRAorOjEwMEI5MDAwODNDNkU1NDAxMjA3Mjk3NTgzQzg4MDBFOTAwNzI2MTI4OAorOjEwMEJBMDAwMDczNTEyMDg2RTcwMDYxMjA3MzJFNTQwRjBBRjY5N0UxNQorOjEwMEJCMDAwMDBBRDY3QUM2NjEyMDQ0NDEyMDcyQTc1ODNDQUUwRDNGRAorOjEwMEJDMDAwOTQwMDUwMEMwNTY4RTU2OEMzOTQwNTUwMDMwMjBCMTRBQgorOjEwMEJEMDAwMjI4QzYwOEQ2MTEyMDhEQTc0MjA0MDBEMkZGNTgyNzQyQQorOjEwMEJFMDAwMDMzRUY1ODNFNTNFRjA4MDBCMkZGNTgyNzQwMzNFRjU1RQorOjEwMEJGMDAwODNFNTNDRjBFNTNDRDM5NTNFNDAzQ0U1NjE0NTYwNzBDMworOjEwMEMwMDAwMTBFOTEyMDkwNEU1M0UxMjA3Njg0MDNCMTIwODk1ODA3RQorOjEwMEMxMDAwMThFNTNFQzM5NTM4NDAxRDg1M0UzOEU1M0U2MDA1ODVBNAorOjEwMEMyMDAwM0YzOTgwMDM4NTM5Mzk4RjNBMTIwODE0RTUzRTEyMDc5RgorOjEwMEMzMDAwQzBFNTNGRjAyMjgwNDNFNTYxNDU2MDcwMTkxMjA3NUYwRgorOjEwMEM0MDAwNDAwNTEyMDg5RTgwMjcxMjA5MEIxMjA4MTRFNTQyMTI3MworOjEwMEM1MDAwMDdDMEU1NDFGMDIyRTUzQ0MzOTUzODQwMUQ4NTNDMzg4RQorOjEwMEM2MDAwRTUzQzYwMDU4NTNEMzk4MDAzODUzOTM5OEYzQTEyMDhBNgorOjEwMEM3MDAwMTRFNTNDMTIwN0MwRTUzREYwMjI4NTM4Mzg4NTM5Mzk0NgorOjEwMEM4MDAwODUzQTNBMTIwODE0RTUzODEyMDdDMEU1MzlGMDIyN0Y5OAorOjEwMEM5MDAwMDYxMjE3MzExMjFEMjMxMjBFMDQxMjBFMzNFMDQ0MEFGRAorOjEwMENBMDAwRjA3NDhFRkUxMjBFMDQxMjBFMEJFRkYwRTUyODMwRTUwNAorOjEwMENCMDAwMDNEMzgwMDFDMzQwMDU3NTE0MjA4MDAzNzUxNDA4MTIwNgorOjEwMENDMDAwMEUwNDc1ODM4QUU1MTRGMEI0RkYwNTc1MTI4MDgwMDY2MgorOjEwMENEMDAwRTUxNEMzMTNGNTEyRTRGNTE2RjU3RjEyMTkzNjEyMTM1NQorOjEwMENFMDAwQTNFNTBBQzM5NDAxNTAwOTA1MTZFNTE2QzM5NDE0NDAwMAorOjEwMENGMDAwRUFFNUU0MjBFNzI4MTIwRTA0NzU4M0QyRTA1NDA4RDMxNQorOjEwMEQwMDAwOTQwMDQwMDQ3RjAxODAwMjdGMDBFNTBBQzM5NDAxNDAwMworOjEwMEQxMDAwMDQ3RTAxODAwMjdFMDBFRjVFNjAwMzEyMUREN0U1N0YzNgorOjEwMEQyMDAwQzM5NDExNDAxNDEyMEUwNDc1ODNEMkUwNDQ4MEYwRTVBMAorOjEwMEQzMDAwRTQyMEU3MEYxMjFERDc4MDBBMTIwRTA0NzU4M0QyRTA1QgorOjEwMEQ0MDAwNTQ3RkYwMTIxRDIzMjI3NDhBODUwODgyRjU4M0U1MTdFQgorOjEwMEQ1MDAwRjAxMjBFM0FFNEYwOTAwNzAyRTAxMjBFMTc3NTgzOTAzRAorOjEwMEQ2MDAwRUZGMDc0OTJGRUU1MDg0NDA3RkZGNTgyOEU4M0UwNTRBRAorOjEwMEQ3MDAwQzBGRDkwMDcwM0UwNTQzRjREOEY4MjhFODNGMDkwMDdCMworOjEwMEQ4MDAwMDRFMDEyMEUxNzc1ODM4MkVGRjA5MDA3MDVFMEZGRUQ4NworOjEwMEQ5MDAwNDQwN0Y1ODI3NTgzQjRFRjEyMEUwMzc1ODM4MEUwNTQyNworOjEwMERBMDAwQkZGMDMwMzcwQTEyMEU5MTc1ODM5NEUwNDQ4MEYwMzAyMgorOjEwMERCMDAwMzgwQTEyMEU5MTc1ODM5MkUwNDQ4MEYwRTUyODMwRTQwMQorOjEwMERDMDAwMUEyMDM5MEExMjBFMDQ3NTgzODhFMDU0N0ZGMDIwM0EwNQorOjEwMEREMDAwMEExMjBFMDQ3NTgzODhFMDU0QkZGMDc0OENGRTEyMEU2NAorOjEwMERFMDAwMDQ4RTgzRTA1NDBGMTIwRTAzNzU4Mzg2RTA1NEJGRjAyNworOjEwMERGMDAwRTUwODQ0MDYxMjBERkQ3NTgzOEFFNEYwMjJGNTgyNzUzQworOjEwMEUwMDAwODM4MkU0RjBFNTA4NDQwN0Y1ODIyMjhFODNFMEY1MTA0MgorOjEwMEUxMDAwNTRGRUYwRTUxMDQ0MDFGRkU1MDhGREVENDQwN0Y1ODJCRQorOjEwMEUyMDAwMjJFNTE1QzQ1NDA3RkZFNTA4RkRFRDQ0MDhGNTgyNzU3OQorOjEwMEUzMDAwODM4MjIyNzU4MzgwRTA0NDQwRjBFNTA4NDQwOEY1ODIwRgorOjEwMEU0MDAwNzU4MzhBMjJFNTE2MjVFMDI1RTAyNEFGRjU4MkU0MzQ5NworOjEwMEU1MDAwMUFGNTgzRTQ5M0Y1MEQyMjQzRTExMDQzRTE4MDUzRTE1OQorOjEwMEU2MDAwRkQ4NUUxMTAyMkU1MTYyNUUwMjVFMDI0QjJGNTgyRTRCNworOjEwMEU3MDAwMzQxQUY1ODNFNDkzMjI4NTU1ODI4NTU0ODNFNTE1RjA3MQorOjEwMEU4MDAwMjJFNUUyNTQyMEQzOTQwMDIyRTVFMjU0NDBEMzk0MDBCQQorOjEwMEU5MDAwMjJFNTA4NDQwNkY1ODIyMkZERTUwOEZCRUI0NDA3RjU1MAorOjEwMEVBMDAwODIyMjUzRjlGNzc1RkUzMDIyRUY0RTcwMjYxMjA3Q0NERQorOjEwMEVCMDAwRTBGRDkwMDcyNjEyMDc3QjEyMDdEOEUwRkQ5MDA3Mjg3NworOjEwMEVDMDAwMTIwNzdCMTIwODgxMTIwNzcyMTIwODM1RTA5MDA3MjQ3RQorOjEwMEVEMDAwMTIwNzc4RUY2NDA0NEU3MDI5MTIwN0U0RTBGRDkwMDdEMgorOjEwMEVFMDAwMjYxMjA3N0IxMjA3RjBFMEZEOTAwNzI4MTIwNzdCMTJGRAorOjEwMEVGMDAwMDg4QjEyMDc3MjEyMDg0MUUwNTQxRkZEOTAwNzI0MTI1QworOjEwMEYwMDAwMDc3QkVGNjQwMTRFNzAwNDdEMDE4MDAyN0QwMEVGNjQ3OQorOjEwMEYxMDAwMDI0RTcwMDQ3RjAxODAwMjdGMDBFRjRENjAzNTEyMDdBMgorOjEwMEYyMDAwRkNFMEZGOTAwNzI2MTIwNzg5RUZGMDEyMDgwOEUwRkZBNworOjEwMEYzMDAwOTAwNzI4MTIwNzg5RUZGMDEyMDg0REUwNTQxRkZGMTJBNgorOjEwMEY0MDAwMDc4NkVGRjAxMjA4NTlFMDU0MUZGRjkwMDcyNDEyMDc5QworOjEwMEY1MDAwODlFRkYwMjJFNEY1NTMxMjBFODE0MDA0N0YwMTgwMDJGNAorOjEwMEY2MDAwN0YwMDEyMEU4OTQwMDQ3RTAxODAwMjdFMDBFRTRGNzBFOQorOjEwMEY3MDAwMDMwMjBGRjY4NUUxMTA0M0UxMDI1M0UxMEY4NUUxMTAxMgorOjEwMEY4MDAwRTRGNTUxRTVFMzU0M0ZGNTUyMTIwRTg5NDAxREFENTI5MAorOjEwMEY5MDAwQUY1MTEyMTExOEVGNjAwODg1RTExMDQzRTE0MDgwMEI1QQorOjEwMEZBMDAwNTNFMUJGMTIwRTU4MTIwMDA2ODBGQkU1RTM1NDNGRjVGMworOjEwMEZCMDAwNTFFNUU0NTQzRkY1NTIxMjBFODE0MDFEQUQ1MkFGNTE0MAorOjEwMEZDMDAwMTIxMTE4RUY2MDA4ODVFMTEwNDNFMTIwODAwQjUzRTExNgorOjEwMEZEMDAwREYxMjBFNTgxMjAwMDY4MEZCMTIwRTgxNDAwNDdGMDFDMgorOjEwMEZFMDAwODAwMjdGMDAxMjBFODk0MDA0N0UwMTgwMDI3RTAwRUVBNgorOjEwMEZGMDAwNEY2MDAzMTIwRTVCMjIxMjBFMjFFRkYwMTIxMDkxMjJBRAorOjEwMTAwMDAwMDIxMTAwMDIxMDQwMDIxMDkwMDAwMDAwMDAwMDAwMDBEOQorOjEwMTAxMDAwMDEyMDAxMjBFNEY1NTcxMjE2QkQxMjE2NDRFNDEyMTAwNworOjEwMTAyMDAwNTYxMjE0Qjc5MDA3MjYxMjA3MzVFNDEyMDczMUU0RjA4MAorOjEwMTAzMDAwMTIxMDU2MTIxNEI3OTAwNzI2MTIwNzM1RTU0MTEyMDcxMQorOjEwMTA0MDAwMzFFNTQwRjBBRjU3N0UwMEFENTY3QzAwMTIwNDQ0QUY0RQorOjEwMTA1MDAwNTY3RTAwMDIxMUVFRkY5MDA3MjBBM0UwRkRFNEY1NTY1NgorOjEwMTA2MDAwRjU0MEZFRkNBQjU2RkExMjExNTE3RjBGN0QxOEU0RjVFNgorOjEwMTA3MDAwNTZGNTQwRkVGQ0FCNTZGQTEyMTU0MUFGNTY3RTAwMTJGMworOjEwMTA4MDAwMUFGRkU0RkZGNTU2N0QxRkY1NDBGRUZDQUI1NkZBMjIzMQorOjEwMTA5MDAwMjJFNEY1NTVFNTA4RkQ3NEEwRjU1NkVENDQwN0Y1NTczMworOjEwMTBBMDAwRTUyODMwRTUwM0QzODAwMUMzNDAwNTdGMjhFRjgwMDRBNQorOjEwMTBCMDAwN0YxNEVGQzMxM0Y1NTRFNEY5MTIwRTE4NzU4MzhFRTAxNAorOjEwMTBDMDAwRjUxMENFRUZDRUVFRDM5NDAwNDAyNkU1MTA1NEZFMTI3QworOjEwMTBEMDAwMEU5ODc1ODM4RUVERjBFNTEwNDQwMUZERUI0NDA3RjVBNQorOjEwMTBFMDAwODJFREYwODU1NzgyODU1NjgzRTAzMEUzMDEwOTFFODA0QQorOjEwMTBGMDAwRDRDMjM0RTlDMzk1NTQ0MDAyRDIzNDIyMDIwMDA2MjJGRAorOjEwMTEwMDAwMzAzMDExOTAxMDAwRTQ5M0Y1MTA5MDEwMTBFNDkzRjUzNgorOjEwMTExMDAwMTAxMjEwOTAxMjExNTAyMkU0RkNDM0VEOUZGQUVGRjU2QgorOjEwMTEyMDAwODM3NTgyMDA3OUZGRTQ5M0NDNkNDQ0EzRDlGOERBRjYwRQorOjEwMTEzMDAwRTVFMjMwRTQwMjhDRTVFRDI0RkZGRkVGNzU4MkZGRjU3OAorOjEwMTE0MDAwODNFNDkzNkM3MDAzN0YwMTIyN0YwMDIyMjIxMTAwMDA1MAorOjEwMTE1MDAwMjI4RTU4OEY1OThDNUE4RDVCOEE1QzhCNUQ3NTVFMDEyRgorOjEwMTE2MDAwRTRGNTVGRjU2MEY1NjIxMjA3MkE3NTgzRDBFMEZGQzRFRAorOjEwMTE3MDAwNTQwRkY1NjExMjFFQTU4NTU5NUVEM0U1NUU5NTVCRTVCQQorOjEwMTE4MDAwNUExMjA3NkI1MDRCMTIwNzAzNzU4M0JDRTA0NTVFMTI4MQorOjEwMTE5MDAwMDcyOTc1ODNCRUUwNDU1RTEyMDcyOTc1ODNDMEUwNDVDNworOjEwMTFBMDAwNUVGMEFGNUZFNTYwMTIwODc4MTIwQUZGQUY2MjdFMDA2MgorOjEwMTFCMDAwQUQ1REFDNUMxMjA0NDRFNTYxQUY1RTdFMDBCNDAzMDUzNgorOjEwMTFDMDAwMTIxRTIxODAwN0FENURBQzVDMTIxMzE3MDU1RTAyMTE4MworOjEwMTFEMDAwN0ExMjA3MDM3NTgzQkNFMDQ1NDAxMjA3Mjk3NTgzQkU2OAorOjEwMTFFMDAwRTA0NTQwMTIwNzI5NzU4M0MwRTA0NTQwRjAyMjhFNTg0MworOjEwMTFGMDAwOEY1OTc1NUEwMTc5MDE3NTVCMDFFNEZCMTIwNzJBNzU1NQorOjEwMTIwMDAwODNBRUUwNTQxQUZGMTIwODY1RTBDNDEzNTQwN0ZFRUZFMgorOjEwMTIxMDAwNzAwQ0VFNjUzNTcwMDc5MDA3MkZFMEI0MDEwREFGMzUwNworOjEwMTIyMDAwN0UwMDEyMEVBOUNGRUJDRjAyMUU2MEU1NTk2NDAyNDU4NQorOjEwMTIzMDAwNTg3MDA0N0YwMTgwMDI3RjAwRTU1OTQ1NTg3MDA0N0U5NAorOjEwMTI0MDAwMDE4MDAyN0UwMEVFNEY2MDIzODU0MTQ5ODU0MDRCRTVEOQorOjEwMTI1MDAwNTk0NTU4NzAyQ0FGNUFGRUNERTlDREZDQUI1OUFBNTg3MAorOjEwMTI2MDAwMTIwQUZGQUY1QjdFMDAxMjFFNjA4MDE1QUY1QjdFMDAyRQorOjEwMTI3MDAwMTIxRTYwOTAwNzI2MTIwNzM1RTU0OTEyMDczMUU1NEIyQgorOjEwMTI4MDAwRjBFNEZEQUYzNUZFRkMxMjA5MTUyMjhDNjQ4RDY1MTI2OQorOjEwMTI5MDAwMDhEQTQwM0NFNTY1NDU2NDcwMTAxMjA5MDRDM0U1M0U3OAorOjEwMTJBMDAwMTIwNzY5NDAzQjEyMDg5NTgwMThFNTNFQzM5NTM4NDAwNworOjEwMTJCMDAwMUQ4NTNFMzhFNTNFNjAwNTg1M0YzOTgwMDM4NTM5MzkxNworOjEwMTJDMDAwOEYzQTEyMDdBOEU1M0UxMjA3NTNFNTNGRjAyMjgwM0IxNAorOjEwMTJEMDAwRTU2NTQ1NjQ3MDExMTIwNzVGNDAwNTEyMDg5RTgwMUY4NgorOjEwMTJFMDAwMTIwNzNFRTU0MUYwMjJFNTNDQzM5NTM4NDAxRDg1M0NBMAorOjEwMTJGMDAwMzhFNTNDNjAwNTg1M0QzOTgwMDM4NTM5Mzk4RjNBMTJFMAorOjEwMTMwMDAwMDdBOEU1M0MxMjA3NTNFNTNERjAyMjEyMDc5RkU1Mzg5OAorOjEwMTMxMDAwMTIwNzUzRTUzOUYwMjI4QzYzOEQ2NDEyMDhEQTQwM0NFMQorOjEwMTMyMDAwRTU2NDQ1NjM3MDEwMTIwOTA0QzNFNTNFMTIwNzY5NDA4NQorOjEwMTMzMDAwM0IxMjA4OTU4MDE4RTUzRUMzOTUzODQwMUQ4NTNFMzgyMAorOjEwMTM0MDAwRTUzRTYwMDU4NTNGMzk4MDAzODUzOTM5OEYzQTEyMDdCQworOjEwMTM1MDAwQThFNTNFMTIwNzUzRTUzRkYwMjI4MDNCRTU2NDQ1NjM3NAorOjEwMTM2MDAwNzAxMTEyMDc1RjQwMDUxMjA4OUU4MDFGMTIwNzNFRTVBQworOjEwMTM3MDAwNDFGMDIyRTUzQ0MzOTUzODQwMUQ4NTNDMzhFNTNDNjA5MgorOjEwMTM4MDAwMDU4NTNEMzk4MDAzODUzOTM5OEYzQTEyMDdBOEU1M0MzOAorOjEwMTM5MDAwMTIwNzUzRTUzREYwMjIxMjA3OUZFNTM4MTIwNzUzRTU4NworOjEwMTNBMDAwMzlGMDIyRTUwREZFRTUwODhFNTQ0NDA1RjU1NTc1MTUxNgorOjEwMTNCMDAwMEZGNTgyMTIwRTdBMTIxN0EzMjAzMTA1NzUxNTAzODBERQorOjEwMTNDMDAwMDM3NTE1MEJFNTBBQzM5NDAxNTAzODEyMTQyMDIwMzExRgorOjEwMTNEMDAwMDYwNTE1MDUxNTgwMDQxNTE1MTUxNUU1MEFDMzk0MDFCNAorOjEwMTNFMDAwNTAyMTEyMTQyMDIwMzEwNDA1MTU4MDAyMTUxNUU1MEEzQworOjEwMTNGMDAwQzM5NDAxNTAwRTEyMEU3NzEyMTdBMzIwMzEwNTA1MTU2NAorOjEwMTQwMDAwMTIwRTc3RTUxNUI0MDgwNDdGMDE4MDAyN0YwMEU1MTUxMAorOjEwMTQxMDAwQjQwNzA0N0UwMTgwMDI3RTAwRUU0RjYwMDIwNTdGMjI0OQorOjEwMTQyMDAwODU1NTgyODU1NDgzRTUxNUYwMTIxN0EzMjIxMjA3MkFFOQorOjEwMTQzMDAwNzU4M0FFNzRGRjEyMDcyOUUwNTQxQUY1MzRFMEM0MTMyMworOjEwMTQ0MDAwNTQwN0Y1MzUyNEZFNjAyNDI0RkU2MDNDMjQwNDcwNjNCOAorOjEwMTQ1MDAwNzUzMTJERTUwOEZENzRCNjEyMDc5Mjc0QkM5MDA3MjIxMQorOjEwMTQ2MDAwMTIwNzk1NzQ5MDEyMDdCMzc0OTI4MDNDNzUzMTNBRTU3NworOjEwMTQ3MDAwMDhGRDc0QkExMjA3OTI3NEMwOTAwNzIyMTIwN0I2NzQ1RQorOjEwMTQ4MDAwQzQxMjA3QjM3NEM4ODAyMDc1MzEzNUU1MDhGRDc0QjhGRgorOjEwMTQ5MDAwMTIwNzkyNzRCRUZGRUQ0NDA3OTAwNzIyQ0ZGMEEzRUYyRQorOjEwMTRBMDAwRjA3NEMyMTIwN0IzNzRDNkZGRUQ0NDA3QTNDRkYwQTNENAorOjEwMTRCMDAwRUZGMDIyNzUzNDAxMjI4RTU4OEY1OThDNUE4RDVCOEEzOQorOjEwMTRDMDAwNUM4QjVENzU1RTAxRTRGNTVGMTIxRUE1ODU1OTVFRDNFOAorOjEwMTREMDAwRTU1RTk1NUJFNTVBMTIwNzZCNTA1N0U1NUQ0NTVDNzAxQworOjEwMTRFMDAwMzAxMjA3MkE3NTgzOTJFNTVFMTIwNzI5NzU4M0M2RTVENworOjEwMTRGMDAwNUUxMjA3Mjk3NTgzQzhFNTVFMTIwNzI5NzU4MzkwRTU5QQorOjEwMTUwMDAwNUUxMjA3Mjk3NTgzQzJFNTVFMTIwNzI5NzU4M0M0ODBDMAorOjEwMTUxMDAwMDMxMjA3MzJFNTVFRjBBRjVGN0UwMEFENURBQzVDMTI5QQorOjEwMTUyMDAwMDQ0NEFGNUU3RTAwQUQ1REFDNUMxMjBCRDEwNTVFMDI4MworOjEwMTUzMDAwMTRDRkFCNURBQTVDQUQ1QkFDNUFBRjU5QUU1ODAyMUI4MQorOjEwMTU0MDAwRkI4QzVDOEQ1RDhBNUU4QjVGNzU2MDAxRTRGNTYxRjVGNworOjEwMTU1MDAwNjJGNTYzMTIxRUE1OEY2MEQzRTU2MDk1NURFNTVDMTJCMAorOjEwMTU2MDAwMDc2QjUwNjFFNTVGNDU1RTcwMjcxMjA3MkE3NTgzQjZFOQorOjEwMTU3MDAwRTU2MDEyMDcyOTc1ODNCOEU1NjAxMjA3Mjk3NTgzQkFGQgorOjEwMTU4MDAwRTU2MEYwQUY2MTdFMDBFNTYyMTIwODdBMTIwQUZGODAyMgorOjEwMTU5MDAwMTk5MDA3MjQxMjA3MzVFNTYwMTIwNzI5NzU4MzhFRTQzOAorOjEwMTVBMDAwMTIwNzI5NzQwMTEyMDcyOUU0RjBBRjYzN0UwMEFENUZEMgorOjEwMTVCMDAwQUM1RTEyMDQ0NEFGNjA3RTAwQUQ1RkFDNUUxMjEyOEI3NQorOjEwMTVDMDAwMDU2MDAyMTU1ODIyOTAxMTRERTQ5MzkwMDcyRUYwMTJGOQorOjEwMTVEMDAwMDgxRjc1ODNBRUUwNTQxQUY1MzQ3MDY3RUY0NDA3RjVDMQorOjEwMTVFMDAwODI3NTgzQ0VFMEZGMTMxMzEzNTQwN0Y1MzY1NDBGRDNERgorOjEwMTVGMDAwOTQwMDQwMDYxMjE0MkQxMjFCQTlFNTM2NTQwRjI0RkU0OAorOjEwMTYwMDAwNjAwQzE0NjAwQzE0NjAxOTI0MDM3MDM3ODAxMDAyMUVFMworOjEwMTYxMDAwOTExMjFFOTExMjA3MkE3NTgzQ0VFMDU0RUZGMDAyMUQzRAorOjEwMTYyMDAwQUUxMjEwMTRFNEY1NTUxMjFEODUwNTU1RTU1NUMzOTQwOQorOjEwMTYzMDAwMDU0MEY0MTIwNzJBNzU4M0NFRTA1NEM3MTIwNzI5RTA0QgorOjEwMTY0MDAwNDQwOEYwMjJFNEY1NThGNTU5QUYwOEVGNDQwN0Y1ODI1NQorOjEwMTY1MDAwNzU4M0QwRTBGREM0NTQwRkY1NUFFRjQ0MDdGNTgyNzU0OQorOjEwMTY2MDAwODM4MDc0MDFGMDEyMDgyMTc1ODM4MkU1NDVGMEVGNDQxMAorOjEwMTY3MDAwMDdGNTgyNzU4MzhBNzRGRkYwMTIxQTREMTIwNzJBNzVENgorOjEwMTY4MDAwODNCQ0UwNTRFRjEyMDcyOTc1ODNCRUUwNTRFRjEyMDdDNAorOjEwMTY5MDAwMjk3NTgzQzBFMDU0RUYxMjA3Mjk3NTgzQkNFMDQ0MTAxQworOjEwMTZBMDAwMTIwNzI5NzU4M0JFRTA0NDEwMTIwNzI5NzU4M0MwRTAzNAorOjEwMTZCMDAwNDQxMEYwQUY1OEU1NTkxMjA4NzgwMjBBRkZFNEY1NThEMworOjEwMTZDMDAwN0QwMUY1NTlBRjM1RkVGQzEyMDkxNTEyMDcyQTc1ODMwNQorOjEwMTZEMDAwQjY3NDEwMTIwNzI5NzU4M0I4NzQxMDEyMDcyOTc1ODMyMAorOjEwMTZFMDAwQkE3NDEwMTIwNzI5NzU4M0JDNzQxMDEyMDcyOTc1ODMwOAorOjEwMTZGMDAwQkU3NDEwMTIwNzI5NzU4M0MwNzQxMDEyMDcyOTc1ODNGMAorOjEwMTcwMDAwOTBFNDEyMDcyOTc1ODNDMkU0MTIwNzI5NzU4M0M0RTRBMworOjEwMTcxMDAwMTIwNzI5NzU4MzkyRTQxMjA3Mjk3NTgzQzZFNDEyMDcxQworOjEwMTcyMDAwMjk3NTgzQzhFNEYwQUY1OEZFRTU1OTEyMDg3QTAyMEExOQorOjEwMTczMDAwRkZFNUUyMzBFNDZDRTVFNzU0QzA2NDQwNzA2NEU1MDkxRAorOjEwMTc0MDAwQzQ1NDMwRkVFNTA4MjVFMDI1RTA1NEMwNEVGRUVGNTRCOQorOjEwMTc1MDAwM0Y0RUZERTUyQkFFMkE3ODAyQzMzM0NFMzNDRUQ4RjkwNworOjEwMTc2MDAwRjU4MjhFODNFREYwRTUyQkFFMkE3ODAyQzMzM0NFMzNCQgorOjEwMTc3MDAwQ0VEOEY5RkZGNTgyOEU4M0EzRTVGRUYwOEY4MjhFODNBQgorOjEwMTc4MDAwQTNBM0U1RkRGMDhGODI4RTgzQTNBM0EzRTVGQ0YwQzNBMgorOjEwMTc5MDAwRTUyQjk0RkFFNTJBOTQwMDUwMDgwNTJCRTUyQjcwMDJGRQorOjEwMTdBMDAwMDUyQTIyRTRGRkU0RjU1OEY1NTZGNTU3NzQ4MkZDMTIzOQorOjEwMTdCMDAwMEUwNDhDODNFMEY1MTA1NDdGRjBFNTEwNDQ4MDEyMEU4NworOjEwMTdDMDAwOThFREYwN0UwQTEyMEUwNDc1ODNBMEUwMjBFMDI2REU3QworOjEwMTdEMDAwRjQwNTU3RTU1NzcwMDIwNTU2RTUxNDI0MDFGREU0MzM3RQorOjEwMTdFMDAwRkNEM0U1NTc5REU1NTY5QzQwRDlFNTBBOTQyMDUwMDI2QworOjEwMTdGMDAwMDUwQTQzRTEwOEMyMzExMjBFMDQ3NTgzQTZFMDU1MTJCMgorOjEwMTgwMDAwNjUxMjcwMDNEMjMxMjJDMjMxMjI5MDA3MjZFMEZBQTM3QQorOjEwMTgxMDAwRTBGNTgyOEE4M0UwRjU0MUU1MzlDMzk1NDE0MDI2RTU0QworOjEwMTgyMDAwMzk5NTQxQzM5RkVFMTIwNzZCNDAwNDdDMDE4MDAyN0MxNgorOjEwMTgzMDAwMDBFNTQxNjQzRjYwMDQ3QjAxODAwMjdCMDBFQzVCNjA1QgorOjEwMTg0MDAwMjkwNTQxODAyOEMzRTU0MTk1MzlDMzlGRUUxMjA3NkJGNgorOjEwMTg1MDAwNDAwNDdGMDE4MDAyN0YwMEU1NDE2MDA0N0UwMTgwMDIzOAorOjEwMTg2MDAwN0UwMEVGNUU2MDA0MTU0MTgwMDM4NTM5NDE4NTNBNDA3MgorOjEwMTg3MDAwMjJFNUUyMzBFNDYwRTVFMTMwRTI1QkU1MDk3MDA0N0ZGNworOjEwMTg4MDAwMDE4MDAyN0YwMEU1MDg3MDA0N0UwMTgwMDI3RTAwRUU4OAorOjEwMTg5MDAwNUY2MDQzNTNGOUY4RTVFMjMwRTQzQkU1RTEzMEUyMkVFNgorOjEwMThBMDAwNDNGQTAyNTNGQUZCRTRGNTEwOTA5NDcwRTUxMEYwRTU2QQorOjEwMThCMDAwRTEzMEUyRTc5MDk0NzBFMDY1MTA2MDAzNDNGQTA0MDVCQworOjEwMThDMDAwMTA5MDk0NzBFNTEwRjA3MEU2MTIwMDA2ODBFMTUzRkE3MworOjEwMThEMDAwRkQ1M0ZBRkI4MEMwMjI4RjU0MTIwMDA2RTVFMTMwRTA5MAorOjEwMThFMDAwMDQ3RjAxODAwMjdGMDBFNTdFRDM5NDA1NDAwNDdFMDFFMQorOjEwMThGMDAwODAwMjdFMDBFRTRGNjAzRDg1NTQxMUU1RTIyMEUxMzIyQQorOjEwMTkwMDAwNzRDRTEyMUEwNTMwRTcwNDdEMDE4MDAyN0QwMDhGODJCQgorOjEwMTkxMDAwOEU4M0UwMzBFNjA0N0YwMTgwMDI3RjAwRUY1RDcwMTU2QQorOjEwMTkyMDAwMTIxNUM2NzRDRTEyMUEwNTMwRTYwN0UwNDQ4MEYwNDM2MworOjEwMTkzMDAwRjk4MDEyMTg3MTIyMTIwRTQ0RTUxNjI1RTAyNUUwMjRFNAorOjEwMTk0MDAwQjBGNTgyRTQzNDFBRjU4M0U0OTNGNTBGRTUxNjI1RTA0QgorOjEwMTk1MDAwMjVFMDI0QjFGNTgyRTQzNDFBRjU4M0U0OTNGNTBFMTIwMAorOjEwMTk2MDAwMEU2NUY1MTBFNTBGNTRGMDEyMEUxNzc1ODM4Q0VGRjAyRAorOjEwMTk3MDAwRTUwRjMwRTAwQzEyMEUwNDc1ODM4NkUwNDQ0MEYwODBFMQorOjEwMTk4MDAwMEExMjBFMDQ3NTgzODZFMDU0QkZGMDEyMEU5MTc1ODMxRgorOjEwMTk5MDAwODJFNTBFRjAyMjdGMDUxMjE3MzExMjBFMDQxMjBFMzM2QgorOjEwMTlBMDAwNzQwMkYwNzQ4RUZFMTIwRTA0MTIwRTBCRUZGMDc1MTUxOQorOjEwMTlCMDAwNzAxMjBGRjcyMDM0MDU3NTE1MTA4MDAzNzUxNTUwMTIzRAorOjEwMTlDMDAwMEZGNzIwMzQwNDc0MTA4MDAyNzRGMDI1MTVGNTE1MTJGOQorOjEwMTlEMDAwMEUyMUVGRjAxMjEwOTEyMDM0MTdFNTE1NjQzMDYwMENFMQorOjEwMTlFMDAwNzQxMDI1MTVGNTE1QjQ4MDAzRTRGNTE1MTIwRTIxRUZEQQorOjEwMTlGMDAwRjAyMkYwRTUwQjI1RTAyNUUwMjQ4MkY1ODJFNDM0MDdBRgorOjEwMUEwMDAwRjU4MzIyNzQ4OEZFRTUwODQ0MDdGRkY1ODI4RTgzRTBBMworOjEwMUExMDAwMjJGMEU1MDg0NDA3RjU4MjIyRjBFMDU0QzA4RjgyOEU2MAorOjEwMUEyMDAwODNGMDIyRUY0NDA3RjU4Mjc1ODM4NkUwNTQxMEQzOTQ0NworOjEwMUEzMDAwMDAyMkYwOTAwNzE1RTAwNEYwMjI0NDA2RjU4Mjc1ODMzOQorOjEwMUE0MDAwOUVFMDIyRkVFRjQ0MDdGNTgyOEU4M0UwMjJFNDkwMDdCOQorOjEwMUE1MDAwMkFGMEEzRjAxMjA3MkE3NTgzODJFMDU0N0YxMjA3MjkyNworOjEwMUE2MDAwRTA0NDgwRjAxMjEwRkMxMjA4MUY3NTgzQTBFMDIwRTAxMworOjEwMUE3MDAwMUE5MDA3MkJFMDA0RjA3MDA2OTAwNzJBRTAwNEYwOTAxQgorOjEwMUE4MDAwMDcyQUUwQjQxMEUxQTNFMEI0MDBEQ0VFNDRBNkZDRUZDQQorOjEwMUE5MDAwNDQwN0Y1ODI4QzgzRTBGNTMyRUU0NEE4RkVFRjQ0MDc1QworOjEwMUFBMDAwRjU4MjhFODNFMEY1MzMyMjAxMjAxMTAwMDQyMDAwOTA5RQorOjEwMUFCMDAwMDAyMDBGOTIwMDIxMEY5NDAwMjIwRjk2MDAyMzBGOTgxMAorOjEwMUFDMDAwMDAyNDBGOUEwMDI1MEY5QzAwMjYwRjlFMDAyNzBGQTBEMAorOjEwMUFEMDAwMDEyMDAxQTIwMTIxMDFBNDAxMjIwMUE2MDEyMzAxQThFNAorOjEwMUFFMDAwMDEyNDAxQUEwMTI1MDFBQzAxMjYwMUFFMDEyNzAxQjBBNAorOjEwMUFGMDAwMDEyODAxQjQwMDI4MEZCNjQwMjgwRkI4NjEyODAxQ0I5NworOjEwMUIwMDAwRUZDQkNBRUVDQTdGMDFFNEZERUI0QTcwMjRFNTA4RjU4RAorOjEwMUIxMDAwODI3NEI2MTIwODI5RTUwOEY1ODI3NEI4MTIwODI5RTUxRQorOjEwMUIyMDAwMDhGNTgyNzRCQTEyMDgyOTdFMDA3QzAwMTIwQUZGODAzMAorOjEwMUIzMDAwMTI5MDA3MjYxMjA3MzVFNTQxRjA5MDA3MjQxMjA3MzU2OQorOjEwMUI0MDAwRTU0MEYwMTIwNzJBNzU4MzhFRTQxMjA3Mjk3NDAxMTIwQQorOjEwMUI1MDAwMDcyOUU0RjAyMkU0RjUyNkY1Mjc1M0UxRkVGNTJBNzU3RQorOjEwMUI2MDAwMkIwMUY1MDg3RjAxMTIxNzMxMzAzMDFDOTAxQUE5RTRCRgorOjEwMUI3MDAwOTNGNTEwOTAxRkY5RTQ5M0Y1MTA5MDAwNDFFNDkzRjU2QworOjEwMUI4MDAwMTA5MDFFQ0FFNDkzRjUxMDdGMDIxMjE3MzExMjBGNTQwMQorOjEwMUI5MDAwN0YwMzEyMTczMTEyMDAwNkU1RTIzMEU3MDkxMjEwMDA0OAorOjEwMUJBMDAwMzAzMDAzMTIxMTAwMDIwMDQ3MTIwODFGNzU4M0QwRTA4NQorOjEwMUJCMDAwQzQ1NDBGRkQ3NTQzMDE3NTQ0RkYxMjA4QUE3NDA0RjA2NAorOjEwMUJDMDAwNzUzQjAxRUQxNDYwMEMxNDYwMEIxNDYwMEYyNDAzNzA1RQorOjEwMUJEMDAwMEI4MDA5ODAwMDEyMDhBNzA0RjA4MDA2MTIwOEE3NzQ4MQorOjEwMUJFMDAwMDRGMEVFNDQ4MkZFRUY0NDA3RjU4MjhFODNFNTQ1MTI1MQorOjEwMUJGMDAwMDhCRTc1ODM4MkU1MzFGMDAyMTE0QzhFNjA4RjYxMTI1MAorOjEwMUMwMDAwMUVBNUU0RkZDRUVEQ0VFRUQzOTU2MUU1NjAxMjA3NkIyNQorOjEwMUMxMDAwNDAzOTc0MjAyRUY1ODJFNDM0MDNGNTgzRTA3MDAzRkYyRAorOjEwMUMyMDAwODAyNjEyMDhFMkZEQzM5RjQwMUVDRkVEQ0ZFQjRBNzAyNQorOjEwMUMzMDAwMEI4RDQyMTIwOEVFRjU0MThFNDA4MDBDMTIwOEUyRjU0MQorOjEwMUM0MDAwMzgxMjA4RUVGNTM5OEUzQTFFODBCQzIyNzU1ODAxRTUyRgorOjEwMUM1MDAwMzU3MDBDMTIwN0NDRTBGNTRBMTIwN0Q4RTBGNTRDRTVEOAorOjEwMUM2MDAwMzVCNDA0MEMxMjA3RTRFMEY1NEExMjA3RjBFMEY1NEMzNQorOjEwMUM3MDAwRTUzNUI0MDEwNDdGMDE4MDAyN0YwMEU1MzVCNDAyMDQzQworOjEwMUM4MDAwN0UwMTgwMDI3RTAwRUU0RjYwMEMxMjA3RkNFMEY1NEFGOAorOjEwMUM5MDAwMTIwODA4RTBGNTRDODU0MTQ5ODU0MDRCMjI3NTVCMDFFRgorOjEwMUNBMDAwOTAwNzI0MTIwNzM1RTA1NDFGRkZEMzk0MDI1MDA0OEY4RAorOjEwMUNCMDAwNTg4MDA1RUYyNEZFRjU1OEVGQzM5NDE4NDAwNTc1NTk3OAorOjEwMUNDMDAwMTg4MDA0RUYwNEY1NTk4NTQzNUFBRjU4N0UwMEFENTk4QQorOjEwMUNEMDAwN0MwMEFCNUI3QTAwMTIxNTQxQUY1QTdFMDAxMjE4MEFFNQorOjEwMUNFMDAwQUY1QjdFMDAwMjFBRkZFNUUyMzBFNzBFMTIxMDAzQzI3RQorOjEwMUNGMDAwMzAzMDMwMDMxMjEwRkYyMDMzMjhFNUU3MzBFNzA1MTJCQgorOjEwMUQwMDAwMEVBMjgwMERFNUZFQzM5NDIwNTAwNjEyMEVBMjQzRjlFOAorOjEwMUQxMDAwMDhFNUYyMzBFNzAzNTNGOTdGRTVGMTU0NzBEMzk0MDBGRQorOjEwMUQyMDAwNTBEODIyMTIwRTA0NzU4MzgwRTRGMEU1MDg0NDA3MTJBRgorOjEwMUQzMDAwMERGRDc1ODM4NDEyMEUwMjc1ODM4NjEyMEUwMjc1ODM2MworOjEwMUQ0MDAwOENFMDU0RjMxMjBFMDM3NTgzOEUxMjBFMDI3NTgzOTQ4OQorOjEwMUQ1MDAwRTA1NEZCRjAyMjEyMDcyQTc1ODM4RUU0MTIwNzI5NzRERgorOjEwMUQ2MDAwMDExMjA3MjlFNDEyMDhCRTc1ODM4Q0UwNDQyMDEyMDg5MgorOjEwMUQ3MDAwQkVFMDU0REZGMDc0ODQ4NTA4ODJGNTgzRTA1NDdGRjA4MAorOjEwMUQ4MDAwRTA0NDgwRjAyMjc1NTYwMUU0RkRGNTU3QUYzNUZFRkNDNgorOjEwMUQ5MDAwMTIwOTE1MTIxQzlEMTIxRTdBMTIxQzRDQUY1NzdFMDBBMAorOjEwMURBMDAwQUQ1NjdDMDAxMjA0NDRBRjU2N0UwMDAyMTFFRTc1NTYwQgorOjEwMURCMDAwMDFFNEZERjU1N0FGMzVGRUZDMTIwOTE1MTIxQzlEMTIwQQorOjEwMURDMDAwMUU3QTEyMUM0Q0FGNTc3RTAwQUQ1NjdDMDAxMjA0NDRBNAorOjEwMUREMDAwQUY1NjdFMDAwMjExRUVFNEY1MTYxMjBFNDRGRUU1MDg0MQorOjEwMURFMDAwNDQwNUZGMTIwRTY1OEY4MjhFODNGMDA1MTZFNTE2QzMzQgorOjEwMURGMDAwOTQxNDQwRTZFNTA4MTIwRTJCRTRGMDIyRTRGNTU4RjVDMQorOjEwMUUwMDAwNTlGNTVBRkZGRUFENThGQzEyMDkxNTdGMDQ3RTAwQUQ0RQorOjEwMUUxMDAwNTg3QzAwMTIwOTE1N0YwMjdFMDBBRDU4N0MwMDAyMDkzMworOjEwMUUyMDAwMTVFNTNDMjUzRUZDRTU0MjI0MDBGQkU0MzNGQUVDQzMxNworOjEwMUUzMDAwOUJFQTEyMDc2QjQwMEI4QzQyRTUzRDI1M0ZGNTQxOEYzNQorOjEwMUU0MDAwNDAyMjEyMDkwQjIyNzQ4NEY1MTg4NTA4MTk4NTE5ODIxRAorOjEwMUU1MDAwODUxODgzRTA1NDdGRjBFMDQ0ODBGMEUwNDQ4MEYwMjI3NQorOjEwMUU2MDAwRUY0RTcwMEIxMjA3MkE3NTgzRDJFMDU0REZGMDIyMTI3NgorOjEwMUU3MDAwMDcyQTc1ODNEMkUwNDQyMEYwMjI3NTU4MDE5MDA3MjY4NgorOjEwMUU4MDAwMTIwNzM1RTA1NDNGRjU0MTEyMDczMkUwNTQzRkY1NDA2OAorOjEwMUU5MDAwMjI3NTU2MDJFNEY1NTcxMjFERkNBRjU3N0UwMEFENTY3MQorOjEwMUVBMDAwN0MwMDAyMDQ0NEU0RjU0MkY1NDFGNTQwRjUzOEY1Mzk4QgorOjEwMUVCMDAwRjUzQTIyRUY1NDA3RkZFNUY5NTRGODRGRjVGOTIyN0Y4MAorOjEwMUVDMDAwMDFFNEZFMEYwRUJFRkZGQjIyMDEyMDAwMDEwNDIwMDBGMgorOjEwMUVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorOjEwMUVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgorOjEwMUVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwMUYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwMUYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQorOjEwMUYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQorOjEwMUY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQorOjEwMUY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQorOjEwMUY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQorOjEwMUY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQorOjEwMUY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQorOjEwMUY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwMUZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQorOjEwMUZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQorOjEwMUZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwMUZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwMUZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQorOjEwMUZGMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjAxMTAwMDQyMDAwODEwQQorOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2ZzLzlwL01ha2VmaWxlIGIvZnMvOXAvTWFrZWZpbGUKaW5kZXggMWE5NDBlYy4uOTFmYmEwMiAxMDA2NDQKLS0tIGEvZnMvOXAvTWFrZWZpbGUKKysrIGIvZnMvOXAvTWFrZWZpbGUKQEAgLTgsNiArOCw4IEBACiAJdmZzX2Rpci5vIFwKIAl2ZnNfZGVudHJ5Lm8gXAogCXY5ZnMubyBcCi0JZmlkLm8KKwlmaWQubyAgXAorCXhhdHRyLm8gXAorCXhhdHRyX3VzZXIubwogCiA5cC0kKENPTkZJR185UF9GU0NBQ0hFKSArPSBjYWNoZS5vCmRpZmYgLS1naXQgYS9mcy85cC9maWQuYyBiL2ZzLzlwL2ZpZC5jCmluZGV4IDczMTdiMzkuLjM1ODU2MzYgMTAwNjQ0Ci0tLSBhL2ZzLzlwL2ZpZC5jCisrKyBiL2ZzLzlwL2ZpZC5jCkBAIC05Nyw2ICs5NywzNCBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qCisgKiBXZSBuZWVkIHRvIGhvbGQgdjlzZXMtPnJlbmFtZV9zZW0gYXMgbG9uZyBhcyB3ZSBob2xkIHJlZmVyZW5jZXMKKyAqIHRvIHJldHVybmVkIHBhdGggYXJyYXkuIEFycmF5IGVsZW1lbnQgY29udGFpbiBwb2ludGVycyB0bworICogZGVudHJ5IG5hbWVzLgorICovCitzdGF0aWMgaW50IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcywKKwkJCQkgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqKipuYW1lcykKK3sKKwlpbnQgbiA9IDAsIGk7CisJY2hhciAqKnduYW1lczsKKwlzdHJ1Y3QgZGVudHJ5ICpkczsKKworCWZvciAoZHMgPSBkZW50cnk7ICFJU19ST09UKGRzKTsgZHMgPSBkcy0+ZF9wYXJlbnQpCisJCW4rKzsKKworCXduYW1lcyA9IGttYWxsb2Moc2l6ZW9mKGNoYXIgKikgKiBuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXduYW1lcykKKwkJZ290byBlcnJfb3V0OworCisJZm9yIChkcyA9IGRlbnRyeSwgaSA9IChuLTEpOyBpID49IDA7IGktLSwgZHMgPSBkcy0+ZF9wYXJlbnQpCisJCXduYW1lc1tpXSA9IChjaGFyICAqKWRzLT5kX25hbWUubmFtZTsKKworCSpuYW1lcyA9IHduYW1lczsKKwlyZXR1cm4gbjsKK2Vycl9vdXQ6CisJcmV0dXJuIC1FTk9NRU07Cit9CisKIC8qKgogICogdjlmc19maWRfbG9va3VwIC0gbG9va3VwIGZvciBhIGZpZCwgdHJ5IHRvIHdhbGsgaWYgbm90IGZvdW5kCiAgKiBAZGVudHJ5OiBkZW50cnkgdG8gbG9vayBmb3IgZmlkIGluCkBAIC0xMTIsNyArMTQwLDcgQEAKIAlpbnQgaSwgbiwgbCwgY2xvbmUsIGFueSwgYWNjZXNzOwogCXUzMiB1aWQ7CiAJc3RydWN0IHA5X2ZpZCAqZmlkLCAqb2xkX2ZpZCA9IE5VTEw7Ci0Jc3RydWN0IGRlbnRyeSAqZCwgKmRzOworCXN0cnVjdCBkZW50cnkgKmRzOwogCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXM7CiAJY2hhciAqKnduYW1lcywgKnVuYW1lOwogCkBAIC0xMzksNDkgKzE2Nyw2MiBAQAogCWZpZCA9IHY5ZnNfZmlkX2ZpbmQoZGVudHJ5LCB1aWQsIGFueSk7CiAJaWYgKGZpZCkKIAkJcmV0dXJuIGZpZDsKLQorCS8qCisJICogd2UgZG9uJ3QgaGF2ZSBhIG1hdGNoaW5nIGZpZC4gVG8gZG8gYSBUV0FMSyB3ZSBuZWVkCisJICogcGFyZW50IGZpZC4gV2UgbmVlZCB0byBwcmV2ZW50IHJlbmFtZSB3aGVuIHdlIHdhbnQgdG8KKwkgKiBsb29rIGF0IHRoZSBwYXJlbnQuCisJICovCisJZG93bl9yZWFkKCZ2OXNlcy0+cmVuYW1lX3NlbSk7CiAJZHMgPSBkZW50cnktPmRfcGFyZW50OwogCWZpZCA9IHY5ZnNfZmlkX2ZpbmQoZHMsIHVpZCwgYW55KTsKLQlpZiAoIWZpZCkgeyAvKiB3YWxrIGZyb20gdGhlIHJvb3QgKi8KLQkJbiA9IDA7Ci0JCWZvciAoZHMgPSBkZW50cnk7ICFJU19ST09UKGRzKTsgZHMgPSBkcy0+ZF9wYXJlbnQpCi0JCQluKys7CisJaWYgKGZpZCkgeworCQkvKiBGb3VuZCB0aGUgcGFyZW50IGZpZCBkbyBhIGxvb2t1cCB3aXRoIHRoYXQgKi8KKwkJZmlkID0gcDlfY2xpZW50X3dhbGsoZmlkLCAxLCAoY2hhciAqKikmZGVudHJ5LT5kX25hbWUubmFtZSwgMSk7CisJCWdvdG8gZmlkX291dDsKKwl9CisJdXBfcmVhZCgmdjlzZXMtPnJlbmFtZV9zZW0pOwogCi0JCWZpZCA9IHY5ZnNfZmlkX2ZpbmQoZHMsIHVpZCwgYW55KTsKLQkJaWYgKCFmaWQpIHsgLyogdGhlIHVzZXIgaXMgbm90IGF0dGFjaGVkIHRvIHRoZSBmcyB5ZXQgKi8KLQkJCWlmIChhY2Nlc3MgPT0gVjlGU19BQ0NFU1NfU0lOR0xFKQotCQkJCXJldHVybiBFUlJfUFRSKC1FUEVSTSk7CisJLyogc3RhcnQgZnJvbSB0aGUgcm9vdCBhbmQgdHJ5IHRvIGRvIGEgbG9va3VwICovCisJZmlkID0gdjlmc19maWRfZmluZChkZW50cnktPmRfc2ItPnNfcm9vdCwgdWlkLCBhbnkpOworCWlmICghZmlkKSB7CisJCS8qIHRoZSB1c2VyIGlzIG5vdCBhdHRhY2hlZCB0byB0aGUgZnMgeWV0ICovCisJCWlmIChhY2Nlc3MgPT0gVjlGU19BQ0NFU1NfU0lOR0xFKQorCQkJcmV0dXJuIEVSUl9QVFIoLUVQRVJNKTsKIAotCQkJaWYgKHY5ZnNfcHJvdG9fZG90dSh2OXNlcykpCisJCWlmICh2OWZzX3Byb3RvX2RvdHUodjlzZXMpIHx8IHY5ZnNfcHJvdG9fZG90bCh2OXNlcykpCiAJCQkJdW5hbWUgPSBOVUxMOwotCQkJZWxzZQotCQkJCXVuYW1lID0gdjlzZXMtPnVuYW1lOworCQllbHNlCisJCQl1bmFtZSA9IHY5c2VzLT51bmFtZTsKIAotCQkJZmlkID0gcDlfY2xpZW50X2F0dGFjaCh2OXNlcy0+Y2xudCwgTlVMTCwgdW5hbWUsIHVpZCwKLQkJCQl2OXNlcy0+YW5hbWUpOworCQlmaWQgPSBwOV9jbGllbnRfYXR0YWNoKHY5c2VzLT5jbG50LCBOVUxMLCB1bmFtZSwgdWlkLAorCQkJCSAgICAgICB2OXNlcy0+YW5hbWUpOworCQlpZiAoSVNfRVJSKGZpZCkpCisJCQlyZXR1cm4gZmlkOwogCi0JCQlpZiAoSVNfRVJSKGZpZCkpCi0JCQkJcmV0dXJuIGZpZDsKLQotCQkJdjlmc19maWRfYWRkKGRzLCBmaWQpOwotCQl9Ci0JfSBlbHNlIC8qIHdhbGsgZnJvbSB0aGUgcGFyZW50ICovCi0JCW4gPSAxOwotCi0JaWYgKGRzID09IGRlbnRyeSkKKwkJdjlmc19maWRfYWRkKGRlbnRyeS0+ZF9zYi0+c19yb290LCBmaWQpOworCX0KKwkvKiBJZiB3ZSBhcmUgcm9vdCBvdXJzZWxmIGp1c3QgcmV0dXJuIHRoYXQgKi8KKwlpZiAoZGVudHJ5LT5kX3NiLT5zX3Jvb3QgPT0gZGVudHJ5KQogCQlyZXR1cm4gZmlkOwotCi0Jd25hbWVzID0ga21hbGxvYyhzaXplb2YoY2hhciAqKSAqIG4sIEdGUF9LRVJORUwpOwotCWlmICghd25hbWVzKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCWZvciAoZCA9IGRlbnRyeSwgaSA9IChuLTEpOyBpID49IDA7IGktLSwgZCA9IGQtPmRfcGFyZW50KQotCQl3bmFtZXNbaV0gPSAoY2hhciAqKSBkLT5kX25hbWUubmFtZTsKLQorCS8qCisJICogRG8gYSBtdWx0aXBhdGggd2FsayB3aXRoIGF0dGFjaGVkIHJvb3QuCisJICogV2hlbiB3YWxraW5nIHBhcmVudCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZQorCSAqIGRvbid0IGhhdmUgYSBwYXJhbGxlbCByZW5hbWUgaGFwcGVuaW5nCisJICovCisJZG93bl9yZWFkKCZ2OXNlcy0+cmVuYW1lX3NlbSk7CisJbiAgPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KHY5c2VzLCBkZW50cnksICZ3bmFtZXMpOworCWlmIChuIDwgMCkgeworCQlmaWQgPSBFUlJfUFRSKG4pOworCQlnb3RvIGVycl9vdXQ7CisJfQogCWNsb25lID0gMTsKIAlpID0gMDsKIAl3aGlsZSAoaSA8IG4pIHsKIAkJbCA9IG1pbihuIC0gaSwgUDlfTUFYV0VMRU0pOworCQkvKgorCQkgKiBXZSBuZWVkIHRvIGhvbGQgcmVuYW1lIGxvY2sgd2hlbiBkb2luZyBhIG11bHRpcGF0aAorCQkgKiB3YWxrIHRvIGVuc3VyZSBub25lIG9mIHRoZSBwYXRjaCBjb21wb25lbnQgY2hhbmdlCisJCSAqLwogCQlmaWQgPSBwOV9jbGllbnRfd2FsayhmaWQsIGwsICZ3bmFtZXNbaV0sIGNsb25lKTsKIAkJaWYgKElTX0VSUihmaWQpKSB7CiAJCQlpZiAob2xkX2ZpZCkgewpAQCAtMTkzLDE1ICsyMzQsMTcgQEAKIAkJCQlwOV9jbGllbnRfY2x1bmsob2xkX2ZpZCk7CiAJCQl9CiAJCQlrZnJlZSh3bmFtZXMpOwotCQkJcmV0dXJuIGZpZDsKKwkJCWdvdG8gZXJyX291dDsKIAkJfQogCQlvbGRfZmlkID0gZmlkOwogCQlpICs9IGw7CiAJCWNsb25lID0gMDsKIAl9Ci0KIAlrZnJlZSh3bmFtZXMpOworZmlkX291dDoKIAl2OWZzX2ZpZF9hZGQoZGVudHJ5LCBmaWQpOworZXJyX291dDoKKwl1cF9yZWFkKCZ2OXNlcy0+cmVuYW1lX3NlbSk7CiAJcmV0dXJuIGZpZDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvOXAvdjlmcy5jIGIvZnMvOXAvdjlmcy5jCmluZGV4IGY4Yjg2ZTkuLjM4ZGMwZTAgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Y5ZnMuYworKysgYi9mcy85cC92OWZzLmMKQEAgLTIzNyw2ICsyMzcsNyBAQAogCQlfX3B1dG5hbWUodjlzZXMtPnVuYW1lKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJfQorCWluaXRfcndzZW0oJnY5c2VzLT5yZW5hbWVfc2VtKTsKIAogCXJjID0gYmRpX3NldHVwX2FuZF9yZWdpc3RlcigmdjlzZXMtPmJkaSwgIjlwIiwgQkRJX0NBUF9NQVBfQ09QWSk7CiAJaWYgKHJjKSB7CkBAIC0yNzgsNyArMjc5LDcgQEAKIAl2OXNlcy0+bWF4ZGF0YSA9IHY5c2VzLT5jbG50LT5tc2l6ZSAtIFA5X0lPSERSU1o7CiAKIAkvKiBmb3IgbGVnYWN5IG1vZGUsIGZhbGwgYmFjayB0byBWOUZTX0FDQ0VTU19BTlkgKi8KLQlpZiAoIXY5ZnNfcHJvdG9fZG90dSh2OXNlcykgJiYKKwlpZiAoISh2OWZzX3Byb3RvX2RvdHUodjlzZXMpIHx8IHY5ZnNfcHJvdG9fZG90bCh2OXNlcykpICYmCiAJCSgodjlzZXMtPmZsYWdzJlY5RlNfQUNDRVNTX01BU0spID09IFY5RlNfQUNDRVNTX1VTRVIpKSB7CiAKIAkJdjlzZXMtPmZsYWdzICY9IH5WOUZTX0FDQ0VTU19NQVNLOwpkaWZmIC0tZ2l0IGEvZnMvOXAvdjlmcy5oIGIvZnMvOXAvdjlmcy5oCmluZGV4IGJlYzRkMGIuLjRjOTYzYzkgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Y5ZnMuaAorKysgYi9mcy85cC92OWZzLmgKQEAgLTEwNCw2ICsxMDQsNyBAQAogCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7CS8qIDlwIGNsaWVudCAqLwogCXN0cnVjdCBsaXN0X2hlYWQgc2xpc3Q7IC8qIGxpc3Qgb2Ygc2Vzc2lvbnMgcmVnaXN0ZXJlZCB3aXRoIHY5ZnMgKi8KIAlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyBiZGk7CisJc3RydWN0IHJ3X3NlbWFwaG9yZSByZW5hbWVfc2VtOwogfTsKIAogc3RydWN0IHA5X2ZpZCAqdjlmc19zZXNzaW9uX2luaXQoc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICosIGNvbnN0IGNoYXIgKiwKZGlmZiAtLWdpdCBhL2ZzLzlwL3Y5ZnNfdmZzLmggYi9mcy85cC92OWZzX3Zmcy5oCmluZGV4IDMyZWY0MDAuLmY0N2M2YmIgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Y5ZnNfdmZzLmgKKysrIGIvZnMvOXAvdjlmc192ZnMuaApAQCAtNTUsNiArNTUsNyBAQAogdm9pZCB2OWZzX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogaW5vX3Qgdjlmc19xaWQyaW5vKHN0cnVjdCBwOV9xaWQgKnFpZCk7CiB2b2lkIHY5ZnNfc3RhdDJpbm9kZShzdHJ1Y3QgcDlfd3N0YXQgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKK3ZvaWQgdjlmc19zdGF0Mmlub2RlX2RvdGwoc3RydWN0IHA5X3N0YXRfZG90bCAqLCBzdHJ1Y3QgaW5vZGUgKik7CiBpbnQgdjlmc19kaXJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCk7CiBpbnQgdjlmc19maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwogdm9pZCB2OWZzX2lub2RlMnN0YXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHA5X3dzdGF0ICpzdGF0KTsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19kaXIuYyBiL2ZzLzlwL3Zmc19kaXIuYwppbmRleCBkNjFlM2IyLi4xNmM4YTJhIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfZGlyLmMKKysrIGIvZnMvOXAvdmZzX2Rpci5jCkBAIC04Nyw2ICs4Nyw0MiBAQAogfQogCiAvKioKKyAqIHY5ZnNfYWxsb2NfcmRpcl9idWYgLSBBbGxvY2F0ZSBidWZmZXIgdXNlZCBmb3IgcmVhZCBhbmQgcmVhZGRpcgorICogQGZpbHA6IG9wZW5lZCBmaWxlIHN0cnVjdHVyZQorICogQGJ1ZmxlbjogTGVuZ3RoIGluIGJ5dGVzIG9mIGJ1ZmZlciB0byBhbGxvY2F0ZQorICoKKyAqLworCitzdGF0aWMgaW50IHY5ZnNfYWxsb2NfcmRpcl9idWYoc3RydWN0IGZpbGUgKmZpbHAsIGludCBidWZsZW4pCit7CisJc3RydWN0IHA5X3JkaXIgKnJkaXI7CisJc3RydWN0IHA5X2ZpZCAqZmlkOworCWludCBlcnIgPSAwOworCisJZmlkID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWlmICghZmlkLT5yZGlyKSB7CisJCXJkaXIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfcmRpcikgKyBidWZsZW4sIEdGUF9LRVJORUwpOworCisJCWlmIChyZGlyID09IE5VTEwpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJc3Bpbl9sb2NrKCZmaWxwLT5mX2RlbnRyeS0+ZF9sb2NrKTsKKwkJaWYgKCFmaWQtPnJkaXIpIHsKKwkJCXJkaXItPmJ1ZiA9ICh1aW50OF90ICopcmRpciArIHNpemVvZihzdHJ1Y3QgcDlfcmRpcik7CisJCQltdXRleF9pbml0KCZyZGlyLT5tdXRleCk7CisJCQlyZGlyLT5oZWFkID0gcmRpci0+dGFpbCA9IDA7CisJCQlmaWQtPnJkaXIgPSAodm9pZCAqKSByZGlyOworCQkJcmRpciA9IE5VTEw7CisJCX0KKwkJc3Bpbl91bmxvY2soJmZpbHAtPmZfZGVudHJ5LT5kX2xvY2spOworCQlrZnJlZShyZGlyKTsKKwl9CitleGl0OgorCXJldHVybiBlcnI7Cit9CisKKy8qKgogICogdjlmc19kaXJfcmVhZGRpciAtIHJlYWQgYSBkaXJlY3RvcnkKICAqIEBmaWxwOiBvcGVuZWQgZmlsZSBzdHJ1Y3R1cmUKICAqIEBkaXJlbnQ6IGRpcmVjdG9yeSBzdHJ1Y3R1cmUgPz8/CkBAIC0xMDksMjUgKzE0NSw5IEBACiAKIAlidWZsZW4gPSBmaWQtPmNsbnQtPm1zaXplIC0gUDlfSU9IRFJTWjsKIAotCS8qIGFsbG9jYXRlIHJkaXIgb24gZGVtYW5kICovCi0JaWYgKCFmaWQtPnJkaXIpIHsKLQkJcmRpciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV9yZGlyKSArIGJ1ZmxlbiwgR0ZQX0tFUk5FTCk7Ci0KLQkJaWYgKHJkaXIgPT0gTlVMTCkgewotCQkJZXJyID0gLUVOT01FTTsKLQkJCWdvdG8gZXhpdDsKLQkJfQotCQlzcGluX2xvY2soJmZpbHAtPmZfZGVudHJ5LT5kX2xvY2spOwotCQlpZiAoIWZpZC0+cmRpcikgewotCQkJcmRpci0+YnVmID0gKHVpbnQ4X3QgKilyZGlyICsgc2l6ZW9mKHN0cnVjdCBwOV9yZGlyKTsKLQkJCW11dGV4X2luaXQoJnJkaXItPm11dGV4KTsKLQkJCXJkaXItPmhlYWQgPSByZGlyLT50YWlsID0gMDsKLQkJCWZpZC0+cmRpciA9ICh2b2lkICopIHJkaXI7Ci0JCQlyZGlyID0gTlVMTDsKLQkJfQotCQlzcGluX3VubG9jaygmZmlscC0+Zl9kZW50cnktPmRfbG9jayk7Ci0JCWtmcmVlKHJkaXIpOwotCX0KKwllcnIgPSB2OWZzX2FsbG9jX3JkaXJfYnVmKGZpbHAsIGJ1Zmxlbik7CisJaWYgKGVycikKKwkJZ290byBleGl0OwogCXJkaXIgPSAoc3RydWN0IHA5X3JkaXIgKikgZmlkLT5yZGlyOwogCiAJZXJyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZyZGlyLT5tdXRleCk7CkBAIC0xNDYsNyArMTY2LDcgQEAKIAkJd2hpbGUgKHJkaXItPmhlYWQgPCByZGlyLT50YWlsKSB7CiAJCQlwOXN0YXRfaW5pdCgmc3QpOwogCQkJZXJyID0gcDlzdGF0X3JlYWQocmRpci0+YnVmICsgcmRpci0+aGVhZCwKLQkJCQkJCWJ1ZmxlbiAtIHJkaXItPmhlYWQsICZzdCwKKwkJCQkJCXJkaXItPnRhaWwgLSByZGlyLT5oZWFkLCAmc3QsCiAJCQkJCQlmaWQtPmNsbnQtPnByb3RvX3ZlcnNpb24pOwogCQkJaWYgKGVycikgewogCQkJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAicmV0dXJuZWQgJWRcbiIsIGVycik7CkBAIC0xNzYsNiArMTk2LDg4IEBACiAJcmV0dXJuIGVycjsKIH0KIAorLyoqCisgKiB2OWZzX2Rpcl9yZWFkZGlyX2RvdGwgLSByZWFkIGEgZGlyZWN0b3J5CisgKiBAZmlscDogb3BlbmVkIGZpbGUgc3RydWN0dXJlCisgKiBAZGlyZW50OiBidWZmZXIgdG8gZmlsbCBkaXJlbnQgc3RydWN0dXJlcworICogQGZpbGxkaXI6IGZ1bmN0aW9uIHRvIHBvcHVsYXRlIGRpcmVudCBzdHJ1Y3R1cmVzCisgKgorICovCitzdGF0aWMgaW50IHY5ZnNfZGlyX3JlYWRkaXJfZG90bChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqZGlyZW50LAorCQkJCQkJZmlsbGRpcl90IGZpbGxkaXIpCit7CisJaW50IG92ZXI7CisJaW50IGVyciA9IDA7CisJc3RydWN0IHA5X2ZpZCAqZmlkOworCWludCBidWZsZW47CisJc3RydWN0IHA5X3JkaXIgKnJkaXI7CisJc3RydWN0IHA5X2RpcmVudCBjdXJkaXJlbnQ7CisJdTY0IG9sZG9mZnNldCA9IDA7CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIm5hbWUgJXNcbiIsIGZpbHAtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lKTsKKwlmaWQgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisKKwlidWZsZW4gPSBmaWQtPmNsbnQtPm1zaXplIC0gUDlfUkVBRERJUkhEUlNaOworCisJZXJyID0gdjlmc19hbGxvY19yZGlyX2J1ZihmaWxwLCBidWZsZW4pOworCWlmIChlcnIpCisJCWdvdG8gZXhpdDsKKwlyZGlyID0gKHN0cnVjdCBwOV9yZGlyICopIGZpZC0+cmRpcjsKKworCWVyciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcmRpci0+bXV0ZXgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwl3aGlsZSAoZXJyID09IDApIHsKKwkJaWYgKHJkaXItPnRhaWwgPT0gcmRpci0+aGVhZCkgeworCQkJZXJyID0gcDlfY2xpZW50X3JlYWRkaXIoZmlkLCByZGlyLT5idWYsIGJ1ZmxlbiwKKwkJCQkJCQkJZmlscC0+Zl9wb3MpOworCQkJaWYgKGVyciA8PSAwKQorCQkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OworCisJCQlyZGlyLT5oZWFkID0gMDsKKwkJCXJkaXItPnRhaWwgPSBlcnI7CisJCX0KKworCQl3aGlsZSAocmRpci0+aGVhZCA8IHJkaXItPnRhaWwpIHsKKworCQkJZXJyID0gcDlkaXJlbnRfcmVhZChyZGlyLT5idWYgKyByZGlyLT5oZWFkLAorCQkJCQkJYnVmbGVuIC0gcmRpci0+aGVhZCwgJmN1cmRpcmVudCwKKwkJCQkJCWZpZC0+Y2xudC0+cHJvdG9fdmVyc2lvbik7CisJCQlpZiAoZXJyIDwgMCkgeworCQkJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAicmV0dXJuZWQgJWRcbiIsIGVycik7CisJCQkJZXJyID0gLUVJTzsKKwkJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKwkJCX0KKworCQkJLyogZF9vZmYgaW4gZGlyZW50IHN0cnVjdHVyZSB0cmFja3MgdGhlIG9mZnNldCBpbnRvCisJCQkgKiB0aGUgbmV4dCBkaXJlbnQgaW4gdGhlIGRpci4gSG93ZXZlciwgZmlsbGRpcigpCisJCQkgKiBleHBlY3RzIG9mZnNldCBpbnRvIHRoZSBjdXJyZW50IGRpcmVudC4gSGVuY2UKKwkJCSAqIHdoaWxlIGNhbGxpbmcgZmlsbGRpciBzZW5kIHRoZSBvZmZzZXQgZnJvbSB0aGUKKwkJCSAqIHByZXZpb3VzIGRpcmVudCBzdHJ1Y3R1cmUuCisJCQkgKi8KKwkJCW92ZXIgPSBmaWxsZGlyKGRpcmVudCwgY3VyZGlyZW50LmRfbmFtZSwKKwkJCQkJc3RybGVuKGN1cmRpcmVudC5kX25hbWUpLAorCQkJCQlvbGRvZmZzZXQsIHY5ZnNfcWlkMmlubygmY3VyZGlyZW50LnFpZCksCisJCQkJCWN1cmRpcmVudC5kX3R5cGUpOworCQkJb2xkb2Zmc2V0ID0gY3VyZGlyZW50LmRfb2ZmOworCisJCQlpZiAob3ZlcikgeworCQkJCWVyciA9IDA7CisJCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CisJCQl9CisKKwkJCWZpbHAtPmZfcG9zID0gY3VyZGlyZW50LmRfb2ZmOworCQkJcmRpci0+aGVhZCArPSBlcnI7CisJCX0KKwl9CisKK3VubG9ja19hbmRfZXhpdDoKKwltdXRleF91bmxvY2soJnJkaXItPm11dGV4KTsKK2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKwogCiAvKioKICAqIHY5ZnNfZGlyX3JlbGVhc2UgLSBjbG9zZSBhIGRpcmVjdG9yeQpAQCAtMjA3LDcgKzMwOSw3IEBACiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHY5ZnNfZGlyX29wZXJhdGlvbnNfZG90bCA9IHsKIAkucmVhZCA9IGdlbmVyaWNfcmVhZF9kaXIsCiAJLmxsc2VlayA9IGdlbmVyaWNfZmlsZV9sbHNlZWssCi0JLnJlYWRkaXIgPSB2OWZzX2Rpcl9yZWFkZGlyLAorCS5yZWFkZGlyID0gdjlmc19kaXJfcmVhZGRpcl9kb3RsLAogCS5vcGVuID0gdjlmc19maWxlX29wZW4sCiAJLnJlbGVhc2UgPSB2OWZzX2Rpcl9yZWxlYXNlLAogfTsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19maWxlLmMgYi9mcy85cC92ZnNfZmlsZS5jCmluZGV4IDJiZWRjNmMuLmU5N2M5MmIgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19maWxlLmMKKysrIGIvZnMvOXAvdmZzX2ZpbGUuYwpAQCAtNTksOSArNTksMTMgQEAKIAlzdHJ1Y3QgcDlfZmlkICpmaWQ7CiAJaW50IG9tb2RlOwogCi0JUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJpbm9kZTogJXAgZmlsZTogJXAgXG4iLCBpbm9kZSwgZmlsZSk7CisJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJpbm9kZTogJXAgZmlsZTogJXBcbiIsIGlub2RlLCBmaWxlKTsKIAl2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMoaW5vZGUpOwotCW9tb2RlID0gdjlmc191ZmxhZ3Myb21vZGUoZmlsZS0+Zl9mbGFncywgdjlmc19wcm90b19kb3R1KHY5c2VzKSk7CisJaWYgKHY5ZnNfcHJvdG9fZG90bCh2OXNlcykpCisJCW9tb2RlID0gZmlsZS0+Zl9mbGFnczsKKwllbHNlCisJCW9tb2RlID0gdjlmc191ZmxhZ3Myb21vZGUoZmlsZS0+Zl9mbGFncywKKwkJCQkJdjlmc19wcm90b19kb3R1KHY5c2VzKSk7CiAJZmlkID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWlmICghZmlkKSB7CiAJCWZpZCA9IHY5ZnNfZmlkX2Nsb25lKGZpbGUtPmZfcGF0aC5kZW50cnkpOwpAQCAtNzMsMTEgKzc3LDEyIEBACiAJCQlwOV9jbGllbnRfY2x1bmsoZmlkKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KLQkJaWYgKG9tb2RlICYgUDlfT1RSVU5DKSB7CisJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19UUlVOQykgewogCQkJaV9zaXplX3dyaXRlKGlub2RlLCAwKTsKIAkJCWlub2RlLT5pX2Jsb2NrcyA9IDA7CiAJCX0KLQkJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BUFBFTkQpICYmICghdjlmc19wcm90b19kb3R1KHY5c2VzKSkpCisJCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQVBQRU5EKSAmJgorCQkJKCF2OWZzX3Byb3RvX2RvdHUodjlzZXMpICYmICF2OWZzX3Byb3RvX2RvdGwodjlzZXMpKSkKIAkJCWdlbmVyaWNfZmlsZV9sbHNlZWsoZmlsZSwgMCwgU0VFS19FTkQpOwogCX0KIApAQCAtMTM5LDcgKzE0NCw3IEBACiB2OWZzX2ZpbGVfcmVhZG4oc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgKmRhdGEsIGNoYXIgX191c2VyICp1ZGF0YSwgdTMyIGNvdW50LAogCSAgICAgICB1NjQgb2Zmc2V0KQogewotCWludCBuLCB0b3RhbDsKKwlpbnQgbiwgdG90YWwsIHNpemU7CiAJc3RydWN0IHA5X2ZpZCAqZmlkID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCiAJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJmaWQgJWQgb2Zmc2V0ICVsbHUgY291bnQgJWRcbiIsIGZpZC0+ZmlkLApAQCAtMTQ3LDYgKzE1Miw3IEBACiAKIAluID0gMDsKIAl0b3RhbCA9IDA7CisJc2l6ZSA9IGZpZC0+aW91bml0ID8gZmlkLT5pb3VuaXQgOiBmaWQtPmNsbnQtPm1zaXplIC0gUDlfSU9IRFJTWjsKIAlkbyB7CiAJCW4gPSBwOV9jbGllbnRfcmVhZChmaWQsIGRhdGEsIHVkYXRhLCBvZmZzZXQsIGNvdW50KTsKIAkJaWYgKG4gPD0gMCkKQEAgLTE2MCw3ICsxNjYsNyBAQAogCQlvZmZzZXQgKz0gbjsKIAkJY291bnQgLT0gbjsKIAkJdG90YWwgKz0gbjsKLQl9IHdoaWxlIChjb3VudCA+IDAgJiYgbiA9PSAoZmlkLT5jbG50LT5tc2l6ZSAtIFA5X0lPSERSU1opKTsKKwl9IHdoaWxlIChjb3VudCA+IDAgJiYgbiA9PSBzaXplKTsKIAogCWlmIChuIDwgMCkKIAkJdG90YWwgPSBuOwpAQCAtMTgzLDExICsxODksMTMgQEAKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBwOV9maWQgKmZpZDsKKwlzaXplX3Qgc2l6ZTsKIAogCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiY291bnQgJXp1IG9mZnNldCAlbGxkXG4iLCBjb3VudCwgKm9mZnNldCk7CiAJZmlkID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCi0JaWYgKGNvdW50ID4gKGZpZC0+Y2xudC0+bXNpemUgLSBQOV9JT0hEUlNaKSkKKwlzaXplID0gZmlkLT5pb3VuaXQgPyBmaWQtPmlvdW5pdCA6IGZpZC0+Y2xudC0+bXNpemUgLSBQOV9JT0hEUlNaOworCWlmIChjb3VudCA+IHNpemUpCiAJCXJldCA9IHY5ZnNfZmlsZV9yZWFkbihmaWxwLCBOVUxMLCB1ZGF0YSwgY291bnQsICpvZmZzZXQpOwogCWVsc2UKIAkJcmV0ID0gcDlfY2xpZW50X3JlYWQoZmlkLCBOVUxMLCB1ZGF0YSwgKm9mZnNldCwgY291bnQpOwpAQCAtMjI0LDkgKzIzMiw3IEBACiAJZmlkID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWNsbnQgPSBmaWQtPmNsbnQ7CiAKLQlyc2l6ZSA9IGZpZC0+aW91bml0OwotCWlmICghcnNpemUgfHwgcnNpemUgPiBjbG50LT5tc2l6ZS1QOV9JT0hEUlNaKQotCQlyc2l6ZSA9IGNsbnQtPm1zaXplIC0gUDlfSU9IRFJTWjsKKwlyc2l6ZSA9IGZpZC0+aW91bml0ID8gZmlkLT5pb3VuaXQgOiBjbG50LT5tc2l6ZSAtIFA5X0lPSERSU1o7CiAKIAlkbyB7CiAJCWlmIChjb3VudCA8IHJzaXplKQpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlLmMgYi9mcy85cC92ZnNfaW5vZGUuYwppbmRleCA0MzMxYjNiLi42ZTk0ZjMyIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfaW5vZGUuYworKysgYi9mcy85cC92ZnNfaW5vZGUuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CiAjaW5jbHVkZSA8bmV0LzlwLzlwLmg+CiAjaW5jbHVkZSA8bmV0LzlwL2NsaWVudC5oPgogCkBAIC00Miw2ICs0Myw3IEBACiAjaW5jbHVkZSAidjlmc192ZnMuaCIKICNpbmNsdWRlICJmaWQuaCIKICNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInhhdHRyLmgiCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB2OWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHY5ZnNfZGlyX2lub2RlX29wZXJhdGlvbnNfZG90dTsKQEAgLTIzNiw2ICsyMzgsNDEgQEAKICNlbmRpZgogCiAvKioKKyAqIHY5ZnNfZ2V0X2ZzZ2lkX2Zvcl9jcmVhdGUgLSBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBnaWQgZm9yIGNyZWF0aW5nIGEKKyAqIG5ldyBmaWxlIHN5c3RlbSBvYmplY3QuIFRoaXMgY2hlY2tzIHRoZSBTX0lTR0lEIHRvIGRldGVybWluZSB0aGUgb3duaW5nCisgKiBncm91cCBvZiB0aGUgbmV3IGZpbGUgc3lzdGVtIG9iamVjdC4KKyAqLworCitzdGF0aWMgZ2lkX3Qgdjlmc19nZXRfZnNnaWRfZm9yX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpcl9pbm9kZSkKK3sKKwlCVUdfT04oZGlyX2lub2RlID09IE5VTEwpOworCisJaWYgKGRpcl9pbm9kZS0+aV9tb2RlICYgU19JU0dJRCkgeworCQkvKiBzZXRfZ2lkIGJpdCBpcyBzZXQuKi8KKwkJcmV0dXJuIGRpcl9pbm9kZS0+aV9naWQ7CisJfQorCXJldHVybiBjdXJyZW50X2ZzZ2lkKCk7Cit9CisKKy8qKgorICogdjlmc19kZW50cnlfZnJvbV9kaXJfaW5vZGUgLSBoZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBkZW50cnkgZnJvbQorICogZGlyIGlub2RlLgorICoKKyAqLworCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqdjlmc19kZW50cnlfZnJvbV9kaXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisKKwlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwkvKiBEaXJlY3Rvcnkgc2hvdWxkIGhhdmUgb25seSBvbmUgZW50cnkuICovCisJQlVHX09OKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgJiYgIWxpc3RfaXNfc2luZ3VsYXIoJmlub2RlLT5pX2RlbnRyeSkpOworCWRlbnRyeSA9IGxpc3RfZW50cnkoaW5vZGUtPmlfZGVudHJ5Lm5leHQsIHN0cnVjdCBkZW50cnksIGRfYWxpYXMpOworCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJcmV0dXJuIGRlbnRyeTsKK30KKworLyoqCiAgKiB2OWZzX2dldF9pbm9kZSAtIGhlbHBlciBmdW5jdGlvbiB0byBzZXR1cCBhbiBpbm9kZQogICogQHNiOiBzdXBlcmJsb2NrCiAgKiBAbW9kZTogbW9kZSB0byBzZXR1cCBpbm9kZSB3aXRoCkBAIC0yNjcsNyArMzA0LDEzIEBACiAJY2FzZSBTX0lGQkxLOgogCWNhc2UgU19JRkNIUjoKIAljYXNlIFNfSUZTT0NLOgotCQlpZiAoIXY5ZnNfcHJvdG9fZG90dSh2OXNlcykpIHsKKwkJaWYgKHY5ZnNfcHJvdG9fZG90bCh2OXNlcykpIHsKKwkJCWlub2RlLT5pX29wID0gJnY5ZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zX2RvdGw7CisJCQlpbm9kZS0+aV9mb3AgPSAmdjlmc19maWxlX29wZXJhdGlvbnNfZG90bDsKKwkJfSBlbHNlIGlmICh2OWZzX3Byb3RvX2RvdHUodjlzZXMpKSB7CisJCQlpbm9kZS0+aV9vcCA9ICZ2OWZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKKwkJCWlub2RlLT5pX2ZvcCA9ICZ2OWZzX2ZpbGVfb3BlcmF0aW9uczsKKwkJfSBlbHNlIHsKIAkJCVA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsCiAJCQkJICAgInNwZWNpYWwgZmlsZXMgd2l0aG91dCBleHRlbmRlZCBtb2RlXG4iKTsKIAkJCWVyciA9IC1FSU5WQUw7CkBAIC0zOTYsMjMgKzQzOSwxNCBAQAogI2VuZGlmCiB9CiAKLS8qKgotICogdjlmc19pbm9kZV9mcm9tX2ZpZCAtIHBvcHVsYXRlIGFuIGlub2RlIGJ5IGlzc3VpbmcgYSBhdHRyaWJ1dGUgcmVxdWVzdAotICogQHY5c2VzOiBzZXNzaW9uIGluZm9ybWF0aW9uCi0gKiBAZmlkOiBmaWQgdG8gaXNzdWUgYXR0cmlidXRlIHJlcXVlc3QgZm9yCi0gKiBAc2I6IHN1cGVyYmxvY2sgb24gd2hpY2ggdG8gY3JlYXRlIGlub2RlCi0gKgotICovCi0KIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKgotdjlmc19pbm9kZV9mcm9tX2ZpZChzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzLCBzdHJ1Y3QgcDlfZmlkICpmaWQsCit2OWZzX2lub2RlKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIHN0cnVjdCBwOV9maWQgKmZpZCwKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCWludCBlcnIsIHVtb2RlOwotCXN0cnVjdCBpbm9kZSAqcmV0OworCXN0cnVjdCBpbm9kZSAqcmV0ID0gTlVMTDsKIAlzdHJ1Y3QgcDlfd3N0YXQgKnN0OwogCi0JcmV0ID0gTlVMTDsKIAlzdCA9IHA5X2NsaWVudF9zdGF0KGZpZCk7CiAJaWYgKElTX0VSUihzdCkpCiAJCXJldHVybiBFUlJfQ0FTVChzdCk7CkBAIC00MzMsMTUgKzQ2Nyw2MiBAQAogI2VuZGlmCiAJcDlzdGF0X2ZyZWUoc3QpOwogCWtmcmVlKHN0KTsKLQogCXJldHVybiByZXQ7Ci0KIGVycm9yOgogCXA5c3RhdF9mcmVlKHN0KTsKIAlrZnJlZShzdCk7CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAorc3RhdGljIHN0cnVjdCBpbm9kZSAqCit2OWZzX2lub2RlX2RvdGwoc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcywgc3RydWN0IHA5X2ZpZCAqZmlkLAorCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGlub2RlICpyZXQgPSBOVUxMOworCWludCBlcnI7CisJc3RydWN0IHA5X3N0YXRfZG90bCAqc3Q7CisKKwlzdCA9IHA5X2NsaWVudF9nZXRhdHRyX2RvdGwoZmlkLCBQOV9TVEFUU19CQVNJQyk7CisJaWYgKElTX0VSUihzdCkpCisJCXJldHVybiBFUlJfQ0FTVChzdCk7CisKKwlyZXQgPSB2OWZzX2dldF9pbm9kZShzYiwgc3QtPnN0X21vZGUpOworCWlmIChJU19FUlIocmV0KSkgeworCQllcnIgPSBQVFJfRVJSKHJldCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJdjlmc19zdGF0Mmlub2RlX2RvdGwoc3QsIHJldCk7CisJcmV0LT5pX2lubyA9IHY5ZnNfcWlkMmlubygmc3QtPnFpZCk7CisjaWZkZWYgQ09ORklHXzlQX0ZTQ0FDSEUKKwl2OWZzX3Zjb29raWVfc2V0X3FpZChyZXQsICZzdC0+cWlkKTsKKwl2OWZzX2NhY2hlX2lub2RlX2dldF9jb29raWUocmV0KTsKKyNlbmRpZgorCWtmcmVlKHN0KTsKKwlyZXR1cm4gcmV0OworZXJyb3I6CisJa2ZyZWUoc3QpOworCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKKy8qKgorICogdjlmc19pbm9kZV9mcm9tX2ZpZCAtIEhlbHBlciByb3V0aW5lIHRvIHBvcHVsYXRlIGFuIGlub2RlIGJ5CisgKiBpc3N1aW5nIGEgYXR0cmlidXRlIHJlcXVlc3QKKyAqIEB2OXNlczogc2Vzc2lvbiBpbmZvcm1hdGlvbgorICogQGZpZDogZmlkIHRvIGlzc3VlIGF0dHJpYnV0ZSByZXF1ZXN0IGZvcgorICogQHNiOiBzdXBlcmJsb2NrIG9uIHdoaWNoIHRvIGNyZWF0ZSBpbm9kZQorICoKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKgordjlmc19pbm9kZV9mcm9tX2ZpZChzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzLCBzdHJ1Y3QgcDlfZmlkICpmaWQsCisJCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCWlmICh2OWZzX3Byb3RvX2RvdGwodjlzZXMpKQorCQlyZXR1cm4gdjlmc19pbm9kZV9kb3RsKHY5c2VzLCBmaWQsIHNiKTsKKwllbHNlCisJCXJldHVybiB2OWZzX2lub2RlKHY5c2VzLCBmaWQsIHNiKTsKK30KKwogLyoqCiAgKiB2OWZzX3JlbW92ZSAtIGhlbHBlciBmdW5jdGlvbiB0byByZW1vdmUgZmlsZXMgYW5kIGRpcmVjdG9yaWVzCiAgKiBAZGlyOiBkaXJlY3RvcnkgaW5vZGUgdGhhdCBpcyBiZWluZyBkZWxldGVkCkBAIC01NjMsNiArNjQ0LDExOCBAQAogfQogCiAvKioKKyAqIHY5ZnNfdmZzX2NyZWF0ZV9kb3RsIC0gVkZTIGhvb2sgdG8gY3JlYXRlIGZpbGVzIGZvciA5UDIwMDAuTCBwcm90b2NvbC4KKyAqIEBkaXI6IGRpcmVjdG9yeSBpbm9kZSB0aGF0IGlzIGJlaW5nIGNyZWF0ZWQKKyAqIEBkZW50cnk6ICBkZW50cnkgdGhhdCBpcyBiZWluZyBkZWxldGVkCisgKiBAbW9kZTogY3JlYXRlIHBlcm1pc3Npb25zCisgKiBAbmQ6IHBhdGggaW5mb3JtYXRpb24KKyAqCisgKi8KKworc3RhdGljIGludAordjlmc192ZnNfY3JlYXRlX2RvdGwoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsCisJCXN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCWludCBlcnIgPSAwOworCWNoYXIgKm5hbWUgPSBOVUxMOworCWdpZF90IGdpZDsKKwlpbnQgZmxhZ3M7CisJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsKKwlzdHJ1Y3QgcDlfZmlkICpmaWQgPSBOVUxMOworCXN0cnVjdCBwOV9maWQgKmRmaWQsICpvZmlkOworCXN0cnVjdCBmaWxlICpmaWxwOworCXN0cnVjdCBwOV9xaWQgcWlkOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwl2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMoZGlyKTsKKwlpZiAobmQgJiYgbmQtPmZsYWdzICYgTE9PS1VQX09QRU4pCisJCWZsYWdzID0gbmQtPmludGVudC5vcGVuLmZsYWdzIC0gMTsKKwllbHNlCisJCWZsYWdzID0gT19SRFdSOworCisJbmFtZSA9IChjaGFyICopIGRlbnRyeS0+ZF9uYW1lLm5hbWU7CisJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJ2OWZzX3Zmc19jcmVhdGVfZG90bDogbmFtZTolcyBmbGFnczoweCV4ICIKKwkJCSJtb2RlOjB4JXhcbiIsIG5hbWUsIGZsYWdzLCBtb2RlKTsKKworCWRmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZGVudHJ5LT5kX3BhcmVudCk7CisJaWYgKElTX0VSUihkZmlkKSkgeworCQllcnIgPSBQVFJfRVJSKGRmaWQpOworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgImZpZCBsb29rdXAgZmFpbGVkICVkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIGNsb25lIGEgZmlkIHRvIHVzZSBmb3IgY3JlYXRpb24gKi8KKwlvZmlkID0gcDlfY2xpZW50X3dhbGsoZGZpZCwgMCwgTlVMTCwgMSk7CisJaWYgKElTX0VSUihvZmlkKSkgeworCQllcnIgPSBQVFJfRVJSKG9maWQpOworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgInA5X2NsaWVudF93YWxrIGZhaWxlZCAlZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlnaWQgPSB2OWZzX2dldF9mc2dpZF9mb3JfY3JlYXRlKGRpcik7CisJZXJyID0gcDlfY2xpZW50X2NyZWF0ZV9kb3RsKG9maWQsIG5hbWUsIGZsYWdzLCBtb2RlLCBnaWQsICZxaWQpOworCWlmIChlcnIgPCAwKSB7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLAorCQkJCSJwOV9jbGllbnRfb3Blbl9kb3RsIGZhaWxlZCBpbiBjcmVhdCAlZFxuIiwKKwkJCQllcnIpOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIE5vIG5lZWQgdG8gcG9wdWxhdGUgdGhlIGlub2RlIGlmIHdlIGFyZSBub3Qgb3BlbmluZyB0aGUgZmlsZSBBTkQKKwkgKiBub3QgaW4gY2FjaGVkIG1vZGUuCisJICovCisJaWYgKCF2OXNlcy0+Y2FjaGUgJiYgIShuZCAmJiBuZC0+ZmxhZ3MgJiBMT09LVVBfT1BFTikpIHsKKwkJLyogTm90IGluIGNhY2hlZCBtb2RlLiBObyBuZWVkIHRvIHBvcHVsYXRlIGlub2RlIHdpdGggc3RhdCAqLworCQlkZW50cnktPmRfb3AgPSAmdjlmc19kZW50cnlfb3BlcmF0aW9uczsKKwkJcDlfY2xpZW50X2NsdW5rKG9maWQpOworCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgTlVMTCk7CisJCXJldHVybiAwOworCX0KKworCS8qIE5vdyB3YWxrIGZyb20gdGhlIHBhcmVudCBzbyB3ZSBjYW4gZ2V0IGFuIHVub3BlbmVkIGZpZC4gKi8KKwlmaWQgPSBwOV9jbGllbnRfd2FsayhkZmlkLCAxLCAmbmFtZSwgMSk7CisJaWYgKElTX0VSUihmaWQpKSB7CisJCWVyciA9IFBUUl9FUlIoZmlkKTsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJwOV9jbGllbnRfd2FsayBmYWlsZWQgJWRcbiIsIGVycik7CisJCWZpZCA9IE5VTEw7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogaW5zdGFudGlhdGUgaW5vZGUgYW5kIGFzc2lnbiB0aGUgdW5vcGVuZWQgZmlkIHRvIGRlbnRyeSAqLworCWlub2RlID0gdjlmc19pbm9kZV9mcm9tX2ZpZCh2OXNlcywgZmlkLCBkaXItPmlfc2IpOworCWlmIChJU19FUlIoaW5vZGUpKSB7CisJCWVyciA9IFBUUl9FUlIoaW5vZGUpOworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgImlub2RlIGNyZWF0aW9uIGZhaWxlZCAlZFxuIiwgZXJyKTsKKwkJZ290byBlcnJvcjsKKwl9CisJZGVudHJ5LT5kX29wID0gJnY5ZnNfY2FjaGVkX2RlbnRyeV9vcGVyYXRpb25zOworCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CisJZXJyID0gdjlmc19maWRfYWRkKGRlbnRyeSwgZmlkKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIGlmIHdlIGFyZSBvcGVuaW5nIGEgZmlsZSwgYXNzaWduIHRoZSBvcGVuIGZpZCB0byB0aGUgZmlsZSAqLworCWlmIChuZCAmJiBuZC0+ZmxhZ3MgJiBMT09LVVBfT1BFTikgeworCQlmaWxwID0gbG9va3VwX2luc3RhbnRpYXRlX2ZpbHAobmQsIGRlbnRyeSwgdjlmc19vcGVuX2NyZWF0ZWQpOworCQlpZiAoSVNfRVJSKGZpbHApKSB7CisJCQlwOV9jbGllbnRfY2x1bmsob2ZpZCk7CisJCQlyZXR1cm4gUFRSX0VSUihmaWxwKTsKKwkJfQorCQlmaWxwLT5wcml2YXRlX2RhdGEgPSBvZmlkOworCX0gZWxzZQorCQlwOV9jbGllbnRfY2x1bmsob2ZpZCk7CisKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJaWYgKG9maWQpCisJCXA5X2NsaWVudF9jbHVuayhvZmlkKTsKKwlpZiAoZmlkKQorCQlwOV9jbGllbnRfY2x1bmsoZmlkKTsKKwlyZXR1cm4gZXJyOworfQorCisvKioKICAqIHY5ZnNfdmZzX2NyZWF0ZSAtIFZGUyBob29rIHRvIGNyZWF0ZSBmaWxlcwogICogQGRpcjogZGlyZWN0b3J5IGlub2RlIHRoYXQgaXMgYmVpbmcgY3JlYXRlZAogICogQGRlbnRyeTogIGRlbnRyeSB0aGF0IGlzIGJlaW5nIGRlbGV0ZWQKQEAgLTY1Miw2ICs4NDUsODMgQEAKIAlyZXR1cm4gZXJyOwogfQogCisKKy8qKgorICogdjlmc192ZnNfbWtkaXJfZG90bCAtIFZGUyBta2RpciBob29rIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeQorICogQGRpcjogIGlub2RlIHRoYXQgaXMgYmVpbmcgdW5saW5rZWQKKyAqIEBkZW50cnk6IGRlbnRyeSB0aGF0IGlzIGJlaW5nIHVubGlua2VkCisgKiBAbW9kZTogbW9kZSBmb3IgbmV3IGRpcmVjdG9yeQorICoKKyAqLworCitzdGF0aWMgaW50IHY5ZnNfdmZzX21rZGlyX2RvdGwoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCQkJaW50IG1vZGUpCit7CisJaW50IGVycjsKKwlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzOworCXN0cnVjdCBwOV9maWQgKmZpZCA9IE5VTEwsICpkZmlkID0gTlVMTDsKKwlnaWRfdCBnaWQ7CisJY2hhciAqbmFtZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBwOV9xaWQgcWlkOworCXN0cnVjdCBkZW50cnkgKmRpcl9kZW50cnk7CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIm5hbWUgJXNcbiIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCWVyciA9IDA7CisJdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRpcik7CisKKwltb2RlIHw9IFNfSUZESVI7CisJZGlyX2RlbnRyeSA9IHY5ZnNfZGVudHJ5X2Zyb21fZGlyX2lub2RlKGRpcik7CisJZGZpZCA9IHY5ZnNfZmlkX2xvb2t1cChkaXJfZGVudHJ5KTsKKwlpZiAoSVNfRVJSKGRmaWQpKSB7CisJCWVyciA9IFBUUl9FUlIoZGZpZCk7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiZmlkIGxvb2t1cCBmYWlsZWQgJWRcbiIsIGVycik7CisJCWRmaWQgPSBOVUxMOworCQlnb3RvIGVycm9yOworCX0KKworCWdpZCA9IHY5ZnNfZ2V0X2ZzZ2lkX2Zvcl9jcmVhdGUoZGlyKTsKKwlpZiAoZ2lkIDwgMCkgeworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgInY5ZnNfZ2V0X2ZzZ2lkX2Zvcl9jcmVhdGUgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwluYW1lID0gKGNoYXIgKikgZGVudHJ5LT5kX25hbWUubmFtZTsKKwllcnIgPSBwOV9jbGllbnRfbWtkaXJfZG90bChkZmlkLCBuYW1lLCBtb2RlLCBnaWQsICZxaWQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycm9yOworCisJLyogaW5zdGFudGlhdGUgaW5vZGUgYW5kIGFzc2lnbiB0aGUgdW5vcGVuZWQgZmlkIHRvIHRoZSBkZW50cnkgKi8KKwlpZiAodjlzZXMtPmNhY2hlID09IENBQ0hFX0xPT1NFIHx8IHY5c2VzLT5jYWNoZSA9PSBDQUNIRV9GU0NBQ0hFKSB7CisJCWZpZCA9IHA5X2NsaWVudF93YWxrKGRmaWQsIDEsICZuYW1lLCAxKTsKKwkJaWYgKElTX0VSUihmaWQpKSB7CisJCQllcnIgPSBQVFJfRVJSKGZpZCk7CisJCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgInA5X2NsaWVudF93YWxrIGZhaWxlZCAlZFxuIiwKKwkJCQllcnIpOworCQkJZmlkID0gTlVMTDsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQlpbm9kZSA9IHY5ZnNfaW5vZGVfZnJvbV9maWQodjlzZXMsIGZpZCwgZGlyLT5pX3NiKTsKKwkJaWYgKElTX0VSUihpbm9kZSkpIHsKKwkJCWVyciA9IFBUUl9FUlIoaW5vZGUpOworCQkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJpbm9kZSBjcmVhdGlvbiBmYWlsZWQgJWRcbiIsCisJCQkJZXJyKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJZGVudHJ5LT5kX29wID0gJnY5ZnNfY2FjaGVkX2RlbnRyeV9vcGVyYXRpb25zOworCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOworCQllcnIgPSB2OWZzX2ZpZF9hZGQoZGVudHJ5LCBmaWQpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCWZpZCA9IE5VTEw7CisJfQorZXJyb3I6CisJaWYgKGZpZCkKKwkJcDlfY2xpZW50X2NsdW5rKGZpZCk7CisJcmV0dXJuIGVycjsKK30KKwogLyoqCiAgKiB2OWZzX3Zmc19sb29rdXAgLSBWRlMgbG9va3VwIGhvb2sgdG8gIndhbGsiIHRvIGEgbmV3IGlub2RlCiAgKiBAZGlyOiAgaW5vZGUgdGhhdCBpcyBiZWluZyB3YWxrZWQgZnJvbQpAQCAtNjc4LDYgKzk0OCw3IEBACiAKIAlzYiA9IGRpci0+aV9zYjsKIAl2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMoZGlyKTsKKwkvKiBXZSBjYW4gd2FsayBkX3BhcmVudCBiZWNhdXNlIHdlIGhvbGQgdGhlIGRpci0+aV9tdXRleCAqLwogCWRmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZGVudHJ5LT5kX3BhcmVudCk7CiAJaWYgKElTX0VSUihkZmlkKSkKIAkJcmV0dXJuIEVSUl9DQVNUKGRmaWQpOwpAQCAtNzg1LDI3ICsxMDU2LDMzIEBACiAJCWdvdG8gY2x1bmtfb2xkZGlyOwogCX0KIAorCWRvd25fd3JpdGUoJnY5c2VzLT5yZW5hbWVfc2VtKTsKIAlpZiAodjlmc19wcm90b19kb3RsKHY5c2VzKSkgewogCQlyZXR2YWwgPSBwOV9jbGllbnRfcmVuYW1lKG9sZGZpZCwgbmV3ZGlyZmlkLAogCQkJCQkoY2hhciAqKSBuZXdfZGVudHJ5LT5kX25hbWUubmFtZSk7CiAJCWlmIChyZXR2YWwgIT0gLUVOT1NZUykKIAkJCWdvdG8gY2x1bmtfbmV3ZGlyOwogCX0KKwlpZiAob2xkX2RlbnRyeS0+ZF9wYXJlbnQgIT0gbmV3X2RlbnRyeS0+ZF9wYXJlbnQpIHsKKwkJLyoKKwkJICogOVAgLnUgY2FuIG9ubHkgaGFuZGxlIGZpbGUgcmVuYW1lIGluIHRoZSBzYW1lIGRpcmVjdG9yeQorCQkgKi8KIAotCS8qIDlQIGNhbiBvbmx5IGhhbmRsZSBmaWxlIHJlbmFtZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgKi8KLQlpZiAobWVtY21wKCZvbGRkaXJmaWQtPnFpZCwgJm5ld2RpcmZpZC0+cWlkLCBzaXplb2YobmV3ZGlyZmlkLT5xaWQpKSkgewogCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLAogCQkJCSJvbGQgZGlyIGFuZCBuZXcgZGlyIGFyZSBkaWZmZXJlbnRcbiIpOwogCQlyZXR2YWwgPSAtRVhERVY7CiAJCWdvdG8gY2x1bmtfbmV3ZGlyOwogCX0KLQogCXY5ZnNfYmxhbmtfd3N0YXQoJndzdGF0KTsKIAl3c3RhdC5tdWlkID0gdjlzZXMtPnVuYW1lOwogCXdzdGF0Lm5hbWUgPSAoY2hhciAqKSBuZXdfZGVudHJ5LT5kX25hbWUubmFtZTsKIAlyZXR2YWwgPSBwOV9jbGllbnRfd3N0YXQob2xkZmlkLCAmd3N0YXQpOwogCiBjbHVua19uZXdkaXI6CisJaWYgKCFyZXR2YWwpCisJCS8qIHN1Y2Nlc3NmdWwgcmVuYW1lICovCisJCWRfbW92ZShvbGRfZGVudHJ5LCBuZXdfZGVudHJ5KTsKKwl1cF93cml0ZSgmdjlzZXMtPnJlbmFtZV9zZW0pOwogCXA5X2NsaWVudF9jbHVuayhuZXdkaXJmaWQpOwogCiBjbHVua19vbGRkaXI6CkBAIC04NTMsNiArMTEzMCw0MiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50Cit2OWZzX3Zmc19nZXRhdHRyX2RvdGwoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJIHN0cnVjdCBrc3RhdCAqc3RhdCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXM7CisJc3RydWN0IHA5X2ZpZCAqZmlkOworCXN0cnVjdCBwOV9zdGF0X2RvdGwgKnN0OworCisJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJkZW50cnk6ICVwXG4iLCBkZW50cnkpOworCWVyciA9IC1FUEVSTTsKKwl2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMoZGVudHJ5LT5kX2lub2RlKTsKKwlpZiAodjlzZXMtPmNhY2hlID09IENBQ0hFX0xPT1NFIHx8IHY5c2VzLT5jYWNoZSA9PSBDQUNIRV9GU0NBQ0hFKQorCQlyZXR1cm4gc2ltcGxlX2dldGF0dHIobW50LCBkZW50cnksIHN0YXQpOworCisJZmlkID0gdjlmc19maWRfbG9va3VwKGRlbnRyeSk7CisJaWYgKElTX0VSUihmaWQpKQorCQlyZXR1cm4gUFRSX0VSUihmaWQpOworCisJLyogQXNrIGZvciBhbGwgdGhlIGZpZWxkcyBpbiBzdGF0IHN0cnVjdHVyZS4gU2VydmVyIHdpbGwgcmV0dXJuCisJICogd2hhdGV2ZXIgaXQgc3VwcG9ydHMKKwkgKi8KKworCXN0ID0gcDlfY2xpZW50X2dldGF0dHJfZG90bChmaWQsIFA5X1NUQVRTX0FMTCk7CisJaWYgKElTX0VSUihzdCkpCisJCXJldHVybiBQVFJfRVJSKHN0KTsKKworCXY5ZnNfc3RhdDJpbm9kZV9kb3RsKHN0LCBkZW50cnktPmRfaW5vZGUpOworCWdlbmVyaWNfZmlsbGF0dHIoZGVudHJ5LT5kX2lub2RlLCBzdGF0KTsKKwkvKiBDaGFuZ2UgYmxvY2sgc2l6ZSB0byB3aGF0IHRoZSBzZXJ2ZXIgcmV0dXJuZWQgKi8KKwlzdGF0LT5ibGtzaXplID0gc3QtPnN0X2Jsa3NpemU7CisKKwlrZnJlZShzdCk7CisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogdjlmc192ZnNfc2V0YXR0ciAtIHNldCBmaWxlIG1ldGFkYXRhCiAgKiBAZGVudHJ5OiBmaWxlIHdob3NlIG1ldGFkYXRhIHRvIHNldApAQCAtOTAzLDYgKzEyMTYsNDkgQEAKIH0KIAogLyoqCisgKiB2OWZzX3Zmc19zZXRhdHRyX2RvdGwgLSBzZXQgZmlsZSBtZXRhZGF0YQorICogQGRlbnRyeTogZmlsZSB3aG9zZSBtZXRhZGF0YSB0byBzZXQKKyAqIEBpYXR0cjogbWV0YWRhdGEgYXNzaWdubWVudCBzdHJ1Y3R1cmUKKyAqCisgKi8KKworc3RhdGljIGludCB2OWZzX3Zmc19zZXRhdHRyX2RvdGwoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmlhdHRyKQoreworCWludCByZXR2YWw7CisJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsKKwlzdHJ1Y3QgcDlfZmlkICpmaWQ7CisJc3RydWN0IHA5X2lhdHRyX2RvdGwgcDlhdHRyOworCisJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJcbiIpOworCisJcmV0dmFsID0gaW5vZGVfY2hhbmdlX29rKGRlbnRyeS0+ZF9pbm9kZSwgaWF0dHIpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlwOWF0dHIudmFsaWQgPSBpYXR0ci0+aWFfdmFsaWQ7CisJcDlhdHRyLm1vZGUgPSBpYXR0ci0+aWFfbW9kZTsKKwlwOWF0dHIudWlkID0gaWF0dHItPmlhX3VpZDsKKwlwOWF0dHIuZ2lkID0gaWF0dHItPmlhX2dpZDsKKwlwOWF0dHIuc2l6ZSA9IGlhdHRyLT5pYV9zaXplOworCXA5YXR0ci5hdGltZV9zZWMgPSBpYXR0ci0+aWFfYXRpbWUudHZfc2VjOworCXA5YXR0ci5hdGltZV9uc2VjID0gaWF0dHItPmlhX2F0aW1lLnR2X25zZWM7CisJcDlhdHRyLm10aW1lX3NlYyA9IGlhdHRyLT5pYV9tdGltZS50dl9zZWM7CisJcDlhdHRyLm10aW1lX25zZWMgPSBpYXR0ci0+aWFfbXRpbWUudHZfbnNlYzsKKworCXJldHZhbCA9IC1FUEVSTTsKKwl2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMoZGVudHJ5LT5kX2lub2RlKTsKKwlmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZGVudHJ5KTsKKwlpZiAoSVNfRVJSKGZpZCkpCisJCXJldHVybiBQVFJfRVJSKGZpZCk7CisKKwlyZXR2YWwgPSBwOV9jbGllbnRfc2V0YXR0cihmaWQsICZwOWF0dHIpOworCWlmIChyZXR2YWwgPj0gMCkKKwkJcmV0dmFsID0gaW5vZGVfc2V0YXR0cihkZW50cnktPmRfaW5vZGUsIGlhdHRyKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qKgogICogdjlmc19zdGF0Mmlub2RlIC0gcG9wdWxhdGUgYW4gaW5vZGUgc3RydWN0dXJlIHdpdGggbWlzdGF0IGluZm8KICAqIEBzdGF0OiBQbGFuIDkgbWV0YWRhdGEgKG1pc3RhdCkgc3RydWN0dXJlCiAgKiBAaW5vZGU6IGlub2RlIHRvIHBvcHVsYXRlCkBAIC05ODAsNiArMTMzNiw3NyBAQAogfQogCiAvKioKKyAqIHY5ZnNfc3RhdDJpbm9kZV9kb3RsIC0gcG9wdWxhdGUgYW4gaW5vZGUgc3RydWN0dXJlIHdpdGggc3RhdCBpbmZvCisgKiBAc3RhdDogc3RhdCBzdHJ1Y3R1cmUKKyAqIEBpbm9kZTogaW5vZGUgdG8gcG9wdWxhdGUKKyAqIEBzYjogc3VwZXJibG9jayBvZiBmaWxlc3lzdGVtCisgKgorICovCisKK3ZvaWQKK3Y5ZnNfc3RhdDJpbm9kZV9kb3RsKHN0cnVjdCBwOV9zdGF0X2RvdGwgKnN0YXQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisKKwlpZiAoKHN0YXQtPnN0X3Jlc3VsdF9tYXNrICYgUDlfU1RBVFNfQkFTSUMpID09IFA5X1NUQVRTX0JBU0lDKSB7CisJCWlub2RlLT5pX2F0aW1lLnR2X3NlYyA9IHN0YXQtPnN0X2F0aW1lX3NlYzsKKwkJaW5vZGUtPmlfYXRpbWUudHZfbnNlYyA9IHN0YXQtPnN0X2F0aW1lX25zZWM7CisJCWlub2RlLT5pX210aW1lLnR2X3NlYyA9IHN0YXQtPnN0X210aW1lX3NlYzsKKwkJaW5vZGUtPmlfbXRpbWUudHZfbnNlYyA9IHN0YXQtPnN0X210aW1lX25zZWM7CisJCWlub2RlLT5pX2N0aW1lLnR2X3NlYyA9IHN0YXQtPnN0X2N0aW1lX3NlYzsKKwkJaW5vZGUtPmlfY3RpbWUudHZfbnNlYyA9IHN0YXQtPnN0X2N0aW1lX25zZWM7CisJCWlub2RlLT5pX3VpZCA9IHN0YXQtPnN0X3VpZDsKKwkJaW5vZGUtPmlfZ2lkID0gc3RhdC0+c3RfZ2lkOworCQlpbm9kZS0+aV9ubGluayA9IHN0YXQtPnN0X25saW5rOworCQlpbm9kZS0+aV9tb2RlID0gc3RhdC0+c3RfbW9kZTsKKwkJaW5vZGUtPmlfcmRldiA9IG5ld19kZWNvZGVfZGV2KHN0YXQtPnN0X3JkZXYpOworCisJCWlmICgoU19JU0JMSyhpbm9kZS0+aV9tb2RlKSkgfHwgKFNfSVNDSFIoaW5vZGUtPmlfbW9kZSkpKQorCQkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS0+aV9tb2RlLCBpbm9kZS0+aV9yZGV2KTsKKworCQlpX3NpemVfd3JpdGUoaW5vZGUsIHN0YXQtPnN0X3NpemUpOworCQlpbm9kZS0+aV9ibG9ja3MgPSBzdGF0LT5zdF9ibG9ja3M7CisJfSBlbHNlIHsKKwkJaWYgKHN0YXQtPnN0X3Jlc3VsdF9tYXNrICYgUDlfU1RBVFNfQVRJTUUpIHsKKwkJCWlub2RlLT5pX2F0aW1lLnR2X3NlYyA9IHN0YXQtPnN0X2F0aW1lX3NlYzsKKwkJCWlub2RlLT5pX2F0aW1lLnR2X25zZWMgPSBzdGF0LT5zdF9hdGltZV9uc2VjOworCQl9CisJCWlmIChzdGF0LT5zdF9yZXN1bHRfbWFzayAmIFA5X1NUQVRTX01USU1FKSB7CisJCQlpbm9kZS0+aV9tdGltZS50dl9zZWMgPSBzdGF0LT5zdF9tdGltZV9zZWM7CisJCQlpbm9kZS0+aV9tdGltZS50dl9uc2VjID0gc3RhdC0+c3RfbXRpbWVfbnNlYzsKKwkJfQorCQlpZiAoc3RhdC0+c3RfcmVzdWx0X21hc2sgJiBQOV9TVEFUU19DVElNRSkgeworCQkJaW5vZGUtPmlfY3RpbWUudHZfc2VjID0gc3RhdC0+c3RfY3RpbWVfc2VjOworCQkJaW5vZGUtPmlfY3RpbWUudHZfbnNlYyA9IHN0YXQtPnN0X2N0aW1lX25zZWM7CisJCX0KKwkJaWYgKHN0YXQtPnN0X3Jlc3VsdF9tYXNrICYgUDlfU1RBVFNfVUlEKQorCQkJaW5vZGUtPmlfdWlkID0gc3RhdC0+c3RfdWlkOworCQlpZiAoc3RhdC0+c3RfcmVzdWx0X21hc2sgJiBQOV9TVEFUU19HSUQpCisJCQlpbm9kZS0+aV9naWQgPSBzdGF0LT5zdF9naWQ7CisJCWlmIChzdGF0LT5zdF9yZXN1bHRfbWFzayAmIFA5X1NUQVRTX05MSU5LKQorCQkJaW5vZGUtPmlfbmxpbmsgPSBzdGF0LT5zdF9ubGluazsKKwkJaWYgKHN0YXQtPnN0X3Jlc3VsdF9tYXNrICYgUDlfU1RBVFNfTU9ERSkgeworCQkJaW5vZGUtPmlfbW9kZSA9IHN0YXQtPnN0X21vZGU7CisJCQlpZiAoKFNfSVNCTEsoaW5vZGUtPmlfbW9kZSkpIHx8CisJCQkJCQkoU19JU0NIUihpbm9kZS0+aV9tb2RlKSkpCisJCQkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS0+aV9tb2RlLAorCQkJCQkJCQlpbm9kZS0+aV9yZGV2KTsKKwkJfQorCQlpZiAoc3RhdC0+c3RfcmVzdWx0X21hc2sgJiBQOV9TVEFUU19SREVWKQorCQkJaW5vZGUtPmlfcmRldiA9IG5ld19kZWNvZGVfZGV2KHN0YXQtPnN0X3JkZXYpOworCQlpZiAoc3RhdC0+c3RfcmVzdWx0X21hc2sgJiBQOV9TVEFUU19TSVpFKQorCQkJaV9zaXplX3dyaXRlKGlub2RlLCBzdGF0LT5zdF9zaXplKTsKKwkJaWYgKHN0YXQtPnN0X3Jlc3VsdF9tYXNrICYgUDlfU1RBVFNfQkxPQ0tTKQorCQkJaW5vZGUtPmlfYmxvY2tzID0gc3RhdC0+c3RfYmxvY2tzOworCX0KKwlpZiAoc3RhdC0+c3RfcmVzdWx0X21hc2sgJiBQOV9TVEFUU19HRU4pCisJCQlpbm9kZS0+aV9nZW5lcmF0aW9uID0gc3RhdC0+c3RfZ2VuOworCisJLyogQ3VycmVudGx5IHdlIGRvbid0IHN1cHBvcnQgUDlfU1RBVFNfQlRJTUUgYW5kIFA5X1NUQVRTX0RBVEFfVkVSU0lPTgorCSAqIGJlY2F1c2UgdGhlIGlub2RlIHN0cnVjdHVyZSBkb2VzIG5vdCBoYXZlIGZpZWxkcyBmb3IgdGhlbS4KKwkgKi8KK30KKworLyoqCiAgKiB2OWZzX3FpZDJpbm8gLSBjb252ZXJ0IHFpZCBpbnRvIGlub2RlIG51bWJlcgogICogQHFpZDogcWlkIHRvIGhhc2gKICAqCkBAIC0xMDIyLDcgKzE0NDksNyBAQAogCWlmIChJU19FUlIoZmlkKSkKIAkJcmV0dXJuIFBUUl9FUlIoZmlkKTsKIAotCWlmICghdjlmc19wcm90b19kb3R1KHY5c2VzKSkKKwlpZiAoIXY5ZnNfcHJvdG9fZG90dSh2OXNlcykgJiYgIXY5ZnNfcHJvdG9fZG90bCh2OXNlcykpCiAJCXJldHVybiAtRUJBREY7CiAKIAlzdCA9IHA5X2NsaWVudF9zdGF0KGZpZCk7CkBAIC0xMTI4LDYgKzE1NTUsOTkgQEAKIH0KIAogLyoqCisgKiB2OWZzX3Zmc19zeW1saW5rX2RvdGwgLSBoZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIHN5bWxpbmtzCisgKiBAZGlyOiBkaXJlY3RvcnkgaW5vZGUgY29udGFpbmluZyBzeW1saW5rCisgKiBAZGVudHJ5OiBkZW50cnkgZm9yIHN5bWxpbmsKKyAqIEBzeW1uYW1lOiBzeW1saW5rIGRhdGEKKyAqCisgKiBTZWUgQWxzbzogOVAyMDAwLkwgUkZDIGZvciBtb3JlIGluZm9ybWF0aW9uCisgKgorICovCisKK3N0YXRpYyBpbnQKK3Y5ZnNfdmZzX3N5bWxpbmtfZG90bChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQljb25zdCBjaGFyICpzeW1uYW1lKQoreworCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXM7CisJc3RydWN0IHA5X2ZpZCAqZGZpZDsKKwlzdHJ1Y3QgcDlfZmlkICpmaWQgPSBOVUxMOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IHA5X3FpZCBxaWQ7CisJY2hhciAqbmFtZTsKKwlpbnQgZXJyOworCWdpZF90IGdpZDsKKworCW5hbWUgPSAoY2hhciAqKSBkZW50cnktPmRfbmFtZS5uYW1lOworCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAidjlmc192ZnNfc3ltbGlua19kb3RsIDogJWx1LCVzLCVzXG4iLAorCQkJZGlyLT5pX2lubywgbmFtZSwgc3ltbmFtZSk7CisJdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRpcik7CisKKwlkZmlkID0gdjlmc19maWRfbG9va3VwKGRlbnRyeS0+ZF9wYXJlbnQpOworCWlmIChJU19FUlIoZGZpZCkpIHsKKwkJZXJyID0gUFRSX0VSUihkZmlkKTsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJmaWQgbG9va3VwIGZhaWxlZCAlZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlnaWQgPSB2OWZzX2dldF9mc2dpZF9mb3JfY3JlYXRlKGRpcik7CisKKwlpZiAoZ2lkIDwgMCkgeworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgInY5ZnNfZ2V0X2VnaWQgZmFpbGVkICVkXG4iLCBnaWQpOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIFNlcnZlciBkb2Vzbid0IGFsdGVyIGZpZCBvbiBUU1lNTElOSy4gSGVuY2Ugbm8gbmVlZCB0byBjbG9uZSBpdC4gKi8KKwllcnIgPSBwOV9jbGllbnRfc3ltbGluayhkZmlkLCBuYW1lLCAoY2hhciAqKXN5bW5hbWUsIGdpZCwgJnFpZCk7CisKKwlpZiAoZXJyIDwgMCkgeworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgInA5X2NsaWVudF9zeW1saW5rIGZhaWxlZCAlZFxuIiwgZXJyKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAodjlzZXMtPmNhY2hlKSB7CisJCS8qIE5vdyB3YWxrIGZyb20gdGhlIHBhcmVudCBzbyB3ZSBjYW4gZ2V0IGFuIHVub3BlbmVkIGZpZC4gKi8KKwkJZmlkID0gcDlfY2xpZW50X3dhbGsoZGZpZCwgMSwgJm5hbWUsIDEpOworCQlpZiAoSVNfRVJSKGZpZCkpIHsKKwkJCWVyciA9IFBUUl9FUlIoZmlkKTsKKwkJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAicDlfY2xpZW50X3dhbGsgZmFpbGVkICVkXG4iLAorCQkJCQllcnIpOworCQkJZmlkID0gTlVMTDsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQkvKiBpbnN0YW50aWF0ZSBpbm9kZSBhbmQgYXNzaWduIHRoZSB1bm9wZW5lZCBmaWQgdG8gZGVudHJ5ICovCisJCWlub2RlID0gdjlmc19pbm9kZV9mcm9tX2ZpZCh2OXNlcywgZmlkLCBkaXItPmlfc2IpOworCQlpZiAoSVNfRVJSKGlub2RlKSkgeworCQkJZXJyID0gUFRSX0VSUihpbm9kZSk7CisJCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgImlub2RlIGNyZWF0aW9uIGZhaWxlZCAlZFxuIiwKKwkJCQkJZXJyKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJZGVudHJ5LT5kX29wID0gJnY5ZnNfY2FjaGVkX2RlbnRyeV9vcGVyYXRpb25zOworCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOworCQllcnIgPSB2OWZzX2ZpZF9hZGQoZGVudHJ5LCBmaWQpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCWZpZCA9IE5VTEw7CisJfSBlbHNlIHsKKwkJLyogTm90IGluIGNhY2hlZCBtb2RlLiBObyBuZWVkIHRvIHBvcHVsYXRlIGlub2RlIHdpdGggc3RhdCAqLworCQlpbm9kZSA9IHY5ZnNfZ2V0X2lub2RlKGRpci0+aV9zYiwgU19JRkxOSyk7CisJCWlmIChJU19FUlIoaW5vZGUpKSB7CisJCQllcnIgPSBQVFJfRVJSKGlub2RlKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJZGVudHJ5LT5kX29wID0gJnY5ZnNfZGVudHJ5X29wZXJhdGlvbnM7CisJCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CisJfQorCitlcnJvcjoKKwlpZiAoZmlkKQorCQlwOV9jbGllbnRfY2x1bmsoZmlkKTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qKgogICogdjlmc192ZnNfc3ltbGluayAtIGhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgc3ltbGlua3MKICAqIEBkaXI6IGRpcmVjdG9yeSBpbm9kZSBjb250YWluaW5nIHN5bWxpbmsKICAqIEBkZW50cnk6IGRlbnRyeSBmb3Igc3ltbGluawpAQCAtMTE4Niw2ICsxNzA2LDc2IEBACiB9CiAKIC8qKgorICogdjlmc192ZnNfbGlua19kb3RsIC0gY3JlYXRlIGEgaGFyZGxpbmsgZm9yIGRvdGwKKyAqIEBvbGRfZGVudHJ5OiBkZW50cnkgZm9yIGZpbGUgdG8gbGluayB0bworICogQGRpcjogaW5vZGUgZGVzdGluYXRpb24gZm9yIG5ldyBsaW5rCisgKiBAZGVudHJ5OiBkZW50cnkgZm9yIGxpbmsKKyAqCisgKi8KKworc3RhdGljIGludAordjlmc192ZnNfbGlua19kb3RsKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAorCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcDlfZmlkICpkZmlkLCAqb2xkZmlkOworCWNoYXIgKm5hbWU7CisJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsKKwlzdHJ1Y3QgZGVudHJ5ICpkaXJfZGVudHJ5OworCisJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJkaXIgaW5vOiAlbHUsIG9sZF9uYW1lOiAlcywgbmV3X25hbWU6ICVzXG4iLAorCQkJZGlyLT5pX2lubywgb2xkX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCisJCQlkZW50cnktPmRfbmFtZS5uYW1lKTsKKworCXY5c2VzID0gdjlmc19pbm9kZTJ2OXNlcyhkaXIpOworCWRpcl9kZW50cnkgPSB2OWZzX2RlbnRyeV9mcm9tX2Rpcl9pbm9kZShkaXIpOworCWRmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZGlyX2RlbnRyeSk7CisJaWYgKElTX0VSUihkZmlkKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGZpZCk7CisKKwlvbGRmaWQgPSB2OWZzX2ZpZF9sb29rdXAob2xkX2RlbnRyeSk7CisJaWYgKElTX0VSUihvbGRmaWQpKQorCQlyZXR1cm4gUFRSX0VSUihvbGRmaWQpOworCisJbmFtZSA9IChjaGFyICopIGRlbnRyeS0+ZF9uYW1lLm5hbWU7CisKKwllcnIgPSBwOV9jbGllbnRfbGluayhkZmlkLCBvbGRmaWQsIChjaGFyICopZGVudHJ5LT5kX25hbWUubmFtZSk7CisKKwlpZiAoZXJyIDwgMCkgeworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgInA5X2NsaWVudF9saW5rIGZhaWxlZCAlZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAodjlzZXMtPmNhY2hlID09IENBQ0hFX0xPT1NFIHx8IHY5c2VzLT5jYWNoZSA9PSBDQUNIRV9GU0NBQ0hFKSB7CisJCS8qIEdldCB0aGUgbGF0ZXN0IHN0YXQgaW5mbyBmcm9tIHNlcnZlci4gKi8KKwkJc3RydWN0IHA5X2ZpZCAqZmlkOworCQlzdHJ1Y3QgcDlfc3RhdF9kb3RsICpzdDsKKworCQlmaWQgPSB2OWZzX2ZpZF9sb29rdXAob2xkX2RlbnRyeSk7CisJCWlmIChJU19FUlIoZmlkKSkKKwkJCXJldHVybiBQVFJfRVJSKGZpZCk7CisKKwkJc3QgPSBwOV9jbGllbnRfZ2V0YXR0cl9kb3RsKGZpZCwgUDlfU1RBVFNfQkFTSUMpOworCQlpZiAoSVNfRVJSKHN0KSkKKwkJCXJldHVybiBQVFJfRVJSKHN0KTsKKworCQl2OWZzX3N0YXQyaW5vZGVfZG90bChzdCwgb2xkX2RlbnRyeS0+ZF9pbm9kZSk7CisKKwkJa2ZyZWUoc3QpOworCX0gZWxzZSB7CisJCS8qIENhY2hpbmcgZGlzYWJsZWQuIE5vIG5lZWQgdG8gZ2V0IHVwdG8gZGF0ZSBzdGF0IGluZm8uCisJCSAqIFRoaXMgZGVudHJ5IHdpbGwgYmUgcmVsZWFzZWQgaW1tZWRpYXRlbHkuIFNvLCBqdXN0IGlfY291bnQrKworCQkgKi8KKwkJYXRvbWljX2luYygmb2xkX2RlbnRyeS0+ZF9pbm9kZS0+aV9jb3VudCk7CisJfQorCisJZGVudHJ5LT5kX29wID0gb2xkX2RlbnRyeS0+ZF9vcDsKKwlkX2luc3RhbnRpYXRlKGRlbnRyeSwgb2xkX2RlbnRyeS0+ZF9pbm9kZSk7CisKKwlyZXR1cm4gZXJyOworfQorCisvKioKICAqIHY5ZnNfdmZzX21rbm9kIC0gY3JlYXRlIGEgc3BlY2lhbCBmaWxlCiAgKiBAZGlyOiBpbm9kZSBkZXN0aW5hdGlvbiBmb3IgbmV3IGxpbmsKICAqIEBkZW50cnk6IGRlbnRyeSBmb3IgZmlsZQpAQCAtMTIzMCw2ICsxODIwLDEwMCBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKKy8qKgorICogdjlmc192ZnNfbWtub2RfZG90bCAtIGNyZWF0ZSBhIHNwZWNpYWwgZmlsZQorICogQGRpcjogaW5vZGUgZGVzdGluYXRpb24gZm9yIG5ldyBsaW5rCisgKiBAZGVudHJ5OiBkZW50cnkgZm9yIGZpbGUKKyAqIEBtb2RlOiBtb2RlIGZvciBjcmVhdGlvbgorICogQHJkZXY6IGRldmljZSBhc3NvY2lhdGVkIHdpdGggc3BlY2lhbCBmaWxlCisgKgorICovCitzdGF0aWMgaW50Cit2OWZzX3Zmc19ta25vZF9kb3RsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlLAorCQlkZXZfdCByZGV2KQoreworCWludCBlcnI7CisJY2hhciAqbmFtZTsKKwlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzOworCXN0cnVjdCBwOV9maWQgKmZpZCA9IE5VTEwsICpkZmlkID0gTlVMTDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCWdpZF90IGdpZDsKKwlzdHJ1Y3QgcDlfcWlkIHFpZDsKKwlzdHJ1Y3QgZGVudHJ5ICpkaXJfZGVudHJ5OworCisJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsCisJCSIgJWx1LCVzIG1vZGU6ICV4IE1BSk9SOiAldSBNSU5PUjogJXVcbiIsIGRpci0+aV9pbm8sCisJCWRlbnRyeS0+ZF9uYW1lLm5hbWUsIG1vZGUsIE1BSk9SKHJkZXYpLCBNSU5PUihyZGV2KSk7CisKKwlpZiAoIW5ld192YWxpZF9kZXYocmRldikpCisJCXJldHVybiAtRUlOVkFMOworCisJdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRpcik7CisJZGlyX2RlbnRyeSA9IHY5ZnNfZGVudHJ5X2Zyb21fZGlyX2lub2RlKGRpcik7CisJZGZpZCA9IHY5ZnNfZmlkX2xvb2t1cChkaXJfZGVudHJ5KTsKKwlpZiAoSVNfRVJSKGRmaWQpKSB7CisJCWVyciA9IFBUUl9FUlIoZGZpZCk7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiZmlkIGxvb2t1cCBmYWlsZWQgJWRcbiIsIGVycik7CisJCWRmaWQgPSBOVUxMOworCQlnb3RvIGVycm9yOworCX0KKworCWdpZCA9IHY5ZnNfZ2V0X2ZzZ2lkX2Zvcl9jcmVhdGUoZGlyKTsKKwlpZiAoZ2lkIDwgMCkgeworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgInY5ZnNfZ2V0X2ZzZ2lkX2Zvcl9jcmVhdGUgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwluYW1lID0gKGNoYXIgKikgZGVudHJ5LT5kX25hbWUubmFtZTsKKworCWVyciA9IHA5X2NsaWVudF9ta25vZF9kb3RsKGRmaWQsIG5hbWUsIG1vZGUsIHJkZXYsIGdpZCwgJnFpZCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBpbnN0YW50aWF0ZSBpbm9kZSBhbmQgYXNzaWduIHRoZSB1bm9wZW5lZCBmaWQgdG8gdGhlIGRlbnRyeSAqLworCWlmICh2OXNlcy0+Y2FjaGUgPT0gQ0FDSEVfTE9PU0UgfHwgdjlzZXMtPmNhY2hlID09IENBQ0hFX0ZTQ0FDSEUpIHsKKwkJZmlkID0gcDlfY2xpZW50X3dhbGsoZGZpZCwgMSwgJm5hbWUsIDEpOworCQlpZiAoSVNfRVJSKGZpZCkpIHsKKwkJCWVyciA9IFBUUl9FUlIoZmlkKTsKKwkJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAicDlfY2xpZW50X3dhbGsgZmFpbGVkICVkXG4iLAorCQkJCWVycik7CisJCQlmaWQgPSBOVUxMOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCWlub2RlID0gdjlmc19pbm9kZV9mcm9tX2ZpZCh2OXNlcywgZmlkLCBkaXItPmlfc2IpOworCQlpZiAoSVNfRVJSKGlub2RlKSkgeworCQkJZXJyID0gUFRSX0VSUihpbm9kZSk7CisJCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgImlub2RlIGNyZWF0aW9uIGZhaWxlZCAlZFxuIiwKKwkJCQllcnIpOworCQkJZ290byBlcnJvcjsKKwkJfQorCQlkZW50cnktPmRfb3AgPSAmdjlmc19jYWNoZWRfZGVudHJ5X29wZXJhdGlvbnM7CisJCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CisJCWVyciA9IHY5ZnNfZmlkX2FkZChkZW50cnksIGZpZCk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJZmlkID0gTlVMTDsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBOb3QgaW4gY2FjaGVkIG1vZGUuIE5vIG5lZWQgdG8gcG9wdWxhdGUgaW5vZGUgd2l0aCBzdGF0LgorCQkgKiBzb2NrZXQgc3lzY2FsbCByZXR1cm5zIGEgZmQsIHNvIHdlIG5lZWQgaW5zdGFudGlhdGUKKwkJICovCisJCWlub2RlID0gdjlmc19nZXRfaW5vZGUoZGlyLT5pX3NiLCBtb2RlKTsKKwkJaWYgKElTX0VSUihpbm9kZSkpIHsKKwkJCWVyciA9IFBUUl9FUlIoaW5vZGUpOworCQkJZ290byBlcnJvcjsKKwkJfQorCQlkZW50cnktPmRfb3AgPSAmdjlmc19kZW50cnlfb3BlcmF0aW9uczsKKwkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKKwl9CisKK2Vycm9yOgorCWlmIChmaWQpCisJCXA5X2NsaWVudF9jbHVuayhmaWQpOworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB2OWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zX2RvdHUgPSB7CiAJLmNyZWF0ZSA9IHY5ZnNfdmZzX2NyZWF0ZSwKIAkubG9va3VwID0gdjlmc192ZnNfbG9va3VwLApAQCAtMTIzOCwyNCArMTkyMiwyOSBAQAogCS51bmxpbmsgPSB2OWZzX3Zmc191bmxpbmssCiAJLm1rZGlyID0gdjlmc192ZnNfbWtkaXIsCiAJLnJtZGlyID0gdjlmc192ZnNfcm1kaXIsCi0JLm1rbm9kID0gdjlmc192ZnNfbWtub2QsCisJLm1rbm9kID0gdjlmc192ZnNfbWtub2RfZG90bCwKIAkucmVuYW1lID0gdjlmc192ZnNfcmVuYW1lLAogCS5nZXRhdHRyID0gdjlmc192ZnNfZ2V0YXR0ciwKIAkuc2V0YXR0ciA9IHY5ZnNfdmZzX3NldGF0dHIsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdjlmc19kaXJfaW5vZGVfb3BlcmF0aW9uc19kb3RsID0gewotCS5jcmVhdGUgPSB2OWZzX3Zmc19jcmVhdGUsCisJLmNyZWF0ZSA9IHY5ZnNfdmZzX2NyZWF0ZV9kb3RsLAogCS5sb29rdXAgPSB2OWZzX3Zmc19sb29rdXAsCi0JLnN5bWxpbmsgPSB2OWZzX3Zmc19zeW1saW5rLAotCS5saW5rID0gdjlmc192ZnNfbGluaywKKwkubGluayA9IHY5ZnNfdmZzX2xpbmtfZG90bCwKKwkuc3ltbGluayA9IHY5ZnNfdmZzX3N5bWxpbmtfZG90bCwKIAkudW5saW5rID0gdjlmc192ZnNfdW5saW5rLAotCS5ta2RpciA9IHY5ZnNfdmZzX21rZGlyLAorCS5ta2RpciA9IHY5ZnNfdmZzX21rZGlyX2RvdGwsCiAJLnJtZGlyID0gdjlmc192ZnNfcm1kaXIsCi0JLm1rbm9kID0gdjlmc192ZnNfbWtub2QsCisJLm1rbm9kID0gdjlmc192ZnNfbWtub2RfZG90bCwKIAkucmVuYW1lID0gdjlmc192ZnNfcmVuYW1lLAotCS5nZXRhdHRyID0gdjlmc192ZnNfZ2V0YXR0ciwKLQkuc2V0YXR0ciA9IHY5ZnNfdmZzX3NldGF0dHIsCisJLmdldGF0dHIgPSB2OWZzX3Zmc19nZXRhdHRyX2RvdGwsCisJLnNldGF0dHIgPSB2OWZzX3Zmc19zZXRhdHRyX2RvdGwsCisJLnNldHhhdHRyID0gZ2VuZXJpY19zZXR4YXR0ciwKKwkuZ2V0eGF0dHIgPSBnZW5lcmljX2dldHhhdHRyLAorCS5yZW1vdmV4YXR0ciA9IGdlbmVyaWNfcmVtb3ZleGF0dHIsCisJLmxpc3R4YXR0ciA9IHY5ZnNfbGlzdHhhdHRyLAorCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdjlmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHsKQEAgLTEyNzYsOCArMTk2NSwxMiBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHY5ZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zX2RvdGwgPSB7Ci0JLmdldGF0dHIgPSB2OWZzX3Zmc19nZXRhdHRyLAotCS5zZXRhdHRyID0gdjlmc192ZnNfc2V0YXR0ciwKKwkuZ2V0YXR0ciA9IHY5ZnNfdmZzX2dldGF0dHJfZG90bCwKKwkuc2V0YXR0ciA9IHY5ZnNfdmZzX3NldGF0dHJfZG90bCwKKwkuc2V0eGF0dHIgPSBnZW5lcmljX3NldHhhdHRyLAorCS5nZXR4YXR0ciA9IGdlbmVyaWNfZ2V0eGF0dHIsCisJLnJlbW92ZXhhdHRyID0gZ2VuZXJpY19yZW1vdmV4YXR0ciwKKwkubGlzdHhhdHRyID0gdjlmc19saXN0eGF0dHIsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdjlmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7CkBAIC0xMjkyLDYgKzE5ODUsMTAgQEAKIAkucmVhZGxpbmsgPSBnZW5lcmljX3JlYWRsaW5rLAogCS5mb2xsb3dfbGluayA9IHY5ZnNfdmZzX2ZvbGxvd19saW5rLAogCS5wdXRfbGluayA9IHY5ZnNfdmZzX3B1dF9saW5rLAotCS5nZXRhdHRyID0gdjlmc192ZnNfZ2V0YXR0ciwKLQkuc2V0YXR0ciA9IHY5ZnNfdmZzX3NldGF0dHIsCisJLmdldGF0dHIgPSB2OWZzX3Zmc19nZXRhdHRyX2RvdGwsCisJLnNldGF0dHIgPSB2OWZzX3Zmc19zZXRhdHRyX2RvdGwsCisJLnNldHhhdHRyID0gZ2VuZXJpY19zZXR4YXR0ciwKKwkuZ2V0eGF0dHIgPSBnZW5lcmljX2dldHhhdHRyLAorCS5yZW1vdmV4YXR0ciA9IGdlbmVyaWNfcmVtb3ZleGF0dHIsCisJLmxpc3R4YXR0ciA9IHY5ZnNfbGlzdHhhdHRyLAogfTsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19zdXBlci5jIGIvZnMvOXAvdmZzX3N1cGVyLmMKaW5kZXggYmU3NGQwMi4uNGI5ZWRlMCAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX3N1cGVyLmMKKysrIGIvZnMvOXAvdmZzX3N1cGVyLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJ2OWZzLmgiCiAjaW5jbHVkZSAidjlmc192ZnMuaCIKICNpbmNsdWRlICJmaWQuaCIKKyNpbmNsdWRlICJ4YXR0ci5oIgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgdjlmc19zdXBlcl9vcHMsIHY5ZnNfc3VwZXJfb3BzX2RvdGw7CiAKQEAgLTc3LDkgKzc4LDEwIEBACiAJc2ItPnNfYmxvY2tzaXplX2JpdHMgPSBmbHModjlzZXMtPm1heGRhdGEgLSAxKTsKIAlzYi0+c19ibG9ja3NpemUgPSAxIDw8IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwogCXNiLT5zX21hZ2ljID0gVjlGU19NQUdJQzsKLQlpZiAodjlmc19wcm90b19kb3RsKHY5c2VzKSkKKwlpZiAodjlmc19wcm90b19kb3RsKHY5c2VzKSkgewogCQlzYi0+c19vcCA9ICZ2OWZzX3N1cGVyX29wc19kb3RsOwotCWVsc2UKKwkJc2ItPnNfeGF0dHIgPSB2OWZzX3hhdHRyX2hhbmRsZXJzOworCX0gZWxzZQogCQlzYi0+c19vcCA9ICZ2OWZzX3N1cGVyX29wczsKIAlzYi0+c19iZGkgPSAmdjlzZXMtPmJkaTsKIApAQCAtMTA3LDcgKzEwOSw2IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7CiAJc3RydWN0IGRlbnRyeSAqcm9vdCA9IE5VTEw7CiAJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcyA9IE5VTEw7Ci0Jc3RydWN0IHA5X3dzdGF0ICpzdCA9IE5VTEw7CiAJaW50IG1vZGUgPSBTX0lSV1hVR08gfCBTX0lTVlRYOwogCXN0cnVjdCBwOV9maWQgKmZpZDsKIAlpbnQgcmV0dmFsID0gMDsKQEAgLTEyNCwxNiArMTI1LDEwIEBACiAJCWdvdG8gY2xvc2Vfc2Vzc2lvbjsKIAl9CiAKLQlzdCA9IHA5X2NsaWVudF9zdGF0KGZpZCk7Ci0JaWYgKElTX0VSUihzdCkpIHsKLQkJcmV0dmFsID0gUFRSX0VSUihzdCk7Ci0JCWdvdG8gY2x1bmtfZmlkOwotCX0KLQogCXNiID0gc2dldChmc190eXBlLCBOVUxMLCB2OWZzX3NldF9zdXBlciwgdjlzZXMpOwogCWlmIChJU19FUlIoc2IpKSB7CiAJCXJldHZhbCA9IFBUUl9FUlIoc2IpOwotCQlnb3RvIGZyZWVfc3RhdDsKKwkJZ290byBjbHVua19maWQ7CiAJfQogCXY5ZnNfZmlsbF9zdXBlcihzYiwgdjlzZXMsIGZsYWdzLCBkYXRhKTsKIApAQCAtMTUxLDIyICsxNDYsMzggQEAKIAl9CiAKIAlzYi0+c19yb290ID0gcm9vdDsKLQlyb290LT5kX2lub2RlLT5pX2lubyA9IHY5ZnNfcWlkMmlubygmc3QtPnFpZCk7CiAKLQl2OWZzX3N0YXQyaW5vZGUoc3QsIHJvb3QtPmRfaW5vZGUsIHNiKTsKKwlpZiAodjlmc19wcm90b19kb3RsKHY5c2VzKSkgeworCQlzdHJ1Y3QgcDlfc3RhdF9kb3RsICpzdCA9IE5VTEw7CisJCXN0ID0gcDlfY2xpZW50X2dldGF0dHJfZG90bChmaWQsIFA5X1NUQVRTX0JBU0lDKTsKKwkJaWYgKElTX0VSUihzdCkpIHsKKwkJCXJldHZhbCA9IFBUUl9FUlIoc3QpOworCQkJZ290byBjbHVua19maWQ7CisJCX0KKworCQl2OWZzX3N0YXQyaW5vZGVfZG90bChzdCwgcm9vdC0+ZF9pbm9kZSk7CisJCWtmcmVlKHN0KTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgcDlfd3N0YXQgKnN0ID0gTlVMTDsKKwkJc3QgPSBwOV9jbGllbnRfc3RhdChmaWQpOworCQlpZiAoSVNfRVJSKHN0KSkgeworCQkJcmV0dmFsID0gUFRSX0VSUihzdCk7CisJCQlnb3RvIGNsdW5rX2ZpZDsKKwkJfQorCisJCXJvb3QtPmRfaW5vZGUtPmlfaW5vID0gdjlmc19xaWQyaW5vKCZzdC0+cWlkKTsKKwkJdjlmc19zdGF0Mmlub2RlKHN0LCByb290LT5kX2lub2RlLCBzYik7CisKKwkJcDlzdGF0X2ZyZWUoc3QpOworCQlrZnJlZShzdCk7CisJfQogCiAJdjlmc19maWRfYWRkKHJvb3QsIGZpZCk7Ci0JcDlzdGF0X2ZyZWUoc3QpOwotCWtmcmVlKHN0KTsKIAogUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICIgc2ltcGxlIHNldCBtb3VudCwgcmV0dXJuIDBcbiIpOwogCXNpbXBsZV9zZXRfbW50KG1udCwgc2IpOwogCXJldHVybiAwOwogCi1mcmVlX3N0YXQ6Ci0JcDlzdGF0X2ZyZWUoc3QpOwotCWtmcmVlKHN0KTsKLQogY2x1bmtfZmlkOgogCXA5X2NsaWVudF9jbHVuayhmaWQpOwogCkBAIC0xNzYsOCArMTg3LDYgQEAKIAlyZXR1cm4gcmV0dmFsOwogCiByZWxlYXNlX3NiOgotCXA5c3RhdF9mcmVlKHN0KTsKLQlrZnJlZShzdCk7CiAJZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC0yNzgsNCArMjg3LDUgQEAKIAkuZ2V0X3NiID0gdjlmc19nZXRfc2IsCiAJLmtpbGxfc2IgPSB2OWZzX2tpbGxfc3VwZXIsCiAJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmZzX2ZsYWdzID0gRlNfUkVOQU1FX0RPRVNfRF9NT1ZFLAogfTsKZGlmZiAtLWdpdCBhL2ZzLzlwL3hhdHRyLmMgYi9mcy85cC94YXR0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4OGU1YzIKLS0tIC9kZXYvbnVsbAorKysgYi9mcy85cC94YXR0ci5jCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiwgMjAxMAorICogQXV0aG9yIEFuZWVzaCBLdW1hciBLLlYgPGFuZWVzaC5rdW1hckBsaW51eC52bmV0LmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIuMSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3b3VsZCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPG5ldC85cC85cC5oPgorI2luY2x1ZGUgPG5ldC85cC9jbGllbnQuaD4KKworI2luY2x1ZGUgImZpZC5oIgorI2luY2x1ZGUgInhhdHRyLmgiCisKKy8qCisgKiB2OWZzX3hhdHRyX2dldCgpCisgKgorICogQ29weSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgaW50byB0aGUgYnVmZmVyCisgKiBwcm92aWRlZCwgb3IgY29tcHV0ZSB0aGUgYnVmZmVyIHNpemUgcmVxdWlyZWQuCisgKiBCdWZmZXIgaXMgTlVMTCB0byBjb21wdXRlIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgcmVxdWlyZWQuCisgKgorICogUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIG51bWJlciBvbiBmYWlsdXJlLCBvciB0aGUgbnVtYmVyIG9mIGJ5dGVzCisgKiB1c2VkIC8gcmVxdWlyZWQgb24gc3VjY2Vzcy4KKyAqLworc3NpemVfdCB2OWZzX3hhdHRyX2dldChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSkKK3sKKwlzc2l6ZV90IHJldHZhbDsKKwlpbnQgbXNpemUsIHJlYWRfY291bnQ7CisJdTY0IG9mZnNldCA9IDAsIGF0dHJfc2l6ZTsKKwlzdHJ1Y3QgcDlfZmlkICpmaWQsICphdHRyX2ZpZDsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiJXM6IG5hbWUgPSAlcyB2YWx1ZV9sZW4gPSAlenVcbiIsCisJCV9fZnVuY19fLCBuYW1lLCBidWZmZXJfc2l6ZSk7CisKKwlmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZGVudHJ5KTsKKwlpZiAoSVNfRVJSKGZpZCkpCisJCXJldHVybiBQVFJfRVJSKGZpZCk7CisKKwlhdHRyX2ZpZCA9IHA5X2NsaWVudF94YXR0cndhbGsoZmlkLCBuYW1lLCAmYXR0cl9zaXplKTsKKwlpZiAoSVNfRVJSKGF0dHJfZmlkKSkgeworCQlyZXR2YWwgPSBQVFJfRVJSKGF0dHJfZmlkKTsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsCisJCQkicDlfY2xpZW50X2F0dHJ3YWxrIGZhaWxlZCAlemRcbiIsIHJldHZhbCk7CisJCWF0dHJfZmlkID0gTlVMTDsKKwkJZ290byBlcnJvcjsKKwl9CisJaWYgKCFidWZmZXJfc2l6ZSkgeworCQkvKiByZXF1ZXN0IHRvIGdldCB0aGUgYXR0cl9zaXplICovCisJCXJldHZhbCA9IGF0dHJfc2l6ZTsKKwkJZ290byBlcnJvcjsKKwl9CisJaWYgKGF0dHJfc2l6ZSA+IGJ1ZmZlcl9zaXplKSB7CisJCXJldHZhbCA9IC1FUkFOR0U7CisJCWdvdG8gZXJyb3I7CisJfQorCW1zaXplID0gYXR0cl9maWQtPmNsbnQtPm1zaXplOworCXdoaWxlIChhdHRyX3NpemUpIHsKKwkJaWYgKGF0dHJfc2l6ZSA+IChtc2l6ZSAtIFA5X0lPSERSU1opKQorCQkJcmVhZF9jb3VudCA9IG1zaXplIC0gUDlfSU9IRFJTWjsKKwkJZWxzZQorCQkJcmVhZF9jb3VudCA9IGF0dHJfc2l6ZTsKKwkJcmVhZF9jb3VudCA9IHA5X2NsaWVudF9yZWFkKGF0dHJfZmlkLCAoKGNoYXIgKilidWZmZXIpK29mZnNldCwKKwkJCQkJTlVMTCwgb2Zmc2V0LCByZWFkX2NvdW50KTsKKwkJaWYgKHJlYWRfY291bnQgPCAwKSB7CisJCQkvKiBlcnJvciBpbiB4YXR0ciByZWFkICovCisJCQlyZXR2YWwgPSByZWFkX2NvdW50OworCQkJZ290byBlcnJvcjsKKwkJfQorCQlvZmZzZXQgKz0gcmVhZF9jb3VudDsKKwkJYXR0cl9zaXplIC09IHJlYWRfY291bnQ7CisJfQorCS8qIFRvdGFsIHJlYWQgeGF0dHIgYnl0ZXMgKi8KKwlyZXR2YWwgPSBvZmZzZXQ7CitlcnJvcjoKKwlpZiAoYXR0cl9maWQpCisJCXA5X2NsaWVudF9jbHVuayhhdHRyX2ZpZCk7CisJcmV0dXJuIHJldHZhbDsKKworfQorCisvKgorICogdjlmc194YXR0cl9zZXQoKQorICoKKyAqIENyZWF0ZSwgcmVwbGFjZSBvciByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGZvciB0aGlzIGlub2RlLiBCdWZmZXIKKyAqIGlzIE5VTEwgdG8gcmVtb3ZlIGFuIGV4aXN0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kIG5vbi1OVUxMIHRvCisgKiBlaXRoZXIgcmVwbGFjZSBhbiBleGlzdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUsIG9yIGNyZWF0ZSBhIG5ldyBleHRlbmRlZAorICogYXR0cmlidXRlLiBUaGUgZmxhZ3MgWEFUVFJfUkVQTEFDRSBhbmQgWEFUVFJfQ1JFQVRFCisgKiBzcGVjaWZ5IHRoYXQgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIG11c3QgZXhpc3QgYW5kIG11c3Qgbm90IGV4aXN0CisgKiBwcmV2aW91cyB0byB0aGUgY2FsbCwgcmVzcGVjdGl2ZWx5LgorICoKKyAqIFJldHVybnMgMCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIgb24gZmFpbHVyZS4KKyAqLworaW50IHY5ZnNfeGF0dHJfc2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCB2YWx1ZV9sZW4sIGludCBmbGFncykKK3sKKwl1NjQgb2Zmc2V0ID0gMDsKKwlpbnQgcmV0dmFsLCBtc2l6ZSwgd3JpdGVfY291bnQ7CisJc3RydWN0IHA5X2ZpZCAqZmlkID0gTlVMTDsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiJXM6IG5hbWUgPSAlcyB2YWx1ZV9sZW4gPSAlenUgZmxhZ3MgPSAlZFxuIiwKKwkJX19mdW5jX18sIG5hbWUsIHZhbHVlX2xlbiwgZmxhZ3MpOworCisJZmlkID0gdjlmc19maWRfY2xvbmUoZGVudHJ5KTsKKwlpZiAoSVNfRVJSKGZpZCkpIHsKKwkJcmV0dmFsID0gUFRSX0VSUihmaWQpOworCQlmaWQgPSBOVUxMOworCQlnb3RvIGVycm9yOworCX0KKwkvKgorCSAqIE9uIHN1Y2Nlc3MgZmlkIHBvaW50cyB0byB4YXR0cgorCSAqLworCXJldHZhbCA9IHA5X2NsaWVudF94YXR0cmNyZWF0ZShmaWQsIG5hbWUsIHZhbHVlX2xlbiwgZmxhZ3MpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLAorCQkJInA5X2NsaWVudF94YXR0cmNyZWF0ZSBmYWlsZWQgJWRcbiIsIHJldHZhbCk7CisJCWdvdG8gZXJyb3I7CisJfQorCW1zaXplID0gZmlkLT5jbG50LT5tc2l6ZTs7CisJd2hpbGUgKHZhbHVlX2xlbikgeworCQlpZiAodmFsdWVfbGVuID4gKG1zaXplIC0gUDlfSU9IRFJTWikpCisJCQl3cml0ZV9jb3VudCA9IG1zaXplIC0gUDlfSU9IRFJTWjsKKwkJZWxzZQorCQkJd3JpdGVfY291bnQgPSB2YWx1ZV9sZW47CisJCXdyaXRlX2NvdW50ID0gcDlfY2xpZW50X3dyaXRlKGZpZCwgKChjaGFyICopdmFsdWUpK29mZnNldCwKKwkJCQkJTlVMTCwgb2Zmc2V0LCB3cml0ZV9jb3VudCk7CisJCWlmICh3cml0ZV9jb3VudCA8IDApIHsKKwkJCS8qIGVycm9yIGluIHhhdHRyIHdyaXRlICovCisJCQlyZXR2YWwgPSB3cml0ZV9jb3VudDsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJb2Zmc2V0ICs9IHdyaXRlX2NvdW50OworCQl2YWx1ZV9sZW4gLT0gd3JpdGVfY291bnQ7CisJfQorCS8qIFRvdGFsIHJlYWQgeGF0dHIgYnl0ZXMgKi8KKwlyZXR2YWwgPSBvZmZzZXQ7CitlcnJvcjoKKwlpZiAoZmlkKQorCQlyZXR2YWwgPSBwOV9jbGllbnRfY2x1bmsoZmlkKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzc2l6ZV90IHY5ZnNfbGlzdHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmZmVyX3NpemUpCit7CisJcmV0dXJuIHY5ZnNfeGF0dHJfZ2V0KGRlbnRyeSwgTlVMTCwgYnVmZmVyLCBidWZmZXJfc2l6ZSk7Cit9CisKK2NvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICp2OWZzX3hhdHRyX2hhbmRsZXJzW10gPSB7CisJJnY5ZnNfeGF0dHJfdXNlcl9oYW5kbGVyLAorCU5VTEwKK307CmRpZmYgLS1naXQgYS9mcy85cC94YXR0ci5oIGIvZnMvOXAveGF0dHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGRmNjcyCi0tLSAvZGV2L251bGwKKysrIGIvZnMvOXAveGF0dHIuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiwgMjAxMAorICogQXV0aG9yIEFuZWVzaCBLdW1hciBLLlYgPGFuZWVzaC5rdW1hckBsaW51eC52bmV0LmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIuMSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3b3VsZCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICoKKyAqLworI2lmbmRlZiBGU185UF9YQVRUUl9ICisjZGVmaW5lIEZTXzlQX1hBVFRSX0gKKworI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqdjlmc194YXR0cl9oYW5kbGVyc1tdOworZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyIHY5ZnNfeGF0dHJfdXNlcl9oYW5kbGVyOworCitleHRlcm4gc3NpemVfdCB2OWZzX3hhdHRyX2dldChzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IGNoYXIgKiwKKwkJCSAgICAgIHZvaWQgKiwgc2l6ZV90KTsKK2V4dGVybiBpbnQgdjlmc194YXR0cl9zZXQoc3RydWN0IGRlbnRyeSAqLCBjb25zdCBjaGFyICosCisJCQkgIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpOworZXh0ZXJuIHNzaXplX3Qgdjlmc19saXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqLCBjaGFyICosIHNpemVfdCk7CisjZW5kaWYgLyogRlNfOVBfWEFUVFJfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvOXAveGF0dHJfdXNlci5jIGIvZnMvOXAveGF0dHJfdXNlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYjcwMWIKLS0tIC9kZXYvbnVsbAorKysgYi9mcy85cC94YXR0cl91c2VyLmMKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24sIDIwMTAKKyAqIEF1dGhvciBBbmVlc2ggS3VtYXIgSy5WIDxhbmVlc2gua3VtYXJAbGludXgudm5ldC5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyLjEgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd291bGQgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSAieGF0dHIuaCIKKworc3RhdGljIGludCB2OWZzX3hhdHRyX3VzZXJfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCXZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGludCB0eXBlKQoreworCWludCByZXR2YWw7CisJY2hhciAqZnVsbF9uYW1lOworCXNpemVfdCBuYW1lX2xlbjsKKwlzaXplX3QgcHJlZml4X2xlbiA9IFhBVFRSX1VTRVJfUFJFRklYX0xFTjsKKworCWlmIChuYW1lID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHN0cmNtcChuYW1lLCAiIikgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwluYW1lX2xlbiA9IHN0cmxlbihuYW1lKTsKKwlmdWxsX25hbWUgPSBrbWFsbG9jKHByZWZpeF9sZW4gKyBuYW1lX2xlbiArIDEgLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZ1bGxfbmFtZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtY3B5KGZ1bGxfbmFtZSwgWEFUVFJfVVNFUl9QUkVGSVgsIHByZWZpeF9sZW4pOworCW1lbWNweShmdWxsX25hbWUrcHJlZml4X2xlbiwgbmFtZSwgbmFtZV9sZW4pOworCWZ1bGxfbmFtZVtwcmVmaXhfbGVuICsgbmFtZV9sZW5dID0gJ1wwJzsKKworCXJldHZhbCA9IHY5ZnNfeGF0dHJfZ2V0KGRlbnRyeSwgZnVsbF9uYW1lLCBidWZmZXIsIHNpemUpOworCWtmcmVlKGZ1bGxfbmFtZSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCB2OWZzX3hhdHRyX3VzZXJfc2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCWNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLCBpbnQgdHlwZSkKK3sKKwlpbnQgcmV0dmFsOworCWNoYXIgKmZ1bGxfbmFtZTsKKwlzaXplX3QgbmFtZV9sZW47CisJc2l6ZV90IHByZWZpeF9sZW4gPSBYQVRUUl9VU0VSX1BSRUZJWF9MRU47CisKKwlpZiAobmFtZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzdHJjbXAobmFtZSwgIiIpID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJbmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7CisJZnVsbF9uYW1lID0ga21hbGxvYyhwcmVmaXhfbGVuICsgbmFtZV9sZW4gKyAxICwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmdWxsX25hbWUpCisJCXJldHVybiAtRU5PTUVNOworCW1lbWNweShmdWxsX25hbWUsIFhBVFRSX1VTRVJfUFJFRklYLCBwcmVmaXhfbGVuKTsKKwltZW1jcHkoZnVsbF9uYW1lICsgcHJlZml4X2xlbiwgbmFtZSwgbmFtZV9sZW4pOworCWZ1bGxfbmFtZVtwcmVmaXhfbGVuICsgbmFtZV9sZW5dID0gJ1wwJzsKKworCXJldHZhbCA9IHY5ZnNfeGF0dHJfc2V0KGRlbnRyeSwgZnVsbF9uYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpOworCWtmcmVlKGZ1bGxfbmFtZSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RydWN0IHhhdHRyX2hhbmRsZXIgdjlmc194YXR0cl91c2VyX2hhbmRsZXIgPSB7CisJLnByZWZpeAk9IFhBVFRSX1VTRVJfUFJFRklYLAorCS5nZXQJPSB2OWZzX3hhdHRyX3VzZXJfZ2V0LAorCS5zZXQJPSB2OWZzX3hhdHRyX3VzZXJfc2V0LAorfTsKZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnCmluZGV4IDVmODViNTkuLjNkMTg1MzAgMTAwNjQ0Ci0tLSBhL2ZzL0tjb25maWcKKysrIGIvZnMvS2NvbmZpZwpAQCAtNjQsNyArNjQsNyBAQAogc291cmNlICJmcy9mdXNlL0tjb25maWciCiAKIGNvbmZpZyBDVVNFCi0JdHJpc3RhdGUgIkNoYXJhY3RlciBkZXZpY2UgaW4gVXNlcnBhY2Ugc3VwcG9ydCIKKwl0cmlzdGF0ZSAiQ2hhcmFjdGVyIGRldmljZSBpbiBVc2Vyc3BhY2Ugc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEZVU0VfRlMKIAloZWxwCiAJICBUaGlzIEZVU0UgZXh0ZW5zaW9uIGFsbG93cyBjaGFyYWN0ZXIgZGV2aWNlcyB0byBiZQpkaWZmIC0tZ2l0IGEvZnMvYWZzL3dyaXRlLmMgYi9mcy9hZnMvd3JpdGUuYwppbmRleCAzZGFiOWU5Li43MjI3NDNiIDEwMDY0NAotLS0gYS9mcy9hZnMvd3JpdGUuYworKysgYi9mcy9hZnMvd3JpdGUuYwpAQCAtNjgwLDcgKzY4MCw2IEBACiB7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSB2bm9kZS0+dmZzX2lub2RlLmlfbWFwcGluZzsKIAlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0gewotCQkuYmRpCQk9IG1hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8sCiAJCS5zeW5jX21vZGUJPSBXQl9TWU5DX0FMTCwKIAkJLm5yX3RvX3dyaXRlCT0gTE9OR19NQVgsCiAJCS5yYW5nZV9jeWNsaWMJPSAxLApkaWZmIC0tZ2l0IGEvZnMvYWlvLmMgYi9mcy9haW8uYwppbmRleCAxY2NmMjVjLi4zMDA2YjViIDEwMDY0NAotLS0gYS9mcy9haW8uYworKysgYi9mcy9haW8uYwpAQCAtMTI3Nyw3ICsxMjc3LDcgQEAKIC8qIHN5c19pb19kZXN0cm95OgogICoJRGVzdHJveSB0aGUgYWlvX2NvbnRleHQgc3BlY2lmaWVkLiAgTWF5IGNhbmNlbCBhbnkgb3V0c3RhbmRpbmcgCiAgKglBSU9zIGFuZCBibG9jayBvbiBjb21wbGV0aW9uLiAgV2lsbCBmYWlsIHdpdGggLUVOT1NZUyBpZiBub3QKLSAqCWltcGxlbWVudGVkLiAgTWF5IGZhaWwgd2l0aCAtRUZBVUxUIGlmIHRoZSBjb250ZXh0IHBvaW50ZWQgdG8KKyAqCWltcGxlbWVudGVkLiAgTWF5IGZhaWwgd2l0aCAtRUlOVkFMIGlmIHRoZSBjb250ZXh0IHBvaW50ZWQgdG8KICAqCWlzIGludmFsaWQuCiAgKi8KIFNZU0NBTExfREVGSU5FMShpb19kZXN0cm95LCBhaW9fY29udGV4dF90LCBjdHgpCkBAIC0xNzk1LDE1ICsxNzk1LDE2IEBACiAKIC8qIGlvX2dldGV2ZW50czoKICAqCUF0dGVtcHRzIHRvIHJlYWQgYXQgbGVhc3QgbWluX25yIGV2ZW50cyBhbmQgdXAgdG8gbnIgZXZlbnRzIGZyb20KLSAqCXRoZSBjb21wbGV0aW9uIHF1ZXVlIGZvciB0aGUgYWlvX2NvbnRleHQgc3BlY2lmaWVkIGJ5IGN0eF9pZC4gIE1heQotICoJZmFpbCB3aXRoIC1FSU5WQUwgaWYgY3R4X2lkIGlzIGludmFsaWQsIGlmIG1pbl9uciBpcyBvdXQgb2YgcmFuZ2UsCi0gKglpZiBuciBpcyBvdXQgb2YgcmFuZ2UsIGlmIHdoZW4gaXMgb3V0IG9mIHJhbmdlLiAgTWF5IGZhaWwgd2l0aAotICoJLUVGQVVMVCBpZiBhbnkgb2YgdGhlIG1lbW9yeSBzcGVjaWZpZWQgdG8gaXMgaW52YWxpZC4gIE1heSByZXR1cm4KLSAqCTAgb3IgPCBtaW5fbnIgaWYgbm8gZXZlbnRzIGFyZSBhdmFpbGFibGUgYW5kIHRoZSB0aW1lb3V0IHNwZWNpZmllZAotICoJYnkgd2hlbgloYXMgZWxhcHNlZCwgd2hlcmUgd2hlbiA9PSBOVUxMIHNwZWNpZmllcyBhbiBpbmZpbml0ZQotICoJdGltZW91dC4gIE5vdGUgdGhhdCB0aGUgdGltZW91dCBwb2ludGVkIHRvIGJ5IHdoZW4gaXMgcmVsYXRpdmUgYW5kCi0gKgl3aWxsIGJlIHVwZGF0ZWQgaWYgbm90IE5VTEwgYW5kIHRoZSBvcGVyYXRpb24gYmxvY2tzLiAgV2lsbCBmYWlsCi0gKgl3aXRoIC1FTk9TWVMgaWYgbm90IGltcGxlbWVudGVkLgorICoJdGhlIGNvbXBsZXRpb24gcXVldWUgZm9yIHRoZSBhaW9fY29udGV4dCBzcGVjaWZpZWQgYnkgY3R4X2lkLiBJZgorICoJaXQgc3VjY2VlZHMsIHRoZSBudW1iZXIgb2YgcmVhZCBldmVudHMgaXMgcmV0dXJuZWQuIE1heSBmYWlsIHdpdGgKKyAqCS1FSU5WQUwgaWYgY3R4X2lkIGlzIGludmFsaWQsIGlmIG1pbl9uciBpcyBvdXQgb2YgcmFuZ2UsIGlmIG5yIGlzCisgKglvdXQgb2YgcmFuZ2UsIGlmIHRpbWVvdXQgaXMgb3V0IG9mIHJhbmdlLiAgTWF5IGZhaWwgd2l0aCAtRUZBVUxUCisgKglpZiBhbnkgb2YgdGhlIG1lbW9yeSBzcGVjaWZpZWQgaXMgaW52YWxpZC4gIE1heSByZXR1cm4gMCBvcgorICoJPCBtaW5fbnIgaWYgdGhlIHRpbWVvdXQgc3BlY2lmaWVkIGJ5IHRpbWVvdXQgaGFzIGVsYXBzZWQKKyAqCWJlZm9yZSBzdWZmaWNpZW50IGV2ZW50cyBhcmUgYXZhaWxhYmxlLCB3aGVyZSB0aW1lb3V0ID09IE5VTEwKKyAqCXNwZWNpZmllcyBhbiBpbmZpbml0ZSB0aW1lb3V0LiBOb3RlIHRoYXQgdGhlIHRpbWVvdXQgcG9pbnRlZCB0byBieQorICoJdGltZW91dCBpcyByZWxhdGl2ZSBhbmQgd2lsbCBiZSB1cGRhdGVkIGlmIG5vdCBOVUxMIGFuZCB0aGUKKyAqCW9wZXJhdGlvbiBibG9ja3MuIFdpbGwgZmFpbCB3aXRoIC1FTk9TWVMgaWYgbm90IGltcGxlbWVudGVkLgogICovCiBTWVNDQUxMX0RFRklORTUoaW9fZ2V0ZXZlbnRzLCBhaW9fY29udGV4dF90LCBjdHhfaWQsCiAJCWxvbmcsIG1pbl9uciwKZGlmZiAtLWdpdCBhL2ZzL2JlZnMvbGludXh2ZnMuYyBiL2ZzL2JlZnMvbGludXh2ZnMuYwppbmRleCAzNGRkZGE4Li5kYzM5ZDI4IDEwMDY0NAotLS0gYS9mcy9iZWZzL2xpbnV4dmZzLmMKKysrIGIvZnMvYmVmcy9saW51eHZmcy5jCkBAIC00MzYsNyArNDM2LDcgQEAKIAkJCQkJICAgICAgaW5pdF9vbmNlKTsKIAlpZiAoYmVmc19pbm9kZV9jYWNoZXAgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgImJlZnNfaW5pdF9pbm9kZWNhY2hlOiAiCi0JCSAgICAgICAiQ291bGRuJ3QgaW5pdGFsaXplIGlub2RlIHNsYWJjYWNoZVxuIik7CisJCSAgICAgICAiQ291bGRuJ3QgaW5pdGlhbGl6ZSBpbm9kZSBzbGFiY2FjaGVcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL2Jsb2NrX2Rldi5jIGIvZnMvYmxvY2tfZGV2LmMKaW5kZXggOTlkNmFmOC4uYjMxNzFmYiAxMDA2NDQKLS0tIGEvZnMvYmxvY2tfZGV2LmMKKysrIGIvZnMvYmxvY2tfZGV2LmMKQEAgLTY4MSw4ICs2ODEsOCBAQAogCWlmICghYmRfbWF5X2NsYWltKGJkZXYsIHdob2xlLCBob2xkZXIpKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JLyogaWYgc29tZW9uZSBlbHNlIGlzIGNsYWltaW5nLCB3YWl0IGZvciBpdCB0byBmaW5pc2ggKi8KLQlpZiAod2hvbGUtPmJkX2NsYWltaW5nICYmIHdob2xlLT5iZF9jbGFpbWluZyAhPSBob2xkZXIpIHsKKwkvKiBpZiBjbGFpbWluZyBpcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3YWl0IGZvciBpdCB0byBmaW5pc2ggKi8KKwlpZiAod2hvbGUtPmJkX2NsYWltaW5nKSB7CiAJCXdhaXRfcXVldWVfaGVhZF90ICp3cSA9IGJpdF93YWl0cXVldWUoJndob2xlLT5iZF9jbGFpbWluZywgMCk7CiAJCURFRklORV9XQUlUKHdhaXQpOwogCmRpZmYgLS1naXQgYS9mcy9idHJmcy9jdHJlZS5jIGIvZnMvYnRyZnMvY3RyZWUuYwppbmRleCAwZDFkOTY2Li5jM2RmMTRjIDEwMDY0NAotLS0gYS9mcy9idHJmcy9jdHJlZS5jCisrKyBiL2ZzL2J0cmZzL2N0cmVlLmMKQEAgLTIzMDQsMTIgKzIzMDQsMTcgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogbWluIHNsb3QgY29udHJvbHMgdGhlIGxvd2VzdCBpbmRleCB3ZSdyZSB3aWxsaW5nIHRvIHB1c2ggdG8gdGhlCisgKiByaWdodC4gIFdlJ2xsIHB1c2ggdXAgdG8gYW5kIGluY2x1ZGluZyBtaW5fc2xvdCwgYnV0IG5vIGxvd2VyCisgKi8KIHN0YXRpYyBub2lubGluZSBpbnQgX19wdXNoX2xlYWZfcmlnaHQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkJICAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCQkJICAgICAgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsCiAJCQkJICAgICAgaW50IGRhdGFfc2l6ZSwgaW50IGVtcHR5LAogCQkJCSAgICAgIHN0cnVjdCBleHRlbnRfYnVmZmVyICpyaWdodCwKLQkJCQkgICAgICBpbnQgZnJlZV9zcGFjZSwgdTMyIGxlZnRfbnJpdGVtcykKKwkJCQkgICAgICBpbnQgZnJlZV9zcGFjZSwgdTMyIGxlZnRfbnJpdGVtcywKKwkJCQkgICAgICB1MzIgbWluX3Nsb3QpCiB7CiAJc3RydWN0IGV4dGVudF9idWZmZXIgKmxlZnQgPSBwYXRoLT5ub2Rlc1swXTsKIAlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqdXBwZXIgPSBwYXRoLT5ub2Rlc1sxXTsKQEAgLTIzMjcsNyArMjMzMiw3IEBACiAJaWYgKGVtcHR5KQogCQluciA9IDA7CiAJZWxzZQotCQluciA9IDE7CisJCW5yID0gbWF4X3QodTMyLCAxLCBtaW5fc2xvdCk7CiAKIAlpZiAocGF0aC0+c2xvdHNbMF0gPj0gbGVmdF9ucml0ZW1zKQogCQlwdXNoX3NwYWNlICs9IGRhdGFfc2l6ZTsKQEAgLTI0NjksMTAgKzI0NzQsMTQgQEAKICAqCiAgKiByZXR1cm5zIDEgaWYgdGhlIHB1c2ggZmFpbGVkIGJlY2F1c2UgdGhlIG90aGVyIG5vZGUgZGlkbid0IGhhdmUgZW5vdWdoCiAgKiByb29tLCAwIGlmIGV2ZXJ5dGhpbmcgd29ya2VkIG91dCBhbmQgPCAwIGlmIHRoZXJlIHdlcmUgbWFqb3IgZXJyb3JzLgorICoKKyAqIHRoaXMgd2lsbCBwdXNoIHN0YXJ0aW5nIGZyb20gbWluX3Nsb3QgdG8gdGhlIGVuZCBvZiB0aGUgbGVhZi4gIEl0IHdvbid0CisgKiBwdXNoIGFueSBzbG90IGxvd2VyIHRoYW4gbWluX3Nsb3QKICAqLwogc3RhdGljIGludCBwdXNoX2xlYWZfcmlnaHQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsIHN0cnVjdCBidHJmc19yb290Ci0JCQkgICAqcm9vdCwgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsIGludCBkYXRhX3NpemUsCi0JCQkgICBpbnQgZW1wdHkpCisJCQkgICAqcm9vdCwgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsCisJCQkgICBpbnQgbWluX2RhdGFfc2l6ZSwgaW50IGRhdGFfc2l6ZSwKKwkJCSAgIGludCBlbXB0eSwgdTMyIG1pbl9zbG90KQogewogCXN0cnVjdCBleHRlbnRfYnVmZmVyICpsZWZ0ID0gcGF0aC0+bm9kZXNbMF07CiAJc3RydWN0IGV4dGVudF9idWZmZXIgKnJpZ2h0OwpAQCAtMjUxNCw4ICsyNTIzLDggQEAKIAlpZiAobGVmdF9ucml0ZW1zID09IDApCiAJCWdvdG8gb3V0X3VubG9jazsKIAotCXJldHVybiBfX3B1c2hfbGVhZl9yaWdodCh0cmFucywgcm9vdCwgcGF0aCwgZGF0YV9zaXplLCBlbXB0eSwKLQkJCQlyaWdodCwgZnJlZV9zcGFjZSwgbGVmdF9ucml0ZW1zKTsKKwlyZXR1cm4gX19wdXNoX2xlYWZfcmlnaHQodHJhbnMsIHJvb3QsIHBhdGgsIG1pbl9kYXRhX3NpemUsIGVtcHR5LAorCQkJCXJpZ2h0LCBmcmVlX3NwYWNlLCBsZWZ0X25yaXRlbXMsIG1pbl9zbG90KTsKIG91dF91bmxvY2s6CiAJYnRyZnNfdHJlZV91bmxvY2socmlnaHQpOwogCWZyZWVfZXh0ZW50X2J1ZmZlcihyaWdodCk7CkBAIC0yNTI1LDEyICsyNTM0LDE3IEBACiAvKgogICogcHVzaCBzb21lIGRhdGEgaW4gdGhlIHBhdGggbGVhZiB0byB0aGUgbGVmdCwgdHJ5aW5nIHRvIGZyZWUgdXAgYXQKICAqIGxlYXN0IGRhdGFfc2l6ZSBieXRlcy4gIHJldHVybnMgemVybyBpZiB0aGUgcHVzaCB3b3JrZWQsIG5vbnplcm8gb3RoZXJ3aXNlCisgKgorICogbWF4X3Nsb3QgY2FuIHB1dCBhIGxpbWl0IG9uIGhvdyBmYXIgaW50byB0aGUgbGVhZiB3ZSdsbCBwdXNoIGl0ZW1zLiAgVGhlCisgKiBpdGVtIGF0ICdtYXhfc2xvdCcgd29uJ3QgYmUgdG91Y2hlZC4gIFVzZSAodTMyKS0xIHRvIG1ha2UgdXMgZG8gYWxsIHRoZQorICogaXRlbXMKICAqLwogc3RhdGljIG5vaW5saW5lIGludCBfX3B1c2hfbGVhZl9sZWZ0KHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJCSAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCQkJICAgICBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwgaW50IGRhdGFfc2l6ZSwKIAkJCQkgICAgIGludCBlbXB0eSwgc3RydWN0IGV4dGVudF9idWZmZXIgKmxlZnQsCi0JCQkJICAgICBpbnQgZnJlZV9zcGFjZSwgaW50IHJpZ2h0X25yaXRlbXMpCisJCQkJICAgICBpbnQgZnJlZV9zcGFjZSwgdTMyIHJpZ2h0X25yaXRlbXMsCisJCQkJICAgICB1MzIgbWF4X3Nsb3QpCiB7CiAJc3RydWN0IGJ0cmZzX2Rpc2tfa2V5IGRpc2tfa2V5OwogCXN0cnVjdCBleHRlbnRfYnVmZmVyICpyaWdodCA9IHBhdGgtPm5vZGVzWzBdOwpAQCAtMjU0OSw5ICsyNTYzLDkgQEAKIAlzbG90ID0gcGF0aC0+c2xvdHNbMV07CiAKIAlpZiAoZW1wdHkpCi0JCW5yID0gcmlnaHRfbnJpdGVtczsKKwkJbnIgPSBtaW4ocmlnaHRfbnJpdGVtcywgbWF4X3Nsb3QpOwogCWVsc2UKLQkJbnIgPSByaWdodF9ucml0ZW1zIC0gMTsKKwkJbnIgPSBtaW4ocmlnaHRfbnJpdGVtcyAtIDEsIG1heF9zbG90KTsKIAogCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CiAJCWl0ZW0gPSBidHJmc19pdGVtX25yKHJpZ2h0LCBpKTsKQEAgLTI3MTIsMTAgKzI3MjYsMTQgQEAKIC8qCiAgKiBwdXNoIHNvbWUgZGF0YSBpbiB0aGUgcGF0aCBsZWFmIHRvIHRoZSBsZWZ0LCB0cnlpbmcgdG8gZnJlZSB1cCBhdAogICogbGVhc3QgZGF0YV9zaXplIGJ5dGVzLiAgcmV0dXJucyB6ZXJvIGlmIHRoZSBwdXNoIHdvcmtlZCwgbm9uemVybyBvdGhlcndpc2UKKyAqCisgKiBtYXhfc2xvdCBjYW4gcHV0IGEgbGltaXQgb24gaG93IGZhciBpbnRvIHRoZSBsZWFmIHdlJ2xsIHB1c2ggaXRlbXMuICBUaGUKKyAqIGl0ZW0gYXQgJ21heF9zbG90JyB3b24ndCBiZSB0b3VjaGVkLiAgVXNlICh1MzIpLTEgdG8gbWFrZSB1cyBwdXNoIGFsbCB0aGUKKyAqIGl0ZW1zCiAgKi8KIHN0YXRpYyBpbnQgcHVzaF9sZWFmX2xlZnQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsIHN0cnVjdCBidHJmc19yb290Ci0JCQkgICpyb290LCBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwgaW50IGRhdGFfc2l6ZSwKLQkJCSAgaW50IGVtcHR5KQorCQkJICAqcm9vdCwgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsIGludCBtaW5fZGF0YV9zaXplLAorCQkJICBpbnQgZGF0YV9zaXplLCBpbnQgZW1wdHksIHUzMiBtYXhfc2xvdCkKIHsKIAlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqcmlnaHQgPSBwYXRoLT5ub2Rlc1swXTsKIAlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqbGVmdDsKQEAgLTI3NjEsOCArMjc3OSw5IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldHVybiBfX3B1c2hfbGVhZl9sZWZ0KHRyYW5zLCByb290LCBwYXRoLCBkYXRhX3NpemUsCi0JCQkgICAgICAgZW1wdHksIGxlZnQsIGZyZWVfc3BhY2UsIHJpZ2h0X25yaXRlbXMpOworCXJldHVybiBfX3B1c2hfbGVhZl9sZWZ0KHRyYW5zLCByb290LCBwYXRoLCBtaW5fZGF0YV9zaXplLAorCQkJICAgICAgIGVtcHR5LCBsZWZ0LCBmcmVlX3NwYWNlLCByaWdodF9ucml0ZW1zLAorCQkJICAgICAgIG1heF9zbG90KTsKIG91dDoKIAlidHJmc190cmVlX3VubG9jayhsZWZ0KTsKIAlmcmVlX2V4dGVudF9idWZmZXIobGVmdCk7CkBAIC0yODU1LDYgKzI4NzQsNjQgQEAKIH0KIAogLyoKKyAqIGRvdWJsZSBzcGxpdHMgaGFwcGVuIHdoZW4gd2UgbmVlZCB0byBpbnNlcnQgYSBiaWcgaXRlbSBpbiB0aGUgbWlkZGxlCisgKiBvZiBhIGxlYWYuICBBIGRvdWJsZSBzcGxpdCBjYW4gbGVhdmUgdXMgd2l0aCAzIG1vc3RseSBlbXB0eSBsZWF2ZXM6CisgKiBsZWFmOiBbIHNsb3RzIDAgLSBOXSBbIG91ciB0YXJnZXQgXSBbIE4gKyAxIC0gdG90YWwgaW4gbGVhZiBdCisgKiAgICAgICAgICBBICAgICAgICAgICAgICAgICBCICAgICAgICAgICAgICAgICBDCisgKgorICogV2UgYXZvaWQgdGhpcyBieSB0cnlpbmcgdG8gcHVzaCB0aGUgaXRlbXMgb24gZWl0aGVyIHNpZGUgb2Ygb3VyIHRhcmdldAorICogaW50byB0aGUgYWRqYWNlbnQgbGVhdmVzLiAgSWYgYWxsIGdvZXMgd2VsbCB3ZSBjYW4gYXZvaWQgdGhlIGRvdWJsZSBzcGxpdAorICogY29tcGxldGVseS4KKyAqLworc3RhdGljIG5vaW5saW5lIGludCBwdXNoX2Zvcl9kb3VibGVfc3BsaXQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkJCSAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJCSAgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsCisJCQkJCSAgaW50IGRhdGFfc2l6ZSkKK3sKKwlpbnQgcmV0OworCWludCBwcm9ncmVzcyA9IDA7CisJaW50IHNsb3Q7CisJdTMyIG5yaXRlbXM7CisKKwlzbG90ID0gcGF0aC0+c2xvdHNbMF07CisKKwkvKgorCSAqIHRyeSB0byBwdXNoIGFsbCB0aGUgaXRlbXMgYWZ0ZXIgb3VyIHNsb3QgaW50byB0aGUKKwkgKiByaWdodCBsZWFmCisJICovCisJcmV0ID0gcHVzaF9sZWFmX3JpZ2h0KHRyYW5zLCByb290LCBwYXRoLCAxLCBkYXRhX3NpemUsIDAsIHNsb3QpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKHJldCA9PSAwKQorCQlwcm9ncmVzcysrOworCisJbnJpdGVtcyA9IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKHBhdGgtPm5vZGVzWzBdKTsKKwkvKgorCSAqIG91ciBnb2FsIGlzIHRvIGdldCBvdXIgc2xvdCBhdCB0aGUgc3RhcnQgb3IgZW5kIG9mIGEgbGVhZi4gIElmCisJICogd2UndmUgZG9uZSBzbyB3ZSdyZSBkb25lCisJICovCisJaWYgKHBhdGgtPnNsb3RzWzBdID09IDAgfHwgcGF0aC0+c2xvdHNbMF0gPT0gbnJpdGVtcykKKwkJcmV0dXJuIDA7CisKKwlpZiAoYnRyZnNfbGVhZl9mcmVlX3NwYWNlKHJvb3QsIHBhdGgtPm5vZGVzWzBdKSA+PSBkYXRhX3NpemUpCisJCXJldHVybiAwOworCisJLyogdHJ5IHRvIHB1c2ggYWxsIHRoZSBpdGVtcyBiZWZvcmUgb3VyIHNsb3QgaW50byB0aGUgbmV4dCBsZWFmICovCisJc2xvdCA9IHBhdGgtPnNsb3RzWzBdOworCXJldCA9IHB1c2hfbGVhZl9sZWZ0KHRyYW5zLCByb290LCBwYXRoLCAxLCBkYXRhX3NpemUsIDAsIHNsb3QpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKHJldCA9PSAwKQorCQlwcm9ncmVzcysrOworCisJaWYgKHByb2dyZXNzKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyoKICAqIHNwbGl0IHRoZSBwYXRoJ3MgbGVhZiBpbiB0d28sIG1ha2luZyBzdXJlIHRoZXJlIGlzIGF0IGxlYXN0IGRhdGFfc2l6ZQogICogYXZhaWxhYmxlIGZvciB0aGUgcmVzdWx0aW5nIGxlYWYgbGV2ZWwgb2YgdGhlIHBhdGguCiAgKgpAQCAtMjg3Niw2ICsyOTUzLDcgQEAKIAlpbnQgd3JldDsKIAlpbnQgc3BsaXQ7CiAJaW50IG51bV9kb3VibGVzID0gMDsKKwlpbnQgdHJpZWRfYXZvaWRfZG91YmxlID0gMDsKIAogCWwgPSBwYXRoLT5ub2Rlc1swXTsKIAlzbG90ID0gcGF0aC0+c2xvdHNbMF07CkBAIC0yODg0LDEyICsyOTYyLDE0IEBACiAJCXJldHVybiAtRU9WRVJGTE9XOwogCiAJLyogZmlyc3QgdHJ5IHRvIG1ha2Ugc29tZSByb29tIGJ5IHB1c2hpbmcgbGVmdCBhbmQgcmlnaHQgKi8KLQlpZiAoZGF0YV9zaXplICYmIGluc19rZXktPnR5cGUgIT0gQlRSRlNfRElSX0lURU1fS0VZKSB7Ci0JCXdyZXQgPSBwdXNoX2xlYWZfcmlnaHQodHJhbnMsIHJvb3QsIHBhdGgsIGRhdGFfc2l6ZSwgMCk7CisJaWYgKGRhdGFfc2l6ZSkgeworCQl3cmV0ID0gcHVzaF9sZWFmX3JpZ2h0KHRyYW5zLCByb290LCBwYXRoLCBkYXRhX3NpemUsCisJCQkJICAgICAgIGRhdGFfc2l6ZSwgMCwgMCk7CiAJCWlmICh3cmV0IDwgMCkKIAkJCXJldHVybiB3cmV0OwogCQlpZiAod3JldCkgewotCQkJd3JldCA9IHB1c2hfbGVhZl9sZWZ0KHRyYW5zLCByb290LCBwYXRoLCBkYXRhX3NpemUsIDApOworCQkJd3JldCA9IHB1c2hfbGVhZl9sZWZ0KHRyYW5zLCByb290LCBwYXRoLCBkYXRhX3NpemUsCisJCQkJCSAgICAgIGRhdGFfc2l6ZSwgMCwgKHUzMiktMSk7CiAJCQlpZiAod3JldCA8IDApCiAJCQkJcmV0dXJuIHdyZXQ7CiAJCX0KQEAgLTI5MjMsNiArMzAwMyw4IEBACiAJCQkJaWYgKG1pZCAhPSBucml0ZW1zICYmCiAJCQkJICAgIGxlYWZfc3BhY2VfdXNlZChsLCBtaWQsIG5yaXRlbXMgLSBtaWQpICsKIAkJCQkgICAgZGF0YV9zaXplID4gQlRSRlNfTEVBRl9EQVRBX1NJWkUocm9vdCkpIHsKKwkJCQkJaWYgKGRhdGFfc2l6ZSAmJiAhdHJpZWRfYXZvaWRfZG91YmxlKQorCQkJCQkJZ290byBwdXNoX2Zvcl9kb3VibGU7CiAJCQkJCXNwbGl0ID0gMjsKIAkJCQl9CiAJCQl9CkBAIC0yOTM5LDYgKzMwMjEsOCBAQAogCQkJCWlmIChtaWQgIT0gbnJpdGVtcyAmJgogCQkJCSAgICBsZWFmX3NwYWNlX3VzZWQobCwgbWlkLCBucml0ZW1zIC0gbWlkKSArCiAJCQkJICAgIGRhdGFfc2l6ZSA+IEJUUkZTX0xFQUZfREFUQV9TSVpFKHJvb3QpKSB7CisJCQkJCWlmIChkYXRhX3NpemUgJiYgIXRyaWVkX2F2b2lkX2RvdWJsZSkKKwkJCQkJCWdvdG8gcHVzaF9mb3JfZG91YmxlOwogCQkJCQlzcGxpdCA9IDIgOwogCQkJCX0KIAkJCX0KQEAgLTMwMTksNiArMzEwMywxMyBAQAogCX0KIAogCXJldHVybiByZXQ7CisKK3B1c2hfZm9yX2RvdWJsZToKKwlwdXNoX2Zvcl9kb3VibGVfc3BsaXQodHJhbnMsIHJvb3QsIHBhdGgsIGRhdGFfc2l6ZSk7CisJdHJpZWRfYXZvaWRfZG91YmxlID0gMTsKKwlpZiAoYnRyZnNfbGVhZl9mcmVlX3NwYWNlKHJvb3QsIHBhdGgtPm5vZGVzWzBdKSA+PSBkYXRhX3NpemUpCisJCXJldHVybiAwOworCWdvdG8gYWdhaW47CiB9CiAKIHN0YXRpYyBub2lubGluZSBpbnQgc2V0dXBfbGVhZl9mb3Jfc3BsaXQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCkBAIC0zOTE1LDEzICs0MDA2LDE1IEBACiAJCQlleHRlbnRfYnVmZmVyX2dldChsZWFmKTsKIAogCQkJYnRyZnNfc2V0X3BhdGhfYmxvY2tpbmcocGF0aCk7Ci0JCQl3cmV0ID0gcHVzaF9sZWFmX2xlZnQodHJhbnMsIHJvb3QsIHBhdGgsIDEsIDEpOworCQkJd3JldCA9IHB1c2hfbGVhZl9sZWZ0KHRyYW5zLCByb290LCBwYXRoLCAxLCAxLAorCQkJCQkgICAgICAxLCAodTMyKS0xKTsKIAkJCWlmICh3cmV0IDwgMCAmJiB3cmV0ICE9IC1FTk9TUEMpCiAJCQkJcmV0ID0gd3JldDsKIAogCQkJaWYgKHBhdGgtPm5vZGVzWzBdID09IGxlYWYgJiYKIAkJCSAgICBidHJmc19oZWFkZXJfbnJpdGVtcyhsZWFmKSkgewotCQkJCXdyZXQgPSBwdXNoX2xlYWZfcmlnaHQodHJhbnMsIHJvb3QsIHBhdGgsIDEsIDEpOworCQkJCXdyZXQgPSBwdXNoX2xlYWZfcmlnaHQodHJhbnMsIHJvb3QsIHBhdGgsIDEsCisJCQkJCQkgICAgICAgMSwgMSwgMCk7CiAJCQkJaWYgKHdyZXQgPCAwICYmIHdyZXQgIT0gLUVOT1NQQykKIAkJCQkJcmV0ID0gd3JldDsKIAkJCX0KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudF9pby5jIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKaW5kZXggYTQwODBjMi4uZDc0ZTZhZiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X2lvLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKQEAgLTI1OTQsNyArMjU5NCw2IEBACiAJCS5zeW5jX2lvID0gd2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwsCiAJfTsKIAlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjX3dyaXRlcGFnZXMgPSB7Ci0JCS5iZGkJCT0gd2JjLT5iZGksCiAJCS5zeW5jX21vZGUJPSB3YmMtPnN5bmNfbW9kZSwKIAkJLm9sZGVyX3RoYW5fdGhpcyA9IE5VTEwsCiAJCS5ucl90b193cml0ZQk9IDY0LApAQCAtMjYyOCw3ICsyNjI3LDYgQEAKIAkJLnN5bmNfaW8gPSBtb2RlID09IFdCX1NZTkNfQUxMLAogCX07CiAJc3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiY193cml0ZXBhZ2VzID0gewotCQkuYmRpCQk9IGlub2RlLT5pX21hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8sCiAJCS5zeW5jX21vZGUJPSBtb2RlLAogCQkub2xkZXJfdGhhbl90aGlzID0gTlVMTCwKIAkJLm5yX3RvX3dyaXRlCT0gbnJfcGFnZXMgKiAyLApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW9jdGwuYyBiL2ZzL2J0cmZzL2lvY3RsLmMKaW5kZXggNGRiYWY4OS4uOTI1NGIzZCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW9jdGwuYworKysgYi9mcy9idHJmcy9pb2N0bC5jCkBAIC0xNDU4LDcgKzE0NTgsNyBAQAogCSAqLwogCiAJLyogdGhlIGRlc3RpbmF0aW9uIG11c3QgYmUgb3BlbmVkIGZvciB3cml0aW5nICovCi0JaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpKQorCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB8fCAoZmlsZS0+Zl9mbGFncyAmIE9fQVBQRU5EKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXQgPSBtbnRfd2FudF93cml0ZShmaWxlLT5mX3BhdGgubW50KTsKQEAgLTE1MTEsNyArMTUxMSw3IEBACiAKIAkvKiBkZXRlcm1pbmUgcmFuZ2UgdG8gY2xvbmUgKi8KIAlyZXQgPSAtRUlOVkFMOwotCWlmIChvZmYgPj0gc3JjLT5pX3NpemUgfHwgb2ZmICsgbGVuID4gc3JjLT5pX3NpemUpCisJaWYgKG9mZiArIGxlbiA+IHNyYy0+aV9zaXplIHx8IG9mZiArIGxlbiA8IG9mZikKIAkJZ290byBvdXRfdW5sb2NrOwogCWlmIChsZW4gPT0gMCkKIAkJb2xlbiA9IGxlbiA9IHNyYy0+aV9zaXplIC0gb2ZmOwpAQCAtMTU3OCw2ICsxNTc4LDcgQEAKIAkJCXU2NCBkaXNrbyA9IDAsIGRpc2tsID0gMDsKIAkJCXU2NCBkYXRhbyA9IDAsIGRhdGFsID0gMDsKIAkJCXU4IGNvbXA7CisJCQl1NjQgZW5kb2ZmOwogCiAJCQlzaXplID0gYnRyZnNfaXRlbV9zaXplX25yKGxlYWYsIHNsb3QpOwogCQkJcmVhZF9leHRlbnRfYnVmZmVyKGxlYWYsIGJ1ZiwKQEAgLTE3MTIsOSArMTcxMywxOCBAQAogCQkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwogCiAJCQlpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwotCQkJaWYgKG5ld19rZXkub2Zmc2V0ICsgZGF0YWwgPiBpbm9kZS0+aV9zaXplKQotCQkJCWJ0cmZzX2lfc2l6ZV93cml0ZShpbm9kZSwKLQkJCQkJCSAgIG5ld19rZXkub2Zmc2V0ICsgZGF0YWwpOworCisJCQkvKgorCQkJICogd2Ugcm91bmQgdXAgdG8gdGhlIGJsb2NrIHNpemUgYXQgZW9mIHdoZW4KKwkJCSAqIGRldGVybWluaW5nIHdoaWNoIGV4dGVudHMgdG8gY2xvbmUgYWJvdmUsCisJCQkgKiBidXQgc2hvdWxkbid0IHJvdW5kIHVwIHRoZSBmaWxlIHNpemUKKwkJCSAqLworCQkJZW5kb2ZmID0gbmV3X2tleS5vZmZzZXQgKyBkYXRhbDsKKwkJCWlmIChlbmRvZmYgPiBvZmYrb2xlbikKKwkJCQllbmRvZmYgPSBvZmYrb2xlbjsKKwkJCWlmIChlbmRvZmYgPiBpbm9kZS0+aV9zaXplKQorCQkJCWJ0cmZzX2lfc2l6ZV93cml0ZShpbm9kZSwgZW5kb2ZmKTsKKwogCQkJQlRSRlNfSShpbm9kZSktPmZsYWdzID0gQlRSRlNfSShzcmMpLT5mbGFnczsKIAkJCXJldCA9IGJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOwogCQkJQlVHX09OKHJldCk7CmRpZmYgLS1naXQgYS9mcy9jZXBoL0tjb25maWcgYi9mcy9jZXBoL0tjb25maWcKaW5kZXggMDRiODI4MC4uYmM4N2I5YyAxMDA2NDQKLS0tIGEvZnMvY2VwaC9LY29uZmlnCisrKyBiL2ZzL2NlcGgvS2NvbmZpZwpAQCAtMiw3ICsyLDcgQEAKICAgICAgICAgdHJpc3RhdGUgIkNlcGggZGlzdHJpYnV0ZWQgZmlsZSBzeXN0ZW0gKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBJTkVUICYmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBMSUJDUkMzMkMKLQlzZWxlY3QgQ09ORklHX0NSWVBUT19BRVMKKwlzZWxlY3QgQ1JZUFRPX0FFUwogCWhlbHAKIAkgIENob29zZSBZIG9yIE0gaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIG1vdW50aW5nIHRoZQogCSAgZXhwZXJpbWVudGFsIENlcGggZGlzdHJpYnV0ZWQgZmlsZSBzeXN0ZW0uICBDZXBoIGlzIGFuIGV4dHJlbWVseQpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9hdXRoX3guYyBiL2ZzL2NlcGgvYXV0aF94LmMKaW5kZXggM2ZlNDkwNC4uNmQ0NDA1MyAxMDA2NDQKLS0tIGEvZnMvY2VwaC9hdXRoX3guYworKysgYi9mcy9jZXBoL2F1dGhfeC5jCkBAIC02MTMsNiArNjEzLDkgQEAKIAkJcmVtb3ZlX3RpY2tldF9oYW5kbGVyKGFjLCB0aCk7CiAJfQogCisJaWYgKHhpLT5hdXRoX2F1dGhvcml6ZXIuYnVmKQorCQljZXBoX2J1ZmZlcl9wdXQoeGktPmF1dGhfYXV0aG9yaXplci5idWYpOworCiAJa2ZyZWUoYWMtPnByaXZhdGUpOwogCWFjLT5wcml2YXRlID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2NlcGgvY2Fwcy5jIGIvZnMvY2VwaC9jYXBzLmMKaW5kZXggNzQxNDRkNi4uYjgxYmU5YSAxMDA2NDQKLS0tIGEvZnMvY2VwaC9jYXBzLmMKKysrIGIvZnMvY2VwaC9jYXBzLmMKQEAgLTYyNyw3ICs2MjcsNyBAQAogCWlmIChmbW9kZSA+PSAwKQogCQlfX2NlcGhfZ2V0X2Ztb2RlKGNpLCBmbW9kZSk7CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotCXdha2VfdXAoJmNpLT5pX2NhcF93cSk7CisJd2FrZV91cF9hbGwoJmNpLT5pX2NhcF93cSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExODEsNyArMTE4MSw3IEBACiAJfQogCiAJaWYgKHdha2UpCi0JCXdha2VfdXAoJmNpLT5pX2NhcF93cSk7CisJCXdha2VfdXBfYWxsKCZjaS0+aV9jYXBfd3EpOwogCiAJcmV0dXJuIGRlbGF5ZWQ7CiB9CkBAIC0yMTUzLDcgKzIxNTMsNyBAQAogCWVsc2UgaWYgKGZsdXNoc25hcHMpCiAJCWNlcGhfZmx1c2hfc25hcHMoY2kpOwogCWlmICh3YWtlKQotCQl3YWtlX3VwKCZjaS0+aV9jYXBfd3EpOworCQl3YWtlX3VwX2FsbCgmY2ktPmlfY2FwX3dxKTsKIAlpZiAocHV0KQogCQlpcHV0KGlub2RlKTsKIH0KQEAgLTIyMjksNyArMjIyOSw3IEBACiAJCWlwdXQoaW5vZGUpOwogCX0gZWxzZSBpZiAoY29tcGxldGVfY2Fwc25hcCkgewogCQljZXBoX2ZsdXNoX3NuYXBzKGNpKTsKLQkJd2FrZV91cCgmY2ktPmlfY2FwX3dxKTsKKwkJd2FrZV91cF9hbGwoJmNpLT5pX2NhcF93cSk7CiAJfQogCWlmIChkcm9wX2NhcHNuYXApCiAJCWlwdXQoaW5vZGUpOwpAQCAtMjQwNSw3ICsyNDA1LDcgQEAKIAlpZiAocXVldWVfaW52YWxpZGF0ZSkKIAkJY2VwaF9xdWV1ZV9pbnZhbGlkYXRlKGlub2RlKTsKIAlpZiAod2FrZSkKLQkJd2FrZV91cCgmY2ktPmlfY2FwX3dxKTsKKwkJd2FrZV91cF9hbGwoJmNpLT5pX2NhcF93cSk7CiAKIAlpZiAoY2hlY2tfY2FwcyA9PSAxKQogCQljZXBoX2NoZWNrX2NhcHMoY2ksIENIRUNLX0NBUFNfTk9ERUxBWXxDSEVDS19DQVBTX0FVVEhPTkxZLApAQCAtMjQ2MCw3ICsyNDYwLDcgQEAKIAkJCQkJIHN0cnVjdCBjZXBoX2lub2RlX2luZm8sCiAJCQkJCSBpX2ZsdXNoaW5nX2l0ZW0pLT52ZnNfaW5vZGUpOwogCQltZHNjLT5udW1fY2FwX2ZsdXNoaW5nLS07Ci0JCXdha2VfdXAoJm1kc2MtPmNhcF9mbHVzaGluZ193cSk7CisJCXdha2VfdXBfYWxsKCZtZHNjLT5jYXBfZmx1c2hpbmdfd3EpOwogCQlkb3V0KCIgaW5vZGUgJXAgbm93ICFmbHVzaGluZ1xuIiwgaW5vZGUpOwogCiAJCWlmIChjaS0+aV9kaXJ0eV9jYXBzID09IDApIHsKQEAgLTI0NzIsNyArMjQ3Miw3IEBACiAJCX0KIAl9CiAJc3Bpbl91bmxvY2soJm1kc2MtPmNhcF9kaXJ0eV9sb2NrKTsKLQl3YWtlX3VwKCZjaS0+aV9jYXBfd3EpOworCXdha2VfdXBfYWxsKCZjaS0+aV9jYXBfd3EpOwogCiBvdXQ6CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwpAQCAtMjk4NCw2ICsyOTg0LDcgQEAKIAkJbWVtY3B5KCpwLCBkZW50cnktPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfbmFtZS5sZW4pOwogCQkqcCArPSBkZW50cnktPmRfbmFtZS5sZW47CiAJCXJlbC0+ZG5hbWVfc2VxID0gY3B1X3RvX2xlMzIoZGktPmxlYXNlX3NlcSk7CisJCV9fY2VwaF9tZHNjX2Ryb3BfZGVudHJ5X2xlYXNlKGRlbnRyeSk7CiAJfQogCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvZGlyLmMgYi9mcy9jZXBoL2Rpci5jCmluZGV4IGY4NTcxOTMuLmY5NGVkM2MgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvZGlyLmMKKysrIGIvZnMvY2VwaC9kaXIuYwpAQCAtMjY2LDYgKzI2Niw3IEBACiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAlpZiAoKGZpbHAtPmZfcG9zID09IDIgfHwgZmktPmRlbnRyeSkgJiYKIAkgICAgIWNlcGhfdGVzdF9vcHQoY2xpZW50LCBOT0FTWU5DUkVBRERJUikgJiYKKwkgICAgY2VwaF9zbmFwKGlub2RlKSAhPSBDRVBIX1NOQVBESVIgJiYKIAkgICAgKGNpLT5pX2NlcGhfZmxhZ3MgJiBDRVBIX0lfQ09NUExFVEUpICYmCiAJICAgIF9fY2VwaF9jYXBzX2lzc3VlZF9tYXNrKGNpLCBDRVBIX0NBUF9GSUxFX1NIQVJFRCwgMSkpIHsKIAkJZXJyID0gX19kY2FjaGVfcmVhZGRpcihmaWxwLCBkaXJlbnQsIGZpbGxkaXIpOwpAQCAtMTAxMywxOCArMTAxNCwyMiBAQAogCiAvKgogICogV2hlbiBhIGRlbnRyeSBpcyByZWxlYXNlZCwgY2xlYXIgdGhlIGRpciBJX0NPTVBMRVRFIGlmIGl0IHdhcyBwYXJ0Ci0gKiBvZiB0aGUgY3VycmVudCBkaXIgZ2VuLgorICogb2YgdGhlIGN1cnJlbnQgZGlyIGdlbiBvciBpZiB0aGlzIGlzIGluIHRoZSBzbmFwc2hvdCBuYW1lc3BhY2UuCiAgKi8KIHN0YXRpYyB2b2lkIGNlcGhfZGVudHJ5X3JlbGVhc2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCXN0cnVjdCBjZXBoX2RlbnRyeV9pbmZvICpkaSA9IGNlcGhfZGVudHJ5KGRlbnRyeSk7CiAJc3RydWN0IGlub2RlICpwYXJlbnRfaW5vZGUgPSBkZW50cnktPmRfcGFyZW50LT5kX2lub2RlOworCXU2NCBzbmFwaWQgPSBjZXBoX3NuYXAocGFyZW50X2lub2RlKTsKIAotCWlmIChwYXJlbnRfaW5vZGUpIHsKKwlkb3V0KCJkZW50cnlfcmVsZWFzZSAlcCBwYXJlbnQgJXBcbiIsIGRlbnRyeSwgcGFyZW50X2lub2RlKTsKKworCWlmIChwYXJlbnRfaW5vZGUgJiYgc25hcGlkICE9IENFUEhfU05BUERJUikgewogCQlzdHJ1Y3QgY2VwaF9pbm9kZV9pbmZvICpjaSA9IGNlcGhfaW5vZGUocGFyZW50X2lub2RlKTsKIAogCQlzcGluX2xvY2soJnBhcmVudF9pbm9kZS0+aV9sb2NrKTsKLQkJaWYgKGNpLT5pX3NoYXJlZF9nZW4gPT0gZGktPmxlYXNlX3NoYXJlZF9nZW4pIHsKKwkJaWYgKGNpLT5pX3NoYXJlZF9nZW4gPT0gZGktPmxlYXNlX3NoYXJlZF9nZW4gfHwKKwkJICAgIHNuYXBpZCA8PSBDRVBIX01BWFNOQVApIHsKIAkJCWRvdXQoIiBjbGVhcmluZyAlcCBjb21wbGV0ZSAoZF9yZWxlYXNlKVxuIiwKIAkJCSAgICAgcGFyZW50X2lub2RlKTsKIAkJCWNpLT5pX2NlcGhfZmxhZ3MgJj0gfkNFUEhfSV9DT01QTEVURTsKQEAgLTEyNDEsNyArMTI0Niw5IEBACiAKIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBjZXBoX3NuYXBkaXJfZGVudHJ5X29wcyA9IHsKIAkuZF9yZXZhbGlkYXRlID0gY2VwaF9zbmFwZGlyX2RfcmV2YWxpZGF0ZSwKKwkuZF9yZWxlYXNlID0gY2VwaF9kZW50cnlfcmVsZWFzZSwKIH07CiAKIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBjZXBoX3NuYXBfZGVudHJ5X29wcyA9IHsKKwkuZF9yZWxlYXNlID0gY2VwaF9kZW50cnlfcmVsZWFzZSwKIH07CmRpZmYgLS1naXQgYS9mcy9jZXBoL2ZpbGUuYyBiL2ZzL2NlcGgvZmlsZS5jCmluZGV4IDYyNTFhMTUuLjdjMDg2OTggMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvZmlsZS5jCisrKyBiL2ZzL2NlcGgvZmlsZS5jCkBAIC0yNjUsNyArMjY1LDcgQEAKIAlrbWVtX2NhY2hlX2ZyZWUoY2VwaF9maWxlX2NhY2hlcCwgY2YpOwogCiAJLyogd2FrZSB1cCBhbnlvbmUgd2FpdGluZyBmb3IgY2FwcyBvbiB0aGlzIGlub2RlICovCi0Jd2FrZV91cCgmY2ktPmlfY2FwX3dxKTsKKwl3YWtlX3VwX2FsbCgmY2ktPmlfY2FwX3dxKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvY2VwaC9pbm9kZS5jIGIvZnMvY2VwaC9pbm9kZS5jCmluZGV4IDhmOWI5ZmUuLjM4OWY5ZGIgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvaW5vZGUuYworKysgYi9mcy9jZXBoL2lub2RlLmMKQEAgLTExOTksOCArMTE5OSwxMCBAQAogCQkJCWdvdG8gb3V0OwogCQkJfQogCQkJZXJyID0gY2VwaF9pbml0X2RlbnRyeShkbik7Ci0JCQlpZiAoZXJyIDwgMCkKKwkJCWlmIChlcnIgPCAwKSB7CisJCQkJZHB1dChkbik7CiAJCQkJZ290byBvdXQ7CisJCQl9CiAJCX0gZWxzZSBpZiAoZG4tPmRfaW5vZGUgJiYKIAkJCSAgIChjZXBoX2lubyhkbi0+ZF9pbm9kZSkgIT0gdmluby5pbm8gfHwKIAkJCSAgICBjZXBoX3NuYXAoZG4tPmRfaW5vZGUpICE9IHZpbm8uc25hcCkpIHsKQEAgLTE0OTksNyArMTUwMSw3IEBACiAJaWYgKHdyYnVmZmVyX3JlZnMgPT0gMCkKIAkJY2VwaF9jaGVja19jYXBzKGNpLCBDSEVDS19DQVBTX0FVVEhPTkxZLCBOVUxMKTsKIAlpZiAod2FrZSkKLQkJd2FrZV91cCgmY2ktPmlfY2FwX3dxKTsKKwkJd2FrZV91cF9hbGwoJmNpLT5pX2NhcF93cSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZnMvY2VwaC9tZHNfY2xpZW50LmMgYi9mcy9jZXBoL21kc19jbGllbnQuYwppbmRleCAzYWI3OWY2Li5kZDQ0MGJkIDEwMDY0NAotLS0gYS9mcy9jZXBoL21kc19jbGllbnQuYworKysgYi9mcy9jZXBoL21kc19jbGllbnQuYwpAQCAtODY4LDcgKzg2OCw3IEBACiB7CiAJc3RydWN0IGNlcGhfaW5vZGVfaW5mbyAqY2kgPSBjZXBoX2lub2RlKGlub2RlKTsKIAotCXdha2VfdXAoJmNpLT5pX2NhcF93cSk7CisJd2FrZV91cF9hbGwoJmNpLT5pX2NhcF93cSk7CiAJaWYgKGFyZykgewogCQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwogCQljaS0+aV93YW50ZWRfbWF4X3NpemUgPSAwOwpAQCAtMTUxNCw2ICsxNTE0LDkgQEAKIAljZXBoX2VuY29kZV9maWxlcGF0aCgmcCwgZW5kLCBpbm8xLCBwYXRoMSk7CiAJY2VwaF9lbmNvZGVfZmlsZXBhdGgoJnAsIGVuZCwgaW5vMiwgcGF0aDIpOwogCisJLyogbWFrZSBub3RlIG9mIHJlbGVhc2Ugb2Zmc2V0LCBpbiBjYXNlIHdlIG5lZWQgdG8gcmVwbGF5ICovCisJcmVxLT5yX3JlcXVlc3RfcmVsZWFzZV9vZmZzZXQgPSBwIC0gbXNnLT5mcm9udC5pb3ZfYmFzZTsKKwogCS8qIGNhcCByZWxlYXNlcyAqLwogCXJlbGVhc2VzID0gMDsKIAlpZiAocmVxLT5yX2lub2RlX2Ryb3ApCkBAIC0xNTYxLDcgKzE1NjQsNyBAQAogCWlmIChyZXEtPnJfY2FsbGJhY2spCiAJCXJlcS0+cl9jYWxsYmFjayhtZHNjLCByZXEpOwogCWVsc2UKLQkJY29tcGxldGUoJnJlcS0+cl9jb21wbGV0aW9uKTsKKwkJY29tcGxldGVfYWxsKCZyZXEtPnJfY29tcGxldGlvbik7CiB9CiAKIC8qCkBAIC0xNTgwLDYgKzE1ODMsMzIgQEAKIAlkb3V0KCJwcmVwYXJlX3NlbmRfcmVxdWVzdCAlcCB0aWQgJWxsZCAlcyAoYXR0ZW1wdCAlZClcbiIsIHJlcSwKIAkgICAgIHJlcS0+cl90aWQsIGNlcGhfbWRzX29wX25hbWUocmVxLT5yX29wKSwgcmVxLT5yX2F0dGVtcHRzKTsKIAorCWlmIChyZXEtPnJfZ290X3Vuc2FmZSkgeworCQkvKgorCQkgKiBSZXBsYXkuICBEbyBub3QgcmVnZW5lcmF0ZSBtZXNzYWdlIChhbmQgcmVidWlsZAorCQkgKiBwYXRocywgZXRjLik7IGp1c3QgdXNlIHRoZSBvcmlnaW5hbCBtZXNzYWdlLgorCQkgKiBSZWJ1aWxkaW5nIHBhdGhzIHdpbGwgYnJlYWsgZm9yIHJlbmFtZXMgYmVjYXVzZQorCQkgKiBkX21vdmUgbWFuZ2xlcyB0aGUgc3JjIG5hbWUuCisJCSAqLworCQltc2cgPSByZXEtPnJfcmVxdWVzdDsKKwkJcmhlYWQgPSBtc2ctPmZyb250Lmlvdl9iYXNlOworCisJCWZsYWdzID0gbGUzMl90b19jcHUocmhlYWQtPmZsYWdzKTsKKwkJZmxhZ3MgfD0gQ0VQSF9NRFNfRkxBR19SRVBMQVk7CisJCXJoZWFkLT5mbGFncyA9IGNwdV90b19sZTMyKGZsYWdzKTsKKworCQlpZiAocmVxLT5yX3RhcmdldF9pbm9kZSkKKwkJCXJoZWFkLT5pbm8gPSBjcHVfdG9fbGU2NChjZXBoX2lubyhyZXEtPnJfdGFyZ2V0X2lub2RlKSk7CisKKwkJcmhlYWQtPm51bV9yZXRyeSA9IHJlcS0+cl9hdHRlbXB0cyAtIDE7CisKKwkJLyogcmVtb3ZlIGNhcC9kZW50cnkgcmVsZWFzZXMgZnJvbSBtZXNzYWdlICovCisJCXJoZWFkLT5udW1fcmVsZWFzZXMgPSAwOworCQltc2ctPmhkci5mcm9udF9sZW4gPSBjcHVfdG9fbGUzMihyZXEtPnJfcmVxdWVzdF9yZWxlYXNlX29mZnNldCk7CisJCW1zZy0+ZnJvbnQuaW92X2xlbiA9IHJlcS0+cl9yZXF1ZXN0X3JlbGVhc2Vfb2Zmc2V0OworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAocmVxLT5yX3JlcXVlc3QpIHsKIAkJY2VwaF9tc2dfcHV0KHJlcS0+cl9yZXF1ZXN0KTsKIAkJcmVxLT5yX3JlcXVlc3QgPSBOVUxMOwpAQCAtMTYwMSwxMyArMTYzMCw5IEBACiAJcmhlYWQtPmZsYWdzID0gY3B1X3RvX2xlMzIoZmxhZ3MpOwogCXJoZWFkLT5udW1fZndkID0gcmVxLT5yX251bV9md2Q7CiAJcmhlYWQtPm51bV9yZXRyeSA9IHJlcS0+cl9hdHRlbXB0cyAtIDE7CisJcmhlYWQtPmlubyA9IDA7CiAKIAlkb3V0KCIgcl9sb2NrZWRfZGlyID0gJXBcbiIsIHJlcS0+cl9sb2NrZWRfZGlyKTsKLQotCWlmIChyZXEtPnJfdGFyZ2V0X2lub2RlICYmIHJlcS0+cl9nb3RfdW5zYWZlKQotCQlyaGVhZC0+aW5vID0gY3B1X3RvX2xlNjQoY2VwaF9pbm8ocmVxLT5yX3RhcmdldF9pbm9kZSkpOwotCWVsc2UKLQkJcmhlYWQtPmlubyA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5MDcsNyArMTkzMiw3IEBACiAJaWYgKGhlYWQtPnNhZmUpIHsKIAkJcmVxLT5yX2dvdF9zYWZlID0gdHJ1ZTsKIAkJX191bnJlZ2lzdGVyX3JlcXVlc3QobWRzYywgcmVxKTsKLQkJY29tcGxldGUoJnJlcS0+cl9zYWZlX2NvbXBsZXRpb24pOworCQljb21wbGV0ZV9hbGwoJnJlcS0+cl9zYWZlX2NvbXBsZXRpb24pOwogCiAJCWlmIChyZXEtPnJfZ290X3Vuc2FmZSkgewogCQkJLyoKQEAgLTE5MjIsNyArMTk0Nyw3IEBACiAKIAkJCS8qIGxhc3QgdW5zYWZlIHJlcXVlc3QgZHVyaW5nIHVtb3VudD8gKi8KIAkJCWlmIChtZHNjLT5zdG9wcGluZyAmJiAhX19nZXRfb2xkZXN0X3JlcShtZHNjKSkKLQkJCQljb21wbGV0ZSgmbWRzYy0+c2FmZV91bW91bnRfd2FpdGVycyk7CisJCQkJY29tcGxldGVfYWxsKCZtZHNjLT5zYWZlX3Vtb3VudF93YWl0ZXJzKTsKIAkJCW11dGV4X3VubG9jaygmbWRzYy0+bXV0ZXgpOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTIxMDEsNyArMjEyNiw3IEBACiAJCQlwcl9pbmZvKCJtZHMlZCByZWNvbm5lY3QgZGVuaWVkXG4iLCBzZXNzaW9uLT5zX21kcyk7CiAJCXJlbW92ZV9zZXNzaW9uX2NhcHMoc2Vzc2lvbik7CiAJCXdha2UgPSAxOyAvKiBmb3IgZ29vZCBtZWFzdXJlICovCi0JCWNvbXBsZXRlKCZtZHNjLT5zZXNzaW9uX2Nsb3NlX3dhaXRlcnMpOworCQljb21wbGV0ZV9hbGwoJm1kc2MtPnNlc3Npb25fY2xvc2Vfd2FpdGVycyk7CiAJCWtpY2tfcmVxdWVzdHMobWRzYywgbWRzKTsKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvbWRzX2NsaWVudC5oIGIvZnMvY2VwaC9tZHNfY2xpZW50LmgKaW5kZXggYjI5MmZhNC4uOTUyNDEwYyAxMDA2NDQKLS0tIGEvZnMvY2VwaC9tZHNfY2xpZW50LmgKKysrIGIvZnMvY2VwaC9tZHNfY2xpZW50LmgKQEAgLTE4OCw2ICsxODgsNyBAQAogCWludCByX29sZF9pbm9kZV9kcm9wLCByX29sZF9pbm9kZV91bmxlc3M7CiAKIAlzdHJ1Y3QgY2VwaF9tc2cgICpyX3JlcXVlc3Q7ICAvKiBvcmlnaW5hbCByZXF1ZXN0ICovCisJaW50IHJfcmVxdWVzdF9yZWxlYXNlX29mZnNldDsKIAlzdHJ1Y3QgY2VwaF9tc2cgICpyX3JlcGx5OwogCXN0cnVjdCBjZXBoX21kc19yZXBseV9pbmZvX3BhcnNlZCByX3JlcGx5X2luZm87CiAJaW50IHJfZXJyOwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9tZXNzZW5nZXIuYyBiL2ZzL2NlcGgvbWVzc2VuZ2VyLmMKaW5kZXggOWFkNDNhMy4uMTUxNjdiMiAxMDA2NDQKLS0tIGEvZnMvY2VwaC9tZXNzZW5nZXIuYworKysgYi9mcy9jZXBoL21lc3Nlbmdlci5jCkBAIC00Myw3ICs0Myw4IEBACiAgKiBuaWNlbHkgcmVuZGVyIGEgc29ja2FkZHIgYXMgYSBzdHJpbmcuCiAgKi8KICNkZWZpbmUgTUFYX0FERFJfU1RSIDIwCi1zdGF0aWMgY2hhciBhZGRyX3N0cltNQVhfQUREUl9TVFJdWzQwXTsKKyNkZWZpbmUgTUFYX0FERFJfU1RSX0xFTiA2MAorc3RhdGljIGNoYXIgYWRkcl9zdHJbTUFYX0FERFJfU1RSXVtNQVhfQUREUl9TVFJfTEVOXTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soYWRkcl9zdHJfbG9jayk7CiBzdGF0aWMgaW50IGxhc3RfYWRkcl9zdHI7CiAKQEAgLTUyLDcgKzUzLDYgQEAKIAlpbnQgaTsKIAljaGFyICpzOwogCXN0cnVjdCBzb2NrYWRkcl9pbiAqaW40ID0gKHZvaWQgKilzczsKLQl1bnNpZ25lZCBjaGFyICpxdWFkID0gKHZvaWQgKikmaW40LT5zaW5fYWRkci5zX2FkZHI7CiAJc3RydWN0IHNvY2thZGRyX2luNiAqaW42ID0gKHZvaWQgKilzczsKIAogCXNwaW5fbG9jaygmYWRkcl9zdHJfbG9jayk7CkBAIC02NCwyNSArNjQsMTMgQEAKIAogCXN3aXRjaCAoc3MtPnNzX2ZhbWlseSkgewogCWNhc2UgQUZfSU5FVDoKLQkJc3ByaW50ZihzLCAiJXUuJXUuJXUuJXU6JXUiLAotCQkJKHVuc2lnbmVkIGludClxdWFkWzBdLAotCQkJKHVuc2lnbmVkIGludClxdWFkWzFdLAotCQkJKHVuc2lnbmVkIGludClxdWFkWzJdLAotCQkJKHVuc2lnbmVkIGludClxdWFkWzNdLAotCQkJKHVuc2lnbmVkIGludCludG9ocyhpbjQtPnNpbl9wb3J0KSk7CisJCXNucHJpbnRmKHMsIE1BWF9BRERSX1NUUl9MRU4sICIlcEk0OiV1IiwgJmluNC0+c2luX2FkZHIsCisJCQkgKHVuc2lnbmVkIGludCludG9ocyhpbjQtPnNpbl9wb3J0KSk7CiAJCWJyZWFrOwogCiAJY2FzZSBBRl9JTkVUNjoKLQkJc3ByaW50ZihzLCAiJTA0eDolMDR4OiUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eDolMDR4OiV1IiwKLQkJCWluNi0+c2luNl9hZGRyLnM2X2FkZHIxNlswXSwKLQkJCWluNi0+c2luNl9hZGRyLnM2X2FkZHIxNlsxXSwKLQkJCWluNi0+c2luNl9hZGRyLnM2X2FkZHIxNlsyXSwKLQkJCWluNi0+c2luNl9hZGRyLnM2X2FkZHIxNlszXSwKLQkJCWluNi0+c2luNl9hZGRyLnM2X2FkZHIxNls0XSwKLQkJCWluNi0+c2luNl9hZGRyLnM2X2FkZHIxNls1XSwKLQkJCWluNi0+c2luNl9hZGRyLnM2X2FkZHIxNls2XSwKLQkJCWluNi0+c2luNl9hZGRyLnM2X2FkZHIxNls3XSwKLQkJCSh1bnNpZ25lZCBpbnQpbnRvaHMoaW42LT5zaW42X3BvcnQpKTsKKwkJc25wcmludGYocywgTUFYX0FERFJfU1RSX0xFTiwgIlslcEk2Y106JXUiLCAmaW42LT5zaW42X2FkZHIsCisJCQkgKHVuc2lnbmVkIGludCludG9ocyhpbjYtPnNpbjZfcG9ydCkpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0yMTUsMTIgKzIwMywxMyBAQAogICovCiBzdGF0aWMgc3RydWN0IHNvY2tldCAqY2VwaF90Y3BfY29ubmVjdChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pCiB7Ci0Jc3RydWN0IHNvY2thZGRyICpwYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmY29uLT5wZWVyX2FkZHIuaW5fYWRkcjsKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqcGFkZHIgPSAmY29uLT5wZWVyX2FkZHIuaW5fYWRkcjsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwogCWludCByZXQ7CiAKIAlCVUdfT04oY29uLT5zb2NrKTsKLQlyZXQgPSBzb2NrX2NyZWF0ZV9rZXJuKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCwgJnNvY2spOworCXJldCA9IHNvY2tfY3JlYXRlX2tlcm4oY29uLT5wZWVyX2FkZHIuaW5fYWRkci5zc19mYW1pbHksIFNPQ0tfU1RSRUFNLAorCQkJICAgICAgIElQUFJPVE9fVENQLCAmc29jayk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIEVSUl9QVFIocmV0KTsKIAljb24tPnNvY2sgPSBzb2NrOwpAQCAtMjM0LDcgKzIyMyw4IEBACiAKIAlkb3V0KCJjb25uZWN0ICVzXG4iLCBwcl9hZGRyKCZjb24tPnBlZXJfYWRkci5pbl9hZGRyKSk7CiAKLQlyZXQgPSBzb2NrLT5vcHMtPmNvbm5lY3Qoc29jaywgcGFkZHIsIHNpemVvZigqcGFkZHIpLCBPX05PTkJMT0NLKTsKKwlyZXQgPSBzb2NrLT5vcHMtPmNvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKXBhZGRyLCBzaXplb2YoKnBhZGRyKSwKKwkJCQkgT19OT05CTE9DSyk7CiAJaWYgKHJldCA9PSAtRUlOUFJPR1JFU1MpIHsKIAkJZG91dCgiY29ubmVjdCAlcyBFSU5QUk9HUkVTUyBza19zdGF0ZSA9ICV1XG4iLAogCQkgICAgIHByX2FkZHIoJmNvbi0+cGVlcl9hZGRyLmluX2FkZHIpLApAQCAtMTAwOSwxOSArOTk5LDMyIEBACiAJCXN0cnVjdCBzb2NrYWRkcl9pbiAqaW40ID0gKHZvaWQgKilzczsKIAkJc3RydWN0IHNvY2thZGRyX2luNiAqaW42ID0gKHZvaWQgKilzczsKIAkJaW50IHBvcnQ7CisJCWNoYXIgZGVsaW0gPSAnLCc7CisKKwkJaWYgKCpwID09ICdbJykgeworCQkJZGVsaW0gPSAnXSc7CisJCQlwKys7CisJCX0KIAogCQltZW1zZXQoc3MsIDAsIHNpemVvZigqc3MpKTsKIAkJaWYgKGluNF9wdG9uKHAsIGVuZCAtIHAsICh1OCAqKSZpbjQtPnNpbl9hZGRyLnNfYWRkciwKLQkJCSAgICAgJywnLCAmaXBlbmQpKSB7CisJCQkgICAgIGRlbGltLCAmaXBlbmQpKQogCQkJc3MtPnNzX2ZhbWlseSA9IEFGX0lORVQ7Ci0JCX0gZWxzZSBpZiAoaW42X3B0b24ocCwgZW5kIC0gcCwgKHU4ICopJmluNi0+c2luNl9hZGRyLnM2X2FkZHIsCi0JCQkJICAgICcsJywgJmlwZW5kKSkgeworCQllbHNlIGlmIChpbjZfcHRvbihwLCBlbmQgLSBwLCAodTggKikmaW42LT5zaW42X2FkZHIuczZfYWRkciwKKwkJCQkgIGRlbGltLCAmaXBlbmQpKQogCQkJc3MtPnNzX2ZhbWlseSA9IEFGX0lORVQ2OwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlnb3RvIGJhZDsKLQkJfQogCQlwID0gaXBlbmQ7CiAKKwkJaWYgKGRlbGltID09ICddJykgeworCQkJaWYgKCpwICE9ICddJykgeworCQkJCWRvdXQoIm1pc3NpbmcgbWF0Y2hpbmcgJ10nXG4iKTsKKwkJCQlnb3RvIGJhZDsKKwkJCX0KKwkJCXArKzsKKwkJfQorCiAJCS8qIHBvcnQ/ICovCiAJCWlmIChwIDwgZW5kICYmICpwID09ICc6JykgewogCQkJcG9ydCA9IDA7CkBAIC0xMDU1LDcgKzEwNTgsNyBAQAogCXJldHVybiAwOwogCiBiYWQ6Ci0JcHJfZXJyKCJwYXJzZV9pcHMgYmFkIGlwICclcydcbiIsIGMpOworCXByX2VycigicGFyc2VfaXBzIGJhZCBpcCAnJS4qcydcbiIsIChpbnQpKGVuZCAtIGMpLCBjKTsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIApAQCAtMjAxNSwyMCArMjAxOCwyMCBAQAogewogCW11dGV4X2xvY2soJmNvbi0+bXV0ZXgpOwogCWlmICghbGlzdF9lbXB0eSgmbXNnLT5saXN0X2hlYWQpKSB7Ci0JCWRvdXQoImNvbl9yZXZva2UgJXAgbXNnICVwXG4iLCBjb24sIG1zZyk7CisJCWRvdXQoImNvbl9yZXZva2UgJXAgbXNnICVwIC0gd2FzIG9uIHF1ZXVlXG4iLCBjb24sIG1zZyk7CiAJCWxpc3RfZGVsX2luaXQoJm1zZy0+bGlzdF9oZWFkKTsKIAkJY2VwaF9tc2dfcHV0KG1zZyk7CiAJCW1zZy0+aGRyLnNlcSA9IDA7Ci0JCWlmIChjb24tPm91dF9tc2cgPT0gbXNnKSB7Ci0JCQljZXBoX21zZ19wdXQoY29uLT5vdXRfbXNnKTsKLQkJCWNvbi0+b3V0X21zZyA9IE5VTEw7Ci0JCX0KKwl9CisJaWYgKGNvbi0+b3V0X21zZyA9PSBtc2cpIHsKKwkJZG91dCgiY29uX3Jldm9rZSAlcCBtc2cgJXAgLSB3YXMgc2VuZGluZ1xuIiwgY29uLCBtc2cpOworCQljb24tPm91dF9tc2cgPSBOVUxMOwogCQlpZiAoY29uLT5vdXRfa3ZlY19pc19tc2cpIHsKIAkJCWNvbi0+b3V0X3NraXAgPSBjb24tPm91dF9rdmVjX2J5dGVzOwogCQkJY29uLT5vdXRfa3ZlY19pc19tc2cgPSBmYWxzZTsKIAkJfQotCX0gZWxzZSB7Ci0JCWRvdXQoImNvbl9yZXZva2UgJXAgbXNnICVwIC0gbm90IHF1ZXVlZCAoc2VudD8pXG4iLCBjb24sIG1zZyk7CisJCWNlcGhfbXNnX3B1dChtc2cpOworCQltc2ctPmhkci5zZXEgPSAwOwogCX0KIAltdXRleF91bmxvY2soJmNvbi0+bXV0ZXgpOwogfQpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9tb25fY2xpZW50LmMgYi9mcy9jZXBoL21vbl9jbGllbnQuYwppbmRleCBjYzExNWVhLi41NGZlMDFjIDEwMDY0NAotLS0gYS9mcy9jZXBoL21vbl9jbGllbnQuYworKysgYi9mcy9jZXBoL21vbl9jbGllbnQuYwpAQCAtMzQ1LDcgKzM0NSw3IEBACiAKIG91dDoKIAltdXRleF91bmxvY2soJm1vbmMtPm11dGV4KTsKLQl3YWtlX3VwKCZjbGllbnQtPmF1dGhfd3EpOworCXdha2VfdXBfYWxsKCZjbGllbnQtPmF1dGhfd3EpOwogfQogCiAvKgpAQCAtNDYyLDcgKzQ2Miw3IEBACiAJfQogCW11dGV4X3VubG9jaygmbW9uYy0+bXV0ZXgpOwogCWlmIChyZXEpIHsKLQkJY29tcGxldGUoJnJlcS0+Y29tcGxldGlvbik7CisJCWNvbXBsZXRlX2FsbCgmcmVxLT5jb21wbGV0aW9uKTsKIAkJcHV0X2dlbmVyaWNfcmVxdWVzdChyZXEpOwogCX0KIAlyZXR1cm47CkBAIC03MTgsNyArNzE4LDcgQEAKIAkJCQkgICAgIG1vbmMtPm1fYXV0aC0+ZnJvbnRfbWF4KTsKIAlpZiAocmV0IDwgMCkgewogCQltb25jLT5jbGllbnQtPmF1dGhfZXJyID0gcmV0OwotCQl3YWtlX3VwKCZtb25jLT5jbGllbnQtPmF1dGhfd3EpOworCQl3YWtlX3VwX2FsbCgmbW9uYy0+Y2xpZW50LT5hdXRoX3dxKTsKIAl9IGVsc2UgaWYgKHJldCA+IDApIHsKIAkJX19zZW5kX3ByZXBhcmVkX2F1dGhfcmVxdWVzdChtb25jLCByZXQpOwogCX0gZWxzZSBpZiAoIXdhc19hdXRoICYmIG1vbmMtPmF1dGgtPm9wcy0+aXNfYXV0aGVudGljYXRlZChtb25jLT5hdXRoKSkgewpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9vc2RfY2xpZW50LmMgYi9mcy9jZXBoL29zZF9jbGllbnQuYwppbmRleCA5MmI3MjUxLi5lMzg1MjIzIDEwMDY0NAotLS0gYS9mcy9jZXBoL29zZF9jbGllbnQuYworKysgYi9mcy9jZXBoL29zZF9jbGllbnQuYwpAQCAtODYyLDEyICs4NjIsMTIgQEAKIAlpZiAocmVxLT5yX2NhbGxiYWNrKQogCQlyZXEtPnJfY2FsbGJhY2socmVxLCBtc2cpOwogCWVsc2UKLQkJY29tcGxldGUoJnJlcS0+cl9jb21wbGV0aW9uKTsKKwkJY29tcGxldGVfYWxsKCZyZXEtPnJfY29tcGxldGlvbik7CiAKIAlpZiAoZmxhZ3MgJiBDRVBIX09TRF9GTEFHX09ORElTSykgewogCQlpZiAocmVxLT5yX3NhZmVfY2FsbGJhY2spCiAJCQlyZXEtPnJfc2FmZV9jYWxsYmFjayhyZXEsIG1zZyk7Ci0JCWNvbXBsZXRlKCZyZXEtPnJfc2FmZV9jb21wbGV0aW9uKTsgIC8qIGZzeW5jIHdhaXRlciAqLworCQljb21wbGV0ZV9hbGwoJnJlcS0+cl9zYWZlX2NvbXBsZXRpb24pOyAgLyogZnN5bmMgd2FpdGVyICovCiAJfQogCiBkb25lOgpAQCAtMTA4Myw3ICsxMDgzLDcgQEAKIAlpZiAobmV3bWFwKQogCQlraWNrX3JlcXVlc3RzKG9zZGMsIE5VTEwpOwogCXVwX3JlYWQoJm9zZGMtPm1hcF9zZW0pOwotCXdha2VfdXAoJm9zZGMtPmNsaWVudC0+YXV0aF93cSk7CisJd2FrZV91cF9hbGwoJm9zZGMtPmNsaWVudC0+YXV0aF93cSk7CiAJcmV0dXJuOwogCiBiYWQ6CmRpZmYgLS1naXQgYS9mcy9jZXBoL29zZG1hcC5jIGIvZnMvY2VwaC9vc2RtYXAuYwppbmRleCA1MGNlNjRlLi40MTZkNDZhIDEwMDY0NAotLS0gYS9mcy9jZXBoL29zZG1hcC5jCisrKyBiL2ZzL2NlcGgvb3NkbWFwLmMKQEAgLTU2OCw2ICs1NjgsNyBAQAogCQlpZiAoZXYgPiBDRVBIX1BHX1BPT0xfVkVSU0lPTikgewogCQkJcHJfd2FybmluZygiZ290IHVua25vd24gdiAlZCA+ICVkIG9mIGNlcGhfcGdfcG9vbFxuIiwKIAkJCQkgICBldiwgQ0VQSF9QR19QT09MX1ZFUlNJT04pOworCQkJa2ZyZWUocGkpOwogCQkJZ290byBiYWQ7CiAJCX0KIAkJX19kZWNvZGVfcG9vbChwLCBwaSk7CkBAIC04MzAsMTIgKzgzMSwxMyBAQAogCQkvKiByZW1vdmUgYW55PyAqLwogCQl3aGlsZSAocmJwICYmIHBnaWRfY21wKHJiX2VudHJ5KHJicCwgc3RydWN0IGNlcGhfcGdfbWFwcGluZywKIAkJCQkJCW5vZGUpLT5wZ2lkLCBwZ2lkKSA8PSAwKSB7Ci0JCQlzdHJ1Y3QgcmJfbm9kZSAqY3VyID0gcmJwOworCQkJc3RydWN0IGNlcGhfcGdfbWFwcGluZyAqY3VyID0KKwkJCQlyYl9lbnRyeShyYnAsIHN0cnVjdCBjZXBoX3BnX21hcHBpbmcsIG5vZGUpOworCQkJCiAJCQlyYnAgPSByYl9uZXh0KHJicCk7Ci0JCQlkb3V0KCIgcmVtb3ZlZCBwZ190ZW1wICVsbHhcbiIsCi0JCQkgICAgICoodTY0ICopJnJiX2VudHJ5KGN1ciwgc3RydWN0IGNlcGhfcGdfbWFwcGluZywKLQkJCQkJICAgICAgIG5vZGUpLT5wZ2lkKTsKLQkJCXJiX2VyYXNlKGN1ciwgJm1hcC0+cGdfdGVtcCk7CisJCQlkb3V0KCIgcmVtb3ZlZCBwZ190ZW1wICVsbHhcbiIsICoodTY0ICopJmN1ci0+cGdpZCk7CisJCQlyYl9lcmFzZSgmY3VyLT5ub2RlLCAmbWFwLT5wZ190ZW1wKTsKKwkJCWtmcmVlKGN1cik7CiAJCX0KIAogCQlpZiAocGdsZW4pIHsKQEAgLTg1MSwxOSArODUzLDIyIEBACiAJCQlmb3IgKGogPSAwOyBqIDwgcGdsZW47IGorKykKIAkJCQlwZy0+b3Nkc1tqXSA9IGNlcGhfZGVjb2RlXzMyKHApOwogCQkJZXJyID0gX19pbnNlcnRfcGdfbWFwcGluZyhwZywgJm1hcC0+cGdfdGVtcCk7Ci0JCQlpZiAoZXJyKQorCQkJaWYgKGVycikgeworCQkJCWtmcmVlKHBnKTsKIAkJCQlnb3RvIGJhZDsKKwkJCX0KIAkJCWRvdXQoIiBhZGRlZCBwZ190ZW1wICVsbHggbGVuICVkXG4iLCAqKHU2NCAqKSZwZ2lkLAogCQkJICAgICBwZ2xlbik7CiAJCX0KIAl9CiAJd2hpbGUgKHJicCkgewotCQlzdHJ1Y3QgcmJfbm9kZSAqY3VyID0gcmJwOworCQlzdHJ1Y3QgY2VwaF9wZ19tYXBwaW5nICpjdXIgPQorCQkJcmJfZW50cnkocmJwLCBzdHJ1Y3QgY2VwaF9wZ19tYXBwaW5nLCBub2RlKTsKKwogCQlyYnAgPSByYl9uZXh0KHJicCk7Ci0JCWRvdXQoIiByZW1vdmVkIHBnX3RlbXAgJWxseFxuIiwKLQkJICAgICAqKHU2NCAqKSZyYl9lbnRyeShjdXIsIHN0cnVjdCBjZXBoX3BnX21hcHBpbmcsCi0JCQkJICAgICAgIG5vZGUpLT5wZ2lkKTsKLQkJcmJfZXJhc2UoY3VyLCAmbWFwLT5wZ190ZW1wKTsKKwkJZG91dCgiIHJlbW92ZWQgcGdfdGVtcCAlbGx4XG4iLCAqKHU2NCAqKSZjdXItPnBnaWQpOworCQlyYl9lcmFzZSgmY3VyLT5ub2RlLCAmbWFwLT5wZ190ZW1wKTsKKwkJa2ZyZWUoY3VyKTsKIAl9CiAKIAkvKiBpZ25vcmUgdGhlIHJlc3QgKi8KZGlmZiAtLWdpdCBhL2ZzL2NoYXJfZGV2LmMgYi9mcy9jaGFyX2Rldi5jCmluZGV4IGQ2ZGI5MzMuLmY4MGE0ZjIgMTAwNjQ0Ci0tLSBhL2ZzL2NoYXJfZGV2LmMKKysrIGIvZnMvY2hhcl9kZXYuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCmRpZmYgLS1naXQgYS9mcy9jaWZzL0tjb25maWcgYi9mcy9jaWZzL0tjb25maWcKaW5kZXggODBmMzUyNS4uNTczOWZkNyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9LY29uZmlnCisrKyBiL2ZzL2NpZnMvS2NvbmZpZwpAQCAtMTMxLDYgKzEzMSwxNSBAQAogCSAgICBJUCBhZGRyZXNzZXMpIHdoaWNoIGlzIG5lZWRlZCBmb3IgaW1wbGljaXQgbW91bnRzIG9mIERGUyBqdW5jdGlvbgogCSAgICBwb2ludHMuIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBDSUZTX0ZTQ0FDSEUKKwkgIGJvb2wgIlByb3ZpZGUgQ0lGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCSAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwkgIGRlcGVuZHMgb24gQ0lGUz1tICYmIEZTQ0FDSEUgfHwgQ0lGUz15ICYmIEZTQ0FDSEU9eQorCSAgaGVscAorCSAgICBNYWtlcyBDSUZTIEZTLUNhY2hlIGNhcGFibGUuIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgeW91ciBDSUZTIGRhdGEKKwkgICAgdG8gYmUgY2FjaGVkIGxvY2FsbHkgb24gZGlzayB0aHJvdWdoIHRoZSBnZW5lcmFsIGZpbGVzeXN0ZW0gY2FjaGUKKwkgICAgbWFuYWdlci4gSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIENJRlNfRVhQRVJJTUVOVEFMCiAJICBib29sICJDSUZTIEV4cGVyaW1lbnRhbCBGZWF0dXJlcyAoRVhQRVJJTUVOVEFMKSIKIAkgIGRlcGVuZHMgb24gQ0lGUyAmJiBFWFBFUklNRU5UQUwKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvTWFrZWZpbGUgYi9mcy9jaWZzL01ha2VmaWxlCmluZGV4IDk5NDhjMDAzLi5hZGVmYTYwIDEwMDY0NAotLS0gYS9mcy9jaWZzL01ha2VmaWxlCisrKyBiL2ZzL2NpZnMvTWFrZWZpbGUKQEAgLTExLDMgKzExLDUgQEAKIGNpZnMtJChDT05GSUdfQ0lGU19VUENBTEwpICs9IGNpZnNfc3BuZWdvLm8KIAogY2lmcy0kKENPTkZJR19DSUZTX0RGU19VUENBTEwpICs9IGRuc19yZXNvbHZlLm8gY2lmc19kZnNfcmVmLm8KKworY2lmcy0kKENPTkZJR19DSUZTX0ZTQ0FDSEUpICs9IGZzY2FjaGUubyBjYWNoZS5vCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NhY2hlLmMgYi9mcy9jaWZzL2NhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI0ZDdiYmQKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9jaWZzL2NhY2hlLmMKQEAgLTAsMCArMSwzMzEgQEAKKy8qCisgKiAgIGZzL2NpZnMvY2FjaGUuYyAtIENJRlMgZmlsZXN5c3RlbSBjYWNoZSBpbmRleCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMKKyAqCisgKiAgIENvcHlyaWdodCAoYykgMjAxMCBOb3ZlbGwsIEluYy4KKyAqICAgQXV0aG9ycyhzKTogU3VyZXNoIEpheWFyYW1hbiAoc2pheWFyYW1hbkBzdXNlLmRlPgorICoKKyAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUKKyAqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlICJmc2NhY2hlLmgiCisjaW5jbHVkZSAiY2lmc19kZWJ1Zy5oIgorCisvKgorICogQ0lGUyBmaWxlc3lzdGVtIGRlZmluaXRpb24gZm9yIEZTLUNhY2hlCisgKi8KK3N0cnVjdCBmc2NhY2hlX25ldGZzIGNpZnNfZnNjYWNoZV9uZXRmcyA9IHsKKwkubmFtZSA9ICJjaWZzIiwKKwkudmVyc2lvbiA9IDAsCit9OworCisvKgorICogUmVnaXN0ZXIgQ0lGUyBmb3IgY2FjaGluZyB3aXRoIEZTLUNhY2hlCisgKi8KK2ludCBjaWZzX2ZzY2FjaGVfcmVnaXN0ZXIodm9pZCkKK3sKKwlyZXR1cm4gZnNjYWNoZV9yZWdpc3Rlcl9uZXRmcygmY2lmc19mc2NhY2hlX25ldGZzKTsKK30KKworLyoKKyAqIFVucmVnaXN0ZXIgQ0lGUyBmb3IgY2FjaGluZworICovCit2b2lkIGNpZnNfZnNjYWNoZV91bnJlZ2lzdGVyKHZvaWQpCit7CisJZnNjYWNoZV91bnJlZ2lzdGVyX25ldGZzKCZjaWZzX2ZzY2FjaGVfbmV0ZnMpOworfQorCisvKgorICogS2V5IGxheW91dCBvZiBDSUZTIHNlcnZlciBjYWNoZSBpbmRleCBvYmplY3QKKyAqLworc3RydWN0IGNpZnNfc2VydmVyX2tleSB7CisJdWludDE2X3QJZmFtaWx5OwkJLyogYWRkcmVzcyBmYW1pbHkgKi8KKwl1aW50MTZfdAlwb3J0OwkJLyogSVAgcG9ydCAqLworCXVuaW9uIHsKKwkJc3RydWN0IGluX2FkZHIJaXB2NF9hZGRyOworCQlzdHJ1Y3QgaW42X2FkZHIJaXB2Nl9hZGRyOworCX0gYWRkclswXTsKK307CisKKy8qCisgKiBTZXJ2ZXIgb2JqZWN0IGtleWVkIGJ5IHtJUGFkZHJlc3MscG9ydCxmYW1pbHl9IHR1cGxlCisgKi8KK3N0YXRpYyB1aW50MTZfdCBjaWZzX3NlcnZlcl9nZXRfa2V5KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCSAgIHZvaWQgKmJ1ZmZlciwgdWludDE2X3QgbWF4YnVmKQoreworCWNvbnN0IHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlciA9IGNvb2tpZV9uZXRmc19kYXRhOworCWNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EgPSAoc3RydWN0IHNvY2thZGRyICopICZzZXJ2ZXItPmFkZHIuc29ja0FkZHI7CisJc3RydWN0IGNpZnNfc2VydmVyX2tleSAqa2V5ID0gYnVmZmVyOworCXVpbnQxNl90IGtleV9sZW4gPSBzaXplb2Yoc3RydWN0IGNpZnNfc2VydmVyX2tleSk7CisKKwltZW1zZXQoa2V5LCAwLCBrZXlfbGVuKTsKKworCS8qCisJICogU2hvdWxkIG5vdCBiZSBhIHByb2JsZW0gYXMgc2luX2ZhbWlseS9zaW42X2ZhbWlseSBvdmVybGF5cworCSAqIHNhX2ZhbWlseSBmaWVsZAorCSAqLworCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJa2V5LT5mYW1pbHkgPSBzZXJ2ZXItPmFkZHIuc29ja0FkZHIuc2luX2ZhbWlseTsKKwkJa2V5LT5wb3J0ID0gc2VydmVyLT5hZGRyLnNvY2tBZGRyLnNpbl9wb3J0OworCQlrZXktPmFkZHJbMF0uaXB2NF9hZGRyID0gc2VydmVyLT5hZGRyLnNvY2tBZGRyLnNpbl9hZGRyOworCQlrZXlfbGVuICs9IHNpemVvZihrZXktPmFkZHJbMF0uaXB2NF9hZGRyKTsKKwkJYnJlYWs7CisKKwljYXNlIEFGX0lORVQ2OgorCQlrZXktPmZhbWlseSA9IHNlcnZlci0+YWRkci5zb2NrQWRkcjYuc2luNl9mYW1pbHk7CisJCWtleS0+cG9ydCA9IHNlcnZlci0+YWRkci5zb2NrQWRkcjYuc2luNl9wb3J0OworCQlrZXktPmFkZHJbMF0uaXB2Nl9hZGRyID0gc2VydmVyLT5hZGRyLnNvY2tBZGRyNi5zaW42X2FkZHI7CisJCWtleV9sZW4gKz0gc2l6ZW9mKGtleS0+YWRkclswXS5pcHY2X2FkZHIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWNFUlJPUigxLCAiQ0lGUzogVW5rbm93biBuZXR3b3JrIGZhbWlseSAnJWQnIiwgc2EtPnNhX2ZhbWlseSk7CisJCWtleV9sZW4gPSAwOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4ga2V5X2xlbjsKK30KKworLyoKKyAqIFNlcnZlciBvYmplY3QgZm9yIEZTLUNhY2hlCisgKi8KK2NvbnN0IHN0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgY2lmc19mc2NhY2hlX3NlcnZlcl9pbmRleF9kZWYgPSB7CisJLm5hbWUgPSAiQ0lGUy5zZXJ2ZXIiLAorCS50eXBlID0gRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWCwKKwkuZ2V0X2tleSA9IGNpZnNfc2VydmVyX2dldF9rZXksCit9OworCisvKgorICogQXV4aWxpYXJ5IGRhdGEgYXR0YWNoZWQgdG8gQ0lGUyBzdXBlcmJsb2NrIHdpdGhpbiB0aGUgY2FjaGUKKyAqLworc3RydWN0IGNpZnNfZnNjYWNoZV9zdXBlcl9hdXhkYXRhIHsKKwl1NjQJcmVzb3VyY2VfaWQ7CQkvKiB1bmlxdWUgc2VydmVyIHJlc291cmNlIGlkICovCit9OworCitzdGF0aWMgY2hhciAqZXh0cmFjdF9zaGFyZW5hbWUoY29uc3QgY2hhciAqdHJlZW5hbWUpCit7CisJY29uc3QgY2hhciAqc3JjOworCWNoYXIgKmRlbGltLCAqZHN0OworCWludCBsZW47CisKKwkvKiBza2lwIGRvdWJsZSBjaGFycyBhdCB0aGUgYmVnaW5uaW5nICovCisJc3JjID0gdHJlZW5hbWUgKyAyOworCisJLyogc2hhcmUgbmFtZSBpcyBhbHdheXMgcHJlY2VkZWQgYnkgJ1xcJyBub3cgKi8KKwlkZWxpbSA9IHN0cmNocihzcmMsICdcXCcpOworCWlmICghZGVsaW0pCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCWRlbGltKys7CisJbGVuID0gc3RybGVuKGRlbGltKTsKKworCS8qIGNhbGxlciBoYXMgdG8gZnJlZSB0aGUgbWVtb3J5ICovCisJZHN0ID0ga3N0cm5kdXAoZGVsaW0sIGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkc3QpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJcmV0dXJuIGRzdDsKK30KKworLyoKKyAqIFN1cGVyYmxvY2sgb2JqZWN0IGN1cnJlbnRseSBrZXllZCBieSBzaGFyZSBuYW1lCisgKi8KK3N0YXRpYyB1aW50MTZfdCBjaWZzX3N1cGVyX2dldF9rZXkoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsIHZvaWQgKmJ1ZmZlciwKKwkJCQkgICB1aW50MTZfdCBtYXhidWYpCit7CisJY29uc3Qgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiA9IGNvb2tpZV9uZXRmc19kYXRhOworCWNoYXIgKnNoYXJlbmFtZTsKKwl1aW50MTZfdCBsZW47CisKKwlzaGFyZW5hbWUgPSBleHRyYWN0X3NoYXJlbmFtZSh0Y29uLT50cmVlTmFtZSk7CisJaWYgKElTX0VSUihzaGFyZW5hbWUpKSB7CisJCWNGWUkoMSwgIkNJRlM6IGNvdWxkbid0IGV4dHJhY3Qgc2hhcmVuYW1lXG4iKTsKKwkJc2hhcmVuYW1lID0gTlVMTDsKKwkJcmV0dXJuIDA7CisJfQorCisJbGVuID0gc3RybGVuKHNoYXJlbmFtZSk7CisJaWYgKGxlbiA+IG1heGJ1ZikKKwkJcmV0dXJuIDA7CisKKwltZW1jcHkoYnVmZmVyLCBzaGFyZW5hbWUsIGxlbik7CisKKwlrZnJlZShzaGFyZW5hbWUpOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHVpbnQxNl90CitjaWZzX2ZzY2FjaGVfc3VwZXJfZ2V0X2F1eChjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwgdm9pZCAqYnVmZmVyLAorCQkJICAgdWludDE2X3QgbWF4YnVmKQoreworCXN0cnVjdCBjaWZzX2ZzY2FjaGVfc3VwZXJfYXV4ZGF0YSBhdXhkYXRhOworCWNvbnN0IHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24gPSBjb29raWVfbmV0ZnNfZGF0YTsKKworCW1lbXNldCgmYXV4ZGF0YSwgMCwgc2l6ZW9mKGF1eGRhdGEpKTsKKwlhdXhkYXRhLnJlc291cmNlX2lkID0gdGNvbi0+cmVzb3VyY2VfaWQ7CisKKwlpZiAobWF4YnVmID4gc2l6ZW9mKGF1eGRhdGEpKQorCQltYXhidWYgPSBzaXplb2YoYXV4ZGF0YSk7CisKKwltZW1jcHkoYnVmZmVyLCAmYXV4ZGF0YSwgbWF4YnVmKTsKKworCXJldHVybiBtYXhidWY7Cit9CisKK3N0YXRpYyBlbnVtCitmc2NhY2hlX2NoZWNrYXV4IGNpZnNfZnNjYWNoZV9zdXBlcl9jaGVja19hdXgodm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCSAgICAgIGNvbnN0IHZvaWQgKmRhdGEsCisJCQkJCSAgICAgIHVpbnQxNl90IGRhdGFsZW4pCit7CisJc3RydWN0IGNpZnNfZnNjYWNoZV9zdXBlcl9hdXhkYXRhIGF1eGRhdGE7CisJY29uc3Qgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiA9IGNvb2tpZV9uZXRmc19kYXRhOworCisJaWYgKGRhdGFsZW4gIT0gc2l6ZW9mKGF1eGRhdGEpKQorCQlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9PQlNPTEVURTsKKworCW1lbXNldCgmYXV4ZGF0YSwgMCwgc2l6ZW9mKGF1eGRhdGEpKTsKKwlhdXhkYXRhLnJlc291cmNlX2lkID0gdGNvbi0+cmVzb3VyY2VfaWQ7CisKKwlpZiAobWVtY21wKGRhdGEsICZhdXhkYXRhLCBkYXRhbGVuKSAhPSAwKQorCQlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9PQlNPTEVURTsKKworCXJldHVybiBGU0NBQ0hFX0NIRUNLQVVYX09LQVk7Cit9CisKKy8qCisgKiBTdXBlcmJsb2NrIG9iamVjdCBmb3IgRlMtQ2FjaGUKKyAqLworY29uc3Qgc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiBjaWZzX2ZzY2FjaGVfc3VwZXJfaW5kZXhfZGVmID0geworCS5uYW1lID0gIkNJRlMuc3VwZXIiLAorCS50eXBlID0gRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWCwKKwkuZ2V0X2tleSA9IGNpZnNfc3VwZXJfZ2V0X2tleSwKKwkuZ2V0X2F1eCA9IGNpZnNfZnNjYWNoZV9zdXBlcl9nZXRfYXV4LAorCS5jaGVja19hdXggPSBjaWZzX2ZzY2FjaGVfc3VwZXJfY2hlY2tfYXV4LAorfTsKKworLyoKKyAqIEF1eGlsaWFyeSBkYXRhIGF0dGFjaGVkIHRvIENJRlMgaW5vZGUgd2l0aGluIHRoZSBjYWNoZQorICovCitzdHJ1Y3QgY2lmc19mc2NhY2hlX2lub2RlX2F1eGRhdGEgeworCXN0cnVjdCB0aW1lc3BlYwlsYXN0X3dyaXRlX3RpbWU7CisJc3RydWN0IHRpbWVzcGVjCWxhc3RfY2hhbmdlX3RpbWU7CisJdTY0CQllb2Y7Cit9OworCitzdGF0aWMgdWludDE2X3QgY2lmc19mc2NhY2hlX2lub2RlX2dldF9rZXkoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCSAgIHZvaWQgKmJ1ZmZlciwgdWludDE2X3QgbWF4YnVmKQoreworCWNvbnN0IHN0cnVjdCBjaWZzSW5vZGVJbmZvICpjaWZzaSA9IGNvb2tpZV9uZXRmc19kYXRhOworCXVpbnQxNl90IGtleWxlbjsKKworCS8qIHVzZSB0aGUgVW5pcXVlSWQgYXMgdGhlIGtleSAqLworCWtleWxlbiA9IHNpemVvZihjaWZzaS0+dW5pcXVlaWQpOworCWlmIChrZXlsZW4gPiBtYXhidWYpCisJCWtleWxlbiA9IDA7CisJZWxzZQorCQltZW1jcHkoYnVmZmVyLCAmY2lmc2ktPnVuaXF1ZWlkLCBrZXlsZW4pOworCisJcmV0dXJuIGtleWxlbjsKK30KKworc3RhdGljIHZvaWQKK2NpZnNfZnNjYWNoZV9pbm9kZV9nZXRfYXR0cihjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwgdWludDY0X3QgKnNpemUpCit7CisJY29uc3Qgc3RydWN0IGNpZnNJbm9kZUluZm8gKmNpZnNpID0gY29va2llX25ldGZzX2RhdGE7CisKKwkqc2l6ZSA9IGNpZnNpLT52ZnNfaW5vZGUuaV9zaXplOworfQorCitzdGF0aWMgdWludDE2X3QKK2NpZnNfZnNjYWNoZV9pbm9kZV9nZXRfYXV4KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLCB2b2lkICpidWZmZXIsCisJCQkgICB1aW50MTZfdCBtYXhidWYpCit7CisJc3RydWN0IGNpZnNfZnNjYWNoZV9pbm9kZV9hdXhkYXRhIGF1eGRhdGE7CisJY29uc3Qgc3RydWN0IGNpZnNJbm9kZUluZm8gKmNpZnNpID0gY29va2llX25ldGZzX2RhdGE7CisKKwltZW1zZXQoJmF1eGRhdGEsIDAsIHNpemVvZihhdXhkYXRhKSk7CisJYXV4ZGF0YS5lb2YgPSBjaWZzaS0+c2VydmVyX2VvZjsKKwlhdXhkYXRhLmxhc3Rfd3JpdGVfdGltZSA9IGNpZnNpLT52ZnNfaW5vZGUuaV9tdGltZTsKKwlhdXhkYXRhLmxhc3RfY2hhbmdlX3RpbWUgPSBjaWZzaS0+dmZzX2lub2RlLmlfY3RpbWU7CisKKwlpZiAobWF4YnVmID4gc2l6ZW9mKGF1eGRhdGEpKQorCQltYXhidWYgPSBzaXplb2YoYXV4ZGF0YSk7CisKKwltZW1jcHkoYnVmZmVyLCAmYXV4ZGF0YSwgbWF4YnVmKTsKKworCXJldHVybiBtYXhidWY7Cit9CisKK3N0YXRpYyBlbnVtCitmc2NhY2hlX2NoZWNrYXV4IGNpZnNfZnNjYWNoZV9pbm9kZV9jaGVja19hdXgodm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCSAgICAgIGNvbnN0IHZvaWQgKmRhdGEsCisJCQkJCSAgICAgIHVpbnQxNl90IGRhdGFsZW4pCit7CisJc3RydWN0IGNpZnNfZnNjYWNoZV9pbm9kZV9hdXhkYXRhIGF1eGRhdGE7CisJc3RydWN0IGNpZnNJbm9kZUluZm8gKmNpZnNpID0gY29va2llX25ldGZzX2RhdGE7CisKKwlpZiAoZGF0YWxlbiAhPSBzaXplb2YoYXV4ZGF0YSkpCisJCXJldHVybiBGU0NBQ0hFX0NIRUNLQVVYX09CU09MRVRFOworCisJbWVtc2V0KCZhdXhkYXRhLCAwLCBzaXplb2YoYXV4ZGF0YSkpOworCWF1eGRhdGEuZW9mID0gY2lmc2ktPnNlcnZlcl9lb2Y7CisJYXV4ZGF0YS5sYXN0X3dyaXRlX3RpbWUgPSBjaWZzaS0+dmZzX2lub2RlLmlfbXRpbWU7CisJYXV4ZGF0YS5sYXN0X2NoYW5nZV90aW1lID0gY2lmc2ktPnZmc19pbm9kZS5pX2N0aW1lOworCisJaWYgKG1lbWNtcChkYXRhLCAmYXV4ZGF0YSwgZGF0YWxlbikgIT0gMCkKKwkJcmV0dXJuIEZTQ0FDSEVfQ0hFQ0tBVVhfT0JTT0xFVEU7CisKKwlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9PS0FZOworfQorCitzdGF0aWMgdm9pZCBjaWZzX2ZzY2FjaGVfaW5vZGVfbm93X3VuY2FjaGVkKHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhKQoreworCXN0cnVjdCBjaWZzSW5vZGVJbmZvICpjaWZzaSA9IGNvb2tpZV9uZXRmc19kYXRhOworCXN0cnVjdCBwYWdldmVjIHB2ZWM7CisJcGdvZmZfdCBmaXJzdDsKKwlpbnQgbG9vcCwgbnJfcGFnZXM7CisKKwlwYWdldmVjX2luaXQoJnB2ZWMsIDApOworCWZpcnN0ID0gMDsKKworCWNGWUkoMSwgImNpZnMgaW5vZGUgMHglcCBub3cgdW5jYWNoZWQiLCBjaWZzaSk7CisKKwlmb3IgKDs7KSB7CisJCW5yX3BhZ2VzID0gcGFnZXZlY19sb29rdXAoJnB2ZWMsCisJCQkJCSAgY2lmc2ktPnZmc19pbm9kZS5pX21hcHBpbmcsIGZpcnN0LAorCQkJCQkgIFBBR0VWRUNfU0laRSAtIHBhZ2V2ZWNfY291bnQoJnB2ZWMpKTsKKwkJaWYgKCFucl9wYWdlcykKKwkJCWJyZWFrOworCisJCWZvciAobG9vcCA9IDA7IGxvb3AgPCBucl9wYWdlczsgbG9vcCsrKQorCQkJQ2xlYXJQYWdlRnNDYWNoZShwdmVjLnBhZ2VzW2xvb3BdKTsKKworCQlmaXJzdCA9IHB2ZWMucGFnZXNbbnJfcGFnZXMgLSAxXS0+aW5kZXggKyAxOworCisJCXB2ZWMubnIgPSBucl9wYWdlczsKKwkJcGFnZXZlY19yZWxlYXNlKCZwdmVjKTsKKwkJY29uZF9yZXNjaGVkKCk7CisJfQorfQorCitjb25zdCBzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmIGNpZnNfZnNjYWNoZV9pbm9kZV9vYmplY3RfZGVmID0geworCS5uYW1lCQk9ICJDSUZTLnVuaXF1ZWlkIiwKKwkudHlwZQkJPSBGU0NBQ0hFX0NPT0tJRV9UWVBFX0RBVEFGSUxFLAorCS5nZXRfa2V5CT0gY2lmc19mc2NhY2hlX2lub2RlX2dldF9rZXksCisJLmdldF9hdHRyCT0gY2lmc19mc2NhY2hlX2lub2RlX2dldF9hdHRyLAorCS5nZXRfYXV4CT0gY2lmc19mc2NhY2hlX2lub2RlX2dldF9hdXgsCisJLmNoZWNrX2F1eAk9IGNpZnNfZnNjYWNoZV9pbm9kZV9jaGVja19hdXgsCisJLm5vd191bmNhY2hlZAk9IGNpZnNfZnNjYWNoZV9pbm9kZV9ub3dfdW5jYWNoZWQsCit9OwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYyBiL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMKaW5kZXggYWMxOWE2Zi4uZGMxZWQ1MCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYworKysgYi9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jCkBAIC0yMzAsMjggKzIzMCwyMiBAQAogCWdvdG8gY29tcG9zZV9tb3VudF9vcHRpb25zX291dDsKIH0KIAotCi1zdGF0aWMgc3RydWN0IHZmc21vdW50ICpjaWZzX2Rmc19kb19yZWZtb3VudChjb25zdCBzdHJ1Y3QgdmZzbW91bnQgKm1udF9wYXJlbnQsCi0JCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qgc3RydWN0IGRmc19pbmZvM19wYXJhbSAqcmVmKQorLyoqCisgKiBjaWZzX2Rmc19kb19yZWZtb3VudCAtIG1vdW50cyBzcGVjaWZpZWQgcGF0aCB1c2luZyBwcm92aWRlZCByZWZmZXJhbAorICogQGNpZnNfc2I6CQlwYXJlbnQvcm9vdCBzdXBlcmJsb2NrCisgKiBAZnVsbHBhdGg6CQlmdWxsIHBhdGggaW4gVU5DIGZvcm1hdAorICogQHJlZjoJCXNlcnZlcidzIHJlZmVycmFsCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKmNpZnNfZGZzX2RvX3JlZm1vdW50KHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IsCisJCWNvbnN0IGNoYXIgKmZ1bGxwYXRoLCBjb25zdCBzdHJ1Y3QgZGZzX2luZm8zX3BhcmFtICpyZWYpCiB7Ci0Jc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjsKIAlzdHJ1Y3QgdmZzbW91bnQgKm1udDsKIAljaGFyICptb3VudGRhdGE7CiAJY2hhciAqZGV2bmFtZSA9IE5VTEw7Ci0JY2hhciAqZnVsbHBhdGg7CiAKLQljaWZzX3NiID0gQ0lGU19TQihkZW50cnktPmRfaW5vZGUtPmlfc2IpOwotCS8qCi0JICogdGhpcyBmdW5jdGlvbiBnaXZlcyB1cyBhIHBhdGggd2l0aCBhIGRvdWJsZSBiYWNrc2xhc2ggcHJlZml4LiBXZQotCSAqIHJlcXVpcmUgYSBzaW5nbGUgYmFja3NsYXNoIGZvciBERlMuCi0JICovCi0JZnVsbHBhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGRlbnRyeSk7Ci0JaWYgKCFmdWxscGF0aCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KKwkvKiBzdHJpcCBmaXJzdCAnXCcgZnJvbSBmdWxscGF0aCAqLwogCW1vdW50ZGF0YSA9IGNpZnNfY29tcG9zZV9tb3VudF9vcHRpb25zKGNpZnNfc2ItPm1vdW50ZGF0YSwKIAkJCWZ1bGxwYXRoICsgMSwgcmVmLCAmZGV2bmFtZSk7Ci0Ja2ZyZWUoZnVsbHBhdGgpOwogCiAJaWYgKElTX0VSUihtb3VudGRhdGEpKQogCQlyZXR1cm4gKHN0cnVjdCB2ZnNtb3VudCAqKW1vdW50ZGF0YTsKQEAgLTM1Nyw4ICszNTEsOCBAQAogCQkJcmMgPSAtRUlOVkFMOwogCQkJZ290byBvdXRfZXJyOwogCQl9Ci0JCW1udCA9IGNpZnNfZGZzX2RvX3JlZm1vdW50KG5kLT5wYXRoLm1udCwKLQkJCQluZC0+cGF0aC5kZW50cnksIHJlZmVycmFscyArIGkpOworCQltbnQgPSBjaWZzX2Rmc19kb19yZWZtb3VudChjaWZzX3NiLAorCQkJCWZ1bGxfcGF0aCwgcmVmZXJyYWxzICsgaSk7CiAJCWNGWUkoMSwgIiVzOiBjaWZzX2Rmc19kb19yZWZtb3VudDolcyAsIG1udDolcCIsIF9fZnVuY19fLAogCQkJCQlyZWZlcnJhbHNbaV0ubm9kZV9uYW1lLCBtbnQpOwogCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfZnNfc2IuaCBiL2ZzL2NpZnMvY2lmc19mc19zYi5oCmluZGV4IDI0NmExNjcuLjllNzcxNDUgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc19mc19zYi5oCisrKyBiL2ZzL2NpZnMvY2lmc19mc19zYi5oCkBAIC0zNSw2ICszNSw3IEBACiAjZGVmaW5lIENJRlNfTU9VTlRfRFlOUEVSTSAgICAgIDB4MTAwMCAvKiBhbGxvdyBpbi1tZW1vcnkgb25seSBtb2RlIHNldHRpbmcgICAqLwogI2RlZmluZSBDSUZTX01PVU5UX05PUE9TSVhCUkwgICAweDIwMDAgLyogbWFuZGF0b3J5IG5vdCBwb3NpeCBieXRlIHJhbmdlIGxvY2sgKi8KICNkZWZpbmUgQ0lGU19NT1VOVF9OT1NTWU5DICAgICAgMHg0MDAwIC8qIGRvbid0IGRvIHNsb3cgU01CZmx1c2ggb24gZXZlcnkgc3luYyovCisjZGVmaW5lIENJRlNfTU9VTlRfRlNDQUNIRQkweDgwMDAgLyogbG9jYWwgY2FjaGluZyBlbmFibGVkICovCiAKIHN0cnVjdCBjaWZzX3NiX2luZm8gewogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CS8qIHByaW1hcnkgbW91bnQgKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc19zcG5lZ28uYyBiL2ZzL2NpZnMvY2lmc19zcG5lZ28uYwppbmRleCAzNzliZDdkLi42ZWZmY2NmIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfc3BuZWdvLmMKKysrIGIvZnMvY2lmcy9jaWZzX3NwbmVnby5jCkBAIC0xNDQsNiArMTQ0LDkgQEAKIAlzcHJpbnRmKGRwLCAiO3VpZD0weCV4Iiwgc2VzSW5mby0+bGludXhfdWlkKTsKIAogCWRwID0gZGVzY3JpcHRpb24gKyBzdHJsZW4oZGVzY3JpcHRpb24pOworCXNwcmludGYoZHAsICI7Y3JlZHVpZD0weCV4Iiwgc2VzSW5mby0+Y3JlZF91aWQpOworCisJZHAgPSBkZXNjcmlwdGlvbiArIHN0cmxlbihkZXNjcmlwdGlvbik7CiAJc3ByaW50ZihkcCwgIjt1c2VyPSVzIiwgc2VzSW5mby0+dXNlck5hbWUpOwogCiAJZHAgPSBkZXNjcmlwdGlvbiArIHN0cmxlbihkZXNjcmlwdGlvbik7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNmcy5jIGIvZnMvY2lmcy9jaWZzZnMuYwppbmRleCA0ODRlNTJiLi44YTJjZjEyIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNmcy5jCisrKyBiL2ZzL2NpZnMvY2lmc2ZzLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXktdHlwZS5oPgogI2luY2x1ZGUgImRuc19yZXNvbHZlLmgiCiAjaW5jbHVkZSAiY2lmc19zcG5lZ28uaCIKKyNpbmNsdWRlICJmc2NhY2hlLmgiCiAjZGVmaW5lIENJRlNfTUFHSUNfTlVNQkVSIDB4RkY1MzRENDIJLyogdGhlIGZpcnN0IGZvdXIgYnl0ZXMgb2YgU01CIFBEVXMgKi8KIAogaW50IGNpZnNGWUkgPSAwOwpAQCAtMzI5LDYgKzMzMCwxMiBAQAogfQogCiBzdGF0aWMgdm9pZAorY2lmc19jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWNpZnNfZnNjYWNoZV9yZWxlYXNlX2lub2RlX2Nvb2tpZShpbm9kZSk7Cit9CisKK3N0YXRpYyB2b2lkCiBjaWZzX3Nob3dfYWRkcmVzcyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcikKIHsKIAlzZXFfcHJpbnRmKHMsICIsYWRkcj0iKTsKQEAgLTQ4OSw2ICs0OTYsNyBAQAogCS5hbGxvY19pbm9kZSA9IGNpZnNfYWxsb2NfaW5vZGUsCiAJLmRlc3Ryb3lfaW5vZGUgPSBjaWZzX2Rlc3Ryb3lfaW5vZGUsCiAJLmRyb3BfaW5vZGUJPSBjaWZzX2Ryb3BfaW5vZGUsCisJLmNsZWFyX2lub2RlCT0gY2lmc19jbGVhcl9pbm9kZSwKIC8qCS5kZWxldGVfaW5vZGUJPSBjaWZzX2RlbGV0ZV9pbm9kZSwgICovICAvKiBEbyBub3QgbmVlZCBhYm92ZQogCWZ1bmN0aW9uIHVubGVzcyBsYXRlciB3ZSBhZGQgbGF6eSBjbG9zZSBvZiBpbm9kZXMgb3IgdW5sZXNzIHRoZQogCWtlcm5lbCBmb3JnZXRzIHRvIGNhbGwgdXMgd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgcmVsZWFzZXMgKGNsb3NlcykKQEAgLTkwMiw2ICs5MTAsMTAgQEAKIAkJY0ZZSSgxLCAiY2lmc19tYXhfcGVuZGluZyBzZXQgdG8gbWF4IG9mIDI1NiIpOwogCX0KIAorCXJjID0gY2lmc19mc2NhY2hlX3JlZ2lzdGVyKCk7CisJaWYgKHJjKQorCQlnb3RvIG91dDsKKwogCXJjID0gY2lmc19pbml0X2lub2RlY2FjaGUoKTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0X2NsZWFuX3Byb2M7CkBAIC05MjMsNyArOTM1LDcgQEAKIAkJZ290byBvdXRfdW5yZWdpc3Rlcl9maWxlc3lzdGVtOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0NJRlNfREZTX1VQQ0FMTAotCXJjID0gcmVnaXN0ZXJfa2V5X3R5cGUoJmtleV90eXBlX2Ruc19yZXNvbHZlcik7CisJcmMgPSBjaWZzX2luaXRfZG5zX3Jlc29sdmVyKCk7CiAJaWYgKHJjKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX2tleV90eXBlOwogI2VuZGlmCkBAIC05MzUsNyArOTQ3LDcgQEAKIAogIG91dF91bnJlZ2lzdGVyX3Jlc29sdmVyX2tleToKICNpZmRlZiBDT05GSUdfQ0lGU19ERlNfVVBDQUxMCi0JdW5yZWdpc3Rlcl9rZXlfdHlwZSgma2V5X3R5cGVfZG5zX3Jlc29sdmVyKTsKKwljaWZzX2V4aXRfZG5zX3Jlc29sdmVyKCk7CiAgb3V0X3VucmVnaXN0ZXJfa2V5X3R5cGU6CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQ0lGU19VUENBTEwKQEAgLTk1MSw2ICs5NjMsOCBAQAogCWNpZnNfZGVzdHJveV9pbm9kZWNhY2hlKCk7CiAgb3V0X2NsZWFuX3Byb2M6CiAJY2lmc19wcm9jX2NsZWFuKCk7CisJY2lmc19mc2NhY2hlX3VucmVnaXN0ZXIoKTsKKyBvdXQ6CiAJcmV0dXJuIHJjOwogfQogCkBAIC05NTksOSArOTczLDEwIEBACiB7CiAJY0ZZSShEQkcyLCAiZXhpdF9jaWZzIik7CiAJY2lmc19wcm9jX2NsZWFuKCk7CisJY2lmc19mc2NhY2hlX3VucmVnaXN0ZXIoKTsKICNpZmRlZiBDT05GSUdfQ0lGU19ERlNfVVBDQUxMCiAJY2lmc19kZnNfcmVsZWFzZV9hdXRvbW91bnRfdGltZXIoKTsKLQl1bnJlZ2lzdGVyX2tleV90eXBlKCZrZXlfdHlwZV9kbnNfcmVzb2x2ZXIpOworCWNpZnNfZXhpdF9kbnNfcmVzb2x2ZXIoKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19DSUZTX1VQQ0FMTAogCXVucmVnaXN0ZXJfa2V5X3R5cGUoJmNpZnNfc3BuZWdvX2tleV90eXBlKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmggYi9mcy9jaWZzL2NpZnNmcy5oCmluZGV4IGE3ZWI2NWMuLmQ4MmY1ZmIgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmgKKysrIGIvZnMvY2lmcy9jaWZzZnMuaApAQCAtMTE0LDUgKzExNCw1IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zIGNpZnNfZXhwb3J0X29wczsKICNlbmRpZiAvKiBFWFBFUklNRU5UQUwgKi8KIAotI2RlZmluZSBDSUZTX1ZFUlNJT04gICAiMS42NCIKKyNkZWZpbmUgQ0lGU19WRVJTSU9OICAgIjEuNjUiCiAjZW5kaWYJCQkJLyogX0NJRlNGU19IICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNnbG9iLmggYi9mcy9jaWZzL2NpZnNnbG9iLmgKaW5kZXggYTg4NDc5Yy4uNTk5MDYxNCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZ2xvYi5oCisrKyBiL2ZzL2NpZnMvY2lmc2dsb2IuaApAQCAtMTYsNiArMTYsOSBAQAogICogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKgogICovCisjaWZuZGVmIF9DSUZTX0dMT0JfSAorI2RlZmluZSBfQ0lGU19HTE9CX0gKKwogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvaW42Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtMzQsNyArMzcsNyBAQAogI2RlZmluZSBNQVhfU0hBUkVfU0laRSAgNjQJLyogdXNlZCB0byBiZSAyMCwgdGhpcyBzaG91bGQgc3RpbGwgYmUgZW5vdWdoICovCiAjZGVmaW5lIE1BWF9VU0VSTkFNRV9TSVpFIDMyCS8qIDMyIGlzIHRvIGFsbG93IGZvciAxNSBjaGFyIG5hbWVzICsgbnVsbAogCQkJCSAgIHRlcm1pbmF0aW9uIHRoZW4gKjIgZm9yIHVuaWNvZGUgdmVyc2lvbnMgKi8KLSNkZWZpbmUgTUFYX1BBU1NXT1JEX1NJWkUgMTYKKyNkZWZpbmUgTUFYX1BBU1NXT1JEX1NJWkUgNTEyICAvKiBtYXggZm9yIHdpbmRvd3Mgc2VlbXMgdG8gYmUgMjU2IHdpZGUgY2hhcnMgKi8KIAogI2RlZmluZSBDSUZTX01JTl9SQ1ZfUE9PTCA0CiAKQEAgLTgwLDggKzgzLDcgQEAKIH07CiAKIGVudW0gc2VjdXJpdHlFbnVtIHsKLQlQTEFJTlRYVCA9IDAsIAkJLyogTGVnYWN5IHdpdGggUGxhaW50ZXh0IHBhc3N3b3JkcyAqLwotCUxBTk1BTiwJCQkvKiBMZWdhY3kgTEFOTUFOIGF1dGggKi8KKwlMQU5NQU4gPSAwLAkJCS8qIExlZ2FjeSBMQU5NQU4gYXV0aCAqLwogCU5UTE0sCQkJLyogTGVnYWN5IE5UTE0wMTIgYXV0aCB3aXRoIE5UTE0gaGFzaCAqLwogCU5UTE12MiwJCQkvKiBMZWdhY3kgTlRMTSBhdXRoIHdpdGggTlRMTXYyIGhhc2ggKi8KIAlSYXdOVExNU1NQLAkJLyogTlRMTVNTUCB3aXRob3V0IFNQTkVHTywgTlRMTXYyIGhhc2ggKi8KQEAgLTE0Miw3ICsxNDQsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgcGVuZGluZ19taWRfcTsKIAl2b2lkICpTZXJ2ZXJfTmxzSW5mbzsJLyogQkIgLSBwbGFjZWhvbGRlciBmb3IgZnV0dXJlIE5MUyBpbmZvICAqLwogCXVuc2lnbmVkIHNob3J0IHNlcnZlcl9jb2RlcGFnZTsJLyogY29kZXBhZ2UgZm9yIHRoZSBzZXJ2ZXIgICAgKi8KLQl1bnNpZ25lZCBsb25nIGlwX2FkZHJlc3M7CS8qIElQIGFkZHIgZm9yIHRoZSBzZXJ2ZXIgaWYga25vd24gKi8KIAllbnVtIHByb3RvY29sRW51bSBwcm90b2NvbFR5cGU7CiAJY2hhciB2ZXJzaW9uTWFqb3I7CiAJY2hhciB2ZXJzaW9uTWlub3I7CkBAIC0xOTAsMTkgKzE5MSw5IEBACiAJYm9vbAlzZWNfbXNrZXJiZXJvczsJCS8qIHN1cHBvcnRzIGxlZ2FjeSBNUyBLZXJiZXJvcyAqLwogCWJvb2wJc2VjX2tlcmJlcm9zdTJ1OwkvKiBzdXBwb3J0cyBVMlUgS2VyYmVyb3MgKi8KIAlib29sCXNlY19udGxtc3NwOwkJLyogc3VwcG9ydHMgTlRMTVNTUCAqLwotfTsKLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgaXMgb3VyIHNob3J0Y3V0IHRvIHVzZXIgaW5mb3JtYXRpb24uICBXZSBzdXJmYWNlIHRoZSB1aWQsCi0gKiBhbmQgbmFtZS4gV2UgYWx3YXlzIGdldCB0aGUgcGFzc3dvcmQgb24gdGhlIGZseSBpbiBjYXNlIGl0Ci0gKiBoYXMgY2hhbmdlZC4gV2UgYWxzbyBoYW5nIGEgbGlzdCBvZiBzZXNzaW9ucyBvd25lZCBieSB0aGlzIHVzZXIgb2ZmIGhlcmUuCi0gKi8KLXN0cnVjdCBjaWZzVWlkSW5mbyB7Ci0Jc3RydWN0IGxpc3RfaGVhZCB1c2VyTGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHNlc3Npb25MaXN0OyAvKiBTTUIgc2Vzc2lvbnMgZm9yIHRoaXMgdXNlciAqLwotCXVpZF90IGxpbnV4X3VpZDsKLQljaGFyIHVzZXJbTUFYX1VTRVJOQU1FX1NJWkUgKyAxXTsJLyogYXNjaWkgbmFtZSBvZiB1c2VyICovCi0JLyogQkIgbWF5IG5lZWQgcHRyIG9yIGNhbGxiYWNrIGZvciBQQU0gb3IgV2luQmluZCBpbmZvICovCisjaWZkZWYgQ09ORklHX0NJRlNfRlNDQUNIRQorCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAgICpmc2NhY2hlOyAvKiBjbGllbnQgaW5kZXggY2FjaGUgY29va2llICovCisjZW5kaWYKIH07CiAKIC8qCkBAIC0yMTIsOSArMjAzLDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNtYl9zZXNfbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHRjb25fbGlzdDsKIAlzdHJ1Y3QgbXV0ZXggc2Vzc2lvbl9tdXRleDsKLSNpZiAwCi0Jc3RydWN0IGNpZnNVaWRJbmZvICp1aWRJbmZvOwkvKiBwb2ludGVyIHRvIHVzZXIgaW5mbyAqLwotI2VuZGlmCiAJc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyOwkvKiBwb2ludGVyIHRvIHNlcnZlciBpbmZvICovCiAJaW50IHNlc19jb3VudDsJCS8qIHJlZmVyZW5jZSBjb3VudGVyICovCiAJZW51bSBzdGF0dXNFbnVtIHN0YXR1czsKQEAgLTIyNiw3ICsyMTQsOCBAQAogCWNoYXIgKnNlcnZlck5PUzsJLyogbmFtZSBvZiBuZXR3b3JrIG9wZXJhdGluZyBzeXN0ZW0gb2Ygc2VydmVyICovCiAJY2hhciAqc2VydmVyRG9tYWluOwkvKiBzZWN1cml0eSByZWFsbSBvZiBzZXJ2ZXIgKi8KIAlpbnQgU3VpZDsJCS8qIHJlbW90ZSBzbWIgdWlkICAqLwotCXVpZF90IGxpbnV4X3VpZDsgICAgICAgIC8qIGxvY2FsIExpbnV4IHVpZCAqLworCXVpZF90IGxpbnV4X3VpZDsgICAgICAgIC8qIG92ZXJyaWRpbmcgb3duZXIgb2YgZmlsZXMgb24gdGhlIG1vdW50ICovCisJdWlkX3QgY3JlZF91aWQ7CQkvKiBvd25lciBvZiBjcmVkZW50aWFscyAqLwogCWludCBjYXBhYmlsaXRpZXM7CiAJY2hhciBzZXJ2ZXJOYW1lW1NFUlZFUl9OQU1FX0xFTl9XSVRIX05VTEwgKiAyXTsJLyogQkIgbWFrZSBiaWdnZXIgZm9yCiAJCQkJVENQIG5hbWVzIC0gd2lsbCBpcHY2IGFuZCBzY3RwIGFkZHJlc3NlcyBmaXQ/ICovCkBAIC0zMTEsNiArMzAwLDEwIEBACiAJYm9vbCBsb2NhbF9sZWFzZToxOyAvKiBjaGVjayBsZWFzZXMgKG9ubHkpIG9uIGxvY2FsIHN5c3RlbSBub3QgcmVtb3RlICovCiAJYm9vbCBicm9rZW5fcG9zaXhfb3BlbjsgLyogZS5nLiBTYW1iYSBzZXJ2ZXIgdmVyc2lvbnMgPCAzLjMuMiwgMy4yLjkgKi8KIAlib29sIG5lZWRfcmVjb25uZWN0OjE7IC8qIGNvbm5lY3Rpb24gcmVzZXQsIHRpZCBub3cgaW52YWxpZCAqLworI2lmZGVmIENPTkZJR19DSUZTX0ZTQ0FDSEUKKwl1NjQgcmVzb3VyY2VfaWQ7CQkvKiBzZXJ2ZXIgcmVzb3VyY2UgaWQgKi8KKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmZzY2FjaGU7CS8qIGNvb2tpZSBmb3Igc2hhcmUgKi8KKyNlbmRpZgogCS8qIEJCIGFkZCBmaWVsZCBmb3IgYmFjayBwb2ludGVyIHRvIHNiIHN0cnVjdChzKT8gKi8KIH07CiAKQEAgLTM5OCw2ICszOTEsOSBAQAogCWJvb2wgaW52YWxpZF9tYXBwaW5nOjE7CQkvKiBwYWdlY2FjaGUgaXMgaW52YWxpZCAqLwogCXU2NCAgc2VydmVyX2VvZjsJCS8qIGN1cnJlbnQgZmlsZSBzaXplIG9uIHNlcnZlciAqLwogCXU2NCAgdW5pcXVlaWQ7CQkJLyogc2VydmVyIGlub2RlIG51bWJlciAqLworI2lmZGVmIENPTkZJR19DSUZTX0ZTQ0FDSEUKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmZzY2FjaGU7CisjZW5kaWYKIAlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOwogfTsKIApAQCAtNzMzLDMgKzcyOSw1IEBACiBHTE9CQUxfRVhURVJOIHVuc2lnbmVkIGludCBjaWZzX21heF9wZW5kaW5nOyAvKiBNQVggcmVxdWVzdHMgYXQgb25jZSB0byBzZXJ2ZXIqLwogCiBleHRlcm4gY29uc3Qgc3RydWN0IHNsb3dfd29ya19vcHMgY2lmc19vcGxvY2tfYnJlYWtfb3BzOworCisjZW5kaWYJLyogX0NJRlNfR0xPQl9IICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNwcm90by5oIGIvZnMvY2lmcy9jaWZzcHJvdG8uaAppbmRleCBmYjYzMThiLi4yZWFlYmJkIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNwcm90by5oCisrKyBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKQEAgLTg2LDcgKzg2LDkgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgc21iQ2FsY1NpemVfTEUoc3RydWN0IHNtYl9oZHIgKnB0cik7CiBleHRlcm4gaW50IGRlY29kZV9uZWdUb2tlbkluaXQodW5zaWduZWQgY2hhciAqc2VjdXJpdHlfYmxvYiwgaW50IGxlbmd0aCwKIAkJCXN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcik7Ci1leHRlcm4gaW50IGNpZnNfY29udmVydF9hZGRyZXNzKGNoYXIgKnNyYywgdm9pZCAqZHN0KTsKK2V4dGVybiBpbnQgY2lmc19jb252ZXJ0X2FkZHJlc3Moc3RydWN0IHNvY2thZGRyICpkc3QsIGNoYXIgKnNyYyk7CitleHRlcm4gaW50IGNpZnNfZmlsbF9zb2NrYWRkcihzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwgY2hhciAqc3JjLAorCQkJCXVuc2lnbmVkIHNob3J0IGludCBwb3J0KTsKIGV4dGVybiBpbnQgbWFwX3NtYl90b19saW51eF9lcnJvcihzdHJ1Y3Qgc21iX2hkciAqc21iLCBpbnQgbG9nRXJyKTsKIGV4dGVybiB2b2lkIGhlYWRlcl9hc3NlbWJsZShzdHJ1Y3Qgc21iX2hkciAqLCBjaGFyIC8qIGNvbW1hbmQgKi8gLAogCQkJICAgIGNvbnN0IHN0cnVjdCBjaWZzVGNvbkluZm8gKiwgaW50IC8qIGxlbmd0aCBvZgpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jb25uZWN0LmMgYi9mcy9jaWZzL2Nvbm5lY3QuYwppbmRleCAyMjA4ZjA2Li4yYTQzYTBhIDEwMDY0NAotLS0gYS9mcy9jaWZzL2Nvbm5lY3QuYworKysgYi9mcy9jaWZzL2Nvbm5lY3QuYwpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIm50ZXJyLmgiCiAjaW5jbHVkZSAicmZjMTAwMnBkdS5oIgogI2luY2x1ZGUgImNuX2NpZnMuaCIKKyNpbmNsdWRlICJmc2NhY2hlLmgiCiAKICNkZWZpbmUgQ0lGU19QT1JUIDQ0NQogI2RlZmluZSBSRkMxMDAxX1BPUlQgMTM5CkBAIC02Niw2ICs2Nyw3IEBACiAJY2hhciAqaW9jaGFyc2V0OyAgLyogbG9jYWwgY29kZSBwYWdlIGZvciBtYXBwaW5nIHRvIGFuZCBmcm9tIFVuaWNvZGUgKi8KIAljaGFyIHNvdXJjZV9yZmMxMDAxX25hbWVbMTZdOyAvKiBuZXRiaW9zIG5hbWUgb2YgY2xpZW50ICovCiAJY2hhciB0YXJnZXRfcmZjMTAwMV9uYW1lWzE2XTsgLyogbmV0YmlvcyBuYW1lIG9mIHNlcnZlciBmb3IgV2luOXgvTUUgKi8KKwl1aWRfdCBjcmVkX3VpZDsKIAl1aWRfdCBsaW51eF91aWQ7CiAJZ2lkX3QgbGludXhfZ2lkOwogCW1vZGVfdCBmaWxlX21vZGU7CkBAIC05Nyw2ICs5OSw3IEBACiAJYm9vbCBub2Jsb2Nrc25kOjE7CiAJYm9vbCBub2F1dG90dW5lOjE7CiAJYm9vbCBub3N0cmljdHN5bmM6MTsgLyogZG8gbm90IGZvcmNlIGV4cGVuc2l2ZSBTTUJmbHVzaCBvbiBldmVyeSBzeW5jICovCisJYm9vbCBmc2M6MTsJLyogZW5hYmxlIGZzY2FjaGUgKi8KIAl1bnNpZ25lZCBpbnQgcnNpemU7CiAJdW5zaWduZWQgaW50IHdzaXplOwogCWJvb2wgc29ja29wdF90Y3Bfbm9kZWxheToxOwpAQCAtODMwLDcgKzgzMyw4IEBACiAJLyogbnVsbCB0YXJnZXQgbmFtZSBpbmRpY2F0ZXMgdG8gdXNlICpTTUJTRVJWUiBkZWZhdWx0IGNhbGxlZCBuYW1lCiAJICAgaWYgd2UgZW5kIHVwIHNlbmRpbmcgUkZDMTAwMSBzZXNzaW9uIGluaXRpYWxpemUgKi8KIAl2b2wtPnRhcmdldF9yZmMxMDAxX25hbWVbMF0gPSAwOwotCXZvbC0+bGludXhfdWlkID0gY3VycmVudF91aWQoKTsgIC8qIHVzZSBjdXJyZW50X2V1aWQoKSBpbnN0ZWFkPyAqLworCXZvbC0+Y3JlZF91aWQgPSBjdXJyZW50X3VpZCgpOworCXZvbC0+bGludXhfdWlkID0gY3VycmVudF91aWQoKTsKIAl2b2wtPmxpbnV4X2dpZCA9IGN1cnJlbnRfZ2lkKCk7CiAKIAkvKiBkZWZhdWx0IHRvIG9ubHkgYWxsb3dpbmcgd3JpdGUgYWNjZXNzIHRvIG93bmVyIG9mIHRoZSBtb3VudCAqLwpAQCAtMTI1Nyw2ICsxMjYxLDEyIEBACiAJCX0gZWxzZSBpZiAoKHN0cm5pY21wKGRhdGEsICJub2Nhc2UiLCA2KSA9PSAwKSB8fAogCQkJICAgKHN0cm5pY21wKGRhdGEsICJpZ25vcmVjYXNlIiwgMTApICA9PSAwKSkgewogCQkJdm9sLT5ub2Nhc2UgPSAxOworCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJtYW5kIiwgNCkgPT0gMCkgeworCQkJLyogaWdub3JlICovCisJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgIm5vbWFuZCIsIDYpID09IDApIHsKKwkJCS8qIGlnbm9yZSAqLworCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJfbmV0ZGV2IiwgNykgPT0gMCkgeworCQkJLyogaWdub3JlICovCiAJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgImJybCIsIDMpID09IDApIHsKIAkJCXZvbC0+bm9icmwgPSAgMDsKIAkJfSBlbHNlIGlmICgoc3RybmljbXAoZGF0YSwgIm5vYnJsIiwgNSkgPT0gMCkgfHwKQEAgLTEzMzEsNiArMTM0MSw4IEBACiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDSUZTOiBNb3VudCBvcHRpb24gbm9hYyBub3QgIgogCQkJCSJzdXBwb3J0ZWQuIEluc3RlYWQgc2V0ICIKIAkJCQkiL3Byb2MvZnMvY2lmcy9Mb29rdXBDYWNoZUVuYWJsZWQgdG8gMFxuIik7CisJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgImZzYyIsIDMpID09IDApIHsKKwkJCXZvbC0+ZnNjID0gdHJ1ZTsKIAkJfSBlbHNlCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDSUZTOiBVbmtub3duIG1vdW50IG9wdGlvbiAlc1xuIiwKIAkJCQkJCWRhdGEpOwpAQCAtMTM4MCwxOCArMTM5Miw5MiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqCi1jaWZzX2ZpbmRfdGNwX3Nlc3Npb24oc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHIsIHVuc2lnbmVkIHNob3J0IGludCBwb3J0KQorc3RhdGljIGJvb2wKK21hdGNoX2FkZHJlc3Moc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCXN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkcjQgPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKKworCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlpZiAoYWRkcjQtPnNpbl9hZGRyLnNfYWRkciAhPQorCQkgICAgc2VydmVyLT5hZGRyLnNvY2tBZGRyLnNpbl9hZGRyLnNfYWRkcikKKwkJCXJldHVybiBmYWxzZTsKKwkJaWYgKGFkZHI0LT5zaW5fcG9ydCAmJgorCQkgICAgYWRkcjQtPnNpbl9wb3J0ICE9IHNlcnZlci0+YWRkci5zb2NrQWRkci5zaW5fcG9ydCkKKwkJCXJldHVybiBmYWxzZTsKKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUNjoKKwkJaWYgKCFpcHY2X2FkZHJfZXF1YWwoJmFkZHI2LT5zaW42X2FkZHIsCisJCQkJICAgICAmc2VydmVyLT5hZGRyLnNvY2tBZGRyNi5zaW42X2FkZHIpKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAoYWRkcjYtPnNpbjZfc2NvcGVfaWQgIT0KKwkJICAgIHNlcnZlci0+YWRkci5zb2NrQWRkcjYuc2luNl9zY29wZV9pZCkKKwkJCXJldHVybiBmYWxzZTsKKwkJaWYgKGFkZHI2LT5zaW42X3BvcnQgJiYKKwkJICAgIGFkZHI2LT5zaW42X3BvcnQgIT0gc2VydmVyLT5hZGRyLnNvY2tBZGRyNi5zaW42X3BvcnQpCisJCQlyZXR1cm4gZmFsc2U7CisJCWJyZWFrOworCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbAorbWF0Y2hfc2VjdXJpdHkoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLCBzdHJ1Y3Qgc21iX3ZvbCAqdm9sKQoreworCXVuc2lnbmVkIGludCBzZWNGbGFnczsKKworCWlmICh2b2wtPnNlY0ZsZyAmICh+KENJRlNTRUNfTVVTVF9TSUdOIHwgQ0lGU1NFQ19NVVNUX1NFQUwpKSkKKwkJc2VjRmxhZ3MgPSB2b2wtPnNlY0ZsZzsKKwllbHNlCisJCXNlY0ZsYWdzID0gZ2xvYmFsX3NlY2ZsYWdzIHwgdm9sLT5zZWNGbGc7CisKKwlzd2l0Y2ggKHNlcnZlci0+c2VjVHlwZSkgeworCWNhc2UgTEFOTUFOOgorCQlpZiAoIShzZWNGbGFncyAmIChDSUZTU0VDX01BWV9MQU5NQU58Q0lGU1NFQ19NQVlfUExOVFhUKSkpCisJCQlyZXR1cm4gZmFsc2U7CisJCWJyZWFrOworCWNhc2UgTlRMTXYyOgorCQlpZiAoIShzZWNGbGFncyAmIENJRlNTRUNfTUFZX05UTE1WMikpCisJCQlyZXR1cm4gZmFsc2U7CisJCWJyZWFrOworCWNhc2UgTlRMTToKKwkJaWYgKCEoc2VjRmxhZ3MgJiBDSUZTU0VDX01BWV9OVExNKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJYnJlYWs7CisJY2FzZSBLZXJiZXJvczoKKwkJaWYgKCEoc2VjRmxhZ3MgJiBDSUZTU0VDX01BWV9LUkI1KSkKKwkJCXJldHVybiBmYWxzZTsKKwkJYnJlYWs7CisJY2FzZSBSYXdOVExNU1NQOgorCQlpZiAoIShzZWNGbGFncyAmIENJRlNTRUNfTUFZX05UTE1TU1ApKQorCQkJcmV0dXJuIGZhbHNlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBzaG91bGRuJ3QgaGFwcGVuICovCisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBub3cgY2hlY2sgaWYgc2lnbmluZyBtb2RlIGlzIGFjY2VwdGlibGUgKi8KKwlpZiAoKHNlY0ZsYWdzICYgQ0lGU1NFQ19NQVlfU0lHTikgPT0gMCAmJgorCSAgICAoc2VydmVyLT5zZWNNb2RlICYgU0VDTU9ERV9TSUdOX1JFUVVJUkVEKSkKKwkJCXJldHVybiBmYWxzZTsKKwllbHNlIGlmICgoKHNlY0ZsYWdzICYgQ0lGU1NFQ19NVVNUX1NJR04pID09IENJRlNTRUNfTVVTVF9TSUdOKSAmJgorCQkgKHNlcnZlci0+c2VjTW9kZSAmCisJCSAgKFNFQ01PREVfU0lHTl9FTkFCTEVEfFNFQ01PREVfU0lHTl9SRVFVSVJFRCkpID09IDApCisJCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKgorY2lmc19maW5kX3RjcF9zZXNzaW9uKHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc3RydWN0IHNtYl92b2wgKnZvbCkKK3sKIAlzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXI7Ci0Jc3RydWN0IHNvY2thZGRyX2luICphZGRyNCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgYWRkcjsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIGFkZHI7CiAKIAl3cml0ZV9sb2NrKCZjaWZzX3RjcF9zZXNfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaCh0bXAsICZjaWZzX3RjcF9zZXNfbGlzdCkgewotCQlzZXJ2ZXIgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbywKLQkJCQkgICAgdGNwX3Nlc19saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNlcnZlciwgJmNpZnNfdGNwX3Nlc19saXN0LCB0Y3Bfc2VzX2xpc3QpIHsKIAkJLyoKIAkJICogdGhlIGRlbXV4IHRocmVhZCBjYW4gZXhpdCBvbiBpdHMgb3duIHdoaWxlIHN0aWxsIGluIENpZnNOZXcKIAkJICogc28gZG9uJ3QgYWNjZXB0IGFueSBzb2NrZXRzIGluIHRoYXQgc3RhdGUuIFNpbmNlIHRoZQpAQCAtMTQwMSwzNyArMTQ4NywxMSBAQAogCQlpZiAoc2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc05ldykKIAkJCWNvbnRpbnVlOwogCi0JCXN3aXRjaCAoYWRkci0+c3NfZmFtaWx5KSB7Ci0JCWNhc2UgQUZfSU5FVDoKLQkJCWlmIChhZGRyNC0+c2luX2FkZHIuc19hZGRyID09Ci0JCQkgICAgc2VydmVyLT5hZGRyLnNvY2tBZGRyLnNpbl9hZGRyLnNfYWRkcikgewotCQkJCWFkZHI0LT5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOwotCQkJCS8qIHVzZXIgb3ZlcnJvZGUgZGVmYXVsdCBwb3J0PyAqLwotCQkJCWlmIChhZGRyNC0+c2luX3BvcnQpIHsKLQkJCQkJaWYgKGFkZHI0LT5zaW5fcG9ydCAhPQotCQkJCQkgICAgc2VydmVyLT5hZGRyLnNvY2tBZGRyLnNpbl9wb3J0KQotCQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJfSBlbHNlCi0JCQkJY29udGludWU7CisJCWlmICghbWF0Y2hfYWRkcmVzcyhzZXJ2ZXIsIGFkZHIpKQorCQkJY29udGludWU7CiAKLQkJY2FzZSBBRl9JTkVUNjoKLQkJCWlmIChpcHY2X2FkZHJfZXF1YWwoJmFkZHI2LT5zaW42X2FkZHIsCi0JCQkgICAgJnNlcnZlci0+YWRkci5zb2NrQWRkcjYuc2luNl9hZGRyKSAmJgotCQkJICAgIChhZGRyNi0+c2luNl9zY29wZV9pZCA9PQotCQkJICAgIHNlcnZlci0+YWRkci5zb2NrQWRkcjYuc2luNl9zY29wZV9pZCkpIHsKLQkJCQlhZGRyNi0+c2luNl9wb3J0ID0gaHRvbnMocG9ydCk7Ci0JCQkJLyogdXNlciBvdmVycm9kZSBkZWZhdWx0IHBvcnQ/ICovCi0JCQkJaWYgKGFkZHI2LT5zaW42X3BvcnQpIHsKLQkJCQkJaWYgKGFkZHI2LT5zaW42X3BvcnQgIT0KLQkJCQkJICAgc2VydmVyLT5hZGRyLnNvY2tBZGRyNi5zaW42X3BvcnQpCi0JCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UKLQkJCQljb250aW51ZTsKLQkJfQorCQlpZiAoIW1hdGNoX3NlY3VyaXR5KHNlcnZlciwgdm9sKSkKKwkJCWNvbnRpbnVlOwogCiAJCSsrc2VydmVyLT5zcnZfY291bnQ7CiAJCXdyaXRlX3VubG9jaygmY2lmc190Y3Bfc2VzX2xvY2spOwpAQCAtMTQ2MCw2ICsxNTIwLDggQEAKIAlzZXJ2ZXItPnRjcFN0YXR1cyA9IENpZnNFeGl0aW5nOwogCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CiAKKwljaWZzX2ZzY2FjaGVfcmVsZWFzZV9jbGllbnRfY29va2llKHNlcnZlcik7CisKIAl0YXNrID0geGNoZygmc2VydmVyLT50c2ssIE5VTEwpOwogCWlmICh0YXNrKQogCQlmb3JjZV9zaWcoU0lHS0lMTCwgdGFzayk7CkBAIC0xNDc5LDcgKzE1NDEsOSBAQAogCWNGWUkoMSwgIlVOQzogJXMgaXA6ICVzIiwgdm9sdW1lX2luZm8tPlVOQywgdm9sdW1lX2luZm8tPlVOQ2lwKTsKIAogCWlmICh2b2x1bWVfaW5mby0+VU5DaXAgJiYgdm9sdW1lX2luZm8tPlVOQykgewotCQlyYyA9IGNpZnNfY29udmVydF9hZGRyZXNzKHZvbHVtZV9pbmZvLT5VTkNpcCwgJmFkZHIpOworCQlyYyA9IGNpZnNfZmlsbF9zb2NrYWRkcigoc3RydWN0IHNvY2thZGRyICopJmFkZHIsCisJCQkJCXZvbHVtZV9pbmZvLT5VTkNpcCwKKwkJCQkJdm9sdW1lX2luZm8tPnBvcnQpOwogCQlpZiAoIXJjKSB7CiAJCQkvKiB3ZSBmYWlsZWQgdHJhbnNsYXRpbmcgYWRkcmVzcyAqLwogCQkJcmMgPSAtRUlOVkFMOwpAQCAtMTQ5OSw3ICsxNTYzLDcgQEAKIAl9CiAKIAkvKiBzZWUgaWYgd2UgYWxyZWFkeSBoYXZlIGEgbWF0Y2hpbmcgdGNwX3NlcyAqLwotCXRjcF9zZXMgPSBjaWZzX2ZpbmRfdGNwX3Nlc3Npb24oJmFkZHIsIHZvbHVtZV9pbmZvLT5wb3J0KTsKKwl0Y3Bfc2VzID0gY2lmc19maW5kX3RjcF9zZXNzaW9uKChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgdm9sdW1lX2luZm8pOwogCWlmICh0Y3Bfc2VzKQogCQlyZXR1cm4gdGNwX3NlczsKIApAQCAtMTU0MywxMiArMTYwNywxMCBAQAogCQljRllJKDEsICJhdHRlbXB0aW5nIGlwdjYgY29ubmVjdCIpOwogCQkvKiBCQiBzaG91bGQgd2UgYWxsb3cgaXB2NiBvbiBwb3J0IDEzOT8gKi8KIAkJLyogb3RoZXIgT1MgbmV2ZXIgb2JzZXJ2ZWQgaW4gV2lsZCBkb2luZyAxMzkgd2l0aCB2NiAqLwotCQlzaW5fc2VydmVyNi0+c2luNl9wb3J0ID0gaHRvbnModm9sdW1lX2luZm8tPnBvcnQpOwogCQltZW1jcHkoJnRjcF9zZXMtPmFkZHIuc29ja0FkZHI2LCBzaW5fc2VydmVyNiwKIAkJCXNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CiAJCXJjID0gaXB2Nl9jb25uZWN0KHRjcF9zZXMpOwogCX0gZWxzZSB7Ci0JCXNpbl9zZXJ2ZXItPnNpbl9wb3J0ID0gaHRvbnModm9sdW1lX2luZm8tPnBvcnQpOwogCQltZW1jcHkoJnRjcF9zZXMtPmFkZHIuc29ja0FkZHIsIHNpbl9zZXJ2ZXIsCiAJCQlzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CiAJCXJjID0gaXB2NF9jb25uZWN0KHRjcF9zZXMpOwpAQCAtMTU3Nyw2ICsxNjM5LDggQEAKIAlsaXN0X2FkZCgmdGNwX3Nlcy0+dGNwX3Nlc19saXN0LCAmY2lmc190Y3Bfc2VzX2xpc3QpOwogCXdyaXRlX3VubG9jaygmY2lmc190Y3Bfc2VzX2xvY2spOwogCisJY2lmc19mc2NhY2hlX2dldF9jbGllbnRfY29va2llKHRjcF9zZXMpOworCiAJcmV0dXJuIHRjcF9zZXM7CiAKIG91dF9lcnI6CkBAIC0xNTkxLDE3ICsxNjU1LDI3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2lmc1Nlc0luZm8gKgotY2lmc19maW5kX3NtYl9zZXMoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLCBjaGFyICp1c2VybmFtZSkKK2NpZnNfZmluZF9zbWJfc2VzKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlciwgc3RydWN0IHNtYl92b2wgKnZvbCkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CiAJc3RydWN0IGNpZnNTZXNJbmZvICpzZXM7CiAKIAl3cml0ZV9sb2NrKCZjaWZzX3RjcF9zZXNfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaCh0bXAsICZzZXJ2ZXItPnNtYl9zZXNfbGlzdCkgewotCQlzZXMgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGNpZnNTZXNJbmZvLCBzbWJfc2VzX2xpc3QpOwotCQlpZiAoc3RybmNtcChzZXMtPnVzZXJOYW1lLCB1c2VybmFtZSwgTUFYX1VTRVJOQU1FX1NJWkUpKQotCQkJY29udGludWU7Ci0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNlcywgJnNlcnZlci0+c21iX3Nlc19saXN0LCBzbWJfc2VzX2xpc3QpIHsKKwkJc3dpdGNoIChzZXJ2ZXItPnNlY1R5cGUpIHsKKwkJY2FzZSBLZXJiZXJvczoKKwkJCWlmICh2b2wtPmNyZWRfdWlkICE9IHNlcy0+Y3JlZF91aWQpCisJCQkJY29udGludWU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIGFueXRoaW5nIGVsc2UgdGFrZXMgdXNlcm5hbWUvcGFzc3dvcmQgKi8KKwkJCWlmIChzdHJuY21wKHNlcy0+dXNlck5hbWUsIHZvbC0+dXNlcm5hbWUsCisJCQkJICAgIE1BWF9VU0VSTkFNRV9TSVpFKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChzdHJsZW4odm9sLT51c2VybmFtZSkgIT0gMCAmJgorCQkJICAgIHN0cm5jbXAoc2VzLT5wYXNzd29yZCwgdm9sLT5wYXNzd29yZCwKKwkJCQkgICAgTUFYX1BBU1NXT1JEX1NJWkUpKQorCQkJCWNvbnRpbnVlOworCQl9CiAJCSsrc2VzLT5zZXNfY291bnQ7CiAJCXdyaXRlX3VubG9jaygmY2lmc190Y3Bfc2VzX2xvY2spOwogCQlyZXR1cm4gc2VzOwpAQCAtMTY0Myw3ICsxNzE3LDcgQEAKIAogCXhpZCA9IEdldFhpZCgpOwogCi0Jc2VzID0gY2lmc19maW5kX3NtYl9zZXMoc2VydmVyLCB2b2x1bWVfaW5mby0+dXNlcm5hbWUpOworCXNlcyA9IGNpZnNfZmluZF9zbWJfc2VzKHNlcnZlciwgdm9sdW1lX2luZm8pOwogCWlmIChzZXMpIHsKIAkJY0ZZSSgxLCAiRXhpc3Rpbmcgc21iIHNlc3MgZm91bmQgKHN0YXR1cz0lZCkiLCBzZXMtPnN0YXR1cyk7CiAKQEAgLTE3MDYsNiArMTc4MCw3IEBACiAJCWlmIChzZXMtPmRvbWFpbk5hbWUpCiAJCQlzdHJjcHkoc2VzLT5kb21haW5OYW1lLCB2b2x1bWVfaW5mby0+ZG9tYWlubmFtZSk7CiAJfQorCXNlcy0+Y3JlZF91aWQgPSB2b2x1bWVfaW5mby0+Y3JlZF91aWQ7CiAJc2VzLT5saW51eF91aWQgPSB2b2x1bWVfaW5mby0+bGludXhfdWlkOwogCXNlcy0+b3ZlcnJpZGVTZWNGbGcgPSB2b2x1bWVfaW5mby0+c2VjRmxnOwogCkBAIC0xNzczLDYgKzE4NDgsNyBAQAogCUNJRlNTTUJURGlzKHhpZCwgdGNvbik7CiAJX0ZyZWVYaWQoeGlkKTsKIAorCWNpZnNfZnNjYWNoZV9yZWxlYXNlX3N1cGVyX2Nvb2tpZSh0Y29uKTsKIAl0Y29uSW5mb0ZyZWUodGNvbik7CiAJY2lmc19wdXRfc21iX3NlcyhzZXMpOwogfQpAQCAtMTg0Myw2ICsxOTE5LDggQEAKIAlsaXN0X2FkZCgmdGNvbi0+dGNvbl9saXN0LCAmc2VzLT50Y29uX2xpc3QpOwogCXdyaXRlX3VubG9jaygmY2lmc190Y3Bfc2VzX2xvY2spOwogCisJY2lmc19mc2NhY2hlX2dldF9zdXBlcl9jb29raWUodGNvbik7CisKIAlyZXR1cm4gdGNvbjsKIAogb3V0X2ZhaWw6CkBAIC0yMzk3LDYgKzI0NzUsOCBAQAogCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyB8PSBDSUZTX01PVU5UX09WRVJSX0dJRDsKIAlpZiAocHZvbHVtZV9pbmZvLT5keW5wZXJtKQogCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyB8PSBDSUZTX01PVU5UX0RZTlBFUk07CisJaWYgKHB2b2x1bWVfaW5mby0+ZnNjKQorCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyB8PSBDSUZTX01PVU5UX0ZTQ0FDSEU7CiAJaWYgKHB2b2x1bWVfaW5mby0+ZGlyZWN0X2lvKSB7CiAJCWNGWUkoMSwgIm1vdW50aW5nIHNoYXJlIHVzaW5nIGRpcmVjdCBpL28iKTsKIAkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgfD0gQ0lGU19NT1VOVF9ESVJFQ1RfSU87CmRpZmYgLS1naXQgYS9mcy9jaWZzL2Rpci5jIGIvZnMvY2lmcy9kaXIuYwppbmRleCBlN2FlNzhiLi5hN2RlNWU5IDEwMDY0NAotLS0gYS9mcy9jaWZzL2Rpci5jCisrKyBiL2ZzL2NpZnMvZGlyLmMKQEAgLTEzMCwxMiArMTMwLDYgQEAKIAlyZXR1cm4gZnVsbF9wYXRoOwogfQogCi0vKgotICogV2hlbiBjYWxsZWQgd2l0aCBzdHJ1Y3QgZmlsZSBwb2ludGVyIHNldCB0byBOVUxMLCB0aGVyZSBpcyBubyB3YXkgd2UgY291bGQKLSAqIHVwZGF0ZSBmaWxlLT5wcml2YXRlX2RhdGEsIGJ1dCBnZXR0aW5nIGl0IHN0dWNrIG9uIG9wZW5GaWxlTGlzdCBwcm92aWRlcyBhCi0gKiB3YXkgdG8gYWNjZXNzIGl0IGZyb20gY2lmc19maWxsX2ZpbGVkYXRhIGFuZCB0aGVyZWJ5IHNldCBmaWxlLT5wcml2YXRlX2RhdGEKLSAqIGZyb20gY2lmc19vcGVuLgotICovCiBzdHJ1Y3QgY2lmc0ZpbGVJbmZvICoKIGNpZnNfbmV3X2ZpbGVpbmZvKHN0cnVjdCBpbm9kZSAqbmV3aW5vZGUsIF9fdTE2IGZpbGVIYW5kbGUsCiAJCSAgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2ZnNtb3VudCAqbW50LCB1bnNpZ25lZCBpbnQgb2ZsYWdzKQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9kbnNfcmVzb2x2ZS5jIGIvZnMvY2lmcy9kbnNfcmVzb2x2ZS5jCmluZGV4IDRkYjJjNWUuLjNhZDdmNDMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZG5zX3Jlc29sdmUuYworKysgYi9mcy9jaWZzL2Ruc19yZXNvbHZlLmMKQEAgLTI0LDEyICsyNCwxNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgva2V5Y3RsLmg+CisjaW5jbHVkZSA8bGludXgva2V5LXR5cGUuaD4KICNpbmNsdWRlIDxrZXlzL3VzZXItdHlwZS5oPgogI2luY2x1ZGUgImRuc19yZXNvbHZlLmgiCiAjaW5jbHVkZSAiY2lmc2dsb2IuaCIKICNpbmNsdWRlICJjaWZzcHJvdG8uaCIKICNpbmNsdWRlICJjaWZzX2RlYnVnLmgiCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3JlZCAqZG5zX3Jlc29sdmVyX2NhY2hlOworCiAvKiBDaGVja3MgaWYgc3VwcGxpZWQgbmFtZSBpcyBJUCBhZGRyZXNzCiAgKiByZXR1cm5zOgogICogCQkxIC0gbmFtZSBpcyBJUApAQCAtNDAsNyArNDQsNyBAQAogewogCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzOwogCi0JcmV0dXJuIGNpZnNfY29udmVydF9hZGRyZXNzKG5hbWUsICZzcyk7CisJcmV0dXJuIGNpZnNfY29udmVydF9hZGRyZXNzKChzdHJ1Y3Qgc29ja2FkZHIgKikmc3MsIG5hbWUpOwogfQogCiBzdGF0aWMgaW50CkBAIC05NCw2ICs5OCw3IEBACiBpbnQKIGRuc19yZXNvbHZlX3NlcnZlcl9uYW1lX3RvX2lwKGNvbnN0IGNoYXIgKnVuYywgY2hhciAqKmlwX2FkZHIpCiB7CisJY29uc3Qgc3RydWN0IGNyZWQgKnNhdmVkX2NyZWQ7CiAJaW50IHJjID0gLUVBR0FJTjsKIAlzdHJ1Y3Qga2V5ICpya2V5ID0gRVJSX1BUUigtRUFHQUlOKTsKIAljaGFyICpuYW1lOwpAQCAtMTMzLDggKzEzOCwxNSBAQAogCQlnb3RvIHNraXBfdXBjYWxsOwogCX0KIAorCXNhdmVkX2NyZWQgPSBvdmVycmlkZV9jcmVkcyhkbnNfcmVzb2x2ZXJfY2FjaGUpOwogCXJrZXkgPSByZXF1ZXN0X2tleSgma2V5X3R5cGVfZG5zX3Jlc29sdmVyLCBuYW1lLCAiIik7CisJcmV2ZXJ0X2NyZWRzKHNhdmVkX2NyZWQpOwogCWlmICghSVNfRVJSKHJrZXkpKSB7CisJCWlmICghKHJrZXktPnBlcm0gJiBLRVlfVVNSX1ZJRVcpKSB7CisJCQlkb3duX3JlYWQoJnJrZXktPnNlbSk7CisJCQlya2V5LT5wZXJtIHw9IEtFWV9VU1JfVklFVzsKKwkJCXVwX3JlYWQoJnJrZXktPnNlbSk7CisJCX0KIAkJbGVuID0gcmtleS0+dHlwZV9kYXRhLnhbMF07CiAJCWRhdGEgPSBya2V5LT5wYXlsb2FkLmRhdGE7CiAJfSBlbHNlIHsKQEAgLTE2NSw0ICsxNzcsNjEgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK2ludCBfX2luaXQgY2lmc19pbml0X2Ruc19yZXNvbHZlcih2b2lkKQoreworCXN0cnVjdCBjcmVkICpjcmVkOworCXN0cnVjdCBrZXkgKmtleXJpbmc7CisJaW50IHJldDsKIAorCXByaW50ayhLRVJOX05PVElDRSAiUmVnaXN0ZXJpbmcgdGhlICVzIGtleSB0eXBlXG4iLAorCSAgICAgICBrZXlfdHlwZV9kbnNfcmVzb2x2ZXIubmFtZSk7CisKKwkvKiBjcmVhdGUgYW4gb3ZlcnJpZGUgY3JlZGVudGlhbCBzZXQgd2l0aCBhIHNwZWNpYWwgdGhyZWFkIGtleXJpbmcgaW4KKwkgKiB3aGljaCBETlMgcmVxdWVzdHMgYXJlIGNhY2hlZAorCSAqCisJICogdGhpcyBpcyB1c2VkIHRvIHByZXZlbnQgbWFsaWNpb3VzIHJlZGlyZWN0aW9ucyBmcm9tIGJlaW5nIGluc3RhbGxlZAorCSAqIHdpdGggYWRkX2tleSgpLgorCSAqLworCWNyZWQgPSBwcmVwYXJlX2tlcm5lbF9jcmVkKE5VTEwpOworCWlmICghY3JlZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlrZXlyaW5nID0ga2V5X2FsbG9jKCZrZXlfdHlwZV9rZXlyaW5nLCAiLmRuc19yZXNvbHZlciIsIDAsIDAsIGNyZWQsCisJCQkgICAgKEtFWV9QT1NfQUxMICYgfktFWV9QT1NfU0VUQVRUUikgfAorCQkJICAgIEtFWV9VU1JfVklFVyB8IEtFWV9VU1JfUkVBRCwKKwkJCSAgICBLRVlfQUxMT0NfTk9UX0lOX1FVT1RBKTsKKwlpZiAoSVNfRVJSKGtleXJpbmcpKSB7CisJCXJldCA9IFBUUl9FUlIoa2V5cmluZyk7CisJCWdvdG8gZmFpbGVkX3B1dF9jcmVkOworCX0KKworCXJldCA9IGtleV9pbnN0YW50aWF0ZV9hbmRfbGluayhrZXlyaW5nLCBOVUxMLCAwLCBOVUxMLCBOVUxMKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWRfcHV0X2tleTsKKworCXJldCA9IHJlZ2lzdGVyX2tleV90eXBlKCZrZXlfdHlwZV9kbnNfcmVzb2x2ZXIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZF9wdXRfa2V5OworCisJLyogaW5zdHJ1Y3QgcmVxdWVzdF9rZXkoKSB0byB1c2UgdGhpcyBzcGVjaWFsIGtleXJpbmcgYXMgYSBjYWNoZSBmb3IKKwkgKiB0aGUgcmVzdWx0cyBpdCBsb29rcyB1cCAqLworCWNyZWQtPnRocmVhZF9rZXlyaW5nID0ga2V5cmluZzsKKwljcmVkLT5qaXRfa2V5cmluZyA9IEtFWV9SRVFLRVlfREVGTF9USFJFQURfS0VZUklORzsKKwlkbnNfcmVzb2x2ZXJfY2FjaGUgPSBjcmVkOworCXJldHVybiAwOworCitmYWlsZWRfcHV0X2tleToKKwlrZXlfcHV0KGtleXJpbmcpOworZmFpbGVkX3B1dF9jcmVkOgorCXB1dF9jcmVkKGNyZWQpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgY2lmc19leGl0X2Ruc19yZXNvbHZlcih2b2lkKQoreworCWtleV9yZXZva2UoZG5zX3Jlc29sdmVyX2NhY2hlLT50aHJlYWRfa2V5cmluZyk7CisJdW5yZWdpc3Rlcl9rZXlfdHlwZSgma2V5X3R5cGVfZG5zX3Jlc29sdmVyKTsKKwlwdXRfY3JlZChkbnNfcmVzb2x2ZXJfY2FjaGUpOworCXByaW50ayhLRVJOX05PVElDRSAiVW5yZWdpc3RlcmVkICVzIGtleSB0eXBlXG4iLAorCSAgICAgICBrZXlfdHlwZV9kbnNfcmVzb2x2ZXIubmFtZSk7Cit9CmRpZmYgLS1naXQgYS9mcy9jaWZzL2Ruc19yZXNvbHZlLmggYi9mcy9jaWZzL2Ruc19yZXNvbHZlLmgKaW5kZXggOTY2ZTkyOC4uNWQ3ZjI5MSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9kbnNfcmVzb2x2ZS5oCisrKyBiL2ZzL2NpZnMvZG5zX3Jlc29sdmUuaApAQCAtMjQsOCArMjQsOCBAQAogI2RlZmluZSBfRE5TX1JFU09MVkVfSAogCiAjaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L2tleS10eXBlLmg+Ci1leHRlcm4gc3RydWN0IGtleV90eXBlIGtleV90eXBlX2Ruc19yZXNvbHZlcjsKK2V4dGVybiBpbnQgX19pbml0IGNpZnNfaW5pdF9kbnNfcmVzb2x2ZXIodm9pZCk7CitleHRlcm4gdm9pZCBjaWZzX2V4aXRfZG5zX3Jlc29sdmVyKHZvaWQpOwogZXh0ZXJuIGludCBkbnNfcmVzb2x2ZV9zZXJ2ZXJfbmFtZV90b19pcChjb25zdCBjaGFyICp1bmMsIGNoYXIgKippcF9hZGRyKTsKICNlbmRpZiAvKiBLRVJORUwgKi8KIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9maWxlLmMgYi9mcy9jaWZzL2ZpbGUuYwppbmRleCA0MDllNGY1Li5mYTA0YTAwZCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9maWxlLmMKKysrIGIvZnMvY2lmcy9maWxlLmMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJjaWZzX3VuaWNvZGUuaCIKICNpbmNsdWRlICJjaWZzX2RlYnVnLmgiCiAjaW5jbHVkZSAiY2lmc19mc19zYi5oIgorI2luY2x1ZGUgImZzY2FjaGUuaCIKIAogc3RhdGljIGlubGluZSBpbnQgY2lmc19jb252ZXJ0X2ZsYWdzKHVuc2lnbmVkIGludCBmbGFncykKIHsKQEAgLTI4Miw2ICsyODMsOSBAQAogCQkJCUNJRlNTTUJDbG9zZSh4aWQsIHRjb24sIG5ldGZpZCk7CiAJCQkJcmMgPSAtRU5PTUVNOwogCQkJfQorCisJCQljaWZzX2ZzY2FjaGVfc2V0X2lub2RlX2Nvb2tpZShpbm9kZSwgZmlsZSk7CisKIAkJCWdvdG8gb3V0OwogCQl9IGVsc2UgaWYgKChyYyA9PSAtRUlOVkFMKSB8fCAocmMgPT0gLUVPUE5PVFNVUFApKSB7CiAJCQlpZiAodGNvbi0+c2VzLT5zZXJ2ZXJOT1MpCkBAIC0zNzMsNiArMzc3LDggQEAKIAkJZ290byBvdXQ7CiAJfQogCisJY2lmc19mc2NhY2hlX3NldF9pbm9kZV9jb29raWUoaW5vZGUsIGZpbGUpOworCiAJaWYgKG9wbG9jayAmIENJRlNfQ1JFQVRFX0FDVElPTikgewogCQkvKiB0aW1lIHRvIHNldCBtb2RlIHdoaWNoIHdlIGNhbiBub3Qgc2V0IGVhcmxpZXIgZHVlIHRvCiAJCSAgIHByb2JsZW1zIGNyZWF0aW5nIG5ldyByZWFkLW9ubHkgZmlsZXMgKi8KQEAgLTQyNyw3ICs0MzMsNyBAQAogCV9fdTE2IG5ldGZpZDsKIAogCWlmIChmaWxlLT5wcml2YXRlX2RhdGEpCi0JCXBDaWZzRmlsZSA9IChzdHJ1Y3QgY2lmc0ZpbGVJbmZvICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCQlwQ2lmc0ZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJZWxzZQogCQlyZXR1cm4gLUVCQURGOwogCkBAIC01NjUsOCArNTcxLDcgQEAKIAlpbnQgeGlkLCB0aW1lb3V0OwogCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7CiAJc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb247Ci0Jc3RydWN0IGNpZnNGaWxlSW5mbyAqcFNNQkZpbGUgPQotCQkoc3RydWN0IGNpZnNGaWxlSW5mbyAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpwU01CRmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAogCXhpZCA9IEdldFhpZCgpOwogCkBAIC02NDEsOCArNjQ2LDcgQEAKIHsKIAlpbnQgcmMgPSAwOwogCWludCB4aWQ7Ci0Jc3RydWN0IGNpZnNGaWxlSW5mbyAqcENGaWxlU3RydWN0ID0KLQkgICAgKHN0cnVjdCBjaWZzRmlsZUluZm8gKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGNpZnNGaWxlSW5mbyAqcENGaWxlU3RydWN0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWNoYXIgKnB0bXA7CiAKIAljRllJKDEsICJDbG9zZWRpciBpbm9kZSA9IDB4JXAiLCBpbm9kZSk7CkBAIC04NjMsOCArODY3LDcgQEAKIAkJCQkgICAgICBsZW5ndGgsIHBmTG9jaywKIAkJCQkgICAgICBwb3NpeF9sb2NrX3R5cGUsIHdhaXRfZmxhZyk7CiAJfSBlbHNlIHsKLQkJc3RydWN0IGNpZnNGaWxlSW5mbyAqZmlkID0KLQkJCShzdHJ1Y3QgY2lmc0ZpbGVJbmZvICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCQlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpmaWQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKIAkJaWYgKG51bUxvY2spIHsKIAkJCXJjID0gQ0lGU1NNQkxvY2soeGlkLCB0Y29uLCBuZXRmaWQsIGxlbmd0aCwKQEAgLTk2NSw3ICs5NjgsNyBAQAogCiAJaWYgKGZpbGUtPnByaXZhdGVfZGF0YSA9PSBOVUxMKQogCQlyZXR1cm4gLUVCQURGOwotCW9wZW5fZmlsZSA9IChzdHJ1Y3QgY2lmc0ZpbGVJbmZvICopIGZpbGUtPnByaXZhdGVfZGF0YTsKKwlvcGVuX2ZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKIAlyYyA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGZpbGUsIHBvZmZzZXQsICZ3cml0ZV9zaXplLCAwKTsKIAlpZiAocmMpCkBAIC0xMDY3LDcgKzEwNzAsNyBAQAogCiAJaWYgKGZpbGUtPnByaXZhdGVfZGF0YSA9PSBOVUxMKQogCQlyZXR1cm4gLUVCQURGOwotCW9wZW5fZmlsZSA9IChzdHJ1Y3QgY2lmc0ZpbGVJbmZvICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCW9wZW5fZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAogCXhpZCA9IEdldFhpZCgpOwogCkBAIC0xNjUxLDggKzE2NTQsNyBAQAogCWludCB4aWQ7CiAJaW50IHJjID0gMDsKIAlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uOwotCXN0cnVjdCBjaWZzRmlsZUluZm8gKnNtYmZpbGUgPQotCQkoc3RydWN0IGNpZnNGaWxlSW5mbyAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpzbWJmaWxlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCiAJeGlkID0gR2V0WGlkKCk7CkBAIC0xNzU2LDcgKzE3NTgsNyBAQAogCQlGcmVlWGlkKHhpZCk7CiAJCXJldHVybiByYzsKIAl9Ci0Jb3Blbl9maWxlID0gKHN0cnVjdCBjaWZzRmlsZUluZm8gKilmaWxlLT5wcml2YXRlX2RhdGE7CisJb3Blbl9maWxlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSA9PSBPX1dST05MWSkKIAkJY0ZZSSgxLCAiYXR0ZW1wdGluZyByZWFkIG9uIHdyaXRlIG9ubHkgZmlsZSBpbnN0YW5jZSIpOwpAQCAtMTgzNyw3ICsxODM5LDcgQEAKIAkJRnJlZVhpZCh4aWQpOwogCQlyZXR1cm4gcmM7CiAJfQotCW9wZW5fZmlsZSA9IChzdHJ1Y3QgY2lmc0ZpbGVJbmZvICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCW9wZW5fZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAogCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgPT0gT19XUk9OTFkpCiAJCWNGWUkoMSwgImF0dGVtcHRpbmcgcmVhZCBvbiB3cml0ZSBvbmx5IGZpbGUgaW5zdGFuY2UiKTsKQEAgLTE5NDIsNiArMTk0NCw5IEBACiAJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCWRhdGEgKz0gUEFHRV9DQUNIRV9TSVpFOworCisJCS8qIGFkZCBwYWdlIHRvIEZTLUNhY2hlICovCisJCWNpZnNfcmVhZHBhZ2VfdG9fZnNjYWNoZShtYXBwaW5nLT5ob3N0LCBwYWdlKTsKIAl9CiAJcmV0dXJuOwogfQpAQCAtMTk2OCwxMCArMTk3MywxOSBAQAogCQlGcmVlWGlkKHhpZCk7CiAJCXJldHVybiByYzsKIAl9Ci0Jb3Blbl9maWxlID0gKHN0cnVjdCBjaWZzRmlsZUluZm8gKilmaWxlLT5wcml2YXRlX2RhdGE7CisJb3Blbl9maWxlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWNpZnNfc2IgPSBDSUZTX1NCKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfc2IpOwogCXBUY29uID0gY2lmc19zYi0+dGNvbjsKIAorCS8qCisJICogUmVhZHMgYXMgbWFueSBwYWdlcyBhcyBwb3NzaWJsZSBmcm9tIGZzY2FjaGUuIFJldHVybnMgLUVOT0JVRlMKKwkgKiBpbW1lZGlhdGVseSBpZiB0aGUgY29va2llIGlzIG5lZ2F0aXZlCisJICovCisJcmMgPSBjaWZzX3JlYWRwYWdlc19mcm9tX2ZzY2FjaGUobWFwcGluZy0+aG9zdCwgbWFwcGluZywgcGFnZV9saXN0LAorCQkJCQkgJm51bV9wYWdlcyk7CisJaWYgKHJjID09IDApCisJCWdvdG8gcmVhZF9jb21wbGV0ZTsKKwogCWNGWUkoREJHMiwgInJwYWdlczogbnVtIHBhZ2VzICVkIiwgbnVtX3BhZ2VzKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyApIHsKIAkJdW5zaWduZWQgY29udGlnX3BhZ2VzOwpAQCAtMjA4Miw2ICsyMDk2LDcgQEAKIAkJc21iX3JlYWRfZGF0YSA9IE5VTEw7CiAJfQogCityZWFkX2NvbXBsZXRlOgogCUZyZWVYaWQoeGlkKTsKIAlyZXR1cm4gcmM7CiB9CkBAIC0yMDkyLDYgKzIxMDcsMTEgQEAKIAljaGFyICpyZWFkX2RhdGE7CiAJaW50IHJjOwogCisJLyogSXMgdGhlIHBhZ2UgY2FjaGVkPyAqLworCXJjID0gY2lmc19yZWFkcGFnZV9mcm9tX2ZzY2FjaGUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgcGFnZSk7CisJaWYgKHJjID09IDApCisJCWdvdG8gcmVhZF9jb21wbGV0ZTsKKwogCXBhZ2VfY2FjaGVfZ2V0KHBhZ2UpOwogCXJlYWRfZGF0YSA9IGttYXAocGFnZSk7CiAJLyogZm9yIHJlYWRzIG92ZXIgYSBjZXJ0YWluIHNpemUgY291bGQgaW5pdGlhdGUgYXN5bmMgcmVhZCBhaGVhZCAqLwpAQCAtMjExMSwxMSArMjEzMSwxNyBAQAogCiAJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CiAJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworCisJLyogc2VuZCB0aGlzIHBhZ2UgdG8gdGhlIGNhY2hlICovCisJY2lmc19yZWFkcGFnZV90b19mc2NhY2hlKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIHBhZ2UpOworCiAJcmMgPSAwOwogCiBpb19lcnJvcjoKIAlrdW5tYXAocGFnZSk7CiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCityZWFkX2NvbXBsZXRlOgogCXJldHVybiByYzsKIH0KIApAQCAtMjI2NSw2ICsyMjkxLDIyIEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW50IGNpZnNfcmVsZWFzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnApCit7CisJaWYgKFBhZ2VQcml2YXRlKHBhZ2UpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBjaWZzX2ZzY2FjaGVfcmVsZWFzZV9wYWdlKHBhZ2UsIGdmcCk7Cit9CisKK3N0YXRpYyB2b2lkIGNpZnNfaW52YWxpZGF0ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqY2lmc2kgPSBDSUZTX0kocGFnZS0+bWFwcGluZy0+aG9zdCk7CisKKwlpZiAob2Zmc2V0ID09IDApCisJCWNpZnNfZnNjYWNoZV9pbnZhbGlkYXRlX3BhZ2UocGFnZSwgJmNpZnNpLT52ZnNfaW5vZGUpOworfQorCiBzdGF0aWMgdm9pZAogY2lmc19vcGxvY2tfYnJlYWsoc3RydWN0IHNsb3dfd29yayAqd29yaykKIHsKQEAgLTIzMzgsNiArMjM4MCw4IEBACiAJLndyaXRlX2JlZ2luID0gY2lmc193cml0ZV9iZWdpbiwKIAkud3JpdGVfZW5kID0gY2lmc193cml0ZV9lbmQsCiAJLnNldF9wYWdlX2RpcnR5ID0gX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMsCisJLnJlbGVhc2VwYWdlID0gY2lmc19yZWxlYXNlX3BhZ2UsCisJLmludmFsaWRhdGVwYWdlID0gY2lmc19pbnZhbGlkYXRlX3BhZ2UsCiAJLyogLnN5bmNfcGFnZSA9IGNpZnNfc3luY19wYWdlLCAqLwogCS8qIC5kaXJlY3RfSU8gPSAqLwogfTsKQEAgLTIzNTQsNiArMjM5OCw4IEBACiAJLndyaXRlX2JlZ2luID0gY2lmc193cml0ZV9iZWdpbiwKIAkud3JpdGVfZW5kID0gY2lmc193cml0ZV9lbmQsCiAJLnNldF9wYWdlX2RpcnR5ID0gX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMsCisJLnJlbGVhc2VwYWdlID0gY2lmc19yZWxlYXNlX3BhZ2UsCisJLmludmFsaWRhdGVwYWdlID0gY2lmc19pbnZhbGlkYXRlX3BhZ2UsCiAJLyogLnN5bmNfcGFnZSA9IGNpZnNfc3luY19wYWdlLCAqLwogCS8qIC5kaXJlY3RfSU8gPSAqLwogfTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvZnNjYWNoZS5jIGIvZnMvY2lmcy9mc2NhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYzZjVjNAotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2NpZnMvZnNjYWNoZS5jCkBAIC0wLDAgKzEsMjM2IEBACisvKgorICogICBmcy9jaWZzL2ZzY2FjaGUuYyAtIENJRlMgZmlsZXN5c3RlbSBjYWNoZSBpbnRlcmZhY2UKKyAqCisgKiAgIENvcHlyaWdodCAoYykgMjAxMCBOb3ZlbGwsIEluYy4KKyAqICAgQXV0aG9yKHMpOiBTdXJlc2ggSmF5YXJhbWFuIChzamF5YXJhbWFuQHN1c2UuZGU+CisgKgorICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAqICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZQorICogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2luY2x1ZGUgImZzY2FjaGUuaCIKKyNpbmNsdWRlICJjaWZzZ2xvYi5oIgorI2luY2x1ZGUgImNpZnNfZGVidWcuaCIKKyNpbmNsdWRlICJjaWZzX2ZzX3NiLmgiCisKK3ZvaWQgY2lmc19mc2NhY2hlX2dldF9jbGllbnRfY29va2llKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcikKK3sKKwlzZXJ2ZXItPmZzY2FjaGUgPQorCQlmc2NhY2hlX2FjcXVpcmVfY29va2llKGNpZnNfZnNjYWNoZV9uZXRmcy5wcmltYXJ5X2luZGV4LAorCQkJCSZjaWZzX2ZzY2FjaGVfc2VydmVyX2luZGV4X2RlZiwgc2VydmVyKTsKKwljRllJKDEsICJDSUZTOiBnZXQgY2xpZW50IGNvb2tpZSAoMHglcC8weCVwKSIsIHNlcnZlciwKKwkJCQlzZXJ2ZXItPmZzY2FjaGUpOworfQorCit2b2lkIGNpZnNfZnNjYWNoZV9yZWxlYXNlX2NsaWVudF9jb29raWUoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyKQoreworCWNGWUkoMSwgIkNJRlM6IHJlbGVhc2UgY2xpZW50IGNvb2tpZSAoMHglcC8weCVwKSIsIHNlcnZlciwKKwkJCQlzZXJ2ZXItPmZzY2FjaGUpOworCWZzY2FjaGVfcmVsaW5xdWlzaF9jb29raWUoc2VydmVyLT5mc2NhY2hlLCAwKTsKKwlzZXJ2ZXItPmZzY2FjaGUgPSBOVUxMOworfQorCit2b2lkIGNpZnNfZnNjYWNoZV9nZXRfc3VwZXJfY29va2llKHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24pCit7CisJc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyID0gdGNvbi0+c2VzLT5zZXJ2ZXI7CisKKwl0Y29uLT5mc2NhY2hlID0KKwkJZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZShzZXJ2ZXItPmZzY2FjaGUsCisJCQkJJmNpZnNfZnNjYWNoZV9zdXBlcl9pbmRleF9kZWYsIHRjb24pOworCWNGWUkoMSwgIkNJRlM6IGdldCBzdXBlcmJsb2NrIGNvb2tpZSAoMHglcC8weCVwKSIsCisJCQkJc2VydmVyLT5mc2NhY2hlLCB0Y29uLT5mc2NhY2hlKTsKK30KKwordm9pZCBjaWZzX2ZzY2FjaGVfcmVsZWFzZV9zdXBlcl9jb29raWUoc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbikKK3sKKwljRllJKDEsICJDSUZTOiByZWxlYXNpbmcgc3VwZXJibG9jayBjb29raWUgKDB4JXApIiwgdGNvbi0+ZnNjYWNoZSk7CisJZnNjYWNoZV9yZWxpbnF1aXNoX2Nvb2tpZSh0Y29uLT5mc2NhY2hlLCAwKTsKKwl0Y29uLT5mc2NhY2hlID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgY2lmc19mc2NhY2hlX2VuYWJsZV9pbm9kZV9jb29raWUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqY2lmc2kgPSBDSUZTX0koaW5vZGUpOworCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLT5pX3NiKTsKKworCWlmIChjaWZzaS0+ZnNjYWNoZSkKKwkJcmV0dXJuOworCisJY2lmc2ktPmZzY2FjaGUgPSBmc2NhY2hlX2FjcXVpcmVfY29va2llKGNpZnNfc2ItPnRjb24tPmZzY2FjaGUsCisJCQkJJmNpZnNfZnNjYWNoZV9pbm9kZV9vYmplY3RfZGVmLAorCQkJCWNpZnNpKTsKKwljRllJKDEsICJDSUZTOiBnb3QgRkggY29va2llICgweCVwLzB4JXApIiwKKwkJCWNpZnNfc2ItPnRjb24tPmZzY2FjaGUsIGNpZnNpLT5mc2NhY2hlKTsKK30KKwordm9pZCBjaWZzX2ZzY2FjaGVfcmVsZWFzZV9pbm9kZV9jb29raWUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqY2lmc2kgPSBDSUZTX0koaW5vZGUpOworCisJaWYgKGNpZnNpLT5mc2NhY2hlKSB7CisJCWNGWUkoMSwgIkNJRlMgcmVsZWFzaW5nIGlub2RlIGNvb2tpZSAoMHglcCkiLAorCQkJCWNpZnNpLT5mc2NhY2hlKTsKKwkJZnNjYWNoZV9yZWxpbnF1aXNoX2Nvb2tpZShjaWZzaS0+ZnNjYWNoZSwgMCk7CisJCWNpZnNpLT5mc2NhY2hlID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNpZnNfZnNjYWNoZV9kaXNhYmxlX2lub2RlX2Nvb2tpZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBjaWZzSW5vZGVJbmZvICpjaWZzaSA9IENJRlNfSShpbm9kZSk7CisKKwlpZiAoY2lmc2ktPmZzY2FjaGUpIHsKKwkJY0ZZSSgxLCAiQ0lGUyBkaXNhYmxpbmcgaW5vZGUgY29va2llICgweCVwKSIsCisJCQkJY2lmc2ktPmZzY2FjaGUpOworCQlmc2NhY2hlX3JlbGlucXVpc2hfY29va2llKGNpZnNpLT5mc2NhY2hlLCAxKTsKKwkJY2lmc2ktPmZzY2FjaGUgPSBOVUxMOworCX0KK30KKwordm9pZCBjaWZzX2ZzY2FjaGVfc2V0X2lub2RlX2Nvb2tpZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX0FDQ01PREUpICE9IE9fUkRPTkxZKQorCQljaWZzX2ZzY2FjaGVfZGlzYWJsZV9pbm9kZV9jb29raWUoaW5vZGUpOworCWVsc2UgeworCQljaWZzX2ZzY2FjaGVfZW5hYmxlX2lub2RlX2Nvb2tpZShpbm9kZSk7CisJCWNGWUkoMSwgIkNJRlM6IGZzY2FjaGUgaW5vZGUgY29va2llIHNldCIpOworCX0KK30KKwordm9pZCBjaWZzX2ZzY2FjaGVfcmVzZXRfaW5vZGVfY29va2llKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGNpZnNJbm9kZUluZm8gKmNpZnNpID0gQ0lGU19JKGlub2RlKTsKKwlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihpbm9kZS0+aV9zYik7CisJc3RydWN0IGZzY2FjaGVfY29va2llICpvbGQgPSBjaWZzaS0+ZnNjYWNoZTsKKworCWlmIChjaWZzaS0+ZnNjYWNoZSkgeworCQkvKiByZXRpcmUgdGhlIGN1cnJlbnQgZnNjYWNoZSBjYWNoZSBhbmQgZ2V0IGEgbmV3IG9uZSAqLworCQlmc2NhY2hlX3JlbGlucXVpc2hfY29va2llKGNpZnNpLT5mc2NhY2hlLCAxKTsKKworCQljaWZzaS0+ZnNjYWNoZSA9IGZzY2FjaGVfYWNxdWlyZV9jb29raWUoY2lmc19zYi0+dGNvbi0+ZnNjYWNoZSwKKwkJCQkJJmNpZnNfZnNjYWNoZV9pbm9kZV9vYmplY3RfZGVmLAorCQkJCQljaWZzaSk7CisJCWNGWUkoMSwgIkNJRlM6IG5ldyBjb29raWUgMHglcCBvbGRjb29raWUgMHglcCIsCisJCQkJY2lmc2ktPmZzY2FjaGUsIG9sZCk7CisJfQorfQorCitpbnQgY2lmc19mc2NhY2hlX3JlbGVhc2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwKQoreworCWlmIChQYWdlRnNDYWNoZShwYWdlKSkgeworCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKKwkJc3RydWN0IGNpZnNJbm9kZUluZm8gKmNpZnNpID0gQ0lGU19JKGlub2RlKTsKKworCQljRllJKDEsICJDSUZTOiBmc2NhY2hlIHJlbGVhc2UgcGFnZSAoMHglcC8weCVwKSIsCisJCQkJcGFnZSwgY2lmc2ktPmZzY2FjaGUpOworCQlpZiAoIWZzY2FjaGVfbWF5YmVfcmVsZWFzZV9wYWdlKGNpZnNpLT5mc2NhY2hlLCBwYWdlLCBnZnApKQorCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGNpZnNfcmVhZHBhZ2VfZnJvbV9mc2NhY2hlX2NvbXBsZXRlKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpjdHgsCisJCQkJCQlpbnQgZXJyb3IpCit7CisJY0ZZSSgxLCAiQ0ZTOiByZWFkcGFnZV9mcm9tX2ZzY2FjaGVfY29tcGxldGUgKDB4JXAvJWQpIiwKKwkJCXBhZ2UsIGVycm9yKTsKKwlpZiAoIWVycm9yKQorCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisJdW5sb2NrX3BhZ2UocGFnZSk7Cit9CisKKy8qCisgKiBSZXRyaWV2ZSBhIHBhZ2UgZnJvbSBGUy1DYWNoZQorICovCitpbnQgX19jaWZzX3JlYWRwYWdlX2Zyb21fZnNjYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpbnQgcmV0OworCisJY0ZZSSgxLCAiQ0lGUzogcmVhZHBhZ2VfZnJvbV9mc2NhY2hlKGZzYzolcCwgcDolcCwgaToweCVwIiwKKwkJCUNJRlNfSShpbm9kZSktPmZzY2FjaGUsIHBhZ2UsIGlub2RlKTsKKwlyZXQgPSBmc2NhY2hlX3JlYWRfb3JfYWxsb2NfcGFnZShDSUZTX0koaW5vZGUpLT5mc2NhY2hlLCBwYWdlLAorCQkJCQkgY2lmc19yZWFkcGFnZV9mcm9tX2ZzY2FjaGVfY29tcGxldGUsCisJCQkJCSBOVUxMLAorCQkJCQkgR0ZQX0tFUk5FTCk7CisJc3dpdGNoIChyZXQpIHsKKworCWNhc2UgMDogLyogcGFnZSBmb3VuZCBpbiBmc2NhY2hlLCByZWFkIHN1Ym1pdHRlZCAqLworCQljRllJKDEsICJDSUZTOiByZWFkcGFnZV9mcm9tX2ZzY2FjaGU6IHN1Ym1pdHRlZCIpOworCQlyZXR1cm4gcmV0OworCWNhc2UgLUVOT0JVRlM6CS8qIHBhZ2Ugd29uJ3QgYmUgY2FjaGVkICovCisJY2FzZSAtRU5PREFUQToJLyogcGFnZSBub3QgaW4gY2FjaGUgKi8KKwkJY0ZZSSgxLCAiQ0lGUzogcmVhZHBhZ2VfZnJvbV9mc2NhY2hlICVkIiwgcmV0KTsKKwkJcmV0dXJuIDE7CisKKwlkZWZhdWx0OgorCQljRVJST1IoMSwgInVua25vd24gZXJyb3IgcmV0ID0gJWQiLCByZXQpOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUmV0cmlldmUgYSBzZXQgb2YgcGFnZXMgZnJvbSBGUy1DYWNoZQorICovCitpbnQgX19jaWZzX3JlYWRwYWdlc19mcm9tX2ZzY2FjaGUoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlcywKKwkJCQl1bnNpZ25lZCAqbnJfcGFnZXMpCit7CisJaW50IHJldDsKKworCWNGWUkoMSwgIkNJRlM6IF9fY2lmc19yZWFkcGFnZXNfZnJvbV9mc2NhY2hlICgweCVwLyV1LzB4JXApIiwKKwkJCUNJRlNfSShpbm9kZSktPmZzY2FjaGUsICpucl9wYWdlcywgaW5vZGUpOworCXJldCA9IGZzY2FjaGVfcmVhZF9vcl9hbGxvY19wYWdlcyhDSUZTX0koaW5vZGUpLT5mc2NhY2hlLCBtYXBwaW5nLAorCQkJCQkgIHBhZ2VzLCBucl9wYWdlcywKKwkJCQkJICBjaWZzX3JlYWRwYWdlX2Zyb21fZnNjYWNoZV9jb21wbGV0ZSwKKwkJCQkJICBOVUxMLAorCQkJCQkgIG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOworCXN3aXRjaCAocmV0KSB7CisJY2FzZSAwOgkvKiByZWFkIHN1Ym1pdHRlZCB0byB0aGUgY2FjaGUgZm9yIGFsbCBwYWdlcyAqLworCQljRllJKDEsICJDSUZTOiByZWFkcGFnZXNfZnJvbV9mc2NhY2hlOiBzdWJtaXR0ZWQiKTsKKwkJcmV0dXJuIHJldDsKKworCWNhc2UgLUVOT0JVRlM6CS8qIHNvbWUgcGFnZXMgYXJlIG5vdCBjYWNoZWQgYW5kIGNhbid0IGJlICovCisJY2FzZSAtRU5PREFUQToJLyogc29tZSBwYWdlcyBhcmUgbm90IGNhY2hlZCAqLworCQljRllJKDEsICJDSUZTOiByZWFkcGFnZXNfZnJvbV9mc2NhY2hlOiBubyBwYWdlIik7CisJCXJldHVybiAxOworCisJZGVmYXVsdDoKKwkJY0ZZSSgxLCAidW5rbm93biBlcnJvciByZXQgPSAlZCIsIHJldCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBfX2NpZnNfcmVhZHBhZ2VfdG9fZnNjYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpbnQgcmV0OworCisJY0ZZSSgxLCAiQ0lGUzogcmVhZHBhZ2VfdG9fZnNjYWNoZShmc2M6ICVwLCBwOiAlcCwgaTogJXAiLAorCQkJQ0lGU19JKGlub2RlKS0+ZnNjYWNoZSwgcGFnZSwgaW5vZGUpOworCXJldCA9IGZzY2FjaGVfd3JpdGVfcGFnZShDSUZTX0koaW5vZGUpLT5mc2NhY2hlLCBwYWdlLCBHRlBfS0VSTkVMKTsKKwlpZiAocmV0ICE9IDApCisJCWZzY2FjaGVfdW5jYWNoZV9wYWdlKENJRlNfSShpbm9kZSktPmZzY2FjaGUsIHBhZ2UpOworfQorCit2b2lkIF9fY2lmc19mc2NhY2hlX2ludmFsaWRhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqY2lmc2kgPSBDSUZTX0koaW5vZGUpOworCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llID0gY2lmc2ktPmZzY2FjaGU7CisKKwljRllJKDEsICJDSUZTOiBmc2NhY2hlIGludmFsaWRhdGVwYWdlICgweCVwLzB4JXApIiwgcGFnZSwgY29va2llKTsKKwlmc2NhY2hlX3dhaXRfb25fcGFnZV93cml0ZShjb29raWUsIHBhZ2UpOworCWZzY2FjaGVfdW5jYWNoZV9wYWdlKGNvb2tpZSwgcGFnZSk7Cit9CisKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvZnNjYWNoZS5oIGIvZnMvY2lmcy9mc2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFiODhlYzIKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9jaWZzL2ZzY2FjaGUuaApAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqICAgZnMvY2lmcy9mc2NhY2hlLmggLSBDSUZTIGZpbGVzeXN0ZW0gY2FjaGUgaW50ZXJmYWNlIGRlZmluaXRpb25zCisgKgorICogICBDb3B5cmlnaHQgKGMpIDIwMTAgTm92ZWxsLCBJbmMuCisgKiAgIEF1dGhvcnMocyk6IFN1cmVzaCBKYXlhcmFtYW4gKHNqYXlhcmFtYW5Ac3VzZS5kZT4KKyAqCisgKiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICogICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlCisgKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaWZuZGVmIF9DSUZTX0ZTQ0FDSEVfSAorI2RlZmluZSBfQ0lGU19GU0NBQ0hFX0gKKworI2luY2x1ZGUgPGxpbnV4L2ZzY2FjaGUuaD4KKworI2luY2x1ZGUgImNpZnNnbG9iLmgiCisKKyNpZmRlZiBDT05GSUdfQ0lGU19GU0NBQ0hFCisKK2V4dGVybiBzdHJ1Y3QgZnNjYWNoZV9uZXRmcyBjaWZzX2ZzY2FjaGVfbmV0ZnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiBjaWZzX2ZzY2FjaGVfc2VydmVyX2luZGV4X2RlZjsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmIGNpZnNfZnNjYWNoZV9zdXBlcl9pbmRleF9kZWY7CitleHRlcm4gY29uc3Qgc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiBjaWZzX2ZzY2FjaGVfaW5vZGVfb2JqZWN0X2RlZjsKKworZXh0ZXJuIGludCBjaWZzX2ZzY2FjaGVfcmVnaXN0ZXIodm9pZCk7CitleHRlcm4gdm9pZCBjaWZzX2ZzY2FjaGVfdW5yZWdpc3Rlcih2b2lkKTsKKworLyoKKyAqIGZzY2FjaGUuYworICovCitleHRlcm4gdm9pZCBjaWZzX2ZzY2FjaGVfZ2V0X2NsaWVudF9jb29raWUoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqKTsKK2V4dGVybiB2b2lkIGNpZnNfZnNjYWNoZV9yZWxlYXNlX2NsaWVudF9jb29raWUoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqKTsKK2V4dGVybiB2b2lkIGNpZnNfZnNjYWNoZV9nZXRfc3VwZXJfY29va2llKHN0cnVjdCBjaWZzVGNvbkluZm8gKik7CitleHRlcm4gdm9pZCBjaWZzX2ZzY2FjaGVfcmVsZWFzZV9zdXBlcl9jb29raWUoc3RydWN0IGNpZnNUY29uSW5mbyAqKTsKKworZXh0ZXJuIHZvaWQgY2lmc19mc2NhY2hlX3JlbGVhc2VfaW5vZGVfY29va2llKHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiB2b2lkIGNpZnNfZnNjYWNoZV9zZXRfaW5vZGVfY29va2llKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKK2V4dGVybiB2b2lkIGNpZnNfZnNjYWNoZV9yZXNldF9pbm9kZV9jb29raWUoc3RydWN0IGlub2RlICopOworCitleHRlcm4gdm9pZCBfX2NpZnNfZnNjYWNoZV9pbnZhbGlkYXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKiwgc3RydWN0IGlub2RlICopOworZXh0ZXJuIGludCBjaWZzX2ZzY2FjaGVfcmVsZWFzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnApOworZXh0ZXJuIGludCBfX2NpZnNfcmVhZHBhZ2VfZnJvbV9mc2NhY2hlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgcGFnZSAqKTsKK2V4dGVybiBpbnQgX19jaWZzX3JlYWRwYWdlc19mcm9tX2ZzY2FjaGUoc3RydWN0IGlub2RlICosCisJCQkJCSBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLAorCQkJCQkgc3RydWN0IGxpc3RfaGVhZCAqLAorCQkJCQkgdW5zaWduZWQgKik7CisKK2V4dGVybiB2b2lkIF9fY2lmc19yZWFkcGFnZV90b19mc2NhY2hlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgcGFnZSAqKTsKKworc3RhdGljIGlubGluZSB2b2lkIGNpZnNfZnNjYWNoZV9pbnZhbGlkYXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWlmIChQYWdlRnNDYWNoZShwYWdlKSkKKwkJX19jaWZzX2ZzY2FjaGVfaW52YWxpZGF0ZV9wYWdlKHBhZ2UsIGlub2RlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY2lmc19yZWFkcGFnZV9mcm9tX2ZzY2FjaGUoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpZiAoQ0lGU19JKGlub2RlKS0+ZnNjYWNoZSkKKwkJcmV0dXJuIF9fY2lmc19yZWFkcGFnZV9mcm9tX2ZzY2FjaGUoaW5vZGUsIHBhZ2UpOworCisJcmV0dXJuIC1FTk9CVUZTOworfQorCitzdGF0aWMgaW5saW5lIGludCBjaWZzX3JlYWRwYWdlc19mcm9tX2ZzY2FjaGUoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLAorCQkJCQkgICAgICB1bnNpZ25lZCAqbnJfcGFnZXMpCit7CisJaWYgKENJRlNfSShpbm9kZSktPmZzY2FjaGUpCisJCXJldHVybiBfX2NpZnNfcmVhZHBhZ2VzX2Zyb21fZnNjYWNoZShpbm9kZSwgbWFwcGluZywgcGFnZXMsCisJCQkJCQkgICAgIG5yX3BhZ2VzKTsKKwlyZXR1cm4gLUVOT0JVRlM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaWZzX3JlYWRwYWdlX3RvX2ZzY2FjaGUoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgIHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmIChQYWdlRnNDYWNoZShwYWdlKSkKKwkJX19jaWZzX3JlYWRwYWdlX3RvX2ZzY2FjaGUoaW5vZGUsIHBhZ2UpOworfQorCisjZWxzZSAvKiBDT05GSUdfQ0lGU19GU0NBQ0hFICovCitzdGF0aWMgaW5saW5lIGludCBjaWZzX2ZzY2FjaGVfcmVnaXN0ZXIodm9pZCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIGNpZnNfZnNjYWNoZV91bnJlZ2lzdGVyKHZvaWQpIHt9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorY2lmc19mc2NhY2hlX2dldF9jbGllbnRfY29va2llKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcikge30KK3N0YXRpYyBpbmxpbmUgdm9pZAorY2lmc19mc2NhY2hlX3JlbGVhc2VfY2xpZW50X2Nvb2tpZShzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgY2lmc19mc2NhY2hlX2dldF9zdXBlcl9jb29raWUoc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbikge30KK3N0YXRpYyBpbmxpbmUgdm9pZAorY2lmc19mc2NhY2hlX3JlbGVhc2Vfc3VwZXJfY29va2llKHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24pIHt9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaWZzX2ZzY2FjaGVfcmVsZWFzZV9pbm9kZV9jb29raWUoc3RydWN0IGlub2RlICppbm9kZSkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaWZzX2ZzY2FjaGVfc2V0X2lub2RlX2Nvb2tpZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkJIHN0cnVjdCBmaWxlICpmaWxwKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGNpZnNfZnNjYWNoZV9yZXNldF9pbm9kZV9jb29raWUoc3RydWN0IGlub2RlICppbm9kZSkge30KK3N0YXRpYyBpbmxpbmUgaW50IGNpZnNfZnNjYWNoZV9yZWxlYXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcCkKK3sKKwlyZXR1cm4gMTsgLyogTWF5IHJlbGVhc2UgcGFnZSAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2lmc19mc2NhY2hlX2ludmFsaWRhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCXN0cnVjdCBpbm9kZSAqaW5vZGUpIHt9CitzdGF0aWMgaW5saW5lIGludAorY2lmc19yZWFkcGFnZV9mcm9tX2ZzY2FjaGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcmV0dXJuIC1FTk9CVUZTOworfQorCitzdGF0aWMgaW5saW5lIGludCBjaWZzX3JlYWRwYWdlc19mcm9tX2ZzY2FjaGUoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLAorCQkJCQkgICAgICB1bnNpZ25lZCAqbnJfcGFnZXMpCit7CisJcmV0dXJuIC1FTk9CVUZTOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2lmc19yZWFkcGFnZV90b19mc2NhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSkge30KKworI2VuZGlmIC8qIENPTkZJR19DSUZTX0ZTQ0FDSEUgKi8KKworI2VuZGlmIC8qIF9DSUZTX0ZTQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9pbm9kZS5jIGIvZnMvY2lmcy9pbm9kZS5jCmluZGV4IDZmMDY4M2MuLmExNWIzYTkgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvaW5vZGUuYworKysgYi9mcy9jaWZzL2lub2RlLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJjaWZzcHJvdG8uaCIKICNpbmNsdWRlICJjaWZzX2RlYnVnLmgiCiAjaW5jbHVkZSAiY2lmc19mc19zYi5oIgorI2luY2x1ZGUgImZzY2FjaGUuaCIKIAogCiBzdGF0aWMgdm9pZCBjaWZzX3NldF9vcHMoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgYm9vbCBpc19kZnNfcmVmZXJyYWwpCkBAIC0yODgsNyArMjg5LDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihpbm9kZS0+aV9zYik7CiAJc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiA9IGNpZnNfc2ItPnRjb247Ci0Jc3RydWN0IGNpZnNGaWxlSW5mbyAqY2ZpbGUgPSAoc3RydWN0IGNpZnNGaWxlSW5mbyAqKSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGNpZnNGaWxlSW5mbyAqY2ZpbGUgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAKIAl4aWQgPSBHZXRYaWQoKTsKIAlyYyA9IENJRlNTTUJVbml4UUZpbGVJbmZvKHhpZCwgdGNvbiwgY2ZpbGUtPm5ldGZpZCwgJmZpbmRfZGF0YSk7CkBAIC01MTUsNyArNTE2LDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihpbm9kZS0+aV9zYik7CiAJc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiA9IGNpZnNfc2ItPnRjb247Ci0Jc3RydWN0IGNpZnNGaWxlSW5mbyAqY2ZpbGUgPSAoc3RydWN0IGNpZnNGaWxlSW5mbyAqKSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGNpZnNGaWxlSW5mbyAqY2ZpbGUgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAKIAl4aWQgPSBHZXRYaWQoKTsKIAlyYyA9IENJRlNTTUJRRmlsZUluZm8oeGlkLCB0Y29uLCBjZmlsZS0+bmV0ZmlkLCAmZmluZF9kYXRhKTsKQEAgLTcyMyw5ICs3MjQsMTQgQEAKIHsKIAlzdHJ1Y3QgY2lmc19mYXR0ciAqZmF0dHIgPSAoc3RydWN0IGNpZnNfZmF0dHIgKikgb3BhcXVlOwogCisJLyogZG9uJ3QgbWF0Y2ggaW5vZGUgd2l0aCBkaWZmZXJlbnQgdW5pcXVlaWQgKi8KIAlpZiAoQ0lGU19JKGlub2RlKS0+dW5pcXVlaWQgIT0gZmF0dHItPmNmX3VuaXF1ZWlkKQogCQlyZXR1cm4gMDsKIAorCS8qIGRvbid0IG1hdGNoIGlub2RlIG9mIGRpZmZlcmVudCB0eXBlICovCisJaWYgKChpbm9kZS0+aV9tb2RlICYgU19JRk1UKSAhPSAoZmF0dHItPmNmX21vZGUgJiBTX0lGTVQpKQorCQlyZXR1cm4gMDsKKwogCS8qCiAJICogdWggb2ggLS0gaXQncyBhIGRpcmVjdG9yeS4gV2UgY2FuJ3QgdXNlIGl0IHNpbmNlIGhhcmRsaW5rZWQgZGlycyBhcmUKIAkgKiB2ZXJib3Rlbi4gRGlzYWJsZSBzZXJ2ZXJpbm8gYW5kIHJldHVybiBpdCBhcyBpZiBpdCB3ZXJlIGZvdW5kLCB0aGUKQEAgLTc3Niw2ICs3ODIsMTAgQEAKIAkJCWlub2RlLT5pX2ZsYWdzIHw9IFNfTk9BVElNRSB8IFNfTk9DTVRJTUU7CiAJCWlmIChpbm9kZS0+aV9zdGF0ZSAmIElfTkVXKSB7CiAJCQlpbm9kZS0+aV9pbm8gPSBoYXNoOworI2lmZGVmIENPTkZJR19DSUZTX0ZTQ0FDSEUKKwkJCS8qIGluaXRpYWxpemUgcGVyLWlub2RlIGNhY2hlIGNvb2tpZSBwb2ludGVyICovCisJCQlDSUZTX0koaW5vZGUpLT5mc2NhY2hlID0gTlVMTDsKKyNlbmRpZgogCQkJdW5sb2NrX25ld19pbm9kZShpbm9kZSk7CiAJCX0KIAl9CkBAIC04MDcsNiArODE3LDExIEBACiAJaWYgKCFpbm9kZSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKKyNpZmRlZiBDT05GSUdfQ0lGU19GU0NBQ0hFCisJLyogcG9wdWxhdGUgdGNvbi0+cmVzb3VyY2VfaWQgKi8KKwljaWZzX3NiLT50Y29uLT5yZXNvdXJjZV9pZCA9IENJRlNfSShpbm9kZSktPnVuaXF1ZWlkOworI2VuZGlmCisKIAlpZiAocmMgJiYgY2lmc19zYi0+dGNvbi0+aXBjKSB7CiAJCWNGWUkoMSwgImlwYyBjb25uZWN0aW9uIC0gZmFrZSByZWFkIGlub2RlIik7CiAJCWlub2RlLT5pX21vZGUgfD0gU19JRkRJUjsKQEAgLTE1NjgsNiArMTU4Myw3IEBACiAJCQljaWZzX2ktPndyaXRlX2JlaGluZF9yYyA9IHJjOwogCX0KIAlpbnZhbGlkYXRlX3JlbW90ZV9pbm9kZShpbm9kZSk7CisJY2lmc19mc2NhY2hlX3Jlc2V0X2lub2RlX2Nvb2tpZShpbm9kZSk7CiB9CiAKIGludCBjaWZzX3JldmFsaWRhdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlscCkKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvaW9jdGwuYyBiL2ZzL2NpZnMvaW9jdGwuYwppbmRleCA1MDU5MjZmLi45ZDM4YTcxIDEwMDY0NAotLS0gYS9mcy9jaWZzL2lvY3RsLmMKKysrIGIvZnMvY2lmcy9pb2N0bC5jCkBAIC00MSw4ICs0MSw3IEBACiAJX191NjQJRXh0QXR0ck1hc2sgPSAwOwogCV9fdTY0ICAgY2FwczsKIAlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uOwotCXN0cnVjdCBjaWZzRmlsZUluZm8gKnBTTUJGaWxlID0KLQkJKHN0cnVjdCBjaWZzRmlsZUluZm8gKilmaWxlcC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjaWZzRmlsZUluZm8gKnBTTUJGaWxlID0gZmlsZXAtPnByaXZhdGVfZGF0YTsKICNlbmRpZiAvKiBDT05GSUdfQ0lGU19QT1NJWCAqLwogCiAJeGlkID0gR2V0WGlkKCk7CmRpZmYgLS1naXQgYS9mcy9jaWZzL25ldG1pc2MuYyBiL2ZzL2NpZnMvbmV0bWlzYy5jCmluZGV4IGQzNWQ1MjguLmM2NzIxZWUgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvbmV0bWlzYy5jCisrKyBiL2ZzL2NpZnMvbmV0bWlzYy5jCkBAIC02MSw2ICs2MSw3IEBACiAJe0VSUnJlbWNkLCAtRUFDQ0VTfSwKIAl7RVJSZGlmZmRldmljZSwgLUVYREVWfSwKIAl7RVJSbm9maWxlcywgLUVOT0VOVH0sCisJe0VSUndyaXRlcHJvdCwgLUVST0ZTfSwKIAl7RVJSYmFkc2hhcmUsIC1FVFhUQlNZfSwKIAl7RVJSbG9jaywgLUVBQ0NFU30sCiAJe0VSUnVuc3VwLCAtRUlOVkFMfSwKQEAgLTE2NCw3ICsxNjUsNyBAQAogICogUmV0dXJucyAwIG9uIGZhaWx1cmUuCiAgKi8KIGludAotY2lmc19jb252ZXJ0X2FkZHJlc3MoY2hhciAqc3JjLCB2b2lkICpkc3QpCitjaWZzX2NvbnZlcnRfYWRkcmVzcyhzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwgY2hhciAqc3JjKQogewogCWludCByYzsKIAljaGFyICpwY3QsICplbmRwOwpAQCAtMjAxLDYgKzIwMiwyNyBAQAogCXJldHVybiByYzsKIH0KIAoraW50CitjaWZzX2ZpbGxfc29ja2FkZHIoc3RydWN0IHNvY2thZGRyICpkc3QsIGNoYXIgKnNyYywKKwkJICAgY29uc3QgdW5zaWduZWQgc2hvcnQgaW50IHBvcnQpCit7CisJaWYgKCFjaWZzX2NvbnZlcnRfYWRkcmVzcyhkc3QsIHNyYykpCisJCXJldHVybiAwOworCisJc3dpdGNoIChkc3QtPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilkc3QpLT5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworCQlicmVhazsKKwljYXNlIEFGX0lORVQ2OgorCQkoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilkc3QpLT5zaW42X3BvcnQgPSBodG9ucyhwb3J0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogY29udmVydCBhIE5UIHN0YXR1cyBjb2RlIHRvIGEgZG9zIGNsYXNzL2NvZGUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvcmVhZGRpci5jIGIvZnMvY2lmcy9yZWFkZGlyLmMKaW5kZXggZGFmMTc1My4uZDVlNTkxZiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9yZWFkZGlyLmMKKysrIGIvZnMvY2lmcy9yZWFkZGlyLmMKQEAgLTg0Nyw2ICs4NDcsMTEgQEAKIAkJZW5kX29mX3NtYiA9IGNpZnNGaWxlLT5zcmNoX2luZi5udHdya19idWZfc3RhcnQgKyBtYXhfbGVuOwogCiAJCXRtcF9idWYgPSBrbWFsbG9jKFVOSUNPREVfTkFNRV9NQVgsIEdGUF9LRVJORUwpOworCQlpZiAodG1wX2J1ZiA9PSBOVUxMKSB7CisJCQlyYyA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfQorCiAJCWZvciAoaSA9IDA7IChpIDwgbnVtX3RvX2ZpbGwpICYmIChyYyA9PSAwKTsgaSsrKSB7CiAJCQlpZiAoY3VycmVudF9lbnRyeSA9PSBOVUxMKSB7CiAJCQkJLyogZXZhbHVhdGUgd2hldGhlciB0aGlzIGNhc2UgaXMgYW4gZXJyb3IgKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvc21iZXJyLmggYi9mcy9jaWZzL3NtYmVyci5oCmluZGV4IGM1MDg0ZDIuLjdmMTZjYjggMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvc21iZXJyLmgKKysrIGIvZnMvY2lmcy9zbWJlcnIuaApAQCAtNzYsNiArNzYsNyBAQAogI2RlZmluZSBFUlJub2ZpbGVzCQkxOAkvKiBBIEZpbGUgU2VhcmNoIGNvbW1hbmQgY2FuIGZpbmQgbm8KIAkJCQkJICAgbW9yZSBmaWxlcyBtYXRjaGluZyB0aGUgc3BlY2lmaWVkCiAJCQkJCSAgIGNyaXRlcmlhLiAqLworI2RlZmluZSBFUlJ3cml0ZXByb3QJCTE5CS8qIG1lZGlhIGlzIHdyaXRlIHByb3RlY3RlZCAqLwogI2RlZmluZSBFUlJnZW5lcmFsCQkzMQogI2RlZmluZSBFUlJiYWRzaGFyZQkJMzIJLyogVGhlIHNoYXJpbmcgbW9kZSBzcGVjaWZpZWQgZm9yIGFuCiAJCQkJCSAgIE9wZW4gY29uZmxpY3RzIHdpdGggZXhpc3RpbmcgRklEcyBvbgpkaWZmIC0tZ2l0IGEvZnMvY29tcGF0LmMgYi9mcy9jb21wYXQuYwppbmRleCA2NDkwZDIxLi5jNmZkYTlhIDEwMDY0NAotLS0gYS9mcy9jb21wYXQuYworKysgYi9mcy9jb21wYXQuYwpAQCAtOCw3ICs4LDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMCAgSmFrdWIgSmVsaW5layAgKGpha3ViQHJlZGhhdC5jb20pCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk4ICAgICAgIEVkZGllIEMuIERvc3QgIChlY2RAc2t5bmV0LmJlKQogICogIENvcHlyaWdodCAoQykgMjAwMSwyMDAyICBBbmRpIEtsZWVuLCBTdVNFIExhYnMgCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzICAgICAgIFBhdmVsIE1hY2hlayAocGF2ZWxAc3VzZS5jeikKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgICAgICAgUGF2ZWwgTWFjaGVrIChwYXZlbEB1Y3cuY3opCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKZGlmZiAtLWdpdCBhL2ZzL2NvbXBhdF9pb2N0bC5jIGIvZnMvY29tcGF0X2lvY3RsLmMKaW5kZXggNjQxNjQwZC4uNjNhZTg1OCAxMDA2NDQKLS0tIGEvZnMvY29tcGF0X2lvY3RsLmMKKysrIGIvZnMvY29tcGF0X2lvY3RsLmMKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMCAgSmFrdWIgSmVsaW5layAgKGpha3ViQHJlZGhhdC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTggIEVkZGllIEMuIERvc3QgIChlY2RAc2t5bmV0LmJlKQogICogQ29weXJpZ2h0IChDKSAyMDAxLDIwMDIgIEFuZGkgS2xlZW4sIFN1U0UgTGFicyAKLSAqIENvcHlyaWdodCAoQykgMjAwMyAgICAgICBQYXZlbCBNYWNoZWsgKHBhdmVsQHN1c2UuY3opCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgICAgICAgUGF2ZWwgTWFjaGVrIChwYXZlbEB1Y3cuY3opCiAgKgogICogVGhlc2Ugcm91dGluZXMgbWFpbnRhaW4gYXJndW1lbnQgc2l6ZSBjb252ZXJzaW9uIGJldHdlZW4gMzJiaXQgYW5kIDY0Yml0CiAgKiBpb2N0bHMuCkBAIC02MDEsOCArNjAxLDExIEBACiB9CiAKIC8qIEJsdWV0b290aCBpb2N0bHMgKi8KLSNkZWZpbmUgSENJVUFSVFNFVFBST1RPCV9JT1coJ1UnLCAyMDAsIGludCkKLSNkZWZpbmUgSENJVUFSVEdFVFBST1RPCV9JT1IoJ1UnLCAyMDEsIGludCkKKyNkZWZpbmUgSENJVUFSVFNFVFBST1RPCQlfSU9XKCdVJywgMjAwLCBpbnQpCisjZGVmaW5lIEhDSVVBUlRHRVRQUk9UTwkJX0lPUignVScsIDIwMSwgaW50KQorI2RlZmluZSBIQ0lVQVJUR0VUREVWSUNFCV9JT1IoJ1UnLCAyMDIsIGludCkKKyNkZWZpbmUgSENJVUFSVFNFVEZMQUdTCQlfSU9XKCdVJywgMjAzLCBpbnQpCisjZGVmaW5lIEhDSVVBUlRHRVRGTEFHUwkJX0lPUignVScsIDIwNCwgaW50KQogCiAjZGVmaW5lIEJORVBDT05OQURECV9JT1coJ0InLCAyMDAsIGludCkKICNkZWZpbmUgQk5FUENPTk5ERUwJX0lPVygnQicsIDIwMSwgaW50KQpAQCAtMTMyOCw2ICsxMzMxLDggQEAKIENPTVBBVElCTEVfSU9DVEwoSENJU0VUTElOS01PREUpCiBDT01QQVRJQkxFX0lPQ1RMKEhDSVNFVEFDTE1UVSkKIENPTVBBVElCTEVfSU9DVEwoSENJU0VUU0NPTVRVKQorQ09NUEFUSUJMRV9JT0NUTChIQ0lCTE9DS0FERFIpCitDT01QQVRJQkxFX0lPQ1RMKEhDSVVOQkxPQ0tBRERSKQogQ09NUEFUSUJMRV9JT0NUTChIQ0lJTlFVSVJZKQogQ09NUEFUSUJMRV9JT0NUTChIQ0lVQVJUU0VUUFJPVE8pCiBDT01QQVRJQkxFX0lPQ1RMKEhDSVVBUlRHRVRQUk9UTykKZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmMKaW5kZXggYzhjNzhiYS4uODZkNGRiMSAxMDA2NDQKLS0tIGEvZnMvZGNhY2hlLmMKKysrIGIvZnMvZGNhY2hlLmMKQEAgLTg5Niw3ICs4OTYsNyBAQAogICoKICAqIEluIHRoaXMgY2FzZSB3ZSByZXR1cm4gLTEgdG8gdGVsbCB0aGUgY2FsbGVyIHRoYXQgd2UgYmFsZWQuCiAgKi8KLXN0YXRpYyBpbnQgc2hyaW5rX2RjYWNoZV9tZW1vcnkoaW50IG5yLCBnZnBfdCBnZnBfbWFzaykKK3N0YXRpYyBpbnQgc2hyaW5rX2RjYWNoZV9tZW1vcnkoc3RydWN0IHNocmlua2VyICpzaHJpbmssIGludCBuciwgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJaWYgKG5yKSB7CiAJCWlmICghKGdmcF9tYXNrICYgX19HRlBfRlMpKQpkaWZmIC0tZ2l0IGEvZnMvZGlyZWN0LWlvLmMgYi9mcy9kaXJlY3QtaW8uYwppbmRleCA3NjAwYWFjLi5hMTBjYjkxIDEwMDY0NAotLS0gYS9mcy9kaXJlY3QtaW8uYworKysgYi9mcy9kaXJlY3QtaW8uYwpAQCAtMjE4LDcgKzIxOCw3IEBACiAgKiBmaWxlc3lzdGVtcyBjYW4gdXNlIGl0IHRvIGhvbGQgYWRkaXRpb25hbCBzdGF0ZSBiZXR3ZWVuIGdldF9ibG9jayBjYWxscyBhbmQKICAqIGRpb19jb21wbGV0ZS4KICAqLwotc3RhdGljIGludCBkaW9fY29tcGxldGUoc3RydWN0IGRpbyAqZGlvLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgcmV0KQorc3RhdGljIGludCBkaW9fY29tcGxldGUoc3RydWN0IGRpbyAqZGlvLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgcmV0LCBib29sIGlzX2FzeW5jKQogewogCXNzaXplX3QgdHJhbnNmZXJyZWQgPSAwOwogCkBAIC0yMzksMTQgKzIzOSw2IEBACiAJCQl0cmFuc2ZlcnJlZCA9IGRpby0+aV9zaXplIC0gb2Zmc2V0OwogCX0KIAotCWlmIChkaW8tPmVuZF9pbyAmJiBkaW8tPnJlc3VsdCkKLQkJZGlvLT5lbmRfaW8oZGlvLT5pb2NiLCBvZmZzZXQsIHRyYW5zZmVycmVkLAotCQkJICAgIGRpby0+bWFwX2JoLmJfcHJpdmF0ZSk7Ci0KLQlpZiAoZGlvLT5mbGFncyAmIERJT19MT0NLSU5HKQotCQkvKiBsb2NrZGVwOiBub24tb3duZXIgcmVsZWFzZSAqLwotCQl1cF9yZWFkX25vbl9vd25lcigmZGlvLT5pbm9kZS0+aV9hbGxvY19zZW0pOwotCiAJaWYgKHJldCA9PSAwKQogCQlyZXQgPSBkaW8tPnBhZ2VfZXJyb3JzOwogCWlmIChyZXQgPT0gMCkKQEAgLTI1NCw2ICsyNDYsMTcgQEAKIAlpZiAocmV0ID09IDApCiAJCXJldCA9IHRyYW5zZmVycmVkOwogCisJaWYgKGRpby0+ZW5kX2lvICYmIGRpby0+cmVzdWx0KSB7CisJCWRpby0+ZW5kX2lvKGRpby0+aW9jYiwgb2Zmc2V0LCB0cmFuc2ZlcnJlZCwKKwkJCSAgICBkaW8tPm1hcF9iaC5iX3ByaXZhdGUsIHJldCwgaXNfYXN5bmMpOworCX0gZWxzZSBpZiAoaXNfYXN5bmMpIHsKKwkJYWlvX2NvbXBsZXRlKGRpby0+aW9jYiwgcmV0LCAwKTsKKwl9CisKKwlpZiAoZGlvLT5mbGFncyAmIERJT19MT0NLSU5HKQorCQkvKiBsb2NrZGVwOiBub24tb3duZXIgcmVsZWFzZSAqLworCQl1cF9yZWFkX25vbl9vd25lcigmZGlvLT5pbm9kZS0+aV9hbGxvY19zZW0pOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjc3LDggKzI4MCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGlvLT5iaW9fbG9jaywgZmxhZ3MpOwogCiAJaWYgKHJlbWFpbmluZyA9PSAwKSB7Ci0JCWludCByZXQgPSBkaW9fY29tcGxldGUoZGlvLCBkaW8tPmlvY2ItPmtpX3BvcywgMCk7Ci0JCWFpb19jb21wbGV0ZShkaW8tPmlvY2IsIHJldCwgMCk7CisJCWRpb19jb21wbGV0ZShkaW8sIGRpby0+aW9jYi0+a2lfcG9zLCAwLCB0cnVlKTsKIAkJa2ZyZWUoZGlvKTsKIAl9CiB9CkBAIC0xMTI2LDcgKzExMjgsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRpby0+YmlvX2xvY2ssIGZsYWdzKTsKIAogCWlmIChyZXQyID09IDApIHsKLQkJcmV0ID0gZGlvX2NvbXBsZXRlKGRpbywgb2Zmc2V0LCByZXQpOworCQlyZXQgPSBkaW9fY29tcGxldGUoZGlvLCBvZmZzZXQsIHJldCwgZmFsc2UpOwogCQlrZnJlZShkaW8pOwogCX0gZWxzZQogCQlCVUdfT04ocmV0ICE9IC1FSU9DQlFVRVVFRCk7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9jcnlwdG8uYyBiL2ZzL2VjcnlwdGZzL2NyeXB0by5jCmluZGV4IDFjYzA4NzYuLmEyZTNiNTYgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2NyeXB0by5jCisrKyBiL2ZzL2VjcnlwdGZzL2NyeXB0by5jCkBAIC03NjIsNyArNzYyLDcgQEAKIAogLyoqCiAgKiBlY3J5cHRmc19pbml0X2NyeXB0X2N0eAotICogQGNyeXB0X3N0YXQ6IFVuaW5pdGlsaXplZCBjcnlwdCBzdGF0cyBzdHJ1Y3R1cmUKKyAqIEBjcnlwdF9zdGF0OiBVbmluaXRpYWxpemVkIGNyeXB0IHN0YXRzIHN0cnVjdHVyZQogICoKICAqIEluaXRpYWxpemUgdGhlIGNyeXB0byBjb250ZXh0LgogICoKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL21lc3NhZ2luZy5jIGIvZnMvZWNyeXB0ZnMvbWVzc2FnaW5nLmMKaW5kZXggMmQ4ZGJjZS4uNDZjNGRkOCAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvbWVzc2FnaW5nLmMKKysrIGIvZnMvZWNyeXB0ZnMvbWVzc2FnaW5nLmMKQEAgLTMxLDkgKzMxLDkgQEAKIAogc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkICplY3J5cHRmc19kYWVtb25faGFzaDsKIHN0cnVjdCBtdXRleCBlY3J5cHRmc19kYWVtb25faGFzaF9tdXg7Ci1zdGF0aWMgaW50IGVjcnlwdGZzX2hhc2hfYnVja2V0czsKK3N0YXRpYyBpbnQgZWNyeXB0ZnNfaGFzaF9iaXRzOwogI2RlZmluZSBlY3J5cHRmc191aWRfaGFzaCh1aWQpIFwKLSAgICAgICAgaGFzaF9sb25nKCh1bnNpZ25lZCBsb25nKXVpZCwgZWNyeXB0ZnNfaGFzaF9idWNrZXRzKQorICAgICAgICBoYXNoX2xvbmcoKHVuc2lnbmVkIGxvbmcpdWlkLCBlY3J5cHRmc19oYXNoX2JpdHMpCiAKIHN0YXRpYyB1MzIgZWNyeXB0ZnNfbXNnX2NvdW50ZXI7CiBzdGF0aWMgc3RydWN0IGVjcnlwdGZzX21zZ19jdHggKmVjcnlwdGZzX21zZ19jdHhfYXJyOwpAQCAtNDg2LDE4ICs0ODYsMTkgQEAKIAl9CiAJbXV0ZXhfaW5pdCgmZWNyeXB0ZnNfZGFlbW9uX2hhc2hfbXV4KTsKIAltdXRleF9sb2NrKCZlY3J5cHRmc19kYWVtb25faGFzaF9tdXgpOwotCWVjcnlwdGZzX2hhc2hfYnVja2V0cyA9IDE7Ci0Jd2hpbGUgKGVjcnlwdGZzX251bWJlcl9vZl91c2VycyA+PiBlY3J5cHRmc19oYXNoX2J1Y2tldHMpCi0JCWVjcnlwdGZzX2hhc2hfYnVja2V0cysrOworCWVjcnlwdGZzX2hhc2hfYml0cyA9IDE7CisJd2hpbGUgKGVjcnlwdGZzX251bWJlcl9vZl91c2VycyA+PiBlY3J5cHRmc19oYXNoX2JpdHMpCisJCWVjcnlwdGZzX2hhc2hfYml0cysrOwogCWVjcnlwdGZzX2RhZW1vbl9oYXNoID0ga21hbGxvYygoc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKQotCQkJCQkqIGVjcnlwdGZzX2hhc2hfYnVja2V0cyksIEdGUF9LRVJORUwpOworCQkJCQkqICgxIDw8IGVjcnlwdGZzX2hhc2hfYml0cykpLAorCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKIAlpZiAoIWVjcnlwdGZzX2RhZW1vbl9oYXNoKSB7CiAJCXJjID0gLUVOT01FTTsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQltdXRleF91bmxvY2soJmVjcnlwdGZzX2RhZW1vbl9oYXNoX211eCk7CiAJCWdvdG8gb3V0OwogCX0KLQlmb3IgKGkgPSAwOyBpIDwgZWNyeXB0ZnNfaGFzaF9idWNrZXRzOyBpKyspCisJZm9yIChpID0gMDsgaSA8ICgxIDw8IGVjcnlwdGZzX2hhc2hfYml0cyk7IGkrKykKIAkJSU5JVF9ITElTVF9IRUFEKCZlY3J5cHRmc19kYWVtb25faGFzaFtpXSk7CiAJbXV0ZXhfdW5sb2NrKCZlY3J5cHRmc19kYWVtb25faGFzaF9tdXgpOwogCWVjcnlwdGZzX21zZ19jdHhfYXJyID0ga21hbGxvYygoc2l6ZW9mKHN0cnVjdCBlY3J5cHRmc19tc2dfY3R4KQpAQCAtNTU0LDcgKzU1NSw3IEBACiAJCWludCBpOwogCiAJCW11dGV4X2xvY2soJmVjcnlwdGZzX2RhZW1vbl9oYXNoX211eCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBlY3J5cHRmc19oYXNoX2J1Y2tldHM7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgKDEgPDwgZWNyeXB0ZnNfaGFzaF9iaXRzKTsgaSsrKSB7CiAJCQlpbnQgcmM7CiAKIAkJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGRhZW1vbiwgZWxlbSwKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCBlMTlkZTZhLi45N2Q5MWEwIDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC02NTMsNiArNjUzLDcgQEAKIAllbHNlCiAJCXN0YWNrX2Jhc2UgPSB2bWEtPnZtX3N0YXJ0IC0gc3RhY2tfZXhwYW5kOwogI2VuZGlmCisJY3VycmVudC0+bW0tPnN0YXJ0X3N0YWNrID0gYnBybS0+cDsKIAlyZXQgPSBleHBhbmRfc3RhY2sodm1hLCBzdGFja19iYXNlKTsKIAlpZiAocmV0KQogCQlyZXQgPSAtRUZBVUxUOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuYwppbmRleCAzNzczMDljLi5iZjAyOWM3IDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dGVudHMuYworKysgYi9mcy9leHQ0L2V4dGVudHMuYwpAQCAtMjkzNyw3ICsyOTM3LDcgQEAKICAqIE9uZSBvZiBtb3JlIGluZGV4IGJsb2NrcyBtYXliZSBuZWVkZWQgaWYgdGhlIGV4dGVudCB0cmVlIGdyb3cgYWZ0ZXIKICAqIHRoZSB1bmludGlhbGl6ZWQgZXh0ZW50IHNwbGl0LiBUbyBwcmV2ZW50IEVOT1NQQyBvY2N1ciBhdCB0aGUgSU8KICAqIGNvbXBsZXRlLCB3ZSBuZWVkIHRvIHNwbGl0IHRoZSB1bmluaXRpYWxpemVkIGV4dGVudCBiZWZvcmUgRElPIHN1Ym1pdAotICogdGhlIElPLiBUaGUgdW5pbml0aWxpemVkIGV4dGVudCBjYWxsZWQgYXQgdGhpcyB0aW1lIHdpbGwgYmUgc3BsaXQKKyAqIHRoZSBJTy4gVGhlIHVuaW5pdGlhbGl6ZWQgZXh0ZW50IGNhbGxlZCBhdCB0aGlzIHRpbWUgd2lsbCBiZSBzcGxpdAogICogaW50byB0aHJlZSB1bmluaXRpYWxpemVkIGV4dGVudChhdCBtb3N0KS4gQWZ0ZXIgSU8gY29tcGxldGUsIHRoZSBwYXJ0CiAgKiBiZWluZyBmaWxsZWQgd2lsbCBiZSBjb252ZXJ0IHRvIGluaXRpYWxpemVkIGJ5IHRoZSBlbmRfaW8gY2FsbGJhY2sgZnVuY3Rpb24KICAqIHZpYSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoKS4KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCA0MjI3MmQ2Li4wYWZjOGMxIDEwMDY0NAotLS0gYS9mcy9leHQ0L2lub2RlLmMKKysrIGIvZnMvZXh0NC9pbm9kZS5jCkBAIC0zNzc1LDcgKzM3NzUsOCBAQAogfQogCiBzdGF0aWMgdm9pZCBleHQ0X2VuZF9pb19kaW8oc3RydWN0IGtpb2NiICppb2NiLCBsb2ZmX3Qgb2Zmc2V0LAotCQkJICAgIHNzaXplX3Qgc2l6ZSwgdm9pZCAqcHJpdmF0ZSkKKwkJCSAgICBzc2l6ZV90IHNpemUsIHZvaWQgKnByaXZhdGUsIGludCByZXQsCisJCQkgICAgYm9vbCBpc19hc3luYykKIHsKICAgICAgICAgZXh0NF9pb19lbmRfdCAqaW9fZW5kID0gaW9jYi0+cHJpdmF0ZTsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CkBAIC0zNzg0LDcgKzM3ODUsNyBAQAogCiAJLyogaWYgbm90IGFzeW5jIGRpcmVjdCBJTyBvciBkaW8gd2l0aCAwIGJ5dGVzIHdyaXRlLCBqdXN0IHJldHVybiAqLwogCWlmICghaW9fZW5kIHx8ICFzaXplKQotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCiAJZXh0X2RlYnVnKCJleHQ0X2VuZF9pb19kaW8oKTogaW9fZW5kIDB4JXAiCiAJCSAgImZvciBpbm9kZSAlbHUsIGlvY2IgMHglcCwgb2Zmc2V0ICVsbHUsIHNpemUgJWxsdVxuIiwKQEAgLTM3OTUsNyArMzc5Niw3IEBACiAJaWYgKGlvX2VuZC0+ZmxhZyAhPSBFWFQ0X0lPX1VOV1JJVFRFTil7CiAJCWV4dDRfZnJlZV9pb19lbmQoaW9fZW5kKTsKIAkJaW9jYi0+cHJpdmF0ZSA9IE5VTEw7Ci0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJfQogCiAJaW9fZW5kLT5vZmZzZXQgPSBvZmZzZXQ7CkBAIC0zODEyLDYgKzM4MTMsOSBAQAogCWxpc3RfYWRkX3RhaWwoJmlvX2VuZC0+bGlzdCwgJmVpLT5pX2NvbXBsZXRlZF9pb19saXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlaS0+aV9jb21wbGV0ZWRfaW9fbG9jaywgZmxhZ3MpOwogCWlvY2ItPnByaXZhdGUgPSBOVUxMOworb3V0OgorCWlmIChpc19hc3luYykKKwkJYWlvX2NvbXBsZXRlKGlvY2IsIHJldCwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGV4dDRfZW5kX2lvX2J1ZmZlcl93cml0ZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgdXB0b2RhdGUpCmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jCmluZGV4IDEyYjNiYzAuLjBlODNkZmQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jCisrKyBiL2ZzL2V4dDQvbWJhbGxvYy5jCkBAIC0yNzA0LDcgKzI3MDQsNyBAQAogCiAKIC8qCi0gKiBDaGVjayBxdW90YSBhbmQgbWFyayBjaG9vc2VkIHNwYWNlIChhYy0+YWNfYl9leCkgbm9uLWZyZWUgaW4gYml0bWFwcworICogQ2hlY2sgcXVvdGEgYW5kIG1hcmsgY2hvc2VuIHNwYWNlIChhYy0+YWNfYl9leCkgbm9uLWZyZWUgaW4gYml0bWFwcwogICogUmV0dXJucyAwIGlmIHN1Y2Nlc3Mgb3IgZXJyb3IgY29kZQogICovCiBzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jCmluZGV4IDRlODk4M2EuLmU3MmQzMjMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvc3VwZXIuYworKysgYi9mcy9leHQ0L3N1cGVyLmMKQEAgLTMwMTAsNyArMzAxMCw3IEBACiAJZXh0NF9leHRfaW5pdChzYik7CiAJZXJyID0gZXh0NF9tYl9pbml0KHNiLCBuZWVkc19yZWNvdmVyeSk7CiAJaWYgKGVycikgewotCQlleHQ0X21zZyhzYiwgS0VSTl9FUlIsICJmYWlsZWQgdG8gaW5pdGFsaXplIG1iYWxsb2MgKCVkKSIsCisJCWV4dDRfbXNnKHNiLCBLRVJOX0VSUiwgImZhaWxlZCB0byBpbml0aWFsaXplIG1iYWxsb2MgKCVkKSIsCiAJCQkgZXJyKTsKIAkJZ290byBmYWlsZWRfbW91bnQ0OwogCX0KZGlmZiAtLWdpdCBhL2ZzL2ZpbGUuYyBiL2ZzL2ZpbGUuYwppbmRleCAzNGJiN2Y3Li5jY2NhZWFkIDEwMDY0NAotLS0gYS9mcy9maWxlLmMKKysrIGIvZnMvZmlsZS5jCkBAIC0xNzgsNyArMTc4LDYgQEAKIAlmZHQtPm9wZW5fZmRzID0gKGZkX3NldCAqKWRhdGE7CiAJZGF0YSArPSBuciAvIEJJVFNfUEVSX0JZVEU7CiAJZmR0LT5jbG9zZV9vbl9leGVjID0gKGZkX3NldCAqKWRhdGE7Ci0JSU5JVF9SQ1VfSEVBRCgmZmR0LT5yY3UpOwogCWZkdC0+bmV4dCA9IE5VTEw7CiAKIAlyZXR1cm4gZmR0OwpAQCAtMzEyLDcgKzMxMSw2IEBACiAJbmV3X2ZkdC0+Y2xvc2Vfb25fZXhlYyA9IChmZF9zZXQgKikmbmV3Zi0+Y2xvc2Vfb25fZXhlY19pbml0OwogCW5ld19mZHQtPm9wZW5fZmRzID0gKGZkX3NldCAqKSZuZXdmLT5vcGVuX2Zkc19pbml0OwogCW5ld19mZHQtPmZkID0gJm5ld2YtPmZkX2FycmF5WzBdOwotCUlOSVRfUkNVX0hFQUQoJm5ld19mZHQtPnJjdSk7CiAJbmV3X2ZkdC0+bmV4dCA9IE5VTEw7CiAKIAlzcGluX2xvY2soJm9sZGYtPmZpbGVfbG9jayk7CkBAIC00MzAsNyArNDI4LDYgQEAKIAkJLmZkCQk9ICZpbml0X2ZpbGVzLmZkX2FycmF5WzBdLAogCQkuY2xvc2Vfb25fZXhlYwk9IChmZF9zZXQgKikmaW5pdF9maWxlcy5jbG9zZV9vbl9leGVjX2luaXQsCiAJCS5vcGVuX2Zkcwk9IChmZF9zZXQgKikmaW5pdF9maWxlcy5vcGVuX2Zkc19pbml0LAotCQkucmN1CQk9IFJDVV9IRUFEX0lOSVQsCiAJfSwKIAkuZmlsZV9sb2NrCT0gX19TUElOX0xPQ0tfVU5MT0NLRUQoaW5pdF90YXNrLmZpbGVfbG9jayksCiB9OwpkaWZmIC0tZ2l0IGEvZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jIGIvZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jCmluZGV4IDFlOGFmOTMuLjUxMzJjOTkgMTAwNjQ0Ci0tLSBhL2ZzL2ZyZWV2eGZzL3Z4ZnNfc3VwZXIuYworKysgYi9mcy9mcmVldnhmcy92eGZzX3N1cGVyLmMKQEAgLTEzNSw3ICsxMzUsNyBAQAogfQogCiAvKioKLSAqIHZ4ZnNfcmVhZF9zdXBlciAtIHJlYWQgc3VwZXJibG9jayBpbnRvIG1lbW9yeSBhbmQgaW5pdGFsaXplIGZpbGVzeXN0ZW0KKyAqIHZ4ZnNfcmVhZF9zdXBlciAtIHJlYWQgc3VwZXJibG9jayBpbnRvIG1lbW9yeSBhbmQgaW5pdGlhbGl6ZSBmaWxlc3lzdGVtCiAgKiBAc2JwOgkJVkZTIHN1cGVyYmxvY2sgKHRvIGZpbGwpCiAgKiBAZHA6CQkJZnMgcHJpdmF0ZSBtb3VudCBkYXRhCiAgKiBAc2lsZW50OgkJZG8gbm90IGNvbXBsYWluIGxvdWRseSB3aGVuIHN0aCBpcyB3cm9uZwpkaWZmIC0tZ2l0IGEvZnMvZnMtd3JpdGViYWNrLmMgYi9mcy9mcy13cml0ZWJhY2suYwppbmRleCAwNjA5NjA3Li5kNWJlMTY5IDEwMDY0NAotLS0gYS9mcy9mcy13cml0ZWJhY2suYworKysgYi9mcy9mcy13cml0ZWJhY2suYwpAQCAtMzgsNDMgKzM4LDE4IEBACiAvKgogICogUGFzc2VkIGludG8gd2Jfd3JpdGViYWNrKCksIGVzc2VudGlhbGx5IGEgc3Vic2V0IG9mIHdyaXRlYmFja19jb250cm9sCiAgKi8KLXN0cnVjdCB3Yl93cml0ZWJhY2tfYXJncyB7CitzdHJ1Y3Qgd2Jfd3JpdGViYWNrX3dvcmsgewogCWxvbmcgbnJfcGFnZXM7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKIAllbnVtIHdyaXRlYmFja19zeW5jX21vZGVzIHN5bmNfbW9kZTsKIAl1bnNpZ25lZCBpbnQgZm9yX2t1cGRhdGU6MTsKIAl1bnNpZ25lZCBpbnQgcmFuZ2VfY3ljbGljOjE7CiAJdW5zaWduZWQgaW50IGZvcl9iYWNrZ3JvdW5kOjE7Ci19OwogCi0vKgotICogV29yayBpdGVtcyBmb3IgdGhlIGJkaV93cml0ZWJhY2sgdGhyZWFkcwotICovCi1zdHJ1Y3QgYmRpX3dvcmsgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJCS8qIHBlbmRpbmcgd29yayBsaXN0ICovCi0Jc3RydWN0IHJjdV9oZWFkIHJjdV9oZWFkOwkvKiBmb3IgUkNVIGZyZWUvY2xlYXIgb2Ygd29yayAqLwotCi0JdW5zaWduZWQgbG9uZyBzZWVuOwkJLyogdGhyZWFkcyB0aGF0IGhhdmUgc2VlbiB0aGlzIHdvcmsgKi8KLQlhdG9taWNfdCBwZW5kaW5nOwkJLyogbnVtYmVyIG9mIHRocmVhZHMgc3RpbGwgdG8gZG8gd29yayAqLwotCi0Jc3RydWN0IHdiX3dyaXRlYmFja19hcmdzIGFyZ3M7CS8qIHdyaXRlYmFjayBhcmd1bWVudHMgKi8KLQotCXVuc2lnbmVkIGxvbmcgc3RhdGU7CQkvKiBmbGFnIGJpdHMsIHNlZSBXU18qICovCisJc3RydWN0IGNvbXBsZXRpb24gKmRvbmU7CS8qIHNldCBpZiB0aGUgY2FsbGVyIHdhaXRzICovCiB9OwogCi1lbnVtIHsKLQlXU19JTlBST0dSRVNTID0gMCwKLQlXU19PTlNUQUNLLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGJkaV93b3JrX2luaXQoc3RydWN0IGJkaV93b3JrICp3b3JrLAotCQkJCSBzdHJ1Y3Qgd2Jfd3JpdGViYWNrX2FyZ3MgKmFyZ3MpCi17Ci0JSU5JVF9SQ1VfSEVBRCgmd29yay0+cmN1X2hlYWQpOwotCXdvcmstPmFyZ3MgPSAqYXJnczsKLQlfX3NldF9iaXQoV1NfSU5QUk9HUkVTUywgJndvcmstPnN0YXRlKTsKLX0KLQogLyoqCiAgKiB3cml0ZWJhY2tfaW5fcHJvZ3Jlc3MgLSBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSBpcyB3cml0ZWJhY2sgaW4gcHJvZ3Jlc3MKICAqIEBiZGk6IHRoZSBkZXZpY2UncyBiYWNraW5nX2Rldl9pbmZvIHN0cnVjdHVyZS4KQEAgLTg3LDQ5ICs2MiwxMSBAQAogCXJldHVybiAhbGlzdF9lbXB0eSgmYmRpLT53b3JrX2xpc3QpOwogfQogCi1zdGF0aWMgdm9pZCBiZGlfd29ya19mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3N0YXRpYyB2b2lkIGJkaV9xdWV1ZV93b3JrKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksCisJCXN0cnVjdCB3Yl93cml0ZWJhY2tfd29yayAqd29yaykKIHsKLQlzdHJ1Y3QgYmRpX3dvcmsgKndvcmsgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJkaV93b3JrLCByY3VfaGVhZCk7Ci0KLQljbGVhcl9iaXQoV1NfSU5QUk9HUkVTUywgJndvcmstPnN0YXRlKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOwotCXdha2VfdXBfYml0KCZ3b3JrLT5zdGF0ZSwgV1NfSU5QUk9HUkVTUyk7Ci0KLQlpZiAoIXRlc3RfYml0KFdTX09OU1RBQ0ssICZ3b3JrLT5zdGF0ZSkpCi0JCWtmcmVlKHdvcmspOwotfQotCi1zdGF0aWMgdm9pZCB3Yl9jbGVhcl9wZW5kaW5nKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yiwgc3RydWN0IGJkaV93b3JrICp3b3JrKQotewotCS8qCi0JICogVGhlIGNhbGxlciBoYXMgcmV0cmlldmVkIHRoZSB3b3JrIGFyZ3VtZW50cyBmcm9tIHRoaXMgd29yaywKLQkgKiBkcm9wIG91ciByZWZlcmVuY2UuIElmIHRoaXMgaXMgdGhlIGxhc3QgcmVmLCBkZWxldGUgYW5kIGZyZWUgaXQKLQkgKi8KLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmd29yay0+cGVuZGluZykpIHsKLQkJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSA9IHdiLT5iZGk7Ci0KLQkJc3Bpbl9sb2NrKCZiZGktPndiX2xvY2spOwotCQlsaXN0X2RlbF9yY3UoJndvcmstPmxpc3QpOwotCQlzcGluX3VubG9jaygmYmRpLT53Yl9sb2NrKTsKLQotCQljYWxsX3JjdSgmd29yay0+cmN1X2hlYWQsIGJkaV93b3JrX2ZyZWUpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYmRpX3F1ZXVlX3dvcmsoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgc3RydWN0IGJkaV93b3JrICp3b3JrKQotewotCXdvcmstPnNlZW4gPSBiZGktPndiX21hc2s7Ci0JQlVHX09OKCF3b3JrLT5zZWVuKTsKLQlhdG9taWNfc2V0KCZ3b3JrLT5wZW5kaW5nLCBiZGktPndiX2NudCk7Ci0JQlVHX09OKCFiZGktPndiX2NudCk7Ci0KLQkvKgotCSAqIGxpc3RfYWRkX3RhaWxfcmN1KCkgY29udGFpbnMgdGhlIG5lY2Vzc2FyeSBiYXJyaWVycyB0bwotCSAqIG1ha2Ugc3VyZSB0aGUgYWJvdmUgc3RvcmVzIGFyZSBzZWVuIGJlZm9yZSB0aGUgaXRlbSBpcwotCSAqIG5vdGljZWQgb24gdGhlIGxpc3QKLQkgKi8KIAlzcGluX2xvY2soJmJkaS0+d2JfbG9jayk7Ci0JbGlzdF9hZGRfdGFpbF9yY3UoJndvcmstPmxpc3QsICZiZGktPndvcmtfbGlzdCk7CisJbGlzdF9hZGRfdGFpbCgmd29yay0+bGlzdCwgJmJkaS0+d29ya19saXN0KTsKIAlzcGluX3VubG9jaygmYmRpLT53Yl9sb2NrKTsKIAogCS8qCkBAIC0xNDYsNTUgKzgzLDI5IEBACiAJfQogfQogCi0vKgotICogVXNlZCBmb3Igb24tc3RhY2sgYWxsb2NhdGVkIHdvcmsgaXRlbXMuIFRoZSBjYWxsZXIgbmVlZHMgdG8gd2FpdCB1bnRpbAotICogdGhlIHdiIHRocmVhZHMgaGF2ZSBhY2tlZCB0aGUgd29yayBiZWZvcmUgaXQncyBzYWZlIHRvIGNvbnRpbnVlLgotICovCi1zdGF0aWMgdm9pZCBiZGlfd2FpdF9vbl93b3JrX2RvbmUoc3RydWN0IGJkaV93b3JrICp3b3JrKQorc3RhdGljIHZvaWQKK19fYmRpX3N0YXJ0X3dyaXRlYmFjayhzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLCBsb25nIG5yX3BhZ2VzLAorCQlib29sIHJhbmdlX2N5Y2xpYywgYm9vbCBmb3JfYmFja2dyb3VuZCkKIHsKLQl3YWl0X29uX2JpdCgmd29yay0+c3RhdGUsIFdTX0lOUFJPR1JFU1MsIGJkaV9zY2hlZF93YWl0LAotCQkgICAgVEFTS19VTklOVEVSUlVQVElCTEUpOwotfQotCi1zdGF0aWMgdm9pZCBiZGlfYWxsb2NfcXVldWVfd29yayhzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLAotCQkJCSBzdHJ1Y3Qgd2Jfd3JpdGViYWNrX2FyZ3MgKmFyZ3MpCi17Ci0Jc3RydWN0IGJkaV93b3JrICp3b3JrOworCXN0cnVjdCB3Yl93cml0ZWJhY2tfd29yayAqd29yazsKIAogCS8qCiAJICogVGhpcyBpcyBXQl9TWU5DX05PTkUgd3JpdGViYWNrLCBzbyBpZiBhbGxvY2F0aW9uIGZhaWxzIGp1c3QKIAkgKiB3YWtldXAgdGhlIHRocmVhZCBmb3Igb2xkIGRpcnR5IGRhdGEgd3JpdGViYWNrCiAJICovCi0Jd29yayA9IGttYWxsb2Moc2l6ZW9mKCp3b3JrKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKHdvcmspIHsKLQkJYmRpX3dvcmtfaW5pdCh3b3JrLCBhcmdzKTsKLQkJYmRpX3F1ZXVlX3dvcmsoYmRpLCB3b3JrKTsKLQl9IGVsc2UgewotCQlzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IgPSAmYmRpLT53YjsKLQotCQlpZiAod2ItPnRhc2spCi0JCQl3YWtlX3VwX3Byb2Nlc3Mod2ItPnRhc2spOworCXdvcmsgPSBremFsbG9jKHNpemVvZigqd29yayksIEdGUF9BVE9NSUMpOworCWlmICghd29yaykgeworCQlpZiAoYmRpLT53Yi50YXNrKQorCQkJd2FrZV91cF9wcm9jZXNzKGJkaS0+d2IudGFzayk7CisJCXJldHVybjsKIAl9Ci19CiAKLS8qKgotICogYmRpX3F1ZXVlX3dvcmtfb25zdGFjayAtIHN0YXJ0IGFuZCB3YWl0IGZvciB3cml0ZWJhY2sKLSAqIEBzYjogd3JpdGUgaW5vZGVzIGZyb20gdGhpcyBzdXBlcl9ibG9jawotICoKLSAqIERlc2NyaXB0aW9uOgotICogICBUaGlzIGZ1bmN0aW9uIGluaXRpYXRlcyB3cml0ZWJhY2sgYW5kIHdhaXRzIGZvciB0aGUgb3BlcmF0aW9uIHRvCi0gKiAgIGNvbXBsZXRlLiBDYWxsZXJzIG11c3QgaG9sZCB0aGUgc2Igc191bW91bnQgc2VtYXBob3JlIGZvcgotICogICByZWFkaW5nLCB0byBhdm9pZCBoYXZpbmcgdGhlIHN1cGVyIGRpc2FwcGVhciBiZWZvcmUgd2UgYXJlIGRvbmUuCi0gKi8KLXN0YXRpYyB2b2lkIGJkaV9xdWV1ZV93b3JrX29uc3RhY2soc3RydWN0IHdiX3dyaXRlYmFja19hcmdzICphcmdzKQotewotCXN0cnVjdCBiZGlfd29yayB3b3JrOworCXdvcmstPnN5bmNfbW9kZQk9IFdCX1NZTkNfTk9ORTsKKwl3b3JrLT5ucl9wYWdlcwk9IG5yX3BhZ2VzOworCXdvcmstPnJhbmdlX2N5Y2xpYyA9IHJhbmdlX2N5Y2xpYzsKKwl3b3JrLT5mb3JfYmFja2dyb3VuZCA9IGZvcl9iYWNrZ3JvdW5kOwogCi0JYmRpX3dvcmtfaW5pdCgmd29yaywgYXJncyk7Ci0JX19zZXRfYml0KFdTX09OU1RBQ0ssICZ3b3JrLnN0YXRlKTsKLQotCWJkaV9xdWV1ZV93b3JrKGFyZ3MtPnNiLT5zX2JkaSwgJndvcmspOwotCWJkaV93YWl0X29uX3dvcmtfZG9uZSgmd29yayk7CisJYmRpX3F1ZXVlX3dvcmsoYmRpLCB3b3JrKTsKIH0KIAogLyoqCkBAIC0yMTAsMTMgKzEyMSw3IEBACiAgKi8KIHZvaWQgYmRpX3N0YXJ0X3dyaXRlYmFjayhzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLCBsb25nIG5yX3BhZ2VzKQogewotCXN0cnVjdCB3Yl93cml0ZWJhY2tfYXJncyBhcmdzID0gewotCQkuc3luY19tb2RlCT0gV0JfU1lOQ19OT05FLAotCQkubnJfcGFnZXMJPSBucl9wYWdlcywKLQkJLnJhbmdlX2N5Y2xpYwk9IDEsCi0JfTsKLQotCWJkaV9hbGxvY19xdWV1ZV93b3JrKGJkaSwgJmFyZ3MpOworCV9fYmRpX3N0YXJ0X3dyaXRlYmFjayhiZGksIG5yX3BhZ2VzLCB0cnVlLCBmYWxzZSk7CiB9CiAKIC8qKgpAQCAtMjMwLDEzICsxMzUsNyBAQAogICovCiB2b2lkIGJkaV9zdGFydF9iYWNrZ3JvdW5kX3dyaXRlYmFjayhzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKQogewotCXN0cnVjdCB3Yl93cml0ZWJhY2tfYXJncyBhcmdzID0gewotCQkuc3luY19tb2RlCT0gV0JfU1lOQ19OT05FLAotCQkubnJfcGFnZXMJPSBMT05HX01BWCwKLQkJLmZvcl9iYWNrZ3JvdW5kID0gMSwKLQkJLnJhbmdlX2N5Y2xpYwk9IDEsCi0JfTsKLQliZGlfYWxsb2NfcXVldWVfd29yayhiZGksICZhcmdzKTsKKwlfX2JkaV9zdGFydF93cml0ZWJhY2soYmRpLCBMT05HX01BWCwgdHJ1ZSwgdHJ1ZSk7CiB9CiAKIC8qCkBAIC01NTQsMjkgKzQ1Myw0MSBAQAogCiAvKgogICogV3JpdGUgYSBwb3J0aW9uIG9mIGJfaW8gaW5vZGVzIHdoaWNoIGJlbG9uZyB0byBAc2IuCi0gKiBJZiBAd2JjLT5zYiAhPSBOVUxMLCB0aGVuIGZpbmQgYW5kIHdyaXRlIGFsbCBzdWNoCisgKgorICogSWYgQG9ubHlfdGhpc19zYiBpcyB0cnVlLCB0aGVuIGZpbmQgYW5kIHdyaXRlIGFsbCBzdWNoCiAgKiBpbm9kZXMuIE90aGVyd2lzZSB3cml0ZSBvbmx5IG9uZXMgd2hpY2ggZ28gc2VxdWVudGlhbGx5CiAgKiBpbiByZXZlcnNlIG9yZGVyLgorICoKICAqIFJldHVybiAxLCBpZiB0aGUgY2FsbGVyIHdyaXRlYmFjayByb3V0aW5lIHNob3VsZCBiZQogICogaW50ZXJydXB0ZWQuIE90aGVyd2lzZSByZXR1cm4gMC4KICAqLwotc3RhdGljIGludCB3cml0ZWJhY2tfc2JfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCi0JCQkgICAgICAgc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLAotCQkJICAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQorc3RhdGljIGludCB3cml0ZWJhY2tfc2JfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwKKwkJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsIGJvb2wgb25seV90aGlzX3NiKQogewogCXdoaWxlICghbGlzdF9lbXB0eSgmd2ItPmJfaW8pKSB7CiAJCWxvbmcgcGFnZXNfc2tpcHBlZDsKIAkJc3RydWN0IGlub2RlICppbm9kZSA9IGxpc3RfZW50cnkod2ItPmJfaW8ucHJldiwKIAkJCQkJCSBzdHJ1Y3QgaW5vZGUsIGlfbGlzdCk7Ci0JCWlmICh3YmMtPnNiICYmIHNiICE9IGlub2RlLT5pX3NiKSB7Ci0JCQkvKiBzdXBlciBibG9jayBnaXZlbiBhbmQgZG9lc24ndAotCQkJICAgbWF0Y2gsIHNraXAgdGhpcyBpbm9kZSAqLwotCQkJcmVkaXJ0eV90YWlsKGlub2RlKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChzYiAhPSBpbm9kZS0+aV9zYikKLQkJCS8qIGZpbmlzaCB3aXRoIHRoaXMgc3VwZXJibG9jayAqLworCisJCWlmIChpbm9kZS0+aV9zYiAhPSBzYikgeworCQkJaWYgKG9ubHlfdGhpc19zYikgeworCQkJCS8qCisJCQkJICogV2Ugb25seSB3YW50IHRvIHdyaXRlIGJhY2sgZGF0YSBmb3IgdGhpcworCQkJCSAqIHN1cGVyYmxvY2ssIG1vdmUgYWxsIGlub2RlcyBub3QgYmVsb25naW5nCisJCQkJICogdG8gaXQgYmFjayBvbnRvIHRoZSBkaXJ0eSBsaXN0LgorCQkJCSAqLworCQkJCXJlZGlydHlfdGFpbChpbm9kZSk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qCisJCQkgKiBUaGUgaW5vZGUgYmVsb25ncyB0byBhIGRpZmZlcmVudCBzdXBlcmJsb2NrLgorCQkJICogQm91bmNlIGJhY2sgdG8gdGhlIGNhbGxlciB0byB1bnBpbiB0aGlzIGFuZAorCQkJICogcGluIHRoZSBuZXh0IHN1cGVyYmxvY2suCisJCQkgKi8KIAkJCXJldHVybiAwOworCQl9CisKIAkJaWYgKGlub2RlLT5pX3N0YXRlICYgKElfTkVXIHwgSV9XSUxMX0ZSRUUpKSB7CiAJCQlyZXF1ZXVlX2lvKGlub2RlKTsKIAkJCWNvbnRpbnVlOwpAQCAtNjE0LDggKzUyNSw4IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB2b2lkIHdyaXRlYmFja19pbm9kZXNfd2Ioc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLAotCQkJCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQordm9pZCB3cml0ZWJhY2tfaW5vZGVzX3diKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwKKwkJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7CiAJaW50IHJldCA9IDA7CiAKQEAgLTYyOSwyOSArNTQwLDEyIEBACiAJCQkJCQkgc3RydWN0IGlub2RlLCBpX2xpc3QpOwogCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAKLQkJaWYgKHdiYy0+c2IpIHsKLQkJCS8qCi0JCQkgKiBXZSBhcmUgcmVxdWVzdGVkIHRvIHdyaXRlIG91dCBpbm9kZXMgZm9yIGEgc3BlY2lmaWMKLQkJCSAqIHN1cGVyYmxvY2suICBUaGlzIG1lYW5zIHdlIGFscmVhZHkgaGF2ZSBzX3Vtb3VudAotCQkJICogdGFrZW4gYnkgdGhlIGNhbGxlciB3aGljaCBhbHNvIHdhaXRzIGZvciB1cyB0bwotCQkJICogY29tcGxldGUgdGhlIHdyaXRlb3V0LgotCQkJICovCi0JCQlpZiAoc2IgIT0gd2JjLT5zYikgewotCQkJCXJlZGlydHlfdGFpbChpbm9kZSk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCVdBUk5fT04oIXJ3c2VtX2lzX2xvY2tlZCgmc2ItPnNfdW1vdW50KSk7Ci0KLQkJCXJldCA9IHdyaXRlYmFja19zYl9pbm9kZXMoc2IsIHdiLCB3YmMpOwotCQl9IGVsc2UgewotCQkJaWYgKCFwaW5fc2JfZm9yX3dyaXRlYmFjayhzYikpIHsKLQkJCQlyZXF1ZXVlX2lvKGlub2RlKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCXJldCA9IHdyaXRlYmFja19zYl9pbm9kZXMoc2IsIHdiLCB3YmMpOwotCQkJZHJvcF9zdXBlcihzYik7CisJCWlmICghcGluX3NiX2Zvcl93cml0ZWJhY2soc2IpKSB7CisJCQlyZXF1ZXVlX2lvKGlub2RlKTsKKwkJCWNvbnRpbnVlOwogCQl9CisJCXJldCA9IHdyaXRlYmFja19zYl9pbm9kZXMoc2IsIHdiLCB3YmMsIGZhbHNlKTsKKwkJZHJvcF9zdXBlcihzYik7CiAKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwpAQCAtNjYwLDExICs1NTQsMTcgQEAKIAkvKiBMZWF2ZSBhbnkgdW53cml0dGVuIGlub2RlcyBvbiBiX2lvICovCiB9CiAKLXZvaWQgd3JpdGViYWNrX2lub2Rlc193YmMoc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCitzdGF0aWMgdm9pZCBfX3dyaXRlYmFja19pbm9kZXNfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKLQlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpID0gd2JjLT5iZGk7CisJV0FSTl9PTighcndzZW1faXNfbG9ja2VkKCZzYi0+c191bW91bnQpKTsKIAotCXdyaXRlYmFja19pbm9kZXNfd2IoJmJkaS0+d2IsIHdiYyk7CisJd2JjLT53Yl9zdGFydCA9IGppZmZpZXM7IC8qIGxpdmVsb2NrIGF2b2lkYW5jZSAqLworCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7CisJaWYgKCF3YmMtPmZvcl9rdXBkYXRlIHx8IGxpc3RfZW1wdHkoJndiLT5iX2lvKSkKKwkJcXVldWVfaW8od2IsIHdiYy0+b2xkZXJfdGhhbl90aGlzKTsKKwl3cml0ZWJhY2tfc2JfaW5vZGVzKHNiLCB3Yiwgd2JjLCB0cnVlKTsKKwlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CiB9CiAKIC8qCkBAIC03MDIsMTYgKzYwMiwxNCBAQAogICogYWxsIGRpcnR5IHBhZ2VzIGlmIHRoZXkgYXJlIGFsbCBhdHRhY2hlZCB0byAib2xkIiBtYXBwaW5ncy4KICAqLwogc3RhdGljIGxvbmcgd2Jfd3JpdGViYWNrKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwKLQkJCSBzdHJ1Y3Qgd2Jfd3JpdGViYWNrX2FyZ3MgKmFyZ3MpCisJCQkgc3RydWN0IHdiX3dyaXRlYmFja193b3JrICp3b3JrKQogewogCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7Ci0JCS5iZGkJCQk9IHdiLT5iZGksCi0JCS5zYgkJCT0gYXJncy0+c2IsCi0JCS5zeW5jX21vZGUJCT0gYXJncy0+c3luY19tb2RlLAorCQkuc3luY19tb2RlCQk9IHdvcmstPnN5bmNfbW9kZSwKIAkJLm9sZGVyX3RoYW5fdGhpcwk9IE5VTEwsCi0JCS5mb3Jfa3VwZGF0ZQkJPSBhcmdzLT5mb3Jfa3VwZGF0ZSwKLQkJLmZvcl9iYWNrZ3JvdW5kCQk9IGFyZ3MtPmZvcl9iYWNrZ3JvdW5kLAotCQkucmFuZ2VfY3ljbGljCQk9IGFyZ3MtPnJhbmdlX2N5Y2xpYywKKwkJLmZvcl9rdXBkYXRlCQk9IHdvcmstPmZvcl9rdXBkYXRlLAorCQkuZm9yX2JhY2tncm91bmQJCT0gd29yay0+Zm9yX2JhY2tncm91bmQsCisJCS5yYW5nZV9jeWNsaWMJCT0gd29yay0+cmFuZ2VfY3ljbGljLAogCX07CiAJdW5zaWduZWQgbG9uZyBvbGRlc3RfamlmOwogCWxvbmcgd3JvdGUgPSAwOwpAQCAtNzMxLDIxICs2MjksMjQgQEAKIAkJLyoKIAkJICogU3RvcCB3cml0ZWJhY2sgd2hlbiBucl9wYWdlcyBoYXMgYmVlbiBjb25zdW1lZAogCQkgKi8KLQkJaWYgKGFyZ3MtPm5yX3BhZ2VzIDw9IDApCisJCWlmICh3b3JrLT5ucl9wYWdlcyA8PSAwKQogCQkJYnJlYWs7CiAKIAkJLyoKIAkJICogRm9yIGJhY2tncm91bmQgd3JpdGVvdXQsIHN0b3Agd2hlbiB3ZSBhcmUgYmVsb3cgdGhlCiAJCSAqIGJhY2tncm91bmQgZGlydHkgdGhyZXNob2xkCiAJCSAqLwotCQlpZiAoYXJncy0+Zm9yX2JhY2tncm91bmQgJiYgIW92ZXJfYmdyb3VuZF90aHJlc2goKSkKKwkJaWYgKHdvcmstPmZvcl9iYWNrZ3JvdW5kICYmICFvdmVyX2Jncm91bmRfdGhyZXNoKCkpCiAJCQlicmVhazsKIAogCQl3YmMubW9yZV9pbyA9IDA7CiAJCXdiYy5ucl90b193cml0ZSA9IE1BWF9XUklURUJBQ0tfUEFHRVM7CiAJCXdiYy5wYWdlc19za2lwcGVkID0gMDsKLQkJd3JpdGViYWNrX2lub2Rlc193Yih3YiwgJndiYyk7Ci0JCWFyZ3MtPm5yX3BhZ2VzIC09IE1BWF9XUklURUJBQ0tfUEFHRVMgLSB3YmMubnJfdG9fd3JpdGU7CisJCWlmICh3b3JrLT5zYikKKwkJCV9fd3JpdGViYWNrX2lub2Rlc19zYih3b3JrLT5zYiwgd2IsICZ3YmMpOworCQllbHNlCisJCQl3cml0ZWJhY2tfaW5vZGVzX3diKHdiLCAmd2JjKTsKKwkJd29yay0+bnJfcGFnZXMgLT0gTUFYX1dSSVRFQkFDS19QQUdFUyAtIHdiYy5ucl90b193cml0ZTsKIAkJd3JvdGUgKz0gTUFYX1dSSVRFQkFDS19QQUdFUyAtIHdiYy5ucl90b193cml0ZTsKIAogCQkvKgpAQCAtNzgxLDMxICs2ODIsMjEgQEAKIH0KIAogLyoKLSAqIFJldHVybiB0aGUgbmV4dCBiZGlfd29yayBzdHJ1Y3QgdGhhdCBoYXNuJ3QgYmVlbiBwcm9jZXNzZWQgYnkgdGhpcwotICogd2IgdGhyZWFkIHlldC4gLT5zZWVuIGlzIGluaXRpYWxseSBzZXQgZm9yIGVhY2ggdGhyZWFkIHRoYXQgZXhpc3RzCi0gKiBmb3IgdGhpcyBkZXZpY2UsIHdoZW4gYSB0aHJlYWQgZmlyc3Qgbm90aWNlcyBhIHBpZWNlIG9mIHdvcmsgaXQKLSAqIGNsZWFycyBpdHMgYml0LiBEZXBlbmRpbmcgb24gd3JpdGViYWNrIHR5cGUsIHRoZSB0aHJlYWQgd2lsbCBub3RpZnkKLSAqIGNvbXBsZXRpb24gb24gZWl0aGVyIHJlY2VpdmluZyB0aGUgd29yayAoV0JfU1lOQ19OT05FKSBvciBhZnRlcgotICogaXQgaXMgZG9uZSAoV0JfU1lOQ19BTEwpLgorICogUmV0dXJuIHRoZSBuZXh0IHdiX3dyaXRlYmFja193b3JrIHN0cnVjdCB0aGF0IGhhc24ndCBiZWVuIHByb2Nlc3NlZCB5ZXQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgYmRpX3dvcmsgKmdldF9uZXh0X3dvcmtfaXRlbShzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLAotCQkJCQkgICBzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpCitzdGF0aWMgc3RydWN0IHdiX3dyaXRlYmFja193b3JrICoKK2dldF9uZXh0X3dvcmtfaXRlbShzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLCBzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpCiB7Ci0Jc3RydWN0IGJkaV93b3JrICp3b3JrLCAqcmV0ID0gTlVMTDsKKwlzdHJ1Y3Qgd2Jfd3JpdGViYWNrX3dvcmsgKndvcmsgPSBOVUxMOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uod29yaywgJmJkaS0+d29ya19saXN0LCBsaXN0KSB7Ci0JCWlmICghdGVzdF9iaXQod2ItPm5yLCAmd29yay0+c2VlbikpCi0JCQljb250aW51ZTsKLQkJY2xlYXJfYml0KHdiLT5uciwgJndvcmstPnNlZW4pOwotCi0JCXJldCA9IHdvcms7Ci0JCWJyZWFrOworCXNwaW5fbG9jaygmYmRpLT53Yl9sb2NrKTsKKwlpZiAoIWxpc3RfZW1wdHkoJmJkaS0+d29ya19saXN0KSkgeworCQl3b3JrID0gbGlzdF9lbnRyeShiZGktPndvcmtfbGlzdC5uZXh0LAorCQkJCSAgc3RydWN0IHdiX3dyaXRlYmFja193b3JrLCBsaXN0KTsKKwkJbGlzdF9kZWxfaW5pdCgmd29yay0+bGlzdCk7CiAJfQotCi0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmV0dXJuIHJldDsKKwlzcGluX3VubG9jaygmYmRpLT53Yl9sb2NrKTsKKwlyZXR1cm4gd29yazsKIH0KIAogc3RhdGljIGxvbmcgd2JfY2hlY2tfb2xkX2RhdGFfZmx1c2goc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKQpAQCAtODMwLDE0ICs3MjEsMTQgQEAKIAkJCShpbm9kZXNfc3RhdC5ucl9pbm9kZXMgLSBpbm9kZXNfc3RhdC5ucl91bnVzZWQpOwogCiAJaWYgKG5yX3BhZ2VzKSB7Ci0JCXN0cnVjdCB3Yl93cml0ZWJhY2tfYXJncyBhcmdzID0geworCQlzdHJ1Y3Qgd2Jfd3JpdGViYWNrX3dvcmsgd29yayA9IHsKIAkJCS5ucl9wYWdlcwk9IG5yX3BhZ2VzLAogCQkJLnN5bmNfbW9kZQk9IFdCX1NZTkNfTk9ORSwKIAkJCS5mb3Jfa3VwZGF0ZQk9IDEsCiAJCQkucmFuZ2VfY3ljbGljCT0gMSwKIAkJfTsKIAotCQlyZXR1cm4gd2Jfd3JpdGViYWNrKHdiLCAmYXJncyk7CisJCXJldHVybiB3Yl93cml0ZWJhY2sod2IsICZ3b3JrKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTg0OSwzMyArNzQwLDI3IEBACiBsb25nIHdiX2RvX3dyaXRlYmFjayhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsIGludCBmb3JjZV93YWl0KQogewogCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkgPSB3Yi0+YmRpOwotCXN0cnVjdCBiZGlfd29yayAqd29yazsKKwlzdHJ1Y3Qgd2Jfd3JpdGViYWNrX3dvcmsgKndvcms7CiAJbG9uZyB3cm90ZSA9IDA7CiAKIAl3aGlsZSAoKHdvcmsgPSBnZXRfbmV4dF93b3JrX2l0ZW0oYmRpLCB3YikpICE9IE5VTEwpIHsKLQkJc3RydWN0IHdiX3dyaXRlYmFja19hcmdzIGFyZ3MgPSB3b3JrLT5hcmdzOwotCiAJCS8qCiAJCSAqIE92ZXJyaWRlIHN5bmMgbW9kZSwgaW4gY2FzZSB3ZSBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24KKwkJICogYmVjYXVzZSB0aGlzIHRocmVhZCBpcyBleGl0aW5nIG5vdy4KIAkJICovCiAJCWlmIChmb3JjZV93YWl0KQotCQkJd29yay0+YXJncy5zeW5jX21vZGUgPSBhcmdzLnN5bmNfbW9kZSA9IFdCX1NZTkNfQUxMOworCQkJd29yay0+c3luY19tb2RlID0gV0JfU1lOQ19BTEw7CisKKwkJd3JvdGUgKz0gd2Jfd3JpdGViYWNrKHdiLCB3b3JrKTsKIAogCQkvKgotCQkgKiBJZiB0aGlzIGlzbid0IGEgZGF0YSBpbnRlZ3JpdHkgb3BlcmF0aW9uLCBqdXN0IG5vdGlmeQotCQkgKiB0aGF0IHdlIGhhdmUgc2VlbiB0aGlzIHdvcmsgYW5kIHdlIGFyZSBub3cgc3RhcnRpbmcgaXQuCisJCSAqIE5vdGlmeSB0aGUgY2FsbGVyIG9mIGNvbXBsZXRpb24gaWYgdGhpcyBpcyBhIHN5bmNocm9ub3VzCisJCSAqIHdvcmsgaXRlbSwgb3RoZXJ3aXNlIGp1c3QgZnJlZSBpdC4KIAkJICovCi0JCWlmICghdGVzdF9iaXQoV1NfT05TVEFDSywgJndvcmstPnN0YXRlKSkKLQkJCXdiX2NsZWFyX3BlbmRpbmcod2IsIHdvcmspOwotCi0JCXdyb3RlICs9IHdiX3dyaXRlYmFjayh3YiwgJmFyZ3MpOwotCi0JCS8qCi0JCSAqIFRoaXMgaXMgYSBkYXRhIGludGVncml0eSB3cml0ZWJhY2ssIHNvIG9ubHkgZG8gdGhlCi0JCSAqIG5vdGlmaWNhdGlvbiB3aGVuIHdlIGhhdmUgY29tcGxldGVkIHRoZSB3b3JrLgotCQkgKi8KLQkJaWYgKHRlc3RfYml0KFdTX09OU1RBQ0ssICZ3b3JrLT5zdGF0ZSkpCi0JCQl3Yl9jbGVhcl9wZW5kaW5nKHdiLCB3b3JrKTsKKwkJaWYgKHdvcmstPmRvbmUpCisJCQljb21wbGV0ZSh3b3JrLT5kb25lKTsKKwkJZWxzZQorCQkJa2ZyZWUod29yayk7CiAJfQogCiAJLyoKQEAgLTkzOCwxNCArODIzLDkgQEAKIHZvaWQgd2FrZXVwX2ZsdXNoZXJfdGhyZWFkcyhsb25nIG5yX3BhZ2VzKQogewogCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGk7Ci0Jc3RydWN0IHdiX3dyaXRlYmFja19hcmdzIGFyZ3MgPSB7Ci0JCS5zeW5jX21vZGUJPSBXQl9TWU5DX05PTkUsCi0JfTsKIAotCWlmIChucl9wYWdlcykgewotCQlhcmdzLm5yX3BhZ2VzID0gbnJfcGFnZXM7Ci0JfSBlbHNlIHsKLQkJYXJncy5ucl9wYWdlcyA9IGdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZJTEVfRElSVFkpICsKKwlpZiAoIW5yX3BhZ2VzKSB7CisJCW5yX3BhZ2VzID0gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9ESVJUWSkgKwogCQkJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1VOU1RBQkxFX05GUyk7CiAJfQogCkBAIC05NTMsNyArODMzLDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShiZGksICZiZGlfbGlzdCwgYmRpX2xpc3QpIHsKIAkJaWYgKCFiZGlfaGFzX2RpcnR5X2lvKGJkaSkpCiAJCQljb250aW51ZTsKLQkJYmRpX2FsbG9jX3F1ZXVlX3dvcmsoYmRpLCAmYXJncyk7CisJCV9fYmRpX3N0YXJ0X3dyaXRlYmFjayhiZGksIG5yX3BhZ2VzLCBmYWxzZSwgZmFsc2UpOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KQEAgLTExNjIsMTcgKzEwNDIsMjAgQEAKIHsKIAl1bnNpZ25lZCBsb25nIG5yX2RpcnR5ID0gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9ESVJUWSk7CiAJdW5zaWduZWQgbG9uZyBucl91bnN0YWJsZSA9IGdsb2JhbF9wYWdlX3N0YXRlKE5SX1VOU1RBQkxFX05GUyk7Ci0Jc3RydWN0IHdiX3dyaXRlYmFja19hcmdzIGFyZ3MgPSB7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soZG9uZSk7CisJc3RydWN0IHdiX3dyaXRlYmFja193b3JrIHdvcmsgPSB7CiAJCS5zYgkJPSBzYiwKIAkJLnN5bmNfbW9kZQk9IFdCX1NZTkNfTk9ORSwKKwkJLmRvbmUJCT0gJmRvbmUsCiAJfTsKIAogCVdBUk5fT04oIXJ3c2VtX2lzX2xvY2tlZCgmc2ItPnNfdW1vdW50KSk7CiAKLQlhcmdzLm5yX3BhZ2VzID0gbnJfZGlydHkgKyBucl91bnN0YWJsZSArCisJd29yay5ucl9wYWdlcyA9IG5yX2RpcnR5ICsgbnJfdW5zdGFibGUgKwogCQkJKGlub2Rlc19zdGF0Lm5yX2lub2RlcyAtIGlub2Rlc19zdGF0Lm5yX3VudXNlZCk7CiAKLQliZGlfcXVldWVfd29ya19vbnN0YWNrKCZhcmdzKTsKKwliZGlfcXVldWVfd29yayhzYi0+c19iZGksICZ3b3JrKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkb25lKTsKIH0KIEVYUE9SVF9TWU1CT0wod3JpdGViYWNrX2lub2Rlc19zYik7CiAKQEAgLTEyMDQsMTYgKzEwODcsMjAgQEAKICAqLwogdm9pZCBzeW5jX2lub2Rlc19zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXN0cnVjdCB3Yl93cml0ZWJhY2tfYXJncyBhcmdzID0geworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGRvbmUpOworCXN0cnVjdCB3Yl93cml0ZWJhY2tfd29yayB3b3JrID0gewogCQkuc2IJCT0gc2IsCiAJCS5zeW5jX21vZGUJPSBXQl9TWU5DX0FMTCwKIAkJLm5yX3BhZ2VzCT0gTE9OR19NQVgsCiAJCS5yYW5nZV9jeWNsaWMJPSAwLAorCQkuZG9uZQkJPSAmZG9uZSwKIAl9OwogCiAJV0FSTl9PTighcndzZW1faXNfbG9ja2VkKCZzYi0+c191bW91bnQpKTsKIAotCWJkaV9xdWV1ZV93b3JrX29uc3RhY2soJmFyZ3MpOworCWJkaV9xdWV1ZV93b3JrKHNiLT5zX2JkaSwgJndvcmspOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmRvbmUpOworCiAJd2FpdF9zYl9pbm9kZXMoc2IpOwogfQogRVhQT1JUX1NZTUJPTChzeW5jX2lub2Rlc19zYik7CmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuYwppbmRleCAzY2RjNWY3Li40MzFiZTA3IDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rpci5jCisrKyBiL2ZzL2Z1c2UvZGlyLmMKQEAgLTEwMTYsNyArMTAxNiw3IEBACiAJCSAgIGV4aXN0LiAgU28gaWYgcGVybWlzc2lvbnMgYXJlIHJldm9rZWQgdGhpcyB3b24ndCBiZQogCQkgICBub3RpY2VkIGltbWVkaWF0ZWx5LCBvbmx5IGFmdGVyIHRoZSBhdHRyaWJ1dGUKIAkJICAgdGltZW91dCBoYXMgZXhwaXJlZCAqLwotCX0gZWxzZSBpZiAobWFzayAmIE1BWV9BQ0NFU1MpIHsKKwl9IGVsc2UgaWYgKG1hc2sgJiAoTUFZX0FDQ0VTUyB8IE1BWV9DSERJUikpIHsKIAkJZXJyID0gZnVzZV9hY2Nlc3MoaW5vZGUsIG1hc2spOwogCX0gZWxzZSBpZiAoKG1hc2sgJiBNQVlfRVhFQykgJiYgU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgewogCQlpZiAoIShpbm9kZS0+aV9tb2RlICYgU19JWFVHTykpIHsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvYW9wcy5jIGIvZnMvZ2ZzMi9hb3BzLmMKaW5kZXggOWY4YjUyNS4uNWU5NmNiZCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9hb3BzLmMKKysrIGIvZnMvZ2ZzMi9hb3BzLmMKQEAgLTEzNiwxMCArMTM2LDcgQEAKIAlpZiAocmV0IDw9IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBtcGFnZV93cml0ZXBhZ2UocGFnZSwgZ2ZzMl9nZXRfYmxvY2tfbm9hbGxvYywgd2JjKTsKLQlpZiAocmV0ID09IC1FQUdBSU4pCi0JCXJldCA9IGJsb2NrX3dyaXRlX2Z1bGxfcGFnZShwYWdlLCBnZnMyX2dldF9ibG9ja19ub2FsbG9jLCB3YmMpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIG5vYmhfd3JpdGVwYWdlKHBhZ2UsIGdmczJfZ2V0X2Jsb2NrX25vYWxsb2MsIHdiYyk7CiB9CiAKIC8qKgpAQCAtNjM3LDkgKzYzNCw3IEBACiAJCX0KIAl9CiAKLQllcnJvciA9IGdmczJfd3JpdGVfYWxsb2NfcmVxdWlyZWQoaXAsIHBvcywgbGVuLCAmYWxsb2NfcmVxdWlyZWQpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfdW5sb2NrOworCWFsbG9jX3JlcXVpcmVkID0gZ2ZzMl93cml0ZV9hbGxvY19yZXF1aXJlZChpcCwgcG9zLCBsZW4pOwogCiAJaWYgKGFsbG9jX3JlcXVpcmVkIHx8IGdmczJfaXNfamRhdGEoaXApKQogCQlnZnMyX3dyaXRlX2NhbGNfcmVzZXJ2KGlwLCBsZW4sICZkYXRhX2Jsb2NrcywgJmluZF9ibG9ja3MpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9ibWFwLmMgYi9mcy9nZnMyL2JtYXAuYwppbmRleCA0YTQ4YzBmLi42ZjQ4MjgwIDEwMDY0NAotLS0gYS9mcy9nZnMyL2JtYXAuYworKysgYi9mcy9nZnMyL2JtYXAuYwpAQCAtMTA0MCw3ICsxMDQwLDggQEAKIAkJZ290byBvdXQ7CiAKIAlpZiAoZ2ZzMl9pc19zdHVmZmVkKGlwKSkgewotCQl1NjQgZHNpemUgPSBzaXplICsgc2l6ZW9mKHN0cnVjdCBnZnMyX2lub2RlKTsKKwkJdTY0IGRzaXplID0gc2l6ZSArIHNpemVvZihzdHJ1Y3QgZ2ZzMl9kaW5vZGUpOworCQlpcC0+aV9kaXNrc2l6ZSA9IHNpemU7CiAJCWlwLT5pX2lub2RlLmlfbXRpbWUgPSBpcC0+aV9pbm9kZS5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZGliaCwgMSk7CiAJCWdmczJfZGlub2RlX291dChpcCwgZGliaC0+Yl9kYXRhKTsKQEAgLTEyNDMsMTMgKzEyNDQsMTIgQEAKICAqIEBpcDogdGhlIGZpbGUgYmVpbmcgd3JpdHRlbiB0bwogICogQG9mZnNldDogdGhlIG9mZnNldCB0byB3cml0ZSB0bwogICogQGxlbjogdGhlIG51bWJlciBvZiBieXRlcyBiZWluZyB3cml0dGVuCi0gKiBAYWxsb2NfcmVxdWlyZWQ6IHNldCB0byAxIGlmIGFuIGFsbG9jIGlzIHJlcXVpcmVkLCAwIG90aGVyd2lzZQogICoKLSAqIFJldHVybnM6IGVycm5vCisgKiBSZXR1cm5zOiAxIGlmIGFuIGFsbG9jIGlzIHJlcXVpcmVkLCAwIG90aGVyd2lzZQogICovCiAKIGludCBnZnMyX3dyaXRlX2FsbG9jX3JlcXVpcmVkKHN0cnVjdCBnZnMyX2lub2RlICppcCwgdTY0IG9mZnNldCwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBsZW4sIGludCAqYWxsb2NfcmVxdWlyZWQpCisJCQkgICAgICB1bnNpZ25lZCBpbnQgbGVuKQogewogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQigmaXAtPmlfaW5vZGUpOwogCXN0cnVjdCBidWZmZXJfaGVhZCBiaDsKQEAgLTEyNTcsMjYgKzEyNTcsMjMgQEAKIAl1NjQgbGJsb2NrLCBsYmxvY2tfc3RvcCwgc2l6ZTsKIAl1NjQgZW5kX29mX2ZpbGU7CiAKLQkqYWxsb2NfcmVxdWlyZWQgPSAwOwotCiAJaWYgKCFsZW4pCiAJCXJldHVybiAwOwogCiAJaWYgKGdmczJfaXNfc3R1ZmZlZChpcCkpIHsKIAkJaWYgKG9mZnNldCArIGxlbiA+CiAJCSAgICBzZHAtPnNkX3NiLnNiX2JzaXplIC0gc2l6ZW9mKHN0cnVjdCBnZnMyX2Rpbm9kZSkpCi0JCQkqYWxsb2NfcmVxdWlyZWQgPSAxOworCQkJcmV0dXJuIDE7CiAJCXJldHVybiAwOwogCX0KIAotCSphbGxvY19yZXF1aXJlZCA9IDE7CiAJc2hpZnQgPSBzZHAtPnNkX3NiLnNiX2JzaXplX3NoaWZ0OwogCUJVR19PTihnZnMyX2lzX2RpcihpcCkpOwogCWVuZF9vZl9maWxlID0gKGlwLT5pX2Rpc2tzaXplICsgc2RwLT5zZF9zYi5zYl9ic2l6ZSAtIDEpID4+IHNoaWZ0OwogCWxibG9jayA9IG9mZnNldCA+PiBzaGlmdDsKIAlsYmxvY2tfc3RvcCA9IChvZmZzZXQgKyBsZW4gKyBzZHAtPnNkX3NiLnNiX2JzaXplIC0gMSkgPj4gc2hpZnQ7CiAJaWYgKGxibG9ja19zdG9wID4gZW5kX29mX2ZpbGUpCi0JCXJldHVybiAwOworCQlyZXR1cm4gMTsKIAogCXNpemUgPSAobGJsb2NrX3N0b3AgLSBsYmxvY2spIDw8IHNoaWZ0OwogCWRvIHsKQEAgLTEyODQsMTIgKzEyODEsMTEgQEAKIAkJYmguYl9zaXplID0gc2l6ZTsKIAkJZ2ZzMl9ibG9ja19tYXAoJmlwLT5pX2lub2RlLCBsYmxvY2ssICZiaCwgMCk7CiAJCWlmICghYnVmZmVyX21hcHBlZCgmYmgpKQotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gMTsKIAkJc2l6ZSAtPSBiaC5iX3NpemU7CiAJCWxibG9jayArPSAoYmguYl9zaXplID4+IGlwLT5pX2lub2RlLmlfYmxrYml0cyk7CiAJfSB3aGlsZShzaXplID4gMCk7CiAKLQkqYWxsb2NfcmVxdWlyZWQgPSAwOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9nZnMyL2JtYXAuaCBiL2ZzL2dmczIvYm1hcC5oCmluZGV4IGM5ODMxNzcuLmEyMGE1MjEgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvYm1hcC5oCisrKyBiL2ZzL2dmczIvYm1hcC5oCkBAIC01Miw2ICs1Miw2IEBACiBpbnQgZ2ZzMl90cnVuY2F0ZWlfcmVzdW1lKHN0cnVjdCBnZnMyX2lub2RlICppcCk7CiBpbnQgZ2ZzMl9maWxlX2RlYWxsb2Moc3RydWN0IGdmczJfaW5vZGUgKmlwKTsKIGludCBnZnMyX3dyaXRlX2FsbG9jX3JlcXVpcmVkKHN0cnVjdCBnZnMyX2lub2RlICppcCwgdTY0IG9mZnNldCwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBsZW4sIGludCAqYWxsb2NfcmVxdWlyZWQpOworCQkJICAgICAgdW5zaWduZWQgaW50IGxlbik7CiAKICNlbmRpZiAvKiBfX0JNQVBfRE9UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9kaXIuYyBiL2ZzL2dmczIvZGlyLmMKaW5kZXggODI5NWM1Yi4uYjlkZDg4YSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9kaXIuYworKysgYi9mcy9nZnMyL2Rpci5jCkBAIC0zOTIsNyArMzkyLDcgQEAKIAl1bnNpZ25lZCB0b3RsZW4gPSBiZTE2X3RvX2NwdShkZW50LT5kZV9yZWNfbGVuKTsKIAogCWlmIChnZnMyX2RpcmVudF9zZW50aW5lbChkZW50KSkKLQkJYWN0dWFsID0gR0ZTMl9ESVJFTlRfU0laRSgwKTsKKwkJYWN0dWFsID0gMDsKIAlpZiAodG90bGVuIC0gYWN0dWFsID49IHJlcXVpcmVkKQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKQEAgLTk1NSw3ICs5NTUsMTIgQEAKIAkvKiBDaGFuZ2UgdGhlIHBvaW50ZXJzLgogCSAgIERvbid0IGJvdGhlciBkaXN0aW5ndWlzaGluZyBzdHVmZmVkIGZyb20gbm9uLXN0dWZmZWQuCiAJICAgVGhpcyBjb2RlIGlzIGNvbXBsaWNhdGVkIGVub3VnaCBhbHJlYWR5LiAqLwotCWxwID0ga21hbGxvYyhoYWxmX2xlbiAqIHNpemVvZihfX2JlNjQpLCBHRlBfTk9GUyB8IF9fR0ZQX05PRkFJTCk7CisJbHAgPSBrbWFsbG9jKGhhbGZfbGVuICogc2l6ZW9mKF9fYmU2NCksIEdGUF9OT0ZTKTsKKwlpZiAoIWxwKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBmYWlsX2JyZWxzZTsKKwl9CisKIAkvKiAgQ2hhbmdlIHRoZSBwb2ludGVycyAgKi8KIAlmb3IgKHggPSAwOyB4IDwgaGFsZl9sZW47IHgrKykKIAkJbHBbeF0gPSBjcHVfdG9fYmU2NChibik7CkBAIC0xMDYzLDcgKzEwNjgsOSBAQAogCiAJLyogIEFsbG9jYXRlIGJvdGggdGhlICJmcm9tIiBhbmQgInRvIiBidWZmZXJzIGluIG9uZSBiaWcgY2h1bmsgICovCiAKLQlidWYgPSBrY2FsbG9jKDMsIHNkcC0+c2RfaGFzaF9ic2l6ZSwgR0ZQX05PRlMgfCBfX0dGUF9OT0ZBSUwpOworCWJ1ZiA9IGtjYWxsb2MoMywgc2RwLT5zZF9oYXNoX2JzaXplLCBHRlBfTk9GUyk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOwogCiAJZm9yIChibG9jayA9IGRpcC0+aV9kaXNrc2l6ZSA+PiBzZHAtPnNkX2hhc2hfYnNpemVfc2hpZnQ7IGJsb2NrLS07KSB7CiAJCWVycm9yID0gZ2ZzMl9kaXJfcmVhZF9kYXRhKGRpcCwgKGNoYXIgKilidWYsCkBAIC0xMjMxLDYgKzEyMzgsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgKmdmczJfYWxsb2Nfc29ydF9idWZmZXIodW5zaWduZWQgc2l6ZSkKK3sKKwl2b2lkICpwdHIgPSBOVUxMOworCisJaWYgKHNpemUgPCBLTUFMTE9DX01BWF9TSVpFKQorCQlwdHIgPSBrbWFsbG9jKHNpemUsIEdGUF9OT0ZTIHwgX19HRlBfTk9XQVJOKTsKKwlpZiAoIXB0cikKKwkJcHRyID0gX192bWFsbG9jKHNpemUsIEdGUF9OT0ZTLCBQQUdFX0tFUk5FTCk7CisJcmV0dXJuIHB0cjsKK30KKworc3RhdGljIHZvaWQgZ2ZzMl9mcmVlX3NvcnRfYnVmZmVyKHZvaWQgKnB0cikKK3sKKwlpZiAoaXNfdm1hbGxvY19hZGRyKHB0cikpCisJCXZmcmVlKHB0cik7CisJZWxzZQorCQlrZnJlZShwdHIpOworfQorCiBzdGF0aWMgaW50IGdmczJfZGlyX3JlYWRfbGVhZihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgKm9mZnNldCwgdm9pZCAqb3BhcXVlLAogCQkJICAgICAgZmlsbGRpcl90IGZpbGxkaXIsIGludCAqY29waWVkLCB1bnNpZ25lZCAqZGVwdGgsCiAJCQkgICAgICB1NjQgbGVhZl9ubykKQEAgLTEyNzEsNyArMTI5Nyw3IEBACiAJICogOTkgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgdGhhdCBjYW4gZml0IGluIGEgc2luZ2xlCiAJICogbGVhZiBibG9jay4KIAkgKi8KLQlsYXJyID0gdm1hbGxvYygobGVhdmVzICsgZW50cmllcyArIDk5KSAqIHNpemVvZih2b2lkICopKTsKKwlsYXJyID0gZ2ZzMl9hbGxvY19zb3J0X2J1ZmZlcigobGVhdmVzICsgZW50cmllcyArIDk5KSAqIHNpemVvZih2b2lkICopKTsKIAlpZiAoIWxhcnIpCiAJCWdvdG8gb3V0OwogCWRhcnIgPSAoY29uc3Qgc3RydWN0IGdmczJfZGlyZW50ICoqKShsYXJyICsgbGVhdmVzKTsKQEAgLTEyODIsNyArMTMwOCw3IEBACiAJZG8gewogCQllcnJvciA9IGdldF9sZWFmKGlwLCBsZm4sICZiaCk7CiAJCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0X2tmcmVlOworCQkJZ290byBvdXRfZnJlZTsKIAkJbGYgPSAoc3RydWN0IGdmczJfbGVhZiAqKWJoLT5iX2RhdGE7CiAJCWxmbiA9IGJlNjRfdG9fY3B1KGxmLT5sZl9uZXh0KTsKIAkJaWYgKGxmLT5sZl9lbnRyaWVzKSB7CkBAIC0xMjkxLDcgKzEzMTcsNyBAQAogCQkJCQkJZ2ZzMl9kaXJlbnRfZ2F0aGVyLCBOVUxMLCAmZyk7CiAJCQllcnJvciA9IFBUUl9FUlIoZGVudCk7CiAJCQlpZiAoSVNfRVJSKGRlbnQpKQotCQkJCWdvdG8gb3V0X2tmcmVlOworCQkJCWdvdG8gb3V0X2ZyZWU7CiAJCQlpZiAoZW50cmllczIgIT0gZy5vZmZzZXQpIHsKIAkJCQlmc193YXJuKHNkcCwgIk51bWJlciBvZiBlbnRyaWVzIGNvcnJ1cHQgaW4gZGlyICIKIAkJCQkJCSJsZWFmICVsbHUsIGVudHJpZXMyICgldSkgIT0gIgpAQCAtMTMwMCw3ICsxMzI2LDcgQEAKIAkJCQkJZW50cmllczIsIGcub2Zmc2V0KTsKIAkJCQkJCiAJCQkJZXJyb3IgPSAtRUlPOwotCQkJCWdvdG8gb3V0X2tmcmVlOworCQkJCWdvdG8gb3V0X2ZyZWU7CiAJCQl9CiAJCQllcnJvciA9IDA7CiAJCQlsYXJyW2xlYWYrK10gPSBiaDsKQEAgLTEzMTIsMTAgKzEzMzgsMTAgQEAKIAlCVUdfT04oZW50cmllczIgIT0gZW50cmllcyk7CiAJZXJyb3IgPSBkb19maWxsZGlyX21haW4oaXAsIG9mZnNldCwgb3BhcXVlLCBmaWxsZGlyLCBkYXJyLAogCQkJCWVudHJpZXMsIGNvcGllZCk7Ci1vdXRfa2ZyZWU6CitvdXRfZnJlZToKIAlmb3IoaSA9IDA7IGkgPCBsZWFmOyBpKyspCiAJCWJyZWxzZShsYXJyW2ldKTsKLQl2ZnJlZShsYXJyKTsKKwlnZnMyX2ZyZWVfc29ydF9idWZmZXIobGFycik7CiBvdXQ6CiAJcmV0dXJuIGVycm9yOwogfQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9maWxlLmMgYi9mcy9nZnMyL2ZpbGUuYwppbmRleCBlZDlhOTRmLi40ZWRkNjYyIDEwMDY0NAotLS0gYS9mcy9nZnMyL2ZpbGUuYworKysgYi9mcy9nZnMyL2ZpbGUuYwpAQCAtMzUxLDcgKzM1MSw2IEBACiAJdW5zaWduZWQgbG9uZyBsYXN0X2luZGV4OwogCXU2NCBwb3MgPSBwYWdlLT5pbmRleCA8PCBQQUdFX0NBQ0hFX1NISUZUOwogCXVuc2lnbmVkIGludCBkYXRhX2Jsb2NrcywgaW5kX2Jsb2NrcywgcmJsb2NrczsKLQlpbnQgYWxsb2NfcmVxdWlyZWQgPSAwOwogCXN0cnVjdCBnZnMyX2hvbGRlciBnaDsKIAlzdHJ1Y3QgZ2ZzMl9hbGxvYyAqYWw7CiAJaW50IHJldDsKQEAgLTM2NCw4ICszNjMsNyBAQAogCXNldF9iaXQoR0xGX0RJUlRZLCAmaXAtPmlfZ2wtPmdsX2ZsYWdzKTsKIAlzZXRfYml0KEdJRl9TV19QQUdFRCwgJmlwLT5pX2ZsYWdzKTsKIAotCXJldCA9IGdmczJfd3JpdGVfYWxsb2NfcmVxdWlyZWQoaXAsIHBvcywgUEFHRV9DQUNIRV9TSVpFLCAmYWxsb2NfcmVxdWlyZWQpOwotCWlmIChyZXQgfHwgIWFsbG9jX3JlcXVpcmVkKQorCWlmICghZ2ZzMl93cml0ZV9hbGxvY19yZXF1aXJlZChpcCwgcG9zLCBQQUdFX0NBQ0hFX1NJWkUpKQogCQlnb3RvIG91dF91bmxvY2s7CiAJcmV0ID0gLUVOT01FTTsKIAlhbCA9IGdmczJfYWxsb2NfZ2V0KGlwKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZ2xvY2suYyBiL2ZzL2dmczIvZ2xvY2suYwppbmRleCBkZGNkYmY0Li45YWRmOGY5IDEwMDY0NAotLS0gYS9mcy9nZnMyL2dsb2NrLmMKKysrIGIvZnMvZ2ZzMi9nbG9jay5jCkBAIC0zMjgsNiArMzI4LDMwIEBACiB9CiAKIC8qKgorICogZG9fZXJyb3IgLSBTb21ldGhpbmcgdW5leHBlY3RlZCBoYXMgaGFwcGVuZWQgZHVyaW5nIGEgbG9jayByZXF1ZXN0CisgKgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkb19lcnJvcihzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIGNvbnN0IGludCByZXQpCit7CisJc3RydWN0IGdmczJfaG9sZGVyICpnaCwgKnRtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShnaCwgdG1wLCAmZ2wtPmdsX2hvbGRlcnMsIGdoX2xpc3QpIHsKKwkJaWYgKHRlc3RfYml0KEhJRl9IT0xERVIsICZnaC0+Z2hfaWZsYWdzKSkKKwkJCWNvbnRpbnVlOworCQlpZiAocmV0ICYgTE1fT1VUX0VSUk9SKQorCQkJZ2gtPmdoX2Vycm9yID0gLUVJTzsKKwkJZWxzZSBpZiAoZ2gtPmdoX2ZsYWdzICYgKExNX0ZMQUdfVFJZIHwgTE1fRkxBR19UUllfMUNCKSkKKwkJCWdoLT5naF9lcnJvciA9IEdMUl9UUllGQUlMRUQ7CisJCWVsc2UKKwkJCWNvbnRpbnVlOworCQlsaXN0X2RlbF9pbml0KCZnaC0+Z2hfbGlzdCk7CisJCXRyYWNlX2dmczJfZ2xvY2tfcXVldWUoZ2gsIDApOworCQlnZnMyX2hvbGRlcl93YWtlKGdoKTsKKwl9Cit9CisKKy8qKgogICogZG9fcHJvbW90ZSAtIHByb21vdGUgYXMgbWFueSByZXF1ZXN0cyBhcyBwb3NzaWJsZSBvbiB0aGUgY3VycmVudCBxdWV1ZQogICogQGdsOiBUaGUgZ2xvY2sKICAqIApAQCAtMzc1LDM2ICszOTksMTMgQEAKIAkJfQogCQlpZiAoZ2gtPmdoX2xpc3QucHJldiA9PSAmZ2wtPmdsX2hvbGRlcnMpCiAJCQlyZXR1cm4gMTsKKwkJZG9fZXJyb3IoZ2wsIDApOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogZG9fZXJyb3IgLSBTb21ldGhpbmcgdW5leHBlY3RlZCBoYXMgaGFwcGVuZWQgZHVyaW5nIGEgbG9jayByZXF1ZXN0Ci0gKgotICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkb19lcnJvcihzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIGNvbnN0IGludCByZXQpCi17Ci0Jc3RydWN0IGdmczJfaG9sZGVyICpnaCwgKnRtcDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShnaCwgdG1wLCAmZ2wtPmdsX2hvbGRlcnMsIGdoX2xpc3QpIHsKLQkJaWYgKHRlc3RfYml0KEhJRl9IT0xERVIsICZnaC0+Z2hfaWZsYWdzKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAocmV0ICYgTE1fT1VUX0VSUk9SKQotCQkJZ2gtPmdoX2Vycm9yID0gLUVJTzsKLQkJZWxzZSBpZiAoZ2gtPmdoX2ZsYWdzICYgKExNX0ZMQUdfVFJZIHwgTE1fRkxBR19UUllfMUNCKSkKLQkJCWdoLT5naF9lcnJvciA9IEdMUl9UUllGQUlMRUQ7Ci0JCWVsc2UKLQkJCWNvbnRpbnVlOwotCQlsaXN0X2RlbF9pbml0KCZnaC0+Z2hfbGlzdCk7Ci0JCXRyYWNlX2dmczJfZ2xvY2tfcXVldWUoZ2gsIDApOwotCQlnZnMyX2hvbGRlcl93YWtlKGdoKTsKLQl9Ci19Ci0KLS8qKgogICogZmluZF9maXJzdF93YWl0ZXIgLSBmaW5kIHRoZSBmaXJzdCBnaCB0aGF0J3Mgd2FpdGluZyBmb3IgdGhlIGdsb2NrCiAgKiBAZ2w6IHRoZSBnbG9jawogICovCkBAIC0xMDYyLDYgKzEwNjMsOSBAQAogCiAJc3Bpbl9sb2NrKCZnbC0+Z2xfc3Bpbik7CiAJYWRkX3RvX3F1ZXVlKGdoKTsKKwlpZiAoKExNX0ZMQUdfTk9FWFAgJiBnaC0+Z2hfZmxhZ3MpICYmCisJICAgIHRlc3RfYW5kX2NsZWFyX2JpdChHTEZfRlJPWkVOLCAmZ2wtPmdsX2ZsYWdzKSkKKwkJc2V0X2JpdChHTEZfUkVQTFlfUEVORElORywgJmdsLT5nbF9mbGFncyk7CiAJcnVuX3F1ZXVlKGdsLCAxKTsKIAlzcGluX3VubG9jaygmZ2wtPmdsX3NwaW4pOwogCkBAIC0xMzE5LDYgKzEzMjMsMzYgQEAKIH0KIAogLyoqCisgKiBnZnMyX3Nob3VsZF9mcmVlemUgLSBGaWd1cmUgb3V0IGlmIGdsb2NrIHNob3VsZCBiZSBmcm96ZW4KKyAqIEBnbDogVGhlIGdsb2NrIGluIHF1ZXN0aW9uCisgKgorICogR2xvY2tzIGFyZSBub3QgZnJvemVuIGlmIChhKSB0aGUgcmVzdWx0IG9mIHRoZSBkbG0gb3BlcmF0aW9uIGlzCisgKiBhbiBlcnJvciwgKGIpIHRoZSBsb2NraW5nIG9wZXJhdGlvbiB3YXMgYW4gdW5sb2NrIG9wZXJhdGlvbiBvcgorICogKGMpIGlmIHRoZXJlIGlzIGEgIm5vZXhwIiBmbGFnZ2VkIHJlcXVlc3QgYW55d2hlcmUgaW4gdGhlIHF1ZXVlCisgKgorICogUmV0dXJuczogMSBpZiBmcmVlemluZyBzaG91bGQgb2NjdXIsIDAgb3RoZXJ3aXNlCisgKi8KKworc3RhdGljIGludCBnZnMyX3Nob3VsZF9mcmVlemUoY29uc3Qgc3RydWN0IGdmczJfZ2xvY2sgKmdsKQoreworCWNvbnN0IHN0cnVjdCBnZnMyX2hvbGRlciAqZ2g7CisKKwlpZiAoZ2wtPmdsX3JlcGx5ICYgfkxNX09VVF9TVF9NQVNLKQorCQlyZXR1cm4gMDsKKwlpZiAoZ2wtPmdsX3RhcmdldCA9PSBMTV9TVF9VTkxPQ0tFRCkKKwkJcmV0dXJuIDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGdoLCAmZ2wtPmdsX2hvbGRlcnMsIGdoX2xpc3QpIHsKKwkJaWYgKHRlc3RfYml0KEhJRl9IT0xERVIsICZnaC0+Z2hfaWZsYWdzKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoTE1fRkxBR19OT0VYUCAmIGdoLT5naF9mbGFncykKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCisvKioKICAqIGdmczJfZ2xvY2tfY29tcGxldGUgLSBDYWxsYmFjayB1c2VkIGJ5IGxvY2tpbmcKICAqIEBnbDogUG9pbnRlciB0byB0aGUgZ2xvY2sKICAqIEByZXQ6IFRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGUgZGxtCkBAIC0xMzI4LDE4ICsxMzYyLDE3IEBACiB2b2lkIGdmczJfZ2xvY2tfY29tcGxldGUoc3RydWN0IGdmczJfZ2xvY2sgKmdsLCBpbnQgcmV0KQogewogCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZnbC0+Z2xfc2JkLT5zZF9sb2Nrc3RydWN0OworCiAJZ2wtPmdsX3JlcGx5ID0gcmV0OworCiAJaWYgKHVubGlrZWx5KHRlc3RfYml0KERGTF9CTE9DS19MT0NLUywgJmxzLT5sc19mbGFncykpKSB7Ci0JCXN0cnVjdCBnZnMyX2hvbGRlciAqZ2g7CiAJCXNwaW5fbG9jaygmZ2wtPmdsX3NwaW4pOwotCQlnaCA9IGZpbmRfZmlyc3Rfd2FpdGVyKGdsKTsKLQkJaWYgKCghKGdoICYmIChnaC0+Z2hfZmxhZ3MgJiBMTV9GTEFHX05PRVhQKSkgJiYKLQkJICAgICAoZ2wtPmdsX3RhcmdldCAhPSBMTV9TVF9VTkxPQ0tFRCkpIHx8Ci0JCSAgICAoKHJldCAmIH5MTV9PVVRfU1RfTUFTSykgIT0gMCkpCisJCWlmIChnZnMyX3Nob3VsZF9mcmVlemUoZ2wpKSB7CiAJCQlzZXRfYml0KEdMRl9GUk9aRU4sICZnbC0+Z2xfZmxhZ3MpOwotCQlzcGluX3VubG9jaygmZ2wtPmdsX3NwaW4pOwotCQlpZiAodGVzdF9iaXQoR0xGX0ZST1pFTiwgJmdsLT5nbF9mbGFncykpCisJCQlzcGluX3VubG9jaygmZ2wtPmdsX3NwaW4pOwogCQkJcmV0dXJuOworCQl9CisJCXNwaW5fdW5sb2NrKCZnbC0+Z2xfc3Bpbik7CiAJfQogCXNldF9iaXQoR0xGX1JFUExZX1BFTkRJTkcsICZnbC0+Z2xfZmxhZ3MpOwogCWdmczJfZ2xvY2tfaG9sZChnbCk7CkBAIC0xMzQ4LDcgKzEzODEsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgZ2ZzMl9zaHJpbmtfZ2xvY2tfbWVtb3J5KGludCBuciwgZ2ZwX3QgZ2ZwX21hc2spCitzdGF0aWMgaW50IGdmczJfc2hyaW5rX2dsb2NrX21lbW9yeShzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywgaW50IG5yLCBnZnBfdCBnZnBfbWFzaykKIHsKIAlzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2w7CiAJaW50IG1heV9kZW1vdGU7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2luY29yZS5oIGIvZnMvZ2ZzMi9pbmNvcmUuaAppbmRleCBiNWQ3MzYzLi44ZmNiY2U0IDEwMDY0NAotLS0gYS9mcy9nZnMyL2luY29yZS5oCisrKyBiL2ZzL2dmczIvaW5jb3JlLmgKQEAgLTQ2MCw2ICs0NjAsNyBAQAogCVNERl9OT0JBUlJJRVJTCQk9IDMsCiAJU0RGX05PUkVDT1ZFUlkJCT0gNCwKIAlTREZfREVNT1RFCQk9IDUsCisJU0RGX05PSk9VUk5BTElECQk9IDYsCiB9OwogCiAjZGVmaW5lIEdGUzJfRlNOQU1FX0xFTgkJMjU2CmRpZmYgLS1naXQgYS9mcy9nZnMyL2lub2RlLmMgYi9mcy9nZnMyL2lub2RlLmMKaW5kZXggYjU2MTJjYi4uZjAzYWZkOSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jCisrKyBiL2ZzL2dmczIvaW5vZGUuYwpAQCAtMTY5LDcgKzE2OSw3IEBACiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXA7Ci0Jc3RydWN0IGdmczJfZ2xvY2sgKmlvX2dsOworCXN0cnVjdCBnZnMyX2dsb2NrICppb19nbCA9IE5VTEw7CiAJaW50IGVycm9yOwogCiAJaW5vZGUgPSBnZnMyX2lnZXQoc2IsIG5vX2FkZHIpOwpAQCAtMTk4LDYgKzE5OCw3IEBACiAJCWlwLT5pX2lvcGVuX2doLmdoX2dsLT5nbF9vYmplY3QgPSBpcDsKIAogCQlnZnMyX2dsb2NrX3B1dChpb19nbCk7CisJCWlvX2dsID0gTlVMTDsKIAogCQlpZiAoKHR5cGUgPT0gRFRfVU5LTk9XTikgJiYgKG5vX2Zvcm1hbF9pbm8gPT0gMCkpCiAJCQlnb3RvIGdmczJfbmZzYnlwYXNzOwpAQCAtMjI4LDcgKzIyOSw4IEBACiBmYWlsX2dsb2NrOgogCWdmczJfZ2xvY2tfZHEoJmlwLT5pX2lvcGVuX2doKTsKIGZhaWxfaW9wZW46Ci0JZ2ZzMl9nbG9ja19wdXQoaW9fZ2wpOworCWlmIChpb19nbCkKKwkJZ2ZzMl9nbG9ja19wdXQoaW9fZ2wpOwogZmFpbF9wdXQ6CiAJaWYgKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpCiAJCWlwLT5pX2dsLT5nbF9vYmplY3QgPSBOVUxMOwpAQCAtMjU2LDcgKzI1OCw3IEBACiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHA7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwOwotCXN0cnVjdCBnZnMyX2dsb2NrICppb19nbDsKKwlzdHJ1Y3QgZ2ZzMl9nbG9jayAqaW9fZ2wgPSBOVUxMOwogCWludCBlcnJvcjsKIAlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2g7CiAJc3RydWN0IGlub2RlICppbm9kZTsKQEAgLTI5Myw2ICsyOTUsNyBAQAogCiAJaXAtPmlfaW9wZW5fZ2guZ2hfZ2wtPmdsX29iamVjdCA9IGlwOwogCWdmczJfZ2xvY2tfcHV0KGlvX2dsKTsKKwlpb19nbCA9IE5VTEw7CiAKIAlpbm9kZS0+aV9tb2RlID0gRFQySUYoRFRfVU5LTk9XTik7CiAKQEAgLTMxOSw3ICszMjIsOCBAQAogZmFpbF9nbG9jazoKIAlnZnMyX2dsb2NrX2RxKCZpcC0+aV9pb3Blbl9naCk7CiBmYWlsX2lvcGVuOgotCWdmczJfZ2xvY2tfcHV0KGlvX2dsKTsKKwlpZiAoaW9fZ2wpCisJCWdmczJfZ2xvY2tfcHV0KGlvX2dsKTsKIGZhaWxfcHV0OgogCWlwLT5pX2dsLT5nbF9vYmplY3QgPSBOVUxMOwogCWdmczJfZ2xvY2tfcHV0KGlwLT5pX2dsKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2ZzdHlwZS5jIGIvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKaW5kZXggMzU5M2IzYS4uNDVhNGEzNiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKKysrIGIvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAogCXNiLT5zX2ZzX2luZm8gPSBzZHA7CiAJc2RwLT5zZF92ZnMgPSBzYjsKLQorCXNldF9iaXQoU0RGX05PSk9VUk5BTElELCAmc2RwLT5zZF9mbGFncyk7CiAJZ2ZzMl90dW5lX2luaXQoJnNkcC0+c2RfdHVuZSk7CiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZHAtPnNkX2dsb2NrX3dhaXQpOwpAQCAtMTA1MCw3ICsxMDUwLDggQEAKIAkJCXJldCA9IG1hdGNoX2ludCgmdG1wWzBdLCAmb3B0aW9uKTsKIAkJCWlmIChyZXQgfHwgb3B0aW9uIDwgMCkgCiAJCQkJZ290byBob3N0ZGF0YV9lcnJvcjsKLQkJCWxzLT5sc19qaWQgPSBvcHRpb247CisJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFNERl9OT0pPVVJOQUxJRCwgJnNkcC0+c2RfZmxhZ3MpKQorCQkJCWxzLT5sc19qaWQgPSBvcHRpb247CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfaWQ6CiAJCQkvKiBPYnNvbGV0ZSwgYnV0IGxlZnQgZm9yIGJhY2t3YXJkIGNvbXBhdCBwdXJwb3NlcyAqLwpAQCAtMTEwMiw2ICsxMTAzLDI0IEBACiAJCWxtLT5sbV91bm1vdW50KHNkcCk7CiB9CiAKK3N0YXRpYyBpbnQgZ2ZzMl9qb3VybmFsaWRfd2FpdCh2b2lkICp3b3JkKQoreworCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJcmV0dXJuIC1FSU5UUjsKKwlzY2hlZHVsZSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdhaXRfb25fam91cm5hbChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKK3sKKwlpZiAoc2RwLT5zZF9hcmdzLmFyX3NwZWN0YXRvcikKKwkJcmV0dXJuIDA7CisJaWYgKHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX21vdW50ID09IE5VTEwpCisJCXJldHVybiAwOworCisJcmV0dXJuIHdhaXRfb25fYml0KCZzZHAtPnNkX2ZsYWdzLCBTREZfTk9KT1VSTkFMSUQsIGdmczJfam91cm5hbGlkX3dhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7Cit9CisKIHZvaWQgZ2ZzMl9vbmxpbmVfdWV2ZW50KHN0cnVjdCBnZnMyX3NiZCAqc2RwKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzZHAtPnNkX3ZmczsKQEAgLTExOTQsNiArMTIxMywxMCBAQAogCWlmIChlcnJvcikKIAkJZ290byBmYWlsX2xvY2tpbmc7CiAKKwllcnJvciA9IHdhaXRfb25fam91cm5hbChzZHApOworCWlmIChlcnJvcikKKwkJZ290byBmYWlsX3NiOworCiAJZXJyb3IgPSBpbml0X2lub2RlcyhzZHAsIERPKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZmFpbF9zYjsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvcXVvdGEuYyBiL2ZzL2dmczIvcXVvdGEuYwppbmRleCA0OTY2N2Q2Li44YmI2NDNjIDEwMDY0NAotLS0gYS9mcy9nZnMyL3F1b3RhLmMKKysrIGIvZnMvZ2ZzMi9xdW90YS5jCkBAIC03Nyw3ICs3Nyw3IEBACiBzdGF0aWMgYXRvbWljX3QgcWRfbHJ1X2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHFkX2xydV9sb2NrKTsKIAotaW50IGdmczJfc2hyaW5rX3FkX21lbW9yeShpbnQgbnIsIGdmcF90IGdmcF9tYXNrKQoraW50IGdmczJfc2hyaW5rX3FkX21lbW9yeShzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywgaW50IG5yLCBnZnBfdCBnZnBfbWFzaykKIHsKIAlzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICpxZDsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcDsKQEAgLTY5NCwxMCArNjk0LDggQEAKIAkJaWYgKCFidWZmZXJfbWFwcGVkKGJoKSkKIAkJCWdvdG8gdW5sb2NrX291dDsKIAkJLyogSWYgaXQncyBhIG5ld2x5IGFsbG9jYXRlZCBkaXNrIGJsb2NrIGZvciBxdW90YSwgemVybyBpdCAqLwotCQlpZiAoYnVmZmVyX25ldyhiaCkpIHsKLQkJCW1lbXNldChiaC0+Yl9kYXRhLCAwLCBiaC0+Yl9zaXplKTsKLQkJCXNldF9idWZmZXJfdXB0b2RhdGUoYmgpOwotCQl9CisJCWlmIChidWZmZXJfbmV3KGJoKSkKKwkJCXplcm9fdXNlcihwYWdlLCBwb3MgLSBibG9ja3NpemUsIGJoLT5iX3NpemUpOwogCX0KIAogCWlmIChQYWdlVXB0b2RhdGUocGFnZSkpCkBAIC03MjMsNyArNzIxLDcgQEAKIAogCS8qIElmIHF1b3RhIHN0cmFkZGxlcyBwYWdlIGJvdW5kYXJ5LCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgcmVzdCBvZiB0aGUKIAkgKiBxdW90YSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IHBhZ2UgKi8KLQlpZiAob2Zmc2V0ICE9IDApIHsgLyogZmlyc3QgcGFnZSwgb2Zmc2V0IGlzIGNsb3NlciB0byBQQUdFX0NBQ0hFX1NJWkUgKi8KKwlpZiAoKG9mZnNldCArIHNpemVvZihzdHJ1Y3QgZ2ZzMl9xdW90YSkpID4gUEFHRV9DQUNIRV9TSVpFKSB7CiAJCXB0ciA9IHB0ciArIG5ieXRlczsKIAkJbmJ5dGVzID0gc2l6ZW9mKHN0cnVjdCBnZnMyX3F1b3RhKSAtIG5ieXRlczsKIAkJb2Zmc2V0ID0gMDsKQEAgLTc4OSwxNSArNzg3LDkgQEAKIAkJZ290byBvdXQ7CiAKIAlmb3IgKHggPSAwOyB4IDwgbnVtX3FkOyB4KyspIHsKLQkJaW50IGFsbG9jX3JlcXVpcmVkOwotCiAJCW9mZnNldCA9IHFkMm9mZnNldChxZGFbeF0pOwotCQllcnJvciA9IGdmczJfd3JpdGVfYWxsb2NfcmVxdWlyZWQoaXAsIG9mZnNldCwKLQkJCQkJCSAgc2l6ZW9mKHN0cnVjdCBnZnMyX3F1b3RhKSwKLQkJCQkJCSAgJmFsbG9jX3JlcXVpcmVkKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBvdXRfZ3VubG9jazsKLQkJaWYgKGFsbG9jX3JlcXVpcmVkKQorCQlpZiAoZ2ZzMl93cml0ZV9hbGxvY19yZXF1aXJlZChpcCwgb2Zmc2V0LAorCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IGdmczJfcXVvdGEpKSkKIAkJCW5hbGxvYysrOwogCX0KIApAQCAtMTU4NiwxMCArMTU3OCw3IEBACiAJCWdvdG8gb3V0X2k7CiAKIAlvZmZzZXQgPSBxZDJvZmZzZXQocWQpOwotCWVycm9yID0gZ2ZzMl93cml0ZV9hbGxvY19yZXF1aXJlZChpcCwgb2Zmc2V0LCBzaXplb2Yoc3RydWN0IGdmczJfcXVvdGEpLAotCQkJCQkgICZhbGxvY19yZXF1aXJlZCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9pOworCWFsbG9jX3JlcXVpcmVkID0gZ2ZzMl93cml0ZV9hbGxvY19yZXF1aXJlZChpcCwgb2Zmc2V0LCBzaXplb2Yoc3RydWN0IGdmczJfcXVvdGEpKTsKIAlpZiAoYWxsb2NfcmVxdWlyZWQpIHsKIAkJYWwgPSBnZnMyX2FsbG9jX2dldChpcCk7CiAJCWlmIChhbCA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9xdW90YS5oIGIvZnMvZ2ZzMi9xdW90YS5oCmluZGV4IDE5NWY2MGMuLmU3ZDIzNmMgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvcXVvdGEuaAorKysgYi9mcy9nZnMyL3F1b3RhLmgKQEAgLTUxLDcgKzUxLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1leHRlcm4gaW50IGdmczJfc2hyaW5rX3FkX21lbW9yeShpbnQgbnIsIGdmcF90IGdmcF9tYXNrKTsKK2V4dGVybiBpbnQgZ2ZzMl9zaHJpbmtfcWRfbWVtb3J5KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLCBpbnQgbnIsIGdmcF90IGdmcF9tYXNrKTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgcXVvdGFjdGxfb3BzIGdmczJfcXVvdGFjdGxfb3BzOwogCiAjZW5kaWYgLyogX19RVU9UQV9ET1RfSF9fICovCmRpZmYgLS1naXQgYS9mcy9nZnMyL3N1cGVyLmMgYi9mcy9nZnMyL3N1cGVyLmMKaW5kZXggNGQxYWFkMy4uNDE0MDgxMSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9zdXBlci5jCisrKyBiL2ZzL2dmczIvc3VwZXIuYwpAQCAtMzQyLDggKzM0Miw2IEBACiB7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGpkLT5qZF9pbm9kZSk7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKGpkLT5qZF9pbm9kZSk7Ci0JaW50IGFyOwotCWludCBlcnJvcjsKIAogCWlmIChpcC0+aV9kaXNrc2l6ZSA8ICg4IDw8IDIwKSB8fCBpcC0+aV9kaXNrc2l6ZSA+ICgxIDw8IDMwKSB8fAogCSAgICAoaXAtPmlfZGlza3NpemUgJiAoc2RwLT5zZF9zYi5zYl9ic2l6ZSAtIDEpKSkgewpAQCAtMzUyLDEzICszNTAsMTIgQEAKIAl9CiAJamQtPmpkX2Jsb2NrcyA9IGlwLT5pX2Rpc2tzaXplID4+IHNkcC0+c2Rfc2Iuc2JfYnNpemVfc2hpZnQ7CiAKLQllcnJvciA9IGdmczJfd3JpdGVfYWxsb2NfcmVxdWlyZWQoaXAsIDAsIGlwLT5pX2Rpc2tzaXplLCAmYXIpOwotCWlmICghZXJyb3IgJiYgYXIpIHsKKwlpZiAoZ2ZzMl93cml0ZV9hbGxvY19yZXF1aXJlZChpcCwgMCwgaXAtPmlfZGlza3NpemUpKSB7CiAJCWdmczJfY29uc2lzdF9pbm9kZShpcCk7Ci0JCWVycm9yID0gLUVJTzsKKwkJcmV0dXJuIC1FSU87CiAJfQogCi0JcmV0dXJuIGVycm9yOworCXJldHVybiAwOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2ZzL2dmczIvc3lzLmMgYi9mcy9nZnMyL3N5cy5jCmluZGV4IDM3ZjUzOTMuLmQwMTlkMGQgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvc3lzLmMKKysrIGIvZnMvZ2ZzMi9zeXMuYwpAQCAtMzI1LDYgKzMyNSwzMCBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBscy0+bHNfZmlyc3QpOwogfQogCitzdGF0aWMgc3NpemVfdCBsa2ZpcnN0X3N0b3JlKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJdW5zaWduZWQgZmlyc3Q7CisJaW50IHJ2OworCisJcnYgPSBzc2NhbmYoYnVmLCAiJXUiLCAmZmlyc3QpOworCWlmIChydiAhPSAxIHx8IGZpcnN0ID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3Bpbl9sb2NrKCZzZHAtPnNkX2ppbmRleF9zcGluKTsKKwlydiA9IC1FQlVTWTsKKwlpZiAodGVzdF9iaXQoU0RGX05PSk9VUk5BTElELCAmc2RwLT5zZF9mbGFncykgPT0gMCkKKwkJZ290byBvdXQ7CisJcnYgPSAtRUlOVkFMOworCWlmIChzZHAtPnNkX2FyZ3MuYXJfc3BlY3RhdG9yKQorCQlnb3RvIG91dDsKKwlpZiAoc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fbW91bnQgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisgICAgICAgIHNkcC0+c2RfbG9ja3N0cnVjdC5sc19maXJzdCA9IGZpcnN0OworICAgICAgICBydiA9IDA7CitvdXQ6CisgICAgICAgIHNwaW5fdW5sb2NrKCZzZHAtPnNkX2ppbmRleF9zcGluKTsKKyAgICAgICAgcmV0dXJuIHJ2ID8gcnYgOiBsZW47Cit9CisKIHN0YXRpYyBzc2l6ZV90IGZpcnN0X2RvbmVfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQogewogCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CkBAIC0zNzcsMTQgKzQwMSw0MSBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfamlkKTsKIH0KIAorc3RhdGljIHNzaXplX3QgamlkX3N0b3JlKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisgICAgICAgIHVuc2lnbmVkIGppZDsKKwlpbnQgcnY7CisKKwlydiA9IHNzY2FuZihidWYsICIldSIsICZqaWQpOworCWlmIChydiAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9jaygmc2RwLT5zZF9qaW5kZXhfc3Bpbik7CisJcnYgPSAtRUlOVkFMOworCWlmIChzZHAtPnNkX2FyZ3MuYXJfc3BlY3RhdG9yKQorCQlnb3RvIG91dDsKKwlpZiAoc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fbW91bnQgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisJcnYgPSAtRUJVU1k7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChTREZfTk9KT1VSTkFMSUQsICZzZHAtPnNkX2ZsYWdzKSA9PSAwKQorCQlnb3RvIG91dDsKKwlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfamlkID0gamlkOworCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJd2FrZV91cF9iaXQoJnNkcC0+c2RfZmxhZ3MsIFNERl9OT0pPVVJOQUxJRCk7CisJcnYgPSAwOworb3V0OgorCXNwaW5fdW5sb2NrKCZzZHAtPnNkX2ppbmRleF9zcGluKTsKKwlyZXR1cm4gcnYgPyBydiA6IGxlbjsKK30KKwogI2RlZmluZSBHRExNX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKSBcCiBzdGF0aWMgc3RydWN0IGdmczJfYXR0ciBnZGxtX2F0dHJfIyNfbmFtZSA9IF9fQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpCiAKIEdETE1fQVRUUihwcm90b19uYW1lLAkJMDQ0NCwgcHJvdG9fbmFtZV9zaG93LAkJTlVMTCk7CiBHRExNX0FUVFIoYmxvY2ssCQkwNjQ0LCBibG9ja19zaG93LAkJYmxvY2tfc3RvcmUpOwogR0RMTV9BVFRSKHdpdGhkcmF3LAkJMDY0NCwgd2l0aGRyYXdfc2hvdywJCXdpdGhkcmF3X3N0b3JlKTsKLUdETE1fQVRUUihqaWQsCQkJMDQ0NCwgamlkX3Nob3csCQkJTlVMTCk7Ci1HRExNX0FUVFIoZmlyc3QsCQkwNDQ0LCBsa2ZpcnN0X3Nob3csCQlOVUxMKTsKK0dETE1fQVRUUihqaWQsCQkJMDY0NCwgamlkX3Nob3csCQkJamlkX3N0b3JlKTsKK0dETE1fQVRUUihmaXJzdCwJCTA2NDQsIGxrZmlyc3Rfc2hvdywJCWxrZmlyc3Rfc3RvcmUpOwogR0RMTV9BVFRSKGZpcnN0X2RvbmUsCQkwNDQ0LCBmaXJzdF9kb25lX3Nob3csCQlOVUxMKTsKIEdETE1fQVRUUihyZWNvdmVyLAkJMDYwMCwgTlVMTCwJCQlyZWNvdmVyX3N0b3JlKTsKIEdETE1fQVRUUihyZWNvdmVyX2RvbmUsCQkwNDQ0LCByZWNvdmVyX2RvbmVfc2hvdywJTlVMTCk7CkBAIC01NjQsNyArNjE1LDcgQEAKIAogCWFkZF91ZXZlbnRfdmFyKGVudiwgIkxPQ0tUQUJMRT0lcyIsIHNkcC0+c2RfdGFibGVfbmFtZSk7CiAJYWRkX3VldmVudF92YXIoZW52LCAiTE9DS1BST1RPPSVzIiwgc2RwLT5zZF9wcm90b19uYW1lKTsKLQlpZiAoIXNkcC0+c2RfYXJncy5hcl9zcGVjdGF0b3IpCisJaWYgKCF0ZXN0X2JpdChTREZfTk9KT1VSTkFMSUQsICZzZHAtPnNkX2ZsYWdzKSkKIAkJYWRkX3VldmVudF92YXIoZW52LCAiSk9VUk5BTElEPSV1Iiwgc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2ppZCk7CiAJaWYgKGdmczJfdXVpZF92YWxpZCh1dWlkKSkKIAkJYWRkX3VldmVudF92YXIoZW52LCAiVVVJRD0lcFVCIiwgdXVpZCk7CmRpZmYgLS1naXQgYS9mcy9pbm9kZS5jIGIvZnMvaW5vZGUuYwppbmRleCAyYmVlMjBhLi43MjI4NjBiIDEwMDY0NAotLS0gYS9mcy9pbm9kZS5jCisrKyBiL2ZzL2lub2RlLmMKQEAgLTUxMiw3ICs1MTIsNyBAQAogICogVGhpcyBmdW5jdGlvbiBpcyBwYXNzZWQgdGhlIG51bWJlciBvZiBpbm9kZXMgdG8gc2NhbiwgYW5kIGl0IHJldHVybnMgdGhlCiAgKiB0b3RhbCBudW1iZXIgb2YgcmVtYWluaW5nIHBvc3NpYmx5LXJlY2xhaW1hYmxlIGlub2Rlcy4KICAqLwotc3RhdGljIGludCBzaHJpbmtfaWNhY2hlX21lbW9yeShpbnQgbnIsIGdmcF90IGdmcF9tYXNrKQorc3RhdGljIGludCBzaHJpbmtfaWNhY2hlX21lbW9yeShzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywgaW50IG5yLCBnZnBfdCBnZnBfbWFzaykKIHsKIAlpZiAobnIpIHsKIAkJLyoKZGlmZiAtLWdpdCBhL2ZzL2piZDIvam91cm5hbC5jIGIvZnMvamJkMi9qb3VybmFsLmMKaW5kZXggYmMyZmY1OS4uMDM2ODgwOCAxMDA2NDQKLS0tIGEvZnMvamJkMi9qb3VybmFsLmMKKysrIGIvZnMvamJkMi9qb3VybmFsLmMKQEAgLTI5Nyw3ICsyOTcsNiBAQAogCXN0cnVjdCBwYWdlICpuZXdfcGFnZTsKIAl1bnNpZ25lZCBpbnQgbmV3X29mZnNldDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX2luID0gamgyYmgoamhfaW4pOwotCXN0cnVjdCBqYmQyX2J1ZmZlcl90cmlnZ2VyX3R5cGUgKnRyaWdnZXJzOwogCWpvdXJuYWxfdCAqam91cm5hbCA9IHRyYW5zYWN0aW9uLT50X2pvdXJuYWw7CiAKIAkvKgpAQCAtMzI4LDIxICszMjcsMjEgQEAKIAkJZG9uZV9jb3B5X291dCA9IDE7CiAJCW5ld19wYWdlID0gdmlydF90b19wYWdlKGpoX2luLT5iX2Zyb3plbl9kYXRhKTsKIAkJbmV3X29mZnNldCA9IG9mZnNldF9pbl9wYWdlKGpoX2luLT5iX2Zyb3plbl9kYXRhKTsKLQkJdHJpZ2dlcnMgPSBqaF9pbi0+Yl9mcm96ZW5fdHJpZ2dlcnM7CiAJfSBlbHNlIHsKIAkJbmV3X3BhZ2UgPSBqaDJiaChqaF9pbiktPmJfcGFnZTsKIAkJbmV3X29mZnNldCA9IG9mZnNldF9pbl9wYWdlKGpoMmJoKGpoX2luKS0+Yl9kYXRhKTsKLQkJdHJpZ2dlcnMgPSBqaF9pbi0+Yl90cmlnZ2VyczsKIAl9CiAKIAltYXBwZWRfZGF0YSA9IGttYXBfYXRvbWljKG5ld19wYWdlLCBLTV9VU0VSMCk7CiAJLyoKLQkgKiBGaXJlIGFueSBjb21taXQgdHJpZ2dlci4gIERvIHRoaXMgYmVmb3JlIGNoZWNraW5nIGZvciBlc2NhcGluZywKLQkgKiBhcyB0aGUgdHJpZ2dlciBtYXkgbW9kaWZ5IHRoZSBtYWdpYyBvZmZzZXQuICBJZiBhIGNvcHktb3V0Ci0JICogaGFwcGVucyBhZnRlcndhcmRzLCBpdCB3aWxsIGhhdmUgdGhlIGNvcnJlY3QgZGF0YSBpbiB0aGUgYnVmZmVyLgorCSAqIEZpcmUgZGF0YSBmcm96ZW4gdHJpZ2dlciBpZiBkYXRhIGFscmVhZHkgd2Fzbid0IGZyb3plbi4gIERvIHRoaXMKKwkgKiBiZWZvcmUgY2hlY2tpbmcgZm9yIGVzY2FwaW5nLCBhcyB0aGUgdHJpZ2dlciBtYXkgbW9kaWZ5IHRoZSBtYWdpYworCSAqIG9mZnNldC4gIElmIGEgY29weS1vdXQgaGFwcGVucyBhZnRlcndhcmRzLCBpdCB3aWxsIGhhdmUgdGhlIGNvcnJlY3QKKwkgKiBkYXRhIGluIHRoZSBidWZmZXIuCiAJICovCi0JamJkMl9idWZmZXJfY29tbWl0X3RyaWdnZXIoamhfaW4sIG1hcHBlZF9kYXRhICsgbmV3X29mZnNldCwKLQkJCQkgICB0cmlnZ2Vycyk7CisJaWYgKCFkb25lX2NvcHlfb3V0KQorCQlqYmQyX2J1ZmZlcl9mcm96ZW5fdHJpZ2dlcihqaF9pbiwgbWFwcGVkX2RhdGEgKyBuZXdfb2Zmc2V0LAorCQkJCQkgICBqaF9pbi0+Yl90cmlnZ2Vycyk7CiAKIAkvKgogCSAqIENoZWNrIGZvciBlc2NhcGluZwpkaWZmIC0tZ2l0IGEvZnMvamJkMi90cmFuc2FjdGlvbi5jIGIvZnMvamJkMi90cmFuc2FjdGlvbi5jCmluZGV4IGUyMTRkNjguLmI4ZTA4MDYgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvdHJhbnNhY3Rpb24uYworKysgYi9mcy9qYmQyL3RyYW5zYWN0aW9uLmMKQEAgLTcyNSw2ICs3MjUsOSBAQAogCQlwYWdlID0gamgyYmgoamgpLT5iX3BhZ2U7CiAJCW9mZnNldCA9ICgodW5zaWduZWQgbG9uZykgamgyYmgoamgpLT5iX2RhdGEpICYgflBBR0VfTUFTSzsKIAkJc291cmNlID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCQkvKiBGaXJlIGRhdGEgZnJvemVuIHRyaWdnZXIganVzdCBiZWZvcmUgd2UgY29weSB0aGUgZGF0YSAqLworCQlqYmQyX2J1ZmZlcl9mcm96ZW5fdHJpZ2dlcihqaCwgc291cmNlICsgb2Zmc2V0LAorCQkJCQkgICBqaC0+Yl90cmlnZ2Vycyk7CiAJCW1lbWNweShqaC0+Yl9mcm96ZW5fZGF0YSwgc291cmNlK29mZnNldCwgamgyYmgoamgpLT5iX3NpemUpOwogCQlrdW5tYXBfYXRvbWljKHNvdXJjZSwgS01fVVNFUjApOwogCkBAIC05NjMsMTUgKzk2NiwxNSBAQAogCWpoLT5iX3RyaWdnZXJzID0gdHlwZTsKIH0KIAotdm9pZCBqYmQyX2J1ZmZlcl9jb21taXRfdHJpZ2dlcihzdHJ1Y3Qgam91cm5hbF9oZWFkICpqaCwgdm9pZCAqbWFwcGVkX2RhdGEsCit2b2lkIGpiZDJfYnVmZmVyX2Zyb3plbl90cmlnZ2VyKHN0cnVjdCBqb3VybmFsX2hlYWQgKmpoLCB2b2lkICptYXBwZWRfZGF0YSwKIAkJCQlzdHJ1Y3QgamJkMl9idWZmZXJfdHJpZ2dlcl90eXBlICp0cmlnZ2VycykKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gamgyYmgoamgpOwogCi0JaWYgKCF0cmlnZ2VycyB8fCAhdHJpZ2dlcnMtPnRfY29tbWl0KQorCWlmICghdHJpZ2dlcnMgfHwgIXRyaWdnZXJzLT50X2Zyb3plbikKIAkJcmV0dXJuOwogCi0JdHJpZ2dlcnMtPnRfY29tbWl0KHRyaWdnZXJzLCBiaCwgbWFwcGVkX2RhdGEsIGJoLT5iX3NpemUpOworCXRyaWdnZXJzLT50X2Zyb3plbih0cmlnZ2VycywgYmgsIG1hcHBlZF9kYXRhLCBiaC0+Yl9zaXplKTsKIH0KIAogdm9pZCBqYmQyX2J1ZmZlcl9hYm9ydF90cmlnZ2VyKHN0cnVjdCBqb3VybmFsX2hlYWQgKmpoLApkaWZmIC0tZ2l0IGEvZnMvamZmczIveGF0dHIuYyBiL2ZzL2pmZnMyL3hhdHRyLmMKaW5kZXggYTJkNThjOS4uZDI1OGUyNiAxMDA2NDQKLS0tIGEvZnMvamZmczIveGF0dHIuYworKysgYi9mcy9qZmZzMi94YXR0ci5jCkBAIC02MjYsNyArNjI2LDcgQEAKIAogc3RhdGljIGludCBjaGVja194YXR0cl9yZWZfaW5vZGUoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqaWMpCiB7Ci0JLyogc3VjY2VzcyBvZiBjaGVja194YXR0cl9yZWZfaW5vZGUoKSBtZWFucyB0YWh0IGlub2RlIChpYykgZG9zZSBub3QgaGF2ZQorCS8qIHN1Y2Nlc3Mgb2YgY2hlY2tfeGF0dHJfcmVmX2lub2RlKCkgbWVhbnMgdGhhdCBpbm9kZSAoaWMpIGRvc2Ugbm90IGhhdmUKIAkgKiBkdXBsaWNhdGUgbmFtZS92YWx1ZSBwYWlycy4gSWYgZHVwbGljYXRlIG5hbWUvdmFsdWUgcGFpciB3b3VsZCBiZSBmb3VuZCwKIAkgKiBvbmUgd2lsbCBiZSByZW1vdmVkLgogCSAqLwpkaWZmIC0tZ2l0IGEvZnMvbWJjYWNoZS5jIGIvZnMvbWJjYWNoZS5jCmluZGV4IGVjODhmZjMuLmUyOGYyMWIgMTAwNjQ0Ci0tLSBhL2ZzL21iY2FjaGUuYworKysgYi9mcy9tYmNhY2hlLmMKQEAgLTExNSw3ICsxMTUsNyBAQAogICogV2hhdCB0aGUgbWJjYWNoZSByZWdpc3RlcnMgYXMgdG8gZ2V0IHNocnVuayBkeW5hbWljYWxseS4KICAqLwogCi1zdGF0aWMgaW50IG1iX2NhY2hlX3Nocmlua19mbihpbnQgbnJfdG9fc2NhbiwgZ2ZwX3QgZ2ZwX21hc2spOworc3RhdGljIGludCBtYl9jYWNoZV9zaHJpbmtfZm4oc3RydWN0IHNocmlua2VyICpzaHJpbmssIGludCBucl90b19zY2FuLCBnZnBfdCBnZnBfbWFzayk7CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgbWJfY2FjaGVfc2hyaW5rZXIgPSB7CiAJLnNocmluayA9IG1iX2NhY2hlX3Nocmlua19mbiwKQEAgLTE5MSwxMyArMTkxLDE0IEBACiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IHdoZW4gbWVtb3J5CiAgKiBnZXRzIGxvdy4KICAqCisgKiBAc2hyaW5rOiAoaWdub3JlZCkKICAqIEBucl90b19zY2FuOiBOdW1iZXIgb2Ygb2JqZWN0cyB0byBzY2FuCiAgKiBAZ2ZwX21hc2s6IChpZ25vcmVkKQogICoKICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBvYmplY3RzIHdoaWNoIGFyZSBwcmVzZW50IGluIHRoZSBjYWNoZS4KICAqLwogc3RhdGljIGludAotbWJfY2FjaGVfc2hyaW5rX2ZuKGludCBucl90b19zY2FuLCBnZnBfdCBnZnBfbWFzaykKK21iX2NhY2hlX3Nocmlua19mbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywgaW50IG5yX3RvX3NjYW4sIGdmcF90IGdmcF9tYXNrKQogewogCUxJU1RfSEVBRChmcmVlX2xpc3QpOwogCXN0cnVjdCBsaXN0X2hlYWQgKmwsICpsdG1wOwpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggODY4ZDBjYi4uNDJkMmQyOCAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYworKysgYi9mcy9uYW1laS5jCkBAIC0yODIsOCArMjgyLDcgQEAKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JcmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsCi0JCQltYXNrICYgKE1BWV9SRUFEfE1BWV9XUklURXxNQVlfRVhFQ3xNQVlfQVBQRU5EKSk7CisJcmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spOwogfQogCiAvKioKQEAgLTE0ODQsOCArMTQ4Myw3IEBACiAJICovCiAJZXJyb3IgPSBsb2Nrc192ZXJpZnlfbG9ja2VkKGlub2RlKTsKIAlpZiAoIWVycm9yKQotCQllcnJvciA9IHNlY3VyaXR5X3BhdGhfdHJ1bmNhdGUocGF0aCwgMCwKLQkJCQkgICAgICAgQVRUUl9NVElNRXxBVFRSX0NUSU1FfEFUVFJfT1BFTik7CisJCWVycm9yID0gc2VjdXJpdHlfcGF0aF90cnVuY2F0ZShwYXRoKTsKIAlpZiAoIWVycm9yKSB7CiAJCWVycm9yID0gZG9fdHJ1bmNhdGUocGF0aC0+ZGVudHJ5LCAwLAogCQkJCSAgICBBVFRSX01USU1FfEFUVFJfQ1RJTUV8QVRUUl9PUEVOLApkaWZmIC0tZ2l0IGEvZnMvbmNwZnMvaW5vZGUuYyBiL2ZzL25jcGZzL2lub2RlLmMKaW5kZXggZmEzMzg1MS4uMWU2MzRkZSAxMDA2NDQKLS0tIGEvZnMvbmNwZnMvaW5vZGUuYworKysgYi9mcy9uY3Bmcy9pbm9kZS5jCkBAIC03MjgsOCArNzI4LDggQEAKIG91dF9iZGk6CiAJLyogMjMvMTIvMTk5OCBNYXJjaW4gRGFsZWNraSA8ZGFsZWNraUBjcy5uZXQucGw+OgogCSAqIAotCSAqIFRoZSBwcmV2aW91c2x5IHVzZWQgcHV0X2ZpbHAobmNwX2ZpbHApOyB3YXMgYm9nb3VzLCBzaW5jZQotCSAqIGl0IGRvZXNuJ3QgcHJvcGVyIHVubG9ja2luZy4KKwkgKiBUaGUgcHJldmlvdXNseSB1c2VkIHB1dF9maWxwKG5jcF9maWxwKTsgd2FzIGJvZ3VzLCBzaW5jZQorCSAqIGl0IGRvZXNuJ3QgcGVyZm9ybSBwcm9wZXIgdW5sb2NraW5nLgogCSAqLwogCWZwdXQobmNwX2ZpbHApOwogb3V0OgpkaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jCmluZGV4IDc4MmI0MzEuLjgzMmU5ZTIgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXIuYworKysgYi9mcy9uZnMvZGlyLmMKQEAgLTE3MTAsNyArMTcxMCw3IEBACiAJfQogfQogCi1pbnQgbmZzX2FjY2Vzc19jYWNoZV9zaHJpbmtlcihpbnQgbnJfdG9fc2NhbiwgZ2ZwX3QgZ2ZwX21hc2spCitpbnQgbmZzX2FjY2Vzc19jYWNoZV9zaHJpbmtlcihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywgaW50IG5yX3RvX3NjYW4sIGdmcF90IGdmcF9tYXNrKQogewogCUxJU1RfSEVBRChoZWFkKTsKIAlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpOwpAQCAtMTk1Myw3ICsxOTUzLDcgQEAKIAlpZiAoKG1hc2sgJiAoTUFZX1JFQUQgfCBNQVlfV1JJVEUgfCBNQVlfRVhFQykpID09IDApCiAJCWdvdG8gb3V0OwogCS8qIElzIHRoaXMgc3lzX2FjY2VzcygpID8gKi8KLQlpZiAobWFzayAmIE1BWV9BQ0NFU1MpCisJaWYgKG1hc2sgJiAoTUFZX0FDQ0VTUyB8IE1BWV9DSERJUikpCiAJCWdvdG8gZm9yY2VfbG9va3VwOwogCiAJc3dpdGNoIChpbm9kZS0+aV9tb2RlICYgU19JRk1UKSB7CmRpZmYgLS1naXQgYS9mcy9uZnMvZmlsZS5jIGIvZnMvbmZzL2ZpbGUuYwppbmRleCAzNmE1ZTc0Li5mMDM2MTUzIDEwMDY0NAotLS0gYS9mcy9uZnMvZmlsZS5jCisrKyBiL2ZzL25mcy9maWxlLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvYWlvLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC00OTMsMTEgKzQ5NCwxOSBAQAogICovCiBzdGF0aWMgaW50IG5mc19yZWxlYXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcCkKIHsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2UtPm1hcHBpbmc7CisKIAlkZnByaW50ayhQQUdFQ0FDSEUsICJORlM6IHJlbGVhc2VfcGFnZSglcClcbiIsIHBhZ2UpOwogCiAJLyogT25seSBkbyBJL08gaWYgZ2ZwIGlzIGEgc3VwZXJzZXQgb2YgR0ZQX0tFUk5FTCAqLwotCWlmICgoZ2ZwICYgR0ZQX0tFUk5FTCkgPT0gR0ZQX0tFUk5FTCkKLQkJbmZzX3diX3BhZ2UocGFnZS0+bWFwcGluZy0+aG9zdCwgcGFnZSk7CisJaWYgKG1hcHBpbmcgJiYgKGdmcCAmIEdGUF9LRVJORUwpID09IEdGUF9LRVJORUwpIHsKKwkJaW50IGhvdyA9IEZMVVNIX1NZTkM7CisKKwkJLyogRG9uJ3QgbGV0IGtzd2FwZCBkZWFkbG9jayB3YWl0aW5nIGZvciBPT00gUlBDIGNhbGxzICovCisJCWlmIChjdXJyZW50X2lzX2tzd2FwZCgpKQorCQkJaG93ID0gMDsKKwkJbmZzX2NvbW1pdF9pbm9kZShtYXBwaW5nLT5ob3N0LCBob3cpOworCX0KIAkvKiBJZiBQYWdlUHJpdmF0ZSgpIGlzIHNldCwgdGhlbiB0aGUgcGFnZSBpcyBub3QgZnJlZWFibGUgKi8KIAlpZiAoUGFnZVByaXZhdGUocGFnZSkpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2ludGVybmFsLmggYi9mcy9uZnMvaW50ZXJuYWwuaAppbmRleCBkOGJkNjE5Li5lNzBmNDRiIDEwMDY0NAotLS0gYS9mcy9uZnMvaW50ZXJuYWwuaAorKysgYi9mcy9uZnMvaW50ZXJuYWwuaApAQCAtMjA1LDcgKzIwNSw4IEBACiB2b2lkIG5mc19jbG9zZV9jb250ZXh0KHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsIGludCBpc19zeW5jKTsKIAogLyogZGlyLmMgKi8KLWV4dGVybiBpbnQgbmZzX2FjY2Vzc19jYWNoZV9zaHJpbmtlcihpbnQgbnJfdG9fc2NhbiwgZ2ZwX3QgZ2ZwX21hc2spOworZXh0ZXJuIGludCBuZnNfYWNjZXNzX2NhY2hlX3Nocmlua2VyKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLAorCQkJCQlpbnQgbnJfdG9fc2NhbiwgZ2ZwX3QgZ2ZwX21hc2spOwogCiAvKiBpbm9kZS5jICovCiBleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5mc2lvZF93b3JrcXVldWU7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzcm9vdC5jIGIvZnMvbmZzL25mc3Jvb3QuYwppbmRleCA2YmQxOWQ4Li5kZjEwMWQ5IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzcm9vdC5jCisrKyBiL2ZzL25mcy9uZnNyb290LmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogc3RhdGljIF9fYmUzMiBzZXJ2YWRkciBfX2luaXRkYXRhID0gMDsKIAogLyogTmFtZSBvZiBkaXJlY3RvcnkgdG8gbW91bnQgKi8KLXN0YXRpYyBjaGFyIG5mc19leHBvcnRfcGF0aFtORlNfTUFYUEFUSExFTl0gX19pbml0ZGF0YSA9IHsgMCwgfTsKK3N0YXRpYyBjaGFyIG5mc19leHBvcnRfcGF0aFtORlNfTUFYUEFUSExFTiArIDFdIF9faW5pdGRhdGEgPSB7IDAsIH07CiAKIC8qIE5GUy1yZWxhdGVkIGRhdGEgKi8KIHN0YXRpYyBzdHJ1Y3QgbmZzX21vdW50X2RhdGEgbmZzX2RhdGEgX19pbml0ZGF0YSA9IHsgMCwgfTsvKiBORlMgbW91bnQgaW5mbyAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzL3dyaXRlLmMgYi9mcy9uZnMvd3JpdGUuYwppbmRleCA5MTY3OWUyLi45ZjgxYmRkIDEwMDY0NAotLS0gYS9mcy9uZnMvd3JpdGUuYworKysgYi9mcy9uZnMvd3JpdGUuYwpAQCAtMjIyLDcgKzIyMiw3IEBACiAJCWNsZWFyX2JkaV9jb25nZXN0ZWQoJm5mc3MtPmJhY2tpbmdfZGV2X2luZm8sIEJMS19SV19BU1lOQyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmZzX3BhZ2UgKm5mc19maW5kX2FuZF9sb2NrX3JlcXVlc3Qoc3RydWN0IHBhZ2UgKnBhZ2UpCitzdGF0aWMgc3RydWN0IG5mc19wYWdlICpuZnNfZmluZF9hbmRfbG9ja19yZXF1ZXN0KHN0cnVjdCBwYWdlICpwYWdlLCBib29sIG5vbmJsb2NrKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OwogCXN0cnVjdCBuZnNfcGFnZSAqcmVxOwpAQCAtMjQxLDcgKzI0MSwxMCBAQAogCQkgKgkgcmVxdWVzdCBhcyBkaXJ0eSAoaW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBjYXJlKS4KIAkJICovCiAJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQkJcmV0ID0gbmZzX3dhaXRfb25fcmVxdWVzdChyZXEpOworCQlpZiAoIW5vbmJsb2NrKQorCQkJcmV0ID0gbmZzX3dhaXRfb25fcmVxdWVzdChyZXEpOworCQllbHNlCisJCQlyZXQgPSAtRUFHQUlOOwogCQluZnNfcmVsZWFzZV9yZXF1ZXN0KHJlcSk7CiAJCWlmIChyZXQgIT0gMCkKIAkJCXJldHVybiBFUlJfUFRSKHJldCk7CkBAIC0yNTYsMTIgKzI1OSwxMiBAQAogICogTWF5IHJldHVybiBhbiBlcnJvciBpZiB0aGUgdXNlciBzaWduYWxsZWQgbmZzX3dhaXRfb25fcmVxdWVzdCgpLgogICovCiBzdGF0aWMgaW50IG5mc19wYWdlX2FzeW5jX2ZsdXNoKHN0cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3IgKnBnaW8sCi0JCQkJc3RydWN0IHBhZ2UgKnBhZ2UpCisJCQkJc3RydWN0IHBhZ2UgKnBhZ2UsIGJvb2wgbm9uYmxvY2spCiB7CiAJc3RydWN0IG5mc19wYWdlICpyZXE7CiAJaW50IHJldCA9IDA7CiAKLQlyZXEgPSBuZnNfZmluZF9hbmRfbG9ja19yZXF1ZXN0KHBhZ2UpOworCXJlcSA9IG5mc19maW5kX2FuZF9sb2NrX3JlcXVlc3QocGFnZSwgbm9uYmxvY2spOwogCWlmICghcmVxKQogCQlnb3RvIG91dDsKIAlyZXQgPSBQVFJfRVJSKHJlcSk7CkBAIC0yODMsMTIgKzI4NiwyMCBAQAogc3RhdGljIGludCBuZnNfZG9fd3JpdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywgc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAqcGdpbykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKKwlpbnQgcmV0OwogCiAJbmZzX2luY19zdGF0cyhpbm9kZSwgTkZTSU9TX1ZGU1dSSVRFUEFHRSk7CiAJbmZzX2FkZF9zdGF0cyhpbm9kZSwgTkZTSU9TX1dSSVRFUEFHRVMsIDEpOwogCiAJbmZzX3BhZ2Vpb19jb25kX2NvbXBsZXRlKHBnaW8sIHBhZ2UtPmluZGV4KTsKLQlyZXR1cm4gbmZzX3BhZ2VfYXN5bmNfZmx1c2gocGdpbywgcGFnZSk7CisJcmV0ID0gbmZzX3BhZ2VfYXN5bmNfZmx1c2gocGdpbywgcGFnZSwKKwkJCXdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfTk9ORSB8fAorCQkJd2JjLT5ub25ibG9ja2luZyAhPSAwKTsKKwlpZiAocmV0ID09IC1FQUdBSU4pIHsKKwkJcmVkaXJ0eV9wYWdlX2Zvcl93cml0ZXBhZ2Uod2JjLCBwYWdlKTsKKwkJcmV0ID0gMDsKKwl9CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTEzNzksNyArMTM5MCw3IEBACiAJLnJwY19yZWxlYXNlID0gbmZzX2NvbW1pdF9yZWxlYXNlLAogfTsKIAotc3RhdGljIGludCBuZnNfY29tbWl0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBob3cpCitpbnQgbmZzX2NvbW1pdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgaG93KQogewogCUxJU1RfSEVBRChoZWFkKTsKIAlpbnQgbWF5X3dhaXQgPSBob3cgJiBGTFVTSF9TWU5DOwpAQCAtMTQ0MywxMSArMTQ1NCw2IEBACiAJcmV0dXJuIHJldDsKIH0KICNlbHNlCi1zdGF0aWMgaW50IG5mc19jb21taXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGhvdykKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBuZnNfY29tbWl0X3Vuc3RhYmxlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewogCXJldHVybiAwOwpAQCAtMTU0Niw3ICsxNTUyLDcgQEAKIAogCW5mc19mc2NhY2hlX3JlbGVhc2VfcGFnZShwYWdlLCBHRlBfS0VSTkVMKTsKIAotCXJlcSA9IG5mc19maW5kX2FuZF9sb2NrX3JlcXVlc3QocGFnZSk7CisJcmVxID0gbmZzX2ZpbmRfYW5kX2xvY2tfcmVxdWVzdChwYWdlLCBmYWxzZSk7CiAJcmV0ID0gUFRSX0VSUihyZXEpOwogCWlmIChJU19FUlIocmVxKSkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hb3BzLmMgYi9mcy9vY2ZzMi9hb3BzLmMKaW5kZXggMzYyM2NhMi4uOTYzMzdhNCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYW9wcy5jCisrKyBiL2ZzL29jZnMyL2FvcHMuYwpAQCAtMTk2LDE1ICsxOTYsMTQgQEAKIAkJCWR1bXBfc3RhY2soKTsKIAkJCWdvdG8gYmFpbDsKIAkJfQotCi0JCXBhc3RfZW9mID0gb2NmczJfYmxvY2tzX2Zvcl9ieXRlcyhpbm9kZS0+aV9zYiwgaV9zaXplX3JlYWQoaW5vZGUpKTsKLQkJbWxvZygwLCAiSW5vZGUgJWx1LCBwYXN0X2VvZiA9ICVsbHVcbiIsIGlub2RlLT5pX2lubywKLQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBhc3RfZW9mKTsKLQotCQlpZiAoY3JlYXRlICYmIChpYmxvY2sgPj0gcGFzdF9lb2YpKQotCQkJc2V0X2J1ZmZlcl9uZXcoYmhfcmVzdWx0KTsKIAl9CiAKKwlwYXN0X2VvZiA9IG9jZnMyX2Jsb2Nrc19mb3JfYnl0ZXMoaW5vZGUtPmlfc2IsIGlfc2l6ZV9yZWFkKGlub2RlKSk7CisJbWxvZygwLCAiSW5vZGUgJWx1LCBwYXN0X2VvZiA9ICVsbHVcbiIsIGlub2RlLT5pX2lubywKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGFzdF9lb2YpOworCWlmIChjcmVhdGUgJiYgKGlibG9jayA+PSBwYXN0X2VvZikpCisJCXNldF9idWZmZXJfbmV3KGJoX3Jlc3VsdCk7CisKIGJhaWw6CiAJaWYgKGVyciA8IDApCiAJCWVyciA9IC1FSU87CkBAIC00NTksMzYgKzQ1OCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaGFuZGxlX3QgKm9jZnMyX3N0YXJ0X3dhbGtfcGFnZV90cmFucyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkJCSBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkJCQkgdW5zaWduZWQgZnJvbSwKLQkJCQkJCQkgdW5zaWduZWQgdG8pCi17Ci0Jc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7Ci0JaGFuZGxlX3QgKmhhbmRsZTsKLQlpbnQgcmV0ID0gMDsKLQotCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgT0NGUzJfSU5PREVfVVBEQVRFX0NSRURJVFMpOwotCWlmIChJU19FUlIoaGFuZGxlKSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQltbG9nX2Vycm5vKHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChvY2ZzMl9zaG91bGRfb3JkZXJfZGF0YShpbm9kZSkpIHsKLQkJcmV0ID0gb2NmczJfamJkMl9maWxlX2lub2RlKGhhbmRsZSwgaW5vZGUpOwotCQlpZiAocmV0IDwgMCkKLQkJCW1sb2dfZXJybm8ocmV0KTsKLQl9Ci1vdXQ6Ci0JaWYgKHJldCkgewotCQlpZiAoIUlTX0VSUihoYW5kbGUpKQotCQkJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKLQkJaGFuZGxlID0gRVJSX1BUUihyZXQpOwotCX0KLQlyZXR1cm4gaGFuZGxlOwotfQotCiBzdGF0aWMgc2VjdG9yX3Qgb2NmczJfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spCiB7CiAJc2VjdG9yX3Qgc3RhdHVzOwpAQCAtNjA5LDcgKzU3OCw5IEBACiBzdGF0aWMgdm9pZCBvY2ZzMl9kaW9fZW5kX2lvKHN0cnVjdCBraW9jYiAqaW9jYiwKIAkJCSAgICAgbG9mZl90IG9mZnNldCwKIAkJCSAgICAgc3NpemVfdCBieXRlcywKLQkJCSAgICAgdm9pZCAqcHJpdmF0ZSkKKwkJCSAgICAgdm9pZCAqcHJpdmF0ZSwKKwkJCSAgICAgaW50IHJldCwKKwkJCSAgICAgYm9vbCBpc19hc3luYykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi0+a2lfZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgbGV2ZWw7CkBAIC02MjMsNiArNTk0LDkgQEAKIAlpZiAoIWxldmVsKQogCQl1cF9yZWFkKCZpbm9kZS0+aV9hbGxvY19zZW0pOwogCW9jZnMyX3J3X3VubG9jayhpbm9kZSwgbGV2ZWwpOworCisJaWYgKGlzX2FzeW5jKQorCQlhaW9fY29tcGxldGUoaW9jYiwgcmV0LCAwKTsKIH0KIAogLyoKQEAgLTExMzEsMjMgKzExMDUsMzcgQEAKICAqLwogc3RhdGljIGludCBvY2ZzMl9ncmFiX3BhZ2VzX2Zvcl93cml0ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfd3JpdGVfY3R4dCAqd2MsCi0JCQkJICAgICAgdTMyIGNwb3MsIGxvZmZfdCB1c2VyX3BvcywgaW50IG5ldywKKwkJCQkgICAgICB1MzIgY3BvcywgbG9mZl90IHVzZXJfcG9zLAorCQkJCSAgICAgIHVuc2lnbmVkIHVzZXJfbGVuLCBpbnQgbmV3LAogCQkJCSAgICAgIHN0cnVjdCBwYWdlICptbWFwX3BhZ2UpCiB7CiAJaW50IHJldCA9IDAsIGk7Ci0JdW5zaWduZWQgbG9uZyBzdGFydCwgdGFyZ2V0X2luZGV4LCBpbmRleDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCB0YXJnZXRfaW5kZXgsIGVuZF9pbmRleCwgaW5kZXg7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctPmhvc3Q7CisJbG9mZl90IGxhc3RfYnl0ZTsKIAogCXRhcmdldF9pbmRleCA9IHVzZXJfcG9zID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CiAKIAkvKgogCSAqIEZpZ3VyZSBvdXQgaG93IG1hbnkgcGFnZXMgd2UnbGwgYmUgbWFuaXB1bGF0aW5nIGhlcmUuIEZvcgogCSAqIG5vbiBhbGxvY2F0aW5nIHdyaXRlLCB3ZSBqdXN0IGNoYW5nZSB0aGUgb25lCi0JICogcGFnZS4gT3RoZXJ3aXNlLCB3ZSdsbCBuZWVkIGEgd2hvbGUgY2x1c3RlcnMgd29ydGguCisJICogcGFnZS4gT3RoZXJ3aXNlLCB3ZSdsbCBuZWVkIGEgd2hvbGUgY2x1c3RlcnMgd29ydGguICBJZiB3ZSdyZQorCSAqIHdyaXRpbmcgcGFzdCBpX3NpemUsIHdlIG9ubHkgbmVlZCBlbm91Z2ggcGFnZXMgdG8gY292ZXIgdGhlCisJICogbGFzdCBwYWdlIG9mIHRoZSB3cml0ZS4KIAkgKi8KIAlpZiAobmV3KSB7CiAJCXdjLT53X251bV9wYWdlcyA9IG9jZnMyX3BhZ2VzX3Blcl9jbHVzdGVyKGlub2RlLT5pX3NiKTsKIAkJc3RhcnQgPSBvY2ZzMl9hbGlnbl9jbHVzdGVyc190b19wYWdlX2luZGV4KGlub2RlLT5pX3NiLCBjcG9zKTsKKwkJLyoKKwkJICogV2UgbmVlZCB0aGUgaW5kZXggKnBhc3QqIHRoZSBsYXN0IHBhZ2Ugd2UgY291bGQgcG9zc2libHkKKwkJICogdG91Y2guICBUaGlzIGlzIHRoZSBwYWdlIHBhc3QgdGhlIGVuZCBvZiB0aGUgd3JpdGUgb3IKKwkJICogaV9zaXplLCB3aGljaGV2ZXIgaXMgZ3JlYXRlci4KKwkJICovCisJCWxhc3RfYnl0ZSA9IG1heCh1c2VyX3BvcyArIHVzZXJfbGVuLCBpX3NpemVfcmVhZChpbm9kZSkpOworCQlCVUdfT04obGFzdF9ieXRlIDwgMSk7CisJCWVuZF9pbmRleCA9ICgobGFzdF9ieXRlIC0gMSkgPj4gUEFHRV9DQUNIRV9TSElGVCkgKyAxOworCQlpZiAoKHN0YXJ0ICsgd2MtPndfbnVtX3BhZ2VzKSA+IGVuZF9pbmRleCkKKwkJCXdjLT53X251bV9wYWdlcyA9IGVuZF9pbmRleCAtIHN0YXJ0OwogCX0gZWxzZSB7CiAJCXdjLT53X251bV9wYWdlcyA9IDE7CiAJCXN0YXJ0ID0gdGFyZ2V0X2luZGV4OwpAQCAtMTYyMCwyMSArMTYwOCwyMCBAQAogICogd3JpdGUgcGF0aCBjYW4gdHJlYXQgaXQgYXMgYW4gbm9uLWFsbG9jYXRpbmcgd3JpdGUsIHdoaWNoIGhhcyBubwogICogc3BlY2lhbCBjYXNlIGNvZGUgZm9yIHNwYXJzZS9ub25zcGFyc2UgZmlsZXMuCiAgKi8KLXN0YXRpYyBpbnQgb2NmczJfZXhwYW5kX25vbnNwYXJzZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLAotCQkJCQl1bnNpZ25lZCBsZW4sCitzdGF0aWMgaW50IG9jZnMyX2V4cGFuZF9ub25zcGFyc2VfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKKwkJCQkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLAogCQkJCQlzdHJ1Y3Qgb2NmczJfd3JpdGVfY3R4dCAqd2MpCiB7CiAJaW50IHJldDsKLQlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKIAlsb2ZmX3QgbmV3c2l6ZSA9IHBvcyArIGxlbjsKIAotCWlmIChvY2ZzMl9zcGFyc2VfYWxsb2Mob3NiKSkKLQkJcmV0dXJuIDA7CisJQlVHX09OKG9jZnMyX3NwYXJzZV9hbGxvYyhPQ0ZTMl9TQihpbm9kZS0+aV9zYikpKTsKIAogCWlmIChuZXdzaXplIDw9IGlfc2l6ZV9yZWFkKGlub2RlKSkKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBvY2ZzMl9leHRlbmRfbm9faG9sZXMoaW5vZGUsIG5ld3NpemUsIHBvcyk7CisJcmV0ID0gb2NmczJfZXh0ZW5kX25vX2hvbGVzKGlub2RlLCBkaV9iaCwgbmV3c2l6ZSwgcG9zKTsKIAlpZiAocmV0KQogCQltbG9nX2Vycm5vKHJldCk7CiAKQEAgLTE2NDQsNiArMTYzMSwxOCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgb2NmczJfemVyb190YWlsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCisJCQkgICBsb2ZmX3QgcG9zKQoreworCWludCByZXQgPSAwOworCisJQlVHX09OKCFvY2ZzMl9zcGFyc2VfYWxsb2MoT0NGUzJfU0IoaW5vZGUtPmlfc2IpKSk7CisJaWYgKHBvcyA+IGlfc2l6ZV9yZWFkKGlub2RlKSkKKwkJcmV0ID0gb2NmczJfemVyb19leHRlbmQoaW5vZGUsIGRpX2JoLCBwb3MpOworCisJcmV0dXJuIHJldDsKK30KKwogaW50IG9jZnMyX3dyaXRlX2JlZ2luX25vbG9jayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCSAgICAgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBmbGFncywKIAkJCSAgICAgc3RydWN0IHBhZ2UgKipwYWdlcCwgdm9pZCAqKmZzZGF0YSwKQEAgLTE2NzksNyArMTY3OCwxMSBAQAogCQl9CiAJfQogCi0JcmV0ID0gb2NmczJfZXhwYW5kX25vbnNwYXJzZV9pbm9kZShpbm9kZSwgcG9zLCBsZW4sIHdjKTsKKwlpZiAob2NmczJfc3BhcnNlX2FsbG9jKG9zYikpCisJCXJldCA9IG9jZnMyX3plcm9fdGFpbChpbm9kZSwgZGlfYmgsIHBvcyk7CisJZWxzZQorCQlyZXQgPSBvY2ZzMl9leHBhbmRfbm9uc3BhcnNlX2lub2RlKGlub2RlLCBkaV9iaCwgcG9zLCBsZW4sCisJCQkJCQkgICB3Yyk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtMTc4OSw3ICsxNzkyLDcgQEAKIAkgKiB0aGF0IHdlIGNhbiB6ZXJvIGFuZCBmbHVzaCBpZiB3ZSBlcnJvciBhZnRlciBhZGRpbmcgdGhlCiAJICogZXh0ZW50LgogCSAqLwotCXJldCA9IG9jZnMyX2dyYWJfcGFnZXNfZm9yX3dyaXRlKG1hcHBpbmcsIHdjLCB3Yy0+d19jcG9zLCBwb3MsCisJcmV0ID0gb2NmczJfZ3JhYl9wYWdlc19mb3Jfd3JpdGUobWFwcGluZywgd2MsIHdjLT53X2Nwb3MsIHBvcywgbGVuLAogCQkJCQkgY2x1c3Rlcl9vZl9wYWdlcywgbW1hcF9wYWdlKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1kZWJ1Zy5jIGIvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMKaW5kZXggMGNkMjRjZi4uNWVmZGQzNyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMKQEAgLTQxOSw3ICs0MTksNyBAQAogCiBzdGF0aWMgaW50IGRlYnVnX2J1ZmZlcl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBkZWJ1Z19idWZmZXIgKmRiID0gKHN0cnVjdCBkZWJ1Z19idWZmZXIgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRlYnVnX2J1ZmZlciAqZGIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoZGIpCiAJCWtmcmVlKGRiLT5idWYpOwpAQCAtNzE1LDcgKzcxNSw3IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKLQlzZXEgPSAoc3RydWN0IHNlcV9maWxlICopIGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzZXEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc2VxLT5wcml2YXRlID0gZGw7CiAKIAlkbG1fZ3JhYihkbG0pOwpAQCAtNzMxLDcgKzczMSw3IEBACiAKIHN0YXRpYyBpbnQgZGVidWdfbG9ja3Jlc19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZGVidWdfbG9ja3JlcyAqZGwgPSAoc3RydWN0IGRlYnVnX2xvY2tyZXMgKilzZXEtPnByaXZhdGU7CiAKIAlpZiAoZGwtPmRsX3JlcykKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1kb21haW4uYyBiL2ZzL29jZnMyL2RsbS9kbG1kb21haW4uYwppbmRleCA2YjVhNDkyLi4xNTNhYmI1IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtZG9tYWluLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbWRvbWFpbi5jCkBAIC0xNjcxLDcgKzE2NzEsNyBAQAogCXN0cnVjdCBkbG1fY3R4dCAqZGxtID0gTlVMTDsKIAlzdHJ1Y3QgZGxtX2N0eHQgKm5ld19jdHh0ID0gTlVMTDsKIAotCWlmIChzdHJsZW4oZG9tYWluKSA+IE8yTk1fTUFYX05BTUVfTEVOKSB7CisJaWYgKHN0cmxlbihkb21haW4pID49IE8yTk1fTUFYX05BTUVfTEVOKSB7CiAJCXJldCA9IC1FTkFNRVRPT0xPTkc7CiAJCW1sb2coTUxfRVJST1IsICJkb21haW4gbmFtZSBsZW5ndGggdG9vIGxvbmdcbiIpOwogCQlnb3RvIGxlYXZlOwpAQCAtMTcwOSw2ICsxNzA5LDcgQEAKIAkJfQogCiAJCWlmIChkbG1fcHJvdG9jb2xfY29tcGFyZSgmZGxtLT5mc19sb2NraW5nX3Byb3RvLCBmc19wcm90bykpIHsKKwkJCXNwaW5fdW5sb2NrKCZkbG1fZG9tYWluX2xvY2spOwogCQkJbWxvZyhNTF9FUlJPUiwKIAkJCSAgICAgIlJlcXVlc3RlZCBsb2NraW5nIHByb3RvY29sIHZlcnNpb24gaXMgbm90ICIKIAkJCSAgICAgImNvbXBhdGlibGUgd2l0aCBhbHJlYWR5IHJlZ2lzdGVyZWQgZG9tYWluICIKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1tYXN0ZXIuYyBiL2ZzL29jZnMyL2RsbS9kbG1tYXN0ZXIuYwppbmRleCA0YTc1MDZhLi45NGI5N2ZjIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtbWFzdGVyLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbW1hc3Rlci5jCkBAIC0yODA4LDE0ICsyODA4LDggQEAKIAkJbWxvZygwLCAidHJ5aW5nIGFnYWluLi4uXG4iKTsKIAkJZ290byBhZ2FpbjsKIAl9Ci0JLyogbm93IHRoYXQgd2UgYXJlIHN1cmUgdGhlIE1JR1JBVElORyBzdGF0ZSBpcyB0aGVyZSwgZHJvcAotCSAqIHRoZSB1bm5lZGVkIHN0YXRlIHdoaWNoIGJsb2NrZWQgdGhyZWFkcyB0cnlpbmcgdG8gRElSVFkgKi8KLQlzcGluX2xvY2soJnJlcy0+c3BpbmxvY2spOwotCUJVR19PTighKHJlcy0+c3RhdGUgJiBETE1fTE9DS19SRVNfQkxPQ0tfRElSVFkpKTsKLQlCVUdfT04oIShyZXMtPnN0YXRlICYgRExNX0xPQ0tfUkVTX01JR1JBVElORykpOwotCXJlcy0+c3RhdGUgJj0gfkRMTV9MT0NLX1JFU19CTE9DS19ESVJUWTsKLQlzcGluX3VubG9jaygmcmVzLT5zcGlubG9jayk7CiAKKwlyZXQgPSAwOwogCS8qIGRpZCB0aGUgdGFyZ2V0IGdvIGRvd24gb3IgZGllPyAqLwogCXNwaW5fbG9jaygmZGxtLT5zcGlubG9jayk7CiAJaWYgKCF0ZXN0X2JpdCh0YXJnZXQsIGRsbS0+ZG9tYWluX21hcCkpIHsKQEAgLTI4MjYsOSArMjgyMCwyMSBAQAogCXNwaW5fdW5sb2NrKCZkbG0tPnNwaW5sb2NrKTsKIAogCS8qCisJICogaWYgdGFyZ2V0IGlzIGRvd24sIHdlIG5lZWQgdG8gY2xlYXIgRExNX0xPQ0tfUkVTX0JMT0NLX0RJUlRZIGZvcgorCSAqIGFub3RoZXIgdHJ5OyBvdGhlcndpc2UsIHdlIGFyZSBzdXJlIHRoZSBNSUdSQVRJTkcgc3RhdGUgaXMgdGhlcmUsCisJICogZHJvcCB0aGUgdW5uZWRlZCBzdGF0ZSB3aGljaCBibG9ja2VkIHRocmVhZHMgdHJ5aW5nIHRvIERJUlRZCisJICovCisJc3Bpbl9sb2NrKCZyZXMtPnNwaW5sb2NrKTsKKwlCVUdfT04oIShyZXMtPnN0YXRlICYgRExNX0xPQ0tfUkVTX0JMT0NLX0RJUlRZKSk7CisJcmVzLT5zdGF0ZSAmPSB+RExNX0xPQ0tfUkVTX0JMT0NLX0RJUlRZOworCWlmICghcmV0KQorCQlCVUdfT04oIShyZXMtPnN0YXRlICYgRExNX0xPQ0tfUkVTX01JR1JBVElORykpOworCXNwaW5fdW5sb2NrKCZyZXMtPnNwaW5sb2NrKTsKKworCS8qCiAJICogYXQgdGhpcyBwb2ludDoKIAkgKgotCSAqICAgbyB0aGUgRExNX0xPQ0tfUkVTX01JR1JBVElORyBmbGFnIGlzIHNldAorCSAqICAgbyB0aGUgRExNX0xPQ0tfUkVTX01JR1JBVElORyBmbGFnIGlzIHNldCBpZiB0YXJnZXQgbm90IGRvd24KIAkgKiAgIG8gdGhlcmUgYXJlIG5vIHBlbmRpbmcgYXN0cyBvbiB0aGlzIGxvY2tyZXMKIAkgKiAgIG8gYWxsIHByb2Nlc3NlcyB0cnlpbmcgdG8gcmVzZXJ2ZSBhbiBhc3Qgb24gdGhpcwogCSAqICAgICBsb2NrcmVzIG11c3Qgd2FpdCBmb3IgdGhlIE1JR1JBVElORyBmbGFnIHRvIGNsZWFyCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYyBiL2ZzL29jZnMyL2RsbS9kbG1yZWNvdmVyeS5jCmluZGV4IGY4Yjc1Y2UuLjlkZmFhYzcgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1yZWNvdmVyeS5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1yZWNvdmVyeS5jCkBAIC00NjMsNyArNDYzLDcgQEAKIAlpZiAoZGxtLT5yZWNvLmRlYWRfbm9kZSA9PSBPMk5NX0lOVkFMSURfTk9ERV9OVU0pIHsKIAkJaW50IGJpdDsKIAotCQliaXQgPSBmaW5kX25leHRfYml0IChkbG0tPnJlY292ZXJ5X21hcCwgTzJOTV9NQVhfTk9ERVMrMSwgMCk7CisJCWJpdCA9IGZpbmRfbmV4dF9iaXQgKGRsbS0+cmVjb3ZlcnlfbWFwLCBPMk5NX01BWF9OT0RFUywgMCk7CiAJCWlmIChiaXQgPj0gTzJOTV9NQVhfTk9ERVMgfHwgYml0IDwgMCkKIAkJCWRsbV9zZXRfcmVjb19kZWFkX25vZGUoZGxtLCBPMk5NX0lOVkFMSURfTk9ERV9OVU0pOwogCQllbHNlCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG1mcy9kbG1mcy5jIGIvZnMvb2NmczIvZGxtZnMvZGxtZnMuYwppbmRleCBiODNkNjEwLi5iZWYzNGQwIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG1mcy9kbG1mcy5jCisrKyBiL2ZzL29jZnMyL2RsbWZzL2RsbWZzLmMKQEAgLTE4Miw4ICsxODIsNyBAQAogewogCWludCBsZXZlbCwgc3RhdHVzOwogCXN0cnVjdCBkbG1mc19pbm9kZV9wcml2YXRlICppcCA9IERMTUZTX0koaW5vZGUpOwotCXN0cnVjdCBkbG1mc19maWxwX3ByaXZhdGUgKmZwID0KLQkJKHN0cnVjdCBkbG1mc19maWxwX3ByaXZhdGUgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkbG1mc19maWxwX3ByaXZhdGUgKmZwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCiAJCUJVRygpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtZ2x1ZS5jIGIvZnMvb2NmczIvZGxtZ2x1ZS5jCmluZGV4IDM5ZWIxNmEuLjVlMDJhODkgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbWdsdWUuYworKysgYi9mcy9vY2ZzMi9kbG1nbHVlLmMKQEAgLTI5NjYsNyArMjk2Niw3IEBACiAKIHN0YXRpYyBpbnQgb2NmczJfZGxtX2RlYnVnX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IHNlcV9maWxlICpzZXEgPSAoc3RydWN0IHNlcV9maWxlICopIGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgb2NmczJfZGxtX3NlcV9wcml2ICpwcml2ID0gc2VxLT5wcml2YXRlOwogCXN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqcmVzID0gJnByaXYtPnBfaXRlcl9yZXM7CiAKQEAgLTMwMDAsNyArMzAwMCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXNlcSA9IChzdHJ1Y3Qgc2VxX2ZpbGUgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOworCXNlcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzZXEtPnByaXZhdGUgPSBwcml2OwogCiAJb2NmczJfYWRkX2xvY2tyZXNfdHJhY2tpbmcoJnByaXYtPnBfaXRlcl9yZXMsCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9maWxlLmMgYi9mcy9vY2ZzMi9maWxlLmMKaW5kZXggNmExM2VhNi4uMmIxMGIzNiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZmlsZS5jCisrKyBiL2ZzL29jZnMyL2ZpbGUuYwpAQCAtNzI0LDI4ICs3MjQsNTUgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCisvKgorICogV2hpbGUgYSB3cml0ZSB3aWxsIGFscmVhZHkgYmUgb3JkZXJpbmcgdGhlIGRhdGEsIGEgdHJ1bmNhdGUgd2lsbCBub3QuCisgKiBUaHVzLCB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgb3JkZXIgdGhlIHplcm9lZCBwYWdlcy4KKyAqLworc3RhdGljIGhhbmRsZV90ICpvY2ZzMl96ZXJvX3N0YXJ0X29yZGVyZWRfdHJhbnNhY3Rpb24oc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKwloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghb2NmczJfc2hvdWxkX29yZGVyX2RhdGEoaW5vZGUpKQorCQlnb3RvIG91dDsKKworCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgT0NGUzJfSU5PREVfVVBEQVRFX0NSRURJVFMpOworCWlmIChJU19FUlIoaGFuZGxlKSkgeworCQlyZXQgPSAtRU5PTUVNOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX2piZDJfZmlsZV9pbm9kZShoYW5kbGUsIGlub2RlKTsKKwlpZiAocmV0IDwgMCkKKwkJbWxvZ19lcnJubyhyZXQpOworCitvdXQ6CisJaWYgKHJldCkgeworCQlpZiAoIUlTX0VSUihoYW5kbGUpKQorCQkJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKKwkJaGFuZGxlID0gRVJSX1BUUihyZXQpOworCX0KKwlyZXR1cm4gaGFuZGxlOworfQorCiAvKiBTb21lIHBhcnRzIG9mIHRoaXMgdGFrZW4gZnJvbSBnZW5lcmljX2NvbnRfZXhwYW5kLCB3aGljaCB0dXJuZWQgb3V0CiAgKiB0byBiZSB0b28gZnJhZ2lsZSB0byBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZCB3aXRob3V0IHVzIGhhdmluZyB0bwogICogd29ycnkgYWJvdXQgcmVjdXJzaXZlIGxvY2tpbmcgaW4gLT53cml0ZV9iZWdpbigpIGFuZCAtPndyaXRlX2VuZCgpLiAqLwotc3RhdGljIGludCBvY2ZzMl93cml0ZV96ZXJvX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgdTY0IHNpemUpCitzdGF0aWMgaW50IG9jZnMyX3dyaXRlX3plcm9fcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgYWJzX2Zyb20sCisJCQkJIHU2NCBhYnNfdG8pCiB7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOwogCXN0cnVjdCBwYWdlICpwYWdlOwotCXVuc2lnbmVkIGxvbmcgaW5kZXg7Ci0JdW5zaWduZWQgaW50IG9mZnNldDsKKwl1bnNpZ25lZCBsb25nIGluZGV4ID0gYWJzX2Zyb20gPj4gUEFHRV9DQUNIRV9TSElGVDsKIAloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOworCXVuc2lnbmVkIHplcm9fZnJvbSwgemVyb190bywgYmxvY2tfc3RhcnQsIGJsb2NrX2VuZDsKIAotCW9mZnNldCA9IChzaXplICYgKFBBR0VfQ0FDSEVfU0laRS0xKSk7IC8qIFdpdGhpbiBwYWdlICovCi0JLyogdWdoLiAgaW4gcHJlcGFyZS9jb21taXRfd3JpdGUsIGlmIGZyb209PXRvPT1zdGFydCBvZiBibG9jaywgd2UKLQkqKiBza2lwIHRoZSBwcmVwYXJlLiAgbWFrZSBzdXJlIHdlIG5ldmVyIHNlbmQgYW4gb2Zmc2V0IGZvciB0aGUgc3RhcnQKLQkqKiBvZiBhIGJsb2NrCi0JKi8KLQlpZiAoKG9mZnNldCAmIChpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLSAxKSkgPT0gMCkgewotCQlvZmZzZXQrKzsKLQl9Ci0JaW5kZXggPSBzaXplID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisJQlVHX09OKGFic19mcm9tID49IGFic190byk7CisJQlVHX09OKGFic190byA+ICgoKHU2NClpbmRleCArIDEpIDw8IFBBR0VfQ0FDSEVfU0hJRlQpKTsKKwlCVUdfT04oYWJzX2Zyb20gJiAoaW5vZGUtPmlfYmxrYml0cyAtIDEpKTsKIAogCXBhZ2UgPSBncmFiX2NhY2hlX3BhZ2UobWFwcGluZywgaW5kZXgpOwogCWlmICghcGFnZSkgewpAQCAtNzU0LDMxICs3ODEsNTYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gb2NmczJfcHJlcGFyZV93cml0ZV9ub2xvY2soaW5vZGUsIHBhZ2UsIG9mZnNldCwgb2Zmc2V0KTsKLQlpZiAocmV0IDwgMCkgewotCQltbG9nX2Vycm5vKHJldCk7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9CisJLyogR2V0IHRoZSBvZmZzZXRzIHdpdGhpbiB0aGUgcGFnZSB0aGF0IHdlIHdhbnQgdG8gemVybyAqLworCXplcm9fZnJvbSA9IGFic19mcm9tICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOworCXplcm9fdG8gPSBhYnNfdG8gJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CisJaWYgKCF6ZXJvX3RvKQorCQl6ZXJvX3RvID0gUEFHRV9DQUNIRV9TSVpFOwogCi0JaWYgKG9jZnMyX3Nob3VsZF9vcmRlcl9kYXRhKGlub2RlKSkgewotCQloYW5kbGUgPSBvY2ZzMl9zdGFydF93YWxrX3BhZ2VfdHJhbnMoaW5vZGUsIHBhZ2UsIG9mZnNldCwKLQkJCQkJCSAgICAgb2Zmc2V0KTsKLQkJaWYgKElTX0VSUihoYW5kbGUpKSB7Ci0JCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7Ci0JCQloYW5kbGUgPSBOVUxMOworCW1sb2coMCwKKwkgICAgICJhYnNfZnJvbSA9ICVsbHUsIGFic190byA9ICVsbHUsIGluZGV4ID0gJWx1LCB6ZXJvX2Zyb20gPSAldSwgemVyb190byA9ICV1XG4iLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhYnNfZnJvbSwgKHVuc2lnbmVkIGxvbmcgbG9uZylhYnNfdG8sCisJICAgICBpbmRleCwgemVyb19mcm9tLCB6ZXJvX3RvKTsKKworCS8qIFdlIGtub3cgdGhhdCB6ZXJvX2Zyb20gaXMgYmxvY2sgYWxpZ25lZCAqLworCWZvciAoYmxvY2tfc3RhcnQgPSB6ZXJvX2Zyb207IGJsb2NrX3N0YXJ0IDwgemVyb190bzsKKwkgICAgIGJsb2NrX3N0YXJ0ID0gYmxvY2tfZW5kKSB7CisJCWJsb2NrX2VuZCA9IGJsb2NrX3N0YXJ0ICsgKDEgPDwgaW5vZGUtPmlfYmxrYml0cyk7CisKKwkJLyoKKwkJICogYmxvY2tfc3RhcnQgaXMgYmxvY2stYWxpZ25lZC4gIEJ1bXAgaXQgYnkgb25lIHRvCisJCSAqIGZvcmNlIG9jZnMyX3twcmVwYXJlLGNvbW1pdH1fd3JpdGUoKSB0byB6ZXJvIHRoZQorCQkgKiB3aG9sZSBibG9jay4KKwkJICovCisJCXJldCA9IG9jZnMyX3ByZXBhcmVfd3JpdGVfbm9sb2NrKGlub2RlLCBwYWdlLAorCQkJCQkJIGJsb2NrX3N0YXJ0ICsgMSwKKwkJCQkJCSBibG9ja19zdGFydCArIDEpOworCQlpZiAocmV0IDwgMCkgeworCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9Ci0JfQogCi0JLyogbXVzdCBub3QgdXBkYXRlIGlfc2l6ZSEgKi8KLQlyZXQgPSBibG9ja19jb21taXRfd3JpdGUocGFnZSwgb2Zmc2V0LCBvZmZzZXQpOwotCWlmIChyZXQgPCAwKQotCQltbG9nX2Vycm5vKHJldCk7Ci0JZWxzZQotCQlyZXQgPSAwOworCQlpZiAoIWhhbmRsZSkgeworCQkJaGFuZGxlID0gb2NmczJfemVyb19zdGFydF9vcmRlcmVkX3RyYW5zYWN0aW9uKGlub2RlKTsKKwkJCWlmIChJU19FUlIoaGFuZGxlKSkgeworCQkJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJCQloYW5kbGUgPSBOVUxMOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJLyogbXVzdCBub3QgdXBkYXRlIGlfc2l6ZSEgKi8KKwkJcmV0ID0gYmxvY2tfY29tbWl0X3dyaXRlKHBhZ2UsIGJsb2NrX3N0YXJ0ICsgMSwKKwkJCQkJIGJsb2NrX3N0YXJ0ICsgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJbWxvZ19lcnJubyhyZXQpOworCQllbHNlCisJCQlyZXQgPSAwOworCX0KIAogCWlmIChoYW5kbGUpCiAJCW9jZnMyX2NvbW1pdF90cmFucyhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksIGhhbmRsZSk7CisKIG91dF91bmxvY2s6CiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwpAQCAtNzg2LDIyICs4MzgsMTE0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvY2ZzMl96ZXJvX2V4dGVuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgICB1NjQgemVyb190b19zaXplKQorLyoKKyAqIEZpbmQgdGhlIG5leHQgcmFuZ2UgdG8gemVyby4gIFdlIGRvIHRoaXMgaW4gdGVybXMgb2YgYnl0ZXMgYmVjYXVzZQorICogdGhhdCdzIHdoYXQgb2NmczJfemVyb19leHRlbmQoKSB3YW50cywgYW5kIGl0IGlzIGRlYWxpbmcgd2l0aCB0aGUKKyAqIHBhZ2VjYWNoZS4gIFdlIG1heSByZXR1cm4gbXVsdGlwbGUgZXh0ZW50cy4KKyAqCisgKiB6ZXJvX3N0YXJ0IGFuZCB6ZXJvX2VuZCBhcmUgb2NmczJfemVyb19leHRlbmQoKXMgY3VycmVudCBpZGVhIG9mIHdoYXQKKyAqIG5lZWRzIHRvIGJlIHplcm9lZC4gIHJhbmdlX3N0YXJ0IGFuZCByYW5nZV9lbmQgcmV0dXJuIHRoZSBuZXh0IHplcm9pbmcKKyAqIHJhbmdlLiAgQSBzdWJzZXF1ZW50IGNhbGwgc2hvdWxkIHBhc3MgdGhlIHByZXZpb3VzIHJhbmdlX2VuZCBhcyBpdHMKKyAqIHplcm9fc3RhcnQuICBJZiByYW5nZV9lbmQgaXMgMCwgdGhlcmUncyBub3RoaW5nIHRvIGRvLgorICoKKyAqIFVud3JpdHRlbiBleHRlbnRzIGFyZSBza2lwcGVkIG92ZXIuICBSZWZjb3VudGVkIGV4dGVudHMgYXJlIENvV2QuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfemVyb19leHRlbmRfZ2V0X3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCisJCQkJICAgICAgIHU2NCB6ZXJvX3N0YXJ0LCB1NjQgemVyb19lbmQsCisJCQkJICAgICAgIHU2NCAqcmFuZ2Vfc3RhcnQsIHU2NCAqcmFuZ2VfZW5kKQogewotCWludCByZXQgPSAwOwotCXU2NCBzdGFydF9vZmY7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCWludCByYyA9IDAsIG5lZWRzX2NvdyA9IDA7CisJdTMyIHBfY3BvcywgemVyb19jbHVzdGVycyA9IDA7CisJdTMyIHplcm9fY3BvcyA9CisJCXplcm9fc3RhcnQgPj4gT0NGUzJfU0IoaW5vZGUtPmlfc2IpLT5zX2NsdXN0ZXJzaXplX2JpdHM7CisJdTMyIGxhc3RfY3BvcyA9IG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhpbm9kZS0+aV9zYiwgemVyb19lbmQpOworCXVuc2lnbmVkIGludCBudW1fY2x1c3RlcnMgPSAwOworCXVuc2lnbmVkIGludCBleHRfZmxhZ3MgPSAwOwogCi0Jc3RhcnRfb2ZmID0gb2NmczJfYWxpZ25fYnl0ZXNfdG9fYmxvY2tzKHNiLCBpX3NpemVfcmVhZChpbm9kZSkpOwotCXdoaWxlIChzdGFydF9vZmYgPCB6ZXJvX3RvX3NpemUpIHsKLQkJcmV0ID0gb2NmczJfd3JpdGVfemVyb19wYWdlKGlub2RlLCBzdGFydF9vZmYpOwotCQlpZiAocmV0IDwgMCkgewotCQkJbWxvZ19lcnJubyhyZXQpOworCXdoaWxlICh6ZXJvX2Nwb3MgPCBsYXN0X2Nwb3MpIHsKKwkJcmMgPSBvY2ZzMl9nZXRfY2x1c3RlcnMoaW5vZGUsIHplcm9fY3BvcywgJnBfY3BvcywKKwkJCQkJJm51bV9jbHVzdGVycywgJmV4dF9mbGFncyk7CisJCWlmIChyYykgeworCQkJbWxvZ19lcnJubyhyYyk7CiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXN0YXJ0X29mZiArPSBzYi0+c19ibG9ja3NpemU7CisJCWlmIChwX2Nwb3MgJiYgIShleHRfZmxhZ3MgJiBPQ0ZTMl9FWFRfVU5XUklUVEVOKSkgeworCQkJemVyb19jbHVzdGVycyA9IG51bV9jbHVzdGVyczsKKwkJCWlmIChleHRfZmxhZ3MgJiBPQ0ZTMl9FWFRfUkVGQ09VTlRFRCkKKwkJCQluZWVkc19jb3cgPSAxOworCQkJYnJlYWs7CisJCX0KKworCQl6ZXJvX2Nwb3MgKz0gbnVtX2NsdXN0ZXJzOworCX0KKwlpZiAoIXplcm9fY2x1c3RlcnMpIHsKKwkJKnJhbmdlX2VuZCA9IDA7CisJCWdvdG8gb3V0OworCX0KKworCXdoaWxlICgoemVyb19jcG9zICsgemVyb19jbHVzdGVycykgPCBsYXN0X2Nwb3MpIHsKKwkJcmMgPSBvY2ZzMl9nZXRfY2x1c3RlcnMoaW5vZGUsIHplcm9fY3BvcyArIHplcm9fY2x1c3RlcnMsCisJCQkJCSZwX2Nwb3MsICZudW1fY2x1c3RlcnMsCisJCQkJCSZleHRfZmxhZ3MpOworCQlpZiAocmMpIHsKKwkJCW1sb2dfZXJybm8ocmMpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAoIXBfY3BvcyB8fCAoZXh0X2ZsYWdzICYgT0NGUzJfRVhUX1VOV1JJVFRFTikpCisJCQlicmVhazsKKwkJaWYgKGV4dF9mbGFncyAmIE9DRlMyX0VYVF9SRUZDT1VOVEVEKQorCQkJbmVlZHNfY293ID0gMTsKKwkJemVyb19jbHVzdGVycyArPSBudW1fY2x1c3RlcnM7CisJfQorCWlmICgoemVyb19jcG9zICsgemVyb19jbHVzdGVycykgPiBsYXN0X2Nwb3MpCisJCXplcm9fY2x1c3RlcnMgPSBsYXN0X2Nwb3MgLSB6ZXJvX2Nwb3M7CisKKwlpZiAobmVlZHNfY293KSB7CisJCXJjID0gb2NmczJfcmVmY291bnRfY293KGlub2RlLCBkaV9iaCwgemVyb19jcG9zLCB6ZXJvX2NsdXN0ZXJzLAorCQkJCQlVSU5UX01BWCk7CisJCWlmIChyYykgeworCQkJbWxvZ19lcnJubyhyYyk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCSpyYW5nZV9zdGFydCA9IG9jZnMyX2NsdXN0ZXJzX3RvX2J5dGVzKGlub2RlLT5pX3NiLCB6ZXJvX2Nwb3MpOworCSpyYW5nZV9lbmQgPSBvY2ZzMl9jbHVzdGVyc190b19ieXRlcyhpbm9kZS0+aV9zYiwKKwkJCQkJICAgICB6ZXJvX2Nwb3MgKyB6ZXJvX2NsdXN0ZXJzKTsKKworb3V0OgorCXJldHVybiByYzsKK30KKworLyoKKyAqIFplcm8gb25lIHJhbmdlIHJldHVybmVkIGZyb20gb2NmczJfemVyb19leHRlbmRfZ2V0X3JhbmdlKCkuICBUaGUgY2FsbGVyCisgKiBoYXMgbWFkZSBzdXJlIHRoYXQgdGhlIGVudGlyZSByYW5nZSBuZWVkcyB6ZXJvaW5nLgorICovCitzdGF0aWMgaW50IG9jZnMyX3plcm9fZXh0ZW5kX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCByYW5nZV9zdGFydCwKKwkJCQkgICB1NjQgcmFuZ2VfZW5kKQoreworCWludCByYyA9IDA7CisJdTY0IG5leHRfcG9zOworCXU2NCB6ZXJvX3BvcyA9IHJhbmdlX3N0YXJ0OworCisJbWxvZygwLCAicmFuZ2Vfc3RhcnQgPSAlbGx1LCByYW5nZV9lbmQgPSAlbGx1XG4iLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyYW5nZV9zdGFydCwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmFuZ2VfZW5kKTsKKwlCVUdfT04ocmFuZ2Vfc3RhcnQgPj0gcmFuZ2VfZW5kKTsKKworCXdoaWxlICh6ZXJvX3BvcyA8IHJhbmdlX2VuZCkgeworCQluZXh0X3BvcyA9ICh6ZXJvX3BvcyAmIFBBR0VfQ0FDSEVfTUFTSykgKyBQQUdFX0NBQ0hFX1NJWkU7CisJCWlmIChuZXh0X3BvcyA+IHJhbmdlX2VuZCkKKwkJCW5leHRfcG9zID0gcmFuZ2VfZW5kOworCQlyYyA9IG9jZnMyX3dyaXRlX3plcm9fcGFnZShpbm9kZSwgemVyb19wb3MsIG5leHRfcG9zKTsKKwkJaWYgKHJjIDwgMCkgeworCQkJbWxvZ19lcnJubyhyYyk7CisJCQlicmVhazsKKwkJfQorCQl6ZXJvX3BvcyA9IG5leHRfcG9zOwogCiAJCS8qCiAJCSAqIFZlcnkgbGFyZ2UgZXh0ZW5kcyBoYXZlIHRoZSBwb3RlbnRpYWwgdG8gbG9jayB1cApAQCAtODEwLDE2ICs5NTQsNjMgQEAKIAkJY29uZF9yZXNjaGVkKCk7CiAJfQogCi1vdXQ6CisJcmV0dXJuIHJjOworfQorCitpbnQgb2NmczJfemVyb19leHRlbmQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKKwkJICAgICAgbG9mZl90IHplcm9fdG9fc2l6ZSkKK3sKKwlpbnQgcmV0ID0gMDsKKwl1NjQgemVyb19zdGFydCwgcmFuZ2Vfc3RhcnQgPSAwLCByYW5nZV9lbmQgPSAwOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKKworCXplcm9fc3RhcnQgPSBvY2ZzMl9hbGlnbl9ieXRlc190b19ibG9ja3Moc2IsIGlfc2l6ZV9yZWFkKGlub2RlKSk7CisJbWxvZygwLCAiemVyb19zdGFydCAlbGx1IGZvciBpX3NpemUgJWxsdVxuIiwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpemVyb19zdGFydCwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaV9zaXplX3JlYWQoaW5vZGUpKTsKKwl3aGlsZSAoemVyb19zdGFydCA8IHplcm9fdG9fc2l6ZSkgeworCQlyZXQgPSBvY2ZzMl96ZXJvX2V4dGVuZF9nZXRfcmFuZ2UoaW5vZGUsIGRpX2JoLCB6ZXJvX3N0YXJ0LAorCQkJCQkJICB6ZXJvX3RvX3NpemUsCisJCQkJCQkgICZyYW5nZV9zdGFydCwKKwkJCQkJCSAgJnJhbmdlX2VuZCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWJyZWFrOworCQl9CisJCWlmICghcmFuZ2VfZW5kKQorCQkJYnJlYWs7CisJCS8qIFRyaW0gdGhlIGVuZHMgKi8KKwkJaWYgKHJhbmdlX3N0YXJ0IDwgemVyb19zdGFydCkKKwkJCXJhbmdlX3N0YXJ0ID0gemVyb19zdGFydDsKKwkJaWYgKHJhbmdlX2VuZCA+IHplcm9fdG9fc2l6ZSkKKwkJCXJhbmdlX2VuZCA9IHplcm9fdG9fc2l6ZTsKKworCQlyZXQgPSBvY2ZzMl96ZXJvX2V4dGVuZF9yYW5nZShpbm9kZSwgcmFuZ2Vfc3RhcnQsCisJCQkJCSAgICAgIHJhbmdlX2VuZCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWJyZWFrOworCQl9CisJCXplcm9fc3RhcnQgPSByYW5nZV9lbmQ7CisJfQorCiAJcmV0dXJuIHJldDsKIH0KIAotaW50IG9jZnMyX2V4dGVuZF9ub19ob2xlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgbmV3X2lfc2l6ZSwgdTY0IHplcm9fdG8pCitpbnQgb2NmczJfZXh0ZW5kX25vX2hvbGVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCisJCQkgIHU2NCBuZXdfaV9zaXplLCB1NjQgemVyb190bykKIHsKIAlpbnQgcmV0OwogCXUzMiBjbHVzdGVyc190b19hZGQ7CiAJc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gT0NGUzJfSShpbm9kZSk7CiAKKwkvKgorCSAqIE9ubHkgcXVvdGEgZmlsZXMgY2FsbCB0aGlzIHdpdGhvdXQgYSBiaCwgYW5kIHRoZXkgY2FuJ3QgYmUKKwkgKiByZWZjb3VudGVkLgorCSAqLworCUJVR19PTighZGlfYmggJiYgKG9pLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9IQVNfUkVGQ09VTlRfRkwpKTsKKwlCVUdfT04oIWRpX2JoICYmICEob2ktPmlwX2ZsYWdzICYgT0NGUzJfSU5PREVfU1lTVEVNX0ZJTEUpKTsKKwogCWNsdXN0ZXJzX3RvX2FkZCA9IG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhpbm9kZS0+aV9zYiwgbmV3X2lfc2l6ZSk7CiAJaWYgKGNsdXN0ZXJzX3RvX2FkZCA8IG9pLT5pcF9jbHVzdGVycykKIAkJY2x1c3RlcnNfdG9fYWRkID0gMDsKQEAgLTg0MCw3ICsxMDMxLDcgQEAKIAkgKiBzdGlsbCBuZWVkIHRvIHplcm8gdGhlIGFyZWEgYmV0d2VlbiB0aGUgb2xkIGlfc2l6ZSBhbmQgdGhlCiAJICogbmV3IGlfc2l6ZS4KIAkgKi8KLQlyZXQgPSBvY2ZzMl96ZXJvX2V4dGVuZChpbm9kZSwgemVyb190byk7CisJcmV0ID0gb2NmczJfemVyb19leHRlbmQoaW5vZGUsIGRpX2JoLCB6ZXJvX3RvKTsKIAlpZiAocmV0IDwgMCkKIAkJbWxvZ19lcnJubyhyZXQpOwogCkBAIC04NjIsMjcgKzEwNTMsMTUgQEAKIAkJZ290byBvdXQ7CiAKIAlpZiAoaV9zaXplX3JlYWQoaW5vZGUpID09IG5ld19pX3NpemUpCi0gIAkJZ290byBvdXQ7CisJCWdvdG8gb3V0OwogCUJVR19PTihuZXdfaV9zaXplIDwgaV9zaXplX3JlYWQoaW5vZGUpKTsKIAogCS8qCi0JICogRmFsbCB0aHJvdWdoIGZvciBjb252ZXJ0aW5nIGlubGluZSBkYXRhLCBldmVuIGlmIHRoZSBmcwotCSAqIHN1cHBvcnRzIHNwYXJzZSBmaWxlcy4KLQkgKgotCSAqIFRoZSBjaGVjayBmb3IgaW5saW5lIGRhdGEgaGVyZSBpcyBsZWdhbCAtIG5vYm9keSBjYW4gYWRkCi0JICogdGhlIGZlYXR1cmUgc2luY2Ugd2UgaGF2ZSBpX211dGV4LiBXZSBtdXN0IGNoZWNrIGl0IGFnYWluCi0JICogYWZ0ZXIgYWNxdWlyaW5nIGlwX2FsbG9jX3NlbSB0aG91Z2gsIGFzIHBhdGhzIGxpa2UgbW1hcAotCSAqIG1pZ2h0IGhhdmUgcmFjZWQgdXMgdG8gY29udmVydGluZyB0aGUgaW5vZGUgdG8gZXh0ZW50cy4KLQkgKi8KLQlpZiAoIShvaS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX0RBVEFfRkwpCi0JICAgICYmIG9jZnMyX3NwYXJzZV9hbGxvYyhPQ0ZTMl9TQihpbm9kZS0+aV9zYikpKQotCQlnb3RvIG91dF91cGRhdGVfc2l6ZTsKLQotCS8qCiAJICogVGhlIGFsbG9jIHNlbSBibG9ja3MgcGVvcGxlIGluIHJlYWQvd3JpdGUgZnJvbSByZWFkaW5nIG91cgogCSAqIGFsbG9jYXRpb24gdW50aWwgd2UncmUgZG9uZSBjaGFuZ2luZyBpdC4gV2UgZGVwZW5kIG9uCiAJICogaV9tdXRleCB0byBibG9jayBvdGhlciBleHRlbmQvdHJ1bmNhdGUgY2FsbHMgd2hpbGUgd2UncmUKLQkgKiBoZXJlLgorCSAqIGhlcmUuICBXZSBldmVuIGhhdmUgdG8gaG9sZCBpdCBmb3Igc3BhcnNlIGZpbGVzIGJlY2F1c2UgdGhlcmUKKwkgKiBtaWdodCBiZSBzb21lIHRhaWwgemVyb2luZy4KIAkgKi8KIAlkb3duX3dyaXRlKCZvaS0+aXBfYWxsb2Nfc2VtKTsKIApAQCAtODk5LDE0ICsxMDc4LDE2IEBACiAJCXJldCA9IG9jZnMyX2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50cyhpbm9kZSwgZGlfYmgpOwogCQlpZiAocmV0KSB7CiAJCQl1cF93cml0ZSgmb2ktPmlwX2FsbG9jX3NlbSk7Ci0KIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQogCi0JaWYgKCFvY2ZzMl9zcGFyc2VfYWxsb2MoT0NGUzJfU0IoaW5vZGUtPmlfc2IpKSkKLQkJcmV0ID0gb2NmczJfZXh0ZW5kX25vX2hvbGVzKGlub2RlLCBuZXdfaV9zaXplLCBuZXdfaV9zaXplKTsKKwlpZiAob2NmczJfc3BhcnNlX2FsbG9jKE9DRlMyX1NCKGlub2RlLT5pX3NiKSkpCisJCXJldCA9IG9jZnMyX3plcm9fZXh0ZW5kKGlub2RlLCBkaV9iaCwgbmV3X2lfc2l6ZSk7CisJZWxzZQorCQlyZXQgPSBvY2ZzMl9leHRlbmRfbm9faG9sZXMoaW5vZGUsIGRpX2JoLCBuZXdfaV9zaXplLAorCQkJCQkgICAgbmV3X2lfc2l6ZSk7CiAKIAl1cF93cml0ZSgmb2ktPmlwX2FsbG9jX3NlbSk7CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2ZpbGUuaCBiL2ZzL29jZnMyL2ZpbGUuaAppbmRleCBkNjZjZjRmLi45N2JmNzYxIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9maWxlLmgKKysrIGIvZnMvb2NmczIvZmlsZS5oCkBAIC01NCw4ICs1NCwxMCBAQAogaW50IG9jZnMyX3NpbXBsZV9zaXplX3VwZGF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAogCQkJICAgICB1NjQgbmV3X2lfc2l6ZSk7Ci1pbnQgb2NmczJfZXh0ZW5kX25vX2hvbGVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBuZXdfaV9zaXplLAotCQkJICB1NjQgemVyb190byk7CitpbnQgb2NmczJfZXh0ZW5kX25vX2hvbGVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCisJCQkgIHU2NCBuZXdfaV9zaXplLCB1NjQgemVyb190byk7CitpbnQgb2NmczJfemVyb19leHRlbmQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKKwkJICAgICAgbG9mZl90IHplcm9fdG8pOwogaW50IG9jZnMyX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpOwogaW50IG9jZnMyX2dldGF0dHIoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJICBzdHJ1Y3Qga3N0YXQgKnN0YXQpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvam91cm5hbC5jIGIvZnMvb2NmczIvam91cm5hbC5jCmluZGV4IDQ3ODc4Y2YuLjYyNWRlOWQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2pvdXJuYWwuYworKysgYi9mcy9vY2ZzMi9qb3VybmFsLmMKQEAgLTQ3Miw3ICs0NzIsNyBAQAogCXJldHVybiBjb250YWluZXJfb2YodHJpZ2dlcnMsIHN0cnVjdCBvY2ZzMl90cmlnZ2Vycywgb3RfdHJpZ2dlcnMpOwogfQogCi1zdGF0aWMgdm9pZCBvY2ZzMl9jb21taXRfdHJpZ2dlcihzdHJ1Y3QgamJkMl9idWZmZXJfdHJpZ2dlcl90eXBlICp0cmlnZ2VycywKK3N0YXRpYyB2b2lkIG9jZnMyX2Zyb3plbl90cmlnZ2VyKHN0cnVjdCBqYmQyX2J1ZmZlcl90cmlnZ2VyX3R5cGUgKnRyaWdnZXJzLAogCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJCSB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKQEAgLTQ5MSw3ICs0OTEsNyBAQAogICogUXVvdGEgYmxvY2tzIGhhdmUgdGhlaXIgb3duIHRyaWdnZXIgYmVjYXVzZSB0aGUgc3RydWN0IG9jZnMyX2Jsb2NrX2NoZWNrCiAgKiBvZmZzZXQgZGVwZW5kcyBvbiB0aGUgYmxvY2tzaXplLgogICovCi1zdGF0aWMgdm9pZCBvY2ZzMl9kcV9jb21taXRfdHJpZ2dlcihzdHJ1Y3QgamJkMl9idWZmZXJfdHJpZ2dlcl90eXBlICp0cmlnZ2VycywKK3N0YXRpYyB2b2lkIG9jZnMyX2RxX2Zyb3plbl90cmlnZ2VyKHN0cnVjdCBqYmQyX2J1ZmZlcl90cmlnZ2VyX3R5cGUgKnRyaWdnZXJzLAogCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJCSB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKQEAgLTUxMSw3ICs1MTEsNyBAQAogICogRGlyZWN0b3J5IGJsb2NrcyBhbHNvIGhhdmUgdGhlaXIgb3duIHRyaWdnZXIgYmVjYXVzZSB0aGUKICAqIHN0cnVjdCBvY2ZzMl9ibG9ja19jaGVjayBvZmZzZXQgZGVwZW5kcyBvbiB0aGUgYmxvY2tzaXplLgogICovCi1zdGF0aWMgdm9pZCBvY2ZzMl9kYl9jb21taXRfdHJpZ2dlcihzdHJ1Y3QgamJkMl9idWZmZXJfdHJpZ2dlcl90eXBlICp0cmlnZ2VycywKK3N0YXRpYyB2b2lkIG9jZnMyX2RiX2Zyb3plbl90cmlnZ2VyKHN0cnVjdCBqYmQyX2J1ZmZlcl90cmlnZ2VyX3R5cGUgKnRyaWdnZXJzLAogCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJCSB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKQEAgLTU0NCw3ICs1NDQsNyBAQAogCiBzdGF0aWMgc3RydWN0IG9jZnMyX3RyaWdnZXJzIGRpX3RyaWdnZXJzID0gewogCS5vdF90cmlnZ2VycyA9IHsKLQkJLnRfY29tbWl0ID0gb2NmczJfY29tbWl0X3RyaWdnZXIsCisJCS50X2Zyb3plbiA9IG9jZnMyX2Zyb3plbl90cmlnZ2VyLAogCQkudF9hYm9ydCA9IG9jZnMyX2Fib3J0X3RyaWdnZXIsCiAJfSwKIAkub3Rfb2Zmc2V0CT0gb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX2Rpbm9kZSwgaV9jaGVjayksCkBAIC01NTIsNyArNTUyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBvY2ZzMl90cmlnZ2VycyBlYl90cmlnZ2VycyA9IHsKIAkub3RfdHJpZ2dlcnMgPSB7Ci0JCS50X2NvbW1pdCA9IG9jZnMyX2NvbW1pdF90cmlnZ2VyLAorCQkudF9mcm96ZW4gPSBvY2ZzMl9mcm96ZW5fdHJpZ2dlciwKIAkJLnRfYWJvcnQgPSBvY2ZzMl9hYm9ydF90cmlnZ2VyLAogCX0sCiAJLm90X29mZnNldAk9IG9mZnNldG9mKHN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2ssIGhfY2hlY2spLApAQCAtNTYwLDcgKzU2MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb2NmczJfdHJpZ2dlcnMgcmJfdHJpZ2dlcnMgPSB7CiAJLm90X3RyaWdnZXJzID0gewotCQkudF9jb21taXQgPSBvY2ZzMl9jb21taXRfdHJpZ2dlciwKKwkJLnRfZnJvemVuID0gb2NmczJfZnJvemVuX3RyaWdnZXIsCiAJCS50X2Fib3J0ID0gb2NmczJfYWJvcnRfdHJpZ2dlciwKIAl9LAogCS5vdF9vZmZzZXQJPSBvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2ssIHJmX2NoZWNrKSwKQEAgLTU2OCw3ICs1NjgsNyBAQAogCiBzdGF0aWMgc3RydWN0IG9jZnMyX3RyaWdnZXJzIGdkX3RyaWdnZXJzID0gewogCS5vdF90cmlnZ2VycyA9IHsKLQkJLnRfY29tbWl0ID0gb2NmczJfY29tbWl0X3RyaWdnZXIsCisJCS50X2Zyb3plbiA9IG9jZnMyX2Zyb3plbl90cmlnZ2VyLAogCQkudF9hYm9ydCA9IG9jZnMyX2Fib3J0X3RyaWdnZXIsCiAJfSwKIAkub3Rfb2Zmc2V0CT0gb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX2dyb3VwX2Rlc2MsIGJnX2NoZWNrKSwKQEAgLTU3NiwxNCArNTc2LDE0IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb2NmczJfdHJpZ2dlcnMgZGJfdHJpZ2dlcnMgPSB7CiAJLm90X3RyaWdnZXJzID0gewotCQkudF9jb21taXQgPSBvY2ZzMl9kYl9jb21taXRfdHJpZ2dlciwKKwkJLnRfZnJvemVuID0gb2NmczJfZGJfZnJvemVuX3RyaWdnZXIsCiAJCS50X2Fib3J0ID0gb2NmczJfYWJvcnRfdHJpZ2dlciwKIAl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBvY2ZzMl90cmlnZ2VycyB4Yl90cmlnZ2VycyA9IHsKIAkub3RfdHJpZ2dlcnMgPSB7Ci0JCS50X2NvbW1pdCA9IG9jZnMyX2NvbW1pdF90cmlnZ2VyLAorCQkudF9mcm96ZW4gPSBvY2ZzMl9mcm96ZW5fdHJpZ2dlciwKIAkJLnRfYWJvcnQgPSBvY2ZzMl9hYm9ydF90cmlnZ2VyLAogCX0sCiAJLm90X29mZnNldAk9IG9mZnNldG9mKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jaywgeGJfY2hlY2spLApAQCAtNTkxLDE0ICs1OTEsMTQgQEAKIAogc3RhdGljIHN0cnVjdCBvY2ZzMl90cmlnZ2VycyBkcV90cmlnZ2VycyA9IHsKIAkub3RfdHJpZ2dlcnMgPSB7Ci0JCS50X2NvbW1pdCA9IG9jZnMyX2RxX2NvbW1pdF90cmlnZ2VyLAorCQkudF9mcm96ZW4gPSBvY2ZzMl9kcV9mcm96ZW5fdHJpZ2dlciwKIAkJLnRfYWJvcnQgPSBvY2ZzMl9hYm9ydF90cmlnZ2VyLAogCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IG9jZnMyX3RyaWdnZXJzIGRyX3RyaWdnZXJzID0gewogCS5vdF90cmlnZ2VycyA9IHsKLQkJLnRfY29tbWl0ID0gb2NmczJfY29tbWl0X3RyaWdnZXIsCisJCS50X2Zyb3plbiA9IG9jZnMyX2Zyb3plbl90cmlnZ2VyLAogCQkudF9hYm9ydCA9IG9jZnMyX2Fib3J0X3RyaWdnZXIsCiAJfSwKIAkub3Rfb2Zmc2V0CT0gb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2ssIGRyX2NoZWNrKSwKQEAgLTYwNiw3ICs2MDYsNyBAQAogCiBzdGF0aWMgc3RydWN0IG9jZnMyX3RyaWdnZXJzIGRsX3RyaWdnZXJzID0gewogCS5vdF90cmlnZ2VycyA9IHsKLQkJLnRfY29tbWl0ID0gb2NmczJfY29tbWl0X3RyaWdnZXIsCisJCS50X2Zyb3plbiA9IG9jZnMyX2Zyb3plbl90cmlnZ2VyLAogCQkudF9hYm9ydCA9IG9jZnMyX2Fib3J0X3RyaWdnZXIsCiAJfSwKIAkub3Rfb2Zmc2V0CT0gb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX2R4X2xlYWYsIGRsX2NoZWNrKSwKQEAgLTE5MzYsNyArMTkzNiw3IEBACiAJbXV0ZXhfbG9jaygmb3MtPm9zX2xvY2spOwogCW9jZnMyX3F1ZXVlX29ycGhhbl9zY2FuKG9zYik7CiAJaWYgKGF0b21pY19yZWFkKCZvcy0+b3Nfc3RhdGUpID09IE9SUEhBTl9TQ0FOX0FDVElWRSkKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZvcy0+b3Nfb3JwaGFuX3NjYW5fd29yaywKKwkJcXVldWVfZGVsYXllZF93b3JrKG9jZnMyX3dxLCAmb3MtPm9zX29ycGhhbl9zY2FuX3dvcmssCiAJCQkJICAgICAgb2NmczJfb3JwaGFuX3NjYW5fdGltZW91dCgpKTsKIAltdXRleF91bmxvY2soJm9zLT5vc19sb2NrKTsKIH0KQEAgLTE5NzYsOCArMTk3Niw4IEBACiAJCWF0b21pY19zZXQoJm9zLT5vc19zdGF0ZSwgT1JQSEFOX1NDQU5fSU5BQ1RJVkUpOwogCWVsc2UgewogCQlhdG9taWNfc2V0KCZvcy0+b3Nfc3RhdGUsIE9SUEhBTl9TQ0FOX0FDVElWRSk7Ci0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmb3MtPm9zX29ycGhhbl9zY2FuX3dvcmssCi0JCQkJICAgICAgb2NmczJfb3JwaGFuX3NjYW5fdGltZW91dCgpKTsKKwkJcXVldWVfZGVsYXllZF93b3JrKG9jZnMyX3dxLCAmb3MtPm9zX29ycGhhbl9zY2FuX3dvcmssCisJCQkJICAgb2NmczJfb3JwaGFuX3NjYW5fdGltZW91dCgpKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2xvY2FsYWxsb2MuYyBiL2ZzL29jZnMyL2xvY2FsYWxsb2MuYwppbmRleCAzZDc0MTk2Li5lYzZhZGJmIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9sb2NhbGFsbG9jLmMKKysrIGIvZnMvb2NmczIvbG9jYWxhbGxvYy5jCkBAIC0xMTgsNiArMTE4LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgbGFfbWI7CiAJdW5zaWduZWQgaW50IGdkX21iOworCXVuc2lnbmVkIGludCBsYV9tYXhfbWI7CiAJdW5zaWduZWQgaW50IG1lZ3NfcGVyX3Nsb3Q7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG9zYi0+c2I7CiAKQEAgLTE4Miw2ICsxODMsMTIgQEAKIAlpZiAobWVnc19wZXJfc2xvdCA8IGxhX21iKQogCQlsYV9tYiA9IG1lZ3NfcGVyX3Nsb3Q7CiAKKwkvKiBXZSBjYW4ndCBzdG9yZSBtb3JlIGJpdHMgdGhhbiB3ZSBjYW4gaW4gYSBibG9jay4gKi8KKwlsYV9tYXhfbWIgPSBvY2ZzMl9jbHVzdGVyc190b19tZWdhYnl0ZXMob3NiLT5zYiwKKwkJCQkJCW9jZnMyX2xvY2FsX2FsbG9jX3NpemUoc2IpICogOCk7CisJaWYgKGxhX21iID4gbGFfbWF4X21iKQorCQlsYV9tYiA9IGxhX21heF9tYjsKKwogCXJldHVybiBsYV9tYjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvcXVvdGFfZ2xvYmFsLmMgYi9mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYwppbmRleCAyYmIzNWZlLi40NjA3OTIzIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYworKysgYi9mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYwpAQCAtNzc1LDcgKzc3NSw3IEBACiAJCSAqIGxvY2tpbmcgYWxsb2NhdG9ycyByYW5rcyBhYm92ZSBhIHRyYW5zYWN0aW9uIHN0YXJ0CiAJCSAqLwogCQlXQVJOX09OKGpvdXJuYWxfY3VycmVudF9oYW5kbGUoKSk7Ci0JCXN0YXR1cyA9IG9jZnMyX2V4dGVuZF9ub19ob2xlcyhncWlub2RlLAorCQlzdGF0dXMgPSBvY2ZzMl9leHRlbmRfbm9faG9sZXMoZ3Fpbm9kZSwgTlVMTCwKIAkJCWdxaW5vZGUtPmlfc2l6ZSArIChuZWVkX2FsbG9jIDw8IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSwKIAkJCWdxaW5vZGUtPmlfc2l6ZSk7CiAJCWlmIChzdGF0dXMgPCAwKQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvcXVvdGFfbG9jYWwuYyBiL2ZzL29jZnMyL3F1b3RhX2xvY2FsLmMKaW5kZXggOGJkNzBkNC4uZGM3ODc2NCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvcXVvdGFfbG9jYWwuYworKysgYi9mcy9vY2ZzMi9xdW90YV9sb2NhbC5jCkBAIC05NzEsNyArOTcxLDcgQEAKIAl1NjQgcF9ibGtubzsKIAogCS8qIFdlIGFyZSBwcm90ZWN0ZWQgYnkgZHFpb19zZW0gc28gbm8gbG9ja2luZyBuZWVkZWQgKi8KLQlzdGF0dXMgPSBvY2ZzMl9leHRlbmRfbm9faG9sZXMobHFpbm9kZSwKKwlzdGF0dXMgPSBvY2ZzMl9leHRlbmRfbm9faG9sZXMobHFpbm9kZSwgTlVMTCwKIAkJCQkgICAgICAgbHFpbm9kZS0+aV9zaXplICsgMiAqIHNiLT5zX2Jsb2Nrc2l6ZSwKIAkJCQkgICAgICAgbHFpbm9kZS0+aV9zaXplKTsKIAlpZiAoc3RhdHVzIDwgMCkgewpAQCAtMTExNCw3ICsxMTE0LDcgQEAKIAkJcmV0dXJuIG9jZnMyX2xvY2FsX3F1b3RhX2FkZF9jaHVuayhzYiwgdHlwZSwgb2Zmc2V0KTsKIAogCS8qIFdlIGFyZSBwcm90ZWN0ZWQgYnkgZHFpb19zZW0gc28gbm8gbG9ja2luZyBuZWVkZWQgKi8KLQlzdGF0dXMgPSBvY2ZzMl9leHRlbmRfbm9faG9sZXMobHFpbm9kZSwKKwlzdGF0dXMgPSBvY2ZzMl9leHRlbmRfbm9faG9sZXMobHFpbm9kZSwgTlVMTCwKIAkJCQkgICAgICAgbHFpbm9kZS0+aV9zaXplICsgc2ItPnNfYmxvY2tzaXplLAogCQkJCSAgICAgICBscWlub2RlLT5pX3NpemUpOwogCWlmIChzdGF0dXMgPCAwKSB7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYyBiL2ZzL29jZnMyL3JlZmNvdW50dHJlZS5jCmluZGV4IDQ3OTNmMzYuLjNhYzVhYTcgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3JlZmNvdW50dHJlZS5jCisrKyBiL2ZzL29jZnMyL3JlZmNvdW50dHJlZS5jCkBAIC0yOTMxLDYgKzI5MzEsMTIgQEAKIAogCW9mZnNldCA9ICgobG9mZl90KWNwb3MpIDw8IE9DRlMyX1NCKHNiKS0+c19jbHVzdGVyc2l6ZV9iaXRzOwogCWVuZCA9IG9mZnNldCArIChuZXdfbGVuIDw8IE9DRlMyX1NCKHNiKS0+c19jbHVzdGVyc2l6ZV9iaXRzKTsKKwkvKgorCSAqIFdlIG9ubHkgZHVwbGljYXRlIHBhZ2VzIHVudGlsIHdlIHJlYWNoIHRoZSBwYWdlIGNvbnRhaW5zIGlfc2l6ZSAtIDEuCisJICogU28gdHJpbSAnZW5kJyB0byBpX3NpemUuCisJICovCisJaWYgKGVuZCA+IGlfc2l6ZV9yZWFkKGNvbnRleHQtPmlub2RlKSkKKwkJZW5kID0gaV9zaXplX3JlYWQoY29udGV4dC0+aW5vZGUpOwogCiAJd2hpbGUgKG9mZnNldCA8IGVuZCkgewogCQlwYWdlX2luZGV4ID0gb2Zmc2V0ID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CkBAIC00MTY2LDYgKzQxNzIsMTIgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gb2xkX2RlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19iaCA9IE5VTEw7CiAKKwlpZiAoT0NGUzJfSShpbm9kZSktPmlwX2ZsYWdzICYgT0NGUzJfSU5PREVfU1lTVEVNX0ZJTEUpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKIAlyZXQgPSBmaWxlbWFwX2ZkYXRhd3JpdGUoaW5vZGUtPmlfbWFwcGluZyk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdWJhbGxvYy5jIGIvZnMvb2NmczIvc3ViYWxsb2MuYwppbmRleCBmNGMyYTllLi5hOGU2YTk1IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zdWJhbGxvYy5jCisrKyBiL2ZzL29jZnMyL3N1YmFsbG9jLmMKQEAgLTc0MSw3ICs3NDEsNyBAQAogCQkgICAgIGxlMTZfdG9fY3B1KGJnLT5iZ19mcmVlX2JpdHNfY291bnQpKTsKIAlsZTMyX2FkZF9jcHUoJmNsLT5jbF9yZWNzW2FsbG9jX3JlY10uY190b3RhbCwKIAkJICAgICBsZTE2X3RvX2NwdShiZy0+YmdfYml0cykpOwotCWNsLT5jbF9yZWNzW2FsbG9jX3JlY10uY19ibGtubyAgPSBjcHVfdG9fbGU2NChiZy0+YmdfYmxrbm8pOworCWNsLT5jbF9yZWNzW2FsbG9jX3JlY10uY19ibGtubyA9IGJnLT5iZ19ibGtubzsKIAlpZiAobGUxNl90b19jcHUoY2wtPmNsX25leHRfZnJlZV9yZWMpIDwgbGUxNl90b19jcHUoY2wtPmNsX2NvdW50KSkKIAkJbGUxNl9hZGRfY3B1KCZjbC0+Y2xfbmV4dF9mcmVlX3JlYywgMSk7CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N1cGVyLmMgYi9mcy9vY2ZzMi9zdXBlci5jCmluZGV4IDBlYWE5MjkuLjAzYTc5OWYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N1cGVyLmMKKysrIGIvZnMvb2NmczIvc3VwZXIuYwpAQCAtMjQ3Miw3ICsyNDcyLDcgQEAKIAlrZnJlZShvc2ItPnNsb3RfcmVjb3ZlcnlfZ2VuZXJhdGlvbnMpOwogCS8qIEZJWE1FCiAJICogVGhpcyBiZWxvbmdzIGluIGpvdXJuYWwgc2h1dGRvd24sIGJ1dCBiZWNhdXNlIHdlIGhhdmUgdG8KLQkgKiBhbGxvY2F0ZSBvc2ItPmpvdXJuYWwgYXQgdGhlIHN0YXJ0IG9mIG9jZnMyX2luaXRhbGl6ZV9vc2IoKSwKKwkgKiBhbGxvY2F0ZSBvc2ItPmpvdXJuYWwgYXQgdGhlIHN0YXJ0IG9mIG9jZnMyX2luaXRpYWxpemVfb3NiKCksCiAJICogd2UgZnJlZSBpdCBoZXJlLgogCSAqLwogCWtmcmVlKG9zYi0+am91cm5hbCk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuYwppbmRleCBlOTdiMzQ4Li5kMDM0NjlmIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi94YXR0ci5jCisrKyBiL2ZzL29jZnMyL3hhdHRyLmMKQEAgLTcwOSw3ICs3MDksNyBAQAogCQkJCQkgc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX2J1ZiAqdmIsCiAJCQkJCSBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2V0X2N0eHQgKmN0eHQpCiB7Ci0JaW50IHN0YXR1cyA9IDA7CisJaW50IHN0YXR1cyA9IDAsIGNyZWRpdHM7CiAJaGFuZGxlX3QgKmhhbmRsZSA9IGN0eHQtPmhhbmRsZTsKIAllbnVtIG9jZnMyX2FsbG9jX3Jlc3RhcnRlZCB3aHk7CiAJdTMyIHByZXZfY2x1c3RlcnMsIGxvZ2ljYWxfc3RhcnQgPSBsZTMyX3RvX2NwdSh2Yi0+dmJfeHYtPnhyX2NsdXN0ZXJzKTsKQEAgLTcxOSwzOSArNzE5LDU1IEBACiAKIAlvY2ZzMl9pbml0X3hhdHRyX3ZhbHVlX2V4dGVudF90cmVlKCZldCwgSU5PREVfQ0FDSEUoaW5vZGUpLCB2Yik7CiAKLQlzdGF0dXMgPSB2Yi0+dmJfYWNjZXNzKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCB2Yi0+dmJfYmgsCi0JCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7Ci0JaWYgKHN0YXR1cyA8IDApIHsKLQkJbWxvZ19lcnJubyhzdGF0dXMpOwotCQlnb3RvIGxlYXZlOworCXdoaWxlIChjbHVzdGVyc190b19hZGQpIHsKKwkJc3RhdHVzID0gdmItPnZiX2FjY2VzcyhoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwgdmItPnZiX2JoLAorCQkJCSAgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCQlicmVhazsKKwkJfQorCisJCXByZXZfY2x1c3RlcnMgPSBsZTMyX3RvX2NwdSh2Yi0+dmJfeHYtPnhyX2NsdXN0ZXJzKTsKKwkJc3RhdHVzID0gb2NmczJfYWRkX2NsdXN0ZXJzX2luX2J0cmVlKGhhbmRsZSwKKwkJCQkJCSAgICAgJmV0LAorCQkJCQkJICAgICAmbG9naWNhbF9zdGFydCwKKwkJCQkJCSAgICAgY2x1c3RlcnNfdG9fYWRkLAorCQkJCQkJICAgICAwLAorCQkJCQkJICAgICBjdHh0LT5kYXRhX2FjLAorCQkJCQkJICAgICBjdHh0LT5tZXRhX2FjLAorCQkJCQkJICAgICAmd2h5KTsKKwkJaWYgKChzdGF0dXMgPCAwKSAmJiAoc3RhdHVzICE9IC1FQUdBSU4pKSB7CisJCQlpZiAoc3RhdHVzICE9IC1FTk9TUEMpCisJCQkJbWxvZ19lcnJubyhzdGF0dXMpOworCQkJYnJlYWs7CisJCX0KKworCQlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgdmItPnZiX2JoKTsKKworCQljbHVzdGVyc190b19hZGQgLT0gbGUzMl90b19jcHUodmItPnZiX3h2LT54cl9jbHVzdGVycykgLQorCQkJCQkgcHJldl9jbHVzdGVyczsKKworCQlpZiAod2h5ICE9IFJFU1RBUlRfTk9ORSAmJiBjbHVzdGVyc190b19hZGQpIHsKKwkJCS8qCisJCQkgKiBXZSBjYW4gb25seSBmYWlsIGluIGNhc2UgdGhlIGFsbG9jIGZpbGUgZG9lc24ndCBnaXZlCisJCQkgKiB1cCBlbm91Z2ggY2x1c3RlcnMuCisJCQkgKi8KKwkJCUJVR19PTih3aHkgPT0gUkVTVEFSVF9NRVRBKTsKKworCQkJbWxvZygwLCAicmVzdGFydGluZyB4YXR0ciB2YWx1ZSBleHRlbnNpb24gZm9yICV1IgorCQkJICAgICAiIGNsdXN0ZXJzLC5cbiIsIGNsdXN0ZXJzX3RvX2FkZCk7CisJCQljcmVkaXRzID0gb2NmczJfY2FsY19leHRlbmRfY3JlZGl0cyhpbm9kZS0+aV9zYiwKKwkJCQkJCQkgICAgJnZiLT52Yl94di0+eHJfbGlzdCwKKwkJCQkJCQkgICAgY2x1c3RlcnNfdG9fYWRkKTsKKwkJCXN0YXR1cyA9IG9jZnMyX2V4dGVuZF90cmFucyhoYW5kbGUsIGNyZWRpdHMpOworCQkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQogCX0KIAotCXByZXZfY2x1c3RlcnMgPSBsZTMyX3RvX2NwdSh2Yi0+dmJfeHYtPnhyX2NsdXN0ZXJzKTsKLQlzdGF0dXMgPSBvY2ZzMl9hZGRfY2x1c3RlcnNfaW5fYnRyZWUoaGFuZGxlLAotCQkJCQkgICAgICZldCwKLQkJCQkJICAgICAmbG9naWNhbF9zdGFydCwKLQkJCQkJICAgICBjbHVzdGVyc190b19hZGQsCi0JCQkJCSAgICAgMCwKLQkJCQkJICAgICBjdHh0LT5kYXRhX2FjLAotCQkJCQkgICAgIGN0eHQtPm1ldGFfYWMsCi0JCQkJCSAgICAgJndoeSk7Ci0JaWYgKHN0YXR1cyA8IDApIHsKLQkJbWxvZ19lcnJubyhzdGF0dXMpOwotCQlnb3RvIGxlYXZlOwotCX0KLQotCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCB2Yi0+dmJfYmgpOwotCi0JY2x1c3RlcnNfdG9fYWRkIC09IGxlMzJfdG9fY3B1KHZiLT52Yl94di0+eHJfY2x1c3RlcnMpIC0gcHJldl9jbHVzdGVyczsKLQotCS8qCi0JICogV2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSBhbGxvY2F0ZWQgZW5vdWdoIHNwYWNlIGJlZm9yZSB0aGUgdHJhbnNhY3Rpb24sCi0JICogc28gbm8gbmVlZCB0byByZXN0YXJ0LgotCSAqLwotCUJVR19PTih3aHkgIT0gUkVTVEFSVF9OT05FIHx8IGNsdXN0ZXJzX3RvX2FkZCk7Ci0KLWxlYXZlOgotCiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtNjc4OCwxNiArNjgwNCwxNSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9idWNrZXRzKGhhbmRsZV90ICpoYW5kbGUsCitzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfYnVja2V0KGhhbmRsZV90ICpoYW5kbGUsCiAJCQkJdTY0IGJsa25vLCB1NjQgbmV3X2Jsa25vLCB1MzIgY2x1c3RlcnMsCisJCQkJdTMyICpjcG9zLCBpbnQgbnVtX2J1Y2tldHMsCiAJCQkJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCiAJCQkJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsCiAJCQkJc3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzICphcmdzKQogewogCWludCBpLCBqLCByZXQgPSAwOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBhcmdzLT5yZWZsaW5rLT5vbGRfaW5vZGUtPmlfc2I7Ci0JdTMyIGJwYyA9IG9jZnMyX3hhdHRyX2J1Y2tldHNfcGVyX2NsdXN0ZXIoT0NGUzJfU0Ioc2IpKTsKLQl1MzIgbnVtX2J1Y2tldHMgPSBjbHVzdGVycyAqIGJwYzsKIAlpbnQgYnBiID0gYXJncy0+b2xkX2J1Y2tldC0+YnVfYmxvY2tzOwogCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9idWYgdmIgPSB7CiAJCS52Yl9hY2Nlc3MgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcywKQEAgLTY4MTYsMTQgKzY4MzEsNiBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQkvKgotCQkgKiBUaGUgcmVhbCBidWNrZXQgbnVtIGluIHRoaXMgc2VyaWVzIG9mIGJsb2NrcyBpcyBzdG9yZWQKLQkJICogaW4gdGhlIDFzdCBidWNrZXQuCi0JCSAqLwotCQlpZiAoaSA9PSAwKQotCQkJbnVtX2J1Y2tldHMgPSBsZTE2X3RvX2NwdSgKLQkJCQlidWNrZXRfeGgoYXJncy0+b2xkX2J1Y2tldCktPnhoX251bV9idWNrZXRzKTsKLQogCQlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfam91cm5hbF9hY2Nlc3MoaGFuZGxlLAogCQkJCQkJYXJncy0+bmV3X2J1Y2tldCwKIAkJCQkJCU9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CkBAIC02ODM3LDYgKzY4NDQsMTggQEAKIAkJCSAgICAgICBidWNrZXRfYmxvY2soYXJncy0+b2xkX2J1Y2tldCwgaiksCiAJCQkgICAgICAgc2ItPnNfYmxvY2tzaXplKTsKIAorCQkvKgorCQkgKiBSZWNvcmQgdGhlIHN0YXJ0IGNwb3Mgc28gdGhhdCB3ZSBjYW4gdXNlIGl0IHRvIGluaXRpYWxpemUKKwkJICogb3VyIHhhdHRyIHRyZWUgd2UgYWxzbyBzZXQgdGhlIHhoX251bV9idWNrZXQgZm9yIHRoZSBuZXcKKwkJICogYnVja2V0LgorCQkgKi8KKwkJaWYgKGkgPT0gMCkgeworCQkJKmNwb3MgPSBsZTMyX3RvX2NwdShidWNrZXRfeGgoYXJncy0+bmV3X2J1Y2tldCktPgorCQkJCQkgICAgeGhfZW50cmllc1swXS54ZV9uYW1lX2hhc2gpOworCQkJYnVja2V0X3hoKGFyZ3MtPm5ld19idWNrZXQpLT54aF9udW1fYnVja2V0cyA9CisJCQkJY3B1X3RvX2xlMTYobnVtX2J1Y2tldHMpOworCQl9CisKIAkJb2NmczJfeGF0dHJfYnVja2V0X2pvdXJuYWxfZGlydHkoaGFuZGxlLCBhcmdzLT5uZXdfYnVja2V0KTsKIAogCQlyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2hlYWRlcihoYW5kbGUsIGFyZ3MtPnJlZmxpbmssCkBAIC02ODY2LDYgKzY4ODUsNyBAQAogCQl9CiAKIAkJb2NmczJfeGF0dHJfYnVja2V0X2pvdXJuYWxfZGlydHkoaGFuZGxlLCBhcmdzLT5uZXdfYnVja2V0KTsKKwogCQlvY2ZzMl94YXR0cl9idWNrZXRfcmVsc2UoYXJncy0+b2xkX2J1Y2tldCk7CiAJCW9jZnMyX3hhdHRyX2J1Y2tldF9yZWxzZShhcmdzLT5uZXdfYnVja2V0KTsKIAl9CkBAIC02ODc0LDYgKzY4OTQsNzUgQEAKIAlvY2ZzMl94YXR0cl9idWNrZXRfcmVsc2UoYXJncy0+bmV3X2J1Y2tldCk7CiAJcmV0dXJuIHJldDsKIH0KKworc3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX2J1Y2tldHMoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCXN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyAqYXJncywKKwkJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAorCQkJCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLAorCQkJCXU2NCBibGtubywgdTMyIGNwb3MsIHUzMiBsZW4pCit7CisJaW50IHJldCwgZmlyc3RfaW5zZXJ0ZWQgPSAwOworCXUzMiBwX2NsdXN0ZXIsIG51bV9jbHVzdGVycywgcmVmbGlua19jcG9zID0gMDsKKwl1NjQgbmV3X2Jsa25vOworCXVuc2lnbmVkIGludCBudW1fYnVja2V0cywgcmVmbGlua19idWNrZXRzOworCXVuc2lnbmVkIGludCBicGMgPQorCQlvY2ZzMl94YXR0cl9idWNrZXRzX3Blcl9jbHVzdGVyKE9DRlMyX1NCKGlub2RlLT5pX3NiKSk7CisKKwlyZXQgPSBvY2ZzMl9yZWFkX3hhdHRyX2J1Y2tldChhcmdzLT5vbGRfYnVja2V0LCBibGtubyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKwludW1fYnVja2V0cyA9IGxlMTZfdG9fY3B1KGJ1Y2tldF94aChhcmdzLT5vbGRfYnVja2V0KS0+eGhfbnVtX2J1Y2tldHMpOworCW9jZnMyX3hhdHRyX2J1Y2tldF9yZWxzZShhcmdzLT5vbGRfYnVja2V0KTsKKworCXdoaWxlIChsZW4gJiYgbnVtX2J1Y2tldHMpIHsKKwkJcmV0ID0gb2NmczJfY2xhaW1fY2x1c3RlcnMoaGFuZGxlLCBkYXRhX2FjLAorCQkJCQkgICAxLCAmcF9jbHVzdGVyLCAmbnVtX2NsdXN0ZXJzKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQluZXdfYmxrbm8gPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsIHBfY2x1c3Rlcik7CisJCXJlZmxpbmtfYnVja2V0cyA9IG1pbihudW1fYnVja2V0cywgYnBjICogbnVtX2NsdXN0ZXJzKTsKKworCQlyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2J1Y2tldChoYW5kbGUsIGJsa25vLAorCQkJCQkJIG5ld19ibGtubywgbnVtX2NsdXN0ZXJzLAorCQkJCQkJICZyZWZsaW5rX2Nwb3MsIHJlZmxpbmtfYnVja2V0cywKKwkJCQkJCSBtZXRhX2FjLCBkYXRhX2FjLCBhcmdzKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKgorCQkgKiBGb3IgdGhlIDFzdCBhbGxvY2F0ZWQgY2x1c3Rlciwgd2UgbWFrZSBpdCB1c2UgdGhlIHNhbWUgY3BvcworCQkgKiBzbyB0aGF0IHRoZSB4YXR0ciB0cmVlIGxvb2tzIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBvbmUKKwkJICogaW4gdGhlIG1vc3QgY2FzZS4KKwkJICovCisJCWlmICghZmlyc3RfaW5zZXJ0ZWQpIHsKKwkJCXJlZmxpbmtfY3BvcyA9IGNwb3M7CisJCQlmaXJzdF9pbnNlcnRlZCA9IDE7CisJCX0KKwkJcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGV0LCByZWZsaW5rX2Nwb3MsIG5ld19ibGtubywKKwkJCQkJICBudW1fY2x1c3RlcnMsIDAsIG1ldGFfYWMpOworCQlpZiAocmV0KQorCQkJbWxvZ19lcnJubyhyZXQpOworCisJCW1sb2coMCwgImluc2VydCBuZXcgeGF0dHIgZXh0ZW50IHJlYyBzdGFydCAlbGx1IGxlbiAldSB0byAldVxuIiwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW5ld19ibGtubywgbnVtX2NsdXN0ZXJzLCByZWZsaW5rX2Nwb3MpOworCisJCWxlbiAtPSBudW1fY2x1c3RlcnM7CisJCWJsa25vICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgbnVtX2NsdXN0ZXJzKTsKKwkJbnVtX2J1Y2tldHMgLT0gcmVmbGlua19idWNrZXRzOworCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorCiAvKgogICogQ3JlYXRlIHRoZSBzYW1lIHhhdHRyIGV4dGVudCByZWNvcmQgaW4gdGhlIG5ldyBpbm9kZSdzIHhhdHRyIHRyZWUuCiAgKi8KQEAgLTY4ODUsOCArNjk3NCw2IEBACiAJCQkJICAgdm9pZCAqcGFyYSkKIHsKIAlpbnQgcmV0LCBjcmVkaXRzID0gMDsKLQl1MzIgcF9jbHVzdGVyLCBudW1fY2x1c3RlcnM7Ci0JdTY0IG5ld19ibGtubzsKIAloYW5kbGVfdCAqaGFuZGxlOwogCXN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyAqYXJncyA9CiAJCQkoc3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzICopcGFyYTsKQEAgLTY4OTUsNiArNjk4Miw5IEBACiAJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMgPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKIAorCW1sb2coMCwgInJlZmxpbmsgeGF0dHIgYnVja2V0cyAlbGx1IGxlbiAldVxuIiwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmxrbm8sIGxlbik7CisKIAlvY2ZzMl9pbml0X3hhdHRyX3RyZWVfZXh0ZW50X3RyZWUoJmV0LAogCQkJCQkgIElOT0RFX0NBQ0hFKGFyZ3MtPnJlZmxpbmstPm5ld19pbm9kZSksCiAJCQkJCSAgYXJncy0+bmV3X2Jsa19iaCk7CkBAIC02OTE0LDMyICs3MDA0LDEyIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IG9jZnMyX2NsYWltX2NsdXN0ZXJzKGhhbmRsZSwgZGF0YV9hYywKLQkJCQkgICBsZW4sICZwX2NsdXN0ZXIsICZudW1fY2x1c3RlcnMpOwotCWlmIChyZXQpIHsKLQkJbWxvZ19lcnJubyhyZXQpOwotCQlnb3RvIG91dF9jb21taXQ7Ci0JfQotCi0JbmV3X2Jsa25vID0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKG9zYi0+c2IsIHBfY2x1c3Rlcik7Ci0KLQltbG9nKDAsICJyZWZsaW5rIHhhdHRyIGJ1Y2tldHMgJWxsdSB0byAlbGx1LCBsZW4gJXVcbiIsCi0JICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJsa25vLCAodW5zaWduZWQgbG9uZyBsb25nKW5ld19ibGtubywgbGVuKTsKLQlyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2J1Y2tldHMoaGFuZGxlLCBibGtubywgbmV3X2Jsa25vLCBsZW4sCi0JCQkJCSAgbWV0YV9hYywgZGF0YV9hYywgYXJncyk7Ci0JaWYgKHJldCkgewotCQltbG9nX2Vycm5vKHJldCk7Ci0JCWdvdG8gb3V0X2NvbW1pdDsKLQl9Ci0KLQltbG9nKDAsICJpbnNlcnQgbmV3IHhhdHRyIGV4dGVudCByZWMgc3RhcnQgJWxsdSBsZW4gJXUgdG8gJXVcbiIsCi0JICAgICAodW5zaWduZWQgbG9uZyBsb25nKW5ld19ibGtubywgbGVuLCBjcG9zKTsKLQlyZXQgPSBvY2ZzMl9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgJmV0LCBjcG9zLCBuZXdfYmxrbm8sCi0JCQkJICBsZW4sIDAsIG1ldGFfYWMpOworCXJldCA9IG9jZnMyX3JlZmxpbmtfeGF0dHJfYnVja2V0cyhoYW5kbGUsIGlub2RlLCBhcmdzLCAmZXQsCisJCQkJCSAgbWV0YV9hYywgZGF0YV9hYywKKwkJCQkJICBibGtubywgY3BvcywgbGVuKTsKIAlpZiAocmV0KQogCQltbG9nX2Vycm5vKHJldCk7CiAKLW91dF9jb21taXQ6CiAJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKIAogb3V0OgpkaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jCmluZGV4IDU0NjMyNjYuLjBkMWZhM2QgMTAwNjQ0Ci0tLSBhL2ZzL29wZW4uYworKysgYi9mcy9vcGVuLmMKQEAgLTExMCw3ICsxMTAsNyBAQAogCiAJZXJyb3IgPSBsb2Nrc192ZXJpZnlfdHJ1bmNhdGUoaW5vZGUsIE5VTEwsIGxlbmd0aCk7CiAJaWYgKCFlcnJvcikKLQkJZXJyb3IgPSBzZWN1cml0eV9wYXRoX3RydW5jYXRlKCZwYXRoLCBsZW5ndGgsIDApOworCQllcnJvciA9IHNlY3VyaXR5X3BhdGhfdHJ1bmNhdGUoJnBhdGgpOwogCWlmICghZXJyb3IpCiAJCWVycm9yID0gZG9fdHJ1bmNhdGUocGF0aC5kZW50cnksIGxlbmd0aCwgMCwgTlVMTCk7CiAKQEAgLTE2NSw4ICsxNjUsNyBAQAogCiAJZXJyb3IgPSBsb2Nrc192ZXJpZnlfdHJ1bmNhdGUoaW5vZGUsIGZpbGUsIGxlbmd0aCk7CiAJaWYgKCFlcnJvcikKLQkJZXJyb3IgPSBzZWN1cml0eV9wYXRoX3RydW5jYXRlKCZmaWxlLT5mX3BhdGgsIGxlbmd0aCwKLQkJCQkJICAgICAgIEFUVFJfTVRJTUV8QVRUUl9DVElNRSk7CisJCWVycm9yID0gc2VjdXJpdHlfcGF0aF90cnVuY2F0ZSgmZmlsZS0+Zl9wYXRoKTsKIAlpZiAoIWVycm9yKQogCQllcnJvciA9IGRvX3RydW5jYXRlKGRlbnRyeSwgbGVuZ3RoLCBBVFRSX01USU1FfEFUVFJfQ1RJTUUsIGZpbGUpOwogb3V0X3B1dGY6CkBAIC0zNjcsNyArMzY2LDcgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0OwogCi0JZXJyb3IgPSBpbm9kZV9wZXJtaXNzaW9uKHBhdGguZGVudHJ5LT5kX2lub2RlLCBNQVlfRVhFQyB8IE1BWV9BQ0NFU1MpOworCWVycm9yID0gaW5vZGVfcGVybWlzc2lvbihwYXRoLmRlbnRyeS0+ZF9pbm9kZSwgTUFZX0VYRUMgfCBNQVlfQ0hESVIpOwogCWlmIChlcnJvcikKIAkJZ290byBkcHV0X2FuZF9vdXQ7CiAKQEAgLTM5Niw3ICszOTUsNyBAQAogCWlmICghU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKIAkJZ290byBvdXRfcHV0ZjsKIAotCWVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgTUFZX0VYRUMgfCBNQVlfQUNDRVNTKTsKKwllcnJvciA9IGlub2RlX3Blcm1pc3Npb24oaW5vZGUsIE1BWV9FWEVDIHwgTUFZX0NIRElSKTsKIAlpZiAoIWVycm9yKQogCQlzZXRfZnNfcHdkKGN1cnJlbnQtPmZzLCAmZmlsZS0+Zl9wYXRoKTsKIG91dF9wdXRmOgpAQCAtNDE0LDcgKzQxMyw3IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKIAotCWVycm9yID0gaW5vZGVfcGVybWlzc2lvbihwYXRoLmRlbnRyeS0+ZF9pbm9kZSwgTUFZX0VYRUMgfCBNQVlfQUNDRVNTKTsKKwllcnJvciA9IGlub2RlX3Blcm1pc3Npb24ocGF0aC5kZW50cnktPmRfaW5vZGUsIE1BWV9FWEVDIHwgTUFZX0NIRElSKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZHB1dF9hbmRfb3V0OwogCmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2NoZWNrLmMgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKaW5kZXggNWRjZDRiMC4uNzJjNTI2NSAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9jaGVjay5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvY2hlY2suYwpAQCAtNDU5LDcgKzQ1OSw2IEBACiAJfQogCiAJLyogZXZlcnl0aGluZyBpcyB1cCBhbmQgcnVubmluZywgY29tbWVuY2UgKi8KLQlJTklUX1JDVV9IRUFEKCZwLT5yY3VfaGVhZCk7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKHB0YmwtPnBhcnRbcGFydG5vXSwgcCk7CiAKIAkvKiBzdXBwcmVzcyB1ZXZlbnQgaWYgdGhlIGRpc2sgc3VwcmVzc2VzIGl0ICovCmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2libS5jIGIvZnMvcGFydGl0aW9ucy9pYm0uYwppbmRleCAzZTczZGU1Li5mYzg0OTc2IDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2libS5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvaWJtLmMKQEAgLTc0LDYgKzc0LDcgQEAKIAl9ICpsYWJlbDsKIAl1bnNpZ25lZCBjaGFyICpkYXRhOwogCVNlY3RvciBzZWN0OworCXNlY3Rvcl90IGxhYmVsc2VjdDsKIAogCXJlcyA9IDA7CiAJYmxvY2tzaXplID0gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoYmRldik7CkBAIC05OCwxMCArOTksMTkgQEAKIAkJZ290byBvdXRfZnJlZWFsbDsKIAogCS8qCisJICogU3BlY2lhbCBjYXNlIGZvciBGQkEgZGlza3M6IGxhYmVsIHNlY3RvciBkb2VzIG5vdCBkZXBlbmQgb24KKwkgKiBibG9ja3NpemUuCisJICovCisJaWYgKChpbmZvLT5jdV90eXBlID09IDB4NjMxMCAmJiBpbmZvLT5kZXZfdHlwZSA9PSAweDkzMzYpIHx8CisJICAgIChpbmZvLT5jdV90eXBlID09IDB4Mzg4MCAmJiBpbmZvLT5kZXZfdHlwZSA9PSAweDMzNzApKQorCQlsYWJlbHNlY3QgPSBpbmZvLT5sYWJlbF9ibG9jazsKKwllbHNlCisJCWxhYmVsc2VjdCA9IGluZm8tPmxhYmVsX2Jsb2NrICogKGJsb2Nrc2l6ZSA+PiA5KTsKKworCS8qCiAJICogR2V0IHZvbHVtZSBsYWJlbCwgZXh0cmFjdCBuYW1lIGFuZCB0eXBlLgogCSAqLwotCWRhdGEgPSByZWFkX3BhcnRfc2VjdG9yKHN0YXRlLCBpbmZvLT5sYWJlbF9ibG9jayooYmxvY2tzaXplLzUxMiksCi0JCQkJJnNlY3QpOworCWRhdGEgPSByZWFkX3BhcnRfc2VjdG9yKHN0YXRlLCBsYWJlbHNlY3QsICZzZWN0KTsKIAlpZiAoZGF0YSA9PSBOVUxMKQogCQlnb3RvIG91dF9yZWFkZXJyOwogCmRpZmYgLS1naXQgYS9mcy9wcm9jL2FycmF5LmMgYi9mcy9wcm9jL2FycmF5LmMKaW5kZXggOWI1OGQzOC4uZmZmNjU3MiAxMDA2NDQKLS0tIGEvZnMvcHJvYy9hcnJheS5jCisrKyBiL2ZzL3Byb2MvYXJyYXkuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiAJCWlmICh0cmFjZXIpCiAJCQl0cGlkID0gdGFza19waWRfbnJfbnModHJhY2VyLCBucyk7CiAJfQotCWNyZWQgPSBnZXRfY3JlZCgoc3RydWN0IGNyZWQgKikgX190YXNrX2NyZWQocCkpOworCWNyZWQgPSBnZXRfdGFza19jcmVkKHApOwogCXNlcV9wcmludGYobSwKIAkJIlN0YXRlOlx0JXNcbiIKIAkJIlRnaWQ6XHQlZFxuIgpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvZHF1b3QuYyBiL2ZzL3F1b3RhL2RxdW90LmMKaW5kZXggMTJjMjMzZC4uNDM3ZDJjYSAxMDA2NDQKLS0tIGEvZnMvcXVvdGEvZHF1b3QuYworKysgYi9mcy9xdW90YS9kcXVvdC5jCkBAIC02NzYsNyArNjc2LDcgQEAKICAqIFRoaXMgaXMgY2FsbGVkIGZyb20ga3N3YXBkIHdoZW4gd2UgdGhpbmsgd2UgbmVlZCBzb21lCiAgKiBtb3JlIG1lbW9yeQogICovCi1zdGF0aWMgaW50IHNocmlua19kcWNhY2hlX21lbW9yeShpbnQgbnIsIGdmcF90IGdmcF9tYXNrKQorc3RhdGljIGludCBzaHJpbmtfZHFjYWNoZV9tZW1vcnkoc3RydWN0IHNocmlua2VyICpzaHJpbmssIGludCBuciwgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJaWYgKG5yKSB7CiAJCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2lub2RlLmMgYi9mcy9yZWlzZXJmcy9pbm9kZS5jCmluZGV4IDBmMjJmZGEuLjI5ZGI3MjIwMyAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvaW5vZGUuYworKysgYi9mcy9yZWlzZXJmcy9pbm9kZS5jCkBAIC0xMjIxLDcgKzEyMjEsNyBAQAogCQlpbm9kZV9zZXRfYnl0ZXMoaW5vZGUsCiAJCQkJdG9fcmVhbF91c2VkX3NwYWNlKGlub2RlLCBpbm9kZS0+aV9ibG9ja3MsCiAJCQkJCQkgICBTRF9WMl9TSVpFKSk7Ci0JCS8qIHJlYWQgcGVyc2lzdGVudCBpbm9kZSBhdHRyaWJ1dGVzIGZyb20gc2QgYW5kIGluaXRhbGlzZQorCQkvKiByZWFkIHBlcnNpc3RlbnQgaW5vZGUgYXR0cmlidXRlcyBmcm9tIHNkIGFuZCBpbml0aWFsaXNlCiAJCSAgIGdlbmVyaWMgaW5vZGUgZmxhZ3MgZnJvbSB0aGVtICovCiAJCVJFSVNFUkZTX0koaW5vZGUpLT5pX2F0dHJzID0gc2RfdjJfYXR0cnMoc2QpOwogCQlzZF9hdHRyc190b19pX2F0dHJzKHNkX3YyX2F0dHJzKHNkKSwgaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvc3BsaWNlLmMgYi9mcy9zcGxpY2UuYwppbmRleCA3NDBlNmI5Li5lZmRiZmVjIDEwMDY0NAotLS0gYS9mcy9zcGxpY2UuYworKysgYi9mcy9zcGxpY2UuYwpAQCAtMTI4Miw3ICsxMjgyLDggQEAKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHNkLT51LmZpbGU7CiAKLQlyZXR1cm4gZG9fc3BsaWNlX2Zyb20ocGlwZSwgZmlsZSwgJnNkLT5wb3MsIHNkLT50b3RhbF9sZW4sIHNkLT5mbGFncyk7CisJcmV0dXJuIGRvX3NwbGljZV9mcm9tKHBpcGUsIGZpbGUsICZmaWxlLT5mX3Bvcywgc2QtPnRvdGFsX2xlbiwKKwkJCSAgICAgIHNkLT5mbGFncyk7CiB9CiAKIC8qKgpAQCAtMTM3MSw4ICsxMzcyLDcgQEAKIAkJaWYgKG9mZl9pbikKIAkJCXJldHVybiAtRVNQSVBFOwogCQlpZiAob2ZmX291dCkgewotCQkJaWYgKCFvdXQtPmZfb3AgfHwgIW91dC0+Zl9vcC0+bGxzZWVrIHx8Ci0JCQkgICAgb3V0LT5mX29wLT5sbHNlZWsgPT0gbm9fbGxzZWVrKQorCQkJaWYgKCEob3V0LT5mX21vZGUgJiBGTU9ERV9QV1JJVEUpKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZvZmZzZXQsIG9mZl9vdXQsIHNpemVvZihsb2ZmX3QpKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTEzOTIsOCArMTM5Miw3IEBACiAJCWlmIChvZmZfb3V0KQogCQkJcmV0dXJuIC1FU1BJUEU7CiAJCWlmIChvZmZfaW4pIHsKLQkJCWlmICghaW4tPmZfb3AgfHwgIWluLT5mX29wLT5sbHNlZWsgfHwKLQkJCSAgICBpbi0+Zl9vcC0+bGxzZWVrID09IG5vX2xsc2VlaykKKwkJCWlmICghKGluLT5mX21vZGUgJiBGTU9ERV9QUkVBRCkpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlpZiAoY29weV9mcm9tX3VzZXIoJm9mZnNldCwgb2ZmX2luLCBzaXplb2YobG9mZl90KSkpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9maWxlLmMgYi9mcy9zeXNmcy9maWxlLmMKaW5kZXggMWJlYWE3My4uMWIyN2I1NiAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvZmlsZS5jCisrKyBiL2ZzL3N5c2ZzL2ZpbGUuYwpAQCAtNTkzLDcgKzU5Myw4IEBACiAgKiBAbW9kZTogZmlsZSBwZXJtaXNzaW9ucy4KICAqCiAgKi8KLWludCBzeXNmc19jaG1vZF9maWxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBtb2RlX3QgbW9kZSkKK2ludCBzeXNmc19jaG1vZF9maWxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCQkgICAgIG1vZGVfdCBtb2RlKQogewogCXN0cnVjdCBzeXNmc19kaXJlbnQgKnNkOwogCXN0cnVjdCBpYXR0ciBuZXdhdHRyczsKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL3N5bWxpbmsuYyBiL2ZzL3N5c2ZzL3N5bWxpbmsuYwppbmRleCBmNzEyNDZiLi5hN2FjNzhmIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9zeW1saW5rLmMKKysrIGIvZnMvc3lzZnMvc3ltbGluay5jCkBAIC0yOCw2ICsyOCw3IEBACiAJc3RydWN0IHN5c2ZzX2RpcmVudCAqdGFyZ2V0X3NkID0gTlVMTDsKIAlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCA9IE5VTEw7CiAJc3RydWN0IHN5c2ZzX2FkZHJtX2N4dCBhY3h0OworCWVudW0ga29ial9uc190eXBlIG5zX3R5cGU7CiAJaW50IGVycm9yOwogCiAJQlVHX09OKCFuYW1lKTsKQEAgLTU4LDE2ICs1OSwyOSBAQAogCWlmICghc2QpCiAJCWdvdG8gb3V0X3B1dDsKIAotCWlmIChzeXNmc19uc190eXBlKHBhcmVudF9zZCkpCisJbnNfdHlwZSA9IHN5c2ZzX25zX3R5cGUocGFyZW50X3NkKTsKKwlpZiAobnNfdHlwZSkKIAkJc2QtPnNfbnMgPSB0YXJnZXQtPmt0eXBlLT5uYW1lc3BhY2UodGFyZ2V0KTsKIAlzZC0+c19zeW1saW5rLnRhcmdldF9zZCA9IHRhcmdldF9zZDsKIAl0YXJnZXRfc2QgPSBOVUxMOwkvKiByZWZlcmVuY2UgaXMgbm93IG93bmVkIGJ5IHRoZSBzeW1saW5rICovCiAKIAlzeXNmc19hZGRybV9zdGFydCgmYWN4dCwgcGFyZW50X3NkKTsKLQlpZiAod2FybikKLQkJZXJyb3IgPSBzeXNmc19hZGRfb25lKCZhY3h0LCBzZCk7Ci0JZWxzZQotCQllcnJvciA9IF9fc3lzZnNfYWRkX29uZSgmYWN4dCwgc2QpOworCS8qIFN5bWxpbmtzIG11c3QgYmUgYmV0d2VlbiBkaXJlY3RvcmllcyB3aXRoIHRoZSBzYW1lIG5zX3R5cGUgKi8KKwlpZiAoIW5zX3R5cGUgfHwKKwkgICAgKG5zX3R5cGUgPT0gc3lzZnNfbnNfdHlwZShzZC0+c19zeW1saW5rLnRhcmdldF9zZC0+c19wYXJlbnQpKSkgeworCQlpZiAod2FybikKKwkJCWVycm9yID0gc3lzZnNfYWRkX29uZSgmYWN4dCwgc2QpOworCQllbHNlCisJCQllcnJvciA9IF9fc3lzZnNfYWRkX29uZSgmYWN4dCwgc2QpOworCX0gZWxzZSB7CisJCWVycm9yID0gLUVJTlZBTDsKKwkJV0FSTigxLCBLRVJOX1dBUk5JTkcKKwkJCSJzeXNmczogc3ltbGluayBhY3Jvc3MgbnNfdHlwZXMgJXMvJXMgLT4gJXMvJXNcbiIsCisJCQlwYXJlbnRfc2QtPnNfbmFtZSwKKwkJCXNkLT5zX25hbWUsCisJCQlzZC0+c19zeW1saW5rLnRhcmdldF9zZC0+c19wYXJlbnQtPnNfbmFtZSwKKwkJCXNkLT5zX3N5bWxpbmsudGFyZ2V0X3NkLT5zX25hbWUpOworCX0KIAlzeXNmc19hZGRybV9maW5pc2goJmFjeHQpOwogCiAJaWYgKGVycm9yKQpAQCAtMTIyLDcgKzEzNiw3IEBACiB7CiAJY29uc3Qgdm9pZCAqbnMgPSBOVUxMOwogCXNwaW5fbG9jaygmc3lzZnNfYXNzb2NfbG9jayk7Ci0JaWYgKHRhcmctPnNkKQorCWlmICh0YXJnLT5zZCAmJiBzeXNmc19uc190eXBlKGtvYmotPnNkKSkKIAkJbnMgPSB0YXJnLT5zZC0+c19uczsKIAlzcGluX3VubG9jaygmc3lzZnNfYXNzb2NfbG9jayk7CiAJc3lzZnNfaGFzaF9hbmRfcmVtb3ZlKGtvYmotPnNkLCBucywgbmFtZSk7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9scHQuYyBiL2ZzL3ViaWZzL2xwdC5jCmluZGV4IGFkN2Y2N2IuLjAwODRhMzMgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2xwdC5jCisrKyBiL2ZzL3ViaWZzL2xwdC5jCkBAIC0xNDU3LDEzICsxNDU3LDEzIEBACiAJCXNoZnQgLT0gVUJJRlNfTFBUX0ZBTk9VVF9TSElGVDsKIAkJbm5vZGUgPSB1Ymlmc19nZXRfbm5vZGUoYywgbm5vZGUsIGlpcCk7CiAJCWlmIChJU19FUlIobm5vZGUpKQotCQkJcmV0dXJuIEVSUl9QVFIoUFRSX0VSUihubm9kZSkpOworCQkJcmV0dXJuIEVSUl9DQVNUKG5ub2RlKTsKIAl9CiAJaWlwID0gKChpID4+IHNoZnQpICYgKFVCSUZTX0xQVF9GQU5PVVQgLSAxKSk7CiAJc2hmdCAtPSBVQklGU19MUFRfRkFOT1VUX1NISUZUOwogCXBub2RlID0gdWJpZnNfZ2V0X3Bub2RlKGMsIG5ub2RlLCBpaXApOwogCWlmIChJU19FUlIocG5vZGUpKQotCQlyZXR1cm4gRVJSX1BUUihQVFJfRVJSKHBub2RlKSk7CisJCXJldHVybiBFUlJfQ0FTVChwbm9kZSk7CiAJaWlwID0gKGkgJiAoVUJJRlNfTFBUX0ZBTk9VVCAtIDEpKTsKIAlkYmdfbHAoIkxFQiAlZCwgZnJlZSAlZCwgZGlydHkgJWQsIGZsYWdzICVkIiwgbG51bSwKIAkgICAgICAgcG5vZGUtPmxwcm9wc1tpaXBdLmZyZWUsIHBub2RlLT5scHJvcHNbaWlwXS5kaXJ0eSwKQEAgLTE1ODYsNyArMTU4Niw3IEBACiAJbm5vZGUgPSBjLT5ucm9vdDsKIAlubm9kZSA9IGRpcnR5X2Nvd19ubm9kZShjLCBubm9kZSk7CiAJaWYgKElTX0VSUihubm9kZSkpCi0JCXJldHVybiBFUlJfUFRSKFBUUl9FUlIobm5vZGUpKTsKKwkJcmV0dXJuIEVSUl9DQVNUKG5ub2RlKTsKIAlpID0gbG51bSAtIGMtPm1haW5fZmlyc3Q7CiAJc2hmdCA9IGMtPmxwdF9oZ2h0ICogVUJJRlNfTFBUX0ZBTk9VVF9TSElGVDsKIAlmb3IgKGggPSAxOyBoIDwgYy0+bHB0X2hnaHQ7IGgrKykgewpAQCAtMTU5NCwxOSArMTU5NCwxOSBAQAogCQlzaGZ0IC09IFVCSUZTX0xQVF9GQU5PVVRfU0hJRlQ7CiAJCW5ub2RlID0gdWJpZnNfZ2V0X25ub2RlKGMsIG5ub2RlLCBpaXApOwogCQlpZiAoSVNfRVJSKG5ub2RlKSkKLQkJCXJldHVybiBFUlJfUFRSKFBUUl9FUlIobm5vZGUpKTsKKwkJCXJldHVybiBFUlJfQ0FTVChubm9kZSk7CiAJCW5ub2RlID0gZGlydHlfY293X25ub2RlKGMsIG5ub2RlKTsKIAkJaWYgKElTX0VSUihubm9kZSkpCi0JCQlyZXR1cm4gRVJSX1BUUihQVFJfRVJSKG5ub2RlKSk7CisJCQlyZXR1cm4gRVJSX0NBU1Qobm5vZGUpOwogCX0KIAlpaXAgPSAoKGkgPj4gc2hmdCkgJiAoVUJJRlNfTFBUX0ZBTk9VVCAtIDEpKTsKIAlzaGZ0IC09IFVCSUZTX0xQVF9GQU5PVVRfU0hJRlQ7CiAJcG5vZGUgPSB1Ymlmc19nZXRfcG5vZGUoYywgbm5vZGUsIGlpcCk7CiAJaWYgKElTX0VSUihwbm9kZSkpCi0JCXJldHVybiBFUlJfUFRSKFBUUl9FUlIocG5vZGUpKTsKKwkJcmV0dXJuIEVSUl9DQVNUKHBub2RlKTsKIAlwbm9kZSA9IGRpcnR5X2Nvd19wbm9kZShjLCBwbm9kZSk7CiAJaWYgKElTX0VSUihwbm9kZSkpCi0JCXJldHVybiBFUlJfUFRSKFBUUl9FUlIocG5vZGUpKTsKKwkJcmV0dXJuIEVSUl9DQVNUKHBub2RlKTsKIAlpaXAgPSAoaSAmIChVQklGU19MUFRfRkFOT1VUIC0gMSkpOwogCWRiZ19scCgiTEVCICVkLCBmcmVlICVkLCBkaXJ0eSAlZCwgZmxhZ3MgJWQiLCBsbnVtLAogCSAgICAgICBwbm9kZS0+bHByb3BzW2lpcF0uZnJlZSwgcG5vZGUtPmxwcm9wc1tpaXBdLmRpcnR5LApkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvbHB0X2NvbW1pdC5jIGIvZnMvdWJpZnMvbHB0X2NvbW1pdC5jCmluZGV4IDEzY2I3YTQuLmQxMjUzNWIgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2xwdF9jb21taXQuYworKysgYi9mcy91Ymlmcy9scHRfY29tbWl0LmMKQEAgLTY0Niw3ICs2NDYsNyBAQAogCQlzaGZ0IC09IFVCSUZTX0xQVF9GQU5PVVRfU0hJRlQ7CiAJCW5ub2RlID0gdWJpZnNfZ2V0X25ub2RlKGMsIG5ub2RlLCBpaXApOwogCQlpZiAoSVNfRVJSKG5ub2RlKSkKLQkJCXJldHVybiBFUlJfUFRSKFBUUl9FUlIobm5vZGUpKTsKKwkJCXJldHVybiBFUlJfQ0FTVChubm9kZSk7CiAJfQogCWlpcCA9ICgoaSA+PiBzaGZ0KSAmIChVQklGU19MUFRfRkFOT1VUIC0gMSkpOwogCXJldHVybiB1Ymlmc19nZXRfcG5vZGUoYywgbm5vZGUsIGlpcCk7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9yZWNvdmVyeS5jIGIvZnMvdWJpZnMvcmVjb3ZlcnkuYwppbmRleCAxMDljNmVhLi5kYWFlOWUxIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9yZWNvdmVyeS5jCisrKyBiL2ZzL3ViaWZzL3JlY292ZXJ5LmMKQEAgLTI0LDcgKzI0LDcgQEAKICAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGZ1bmN0aW9ucyBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIHVuY2xlYW4gdW4tbW91bnRzLgogICogV2hlbiBVQklGUyBpcyBtb3VudGVkLCBpdCBjaGVja3MgYSBmbGFnIG9uIHRoZSBtYXN0ZXIgbm9kZSB0byBkZXRlcm1pbmUgaWYKICAqIGFuIHVuLW1vdW50IHdhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiBJZiBub3QsIHRoZSBwcm9jZXNzIG9mIG1vdW50aW5nCi0gKiBpbmNvcnBhcmF0ZXMgYWRkaXRpb25hbCBjaGVja2luZyBhbmQgZml4aW5nIG9mIG9uLWZsYXNoIGRhdGEgc3RydWN0dXJlcy4KKyAqIGluY29ycG9yYXRlcyBhZGRpdGlvbmFsIGNoZWNraW5nIGFuZCBmaXhpbmcgb2Ygb24tZmxhc2ggZGF0YSBzdHJ1Y3R1cmVzLgogICogVUJJRlMgYWx3YXlzIGNsZWFucyBhd2F5IGFsbCByZW1uYW50cyBvZiBhbiB1bmNsZWFuIHVuLW1vdW50LCBzbyB0aGF0CiAgKiBlcnJvcnMgZG8gbm90IGFjY3VtdWxhdGUuIEhvd2V2ZXIgVUJJRlMgZGVmZXJzIHJlY292ZXJ5IGlmIGl0IGlzIG1vdW50ZWQKICAqIHJlYWQtb25seSwgYW5kIHRoZSBmbGFzaCBpcyBub3QgbW9kaWZpZWQgaW4gdGhhdCBjYXNlLgpAQCAtMTA2Myw4ICsxMDYzLDIxIEBACiAJfQogCWVyciA9IHViaWZzX2ZpbmRfZGlydHlfbGViKGMsICZscCwgd2J1Zi0+b2ZmcywgMik7CiAJaWYgKGVycikgewotCQlpZiAoZXJyID09IC1FTk9TUEMpCi0JCQlkYmdfZXJyKCJjb3VsZCBub3QgZmluZCBhIGRpcnR5IExFQiIpOworCQkvKgorCQkgKiBUaGVyZSBhcmUgbm8gZGlydHkgb3IgZW1wdHkgTEVCcyBzdWJqZWN0IHRvIGhlcmUgYmVpbmcKKwkJICogZW5vdWdoIGZvciB0aGUgaW5kZXguIFRyeSB0byB1c2UKKwkJICogJ3ViaWZzX2ZpbmRfZnJlZV9sZWJfZm9yX2lkeCgpJywgd2hpY2ggd2lsbCByZXR1cm4gYW55IGVtcHR5CisJCSAqIExFQnMgKGlnbm9yaW5nIGluZGV4IHJlcXVpcmVtZW50cykuIElmIHRoZSBpbmRleCB0aGVuCisJCSAqIGRvZXNuJ3QgaGF2ZSBlbm91Z2ggTEVCcyB0aGUgcmVjb3ZlcnkgY29tbWl0IHdpbGwgZmFpbCAtCisJCSAqIHdoaWNoIGlzIHRoZSAgc2FtZSByZXN1bHQgYW55d2F5IGkuZS4gcmVjb3ZlcnkgZmFpbHMuIFNvCisJCSAqIHRoZXJlIGlzIG5vIHByb2JsZW0gaWdub3JpbmcgaW5kZXggIHJlcXVpcmVtZW50cyBhbmQganVzdAorCQkgKiBncmFiYmluZyBhIGZyZWUgTEVCIHNpbmNlIHdlIGhhdmUgYWxyZWFkeSBlc3RhYmxpc2hlZCB0aGVyZQorCQkgKiBpcyBub3QgYSBkaXJ0eSBMRUIgd2UgY291bGQgaGF2ZSB1c2VkIGluc3RlYWQuCisJCSAqLworCQlpZiAoZXJyID09IC1FTk9TUEMpIHsKKwkJCWRiZ19yY3ZyeSgiY291bGQgbm90IGZpbmQgYSBkaXJ0eSBMRUIiKTsKKwkJCWdvdG8gZmluZF9mcmVlOworCQl9CiAJCXJldHVybiBlcnI7CiAJfQogCXViaWZzX2Fzc2VydCghKGxwLmZsYWdzICYgTFBST1BTX0lOREVYKSk7CkBAIC0xMTM5LDggKzExNTIsOCBAQAogZmluZF9mcmVlOgogCS8qCiAJICogVGhlcmUgaXMgbm8gR0MgaGVhZCBMRUIgb3IgdGhlIGZyZWUgc3BhY2UgaW4gdGhlIEdDIGhlYWQgTEVCIGlzIHRvbwotCSAqIHNtYWxsLiBBbGxvY2F0ZSBnY19sbnVtIGJ5IGNhbGxpbmcgJ3ViaWZzX2ZpbmRfZnJlZV9sZWJfZm9yX2lkeCgpJyBzbwotCSAqIEdDIGlzIG5vdCBydW4uCisJICogc21hbGwsIG9yIHRoZXJlIGFyZSBub3QgZGlydHkgTEVCcy4gQWxsb2NhdGUgZ2NfbG51bSBieSBjYWxsaW5nCisJICogJ3ViaWZzX2ZpbmRfZnJlZV9sZWJfZm9yX2lkeCgpJyBzbyBHQyBpcyBub3QgcnVuLgogCSAqLwogCWxudW0gPSB1Ymlmc19maW5kX2ZyZWVfbGViX2Zvcl9pZHgoYyk7CiAJaWYgKGxudW0gPCAwKSB7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9zaHJpbmtlci5jIGIvZnMvdWJpZnMvc2hyaW5rZXIuYwppbmRleCAwMmZlYjU5Li4wYjIwMTExIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9zaHJpbmtlci5jCisrKyBiL2ZzL3ViaWZzL3Nocmlua2VyLmMKQEAgLTI3Nyw3ICsyNzcsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgdWJpZnNfc2hyaW5rZXIoaW50IG5yLCBnZnBfdCBnZnBfbWFzaykKK2ludCB1Ymlmc19zaHJpbmtlcihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywgaW50IG5yLCBnZnBfdCBnZnBfbWFzaykKIHsKIAlpbnQgZnJlZWQsIGNvbnRlbnRpb24gPSAwOwogCWxvbmcgY2xlYW5fem5fY250ID0gYXRvbWljX2xvbmdfcmVhZCgmdWJpZnNfY2xlYW5fem5fY250KTsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3N1cGVyLmMgYi9mcy91Ymlmcy9zdXBlci5jCmluZGV4IDRkMmYyMTUuLjVmYzVhMDkgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3N1cGVyLmMKKysrIGIvZnMvdWJpZnMvc3VwZXIuYwpAQCAtMTMwNyw2ICsxMzA3LDggQEAKIAkJCWlmIChlcnIpCiAJCQkJZ290byBvdXRfb3JwaGFuczsKIAkJCWVyciA9IHViaWZzX3JjdnJ5X2djX2NvbW1pdChjKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBvdXRfb3JwaGFuczsKIAkJfSBlbHNlIHsKIAkJCWVyciA9IHRha2VfZ2NfbG51bShjKTsKIAkJCWlmIChlcnIpCkBAIC0xMzE4LDcgKzEzMjAsNyBAQAogCQkJICovCiAJCQllcnIgPSB1Ymlmc19sZWJfdW5tYXAoYywgYy0+Z2NfbG51bSk7CiAJCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7CisJCQkJZ290byBvdXRfb3JwaGFuczsKIAkJfQogCiAJCWVyciA9IGRiZ19jaGVja19scHJvcHMoYyk7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy91Ymlmcy5oIGIvZnMvdWJpZnMvdWJpZnMuaAppbmRleCAyZWVmNTUzLi4wNDMxMDg3IDEwMDY0NAotLS0gYS9mcy91Ymlmcy91Ymlmcy5oCisrKyBiL2ZzL3ViaWZzL3ViaWZzLmgKQEAgLTE1NzUsNyArMTU3NSw3IEBACiBpbnQgdWJpZnNfdG5jX2VuZF9jb21taXQoc3RydWN0IHViaWZzX2luZm8gKmMpOwogCiAvKiBzaHJpbmtlci5jICovCi1pbnQgdWJpZnNfc2hyaW5rZXIoaW50IG5yX3RvX3NjYW4sIGdmcF90IGdmcF9tYXNrKTsKK2ludCB1Ymlmc19zaHJpbmtlcihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywgaW50IG5yX3RvX3NjYW4sIGdmcF90IGdmcF9tYXNrKTsKIAogLyogY29tbWl0LmMgKi8KIGludCB1Ymlmc19iZ190aHJlYWQodm9pZCAqaW5mbyk7CmRpZmYgLS1naXQgYS9mcy94ZnMvTWFrZWZpbGUgYi9mcy94ZnMvTWFrZWZpbGUKaW5kZXggYzhmYjEzZi4uMGRjZTk2OSAxMDA2NDQKLS0tIGEvZnMveGZzL01ha2VmaWxlCisrKyBiL2ZzL3hmcy9NYWtlZmlsZQpAQCAtODcsMTEgKzg3LDkgQEAKIAkJCQkgICB4ZnNfdHJhbnNfYnVmLm8gXAogCQkJCSAgIHhmc190cmFuc19leHRmcmVlLm8gXAogCQkJCSAgIHhmc190cmFuc19pbm9kZS5vIFwKLQkJCQkgICB4ZnNfdHJhbnNfaXRlbS5vIFwKIAkJCQkgICB4ZnNfdXRpbHMubyBcCiAJCQkJICAgeGZzX3Zub2Rlb3BzLm8gXAotCQkJCSAgIHhmc19ydy5vIFwKLQkJCQkgICB4ZnNfZG1vcHMubworCQkJCSAgIHhmc19ydy5vCiAKIHhmcy0kKENPTkZJR19YRlNfVFJBQ0UpCQkrPSB4ZnNfYnRyZWVfdHJhY2UubwogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19hY2wuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FjbC5jCmluZGV4IDlmNzY5YjUuLmIyNzcxODYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FjbC5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FjbC5jCkBAIC0yMjUsNyArMjI1LDcgQEAKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CiAJaW50IGVycm9yID0gLUVBR0FJTjsKIAotCXhmc19pdHJhY2VfZW50cnkoaXApOworCXRyYWNlX3hmc19jaGVja19hY2woaXApOwogCiAJLyoKIAkgKiBJZiB0aGVyZSBpcyBubyBhdHRyaWJ1dGUgZm9yayBubyBBQ0wgZXhpc3RzIG9uIHRoaXMgaW5vZGUgYW5kCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKaW5kZXggMzQ2NDBkNi4uZDI0ZTc4ZiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYwpAQCAtMjEsMTkgKzIxLDEyIEBACiAjaW5jbHVkZSAieGZzX2ludW0uaCIKICNpbmNsdWRlICJ4ZnNfc2IuaCIKICNpbmNsdWRlICJ4ZnNfYWcuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMi5oIgogI2luY2x1ZGUgInhmc190cmFucy5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc19ibWFwX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2FsbG9jX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2lhbGxvY19idHJlZS5oIgotI2luY2x1ZGUgInhmc19kaXIyX3NmLmgiCi0jaW5jbHVkZSAieGZzX2F0dHJfc2YuaCIKICNpbmNsdWRlICJ4ZnNfZGlub2RlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlLmgiCiAjaW5jbHVkZSAieGZzX2FsbG9jLmgiCi0jaW5jbHVkZSAieGZzX2J0cmVlLmgiCiAjaW5jbHVkZSAieGZzX2Vycm9yLmgiCiAjaW5jbHVkZSAieGZzX3J3LmgiCiAjaW5jbHVkZSAieGZzX2lvbWFwLmgiCkBAIC05MiwxOCArODUsMTUgQEAKIHhmc19jb3VudF9wYWdlX3N0YXRlKAogCXN0cnVjdCBwYWdlCQkqcGFnZSwKIAlpbnQJCQkqZGVsYWxsb2MsCi0JaW50CQkJKnVubWFwcGVkLAogCWludAkJCSp1bndyaXR0ZW4pCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkCSpiaCwgKmhlYWQ7CiAKLQkqZGVsYWxsb2MgPSAqdW5tYXBwZWQgPSAqdW53cml0dGVuID0gMDsKKwkqZGVsYWxsb2MgPSAqdW53cml0dGVuID0gMDsKIAogCWJoID0gaGVhZCA9IHBhZ2VfYnVmZmVycyhwYWdlKTsKIAlkbyB7Ci0JCWlmIChidWZmZXJfdXB0b2RhdGUoYmgpICYmICFidWZmZXJfbWFwcGVkKGJoKSkKLQkJCSgqdW5tYXBwZWQpID0gMTsKLQkJZWxzZSBpZiAoYnVmZmVyX3Vud3JpdHRlbihiaCkpCisJCWlmIChidWZmZXJfdW53cml0dGVuKGJoKSkKIAkJCSgqdW53cml0dGVuKSA9IDE7CiAJCWVsc2UgaWYgKGJ1ZmZlcl9kZWxheShiaCkpCiAJCQkoKmRlbGFsbG9jKSA9IDE7CkBAIC0yMTIsMjMgKzIwMiwxNyBAQAogfQogCiAvKgotICogU2NoZWR1bGUgSU8gY29tcGxldGlvbiBoYW5kbGluZyBvbiBhIHhmc2RhdGFkIGlmIHRoaXMgd2FzCi0gKiB0aGUgZmluYWwgaG9sZCBvbiB0aGlzIGlvZW5kLiBJZiB3ZSBhcmUgYXNrZWQgdG8gd2FpdCwKLSAqIGZsdXNoIHRoZSB3b3JrcXVldWUuCisgKiBTY2hlZHVsZSBJTyBjb21wbGV0aW9uIGhhbmRsaW5nIG9uIHRoZSBmaW5hbCBwdXQgb2YgYW4gaW9lbmQuCiAgKi8KIFNUQVRJQyB2b2lkCiB4ZnNfZmluaXNoX2lvZW5kKAotCXhmc19pb2VuZF90CSppb2VuZCwKLQlpbnQJCXdhaXQpCisJc3RydWN0IHhmc19pb2VuZAkqaW9lbmQpCiB7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmlvZW5kLT5pb19yZW1haW5pbmcpKSB7Ci0JCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKLQotCQl3cSA9IChpb2VuZC0+aW9fdHlwZSA9PSBJT19VTldSSVRURU4pID8KLQkJCXhmc2NvbnZlcnRkX3dvcmtxdWV1ZSA6IHhmc2RhdGFkX3dvcmtxdWV1ZTsKLQkJcXVldWVfd29yayh3cSwgJmlvZW5kLT5pb193b3JrKTsKLQkJaWYgKHdhaXQpCi0JCQlmbHVzaF93b3JrcXVldWUod3EpOworCQlpZiAoaW9lbmQtPmlvX3R5cGUgPT0gSU9fVU5XUklUVEVOKQorCQkJcXVldWVfd29yayh4ZnNjb252ZXJ0ZF93b3JrcXVldWUsICZpb2VuZC0+aW9fd29yayk7CisJCWVsc2UKKwkJCXF1ZXVlX3dvcmsoeGZzZGF0YWRfd29ya3F1ZXVlLCAmaW9lbmQtPmlvX3dvcmspOwogCX0KIH0KIApAQCAtMjcyLDExICsyNTYsMjUgQEAKIAkgKi8KIAlpZiAoZXJyb3IgPT0gRUFHQUlOKSB7CiAJCWF0b21pY19pbmMoJmlvZW5kLT5pb19yZW1haW5pbmcpOwotCQl4ZnNfZmluaXNoX2lvZW5kKGlvZW5kLCAwKTsKKwkJeGZzX2ZpbmlzaF9pb2VuZChpb2VuZCk7CiAJCS8qIGVuc3VyZSB3ZSBkb24ndCBzcGluIG9uIGJsb2NrZWQgaW9lbmRzICovCiAJCWRlbGF5KDEpOwotCX0gZWxzZQorCX0gZWxzZSB7CisJCWlmIChpb2VuZC0+aW9faW9jYikKKwkJCWFpb19jb21wbGV0ZShpb2VuZC0+aW9faW9jYiwgaW9lbmQtPmlvX3Jlc3VsdCwgMCk7CiAJCXhmc19kZXN0cm95X2lvZW5kKGlvZW5kKTsKKwl9Cit9CisKKy8qCisgKiBDYWxsIElPIGNvbXBsZXRpb24gaGFuZGxpbmcgaW4gY2FsbGVyIGNvbnRleHQgb24gdGhlIGZpbmFsIHB1dCBvZiBhbiBpb2VuZC4KKyAqLworU1RBVElDIHZvaWQKK3hmc19maW5pc2hfaW9lbmRfc3luYygKKwlzdHJ1Y3QgeGZzX2lvZW5kCSppb2VuZCkKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmaW9lbmQtPmlvX3JlbWFpbmluZykpCisJCXhmc19lbmRfaW8oJmlvZW5kLT5pb193b3JrKTsKIH0KIAogLyoKQEAgLTMwOSw2ICszMDcsOCBAQAogCWF0b21pY19pbmMoJlhGU19JKGlvZW5kLT5pb19pbm9kZSktPmlfaW9jb3VudCk7CiAJaW9lbmQtPmlvX29mZnNldCA9IDA7CiAJaW9lbmQtPmlvX3NpemUgPSAwOworCWlvZW5kLT5pb19pb2NiID0gTlVMTDsKKwlpb2VuZC0+aW9fcmVzdWx0ID0gMDsKIAogCUlOSVRfV09SSygmaW9lbmQtPmlvX3dvcmssIHhmc19lbmRfaW8pOwogCXJldHVybiBpb2VuZDsKQEAgLTM1OCw3ICszNTgsNyBAQAogCWJpby0+YmlfZW5kX2lvID0gTlVMTDsKIAliaW9fcHV0KGJpbyk7CiAKLQl4ZnNfZmluaXNoX2lvZW5kKGlvZW5kLCAwKTsKKwl4ZnNfZmluaXNoX2lvZW5kKGlvZW5kKTsKIH0KIAogU1RBVElDIHZvaWQKQEAgLTUwMCw3ICs1MDAsNyBAQAogCQl9CiAJCWlmIChiaW8pCiAJCQl4ZnNfc3VibWl0X2lvZW5kX2Jpbyh3YmMsIGlvZW5kLCBiaW8pOwotCQl4ZnNfZmluaXNoX2lvZW5kKGlvZW5kLCAwKTsKKwkJeGZzX2ZpbmlzaF9pb2VuZChpb2VuZCk7CiAJfSB3aGlsZSAoKGlvZW5kID0gbmV4dCkgIT0gTlVMTCk7CiB9CiAKQEAgLTYxNCwzMSArNjE0LDMwIEBACiBTVEFUSUMgdW5zaWduZWQgaW50CiB4ZnNfcHJvYmVfcGFnZSgKIAlzdHJ1Y3QgcGFnZQkJKnBhZ2UsCi0JdW5zaWduZWQgaW50CQlwZ19vZmZzZXQsCi0JaW50CQkJbWFwcGVkKQorCXVuc2lnbmVkIGludAkJcGdfb2Zmc2V0KQogeworCXN0cnVjdCBidWZmZXJfaGVhZAkqYmgsICpoZWFkOwogCWludAkJCXJldCA9IDA7CiAKIAlpZiAoUGFnZVdyaXRlYmFjayhwYWdlKSkKIAkJcmV0dXJuIDA7CisJaWYgKCFQYWdlRGlydHkocGFnZSkpCisJCXJldHVybiAwOworCWlmICghcGFnZS0+bWFwcGluZykKKwkJcmV0dXJuIDA7CisJaWYgKCFwYWdlX2hhc19idWZmZXJzKHBhZ2UpKQorCQlyZXR1cm4gMDsKIAotCWlmIChwYWdlLT5tYXBwaW5nICYmIFBhZ2VEaXJ0eShwYWdlKSkgewotCQlpZiAocGFnZV9oYXNfYnVmZmVycyhwYWdlKSkgewotCQkJc3RydWN0IGJ1ZmZlcl9oZWFkCSpiaCwgKmhlYWQ7Ci0KLQkJCWJoID0gaGVhZCA9IHBhZ2VfYnVmZmVycyhwYWdlKTsKLQkJCWRvIHsKLQkJCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpCi0JCQkJCWJyZWFrOwotCQkJCWlmIChtYXBwZWQgIT0gYnVmZmVyX21hcHBlZChiaCkpCi0JCQkJCWJyZWFrOwotCQkJCXJldCArPSBiaC0+Yl9zaXplOwotCQkJCWlmIChyZXQgPj0gcGdfb2Zmc2V0KQotCQkJCQlicmVhazsKLQkJCX0gd2hpbGUgKChiaCA9IGJoLT5iX3RoaXNfcGFnZSkgIT0gaGVhZCk7Ci0JCX0gZWxzZQotCQkJcmV0ID0gbWFwcGVkID8gMCA6IFBBR0VfQ0FDSEVfU0laRTsKLQl9CisJYmggPSBoZWFkID0gcGFnZV9idWZmZXJzKHBhZ2UpOworCWRvIHsKKwkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKQorCQkJYnJlYWs7CisJCWlmICghYnVmZmVyX21hcHBlZChiaCkpCisJCQlicmVhazsKKwkJcmV0ICs9IGJoLT5iX3NpemU7CisJCWlmIChyZXQgPj0gcGdfb2Zmc2V0KQorCQkJYnJlYWs7CisJfSB3aGlsZSAoKGJoID0gYmgtPmJfdGhpc19wYWdlKSAhPSBoZWFkKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC02NDgsOCArNjQ3LDcgQEAKIAlzdHJ1Y3QgaW5vZGUJCSppbm9kZSwKIAlzdHJ1Y3QgcGFnZQkJKnN0YXJ0cGFnZSwKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQJKmJoLAotCXN0cnVjdCBidWZmZXJfaGVhZAkqaGVhZCwKLQlpbnQJCQltYXBwZWQpCisJc3RydWN0IGJ1ZmZlcl9oZWFkCSpoZWFkKQogewogCXN0cnVjdCBwYWdldmVjCQlwdmVjOwogCXBnb2ZmX3QJCQl0aW5kZXgsIHRsYXN0LCB0bG9mZjsKQEAgLTY1OCw3ICs2NTYsNyBAQAogCiAJLyogRmlyc3Qgc3VtIGZvcndhcmRzIGluIHRoaXMgcGFnZSAqLwogCWRvIHsKLQkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpIHx8IChtYXBwZWQgIT0gYnVmZmVyX21hcHBlZChiaCkpKQorCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkgfHwgIWJ1ZmZlcl9tYXBwZWQoYmgpKQogCQkJcmV0dXJuIHRvdGFsOwogCQl0b3RhbCArPSBiaC0+Yl9zaXplOwogCX0gd2hpbGUgKChiaCA9IGJoLT5iX3RoaXNfcGFnZSkgIT0gaGVhZCk7CkBAIC02OTIsNyArNjkwLDcgQEAKIAkJCQlwZ19vZmZzZXQgPSBQQUdFX0NBQ0hFX1NJWkU7CiAKIAkJCWlmIChwYWdlLT5pbmRleCA9PSB0aW5kZXggJiYgdHJ5bG9ja19wYWdlKHBhZ2UpKSB7Ci0JCQkJcGdfbGVuID0geGZzX3Byb2JlX3BhZ2UocGFnZSwgcGdfb2Zmc2V0LCBtYXBwZWQpOworCQkJCXBnX2xlbiA9IHhmc19wcm9iZV9wYWdlKHBhZ2UsIHBnX29mZnNldCk7CiAJCQkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCQl9CiAKQEAgLTc2MSw3ICs3NTksNiBAQAogCXN0cnVjdCB4ZnNfYm1idF9pcmVjCSppbWFwLAogCXhmc19pb2VuZF90CQkqKmlvZW5kcCwKIAlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywKLQlpbnQJCQlzdGFydGlvLAogCWludAkJCWFsbF9iaCkKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQJKmJoLCAqaGVhZDsKQEAgLTgzMiwxOSArODI5LDE0IEBACiAJCQlBU1NFUlQoaW1hcC0+YnJfc3RhcnRibG9jayAhPSBERUxBWVNUQVJUQkxPQ0spOwogCiAJCQl4ZnNfbWFwX2F0X29mZnNldChpbm9kZSwgYmgsIGltYXAsIG9mZnNldCk7Ci0JCQlpZiAoc3RhcnRpbykgewotCQkJCXhmc19hZGRfdG9faW9lbmQoaW5vZGUsIGJoLCBvZmZzZXQsCi0JCQkJCQl0eXBlLCBpb2VuZHAsIGRvbmUpOwotCQkJfSBlbHNlIHsKLQkJCQlzZXRfYnVmZmVyX2RpcnR5KGJoKTsKLQkJCQl1bmxvY2tfYnVmZmVyKGJoKTsKLQkJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7Ci0JCQl9CisJCQl4ZnNfYWRkX3RvX2lvZW5kKGlub2RlLCBiaCwgb2Zmc2V0LCB0eXBlLAorCQkJCQkgaW9lbmRwLCBkb25lKTsKKwogCQkJcGFnZV9kaXJ0eS0tOwogCQkJY291bnQrKzsKIAkJfSBlbHNlIHsKIAkJCXR5cGUgPSBJT19ORVc7Ci0JCQlpZiAoYnVmZmVyX21hcHBlZChiaCkgJiYgYWxsX2JoICYmIHN0YXJ0aW8pIHsKKwkJCWlmIChidWZmZXJfbWFwcGVkKGJoKSAmJiBhbGxfYmgpIHsKIAkJCQlsb2NrX2J1ZmZlcihiaCk7CiAJCQkJeGZzX2FkZF90b19pb2VuZChpbm9kZSwgYmgsIG9mZnNldCwKIAkJCQkJCXR5cGUsIGlvZW5kcCwgZG9uZSk7CkBAIC04NTksMTQgKzg1MSwxMiBAQAogCWlmICh1cHRvZGF0ZSAmJiBiaCA9PSBoZWFkKQogCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CiAKLQlpZiAoc3RhcnRpbykgewotCQlpZiAoY291bnQpIHsKLQkJCXdiYy0+bnJfdG9fd3JpdGUtLTsKLQkJCWlmICh3YmMtPm5yX3RvX3dyaXRlIDw9IDApCi0JCQkJZG9uZSA9IDE7Ci0JCX0KLQkJeGZzX3N0YXJ0X3BhZ2Vfd3JpdGViYWNrKHBhZ2UsICFwYWdlX2RpcnR5LCBjb3VudCk7CisJaWYgKGNvdW50KSB7CisJCXdiYy0+bnJfdG9fd3JpdGUtLTsKKwkJaWYgKHdiYy0+bnJfdG9fd3JpdGUgPD0gMCkKKwkJCWRvbmUgPSAxOwogCX0KKwl4ZnNfc3RhcnRfcGFnZV93cml0ZWJhY2socGFnZSwgIXBhZ2VfZGlydHksIGNvdW50KTsKIAogCXJldHVybiBkb25lOwogIGZhaWxfdW5sb2NrX3BhZ2U6CkBAIC04ODYsNyArODc2LDYgQEAKIAlzdHJ1Y3QgeGZzX2JtYnRfaXJlYwkqaW1hcCwKIAl4ZnNfaW9lbmRfdAkJKippb2VuZHAsCiAJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsCi0JaW50CQkJc3RhcnRpbywKIAlpbnQJCQlhbGxfYmgsCiAJcGdvZmZfdAkJCXRsYXN0KQogewpAQCAtOTAyLDcgKzg5MSw3IEBACiAKIAkJZm9yIChpID0gMDsgaSA8IHBhZ2V2ZWNfY291bnQoJnB2ZWMpOyBpKyspIHsKIAkJCWRvbmUgPSB4ZnNfY29udmVydF9wYWdlKGlub2RlLCBwdmVjLnBhZ2VzW2ldLCB0aW5kZXgrKywKLQkJCQkJaW1hcCwgaW9lbmRwLCB3YmMsIHN0YXJ0aW8sIGFsbF9iaCk7CisJCQkJCWltYXAsIGlvZW5kcCwgd2JjLCBhbGxfYmgpOwogCQkJaWYgKGRvbmUpCiAJCQkJYnJlYWs7CiAJCX0KQEAgLTk4MSw3ICs5NzAsNyBAQAogCQkgKi8KIAkJZXJyb3IgPSB4ZnNfYm1hcGkoTlVMTCwgaXAsIG9mZnNldF9mc2IsIDEsCiAJCQkJWEZTX0JNQVBJX0VOVElSRSwgIE5VTEwsIDAsICZpbWFwLAotCQkJCSZuaW1hcHMsIE5VTEwsIE5VTEwpOworCQkJCSZuaW1hcHMsIE5VTEwpOwogCiAJCWlmIChlcnJvcikgewogCQkJLyogc29tZXRoaW5nIHNjcmV3ZWQsIGp1c3QgYmFpbCAqLwpAQCAtMTAwOSw3ICs5OTgsNyBAQAogCQkgKi8KIAkJeGZzX2JtYXBfaW5pdCgmZmxpc3QsICZmaXJzdGJsb2NrKTsKIAkJZXJyb3IgPSB4ZnNfYnVubWFwaShOVUxMLCBpcCwgb2Zmc2V0X2ZzYiwgMSwgMCwgMSwgJmZpcnN0YmxvY2ssCi0JCQkJCSZmbGlzdCwgTlVMTCwgJmRvbmUpOworCQkJCQkmZmxpc3QsICZkb25lKTsKIAogCQlBU1NFUlQoIWZsaXN0LnhiZl9jb3VudCAmJiAhZmxpc3QueGJmX2ZpcnN0KTsKIAkJaWYgKGVycm9yKSB7CkBAIC0xMDMyLDUwICsxMDIxLDY2IEBACiB9CiAKIC8qCi0gKiBDYWxsaW5nIHRoaXMgd2l0aG91dCBzdGFydGlvIHNldCBtZWFucyB3ZSBhcmUgYmVpbmcgYXNrZWQgdG8gbWFrZSBhIGRpcnR5Ci0gKiBwYWdlIHJlYWR5IGZvciBmcmVlaW5nIGl0J3MgYnVmZmVycy4gIFdoZW4gY2FsbGVkIHdpdGggc3RhcnRpbyBzZXQgdGhlbgotICogd2UgYXJlIGNvbWluZyBmcm9tIHdyaXRlcGFnZS4KKyAqIFdyaXRlIG91dCBhIGRpcnR5IHBhZ2UuCiAgKgotICogV2hlbiBjYWxsZWQgd2l0aCBzdGFydGlvIHNldCBpdCBpcyBpbXBvcnRhbnQgdGhhdCB3ZSB3cml0ZSB0aGUgV0hPTEUKLSAqIHBhZ2UgaWYgcG9zc2libGUuCi0gKiBUaGUgYmgtPmJfc3RhdGUncyBjYW5ub3Qga25vdyBpZiBhbnkgb2YgdGhlIGJsb2NrcyBvciB3aGljaCBibG9jayBmb3IKLSAqIHRoYXQgbWF0dGVyIGFyZSBkaXJ0eSBkdWUgdG8gbW1hcCB3cml0ZXMsIGFuZCB0aGVyZWZvcmUgYmggdXB0b2RhdGUgaXMKLSAqIG9ubHkgdmFsaWQgaWYgdGhlIHBhZ2UgaXRzZWxmIGlzbid0IGNvbXBsZXRlbHkgdXB0b2RhdGUuICBTb21lIGxheWVycwotICogbWF5IGNsZWFyIHRoZSBwYWdlIGRpcnR5IGZsYWcgcHJpb3IgdG8gY2FsbGluZyB3cml0ZSBwYWdlLCB1bmRlciB0aGUKLSAqIGFzc3VtcHRpb24gdGhlIGVudGlyZSBwYWdlIHdpbGwgYmUgd3JpdHRlbiBvdXQ7IGJ5IG5vdCB3cml0aW5nIG91dCB0aGUKLSAqIHdob2xlIHBhZ2UgdGhlIHBhZ2UgY2FuIGJlIHJldXNlZCBiZWZvcmUgYWxsIHZhbGlkIGRpcnR5IGRhdGEgaXMKLSAqIHdyaXR0ZW4gb3V0LiAgTm90ZTogaW4gdGhlIGNhc2Ugb2YgYSBwYWdlIHRoYXQgaGFzIGJlZW4gZGlydHknZCBieQotICogbWFwd3JpdGUgYW5kIGJ1dCBwYXJ0aWFsbHkgc2V0dXAgYnkgYmxvY2tfcHJlcGFyZV93cml0ZSB0aGUKLSAqIGJoLT5iX3N0YXRlcydzIHdpbGwgbm90IGFncmVlIGFuZCBvbmx5IG9uZXMgc2V0dXAgYnkgQlBXL0JDVyB3aWxsIGhhdmUKLSAqIHZhbGlkIHN0YXRlLCB0aHVzIHRoZSB3aG9sZSBwYWdlIG11c3QgYmUgd3JpdHRlbiBvdXQgdGhpbmcuCisgKiBGb3IgZGVsYWxsb2Mgc3BhY2Ugb24gdGhlIHBhZ2Ugd2UgbmVlZCB0byBhbGxvY2F0ZSBzcGFjZSBhbmQgZmx1c2ggaXQuCisgKiBGb3IgdW53cml0dGVuIHNwYWNlIG9uIHRoZSBwYWdlIHdlIG5lZWQgdG8gc3RhcnQgdGhlIGNvbnZlcnNpb24gdG8KKyAqIHJlZ3VsYXIgYWxsb2NhdGVkIHNwYWNlLgorICogRm9yIGFueSBvdGhlciBkaXJ0eSBidWZmZXIgaGVhZHMgb24gdGhlIHBhZ2Ugd2Ugc2hvdWxkIGZsdXNoIHRoZW0uCisgKgorICogSWYgd2UgZGV0ZWN0IHRoYXQgYSB0cmFuc2FjdGlvbiB3b3VsZCBiZSByZXF1aXJlZCB0byBmbHVzaCB0aGUgcGFnZSwgd2UKKyAqIGhhdmUgdG8gY2hlY2sgdGhlIHByb2Nlc3MgZmxhZ3MgZmlyc3QsIGlmIHdlIGFyZSBhbHJlYWR5IGluIGEgdHJhbnNhY3Rpb24KKyAqIG9yIGRpc2sgSS9PIGR1cmluZyBhbGxvY2F0aW9ucyBpcyBvZmYsIHdlIG5lZWQgdG8gZmFpbCB0aGUgd3JpdGVwYWdlIGFuZAorICogcmVkaXJ0eSB0aGUgcGFnZS4KICAqLwotCiBTVEFUSUMgaW50Ci14ZnNfcGFnZV9zdGF0ZV9jb252ZXJ0KAotCXN0cnVjdCBpbm9kZQkqaW5vZGUsCi0Jc3RydWN0IHBhZ2UJKnBhZ2UsCi0Jc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsCi0JaW50CQlzdGFydGlvLAotCWludAkJdW5tYXBwZWQpIC8qIGFsc28gaW1wbGllcyBwYWdlIHVwdG9kYXRlICovCit4ZnNfdm1fd3JpdGVwYWdlKAorCXN0cnVjdCBwYWdlCQkqcGFnZSwKKwlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKKwlzdHJ1Y3QgaW5vZGUJCSppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CisJaW50CQkJZGVsYWxsb2MsIHVud3JpdHRlbjsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQJKmJoLCAqaGVhZDsKIAlzdHJ1Y3QgeGZzX2JtYnRfaXJlYwlpbWFwOwogCXhmc19pb2VuZF90CQkqaW9lbmQgPSBOVUxMLCAqaW9oZWFkID0gTlVMTDsKIAlsb2ZmX3QJCQlvZmZzZXQ7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICAgcF9vZmZzZXQgPSAwOwogCXVuc2lnbmVkIGludAkJdHlwZTsKIAlfX3VpbnQ2NF90ICAgICAgICAgICAgICBlbmRfb2Zmc2V0OwogCXBnb2ZmX3QgICAgICAgICAgICAgICAgIGVuZF9pbmRleCwgbGFzdF9pbmRleDsKIAlzc2l6ZV90CQkJc2l6ZSwgbGVuOwogCWludAkJCWZsYWdzLCBlcnIsIGltYXBfdmFsaWQgPSAwLCB1cHRvZGF0ZSA9IDE7Ci0JaW50CQkJcGFnZV9kaXJ0eSwgY291bnQgPSAwOwotCWludAkJCXRyeWxvY2sgPSAwOwotCWludAkJCWFsbF9iaCA9IHVubWFwcGVkOworCWludAkJCWNvdW50ID0gMDsKKwlpbnQJCQlhbGxfYmggPSAwOwogCi0JaWYgKHN0YXJ0aW8pIHsKLQkJaWYgKHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfTk9ORSAmJiB3YmMtPm5vbmJsb2NraW5nKQotCQkJdHJ5bG9jayB8PSBCTUFQSV9UUllMT0NLOwotCX0KKwl0cmFjZV94ZnNfd3JpdGVwYWdlKGlub2RlLCBwYWdlLCAwKTsKKworCUFTU0VSVChwYWdlX2hhc19idWZmZXJzKHBhZ2UpKTsKKworCS8qCisJICogUmVmdXNlIHRvIHdyaXRlIHRoZSBwYWdlIG91dCBpZiB3ZSBhcmUgY2FsbGVkIGZyb20gcmVjbGFpbSBjb250ZXh0LgorCSAqCisJICogVGhpcyBhdm9pZHMgc3RhY2sgb3ZlcmZsb3dzIHdoZW4gY2FsbGVkIGZyb20gZGVlcGx5IHVzZWQgc3RhY2tzIGluCisJICogcmFuZG9tIGNhbGxlcnMgZm9yIGRpcmVjdCByZWNsYWltIG9yIG1lbWNnIHJlY2xhaW0uICBXZSBleHBsaWNpdGx5CisJICogYWxsb3cgcmVjbGFpbSBmcm9tIGtzd2FwZCBhcyB0aGUgc3RhY2sgdXNhZ2UgdGhlcmUgaXMgcmVsYXRpdmVseSBsb3cuCisJICoKKwkgKiBUaGlzIHNob3VsZCByZWFsbHkgYmUgZG9uZSBieSB0aGUgY29yZSBWTSwgYnV0IHVudGlsIHRoYXQgaGFwcGVucworCSAqIGZpbGVzeXN0ZW1zIGxpa2UgWEZTLCBidHJmcyBhbmQgZXh0NCBoYXZlIHRvIHRha2UgY2FyZSBvZiB0aGlzCisJICogYnkgdGhlbXNlbHZlcy4KKwkgKi8KKwlpZiAoKGN1cnJlbnQtPmZsYWdzICYgKFBGX01FTUFMTE9DfFBGX0tTV0FQRCkpID09IFBGX01FTUFMTE9DKQorCQlnb3RvIG91dF9mYWlsOworCisJLyoKKwkgKiBXZSBuZWVkIGEgdHJhbnNhY3Rpb24gaWYgdGhlcmUgYXJlIGRlbGFsbG9jIG9yIHVud3JpdHRlbiBidWZmZXJzCisJICogb24gdGhlIHBhZ2UuCisJICoKKwkgKiBJZiB3ZSBuZWVkIGEgdHJhbnNhY3Rpb24gYW5kIHRoZSBwcm9jZXNzIGZsYWdzIHNheSB3ZSBhcmUgYWxyZWFkeQorCSAqIGluIGEgdHJhbnNhY3Rpb24sIG9yIG5vIElPIGlzIGFsbG93ZWQgdGhlbiBtYXJrIHRoZSBwYWdlIGRpcnR5CisJICogYWdhaW4gYW5kIGxlYXZlIHRoZSBwYWdlIGFzIGlzLgorCSAqLworCXhmc19jb3VudF9wYWdlX3N0YXRlKHBhZ2UsICZkZWxhbGxvYywgJnVud3JpdHRlbik7CisJaWYgKChjdXJyZW50LT5mbGFncyAmIFBGX0ZTVFJBTlMpICYmIChkZWxhbGxvYyB8fCB1bndyaXR0ZW4pKQorCQlnb3RvIG91dF9mYWlsOwogCiAJLyogSXMgdGhpcyBwYWdlIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBmaWxlPyAqLwogCW9mZnNldCA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKQEAgLTEwODQsNTAgKzEwODksMzMgQEAKIAlpZiAocGFnZS0+aW5kZXggPj0gZW5kX2luZGV4KSB7CiAJCWlmICgocGFnZS0+aW5kZXggPj0gZW5kX2luZGV4ICsgMSkgfHwKIAkJICAgICEoaV9zaXplX3JlYWQoaW5vZGUpICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpKSkgewotCQkJaWYgKHN0YXJ0aW8pCi0JCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQogCi0JLyoKLQkgKiBwYWdlX2RpcnR5IGlzIGluaXRpYWxseSBhIGNvdW50IG9mIGJ1ZmZlcnMgb24gdGhlIHBhZ2UgYmVmb3JlCi0JICogRU9GIGFuZCBpcyBkZWNyZW1lbnRlZCBhcyB3ZSBtb3ZlIGVhY2ggaW50byBhIGNsZWFuYWJsZSBzdGF0ZS4KLQkgKgotCSAqIERlcml2YXRpb246Ci0JICoKLQkgKiBFbmQgb2Zmc2V0IGlzIHRoZSBoaWdoZXN0IG9mZnNldCB0aGF0IHRoaXMgcGFnZSBzaG91bGQgcmVwcmVzZW50LgotCSAqIElmIHdlIGFyZSBvbiB0aGUgbGFzdCBwYWdlLCAoZW5kX29mZnNldCAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKSkKLQkgKiB3aWxsIGV2YWx1YXRlIG5vbi16ZXJvIGFuZCBiZSBsZXNzIHRoYW4gUEFHRV9DQUNIRV9TSVpFIGFuZAotCSAqIGhlbmNlIGdpdmUgdXMgdGhlIGNvcnJlY3QgcGFnZV9kaXJ0eSBjb3VudC4gT24gYW55IG90aGVyIHBhZ2UsCi0JICogaXQgd2lsbCBiZSB6ZXJvIGFuZCBpbiB0aGF0IGNhc2Ugd2UgbmVlZCBwYWdlX2RpcnR5IHRvIGJlIHRoZQotCSAqIGNvdW50IG9mIGJ1ZmZlcnMgb24gdGhlIHBhZ2UuCi0gCSAqLwogCWVuZF9vZmZzZXQgPSBtaW5fdCh1bnNpZ25lZCBsb25nIGxvbmcsCi0JCQkoeGZzX29mZl90KShwYWdlLT5pbmRleCArIDEpIDw8IFBBR0VfQ0FDSEVfU0hJRlQsIG9mZnNldCk7CisJCQkoeGZzX29mZl90KShwYWdlLT5pbmRleCArIDEpIDw8IFBBR0VfQ0FDSEVfU0hJRlQsCisJCQlvZmZzZXQpOwogCWxlbiA9IDEgPDwgaW5vZGUtPmlfYmxrYml0czsKLQlwX29mZnNldCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGVuZF9vZmZzZXQgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSksCi0JCQkJCVBBR0VfQ0FDSEVfU0laRSk7Ci0JcF9vZmZzZXQgPSBwX29mZnNldCA/IHJvdW5kdXAocF9vZmZzZXQsIGxlbikgOiBQQUdFX0NBQ0hFX1NJWkU7Ci0JcGFnZV9kaXJ0eSA9IHBfb2Zmc2V0IC8gbGVuOwogCiAJYmggPSBoZWFkID0gcGFnZV9idWZmZXJzKHBhZ2UpOwogCW9mZnNldCA9IHBhZ2Vfb2Zmc2V0KHBhZ2UpOwogCWZsYWdzID0gQk1BUElfUkVBRDsKIAl0eXBlID0gSU9fTkVXOwogCi0JLyogVE9ETzogY2xlYW51cCBjb3VudCBhbmQgcGFnZV9kaXJ0eSAqLwotCiAJZG8gewogCQlpZiAob2Zmc2V0ID49IGVuZF9vZmZzZXQpCiAJCQlicmVhazsKIAkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKQogCQkJdXB0b2RhdGUgPSAwOwotCQlpZiAoIShQYWdlVXB0b2RhdGUocGFnZSkgfHwgYnVmZmVyX3VwdG9kYXRlKGJoKSkgJiYgIXN0YXJ0aW8pIHsKLQkJCS8qCi0JCQkgKiB0aGUgaW9tYXAgaXMgYWN0dWFsbHkgc3RpbGwgdmFsaWQsIGJ1dCB0aGUgaW9lbmQKLQkJCSAqIGlzbid0LiAgc2hvdWxkbid0IGhhcHBlbiB0b28gb2Z0ZW4uCi0JCQkgKi8KKworCQkvKgorCQkgKiBBIGhvbGUgbWF5IHN0aWxsIGJlIG1hcmtlZCB1cHRvZGF0ZSBiZWNhdXNlIGRpc2NhcmRfYnVmZmVyCisJCSAqIGxlYXZlcyB0aGUgZmxhZyBzZXQuCisJCSAqLworCQlpZiAoIWJ1ZmZlcl9tYXBwZWQoYmgpICYmIGJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsKKwkJCUFTU0VSVCghYnVmZmVyX2RpcnR5KGJoKSk7CiAJCQlpbWFwX3ZhbGlkID0gMDsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0xMTM1LDE5ICsxMTIzLDcgQEAKIAkJaWYgKGltYXBfdmFsaWQpCiAJCQlpbWFwX3ZhbGlkID0geGZzX2ltYXBfdmFsaWQoaW5vZGUsICZpbWFwLCBvZmZzZXQpOwogCi0JCS8qCi0JCSAqIEZpcnN0IGNhc2UsIG1hcCBhbiB1bndyaXR0ZW4gZXh0ZW50IGFuZCBwcmVwYXJlIGZvcgotCQkgKiBleHRlbnQgc3RhdGUgY29udmVyc2lvbiB0cmFuc2FjdGlvbiBvbiBjb21wbGV0aW9uLgotCQkgKgotCQkgKiBTZWNvbmQgY2FzZSwgYWxsb2NhdGUgc3BhY2UgZm9yIGEgZGVsYWxsb2MgYnVmZmVyLgotCQkgKiBXZSBjYW4gcmV0dXJuIEVBR0FJTiBoZXJlIGluIHRoZSByZWxlYXNlIHBhZ2UgY2FzZS4KLQkJICoKLQkJICogVGhpcmQgY2FzZSwgYW4gdW5tYXBwZWQgYnVmZmVyIHdhcyBmb3VuZCwgYW5kIHdlIGFyZQotCQkgKiBpbiBhIHBhdGggd2hlcmUgd2UgbmVlZCB0byB3cml0ZSB0aGUgd2hvbGUgcGFnZSBvdXQuCi0JCSAqLwotCQlpZiAoYnVmZmVyX3Vud3JpdHRlbihiaCkgfHwgYnVmZmVyX2RlbGF5KGJoKSB8fAotCQkgICAgKChidWZmZXJfdXB0b2RhdGUoYmgpIHx8IFBhZ2VVcHRvZGF0ZShwYWdlKSkgJiYKLQkJICAgICAhYnVmZmVyX21hcHBlZChiaCkgJiYgKHVubWFwcGVkIHx8IHN0YXJ0aW8pKSkgeworCQlpZiAoYnVmZmVyX3Vud3JpdHRlbihiaCkgfHwgYnVmZmVyX2RlbGF5KGJoKSkgewogCQkJaW50IG5ld19pb2VuZCA9IDA7CiAKIAkJCS8qCkBAIC0xMTYxLDE1ICsxMTM3LDE2IEBACiAJCQkJZmxhZ3MgPSBCTUFQSV9XUklURSB8IEJNQVBJX0lHTlNUQVRFOwogCQkJfSBlbHNlIGlmIChidWZmZXJfZGVsYXkoYmgpKSB7CiAJCQkJdHlwZSA9IElPX0RFTEFZOwotCQkJCWZsYWdzID0gQk1BUElfQUxMT0NBVEUgfCB0cnlsb2NrOwotCQkJfSBlbHNlIHsKLQkJCQl0eXBlID0gSU9fTkVXOwotCQkJCWZsYWdzID0gQk1BUElfV1JJVEUgfCBCTUFQSV9NTUFQOworCQkJCWZsYWdzID0gQk1BUElfQUxMT0NBVEU7CisKKwkJCQlpZiAod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FICYmCisJCQkJICAgIHdiYy0+bm9uYmxvY2tpbmcpCisJCQkJCWZsYWdzIHw9IEJNQVBJX1RSWUxPQ0s7CiAJCQl9CiAKIAkJCWlmICghaW1hcF92YWxpZCkgewogCQkJCS8qCi0JCQkJICogaWYgd2UgZGlkbid0IGhhdmUgYSB2YWxpZCBtYXBwaW5nIHRoZW4gd2UKKwkJCQkgKiBJZiB3ZSBkaWRuJ3QgaGF2ZSBhIHZhbGlkIG1hcHBpbmcgdGhlbiB3ZQogCQkJCSAqIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2UgcHV0IHRoZSBuZXcgbWFwcGluZwogCQkJCSAqIGluIGEgbmV3IGlvZW5kIHN0cnVjdHVyZS4gVGhpcyBuZWVkcyB0byBiZQogCQkJCSAqIGRvbmUgdG8gZW5zdXJlIHRoYXQgdGhlIGlvZW5kcyBjb3JyZWN0bHkKQEAgLTExNzcsMTQgKzExNTQsNyBAQAogCQkJCSAqIGZvciB1bndyaXR0ZW4gZXh0ZW50IGNvbnZlcnNpb24uCiAJCQkJICovCiAJCQkJbmV3X2lvZW5kID0gMTsKLQkJCQlpZiAodHlwZSA9PSBJT19ORVcpIHsKLQkJCQkJc2l6ZSA9IHhmc19wcm9iZV9jbHVzdGVyKGlub2RlLAotCQkJCQkJCXBhZ2UsIGJoLCBoZWFkLCAwKTsKLQkJCQl9IGVsc2UgewotCQkJCQlzaXplID0gbGVuOwotCQkJCX0KLQotCQkJCWVyciA9IHhmc19tYXBfYmxvY2tzKGlub2RlLCBvZmZzZXQsIHNpemUsCisJCQkJZXJyID0geGZzX21hcF9ibG9ja3MoaW5vZGUsIG9mZnNldCwgbGVuLAogCQkJCQkJJmltYXAsIGZsYWdzKTsKIAkJCQlpZiAoZXJyKQogCQkJCQlnb3RvIGVycm9yOwpAQCAtMTE5MywxOSArMTE2MywxMSBAQAogCQkJfQogCQkJaWYgKGltYXBfdmFsaWQpIHsKIAkJCQl4ZnNfbWFwX2F0X29mZnNldChpbm9kZSwgYmgsICZpbWFwLCBvZmZzZXQpOwotCQkJCWlmIChzdGFydGlvKSB7Ci0JCQkJCXhmc19hZGRfdG9faW9lbmQoaW5vZGUsIGJoLCBvZmZzZXQsCi0JCQkJCQkJdHlwZSwgJmlvZW5kLAotCQkJCQkJCW5ld19pb2VuZCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJc2V0X2J1ZmZlcl9kaXJ0eShiaCk7Ci0JCQkJCXVubG9ja19idWZmZXIoYmgpOwotCQkJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7Ci0JCQkJfQotCQkJCXBhZ2VfZGlydHktLTsKKwkJCQl4ZnNfYWRkX3RvX2lvZW5kKGlub2RlLCBiaCwgb2Zmc2V0LCB0eXBlLAorCQkJCQkJICZpb2VuZCwgbmV3X2lvZW5kKTsKIAkJCQljb3VudCsrOwogCQkJfQotCQl9IGVsc2UgaWYgKGJ1ZmZlcl91cHRvZGF0ZShiaCkgJiYgc3RhcnRpbykgeworCQl9IGVsc2UgaWYgKGJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsKIAkJCS8qCiAJCQkgKiB3ZSBnb3QgaGVyZSBiZWNhdXNlIHRoZSBidWZmZXIgaXMgYWxyZWFkeSBtYXBwZWQuCiAJCQkgKiBUaGF0IG1lYW5zIGl0IG11c3QgYWxyZWFkeSBoYXZlIGV4dGVudHMgYWxsb2NhdGVkCkBAIC0xMjEzLDggKzExNzUsNyBAQAogCQkJICovCiAJCQlpZiAoIWltYXBfdmFsaWQgfHwgZmxhZ3MgIT0gQk1BUElfUkVBRCkgewogCQkJCWZsYWdzID0gQk1BUElfUkVBRDsKLQkJCQlzaXplID0geGZzX3Byb2JlX2NsdXN0ZXIoaW5vZGUsIHBhZ2UsIGJoLAotCQkJCQkJCQloZWFkLCAxKTsKKwkJCQlzaXplID0geGZzX3Byb2JlX2NsdXN0ZXIoaW5vZGUsIHBhZ2UsIGJoLCBoZWFkKTsKIAkJCQllcnIgPSB4ZnNfbWFwX2Jsb2Nrcyhpbm9kZSwgb2Zmc2V0LCBzaXplLAogCQkJCQkJJmltYXAsIGZsYWdzKTsKIAkJCQlpZiAoZXJyKQpAQCAtMTIzMywxOCArMTE5NCwxNiBAQAogCQkJICovCiAJCQl0eXBlID0gSU9fTkVXOwogCQkJaWYgKHRyeWxvY2tfYnVmZmVyKGJoKSkgewotCQkJCUFTU0VSVChidWZmZXJfbWFwcGVkKGJoKSk7CiAJCQkJaWYgKGltYXBfdmFsaWQpCiAJCQkJCWFsbF9iaCA9IDE7CiAJCQkJeGZzX2FkZF90b19pb2VuZChpbm9kZSwgYmgsIG9mZnNldCwgdHlwZSwKIAkJCQkJCSZpb2VuZCwgIWltYXBfdmFsaWQpOwotCQkJCXBhZ2VfZGlydHktLTsKIAkJCQljb3VudCsrOwogCQkJfSBlbHNlIHsKIAkJCQlpbWFwX3ZhbGlkID0gMDsKIAkJCX0KLQkJfSBlbHNlIGlmICgoYnVmZmVyX3VwdG9kYXRlKGJoKSB8fCBQYWdlVXB0b2RhdGUocGFnZSkpICYmCi0JCQkgICAodW5tYXBwZWQgfHwgc3RhcnRpbykpIHsKKwkJfSBlbHNlIGlmIChQYWdlVXB0b2RhdGUocGFnZSkpIHsKKwkJCUFTU0VSVChidWZmZXJfbWFwcGVkKGJoKSk7CiAJCQlpbWFwX3ZhbGlkID0gMDsKIAkJfQogCkBAIC0xMjU2LDggKzEyMTUsNyBAQAogCWlmICh1cHRvZGF0ZSAmJiBiaCA9PSBoZWFkKQogCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CiAKLQlpZiAoc3RhcnRpbykKLQkJeGZzX3N0YXJ0X3BhZ2Vfd3JpdGViYWNrKHBhZ2UsIDEsIGNvdW50KTsKKwl4ZnNfc3RhcnRfcGFnZV93cml0ZWJhY2socGFnZSwgMSwgY291bnQpOwogCiAJaWYgKGlvZW5kICYmIGltYXBfdmFsaWQpIHsKIAkJeGZzX29mZl90CQllbmRfaW5kZXg7CkBAIC0xMjc1LDEzMSArMTIzMywyNyBAQAogCQkJZW5kX2luZGV4ID0gbGFzdF9pbmRleDsKIAogCQl4ZnNfY2x1c3Rlcl93cml0ZShpbm9kZSwgcGFnZS0+aW5kZXggKyAxLCAmaW1hcCwgJmlvZW5kLAotCQkJCQl3YmMsIHN0YXJ0aW8sIGFsbF9iaCwgZW5kX2luZGV4KTsKKwkJCQkJd2JjLCBhbGxfYmgsIGVuZF9pbmRleCk7CiAJfQogCiAJaWYgKGlvaGVhZCkKIAkJeGZzX3N1Ym1pdF9pb2VuZCh3YmMsIGlvaGVhZCk7CiAKLQlyZXR1cm4gcGFnZV9kaXJ0eTsKKwlyZXR1cm4gMDsKIAogZXJyb3I6CiAJaWYgKGlvaGVhZCkKIAkJeGZzX2NhbmNlbF9pb2VuZChpb2hlYWQpOwogCi0JLyoKLQkgKiBJZiBpdCdzIGRlbGFsbG9jIGFuZCB3ZSBoYXZlIG5vd2hlcmUgdG8gcHV0IGl0LAotCSAqIHRocm93IGl0IGF3YXksIHVubGVzcyB0aGUgbG93ZXIgbGF5ZXJzIHRvbGQKLQkgKiB1cyB0byB0cnkgYWdhaW4uCi0JICovCi0JaWYgKGVyciAhPSAtRUFHQUlOKSB7Ci0JCWlmICghdW5tYXBwZWQpCi0JCQl4ZnNfYW9wc19kaXNjYXJkX3BhZ2UocGFnZSk7Ci0JCUNsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpOwotCX0KKwl4ZnNfYW9wc19kaXNjYXJkX3BhZ2UocGFnZSk7CisJQ2xlYXJQYWdlVXB0b2RhdGUocGFnZSk7CisJdW5sb2NrX3BhZ2UocGFnZSk7CiAJcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIHdyaXRlcGFnZTogQ2FsbGVkIGZyb20gb25lIG9mIHR3byBwbGFjZXM6Ci0gKgotICogMS4gd2UgYXJlIGZsdXNoaW5nIGEgZGVsYWxsb2MgYnVmZmVyIGhlYWQuCi0gKgotICogMi4gd2UgYXJlIHdyaXRpbmcgb3V0IGEgZGlydHkgcGFnZS4gVHlwaWNhbGx5IHRoZSBwYWdlIGRpcnR5Ci0gKiAgICBzdGF0ZSBpcyBjbGVhcmVkIGJlZm9yZSB3ZSBnZXQgaGVyZS4gSW4gdGhpcyBjYXNlIGlzIGl0Ci0gKiAgICBjb25jZWl2YWJsZSB3ZSBoYXZlIG5vIGJ1ZmZlciBoZWFkcy4KLSAqCi0gKiBGb3IgZGVsYWxsb2Mgc3BhY2Ugb24gdGhlIHBhZ2Ugd2UgbmVlZCB0byBhbGxvY2F0ZSBzcGFjZSBhbmQKLSAqIGZsdXNoIGl0LiBGb3IgdW5tYXBwZWQgYnVmZmVyIGhlYWRzIG9uIHRoZSBwYWdlIHdlIHNob3VsZAotICogYWxsb2NhdGUgc3BhY2UgaWYgdGhlIHBhZ2UgaXMgdXB0b2RhdGUuIEZvciBhbnkgb3RoZXIgZGlydHkKLSAqIGJ1ZmZlciBoZWFkcyBvbiB0aGUgcGFnZSB3ZSBzaG91bGQgZmx1c2ggdGhlbS4KLSAqCi0gKiBJZiB3ZSBkZXRlY3QgdGhhdCBhIHRyYW5zYWN0aW9uIHdvdWxkIGJlIHJlcXVpcmVkIHRvIGZsdXNoCi0gKiB0aGUgcGFnZSwgd2UgaGF2ZSB0byBjaGVjayB0aGUgcHJvY2VzcyBmbGFncyBmaXJzdCwgaWYgd2UKLSAqIGFyZSBhbHJlYWR5IGluIGEgdHJhbnNhY3Rpb24gb3IgZGlzayBJL08gZHVyaW5nIGFsbG9jYXRpb25zCi0gKiBpcyBvZmYsIHdlIG5lZWQgdG8gZmFpbCB0aGUgd3JpdGVwYWdlIGFuZCByZWRpcnR5IHRoZSBwYWdlLgotICovCi0KLVNUQVRJQyBpbnQKLXhmc192bV93cml0ZXBhZ2UoCi0Jc3RydWN0IHBhZ2UJCSpwYWdlLAotCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQotewotCWludAkJCWVycm9yOwotCWludAkJCW5lZWRfdHJhbnM7Ci0JaW50CQkJZGVsYWxsb2MsIHVubWFwcGVkLCB1bndyaXR0ZW47Ci0Jc3RydWN0IGlub2RlCQkqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OwotCi0JdHJhY2VfeGZzX3dyaXRlcGFnZShpbm9kZSwgcGFnZSwgMCk7Ci0KLQkvKgotCSAqIFJlZnVzZSB0byB3cml0ZSB0aGUgcGFnZSBvdXQgaWYgd2UgYXJlIGNhbGxlZCBmcm9tIHJlY2xhaW0gY29udGV4dC4KLQkgKgotCSAqIFRoaXMgaXMgcHJpbWFyaWx5IHRvIGF2b2lkIHN0YWNrIG92ZXJmbG93cyB3aGVuIGNhbGxlZCBmcm9tIGRlZXAKLQkgKiB1c2VkIHN0YWNrcyBpbiByYW5kb20gY2FsbGVycyBmb3IgZGlyZWN0IHJlY2xhaW0sIGJ1dCBkaXNhYmxpbmcKLQkgKiByZWNsYWltIGZvciBrc3dhcCBpcyBhIG5pY2Ugc2lkZS1lZmZlY3QgYXMga3N3YXBkIGNhdXNlcyByYXRoZXIKLQkgKiBzdWJvcHRpbWFsIEkvTyBwYXR0ZXJzLCB0b28uCi0JICoKLQkgKiBUaGlzIHNob3VsZCByZWFsbHkgYmUgZG9uZSBieSB0aGUgY29yZSBWTSwgYnV0IHVudGlsIHRoYXQgaGFwcGVucwotCSAqIGZpbGVzeXN0ZW1zIGxpa2UgWEZTLCBidHJmcyBhbmQgZXh0NCBoYXZlIHRvIHRha2UgY2FyZSBvZiB0aGlzCi0JICogYnkgdGhlbXNlbHZlcy4KLQkgKi8KLQlpZiAoY3VycmVudC0+ZmxhZ3MgJiBQRl9NRU1BTExPQykKLQkJZ290byBvdXRfZmFpbDsKLQotCS8qCi0JICogV2UgbmVlZCBhIHRyYW5zYWN0aW9uIGlmOgotCSAqICAxLiBUaGVyZSBhcmUgZGVsYWxsb2MgYnVmZmVycyBvbiB0aGUgcGFnZQotCSAqICAyLiBUaGUgcGFnZSBpcyB1cHRvZGF0ZSBhbmQgd2UgaGF2ZSB1bm1hcHBlZCBidWZmZXJzCi0JICogIDMuIFRoZSBwYWdlIGlzIHVwdG9kYXRlIGFuZCB3ZSBoYXZlIG5vIGJ1ZmZlcnMKLQkgKiAgNC4gVGhlcmUgYXJlIHVud3JpdHRlbiBidWZmZXJzIG9uIHRoZSBwYWdlCi0JICovCi0KLQlpZiAoIXBhZ2VfaGFzX2J1ZmZlcnMocGFnZSkpIHsKLQkJdW5tYXBwZWQgPSAxOwotCQluZWVkX3RyYW5zID0gMTsKLQl9IGVsc2UgewotCQl4ZnNfY291bnRfcGFnZV9zdGF0ZShwYWdlLCAmZGVsYWxsb2MsICZ1bm1hcHBlZCwgJnVud3JpdHRlbik7Ci0JCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKQotCQkJdW5tYXBwZWQgPSAwOwotCQluZWVkX3RyYW5zID0gZGVsYWxsb2MgKyB1bm1hcHBlZCArIHVud3JpdHRlbjsKLQl9Ci0KLQkvKgotCSAqIElmIHdlIG5lZWQgYSB0cmFuc2FjdGlvbiBhbmQgdGhlIHByb2Nlc3MgZmxhZ3Mgc2F5Ci0JICogd2UgYXJlIGFscmVhZHkgaW4gYSB0cmFuc2FjdGlvbiwgb3Igbm8gSU8gaXMgYWxsb3dlZAotCSAqIHRoZW4gbWFyayB0aGUgcGFnZSBkaXJ0eSBhZ2FpbiBhbmQgbGVhdmUgdGhlIHBhZ2UKLQkgKiBhcyBpcy4KLQkgKi8KLQlpZiAoY3VycmVudF90ZXN0X2ZsYWdzKFBGX0ZTVFJBTlMpICYmIG5lZWRfdHJhbnMpCi0JCWdvdG8gb3V0X2ZhaWw7Ci0KLQkvKgotCSAqIERlbGF5IGhvb2tpbmcgdXAgYnVmZmVyIGhlYWRzIHVudGlsIHdlIGhhdmUKLQkgKiBtYWRlIG91ciBnby9uby1nbyBkZWNpc2lvbi4KLQkgKi8KLQlpZiAoIXBhZ2VfaGFzX2J1ZmZlcnMocGFnZSkpCi0JCWNyZWF0ZV9lbXB0eV9idWZmZXJzKHBhZ2UsIDEgPDwgaW5vZGUtPmlfYmxrYml0cywgMCk7Ci0KLQkvKgotCSAqIENvbnZlcnQgZGVsYXllZCBhbGxvY2F0ZSwgdW53cml0dGVuIG9yIHVubWFwcGVkIHNwYWNlCi0JICogdG8gcmVhbCBzcGFjZSBhbmQgZmx1c2ggb3V0IHRvIGRpc2suCi0JICovCi0JZXJyb3IgPSB4ZnNfcGFnZV9zdGF0ZV9jb252ZXJ0KGlub2RlLCBwYWdlLCB3YmMsIDEsIHVubWFwcGVkKTsKLQlpZiAoZXJyb3IgPT0gLUVBR0FJTikKLQkJZ290byBvdXRfZmFpbDsKLQlpZiAodW5saWtlbHkoZXJyb3IgPCAwKSkKLQkJZ290byBvdXRfdW5sb2NrOwotCi0JcmV0dXJuIDA7CiAKIG91dF9mYWlsOgogCXJlZGlydHlfcGFnZV9mb3Jfd3JpdGVwYWdlKHdiYywgcGFnZSk7CiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAJcmV0dXJuIDA7Ci1vdXRfdW5sb2NrOgotCXVubG9ja19wYWdlKHBhZ2UpOwotCXJldHVybiBlcnJvcjsKIH0KIAogU1RBVElDIGludApAQCAtMTQxMyw2NSArMTI2NywyNyBAQAogCiAvKgogICogQ2FsbGVkIHRvIG1vdmUgYSBwYWdlIGludG8gY2xlYW5hYmxlIHN0YXRlIC0gYW5kIGZyb20gdGhlcmUKLSAqIHRvIGJlIHJlbGVhc2VkLiBQb3NzaWJseSB0aGUgcGFnZSBpcyBhbHJlYWR5IGNsZWFuLiBXZSBhbHdheXMKKyAqIHRvIGJlIHJlbGVhc2VkLiBUaGUgcGFnZSBzaG91bGQgYWxyZWFkeSBiZSBjbGVhbi4gV2UgYWx3YXlzCiAgKiBoYXZlIGJ1ZmZlciBoZWFkcyBpbiB0aGlzIGNhbGwuCiAgKgotICogUmV0dXJucyAwIGlmIHRoZSBwYWdlIGlzIG9rIHRvIHJlbGVhc2UsIDEgb3RoZXJ3aXNlLgotICoKLSAqIFBvc3NpYmxlIHNjZW5hcmlvcyBhcmU6Ci0gKgotICogMS4gV2UgYXJlIGJlaW5nIGNhbGxlZCB0byByZWxlYXNlIGEgcGFnZSB3aGljaCBoYXMgYmVlbiB3cml0dGVuCi0gKiAgICB0byB2aWEgcmVndWxhciBJL08uIGJ1ZmZlciBoZWFkcyB3aWxsIGJlIGRpcnR5IGFuZCBwb3NzaWJseQotICogICAgZGVsYWxsb2MuIElmIG5vIGRlbGFsbG9jIGJ1ZmZlciBoZWFkcyBpbiB0aGlzIGNhc2UgdGhlbiB3ZQotICogICAgY2FuIGp1c3QgcmV0dXJuIHplcm8uCi0gKgotICogMi4gV2UgYXJlIGNhbGxlZCB0byByZWxlYXNlIGEgcGFnZSB3aGljaCBoYXMgYmVlbiB3cml0dGVuIHZpYQotICogICAgbW1hcCwgYWxsIHdlIG5lZWQgdG8gZG8gaXMgZW5zdXJlIHRoZXJlIGlzIG5vIGRlbGFsbG9jCi0gKiAgICBzdGF0ZSBpbiB0aGUgYnVmZmVyIGhlYWRzLCBpZiBub3Qgd2UgY2FuIGxldCB0aGUgY2FsbGVyCi0gKiAgICBmcmVlIHRoZW0gYW5kIHdlIHNob3VsZCBjb21lIGJhY2sgbGF0ZXIgdmlhIHdyaXRlcGFnZS4KKyAqIFJldHVybnMgMSBpZiB0aGUgcGFnZSBpcyBvayB0byByZWxlYXNlLCAwIG90aGVyd2lzZS4KICAqLwogU1RBVElDIGludAogeGZzX3ZtX3JlbGVhc2VwYWdlKAogCXN0cnVjdCBwYWdlCQkqcGFnZSwKIAlnZnBfdAkJCWdmcF9tYXNrKQogewotCXN0cnVjdCBpbm9kZQkJKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKLQlpbnQJCQlkaXJ0eSwgZGVsYWxsb2MsIHVubWFwcGVkLCB1bndyaXR0ZW47Ci0Jc3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHsKLQkJLnN5bmNfbW9kZSA9IFdCX1NZTkNfQUxMLAotCQkubnJfdG9fd3JpdGUgPSAxLAotCX07CisJaW50CQkJZGVsYWxsb2MsIHVud3JpdHRlbjsKIAotCXRyYWNlX3hmc19yZWxlYXNlcGFnZShpbm9kZSwgcGFnZSwgMCk7CisJdHJhY2VfeGZzX3JlbGVhc2VwYWdlKHBhZ2UtPm1hcHBpbmctPmhvc3QsIHBhZ2UsIDApOwogCi0JaWYgKCFwYWdlX2hhc19idWZmZXJzKHBhZ2UpKQorCXhmc19jb3VudF9wYWdlX3N0YXRlKHBhZ2UsICZkZWxhbGxvYywgJnVud3JpdHRlbik7CisKKwlpZiAoV0FSTl9PTihkZWxhbGxvYykpCisJCXJldHVybiAwOworCWlmIChXQVJOX09OKHVud3JpdHRlbikpCiAJCXJldHVybiAwOwogCi0JeGZzX2NvdW50X3BhZ2Vfc3RhdGUocGFnZSwgJmRlbGFsbG9jLCAmdW5tYXBwZWQsICZ1bndyaXR0ZW4pOwotCWlmICghZGVsYWxsb2MgJiYgIXVud3JpdHRlbikKLQkJZ290byBmcmVlX2J1ZmZlcnM7Ci0KLQlpZiAoIShnZnBfbWFzayAmIF9fR0ZQX0ZTKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBJZiB3ZSBhcmUgYWxyZWFkeSBpbnNpZGUgYSB0cmFuc2FjdGlvbiBvciB0aGUgdGhyZWFkIGNhbm5vdAotCSAqIGRvIEkvTywgd2UgY2Fubm90IHJlbGVhc2UgdGhpcyBwYWdlLgotCSAqLwotCWlmIChjdXJyZW50X3Rlc3RfZmxhZ3MoUEZfRlNUUkFOUykpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBDb252ZXJ0IGRlbGFsbG9jIHNwYWNlIHRvIHJlYWwgc3BhY2UsIGRvIG5vdCBmbHVzaCB0aGUKLQkgKiBkYXRhIG91dCB0byBkaXNrLCB0aGF0IHdpbGwgYmUgZG9uZSBieSB0aGUgY2FsbGVyLgotCSAqIE5ldmVyIG5lZWQgdG8gYWxsb2NhdGUgc3BhY2UgaGVyZSAtIHdlIHdpbGwgYWx3YXlzCi0JICogY29tZSBiYWNrIHRvIHdyaXRlcGFnZSBpbiB0aGF0IGNhc2UuCi0JICovCi0JZGlydHkgPSB4ZnNfcGFnZV9zdGF0ZV9jb252ZXJ0KGlub2RlLCBwYWdlLCAmd2JjLCAwLCAwKTsKLQlpZiAoZGlydHkgPT0gMCAmJiAhdW53cml0dGVuKQotCQlnb3RvIGZyZWVfYnVmZmVyczsKLQlyZXR1cm4gMDsKLQotZnJlZV9idWZmZXJzOgogCXJldHVybiB0cnlfdG9fZnJlZV9idWZmZXJzKHBhZ2UpOwogfQogCkBAIC0xNDgxLDkgKzEyOTcsOSBAQAogCXNlY3Rvcl90CQlpYmxvY2ssCiAJc3RydWN0IGJ1ZmZlcl9oZWFkCSpiaF9yZXN1bHQsCiAJaW50CQkJY3JlYXRlLAotCWludAkJCWRpcmVjdCwKLQlibWFwaV9mbGFnc190CQlmbGFncykKKwlpbnQJCQlkaXJlY3QpCiB7CisJaW50CQkJZmxhZ3MgPSBjcmVhdGUgPyBCTUFQSV9XUklURSA6IEJNQVBJX1JFQUQ7CiAJc3RydWN0IHhmc19ibWJ0X2lyZWMJaW1hcDsKIAl4ZnNfb2ZmX3QJCW9mZnNldDsKIAlzc2l6ZV90CQkJc2l6ZTsKQEAgLTE0OTgsOCArMTMxNCwxMSBAQAogCWlmICghY3JlYXRlICYmIGRpcmVjdCAmJiBvZmZzZXQgPj0gaV9zaXplX3JlYWQoaW5vZGUpKQogCQlyZXR1cm4gMDsKIAotCWVycm9yID0geGZzX2lvbWFwKFhGU19JKGlub2RlKSwgb2Zmc2V0LCBzaXplLAotCQkJICAgICBjcmVhdGUgPyBmbGFncyA6IEJNQVBJX1JFQUQsICZpbWFwLCAmbmltYXAsICZuZXcpOworCWlmIChkaXJlY3QgJiYgY3JlYXRlKQorCQlmbGFncyB8PSBCTUFQSV9ESVJFQ1Q7CisKKwllcnJvciA9IHhmc19pb21hcChYRlNfSShpbm9kZSksIG9mZnNldCwgc2l6ZSwgZmxhZ3MsICZpbWFwLCAmbmltYXAsCisJCQkgICZuZXcpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIC1lcnJvcjsKIAlpZiAobmltYXAgPT0gMCkKQEAgLTE1NzksOCArMTM5OCw3IEBACiAJc3RydWN0IGJ1ZmZlcl9oZWFkCSpiaF9yZXN1bHQsCiAJaW50CQkJY3JlYXRlKQogewotCXJldHVybiBfX3hmc19nZXRfYmxvY2tzKGlub2RlLCBpYmxvY2ssCi0JCQkJYmhfcmVzdWx0LCBjcmVhdGUsIDAsIEJNQVBJX1dSSVRFKTsKKwlyZXR1cm4gX194ZnNfZ2V0X2Jsb2Nrcyhpbm9kZSwgaWJsb2NrLCBiaF9yZXN1bHQsIGNyZWF0ZSwgMCk7CiB9CiAKIFNUQVRJQyBpbnQKQEAgLTE1OTAsNTQgKzE0MDgsMzAgQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQJKmJoX3Jlc3VsdCwKIAlpbnQJCQljcmVhdGUpCiB7Ci0JcmV0dXJuIF9feGZzX2dldF9ibG9ja3MoaW5vZGUsIGlibG9jaywKLQkJCQliaF9yZXN1bHQsIGNyZWF0ZSwgMSwgQk1BUElfV1JJVEV8Qk1BUElfRElSRUNUKTsKKwlyZXR1cm4gX194ZnNfZ2V0X2Jsb2Nrcyhpbm9kZSwgaWJsb2NrLCBiaF9yZXN1bHQsIGNyZWF0ZSwgMSk7CiB9CiAKKy8qCisgKiBDb21wbGV0ZSBhIGRpcmVjdCBJL08gd3JpdGUgcmVxdWVzdC4KKyAqCisgKiBJZiB0aGUgcHJpdmF0ZSBhcmd1bWVudCBpcyBub24tTlVMTCBfX3hmc19nZXRfYmxvY2tzIHNpZ25hbHMgdXMgdGhhdCB3ZQorICogbmVlZCB0byBpc3N1ZSBhIHRyYW5zYWN0aW9uIHRvIGNvbnZlcnQgdGhlIHJhbmdlIGZyb20gdW53cml0dGVuIHRvIHdyaXR0ZW4KKyAqIGV4dGVudHMuICBJbiBjYXNlIHRoaXMgaXMgcmVndWxhciBzeW5jaHJvbm91cyBJL08gd2UganVzdCBjYWxsIHhmc19lbmRfaW8KKyAqIHRvIGRvIHRoaXMgYW5kIHdlIGFyZSBkb25lLiAgQnV0IGluIGNhc2UgdGhpcyB3YXMgYSBzdWNjZXNzZnVsbCBBSU8KKyAqIHJlcXVlc3QgdGhpcyBoYW5kbGVyIGlzIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LCBmcm9tIHdoaWNoIHdlCisgKiBjYW4ndCBzdGFydCB0cmFuc2FjdGlvbnMuICBJbiB0aGF0IGNhc2Ugb2ZmbG9hZCB0aGUgSS9PIGNvbXBsZXRpb24gdG8KKyAqIHRoZSB3b3JrcXVldWVzIHdlIGFsc28gdXNlIGZvciBidWZmZXJlZCBJL08gY29tcGxldGlvbi4KKyAqLwogU1RBVElDIHZvaWQKLXhmc19lbmRfaW9fZGlyZWN0KAotCXN0cnVjdCBraW9jYgkqaW9jYiwKLQlsb2ZmX3QJCW9mZnNldCwKLQlzc2l6ZV90CQlzaXplLAotCXZvaWQJCSpwcml2YXRlKQoreGZzX2VuZF9pb19kaXJlY3Rfd3JpdGUoCisJc3RydWN0IGtpb2NiCQkqaW9jYiwKKwlsb2ZmX3QJCQlvZmZzZXQsCisJc3NpemVfdAkJCXNpemUsCisJdm9pZAkJCSpwcml2YXRlLAorCWludAkJCXJldCwKKwlib29sCQkJaXNfYXN5bmMpCiB7Ci0JeGZzX2lvZW5kX3QJKmlvZW5kID0gaW9jYi0+cHJpdmF0ZTsKLQotCS8qCi0JICogTm9uLU5VTEwgcHJpdmF0ZSBkYXRhIG1lYW5zIHdlIG5lZWQgdG8gaXNzdWUgYSB0cmFuc2FjdGlvbiB0bwotCSAqIGNvbnZlcnQgYSByYW5nZSBmcm9tIHVud3JpdHRlbiB0byB3cml0dGVuIGV4dGVudHMuICBUaGlzIG5lZWRzCi0JICogdG8gaGFwcGVuIGZyb20gcHJvY2VzcyBjb250ZXh0IGJ1dCBhaW8rZGlvIEkvTyBjb21wbGV0aW9uCi0JICogaGFwcGVucyBmcm9tIGlycSBjb250ZXh0IHNvIHdlIG5lZWQgdG8gZGVmZXIgaXQgdG8gYSB3b3JrcXVldWUuCi0JICogVGhpcyBpcyBub3QgbmVjZXNzYXJ5IGZvciBzeW5jaHJvbm91cyBkaXJlY3QgSS9PLCBidXQgd2UgZG8KLQkgKiBpdCBhbnl3YXkgdG8ga2VlcCB0aGUgY29kZSB1bmlmb3JtIGFuZCBzaW1wbGVyLgotCSAqCi0JICogV2VsbCwgaWYgb25seSBpdCB3ZXJlIHRoYXQgc2ltcGxlLiBCZWNhdXNlIHN5bmNocm9ub3VzIGRpcmVjdCBJL08KLQkgKiByZXF1aXJlcyBleHRlbnQgY29udmVyc2lvbiB0byBvY2N1ciAqYmVmb3JlKiB3ZSByZXR1cm4gdG8gdXNlcnNwYWNlLAotCSAqIHdlIGhhdmUgdG8gd2FpdCBmb3IgZXh0ZW50IGNvbnZlcnNpb24gdG8gY29tcGxldGUuIExvb2sgYXQgdGhlCi0JICogaW9jYiB0aGF0IGhhcyBiZWVuIHBhc3NlZCB0byB1cyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBBSU8gb3IKLQkgKiBub3QuIElmIGl0IGlzIHN5bmNocm9ub3VzLCB0ZWxsIHhmc19maW5pc2hfaW9lbmQoKSB0byBraWNrIHRoZQotCSAqIHdvcmtxdWV1ZSBhbmQgd2FpdCBmb3IgaXQgdG8gY29tcGxldGUuCi0JICoKLQkgKiBUaGUgY29yZSBkaXJlY3QgSS9PIGNvZGUgbWlnaHQgYmUgY2hhbmdlZCB0byBhbHdheXMgY2FsbCB0aGUKLQkgKiBjb21wbGV0aW9uIGhhbmRsZXIgaW4gdGhlIGZ1dHVyZSwgaW4gd2hpY2ggY2FzZSBhbGwgdGhpcyBjYW4KLQkgKiBnbyBhd2F5LgotCSAqLwotCWlvZW5kLT5pb19vZmZzZXQgPSBvZmZzZXQ7Ci0JaW9lbmQtPmlvX3NpemUgPSBzaXplOwotCWlmIChpb2VuZC0+aW9fdHlwZSA9PSBJT19SRUFEKSB7Ci0JCXhmc19maW5pc2hfaW9lbmQoaW9lbmQsIDApOwotCX0gZWxzZSBpZiAocHJpdmF0ZSAmJiBzaXplID4gMCkgewotCQl4ZnNfZmluaXNoX2lvZW5kKGlvZW5kLCBpc19zeW5jX2tpb2NiKGlvY2IpKTsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBBIGRpcmVjdCBJL08gd3JpdGUgaW9lbmQgc3RhcnRzIGl0J3MgbGlmZSBpbiB1bndyaXR0ZW4KLQkJICogc3RhdGUgaW4gY2FzZSB0aGV5IG1hcCBhbiB1bndyaXR0ZW4gZXh0ZW50LiAgVGhpcyB3cml0ZQotCQkgKiBkaWRuJ3QgbWFwIGFuIHVud3JpdHRlbiBleHRlbnQgc28gc3dpdGNoIGl0J3MgY29tcGxldGlvbgotCQkgKiBoYW5kbGVyLgotCQkgKi8KLQkJaW9lbmQtPmlvX3R5cGUgPSBJT19ORVc7Ci0JCXhmc19maW5pc2hfaW9lbmQoaW9lbmQsIDApOwotCX0KKwlzdHJ1Y3QgeGZzX2lvZW5kCSppb2VuZCA9IGlvY2ItPnByaXZhdGU7CiAKIAkvKgogCSAqIGJsb2NrZGV2X2RpcmVjdF9JTyBjYW4gcmV0dXJuIGFuIGVycm9yIGV2ZW4gYWZ0ZXIgdGhlIEkvTwpAQCAtMTY0NSw2ICsxNDM5LDI4IEBACiAJICogYWdhaW5zdCBkb3VibGUtZnJlZWluZy4KIAkgKi8KIAlpb2NiLT5wcml2YXRlID0gTlVMTDsKKworCWlvZW5kLT5pb19vZmZzZXQgPSBvZmZzZXQ7CisJaW9lbmQtPmlvX3NpemUgPSBzaXplOworCWlmIChwcml2YXRlICYmIHNpemUgPiAwKQorCQlpb2VuZC0+aW9fdHlwZSA9IElPX1VOV1JJVFRFTjsKKworCWlmIChpc19hc3luYykgeworCQkvKgorCQkgKiBJZiB3ZSBhcmUgY29udmVydGluZyBhbiB1bndyaXR0ZW4gZXh0ZW50IHdlIG5lZWQgdG8gZGVsYXkKKwkJICogdGhlIEFJTyBjb21wbGV0aW9uIHVudGlsIGFmdGVyIHRoZSB1bndyaXR0ZW50IGV4dGVudAorCQkgKiBjb252ZXJzaW9uIGhhcyBjb21wbGV0ZWQsIG90aGVyd2lzZSBkbyBpdCBBU0FQLgorCQkgKi8KKwkJaWYgKGlvZW5kLT5pb190eXBlID09IElPX1VOV1JJVFRFTikgeworCQkJaW9lbmQtPmlvX2lvY2IgPSBpb2NiOworCQkJaW9lbmQtPmlvX3Jlc3VsdCA9IHJldDsKKwkJfSBlbHNlIHsKKwkJCWFpb19jb21wbGV0ZShpb2NiLCByZXQsIDApOworCQl9CisJCXhmc19maW5pc2hfaW9lbmQoaW9lbmQpOworCX0gZWxzZSB7CisJCXhmc19maW5pc2hfaW9lbmRfc3luYyhpb2VuZCk7CisJfQogfQogCiBTVEFUSUMgc3NpemVfdApAQCAtMTY1NSwyMyArMTQ3MSwyNiBAQAogCWxvZmZfdAkJCW9mZnNldCwKIAl1bnNpZ25lZCBsb25nCQlucl9zZWdzKQogewotCXN0cnVjdCBmaWxlCSpmaWxlID0gaW9jYi0+a2lfZmlscDsKLQlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gZmlsZS0+Zl9tYXBwaW5nLT5ob3N0OwotCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7Ci0Jc3NpemVfdAkJcmV0OworCXN0cnVjdCBpbm9kZQkJKmlub2RlID0gaW9jYi0+a2lfZmlscC0+Zl9tYXBwaW5nLT5ob3N0OworCXN0cnVjdCBibG9ja19kZXZpY2UJKmJkZXYgPSB4ZnNfZmluZF9iZGV2X2Zvcl9pbm9kZShpbm9kZSk7CisJc3NpemVfdAkJCXJldDsKIAotCWJkZXYgPSB4ZnNfZmluZF9iZGV2X2Zvcl9pbm9kZShpbm9kZSk7CisJaWYgKHJ3ICYgV1JJVEUpIHsKKwkJaW9jYi0+cHJpdmF0ZSA9IHhmc19hbGxvY19pb2VuZChpbm9kZSwgSU9fTkVXKTsKIAotCWlvY2ItPnByaXZhdGUgPSB4ZnNfYWxsb2NfaW9lbmQoaW5vZGUsIHJ3ID09IFdSSVRFID8KLQkJCQkJSU9fVU5XUklUVEVOIDogSU9fUkVBRCk7CisJCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JT19ub19sb2NraW5nKHJ3LCBpb2NiLCBpbm9kZSwgYmRldiwgaW92LAorCQkJCQkJICAgIG9mZnNldCwgbnJfc2VncywKKwkJCQkJCSAgICB4ZnNfZ2V0X2Jsb2Nrc19kaXJlY3QsCisJCQkJCQkgICAgeGZzX2VuZF9pb19kaXJlY3Rfd3JpdGUpOworCQlpZiAocmV0ICE9IC1FSU9DQlFVRVVFRCAmJiBpb2NiLT5wcml2YXRlKQorCQkJeGZzX2Rlc3Ryb3lfaW9lbmQoaW9jYi0+cHJpdmF0ZSk7CisJfSBlbHNlIHsKKwkJcmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPX25vX2xvY2tpbmcocncsIGlvY2IsIGlub2RlLCBiZGV2LCBpb3YsCisJCQkJCQkgICAgb2Zmc2V0LCBucl9zZWdzLAorCQkJCQkJICAgIHhmc19nZXRfYmxvY2tzX2RpcmVjdCwKKwkJCQkJCSAgICBOVUxMKTsKKwl9CiAKLQlyZXQgPSBibG9ja2Rldl9kaXJlY3RfSU9fbm9fbG9ja2luZyhydywgaW9jYiwgaW5vZGUsIGJkZXYsIGlvdiwKLQkJCQkJICAgIG9mZnNldCwgbnJfc2VncywKLQkJCQkJICAgIHhmc19nZXRfYmxvY2tzX2RpcmVjdCwKLQkJCQkJICAgIHhmc19lbmRfaW9fZGlyZWN0KTsKLQotCWlmICh1bmxpa2VseShyZXQgIT0gLUVJT0NCUVVFVUVEICYmIGlvY2ItPnByaXZhdGUpKQotCQl4ZnNfZGVzdHJveV9pb2VuZChpb2NiLT5wcml2YXRlKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNjg2LDggKzE1MDUsOCBAQAogCXZvaWQJCQkqKmZzZGF0YSkKIHsKIAkqcGFnZXAgPSBOVUxMOwotCXJldHVybiBibG9ja193cml0ZV9iZWdpbihmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwgZmxhZ3MsIHBhZ2VwLCBmc2RhdGEsCi0JCQkJCQkJCXhmc19nZXRfYmxvY2tzKTsKKwlyZXR1cm4gYmxvY2tfd3JpdGVfYmVnaW4oZmlsZSwgbWFwcGluZywgcG9zLCBsZW4sIGZsYWdzIHwgQU9QX0ZMQUdfTk9GUywKKwkJCQkgcGFnZXAsIGZzZGF0YSwgeGZzX2dldF9ibG9ja3MpOwogfQogCiBTVEFUSUMgc2VjdG9yX3QKQEAgLTE2OTgsNyArMTUxNyw3IEBACiAJc3RydWN0IGlub2RlCQkqaW5vZGUgPSAoc3RydWN0IGlub2RlICopbWFwcGluZy0+aG9zdDsKIAlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKIAotCXhmc19pdHJhY2VfZW50cnkoWEZTX0koaW5vZGUpKTsKKwl0cmFjZV94ZnNfdm1fYm1hcChYRlNfSShpbm9kZSkpOwogCXhmc19pbG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpOwogCXhmc19mbHVzaF9wYWdlcyhpcCwgKHhmc19vZmZfdCkwLCAtMSwgMCwgRklfUkVNQVBGKTsKIAl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5oCmluZGV4IDRjZmM2ZWEuLmM1MDU3ZmIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmgKQEAgLTM3LDYgKzM3LDggQEAKIAlzaXplX3QJCQlpb19zaXplOwkvKiBzaXplIG9mIHRoZSBleHRlbnQgKi8KIAl4ZnNfb2ZmX3QJCWlvX29mZnNldDsJLyogb2Zmc2V0IGluIHRoZSBmaWxlICovCiAJc3RydWN0IHdvcmtfc3RydWN0CWlvX3dvcms7CS8qIHhmc2RhdGFkIHdvcmsgcXVldWUgKi8KKwlzdHJ1Y3Qga2lvY2IJCSppb19pb2NiOworCWludAkJCWlvX3Jlc3VsdDsKIH0geGZzX2lvZW5kX3Q7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHhmc19hZGRyZXNzX3NwYWNlX29wZXJhdGlvbnM7CkBAIC00NSw2ICs0Nyw2IEBACiBleHRlcm4gdm9pZCB4ZnNfaW9lbmRfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHhmc19pb2VuZF93YWl0KHN0cnVjdCB4ZnNfaW5vZGUgKik7CiAKLWV4dGVybiB2b2lkIHhmc19jb3VudF9wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICosIGludCAqLCBpbnQgKiwgaW50ICopOworZXh0ZXJuIHZvaWQgeGZzX2NvdW50X3BhZ2Vfc3RhdGUoc3RydWN0IHBhZ2UgKiwgaW50ICosIGludCAqKTsKIAogI2VuZGlmIC8qIF9fWEZTX0FPUFNfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19idWYuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCmluZGV4IDY0OWFkZTguLmVhNzkwNzIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCkBAIC0zOSwxMyArMzksMTIgQEAKICNpbmNsdWRlICJ4ZnNfaW51bS5oIgogI2luY2x1ZGUgInhmc19sb2cuaCIKICNpbmNsdWRlICJ4ZnNfYWcuaCIKLSNpbmNsdWRlICJ4ZnNfZG1hcGkuaCIKICNpbmNsdWRlICJ4ZnNfbW91bnQuaCIKICNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKIAogc3RhdGljIGttZW1fem9uZV90ICp4ZnNfYnVmX3pvbmU7CiBTVEFUSUMgaW50IHhmc2J1ZmQodm9pZCAqKTsKLVNUQVRJQyBpbnQgeGZzYnVmZF93YWtldXAoaW50LCBnZnBfdCk7CitTVEFUSUMgaW50IHhmc2J1ZmRfd2FrZXVwKHN0cnVjdCBzaHJpbmtlciAqLCBpbnQsIGdmcF90KTsKIFNUQVRJQyB2b2lkIHhmc19idWZfZGVsd3JpX3F1ZXVlKHhmc19idWZfdCAqLCBpbnQpOwogc3RhdGljIHN0cnVjdCBzaHJpbmtlciB4ZnNfYnVmX3NoYWtlID0gewogCS5zaHJpbmsgPSB4ZnNidWZkX3dha2V1cCwKQEAgLTM0MCw3ICszMzksNyBAQAogCQkJCQlfX2Z1bmNfXywgZ2ZwX21hc2spOwogCiAJCQlYRlNfU1RBVFNfSU5DKHhiX3BhZ2VfcmV0cmllcyk7Ci0JCQl4ZnNidWZkX3dha2V1cCgwLCBnZnBfbWFzayk7CisJCQl4ZnNidWZkX3dha2V1cChOVUxMLCAwLCBnZnBfbWFzayk7CiAJCQljb25nZXN0aW9uX3dhaXQoQkxLX1JXX0FTWU5DLCBIWi81MCk7CiAJCQlnb3RvIHJldHJ5OwogCQl9CkBAIC01NzksOSArNTc4LDkgQEAKIAkJCVhCRl9SRUFEX0FIRUFEIHwgX1hCRl9SVU5fUVVFVUVTKTsKIAogCXN0YXR1cyA9IHhmc19idWZfaW9yZXF1ZXN0KGJwKTsKLQlpZiAoIXN0YXR1cyAmJiAhKGZsYWdzICYgWEJGX0FTWU5DKSkKLQkJc3RhdHVzID0geGZzX2J1Zl9pb3dhaXQoYnApOwotCXJldHVybiBzdGF0dXM7CisJaWYgKHN0YXR1cyB8fCBYRlNfQlVGX0lTRVJST1IoYnApIHx8IChmbGFncyAmIFhCRl9BU1lOQykpCisJCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIHhmc19idWZfaW93YWl0KGJwKTsKIH0KIAogeGZzX2J1Zl90ICoKQEAgLTg5NywzNiArODk2LDYgQEAKIAl0cmFjZV94ZnNfYnVmX3VubG9jayhicCwgX1JFVF9JUF8pOwogfQogCi0KLS8qCi0gKglQaW5uaW5nIEJ1ZmZlciBTdG9yYWdlIGluIE1lbW9yeQotICoJRW5zdXJlIHRoYXQgbm8gYXR0ZW1wdCB0byBmb3JjZSBhIGJ1ZmZlciB0byBkaXNrIHdpbGwgc3VjY2VlZC4KLSAqLwotdm9pZAoteGZzX2J1Zl9waW4oCi0JeGZzX2J1Zl90CQkqYnApCi17Ci0JdHJhY2VfeGZzX2J1Zl9waW4oYnAsIF9SRVRfSVBfKTsKLQlhdG9taWNfaW5jKCZicC0+Yl9waW5fY291bnQpOwotfQotCi12b2lkCi14ZnNfYnVmX3VucGluKAotCXhmc19idWZfdAkJKmJwKQotewotCXRyYWNlX3hmc19idWZfdW5waW4oYnAsIF9SRVRfSVBfKTsKLQotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZicC0+Yl9waW5fY291bnQpKQotCQl3YWtlX3VwX2FsbCgmYnAtPmJfd2FpdGVycyk7Ci19Ci0KLWludAoteGZzX2J1Zl9pc3BpbigKLQl4ZnNfYnVmX3QJCSpicCkKLXsKLQlyZXR1cm4gYXRvbWljX3JlYWQoJmJwLT5iX3Bpbl9jb3VudCk7Ci19Ci0KIFNUQVRJQyB2b2lkCiB4ZnNfYnVmX3dhaXRfdW5waW4oCiAJeGZzX2J1Zl90CQkqYnApCkBAIC0xMDE4LDEzICs5ODcsMTIgQEAKIHsKIAlpbnQJCQllcnJvcjsKIAotCWJwLT5iX3N0cmF0ID0geGZzX2Jkc3RyYXRfY2I7CiAJYnAtPmJfbW91bnQgPSBtcDsKIAlicC0+Yl9mbGFncyB8PSBYQkZfV1JJVEU7CiAJYnAtPmJfZmxhZ3MgJj0gfihYQkZfQVNZTkMgfCBYQkZfUkVBRCk7CiAKIAl4ZnNfYnVmX2RlbHdyaV9kZXF1ZXVlKGJwKTsKLQl4ZnNfYnVmX2lvc3RyYXRlZ3koYnApOworCXhmc19iZHN0cmF0X2NiKGJwKTsKIAogCWVycm9yID0geGZzX2J1Zl9pb3dhaXQoYnApOwogCWlmIChlcnJvcikKQEAgLTEwNDAsNyArMTAwOCw2IEBACiB7CiAJdHJhY2VfeGZzX2J1Zl9iZHdyaXRlKGJwLCBfUkVUX0lQXyk7CiAKLQlicC0+Yl9zdHJhdCA9IHhmc19iZHN0cmF0X2NiOwogCWJwLT5iX21vdW50ID0gbXA7CiAKIAlicC0+Yl9mbGFncyAmPSB+WEJGX1JFQUQ7CkBAIC0xMDc1LDcgKzEwNDIsNiBAQAogCVhGU19CVUZfVU5ET05FKGJwKTsKIAlYRlNfQlVGX1NUQUxFKGJwKTsKIAotCVhGU19CVUZfQ0xSX0JEU1RSQVRfRlVOQyhicCk7CiAJeGZzX2Jpb2RvbmUoYnApOwogCiAJcmV0dXJuIEVJTzsKQEAgLTExMDUsNyArMTA3MSw2IEBACiAJWEZTX0JVRl9ET05FKGJwKTsKIAlYRlNfQlVGX1NUQUxFKGJwKTsKIAlYRlNfQlVGX0NMUl9JT0RPTkVfRlVOQyhicCk7Ci0JWEZTX0JVRl9DTFJfQkRTVFJBVF9GVU5DKGJwKTsKIAlpZiAoIShmbCAmIFhCRl9BU1lOQykpIHsKIAkJLyoKIAkJICogTWFyayBiX2Vycm9yIGFuZCBCX0VSUk9SIF9ib3RoXy4KQEAgLTEzMTEsOCArMTI3NiwxOSBAQAogCQlpZiAoc2l6ZSkKIAkJCWdvdG8gbmV4dF9jaHVuazsKIAl9IGVsc2UgewotCQliaW9fcHV0KGJpbyk7CisJCS8qCisJCSAqIGlmIHdlIGdldCBoZXJlLCBubyBwYWdlcyB3ZXJlIGFkZGVkIHRvIHRoZSBiaW8uIEhvd2V2ZXIsCisJCSAqIHdlIGNhbid0IGp1c3QgZXJyb3Igb3V0IGhlcmUgLSBpZiB0aGUgcGFnZXMgYXJlIGxvY2tlZCB0aGVuCisJCSAqIHdlIGhhdmUgdG8gdW5sb2NrIHRoZW0gb3RoZXJ3aXNlIHdlIGNhbiBoYW5nIG9uIGEgbGF0ZXIKKwkJICogYWNjZXNzIHRvIHRoZSBwYWdlLgorCQkgKi8KIAkJeGZzX2J1Zl9pb2Vycm9yKGJwLCBFSU8pOworCQlpZiAoYnAtPmJfZmxhZ3MgJiBfWEJGX1BBR0VfTE9DS0VEKSB7CisJCQlpbnQgaTsKKwkJCWZvciAoaSA9IDA7IGkgPCBicC0+Yl9wYWdlX2NvdW50OyBpKyspCisJCQkJdW5sb2NrX3BhZ2UoYnAtPmJfcGFnZXNbaV0pOworCQl9CisJCWJpb19wdXQoYmlvKTsKIAl9CiB9CiAKQEAgLTE3NjIsNiArMTczOCw3IEBACiAKIFNUQVRJQyBpbnQKIHhmc2J1ZmRfd2FrZXVwKAorCXN0cnVjdCBzaHJpbmtlcgkJKnNocmluaywKIAlpbnQJCQlwcmlvcml0eSwKIAlnZnBfdAkJCW1hc2spCiB7CkBAIC0xODAzLDcgKzE3ODAsNyBAQAogCQl0cmFjZV94ZnNfYnVmX2RlbHdyaV9zcGxpdChicCwgX1JFVF9JUF8pOwogCQlBU1NFUlQoYnAtPmJfZmxhZ3MgJiBYQkZfREVMV1JJKTsKIAotCQlpZiAoIXhmc19idWZfaXNwaW4oYnApICYmICF4ZnNfYnVmX2NvbmRfbG9jayhicCkpIHsKKwkJaWYgKCFYRlNfQlVGX0lTUElOTkVEKGJwKSAmJiAheGZzX2J1Zl9jb25kX2xvY2soYnApKSB7CiAJCQlpZiAoIWZvcmNlICYmCiAJCQkgICAgdGltZV9iZWZvcmUoamlmZmllcywgYnAtPmJfcXVldWV0aW1lICsgYWdlKSkgewogCQkJCXhmc19idWZfdW5sb2NrKGJwKTsKQEAgLTE4ODgsNyArMTg2NSw3IEBACiAJCQlzdHJ1Y3QgeGZzX2J1ZiAqYnA7CiAJCQlicCA9IGxpc3RfZmlyc3RfZW50cnkoJnRtcCwgc3RydWN0IHhmc19idWYsIGJfbGlzdCk7CiAJCQlsaXN0X2RlbF9pbml0KCZicC0+Yl9saXN0KTsKLQkJCXhmc19idWZfaW9zdHJhdGVneShicCk7CisJCQl4ZnNfYmRzdHJhdF9jYihicCk7CiAJCQljb3VudCsrOwogCQl9CiAJCWlmIChjb3VudCkKQEAgLTE5MzUsNyArMTkxMiw3IEBACiAJCQlicC0+Yl9mbGFncyAmPSB+WEJGX0FTWU5DOwogCQkJbGlzdF9hZGQoJmJwLT5iX2xpc3QsICZ3YWl0X2xpc3QpOwogCQl9Ci0JCXhmc19idWZfaW9zdHJhdGVneShicCk7CisJCXhmc19iZHN0cmF0X2NiKGJwKTsKIAl9CiAKIAlpZiAod2FpdCkgewpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmggYi9mcy94ZnMvbGludXgtMi42L3hmc19idWYuaAppbmRleCA1ZmJlY2VmLi5kMDcyZTVmIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19idWYuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19idWYuaApAQCAtNDQsNTcgKzQ0LDU3IEBACiAJWEJSV19aRVJPID0gMywJCQkvKiBaZXJvIHRhcmdldCBtZW1vcnkgKi8KIH0geGZzX2J1Zl9yd190OwogCi10eXBlZGVmIGVudW0gewotCVhCRl9SRUFEID0gKDEgPDwgMCksCS8qIGJ1ZmZlciBpbnRlbmRlZCBmb3IgcmVhZGluZyBmcm9tIGRldmljZSAqLwotCVhCRl9XUklURSA9ICgxIDw8IDEpLAkvKiBidWZmZXIgaW50ZW5kZWQgZm9yIHdyaXRpbmcgdG8gZGV2aWNlICAgKi8KLQlYQkZfTUFQUEVEID0gKDEgPDwgMiksICAvKiBidWZmZXIgbWFwcGVkIChiX2FkZHIgdmFsaWQpICAgICAgICAgICAgKi8KLQlYQkZfQVNZTkMgPSAoMSA8PCA0KSwgICAvKiBpbml0aWF0b3Igd2lsbCBub3Qgd2FpdCBmb3IgY29tcGxldGlvbiAgKi8KLQlYQkZfRE9ORSA9ICgxIDw8IDUpLCAgICAvKiBhbGwgcGFnZXMgaW4gdGhlIGJ1ZmZlciB1cHRvZGF0ZQkgICAqLwotCVhCRl9ERUxXUkkgPSAoMSA8PCA2KSwgIC8qIGJ1ZmZlciBoYXMgZGlydHkgcGFnZXMgICAgICAgICAgICAgICAgICAqLwotCVhCRl9TVEFMRSA9ICgxIDw8IDcpLAkvKiBidWZmZXIgaGFzIGJlZW4gc3RhbGVkLCBkbyBub3QgZmluZCBpdCAgKi8KLQlYQkZfRlNfTUFOQUdFRCA9ICgxIDw8IDgpLCAgLyogZmlsZXN5c3RlbSBjb250cm9scyBmcmVlaW5nIG1lbW9yeSAgKi8KLSAJWEJGX09SREVSRUQgPSAoMSA8PCAxMSksICAgIC8qIHVzZSBvcmRlcmVkIHdyaXRlcwkJICAgKi8KLQlYQkZfUkVBRF9BSEVBRCA9ICgxIDw8IDEyKSwgLyogYXN5bmNocm9ub3VzIHJlYWQtYWhlYWQJCSAgICovCi0JWEJGX0xPR19CVUZGRVIgPSAoMSA8PCAxMyksIC8qIHRoaXMgaXMgYSBidWZmZXIgdXNlZCBmb3IgdGhlIGxvZyAgICovCisjZGVmaW5lIFhCRl9SRUFECSgxIDw8IDApIC8qIGJ1ZmZlciBpbnRlbmRlZCBmb3IgcmVhZGluZyBmcm9tIGRldmljZSAqLworI2RlZmluZSBYQkZfV1JJVEUJKDEgPDwgMSkgLyogYnVmZmVyIGludGVuZGVkIGZvciB3cml0aW5nIHRvIGRldmljZSAqLworI2RlZmluZSBYQkZfTUFQUEVECSgxIDw8IDIpIC8qIGJ1ZmZlciBtYXBwZWQgKGJfYWRkciB2YWxpZCkgKi8KKyNkZWZpbmUgWEJGX0FTWU5DCSgxIDw8IDQpIC8qIGluaXRpYXRvciB3aWxsIG5vdCB3YWl0IGZvciBjb21wbGV0aW9uICovCisjZGVmaW5lIFhCRl9ET05FCSgxIDw8IDUpIC8qIGFsbCBwYWdlcyBpbiB0aGUgYnVmZmVyIHVwdG9kYXRlICovCisjZGVmaW5lIFhCRl9ERUxXUkkJKDEgPDwgNikgLyogYnVmZmVyIGhhcyBkaXJ0eSBwYWdlcyAqLworI2RlZmluZSBYQkZfU1RBTEUJKDEgPDwgNykgLyogYnVmZmVyIGhhcyBiZWVuIHN0YWxlZCwgZG8gbm90IGZpbmQgaXQgKi8KKyNkZWZpbmUgWEJGX0ZTX01BTkFHRUQJKDEgPDwgOCkgLyogZmlsZXN5c3RlbSBjb250cm9scyBmcmVlaW5nIG1lbW9yeSAqLworI2RlZmluZSBYQkZfT1JERVJFRAkoMSA8PCAxMSkvKiB1c2Ugb3JkZXJlZCB3cml0ZXMgKi8KKyNkZWZpbmUgWEJGX1JFQURfQUhFQUQJKDEgPDwgMTIpLyogYXN5bmNocm9ub3VzIHJlYWQtYWhlYWQgKi8KKyNkZWZpbmUgWEJGX0xPR19CVUZGRVIJKDEgPDwgMTMpLyogdGhpcyBpcyBhIGJ1ZmZlciB1c2VkIGZvciB0aGUgbG9nICovCiAKLQkvKiBmbGFncyB1c2VkIG9ubHkgYXMgYXJndW1lbnRzIHRvIGFjY2VzcyByb3V0aW5lcyAqLwotCVhCRl9MT0NLID0gKDEgPDwgMTQpLCAgICAgICAvKiBsb2NrIHJlcXVlc3RlZAkJCSAgICovCi0JWEJGX1RSWUxPQ0sgPSAoMSA8PCAxNSksICAgIC8qIGxvY2sgcmVxdWVzdGVkLCBidXQgZG8gbm90IHdhaXQJICAgKi8KLQlYQkZfRE9OVF9CTE9DSyA9ICgxIDw8IDE2KSwgLyogZG8gbm90IGJsb2NrIGluIGN1cnJlbnQgdGhyZWFkCSAgICovCisvKiBmbGFncyB1c2VkIG9ubHkgYXMgYXJndW1lbnRzIHRvIGFjY2VzcyByb3V0aW5lcyAqLworI2RlZmluZSBYQkZfTE9DSwkoMSA8PCAxNCkvKiBsb2NrIHJlcXVlc3RlZCAqLworI2RlZmluZSBYQkZfVFJZTE9DSwkoMSA8PCAxNSkvKiBsb2NrIHJlcXVlc3RlZCwgYnV0IGRvIG5vdCB3YWl0ICovCisjZGVmaW5lIFhCRl9ET05UX0JMT0NLCSgxIDw8IDE2KS8qIGRvIG5vdCBibG9jayBpbiBjdXJyZW50IHRocmVhZCAqLwogCi0JLyogZmxhZ3MgdXNlZCBvbmx5IGludGVybmFsbHkgKi8KLQlfWEJGX1BBR0VfQ0FDSEUgPSAoMSA8PCAxNyksLyogYmFja2VkIGJ5IHBhZ2VjYWNoZQkJICAgKi8KLQlfWEJGX1BBR0VTID0gKDEgPDwgMTgpLAkgICAgLyogYmFja2VkIGJ5IHJlZmNvdW50ZWQgcGFnZXMJICAgKi8KLQlfWEJGX1JVTl9RVUVVRVMgPSAoMSA8PCAxOSksLyogcnVuIGJsb2NrIGRldmljZSB0YXNrIHF1ZXVlCSAgICovCi0JX1hCRl9ERUxXUklfUSA9ICgxIDw8IDIxKSwgICAvKiBidWZmZXIgb24gZGVsd3JpIHF1ZXVlCQkgICAqLworLyogZmxhZ3MgdXNlZCBvbmx5IGludGVybmFsbHkgKi8KKyNkZWZpbmUgX1hCRl9QQUdFX0NBQ0hFCSgxIDw8IDE3KS8qIGJhY2tlZCBieSBwYWdlY2FjaGUgKi8KKyNkZWZpbmUgX1hCRl9QQUdFUwkoMSA8PCAxOCkvKiBiYWNrZWQgYnkgcmVmY291bnRlZCBwYWdlcyAqLworI2RlZmluZQlfWEJGX1JVTl9RVUVVRVMJKDEgPDwgMTkpLyogcnVuIGJsb2NrIGRldmljZSB0YXNrIHF1ZXVlCSovCisjZGVmaW5lIF9YQkZfREVMV1JJX1EJKDEgPDwgMjEpLyogYnVmZmVyIG9uIGRlbHdyaSBxdWV1ZSAqLwogCi0JLyoKLQkgKiBTcGVjaWFsIGZsYWcgZm9yIHN1cHBvcnRpbmcgbWV0YWRhdGEgYmxvY2tzIHNtYWxsZXIgdGhhbiBhIEZTQi4KLQkgKgotCSAqIEluIHRoaXMgY2FzZSB3ZSBjYW4gaGF2ZSBtdWx0aXBsZSB4ZnNfYnVmX3Qgb24gYSBzaW5nbGUgcGFnZSBhbmQKLQkgKiBuZWVkIHRvIGxvY2sgb3V0IGNvbmN1cnJlbnQgeGZzX2J1Zl90IHJlYWRlcnMgYXMgdGhleSBvbmx5Ci0JICogc2VyaWFsaXNlIGFjY2VzcyB0byB0aGUgYnVmZmVyLgotCSAqCi0JICogSWYgdGhlIEZTQiBzaXplID49IFBBR0VfQ0FDSEVfU0laRSBjYXNlLCB3ZSBoYXZlIG5vIHNlcmlhbGlzYXRpb24KLQkgKiBiZXR3ZWVuIHJlYWRzIG9mIHRoZSBwYWdlLiBIZW5jZSB3ZSBjYW4gaGF2ZSBvbmUgdGhyZWFkIHJlYWQgdGhlCi0JICogcGFnZSBhbmQgbW9kaWZ5IGl0LCBidXQgdGhlbiByYWNlIHdpdGggYW5vdGhlciB0aHJlYWQgdGhhdCB0aGlua3MKLQkgKiB0aGUgcGFnZSBpcyBub3QgdXAtdG8tZGF0ZSBhbmQgaGVuY2UgcmVhZHMgaXQgYWdhaW4uCi0JICoKLQkgKiBUaGUgcmVzdWx0IGlzIHRoYXQgdGhlIGZpcnN0IG1vZGlmY2F0aW9uIHRvIHRoZSBwYWdlIGlzIGxvc3QuCi0JICogVGhpcyBzb3J0IG9mIEFHRi9BR0kgcmVhZGluZyByYWNlIGNhbiBoYXBwZW4gd2hlbiB1bmxpbmtpbmcgaW5vZGVzCi0JICogdGhhdCByZXF1aXJlIHRydW5jYXRpb24gYW5kIHJlc3VsdHMgaW4gdGhlIEFHSSB1bmxpbmtlZCBsaXN0Ci0JICogbW9kaWZpY2F0aW9ucyBiZWluZyBsb3N0LgotCSAqLwotCV9YQkZfUEFHRV9MT0NLRUQgPSAoMSA8PCAyMiksCisvKgorICogU3BlY2lhbCBmbGFnIGZvciBzdXBwb3J0aW5nIG1ldGFkYXRhIGJsb2NrcyBzbWFsbGVyIHRoYW4gYSBGU0IuCisgKgorICogSW4gdGhpcyBjYXNlIHdlIGNhbiBoYXZlIG11bHRpcGxlIHhmc19idWZfdCBvbiBhIHNpbmdsZSBwYWdlIGFuZAorICogbmVlZCB0byBsb2NrIG91dCBjb25jdXJyZW50IHhmc19idWZfdCByZWFkZXJzIGFzIHRoZXkgb25seQorICogc2VyaWFsaXNlIGFjY2VzcyB0byB0aGUgYnVmZmVyLgorICoKKyAqIElmIHRoZSBGU0Igc2l6ZSA+PSBQQUdFX0NBQ0hFX1NJWkUgY2FzZSwgd2UgaGF2ZSBubyBzZXJpYWxpc2F0aW9uCisgKiBiZXR3ZWVuIHJlYWRzIG9mIHRoZSBwYWdlLiBIZW5jZSB3ZSBjYW4gaGF2ZSBvbmUgdGhyZWFkIHJlYWQgdGhlCisgKiBwYWdlIGFuZCBtb2RpZnkgaXQsIGJ1dCB0aGVuIHJhY2Ugd2l0aCBhbm90aGVyIHRocmVhZCB0aGF0IHRoaW5rcworICogdGhlIHBhZ2UgaXMgbm90IHVwLXRvLWRhdGUgYW5kIGhlbmNlIHJlYWRzIGl0IGFnYWluLgorICoKKyAqIFRoZSByZXN1bHQgaXMgdGhhdCB0aGUgZmlyc3QgbW9kaWZjYXRpb24gdG8gdGhlIHBhZ2UgaXMgbG9zdC4KKyAqIFRoaXMgc29ydCBvZiBBR0YvQUdJIHJlYWRpbmcgcmFjZSBjYW4gaGFwcGVuIHdoZW4gdW5saW5raW5nIGlub2RlcworICogdGhhdCByZXF1aXJlIHRydW5jYXRpb24gYW5kIHJlc3VsdHMgaW4gdGhlIEFHSSB1bmxpbmtlZCBsaXN0CisgKiBtb2RpZmljYXRpb25zIGJlaW5nIGxvc3QuCisgKi8KKyNkZWZpbmUgX1hCRl9QQUdFX0xPQ0tFRAkoMSA8PCAyMikKIAotCS8qCi0JICogSWYgd2UgdHJ5IGEgYmFycmllciB3cml0ZSwgYnV0IGl0IGZhaWxzIHdlIGhhdmUgdG8gY29tbXVuaWNhdGUKLQkgKiB0aGlzIHRvIHRoZSB1cHBlciBsYXllcnMuICBVbmZvcnR1bmF0ZWx5IGJfZXJyb3IgZ2V0cyBvdmVyd3JpdHRlbgotCSAqIHdoZW4gdGhlIGJ1ZmZlciBpcyByZS1pc3N1ZWQgc28gd2UgaGF2ZSB0byBhZGQgYW5vdGhlciBmbGFnIHRvCi0JICoga2VlcCB0aGlzIGluZm9ybWF0aW9uLgotCSAqLwotCV9YRlNfQkFSUklFUl9GQUlMRUQgPSAoMSA8PCAyMyksCi19IHhmc19idWZfZmxhZ3NfdDsKKy8qCisgKiBJZiB3ZSB0cnkgYSBiYXJyaWVyIHdyaXRlLCBidXQgaXQgZmFpbHMgd2UgaGF2ZSB0byBjb21tdW5pY2F0ZQorICogdGhpcyB0byB0aGUgdXBwZXIgbGF5ZXJzLiAgVW5mb3J0dW5hdGVseSBiX2Vycm9yIGdldHMgb3ZlcndyaXR0ZW4KKyAqIHdoZW4gdGhlIGJ1ZmZlciBpcyByZS1pc3N1ZWQgc28gd2UgaGF2ZSB0byBhZGQgYW5vdGhlciBmbGFnIHRvCisgKiBrZWVwIHRoaXMgaW5mb3JtYXRpb24uCisgKi8KKyNkZWZpbmUgX1hGU19CQVJSSUVSX0ZBSUxFRAkoMSA8PCAyMykKKwordHlwZWRlZiB1bnNpZ25lZCBpbnQgeGZzX2J1Zl9mbGFnc190OwogCiAjZGVmaW5lIFhGU19CVUZfRkxBR1MgXAogCXsgWEJGX1JFQUQsCQkiUkVBRCIgfSwgXApAQCAtMTg3LDcgKzE4Nyw2IEBACiAJYXRvbWljX3QJCWJfaW9fcmVtYWluaW5nOwkvKiAjb3V0c3RhbmRpbmcgSS9PIHJlcXVlc3RzICovCiAJeGZzX2J1Zl9pb2RvbmVfdAliX2lvZG9uZTsJLyogSS9PIGNvbXBsZXRpb24gZnVuY3Rpb24gKi8KIAl4ZnNfYnVmX3JlbHNlX3QJCWJfcmVsc2U7CS8qIHJlbGVhc2luZyBmdW5jdGlvbiAqLwotCXhmc19idWZfYmRzdHJhdF90CWJfc3RyYXQ7CS8qIHByZS13cml0ZSBmdW5jdGlvbiAqLwogCXN0cnVjdCBjb21wbGV0aW9uCWJfaW93YWl0OwkvKiBxdWV1ZSBmb3IgSS9PIHdhaXRlcnMgKi8KIAl2b2lkCQkJKmJfZnNwcml2OwogCXZvaWQJCQkqYl9mc3ByaXYyOwpAQCAtMjQ1LDExICsyNDQsNiBAQAogZXh0ZXJuIHZvaWQgeGZzX2J1Zl9pb21vdmUoeGZzX2J1Zl90ICosIHNpemVfdCwgc2l6ZV90LCB2b2lkICosCiAJCQkJeGZzX2J1Zl9yd190KTsKIAotc3RhdGljIGlubGluZSBpbnQgeGZzX2J1Zl9pb3N0cmF0ZWd5KHhmc19idWZfdCAqYnApCi17Ci0JcmV0dXJuIGJwLT5iX3N0cmF0ID8gYnAtPmJfc3RyYXQoYnApIDogeGZzX2J1Zl9pb3JlcXVlc3QoYnApOwotfQotCiBzdGF0aWMgaW5saW5lIGludCB4ZnNfYnVmX2dldGVycm9yKHhmc19idWZfdCAqYnApCiB7CiAJcmV0dXJuIGJwID8gYnAtPmJfZXJyb3IgOiBFTk9NRU07CkBAIC0yNTgsMTEgKzI1Miw2IEBACiAvKiBCdWZmZXIgVXRpbGl0eSBSb3V0aW5lcyAqLwogZXh0ZXJuIHhmc19jYWRkcl90IHhmc19idWZfb2Zmc2V0KHhmc19idWZfdCAqLCBzaXplX3QpOwogCi0vKiBQaW5uaW5nIEJ1ZmZlciBTdG9yYWdlIGluIE1lbW9yeSAqLwotZXh0ZXJuIHZvaWQgeGZzX2J1Zl9waW4oeGZzX2J1Zl90ICopOwotZXh0ZXJuIHZvaWQgeGZzX2J1Zl91bnBpbih4ZnNfYnVmX3QgKik7Ci1leHRlcm4gaW50IHhmc19idWZfaXNwaW4oeGZzX2J1Zl90ICopOwotCiAvKiBEZWxheWVkIFdyaXRlIEJ1ZmZlciBSb3V0aW5lcyAqLwogZXh0ZXJuIHZvaWQgeGZzX2J1Zl9kZWx3cmlfZGVxdWV1ZSh4ZnNfYnVmX3QgKik7CiBleHRlcm4gdm9pZCB4ZnNfYnVmX2RlbHdyaV9wcm9tb3RlKHhmc19idWZfdCAqKTsKQEAgLTMyNiw4ICszMTUsNiBAQAogI2RlZmluZSBYRlNfQlVGX0lPRE9ORV9GVU5DKGJwKQkJCSgoYnApLT5iX2lvZG9uZSkKICNkZWZpbmUgWEZTX0JVRl9TRVRfSU9ET05FX0ZVTkMoYnAsIGZ1bmMpCSgoYnApLT5iX2lvZG9uZSA9IChmdW5jKSkKICNkZWZpbmUgWEZTX0JVRl9DTFJfSU9ET05FX0ZVTkMoYnApCQkoKGJwKS0+Yl9pb2RvbmUgPSBOVUxMKQotI2RlZmluZSBYRlNfQlVGX1NFVF9CRFNUUkFUX0ZVTkMoYnAsIGZ1bmMpCSgoYnApLT5iX3N0cmF0ID0gKGZ1bmMpKQotI2RlZmluZSBYRlNfQlVGX0NMUl9CRFNUUkFUX0ZVTkMoYnApCQkoKGJwKS0+Yl9zdHJhdCA9IE5VTEwpCiAKICNkZWZpbmUgWEZTX0JVRl9GU1BSSVZBVEUoYnAsIHR5cGUpCQkoKHR5cGUpKGJwKS0+Yl9mc3ByaXYpCiAjZGVmaW5lIFhGU19CVUZfU0VUX0ZTUFJJVkFURShicCwgdmFsKQkJKChicCktPmJfZnNwcml2ID0gKHZvaWQqKSh2YWwpKQpAQCAtMzUxLDcgKzMzOCw3IEBACiAjZGVmaW5lIFhGU19CVUZfU0VUX1ZUWVBFKGJwLCB0eXBlKQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBYRlNfQlVGX1NFVF9SRUYoYnAsIHJlZikJCWRvIHsgfSB3aGlsZSAoMCkKIAotI2RlZmluZSBYRlNfQlVGX0lTUElOTkVEKGJwKQl4ZnNfYnVmX2lzcGluKGJwKQorI2RlZmluZSBYRlNfQlVGX0lTUElOTkVEKGJwKQlhdG9taWNfcmVhZCgmKChicCktPmJfcGluX2NvdW50KSkKIAogI2RlZmluZSBYRlNfQlVGX1ZBTFVTRU1BKGJwKQl4ZnNfYnVmX2xvY2tfdmFsdWUoYnApCiAjZGVmaW5lIFhGU19CVUZfQ1BTRU1BKGJwKQkoeGZzX2J1Zl9jb25kX2xvY2soYnApID09IDApCkBAIC0zNzAsOCArMzU3LDYgQEAKIAl4ZnNfYnVmX3JlbGUoYnApOwogfQogCi0jZGVmaW5lIHhmc19icGluKGJwKQkJeGZzX2J1Zl9waW4oYnApCi0jZGVmaW5lIHhmc19idW5waW4oYnApCQl4ZnNfYnVmX3VucGluKGJwKQogI2RlZmluZSB4ZnNfYmlvZG9uZShicCkJCXhmc19idWZfaW9lbmQoYnAsIDApCiAKICNkZWZpbmUgeGZzX2Jpb21vdmUoYnAsIG9mZiwgbGVuLCBkYXRhLCBydykgXApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZG1hcGlfcHJpdi5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZG1hcGlfcHJpdi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGIwYjE2Li4wMDAwMDAwCi0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2RtYXBpX3ByaXYuaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCi0gKiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3b3VsZCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIEluYy4sICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0jaWZuZGVmIF9fWEZTX0RNQVBJX1BSSVZfSF9fCi0jZGVmaW5lIF9fWEZTX0RNQVBJX1BSSVZfSF9fCi0KLS8qCi0gKglCYXNlZCBvbiBJT19JU0RJUkVDVCwgZGVjaWRlIHdoaWNoIGlfIGZsYWcgaXMgc2V0LgotICovCi0jZGVmaW5lIERNX1NFTV9GTEFHX1JEKGlvZmxhZ3MpICgoKGlvZmxhZ3MpICYgSU9fSVNESVJFQ1QpID8gXAotCQkJICAgICAgRE1fRkxBR1NfSU1VWCA6IDApCi0jZGVmaW5lIERNX1NFTV9GTEFHX1dSCShETV9GTEFHU19JQUxMT0NTRU1fV1IgfCBETV9GTEFHU19JTVVYKQotCi0jZW5kaWYgLypfX1hGU19ETUFQSV9QUklWX0hfXyovCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19leHBvcnQuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2V4cG9ydC5jCmluZGV4IGU3ODM5ZWUuLjM3NjRkNzQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2V4cG9ydC5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2V4cG9ydC5jCkBAIC0yMywxMyArMjMsMTMgQEAKICNpbmNsdWRlICJ4ZnNfc2IuaCIKICNpbmNsdWRlICJ4ZnNfYWcuaCIKICNpbmNsdWRlICJ4ZnNfZGlyMi5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc19leHBvcnQuaCIKICNpbmNsdWRlICJ4ZnNfdm5vZGVvcHMuaCIKICNpbmNsdWRlICJ4ZnNfYm1hcF9idHJlZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZV9pdGVtLmgiCisjaW5jbHVkZSAieGZzX3RyYWNlLmgiCiAKIC8qCiAgKiBOb3RlIHRoYXQgd2Ugb25seSBhY2NlcHQgZmlsZWlkcyB3aGljaCBhcmUgbG9uZyBlbm91Z2ggcmF0aGVyIHRoYW4gYWxsb3cKQEAgLTEzMiw4ICsxMzIsNyBAQAogCSAqIGZpbmUgYW5kIG5vdCBhbiBpbmRpY2F0aW9uIG9mIGEgY29ycnVwdGVkIGZpbGVzeXN0ZW0gYXMgY2xpZW50cyBjYW4KIAkgKiBzZW5kIGludmFsaWQgZmlsZSBoYW5kbGVzIGFuZCB3ZSBoYXZlIHRvIGhhbmRsZSBpdCBncmFjZWZ1bGx5Li4KIAkgKi8KLQllcnJvciA9IHhmc19pZ2V0KG1wLCBOVUxMLCBpbm8sIFhGU19JR0VUX1VOVFJVU1RFRCwKLQkJCSBYRlNfSUxPQ0tfU0hBUkVELCAmaXApOworCWVycm9yID0geGZzX2lnZXQobXAsIE5VTEwsIGlubywgWEZTX0lHRVRfVU5UUlVTVEVELCAwLCAmaXApOwogCWlmIChlcnJvcikgewogCQkvKgogCQkgKiBFSU5WQUwgbWVhbnMgdGhlIGlub2RlIGNsdXN0ZXIgZG9lc24ndCBleGlzdCBhbnltb3JlLgpAQCAtMTQ4LDExICsxNDcsMTAgQEAKIAl9CiAKIAlpZiAoaXAtPmlfZC5kaV9nZW4gIT0gZ2VuZXJhdGlvbikgewotCQl4ZnNfaXB1dF9uZXcoaXAsIFhGU19JTE9DS19TSEFSRUQpOworCQlJUkVMRShpcCk7CiAJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwogCX0KIAotCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKIAlyZXR1cm4gVkZTX0koaXApOwogfQogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMKaW5kZXggMjU3YTU2Yi4uYmE4YWQ0MiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYwpAQCAtMjIsMjMgKzIyLDE1IEBACiAjaW5jbHVkZSAieGZzX2ludW0uaCIKICNpbmNsdWRlICJ4ZnNfc2IuaCIKICNpbmNsdWRlICJ4ZnNfYWcuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMi5oIgogI2luY2x1ZGUgInhmc190cmFucy5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc19ibWFwX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2FsbG9jX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2lhbGxvY19idHJlZS5oIgogI2luY2x1ZGUgInhmc19hbGxvYy5oIgotI2luY2x1ZGUgInhmc19idHJlZS5oIgotI2luY2x1ZGUgInhmc19hdHRyX3NmLmgiCi0jaW5jbHVkZSAieGZzX2RpcjJfc2YuaCIKICNpbmNsdWRlICJ4ZnNfZGlub2RlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlX2l0ZW0uaCIKICNpbmNsdWRlICJ4ZnNfYm1hcC5oIgogI2luY2x1ZGUgInhmc19lcnJvci5oIgotI2luY2x1ZGUgInhmc19ydy5oIgogI2luY2x1ZGUgInhmc192bm9kZW9wcy5oIgogI2luY2x1ZGUgInhmc19kYV9idHJlZS5oIgogI2luY2x1ZGUgInhmc19pb2N0bC5oIgpAQCAtMTA4LDcgKzEwMCw3IEBACiAJaW50CQkJZXJyb3IgPSAwOwogCWludAkJCWxvZ19mbHVzaGVkID0gMDsKIAotCXhmc19pdHJhY2VfZW50cnkoaXApOworCXRyYWNlX3hmc19maWxlX2ZzeW5jKGlwKTsKIAogCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKGlwLT5pX21vdW50KSkKIAkJcmV0dXJuIC1YRlNfRVJST1IoRUlPKTsKQEAgLTE2Niw4ICsxNTgsNyBAQAogCQkgKiB0cmFuc2FjdGlvbi4JIFNvIHdlIHBsYXkgaXQgc2FmZSBhbmQgZmlyZSBvZmYgdGhlCiAJCSAqIHRyYW5zYWN0aW9uIGFueXdheS4KIAkJICovCi0JCXhmc190cmFuc19pam9pbih0cCwgaXAsIFhGU19JTE9DS19FWENMKTsKLQkJeGZzX3RyYW5zX2lob2xkKHRwLCBpcCk7CisJCXhmc190cmFuc19pam9pbih0cCwgaXApOwogCQl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7CiAJCXhmc190cmFuc19zZXRfc3luYyh0cCk7CiAJCWVycm9yID0gX3hmc190cmFuc19jb21taXQodHAsIDAsICZsb2dfZmx1c2hlZCk7CkBAIC0yNzUsMjAgKzI2Niw2IEBACiAJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAl4ZnNfaWxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKIAotCWlmIChETV9FVkVOVF9FTkFCTEVEKGlwLCBETV9FVkVOVF9SRUFEKSAmJiAhKGlvZmxhZ3MgJiBJT19JTlZJUykpIHsKLQkJaW50IGRtZmxhZ3MgPSBGSUxQX0RFTEFZX0ZMQUcoZmlsZSkgfCBETV9TRU1fRkxBR19SRChpb2ZsYWdzKTsKLQkJaW50IGlvbG9jayA9IFhGU19JT0xPQ0tfU0hBUkVEOwotCi0JCXJldCA9IC1YRlNfU0VORF9EQVRBKG1wLCBETV9FVkVOVF9SRUFELCBpcCwgaW9jYi0+a2lfcG9zLCBzaXplLAotCQkJCQlkbWZsYWdzLCAmaW9sb2NrKTsKLQkJaWYgKHJldCkgewotCQkJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKLQkJCWlmICh1bmxpa2VseShpb2ZsYWdzICYgSU9fSVNESVJFQ1QpKQotCQkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQogCWlmICh1bmxpa2VseShpb2ZsYWdzICYgSU9fSVNESVJFQ1QpKSB7CiAJCWlmIChpbm9kZS0+aV9tYXBwaW5nLT5ucnBhZ2VzKSB7CiAJCQlyZXQgPSAteGZzX2ZsdXNoaW52YWxfcGFnZXMoaXAsCkBAIC0zMjEsNyArMjk4LDYgQEAKIAl1bnNpZ25lZCBpbnQJCWZsYWdzKQogewogCXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gWEZTX0koaW5maWxwLT5mX21hcHBpbmctPmhvc3QpOwotCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gaXAtPmlfbW91bnQ7CiAJaW50CQkJaW9mbGFncyA9IDA7CiAJc3NpemVfdAkJCXJldDsKIApAQCAtMzM1LDE4ICszMTEsNiBAQAogCiAJeGZzX2lsb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7CiAKLQlpZiAoRE1fRVZFTlRfRU5BQkxFRChpcCwgRE1fRVZFTlRfUkVBRCkgJiYgIShpb2ZsYWdzICYgSU9fSU5WSVMpKSB7Ci0JCWludCBpb2xvY2sgPSBYRlNfSU9MT0NLX1NIQVJFRDsKLQkJaW50IGVycm9yOwotCi0JCWVycm9yID0gWEZTX1NFTkRfREFUQShtcCwgRE1fRVZFTlRfUkVBRCwgaXAsICpwcG9zLCBjb3VudCwKLQkJCQkJRklMUF9ERUxBWV9GTEFHKGluZmlscCksICZpb2xvY2spOwotCQlpZiAoZXJyb3IpIHsKLQkJCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7Ci0JCQlyZXR1cm4gLWVycm9yOwotCQl9Ci0JfQotCiAJdHJhY2VfeGZzX2ZpbGVfc3BsaWNlX3JlYWQoaXAsIGNvdW50LCAqcHBvcywgaW9mbGFncyk7CiAKIAlyZXQgPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQoaW5maWxwLCBwcG9zLCBwaXBlLCBjb3VudCwgZmxhZ3MpOwpAQCAtMzY3LDcgKzMzMSw2IEBACiB7CiAJc3RydWN0IGlub2RlCQkqaW5vZGUgPSBvdXRmaWxwLT5mX21hcHBpbmctPmhvc3Q7CiAJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpbm9kZSk7Ci0Jc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0+aV9tb3VudDsKIAl4ZnNfZnNpemVfdAkJaXNpemUsIG5ld19zaXplOwogCWludAkJCWlvZmxhZ3MgPSAwOwogCXNzaXplX3QJCQlyZXQ7CkBAIC0zODIsMTggKzM0NSw2IEBACiAKIAl4ZnNfaWxvY2soaXAsIFhGU19JT0xPQ0tfRVhDTCk7CiAKLQlpZiAoRE1fRVZFTlRfRU5BQkxFRChpcCwgRE1fRVZFTlRfV1JJVEUpICYmICEoaW9mbGFncyAmIElPX0lOVklTKSkgewotCQlpbnQgaW9sb2NrID0gWEZTX0lPTE9DS19FWENMOwotCQlpbnQgZXJyb3I7Ci0KLQkJZXJyb3IgPSBYRlNfU0VORF9EQVRBKG1wLCBETV9FVkVOVF9XUklURSwgaXAsICpwcG9zLCBjb3VudCwKLQkJCQkJRklMUF9ERUxBWV9GTEFHKG91dGZpbHApLCAmaW9sb2NrKTsKLQkJaWYgKGVycm9yKSB7Ci0JCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19FWENMKTsKLQkJCXJldHVybiAtZXJyb3I7Ci0JCX0KLQl9Ci0KIAluZXdfc2l6ZSA9ICpwcG9zICsgY291bnQ7CiAKIAl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKQEAgLTQ2Myw3ICs0MTQsNyBAQAogCWxhc3RfZnNiID0gWEZTX0JfVE9fRlNCVChtcCwgaXNpemUpOwogCW5pbWFwcyA9IDE7CiAJZXJyb3IgPSB4ZnNfYm1hcGkoTlVMTCwgaXAsIGxhc3RfZnNiLCAxLCAwLCBOVUxMLCAwLCAmaW1hcCwKLQkJCSAgJm5pbWFwcywgTlVMTCwgTlVMTCk7CisJCQkgICZuaW1hcHMsIE5VTEwpOwogCWlmIChlcnJvcikgewogCQlyZXR1cm4gZXJyb3I7CiAJfQpAQCAtNTU4LDcgKzUwOSw3IEBACiAJCW5pbWFwcyA9IDE7CiAJCXplcm9fY291bnRfZnNiID0gZW5kX3plcm9fZnNiIC0gc3RhcnRfemVyb19mc2IgKyAxOwogCQllcnJvciA9IHhmc19ibWFwaShOVUxMLCBpcCwgc3RhcnRfemVyb19mc2IsIHplcm9fY291bnRfZnNiLAotCQkJCSAgMCwgTlVMTCwgMCwgJmltYXAsICZuaW1hcHMsIE5VTEwsIE5VTEwpOworCQkJCSAgMCwgTlVMTCwgMCwgJmltYXAsICZuaW1hcHMsIE5VTEwpOwogCQlpZiAoZXJyb3IpIHsKIAkJCUFTU0VSVCh4ZnNfaXNpbG9ja2VkKGlwLCBYRlNfSUxPQ0tfRVhDTHxYRlNfSU9MT0NLX0VYQ0wpKTsKIAkJCXJldHVybiBlcnJvcjsKQEAgLTYyNyw3ICs1NzgsNiBAQAogCWludAkJCWlvZmxhZ3MgPSAwOwogCXhmc19mc2l6ZV90CQlpc2l6ZSwgbmV3X3NpemU7CiAJaW50CQkJaW9sb2NrOwotCWludAkJCWV2ZW50c2VudCA9IDA7CiAJc2l6ZV90CQkJb2NvdW50ID0gMCwgY291bnQ7CiAJaW50CQkJbmVlZF9pX211dGV4OwogCkBAIC02NzMsMzMgKzYyMyw2IEBACiAJCWdvdG8gb3V0X3VubG9ja19tdXRleDsKIAl9CiAKLQlpZiAoKERNX0VWRU5UX0VOQUJMRUQoaXAsIERNX0VWRU5UX1dSSVRFKSAmJgotCSAgICAhKGlvZmxhZ3MgJiBJT19JTlZJUykgJiYgIWV2ZW50c2VudCkpIHsKLQkJaW50CQlkbWZsYWdzID0gRklMUF9ERUxBWV9GTEFHKGZpbGUpOwotCi0JCWlmIChuZWVkX2lfbXV0ZXgpCi0JCQlkbWZsYWdzIHw9IERNX0ZMQUdTX0lNVVg7Ci0KLQkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQkJZXJyb3IgPSBYRlNfU0VORF9EQVRBKGlwLT5pX21vdW50LCBETV9FVkVOVF9XUklURSwgaXAsCi0JCQkJICAgICAgcG9zLCBjb3VudCwgZG1mbGFncywgJmlvbG9jayk7Ci0JCWlmIChlcnJvcikgewotCQkJZ290byBvdXRfdW5sb2NrX2ludGVybmFsOwotCQl9Ci0JCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCQlldmVudHNlbnQgPSAxOwotCi0JCS8qCi0JCSAqIFRoZSBpb2xvY2sgd2FzIGRyb3BwZWQgYW5kIHJlYWNxdWlyZWQgaW4gWEZTX1NFTkRfREFUQQotCQkgKiBzbyB3ZSBoYXZlIHRvIHJlY2hlY2sgdGhlIHNpemUgd2hlbiBhcHBlbmRpbmcuCi0JCSAqIFdlIHdpbGwgb25seSAiZ290byBzdGFydDsiIG9uY2UsIHNpbmNlIGhhdmluZyBzZW50IHRoZQotCQkgKiBldmVudCBwcmV2ZW50cyBhbm90aGVyIGNhbGwgdG8gWEZTX1NFTkRfREFUQSwgd2hpY2ggaXMKLQkJICogd2hhdCBhbGxvd3MgdGhlIHNpemUgdG8gY2hhbmdlIGluIHRoZSBmaXJzdCBwbGFjZS4KLQkJICovCi0JCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQVBQRU5EKSAmJiBwb3MgIT0gaXAtPmlfc2l6ZSkKLQkJCWdvdG8gc3RhcnQ7Ci0JfQotCiAJaWYgKGlvZmxhZ3MgJiBJT19JU0RJUkVDVCkgewogCQl4ZnNfYnVmdGFyZ190CSp0YXJnZXQgPQogCQkJWEZTX0lTX1JFQUxUSU1FX0lOT0RFKGlwKSA/CkBAIC04MzAsMjIgKzc1Myw2IEBACiAJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiAJfQogCi0JaWYgKHJldCA9PSAtRU5PU1BDICYmCi0JICAgIERNX0VWRU5UX0VOQUJMRUQoaXAsIERNX0VWRU5UX05PU1BBQ0UpICYmICEoaW9mbGFncyAmIElPX0lOVklTKSkgewotCQl4ZnNfaXVubG9jayhpcCwgaW9sb2NrKTsKLQkJaWYgKG5lZWRfaV9tdXRleCkKLQkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCQllcnJvciA9IFhGU19TRU5EX05BTUVTUChpcC0+aV9tb3VudCwgRE1fRVZFTlRfTk9TUEFDRSwgaXAsCi0JCQkJRE1fUklHSFRfTlVMTCwgaXAsIERNX1JJR0hUX05VTEwsIE5VTEwsIE5VTEwsCi0JCQkJMCwgMCwgMCk7IC8qIERlbGF5IGZsYWcgaW50ZW50aW9uYWxseSAgdW51c2VkICovCi0JCWlmIChuZWVkX2lfbXV0ZXgpCi0JCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JCXhmc19pbG9jayhpcCwgaW9sb2NrKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBvdXRfdW5sb2NrX2ludGVybmFsOwotCQlnb3RvIHN0YXJ0OwotCX0KLQogCWVycm9yID0gLXJldDsKIAlpZiAocmV0IDw9IDApCiAJCWdvdG8gb3V0X3VubG9ja19pbnRlcm5hbDsKQEAgLTEwMTQsOSArOTIxLDYgQEAKIAkub3BlbgkJPSB4ZnNfZmlsZV9vcGVuLAogCS5yZWxlYXNlCT0geGZzX2ZpbGVfcmVsZWFzZSwKIAkuZnN5bmMJCT0geGZzX2ZpbGVfZnN5bmMsCi0jaWZkZWYgSEFWRV9GT1BfT1BFTl9FWEVDCi0JLm9wZW5fZXhlYwk9IHhmc19maWxlX29wZW5fZXhlYywKLSNlbmRpZgogfTsKIAogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB4ZnNfZGlyX2ZpbGVfb3BlcmF0aW9ucyA9IHsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZzX3N1YnIuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZzX3N1YnIuYwppbmRleCBiNjkxOGQ3Li4xZjI3OWIwIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19mc19zdWJyLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZnNfc3Vici5jCkBAIC0yMSwxMCArMjEsNiBAQAogI2luY2x1ZGUgInhmc19pbm9kZS5oIgogI2luY2x1ZGUgInhmc190cmFjZS5oIgogCi1pbnQgIGZzX25vZXJyKHZvaWQpIHsgcmV0dXJuIDA7IH0KLWludCAgZnNfbm9zeXModm9pZCkgeyByZXR1cm4gRU5PU1lTOyB9Ci12b2lkIGZzX25vdmFsKHZvaWQpIHsgcmV0dXJuOyB9Ci0KIC8qCiAgKiBub3RlOiBhbGwgZmlsZW1hcCBmdW5jdGlvbnMgcmV0dXJuIG5lZ2F0aXZlIGVycm9yIGNvZGVzLiBUaGVzZQogICogbmVlZCB0byBiZSBpbnZlcnRlZCBiZWZvcmUgcmV0dXJuaW5nIHRvIHRoZSB4ZnMgY29yZSBmdW5jdGlvbnMuCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19mc19zdWJyLmggYi9mcy94ZnMvbGludXgtMi42L3hmc19mc19zdWJyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyYmIxOWIuLjAwMDAwMDAKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZnNfc3Vici5oCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwMCwyMDAyLDIwMDUgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd291bGQgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiBJbmMuLCAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotI2lmbmRlZglfX1hGU19GU19TVUJSX0hfXwotI2RlZmluZSBfX1hGU19GU19TVUJSX0hfXwotCi1leHRlcm4gaW50ICBmc19ub2Vycih2b2lkKTsKLWV4dGVybiBpbnQgIGZzX25vc3lzKHZvaWQpOwotZXh0ZXJuIHZvaWQgZnNfbm92YWwodm9pZCk7Ci0KLSNlbmRpZgkvKiBfX1hGU19GU19TVUJSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMKaW5kZXggZTU5YTgxMC4uMjM3ZjVmZiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jCkBAIC0yMywyNCArMjMsMTUgQEAKICNpbmNsdWRlICJ4ZnNfdHJhbnMuaCIKICNpbmNsdWRlICJ4ZnNfc2IuaCIKICNpbmNsdWRlICJ4ZnNfYWcuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMi5oIgogI2luY2x1ZGUgInhmc19hbGxvYy5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc19ibWFwX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2FsbG9jX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2lhbGxvY19idHJlZS5oIgotI2luY2x1ZGUgInhmc19hdHRyX3NmLmgiCi0jaW5jbHVkZSAieGZzX2RpcjJfc2YuaCIKICNpbmNsdWRlICJ4ZnNfZGlub2RlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlLmgiCiAjaW5jbHVkZSAieGZzX2lvY3RsLmgiCi0jaW5jbHVkZSAieGZzX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2lhbGxvYy5oIgogI2luY2x1ZGUgInhmc19ydGFsbG9jLmgiCiAjaW5jbHVkZSAieGZzX2l0YWJsZS5oIgogI2luY2x1ZGUgInhmc19lcnJvci5oIgotI2luY2x1ZGUgInhmc19ydy5oIgogI2luY2x1ZGUgInhmc19hdHRyLmgiCiAjaW5jbHVkZSAieGZzX2JtYXAuaCIKICNpbmNsdWRlICJ4ZnNfYnVmX2l0ZW0uaCIKQEAgLTkwOCw3ICs4OTksNyBAQAogCXN0cnVjdCB4ZnNfZHF1b3QJKm9sZGRxdW90ID0gTlVMTDsKIAlpbnQJCQljb2RlOwogCi0JeGZzX2l0cmFjZV9lbnRyeShpcCk7CisJdHJhY2VfeGZzX2lvY3RsX3NldGF0dHIoaXApOwogCiAJaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkKIAkJcmV0dXJuIFhGU19FUlJPUihFUk9GUyk7CkBAIC0xMDQzLDggKzEwMzQsNyBAQAogCQl9CiAJfQogCi0JeGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgbG9ja19mbGFncyk7Ci0JeGZzX3RyYW5zX2lob2xkKHRwLCBpcCk7CisJeGZzX3RyYW5zX2lqb2luKHRwLCBpcCk7CiAKIAkvKgogCSAqIENoYW5nZSBmaWxlIG93bmVyc2hpcC4gIE11c3QgYmUgdGhlIG93bmVyIG9yIHByaXZpbGVnZWQuCkBAIC0xMTE2LDE2ICsxMTA2LDcgQEAKIAl4ZnNfcW1fZHFyZWxlKHVkcXApOwogCXhmc19xbV9kcXJlbGUoZ2RxcCk7CiAKLQlpZiAoY29kZSkKLQkJcmV0dXJuIGNvZGU7Ci0KLQlpZiAoRE1fRVZFTlRfRU5BQkxFRChpcCwgRE1fRVZFTlRfQVRUUklCVVRFKSkgewotCQlYRlNfU0VORF9OQU1FU1AobXAsIERNX0VWRU5UX0FUVFJJQlVURSwgaXAsIERNX1JJR0hUX05VTEwsCi0JCQkJTlVMTCwgRE1fUklHSFRfTlVMTCwgTlVMTCwgTlVMTCwgMCwgMCwKLQkJCQkobWFzayAmIEZTWF9OT05CTE9DSykgPyBETV9GTEFHU19OREVMQVkgOiAwKTsKLQl9Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gY29kZTsKIAogIGVycm9yX3JldHVybjoKIAl4ZnNfcW1fZHFyZWxlKHVkcXApOwpAQCAtMTMwMSw3ICsxMjgyLDcgQEAKIAlpZiAoZmlscC0+Zl9tb2RlICYgRk1PREVfTk9DTVRJTUUpCiAJCWlvZmxhZ3MgfD0gSU9fSU5WSVM7CiAKLQl4ZnNfaXRyYWNlX2VudHJ5KGlwKTsKKwl0cmFjZV94ZnNfZmlsZV9pb2N0bChpcCk7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgWEZTX0lPQ19BTExPQ1NQOgpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwzMi5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwzMi5jCmluZGV4IDUyZWQ0OWUuLjZjODNmN2YgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsMzIuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bDMyLmMKQEAgLTI4LDEyICsyOCw4IEBACiAjaW5jbHVkZSAieGZzX3RyYW5zLmgiCiAjaW5jbHVkZSAieGZzX3NiLmgiCiAjaW5jbHVkZSAieGZzX2FnLmgiCi0jaW5jbHVkZSAieGZzX2RpcjIuaCIKLSNpbmNsdWRlICJ4ZnNfZG1hcGkuaCIKICNpbmNsdWRlICJ4ZnNfbW91bnQuaCIKICNpbmNsdWRlICJ4ZnNfYm1hcF9idHJlZS5oIgotI2luY2x1ZGUgInhmc19hdHRyX3NmLmgiCi0jaW5jbHVkZSAieGZzX2RpcjJfc2YuaCIKICNpbmNsdWRlICJ4ZnNfdm5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfZGlub2RlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlLmgiCkBAIC01NDQsNyArNTQwLDcgQEAKIAlpZiAoZmlscC0+Zl9tb2RlICYgRk1PREVfTk9DTVRJTUUpCiAJCWlvZmxhZ3MgfD0gSU9fSU5WSVM7CiAKLQl4ZnNfaXRyYWNlX2VudHJ5KGlwKTsKKwl0cmFjZV94ZnNfZmlsZV9jb21wYXRfaW9jdGwoaXApOwogCiAJc3dpdGNoIChjbWQpIHsKIAkvKiBObyBzaXplIG9yIGFsaWdubWVudCBpc3N1ZXMgb24gYW55IGFyY2ggKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYwppbmRleCA0NGYwYjJkLi41MzZiODFlIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCkBAIC0yNCwyMSArMjQsMTMgQEAKICNpbmNsdWRlICJ4ZnNfdHJhbnMuaCIKICNpbmNsdWRlICJ4ZnNfc2IuaCIKICNpbmNsdWRlICJ4ZnNfYWcuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMi5oIgogI2luY2x1ZGUgInhmc19hbGxvYy5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19xdW90YS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc19ibWFwX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2FsbG9jX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2lhbGxvY19idHJlZS5oIgotI2luY2x1ZGUgInhmc19kaXIyX3NmLmgiCi0jaW5jbHVkZSAieGZzX2F0dHJfc2YuaCIKICNpbmNsdWRlICJ4ZnNfZGlub2RlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlLmgiCiAjaW5jbHVkZSAieGZzX2JtYXAuaCIKLSNpbmNsdWRlICJ4ZnNfYnRyZWUuaCIKLSNpbmNsdWRlICJ4ZnNfaWFsbG9jLmgiCiAjaW5jbHVkZSAieGZzX3J0YWxsb2MuaCIKICNpbmNsdWRlICJ4ZnNfZXJyb3IuaCIKICNpbmNsdWRlICJ4ZnNfaXRhYmxlLmgiCkBAIC00OTYsNyArNDg4LDcgQEAKIAlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGlwLT5pX21vdW50OwogCi0JeGZzX2l0cmFjZV9lbnRyeShpcCk7CisJdHJhY2VfeGZzX2dldGF0dHIoaXApOwogCiAJaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKQogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbGludXguaAppbmRleCBmYWNmYjMyLi45OThhOWQ3IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xpbnV4LmgKQEAgLTg3LDcgKzg3LDYgQEAKICNpbmNsdWRlIDx4ZnNfYW9wcy5oPgogI2luY2x1ZGUgPHhmc19zdXBlci5oPgogI2luY2x1ZGUgPHhmc19nbG9iYWxzLmg+Ci0jaW5jbHVkZSA8eGZzX2ZzX3N1YnIuaD4KICNpbmNsdWRlIDx4ZnNfYnVmLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19xdW90YW9wcy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfcXVvdGFvcHMuYwppbmRleCAwNjdjYWZiLi5iZmQ1YWM5IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19xdW90YW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3F1b3Rhb3BzLmMKQEAgLTE2LDcgKzE2LDYgQEAKICAqIEluYy4sICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAjaW5jbHVkZSAieGZzLmgiCi0jaW5jbHVkZSAieGZzX2RtYXBpLmgiCiAjaW5jbHVkZSAieGZzX3NiLmgiCiAjaW5jbHVkZSAieGZzX2ludW0uaCIKICNpbmNsdWRlICJ4ZnNfbG9nLmgiCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYwppbmRleCBmMmQxNzE4Li43NThkZjk0NiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCkBAIC0yNSwxNCArMjUsMTEgQEAKICNpbmNsdWRlICJ4ZnNfYWcuaCIKICNpbmNsdWRlICJ4ZnNfZGlyMi5oIgogI2luY2x1ZGUgInhmc19hbGxvYy5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19xdW90YS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc19ibWFwX2J0cmVlLmgiCiAjaW5jbHVkZSAieGZzX2FsbG9jX2J0cmVlLmgiCiAjaW5jbHVkZSAieGZzX2lhbGxvY19idHJlZS5oIgotI2luY2x1ZGUgInhmc19kaXIyX3NmLmgiCi0jaW5jbHVkZSAieGZzX2F0dHJfc2YuaCIKICNpbmNsdWRlICJ4ZnNfZGlub2RlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlLmgiCiAjaW5jbHVkZSAieGZzX2J0cmVlLmgiCkBAIC00Myw3ICs0MCw2IEBACiAjaW5jbHVkZSAieGZzX2Vycm9yLmgiCiAjaW5jbHVkZSAieGZzX2l0YWJsZS5oIgogI2luY2x1ZGUgInhmc19mc29wcy5oIgotI2luY2x1ZGUgInhmc19ydy5oIgogI2luY2x1ZGUgInhmc19hdHRyLmgiCiAjaW5jbHVkZSAieGZzX2J1Zl9pdGVtLmgiCiAjaW5jbHVkZSAieGZzX3V0aWxzLmgiCkBAIC05NCw3ICs5MCw2IEBACiAjZGVmaW5lIE1OVE9QVF9CQVJSSUVSCSJiYXJyaWVyIgkvKiB1c2Ugd3JpdGVyIGJhcnJpZXJzIGZvciBsb2cgd3JpdGUgYW5kCiAJCQkJCSAqIHVud3JpdHRlbiBleHRlbnQgY29udmVyc2lvbiAqLwogI2RlZmluZSBNTlRPUFRfTk9CQVJSSUVSICJub2JhcnJpZXIiCS8qIC4uIGRpc2FibGUgKi8KLSNkZWZpbmUgTU5UT1BUX09TWU5DSVNPU1lOQyAib3N5bmNpc29zeW5jIiAvKiBvX3N5bmMgaXMgUkVBTExZIG9fc3luYyAqLwogI2RlZmluZSBNTlRPUFRfNjRCSVRJTk9ERSAgICJpbm9kZTY0IgkvKiBpbm9kZXMgY2FuIGJlIGFsbG9jYXRlZCBhbnl3aGVyZSAqLwogI2RlZmluZSBNTlRPUFRfSUtFRVAJImlrZWVwIgkJLyogZG8gbm90IGZyZWUgZW1wdHkgaW5vZGUgY2x1c3RlcnMgKi8KICNkZWZpbmUgTU5UT1BUX05PSUtFRVAJIm5vaWtlZXAiCS8qIGZyZWUgZW1wdHkgaW5vZGUgY2x1c3RlcnMgKi8KQEAgLTExNiw5ICsxMTEsNiBAQAogI2RlZmluZSBNTlRPUFRfR1FVT1RBTk9FTkYgImdxbm9lbmZvcmNlIi8qIGdyb3VwIHF1b3RhIGxpbWl0IGVuZm9yY2VtZW50ICovCiAjZGVmaW5lIE1OVE9QVF9QUVVPVEFOT0VORiAicHFub2VuZm9yY2UiLyogcHJvamVjdCBxdW90YSBsaW1pdCBlbmZvcmNlbWVudCAqLwogI2RlZmluZSBNTlRPUFRfUVVPVEFOT0VORiAgInFub2VuZm9yY2UiCS8qIHNhbWUgYXMgdXFub2VuZm9yY2UgKi8KLSNkZWZpbmUgTU5UT1BUX0RNQVBJCSJkbWFwaSIJCS8qIERNSSBlbmFibGVkIChETUFQSSAvIFhEU00pICovCi0jZGVmaW5lIE1OVE9QVF9YRFNNCSJ4ZHNtIgkJLyogRE1JIGVuYWJsZWQgKERNQVBJIC8gWERTTSkgKi8KLSNkZWZpbmUgTU5UT1BUX0RNSQkiZG1pIgkJLyogRE1JIGVuYWJsZWQgKERNQVBJIC8gWERTTSkgKi8KICNkZWZpbmUgTU5UT1BUX0RFTEFZTE9HICAgImRlbGF5bG9nIgkvKiBEZWxheWVkIGxvZ2luZyBlbmFibGVkICovCiAjZGVmaW5lIE1OVE9QVF9OT0RFTEFZTE9HICJub2RlbGF5bG9nIgkvKiBEZWxheWVkIGxvZ2luZyBkaXNhYmxlZCAqLwogCkBAIC0xNzIsMTUgKzE2NCwxMyBAQAogU1RBVElDIGludAogeGZzX3BhcnNlYXJncygKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCwKLQljaGFyCQkJKm9wdGlvbnMsCi0JY2hhcgkJCSoqbXRwdCkKKwljaGFyCQkJKm9wdGlvbnMpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrCSpzYiA9IG1wLT5tX3N1cGVyOwogCWNoYXIJCQkqdGhpc19jaGFyLCAqdmFsdWUsICplb3Y7CiAJaW50CQkJZHN1bml0ID0gMDsKIAlpbnQJCQlkc3dpZHRoID0gMDsKIAlpbnQJCQlpb3NpemUgPSAwOwotCWludAkJCWRtYXBpX2ltcGxpZXNfaWtlZXAgPSAxOwogCV9fdWludDhfdAkJaW9zaXplbG9nID0gMDsKIAogCS8qCkBAIC0yNDMsMTUgKzIzMywxMCBAQAogCQkJaWYgKCFtcC0+bV9sb2duYW1lKQogCQkJCXJldHVybiBFTk9NRU07CiAJCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF9NVFBUKSkgewotCQkJaWYgKCF2YWx1ZSB8fCAhKnZhbHVlKSB7Ci0JCQkJY21uX2VycihDRV9XQVJOLAotCQkJCQkiWEZTOiAlcyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiLAotCQkJCQl0aGlzX2NoYXIpOwotCQkJCXJldHVybiBFSU5WQUw7Ci0JCQl9Ci0JCQkqbXRwdCA9IGtzdHJuZHVwKHZhbHVlLCBNQVhOQU1FTEVOLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghKm10cHQpCi0JCQkJcmV0dXJuIEVOT01FTTsKKwkJCWNtbl9lcnIoQ0VfV0FSTiwKKwkJCQkiWEZTOiAlcyBvcHRpb24gbm90IGFsbG93ZWQgb24gdGhpcyBzeXN0ZW0iLAorCQkJCXRoaXNfY2hhcik7CisJCQlyZXR1cm4gRUlOVkFMOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAodGhpc19jaGFyLCBNTlRPUFRfUlRERVYpKSB7CiAJCQlpZiAoIXZhbHVlIHx8ICEqdmFsdWUpIHsKIAkJCQljbW5fZXJyKENFX1dBUk4sCkBAIC0yODgsOCArMjczLDYgQEAKIAkJCW1wLT5tX2ZsYWdzICY9IH5YRlNfTU9VTlRfR1JQSUQ7CiAJCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF9XU1lOQykpIHsKIAkJCW1wLT5tX2ZsYWdzIHw9IFhGU19NT1VOVF9XU1lOQzsKLQkJfSBlbHNlIGlmICghc3RyY21wKHRoaXNfY2hhciwgTU5UT1BUX09TWU5DSVNPU1lOQykpIHsKLQkJCW1wLT5tX2ZsYWdzIHw9IFhGU19NT1VOVF9PU1lOQ0lTT1NZTkM7CiAJCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF9OT1JFQ09WRVJZKSkgewogCQkJbXAtPm1fZmxhZ3MgfD0gWEZTX01PVU5UX05PUkVDT1ZFUlk7CiAJCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF9OT0FMSUdOKSkgewpAQCAtMzI5LDcgKzMxMiw2IEBACiAJCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF9JS0VFUCkpIHsKIAkJCW1wLT5tX2ZsYWdzIHw9IFhGU19NT1VOVF9JS0VFUDsKIAkJfSBlbHNlIGlmICghc3RyY21wKHRoaXNfY2hhciwgTU5UT1BUX05PSUtFRVApKSB7Ci0JCQlkbWFwaV9pbXBsaWVzX2lrZWVwID0gMDsKIAkJCW1wLT5tX2ZsYWdzICY9IH5YRlNfTU9VTlRfSUtFRVA7CiAJCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF9MQVJHRUlPKSkgewogCQkJbXAtPm1fZmxhZ3MgJj0gflhGU19NT1VOVF9DT01QQVRfSU9TSVpFOwpAQCAtMzcwLDEyICszNTIsNiBAQAogCQl9IGVsc2UgaWYgKCFzdHJjbXAodGhpc19jaGFyLCBNTlRPUFRfR1FVT1RBTk9FTkYpKSB7CiAJCQltcC0+bV9xZmxhZ3MgfD0gKFhGU19HUVVPVEFfQUNDVCB8IFhGU19HUVVPVEFfQUNUSVZFKTsKIAkJCW1wLT5tX3FmbGFncyAmPSB+WEZTX09RVU9UQV9FTkZEOwotCQl9IGVsc2UgaWYgKCFzdHJjbXAodGhpc19jaGFyLCBNTlRPUFRfRE1BUEkpKSB7Ci0JCQltcC0+bV9mbGFncyB8PSBYRlNfTU9VTlRfRE1BUEk7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF9YRFNNKSkgewotCQkJbXAtPm1fZmxhZ3MgfD0gWEZTX01PVU5UX0RNQVBJOwotCQl9IGVsc2UgaWYgKCFzdHJjbXAodGhpc19jaGFyLCBNTlRPUFRfRE1JKSkgewotCQkJbXAtPm1fZmxhZ3MgfD0gWEZTX01PVU5UX0RNQVBJOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAodGhpc19jaGFyLCBNTlRPUFRfREVMQVlMT0cpKSB7CiAJCQltcC0+bV9mbGFncyB8PSBYRlNfTU9VTlRfREVMQVlMT0c7CiAJCQljbW5fZXJyKENFX1dBUk4sCkBAIC0zODcsOSArMzYzLDExIEBACiAJCQljbW5fZXJyKENFX1dBUk4sCiAJIlhGUzogaWhhc2hzaXplIG5vIGxvbmdlciB1c2VkLCBvcHRpb24gaXMgZGVwcmVjYXRlZC4iKTsKIAkJfSBlbHNlIGlmICghc3RyY21wKHRoaXNfY2hhciwgIm9zeW5jaXNkc3luYyIpKSB7Ci0JCQkvKiBuby1vcCwgdGhpcyBpcyBub3cgdGhlIGRlZmF1bHQgKi8KIAkJCWNtbl9lcnIoQ0VfV0FSTiwKLQkiWEZTOiBvc3luY2lzZHN5bmMgaXMgbm93IHRoZSBkZWZhdWx0LCBvcHRpb24gaXMgZGVwcmVjYXRlZC4iKTsKKwkiWEZTOiBvc3luY2lzZHN5bmMgaGFzIG5vIGVmZmVjdCwgb3B0aW9uIGlzIGRlcHJlY2F0ZWQuIik7CisJCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsICJvc3luY2lzb3N5bmMiKSkgeworCQkJY21uX2VycihDRV9XQVJOLAorCSJYRlM6IG9zeW5jaXNvc3luYyBoYXMgbm8gZWZmZWN0LCBvcHRpb24gaXMgZGVwcmVjYXRlZC4iKTsKIAkJfSBlbHNlIGlmICghc3RyY21wKHRoaXNfY2hhciwgImlyaXhzZ2lkIikpIHsKIAkJCWNtbl9lcnIoQ0VfV0FSTiwKIAkiWEZTOiBpcml4c2dpZCBpcyBub3cgYSBzeXNjdGwoMikgdmFyaWFibGUsIG9wdGlvbiBpcyBkZXByZWNhdGVkLiIpOwpAQCAtNDMwLDEyICs0MDgsNiBAQAogCQlyZXR1cm4gRUlOVkFMOwogCX0KIAotCWlmICgobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfRE1BUEkpICYmICghKm10cHQgfHwgKm10cHRbMF0gPT0gJ1wwJykpIHsKLQkJcHJpbnRrKCJYRlM6ICVzIG9wdGlvbiBuZWVkcyB0aGUgbW91bnQgcG9pbnQgb3B0aW9uIGFzIHdlbGxcbiIsCi0JCQlNTlRPUFRfRE1BUEkpOwotCQlyZXR1cm4gRUlOVkFMOwotCX0KLQogCWlmICgoZHN1bml0ICYmICFkc3dpZHRoKSB8fCAoIWRzdW5pdCAmJiBkc3dpZHRoKSkgewogCQljbW5fZXJyKENFX1dBUk4sCiAJCQkiWEZTOiBzdW5pdCBhbmQgc3dpZHRoIG11c3QgYmUgc3BlY2lmaWVkIHRvZ2V0aGVyIik7CkBAIC00NDksMTggKzQyMSw2IEBACiAJCXJldHVybiBFSU5WQUw7CiAJfQogCi0JLyoKLQkgKiBBcHBsaWNhdGlvbnMgdXNpbmcgRE1JIGZpbGVzeXN0ZW1zIG9mdGVuIGV4cGVjdCB0aGUKLQkgKiBpbm9kZSBnZW5lcmF0aW9uIG51bWJlciB0byBiZSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcuCi0JICogSWYgd2UgZGVsZXRlIGlub2RlIGNodW5rcyB3ZSBicmVhayB0aGlzIGFzc3VtcHRpb24sIHNvCi0JICoga2VlcCB1bnVzZWQgaW5vZGUgY2h1bmtzIG9uIGRpc2sgZm9yIERNSSBmaWxlc3lzdGVtcwotCSAqIHVudGlsIHdlIGNvbWUgdXAgd2l0aCBhIGJldHRlciBzb2x1dGlvbi4KLQkgKiBOb3RlIHRoYXQgaWYgImlrZWVwIiBvciAibm9pa2VlcCIgbW91bnQgb3B0aW9ucyBhcmUKLQkgKiBzdXBwbGllZCwgdGhlbiB0aGV5IGFyZSBob25vcmVkLgotCSAqLwotCWlmICgobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfRE1BUEkpICYmIGRtYXBpX2ltcGxpZXNfaWtlZXApCi0JCW1wLT5tX2ZsYWdzIHw9IFhGU19NT1VOVF9JS0VFUDsKLQogZG9uZToKIAlpZiAoIShtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9OT0FMSUdOKSkgewogCQkvKgpAQCAtNTM5LDEwICs0OTksOCBAQAogCQl7IFhGU19NT1VOVF9TV0FMTE9DLAkJIiwiIE1OVE9QVF9TV0FMTE9DIH0sCiAJCXsgWEZTX01PVU5UX05PVVVJRCwJCSIsIiBNTlRPUFRfTk9VVUlEIH0sCiAJCXsgWEZTX01PVU5UX05PUkVDT1ZFUlksCQkiLCIgTU5UT1BUX05PUkVDT1ZFUlkgfSwKLQkJeyBYRlNfTU9VTlRfT1NZTkNJU09TWU5DLAkiLCIgTU5UT1BUX09TWU5DSVNPU1lOQyB9LAogCQl7IFhGU19NT1VOVF9BVFRSMiwJCSIsIiBNTlRPUFRfQVRUUjIgfSwKIAkJeyBYRlNfTU9VTlRfRklMRVNUUkVBTVMsCSIsIiBNTlRPUFRfRklMRVNUUkVBTSB9LAotCQl7IFhGU19NT1VOVF9ETUFQSSwJCSIsIiBNTlRPUFRfRE1BUEkgfSwKIAkJeyBYRlNfTU9VTlRfR1JQSUQsCQkiLCIgTU5UT1BUX0dSUElEIH0sCiAJCXsgWEZTX01PVU5UX0RFTEFZTE9HLAkJIiwiIE1OVE9QVF9ERUxBWUxPRyB9LAogCQl7IDAsIE5VTEwgfQpAQCAtOTQ3LDcgKzkwNSw3IEBACiB7CiAJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpbm9kZSk7CiAKLQl4ZnNfaXRyYWNlX2VudHJ5KGlwKTsKKwl0cmFjZV94ZnNfZGVzdHJveV9pbm9kZShpcCk7CiAKIAlYRlNfU1RBVFNfSU5DKHZuX3JlY2xhaW0pOwogCkBAIC0xMDYzLDEwICsxMDIxLDggQEAKIAkgKiBhbiBpbm9kZSBpbiBhbm90aGVyIHJlY2VudCB0cmFuc2FjdGlvbi4gIFNvIHdlIHBsYXkgaXQgc2FmZSBhbmQKIAkgKiBmaXJlIG9mZiB0aGUgdHJhbnNhY3Rpb24gYW55d2F5LgogCSAqLwotCXhmc190cmFuc19pam9pbih0cCwgaXAsIFhGU19JTE9DS19FWENMKTsKLQl4ZnNfdHJhbnNfaWhvbGQodHAsIGlwKTsKKwl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwKTsKIAl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7Ci0JeGZzX3RyYW5zX3NldF9zeW5jKHRwKTsKIAllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIDApOwogCXhmc19pbG9ja19kZW1vdGUoaXAsIFhGU19JTE9DS19FWENMKTsKIApAQCAtMTA4MiwyNyArMTAzOCwxOCBAQAogCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gaXAtPmlfbW91bnQ7CiAJaW50CQkJZXJyb3IgPSBFQUdBSU47CiAKLQl4ZnNfaXRyYWNlX2VudHJ5KGlwKTsKKwl0cmFjZV94ZnNfd3JpdGVfaW5vZGUoaXApOwogCiAJaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKQogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CiAKIAlpZiAod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpIHsKIAkJLyoKLQkJICogTWFrZSBzdXJlIHRoZSBpbm9kZSBoYXMgaGl0IHN0YWJsZSBzdG9yYWdlLiAgQnkgdXNpbmcgdGhlCi0JCSAqIGxvZyBhbmQgdGhlIGZzeW5jIHRyYW5zYWN0aW9ucyB3ZSByZWR1Y2UgdGhlIElPcyB3ZSBoYXZlCi0JCSAqIHRvIGRvIGhlcmUgZnJvbSB0d28gKGxvZyBhbmQgaW5vZGUpIHRvIGp1c3QgdGhlIGxvZy4KLQkJICoKLQkJICogTm90ZTogV2Ugc3RpbGwgbmVlZCB0byBkbyBhIGRlbHdyaSB3cml0ZSBvZiB0aGUgaW5vZGUgYWZ0ZXIKLQkJICogdGhpcyB0byBmbHVzaCBpdCB0byB0aGUgYmFja2luZyBidWZmZXIgc28gdGhhdCBidWxrc3RhdAotCQkgKiB3b3JrcyBwcm9wZXJseSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHRoZSBpbm9kZSBoYXMgYmVlbgotCQkgKiB3cml0dGVuLiAgQmVjYXVzZSB3ZSBob2xkIHRoZSBpbG9jayBhdG9taWNhbGx5IG92ZXIgdGhlCi0JCSAqIHRyYW5zYWN0aW9uIGNvbW1pdCBhbmQgdGhlIGlub2RlIGZsdXNoIHdlIGFyZSBndWFyYW50ZWVkCi0JCSAqIHRoYXQgdGhlIGlub2RlIGlzIG5vdCBwaW5uZWQgd2hlbiBpdCByZXR1cm5zLiBJZiB0aGUgZmx1c2gKLQkJICogbG9jayBpcyBhbHJlYWR5IGhlbGQsIHRoZW4gdGhlIGlub2RlIGhhcyBhbHJlYWR5IGJlZW4KLQkJICogZmx1c2hlZCBvbmNlIGFuZCB3ZSBkb24ndCBuZWVkIHRvIGZsdXNoIGl0IGFnYWluLiAgSGVuY2UKLQkJICogdGhlIGNvZGUgd2lsbCBvbmx5IGZsdXNoIHRoZSBpbm9kZSBpZiBpdCBpc24ndCBhbHJlYWR5Ci0JCSAqIGJlaW5nIGZsdXNoZWQuCisJCSAqIE1ha2Ugc3VyZSB0aGUgaW5vZGUgaGFzIG1hZGUgaXQgaXQgaW50byB0aGUgbG9nLiAgSW5zdGVhZAorCQkgKiBvZiBmb3JjaW5nIGl0IGFsbCB0aGUgd2F5IHRvIHN0YWJsZSBzdG9yYWdlIHVzaW5nIGEKKwkJICogc3luY2hyb25vdXMgdHJhbnNhY3Rpb24gd2UgbGV0IHRoZSBsb2cgZm9yY2UgaW5zaWRlIHRoZQorCQkgKiAtPnN5bmNfZnMgY2FsbCBkbyB0aGF0IGZvciB0aHVzLCB3aGljaCByZWR1Y2VzIHRoZSBudW1iZXIKKwkJICogb2Ygc3luY2hyb25vdXMgbG9nIGZvY2VzIGRyYW1hdGljYWxseS4KIAkJICovCiAJCXhmc19pb2VuZF93YWl0KGlwKTsKIAkJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKQEAgLTExMTYsMjcgKzEwNjMsMjkgQEAKIAkJICogV2UgbWFrZSB0aGlzIG5vbi1ibG9ja2luZyBpZiB0aGUgaW5vZGUgaXMgY29udGVuZGVkLCByZXR1cm4KIAkJICogRUFHQUlOIHRvIGluZGljYXRlIHRvIHRoZSBjYWxsZXIgdGhhdCB0aGV5IGRpZCBub3Qgc3VjY2VlZC4KIAkJICogVGhpcyBwcmV2ZW50cyB0aGUgZmx1c2ggcGF0aCBmcm9tIGJsb2NraW5nIG9uIGlub2RlcyBpbnNpZGUKLQkJICogYW5vdGhlciBvcGVyYXRpb24gcmlnaHQgbm93LCB0aGV5IGdldCBjYXVnaHQgbGF0ZXIgYnkgeGZzX3N5bmMuCisJCSAqIGFub3RoZXIgb3BlcmF0aW9uIHJpZ2h0IG5vdywgdGhleSBnZXQgY2F1Z2h0IGxhdGVyIGJ5CisJCSAqIHhmc19zeW5jLgogCQkgKi8KIAkJaWYgKCF4ZnNfaWxvY2tfbm93YWl0KGlwLCBYRlNfSUxPQ0tfU0hBUkVEKSkKIAkJCWdvdG8gb3V0OwotCX0KIAotCWlmICh4ZnNfaXBpbmNvdW50KGlwKSB8fCAheGZzX2lmbG9ja19ub3dhaXQoaXApKQotCQlnb3RvIG91dF91bmxvY2s7CisJCWlmICh4ZnNfaXBpbmNvdW50KGlwKSB8fCAheGZzX2lmbG9ja19ub3dhaXQoaXApKQorCQkJZ290byBvdXRfdW5sb2NrOwogCi0JLyoKLQkgKiBOb3cgd2UgaGF2ZSB0aGUgZmx1c2ggbG9jayBhbmQgdGhlIGlub2RlIGlzIG5vdCBwaW5uZWQsIHdlIGNhbiBjaGVjawotCSAqIGlmIHRoZSBpbm9kZSBpcyByZWFsbHkgY2xlYW4gYXMgd2Uga25vdyB0aGF0IHRoZXJlIGFyZSBubyBwZW5kaW5nCi0JICogdHJhbnNhY3Rpb24gY29tcGxldGlvbnMsIGl0IGlzIG5vdCB3YWl0aW5nIG9uIHRoZSBkZWxheWVkIHdyaXRlCi0JICogcXVldWUgYW5kIHRoZXJlIGlzIG5vIElPIGluIHByb2dyZXNzLgotCSAqLwotCWlmICh4ZnNfaW5vZGVfY2xlYW4oaXApKSB7Ci0JCXhmc19pZnVubG9jayhpcCk7Ci0JCWVycm9yID0gMDsKLQkJZ290byBvdXRfdW5sb2NrOworCQkvKgorCQkgKiBOb3cgd2UgaGF2ZSB0aGUgZmx1c2ggbG9jayBhbmQgdGhlIGlub2RlIGlzIG5vdCBwaW5uZWQsIHdlCisJCSAqIGNhbiBjaGVjayBpZiB0aGUgaW5vZGUgaXMgcmVhbGx5IGNsZWFuIGFzIHdlIGtub3cgdGhhdAorCQkgKiB0aGVyZSBhcmUgbm8gcGVuZGluZyB0cmFuc2FjdGlvbiBjb21wbGV0aW9ucywgaXQgaXMgbm90CisJCSAqIHdhaXRpbmcgb24gdGhlIGRlbGF5ZWQgd3JpdGUgcXVldWUgYW5kIHRoZXJlIGlzIG5vIElPIGluCisJCSAqIHByb2dyZXNzLgorCQkgKi8KKwkJaWYgKHhmc19pbm9kZV9jbGVhbihpcCkpIHsKKwkJCXhmc19pZnVubG9jayhpcCk7CisJCQllcnJvciA9IDA7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKwkJZXJyb3IgPSB4ZnNfaWZsdXNoKGlwLCAwKTsKIAl9Ci0JZXJyb3IgPSB4ZnNfaWZsdXNoKGlwLCAwKTsKIAogIG91dF91bmxvY2s6CiAJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwpAQCAtMTE1Niw3ICsxMTA1LDggQEAKIHsKIAl4ZnNfaW5vZGVfdAkJKmlwID0gWEZTX0koaW5vZGUpOwogCi0JeGZzX2l0cmFjZV9lbnRyeShpcCk7CisJdHJhY2VfeGZzX2NsZWFyX2lub2RlKGlwKTsKKwogCVhGU19TVEFUU19JTkModm5fcmVsZSk7CiAJWEZTX1NUQVRTX0lOQyh2bl9yZW1vdmUpOwogCVhGU19TVEFUU19ERUModm5fYWN0aXZlKTsKQEAgLTExOTMsMjIgKzExNDMsMTMgQEAKIHsKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IFhGU19NKHNiKTsKIAorCS8qCisJICogVW5yZWdpc3RlciB0aGUgbWVtb3J5IHNocmlua2VyIGJlZm9yZSB3ZSB0ZWFyIGRvd24gdGhlIG1vdW50CisJICogc3RydWN0dXJlIHNvIHdlIGRvbid0IGhhdmUgbWVtb3J5IHJlY2xhaW0gcmFjaW5nIHdpdGggdXMgaGVyZS4KKwkgKi8KKwl4ZnNfaW5vZGVfc2hyaW5rZXJfdW5yZWdpc3RlcihtcCk7CiAJeGZzX3N5bmNkX3N0b3AobXApOwogCi0JaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7Ci0JCS8qCi0JCSAqIFhYWChoY2gpOiB0aGlzIHNob3VsZCBiZSBTWU5DX1dBSVQuCi0JCSAqCi0JCSAqIE9yIG1vcmUgbGlrZWx5IG5vdCBuZWVkZWQgYXQgYWxsIGJlY2F1c2UgdGhlIFZGUyBpcyBhbHJlYWR5Ci0JCSAqIGNhbGxpbmcgLT5zeW5jX2ZzIGFmdGVyIHNodXR0aW5nIGRvd24gYWxsIGZpbGVzdGVtCi0JCSAqIG9wZXJhdGlvbnMgYW5kIGp1c3QgYmVmb3JlIGNhbGxpbmcgLT5wdXRfc3VwZXIuCi0JCSAqLwotCQl4ZnNfc3luY19kYXRhKG1wLCAwKTsKLQkJeGZzX3N5bmNfYXR0cihtcCwgMCk7Ci0JfQotCi0JWEZTX1NFTkRfUFJFVU5NT1VOVChtcCk7Ci0KIAkvKgogCSAqIEJsb3cgYXdheSBhbnkgcmVmZXJlbmNlZCBpbm9kZSBpbiB0aGUgZmlsZXN0cmVhbXMgY2FjaGUuCiAJICogVGhpcyBjYW4gYW5kIHdpbGwgY2F1c2UgbG9nIHRyYWZmaWMgYXMgaW5vZGVzIGdvIGluYWN0aXZlCkBAIC0xMjE4LDE0ICsxMTU5LDEwIEBACiAKIAlYRlNfYmZsdXNoKG1wLT5tX2RkZXZfdGFyZ3ApOwogCi0JWEZTX1NFTkRfVU5NT1VOVChtcCk7Ci0KIAl4ZnNfdW5tb3VudGZzKG1wKTsKIAl4ZnNfZnJlZXNiKG1wKTsKLQl4ZnNfaW5vZGVfc2hyaW5rZXJfdW5yZWdpc3RlcihtcCk7CiAJeGZzX2ljc2JfZGVzdHJveV9jb3VudGVycyhtcCk7CiAJeGZzX2Nsb3NlX2RldmljZXMobXApOwotCXhmc19kbW9wc19wdXQobXApOwogCXhmc19mcmVlX2ZzbmFtZShtcCk7CiAJa2ZyZWUobXApOwogfQpAQCAtMTU0Myw3ICsxNDgwLDYgQEAKIAlzdHJ1Y3QgaW5vZGUJCSpyb290OwogCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gTlVMTDsKIAlpbnQJCQlmbGFncyA9IDAsIGVycm9yID0gRU5PTUVNOwotCWNoYXIJCQkqbXRwdCA9IE5VTEw7CiAKIAltcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB4ZnNfbW91bnQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1wKQpAQCAtMTU1OSw3ICsxNDk1LDcgQEAKIAltcC0+bV9zdXBlciA9IHNiOwogCXNiLT5zX2ZzX2luZm8gPSBtcDsKIAotCWVycm9yID0geGZzX3BhcnNlYXJncyhtcCwgKGNoYXIgKilkYXRhLCAmbXRwdCk7CisJZXJyb3IgPSB4ZnNfcGFyc2VhcmdzKG1wLCAoY2hhciAqKWRhdGEpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXRfZnJlZV9mc25hbWU7CiAKQEAgLTE1NzEsMTYgKzE1MDcsMTIgQEAKICNlbmRpZgogCXNiLT5zX29wID0gJnhmc19zdXBlcl9vcGVyYXRpb25zOwogCi0JZXJyb3IgPSB4ZnNfZG1vcHNfZ2V0KG1wKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2ZyZWVfZnNuYW1lOwotCiAJaWYgKHNpbGVudCkKIAkJZmxhZ3MgfD0gWEZTX01GU0lfUVVJRVQ7CiAKIAllcnJvciA9IHhmc19vcGVuX2RldmljZXMobXApOwogCWlmIChlcnJvcikKLQkJZ290byBvdXRfcHV0X2Rtb3BzOworCQlnb3RvIG91dF9mcmVlX2ZzbmFtZTsKIAogCWlmICh4ZnNfaWNzYl9pbml0X2NvdW50ZXJzKG1wKSkKIAkJbXAtPm1fZmxhZ3MgfD0gWEZTX01PVU5UX05PX1BFUkNQVV9TQjsKQEAgLTE2MDgsOCArMTU0MCw2IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIG91dF9maWxlc3RyZWFtX3VubW91bnQ7CiAKLQlYRlNfU0VORF9NT1VOVChtcCwgRE1fUklHSFRfTlVMTCwgbXRwdCwgbXAtPm1fZnNuYW1lKTsKLQogCXNiLT5zX21hZ2ljID0gWEZTX1NCX01BR0lDOwogCXNiLT5zX2Jsb2Nrc2l6ZSA9IG1wLT5tX3NiLnNiX2Jsb2Nrc2l6ZTsKIAlzYi0+c19ibG9ja3NpemVfYml0cyA9IGZmcyhzYi0+c19ibG9ja3NpemUpIC0gMTsKQEAgLTE2MzgsNyArMTU2OCw2IEBACiAKIAl4ZnNfaW5vZGVfc2hyaW5rZXJfcmVnaXN0ZXIobXApOwogCi0Ja2ZyZWUobXRwdCk7CiAJcmV0dXJuIDA7CiAKICBvdXRfZmlsZXN0cmVhbV91bm1vdW50OgpAQCAtMTY0OCwxMSArMTU3Nyw4IEBACiAgb3V0X2Rlc3Ryb3lfY291bnRlcnM6CiAJeGZzX2ljc2JfZGVzdHJveV9jb3VudGVycyhtcCk7CiAJeGZzX2Nsb3NlX2RldmljZXMobXApOwotIG91dF9wdXRfZG1vcHM6Ci0JeGZzX2Rtb3BzX3B1dChtcCk7CiAgb3V0X2ZyZWVfZnNuYW1lOgogCXhmc19mcmVlX2ZzbmFtZShtcCk7Ci0Ja2ZyZWUobXRwdCk7CiAJa2ZyZWUobXApOwogIG91dDoKIAlyZXR1cm4gLWVycm9yOwpAQCAtMTc1OSw2ICsxNjg1LDEyIEBACiAJaWYgKCF4ZnNfdHJhbnNfem9uZSkKIAkJZ290byBvdXRfZGVzdHJveV9pZm9ya196b25lOwogCisJeGZzX2xvZ19pdGVtX2Rlc2Nfem9uZSA9CisJCWttZW1fem9uZV9pbml0KHNpemVvZihzdHJ1Y3QgeGZzX2xvZ19pdGVtX2Rlc2MpLAorCQkJICAgICAgICJ4ZnNfbG9nX2l0ZW1fZGVzYyIpOworCWlmICgheGZzX2xvZ19pdGVtX2Rlc2Nfem9uZSkKKwkJZ290byBvdXRfZGVzdHJveV90cmFuc196b25lOworCiAJLyoKIAkgKiBUaGUgc2l6ZSBvZiB0aGUgem9uZSBhbGxvY2F0ZWQgYnVmIGxvZyBpdGVtIGlzIHRoZSBtYXhpbXVtCiAJICogc2l6ZSBwb3NzaWJsZSB1bmRlciBYRlMuICBUaGlzIHdhc3RlcyBhIGxpdHRsZSBiaXQgb2YgbWVtb3J5LApAQCAtMTc2OCw3ICsxNzAwLDcgQEAKIAkJCQkoKChYRlNfTUFYX0JMT0NLU0laRSAvIFhGU19CTEZfQ0hVTkspIC8KIAkJCQkgIE5CV09SRCkgKiBzaXplb2YoaW50KSkpLCAieGZzX2J1Zl9pdGVtIik7CiAJaWYgKCF4ZnNfYnVmX2l0ZW1fem9uZSkKLQkJZ290byBvdXRfZGVzdHJveV90cmFuc196b25lOworCQlnb3RvIG91dF9kZXN0cm95X2xvZ19pdGVtX2Rlc2Nfem9uZTsKIAogCXhmc19lZmRfem9uZSA9IGttZW1fem9uZV9pbml0KChzaXplb2YoeGZzX2VmZF9sb2dfaXRlbV90KSArCiAJCQkoKFhGU19FRkRfTUFYX0ZBU1RfRVhURU5UUyAtIDEpICoKQEAgLTE4MDUsNiArMTczNyw4IEBACiAJa21lbV96b25lX2Rlc3Ryb3koeGZzX2VmZF96b25lKTsKICBvdXRfZGVzdHJveV9idWZfaXRlbV96b25lOgogCWttZW1fem9uZV9kZXN0cm95KHhmc19idWZfaXRlbV96b25lKTsKKyBvdXRfZGVzdHJveV9sb2dfaXRlbV9kZXNjX3pvbmU6CisJa21lbV96b25lX2Rlc3Ryb3koeGZzX2xvZ19pdGVtX2Rlc2Nfem9uZSk7CiAgb3V0X2Rlc3Ryb3lfdHJhbnNfem9uZToKIAlrbWVtX3pvbmVfZGVzdHJveSh4ZnNfdHJhbnNfem9uZSk7CiAgb3V0X2Rlc3Ryb3lfaWZvcmtfem9uZToKQEAgLTE4MzUsNiArMTc2OSw3IEBACiAJa21lbV96b25lX2Rlc3Ryb3koeGZzX2VmaV96b25lKTsKIAlrbWVtX3pvbmVfZGVzdHJveSh4ZnNfZWZkX3pvbmUpOwogCWttZW1fem9uZV9kZXN0cm95KHhmc19idWZfaXRlbV96b25lKTsKKwlrbWVtX3pvbmVfZGVzdHJveSh4ZnNfbG9nX2l0ZW1fZGVzY196b25lKTsKIAlrbWVtX3pvbmVfZGVzdHJveSh4ZnNfdHJhbnNfem9uZSk7CiAJa21lbV96b25lX2Rlc3Ryb3koeGZzX2lmb3JrX3pvbmUpOwogCWttZW1fem9uZV9kZXN0cm95KHhmc19kYWJ1Zl96b25lKTsKQEAgLTE4ODMsNyArMTgxOCw2IEBACiAJCWdvdG8gb3V0X2NsZWFudXBfcHJvY2ZzOwogCiAJdmZzX2luaXRxdW90YSgpOwotCXhmc19pbm9kZV9zaHJpbmtlcl9pbml0KCk7CiAKIAllcnJvciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJnhmc19mc190eXBlKTsKIAlpZiAoZXJyb3IpCkBAIC0xOTExLDcgKzE4NDUsNiBAQAogewogCXZmc19leGl0cXVvdGEoKTsKIAl1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJnhmc19mc190eXBlKTsKLQl4ZnNfaW5vZGVfc2hyaW5rZXJfZGVzdHJveSgpOwogCXhmc19zeXNjdGxfdW5yZWdpc3RlcigpOwogCXhmc19jbGVhbnVwX3Byb2NmcygpOwogCXhmc19idWZfdGVybWluYXRlKCk7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuaAppbmRleCA1MTk2MThlLi4xZWY0YTRkIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmgKQEAgLTU2LDEyICs1Niw2IEBACiAjIGRlZmluZSBYRlNfQklHRlNfU1RSSU5HCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19YRlNfRE1BUEkKLSMgZGVmaW5lIFhGU19ETUFQSV9TVFJJTkcJImRtYXBpIHN1cHBvcnQsICIKLSNlbHNlCi0jIGRlZmluZSBYRlNfRE1BUElfU1RSSU5HCi0jZW5kaWYKLQogI2lmZGVmIERFQlVHCiAjIGRlZmluZSBYRlNfREJHX1NUUklORwkJImRlYnVnIgogI2Vsc2UKQEAgLTcyLDcgKzY2LDYgQEAKIAkJCQlYRlNfU0VDVVJJVFlfU1RSSU5HIFwKIAkJCQlYRlNfUkVBTFRJTUVfU1RSSU5HIFwKIAkJCQlYRlNfQklHRlNfU1RSSU5HIFwKLQkJCQlYRlNfRE1BUElfU1RSSU5HIFwKIAkJCQlYRlNfREJHX1NUUklORyAvKiBEQkcgbXVzdCBiZSBsYXN0ICovCiAKIHN0cnVjdCB4ZnNfaW5vZGU7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmMKaW5kZXggZWY3ZjAyMS4uZGZjYmQ5OCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYwpAQCAtMjQsMjUgKzI0LDE0IEBACiAjaW5jbHVkZSAieGZzX3RyYW5zLmgiCiAjaW5jbHVkZSAieGZzX3NiLmgiCiAjaW5jbHVkZSAieGZzX2FnLmgiCi0jaW5jbHVkZSAieGZzX2RpcjIuaCIKLSNpbmNsdWRlICJ4ZnNfZG1hcGkuaCIKICNpbmNsdWRlICJ4ZnNfbW91bnQuaCIKICNpbmNsdWRlICJ4ZnNfYm1hcF9idHJlZS5oIgotI2luY2x1ZGUgInhmc19hbGxvY19idHJlZS5oIgotI2luY2x1ZGUgInhmc19pYWxsb2NfYnRyZWUuaCIKLSNpbmNsdWRlICJ4ZnNfYnRyZWUuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMl9zZi5oIgotI2luY2x1ZGUgInhmc19hdHRyX3NmLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlLmgiCiAjaW5jbHVkZSAieGZzX2Rpbm9kZS5oIgogI2luY2x1ZGUgInhmc19lcnJvci5oIgotI2luY2x1ZGUgInhmc19tcnVfY2FjaGUuaCIKICNpbmNsdWRlICJ4ZnNfZmlsZXN0cmVhbS5oIgogI2luY2x1ZGUgInhmc192bm9kZW9wcy5oIgotI2luY2x1ZGUgInhmc191dGlscy5oIgotI2luY2x1ZGUgInhmc19idWZfaXRlbS5oIgogI2luY2x1ZGUgInhmc19pbm9kZV9pdGVtLmgiCi0jaW5jbHVkZSAieGZzX3J3LmgiCiAjaW5jbHVkZSAieGZzX3F1b3RhLmgiCiAjaW5jbHVkZSAieGZzX3RyYWNlLmgiCiAKQEAgLTE0NCw2ICsxMzMsNDEgQEAKIAlyZXR1cm4gbGFzdF9lcnJvcjsKIH0KIAorLyoKKyAqIFNlbGVjdCB0aGUgbmV4dCBwZXItYWcgc3RydWN0dXJlIHRvIGl0ZXJhdGUgZHVyaW5nIHRoZSB3YWxrLiBUaGUgcmVjbGFpbQorICogd2FsayBpcyBvcHRpbWlzZWQgb25seSB0byB3YWxrIEFHcyB3aXRoIHJlY2xhaW1hYmxlIGlub2RlcyBpbiB0aGVtLgorICovCitzdGF0aWMgc3RydWN0IHhmc19wZXJhZyAqCit4ZnNfaW5vZGVfYWdfaXRlcl9uZXh0X3BhZygKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCwKKwl4ZnNfYWdudW1iZXJfdAkJKmZpcnN0LAorCWludAkJCXRhZykKK3sKKwlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWcgPSBOVUxMOworCisJaWYgKHRhZyA9PSBYRlNfSUNJX1JFQ0xBSU1fVEFHKSB7CisJCWludCBmb3VuZDsKKwkJaW50IHJlZjsKKworCQlzcGluX2xvY2soJm1wLT5tX3BlcmFnX2xvY2spOworCQlmb3VuZCA9IHJhZGl4X3RyZWVfZ2FuZ19sb29rdXBfdGFnKCZtcC0+bV9wZXJhZ190cmVlLAorCQkJCSh2b2lkICoqKSZwYWcsICpmaXJzdCwgMSwgdGFnKTsKKwkJaWYgKGZvdW5kIDw9IDApIHsKKwkJCXNwaW5fdW5sb2NrKCZtcC0+bV9wZXJhZ19sb2NrKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCSpmaXJzdCA9IHBhZy0+cGFnX2Fnbm8gKyAxOworCQkvKiBvcGVuIGNvZGVkIHBhZyByZWZlcmVuY2UgaW5jcmVtZW50ICovCisJCXJlZiA9IGF0b21pY19pbmNfcmV0dXJuKCZwYWctPnBhZ19yZWYpOworCQlzcGluX3VubG9jaygmbXAtPm1fcGVyYWdfbG9jayk7CisJCXRyYWNlX3hmc19wZXJhZ19nZXRfcmVjbGFpbShtcCwgcGFnLT5wYWdfYWdubywgcmVmLCBfUkVUX0lQXyk7CisJfSBlbHNlIHsKKwkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgKmZpcnN0KTsKKwkJKCpmaXJzdCkrKzsKKwl9CisJcmV0dXJuIHBhZzsKK30KKwogaW50CiB4ZnNfaW5vZGVfYWdfaXRlcmF0b3IoCiAJc3RydWN0IHhmc19tb3VudAkqbXAsCkBAIC0xNTQsMTYgKzE3OCwxNSBAQAogCWludAkJCWV4Y2x1c2l2ZSwKIAlpbnQJCQkqbnJfdG9fc2NhbikKIHsKKwlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWc7CiAJaW50CQkJZXJyb3IgPSAwOwogCWludAkJCWxhc3RfZXJyb3IgPSAwOwogCXhmc19hZ251bWJlcl90CQlhZzsKIAlpbnQJCQlucjsKIAogCW5yID0gbnJfdG9fc2NhbiA/ICpucl90b19zY2FuIDogSU5UX01BWDsKLQlmb3IgKGFnID0gMDsgYWcgPCBtcC0+bV9zYi5zYl9hZ2NvdW50OyBhZysrKSB7Ci0JCXN0cnVjdCB4ZnNfcGVyYWcJKnBhZzsKLQotCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZyk7CisJYWcgPSAwOworCXdoaWxlICgocGFnID0geGZzX2lub2RlX2FnX2l0ZXJfbmV4dF9wYWcobXAsICZhZywgdGFnKSkpIHsKIAkJZXJyb3IgPSB4ZnNfaW5vZGVfYWdfd2FsayhtcCwgcGFnLCBleGVjdXRlLCBmbGFncywgdGFnLAogCQkJCQkJZXhjbHVzaXZlLCAmbnIpOwogCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CkBAIC0yODUsNyArMzA4LDcgQEAKIC8qCiAgKiBXcml0ZSBvdXQgcGFnZWNhY2hlIGRhdGEgZm9yIHRoZSB3aG9sZSBmaWxlc3lzdGVtLgogICovCi1pbnQKK1NUQVRJQyBpbnQKIHhmc19zeW5jX2RhdGEoCiAJc3RydWN0IHhmc19tb3VudAkqbXAsCiAJaW50CQkJZmxhZ3MpCkBAIC0zMDYsNyArMzI5LDcgQEAKIC8qCiAgKiBXcml0ZSBvdXQgaW5vZGUgbWV0YWRhdGEgKGF0dHJpYnV0ZXMpIGZvciB0aGUgd2hvbGUgZmlsZXN5c3RlbS4KICAqLwotaW50CitTVEFUSUMgaW50CiB4ZnNfc3luY19hdHRyKAogCXN0cnVjdCB4ZnNfbW91bnQJKm1wLAogCWludAkJCWZsYWdzKQpAQCAtMzM5LDggKzM2Miw3IEBACiAKIAl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKIAotCXhmc190cmFuc19pam9pbih0cCwgaXAsIFhGU19JTE9DS19FWENMKTsKLQl4ZnNfdHJhbnNfaWhvbGQodHAsIGlwKTsKKwl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwKTsKIAl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7CiAJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKIAl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwpAQCAtNjQwLDYgKzY2MiwxNyBAQAogCXJhZGl4X3RyZWVfdGFnX3NldCgmcGFnLT5wYWdfaWNpX3Jvb3QsCiAJCQkgICBYRlNfSU5PX1RPX0FHSU5PKGlwLT5pX21vdW50LCBpcC0+aV9pbm8pLAogCQkJICAgWEZTX0lDSV9SRUNMQUlNX1RBRyk7CisKKwlpZiAoIXBhZy0+cGFnX2ljaV9yZWNsYWltYWJsZSkgeworCQkvKiBwcm9wYWdhdGUgdGhlIHJlY2xhaW0gdGFnIHVwIGludG8gdGhlIHBlcmFnIHJhZGl4IHRyZWUgKi8KKwkJc3Bpbl9sb2NrKCZpcC0+aV9tb3VudC0+bV9wZXJhZ19sb2NrKTsKKwkJcmFkaXhfdHJlZV90YWdfc2V0KCZpcC0+aV9tb3VudC0+bV9wZXJhZ190cmVlLAorCQkJCVhGU19JTk9fVE9fQUdOTyhpcC0+aV9tb3VudCwgaXAtPmlfaW5vKSwKKwkJCQlYRlNfSUNJX1JFQ0xBSU1fVEFHKTsKKwkJc3Bpbl91bmxvY2soJmlwLT5pX21vdW50LT5tX3BlcmFnX2xvY2spOworCQl0cmFjZV94ZnNfcGVyYWdfc2V0X3JlY2xhaW0oaXAtPmlfbW91bnQsIHBhZy0+cGFnX2Fnbm8sCisJCQkJCQkJLTEsIF9SRVRfSVBfKTsKKwl9CiAJcGFnLT5wYWdfaWNpX3JlY2xhaW1hYmxlKys7CiB9CiAKQEAgLTY3NCw2ICs3MDcsMTYgQEAKIAlyYWRpeF90cmVlX3RhZ19jbGVhcigmcGFnLT5wYWdfaWNpX3Jvb3QsCiAJCQlYRlNfSU5PX1RPX0FHSU5PKG1wLCBpcC0+aV9pbm8pLCBYRlNfSUNJX1JFQ0xBSU1fVEFHKTsKIAlwYWctPnBhZ19pY2lfcmVjbGFpbWFibGUtLTsKKwlpZiAoIXBhZy0+cGFnX2ljaV9yZWNsYWltYWJsZSkgeworCQkvKiBjbGVhciB0aGUgcmVjbGFpbSB0YWcgZnJvbSB0aGUgcGVyYWcgcmFkaXggdHJlZSAqLworCQlzcGluX2xvY2soJmlwLT5pX21vdW50LT5tX3BlcmFnX2xvY2spOworCQlyYWRpeF90cmVlX3RhZ19jbGVhcigmaXAtPmlfbW91bnQtPm1fcGVyYWdfdHJlZSwKKwkJCQlYRlNfSU5PX1RPX0FHTk8oaXAtPmlfbW91bnQsIGlwLT5pX2lubyksCisJCQkJWEZTX0lDSV9SRUNMQUlNX1RBRyk7CisJCXNwaW5fdW5sb2NrKCZpcC0+aV9tb3VudC0+bV9wZXJhZ19sb2NrKTsKKwkJdHJhY2VfeGZzX3BlcmFnX2NsZWFyX3JlY2xhaW0oaXAtPmlfbW91bnQsIHBhZy0+cGFnX2Fnbm8sCisJCQkJCQkJLTEsIF9SRVRfSVBfKTsKKwl9CiB9CiAKIC8qCkBAIC04MTIsNyArODU1LDM2IEBACiByZWNsYWltOgogCXhmc19pZnVubG9jayhpcCk7CiAJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQl4ZnNfaXJlY2xhaW0oaXApOworCisJWEZTX1NUQVRTX0lOQyh4c19pZ19yZWNsYWltcyk7CisJLyoKKwkgKiBSZW1vdmUgdGhlIGlub2RlIGZyb20gdGhlIHBlci1BRyByYWRpeCB0cmVlLgorCSAqCisJICogQmVjYXVzZSByYWRpeF90cmVlX2RlbGV0ZSB3b24ndCBjb21wbGFpbiBldmVuIGlmIHRoZSBpdGVtIHdhcyBuZXZlcgorCSAqIGFkZGVkIHRvIHRoZSB0cmVlIGFzc2VydCB0aGF0IGl0J3MgYmVlbiB0aGVyZSBiZWZvcmUgdG8gY2F0Y2gKKwkgKiBwcm9ibGVtcyB3aXRoIHRoZSBpbm9kZSBsaWZlIHRpbWUgZWFybHkgb24uCisJICovCisJd3JpdGVfbG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOworCWlmICghcmFkaXhfdHJlZV9kZWxldGUoJnBhZy0+cGFnX2ljaV9yb290LAorCQkJCVhGU19JTk9fVE9fQUdJTk8oaXAtPmlfbW91bnQsIGlwLT5pX2lubykpKQorCQlBU1NFUlQoMCk7CisJd3JpdGVfdW5sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7CisKKwkvKgorCSAqIEhlcmUgd2UgZG8gYW4gKGFsbW9zdCkgc3B1cmlvdXMgaW5vZGUgbG9jayBpbiBvcmRlciB0byBjb29yZGluYXRlCisJICogd2l0aCBpbm9kZSBjYWNoZSByYWRpeCB0cmVlIGxvb2t1cHMuICBUaGlzIGlzIGJlY2F1c2UgdGhlIGxvb2t1cAorCSAqIGNhbiByZWZlcmVuY2UgdGhlIGlub2RlcyBpbiB0aGUgY2FjaGUgd2l0aG91dCB0YWtpbmcgcmVmZXJlbmNlcy4KKwkgKgorCSAqIFdlIG1ha2UgdGhhdCBPSyBoZXJlIGJ5IGVuc3VyaW5nIHRoYXQgd2Ugd2FpdCB1bnRpbCB0aGUgaW5vZGUgaXMKKwkgKiB1bmxvY2tlZCBhZnRlciB0aGUgbG9va3VwIGJlZm9yZSB3ZSBnbyBhaGVhZCBhbmQgZnJlZSBpdC4gIFdlIGdldAorCSAqIGJvdGggdGhlIGlsb2NrIGFuZCB0aGUgaW9sb2NrIGJlY2F1c2UgdGhlIGNvZGUgbWF5IG5lZWQgdG8gZHJvcCB0aGUKKwkgKiBpbG9jayBvbmUgYnV0IHdpbGwgc3RpbGwgaG9sZCB0aGUgaW9sb2NrLgorCSAqLworCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wgfCBYRlNfSU9MT0NLX0VYQ0wpOworCXhmc19xbV9kcWRldGFjaChpcCk7CisJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMIHwgWEZTX0lPTE9DS19FWENMKTsKKworCXhmc19pbm9kZV9mcmVlKGlwKTsKIAlyZXR1cm4gZXJyb3I7CiAKIH0KQEAgLTgyOCw4MyArOTAwLDUyIEBACiAKIC8qCiAgKiBTaHJpbmtlciBpbmZyYXN0cnVjdHVyZS4KLSAqCi0gKiBUaGlzIGlzIGFsbCBmYXIgbW9yZSBjb21wbGV4IHRoYW4gaXQgbmVlZHMgdG8gYmUuIEl0IGFkZHMgYSBnbG9iYWwgbGlzdCBvZgotICogbW91bnRzIGJlY2F1c2UgdGhlIHNocmlua2VycyBjYW4gb25seSBjYWxsIGEgZ2xvYmFsIGNvbnRleHQuIFdlIG5lZWQgdG8gbWFrZQotICogdGhlIHNocmlua2VycyBwYXNzIGEgY29udGV4dCB0byBhdm9pZCB0aGUgbmVlZCBmb3IgZ2xvYmFsIHN0YXRlLgogICovCi1zdGF0aWMgTElTVF9IRUFEKHhmc19tb3VudF9saXN0KTsKLXN0YXRpYyBzdHJ1Y3Qgcndfc2VtYXBob3JlIHhmc19tb3VudF9saXN0X2xvY2s7Ci0KIHN0YXRpYyBpbnQKIHhmc19yZWNsYWltX2lub2RlX3NocmluaygKKwlzdHJ1Y3Qgc2hyaW5rZXIJKnNocmluaywKIAlpbnQJCW5yX3RvX3NjYW4sCiAJZ2ZwX3QJCWdmcF9tYXNrKQogewogCXN0cnVjdCB4ZnNfbW91bnQgKm1wOwogCXN0cnVjdCB4ZnNfcGVyYWcgKnBhZzsKIAl4ZnNfYWdudW1iZXJfdAlhZzsKLQlpbnQJCXJlY2xhaW1hYmxlID0gMDsKKwlpbnQJCXJlY2xhaW1hYmxlOwogCisJbXAgPSBjb250YWluZXJfb2Yoc2hyaW5rLCBzdHJ1Y3QgeGZzX21vdW50LCBtX2lub2RlX3Nocmluayk7CiAJaWYgKG5yX3RvX3NjYW4pIHsKIAkJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9GUykpCiAJCQlyZXR1cm4gLTE7CiAKLQkJZG93bl9yZWFkKCZ4ZnNfbW91bnRfbGlzdF9sb2NrKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShtcCwgJnhmc19tb3VudF9saXN0LCBtX21wbGlzdCkgewotCQkJeGZzX2lub2RlX2FnX2l0ZXJhdG9yKG1wLCB4ZnNfcmVjbGFpbV9pbm9kZSwgMCwKKwkJeGZzX2lub2RlX2FnX2l0ZXJhdG9yKG1wLCB4ZnNfcmVjbGFpbV9pbm9kZSwgMCwKIAkJCQkJWEZTX0lDSV9SRUNMQUlNX1RBRywgMSwgJm5yX3RvX3NjYW4pOwotCQkJaWYgKG5yX3RvX3NjYW4gPD0gMCkKLQkJCQlicmVhazsKLQkJfQotCQl1cF9yZWFkKCZ4ZnNfbW91bnRfbGlzdF9sb2NrKTsKLQl9CisJCS8qIGlmIHdlIGRvbid0IGV4aGF1c3QgdGhlIHNjYW4sIGRvbid0IGJvdGhlciBjb21pbmcgYmFjayAqLworCQlpZiAobnJfdG9fc2NhbiA+IDApCisJCQlyZXR1cm4gLTE7CisgICAgICAgfQogCi0JZG93bl9yZWFkKCZ4ZnNfbW91bnRfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1wLCAmeGZzX21vdW50X2xpc3QsIG1fbXBsaXN0KSB7Ci0JCWZvciAoYWcgPSAwOyBhZyA8IG1wLT5tX3NiLnNiX2FnY291bnQ7IGFnKyspIHsKLQkJCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnKTsKLQkJCXJlY2xhaW1hYmxlICs9IHBhZy0+cGFnX2ljaV9yZWNsYWltYWJsZTsKLQkJCXhmc19wZXJhZ19wdXQocGFnKTsKLQkJfQorCXJlY2xhaW1hYmxlID0gMDsKKwlhZyA9IDA7CisJd2hpbGUgKChwYWcgPSB4ZnNfaW5vZGVfYWdfaXRlcl9uZXh0X3BhZyhtcCwgJmFnLAorCQkJCQlYRlNfSUNJX1JFQ0xBSU1fVEFHKSkpIHsKKwkJcmVjbGFpbWFibGUgKz0gcGFnLT5wYWdfaWNpX3JlY2xhaW1hYmxlOworCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJfQotCXVwX3JlYWQoJnhmc19tb3VudF9saXN0X2xvY2spOwogCXJldHVybiByZWNsYWltYWJsZTsKIH0KIAotc3RhdGljIHN0cnVjdCBzaHJpbmtlciB4ZnNfaW5vZGVfc2hyaW5rZXIgPSB7Ci0JLnNocmluayA9IHhmc19yZWNsYWltX2lub2RlX3NocmluaywKLQkuc2Vla3MgPSBERUZBVUxUX1NFRUtTLAotfTsKLQotdm9pZCBfX2luaXQKLXhmc19pbm9kZV9zaHJpbmtlcl9pbml0KHZvaWQpCi17Ci0JaW5pdF9yd3NlbSgmeGZzX21vdW50X2xpc3RfbG9jayk7Ci0JcmVnaXN0ZXJfc2hyaW5rZXIoJnhmc19pbm9kZV9zaHJpbmtlcik7Ci19Ci0KLXZvaWQKLXhmc19pbm9kZV9zaHJpbmtlcl9kZXN0cm95KHZvaWQpCi17Ci0JQVNTRVJUKGxpc3RfZW1wdHkoJnhmc19tb3VudF9saXN0KSk7Ci0JdW5yZWdpc3Rlcl9zaHJpbmtlcigmeGZzX2lub2RlX3Nocmlua2VyKTsKLX0KLQogdm9pZAogeGZzX2lub2RlX3Nocmlua2VyX3JlZ2lzdGVyKAogCXN0cnVjdCB4ZnNfbW91bnQJKm1wKQogewotCWRvd25fd3JpdGUoJnhmc19tb3VudF9saXN0X2xvY2spOwotCWxpc3RfYWRkX3RhaWwoJm1wLT5tX21wbGlzdCwgJnhmc19tb3VudF9saXN0KTsKLQl1cF93cml0ZSgmeGZzX21vdW50X2xpc3RfbG9jayk7CisJbXAtPm1faW5vZGVfc2hyaW5rLnNocmluayA9IHhmc19yZWNsYWltX2lub2RlX3NocmluazsKKwltcC0+bV9pbm9kZV9zaHJpbmsuc2Vla3MgPSBERUZBVUxUX1NFRUtTOworCXJlZ2lzdGVyX3Nocmlua2VyKCZtcC0+bV9pbm9kZV9zaHJpbmspOwogfQogCiB2b2lkCiB4ZnNfaW5vZGVfc2hyaW5rZXJfdW5yZWdpc3RlcigKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCkKIHsKLQlkb3duX3dyaXRlKCZ4ZnNfbW91bnRfbGlzdF9sb2NrKTsKLQlsaXN0X2RlbCgmbXAtPm1fbXBsaXN0KTsKLQl1cF93cml0ZSgmeGZzX21vdW50X2xpc3RfbG9jayk7CisJdW5yZWdpc3Rlcl9zaHJpbmtlcigmbXAtPm1faW5vZGVfc2hyaW5rKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuaAppbmRleCBjZGNiYWFjLi5mZTc4NzI2IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5oCkBAIC0zNSw5ICszNSw2IEBACiBpbnQgeGZzX3N5bmNkX2luaXQoc3RydWN0IHhmc19tb3VudCAqbXApOwogdm9pZCB4ZnNfc3luY2Rfc3RvcChzdHJ1Y3QgeGZzX21vdW50ICptcCk7CiAKLWludCB4ZnNfc3luY19hdHRyKHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBpbnQgZmxhZ3MpOwotaW50IHhmc19zeW5jX2RhdGEoc3RydWN0IHhmc19tb3VudCAqbXAsIGludCBmbGFncyk7Ci0KIGludCB4ZnNfcXVpZXNjZV9kYXRhKHN0cnVjdCB4ZnNfbW91bnQgKm1wKTsKIHZvaWQgeGZzX3F1aWVzY2VfYXR0cihzdHJ1Y3QgeGZzX21vdW50ICptcCk7CiAKQEAgLTU1LDggKzUyLDYgQEAKIAlpbnQgKCpleGVjdXRlKShzdHJ1Y3QgeGZzX2lub2RlICppcCwgc3RydWN0IHhmc19wZXJhZyAqcGFnLCBpbnQgZmxhZ3MpLAogCWludCBmbGFncywgaW50IHRhZywgaW50IHdyaXRlX2xvY2ssIGludCAqbnJfdG9fc2Nhbik7CiAKLXZvaWQgeGZzX2lub2RlX3Nocmlua2VyX2luaXQodm9pZCk7Ci12b2lkIHhmc19pbm9kZV9zaHJpbmtlcl9kZXN0cm95KHZvaWQpOwogdm9pZCB4ZnNfaW5vZGVfc2hyaW5rZXJfcmVnaXN0ZXIoc3RydWN0IHhmc19tb3VudCAqbXApOwogdm9pZCB4ZnNfaW5vZGVfc2hyaW5rZXJfdW5yZWdpc3RlcihzdHJ1Y3QgeGZzX21vdW50ICptcCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3RyYWNlLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc190cmFjZS5jCmluZGV4IGQxMmJlODQuLjg4ZDI1ZDQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3RyYWNlLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfdHJhY2UuYwpAQCAtMjQsMTcgKzI0LDEzIEBACiAjaW5jbHVkZSAieGZzX3RyYW5zLmgiCiAjaW5jbHVkZSAieGZzX3NiLmgiCiAjaW5jbHVkZSAieGZzX2FnLmgiCi0jaW5jbHVkZSAieGZzX2RpcjIuaCIKICNpbmNsdWRlICJ4ZnNfZGFfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfYm1hcF9idHJlZS5oIgogI2luY2x1ZGUgInhmc19hbGxvY19idHJlZS5oIgogI2luY2x1ZGUgInhmc19pYWxsb2NfYnRyZWUuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMl9zZi5oIgotI2luY2x1ZGUgInhmc19hdHRyX3NmLmgiCiAjaW5jbHVkZSAieGZzX2Rpbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZS5oIgogI2luY2x1ZGUgInhmc19idHJlZS5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc19pYWxsb2MuaCIKICNpbmNsdWRlICJ4ZnNfaXRhYmxlLmgiCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc190cmFjZS5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfdHJhY2UuaAppbmRleCA3M2Q1YWExLi5jNjU3Y2RjIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc190cmFjZS5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3RyYWNlLmgKQEAgLTEyNCw3ICsxMjQsMTAgQEAKIAkJIHVuc2lnbmVkIGxvbmcgY2FsbGVyX2lwKSwJCQkJCVwKIAlUUF9BUkdTKG1wLCBhZ25vLCByZWZjb3VudCwgY2FsbGVyX2lwKSkKIERFRklORV9QRVJBR19SRUZfRVZFTlQoeGZzX3BlcmFnX2dldCk7CitERUZJTkVfUEVSQUdfUkVGX0VWRU5UKHhmc19wZXJhZ19nZXRfcmVjbGFpbSk7CiBERUZJTkVfUEVSQUdfUkVGX0VWRU5UKHhmc19wZXJhZ19wdXQpOworREVGSU5FX1BFUkFHX1JFRl9FVkVOVCh4ZnNfcGVyYWdfc2V0X3JlY2xhaW0pOworREVGSU5FX1BFUkFHX1JFRl9FVkVOVCh4ZnNfcGVyYWdfY2xlYXJfcmVjbGFpbSk7CiAKIFRSQUNFX0VWRU5UKHhmc19hdHRyX2xpc3Rfbm9kZV9kZXNjZW5kLAogCVRQX1BST1RPKHN0cnVjdCB4ZnNfYXR0cl9saXN0X2NvbnRleHQgKmN0eCwKQEAgLTMxNCw4ICszMTcsNiBAQAogREVGSU5FX0JVRl9FVkVOVCh4ZnNfYnVmX2ZyZWUpOwogREVGSU5FX0JVRl9FVkVOVCh4ZnNfYnVmX2hvbGQpOwogREVGSU5FX0JVRl9FVkVOVCh4ZnNfYnVmX3JlbGUpOwotREVGSU5FX0JVRl9FVkVOVCh4ZnNfYnVmX3Bpbik7Ci1ERUZJTkVfQlVGX0VWRU5UKHhmc19idWZfdW5waW4pOwogREVGSU5FX0JVRl9FVkVOVCh4ZnNfYnVmX2lvZG9uZSk7CiBERUZJTkVfQlVGX0VWRU5UKHhmc19idWZfaW9yZXF1ZXN0KTsKIERFRklORV9CVUZfRVZFTlQoeGZzX2J1Zl9iYXdyaXRlKTsKQEAgLTUzOCw3ICs1MzksNyBAQAogREVGSU5FX0xPQ0tfRVZFTlQoeGZzX2lsb2NrX2RlbW90ZSk7CiBERUZJTkVfTE9DS19FVkVOVCh4ZnNfaXVubG9jayk7CiAKLURFQ0xBUkVfRVZFTlRfQ0xBU1MoeGZzX2lnZXRfY2xhc3MsCitERUNMQVJFX0VWRU5UX0NMQVNTKHhmc19pbm9kZV9jbGFzcywKIAlUUF9QUk9UTyhzdHJ1Y3QgeGZzX2lub2RlICppcCksCiAJVFBfQVJHUyhpcCksCiAJVFBfU1RSVUNUX19lbnRyeSgKQEAgLTU1NCwxNiArNTU1LDM4IEBACiAJCSAgX19lbnRyeS0+aW5vKQogKQogCi0jZGVmaW5lIERFRklORV9JR0VUX0VWRU5UKG5hbWUpIFwKLURFRklORV9FVkVOVCh4ZnNfaWdldF9jbGFzcywgbmFtZSwgXAorI2RlZmluZSBERUZJTkVfSU5PREVfRVZFTlQobmFtZSkgXAorREVGSU5FX0VWRU5UKHhmc19pbm9kZV9jbGFzcywgbmFtZSwgXAogCVRQX1BST1RPKHN0cnVjdCB4ZnNfaW5vZGUgKmlwKSwgXAogCVRQX0FSR1MoaXApKQotREVGSU5FX0lHRVRfRVZFTlQoeGZzX2lnZXRfc2tpcCk7Ci1ERUZJTkVfSUdFVF9FVkVOVCh4ZnNfaWdldF9yZWNsYWltKTsKLURFRklORV9JR0VUX0VWRU5UKHhmc19pZ2V0X2ZvdW5kKTsKLURFRklORV9JR0VUX0VWRU5UKHhmc19pZ2V0X2FsbG9jKTsKK0RFRklORV9JTk9ERV9FVkVOVCh4ZnNfaWdldF9za2lwKTsKK0RFRklORV9JTk9ERV9FVkVOVCh4ZnNfaWdldF9yZWNsYWltKTsKK0RFRklORV9JTk9ERV9FVkVOVCh4ZnNfaWdldF9yZWNsYWltX2ZhaWwpOworREVGSU5FX0lOT0RFX0VWRU5UKHhmc19pZ2V0X2hpdCk7CitERUZJTkVfSU5PREVfRVZFTlQoeGZzX2lnZXRfbWlzcyk7CiAKLURFQ0xBUkVfRVZFTlRfQ0xBU1MoeGZzX2lub2RlX2NsYXNzLAorREVGSU5FX0lOT0RFX0VWRU5UKHhmc19nZXRhdHRyKTsKK0RFRklORV9JTk9ERV9FVkVOVCh4ZnNfc2V0YXR0cik7CitERUZJTkVfSU5PREVfRVZFTlQoeGZzX3JlYWRsaW5rKTsKK0RFRklORV9JTk9ERV9FVkVOVCh4ZnNfYWxsb2NfZmlsZV9zcGFjZSk7CitERUZJTkVfSU5PREVfRVZFTlQoeGZzX2ZyZWVfZmlsZV9zcGFjZSk7CitERUZJTkVfSU5PREVfRVZFTlQoeGZzX3JlYWRkaXIpOworI2lmZGVmIENPTkZJR19YRlNfUE9TSVhfQUNMCitERUZJTkVfSU5PREVfRVZFTlQoeGZzX2NoZWNrX2FjbCk7CisjZW5kaWYKK0RFRklORV9JTk9ERV9FVkVOVCh4ZnNfdm1fYm1hcCk7CitERUZJTkVfSU5PREVfRVZFTlQoeGZzX2ZpbGVfaW9jdGwpOworREVGSU5FX0lOT0RFX0VWRU5UKHhmc19maWxlX2NvbXBhdF9pb2N0bCk7CitERUZJTkVfSU5PREVfRVZFTlQoeGZzX2lvY3RsX3NldGF0dHIpOworREVGSU5FX0lOT0RFX0VWRU5UKHhmc19maWxlX2ZzeW5jKTsKK0RFRklORV9JTk9ERV9FVkVOVCh4ZnNfZGVzdHJveV9pbm9kZSk7CitERUZJTkVfSU5PREVfRVZFTlQoeGZzX3dyaXRlX2lub2RlKTsKK0RFRklORV9JTk9ERV9FVkVOVCh4ZnNfY2xlYXJfaW5vZGUpOworCitERUZJTkVfSU5PREVfRVZFTlQoeGZzX2RxdW90X2RxYWxsb2MpOworREVGSU5FX0lOT0RFX0VWRU5UKHhmc19kcXVvdF9kcWRldGFjaCk7CisKK0RFQ0xBUkVfRVZFTlRfQ0xBU1MoeGZzX2lyZWZfY2xhc3MsCiAJVFBfUFJPVE8oc3RydWN0IHhmc19pbm9kZSAqaXAsIHVuc2lnbmVkIGxvbmcgY2FsbGVyX2lwKSwKIAlUUF9BUkdTKGlwLCBjYWxsZXJfaXApLAogCVRQX1NUUlVDVF9fZW50cnkoCkBAIC01ODgsMjAgKzYxMSw3MSBAQAogCQkgIChjaGFyICopX19lbnRyeS0+Y2FsbGVyX2lwKQogKQogCi0jZGVmaW5lIERFRklORV9JTk9ERV9FVkVOVChuYW1lKSBcCi1ERUZJTkVfRVZFTlQoeGZzX2lub2RlX2NsYXNzLCBuYW1lLCBcCisjZGVmaW5lIERFRklORV9JUkVGX0VWRU5UKG5hbWUpIFwKK0RFRklORV9FVkVOVCh4ZnNfaXJlZl9jbGFzcywgbmFtZSwgXAogCVRQX1BST1RPKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCB1bnNpZ25lZCBsb25nIGNhbGxlcl9pcCksIFwKIAlUUF9BUkdTKGlwLCBjYWxsZXJfaXApKQotREVGSU5FX0lOT0RFX0VWRU5UKHhmc19paG9sZCk7Ci1ERUZJTkVfSU5PREVfRVZFTlQoeGZzX2lyZWxlKTsKLURFRklORV9JTk9ERV9FVkVOVCh4ZnNfaW5vZGVfcGluKTsKLURFRklORV9JTk9ERV9FVkVOVCh4ZnNfaW5vZGVfdW5waW4pOwotREVGSU5FX0lOT0RFX0VWRU5UKHhmc19pbm9kZV91bnBpbl9ub3dhaXQpOworREVGSU5FX0lSRUZfRVZFTlQoeGZzX2lob2xkKTsKK0RFRklORV9JUkVGX0VWRU5UKHhmc19pcmVsZSk7CitERUZJTkVfSVJFRl9FVkVOVCh4ZnNfaW5vZGVfcGluKTsKK0RFRklORV9JUkVGX0VWRU5UKHhmc19pbm9kZV91bnBpbik7CitERUZJTkVfSVJFRl9FVkVOVCh4ZnNfaW5vZGVfdW5waW5fbm93YWl0KTsKIAotLyogdGhlIG9sZCB4ZnNfaXRyYWNlX2VudHJ5IHRyYWNlciAtIHRvIGJlIHJlcGxhY2VkIGJ5IHMudGguIGluIHRoZSBWRlMgKi8KLURFRklORV9JTk9ERV9FVkVOVCh4ZnNfaW5vZGUpOwotI2RlZmluZSB4ZnNfaXRyYWNlX2VudHJ5KGlwKSAgICBcCi0JdHJhY2VfeGZzX2lub2RlKGlwLCBfVEhJU19JUF8pCitERUNMQVJFX0VWRU5UX0NMQVNTKHhmc19uYW1lc3BhY2VfY2xhc3MsCisJVFBfUFJPVE8oc3RydWN0IHhmc19pbm9kZSAqZHAsIHN0cnVjdCB4ZnNfbmFtZSAqbmFtZSksCisJVFBfQVJHUyhkcCwgbmFtZSksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChkZXZfdCwgZGV2KQorCQlfX2ZpZWxkKHhmc19pbm9fdCwgZHBfaW5vKQorCQlfX2R5bmFtaWNfYXJyYXkoY2hhciwgbmFtZSwgbmFtZS0+bGVuKQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRldiA9IFZGU19JKGRwKS0+aV9zYi0+c19kZXY7CisJCV9fZW50cnktPmRwX2lubyA9IGRwLT5pX2lubzsKKwkJbWVtY3B5KF9fZ2V0X3N0cihuYW1lKSwgbmFtZS0+bmFtZSwgbmFtZS0+bGVuKTsKKwkpLAorCVRQX3ByaW50aygiZGV2ICVkOiVkIGRwIGlubyAweCVsbHggbmFtZSAlcyIsCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwKKwkJICBfX2VudHJ5LT5kcF9pbm8sCisJCSAgX19nZXRfc3RyKG5hbWUpKQorKQorCisjZGVmaW5lIERFRklORV9OQU1FU1BBQ0VfRVZFTlQobmFtZSkgXAorREVGSU5FX0VWRU5UKHhmc19uYW1lc3BhY2VfY2xhc3MsIG5hbWUsIFwKKwlUUF9QUk9UTyhzdHJ1Y3QgeGZzX2lub2RlICpkcCwgc3RydWN0IHhmc19uYW1lICpuYW1lKSwgXAorCVRQX0FSR1MoZHAsIG5hbWUpKQorREVGSU5FX05BTUVTUEFDRV9FVkVOVCh4ZnNfcmVtb3ZlKTsKK0RFRklORV9OQU1FU1BBQ0VfRVZFTlQoeGZzX2xpbmspOworREVGSU5FX05BTUVTUEFDRV9FVkVOVCh4ZnNfbG9va3VwKTsKK0RFRklORV9OQU1FU1BBQ0VfRVZFTlQoeGZzX2NyZWF0ZSk7CitERUZJTkVfTkFNRVNQQUNFX0VWRU5UKHhmc19zeW1saW5rKTsKKworVFJBQ0VfRVZFTlQoeGZzX3JlbmFtZSwKKwlUUF9QUk9UTyhzdHJ1Y3QgeGZzX2lub2RlICpzcmNfZHAsIHN0cnVjdCB4ZnNfaW5vZGUgKnRhcmdldF9kcCwKKwkJIHN0cnVjdCB4ZnNfbmFtZSAqc3JjX25hbWUsIHN0cnVjdCB4ZnNfbmFtZSAqdGFyZ2V0X25hbWUpLAorCVRQX0FSR1Moc3JjX2RwLCB0YXJnZXRfZHAsIHNyY19uYW1lLCB0YXJnZXRfbmFtZSksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChkZXZfdCwgZGV2KQorCQlfX2ZpZWxkKHhmc19pbm9fdCwgc3JjX2RwX2lubykKKwkJX19maWVsZCh4ZnNfaW5vX3QsIHRhcmdldF9kcF9pbm8pCisJCV9fZHluYW1pY19hcnJheShjaGFyLCBzcmNfbmFtZSwgc3JjX25hbWUtPmxlbikKKwkJX19keW5hbWljX2FycmF5KGNoYXIsIHRhcmdldF9uYW1lLCB0YXJnZXRfbmFtZS0+bGVuKQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRldiA9IFZGU19JKHNyY19kcCktPmlfc2ItPnNfZGV2OworCQlfX2VudHJ5LT5zcmNfZHBfaW5vID0gc3JjX2RwLT5pX2lubzsKKwkJX19lbnRyeS0+dGFyZ2V0X2RwX2lubyA9IHRhcmdldF9kcC0+aV9pbm87CisJCW1lbWNweShfX2dldF9zdHIoc3JjX25hbWUpLCBzcmNfbmFtZS0+bmFtZSwgc3JjX25hbWUtPmxlbik7CisJCW1lbWNweShfX2dldF9zdHIodGFyZ2V0X25hbWUpLCB0YXJnZXRfbmFtZS0+bmFtZSwgdGFyZ2V0X25hbWUtPmxlbik7CisJKSwKKwlUUF9wcmludGsoImRldiAlZDolZCBzcmMgZHAgaW5vIDB4JWxseCB0YXJnZXQgZHAgaW5vIDB4JWxseCIKKwkJICAiIHNyYyBuYW1lICVzIHRhcmdldCBuYW1lICVzIiwKKwkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLAorCQkgIF9fZW50cnktPnNyY19kcF9pbm8sCisJCSAgX19lbnRyeS0+dGFyZ2V0X2RwX2lubywKKwkJICBfX2dldF9zdHIoc3JjX25hbWUpLAorCQkgIF9fZ2V0X3N0cih0YXJnZXRfbmFtZSkpCispCiAKIERFQ0xBUkVfRVZFTlRfQ0xBU1MoeGZzX2RxdW90X2NsYXNzLAogCVRQX1BST1RPKHN0cnVjdCB4ZnNfZHF1b3QgKmRxcCksCkBAIC02ODEsOSArNzU1LDYgQEAKIERFRklORV9EUVVPVF9FVkVOVCh4ZnNfZHFmbHVzaCk7CiBERUZJTkVfRFFVT1RfRVZFTlQoeGZzX2RxZmx1c2hfZm9yY2UpOwogREVGSU5FX0RRVU9UX0VWRU5UKHhmc19kcWZsdXNoX2RvbmUpOwotLyogbm90IHJlYWxseSBpZ2V0IGV2ZW50cywgYnV0IHdlIHJlLXVzZSB0aGUgZm9ybWF0ICovCi1ERUZJTkVfSUdFVF9FVkVOVCh4ZnNfZHF1b3RfZHFhbGxvYyk7Ci1ERUZJTkVfSUdFVF9FVkVOVCh4ZnNfZHF1b3RfZHFkZXRhY2gpOwogCiBERUNMQVJFX0VWRU5UX0NMQVNTKHhmc19sb2dncmFudF9jbGFzcywKIAlUUF9QUk9UTyhzdHJ1Y3QgbG9nICpsb2csIHN0cnVjdCB4bG9nX3RpY2tldCAqdGljKSwKQEAgLTgzMSwzMyArOTAyLDI5IEBACiAJCV9fZmllbGQobG9mZl90LCBzaXplKQogCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIG9mZnNldCkKIAkJX19maWVsZChpbnQsIGRlbGFsbG9jKQotCQlfX2ZpZWxkKGludCwgdW5tYXBwZWQpCiAJCV9fZmllbGQoaW50LCB1bndyaXR0ZW4pCiAJKSwKIAlUUF9mYXN0X2Fzc2lnbigKLQkJaW50IGRlbGFsbG9jID0gLTEsIHVubWFwcGVkID0gLTEsIHVud3JpdHRlbiA9IC0xOworCQlpbnQgZGVsYWxsb2MgPSAtMSwgdW53cml0dGVuID0gLTE7CiAKIAkJaWYgKHBhZ2VfaGFzX2J1ZmZlcnMocGFnZSkpCi0JCQl4ZnNfY291bnRfcGFnZV9zdGF0ZShwYWdlLCAmZGVsYWxsb2MsCi0JCQkJCSAgICAgJnVubWFwcGVkLCAmdW53cml0dGVuKTsKKwkJCXhmc19jb3VudF9wYWdlX3N0YXRlKHBhZ2UsICZkZWxhbGxvYywgJnVud3JpdHRlbik7CiAJCV9fZW50cnktPmRldiA9IGlub2RlLT5pX3NiLT5zX2RldjsKIAkJX19lbnRyeS0+aW5vID0gWEZTX0koaW5vZGUpLT5pX2lubzsKIAkJX19lbnRyeS0+cGdvZmYgPSBwYWdlX29mZnNldChwYWdlKTsKIAkJX19lbnRyeS0+c2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKIAkJX19lbnRyeS0+b2Zmc2V0ID0gb2ZmOwogCQlfX2VudHJ5LT5kZWxhbGxvYyA9IGRlbGFsbG9jOwotCQlfX2VudHJ5LT51bm1hcHBlZCA9IHVubWFwcGVkOwogCQlfX2VudHJ5LT51bndyaXR0ZW4gPSB1bndyaXR0ZW47CiAJKSwKIAlUUF9wcmludGsoImRldiAlZDolZCBpbm8gMHglbGx4IHBnb2ZmIDB4JWx4IHNpemUgMHglbGx4IG9mZnNldCAlbHggIgotCQkgICJkZWxhbGxvYyAlZCB1bm1hcHBlZCAlZCB1bndyaXR0ZW4gJWQiLAorCQkgICJkZWxhbGxvYyAlZCB1bndyaXR0ZW4gJWQiLAogCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksCiAJCSAgX19lbnRyeS0+aW5vLAogCQkgIF9fZW50cnktPnBnb2ZmLAogCQkgIF9fZW50cnktPnNpemUsCiAJCSAgX19lbnRyeS0+b2Zmc2V0LAogCQkgIF9fZW50cnktPmRlbGFsbG9jLAotCQkgIF9fZW50cnktPnVubWFwcGVkLAogCQkgIF9fZW50cnktPnVud3JpdHRlbikKICkKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5jIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5jCmluZGV4IDU4NWU3NjMuLmUxYTJmNjggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmMKQEAgLTIzLDI1ICsyMywxNSBAQAogI2luY2x1ZGUgInhmc190cmFucy5oIgogI2luY2x1ZGUgInhmc19zYi5oIgogI2luY2x1ZGUgInhmc19hZy5oIgotI2luY2x1ZGUgInhmc19kaXIyLmgiCiAjaW5jbHVkZSAieGZzX2FsbG9jLmgiCi0jaW5jbHVkZSAieGZzX2RtYXBpLmgiCiAjaW5jbHVkZSAieGZzX3F1b3RhLmgiCiAjaW5jbHVkZSAieGZzX21vdW50LmgiCiAjaW5jbHVkZSAieGZzX2JtYXBfYnRyZWUuaCIKLSNpbmNsdWRlICJ4ZnNfYWxsb2NfYnRyZWUuaCIKLSNpbmNsdWRlICJ4ZnNfaWFsbG9jX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2RpcjJfc2YuaCIKLSNpbmNsdWRlICJ4ZnNfYXR0cl9zZi5oIgotI2luY2x1ZGUgInhmc19kaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfaW5vZGUuaCIKLSNpbmNsdWRlICJ4ZnNfYnRyZWUuaCIKLSNpbmNsdWRlICJ4ZnNfaWFsbG9jLmgiCiAjaW5jbHVkZSAieGZzX2JtYXAuaCIKICNpbmNsdWRlICJ4ZnNfcnRhbGxvYy5oIgogI2luY2x1ZGUgInhmc19lcnJvci5oIgogI2luY2x1ZGUgInhmc19pdGFibGUuaCIKLSNpbmNsdWRlICJ4ZnNfcncuaCIKICNpbmNsdWRlICJ4ZnNfYXR0ci5oIgogI2luY2x1ZGUgInhmc19idWZfaXRlbS5oIgogI2luY2x1ZGUgInhmc190cmFuc19zcGFjZS5oIgpAQCAtNjQsOCArNTQsNiBAQAogICAgZmx1c2ggbG9jayAtIGRpdHRvLgogKi8KIAotU1RBVElDIHZvaWQJCXhmc19xbV9kcWZsdXNoX2RvbmUoeGZzX2J1Zl90ICosIHhmc19kcV9sb2dpdGVtX3QgKik7Ci0KICNpZmRlZiBERUJVRwogeGZzX2J1ZnRhcmdfdCAqeGZzX2RxZXJyb3JfdGFyZ2V0OwogaW50IHhmc19kb19kcWVycm9yOwpAQCAtMzkwLDIxICszNzgsMTQgQEAKIAkJcmV0dXJuIChFU1JDSCk7CiAJfQogCi0JLyoKLQkgKiB4ZnNfdHJhbnNfY29tbWl0IG5vcm1hbGx5IGRlY3JlbWVudHMgdGhlIHZub2RlIHJlZiBjb3VudAotCSAqIHdoZW4gaXQgdW5sb2NrcyB0aGUgaW5vZGUuIFNpbmNlIHdlIHdhbnQgdG8ga2VlcCB0aGUgcXVvdGEKLQkgKiBpbm9kZSBhcm91bmQsIHdlIGJ1bXAgdGhlIHZub2RlIHJlZiBjb3VudCBub3cuCi0JICovCi0JSUhPTEQocXVvdGlwKTsKLQotCXhmc190cmFuc19pam9pbih0cCwgcXVvdGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJeGZzX3RyYW5zX2lqb2luX3JlZih0cCwgcXVvdGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiAJbm1hcHMgPSAxOwogCWlmICgoZXJyb3IgPSB4ZnNfYm1hcGkodHAsIHF1b3RpcCwKIAkJCSAgICAgIG9mZnNldF9mc2IsIFhGU19EUVVPVF9DTFVTVEVSX1NJWkVfRlNCLAogCQkJICAgICAgWEZTX0JNQVBJX01FVEFEQVRBIHwgWEZTX0JNQVBJX1dSSVRFLAogCQkJICAgICAgJmZpcnN0YmxvY2ssCiAJCQkgICAgICBYRlNfUU1fRFFBTExPQ19TUEFDRV9SRVMobXApLAotCQkJICAgICAgJm1hcCwgJm5tYXBzLCAmZmxpc3QsIE5VTEwpKSkgeworCQkJICAgICAgJm1hcCwgJm5tYXBzLCAmZmxpc3QpKSkgewogCQlnb3RvIGVycm9yMDsKIAl9CiAJQVNTRVJUKG1hcC5icl9ibG9ja2NvdW50ID09IFhGU19EUVVPVF9DTFVTVEVSX1NJWkVfRlNCKTsKQEAgLTUyMCw3ICs1MDEsNyBAQAogCQllcnJvciA9IHhmc19ibWFwaShOVUxMLCBxdW90aXAsIGRxcC0+cV9maWxlb2Zmc2V0LAogCQkJCSAgWEZTX0RRVU9UX0NMVVNURVJfU0laRV9GU0IsCiAJCQkJICBYRlNfQk1BUElfTUVUQURBVEEsCi0JCQkJICBOVUxMLCAwLCAmbWFwLCAmbm1hcHMsIE5VTEwsIE5VTEwpOworCQkJCSAgTlVMTCwgMCwgJm1hcCwgJm5tYXBzLCBOVUxMKTsKIAogCQl4ZnNfaXVubG9jayhxdW90aXAsIFhGU19JTE9DS19TSEFSRUQpOwogCQlpZiAoZXJyb3IpCkBAIC0xMTQxLDYgKzExMjIsNDYgQEAKIAl4ZnNfcW1fZHFwdXQoZHFwKTsKIH0KIAorLyoKKyAqIFRoaXMgaXMgdGhlIGRxdW90IGZsdXNoaW5nIEkvTyBjb21wbGV0aW9uIHJvdXRpbmUuICBJdCBpcyBjYWxsZWQKKyAqIGZyb20gaW50ZXJydXB0IGxldmVsIHdoZW4gdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBkcXVvdCBpcworICogZmx1c2hlZCB0byBkaXNrLiAgSXQgaXMgcmVzcG9uc2libGUgZm9yIHJlbW92aW5nIHRoZSBkcXVvdCBsb2dpdGVtCisgKiBmcm9tIHRoZSBBSUwgaWYgaXQgaGFzIG5vdCBiZWVuIHJlLWxvZ2dlZCwgYW5kIHVubG9ja2luZyB0aGUgZHF1b3QncworICogZmx1c2ggbG9jay4gVGhpcyBiZWhhdmlvciBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhhdCBvZiBpbm9kZXMuLgorICovCitTVEFUSUMgdm9pZAoreGZzX3FtX2RxZmx1c2hfZG9uZSgKKwlzdHJ1Y3QgeGZzX2J1ZgkJKmJwLAorCXN0cnVjdCB4ZnNfbG9nX2l0ZW0JKmxpcCkKK3sKKwl4ZnNfZHFfbG9naXRlbV90CSpxaXAgPSAoc3RydWN0IHhmc19kcV9sb2dpdGVtICopbGlwOworCXhmc19kcXVvdF90CQkqZHFwID0gcWlwLT5xbGlfZHF1b3Q7CisJc3RydWN0IHhmc19haWwJCSphaWxwID0gbGlwLT5saV9haWxwOworCisJLyoKKwkgKiBXZSBvbmx5IHdhbnQgdG8gcHVsbCB0aGUgaXRlbSBmcm9tIHRoZSBBSUwgaWYgaXRzCisJICogbG9jYXRpb24gaW4gdGhlIGxvZyBoYXMgbm90IGNoYW5nZWQgc2luY2Ugd2Ugc3RhcnRlZCB0aGUgZmx1c2guCisJICogVGh1cywgd2Ugb25seSBib3RoZXIgaWYgdGhlIGRxdW90J3MgbHNuIGhhcworCSAqIG5vdCBjaGFuZ2VkLiBGaXJzdCB3ZSBjaGVjayB0aGUgbHNuIG91dHNpZGUgdGhlIGxvY2sKKwkgKiBzaW5jZSBpdCdzIGNoZWFwZXIsIGFuZCB0aGVuIHdlIHJlY2hlY2sgd2hpbGUKKwkgKiBob2xkaW5nIHRoZSBsb2NrIGJlZm9yZSByZW1vdmluZyB0aGUgZHF1b3QgZnJvbSB0aGUgQUlMLgorCSAqLworCWlmICgobGlwLT5saV9mbGFncyAmIFhGU19MSV9JTl9BSUwpICYmCisJICAgIGxpcC0+bGlfbHNuID09IHFpcC0+cWxpX2ZsdXNoX2xzbikgeworCisJCS8qIHhmc190cmFuc19haWxfZGVsZXRlKCkgZHJvcHMgdGhlIEFJTCBsb2NrLiAqLworCQlzcGluX2xvY2soJmFpbHAtPnhhX2xvY2spOworCQlpZiAobGlwLT5saV9sc24gPT0gcWlwLT5xbGlfZmx1c2hfbHNuKQorCQkJeGZzX3RyYW5zX2FpbF9kZWxldGUoYWlscCwgbGlwKTsKKwkJZWxzZQorCQkJc3Bpbl91bmxvY2soJmFpbHAtPnhhX2xvY2spOworCX0KKworCS8qCisJICogUmVsZWFzZSB0aGUgZHEncyBmbHVzaCBsb2NrIHNpbmNlIHdlJ3JlIGRvbmUgd2l0aCBpdC4KKwkgKi8KKwl4ZnNfZHFmdW5sb2NrKGRxcCk7Cit9CiAKIC8qCiAgKiBXcml0ZSBhIG1vZGlmaWVkIGRxdW90IHRvIGRpc2suCkBAIC0xMjIyLDggKzEyNDMsOSBAQAogCSAqIEF0dGFjaCBhbiBpb2RvbmUgcm91dGluZSBzbyB0aGF0IHdlIGNhbiByZW1vdmUgdGhpcyBkcXVvdCBmcm9tIHRoZQogCSAqIEFJTCBhbmQgcmVsZWFzZSB0aGUgZmx1c2ggbG9jayBvbmNlIHRoZSBkcXVvdCBpcyBzeW5jZWQgdG8gZGlzay4KIAkgKi8KLQl4ZnNfYnVmX2F0dGFjaF9pb2RvbmUoYnAsICh2b2lkKCopKHhmc19idWZfdCAqLCB4ZnNfbG9nX2l0ZW1fdCAqKSkKLQkJCSAgICAgIHhmc19xbV9kcWZsdXNoX2RvbmUsICYoZHFwLT5xX2xvZ2l0ZW0ucWxpX2l0ZW0pKTsKKwl4ZnNfYnVmX2F0dGFjaF9pb2RvbmUoYnAsIHhmc19xbV9kcWZsdXNoX2RvbmUsCisJCQkJICAmZHFwLT5xX2xvZ2l0ZW0ucWxpX2l0ZW0pOworCiAJLyoKIAkgKiBJZiB0aGUgYnVmZmVyIGlzIHBpbm5lZCB0aGVuIHB1c2ggb24gdGhlIGxvZyBzbyB3ZSB3b24ndAogCSAqIGdldCBzdHVjayB3YWl0aW5nIGluIHRoZSB3cml0ZSBmb3IgdG9vIGxvbmcuCkBAIC0xMjQ3LDUwICsxMjY5LDYgQEAKIAogfQogCi0vKgotICogVGhpcyBpcyB0aGUgZHF1b3QgZmx1c2hpbmcgSS9PIGNvbXBsZXRpb24gcm91dGluZS4gIEl0IGlzIGNhbGxlZAotICogZnJvbSBpbnRlcnJ1cHQgbGV2ZWwgd2hlbiB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRxdW90IGlzCi0gKiBmbHVzaGVkIHRvIGRpc2suICBJdCBpcyByZXNwb25zaWJsZSBmb3IgcmVtb3ZpbmcgdGhlIGRxdW90IGxvZ2l0ZW0KLSAqIGZyb20gdGhlIEFJTCBpZiBpdCBoYXMgbm90IGJlZW4gcmUtbG9nZ2VkLCBhbmQgdW5sb2NraW5nIHRoZSBkcXVvdCdzCi0gKiBmbHVzaCBsb2NrLiBUaGlzIGJlaGF2aW9yIGlzIHZlcnkgc2ltaWxhciB0byB0aGF0IG9mIGlub2Rlcy4uCi0gKi8KLS8qQVJHU1VTRUQqLwotU1RBVElDIHZvaWQKLXhmc19xbV9kcWZsdXNoX2RvbmUoCi0JeGZzX2J1Zl90CQkqYnAsCi0JeGZzX2RxX2xvZ2l0ZW1fdAkqcWlwKQotewotCXhmc19kcXVvdF90CQkqZHFwOwotCXN0cnVjdCB4ZnNfYWlsCQkqYWlscDsKLQotCWRxcCA9IHFpcC0+cWxpX2RxdW90OwotCWFpbHAgPSBxaXAtPnFsaV9pdGVtLmxpX2FpbHA7Ci0KLQkvKgotCSAqIFdlIG9ubHkgd2FudCB0byBwdWxsIHRoZSBpdGVtIGZyb20gdGhlIEFJTCBpZiBpdHMKLQkgKiBsb2NhdGlvbiBpbiB0aGUgbG9nIGhhcyBub3QgY2hhbmdlZCBzaW5jZSB3ZSBzdGFydGVkIHRoZSBmbHVzaC4KLQkgKiBUaHVzLCB3ZSBvbmx5IGJvdGhlciBpZiB0aGUgZHF1b3QncyBsc24gaGFzCi0JICogbm90IGNoYW5nZWQuIEZpcnN0IHdlIGNoZWNrIHRoZSBsc24gb3V0c2lkZSB0aGUgbG9jawotCSAqIHNpbmNlIGl0J3MgY2hlYXBlciwgYW5kIHRoZW4gd2UgcmVjaGVjayB3aGlsZQotCSAqIGhvbGRpbmcgdGhlIGxvY2sgYmVmb3JlIHJlbW92aW5nIHRoZSBkcXVvdCBmcm9tIHRoZSBBSUwuCi0JICovCi0JaWYgKChxaXAtPnFsaV9pdGVtLmxpX2ZsYWdzICYgWEZTX0xJX0lOX0FJTCkgJiYKLQkgICAgcWlwLT5xbGlfaXRlbS5saV9sc24gPT0gcWlwLT5xbGlfZmx1c2hfbHNuKSB7Ci0KLQkJLyogeGZzX3RyYW5zX2FpbF9kZWxldGUoKSBkcm9wcyB0aGUgQUlMIGxvY2suICovCi0JCXNwaW5fbG9jaygmYWlscC0+eGFfbG9jayk7Ci0JCWlmIChxaXAtPnFsaV9pdGVtLmxpX2xzbiA9PSBxaXAtPnFsaV9mbHVzaF9sc24pCi0JCQl4ZnNfdHJhbnNfYWlsX2RlbGV0ZShhaWxwLCAoeGZzX2xvZ19pdGVtX3QqKXFpcCk7Ci0JCWVsc2UKLQkJCXNwaW5fdW5sb2NrKCZhaWxwLT54YV9sb2NrKTsKLQl9Ci0KLQkvKgotCSAqIFJlbGVhc2UgdGhlIGRxJ3MgZmx1c2ggbG9jayBzaW5jZSB3ZSdyZSBkb25lIHdpdGggaXQuCi0JICovCi0JeGZzX2RxZnVubG9jayhkcXApOwotfQotCiBpbnQKIHhmc19xbV9kcWxvY2tfbm93YWl0KAogCXhmc19kcXVvdF90ICpkcXApCmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX2RxdW90X2l0ZW0uYyBiL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3RfaXRlbS5jCmluZGV4IDhkODlhMjQuLjJhMWYzZGMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3RfaXRlbS5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3RfaXRlbS5jCkBAIC0yMyw0MiArMjMsMzYgQEAKICNpbmNsdWRlICJ4ZnNfdHJhbnMuaCIKICNpbmNsdWRlICJ4ZnNfc2IuaCIKICNpbmNsdWRlICJ4ZnNfYWcuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMi5oIgogI2luY2x1ZGUgInhmc19hbGxvYy5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19xdW90YS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc19ibWFwX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2FsbG9jX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2lhbGxvY19idHJlZS5oIgotI2luY2x1ZGUgInhmc19kaXIyX3NmLmgiCi0jaW5jbHVkZSAieGZzX2F0dHJfc2YuaCIKLSNpbmNsdWRlICJ4ZnNfZGlub2RlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlLmgiCiAjaW5jbHVkZSAieGZzX2JtYXAuaCIKLSNpbmNsdWRlICJ4ZnNfYnRyZWUuaCIKLSNpbmNsdWRlICJ4ZnNfaWFsbG9jLmgiCiAjaW5jbHVkZSAieGZzX3J0YWxsb2MuaCIKICNpbmNsdWRlICJ4ZnNfZXJyb3IuaCIKICNpbmNsdWRlICJ4ZnNfaXRhYmxlLmgiCi0jaW5jbHVkZSAieGZzX3J3LmgiCiAjaW5jbHVkZSAieGZzX2F0dHIuaCIKICNpbmNsdWRlICJ4ZnNfYnVmX2l0ZW0uaCIKICNpbmNsdWRlICJ4ZnNfdHJhbnNfcHJpdi5oIgogI2luY2x1ZGUgInhmc19xbS5oIgogCitzdGF0aWMgaW5saW5lIHN0cnVjdCB4ZnNfZHFfbG9naXRlbSAqRFFVT1RfSVRFTShzdHJ1Y3QgeGZzX2xvZ19pdGVtICpsaXApCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihsaXAsIHN0cnVjdCB4ZnNfZHFfbG9naXRlbSwgcWxpX2l0ZW0pOworfQorCiAvKgogICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGlvdmVjcyBuZWVkZWQgdG8gbG9nIHRoZSBnaXZlbiBkcXVvdCBpdGVtLgogICovCi0vKiBBUkdTVVNFRCAqLwogU1RBVElDIHVpbnQKIHhmc19xbV9kcXVvdF9sb2dpdGVtX3NpemUoCi0JeGZzX2RxX2xvZ2l0ZW1fdAkqbG9naXRlbSkKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXApCiB7CiAJLyoKIAkgKiB3ZSBuZWVkIG9ubHkgdHdvIGlvdmVjcywgb25lIGZvciB0aGUgZm9ybWF0LCBvbmUgZm9yIHRoZSByZWFsIHRoaW5nCiAJICovCi0JcmV0dXJuICgyKTsKKwlyZXR1cm4gMjsKIH0KIAogLyoKQEAgLTY2LDIyICs2MCwyMSBAQAogICovCiBTVEFUSUMgdm9pZAogeGZzX3FtX2RxdW90X2xvZ2l0ZW1fZm9ybWF0KAotCXhmc19kcV9sb2dpdGVtX3QJKmxvZ2l0ZW0sCi0JeGZzX2xvZ19pb3ZlY190CQkqbG9ndmVjKQorCXN0cnVjdCB4ZnNfbG9nX2l0ZW0JKmxpcCwKKwlzdHJ1Y3QgeGZzX2xvZ19pb3ZlYwkqbG9ndmVjKQogewotCUFTU0VSVChsb2dpdGVtKTsKLQlBU1NFUlQobG9naXRlbS0+cWxpX2RxdW90KTsKKwlzdHJ1Y3QgeGZzX2RxX2xvZ2l0ZW0JKnFsaXAgPSBEUVVPVF9JVEVNKGxpcCk7CiAKLQlsb2d2ZWMtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmbG9naXRlbS0+cWxpX2Zvcm1hdDsKKwlsb2d2ZWMtPmlfYWRkciA9ICZxbGlwLT5xbGlfZm9ybWF0OwogCWxvZ3ZlYy0+aV9sZW4gID0gc2l6ZW9mKHhmc19kcV9sb2dmb3JtYXRfdCk7CiAJbG9ndmVjLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX1FGT1JNQVQ7CiAJbG9ndmVjKys7Ci0JbG9ndmVjLT5pX2FkZHIgPSAoeGZzX2NhZGRyX3QpJmxvZ2l0ZW0tPnFsaV9kcXVvdC0+cV9jb3JlOworCWxvZ3ZlYy0+aV9hZGRyID0gJnFsaXAtPnFsaV9kcXVvdC0+cV9jb3JlOwogCWxvZ3ZlYy0+aV9sZW4gID0gc2l6ZW9mKHhmc19kaXNrX2RxdW90X3QpOwogCWxvZ3ZlYy0+aV90eXBlID0gWExPR19SRUdfVFlQRV9EUVVPVDsKIAotCUFTU0VSVCgyID09IGxvZ2l0ZW0tPnFsaV9pdGVtLmxpX2Rlc2MtPmxpZF9zaXplKTsKLQlsb2dpdGVtLT5xbGlfZm9ybWF0LnFsZl9zaXplID0gMjsKKwlBU1NFUlQoMiA9PSBsaXAtPmxpX2Rlc2MtPmxpZF9zaXplKTsKKwlxbGlwLT5xbGlfZm9ybWF0LnFsZl9zaXplID0gMjsKIAogfQogCkBAIC05MCw5ICs4Myw5IEBACiAgKi8KIFNUQVRJQyB2b2lkCiB4ZnNfcW1fZHF1b3RfbG9naXRlbV9waW4oCi0JeGZzX2RxX2xvZ2l0ZW1fdCAqbG9naXRlbSkKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXApCiB7Ci0JeGZzX2RxdW90X3QgKmRxcCA9IGxvZ2l0ZW0tPnFsaV9kcXVvdDsKKwlzdHJ1Y3QgeGZzX2RxdW90CSpkcXAgPSBEUVVPVF9JVEVNKGxpcCktPnFsaV9kcXVvdDsKIAogCUFTU0VSVChYRlNfRFFfSVNfTE9DS0VEKGRxcCkpOwogCWF0b21pY19pbmMoJmRxcC0+cV9waW5jb3VudCk7CkBAIC0xMDQsMjcgKzk3LDE4IEBACiAgKiBkcXVvdCBtdXN0IGhhdmUgYmVlbiBwcmV2aW91c2x5IHBpbm5lZCB3aXRoIGEgY2FsbCB0bwogICogeGZzX3FtX2RxdW90X2xvZ2l0ZW1fcGluKCkuCiAgKi8KLS8qIEFSR1NVU0VEICovCiBTVEFUSUMgdm9pZAogeGZzX3FtX2RxdW90X2xvZ2l0ZW1fdW5waW4oCi0JeGZzX2RxX2xvZ2l0ZW1fdCAqbG9naXRlbSkKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXAsCisJaW50CQkJcmVtb3ZlKQogewotCXhmc19kcXVvdF90ICpkcXAgPSBsb2dpdGVtLT5xbGlfZHF1b3Q7CisJc3RydWN0IHhmc19kcXVvdAkqZHFwID0gRFFVT1RfSVRFTShsaXApLT5xbGlfZHF1b3Q7CiAKIAlBU1NFUlQoYXRvbWljX3JlYWQoJmRxcC0+cV9waW5jb3VudCkgPiAwKTsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZHFwLT5xX3BpbmNvdW50KSkKIAkJd2FrZV91cCgmZHFwLT5xX3BpbndhaXQpOwogfQogCi0vKiBBUkdTVVNFRCAqLwotU1RBVElDIHZvaWQKLXhmc19xbV9kcXVvdF9sb2dpdGVtX3VucGluX3JlbW92ZSgKLQl4ZnNfZHFfbG9naXRlbV90ICpsb2dpdGVtLAotCXhmc190cmFuc190CSAqdHApCi17Ci0JeGZzX3FtX2RxdW90X2xvZ2l0ZW1fdW5waW4obG9naXRlbSk7Ci19Ci0KIC8qCiAgKiBHaXZlbiB0aGUgbG9naXRlbSwgdGhpcyB3cml0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgZHF1b3QgZW50cnkgdG8gZGlzawogICogYXN5bmNocm9ub3VzbHkuIFRoaXMgaXMgY2FsbGVkIHdpdGggdGhlIGRxdW90IGVudHJ5IHNlY3VyZWx5IGxvY2tlZDsKQEAgLTEzMywxMiArMTE3LDEwIEBACiAgKi8KIFNUQVRJQyB2b2lkCiB4ZnNfcW1fZHF1b3RfbG9naXRlbV9wdXNoKAotCXhmc19kcV9sb2dpdGVtX3QJKmxvZ2l0ZW0pCisJc3RydWN0IHhmc19sb2dfaXRlbQkqbGlwKQogewotCXhmc19kcXVvdF90CSpkcXA7Ci0JaW50CQllcnJvcjsKLQotCWRxcCA9IGxvZ2l0ZW0tPnFsaV9kcXVvdDsKKwlzdHJ1Y3QgeGZzX2RxdW90CSpkcXAgPSBEUVVPVF9JVEVNKGxpcCktPnFsaV9kcXVvdDsKKwlpbnQJCQllcnJvcjsKIAogCUFTU0VSVChYRlNfRFFfSVNfTE9DS0VEKGRxcCkpOwogCUFTU0VSVCghY29tcGxldGlvbl9kb25lKCZkcXAtPnFfZmx1c2gpKTsKQEAgLTE2MCwyNyArMTQyLDI1IEBACiAJeGZzX2RxdW5sb2NrKGRxcCk7CiB9CiAKLS8qQVJHU1VTRUQqLwogU1RBVElDIHhmc19sc25fdAogeGZzX3FtX2RxdW90X2xvZ2l0ZW1fY29tbWl0dGVkKAotCXhmc19kcV9sb2dpdGVtX3QJKmwsCisJc3RydWN0IHhmc19sb2dfaXRlbQkqbGlwLAogCXhmc19sc25fdAkJbHNuKQogewogCS8qCiAJICogV2UgYWx3YXlzIHJlLWxvZyB0aGUgZW50aXJlIGRxdW90IHdoZW4gaXQgYmVjb21lcyBkaXJ0eSwKIAkgKiBzbywgdGhlIGxhdGVzdCBjb3B5IF9pc18gdGhlIG9ubHkgb25lIHRoYXQgbWF0dGVycy4KIAkgKi8KLQlyZXR1cm4gKGxzbik7CisJcmV0dXJuIGxzbjsKIH0KIAotCiAvKgogICogVGhpcyBpcyBjYWxsZWQgdG8gd2FpdCBmb3IgdGhlIGdpdmVuIGRxdW90IHRvIGJlIHVucGlubmVkLgogICogTW9zdCBvZiB0aGVzZSBwaW4vdW5waW4gcm91dGluZXMgYXJlIHBsYWdpYXJpemVkIGZyb20gaW5vZGUgY29kZS4KICAqLwogdm9pZAogeGZzX3FtX2RxdW5waW5fd2FpdCgKLQl4ZnNfZHF1b3RfdAkqZHFwKQorCXN0cnVjdCB4ZnNfZHF1b3QJKmRxcCkKIHsKIAlBU1NFUlQoWEZTX0RRX0lTX0xPQ0tFRChkcXApKTsKIAlpZiAoYXRvbWljX3JlYWQoJmRxcC0+cV9waW5jb3VudCkgPT0gMCkKQEAgLTIwNiwxMyArMTg2LDEyIEBACiAgKi8KIFNUQVRJQyB2b2lkCiB4ZnNfcW1fZHF1b3RfbG9naXRlbV9wdXNoYnVmKAotCXhmc19kcV9sb2dpdGVtX3QgICAgKnFpcCkKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXApCiB7Ci0JeGZzX2RxdW90X3QJKmRxcDsKLQl4ZnNfbW91bnRfdAkqbXA7Ci0JeGZzX2J1Zl90CSpicDsKKwlzdHJ1Y3QgeGZzX2RxX2xvZ2l0ZW0JKnFsaXAgPSBEUVVPVF9JVEVNKGxpcCk7CisJc3RydWN0IHhmc19kcXVvdAkqZHFwID0gcWxpcC0+cWxpX2RxdW90OworCXN0cnVjdCB4ZnNfYnVmCQkqYnA7CiAKLQlkcXAgPSBxaXAtPnFsaV9kcXVvdDsKIAlBU1NFUlQoWEZTX0RRX0lTX0xPQ0tFRChkcXApKTsKIAogCS8qCkBAIC0yMjAsMjIgKzE5OSwyMCBAQAogCSAqIGlub2RlIGZsdXNoIGNvbXBsZXRlZCBhbmQgdGhlIGlub2RlIHdhcyB0YWtlbiBvZmYgdGhlIEFJTC4KIAkgKiBTbywganVzdCBnZXQgb3V0LgogCSAqLwotCWlmIChjb21wbGV0aW9uX2RvbmUoJmRxcC0+cV9mbHVzaCkgIHx8Ci0JICAgICgocWlwLT5xbGlfaXRlbS5saV9mbGFncyAmIFhGU19MSV9JTl9BSUwpID09IDApKSB7CisJaWYgKGNvbXBsZXRpb25fZG9uZSgmZHFwLT5xX2ZsdXNoKSB8fAorCSAgICAhKGxpcC0+bGlfZmxhZ3MgJiBYRlNfTElfSU5fQUlMKSkgewogCQl4ZnNfZHF1bmxvY2soZHFwKTsKIAkJcmV0dXJuOwogCX0KLQltcCA9IGRxcC0+cV9tb3VudDsKLQlicCA9IHhmc19pbmNvcmUobXAtPm1fZGRldl90YXJncCwgcWlwLT5xbGlfZm9ybWF0LnFsZl9ibGtubywKLQkJCW1wLT5tX3F1b3RhaW5mby0+cWlfZHFjaHVua2xlbiwgWEJGX1RSWUxPQ0spOworCisJYnAgPSB4ZnNfaW5jb3JlKGRxcC0+cV9tb3VudC0+bV9kZGV2X3RhcmdwLCBxbGlwLT5xbGlfZm9ybWF0LnFsZl9ibGtubywKKwkJCWRxcC0+cV9tb3VudC0+bV9xdW90YWluZm8tPnFpX2RxY2h1bmtsZW4sIFhCRl9UUllMT0NLKTsKIAl4ZnNfZHF1bmxvY2soZHFwKTsKIAlpZiAoIWJwKQogCQlyZXR1cm47CiAJaWYgKFhGU19CVUZfSVNERUxBWVdSSVRFKGJwKSkKIAkJeGZzX2J1Zl9kZWx3cmlfcHJvbW90ZShicCk7CiAJeGZzX2J1Zl9yZWxzZShicCk7Ci0JcmV0dXJuOwotCiB9CiAKIC8qCkBAIC0yNTAsMTUgKzIyNywxNCBAQAogICovCiBTVEFUSUMgdWludAogeGZzX3FtX2RxdW90X2xvZ2l0ZW1fdHJ5bG9jaygKLQl4ZnNfZHFfbG9naXRlbV90CSpxaXApCisJc3RydWN0IHhmc19sb2dfaXRlbQkqbGlwKQogewotCXhmc19kcXVvdF90CQkqZHFwOworCXN0cnVjdCB4ZnNfZHF1b3QJKmRxcCA9IERRVU9UX0lURU0obGlwKS0+cWxpX2RxdW90OwogCi0JZHFwID0gcWlwLT5xbGlfZHF1b3Q7CiAJaWYgKGF0b21pY19yZWFkKCZkcXAtPnFfcGluY291bnQpID4gMCkKIAkJcmV0dXJuIFhGU19JVEVNX1BJTk5FRDsKIAotCWlmICghIHhmc19xbV9kcWxvY2tfbm93YWl0KGRxcCkpCisJaWYgKCF4ZnNfcW1fZHFsb2NrX25vd2FpdChkcXApKQogCQlyZXR1cm4gWEZTX0lURU1fTE9DS0VEOwogCiAJaWYgKCF4ZnNfZHFmbG9ja19ub3dhaXQoZHFwKSkgewpAQCAtMjY5LDExICsyNDUsMTAgQEAKIAkJcmV0dXJuIFhGU19JVEVNX1BVU0hCVUY7CiAJfQogCi0JQVNTRVJUKHFpcC0+cWxpX2l0ZW0ubGlfZmxhZ3MgJiBYRlNfTElfSU5fQUlMKTsKKwlBU1NFUlQobGlwLT5saV9mbGFncyAmIFhGU19MSV9JTl9BSUwpOwogCXJldHVybiBYRlNfSVRFTV9TVUNDRVNTOwogfQogCi0KIC8qCiAgKiBVbmxvY2sgdGhlIGRxdW90IGFzc29jaWF0ZWQgd2l0aCB0aGUgbG9nIGl0ZW0uCiAgKiBDbGVhciB0aGUgZmllbGRzIG9mIHRoZSBkcXVvdCBhbmQgZHF1b3QgbG9nIGl0ZW0gdGhhdApAQCAtMjgyLDEyICsyNTcsMTAgQEAKICAqLwogU1RBVElDIHZvaWQKIHhmc19xbV9kcXVvdF9sb2dpdGVtX3VubG9jaygKLQl4ZnNfZHFfbG9naXRlbV90ICAgICpxbCkKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXApCiB7Ci0JeGZzX2RxdW90X3QJKmRxcDsKKwlzdHJ1Y3QgeGZzX2RxdW90CSpkcXAgPSBEUVVPVF9JVEVNKGxpcCktPnFsaV9kcXVvdDsKIAotCUFTU0VSVChxbCAhPSBOVUxMKTsKLQlkcXAgPSBxbC0+cWxpX2RxdW90OwogCUFTU0VSVChYRlNfRFFfSVNfTE9DS0VEKGRxcCkpOwogCiAJLyoKQEAgLTMwNCw0MyArMjc3LDMyIEBACiAJeGZzX2RxdW5sb2NrKGRxcCk7CiB9CiAKLQogLyoKICAqIHRoaXMgbmVlZHMgdG8gc3RhbXAgYW4gbHNuIGludG8gdGhlIGRxdW90LCBJIHRoaW5rLgogICogcnBjJ3MgdGhhdCBsb29rIGF0IHVzZXIgZHF1b3QncyB3b3VsZCB0aGVuIGhhdmUgdG8KICAqIHB1c2ggb24gdGhlIGRlcGVuZGVuY3kgcmVjb3JkZWQgaW4gdGhlIGRxdW90CiAgKi8KLS8qIEFSR1NVU0VEICovCiBTVEFUSUMgdm9pZAogeGZzX3FtX2RxdW90X2xvZ2l0ZW1fY29tbWl0dGluZygKLQl4ZnNfZHFfbG9naXRlbV90CSpsLAorCXN0cnVjdCB4ZnNfbG9nX2l0ZW0JKmxpcCwKIAl4ZnNfbHNuX3QJCWxzbikKIHsKLQlyZXR1cm47CiB9CiAKLQogLyoKICAqIFRoaXMgaXMgdGhlIG9wcyB2ZWN0b3IgZm9yIGRxdW90cwogICovCiBzdGF0aWMgc3RydWN0IHhmc19pdGVtX29wcyB4ZnNfZHF1b3RfaXRlbV9vcHMgPSB7Ci0JLmlvcF9zaXplCT0gKHVpbnQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfcW1fZHF1b3RfbG9naXRlbV9zaXplLAotCS5pb3BfZm9ybWF0CT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqLCB4ZnNfbG9nX2lvdmVjX3QqKSkKLQkJCQkJeGZzX3FtX2RxdW90X2xvZ2l0ZW1fZm9ybWF0LAotCS5pb3BfcGluCT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfcW1fZHF1b3RfbG9naXRlbV9waW4sCi0JLmlvcF91bnBpbgk9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KikpeGZzX3FtX2RxdW90X2xvZ2l0ZW1fdW5waW4sCi0JLmlvcF91bnBpbl9yZW1vdmUgPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCosIHhmc190cmFuc190KikpCi0JCQkJCXhmc19xbV9kcXVvdF9sb2dpdGVtX3VucGluX3JlbW92ZSwKLQkuaW9wX3RyeWxvY2sJPSAodWludCgqKSh4ZnNfbG9nX2l0ZW1fdCopKQotCQkJCQl4ZnNfcW1fZHF1b3RfbG9naXRlbV90cnlsb2NrLAotCS5pb3BfdW5sb2NrCT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfcW1fZHF1b3RfbG9naXRlbV91bmxvY2ssCi0JLmlvcF9jb21taXR0ZWQJPSAoeGZzX2xzbl90KCopKHhmc19sb2dfaXRlbV90KiwgeGZzX2xzbl90KSkKLQkJCQkJeGZzX3FtX2RxdW90X2xvZ2l0ZW1fY29tbWl0dGVkLAotCS5pb3BfcHVzaAk9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KikpeGZzX3FtX2RxdW90X2xvZ2l0ZW1fcHVzaCwKLQkuaW9wX3B1c2hidWYJPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCopKQotCQkJCQl4ZnNfcW1fZHF1b3RfbG9naXRlbV9wdXNoYnVmLAotCS5pb3BfY29tbWl0dGluZyA9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KiwgeGZzX2xzbl90KSkKLQkJCQkJeGZzX3FtX2RxdW90X2xvZ2l0ZW1fY29tbWl0dGluZworCS5pb3Bfc2l6ZQk9IHhmc19xbV9kcXVvdF9sb2dpdGVtX3NpemUsCisJLmlvcF9mb3JtYXQJPSB4ZnNfcW1fZHF1b3RfbG9naXRlbV9mb3JtYXQsCisJLmlvcF9waW4JPSB4ZnNfcW1fZHF1b3RfbG9naXRlbV9waW4sCisJLmlvcF91bnBpbgk9IHhmc19xbV9kcXVvdF9sb2dpdGVtX3VucGluLAorCS5pb3BfdHJ5bG9jawk9IHhmc19xbV9kcXVvdF9sb2dpdGVtX3RyeWxvY2ssCisJLmlvcF91bmxvY2sJPSB4ZnNfcW1fZHF1b3RfbG9naXRlbV91bmxvY2ssCisJLmlvcF9jb21taXR0ZWQJPSB4ZnNfcW1fZHF1b3RfbG9naXRlbV9jb21taXR0ZWQsCisJLmlvcF9wdXNoCT0geGZzX3FtX2RxdW90X2xvZ2l0ZW1fcHVzaCwKKwkuaW9wX3B1c2hidWYJPSB4ZnNfcW1fZHF1b3RfbG9naXRlbV9wdXNoYnVmLAorCS5pb3BfY29tbWl0dGluZyA9IHhmc19xbV9kcXVvdF9sb2dpdGVtX2NvbW1pdHRpbmcKIH07CiAKIC8qCkBAIC0zNTAsMTAgKzMxMiw5IEBACiAgKi8KIHZvaWQKIHhmc19xbV9kcXVvdF9sb2dpdGVtX2luaXQoCi0Jc3RydWN0IHhmc19kcXVvdCAqZHFwKQorCXN0cnVjdCB4ZnNfZHF1b3QJKmRxcCkKIHsKLQl4ZnNfZHFfbG9naXRlbV90ICAqbHA7Ci0JbHAgPSAmZHFwLT5xX2xvZ2l0ZW07CisJc3RydWN0IHhmc19kcV9sb2dpdGVtCSpscCA9ICZkcXAtPnFfbG9naXRlbTsKIAogCXhmc19sb2dfaXRlbV9pbml0KGRxcC0+cV9tb3VudCwgJmxwLT5xbGlfaXRlbSwgWEZTX0xJX0RRVU9ULAogCQkJCQkmeGZzX2RxdW90X2l0ZW1fb3BzKTsKQEAgLTM3NCwxNiArMzM1LDIyIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tICBRVU9UQU9GRiBMT0cgSVRFTVMgIC0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCB4ZnNfcW9mZl9sb2dpdGVtICpRT0ZGX0lURU0oc3RydWN0IHhmc19sb2dfaXRlbSAqbGlwKQoreworCXJldHVybiBjb250YWluZXJfb2YobGlwLCBzdHJ1Y3QgeGZzX3FvZmZfbG9naXRlbSwgcXFsX2l0ZW0pOworfQorCisKIC8qCiAgKiBUaGlzIHJldHVybnMgdGhlIG51bWJlciBvZiBpb3ZlY3MgbmVlZGVkIHRvIGxvZyB0aGUgZ2l2ZW4gcXVvdGFvZmYgaXRlbS4KICAqIFdlIG9ubHkgbmVlZCAxIGlvdmVjIGZvciBhbiBxdW90YW9mZiBpdGVtLiAgSXQganVzdCBsb2dzIHRoZQogICogcXVvdGFvZmZfbG9nX2Zvcm1hdCBzdHJ1Y3R1cmUuCiAgKi8KLS8qQVJHU1VTRUQqLwogU1RBVElDIHVpbnQKLXhmc19xbV9xb2ZmX2xvZ2l0ZW1fc2l6ZSh4ZnNfcW9mZl9sb2dpdGVtX3QgKnFmKQoreGZzX3FtX3FvZmZfbG9naXRlbV9zaXplKAorCXN0cnVjdCB4ZnNfbG9nX2l0ZW0JKmxpcCkKIHsKLQlyZXR1cm4gKDEpOworCXJldHVybiAxOwogfQogCiAvKgpAQCAtMzk0LDUzICszNjEsNDYgQEAKICAqIHNsb3RzIGluIHRoZSBxdW90YW9mZiBpdGVtIGhhdmUgYmVlbiBmaWxsZWQuCiAgKi8KIFNUQVRJQyB2b2lkCi14ZnNfcW1fcW9mZl9sb2dpdGVtX2Zvcm1hdCh4ZnNfcW9mZl9sb2dpdGVtX3QJKnFmLAotCQkJICAgeGZzX2xvZ19pb3ZlY190CSpsb2dfdmVjdG9yKQoreGZzX3FtX3FvZmZfbG9naXRlbV9mb3JtYXQoCisJc3RydWN0IHhmc19sb2dfaXRlbQkqbGlwLAorCXN0cnVjdCB4ZnNfbG9nX2lvdmVjCSpsb2dfdmVjdG9yKQogewotCUFTU0VSVChxZi0+cXFsX2Zvcm1hdC5xZl90eXBlID09IFhGU19MSV9RVU9UQU9GRik7CisJc3RydWN0IHhmc19xb2ZmX2xvZ2l0ZW0JKnFmbGlwID0gUU9GRl9JVEVNKGxpcCk7CiAKLQlsb2dfdmVjdG9yLT5pX2FkZHIgPSAoeGZzX2NhZGRyX3QpJihxZi0+cXFsX2Zvcm1hdCk7CisJQVNTRVJUKHFmbGlwLT5xcWxfZm9ybWF0LnFmX3R5cGUgPT0gWEZTX0xJX1FVT1RBT0ZGKTsKKworCWxvZ192ZWN0b3ItPmlfYWRkciA9ICZxZmxpcC0+cXFsX2Zvcm1hdDsKIAlsb2dfdmVjdG9yLT5pX2xlbiA9IHNpemVvZih4ZnNfcW9mZl9sb2dpdGVtX3QpOwogCWxvZ192ZWN0b3ItPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfUVVPVEFPRkY7Ci0JcWYtPnFxbF9mb3JtYXQucWZfc2l6ZSA9IDE7CisJcWZsaXAtPnFxbF9mb3JtYXQucWZfc2l6ZSA9IDE7CiB9CiAKLQogLyoKICAqIFBpbm5pbmcgaGFzIG5vIG1lYW5pbmcgZm9yIGFuIHF1b3Rhb2ZmIGl0ZW0sIHNvIGp1c3QgcmV0dXJuLgogICovCi0vKkFSR1NVU0VEKi8KIFNUQVRJQyB2b2lkCi14ZnNfcW1fcW9mZl9sb2dpdGVtX3Bpbih4ZnNfcW9mZl9sb2dpdGVtX3QgKnFmKQoreGZzX3FtX3FvZmZfbG9naXRlbV9waW4oCisJc3RydWN0IHhmc19sb2dfaXRlbQkqbGlwKQogewotCXJldHVybjsKIH0KIAotCiAvKgogICogU2luY2UgcGlubmluZyBoYXMgbm8gbWVhbmluZyBmb3IgYW4gcXVvdGFvZmYgaXRlbSwgdW5waW5uaW5nIGRvZXMKICAqIG5vdCBlaXRoZXIuCiAgKi8KLS8qQVJHU1VTRUQqLwogU1RBVElDIHZvaWQKLXhmc19xbV9xb2ZmX2xvZ2l0ZW1fdW5waW4oeGZzX3FvZmZfbG9naXRlbV90ICpxZikKK3hmc19xbV9xb2ZmX2xvZ2l0ZW1fdW5waW4oCisJc3RydWN0IHhmc19sb2dfaXRlbQkqbGlwLAorCWludAkJCXJlbW92ZSkKIHsKLQlyZXR1cm47Ci19Ci0KLS8qQVJHU1VTRUQqLwotU1RBVElDIHZvaWQKLXhmc19xbV9xb2ZmX2xvZ2l0ZW1fdW5waW5fcmVtb3ZlKHhmc19xb2ZmX2xvZ2l0ZW1fdCAqcWYsIHhmc190cmFuc190ICp0cCkKLXsKLQlyZXR1cm47CiB9CiAKIC8qCiAgKiBRdW90YW9mZiBpdGVtcyBoYXZlIG5vIGxvY2tpbmcsIHNvIGp1c3QgcmV0dXJuIHN1Y2Nlc3MuCiAgKi8KLS8qQVJHU1VTRUQqLwogU1RBVElDIHVpbnQKLXhmc19xbV9xb2ZmX2xvZ2l0ZW1fdHJ5bG9jayh4ZnNfcW9mZl9sb2dpdGVtX3QgKnFmKQoreGZzX3FtX3FvZmZfbG9naXRlbV90cnlsb2NrKAorCXN0cnVjdCB4ZnNfbG9nX2l0ZW0JKmxpcCkKIHsKIAlyZXR1cm4gWEZTX0lURU1fTE9DS0VEOwogfQpAQCAtNDQ5LDUzICs0MDksNTEgQEAKICAqIFF1b3Rhb2ZmIGl0ZW1zIGhhdmUgbm8gbG9ja2luZyBvciBwdXNoaW5nLCBzbyByZXR1cm4gZmFpbHVyZQogICogc28gdGhhdCB0aGUgY2FsbGVyIGRvZXNuJ3QgYm90aGVyIHdpdGggdXMuCiAgKi8KLS8qQVJHU1VTRUQqLwogU1RBVElDIHZvaWQKLXhmc19xbV9xb2ZmX2xvZ2l0ZW1fdW5sb2NrKHhmc19xb2ZmX2xvZ2l0ZW1fdCAqcWYpCit4ZnNfcW1fcW9mZl9sb2dpdGVtX3VubG9jaygKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXApCiB7Ci0JcmV0dXJuOwogfQogCiAvKgogICogVGhlIHF1b3Rhb2ZmLXN0YXJ0LWl0ZW0gaXMgbG9nZ2VkIG9ubHkgb25jZSBhbmQgY2Fubm90IGJlIG1vdmVkIGluIHRoZSBsb2csCiAgKiBzbyBzaW1wbHkgcmV0dXJuIHRoZSBsc24gYXQgd2hpY2ggaXQncyBiZWVuIGxvZ2dlZC4KICAqLwotLypBUkdTVVNFRCovCiBTVEFUSUMgeGZzX2xzbl90Ci14ZnNfcW1fcW9mZl9sb2dpdGVtX2NvbW1pdHRlZCh4ZnNfcW9mZl9sb2dpdGVtX3QgKnFmLCB4ZnNfbHNuX3QgbHNuKQoreGZzX3FtX3FvZmZfbG9naXRlbV9jb21taXR0ZWQoCisJc3RydWN0IHhmc19sb2dfaXRlbQkqbGlwLAorCXhmc19sc25fdAkJbHNuKQogewotCXJldHVybiAobHNuKTsKKwlyZXR1cm4gbHNuOwogfQogCiAvKgogICogVGhlcmUgaXNuJ3QgbXVjaCB5b3UgY2FuIGRvIHRvIHB1c2ggb24gYW4gcXVvdGFvZmYgaXRlbS4gIEl0IGlzIHNpbXBseQogICogc3R1Y2sgd2FpdGluZyBmb3IgdGhlIGxvZyB0byBiZSBmbHVzaGVkIHRvIGRpc2suCiAgKi8KLS8qQVJHU1VTRUQqLwogU1RBVElDIHZvaWQKLXhmc19xbV9xb2ZmX2xvZ2l0ZW1fcHVzaCh4ZnNfcW9mZl9sb2dpdGVtX3QgKnFmKQoreGZzX3FtX3FvZmZfbG9naXRlbV9wdXNoKAorCXN0cnVjdCB4ZnNfbG9nX2l0ZW0JKmxpcCkKIHsKLQlyZXR1cm47CiB9CiAKIAotLypBUkdTVVNFRCovCiBTVEFUSUMgeGZzX2xzbl90CiB4ZnNfcW1fcW9mZmVuZF9sb2dpdGVtX2NvbW1pdHRlZCgKLQl4ZnNfcW9mZl9sb2dpdGVtX3QgKnFmZSwKLQl4ZnNfbHNuX3QgbHNuKQorCXN0cnVjdCB4ZnNfbG9nX2l0ZW0JKmxpcCwKKwl4ZnNfbHNuX3QJCWxzbikKIHsKLQl4ZnNfcW9mZl9sb2dpdGVtX3QJKnFmczsKLQlzdHJ1Y3QgeGZzX2FpbAkJKmFpbHA7CisJc3RydWN0IHhmc19xb2ZmX2xvZ2l0ZW0JKnFmZSA9IFFPRkZfSVRFTShsaXApOworCXN0cnVjdCB4ZnNfcW9mZl9sb2dpdGVtCSpxZnMgPSBxZmUtPnFxbF9zdGFydF9saXA7CisJc3RydWN0IHhmc19haWwJCSphaWxwID0gcWZzLT5xcWxfaXRlbS5saV9haWxwOwogCi0JcWZzID0gcWZlLT5xcWxfc3RhcnRfbGlwOwotCWFpbHAgPSBxZnMtPnFxbF9pdGVtLmxpX2FpbHA7Ci0Jc3Bpbl9sb2NrKCZhaWxwLT54YV9sb2NrKTsKIAkvKgogCSAqIERlbGV0ZSB0aGUgcW9mZi1zdGFydCBsb2dpdGVtIGZyb20gdGhlIEFJTC4KIAkgKiB4ZnNfdHJhbnNfYWlsX2RlbGV0ZSgpIGRyb3BzIHRoZSBBSUwgbG9jay4KIAkgKi8KKwlzcGluX2xvY2soJmFpbHAtPnhhX2xvY2spOwogCXhmc190cmFuc19haWxfZGVsZXRlKGFpbHAsICh4ZnNfbG9nX2l0ZW1fdCAqKXFmcyk7CisKIAlrbWVtX2ZyZWUocWZzKTsKIAlrbWVtX2ZyZWUocWZlKTsKIAlyZXR1cm4gKHhmc19sc25fdCktMTsKQEAgLTUxNSw3MSArNDczLDUyIEBACiAgKiAodHJ1bHkgbWFrZXMgdGhlIHF1b3Rhb2ZmIGlycmV2b2NhYmxlKS4gIElmIHdlIGRvIHNvbWV0aGluZyBlbHNlLAogICogdGhlbiBtYXliZSB3ZSBkb24ndCBuZWVkIHR3by4KICAqLwotLyogQVJHU1VTRUQgKi8KIFNUQVRJQyB2b2lkCi14ZnNfcW1fcW9mZl9sb2dpdGVtX2NvbW1pdHRpbmcoeGZzX3FvZmZfbG9naXRlbV90ICpxaXAsIHhmc19sc25fdCBjb21taXRfbHNuKQoreGZzX3FtX3FvZmZfbG9naXRlbV9jb21taXR0aW5nKAorCXN0cnVjdCB4ZnNfbG9nX2l0ZW0JKmxpcCwKKwl4ZnNfbHNuX3QJCWNvbW1pdF9sc24pCiB7Ci0JcmV0dXJuOwotfQotCi0vKiBBUkdTVVNFRCAqLwotU1RBVElDIHZvaWQKLXhmc19xbV9xb2ZmZW5kX2xvZ2l0ZW1fY29tbWl0dGluZyh4ZnNfcW9mZl9sb2dpdGVtX3QgKnFpcCwgeGZzX2xzbl90IGNvbW1pdF9sc24pCi17Ci0JcmV0dXJuOwogfQogCiBzdGF0aWMgc3RydWN0IHhmc19pdGVtX29wcyB4ZnNfcW1fcW9mZmVuZF9sb2dpdGVtX29wcyA9IHsKLQkuaW9wX3NpemUJPSAodWludCgqKSh4ZnNfbG9nX2l0ZW1fdCopKXhmc19xbV9xb2ZmX2xvZ2l0ZW1fc2l6ZSwKLQkuaW9wX2Zvcm1hdAk9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KiwgeGZzX2xvZ19pb3ZlY190KikpCi0JCQkJCXhmc19xbV9xb2ZmX2xvZ2l0ZW1fZm9ybWF0LAotCS5pb3BfcGluCT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfcW1fcW9mZl9sb2dpdGVtX3BpbiwKLQkuaW9wX3VucGluCT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfcW1fcW9mZl9sb2dpdGVtX3VucGluLAotCS5pb3BfdW5waW5fcmVtb3ZlID0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqLHhmc190cmFuc190KikpCi0JCQkJCXhmc19xbV9xb2ZmX2xvZ2l0ZW1fdW5waW5fcmVtb3ZlLAotCS5pb3BfdHJ5bG9jawk9ICh1aW50KCopKHhmc19sb2dfaXRlbV90KikpeGZzX3FtX3FvZmZfbG9naXRlbV90cnlsb2NrLAotCS5pb3BfdW5sb2NrCT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfcW1fcW9mZl9sb2dpdGVtX3VubG9jaywKLQkuaW9wX2NvbW1pdHRlZAk9ICh4ZnNfbHNuX3QoKikoeGZzX2xvZ19pdGVtX3QqLCB4ZnNfbHNuX3QpKQotCQkJCQl4ZnNfcW1fcW9mZmVuZF9sb2dpdGVtX2NvbW1pdHRlZCwKLQkuaW9wX3B1c2gJPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCopKXhmc19xbV9xb2ZmX2xvZ2l0ZW1fcHVzaCwKLQkuaW9wX3B1c2hidWYJPSBOVUxMLAotCS5pb3BfY29tbWl0dGluZyA9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KiwgeGZzX2xzbl90KSkKLQkJCQkJeGZzX3FtX3FvZmZlbmRfbG9naXRlbV9jb21taXR0aW5nCisJLmlvcF9zaXplCT0geGZzX3FtX3FvZmZfbG9naXRlbV9zaXplLAorCS5pb3BfZm9ybWF0CT0geGZzX3FtX3FvZmZfbG9naXRlbV9mb3JtYXQsCisJLmlvcF9waW4JPSB4ZnNfcW1fcW9mZl9sb2dpdGVtX3BpbiwKKwkuaW9wX3VucGluCT0geGZzX3FtX3FvZmZfbG9naXRlbV91bnBpbiwKKwkuaW9wX3RyeWxvY2sJPSB4ZnNfcW1fcW9mZl9sb2dpdGVtX3RyeWxvY2ssCisJLmlvcF91bmxvY2sJPSB4ZnNfcW1fcW9mZl9sb2dpdGVtX3VubG9jaywKKwkuaW9wX2NvbW1pdHRlZAk9IHhmc19xbV9xb2ZmZW5kX2xvZ2l0ZW1fY29tbWl0dGVkLAorCS5pb3BfcHVzaAk9IHhmc19xbV9xb2ZmX2xvZ2l0ZW1fcHVzaCwKKwkuaW9wX2NvbW1pdHRpbmcgPSB4ZnNfcW1fcW9mZl9sb2dpdGVtX2NvbW1pdHRpbmcKIH07CiAKIC8qCiAgKiBUaGlzIGlzIHRoZSBvcHMgdmVjdG9yIHNoYXJlZCBieSBhbGwgcXVvdGFvZmYtc3RhcnQgbG9nIGl0ZW1zLgogICovCiBzdGF0aWMgc3RydWN0IHhmc19pdGVtX29wcyB4ZnNfcW1fcW9mZl9sb2dpdGVtX29wcyA9IHsKLQkuaW9wX3NpemUJPSAodWludCgqKSh4ZnNfbG9nX2l0ZW1fdCopKXhmc19xbV9xb2ZmX2xvZ2l0ZW1fc2l6ZSwKLQkuaW9wX2Zvcm1hdAk9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KiwgeGZzX2xvZ19pb3ZlY190KikpCi0JCQkJCXhmc19xbV9xb2ZmX2xvZ2l0ZW1fZm9ybWF0LAotCS5pb3BfcGluCT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfcW1fcW9mZl9sb2dpdGVtX3BpbiwKLQkuaW9wX3VucGluCT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfcW1fcW9mZl9sb2dpdGVtX3VucGluLAotCS5pb3BfdW5waW5fcmVtb3ZlID0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqLHhmc190cmFuc190KikpCi0JCQkJCXhmc19xbV9xb2ZmX2xvZ2l0ZW1fdW5waW5fcmVtb3ZlLAotCS5pb3BfdHJ5bG9jawk9ICh1aW50KCopKHhmc19sb2dfaXRlbV90KikpeGZzX3FtX3FvZmZfbG9naXRlbV90cnlsb2NrLAotCS5pb3BfdW5sb2NrCT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfcW1fcW9mZl9sb2dpdGVtX3VubG9jaywKLQkuaW9wX2NvbW1pdHRlZAk9ICh4ZnNfbHNuX3QoKikoeGZzX2xvZ19pdGVtX3QqLCB4ZnNfbHNuX3QpKQotCQkJCQl4ZnNfcW1fcW9mZl9sb2dpdGVtX2NvbW1pdHRlZCwKLQkuaW9wX3B1c2gJPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCopKXhmc19xbV9xb2ZmX2xvZ2l0ZW1fcHVzaCwKLQkuaW9wX3B1c2hidWYJPSBOVUxMLAotCS5pb3BfY29tbWl0dGluZyA9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KiwgeGZzX2xzbl90KSkKLQkJCQkJeGZzX3FtX3FvZmZfbG9naXRlbV9jb21taXR0aW5nCisJLmlvcF9zaXplCT0geGZzX3FtX3FvZmZfbG9naXRlbV9zaXplLAorCS5pb3BfZm9ybWF0CT0geGZzX3FtX3FvZmZfbG9naXRlbV9mb3JtYXQsCisJLmlvcF9waW4JPSB4ZnNfcW1fcW9mZl9sb2dpdGVtX3BpbiwKKwkuaW9wX3VucGluCT0geGZzX3FtX3FvZmZfbG9naXRlbV91bnBpbiwKKwkuaW9wX3RyeWxvY2sJPSB4ZnNfcW1fcW9mZl9sb2dpdGVtX3RyeWxvY2ssCisJLmlvcF91bmxvY2sJPSB4ZnNfcW1fcW9mZl9sb2dpdGVtX3VubG9jaywKKwkuaW9wX2NvbW1pdHRlZAk9IHhmc19xbV9xb2ZmX2xvZ2l0ZW1fY29tbWl0dGVkLAorCS5pb3BfcHVzaAk9IHhmc19xbV9xb2ZmX2xvZ2l0ZW1fcHVzaCwKKwkuaW9wX2NvbW1pdHRpbmcgPSB4ZnNfcW1fcW9mZl9sb2dpdGVtX2NvbW1pdHRpbmcKIH07CiAKIC8qCiAgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhbiBxdW90YW9mZiBpdGVtIG9mIHRoZSBjb3JyZWN0IHF1b3RhIHR5cGUocykuCiAgKi8KLXhmc19xb2ZmX2xvZ2l0ZW1fdCAqCitzdHJ1Y3QgeGZzX3FvZmZfbG9naXRlbSAqCiB4ZnNfcW1fcW9mZl9sb2dpdGVtX2luaXQoCi0Jc3RydWN0IHhmc19tb3VudCAqbXAsCi0JeGZzX3FvZmZfbG9naXRlbV90ICpzdGFydCwKLQl1aW50IGZsYWdzKQorCXN0cnVjdCB4ZnNfbW91bnQJKm1wLAorCXN0cnVjdCB4ZnNfcW9mZl9sb2dpdGVtCSpzdGFydCwKKwl1aW50CQkJZmxhZ3MpCiB7Ci0JeGZzX3FvZmZfbG9naXRlbV90CSpxZjsKKwlzdHJ1Y3QgeGZzX3FvZmZfbG9naXRlbQkqcWY7CiAKLQlxZiA9ICh4ZnNfcW9mZl9sb2dpdGVtX3QqKSBrbWVtX3phbGxvYyhzaXplb2YoeGZzX3FvZmZfbG9naXRlbV90KSwgS01fU0xFRVApOworCXFmID0ga21lbV96YWxsb2Moc2l6ZW9mKHN0cnVjdCB4ZnNfcW9mZl9sb2dpdGVtKSwgS01fU0xFRVApOwogCiAJeGZzX2xvZ19pdGVtX2luaXQobXAsICZxZi0+cXFsX2l0ZW0sIFhGU19MSV9RVU9UQU9GRiwgc3RhcnQgPwogCQkJJnhmc19xbV9xb2ZmZW5kX2xvZ2l0ZW1fb3BzIDogJnhmc19xbV9xb2ZmX2xvZ2l0ZW1fb3BzKTsKQEAgLTU4Nyw1ICs1MjYsNSBAQAogCXFmLT5xcWxfZm9ybWF0LnFmX3R5cGUgPSBYRlNfTElfUVVPVEFPRkY7CiAJcWYtPnFxbF9mb3JtYXQucWZfZmxhZ3MgPSBmbGFnczsKIAlxZi0+cXFsX3N0YXJ0X2xpcCA9IHN0YXJ0OwotCXJldHVybiAocWYpOworCXJldHVybiBxZjsKIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW0uYwppbmRleCA4YzExN2ZmLi45YTkyNDA3IDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtLmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xbS5jCkBAIC0yMywyNSArMjMsMTggQEAKICNpbmNsdWRlICJ4ZnNfdHJhbnMuaCIKICNpbmNsdWRlICJ4ZnNfc2IuaCIKICNpbmNsdWRlICJ4ZnNfYWcuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMi5oIgogI2luY2x1ZGUgInhmc19hbGxvYy5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19xdW90YS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc19ibWFwX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2FsbG9jX2J0cmVlLmgiCiAjaW5jbHVkZSAieGZzX2lhbGxvY19idHJlZS5oIgotI2luY2x1ZGUgInhmc19kaXIyX3NmLmgiCi0jaW5jbHVkZSAieGZzX2F0dHJfc2YuaCIKICNpbmNsdWRlICJ4ZnNfZGlub2RlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlLmgiCi0jaW5jbHVkZSAieGZzX2J0cmVlLmgiCiAjaW5jbHVkZSAieGZzX2lhbGxvYy5oIgogI2luY2x1ZGUgInhmc19pdGFibGUuaCIKICNpbmNsdWRlICJ4ZnNfcnRhbGxvYy5oIgogI2luY2x1ZGUgInhmc19lcnJvci5oIgogI2luY2x1ZGUgInhmc19ibWFwLmgiCi0jaW5jbHVkZSAieGZzX3J3LmgiCiAjaW5jbHVkZSAieGZzX2F0dHIuaCIKICNpbmNsdWRlICJ4ZnNfYnVmX2l0ZW0uaCIKICNpbmNsdWRlICJ4ZnNfdHJhbnNfc3BhY2UuaCIKQEAgLTY5LDcgKzYyLDcgQEAKIAogU1RBVElDIGludAl4ZnNfcW1faW5pdF9xdW90YWlub3MoeGZzX21vdW50X3QgKik7CiBTVEFUSUMgaW50CXhmc19xbV9pbml0X3F1b3RhaW5mbyh4ZnNfbW91bnRfdCAqKTsKLVNUQVRJQyBpbnQJeGZzX3FtX3NoYWtlKGludCwgZ2ZwX3QpOworU1RBVElDIGludAl4ZnNfcW1fc2hha2Uoc3RydWN0IHNocmlua2VyICosIGludCwgZ2ZwX3QpOwogCiBzdGF0aWMgc3RydWN0IHNocmlua2VyIHhmc19xbV9zaGFrZXIgPSB7CiAJLnNocmluayA9IHhmc19xbV9zaGFrZSwKQEAgLTE0OTcsNyArMTQ5MCw3IEBACiAJCQkJICBtYXhsYmxrY250IC0gbGJsa25vLAogCQkJCSAgWEZTX0JNQVBJX01FVEFEQVRBLAogCQkJCSAgTlVMTCwKLQkJCQkgIDAsIG1hcCwgJm5tYXBzLCBOVUxMLCBOVUxMKTsKKwkJCQkgIDAsIG1hcCwgJm5tYXBzLCBOVUxMKTsKIAkJeGZzX2l1bmxvY2socWlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKIAkJaWYgKGVycm9yKQogCQkJYnJlYWs7CkBAIC0xNjY5LDcgKzE2NjIsOCBAQAogCSAqIG1ha2luZyB1cyBkaXNhYmxlIHF1b3RhcyBmb3IgdGhlIGZpbGUgc3lzdGVtLgogCSAqLwogCWlmICgoZXJyb3IgPSB4ZnNfcW1fZHFnZXRfbm9hdHRhY2goaXAsICZ1ZHFwLCAmZ2RxcCkpKSB7Ci0JCXhmc19pcHV0KGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJCUlSRUxFKGlwKTsKIAkJKnJlcyA9IEJVTEtTVEFUX1JWX0dJVkVVUDsKIAkJcmV0dXJuIGVycm9yOwogCX0KQEAgLTE2ODIsNyArMTY3Niw4IEBACiAJCSAqIFdhbGsgdGhydSB0aGUgZXh0ZW50IGxpc3QgYW5kIGNvdW50IHRoZSByZWFsdGltZSBibG9ja3MuCiAJCSAqLwogCQlpZiAoKGVycm9yID0geGZzX3FtX2dldF9ydGJsa3MoaXAsICZydGJsa3MpKSkgewotCQkJeGZzX2lwdXQoaXAsIFhGU19JTE9DS19FWENMKTsKKwkJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJCQlJUkVMRShpcCk7CiAJCQlpZiAodWRxcCkKIAkJCQl4ZnNfcW1fZHFwdXQodWRxcCk7CiAJCQlpZiAoZ2RxcCkKQEAgLTIxMTcsNyArMjExMiwxMCBAQAogICovCiAvKiBBUkdTVVNFRCAqLwogU1RBVElDIGludAoteGZzX3FtX3NoYWtlKGludCBucl90b19zY2FuLCBnZnBfdCBnZnBfbWFzaykKK3hmc19xbV9zaGFrZSgKKwlzdHJ1Y3Qgc2hyaW5rZXIJKnNocmluaywKKwlpbnQJCW5yX3RvX3NjYW4sCisJZ2ZwX3QJCWdmcF9tYXNrKQogewogCWludAluZHF1c2VkLCBuZnJlZSwgbjsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fYmh2LmMKaW5kZXggOTdiNDEwYy4uYmVhMDJkNyAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtX2Jodi5jCkBAIC0yMywyNSArMjMsMTUgQEAKICNpbmNsdWRlICJ4ZnNfdHJhbnMuaCIKICNpbmNsdWRlICJ4ZnNfc2IuaCIKICNpbmNsdWRlICJ4ZnNfYWcuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMi5oIgogI2luY2x1ZGUgInhmc19hbGxvYy5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19xdW90YS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc19ibWFwX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2FsbG9jX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2lhbGxvY19idHJlZS5oIgotI2luY2x1ZGUgInhmc19kaXIyX3NmLmgiCi0jaW5jbHVkZSAieGZzX2F0dHJfc2YuaCIKLSNpbmNsdWRlICJ4ZnNfZGlub2RlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlLmgiCi0jaW5jbHVkZSAieGZzX2lhbGxvYy5oIgogI2luY2x1ZGUgInhmc19pdGFibGUuaCIKLSNpbmNsdWRlICJ4ZnNfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfYm1hcC5oIgogI2luY2x1ZGUgInhmc19ydGFsbG9jLmgiCiAjaW5jbHVkZSAieGZzX2Vycm9yLmgiCi0jaW5jbHVkZSAieGZzX3J3LmgiCiAjaW5jbHVkZSAieGZzX2F0dHIuaCIKICNpbmNsdWRlICJ4ZnNfYnVmX2l0ZW0uaCIKICNpbmNsdWRlICJ4ZnNfcW0uaCIKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3RhdHMuYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3RhdHMuYwppbmRleCAzZDFmYzc5Li44NjcxYTBiIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtX3N0YXRzLmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xbV9zdGF0cy5jCkBAIC0yMywyNSArMjMsMTUgQEAKICNpbmNsdWRlICJ4ZnNfdHJhbnMuaCIKICNpbmNsdWRlICJ4ZnNfc2IuaCIKICNpbmNsdWRlICJ4ZnNfYWcuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMi5oIgogI2luY2x1ZGUgInhmc19hbGxvYy5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19xdW90YS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc19ibWFwX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2FsbG9jX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2lhbGxvY19idHJlZS5oIgotI2luY2x1ZGUgInhmc19kaXIyX3NmLmgiCi0jaW5jbHVkZSAieGZzX2F0dHJfc2YuaCIKLSNpbmNsdWRlICJ4ZnNfZGlub2RlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlLmgiCi0jaW5jbHVkZSAieGZzX2lhbGxvYy5oIgogI2luY2x1ZGUgInhmc19pdGFibGUuaCIKICNpbmNsdWRlICJ4ZnNfYm1hcC5oIgotI2luY2x1ZGUgInhmc19idHJlZS5oIgogI2luY2x1ZGUgInhmc19ydGFsbG9jLmgiCiAjaW5jbHVkZSAieGZzX2Vycm9yLmgiCi0jaW5jbHVkZSAieGZzX3J3LmgiCiAjaW5jbHVkZSAieGZzX2F0dHIuaCIKICNpbmNsdWRlICJ4ZnNfYnVmX2l0ZW0uaCIKICNpbmNsdWRlICJ4ZnNfcW0uaCIKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYwppbmRleCBiNDQ4Nzc2Li5kMjU3ZWI4IDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jCkBAIC0yNiwyNSArMjYsMTUgQEAKICNpbmNsdWRlICJ4ZnNfdHJhbnMuaCIKICNpbmNsdWRlICJ4ZnNfc2IuaCIKICNpbmNsdWRlICJ4ZnNfYWcuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMi5oIgogI2luY2x1ZGUgInhmc19hbGxvYy5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19xdW90YS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc19ibWFwX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2FsbG9jX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2lhbGxvY19idHJlZS5oIgotI2luY2x1ZGUgInhmc19kaXIyX3NmLmgiCi0jaW5jbHVkZSAieGZzX2F0dHJfc2YuaCIKLSNpbmNsdWRlICJ4ZnNfZGlub2RlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlLmgiCi0jaW5jbHVkZSAieGZzX2lhbGxvYy5oIgogI2luY2x1ZGUgInhmc19pdGFibGUuaCIKICNpbmNsdWRlICJ4ZnNfYm1hcC5oIgotI2luY2x1ZGUgInhmc19idHJlZS5oIgogI2luY2x1ZGUgInhmc19ydGFsbG9jLmgiCiAjaW5jbHVkZSAieGZzX2Vycm9yLmgiCi0jaW5jbHVkZSAieGZzX3J3LmgiCiAjaW5jbHVkZSAieGZzX2F0dHIuaCIKICNpbmNsdWRlICJ4ZnNfYnVmX2l0ZW0uaCIKICNpbmNsdWRlICJ4ZnNfdXRpbHMuaCIKQEAgLTI0OCw0MCArMjM4LDc0IEBACiAJcmV0dXJuIGVycm9yOwogfQogCitTVEFUSUMgaW50Cit4ZnNfcW1fc2NhbGxfdHJ1bmNfcWZpbGUoCisJc3RydWN0IHhmc19tb3VudAkqbXAsCisJeGZzX2lub190CQlpbm8pCit7CisJc3RydWN0IHhmc19pbm9kZQkqaXA7CisJc3RydWN0IHhmc190cmFucwkqdHA7CisJaW50CQkJZXJyb3I7CisKKwlpZiAoaW5vID09IE5VTExGU0lOTykKKwkJcmV0dXJuIDA7CisKKwllcnJvciA9IHhmc19pZ2V0KG1wLCBOVUxMLCBpbm8sIDAsIDAsICZpcCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwl4ZnNfaWxvY2soaXAsIFhGU19JT0xPQ0tfRVhDTCk7CisKKwl0cCA9IHhmc190cmFuc19hbGxvYyhtcCwgWEZTX1RSQU5TX1RSVU5DQVRFX0ZJTEUpOworCWVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIDAsIFhGU19JVFJVTkNBVEVfTE9HX1JFUyhtcCksIDAsCisJCQkJICBYRlNfVFJBTlNfUEVSTV9MT0dfUkVTLAorCQkJCSAgWEZTX0lUUlVOQ0FURV9MT0dfQ09VTlQpOworCWlmIChlcnJvcikgeworCQl4ZnNfdHJhbnNfY2FuY2VsKHRwLCAwKTsKKwkJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfRVhDTCk7CisJCWdvdG8gb3V0X3B1dDsKKwl9CisKKwl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKKwl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwKTsKKworCWVycm9yID0geGZzX2l0cnVuY2F0ZV9maW5pc2goJnRwLCBpcCwgMCwgWEZTX0RBVEFfRk9SSywgMSk7CisJaWYgKGVycm9yKSB7CisJCXhmc190cmFuc19jYW5jZWwodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMgfAorCQkJCSAgICAgWEZTX1RSQU5TX0FCT1JUKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCXhmc19pY2hndGltZShpcCwgWEZTX0lDSEdUSU1FX01PRCB8IFhGU19JQ0hHVElNRV9DSEcpOworCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUyk7CisKK291dF91bmxvY2s6CisJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMIHwgWEZTX0lPTE9DS19FWENMKTsKK291dF9wdXQ6CisJSVJFTEUoaXApOworCXJldHVybiBlcnJvcjsKK30KKwogaW50CiB4ZnNfcW1fc2NhbGxfdHJ1bmNfcWZpbGVzKAogCXhmc19tb3VudF90CSptcCwKIAl1aW50CQlmbGFncykKIHsKIAlpbnQJCWVycm9yID0gMCwgZXJyb3IyID0gMDsKLQl4ZnNfaW5vZGVfdAkqcWlwOwogCiAJaWYgKCF4ZnNfc2JfdmVyc2lvbl9oYXNxdW90YSgmbXAtPm1fc2IpIHx8IGZsYWdzID09IDApIHsKIAkJcWRwcmludGsoInF0cnVuYyBmbGFncz0leCBtX3FmbGFncz0leFxuIiwgZmxhZ3MsIG1wLT5tX3FmbGFncyk7CiAJCXJldHVybiBYRlNfRVJST1IoRUlOVkFMKTsKIAl9CiAKLQlpZiAoKGZsYWdzICYgWEZTX0RRX1VTRVIpICYmIG1wLT5tX3NiLnNiX3VxdW90aW5vICE9IE5VTExGU0lOTykgewotCQllcnJvciA9IHhmc19pZ2V0KG1wLCBOVUxMLCBtcC0+bV9zYi5zYl91cXVvdGlubywgMCwgMCwgJnFpcCk7Ci0JCWlmICghZXJyb3IpIHsKLQkJCWVycm9yID0geGZzX3RydW5jYXRlX2ZpbGUobXAsIHFpcCk7Ci0JCQlJUkVMRShxaXApOwotCQl9Ci0JfQotCi0JaWYgKChmbGFncyAmIChYRlNfRFFfR1JPVVB8WEZTX0RRX1BST0opKSAmJgotCSAgICBtcC0+bV9zYi5zYl9ncXVvdGlubyAhPSBOVUxMRlNJTk8pIHsKLQkJZXJyb3IyID0geGZzX2lnZXQobXAsIE5VTEwsIG1wLT5tX3NiLnNiX2dxdW90aW5vLCAwLCAwLCAmcWlwKTsKLQkJaWYgKCFlcnJvcjIpIHsKLQkJCWVycm9yMiA9IHhmc190cnVuY2F0ZV9maWxlKG1wLCBxaXApOwotCQkJSVJFTEUocWlwKTsKLQkJfQotCX0KKwlpZiAoZmxhZ3MgJiBYRlNfRFFfVVNFUikKKwkJZXJyb3IgPSB4ZnNfcW1fc2NhbGxfdHJ1bmNfcWZpbGUobXAsIG1wLT5tX3NiLnNiX3VxdW90aW5vKTsKKwlpZiAoZmxhZ3MgJiAoWEZTX0RRX0dST1VQfFhGU19EUV9QUk9KKSkKKwkJZXJyb3IyID0geGZzX3FtX3NjYWxsX3RydW5jX3FmaWxlKG1wLCBtcC0+bV9zYi5zYl9ncXVvdGlubyk7CiAKIAlyZXR1cm4gZXJyb3IgPyBlcnJvciA6IGVycm9yMjsKIH0KIAotCiAvKgogICogU3dpdGNoIG9uIChhIGdpdmVuKSBxdW90YSBlbmZvcmNlbWVudCBmb3IgYSBmaWxlc3lzdGVtLiAgVGhpcyB0YWtlcwogICogZWZmZWN0IGltbWVkaWF0ZWx5LgpAQCAtODc1LDggKzg5OSw5IEBACiAJCXhmc19xbV9kcXJlbGUoaXAtPmlfZ2RxdW90KTsKIAkJaXAtPmlfZ2RxdW90ID0gTlVMTDsKIAl9Ci0JeGZzX2lwdXQoaXAsIFhGU19JTE9DS19FWENMKTsKKwl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwogCisJSVJFTEUoaXApOwogCXJldHVybiAwOwogfQogCkBAIC0xMTQzLDcgKzExNjgsOCBAQAogCSAqIG9mIHRob3NlIG5vdy4KIAkgKi8KIAlpZiAoISBpcHJlbGVhc2VkKSB7Ci0JCXhmc19pcHV0KGlwLCBsb2NrX2ZsYWdzKTsKKwkJeGZzX2l1bmxvY2soaXAsIGxvY2tfZmxhZ3MpOworCQlJUkVMRShpcCk7CiAJCWlwcmVsZWFzZWQgPSBCX1RSVUU7CiAJCWdvdG8gYWdhaW47CiAJfQpAQCAtMTE2MCw3ICsxMTg2LDggQEAKIAkJQVNTRVJUKGdkKTsKIAkJeGZzX3FtX2ludGVybmFscWNoZWNrX2RxYWRqdXN0KGlwLCBnZCk7CiAJfQotCXhmc19pcHV0KGlwLCBsb2NrX2ZsYWdzKTsKKwl4ZnNfaXVubG9jayhpcCwgbG9ja19mbGFncyk7CisJSVJFTEUoaXApOwogCSpyZXMgPSBCVUxLU1RBVF9SVl9ESURPTkU7CiAJcmV0dXJuICgwKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfdHJhbnNfZHF1b3QuYyBiL2ZzL3hmcy9xdW90YS94ZnNfdHJhbnNfZHF1b3QuYwppbmRleCAwNjFkODI3Li43ZGU5MWQxIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3RyYW5zX2RxdW90LmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc190cmFuc19kcXVvdC5jCkBAIC0yMywyNSArMjMsMTUgQEAKICNpbmNsdWRlICJ4ZnNfdHJhbnMuaCIKICNpbmNsdWRlICJ4ZnNfc2IuaCIKICNpbmNsdWRlICJ4ZnNfYWcuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMi5oIgogI2luY2x1ZGUgInhmc19hbGxvYy5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19xdW90YS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc19ibWFwX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2FsbG9jX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2lhbGxvY19idHJlZS5oIgotI2luY2x1ZGUgInhmc19hdHRyX3NmLmgiCi0jaW5jbHVkZSAieGZzX2RpcjJfc2YuaCIKLSNpbmNsdWRlICJ4ZnNfZGlub2RlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlLmgiCi0jaW5jbHVkZSAieGZzX2lhbGxvYy5oIgogI2luY2x1ZGUgInhmc19pdGFibGUuaCIKLSNpbmNsdWRlICJ4ZnNfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfYm1hcC5oIgogI2luY2x1ZGUgInhmc19ydGFsbG9jLmgiCiAjaW5jbHVkZSAieGZzX2Vycm9yLmgiCi0jaW5jbHVkZSAieGZzX3J3LmgiCiAjaW5jbHVkZSAieGZzX2F0dHIuaCIKICNpbmNsdWRlICJ4ZnNfYnVmX2l0ZW0uaCIKICNpbmNsdWRlICJ4ZnNfdHJhbnNfcHJpdi5oIgpAQCAtNTksMTYgKzQ5LDE0IEBACiAJeGZzX3RyYW5zX3QJKnRwLAogCXhmc19kcXVvdF90CSpkcXApCiB7Ci0JeGZzX2RxX2xvZ2l0ZW1fdCAgICAqbHAgPSAmZHFwLT5xX2xvZ2l0ZW07Ci0KIAlBU1NFUlQoZHFwLT5xX3RyYW5zcCAhPSB0cCk7CiAJQVNTRVJUKFhGU19EUV9JU19MT0NLRUQoZHFwKSk7Ci0JQVNTRVJUKGxwLT5xbGlfZHF1b3QgPT0gZHFwKTsKKwlBU1NFUlQoZHFwLT5xX2xvZ2l0ZW0ucWxpX2RxdW90ID09IGRxcCk7CiAKIAkvKgogCSAqIEdldCBhIGxvZ19pdGVtX2Rlc2MgdG8gcG9pbnQgYXQgdGhlIG5ldyBpdGVtLgogCSAqLwotCSh2b2lkKSB4ZnNfdHJhbnNfYWRkX2l0ZW0odHAsICh4ZnNfbG9nX2l0ZW1fdCopKGxwKSk7CisJeGZzX3RyYW5zX2FkZF9pdGVtKHRwLCAmZHFwLT5xX2xvZ2l0ZW0ucWxpX2l0ZW0pOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIGlfdHJhbnNwIHNvIHdlIGNhbiBsYXRlciBkZXRlcm1pbmUgaWYgdGhpcyBkcXVvdCBpcwpAQCAtOTMsMTYgKzgxLDExIEBACiAJeGZzX3RyYW5zX3QJKnRwLAogCXhmc19kcXVvdF90CSpkcXApCiB7Ci0JeGZzX2xvZ19pdGVtX2Rlc2NfdAkqbGlkcDsKLQogCUFTU0VSVChkcXAtPnFfdHJhbnNwID09IHRwKTsKIAlBU1NFUlQoWEZTX0RRX0lTX0xPQ0tFRChkcXApKTsKIAotCWxpZHAgPSB4ZnNfdHJhbnNfZmluZF9pdGVtKHRwLCAoeGZzX2xvZ19pdGVtX3QqKSgmZHFwLT5xX2xvZ2l0ZW0pKTsKLQlBU1NFUlQobGlkcCAhPSBOVUxMKTsKLQogCXRwLT50X2ZsYWdzIHw9IFhGU19UUkFOU19ESVJUWTsKLQlsaWRwLT5saWRfZmxhZ3MgfD0gWEZTX0xJRF9ESVJUWTsKKwlkcXAtPnFfbG9naXRlbS5xbGlfaXRlbS5saV9kZXNjLT5saWRfZmxhZ3MgfD0gWEZTX0xJRF9ESVJUWTsKIH0KIAogLyoKQEAgLTg3NCw5ICs4NTcsOCBAQAogCS8qCiAJICogR2V0IGEgbG9nX2l0ZW1fZGVzYyB0byBwb2ludCBhdCB0aGUgbmV3IGl0ZW0uCiAJICovCi0JKHZvaWQpIHhmc190cmFuc19hZGRfaXRlbSh0cCwgKHhmc19sb2dfaXRlbV90KilxKTsKLQotCXJldHVybiAocSk7CisJeGZzX3RyYW5zX2FkZF9pdGVtKHRwLCAmcS0+cXFsX2l0ZW0pOworCXJldHVybiBxOwogfQogCiAKQEAgLTg5MCwxMyArODcyLDggQEAKIAl4ZnNfdHJhbnNfdAkJKnRwLAogCXhmc19xb2ZmX2xvZ2l0ZW1fdAkqcWxwKQogewotCXhmc19sb2dfaXRlbV9kZXNjX3QJKmxpZHA7Ci0KLQlsaWRwID0geGZzX3RyYW5zX2ZpbmRfaXRlbSh0cCwgKHhmc19sb2dfaXRlbV90ICopcWxwKTsKLQlBU1NFUlQobGlkcCAhPSBOVUxMKTsKLQogCXRwLT50X2ZsYWdzIHw9IFhGU19UUkFOU19ESVJUWTsKLQlsaWRwLT5saWRfZmxhZ3MgfD0gWEZTX0xJRF9ESVJUWTsKKwlxbHAtPnFxbF9pdGVtLmxpX2Rlc2MtPmxpZF9mbGFncyB8PSBYRlNfTElEX0RJUlRZOwogfQogCiBTVEFUSUMgdm9pZApkaWZmIC0tZ2l0IGEvZnMveGZzL3N1cHBvcnQvZGVidWcuYyBiL2ZzL3hmcy9zdXBwb3J0L2RlYnVnLmMKaW5kZXggM2YzNjEwYS4uOTc1YWExMCAxMDA2NDQKLS0tIGEvZnMveGZzL3N1cHBvcnQvZGVidWcuYworKysgYi9mcy94ZnMvc3VwcG9ydC9kZWJ1Zy5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSAieGZzX3NiLmgiCiAjaW5jbHVkZSAieGZzX2ludW0uaCIKICNpbmNsdWRlICJ4ZnNfYWcuaCIKLSNpbmNsdWRlICJ4ZnNfZG1hcGkuaCIKICNpbmNsdWRlICJ4ZnNfbW91bnQuaCIKICNpbmNsdWRlICJ4ZnNfZXJyb3IuaCIKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hbGxvYy5jIGIvZnMveGZzL3hmc19hbGxvYy5jCmluZGV4IGE3ZmJlOGEuLmFmMTY4ZmEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWxsb2MuYworKysgYi9mcy94ZnMveGZzX2FsbG9jLmMKQEAgLTI0LDE4ICsyNCwxMyBAQAogI2luY2x1ZGUgInhmc190cmFucy5oIgogI2luY2x1ZGUgInhmc19zYi5oIgogI2luY2x1ZGUgInhmc19hZy5oIgotI2luY2x1ZGUgInhmc19kaXIyLmgiCi0jaW5jbHVkZSAieGZzX2RtYXBpLmgiCiAjaW5jbHVkZSAieGZzX21vdW50LmgiCiAjaW5jbHVkZSAieGZzX2JtYXBfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfYWxsb2NfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfaWFsbG9jX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2RpcjJfc2YuaCIKLSNpbmNsdWRlICJ4ZnNfYXR0cl9zZi5oIgogI2luY2x1ZGUgInhmc19kaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfYnRyZWUuaCIKLSNpbmNsdWRlICJ4ZnNfaWFsbG9jLmgiCiAjaW5jbHVkZSAieGZzX2FsbG9jLmgiCiAjaW5jbHVkZSAieGZzX2Vycm9yLmgiCiAjaW5jbHVkZSAieGZzX3RyYWNlLmgiCkBAIC02ODgsOCArNjgzLDYgQEAKIAl4ZnNfYWdibG9ja190CWx0Ym5vOwkJLyogc3RhcnQgYm5vIG9mIGxlZnQgc2lkZSBlbnRyeSAqLwogCXhmc19hZ2Jsb2NrX3QJbHRibm9hOwkJLyogYWxpZ25lZCAuLi4gKi8KIAl4ZnNfZXh0bGVuX3QJbHRkaWZmOwkJLyogZGlmZmVyZW5jZSB0byBsZWZ0IHNpZGUgZW50cnkgKi8KLQkvKlJFRkVSRU5DRUQqLwotCXhmc19hZ2Jsb2NrX3QJbHRlbmQ7CQkvKiBlbmQgYm5vIG9mIGxlZnQgc2lkZSBlbnRyeSAqLwogCXhmc19leHRsZW5fdAlsdGxlbjsJCS8qIGxlbmd0aCBvZiBsZWZ0IHNpZGUgZW50cnkgKi8KIAl4ZnNfZXh0bGVuX3QJbHRsZW5hOwkJLyogYWxpZ25lZCAuLi4gKi8KIAl4ZnNfYWdibG9ja190CWx0bmV3OwkJLyogdXNlZnVsIHN0YXJ0IGJubyBvZiBsZWZ0IHNpZGUgKi8KQEAgLTgxNCw4ICs4MDcsNyBAQAogCQlpZiAoKGVycm9yID0geGZzX2FsbG9jX2dldF9yZWMoY250X2N1ciwgJmx0Ym5vLCAmbHRsZW4sICZpKSkpCiAJCQlnb3RvIGVycm9yMDsKIAkJWEZTX1dBTlRfQ09SUlVQVEVEX0dPVE8oaSA9PSAxLCBlcnJvcjApOwotCQlsdGVuZCA9IGx0Ym5vICsgbHRsZW47Ci0JCUFTU0VSVChsdGVuZCA8PSBiZTMyX3RvX2NwdShYRlNfQlVGX1RPX0FHRihhcmdzLT5hZ2JwKS0+YWdmX2xlbmd0aCkpOworCQlBU1NFUlQobHRibm8gKyBsdGxlbiA8PSBiZTMyX3RvX2NwdShYRlNfQlVGX1RPX0FHRihhcmdzLT5hZ2JwKS0+YWdmX2xlbmd0aCkpOwogCQlhcmdzLT5sZW4gPSBibGVuOwogCQlpZiAoIXhmc19hbGxvY19maXhfbWlubGVmdChhcmdzKSkgewogCQkJeGZzX2J0cmVlX2RlbF9jdXJzb3IoY250X2N1ciwgWEZTX0JUUkVFX05PRVJST1IpOwpAQCAtODI4LDcgKzgyMCw3IEBACiAJCSAqLwogCQlhcmdzLT5hZ2JubyA9IGJuZXc7CiAJCUFTU0VSVChibmV3ID49IGx0Ym5vKTsKLQkJQVNTRVJUKGJuZXcgKyBibGVuIDw9IGx0ZW5kKTsKKwkJQVNTRVJUKGJuZXcgKyBibGVuIDw9IGx0Ym5vICsgbHRsZW4pOwogCQkvKgogCQkgKiBTZXQgdXAgYSBjdXJzb3IgZm9yIHRoZSBieS1ibm8gdHJlZS4KIAkJICovCkBAIC0xMTU3LDcgKzExNDksNiBAQAogCS8qCiAJICogRml4IHVwIHRoZSBsZW5ndGggYW5kIGNvbXB1dGUgdGhlIHVzZWZ1bCBhZGRyZXNzLgogCSAqLwotCWx0ZW5kID0gbHRibm8gKyBsdGxlbjsKIAlhcmdzLT5sZW4gPSBYRlNfRVhUTEVOX01JTihsdGxlbmEsIGFyZ3MtPm1heGxlbik7CiAJeGZzX2FsbG9jX2ZpeF9sZW4oYXJncyk7CiAJaWYgKCF4ZnNfYWxsb2NfZml4X21pbmxlZnQoYXJncykpIHsKQEAgLTExNzAsNyArMTE2MSw3IEBACiAJKHZvaWQpeGZzX2FsbG9jX2NvbXB1dGVfZGlmZihhcmdzLT5hZ2JubywgcmxlbiwgYXJncy0+YWxpZ25tZW50LCBsdGJubywKIAkJbHRsZW4sICZsdG5ldyk7CiAJQVNTRVJUKGx0bmV3ID49IGx0Ym5vKTsKLQlBU1NFUlQobHRuZXcgKyBybGVuIDw9IGx0ZW5kKTsKKwlBU1NFUlQobHRuZXcgKyBybGVuIDw9IGx0Ym5vICsgbHRsZW4pOwogCUFTU0VSVChsdG5ldyArIHJsZW4gPD0gYmUzMl90b19jcHUoWEZTX0JVRl9UT19BR0YoYXJncy0+YWdicCktPmFnZl9sZW5ndGgpKTsKIAlhcmdzLT5hZ2JubyA9IGx0bmV3OwogCWlmICgoZXJyb3IgPSB4ZnNfYWxsb2NfZml4dXBfdHJlZXMoY250X2N1ciwgYm5vX2N1cl9sdCwgbHRibm8sIGx0bGVuLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hbGxvYy5oIGIvZnMveGZzL3hmc19hbGxvYy5oCmluZGV4IDZkMDUxOTkuLjg5NTAwOWEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWxsb2MuaAorKysgYi9mcy94ZnMveGZzX2FsbG9jLmgKQEAgLTI3LDE2ICsyNywxNiBAQAogLyoKICAqIEZyZWVzcGFjZSBhbGxvY2F0aW9uIHR5cGVzLiAgQXJndW1lbnQgdG8geGZzX2FsbG9jX1t2XWV4dGVudC4KICAqLwotdHlwZWRlZiBlbnVtIHhmc19hbGxvY3R5cGUKLXsKLQlYRlNfQUxMT0NUWVBFX0FOWV9BRywJCS8qIGFsbG9jYXRlIGFueXdoZXJlLCB1c2Ugcm90b3IgKi8KLQlYRlNfQUxMT0NUWVBFX0ZJUlNUX0FHLAkJLyogLi4uIHN0YXJ0IGF0IGFnIDAgKi8KLQlYRlNfQUxMT0NUWVBFX1NUQVJUX0FHLAkJLyogYW55d2hlcmUsIHN0YXJ0IGluIHRoaXMgYS5nLiAqLwotCVhGU19BTExPQ1RZUEVfVEhJU19BRywJCS8qIGFueXdoZXJlIGluIHRoaXMgYS5nLiAqLwotCVhGU19BTExPQ1RZUEVfU1RBUlRfQk5PLAkvKiBuZWFyIHRoaXMgYmxvY2sgZWxzZSBhbnl3aGVyZSAqLwotCVhGU19BTExPQ1RZUEVfTkVBUl9CTk8sCQkvKiBpbiB0aGlzIGEuZy4gYW5kIG5lYXIgdGhpcyBibG9jayAqLwotCVhGU19BTExPQ1RZUEVfVEhJU19CTk8JCS8qIGF0IGV4YWN0bHkgdGhpcyBibG9jayAqLwotfSB4ZnNfYWxsb2N0eXBlX3Q7CisjZGVmaW5lIFhGU19BTExPQ1RZUEVfQU5ZX0FHCTB4MDEJLyogYWxsb2NhdGUgYW55d2hlcmUsIHVzZSByb3RvciAqLworI2RlZmluZSBYRlNfQUxMT0NUWVBFX0ZJUlNUX0FHCTB4MDIJLyogLi4uIHN0YXJ0IGF0IGFnIDAgKi8KKyNkZWZpbmUgWEZTX0FMTE9DVFlQRV9TVEFSVF9BRwkweDA0CS8qIGFueXdoZXJlLCBzdGFydCBpbiB0aGlzIGEuZy4gKi8KKyNkZWZpbmUgWEZTX0FMTE9DVFlQRV9USElTX0FHCTB4MDgJLyogYW55d2hlcmUgaW4gdGhpcyBhLmcuICovCisjZGVmaW5lIFhGU19BTExPQ1RZUEVfU1RBUlRfQk5PCTB4MTAJLyogbmVhciB0aGlzIGJsb2NrIGVsc2UgYW55d2hlcmUgKi8KKyNkZWZpbmUgWEZTX0FMTE9DVFlQRV9ORUFSX0JOTwkweDIwCS8qIGluIHRoaXMgYS5nLiBhbmQgbmVhciB0aGlzIGJsb2NrICovCisjZGVmaW5lIFhGU19BTExPQ1RZUEVfVEhJU19CTk8JMHg0MAkvKiBhdCBleGFjdGx5IHRoaXMgYmxvY2sgKi8KKworLyogdGhpcyBzaG91bGQgYmVjb21lIGFuIGVudW0gYWdhaW4gd2hlbiB0aGUgdHJhY2luZyBjb2RlIGlzIGZpeGVkICovCit0eXBlZGVmIHVuc2lnbmVkIGludCB4ZnNfYWxsb2N0eXBlX3Q7CiAKICNkZWZpbmUgWEZTX0FMTE9DX1RZUEVTIFwKIAl7IFhGU19BTExPQ1RZUEVfQU5ZX0FHLAkJIkFOWV9BRyIgfSwgXApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hbGxvY19idHJlZS5jIGIvZnMveGZzL3hmc19hbGxvY19idHJlZS5jCmluZGV4IDgzZjQ5NDIuLjk3ZjczMjggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWxsb2NfYnRyZWUuYworKysgYi9mcy94ZnMveGZzX2FsbG9jX2J0cmVlLmMKQEAgLTI0LDE5ICsyNCwxNCBAQAogI2luY2x1ZGUgInhmc190cmFucy5oIgogI2luY2x1ZGUgInhmc19zYi5oIgogI2luY2x1ZGUgInhmc19hZy5oIgotI2luY2x1ZGUgInhmc19kaXIyLmgiCi0jaW5jbHVkZSAieGZzX2RtYXBpLmgiCiAjaW5jbHVkZSAieGZzX21vdW50LmgiCiAjaW5jbHVkZSAieGZzX2JtYXBfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfYWxsb2NfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfaWFsbG9jX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2RpcjJfc2YuaCIKLSNpbmNsdWRlICJ4ZnNfYXR0cl9zZi5oIgogI2luY2x1ZGUgInhmc19kaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfYnRyZWVfdHJhY2UuaCIKLSNpbmNsdWRlICJ4ZnNfaWFsbG9jLmgiCiAjaW5jbHVkZSAieGZzX2FsbG9jLmgiCiAjaW5jbHVkZSAieGZzX2Vycm9yLmgiCiAjaW5jbHVkZSAieGZzX3RyYWNlLmgiCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2F0dHIuYyBiL2ZzL3hmcy94ZnNfYXR0ci5jCmluZGV4IGI5YzE5NmEuLmMyNTY4MjQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYXR0ci5jCisrKyBiL2ZzL3hmcy94ZnNfYXR0ci5jCkBAIC0yNSwxOSArMjUsMTMgQEAKICNpbmNsdWRlICJ4ZnNfdHJhbnMuaCIKICNpbmNsdWRlICJ4ZnNfc2IuaCIKICNpbmNsdWRlICJ4ZnNfYWcuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMi5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc19kYV9idHJlZS5oIgogI2luY2x1ZGUgInhmc19ibWFwX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2FsbG9jX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2lhbGxvY19idHJlZS5oIgotI2luY2x1ZGUgInhmc19kaXIyX3NmLmgiCiAjaW5jbHVkZSAieGZzX2F0dHJfc2YuaCIKICNpbmNsdWRlICJ4ZnNfZGlub2RlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlLmgiCiAjaW5jbHVkZSAieGZzX2FsbG9jLmgiCi0jaW5jbHVkZSAieGZzX2J0cmVlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlX2l0ZW0uaCIKICNpbmNsdWRlICJ4ZnNfYm1hcC5oIgogI2luY2x1ZGUgInhmc19hdHRyLmgiCkBAIC0zMjUsOCArMzE5LDcgQEAKIAkJcmV0dXJuIChlcnJvcik7CiAJfQogCi0JeGZzX3RyYW5zX2lqb2luKGFyZ3MudHJhbnMsIGRwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JeGZzX3RyYW5zX2lob2xkKGFyZ3MudHJhbnMsIGRwKTsKKwl4ZnNfdHJhbnNfaWpvaW4oYXJncy50cmFucywgZHApOwogCiAJLyoKIAkgKiBJZiB0aGUgYXR0cmlidXRlIGxpc3QgaXMgbm9uLWV4aXN0ZW50IG9yIGEgc2hvcnRmb3JtIGxpc3QsCkBAIC0zOTYsMTAgKzM4OSw4IEBACiAJCSAqIGJtYXBfZmluaXNoKCkgbWF5IGhhdmUgY29tbWl0dGVkIHRoZSBsYXN0IHRyYW5zIGFuZCBzdGFydGVkCiAJCSAqIGEgbmV3IG9uZS4gIFdlIG5lZWQgdGhlIGlub2RlIHRvIGJlIGluIGFsbCB0cmFuc2FjdGlvbnMuCiAJCSAqLwotCQlpZiAoY29tbWl0dGVkKSB7Ci0JCQl4ZnNfdHJhbnNfaWpvaW4oYXJncy50cmFucywgZHAsIFhGU19JTE9DS19FWENMKTsKLQkJCXhmc190cmFuc19paG9sZChhcmdzLnRyYW5zLCBkcCk7Ci0JCX0KKwkJaWYgKGNvbW1pdHRlZCkKKwkJCXhmc190cmFuc19pam9pbihhcmdzLnRyYW5zLCBkcCk7CiAKIAkJLyoKIAkJICogQ29tbWl0IHRoZSBsZWFmIHRyYW5zZm9ybWF0aW9uLiAgV2UnbGwgbmVlZCBhbm90aGVyIChsaW5rZWQpCkBAIC01NDQsOCArNTM1LDcgQEAKIAkgKiBObyBuZWVkIHRvIG1ha2UgcXVvdGEgcmVzZXJ2YXRpb25zIGhlcmUuIFdlIGV4cGVjdCB0byByZWxlYXNlIHNvbWUKIAkgKiBibG9ja3Mgbm90IGFsbG9jYXRlIGluIHRoZSBjb21tb24gY2FzZS4KIAkgKi8KLQl4ZnNfdHJhbnNfaWpvaW4oYXJncy50cmFucywgZHAsIFhGU19JTE9DS19FWENMKTsKLQl4ZnNfdHJhbnNfaWhvbGQoYXJncy50cmFucywgZHApOworCXhmc190cmFuc19pam9pbihhcmdzLnRyYW5zLCBkcCk7CiAKIAkvKgogCSAqIERlY2lkZSBvbiB3aGF0IHdvcmsgcm91dGluZXMgdG8gY2FsbCBiYXNlZCBvbiB0aGUgaW5vZGUgc2l6ZS4KQEAgLTgyMSw4ICs4MTEsNyBAQAogCSAqIE5vIG5lZWQgdG8gbWFrZSBxdW90YSByZXNlcnZhdGlvbnMgaGVyZS4gV2UgZXhwZWN0IHRvIHJlbGVhc2Ugc29tZQogCSAqIGJsb2Nrcywgbm90IGFsbG9jYXRlLCBpbiB0aGUgY29tbW9uIGNhc2UuCiAJICovCi0JeGZzX3RyYW5zX2lqb2luKHRyYW5zLCBkcCwgWEZTX0lMT0NLX0VYQ0wpOwotCXhmc190cmFuc19paG9sZCh0cmFucywgZHApOworCXhmc190cmFuc19pam9pbih0cmFucywgZHApOwogCiAJLyoKIAkgKiBEZWNpZGUgb24gd2hhdCB3b3JrIHJvdXRpbmVzIHRvIGNhbGwgYmFzZWQgb24gdGhlIGlub2RlIHNpemUuCkBAIC05ODEsMTAgKzk3MCw4IEBACiAJCSAqIGJtYXBfZmluaXNoKCkgbWF5IGhhdmUgY29tbWl0dGVkIHRoZSBsYXN0IHRyYW5zIGFuZCBzdGFydGVkCiAJCSAqIGEgbmV3IG9uZS4gIFdlIG5lZWQgdGhlIGlub2RlIHRvIGJlIGluIGFsbCB0cmFuc2FjdGlvbnMuCiAJCSAqLwotCQlpZiAoY29tbWl0dGVkKSB7Ci0JCQl4ZnNfdHJhbnNfaWpvaW4oYXJncy0+dHJhbnMsIGRwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JCQl4ZnNfdHJhbnNfaWhvbGQoYXJncy0+dHJhbnMsIGRwKTsKLQkJfQorCQlpZiAoY29tbWl0dGVkKQorCQkJeGZzX3RyYW5zX2lqb2luKGFyZ3MtPnRyYW5zLCBkcCk7CiAKIAkJLyoKIAkJICogQ29tbWl0IHRoZSBjdXJyZW50IHRyYW5zIChpbmNsdWRpbmcgdGhlIGlub2RlKSBhbmQgc3RhcnQKQEAgLTEwODUsMTAgKzEwNzIsOCBAQAogCQkJICogYW5kIHN0YXJ0ZWQgYSBuZXcgb25lLiAgV2UgbmVlZCB0aGUgaW5vZGUgdG8gYmUKIAkJCSAqIGluIGFsbCB0cmFuc2FjdGlvbnMuCiAJCQkgKi8KLQkJCWlmIChjb21taXR0ZWQpIHsKLQkJCQl4ZnNfdHJhbnNfaWpvaW4oYXJncy0+dHJhbnMsIGRwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JCQkJeGZzX3RyYW5zX2lob2xkKGFyZ3MtPnRyYW5zLCBkcCk7Ci0JCQl9CisJCQlpZiAoY29tbWl0dGVkKQorCQkJCXhmc190cmFuc19pam9pbihhcmdzLT50cmFucywgZHApOwogCQl9IGVsc2UKIAkJCXhmc19kYV9idWZfZG9uZShicCk7CiAKQEAgLTExNjEsMTAgKzExNDYsOCBAQAogCQkgKiBibWFwX2ZpbmlzaCgpIG1heSBoYXZlIGNvbW1pdHRlZCB0aGUgbGFzdCB0cmFucyBhbmQgc3RhcnRlZAogCQkgKiBhIG5ldyBvbmUuICBXZSBuZWVkIHRoZSBpbm9kZSB0byBiZSBpbiBhbGwgdHJhbnNhY3Rpb25zLgogCQkgKi8KLQkJaWYgKGNvbW1pdHRlZCkgewotCQkJeGZzX3RyYW5zX2lqb2luKGFyZ3MtPnRyYW5zLCBkcCwgWEZTX0lMT0NLX0VYQ0wpOwotCQkJeGZzX3RyYW5zX2lob2xkKGFyZ3MtPnRyYW5zLCBkcCk7Ci0JCX0KKwkJaWYgKGNvbW1pdHRlZCkKKwkJCXhmc190cmFuc19pam9pbihhcmdzLT50cmFucywgZHApOwogCX0gZWxzZQogCQl4ZnNfZGFfYnVmX2RvbmUoYnApOwogCXJldHVybigwKTsKQEAgLTEzMTcsMTAgKzEzMDAsOCBAQAogCQkJICogYW5kIHN0YXJ0ZWQgYSBuZXcgb25lLiAgV2UgbmVlZCB0aGUgaW5vZGUgdG8gYmUKIAkJCSAqIGluIGFsbCB0cmFuc2FjdGlvbnMuCiAJCQkgKi8KLQkJCWlmIChjb21taXR0ZWQpIHsKLQkJCQl4ZnNfdHJhbnNfaWpvaW4oYXJncy0+dHJhbnMsIGRwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JCQkJeGZzX3RyYW5zX2lob2xkKGFyZ3MtPnRyYW5zLCBkcCk7Ci0JCQl9CisJCQlpZiAoY29tbWl0dGVkKQorCQkJCXhmc190cmFuc19pam9pbihhcmdzLT50cmFucywgZHApOwogCiAJCQkvKgogCQkJICogQ29tbWl0IHRoZSBub2RlIGNvbnZlcnNpb24gYW5kIHN0YXJ0IHRoZSBuZXh0CkBAIC0xMzU2LDEwICsxMzM3LDggQEAKIAkJICogYm1hcF9maW5pc2goKSBtYXkgaGF2ZSBjb21taXR0ZWQgdGhlIGxhc3QgdHJhbnMgYW5kIHN0YXJ0ZWQKIAkJICogYSBuZXcgb25lLiAgV2UgbmVlZCB0aGUgaW5vZGUgdG8gYmUgaW4gYWxsIHRyYW5zYWN0aW9ucy4KIAkJICovCi0JCWlmIChjb21taXR0ZWQpIHsKLQkJCXhmc190cmFuc19pam9pbihhcmdzLT50cmFucywgZHAsIFhGU19JTE9DS19FWENMKTsKLQkJCXhmc190cmFuc19paG9sZChhcmdzLT50cmFucywgZHApOwotCQl9CisJCWlmIChjb21taXR0ZWQpCisJCQl4ZnNfdHJhbnNfaWpvaW4oYXJncy0+dHJhbnMsIGRwKTsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBBZGRpdGlvbiBzdWNjZWVkZWQsIHVwZGF0ZSBCdHJlZSBoYXNodmFscy4KQEAgLTE0NzAsMTAgKzE0NDksOCBAQAogCQkJICogYW5kIHN0YXJ0ZWQgYSBuZXcgb25lLiAgV2UgbmVlZCB0aGUgaW5vZGUgdG8gYmUKIAkJCSAqIGluIGFsbCB0cmFuc2FjdGlvbnMuCiAJCQkgKi8KLQkJCWlmIChjb21taXR0ZWQpIHsKLQkJCQl4ZnNfdHJhbnNfaWpvaW4oYXJncy0+dHJhbnMsIGRwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JCQkJeGZzX3RyYW5zX2lob2xkKGFyZ3MtPnRyYW5zLCBkcCk7Ci0JCQl9CisJCQlpZiAoY29tbWl0dGVkKQorCQkJCXhmc190cmFuc19pam9pbihhcmdzLT50cmFucywgZHApOwogCQl9CiAKIAkJLyoKQEAgLTE2MDQsMTAgKzE1ODEsOCBAQAogCQkgKiBibWFwX2ZpbmlzaCgpIG1heSBoYXZlIGNvbW1pdHRlZCB0aGUgbGFzdCB0cmFucyBhbmQgc3RhcnRlZAogCQkgKiBhIG5ldyBvbmUuICBXZSBuZWVkIHRoZSBpbm9kZSB0byBiZSBpbiBhbGwgdHJhbnNhY3Rpb25zLgogCQkgKi8KLQkJaWYgKGNvbW1pdHRlZCkgewotCQkJeGZzX3RyYW5zX2lqb2luKGFyZ3MtPnRyYW5zLCBkcCwgWEZTX0lMT0NLX0VYQ0wpOwotCQkJeGZzX3RyYW5zX2lob2xkKGFyZ3MtPnRyYW5zLCBkcCk7Ci0JCX0KKwkJaWYgKGNvbW1pdHRlZCkKKwkJCXhmc190cmFuc19pam9pbihhcmdzLT50cmFucywgZHApOwogCiAJCS8qCiAJCSAqIENvbW1pdCB0aGUgQnRyZWUgam9pbiBvcGVyYXRpb24gYW5kIHN0YXJ0IGEgbmV3IHRyYW5zLgpAQCAtMTY1OCwxMCArMTYzMyw4IEBACiAJCQkgKiBhbmQgc3RhcnRlZCBhIG5ldyBvbmUuICBXZSBuZWVkIHRoZSBpbm9kZSB0byBiZQogCQkJICogaW4gYWxsIHRyYW5zYWN0aW9ucy4KIAkJCSAqLwotCQkJaWYgKGNvbW1pdHRlZCkgewotCQkJCXhmc190cmFuc19pam9pbihhcmdzLT50cmFucywgZHAsIFhGU19JTE9DS19FWENMKTsKLQkJCQl4ZnNfdHJhbnNfaWhvbGQoYXJncy0+dHJhbnMsIGRwKTsKLQkJCX0KKwkJCWlmIChjb21taXR0ZWQpCisJCQkJeGZzX3RyYW5zX2lqb2luKGFyZ3MtPnRyYW5zLCBkcCk7CiAJCX0gZWxzZQogCQkJeGZzX2RhX2JyZWxzZShhcmdzLT50cmFucywgYnApOwogCX0KQEAgLTIwMDQsNyArMTk3Nyw3IEBACiAJCWVycm9yID0geGZzX2JtYXBpKGFyZ3MtPnRyYW5zLCBhcmdzLT5kcCwgKHhmc19maWxlb2ZmX3QpbGJsa25vLAogCQkJCSAgYXJncy0+cm10YmxrY250LAogCQkJCSAgWEZTX0JNQVBJX0FUVFJGT1JLIHwgWEZTX0JNQVBJX01FVEFEQVRBLAotCQkJCSAgTlVMTCwgMCwgbWFwLCAmbm1hcCwgTlVMTCwgTlVMTCk7CisJCQkJICBOVUxMLCAwLCBtYXAsICZubWFwLCBOVUxMKTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuKGVycm9yKTsKIAkJQVNTRVJUKG5tYXAgPj0gMSk7CkBAIC0yMDgzLDcgKzIwNTYsNyBAQAogCQkJCSAgWEZTX0JNQVBJX0FUVFJGT1JLIHwgWEZTX0JNQVBJX01FVEFEQVRBIHwKIAkJCQkJCQlYRlNfQk1BUElfV1JJVEUsCiAJCQkJICBhcmdzLT5maXJzdGJsb2NrLCBhcmdzLT50b3RhbCwgJm1hcCwgJm5tYXAsCi0JCQkJICBhcmdzLT5mbGlzdCwgTlVMTCk7CisJCQkJICBhcmdzLT5mbGlzdCk7CiAJCWlmICghZXJyb3IpIHsKIAkJCWVycm9yID0geGZzX2JtYXBfZmluaXNoKCZhcmdzLT50cmFucywgYXJncy0+Zmxpc3QsCiAJCQkJCQkmY29tbWl0dGVkKTsKQEAgLTIwOTksMTAgKzIwNzIsOCBAQAogCQkgKiBibWFwX2ZpbmlzaCgpIG1heSBoYXZlIGNvbW1pdHRlZCB0aGUgbGFzdCB0cmFucyBhbmQgc3RhcnRlZAogCQkgKiBhIG5ldyBvbmUuICBXZSBuZWVkIHRoZSBpbm9kZSB0byBiZSBpbiBhbGwgdHJhbnNhY3Rpb25zLgogCQkgKi8KLQkJaWYgKGNvbW1pdHRlZCkgewotCQkJeGZzX3RyYW5zX2lqb2luKGFyZ3MtPnRyYW5zLCBkcCwgWEZTX0lMT0NLX0VYQ0wpOwotCQkJeGZzX3RyYW5zX2lob2xkKGFyZ3MtPnRyYW5zLCBkcCk7Ci0JCX0KKwkJaWYgKGNvbW1pdHRlZCkKKwkJCXhmc190cmFuc19pam9pbihhcmdzLT50cmFucywgZHApOwogCiAJCUFTU0VSVChubWFwID09IDEpOwogCQlBU1NFUlQoKG1hcC5icl9zdGFydGJsb2NrICE9IERFTEFZU1RBUlRCTE9DSykgJiYKQEAgLTIxMzYsNyArMjEwNyw3IEBACiAJCQkJICBhcmdzLT5ybXRibGtjbnQsCiAJCQkJICBYRlNfQk1BUElfQVRUUkZPUksgfCBYRlNfQk1BUElfTUVUQURBVEEsCiAJCQkJICBhcmdzLT5maXJzdGJsb2NrLCAwLCAmbWFwLCAmbm1hcCwKLQkJCQkgIE5VTEwsIE5VTEwpOworCQkJCSAgTlVMTCk7CiAJCWlmIChlcnJvcikgewogCQkJcmV0dXJuKGVycm9yKTsKIAkJfQpAQCAtMjIwMSw3ICsyMTcyLDcgQEAKIAkJCQkJYXJncy0+cm10YmxrY250LAogCQkJCQlYRlNfQk1BUElfQVRUUkZPUksgfCBYRlNfQk1BUElfTUVUQURBVEEsCiAJCQkJCWFyZ3MtPmZpcnN0YmxvY2ssIDAsICZtYXAsICZubWFwLAotCQkJCQlhcmdzLT5mbGlzdCwgTlVMTCk7CisJCQkJCWFyZ3MtPmZsaXN0KTsKIAkJaWYgKGVycm9yKSB7CiAJCQlyZXR1cm4oZXJyb3IpOwogCQl9CkBAIC0yMjM5LDcgKzIyMTAsNyBAQAogCQllcnJvciA9IHhmc19idW5tYXBpKGFyZ3MtPnRyYW5zLCBhcmdzLT5kcCwgbGJsa25vLCBibGtjbnQsCiAJCQkJICAgIFhGU19CTUFQSV9BVFRSRk9SSyB8IFhGU19CTUFQSV9NRVRBREFUQSwKIAkJCQkgICAgMSwgYXJncy0+Zmlyc3RibG9jaywgYXJncy0+Zmxpc3QsCi0JCQkJICAgIE5VTEwsICZkb25lKTsKKwkJCQkgICAgJmRvbmUpOwogCQlpZiAoIWVycm9yKSB7CiAJCQllcnJvciA9IHhmc19ibWFwX2ZpbmlzaCgmYXJncy0+dHJhbnMsIGFyZ3MtPmZsaXN0LAogCQkJCQkJJmNvbW1pdHRlZCk7CkBAIC0yMjU1LDEwICsyMjI2LDggQEAKIAkJICogYm1hcF9maW5pc2goKSBtYXkgaGF2ZSBjb21taXR0ZWQgdGhlIGxhc3QgdHJhbnMgYW5kIHN0YXJ0ZWQKIAkJICogYSBuZXcgb25lLiAgV2UgbmVlZCB0aGUgaW5vZGUgdG8gYmUgaW4gYWxsIHRyYW5zYWN0aW9ucy4KIAkJICovCi0JCWlmIChjb21taXR0ZWQpIHsKLQkJCXhmc190cmFuc19pam9pbihhcmdzLT50cmFucywgYXJncy0+ZHAsIFhGU19JTE9DS19FWENMKTsKLQkJCXhmc190cmFuc19paG9sZChhcmdzLT50cmFucywgYXJncy0+ZHApOwotCQl9CisJCWlmIChjb21taXR0ZWQpCisJCQl4ZnNfdHJhbnNfaWpvaW4oYXJncy0+dHJhbnMsIGFyZ3MtPmRwKTsKIAogCQkvKgogCQkgKiBDbG9zZSBvdXQgdHJhbnMgYW5kIHN0YXJ0IHRoZSBuZXh0IG9uZSBpbiB0aGUgY2hhaW4uCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2F0dHJfbGVhZi5jIGIvZnMveGZzL3hmc19hdHRyX2xlYWYuYwppbmRleCBhOTBjZTc0Li5hNmNmZjhlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2F0dHJfbGVhZi5jCisrKyBiL2ZzL3hmcy94ZnNfYXR0cl9sZWFmLmMKQEAgLTI0LDggKzI0LDYgQEAKICNpbmNsdWRlICJ4ZnNfdHJhbnMuaCIKICNpbmNsdWRlICJ4ZnNfc2IuaCIKICNpbmNsdWRlICJ4ZnNfYWcuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMi5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc19kYV9idHJlZS5oIgogI2luY2x1ZGUgInhmc19ibWFwX2J0cmVlLmgiCkBAIC0zMyw3ICszMSw2IEBACiAjaW5jbHVkZSAieGZzX2lhbGxvY19idHJlZS5oIgogI2luY2x1ZGUgInhmc19hbGxvYy5oIgogI2luY2x1ZGUgInhmc19idHJlZS5oIgotI2luY2x1ZGUgInhmc19kaXIyX3NmLmgiCiAjaW5jbHVkZSAieGZzX2F0dHJfc2YuaCIKICNpbmNsdWRlICJ4ZnNfZGlub2RlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlLmgiCkBAIC0yOTMxLDcgKzI5MjgsNyBAQAogCQlubWFwID0gMTsKIAkJZXJyb3IgPSB4ZnNfYm1hcGkoKnRyYW5zLCBkcCwgKHhmc19maWxlb2ZmX3QpdGJsa25vLCB0YmxrY250LAogCQkJCQlYRlNfQk1BUElfQVRUUkZPUksgfCBYRlNfQk1BUElfTUVUQURBVEEsCi0JCQkJCU5VTEwsIDAsICZtYXAsICZubWFwLCBOVUxMLCBOVUxMKTsKKwkJCQkJTlVMTCwgMCwgJm1hcCwgJm5tYXAsIE5VTEwpOwogCQlpZiAoZXJyb3IpIHsKIAkJCXJldHVybihlcnJvcik7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYm1hcC5jIGIvZnMveGZzL3hmc19ibWFwLmMKaW5kZXggOTk1ODdkZS4uMjNmMTRlNSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ibWFwLmMKKysrIGIvZnMveGZzL3hmc19ibWFwLmMKQEAgLTMwLDEzICszMCwxMCBAQAogI2luY2x1ZGUgInhmc19hbGxvY19idHJlZS5oIgogI2luY2x1ZGUgInhmc19pYWxsb2NfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfZGlyMl9zZi5oIgotI2luY2x1ZGUgInhmc19hdHRyX3NmLmgiCiAjaW5jbHVkZSAieGZzX2Rpbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZS5oIgogI2luY2x1ZGUgInhmc19idHJlZS5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgotI2luY2x1ZGUgInhmc19pYWxsb2MuaCIKICNpbmNsdWRlICJ4ZnNfaXRhYmxlLmgiCiAjaW5jbHVkZSAieGZzX2RpcjJfZGF0YS5oIgogI2luY2x1ZGUgInhmc19kaXIyX2xlYWYuaCIKQEAgLTEwNCw3ICsxMDEsNiBAQAogCXhmc19mc2Jsb2NrX3QJCSpmaXJzdCwJLyogcG9pbnRlciB0byBmaXJzdGJsb2NrIHZhcmlhYmxlICovCiAJeGZzX2JtYXBfZnJlZV90CQkqZmxpc3QsCS8qIGxpc3Qgb2YgZXh0ZW50cyB0byBiZSBmcmVlZCAqLwogCWludAkJCSpsb2dmbGFnc3AsIC8qIGlub2RlIGxvZ2dpbmcgZmxhZ3MgKi8KLQl4ZnNfZXh0ZGVsdGFfdAkJKmRlbHRhLCAvKiBDaGFuZ2UgbWFkZSB0byBpbmNvcmUgZXh0ZW50cyAqLwogCWludAkJCXdoaWNoZm9yaywgLyogZGF0YSBvciBhdHRyIGZvcmsgKi8KIAlpbnQJCQlyc3ZkKTsJLyogT0sgdG8gYWxsb2NhdGUgcmVzZXJ2ZWQgYmxvY2tzICovCiAKQEAgLTEyMiw3ICsxMTgsNiBAQAogCXhmc19mc2Jsb2NrX3QJCSpmaXJzdCwJLyogcG9pbnRlciB0byBmaXJzdGJsb2NrIHZhcmlhYmxlICovCiAJeGZzX2JtYXBfZnJlZV90CQkqZmxpc3QsCS8qIGxpc3Qgb2YgZXh0ZW50cyB0byBiZSBmcmVlZCAqLwogCWludAkJCSpsb2dmbGFnc3AsIC8qIGlub2RlIGxvZ2dpbmcgZmxhZ3MgKi8KLQl4ZnNfZXh0ZGVsdGFfdAkJKmRlbHRhLCAvKiBDaGFuZ2UgbWFkZSB0byBpbmNvcmUgZXh0ZW50cyAqLwogCWludAkJCXJzdmQpOwkvKiBPSyB0byBhbGxvY2F0ZSByZXNlcnZlZCBibG9ja3MgKi8KIAogLyoKQEAgLTEzNSw3ICsxMzAsNiBAQAogCXhmc19leHRudW1fdAkJaWR4LAkvKiBleHRlbnQgbnVtYmVyIHRvIHVwZGF0ZS9pbnNlcnQgKi8KIAl4ZnNfYm1idF9pcmVjX3QJCSpuZXcsCS8qIG5ldyBkYXRhIHRvIGFkZCB0byBmaWxlIGV4dGVudHMgKi8KIAlpbnQJCQkqbG9nZmxhZ3NwLC8qIGlub2RlIGxvZ2dpbmcgZmxhZ3MgKi8KLQl4ZnNfZXh0ZGVsdGFfdAkJKmRlbHRhLCAvKiBDaGFuZ2UgbWFkZSB0byBpbmNvcmUgZXh0ZW50cyAqLwogCWludAkJCXJzdmQpOwkvKiBPSyB0byBhbGxvY2F0ZSByZXNlcnZlZCBibG9ja3MgKi8KIAogLyoKQEAgLTE0OSw3ICsxNDMsNiBAQAogCXhmc19idHJlZV9jdXJfdAkJKmN1ciwJLyogaWYgbnVsbCwgbm90IGEgYnRyZWUgKi8KIAl4ZnNfYm1idF9pcmVjX3QJCSpuZXcsCS8qIG5ldyBkYXRhIHRvIGFkZCB0byBmaWxlIGV4dGVudHMgKi8KIAlpbnQJCQkqbG9nZmxhZ3NwLCAvKiBpbm9kZSBsb2dnaW5nIGZsYWdzICovCi0JeGZzX2V4dGRlbHRhX3QJCSpkZWx0YSwgLyogQ2hhbmdlIG1hZGUgdG8gaW5jb3JlIGV4dGVudHMgKi8KIAlpbnQJCQl3aGljaGZvcmspOyAvKiBkYXRhIG9yIGF0dHIgZm9yayAqLwogCiAvKgpAQCAtMTYyLDggKzE1NSw3IEBACiAJeGZzX2V4dG51bV90CQlpZHgsCS8qIGV4dGVudCBudW1iZXIgdG8gdXBkYXRlL2luc2VydCAqLwogCXhmc19idHJlZV9jdXJfdAkJKipjdXJwLAkvKiBpZiAqY3VycCBpcyBudWxsLCBub3QgYSBidHJlZSAqLwogCXhmc19ibWJ0X2lyZWNfdAkJKm5ldywJLyogbmV3IGRhdGEgdG8gYWRkIHRvIGZpbGUgZXh0ZW50cyAqLwotCWludAkJCSpsb2dmbGFnc3AsIC8qIGlub2RlIGxvZ2dpbmcgZmxhZ3MgKi8KLQl4ZnNfZXh0ZGVsdGFfdAkJKmRlbHRhKTsgLyogQ2hhbmdlIG1hZGUgdG8gaW5jb3JlIGV4dGVudHMgKi8KKwlpbnQJCQkqbG9nZmxhZ3NwKTsgLyogaW5vZGUgbG9nZ2luZyBmbGFncyAqLwogCiAvKgogICogeGZzX2JtYXBfYWxsb2MgaXMgY2FsbGVkIGJ5IHhmc19ibWFwaSB0byBhbGxvY2F0ZSBhbiBleHRlbnQgZm9yIGEgZmlsZS4KQEAgLTIwMCw3ICsxOTIsNiBAQAogCXhmc19idHJlZV9jdXJfdAkJKmN1ciwJLyogaWYgbnVsbCwgbm90IGEgYnRyZWUgKi8KIAl4ZnNfYm1idF9pcmVjX3QJCSpuZXcsCS8qIG5ldyBkYXRhIHRvIGFkZCB0byBmaWxlIGV4dGVudHMgKi8KIAlpbnQJCQkqbG9nZmxhZ3NwLC8qIGlub2RlIGxvZ2dpbmcgZmxhZ3MgKi8KLQl4ZnNfZXh0ZGVsdGFfdAkJKmRlbHRhLCAvKiBDaGFuZ2UgbWFkZSB0byBpbmNvcmUgZXh0ZW50cyAqLwogCWludAkJCXdoaWNoZm9yaywgLyogZGF0YSBvciBhdHRyIGZvcmsgKi8KIAlpbnQJCQlyc3ZkKTsJIC8qIE9LIHRvIGFsbG9jYXRlIHJlc2VydmVkIGJsb2NrcyAqLwogCkBAIC00ODksNyArNDgwLDYgQEAKIAl4ZnNfZnNibG9ja190CQkqZmlyc3QsCS8qIHBvaW50ZXIgdG8gZmlyc3RibG9jayB2YXJpYWJsZSAqLwogCXhmc19ibWFwX2ZyZWVfdAkJKmZsaXN0LAkvKiBsaXN0IG9mIGV4dGVudHMgdG8gYmUgZnJlZWQgKi8KIAlpbnQJCQkqbG9nZmxhZ3NwLCAvKiBpbm9kZSBsb2dnaW5nIGZsYWdzICovCi0JeGZzX2V4dGRlbHRhX3QJCSpkZWx0YSwgLyogQ2hhbmdlIG1hZGUgdG8gaW5jb3JlIGV4dGVudHMgKi8KIAlpbnQJCQl3aGljaGZvcmssIC8qIGRhdGEgb3IgYXR0ciBmb3JrICovCiAJaW50CQkJcnN2ZCkJLyogT0sgdG8gdXNlIHJlc2VydmVkIGRhdGEgYmxvY2tzICovCiB7CkBAIC01MjQsMTUgKzUxNCw2IEBACiAJCQlsb2dmbGFncyA9IFhGU19JTE9HX0NPUkUgfCB4ZnNfaWxvZ19mZXh0KHdoaWNoZm9yayk7CiAJCX0gZWxzZQogCQkJbG9nZmxhZ3MgPSAwOwotCQkvKiBERUxUQTogc2luZ2xlIG5ldyBleHRlbnQgKi8KLQkJaWYgKGRlbHRhKSB7Ci0JCQlpZiAoZGVsdGEtPnhlZF9zdGFydG9mZiA+IG5ldy0+YnJfc3RhcnRvZmYpCi0JCQkJZGVsdGEtPnhlZF9zdGFydG9mZiA9IG5ldy0+YnJfc3RhcnRvZmY7Ci0JCQlpZiAoZGVsdGEtPnhlZF9ibG9ja2NvdW50IDwKLQkJCQkJbmV3LT5icl9zdGFydG9mZiArIG5ldy0+YnJfYmxvY2tjb3VudCkKLQkJCQlkZWx0YS0+eGVkX2Jsb2NrY291bnQgPSBuZXctPmJyX3N0YXJ0b2ZmICsKLQkJCQkJCW5ldy0+YnJfYmxvY2tjb3VudDsKLQkJfQogCX0KIAkvKgogCSAqIEFueSBraW5kIG9mIG5ldyBkZWxheWVkIGFsbG9jYXRpb24gZ29lcyBoZXJlLgpAQCAtNTQyLDcgKzUyMyw3IEBACiAJCQlBU1NFUlQoKGN1ci0+YmNfcHJpdmF0ZS5iLmZsYWdzICYKIAkJCQlYRlNfQlRDVVJfQlBSVl9XQVNERUwpID09IDApOwogCQlpZiAoKGVycm9yID0geGZzX2JtYXBfYWRkX2V4dGVudF9ob2xlX2RlbGF5KGlwLCBpZHgsIG5ldywKLQkJCQkmbG9nZmxhZ3MsIGRlbHRhLCByc3ZkKSkpCisJCQkJJmxvZ2ZsYWdzLCByc3ZkKSkpCiAJCQlnb3RvIGRvbmU7CiAJfQogCS8qCkBAIC01NTMsNyArNTM0LDcgQEAKIAkJCUFTU0VSVCgoY3VyLT5iY19wcml2YXRlLmIuZmxhZ3MgJgogCQkJCVhGU19CVENVUl9CUFJWX1dBU0RFTCkgPT0gMCk7CiAJCWlmICgoZXJyb3IgPSB4ZnNfYm1hcF9hZGRfZXh0ZW50X2hvbGVfcmVhbChpcCwgaWR4LCBjdXIsIG5ldywKLQkJCQkmbG9nZmxhZ3MsIGRlbHRhLCB3aGljaGZvcmspKSkKKwkJCQkmbG9nZmxhZ3MsIHdoaWNoZm9yaykpKQogCQkJZ290byBkb25lOwogCX0gZWxzZSB7CiAJCXhmc19ibWJ0X2lyZWNfdAlwcmV2OwkvKiBvbGQgZXh0ZW50IGF0IG9mZnNldCBpZHggKi8KQEAgLTU3OCwxNyArNTU5LDE3IEBACiAJCQkJCQlYRlNfQlRDVVJfQlBSVl9XQVNERUwpOwogCQkJCWlmICgoZXJyb3IgPSB4ZnNfYm1hcF9hZGRfZXh0ZW50X2RlbGF5X3JlYWwoaXAsCiAJCQkJCWlkeCwgJmN1ciwgbmV3LCAmZGFfbmV3LCBmaXJzdCwgZmxpc3QsCi0JCQkJCSZsb2dmbGFncywgZGVsdGEsIHJzdmQpKSkKKwkJCQkJJmxvZ2ZsYWdzLCByc3ZkKSkpCiAJCQkJCWdvdG8gZG9uZTsKIAkJCX0gZWxzZSBpZiAobmV3LT5icl9zdGF0ZSA9PSBYRlNfRVhUX05PUk0pIHsKIAkJCQlBU1NFUlQobmV3LT5icl9zdGF0ZSA9PSBYRlNfRVhUX05PUk0pOwogCQkJCWlmICgoZXJyb3IgPSB4ZnNfYm1hcF9hZGRfZXh0ZW50X3Vud3JpdHRlbl9yZWFsKAotCQkJCQlpcCwgaWR4LCAmY3VyLCBuZXcsICZsb2dmbGFncywgZGVsdGEpKSkKKwkJCQkJaXAsIGlkeCwgJmN1ciwgbmV3LCAmbG9nZmxhZ3MpKSkKIAkJCQkJZ290byBkb25lOwogCQkJfSBlbHNlIHsKIAkJCQlBU1NFUlQobmV3LT5icl9zdGF0ZSA9PSBYRlNfRVhUX1VOV1JJVFRFTik7CiAJCQkJaWYgKChlcnJvciA9IHhmc19ibWFwX2FkZF9leHRlbnRfdW53cml0dGVuX3JlYWwoCi0JCQkJCWlwLCBpZHgsICZjdXIsIG5ldywgJmxvZ2ZsYWdzLCBkZWx0YSkpKQorCQkJCQlpcCwgaWR4LCAmY3VyLCBuZXcsICZsb2dmbGFncykpKQogCQkJCQlnb3RvIGRvbmU7CiAJCQl9CiAJCQlBU1NFUlQoKmN1cnAgPT0gY3VyIHx8ICpjdXJwID09IE5VTEwpOwpAQCAtNjAxLDcgKzU4Miw3IEBACiAJCQkJQVNTRVJUKChjdXItPmJjX3ByaXZhdGUuYi5mbGFncyAmCiAJCQkJCVhGU19CVENVUl9CUFJWX1dBU0RFTCkgPT0gMCk7CiAJCQlpZiAoKGVycm9yID0geGZzX2JtYXBfYWRkX2V4dGVudF9ob2xlX3JlYWwoaXAsIGlkeCwgY3VyLAotCQkJCQluZXcsICZsb2dmbGFncywgZGVsdGEsIHdoaWNoZm9yaykpKQorCQkJCQluZXcsICZsb2dmbGFncywgd2hpY2hmb3JrKSkpCiAJCQkJZ290byBkb25lOwogCQl9CiAJfQpAQCAtNjY2LDcgKzY0Nyw2IEBACiAJeGZzX2ZzYmxvY2tfdAkJKmZpcnN0LAkvKiBwb2ludGVyIHRvIGZpcnN0YmxvY2sgdmFyaWFibGUgKi8KIAl4ZnNfYm1hcF9mcmVlX3QJCSpmbGlzdCwJLyogbGlzdCBvZiBleHRlbnRzIHRvIGJlIGZyZWVkICovCiAJaW50CQkJKmxvZ2ZsYWdzcCwgLyogaW5vZGUgbG9nZ2luZyBmbGFncyAqLwotCXhmc19leHRkZWx0YV90CQkqZGVsdGEsIC8qIENoYW5nZSBtYWRlIHRvIGluY29yZSBleHRlbnRzICovCiAJaW50CQkJcnN2ZCkJLyogT0sgdG8gdXNlIHJlc2VydmVkIGRhdGEgYmxvY2sgYWxsb2NhdGlvbiAqLwogewogCXhmc19idHJlZV9jdXJfdAkJKmN1cjsJLyogYnRyZWUgY3Vyc29yICovCkBAIC03OTcsMTEgKzc3Nyw2IEBACiAJCQkJZ290byBkb25lOwogCQl9CiAJCSpkbmV3ID0gMDsKLQkJLyogREVMVEE6IFRocmVlIGluLWNvcmUgZXh0ZW50cyBhcmUgcmVwbGFjZWQgYnkgb25lLiAqLwotCQl0ZW1wID0gTEVGVC5icl9zdGFydG9mZjsKLQkJdGVtcDIgPSBMRUZULmJyX2Jsb2NrY291bnQgKwotCQkJUFJFVi5icl9ibG9ja2NvdW50ICsKLQkJCVJJR0hULmJyX2Jsb2NrY291bnQ7CiAJCWJyZWFrOwogCiAJY2FzZSBCTUFQX0xFRlRfRklMTElORyB8IEJNQVBfUklHSFRfRklMTElORyB8IEJNQVBfTEVGVF9DT05USUc6CkBAIC04MzIsMTAgKzgwNyw2IEBACiAJCQkJZ290byBkb25lOwogCQl9CiAJCSpkbmV3ID0gMDsKLQkJLyogREVMVEE6IFR3byBpbi1jb3JlIGV4dGVudHMgYXJlIHJlcGxhY2VkIGJ5IG9uZS4gKi8KLQkJdGVtcCA9IExFRlQuYnJfc3RhcnRvZmY7Ci0JCXRlbXAyID0gTEVGVC5icl9ibG9ja2NvdW50ICsKLQkJCVBSRVYuYnJfYmxvY2tjb3VudDsKIAkJYnJlYWs7CiAKIAljYXNlIEJNQVBfTEVGVF9GSUxMSU5HIHwgQk1BUF9SSUdIVF9GSUxMSU5HIHwgQk1BUF9SSUdIVF9DT05USUc6CkBAIC04NjcsMTAgKzgzOCw2IEBACiAJCQkJZ290byBkb25lOwogCQl9CiAJCSpkbmV3ID0gMDsKLQkJLyogREVMVEE6IFR3byBpbi1jb3JlIGV4dGVudHMgYXJlIHJlcGxhY2VkIGJ5IG9uZS4gKi8KLQkJdGVtcCA9IFBSRVYuYnJfc3RhcnRvZmY7Ci0JCXRlbXAyID0gUFJFVi5icl9ibG9ja2NvdW50ICsKLQkJCVJJR0hULmJyX2Jsb2NrY291bnQ7CiAJCWJyZWFrOwogCiAJY2FzZSBCTUFQX0xFRlRfRklMTElORyB8IEJNQVBfUklHSFRfRklMTElORzoKQEAgLTkwMCw5ICs4NjcsNiBAQAogCQkJWEZTX1dBTlRfQ09SUlVQVEVEX0dPVE8oaSA9PSAxLCBkb25lKTsKIAkJfQogCQkqZG5ldyA9IDA7Ci0JCS8qIERFTFRBOiBUaGUgaW4tY29yZSBleHRlbnQgZGVzY3JpYmVkIGJ5IG5ldyBjaGFuZ2VkIHR5cGUuICovCi0JCXRlbXAgPSBuZXctPmJyX3N0YXJ0b2ZmOwotCQl0ZW1wMiA9IG5ldy0+YnJfYmxvY2tjb3VudDsKIAkJYnJlYWs7CiAKIAljYXNlIEJNQVBfTEVGVF9GSUxMSU5HIHwgQk1BUF9MRUZUX0NPTlRJRzoKQEAgLTk0MiwxMCArOTA2LDYgQEAKIAkJeGZzX2JtYnRfc2V0X3N0YXJ0YmxvY2soZXAsIG51bGxzdGFydGJsb2NrKChpbnQpdGVtcCkpOwogCQl0cmFjZV94ZnNfYm1hcF9wb3N0X3VwZGF0ZShpcCwgaWR4LCBzdGF0ZSwgX1RISVNfSVBfKTsKIAkJKmRuZXcgPSB0ZW1wOwotCQkvKiBERUxUQTogVGhlIGJvdW5kYXJ5IGJldHdlZW4gdHdvIGluLWNvcmUgZXh0ZW50cyBtb3ZlZC4gKi8KLQkJdGVtcCA9IExFRlQuYnJfc3RhcnRvZmY7Ci0JCXRlbXAyID0gTEVGVC5icl9ibG9ja2NvdW50ICsKLQkJCVBSRVYuYnJfYmxvY2tjb3VudDsKIAkJYnJlYWs7CiAKIAljYXNlIEJNQVBfTEVGVF9GSUxMSU5HOgpAQCAtOTkwLDkgKzk1MCw2IEBACiAJCXhmc19ibWJ0X3NldF9zdGFydGJsb2NrKGVwLCBudWxsc3RhcnRibG9jaygoaW50KXRlbXApKTsKIAkJdHJhY2VfeGZzX2JtYXBfcG9zdF91cGRhdGUoaXAsIGlkeCArIDEsIHN0YXRlLCBfVEhJU19JUF8pOwogCQkqZG5ldyA9IHRlbXA7Ci0JCS8qIERFTFRBOiBPbmUgaW4tY29yZSBleHRlbnQgaXMgc3BsaXQgaW4gdHdvLiAqLwotCQl0ZW1wID0gUFJFVi5icl9zdGFydG9mZjsKLQkJdGVtcDIgPSBQUkVWLmJyX2Jsb2NrY291bnQ7CiAJCWJyZWFrOwogCiAJY2FzZSBCTUFQX1JJR0hUX0ZJTExJTkcgfCBCTUFQX1JJR0hUX0NPTlRJRzoKQEAgLTEwMzEsMTAgKzk4OCw2IEBACiAJCXhmc19ibWJ0X3NldF9zdGFydGJsb2NrKGVwLCBudWxsc3RhcnRibG9jaygoaW50KXRlbXApKTsKIAkJdHJhY2VfeGZzX2JtYXBfcG9zdF91cGRhdGUoaXAsIGlkeCwgc3RhdGUsIF9USElTX0lQXyk7CiAJCSpkbmV3ID0gdGVtcDsKLQkJLyogREVMVEE6IFRoZSBib3VuZGFyeSBiZXR3ZWVuIHR3byBpbi1jb3JlIGV4dGVudHMgbW92ZWQuICovCi0JCXRlbXAgPSBQUkVWLmJyX3N0YXJ0b2ZmOwotCQl0ZW1wMiA9IFBSRVYuYnJfYmxvY2tjb3VudCArCi0JCQlSSUdIVC5icl9ibG9ja2NvdW50OwogCQlicmVhazsKIAogCWNhc2UgQk1BUF9SSUdIVF9GSUxMSU5HOgpAQCAtMTA3OCw5ICsxMDMxLDYgQEAKIAkJeGZzX2JtYnRfc2V0X3N0YXJ0YmxvY2soZXAsIG51bGxzdGFydGJsb2NrKChpbnQpdGVtcCkpOwogCQl0cmFjZV94ZnNfYm1hcF9wb3N0X3VwZGF0ZShpcCwgaWR4LCBzdGF0ZSwgX1RISVNfSVBfKTsKIAkJKmRuZXcgPSB0ZW1wOwotCQkvKiBERUxUQTogT25lIGluLWNvcmUgZXh0ZW50IGlzIHNwbGl0IGluIHR3by4gKi8KLQkJdGVtcCA9IFBSRVYuYnJfc3RhcnRvZmY7Ci0JCXRlbXAyID0gUFJFVi5icl9ibG9ja2NvdW50OwogCQlicmVhazsKIAogCWNhc2UgMDoKQEAgLTExNjEsOSArMTExMSw2IEBACiAJCQludWxsc3RhcnRibG9jaygoaW50KXRlbXAyKSk7CiAJCXRyYWNlX3hmc19ibWFwX3Bvc3RfdXBkYXRlKGlwLCBpZHggKyAyLCBzdGF0ZSwgX1RISVNfSVBfKTsKIAkJKmRuZXcgPSB0ZW1wICsgdGVtcDI7Ci0JCS8qIERFTFRBOiBPbmUgaW4tY29yZSBleHRlbnQgaXMgc3BsaXQgaW4gdGhyZWUuICovCi0JCXRlbXAgPSBQUkVWLmJyX3N0YXJ0b2ZmOwotCQl0ZW1wMiA9IFBSRVYuYnJfYmxvY2tjb3VudDsKIAkJYnJlYWs7CiAKIAljYXNlIEJNQVBfTEVGVF9GSUxMSU5HIHwgQk1BUF9MRUZUX0NPTlRJRyB8IEJNQVBfUklHSFRfQ09OVElHOgpAQCAtMTE3OSwxMyArMTEyNiw2IEBACiAJCUFTU0VSVCgwKTsKIAl9CiAJKmN1cnAgPSBjdXI7Ci0JaWYgKGRlbHRhKSB7Ci0JCXRlbXAyICs9IHRlbXA7Ci0JCWlmIChkZWx0YS0+eGVkX3N0YXJ0b2ZmID4gdGVtcCkKLQkJCWRlbHRhLT54ZWRfc3RhcnRvZmYgPSB0ZW1wOwotCQlpZiAoZGVsdGEtPnhlZF9ibG9ja2NvdW50IDwgdGVtcDIpCi0JCQlkZWx0YS0+eGVkX2Jsb2NrY291bnQgPSB0ZW1wMjsKLQl9CiBkb25lOgogCSpsb2dmbGFnc3AgPSBydmFsOwogCXJldHVybiBlcnJvcjsKQEAgLTEyMDQsOCArMTE0NCw3IEBACiAJeGZzX2V4dG51bV90CQlpZHgsCS8qIGV4dGVudCBudW1iZXIgdG8gdXBkYXRlL2luc2VydCAqLwogCXhmc19idHJlZV9jdXJfdAkJKipjdXJwLAkvKiBpZiAqY3VycCBpcyBudWxsLCBub3QgYSBidHJlZSAqLwogCXhmc19ibWJ0X2lyZWNfdAkJKm5ldywJLyogbmV3IGRhdGEgdG8gYWRkIHRvIGZpbGUgZXh0ZW50cyAqLwotCWludAkJCSpsb2dmbGFnc3AsIC8qIGlub2RlIGxvZ2dpbmcgZmxhZ3MgKi8KLQl4ZnNfZXh0ZGVsdGFfdAkJKmRlbHRhKSAvKiBDaGFuZ2UgbWFkZSB0byBpbmNvcmUgZXh0ZW50cyAqLworCWludAkJCSpsb2dmbGFnc3ApIC8qIGlub2RlIGxvZ2dpbmcgZmxhZ3MgKi8KIHsKIAl4ZnNfYnRyZWVfY3VyX3QJCSpjdXI7CS8qIGJ0cmVlIGN1cnNvciAqLwogCXhmc19ibWJ0X3JlY19ob3N0X3QJKmVwOwkvKiBleHRlbnQgZW50cnkgZm9yIGlkeCAqLwpAQCAtMTIxOSw4ICsxMTU4LDYgQEAKIAkJCQkJLyogbGVmdCBpcyAwLCByaWdodCBpcyAxLCBwcmV2IGlzIDIgKi8KIAlpbnQJCQlydmFsPTA7CS8qIHJldHVybiB2YWx1ZSAobG9nZ2luZyBmbGFncykgKi8KIAlpbnQJCQlzdGF0ZSA9IDA7Lyogc3RhdGUgYml0cywgYWNjZXNzZWQgdGhydSBtYWNyb3MgKi8KLQl4ZnNfZmlsYmxrc190CQl0ZW1wPTA7Ci0JeGZzX2ZpbGJsa3NfdAkJdGVtcDI9MDsKIAogI2RlZmluZQlMRUZUCQlyWzBdCiAjZGVmaW5lCVJJR0hUCQlyWzFdCkBAIC0xMzQxLDExICsxMjc4LDYgQEAKIAkJCQlSSUdIVC5icl9ibG9ja2NvdW50LCBMRUZULmJyX3N0YXRlKSkpCiAJCQkJZ290byBkb25lOwogCQl9Ci0JCS8qIERFTFRBOiBUaHJlZSBpbi1jb3JlIGV4dGVudHMgYXJlIHJlcGxhY2VkIGJ5IG9uZS4gKi8KLQkJdGVtcCA9IExFRlQuYnJfc3RhcnRvZmY7Ci0JCXRlbXAyID0gTEVGVC5icl9ibG9ja2NvdW50ICsKLQkJCVBSRVYuYnJfYmxvY2tjb3VudCArCi0JCQlSSUdIVC5icl9ibG9ja2NvdW50OwogCQlicmVhazsKIAogCWNhc2UgQk1BUF9MRUZUX0ZJTExJTkcgfCBCTUFQX1JJR0hUX0ZJTExJTkcgfCBCTUFQX0xFRlRfQ09OVElHOgpAQCAtMTM4MiwxMCArMTMxNCw2IEBACiAJCQkJTEVGVC5icl9zdGF0ZSkpKQogCQkJCWdvdG8gZG9uZTsKIAkJfQotCQkvKiBERUxUQTogVHdvIGluLWNvcmUgZXh0ZW50cyBhcmUgcmVwbGFjZWQgYnkgb25lLiAqLwotCQl0ZW1wID0gTEVGVC5icl9zdGFydG9mZjsKLQkJdGVtcDIgPSBMRUZULmJyX2Jsb2NrY291bnQgKwotCQkJUFJFVi5icl9ibG9ja2NvdW50OwogCQlicmVhazsKIAogCWNhc2UgQk1BUF9MRUZUX0ZJTExJTkcgfCBCTUFQX1JJR0hUX0ZJTExJTkcgfCBCTUFQX1JJR0hUX0NPTlRJRzoKQEAgLTE0MjIsMTAgKzEzNTAsNiBAQAogCQkJCW5ld2V4dCkpKQogCQkJCWdvdG8gZG9uZTsKIAkJfQotCQkvKiBERUxUQTogVHdvIGluLWNvcmUgZXh0ZW50cyBhcmUgcmVwbGFjZWQgYnkgb25lLiAqLwotCQl0ZW1wID0gUFJFVi5icl9zdGFydG9mZjsKLQkJdGVtcDIgPSBQUkVWLmJyX2Jsb2NrY291bnQgKwotCQkJUklHSFQuYnJfYmxvY2tjb3VudDsKIAkJYnJlYWs7CiAKIAljYXNlIEJNQVBfTEVGVF9GSUxMSU5HIHwgQk1BUF9SSUdIVF9GSUxMSU5HOgpAQCAtMTQ1Myw5ICsxMzc3LDYgQEAKIAkJCQluZXdleHQpKSkKIAkJCQlnb3RvIGRvbmU7CiAJCX0KLQkJLyogREVMVEE6IFRoZSBpbi1jb3JlIGV4dGVudCBkZXNjcmliZWQgYnkgbmV3IGNoYW5nZWQgdHlwZS4gKi8KLQkJdGVtcCA9IG5ldy0+YnJfc3RhcnRvZmY7Ci0JCXRlbXAyID0gbmV3LT5icl9ibG9ja2NvdW50OwogCQlicmVhazsKIAogCWNhc2UgQk1BUF9MRUZUX0ZJTExJTkcgfCBCTUFQX0xFRlRfQ09OVElHOgpAQCAtMTUwMSwxMCArMTQyMiw2IEBACiAJCQkJTEVGVC5icl9zdGF0ZSkpCiAJCQkJZ290byBkb25lOwogCQl9Ci0JCS8qIERFTFRBOiBUaGUgYm91bmRhcnkgYmV0d2VlbiB0d28gaW4tY29yZSBleHRlbnRzIG1vdmVkLiAqLwotCQl0ZW1wID0gTEVGVC5icl9zdGFydG9mZjsKLQkJdGVtcDIgPSBMRUZULmJyX2Jsb2NrY291bnQgKwotCQkJUFJFVi5icl9ibG9ja2NvdW50OwogCQlicmVhazsKIAogCWNhc2UgQk1BUF9MRUZUX0ZJTExJTkc6CkBAIC0xNTQ0LDkgKzE0NjEsNiBAQAogCQkJCWdvdG8gZG9uZTsKIAkJCVhGU19XQU5UX0NPUlJVUFRFRF9HT1RPKGkgPT0gMSwgZG9uZSk7CiAJCX0KLQkJLyogREVMVEE6IE9uZSBpbi1jb3JlIGV4dGVudCBpcyBzcGxpdCBpbiB0d28uICovCi0JCXRlbXAgPSBQUkVWLmJyX3N0YXJ0b2ZmOwotCQl0ZW1wMiA9IFBSRVYuYnJfYmxvY2tjb3VudDsKIAkJYnJlYWs7CiAKIAljYXNlIEJNQVBfUklHSFRfRklMTElORyB8IEJNQVBfUklHSFRfQ09OVElHOgpAQCAtMTU4NywxMCArMTUwMSw2IEBACiAJCQkJbmV3ZXh0KSkpCiAJCQkJZ290byBkb25lOwogCQl9Ci0JCS8qIERFTFRBOiBUaGUgYm91bmRhcnkgYmV0d2VlbiB0d28gaW4tY29yZSBleHRlbnRzIG1vdmVkLiAqLwotCQl0ZW1wID0gUFJFVi5icl9zdGFydG9mZjsKLQkJdGVtcDIgPSBQUkVWLmJyX2Jsb2NrY291bnQgKwotCQkJUklHSFQuYnJfYmxvY2tjb3VudDsKIAkJYnJlYWs7CiAKIAljYXNlIEJNQVBfUklHSFRfRklMTElORzoKQEAgLTE2MzAsOSArMTU0MCw2IEBACiAJCQkJZ290byBkb25lOwogCQkJWEZTX1dBTlRfQ09SUlVQVEVEX0dPVE8oaSA9PSAxLCBkb25lKTsKIAkJfQotCQkvKiBERUxUQTogT25lIGluLWNvcmUgZXh0ZW50IGlzIHNwbGl0IGluIHR3by4gKi8KLQkJdGVtcCA9IFBSRVYuYnJfc3RhcnRvZmY7Ci0JCXRlbXAyID0gUFJFVi5icl9ibG9ja2NvdW50OwogCQlicmVhazsKIAogCWNhc2UgMDoKQEAgLTE2OTIsOSArMTU5OSw2IEBACiAJCQkJZ290byBkb25lOwogCQkJWEZTX1dBTlRfQ09SUlVQVEVEX0dPVE8oaSA9PSAxLCBkb25lKTsKIAkJfQotCQkvKiBERUxUQTogT25lIGluLWNvcmUgZXh0ZW50IGlzIHNwbGl0IGluIHRocmVlLiAqLwotCQl0ZW1wID0gUFJFVi5icl9zdGFydG9mZjsKLQkJdGVtcDIgPSBQUkVWLmJyX2Jsb2NrY291bnQ7CiAJCWJyZWFrOwogCiAJY2FzZSBCTUFQX0xFRlRfRklMTElORyB8IEJNQVBfTEVGVF9DT05USUcgfCBCTUFQX1JJR0hUX0NPTlRJRzoKQEAgLTE3MTAsMTMgKzE2MTQsNiBAQAogCQlBU1NFUlQoMCk7CiAJfQogCSpjdXJwID0gY3VyOwotCWlmIChkZWx0YSkgewotCQl0ZW1wMiArPSB0ZW1wOwotCQlpZiAoZGVsdGEtPnhlZF9zdGFydG9mZiA+IHRlbXApCi0JCQlkZWx0YS0+eGVkX3N0YXJ0b2ZmID0gdGVtcDsKLQkJaWYgKGRlbHRhLT54ZWRfYmxvY2tjb3VudCA8IHRlbXAyKQotCQkJZGVsdGEtPnhlZF9ibG9ja2NvdW50ID0gdGVtcDI7Ci0JfQogZG9uZToKIAkqbG9nZmxhZ3NwID0gcnZhbDsKIAlyZXR1cm4gZXJyb3I7CkBAIC0xNzM2LDcgKzE2MzMsNiBAQAogCXhmc19leHRudW1fdAkJaWR4LAkvKiBleHRlbnQgbnVtYmVyIHRvIHVwZGF0ZS9pbnNlcnQgKi8KIAl4ZnNfYm1idF9pcmVjX3QJCSpuZXcsCS8qIG5ldyBkYXRhIHRvIGFkZCB0byBmaWxlIGV4dGVudHMgKi8KIAlpbnQJCQkqbG9nZmxhZ3NwLCAvKiBpbm9kZSBsb2dnaW5nIGZsYWdzICovCi0JeGZzX2V4dGRlbHRhX3QJCSpkZWx0YSwgLyogQ2hhbmdlIG1hZGUgdG8gaW5jb3JlIGV4dGVudHMgKi8KIAlpbnQJCQlyc3ZkKQkJLyogT0sgdG8gYWxsb2NhdGUgcmVzZXJ2ZWQgYmxvY2tzICovCiB7CiAJeGZzX2JtYnRfcmVjX2hvc3RfdAkqZXA7CS8qIGV4dGVudCByZWNvcmQgZm9yIGlkeCAqLwpAQCAtMTc0Nyw3ICsxNjQzLDYgQEAKIAl4ZnNfYm1idF9pcmVjX3QJCXJpZ2h0OwkvKiByaWdodCBuZWlnaGJvciBleHRlbnQgZW50cnkgKi8KIAlpbnQJCQlzdGF0ZTsgIC8qIHN0YXRlIGJpdHMsIGFjY2Vzc2VkIHRocnUgbWFjcm9zICovCiAJeGZzX2ZpbGJsa3NfdAkJdGVtcD0wOwkvKiB0ZW1wIGZvciBpbmRpcmVjdCBjYWxjdWxhdGlvbnMgKi8KLQl4ZnNfZmlsYmxrc190CQl0ZW1wMj0wOwogCiAJaWZwID0gWEZTX0lGT1JLX1BUUihpcCwgWEZTX0RBVEFfRk9SSyk7CiAJZXAgPSB4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaWR4KTsKQEAgLTE4MTksOSArMTcxNCw2IEBACiAKIAkJeGZzX2lleHRfcmVtb3ZlKGlwLCBpZHgsIDEsIHN0YXRlKTsKIAkJaXAtPmlfZGYuaWZfbGFzdGV4ID0gaWR4IC0gMTsKLQkJLyogREVMVEE6IFR3byBpbi1jb3JlIGV4dGVudHMgd2VyZSByZXBsYWNlZCBieSBvbmUuICovCi0JCXRlbXAyID0gdGVtcDsKLQkJdGVtcCA9IGxlZnQuYnJfc3RhcnRvZmY7CiAJCWJyZWFrOwogCiAJY2FzZSBCTUFQX0xFRlRfQ09OVElHOgpAQCAtMTg0MSw5ICsxNzMzLDYgQEAKIAkJdHJhY2VfeGZzX2JtYXBfcG9zdF91cGRhdGUoaXAsIGlkeCAtIDEsIHN0YXRlLCBfVEhJU19JUF8pOwogCiAJCWlwLT5pX2RmLmlmX2xhc3RleCA9IGlkeCAtIDE7Ci0JCS8qIERFTFRBOiBPbmUgaW4tY29yZSBleHRlbnQgZ3JldyBpbnRvIGEgaG9sZS4gKi8KLQkJdGVtcDIgPSB0ZW1wOwotCQl0ZW1wID0gbGVmdC5icl9zdGFydG9mZjsKIAkJYnJlYWs7CiAKIAljYXNlIEJNQVBfUklHSFRfQ09OVElHOgpAQCAtMTg2Miw5ICsxNzUxLDYgQEAKIAkJdHJhY2VfeGZzX2JtYXBfcG9zdF91cGRhdGUoaXAsIGlkeCwgc3RhdGUsIF9USElTX0lQXyk7CiAKIAkJaXAtPmlfZGYuaWZfbGFzdGV4ID0gaWR4OwotCQkvKiBERUxUQTogT25lIGluLWNvcmUgZXh0ZW50IGdyZXcgaW50byBhIGhvbGUuICovCi0JCXRlbXAyID0gdGVtcDsKLQkJdGVtcCA9IG5ldy0+YnJfc3RhcnRvZmY7CiAJCWJyZWFrOwogCiAJY2FzZSAwOgpAQCAtMTg3Niw5ICsxNzYyLDYgQEAKIAkJb2xkbGVuID0gbmV3bGVuID0gMDsKIAkJeGZzX2lleHRfaW5zZXJ0KGlwLCBpZHgsIDEsIG5ldywgc3RhdGUpOwogCQlpcC0+aV9kZi5pZl9sYXN0ZXggPSBpZHg7Ci0JCS8qIERFTFRBOiBBIG5ldyBpbi1jb3JlIGV4dGVudCB3YXMgYWRkZWQgaW4gYSBob2xlLiAqLwotCQl0ZW1wMiA9IG5ldy0+YnJfYmxvY2tjb3VudDsKLQkJdGVtcCA9IG5ldy0+YnJfc3RhcnRvZmY7CiAJCWJyZWFrOwogCX0KIAlpZiAob2xkbGVuICE9IG5ld2xlbikgewpAQCAtMTg4OSwxMyArMTc3Miw2IEBACiAJCSAqIE5vdGhpbmcgdG8gZG8gZm9yIGRpc2sgcXVvdGEgYWNjb3VudGluZyBoZXJlLgogCQkgKi8KIAl9Ci0JaWYgKGRlbHRhKSB7Ci0JCXRlbXAyICs9IHRlbXA7Ci0JCWlmIChkZWx0YS0+eGVkX3N0YXJ0b2ZmID4gdGVtcCkKLQkJCWRlbHRhLT54ZWRfc3RhcnRvZmYgPSB0ZW1wOwotCQlpZiAoZGVsdGEtPnhlZF9ibG9ja2NvdW50IDwgdGVtcDIpCi0JCQlkZWx0YS0+eGVkX2Jsb2NrY291bnQgPSB0ZW1wMjsKLQl9CiAJKmxvZ2ZsYWdzcCA9IDA7CiAJcmV0dXJuIDA7CiB9CkBAIC0xOTExLDcgKzE3ODcsNiBAQAogCXhmc19idHJlZV9jdXJfdAkJKmN1ciwJLyogaWYgbnVsbCwgbm90IGEgYnRyZWUgKi8KIAl4ZnNfYm1idF9pcmVjX3QJCSpuZXcsCS8qIG5ldyBkYXRhIHRvIGFkZCB0byBmaWxlIGV4dGVudHMgKi8KIAlpbnQJCQkqbG9nZmxhZ3NwLCAvKiBpbm9kZSBsb2dnaW5nIGZsYWdzICovCi0JeGZzX2V4dGRlbHRhX3QJCSpkZWx0YSwgLyogQ2hhbmdlIG1hZGUgdG8gaW5jb3JlIGV4dGVudHMgKi8KIAlpbnQJCQl3aGljaGZvcmspIC8qIGRhdGEgb3IgYXR0ciBmb3JrICovCiB7CiAJeGZzX2JtYnRfcmVjX2hvc3RfdAkqZXA7CS8qIHBvaW50ZXIgdG8gZXh0ZW50IGVudHJ5IGlucy4gcG9pbnQgKi8KQEAgLTE5MjIsOCArMTc5Nyw2IEBACiAJeGZzX2JtYnRfaXJlY190CQlyaWdodDsJLyogcmlnaHQgbmVpZ2hib3IgZXh0ZW50IGVudHJ5ICovCiAJaW50CQkJcnZhbD0wOwkvKiByZXR1cm4gdmFsdWUgKGxvZ2dpbmcgZmxhZ3MpICovCiAJaW50CQkJc3RhdGU7CS8qIHN0YXRlIGJpdHMsIGFjY2Vzc2VkIHRocnUgbWFjcm9zICovCi0JeGZzX2ZpbGJsa3NfdAkJdGVtcD0wOwotCXhmc19maWxibGtzX3QJCXRlbXAyPTA7CiAKIAlpZnAgPSBYRlNfSUZPUktfUFRSKGlwLCB3aGljaGZvcmspOwogCUFTU0VSVChpZHggPD0gaWZwLT5pZl9ieXRlcyAvICh1aW50KXNpemVvZih4ZnNfYm1idF9yZWNfdCkpOwpAQCAtMjAyMCwxMSArMTg5Myw2IEBACiAJCQkJCWxlZnQuYnJfc3RhdGUpKSkKIAkJCQlnb3RvIGRvbmU7CiAJCX0KLQkJLyogREVMVEE6IFR3byBpbi1jb3JlIGV4dGVudHMgd2VyZSByZXBsYWNlZCBieSBvbmUuICovCi0JCXRlbXAgPSBsZWZ0LmJyX3N0YXJ0b2ZmOwotCQl0ZW1wMiA9IGxlZnQuYnJfYmxvY2tjb3VudCArCi0JCQluZXctPmJyX2Jsb2NrY291bnQgKwotCQkJcmlnaHQuYnJfYmxvY2tjb3VudDsKIAkJYnJlYWs7CiAKIAljYXNlIEJNQVBfTEVGVF9DT05USUc6CkBAIC0yMDU2LDEwICsxOTI0LDYgQEAKIAkJCQkJbGVmdC5icl9zdGF0ZSkpKQogCQkJCWdvdG8gZG9uZTsKIAkJfQotCQkvKiBERUxUQTogT25lIGluLWNvcmUgZXh0ZW50IGdyZXcuICovCi0JCXRlbXAgPSBsZWZ0LmJyX3N0YXJ0b2ZmOwotCQl0ZW1wMiA9IGxlZnQuYnJfYmxvY2tjb3VudCArCi0JCQluZXctPmJyX2Jsb2NrY291bnQ7CiAJCWJyZWFrOwogCiAJY2FzZSBCTUFQX1JJR0hUX0NPTlRJRzoKQEAgLTIwOTIsMTAgKzE5NTYsNiBAQAogCQkJCQlyaWdodC5icl9zdGF0ZSkpKQogCQkJCWdvdG8gZG9uZTsKIAkJfQotCQkvKiBERUxUQTogT25lIGluLWNvcmUgZXh0ZW50IGdyZXcuICovCi0JCXRlbXAgPSBuZXctPmJyX3N0YXJ0b2ZmOwotCQl0ZW1wMiA9IG5ldy0+YnJfYmxvY2tjb3VudCArCi0JCQlyaWdodC5icl9ibG9ja2NvdW50OwogCQlicmVhazsKIAogCWNhc2UgMDoKQEAgLTIxMjMsMTggKzE5ODMsOCBAQAogCQkJCWdvdG8gZG9uZTsKIAkJCVhGU19XQU5UX0NPUlJVUFRFRF9HT1RPKGkgPT0gMSwgZG9uZSk7CiAJCX0KLQkJLyogREVMVEE6IEEgbmV3IGV4dGVudCB3YXMgYWRkZWQgaW4gYSBob2xlLiAqLwotCQl0ZW1wID0gbmV3LT5icl9zdGFydG9mZjsKLQkJdGVtcDIgPSBuZXctPmJyX2Jsb2NrY291bnQ7CiAJCWJyZWFrOwogCX0KLQlpZiAoZGVsdGEpIHsKLQkJdGVtcDIgKz0gdGVtcDsKLQkJaWYgKGRlbHRhLT54ZWRfc3RhcnRvZmYgPiB0ZW1wKQotCQkJZGVsdGEtPnhlZF9zdGFydG9mZiA9IHRlbXA7Ci0JCWlmIChkZWx0YS0+eGVkX2Jsb2NrY291bnQgPCB0ZW1wMikKLQkJCWRlbHRhLT54ZWRfYmxvY2tjb3VudCA9IHRlbXAyOwotCX0KIGRvbmU6CiAJKmxvZ2ZsYWdzcCA9IHJ2YWw7CiAJcmV0dXJuIGVycm9yOwpAQCAtMjk1OSw3ICsyODA5LDYgQEAKIAl4ZnNfYnRyZWVfY3VyX3QJCSpjdXIsCS8qIGlmIG51bGwsIG5vdCBhIGJ0cmVlICovCiAJeGZzX2JtYnRfaXJlY190CQkqZGVsLAkvKiBkYXRhIHRvIHJlbW92ZSBmcm9tIGV4dGVudHMgKi8KIAlpbnQJCQkqbG9nZmxhZ3NwLCAvKiBpbm9kZSBsb2dnaW5nIGZsYWdzICovCi0JeGZzX2V4dGRlbHRhX3QJCSpkZWx0YSwgLyogQ2hhbmdlIG1hZGUgdG8gaW5jb3JlIGV4dGVudHMgKi8KIAlpbnQJCQl3aGljaGZvcmssIC8qIGRhdGEgb3IgYXR0ciBmb3JrICovCiAJaW50CQkJcnN2ZCkJLyogT0sgdG8gYWxsb2NhdGUgcmVzZXJ2ZWQgYmxvY2tzICovCiB7CkBAIC0zMjY1LDE0ICszMTE0LDYgQEAKIAlpZiAoZGFfb2xkID4gZGFfbmV3KQogCQl4ZnNfbW9kX2luY29yZV9zYihtcCwgWEZTX1NCU19GREJMT0NLUywgKGludDY0X3QpKGRhX29sZCAtIGRhX25ldyksCiAJCQlyc3ZkKTsKLQlpZiAoZGVsdGEpIHsKLQkJLyogREVMVEE6IHJlcG9ydCB0aGUgb3JpZ2luYWwgZXh0ZW50LiAqLwotCQlpZiAoZGVsdGEtPnhlZF9zdGFydG9mZiA+IGdvdC5icl9zdGFydG9mZikKLQkJCWRlbHRhLT54ZWRfc3RhcnRvZmYgPSBnb3QuYnJfc3RhcnRvZmY7Ci0JCWlmIChkZWx0YS0+eGVkX2Jsb2NrY291bnQgPCBnb3QuYnJfc3RhcnRvZmYrZ290LmJyX2Jsb2NrY291bnQpCi0JCQlkZWx0YS0+eGVkX2Jsb2NrY291bnQgPSBnb3QuYnJfc3RhcnRvZmYgKwotCQkJCQkJCWdvdC5icl9ibG9ja2NvdW50OwotCX0KIGRvbmU6CiAJKmxvZ2ZsYWdzcCA9IGZsYWdzOwogCXJldHVybiBlcnJvcjsKQEAgLTM3NTQsOSArMzU5NSwxMCBAQAogCQlpcC0+aV9kLmRpX2Fmb3JtYXQgPSBYRlNfRElOT0RFX0ZNVF9FWFRFTlRTOwogCX0KIAlBU1NFUlQoaXAtPmlfZC5kaV9hbmV4dGVudHMgPT0gMCk7Ci0JSUhPTEQoaXApOwotCXhmc190cmFuc19pam9pbih0cCwgaXAsIFhGU19JTE9DS19FWENMKTsKKworCXhmc190cmFuc19pam9pbl9yZWYodHAsIGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiAJeGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsIFhGU19JTE9HX0NPUkUpOworCiAJc3dpdGNoIChpcC0+aV9kLmRpX2Zvcm1hdCkgewogCWNhc2UgWEZTX0RJTk9ERV9GTVRfREVWOgogCQlpcC0+aV9kLmRpX2ZvcmtvZmYgPSByb3VuZHVwKHNpemVvZih4ZnNfZGV2X3QpLCA4KSA+PiAzOwpAQCAtNDQ4Myw4ICs0MzI1LDcgQEAKIAl4ZnNfZXh0bGVuX3QJdG90YWwsCQkvKiB0b3RhbCBibG9ja3MgbmVlZGVkICovCiAJeGZzX2JtYnRfaXJlY190CSptdmFsLAkJLyogb3V0cHV0OiBtYXAgdmFsdWVzICovCiAJaW50CQkqbm1hcCwJCS8qIGkvbzogbXZhbCBzaXplL2NvdW50ICovCi0JeGZzX2JtYXBfZnJlZV90CSpmbGlzdCwJCS8qIGkvbzogbGlzdCBleHRlbnRzIHRvIGZyZWUgKi8KLQl4ZnNfZXh0ZGVsdGFfdAkqZGVsdGEpCQkvKiBvOiBjaGFuZ2UgbWFkZSB0byBpbmNvcmUgZXh0ZW50cyAqLworCXhmc19ibWFwX2ZyZWVfdAkqZmxpc3QpCQkvKiBpL286IGxpc3QgZXh0ZW50cyB0byBmcmVlICovCiB7CiAJeGZzX2ZzYmxvY2tfdAlhYm5vOwkJLyogYWxsb2NhdGVkIGJsb2NrIG51bWJlciAqLwogCXhmc19leHRsZW5fdAlhbGVuOwkJLyogYWxsb2NhdGVkIGV4dGVudCBsZW5ndGggKi8KQEAgLTQ1OTYsMTAgKzQ0MzcsNyBAQAogCWVuZCA9IGJubyArIGxlbjsKIAlvYm5vID0gYm5vOwogCWJtYS5pcCA9IE5VTEw7Ci0JaWYgKGRlbHRhKSB7Ci0JCWRlbHRhLT54ZWRfc3RhcnRvZmYgPSBOVUxMRklMRU9GRjsKLQkJZGVsdGEtPnhlZF9ibG9ja2NvdW50ID0gMDsKLQl9CisKIAl3aGlsZSAoYm5vIDwgZW5kICYmIG4gPCAqbm1hcCkgewogCQkvKgogCQkgKiBSZWFkaW5nIHBhc3QgZW9mLCBhY3QgYXMgdGhvdWdoIHRoZXJlJ3MgYSBob2xlCkBAIC00NjIwLDE5ICs0NDU4LDEzIEBACiAJCQkgKiBhbGxvY2F0ZSB0aGUgc3R1ZmYgYXNrZWQgZm9yIGluIHRoaXMgYm1hcCBjYWxsCiAJCQkgKiBidXQgdGhhdCB3b3VsZG4ndCBiZSBhcyBnb29kLgogCQkJICovCi0JCQlpZiAod2FzZGVsYXkgJiYgIShmbGFncyAmIFhGU19CTUFQSV9FWEFDVCkpIHsKKwkJCWlmICh3YXNkZWxheSkgewogCQkJCWFsZW4gPSAoeGZzX2V4dGxlbl90KWdvdC5icl9ibG9ja2NvdW50OwogCQkJCWFvZmYgPSBnb3QuYnJfc3RhcnRvZmY7CiAJCQkJaWYgKGxhc3R4ICE9IE5VTExFWFROVU0gJiYgbGFzdHgpIHsKIAkJCQkJZXAgPSB4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgbGFzdHggLSAxKTsKIAkJCQkJeGZzX2JtYnRfZ2V0X2FsbChlcCwgJnByZXYpOwogCQkJCX0KLQkJCX0gZWxzZSBpZiAod2FzZGVsYXkpIHsKLQkJCQlhbGVuID0gKHhmc19leHRsZW5fdCkKLQkJCQkJWEZTX0ZJTEJMS1NfTUlOKGxlbiwKLQkJCQkJCShnb3QuYnJfc3RhcnRvZmYgKwotCQkJCQkJIGdvdC5icl9ibG9ja2NvdW50KSAtIGJubyk7Ci0JCQkJYW9mZiA9IGJubzsKIAkJCX0gZWxzZSB7CiAJCQkJYWxlbiA9ICh4ZnNfZXh0bGVuX3QpCiAJCQkJCVhGU19GSUxCTEtTX01JTihsZW4sIE1BWEVYVExFTik7CkBAIC00ODMxLDcgKzQ2NjMsNyBAQAogCQkJCQlnb3QuYnJfc3RhdGUgPSBYRlNfRVhUX1VOV1JJVFRFTjsKIAkJCX0KIAkJCWVycm9yID0geGZzX2JtYXBfYWRkX2V4dGVudChpcCwgbGFzdHgsICZjdXIsICZnb3QsCi0JCQkJZmlyc3RibG9jaywgZmxpc3QsICZ0bXBfbG9nZmxhZ3MsIGRlbHRhLAorCQkJCWZpcnN0YmxvY2ssIGZsaXN0LCAmdG1wX2xvZ2ZsYWdzLAogCQkJCXdoaWNoZm9yaywgKGZsYWdzICYgWEZTX0JNQVBJX1JTVkJMT0NLUykpOwogCQkJbG9nZmxhZ3MgfD0gdG1wX2xvZ2ZsYWdzOwogCQkJaWYgKGVycm9yKQpAQCAtNDkyNyw3ICs0NzU5LDcgQEAKIAkJCX0KIAkJCW12YWwtPmJyX3N0YXRlID0gWEZTX0VYVF9OT1JNOwogCQkJZXJyb3IgPSB4ZnNfYm1hcF9hZGRfZXh0ZW50KGlwLCBsYXN0eCwgJmN1ciwgbXZhbCwKLQkJCQlmaXJzdGJsb2NrLCBmbGlzdCwgJnRtcF9sb2dmbGFncywgZGVsdGEsCisJCQkJZmlyc3RibG9jaywgZmxpc3QsICZ0bXBfbG9nZmxhZ3MsCiAJCQkJd2hpY2hmb3JrLCAoZmxhZ3MgJiBYRlNfQk1BUElfUlNWQkxPQ0tTKSk7CiAJCQlsb2dmbGFncyB8PSB0bXBfbG9nZmxhZ3M7CiAJCQlpZiAoZXJyb3IpCkBAIC01MDE3LDE0ICs0ODQ5LDYgQEAKIAlBU1NFUlQoWEZTX0lGT1JLX0ZPUk1BVChpcCwgd2hpY2hmb3JrKSAhPSBYRlNfRElOT0RFX0ZNVF9CVFJFRSB8fAogCSAgICAgICBYRlNfSUZPUktfTkVYVEVOVFMoaXAsIHdoaWNoZm9yaykgPiBpZnAtPmlmX2V4dF9tYXgpOwogCWVycm9yID0gMDsKLQlpZiAoZGVsdGEgJiYgZGVsdGEtPnhlZF9zdGFydG9mZiAhPSBOVUxMRklMRU9GRikgewotCQkvKiBBIGNoYW5nZSB3YXMgYWN0dWFsbHkgbWFkZS4KLQkJICogTm90ZSB0aGF0IGRlbHRhLT54ZWRfYmxvY2tvdW50IGlzIGFuIG9mZnNldCBhdCB0aGlzCi0JCSAqIHBvaW50IGFuZCBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBibG9jayBjb3VudC4KLQkJICovCi0JCUFTU0VSVChkZWx0YS0+eGVkX2Jsb2NrY291bnQgPiBkZWx0YS0+eGVkX3N0YXJ0b2ZmKTsKLQkJZGVsdGEtPnhlZF9ibG9ja2NvdW50IC09IGRlbHRhLT54ZWRfc3RhcnRvZmY7Ci0JfQogZXJyb3IwOgogCS8qCiAJICogTG9nIGV2ZXJ5dGhpbmcuICBEbyB0aGlzIGFmdGVyIGNvbnZlcnNpb24sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4KQEAgLTUxMzYsOCArNDk2MCw2IEBACiAJeGZzX2ZzYmxvY2tfdAkJKmZpcnN0YmxvY2ssCS8qIGZpcnN0IGFsbG9jYXRlZCBibG9jawogCQkJCQkJICAgY29udHJvbHMgYS5nLiBmb3IgYWxsb2NzICovCiAJeGZzX2JtYXBfZnJlZV90CQkqZmxpc3QsCQkvKiBpL286IGxpc3QgZXh0ZW50cyB0byBmcmVlICovCi0JeGZzX2V4dGRlbHRhX3QJCSpkZWx0YSwJCS8qIG86IGNoYW5nZSBtYWRlIHRvIGluY29yZQotCQkJCQkJICAgZXh0ZW50cyAqLwogCWludAkJCSpkb25lKQkJLyogc2V0IGlmIG5vdCBkb25lIHlldCAqLwogewogCXhmc19idHJlZV9jdXJfdAkJKmN1cjsJCS8qIGJtYXAgYnRyZWUgY3Vyc29yICovCkBAIC01MTk2LDEwICs1MDE4LDcgQEAKIAlibm8gPSBzdGFydCArIGxlbiAtIDE7CiAJZXAgPSB4ZnNfYm1hcF9zZWFyY2hfZXh0ZW50cyhpcCwgYm5vLCB3aGljaGZvcmssICZlb2YsICZsYXN0eCwgJmdvdCwKIAkJJnByZXYpOwotCWlmIChkZWx0YSkgewotCQlkZWx0YS0+eGVkX3N0YXJ0b2ZmID0gTlVMTEZJTEVPRkY7Ci0JCWRlbHRhLT54ZWRfYmxvY2tjb3VudCA9IDA7Ci0JfQorCiAJLyoKIAkgKiBDaGVjayB0byBzZWUgaWYgdGhlIGdpdmVuIGJsb2NrIG51bWJlciBpcyBwYXN0IHRoZSBlbmQgb2YgdGhlCiAJICogZmlsZSwgYmFjayB1cCB0byB0aGUgbGFzdCBibG9jayBpZiBzby4uLgpAQCAtNTI5Nyw3ICs1MTE2LDcgQEAKIAkJCX0KIAkJCWRlbC5icl9zdGF0ZSA9IFhGU19FWFRfVU5XUklUVEVOOwogCQkJZXJyb3IgPSB4ZnNfYm1hcF9hZGRfZXh0ZW50KGlwLCBsYXN0eCwgJmN1ciwgJmRlbCwKLQkJCQlmaXJzdGJsb2NrLCBmbGlzdCwgJmxvZ2ZsYWdzLCBkZWx0YSwKKwkJCQlmaXJzdGJsb2NrLCBmbGlzdCwgJmxvZ2ZsYWdzLAogCQkJCVhGU19EQVRBX0ZPUkssIDApOwogCQkJaWYgKGVycm9yKQogCQkJCWdvdG8gZXJyb3IwOwpAQCAtNTM1Miw3ICs1MTcxLDcgQEAKIAkJCQlwcmV2LmJyX3N0YXRlID0gWEZTX0VYVF9VTldSSVRURU47CiAJCQkJZXJyb3IgPSB4ZnNfYm1hcF9hZGRfZXh0ZW50KGlwLCBsYXN0eCAtIDEsICZjdXIsCiAJCQkJCSZwcmV2LCBmaXJzdGJsb2NrLCBmbGlzdCwgJmxvZ2ZsYWdzLAotCQkJCQlkZWx0YSwgWEZTX0RBVEFfRk9SSywgMCk7CisJCQkJCVhGU19EQVRBX0ZPUkssIDApOwogCQkJCWlmIChlcnJvcikKIAkJCQkJZ290byBlcnJvcjA7CiAJCQkJZ290byBub2RlbGV0ZTsKQEAgLTUzNjEsNyArNTE4MCw3IEBACiAJCQkJZGVsLmJyX3N0YXRlID0gWEZTX0VYVF9VTldSSVRURU47CiAJCQkJZXJyb3IgPSB4ZnNfYm1hcF9hZGRfZXh0ZW50KGlwLCBsYXN0eCwgJmN1ciwKIAkJCQkJJmRlbCwgZmlyc3RibG9jaywgZmxpc3QsICZsb2dmbGFncywKLQkJCQkJZGVsdGEsIFhGU19EQVRBX0ZPUkssIDApOworCQkJCQlYRlNfREFUQV9GT1JLLCAwKTsKIAkJCQlpZiAoZXJyb3IpCiAJCQkJCWdvdG8gZXJyb3IwOwogCQkJCWdvdG8gbm9kZWxldGU7CkBAIC01NDE0LDcgKzUyMzMsNyBAQAogCQkJZ290byBlcnJvcjA7CiAJCX0KIAkJZXJyb3IgPSB4ZnNfYm1hcF9kZWxfZXh0ZW50KGlwLCB0cCwgbGFzdHgsIGZsaXN0LCBjdXIsICZkZWwsCi0JCQkJJnRtcF9sb2dmbGFncywgZGVsdGEsIHdoaWNoZm9yaywgcnN2ZCk7CisJCQkJJnRtcF9sb2dmbGFncywgd2hpY2hmb3JrLCByc3ZkKTsKIAkJbG9nZmxhZ3MgfD0gdG1wX2xvZ2ZsYWdzOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIGVycm9yMDsKQEAgLTU0NzEsMTQgKzUyOTAsNiBAQAogCUFTU0VSVChpZnAtPmlmX2V4dF9tYXggPT0KIAkgICAgICAgWEZTX0lGT1JLX1NJWkUoaXAsIHdoaWNoZm9yaykgLyAodWludClzaXplb2YoeGZzX2JtYnRfcmVjX3QpKTsKIAllcnJvciA9IDA7Ci0JaWYgKGRlbHRhICYmIGRlbHRhLT54ZWRfc3RhcnRvZmYgIT0gTlVMTEZJTEVPRkYpIHsKLQkJLyogQSBjaGFuZ2Ugd2FzIGFjdHVhbGx5IG1hZGUuCi0JCSAqIE5vdGUgdGhhdCBkZWx0YS0+eGVkX2Jsb2Nrb3VudCBpcyBhbiBvZmZzZXQgYXQgdGhpcwotCQkgKiBwb2ludCBhbmQgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIGEgYmxvY2sgY291bnQuCi0JCSAqLwotCQlBU1NFUlQoZGVsdGEtPnhlZF9ibG9ja2NvdW50ID4gZGVsdGEtPnhlZF9zdGFydG9mZik7Ci0JCWRlbHRhLT54ZWRfYmxvY2tjb3VudCAtPSBkZWx0YS0+eGVkX3N0YXJ0b2ZmOwotCX0KIGVycm9yMDoKIAkvKgogCSAqIExvZyBldmVyeXRoaW5nLiAgRG8gdGhpcyBhZnRlciBjb252ZXJzaW9uLCB0aGVyZSdzIG5vIHBvaW50IGluCkBAIC01NjA1LDI4ICs1NDE2LDYgQEAKIAkJcHJlYWxsb2NlZCA9IDA7CiAJCWZpeGxlbiA9IDFMTCA8PCAzMjsKIAl9IGVsc2UgewotCQkvKgotCQkgKiBJZiB0aGUgQk1WX0lGX05PX0RNQVBJX1JFQUQgaW50ZXJmYWNlIGJpdCBzcGVjaWZpZWQsIGRvCi0JCSAqIG5vdCBnZW5lcmF0ZSBhIERNQVBJIHJlYWQgZXZlbnQuICBPdGhlcndpc2UsIGlmIHRoZQotCQkgKiBETV9FVkVOVF9SRUFEIGJpdCBpcyBzZXQgZm9yIHRoZSBmaWxlLCBnZW5lcmF0ZSBhIHJlYWQKLQkJICogZXZlbnQgaW4gb3JkZXIgdGhhdCB0aGUgRE1BUEkgYXBwbGljYXRpb24gbWF5IGRvIGl0cyB0aGluZwotCQkgKiBiZWZvcmUgd2UgcmV0dXJuIHRoZSBleHRlbnRzLiAgVXN1YWxseSB0aGlzIG1lYW5zIHJlc3RvcmluZwotCQkgKiB1c2VyIGZpbGUgZGF0YSB0byByZWdpb25zIG9mIHRoZSBmaWxlIHRoYXQgbG9vayBsaWtlIGhvbGVzLgotCQkgKgotCQkgKiBUaGUgIm9sZCBiZWhhdmlvciIgKGZyb20gWEZTX0lPQ19HRVRCTUFQKSBpcyB0byBub3Qgc3BlY2lmeQotCQkgKiBCTVZfSUZfTk9fRE1BUElfUkVBRCBzbyB0aGF0IHJlYWQgZXZlbnRzIGFyZSBnZW5lcmF0ZWQuCi0JCSAqIElmIHRoaXMgd2VyZSBub3QgdHJ1ZSwgY2FsbGVycyBvZiBpb2N0bChYRlNfSU9DX0dFVEJNQVApCi0JCSAqIGNvdWxkIG1pc2ludGVycHJldCBob2xlcyBpbiBhIERNQVBJIGZpbGUgYXMgdHJ1ZSBob2xlcywKLQkJICogd2hlbiBpbiBmYWN0IHRoZXkgbWF5IHJlcHJlc2VudCBvZmZsaW5lIHVzZXIgZGF0YS4KLQkJICovCi0JCWlmIChETV9FVkVOVF9FTkFCTEVEKGlwLCBETV9FVkVOVF9SRUFEKSAmJgotCQkgICAgIShpZmxhZ3MgJiBCTVZfSUZfTk9fRE1BUElfUkVBRCkpIHsKLQkJCWVycm9yID0gWEZTX1NFTkRfREFUQShtcCwgRE1fRVZFTlRfUkVBRCwgaXAsCi0JCQkJCSAgICAgIDAsIDAsIDAsIE5VTEwpOwotCQkJaWYgKGVycm9yKQotCQkJCXJldHVybiBYRlNfRVJST1IoZXJyb3IpOwotCQl9Ci0KIAkJaWYgKGlwLT5pX2QuZGlfZm9ybWF0ICE9IFhGU19ESU5PREVfRk1UX0VYVEVOVFMgJiYKIAkJICAgIGlwLT5pX2QuZGlfZm9ybWF0ICE9IFhGU19ESU5PREVfRk1UX0JUUkVFICYmCiAJCSAgICBpcC0+aV9kLmRpX2Zvcm1hdCAhPSBYRlNfRElOT0RFX0ZNVF9MT0NBTCkKQEAgLTU3MTMsNyArNTUwMiw3IEBACiAJCWVycm9yID0geGZzX2JtYXBpKE5VTEwsIGlwLCBYRlNfQkJfVE9fRlNCVChtcCwgYm12LT5ibXZfb2Zmc2V0KSwKIAkJCQkgIFhGU19CQl9UT19GU0IobXAsIGJtdi0+Ym12X2xlbmd0aCksCiAJCQkJICBibWFwaV9mbGFncywgTlVMTCwgMCwgbWFwLCAmbm1hcCwKLQkJCQkgIE5VTEwsIE5VTEwpOworCQkJCSAgTlVMTCk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gb3V0X2ZyZWVfbWFwOwogCQlBU1NFUlQobm1hcCA8PSBzdWJuZXgpOwpAQCAtNTg1OSw2NiArNTY0OCwzNCBAQAogfQogCiAjaWZkZWYgREVCVUcKLVNUQVRJQwoteGZzX2J1Zl90ICoKK1NUQVRJQyBzdHJ1Y3QgeGZzX2J1ZiAqCiB4ZnNfYm1hcF9nZXRfYnAoCi0JeGZzX2J0cmVlX2N1cl90ICAgICAgICAgKmN1ciwKKwlzdHJ1Y3QgeGZzX2J0cmVlX2N1cgkqY3VyLAogCXhmc19mc2Jsb2NrX3QJCWJubykKIHsKLQlpbnQgaTsKLQl4ZnNfYnVmX3QgKmJwOworCXN0cnVjdCB4ZnNfbG9nX2l0ZW1fZGVzYyAqbGlkcDsKKwlpbnQJCQlpOwogCiAJaWYgKCFjdXIpCi0JCXJldHVybihOVUxMKTsKKwkJcmV0dXJuIE5VTEw7CiAKLQlicCA9IE5VTEw7Ci0JZm9yKGkgPSAwOyBpIDwgWEZTX0JUUkVFX01BWExFVkVMUzsgaSsrKSB7Ci0JCWJwID0gY3VyLT5iY19idWZzW2ldOwotCQlpZiAoIWJwKSBicmVhazsKLQkJaWYgKFhGU19CVUZfQUREUihicCkgPT0gYm5vKQotCQkJYnJlYWs7CS8qIEZvdW5kIGl0ICovCisJZm9yIChpID0gMDsgaSA8IFhGU19CVFJFRV9NQVhMRVZFTFM7IGkrKykgeworCQlpZiAoIWN1ci0+YmNfYnVmc1tpXSkKKwkJCWJyZWFrOworCQlpZiAoWEZTX0JVRl9BRERSKGN1ci0+YmNfYnVmc1tpXSkgPT0gYm5vKQorCQkJcmV0dXJuIGN1ci0+YmNfYnVmc1tpXTsKIAl9Ci0JaWYgKGkgPT0gWEZTX0JUUkVFX01BWExFVkVMUykKLQkJYnAgPSBOVUxMOwogCi0JaWYgKCFicCkgeyAvKiBDaGFzZSBkb3duIGFsbCB0aGUgbG9nIGl0ZW1zIHRvIHNlZSBpZiB0aGUgYnAgaXMgdGhlcmUgKi8KLQkJeGZzX2xvZ19pdGVtX2NodW5rX3QgICAgKmxpY3A7Ci0JCXhmc190cmFuc190CQkqdHA7Ci0KLQkJdHAgPSBjdXItPmJjX3RwOwotCQlsaWNwID0gJnRwLT50X2l0ZW1zOwotCQl3aGlsZSAoIWJwICYmIGxpY3AgIT0gTlVMTCkgewotCQkJaWYgKHhmc19saWNfYXJlX2FsbF9mcmVlKGxpY3ApKSB7Ci0JCQkJbGljcCA9IGxpY3AtPmxpY19uZXh0OwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJZm9yIChpID0gMDsgaSA8IGxpY3AtPmxpY191bnVzZWQ7IGkrKykgewotCQkJCXhmc19sb2dfaXRlbV9kZXNjX3QJKmxpZHA7Ci0JCQkJeGZzX2xvZ19pdGVtX3QJCSpsaXA7Ci0JCQkJeGZzX2J1Zl9sb2dfaXRlbV90CSpiaXA7Ci0JCQkJeGZzX2J1Zl90CQkqbGJwOwotCi0JCQkJaWYgKHhmc19saWNfaXNmcmVlKGxpY3AsIGkpKSB7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQotCQkJCWxpZHAgPSB4ZnNfbGljX3Nsb3QobGljcCwgaSk7Ci0JCQkJbGlwID0gbGlkcC0+bGlkX2l0ZW07Ci0JCQkJaWYgKGxpcC0+bGlfdHlwZSAhPSBYRlNfTElfQlVGKQotCQkJCQljb250aW51ZTsKLQotCQkJCWJpcCA9ICh4ZnNfYnVmX2xvZ19pdGVtX3QgKilsaXA7Ci0JCQkJbGJwID0gYmlwLT5ibGlfYnVmOwotCi0JCQkJaWYgKFhGU19CVUZfQUREUihsYnApID09IGJubykgewotCQkJCQlicCA9IGxicDsKLQkJCQkJYnJlYWs7IC8qIEZvdW5kIGl0ICovCi0JCQkJfQotCQkJfQotCQkJbGljcCA9IGxpY3AtPmxpY19uZXh0OwotCQl9CisJLyogQ2hhc2UgZG93biBhbGwgdGhlIGxvZyBpdGVtcyB0byBzZWUgaWYgdGhlIGJwIGlzIHRoZXJlICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShsaWRwLCAmY3VyLT5iY190cC0+dF9pdGVtcywgbGlkX3RyYW5zKSB7CisJCXN0cnVjdCB4ZnNfYnVmX2xvZ19pdGVtCSpiaXA7CisJCWJpcCA9IChzdHJ1Y3QgeGZzX2J1Zl9sb2dfaXRlbSAqKWxpZHAtPmxpZF9pdGVtOworCQlpZiAoYmlwLT5ibGlfaXRlbS5saV90eXBlID09IFhGU19MSV9CVUYgJiYKKwkJICAgIFhGU19CVUZfQUREUihiaXAtPmJsaV9idWYpID09IGJubykKKwkJCXJldHVybiBiaXAtPmJsaV9idWY7CiAJfQotCXJldHVybihicCk7CisKKwlyZXR1cm4gTlVMTDsKIH0KIAogU1RBVElDIHZvaWQKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYm1hcC5oIGIvZnMveGZzL3hmc19ibWFwLmgKaW5kZXggNDE5ZGFmYi4uYjEzNTY5YSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ibWFwLmgKKysrIGIvZnMveGZzL3hmc19ibWFwLmgKQEAgLTI4LDIwICsyOCw2IEBACiBleHRlcm4ga21lbV96b25lX3QJKnhmc19ibWFwX2ZyZWVfaXRlbV96b25lOwogCiAvKgotICogREVMVEE6IGRlc2NyaWJlIGEgY2hhbmdlIHRvIHRoZSBpbi1jb3JlIGV4dGVudCBsaXN0LgotICoKLSAqIEludGVybmFsbHkgdGhlIHVzZSBvZiB4ZWRfYmxvY2tvdW50IGlzIHNvbWV3aGF0IGZ1bmt5LgotICogeGVkX2Jsb2NrY291bnQgY29udGFpbnMgYW4gb2Zmc2V0IG11Y2ggb2YgdGhlIHRpbWUgYmVjYXVzZSB0aGlzCi0gKiBtYWtlcyBtZXJnaW5nIGNoYW5nZXMgZWFzaWVyLiAgKHhmc19maWxlb2ZmX3QgYW5kIHhmc19maWxibGtzX3QgYXJlCi0gKiB0aGUgc2FtZSB1bmRlcmx5aW5nIHR5cGUpLgotICovCi10eXBlZGVmIHN0cnVjdCB4ZnNfZXh0ZGVsdGEKLXsKLQl4ZnNfZmlsZW9mZl90CQl4ZWRfc3RhcnRvZmY7CS8qIG9mZnNldCBvZiByYW5nZSAqLwotCXhmc19maWxibGtzX3QJCXhlZF9ibG9ja2NvdW50OwkvKiBibG9ja3MgaW4gcmFuZ2UgKi8KLX0geGZzX2V4dGRlbHRhX3Q7Ci0KLS8qCiAgKiBMaXN0IG9mIGV4dGVudHMgdG8gYmUgZnJlZSAibGF0ZXIiLgogICogVGhlIGxpc3QgaXMga2VwdCBzb3J0ZWQgb24geGJmX3N0YXJ0YmxvY2suCiAgKi8KQEAgLTgyLDE2ICs2OCwxMyBAQAogI2RlZmluZSBYRlNfQk1BUElfREVMQVkJCTB4MDAyCS8qIGRlbGF5ZWQgd3JpdGUgb3BlcmF0aW9uICovCiAjZGVmaW5lIFhGU19CTUFQSV9FTlRJUkUJMHgwMDQJLyogcmV0dXJuIGVudGlyZSBleHRlbnQsIG5vdCB0cmltbWVkICovCiAjZGVmaW5lIFhGU19CTUFQSV9NRVRBREFUQQkweDAwOAkvKiBtYXBwaW5nIG1ldGFkYXRhIG5vdCB1c2VyIGRhdGEgKi8KLSNkZWZpbmUgWEZTX0JNQVBJX0VYQUNUCQkweDAxMAkvKiBhbGxvY2F0ZSBvbmx5IHRvIHNwZWMnZCBib3VuZHMgKi8KLSNkZWZpbmUgWEZTX0JNQVBJX0FUVFJGT1JLCTB4MDIwCS8qIHVzZSBhdHRyaWJ1dGUgZm9yayBub3QgZGF0YSAqLwotI2RlZmluZSBYRlNfQk1BUElfQVNZTkMJCTB4MDQwCS8qIGJ1bm1hcGkgeGFjdGlvbnMgY2FuIGJlIGFzeW5jICovCi0jZGVmaW5lIFhGU19CTUFQSV9SU1ZCTE9DS1MJMHgwODAJLyogT0sgdG8gYWxsb2MuIHJlc2VydmVkIGRhdGEgYmxvY2tzICovCi0jZGVmaW5lCVhGU19CTUFQSV9QUkVBTExPQwkweDEwMAkvKiBwcmVhbGxvY2F0aW9uIG9wOiB1bndyaXR0ZW4gc3BhY2UgKi8KLSNkZWZpbmUJWEZTX0JNQVBJX0lHU1RBVEUJMHgyMDAJLyogSWdub3JlIHN0YXRlIC0gKi8KKyNkZWZpbmUgWEZTX0JNQVBJX0FUVFJGT1JLCTB4MDEwCS8qIHVzZSBhdHRyaWJ1dGUgZm9yayBub3QgZGF0YSAqLworI2RlZmluZSBYRlNfQk1BUElfUlNWQkxPQ0tTCTB4MDIwCS8qIE9LIHRvIGFsbG9jLiByZXNlcnZlZCBkYXRhIGJsb2NrcyAqLworI2RlZmluZQlYRlNfQk1BUElfUFJFQUxMT0MJMHgwNDAJLyogcHJlYWxsb2NhdGlvbiBvcDogdW53cml0dGVuIHNwYWNlICovCisjZGVmaW5lCVhGU19CTUFQSV9JR1NUQVRFCTB4MDgwCS8qIElnbm9yZSBzdGF0ZSAtICovCiAJCQkJCS8qIGNvbWJpbmUgY29udGlnLiBzcGFjZSAqLwotI2RlZmluZQlYRlNfQk1BUElfQ09OVElHCTB4NDAwCS8qIG11c3QgYWxsb2NhdGUgb25seSBvbmUgZXh0ZW50ICovCi0vKglYRlNfQk1BUElfRElSRUNUX0lPCTB4ODAwCSovCi0jZGVmaW5lIFhGU19CTUFQSV9DT05WRVJUCTB4MTAwMAkvKiB1bndyaXR0ZW4gZXh0ZW50IGNvbnZlcnNpb24gLSAqLworI2RlZmluZQlYRlNfQk1BUElfQ09OVElHCTB4MTAwCS8qIG11c3QgYWxsb2NhdGUgb25seSBvbmUgZXh0ZW50ICovCisjZGVmaW5lIFhGU19CTUFQSV9DT05WRVJUCTB4MjAwCS8qIHVud3JpdHRlbiBleHRlbnQgY29udmVyc2lvbiAtICovCiAJCQkJCS8qIG5lZWQgd3JpdGUgY2FjaGUgZmx1c2hpbmcgYW5kIG5vICovCiAJCQkJCS8qIGFkZGl0aW9uYWwgYWxsb2NhdGlvbiBhbGlnbm1lbnRzICovCiAKQEAgLTEwMCw5ICs4Myw3IEBACiAJeyBYRlNfQk1BUElfREVMQVksCSJERUxBWSIgfSwgXAogCXsgWEZTX0JNQVBJX0VOVElSRSwJIkVOVElSRSIgfSwgXAogCXsgWEZTX0JNQVBJX01FVEFEQVRBLAkiTUVUQURBVEEiIH0sIFwKLQl7IFhGU19CTUFQSV9FWEFDVCwJIkVYQUNUIiB9LCBcCiAJeyBYRlNfQk1BUElfQVRUUkZPUkssCSJBVFRSRk9SSyIgfSwgXAotCXsgWEZTX0JNQVBJX0FTWU5DLAkiQVNZTkMiIH0sIFwKIAl7IFhGU19CTUFQSV9SU1ZCTE9DS1MsCSJSU1ZCTE9DS1MiIH0sIFwKIAl7IFhGU19CTUFQSV9QUkVBTExPQywJIlBSRUFMTE9DIiB9LCBcCiAJeyBYRlNfQk1BUElfSUdTVEFURSwJIklHU1RBVEUiIH0sIFwKQEAgLTMxMCw5ICsyOTEsNyBAQAogCXhmc19leHRsZW5fdAkJdG90YWwsCQkvKiB0b3RhbCBibG9ja3MgbmVlZGVkICovCiAJc3RydWN0IHhmc19ibWJ0X2lyZWMJKm12YWwsCQkvKiBvdXRwdXQ6IG1hcCB2YWx1ZXMgKi8KIAlpbnQJCQkqbm1hcCwJCS8qIGkvbzogbXZhbCBzaXplL2NvdW50ICovCi0JeGZzX2JtYXBfZnJlZV90CQkqZmxpc3QsCQkvKiBpL286IGxpc3QgZXh0ZW50cyB0byBmcmVlICovCi0JeGZzX2V4dGRlbHRhX3QJCSpkZWx0YSk7CS8qIG86IGNoYW5nZSBtYWRlIHRvIGluY29yZQotCQkJCQkJICAgZXh0ZW50cyAqLworCXhmc19ibWFwX2ZyZWVfdAkJKmZsaXN0KTsJLyogaS9vOiBsaXN0IGV4dGVudHMgdG8gZnJlZSAqLwogCiAvKgogICogTWFwIGZpbGUgYmxvY2tzIHRvIGZpbGVzeXN0ZW0gYmxvY2tzLCBzaW1wbGUgdmVyc2lvbi4KQEAgLTM0Niw4ICszMjUsNiBAQAogCXhmc19mc2Jsb2NrX3QJCSpmaXJzdGJsb2NrLAkvKiBmaXJzdCBhbGxvY2F0ZWQgYmxvY2sKIAkJCQkJCSAgIGNvbnRyb2xzIGEuZy4gZm9yIGFsbG9jcyAqLwogCXhmc19ibWFwX2ZyZWVfdAkJKmZsaXN0LAkJLyogaS9vOiBsaXN0IGV4dGVudHMgdG8gZnJlZSAqLwotCXhmc19leHRkZWx0YV90CQkqZGVsdGEsCQkvKiBvOiBjaGFuZ2UgbWFkZSB0byBpbmNvcmUKLQkJCQkJCSAgIGV4dGVudHMgKi8KIAlpbnQJCQkqZG9uZSk7CQkvKiBzZXQgaWYgbm90IGRvbmUgeWV0ICovCiAKIC8qCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXBfYnRyZWUuYyBiL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5jCmluZGV4IDQxNmU0N2UuLjg3ZDNjMTAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5jCisrKyBiL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5jCkBAIC0yNCwyMSArMjQsMTYgQEAKICNpbmNsdWRlICJ4ZnNfdHJhbnMuaCIKICNpbmNsdWRlICJ4ZnNfc2IuaCIKICNpbmNsdWRlICJ4ZnNfYWcuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMi5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc19ibWFwX2J0cmVlLmgiCiAjaW5jbHVkZSAieGZzX2FsbG9jX2J0cmVlLmgiCiAjaW5jbHVkZSAieGZzX2lhbGxvY19idHJlZS5oIgotI2luY2x1ZGUgInhmc19kaXIyX3NmLmgiCi0jaW5jbHVkZSAieGZzX2F0dHJfc2YuaCIKICNpbmNsdWRlICJ4ZnNfZGlub2RlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlX2l0ZW0uaCIKICNpbmNsdWRlICJ4ZnNfYWxsb2MuaCIKICNpbmNsdWRlICJ4ZnNfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfYnRyZWVfdHJhY2UuaCIKLSNpbmNsdWRlICJ4ZnNfaWFsbG9jLmgiCiAjaW5jbHVkZSAieGZzX2l0YWJsZS5oIgogI2luY2x1ZGUgInhmc19ibWFwLmgiCiAjaW5jbHVkZSAieGZzX2Vycm9yLmgiCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2J0cmVlLmMgYi9mcy94ZnMveGZzX2J0cmVlLmMKaW5kZXggOTZiZTRiMC4uODI5YWY5MiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19idHJlZS5jCisrKyBiL2ZzL3hmcy94ZnNfYnRyZWUuYwpAQCAtMjQsMjAgKzI0LDE1IEBACiAjaW5jbHVkZSAieGZzX3RyYW5zLmgiCiAjaW5jbHVkZSAieGZzX3NiLmgiCiAjaW5jbHVkZSAieGZzX2FnLmgiCi0jaW5jbHVkZSAieGZzX2RpcjIuaCIKLSNpbmNsdWRlICJ4ZnNfZG1hcGkuaCIKICNpbmNsdWRlICJ4ZnNfbW91bnQuaCIKICNpbmNsdWRlICJ4ZnNfYm1hcF9idHJlZS5oIgogI2luY2x1ZGUgInhmc19hbGxvY19idHJlZS5oIgogI2luY2x1ZGUgInhmc19pYWxsb2NfYnRyZWUuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMl9zZi5oIgotI2luY2x1ZGUgInhmc19hdHRyX3NmLmgiCiAjaW5jbHVkZSAieGZzX2Rpbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZV9pdGVtLmgiCiAjaW5jbHVkZSAieGZzX2J0cmVlLmgiCiAjaW5jbHVkZSAieGZzX2J0cmVlX3RyYWNlLmgiCi0jaW5jbHVkZSAieGZzX2lhbGxvYy5oIgogI2luY2x1ZGUgInhmc19lcnJvci5oIgogI2luY2x1ZGUgInhmc190cmFjZS5oIgogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2J1Zl9pdGVtLmMgYi9mcy94ZnMveGZzX2J1Zl9pdGVtLmMKaW5kZXggMDJhODA5OC4uMWIwOWQ3YSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19idWZfaXRlbS5jCisrKyBiL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgInhmc190cmFucy5oIgogI2luY2x1ZGUgInhmc19zYi5oIgogI2luY2x1ZGUgInhmc19hZy5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc19idWZfaXRlbS5oIgogI2luY2x1ZGUgInhmc190cmFuc19wcml2LmgiCkBAIC0zNCw2ICszMywxMiBAQAogCiBrbWVtX3pvbmVfdAkqeGZzX2J1Zl9pdGVtX3pvbmU7CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHhmc19idWZfbG9nX2l0ZW0gKkJVRl9JVEVNKHN0cnVjdCB4ZnNfbG9nX2l0ZW0gKmxpcCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGxpcCwgc3RydWN0IHhmc19idWZfbG9nX2l0ZW0sIGJsaV9pdGVtKTsKK30KKworCiAjaWZkZWYgWEZTX1RSQU5TX0RFQlVHCiAvKgogICogVGhpcyBmdW5jdGlvbiB1c2VzIGFuIGFsdGVybmF0ZSBzdHJhdGVneSBmb3IgdHJhY2tpbmcgdGhlIGJ5dGVzCkBAIC0xNTEsMTIgKzE1NiwxMyBAQAogICovCiBTVEFUSUMgdWludAogeGZzX2J1Zl9pdGVtX3NpemUoCi0JeGZzX2J1Zl9sb2dfaXRlbV90CSpiaXApCisJc3RydWN0IHhmc19sb2dfaXRlbQkqbGlwKQogewotCXVpbnQJCW52ZWNzOwotCWludAkJbmV4dF9iaXQ7Ci0JaW50CQlsYXN0X2JpdDsKLQl4ZnNfYnVmX3QJKmJwOworCXN0cnVjdCB4ZnNfYnVmX2xvZ19pdGVtCSpiaXAgPSBCVUZfSVRFTShsaXApOworCXN0cnVjdCB4ZnNfYnVmCQkqYnAgPSBiaXAtPmJsaV9idWY7CisJdWludAkJCW52ZWNzOworCWludAkJCW5leHRfYml0OworCWludAkJCWxhc3RfYml0OwogCiAJQVNTRVJUKGF0b21pY19yZWFkKCZiaXAtPmJsaV9yZWZjb3VudCkgPiAwKTsKIAlpZiAoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX1NUQUxFKSB7CkBAIC0xNzAsNyArMTc2LDYgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JYnAgPSBiaXAtPmJsaV9idWY7CiAJQVNTRVJUKGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9MT0dHRUQpOwogCW52ZWNzID0gMTsKIAlsYXN0X2JpdCA9IHhmc19uZXh0X2JpdChiaXAtPmJsaV9mb3JtYXQuYmxmX2RhdGFfbWFwLApAQCAtMjE5LDEzICsyMjQsMTMgQEAKICAqLwogU1RBVElDIHZvaWQKIHhmc19idWZfaXRlbV9mb3JtYXQoCi0JeGZzX2J1Zl9sb2dfaXRlbV90CSpiaXAsCi0JeGZzX2xvZ19pb3ZlY190CQkqbG9nX3ZlY3RvcikKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXAsCisJc3RydWN0IHhmc19sb2dfaW92ZWMJKnZlY3ApCiB7CisJc3RydWN0IHhmc19idWZfbG9nX2l0ZW0JKmJpcCA9IEJVRl9JVEVNKGxpcCk7CisJc3RydWN0IHhmc19idWYJKmJwID0gYmlwLT5ibGlfYnVmOwogCXVpbnQJCWJhc2Vfc2l6ZTsKIAl1aW50CQludmVjczsKLQl4ZnNfbG9nX2lvdmVjX3QJKnZlY3A7Ci0JeGZzX2J1Zl90CSpicDsKIAlpbnQJCWZpcnN0X2JpdDsKIAlpbnQJCWxhc3RfYml0OwogCWludAkJbmV4dF9iaXQ7CkBAIC0yMzUsOCArMjQwLDYgQEAKIAlBU1NFUlQoYXRvbWljX3JlYWQoJmJpcC0+YmxpX3JlZmNvdW50KSA+IDApOwogCUFTU0VSVCgoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX0xPR0dFRCkgfHwKIAkgICAgICAgKGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9TVEFMRSkpOwotCWJwID0gYmlwLT5ibGlfYnVmOwotCXZlY3AgPSBsb2dfdmVjdG9yOwogCiAJLyoKIAkgKiBUaGUgc2l6ZSBvZiB0aGUgYmFzZSBzdHJ1Y3R1cmUgaXMgdGhlIHNpemUgb2YgdGhlCkBAIC0yNDgsNyArMjUxLDcgQEAKIAliYXNlX3NpemUgPQogCQkodWludCkoc2l6ZW9mKHhmc19idWZfbG9nX2Zvcm1hdF90KSArCiAJCSAgICAgICAoKGJpcC0+YmxpX2Zvcm1hdC5ibGZfbWFwX3NpemUgLSAxKSAqIHNpemVvZih1aW50KSkpOwotCXZlY3AtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmYmlwLT5ibGlfZm9ybWF0OworCXZlY3AtPmlfYWRkciA9ICZiaXAtPmJsaV9mb3JtYXQ7CiAJdmVjcC0+aV9sZW4gPSBiYXNlX3NpemU7CiAJdmVjcC0+aV90eXBlID0gWExPR19SRUdfVFlQRV9CRk9STUFUOwogCXZlY3ArKzsKQEAgLTI2Myw3ICsyNjYsNyBAQAogCSAqLwogCWlmIChiaXAtPmJsaV9mbGFncyAmIFhGU19CTElfSU5PREVfQlVGKSB7CiAJCWlmICghKChiaXAtPmJsaV9mbGFncyAmIFhGU19CTElfSU5PREVfQUxMT0NfQlVGKSAmJgotCQkgICAgICB4ZnNfbG9nX2l0ZW1faW5fY3VycmVudF9jaGtwdCgmYmlwLT5ibGlfaXRlbSkpKQorCQkgICAgICB4ZnNfbG9nX2l0ZW1faW5fY3VycmVudF9jaGtwdChsaXApKSkKIAkJCWJpcC0+YmxpX2Zvcm1hdC5ibGZfZmxhZ3MgfD0gWEZTX0JMRl9JTk9ERV9CVUY7CiAJCWJpcC0+YmxpX2ZsYWdzICY9IH5YRlNfQkxJX0lOT0RFX0JVRjsKIAl9CkBAIC0zNTYsNjYgKzM1OSw5MCBAQAogCiAvKgogICogVGhpcyBpcyBjYWxsZWQgdG8gcGluIHRoZSBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBidWYgbG9nIGl0ZW0gaW4gbWVtb3J5Ci0gKiBzbyBpdCBjYW5ub3QgYmUgd3JpdHRlbiBvdXQuICBTaW1wbHkgY2FsbCBicGluKCkgb24gdGhlIGJ1ZmZlciB0byBkbyB0aGlzLgorICogc28gaXQgY2Fubm90IGJlIHdyaXR0ZW4gb3V0LgogICoKICAqIFdlIGFsc28gYWx3YXlzIHRha2UgYSByZWZlcmVuY2UgdG8gdGhlIGJ1ZmZlciBsb2cgaXRlbSBoZXJlIHNvIHRoYXQgdGhlIGJsaQogICogaXMgaGVsZCB3aGlsZSB0aGUgaXRlbSBpcyBwaW5uZWQgaW4gbWVtb3J5LiBUaGlzIG1lYW5zIHRoYXQgd2UgY2FuCiAgKiB1bmNvbmRpdGlvbmFsbHkgZHJvcCB0aGUgcmVmZXJlbmNlIGNvdW50IGEgdHJhbnNhY3Rpb24gaG9sZHMgd2hlbiB0aGUKICAqIHRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlZC4KICAqLwotCiBTVEFUSUMgdm9pZAogeGZzX2J1Zl9pdGVtX3BpbigKLQl4ZnNfYnVmX2xvZ19pdGVtX3QJKmJpcCkKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXApCiB7Ci0JeGZzX2J1Zl90CSpicDsKKwlzdHJ1Y3QgeGZzX2J1Zl9sb2dfaXRlbQkqYmlwID0gQlVGX0lURU0obGlwKTsKIAotCWJwID0gYmlwLT5ibGlfYnVmOwotCUFTU0VSVChYRlNfQlVGX0lTQlVTWShicCkpOworCUFTU0VSVChYRlNfQlVGX0lTQlVTWShiaXAtPmJsaV9idWYpKTsKIAlBU1NFUlQoYXRvbWljX3JlYWQoJmJpcC0+YmxpX3JlZmNvdW50KSA+IDApOwogCUFTU0VSVCgoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX0xPR0dFRCkgfHwKIAkgICAgICAgKGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9TVEFMRSkpOwotCWF0b21pY19pbmMoJmJpcC0+YmxpX3JlZmNvdW50KTsKLQl0cmFjZV94ZnNfYnVmX2l0ZW1fcGluKGJpcCk7Ci0JeGZzX2JwaW4oYnApOwotfQogCisJdHJhY2VfeGZzX2J1Zl9pdGVtX3BpbihiaXApOworCisJYXRvbWljX2luYygmYmlwLT5ibGlfcmVmY291bnQpOworCWF0b21pY19pbmMoJmJpcC0+YmxpX2J1Zi0+Yl9waW5fY291bnQpOworfQogCiAvKgogICogVGhpcyBpcyBjYWxsZWQgdG8gdW5waW4gdGhlIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggdGhlIGJ1ZiBsb2cKICAqIGl0ZW0gd2hpY2ggd2FzIHByZXZpb3VzbHkgcGlubmVkIHdpdGggYSBjYWxsIHRvIHhmc19idWZfaXRlbV9waW4oKS4KLSAqIEp1c3QgY2FsbCBidW5waW4oKSBvbiB0aGUgYnVmZmVyIHRvIGRvIHRoaXMuCiAgKgogICogQWxzbyBkcm9wIHRoZSByZWZlcmVuY2UgdG8gdGhlIGJ1ZiBpdGVtIGZvciB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KICAqIElmIHRoZSBYRlNfQkxJX1NUQUxFIGZsYWcgaXMgc2V0IGFuZCB3ZSBhcmUgdGhlIGxhc3QgcmVmZXJlbmNlLAogICogdGhlbiBmcmVlIHVwIHRoZSBidWYgbG9nIGl0ZW0gYW5kIHVubG9jayB0aGUgYnVmZmVyLgorICoKKyAqIElmIHRoZSByZW1vdmUgZmxhZyBpcyBzZXQgd2UgYXJlIGNhbGxlZCBmcm9tIHVuY29tbWl0IGluIHRoZQorICogZm9yY2VkLXNodXRkb3duIHBhdGguICBJZiB0aGF0IGlzIHRydWUgYW5kIHRoZSByZWZlcmVuY2UgY291bnQgb24KKyAqIHRoZSBsb2cgaXRlbSBpcyBnb2luZyB0byBkcm9wIHRvIHplcm8gd2UgbmVlZCB0byBmcmVlIHRoZSBpdGVtJ3MKKyAqIGRlc2NyaXB0b3IgaW4gdGhlIHRyYW5zYWN0aW9uLgogICovCiBTVEFUSUMgdm9pZAogeGZzX2J1Zl9pdGVtX3VucGluKAotCXhmc19idWZfbG9nX2l0ZW1fdAkqYmlwKQorCXN0cnVjdCB4ZnNfbG9nX2l0ZW0JKmxpcCwKKwlpbnQJCQlyZW1vdmUpCiB7Ci0Jc3RydWN0IHhmc19haWwJKmFpbHA7Ci0JeGZzX2J1Zl90CSpicDsKLQlpbnQJCWZyZWVkOworCXN0cnVjdCB4ZnNfYnVmX2xvZ19pdGVtCSpiaXAgPSBCVUZfSVRFTShsaXApOworCXhmc19idWZfdAkqYnAgPSBiaXAtPmJsaV9idWY7CisJc3RydWN0IHhmc19haWwJKmFpbHAgPSBsaXAtPmxpX2FpbHA7CiAJaW50CQlzdGFsZSA9IGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9TVEFMRTsKKwlpbnQJCWZyZWVkOwogCi0JYnAgPSBiaXAtPmJsaV9idWY7Ci0JQVNTRVJUKGJwICE9IE5VTEwpOwogCUFTU0VSVChYRlNfQlVGX0ZTUFJJVkFURShicCwgeGZzX2J1Zl9sb2dfaXRlbV90ICopID09IGJpcCk7CiAJQVNTRVJUKGF0b21pY19yZWFkKCZiaXAtPmJsaV9yZWZjb3VudCkgPiAwKTsKKwogCXRyYWNlX3hmc19idWZfaXRlbV91bnBpbihiaXApOwogCiAJZnJlZWQgPSBhdG9taWNfZGVjX2FuZF90ZXN0KCZiaXAtPmJsaV9yZWZjb3VudCk7Ci0JYWlscCA9IGJpcC0+YmxpX2l0ZW0ubGlfYWlscDsKLQl4ZnNfYnVucGluKGJwKTsKKworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZicC0+Yl9waW5fY291bnQpKQorCQl3YWtlX3VwX2FsbCgmYnAtPmJfd2FpdGVycyk7CisKIAlpZiAoZnJlZWQgJiYgc3RhbGUpIHsKIAkJQVNTRVJUKGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9TVEFMRSk7CiAJCUFTU0VSVChYRlNfQlVGX1ZBTFVTRU1BKGJwKSA8PSAwKTsKIAkJQVNTRVJUKCEoWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKSk7CiAJCUFTU0VSVChYRlNfQlVGX0lTU1RBTEUoYnApKTsKIAkJQVNTRVJUKGJpcC0+YmxpX2Zvcm1hdC5ibGZfZmxhZ3MgJiBYRlNfQkxGX0NBTkNFTCk7CisKIAkJdHJhY2VfeGZzX2J1Zl9pdGVtX3VucGluX3N0YWxlKGJpcCk7CiAKKwkJaWYgKHJlbW92ZSkgeworCQkJLyoKKwkJCSAqIFdlIGhhdmUgdG8gcmVtb3ZlIHRoZSBsb2cgaXRlbSBmcm9tIHRoZSB0cmFuc2FjdGlvbgorCQkJICogYXMgd2UgYXJlIGFib3V0IHRvIHJlbGVhc2Ugb3VyIHJlZmVyZW5jZSB0byB0aGUKKwkJCSAqIGJ1ZmZlci4gIElmIHdlIGRvbid0LCB0aGUgdW5sb2NrIHRoYXQgb2NjdXJzIGxhdGVyCisJCQkgKiBpbiB4ZnNfdHJhbnNfdW5jb21taXQoKSB3aWxsIHJ5IHRvIHJlZmVyZW5jZSB0aGUKKwkJCSAqIGJ1ZmZlciB3aGljaCB3ZSBubyBsb25nZXIgaGF2ZSBhIGhvbGQgb24uCisJCQkgKi8KKwkJCXhmc190cmFuc19kZWxfaXRlbShsaXApOworCisJCQkvKgorCQkJICogU2luY2UgdGhlIHRyYW5zYWN0aW9uIG5vIGxvbmdlciByZWZlcnMgdG8gdGhlIGJ1ZmZlciwKKwkJCSAqIHRoZSBidWZmZXIgc2hvdWxkIG5vIGxvbmdlciByZWZlciB0byB0aGUgdHJhbnNhY3Rpb24uCisJCQkgKi8KKwkJCVhGU19CVUZfU0VUX0ZTUFJJVkFURTIoYnAsIE5VTEwpOworCQl9CisKIAkJLyoKIAkJICogSWYgd2UgZ2V0IGNhbGxlZCBoZXJlIGJlY2F1c2Ugb2YgYW4gSU8gZXJyb3IsIHdlIG1heQogCQkgKiBvciBtYXkgbm90IGhhdmUgdGhlIGl0ZW0gb24gdGhlIEFJTC4geGZzX3RyYW5zX2FpbF9kZWxldGUoKQpAQCAtNDM3LDQ4ICs0NjQsNiBAQAogfQogCiAvKgotICogdGhpcyBpcyBjYWxsZWQgZnJvbSB1bmNvbW1pdCBpbiB0aGUgZm9yY2VkLXNodXRkb3duIHBhdGguCi0gKiB3ZSBuZWVkIHRvIGNoZWNrIHRvIHNlZSBpZiB0aGUgcmVmZXJlbmNlIGNvdW50IG9uIHRoZSBsb2cgaXRlbQotICogaXMgZ29pbmcgdG8gZHJvcCB0byB6ZXJvLiAgSWYgc28sIHVucGluIHdpbGwgZnJlZSB0aGUgbG9nIGl0ZW0KLSAqIHNvIHdlIG5lZWQgdG8gZnJlZSB0aGUgaXRlbSdzIGRlc2NyaXB0b3IgKHRoYXQgcG9pbnRzIHRvIHRoZSBpdGVtKQotICogaW4gdGhlIHRyYW5zYWN0aW9uLgotICovCi1TVEFUSUMgdm9pZAoteGZzX2J1Zl9pdGVtX3VucGluX3JlbW92ZSgKLQl4ZnNfYnVmX2xvZ19pdGVtX3QJKmJpcCwKLQl4ZnNfdHJhbnNfdAkJKnRwKQotewotCS8qIHdpbGwgeGZzX2J1Zl9pdGVtX3VucGluKCkgY2FsbCB4ZnNfYnVmX2l0ZW1fcmVsc2UoKT8gKi8KLQlpZiAoKGF0b21pY19yZWFkKCZiaXAtPmJsaV9yZWZjb3VudCkgPT0gMSkgJiYKLQkgICAgKGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9TVEFMRSkpIHsKLQkJLyoKLQkJICogeWVzIC0tIFdlIGNhbiBzYWZlbHkgZG8gc29tZSB3b3JrIGhlcmUgYW5kIHRoZW4gY2FsbAotCQkgKiBidWZfaXRlbV91bnBpbiB0byBkbyB0aGUgcmVzdCBiZWNhdXNlIHdlIGFyZQotCQkgKiBhcmUgaG9sZGluZyB0aGUgYnVmZmVyIGxvY2tlZCBzbyBubyBvbmUgZWxzZSB3aWxsIGJlCi0JCSAqIGFibGUgdG8gYnVtcCB1cCB0aGUgcmVmY291bnQuIFdlIGhhdmUgdG8gcmVtb3ZlIHRoZQotCQkgKiBsb2cgaXRlbSBmcm9tIHRoZSB0cmFuc2FjdGlvbiBhcyB3ZSBhcmUgYWJvdXQgdG8gcmVsZWFzZQotCQkgKiBvdXIgcmVmZXJlbmNlIHRvIHRoZSBidWZmZXIuIElmIHdlIGRvbid0LCB0aGUgdW5sb2NrIHRoYXQKLQkJICogb2NjdXJzIGxhdGVyIGluIHRoZSB4ZnNfdHJhbnNfdW5jb21taXQoKSB3aWxsIHRyeSB0bwotCQkgKiByZWZlcmVuY2UgdGhlIGJ1ZmZlciB3aGljaCB3ZSBubyBsb25nZXIgaGF2ZSBhIGhvbGQgb24uCi0JCSAqLwotCQlzdHJ1Y3QgeGZzX2xvZ19pdGVtX2Rlc2MgKmxpZHA7Ci0KLQkJQVNTRVJUKFhGU19CVUZfVkFMVVNFTUEoYmlwLT5ibGlfYnVmKSA8PSAwKTsKLQkJdHJhY2VfeGZzX2J1Zl9pdGVtX3VucGluX3N0YWxlKGJpcCk7Ci0KLQkJbGlkcCA9IHhmc190cmFuc19maW5kX2l0ZW0odHAsICh4ZnNfbG9nX2l0ZW1fdCAqKWJpcCk7Ci0JCXhmc190cmFuc19mcmVlX2l0ZW0odHAsIGxpZHApOwotCi0JCS8qCi0JCSAqIFNpbmNlIHRoZSB0cmFuc2FjdGlvbiBubyBsb25nZXIgcmVmZXJzIHRvIHRoZSBidWZmZXIsIHRoZQotCQkgKiBidWZmZXIgc2hvdWxkIG5vIGxvbmdlciByZWZlciB0byB0aGUgdHJhbnNhY3Rpb24uCi0JCSAqLwotCQlYRlNfQlVGX1NFVF9GU1BSSVZBVEUyKGJpcC0+YmxpX2J1ZiwgTlVMTCk7Ci0JfQotCXhmc19idWZfaXRlbV91bnBpbihiaXApOwotfQotCi0vKgogICogVGhpcyBpcyBjYWxsZWQgdG8gYXR0ZW1wdCB0byBsb2NrIHRoZSBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMKICAqIGJ1ZiBsb2cgaXRlbS4gIERvbid0IHNsZWVwIG9uIHRoZSBidWZmZXIgbG9jay4gIElmIHdlIGNhbid0IGdldAogICogdGhlIGxvY2sgcmlnaHQgYXdheSwgcmV0dXJuIDAuICBJZiB3ZSBjYW4gZ2V0IHRoZSBsb2NrLCB0YWtlIGEKQEAgLTQ4OCwxMSArNDczLDExIEBACiAgKi8KIFNUQVRJQyB1aW50CiB4ZnNfYnVmX2l0ZW1fdHJ5bG9jaygKLQl4ZnNfYnVmX2xvZ19pdGVtX3QJKmJpcCkKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXApCiB7Ci0JeGZzX2J1Zl90CSpicDsKKwlzdHJ1Y3QgeGZzX2J1Zl9sb2dfaXRlbQkqYmlwID0gQlVGX0lURU0obGlwKTsKKwlzdHJ1Y3QgeGZzX2J1ZgkJKmJwID0gYmlwLT5ibGlfYnVmOwogCi0JYnAgPSBiaXAtPmJsaV9idWY7CiAJaWYgKFhGU19CVUZfSVNQSU5ORUQoYnApKQogCQlyZXR1cm4gWEZTX0lURU1fUElOTkVEOwogCWlmICghWEZTX0JVRl9DUFNFTUEoYnApKQpAQCAtNTI5LDEzICs1MTQsMTIgQEAKICAqLwogU1RBVElDIHZvaWQKIHhmc19idWZfaXRlbV91bmxvY2soCi0JeGZzX2J1Zl9sb2dfaXRlbV90CSpiaXApCisJc3RydWN0IHhmc19sb2dfaXRlbQkqbGlwKQogewotCWludAkJYWJvcnRlZDsKLQl4ZnNfYnVmX3QJKmJwOwotCXVpbnQJCWhvbGQ7Ci0KLQlicCA9IGJpcC0+YmxpX2J1ZjsKKwlzdHJ1Y3QgeGZzX2J1Zl9sb2dfaXRlbQkqYmlwID0gQlVGX0lURU0obGlwKTsKKwlzdHJ1Y3QgeGZzX2J1ZgkJKmJwID0gYmlwLT5ibGlfYnVmOworCWludAkJCWFib3J0ZWQ7CisJdWludAkJCWhvbGQ7CiAKIAkvKiBDbGVhciB0aGUgYnVmZmVyJ3MgYXNzb2NpYXRpb24gd2l0aCB0aGlzIHRyYW5zYWN0aW9uLiAqLwogCVhGU19CVUZfU0VUX0ZTUFJJVkFURTIoYnAsIE5VTEwpOwpAQCAtNTQ2LDcgKzUzMCw3IEBACiAJICogKGNhbmNlbGxlZCkgYnVmZmVycyBhdCB1bnBpbiB0aW1lLCBidXQgd2UnbGwgbmV2ZXIgZ28gdGhyb3VnaCB0aGUKIAkgKiBwaW4vdW5waW4gY3ljbGUgaWYgd2UgYWJvcnQgaW5zaWRlIGNvbW1pdC4KIAkgKi8KLQlhYm9ydGVkID0gKGJpcC0+YmxpX2l0ZW0ubGlfZmxhZ3MgJiBYRlNfTElfQUJPUlRFRCkgIT0gMDsKKwlhYm9ydGVkID0gKGxpcC0+bGlfZmxhZ3MgJiBYRlNfTElfQUJPUlRFRCkgIT0gMDsKIAogCS8qCiAJICogQmVmb3JlIHBvc3NpYmx5IGZyZWVpbmcgdGhlIGJ1ZiBpdGVtLCBkZXRlcm1pbmUgaWYgd2Ugc2hvdWxkCkBAIC02MDcsMTYgKzU5MSwxNiBAQAogICovCiBTVEFUSUMgeGZzX2xzbl90CiB4ZnNfYnVmX2l0ZW1fY29tbWl0dGVkKAotCXhmc19idWZfbG9nX2l0ZW1fdAkqYmlwLAorCXN0cnVjdCB4ZnNfbG9nX2l0ZW0JKmxpcCwKIAl4ZnNfbHNuX3QJCWxzbikKIHsKKwlzdHJ1Y3QgeGZzX2J1Zl9sb2dfaXRlbQkqYmlwID0gQlVGX0lURU0obGlwKTsKKwogCXRyYWNlX3hmc19idWZfaXRlbV9jb21taXR0ZWQoYmlwKTsKIAotCWlmICgoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX0lOT0RFX0FMTE9DX0JVRikgJiYKLQkgICAgKGJpcC0+YmxpX2l0ZW0ubGlfbHNuICE9IDApKSB7Ci0JCXJldHVybiBiaXAtPmJsaV9pdGVtLmxpX2xzbjsKLQl9Ci0JcmV0dXJuIChsc24pOworCWlmICgoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX0lOT0RFX0FMTE9DX0JVRikgJiYgbGlwLT5saV9sc24gIT0gMCkKKwkJcmV0dXJuIGxpcC0+bGlfbHNuOworCXJldHVybiBsc247CiB9CiAKIC8qCkBAIC02MjYsMTUgKzYxMCwxNiBAQAogICovCiBTVEFUSUMgdm9pZAogeGZzX2J1Zl9pdGVtX3B1c2goCi0JeGZzX2J1Zl9sb2dfaXRlbV90CSpiaXApCisJc3RydWN0IHhmc19sb2dfaXRlbQkqbGlwKQogewotCXhmc19idWZfdAkqYnA7CisJc3RydWN0IHhmc19idWZfbG9nX2l0ZW0JKmJpcCA9IEJVRl9JVEVNKGxpcCk7CisJc3RydWN0IHhmc19idWYJCSpicCA9IGJpcC0+YmxpX2J1ZjsKIAogCUFTU0VSVCghKGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9TVEFMRSkpOworCUFTU0VSVCghWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKTsKKwogCXRyYWNlX3hmc19idWZfaXRlbV9wdXNoKGJpcCk7CiAKLQlicCA9IGJpcC0+YmxpX2J1ZjsKLQlBU1NFUlQoIVhGU19CVUZfSVNERUxBWVdSSVRFKGJwKSk7CiAJeGZzX2J1Zl9yZWxzZShicCk7CiB9CiAKQEAgLTY0NiwyMiArNjMxLDI0IEBACiAgKi8KIFNUQVRJQyB2b2lkCiB4ZnNfYnVmX2l0ZW1fcHVzaGJ1ZigKLQl4ZnNfYnVmX2xvZ19pdGVtX3QJKmJpcCkKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXApCiB7Ci0JeGZzX2J1Zl90CSpicDsKKwlzdHJ1Y3QgeGZzX2J1Zl9sb2dfaXRlbQkqYmlwID0gQlVGX0lURU0obGlwKTsKKwlzdHJ1Y3QgeGZzX2J1ZgkJKmJwID0gYmlwLT5ibGlfYnVmOwogCiAJQVNTRVJUKCEoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX1NUQUxFKSk7CisJQVNTRVJUKFhGU19CVUZfSVNERUxBWVdSSVRFKGJwKSk7CisKIAl0cmFjZV94ZnNfYnVmX2l0ZW1fcHVzaGJ1ZihiaXApOwogCi0JYnAgPSBiaXAtPmJsaV9idWY7Ci0JQVNTRVJUKFhGU19CVUZfSVNERUxBWVdSSVRFKGJwKSk7CiAJeGZzX2J1Zl9kZWx3cmlfcHJvbW90ZShicCk7CiAJeGZzX2J1Zl9yZWxzZShicCk7CiB9CiAKLS8qIEFSR1NVU0VEICovCiBTVEFUSUMgdm9pZAoteGZzX2J1Zl9pdGVtX2NvbW1pdHRpbmcoeGZzX2J1Zl9sb2dfaXRlbV90ICpiaXAsIHhmc19sc25fdCBjb21taXRfbHNuKQoreGZzX2J1Zl9pdGVtX2NvbW1pdHRpbmcoCisJc3RydWN0IHhmc19sb2dfaXRlbQkqbGlwLAorCXhmc19sc25fdAkJY29tbWl0X2xzbikKIHsKIH0KIApAQCAtNjY5LDIxICs2NTYsMTYgQEAKICAqIFRoaXMgaXMgdGhlIG9wcyB2ZWN0b3Igc2hhcmVkIGJ5IGFsbCBidWYgbG9nIGl0ZW1zLgogICovCiBzdGF0aWMgc3RydWN0IHhmc19pdGVtX29wcyB4ZnNfYnVmX2l0ZW1fb3BzID0gewotCS5pb3Bfc2l6ZQk9ICh1aW50KCopKHhmc19sb2dfaXRlbV90KikpeGZzX2J1Zl9pdGVtX3NpemUsCi0JLmlvcF9mb3JtYXQJPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCosIHhmc19sb2dfaW92ZWNfdCopKQotCQkJCQl4ZnNfYnVmX2l0ZW1fZm9ybWF0LAotCS5pb3BfcGluCT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfYnVmX2l0ZW1fcGluLAotCS5pb3BfdW5waW4JPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCopKXhmc19idWZfaXRlbV91bnBpbiwKLQkuaW9wX3VucGluX3JlbW92ZSA9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KiwgeGZzX3RyYW5zX3QgKikpCi0JCQkJCXhmc19idWZfaXRlbV91bnBpbl9yZW1vdmUsCi0JLmlvcF90cnlsb2NrCT0gKHVpbnQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfYnVmX2l0ZW1fdHJ5bG9jaywKLQkuaW9wX3VubG9jawk9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KikpeGZzX2J1Zl9pdGVtX3VubG9jaywKLQkuaW9wX2NvbW1pdHRlZAk9ICh4ZnNfbHNuX3QoKikoeGZzX2xvZ19pdGVtX3QqLCB4ZnNfbHNuX3QpKQotCQkJCQl4ZnNfYnVmX2l0ZW1fY29tbWl0dGVkLAotCS5pb3BfcHVzaAk9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KikpeGZzX2J1Zl9pdGVtX3B1c2gsCi0JLmlvcF9wdXNoYnVmCT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfYnVmX2l0ZW1fcHVzaGJ1ZiwKLQkuaW9wX2NvbW1pdHRpbmcgPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCosIHhmc19sc25fdCkpCi0JCQkJCXhmc19idWZfaXRlbV9jb21taXR0aW5nCisJLmlvcF9zaXplCT0geGZzX2J1Zl9pdGVtX3NpemUsCisJLmlvcF9mb3JtYXQJPSB4ZnNfYnVmX2l0ZW1fZm9ybWF0LAorCS5pb3BfcGluCT0geGZzX2J1Zl9pdGVtX3BpbiwKKwkuaW9wX3VucGluCT0geGZzX2J1Zl9pdGVtX3VucGluLAorCS5pb3BfdHJ5bG9jawk9IHhmc19idWZfaXRlbV90cnlsb2NrLAorCS5pb3BfdW5sb2NrCT0geGZzX2J1Zl9pdGVtX3VubG9jaywKKwkuaW9wX2NvbW1pdHRlZAk9IHhmc19idWZfaXRlbV9jb21taXR0ZWQsCisJLmlvcF9wdXNoCT0geGZzX2J1Zl9pdGVtX3B1c2gsCisJLmlvcF9wdXNoYnVmCT0geGZzX2J1Zl9pdGVtX3B1c2hidWYsCisJLmlvcF9jb21taXR0aW5nID0geGZzX2J1Zl9pdGVtX2NvbW1pdHRpbmcKIH07CiAKIApAQCAtNzEyLDcgKzY5NCw2IEBACiAJICovCiAJaWYgKGJwLT5iX21vdW50ICE9IG1wKQogCQlicC0+Yl9tb3VudCA9IG1wOwotCVhGU19CVUZfU0VUX0JEU1RSQVRfRlVOQyhicCwgeGZzX2Jkc3RyYXRfY2IpOwogCWlmIChYRlNfQlVGX0ZTUFJJVkFURShicCwgdm9pZCAqKSAhPSBOVUxMKSB7CiAJCWxpcCA9IFhGU19CVUZfRlNQUklWQVRFKGJwLCB4ZnNfbG9nX2l0ZW1fdCAqKTsKIAkJaWYgKGxpcC0+bGlfdHlwZSA9PSBYRlNfTElfQlVGKSB7CkBAIC0xMDk4LDE1ICsxMDc5LDE0IEBACiAgKiBJdCBpcyBjYWxsZWQgYnkgeGZzX2J1Zl9pb2RvbmVfY2FsbGJhY2tzKCkgYWJvdmUgd2hpY2ggd2lsbCB0YWtlCiAgKiBjYXJlIG9mIGNsZWFuaW5nIHVwIHRoZSBidWZmZXIgaXRzZWxmLgogICovCi0vKiBBUkdTVVNFRCAqLwogdm9pZAogeGZzX2J1Zl9pb2RvbmUoCi0JeGZzX2J1Zl90CQkqYnAsCi0JeGZzX2J1Zl9sb2dfaXRlbV90CSpiaXApCisJc3RydWN0IHhmc19idWYJCSpicCwKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXApCiB7Ci0Jc3RydWN0IHhmc19haWwJCSphaWxwID0gYmlwLT5ibGlfaXRlbS5saV9haWxwOworCXN0cnVjdCB4ZnNfYWlsCQkqYWlscCA9IGxpcC0+bGlfYWlscDsKIAotCUFTU0VSVChiaXAtPmJsaV9idWYgPT0gYnApOworCUFTU0VSVChCVUZfSVRFTShsaXApLT5ibGlfYnVmID09IGJwKTsKIAogCXhmc19idWZfcmVsZShicCk7CiAKQEAgLTExMjAsNiArMTEwMCw2IEBACiAJICogRWl0aGVyIHdheSwgQUlMIGlzIHVzZWxlc3MgaWYgd2UncmUgZm9yY2luZyBhIHNodXRkb3duLgogCSAqLwogCXNwaW5fbG9jaygmYWlscC0+eGFfbG9jayk7Ci0JeGZzX3RyYW5zX2FpbF9kZWxldGUoYWlscCwgKHhmc19sb2dfaXRlbV90ICopYmlwKTsKLQl4ZnNfYnVmX2l0ZW1fZnJlZShiaXApOworCXhmc190cmFuc19haWxfZGVsZXRlKGFpbHAsIGxpcCk7CisJeGZzX2J1Zl9pdGVtX2ZyZWUoQlVGX0lURU0obGlwKSk7CiB9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2J1Zl9pdGVtLmggYi9mcy94ZnMveGZzX2J1Zl9pdGVtLmgKaW5kZXggZjIwYmI0Ny4uMGUyZWQ0MyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19idWZfaXRlbS5oCisrKyBiL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uaApAQCAtMTI0LDcgKzEyNCw3IEBACiAJCQkgICAgICB2b2lkKCopKHN0cnVjdCB4ZnNfYnVmICosIHhmc19sb2dfaXRlbV90ICopLAogCQkJICAgICAgeGZzX2xvZ19pdGVtX3QgKik7CiB2b2lkCXhmc19idWZfaW9kb25lX2NhbGxiYWNrcyhzdHJ1Y3QgeGZzX2J1ZiAqKTsKLXZvaWQJeGZzX2J1Zl9pb2RvbmUoc3RydWN0IHhmc19idWYgKiwgeGZzX2J1Zl9sb2dfaXRlbV90ICopOwordm9pZAl4ZnNfYnVmX2lvZG9uZShzdHJ1Y3QgeGZzX2J1ZiAqLCBzdHJ1Y3QgeGZzX2xvZ19pdGVtICopOwogCiAjaWZkZWYgWEZTX1RSQU5TX0RFQlVHCiB2b2lkCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RhX2J0cmVlLmMgYi9mcy94ZnMveGZzX2RhX2J0cmVlLmMKaW5kZXggMGNhNTU2Yi4uMzBmYTBlMiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kYV9idHJlZS5jCisrKyBiL2ZzL3hmcy94ZnNfZGFfYnRyZWUuYwpAQCAtMjUsMTkgKzI1LDE0IEBACiAjaW5jbHVkZSAieGZzX3NiLmgiCiAjaW5jbHVkZSAieGZzX2FnLmgiCiAjaW5jbHVkZSAieGZzX2RpcjIuaCIKLSNpbmNsdWRlICJ4ZnNfZG1hcGkuaCIKICNpbmNsdWRlICJ4ZnNfbW91bnQuaCIKICNpbmNsdWRlICJ4ZnNfZGFfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfYm1hcF9idHJlZS5oIgotI2luY2x1ZGUgInhmc19hbGxvY19idHJlZS5oIgotI2luY2x1ZGUgInhmc19pYWxsb2NfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfZGlyMl9zZi5oIgotI2luY2x1ZGUgInhmc19hdHRyX3NmLmgiCiAjaW5jbHVkZSAieGZzX2Rpbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZV9pdGVtLmgiCiAjaW5jbHVkZSAieGZzX2FsbG9jLmgiCi0jaW5jbHVkZSAieGZzX2J0cmVlLmgiCiAjaW5jbHVkZSAieGZzX2JtYXAuaCIKICNpbmNsdWRlICJ4ZnNfYXR0ci5oIgogI2luY2x1ZGUgInhmc19hdHRyX2xlYWYuaCIKQEAgLTU4MSwxNiArNTc2LDE0IEBACiAJeGZzX2RhX2ludG5vZGVfdCAqbm9kZTsKIAl4ZnNfZGFfbm9kZV9lbnRyeV90ICpidHJlZTsKIAlpbnQgdG1wOwotCXhmc19tb3VudF90ICptcDsKIAogCW5vZGUgPSBvbGRibGstPmJwLT5kYXRhOwotCW1wID0gc3RhdGUtPm1wOwogCUFTU0VSVChiZTE2X3RvX2NwdShub2RlLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0RBX05PREVfTUFHSUMpOwogCUFTU0VSVCgob2xkYmxrLT5pbmRleCA+PSAwKSAmJiAob2xkYmxrLT5pbmRleCA8PSBiZTE2X3RvX2NwdShub2RlLT5oZHIuY291bnQpKSk7CiAJQVNTRVJUKG5ld2Jsay0+Ymxrbm8gIT0gMCk7CiAJaWYgKHN0YXRlLT5hcmdzLT53aGljaGZvcmsgPT0gWEZTX0RBVEFfRk9SSykKLQkJQVNTRVJUKG5ld2Jsay0+Ymxrbm8gPj0gbXAtPm1fZGlybGVhZmJsayAmJgotCQkgICAgICAgbmV3YmxrLT5ibGtubyA8IG1wLT5tX2RpcmZyZWVibGspOworCQlBU1NFUlQobmV3YmxrLT5ibGtubyA+PSBzdGF0ZS0+bXAtPm1fZGlybGVhZmJsayAmJgorCQkgICAgICAgbmV3YmxrLT5ibGtubyA8IHN0YXRlLT5tcC0+bV9kaXJmcmVlYmxrKTsKIAogCS8qCiAJICogV2UgbWF5IG5lZWQgdG8gbWFrZSBzb21lIHJvb20gYmVmb3JlIHdlIGluc2VydCB0aGUgbmV3IG5vZGUuCkBAIC0xNjAxLDcgKzE1OTQsNyBAQAogCQkJeGZzX2JtYXBpX2FmbGFnKHcpfFhGU19CTUFQSV9XUklURXxYRlNfQk1BUElfTUVUQURBVEF8CiAJCQlYRlNfQk1BUElfQ09OVElHLAogCQkJYXJncy0+Zmlyc3RibG9jaywgYXJncy0+dG90YWwsICZtYXAsICZubWFwLAotCQkJYXJncy0+Zmxpc3QsIE5VTEwpKSkgeworCQkJYXJncy0+Zmxpc3QpKSkgewogCQlyZXR1cm4gZXJyb3I7CiAJfQogCUFTU0VSVChubWFwIDw9IDEpOwpAQCAtMTYyMiw4ICsxNjE1LDcgQEAKIAkJCQkJeGZzX2JtYXBpX2FmbGFnKHcpfFhGU19CTUFQSV9XUklURXwKIAkJCQkJWEZTX0JNQVBJX01FVEFEQVRBLAogCQkJCQlhcmdzLT5maXJzdGJsb2NrLCBhcmdzLT50b3RhbCwKLQkJCQkJJm1hcHBbbWFwaV0sICZubWFwLCBhcmdzLT5mbGlzdCwKLQkJCQkJTlVMTCkpKSB7CisJCQkJCSZtYXBwW21hcGldLCAmbm1hcCwgYXJncy0+Zmxpc3QpKSkgewogCQkJCWttZW1fZnJlZShtYXBwKTsKIAkJCQlyZXR1cm4gZXJyb3I7CiAJCQl9CkBAIC0xODg0LDcgKzE4NzYsNyBAQAogCQkgKi8KIAkJaWYgKChlcnJvciA9IHhmc19idW5tYXBpKHRwLCBkcCwgZGVhZF9ibGtubywgY291bnQsCiAJCQkJeGZzX2JtYXBpX2FmbGFnKHcpfFhGU19CTUFQSV9NRVRBREFUQSwKLQkJCQkwLCBhcmdzLT5maXJzdGJsb2NrLCBhcmdzLT5mbGlzdCwgTlVMTCwKKwkJCQkwLCBhcmdzLT5maXJzdGJsb2NrLCBhcmdzLT5mbGlzdCwKIAkJCQkmZG9uZSkpID09IEVOT1NQQykgewogCQkJaWYgKHcgIT0gWEZTX0RBVEFfRk9SSykKIAkJCQlicmVhazsKQEAgLTE5ODksNyArMTk4MSw3IEBACiAJCQkJCW5mc2IsCiAJCQkJCVhGU19CTUFQSV9NRVRBREFUQSB8CiAJCQkJCQl4ZnNfYm1hcGlfYWZsYWcod2hpY2hmb3JrKSwKLQkJCQkJTlVMTCwgMCwgbWFwcCwgJm5tYXAsIE5VTEwsIE5VTEwpKSkKKwkJCQkJTlVMTCwgMCwgbWFwcCwgJm5tYXAsIE5VTEwpKSkKIAkJCQlnb3RvIGV4aXQwOwogCQl9CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGZyYWcuYyBiL2ZzL3hmcy94ZnNfZGZyYWcuYwppbmRleCA3ZjE1OWQyLi4zYjk1ODJjIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RmcmFnLmMKKysrIGIvZnMveGZzL3hmc19kZnJhZy5jCkBAIC0yNCwyNCArMjQsMTUgQEAKICNpbmNsdWRlICJ4ZnNfdHJhbnMuaCIKICNpbmNsdWRlICJ4ZnNfc2IuaCIKICNpbmNsdWRlICJ4ZnNfYWcuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMi5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc19ibWFwX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2FsbG9jX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2lhbGxvY19idHJlZS5oIgotI2luY2x1ZGUgInhmc19kaXIyX3NmLmgiCi0jaW5jbHVkZSAieGZzX2F0dHJfc2YuaCIKICNpbmNsdWRlICJ4ZnNfZGlub2RlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlX2l0ZW0uaCIKICNpbmNsdWRlICJ4ZnNfYm1hcC5oIgotI2luY2x1ZGUgInhmc19idHJlZS5oIgotI2luY2x1ZGUgInhmc19pYWxsb2MuaCIKICNpbmNsdWRlICJ4ZnNfaXRhYmxlLmgiCiAjaW5jbHVkZSAieGZzX2RmcmFnLmgiCiAjaW5jbHVkZSAieGZzX2Vycm9yLmgiCi0jaW5jbHVkZSAieGZzX3J3LmgiCiAjaW5jbHVkZSAieGZzX3Zub2Rlb3BzLmgiCiAjaW5jbHVkZSAieGZzX3RyYWNlLmgiCiAKQEAgLTQyNSwxMSArNDE2LDggQEAKIAl9CiAKIAotCUlIT0xEKGlwKTsKLQl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCBYRlNfSUxPQ0tfRVhDTCB8IFhGU19JT0xPQ0tfRVhDTCk7Ci0KLQlJSE9MRCh0aXApOwotCXhmc190cmFuc19pam9pbih0cCwgdGlwLCBYRlNfSUxPQ0tfRVhDTCB8IFhGU19JT0xPQ0tfRVhDTCk7CisJeGZzX3RyYW5zX2lqb2luX3JlZih0cCwgaXAsIFhGU19JTE9DS19FWENMIHwgWEZTX0lPTE9DS19FWENMKTsKKwl4ZnNfdHJhbnNfaWpvaW5fcmVmKHRwLCB0aXAsIFhGU19JTE9DS19FWENMIHwgWEZTX0lPTE9DS19FWENMKTsKIAogCXhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCAgaWxmX2ZpZWxkcyk7CiAJeGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgdGlwLCB0aWxmX2ZpZWxkcyk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RpcjIuYyBiL2ZzL3hmcy94ZnNfZGlyMi5jCmluZGV4IDQyNTIwZjAuLmExMzIxYmMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMi5jCisrKyBiL2ZzL3hmcy94ZnNfZGlyMi5jCkBAIC0yNSwxMyArMjUsMTEgQEAKICNpbmNsdWRlICJ4ZnNfc2IuaCIKICNpbmNsdWRlICJ4ZnNfYWcuaCIKICNpbmNsdWRlICJ4ZnNfZGlyMi5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc19kYV9idHJlZS5oIgogI2luY2x1ZGUgInhmc19ibWFwX2J0cmVlLmgiCiAjaW5jbHVkZSAieGZzX2FsbG9jX2J0cmVlLmgiCiAjaW5jbHVkZSAieGZzX2RpcjJfc2YuaCIKLSNpbmNsdWRlICJ4ZnNfYXR0cl9zZi5oIgogI2luY2x1ZGUgInhmc19kaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfaW5vZGVfaXRlbS5oIgpAQCAtMzgyLDcgKzM4MCw3IEBACiAJaW50CQlydmFsOwkJLyogcmV0dXJuIHZhbHVlICovCiAJaW50CQl2OwkJLyogdHlwZS1jaGVja2luZyB2YWx1ZSAqLwogCi0JeGZzX2l0cmFjZV9lbnRyeShkcCk7CisJdHJhY2VfeGZzX3JlYWRkaXIoZHApOwogCiAJaWYgKFhGU19GT1JDRURfU0hVVERPV04oZHAtPmlfbW91bnQpKQogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CkBAIC01NDksNyArNTQ3LDcgQEAKIAlpZiAoKGVycm9yID0geGZzX2JtYXBpKHRwLCBkcCwgYm5vLCBjb3VudCwKIAkJCVhGU19CTUFQSV9XUklURXxYRlNfQk1BUElfTUVUQURBVEF8WEZTX0JNQVBJX0NPTlRJRywKIAkJCWFyZ3MtPmZpcnN0YmxvY2ssIGFyZ3MtPnRvdGFsLCAmbWFwLCAmbm1hcCwKLQkJCWFyZ3MtPmZsaXN0LCBOVUxMKSkpCisJCQlhcmdzLT5mbGlzdCkpKQogCQlyZXR1cm4gZXJyb3I7CiAJQVNTRVJUKG5tYXAgPD0gMSk7CiAJaWYgKG5tYXAgPT0gMSkgewpAQCAtNTgxLDggKzU3OSw3IEBACiAJCQlpZiAoKGVycm9yID0geGZzX2JtYXBpKHRwLCBkcCwgYiwgYywKIAkJCQkJWEZTX0JNQVBJX1dSSVRFfFhGU19CTUFQSV9NRVRBREFUQSwKIAkJCQkJYXJncy0+Zmlyc3RibG9jaywgYXJncy0+dG90YWwsCi0JCQkJCSZtYXBwW21hcGldLCAmbm1hcCwgYXJncy0+Zmxpc3QsCi0JCQkJCU5VTEwpKSkgeworCQkJCQkmbWFwcFttYXBpXSwgJm5tYXAsIGFyZ3MtPmZsaXN0KSkpIHsKIAkJCQlrbWVtX2ZyZWUobWFwcCk7CiAJCQkJcmV0dXJuIGVycm9yOwogCQkJfQpAQCAtNzE1LDcgKzcxMiw3IEBACiAJICovCiAJaWYgKChlcnJvciA9IHhmc19idW5tYXBpKHRwLCBkcCwgZGEsIG1wLT5tX2RpcmJsa2ZzYnMsCiAJCQlYRlNfQk1BUElfTUVUQURBVEEsIDAsIGFyZ3MtPmZpcnN0YmxvY2ssIGFyZ3MtPmZsaXN0LAotCQkJTlVMTCwgJmRvbmUpKSkgeworCQkJJmRvbmUpKSkgewogCQkvKgogCQkgKiBFTk9TUEMgYWN0dWFsbHkgY2FuIGhhcHBlbiBpZiB3ZSdyZSBpbiBhIHJlbW92ZW5hbWUgd2l0aAogCQkgKiBubyBzcGFjZSByZXNlcnZhdGlvbiwgYW5kIHRoZSByZXN1bHRpbmcgYmxvY2sgcmVtb3ZhbApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyX2Jsb2NrLmMgYi9mcy94ZnMveGZzX2RpcjJfYmxvY2suYwppbmRleCA3NzlhMjY3Li41ODBkOTljIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjJfYmxvY2suYworKysgYi9mcy94ZnMveGZzX2RpcjJfYmxvY2suYwpAQCAtMjQsMTIgKzI0LDEwIEBACiAjaW5jbHVkZSAieGZzX3NiLmgiCiAjaW5jbHVkZSAieGZzX2FnLmgiCiAjaW5jbHVkZSAieGZzX2RpcjIuaCIKLSNpbmNsdWRlICJ4ZnNfZG1hcGkuaCIKICNpbmNsdWRlICJ4ZnNfbW91bnQuaCIKICNpbmNsdWRlICJ4ZnNfZGFfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfYm1hcF9idHJlZS5oIgogI2luY2x1ZGUgInhmc19kaXIyX3NmLmgiCi0jaW5jbHVkZSAieGZzX2F0dHJfc2YuaCIKICNpbmNsdWRlICJ4ZnNfZGlub2RlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlX2l0ZW0uaCIKQEAgLTEwNzMsMTAgKzEwNzEsMTAgQEAKIAkgKi8KIAogCWJ1Zl9sZW4gPSBkcC0+aV9kZi5pZl9ieXRlczsKLQlidWYgPSBrbWVtX2FsbG9jKGRwLT5pX2RmLmlmX2J5dGVzLCBLTV9TTEVFUCk7CisJYnVmID0ga21lbV9hbGxvYyhidWZfbGVuLCBLTV9TTEVFUCk7CiAKLQltZW1jcHkoYnVmLCBzZnAsIGRwLT5pX2RmLmlmX2J5dGVzKTsKLQl4ZnNfaWRhdGFfcmVhbGxvYyhkcCwgLWRwLT5pX2RmLmlmX2J5dGVzLCBYRlNfREFUQV9GT1JLKTsKKwltZW1jcHkoYnVmLCBzZnAsIGJ1Zl9sZW4pOworCXhmc19pZGF0YV9yZWFsbG9jKGRwLCAtYnVmX2xlbiwgWEZTX0RBVEFfRk9SSyk7CiAJZHAtPmlfZC5kaV9zaXplID0gMDsKIAl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBkcCwgWEZTX0lMT0dfQ09SRSk7CiAJLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9kYXRhLmMgYi9mcy94ZnMveGZzX2RpcjJfZGF0YS5jCmluZGV4IDQ5OGY4ZDYuLjkyMTU5NWIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMl9kYXRhLmMKKysrIGIvZnMveGZzL3hmc19kaXIyX2RhdGEuYwpAQCAtMjQsMTIgKzI0LDEwIEBACiAjaW5jbHVkZSAieGZzX3NiLmgiCiAjaW5jbHVkZSAieGZzX2FnLmgiCiAjaW5jbHVkZSAieGZzX2RpcjIuaCIKLSNpbmNsdWRlICJ4ZnNfZG1hcGkuaCIKICNpbmNsdWRlICJ4ZnNfbW91bnQuaCIKICNpbmNsdWRlICJ4ZnNfZGFfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfYm1hcF9idHJlZS5oIgogI2luY2x1ZGUgInhmc19kaXIyX3NmLmgiCi0jaW5jbHVkZSAieGZzX2F0dHJfc2YuaCIKICNpbmNsdWRlICJ4ZnNfZGlub2RlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlLmgiCiAjaW5jbHVkZSAieGZzX2RpcjJfZGF0YS5oIgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyX2xlYWYuYyBiL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMKaW5kZXggZTJkODk4NS4uNTA0YmU4NiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX2xlYWYuYworKysgYi9mcy94ZnMveGZzX2RpcjJfbGVhZi5jCkBAIC0yNSwxMSArMjUsOSBAQAogI2luY2x1ZGUgInhmc19zYi5oIgogI2luY2x1ZGUgInhmc19hZy5oIgogI2luY2x1ZGUgInhmc19kaXIyLmgiCi0jaW5jbHVkZSAieGZzX2RtYXBpLmgiCiAjaW5jbHVkZSAieGZzX21vdW50LmgiCiAjaW5jbHVkZSAieGZzX2RhX2J0cmVlLmgiCiAjaW5jbHVkZSAieGZzX2JtYXBfYnRyZWUuaCIKLSNpbmNsdWRlICJ4ZnNfYXR0cl9zZi5oIgogI2luY2x1ZGUgInhmc19kaXIyX3NmLmgiCiAjaW5jbHVkZSAieGZzX2Rpbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZS5oIgpAQCAtODc1LDcgKzg3Myw3IEBACiAJCQkJCXhmc19kaXIyX2J5dGVfdG9fZGEobXAsCiAJCQkJCQlYRlNfRElSMl9MRUFGX09GRlNFVCkgLSBtYXBfb2ZmLAogCQkJCQlYRlNfQk1BUElfTUVUQURBVEEsIE5VTEwsIDAsCi0JCQkJCSZtYXBbbWFwX3ZhbGlkXSwgJm5tYXAsIE5VTEwsIE5VTEwpOworCQkJCQkmbWFwW21hcF92YWxpZF0sICZubWFwLCBOVUxMKTsKIAkJCQkvKgogCQkJCSAqIERvbid0IGtub3cgaWYgd2Ugc2hvdWxkIGlnbm9yZSB0aGlzIG9yCiAJCQkJICogdHJ5IHRvIHJldHVybiBhbiBlcnJvci4KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9ub2RlLmMgYi9mcy94ZnMveGZzX2RpcjJfbm9kZS5jCmluZGV4IDc4ZmM0ZDkuLmY5YTA4NjQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMl9ub2RlLmMKKysrIGIvZnMveGZzL3hmc19kaXIyX25vZGUuYwpAQCAtMjQsMTIgKzI0LDEwIEBACiAjaW5jbHVkZSAieGZzX3NiLmgiCiAjaW5jbHVkZSAieGZzX2FnLmgiCiAjaW5jbHVkZSAieGZzX2RpcjIuaCIKLSNpbmNsdWRlICJ4ZnNfZG1hcGkuaCIKICNpbmNsdWRlICJ4ZnNfbW91bnQuaCIKICNpbmNsdWRlICJ4ZnNfZGFfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfYm1hcF9idHJlZS5oIgogI2luY2x1ZGUgInhmc19kaXIyX3NmLmgiCi0jaW5jbHVkZSAieGZzX2F0dHJfc2YuaCIKICNpbmNsdWRlICJ4ZnNfZGlub2RlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlLmgiCiAjaW5jbHVkZSAieGZzX2JtYXAuaCIKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9zZi5jIGIvZnMveGZzL3hmc19kaXIyX3NmLmMKaW5kZXggYzFhNTk0NS4uYjFiYWU2YiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX3NmLmMKKysrIGIvZnMveGZzL3hmc19kaXIyX3NmLmMKQEAgLTI0LDEyICsyNCwxMCBAQAogI2luY2x1ZGUgInhmc19zYi5oIgogI2luY2x1ZGUgInhmc19hZy5oIgogI2luY2x1ZGUgInhmc19kaXIyLmgiCi0jaW5jbHVkZSAieGZzX2RtYXBpLmgiCiAjaW5jbHVkZSAieGZzX21vdW50LmgiCiAjaW5jbHVkZSAieGZzX2RhX2J0cmVlLmgiCiAjaW5jbHVkZSAieGZzX2JtYXBfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfZGlyMl9zZi5oIgotI2luY2x1ZGUgInhmc19hdHRyX3NmLmgiCiAjaW5jbHVkZSAieGZzX2Rpbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZV9pdGVtLmgiCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RtYXBpLmggYi9mcy94ZnMveGZzX2RtYXBpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MTNjZGQuLjAwMDAwMDAKLS0tIGEvZnMveGZzL3hmc19kbWFwaS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCi0gKiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3b3VsZCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIEluYy4sICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0jaWZuZGVmIF9fWEZTX0RNQVBJX0hfXwotI2RlZmluZSBfX1hGU19ETUFQSV9IX18KLQotLyoJVmFsdWVzIHVzZWQgdG8gZGVmaW5lIHRoZSBvbi1kaXNrIHZlcnNpb24gb2YgZG1fYXR0cm5hbWVfdC4gQWxsCi0gKglvbi1kaXNrIGF0dHJpYnV0ZSBuYW1lcyBzdGFydCB3aXRoIHRoZSA4LWJ5dGUgc3RyaW5nICJTR0lfRE1JXyIuCi0gKgotICogICAgICBJbiB0aGUgb24tZGlzayBpbm9kZSwgRE1BUEkgYXR0cmlidXRlIG5hbWVzIGNvbnNpc3Qgb2YgdGhlIHVzZXItcHJvdmlkZWQKLSAqICAgICAgbmFtZSB3aXRoIHRoZSBETUFUVFJfUFJFRklYU1RSSU5HIHByZS1wZW5kZWQuICBUaGlzIHN0cmluZyBtdXN0IE5FVkVSIGJlCi0gKiAgICAgIGNoYW5nZWQuCi0gKi8KLQotI2RlZmluZSBETUFUVFJfUFJFRklYTEVOCTgKLSNkZWZpbmUgRE1BVFRSX1BSRUZJWFNUUklORwkiU0dJX0RNSV8iCi0KLXR5cGVkZWYgZW51bSB7Ci0JRE1fRVZFTlRfSU5WQUxJRAk9IC0xLAotCURNX0VWRU5UX0NBTkNFTAkJPSAwLAkJLyogbm90IHN1cHBvcnRlZCAqLwotCURNX0VWRU5UX01PVU5UCQk9IDEsCi0JRE1fRVZFTlRfUFJFVU5NT1VOVAk9IDIsCi0JRE1fRVZFTlRfVU5NT1VOVAk9IDMsCi0JRE1fRVZFTlRfREVCVVQJCT0gNCwJCS8qIG5vdCBzdXBwb3J0ZWQgKi8KLQlETV9FVkVOVF9DUkVBVEUJCT0gNSwKLQlETV9FVkVOVF9DTE9TRQkJPSA2LAkJLyogbm90IHN1cHBvcnRlZCAqLwotCURNX0VWRU5UX1BPU1RDUkVBVEUJPSA3LAotCURNX0VWRU5UX1JFTU9WRQkJPSA4LAotCURNX0VWRU5UX1BPU1RSRU1PVkUJPSA5LAotCURNX0VWRU5UX1JFTkFNRQkJPSAxMCwKLQlETV9FVkVOVF9QT1NUUkVOQU1FCT0gMTEsCi0JRE1fRVZFTlRfTElOSwkJPSAxMiwKLQlETV9FVkVOVF9QT1NUTElOSwk9IDEzLAotCURNX0VWRU5UX1NZTUxJTksJPSAxNCwKLQlETV9FVkVOVF9QT1NUU1lNTElOSwk9IDE1LAotCURNX0VWRU5UX1JFQUQJCT0gMTYsCi0JRE1fRVZFTlRfV1JJVEUJCT0gMTcsCi0JRE1fRVZFTlRfVFJVTkNBVEUJPSAxOCwKLQlETV9FVkVOVF9BVFRSSUJVVEUJPSAxOSwKLQlETV9FVkVOVF9ERVNUUk9ZCT0gMjAsCi0JRE1fRVZFTlRfTk9TUEFDRQk9IDIxLAotCURNX0VWRU5UX1VTRVIJCT0gMjIsCi0JRE1fRVZFTlRfTUFYCQk9IDIzCi19IGRtX2V2ZW50dHlwZV90OwotI2RlZmluZSBIQVZFX0RNX0VWRU5UVFlQRV9UCi0KLXR5cGVkZWYgZW51bSB7Ci0JRE1fUklHSFRfTlVMTCwKLQlETV9SSUdIVF9TSEFSRUQsCi0JRE1fUklHSFRfRVhDTAotfSBkbV9yaWdodF90OwotI2RlZmluZSBIQVZFX0RNX1JJR0hUX1QKLQotLyogRGVmaW5lcyBmb3IgZGV0ZXJtaW5pbmcgaWYgYW4gZXZlbnQgbWVzc2FnZSBzaG91bGQgYmUgc2VudC4gKi8KLSNpZmRlZiBIQVZFX0RNQVBJCi0jZGVmaW5lCURNX0VWRU5UX0VOQUJMRUQoaXAsIGV2ZW50KSAoIFwKLQl1bmxpa2VseSAoKGlwKS0+aV9tb3VudC0+bV9mbGFncyAmIFhGU19NT1VOVF9ETUFQSSkgJiYgXAotCQkoICgoaXApLT5pX2QuZGlfZG1ldm1hc2sgJiAoMSA8PCBldmVudCkpIHx8IFwKLQkJICAoKGlwKS0+aV9tb3VudC0+bV9kbWV2bWFzayAmICgxIDw8IGV2ZW50KSkgKSBcCi0JKQotI2Vsc2UKLSNkZWZpbmUgRE1fRVZFTlRfRU5BQkxFRChpcCwgZXZlbnQpCSgwKQotI2VuZGlmCi0KLSNkZWZpbmUgRE1fWEZTX1ZBTElEX0ZTX0VWRU5UUwkJKCBcCi0JKDEgPDwgRE1fRVZFTlRfUFJFVU5NT1VOVCkJfCBcCi0JKDEgPDwgRE1fRVZFTlRfVU5NT1VOVCkJCXwgXAotCSgxIDw8IERNX0VWRU5UX05PU1BBQ0UpCQl8IFwKLQkoMSA8PCBETV9FVkVOVF9ERUJVVCkJCXwgXAotCSgxIDw8IERNX0VWRU5UX0NSRUFURSkJCXwgXAotCSgxIDw8IERNX0VWRU5UX1BPU1RDUkVBVEUpCXwgXAotCSgxIDw8IERNX0VWRU5UX1JFTU9WRSkJCXwgXAotCSgxIDw8IERNX0VWRU5UX1BPU1RSRU1PVkUpCXwgXAotCSgxIDw8IERNX0VWRU5UX1JFTkFNRSkJCXwgXAotCSgxIDw8IERNX0VWRU5UX1BPU1RSRU5BTUUpCXwgXAotCSgxIDw8IERNX0VWRU5UX0xJTkspCQl8IFwKLQkoMSA8PCBETV9FVkVOVF9QT1NUTElOSykJfCBcCi0JKDEgPDwgRE1fRVZFTlRfU1lNTElOSykJCXwgXAotCSgxIDw8IERNX0VWRU5UX1BPU1RTWU1MSU5LKQl8IFwKLQkoMSA8PCBETV9FVkVOVF9BVFRSSUJVVEUpCXwgXAotCSgxIDw8IERNX0VWRU5UX0RFU1RST1kpCQkpCi0KLS8qIEV2ZW50cyB2YWxpZCBpbiBkbV9zZXRfZXZlbnRsaXN0KCkgd2hlbiBjYWxsZWQgd2l0aCBhIGZpbGUgaGFuZGxlIGZvcgotICAgYSByZWd1bGFyIGZpbGUgb3IgYSBzeW1saW5rLiAgVGhlc2UgZXZlbnRzIGFyZSBwZXJzaXN0ZW50LgotKi8KLQotI2RlZmluZQlETV9YRlNfVkFMSURfRklMRV9FVkVOVFMJKCBcCi0JKDEgPDwgRE1fRVZFTlRfQVRUUklCVVRFKQl8IFwKLQkoMSA8PCBETV9FVkVOVF9ERVNUUk9ZKQkJKQotCi0vKiBFdmVudHMgdmFsaWQgaW4gZG1fc2V0X2V2ZW50bGlzdCgpIHdoZW4gY2FsbGVkIHdpdGggYSBmaWxlIGhhbmRsZSBmb3IKLSAgIGEgZGlyZWN0b3J5LiAgVGhlc2UgZXZlbnRzIGFyZSBwZXJzaXN0ZW50LgotKi8KLQotI2RlZmluZQlETV9YRlNfVkFMSURfRElSRUNUT1JZX0VWRU5UUwkoIFwKLQkoMSA8PCBETV9FVkVOVF9DUkVBVEUpCQl8IFwKLQkoMSA8PCBETV9FVkVOVF9QT1NUQ1JFQVRFKQl8IFwKLQkoMSA8PCBETV9FVkVOVF9SRU1PVkUpCQl8IFwKLQkoMSA8PCBETV9FVkVOVF9QT1NUUkVNT1ZFKQl8IFwKLQkoMSA8PCBETV9FVkVOVF9SRU5BTUUpCQl8IFwKLQkoMSA8PCBETV9FVkVOVF9QT1NUUkVOQU1FKQl8IFwKLQkoMSA8PCBETV9FVkVOVF9MSU5LKQkJfCBcCi0JKDEgPDwgRE1fRVZFTlRfUE9TVExJTkspCXwgXAotCSgxIDw8IERNX0VWRU5UX1NZTUxJTkspCQl8IFwKLQkoMSA8PCBETV9FVkVOVF9QT1NUU1lNTElOSykJfCBcCi0JKDEgPDwgRE1fRVZFTlRfQVRUUklCVVRFKQl8IFwKLQkoMSA8PCBETV9FVkVOVF9ERVNUUk9ZKQkJKQotCi0vKiBFdmVudHMgc3VwcG9ydGVkIGJ5IHRoZSBYRlMgZmlsZXN5c3RlbS4gKi8KLSNkZWZpbmUJRE1fWEZTX1NVUFBPUlRFRF9FVkVOVFMJCSggXAotCSgxIDw8IERNX0VWRU5UX01PVU5UKQkJfCBcCi0JKDEgPDwgRE1fRVZFTlRfUFJFVU5NT1VOVCkJfCBcCi0JKDEgPDwgRE1fRVZFTlRfVU5NT1VOVCkJCXwgXAotCSgxIDw8IERNX0VWRU5UX05PU1BBQ0UpCQl8IFwKLQkoMSA8PCBETV9FVkVOVF9DUkVBVEUpCQl8IFwKLQkoMSA8PCBETV9FVkVOVF9QT1NUQ1JFQVRFKQl8IFwKLQkoMSA8PCBETV9FVkVOVF9SRU1PVkUpCQl8IFwKLQkoMSA8PCBETV9FVkVOVF9QT1NUUkVNT1ZFKQl8IFwKLQkoMSA8PCBETV9FVkVOVF9SRU5BTUUpCQl8IFwKLQkoMSA8PCBETV9FVkVOVF9QT1NUUkVOQU1FKQl8IFwKLQkoMSA8PCBETV9FVkVOVF9MSU5LKQkJfCBcCi0JKDEgPDwgRE1fRVZFTlRfUE9TVExJTkspCXwgXAotCSgxIDw8IERNX0VWRU5UX1NZTUxJTkspCQl8IFwKLQkoMSA8PCBETV9FVkVOVF9QT1NUU1lNTElOSykJfCBcCi0JKDEgPDwgRE1fRVZFTlRfUkVBRCkJCXwgXAotCSgxIDw8IERNX0VWRU5UX1dSSVRFKQkJfCBcCi0JKDEgPDwgRE1fRVZFTlRfVFJVTkNBVEUpCXwgXAotCSgxIDw8IERNX0VWRU5UX0FUVFJJQlVURSkJfCBcCi0JKDEgPDwgRE1fRVZFTlRfREVTVFJPWSkJCSkKLQotCi0vKgotICoJRGVmaW5pdGlvbnMgdXNlZCBmb3IgdGhlIGZsYWdzIGZpZWxkIG9uIGRtX3NlbmRfKl9ldmVudCgpLgotICovCi0KLSNkZWZpbmUgRE1fRkxBR1NfTkRFTEFZCQkweDAwMQkvKiByZXR1cm4gRUFHQUlOIGFmdGVyIGRtX3BlbmRpbmcoKSAqLwotI2RlZmluZSBETV9GTEFHU19VTldBTlRFRAkweDAwMgkvKiBldmVudCBub3QgaW4gZnN5cyBkbV9ldmVudHNldF90ICovCi0jZGVmaW5lIERNX0ZMQUdTX0lNVVgJCTB4MDA0CS8qIHRocmVhZCBob2xkcyBpX211dGV4ICovCi0jZGVmaW5lIERNX0ZMQUdTX0lBTExPQ1NFTV9SRAkweDAxMAkvKiB0aHJlYWQgaG9sZHMgaV9hbGxvY19zZW0gcmQgKi8KLSNkZWZpbmUgRE1fRkxBR1NfSUFMTE9DU0VNX1dSCTB4MDIwCS8qIHRocmVhZCBob2xkcyBpX2FsbG9jX3NlbSB3ciAqLwotCi0vKgotICoJUHVsbCBpbiBwbGF0Zm9ybSBzcGVjaWZpYyBldmVudCBmbGFncyBkZWZpbmVzCi0gKi8KLSNpbmNsdWRlICJ4ZnNfZG1hcGlfcHJpdi5oIgotCi0vKgotICoJTWFjcm9zIHRvIHR1cm4gY2FsbGVyIHNwZWNpZmllZCBkZWxheS9ibG9jayBmbGFncyBpbnRvCi0gKglkbV9zZW5kX3h4eHhfZXZlbnQgZmxhZyBETV9GTEFHU19OREVMQVkuCi0gKi8KLQotI2RlZmluZSBGSUxQX0RFTEFZX0ZMQUcoZmlscCkgKChmaWxwLT5mX2ZsYWdzJihPX05ERUxBWXxPX05PTkJMT0NLKSkgPyBcCi0JCQlETV9GTEFHU19OREVMQVkgOiAwKQotI2RlZmluZSBBVF9ERUxBWV9GTEFHKGYpICgoZiAmIFhGU19BVFRSX05PTkJMT0NLKSA/IERNX0ZMQUdTX05ERUxBWSA6IDApCi0KLSNlbmRpZiAgLyogX19YRlNfRE1BUElfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2Rtb3BzLmMgYi9mcy94ZnMveGZzX2Rtb3BzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3MWUyNTguLjAwMDAwMDAKLS0tIGEvZnMveGZzL3hmc19kbW9wcy5jCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAzLDIwMDUgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd291bGQgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiBJbmMuLCAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotI2luY2x1ZGUgInhmcy5oIgotI2luY2x1ZGUgInhmc19mcy5oIgotI2luY2x1ZGUgInhmc190eXBlcy5oIgotI2luY2x1ZGUgInhmc19sb2cuaCIKLSNpbmNsdWRlICJ4ZnNfdHJhbnMuaCIKLSNpbmNsdWRlICJ4ZnNfc2IuaCIKLSNpbmNsdWRlICJ4ZnNfZG1hcGkuaCIKLSNpbmNsdWRlICJ4ZnNfaW51bS5oIgotI2luY2x1ZGUgInhmc19hZy5oIgotI2luY2x1ZGUgInhmc19tb3VudC5oIgotCi0KLXN0YXRpYyBzdHJ1Y3QgeGZzX2Rtb3BzIHhmc19kbWNvcmVfc3R1YiA9IHsKLQkueGZzX3NlbmRfZGF0YQkJPSAoeGZzX3NlbmRfZGF0YV90KWZzX25vc3lzLAotCS54ZnNfc2VuZF9tbWFwCQk9ICh4ZnNfc2VuZF9tbWFwX3QpZnNfbm9lcnIsCi0JLnhmc19zZW5kX2Rlc3Ryb3kJPSAoeGZzX3NlbmRfZGVzdHJveV90KWZzX25vc3lzLAotCS54ZnNfc2VuZF9uYW1lc3AJPSAoeGZzX3NlbmRfbmFtZXNwX3QpZnNfbm9zeXMsCi0JLnhmc19zZW5kX21vdW50CQk9ICh4ZnNfc2VuZF9tb3VudF90KWZzX25vc3lzLAotCS54ZnNfc2VuZF91bm1vdW50CT0gKHhmc19zZW5kX3VubW91bnRfdClmc19ub2VyciwKLX07Ci0KLWludAoteGZzX2Rtb3BzX2dldChzdHJ1Y3QgeGZzX21vdW50ICptcCkKLXsKLQlpZiAobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfRE1BUEkpIHsKLQkJY21uX2VycihDRV9XQVJOLAotCQkJIlhGUzogZG1hcGkgc3VwcG9ydCBub3QgYXZhaWxhYmxlIGluIHRoaXMga2VybmVsLiIpOwotCQlyZXR1cm4gRUlOVkFMOwotCX0KLQotCW1wLT5tX2RtX29wcyA9ICZ4ZnNfZG1jb3JlX3N0dWI7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQKLXhmc19kbW9wc19wdXQoc3RydWN0IHhmc19tb3VudCAqbXApCi17Ci19CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2Vycm9yLmMgYi9mcy94ZnMveGZzX2Vycm9yLmMKaW5kZXggMDQ3YjhhOC4uZWQ5OTkwMiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19lcnJvci5jCisrKyBiL2ZzL3hmcy94ZnNfZXJyb3IuYwpAQCAtMjMsMTIgKzIzLDggQEAKICNpbmNsdWRlICJ4ZnNfdHJhbnMuaCIKICNpbmNsdWRlICJ4ZnNfc2IuaCIKICNpbmNsdWRlICJ4ZnNfYWcuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMi5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc19ibWFwX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2RpcjJfc2YuaCIKLSNpbmNsdWRlICJ4ZnNfYXR0cl9zZi5oIgogI2luY2x1ZGUgInhmc19kaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfdXRpbHMuaCIKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmMgYi9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5jCmluZGV4IDQwOWZlODEuLmE1NWU2ODcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmMKKysrIGIvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgInhmc19idWZfaXRlbS5oIgogI2luY2x1ZGUgInhmc19zYi5oIgogI2luY2x1ZGUgInhmc19hZy5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc190cmFuc19wcml2LmgiCiAjaW5jbHVkZSAieGZzX2V4dGZyZWVfaXRlbS5oIgpAQCAtMzMsMTggKzMyLDE5IEBACiBrbWVtX3pvbmVfdAkqeGZzX2VmaV96b25lOwoga21lbV96b25lX3QJKnhmc19lZmRfem9uZTsKIAotU1RBVElDIHZvaWQJeGZzX2VmaV9pdGVtX3VubG9jayh4ZnNfZWZpX2xvZ19pdGVtX3QgKik7CitzdGF0aWMgaW5saW5lIHN0cnVjdCB4ZnNfZWZpX2xvZ19pdGVtICpFRklfSVRFTShzdHJ1Y3QgeGZzX2xvZ19pdGVtICpsaXApCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihsaXAsIHN0cnVjdCB4ZnNfZWZpX2xvZ19pdGVtLCBlZmlfaXRlbSk7Cit9CiAKIHZvaWQKLXhmc19lZmlfaXRlbV9mcmVlKHhmc19lZmlfbG9nX2l0ZW1fdCAqZWZpcCkKK3hmc19lZmlfaXRlbV9mcmVlKAorCXN0cnVjdCB4ZnNfZWZpX2xvZ19pdGVtCSplZmlwKQogewotCWludCBuZXh0cyA9IGVmaXAtPmVmaV9mb3JtYXQuZWZpX25leHRlbnRzOwotCi0JaWYgKG5leHRzID4gWEZTX0VGSV9NQVhfRkFTVF9FWFRFTlRTKSB7CisJaWYgKGVmaXAtPmVmaV9mb3JtYXQuZWZpX25leHRlbnRzID4gWEZTX0VGSV9NQVhfRkFTVF9FWFRFTlRTKQogCQlrbWVtX2ZyZWUoZWZpcCk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCWttZW1fem9uZV9mcmVlKHhmc19lZmlfem9uZSwgZWZpcCk7Ci0JfQogfQogCiAvKgpAQCAtNTIsOSArNTIsOSBAQAogICogV2Ugb25seSBuZWVkIDEgaW92ZWMgZm9yIGFuIGVmaSBpdGVtLiAgSXQganVzdCBsb2dzIHRoZSBlZmlfbG9nX2Zvcm1hdAogICogc3RydWN0dXJlLgogICovCi0vKkFSR1NVU0VEKi8KIFNUQVRJQyB1aW50Ci14ZnNfZWZpX2l0ZW1fc2l6ZSh4ZnNfZWZpX2xvZ19pdGVtX3QgKmVmaXApCit4ZnNfZWZpX2l0ZW1fc2l6ZSgKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXApCiB7CiAJcmV0dXJuIDE7CiB9CkBAIC02NywxMCArNjcsMTIgQEAKICAqIHNsb3RzIGluIHRoZSBlZmkgaXRlbSBoYXZlIGJlZW4gZmlsbGVkLgogICovCiBTVEFUSUMgdm9pZAoteGZzX2VmaV9pdGVtX2Zvcm1hdCh4ZnNfZWZpX2xvZ19pdGVtX3QJKmVmaXAsCi0JCSAgICB4ZnNfbG9nX2lvdmVjX3QJKmxvZ192ZWN0b3IpCit4ZnNfZWZpX2l0ZW1fZm9ybWF0KAorCXN0cnVjdCB4ZnNfbG9nX2l0ZW0JKmxpcCwKKwlzdHJ1Y3QgeGZzX2xvZ19pb3ZlYwkqbG9nX3ZlY3RvcikKIHsKLQl1aW50CXNpemU7CisJc3RydWN0IHhmc19lZmlfbG9nX2l0ZW0JKmVmaXAgPSBFRklfSVRFTShsaXApOworCXVpbnQJCQlzaXplOwogCiAJQVNTRVJUKGVmaXAtPmVmaV9uZXh0X2V4dGVudCA9PSBlZmlwLT5lZmlfZm9ybWF0LmVmaV9uZXh0ZW50cyk7CiAKQEAgLTgwLDcgKzgyLDcgQEAKIAlzaXplICs9IChlZmlwLT5lZmlfZm9ybWF0LmVmaV9uZXh0ZW50cyAtIDEpICogc2l6ZW9mKHhmc19leHRlbnRfdCk7CiAJZWZpcC0+ZWZpX2Zvcm1hdC5lZmlfc2l6ZSA9IDE7CiAKLQlsb2dfdmVjdG9yLT5pX2FkZHIgPSAoeGZzX2NhZGRyX3QpJihlZmlwLT5lZmlfZm9ybWF0KTsKKwlsb2dfdmVjdG9yLT5pX2FkZHIgPSAmZWZpcC0+ZWZpX2Zvcm1hdDsKIAlsb2dfdmVjdG9yLT5pX2xlbiA9IHNpemU7CiAJbG9nX3ZlY3Rvci0+aV90eXBlID0gWExPR19SRUdfVFlQRV9FRklfRk9STUFUOwogCUFTU0VSVChzaXplID49IHNpemVvZih4ZnNfZWZpX2xvZ19mb3JtYXRfdCkpOwpAQCAtOTAsNjAgKzkyLDMzIEBACiAvKgogICogUGlubmluZyBoYXMgbm8gbWVhbmluZyBmb3IgYW4gZWZpIGl0ZW0sIHNvIGp1c3QgcmV0dXJuLgogICovCi0vKkFSR1NVU0VEKi8KIFNUQVRJQyB2b2lkCi14ZnNfZWZpX2l0ZW1fcGluKHhmc19lZmlfbG9nX2l0ZW1fdCAqZWZpcCkKK3hmc19lZmlfaXRlbV9waW4oCisJc3RydWN0IHhmc19sb2dfaXRlbQkqbGlwKQogewotCXJldHVybjsKIH0KIAotCiAvKgogICogV2hpbGUgRUZJcyBjYW5ub3QgcmVhbGx5IGJlIHBpbm5lZCwgdGhlIHVucGluIG9wZXJhdGlvbiBpcyB0aGUKICAqIGxhc3QgcGxhY2UgYXQgd2hpY2ggdGhlIEVGSSBpcyBtYW5pcHVsYXRlZCBkdXJpbmcgYSB0cmFuc2FjdGlvbi4KICAqIEhlcmUgd2UgY29vcmRpbmF0ZSB3aXRoIHhmc19lZmlfY2FuY2VsKCkgdG8gZGV0ZXJtaW5lIHdobyBnZXRzIHRvCiAgKiBmcmVlIHRoZSBFRkkuCiAgKi8KLS8qQVJHU1VTRUQqLwogU1RBVElDIHZvaWQKLXhmc19lZmlfaXRlbV91bnBpbih4ZnNfZWZpX2xvZ19pdGVtX3QgKmVmaXApCit4ZnNfZWZpX2l0ZW1fdW5waW4oCisJc3RydWN0IHhmc19sb2dfaXRlbQkqbGlwLAorCWludAkJCXJlbW92ZSkKIHsKLQlzdHJ1Y3QgeGZzX2FpbAkJKmFpbHAgPSBlZmlwLT5lZmlfaXRlbS5saV9haWxwOworCXN0cnVjdCB4ZnNfZWZpX2xvZ19pdGVtCSplZmlwID0gRUZJX0lURU0obGlwKTsKKwlzdHJ1Y3QgeGZzX2FpbAkJKmFpbHAgPSBsaXAtPmxpX2FpbHA7CiAKIAlzcGluX2xvY2soJmFpbHAtPnhhX2xvY2spOwogCWlmIChlZmlwLT5lZmlfZmxhZ3MgJiBYRlNfRUZJX0NBTkNFTEVEKSB7Ci0JCS8qIHhmc190cmFuc19haWxfZGVsZXRlKCkgZHJvcHMgdGhlIEFJTCBsb2NrLiAqLwotCQl4ZnNfdHJhbnNfYWlsX2RlbGV0ZShhaWxwLCAoeGZzX2xvZ19pdGVtX3QgKillZmlwKTsKLQkJeGZzX2VmaV9pdGVtX2ZyZWUoZWZpcCk7Ci0JfSBlbHNlIHsKLQkJZWZpcC0+ZWZpX2ZsYWdzIHw9IFhGU19FRklfQ09NTUlUVEVEOwotCQlzcGluX3VubG9jaygmYWlscC0+eGFfbG9jayk7Ci0JfQotfQotCi0vKgotICogbGlrZSB1bnBpbiBvbmx5IHdlIGhhdmUgdG8gYWxzbyBjbGVhciB0aGUgeGFjdGlvbiBkZXNjcmlwdG9yCi0gKiBwb2ludGluZyB0aGUgbG9nIGl0ZW0gaWYgd2UgZnJlZSB0aGUgaXRlbS4gIFRoaXMgcm91dGluZSBkdXBsaWNhdGVzCi0gKiB1bnBpbiBiZWNhdXNlIGVmaV9mbGFncyBpcyBwcm90ZWN0ZWQgYnkgdGhlIEFJTCBsb2NrLiAgRnJlZWluZwotICogdGhlIGRlc2NyaXB0b3IgYW5kIHRoZW4gY2FsbGluZyB1bnBpbiB3b3VsZCBmb3JjZSB1cyB0byBkcm9wIHRoZSBBSUwKLSAqIGxvY2sgd2hpY2ggd291bGQgb3BlbiB1cCBhIHJhY2UgY29uZGl0aW9uLgotICovCi1TVEFUSUMgdm9pZAoteGZzX2VmaV9pdGVtX3VucGluX3JlbW92ZSh4ZnNfZWZpX2xvZ19pdGVtX3QgKmVmaXAsIHhmc190cmFuc190ICp0cCkKLXsKLQlzdHJ1Y3QgeGZzX2FpbAkJKmFpbHAgPSBlZmlwLT5lZmlfaXRlbS5saV9haWxwOwotCXhmc19sb2dfaXRlbV9kZXNjX3QJKmxpZHA7Ci0KLQlzcGluX2xvY2soJmFpbHAtPnhhX2xvY2spOwotCWlmIChlZmlwLT5lZmlfZmxhZ3MgJiBYRlNfRUZJX0NBTkNFTEVEKSB7Ci0JCS8qCi0JCSAqIGZyZWUgdGhlIHhhY3Rpb24gZGVzY3JpcHRvciBwb2ludGluZyB0byB0aGlzIGl0ZW0KLQkJICovCi0JCWxpZHAgPSB4ZnNfdHJhbnNfZmluZF9pdGVtKHRwLCAoeGZzX2xvZ19pdGVtX3QgKikgZWZpcCk7Ci0JCXhmc190cmFuc19mcmVlX2l0ZW0odHAsIGxpZHApOworCQlpZiAocmVtb3ZlKQorCQkJeGZzX3RyYW5zX2RlbF9pdGVtKGxpcCk7CiAKIAkJLyogeGZzX3RyYW5zX2FpbF9kZWxldGUoKSBkcm9wcyB0aGUgQUlMIGxvY2suICovCi0JCXhmc190cmFuc19haWxfZGVsZXRlKGFpbHAsICh4ZnNfbG9nX2l0ZW1fdCAqKWVmaXApOworCQl4ZnNfdHJhbnNfYWlsX2RlbGV0ZShhaWxwLCBsaXApOwogCQl4ZnNfZWZpX2l0ZW1fZnJlZShlZmlwKTsKIAl9IGVsc2UgewogCQllZmlwLT5lZmlfZmxhZ3MgfD0gWEZTX0VGSV9DT01NSVRURUQ7CkBAIC0xNTgsOSArMTMzLDkgQEAKICAqIFhGU19JVEVNX1BJTk5FRCBzbyB0aGF0IHRoZSBjYWxsZXIgd2lsbCBldmVudHVhbGx5IGZsdXNoIHRoZSBsb2cuCiAgKiBUaGlzIHNob3VsZCBoZWxwIGluIGdldHRpbmcgdGhlIEVGSSBvdXQgb2YgdGhlIEFJTC4KICAqLwotLypBUkdTVVNFRCovCiBTVEFUSUMgdWludAoteGZzX2VmaV9pdGVtX3RyeWxvY2soeGZzX2VmaV9sb2dfaXRlbV90ICplZmlwKQoreGZzX2VmaV9pdGVtX3RyeWxvY2soCisJc3RydWN0IHhmc19sb2dfaXRlbQkqbGlwKQogewogCXJldHVybiBYRlNfSVRFTV9QSU5ORUQ7CiB9CkBAIC0xNjgsMTMgKzE0MywxMiBAQAogLyoKICAqIEVmaSBpdGVtcyBoYXZlIG5vIGxvY2tpbmcsIHNvIGp1c3QgcmV0dXJuLgogICovCi0vKkFSR1NVU0VEKi8KIFNUQVRJQyB2b2lkCi14ZnNfZWZpX2l0ZW1fdW5sb2NrKHhmc19lZmlfbG9nX2l0ZW1fdCAqZWZpcCkKK3hmc19lZmlfaXRlbV91bmxvY2soCisJc3RydWN0IHhmc19sb2dfaXRlbQkqbGlwKQogewotCWlmIChlZmlwLT5lZmlfaXRlbS5saV9mbGFncyAmIFhGU19MSV9BQk9SVEVEKQotCQl4ZnNfZWZpX2l0ZW1fZnJlZShlZmlwKTsKLQlyZXR1cm47CisJaWYgKGxpcC0+bGlfZmxhZ3MgJiBYRlNfTElfQUJPUlRFRCkKKwkJeGZzX2VmaV9pdGVtX2ZyZWUoRUZJX0lURU0obGlwKSk7CiB9CiAKIC8qCkBAIC0xODMsOSArMTU3LDEwIEBACiAgKiBmbGFnIGlzIG5vdCBwYWlkIGFueSBhdHRlbnRpb24gaGVyZS4gIENoZWNraW5nIGZvciB0aGF0IGlzIGRlbGF5ZWQKICAqIHVudGlsIHRoZSBFRkkgaXMgdW5waW5uZWQuCiAgKi8KLS8qQVJHU1VTRUQqLwogU1RBVElDIHhmc19sc25fdAoteGZzX2VmaV9pdGVtX2NvbW1pdHRlZCh4ZnNfZWZpX2xvZ19pdGVtX3QgKmVmaXAsIHhmc19sc25fdCBsc24pCit4ZnNfZWZpX2l0ZW1fY29tbWl0dGVkKAorCXN0cnVjdCB4ZnNfbG9nX2l0ZW0JKmxpcCwKKwl4ZnNfbHNuX3QJCWxzbikKIHsKIAlyZXR1cm4gbHNuOwogfQpAQCAtMTk1LDExICsxNzAsMTAgQEAKICAqIHN0dWNrIHdhaXRpbmcgZm9yIGFsbCBvZiBpdHMgY29ycmVzcG9uZGluZyBlZmQgaXRlbXMgdG8gYmUKICAqIGNvbW1pdHRlZCB0byBkaXNrLgogICovCi0vKkFSR1NVU0VEKi8KIFNUQVRJQyB2b2lkCi14ZnNfZWZpX2l0ZW1fcHVzaCh4ZnNfZWZpX2xvZ19pdGVtX3QgKmVmaXApCit4ZnNfZWZpX2l0ZW1fcHVzaCgKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXApCiB7Ci0JcmV0dXJuOwogfQogCiAvKgpAQCAtMjA5LDYxICsxODMsNTUgQEAKICAqIGV4YW1wbGUsIGZvciBpbm9kZXMsIHRoZSBpbm9kZSBpcyBsb2NrZWQgdGhyb3VnaG91dCB0aGUgZXh0ZW50IGZyZWVpbmcKICAqIHNvIHRoZSBkZXBlbmRlbmN5IHNob3VsZCBiZSByZWNvcmRlZCB0aGVyZS4KICAqLwotLypBUkdTVVNFRCovCiBTVEFUSUMgdm9pZAoteGZzX2VmaV9pdGVtX2NvbW1pdHRpbmcoeGZzX2VmaV9sb2dfaXRlbV90ICplZmlwLCB4ZnNfbHNuX3QgbHNuKQoreGZzX2VmaV9pdGVtX2NvbW1pdHRpbmcoCisJc3RydWN0IHhmc19sb2dfaXRlbQkqbGlwLAorCXhmc19sc25fdAkJbHNuKQogewotCXJldHVybjsKIH0KIAogLyoKICAqIFRoaXMgaXMgdGhlIG9wcyB2ZWN0b3Igc2hhcmVkIGJ5IGFsbCBlZmkgbG9nIGl0ZW1zLgogICovCiBzdGF0aWMgc3RydWN0IHhmc19pdGVtX29wcyB4ZnNfZWZpX2l0ZW1fb3BzID0gewotCS5pb3Bfc2l6ZQk9ICh1aW50KCopKHhmc19sb2dfaXRlbV90KikpeGZzX2VmaV9pdGVtX3NpemUsCi0JLmlvcF9mb3JtYXQJPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCosIHhmc19sb2dfaW92ZWNfdCopKQotCQkJCQl4ZnNfZWZpX2l0ZW1fZm9ybWF0LAotCS5pb3BfcGluCT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfZWZpX2l0ZW1fcGluLAotCS5pb3BfdW5waW4JPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCopKXhmc19lZmlfaXRlbV91bnBpbiwKLQkuaW9wX3VucGluX3JlbW92ZSA9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KiwgeGZzX3RyYW5zX3QgKikpCi0JCQkJCXhmc19lZmlfaXRlbV91bnBpbl9yZW1vdmUsCi0JLmlvcF90cnlsb2NrCT0gKHVpbnQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfZWZpX2l0ZW1fdHJ5bG9jaywKLQkuaW9wX3VubG9jawk9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KikpeGZzX2VmaV9pdGVtX3VubG9jaywKLQkuaW9wX2NvbW1pdHRlZAk9ICh4ZnNfbHNuX3QoKikoeGZzX2xvZ19pdGVtX3QqLCB4ZnNfbHNuX3QpKQotCQkJCQl4ZnNfZWZpX2l0ZW1fY29tbWl0dGVkLAotCS5pb3BfcHVzaAk9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KikpeGZzX2VmaV9pdGVtX3B1c2gsCi0JLmlvcF9wdXNoYnVmCT0gTlVMTCwKLQkuaW9wX2NvbW1pdHRpbmcgPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCosIHhmc19sc25fdCkpCi0JCQkJCXhmc19lZmlfaXRlbV9jb21taXR0aW5nCisJLmlvcF9zaXplCT0geGZzX2VmaV9pdGVtX3NpemUsCisJLmlvcF9mb3JtYXQJPSB4ZnNfZWZpX2l0ZW1fZm9ybWF0LAorCS5pb3BfcGluCT0geGZzX2VmaV9pdGVtX3BpbiwKKwkuaW9wX3VucGluCT0geGZzX2VmaV9pdGVtX3VucGluLAorCS5pb3BfdHJ5bG9jawk9IHhmc19lZmlfaXRlbV90cnlsb2NrLAorCS5pb3BfdW5sb2NrCT0geGZzX2VmaV9pdGVtX3VubG9jaywKKwkuaW9wX2NvbW1pdHRlZAk9IHhmc19lZmlfaXRlbV9jb21taXR0ZWQsCisJLmlvcF9wdXNoCT0geGZzX2VmaV9pdGVtX3B1c2gsCisJLmlvcF9jb21taXR0aW5nID0geGZzX2VmaV9pdGVtX2NvbW1pdHRpbmcKIH07CiAKIAogLyoKICAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGVmaSBpdGVtIHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBleHRlbnRzLgogICovCi14ZnNfZWZpX2xvZ19pdGVtX3QgKgoteGZzX2VmaV9pbml0KHhmc19tb3VudF90CSptcCwKLQkgICAgIHVpbnQJCW5leHRlbnRzKQorc3RydWN0IHhmc19lZmlfbG9nX2l0ZW0gKgoreGZzX2VmaV9pbml0KAorCXN0cnVjdCB4ZnNfbW91bnQJKm1wLAorCXVpbnQJCQluZXh0ZW50cykKIAogewotCXhmc19lZmlfbG9nX2l0ZW1fdAkqZWZpcDsKKwlzdHJ1Y3QgeGZzX2VmaV9sb2dfaXRlbQkqZWZpcDsKIAl1aW50CQkJc2l6ZTsKIAogCUFTU0VSVChuZXh0ZW50cyA+IDApOwogCWlmIChuZXh0ZW50cyA+IFhGU19FRklfTUFYX0ZBU1RfRVhURU5UUykgewogCQlzaXplID0gKHVpbnQpKHNpemVvZih4ZnNfZWZpX2xvZ19pdGVtX3QpICsKIAkJCSgobmV4dGVudHMgLSAxKSAqIHNpemVvZih4ZnNfZXh0ZW50X3QpKSk7Ci0JCWVmaXAgPSAoeGZzX2VmaV9sb2dfaXRlbV90KilrbWVtX3phbGxvYyhzaXplLCBLTV9TTEVFUCk7CisJCWVmaXAgPSBrbWVtX3phbGxvYyhzaXplLCBLTV9TTEVFUCk7CiAJfSBlbHNlIHsKLQkJZWZpcCA9ICh4ZnNfZWZpX2xvZ19pdGVtX3QqKWttZW1fem9uZV96YWxsb2MoeGZzX2VmaV96b25lLAotCQkJCQkJCSAgICAgS01fU0xFRVApOworCQllZmlwID0ga21lbV96b25lX3phbGxvYyh4ZnNfZWZpX3pvbmUsIEtNX1NMRUVQKTsKIAl9CiAKIAl4ZnNfbG9nX2l0ZW1faW5pdChtcCwgJmVmaXAtPmVmaV9pdGVtLCBYRlNfTElfRUZJLCAmeGZzX2VmaV9pdGVtX29wcyk7CiAJZWZpcC0+ZWZpX2Zvcm1hdC5lZmlfbmV4dGVudHMgPSBuZXh0ZW50czsKIAllZmlwLT5lZmlfZm9ybWF0LmVmaV9pZCA9IChfX3BzaW50X3QpKHZvaWQqKWVmaXA7CiAKLQlyZXR1cm4gKGVmaXApOworCXJldHVybiBlZmlwOwogfQogCiAvKgpAQCAtMjc2LDcgKzI0NCw3IEBACiBpbnQKIHhmc19lZmlfY29weV9mb3JtYXQoeGZzX2xvZ19pb3ZlY190ICpidWYsIHhmc19lZmlfbG9nX2Zvcm1hdF90ICpkc3RfZWZpX2ZtdCkKIHsKLQl4ZnNfZWZpX2xvZ19mb3JtYXRfdCAqc3JjX2VmaV9mbXQgPSAoeGZzX2VmaV9sb2dfZm9ybWF0X3QgKilidWYtPmlfYWRkcjsKKwl4ZnNfZWZpX2xvZ19mb3JtYXRfdCAqc3JjX2VmaV9mbXQgPSBidWYtPmlfYWRkcjsKIAl1aW50IGk7CiAJdWludCBsZW4gPSBzaXplb2YoeGZzX2VmaV9sb2dfZm9ybWF0X3QpICsgCiAJCShzcmNfZWZpX2ZtdC0+ZWZpX25leHRlbnRzIC0gMSkgKiBzaXplb2YoeGZzX2V4dGVudF90KTsgIApAQCAtMjg5LDggKzI1Nyw3IEBACiAJCW1lbWNweSgoY2hhciAqKWRzdF9lZmlfZm10LCAoY2hhciopc3JjX2VmaV9mbXQsIGxlbik7CiAJCXJldHVybiAwOwogCX0gZWxzZSBpZiAoYnVmLT5pX2xlbiA9PSBsZW4zMikgewotCQl4ZnNfZWZpX2xvZ19mb3JtYXRfMzJfdCAqc3JjX2VmaV9mbXRfMzIgPQotCQkJKHhmc19lZmlfbG9nX2Zvcm1hdF8zMl90ICopYnVmLT5pX2FkZHI7CisJCXhmc19lZmlfbG9nX2Zvcm1hdF8zMl90ICpzcmNfZWZpX2ZtdF8zMiA9IGJ1Zi0+aV9hZGRyOwogCiAJCWRzdF9lZmlfZm10LT5lZmlfdHlwZSAgICAgPSBzcmNfZWZpX2ZtdF8zMi0+ZWZpX3R5cGU7CiAJCWRzdF9lZmlfZm10LT5lZmlfc2l6ZSAgICAgPSBzcmNfZWZpX2ZtdF8zMi0+ZWZpX3NpemU7CkBAIC0zMDQsOCArMjcxLDcgQEAKIAkJfQogCQlyZXR1cm4gMDsKIAl9IGVsc2UgaWYgKGJ1Zi0+aV9sZW4gPT0gbGVuNjQpIHsKLQkJeGZzX2VmaV9sb2dfZm9ybWF0XzY0X3QgKnNyY19lZmlfZm10XzY0ID0KLQkJCSh4ZnNfZWZpX2xvZ19mb3JtYXRfNjRfdCAqKWJ1Zi0+aV9hZGRyOworCQl4ZnNfZWZpX2xvZ19mb3JtYXRfNjRfdCAqc3JjX2VmaV9mbXRfNjQgPSBidWYtPmlfYWRkcjsKIAogCQlkc3RfZWZpX2ZtdC0+ZWZpX3R5cGUgICAgID0gc3JjX2VmaV9mbXRfNjQtPmVmaV90eXBlOwogCQlkc3RfZWZpX2ZtdC0+ZWZpX3NpemUgICAgID0gc3JjX2VmaV9mbXRfNjQtPmVmaV9zaXplOwpAQCAtMzU2LDE2ICszMjIsMTggQEAKIAl9CiB9CiAKLVNUQVRJQyB2b2lkCi14ZnNfZWZkX2l0ZW1fZnJlZSh4ZnNfZWZkX2xvZ19pdGVtX3QgKmVmZHApCitzdGF0aWMgaW5saW5lIHN0cnVjdCB4ZnNfZWZkX2xvZ19pdGVtICpFRkRfSVRFTShzdHJ1Y3QgeGZzX2xvZ19pdGVtICpsaXApCiB7Ci0JaW50IG5leHRzID0gZWZkcC0+ZWZkX2Zvcm1hdC5lZmRfbmV4dGVudHM7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihsaXAsIHN0cnVjdCB4ZnNfZWZkX2xvZ19pdGVtLCBlZmRfaXRlbSk7Cit9CiAKLQlpZiAobmV4dHMgPiBYRlNfRUZEX01BWF9GQVNUX0VYVEVOVFMpIHsKK1NUQVRJQyB2b2lkCit4ZnNfZWZkX2l0ZW1fZnJlZShzdHJ1Y3QgeGZzX2VmZF9sb2dfaXRlbSAqZWZkcCkKK3sKKwlpZiAoZWZkcC0+ZWZkX2Zvcm1hdC5lZmRfbmV4dGVudHMgPiBYRlNfRUZEX01BWF9GQVNUX0VYVEVOVFMpCiAJCWttZW1fZnJlZShlZmRwKTsKLQl9IGVsc2UgeworCWVsc2UKIAkJa21lbV96b25lX2ZyZWUoeGZzX2VmZF96b25lLCBlZmRwKTsKLQl9CiB9CiAKIC8qCkBAIC0zNzMsOSArMzQxLDkgQEAKICAqIFdlIG9ubHkgbmVlZCAxIGlvdmVjIGZvciBhbiBlZmQgaXRlbS4gIEl0IGp1c3QgbG9ncyB0aGUgZWZkX2xvZ19mb3JtYXQKICAqIHN0cnVjdHVyZS4KICAqLwotLypBUkdTVVNFRCovCiBTVEFUSUMgdWludAoteGZzX2VmZF9pdGVtX3NpemUoeGZzX2VmZF9sb2dfaXRlbV90ICplZmRwKQoreGZzX2VmZF9pdGVtX3NpemUoCisJc3RydWN0IHhmc19sb2dfaXRlbQkqbGlwKQogewogCXJldHVybiAxOwogfQpAQCAtMzg4LDEwICszNTYsMTIgQEAKICAqIHNsb3RzIGluIHRoZSBlZmQgaXRlbSBoYXZlIGJlZW4gZmlsbGVkLgogICovCiBTVEFUSUMgdm9pZAoteGZzX2VmZF9pdGVtX2Zvcm1hdCh4ZnNfZWZkX2xvZ19pdGVtX3QJKmVmZHAsCi0JCSAgICB4ZnNfbG9nX2lvdmVjX3QJKmxvZ192ZWN0b3IpCit4ZnNfZWZkX2l0ZW1fZm9ybWF0KAorCXN0cnVjdCB4ZnNfbG9nX2l0ZW0JKmxpcCwKKwlzdHJ1Y3QgeGZzX2xvZ19pb3ZlYwkqbG9nX3ZlY3RvcikKIHsKLQl1aW50CXNpemU7CisJc3RydWN0IHhmc19lZmRfbG9nX2l0ZW0JKmVmZHAgPSBFRkRfSVRFTShsaXApOworCXVpbnQJCQlzaXplOwogCiAJQVNTRVJUKGVmZHAtPmVmZF9uZXh0X2V4dGVudCA9PSBlZmRwLT5lZmRfZm9ybWF0LmVmZF9uZXh0ZW50cyk7CiAKQEAgLTQwMSw0OCArMzcxLDM4IEBACiAJc2l6ZSArPSAoZWZkcC0+ZWZkX2Zvcm1hdC5lZmRfbmV4dGVudHMgLSAxKSAqIHNpemVvZih4ZnNfZXh0ZW50X3QpOwogCWVmZHAtPmVmZF9mb3JtYXQuZWZkX3NpemUgPSAxOwogCi0JbG9nX3ZlY3Rvci0+aV9hZGRyID0gKHhmc19jYWRkcl90KSYoZWZkcC0+ZWZkX2Zvcm1hdCk7CisJbG9nX3ZlY3Rvci0+aV9hZGRyID0gJmVmZHAtPmVmZF9mb3JtYXQ7CiAJbG9nX3ZlY3Rvci0+aV9sZW4gPSBzaXplOwogCWxvZ192ZWN0b3ItPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfRUZEX0ZPUk1BVDsKIAlBU1NFUlQoc2l6ZSA+PSBzaXplb2YoeGZzX2VmZF9sb2dfZm9ybWF0X3QpKTsKIH0KIAotCiAvKgogICogUGlubmluZyBoYXMgbm8gbWVhbmluZyBmb3IgYW4gZWZkIGl0ZW0sIHNvIGp1c3QgcmV0dXJuLgogICovCi0vKkFSR1NVU0VEKi8KIFNUQVRJQyB2b2lkCi14ZnNfZWZkX2l0ZW1fcGluKHhmc19lZmRfbG9nX2l0ZW1fdCAqZWZkcCkKK3hmc19lZmRfaXRlbV9waW4oCisJc3RydWN0IHhmc19sb2dfaXRlbQkqbGlwKQogewotCXJldHVybjsKIH0KIAotCiAvKgogICogU2luY2UgcGlubmluZyBoYXMgbm8gbWVhbmluZyBmb3IgYW4gZWZkIGl0ZW0sIHVucGlubmluZyBkb2VzCiAgKiBub3QgZWl0aGVyLgogICovCi0vKkFSR1NVU0VEKi8KIFNUQVRJQyB2b2lkCi14ZnNfZWZkX2l0ZW1fdW5waW4oeGZzX2VmZF9sb2dfaXRlbV90ICplZmRwKQoreGZzX2VmZF9pdGVtX3VucGluKAorCXN0cnVjdCB4ZnNfbG9nX2l0ZW0JKmxpcCwKKwlpbnQJCQlyZW1vdmUpCiB7Ci0JcmV0dXJuOwotfQotCi0vKkFSR1NVU0VEKi8KLVNUQVRJQyB2b2lkCi14ZnNfZWZkX2l0ZW1fdW5waW5fcmVtb3ZlKHhmc19lZmRfbG9nX2l0ZW1fdCAqZWZkcCwgeGZzX3RyYW5zX3QgKnRwKQotewotCXJldHVybjsKIH0KIAogLyoKICAqIEVmZCBpdGVtcyBoYXZlIG5vIGxvY2tpbmcsIHNvIGp1c3QgcmV0dXJuIHN1Y2Nlc3MuCiAgKi8KLS8qQVJHU1VTRUQqLwogU1RBVElDIHVpbnQKLXhmc19lZmRfaXRlbV90cnlsb2NrKHhmc19lZmRfbG9nX2l0ZW1fdCAqZWZkcCkKK3hmc19lZmRfaXRlbV90cnlsb2NrKAorCXN0cnVjdCB4ZnNfbG9nX2l0ZW0JKmxpcCkKIHsKIAlyZXR1cm4gWEZTX0lURU1fTE9DS0VEOwogfQpAQCAtNDUxLDEzICs0MTEsMTIgQEAKICAqIEVmZCBpdGVtcyBoYXZlIG5vIGxvY2tpbmcgb3IgcHVzaGluZywgc28gcmV0dXJuIGZhaWx1cmUKICAqIHNvIHRoYXQgdGhlIGNhbGxlciBkb2Vzbid0IGJvdGhlciB3aXRoIHVzLgogICovCi0vKkFSR1NVU0VEKi8KIFNUQVRJQyB2b2lkCi14ZnNfZWZkX2l0ZW1fdW5sb2NrKHhmc19lZmRfbG9nX2l0ZW1fdCAqZWZkcCkKK3hmc19lZmRfaXRlbV91bmxvY2soCisJc3RydWN0IHhmc19sb2dfaXRlbQkqbGlwKQogewotCWlmIChlZmRwLT5lZmRfaXRlbS5saV9mbGFncyAmIFhGU19MSV9BQk9SVEVEKQotCQl4ZnNfZWZkX2l0ZW1fZnJlZShlZmRwKTsKLQlyZXR1cm47CisJaWYgKGxpcC0+bGlfZmxhZ3MgJiBYRlNfTElfQUJPUlRFRCkKKwkJeGZzX2VmZF9pdGVtX2ZyZWUoRUZEX0lURU0obGlwKSk7CiB9CiAKIC8qCkBAIC00NjcsMTUgKzQyNiwxOCBAQAogICogcmV0dXJuIC0xIHRvIGtlZXAgdGhlIHRyYW5zYWN0aW9uIGNvZGUgZnJvbSBmdXJ0aGVyIHJlZmVyZW5jaW5nCiAgKiB0aGlzIGl0ZW0uCiAgKi8KLS8qQVJHU1VTRUQqLwogU1RBVElDIHhmc19sc25fdAoteGZzX2VmZF9pdGVtX2NvbW1pdHRlZCh4ZnNfZWZkX2xvZ19pdGVtX3QgKmVmZHAsIHhmc19sc25fdCBsc24pCit4ZnNfZWZkX2l0ZW1fY29tbWl0dGVkKAorCXN0cnVjdCB4ZnNfbG9nX2l0ZW0JKmxpcCwKKwl4ZnNfbHNuX3QJCWxzbikKIHsKKwlzdHJ1Y3QgeGZzX2VmZF9sb2dfaXRlbQkqZWZkcCA9IEVGRF9JVEVNKGxpcCk7CisKIAkvKgogCSAqIElmIHdlIGdvdCBhIGxvZyBJL08gZXJyb3IsIGl0J3MgYWx3YXlzIHRoZSBjYXNlIHRoYXQgdGhlIExSIHdpdGggdGhlCiAJICogRUZJIGdvdCB1bnBpbm5lZCBhbmQgZnJlZWQgYmVmb3JlIHRoZSBFRkQgZ290IGFib3J0ZWQuCiAJICovCi0JaWYgKChlZmRwLT5lZmRfaXRlbS5saV9mbGFncyAmIFhGU19MSV9BQk9SVEVEKSA9PSAwKQorCWlmICghKGxpcC0+bGlfZmxhZ3MgJiBYRlNfTElfQUJPUlRFRCkpCiAJCXhmc19lZmlfcmVsZWFzZShlZmRwLT5lZmRfZWZpcCwgZWZkcC0+ZWZkX2Zvcm1hdC5lZmRfbmV4dGVudHMpOwogCiAJeGZzX2VmZF9pdGVtX2ZyZWUoZWZkcCk7CkBAIC00ODYsMTEgKzQ0OCwxMCBAQAogICogVGhlcmUgaXNuJ3QgbXVjaCB5b3UgY2FuIGRvIHRvIHB1c2ggb24gYW4gZWZkIGl0ZW0uICBJdCBpcyBzaW1wbHkKICAqIHN0dWNrIHdhaXRpbmcgZm9yIHRoZSBsb2cgdG8gYmUgZmx1c2hlZCB0byBkaXNrLgogICovCi0vKkFSR1NVU0VEKi8KIFNUQVRJQyB2b2lkCi14ZnNfZWZkX2l0ZW1fcHVzaCh4ZnNfZWZkX2xvZ19pdGVtX3QgKmVmZHApCit4ZnNfZWZkX2l0ZW1fcHVzaCgKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXApCiB7Ci0JcmV0dXJuOwogfQogCiAvKgpAQCAtNTAwLDU1ICs0NjEsNDggQEAKICAqIGV4YW1wbGUsIGZvciBpbm9kZXMsIHRoZSBpbm9kZSBpcyBsb2NrZWQgdGhyb3VnaG91dCB0aGUgZXh0ZW50IGZyZWVpbmcKICAqIHNvIHRoZSBkZXBlbmRlbmN5IHNob3VsZCBiZSByZWNvcmRlZCB0aGVyZS4KICAqLwotLypBUkdTVVNFRCovCiBTVEFUSUMgdm9pZAoteGZzX2VmZF9pdGVtX2NvbW1pdHRpbmcoeGZzX2VmZF9sb2dfaXRlbV90ICplZmlwLCB4ZnNfbHNuX3QgbHNuKQoreGZzX2VmZF9pdGVtX2NvbW1pdHRpbmcoCisJc3RydWN0IHhmc19sb2dfaXRlbQkqbGlwLAorCXhmc19sc25fdAkJbHNuKQogewotCXJldHVybjsKIH0KIAogLyoKICAqIFRoaXMgaXMgdGhlIG9wcyB2ZWN0b3Igc2hhcmVkIGJ5IGFsbCBlZmQgbG9nIGl0ZW1zLgogICovCiBzdGF0aWMgc3RydWN0IHhmc19pdGVtX29wcyB4ZnNfZWZkX2l0ZW1fb3BzID0gewotCS5pb3Bfc2l6ZQk9ICh1aW50KCopKHhmc19sb2dfaXRlbV90KikpeGZzX2VmZF9pdGVtX3NpemUsCi0JLmlvcF9mb3JtYXQJPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCosIHhmc19sb2dfaW92ZWNfdCopKQotCQkJCQl4ZnNfZWZkX2l0ZW1fZm9ybWF0LAotCS5pb3BfcGluCT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfZWZkX2l0ZW1fcGluLAotCS5pb3BfdW5waW4JPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCopKXhmc19lZmRfaXRlbV91bnBpbiwKLQkuaW9wX3VucGluX3JlbW92ZSA9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KiwgeGZzX3RyYW5zX3QqKSkKLQkJCQkJeGZzX2VmZF9pdGVtX3VucGluX3JlbW92ZSwKLQkuaW9wX3RyeWxvY2sJPSAodWludCgqKSh4ZnNfbG9nX2l0ZW1fdCopKXhmc19lZmRfaXRlbV90cnlsb2NrLAotCS5pb3BfdW5sb2NrCT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfZWZkX2l0ZW1fdW5sb2NrLAotCS5pb3BfY29tbWl0dGVkCT0gKHhmc19sc25fdCgqKSh4ZnNfbG9nX2l0ZW1fdCosIHhmc19sc25fdCkpCi0JCQkJCXhmc19lZmRfaXRlbV9jb21taXR0ZWQsCi0JLmlvcF9wdXNoCT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfZWZkX2l0ZW1fcHVzaCwKLQkuaW9wX3B1c2hidWYJPSBOVUxMLAotCS5pb3BfY29tbWl0dGluZyA9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KiwgeGZzX2xzbl90KSkKLQkJCQkJeGZzX2VmZF9pdGVtX2NvbW1pdHRpbmcKKwkuaW9wX3NpemUJPSB4ZnNfZWZkX2l0ZW1fc2l6ZSwKKwkuaW9wX2Zvcm1hdAk9IHhmc19lZmRfaXRlbV9mb3JtYXQsCisJLmlvcF9waW4JPSB4ZnNfZWZkX2l0ZW1fcGluLAorCS5pb3BfdW5waW4JPSB4ZnNfZWZkX2l0ZW1fdW5waW4sCisJLmlvcF90cnlsb2NrCT0geGZzX2VmZF9pdGVtX3RyeWxvY2ssCisJLmlvcF91bmxvY2sJPSB4ZnNfZWZkX2l0ZW1fdW5sb2NrLAorCS5pb3BfY29tbWl0dGVkCT0geGZzX2VmZF9pdGVtX2NvbW1pdHRlZCwKKwkuaW9wX3B1c2gJPSB4ZnNfZWZkX2l0ZW1fcHVzaCwKKwkuaW9wX2NvbW1pdHRpbmcgPSB4ZnNfZWZkX2l0ZW1fY29tbWl0dGluZwogfTsKIAotCiAvKgogICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gZWZkIGl0ZW0gd2l0aCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGV4dGVudHMuCiAgKi8KLXhmc19lZmRfbG9nX2l0ZW1fdCAqCi14ZnNfZWZkX2luaXQoeGZzX21vdW50X3QJKm1wLAotCSAgICAgeGZzX2VmaV9sb2dfaXRlbV90CSplZmlwLAotCSAgICAgdWludAkJbmV4dGVudHMpCitzdHJ1Y3QgeGZzX2VmZF9sb2dfaXRlbSAqCit4ZnNfZWZkX2luaXQoCisJc3RydWN0IHhmc19tb3VudAkqbXAsCisJc3RydWN0IHhmc19lZmlfbG9nX2l0ZW0JKmVmaXAsCisJdWludAkJCW5leHRlbnRzKQogCiB7Ci0JeGZzX2VmZF9sb2dfaXRlbV90CSplZmRwOworCXN0cnVjdCB4ZnNfZWZkX2xvZ19pdGVtCSplZmRwOwogCXVpbnQJCQlzaXplOwogCiAJQVNTRVJUKG5leHRlbnRzID4gMCk7CiAJaWYgKG5leHRlbnRzID4gWEZTX0VGRF9NQVhfRkFTVF9FWFRFTlRTKSB7CiAJCXNpemUgPSAodWludCkoc2l6ZW9mKHhmc19lZmRfbG9nX2l0ZW1fdCkgKwogCQkJKChuZXh0ZW50cyAtIDEpICogc2l6ZW9mKHhmc19leHRlbnRfdCkpKTsKLQkJZWZkcCA9ICh4ZnNfZWZkX2xvZ19pdGVtX3QqKWttZW1femFsbG9jKHNpemUsIEtNX1NMRUVQKTsKKwkJZWZkcCA9IGttZW1femFsbG9jKHNpemUsIEtNX1NMRUVQKTsKIAl9IGVsc2UgewotCQllZmRwID0gKHhmc19lZmRfbG9nX2l0ZW1fdCopa21lbV96b25lX3phbGxvYyh4ZnNfZWZkX3pvbmUsCi0JCQkJCQkJICAgICBLTV9TTEVFUCk7CisJCWVmZHAgPSBrbWVtX3pvbmVfemFsbG9jKHhmc19lZmRfem9uZSwgS01fU0xFRVApOwogCX0KIAogCXhmc19sb2dfaXRlbV9pbml0KG1wLCAmZWZkcC0+ZWZkX2l0ZW0sIFhGU19MSV9FRkQsICZ4ZnNfZWZkX2l0ZW1fb3BzKTsKQEAgLTU1Niw1ICs1MTAsNSBAQAogCWVmZHAtPmVmZF9mb3JtYXQuZWZkX25leHRlbnRzID0gbmV4dGVudHM7CiAJZWZkcC0+ZWZkX2Zvcm1hdC5lZmRfZWZpX2lkID0gZWZpcC0+ZWZpX2Zvcm1hdC5lZmlfaWQ7CiAKLQlyZXR1cm4gKGVmZHApOworCXJldHVybiBlZmRwOwogfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19maWxlc3RyZWFtLmMgYi9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uYwppbmRleCAzOTA4NTBlLi45YjcxNWRjIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uYworKysgYi9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uYwpAQCAtMTgsMTMgKzE4LDkgQEAKICNpbmNsdWRlICJ4ZnMuaCIKICNpbmNsdWRlICJ4ZnNfYm1hcF9idHJlZS5oIgogI2luY2x1ZGUgInhmc19pbnVtLmgiCi0jaW5jbHVkZSAieGZzX2RpcjIuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMl9zZi5oIgotI2luY2x1ZGUgInhmc19hdHRyX3NmLmgiCiAjaW5jbHVkZSAieGZzX2Rpbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZS5oIgogI2luY2x1ZGUgInhmc19hZy5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19sb2cuaCIKICNpbmNsdWRlICJ4ZnNfdHJhbnMuaCIKICNpbmNsdWRlICJ4ZnNfc2IuaCIKQEAgLTEyNyw2ICsxMjMsODIgQEAKIAl4ZnNfaW5vZGVfdAkqcGlwOwkvKiBQYXJlbnQgZGlyZWN0b3J5IGlub2RlIHBvaW50ZXIuICovCiB9IGZzdHJtX2l0ZW1fdDsKIAorLyoKKyAqIEFsbG9jYXRpb24gZ3JvdXAgZmlsZXN0cmVhbSBhc3NvY2lhdGlvbnMgYXJlIHRyYWNrZWQgd2l0aCBwZXItYWcgYXRvbWljCisgKiBjb3VudGVycy4gIFRoZXNlIGNvdW50ZXJzIGFsbG93IF94ZnNfZmlsZXN0cmVhbV9waWNrX2FnKCkgdG8gdGVsbCB3aGV0aGVyIGEKKyAqIHBhcnRpY3VsYXIgQUcgYWxyZWFkeSBoYXMgYWN0aXZlIGZpbGVzdHJlYW1zIGFzc29jaWF0ZWQgd2l0aCBpdC4gVGhlIG1vdW50CisgKiBwb2ludCdzIG1fcGVyYWdsb2NrIGlzIHVzZWQgdG8gcHJvdGVjdCB0aGVzZSBjb3VudGVycyBmcm9tIHBlci1hZyBhcnJheQorICogcmUtYWxsb2NhdGlvbiBkdXJpbmcgYSBncm93ZnMgb3BlcmF0aW9uLiAgV2hlbiB4ZnNfZ3Jvd2ZzX2RhdGFfcHJpdmF0ZSgpIGlzCisgKiBhYm91dCB0byByZWFsbG9jYXRlIHRoZSBhcnJheSwgaXQgY2FsbHMgeGZzX2ZpbGVzdHJlYW1fZmx1c2goKSB3aXRoIHRoZQorICogbV9wZXJhZ2xvY2sgaGVsZCBpbiB3cml0ZSBtb2RlLgorICoKKyAqIFNpbmNlIHhmc19tcnVfY2FjaGVfZmx1c2goKSBndWFyYW50ZWVzIHRoYXQgYWxsIHRoZSBmcmVlIGZ1bmN0aW9ucyBmb3IgYWxsCisgKiB0aGUgY2FjaGUgZWxlbWVudHMgaGF2ZSBmaW5pc2hlZCBleGVjdXRpbmcgYmVmb3JlIGl0IHJldHVybnMsIGl0J3Mgc2FmZSBmb3IKKyAqIHRoZSBmcmVlIGZ1bmN0aW9ucyB0byB1c2UgdGhlIGF0b21pYyBjb3VudGVycyB3aXRob3V0IG1fcGVyYWdsb2NrIHByb3RlY3Rpb24uCisgKiBUaGlzIGFsbG93cyB0aGUgaW1wbGVtZW50YXRpb24gb2YgeGZzX2ZzdHJtX2ZyZWVfZnVuYygpIHRvIGJlIGFnbm9zdGljIGFib3V0CisgKiB3aGV0aGVyIGl0IHdhcyBjYWxsZWQgd2l0aCB0aGUgbV9wZXJhZ2xvY2sgaGVsZCBpbiByZWFkIG1vZGUsIHdyaXRlIG1vZGUgb3IKKyAqIG5vdCBoZWxkIGF0IGFsbC4gIFRoZSByYWNlIGNvbmRpdGlvbiB0aGlzIGFkZHJlc3NlcyBpcyB0aGUgZm9sbG93aW5nOgorICoKKyAqICAtIFRoZSB3b3JrIHF1ZXVlIHNjaGVkdWxlciBmaXJlcyBhbmQgcHVsbHMgYSBmaWxlc3RyZWFtIGRpcmVjdG9yeSBjYWNoZQorICogICAgZWxlbWVudCBvZmYgdGhlIExSVSBlbmQgb2YgdGhlIGNhY2hlIGZvciBkZWxldGlvbiwgdGhlbiBnZXRzIHByZS1lbXB0ZWQuCisgKiAgLSBBIGdyb3dmcyBvcGVyYXRpb24gZ3JhYnMgdGhlIG1fcGVyYWdsb2NrIGluIHdyaXRlIG1vZGUsIGZsdXNoZXMgYWxsIHRoZQorICogICAgcmVtYWluaW5nIGl0ZW1zIGZyb20gdGhlIGNhY2hlIGFuZCByZWFsbG9jYXRlcyB0aGUgbW91bnQgcG9pbnQncyBwZXItYWcKKyAqICAgIGFycmF5LCByZXNldHRpbmcgYWxsIHRoZSBjb3VudGVycyB0byB6ZXJvLgorICogIC0gVGhlIHdvcmsgcXVldWUgdGhyZWFkIHJlc3VtZXMgYW5kIGNhbGxzIHRoZSBmcmVlIGZ1bmN0aW9uIGZvciB0aGUgZWxlbWVudAorICogICAgaXQgc3RhcnRlZCBjbGVhbmluZyB1cCBlYXJsaWVyLiAgSW4gdGhlIHByb2Nlc3MgaXQgZGVjcmVtZW50cyB0aGUKKyAqICAgIGZpbGVzdHJlYW1zIGNvdW50ZXIgZm9yIGFuIEFHIHRoYXQgbm93IGhhcyBubyByZWZlcmVuY2VzLgorICoKKyAqIFdpdGggYSBzaHJpbmtmcyBmZWF0dXJlLCB0aGUgYWJvdmUgc2NlbmFyaW8gY291bGQgcGFuaWMgdGhlIHN5c3RlbS4KKyAqCisgKiBBbGwgb3RoZXIgdXNlcyBvZiB0aGUgZm9sbG93aW5nIG1hY3JvcyBzaG91bGQgYmUgcHJvdGVjdGVkIGJ5IGVpdGhlciB0aGUKKyAqIG1fcGVyYWdsb2NrIGhlbGQgaW4gcmVhZCBtb2RlLCBvciB0aGUgY2FjaGUncyBpbnRlcm5hbCBsb2NraW5nIGV4cG9zZWQgYnkgdGhlCisgKiBpbnRlcnZhbCBiZXR3ZWVuIGEgY2FsbCB0byB4ZnNfbXJ1X2NhY2hlX2xvb2t1cCgpIGFuZCBhIGNhbGwgdG8KKyAqIHhmc19tcnVfY2FjaGVfZG9uZSgpLiAgSW4gYWRkaXRpb24sIHRoZSBtX3BlcmFnbG9jayBtdXN0IGJlIGhlbGQgaW4gcmVhZCBtb2RlCisgKiB3aGVuIG5ldyBlbGVtZW50cyBhcmUgYWRkZWQgdG8gdGhlIGNhY2hlLgorICoKKyAqIENvbWJpbmVkLCB0aGVzZSBsb2NraW5nIHJ1bGVzIGVuc3VyZSB0aGF0IG5vIGFzc29jaWF0aW9ucyB3aWxsIGV2ZXIgZXhpc3QgaW4KKyAqIHRoZSBjYWNoZSB0aGF0IHJlZmVyZW5jZSBwZXItYWcgYXJyYXkgZWxlbWVudHMgdGhhdCBoYXZlIHNpbmNlIGJlZW4KKyAqIHJlYWxsb2NhdGVkLgorICovCitzdGF0aWMgaW50Cit4ZnNfZmlsZXN0cmVhbV9wZWVrX2FnKAorCXhmc19tb3VudF90CSptcCwKKwl4ZnNfYWdudW1iZXJfdAlhZ25vKQoreworCXN0cnVjdCB4ZnNfcGVyYWcgKnBhZzsKKwlpbnQJCXJldDsKKworCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnbm8pOworCXJldCA9IGF0b21pY19yZWFkKCZwYWctPnBhZ2ZfZnN0cm1zKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAoreGZzX2ZpbGVzdHJlYW1fZ2V0X2FnKAorCXhmc19tb3VudF90CSptcCwKKwl4ZnNfYWdudW1iZXJfdAlhZ25vKQoreworCXN0cnVjdCB4ZnNfcGVyYWcgKnBhZzsKKwlpbnQJCXJldDsKKworCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnbm8pOworCXJldCA9IGF0b21pY19pbmNfcmV0dXJuKCZwYWctPnBhZ2ZfZnN0cm1zKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK3hmc19maWxlc3RyZWFtX3B1dF9hZygKKwl4ZnNfbW91bnRfdAkqbXAsCisJeGZzX2FnbnVtYmVyX3QJYWdubykKK3sKKwlzdHJ1Y3QgeGZzX3BlcmFnICpwYWc7CisKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZ25vKTsKKwlhdG9taWNfZGVjKCZwYWctPnBhZ2ZfZnN0cm1zKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7Cit9CiAKIC8qCiAgKiBTY2FuIHRoZSBBR3Mgc3RhcnRpbmcgYXQgc3RhcnRhZyBsb29raW5nIGZvciBhbiBBRyB0aGF0IGlzbid0IGluIHVzZSBhbmQgaGFzCkBAIC0zNTUsMTYgKzQyNywxNCBAQAogewogCWZzdHJtX2l0ZW1fdAkqaXRlbSAgPSAoZnN0cm1faXRlbV90ICopZGF0YTsKIAl4ZnNfaW5vZGVfdAkqaXAgPSBpdGVtLT5pcDsKLQlpbnQgcmVmOwogCiAJQVNTRVJUKGlwLT5pX2lubyA9PSBpbm8pOwogCiAJeGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX0lGSUxFU1RSRUFNKTsKIAogCS8qIERyb3AgdGhlIHJlZmVyZW5jZSB0YWtlbiBvbiB0aGUgQUcgd2hlbiB0aGUgaXRlbSB3YXMgYWRkZWQuICovCi0JcmVmID0geGZzX2ZpbGVzdHJlYW1fcHV0X2FnKGlwLT5pX21vdW50LCBpdGVtLT5hZyk7CisJeGZzX2ZpbGVzdHJlYW1fcHV0X2FnKGlwLT5pX21vdW50LCBpdGVtLT5hZyk7CiAKLQlBU1NFUlQocmVmID49IDApOwogCVRSQUNFX0ZSRUUoaXAtPmlfbW91bnQsIGlwLCBpdGVtLT5waXAsIGl0ZW0tPmFnLAogCQl4ZnNfZmlsZXN0cmVhbV9wZWVrX2FnKGlwLT5pX21vdW50LCBpdGVtLT5hZykpOwogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uaCBiL2ZzL3hmcy94ZnNfZmlsZXN0cmVhbS5oCmluZGV4IDI2MGY3NTcuLjA5ZGQ5YWYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZmlsZXN0cmVhbS5oCisrKyBiL2ZzL3hmcy94ZnNfZmlsZXN0cmVhbS5oCkBAIC00Miw4OCArNDIsNiBAQAogCiAjZW5kaWYKIAotLyoKLSAqIEFsbG9jYXRpb24gZ3JvdXAgZmlsZXN0cmVhbSBhc3NvY2lhdGlvbnMgYXJlIHRyYWNrZWQgd2l0aCBwZXItYWcgYXRvbWljCi0gKiBjb3VudGVycy4gIFRoZXNlIGNvdW50ZXJzIGFsbG93IF94ZnNfZmlsZXN0cmVhbV9waWNrX2FnKCkgdG8gdGVsbCB3aGV0aGVyIGEKLSAqIHBhcnRpY3VsYXIgQUcgYWxyZWFkeSBoYXMgYWN0aXZlIGZpbGVzdHJlYW1zIGFzc29jaWF0ZWQgd2l0aCBpdC4gVGhlIG1vdW50Ci0gKiBwb2ludCdzIG1fcGVyYWdsb2NrIGlzIHVzZWQgdG8gcHJvdGVjdCB0aGVzZSBjb3VudGVycyBmcm9tIHBlci1hZyBhcnJheQotICogcmUtYWxsb2NhdGlvbiBkdXJpbmcgYSBncm93ZnMgb3BlcmF0aW9uLiAgV2hlbiB4ZnNfZ3Jvd2ZzX2RhdGFfcHJpdmF0ZSgpIGlzCi0gKiBhYm91dCB0byByZWFsbG9jYXRlIHRoZSBhcnJheSwgaXQgY2FsbHMgeGZzX2ZpbGVzdHJlYW1fZmx1c2goKSB3aXRoIHRoZQotICogbV9wZXJhZ2xvY2sgaGVsZCBpbiB3cml0ZSBtb2RlLgotICoKLSAqIFNpbmNlIHhmc19tcnVfY2FjaGVfZmx1c2goKSBndWFyYW50ZWVzIHRoYXQgYWxsIHRoZSBmcmVlIGZ1bmN0aW9ucyBmb3IgYWxsCi0gKiB0aGUgY2FjaGUgZWxlbWVudHMgaGF2ZSBmaW5pc2hlZCBleGVjdXRpbmcgYmVmb3JlIGl0IHJldHVybnMsIGl0J3Mgc2FmZSBmb3IKLSAqIHRoZSBmcmVlIGZ1bmN0aW9ucyB0byB1c2UgdGhlIGF0b21pYyBjb3VudGVycyB3aXRob3V0IG1fcGVyYWdsb2NrIHByb3RlY3Rpb24uCi0gKiBUaGlzIGFsbG93cyB0aGUgaW1wbGVtZW50YXRpb24gb2YgeGZzX2ZzdHJtX2ZyZWVfZnVuYygpIHRvIGJlIGFnbm9zdGljIGFib3V0Ci0gKiB3aGV0aGVyIGl0IHdhcyBjYWxsZWQgd2l0aCB0aGUgbV9wZXJhZ2xvY2sgaGVsZCBpbiByZWFkIG1vZGUsIHdyaXRlIG1vZGUgb3IKLSAqIG5vdCBoZWxkIGF0IGFsbC4gIFRoZSByYWNlIGNvbmRpdGlvbiB0aGlzIGFkZHJlc3NlcyBpcyB0aGUgZm9sbG93aW5nOgotICoKLSAqICAtIFRoZSB3b3JrIHF1ZXVlIHNjaGVkdWxlciBmaXJlcyBhbmQgcHVsbHMgYSBmaWxlc3RyZWFtIGRpcmVjdG9yeSBjYWNoZQotICogICAgZWxlbWVudCBvZmYgdGhlIExSVSBlbmQgb2YgdGhlIGNhY2hlIGZvciBkZWxldGlvbiwgdGhlbiBnZXRzIHByZS1lbXB0ZWQuCi0gKiAgLSBBIGdyb3dmcyBvcGVyYXRpb24gZ3JhYnMgdGhlIG1fcGVyYWdsb2NrIGluIHdyaXRlIG1vZGUsIGZsdXNoZXMgYWxsIHRoZQotICogICAgcmVtYWluaW5nIGl0ZW1zIGZyb20gdGhlIGNhY2hlIGFuZCByZWFsbG9jYXRlcyB0aGUgbW91bnQgcG9pbnQncyBwZXItYWcKLSAqICAgIGFycmF5LCByZXNldHRpbmcgYWxsIHRoZSBjb3VudGVycyB0byB6ZXJvLgotICogIC0gVGhlIHdvcmsgcXVldWUgdGhyZWFkIHJlc3VtZXMgYW5kIGNhbGxzIHRoZSBmcmVlIGZ1bmN0aW9uIGZvciB0aGUgZWxlbWVudAotICogICAgaXQgc3RhcnRlZCBjbGVhbmluZyB1cCBlYXJsaWVyLiAgSW4gdGhlIHByb2Nlc3MgaXQgZGVjcmVtZW50cyB0aGUKLSAqICAgIGZpbGVzdHJlYW1zIGNvdW50ZXIgZm9yIGFuIEFHIHRoYXQgbm93IGhhcyBubyByZWZlcmVuY2VzLgotICoKLSAqIFdpdGggYSBzaHJpbmtmcyBmZWF0dXJlLCB0aGUgYWJvdmUgc2NlbmFyaW8gY291bGQgcGFuaWMgdGhlIHN5c3RlbS4KLSAqCi0gKiBBbGwgb3RoZXIgdXNlcyBvZiB0aGUgZm9sbG93aW5nIG1hY3JvcyBzaG91bGQgYmUgcHJvdGVjdGVkIGJ5IGVpdGhlciB0aGUKLSAqIG1fcGVyYWdsb2NrIGhlbGQgaW4gcmVhZCBtb2RlLCBvciB0aGUgY2FjaGUncyBpbnRlcm5hbCBsb2NraW5nIGV4cG9zZWQgYnkgdGhlCi0gKiBpbnRlcnZhbCBiZXR3ZWVuIGEgY2FsbCB0byB4ZnNfbXJ1X2NhY2hlX2xvb2t1cCgpIGFuZCBhIGNhbGwgdG8KLSAqIHhmc19tcnVfY2FjaGVfZG9uZSgpLiAgSW4gYWRkaXRpb24sIHRoZSBtX3BlcmFnbG9jayBtdXN0IGJlIGhlbGQgaW4gcmVhZCBtb2RlCi0gKiB3aGVuIG5ldyBlbGVtZW50cyBhcmUgYWRkZWQgdG8gdGhlIGNhY2hlLgotICoKLSAqIENvbWJpbmVkLCB0aGVzZSBsb2NraW5nIHJ1bGVzIGVuc3VyZSB0aGF0IG5vIGFzc29jaWF0aW9ucyB3aWxsIGV2ZXIgZXhpc3QgaW4KLSAqIHRoZSBjYWNoZSB0aGF0IHJlZmVyZW5jZSBwZXItYWcgYXJyYXkgZWxlbWVudHMgdGhhdCBoYXZlIHNpbmNlIGJlZW4KLSAqIHJlYWxsb2NhdGVkLgotICovCi0vKgotICogeGZzX2ZpbGVzdHJlYW1fcGVla19hZyBpcyBvbmx5IHVzZWQgaW4gdHJhY2luZyBjb2RlCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci14ZnNfZmlsZXN0cmVhbV9wZWVrX2FnKAotCXhmc19tb3VudF90CSptcCwKLQl4ZnNfYWdudW1iZXJfdAlhZ25vKQotewotCXN0cnVjdCB4ZnNfcGVyYWcgKnBhZzsKLQlpbnQJCXJldDsKLQotCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnbm8pOwotCXJldCA9IGF0b21pY19yZWFkKCZwYWctPnBhZ2ZfZnN0cm1zKTsKLQl4ZnNfcGVyYWdfcHV0KHBhZyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLXhmc19maWxlc3RyZWFtX2dldF9hZygKLQl4ZnNfbW91bnRfdAkqbXAsCi0JeGZzX2FnbnVtYmVyX3QJYWdubykKLXsKLQlzdHJ1Y3QgeGZzX3BlcmFnICpwYWc7Ci0JaW50CQlyZXQ7Ci0KLQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZ25vKTsKLQlyZXQgPSBhdG9taWNfaW5jX3JldHVybigmcGFnLT5wYWdmX2ZzdHJtcyk7Ci0JeGZzX3BlcmFnX3B1dChwYWcpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci14ZnNfZmlsZXN0cmVhbV9wdXRfYWcoCi0JeGZzX21vdW50X3QJKm1wLAotCXhmc19hZ251bWJlcl90CWFnbm8pCi17Ci0Jc3RydWN0IHhmc19wZXJhZyAqcGFnOwotCWludAkJcmV0OwotCi0JcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWdubyk7Ci0JcmV0ID0gYXRvbWljX2RlY19yZXR1cm4oJnBhZy0+cGFnZl9mc3RybXMpOwotCXhmc19wZXJhZ19wdXQocGFnKTsKLQlyZXR1cm4gcmV0OwotfQotCiAvKiBhbGxvY2F0aW9uIHNlbGVjdGlvbiBmbGFncyAqLwogdHlwZWRlZiBlbnVtIHhmc19mc3RybV9hbGxvYyB7CiAJWEZTX1BJQ0tfVVNFUkRBVEEgPSAxLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mc29wcy5jIGIvZnMveGZzL3hmc19mc29wcy5jCmluZGV4IDM3YTZmNjIuLmRiY2E1ZjUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZnNvcHMuYworKysgYi9mcy94ZnMveGZzX2Zzb3BzLmMKQEAgLTI0LDE0ICsyNCwxMCBAQAogI2luY2x1ZGUgInhmc190cmFucy5oIgogI2luY2x1ZGUgInhmc19zYi5oIgogI2luY2x1ZGUgInhmc19hZy5oIgotI2luY2x1ZGUgInhmc19kaXIyLmgiCi0jaW5jbHVkZSAieGZzX2RtYXBpLmgiCiAjaW5jbHVkZSAieGZzX21vdW50LmgiCiAjaW5jbHVkZSAieGZzX2JtYXBfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfYWxsb2NfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfaWFsbG9jX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2RpcjJfc2YuaCIKLSNpbmNsdWRlICJ4ZnNfYXR0cl9zZi5oIgogI2luY2x1ZGUgInhmc19kaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfaW5vZGVfaXRlbS5oIgpAQCAtNjI2LDggKzYyMiw3IEBACiAJaXAgPSBtcC0+bV9yb290aXA7CiAJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiAKLQl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JeGZzX3RyYW5zX2lob2xkKHRwLCBpcCk7CisJeGZzX3RyYW5zX2lqb2luKHRwLCBpcCk7CiAJeGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsIFhGU19JTE9HX0NPUkUpOwogCXhmc190cmFuc19zZXRfc3luYyh0cCk7CiAJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaWFsbG9jLmMgYi9mcy94ZnMveGZzX2lhbGxvYy5jCmluZGV4IGM3MTQyYTAuLmFiZjgwYWUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaWFsbG9jLmMKKysrIGIvZnMveGZzL3hmc19pYWxsb2MuYwpAQCAtMjQsMTQgKzI0LDEwIEBACiAjaW5jbHVkZSAieGZzX3RyYW5zLmgiCiAjaW5jbHVkZSAieGZzX3NiLmgiCiAjaW5jbHVkZSAieGZzX2FnLmgiCi0jaW5jbHVkZSAieGZzX2RpcjIuaCIKLSNpbmNsdWRlICJ4ZnNfZG1hcGkuaCIKICNpbmNsdWRlICJ4ZnNfbW91bnQuaCIKICNpbmNsdWRlICJ4ZnNfYm1hcF9idHJlZS5oIgogI2luY2x1ZGUgInhmc19hbGxvY19idHJlZS5oIgogI2luY2x1ZGUgInhmc19pYWxsb2NfYnRyZWUuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMl9zZi5oIgotI2luY2x1ZGUgInhmc19hdHRyX3NmLmgiCiAjaW5jbHVkZSAieGZzX2Rpbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZS5oIgogI2luY2x1ZGUgInhmc19idHJlZS5oIgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pYWxsb2NfYnRyZWUuYyBiL2ZzL3hmcy94ZnNfaWFsbG9jX2J0cmVlLmMKaW5kZXggYzI4MmE5YS4uZDM1Mjg2MiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pYWxsb2NfYnRyZWUuYworKysgYi9mcy94ZnMveGZzX2lhbGxvY19idHJlZS5jCkBAIC0yNCwxNCArMjQsMTAgQEAKICNpbmNsdWRlICJ4ZnNfdHJhbnMuaCIKICNpbmNsdWRlICJ4ZnNfc2IuaCIKICNpbmNsdWRlICJ4ZnNfYWcuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMi5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc19ibWFwX2J0cmVlLmgiCiAjaW5jbHVkZSAieGZzX2FsbG9jX2J0cmVlLmgiCiAjaW5jbHVkZSAieGZzX2lhbGxvY19idHJlZS5oIgotI2luY2x1ZGUgInhmc19kaXIyX3NmLmgiCi0jaW5jbHVkZSAieGZzX2F0dHJfc2YuaCIKICNpbmNsdWRlICJ4ZnNfZGlub2RlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlLmgiCiAjaW5jbHVkZSAieGZzX2J0cmVlLmgiCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lnZXQuYyBiL2ZzL3hmcy94ZnNfaWdldC5jCmluZGV4IDhmOGI5MWIuLmIxZWNjNmYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaWdldC5jCisrKyBiL2ZzL3hmcy94ZnNfaWdldC5jCkBAIC0yNSwxNCArMjUsMTAgQEAKICNpbmNsdWRlICJ4ZnNfdHJhbnMuaCIKICNpbmNsdWRlICJ4ZnNfc2IuaCIKICNpbmNsdWRlICJ4ZnNfYWcuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMi5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc19ibWFwX2J0cmVlLmgiCiAjaW5jbHVkZSAieGZzX2FsbG9jX2J0cmVlLmgiCiAjaW5jbHVkZSAieGZzX2lhbGxvY19idHJlZS5oIgotI2luY2x1ZGUgInhmc19kaXIyX3NmLmgiCi0jaW5jbHVkZSAieGZzX2F0dHJfc2YuaCIKICNpbmNsdWRlICJ4ZnNfZGlub2RlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlLmgiCiAjaW5jbHVkZSAieGZzX2J0cmVlLmgiCkBAIC05NSw3ICs5MSw3IEBACiAJcmV0dXJuIGlwOwogfQogCi1TVEFUSUMgdm9pZAordm9pZAogeGZzX2lub2RlX2ZyZWUoCiAJc3RydWN0IHhmc19pbm9kZQkqaXApCiB7CkBAIC0yMTIsNyArMjA4LDcgQEAKIAkJCWlwLT5pX2ZsYWdzICY9IH5YRlNfSU5FVzsKIAkJCWlwLT5pX2ZsYWdzIHw9IFhGU19JUkVDTEFJTUFCTEU7CiAJCQlfX3hmc19pbm9kZV9zZXRfcmVjbGFpbV90YWcocGFnLCBpcCk7Ci0JCQl0cmFjZV94ZnNfaWdldF9yZWNsYWltKGlwKTsKKwkJCXRyYWNlX3hmc19pZ2V0X3JlY2xhaW1fZmFpbChpcCk7CiAJCQlnb3RvIG91dF9lcnJvcjsKIAkJfQogCkBAIC0yMjcsNiArMjIzLDcgQEAKIAl9IGVsc2UgewogCQkvKiBJZiB0aGUgVkZTIGlub2RlIGlzIGJlaW5nIHRvcm4gZG93biwgcGF1c2UgYW5kIHRyeSBhZ2Fpbi4gKi8KIAkJaWYgKCFpZ3JhYihpbm9kZSkpIHsKKwkJCXRyYWNlX3hmc19pZ2V0X3NraXAoaXApOwogCQkJZXJyb3IgPSBFQUdBSU47CiAJCQlnb3RvIG91dF9lcnJvcjsKIAkJfQpAQCAtMjM0LDYgKzIzMSw3IEBACiAJCS8qIFdlJ3ZlIGdvdCBhIGxpdmUgb25lLiAqLwogCQlzcGluX3VubG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7CiAJCXJlYWRfdW5sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7CisJCXRyYWNlX3hmc19pZ2V0X2hpdChpcCk7CiAJfQogCiAJaWYgKGxvY2tfZmxhZ3MgIT0gMCkKQEAgLTI0Miw3ICsyNDAsNiBAQAogCXhmc19pZmxhZ3NfY2xlYXIoaXAsIFhGU19JU1RBTEUpOwogCVhGU19TVEFUU19JTkMoeHNfaWdfZm91bmQpOwogCi0JdHJhY2VfeGZzX2lnZXRfZm91bmQoaXApOwogCXJldHVybiAwOwogCiBvdXRfZXJyb3I6CkBAIC0yNjQsNyArMjYxLDYgQEAKIHsKIAlzdHJ1Y3QgeGZzX2lub2RlCSppcDsKIAlpbnQJCQllcnJvcjsKLQl1bnNpZ25lZCBsb25nCQlmaXJzdF9pbmRleCwgbWFzazsKIAl4ZnNfYWdpbm9fdAkJYWdpbm8gPSBYRlNfSU5PX1RPX0FHSU5PKG1wLCBpbm8pOwogCiAJaXAgPSB4ZnNfaW5vZGVfYWxsb2MobXAsIGlubyk7CkBAIC0yNzUsNyArMjcxLDcgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X2Rlc3Ryb3k7CiAKLQl4ZnNfaXRyYWNlX2VudHJ5KGlwKTsKKwl0cmFjZV94ZnNfaWdldF9taXNzKGlwKTsKIAogCWlmICgoaXAtPmlfZC5kaV9tb2RlID09IDApICYmICEoZmxhZ3MgJiBYRlNfSUdFVF9DUkVBVEUpKSB7CiAJCWVycm9yID0gRU5PRU5UOwpAQCAtMzAxLDggKzI5Nyw2IEBACiAJCQlCVUcoKTsKIAl9CiAKLQltYXNrID0gfigoKFhGU19JTk9ERV9DTFVTVEVSX1NJWkUobXApID4+IG1wLT5tX3NiLnNiX2lub2RlbG9nKSkgLSAxKTsKLQlmaXJzdF9pbmRleCA9IGFnaW5vICYgbWFzazsKIAl3cml0ZV9sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7CiAKIAkvKiBpbnNlcnQgdGhlIG5ldyBpbm9kZSAqLwpAQCAtMzIxLDcgKzMxNSw2IEBACiAJd3JpdGVfdW5sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7CiAJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOwogCi0JdHJhY2VfeGZzX2lnZXRfYWxsb2MoaXApOwogCSppcHAgPSBpcDsKIAlyZXR1cm4gMDsKIApAQCAtNDIyLDk3ICs0MTUsNiBAQAogfQogCiAvKgotICogRGVjcmVtZW50IHJlZmVyZW5jZSBjb3VudCBvZiBhbiBpbm9kZSBzdHJ1Y3R1cmUgYW5kIHVubG9jayBpdC4KLSAqCi0gKiBpcCAtLSB0aGUgaW5vZGUgYmVpbmcgcmVsZWFzZWQKLSAqIGxvY2tfZmxhZ3MgLS0gdGhpcyBwYXJhbWV0ZXIgaW5kaWNhdGVzIHRoZSBpbm9kZSdzIGxvY2tzIHRvIGJlCi0gKiAgICAgICB0byBiZSByZWxlYXNlZC4gIFNlZSB0aGUgY29tbWVudCBvbiB4ZnNfaXVubG9jaygpIGZvciBhIGxpc3QKLSAqCSBvZiB2YWxpZCB2YWx1ZXMuCi0gKi8KLXZvaWQKLXhmc19pcHV0KHhmc19pbm9kZV90CSppcCwKLQkgdWludAkJbG9ja19mbGFncykKLXsKLQl4ZnNfaXRyYWNlX2VudHJ5KGlwKTsKLQl4ZnNfaXVubG9jayhpcCwgbG9ja19mbGFncyk7Ci0JSVJFTEUoaXApOwotfQotCi0vKgotICogU3BlY2lhbCBpcHV0IGZvciBicmFuZC1uZXcgaW5vZGVzIHRoYXQgYXJlIHN0aWxsIGxvY2tlZAotICovCi12b2lkCi14ZnNfaXB1dF9uZXcoCi0JeGZzX2lub2RlX3QJKmlwLAotCXVpbnQJCWxvY2tfZmxhZ3MpCi17Ci0Jc3RydWN0IGlub2RlCSppbm9kZSA9IFZGU19JKGlwKTsKLQotCXhmc19pdHJhY2VfZW50cnkoaXApOwotCi0JaWYgKChpcC0+aV9kLmRpX21vZGUgPT0gMCkpIHsKLQkJQVNTRVJUKCF4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19JUkVDTEFJTUFCTEUpKTsKLQkJbWFrZV9iYWRfaW5vZGUoaW5vZGUpOwotCX0KLQlpZiAoaW5vZGUtPmlfc3RhdGUgJiBJX05FVykKLQkJdW5sb2NrX25ld19pbm9kZShpbm9kZSk7Ci0JaWYgKGxvY2tfZmxhZ3MpCi0JCXhmc19pdW5sb2NrKGlwLCBsb2NrX2ZsYWdzKTsKLQlJUkVMRShpcCk7Ci19Ci0KLS8qCi0gKiBUaGlzIGlzIGNhbGxlZCBmcmVlIGFsbCB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhbiBpbm9kZS4KLSAqIEl0IG11c3QgZnJlZSB0aGUgaW5vZGUgaXRzZWxmIGFuZCBhbnkgYnVmZmVycyBhbGxvY2F0ZWQgZm9yCi0gKiBpZl9leHRlbnRzL2lmX2RhdGEgYW5kIGlmX2Jyb290LiAgSXQgbXVzdCBhbHNvIGZyZWUgdGhlIGxvY2sKLSAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5vZGUuCi0gKgotICogTm90ZTogYmVjYXVzZSB3ZSBkb24ndCBpbml0aWFsaXNlIGV2ZXJ5dGhpbmcgb24gcmVhbGxvY2F0aW9uIG91dAotICogb2YgdGhlIHpvbmUsIHdlIG11c3QgZW5zdXJlIHdlIG51bGxpZnkgZXZlcnl0aGluZyBjb3JyZWN0bHkgYmVmb3JlCi0gKiBmcmVlaW5nIHRoZSBzdHJ1Y3R1cmUuCi0gKi8KLXZvaWQKLXhmc19pcmVjbGFpbSgKLQlzdHJ1Y3QgeGZzX2lub2RlCSppcCkKLXsKLQlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGlwLT5pX21vdW50OwotCXN0cnVjdCB4ZnNfcGVyYWcJKnBhZzsKLQl4ZnNfYWdpbm9fdAkJYWdpbm8gPSBYRlNfSU5PX1RPX0FHSU5PKG1wLCBpcC0+aV9pbm8pOwotCi0JWEZTX1NUQVRTX0lOQyh4c19pZ19yZWNsYWltcyk7Ci0KLQkvKgotCSAqIFJlbW92ZSB0aGUgaW5vZGUgZnJvbSB0aGUgcGVyLUFHIHJhZGl4IHRyZWUuCi0JICoKLQkgKiBCZWNhdXNlIHJhZGl4X3RyZWVfZGVsZXRlIHdvbid0IGNvbXBsYWluIGV2ZW4gaWYgdGhlIGl0ZW0gd2FzIG5ldmVyCi0JICogYWRkZWQgdG8gdGhlIHRyZWUgYXNzZXJ0IHRoYXQgaXQncyBiZWVuIHRoZXJlIGJlZm9yZSB0byBjYXRjaAotCSAqIHByb2JsZW1zIHdpdGggdGhlIGlub2RlIGxpZmUgdGltZSBlYXJseSBvbi4KLQkgKi8KLQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBYRlNfSU5PX1RPX0FHTk8obXAsIGlwLT5pX2lubykpOwotCXdyaXRlX2xvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKLQlpZiAoIXJhZGl4X3RyZWVfZGVsZXRlKCZwYWctPnBhZ19pY2lfcm9vdCwgYWdpbm8pKQotCQlBU1NFUlQoMCk7Ci0Jd3JpdGVfdW5sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7Ci0JeGZzX3BlcmFnX3B1dChwYWcpOwotCi0JLyoKLQkgKiBIZXJlIHdlIGRvIGFuIChhbG1vc3QpIHNwdXJpb3VzIGlub2RlIGxvY2sgaW4gb3JkZXIgdG8gY29vcmRpbmF0ZQotCSAqIHdpdGggaW5vZGUgY2FjaGUgcmFkaXggdHJlZSBsb29rdXBzLiAgVGhpcyBpcyBiZWNhdXNlIHRoZSBsb29rdXAKLQkgKiBjYW4gcmVmZXJlbmNlIHRoZSBpbm9kZXMgaW4gdGhlIGNhY2hlIHdpdGhvdXQgdGFraW5nIHJlZmVyZW5jZXMuCi0JICoKLQkgKiBXZSBtYWtlIHRoYXQgT0sgaGVyZSBieSBlbnN1cmluZyB0aGF0IHdlIHdhaXQgdW50aWwgdGhlIGlub2RlIGlzCi0JICogdW5sb2NrZWQgYWZ0ZXIgdGhlIGxvb2t1cCBiZWZvcmUgd2UgZ28gYWhlYWQgYW5kIGZyZWUgaXQuICBXZSBnZXQKLQkgKiBib3RoIHRoZSBpbG9jayBhbmQgdGhlIGlvbG9jayBiZWNhdXNlIHRoZSBjb2RlIG1heSBuZWVkIHRvIGRyb3AgdGhlCi0JICogaWxvY2sgb25lIGJ1dCB3aWxsIHN0aWxsIGhvbGQgdGhlIGlvbG9jay4KLQkgKi8KLQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMIHwgWEZTX0lPTE9DS19FWENMKTsKLQl4ZnNfcW1fZHFkZXRhY2goaXApOwotCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCB8IFhGU19JT0xPQ0tfRVhDTCk7Ci0KLQl4ZnNfaW5vZGVfZnJlZShpcCk7Ci19Ci0KLS8qCiAgKiBUaGlzIGlzIGEgd3JhcHBlciByb3V0aW5lIGFyb3VuZCB0aGUgeGZzX2lsb2NrKCkgcm91dGluZQogICogdXNlZCB0byBjZW50cmFsaXplIHNvbWUgZ3J1bmd5IGNvZGUuICBJdCBpcyB1c2VkIGluIHBsYWNlcwogICogdGhhdCB3aXNoIHRvIGxvY2sgdGhlIGlub2RlIHNvbGVseSBmb3IgcmVhZGluZyB0aGUgZXh0ZW50cy4KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuYyBiL2ZzL3hmcy94ZnNfaW5vZGUuYwppbmRleCBiNzZhODI5Li42ODQxNWNiIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlLmMKKysrIGIvZnMveGZzL3hmc19pbm9kZS5jCkBAIC0yNywxMyArMjcsMTAgQEAKICNpbmNsdWRlICJ4ZnNfdHJhbnNfcHJpdi5oIgogI2luY2x1ZGUgInhmc19zYi5oIgogI2luY2x1ZGUgInhmc19hZy5oIgotI2luY2x1ZGUgInhmc19kaXIyLmgiCi0jaW5jbHVkZSAieGZzX2RtYXBpLmgiCiAjaW5jbHVkZSAieGZzX21vdW50LmgiCiAjaW5jbHVkZSAieGZzX2JtYXBfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfYWxsb2NfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfaWFsbG9jX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2RpcjJfc2YuaCIKICNpbmNsdWRlICJ4ZnNfYXR0cl9zZi5oIgogI2luY2x1ZGUgInhmc19kaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfaW5vZGUuaCIKQEAgLTQ0LDcgKzQxLDYgQEAKICNpbmNsdWRlICJ4ZnNfYWxsb2MuaCIKICNpbmNsdWRlICJ4ZnNfaWFsbG9jLmgiCiAjaW5jbHVkZSAieGZzX2JtYXAuaCIKLSNpbmNsdWRlICJ4ZnNfcncuaCIKICNpbmNsdWRlICJ4ZnNfZXJyb3IuaCIKICNpbmNsdWRlICJ4ZnNfdXRpbHMuaCIKICNpbmNsdWRlICJ4ZnNfcXVvdGEuaCIKQEAgLTQyNiw3ICs0MjIsNyBAQAogCWlmICghWEZTX0RGT1JLX1EoZGlwKSkKIAkJcmV0dXJuIDA7CiAJQVNTRVJUKGlwLT5pX2FmcCA9PSBOVUxMKTsKLQlpcC0+aV9hZnAgPSBrbWVtX3pvbmVfemFsbG9jKHhmc19pZm9ya196b25lLCBLTV9TTEVFUCk7CisJaXAtPmlfYWZwID0ga21lbV96b25lX3phbGxvYyh4ZnNfaWZvcmtfem9uZSwgS01fU0xFRVAgfCBLTV9OT0ZTKTsKIAlpcC0+aV9hZnAtPmlmX2V4dF9tYXggPQogCQlYRlNfSUZPUktfQVNJWkUoaXApIC8gKHVpbnQpc2l6ZW9mKHhmc19ibWJ0X3JlY190KTsKIAlzd2l0Y2ggKGRpcC0+ZGlfYWZvcm1hdCkgewpAQCAtNTA5LDcgKzUwNSw3IEBACiAJCWlmcC0+aWZfdTEuaWZfZGF0YSA9IGlmcC0+aWZfdTIuaWZfaW5saW5lX2RhdGE7CiAJZWxzZSB7CiAJCXJlYWxfc2l6ZSA9IHJvdW5kdXAoc2l6ZSwgNCk7Ci0JCWlmcC0+aWZfdTEuaWZfZGF0YSA9IGttZW1fYWxsb2MocmVhbF9zaXplLCBLTV9TTEVFUCk7CisJCWlmcC0+aWZfdTEuaWZfZGF0YSA9IGttZW1fYWxsb2MocmVhbF9zaXplLCBLTV9TTEVFUCB8IEtNX05PRlMpOwogCX0KIAlpZnAtPmlmX2J5dGVzID0gc2l6ZTsKIAlpZnAtPmlmX3JlYWxfYnl0ZXMgPSByZWFsX3NpemU7CkBAIC02MzYsNyArNjMyLDcgQEAKIAl9CiAKIAlpZnAtPmlmX2Jyb290X2J5dGVzID0gc2l6ZTsKLQlpZnAtPmlmX2Jyb290ID0ga21lbV9hbGxvYyhzaXplLCBLTV9TTEVFUCk7CisJaWZwLT5pZl9icm9vdCA9IGttZW1fYWxsb2Moc2l6ZSwgS01fU0xFRVAgfCBLTV9OT0ZTKTsKIAlBU1NFUlQoaWZwLT5pZl9icm9vdCAhPSBOVUxMKTsKIAkvKgogCSAqIENvcHkgYW5kIGNvbnZlcnQgZnJvbSB0aGUgb24tZGlzayBzdHJ1Y3R1cmUKQEAgLTkyMiw3ICs5MTgsNiBAQAogCWludAkJZXJyb3I7CiAJeGZzX2lmb3JrX3QJKmlmcDsKIAl4ZnNfZXh0bnVtX3QJbmV4dGVudHM7Ci0Jc2l6ZV90CQlzaXplOwogCiAJaWYgKHVubGlrZWx5KFhGU19JRk9SS19GT1JNQVQoaXAsIHdoaWNoZm9yaykgIT0gWEZTX0RJTk9ERV9GTVRfQlRSRUUpKSB7CiAJCVhGU19FUlJPUl9SRVBPUlQoInhmc19pcmVhZF9leHRlbnRzIiwgWEZTX0VSUkxFVkVMX0xPVywKQEAgLTkzMCw3ICs5MjUsNiBAQAogCQlyZXR1cm4gWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCk7CiAJfQogCW5leHRlbnRzID0gWEZTX0lGT1JLX05FWFRFTlRTKGlwLCB3aGljaGZvcmspOwotCXNpemUgPSBuZXh0ZW50cyAqIHNpemVvZih4ZnNfYm1idF9yZWNfdCk7CiAJaWZwID0gWEZTX0lGT1JLX1BUUihpcCwgd2hpY2hmb3JrKTsKIAogCS8qCkBAIC0xMjI2LDcgKzEyMjAsNyBAQAogCQkJCSAgICAgICAoeGZzX3Vmc2l6ZV90KVhGU19NQVhJT0ZGU0VUKG1wKSkgLQogCQkJICBtYXBfZmlyc3QpLAogCQkJIFhGU19CTUFQSV9FTlRJUkUsIE5VTEwsIDAsIGltYXBzLCAmbmltYXBzLAotCQkJIE5VTEwsIE5VTEwpKQorCQkJIE5VTEwpKQogCSAgICByZXR1cm47CiAJQVNTRVJUKG5pbWFwcyA9PSAxKTsKIAlBU1NFUlQoaW1hcHNbMF0uYnJfc3RhcnRibG9jayA9PSBIT0xFU1RBUlRCTE9DSyk7CkBAIC0xNDYwLDcgKzE0NTQsNyBAQAogCUFTU0VSVCgoKnRwKS0+dF9mbGFncyAmIFhGU19UUkFOU19QRVJNX0xPR19SRVMpOwogCUFTU0VSVChpcC0+aV90cmFuc3AgPT0gKnRwKTsKIAlBU1NFUlQoaXAtPmlfaXRlbXAgIT0gTlVMTCk7Ci0JQVNTRVJUKGlwLT5pX2l0ZW1wLT5pbGlfZmxhZ3MgJiBYRlNfSUxJX0hPTEQpOworCUFTU0VSVChpcC0+aV9pdGVtcC0+aWxpX2xvY2tfZmxhZ3MgPT0gMCk7CiAKIAogCW50cCA9ICp0cDsKQEAgLTE1ODksMTEgKzE1ODMsMTAgQEAKIAkJeGZzX2JtYXBfaW5pdCgmZnJlZV9saXN0LCAmZmlyc3RfYmxvY2spOwogCQllcnJvciA9IHhmc19idW5tYXBpKG50cCwgaXAsCiAJCQkJICAgIGZpcnN0X3VubWFwX2Jsb2NrLCB1bm1hcF9sZW4sCi0JCQkJICAgIHhmc19ibWFwaV9hZmxhZyhmb3JrKSB8Ci0JCQkJICAgICAgKHN5bmMgPyAwIDogWEZTX0JNQVBJX0FTWU5DKSwKKwkJCQkgICAgeGZzX2JtYXBpX2FmbGFnKGZvcmspLAogCQkJCSAgICBYRlNfSVRSVU5DX01BWF9FWFRFTlRTLAogCQkJCSAgICAmZmlyc3RfYmxvY2ssICZmcmVlX2xpc3QsCi0JCQkJICAgIE5VTEwsICZkb25lKTsKKwkJCQkgICAgJmRvbmUpOwogCQlpZiAoZXJyb3IpIHsKIAkJCS8qCiAJCQkgKiBJZiB0aGUgYnVubWFwaSBjYWxsIGVuY291bnRlcnMgYW4gZXJyb3IsCkBAIC0xNjEyLDEyICsxNjA1LDggQEAKIAkJICovCiAJCWVycm9yID0geGZzX2JtYXBfZmluaXNoKHRwLCAmZnJlZV9saXN0LCAmY29tbWl0dGVkKTsKIAkJbnRwID0gKnRwOwotCQlpZiAoY29tbWl0dGVkKSB7Ci0JCQkvKiBsaW5rIHRoZSBpbm9kZSBpbnRvIHRoZSBuZXh0IHhhY3QgaW4gdGhlIGNoYWluICovCi0JCQl4ZnNfdHJhbnNfaWpvaW4obnRwLCBpcCwKLQkJCQkJWEZTX0lMT0NLX0VYQ0wgfCBYRlNfSU9MT0NLX0VYQ0wpOwotCQkJeGZzX3RyYW5zX2lob2xkKG50cCwgaXApOwotCQl9CisJCWlmIChjb21taXR0ZWQpCisJCQl4ZnNfdHJhbnNfaWpvaW4obnRwLCBpcCk7CiAKIAkJaWYgKGVycm9yKSB7CiAJCQkvKgpAQCAtMTY0Niw5ICsxNjM1LDcgQEAKIAkJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KCp0cCwgMCk7CiAJCSp0cCA9IG50cDsKIAotCQkvKiBsaW5rIHRoZSBpbm9kZSBpbnRvIHRoZSBuZXh0IHRyYW5zYWN0aW9uIGluIHRoZSBjaGFpbiAqLwotCQl4ZnNfdHJhbnNfaWpvaW4obnRwLCBpcCwgWEZTX0lMT0NLX0VYQ0wgfCBYRlNfSU9MT0NLX0VYQ0wpOwotCQl4ZnNfdHJhbnNfaWhvbGQobnRwLCBpcCk7CisJCXhmc190cmFuc19pam9pbihudHAsIGlwKTsKIAogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gZXJyb3I7CkBAIC0xOTg1LDcgKzE5NzIsNyBAQAogCQkJaWYgKGxpcC0+bGlfdHlwZSA9PSBYRlNfTElfSU5PREUpIHsKIAkJCQlpaXAgPSAoeGZzX2lub2RlX2xvZ19pdGVtX3QgKilsaXA7CiAJCQkJQVNTRVJUKGlpcC0+aWxpX2xvZ2dlZCA9PSAxKTsKLQkJCQlsaXAtPmxpX2NiID0gKHZvaWQoKikoeGZzX2J1Zl90Kix4ZnNfbG9nX2l0ZW1fdCopKSB4ZnNfaXN0YWxlX2RvbmU7CisJCQkJbGlwLT5saV9jYiA9IHhmc19pc3RhbGVfZG9uZTsKIAkJCQl4ZnNfdHJhbnNfYWlsX2NvcHlfbHNuKG1wLT5tX2FpbCwKIAkJCQkJCQkmaWlwLT5pbGlfZmx1c2hfbHNuLAogCQkJCQkJCSZpaXAtPmlsaV9pdGVtLmxpX2xzbik7CkBAIC0yMDU1LDkgKzIwNDIsOCBAQAogCQkJeGZzX3RyYW5zX2FpbF9jb3B5X2xzbihtcC0+bV9haWwsICZpaXAtPmlsaV9mbHVzaF9sc24sCiAJCQkJCQkmaWlwLT5pbGlfaXRlbS5saV9sc24pOwogCi0JCQl4ZnNfYnVmX2F0dGFjaF9pb2RvbmUoYnAsCi0JCQkJKHZvaWQoKikoeGZzX2J1Zl90Kix4ZnNfbG9nX2l0ZW1fdCopKQotCQkJCXhmc19pc3RhbGVfZG9uZSwgKHhmc19sb2dfaXRlbV90ICopaWlwKTsKKwkJCXhmc19idWZfYXR0YWNoX2lvZG9uZShicCwgeGZzX2lzdGFsZV9kb25lLAorCQkJCQkJICAmaWlwLT5pbGlfaXRlbSk7CiAKIAkJCWlmIChpcCAhPSBmcmVlX2lwKQogCQkJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CkBAIC0yMjAzLDcgKzIxODksNyBAQAogCQkgKi8KIAkJaWYgKGlmcC0+aWZfYnJvb3RfYnl0ZXMgPT0gMCkgewogCQkJbmV3X3NpemUgPSAoc2l6ZV90KVhGU19CTUFQX0JST09UX1NQQUNFX0NBTEMocmVjX2RpZmYpOwotCQkJaWZwLT5pZl9icm9vdCA9IGttZW1fYWxsb2MobmV3X3NpemUsIEtNX1NMRUVQKTsKKwkJCWlmcC0+aWZfYnJvb3QgPSBrbWVtX2FsbG9jKG5ld19zaXplLCBLTV9TTEVFUCB8IEtNX05PRlMpOwogCQkJaWZwLT5pZl9icm9vdF9ieXRlcyA9IChpbnQpbmV3X3NpemU7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTIyMTksNyArMjIwNSw3IEBACiAJCW5ld19zaXplID0gKHNpemVfdClYRlNfQk1BUF9CUk9PVF9TUEFDRV9DQUxDKG5ld19tYXgpOwogCQlpZnAtPmlmX2Jyb290ID0ga21lbV9yZWFsbG9jKGlmcC0+aWZfYnJvb3QsIG5ld19zaXplLAogCQkJCShzaXplX3QpWEZTX0JNQVBfQlJPT1RfU1BBQ0VfQ0FMQyhjdXJfbWF4KSwgLyogb2xkIHNpemUgKi8KLQkJCQlLTV9TTEVFUCk7CisJCQkJS01fU0xFRVAgfCBLTV9OT0ZTKTsKIAkJb3AgPSAoY2hhciAqKVhGU19CTUFQX0JST09UX1BUUl9BRERSKG1wLCBpZnAtPmlmX2Jyb290LCAxLAogCQkJCQkJICAgICBpZnAtPmlmX2Jyb290X2J5dGVzKTsKIAkJbnAgPSAoY2hhciAqKVhGU19CTUFQX0JST09UX1BUUl9BRERSKG1wLCBpZnAtPmlmX2Jyb290LCAxLApAQCAtMjI0NSw3ICsyMjMxLDcgQEAKIAllbHNlCiAJCW5ld19zaXplID0gMDsKIAlpZiAobmV3X3NpemUgPiAwKSB7Ci0JCW5ld19icm9vdCA9IGttZW1fYWxsb2MobmV3X3NpemUsIEtNX1NMRUVQKTsKKwkJbmV3X2Jyb290ID0ga21lbV9hbGxvYyhuZXdfc2l6ZSwgS01fU0xFRVAgfCBLTV9OT0ZTKTsKIAkJLyoKIAkJICogRmlyc3QgY29weSBvdmVyIHRoZSBidHJlZSBibG9jayBoZWFkZXIuCiAJCSAqLwpAQCAtMjM0OSw3ICsyMzM1LDggQEAKIAkJcmVhbF9zaXplID0gcm91bmR1cChuZXdfc2l6ZSwgNCk7CiAJCWlmIChpZnAtPmlmX3UxLmlmX2RhdGEgPT0gTlVMTCkgewogCQkJQVNTRVJUKGlmcC0+aWZfcmVhbF9ieXRlcyA9PSAwKTsKLQkJCWlmcC0+aWZfdTEuaWZfZGF0YSA9IGttZW1fYWxsb2MocmVhbF9zaXplLCBLTV9TTEVFUCk7CisJCQlpZnAtPmlmX3UxLmlmX2RhdGEgPSBrbWVtX2FsbG9jKHJlYWxfc2l6ZSwKKwkJCQkJCQlLTV9TTEVFUCB8IEtNX05PRlMpOwogCQl9IGVsc2UgaWYgKGlmcC0+aWZfdTEuaWZfZGF0YSAhPSBpZnAtPmlmX3UyLmlmX2lubGluZV9kYXRhKSB7CiAJCQkvKgogCQkJICogT25seSBkbyB0aGUgcmVhbGxvYyBpZiB0aGUgdW5kZXJseWluZyBzaXplCkBAIC0yMzYwLDExICsyMzQ3LDEyIEBACiAJCQkJCWttZW1fcmVhbGxvYyhpZnAtPmlmX3UxLmlmX2RhdGEsCiAJCQkJCQkJcmVhbF9zaXplLAogCQkJCQkJCWlmcC0+aWZfcmVhbF9ieXRlcywKLQkJCQkJCQlLTV9TTEVFUCk7CisJCQkJCQkJS01fU0xFRVAgfCBLTV9OT0ZTKTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCUFTU0VSVChpZnAtPmlmX3JlYWxfYnl0ZXMgPT0gMCk7Ci0JCQlpZnAtPmlmX3UxLmlmX2RhdGEgPSBrbWVtX2FsbG9jKHJlYWxfc2l6ZSwgS01fU0xFRVApOworCQkJaWZwLT5pZl91MS5pZl9kYXRhID0ga21lbV9hbGxvYyhyZWFsX3NpemUsCisJCQkJCQkJS01fU0xFRVAgfCBLTV9OT0ZTKTsKIAkJCW1lbWNweShpZnAtPmlmX3UxLmlmX2RhdGEsIGlmcC0+aWZfdTIuaWZfaW5saW5lX2RhdGEsCiAJCQkJaWZwLT5pZl9ieXRlcyk7CiAJCX0KQEAgLTI3MzEsNyArMjcxOSw2IEBACiAJCSAqIG1hcmsgaXQgYXMgc3RhbGUgYW5kIGJyZWxzZS4KIAkJICovCiAJCWlmIChYRlNfQlVGX0lPRE9ORV9GVU5DKGJwKSkgewotCQkJWEZTX0JVRl9DTFJfQkRTVFJBVF9GVU5DKGJwKTsKIAkJCVhGU19CVUZfVU5ET05FKGJwKTsKIAkJCVhGU19CVUZfU1RBTEUoYnApOwogCQkJWEZTX0JVRl9FUlJPUihicCxFSU8pOwpAQCAtMzA2OSw4ICszMDU2LDcgQEAKIAkJICogYW5kIHVubG9jayB0aGUgaW5vZGUncyBmbHVzaCBsb2NrIHdoZW4gdGhlIGlub2RlIGlzCiAJCSAqIGNvbXBsZXRlbHkgd3JpdHRlbiB0byBkaXNrLgogCQkgKi8KLQkJeGZzX2J1Zl9hdHRhY2hfaW9kb25lKGJwLCAodm9pZCgqKSh4ZnNfYnVmX3QqLHhmc19sb2dfaXRlbV90KikpCi0JCQkJICAgICAgeGZzX2lmbHVzaF9kb25lLCAoeGZzX2xvZ19pdGVtX3QgKilpaXApOworCQl4ZnNfYnVmX2F0dGFjaF9pb2RvbmUoYnAsIHhmc19pZmx1c2hfZG9uZSwgJmlpcC0+aWxpX2l0ZW0pOwogCiAJCUFTU0VSVChYRlNfQlVGX0ZTUFJJVkFURShicCwgdm9pZCAqKSAhPSBOVUxMKTsKIAkJQVNTRVJUKFhGU19CVUZfSU9ET05FX0ZVTkMoYnApICE9IE5VTEwpOwpAQCAtMzUxNCwxMyArMzUwMCwxMSBAQAogCXhmc19leHRudW1fdAlleHRfZGlmZjsJLyogZXh0ZW50cyB0byByZW1vdmUgaW4gY3VycmVudCBsaXN0ICovCiAJeGZzX2V4dG51bV90CW5leDE7CQkvKiBudW1iZXIgb2YgZXh0ZW50cyBiZWZvcmUgaWR4ICovCiAJeGZzX2V4dG51bV90CW5leDI7CQkvKiBleHRlbnRzIGFmdGVyIGlkeCArIGNvdW50ICovCi0JaW50CQlubGlzdHM7CQkvKiBlbnRyaWVzIGluIGluZGlyZWN0aW9uIGFycmF5ICovCiAJaW50CQlwYWdlX2lkeCA9IGlkeDsJLyogaW5kZXggaW4gdGFyZ2V0IGV4dGVudCBsaXN0ICovCiAKIAlBU1NFUlQoaWZwLT5pZl9mbGFncyAmIFhGU19JRkVYVElSRUMpOwogCWVycCA9IHhmc19pZXh0X2lkeF90b19pcmVjKGlmcCwgICZwYWdlX2lkeCwgJmVycF9pZHgsIDApOwogCUFTU0VSVChlcnAgIT0gTlVMTCk7Ci0Jbmxpc3RzID0gaWZwLT5pZl9yZWFsX2J5dGVzIC8gWEZTX0lFWFRfQlVGU1o7CiAJbmV4MSA9IHBhZ2VfaWR4OwogCWV4dF9jbnQgPSBjb3VudDsKIAl3aGlsZSAoZXh0X2NudCkgewpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZS5oIGIvZnMveGZzL3hmc19pbm9kZS5oCmluZGV4IDc4NTUwZGYuLjA4OThjNTQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuaAorKysgYi9mcy94ZnMveGZzX2lub2RlLmgKQEAgLTQ0Myw4ICs0NDMsNiBAQAogICovCiBpbnQJCXhmc19pZ2V0KHN0cnVjdCB4ZnNfbW91bnQgKiwgc3RydWN0IHhmc190cmFucyAqLCB4ZnNfaW5vX3QsCiAJCQkgdWludCwgdWludCwgeGZzX2lub2RlX3QgKiopOwotdm9pZAkJeGZzX2lwdXQoeGZzX2lub2RlX3QgKiwgdWludCk7Ci12b2lkCQl4ZnNfaXB1dF9uZXcoeGZzX2lub2RlX3QgKiwgdWludCk7CiB2b2lkCQl4ZnNfaWxvY2soeGZzX2lub2RlX3QgKiwgdWludCk7CiBpbnQJCXhmc19pbG9ja19ub3dhaXQoeGZzX2lub2RlX3QgKiwgdWludCk7CiB2b2lkCQl4ZnNfaXVubG9jayh4ZnNfaW5vZGVfdCAqLCB1aW50KTsKQEAgLTQ1Miw3ICs0NTAsNyBAQAogaW50CQl4ZnNfaXNpbG9ja2VkKHhmc19pbm9kZV90ICosIHVpbnQpOwogdWludAkJeGZzX2lsb2NrX21hcF9zaGFyZWQoeGZzX2lub2RlX3QgKik7CiB2b2lkCQl4ZnNfaXVubG9ja19tYXBfc2hhcmVkKHhmc19pbm9kZV90ICosIHVpbnQpOwotdm9pZAkJeGZzX2lyZWNsYWltKHhmc19pbm9kZV90ICopOwordm9pZAkJeGZzX2lub2RlX2ZyZWUoc3RydWN0IHhmc19pbm9kZSAqaXApOwogCiAvKgogICogeGZzX2lub2RlLmMgcHJvdG90eXBlcy4KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jIGIvZnMveGZzL3hmc19pbm9kZV9pdGVtLmMKaW5kZXggY2Y4MjQ5YS4uZmUwMDc3NyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZV9pdGVtLmMKKysrIGIvZnMveGZzL3hmc19pbm9kZV9pdGVtLmMKQEAgLTIyLDMwICsyMiwyNiBAQAogI2luY2x1ZGUgInhmc19sb2cuaCIKICNpbmNsdWRlICJ4ZnNfaW51bS5oIgogI2luY2x1ZGUgInhmc190cmFucy5oIgotI2luY2x1ZGUgInhmc19idWZfaXRlbS5oIgogI2luY2x1ZGUgInhmc19zYi5oIgogI2luY2x1ZGUgInhmc19hZy5oIgotI2luY2x1ZGUgInhmc19kaXIyLmgiCi0jaW5jbHVkZSAieGZzX2RtYXBpLmgiCiAjaW5jbHVkZSAieGZzX21vdW50LmgiCiAjaW5jbHVkZSAieGZzX3RyYW5zX3ByaXYuaCIKICNpbmNsdWRlICJ4ZnNfYm1hcF9idHJlZS5oIgotI2luY2x1ZGUgInhmc19hbGxvY19idHJlZS5oIgotI2luY2x1ZGUgInhmc19pYWxsb2NfYnRyZWUuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMl9zZi5oIgotI2luY2x1ZGUgInhmc19hdHRyX3NmLmgiCiAjaW5jbHVkZSAieGZzX2Rpbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZV9pdGVtLmgiCi0jaW5jbHVkZSAieGZzX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2lhbGxvYy5oIgotI2luY2x1ZGUgInhmc19ydy5oIgogI2luY2x1ZGUgInhmc19lcnJvci5oIgogI2luY2x1ZGUgInhmc190cmFjZS5oIgogCiAKIGttZW1fem9uZV90CSp4ZnNfaWxpX3pvbmU7CQkvKiBpbm9kZSBsb2cgaXRlbSB6b25lICovCiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHhmc19pbm9kZV9sb2dfaXRlbSAqSU5PREVfSVRFTShzdHJ1Y3QgeGZzX2xvZ19pdGVtICpsaXApCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihsaXAsIHN0cnVjdCB4ZnNfaW5vZGVfbG9nX2l0ZW0sIGlsaV9pdGVtKTsKK30KKworCiAvKgogICogVGhpcyByZXR1cm5zIHRoZSBudW1iZXIgb2YgaW92ZWNzIG5lZWRlZCB0byBsb2cgdGhlIGdpdmVuIGlub2RlIGl0ZW0uCiAgKgpAQCAtNTUsMTMgKzUxLDExIEBACiAgKi8KIFNUQVRJQyB1aW50CiB4ZnNfaW5vZGVfaXRlbV9zaXplKAotCXhmc19pbm9kZV9sb2dfaXRlbV90CSppaXApCisJc3RydWN0IHhmc19sb2dfaXRlbQkqbGlwKQogewotCXVpbnQJCW52ZWNzOwotCXhmc19pbm9kZV90CSppcDsKLQotCWlwID0gaWlwLT5pbGlfaW5vZGU7Ci0JbnZlY3MgPSAyOworCXN0cnVjdCB4ZnNfaW5vZGVfbG9nX2l0ZW0gKmlpcCA9IElOT0RFX0lURU0obGlwKTsKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IGlpcC0+aWxpX2lub2RlOworCXVpbnQJCQludmVjcyA9IDI7CiAKIAkvKgogCSAqIE9ubHkgbG9nIHRoZSBkYXRhL2V4dGVudHMvYi10cmVlIHJvb3QgaWYgdGhlcmUgaXMgc29tZXRoaW5nCkBAIC0yMTIsMjEgKzIwNiwxNyBAQAogICovCiBTVEFUSUMgdm9pZAogeGZzX2lub2RlX2l0ZW1fZm9ybWF0KAotCXhmc19pbm9kZV9sb2dfaXRlbV90CSppaXAsCi0JeGZzX2xvZ19pb3ZlY190CQkqbG9nX3ZlY3RvcikKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXAsCisJc3RydWN0IHhmc19sb2dfaW92ZWMJKnZlY3ApCiB7CisJc3RydWN0IHhmc19pbm9kZV9sb2dfaXRlbSAqaWlwID0gSU5PREVfSVRFTShsaXApOworCXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gaWlwLT5pbGlfaW5vZGU7CiAJdWludAkJCW52ZWNzOwotCXhmc19sb2dfaW92ZWNfdAkJKnZlY3A7Ci0JeGZzX2lub2RlX3QJCSppcDsKIAlzaXplX3QJCQlkYXRhX2J5dGVzOwogCXhmc19ibWJ0X3JlY190CQkqZXh0X2J1ZmZlcjsKLQlpbnQJCQlucmVjczsKIAl4ZnNfbW91bnRfdAkJKm1wOwogCi0JaXAgPSBpaXAtPmlsaV9pbm9kZTsKLQl2ZWNwID0gbG9nX3ZlY3RvcjsKLQotCXZlY3AtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmaWlwLT5pbGlfZm9ybWF0OworCXZlY3AtPmlfYWRkciA9ICZpaXAtPmlsaV9mb3JtYXQ7CiAJdmVjcC0+aV9sZW4gID0gc2l6ZW9mKHhmc19pbm9kZV9sb2dfZm9ybWF0X3QpOwogCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfSUZPUk1BVDsKIAl2ZWNwKys7CkBAIC0yNzcsNyArMjY3LDcgQEAKIAkgKi8KIAl4ZnNfc3luY2hyb25pemVfdGltZXMoaXApOwogCi0JdmVjcC0+aV9hZGRyID0gKHhmc19jYWRkcl90KSZpcC0+aV9kOworCXZlY3AtPmlfYWRkciA9ICZpcC0+aV9kOwogCXZlY3AtPmlfbGVuICA9IHNpemVvZihzdHJ1Y3QgeGZzX2ljZGlub2RlKTsKIAl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0lDT1JFOwogCXZlY3ArKzsKQEAgLTMyMywxOCArMzEzLDE3IEBACiAJCQlBU1NFUlQoaXAtPmlfZGYuaWZfdTEuaWZfZXh0ZW50cyAhPSBOVUxMKTsKIAkJCUFTU0VSVChpcC0+aV9kLmRpX25leHRlbnRzID4gMCk7CiAJCQlBU1NFUlQoaWlwLT5pbGlfZXh0ZW50c19idWYgPT0gTlVMTCk7Ci0JCQlucmVjcyA9IGlwLT5pX2RmLmlmX2J5dGVzIC8KLQkJCQkodWludClzaXplb2YoeGZzX2JtYnRfcmVjX3QpOwotCQkJQVNTRVJUKG5yZWNzID4gMCk7CisJCQlBU1NFUlQoKGlwLT5pX2RmLmlmX2J5dGVzIC8KKwkJCQkodWludClzaXplb2YoeGZzX2JtYnRfcmVjX3QpKSA+IDApOwogI2lmZGVmIFhGU19OQVRJVkVfSE9TVAotCQkJaWYgKG5yZWNzID09IGlwLT5pX2QuZGlfbmV4dGVudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlwLT5pX2QuZGlfbmV4dGVudHMgPT0gaXAtPmlfZGYuaWZfYnl0ZXMgLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludClzaXplb2YoeGZzX2JtYnRfcmVjX3QpKSB7CiAJCQkJLyoKIAkJCQkgKiBUaGVyZSBhcmUgbm8gZGVsYXllZCBhbGxvY2F0aW9uCiAJCQkJICogZXh0ZW50cywgc28ganVzdCBwb2ludCB0byB0aGUKIAkJCQkgKiByZWFsIGV4dGVudHMgYXJyYXkuCiAJCQkJICovCi0JCQkJdmVjcC0+aV9hZGRyID0KLQkJCQkJKGNoYXIgKikoaXAtPmlfZGYuaWZfdTEuaWZfZXh0ZW50cyk7CisJCQkJdmVjcC0+aV9hZGRyID0gaXAtPmlfZGYuaWZfdTEuaWZfZXh0ZW50czsKIAkJCQl2ZWNwLT5pX2xlbiA9IGlwLT5pX2RmLmlmX2J5dGVzOwogCQkJCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfSUVYVDsKIAkJCX0gZWxzZQpAQCAtMzUyLDcgKzM0MSw3IEBACiAJCQkJZXh0X2J1ZmZlciA9IGttZW1fYWxsb2MoaXAtPmlfZGYuaWZfYnl0ZXMsCiAJCQkJCUtNX1NMRUVQKTsKIAkJCQlpaXAtPmlsaV9leHRlbnRzX2J1ZiA9IGV4dF9idWZmZXI7Ci0JCQkJdmVjcC0+aV9hZGRyID0gKHhmc19jYWRkcl90KWV4dF9idWZmZXI7CisJCQkJdmVjcC0+aV9hZGRyID0gZXh0X2J1ZmZlcjsKIAkJCQl2ZWNwLT5pX2xlbiA9IHhmc19pZXh0ZW50c19jb3B5KGlwLCBleHRfYnVmZmVyLAogCQkJCQkJWEZTX0RBVEFfRk9SSyk7CiAJCQkJdmVjcC0+aV90eXBlID0gWExPR19SRUdfVFlQRV9JRVhUOwpAQCAtMzcxLDcgKzM2MCw3IEBACiAJCWlmIChpaXAtPmlsaV9mb3JtYXQuaWxmX2ZpZWxkcyAmIFhGU19JTE9HX0RCUk9PVCkgewogCQkJQVNTRVJUKGlwLT5pX2RmLmlmX2Jyb290X2J5dGVzID4gMCk7CiAJCQlBU1NFUlQoaXAtPmlfZGYuaWZfYnJvb3QgIT0gTlVMTCk7Ci0JCQl2ZWNwLT5pX2FkZHIgPSAoeGZzX2NhZGRyX3QpaXAtPmlfZGYuaWZfYnJvb3Q7CisJCQl2ZWNwLT5pX2FkZHIgPSBpcC0+aV9kZi5pZl9icm9vdDsKIAkJCXZlY3AtPmlfbGVuID0gaXAtPmlfZGYuaWZfYnJvb3RfYnl0ZXM7CiAJCQl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0lCUk9PVDsKIAkJCXZlY3ArKzsKQEAgLTM4OSw3ICszNzgsNyBAQAogCQkJQVNTRVJUKGlwLT5pX2RmLmlmX3UxLmlmX2RhdGEgIT0gTlVMTCk7CiAJCQlBU1NFUlQoaXAtPmlfZC5kaV9zaXplID4gMCk7CiAKLQkJCXZlY3AtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdClpcC0+aV9kZi5pZl91MS5pZl9kYXRhOworCQkJdmVjcC0+aV9hZGRyID0gaXAtPmlfZGYuaWZfdTEuaWZfZGF0YTsKIAkJCS8qCiAJCQkgKiBSb3VuZCBpX2J5dGVzIHVwIHRvIGEgd29yZCBib3VuZGFyeS4KIAkJCSAqIFRoZSB1bmRlcmx5aW5nIG1lbW9yeSBpcyBndWFyYW50ZWVkIHRvCkBAIC00MzcsNyArNDI2LDcgQEAKIAkgKiBBc3NlcnQgdGhhdCBubyBhdHRyaWJ1dGUtcmVsYXRlZCBsb2cgZmxhZ3MgYXJlIHNldC4KIAkgKi8KIAlpZiAoIVhGU19JRk9SS19RKGlwKSkgewotCQlBU1NFUlQobnZlY3MgPT0gaWlwLT5pbGlfaXRlbS5saV9kZXNjLT5saWRfc2l6ZSk7CisJCUFTU0VSVChudmVjcyA9PSBsaXAtPmxpX2Rlc2MtPmxpZF9zaXplKTsKIAkJaWlwLT5pbGlfZm9ybWF0LmlsZl9zaXplID0gbnZlY3M7CiAJCUFTU0VSVCghKGlpcC0+aWxpX2Zvcm1hdC5pbGZfZmllbGRzICYKIAkJCSAoWEZTX0lMT0dfQURBVEEgfCBYRlNfSUxPR19BQlJPT1QgfCBYRlNfSUxPR19BRVhUKSkpOwpAQCAtNDQ5LDIxICs0MzgsMjEgQEAKIAkJQVNTRVJUKCEoaWlwLT5pbGlfZm9ybWF0LmlsZl9maWVsZHMgJgogCQkJIChYRlNfSUxPR19BREFUQSB8IFhGU19JTE9HX0FCUk9PVCkpKTsKIAkJaWYgKGlpcC0+aWxpX2Zvcm1hdC5pbGZfZmllbGRzICYgWEZTX0lMT0dfQUVYVCkgeworI2lmZGVmIERFQlVHCisJCQlpbnQgbnJlY3MgPSBpcC0+aV9hZnAtPmlmX2J5dGVzIC8KKwkJCQkodWludClzaXplb2YoeGZzX2JtYnRfcmVjX3QpOworCQkJQVNTRVJUKG5yZWNzID4gMCk7CisJCQlBU1NFUlQobnJlY3MgPT0gaXAtPmlfZC5kaV9hbmV4dGVudHMpOwogCQkJQVNTRVJUKGlwLT5pX2FmcC0+aWZfYnl0ZXMgPiAwKTsKIAkJCUFTU0VSVChpcC0+aV9hZnAtPmlmX3UxLmlmX2V4dGVudHMgIT0gTlVMTCk7CiAJCQlBU1NFUlQoaXAtPmlfZC5kaV9hbmV4dGVudHMgPiAwKTsKLSNpZmRlZiBERUJVRwotCQkJbnJlY3MgPSBpcC0+aV9hZnAtPmlmX2J5dGVzIC8KLQkJCQkodWludClzaXplb2YoeGZzX2JtYnRfcmVjX3QpOwogI2VuZGlmCi0JCQlBU1NFUlQobnJlY3MgPiAwKTsKLQkJCUFTU0VSVChucmVjcyA9PSBpcC0+aV9kLmRpX2FuZXh0ZW50cyk7CiAjaWZkZWYgWEZTX05BVElWRV9IT1NUCiAJCQkvKgogCQkJICogVGhlcmUgYXJlIG5vdCBkZWxheWVkIGFsbG9jYXRpb24gZXh0ZW50cwogCQkJICogZm9yIGF0dHJpYnV0ZXMsIHNvIGp1c3QgcG9pbnQgYXQgdGhlIGFycmF5LgogCQkJICovCi0JCQl2ZWNwLT5pX2FkZHIgPSAoY2hhciAqKShpcC0+aV9hZnAtPmlmX3UxLmlmX2V4dGVudHMpOworCQkJdmVjcC0+aV9hZGRyID0gaXAtPmlfYWZwLT5pZl91MS5pZl9leHRlbnRzOwogCQkJdmVjcC0+aV9sZW4gPSBpcC0+aV9hZnAtPmlmX2J5dGVzOwogI2Vsc2UKIAkJCUFTU0VSVChpaXAtPmlsaV9hZXh0ZW50c19idWYgPT0gTlVMTCk7CkBAIC00NzMsNyArNDYyLDcgQEAKIAkJCWV4dF9idWZmZXIgPSBrbWVtX2FsbG9jKGlwLT5pX2FmcC0+aWZfYnl0ZXMsCiAJCQkJS01fU0xFRVApOwogCQkJaWlwLT5pbGlfYWV4dGVudHNfYnVmID0gZXh0X2J1ZmZlcjsKLQkJCXZlY3AtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdClleHRfYnVmZmVyOworCQkJdmVjcC0+aV9hZGRyID0gZXh0X2J1ZmZlcjsKIAkJCXZlY3AtPmlfbGVuID0geGZzX2lleHRlbnRzX2NvcHkoaXAsIGV4dF9idWZmZXIsCiAJCQkJCVhGU19BVFRSX0ZPUkspOwogI2VuZGlmCkBAIC00OTAsNyArNDc5LDcgQEAKIAkJaWYgKGlpcC0+aWxpX2Zvcm1hdC5pbGZfZmllbGRzICYgWEZTX0lMT0dfQUJST09UKSB7CiAJCQlBU1NFUlQoaXAtPmlfYWZwLT5pZl9icm9vdF9ieXRlcyA+IDApOwogCQkJQVNTRVJUKGlwLT5pX2FmcC0+aWZfYnJvb3QgIT0gTlVMTCk7Ci0JCQl2ZWNwLT5pX2FkZHIgPSAoeGZzX2NhZGRyX3QpaXAtPmlfYWZwLT5pZl9icm9vdDsKKwkJCXZlY3AtPmlfYWRkciA9IGlwLT5pX2FmcC0+aWZfYnJvb3Q7CiAJCQl2ZWNwLT5pX2xlbiA9IGlwLT5pX2FmcC0+aWZfYnJvb3RfYnl0ZXM7CiAJCQl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0lBVFRSX0JST09UOwogCQkJdmVjcCsrOwpAQCAtNTA2LDcgKzQ5NSw3IEBACiAJCQlBU1NFUlQoaXAtPmlfYWZwLT5pZl9ieXRlcyA+IDApOwogCQkJQVNTRVJUKGlwLT5pX2FmcC0+aWZfdTEuaWZfZGF0YSAhPSBOVUxMKTsKIAotCQkJdmVjcC0+aV9hZGRyID0gKHhmc19jYWRkcl90KWlwLT5pX2FmcC0+aWZfdTEuaWZfZGF0YTsKKwkJCXZlY3AtPmlfYWRkciA9IGlwLT5pX2FmcC0+aWZfdTEuaWZfZGF0YTsKIAkJCS8qCiAJCQkgKiBSb3VuZCBpX2J5dGVzIHVwIHRvIGEgd29yZCBib3VuZGFyeS4KIAkJCSAqIFRoZSB1bmRlcmx5aW5nIG1lbW9yeSBpcyBndWFyYW50ZWVkIHRvCkBAIC01MjgsNyArNTE3LDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JQVNTRVJUKG52ZWNzID09IGlpcC0+aWxpX2l0ZW0ubGlfZGVzYy0+bGlkX3NpemUpOworCUFTU0VSVChudmVjcyA9PSBsaXAtPmxpX2Rlc2MtPmxpZF9zaXplKTsKIAlpaXAtPmlsaV9mb3JtYXQuaWxmX3NpemUgPSBudmVjczsKIH0KIApAQCAtNTM5LDEyICs1MjgsMTQgQEAKICAqLwogU1RBVElDIHZvaWQKIHhmc19pbm9kZV9pdGVtX3BpbigKLQl4ZnNfaW5vZGVfbG9nX2l0ZW1fdAkqaWlwKQorCXN0cnVjdCB4ZnNfbG9nX2l0ZW0JKmxpcCkKIHsKLQlBU1NFUlQoeGZzX2lzaWxvY2tlZChpaXAtPmlsaV9pbm9kZSwgWEZTX0lMT0NLX0VYQ0wpKTsKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IElOT0RFX0lURU0obGlwKS0+aWxpX2lub2RlOwogCi0JdHJhY2VfeGZzX2lub2RlX3BpbihpaXAtPmlsaV9pbm9kZSwgX1JFVF9JUF8pOwotCWF0b21pY19pbmMoJmlpcC0+aWxpX2lub2RlLT5pX3BpbmNvdW50KTsKKwlBU1NFUlQoeGZzX2lzaWxvY2tlZChpcCwgWEZTX0lMT0NLX0VYQ0wpKTsKKworCXRyYWNlX3hmc19pbm9kZV9waW4oaXAsIF9SRVRfSVBfKTsKKwlhdG9taWNfaW5jKCZpcC0+aV9waW5jb3VudCk7CiB9CiAKIApAQCAtNTU0LDEyICs1NDUsMTIgQEAKICAqCiAgKiBBbHNvIHdha2UgdXAgYW55b25lIGluIHhmc19pdW5waW5fd2FpdCgpIGlmIHRoZSBjb3VudCBnb2VzIHRvIDAuCiAgKi8KLS8qIEFSR1NVU0VEICovCiBTVEFUSUMgdm9pZAogeGZzX2lub2RlX2l0ZW1fdW5waW4oCi0JeGZzX2lub2RlX2xvZ19pdGVtX3QJKmlpcCkKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXAsCisJaW50CQkJcmVtb3ZlKQogewotCXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gaWlwLT5pbGlfaW5vZGU7CisJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBJTk9ERV9JVEVNKGxpcCktPmlsaV9pbm9kZTsKIAogCXRyYWNlX3hmc19pbm9kZV91bnBpbihpcCwgX1JFVF9JUF8pOwogCUFTU0VSVChhdG9taWNfcmVhZCgmaXAtPmlfcGluY291bnQpID4gMCk7CkBAIC01NjcsMTUgKzU1OCw2IEBACiAJCXdha2VfdXAoJmlwLT5pX2lwaW5fd2FpdCk7CiB9CiAKLS8qIEFSR1NVU0VEICovCi1TVEFUSUMgdm9pZAoteGZzX2lub2RlX2l0ZW1fdW5waW5fcmVtb3ZlKAotCXhmc19pbm9kZV9sb2dfaXRlbV90CSppaXAsCi0JeGZzX3RyYW5zX3QJCSp0cCkKLXsKLQl4ZnNfaW5vZGVfaXRlbV91bnBpbihpaXApOwotfQotCiAvKgogICogVGhpcyBpcyBjYWxsZWQgdG8gYXR0ZW1wdCB0byBsb2NrIHRoZSBpbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhpcwogICogaW5vZGUgbG9nIGl0ZW0sIGluIHByZXBhcmF0aW9uIGZvciB0aGUgcHVzaCByb3V0aW5lIHdoaWNoIGRvZXMgdGhlIGFjdHVhbApAQCAtNTkxLDE5ICs1NzMsMTYgQEAKICAqLwogU1RBVElDIHVpbnQKIHhmc19pbm9kZV9pdGVtX3RyeWxvY2soCi0JeGZzX2lub2RlX2xvZ19pdGVtX3QJKmlpcCkKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXApCiB7Ci0JcmVnaXN0ZXIgeGZzX2lub2RlX3QJKmlwOworCXN0cnVjdCB4ZnNfaW5vZGVfbG9nX2l0ZW0gKmlpcCA9IElOT0RFX0lURU0obGlwKTsKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IGlpcC0+aWxpX2lub2RlOwogCi0JaXAgPSBpaXAtPmlsaV9pbm9kZTsKLQotCWlmICh4ZnNfaXBpbmNvdW50KGlwKSA+IDApIHsKKwlpZiAoeGZzX2lwaW5jb3VudChpcCkgPiAwKQogCQlyZXR1cm4gWEZTX0lURU1fUElOTkVEOwotCX0KIAotCWlmICgheGZzX2lsb2NrX25vd2FpdChpcCwgWEZTX0lMT0NLX1NIQVJFRCkpIHsKKwlpZiAoIXhmc19pbG9ja19ub3dhaXQoaXAsIFhGU19JTE9DS19TSEFSRUQpKQogCQlyZXR1cm4gWEZTX0lURU1fTE9DS0VEOwotCX0KIAogCWlmICgheGZzX2lmbG9ja19ub3dhaXQoaXApKSB7CiAJCS8qCkBAIC02MjksNyArNjA4LDcgQEAKIAlpZiAoIVhGU19GT1JDRURfU0hVVERPV04oaXAtPmlfbW91bnQpKSB7CiAJCUFTU0VSVChpaXAtPmlsaV9mb3JtYXQuaWxmX2ZpZWxkcyAhPSAwKTsKIAkJQVNTRVJUKGlpcC0+aWxpX2xvZ2dlZCA9PSAwKTsKLQkJQVNTRVJUKGlpcC0+aWxpX2l0ZW0ubGlfZmxhZ3MgJiBYRlNfTElfSU5fQUlMKTsKKwkJQVNTRVJUKGxpcC0+bGlfZmxhZ3MgJiBYRlNfTElfSU5fQUlMKTsKIAl9CiAjZW5kaWYKIAlyZXR1cm4gWEZTX0lURU1fU1VDQ0VTUzsKQEAgLTY0MywyNiArNjIyLDE4IEBACiAgKi8KIFNUQVRJQyB2b2lkCiB4ZnNfaW5vZGVfaXRlbV91bmxvY2soCi0JeGZzX2lub2RlX2xvZ19pdGVtX3QJKmlpcCkKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXApCiB7Ci0JdWludAkJaG9sZDsKLQl1aW50CQlpb2xvY2tlZDsKLQl1aW50CQlsb2NrX2ZsYWdzOwotCXhmc19pbm9kZV90CSppcDsKKwlzdHJ1Y3QgeGZzX2lub2RlX2xvZ19pdGVtICppaXAgPSBJTk9ERV9JVEVNKGxpcCk7CisJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBpaXAtPmlsaV9pbm9kZTsKKwl1bnNpZ25lZCBzaG9ydAkJbG9ja19mbGFnczsKIAotCUFTU0VSVChpaXAgIT0gTlVMTCk7CiAJQVNTRVJUKGlpcC0+aWxpX2lub2RlLT5pX2l0ZW1wICE9IE5VTEwpOwogCUFTU0VSVCh4ZnNfaXNpbG9ja2VkKGlpcC0+aWxpX2lub2RlLCBYRlNfSUxPQ0tfRVhDTCkpOwotCUFTU0VSVCgoIShpaXAtPmlsaV9pbm9kZS0+aV9pdGVtcC0+aWxpX2ZsYWdzICYKLQkJICBYRlNfSUxJX0lPTE9DS0VEX0VYQ0wpKSB8fAotCSAgICAgICB4ZnNfaXNpbG9ja2VkKGlpcC0+aWxpX2lub2RlLCBYRlNfSU9MT0NLX0VYQ0wpKTsKLQlBU1NFUlQoKCEoaWlwLT5pbGlfaW5vZGUtPmlfaXRlbXAtPmlsaV9mbGFncyAmCi0JCSAgWEZTX0lMSV9JT0xPQ0tFRF9TSEFSRUQpKSB8fAotCSAgICAgICB4ZnNfaXNpbG9ja2VkKGlpcC0+aWxpX2lub2RlLCBYRlNfSU9MT0NLX1NIQVJFRCkpOworCiAJLyoKIAkgKiBDbGVhciB0aGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpbiB0aGUgaW5vZGUuCiAJICovCi0JaXAgPSBpaXAtPmlsaV9pbm9kZTsKIAlpcC0+aV90cmFuc3AgPSBOVUxMOwogCiAJLyoKQEAgLTY4NiwzNCArNjU3LDExIEBACiAJCWlpcC0+aWxpX2FleHRlbnRzX2J1ZiA9IE5VTEw7CiAJfQogCi0JLyoKLQkgKiBGaWd1cmUgb3V0IGlmIHdlIHNob3VsZCB1bmxvY2sgdGhlIGlub2RlIG9yIG5vdC4KLQkgKi8KLQlob2xkID0gaWlwLT5pbGlfZmxhZ3MgJiBYRlNfSUxJX0hPTEQ7Ci0KLQkvKgotCSAqIEJlZm9yZSBjbGVhcmluZyBvdXQgdGhlIGZsYWdzLCByZW1lbWJlciB3aGV0aGVyIHdlCi0JICogYXJlIGhvbGRpbmcgdGhlIGlub2RlJ3MgSU8gbG9jay4KLQkgKi8KLQlpb2xvY2tlZCA9IGlpcC0+aWxpX2ZsYWdzICYgWEZTX0lMSV9JT0xPQ0tFRF9BTlk7Ci0KLQkvKgotCSAqIENsZWFyIG91dCB0aGUgZmllbGRzIG9mIHRoZSBpbm9kZSBsb2cgaXRlbSBwYXJ0aWN1bGFyCi0JICogdG8gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCi0JICovCi0JaWlwLT5pbGlfZmxhZ3MgPSAwOwotCi0JLyoKLQkgKiBVbmxvY2sgdGhlIGlub2RlIGlmIFhGU19JTElfSE9MRCB3YXMgbm90IHNldC4KLQkgKi8KLQlpZiAoIWhvbGQpIHsKLQkJbG9ja19mbGFncyA9IFhGU19JTE9DS19FWENMOwotCQlpZiAoaW9sb2NrZWQgJiBYRlNfSUxJX0lPTE9DS0VEX0VYQ0wpIHsKLQkJCWxvY2tfZmxhZ3MgfD0gWEZTX0lPTE9DS19FWENMOwotCQl9IGVsc2UgaWYgKGlvbG9ja2VkICYgWEZTX0lMSV9JT0xPQ0tFRF9TSEFSRUQpIHsKLQkJCWxvY2tfZmxhZ3MgfD0gWEZTX0lPTE9DS19TSEFSRUQ7Ci0JCX0KLQkJeGZzX2lwdXQoaWlwLT5pbGlfaW5vZGUsIGxvY2tfZmxhZ3MpOworCWxvY2tfZmxhZ3MgPSBpaXAtPmlsaV9sb2NrX2ZsYWdzOworCWlpcC0+aWxpX2xvY2tfZmxhZ3MgPSAwOworCWlmIChsb2NrX2ZsYWdzKSB7CisJCXhmc19pdW5sb2NrKGlpcC0+aWxpX2lub2RlLCBsb2NrX2ZsYWdzKTsKKwkJSVJFTEUoaWlwLT5pbGlfaW5vZGUpOwogCX0KIH0KIApAQCAtNzI1LDEzICs2NzMsMTIgQEAKICAqIGlzIHRoZSBvbmx5IG9uZSB0aGF0IG1hdHRlcnMuICBUaGVyZWZvcmUsIHNpbXBseSByZXR1cm4gdGhlCiAgKiBnaXZlbiBsc24uCiAgKi8KLS8qQVJHU1VTRUQqLwogU1RBVElDIHhmc19sc25fdAogeGZzX2lub2RlX2l0ZW1fY29tbWl0dGVkKAotCXhmc19pbm9kZV9sb2dfaXRlbV90CSppaXAsCisJc3RydWN0IHhmc19sb2dfaXRlbQkqbGlwLAogCXhmc19sc25fdAkJbHNuKQogewotCXJldHVybiAobHNuKTsKKwlyZXR1cm4gbHNuOwogfQogCiAvKgpAQCAtNzQzLDEzICs2OTAsMTIgQEAKICAqLwogU1RBVElDIHZvaWQKIHhmc19pbm9kZV9pdGVtX3B1c2hidWYoCi0JeGZzX2lub2RlX2xvZ19pdGVtX3QJKmlpcCkKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXApCiB7Ci0JeGZzX2lub2RlX3QJKmlwOwotCXhmc19tb3VudF90CSptcDsKLQl4ZnNfYnVmX3QJKmJwOworCXN0cnVjdCB4ZnNfaW5vZGVfbG9nX2l0ZW0gKmlpcCA9IElOT0RFX0lURU0obGlwKTsKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IGlpcC0+aWxpX2lub2RlOworCXN0cnVjdCB4ZnNfYnVmCQkqYnA7CiAKLQlpcCA9IGlpcC0+aWxpX2lub2RlOwogCUFTU0VSVCh4ZnNfaXNpbG9ja2VkKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKSk7CiAKIAkvKgpAQCAtNzU3LDE0ICs3MDMsMTMgQEAKIAkgKiBpbm9kZSB3YXMgdGFrZW4gb2ZmIHRoZSBBSUwuIFNvLCBqdXN0IGdldCBvdXQuCiAJICovCiAJaWYgKGNvbXBsZXRpb25fZG9uZSgmaXAtPmlfZmx1c2gpIHx8Ci0JICAgICgoaWlwLT5pbGlfaXRlbS5saV9mbGFncyAmIFhGU19MSV9JTl9BSUwpID09IDApKSB7CisJICAgICEobGlwLT5saV9mbGFncyAmIFhGU19MSV9JTl9BSUwpKSB7CiAJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKIAkJcmV0dXJuOwogCX0KIAotCW1wID0gaXAtPmlfbW91bnQ7Ci0JYnAgPSB4ZnNfaW5jb3JlKG1wLT5tX2RkZXZfdGFyZ3AsIGlpcC0+aWxpX2Zvcm1hdC5pbGZfYmxrbm8sCi0JCSAgICBpaXAtPmlsaV9mb3JtYXQuaWxmX2xlbiwgWEJGX1RSWUxPQ0spOworCWJwID0geGZzX2luY29yZShpcC0+aV9tb3VudC0+bV9kZGV2X3RhcmdwLCBpaXAtPmlsaV9mb3JtYXQuaWxmX2Jsa25vLAorCQkJaWlwLT5pbGlfZm9ybWF0LmlsZl9sZW4sIFhCRl9UUllMT0NLKTsKIAogCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKIAlpZiAoIWJwKQpAQCAtNzcyLDEwICs3MTcsOCBAQAogCWlmIChYRlNfQlVGX0lTREVMQVlXUklURShicCkpCiAJCXhmc19idWZfZGVsd3JpX3Byb21vdGUoYnApOwogCXhmc19idWZfcmVsc2UoYnApOwotCXJldHVybjsKIH0KIAotCiAvKgogICogVGhpcyBpcyBjYWxsZWQgdG8gYXN5bmNocm9ub3VzbHkgd3JpdGUgdGhlIGlub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCiAgKiBpbm9kZSBsb2cgaXRlbSBvdXQgdG8gZGlzay4gVGhlIGlub2RlIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gbG9ja2VkIGJ5CkBAIC03ODMsMTQgKzcyNiwxNCBAQAogICovCiBTVEFUSUMgdm9pZAogeGZzX2lub2RlX2l0ZW1fcHVzaCgKLQl4ZnNfaW5vZGVfbG9nX2l0ZW1fdAkqaWlwKQorCXN0cnVjdCB4ZnNfbG9nX2l0ZW0JKmxpcCkKIHsKLQl4ZnNfaW5vZGVfdAkqaXA7Ci0KLQlpcCA9IGlpcC0+aWxpX2lub2RlOworCXN0cnVjdCB4ZnNfaW5vZGVfbG9nX2l0ZW0gKmlpcCA9IElOT0RFX0lURU0obGlwKTsKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IGlpcC0+aWxpX2lub2RlOwogCiAJQVNTRVJUKHhmc19pc2lsb2NrZWQoaXAsIFhGU19JTE9DS19TSEFSRUQpKTsKIAlBU1NFUlQoIWNvbXBsZXRpb25fZG9uZSgmaXAtPmlfZmx1c2gpKTsKKwogCS8qCiAJICogU2luY2Ugd2Ugd2VyZSBhYmxlIHRvIGxvY2sgdGhlIGlub2RlJ3MgZmx1c2ggbG9jayBhbmQKIAkgKiB3ZSBmb3VuZCBpdCBvbiB0aGUgQUlMLCB0aGUgaW5vZGUgbXVzdCBiZSBkaXJ0eS4gIFRoaXMKQEAgLTgxMyw0MyArNzU2LDM0IEBACiAJICovCiAJKHZvaWQpIHhmc19pZmx1c2goaXAsIDApOwogCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKLQotCXJldHVybjsKIH0KIAogLyoKICAqIFhYWCByY2MgLSB0aGlzIG9uZSByZWFsbHkgaGFzIHRvIGRvIHNvbWV0aGluZy4gIFByb2JhYmx5IG5lZWRzCiAgKiB0byBzdGFtcCBpbiBhIG5ldyBmaWVsZCBpbiB0aGUgaW5jb3JlIGlub2RlLgogICovCi0vKiBBUkdTVVNFRCAqLwogU1RBVElDIHZvaWQKIHhmc19pbm9kZV9pdGVtX2NvbW1pdHRpbmcoCi0JeGZzX2lub2RlX2xvZ19pdGVtX3QJKmlpcCwKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXAsCiAJeGZzX2xzbl90CQlsc24pCiB7Ci0JaWlwLT5pbGlfbGFzdF9sc24gPSBsc247Ci0JcmV0dXJuOworCUlOT0RFX0lURU0obGlwKS0+aWxpX2xhc3RfbHNuID0gbHNuOwogfQogCiAvKgogICogVGhpcyBpcyB0aGUgb3BzIHZlY3RvciBzaGFyZWQgYnkgYWxsIGJ1ZiBsb2cgaXRlbXMuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgeGZzX2l0ZW1fb3BzIHhmc19pbm9kZV9pdGVtX29wcyA9IHsKLQkuaW9wX3NpemUJPSAodWludCgqKSh4ZnNfbG9nX2l0ZW1fdCopKXhmc19pbm9kZV9pdGVtX3NpemUsCi0JLmlvcF9mb3JtYXQJPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCosIHhmc19sb2dfaW92ZWNfdCopKQotCQkJCQl4ZnNfaW5vZGVfaXRlbV9mb3JtYXQsCi0JLmlvcF9waW4JPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCopKXhmc19pbm9kZV9pdGVtX3BpbiwKLQkuaW9wX3VucGluCT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfaW5vZGVfaXRlbV91bnBpbiwKLQkuaW9wX3VucGluX3JlbW92ZSA9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KiwgeGZzX3RyYW5zX3QqKSkKLQkJCQkJeGZzX2lub2RlX2l0ZW1fdW5waW5fcmVtb3ZlLAotCS5pb3BfdHJ5bG9jawk9ICh1aW50KCopKHhmc19sb2dfaXRlbV90KikpeGZzX2lub2RlX2l0ZW1fdHJ5bG9jaywKLQkuaW9wX3VubG9jawk9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KikpeGZzX2lub2RlX2l0ZW1fdW5sb2NrLAotCS5pb3BfY29tbWl0dGVkCT0gKHhmc19sc25fdCgqKSh4ZnNfbG9nX2l0ZW1fdCosIHhmc19sc25fdCkpCi0JCQkJCXhmc19pbm9kZV9pdGVtX2NvbW1pdHRlZCwKLQkuaW9wX3B1c2gJPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCopKXhmc19pbm9kZV9pdGVtX3B1c2gsCi0JLmlvcF9wdXNoYnVmCT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfaW5vZGVfaXRlbV9wdXNoYnVmLAotCS5pb3BfY29tbWl0dGluZyA9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KiwgeGZzX2xzbl90KSkKLQkJCQkJeGZzX2lub2RlX2l0ZW1fY29tbWl0dGluZworCS5pb3Bfc2l6ZQk9IHhmc19pbm9kZV9pdGVtX3NpemUsCisJLmlvcF9mb3JtYXQJPSB4ZnNfaW5vZGVfaXRlbV9mb3JtYXQsCisJLmlvcF9waW4JPSB4ZnNfaW5vZGVfaXRlbV9waW4sCisJLmlvcF91bnBpbgk9IHhmc19pbm9kZV9pdGVtX3VucGluLAorCS5pb3BfdHJ5bG9jawk9IHhmc19pbm9kZV9pdGVtX3RyeWxvY2ssCisJLmlvcF91bmxvY2sJPSB4ZnNfaW5vZGVfaXRlbV91bmxvY2ssCisJLmlvcF9jb21taXR0ZWQJPSB4ZnNfaW5vZGVfaXRlbV9jb21taXR0ZWQsCisJLmlvcF9wdXNoCT0geGZzX2lub2RlX2l0ZW1fcHVzaCwKKwkuaW9wX3B1c2hidWYJPSB4ZnNfaW5vZGVfaXRlbV9wdXNoYnVmLAorCS5pb3BfY29tbWl0dGluZyA9IHhmc19pbm9kZV9pdGVtX2NvbW1pdHRpbmcKIH07CiAKIApAQCAtODU4LDEwICs3OTIsMTAgQEAKICAqLwogdm9pZAogeGZzX2lub2RlX2l0ZW1faW5pdCgKLQl4ZnNfaW5vZGVfdAkqaXAsCi0JeGZzX21vdW50X3QJKm1wKQorCXN0cnVjdCB4ZnNfaW5vZGUJKmlwLAorCXN0cnVjdCB4ZnNfbW91bnQJKm1wKQogewotCXhmc19pbm9kZV9sb2dfaXRlbV90CSppaXA7CisJc3RydWN0IHhmc19pbm9kZV9sb2dfaXRlbSAqaWlwOwogCiAJQVNTRVJUKGlwLT5pX2l0ZW1wID09IE5VTEwpOwogCWlpcCA9IGlwLT5pX2l0ZW1wID0ga21lbV96b25lX3phbGxvYyh4ZnNfaWxpX3pvbmUsIEtNX1NMRUVQKTsKQEAgLTg5OSwxNCArODMzLDE0IEBACiAgKiBmcm9tIHRoZSBBSUwgaWYgaXQgaGFzIG5vdCBiZWVuIHJlLWxvZ2dlZCwgYW5kIHVubG9ja2luZyB0aGUgaW5vZGUncwogICogZmx1c2ggbG9jay4KICAqLwotLypBUkdTVVNFRCovCiB2b2lkCiB4ZnNfaWZsdXNoX2RvbmUoCi0JeGZzX2J1Zl90CQkqYnAsCi0JeGZzX2lub2RlX2xvZ19pdGVtX3QJKmlpcCkKKwlzdHJ1Y3QgeGZzX2J1ZgkJKmJwLAorCXN0cnVjdCB4ZnNfbG9nX2l0ZW0JKmxpcCkKIHsKKwlzdHJ1Y3QgeGZzX2lub2RlX2xvZ19pdGVtICppaXAgPSBJTk9ERV9JVEVNKGxpcCk7CiAJeGZzX2lub2RlX3QJCSppcCA9IGlpcC0+aWxpX2lub2RlOwotCXN0cnVjdCB4ZnNfYWlsCQkqYWlscCA9IGlpcC0+aWxpX2l0ZW0ubGlfYWlscDsKKwlzdHJ1Y3QgeGZzX2FpbAkJKmFpbHAgPSBsaXAtPmxpX2FpbHA7CiAKIAkvKgogCSAqIFdlIG9ubHkgd2FudCB0byBwdWxsIHRoZSBpdGVtIGZyb20gdGhlIEFJTCBpZiBpdCBpcwpAQCAtOTE3LDEyICs4NTEsMTEgQEAKIAkgKiB0aGUgbG9jayBzaW5jZSBpdCdzIGNoZWFwZXIsIGFuZCB0aGVuIHdlIHJlY2hlY2sgd2hpbGUKIAkgKiBob2xkaW5nIHRoZSBsb2NrIGJlZm9yZSByZW1vdmluZyB0aGUgaW5vZGUgZnJvbSB0aGUgQUlMLgogCSAqLwotCWlmIChpaXAtPmlsaV9sb2dnZWQgJiYKLQkgICAgKGlpcC0+aWxpX2l0ZW0ubGlfbHNuID09IGlpcC0+aWxpX2ZsdXNoX2xzbikpIHsKKwlpZiAoaWlwLT5pbGlfbG9nZ2VkICYmIGxpcC0+bGlfbHNuID09IGlpcC0+aWxpX2ZsdXNoX2xzbikgewogCQlzcGluX2xvY2soJmFpbHAtPnhhX2xvY2spOwotCQlpZiAoaWlwLT5pbGlfaXRlbS5saV9sc24gPT0gaWlwLT5pbGlfZmx1c2hfbHNuKSB7CisJCWlmIChsaXAtPmxpX2xzbiA9PSBpaXAtPmlsaV9mbHVzaF9sc24pIHsKIAkJCS8qIHhmc190cmFuc19haWxfZGVsZXRlKCkgZHJvcHMgdGhlIEFJTCBsb2NrLiAqLwotCQkJeGZzX3RyYW5zX2FpbF9kZWxldGUoYWlscCwgKHhmc19sb2dfaXRlbV90KilpaXApOworCQkJeGZzX3RyYW5zX2FpbF9kZWxldGUoYWlscCwgbGlwKTsKIAkJfSBlbHNlIHsKIAkJCXNwaW5fdW5sb2NrKCZhaWxwLT54YV9sb2NrKTsKIAkJfQpAQCAtOTQwLDggKzg3Myw2IEBACiAJICogUmVsZWFzZSB0aGUgaW5vZGUncyBmbHVzaCBsb2NrIHNpbmNlIHdlJ3JlIGRvbmUgd2l0aCBpdC4KIAkgKi8KIAl4ZnNfaWZ1bmxvY2soaXApOwotCi0JcmV0dXJuOwogfQogCiAvKgpAQCAtOTU3LDEwICs4ODgsOCBAQAogCXhmc19pbm9kZV90CQkqaXApCiB7CiAJeGZzX2lub2RlX2xvZ19pdGVtX3QJKmlpcCA9IGlwLT5pX2l0ZW1wOwotCXhmc19tb3VudF90CQkqbXA7CiAKIAlpaXAgPSBpcC0+aV9pdGVtcDsKLQltcCA9IGlwLT5pX21vdW50OwogCWlmIChpaXApIHsKIAkJc3RydWN0IHhmc19haWwJKmFpbHAgPSBpaXAtPmlsaV9pdGVtLmxpX2FpbHA7CiAJCWlmIChpaXAtPmlsaV9pdGVtLmxpX2ZsYWdzICYgWEZTX0xJX0lOX0FJTCkgewpAQCAtOTkxLDEwICs5MjAsMTAgQEAKIAogdm9pZAogeGZzX2lzdGFsZV9kb25lKAotCXhmc19idWZfdAkJKmJwLAotCXhmc19pbm9kZV9sb2dfaXRlbV90CSppaXApCisJc3RydWN0IHhmc19idWYJCSpicCwKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXApCiB7Ci0JeGZzX2lmbHVzaF9hYm9ydChpaXAtPmlsaV9pbm9kZSk7CisJeGZzX2lmbHVzaF9hYm9ydChJTk9ERV9JVEVNKGxpcCktPmlsaV9pbm9kZSk7CiB9CiAKIC8qCkBAIC0xMDA3LDkgKzkzNiw4IEBACiAJeGZzX2lub2RlX2xvZ19mb3JtYXRfdAkqaW5fZikKIHsKIAlpZiAoYnVmLT5pX2xlbiA9PSBzaXplb2YoeGZzX2lub2RlX2xvZ19mb3JtYXRfMzJfdCkpIHsKLQkJeGZzX2lub2RlX2xvZ19mb3JtYXRfMzJfdCAqaW5fZjMyOworCQl4ZnNfaW5vZGVfbG9nX2Zvcm1hdF8zMl90ICppbl9mMzIgPSBidWYtPmlfYWRkcjsKIAotCQlpbl9mMzIgPSAoeGZzX2lub2RlX2xvZ19mb3JtYXRfMzJfdCAqKWJ1Zi0+aV9hZGRyOwogCQlpbl9mLT5pbGZfdHlwZSA9IGluX2YzMi0+aWxmX3R5cGU7CiAJCWluX2YtPmlsZl9zaXplID0gaW5fZjMyLT5pbGZfc2l6ZTsKIAkJaW5fZi0+aWxmX2ZpZWxkcyA9IGluX2YzMi0+aWxmX2ZpZWxkczsKQEAgLTEwMjUsOSArOTUzLDggQEAKIAkJaW5fZi0+aWxmX2JvZmZzZXQgPSBpbl9mMzItPmlsZl9ib2Zmc2V0OwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgaWYgKGJ1Zi0+aV9sZW4gPT0gc2l6ZW9mKHhmc19pbm9kZV9sb2dfZm9ybWF0XzY0X3QpKXsKLQkJeGZzX2lub2RlX2xvZ19mb3JtYXRfNjRfdCAqaW5fZjY0OworCQl4ZnNfaW5vZGVfbG9nX2Zvcm1hdF82NF90ICppbl9mNjQgPSBidWYtPmlfYWRkcjsKIAotCQlpbl9mNjQgPSAoeGZzX2lub2RlX2xvZ19mb3JtYXRfNjRfdCAqKWJ1Zi0+aV9hZGRyOwogCQlpbl9mLT5pbGZfdHlwZSA9IGluX2Y2NC0+aWxmX3R5cGU7CiAJCWluX2YtPmlsZl9zaXplID0gaW5fZjY0LT5pbGZfc2l6ZTsKIAkJaW5fZi0+aWxmX2ZpZWxkcyA9IGluX2Y2NC0+aWxmX2ZpZWxkczsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5oIGIvZnMveGZzL3hmc19pbm9kZV9pdGVtLmgKaW5kZXggOWE0Njc5NS4uZDNkZWU2MWUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5oCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5oCkBAIC0xMDMsMTIgKzEwMyw2IEBACiAJCQkJIFhGU19JTE9HX0FEQVRBIHwgWEZTX0lMT0dfQUVYVCB8IFwKIAkJCQkgWEZTX0lMT0dfQUJST09UKQogCi0jZGVmaW5lCVhGU19JTElfSE9MRAkJMHgxCi0jZGVmaW5lCVhGU19JTElfSU9MT0NLRURfRVhDTAkweDIKLSNkZWZpbmUJWEZTX0lMSV9JT0xPQ0tFRF9TSEFSRUQJMHg0Ci0KLSNkZWZpbmUJWEZTX0lMSV9JT0xPQ0tFRF9BTlkgICAoWEZTX0lMSV9JT0xPQ0tFRF9FWENMIHwgWEZTX0lMSV9JT0xPQ0tFRF9TSEFSRUQpCi0KIHN0YXRpYyBpbmxpbmUgaW50IHhmc19pbG9nX2Zicm9vdChpbnQgdykKIHsKIAlyZXR1cm4gKHcgPT0gWEZTX0RBVEFfRk9SSyA/IFhGU19JTE9HX0RCUk9PVCA6IFhGU19JTE9HX0FCUk9PVCk7CkBAIC0xMzcsNyArMTMxLDcgQEAKIAlzdHJ1Y3QgeGZzX2lub2RlCSppbGlfaW5vZGU7CSAgIC8qIGlub2RlIHB0ciAqLwogCXhmc19sc25fdAkJaWxpX2ZsdXNoX2xzbjsJICAgLyogbHNuIGF0IGxhc3QgZmx1c2ggKi8KIAl4ZnNfbHNuX3QJCWlsaV9sYXN0X2xzbjsJICAgLyogbHNuIGF0IGxhc3QgdHJhbnNhY3Rpb24gKi8KLQl1bnNpZ25lZCBzaG9ydAkJaWxpX2ZsYWdzOwkgICAvKiBtaXNjIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQJCWlsaV9sb2NrX2ZsYWdzOwkgICAvKiBsb2NrIGZsYWdzICovCiAJdW5zaWduZWQgc2hvcnQJCWlsaV9sb2dnZWQ7CSAgIC8qIGZsdXNoZWQgbG9nZ2VkIGRhdGEgKi8KIAl1bnNpZ25lZCBpbnQJCWlsaV9sYXN0X2ZpZWxkczsgICAvKiBmaWVsZHMgd2hlbiBmbHVzaGVkICovCiAJc3RydWN0IHhmc19ibWJ0X3JlYwkqaWxpX2V4dGVudHNfYnVmOyAgLyogYXJyYXkgb2YgbG9nZ2VkCkBAIC0xNjEsOCArMTU1LDggQEAKIAogZXh0ZXJuIHZvaWQgeGZzX2lub2RlX2l0ZW1faW5pdChzdHJ1Y3QgeGZzX2lub2RlICosIHN0cnVjdCB4ZnNfbW91bnQgKik7CiBleHRlcm4gdm9pZCB4ZnNfaW5vZGVfaXRlbV9kZXN0cm95KHN0cnVjdCB4ZnNfaW5vZGUgKik7Ci1leHRlcm4gdm9pZCB4ZnNfaWZsdXNoX2RvbmUoc3RydWN0IHhmc19idWYgKiwgeGZzX2lub2RlX2xvZ19pdGVtX3QgKik7Ci1leHRlcm4gdm9pZCB4ZnNfaXN0YWxlX2RvbmUoc3RydWN0IHhmc19idWYgKiwgeGZzX2lub2RlX2xvZ19pdGVtX3QgKik7CitleHRlcm4gdm9pZCB4ZnNfaWZsdXNoX2RvbmUoc3RydWN0IHhmc19idWYgKiwgc3RydWN0IHhmc19sb2dfaXRlbSAqKTsKK2V4dGVybiB2b2lkIHhmc19pc3RhbGVfZG9uZShzdHJ1Y3QgeGZzX2J1ZiAqLCBzdHJ1Y3QgeGZzX2xvZ19pdGVtICopOwogZXh0ZXJuIHZvaWQgeGZzX2lmbHVzaF9hYm9ydChzdHJ1Y3QgeGZzX2lub2RlICopOwogZXh0ZXJuIGludCB4ZnNfaW5vZGVfaXRlbV9mb3JtYXRfY29udmVydCh4ZnNfbG9nX2lvdmVjX3QgKiwKIAkJCQkJIHhmc19pbm9kZV9sb2dfZm9ybWF0X3QgKik7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvbWFwLmMgYi9mcy94ZnMveGZzX2lvbWFwLmMKaW5kZXggZWYxNDk0My4uMjA1NzYxNCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pb21hcC5jCisrKyBiL2ZzL3hmcy94ZnNfaW9tYXAuYwpAQCAtMjMsMTkgKzIzLDE0IEBACiAjaW5jbHVkZSAieGZzX3RyYW5zLmgiCiAjaW5jbHVkZSAieGZzX3NiLmgiCiAjaW5jbHVkZSAieGZzX2FnLmgiCi0jaW5jbHVkZSAieGZzX2RpcjIuaCIKICNpbmNsdWRlICJ4ZnNfYWxsb2MuaCIKLSNpbmNsdWRlICJ4ZnNfZG1hcGkuaCIKICNpbmNsdWRlICJ4ZnNfcXVvdGEuaCIKICNpbmNsdWRlICJ4ZnNfbW91bnQuaCIKICNpbmNsdWRlICJ4ZnNfYm1hcF9idHJlZS5oIgogI2luY2x1ZGUgInhmc19hbGxvY19idHJlZS5oIgogI2luY2x1ZGUgInhmc19pYWxsb2NfYnRyZWUuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMl9zZi5oIgotI2luY2x1ZGUgInhmc19hdHRyX3NmLmgiCiAjaW5jbHVkZSAieGZzX2Rpbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZS5oIgotI2luY2x1ZGUgInhmc19pYWxsb2MuaCIKICNpbmNsdWRlICJ4ZnNfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfYm1hcC5oIgogI2luY2x1ZGUgInhmc19ydGFsbG9jLmgiCkBAIC0xMjMsNyArMTE4LDcgQEAKIAllcnJvciA9IHhmc19ibWFwaShOVUxMLCBpcCwgb2Zmc2V0X2ZzYiwKIAkJCSh4ZnNfZmlsYmxrc190KShlbmRfZnNiIC0gb2Zmc2V0X2ZzYiksCiAJCQlibWFwaV9mbGFncywgIE5VTEwsIDAsIGltYXAsCi0JCQluaW1hcHMsIE5VTEwsIE5VTEwpOworCQkJbmltYXBzLCBOVUxMKTsKIAogCWlmIChlcnJvcikKIAkJZ290byBvdXQ7CkBAIC0xMzgsNyArMTMzLDcgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKGZsYWdzICYgKEJNQVBJX0RJUkVDVHxCTUFQSV9NTUFQKSkgeworCQlpZiAoZmxhZ3MgJiBCTUFQSV9ESVJFQ1QpIHsKIAkJCWVycm9yID0geGZzX2lvbWFwX3dyaXRlX2RpcmVjdChpcCwgb2Zmc2V0LCBjb3VudCwgZmxhZ3MsCiAJCQkJCQkgICAgICAgaW1hcCwgbmltYXBzKTsKIAkJfSBlbHNlIHsKQEAgLTI0Nyw3ICsyNDIsNyBAQAogCXhmc19vZmZfdAlvZmZzZXQsCiAJc2l6ZV90CQljb3VudCwKIAlpbnQJCWZsYWdzLAotCXhmc19ibWJ0X2lyZWNfdCAqcmV0X2ltYXAsCisJeGZzX2JtYnRfaXJlY190ICppbWFwLAogCWludAkJKm5tYXBzKQogewogCXhmc19tb3VudF90CSptcCA9IGlwLT5pX21vdW50OwpAQCAtMjYxLDcgKzI1Niw2IEBACiAJaW50CQlxdW90YV9mbGFnOwogCWludAkJcnQ7CiAJeGZzX3RyYW5zX3QJKnRwOwotCXhmc19ibWJ0X2lyZWNfdCBpbWFwOwogCXhmc19ibWFwX2ZyZWVfdCBmcmVlX2xpc3Q7CiAJdWludAkJcWJsb2NrcywgcmVzYmxrcywgcmVzcnRleHRlbnRzOwogCWludAkJY29tbWl0dGVkOwpAQCAtMjg1LDEwICsyNzksMTAgQEAKIAkJaWYgKGVycm9yKQogCQkJZ290byBlcnJvcl9vdXQ7CiAJfSBlbHNlIHsKLQkJaWYgKCpubWFwcyAmJiAocmV0X2ltYXAtPmJyX3N0YXJ0YmxvY2sgPT0gSE9MRVNUQVJUQkxPQ0spKQorCQlpZiAoKm5tYXBzICYmIChpbWFwLT5icl9zdGFydGJsb2NrID09IEhPTEVTVEFSVEJMT0NLKSkKIAkJCWxhc3RfZnNiID0gTUlOKGxhc3RfZnNiLCAoeGZzX2ZpbGVvZmZfdCkKLQkJCQkJcmV0X2ltYXAtPmJyX2Jsb2NrY291bnQgKwotCQkJCQlyZXRfaW1hcC0+YnJfc3RhcnRvZmYpOworCQkJCQlpbWFwLT5icl9ibG9ja2NvdW50ICsKKwkJCQkJaW1hcC0+YnJfc3RhcnRvZmYpOwogCX0KIAljb3VudF9mc2IgPSBsYXN0X2ZzYiAtIG9mZnNldF9mc2I7CiAJQVNTRVJUKGNvdW50X2ZzYiA+IDApOwpAQCAtMzM0LDIwICszMjgsMjIgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZXJyb3IxOwogCi0JeGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCXhmc190cmFuc19paG9sZCh0cCwgaXApOworCXhmc190cmFuc19pam9pbih0cCwgaXApOwogCiAJYm1hcGlfZmxhZyA9IFhGU19CTUFQSV9XUklURTsKIAlpZiAoKGZsYWdzICYgQk1BUElfRElSRUNUKSAmJiAob2Zmc2V0IDwgaXAtPmlfc2l6ZSB8fCBleHRzeikpCiAJCWJtYXBpX2ZsYWcgfD0gWEZTX0JNQVBJX1BSRUFMTE9DOwogCiAJLyoKLQkgKiBJc3N1ZSB0aGUgeGZzX2JtYXBpKCkgY2FsbCB0byBhbGxvY2F0ZSB0aGUgYmxvY2tzCisJICogSXNzdWUgdGhlIHhmc19ibWFwaSgpIGNhbGwgdG8gYWxsb2NhdGUgdGhlIGJsb2Nrcy4KKwkgKgorCSAqIEZyb20gdGhpcyBwb2ludCBvbndhcmRzIHdlIG92ZXJ3cml0ZSB0aGUgaW1hcCBwb2ludGVyIHRoYXQgdGhlCisJICogY2FsbGVyIGdhdmUgdG8gdXMuCiAJICovCiAJeGZzX2JtYXBfaW5pdCgmZnJlZV9saXN0LCAmZmlyc3Rmc2IpOwogCW5pbWFwcyA9IDE7CiAJZXJyb3IgPSB4ZnNfYm1hcGkodHAsIGlwLCBvZmZzZXRfZnNiLCBjb3VudF9mc2IsIGJtYXBpX2ZsYWcsCi0JCSZmaXJzdGZzYiwgMCwgJmltYXAsICZuaW1hcHMsICZmcmVlX2xpc3QsIE5VTEwpOworCQkmZmlyc3Rmc2IsIDAsIGltYXAsICZuaW1hcHMsICZmcmVlX2xpc3QpOwogCWlmIChlcnJvcikKIAkJZ290byBlcnJvcjA7CiAKQEAgLTM2OSwxMiArMzY1LDExIEBACiAJCWdvdG8gZXJyb3Jfb3V0OwogCX0KIAotCWlmICghKGltYXAuYnJfc3RhcnRibG9jayB8fCBYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApKSkgewotCQllcnJvciA9IHhmc19jbW5fZXJyX2ZzYmxvY2tfemVybyhpcCwgJmltYXApOworCWlmICghKGltYXAtPmJyX3N0YXJ0YmxvY2sgfHwgWEZTX0lTX1JFQUxUSU1FX0lOT0RFKGlwKSkpIHsKKwkJZXJyb3IgPSB4ZnNfY21uX2Vycl9mc2Jsb2NrX3plcm8oaXAsIGltYXApOwogCQlnb3RvIGVycm9yX291dDsKIAl9CiAKLQkqcmV0X2ltYXAgPSBpbWFwOwogCSpubWFwcyA9IDE7CiAJcmV0dXJuIDA7CiAKQEAgLTQyNSw3ICs0MjAsNyBAQAogCQlpbWFwcyA9IG5pbWFwczsKIAkJZmlyc3RibG9jayA9IE5VTExGU0JMT0NLOwogCQllcnJvciA9IHhmc19ibWFwaShOVUxMLCBpcCwgc3RhcnRfZnNiLCBjb3VudF9mc2IsIDAsCi0JCQkJICAmZmlyc3RibG9jaywgMCwgaW1hcCwgJmltYXBzLCBOVUxMLCBOVUxMKTsKKwkJCQkgICZmaXJzdGJsb2NrLCAwLCBpbWFwLCAmaW1hcHMsIE5VTEwpOwogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gZXJyb3I7CiAJCWZvciAobiA9IDA7IG4gPCBpbWFwczsgbisrKSB7CkBAIC01MDAsNyArNDk1LDcgQEAKIAkJCSAgKHhmc19maWxibGtzX3QpKGxhc3RfZnNiIC0gb2Zmc2V0X2ZzYiksCiAJCQkgIFhGU19CTUFQSV9ERUxBWSB8IFhGU19CTUFQSV9XUklURSB8CiAJCQkgIFhGU19CTUFQSV9FTlRJUkUsICZmaXJzdGJsb2NrLCAxLCBpbWFwLAotCQkJICAmbmltYXBzLCBOVUxMLCBOVUxMKTsKKwkJCSAgJm5pbWFwcywgTlVMTCk7CiAJaWYgKGVycm9yICYmIChlcnJvciAhPSBFTk9TUEMpKQogCQlyZXR1cm4gWEZTX0VSUk9SKGVycm9yKTsKIApAQCAtNTQ4LDcgKzU0Myw3IEBACiAJeGZzX2lub2RlX3QJKmlwLAogCXhmc19vZmZfdAlvZmZzZXQsCiAJc2l6ZV90CQljb3VudCwKLQl4ZnNfYm1idF9pcmVjX3QgKm1hcCwKKwl4ZnNfYm1idF9pcmVjX3QgKmltYXAsCiAJaW50CQkqcmV0bWFwKQogewogCXhmc19tb3VudF90CSptcCA9IGlwLT5pX21vdW50OwpAQCAtNTU3LDcgKzU1Miw2IEBACiAJeGZzX2ZzYmxvY2tfdAlmaXJzdF9ibG9jazsKIAl4ZnNfYm1hcF9mcmVlX3QJZnJlZV9saXN0OwogCXhmc19maWxibGtzX3QJY291bnRfZnNiOwotCXhmc19ibWJ0X2lyZWNfdAlpbWFwOwogCXhmc190cmFuc190CSp0cDsKIAlpbnQJCW5pbWFwcywgY29tbWl0dGVkOwogCWludAkJZXJyb3IgPSAwOwpAQCAtNTczLDggKzU2Nyw4IEBACiAJCXJldHVybiBYRlNfRVJST1IoZXJyb3IpOwogCiAJb2Zmc2V0X2ZzYiA9IFhGU19CX1RPX0ZTQlQobXAsIG9mZnNldCk7Ci0JY291bnRfZnNiID0gbWFwLT5icl9ibG9ja2NvdW50OwotCW1hcF9zdGFydF9mc2IgPSBtYXAtPmJyX3N0YXJ0b2ZmOworCWNvdW50X2ZzYiA9IGltYXAtPmJyX2Jsb2NrY291bnQ7CisJbWFwX3N0YXJ0X2ZzYiA9IGltYXAtPmJyX3N0YXJ0b2ZmOwogCiAJWEZTX1NUQVRTX0FERCh4c194c3RyYXRfYnl0ZXMsIFhGU19GU0JfVE9fQihtcCwgY291bnRfZnNiKSk7CiAKQEAgLTYwMiw4ICs1OTYsNyBAQAogCQkJCXJldHVybiBYRlNfRVJST1IoZXJyb3IpOwogCQkJfQogCQkJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JCQl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JCQl4ZnNfdHJhbnNfaWhvbGQodHAsIGlwKTsKKwkJCXhmc190cmFuc19pam9pbih0cCwgaXApOwogCiAJCQl4ZnNfYm1hcF9pbml0KCZmcmVlX2xpc3QsICZmaXJzdF9ibG9jayk7CiAKQEAgLTY1NCwxMCArNjQ3LDE1IEBACiAJCQkJfQogCQkJfQogCi0JCQkvKiBHbyBnZXQgdGhlIGFjdHVhbCBibG9ja3MgKi8KKwkJCS8qCisJCQkgKiBHbyBnZXQgdGhlIGFjdHVhbCBibG9ja3MuCisJIAkgCSAqCisJCQkgKiBGcm9tIHRoaXMgcG9pbnQgb253YXJkcyB3ZSBvdmVyd3JpdGUgdGhlIGltYXAKKwkJCSAqIHBvaW50ZXIgdGhhdCB0aGUgY2FsbGVyIGdhdmUgdG8gdXMuCisJCQkgKi8KIAkJCWVycm9yID0geGZzX2JtYXBpKHRwLCBpcCwgbWFwX3N0YXJ0X2ZzYiwgY291bnRfZnNiLAogCQkJCQlYRlNfQk1BUElfV1JJVEUsICZmaXJzdF9ibG9jaywgMSwKLQkJCQkJJmltYXAsICZuaW1hcHMsICZmcmVlX2xpc3QsIE5VTEwpOworCQkJCQlpbWFwLCAmbmltYXBzLCAmZnJlZV9saXN0KTsKIAkJCWlmIChlcnJvcikKIAkJCQlnb3RvIHRyYW5zX2NhbmNlbDsKIApAQCAtNjc2LDEzICs2NzQsMTIgQEAKIAkJICogU2VlIGlmIHdlIHdlcmUgYWJsZSB0byBhbGxvY2F0ZSBhbiBleHRlbnQgdGhhdAogCQkgKiBjb3ZlcnMgYXQgbGVhc3QgcGFydCBvZiB0aGUgY2FsbGVycyByZXF1ZXN0CiAJCSAqLwotCQlpZiAoIShpbWFwLmJyX3N0YXJ0YmxvY2sgfHwgWEZTX0lTX1JFQUxUSU1FX0lOT0RFKGlwKSkpCi0JCQlyZXR1cm4geGZzX2Ntbl9lcnJfZnNibG9ja196ZXJvKGlwLCAmaW1hcCk7CisJCWlmICghKGltYXAtPmJyX3N0YXJ0YmxvY2sgfHwgWEZTX0lTX1JFQUxUSU1FX0lOT0RFKGlwKSkpCisJCQlyZXR1cm4geGZzX2Ntbl9lcnJfZnNibG9ja196ZXJvKGlwLCBpbWFwKTsKIAotCQlpZiAoKG9mZnNldF9mc2IgPj0gaW1hcC5icl9zdGFydG9mZikgJiYKLQkJICAgIChvZmZzZXRfZnNiIDwgKGltYXAuYnJfc3RhcnRvZmYgKwotCQkJCSAgIGltYXAuYnJfYmxvY2tjb3VudCkpKSB7Ci0JCQkqbWFwID0gaW1hcDsKKwkJaWYgKChvZmZzZXRfZnNiID49IGltYXAtPmJyX3N0YXJ0b2ZmKSAmJgorCQkgICAgKG9mZnNldF9mc2IgPCAoaW1hcC0+YnJfc3RhcnRvZmYgKworCQkJCSAgIGltYXAtPmJyX2Jsb2NrY291bnQpKSkgewogCQkJKnJldG1hcCA9IDE7CiAJCQlYRlNfU1RBVFNfSU5DKHhzX3hzdHJhdF9xdWljayk7CiAJCQlyZXR1cm4gMDsKQEAgLTY5Miw4ICs2ODksOCBAQAogCQkgKiBTbyBmYXIgd2UgaGF2ZSBub3QgbWFwcGVkIHRoZSByZXF1ZXN0ZWQgcGFydCBvZiB0aGUKIAkJICogZmlsZSwganVzdCBzdXJyb3VuZGluZyBkYXRhLCB0cnkgYWdhaW4uCiAJCSAqLwotCQljb3VudF9mc2IgLT0gaW1hcC5icl9ibG9ja2NvdW50OwotCQltYXBfc3RhcnRfZnNiID0gaW1hcC5icl9zdGFydG9mZiArIGltYXAuYnJfYmxvY2tjb3VudDsKKwkJY291bnRfZnNiIC09IGltYXAtPmJyX2Jsb2NrY291bnQ7CisJCW1hcF9zdGFydF9mc2IgPSBpbWFwLT5icl9zdGFydG9mZiArIGltYXAtPmJyX2Jsb2NrY291bnQ7CiAJfQogCiB0cmFuc19jYW5jZWw6CkBAIC03NjYsOCArNzYzLDcgQEAKIAkJfQogCiAJCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCQl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JCXhmc190cmFuc19paG9sZCh0cCwgaXApOworCQl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwKTsKIAogCQkvKgogCQkgKiBNb2RpZnkgdGhlIHVud3JpdHRlbiBleHRlbnQgc3RhdGUgb2YgdGhlIGJ1ZmZlci4KQEAgLTc3Niw3ICs3NzIsNyBAQAogCQluaW1hcHMgPSAxOwogCQllcnJvciA9IHhmc19ibWFwaSh0cCwgaXAsIG9mZnNldF9mc2IsIGNvdW50X2ZzYiwKIAkJCQkgIFhGU19CTUFQSV9XUklURXxYRlNfQk1BUElfQ09OVkVSVCwgJmZpcnN0ZnNiLAotCQkJCSAgMSwgJmltYXAsICZuaW1hcHMsICZmcmVlX2xpc3QsIE5VTEwpOworCQkJCSAgMSwgJmltYXAsICZuaW1hcHMsICZmcmVlX2xpc3QpOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIGVycm9yX29uX2JtYXBpX3RyYW5zYWN0aW9uOwogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvbWFwLmggYi9mcy94ZnMveGZzX2lvbWFwLmgKaW5kZXggODFhYzRhZi4uNzc0OGE0MyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pb21hcC5oCisrKyBiL2ZzL3hmcy94ZnNfaW9tYXAuaApAQCAtMTgsMTcgKzE4LDE2IEBACiAjaWZuZGVmIF9fWEZTX0lPTUFQX0hfXwogI2RlZmluZSBfX1hGU19JT01BUF9IX18KIAotdHlwZWRlZiBlbnVtIHsKLQkvKiBiYXNlIGV4dGVudCBtYW5pcHVsYXRpb24gY2FsbHMgKi8KLQlCTUFQSV9SRUFEID0gKDEgPDwgMCksCQkvKiByZWFkIGV4dGVudHMgKi8KLQlCTUFQSV9XUklURSA9ICgxIDw8IDEpLAkJLyogY3JlYXRlIGV4dGVudHMgKi8KLQlCTUFQSV9BTExPQ0FURSA9ICgxIDw8IDIpLAkvKiBkZWxheWVkIGFsbG9jYXRlIHRvIHJlYWwgZXh0ZW50cyAqLwotCS8qIG1vZGlmaWVycyAqLwotCUJNQVBJX0lHTlNUQVRFID0gKDEgPDwgNCksCS8qIGlnbm9yZSB1bndyaXR0ZW4gc3RhdGUgb24gcmVhZCAqLwotCUJNQVBJX0RJUkVDVCA9ICgxIDw8IDUpLAkvKiBkaXJlY3QgaW5zdGVhZCBvZiBidWZmZXJlZCB3cml0ZSAqLwotCUJNQVBJX01NQVAgPSAoMSA8PCA2KSwJCS8qIGFsbG9jYXRlIGZvciBtbWFwIHdyaXRlICovCi0JQk1BUElfVFJZTE9DSyA9ICgxIDw8IDcpLAkvKiBub24tYmxvY2tpbmcgcmVxdWVzdCAqLwotfSBibWFwaV9mbGFnc190OworLyogYmFzZSBleHRlbnQgbWFuaXB1bGF0aW9uIGNhbGxzICovCisjZGVmaW5lIEJNQVBJX1JFQUQJKDEgPDwgMCkJLyogcmVhZCBleHRlbnRzICovCisjZGVmaW5lIEJNQVBJX1dSSVRFCSgxIDw8IDEpCS8qIGNyZWF0ZSBleHRlbnRzICovCisjZGVmaW5lIEJNQVBJX0FMTE9DQVRFCSgxIDw8IDIpCS8qIGRlbGF5ZWQgYWxsb2NhdGUgdG8gcmVhbCBleHRlbnRzICovCisKKy8qIG1vZGlmaWVycyAqLworI2RlZmluZSBCTUFQSV9JR05TVEFURQkoMSA8PCA0KQkvKiBpZ25vcmUgdW53cml0dGVuIHN0YXRlIG9uIHJlYWQgKi8KKyNkZWZpbmUgQk1BUElfRElSRUNUCSgxIDw8IDUpCS8qIGRpcmVjdCBpbnN0ZWFkIG9mIGJ1ZmZlcmVkIHdyaXRlICovCisjZGVmaW5lIEJNQVBJX01NQQkoMSA8PCA2KQkvKiBhbGxvY2F0ZSBmb3IgbW1hcCB3cml0ZSAqLworI2RlZmluZSBCTUFQSV9UUllMT0NLCSgxIDw8IDcpCS8qIG5vbi1ibG9ja2luZyByZXF1ZXN0ICovCiAKICNkZWZpbmUgQk1BUElfRkxBR1MgXAogCXsgQk1BUElfUkVBRCwJCSJSRUFEIiB9LCBcCkBAIC0zNiw3ICszNSw2IEBACiAJeyBCTUFQSV9BTExPQ0FURSwJIkFMTE9DQVRFIiB9LCBcCiAJeyBCTUFQSV9JR05TVEFURSwJIklHTlNUQVRFIiB9LCBcCiAJeyBCTUFQSV9ESVJFQ1QsCQkiRElSRUNUIiB9LCBcCi0JeyBCTUFQSV9NTUFQLAkJIk1NQVAiIH0sIFwKIAl7IEJNQVBJX1RSWUxPQ0ssCSJUUllMT0NLIiB9CiAKIHN0cnVjdCB4ZnNfaW5vZGU7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2l0YWJsZS5jIGIvZnMveGZzL3hmc19pdGFibGUuYwppbmRleCAyYjg2Zjg2Li43ZTM2MjZlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2l0YWJsZS5jCisrKyBiL2ZzL3hmcy94ZnNfaXRhYmxlLmMKQEAgLTI0LDIwICsyNCwxNyBAQAogI2luY2x1ZGUgInhmc190cmFucy5oIgogI2luY2x1ZGUgInhmc19zYi5oIgogI2luY2x1ZGUgInhmc19hZy5oIgotI2luY2x1ZGUgInhmc19kaXIyLmgiCi0jaW5jbHVkZSAieGZzX2RtYXBpLmgiCiAjaW5jbHVkZSAieGZzX21vdW50LmgiCiAjaW5jbHVkZSAieGZzX2JtYXBfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfYWxsb2NfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfaWFsbG9jX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2RpcjJfc2YuaCIKLSNpbmNsdWRlICJ4ZnNfYXR0cl9zZi5oIgogI2luY2x1ZGUgInhmc19kaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfaWFsbG9jLmgiCiAjaW5jbHVkZSAieGZzX2l0YWJsZS5oIgogI2luY2x1ZGUgInhmc19lcnJvci5oIgogI2luY2x1ZGUgInhmc19idHJlZS5oIgorI2luY2x1ZGUgInhmc190cmFjZS5oIgogCiBTVEFUSUMgaW50CiB4ZnNfaW50ZXJuYWxfaW51bSgKQEAgLTE0Myw3ICsxNDAsOCBAQAogCQlidWYtPmJzX2Jsb2NrcyA9IGRpYy0+ZGlfbmJsb2NrcyArIGlwLT5pX2RlbGF5ZWRfYmxrczsKIAkJYnJlYWs7CiAJfQotCXhmc19pcHV0KGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKKwl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CisJSVJFTEUoaXApOwogCiAJZXJyb3IgPSBmb3JtYXR0ZXIoYnVmZmVyLCB1YnNpemUsIHVidXNlZCwgYnVmKTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2cuYyBiL2ZzL3hmcy94ZnNfbG9nLmMKaW5kZXggNTIxNWFiYy4uOTI1ZDU3MiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2cuYworKysgYi9mcy94ZnMveGZzX2xvZy5jCkBAIC0yNCw4ICsyNCw2IEBACiAjaW5jbHVkZSAieGZzX3RyYW5zLmgiCiAjaW5jbHVkZSAieGZzX3NiLmgiCiAjaW5jbHVkZSAieGZzX2FnLmgiCi0jaW5jbHVkZSAieGZzX2RpcjIuaCIKLSNpbmNsdWRlICJ4ZnNfZG1hcGkuaCIKICNpbmNsdWRlICJ4ZnNfbW91bnQuaCIKICNpbmNsdWRlICJ4ZnNfZXJyb3IuaCIKICNpbmNsdWRlICJ4ZnNfbG9nX3ByaXYuaCIKQEAgLTM1LDggKzMzLDYgQEAKICNpbmNsdWRlICJ4ZnNfaWFsbG9jX2J0cmVlLmgiCiAjaW5jbHVkZSAieGZzX2xvZ19yZWNvdmVyLmgiCiAjaW5jbHVkZSAieGZzX3RyYW5zX3ByaXYuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMl9zZi5oIgotI2luY2x1ZGUgInhmc19hdHRyX3NmLmgiCiAjaW5jbHVkZSAieGZzX2Rpbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZS5oIgogI2luY2x1ZGUgInhmc19ydy5oIgpAQCAtMzM3LDcgKzMzMyw2IEBACiAJaW50CQkJcmV0dmFsID0gMDsKIAogCUFTU0VSVChjbGllbnQgPT0gWEZTX1RSQU5TQUNUSU9OIHx8IGNsaWVudCA9PSBYRlNfTE9HKTsKLQlBU1NFUlQoKGZsYWdzICYgWEZTX0xPR19OT1NMRUVQKSA9PSAwKTsKIAogCWlmIChYTE9HX0ZPUkNFRF9TSFVURE9XTihsb2cpKQogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CkBAIC01NTIsNyArNTQ3LDcgQEAKIAkJCQkubWFnaWMgPSBYTE9HX1VOTU9VTlRfVFlQRSwKIAkJCX07CiAJCQlzdHJ1Y3QgeGZzX2xvZ19pb3ZlYyByZWcgPSB7Ci0JCQkJLmlfYWRkciA9ICh2b2lkICopJm1hZ2ljLAorCQkJCS5pX2FkZHIgPSAmbWFnaWMsCiAJCQkJLmlfbGVuID0gc2l6ZW9mKG1hZ2ljKSwKIAkJCQkuaV90eXBlID0gWExPR19SRUdfVFlQRV9VTk1PVU5ULAogCQkJfTsKQEAgLTEwNDcsNyArMTA0Miw2IEBACiAJeGxvZ19pbl9jb3JlX3QJCSppY2xvZywgKnByZXZfaWNsb2c9TlVMTDsKIAl4ZnNfYnVmX3QJCSpicDsKIAlpbnQJCQlpOwotCWludAkJCWljbG9nc2l6ZTsKIAlpbnQJCQllcnJvciA9IEVOT01FTTsKIAl1aW50CQkJbG9nMl9zaXplID0gMDsKIApAQCAtMTEyNyw3ICsxMTIxLDYgQEAKIAkgKiB3aXRoIGRpZmZlcmVudCBhbW91bnRzIG9mIG1lbW9yeS4gIFNlZSB0aGUgZGVmaW5pdGlvbiBvZgogCSAqIHhsb2dfaW5fY29yZV90IGluIHhmc19sb2dfcHJpdi5oIGZvciBkZXRhaWxzLgogCSAqLwotCWljbG9nc2l6ZSA9IGxvZy0+bF9pY2xvZ19zaXplOwogCUFTU0VSVChsb2ctPmxfaWNsb2dfc2l6ZSA+PSA0MDk2KTsKIAlmb3IgKGk9MDsgaSA8IGxvZy0+bF9pY2xvZ19idWZzOyBpKyspIHsKIAkJKmljbG9ncCA9IGttZW1femFsbG9jKHNpemVvZih4bG9nX2luX2NvcmVfdCksIEtNX01BWUZBSUwpOwpAQCAtMTQyOCwxMSArMTQyMSw4IEBACiAJWEZTX0JVRl9CVVNZKGJwKTsKIAlYRlNfQlVGX0FTWU5DKGJwKTsKIAlicC0+Yl9mbGFncyB8PSBYQkZfTE9HX0JVRkZFUjsKLQkvKgotCSAqIERvIGFuIG9yZGVyZWQgd3JpdGUgZm9yIHRoZSBsb2cgYmxvY2suCi0JICogSXRzIHVubmVjZXNzYXJ5IHRvIGZsdXNoIHRoZSBmaXJzdCBzcGxpdCBibG9jayBpbiB0aGUgbG9nIHdyYXAgY2FzZS4KLQkgKi8KLQlpZiAoIXNwbGl0ICYmIChsb2ctPmxfbXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfQkFSUklFUikpCisKKwlpZiAobG9nLT5sX21wLT5tX2ZsYWdzICYgWEZTX01PVU5UX0JBUlJJRVIpCiAJCVhGU19CVUZfT1JERVJFRChicCk7CiAKIAlBU1NFUlQoWEZTX0JVRl9BRERSKGJwKSA8PSBsb2ctPmxfbG9nQkJzaXplLTEpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2cuaCBiL2ZzL3hmcy94ZnNfbG9nLmgKaW5kZXggMDRjNzhlNi4uOTE2ZWI3ZCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2cuaAorKysgYi9mcy94ZnMveGZzX2xvZy5oCkBAIC01NSwxNCArNTUsMTAgQEAKIC8qCiAgKiBGbGFncyB0byB4ZnNfbG9nX3Jlc2VydmUoKQogICoKLSAqCVhGU19MT0dfU0xFRVA6CSBJZiBzcGFjZSBpcyBub3QgYXZhaWxhYmxlLCBzbGVlcCAoZGVmYXVsdCkKLSAqCVhGU19MT0dfTk9TTEVFUDogSWYgc3BhY2UgaXMgbm90IGF2YWlsYWJsZSwgcmV0dXJuIGVycm9yCiAgKglYRlNfTE9HX1BFUk1fUkVTRVJWOiBQZXJtYW5lbnQgcmVzZXJ2YXRpb24uICBXaGVuIHdyaXRlcyBhcmUKICAqCQlwZXJmb3JtZWQgYWdhaW5zdCB0aGlzIHR5cGUgb2YgcmVzZXJ2YXRpb24sIHRoZSByZXNlcnZhdGlvbgogICoJCWlzIG5vdCBkZWNyZWFzZWQuICBMb25nIHJ1bm5pbmcgdHJhbnNhY3Rpb25zIHNob3VsZCB1c2UgdGhpcy4KICAqLwotI2RlZmluZSBYRlNfTE9HX1NMRUVQCQkweDAKLSNkZWZpbmUgWEZTX0xPR19OT1NMRUVQCQkweDEKICNkZWZpbmUgWEZTX0xPR19QRVJNX1JFU0VSVgkweDIKIAogLyoKQEAgLTEwNCw3ICsxMDAsNyBAQAogI2RlZmluZSBYTE9HX1JFR19UWVBFX01BWAkJMTkKIAogdHlwZWRlZiBzdHJ1Y3QgeGZzX2xvZ19pb3ZlYyB7Ci0JeGZzX2NhZGRyX3QJaV9hZGRyOwkJLyogYmVnaW5uaW5nIGFkZHJlc3Mgb2YgcmVnaW9uICovCisJdm9pZAkJKmlfYWRkcjsJLyogYmVnaW5uaW5nIGFkZHJlc3Mgb2YgcmVnaW9uICovCiAJaW50CQlpX2xlbjsJCS8qIGxlbmd0aCBpbiBieXRlcyBvZiByZWdpb24gKi8KIAl1aW50CQlpX3R5cGU7CQkvKiB0eXBlIG9mIHJlZ2lvbiAqLwogfSB4ZnNfbG9nX2lvdmVjX3Q7CkBAIC0yMDEsOSArMTk3LDQgQEAKIGJvb2wJeGZzX2xvZ19pdGVtX2luX2N1cnJlbnRfY2hrcHQoc3RydWN0IHhmc19sb2dfaXRlbSAqbGlwKTsKIAogI2VuZGlmCi0KLQotZXh0ZXJuIGludCB4bG9nX2RlYnVnOwkJLyogc2V0IHRvIDEgdG8gZW5hYmxlIHJlYWwgbG9nICovCi0KLQogI2VuZGlmCS8qIF9fWEZTX0xPR19IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nX2NpbC5jIGIvZnMveGZzL3hmc19sb2dfY2lsLmMKaW5kZXggYmIxN2NjMC4uMzFlNGVhMiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2dfY2lsLmMKKysrIGIvZnMveGZzL3hmc19sb2dfY2lsLmMKQEAgLTI2LDggKzI2LDYgQEAKICNpbmNsdWRlICJ4ZnNfbG9nX3ByaXYuaCIKICNpbmNsdWRlICJ4ZnNfc2IuaCIKICNpbmNsdWRlICJ4ZnNfYWcuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMi5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc19lcnJvci5oIgogI2luY2x1ZGUgInhmc19hbGxvYy5oIgpAQCAtNTU0LDcgKzU1Miw3IEBACiAJdGhkci50aF90eXBlID0gWEZTX1RSQU5TX0NIRUNLUE9JTlQ7CiAJdGhkci50aF90aWQgPSB0aWMtPnRfdGlkOwogCXRoZHIudGhfbnVtX2l0ZW1zID0gbnVtX2lvdmVjczsKLQlsaGRyLmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmdGhkcjsKKwlsaGRyLmlfYWRkciA9ICZ0aGRyOwogCWxoZHIuaV9sZW4gPSBzaXplb2YoeGZzX3RyYW5zX2hlYWRlcl90KTsKIAlsaGRyLmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfVFJBTlNIRFI7CiAJdGljLT50X2N1cnJfcmVzIC09IGxoZHIuaV9sZW4gKyBzaXplb2YoeGxvZ19vcF9oZWFkZXJfdCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMgYi9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKaW5kZXggOWFjNWNmYS4uNmYzZjVmYSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jCisrKyBiL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYwpAQCAtMjQsMTUgKzI0LDExIEBACiAjaW5jbHVkZSAieGZzX3RyYW5zLmgiCiAjaW5jbHVkZSAieGZzX3NiLmgiCiAjaW5jbHVkZSAieGZzX2FnLmgiCi0jaW5jbHVkZSAieGZzX2RpcjIuaCIKLSNpbmNsdWRlICJ4ZnNfZG1hcGkuaCIKICNpbmNsdWRlICJ4ZnNfbW91bnQuaCIKICNpbmNsdWRlICJ4ZnNfZXJyb3IuaCIKICNpbmNsdWRlICJ4ZnNfYm1hcF9idHJlZS5oIgogI2luY2x1ZGUgInhmc19hbGxvY19idHJlZS5oIgogI2luY2x1ZGUgInhmc19pYWxsb2NfYnRyZWUuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMl9zZi5oIgotI2luY2x1ZGUgInhmc19hdHRyX3NmLmgiCiAjaW5jbHVkZSAieGZzX2Rpbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZV9pdGVtLmgiCkBAIC0xNTY1LDkgKzE1NjEsNyBAQAogCiAJbGlzdF9zcGxpY2VfaW5pdCgmdHJhbnMtPnJfaXRlbXEsICZzb3J0X2xpc3QpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpdGVtLCBuLCAmc29ydF9saXN0LCByaV9saXN0KSB7Ci0JCXhmc19idWZfbG9nX2Zvcm1hdF90CSpidWZfZjsKLQotCQlidWZfZiA9ICh4ZnNfYnVmX2xvZ19mb3JtYXRfdCAqKWl0ZW0tPnJpX2J1ZlswXS5pX2FkZHI7CisJCXhmc19idWZfbG9nX2Zvcm1hdF90CSpidWZfZiA9IGl0ZW0tPnJpX2J1ZlswXS5pX2FkZHI7CiAKIAkJc3dpdGNoIChJVEVNX1RZUEUoaXRlbSkpIHsKIAkJY2FzZSBYRlNfTElfQlVGOgpAQCAtMTg5Miw5ICsxODg2LDggQEAKIAkJICogY3VycmVudCBkaV9uZXh0X3VubGlua2VkIGZpZWxkLiAgRXh0cmFjdCBpdHMgdmFsdWUKIAkJICogYW5kIGNvcHkgaXQgdG8gdGhlIGJ1ZmZlciBjb3B5LgogCQkgKi8KLQkJbG9nZ2VkX25leHRwID0gKHhmc19hZ2lub190ICopCi0JCQkgICAgICAgKChjaGFyICopKGl0ZW0tPnJpX2J1ZltpdGVtX2luZGV4XS5pX2FkZHIpICsKLQkJCQkobmV4dF91bmxpbmtlZF9vZmZzZXQgLSByZWdfYnVmX29mZnNldCkpOworCQlsb2dnZWRfbmV4dHAgPSBpdGVtLT5yaV9idWZbaXRlbV9pbmRleF0uaV9hZGRyICsKKwkJCQluZXh0X3VubGlua2VkX29mZnNldCAtIHJlZ19idWZfb2Zmc2V0OwogCQlpZiAodW5saWtlbHkoKmxvZ2dlZF9uZXh0cCA9PSAwKSkgewogCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfQUxFUlQsIG1wLAogCQkJCSJiYWQgaW5vZGUgYnVmZmVyIGxvZyByZWNvcmQgKHB0ciA9IDB4JXAsIGJwID0gMHglcCkuICBYRlMgdHJ5aW5nIHRvIHJlcGxheSBiYWQgKDApIGlub2RlIGRpX25leHRfdW5saW5rZWQgZmllbGQiLApAQCAtMTk3Myw4ICsxOTY2LDcgQEAKIAkJCQkJaXRlbS0+cmlfYnVmW2ldLmlfbGVuLCBfX2Z1bmNfXyk7CiAJCQkJZ290byBuZXh0OwogCQkJfQotCQkJZXJyb3IgPSB4ZnNfcW1fZHFjaGVjaygoeGZzX2Rpc2tfZHF1b3RfdCAqKQotCQkJCQkgICAgICAgaXRlbS0+cmlfYnVmW2ldLmlfYWRkciwKKwkJCWVycm9yID0geGZzX3FtX2RxY2hlY2soaXRlbS0+cmlfYnVmW2ldLmlfYWRkciwKIAkJCQkJICAgICAgIC0xLCAwLCBYRlNfUU1PUFRfRE9XQVJOLAogCQkJCQkgICAgICAgImRxdW90X2J1Zl9yZWNvdmVyIik7CiAJCQlpZiAoZXJyb3IpCkBAIC0yMTg3LDcgKzIxNzksNyBAQAogCXhsb2dfcmVjb3Zlcl9pdGVtX3QJKml0ZW0sCiAJaW50CQkJcGFzcykKIHsKLQl4ZnNfYnVmX2xvZ19mb3JtYXRfdAkqYnVmX2Y7CisJeGZzX2J1Zl9sb2dfZm9ybWF0X3QJKmJ1Zl9mID0gaXRlbS0+cmlfYnVmWzBdLmlfYWRkcjsKIAl4ZnNfbW91bnRfdAkJKm1wOwogCXhmc19idWZfdAkJKmJwOwogCWludAkJCWVycm9yOwpAQCAtMjE5Nyw4ICsyMTg5LDYgQEAKIAl1c2hvcnQJCQlmbGFnczsKIAl1aW50CQkJYnVmX2ZsYWdzOwogCi0JYnVmX2YgPSAoeGZzX2J1Zl9sb2dfZm9ybWF0X3QgKilpdGVtLT5yaV9idWZbMF0uaV9hZGRyOwotCiAJaWYgKHBhc3MgPT0gWExPR19SRUNPVkVSX1BBU1MxKSB7CiAJCS8qCiAJCSAqIEluIHRoaXMgcGFzcyB3ZSdyZSBvbmx5IGxvb2tpbmcgZm9yIGJ1ZiBpdGVtcwpAQCAtMjMxOSwxMCArMjMwOSw5IEBACiAJfQogCiAJaWYgKGl0ZW0tPnJpX2J1ZlswXS5pX2xlbiA9PSBzaXplb2YoeGZzX2lub2RlX2xvZ19mb3JtYXRfdCkpIHsKLQkJaW5fZiA9ICh4ZnNfaW5vZGVfbG9nX2Zvcm1hdF90ICopaXRlbS0+cmlfYnVmWzBdLmlfYWRkcjsKKwkJaW5fZiA9IGl0ZW0tPnJpX2J1ZlswXS5pX2FkZHI7CiAJfSBlbHNlIHsKLQkJaW5fZiA9ICh4ZnNfaW5vZGVfbG9nX2Zvcm1hdF90ICopa21lbV9hbGxvYygKLQkJCXNpemVvZih4ZnNfaW5vZGVfbG9nX2Zvcm1hdF90KSwgS01fU0xFRVApOworCQlpbl9mID0ga21lbV9hbGxvYyhzaXplb2YoeGZzX2lub2RlX2xvZ19mb3JtYXRfdCksIEtNX1NMRUVQKTsKIAkJbmVlZF9mcmVlID0gMTsKIAkJZXJyb3IgPSB4ZnNfaW5vZGVfaXRlbV9mb3JtYXRfY29udmVydCgmaXRlbS0+cmlfYnVmWzBdLCBpbl9mKTsKIAkJaWYgKGVycm9yKQpAQCAtMjM3MCw3ICsyMzU5LDcgQEAKIAkJZXJyb3IgPSBFRlNDT1JSVVBURUQ7CiAJCWdvdG8gZXJyb3I7CiAJfQotCWRpY3AgPSAoeGZzX2ljZGlub2RlX3QgKikoaXRlbS0+cmlfYnVmWzFdLmlfYWRkcik7CisJZGljcCA9IGl0ZW0tPnJpX2J1ZlsxXS5pX2FkZHI7CiAJaWYgKHVubGlrZWx5KGRpY3AtPmRpX21hZ2ljICE9IFhGU19ESU5PREVfTUFHSUMpKSB7CiAJCXhmc19idWZfcmVsc2UoYnApOwogCQl4ZnNfZnNfY21uX2VycihDRV9BTEVSVCwgbXAsCkBAIC0yNDYxLDcgKzI0NTAsNyBAQAogCX0KIAogCS8qIFRoZSBjb3JlIGlzIGluIGluLWNvcmUgZm9ybWF0ICovCi0JeGZzX2Rpbm9kZV90b19kaXNrKGRpcCwgKHhmc19pY2Rpbm9kZV90ICopaXRlbS0+cmlfYnVmWzFdLmlfYWRkcik7CisJeGZzX2Rpbm9kZV90b19kaXNrKGRpcCwgaXRlbS0+cmlfYnVmWzFdLmlfYWRkcik7CiAKIAkvKiB0aGUgcmVzdCBpcyBpbiBvbi1kaXNrIGZvcm1hdCAqLwogCWlmIChpdGVtLT5yaV9idWZbMV0uaV9sZW4gPiBzaXplb2Yoc3RydWN0IHhmc19pY2Rpbm9kZSkpIHsKQEAgLTI1NzgsNyArMjU2Nyw3IEBACiAJCXJldHVybiAoMCk7CiAJfQogCi0JcW9mZl9mID0gKHhmc19xb2ZmX2xvZ2Zvcm1hdF90ICopaXRlbS0+cmlfYnVmWzBdLmlfYWRkcjsKKwlxb2ZmX2YgPSBpdGVtLT5yaV9idWZbMF0uaV9hZGRyOwogCUFTU0VSVChxb2ZmX2YpOwogCiAJLyoKQEAgLTI2MjIsOSArMjYxMSw4IEBACiAJaWYgKG1wLT5tX3FmbGFncyA9PSAwKQogCQlyZXR1cm4gKDApOwogCi0JcmVjZGRxID0gKHhmc19kaXNrX2RxdW90X3QgKilpdGVtLT5yaV9idWZbMV0uaV9hZGRyOwotCi0JaWYgKGl0ZW0tPnJpX2J1ZlsxXS5pX2FkZHIgPT0gTlVMTCkgeworCXJlY2RkcSA9IGl0ZW0tPnJpX2J1ZlsxXS5pX2FkZHI7CisJaWYgKHJlY2RkcSA9PSBOVUxMKSB7CiAJCWNtbl9lcnIoQ0VfQUxFUlQsCiAJCQkiWEZTOiBOVUxMIGRxdW90IGluICVzLiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwpAQCAtMjY1NCw3ICsyNjQyLDcgQEAKIAkgKiBUaGUgb3RoZXIgcG9zc2liaWxpdHksIG9mIGNvdXJzZSwgaXMgdGhhdCB0aGUgcXVvdGEgc3Vic3lzdGVtIHdhcwogCSAqIHJlbW92ZWQgc2luY2UgdGhlIGxhc3QgbW91bnQgLSBFTk9TWVMuCiAJICovCi0JZHFfZiA9ICh4ZnNfZHFfbG9nZm9ybWF0X3QgKilpdGVtLT5yaV9idWZbMF0uaV9hZGRyOworCWRxX2YgPSBpdGVtLT5yaV9idWZbMF0uaV9hZGRyOwogCUFTU0VSVChkcV9mKTsKIAlpZiAoKGVycm9yID0geGZzX3FtX2RxY2hlY2socmVjZGRxLAogCQkJICAgZHFfZi0+cWxmX2lkLApAQCAtMjcyMSw3ICsyNzA5LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JZWZpX2Zvcm1hdHAgPSAoeGZzX2VmaV9sb2dfZm9ybWF0X3QgKilpdGVtLT5yaV9idWZbMF0uaV9hZGRyOworCWVmaV9mb3JtYXRwID0gaXRlbS0+cmlfYnVmWzBdLmlfYWRkcjsKIAogCW1wID0gbG9nLT5sX21wOwogCWVmaXAgPSB4ZnNfZWZpX2luaXQobXAsIGVmaV9mb3JtYXRwLT5lZmlfbmV4dGVudHMpOwpAQCAtMjc2Nyw3ICsyNzU1LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWVmZF9mb3JtYXRwID0gKHhmc19lZmRfbG9nX2Zvcm1hdF90ICopaXRlbS0+cmlfYnVmWzBdLmlfYWRkcjsKKwllZmRfZm9ybWF0cCA9IGl0ZW0tPnJpX2J1ZlswXS5pX2FkZHI7CiAJQVNTRVJUKChpdGVtLT5yaV9idWZbMF0uaV9sZW4gPT0gKHNpemVvZih4ZnNfZWZkX2xvZ19mb3JtYXRfMzJfdCkgKwogCQkoKGVmZF9mb3JtYXRwLT5lZmRfbmV4dGVudHMgLSAxKSAqIHNpemVvZih4ZnNfZXh0ZW50XzMyX3QpKSkpIHx8CiAJICAgICAgIChpdGVtLT5yaV9idWZbMF0uaV9sZW4gPT0gKHNpemVvZih4ZnNfZWZkX2xvZ19mb3JtYXRfNjRfdCkgKwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5jIGIvZnMveGZzL3hmc19tb3VudC5jCmluZGV4IDY5ZjYyZDguLmFlYjlkNzIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuYworKysgYi9mcy94ZnMveGZzX21vdW50LmMKQEAgLTI1LDEzICsyNSwxMCBAQAogI2luY2x1ZGUgInhmc19zYi5oIgogI2luY2x1ZGUgInhmc19hZy5oIgogI2luY2x1ZGUgInhmc19kaXIyLmgiCi0jaW5jbHVkZSAieGZzX2RtYXBpLmgiCiAjaW5jbHVkZSAieGZzX21vdW50LmgiCiAjaW5jbHVkZSAieGZzX2JtYXBfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfYWxsb2NfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfaWFsbG9jX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2RpcjJfc2YuaCIKLSNpbmNsdWRlICJ4ZnNfYXR0cl9zZi5oIgogI2luY2x1ZGUgInhmc19kaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfYnRyZWUuaCIKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbW91bnQuaCBiL2ZzL3hmcy94ZnNfbW91bnQuaAppbmRleCAxZDJjN2VlLi42MjJkYTIxIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX21vdW50LmgKKysrIGIvZnMveGZzL3hmc19tb3VudC5oCkBAIC02Niw2NSArNjYsNiBAQAogc3RydWN0IHhmc19haWw7CiBzdHJ1Y3QgeGZzX3F1b3RhaW5mbzsKIAotCi0vKgotICogUHJvdG90eXBlcyBhbmQgZnVuY3Rpb25zIGZvciB0aGUgRGF0YSBNaWdyYXRpb24gc3Vic3lzdGVtLgotICovCi0KLXR5cGVkZWYgaW50CSgqeGZzX3NlbmRfZGF0YV90KShpbnQsIHN0cnVjdCB4ZnNfaW5vZGUgKiwKLQkJCXhmc19vZmZfdCwgc2l6ZV90LCBpbnQsIGludCAqKTsKLXR5cGVkZWYgaW50CSgqeGZzX3NlbmRfbW1hcF90KShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdWludCk7Ci10eXBlZGVmIGludAkoKnhmc19zZW5kX2Rlc3Ryb3lfdCkoc3RydWN0IHhmc19pbm9kZSAqLCBkbV9yaWdodF90KTsKLXR5cGVkZWYgaW50CSgqeGZzX3NlbmRfbmFtZXNwX3QpKGRtX2V2ZW50dHlwZV90LCBzdHJ1Y3QgeGZzX21vdW50ICosCi0JCQlzdHJ1Y3QgeGZzX2lub2RlICosIGRtX3JpZ2h0X3QsCi0JCQlzdHJ1Y3QgeGZzX2lub2RlICosIGRtX3JpZ2h0X3QsCi0JCQljb25zdCB1bnNpZ25lZCBjaGFyICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwKLQkJCW1vZGVfdCwgaW50LCBpbnQpOwotdHlwZWRlZiBpbnQJKCp4ZnNfc2VuZF9tb3VudF90KShzdHJ1Y3QgeGZzX21vdW50ICosIGRtX3JpZ2h0X3QsCi0JCQljaGFyICosIGNoYXIgKik7Ci10eXBlZGVmIHZvaWQJKCp4ZnNfc2VuZF91bm1vdW50X3QpKHN0cnVjdCB4ZnNfbW91bnQgKiwgc3RydWN0IHhmc19pbm9kZSAqLAotCQkJZG1fcmlnaHRfdCwgbW9kZV90LCBpbnQsIGludCk7Ci0KLXR5cGVkZWYgc3RydWN0IHhmc19kbW9wcyB7Ci0JeGZzX3NlbmRfZGF0YV90CQl4ZnNfc2VuZF9kYXRhOwotCXhmc19zZW5kX21tYXBfdAkJeGZzX3NlbmRfbW1hcDsKLQl4ZnNfc2VuZF9kZXN0cm95X3QJeGZzX3NlbmRfZGVzdHJveTsKLQl4ZnNfc2VuZF9uYW1lc3BfdAl4ZnNfc2VuZF9uYW1lc3A7Ci0JeGZzX3NlbmRfbW91bnRfdAl4ZnNfc2VuZF9tb3VudDsKLQl4ZnNfc2VuZF91bm1vdW50X3QJeGZzX3NlbmRfdW5tb3VudDsKLX0geGZzX2Rtb3BzX3Q7Ci0KLSNkZWZpbmUgWEZTX0RNQVBJX1VOTU9VTlRfRkxBR1MobXApIFwKLQkoKChtcCktPm1fZG1ldm1hc2sgJiAoMSA8PCBETV9FVkVOVF9VTk1PVU5UKSkgPyAwIDogRE1fRkxBR1NfVU5XQU5URUQpCi0KLSNkZWZpbmUgWEZTX1NFTkRfREFUQShtcCwgZXYsaXAsb2ZmLGxlbixmbCxsb2NrKSBcCi0JKCoobXApLT5tX2RtX29wcy0+eGZzX3NlbmRfZGF0YSkoZXYsaXAsb2ZmLGxlbixmbCxsb2NrKQotI2RlZmluZSBYRlNfU0VORF9NTUFQKG1wLCB2bWEsZmwpIFwKLQkoKihtcCktPm1fZG1fb3BzLT54ZnNfc2VuZF9tbWFwKSh2bWEsZmwpCi0jZGVmaW5lIFhGU19TRU5EX0RFU1RST1kobXAsIGlwLHJpZ2h0KSBcCi0JKCoobXApLT5tX2RtX29wcy0+eGZzX3NlbmRfZGVzdHJveSkoaXAscmlnaHQpCi0jZGVmaW5lIFhGU19TRU5EX05BTUVTUChtcCwgZXYsYjEscjEsYjIscjIsbjEsbjIsbW9kZSxydmFsLGZsKSBcCi0JKCoobXApLT5tX2RtX29wcy0+eGZzX3NlbmRfbmFtZXNwKShldixOVUxMLGIxLHIxLGIyLHIyLG4xLG4yLG1vZGUscnZhbCxmbCkKLSNkZWZpbmUgWEZTX1NFTkRfTU9VTlQobXAscmlnaHQscGF0aCxuYW1lKSBcCi0JKCoobXApLT5tX2RtX29wcy0+eGZzX3NlbmRfbW91bnQpKG1wLHJpZ2h0LHBhdGgsbmFtZSkKLSNkZWZpbmUgWEZTX1NFTkRfUFJFVU5NT1VOVChtcCkgXAotZG8geyBcCi0JaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX0RNQVBJKSB7IFwKLQkJKCoobXApLT5tX2RtX29wcy0+eGZzX3NlbmRfbmFtZXNwKShETV9FVkVOVF9QUkVVTk1PVU5ULCBtcCwgXAotCQkJKG1wKS0+bV9yb290aXAsIERNX1JJR0hUX05VTEwsIFwKLQkJCShtcCktPm1fcm9vdGlwLCBETV9SSUdIVF9OVUxMLCBcCi0JCQlOVUxMLCBOVUxMLCAwLCAwLCBYRlNfRE1BUElfVU5NT1VOVF9GTEFHUyhtcCkpOyBcCi0JfSBcCi19IHdoaWxlICgwKQotI2RlZmluZSBYRlNfU0VORF9VTk1PVU5UKG1wKSBcCi1kbyB7IFwKLQlpZiAobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfRE1BUEkpIHsgXAotCQkoKihtcCktPm1fZG1fb3BzLT54ZnNfc2VuZF91bm1vdW50KShtcCwgKG1wKS0+bV9yb290aXAsIFwKLQkJCURNX1JJR0hUX05VTEwsIDAsIDAsIFhGU19ETUFQSV9VTk1PVU5UX0ZMQUdTKG1wKSk7IFwKLQl9IFwKLX0gd2hpbGUgKDApCi0KLQogI2lmZGVmIEhBVkVfUEVSQ1BVX1NCCiAKIC8qCkBAIC0yNDEsOCArMTgyLDYgQEAKIAl1aW50CQkJbV9jaHNpemU7CS8qIHNpemUgb2YgbmV4dCBmaWVsZCAqLwogCXN0cnVjdCB4ZnNfY2hhc2gJKm1fY2hhc2g7CS8qIGZzIHByaXZhdGUgaW5vZGUgcGVyLWNsdXN0ZXIKIAkJCQkJCSAqIGhhc2ggdGFibGUgKi8KLQlzdHJ1Y3QgeGZzX2Rtb3BzCSptX2RtX29wczsJLyogdmVjdG9yIG9mIERNSSBvcHMgKi8KLQlzdHJ1Y3QgeGZzX3Ftb3BzCSptX3FtX29wczsJLyogdmVjdG9yIG9mIFhRTSBvcHMgKi8KIAlhdG9taWNfdAkJbV9hY3RpdmVfdHJhbnM7CS8qIG51bWJlciB0cmFucyBmcm96ZW4gKi8KICNpZmRlZiBIQVZFX1BFUkNQVV9TQgogCXhmc19pY3NiX2NudHNfdCBfX3BlcmNwdSAqbV9zYl9jbnRzOwkvKiBwZXItY3B1IHN1cGVyYmxvY2sgY291bnRlcnMgKi8KQEAgLTI1OSw3ICsxOTgsNyBAQAogCXdhaXRfcXVldWVfaGVhZF90CW1fd2FpdF9zaW5nbGVfc3luY190YXNrOwogCV9faW50NjRfdAkJbV91cGRhdGVfZmxhZ3M7CS8qIHNiIGZsYWdzIHdlIG5lZWQgdG8gdXBkYXRlCiAJCQkJCQkgICBvbiB0aGUgbmV4dCByZW1vdW50LHJ3ICovCi0Jc3RydWN0IGxpc3RfaGVhZAltX21wbGlzdDsJLyogaW5vZGUgc2hyaW5rZXIgbW91bnQgbGlzdCAqLworCXN0cnVjdCBzaHJpbmtlcgkJbV9pbm9kZV9zaHJpbms7CS8qIGlub2RlIHJlY2xhaW0gc2hyaW5rZXIgKi8KIH0geGZzX21vdW50X3Q7CiAKIC8qCkBAIC0yNjksNyArMjA4LDYgQEAKIAkJCQkJCSAgIG11c3QgYmUgc3luY2hyb25vdXMgZXhjZXB0CiAJCQkJCQkgICBmb3Igc3BhY2UgYWxsb2NhdGlvbnMgKi8KICNkZWZpbmUgWEZTX01PVU5UX0RFTEFZTE9HCSgxVUxMIDw8IDEpCS8qIGRlbGF5ZWQgbG9nZ2luZyBpcyBlbmFibGVkICovCi0jZGVmaW5lIFhGU19NT1VOVF9ETUFQSQkJKDFVTEwgPDwgMikJLyogZG1hcGkgaXMgZW5hYmxlZCAqLwogI2RlZmluZSBYRlNfTU9VTlRfV0FTX0NMRUFOCSgxVUxMIDw8IDMpCiAjZGVmaW5lIFhGU19NT1VOVF9GU19TSFVURE9XTgkoMVVMTCA8PCA0KQkvKiBhdG9taWMgc3RvcCBvZiBhbGwgZmlsZXN5c3RlbQogCQkJCQkJICAgb3BlcmF0aW9ucywgdHlwaWNhbGx5IGZvcgpAQCAtMjgyLDggKzIyMCw2IEBACiAjZGVmaW5lIFhGU19NT1VOVF9HUlBJRAkJKDFVTEwgPDwgOSkJLyogZ3JvdXAtSUQgYXNzaWduZWQgZnJvbSBkaXJlY3RvcnkgKi8KICNkZWZpbmUgWEZTX01PVU5UX05PUkVDT1ZFUlkJKDFVTEwgPDwgMTApCS8qIG5vIHJlY292ZXJ5IC0gZGlydHkgZnMgKi8KICNkZWZpbmUgWEZTX01PVU5UX0RGTFRfSU9TSVpFCSgxVUxMIDw8IDEyKQkvKiBzZXQgZGVmYXVsdCBpL28gc2l6ZSAqLwotI2RlZmluZSBYRlNfTU9VTlRfT1NZTkNJU09TWU5DCSgxVUxMIDw8IDEzKQkvKiBvX3N5bmMgaXMgUkVBTExZIG9fc3luYyAqLwotCQkJCQkJLyogb3N5bmNpc2RzeW5jIGlzIG5vdyBkZWZhdWx0Ki8KICNkZWZpbmUgWEZTX01PVU5UXzMyQklUSU5PREVTCSgxVUxMIDw8IDE0KQkvKiBkbyBub3QgY3JlYXRlIGlub2RlcyBhYm92ZQogCQkJCQkJICogMzIgYml0cyBpbiBzaXplICovCiAjZGVmaW5lIFhGU19NT1VOVF9TTUFMTF9JTlVNUwkoMVVMTCA8PCAxNSkJLyogdXNlcnMgd2FudHMgMzJiaXQgaW5vZGVzICovCkBAIC00NDAsMTEgKzM3Niw2IEBACiAKIGV4dGVybiBpbnQJeGZzX2Rldl9pc19yZWFkX29ubHkoc3RydWN0IHhmc19tb3VudCAqLCBjaGFyICopOwogCi1leHRlcm4gaW50CXhmc19kbW9wc19nZXQoc3RydWN0IHhmc19tb3VudCAqKTsKLWV4dGVybiB2b2lkCXhmc19kbW9wc19wdXQoc3RydWN0IHhmc19tb3VudCAqKTsKLQotZXh0ZXJuIHN0cnVjdCB4ZnNfZG1vcHMgeGZzX2RtY29yZV94ZnM7Ci0KICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAKIGV4dGVybiB2b2lkCXhmc19tb2Rfc2Ioc3RydWN0IHhmc190cmFucyAqLCBfX2ludDY0X3QpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19yZW5hbWUuYyBiL2ZzL3hmcy94ZnNfcmVuYW1lLmMKaW5kZXggZmMxY2RhMi4uOGZjYTk1NyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19yZW5hbWUuYworKysgYi9mcy94ZnMveGZzX3JlbmFtZS5jCkBAIC0yNCwxMiArMjQsOSBAQAogI2luY2x1ZGUgInhmc19zYi5oIgogI2luY2x1ZGUgInhmc19hZy5oIgogI2luY2x1ZGUgInhmc19kaXIyLmgiCi0jaW5jbHVkZSAieGZzX2RtYXBpLmgiCiAjaW5jbHVkZSAieGZzX21vdW50LmgiCiAjaW5jbHVkZSAieGZzX2RhX2J0cmVlLmgiCiAjaW5jbHVkZSAieGZzX2JtYXBfYnRyZWUuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMl9zZi5oIgotI2luY2x1ZGUgInhmc19hdHRyX3NmLmgiCiAjaW5jbHVkZSAieGZzX2Rpbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZV9pdGVtLmgiCkBAIC0xMTYsMjAgKzExMyw3IEBACiAJaW50CQlzcGFjZXJlczsKIAlpbnQJCW51bV9pbm9kZXM7CiAKLQl4ZnNfaXRyYWNlX2VudHJ5KHNyY19kcCk7Ci0JeGZzX2l0cmFjZV9lbnRyeSh0YXJnZXRfZHApOwotCi0JaWYgKERNX0VWRU5UX0VOQUJMRUQoc3JjX2RwLCBETV9FVkVOVF9SRU5BTUUpIHx8Ci0JICAgIERNX0VWRU5UX0VOQUJMRUQodGFyZ2V0X2RwLCBETV9FVkVOVF9SRU5BTUUpKSB7Ci0JCWVycm9yID0gWEZTX1NFTkRfTkFNRVNQKG1wLCBETV9FVkVOVF9SRU5BTUUsCi0JCQkJCXNyY19kcCwgRE1fUklHSFRfTlVMTCwKLQkJCQkJdGFyZ2V0X2RwLCBETV9SSUdIVF9OVUxMLAotCQkJCQlzcmNfbmFtZS0+bmFtZSwgdGFyZ2V0X25hbWUtPm5hbWUsCi0JCQkJCTAsIDAsIDApOwotCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4gZXJyb3I7Ci0JfQotCS8qIFJldHVybiB0aHJvdWdoIHN0ZF9yZXR1cm4gYWZ0ZXIgdGhpcyBwb2ludC4gKi8KKwl0cmFjZV94ZnNfcmVuYW1lKHNyY19kcCwgdGFyZ2V0X2RwLCBzcmNfbmFtZSwgdGFyZ2V0X25hbWUpOwogCiAJbmV3X3BhcmVudCA9IChzcmNfZHAgIT0gdGFyZ2V0X2RwKTsKIAlzcmNfaXNfZGlyZWN0b3J5ID0gKChzcmNfaXAtPmlfZC5kaV9tb2RlICYgU19JRk1UKSA9PSBTX0lGRElSKTsKQEAgLTE4NCwyNiArMTY4LDE0IEBACiAJLyoKIAkgKiBKb2luIGFsbCB0aGUgaW5vZGVzIHRvIHRoZSB0cmFuc2FjdGlvbi4gRnJvbSB0aGlzIHBvaW50IG9uLAogCSAqIHdlIGNhbiByZWx5IG9uIGVpdGhlciB0cmFuc19jb21taXQgb3IgdHJhbnNfY2FuY2VsIHRvIHVubG9jawotCSAqIHRoZW0uICBOb3RlIHRoYXQgd2UgbmVlZCB0byBhZGQgYSB2bm9kZSByZWZlcmVuY2UgdG8gdGhlCi0JICogZGlyZWN0b3JpZXMgc2luY2UgdHJhbnNfY29tbWl0ICYgdHJhbnNfY2FuY2VsIHdpbGwgZGVjcmVtZW50Ci0JICogdGhlbSB3aGVuIHRoZXkgdW5sb2NrIHRoZSBpbm9kZXMuICBBbHNvLCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwKLQkgKiBub3QgdG8gYWRkIGFuIGlub2RlIHRvIHRoZSB0cmFuc2FjdGlvbiBtb3JlIHRoYW4gb25jZS4KKwkgKiB0aGVtLgogCSAqLwotCUlIT0xEKHNyY19kcCk7Ci0JeGZzX3RyYW5zX2lqb2luKHRwLCBzcmNfZHAsIFhGU19JTE9DS19FWENMKTsKLQotCWlmIChuZXdfcGFyZW50KSB7Ci0JCUlIT0xEKHRhcmdldF9kcCk7Ci0JCXhmc190cmFuc19pam9pbih0cCwgdGFyZ2V0X2RwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JfQotCi0JSUhPTEQoc3JjX2lwKTsKLQl4ZnNfdHJhbnNfaWpvaW4odHAsIHNyY19pcCwgWEZTX0lMT0NLX0VYQ0wpOwotCi0JaWYgKHRhcmdldF9pcCkgewotCQlJSE9MRCh0YXJnZXRfaXApOwotCQl4ZnNfdHJhbnNfaWpvaW4odHAsIHRhcmdldF9pcCwgWEZTX0lMT0NLX0VYQ0wpOwotCX0KKwl4ZnNfdHJhbnNfaWpvaW5fcmVmKHRwLCBzcmNfZHAsIFhGU19JTE9DS19FWENMKTsKKwlpZiAobmV3X3BhcmVudCkKKwkJeGZzX3RyYW5zX2lqb2luX3JlZih0cCwgdGFyZ2V0X2RwLCBYRlNfSUxPQ0tfRVhDTCk7CisJeGZzX3RyYW5zX2lqb2luX3JlZih0cCwgc3JjX2lwLCBYRlNfSUxPQ0tfRVhDTCk7CisJaWYgKHRhcmdldF9pcCkKKwkJeGZzX3RyYW5zX2lqb2luX3JlZih0cCwgdGFyZ2V0X2lwLCBYRlNfSUxPQ0tfRVhDTCk7CiAKIAkvKgogCSAqIElmIHdlIGFyZSB1c2luZyBwcm9qZWN0IGluaGVyaXRhbmNlLCB3ZSBvbmx5IGFsbG93IHJlbmFtZXMKQEAgLTM2OSwyNiArMzQxLDEzIEBACiAJICogdHJhbnNfY29tbWl0IHdpbGwgdW5sb2NrIHNyY19pcCwgdGFyZ2V0X2lwICYgZGVjcmVtZW50CiAJICogdGhlIHZub2RlIHJlZmVyZW5jZXMuCiAJICovCi0JZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTKTsKLQotCS8qIEZhbGwgdGhyb3VnaCB0byBzdGRfcmV0dXJuIHdpdGggZXJyb3IgPSAwIG9yIGVycm5vIGZyb20KLQkgKiB4ZnNfdHJhbnNfY29tbWl0CSAqLwotc3RkX3JldHVybjoKLQlpZiAoRE1fRVZFTlRfRU5BQkxFRChzcmNfZHAsIERNX0VWRU5UX1BPU1RSRU5BTUUpIHx8Ci0JICAgIERNX0VWRU5UX0VOQUJMRUQodGFyZ2V0X2RwLCBETV9FVkVOVF9QT1NUUkVOQU1FKSkgewotCQkodm9pZCkgWEZTX1NFTkRfTkFNRVNQIChtcCwgRE1fRVZFTlRfUE9TVFJFTkFNRSwKLQkJCQkJc3JjX2RwLCBETV9SSUdIVF9OVUxMLAotCQkJCQl0YXJnZXRfZHAsIERNX1JJR0hUX05VTEwsCi0JCQkJCXNyY19uYW1lLT5uYW1lLCB0YXJnZXRfbmFtZS0+bmFtZSwKLQkJCQkJMCwgZXJyb3IsIDApOwotCX0KLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMpOwogCiAgYWJvcnRfcmV0dXJuOgogCWNhbmNlbF9mbGFncyB8PSBYRlNfVFJBTlNfQUJPUlQ7Ci0JLyogRkFMTFRIUk9VR0ggKi8KICBlcnJvcl9yZXR1cm46CiAJeGZzX2JtYXBfY2FuY2VsKCZmcmVlX2xpc3QpOwogCXhmc190cmFuc19jYW5jZWwodHAsIGNhbmNlbF9mbGFncyk7Ci0JZ290byBzdGRfcmV0dXJuOworIHN0ZF9yZXR1cm46CisJcmV0dXJuIGVycm9yOwogfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ydGFsbG9jLmMgYi9mcy94ZnMveGZzX3J0YWxsb2MuYwppbmRleCBhMmQzMmNlLi44OTEyNjBmIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3J0YWxsb2MuYworKysgYi9mcy94ZnMveGZzX3J0YWxsb2MuYwpAQCAtMjUsMTcgKzI1LDEwIEBACiAjaW5jbHVkZSAieGZzX3NiLmgiCiAjaW5jbHVkZSAieGZzX2FnLmgiCiAjaW5jbHVkZSAieGZzX2RpcjIuaCIKLSNpbmNsdWRlICJ4ZnNfZG1hcGkuaCIKICNpbmNsdWRlICJ4ZnNfbW91bnQuaCIKICNpbmNsdWRlICJ4ZnNfYm1hcF9idHJlZS5oIgotI2luY2x1ZGUgInhmc19hbGxvY19idHJlZS5oIgotI2luY2x1ZGUgInhmc19pYWxsb2NfYnRyZWUuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMl9zZi5oIgotI2luY2x1ZGUgInhmc19hdHRyX3NmLmgiCiAjaW5jbHVkZSAieGZzX2Rpbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZS5oIgotI2luY2x1ZGUgInhmc19idHJlZS5oIgotI2luY2x1ZGUgInhmc19pYWxsb2MuaCIKICNpbmNsdWRlICJ4ZnNfYWxsb2MuaCIKICNpbmNsdWRlICJ4ZnNfYm1hcC5oIgogI2luY2x1ZGUgInhmc19ydGFsbG9jLmgiCkBAIC0xMjksNyArMTIyLDcgQEAKIAkJY2FuY2VsZmxhZ3MgfD0gWEZTX1RSQU5TX0FCT1JUOwogCQllcnJvciA9IHhmc19ibWFwaSh0cCwgaXAsIG9ibG9ja3MsIG5ibG9ja3MgLSBvYmxvY2tzLAogCQkJWEZTX0JNQVBJX1dSSVRFIHwgWEZTX0JNQVBJX01FVEFEQVRBLCAmZmlyc3RibG9jaywKLQkJCXJlc2Jsa3MsICZtYXAsICZubWFwLCAmZmxpc3QsIE5VTEwpOworCQkJcmVzYmxrcywgJm1hcCwgJm5tYXAsICZmbGlzdCk7CiAJCWlmICghZXJyb3IgJiYgbm1hcCA8IDEpCiAJCQllcnJvciA9IFhGU19FUlJPUihFTk9TUEMpOwogCQlpZiAoZXJyb3IpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3J3LmMgYi9mcy94ZnMveGZzX3J3LmMKaW5kZXggZTMzNjc0Mi4uNTY4NjFkNSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ydy5jCisrKyBiL2ZzL3hmcy94ZnNfcncuYwpAQCAtMjQsMjcgKzI0LDEyIEBACiAjaW5jbHVkZSAieGZzX3RyYW5zLmgiCiAjaW5jbHVkZSAieGZzX3NiLmgiCiAjaW5jbHVkZSAieGZzX2FnLmgiCi0jaW5jbHVkZSAieGZzX2RpcjIuaCIKLSNpbmNsdWRlICJ4ZnNfZG1hcGkuaCIKICNpbmNsdWRlICJ4ZnNfbW91bnQuaCIKICNpbmNsdWRlICJ4ZnNfYm1hcF9idHJlZS5oIgotI2luY2x1ZGUgInhmc19hbGxvY19idHJlZS5oIgotI2luY2x1ZGUgInhmc19pYWxsb2NfYnRyZWUuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMl9zZi5oIgotI2luY2x1ZGUgInhmc19hdHRyX3NmLmgiCiAjaW5jbHVkZSAieGZzX2Rpbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZS5oIgotI2luY2x1ZGUgInhmc19pbm9kZV9pdGVtLmgiCi0jaW5jbHVkZSAieGZzX2l0YWJsZS5oIgotI2luY2x1ZGUgInhmc19idHJlZS5oIgotI2luY2x1ZGUgInhmc19hbGxvYy5oIgotI2luY2x1ZGUgInhmc19pYWxsb2MuaCIKLSNpbmNsdWRlICJ4ZnNfYXR0ci5oIgotI2luY2x1ZGUgInhmc19ibWFwLmgiCiAjaW5jbHVkZSAieGZzX2Vycm9yLmgiCi0jaW5jbHVkZSAieGZzX2J1Zl9pdGVtLmgiCiAjaW5jbHVkZSAieGZzX3J3LmgiCi0jaW5jbHVkZSAieGZzX3RyYWNlLmgiCiAKIC8qCiAgKiBGb3JjZSBhIHNodXRkb3duIG9mIHRoZSBmaWxlc3lzdGVtIGluc3RhbnRseSB3aGlsZSBrZWVwaW5nCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zLmMgYi9mcy94ZnMveGZzX3RyYW5zLmMKaW5kZXggMjg1NDdkZi4uZmRjYTc0MSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFucy5jCisrKyBiL2ZzL3hmcy94ZnNfdHJhbnMuYwpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMywyMDA1IFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBSZWQgSGF0LCBJbmMuCiAgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI0LDE2ICsyNSwxMiBAQAogI2luY2x1ZGUgInhmc190cmFucy5oIgogI2luY2x1ZGUgInhmc19zYi5oIgogI2luY2x1ZGUgInhmc19hZy5oIgotI2luY2x1ZGUgInhmc19kaXIyLmgiCi0jaW5jbHVkZSAieGZzX2RtYXBpLmgiCiAjaW5jbHVkZSAieGZzX21vdW50LmgiCiAjaW5jbHVkZSAieGZzX2Vycm9yLmgiCiAjaW5jbHVkZSAieGZzX2RhX2J0cmVlLmgiCiAjaW5jbHVkZSAieGZzX2JtYXBfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfYWxsb2NfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfaWFsbG9jX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2RpcjJfc2YuaCIKLSNpbmNsdWRlICJ4ZnNfYXR0cl9zZi5oIgogI2luY2x1ZGUgInhmc19kaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfYnRyZWUuaCIKQEAgLTQ3LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKIAoga21lbV96b25lX3QJKnhmc190cmFuc196b25lOwora21lbV96b25lX3QJKnhmc19sb2dfaXRlbV9kZXNjX3pvbmU7CiAKIAogLyoKQEAgLTU5Nyw4ICs1OTUsNyBAQAogCXRwLT50X21hZ2ljID0gWEZTX1RSQU5TX01BR0lDOwogCXRwLT50X3R5cGUgPSB0eXBlOwogCXRwLT50X21vdW50cCA9IG1wOwotCXRwLT50X2l0ZW1zX2ZyZWUgPSBYRlNfTElDX05VTV9TTE9UUzsKLQl4ZnNfbGljX2luaXQoJih0cC0+dF9pdGVtcykpOworCUlOSVRfTElTVF9IRUFEKCZ0cC0+dF9pdGVtcyk7CiAJSU5JVF9MSVNUX0hFQUQoJnRwLT50X2J1c3kpOwogCXJldHVybiB0cDsKIH0KQEAgLTY0Myw4ICs2NDAsNyBAQAogCW50cC0+dF9tYWdpYyA9IFhGU19UUkFOU19NQUdJQzsKIAludHAtPnRfdHlwZSA9IHRwLT50X3R5cGU7CiAJbnRwLT50X21vdW50cCA9IHRwLT50X21vdW50cDsKLQludHAtPnRfaXRlbXNfZnJlZSA9IFhGU19MSUNfTlVNX1NMT1RTOwotCXhmc19saWNfaW5pdCgmKG50cC0+dF9pdGVtcykpOworCUlOSVRfTElTVF9IRUFEKCZudHAtPnRfaXRlbXMpOwogCUlOSVRfTElTVF9IRUFEKCZudHAtPnRfYnVzeSk7CiAKIAlBU1NFUlQodHAtPnRfZmxhZ3MgJiBYRlNfVFJBTlNfUEVSTV9MT0dfUkVTKTsKQEAgLTExMjQsNiArMTEyMCwxMDggQEAKIH0KIAogLyoKKyAqIEFkZCB0aGUgZ2l2ZW4gbG9nIGl0ZW0gdG8gdGhlIHRyYW5zYWN0aW9uJ3MgbGlzdCBvZiBsb2cgaXRlbXMuCisgKgorICogVGhlIGxvZyBpdGVtIHdpbGwgbm93IHBvaW50IHRvIGl0cyBuZXcgZGVzY3JpcHRvciB3aXRoIGl0cyBsaV9kZXNjIGZpZWxkLgorICovCit2b2lkCit4ZnNfdHJhbnNfYWRkX2l0ZW0oCisJc3RydWN0IHhmc190cmFucwkqdHAsCisJc3RydWN0IHhmc19sb2dfaXRlbQkqbGlwKQoreworCXN0cnVjdCB4ZnNfbG9nX2l0ZW1fZGVzYyAqbGlkcDsKKworCUFTU0VSVChsaXAtPmxpX21vdW50cCA9IHRwLT50X21vdW50cCk7CisJQVNTRVJUKGxpcC0+bGlfYWlscCA9IHRwLT50X21vdW50cC0+bV9haWwpOworCisJbGlkcCA9IGttZW1fem9uZV96YWxsb2MoeGZzX2xvZ19pdGVtX2Rlc2Nfem9uZSwgS01fU0xFRVAgfCBLTV9OT0ZTKTsKKworCWxpZHAtPmxpZF9pdGVtID0gbGlwOworCWxpZHAtPmxpZF9mbGFncyA9IDA7CisJbGlkcC0+bGlkX3NpemUgPSAwOworCWxpc3RfYWRkX3RhaWwoJmxpZHAtPmxpZF90cmFucywgJnRwLT50X2l0ZW1zKTsKKworCWxpcC0+bGlfZGVzYyA9IGxpZHA7Cit9CisKK1NUQVRJQyB2b2lkCit4ZnNfdHJhbnNfZnJlZV9pdGVtX2Rlc2MoCisJc3RydWN0IHhmc19sb2dfaXRlbV9kZXNjICpsaWRwKQoreworCWxpc3RfZGVsX2luaXQoJmxpZHAtPmxpZF90cmFucyk7CisJa21lbV96b25lX2ZyZWUoeGZzX2xvZ19pdGVtX2Rlc2Nfem9uZSwgbGlkcCk7Cit9CisKKy8qCisgKiBVbmxpbmsgYW5kIGZyZWUgdGhlIGdpdmVuIGRlc2NyaXB0b3IuCisgKi8KK3ZvaWQKK3hmc190cmFuc19kZWxfaXRlbSgKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXApCit7CisJeGZzX3RyYW5zX2ZyZWVfaXRlbV9kZXNjKGxpcC0+bGlfZGVzYyk7CisJbGlwLT5saV9kZXNjID0gTlVMTDsKK30KKworLyoKKyAqIFVubG9jayBhbGwgb2YgdGhlIGl0ZW1zIG9mIGEgdHJhbnNhY3Rpb24gYW5kIGZyZWUgYWxsIHRoZSBkZXNjcmlwdG9ycworICogb2YgdGhhdCB0cmFuc2FjdGlvbi4KKyAqLworU1RBVElDIHZvaWQKK3hmc190cmFuc19mcmVlX2l0ZW1zKAorCXN0cnVjdCB4ZnNfdHJhbnMJKnRwLAorCXhmc19sc25fdAkJY29tbWl0X2xzbiwKKwlpbnQJCQlmbGFncykKK3sKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtX2Rlc2MgKmxpZHAsICpuZXh0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxpZHAsIG5leHQsICZ0cC0+dF9pdGVtcywgbGlkX3RyYW5zKSB7CisJCXN0cnVjdCB4ZnNfbG9nX2l0ZW0JKmxpcCA9IGxpZHAtPmxpZF9pdGVtOworCisJCWxpcC0+bGlfZGVzYyA9IE5VTEw7CisKKwkJaWYgKGNvbW1pdF9sc24gIT0gTlVMTENPTU1JVExTTikKKwkJCUlPUF9DT01NSVRUSU5HKGxpcCwgY29tbWl0X2xzbik7CisJCWlmIChmbGFncyAmIFhGU19UUkFOU19BQk9SVCkKKwkJCWxpcC0+bGlfZmxhZ3MgfD0gWEZTX0xJX0FCT1JURUQ7CisJCUlPUF9VTkxPQ0sobGlwKTsKKworCQl4ZnNfdHJhbnNfZnJlZV9pdGVtX2Rlc2MobGlkcCk7CisJfQorfQorCisvKgorICogVW5sb2NrIHRoZSBpdGVtcyBhc3NvY2lhdGVkIHdpdGggYSB0cmFuc2FjdGlvbi4KKyAqCisgKiBJdGVtcyB3aGljaCB3ZXJlIG5vdCBsb2dnZWQgc2hvdWxkIGJlIGZyZWVkLiAgVGhvc2Ugd2hpY2ggd2VyZSBsb2dnZWQgbXVzdAorICogc3RpbGwgYmUgdHJhY2tlZCBzbyB0aGV5IGNhbiBiZSB1bnBpbm5lZCB3aGVuIHRoZSB0cmFuc2FjdGlvbiBjb21taXRzLgorICovCitTVEFUSUMgdm9pZAoreGZzX3RyYW5zX3VubG9ja19pdGVtcygKKwlzdHJ1Y3QgeGZzX3RyYW5zCSp0cCwKKwl4ZnNfbHNuX3QJCWNvbW1pdF9sc24pCit7CisJc3RydWN0IHhmc19sb2dfaXRlbV9kZXNjICpsaWRwLCAqbmV4dDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsaWRwLCBuZXh0LCAmdHAtPnRfaXRlbXMsIGxpZF90cmFucykgeworCQlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXAgPSBsaWRwLT5saWRfaXRlbTsKKworCQlsaXAtPmxpX2Rlc2MgPSBOVUxMOworCisJCWlmIChjb21taXRfbHNuICE9IE5VTExDT01NSVRMU04pCisJCQlJT1BfQ09NTUlUVElORyhsaXAsIGNvbW1pdF9sc24pOworCQlJT1BfVU5MT0NLKGxpcCk7CisKKwkJLyoKKwkJICogRnJlZSB0aGUgZGVzY3JpcHRvciBpZiB0aGUgaXRlbSBpcyBub3QgZGlydHkKKwkJICogd2l0aGluIHRoaXMgdHJhbnNhY3Rpb24uCisJCSAqLworCQlpZiAoIShsaWRwLT5saWRfZmxhZ3MgJiBYRlNfTElEX0RJUlRZKSkKKwkJCXhmc190cmFuc19mcmVlX2l0ZW1fZGVzYyhsaWRwKTsKKwl9Cit9CisKKy8qCiAgKiBUb3RhbCB1cCB0aGUgbnVtYmVyIG9mIGxvZyBpb3ZlY3MgbmVlZGVkIHRvIGNvbW1pdCB0aGlzCiAgKiB0cmFuc2FjdGlvbi4gIFRoZSB0cmFuc2FjdGlvbiBpdHNlbGYgbmVlZHMgb25lIGZvciB0aGUKICAqIHRyYW5zYWN0aW9uIGhlYWRlci4gIEFzayBlYWNoIGRpcnR5IGl0ZW0gaW4gdHVybiBob3cgbWFueQpAQCAtMTEzNCwzMCArMTIzMiwyNyBAQAogCXN0cnVjdCB4ZnNfdHJhbnMJKnRwKQogewogCWludAkJCW52ZWNzOwotCXhmc19sb2dfaXRlbV9kZXNjX3QJKmxpZHA7CisJc3RydWN0IHhmc19sb2dfaXRlbV9kZXNjICpsaWRwOwogCiAJbnZlY3MgPSAxOwotCWxpZHAgPSB4ZnNfdHJhbnNfZmlyc3RfaXRlbSh0cCk7Ci0JQVNTRVJUKGxpZHAgIT0gTlVMTCk7CiAKIAkvKiBJbiB0aGUgbm9uLWRlYnVnIGNhc2Ugd2UgbmVlZCB0byBzdGFydCBiYWlsaW5nIG91dCBpZiB3ZQogCSAqIGRpZG4ndCBmaW5kIGEgbG9nX2l0ZW0gaGVyZSwgcmV0dXJuIHplcm8gYW5kIGxldCB0cmFuc19jb21taXQKIAkgKiBkZWFsIHdpdGggaXQuCiAJICovCi0JaWYgKGxpZHAgPT0gTlVMTCkKKwlpZiAobGlzdF9lbXB0eSgmdHAtPnRfaXRlbXMpKSB7CisJCUFTU0VSVCgwKTsKIAkJcmV0dXJuIDA7CisJfQogCi0Jd2hpbGUgKGxpZHAgIT0gTlVMTCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkobGlkcCwgJnRwLT50X2l0ZW1zLCBsaWRfdHJhbnMpIHsKIAkJLyoKIAkJICogU2tpcCBpdGVtcyB3aGljaCBhcmVuJ3QgZGlydHkgaW4gdGhpcyB0cmFuc2FjdGlvbi4KIAkJICovCi0JCWlmICghKGxpZHAtPmxpZF9mbGFncyAmIFhGU19MSURfRElSVFkpKSB7Ci0JCQlsaWRwID0geGZzX3RyYW5zX25leHRfaXRlbSh0cCwgbGlkcCk7CisJCWlmICghKGxpZHAtPmxpZF9mbGFncyAmIFhGU19MSURfRElSVFkpKQogCQkJY29udGludWU7Ci0JCX0KIAkJbGlkcC0+bGlkX3NpemUgPSBJT1BfU0laRShsaWRwLT5saWRfaXRlbSk7CiAJCW52ZWNzICs9IGxpZHAtPmxpZF9zaXplOwotCQlsaWRwID0geGZzX3RyYW5zX25leHRfaXRlbSh0cCwgbGlkcCk7CiAJfQogCiAJcmV0dXJuIG52ZWNzOwpAQCAtMTE3Nyw3ICsxMjcyLDcgQEAKIAlzdHJ1Y3QgeGZzX3RyYW5zCSp0cCwKIAlzdHJ1Y3QgeGZzX2xvZ19pb3ZlYwkqbG9nX3ZlY3RvcikKIHsKLQl4ZnNfbG9nX2l0ZW1fZGVzY190CSpsaWRwOworCXN0cnVjdCB4ZnNfbG9nX2l0ZW1fZGVzYyAqbGlkcDsKIAlzdHJ1Y3QgeGZzX2xvZ19pb3ZlYwkqdmVjcDsKIAl1aW50CQkJbml0ZW1zOwogCkBAIC0xMTg4LDE0ICsxMjgzLDExIEBACiAJdmVjcCA9IGxvZ192ZWN0b3IgKyAxOwogCiAJbml0ZW1zID0gMDsKLQlsaWRwID0geGZzX3RyYW5zX2ZpcnN0X2l0ZW0odHApOwotCUFTU0VSVChsaWRwKTsKLQl3aGlsZSAobGlkcCkgeworCUFTU0VSVCghbGlzdF9lbXB0eSgmdHAtPnRfaXRlbXMpKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxpZHAsICZ0cC0+dF9pdGVtcywgbGlkX3RyYW5zKSB7CiAJCS8qIFNraXAgaXRlbXMgd2hpY2ggYXJlbid0IGRpcnR5IGluIHRoaXMgdHJhbnNhY3Rpb24uICovCi0JCWlmICghKGxpZHAtPmxpZF9mbGFncyAmIFhGU19MSURfRElSVFkpKSB7Ci0JCQlsaWRwID0geGZzX3RyYW5zX25leHRfaXRlbSh0cCwgbGlkcCk7CisJCWlmICghKGxpZHAtPmxpZF9mbGFncyAmIFhGU19MSURfRElSVFkpKQogCQkJY29udGludWU7Ci0JCX0KIAogCQkvKgogCQkgKiBUaGUgaXRlbSBtYXkgYmUgbWFya2VkIGRpcnR5IGJ1dCBub3QgbG9nIGFueXRoaW5nLiAgVGhpcyBjYW4KQEAgLTEyMDYsNyArMTI5OCw2IEBACiAJCUlPUF9GT1JNQVQobGlkcC0+bGlkX2l0ZW0sIHZlY3ApOwogCQl2ZWNwICs9IGxpZHAtPmxpZF9zaXplOwogCQlJT1BfUElOKGxpZHAtPmxpZF9pdGVtKTsKLQkJbGlkcCA9IHhmc190cmFuc19uZXh0X2l0ZW0odHAsIGxpZHApOwogCX0KIAogCS8qCkBAIC0xMjg0LDcgKzEzNzUsNyBAQAogCSAqIGxvZyBpdGVtIGZsYWdzLCBpZiBhbnlvbmUgZWxzZSBzdGFsZXMgdGhlIGJ1ZmZlciB3ZSBkbyBub3Qgd2FudCB0bwogCSAqIHBheSBhbnkgYXR0ZW50aW9uIHRvIGl0LgogCSAqLwotCUlPUF9VTlBJTihsaXApOworCUlPUF9VTlBJTihsaXAsIDApOwogfQogCiAvKgpAQCAtMTMwMSwyNCArMTM5MiwxNSBAQAogCXN0cnVjdCB4ZnNfdHJhbnMJKnRwLAogCWludAkJCWFib3J0ZmxhZykKIHsKLQl4ZnNfbG9nX2l0ZW1fZGVzY190CSpsaWRwOwotCXhmc19sb2dfaXRlbV9jaHVua190CSpsaWNwOwotCXhmc19sb2dfaXRlbV9jaHVua190CSpuZXh0X2xpY3A7CisJc3RydWN0IHhmc19sb2dfaXRlbV9kZXNjICpsaWRwLCAqbmV4dDsKIAogCS8qIENhbGwgdGhlIHRyYW5zYWN0aW9uJ3MgY29tcGxldGlvbiBjYWxsYmFjayBpZiB0aGVyZSBpcyBvbmUuICovCiAJaWYgKHRwLT50X2NhbGxiYWNrICE9IE5VTEwpCiAJCXRwLT50X2NhbGxiYWNrKHRwLCB0cC0+dF9jYWxsYXJnKTsKIAotCWZvciAobGlkcCA9IHhmc190cmFuc19maXJzdF9pdGVtKHRwKTsKLQkgICAgIGxpZHAgIT0gTlVMTDsKLQkgICAgIGxpZHAgPSB4ZnNfdHJhbnNfbmV4dF9pdGVtKHRwLCBsaWRwKSkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsaWRwLCBuZXh0LCAmdHAtPnRfaXRlbXMsIGxpZF90cmFucykgewogCQl4ZnNfdHJhbnNfaXRlbV9jb21taXR0ZWQobGlkcC0+bGlkX2l0ZW0sIHRwLT50X2xzbiwgYWJvcnRmbGFnKTsKLQl9Ci0KLQkvKiBmcmVlIHRoZSBpdGVtIGNodW5rcywgaWdub3JpbmcgdGhlIGVtYmVkZGVkIGNodW5rICovCi0JZm9yIChsaWNwID0gdHAtPnRfaXRlbXMubGljX25leHQ7IGxpY3AgIT0gTlVMTDsgbGljcCA9IG5leHRfbGljcCkgewotCQluZXh0X2xpY3AgPSBsaWNwLT5saWNfbmV4dDsKLQkJa21lbV9mcmVlKGxpY3ApOworCQl4ZnNfdHJhbnNfZnJlZV9pdGVtX2Rlc2MobGlkcCk7CiAJfQogCiAJeGZzX3RyYW5zX2ZyZWUodHApOwpAQCAtMTMzMywxNiArMTQxNSwxNCBAQAogCXN0cnVjdCB4ZnNfdHJhbnMJKnRwLAogCXVpbnQJCQlmbGFncykKIHsKLQl4ZnNfbG9nX2l0ZW1fZGVzY190CSpsaWRwOworCXN0cnVjdCB4ZnNfbG9nX2l0ZW1fZGVzYyAqbGlkcDsKIAotCWZvciAobGlkcCA9IHhmc190cmFuc19maXJzdF9pdGVtKHRwKTsKLQkgICAgIGxpZHAgIT0gTlVMTDsKLQkgICAgIGxpZHAgPSB4ZnNfdHJhbnNfbmV4dF9pdGVtKHRwLCBsaWRwKSkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkobGlkcCwgJnRwLT50X2l0ZW1zLCBsaWRfdHJhbnMpIHsKIAkJLyoKIAkJICogVW5waW4gYWxsIGJ1dCB0aG9zZSB0aGF0IGFyZW4ndCBkaXJ0eS4KIAkJICovCiAJCWlmIChsaWRwLT5saWRfZmxhZ3MgJiBYRlNfTElEX0RJUlRZKQotCQkJSU9QX1VOUElOX1JFTU9WRShsaWRwLT5saWRfaXRlbSwgdHApOworCQkJSU9QX1VOUElOKGxpZHAtPmxpZF9pdGVtLCAxKTsKIAl9CiAKIAl4ZnNfdHJhbnNfdW5yZXNlcnZlX2FuZF9tb2Rfc2IodHApOwpAQCAtMTUwOCwzMyArMTU4OCwyOCBAQAogeGZzX3RyYW5zX2FsbG9jX2xvZ192ZWNzKAogCXhmc190cmFuc190CSp0cCkKIHsKLQl4ZnNfbG9nX2l0ZW1fZGVzY190CSpsaWRwOworCXN0cnVjdCB4ZnNfbG9nX2l0ZW1fZGVzYyAqbGlkcDsKIAlzdHJ1Y3QgeGZzX2xvZ192ZWMJKmx2ID0gTlVMTDsKIAlzdHJ1Y3QgeGZzX2xvZ192ZWMJKnJldF9sdiA9IE5VTEw7CiAKLQlsaWRwID0geGZzX3RyYW5zX2ZpcnN0X2l0ZW0odHApOwogCiAJLyogQmFpbCBvdXQgaWYgd2UgZGlkbid0IGZpbmQgYSBsb2cgaXRlbS4gICovCi0JaWYgKCFsaWRwKSB7CisJaWYgKGxpc3RfZW1wdHkoJnRwLT50X2l0ZW1zKSkgewogCQlBU1NFUlQoMCk7CiAJCXJldHVybiBOVUxMOwogCX0KIAotCXdoaWxlIChsaWRwICE9IE5VTEwpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxpZHAsICZ0cC0+dF9pdGVtcywgbGlkX3RyYW5zKSB7CiAJCXN0cnVjdCB4ZnNfbG9nX3ZlYyAqbmV3X2x2OwogCiAJCS8qIFNraXAgaXRlbXMgd2hpY2ggYXJlbid0IGRpcnR5IGluIHRoaXMgdHJhbnNhY3Rpb24uICovCi0JCWlmICghKGxpZHAtPmxpZF9mbGFncyAmIFhGU19MSURfRElSVFkpKSB7Ci0JCQlsaWRwID0geGZzX3RyYW5zX25leHRfaXRlbSh0cCwgbGlkcCk7CisJCWlmICghKGxpZHAtPmxpZF9mbGFncyAmIFhGU19MSURfRElSVFkpKQogCQkJY29udGludWU7Ci0JCX0KIAogCQkvKiBTa2lwIGl0ZW1zIHRoYXQgZG8gbm90IGhhdmUgYW55IHZlY3RvcnMgZm9yIHdyaXRpbmcgKi8KIAkJbGlkcC0+bGlkX3NpemUgPSBJT1BfU0laRShsaWRwLT5saWRfaXRlbSk7Ci0JCWlmICghbGlkcC0+bGlkX3NpemUpIHsKLQkJCWxpZHAgPSB4ZnNfdHJhbnNfbmV4dF9pdGVtKHRwLCBsaWRwKTsKKwkJaWYgKCFsaWRwLT5saWRfc2l6ZSkKIAkJCWNvbnRpbnVlOwotCQl9CiAKIAkJbmV3X2x2ID0ga21lbV96YWxsb2Moc2l6ZW9mKCpuZXdfbHYpICsKIAkJCQlsaWRwLT5saWRfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgeGZzX2xvZ19pb3ZlYyksCkBAIC0xNTQ5LDcgKzE2MjQsNiBAQAogCQllbHNlCiAJCQlsdi0+bHZfbmV4dCA9IG5ld19sdjsKIAkJbHYgPSBuZXdfbHY7Ci0JCWxpZHAgPSB4ZnNfdHJhbnNfbmV4dF9pdGVtKHRwLCBsaWRwKTsKIAl9CiAKIAlyZXR1cm4gcmV0X2x2OwpAQCAtMTcwOCwxMiArMTc4Miw2IEBACiAJaW50CQkJZmxhZ3MpCiB7CiAJaW50CQkJbG9nX2ZsYWdzOwotI2lmZGVmIERFQlVHCi0JeGZzX2xvZ19pdGVtX2NodW5rX3QJKmxpY3A7Ci0JeGZzX2xvZ19pdGVtX2Rlc2NfdAkqbGlkcDsKLQl4ZnNfbG9nX2l0ZW1fdAkJKmxpcDsKLQlpbnQJCQlpOwotI2VuZGlmCiAJeGZzX21vdW50X3QJCSptcCA9IHRwLT50X21vdW50cDsKIAogCS8qCkBAIC0xNzMyLDIxICsxODAwLDExIEBACiAJCXhmc19mb3JjZV9zaHV0ZG93bihtcCwgU0hVVERPV05fQ09SUlVQVF9JTkNPUkUpOwogCX0KICNpZmRlZiBERUJVRwotCWlmICghKGZsYWdzICYgWEZTX1RSQU5TX0FCT1JUKSkgewotCQlsaWNwID0gJih0cC0+dF9pdGVtcyk7Ci0JCXdoaWxlIChsaWNwICE9IE5VTEwpIHsKLQkJCWxpZHAgPSBsaWNwLT5saWNfZGVzY3M7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbGljcC0+bGljX3VudXNlZDsgaSsrLCBsaWRwKyspIHsKLQkJCQlpZiAoeGZzX2xpY19pc2ZyZWUobGljcCwgaSkpIHsKLQkJCQkJY29udGludWU7Ci0JCQkJfQorCWlmICghKGZsYWdzICYgWEZTX1RSQU5TX0FCT1JUKSAmJiAhWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpIHsKKwkJc3RydWN0IHhmc19sb2dfaXRlbV9kZXNjICpsaWRwOwogCi0JCQkJbGlwID0gbGlkcC0+bGlkX2l0ZW07Ci0JCQkJaWYgKCFYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkKLQkJCQkJQVNTRVJUKCEobGlwLT5saV90eXBlID09IFhGU19MSV9FRkQpKTsKLQkJCX0KLQkJCWxpY3AgPSBsaWNwLT5saWNfbmV4dDsKLQkJfQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxpZHAsICZ0cC0+dF9pdGVtcywgbGlkX3RyYW5zKQorCQkJQVNTRVJUKCEobGlkcC0+bGlkX2l0ZW0tPmxpX3R5cGUgPT0gWEZTX0xJX0VGRCkpOwogCX0KICNlbmRpZgogCXhmc190cmFuc191bnJlc2VydmVfYW5kX21vZF9zYih0cCk7CkBAIC0xODM0LDcgKzE4OTIsNiBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JeGZzX3RyYW5zX2lqb2luKHRyYW5zLCBkcCwgWEZTX0lMT0NLX0VYQ0wpOwotCXhmc190cmFuc19paG9sZCh0cmFucywgZHApOworCXhmc190cmFuc19pam9pbih0cmFucywgZHApOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFucy5oIGIvZnMveGZzL3hmc190cmFucy5oCmluZGV4IGU2MzllOGUuLmMxM2MwZjkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnMuaAorKysgYi9mcy94ZnMveGZzX3RyYW5zLmgKQEAgLTE2MSwxMDUgKzE2MSwxNCBAQAogICogdGhlIGFtb3VudCBvZiBzcGFjZSBuZWVkZWQgdG8gbG9nIHRoZSBpdGVtIGl0IGRlc2NyaWJlcwogICogb25jZSB3ZSBnZXQgdG8gY29tbWl0IHByb2Nlc3NpbmcgKHNlZSB4ZnNfdHJhbnNfY29tbWl0KCkpLgogICovCi10eXBlZGVmIHN0cnVjdCB4ZnNfbG9nX2l0ZW1fZGVzYyB7CitzdHJ1Y3QgeGZzX2xvZ19pdGVtX2Rlc2MgewogCXN0cnVjdCB4ZnNfbG9nX2l0ZW0JKmxpZF9pdGVtOwotCXVzaG9ydAkJbGlkX3NpemU7Ci0JdW5zaWduZWQgY2hhcglsaWRfZmxhZ3M7Ci0JdW5zaWduZWQgY2hhcglsaWRfaW5kZXg7Ci19IHhmc19sb2dfaXRlbV9kZXNjX3Q7CisJdXNob3J0CQkJbGlkX3NpemU7CisJdW5zaWduZWQgY2hhcgkJbGlkX2ZsYWdzOworCXN0cnVjdCBsaXN0X2hlYWQJbGlkX3RyYW5zOworfTsKIAogI2RlZmluZSBYRlNfTElEX0RJUlRZCQkweDEKLSNkZWZpbmUgWEZTX0xJRF9QSU5ORUQJCTB4MgotCi0vKgotICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBtYWludGFpbiBhIGNodW5rIGxpc3Qgb2YgbG9nX2l0ZW1fZGVzYwotICogc3RydWN0dXJlcy4gVGhlIGZyZWUgZmllbGQgaXMgYSBiaXRtYXNrIGluZGljYXRpbmcgd2hpY2ggZGVzY3JpcHRvcnMKLSAqIGluIHRoaXMgY2h1bmsncyBhcnJheSBhcmUgZnJlZS4gIFRoZSB1bnVzZWQgZmllbGQgaXMgdGhlIGZpcnN0IHZhbHVlCi0gKiBub3QgdXNlZCBzaW5jZSB0aGlzIGNodW5rIHdhcyBhbGxvY2F0ZWQuCi0gKi8KLSNkZWZpbmUJWEZTX0xJQ19OVU1fU0xPVFMJMTUKLXR5cGVkZWYgc3RydWN0IHhmc19sb2dfaXRlbV9jaHVuayB7Ci0Jc3RydWN0IHhmc19sb2dfaXRlbV9jaHVuawkqbGljX25leHQ7Ci0JdXNob3J0CQkJCWxpY19mcmVlOwotCXVzaG9ydAkJCQlsaWNfdW51c2VkOwotCXhmc19sb2dfaXRlbV9kZXNjX3QJCWxpY19kZXNjc1tYRlNfTElDX05VTV9TTE9UU107Ci19IHhmc19sb2dfaXRlbV9jaHVua190OwotCi0jZGVmaW5lCVhGU19MSUNfTUFYX1NMT1QJKFhGU19MSUNfTlVNX1NMT1RTIC0gMSkKLSNkZWZpbmUJWEZTX0xJQ19GUkVFTUFTSwkoKDEgPDwgWEZTX0xJQ19OVU1fU0xPVFMpIC0gMSkKLQotCi0vKgotICogSW5pdGlhbGl6ZSB0aGUgZ2l2ZW4gY2h1bmsuICBTZXQgdGhlIGNodW5rJ3MgZnJlZSBkZXNjcmlwdG9yIG1hc2sKLSAqIHRvIGluZGljYXRlIHRoYXQgYWxsIGRlc2NyaXB0b3JzIGFyZSBmcmVlLiAgVGhlIGNhbGxlciBnZXRzIHRvIHNldAotICogbGljX3VudXNlZCB0byB0aGUgcmlnaHQgdmFsdWUgKDAgbWF0Y2hlcyBhbGwgZnJlZSkuICBUaGUKLSAqIGxpY19kZXNjcy5saWRfaW5kZXggdmFsdWVzIGFyZSBzZXQgdXAgYXMgZWFjaCBkZXNjIGlzIGFsbG9jYXRlZC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHhmc19saWNfaW5pdCh4ZnNfbG9nX2l0ZW1fY2h1bmtfdCAqY3ApCi17Ci0JY3AtPmxpY19mcmVlID0gWEZTX0xJQ19GUkVFTUFTSzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHhmc19saWNfaW5pdF9zbG90KHhmc19sb2dfaXRlbV9jaHVua190ICpjcCwgaW50IHNsb3QpCi17Ci0JY3AtPmxpY19kZXNjc1tzbG90XS5saWRfaW5kZXggPSAodW5zaWduZWQgY2hhcikoc2xvdCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHhmc19saWNfdmFjYW5jeSh4ZnNfbG9nX2l0ZW1fY2h1bmtfdCAqY3ApCi17Ci0JcmV0dXJuIGNwLT5saWNfZnJlZSAmIFhGU19MSUNfRlJFRU1BU0s7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB4ZnNfbGljX2FsbF9mcmVlKHhmc19sb2dfaXRlbV9jaHVua190ICpjcCkKLXsKLQljcC0+bGljX2ZyZWUgPSBYRlNfTElDX0ZSRUVNQVNLOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB4ZnNfbGljX2FyZV9hbGxfZnJlZSh4ZnNfbG9nX2l0ZW1fY2h1bmtfdCAqY3ApCi17Ci0JcmV0dXJuICgoY3AtPmxpY19mcmVlICYgWEZTX0xJQ19GUkVFTUFTSykgPT0gWEZTX0xJQ19GUkVFTUFTSyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHhmc19saWNfaXNmcmVlKHhmc19sb2dfaXRlbV9jaHVua190ICpjcCwgaW50IHNsb3QpCi17Ci0JcmV0dXJuIChjcC0+bGljX2ZyZWUgJiAoMSA8PCBzbG90KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB4ZnNfbGljX2NsYWltKHhmc19sb2dfaXRlbV9jaHVua190ICpjcCwgaW50IHNsb3QpCi17Ci0JY3AtPmxpY19mcmVlICY9IH4oMSA8PCBzbG90KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHhmc19saWNfcmVsc2UoeGZzX2xvZ19pdGVtX2NodW5rX3QgKmNwLCBpbnQgc2xvdCkKLXsKLQljcC0+bGljX2ZyZWUgfD0gMSA8PCBzbG90OwotfQotCi1zdGF0aWMgaW5saW5lIHhmc19sb2dfaXRlbV9kZXNjX3QgKgoteGZzX2xpY19zbG90KHhmc19sb2dfaXRlbV9jaHVua190ICpjcCwgaW50IHNsb3QpCi17Ci0JcmV0dXJuICYoY3AtPmxpY19kZXNjc1tzbG90XSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHhmc19saWNfZGVzY190b19zbG90KHhmc19sb2dfaXRlbV9kZXNjX3QgKmRwKQotewotCXJldHVybiAodWludClkcC0+bGlkX2luZGV4OwotfQotCi0vKgotICogQ2FsY3VsYXRlIHRoZSBhZGRyZXNzIG9mIGEgY2h1bmsgZ2l2ZW4gYSBkZXNjcmlwdG9yIHBvaW50ZXI6Ci0gKiBkcCAtIGRwLT5saWRfaW5kZXggZ2l2ZSB0aGUgYWRkcmVzcyBvZiB0aGUgc3RhcnQgb2YgdGhlIGxpY19kZXNjcyBhcnJheS4KLSAqIEZyb20gdGhpcyB3ZSBzdWJ0cmFjdCB0aGUgb2Zmc2V0IG9mIHRoZSBsaWNfZGVzY3MgZmllbGQgaW4gYSBjaHVuay4KLSAqIEFsbCBvZiB0aGlzIHlpZWxkcyB0aGUgYWRkcmVzcyBvZiB0aGUgY2h1bmssIHdoaWNoIGlzCi0gKiBjYXN0IHRvIGEgY2h1bmsgcG9pbnRlci4KLSAqLwotc3RhdGljIGlubGluZSB4ZnNfbG9nX2l0ZW1fY2h1bmtfdCAqCi14ZnNfbGljX2Rlc2NfdG9fY2h1bmsoeGZzX2xvZ19pdGVtX2Rlc2NfdCAqZHApCi17Ci0JcmV0dXJuICh4ZnNfbG9nX2l0ZW1fY2h1bmtfdCopIFwKLQkJKCgoeGZzX2NhZGRyX3QpKChkcCkgLSAoZHApLT5saWRfaW5kZXgpKSAtIFwKLQkJKHhmc19jYWRkcl90KSgoKHhmc19sb2dfaXRlbV9jaHVua190KikwKS0+bGljX2Rlc2NzKSk7Ci19CiAKICNkZWZpbmUJWEZTX1RSQU5TX01BR0lDCQkweDU0NTI0MTRFCS8qICdUUkFOJyAqLwogLyoKQEAgLTI3NSw4ICsxODQsNiBAQAogLyoKICAqIFZhbHVlcyBmb3IgY2FsbCBmbGFncyBwYXJhbWV0ZXIuCiAgKi8KLSNkZWZpbmUJWEZTX1RSQU5TX05PU0xFRVAJCTB4MQotI2RlZmluZQlYRlNfVFJBTlNfV0FJVAkJCTB4MgogI2RlZmluZQlYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTCTB4NAogI2RlZmluZQlYRlNfVFJBTlNfQUJPUlQJCQkweDgKIApAQCAtNDM4LDggKzM0NSw3IEBACiAJdWludCAoKmlvcF9zaXplKSh4ZnNfbG9nX2l0ZW1fdCAqKTsKIAl2b2lkICgqaW9wX2Zvcm1hdCkoeGZzX2xvZ19pdGVtX3QgKiwgc3RydWN0IHhmc19sb2dfaW92ZWMgKik7CiAJdm9pZCAoKmlvcF9waW4pKHhmc19sb2dfaXRlbV90ICopOwotCXZvaWQgKCppb3BfdW5waW4pKHhmc19sb2dfaXRlbV90ICopOwotCXZvaWQgKCppb3BfdW5waW5fcmVtb3ZlKSh4ZnNfbG9nX2l0ZW1fdCAqLCBzdHJ1Y3QgeGZzX3RyYW5zICopOworCXZvaWQgKCppb3BfdW5waW4pKHhmc19sb2dfaXRlbV90ICosIGludCByZW1vdmUpOwogCXVpbnQgKCppb3BfdHJ5bG9jaykoeGZzX2xvZ19pdGVtX3QgKik7CiAJdm9pZCAoKmlvcF91bmxvY2spKHhmc19sb2dfaXRlbV90ICopOwogCXhmc19sc25fdCAoKmlvcF9jb21taXR0ZWQpKHhmc19sb2dfaXRlbV90ICosIHhmc19sc25fdCk7CkBAIC00NTEsOCArMzU3LDcgQEAKICNkZWZpbmUgSU9QX1NJWkUoaXApCQkoKihpcCktPmxpX29wcy0+aW9wX3NpemUpKGlwKQogI2RlZmluZSBJT1BfRk9STUFUKGlwLHZwKQkoKihpcCktPmxpX29wcy0+aW9wX2Zvcm1hdCkoaXAsIHZwKQogI2RlZmluZSBJT1BfUElOKGlwKQkJKCooaXApLT5saV9vcHMtPmlvcF9waW4pKGlwKQotI2RlZmluZSBJT1BfVU5QSU4oaXApCQkoKihpcCktPmxpX29wcy0+aW9wX3VucGluKShpcCkKLSNkZWZpbmUgSU9QX1VOUElOX1JFTU9WRShpcCx0cCkgKCooaXApLT5saV9vcHMtPmlvcF91bnBpbl9yZW1vdmUpKGlwLCB0cCkKKyNkZWZpbmUgSU9QX1VOUElOKGlwLCByZW1vdmUpCSgqKGlwKS0+bGlfb3BzLT5pb3BfdW5waW4pKGlwLCByZW1vdmUpCiAjZGVmaW5lIElPUF9UUllMT0NLKGlwKQkJKCooaXApLT5saV9vcHMtPmlvcF90cnlsb2NrKShpcCkKICNkZWZpbmUgSU9QX1VOTE9DSyhpcCkJCSgqKGlwKS0+bGlfb3BzLT5pb3BfdW5sb2NrKShpcCkKICNkZWZpbmUgSU9QX0NPTU1JVFRFRChpcCwgbHNuKQkoKihpcCktPmxpX29wcy0+aW9wX2NvbW1pdHRlZCkoaXAsIGxzbikKQEAgLTUxNiw4ICs0MjEsNyBAQAogCWludDY0X3QJCQl0X3JibG9ja3NfZGVsdGE7Lyogc3VwZXJibG9jayByYmxvY2tzIGNoYW5nZSAqLwogCWludDY0X3QJCQl0X3JleHRlbnRzX2RlbHRhOy8qIHN1cGVyYmxvY2tzIHJleHRlbnRzIGNoZyAqLwogCWludDY0X3QJCQl0X3JleHRzbG9nX2RlbHRhOy8qIHN1cGVyYmxvY2tzIHJleHRzbG9nIGNoZyAqLwotCXVuc2lnbmVkIGludAkJdF9pdGVtc19mcmVlOwkvKiBsb2cgaXRlbSBkZXNjcyBmcmVlICovCi0JeGZzX2xvZ19pdGVtX2NodW5rX3QJdF9pdGVtczsJLyogZmlyc3QgbG9nIGl0ZW0gZGVzYyBjaHVuayAqLworCXN0cnVjdCBsaXN0X2hlYWQJdF9pdGVtczsJLyogbG9nIGl0ZW0gZGVzY3JpcHRvcnMgKi8KIAl4ZnNfdHJhbnNfaGVhZGVyX3QJdF9oZWFkZXI7CS8qIGhlYWRlciBmb3IgaW4tbG9nIHRyYW5zICovCiAJc3RydWN0IGxpc3RfaGVhZAl0X2J1c3k7CQkvKiBsaXN0IG9mIGJ1c3kgZXh0ZW50cyAqLwogCXVuc2lnbmVkIGxvbmcJCXRfcGZsYWdzOwkvKiBzYXZlZCBwcm9jZXNzIGZsYWdzIHN0YXRlICovCkBAIC01NjksOCArNDczLDggQEAKIHZvaWQJCXhmc190cmFuc19pbm9kZV9hbGxvY19idWYoeGZzX3RyYW5zX3QgKiwgc3RydWN0IHhmc19idWYgKik7CiBpbnQJCXhmc190cmFuc19pZ2V0KHN0cnVjdCB4ZnNfbW91bnQgKiwgeGZzX3RyYW5zX3QgKiwKIAkJCSAgICAgICB4ZnNfaW5vX3QgLCB1aW50LCB1aW50LCBzdHJ1Y3QgeGZzX2lub2RlICoqKTsKLXZvaWQJCXhmc190cmFuc19pam9pbih4ZnNfdHJhbnNfdCAqLCBzdHJ1Y3QgeGZzX2lub2RlICosIHVpbnQpOwotdm9pZAkJeGZzX3RyYW5zX2lob2xkKHhmc190cmFuc190ICosIHN0cnVjdCB4ZnNfaW5vZGUgKik7Cit2b2lkCQl4ZnNfdHJhbnNfaWpvaW5fcmVmKHN0cnVjdCB4ZnNfdHJhbnMgKiwgc3RydWN0IHhmc19pbm9kZSAqLCB1aW50KTsKK3ZvaWQJCXhmc190cmFuc19pam9pbihzdHJ1Y3QgeGZzX3RyYW5zICosIHN0cnVjdCB4ZnNfaW5vZGUgKik7CiB2b2lkCQl4ZnNfdHJhbnNfbG9nX2J1Zih4ZnNfdHJhbnNfdCAqLCBzdHJ1Y3QgeGZzX2J1ZiAqLCB1aW50LCB1aW50KTsKIHZvaWQJCXhmc190cmFuc19sb2dfaW5vZGUoeGZzX3RyYW5zX3QgKiwgc3RydWN0IHhmc19pbm9kZSAqLCB1aW50KTsKIHN0cnVjdCB4ZnNfZWZpX2xvZ19pdGVtCSp4ZnNfdHJhbnNfZ2V0X2VmaSh4ZnNfdHJhbnNfdCAqLCB1aW50KTsKQEAgLTU5NSw2ICs0OTksNyBAQAogdm9pZAkJeGZzX3RyYW5zX2FpbF9kZXN0cm95KHN0cnVjdCB4ZnNfbW91bnQgKik7CiAKIGV4dGVybiBrbWVtX3pvbmVfdAkqeGZzX3RyYW5zX3pvbmU7CitleHRlcm4ga21lbV96b25lX3QJKnhmc19sb2dfaXRlbV9kZXNjX3pvbmU7CiAKICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMgYi9mcy94ZnMveGZzX3RyYW5zX2FpbC5jCmluZGV4IGU3OTk4MjQuLmRjOTA2OTUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMKKysrIGIvZnMveGZzL3hmc190cmFuc19haWwuYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgInhmc190cmFucy5oIgogI2luY2x1ZGUgInhmc19zYi5oIgogI2luY2x1ZGUgInhmc19hZy5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc190cmFuc19wcml2LmgiCiAjaW5jbHVkZSAieGZzX2Vycm9yLmgiCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zX2J1Zi5jIGIvZnMveGZzL3hmc190cmFuc19idWYuYwppbmRleCA2M2Q4MWEyLi45MGFmMDI1IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zX2J1Zi5jCisrKyBiL2ZzL3hmcy94ZnNfdHJhbnNfYnVmLmMKQEAgLTI0LDE0ICsyNCwxMCBAQAogI2luY2x1ZGUgInhmc190cmFucy5oIgogI2luY2x1ZGUgInhmc19zYi5oIgogI2luY2x1ZGUgInhmc19hZy5oIgotI2luY2x1ZGUgInhmc19kaXIyLmgiCi0jaW5jbHVkZSAieGZzX2RtYXBpLmgiCiAjaW5jbHVkZSAieGZzX21vdW50LmgiCiAjaW5jbHVkZSAieGZzX2JtYXBfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfYWxsb2NfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfaWFsbG9jX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2RpcjJfc2YuaCIKLSNpbmNsdWRlICJ4ZnNfYXR0cl9zZi5oIgogI2luY2x1ZGUgInhmc19kaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfYnVmX2l0ZW0uaCIKQEAgLTUxLDM2ICs0NywxNyBAQAogCXhmc19kYWRkcl90CQlibGtubywKIAlpbnQJCQlsZW4pCiB7Ci0JeGZzX2xvZ19pdGVtX2NodW5rX3QJKmxpY3A7Ci0JeGZzX2xvZ19pdGVtX2Rlc2NfdAkqbGlkcDsKLQl4ZnNfYnVmX2xvZ19pdGVtX3QJKmJsaXA7Ci0JaW50CQkJaTsKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtX2Rlc2MgKmxpZHA7CisJc3RydWN0IHhmc19idWZfbG9nX2l0ZW0JKmJsaXA7CiAKIAlsZW4gPSBCQlRPQihsZW4pOwotCWZvciAobGljcCA9ICZ0cC0+dF9pdGVtczsgbGljcCAhPSBOVUxMOyBsaWNwID0gbGljcC0+bGljX25leHQpIHsKLQkJaWYgKHhmc19saWNfYXJlX2FsbF9mcmVlKGxpY3ApKSB7Ci0JCQlBU1NFUlQobGljcCA9PSAmdHAtPnRfaXRlbXMpOwotCQkJQVNTRVJUKGxpY3AtPmxpY19uZXh0ID09IE5VTEwpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQotCQlmb3IgKGkgPSAwOyBpIDwgbGljcC0+bGljX3VudXNlZDsgaSsrKSB7Ci0JCQkvKgotCQkJICogU2tpcCB1bm9jY3VwaWVkIHNsb3RzLgotCQkJICovCi0JCQlpZiAoeGZzX2xpY19pc2ZyZWUobGljcCwgaSkpCi0JCQkJY29udGludWU7Ci0KLQkJCWxpZHAgPSB4ZnNfbGljX3Nsb3QobGljcCwgaSk7Ci0JCQlibGlwID0gKHhmc19idWZfbG9nX2l0ZW1fdCAqKWxpZHAtPmxpZF9pdGVtOwotCQkJaWYgKGJsaXAtPmJsaV9pdGVtLmxpX3R5cGUgIT0gWEZTX0xJX0JVRikKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKFhGU19CVUZfVEFSR0VUKGJsaXAtPmJsaV9idWYpID09IHRhcmdldCAmJgotCQkJICAgIFhGU19CVUZfQUREUihibGlwLT5ibGlfYnVmKSA9PSBibGtubyAmJgotCQkJICAgIFhGU19CVUZfQ09VTlQoYmxpcC0+YmxpX2J1ZikgPT0gbGVuKQotCQkJCXJldHVybiBibGlwLT5ibGlfYnVmOwotCQl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeShsaWRwLCAmdHAtPnRfaXRlbXMsIGxpZF90cmFucykgeworCQlibGlwID0gKHN0cnVjdCB4ZnNfYnVmX2xvZ19pdGVtICopbGlkcC0+bGlkX2l0ZW07CisJCWlmIChibGlwLT5ibGlfaXRlbS5saV90eXBlID09IFhGU19MSV9CVUYgJiYKKwkJICAgIFhGU19CVUZfVEFSR0VUKGJsaXAtPmJsaV9idWYpID09IHRhcmdldCAmJgorCQkgICAgWEZTX0JVRl9BRERSKGJsaXAtPmJsaV9idWYpID09IGJsa25vICYmCisJCSAgICBYRlNfQlVGX0NPVU5UKGJsaXAtPmJsaV9idWYpID09IGxlbikKKwkJCXJldHVybiBibGlwLT5ibGlfYnVmOwogCX0KIAogCXJldHVybiBOVUxMOwpAQCAtMTI3LDcgKzEwNCw3IEBACiAJLyoKIAkgKiBHZXQgYSBsb2dfaXRlbV9kZXNjIHRvIHBvaW50IGF0IHRoZSBuZXcgaXRlbS4KIAkgKi8KLQkodm9pZCkgeGZzX3RyYW5zX2FkZF9pdGVtKHRwLCAoeGZzX2xvZ19pdGVtX3QgKiliaXApOworCXhmc190cmFuc19hZGRfaXRlbSh0cCwgJmJpcC0+YmxpX2l0ZW0pOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIGJfZnNwcml2YXRlMiBzbyB3ZSBjYW4gZmluZCBpdCB3aXRoIGluY29yZV9tYXRjaCgpCkBAIC00ODMsNyArNDYwLDYgQEAKIHsKIAl4ZnNfYnVmX2xvZ19pdGVtX3QJKmJpcDsKIAl4ZnNfbG9nX2l0ZW1fdAkJKmxpcDsKLQl4ZnNfbG9nX2l0ZW1fZGVzY190CSpsaWRwOwogCiAJLyoKIAkgKiBEZWZhdWx0IHRvIGEgbm9ybWFsIGJyZWxzZSgpIGNhbGwgaWYgdGhlIHRwIGlzIE5VTEwuCkBAIC01MTQsMTMgKzQ5MCw2IEBACiAJQVNTRVJUKCEoYmlwLT5ibGlfZm9ybWF0LmJsZl9mbGFncyAmIFhGU19CTEZfQ0FOQ0VMKSk7CiAJQVNTRVJUKGF0b21pY19yZWFkKCZiaXAtPmJsaV9yZWZjb3VudCkgPiAwKTsKIAotCS8qCi0JICogRmluZCB0aGUgaXRlbSBkZXNjcmlwdG9yIHBvaW50aW5nIHRvIHRoaXMgYnVmZmVyJ3MKLQkgKiBsb2cgaXRlbS4gIEl0IG11c3QgYmUgdGhlcmUuCi0JICovCi0JbGlkcCA9IHhmc190cmFuc19maW5kX2l0ZW0odHAsICh4ZnNfbG9nX2l0ZW1fdCopYmlwKTsKLQlBU1NFUlQobGlkcCAhPSBOVUxMKTsKLQogCXRyYWNlX3hmc190cmFuc19icmVsc2UoYmlwKTsKIAogCS8qCkBAIC01MzYsNyArNTA1LDcgQEAKIAkgKiBJZiB0aGUgYnVmZmVyIGlzIGRpcnR5IHdpdGhpbiB0aGlzIHRyYW5zYWN0aW9uLCB3ZSBjYW4ndAogCSAqIHJlbGVhc2UgaXQgdW50aWwgd2UgY29tbWl0LgogCSAqLwotCWlmIChsaWRwLT5saWRfZmxhZ3MgJiBYRlNfTElEX0RJUlRZKQorCWlmIChiaXAtPmJsaV9pdGVtLmxpX2Rlc2MtPmxpZF9mbGFncyAmIFhGU19MSURfRElSVFkpCiAJCXJldHVybjsKIAogCS8qCkBAIC01NTMsNyArNTIyLDcgQEAKIAkvKgogCSAqIEZyZWUgdXAgdGhlIGxvZyBpdGVtIGRlc2NyaXB0b3IgdHJhY2tpbmcgdGhlIHJlbGVhc2VkIGl0ZW0uCiAJICovCi0JeGZzX3RyYW5zX2ZyZWVfaXRlbSh0cCwgbGlkcCk7CisJeGZzX3RyYW5zX2RlbF9pdGVtKCZiaXAtPmJsaV9pdGVtKTsKIAogCS8qCiAJICogQ2xlYXIgdGhlIGhvbGQgZmxhZyBpbiB0aGUgYnVmIGxvZyBpdGVtIGlmIGl0IGlzIHNldC4KQEAgLTY2NSw3ICs2MzQsNiBAQAogCQkgIHVpbnQJCWxhc3QpCiB7CiAJeGZzX2J1Zl9sb2dfaXRlbV90CSpiaXA7Ci0JeGZzX2xvZ19pdGVtX2Rlc2NfdAkqbGlkcDsKIAogCUFTU0VSVChYRlNfQlVGX0lTQlVTWShicCkpOwogCUFTU0VSVChYRlNfQlVGX0ZTUFJJVkFURTIoYnAsIHhmc190cmFuc190ICopID09IHRwKTsKQEAgLTY5MCw3ICs2NTgsNyBAQAogCWJpcCA9IFhGU19CVUZfRlNQUklWQVRFKGJwLCB4ZnNfYnVmX2xvZ19pdGVtX3QgKik7CiAJQVNTRVJUKGF0b21pY19yZWFkKCZiaXAtPmJsaV9yZWZjb3VudCkgPiAwKTsKIAlYRlNfQlVGX1NFVF9JT0RPTkVfRlVOQyhicCwgeGZzX2J1Zl9pb2RvbmVfY2FsbGJhY2tzKTsKLQliaXAtPmJsaV9pdGVtLmxpX2NiID0gKHZvaWQoKikoeGZzX2J1Zl90Kix4ZnNfbG9nX2l0ZW1fdCopKXhmc19idWZfaW9kb25lOworCWJpcC0+YmxpX2l0ZW0ubGlfY2IgPSB4ZnNfYnVmX2lvZG9uZTsKIAogCXRyYWNlX3hmc190cmFuc19sb2dfYnVmKGJpcCk7CiAKQEAgLTcwNywxMSArNjc1LDggQEAKIAkJYmlwLT5ibGlfZm9ybWF0LmJsZl9mbGFncyAmPSB+WEZTX0JMRl9DQU5DRUw7CiAJfQogCi0JbGlkcCA9IHhmc190cmFuc19maW5kX2l0ZW0odHAsICh4ZnNfbG9nX2l0ZW1fdCopYmlwKTsKLQlBU1NFUlQobGlkcCAhPSBOVUxMKTsKLQogCXRwLT50X2ZsYWdzIHw9IFhGU19UUkFOU19ESVJUWTsKLQlsaWRwLT5saWRfZmxhZ3MgfD0gWEZTX0xJRF9ESVJUWTsKKwliaXAtPmJsaV9pdGVtLmxpX2Rlc2MtPmxpZF9mbGFncyB8PSBYRlNfTElEX0RJUlRZOwogCWJpcC0+YmxpX2ZsYWdzIHw9IFhGU19CTElfTE9HR0VEOwogCXhmc19idWZfaXRlbV9sb2coYmlwLCBmaXJzdCwgbGFzdCk7CiB9CkBAIC03NDAsNyArNzA1LDYgQEAKIAl4ZnNfdHJhbnNfdAkqdHAsCiAJeGZzX2J1Zl90CSpicCkKIHsKLQl4ZnNfbG9nX2l0ZW1fZGVzY190CSpsaWRwOwogCXhmc19idWZfbG9nX2l0ZW1fdAkqYmlwOwogCiAJQVNTRVJUKFhGU19CVUZfSVNCVVNZKGJwKSk7CkBAIC03NDgsOCArNzEyLDYgQEAKIAlBU1NFUlQoWEZTX0JVRl9GU1BSSVZBVEUoYnAsIHZvaWQgKikgIT0gTlVMTCk7CiAKIAliaXAgPSBYRlNfQlVGX0ZTUFJJVkFURShicCwgeGZzX2J1Zl9sb2dfaXRlbV90ICopOwotCWxpZHAgPSB4ZnNfdHJhbnNfZmluZF9pdGVtKHRwLCAoeGZzX2xvZ19pdGVtX3QqKWJpcCk7Ci0JQVNTRVJUKGxpZHAgIT0gTlVMTCk7CiAJQVNTRVJUKGF0b21pY19yZWFkKCZiaXAtPmJsaV9yZWZjb3VudCkgPiAwKTsKIAogCXRyYWNlX3hmc190cmFuc19iaW52YWwoYmlwKTsKQEAgLTc2NCw3ICs3MjYsNyBAQAogCQlBU1NFUlQoIShiaXAtPmJsaV9mbGFncyAmIChYRlNfQkxJX0xPR0dFRCB8IFhGU19CTElfRElSVFkpKSk7CiAJCUFTU0VSVCghKGJpcC0+YmxpX2Zvcm1hdC5ibGZfZmxhZ3MgJiBYRlNfQkxGX0lOT0RFX0JVRikpOwogCQlBU1NFUlQoYmlwLT5ibGlfZm9ybWF0LmJsZl9mbGFncyAmIFhGU19CTEZfQ0FOQ0VMKTsKLQkJQVNTRVJUKGxpZHAtPmxpZF9mbGFncyAmIFhGU19MSURfRElSVFkpOworCQlBU1NFUlQoYmlwLT5ibGlfaXRlbS5saV9kZXNjLT5saWRfZmxhZ3MgJiBYRlNfTElEX0RJUlRZKTsKIAkJQVNTRVJUKHRwLT50X2ZsYWdzICYgWEZTX1RSQU5TX0RJUlRZKTsKIAkJcmV0dXJuOwogCX0KQEAgLTc5Nyw3ICs3NTksNyBAQAogCWJpcC0+YmxpX2Zvcm1hdC5ibGZfZmxhZ3MgfD0gWEZTX0JMRl9DQU5DRUw7CiAJbWVtc2V0KChjaGFyICopKGJpcC0+YmxpX2Zvcm1hdC5ibGZfZGF0YV9tYXApLCAwLAogCSAgICAgIChiaXAtPmJsaV9mb3JtYXQuYmxmX21hcF9zaXplICogc2l6ZW9mKHVpbnQpKSk7Ci0JbGlkcC0+bGlkX2ZsYWdzIHw9IFhGU19MSURfRElSVFk7CisJYmlwLT5ibGlfaXRlbS5saV9kZXNjLT5saWRfZmxhZ3MgfD0gWEZTX0xJRF9ESVJUWTsKIAl0cC0+dF9mbGFncyB8PSBYRlNfVFJBTlNfRElSVFk7CiB9CiAKQEAgLTg1MywxMiArODE1LDkgQEAKIAlBU1NFUlQoYXRvbWljX3JlYWQoJmJpcC0+YmxpX3JlZmNvdW50KSA+IDApOwogCiAJYmlwLT5ibGlfZmxhZ3MgfD0gWEZTX0JMSV9TVEFMRV9JTk9ERTsKLQliaXAtPmJsaV9pdGVtLmxpX2NiID0gKHZvaWQoKikoeGZzX2J1Zl90Kix4ZnNfbG9nX2l0ZW1fdCopKQotCQl4ZnNfYnVmX2lvZG9uZTsKKwliaXAtPmJsaV9pdGVtLmxpX2NiID0geGZzX2J1Zl9pb2RvbmU7CiB9CiAKLQotCiAvKgogICogTWFyayB0aGUgYnVmZmVyIGFzIGJlaW5nIG9uZSB3aGljaCBjb250YWlucyBuZXdseSBhbGxvY2F0ZWQKICAqIGlub2Rlcy4gIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZXZlbiBpZiB0aGlzIGJ1ZmZlciBpcwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFuc19leHRmcmVlLmMgYi9mcy94ZnMveGZzX3RyYW5zX2V4dGZyZWUuYwppbmRleCAyN2NjZTJhLi5mNzgzZDVlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zX2V4dGZyZWUuYworKysgYi9mcy94ZnMveGZzX3RyYW5zX2V4dGZyZWUuYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgInhmc190cmFucy5oIgogI2luY2x1ZGUgInhmc19zYi5oIgogI2luY2x1ZGUgInhmc19hZy5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc190cmFuc19wcml2LmgiCiAjaW5jbHVkZSAieGZzX2V4dGZyZWVfaXRlbS5oIgpAQCAtNDksOSArNDgsOCBAQAogCS8qCiAJICogR2V0IGEgbG9nX2l0ZW1fZGVzYyB0byBwb2ludCBhdCB0aGUgbmV3IGl0ZW0uCiAJICovCi0JKHZvaWQpIHhmc190cmFuc19hZGRfaXRlbSh0cCwgKHhmc19sb2dfaXRlbV90KillZmlwKTsKLQotCXJldHVybiAoZWZpcCk7CisJeGZzX3RyYW5zX2FkZF9pdGVtKHRwLCAmZWZpcC0+ZWZpX2l0ZW0pOworCXJldHVybiBlZmlwOwogfQogCiAvKgpAQCAtNjUsMTUgKzYzLDExIEBACiAJCQkgeGZzX2ZzYmxvY2tfdAkJc3RhcnRfYmxvY2ssCiAJCQkgeGZzX2V4dGxlbl90CQlleHRfbGVuKQogewotCXhmc19sb2dfaXRlbV9kZXNjX3QJKmxpZHA7CiAJdWludAkJCW5leHRfZXh0ZW50OwogCXhmc19leHRlbnRfdAkJKmV4dHA7CiAKLQlsaWRwID0geGZzX3RyYW5zX2ZpbmRfaXRlbSh0cCwgKHhmc19sb2dfaXRlbV90KillZmlwKTsKLQlBU1NFUlQobGlkcCAhPSBOVUxMKTsKLQogCXRwLT50X2ZsYWdzIHw9IFhGU19UUkFOU19ESVJUWTsKLQlsaWRwLT5saWRfZmxhZ3MgfD0gWEZTX0xJRF9ESVJUWTsKKwllZmlwLT5lZmlfaXRlbS5saV9kZXNjLT5saWRfZmxhZ3MgfD0gWEZTX0xJRF9ESVJUWTsKIAogCW5leHRfZXh0ZW50ID0gZWZpcC0+ZWZpX25leHRfZXh0ZW50OwogCUFTU0VSVChuZXh0X2V4dGVudCA8IGVmaXAtPmVmaV9mb3JtYXQuZWZpX25leHRlbnRzKTsKQEAgLTEwNiw5ICsxMDAsOCBAQAogCS8qCiAJICogR2V0IGEgbG9nX2l0ZW1fZGVzYyB0byBwb2ludCBhdCB0aGUgbmV3IGl0ZW0uCiAJICovCi0JKHZvaWQpIHhmc190cmFuc19hZGRfaXRlbSh0cCwgKHhmc19sb2dfaXRlbV90KillZmRwKTsKLQotCXJldHVybiAoZWZkcCk7CisJeGZzX3RyYW5zX2FkZF9pdGVtKHRwLCAmZWZkcC0+ZWZkX2l0ZW0pOworCXJldHVybiBlZmRwOwogfQogCiAvKgpAQCAtMTIyLDE1ICsxMTUsMTEgQEAKIAkJCSB4ZnNfZnNibG9ja190CQlzdGFydF9ibG9jaywKIAkJCSB4ZnNfZXh0bGVuX3QJCWV4dF9sZW4pCiB7Ci0JeGZzX2xvZ19pdGVtX2Rlc2NfdAkqbGlkcDsKIAl1aW50CQkJbmV4dF9leHRlbnQ7CiAJeGZzX2V4dGVudF90CQkqZXh0cDsKIAotCWxpZHAgPSB4ZnNfdHJhbnNfZmluZF9pdGVtKHRwLCAoeGZzX2xvZ19pdGVtX3QqKWVmZHApOwotCUFTU0VSVChsaWRwICE9IE5VTEwpOwotCiAJdHAtPnRfZmxhZ3MgfD0gWEZTX1RSQU5TX0RJUlRZOwotCWxpZHAtPmxpZF9mbGFncyB8PSBYRlNfTElEX0RJUlRZOworCWVmZHAtPmVmZF9pdGVtLmxpX2Rlc2MtPmxpZF9mbGFncyB8PSBYRlNfTElEX0RJUlRZOwogCiAJbmV4dF9leHRlbnQgPSBlZmRwLT5lZmRfbmV4dF9leHRlbnQ7CiAJQVNTRVJUKG5leHRfZXh0ZW50IDwgZWZkcC0+ZWZkX2Zvcm1hdC5lZmRfbmV4dGVudHMpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFuc19pbm9kZS5jIGIvZnMveGZzL3hmc190cmFuc19pbm9kZS5jCmluZGV4IDI1NTlkZmUuLmNkYzUzYTEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnNfaW5vZGUuYworKysgYi9mcy94ZnMveGZzX3RyYW5zX2lub2RlLmMKQEAgLTI0LDIwICsyNCwxNiBAQAogI2luY2x1ZGUgInhmc190cmFucy5oIgogI2luY2x1ZGUgInhmc19zYi5oIgogI2luY2x1ZGUgInhmc19hZy5oIgotI2luY2x1ZGUgInhmc19kaXIyLmgiCi0jaW5jbHVkZSAieGZzX2RtYXBpLmgiCiAjaW5jbHVkZSAieGZzX21vdW50LmgiCiAjaW5jbHVkZSAieGZzX2JtYXBfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfYWxsb2NfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfaWFsbG9jX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2RpcjJfc2YuaCIKLSNpbmNsdWRlICJ4ZnNfYXR0cl9zZi5oIgogI2luY2x1ZGUgInhmc19kaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfYnRyZWUuaCIKLSNpbmNsdWRlICJ4ZnNfaWFsbG9jLmgiCiAjaW5jbHVkZSAieGZzX3RyYW5zX3ByaXYuaCIKICNpbmNsdWRlICJ4ZnNfaW5vZGVfaXRlbS5oIgorI2luY2x1ZGUgInhmc190cmFjZS5oIgogCiAjaWZkZWYgWEZTX1RSQU5TX0RFQlVHCiBTVEFUSUMgdm9pZApAQCAtNDcsNyArNDMsNiBAQAogI2RlZmluZQl4ZnNfdHJhbnNfaW5vZGVfYnJvb3RfZGVidWcoaXApCiAjZW5kaWYKIAotCiAvKgogICogR2V0IGFuIGlub2RlIGFuZCBqb2luIGl0IHRvIHRoZSB0cmFuc2FjdGlvbi4KICAqLwpAQCAtNjMsNzcgKzU4LDY1IEBACiAJaW50CQkJZXJyb3I7CiAKIAllcnJvciA9IHhmc19pZ2V0KG1wLCB0cCwgaW5vLCBmbGFncywgbG9ja19mbGFncywgaXBwKTsKLQlpZiAoIWVycm9yICYmIHRwKQotCQl4ZnNfdHJhbnNfaWpvaW4odHAsICppcHAsIGxvY2tfZmxhZ3MpOworCWlmICghZXJyb3IgJiYgdHApIHsKKwkJeGZzX3RyYW5zX2lqb2luKHRwLCAqaXBwKTsKKwkJKCppcHApLT5pX2l0ZW1wLT5pbGlfbG9ja19mbGFncyA9IGxvY2tfZmxhZ3M7CisJfQogCXJldHVybiBlcnJvcjsKIH0KIAogLyoKLSAqIEFkZCB0aGUgbG9ja2VkIGlub2RlIHRvIHRoZSB0cmFuc2FjdGlvbi4KLSAqIFRoZSBpbm9kZSBtdXN0IGJlIGxvY2tlZCwgYW5kIGl0IGNhbm5vdCBiZSBhc3NvY2lhdGVkIHdpdGggYW55Ci0gKiB0cmFuc2FjdGlvbi4gIFRoZSBjYWxsZXIgbXVzdCBzcGVjaWZ5IHRoZSBsb2NrcyBhbHJlYWR5IGhlbGQKLSAqIG9uIHRoZSBpbm9kZS4KKyAqIEFkZCBhIGxvY2tlZCBpbm9kZSB0byB0aGUgdHJhbnNhY3Rpb24uCisgKgorICogVGhlIGlub2RlIG11c3QgYmUgbG9ja2VkLCBhbmQgaXQgY2Fubm90IGJlIGFzc29jaWF0ZWQgd2l0aCBhbnkgdHJhbnNhY3Rpb24uCiAgKi8KIHZvaWQKIHhmc190cmFuc19pam9pbigKLQl4ZnNfdHJhbnNfdAkqdHAsCi0JeGZzX2lub2RlX3QJKmlwLAotCXVpbnQJCWxvY2tfZmxhZ3MpCisJc3RydWN0IHhmc190cmFucwkqdHAsCisJc3RydWN0IHhmc19pbm9kZQkqaXApCiB7CiAJeGZzX2lub2RlX2xvZ19pdGVtX3QJKmlpcDsKIAogCUFTU0VSVChpcC0+aV90cmFuc3AgPT0gTlVMTCk7CiAJQVNTRVJUKHhmc19pc2lsb2NrZWQoaXAsIFhGU19JTE9DS19FWENMKSk7Ci0JQVNTRVJUKGxvY2tfZmxhZ3MgJiBYRlNfSUxPQ0tfRVhDTCk7CiAJaWYgKGlwLT5pX2l0ZW1wID09IE5VTEwpCiAJCXhmc19pbm9kZV9pdGVtX2luaXQoaXAsIGlwLT5pX21vdW50KTsKIAlpaXAgPSBpcC0+aV9pdGVtcDsKLQlBU1NFUlQoaWlwLT5pbGlfZmxhZ3MgPT0gMCk7CisJQVNTRVJUKGlpcC0+aWxpX2xvY2tfZmxhZ3MgPT0gMCk7CiAKIAkvKgogCSAqIEdldCBhIGxvZ19pdGVtX2Rlc2MgdG8gcG9pbnQgYXQgdGhlIG5ldyBpdGVtLgogCSAqLwotCSh2b2lkKSB4ZnNfdHJhbnNfYWRkX2l0ZW0odHAsICh4ZnNfbG9nX2l0ZW1fdCopKGlpcCkpOworCXhmc190cmFuc19hZGRfaXRlbSh0cCwgJmlpcC0+aWxpX2l0ZW0pOwogCiAJeGZzX3RyYW5zX2lub2RlX2Jyb290X2RlYnVnKGlwKTsKIAogCS8qCi0JICogSWYgdGhlIElPIGxvY2sgaXMgYWxyZWFkeSBoZWxkLCBtYXJrIHRoYXQgaW4gdGhlIGlub2RlIGxvZyBpdGVtLgotCSAqLwotCWlmIChsb2NrX2ZsYWdzICYgWEZTX0lPTE9DS19FWENMKSB7Ci0JCWlpcC0+aWxpX2ZsYWdzIHw9IFhGU19JTElfSU9MT0NLRURfRVhDTDsKLQl9IGVsc2UgaWYgKGxvY2tfZmxhZ3MgJiBYRlNfSU9MT0NLX1NIQVJFRCkgewotCQlpaXAtPmlsaV9mbGFncyB8PSBYRlNfSUxJX0lPTE9DS0VEX1NIQVJFRDsKLQl9Ci0KLQkvKgogCSAqIEluaXRpYWxpemUgaV90cmFuc3Agc28gd2UgY2FuIGZpbmQgaXQgd2l0aCB4ZnNfaW5vZGVfaW5jb3JlKCkKIAkgKiBpbiB4ZnNfdHJhbnNfaWdldCgpIGFib3ZlLgogCSAqLwogCWlwLT5pX3RyYW5zcCA9IHRwOwogfQogCi0KLQogLyoKLSAqIE1hcmsgdGhlIGlub2RlIGFzIG5vdCBuZWVkaW5nIHRvIGJlIHVubG9ja2VkIHdoZW4gdGhlIGlub2RlIGl0ZW0ncwotICogSU9QX1VOTE9DSygpIHJvdXRpbmUgaXMgY2FsbGVkLiAgVGhlIGlub2RlIG11c3QgYWxyZWFkeSBiZSBsb2NrZWQKLSAqIGFuZCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHRyYW5zYWN0aW9uLgorICogQWRkIGEgbG9ja2VkIGlub2RlIHRvIHRoZSB0cmFuc2FjdGlvbi4KKyAqCisgKgorICogR3JhYnMgYSByZWZlcmVuY2UgdG8gdGhlIGlub2RlIHdoaWNoIHdpbGwgYmUgZHJvcHBlZCB3aGVuIHRoZSB0cmFuc2FjdGlvbgorICogaXMgY29tbWl0ZWQuICBUaGUgaW5vZGUgd2lsbCBhbHNvIGJlIHVubG9ja2VkIGF0IHRoYXQgcG9pbnQuICBUaGUgaW5vZGUKKyAqIG11c3QgYmUgbG9ja2VkLCBhbmQgaXQgY2Fubm90IGJlIGFzc29jaWF0ZWQgd2l0aCBhbnkgdHJhbnNhY3Rpb24uCiAgKi8KLS8qQVJHU1VTRUQqLwogdm9pZAoteGZzX3RyYW5zX2lob2xkKAotCXhmc190cmFuc190CSp0cCwKLQl4ZnNfaW5vZGVfdAkqaXApCit4ZnNfdHJhbnNfaWpvaW5fcmVmKAorCXN0cnVjdCB4ZnNfdHJhbnMJKnRwLAorCXN0cnVjdCB4ZnNfaW5vZGUJKmlwLAorCXVpbnQJCQlsb2NrX2ZsYWdzKQogewotCUFTU0VSVChpcC0+aV90cmFuc3AgPT0gdHApOwotCUFTU0VSVChpcC0+aV9pdGVtcCAhPSBOVUxMKTsKLQlBU1NFUlQoeGZzX2lzaWxvY2tlZChpcCwgWEZTX0lMT0NLX0VYQ0wpKTsKLQotCWlwLT5pX2l0ZW1wLT5pbGlfZmxhZ3MgfD0gWEZTX0lMSV9IT0xEOworCXhmc190cmFuc19pam9pbih0cCwgaXApOworCUlIT0xEKGlwKTsKKwlpcC0+aV9pdGVtcC0+aWxpX2xvY2tfZmxhZ3MgPSBsb2NrX2ZsYWdzOwogfQogCi0KIC8qCiAgKiBUaGlzIGlzIGNhbGxlZCB0byBtYXJrIHRoZSBmaWVsZHMgaW5kaWNhdGVkIGluIGZpZWxkbWFzayBhcyBuZWVkaW5nCiAgKiB0byBiZSBsb2dnZWQgd2hlbiB0aGUgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkLiAgVGhlIGlub2RlIG11c3QKQEAgLTE0OSwxNyArMTMyLDEyIEBACiAJeGZzX2lub2RlX3QJKmlwLAogCXVpbnQJCWZsYWdzKQogewotCXhmc19sb2dfaXRlbV9kZXNjX3QJKmxpZHA7Ci0KIAlBU1NFUlQoaXAtPmlfdHJhbnNwID09IHRwKTsKIAlBU1NFUlQoaXAtPmlfaXRlbXAgIT0gTlVMTCk7CiAJQVNTRVJUKHhmc19pc2lsb2NrZWQoaXAsIFhGU19JTE9DS19FWENMKSk7CiAKLQlsaWRwID0geGZzX3RyYW5zX2ZpbmRfaXRlbSh0cCwgKHhmc19sb2dfaXRlbV90KikoaXAtPmlfaXRlbXApKTsKLQlBU1NFUlQobGlkcCAhPSBOVUxMKTsKLQogCXRwLT50X2ZsYWdzIHw9IFhGU19UUkFOU19ESVJUWTsKLQlsaWRwLT5saWRfZmxhZ3MgfD0gWEZTX0xJRF9ESVJUWTsKKwlpcC0+aV9pdGVtcC0+aWxpX2l0ZW0ubGlfZGVzYy0+bGlkX2ZsYWdzIHw9IFhGU19MSURfRElSVFk7CiAKIAkvKgogCSAqIEFsd2F5cyBPUiBpbiB0aGUgYml0cyBmcm9tIHRoZSBpbGlfbGFzdF9maWVsZHMgZmllbGQuCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zX2l0ZW0uYyBiL2ZzL3hmcy94ZnNfdHJhbnNfaXRlbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTFkMzdkLi4wMDAwMDAwCi0tLSBhL2ZzL3hmcy94ZnNfdHJhbnNfaXRlbS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiwyMDA1IFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdvdWxkIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogSW5jLiwgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLSNpbmNsdWRlICJ4ZnMuaCIKLSNpbmNsdWRlICJ4ZnNfZnMuaCIKLSNpbmNsdWRlICJ4ZnNfdHlwZXMuaCIKLSNpbmNsdWRlICJ4ZnNfbG9nLmgiCi0jaW5jbHVkZSAieGZzX2ludW0uaCIKLSNpbmNsdWRlICJ4ZnNfdHJhbnMuaCIKLSNpbmNsdWRlICJ4ZnNfdHJhbnNfcHJpdi5oIgotLyogWFhYOiBmcm9tIGhlcmUgZG93biBuZWVkZWQgdW50aWwgc3RydWN0IHhmc190cmFucyBoYXMgaXRzIG93biBhaWxwICovCi0jaW5jbHVkZSAieGZzX2JpdC5oIgotI2luY2x1ZGUgInhmc19idWZfaXRlbS5oIgotI2luY2x1ZGUgInhmc19zYi5oIgotI2luY2x1ZGUgInhmc19hZy5oIgotI2luY2x1ZGUgInhmc19kaXIyLmgiCi0jaW5jbHVkZSAieGZzX2RtYXBpLmgiCi0jaW5jbHVkZSAieGZzX21vdW50LmgiCi0KLVNUQVRJQyBpbnQJeGZzX3RyYW5zX3VubG9ja19jaHVuayh4ZnNfbG9nX2l0ZW1fY2h1bmtfdCAqLAotCQkJCQlpbnQsIGludCwgeGZzX2xzbl90KTsKLQotLyoKLSAqIFRoaXMgaXMgY2FsbGVkIHRvIGFkZCB0aGUgZ2l2ZW4gbG9nIGl0ZW0gdG8gdGhlIHRyYW5zYWN0aW9uJ3MKLSAqIGxpc3Qgb2YgbG9nIGl0ZW1zLiAgSXQgbXVzdCBmaW5kIGEgZnJlZSBsb2cgaXRlbSBkZXNjcmlwdG9yCi0gKiBvciBhbGxvY2F0ZSBhIG5ldyBvbmUgYW5kIGFkZCB0aGUgaXRlbSB0byB0aGF0IGRlc2NyaXB0b3IuCi0gKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gaXRlbSBkZXNjcmlwdG9yIHVzZWQgdG8gcG9pbnQKLSAqIHRvIHRoZSBuZXcgaXRlbS4gIFRoZSBsb2cgaXRlbSB3aWxsIG5vdyBwb2ludCB0byBpdHMgbmV3IGRlc2NyaXB0b3IKLSAqIHdpdGggaXRzIGxpX2Rlc2MgZmllbGQuCi0gKi8KLXhmc19sb2dfaXRlbV9kZXNjX3QgKgoteGZzX3RyYW5zX2FkZF9pdGVtKHhmc190cmFuc190ICp0cCwgeGZzX2xvZ19pdGVtX3QgKmxpcCkKLXsKLQl4ZnNfbG9nX2l0ZW1fZGVzY190CSpsaWRwOwotCXhmc19sb2dfaXRlbV9jaHVua190CSpsaWNwOwotCWludAkJCWk9MDsKLQotCS8qCi0JICogSWYgdGhlcmUgYXJlIG5vIGZyZWUgZGVzY3JpcHRvcnMsIGFsbG9jYXRlIGEgbmV3IGNodW5rCi0JICogb2YgdGhlbSBhbmQgcHV0IGl0IGF0IHRoZSBmcm9udCBvZiB0aGUgY2h1bmsgbGlzdC4KLQkgKi8KLQlpZiAodHAtPnRfaXRlbXNfZnJlZSA9PSAwKSB7Ci0JCWxpY3AgPSAoeGZzX2xvZ19pdGVtX2NodW5rX3QqKQotCQkgICAgICAga21lbV9hbGxvYyhzaXplb2YoeGZzX2xvZ19pdGVtX2NodW5rX3QpLCBLTV9TTEVFUCk7Ci0JCUFTU0VSVChsaWNwICE9IE5VTEwpOwotCQkvKgotCQkgKiBJbml0aWFsaXplIHRoZSBjaHVuaywgYW5kIHRoZW4KLQkJICogY2xhaW0gdGhlIGZpcnN0IHNsb3QgaW4gdGhlIG5ld2x5IGFsbG9jYXRlZCBjaHVuay4KLQkJICovCi0JCXhmc19saWNfaW5pdChsaWNwKTsKLQkJeGZzX2xpY19jbGFpbShsaWNwLCAwKTsKLQkJbGljcC0+bGljX3VudXNlZCA9IDE7Ci0JCXhmc19saWNfaW5pdF9zbG90KGxpY3AsIDApOwotCQlsaWRwID0geGZzX2xpY19zbG90KGxpY3AsIDApOwotCi0JCS8qCi0JCSAqIExpbmsgaW4gdGhlIG5ldyBjaHVuayBhbmQgdXBkYXRlIHRoZSBmcmVlIGNvdW50LgotCQkgKi8KLQkJbGljcC0+bGljX25leHQgPSB0cC0+dF9pdGVtcy5saWNfbmV4dDsKLQkJdHAtPnRfaXRlbXMubGljX25leHQgPSBsaWNwOwotCQl0cC0+dF9pdGVtc19mcmVlID0gWEZTX0xJQ19OVU1fU0xPVFMgLSAxOwotCi0JCS8qCi0JCSAqIEluaXRpYWxpemUgdGhlIGRlc2NyaXB0b3IgYW5kIHRoZSBnZW5lcmljIHBvcnRpb24KLQkJICogb2YgdGhlIGxvZyBpdGVtLgotCQkgKgotCQkgKiBQb2ludCB0aGUgbmV3IHNsb3QgYXQgdGhpcyBpdGVtIGFuZCByZXR1cm4gaXQuCi0JCSAqIEFsc28gcG9pbnQgdGhlIGxvZyBpdGVtIGF0IGl0cyBjdXJyZW50bHkgYWN0aXZlCi0JCSAqIGRlc2NyaXB0b3IgYW5kIHNldCB0aGUgaXRlbSdzIG1vdW50IHBvaW50ZXIuCi0JCSAqLwotCQlsaWRwLT5saWRfaXRlbSA9IGxpcDsKLQkJbGlkcC0+bGlkX2ZsYWdzID0gMDsKLQkJbGlkcC0+bGlkX3NpemUgPSAwOwotCQlsaXAtPmxpX2Rlc2MgPSBsaWRwOwotCQlsaXAtPmxpX21vdW50cCA9IHRwLT50X21vdW50cDsKLQkJbGlwLT5saV9haWxwID0gdHAtPnRfbW91bnRwLT5tX2FpbDsKLQkJcmV0dXJuIGxpZHA7Ci0JfQotCi0JLyoKLQkgKiBGaW5kIHRoZSBmcmVlIGRlc2NyaXB0b3IuIEl0IGlzIHNvbWV3aGVyZSBpbiB0aGUgY2h1bmtsaXN0Ci0JICogb2YgZGVzY3JpcHRvcnMuCi0JICovCi0JbGljcCA9ICZ0cC0+dF9pdGVtczsKLQl3aGlsZSAobGljcCAhPSBOVUxMKSB7Ci0JCWlmICh4ZnNfbGljX3ZhY2FuY3kobGljcCkpIHsKLQkJCWlmIChsaWNwLT5saWNfdW51c2VkIDw9IFhGU19MSUNfTUFYX1NMT1QpIHsKLQkJCQlpID0gbGljcC0+bGljX3VudXNlZDsKLQkJCQlBU1NFUlQoeGZzX2xpY19pc2ZyZWUobGljcCwgaSkpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJZm9yIChpID0gMDsgaSA8PSBYRlNfTElDX01BWF9TTE9UOyBpKyspIHsKLQkJCQlpZiAoeGZzX2xpY19pc2ZyZWUobGljcCwgaSkpCi0JCQkJCWJyZWFrOwotCQkJfQotCQkJQVNTRVJUKGkgPD0gWEZTX0xJQ19NQVhfU0xPVCk7Ci0JCQlicmVhazsKLQkJfQotCQlsaWNwID0gbGljcC0+bGljX25leHQ7Ci0JfQotCUFTU0VSVChsaWNwICE9IE5VTEwpOwotCS8qCi0JICogSWYgd2UgZmluZCBhIGZyZWUgZGVzY3JpcHRvciwgY2xhaW0gaXQsCi0JICogaW5pdGlhbGl6ZSBpdCwgYW5kIHJldHVybiBpdC4KLQkgKi8KLQl4ZnNfbGljX2NsYWltKGxpY3AsIGkpOwotCWlmIChsaWNwLT5saWNfdW51c2VkIDw9IGkpIHsKLQkJbGljcC0+bGljX3VudXNlZCA9IGkgKyAxOwotCQl4ZnNfbGljX2luaXRfc2xvdChsaWNwLCBpKTsKLQl9Ci0JbGlkcCA9IHhmc19saWNfc2xvdChsaWNwLCBpKTsKLQl0cC0+dF9pdGVtc19mcmVlLS07Ci0JbGlkcC0+bGlkX2l0ZW0gPSBsaXA7Ci0JbGlkcC0+bGlkX2ZsYWdzID0gMDsKLQlsaWRwLT5saWRfc2l6ZSA9IDA7Ci0JbGlwLT5saV9kZXNjID0gbGlkcDsKLQlsaXAtPmxpX21vdW50cCA9IHRwLT50X21vdW50cDsKLQlsaXAtPmxpX2FpbHAgPSB0cC0+dF9tb3VudHAtPm1fYWlsOwotCXJldHVybiBsaWRwOwotfQotCi0vKgotICogRnJlZSB0aGUgZ2l2ZW4gZGVzY3JpcHRvci4KLSAqCi0gKiBUaGlzIHJlcXVpcmVzIHNldHRpbmcgdGhlIGJpdCBpbiB0aGUgY2h1bmsncyBmcmVlIG1hc2sgY29ycmVzcG9uZGluZwotICogdG8gdGhlIGdpdmVuIHNsb3QuCi0gKi8KLXZvaWQKLXhmc190cmFuc19mcmVlX2l0ZW0oeGZzX3RyYW5zX3QJKnRwLCB4ZnNfbG9nX2l0ZW1fZGVzY190ICpsaWRwKQotewotCXVpbnQJCQlzbG90OwotCXhmc19sb2dfaXRlbV9jaHVua190CSpsaWNwOwotCXhmc19sb2dfaXRlbV9jaHVua190CSoqbGljcHA7Ci0KLQlzbG90ID0geGZzX2xpY19kZXNjX3RvX3Nsb3QobGlkcCk7Ci0JbGljcCA9IHhmc19saWNfZGVzY190b19jaHVuayhsaWRwKTsKLQl4ZnNfbGljX3JlbHNlKGxpY3AsIHNsb3QpOwotCWxpZHAtPmxpZF9pdGVtLT5saV9kZXNjID0gTlVMTDsKLQl0cC0+dF9pdGVtc19mcmVlKys7Ci0KLQkvKgotCSAqIElmIHRoZXJlIGFyZSBubyBtb3JlIHVzZWQgaXRlbXMgaW4gdGhlIGNodW5rIGFuZCB0aGlzIGlzIG5vdAotCSAqIHRoZSBjaHVuayBlbWJlZGRlZCBpbiB0aGUgdHJhbnNhY3Rpb24gc3RydWN0dXJlLCB0aGVuIGZyZWUKLQkgKiB0aGUgY2h1bmsuIEZpcnN0IHB1bGwgaXQgZnJvbSB0aGUgY2h1bmsgbGlzdCBhbmQgdGhlbgotCSAqIGZyZWUgaXQgYmFjayB0byB0aGUgaGVhcC4gIFdlIGRpZG4ndCBib3RoZXIgd2l0aCBhIGRvdWJseQotCSAqIGxpbmtlZCBsaXN0IGhlcmUgYmVjYXVzZSB0aGUgbGlzdHMgc2hvdWxkIGJlIHZlcnkgc2hvcnQKLQkgKiBhbmQgdGhpcyBpcyBub3QgYSBwZXJmb3JtYW5jZSBwYXRoLiAgSXQncyBiZXR0ZXIgdG8gc2F2ZQotCSAqIHRoZSBtZW1vcnkgb2YgdGhlIGV4dHJhIHBvaW50ZXIuCi0JICoKLQkgKiBBbHNvIGRlY3JlbWVudCB0aGUgdHJhbnNhY3Rpb24gc3RydWN0dXJlJ3MgY291bnQgb2YgZnJlZSBpdGVtcwotCSAqIGJ5IHRoZSBudW1iZXIgaW4gYSBjaHVuayBzaW5jZSB3ZSBhcmUgZnJlZWluZyBhbiBlbXB0eSBjaHVuay4KLQkgKi8KLQlpZiAoeGZzX2xpY19hcmVfYWxsX2ZyZWUobGljcCkgJiYgKGxpY3AgIT0gJih0cC0+dF9pdGVtcykpKSB7Ci0JCWxpY3BwID0gJih0cC0+dF9pdGVtcy5saWNfbmV4dCk7Ci0JCXdoaWxlICgqbGljcHAgIT0gbGljcCkgewotCQkJQVNTRVJUKCpsaWNwcCAhPSBOVUxMKTsKLQkJCWxpY3BwID0gJigoKmxpY3BwKS0+bGljX25leHQpOwotCQl9Ci0JCSpsaWNwcCA9IGxpY3AtPmxpY19uZXh0OwotCQlrbWVtX2ZyZWUobGljcCk7Ci0JCXRwLT50X2l0ZW1zX2ZyZWUgLT0gWEZTX0xJQ19OVU1fU0xPVFM7Ci0JfQotfQotCi0vKgotICogVGhpcyBpcyBjYWxsZWQgdG8gZmluZCB0aGUgZGVzY3JpcHRvciBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbgotICogbG9nIGl0ZW0uICBJdCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZGVzY3JpcHRvci4KLSAqIFRoZSBsb2cgaXRlbSBNVVNUIGhhdmUgYSBjb3JyZXNwb25kaW5nIGRlc2NyaXB0b3IgaW4gdGhlIGdpdmVuCi0gKiB0cmFuc2FjdGlvbi4gIFRoaXMgcm91dGluZSBkb2VzIG5vdCByZXR1cm4gTlVMTCwgaXQgcGFuaWNzLgotICoKLSAqIFRoZSBkZXNjcmlwdG9yIHBvaW50ZXIgaXMga2VwdCBpbiB0aGUgbG9nIGl0ZW0ncyBsaV9kZXNjIGZpZWxkLgotICogSnVzdCByZXR1cm4gaXQuCi0gKi8KLS8qQVJHU1VTRUQqLwoteGZzX2xvZ19pdGVtX2Rlc2NfdCAqCi14ZnNfdHJhbnNfZmluZF9pdGVtKHhmc190cmFuc190CSp0cCwgeGZzX2xvZ19pdGVtX3QgKmxpcCkKLXsKLQlBU1NFUlQobGlwLT5saV9kZXNjICE9IE5VTEwpOwotCi0JcmV0dXJuIGxpcC0+bGlfZGVzYzsKLX0KLQotCi0vKgotICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgZGVzY3JpcHRvciBpbiB0aGUgY2h1bmsgbGlzdC4KLSAqIFRoaXMgZG9lcyBub3QgcmV0dXJuIE5VTEwgaWYgdGhlcmUgYXJlIG5vbmUsIGl0IHBhbmljcy4KLSAqCi0gKiBUaGUgZmlyc3QgZGVzY3JpcHRvciBtdXN0IGJlIGluIGVpdGhlciB0aGUgZmlyc3Qgb3Igc2Vjb25kIGNodW5rLgotICogVGhpcyBpcyBiZWNhdXNlIHRoZSBvbmx5IGNodW5rIGFsbG93ZWQgdG8gYmUgZW1wdHkgaXMgdGhlIGZpcnN0LgotICogQWxsIG90aGVycyBhcmUgZnJlZWQgd2hlbiB0aGV5IGJlY29tZSBlbXB0eS4KLSAqCi0gKiBBdCBzb21lIHBvaW50IHRoaXMgYW5kIHhmc190cmFuc19uZXh0X2l0ZW0oKSBzaG91bGQgYmUgb3B0aW1pemVkCi0gKiB0byBxdWlja2x5IGxvb2sgYXQgdGhlIG1hc2sgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGFueXRoaW5nIHRvCi0gKiBsb29rIGF0LgotICovCi14ZnNfbG9nX2l0ZW1fZGVzY190ICoKLXhmc190cmFuc19maXJzdF9pdGVtKHhmc190cmFuc190ICp0cCkKLXsKLQl4ZnNfbG9nX2l0ZW1fY2h1bmtfdAkqbGljcDsKLQlpbnQJCQlpOwotCi0JbGljcCA9ICZ0cC0+dF9pdGVtczsKLQkvKgotCSAqIElmIGl0J3Mgbm90IGluIHRoZSBmaXJzdCBjaHVuaywgc2tpcCB0byB0aGUgc2Vjb25kLgotCSAqLwotCWlmICh4ZnNfbGljX2FyZV9hbGxfZnJlZShsaWNwKSkgewotCQlsaWNwID0gbGljcC0+bGljX25leHQ7Ci0JfQotCi0JLyoKLQkgKiBSZXR1cm4gdGhlIGZpcnN0IG5vbi1mcmVlIGRlc2NyaXB0b3IgaW4gdGhlIGNodW5rLgotCSAqLwotCUFTU0VSVCgheGZzX2xpY19hcmVfYWxsX2ZyZWUobGljcCkpOwotCWZvciAoaSA9IDA7IGkgPCBsaWNwLT5saWNfdW51c2VkOyBpKyspIHsKLQkJaWYgKHhmc19saWNfaXNmcmVlKGxpY3AsIGkpKSB7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCXJldHVybiB4ZnNfbGljX3Nsb3QobGljcCwgaSk7Ci0JfQotCWNtbl9lcnIoQ0VfV0FSTiwgInhmc190cmFuc19maXJzdF9pdGVtKCkgLS0gbm8gZmlyc3QgaXRlbSIpOwotCXJldHVybiBOVUxMOwotfQotCi0KLS8qCi0gKiBHaXZlbiBhIGRlc2NyaXB0b3IsIHJldHVybiB0aGUgbmV4dCBkZXNjcmlwdG9yIGluIHRoZSBjaHVuayBsaXN0LgotICogVGhpcyByZXR1cm5zIE5VTEwgaWYgdGhlcmUgYXJlIG5vIG1vcmUgdXNlZCBkZXNjcmlwdG9ycyBpbiB0aGUgbGlzdC4KLSAqCi0gKiBXZSBkbyB0aGlzIGJ5IGZpcnN0IGxvY2F0aW5nIHRoZSBjaHVuayBpbiB3aGljaCB0aGUgZGVzY3JpcHRvciByZXNpZGVzLAotICogYW5kIHRoZW4gc2Nhbm5pbmcgZm9yd2FyZCBpbiB0aGUgY2h1bmsgYW5kIHRoZSBsaXN0IGZvciB0aGUgbmV4dAotICogdXNlZCBkZXNjcmlwdG9yLgotICovCi0vKkFSR1NVU0VEKi8KLXhmc19sb2dfaXRlbV9kZXNjX3QgKgoteGZzX3RyYW5zX25leHRfaXRlbSh4ZnNfdHJhbnNfdCAqdHAsIHhmc19sb2dfaXRlbV9kZXNjX3QgKmxpZHApCi17Ci0JeGZzX2xvZ19pdGVtX2NodW5rX3QJKmxpY3A7Ci0JaW50CQkJaTsKLQotCWxpY3AgPSB4ZnNfbGljX2Rlc2NfdG9fY2h1bmsobGlkcCk7Ci0KLQkvKgotCSAqIEZpcnN0IHNlYXJjaCB0aGUgcmVzdCBvZiB0aGUgY2h1bmsuIFRoZSBmb3IgbG9vcCBrZWVwcyB1cwotCSAqIGZyb20gcmVmZXJlbmNpbmcgdGhpbmdzIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBjaHVuay4KLQkgKi8KLQlmb3IgKGkgPSAoaW50KXhmc19saWNfZGVzY190b19zbG90KGxpZHApICsgMTsgaSA8IGxpY3AtPmxpY191bnVzZWQ7IGkrKykgewotCQlpZiAoeGZzX2xpY19pc2ZyZWUobGljcCwgaSkpIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJcmV0dXJuIHhmc19saWNfc2xvdChsaWNwLCBpKTsKLQl9Ci0KLQkvKgotCSAqIE5vdyBzZWFyY2ggdGhlIG5leHQgY2h1bmsuICBJdCBtdXN0IGJlIHRoZXJlLCBiZWNhdXNlIHRoZQotCSAqIG5leHQgY2h1bmsgd291bGQgaGF2ZSBiZWVuIGZyZWVkIGlmIGl0IHdlcmUgZW1wdHkuCi0JICogSWYgdGhlcmUgaXMgbm8gbmV4dCBjaHVuaywgcmV0dXJuIE5VTEwuCi0JICovCi0JaWYgKGxpY3AtPmxpY19uZXh0ID09IE5VTEwpIHsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JbGljcCA9IGxpY3AtPmxpY19uZXh0OwotCUFTU0VSVCgheGZzX2xpY19hcmVfYWxsX2ZyZWUobGljcCkpOwotCWZvciAoaSA9IDA7IGkgPCBsaWNwLT5saWNfdW51c2VkOyBpKyspIHsKLQkJaWYgKHhmc19saWNfaXNmcmVlKGxpY3AsIGkpKSB7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCXJldHVybiB4ZnNfbGljX3Nsb3QobGljcCwgaSk7Ci0JfQotCUFTU0VSVCgwKTsKLQkvKiBOT1RSRUFDSEVEICovCi0JcmV0dXJuIE5VTEw7IC8qIGtlZXAgZ2NjIHF1aXRlICovCi19Ci0KLS8qCi0gKiBUaGlzIGlzIGNhbGxlZCB0byB1bmxvY2sgYWxsIG9mIHRoZSBpdGVtcyBvZiBhIHRyYW5zYWN0aW9uIGFuZCB0byBmcmVlCi0gKiBhbGwgdGhlIGRlc2NyaXB0b3JzIG9mIHRoYXQgdHJhbnNhY3Rpb24uCi0gKgotICogSXQgd2Fsa3MgdGhlIGxpc3Qgb2YgZGVzY3JpcHRvcnMgYW5kIHVubG9ja3MgZWFjaCBpdGVtLiAgSXQgZnJlZXMKLSAqIGVhY2ggY2h1bmsgZXhjZXB0IHRoYXQgZW1iZWRkZWQgaW4gdGhlIHRyYW5zYWN0aW9uIGFzIGl0IGdvZXMgYWxvbmcuCi0gKi8KLXZvaWQKLXhmc190cmFuc19mcmVlX2l0ZW1zKAotCXhmc190cmFuc190CSp0cCwKLQl4ZnNfbHNuX3QJY29tbWl0X2xzbiwKLQlpbnQJCWZsYWdzKQotewotCXhmc19sb2dfaXRlbV9jaHVua190CSpsaWNwOwotCXhmc19sb2dfaXRlbV9jaHVua190CSpuZXh0X2xpY3A7Ci0JaW50CQkJYWJvcnQ7Ci0KLQlhYm9ydCA9IGZsYWdzICYgWEZTX1RSQU5TX0FCT1JUOwotCWxpY3AgPSAmdHAtPnRfaXRlbXM7Ci0JLyoKLQkgKiBTcGVjaWFsIGNhc2UgdGhlIGVtYmVkZGVkIGNodW5rIHNvIHdlIGRvbid0IGZyZWUgaXQgYmVsb3cuCi0JICovCi0JaWYgKCF4ZnNfbGljX2FyZV9hbGxfZnJlZShsaWNwKSkgewotCQkodm9pZCkgeGZzX3RyYW5zX3VubG9ja19jaHVuayhsaWNwLCAxLCBhYm9ydCwgY29tbWl0X2xzbik7Ci0JCXhmc19saWNfYWxsX2ZyZWUobGljcCk7Ci0JCWxpY3AtPmxpY191bnVzZWQgPSAwOwotCX0KLQlsaWNwID0gbGljcC0+bGljX25leHQ7Ci0KLQkvKgotCSAqIFVubG9jayBlYWNoIGl0ZW0gaW4gZWFjaCBjaHVuayBhbmQgZnJlZSB0aGUgY2h1bmtzLgotCSAqLwotCXdoaWxlIChsaWNwICE9IE5VTEwpIHsKLQkJQVNTRVJUKCF4ZnNfbGljX2FyZV9hbGxfZnJlZShsaWNwKSk7Ci0JCSh2b2lkKSB4ZnNfdHJhbnNfdW5sb2NrX2NodW5rKGxpY3AsIDEsIGFib3J0LCBjb21taXRfbHNuKTsKLQkJbmV4dF9saWNwID0gbGljcC0+bGljX25leHQ7Ci0JCWttZW1fZnJlZShsaWNwKTsKLQkJbGljcCA9IG5leHRfbGljcDsKLQl9Ci0KLQkvKgotCSAqIFJlc2V0IHRoZSB0cmFuc2FjdGlvbiBzdHJ1Y3R1cmUncyBmcmVlIGl0ZW0gY291bnQuCi0JICovCi0JdHAtPnRfaXRlbXNfZnJlZSA9IFhGU19MSUNfTlVNX1NMT1RTOwotCXRwLT50X2l0ZW1zLmxpY19uZXh0ID0gTlVMTDsKLX0KLQotCi0KLS8qCi0gKiBUaGlzIGlzIGNhbGxlZCB0byB1bmxvY2sgdGhlIGl0ZW1zIGFzc29jaWF0ZWQgd2l0aCBhIHRyYW5zYWN0aW9uLgotICogSXRlbXMgd2hpY2ggd2VyZSBub3QgbG9nZ2VkIHNob3VsZCBiZSBmcmVlZC4KLSAqIFRob3NlIHdoaWNoIHdlcmUgbG9nZ2VkIG11c3Qgc3RpbGwgYmUgdHJhY2tlZCBzbyB0aGV5IGNhbiBiZSB1bnBpbm5lZAotICogd2hlbiB0aGUgdHJhbnNhY3Rpb24gY29tbWl0cy4KLSAqLwotdm9pZAoteGZzX3RyYW5zX3VubG9ja19pdGVtcyh4ZnNfdHJhbnNfdCAqdHAsIHhmc19sc25fdCBjb21taXRfbHNuKQotewotCXhmc19sb2dfaXRlbV9jaHVua190CSpsaWNwOwotCXhmc19sb2dfaXRlbV9jaHVua190CSpuZXh0X2xpY3A7Ci0JeGZzX2xvZ19pdGVtX2NodW5rX3QJKipsaWNwcDsKLQlpbnQJCQlmcmVlZDsKLQotCWZyZWVkID0gMDsKLQlsaWNwID0gJnRwLT50X2l0ZW1zOwotCi0JLyoKLQkgKiBTcGVjaWFsIGNhc2UgdGhlIGVtYmVkZGVkIGNodW5rIHNvIHdlIGRvbid0IGZyZWUuCi0JICovCi0JaWYgKCF4ZnNfbGljX2FyZV9hbGxfZnJlZShsaWNwKSkgewotCQlmcmVlZCA9IHhmc190cmFuc191bmxvY2tfY2h1bmsobGljcCwgMCwgMCwgY29tbWl0X2xzbik7Ci0JfQotCWxpY3BwID0gJih0cC0+dF9pdGVtcy5saWNfbmV4dCk7Ci0JbGljcCA9IGxpY3AtPmxpY19uZXh0OwotCi0JLyoKLQkgKiBVbmxvY2sgZWFjaCBpdGVtIGluIGVhY2ggY2h1bmssIGZyZWUgbm9uLWRpcnR5IGRlc2NyaXB0b3JzLAotCSAqIGFuZCBmcmVlIGVtcHR5IGNodW5rcy4KLQkgKi8KLQl3aGlsZSAobGljcCAhPSBOVUxMKSB7Ci0JCUFTU0VSVCgheGZzX2xpY19hcmVfYWxsX2ZyZWUobGljcCkpOwotCQlmcmVlZCArPSB4ZnNfdHJhbnNfdW5sb2NrX2NodW5rKGxpY3AsIDAsIDAsIGNvbW1pdF9sc24pOwotCQluZXh0X2xpY3AgPSBsaWNwLT5saWNfbmV4dDsKLQkJaWYgKHhmc19saWNfYXJlX2FsbF9mcmVlKGxpY3ApKSB7Ci0JCQkqbGljcHAgPSBuZXh0X2xpY3A7Ci0JCQlrbWVtX2ZyZWUobGljcCk7Ci0JCQlmcmVlZCAtPSBYRlNfTElDX05VTV9TTE9UUzsKLQkJfSBlbHNlIHsKLQkJCWxpY3BwID0gJihsaWNwLT5saWNfbmV4dCk7Ci0JCX0KLQkJQVNTRVJUKCpsaWNwcCA9PSBuZXh0X2xpY3ApOwotCQlsaWNwID0gbmV4dF9saWNwOwotCX0KLQotCS8qCi0JICogRml4IHRoZSBmcmVlIGRlc2NyaXB0b3IgY291bnQgaW4gdGhlIHRyYW5zYWN0aW9uLgotCSAqLwotCXRwLT50X2l0ZW1zX2ZyZWUgKz0gZnJlZWQ7Ci19Ci0KLS8qCi0gKiBVbmxvY2sgZWFjaCBpdGVtIHBvaW50ZWQgdG8gYnkgYSBkZXNjcmlwdG9yIGluIHRoZSBnaXZlbiBjaHVuay4KLSAqIFN0YW1wIHRoZSBjb21taXQgbHNuIGludG8gZWFjaCBpdGVtIGlmIG5lY2Vzc2FyeS4KLSAqIEZyZWUgZGVzY3JpcHRvcnMgcG9pbnRpbmcgdG8gaXRlbXMgd2hpY2ggYXJlIG5vdCBkaXJ0eSBpZiBmcmVlaW5nX2NodW5rCi0gKiBpcyB6ZXJvLiBJZiBmcmVlaW5nX2NodW5rIGlzIG5vbi16ZXJvLCB0aGVuIHdlIG5lZWQgdG8gdW5sb2NrIGFsbAotICogaXRlbXMgaW4gdGhlIGNodW5rLgotICogCi0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBkZXNjcmlwdG9ycyBmcmVlZC4KLSAqLwotU1RBVElDIGludAoteGZzX3RyYW5zX3VubG9ja19jaHVuaygKLQl4ZnNfbG9nX2l0ZW1fY2h1bmtfdAkqbGljcCwKLQlpbnQJCQlmcmVlaW5nX2NodW5rLAotCWludAkJCWFib3J0LAotCXhmc19sc25fdAkJY29tbWl0X2xzbikKLXsKLQl4ZnNfbG9nX2l0ZW1fZGVzY190CSpsaWRwOwotCXhmc19sb2dfaXRlbV90CQkqbGlwOwotCWludAkJCWk7Ci0JaW50CQkJZnJlZWQ7Ci0KLQlmcmVlZCA9IDA7Ci0JbGlkcCA9IGxpY3AtPmxpY19kZXNjczsKLQlmb3IgKGkgPSAwOyBpIDwgbGljcC0+bGljX3VudXNlZDsgaSsrLCBsaWRwKyspIHsKLQkJaWYgKHhmc19saWNfaXNmcmVlKGxpY3AsIGkpKSB7Ci0JCQljb250aW51ZTsKLQkJfQotCQlsaXAgPSBsaWRwLT5saWRfaXRlbTsKLQkJbGlwLT5saV9kZXNjID0gTlVMTDsKLQotCQlpZiAoY29tbWl0X2xzbiAhPSBOVUxMQ09NTUlUTFNOKQotCQkJSU9QX0NPTU1JVFRJTkcobGlwLCBjb21taXRfbHNuKTsKLQkJaWYgKGFib3J0KQotCQkJbGlwLT5saV9mbGFncyB8PSBYRlNfTElfQUJPUlRFRDsKLQkJSU9QX1VOTE9DSyhsaXApOwotCi0JCS8qCi0JCSAqIEZyZWUgdGhlIGRlc2NyaXB0b3IgaWYgdGhlIGl0ZW0gaXMgbm90IGRpcnR5Ci0JCSAqIHdpdGhpbiB0aGlzIHRyYW5zYWN0aW9uIGFuZCB0aGUgY2FsbGVyIGlzIG5vdAotCQkgKiBnb2luZyB0byBqdXN0IGZyZWUgdGhlIGVudGlyZSB0aGluZyByZWdhcmRsZXNzLgotCQkgKi8KLQkJaWYgKCEoZnJlZWluZ19jaHVuaykgJiYKLQkJICAgICghKGxpZHAtPmxpZF9mbGFncyAmIFhGU19MSURfRElSVFkpIHx8IGFib3J0KSkgewotCQkJeGZzX2xpY19yZWxzZShsaWNwLCBpKTsKLQkJCWZyZWVkKys7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gZnJlZWQ7Ci19CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zX3ByaXYuaCBiL2ZzL3hmcy94ZnNfdHJhbnNfcHJpdi5oCmluZGV4IGM2ZTRmMmM4Li5lMmQ5M2Q4IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zX3ByaXYuaAorKysgYi9mcy94ZnMveGZzX3RyYW5zX3ByaXYuaApAQCAtMjMsMjIgKzIzLDggQEAKIHN0cnVjdCB4ZnNfbW91bnQ7CiBzdHJ1Y3QgeGZzX3RyYW5zOwogCi0vKgotICogRnJvbSB4ZnNfdHJhbnNfaXRlbS5jCi0gKi8KLXN0cnVjdCB4ZnNfbG9nX2l0ZW1fZGVzYwkqeGZzX3RyYW5zX2FkZF9pdGVtKHN0cnVjdCB4ZnNfdHJhbnMgKiwKLQkJCQkJICAgIHN0cnVjdCB4ZnNfbG9nX2l0ZW0gKik7Ci12b2lkCQkJCXhmc190cmFuc19mcmVlX2l0ZW0oc3RydWN0IHhmc190cmFucyAqLAotCQkJCQkgICAgc3RydWN0IHhmc19sb2dfaXRlbV9kZXNjICopOwotc3RydWN0IHhmc19sb2dfaXRlbV9kZXNjCSp4ZnNfdHJhbnNfZmluZF9pdGVtKHN0cnVjdCB4ZnNfdHJhbnMgKiwKLQkJCQkJICAgICBzdHJ1Y3QgeGZzX2xvZ19pdGVtICopOwotc3RydWN0IHhmc19sb2dfaXRlbV9kZXNjCSp4ZnNfdHJhbnNfZmlyc3RfaXRlbShzdHJ1Y3QgeGZzX3RyYW5zICopOwotc3RydWN0IHhmc19sb2dfaXRlbV9kZXNjCSp4ZnNfdHJhbnNfbmV4dF9pdGVtKHN0cnVjdCB4ZnNfdHJhbnMgKiwKLQkJCQkJICAgICBzdHJ1Y3QgeGZzX2xvZ19pdGVtX2Rlc2MgKik7Ci0KLXZvaWQJeGZzX3RyYW5zX3VubG9ja19pdGVtcyhzdHJ1Y3QgeGZzX3RyYW5zICp0cCwgeGZzX2xzbl90IGNvbW1pdF9sc24pOwotdm9pZAl4ZnNfdHJhbnNfZnJlZV9pdGVtcyhzdHJ1Y3QgeGZzX3RyYW5zICp0cCwgeGZzX2xzbl90IGNvbW1pdF9sc24sCi0JCQkJaW50IGZsYWdzKTsKK3ZvaWQJeGZzX3RyYW5zX2FkZF9pdGVtKHN0cnVjdCB4ZnNfdHJhbnMgKiwgc3RydWN0IHhmc19sb2dfaXRlbSAqKTsKK3ZvaWQJeGZzX3RyYW5zX2RlbF9pdGVtKHN0cnVjdCB4ZnNfbG9nX2l0ZW0gKik7CiAKIHZvaWQJeGZzX3RyYW5zX2l0ZW1fY29tbWl0dGVkKHN0cnVjdCB4ZnNfbG9nX2l0ZW0gKmxpcCwKIAkJCQl4ZnNfbHNuX3QgY29tbWl0X2xzbiwgaW50IGFib3J0ZWQpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc191dGlscy5jIGIvZnMveGZzL3hmc191dGlscy5jCmluZGV4IDRkODg2MTYuLmI3ZDU3NjkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdXRpbHMuYworKysgYi9mcy94ZnMveGZzX3V0aWxzLmMKQEAgLTI1LDE4ICsyNSwxNCBAQAogI2luY2x1ZGUgInhmc19zYi5oIgogI2luY2x1ZGUgInhmc19hZy5oIgogI2luY2x1ZGUgInhmc19kaXIyLmgiCi0jaW5jbHVkZSAieGZzX2RtYXBpLmgiCiAjaW5jbHVkZSAieGZzX21vdW50LmgiCiAjaW5jbHVkZSAieGZzX2JtYXBfYnRyZWUuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMl9zZi5oIgotI2luY2x1ZGUgInhmc19hdHRyX3NmLmgiCiAjaW5jbHVkZSAieGZzX2Rpbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZV9pdGVtLmgiCiAjaW5jbHVkZSAieGZzX2JtYXAuaCIKICNpbmNsdWRlICJ4ZnNfZXJyb3IuaCIKICNpbmNsdWRlICJ4ZnNfcXVvdGEuaCIKLSNpbmNsdWRlICJ4ZnNfcncuaCIKICNpbmNsdWRlICJ4ZnNfaXRhYmxlLmgiCiAjaW5jbHVkZSAieGZzX3V0aWxzLmgiCiAKQEAgLTMyNCw4NiArMzIwLDMgQEAKIAl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7CiAJcmV0dXJuIDA7CiB9Ci0KLS8qCi0gKiBUcnkgdG8gdHJ1bmNhdGUgdGhlIGdpdmVuIGZpbGUgdG8gMCBsZW5ndGguICBDdXJyZW50bHkgY2FsbGVkCi0gKiBvbmx5IG91dCBvZiB4ZnNfcmVtb3ZlIHdoZW4gaXQgaGFzIHRvIHRydW5jYXRlIGEgZmlsZSB0byBmcmVlCi0gKiB1cCBzcGFjZSBmb3IgdGhlIHJlbW92ZSB0byBwcm9jZWVkLgotICovCi1pbnQKLXhmc190cnVuY2F0ZV9maWxlKAotCXhmc19tb3VudF90CSptcCwKLQl4ZnNfaW5vZGVfdAkqaXApCi17Ci0JeGZzX3RyYW5zX3QJKnRwOwotCWludAkJZXJyb3I7Ci0KLSNpZmRlZiBRVU9UQURFQlVHCi0JLyoKLQkgKiBUaGlzIGlzIGNhbGxlZCB0byB0cnVuY2F0ZSB0aGUgcXVvdGFpbm9kZXMgdG9vLgotCSAqLwotCWlmIChYRlNfSVNfVVFVT1RBX09OKG1wKSkgewotCQlpZiAoaXAtPmlfaW5vICE9IG1wLT5tX3NiLnNiX3VxdW90aW5vKQotCQkJQVNTRVJUKGlwLT5pX3VkcXVvdCk7Ci0JfQotCWlmIChYRlNfSVNfT1FVT1RBX09OKG1wKSkgewotCQlpZiAoaXAtPmlfaW5vICE9IG1wLT5tX3NiLnNiX2dxdW90aW5vKQotCQkJQVNTRVJUKGlwLT5pX2dkcXVvdCk7Ci0JfQotI2VuZGlmCi0JLyoKLQkgKiBNYWtlIHRoZSBjYWxsIHRvIHhmc19pdHJ1bmNhdGVfc3RhcnQgYmVmb3JlIHN0YXJ0aW5nIHRoZQotCSAqIHRyYW5zYWN0aW9uLCBiZWNhdXNlIHdlIGNhbm5vdCBtYWtlIHRoZSBjYWxsIHdoaWxlIHdlJ3JlCi0JICogaW4gYSB0cmFuc2FjdGlvbi4KLQkgKi8KLQl4ZnNfaWxvY2soaXAsIFhGU19JT0xPQ0tfRVhDTCk7Ci0JZXJyb3IgPSB4ZnNfaXRydW5jYXRlX3N0YXJ0KGlwLCBYRlNfSVRSVU5DX0RFRklOSVRFLCAoeGZzX2ZzaXplX3QpMCk7Ci0JaWYgKGVycm9yKSB7Ci0JCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX0VYQ0wpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCi0JdHAgPSB4ZnNfdHJhbnNfYWxsb2MobXAsIFhGU19UUkFOU19UUlVOQ0FURV9GSUxFKTsKLQlpZiAoKGVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIDAsIFhGU19JVFJVTkNBVEVfTE9HX1JFUyhtcCksIDAsCi0JCQkJICAgICAgWEZTX1RSQU5TX1BFUk1fTE9HX1JFUywKLQkJCQkgICAgICBYRlNfSVRSVU5DQVRFX0xPR19DT1VOVCkpKSB7Ci0JCXhmc190cmFuc19jYW5jZWwodHAsIDApOwotCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19FWENMKTsKLQkJcmV0dXJuIGVycm9yOwotCX0KLQotCS8qCi0JICogRm9sbG93IHRoZSBub3JtYWwgdHJ1bmNhdGUgbG9ja2luZyBwcm90b2NvbC4gIFNpbmNlIHdlCi0JICogaG9sZCB0aGUgaW5vZGUgaW4gdGhlIHRyYW5zYWN0aW9uLCB3ZSBrbm93IHRoYXQgaXRzIG51bWJlcgotCSAqIG9mIHJlZmVyZW5jZXMgd2lsbCBzdGF5IGNvbnN0YW50LgotCSAqLwotCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCXhmc190cmFuc19pam9pbih0cCwgaXAsIFhGU19JTE9DS19FWENMIHwgWEZTX0lPTE9DS19FWENMKTsKLQl4ZnNfdHJhbnNfaWhvbGQodHAsIGlwKTsKLQkvKgotCSAqIFNpZ25hbCBhIHN5bmMgeGFjdGlvbi4gIFRoZSBvbmx5IGNhc2Ugd2hlcmUgdGhhdCBpc24ndAotCSAqIHRoZSBjYXNlIGlzIGlmIHdlJ3JlIHRydW5jYXRpbmcgYW4gYWxyZWFkeSB1bmxpbmtlZCBmaWxlCi0JICogb24gYSB3c3luYyBmcy4gIEluIHRoYXQgY2FzZSwgd2Uga25vdyB0aGUgYmxvY2tzIGNhbid0Ci0JICogcmVhcHBlYXIgaW4gdGhlIGZpbGUgYmVjYXVzZSB0aGUgbGlua3MgdG8gZmlsZSBhcmUKLQkgKiBwZXJtYW5lbnRseSB0b2FzdC4gIEN1cnJlbnRseSwgd2UncmUgYWx3YXlzIGdvaW5nIHRvCi0JICogd2FudCBhIHN5bmMgdHJhbnNhY3Rpb24gYmVjYXVzZSB0aGlzIGNvZGUgaXMgYmVpbmcKLQkgKiBjYWxsZWQgZnJvbSBwbGFjZXMgd2hlcmUgbmxpbmsgaXMgZ3VhcmFudGVlZCB0byBiZSAxCi0JICogYnV0IEknbSBsZWF2aW5nIHRoZSB0ZXN0cyBpbiB0byBwcm90ZWN0IGFnYWluc3QgZnV0dXJlCi0JICogY2hhbmdlcyAtLSByY2MuCi0JICovCi0JZXJyb3IgPSB4ZnNfaXRydW5jYXRlX2ZpbmlzaCgmdHAsIGlwLCAoeGZzX2ZzaXplX3QpMCwKLQkJCQkgICAgIFhGU19EQVRBX0ZPUkssCi0JCQkJICAgICAoKGlwLT5pX2QuZGlfbmxpbmsgIT0gMCB8fAotCQkJCSAgICAgICAhKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1dTWU5DKSkKLQkJCQkgICAgICA/IDEgOiAwKSk7Ci0JaWYgKGVycm9yKSB7Ci0JCXhmc190cmFuc19jYW5jZWwodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMgfAotCQkJCSBYRlNfVFJBTlNfQUJPUlQpOwotCX0gZWxzZSB7Ci0JCXhmc19pY2hndGltZShpcCwgWEZTX0lDSEdUSU1FX01PRCB8IFhGU19JQ0hHVElNRV9DSEcpOwotCQllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMpOwotCX0KLQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wgfCBYRlNfSU9MT0NLX0VYQ0wpOwotCi0JcmV0dXJuIGVycm9yOwotfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc191dGlscy5oIGIvZnMveGZzL3hmc191dGlscy5oCmluZGV4IGVmMzIxMjIuLmY1NWI5NjcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdXRpbHMuaAorKysgYi9mcy94ZnMveGZzX3V0aWxzLmgKQEAgLTE4LDcgKzE4LDYgQEAKICNpZm5kZWYgX19YRlNfVVRJTFNfSF9fCiAjZGVmaW5lIF9fWEZTX1VUSUxTX0hfXwogCi1leHRlcm4gaW50IHhmc190cnVuY2F0ZV9maWxlKHhmc19tb3VudF90ICosIHhmc19pbm9kZV90ICopOwogZXh0ZXJuIGludCB4ZnNfZGlyX2lhbGxvYyh4ZnNfdHJhbnNfdCAqKiwgeGZzX2lub2RlX3QgKiwgbW9kZV90LCB4ZnNfbmxpbmtfdCwKIAkJCQl4ZnNfZGV2X3QsIGNyZWRfdCAqLCBwcmlkX3QsIGludCwKIAkJCQl4ZnNfaW5vZGVfdCAqKiwgaW50ICopOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc192bm9kZW9wcy5jIGIvZnMveGZzL3hmc192bm9kZW9wcy5jCmluZGV4IGMxNjQ2ODMuLjNhYzEzN2QgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYworKysgYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKQEAgLTI2LDE5ICsyNiwxNCBAQAogI2luY2x1ZGUgInhmc19zYi5oIgogI2luY2x1ZGUgInhmc19hZy5oIgogI2luY2x1ZGUgInhmc19kaXIyLmgiCi0jaW5jbHVkZSAieGZzX2RtYXBpLmgiCiAjaW5jbHVkZSAieGZzX21vdW50LmgiCiAjaW5jbHVkZSAieGZzX2RhX2J0cmVlLmgiCiAjaW5jbHVkZSAieGZzX2JtYXBfYnRyZWUuaCIKLSNpbmNsdWRlICJ4ZnNfYWxsb2NfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfaWFsbG9jX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2RpcjJfc2YuaCIKLSNpbmNsdWRlICJ4ZnNfYXR0cl9zZi5oIgogI2luY2x1ZGUgInhmc19kaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfaW5vZGVfaXRlbS5oIgogI2luY2x1ZGUgInhmc19pdGFibGUuaCIKLSNpbmNsdWRlICJ4ZnNfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfaWFsbG9jLmgiCiAjaW5jbHVkZSAieGZzX2FsbG9jLmgiCiAjaW5jbHVkZSAieGZzX2JtYXAuaCIKQEAgLTczLDcgKzY4LDcgQEAKIAlzdHJ1Y3QgeGZzX2RxdW90CSp1ZHFwLCAqZ2RxcCwgKm9sZGRxdW90MSwgKm9sZGRxdW90MjsKIAlpbnQJCQluZWVkX2lvbG9jayA9IDE7CiAKLQl4ZnNfaXRyYWNlX2VudHJ5KGlwKTsKKwl0cmFjZV94ZnNfc2V0YXR0cihpcCk7CiAKIAlpZiAobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfUkRPTkxZKQogCQlyZXR1cm4gWEZTX0VSUk9SKEVST0ZTKTsKQEAgLTE0MywxNiArMTM4LDYgQEAKIAkJCWdvdG8gZXJyb3JfcmV0dXJuOwogCQl9CiAJfSBlbHNlIHsKLQkJaWYgKERNX0VWRU5UX0VOQUJMRUQoaXAsIERNX0VWRU5UX1RSVU5DQVRFKSAmJgotCQkgICAgIShmbGFncyAmIFhGU19BVFRSX0RNSSkpIHsKLQkJCWludCBkbWZsYWdzID0gQVRfREVMQVlfRkxBRyhmbGFncykgfCBETV9TRU1fRkxBR19XUjsKLQkJCWNvZGUgPSBYRlNfU0VORF9EQVRBKG1wLCBETV9FVkVOVF9UUlVOQ0FURSwgaXAsCi0JCQkJaWF0dHItPmlhX3NpemUsIDAsIGRtZmxhZ3MsIE5VTEwpOwotCQkJaWYgKGNvZGUpIHsKLQkJCQlsb2NrX2ZsYWdzID0gMDsKLQkJCQlnb3RvIGVycm9yX3JldHVybjsKLQkJCX0KLQkJfQogCQlpZiAobmVlZF9pb2xvY2spCiAJCQlsb2NrX2ZsYWdzIHw9IFhGU19JT0xPQ0tfRVhDTDsKIAl9CkBAIC0yODMsOCArMjY4LDcgQEAKIAkJY29tbWl0X2ZsYWdzID0gWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUzsKIAkJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiAKLQkJeGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgbG9ja19mbGFncyk7Ci0JCXhmc190cmFuc19paG9sZCh0cCwgaXApOworCQl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwKTsKIAogCQkvKgogCQkgKiBPbmx5IGNoYW5nZSB0aGUgYy9tdGltZSBpZiB3ZSBhcmUgY2hhbmdpbmcgdGhlIHNpemUKQEAgLTMzNCw4ICszMTgsNyBAQAogCQkJeGZzX2lmbGFnc19zZXQoaXAsIFhGU19JVFJVTkNBVEVEKTsKIAkJfQogCX0gZWxzZSBpZiAodHApIHsKLQkJeGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgbG9ja19mbGFncyk7Ci0JCXhmc190cmFuc19paG9sZCh0cCwgaXApOworCQl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwKTsKIAl9CiAKIAkvKgpAQCAtNDcwLDE3ICs0NTMsMTAgQEAKIAkJCXJldHVybiBYRlNfRVJST1IoY29kZSk7CiAJfQogCi0JaWYgKERNX0VWRU5UX0VOQUJMRUQoaXAsIERNX0VWRU5UX0FUVFJJQlVURSkgJiYKLQkgICAgIShmbGFncyAmIFhGU19BVFRSX0RNSSkpIHsKLQkJKHZvaWQpIFhGU19TRU5EX05BTUVTUChtcCwgRE1fRVZFTlRfQVRUUklCVVRFLCBpcCwgRE1fUklHSFRfTlVMTCwKLQkJCQkJTlVMTCwgRE1fUklHSFRfTlVMTCwgTlVMTCwgTlVMTCwKLQkJCQkJMCwgMCwgQVRfREVMQVlfRkxBRyhmbGFncykpOwotCX0KIAlyZXR1cm4gMDsKIAogIGFib3J0X3JldHVybjoKIAljb21taXRfZmxhZ3MgfD0gWEZTX1RSQU5TX0FCT1JUOwotCS8qIEZBTExUSFJPVUdIICovCiAgZXJyb3JfcmV0dXJuOgogCXhmc19xbV9kcXJlbGUodWRxcCk7CiAJeGZzX3FtX2RxcmVsZShnZHFwKTsKQEAgLTUxNiw3ICs0OTIsNyBAQAogCWludAkJZXJyb3IgPSAwOwogCiAJZXJyb3IgPSB4ZnNfYm1hcGkoTlVMTCwgaXAsIDAsIFhGU19CX1RPX0ZTQihtcCwgcGF0aGxlbiksIDAsIE5VTEwsIDAsCi0JCQltdmFsLCAmbm1hcHMsIE5VTEwsIE5VTEwpOworCQkJbXZhbCwgJm5tYXBzLCBOVUxMKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0OwogCkBAIC01NTcsNyArNTMzLDcgQEAKIAlpbnQJCXBhdGhsZW47CiAJaW50CQllcnJvciA9IDA7CiAKLQl4ZnNfaXRyYWNlX2VudHJ5KGlwKTsKKwl0cmFjZV94ZnNfcmVhZGxpbmsoaXApOwogCiAJaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKQogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CkBAIC02MTMsMTQgKzU4OSwxNCBAQAogCSAqLwogCWVuZF9mc2IgPSBYRlNfQl9UT19GU0IobXAsICgoeGZzX3Vmc2l6ZV90KWlwLT5pX3NpemUpKTsKIAlsYXN0X2ZzYiA9IFhGU19CX1RPX0ZTQihtcCwgKHhmc191ZnNpemVfdClYRlNfTUFYSU9GRlNFVChtcCkpOwotCW1hcF9sZW4gPSBsYXN0X2ZzYiAtIGVuZF9mc2I7Ci0JaWYgKG1hcF9sZW4gPD0gMCkKKwlpZiAobGFzdF9mc2IgPD0gZW5kX2ZzYikKIAkJcmV0dXJuIDA7CisJbWFwX2xlbiA9IGxhc3RfZnNiIC0gZW5kX2ZzYjsKIAogCW5pbWFwcyA9IDE7CiAJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKIAllcnJvciA9IHhmc19ibWFwaShOVUxMLCBpcCwgZW5kX2ZzYiwgbWFwX2xlbiwgMCwKLQkJCSAgTlVMTCwgMCwgJmltYXAsICZuaW1hcHMsIE5VTEwsIE5VTEwpOworCQkJICBOVUxMLCAwLCAmaW1hcCwgJm5pbWFwcywgTlVMTCk7CiAJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwogCiAJaWYgKCFlcnJvciAmJiAobmltYXBzICE9IDApICYmCkBAIC02NzUsMTAgKzY1MSw3IEBACiAJCX0KIAogCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQkJeGZzX3RyYW5zX2lqb2luKHRwLCBpcCwKLQkJCQlYRlNfSU9MT0NLX0VYQ0wgfAotCQkJCVhGU19JTE9DS19FWENMKTsKLQkJeGZzX3RyYW5zX2lob2xkKHRwLCBpcCk7CisJCXhmc190cmFuc19pam9pbih0cCwgaXApOwogCiAJCWVycm9yID0geGZzX2l0cnVuY2F0ZV9maW5pc2goJnRwLCBpcCwKIAkJCQkJICAgICBpcC0+aV9zaXplLApAQCAtNzUwLDggKzcyMyw3IEBACiAJeGZzX2lsb2NrKGlwLCBYRlNfSU9MT0NLX0VYQ0wgfCBYRlNfSUxPQ0tfRVhDTCk7CiAJc2l6ZSA9IChpbnQpaXAtPmlfZC5kaV9zaXplOwogCWlwLT5pX2QuZGlfc2l6ZSA9IDA7Ci0JeGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgWEZTX0lMT0NLX0VYQ0wgfCBYRlNfSU9MT0NLX0VYQ0wpOwotCXhmc190cmFuc19paG9sZCh0cCwgaXApOworCXhmc190cmFuc19pam9pbih0cCwgaXApOwogCXhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCBYRlNfSUxPR19DT1JFKTsKIAkvKgogCSAqIEZpbmQgdGhlIGJsb2NrKHMpIHNvIHdlIGNhbiBpbnZhbCBhbmQgdW5tYXAgdGhlbS4KQEAgLTc2MSw3ICs3MzMsNyBAQAogCW5tYXBzID0gQVJSQVlfU0laRShtdmFsKTsKIAlpZiAoKGVycm9yID0geGZzX2JtYXBpKHRwLCBpcCwgMCwgWEZTX0JfVE9fRlNCKG1wLCBzaXplKSwKIAkJCVhGU19CTUFQSV9NRVRBREFUQSwgJmZpcnN0X2Jsb2NrLCAwLCBtdmFsLCAmbm1hcHMsCi0JCQkmZnJlZV9saXN0LCBOVUxMKSkpCisJCQkmZnJlZV9saXN0KSkpCiAJCWdvdG8gZXJyb3IwOwogCS8qCiAJICogSW52YWxpZGF0ZSB0aGUgYmxvY2socykuCkBAIC03NzYsNyArNzQ4LDcgQEAKIAkgKiBVbm1hcCB0aGUgZGVhZCBibG9jayhzKSB0byB0aGUgZnJlZV9saXN0LgogCSAqLwogCWlmICgoZXJyb3IgPSB4ZnNfYnVubWFwaSh0cCwgaXAsIDAsIHNpemUsIFhGU19CTUFQSV9NRVRBREFUQSwgbm1hcHMsCi0JCQkmZmlyc3RfYmxvY2ssICZmcmVlX2xpc3QsIE5VTEwsICZkb25lKSkpCisJCQkmZmlyc3RfYmxvY2ssICZmcmVlX2xpc3QsICZkb25lKSkpCiAJCWdvdG8gZXJyb3IxOwogCUFTU0VSVChkb25lKTsKIAkvKgpAQCAtNzk1LDggKzc2Nyw3IEBACiAJICogTWFyayBpdCBkaXJ0eSBzbyBpdCB3aWxsIGJlIGxvZ2dlZCBhbmQgbW92ZWQgZm9yd2FyZCBpbiB0aGUgbG9nIGFzCiAJICogcGFydCBvZiBldmVyeSBjb21taXQuCiAJICovCi0JeGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgWEZTX0lMT0NLX0VYQ0wgfCBYRlNfSU9MT0NLX0VYQ0wpOwotCXhmc190cmFuc19paG9sZCh0cCwgaXApOworCXhmc190cmFuc19pam9pbih0cCwgaXApOwogCXhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCBYRlNfSUxPR19DT1JFKTsKIAkvKgogCSAqIEdldCBhIG5ldywgZW1wdHkgdHJhbnNhY3Rpb24gdG8gcmV0dXJuIHRvIG91ciBjYWxsZXIuCkBAIC05MjksOCArOTAwLDcgQEAKIAkJZ290byBlcnJvcl9jYW5jZWw7CiAKIAl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCBYRlNfSU9MT0NLX0VYQ0wgfCBYRlNfSUxPQ0tfRVhDTCk7Ci0JeGZzX3RyYW5zX2lob2xkKHRwLCBpcCk7CisJeGZzX3RyYW5zX2lqb2luKHRwLCBpcCk7CiAJeGZzX2lkZXN0cm95X2ZvcmsoaXAsIFhGU19BVFRSX0ZPUkspOwogCiAJQVNTRVJUKGlwLT5pX2QuZGlfYW5leHRlbnRzID09IDApOwpAQCAtMTAzNSw4ICsxMDA1LDYgQEAKIAlpbnQJCWVycm9yOwogCWludAkJdHJ1bmNhdGU7CiAKLQl4ZnNfaXRyYWNlX2VudHJ5KGlwKTsKLQogCS8qCiAJICogSWYgdGhlIGlub2RlIGlzIGFscmVhZHkgZnJlZSwgdGhlbiB0aGVyZSBjYW4gYmUgbm90aGluZwogCSAqIHRvIGNsZWFuIHVwIGhlcmUuCkBAIC0xMDYwLDkgKzEwMjgsNiBAQAogCiAJbXAgPSBpcC0+aV9tb3VudDsKIAotCWlmIChpcC0+aV9kLmRpX25saW5rID09IDAgJiYgRE1fRVZFTlRfRU5BQkxFRChpcCwgRE1fRVZFTlRfREVTVFJPWSkpCi0JCVhGU19TRU5EX0RFU1RST1kobXAsIGlwLCBETV9SSUdIVF9OVUxMKTsKLQogCWVycm9yID0gMDsKIAogCS8qIElmIHRoaXMgaXMgYSByZWFkLW9ubHkgbW91bnQsIGRvbid0IGRvIHRoaXMgKHdvdWxkIGdlbmVyYXRlIEkvTykgKi8KQEAgLTExMjAsOCArMTA4NSw3IEBACiAJCX0KIAogCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQkJeGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgWEZTX0lPTE9DS19FWENMIHwgWEZTX0lMT0NLX0VYQ0wpOwotCQl4ZnNfdHJhbnNfaWhvbGQodHAsIGlwKTsKKwkJeGZzX3RyYW5zX2lqb2luKHRwLCBpcCk7CiAKIAkJLyoKIAkJICogbm9ybWFsbHksIHdlIGhhdmUgdG8gcnVuIHhmc19pdHJ1bmNhdGVfZmluaXNoIHN5bmMuCkBAIC0xMTU0LDggKzExMTgsNyBAQAogCQkJcmV0dXJuIFZOX0lOQUNUSVZFX0NBQ0hFOwogCQl9CiAKLQkJeGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgWEZTX0lPTE9DS19FWENMIHwgWEZTX0lMT0NLX0VYQ0wpOwotCQl4ZnNfdHJhbnNfaWhvbGQodHAsIGlwKTsKKwkJeGZzX3RyYW5zX2lqb2luKHRwLCBpcCk7CiAJfSBlbHNlIHsKIAkJZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZSh0cCwgMCwKIAkJCQkJICBYRlNfSUZSRUVfTE9HX1JFUyhtcCksCkBAIC0xMTY4LDggKzExMzEsNyBAQAogCQl9CiAKIAkJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCB8IFhGU19JT0xPQ0tfRVhDTCk7Ci0JCXhmc190cmFuc19pam9pbih0cCwgaXAsIFhGU19JT0xPQ0tfRVhDTCB8IFhGU19JTE9DS19FWENMKTsKLQkJeGZzX3RyYW5zX2lob2xkKHRwLCBpcCk7CisJCXhmc190cmFuc19pam9pbih0cCwgaXApOwogCX0KIAogCS8qCkBAIC0xMjU3LDcgKzEyMTksNyBAQAogCWludAkJCWVycm9yOwogCXVpbnQJCQlsb2NrX21vZGU7CiAKLQl4ZnNfaXRyYWNlX2VudHJ5KGRwKTsKKwl0cmFjZV94ZnNfbG9va3VwKGRwLCBuYW1lKTsKIAogCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKGRwLT5pX21vdW50KSkKIAkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwpAQCAtMTMwOSwyMSArMTI3MSwxMSBAQAogCXVpbnQJCQlsb2dfcmVzOwogCXVpbnQJCQlsb2dfY291bnQ7CiAKLQl4ZnNfaXRyYWNlX2VudHJ5KGRwKTsKKwl0cmFjZV94ZnNfY3JlYXRlKGRwLCBuYW1lKTsKIAogCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkKIAkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwogCi0JaWYgKERNX0VWRU5UX0VOQUJMRUQoZHAsIERNX0VWRU5UX0NSRUFURSkpIHsKLQkJZXJyb3IgPSBYRlNfU0VORF9OQU1FU1AobXAsIERNX0VWRU5UX0NSRUFURSwKLQkJCQlkcCwgRE1fUklHSFRfTlVMTCwgTlVMTCwKLQkJCQlETV9SSUdIVF9OVUxMLCBuYW1lLT5uYW1lLCBOVUxMLAotCQkJCW1vZGUsIDAsIDApOwotCi0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKLQl9Ci0KIAlpZiAoZHAtPmlfZC5kaV9mbGFncyAmIFhGU19ESUZMQUdfUFJPSklOSEVSSVQpCiAJCXByaWQgPSBkcC0+aV9kLmRpX3Byb2ppZDsKIAllbHNlCkBAIC0xNDI3LDggKzEzNzksNyBAQAogCSAqIHRoZSB0cmFuc2FjdGlvbiBjYW5jZWwgdW5sb2NraW5nIGRwIHNvIGRvbid0IGRvIGl0IGV4cGxpY2l0bHkgaW4gdGhlCiAJICogZXJyb3IgcGF0aC4KIAkgKi8KLQlJSE9MRChkcCk7Ci0JeGZzX3RyYW5zX2lqb2luKHRwLCBkcCwgWEZTX0lMT0NLX0VYQ0wpOworCXhmc190cmFuc19pam9pbl9yZWYodHAsIGRwLCBYRlNfSUxPQ0tfRVhDTCk7CiAJdW5sb2NrX2RwX29uX2Vycm9yID0gQl9GQUxTRTsKIAogCWVycm9yID0geGZzX2Rpcl9jcmVhdGVuYW1lKHRwLCBkcCwgbmFtZSwgaXAtPmlfaW5vLApAQCAtMTQ4NywxNiArMTQzOCw3IEBACiAJeGZzX3FtX2RxcmVsZShnZHFwKTsKIAogCSppcHAgPSBpcDsKLQotCS8qIEZhbGx0aHJvdWdoIHRvIHN0ZF9yZXR1cm4gd2l0aCBlcnJvciA9IDAgICovCi0gc3RkX3JldHVybjoKLQlpZiAoRE1fRVZFTlRfRU5BQkxFRChkcCwgRE1fRVZFTlRfUE9TVENSRUFURSkpIHsKLQkJWEZTX1NFTkRfTkFNRVNQKG1wLCBETV9FVkVOVF9QT1NUQ1JFQVRFLCBkcCwgRE1fUklHSFRfTlVMTCwKLQkJCQlpcCwgRE1fUklHSFRfTlVMTCwgbmFtZS0+bmFtZSwgTlVMTCwgbW9kZSwKLQkJCQllcnJvciwgMCk7Ci0JfQotCi0JcmV0dXJuIGVycm9yOworCXJldHVybiAwOwogCiAgb3V0X2JtYXBfY2FuY2VsOgogCXhmc19ibWFwX2NhbmNlbCgmZnJlZV9saXN0KTsKQEAgLTE1MTAsOCArMTQ1Miw4IEBACiAKIAlpZiAodW5sb2NrX2RwX29uX2Vycm9yKQogCQl4ZnNfaXVubG9jayhkcCwgWEZTX0lMT0NLX0VYQ0wpOwotCi0JZ290byBzdGRfcmV0dXJuOworIHN0ZF9yZXR1cm46CisJcmV0dXJuIGVycm9yOwogCiAgb3V0X2Fib3J0X3JlbGU6CiAJLyoKQEAgLTE3MjYsMjAgKzE2NjgsMTEgQEAKIAl1aW50CQkJcmVzYmxrczsKIAl1aW50CQkJbG9nX2NvdW50OwogCi0JeGZzX2l0cmFjZV9lbnRyeShkcCk7Ci0JeGZzX2l0cmFjZV9lbnRyeShpcCk7CisJdHJhY2VfeGZzX3JlbW92ZShkcCwgbmFtZSk7CiAKIAlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpCiAJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAotCWlmIChETV9FVkVOVF9FTkFCTEVEKGRwLCBETV9FVkVOVF9SRU1PVkUpKSB7Ci0JCWVycm9yID0gWEZTX1NFTkRfTkFNRVNQKG1wLCBETV9FVkVOVF9SRU1PVkUsIGRwLCBETV9SSUdIVF9OVUxMLAotCQkJCQlOVUxMLCBETV9SSUdIVF9OVUxMLCBuYW1lLT5uYW1lLCBOVUxMLAotCQkJCQlpcC0+aV9kLmRpX21vZGUsIDAsIDApOwotCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4gZXJyb3I7Ci0JfQotCiAJZXJyb3IgPSB4ZnNfcW1fZHFhdHRhY2goZHAsIDApOwogCWlmIChlcnJvcikKIAkJZ290byBzdGRfcmV0dXJuOwpAQCAtMTc4MiwxNSArMTcxNSw4IEBACiAKIAl4ZnNfbG9ja190d29faW5vZGVzKGRwLCBpcCwgWEZTX0lMT0NLX0VYQ0wpOwogCi0JLyoKLQkgKiBBdCB0aGlzIHBvaW50LCB3ZSd2ZSBnb3R0ZW4gYm90aCB0aGUgZGlyZWN0b3J5IGFuZCB0aGUgZW50cnkKLQkgKiBpbm9kZXMgbG9ja2VkLgotCSAqLwotCUlIT0xEKGlwKTsKLQl4ZnNfdHJhbnNfaWpvaW4odHAsIGRwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0KLQlJSE9MRChkcCk7Ci0JeGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgWEZTX0lMT0NLX0VYQ0wpOworCXhmc190cmFuc19pam9pbl9yZWYodHAsIGRwLCBYRlNfSUxPQ0tfRVhDTCk7CisJeGZzX3RyYW5zX2lqb2luX3JlZih0cCwgaXAsIFhGU19JTE9DS19FWENMKTsKIAogCS8qCiAJICogSWYgd2UncmUgcmVtb3ZpbmcgYSBkaXJlY3RvcnkgcGVyZm9ybSBzb21lIGFkZGl0aW9uYWwgdmFsaWRhdGlvbi4KQEAgLTE4NzcsMjEgKzE4MDMsMTUgQEAKIAlpZiAoIWlzX2RpciAmJiBsaW5rX3plcm8gJiYgeGZzX2lub2RlX2lzX2ZpbGVzdHJlYW0oaXApKQogCQl4ZnNfZmlsZXN0cmVhbV9kZWFzc29jaWF0ZShpcCk7CiAKLSBzdGRfcmV0dXJuOgotCWlmIChETV9FVkVOVF9FTkFCTEVEKGRwLCBETV9FVkVOVF9QT1NUUkVNT1ZFKSkgewotCQlYRlNfU0VORF9OQU1FU1AobXAsIERNX0VWRU5UX1BPU1RSRU1PVkUsIGRwLCBETV9SSUdIVF9OVUxMLAotCQkJCU5VTEwsIERNX1JJR0hUX05VTEwsIG5hbWUtPm5hbWUsIE5VTEwsCi0JCQkJaXAtPmlfZC5kaV9tb2RlLCBlcnJvciwgMCk7Ci0JfQotCi0JcmV0dXJuIGVycm9yOworCXJldHVybiAwOwogCiAgb3V0X2JtYXBfY2FuY2VsOgogCXhmc19ibWFwX2NhbmNlbCgmZnJlZV9saXN0KTsKIAljYW5jZWxfZmxhZ3MgfD0gWEZTX1RSQU5TX0FCT1JUOwogIG91dF90cmFuc19jYW5jZWw6CiAJeGZzX3RyYW5zX2NhbmNlbCh0cCwgY2FuY2VsX2ZsYWdzKTsKLQlnb3RvIHN0ZF9yZXR1cm47Cisgc3RkX3JldHVybjoKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIGludApAQCAtMTkwOSwyNSArMTgyOSwxMyBAQAogCWludAkJCWNvbW1pdHRlZDsKIAlpbnQJCQlyZXNibGtzOwogCi0JeGZzX2l0cmFjZV9lbnRyeSh0ZHApOwotCXhmc19pdHJhY2VfZW50cnkoc2lwKTsKKwl0cmFjZV94ZnNfbGluayh0ZHAsIHRhcmdldF9uYW1lKTsKIAogCUFTU0VSVCghU19JU0RJUihzaXAtPmlfZC5kaV9tb2RlKSk7CiAKIAlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpCiAJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAotCWlmIChETV9FVkVOVF9FTkFCTEVEKHRkcCwgRE1fRVZFTlRfTElOSykpIHsKLQkJZXJyb3IgPSBYRlNfU0VORF9OQU1FU1AobXAsIERNX0VWRU5UX0xJTkssCi0JCQkJCXRkcCwgRE1fUklHSFRfTlVMTCwKLQkJCQkJc2lwLCBETV9SSUdIVF9OVUxMLAotCQkJCQl0YXJnZXRfbmFtZS0+bmFtZSwgTlVMTCwgMCwgMCwgMCk7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKLQl9Ci0KLQkvKiBSZXR1cm4gdGhyb3VnaCBzdGRfcmV0dXJuIGFmdGVyIHRoaXMgcG9pbnQuICovCi0KIAllcnJvciA9IHhmc19xbV9kcWF0dGFjaChzaXAsIDApOwogCWlmIChlcnJvcikKIAkJZ290byBzdGRfcmV0dXJuOwpAQCAtMTk1MywxNSArMTg2MSw4IEBACiAKIAl4ZnNfbG9ja190d29faW5vZGVzKHNpcCwgdGRwLCBYRlNfSUxPQ0tfRVhDTCk7CiAKLQkvKgotCSAqIEluY3JlbWVudCB2bm9kZSByZWYgY291bnRzIHNpbmNlIHhmc190cmFuc19jb21taXQgJgotCSAqIHhmc190cmFuc19jYW5jZWwgd2lsbCBib3RoIHVubG9jayB0aGUgaW5vZGVzIGFuZAotCSAqIGRlY3JlbWVudCB0aGUgYXNzb2NpYXRlZCByZWYgY291bnRzLgotCSAqLwotCUlIT0xEKHNpcCk7Ci0JSUhPTEQodGRwKTsKLQl4ZnNfdHJhbnNfaWpvaW4odHAsIHNpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCXhmc190cmFuc19pam9pbih0cCwgdGRwLCBYRlNfSUxPQ0tfRVhDTCk7CisJeGZzX3RyYW5zX2lqb2luX3JlZih0cCwgc2lwLCBYRlNfSUxPQ0tfRVhDTCk7CisJeGZzX3RyYW5zX2lqb2luX3JlZih0cCwgdGRwLCBYRlNfSUxPQ0tfRVhDTCk7CiAKIAkvKgogCSAqIElmIHRoZSBzb3VyY2UgaGFzIHRvbyBtYW55IGxpbmtzLCB3ZSBjYW4ndCBtYWtlIGFueSBtb3JlIHRvIGl0LgpAQCAtMjAxNCwyNyArMTkxNSwxNCBAQAogCQlnb3RvIGFib3J0X3JldHVybjsKIAl9CiAKLQllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMpOwotCWlmIChlcnJvcikKLQkJZ290byBzdGRfcmV0dXJuOwotCi0JLyogRmFsbCB0aHJvdWdoIHRvIHN0ZF9yZXR1cm4gd2l0aCBlcnJvciA9IDAuICovCi1zdGRfcmV0dXJuOgotCWlmIChETV9FVkVOVF9FTkFCTEVEKHNpcCwgRE1fRVZFTlRfUE9TVExJTkspKSB7Ci0JCSh2b2lkKSBYRlNfU0VORF9OQU1FU1AobXAsIERNX0VWRU5UX1BPU1RMSU5LLAotCQkJCXRkcCwgRE1fUklHSFRfTlVMTCwKLQkJCQlzaXAsIERNX1JJR0hUX05VTEwsCi0JCQkJdGFyZ2V0X25hbWUtPm5hbWUsIE5VTEwsIDAsIGVycm9yLCAwKTsKLQl9Ci0JcmV0dXJuIGVycm9yOworCXJldHVybiB4ZnNfdHJhbnNfY29tbWl0KHRwLCBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTKTsKIAogIGFib3J0X3JldHVybjoKIAljYW5jZWxfZmxhZ3MgfD0gWEZTX1RSQU5TX0FCT1JUOwotCS8qIEZBTExUSFJPVUdIICovCi0KICBlcnJvcl9yZXR1cm46CiAJeGZzX3RyYW5zX2NhbmNlbCh0cCwgY2FuY2VsX2ZsYWdzKTsKLQlnb3RvIHN0ZF9yZXR1cm47Cisgc3RkX3JldHVybjoKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIGludApAQCAtMjA3NCw3ICsxOTYyLDcgQEAKIAlpcCA9IE5VTEw7CiAJdHAgPSBOVUxMOwogCi0JeGZzX2l0cmFjZV9lbnRyeShkcCk7CisJdHJhY2VfeGZzX3N5bWxpbmsoZHAsIGxpbmtfbmFtZSk7CiAKIAlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpCiAJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKQEAgLTIwODYsMTcgKzE5NzQsNiBAQAogCWlmIChwYXRobGVuID49IE1BWFBBVEhMRU4pICAgICAgLyogdG90YWwgc3RyaW5nIHRvbyBsb25nICovCiAJCXJldHVybiBYRlNfRVJST1IoRU5BTUVUT09MT05HKTsKIAotCWlmIChETV9FVkVOVF9FTkFCTEVEKGRwLCBETV9FVkVOVF9TWU1MSU5LKSkgewotCQllcnJvciA9IFhGU19TRU5EX05BTUVTUChtcCwgRE1fRVZFTlRfU1lNTElOSywgZHAsCi0JCQkJCURNX1JJR0hUX05VTEwsIE5VTEwsIERNX1JJR0hUX05VTEwsCi0JCQkJCWxpbmtfbmFtZS0+bmFtZSwKLQkJCQkJKHVuc2lnbmVkIGNoYXIgKil0YXJnZXRfcGF0aCwgMCwgMCwgMCk7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKLQl9Ci0KLQkvKiBSZXR1cm4gdGhyb3VnaCBzdGRfcmV0dXJuIGFmdGVyIHRoaXMgcG9pbnQuICovCi0KIAl1ZHFwID0gZ2RxcCA9IE5VTEw7CiAJaWYgKGRwLT5pX2QuZGlfZmxhZ3MgJiBYRlNfRElGTEFHX1BST0pJTkhFUklUKQogCQlwcmlkID0gZHAtPmlfZC5kaV9wcm9qaWQ7CkBAIC0yMTgwLDggKzIwNTcsNyBAQAogCSAqIHRyYW5zYWN0aW9uIGNhbmNlbCB1bmxvY2tpbmcgZHAgc28gZG9uJ3QgZG8gaXQgZXhwbGljaXRseSBpbiB0aGUKIAkgKiBlcnJvciBwYXRoLgogCSAqLwotCUlIT0xEKGRwKTsKLQl4ZnNfdHJhbnNfaWpvaW4odHAsIGRwLCBYRlNfSUxPQ0tfRVhDTCk7CisJeGZzX3RyYW5zX2lqb2luX3JlZih0cCwgZHAsIFhGU19JTE9DS19FWENMKTsKIAl1bmxvY2tfZHBfb25fZXJyb3IgPSBCX0ZBTFNFOwogCiAJLyoKQEAgLTIyMTUsNyArMjA5MSw3IEBACiAJCWVycm9yID0geGZzX2JtYXBpKHRwLCBpcCwgZmlyc3RfZnNiLCBmc19ibG9ja3MsCiAJCQkJICBYRlNfQk1BUElfV1JJVEUgfCBYRlNfQk1BUElfTUVUQURBVEEsCiAJCQkJICAmZmlyc3RfYmxvY2ssIHJlc2Jsa3MsIG12YWwsICZubWFwcywKLQkJCQkgICZmcmVlX2xpc3QsIE5VTEwpOworCQkJCSAgJmZyZWVfbGlzdCk7CiAJCWlmIChlcnJvcikgewogCQkJZ290byBlcnJvcjE7CiAJCX0KQEAgLTIyNzgsMjEgKzIxNTQsOCBAQAogCXhmc19xbV9kcXJlbGUodWRxcCk7CiAJeGZzX3FtX2RxcmVsZShnZHFwKTsKIAotCS8qIEZhbGwgdGhyb3VnaCB0byBzdGRfcmV0dXJuIHdpdGggZXJyb3IgPSAwIG9yIGVycm5vIGZyb20KLQkgKiB4ZnNfdHJhbnNfY29tbWl0CSovCi1zdGRfcmV0dXJuOgotCWlmIChETV9FVkVOVF9FTkFCTEVEKGRwLCBETV9FVkVOVF9QT1NUU1lNTElOSykpIHsKLQkJKHZvaWQpIFhGU19TRU5EX05BTUVTUChtcCwgRE1fRVZFTlRfUE9TVFNZTUxJTkssCi0JCQkJCWRwLCBETV9SSUdIVF9OVUxMLAotCQkJCQllcnJvciA/IE5VTEwgOiBpcCwKLQkJCQkJRE1fUklHSFRfTlVMTCwgbGlua19uYW1lLT5uYW1lLAotCQkJCQkodW5zaWduZWQgY2hhciAqKXRhcmdldF9wYXRoLAotCQkJCQkwLCBlcnJvciwgMCk7Ci0JfQotCi0JaWYgKCFlcnJvcikKLQkJKmlwcCA9IGlwOwotCXJldHVybiBlcnJvcjsKKwkqaXBwID0gaXA7CisJcmV0dXJuIDA7CiAKICBlcnJvcjI6CiAJSVJFTEUoaXApOwpAQCAtMjMwNiw4ICsyMTY5LDggQEAKIAogCWlmICh1bmxvY2tfZHBfb25fZXJyb3IpCiAJCXhmc19pdW5sb2NrKGRwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0KLQlnb3RvIHN0ZF9yZXR1cm47Cisgc3RkX3JldHVybjoKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIGludApAQCAtMjMzMywxMyArMjE5NiwxMiBAQAogCQlyZXR1cm4gZXJyb3I7CiAJfQogCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCXhmc190cmFuc19pam9pbih0cCwgaXAsIFhGU19JTE9DS19FWENMKTsKKwl4ZnNfdHJhbnNfaWpvaW5fcmVmKHRwLCBpcCwgWEZTX0lMT0NLX0VYQ0wpOwogCiAJaXAtPmlfZC5kaV9kbWV2bWFzayA9IGV2bWFzazsKIAlpcC0+aV9kLmRpX2Rtc3RhdGUgID0gc3RhdGU7CiAKIAl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7Ci0JSUhPTEQoaXApOwogCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7CiAKIAlyZXR1cm4gZXJyb3I7CkBAIC0yMzkwLDcgKzIyNTIsNyBAQAogCWludAkJCWNvbW1pdHRlZDsKIAlpbnQJCQllcnJvcjsKIAotCXhmc19pdHJhY2VfZW50cnkoaXApOworCXRyYWNlX3hmc19hbGxvY19maWxlX3NwYWNlKGlwKTsKIAogCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkKIAkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwpAQCAtMjQxMiwyNSArMjI3NCw5IEBACiAJc3RhcnRvZmZzZXRfZnNiCT0gWEZTX0JfVE9fRlNCVChtcCwgb2Zmc2V0KTsKIAlhbGxvY2F0ZXNpemVfZnNiID0gWEZTX0JfVE9fRlNCKG1wLCBjb3VudCk7CiAKLQkvKglHZW5lcmF0ZSBhIERNQVBJIGV2ZW50IGlmIG5lZWRlZC4JKi8KLQlpZiAoYWxsb2NfdHlwZSAhPSAwICYmIG9mZnNldCA8IGlwLT5pX3NpemUgJiYKLQkJCShhdHRyX2ZsYWdzICYgWEZTX0FUVFJfRE1JKSA9PSAwICAmJgotCQkJRE1fRVZFTlRfRU5BQkxFRChpcCwgRE1fRVZFTlRfV1JJVEUpKSB7Ci0JCXhmc19vZmZfdCAgICAgICAgICAgZW5kX2RtaV9vZmZzZXQ7Ci0KLQkJZW5kX2RtaV9vZmZzZXQgPSBvZmZzZXQrbGVuOwotCQlpZiAoZW5kX2RtaV9vZmZzZXQgPiBpcC0+aV9zaXplKQotCQkJZW5kX2RtaV9vZmZzZXQgPSBpcC0+aV9zaXplOwotCQllcnJvciA9IFhGU19TRU5EX0RBVEEobXAsIERNX0VWRU5UX1dSSVRFLCBpcCwgb2Zmc2V0LAotCQkJCSAgICAgIGVuZF9kbWlfb2Zmc2V0IC0gb2Zmc2V0LCAwLCBOVUxMKTsKLQkJaWYgKGVycm9yKQotCQkJcmV0dXJuIGVycm9yOwotCX0KLQogCS8qCiAJICogQWxsb2NhdGUgZmlsZSBzcGFjZSB1bnRpbCBkb25lIG9yIHVudGlsIHRoZXJlIGlzIGFuIGVycm9yCiAJICovCi1yZXRyeToKIAl3aGlsZSAoYWxsb2NhdGVzaXplX2ZzYiAmJiAhZXJyb3IpIHsKIAkJeGZzX2ZpbGVvZmZfdAlzLCBlOwogCkBAIC0yNDg4LDggKzIzMzQsNyBAQAogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIGVycm9yMTsKIAotCQl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JCXhmc190cmFuc19paG9sZCh0cCwgaXApOworCQl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwKTsKIAogCQkvKgogCQkgKiBJc3N1ZSB0aGUgeGZzX2JtYXBpKCkgY2FsbCB0byBhbGxvY2F0ZSB0aGUgYmxvY2tzCkBAIC0yNDk4LDcgKzIzNDMsNyBAQAogCQllcnJvciA9IHhmc19ibWFwaSh0cCwgaXAsIHN0YXJ0b2Zmc2V0X2ZzYiwKIAkJCQkgIGFsbG9jYXRlc2l6ZV9mc2IsIGJtYXBpX2ZsYWcsCiAJCQkJICAmZmlyc3Rmc2IsIDAsIGltYXBwLCAmbmltYXBzLAotCQkJCSAgJmZyZWVfbGlzdCwgTlVMTCk7CisJCQkJICAmZnJlZV9saXN0KTsKIAkJaWYgKGVycm9yKSB7CiAJCQlnb3RvIGVycm9yMDsKIAkJfQpAQCAtMjUyNywxNyArMjM3Miw2IEBACiAJCXN0YXJ0b2Zmc2V0X2ZzYiArPSBhbGxvY2F0ZWRfZnNiOwogCQlhbGxvY2F0ZXNpemVfZnNiIC09IGFsbG9jYXRlZF9mc2I7CiAJfQotZG1hcGlfZW5vc3BjX2NoZWNrOgotCWlmIChlcnJvciA9PSBFTk9TUEMgJiYgKGF0dHJfZmxhZ3MgJiBYRlNfQVRUUl9ETUkpID09IDAgJiYKLQkgICAgRE1fRVZFTlRfRU5BQkxFRChpcCwgRE1fRVZFTlRfTk9TUEFDRSkpIHsKLQkJZXJyb3IgPSBYRlNfU0VORF9OQU1FU1AobXAsIERNX0VWRU5UX05PU1BBQ0UsCi0JCQkJaXAsIERNX1JJR0hUX05VTEwsCi0JCQkJaXAsIERNX1JJR0hUX05VTEwsCi0JCQkJTlVMTCwgTlVMTCwgMCwgMCwgMCk7IC8qIERlbGF5IGZsYWcgaW50ZW50aW9uYWxseSB1bnVzZWQgKi8KLQkJaWYgKGVycm9yID09IDApCi0JCQlnb3RvIHJldHJ5OwkvKiBNYXliZSBETUFQSSBhcHAuIGhhcyBtYWRlIHNwYWNlICovCi0JCS8qIGVsc2UgZmFsbCB0aHJvdWdoIHdpdGggZXJyb3IgZnJvbSBYRlNfU0VORF9EQVRBICovCi0JfQogCiAJcmV0dXJuIGVycm9yOwogCkBAIC0yNTQ4LDcgKzIzODIsNyBAQAogZXJyb3IxOgkvKiBKdXN0IGNhbmNlbCB0cmFuc2FjdGlvbiAqLwogCXhmc190cmFuc19jYW5jZWwodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMgfCBYRlNfVFJBTlNfQUJPUlQpOwogCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JZ290byBkbWFwaV9lbm9zcGNfY2hlY2s7CisJcmV0dXJuIGVycm9yOwogfQogCiAvKgpAQCAtMjU5OCw3ICsyNDMyLDcgQEAKIAkJb2Zmc2V0X2ZzYiA9IFhGU19CX1RPX0ZTQlQobXAsIG9mZnNldCk7CiAJCW5pbWFwID0gMTsKIAkJZXJyb3IgPSB4ZnNfYm1hcGkoTlVMTCwgaXAsIG9mZnNldF9mc2IsIDEsIDAsCi0JCQlOVUxMLCAwLCAmaW1hcCwgJm5pbWFwLCBOVUxMLCBOVUxMKTsKKwkJCU5VTEwsIDAsICZpbWFwLCAmbmltYXAsIE5VTEwpOwogCQlpZiAoZXJyb3IgfHwgbmltYXAgPCAxKQogCQkJYnJlYWs7CiAJCUFTU0VSVChpbWFwLmJyX2Jsb2NrY291bnQgPj0gMSk7CkBAIC0yNjYxLDcgKzI0OTUsNiBAQAogewogCWludAkJCWNvbW1pdHRlZDsKIAlpbnQJCQlkb25lOwotCXhmc19vZmZfdAkJZW5kX2RtaV9vZmZzZXQ7CiAJeGZzX2ZpbGVvZmZfdAkJZW5kb2Zmc2V0X2ZzYjsKIAlpbnQJCQllcnJvcjsKIAl4ZnNfZnNibG9ja190CQlmaXJzdGZzYjsKQEAgLTI2ODAsNyArMjUxMyw3IEBACiAKIAltcCA9IGlwLT5pX21vdW50OwogCi0JeGZzX2l0cmFjZV9lbnRyeShpcCk7CisJdHJhY2VfeGZzX2ZyZWVfZmlsZV9zcGFjZShpcCk7CiAKIAllcnJvciA9IHhmc19xbV9kcWF0dGFjaChpcCwgMCk7CiAJaWYgKGVycm9yKQpAQCAtMjY5MSwxOSArMjUyNCw3IEBACiAJCXJldHVybiBlcnJvcjsKIAlydCA9IFhGU19JU19SRUFMVElNRV9JTk9ERShpcCk7CiAJc3RhcnRvZmZzZXRfZnNiCT0gWEZTX0JfVE9fRlNCKG1wLCBvZmZzZXQpOwotCWVuZF9kbWlfb2Zmc2V0ID0gb2Zmc2V0ICsgbGVuOwotCWVuZG9mZnNldF9mc2IgPSBYRlNfQl9UT19GU0JUKG1wLCBlbmRfZG1pX29mZnNldCk7Ci0KLQlpZiAob2Zmc2V0IDwgaXAtPmlfc2l6ZSAmJiAoYXR0cl9mbGFncyAmIFhGU19BVFRSX0RNSSkgPT0gMCAmJgotCSAgICBETV9FVkVOVF9FTkFCTEVEKGlwLCBETV9FVkVOVF9XUklURSkpIHsKLQkJaWYgKGVuZF9kbWlfb2Zmc2V0ID4gaXAtPmlfc2l6ZSkKLQkJCWVuZF9kbWlfb2Zmc2V0ID0gaXAtPmlfc2l6ZTsKLQkJZXJyb3IgPSBYRlNfU0VORF9EQVRBKG1wLCBETV9FVkVOVF9XUklURSwgaXAsCi0JCQkJb2Zmc2V0LCBlbmRfZG1pX29mZnNldCAtIG9mZnNldCwKLQkJCQlBVF9ERUxBWV9GTEFHKGF0dHJfZmxhZ3MpLCBOVUxMKTsKLQkJaWYgKGVycm9yKQotCQkJcmV0dXJuIGVycm9yOwotCX0KKwllbmRvZmZzZXRfZnNiID0gWEZTX0JfVE9fRlNCVChtcCwgb2Zmc2V0ICsgbGVuKTsKIAogCWlmIChhdHRyX2ZsYWdzICYgWEZTX0FUVFJfTk9MT0NLKQogCQluZWVkX2lvbG9jayA9IDA7CkBAIC0yNzMxLDcgKzI1NTIsNyBAQAogCWlmIChydCAmJiAheGZzX3NiX3ZlcnNpb25faGFzZXh0ZmxnYml0KCZtcC0+bV9zYikpIHsKIAkJbmltYXAgPSAxOwogCQllcnJvciA9IHhmc19ibWFwaShOVUxMLCBpcCwgc3RhcnRvZmZzZXRfZnNiLAotCQkJMSwgMCwgTlVMTCwgMCwgJmltYXAsICZuaW1hcCwgTlVMTCwgTlVMTCk7CisJCQkxLCAwLCBOVUxMLCAwLCAmaW1hcCwgJm5pbWFwLCBOVUxMKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBvdXRfdW5sb2NrX2lvbG9jazsKIAkJQVNTRVJUKG5pbWFwID09IDAgfHwgbmltYXAgPT0gMSk7CkBAIC0yNzQ2LDcgKzI1NjcsNyBAQAogCQl9CiAJCW5pbWFwID0gMTsKIAkJZXJyb3IgPSB4ZnNfYm1hcGkoTlVMTCwgaXAsIGVuZG9mZnNldF9mc2IgLSAxLAotCQkJMSwgMCwgTlVMTCwgMCwgJmltYXAsICZuaW1hcCwgTlVMTCwgTlVMTCk7CisJCQkxLCAwLCBOVUxMLCAwLCAmaW1hcCwgJm5pbWFwLCBOVUxMKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBvdXRfdW5sb2NrX2lvbG9jazsKIAkJQVNTRVJUKG5pbWFwID09IDAgfHwgbmltYXAgPT0gMSk7CkBAIC0yODE0LDggKzI2MzUsNyBAQAogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIGVycm9yMTsKIAotCQl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JCXhmc190cmFuc19paG9sZCh0cCwgaXApOworCQl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwKTsKIAogCQkvKgogCQkgKiBpc3N1ZSB0aGUgYnVubWFwaSgpIGNhbGwgdG8gZnJlZSB0aGUgYmxvY2tzCkBAIC0yODIzLDcgKzI2NDMsNyBAQAogCQl4ZnNfYm1hcF9pbml0KCZmcmVlX2xpc3QsICZmaXJzdGZzYik7CiAJCWVycm9yID0geGZzX2J1bm1hcGkodHAsIGlwLCBzdGFydG9mZnNldF9mc2IsCiAJCQkJICBlbmRvZmZzZXRfZnNiIC0gc3RhcnRvZmZzZXRfZnNiLAotCQkJCSAgMCwgMiwgJmZpcnN0ZnNiLCAmZnJlZV9saXN0LCBOVUxMLCAmZG9uZSk7CisJCQkJICAwLCAyLCAmZmlyc3Rmc2IsICZmcmVlX2xpc3QsICZkb25lKTsKIAkJaWYgKGVycm9yKSB7CiAJCQlnb3RvIGVycm9yMDsKIAkJfQpAQCAtMjg4Myw4ICsyNzAzLDYgQEAKIAl4ZnNfdHJhbnNfdAkqdHA7CiAJc3RydWN0IGlhdHRyCWlhdHRyOwogCi0JeGZzX2l0cmFjZV9lbnRyeShpcCk7Ci0KIAlpZiAoIVNfSVNSRUcoaXAtPmlfZC5kaV9tb2RlKSkKIAkJcmV0dXJuIFhGU19FUlJPUihFSU5WQUwpOwogCkBAIC0yOTg1LDggKzI4MDMsNyBAQAogCiAJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiAKLQl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JeGZzX3RyYW5zX2lob2xkKHRwLCBpcCk7CisJeGZzX3RyYW5zX2lqb2luKHRwLCBpcCk7CiAKIAlpZiAoKGF0dHJfZmxhZ3MgJiBYRlNfQVRUUl9ETUkpID09IDApIHsKIAkJaXAtPmlfZC5kaV9tb2RlICY9IH5TX0lTVUlEOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oCmluZGV4IGRhNTY1YTQuLmE2OGNhOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmgKQEAgLTQ4LDcgKzQ4LDcgQEAKIAl1OCBzcGFjZV9pZDsKIAl1OCBiaXRfd2lkdGg7CiAJdTggYml0X29mZnNldDsKLQl1OCByZXNlcnZlZDsKKwl1OCBhY2Nlc3Nfc2l6ZTsKIAl1NjQgYWRkcmVzczsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCkBAIC02Myw2ICs2Myw3IEBACiAJdTMyIHBvd2VyOwogCXUzMiB1c2FnZTsKIAl1NjQgdGltZTsKKwl1OCBibV9zdHNfc2tpcDsKIAljaGFyIGRlc2NbQUNQSV9DWF9ERVNDX0xFTl07CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2dwaW8uaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCmluZGV4IDRmM2Q3NWUuLmM3Mzc2YmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCkBAIC0zMSw2ICszMSw3IEBACiBzdHJ1Y3QgZGV2aWNlOwogc3RydWN0IHNlcV9maWxlOwogc3RydWN0IG1vZHVsZTsKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKIAogLyoqCiAgKiBzdHJ1Y3QgZ3Bpb19jaGlwIC0gYWJzdHJhY3QgYSBHUElPIGNvbnRyb2xsZXIKQEAgLTEwNiw2ICsxMDcsMTcgQEAKIAljb25zdCBjaGFyCQkqY29uc3QgKm5hbWVzOwogCXVuc2lnbmVkCQljYW5fc2xlZXA6MTsKIAl1bnNpZ25lZAkJZXhwb3J0ZWQ6MTsKKworI2lmIGRlZmluZWQoQ09ORklHX09GX0dQSU8pCisJLyoKKwkgKiBJZiBDT05GSUdfT0YgaXMgZW5hYmxlZCwgdGhlbiBhbGwgR1BJTyBjb250cm9sbGVycyBkZXNjcmliZWQgaW4gdGhlCisJICogZGV2aWNlIHRyZWUgYXV0b21hdGljYWxseSBtYXkgaGF2ZSBhbiBPRiB0cmFuc2xhdGlvbgorCSAqLworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZTsKKwlpbnQgb2ZfZ3Bpb19uX2NlbGxzOworCWludCAoKm9mX3hsYXRlKShzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJICAgICAgICBjb25zdCB2b2lkICpncGlvX3NwZWMsIHUzMiAqZmxhZ3MpOworI2VuZGlmCiB9OwogCiBleHRlcm4gY29uc3QgY2hhciAqZ3Bpb2NoaXBfaXNfcmVxdWVzdGVkKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCkBAIC0xMTUsNiArMTI3LDkgQEAKIC8qIGFkZC9yZW1vdmUgY2hpcHMgKi8KIGV4dGVybiBpbnQgZ3Bpb2NoaXBfYWRkKHN0cnVjdCBncGlvX2NoaXAgKmNoaXApOwogZXh0ZXJuIGludCBfX211c3RfY2hlY2sgZ3Bpb2NoaXBfcmVtb3ZlKHN0cnVjdCBncGlvX2NoaXAgKmNoaXApOworZXh0ZXJuIHN0cnVjdCBncGlvX2NoaXAgKmdwaW9jaGlwX2ZpbmQodm9pZCAqZGF0YSwKKwkJCQkJaW50ICgqbWF0Y2gpKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJCQkgICAgIHZvaWQgKmRhdGEpKTsKIAogCiAvKiBBbHdheXMgdXNlIHRoZSBsaWJyYXJ5IGNvZGUgZm9yIEdQSU8gbWFuYWdlbWVudCBjYWxscywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbG9jYWw2NC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9sb2NhbDY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJhYzc2MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbG9jYWw2NC5oCkBAIC0wLDAgKzEsOTYgQEAKKyNpZm5kZWYgX0FTTV9HRU5FUklDX0xPQ0FMNjRfSAorI2RlZmluZSBfQVNNX0dFTkVSSUNfTE9DQUw2NF9ICisKKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworLyoKKyAqIEEgc2lnbmVkIGxvbmcgdHlwZSBmb3Igb3BlcmF0aW9ucyB3aGljaCBhcmUgYXRvbWljIGZvciBhIHNpbmdsZSBDUFUuCisgKiBVc3VhbGx5IHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBwZXItY3B1IHZhcmlhYmxlcy4KKyAqCisgKiBUaGlzIGlzIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLCB3aGljaCB1c2VzIGF0b21pYzY0X3QuICBXaGljaCBpcworICogcmF0aGVyIHBvaW50bGVzcy4gIFRoZSB3aG9sZSBwb2ludCBiZWhpbmQgbG9jYWw2NF90IGlzIHRoYXQgc29tZSBwcm9jZXNzb3JzCisgKiBjYW4gcGVyZm9ybSBhdG9taWMgYWRkcyBhbmQgc3VidHJhY3RzIGluIGEgbWFubmVyIHdoaWNoIGlzIGF0b21pYyB3cnQgSVJRcworICogcnVubmluZyBvbiB0aGlzIENQVS4gIGxvY2FsNjRfdCBhbGxvd3MgZXhwbG9pdGF0aW9uIG9mIHN1Y2ggY2FwYWJpbGl0aWVzLgorICovCisKKy8qIEltcGxlbWVudCBpbiB0ZXJtcyBvZiBhdG9taWNzLiAqLworCisjaWYgQklUU19QRVJfTE9ORyA9PSA2NAorCisjaW5jbHVkZSA8YXNtL2xvY2FsLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKwlsb2NhbF90IGE7Cit9IGxvY2FsNjRfdDsKKworI2RlZmluZSBMT0NBTDY0X0lOSVQoaSkJeyBMT0NBTF9JTklUKGkpIH0KKworI2RlZmluZSBsb2NhbDY0X3JlYWQobCkJCWxvY2FsX3JlYWQoJihsKS0+YSkKKyNkZWZpbmUgbG9jYWw2NF9zZXQobCxpKQlsb2NhbF9zZXQoKCYobCktPmEpLChpKSkKKyNkZWZpbmUgbG9jYWw2NF9pbmMobCkJCWxvY2FsX2luYygmKGwpLT5hKQorI2RlZmluZSBsb2NhbDY0X2RlYyhsKQkJbG9jYWxfZGVjKCYobCktPmEpCisjZGVmaW5lIGxvY2FsNjRfYWRkKGksbCkJbG9jYWxfYWRkKChpKSwoJihsKS0+YSkpCisjZGVmaW5lIGxvY2FsNjRfc3ViKGksbCkJbG9jYWxfc3ViKChpKSwoJihsKS0+YSkpCisKKyNkZWZpbmUgbG9jYWw2NF9zdWJfYW5kX3Rlc3QoaSwgbCkgbG9jYWxfc3ViX2FuZF90ZXN0KChpKSwgKCYobCktPmEpKQorI2RlZmluZSBsb2NhbDY0X2RlY19hbmRfdGVzdChsKSBsb2NhbF9kZWNfYW5kX3Rlc3QoJihsKS0+YSkKKyNkZWZpbmUgbG9jYWw2NF9pbmNfYW5kX3Rlc3QobCkgbG9jYWxfaW5jX2FuZF90ZXN0KCYobCktPmEpCisjZGVmaW5lIGxvY2FsNjRfYWRkX25lZ2F0aXZlKGksIGwpIGxvY2FsX2FkZF9uZWdhdGl2ZSgoaSksICgmKGwpLT5hKSkKKyNkZWZpbmUgbG9jYWw2NF9hZGRfcmV0dXJuKGksIGwpIGxvY2FsX2FkZF9yZXR1cm4oKGkpLCAoJihsKS0+YSkpCisjZGVmaW5lIGxvY2FsNjRfc3ViX3JldHVybihpLCBsKSBsb2NhbF9zdWJfcmV0dXJuKChpKSwgKCYobCktPmEpKQorI2RlZmluZSBsb2NhbDY0X2luY19yZXR1cm4obCkJbG9jYWxfaW5jX3JldHVybigmKGwpLT5hKQorCisjZGVmaW5lIGxvY2FsNjRfY21weGNoZyhsLCBvLCBuKSBsb2NhbF9jbXB4Y2hnKCgmKGwpLT5hKSwgKG8pLCAobikpCisjZGVmaW5lIGxvY2FsNjRfeGNoZyhsLCBuKQlsb2NhbF94Y2hnKCgmKGwpLT5hKSwgKG4pKQorI2RlZmluZSBsb2NhbDY0X2FkZF91bmxlc3MobCwgX2EsIHUpIGxvY2FsX2FkZF91bmxlc3MoKCYobCktPmEpLCAoX2EpLCAodSkpCisjZGVmaW5lIGxvY2FsNjRfaW5jX25vdF96ZXJvKGwpCWxvY2FsX2luY19ub3RfemVybygmKGwpLT5hKQorCisvKiBOb24tYXRvbWljIHZhcmlhbnRzLCBpZS4gcHJlZW1wdGlvbiBkaXNhYmxlZCBhbmQgd29uJ3QgYmUgdG91Y2hlZAorICogaW4gaW50ZXJydXB0LCBldGMuICBTb21lIGFyY2hzIGNhbiBvcHRpbWl6ZSB0aGlzIGNhc2Ugd2VsbC4gKi8KKyNkZWZpbmUgX19sb2NhbDY0X2luYyhsKQlsb2NhbDY0X3NldCgobCksIGxvY2FsNjRfcmVhZChsKSArIDEpCisjZGVmaW5lIF9fbG9jYWw2NF9kZWMobCkJbG9jYWw2NF9zZXQoKGwpLCBsb2NhbDY0X3JlYWQobCkgLSAxKQorI2RlZmluZSBfX2xvY2FsNjRfYWRkKGksbCkJbG9jYWw2NF9zZXQoKGwpLCBsb2NhbDY0X3JlYWQobCkgKyAoaSkpCisjZGVmaW5lIF9fbG9jYWw2NF9zdWIoaSxsKQlsb2NhbDY0X3NldCgobCksIGxvY2FsNjRfcmVhZChsKSAtIChpKSkKKworI2Vsc2UgLyogQklUU19QRVJfTE9ORyAhPSA2NCAqLworCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCisvKiBEb24ndCB1c2UgdHlwZWRlZjogZG9uJ3Qgd2FudCB0aGVtIHRvIGJlIG1peGVkIHdpdGggYXRvbWljX3Qncy4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlhdG9taWM2NF90IGE7Cit9IGxvY2FsNjRfdDsKKworI2RlZmluZSBMT0NBTDY0X0lOSVQoaSkJeyBBVE9NSUNfTE9OR19JTklUKGkpIH0KKworI2RlZmluZSBsb2NhbDY0X3JlYWQobCkJCWF0b21pYzY0X3JlYWQoJihsKS0+YSkKKyNkZWZpbmUgbG9jYWw2NF9zZXQobCxpKQlhdG9taWM2NF9zZXQoKCYobCktPmEpLChpKSkKKyNkZWZpbmUgbG9jYWw2NF9pbmMobCkJCWF0b21pYzY0X2luYygmKGwpLT5hKQorI2RlZmluZSBsb2NhbDY0X2RlYyhsKQkJYXRvbWljNjRfZGVjKCYobCktPmEpCisjZGVmaW5lIGxvY2FsNjRfYWRkKGksbCkJYXRvbWljNjRfYWRkKChpKSwoJihsKS0+YSkpCisjZGVmaW5lIGxvY2FsNjRfc3ViKGksbCkJYXRvbWljNjRfc3ViKChpKSwoJihsKS0+YSkpCisKKyNkZWZpbmUgbG9jYWw2NF9zdWJfYW5kX3Rlc3QoaSwgbCkgYXRvbWljNjRfc3ViX2FuZF90ZXN0KChpKSwgKCYobCktPmEpKQorI2RlZmluZSBsb2NhbDY0X2RlY19hbmRfdGVzdChsKSBhdG9taWM2NF9kZWNfYW5kX3Rlc3QoJihsKS0+YSkKKyNkZWZpbmUgbG9jYWw2NF9pbmNfYW5kX3Rlc3QobCkgYXRvbWljNjRfaW5jX2FuZF90ZXN0KCYobCktPmEpCisjZGVmaW5lIGxvY2FsNjRfYWRkX25lZ2F0aXZlKGksIGwpIGF0b21pYzY0X2FkZF9uZWdhdGl2ZSgoaSksICgmKGwpLT5hKSkKKyNkZWZpbmUgbG9jYWw2NF9hZGRfcmV0dXJuKGksIGwpIGF0b21pYzY0X2FkZF9yZXR1cm4oKGkpLCAoJihsKS0+YSkpCisjZGVmaW5lIGxvY2FsNjRfc3ViX3JldHVybihpLCBsKSBhdG9taWM2NF9zdWJfcmV0dXJuKChpKSwgKCYobCktPmEpKQorI2RlZmluZSBsb2NhbDY0X2luY19yZXR1cm4obCkJYXRvbWljNjRfaW5jX3JldHVybigmKGwpLT5hKQorCisjZGVmaW5lIGxvY2FsNjRfY21weGNoZyhsLCBvLCBuKSBhdG9taWM2NF9jbXB4Y2hnKCgmKGwpLT5hKSwgKG8pLCAobikpCisjZGVmaW5lIGxvY2FsNjRfeGNoZyhsLCBuKQlhdG9taWM2NF94Y2hnKCgmKGwpLT5hKSwgKG4pKQorI2RlZmluZSBsb2NhbDY0X2FkZF91bmxlc3MobCwgX2EsIHUpIGF0b21pYzY0X2FkZF91bmxlc3MoKCYobCktPmEpLCAoX2EpLCAodSkpCisjZGVmaW5lIGxvY2FsNjRfaW5jX25vdF96ZXJvKGwpCWF0b21pYzY0X2luY19ub3RfemVybygmKGwpLT5hKQorCisvKiBOb24tYXRvbWljIHZhcmlhbnRzLCBpZS4gcHJlZW1wdGlvbiBkaXNhYmxlZCBhbmQgd29uJ3QgYmUgdG91Y2hlZAorICogaW4gaW50ZXJydXB0LCBldGMuICBTb21lIGFyY2hzIGNhbiBvcHRpbWl6ZSB0aGlzIGNhc2Ugd2VsbC4gKi8KKyNkZWZpbmUgX19sb2NhbDY0X2luYyhsKQlsb2NhbDY0X3NldCgobCksIGxvY2FsNjRfcmVhZChsKSArIDEpCisjZGVmaW5lIF9fbG9jYWw2NF9kZWMobCkJbG9jYWw2NF9zZXQoKGwpLCBsb2NhbDY0X3JlYWQobCkgLSAxKQorI2RlZmluZSBfX2xvY2FsNjRfYWRkKGksbCkJbG9jYWw2NF9zZXQoKGwpLCBsb2NhbDY0X3JlYWQobCkgKyAoaSkpCisjZGVmaW5lIF9fbG9jYWw2NF9zdWIoaSxsKQlsb2NhbDY0X3NldCgobCksIGxvY2FsNjRfcmVhZChsKSAtIChpKSkKKworI2VuZGlmIC8qIEJJVFNfUEVSX0xPTkcgIT0gNjQgKi8KKworI2VuZGlmIC8qIF9BU01fR0VORVJJQ19MT0NBTDY0X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAppbmRleCA0OGM1Mjk5Li44YTkyYTE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCkBAIC02Myw2ICs2MywxMiBAQAogLyogQWxpZ24gLiB0byBhIDggYnl0ZSBib3VuZGFyeSBlcXVhbHMgdG8gbWF4aW11bSBmdW5jdGlvbiBhbGlnbm1lbnQuICovCiAjZGVmaW5lIEFMSUdOX0ZVTkNUSU9OKCkgIC4gPSBBTElHTig4KQogCisvKgorICogQWxpZ24gdG8gYSAzMiBieXRlIGJvdW5kYXJ5IGVxdWFsIHRvIHRoZQorICogYWxpZ25tZW50IGdjYyA0LjUgdXNlcyBmb3IgYSBzdHJ1Y3QKKyAqLworI2RlZmluZSBTVFJVQ1RfQUxJR04oKSAuID0gQUxJR04oMzIpCisKIC8qIFRoZSBhY3R1YWwgY29uZmlndXJhdGlvbiBkZXRlcm1pbmUgaWYgdGhlIGluaXQvZXhpdCBzZWN0aW9ucwogICogYXJlIGhhbmRsZWQgYXMgdGV4dC9kYXRhIG9yIHRoZXkgY2FuIGJlIGRpc2NhcmRlZCAod2hpY2gKICAqIG9mdGVuIGhhcHBlbnMgYXQgcnVudGltZSkKQEAgLTE1MCwxMCArMTU2LDYgQEAKIAlDUFVfS0VFUChleGl0LmRhdGEpCQkJCQkJXAogCU1FTV9LRUVQKGluaXQuZGF0YSkJCQkJCQlcCiAJTUVNX0tFRVAoZXhpdC5kYXRhKQkJCQkJCVwKLQkuID0gQUxJR04oOCk7CQkJCQkJCVwKLQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fbWFya2VycykgPSAuOwkJCQlcCi0JKihfX21hcmtlcnMpCQkJCQkJCVwKLQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX19tYXJrZXJzKSA9IC47CQkJCVwKIAkuID0gQUxJR04oMzIpOwkJCQkJCQlcCiAJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX3RyYWNlcG9pbnRzKSA9IC47CQkJXAogCSooX190cmFjZXBvaW50cykJCQkJCQlcCkBAIC0xNjYsNyArMTY4LDExIEBACiAJTElLRUxZX1BST0ZJTEUoKQkJICAgICAgIAkJCQlcCiAJQlJBTkNIX1BST0ZJTEUoKQkJCQkJCVwKIAlUUkFDRV9QUklOVEtTKCkJCQkJCQkJXAorCQkJCQkJCQkJXAorCVNUUlVDVF9BTElHTigpOwkJCQkJCQlcCiAJRlRSQUNFX0VWRU5UUygpCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlTVFJVQ1RfQUxJR04oKTsJCQkJCQkJXAogCVRSQUNFX1NZU0NBTExTKCkKIAogLyoKQEAgLTQzNSw3ICs0NDEsNyBAQAogICovCiAjZGVmaW5lIElOSVRfVEFTS19EQVRBX1NFQ1RJT04oYWxpZ24pCQkJCQlcCiAJLiA9IEFMSUdOKGFsaWduKTsJCQkJCQlcCi0JLmRhdGEuLmluaXRfdGFzayA6IHsJCQkJCQlcCisJLmRhdGEuLmluaXRfdGFzayA6ICBBVChBRERSKC5kYXRhLi5pbml0X3Rhc2spIC0gTE9BRF9PRkZTRVQpIHsJXAogCQlJTklUX1RBU0tfREFUQShhbGlnbikJCQkJCVwKIAl9CiAKQEAgLTY0Myw2ICs2NDksNyBAQAogCUVYSVRfREFUQQkJCQkJCQlcCiAJRVhJVF9DQUxMCQkJCQkJCVwKIAkqKC5kaXNjYXJkKQkJCQkJCQlcCisJKiguZGlzY2FyZC4qKQkJCQkJCQlcCiAJfQogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybS5oIGIvaW5jbHVkZS9kcm0vZHJtLmgKaW5kZXggZTNmNDZlMC4uZTVmNzA2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtLmgKQEAgLTY2Myw2ICs2NjMsOCBAQAogI2RlZmluZSBEUk1fSU9DVExfVU5MT0NLCQlEUk1fSU9XKCAweDJiLCBzdHJ1Y3QgZHJtX2xvY2spCiAjZGVmaW5lIERSTV9JT0NUTF9GSU5JU0gJCURSTV9JT1coIDB4MmMsIHN0cnVjdCBkcm1fbG9jaykKIAorI2RlZmluZSBEUk1fSU9DVExfR0VNX1BSSU1FX09QRU4gICAgICAgIERSTV9JT1dSKDB4MmUsIHN0cnVjdCBkcm1fZ2VtX29wZW4pCisKICNkZWZpbmUgRFJNX0lPQ1RMX0FHUF9BQ1FVSVJFCQlEUk1fSU8oICAweDMwKQogI2RlZmluZSBEUk1fSU9DVExfQUdQX1JFTEVBU0UJCURSTV9JTyggIDB4MzEpCiAjZGVmaW5lIERSTV9JT0NUTF9BR1BfRU5BQkxFCQlEUk1fSU9XKCAweDMyLCBzdHJ1Y3QgZHJtX2FncF9tb2RlKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtUC5oIGIvaW5jbHVkZS9kcm0vZHJtUC5oCmluZGV4IGMxYjk4NzEuLmUyYTRkYTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybVAuaAorKysgYi9pbmNsdWRlL2RybS9kcm1QLmgKQEAgLTksNiArOSw3IEBACiAvKgogICogQ29weXJpZ2h0IDE5OTkgUHJlY2lzaW9uIEluc2lnaHQsIEluYy4sIENlZGFyIFBhcmssIFRleGFzLgogICogQ29weXJpZ2h0IDIwMDAgVkEgTGludXggU3lzdGVtcywgSW5jLiwgU3Vubnl2YWxlLCBDYWxpZm9ybmlhLgorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAsIENvZGUgQXVyb3JhIEZvcnVtLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQpAQCAtNDgsOSArNDksOSBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgkvKiBGb3IgKHVuKWxvY2tfa2VybmVsICovCiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KQEAgLTE0NCw2ICsxNDUsNyBAQAogI2RlZmluZSBEUklWRVJfSVJRX1ZCTDIgICAgMHg4MDAKICNkZWZpbmUgRFJJVkVSX0dFTSAgICAgICAgIDB4MTAwMAogI2RlZmluZSBEUklWRVJfTU9ERVNFVCAgICAgMHgyMDAwCisjZGVmaW5lIERSSVZFUl9VU0VfUExBVEZPUk1fREVWSUNFICAweDQwMDAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqIFxuYW1lIEJlZ2luIHRoZSBEUk0uLi4gKi8KQEAgLTQwMyw2ICs0MDUsOCBAQAogCXN0cnVjdCBkcm1fZXZlbnQgKmV2ZW50OwogCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKIAlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdjsKKwlwaWRfdCBwaWQ7IC8qIHBpZCBvZiByZXF1ZXN0ZXIsIG5vIGd1YXJhbnRlZSBpdCdzIHZhbGlkIGJ5IHRoZSB0aW1lCisJCSAgICAgIHdlIGRlbGl2ZXIgdGhlIGV2ZW50LCBmb3IgdHJhY2luZyBvbmx5ICovCiAJdm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCBkcm1fcGVuZGluZ19ldmVudCAqZXZlbnQpOwogfTsKIApAQCAtODIzLDYgKzgyNyw3IEBACiAJaW50IG51bV9pb2N0bHM7CiAJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzOwogCXN0cnVjdCBwY2lfZHJpdmVyIHBjaV9kcml2ZXI7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlOwogCS8qIExpc3Qgb2YgZGV2aWNlcyBoYW5naW5nIG9mZiB0aGlzIGRyaXZlciAqLwogCXN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlX2xpc3Q7CiB9OwpAQCAtMTAxNSwxMiArMTAyMCwxNiBAQAogCiAJc3RydWN0IGRybV9hZ3BfaGVhZCAqYWdwOwkvKio8IEFHUCBkYXRhICovCiAKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7ICAgICAgICAgICAgIC8qKjwgRGV2aWNlIHN0cnVjdHVyZSAqLwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwkJLyoqPCBQQ0kgZGV2aWNlIHN0cnVjdHVyZSAqLwogCWludCBwY2lfdmVuZG9yOwkJCS8qKjwgUENJIHZlbmRvciBpZCAqLwogCWludCBwY2lfZGV2aWNlOwkJCS8qKjwgUENJIGRldmljZSBpZCAqLwogI2lmZGVmIF9fYWxwaGFfXwogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsKICNlbmRpZgorCisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1kZXY7IC8qKjwgUGxhdGZvcm0gZGV2aWNlIHN0cnV0dXJlICovCisKIAlzdHJ1Y3QgZHJtX3NnX21lbSAqc2c7CS8qKjwgU2NhdHRlciBnYXRoZXIgbWVtb3J5ICovCiAJaW50IG51bV9jcnRjczsgICAgICAgICAgICAgICAgICAvKio8IE51bWJlciBvZiBDUlRDcyBvbiB0aGlzIGRldmljZSAqLwogCXZvaWQgKmRldl9wcml2YXRlOwkJLyoqPCBkZXZpY2UgcHJpdmF0ZSBkYXRhICovCkBAIC0xMDYwLDE3ICsxMDY5LDIxIEBACiAKIH07CiAKLXN0YXRpYyBpbmxpbmUgaW50IGRybV9kZXZfdG9faXJxKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGRldi0+cGRldi0+aXJxOwotfQotCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCQkgICAgIGludCBmZWF0dXJlKQogewogCXJldHVybiAoKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBmZWF0dXJlKSA/IDEgOiAwKTsKIH0KIAorCitzdGF0aWMgaW5saW5lIGludCBkcm1fZGV2X3RvX2lycShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX1VTRV9QTEFURk9STV9ERVZJQ0UpKQorCQlyZXR1cm4gcGxhdGZvcm1fZ2V0X2lycShkZXYtPnBsYXRmb3JtZGV2LCAwKTsKKwllbHNlCisJCXJldHVybiBkZXYtPnBkZXYtPmlycTsKK30KKwogI2lmZGVmIF9fYWxwaGFfXwogI2RlZmluZSBkcm1fZ2V0X3BjaV9kb21haW4oZGV2KSBkZXYtPmhvc2UtPmluZGV4CiAjZWxzZQpAQCAtMTEzOCw2ICsxMTUxLDcgQEAKIGV4dGVybiBpbnQgZHJtX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAogCQkJCS8qIERldmljZSBzdXBwb3J0IChkcm1fZm9wcy5oKSAqLworZXh0ZXJuIHN0cnVjdCBtdXRleCBkcm1fZ2xvYmFsX211dGV4OwogZXh0ZXJuIGludCBkcm1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCk7CiBleHRlcm4gaW50IGRybV9zdHViX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApOwogZXh0ZXJuIGludCBkcm1fZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIGludCBvbik7CkBAIC0xMjczLDEwICsxMjg3LDYgQEAKIGV4dGVybiBpbnQgZHJtX21hcGJ1ZnMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiBpbnQgZHJtX29yZGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1leHRlcm4gcmVzb3VyY2Vfc2l6ZV90IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCQkJICAgICAgdW5zaWduZWQgaW50IHJlc291cmNlKTsKLWV4dGVybiByZXNvdXJjZV9zaXplX3QgZHJtX2dldF9yZXNvdXJjZV9sZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCQkJICAgIHVuc2lnbmVkIGludCByZXNvdXJjZSk7CiAKIAkJCQkvKiBETUEgc3VwcG9ydCAoZHJtX2RtYS5oKSAqLwogZXh0ZXJuIGludCBkcm1fZG1hX3NldHVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwpAQCAtMTM1MSw4ICsxMzYxLDExIEBACiBzdHJ1Y3QgZHJtX21hc3RlciAqZHJtX21hc3Rlcl9jcmVhdGUoc3RydWN0IGRybV9taW5vciAqbWlub3IpOwogZXh0ZXJuIHN0cnVjdCBkcm1fbWFzdGVyICpkcm1fbWFzdGVyX2dldChzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyKTsKIGV4dGVybiB2b2lkIGRybV9tYXN0ZXJfcHV0KHN0cnVjdCBkcm1fbWFzdGVyICoqbWFzdGVyKTsKLWV4dGVybiBpbnQgZHJtX2dldF9kZXYoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQsCi0JCSAgICAgICBzdHJ1Y3QgZHJtX2RyaXZlciAqZHJpdmVyKTsKK2V4dGVybiBpbnQgZHJtX2dldF9wY2lfZGV2KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCwKKwkJCSAgIHN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIpOworZXh0ZXJuIGludCBkcm1fZ2V0X3BsYXRmb3JtX2RldihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCXN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIpOwogZXh0ZXJuIHZvaWQgZHJtX3B1dF9kZXYoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IGRybV9wdXRfbWlub3Ioc3RydWN0IGRybV9taW5vciAqKm1pbm9yKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgZHJtX2RlYnVnOwpAQCAtMTQ0MCw2ICsxNDUzLDggQEAKIHZvaWQgZHJtX2dlbV92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiBpbnQgZHJtX2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiAKKyNpbmNsdWRlICJkcm1fZ2xvYmFsLmgiCisKIHN0YXRpYyBpbmxpbmUgdm9pZAogZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQogewpAQCAtMTUyOSw2ICsxNTQ0LDkgQEAKIAogc3RhdGljIF9faW5saW5lX18gaW50IGRybV9kZXZpY2VfaXNfYWdwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CisJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfVVNFX1BMQVRGT1JNX0RFVklDRSkpCisJCXJldHVybiAwOworCiAJaWYgKGRldi0+ZHJpdmVyLT5kZXZpY2VfaXNfYWdwICE9IE5VTEwpIHsKIAkJaW50IGVyciA9ICgqZGV2LT5kcml2ZXItPmRldmljZV9pc19hZ3ApIChkZXYpOwogCkBAIC0xNTQyLDcgKzE1NjAsMTAgQEAKIAogc3RhdGljIF9faW5saW5lX18gaW50IGRybV9kZXZpY2VfaXNfcGNpZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewotCXJldHVybiBwY2lfZmluZF9jYXBhYmlsaXR5KGRldi0+cGRldiwgUENJX0NBUF9JRF9FWFApOworCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX1VTRV9QTEFURk9STV9ERVZJQ0UpKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiBwY2lfZmluZF9jYXBhYmlsaXR5KGRldi0+cGRldiwgUENJX0NBUF9JRF9FWFApOwogfQogCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRybV9jb3JlX2Ryb3BtYXAoc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCkKQEAgLTE1NTAsNiArMTU3MSwyMSBAQAogfQogCiAjaW5jbHVkZSAiZHJtX21lbV91dGlsLmgiCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqZHJtX2dldF9kZXZpY2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9VU0VfUExBVEZPUk1fREVWSUNFKSkKKwkJcmV0dXJuIGRldi0+cGxhdGZvcm1kZXY7CisJZWxzZQorCQlyZXR1cm4gZGV2LT5wZGV2OworfQorCitleHRlcm4gaW50IGRybV9wbGF0Zm9ybV9pbml0KHN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIpOworZXh0ZXJuIGludCBkcm1fcGNpX2luaXQoc3RydWN0IGRybV9kcml2ZXIgKmRyaXZlcik7CitleHRlcm4gaW50IGRybV9maWxsX2luX2RldihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCwKKwkJCSAgIHN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIpOworaW50IGRybV9nZXRfbWlub3Ioc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9taW5vciAqKm1pbm9yLCBpbnQgdHlwZSk7CiAvKkB9Ki8KIAogI2VuZGlmCQkJCS8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9jcnRjX2hlbHBlci5oIGIvaW5jbHVkZS9kcm0vZHJtX2NydGNfaGVscGVyLmgKaW5kZXggMTEyMWY3Ny4uNTliNzA3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2NydGNfaGVscGVyLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2NydGNfaGVscGVyLmgKQEAgLTYwLDkgKzYwLDE0IEBACiAJLyogTW92ZSB0aGUgY3J0YyBvbiB0aGUgY3VycmVudCBmYiB0byB0aGUgZ2l2ZW4gcG9zaXRpb24gKm9wdGlvbmFsKiAqLwogCWludCAoKm1vZGVfc2V0X2Jhc2UpKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50IHgsIGludCB5LAogCQkJICAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbGRfZmIpOworCWludCAoKm1vZGVfc2V0X2Jhc2VfYXRvbWljKShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgeCwgaW50IHkpOwogCiAJLyogcmVsb2FkIHRoZSBjdXJyZW50IGNydGMgTFVUICovCiAJdm9pZCAoKmxvYWRfbHV0KShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOworCisJLyogZGlzYWJsZSBjcnRjIHdoZW4gbm90IGluIHVzZSAtIG1vcmUgZXhwbGljaXQgdGhhbiBkcG1zIG9mZiAqLworCXZvaWQgKCpkaXNhYmxlKShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwogfTsKIAogc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmggYi9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmgKaW5kZXggZjBhNmFmYy4uZjIyZTdmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2ZiX2hlbHBlci5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaApAQCAtMzIsNiArMzIsOCBAQAogCiBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcjsKIAorI2luY2x1ZGUgPGxpbnV4L2tnZGIuaD4KKwogc3RydWN0IGRybV9mYl9oZWxwZXJfY3J0YyB7CiAJdWludDMyX3QgY3J0Y19pZDsKIAlzdHJ1Y3QgZHJtX21vZGVfc2V0IG1vZGVfc2V0OwpAQCAtNzgsNiArODAsNyBAQAogCiBzdHJ1Y3QgZHJtX2ZiX2hlbHBlciB7CiAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqc2F2ZWRfZmI7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKIAlpbnQgY3J0Y19jb3VudDsKQEAgLTEyNiw1ICsxMjksNyBAQAogYm9vbCBkcm1fZmJfaGVscGVyX2hvdHBsdWdfZXZlbnQoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcik7CiBib29sIGRybV9mYl9oZWxwZXJfaW5pdGlhbF9jb25maWcoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwgaW50IGJwcF9zZWwpOwogaW50IGRybV9mYl9oZWxwZXJfc2luZ2xlX2FkZF9hbGxfY29ubmVjdG9ycyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKTsKK2ludCBkcm1fZmJfaGVscGVyX2RlYnVnX2VudGVyKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKK2ludCBkcm1fZmJfaGVscGVyX2RlYnVnX2xlYXZlKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZ2xvYmFsLmggYi9pbmNsdWRlL2RybS9kcm1fZ2xvYmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA2ODA1ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZHJtL2RybV9nbG9iYWwuaApAQCAtMCwwICsxLDUzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IFZNd2FyZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMsIEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKKyAqIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEF1dGhvcnM6IFRob21hcyBIZWxsc3Ryb20gPHRoZWxsc3Ryb20tYXQtdm13YXJlLWRvdC1jb20+CisgKi8KKworI2lmbmRlZiBfRFJNX0dMT0JBTF9IXworI2RlZmluZSBfRFJNX0dMT0JBTF9IXworZW51bSBkcm1fZ2xvYmFsX3R5cGVzIHsKKwlEUk1fR0xPQkFMX1RUTV9NRU0gPSAwLAorCURSTV9HTE9CQUxfVFRNX0JPLAorCURSTV9HTE9CQUxfVFRNX09CSkVDVCwKKwlEUk1fR0xPQkFMX05VTQorfTsKKworc3RydWN0IGRybV9nbG9iYWxfcmVmZXJlbmNlIHsKKwllbnVtIGRybV9nbG9iYWxfdHlwZXMgZ2xvYmFsX3R5cGU7CisJc2l6ZV90IHNpemU7CisJdm9pZCAqb2JqZWN0OworCWludCAoKmluaXQpIChzdHJ1Y3QgZHJtX2dsb2JhbF9yZWZlcmVuY2UgKik7CisJdm9pZCAoKnJlbGVhc2UpIChzdHJ1Y3QgZHJtX2dsb2JhbF9yZWZlcmVuY2UgKik7Cit9OworCitleHRlcm4gdm9pZCBkcm1fZ2xvYmFsX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBkcm1fZ2xvYmFsX3JlbGVhc2Uodm9pZCk7CitleHRlcm4gaW50IGRybV9nbG9iYWxfaXRlbV9yZWYoc3RydWN0IGRybV9nbG9iYWxfcmVmZXJlbmNlICpyZWYpOworZXh0ZXJuIHZvaWQgZHJtX2dsb2JhbF9pdGVtX3VucmVmKHN0cnVjdCBkcm1fZ2xvYmFsX3JlZmVyZW5jZSAqcmVmKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fbW0uaCBiL2luY2x1ZGUvZHJtL2RybV9tbS5oCmluZGV4IDRjMTBiZTMuLmJmMDE1MzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9tbS5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9tbS5oCkBAIC00MiwyMSArNDIsMzEgQEAKICNlbmRpZgogCiBzdHJ1Y3QgZHJtX21tX25vZGUgewotCXN0cnVjdCBsaXN0X2hlYWQgZmxfZW50cnk7Ci0Jc3RydWN0IGxpc3RfaGVhZCBtbF9lbnRyeTsKLQlpbnQgZnJlZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfc3RhY2s7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlX2xpc3Q7CisJdW5zaWduZWQgZnJlZSA6IDE7CisJdW5zaWduZWQgc2Nhbm5lZF9ibG9jayA6IDE7CisJdW5zaWduZWQgc2Nhbm5lZF9wcmV2X2ZyZWUgOiAxOworCXVuc2lnbmVkIHNjYW5uZWRfbmV4dF9mcmVlIDogMTsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0OwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAlzdHJ1Y3QgZHJtX21tICptbTsKLQl2b2lkICpwcml2YXRlOwogfTsKIAogc3RydWN0IGRybV9tbSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBmbF9lbnRyeTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG1sX2VudHJ5OworCS8qIExpc3Qgb2YgZnJlZSBtZW1vcnkgYmxvY2tzLCBtb3N0IHJlY2VudGx5IGZyZWVkIG9yZGVyZWQuICovCisJc3RydWN0IGxpc3RfaGVhZCBmcmVlX3N0YWNrOworCS8qIExpc3Qgb2YgYWxsIG1lbW9yeSBub2Rlcywgb3JkZXJlZCBhY2NvcmRpbmcgdG8gdGhlIChpbmNyZWFzaW5nKSBzdGFydAorCSAqIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSBub2RlLiAqLworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZV9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgdW51c2VkX25vZGVzOwogCWludCBudW1fdW51c2VkOwogCXNwaW5sb2NrX3QgdW51c2VkX2xvY2s7CisJdW5zaWduZWQgc2Nhbl9hbGlnbm1lbnQ7CisJdW5zaWduZWQgbG9uZyBzY2FuX3NpemU7CisJdW5zaWduZWQgbG9uZyBzY2FuX2hpdF9zdGFydDsKKwl1bnNpZ25lZCBzY2FuX2hpdF9zaXplOworCXVuc2lnbmVkIHNjYW5uZWRfYmxvY2tzOwogfTsKIAogLyoKQEAgLTEzMyw2ICsxNDMsMTEgQEAKIAlyZXR1cm4gYmxvY2stPm1tOwogfQogCit2b2lkIGRybV9tbV9pbml0X3NjYW4oc3RydWN0IGRybV9tbSAqbW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJICAgICAgdW5zaWduZWQgYWxpZ25tZW50KTsKK2ludCBkcm1fbW1fc2Nhbl9hZGRfYmxvY2soc3RydWN0IGRybV9tbV9ub2RlICpub2RlKTsKK2ludCBkcm1fbW1fc2Nhbl9yZW1vdmVfYmxvY2soc3RydWN0IGRybV9tbV9ub2RlICpub2RlKTsKKwogZXh0ZXJuIHZvaWQgZHJtX21tX2RlYnVnX3RhYmxlKHN0cnVjdCBkcm1fbW0gKm1tLCBjb25zdCBjaGFyICpwcmVmaXgpOwogI2lmZGVmIENPTkZJR19ERUJVR19GUwogaW50IGRybV9tbV9kdW1wX3RhYmxlKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRybV9tbSAqbW0pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX21vZGUuaCBiL2luY2x1ZGUvZHJtL2RybV9tb2RlLmgKaW5kZXggYzViYTE2My4uMGZjNzM5NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX21vZGUuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fbW9kZS5oCkBAIC03NCw2ICs3NCw3IEBACiAvKiBEaXRoZXJpbmcgbW9kZSBvcHRpb25zICovCiAjZGVmaW5lIERSTV9NT0RFX0RJVEhFUklOR19PRkYJMAogI2RlZmluZSBEUk1fTU9ERV9ESVRIRVJJTkdfT04JMQorI2RlZmluZSBEUk1fTU9ERV9ESVRIRVJJTkdfQVVUTyAyCiAKIC8qIERpcnR5IGluZm8gb3B0aW9ucyAqLwogI2RlZmluZSBEUk1fTU9ERV9ESVJUWV9PRkYgICAgICAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmggYi9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKaW5kZXggMmQ0MjhiMC4uM2E5OTQwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaApAQCAtMTQ2LDYgKzE0Niw4IEBACiAJezB4MTAwMiwgMHg2ODg4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NZUFJFU1N8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2ODg5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NZUFJFU1N8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2ODhBLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NZUFJFU1N8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2ODhDLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NZUFJFU1N8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2ODhELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NZUFJFU1N8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2ODk4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NZUFJFU1N8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2ODk5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NZUFJFU1N8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2ODljLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0hFTUxPQ0t8UkFERU9OX05FV19NRU1NQVB9LCBcCkBAIC0xNjEsNiArMTYzLDcgQEAKIAl7MHgxMDAyLCAweDY4YmUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfSlVOSVBFUnxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY4YzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUkVEV09PRHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2OGMxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JFRFdPT0R8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NjhjNywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SRURXT09EfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY4YzgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUkVEV09PRHxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY4YzksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUkVEV09PRHxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY4ZDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUkVEV09PRHxSQURFT05fTkVXX01FTU1BUH0sIFwKQEAgLTE3NCw2ICsxNzcsNyBAQAogCXsweDEwMDIsIDB4NjhlOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DRURBUnxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY4ZTksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ0VEQVJ8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2OGYxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NFREFSfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NjhmMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DRURBUnxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY4ZjgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ0VEQVJ8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2OGY5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NFREFSfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NjhmZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DRURBUnxSQURFT05fTkVXX01FTU1BUH0sIFwKQEAgLTMxNCw2ICszMTgsNyBAQAogCXsweDEwMDIsIDB4OTQ1NiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjc3MHxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDk0NUEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3NzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4OTQ1QiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjc3MHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDVFLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzcwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDk0NjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3NzB8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg5NDYyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzcwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4OTQ2QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjc3MHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCkBAIC0zMjQsNiArMzI5LDcgQEAKIAl7MHgxMDAyLCAweDk0ODcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3MzB8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg5NDg4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzMwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDk0ODksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3MzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ4QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjczMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg5NDhGLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzMwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4OTQ5MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjczMHxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDk0OTEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3MzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXApAQCAtMzY2LDYgKzM3Miw3IEBACiAJezB4MTAwMiwgMHg5NTUzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzEwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDk1NTUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3MTB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4OTU1NywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjcxMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTVmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzEwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDk1ODAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MzB8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg5NTgxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjMwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDk1ODMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vaTJjL3NpbDE2NC5oIGIvaW5jbHVkZS9kcm0vaTJjL3NpbDE2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNWUyNzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2RybS9pMmMvc2lsMTY0LmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBGcmFuY2lzY28gSmVyZXouCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbAorICogcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSKFMpIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaWZuZGVmIF9fRFJNX0kyQ19TSUwxNjRfSF9fCisjZGVmaW5lIF9fRFJNX0kyQ19TSUwxNjRfSF9fCisKKy8qKgorICogc3RydWN0IHNpbDE2NF9lbmNvZGVyX3BhcmFtcworICoKKyAqIERlc2NyaWJlcyBob3cgdGhlIHNpbDE2NCBpcyBjb25uZWN0ZWQgdG8gdGhlIEdQVS4gSXQgc2hvdWxkIGJlIHVzZWQKKyAqIGFzIHRoZSBAcGFyYW1zIHBhcmFtZXRlciBvZiBpdHMgQHNldF9jb25maWcgbWV0aG9kLgorICoKKyAqIFNlZSAiaHR0cDovL3d3dy5zaWxpY29uaW1hZ2UuY29tL2RvY3MvU2lJLURTLTAwMjEtRS0xNjQucGRmIi4KKyAqLworc3RydWN0IHNpbDE2NF9lbmNvZGVyX3BhcmFtcyB7CisJZW51bSB7CisJCVNJTDE2NF9JTlBVVF9FREdFX0ZBTExJTkcgPSAwLAorCQlTSUwxNjRfSU5QVVRfRURHRV9SSVNJTkcKKwl9IGlucHV0X2VkZ2U7CisKKwllbnVtIHsKKwkJU0lMMTY0X0lOUFVUX1dJRFRIXzEyQklUID0gMCwKKwkJU0lMMTY0X0lOUFVUX1dJRFRIXzI0QklUCisJfSBpbnB1dF93aWR0aDsKKworCWVudW0geworCQlTSUwxNjRfSU5QVVRfU0lOR0xFX0VER0UgPSAwLAorCQlTSUwxNjRfSU5QVVRfRFVBTF9FREdFCisJfSBpbnB1dF9kdWFsOworCisJZW51bSB7CisJCVNJTDE2NF9QTExfRklMVEVSX09OID0gMCwKKwkJU0lMMTY0X1BMTF9GSUxURVJfT0ZGLAorCX0gcGxsX2ZpbHRlcjsKKworCWludCBpbnB1dF9za2V3OyAvKiogPCBBbGxvd2VkIHJhbmdlIFstNCwgM10sIHVzZSAwIGZvciBubyBkZS1za2V3LiAqLworCWludCBkdWFsbGlua19za2V3OyAvKiogPCBBbGxvd2VkIHJhbmdlIFstNCwgM10uICovCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmggYi9pbmNsdWRlL2RybS9pOTE1X2RybS5oCmluZGV4IDdmMDAyOGUuLjhmOGIwNzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vaTkxNV9kcm0uaApAQCAtMzMsNiArMzMsMTUgQEAKICAqIHN1YmplY3QgdG8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgY29uc3RyYWludHMuCiAgKi8KIAorI2lmZGVmIF9fS0VSTkVMX18KKy8qIEZvciB1c2UgYnkgSVBTIGRyaXZlciAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaTkxNV9yZWFkX21jaF92YWwodm9pZCk7CitleHRlcm4gYm9vbCBpOTE1X2dwdV9yYWlzZSh2b2lkKTsKK2V4dGVybiBib29sIGk5MTVfZ3B1X2xvd2VyKHZvaWQpOworZXh0ZXJuIGJvb2wgaTkxNV9ncHVfYnVzeSh2b2lkKTsKK2V4dGVybiBib29sIGk5MTVfZ3B1X3R1cmJvX2Rpc2FibGUodm9pZCk7CisjZW5kaWYKKwogLyogRWFjaCByZWdpb24gaXMgYSBtaW5pbXVtIG9mIDE2aywgYW5kIHRoZXJlIGFyZSBhdCBtb3N0IDI1NSBvZiB0aGVtLgogICovCiAjZGVmaW5lIEk5MTVfTlJfVEVYX1JFR0lPTlMgMjU1CS8qIHRhYmxlIHNpemUgMmsgLSBtYXhpbXVtIGR1ZSB0byB1c2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaCBiL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaAppbmRleCA1MzQ3MDYzLi4wYWNhZjhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oCkBAIC05MDQsNiArOTA0LDggQEAKICNkZWZpbmUgUkFERU9OX0lORk9fQUNDRUxfV09SS0lORwkweDAzCiAjZGVmaW5lIFJBREVPTl9JTkZPX0NSVENfRlJPTV9JRAkweDA0CiAjZGVmaW5lIFJBREVPTl9JTkZPX0FDQ0VMX1dPUktJTkcyCTB4MDUKKyNkZWZpbmUgUkFERU9OX0lORk9fVElMSU5HX0NPTkZJRwkweDA2CisjZGVmaW5lIFJBREVPTl9JTkZPX1dBTlRfSFlQRVJaCQkweDA3CiAKIHN0cnVjdCBkcm1fcmFkZW9uX2luZm8gewogCXVpbnQzMl90CQlyZXF1ZXN0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19kcml2ZXIuaCBiL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fZHJpdmVyLmgKaW5kZXggMGVhNjAyZC4uYjg3NTA0MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19kcml2ZXIuaAorKysgYi9pbmNsdWRlL2RybS90dG0vdHRtX2JvX2RyaXZlci5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAidHRtL3R0bV9tZW1vcnkuaCIKICNpbmNsdWRlICJ0dG0vdHRtX21vZHVsZS5oIgogI2luY2x1ZGUgImRybV9tbS5oIgorI2luY2x1ZGUgImRybV9nbG9iYWwuaCIKICNpbmNsdWRlICJsaW51eC93b3JrcXVldWUuaCIKICNpbmNsdWRlICJsaW51eC9mcy5oIgogI2luY2x1ZGUgImxpbnV4L3NwaW5sb2NrLmgiCkBAIC0zNjIsNyArMzYzLDcgQEAKICAqLwogCiBzdHJ1Y3QgdHRtX2JvX2dsb2JhbF9yZWYgewotCXN0cnVjdCB0dG1fZ2xvYmFsX3JlZmVyZW5jZSByZWY7CisJc3RydWN0IGRybV9nbG9iYWxfcmVmZXJlbmNlIHJlZjsKIAlzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKm1lbV9nbG9iOwogfTsKIApAQCAtNjg3LDggKzY4OCw4IEBACiBleHRlcm4gdm9pZCB0dG1fbWVtX2lvX2ZyZWUoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsCiAJCQkJc3RydWN0IHR0bV9tZW1fcmVnICptZW0pOwogCi1leHRlcm4gdm9pZCB0dG1fYm9fZ2xvYmFsX3JlbGVhc2Uoc3RydWN0IHR0bV9nbG9iYWxfcmVmZXJlbmNlICpyZWYpOwotZXh0ZXJuIGludCB0dG1fYm9fZ2xvYmFsX2luaXQoc3RydWN0IHR0bV9nbG9iYWxfcmVmZXJlbmNlICpyZWYpOworZXh0ZXJuIHZvaWQgdHRtX2JvX2dsb2JhbF9yZWxlYXNlKHN0cnVjdCBkcm1fZ2xvYmFsX3JlZmVyZW5jZSAqcmVmKTsKK2V4dGVybiBpbnQgdHRtX2JvX2dsb2JhbF9pbml0KHN0cnVjdCBkcm1fZ2xvYmFsX3JlZmVyZW5jZSAqcmVmKTsKIAogZXh0ZXJuIGludCB0dG1fYm9fZGV2aWNlX3JlbGVhc2Uoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS90dG0vdHRtX21vZHVsZS5oIGIvaW5jbHVkZS9kcm0vdHRtL3R0bV9tb2R1bGUuaAppbmRleCBjZjQxNmFlLi40NWZhMzE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS90dG0vdHRtX21vZHVsZS5oCisrKyBiL2luY2x1ZGUvZHJtL3R0bS90dG1fbW9kdWxlLmgKQEAgLTM1LDI2ICszNSw2IEBACiBzdHJ1Y3Qga29iamVjdDsKIAogI2RlZmluZSBUVE1fUEZYICJbVFRNXSAiCi0KLWVudW0gdHRtX2dsb2JhbF90eXBlcyB7Ci0JVFRNX0dMT0JBTF9UVE1fTUVNID0gMCwKLQlUVE1fR0xPQkFMX1RUTV9CTywKLQlUVE1fR0xPQkFMX1RUTV9PQkpFQ1QsCi0JVFRNX0dMT0JBTF9OVU0KLX07Ci0KLXN0cnVjdCB0dG1fZ2xvYmFsX3JlZmVyZW5jZSB7Ci0JZW51bSB0dG1fZ2xvYmFsX3R5cGVzIGdsb2JhbF90eXBlOwotCXNpemVfdCBzaXplOwotCXZvaWQgKm9iamVjdDsKLQlpbnQgKCppbml0KSAoc3RydWN0IHR0bV9nbG9iYWxfcmVmZXJlbmNlICopOwotCXZvaWQgKCpyZWxlYXNlKSAoc3RydWN0IHR0bV9nbG9iYWxfcmVmZXJlbmNlICopOwotfTsKLQotZXh0ZXJuIHZvaWQgdHRtX2dsb2JhbF9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgdHRtX2dsb2JhbF9yZWxlYXNlKHZvaWQpOwotZXh0ZXJuIGludCB0dG1fZ2xvYmFsX2l0ZW1fcmVmKHN0cnVjdCB0dG1fZ2xvYmFsX3JlZmVyZW5jZSAqcmVmKTsKLWV4dGVybiB2b2lkIHR0bV9nbG9iYWxfaXRlbV91bnJlZihzdHJ1Y3QgdHRtX2dsb2JhbF9yZWZlcmVuY2UgKnJlZik7CiBleHRlcm4gc3RydWN0IGtvYmplY3QgKnR0bV9nZXRfa29iaih2b2lkKTsKIAogI2VuZGlmIC8qIF9UVE1fTU9EVUxFX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L0tidWlsZCBiL2luY2x1ZGUvbGludXgvS2J1aWxkCmluZGV4IDJmYzhlMTQuLjlhYTliY2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvS2J1aWxkCkBAIC0yNzYsNiArMjc2LDcgQEAKIAkJICAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtLSQoU1JDQVJDSCkva3ZtX3BhcmEuaCksKQogdW5pZmRlZi15ICs9IGt2bV9wYXJhLmgKIGVuZGlmCit1bmlmZGVmLXkgKz0gbDJ0cC5oCiB1bmlmZGVmLXkgKz0gbGxjLmgKIHVuaWZkZWYteSArPSBsb29wLmgKIHVuaWZkZWYteSArPSBscC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FjcGkuaCBiL2luY2x1ZGUvbGludXgvYWNwaS5oCmluZGV4IDIyNGEzOGMuLmNjZjk0ZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWNwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvYWNwaS5oCkBAIC0yNTMsNyArMjUzLDcgQEAKICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIHZvaWQgX19pbml0IGFjcGlfbm9fczRfaHdfc2lnbmF0dXJlKHZvaWQpOwogdm9pZCBfX2luaXQgYWNwaV9vbGRfc3VzcGVuZF9vcmRlcmluZyh2b2lkKTsKLXZvaWQgX19pbml0IGFjcGlfczRfbm9fbnZzKHZvaWQpOwordm9pZCBfX2luaXQgYWNwaV9udnNfbm9zYXZlKHZvaWQpOwogI2VuZGlmIC8qIENPTkZJR19QTV9TTEVFUCAqLwogCiBzdHJ1Y3QgYWNwaV9vc2NfY29udGV4dCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FoY2lfcGxhdGZvcm0uaCBiL2luY2x1ZGUvbGludXgvYWhjaV9wbGF0Zm9ybS5oCmluZGV4IGY3ZGQ1NzYuLmJlM2Q5YTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWhjaV9wbGF0Zm9ybS5oCisrKyBiL2luY2x1ZGUvbGludXgvYWhjaV9wbGF0Zm9ybS5oCkBAIC0xNSwxMSArMTUsMTMgQEAKICNpZm5kZWYgX0FIQ0lfUExBVEZPUk1fSAogI2RlZmluZSBfQUhDSV9QTEFURk9STV9ICiAKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCiBzdHJ1Y3QgZGV2aWNlOwogc3RydWN0IGF0YV9wb3J0X2luZm87CiAKIHN0cnVjdCBhaGNpX3BsYXRmb3JtX2RhdGEgewotCWludCAoKmluaXQpKHN0cnVjdCBkZXZpY2UgKmRldik7CisJaW50ICgqaW5pdCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKmFkZHIpOwogCXZvaWQgKCpleGl0KShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICphdGFfcG9ydF9pbmZvOwogCXVuc2lnbmVkIGludCBmb3JjZV9wb3J0X21hcDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYW1iYS9idXMuaCBiL2luY2x1ZGUvbGludXgvYW1iYS9idXMuaAppbmRleCA4YjEwMzg2Li5iMGMxNzQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2FtYmEvYnVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9hbWJhL2J1cy5oCkBAIC0xNCwxNCArMTQsMTkgQEAKICNpZm5kZWYgQVNNQVJNX0FNQkFfSAogI2RlZmluZSBBU01BUk1fQU1CQV9ICiAKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9yZXNvdXJjZS5oPgogCiAjZGVmaW5lIEFNQkFfTlJfSVJRUwkyCiAKK3N0cnVjdCBjbGs7CisKIHN0cnVjdCBhbWJhX2RldmljZSB7CiAJc3RydWN0IGRldmljZQkJZGV2OwogCXN0cnVjdCByZXNvdXJjZQkJcmVzOworCXN0cnVjdCBjbGsJCSpwY2xrOwogCXU2NAkJCWRtYV9tYXNrOwogCXVuc2lnbmVkIGludAkJcGVyaXBoaWQ7CiAJdW5zaWduZWQgaW50CQlpcnFbQU1CQV9OUl9JUlFTXTsKQEAgLTU5LDYgKzY0LDEyIEBACiBpbnQgYW1iYV9yZXF1ZXN0X3JlZ2lvbnMoc3RydWN0IGFtYmFfZGV2aWNlICosIGNvbnN0IGNoYXIgKik7CiB2b2lkIGFtYmFfcmVsZWFzZV9yZWdpb25zKHN0cnVjdCBhbWJhX2RldmljZSAqKTsKIAorI2RlZmluZSBhbWJhX3BjbGtfZW5hYmxlKGQpCVwKKwkoSVNfRVJSKChkKS0+cGNsaykgPyAwIDogY2xrX2VuYWJsZSgoZCktPnBjbGspKQorCisjZGVmaW5lIGFtYmFfcGNsa19kaXNhYmxlKGQpCVwKKwlkbyB7IGlmICghSVNfRVJSKChkKS0+cGNsaykpIGNsa19kaXNhYmxlKChkKS0+cGNsayk7IH0gd2hpbGUgKDApCisKICNkZWZpbmUgYW1iYV9jb25maWcoZCkJKCgoZCktPnBlcmlwaGlkID4+IDI0KSAmIDB4ZmYpCiAjZGVmaW5lIGFtYmFfcmV2KGQpCSgoKGQpLT5wZXJpcGhpZCA+PiAyMCkgJiAweDBmKQogI2RlZmluZSBhbWJhX21hbmYoZCkJKCgoZCktPnBlcmlwaGlkID4+IDEyKSAmIDB4ZmYpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FtYmEvbW1jaS5oIGIvaW5jbHVkZS9saW51eC9hbWJhL21tY2kuaAppbmRleCA3ZTQ2NmZlLi5jYTg0Y2U3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2FtYmEvbW1jaS5oCisrKyBiL2luY2x1ZGUvbGludXgvYW1iYS9tbWNpLmgKQEAgLTE1LDkgKzE1LDEwIEBACiAgKiBAb2NyX21hc2s6IGF2YWlsYWJsZSB2b2x0YWdlcyBvbiB0aGUgNCBwaW5zIGZyb20gdGhlIGJsb2NrLCB0aGlzCiAgKiBpcyBpZ25vcmVkIGlmIGEgcmVndWxhdG9yIGlzIHVzZWQsIHNlZSB0aGUgTU1DX1ZERF8qIG1hc2tzIGluCiAgKiBtbWMvaG9zdC5oCi0gKiBAdHJhbnNsYXRlX3ZkZDogYSBjYWxsYmFjayBmdW5jdGlvbiB0byB0cmFuc2xhdGUgYSBNTUNfVkREXyoKLSAqIG1hc2sgaW50byBhIHZhbHVlIHRvIGJlIGJpbmFyeSBvcjplZCBhbmQgd3JpdHRlbiBpbnRvIHRoZQotICogTU1DSVBXUiByZWdpc3RlciBvZiB0aGUgYmxvY2sKKyAqIEB2ZGRfaGFuZGxlcjogYSBjYWxsYmFjayBmdW5jdGlvbiB0byB0cmFuc2xhdGUgYSBNTUNfVkREXyoKKyAqIG1hc2sgaW50byBhIHZhbHVlIHRvIGJlIGJpbmFyeSAob3Igc2V0IHNvbWUgb3RoZXIgY3VzdG9tIGJpdHMKKyAqIGluIE1NQ0lQV1IpIG9yOmVkIGFuZCB3cml0dGVuIGludG8gdGhlIE1NQ0lQV1IgcmVnaXN0ZXIgb2YgdGhlCisgKiBibG9jay4gIE1heSBhbHNvIGNvbnRyb2wgZXh0ZXJuYWwgcG93ZXIgYmFzZWQgb24gdGhlIHBvd2VyX21vZGUuCiAgKiBAc3RhdHVzOiBpZiBubyBHUElPIHJlYWQgZnVuY3Rpb24gd2FzIGdpdmVuIHRvIHRoZSBibG9jayBpbgogICogZ3Bpb193cCAoYmVsb3cpIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgdG8gZGV0ZXJtaW5lCiAgKiB3aGV0aGVyIGEgY2FyZCBpcyBwcmVzZW50IGluIHRoZSBNTUMgc2xvdCBvciBub3QKQEAgLTI5LDcgKzMwLDggQEAKIHN0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgewogCXVuc2lnbmVkIGludCBmX21heDsKIAl1bnNpZ25lZCBpbnQgb2NyX21hc2s7Ci0JdTMyICgqdHJhbnNsYXRlX3ZkZCkoc3RydWN0IGRldmljZSAqLCB1bnNpZ25lZCBpbnQpOworCXUzMiAoKnZkZF9oYW5kbGVyKShzdHJ1Y3QgZGV2aWNlICosIHVuc2lnbmVkIGludCB2ZGQsCisJCQkgICB1bnNpZ25lZCBjaGFyIHBvd2VyX21vZGUpOwogCXVuc2lnbmVkIGludCAoKnN0YXR1cykoc3RydWN0IGRldmljZSAqKTsKIAlpbnQJZ3Bpb193cDsKIAlpbnQJZ3Bpb19jZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYW1iYS9zZXJpYWwuaCBiL2luY2x1ZGUvbGludXgvYW1iYS9zZXJpYWwuaAppbmRleCA1YTVhN2ZkLi5lMWI2MzRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2FtYmEvc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9saW51eC9hbWJhL3NlcmlhbC5oCkBAIC0zOCwxMCArMzgsMTIgQEAKICNkZWZpbmUgVUFSVDAxeF9GUgkJMHgxOAkvKiBGbGFnIHJlZ2lzdGVyIChSZWFkIG9ubHkpLiAqLwogI2RlZmluZSBVQVJUMDEwX0lJUgkJMHgxQwkvKiBJbnRlcnJ1cHQgaW5kZW50aWZpY2F0aW9uIHJlZ2lzdGVyIChSZWFkKS4gKi8KICNkZWZpbmUgVUFSVDAxMF9JQ1IJCTB4MUMJLyogSW50ZXJydXB0IGNsZWFyIHJlZ2lzdGVyIChXcml0ZSkuICovCisjZGVmaW5lIFNUX1VBUlQwMTFfTENSSF9SWAkweDFDICAgIC8qIFJ4IGxpbmUgY29udHJvbCByZWdpc3Rlci4gKi8KICNkZWZpbmUgVUFSVDAxeF9JTFBSCQkweDIwCS8qIElyREEgbG93IHBvd2VyIGNvdW50ZXIgcmVnaXN0ZXIuICovCiAjZGVmaW5lIFVBUlQwMTFfSUJSRAkJMHgyNAkvKiBJbnRlZ2VyIGJhdWQgcmF0ZSBkaXZpc29yIHJlZ2lzdGVyLiAqLwogI2RlZmluZSBVQVJUMDExX0ZCUkQJCTB4MjgJLyogRnJhY3Rpb25hbCBiYXVkIHJhdGUgZGl2aXNvciByZWdpc3Rlci4gKi8KICNkZWZpbmUgVUFSVDAxMV9MQ1JICQkweDJjCS8qIExpbmUgY29udHJvbCByZWdpc3Rlci4gKi8KKyNkZWZpbmUgU1RfVUFSVDAxMV9MQ1JIX1RYCTB4MmMgICAgLyogVHggTGluZSBjb250cm9sIHJlZ2lzdGVyLiAqLwogI2RlZmluZSBVQVJUMDExX0NSCQkweDMwCS8qIENvbnRyb2wgcmVnaXN0ZXIuICovCiAjZGVmaW5lIFVBUlQwMTFfSUZMUwkJMHgzNAkvKiBJbnRlcnJ1cHQgZmlmbyBsZXZlbCBzZWxlY3QuICovCiAjZGVmaW5lIFVBUlQwMTFfSU1TQwkJMHgzOAkvKiBJbnRlcnJ1cHQgbWFzay4gKi8KQEAgLTg0LDYgKzg2LDcgQEAKICNkZWZpbmUgVUFSVDAxMF9DUl9USUUgCQkweDAwMjAKICNkZWZpbmUgVUFSVDAxMF9DUl9SSUUgCQkweDAwMTAKICNkZWZpbmUgVUFSVDAxMF9DUl9NU0lFCQkweDAwMDgKKyNkZWZpbmUgU1RfVUFSVDAxMV9DUl9PVlNGQUNUCTB4MDAwOAkvKiBPdmVyc2FtcGxpbmcgZmFjdG9yICovCiAjZGVmaW5lIFVBUlQwMXhfQ1JfSUlSTFAJMHgwMDA0CS8qIFNJUiBsb3cgcG93ZXIgbW9kZSAqLwogI2RlZmluZSBVQVJUMDF4X0NSX1NJUkVOCTB4MDAwMgkvKiBTSVIgZW5hYmxlICovCiAjZGVmaW5lIFVBUlQwMXhfQ1JfVUFSVEVOCTB4MDAwMQkvKiBVQVJUIGVuYWJsZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdG1kZXYuaCBiL2luY2x1ZGUvbGludXgvYXRtZGV2LmgKaW5kZXggODE3YjIzNy4uZjY0ODFkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdG1kZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F0bWRldi5oCkBAIC00MzEsNiArNDMxLDE0IEBACiAgICAgaW50IG51bWJlcix1bnNpZ25lZCBsb25nICpmbGFncyk7IC8qIG51bWJlciA9PSAtMTogcGljayBmaXJzdCBhdmFpbGFibGUgKi8KIHN0cnVjdCBhdG1fZGV2ICphdG1fZGV2X2xvb2t1cChpbnQgbnVtYmVyKTsKIHZvaWQgYXRtX2Rldl9kZXJlZ2lzdGVyKHN0cnVjdCBhdG1fZGV2ICpkZXYpOworCisvKiBhdG1fZGV2X3NpZ25hbF9jaGFuZ2UKKyAqCisgKiBQcm9wYWdhdGUgbG93ZXIgbGF5ZXIgc2lnbmFsIGNoYW5nZSBpbiBhdG1fZGV2LT5zaWduYWwgdG8gbmV0ZGV2aWNlLgorICogVGhlIGV2ZW50IHdpbGwgYmUgc2VudCB2aWEgYSBub3RpZmllciBjYWxsIGNoYWluLgorICovCit2b2lkIGF0bV9kZXZfc2lnbmFsX2NoYW5nZShzdHJ1Y3QgYXRtX2RldiAqZGV2LCBjaGFyIHNpZ25hbCk7CisKIHZvaWQgdmNjX2luc2VydF9zb2NrZXQoc3RydWN0IHNvY2sgKnNrKTsKIAogCkBAIC01MTAsNiArNTE4LDE1IEBACiAgKi8KIHZvaWQgZGVyZWdpc3Rlcl9hdG1faW9jdGwoc3RydWN0IGF0bV9pb2N0bCAqKTsKIAorCisvKiByZWdpc3Rlcl9hdG1kZXZpY2Vfbm90aWZpZXIgLSByZWdpc3RlciBhdG1fZGV2IG5vdGlmeSBldmVudHMKKyAqCisgKiBDbGllbnRzIGxpa2UgYnIyNjg0IHdpbGwgcmVnaXN0ZXIgbm90aWZ5IGV2ZW50cworICogQ3VycmVudGx5IHdlIG5vdGlmeSBvZiBzaWduYWwgZm91bmQvbG9zdAorICovCitpbnQgcmVnaXN0ZXJfYXRtZGV2aWNlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwordm9pZCB1bnJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKKwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmggYi9pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgKaW5kZXggOWFlMjg4OS4uZTlhZWMwZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oCisrKyBiL2luY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaApAQCAtODIsOCArODIsNiBAQAogCXN0cnVjdCBiZGlfd3JpdGViYWNrIHdiOyAgLyogZGVmYXVsdCB3cml0ZWJhY2sgaW5mbyBmb3IgdGhpcyBiZGkgKi8KIAlzcGlubG9ja190IHdiX2xvY2s7CSAgLyogcHJvdGVjdHMgdXBkYXRlIHNpZGUgb2Ygd2JfbGlzdCAqLwogCXN0cnVjdCBsaXN0X2hlYWQgd2JfbGlzdDsgLyogdGhlIGZsdXNoZXIgdGhyZWFkcyBoYW5naW5nIG9mZiB0aGlzIGJkaSAqLwotCXVuc2lnbmVkIGxvbmcgd2JfbWFzazsJICAvKiBiaXRtYXNrIG9mIHJlZ2lzdGVyZWQgdGFza3MgKi8KLQl1bnNpZ25lZCBpbnQgd2JfY250OwkgIC8qIG51bWJlciBvZiByZWdpc3RlcmVkIHRhc2tzICovCiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHdvcmtfbGlzdDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icmNtcGh5LmggYi9pbmNsdWRlL2xpbnV4L2JyY21waHkuaAppbmRleCA3ZjQzN2NhLi5iODQwYTQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JyY21waHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JyY21waHkuaApAQCAtMSw2ICsxLDEzIEBACiAjZGVmaW5lIFBIWV9JRF9CQ001MDYxMAkJCTB4MDE0M2JkNjAKICNkZWZpbmUgUEhZX0lEX0JDTTUwNjEwTQkJMHgwMTQzYmQ3MAorI2RlZmluZSBQSFlfSURfQkNNNTI0MQkJCTB4MDE0M2JjMzAKICNkZWZpbmUgUEhZX0lEX0JDTUFDMTMxCQkJMHgwMTQzYmM3MAorI2RlZmluZSBQSFlfSURfQkNNNTQ4MQkJCTB4MDE0M2JjYTAKKyNkZWZpbmUgUEhZX0lEX0JDTTU0ODIJCQkweDAxNDNiY2IwCisjZGVmaW5lIFBIWV9JRF9CQ001NDExCQkJMHgwMDIwNjA3MAorI2RlZmluZSBQSFlfSURfQkNNNTQyMQkJCTB4MDAyMDYwZTAKKyNkZWZpbmUgUEhZX0lEX0JDTTU0NjQJCQkweDAwMjA2MGIwCisjZGVmaW5lIFBIWV9JRF9CQ001NDYxCQkJMHgwMDIwNjBjMAogI2RlZmluZSBQSFlfSURfQkNNNTc3ODAJCQkweDAzNjI1ZDkwCiAKICNkZWZpbmUgUEhZX0JDTV9PVUlfTUFTSwkJMHhmZmZmZmMwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jYWlmL2NhaWZfc29ja2V0LmggYi9pbmNsdWRlL2xpbnV4L2NhaWYvY2FpZl9zb2NrZXQuaAppbmRleCAyYTYxZWIxLi5kOWNiMTliIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NhaWYvY2FpZl9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NhaWYvY2FpZl9zb2NrZXQuaApAQCAtNjIsNiArNjIsNyBAQAogICogQENBSUZQUk9UT19EQVRBR1JBTV9MT09QOglEYXRhZ3JhbSBsb29wYmFjayBjaGFubmVsLCB1c2VkIGZvciB0ZXN0aW5nLgogICogQENBSUZQUk9UT19VVElMOgkJVXRpbGl0eSAoUHNvY2spIGNoYW5uZWwuCiAgKiBAQ0FJRlBST1RPX1JGTToJCVJlbW90ZSBGaWxlIE1hbmFnZXIKKyAqIEBDQUlGUFJPVE9fREVCVUc6CQlEZWJ1ZyBsaW5rCiAgKgogICogVGhpcyBlbnVtIGRlZmluZXMgdGhlIENBSUYgQ2hhbm5lbCB0eXBlIHRvIGJlIHVzZWQuIFRoaXMgZGVmaW5lcwogICogdGhlIHNlcnZpY2UgdG8gY29ubmVjdCB0byBvbiB0aGUgbW9kZW0uCkBAIC03Miw2ICs3Myw3IEBACiAJQ0FJRlBST1RPX0RBVEFHUkFNX0xPT1AsCiAJQ0FJRlBST1RPX1VUSUwsCiAJQ0FJRlBST1RPX1JGTSwKKwlDQUlGUFJPVE9fREVCVUcsCiAJX0NBSUZQUk9UT19NQVgKIH07CiAjZGVmaW5lCUNBSUZQUk9UT19NQVggX0NBSUZQUk9UT19NQVgKQEAgLTgzLDYgKzg1LDI4IEBACiBlbnVtIGNhaWZfYXRfdHlwZSB7CiAJQ0FJRl9BVFRZUEVfUExBSU4gPSAyCiB9OworIC8qKgorICogZW51bSBjYWlmX2RlYnVnX3R5cGUgLSBDb250ZW50IHNlbGVjdGlvbiBmb3IgZGVidWcgY29ubmVjdGlvbgorICogQENBSUZfREVCVUdfVFJBQ0VfSU5URVJBQ1RJVkU6IENvbm5lY3Rpb24gd2lsbCBjb250YWluCisgKgkJCQlib3RoIHRyYWNlIGFuZCBpbnRlcmFjdGl2ZSBkZWJ1Zy4KKyAqIEBDQUlGX0RFQlVHX1RSQUNFOgkJQ29ubmVjdGlvbiBjb250YWlucyB0cmFjZSBvbmx5LgorICogQENBSUZfREVCVUdfSU5URVJBQ1RJVkU6CUNvbm5lY3Rpb24gdG8gaW50ZXJhY3RpdmUgZGVidWcuCisgKi8KK2VudW0gY2FpZl9kZWJ1Z190eXBlIHsKKwlDQUlGX0RFQlVHX1RSQUNFX0lOVEVSQUNUSVZFID0gMCwKKwlDQUlGX0RFQlVHX1RSQUNFLAorCUNBSUZfREVCVUdfSU5URVJBQ1RJVkUsCit9OworCisvKioKKyAqIGVudW0gY2FpZl9kZWJ1Z19zZXJ2aWNlIC0gRGVidWcgU2VydmljZSBFbmRwb2ludAorICogQENBSUZfUkFESU9fREVCVUdfU0VSVklDRToJRGVidWcgc2VydmljZSBvbiB0aGUgUmFkaW8gc3ViLXN5c3RlbQorICogQENBSUZfQVBQX0RFQlVHX1NFUlZJQ0U6CURlYnVnIGZvciB0aGUgYXBwbGljYXRpb25zIHN1Yi1zeXN0ZW0KKyAqLworZW51bSBjYWlmX2RlYnVnX3NlcnZpY2UgeworCUNBSUZfUkFESU9fREVCVUdfU0VSVklDRSA9IDEsCisJQ0FJRl9BUFBfREVCVUdfU0VSVklDRQorfTsKIAogLyoqCiAgKiBzdHJ1Y3Qgc29ja2FkZHJfY2FpZiAtIHRoZSBzb2NrYWRkciBzdHJ1Y3R1cmUgZm9yIENBSUYgc29ja2V0cy4KQEAgLTEwOSw2ICsxMzMsMTIgQEAKICAqCiAgKiBAdS5yZm0udm9sdW1lOiAgICAgICAgICAgIFZvbHVtZSB0byBtb3VudC4KICAqCisgKiBAdS5kYmc6CQkgICAgICBBcHBsaWVzIHdoZW4gZmFtaWx5ID0gQ0FJRlBST1RPX0RFQlVHLgorICoKKyAqIEB1LmRiZy50eXBlOgkJCSAgICAgVHlwZSBvZiBkZWJ1ZyBjb25uZWN0aW9uIHRvIHNldCB1cAorICoJCQkgICAgICAoY2FpZl9kZWJ1Z190eXBlKS4KKyAqCisgKiBAdS5kYmcuc2VydmljZToJICAgICAgU2VydmljZSBzdWItc3lzdGVtIHRvIGNvbm5lY3QgKGNhaWZfZGVidWdfc2VydmljZQogICogRGVzY3JpcHRpb246CiAgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyB0aGUgY29ubmVjdCBwYXJhbWV0ZXJzIHVzZWQgZm9yIHNldHRpbmcgdXAgYQogICogQ0FJRiBDaGFubmVsLiBJdCBkZWZpbmVzIHRoZSBzZXJ2aWNlIHRvIGNvbm5lY3QgdG8gb24gdGhlIG1vZGVtLgpAQCAtMTMwLDYgKzE2MCwxMCBAQAogCQkJX191MzIgY29ubmVjdGlvbl9pZDsKIAkJCWNoYXIJICB2b2x1bWVbMTZdOwogCQl9IHJmbTsJCQkJLyogQ0FJRlBST1RPX1JGTSAqLworCQlzdHJ1Y3QgeworCQkJX191OCAgdHlwZTsJCS8qIHR5cGU6ZW51bSBjYWlmX2RlYnVnX3R5cGUgKi8KKwkJCV9fdTggIHNlcnZpY2U7CQkvKiBzZXJ2aWNlOmNhaWZfZGVidWdfc2VydmljZSAqLworCQl9IGRiZzsJCQkJLyogQ0FJRlBST1RPX0RFQlVHICovCiAJfSB1OwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jYW4vcGxhdGZvcm0vZmxleGNhbi5oIGIvaW5jbHVkZS9saW51eC9jYW4vcGxhdGZvcm0vZmxleGNhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYjcxM2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2Nhbi9wbGF0Zm9ybS9mbGV4Y2FuLmgKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBNYXJjIEtsZWluZS1CdWRkZSA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIKKyAqCisgKi8KKworI2lmbmRlZiBfX0NBTl9QTEFURk9STV9GTEVYQ0FOX0gKKyNkZWZpbmUgX19DQU5fUExBVEZPUk1fRkxFWENBTl9ICisKKy8qKgorICogc3RydWN0IGZsZXhjYW5fcGxhdGZvcm1fZGF0YSAtIGZsZXggQ0FOIGNvbnRyb2xsZXIgcGxhdGZvcm0gZGF0YQorICogQHRyYW5zY2VpdmVyX2VuYWJsZTogICAgICAgICAtIGNhbGxlZCB0byBwb3dlciBvbi9vZmYgdGhlIHRyYW5zY2VpdmVyCisgKgorICovCitzdHJ1Y3QgZmxleGNhbl9wbGF0Zm9ybV9kYXRhIHsKKwl2b2lkICgqdHJhbnNjZWl2ZXJfc3dpdGNoKShpbnQgZW5hYmxlKTsKK307CisKKyNlbmRpZiAvKiBfX0NBTl9QTEFURk9STV9GTEVYQ0FOX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oIGIvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmgKaW5kZXggMzllNWZmNS4uOTAwMTJiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmgKKysrIGIvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmgKQEAgLTQ5LDkgKzQ5LDYgQEAKIH0gX191c2VyICpjYXBfdXNlcl9kYXRhX3Q7CiAKIAotI2RlZmluZSBYQVRUUl9DQVBTX1NVRkZJWCAiY2FwYWJpbGl0eSIKLSNkZWZpbmUgWEFUVFJfTkFNRV9DQVBTIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCBYQVRUUl9DQVBTX1NVRkZJWAotCiAjZGVmaW5lIFZGU19DQVBfUkVWSVNJT05fTUFTSwkweEZGMDAwMDAwCiAjZGVmaW5lIFZGU19DQVBfUkVWSVNJT05fU0hJRlQJMjQKICNkZWZpbmUgVkZTX0NBUF9GTEFHU19NQVNLCX5WRlNfQ0FQX1JFVklTSU9OX01BU0sKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2dyb3VwLmggYi9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCmluZGV4IGUzZDAwZmQuLmVkM2U5MmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKKysrIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAuaApAQCAtNTc4LDYgKzU3OCw3IEBACiB2b2lkIGNncm91cF9pdGVyX2VuZChzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgY2dyb3VwX2l0ZXIgKml0KTsKIGludCBjZ3JvdXBfc2Nhbl90YXNrcyhzdHJ1Y3QgY2dyb3VwX3NjYW5uZXIgKnNjYW4pOwogaW50IGNncm91cF9hdHRhY2hfdGFzayhzdHJ1Y3QgY2dyb3VwICosIHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKK2ludCBjZ3JvdXBfYXR0YWNoX3Rhc2tfY3VycmVudF9jZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiAKIC8qCiAgKiBDU1MgSUQgaXMgSUQgZm9yIGNncm91cF9zdWJzeXNfc3RhdGUgc3RydWN0cyB1bmRlciBzdWJzeXMuIFRoaXMgb25seSB3b3JrcwpAQCAtNjM0LDYgKzYzNSwxMiBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCisvKiBObyBjZ3JvdXBzIC0gbm90aGluZyB0byBkbyAqLworc3RhdGljIGlubGluZSBpbnQgY2dyb3VwX2F0dGFjaF90YXNrX2N1cnJlbnRfY2coc3RydWN0IHRhc2tfc3RydWN0ICp0KQoreworCXJldHVybiAwOworfQorCiAjZW5kaWYgLyogIUNPTkZJR19DR1JPVVBTICovCiAKICNlbmRpZiAvKiBfTElOVVhfQ0dST1VQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaCBiL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaAppbmRleCA1ZWEzYzYwLi5jMzdiMjFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCkBAIC0yOTIsNiArMjkyLDggQEAKICAqLwogZXh0ZXJuIGludAogX19jbG9ja3NvdXJjZV9yZWdpc3Rlcl9zY2FsZShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzLCB1MzIgc2NhbGUsIHUzMiBmcmVxKTsKK2V4dGVybiB2b2lkCitfX2Nsb2Nrc291cmNlX3VwZGF0ZWZyZXFfc2NhbGUoc3RydWN0IGNsb2Nrc291cmNlICpjcywgdTMyIHNjYWxlLCB1MzIgZnJlcSk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IGNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MsIHUzMiBoeikKIHsKQEAgLTMwMyw2ICszMDUsMTUgQEAKIAlyZXR1cm4gX19jbG9ja3NvdXJjZV9yZWdpc3Rlcl9zY2FsZShjcywgMTAwMCwga2h6KTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIF9fY2xvY2tzb3VyY2VfdXBkYXRlZnJlcV9oeihzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzLCB1MzIgaHopCit7CisJX19jbG9ja3NvdXJjZV91cGRhdGVmcmVxX3NjYWxlKGNzLCAxLCBoeik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2Nsb2Nrc291cmNlX3VwZGF0ZWZyZXFfa2h6KHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MsIHUzMiBraHopCit7CisJX19jbG9ja3NvdXJjZV91cGRhdGVmcmVxX3NjYWxlKGNzLCAxMDAwLCBraHopOworfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKIGNsb2Nrc291cmNlX2NhbGNfbXVsdF9zaGlmdChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzLCB1MzIgZnJlcSwgdTMyIG1pbnNlYykKQEAgLTMxMywxMSArMzI0LDEzIEBACiAKICNpZmRlZiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMCiBleHRlcm4gdm9pZAotdXBkYXRlX3ZzeXNjYWxsKHN0cnVjdCB0aW1lc3BlYyAqdHMsIHN0cnVjdCBjbG9ja3NvdXJjZSAqYywgdTMyIG11bHQpOwordXBkYXRlX3ZzeXNjYWxsKHN0cnVjdCB0aW1lc3BlYyAqdHMsIHN0cnVjdCB0aW1lc3BlYyAqd3RtLAorCQkJc3RydWN0IGNsb2Nrc291cmNlICpjLCB1MzIgbXVsdCk7CiBleHRlcm4gdm9pZCB1cGRhdGVfdnN5c2NhbGxfdHoodm9pZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkCi11cGRhdGVfdnN5c2NhbGwoc3RydWN0IHRpbWVzcGVjICp0cywgc3RydWN0IGNsb2Nrc291cmNlICpjLCB1MzIgbXVsdCkKK3VwZGF0ZV92c3lzY2FsbChzdHJ1Y3QgdGltZXNwZWMgKnRzLCBzdHJ1Y3QgdGltZXNwZWMgKnd0bSwKKwkJCXN0cnVjdCBjbG9ja3NvdXJjZSAqYywgdTMyIG11bHQpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaAppbmRleCBhNWE0NzJiLi5jMWE2MmM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oCkBAIC0xNiw2ICsxNiw3IEBACiAjIGRlZmluZSBfX3JlbGVhc2UoeCkJX19jb250ZXh0X18oeCwtMSkKICMgZGVmaW5lIF9fY29uZF9sb2NrKHgsYykJKChjKSA/ICh7IF9fYWNxdWlyZSh4KTsgMTsgfSkgOiAwKQogIyBkZWZpbmUgX19wZXJjcHUJX19hdHRyaWJ1dGVfXygobm9kZXJlZiwgYWRkcmVzc19zcGFjZSgzKSkpCisjIGRlZmluZSBfX3JjdQogZXh0ZXJuIHZvaWQgX19jaGtfdXNlcl9wdHIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX3VzZXIgKik7CiBleHRlcm4gdm9pZCBfX2Noa19pb19wdHIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICopOwogI2Vsc2UKQEAgLTM0LDYgKzM1LDcgQEAKICMgZGVmaW5lIF9fcmVsZWFzZSh4KSAodm9pZCkwCiAjIGRlZmluZSBfX2NvbmRfbG9jayh4LGMpIChjKQogIyBkZWZpbmUgX19wZXJjcHUKKyMgZGVmaW5lIF9fcmN1CiAjZW5kaWYKIAogI2lmZGVmIF9fS0VSTkVMX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29uc29sZS5oIGIvaW5jbHVkZS9saW51eC9jb25zb2xlLmgKaW5kZXggZGNjYTUzMy4uOTVjZjZmMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb25zb2xlLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb25zb2xlLmgKQEAgLTU1LDYgKzU1LDE2IEBACiAJdm9pZAkoKmNvbl9pbnZlcnRfcmVnaW9uKShzdHJ1Y3QgdmNfZGF0YSAqLCB1MTYgKiwgaW50KTsKIAl1MTYgICAgKigqY29uX3NjcmVlbl9wb3MpKHN0cnVjdCB2Y19kYXRhICosIGludCk7CiAJdW5zaWduZWQgbG9uZyAoKmNvbl9nZXR4eSkoc3RydWN0IHZjX2RhdGEgKiwgdW5zaWduZWQgbG9uZywgaW50ICosIGludCAqKTsKKwkvKgorCSAqIFByZXBhcmUgdGhlIGNvbnNvbGUgZm9yIHRoZSBkZWJ1Z2dlci4gIFRoaXMgaW5jbHVkZXMsIGJ1dCBpcyBub3QKKwkgKiBsaW1pdGVkIHRvLCB1bmJsYW5raW5nIHRoZSBjb25zb2xlLCBsb2FkaW5nIGFuIGFwcHJvcHJpYXRlCisJICogcGFsZXR0ZSwgYW5kIGFsbG93aW5nIGRlYnVnZ2VyIGdlbmVyYXRlZCBvdXRwdXQuCisJICovCisJaW50CSgqY29uX2RlYnVnX2VudGVyKShzdHJ1Y3QgdmNfZGF0YSAqKTsKKwkvKgorCSAqIFJlc3RvcmUgdGhlIGNvbnNvbGUgdG8gaXRzIHByZS1kZWJ1ZyBzdGF0ZSBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlLgorCSAqLworCWludAkoKmNvbl9kZWJ1Z19sZWF2ZSkoc3RydWN0IHZjX2RhdGEgKik7CiB9OwogCiBleHRlcm4gY29uc3Qgc3RydWN0IGNvbnN3ICpjb25zd2l0Y2hwOwpAQCAtNjksNiArNzksMTQgQEAKIGludCB1bnJlZ2lzdGVyX2Nvbl9kcml2ZXIoY29uc3Qgc3RydWN0IGNvbnN3ICpjc3cpOwogaW50IHRha2Vfb3Zlcl9jb25zb2xlKGNvbnN0IHN0cnVjdCBjb25zdyAqc3csIGludCBmaXJzdCwgaW50IGxhc3QsIGludCBkZWZsdCk7CiB2b2lkIGdpdmVfdXBfY29uc29sZShjb25zdCBzdHJ1Y3QgY29uc3cgKnN3KTsKKyNpZmRlZiBDT05GSUdfSFdfQ09OU09MRQoraW50IGNvbl9kZWJ1Z19lbnRlcihzdHJ1Y3QgdmNfZGF0YSAqdmMpOworaW50IGNvbl9kZWJ1Z19sZWF2ZSh2b2lkKTsKKyNlbHNlCisjZGVmaW5lIGNvbl9kZWJ1Z19lbnRlcih2YykgKDApCisjZGVmaW5lIGNvbl9kZWJ1Z19sZWF2ZSgpICgwKQorI2VuZGlmCisKIC8qIHNjcm9sbCAqLwogI2RlZmluZSBTTV9VUCAgICAgICAoMSkKICNkZWZpbmUgU01fRE9XTiAgICAgKDIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdS5oIGIvaW5jbHVkZS9saW51eC9jcHUuaAppbmRleCBlMjg3ODYzLi5kZTZiMTcyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NwdS5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1LmgKQEAgLTQ4LDYgKzQ4LDMxIEBACiAjZW5kaWYKIHN0cnVjdCBub3RpZmllcl9ibG9jazsKIAorLyoKKyAqIENQVSBub3RpZmllciBwcmlvcml0aWVzLgorICovCitlbnVtIHsKKwkvKgorCSAqIFNDSEVEX0FDVElWRSBtYXJrcyBhIGNwdSB3aGljaCBpcyBjb21pbmcgdXAgYWN0aXZlIGR1cmluZworCSAqIENQVV9PTkxJTkUgYW5kIENQVV9ET1dOX0ZBSUxFRCBhbmQgbXVzdCBiZSB0aGUgZmlyc3QKKwkgKiBub3RpZmllci4gIENQVVNFVF9BQ1RJVkUgYWRqdXN0cyBjcHVzZXQgYWNjb3JkaW5nIHRvCisJICogY3B1X2FjdGl2ZSBtYXNrIHJpZ2h0IGFmdGVyIFNDSEVEX0FDVElWRS4gIER1cmluZworCSAqIENQVV9ET1dOX1BSRVBBUkUsIFNDSEVEX0lOQUNUSVZFIGFuZCBDUFVTRVRfSU5BQ1RJVkUgYXJlCisJICogb3JkZXJlZCBpbiB0aGUgc2ltaWxhciB3YXkuCisJICoKKwkgKiBUaGlzIG9yZGVyaW5nIGd1YXJhbnRlZXMgY29uc2lzdGVudCBjcHVfYWN0aXZlIG1hc2sgYW5kCisJICogbWlncmF0aW9uIGJlaGF2aW9yIHRvIGFsbCBjcHUgbm90aWZpZXJzLgorCSAqLworCUNQVV9QUklfU0NIRURfQUNUSVZFCT0gSU5UX01BWCwKKwlDUFVfUFJJX0NQVVNFVF9BQ1RJVkUJPSBJTlRfTUFYIC0gMSwKKwlDUFVfUFJJX1NDSEVEX0lOQUNUSVZFCT0gSU5UX01JTiArIDEsCisJQ1BVX1BSSV9DUFVTRVRfSU5BQ1RJVkUJPSBJTlRfTUlOLAorCisJLyogbWlncmF0aW9uIHNob3VsZCBoYXBwZW4gYmVmb3JlIG90aGVyIHN0dWZmIGJ1dCBhZnRlciBwZXJmICovCisJQ1BVX1BSSV9QRVJGCQk9IDIwLAorCUNQVV9QUklfTUlHUkFUSU9OCT0gMTAsCit9OworCiAjaWZkZWYgQ09ORklHX1NNUAogLyogTmVlZCB0byBrbm93IGFib3V0IENQVXMgZ29pbmcgdXAvZG93bj8gKi8KICNpZiBkZWZpbmVkKENPTkZJR19IT1RQTFVHX0NQVSkgfHwgIWRlZmluZWQoTU9EVUxFKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcHVmcmVxLmggYi9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaAppbmRleCA5ZjE1MTUwLi5jM2U5ZGU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaApAQCAtMTk2LDExICsxOTYsNiBAQAogaW50IGNwdWZyZXFfcmVnaXN0ZXJfZ292ZXJub3Ioc3RydWN0IGNwdWZyZXFfZ292ZXJub3IgKmdvdmVybm9yKTsKIHZvaWQgY3B1ZnJlcV91bnJlZ2lzdGVyX2dvdmVybm9yKHN0cnVjdCBjcHVmcmVxX2dvdmVybm9yICpnb3Zlcm5vcik7CiAKLWludCBsb2NrX3BvbGljeV9yd3NlbV9yZWFkKGludCBjcHUpOwotaW50IGxvY2tfcG9saWN5X3J3c2VtX3dyaXRlKGludCBjcHUpOwotdm9pZCB1bmxvY2tfcG9saWN5X3J3c2VtX3JlYWQoaW50IGNwdSk7Ci12b2lkIHVubG9ja19wb2xpY3lfcndzZW1fd3JpdGUoaW50IGNwdSk7Ci0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgQ1BVRlJFUSBEUklWRVIgSU5URVJGQUNFICAgICAgICAgICAgICAgICAgICAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcHVzZXQuaCBiL2luY2x1ZGUvbGludXgvY3B1c2V0LmgKaW5kZXggNDU3ZWQ3Ni4uZjIwZWI4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcHVzZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NwdXNldC5oCkBAIC0yMCw2ICsyMCw3IEBACiAKIGV4dGVybiBpbnQgY3B1c2V0X2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBjcHVzZXRfaW5pdF9zbXAodm9pZCk7CitleHRlcm4gdm9pZCBjcHVzZXRfdXBkYXRlX2FjdGl2ZV9jcHVzKHZvaWQpOwogZXh0ZXJuIHZvaWQgY3B1c2V0X2NwdXNfYWxsb3dlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBjcHVtYXNrICptYXNrKTsKIGV4dGVybiBpbnQgY3B1c2V0X2NwdXNfYWxsb3dlZF9mYWxsYmFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogZXh0ZXJuIG5vZGVtYXNrX3QgY3B1c2V0X21lbXNfYWxsb3dlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwpAQCAtMTMyLDYgKzEzMywxMSBAQAogc3RhdGljIGlubGluZSBpbnQgY3B1c2V0X2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIGNwdXNldF9pbml0X3NtcCh2b2lkKSB7fQogCitzdGF0aWMgaW5saW5lIHZvaWQgY3B1c2V0X3VwZGF0ZV9hY3RpdmVfY3B1cyh2b2lkKQoreworCXBhcnRpdGlvbl9zY2hlZF9kb21haW5zKDEsIE5VTEwsIE5VTEwpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgY3B1c2V0X2NwdXNfYWxsb3dlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCiAJCQkJICAgICAgIHN0cnVjdCBjcHVtYXNrICptYXNrKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcmVkLmggYi9pbmNsdWRlL2xpbnV4L2NyZWQuaAppbmRleCA3NWMwZmE4Li40ZDJjMzk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NyZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NyZWQuaApAQCAtMTUzLDYgKzE1Myw3IEBACiBleHRlcm4gdm9pZCBfX3B1dF9jcmVkKHN0cnVjdCBjcmVkICopOwogZXh0ZXJuIHZvaWQgZXhpdF9jcmVkcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiBleHRlcm4gaW50IGNvcHlfY3JlZHMoc3RydWN0IHRhc2tfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjcmVkICpnZXRfdGFza19jcmVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIGV4dGVybiBzdHJ1Y3QgY3JlZCAqY3JlZF9hbGxvY19ibGFuayh2b2lkKTsKIGV4dGVybiBzdHJ1Y3QgY3JlZCAqcHJlcGFyZV9jcmVkcyh2b2lkKTsKIGV4dGVybiBzdHJ1Y3QgY3JlZCAqcHJlcGFyZV9leGVjX2NyZWRzKHZvaWQpOwpAQCAtMjczLDMzICsyNzQsMTggQEAKICAqIEB0YXNrOiBUaGUgdGFzayB0byBxdWVyeQogICoKICAqIEFjY2VzcyB0aGUgb2JqZWN0aXZlIGNyZWRlbnRpYWxzIG9mIGEgdGFzay4gIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBSQ1UKLSAqIHJlYWRsb2NrLgorICogcmVhZGxvY2sgb3IgdGhlIHRhc2sgbXVzdCBiZSBkZWFkIGFuZCB1bmFibGUgdG8gY2hhbmdlIGl0cyBvd24gY3JlZGVudGlhbHMuCiAgKgotICogVGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZSB0YXNrIGRvZXNuJ3QgZ28gYXdheSwgZWl0aGVyIGJ5IGhvbGRpbmcgYSByZWYgb24KLSAqIHRhc2sgb3IgYnkgaG9sZGluZyB0YXNrbGlzdF9sb2NrIHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyB1bmxpbmtlZC4KKyAqIFRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIHBhc3NlZCBkaXJlY3RseSB0byBnZXRfY3JlZCgpOworICogcmF0aGVyIGdldF90YXNrX2NyZWQoKSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgogICovCi0jZGVmaW5lIF9fdGFza19jcmVkKHRhc2spIFwKLQkoKGNvbnN0IHN0cnVjdCBjcmVkICopKHJjdV9kZXJlZmVyZW5jZV9jaGVjaygodGFzayktPnJlYWxfY3JlZCwgcmN1X3JlYWRfbG9ja19oZWxkKCkgfHwgbG9ja2RlcF90YXNrbGlzdF9sb2NrX2lzX2hlbGQoKSkpKQotCi0vKioKLSAqIGdldF90YXNrX2NyZWQgLSBHZXQgYW5vdGhlciB0YXNrJ3Mgb2JqZWN0aXZlIGNyZWRlbnRpYWxzCi0gKiBAdGFzazogVGhlIHRhc2sgdG8gcXVlcnkKLSAqCi0gKiBHZXQgdGhlIG9iamVjdGl2ZSBjcmVkZW50aWFscyBvZiBhIHRhc2ssIHBpbm5pbmcgdGhlbSBzbyB0aGF0IHRoZXkgY2FuJ3QgZ28KLSAqIGF3YXkuICBBY2Nlc3NpbmcgYSB0YXNrJ3MgY3JlZGVudGlhbHMgZGlyZWN0bHkgaXMgbm90IHBlcm1pdHRlZC4KLSAqCi0gKiBUaGUgY2FsbGVyIG11c3QgbWFrZSBzdXJlIHRhc2sgZG9lc24ndCBnbyBhd2F5LCBlaXRoZXIgYnkgaG9sZGluZyBhIHJlZiBvbgotICogdGFzayBvciBieSBob2xkaW5nIHRhc2tsaXN0X2xvY2sgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIHVubGlua2VkLgotICovCi0jZGVmaW5lIGdldF90YXNrX2NyZWQodGFzaykJCQkJXAotKHsJCQkJCQkJXAotCXN0cnVjdCBjcmVkICpfX2NyZWQ7CQkJCVwKLQlyY3VfcmVhZF9sb2NrKCk7CQkJCVwKLQlfX2NyZWQgPSAoc3RydWN0IGNyZWQgKikgX190YXNrX2NyZWQoKHRhc2spKTsJXAotCWdldF9jcmVkKF9fY3JlZCk7CQkJCVwKLQlyY3VfcmVhZF91bmxvY2soKTsJCQkJXAotCV9fY3JlZDsJCQkJCQlcCi19KQorI2RlZmluZSBfX3Rhc2tfY3JlZCh0YXNrKQkJCQkJCVwKKwkoewkJCQkJCQkJXAorCQljb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKl9fdCA9ICh0YXNrKTsJCQlcCisJCXJjdV9kZXJlZmVyZW5jZV9jaGVjayhfX3QtPnJlYWxfY3JlZCwJCQlcCisJCQkJICAgICAgcmN1X3JlYWRfbG9ja19oZWxkKCkgfHwJCVwKKwkJCQkgICAgICB0YXNrX2lzX2RlYWQoX190KSk7CQlcCisJfSkKIAogLyoqCiAgKiBnZXRfY3VycmVudF9jcmVkIC0gR2V0IHRoZSBjdXJyZW50IHRhc2sncyBzdWJqZWN0aXZlIGNyZWRlbnRpYWxzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RlbGF5LmggYi9pbmNsdWRlL2xpbnV4L2RlbGF5LmgKaW5kZXggZmQ4MzJjNi4uYTZlY2IzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZWxheS5oCisrKyBiL2luY2x1ZGUvbGludXgvZGVsYXkuaApAQCAtNDUsNiArNDUsNyBAQAogdm9pZCBjYWxpYnJhdGVfZGVsYXkodm9pZCk7CiB2b2lkIG1zbGVlcCh1bnNpZ25lZCBpbnQgbXNlY3MpOwogdW5zaWduZWQgbG9uZyBtc2xlZXBfaW50ZXJydXB0aWJsZSh1bnNpZ25lZCBpbnQgbXNlY3MpOwordm9pZCB1c2xlZXBfcmFuZ2UodW5zaWduZWQgbG9uZyBtaW4sIHVuc2lnbmVkIGxvbmcgbWF4KTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNzbGVlcCh1bnNpZ25lZCBpbnQgc2Vjb25kcykKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCmluZGV4IDA3MTNlMTAuLjUxNmZlY2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaApAQCAtODQsOSArODQsOCBAQAogCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlICpzdGFydCwKIAkJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSk7CiAKLWludCBfX211c3RfY2hlY2sgYnVzX2Zvcl9lYWNoX2RydihzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywKLQkJCQkgIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpzdGFydCwgdm9pZCAqZGF0YSwKLQkJCQkgIGludCAoKmZuKShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqLCB2b2lkICopKTsKK2ludCBidXNfZm9yX2VhY2hfZHJ2KHN0cnVjdCBidXNfdHlwZSAqYnVzLCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqc3RhcnQsCisJCSAgICAgdm9pZCAqZGF0YSwgaW50ICgqZm4pKHN0cnVjdCBkZXZpY2VfZHJpdmVyICosIHZvaWQgKikpOwogCiB2b2lkIGJ1c19zb3J0X2JyZWFkdGhmaXJzdChzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywKIAkJCSAgIGludCAoKmNvbXBhcmUpKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmEsCkBAIC0xMTAsMTAgKzEwOSwxMiBAQAogICovCiAjZGVmaW5lIEJVU19OT1RJRllfQUREX0RFVklDRQkJMHgwMDAwMDAwMSAvKiBkZXZpY2UgYWRkZWQgKi8KICNkZWZpbmUgQlVTX05PVElGWV9ERUxfREVWSUNFCQkweDAwMDAwMDAyIC8qIGRldmljZSByZW1vdmVkICovCi0jZGVmaW5lIEJVU19OT1RJRllfQk9VTkRfRFJJVkVSCQkweDAwMDAwMDAzIC8qIGRyaXZlciBib3VuZCB0byBkZXZpY2UgKi8KLSNkZWZpbmUgQlVTX05PVElGWV9VTkJJTkRfRFJJVkVSCTB4MDAwMDAwMDQgLyogZHJpdmVyIGFib3V0IHRvIGJlCisjZGVmaW5lIEJVU19OT1RJRllfQklORF9EUklWRVIJCTB4MDAwMDAwMDMgLyogZHJpdmVyIGFib3V0IHRvIGJlCisJCQkJCQkgICAgICBib3VuZCAqLworI2RlZmluZSBCVVNfTk9USUZZX0JPVU5EX0RSSVZFUgkJMHgwMDAwMDAwNCAvKiBkcml2ZXIgYm91bmQgdG8gZGV2aWNlICovCisjZGVmaW5lIEJVU19OT1RJRllfVU5CSU5EX0RSSVZFUgkweDAwMDAwMDA1IC8qIGRyaXZlciBhYm91dCB0byBiZQogCQkJCQkJICAgICAgdW5ib3VuZCAqLwotI2RlZmluZSBCVVNfTk9USUZZX1VOQk9VTkRfRFJJVkVSCTB4MDAwMDAwMDUgLyogZHJpdmVyIGlzIHVuYm91bmQKKyNkZWZpbmUgQlVTX05PVElGWV9VTkJPVU5EX0RSSVZFUgkweDAwMDAwMDA2IC8qIGRyaXZlciBpcyB1bmJvdW5kCiAJCQkJCQkgICAgICBmcm9tIHRoZSBkZXZpY2UgKi8KIAogZXh0ZXJuIHN0cnVjdCBrc2V0ICpidXNfZ2V0X2tzZXQoc3RydWN0IGJ1c190eXBlICpidXMpOwpAQCAtNTUxLDcgKzU1Miw3IEBACiAJCSAgICAgaW50ICgqZm4pKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkpOwogZXh0ZXJuIHN0cnVjdCBkZXZpY2UgKmRldmljZV9maW5kX2NoaWxkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCQlpbnQgKCptYXRjaCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKSk7Ci1leHRlcm4gaW50IGRldmljZV9yZW5hbWUoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpuZXdfbmFtZSk7CitleHRlcm4gaW50IGRldmljZV9yZW5hbWUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuZXdfbmFtZSk7CiBleHRlcm4gaW50IGRldmljZV9tb3ZlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbmV3X3BhcmVudCwKIAkJICAgICAgIGVudW0gZHBtX29yZGVyIGRwbV9vcmRlcik7CiBleHRlcm4gY29uc3QgY2hhciAqZGV2aWNlX2dldF9kZXZub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTYzOCw0MyArNjM5LDEwMyBAQAogCiAvKiBkZWJ1Z2dpbmcgYW5kIHRyb3VibGVzaG9vdGluZy9kaWFnbm9zdGljIGhlbHBlcnMuICovCiBleHRlcm4gY29uc3QgY2hhciAqZGV2X2RyaXZlcl9zdHJpbmcoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2KTsKLSNkZWZpbmUgZGV2X3ByaW50ayhsZXZlbCwgZGV2LCBmb3JtYXQsIGFyZy4uLikJXAotCXByaW50ayhsZXZlbCAiJXMgJXM6ICIgZm9ybWF0ICwgZGV2X2RyaXZlcl9zdHJpbmcoZGV2KSAsIFwKLQkgICAgICAgZGV2X25hbWUoZGV2KSAsICMjIGFyZykKIAotI2RlZmluZSBkZXZfZW1lcmcoZGV2LCBmb3JtYXQsIGFyZy4uLikJCVwKLQlkZXZfcHJpbnRrKEtFUk5fRU1FUkcgLCBkZXYgLCBmb3JtYXQgLCAjIyBhcmcpCi0jZGVmaW5lIGRldl9hbGVydChkZXYsIGZvcm1hdCwgYXJnLi4uKQkJXAotCWRldl9wcmludGsoS0VSTl9BTEVSVCAsIGRldiAsIGZvcm1hdCAsICMjIGFyZykKLSNkZWZpbmUgZGV2X2NyaXQoZGV2LCBmb3JtYXQsIGFyZy4uLikJCVwKLQlkZXZfcHJpbnRrKEtFUk5fQ1JJVCAsIGRldiAsIGZvcm1hdCAsICMjIGFyZykKLSNkZWZpbmUgZGV2X2VycihkZXYsIGZvcm1hdCwgYXJnLi4uKQkJXAotCWRldl9wcmludGsoS0VSTl9FUlIgLCBkZXYgLCBmb3JtYXQgLCAjIyBhcmcpCi0jZGVmaW5lIGRldl93YXJuKGRldiwgZm9ybWF0LCBhcmcuLi4pCQlcCi0JZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcgLCBkZXYgLCBmb3JtYXQgLCAjIyBhcmcpCi0jZGVmaW5lIGRldl9ub3RpY2UoZGV2LCBmb3JtYXQsIGFyZy4uLikJCVwKLQlkZXZfcHJpbnRrKEtFUk5fTk9USUNFICwgZGV2ICwgZm9ybWF0ICwgIyMgYXJnKQotI2RlZmluZSBkZXZfaW5mbyhkZXYsIGZvcm1hdCwgYXJnLi4uKQkJXAotCWRldl9wcmludGsoS0VSTl9JTkZPICwgZGV2ICwgZm9ybWF0ICwgIyMgYXJnKQorCisjaWZkZWYgQ09ORklHX1BSSU5USworCitleHRlcm4gaW50IGRldl9wcmludGsoY29uc3QgY2hhciAqbGV2ZWwsIGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOworZXh0ZXJuIGludCBkZXZfZW1lcmcoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CitleHRlcm4gaW50IGRldl9hbGVydChjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKK2V4dGVybiBpbnQgZGV2X2NyaXQoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CitleHRlcm4gaW50IGRldl9lcnIoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CitleHRlcm4gaW50IGRldl93YXJuKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOworZXh0ZXJuIGludCBkZXZfbm90aWNlKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOworZXh0ZXJuIGludCBfZGV2X2luZm8oY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgaW50IGRldl9wcmludGsoY29uc3QgY2hhciAqbGV2ZWwsIGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOworc3RhdGljIGlubGluZSBpbnQgZGV2X3ByaW50ayhjb25zdCBjaGFyICpsZXZlbCwgY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LAorCQkgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKKwkgeyByZXR1cm4gMDsgfQorCitzdGF0aWMgaW5saW5lIGludCBkZXZfZW1lcmcoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CitzdGF0aWMgaW5saW5lIGludCBkZXZfZW1lcmcoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwl7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBkZXZfY3JpdChjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKK3N0YXRpYyBpbmxpbmUgaW50IGRldl9jcml0KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqZm10LCAuLi4pCisJeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgZGV2X2FsZXJ0KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOworc3RhdGljIGlubGluZSBpbnQgZGV2X2FsZXJ0KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqZm10LCAuLi4pCisJeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgZGV2X2Vycihjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKK3N0YXRpYyBpbmxpbmUgaW50IGRldl9lcnIoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwl7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBkZXZfd2Fybihjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKK3N0YXRpYyBpbmxpbmUgaW50IGRldl93YXJuKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqZm10LCAuLi4pCisJeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgZGV2X25vdGljZShjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKK3N0YXRpYyBpbmxpbmUgaW50IGRldl9ub3RpY2UoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwl7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBfZGV2X2luZm8oY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CitzdGF0aWMgaW5saW5lIGludCBfZGV2X2luZm8oY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwl7IHJldHVybiAwOyB9CisKKyNlbmRpZgorCisvKgorICogU3R1cGlkIGhhY2thcm91bmQgZm9yIGV4aXN0aW5nIHVzZXMgb2Ygbm9uLXByaW50ayB1c2VzIGRldl9pbmZvCisgKgorICogTm90ZSB0aGF0IHRoZSBkZWZpbml0aW9uIG9mIGRldl9pbmZvIGJlbG93IGlzIGFjdHVhbGx5IF9kZXZfaW5mbworICogYW5kIGEgbWFjcm8gaXMgdXNlZCB0byBhdm9pZCByZWRlZmluaW5nIGRldl9pbmZvCisgKi8KKworI2RlZmluZSBkZXZfaW5mbyhkZXYsIGZtdCwgYXJnLi4uKSBfZGV2X2luZm8oZGV2LCBmbXQsICMjYXJnKQogCiAjaWYgZGVmaW5lZChERUJVRykKICNkZWZpbmUgZGV2X2RiZyhkZXYsIGZvcm1hdCwgYXJnLi4uKQkJXAotCWRldl9wcmludGsoS0VSTl9ERUJVRyAsIGRldiAsIGZvcm1hdCAsICMjIGFyZykKKwlkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwgZm9ybWF0LCAjI2FyZykKICNlbGlmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfREVCVUcpCi0jZGVmaW5lIGRldl9kYmcoZGV2LCBmb3JtYXQsIC4uLikgZG8geyBcCisjZGVmaW5lIGRldl9kYmcoZGV2LCBmb3JtYXQsIC4uLikJCSAgICAgXAorZG8gewkJCQkJCSAgICAgXAogCWR5bmFtaWNfZGV2X2RiZyhkZXYsIGZvcm1hdCwgIyNfX1ZBX0FSR1NfXyk7IFwKLQl9IHdoaWxlICgwKQorfSB3aGlsZSAoMCkKICNlbHNlCi0jZGVmaW5lIGRldl9kYmcoZGV2LCBmb3JtYXQsIGFyZy4uLikJCVwKLQkoeyBpZiAoMCkgZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsIGZvcm1hdCwgIyNhcmcpOyAwOyB9KQorI2RlZmluZSBkZXZfZGJnKGRldiwgZm9ybWF0LCBhcmcuLi4pCQkJCVwKKyh7CQkJCQkJCQlcCisJaWYgKDApCQkJCQkJCVwKKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsIGZvcm1hdCwgIyNhcmcpOwlcCisJMDsJCQkJCQkJXAorfSkKICNlbmRpZgogCiAjaWZkZWYgVkVSQk9TRV9ERUJVRwogI2RlZmluZSBkZXZfdmRiZwlkZXZfZGJnCiAjZWxzZQotCi0jZGVmaW5lIGRldl92ZGJnKGRldiwgZm9ybWF0LCBhcmcuLi4pCQlcCi0JKHsgaWYgKDApIGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LCBmb3JtYXQsICMjYXJnKTsgMDsgfSkKKyNkZWZpbmUgZGV2X3ZkYmcoZGV2LCBmb3JtYXQsIGFyZy4uLikJCQkJXAorKHsJCQkJCQkJCVwKKwlpZiAoMCkJCQkJCQkJXAorCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwgZm9ybWF0LCAjI2FyZyk7CVwKKwkwOwkJCQkJCQlcCit9KQogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtaS5oIGIvaW5jbHVkZS9saW51eC9kbWkuaAppbmRleCBhOGEzZTFhLi45MGUwODdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtaS5oCisrKyBiL2luY2x1ZGUvbGludXgvZG1pLmgKQEAgLTIwLDYgKzIwLDcgQEAKIAlETUlfREVWX1RZUEVfU0FTLAogCURNSV9ERVZfVFlQRV9JUE1JID0gLTEsCiAJRE1JX0RFVl9UWVBFX09FTV9TVFJJTkcgPSAtMiwKKwlETUlfREVWX1RZUEVfREVWX09OQk9BUkQgPSAtMywKIH07CiAKIHN0cnVjdCBkbWlfaGVhZGVyIHsKQEAgLTM3LDYgKzM4LDE0IEBACiAKICNpZmRlZiBDT05GSUdfRE1JCiAKK3N0cnVjdCBkbWlfZGV2X29uYm9hcmQgeworCXN0cnVjdCBkbWlfZGV2aWNlIGRldjsKKwlpbnQgaW5zdGFuY2U7CisJaW50IHNlZ21lbnQ7CisJaW50IGJ1czsKKwlpbnQgZGV2Zm47Cit9OworCiBleHRlcm4gaW50IGRtaV9jaGVja19zeXN0ZW0oY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmxpc3QpOwogY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmRtaV9maXJzdF9tYXRjaChjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqbGlzdCk7CiBleHRlcm4gY29uc3QgY2hhciAqIGRtaV9nZXRfc3lzdGVtX2luZm8oaW50IGZpZWxkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHZiL2Zyb250ZW5kLmggYi9pbmNsdWRlL2xpbnV4L2R2Yi9mcm9udGVuZC5oCmluZGV4IGI2Y2I1NDIuLjQ5M2EyYmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZHZiL2Zyb250ZW5kLmgKKysrIGIvaW5jbHVkZS9saW51eC9kdmIvZnJvbnRlbmQuaApAQCAtNjIsNiArNjIsNyBAQAogCUZFX0NBTl84VlNCCQkJPSAweDIwMDAwMCwKIAlGRV9DQU5fMTZWU0IJCQk9IDB4NDAwMDAwLAogCUZFX0hBU19FWFRFTkRFRF9DQVBTCQk9IDB4ODAwMDAwLCAgIC8qIFdlIG5lZWQgbW9yZSBiaXRzcGFjZSBmb3IgbmV3ZXIgQVBJcywgaW5kaWNhdGUgdGhpcy4gKi8KKwlGRV9DQU5fVFVSQk9fRkVDCQk9IDB4ODAwMDAwMCwgIC8qIGZyb250ZW5kIHN1cHBvcnRzICJ0dXJibyBmZWMgbW9kdWxhdGlvbiIgKi8KIAlGRV9DQU5fMkdfTU9EVUxBVElPTgkJPSAweDEwMDAwMDAwLCAvKiBmcm9udGVuZCBzdXBwb3J0cyAiMm5kIGdlbmVyYXRpb24gbW9kdWxhdGlvbiIgKERWQi1TMikgKi8KIAlGRV9ORUVEU19CRU5ESU5HCQk9IDB4MjAwMDAwMDAsIC8qIG5vdCBzdXBwb3J0ZWQgYW55bW9yZSwgZG9uJ3QgdXNlIChmcm9udGVuZCByZXF1aXJlcyBmcmVxdWVuY3kgYmVuZGluZykgKi8KIAlGRV9DQU5fUkVDT1ZFUgkJCT0gMHg0MDAwMDAwMCwgLyogZnJvbnRlbmQgY2FuIHJlY292ZXIgZnJvbSBhIGNhYmxlIHVucGx1ZyBhdXRvbWF0aWNhbGx5ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2R2Yi92ZXJzaW9uLmggYi9pbmNsdWRlL2xpbnV4L2R2Yi92ZXJzaW9uLmgKaW5kZXggNTQwYjA1OC4uNWE3NTQ2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kdmIvdmVyc2lvbi5oCisrKyBiL2luY2x1ZGUvbGludXgvZHZiL3ZlcnNpb24uaApAQCAtMjQsNiArMjQsNiBAQAogI2RlZmluZSBfRFZCVkVSU0lPTl9IXwogCiAjZGVmaW5lIERWQl9BUElfVkVSU0lPTiA1Ci0jZGVmaW5lIERWQl9BUElfVkVSU0lPTl9NSU5PUiAxCisjZGVmaW5lIERWQl9BUElfVkVSU0lPTl9NSU5PUiAyCiAKICNlbmRpZiAvKl9EVkJWRVJTSU9OX0hfKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWVwcm9tXzkzY3g2LmggYi9pbmNsdWRlL2xpbnV4L2VlcHJvbV85M2N4Ni5oCmluZGV4IGE1NWM4NzMuLmM0NjI3Y2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWVwcm9tXzkzY3g2LmgKKysrIGIvaW5jbHVkZS9saW51eC9lZXByb21fOTNjeDYuaApAQCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBQQ0lfRUVQUk9NX1dJRFRIXzkzQzQ2CTYKICNkZWZpbmUgUENJX0VFUFJPTV9XSURUSF85M0M1Ngk4CiAjZGVmaW5lIFBDSV9FRVBST01fV0lEVEhfOTNDNjYJOAorI2RlZmluZSBQQ0lfRUVQUk9NX1dJRFRIXzkzQzg2CTgKICNkZWZpbmUgUENJX0VFUFJPTV9XSURUSF9PUENPREUJMwogI2RlZmluZSBQQ0lfRUVQUk9NX1dSSVRFX09QQ09ERQkweDA1CiAjZGVmaW5lIFBDSV9FRVBST01fUkVBRF9PUENPREUJMHgwNgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oIGIvaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oCmluZGV4IDNkN2E2NjguLjg0ODQ4MGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgKQEAgLTEyNyw2ICsxMjcsMjAgQEAKIH0KIAogLyoqCisgKiBkZXZfaHdfYWRkcl9yYW5kb20gLSBDcmVhdGUgcmFuZG9tIE1BQyBhbmQgc2V0IGRldmljZSBmbGFnCisgKiBAZGV2OiBwb2ludGVyIHRvIG5ldF9kZXZpY2Ugc3RydWN0dXJlCisgKiBAYWRkcjogUG9pbnRlciB0byBhIHNpeC1ieXRlIGFycmF5IGNvbnRhaW5pbmcgdGhlIEV0aGVybmV0IGFkZHJlc3MKKyAqCisgKiBHZW5lcmF0ZSByYW5kb20gTUFDIHRvIGJlIHVzZWQgYnkgYSBkZXZpY2UgYW5kIHNldCBhZGRyX2Fzc2lnbl90eXBlCisgKiBzbyB0aGUgc3RhdGUgY2FuIGJlIHJlYWQgYnkgc3lzZnMgYW5kIGJlIHVzZWQgYnkgdWRldi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGRldl9od19hZGRyX3JhbmRvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqaHdhZGRyKQoreworCWRldi0+YWRkcl9hc3NpZ25fdHlwZSB8PSBORVRfQUREUl9SQU5ET007CisJcmFuZG9tX2V0aGVyX2FkZHIoaHdhZGRyKTsKK30KKworLyoqCiAgKiBjb21wYXJlX2V0aGVyX2FkZHIgLSBDb21wYXJlIHR3byBFdGhlcm5ldCBhZGRyZXNzZXMKICAqIEBhZGRyMTogUG9pbnRlciB0byBhIHNpeC1ieXRlIGFycmF5IGNvbnRhaW5pbmcgdGhlIEV0aGVybmV0IGFkZHJlc3MKICAqIEBhZGRyMjogUG9pbnRlciBvdGhlciBzaXgtYnl0ZSBhcnJheSBjb250YWluaW5nIHRoZSBFdGhlcm5ldCBhZGRyZXNzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCmluZGV4IGI0MjA3Y2EuLjk5MTI2OWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCisrKyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCkBAIC0zODYsNiArMzg2LDE1IEBACiAJX191MzIJCQkJcnVsZV9sb2NzWzBdOwogfTsKIAorc3RydWN0IGV0aHRvb2xfcnhmaF9pbmRpciB7CisJX191MzIJY21kOworCS8qIE9uIGVudHJ5LCB0aGlzIGlzIHRoZSBhcnJheSBzaXplIG9mIHRoZSB1c2VyIGJ1ZmZlci4gIE9uCisJICogcmV0dXJuIGZyb20gRVRIVE9PTF9HUlhGSElORElSLCB0aGlzIGlzIHRoZSBhcnJheSBzaXplIG9mCisJICogdGhlIGhhcmR3YXJlIGluZGlyZWN0aW9uIHRhYmxlLiAqLworCV9fdTMyCXNpemU7CisJX191MzIJcmluZ19pbmRleFswXTsJLyogcmluZy9xdWV1ZSBpbmRleCBmb3IgZWFjaCBoYXNoIHZhbHVlICovCit9OworCiBzdHJ1Y3QgZXRodG9vbF9yeF9udHVwbGVfZmxvd19zcGVjIHsKIAlfX3UzMgkJIGZsb3dfdHlwZTsKIAl1bmlvbiB7CkBAIC00NTksNyArNDY4LDcgQEAKIHUzMiBldGh0b29sX29wX2dldF91Zm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgZXRodG9vbF9vcF9zZXRfdWZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKTsKIHUzMiBldGh0b29sX29wX2dldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLWludCBldGh0b29sX29wX3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSk7CitpbnQgZXRodG9vbF9vcF9zZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEsIHUzMiBzdXBwb3J0ZWQpOwogdm9pZCBldGh0b29sX250dXBsZV9mbHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogLyoqCkBAIC01NzgsNiArNTg3LDEwIEBACiAJaW50CSgqc2V0X3J4X250dXBsZSkoc3RydWN0IG5ldF9kZXZpY2UgKiwKIAkJCQkgc3RydWN0IGV0aHRvb2xfcnhfbnR1cGxlICopOwogCWludAkoKmdldF9yeF9udHVwbGUpKHN0cnVjdCBuZXRfZGV2aWNlICosIHUzMiBzdHJpbmdzZXQsIHZvaWQgKik7CisJaW50CSgqZ2V0X3J4ZmhfaW5kaXIpKHN0cnVjdCBuZXRfZGV2aWNlICosCisJCQkJICBzdHJ1Y3QgZXRodG9vbF9yeGZoX2luZGlyICopOworCWludAkoKnNldF9yeGZoX2luZGlyKShzdHJ1Y3QgbmV0X2RldmljZSAqLAorCQkJCSAgY29uc3Qgc3RydWN0IGV0aHRvb2xfcnhmaF9pbmRpciAqKTsKIH07CiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCkBAIC01ODgsMjkgKzYwMSwyOSBAQAogI2RlZmluZSBFVEhUT09MX0dSRUdTCQkweDAwMDAwMDA0IC8qIEdldCBOSUMgcmVnaXN0ZXJzLiAqLwogI2RlZmluZSBFVEhUT09MX0dXT0wJCTB4MDAwMDAwMDUgLyogR2V0IHdha2Utb24tbGFuIG9wdGlvbnMuICovCiAjZGVmaW5lIEVUSFRPT0xfU1dPTAkJMHgwMDAwMDAwNiAvKiBTZXQgd2FrZS1vbi1sYW4gb3B0aW9ucy4gKi8KLSNkZWZpbmUgRVRIVE9PTF9HTVNHTFZMCTB4MDAwMDAwMDcgLyogR2V0IGRyaXZlciBtZXNzYWdlIGxldmVsICovCi0jZGVmaW5lIEVUSFRPT0xfU01TR0xWTAkweDAwMDAwMDA4IC8qIFNldCBkcml2ZXIgbXNnIGxldmVsLiAqLworI2RlZmluZSBFVEhUT09MX0dNU0dMVkwJCTB4MDAwMDAwMDcgLyogR2V0IGRyaXZlciBtZXNzYWdlIGxldmVsICovCisjZGVmaW5lIEVUSFRPT0xfU01TR0xWTAkJMHgwMDAwMDAwOCAvKiBTZXQgZHJpdmVyIG1zZyBsZXZlbC4gKi8KICNkZWZpbmUgRVRIVE9PTF9OV0FZX1JTVAkweDAwMDAwMDA5IC8qIFJlc3RhcnQgYXV0b25lZ290aWF0aW9uLiAqLwogI2RlZmluZSBFVEhUT09MX0dMSU5LCQkweDAwMDAwMDBhIC8qIEdldCBsaW5rIHN0YXR1cyAoZXRodG9vbF92YWx1ZSkgKi8KLSNkZWZpbmUgRVRIVE9PTF9HRUVQUk9NCTB4MDAwMDAwMGIgLyogR2V0IEVFUFJPTSBkYXRhICovCi0jZGVmaW5lIEVUSFRPT0xfU0VFUFJPTQkweDAwMDAwMDBjIC8qIFNldCBFRVBST00gZGF0YS4gKi8KKyNkZWZpbmUgRVRIVE9PTF9HRUVQUk9NCQkweDAwMDAwMDBiIC8qIEdldCBFRVBST00gZGF0YSAqLworI2RlZmluZSBFVEhUT09MX1NFRVBST00JCTB4MDAwMDAwMGMgLyogU2V0IEVFUFJPTSBkYXRhLiAqLwogI2RlZmluZSBFVEhUT09MX0dDT0FMRVNDRQkweDAwMDAwMDBlIC8qIEdldCBjb2FsZXNjZSBjb25maWcgKi8KICNkZWZpbmUgRVRIVE9PTF9TQ09BTEVTQ0UJMHgwMDAwMDAwZiAvKiBTZXQgY29hbGVzY2UgY29uZmlnLiAqLwogI2RlZmluZSBFVEhUT09MX0dSSU5HUEFSQU0JMHgwMDAwMDAxMCAvKiBHZXQgcmluZyBwYXJhbWV0ZXJzICovCiAjZGVmaW5lIEVUSFRPT0xfU1JJTkdQQVJBTQkweDAwMDAwMDExIC8qIFNldCByaW5nIHBhcmFtZXRlcnMuICovCiAjZGVmaW5lIEVUSFRPT0xfR1BBVVNFUEFSQU0JMHgwMDAwMDAxMiAvKiBHZXQgcGF1c2UgcGFyYW1ldGVycyAqLwogI2RlZmluZSBFVEhUT09MX1NQQVVTRVBBUkFNCTB4MDAwMDAwMTMgLyogU2V0IHBhdXNlIHBhcmFtZXRlcnMuICovCi0jZGVmaW5lIEVUSFRPT0xfR1JYQ1NVTQkweDAwMDAwMDE0IC8qIEdldCBSWCBodyBjc3VtIGVuYWJsZSAoZXRodG9vbF92YWx1ZSkgKi8KLSNkZWZpbmUgRVRIVE9PTF9TUlhDU1VNCTB4MDAwMDAwMTUgLyogU2V0IFJYIGh3IGNzdW0gZW5hYmxlIChldGh0b29sX3ZhbHVlKSAqLwotI2RlZmluZSBFVEhUT09MX0dUWENTVU0JMHgwMDAwMDAxNiAvKiBHZXQgVFggaHcgY3N1bSBlbmFibGUgKGV0aHRvb2xfdmFsdWUpICovCi0jZGVmaW5lIEVUSFRPT0xfU1RYQ1NVTQkweDAwMDAwMDE3IC8qIFNldCBUWCBodyBjc3VtIGVuYWJsZSAoZXRodG9vbF92YWx1ZSkgKi8KKyNkZWZpbmUgRVRIVE9PTF9HUlhDU1VNCQkweDAwMDAwMDE0IC8qIEdldCBSWCBodyBjc3VtIGVuYWJsZSAoZXRodG9vbF92YWx1ZSkgKi8KKyNkZWZpbmUgRVRIVE9PTF9TUlhDU1VNCQkweDAwMDAwMDE1IC8qIFNldCBSWCBodyBjc3VtIGVuYWJsZSAoZXRodG9vbF92YWx1ZSkgKi8KKyNkZWZpbmUgRVRIVE9PTF9HVFhDU1VNCQkweDAwMDAwMDE2IC8qIEdldCBUWCBodyBjc3VtIGVuYWJsZSAoZXRodG9vbF92YWx1ZSkgKi8KKyNkZWZpbmUgRVRIVE9PTF9TVFhDU1VNCQkweDAwMDAwMDE3IC8qIFNldCBUWCBodyBjc3VtIGVuYWJsZSAoZXRodG9vbF92YWx1ZSkgKi8KICNkZWZpbmUgRVRIVE9PTF9HU0cJCTB4MDAwMDAwMTggLyogR2V0IHNjYXR0ZXItZ2F0aGVyIGVuYWJsZQogCQkJCQkgICAgKiAoZXRodG9vbF92YWx1ZSkgKi8KICNkZWZpbmUgRVRIVE9PTF9TU0cJCTB4MDAwMDAwMTkgLyogU2V0IHNjYXR0ZXItZ2F0aGVyIGVuYWJsZQogCQkJCQkgICAgKiAoZXRodG9vbF92YWx1ZSkuICovCiAjZGVmaW5lIEVUSFRPT0xfVEVTVAkJMHgwMDAwMDAxYSAvKiBleGVjdXRlIE5JQyBzZWxmLXRlc3QuICovCiAjZGVmaW5lIEVUSFRPT0xfR1NUUklOR1MJMHgwMDAwMDAxYiAvKiBnZXQgc3BlY2lmaWVkIHN0cmluZyBzZXQgKi8KLSNkZWZpbmUgRVRIVE9PTF9QSFlTX0lECTB4MDAwMDAwMWMgLyogaWRlbnRpZnkgdGhlIE5JQyAqLworI2RlZmluZSBFVEhUT09MX1BIWVNfSUQJCTB4MDAwMDAwMWMgLyogaWRlbnRpZnkgdGhlIE5JQyAqLwogI2RlZmluZSBFVEhUT09MX0dTVEFUUwkJMHgwMDAwMDAxZCAvKiBnZXQgTklDLXNwZWNpZmljIHN0YXRpc3RpY3MgKi8KICNkZWZpbmUgRVRIVE9PTF9HVFNPCQkweDAwMDAwMDFlIC8qIEdldCBUU08gZW5hYmxlIChldGh0b29sX3ZhbHVlKSAqLwogI2RlZmluZSBFVEhUT09MX1NUU08JCTB4MDAwMDAwMWYgLyogU2V0IFRTTyBlbmFibGUgKGV0aHRvb2xfdmFsdWUpICovCkBAIC02MjEsOCArNjM0LDggQEAKICNkZWZpbmUgRVRIVE9PTF9TR1NPCQkweDAwMDAwMDI0IC8qIFNldCBHU08gZW5hYmxlIChldGh0b29sX3ZhbHVlKSAqLwogI2RlZmluZSBFVEhUT09MX0dGTEFHUwkJMHgwMDAwMDAyNSAvKiBHZXQgZmxhZ3MgYml0bWFwKGV0aHRvb2xfdmFsdWUpICovCiAjZGVmaW5lIEVUSFRPT0xfU0ZMQUdTCQkweDAwMDAwMDI2IC8qIFNldCBmbGFncyBiaXRtYXAoZXRodG9vbF92YWx1ZSkgKi8KLSNkZWZpbmUgRVRIVE9PTF9HUEZMQUdTCTB4MDAwMDAwMjcgLyogR2V0IGRyaXZlci1wcml2YXRlIGZsYWdzIGJpdG1hcCAqLwotI2RlZmluZSBFVEhUT09MX1NQRkxBR1MJMHgwMDAwMDAyOCAvKiBTZXQgZHJpdmVyLXByaXZhdGUgZmxhZ3MgYml0bWFwICovCisjZGVmaW5lIEVUSFRPT0xfR1BGTEFHUwkJMHgwMDAwMDAyNyAvKiBHZXQgZHJpdmVyLXByaXZhdGUgZmxhZ3MgYml0bWFwICovCisjZGVmaW5lIEVUSFRPT0xfU1BGTEFHUwkJMHgwMDAwMDAyOCAvKiBTZXQgZHJpdmVyLXByaXZhdGUgZmxhZ3MgYml0bWFwICovCiAKICNkZWZpbmUgRVRIVE9PTF9HUlhGSAkJMHgwMDAwMDAyOSAvKiBHZXQgUlggZmxvdyBoYXNoIGNvbmZpZ3VyYXRpb24gKi8KICNkZWZpbmUgRVRIVE9PTF9TUlhGSAkJMHgwMDAwMDAyYSAvKiBTZXQgUlggZmxvdyBoYXNoIGNvbmZpZ3VyYXRpb24gKi8KQEAgLTYzOSw2ICs2NTIsOCBAQAogI2RlZmluZSBFVEhUT09MX1NSWE5UVVBMRQkweDAwMDAwMDM1IC8qIEFkZCBhbiBuLXR1cGxlIGZpbHRlciB0byBkZXZpY2UgKi8KICNkZWZpbmUgRVRIVE9PTF9HUlhOVFVQTEUJMHgwMDAwMDAzNiAvKiBHZXQgbi10dXBsZSBmaWx0ZXJzIGZyb20gZGV2aWNlICovCiAjZGVmaW5lIEVUSFRPT0xfR1NTRVRfSU5GTwkweDAwMDAwMDM3IC8qIEdldCBzdHJpbmcgc2V0IGluZm8gKi8KKyNkZWZpbmUgRVRIVE9PTF9HUlhGSElORElSCTB4MDAwMDAwMzggLyogR2V0IFJYIGZsb3cgaGFzaCBpbmRpciduIHRhYmxlICovCisjZGVmaW5lIEVUSFRPT0xfU1JYRkhJTkRJUgkweDAwMDAwMDM5IC8qIFNldCBSWCBmbG93IGhhc2ggaW5kaXInbiB0YWJsZSAqLwogCiAvKiBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgY29kZSAqLwogI2RlZmluZSBTUEFSQ19FVEhfR1NFVAkJRVRIVE9PTF9HU0VUCkBAIC02NDcsMTggKzY2MiwxOCBAQAogLyogSW5kaWNhdGVzIHdoYXQgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgaW50ZXJmYWNlLiAqLwogI2RlZmluZSBTVVBQT1JURURfMTBiYXNlVF9IYWxmCQkoMSA8PCAwKQogI2RlZmluZSBTVVBQT1JURURfMTBiYXNlVF9GdWxsCQkoMSA8PCAxKQotI2RlZmluZSBTVVBQT1JURURfMTAwYmFzZVRfSGFsZgkoMSA8PCAyKQotI2RlZmluZSBTVVBQT1JURURfMTAwYmFzZVRfRnVsbAkoMSA8PCAzKQorI2RlZmluZSBTVVBQT1JURURfMTAwYmFzZVRfSGFsZgkJKDEgPDwgMikKKyNkZWZpbmUgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwJCSgxIDw8IDMpCiAjZGVmaW5lIFNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZgkoMSA8PCA0KQogI2RlZmluZSBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwJKDEgPDwgNSkKICNkZWZpbmUgU1VQUE9SVEVEX0F1dG9uZWcJCSgxIDw8IDYpCiAjZGVmaW5lIFNVUFBPUlRFRF9UUAkJCSgxIDw8IDcpCiAjZGVmaW5lIFNVUFBPUlRFRF9BVUkJCQkoMSA8PCA4KQogI2RlZmluZSBTVVBQT1JURURfTUlJCQkJKDEgPDwgOSkKLSNkZWZpbmUgU1VQUE9SVEVEX0ZJQlJFCQkoMSA8PCAxMCkKKyNkZWZpbmUgU1VQUE9SVEVEX0ZJQlJFCQkJKDEgPDwgMTApCiAjZGVmaW5lIFNVUFBPUlRFRF9CTkMJCQkoMSA8PCAxMSkKICNkZWZpbmUgU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbAkoMSA8PCAxMikKLSNkZWZpbmUgU1VQUE9SVEVEX1BhdXNlCQkoMSA8PCAxMykKKyNkZWZpbmUgU1VQUE9SVEVEX1BhdXNlCQkJKDEgPDwgMTMpCiAjZGVmaW5lIFNVUFBPUlRFRF9Bc3ltX1BhdXNlCQkoMSA8PCAxNCkKICNkZWZpbmUgU1VQUE9SVEVEXzI1MDBiYXNlWF9GdWxsCSgxIDw8IDE1KQogI2RlZmluZSBTVVBQT1JURURfQmFja3BsYW5lCQkoMSA8PCAxNikKQEAgLTY2OCw4ICs2ODMsOCBAQAogI2RlZmluZSBTVVBQT1JURURfMTAwMDBiYXNlUl9GRUMJKDEgPDwgMjApCiAKIC8qIEluZGljYXRlcyB3aGF0IGZlYXR1cmVzIGFyZSBhZHZlcnRpc2VkIGJ5IHRoZSBpbnRlcmZhY2UuICovCi0jZGVmaW5lIEFEVkVSVElTRURfMTBiYXNlVF9IYWxmCSgxIDw8IDApCi0jZGVmaW5lIEFEVkVSVElTRURfMTBiYXNlVF9GdWxsCSgxIDw8IDEpCisjZGVmaW5lIEFEVkVSVElTRURfMTBiYXNlVF9IYWxmCQkoMSA8PCAwKQorI2RlZmluZSBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbAkJKDEgPDwgMSkKICNkZWZpbmUgQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmCSgxIDw8IDIpCiAjZGVmaW5lIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbAkoMSA8PCAzKQogI2RlZmluZSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmCSgxIDw8IDQpCkBAIC03MDgsMTIgKzcyMywxMiBAQAogI2RlZmluZSBEVVBMRVhfRlVMTAkJMHgwMQogCiAvKiBXaGljaCBjb25uZWN0b3IgcG9ydC4gKi8KLSNkZWZpbmUgUE9SVF9UUAkJMHgwMAorI2RlZmluZSBQT1JUX1RQCQkJMHgwMAogI2RlZmluZSBQT1JUX0FVSQkJMHgwMQogI2RlZmluZSBQT1JUX01JSQkJMHgwMgogI2RlZmluZSBQT1JUX0ZJQlJFCQkweDAzCiAjZGVmaW5lIFBPUlRfQk5DCQkweDA0Ci0jZGVmaW5lIFBPUlRfREEJCTB4MDUKKyNkZWZpbmUgUE9SVF9EQQkJCTB4MDUKICNkZWZpbmUgUE9SVF9OT05FCQkweGVmCiAjZGVmaW5lIFBPUlRfT1RIRVIJCTB4ZmYKIApAQCAtNzI3LDcgKzc0Miw3IEBACiAvKiBFbmFibGUgb3IgZGlzYWJsZSBhdXRvbmVnb3RpYXRpb24uICBJZiB0aGlzIGlzIHNldCB0byBlbmFibGUsCiAgKiB0aGUgZm9yY2VkIGxpbmsgbW9kZXMgYWJvdmUgYXJlIGNvbXBsZXRlbHkgaWdub3JlZC4KICAqLwotI2RlZmluZSBBVVRPTkVHX0RJU0FCTEUJMHgwMAorI2RlZmluZSBBVVRPTkVHX0RJU0FCTEUJCTB4MDAKICNkZWZpbmUgQVVUT05FR19FTkFCTEUJCTB4MDEKIAogLyogTW9kZSBNREkgb3IgTURJLVggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmIuaCBiL2luY2x1ZGUvbGludXgvZmIuaAppbmRleCA4ZTVhOWRmLi4wYzU2NTljIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZiLmgKKysrIGIvaW5jbHVkZS9saW51eC9mYi5oCkBAIC0zLDYgKzMsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgva2dkYi5oPgorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogLyogRGVmaW5pdGlvbnMgb2YgZnJhbWUgYnVmZmVycwkJCQkJCSovCiAKQEAgLTYwNyw2ICs2MTAsMTIgQEAKICAqIExPQ0tJTkcgTk9URTogdGhvc2UgZnVuY3Rpb25zIG11c3QgX0FMTF8gYmUgY2FsbGVkIHdpdGggdGhlIGNvbnNvbGUKICAqIHNlbWFwaG9yZSBoZWxkLCB0aGlzIGlzIHRoZSBvbmx5IHN1aXRhYmxlIGxvY2tpbmcgbWVjaGFuaXNtIHdlIGhhdmUKICAqIGluIDIuNi4gU29tZSBtYXkgYmUgY2FsbGVkIGF0IGludGVycnVwdCB0aW1lIGF0IHRoaXMgcG9pbnQgdGhvdWdoLgorICoKKyAqIFRoZSBleGNlcHRpb24gdG8gdGhpcyBpcyB0aGUgZGVidWcgcmVsYXRlZCBob29rcy4gIFB1dHRpbmcgdGhlIGZiCisgKiBpbnRvIGEgZGVidWcgc3RhdGUgKGUuZy4gZmxpcHBpbmcgdG8gdGhlIGtlcm5lbCBjb25zb2xlKSBhbmQgcmVzdG9yaW5nCisgKiBpdCBtdXN0IGJlIGRvbmUgaW4gYSBsb2NrLWZyZWUgbWFubmVyLCBzbyBsb3cgbGV2ZWwgZHJpdmVycyBzaG91bGQKKyAqIGtlZXAgdHJhY2sgb2YgdGhlIGluaXRpYWwgY29uc29sZSAoaWYgYXBwbGljYWJsZSkgYW5kIG1heSBuZWVkIHRvCisgKiBwZXJmb3JtIGRpcmVjdCwgdW5sb2NrZWQgaGFyZHdhcmUgd3JpdGVzIGluIHRoZXNlIGhvb2tzLgogICovCiAKIHN0cnVjdCBmYl9vcHMgewpAQCAtNjc2LDYgKzY4NSwxMCBAQAogCiAJLyogdGVhcmRvd24gYW55IHJlc291cmNlcyB0byBkbyB3aXRoIHRoaXMgZnJhbWVidWZmZXIgKi8KIAl2b2lkICgqZmJfZGVzdHJveSkoc3RydWN0IGZiX2luZm8gKmluZm8pOworCisJLyogY2FsbGVkIGF0IEtEQiBlbnRlciBhbmQgbGVhdmUgdGltZSB0byBwcmVwYXJlIHRoZSBjb25zb2xlICovCisJaW50ICgqZmJfZGVidWdfZW50ZXIpKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKKwlpbnQgKCpmYl9kZWJ1Z19sZWF2ZSkoc3RydWN0IGZiX2luZm8gKmluZm8pOwogfTsKIAogI2lmZGVmIENPTkZJR19GQl9USUxFQkxJVFRJTkcKQEAgLTg3Myw2ICs4ODYsOCBAQAogc3RhdGljIGlubGluZSBzdHJ1Y3QgYXBlcnR1cmVzX3N0cnVjdCAqYWxsb2NfYXBlcnR1cmVzKHVuc2lnbmVkIGludCBtYXhfbnVtKSB7CiAJc3RydWN0IGFwZXJ0dXJlc19zdHJ1Y3QgKmEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXBlcnR1cmVzX3N0cnVjdCkKIAkJCSsgbWF4X251bSAqIHNpemVvZihzdHJ1Y3QgYXBlcnR1cmUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWEpCisJCXJldHVybiBOVUxMOwogCWEtPmNvdW50ID0gbWF4X251bTsKIAlyZXR1cm4gYTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmR0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9mZHRhYmxlLmgKaW5kZXggMDEzZGM1Mi4uZjU5ZWQyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mZHRhYmxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9mZHRhYmxlLmgKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKQEAgLTYxLDcgKzYyLDggQEAKIAkocmN1X2RlcmVmZXJlbmNlX2NoZWNrKChmZHRmZCksIFwKIAkJCSAgICAgICByY3VfcmVhZF9sb2NrX2hlbGQoKSB8fCBcCiAJCQkgICAgICAgbG9ja2RlcF9pc19oZWxkKCYoZmlsZXMpLT5maWxlX2xvY2spIHx8IFwKLQkJCSAgICAgICBhdG9taWNfcmVhZCgmKGZpbGVzKS0+Y291bnQpID09IDEpKQorCQkJICAgICAgIGF0b21pY19yZWFkKCYoZmlsZXMpLT5jb3VudCkgPT0gMSB8fCBcCisJCQkgICAgICAgcmN1X215X3RocmVhZF9ncm91cF9lbXB0eSgpKSkKIAogI2RlZmluZSBmaWxlc19mZHRhYmxlKGZpbGVzKSBcCiAJCShyY3VfZGVyZWZlcmVuY2VfY2hlY2tfZmR0YWJsZSgoZmlsZXMpLCAoZmlsZXMpLT5mZHQpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKaW5kZXggMTUxZjVkNy4uNjliNDNkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCkBAIC05MSw2ICs5MSw1NCBAQAogI2RlZmluZSAgICAgICAgIEJQRl9UQVggICAgICAgICAweDAwCiAjZGVmaW5lICAgICAgICAgQlBGX1RYQSAgICAgICAgIDB4ODAKIAorZW51bSB7CisJQlBGX1NfUkVUX0sgPSAwLAorCUJQRl9TX1JFVF9BLAorCUJQRl9TX0FMVV9BRERfSywKKwlCUEZfU19BTFVfQUREX1gsCisJQlBGX1NfQUxVX1NVQl9LLAorCUJQRl9TX0FMVV9TVUJfWCwKKwlCUEZfU19BTFVfTVVMX0ssCisJQlBGX1NfQUxVX01VTF9YLAorCUJQRl9TX0FMVV9ESVZfWCwKKwlCUEZfU19BTFVfQU5EX0ssCisJQlBGX1NfQUxVX0FORF9YLAorCUJQRl9TX0FMVV9PUl9LLAorCUJQRl9TX0FMVV9PUl9YLAorCUJQRl9TX0FMVV9MU0hfSywKKwlCUEZfU19BTFVfTFNIX1gsCisJQlBGX1NfQUxVX1JTSF9LLAorCUJQRl9TX0FMVV9SU0hfWCwKKwlCUEZfU19BTFVfTkVHLAorCUJQRl9TX0xEX1dfQUJTLAorCUJQRl9TX0xEX0hfQUJTLAorCUJQRl9TX0xEX0JfQUJTLAorCUJQRl9TX0xEX1dfTEVOLAorCUJQRl9TX0xEX1dfSU5ELAorCUJQRl9TX0xEX0hfSU5ELAorCUJQRl9TX0xEX0JfSU5ELAorCUJQRl9TX0xEX0lNTSwKKwlCUEZfU19MRFhfV19MRU4sCisJQlBGX1NfTERYX0JfTVNILAorCUJQRl9TX0xEWF9JTU0sCisJQlBGX1NfTUlTQ19UQVgsCisJQlBGX1NfTUlTQ19UWEEsCisJQlBGX1NfQUxVX0RJVl9LLAorCUJQRl9TX0xEX01FTSwKKwlCUEZfU19MRFhfTUVNLAorCUJQRl9TX1NULAorCUJQRl9TX1NUWCwKKwlCUEZfU19KTVBfSkEsCisJQlBGX1NfSk1QX0pFUV9LLAorCUJQRl9TX0pNUF9KRVFfWCwKKwlCUEZfU19KTVBfSkdFX0ssCisJQlBGX1NfSk1QX0pHRV9YLAorCUJQRl9TX0pNUF9KR1RfSywKKwlCUEZfU19KTVBfSkdUX1gsCisJQlBGX1NfSk1QX0pTRVRfSywKKwlCUEZfU19KTVBfSlNFVF9YLAorfTsKKwogI2lmbmRlZiBCUEZfTUFYSU5TTlMKICNkZWZpbmUgQlBGX01BWElOU05TIDQwOTYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IDY4Y2ExYjAuLmU1MTA2ZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTUzLDYgKzUzLDcgQEAKICNkZWZpbmUgTUFZX0FQUEVORCA4CiAjZGVmaW5lIE1BWV9BQ0NFU1MgMTYKICNkZWZpbmUgTUFZX09QRU4gMzIKKyNkZWZpbmUgTUFZX0NIRElSIDY0CiAKIC8qCiAgKiBmbGFncyBpbiBmaWxlLmZfbW9kZS4gIE5vdGUgdGhhdCBGTU9ERV9SRUFEIGFuZCBGTU9ERV9XUklURSBtdXN0IGNvcnJlc3BvbmQKQEAgLTQxNSw3ICs0MTYsOCBAQAogdHlwZWRlZiBpbnQgKGdldF9ibG9ja190KShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssCiAJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSk7CiB0eXBlZGVmIHZvaWQgKGRpb19pb2RvbmVfdCkoc3RydWN0IGtpb2NiICppb2NiLCBsb2ZmX3Qgb2Zmc2V0LAotCQkJc3NpemVfdCBieXRlcywgdm9pZCAqcHJpdmF0ZSk7CisJCQlzc2l6ZV90IGJ5dGVzLCB2b2lkICpwcml2YXRlLCBpbnQgcmV0LAorCQkJYm9vbCBpc19hc3luYyk7CiAKIC8qCiAgKiBBdHRyaWJ1dGUgZmxhZ3MuICBUaGVzZSBzaG91bGQgYmUgb3ItZWQgdG9nZXRoZXIgdG8gZmlndXJlIG91dCB3aGF0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzY2FjaGUuaCBiL2luY2x1ZGUvbGludXgvZnNjYWNoZS5oCmluZGV4IDU5NWNlNDkuLmVjMGRhZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnNjYWNoZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZnNjYWNoZS5oCkBAIC04NSw3ICs4NSw3IEBACiAKIAkvKiBnZXQgYW4gaW5kZXgga2V5CiAJICogLSBzaG91bGQgc3RvcmUgdGhlIGtleSBkYXRhIGluIHRoZSBidWZmZXIKLQkgKiAtIHNob3VsZCByZXR1cm4gdGhlIGFtb3VudCBvZiBhbW91bnQgc3RvcmVkCisJICogLSBzaG91bGQgcmV0dXJuIHRoZSBhbW91bnQgb2YgZGF0YSBzdG9yZWQKIAkgKiAtIG5vdCBwZXJtaXR0ZWQgdG8gcmV0dXJuIGFuIGVycm9yCiAJICogLSB0aGUgbmV0ZnMgZGF0YSBmcm9tIHRoZSBjb29raWUgYmVpbmcgdXNlZCBhcyB0aGUgc291cmNlIGlzCiAJICogICBwcmVzZW50ZWQKQEAgLTQ1NCw2ICs0NTQsNyBAQAogICogQGNvb2tpZTogVGhlIGNvb2tpZSByZXByZXNlbnRpbmcgdGhlIGNhY2hlIG9iamVjdAogICogQG1hcHBpbmc6IFRoZSBuZXRmcyBpbm9kZSBtYXBwaW5nIHRvIHdoaWNoIHRoZSBwYWdlcyB3aWxsIGJlIGF0dGFjaGVkCiAgKiBAcGFnZXM6IEEgbGlzdCBvZiBwb3RlbnRpYWwgbmV0ZnMgcGFnZXMgdG8gYmUgZmlsbGVkCisgKiBAbnJfcGFnZXM6IE51bWJlciBvZiBwYWdlcyB0byBiZSByZWFkIGFuZC9vciBhbGxvY2F0ZWQKICAqIEBlbmRfaW9fZnVuYzogVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIGFuZCBpZiBlYWNoIHBhZ2UgaXMgZmlsbGVkCiAgKiBAY29udGV4dDogQW4gYXJiaXRyYXJ5IHBpZWNlIG9mIGRhdGEgdG8gcGFzcyBvbiB0byBlbmRfaW9fZnVuYygpCiAgKiBAZ2ZwOiBUaGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBtZW1vcnkgYWxsb2NhdGlvbiBzaG91bGQgYmUgbWFkZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mc2wtZGl1LWZiLmggYi9pbmNsdWRlL2xpbnV4L2ZzbC1kaXUtZmIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy92aWRlby9mc2wtZGl1LWZiLmgKcmVuYW1lIHRvIGluY2x1ZGUvbGludXgvZnNsLWRpdS1mYi5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9mdHJhY2UuaAppbmRleCA0MWU0NjMzLi5kY2Q2YTdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZnRyYWNlLmgKQEAgLTEsMyArMSw4IEBACisvKgorICogRnRyYWNlIGhlYWRlci4gIEZvciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGJleW9uZCB0aGUgcmFuZG9tIGNvbW1lbnRzCisgKiBzY2F0dGVyZWQgYmVsb3csIHNlZTogRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UtZGVzaWduLnR4dAorICovCisKICNpZm5kZWYgX0xJTlVYX0ZUUkFDRV9ICiAjZGVmaW5lIF9MSU5VWF9GVFJBQ0VfSAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oIGIvaW5jbHVkZS9saW51eC9mdHJhY2VfZXZlbnQuaAppbmRleCAzMTY3ZjJkLi4wMmI4YjI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvZnRyYWNlX2V2ZW50LmgKQEAgLTExLDggKzExLDYgQEAKIHN0cnVjdCB0cmFjZXI7CiBzdHJ1Y3QgZGVudHJ5OwogCi1ERUNMQVJFX1BFUl9DUFUoc3RydWN0IHRyYWNlX3NlcSwgZnRyYWNlX2V2ZW50X3NlcSk7Ci0KIHN0cnVjdCB0cmFjZV9wcmludF9mbGFncyB7CiAJdW5zaWduZWQgbG9uZwkJbWFzazsKIAljb25zdCBjaGFyCQkqbmFtZTsKQEAgLTU4LDYgKzU2LDkgQEAKIAlzdHJ1Y3QgcmluZ19idWZmZXJfaXRlcgkqYnVmZmVyX2l0ZXJbTlJfQ1BVU107CiAJdW5zaWduZWQgbG9uZwkJaXRlcl9mbGFnczsKIAorCS8qIHRyYWNlX3NlcSBmb3IgX19wcmludF9mbGFncygpIGFuZCBfX3ByaW50X3N5bWJvbGljKCkgZXRjLiAqLworCXN0cnVjdCB0cmFjZV9zZXEJdG1wX3NlcTsKKwogCS8qIFRoZSBiZWxvdyBpcyB6ZXJvZWQgb3V0IGluIHBpcGVfcmVhZCAqLwogCXN0cnVjdCB0cmFjZV9zZXEJc2VxOwogCXN0cnVjdCB0cmFjZV9lbnRyeQkqZW50OwpAQCAtMTQ2LDE0ICsxNDcsMTkgQEAKIAlpbnQJCQkoKnJhd19pbml0KShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKik7CiB9OwogCitleHRlcm4gaW50IGZ0cmFjZV9ldmVudF9yZWcoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudCwKKwkJCSAgICBlbnVtIHRyYWNlX3JlZyB0eXBlKTsKKwogZW51bSB7CiAJVFJBQ0VfRVZFTlRfRkxfRU5BQkxFRF9CSVQsCiAJVFJBQ0VfRVZFTlRfRkxfRklMVEVSRURfQklULAorCVRSQUNFX0VWRU5UX0ZMX1JFQ09SREVEX0NNRF9CSVQsCiB9OwogCiBlbnVtIHsKLQlUUkFDRV9FVkVOVF9GTF9FTkFCTEVECT0gKDEgPDwgVFJBQ0VfRVZFTlRfRkxfRU5BQkxFRF9CSVQpLAotCVRSQUNFX0VWRU5UX0ZMX0ZJTFRFUkVECT0gKDEgPDwgVFJBQ0VfRVZFTlRfRkxfRklMVEVSRURfQklUKSwKKwlUUkFDRV9FVkVOVF9GTF9FTkFCTEVECQk9ICgxIDw8IFRSQUNFX0VWRU5UX0ZMX0VOQUJMRURfQklUKSwKKwlUUkFDRV9FVkVOVF9GTF9GSUxURVJFRAkJPSAoMSA8PCBUUkFDRV9FVkVOVF9GTF9GSUxURVJFRF9CSVQpLAorCVRSQUNFX0VWRU5UX0ZMX1JFQ09SREVEX0NNRAk9ICgxIDw8IFRSQUNFX0VWRU5UX0ZMX1JFQ09SREVEX0NNRF9CSVQpLAogfTsKIAogc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIHsKQEAgLTE3MSw2ICsxNzcsNyBAQAogCSAqIDMyIGJpdCBmbGFnczoKIAkgKiAgIGJpdCAxOgkJZW5hYmxlZAogCSAqICAgYml0IDI6CQlmaWx0ZXJfYWN0aXZlCisJICogICBiaXQgMzoJCWVuYWJsZWQgY21kIHJlY29yZAogCSAqCiAJICogQ2hhbmdlcyB0byBmbGFncyBtdXN0IGhvbGQgdGhlIGV2ZW50X211dGV4LgogCSAqCkBAIC0yNTcsOCArMjY0LDcgQEAKIHBlcmZfdHJhY2VfYnVmX3N1Ym1pdCh2b2lkICpyYXdfZGF0YSwgaW50IHNpemUsIGludCByY3R4LCB1NjQgYWRkciwKIAkJICAgICAgIHU2NCBjb3VudCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHZvaWQgKmhlYWQpCiB7Ci0JcGVyZl90cF9ldmVudChhZGRyLCBjb3VudCwgcmF3X2RhdGEsIHNpemUsIHJlZ3MsIGhlYWQpOwotCXBlcmZfc3dldmVudF9wdXRfcmVjdXJzaW9uX2NvbnRleHQocmN0eCk7CisJcGVyZl90cF9ldmVudChhZGRyLCBjb3VudCwgcmF3X2RhdGEsIHNpemUsIHJlZ3MsIGhlYWQsIHJjdHgpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGlkLmggYi9pbmNsdWRlL2xpbnV4L2hpZC5oCmluZGV4IDg5NTAwMWYuLjQyYTBmMWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGlkLmgKKysrIGIvaW5jbHVkZS9saW51eC9oaWQuaApAQCAtMzExLDYgKzMxMSw3IEBACiAjZGVmaW5lIEhJRF9RVUlSS19ISURERVZfRk9SQ0UJCQkweDAwMDAwMDEwCiAjZGVmaW5lIEhJRF9RVUlSS19CQURQQUQJCQkweDAwMDAwMDIwCiAjZGVmaW5lIEhJRF9RVUlSS19NVUxUSV9JTlBVVAkJCTB4MDAwMDAwNDAKKyNkZWZpbmUgSElEX1FVSVJLX0hJRElOUFVUX0ZPUkNFCQkweDAwMDAwMDgwCiAjZGVmaW5lIEhJRF9RVUlSS19TS0lQX09VVFBVVF9SRVBPUlRTCQkweDAwMDEwMDAwCiAjZGVmaW5lIEhJRF9RVUlSS19GVUxMU1BFRURfSU5URVJWQUwJCTB4MTAwMDAwMDAKICNkZWZpbmUgSElEX1FVSVJLX05PX0lOSVRfUkVQT1JUUwkJMHgyMDAwMDAwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMvYWRwNTU4OC5oIGIvaW5jbHVkZS9saW51eC9pMmMvYWRwNTU4OC5oCmluZGV4IDAyYzlhZjMuLjI2OTE4MWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjL2FkcDU1ODguaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy9hZHA1NTg4LmgKQEAgLTc4LDYgKzc4LDQwIEBACiAKICNkZWZpbmUgQURQNTU4OF9LRVlNQVBTSVpFCTgwCiAKKyNkZWZpbmUgR1BJX1BJTl9ST1cwIDk3CisjZGVmaW5lIEdQSV9QSU5fUk9XMSA5OAorI2RlZmluZSBHUElfUElOX1JPVzIgOTkKKyNkZWZpbmUgR1BJX1BJTl9ST1czIDEwMAorI2RlZmluZSBHUElfUElOX1JPVzQgMTAxCisjZGVmaW5lIEdQSV9QSU5fUk9XNSAxMDIKKyNkZWZpbmUgR1BJX1BJTl9ST1c2IDEwMworI2RlZmluZSBHUElfUElOX1JPVzcgMTA0CisjZGVmaW5lIEdQSV9QSU5fQ09MMCAxMDUKKyNkZWZpbmUgR1BJX1BJTl9DT0wxIDEwNgorI2RlZmluZSBHUElfUElOX0NPTDIgMTA3CisjZGVmaW5lIEdQSV9QSU5fQ09MMyAxMDgKKyNkZWZpbmUgR1BJX1BJTl9DT0w0IDEwOQorI2RlZmluZSBHUElfUElOX0NPTDUgMTEwCisjZGVmaW5lIEdQSV9QSU5fQ09MNiAxMTEKKyNkZWZpbmUgR1BJX1BJTl9DT0w3IDExMgorI2RlZmluZSBHUElfUElOX0NPTDggMTEzCisjZGVmaW5lIEdQSV9QSU5fQ09MOSAxMTQKKworI2RlZmluZSBHUElfUElOX1JPV19CQVNFIEdQSV9QSU5fUk9XMAorI2RlZmluZSBHUElfUElOX1JPV19FTkQgR1BJX1BJTl9ST1c3CisjZGVmaW5lIEdQSV9QSU5fQ09MX0JBU0UgR1BJX1BJTl9DT0wwCisjZGVmaW5lIEdQSV9QSU5fQ09MX0VORCBHUElfUElOX0NPTDkKKworI2RlZmluZSBHUElfUElOX0JBU0UgR1BJX1BJTl9ST1dfQkFTRQorI2RlZmluZSBHUElfUElOX0VORCBHUElfUElOX0NPTF9FTkQKKworI2RlZmluZSBBRFA1NTg4X0dQSU1BUFNJWkVfTUFYIChHUElfUElOX0VORCAtIEdQSV9QSU5fQkFTRSArIDEpCisKK3N0cnVjdCBhZHA1NTg4X2dwaV9tYXAgeworCXVuc2lnbmVkIHNob3J0IHBpbjsKKwl1bnNpZ25lZCBzaG9ydCBzd19ldnQ7Cit9OworCiBzdHJ1Y3QgYWRwNTU4OF9rcGFkX3BsYXRmb3JtX2RhdGEgewogCWludCByb3dzOwkJCS8qIE51bWJlciBvZiByb3dzICovCiAJaW50IGNvbHM7CQkJLyogTnVtYmVyIG9mIGNvbHVtbnMgKi8KQEAgLTg3LDYgKzEyMSw5IEBACiAJdW5zaWduZWQgZW5fa2V5bG9jazoxOwkJLyogRW5hYmxlIEtleSBMb2NrIGZlYXR1cmUgKi8KIAl1bnNpZ25lZCBzaG9ydCB1bmxvY2tfa2V5MTsJLyogVW5sb2NrIEtleSAxICovCiAJdW5zaWduZWQgc2hvcnQgdW5sb2NrX2tleTI7CS8qIFVubG9jayBLZXkgMiAqLworCWNvbnN0IHN0cnVjdCBhZHA1NTg4X2dwaV9tYXAgKmdwaW1hcDsKKwl1bnNpZ25lZCBzaG9ydCBncGltYXBzaXplOworCWNvbnN0IHN0cnVjdCBhZHA1NTg4X2dwaW9fcGxhdGZvcm1fZGF0YSAqZ3Bpb19kYXRhOwogfTsKIAogc3RydWN0IGFkcDU1ODhfZ3Bpb19wbGF0Zm9ybV9kYXRhIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjL21jcy5oIGIvaW5jbHVkZS9saW51eC9pMmMvbWNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI1YWU3YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaTJjL21jcy5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uTHRkCisgKiBBdXRob3I6IEpvb255b3VuZyBTaGltIDxqeTA5MjIuc2hpbUBzYW1zdW5nLmNvbT4KKyAqIEF1dGhvcjogSGV1bmdKdW4gS2ltIDxyaXZlcmZ1bC5raW1Ac2Ftc3VuZy5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19MSU5VWF9NQ1NfSAorI2RlZmluZSBfX0xJTlVYX01DU19ICisKKyNkZWZpbmUgTUNTX0tFWV9NQVAodiwgYykJKCgoKHYpICYgMHhmZikgPDwgMTYpIHwgKChjKSAmIDB4ZmZmZikpCisjZGVmaW5lIE1DU19LRVlfVkFMKHYpCQkoKCh2KSA+PiAxNikgJiAweGZmKQorI2RlZmluZSBNQ1NfS0VZX0NPREUodikJCSgodikgJiAweGZmZmYpCisKK3N0cnVjdCBtY3NfcGxhdGZvcm1fZGF0YSB7CisJdm9pZCAoKmNmZ19waW4pKHZvaWQpOworCisJLyogdG91Y2hzY3JlZW4gKi8KKwl1bnNpZ25lZCBpbnQgeF9zaXplOworCXVuc2lnbmVkIGludCB5X3NpemU7CisKKwkvKiB0b3VjaGtleSAqLworCWNvbnN0IHUzMiAqa2V5bWFwOworCXVuc2lnbmVkIGludCBrZXltYXBfc2l6ZTsKKwl1bnNpZ25lZCBpbnQga2V5X21heHZhbDsKKwlib29sIG5vX2F1dG9yZXBlYXQ7Cit9OworCisjZW5kaWYJLyogX19MSU5VWF9NQ1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMvbWNzNTAwMF90cy5oIGIvaW5jbHVkZS9saW51eC9pMmMvbWNzNTAwMF90cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTExN2I1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvaTJjL21jczUwMDBfdHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qCi0gKiBtY3M1MDAwX3RzLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby5MdGQKLSAqIEF1dGhvcjogSm9vbnlvdW5nIFNoaW0gPGp5MDkyMi5zaGltQHNhbXN1bmcuY29tPgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqLwotCi0jaWZuZGVmIF9fTElOVVhfTUNTNTAwMF9UU19ICi0jZGVmaW5lIF9fTElOVVhfTUNTNTAwMF9UU19ICi0KLS8qIHBsYXRmb3JtIGRhdGEgZm9yIHRoZSBNRUxGQVMgTUNTLTUwMDAgdG91Y2hzY3JlZW4gZHJpdmVyICovCi1zdHJ1Y3QgbWNzNTAwMF90c19wbGF0Zm9ybV9kYXRhIHsKLQl2b2lkICgqY2ZnX3Bpbikodm9pZCk7Ci0JaW50IHhfc2l6ZTsKLQlpbnQgeV9zaXplOwotfTsKLQotI2VuZGlmCS8qIF9fTElOVVhfTUNTNTAwMF9UU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy9xdDYwMjI0MF90cy5oIGIvaW5jbHVkZS9saW51eC9pMmMvcXQ2MDIyNDBfdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTAzM2UxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pMmMvcXQ2MDIyNDBfdHMuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQVQ0MlFUNjAyMjQwL0FUTVhUMjI0IFRvdWNoc2NyZWVuIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLkx0ZAorICogQXV0aG9yOiBKb29ueW91bmcgU2hpbSA8ankwOTIyLnNoaW1Ac2Ftc3VuZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfUVQ2MDIyNDBfVFNfSAorI2RlZmluZSBfX0xJTlVYX1FUNjAyMjQwX1RTX0gKKworLyogT3JpZW50ICovCisjZGVmaW5lIFFUNjAyMjQwX05PUk1BTAkJCTB4MAorI2RlZmluZSBRVDYwMjI0MF9ESUFHT05BTAkJMHgxCisjZGVmaW5lIFFUNjAyMjQwX0hPUklaT05UQUxfRkxJUAkweDIKKyNkZWZpbmUgUVQ2MDIyNDBfUk9UQVRFRF85MF9DT1VOVEVSCTB4MworI2RlZmluZSBRVDYwMjI0MF9WRVJUSUNBTF9GTElQCQkweDQKKyNkZWZpbmUgUVQ2MDIyNDBfUk9UQVRFRF85MAkJMHg1CisjZGVmaW5lIFFUNjAyMjQwX1JPVEFURURfMTgwCQkweDYKKyNkZWZpbmUgUVQ2MDIyNDBfRElBR09OQUxfQ09VTlRFUgkweDcKKworLyogVGhlIHBsYXRmb3JtIGRhdGEgZm9yIHRoZSBBVDQyUVQ2MDIyNDAvQVRNWFQyMjQgdG91Y2hzY3JlZW4gZHJpdmVyICovCitzdHJ1Y3QgcXQ2MDIyNDBfcGxhdGZvcm1fZGF0YSB7CisJdW5zaWduZWQgaW50IHhfbGluZTsKKwl1bnNpZ25lZCBpbnQgeV9saW5lOworCXVuc2lnbmVkIGludCB4X3NpemU7CisJdW5zaWduZWQgaW50IHlfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgYmxlbjsKKwl1bnNpZ25lZCBpbnQgdGhyZXNob2xkOworCXVuc2lnbmVkIGludCB2b2x0YWdlOworCXVuc2lnbmVkIGNoYXIgb3JpZW50OworfTsKKworI2VuZGlmIC8qIF9fTElOVVhfUVQ2MDIyNDBfVFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pODA0Mi5oIGIvaW5jbHVkZS9saW51eC9pODA0Mi5oCmluZGV4IDliZjY4NzAuLmE5ODZmZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTgwNDIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2k4MDQyLmgKQEAgLTQ2LDMxICs0NiwzMSBAQAogCiAjZWxzZQogCi12b2lkIGk4MDQyX2xvY2tfY2hpcCh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIGk4MDQyX2xvY2tfY2hpcCh2b2lkKQogewogfQogCi12b2lkIGk4MDQyX3VubG9ja19jaGlwKHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgaTgwNDJfdW5sb2NrX2NoaXAodm9pZCkKIHsKIH0KIAotaW50IGk4MDQyX2NvbW1hbmQodW5zaWduZWQgY2hhciAqcGFyYW0sIGludCBjb21tYW5kKQorc3RhdGljIGlubGluZSBpbnQgaTgwNDJfY29tbWFuZCh1bnNpZ25lZCBjaGFyICpwYXJhbSwgaW50IGNvbW1hbmQpCiB7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLWJvb2wgaTgwNDJfY2hlY2tfcG9ydF9vd25lcihjb25zdCBzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQorc3RhdGljIGlubGluZSBib29sIGk4MDQyX2NoZWNrX3BvcnRfb3duZXIoY29uc3Qgc3RydWN0IHNlcmlvICpzZXJpbykKIHsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLWludCBpODA0Ml9pbnN0YWxsX2ZpbHRlcihib29sICgqZmlsdGVyKSh1bnNpZ25lZCBjaGFyIGRhdGEsIHVuc2lnbmVkIGNoYXIgc3RyLAorc3RhdGljIGlubGluZSBpbnQgaTgwNDJfaW5zdGFsbF9maWx0ZXIoYm9vbCAoKmZpbHRlcikodW5zaWduZWQgY2hhciBkYXRhLCB1bnNpZ25lZCBjaGFyIHN0ciwKIAkJCQkJc3RydWN0IHNlcmlvICpzZXJpbykpCiB7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLWludCBpODA0Ml9yZW1vdmVfZmlsdGVyKGJvb2wgKCpmaWx0ZXIpKHVuc2lnbmVkIGNoYXIgZGF0YSwgdW5zaWduZWQgY2hhciBzdHIsCitzdGF0aWMgaW5saW5lIGludCBpODA0Ml9yZW1vdmVfZmlsdGVyKGJvb2wgKCpmaWx0ZXIpKHVuc2lnbmVkIGNoYXIgZGF0YSwgdW5zaWduZWQgY2hhciBzdHIsCiAJCQkJICAgICAgIHN0cnVjdCBzZXJpbyAqc2VyaW8pKQogewogCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZGUuaCBiL2luY2x1ZGUvbGludXgvaWRlLmgKaW5kZXggN2IwMmFhNS4uMDcyZmU4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lkZS5oCkBAIC00NTgsNyArNDU4LDcgQEAKIAlJREVfREZMQUdfRE9PUkxPQ0tJTkcJCT0gKDEgPDwgMTUpLAogCS8qIGRpc2FsbG93IERNQSAqLwogCUlERV9ERkxBR19OT0RNQQkJCT0gKDEgPDwgMTYpLAotCS8qIHBvd2VybWFuYWdtZW50IHRvbGQgdXMgbm90IHRvIGRvIGFueXRoaW5nLCBzbyBzbGVlcCBuaWNlbHkgKi8KKwkvKiBwb3dlcm1hbmFnZW1lbnQgdG9sZCB1cyBub3QgdG8gZG8gYW55dGhpbmcsIHNvIHNsZWVwIG5pY2VseSAqLwogCUlERV9ERkxBR19CTE9DS0VECQk9ICgxIDw8IDE3KSwKIAkvKiBzbGVlcGluZyAmIHNsZWVwIGZpZWxkIHZhbGlkICovCiAJSURFX0RGTEFHX1NMRUVQSU5HCQk9ICgxIDw8IDE4KSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWYuaCBiL2luY2x1ZGUvbGludXgvaWYuaAppbmRleCBiZTM1MGU2Li41MzU1OGVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZi5oCkBAIC03Myw2ICs3Myw4IEBACiAjZGVmaW5lIElGRl9ET05UX0JSSURHRSAweDgwMAkJLyogZGlzYWxsb3cgYnJpZGdpbmcgdGhpcyBldGhlciBkZXYgKi8KICNkZWZpbmUgSUZGX0lOX05FVFBPTEwJMHgxMDAwCQkvKiB3aGV0aGVyIHdlIGFyZSBwcm9jZXNzaW5nIG5ldHBvbGwgKi8KICNkZWZpbmUgSUZGX0RJU0FCTEVfTkVUUE9MTAkweDIwMDAJLyogZGlzYWJsZSBuZXRwb2xsIGF0IHJ1bi10aW1lICovCisjZGVmaW5lIElGRl9NQUNWTEFOX1BPUlQJMHg0MDAwCS8qIGRldmljZSB1c2VkIGFzIG1hY3ZsYW4gcG9ydCAqLworI2RlZmluZSBJRkZfQlJJREdFX1BPUlQJMHg4MDAwCQkvKiBkZXZpY2UgdXNlZCBhcyBicmlkZ2UgcG9ydCAqLwogCiAjZGVmaW5lIElGX0dFVF9JRkFDRQkweDAwMDEJCS8qIGZvciBxdWVyeWluZyBvbmx5ICovCiAjZGVmaW5lIElGX0dFVF9QUk9UTwkweDAwMDIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfYm9uZGluZy5oIGIvaW5jbHVkZS9saW51eC9pZl9ib25kaW5nLmgKaW5kZXggY2Q1MjVmYS4uMmM3OTk0MzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfYm9uZGluZy5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfYm9uZGluZy5oCkBAIC04Myw2ICs4Myw3IEBACiAKICNkZWZpbmUgQk9ORF9ERUZBVUxUX01BWF9CT05EUyAgMSAgIC8qIERlZmF1bHQgbWF4aW11bSBudW1iZXIgb2YgZGV2aWNlcyB0byBzdXBwb3J0ICovCiAKKyNkZWZpbmUgQk9ORF9ERUZBVUxUX1RYX1FVRVVFUyAxNiAgIC8qIERlZmF1bHQgbnVtYmVyIG9mIHR4IHF1ZXVlcyBwZXIgZGV2aWNlICovCiAvKiBoYXNoaW5nIHR5cGVzICovCiAjZGVmaW5lIEJPTkRfWE1JVF9QT0xJQ1lfTEFZRVIyCQkwIC8qIGxheWVyIDIgKE1BQyBvbmx5KSwgZGVmYXVsdCAqLwogI2RlZmluZSBCT05EX1hNSVRfUE9MSUNZX0xBWUVSMzQJMSAvKiBsYXllciAzKzQgKElQIF4gKFRDUCB8fCBVRFApKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9icmlkZ2UuaCBiL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmgKaW5kZXggOTM4YjdlOC4uMGQyNDFhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9icmlkZ2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2JyaWRnZS5oCkBAIC0xMDIsOCArMTAyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KIAogZXh0ZXJuIHZvaWQgYnJpb2N0bF9zZXQoaW50ICgqaW9jdGxfaG9vaykoc3RydWN0IG5ldCAqLCB1bnNpZ25lZCBpbnQsIHZvaWQgX191c2VyICopKTsKLWV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqKCpicl9oYW5kbGVfZnJhbWVfaG9vaykoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwKLQkJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludCAoKmJyX3Nob3VsZF9yb3V0ZV9ob29rKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmggYi9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgKaW5kZXggYmVkN2E0Ni4uYzgzMTQ2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaApAQCAtMTE5LDcgKzExOSw3IEBACiAJdW5zaWduZWQgY2hhcgloX2Rlc3RbRVRIX0FMRU5dOwkvKiBkZXN0aW5hdGlvbiBldGggYWRkcgkqLwogCXVuc2lnbmVkIGNoYXIJaF9zb3VyY2VbRVRIX0FMRU5dOwkvKiBzb3VyY2UgZXRoZXIgYWRkcgkqLwogCV9fYmUxNgkJaF9wcm90bzsJCS8qIHBhY2tldCB0eXBlIElEIGZpZWxkCSovCi19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfZmRkaS5oIGIvaW5jbHVkZS9saW51eC9pZl9mZGRpLmgKaW5kZXggNTQ1OWM1Yy4uOTk0N2MzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9mZGRpLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9mZGRpLmgKQEAgLTY3LDcgKzY3LDcgQEAKIAlfX3U4CWRzYXA7CQkJCQkvKiBkZXN0aW5hdGlvbiBzZXJ2aWNlIGFjY2VzcyBwb2ludCAqLwogCV9fdTgJc3NhcDsJCQkJCS8qIHNvdXJjZSBzZXJ2aWNlIGFjY2VzcyBwb2ludCAqLwogCV9fdTgJY3RybDsJCQkJCS8qIGNvbnRyb2wgYnl0ZSAjMSAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBEZWZpbmUgODAyLjIgVHlwZSAyIGhlYWRlciAqLwogc3RydWN0IGZkZGlfODAyMl8yX2hkciB7CkBAIC03NSw3ICs3NSw3IEBACiAJX191OAlzc2FwOwkJCQkJLyogc291cmNlIHNlcnZpY2UgYWNjZXNzIHBvaW50ICovCiAJX191OAljdHJsXzE7CQkJCQkvKiBjb250cm9sIGJ5dGUgIzEgKi8KIAlfX3U4CWN0cmxfMjsJCQkJCS8qIGNvbnRyb2wgYnl0ZSAjMiAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBEZWZpbmUgODAyLjIgU05BUCBoZWFkZXIgKi8KICNkZWZpbmUgRkRESV9LX09VSV9MRU4JMwpAQCAtODUsNyArODUsNyBAQAogCV9fdTgJY3RybDsJCQkJCS8qIGFsd2F5cyAweDAzICovCiAJX191OAlvdWlbRkRESV9LX09VSV9MRU5dOwkvKiBvcmdhbml6YXRpb25hbCB1bml2ZXJzYWwgaWQgKi8KIAlfX2JlMTYJZXRoZXJ0eXBlOwkJCQkvKiBwYWNrZXQgdHlwZSBJRCBmaWVsZCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBEZWZpbmUgRkRESSBMTEMgZnJhbWUgaGVhZGVyICovCiBzdHJ1Y3QgZmRkaWhkciB7CkBAIC05OCw3ICs5OCw3IEBACiAJCXN0cnVjdCBmZGRpXzgwMjJfMl9oZHIJCWxsY184MDIyXzI7CiAJCXN0cnVjdCBmZGRpX3NuYXBfaGRyCQlsbGNfc25hcDsKIAkJfSBoZHI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2ZyYWQuaCBiL2luY2x1ZGUvbGludXgvaWZfZnJhZC5oCmluZGV4IDgwYjNhMTAuLjE5MWVlMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfZnJhZC5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfZnJhZC5oCkBAIC0xMzUsNyArMTM1LDcgQEAKICAgIF9fYmUxNiBQSUQ7CiAKICNkZWZpbmUgSVBfTkxQSUQgcGFkIAotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIHNlZSBSRkMgMTQ5MCBmb3IgdGhlIGRlZmluaXRpb24gb2YgdGhlIGZvbGxvd2luZyAqLwogI2RlZmluZSBGUkFEX0lfVUkJCTB4MDMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfaGlwcGkuaCBiL2luY2x1ZGUvbGludXgvaWZfaGlwcGkuaAppbmRleCA4ZDAzOGViLi41ZmU1ZjMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX2hpcHBpLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9oaXBwaS5oCkBAIC0xMDQsNyArMTA0LDcgQEAKIAlfX2JlMzIJCWZpeGVkOwogI2VuZGlmCiAJX19iZTMyCQlkMl9zaXplOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaGlwcGlfbGVfaGRyIHsKICNpZiBkZWZpbmVkIChfX0JJR19FTkRJQU5fQklURklFTEQpCkBAIC0xMjksNyArMTI5LDcgQEAKIAlfX3U4CQlkYWRkcltISVBQSV9BTEVOXTsKIAlfX3UxNgkJbG9jYWxseV9hZG1pbmlzdGVyZWQ7CiAJX191OAkJc2FkZHJbSElQUElfQUxFTl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSElQUElfT1VJX0xFTgkzCiAvKgpAQCAtMTQyLDEyICsxNDIsMTIgQEAKIAlfX3U4CWN0cmw7CQkJLyogYWx3YXlzIDB4MDMgKi8KIAlfX3U4CW91aVtISVBQSV9PVUlfTEVOXTsJLyogb3JnYW5pemF0aW9uYWwgdW5pdmVyc2FsIGlkICh6ZXJvKSovCiAJX19iZTE2CWV0aGVydHlwZTsJCS8qIHBhY2tldCB0eXBlIElEIGZpZWxkICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBoaXBwaV9oZHIgewogCXN0cnVjdCBoaXBwaV9mcF9oZHIJZnA7CiAJc3RydWN0IGhpcHBpX2xlX2hkcglsZTsKIAlzdHJ1Y3QgaGlwcGlfc25hcF9oZHIJc25hcDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2VuZGlmCS8qIF9MSU5VWF9JRl9ISVBQSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2xpbmsuaCBiL2luY2x1ZGUvbGludXgvaWZfbGluay5oCmluZGV4IDg1YzgxMmQuLjJmYzY2ZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfbGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfbGluay5oCkBAIC00LDcgKzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgogCi0vKiBUaGUgc3RydWN0IHNob3VsZCBiZSBpbiBzeW5jIHdpdGggc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKi8KKy8qIFRoaXMgc3RydWN0IHNob3VsZCBiZSBpbiBzeW5jIHdpdGggc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICovCiBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzIHsKIAlfX3UzMglyeF9wYWNrZXRzOwkJLyogdG90YWwgcGFja2V0cyByZWNlaXZlZAkqLwogCV9fdTMyCXR4X3BhY2tldHM7CQkvKiB0b3RhbCBwYWNrZXRzIHRyYW5zbWl0dGVkCSovCkBAIC0zNyw2ICszNyw3IEBACiAJX191MzIJdHhfY29tcHJlc3NlZDsKIH07CiAKKy8qIFRoZSBtYWluIGRldmljZSBzdGF0aXN0aWNzIHN0cnVjdHVyZSAqLwogc3RydWN0IHJ0bmxfbGlua19zdGF0czY0IHsKIAlfX3U2NAlyeF9wYWNrZXRzOwkJLyogdG90YWwgcGFja2V0cyByZWNlaXZlZAkqLwogCV9fdTY0CXR4X3BhY2tldHM7CQkvKiB0b3RhbCBwYWNrZXRzIHRyYW5zbWl0dGVkCSovCkBAIC0yMzMsNyArMjM0LDcgQEAKIAlNQUNWTEFOX01PREVfQlJJREdFICA9IDQsIC8qIHRhbGsgdG8gYnJpZGdlIHBvcnRzIGRpcmVjdGx5ICovCiB9OwogCi0vKiBTUi1JT1YgdmlydHVhbCBmdW5jdGlvbiBtYW5hZ21lbnQgc2VjdGlvbiAqLworLyogU1ItSU9WIHZpcnR1YWwgZnVuY3Rpb24gbWFuYWdlbWVudCBzZWN0aW9uICovCiAKIGVudW0gewogCUlGTEFfVkZfSU5GT19VTlNQRUMsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX21hY3ZsYW4uaCBiL2luY2x1ZGUvbGludXgvaWZfbWFjdmxhbi5oCmluZGV4IDllYTA0N2EuLjM1MjgwYjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfbWFjdmxhbi5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfbWFjdmxhbi5oCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L3U2NF9zdGF0c19zeW5jLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19NQUNWVEFQKSB8fCBkZWZpbmVkKENPTkZJR19NQUNWVEFQX01PRFVMRSkKIHN0cnVjdCBzb2NrZXQgKm1hY3Z0YXBfZ2V0X3NvY2tldChzdHJ1Y3QgZmlsZSAqKTsKQEAgLTI3LDE0ICsyOCwxNiBAQAogICoJc3RydWN0IG1hY3ZsYW5fcnhfc3RhdHMgLSBNQUNWTEFOIHBlcmNwdSByeCBzdGF0cwogICoJQHJ4X3BhY2tldHM6IG51bWJlciBvZiByZWNlaXZlZCBwYWNrZXRzCiAgKglAcnhfYnl0ZXM6IG51bWJlciBvZiByZWNlaXZlZCBieXRlcwotICoJQG11bHRpY2FzdDogbnVtYmVyIG9mIHJlY2VpdmVkIG11bHRpY2FzdCBwYWNrZXRzCisgKglAcnhfbXVsdGljYXN0OiBudW1iZXIgb2YgcmVjZWl2ZWQgbXVsdGljYXN0IHBhY2tldHMKKyAqCUBzeW5jcDogc3luY2hyb25pemF0aW9uIHBvaW50IGZvciA2NGJpdCBjb3VudGVycwogICoJQHJ4X2Vycm9yczogbnVtYmVyIG9mIGVycm9ycwogICovCiBzdHJ1Y3QgbWFjdmxhbl9yeF9zdGF0cyB7Ci0JdW5zaWduZWQgbG9uZyByeF9wYWNrZXRzOwotCXVuc2lnbmVkIGxvbmcgcnhfYnl0ZXM7Ci0JdW5zaWduZWQgbG9uZyBtdWx0aWNhc3Q7Ci0JdW5zaWduZWQgbG9uZyByeF9lcnJvcnM7CisJdTY0CQkJcnhfcGFja2V0czsKKwl1NjQJCQlyeF9ieXRlczsKKwl1NjQJCQlyeF9tdWx0aWNhc3Q7CisJc3RydWN0IHU2NF9zdGF0c19zeW5jCXN5bmNwOworCXVuc2lnbmVkIGxvbmcJCXJ4X2Vycm9yczsKIH07CiAKIHN0cnVjdCBtYWN2bGFuX2RldiB7CkBAIC01NiwxNyArNTksMjEgQEAKIHsKIAlzdHJ1Y3QgbWFjdmxhbl9yeF9zdGF0cyAqcnhfc3RhdHM7CiAKLQlyeF9zdGF0cyA9IHBlcl9jcHVfcHRyKHZsYW4tPnJ4X3N0YXRzLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCXJ4X3N0YXRzID0gdGhpc19jcHVfcHRyKHZsYW4tPnJ4X3N0YXRzKTsKIAlpZiAobGlrZWx5KHN1Y2Nlc3MpKSB7CisJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJnJ4X3N0YXRzLT5zeW5jcCk7CiAJCXJ4X3N0YXRzLT5yeF9wYWNrZXRzKys7OwogCQlyeF9zdGF0cy0+cnhfYnl0ZXMgKz0gbGVuOwogCQlpZiAobXVsdGljYXN0KQotCQkJcnhfc3RhdHMtPm11bHRpY2FzdCsrOworCQkJcnhfc3RhdHMtPnJ4X211bHRpY2FzdCsrOworCQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmcnhfc3RhdHMtPnN5bmNwKTsKIAl9IGVsc2UgewogCQlyeF9zdGF0cy0+cnhfZXJyb3JzKys7CiAJfQogfQogCitleHRlcm4gdm9pZCBtYWN2bGFuX2NvbW1vbl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwogZXh0ZXJuIGludCBtYWN2bGFuX2NvbW1vbl9uZXdsaW5rKHN0cnVjdCBuZXQgKnNyY19uZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICBzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sCiAJCQkJICBpbnQgKCpyZWNlaXZlKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSwKQEAgLTg0LDggKzkxLDQgQEAKIGV4dGVybiBuZXRkZXZfdHhfdCBtYWN2bGFuX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAotCi1leHRlcm4gc3RydWN0IHNrX2J1ZmYgKigqbWFjdmxhbl9oYW5kbGVfZnJhbWVfaG9vaykoc3RydWN0IG1hY3ZsYW5fcG9ydCAqLAotCQkJCQkJICAgIHN0cnVjdCBza19idWZmICopOwotCiAjZW5kaWYgLyogX0xJTlVYX0lGX01BQ1ZMQU5fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaCBiL2luY2x1ZGUvbGludXgvaWZfcGFja2V0LmgKaW5kZXggNmFjMjNlZi4uNzJiZmE1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3BhY2tldC5oCkBAIC00OCw2ICs0OCw3IEBACiAjZGVmaW5lIFBBQ0tFVF9MT1NTCQkJMTQKICNkZWZpbmUgUEFDS0VUX1ZORVRfSERSCQkJMTUKICNkZWZpbmUgUEFDS0VUX1RYX1RJTUVTVEFNUAkJMTYKKyNkZWZpbmUgUEFDS0VUX1RJTUVTVEFNUAkJMTcKIAogc3RydWN0IHRwYWNrZXRfc3RhdHMgewogCXVuc2lnbmVkIGludAl0cF9wYWNrZXRzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9wcHBveC5oIGIvaW5jbHVkZS9saW51eC9pZl9wcHBveC5oCmluZGV4IGE2NTc3YWYuLjE5MjVlMGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfcHBwb3guaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3BwcG94LmgKQEAgLTU5LDcgKzU5LDcgQEAKICAgICAgICB1bmlvbnsgCiAgICAgICAgICAgICAgICBzdHJ1Y3QgcHBwb2VfYWRkciAgICAgICBwcHBvZTsgCiAgICAgICAgfXNhX2FkZHI7IAotfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsgCit9IF9fcGFja2VkOwogCiAvKiBUaGUgdXNlIG9mIHRoZSBhYm92ZSB1bmlvbiBpc24ndCB2aWFibGUgYmVjYXVzZSB0aGUgc2l6ZSBvZiB0aGlzCiAgKiBzdHJ1Y3QgbXVzdCBzdGF5IGZpeGVkIG92ZXIgdGltZSAtLSBhcHBsaWNhdGlvbnMgdXNlIHNpemVvZihzdHJ1Y3QKQEAgLTcwLDcgKzcwLDcgQEAKIAlzYV9mYW1pbHlfdCAgICAgc2FfZmFtaWx5OyAgICAgIC8qIGFkZHJlc3MgZmFtaWx5LCBBRl9QUFBPWCAqLwogCXVuc2lnbmVkIGludCAgICBzYV9wcm90b2NvbDsgICAgLyogcHJvdG9jb2wgaWRlbnRpZmllciAqLwogCXN0cnVjdCBwcHBvbDJ0cF9hZGRyIHBwcG9sMnRwOwotfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIFRoZSBMMlRQdjMgcHJvdG9jb2wgY2hhbmdlcyB0dW5uZWwgYW5kIHNlc3Npb24gaWRzIGZyb20gMTYgdG8gMzIKICAqIGJpdHMuIFNvIHdlIG5lZWQgYSBkaWZmZXJlbnQgc29ja2FkZHIgc3RydWN0dXJlLgpAQCAtNzksNyArNzksNyBAQAogCXNhX2ZhbWlseV90ICAgICBzYV9mYW1pbHk7ICAgICAgLyogYWRkcmVzcyBmYW1pbHksIEFGX1BQUE9YICovCiAJdW5zaWduZWQgaW50ICAgIHNhX3Byb3RvY29sOyAgICAvKiBwcm90b2NvbCBpZGVudGlmaWVyICovCiAJc3RydWN0IHBwcG9sMnRwdjNfYWRkciBwcHBvbDJ0cDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTEyOSw3ICsxMjksNyBAQAogCV9fYmUxNiBzaWQ7CiAJX19iZTE2IGxlbmd0aDsKIAlzdHJ1Y3QgcHBwb2VfdGFnIHRhZ1swXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogTGVuZ3RoIG9mIGVudGlyZSBQUFBvRSArIFBQUCBoZWFkZXIgKi8KICNkZWZpbmUgUFBQT0VfU0VTX0hMRU4JOApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbi5oIGIvaW5jbHVkZS9saW51eC9pbi5oCmluZGV4IDU4M2M3NmYuLjQxZDg4YTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2luLmgKQEAgLTg1LDYgKzg1LDcgQEAKICNkZWZpbmUgSVBfUkVDVk9SSUdEU1RBRERSICAgSVBfT1JJR0RTVEFERFIKIAogI2RlZmluZSBJUF9NSU5UVEwgICAgICAgMjEKKyNkZWZpbmUgSVBfTk9ERUZSQUcgICAgIDIyCiAKIC8qIElQX01UVV9ESVNDT1ZFUiB2YWx1ZXMgKi8KICNkZWZpbmUgSVBfUE1UVURJU0NfRE9OVAkJMAkvKiBOZXZlciBzZW5kIERGIGZyYW1lcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCmluZGV4IDZmY2M5MTAxLi4zMzlkMDQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lucHV0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCkBAIC02OTEsOSArNjkxLDEyIEBACiAjZGVmaW5lIEFCU19USUxUX1gJCTB4MWEKICNkZWZpbmUgQUJTX1RJTFRfWQkJMHgxYgogI2RlZmluZSBBQlNfVE9PTF9XSURUSAkJMHgxYworCiAjZGVmaW5lIEFCU19WT0xVTUUJCTB4MjAKKwogI2RlZmluZSBBQlNfTUlTQwkJMHgyOAogCisjZGVmaW5lIEFCU19NVF9TTE9UCQkweDJmCS8qIE1UIHNsb3QgYmVpbmcgbW9kaWZpZWQgKi8KICNkZWZpbmUgQUJTX01UX1RPVUNIX01BSk9SCTB4MzAJLyogTWFqb3IgYXhpcyBvZiB0b3VjaGluZyBlbGxpcHNlICovCiAjZGVmaW5lIEFCU19NVF9UT1VDSF9NSU5PUgkweDMxCS8qIE1pbm9yIGF4aXMgKG9taXQgaWYgY2lyY3VsYXIpICovCiAjZGVmaW5lIEFCU19NVF9XSURUSF9NQUpPUgkweDMyCS8qIE1ham9yIGF4aXMgb2YgYXBwcm9hY2hpbmcgZWxsaXBzZSAqLwpAQCAtNzA2LDYgKzcwOSwxMiBAQAogI2RlZmluZSBBQlNfTVRfVFJBQ0tJTkdfSUQJMHgzOQkvKiBVbmlxdWUgSUQgb2YgaW5pdGlhdGVkIGNvbnRhY3QgKi8KICNkZWZpbmUgQUJTX01UX1BSRVNTVVJFCQkweDNhCS8qIFByZXNzdXJlIG9uIGNvbnRhY3QgYXJlYSAqLwogCisjaWZkZWYgX19LRVJORUxfXworLyogSW1wbGVtZW50YXRpb24gZGV0YWlscywgdXNlcnNwYWNlIHNob3VsZCBub3QgY2FyZSBhYm91dCB0aGVzZSAqLworI2RlZmluZSBBQlNfTVRfRklSU1QJCUFCU19NVF9UT1VDSF9NQUpPUgorI2RlZmluZSBBQlNfTVRfTEFTVAkJQUJTX01UX1BSRVNTVVJFCisjZW5kaWYKKwogI2RlZmluZSBBQlNfTUFYCQkJMHgzZgogI2RlZmluZSBBQlNfQ05UCQkJKEFCU19NQVgrMSkKIApAQCAtMTA0OCw2ICsxMDU3LDE0IEBACiAjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CiAKIC8qKgorICogc3RydWN0IGlucHV0X210X3Nsb3QgLSByZXByZXNlbnRzIHRoZSBzdGF0ZSBvZiBhbiBpbnB1dCBNVCBzbG90CisgKiBAYWJzOiBob2xkcyBjdXJyZW50IHZhbHVlcyBvZiBBQlNfTVQgYXhlcyBmb3IgdGhpcyBzbG90CisgKi8KK3N0cnVjdCBpbnB1dF9tdF9zbG90IHsKKwlpbnQgYWJzW0FCU19NVF9MQVNUIC0gQUJTX01UX0ZJUlNUICsgMV07Cit9OworCisvKioKICAqIHN0cnVjdCBpbnB1dF9kZXYgLSByZXByZXNlbnRzIGFuIGlucHV0IGRldmljZQogICogQG5hbWU6IG5hbWUgb2YgdGhlIGRldmljZQogICogQHBoeXM6IHBoeXNpY2FsIHBhdGggdG8gdGhlIGRldmljZSBpbiB0aGUgc3lzdGVtIGhpZXJhcmNoeQpAQCAtMTA2Myw2ICsxMDgwLDEwIEBACiAgKiBAc25kYml0OiBiaXRtYXAgb2Ygc291bmQgZWZmZWN0cyBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZQogICogQGZmYml0OiBiaXRtYXAgb2YgZm9yY2UgZmVlZGJhY2sgZWZmZWN0cyBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZQogICogQHN3Yml0OiBiaXRtYXAgb2Ygc3dpdGNoZXMgcHJlc2VudCBvbiB0aGUgZGV2aWNlCisgKiBAaGludF9ldmVudHNfcGVyX3BhY2tldDogYXZlcmFnZSBudW1iZXIgb2YgZXZlbnRzIGdlbmVyYXRlZCBieSB0aGUKKyAqCWRldmljZSBpbiBhIHBhY2tldCAoYmV0d2VlbiBFVl9TWU4vU1lOX1JFUE9SVCBldmVudHMpLiBVc2VkIGJ5CisgKglldmVudCBoYW5kbGVycyB0byBlc3RpbWF0ZSBzaXplIG9mIHRoZSBidWZmZXIgbmVlZGVkIHRvIGhvbGQKKyAqCWV2ZW50cy4KICAqIEBrZXljb2RlbWF4OiBzaXplIG9mIGtleWNvZGUgdGFibGUKICAqIEBrZXljb2Rlc2l6ZTogc2l6ZSBvZiBlbGVtZW50cyBpbiBrZXljb2RlIHRhYmxlCiAgKiBAa2V5Y29kZTogbWFwIG9mIHNjYW5jb2RlcyB0byBrZXljb2RlcyBmb3IgdGhpcyBkZXZpY2UKQEAgLTEwNzgsOSArMTA5OSwxMiBAQAogICogQHJlcGVhdF9rZXk6IHN0b3JlcyBrZXkgY29kZSBvZiB0aGUgbGFzdCBrZXkgcHJlc3NlZDsgdXNlZCB0byBpbXBsZW1lbnQKICAqCXNvZnR3YXJlIGF1dG9yZXBlYXQKICAqIEB0aW1lcjogdGltZXIgZm9yIHNvZnR3YXJlIGF1dG9yZXBlYXQKLSAqIEBzeW5jOiBzZXQgdG8gMSB3aGVuIHRoZXJlIHdlcmUgbm8gbmV3IGV2ZW50cyBzaW5jZSBsYXN0IEVWX1NZTkMKICAqIEBhYnM6IGN1cnJlbnQgdmFsdWVzIGZvciByZXBvcnRzIGZyb20gYWJzb2x1dGUgYXhlcwogICogQHJlcDogY3VycmVudCB2YWx1ZXMgZm9yIGF1dG9yZXBlYXQgcGFyYW1ldGVycyAoZGVsYXksIHJhdGUpCisgKiBAbXQ6IHBvaW50ZXIgdG8gYXJyYXkgb2Ygc3RydWN0IGlucHV0X210X3Nsb3QgaG9sZGluZyBjdXJyZW50IHZhbHVlcworICoJb2YgdHJhY2tlZCBjb250YWN0cworICogQG10c2l6ZTogbnVtYmVyIG9mIE1UIHNsb3RzIHRoZSBkZXZpY2UgdXNlcworICogQHNsb3Q6IE1UIHNsb3QgY3VycmVudGx5IGJlaW5nIHRyYW5zbWl0dGVkCiAgKiBAa2V5OiByZWZsZWN0cyBjdXJyZW50IHN0YXRlIG9mIGRldmljZSdzIGtleXMvYnV0dG9ucwogICogQGxlZDogcmVmbGVjdHMgY3VycmVudCBzdGF0ZSBvZiBkZXZpY2UncyBMRURzCiAgKiBAc25kOiByZWZsZWN0cyBjdXJyZW50IHN0YXRlIG9mIHNvdW5kIGVmZmVjdHMKQEAgLTExMTksNiArMTE0Myw3IEBACiAgKglsYXN0IHVzZXIgY2xvc2VzIHRoZSBkZXZpY2UKICAqIEBnb2luZ19hd2F5OiBtYXJrcyBkZXZpY2VzIHRoYXQgYXJlIGluIGEgbWlkZGxlIG9mIHVucmVnaXN0ZXJpbmcgYW5kCiAgKgljYXVzZXMgaW5wdXRfb3Blbl9kZXZpY2UqKCkgZmFpbCB3aXRoIC1FTk9ERVYuCisgKiBAc3luYzogc2V0IHRvICV0cnVlIHdoZW4gdGhlcmUgd2VyZSBubyBuZXcgZXZlbnRzIHNpbmNlIGxhc3QgRVZfU1lOCiAgKiBAZGV2OiBkcml2ZXIgbW9kZWwncyB2aWV3IG9mIHRoaXMgZGV2aWNlCiAgKiBAaF9saXN0OiBsaXN0IG9mIGlucHV0IGhhbmRsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UuIFdoZW4KICAqCWFjY2Vzc2luZyB0aGUgbGlzdCBkZXYtPm11dGV4IG11c3QgYmUgaGVsZApAQCAtMTE0MCw2ICsxMTY1LDggQEAKIAl1bnNpZ25lZCBsb25nIGZmYml0W0JJVFNfVE9fTE9OR1MoRkZfQ05UKV07CiAJdW5zaWduZWQgbG9uZyBzd2JpdFtCSVRTX1RPX0xPTkdTKFNXX0NOVCldOwogCisJdW5zaWduZWQgaW50IGhpbnRfZXZlbnRzX3Blcl9wYWNrZXQ7CisKIAl1bnNpZ25lZCBpbnQga2V5Y29kZW1heDsKIAl1bnNpZ25lZCBpbnQga2V5Y29kZXNpemU7CiAJdm9pZCAqa2V5Y29kZTsKQEAgLTExNTMsMTEgKzExODAsMTMgQEAKIAl1bnNpZ25lZCBpbnQgcmVwZWF0X2tleTsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIAotCWludCBzeW5jOwotCiAJaW50IGFic1tBQlNfQ05UXTsKIAlpbnQgcmVwW1JFUF9NQVggKyAxXTsKIAorCXN0cnVjdCBpbnB1dF9tdF9zbG90ICptdDsKKwlpbnQgbXRzaXplOworCWludCBzbG90OworCiAJdW5zaWduZWQgbG9uZyBrZXlbQklUU19UT19MT05HUyhLRVlfQ05UKV07CiAJdW5zaWduZWQgbG9uZyBsZWRbQklUU19UT19MT05HUyhMRURfQ05UKV07CiAJdW5zaWduZWQgbG9uZyBzbmRbQklUU19UT19MT05HUyhTTkRfQ05UKV07CkBAIC0xMTgyLDYgKzEyMTEsOCBAQAogCXVuc2lnbmVkIGludCB1c2VyczsKIAlib29sIGdvaW5nX2F3YXk7CiAKKwlib29sIHN5bmM7CisKIAlzdHJ1Y3QgZGV2aWNlIGRldjsKIAogCXN0cnVjdCBsaXN0X2hlYWQJaF9saXN0OwpAQCAtMTQwNiw4ICsxNDM3LDI4IEBACiAJaW5wdXRfZXZlbnQoZGV2LCBFVl9TWU4sIFNZTl9NVF9SRVBPUlQsIDApOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgaW5wdXRfbXRfc2xvdChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIGludCBzbG90KQoreworCWlucHV0X2V2ZW50KGRldiwgRVZfQUJTLCBBQlNfTVRfU0xPVCwgc2xvdCk7Cit9CisKIHZvaWQgaW5wdXRfc2V0X2NhcGFiaWxpdHkoc3RydWN0IGlucHV0X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUpOwogCisvKioKKyAqIGlucHV0X3NldF9ldmVudHNfcGVyX3BhY2tldCAtIHRlbGwgaGFuZGxlcnMgYWJvdXQgdGhlIGRyaXZlciBldmVudCByYXRlCisgKiBAZGV2OiB0aGUgaW5wdXQgZGV2aWNlIHVzZWQgYnkgdGhlIGRyaXZlcgorICogQG5fZXZlbnRzOiB0aGUgYXZlcmFnZSBudW1iZXIgb2YgZXZlbnRzIGJldHdlZW4gY2FsbHMgdG8gaW5wdXRfc3luYygpCisgKgorICogSWYgdGhlIGV2ZW50IHJhdGUgc2VudCBmcm9tIGEgZGV2aWNlIGlzIHVudXN1YWxseSBsYXJnZSwgdXNlIHRoaXMKKyAqIGZ1bmN0aW9uIHRvIHNldCB0aGUgZXhwZWN0ZWQgZXZlbnQgcmF0ZS4gVGhpcyB3aWxsIGFsbG93IGhhbmRsZXJzCisgKiB0byBzZXQgdXAgYW4gYXBwcm9wcmlhdGUgYnVmZmVyIHNpemUgZm9yIHRoZSBldmVudCBzdHJlYW0sIGluIG9yZGVyCisgKiB0byBtaW5pbWl6ZSBpbmZvcm1hdGlvbiBsb3NzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaW5wdXRfc2V0X2V2ZW50c19wZXJfcGFja2V0KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IG5fZXZlbnRzKQoreworCWRldi0+aGludF9ldmVudHNfcGVyX3BhY2tldCA9IG5fZXZlbnRzOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5wdXRfc2V0X2Fic19wYXJhbXMoc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgYXhpcywgaW50IG1pbiwgaW50IG1heCwgaW50IGZ1enosIGludCBmbGF0KQogewogCWRldi0+YWJzbWluW2F4aXNdID0gbWluOwpAQCAtMTQ4NSw1ICsxNTM2LDggQEAKIGludCBpbnB1dF9mZl9jcmVhdGVfbWVtbGVzcyhzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHZvaWQgKmRhdGEsCiAJCWludCAoKnBsYXlfZWZmZWN0KShzdHJ1Y3QgaW5wdXRfZGV2ICosIHZvaWQgKiwgc3RydWN0IGZmX2VmZmVjdCAqKSk7CiAKK2ludCBpbnB1dF9tdF9jcmVhdGVfc2xvdHMoc3RydWN0IGlucHV0X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgbnVtX3Nsb3RzKTsKK3ZvaWQgaW5wdXRfbXRfZGVzdHJveV9zbG90cyhzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpOworCiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC9hZHhsMzR4LmggYi9pbmNsdWRlL2xpbnV4L2lucHV0L2FkeGwzNHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjAwZDk5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pbnB1dC9hZHhsMzR4LmgKQEAgLTAsMCArMSwzNDkgQEAKKy8qCisgKiBpbmNsdWRlL2xpbnV4L2lucHV0L2FkeGwzNHguaAorICoKKyAqIERpZ2l0YWwgQWNjZWxlcm9tZXRlciBjaGFyYWN0ZXJpc3RpY3MgYXJlIGhpZ2hseSBhcHBsaWNhdGlvbiBzcGVjaWZpYworICogYW5kIG1heSB2YXJ5IGJldHdlZW4gYm9hcmRzIGFuZCBtb2RlbHMuIFRoZSBwbGF0Zm9ybV9kYXRhIGZvciB0aGUKKyAqIGRldmljZSdzICJzdHJ1Y3QgZGV2aWNlIiBob2xkcyB0aGlzIGluZm9ybWF0aW9uLgorICoKKyAqIENvcHlyaWdodCAyMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX0lOUFVUX0FEWEwzNFhfSF9fCisjZGVmaW5lIF9fTElOVVhfSU5QVVRfQURYTDM0WF9IX18KKworc3RydWN0IGFkeGwzNHhfcGxhdGZvcm1fZGF0YSB7CisKKwkvKgorCSAqIFgsWSxaIEF4aXMgT2Zmc2V0OgorCSAqIG9mZmVyIHVzZXIgb2Zmc2V0IGFkanVzdG1lbnRzIGluIHR3b3Njb21wbGltZW50CisJICogZm9ybSB3aXRoIGEgc2NhbGUgZmFjdG9yIG9mIDE1LjYgbWcvTFNCIChpLmUuIDB4N0YgPSArMiBnKQorCSAqLworCisJczggeF9heGlzX29mZnNldDsKKwlzOCB5X2F4aXNfb2Zmc2V0OworCXM4IHpfYXhpc19vZmZzZXQ7CisKKwkvKgorCSAqIFRBUF9YL1kvWiBFbmFibGU6IFNldHRpbmcgVEFQX1gsIFksIG9yIFogRW5hYmxlIGVuYWJsZXMgWCwKKwkgKiBZLCBvciBaIHBhcnRpY2lwYXRpb24gaW4gVGFwIGRldGVjdGlvbi4gQSAnMCcgZXhjbHVkZXMgdGhlCisJICogc2VsZWN0ZWQgYXhpcyBmcm9tIHBhcnRpY2lwYXRpb24gaW4gVGFwIGRldGVjdGlvbi4KKwkgKiBTZXR0aW5nIHRoZSBTVVBQUkVTUyBiaXQgc3VwcHJlc3NlcyBEb3VibGUgVGFwIGRldGVjdGlvbiBpZgorCSAqIGFjY2VsZXJhdGlvbiBncmVhdGVyIHRoYW4gdGFwX3RocmVzaG9sZCBpcyBwcmVzZW50IGJldHdlZW4KKwkgKiB0YXBzLgorCSAqLworCisjZGVmaW5lIEFEWExfU1VQUFJFU1MJKDEgPDwgMykKKyNkZWZpbmUgQURYTF9UQVBfWF9FTgkoMSA8PCAyKQorI2RlZmluZSBBRFhMX1RBUF9ZX0VOCSgxIDw8IDEpCisjZGVmaW5lIEFEWExfVEFQX1pfRU4JKDEgPDwgMCkKKworCXU4IHRhcF9heGlzX2NvbnRyb2w7CisKKwkvKgorCSAqIHRhcF90aHJlc2hvbGQ6CisJICogaG9sZHMgdGhlIHRocmVzaG9sZCB2YWx1ZSBmb3IgdGFwIGRldGVjdGlvbi9pbnRlcnJ1cHRzLgorCSAqIFRoZSBkYXRhIGZvcm1hdCBpcyB1bnNpZ25lZC4gVGhlIHNjYWxlIGZhY3RvciBpcyA2Mi41IG1nL0xTQgorCSAqIChpLmUuIDB4RkYgPSArMTYgZykuIEEgemVybyB2YWx1ZSBtYXkgcmVzdWx0IGluIHVuZGVzaXJhYmxlCisJICogYmVoYXZpb3IgaWYgVGFwL0RvdWJsZSBUYXAgaXMgZW5hYmxlZC4KKwkgKi8KKworCXU4IHRhcF90aHJlc2hvbGQ7CisKKwkvKgorCSAqIHRhcF9kdXJhdGlvbjoKKwkgKiBpcyBhbiB1bnNpZ25lZCB0aW1lIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgbWF4aW11bQorCSAqIHRpbWUgdGhhdCBhbiBldmVudCBtdXN0IGJlIGFib3ZlIHRoZSB0YXBfdGhyZXNob2xkIHRocmVzaG9sZAorCSAqIHRvIHF1YWxpZnkgYXMgYSB0YXAgZXZlbnQuIFRoZSBzY2FsZSBmYWN0b3IgaXMgNjI1IHVzL0xTQi4gQSB6ZXJvCisJICogdmFsdWUgd2lsbCBwcmV2ZW50IFRhcC9Eb3VibGUgVGFwIGZ1bmN0aW9ucyBmcm9tIHdvcmtpbmcuCisJICovCisKKwl1OCB0YXBfZHVyYXRpb247CisKKwkvKgorCSAqIHRhcF9sYXRlbmN5OgorCSAqIGlzIGFuIHVuc2lnbmVkIHRpbWUgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSB3YWl0IHRpbWUKKwkgKiBmcm9tIHRoZSBkZXRlY3Rpb24gb2YgYSB0YXAgZXZlbnQgdG8gdGhlIG9wZW5pbmcgb2YgdGhlIHRpbWUKKwkgKiB3aW5kb3cgdGFwX3dpbmRvdyBmb3IgYSBwb3NzaWJsZSBzZWNvbmQgdGFwIGV2ZW50LiBUaGUgc2NhbGUKKwkgKiBmYWN0b3IgaXMgMS4yNSBtcy9MU0IuIEEgemVybyB2YWx1ZSB3aWxsIGRpc2FibGUgdGhlIERvdWJsZSBUYXAKKwkgKiBmdW5jdGlvbi4KKwkgKi8KKworCXU4IHRhcF9sYXRlbmN5OworCisJLyoKKwkgKiB0YXBfd2luZG93OgorCSAqIGlzIGFuIHVuc2lnbmVkIHRpbWUgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBhbW91bnQKKwkgKiBvZiB0aW1lIGFmdGVyIHRoZSBleHBpcmF0aW9uIG9mIHRhcF9sYXRlbmN5IGR1cmluZyB3aGljaCBhIHNlY29uZAorCSAqIHRhcCBjYW4gYmVnaW4uIFRoZSBzY2FsZSBmYWN0b3IgaXMgMS4yNSBtcy9MU0IuIEEgemVybyB2YWx1ZSB3aWxsCisJICogZGlzYWJsZSB0aGUgRG91YmxlIFRhcCBmdW5jdGlvbi4KKwkgKi8KKworCXU4IHRhcF93aW5kb3c7CisKKwkvKgorCSAqIGFjdF9heGlzX2NvbnRyb2w6CisJICogWC9ZL1ogRW5hYmxlOiBBICcxJyBlbmFibGVzIFgsIFksIG9yIFogcGFydGljaXBhdGlvbiBpbiBhY3Rpdml0eQorCSAqIG9yIGluYWN0aXZpdHkgZGV0ZWN0aW9uLiBBICcwJyBleGNsdWRlcyB0aGUgc2VsZWN0ZWQgYXhpcyBmcm9tCisJICogcGFydGljaXBhdGlvbi4gSWYgYWxsIG9mIHRoZSBheGVzIGFyZSBleGNsdWRlZCwgdGhlIGZ1bmN0aW9uIGlzCisJICogZGlzYWJsZWQuCisJICogQUMvREM6IEEgJzAnID0gREMgY291cGxlZCBvcGVyYXRpb24gYW5kIGEgJzEnID0gQUMgY291cGxlZAorCSAqIG9wZXJhdGlvbi4gSW4gREMgY291cGxlZCBvcGVyYXRpb24sIHRoZSBjdXJyZW50IGFjY2VsZXJhdGlvbiBpcworCSAqIGNvbXBhcmVkIHdpdGggYWN0aXZpdHlfdGhyZXNob2xkIGFuZCBpbmFjdGl2aXR5X3RocmVzaG9sZCBkaXJlY3RseQorCSAqIHRvIGRldGVybWluZSB3aGV0aGVyIGFjdGl2aXR5IG9yIGluYWN0aXZpdHkgaXMgZGV0ZWN0ZWQuIEluIEFDCisJICogY291cGxlZCBvcGVyYXRpb24gZm9yIGFjdGl2aXR5IGRldGVjdGlvbiwgdGhlIGFjY2VsZXJhdGlvbiB2YWx1ZQorCSAqIGF0IHRoZSBzdGFydCBvZiBhY3Rpdml0eSBkZXRlY3Rpb24gaXMgdGFrZW4gYXMgYSByZWZlcmVuY2UgdmFsdWUuCisJICogTmV3IHNhbXBsZXMgb2YgYWNjZWxlcmF0aW9uIGFyZSB0aGVuIGNvbXBhcmVkIHRvIHRoaXMKKwkgKiByZWZlcmVuY2UgdmFsdWUgYW5kIGlmIHRoZSBtYWduaXR1ZGUgb2YgdGhlIGRpZmZlcmVuY2UgZXhjZWVkcworCSAqIGFjdGl2aXR5X3RocmVzaG9sZCB0aGUgZGV2aWNlIHdpbGwgdHJpZ2dlciBhbiBhY3Rpdml0eSBpbnRlcnJ1cHQuIEluCisJICogQUMgY291cGxlZCBvcGVyYXRpb24gZm9yIGluYWN0aXZpdHkgZGV0ZWN0aW9uLCBhIHJlZmVyZW5jZSB2YWx1ZQorCSAqIGlzIHVzZWQgYWdhaW4gZm9yIGNvbXBhcmlzb24gYW5kIGlzIHVwZGF0ZWQgd2hlbmV2ZXIgdGhlCisJICogZGV2aWNlIGV4Y2VlZHMgdGhlIGluYWN0aXZpdHkgdGhyZXNob2xkLiBPbmNlIHRoZSByZWZlcmVuY2UKKwkgKiB2YWx1ZSBpcyBzZWxlY3RlZCwgdGhlIGRldmljZSBjb21wYXJlcyB0aGUgbWFnbml0dWRlIG9mIHRoZQorCSAqIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgcmVmZXJlbmNlIHZhbHVlIGFuZCB0aGUgY3VycmVudAorCSAqIGFjY2VsZXJhdGlvbiB3aXRoIGluYWN0aXZpdHlfdGhyZXNob2xkLiBJZiB0aGUgZGlmZmVyZW5jZSBpcyBiZWxvdworCSAqIGluYWN0aXZpdHlfdGhyZXNob2xkIGZvciBhIHRvdGFsIG9mIGluYWN0aXZpdHlfdGltZSwgdGhlIGRldmljZSBpcworCSAqIGNvbnNpZGVyZWQgaW5hY3RpdmUgYW5kIHRoZSBpbmFjdGl2aXR5IGludGVycnVwdCBpcyB0cmlnZ2VyZWQuCisJICovCisKKyNkZWZpbmUgQURYTF9BQ1RfQUNEQwkJKDEgPDwgNykKKyNkZWZpbmUgQURYTF9BQ1RfWF9FTgkJKDEgPDwgNikKKyNkZWZpbmUgQURYTF9BQ1RfWV9FTgkJKDEgPDwgNSkKKyNkZWZpbmUgQURYTF9BQ1RfWl9FTgkJKDEgPDwgNCkKKyNkZWZpbmUgQURYTF9JTkFDVF9BQ0RDCQkoMSA8PCAzKQorI2RlZmluZSBBRFhMX0lOQUNUX1hfRU4JCSgxIDw8IDIpCisjZGVmaW5lIEFEWExfSU5BQ1RfWV9FTgkJKDEgPDwgMSkKKyNkZWZpbmUgQURYTF9JTkFDVF9aX0VOCQkoMSA8PCAwKQorCisJdTggYWN0X2F4aXNfY29udHJvbDsKKworCS8qCisJICogYWN0aXZpdHlfdGhyZXNob2xkOgorCSAqIGhvbGRzIHRoZSB0aHJlc2hvbGQgdmFsdWUgZm9yIGFjdGl2aXR5IGRldGVjdGlvbi4KKwkgKiBUaGUgZGF0YSBmb3JtYXQgaXMgdW5zaWduZWQuIFRoZSBzY2FsZSBmYWN0b3IgaXMKKwkgKiA2Mi41IG1nL0xTQi4gQSB6ZXJvIHZhbHVlIG1heSByZXN1bHQgaW4gdW5kZXNpcmFibGUgYmVoYXZpb3IgaWYKKwkgKiBBY3Rpdml0eSBpbnRlcnJ1cHQgaXMgZW5hYmxlZC4KKwkgKi8KKworCXU4IGFjdGl2aXR5X3RocmVzaG9sZDsKKworCS8qCisJICogaW5hY3Rpdml0eV90aHJlc2hvbGQ6CisJICogaG9sZHMgdGhlIHRocmVzaG9sZCB2YWx1ZSBmb3IgaW5hY3Rpdml0eQorCSAqIGRldGVjdGlvbi4gVGhlIGRhdGEgZm9ybWF0IGlzIHVuc2lnbmVkLiBUaGUgc2NhbGUKKwkgKiBmYWN0b3IgaXMgNjIuNSBtZy9MU0IuIEEgemVybyB2YWx1ZSBtYXkgcmVzdWx0IGluIHVuZGVzaXJhYmxlCisJICogYmVoYXZpb3IgaWYgSW5hY3Rpdml0eSBpbnRlcnJ1cHQgaXMgZW5hYmxlZC4KKwkgKi8KKworCXU4IGluYWN0aXZpdHlfdGhyZXNob2xkOworCisJLyoKKwkgKiBpbmFjdGl2aXR5X3RpbWU6CisJICogaXMgYW4gdW5zaWduZWQgdGltZSB2YWx1ZSByZXByZXNlbnRpbmcgdGhlCisJICogYW1vdW50IG9mIHRpbWUgdGhhdCBhY2NlbGVyYXRpb24gbXVzdCBiZSBiZWxvdyB0aGUgdmFsdWUgaW4KKwkgKiBpbmFjdGl2aXR5X3RocmVzaG9sZCBmb3IgaW5hY3Rpdml0eSB0byBiZSBkZWNsYXJlZC4gVGhlIHNjYWxlIGZhY3RvcgorCSAqIGlzIDEgc2Vjb25kL0xTQi4gVW5saWtlIHRoZSBvdGhlciBpbnRlcnJ1cHQgZnVuY3Rpb25zLCB3aGljaAorCSAqIG9wZXJhdGUgb24gdW5maWx0ZXJlZCBkYXRhLCB0aGUgaW5hY3Rpdml0eSBmdW5jdGlvbiBvcGVyYXRlcyBvbiB0aGUKKwkgKiBmaWx0ZXJlZCBvdXRwdXQgZGF0YS4gQXQgbGVhc3Qgb25lIG91dHB1dCBzYW1wbGUgbXVzdCBiZQorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGluYWN0aXZpdHkgaW50ZXJydXB0IHRvIGJlIHRyaWdnZXJlZC4gVGhpcyB3aWxsCisJICogcmVzdWx0IGluIHRoZSBmdW5jdGlvbiBhcHBlYXJpbmcgdW4tcmVzcG9uc2l2ZSBpZiB0aGUKKwkgKiBpbmFjdGl2aXR5X3RpbWUgcmVnaXN0ZXIgaXMgc2V0IHdpdGggYSB2YWx1ZSBsZXNzIHRoYW4gdGhlIHRpbWUKKwkgKiBjb25zdGFudCBvZiB0aGUgT3V0cHV0IERhdGEgUmF0ZS4gQSB6ZXJvIHZhbHVlIHdpbGwgcmVzdWx0IGluIGFuCisJICogaW50ZXJydXB0IHdoZW4gdGhlIG91dHB1dCBkYXRhIGlzIGJlbG93IGluYWN0aXZpdHlfdGhyZXNob2xkLgorCSAqLworCisJdTggaW5hY3Rpdml0eV90aW1lOworCisJLyoKKwkgKiBmcmVlX2ZhbGxfdGhyZXNob2xkOgorCSAqIGhvbGRzIHRoZSB0aHJlc2hvbGQgdmFsdWUgZm9yIEZyZWUtRmFsbCBkZXRlY3Rpb24uCisJICogVGhlIGRhdGEgZm9ybWF0IGlzIHVuc2lnbmVkLiBUaGUgcm9vdC1zdW0tc3F1YXJlKFJTUykgdmFsdWUKKwkgKiBvZiBhbGwgYXhlcyBpcyBjYWxjdWxhdGVkIGFuZCBjb21wYXJlZCB0byB0aGUgdmFsdWUgaW4KKwkgKiBmcmVlX2ZhbGxfdGhyZXNob2xkIHRvIGRldGVybWluZSBpZiBhIGZyZWUgZmFsbCBldmVudCBtYXkgYmUKKwkgKiBvY2N1cnJpbmcuICBUaGUgc2NhbGUgZmFjdG9yIGlzIDYyLjUgbWcvTFNCLiBBIHplcm8gdmFsdWUgbWF5CisJICogcmVzdWx0IGluIHVuZGVzaXJhYmxlIGJlaGF2aW9yIGlmIEZyZWUtRmFsbCBpbnRlcnJ1cHQgaXMKKwkgKiBlbmFibGVkLiBWYWx1ZXMgYmV0d2VlbiAzMDAgYW5kIDYwMCBtZyAoMHgwNSB0byAweDA5KSBhcmUKKwkgKiByZWNvbW1lbmRlZC4KKwkgKi8KKworCXU4IGZyZWVfZmFsbF90aHJlc2hvbGQ7CisKKwkvKgorCSAqIGZyZWVfZmFsbF90aW1lOgorCSAqIGlzIGFuIHVuc2lnbmVkIHRpbWUgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBtaW5pbXVtCisJICogdGltZSB0aGF0IHRoZSBSU1MgdmFsdWUgb2YgYWxsIGF4ZXMgbXVzdCBiZSBsZXNzIHRoYW4KKwkgKiBmcmVlX2ZhbGxfdGhyZXNob2xkIHRvIGdlbmVyYXRlIGEgRnJlZS1GYWxsIGludGVycnVwdC4gVGhlCisJICogc2NhbGUgZmFjdG9yIGlzIDUgbXMvTFNCLiBBIHplcm8gdmFsdWUgbWF5IHJlc3VsdCBpbgorCSAqIHVuZGVzaXJhYmxlIGJlaGF2aW9yIGlmIEZyZWUtRmFsbCBpbnRlcnJ1cHQgaXMgZW5hYmxlZC4KKwkgKiBWYWx1ZXMgYmV0d2VlbiAxMDAgdG8gMzUwIG1zICgweDE0IHRvIDB4NDYpIGFyZSByZWNvbW1lbmRlZC4KKwkgKi8KKworCXU4IGZyZWVfZmFsbF90aW1lOworCisJLyoKKwkgKiBkYXRhX3JhdGU6CisJICogU2VsZWN0cyBkZXZpY2UgYmFuZHdpZHRoIGFuZCBvdXRwdXQgZGF0YSByYXRlLgorCSAqIFJBVEUgPSAzMjAwIEh6IC8gKDJeKDE1IC0geCkpLiBEZWZhdWx0IHZhbHVlIGlzIDB4MEEsIG9yIDEwMCBIegorCSAqIE91dHB1dCBEYXRhIFJhdGUuIEFuIE91dHB1dCBEYXRhIFJhdGUgc2hvdWxkIGJlIHNlbGVjdGVkIHRoYXQKKwkgKiBpcyBhcHByb3ByaWF0ZSBmb3IgdGhlIGNvbW11bmljYXRpb24gcHJvdG9jb2wgYW5kIGZyZXF1ZW5jeQorCSAqIHNlbGVjdGVkLiBTZWxlY3RpbmcgdG9vIGhpZ2ggb2YgYW4gT3V0cHV0IERhdGEgUmF0ZSB3aXRoIGEgbG93CisJICogY29tbXVuaWNhdGlvbiBzcGVlZCB3aWxsIHJlc3VsdCBpbiBzYW1wbGVzIGJlaW5nIGRpc2NhcmRlZC4KKwkgKi8KKworCXU4IGRhdGFfcmF0ZTsKKworCS8qCisJICogZGF0YV9yYW5nZToKKwkgKiBGVUxMX1JFUzogV2hlbiB0aGlzIGJpdCBpcyBzZXQgd2l0aCB0aGUgZGV2aWNlIGlzCisJICogaW4gRnVsbC1SZXNvbHV0aW9uIE1vZGUsIHdoZXJlIHRoZSBvdXRwdXQgcmVzb2x1dGlvbiBpbmNyZWFzZXMKKwkgKiB3aXRoIFJBTkdFIHRvIG1haW50YWluIGEgNCBtZy9MU0Igc2NhbGUgZmFjdG9yLiBXaGVuIHRoaXMKKwkgKiBiaXQgaXMgY2xlYXJlZCB0aGUgZGV2aWNlIGlzIGluIDEwLWJpdCBNb2RlIGFuZCBSQU5HRSBkZXRlcm1pbmUgdGhlCisJICogbWF4aW11bSBnLVJhbmdlIGFuZCBzY2FsZSBmYWN0b3IuCisJICovCisKKyNkZWZpbmUgQURYTF9GVUxMX1JFUwkJKDEgPDwgMykKKyNkZWZpbmUgQURYTF9SQU5HRV9QTV8yZwkwCisjZGVmaW5lIEFEWExfUkFOR0VfUE1fNGcJMQorI2RlZmluZSBBRFhMX1JBTkdFX1BNXzhnCTIKKyNkZWZpbmUgQURYTF9SQU5HRV9QTV8xNmcJMworCisJdTggZGF0YV9yYW5nZTsKKworCS8qCisJICogbG93X3Bvd2VyX21vZGU6CisJICogQSAnMCcgPSBOb3JtYWwgb3BlcmF0aW9uIGFuZCBhICcxJyA9IFJlZHVjZWQKKwkgKiBwb3dlciBvcGVyYXRpb24gd2l0aCBzb21ld2hhdCBoaWdoZXIgbm9pc2UuCisJICovCisKKwl1OCBsb3dfcG93ZXJfbW9kZTsKKworCS8qCisJICogcG93ZXJfbW9kZToKKwkgKiBMSU5LOiBBICcxJyB3aXRoIGJvdGggdGhlIGFjdGl2aXR5IGFuZCBpbmFjdGl2aXR5IGZ1bmN0aW9ucworCSAqIGVuYWJsZWQgd2lsbCBkZWxheSB0aGUgc3RhcnQgb2YgdGhlIGFjdGl2aXR5IGZ1bmN0aW9uIHVudGlsCisJICogaW5hY3Rpdml0eSBpcyBkZXRlY3RlZC4gT25jZSBhY3Rpdml0eSBpcyBkZXRlY3RlZCwgaW5hY3Rpdml0eQorCSAqIGRldGVjdGlvbiB3aWxsIGJlZ2luIGFuZCBwcmV2ZW50IHRoZSBkZXRlY3Rpb24gb2YgYWN0aXZpdHkuIFRoaXMKKwkgKiBiaXQgc2VyaWFsbHkgbGlua3MgdGhlIGFjdGl2aXR5IGFuZCBpbmFjdGl2aXR5IGZ1bmN0aW9ucy4gV2hlbiAnMCcKKwkgKiB0aGUgaW5hY3Rpdml0eSBhbmQgYWN0aXZpdHkgZnVuY3Rpb25zIGFyZSBjb25jdXJyZW50LiBBZGRpdGlvbmFsCisJICogaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZSBBcHBsaWNhdGlvbiBzZWN0aW9uIHVuZGVyIExpbmsKKwkgKiBNb2RlLgorCSAqIEFVVE9fU0xFRVA6IEEgJzEnIHNldHMgdGhlIEFEWEwzNHggdG8gc3dpdGNoIHRvIFNsZWVwIE1vZGUKKwkgKiB3aGVuIGluYWN0aXZpdHkgKGFjY2VsZXJhdGlvbiBoYXMgYmVlbiBiZWxvdyBpbmFjdGl2aXR5X3RocmVzaG9sZAorCSAqIGZvciBhdCBsZWFzdCBpbmFjdGl2aXR5X3RpbWUpIGlzIGRldGVjdGVkIGFuZCB0aGUgTElOSyBiaXQgaXMgc2V0LgorCSAqIEEgJzAnIGRpc2FibGVzIGF1dG9tYXRpYyBzd2l0Y2hpbmcgdG8gU2xlZXAgTW9kZS4gU2VlIFNMRUVQCisJICogZm9yIGZ1cnRoZXIgZGVzY3JpcHRpb24uCisJICovCisKKyNkZWZpbmUgQURYTF9MSU5LCSgxIDw8IDUpCisjZGVmaW5lIEFEWExfQVVUT19TTEVFUAkoMSA8PCA0KQorCisJdTggcG93ZXJfbW9kZTsKKworCS8qCisJICogZmlmb19tb2RlOgorCSAqIEJZUEFTUyBUaGUgRklGTyBpcyBieXBhc3NlZAorCSAqIEZJRk8gICBGSUZPIGNvbGxlY3RzIHVwIHRvIDMyIHZhbHVlcyB0aGVuIHN0b3BzIGNvbGxlY3RpbmcgZGF0YQorCSAqIFNUUkVBTSBGSUZPIGhvbGRzIHRoZSBsYXN0IDMyIGRhdGEgdmFsdWVzLiBPbmNlIGZ1bGwsIHRoZSBGSUZPJ3MKKwkgKiAgICAgICAgb2xkZXN0IGRhdGEgaXMgbG9zdCBhcyBpdCBpcyByZXBsYWNlZCB3aXRoIG5ld2VyIGRhdGEKKwkgKgorCSAqIERFRkFVTFQgc2hvdWxkIGJlIEFEWExfRklGT19TVFJFQU0KKwkgKi8KKworI2RlZmluZSBBRFhMX0ZJRk9fQllQQVNTCTAKKyNkZWZpbmUgQURYTF9GSUZPX0ZJRk8JCTEKKyNkZWZpbmUgQURYTF9GSUZPX1NUUkVBTQkyCisKKwl1OCBmaWZvX21vZGU7CisKKwkvKgorCSAqIHdhdGVybWFyazoKKwkgKiBUaGUgV2F0ZXJtYXJrIGZlYXR1cmUgY2FuIGJlIHVzZWQgdG8gcmVkdWNlIHRoZSBpbnRlcnJ1cHQgbG9hZAorCSAqIG9mIHRoZSBzeXN0ZW0uIFRoZSBGSUZPIGZpbGxzIHVwIHRvIHRoZSB2YWx1ZSBzdG9yZWQgaW4gd2F0ZXJtYXJrCisJICogWzEuLjMyXSBhbmQgdGhlbiBnZW5lcmF0ZXMgYW4gaW50ZXJydXB0LgorCSAqIEEgJzAnIGRpc2FibGVzIHRoZSB3YXRlcm1hcmsgZmVhdHVyZS4KKwkgKi8KKworCXU4IHdhdGVybWFyazsKKworCXUzMiBldl90eXBlOwkvKiBFVl9BQlMgb3IgRVZfUkVMICovCisKKwl1MzIgZXZfY29kZV94OwkvKiBBQlNfWCxZLFogb3IgUkVMX1gsWSxaICovCisJdTMyIGV2X2NvZGVfeTsJLyogQUJTX1gsWSxaIG9yIFJFTF9YLFksWiAqLworCXUzMiBldl9jb2RlX3o7CS8qIEFCU19YLFksWiBvciBSRUxfWCxZLFogKi8KKworCS8qCisJICogQSB2YWxpZCBCVE4gb3IgS0VZIENvZGU7IHVzZSB0YXBfYXhpc19jb250cm9sIHRvIGRpc2FibGUKKwkgKiBldmVudCByZXBvcnRpbmcKKwkgKi8KKworCXUzMiBldl9jb2RlX3RhcFszXTsJLyogRVZfS0VZIHtYLUF4aXMsIFktQXhpcywgWi1BeGlzfSAqLworCisJLyoKKwkgKiBBIHZhbGlkIEJUTiBvciBLRVkgQ29kZSBmb3IgRnJlZS1GYWxsIG9yIEFjdGl2aXR5IGVuYWJsZXMKKwkgKiBpbnB1dCBldmVudCByZXBvcnRpbmcuIEEgJzAnIGRpc2FibGVzIHRoZSBGcmVlLUZhbGwgb3IKKwkgKiBBY3Rpdml0eSByZXBvcnRpbmcuCisJICovCisKKwl1MzIgZXZfY29kZV9mZjsJLyogRVZfS0VZICovCisJdTMyIGV2X2NvZGVfYWN0X2luYWN0aXZpdHk7CS8qIEVWX0tFWSAqLworCisJLyoKKwkgKiBVc2UgQURYTDM0eCBJTlQyIGluc3RlYWQgb2YgSU5UMQorCSAqLworCXU4IHVzZV9pbnQyOworCisJLyoKKwkgKiBBRFhMMzQ2IG9ubHkgT1JJRU5UQVRJT04gU0VOU0lORyBmZWF0dXJlCisJICogVGhlIG9yaWVudGF0aW9uIGZ1bmN0aW9uIG9mIHRoZSBBRFhMMzQ2IHJlcG9ydHMgYm90aCAyLUQgYW5kCisJICogMy1EIG9yaWVudGF0aW9uIGNvbmN1cnJlbnRseS4KKwkgKi8KKworI2RlZmluZSBBRFhMX0VOX09SSUVOVEFUSU9OXzJECQkxCisjZGVmaW5lIEFEWExfRU5fT1JJRU5UQVRJT05fM0QJCTIKKyNkZWZpbmUgQURYTF9FTl9PUklFTlRBVElPTl8yRF8zRAkzCisKKwl1OCBvcmllbnRhdGlvbl9lbmFibGU7CisKKwkvKgorCSAqIFRoZSB3aWR0aCBvZiB0aGUgZGVhZHpvbmUgcmVnaW9uIGJldHdlZW4gdHdvIG9yIG1vcmUKKwkgKiBvcmllbnRhdGlvbiBwb3NpdGlvbnMgaXMgZGV0ZXJtaW5lZCBieSBzZXR0aW5nIHRoZSBEZWFkem9uZQorCSAqIHZhbHVlLiBUaGUgZGVhZHpvbmUgcmVnaW9uIHNpemUgY2FuIGJlIHNwZWNpZmllZCB3aXRoIGEKKwkgKiByZXNvbHV0aW9uIG9mIDMuNmRlZy4gVGhlIGRlYWR6b25lIGFuZ2xlIHJlcHJlc2VudHMgdGhlIHRvdGFsCisJICogYW5nbGUgd2hlcmUgdGhlIG9yaWVudGF0aW9uIGlzIGNvbnNpZGVyZWQgaW52YWxpZC4KKwkgKi8KKworI2RlZmluZSBBRFhMX0RFQURaT05FX0FOR0xFXzBwMAkJMAkvKiAhISEwLjAgW2RlZ10gKi8KKyNkZWZpbmUgQURYTF9ERUFEWk9ORV9BTkdMRV8zcDYJCTEJLyogMy42IFtkZWddICovCisjZGVmaW5lIEFEWExfREVBRFpPTkVfQU5HTEVfN3AyCQkyCS8qIDcuMiBbZGVnXSAqLworI2RlZmluZSBBRFhMX0RFQURaT05FX0FOR0xFXzEwcDgJMwkvKiAxMC44IFtkZWddICovCisjZGVmaW5lIEFEWExfREVBRFpPTkVfQU5HTEVfMTRwNAk0CS8qIDE0LjQgW2RlZ10gKi8KKyNkZWZpbmUgQURYTF9ERUFEWk9ORV9BTkdMRV8xOHAwCTUJLyogMTguMCBbZGVnXSAqLworI2RlZmluZSBBRFhMX0RFQURaT05FX0FOR0xFXzIxcDYJNgkvKiAyMS42IFtkZWddICovCisjZGVmaW5lIEFEWExfREVBRFpPTkVfQU5HTEVfMjVwMgk3CS8qIDI1LjIgW2RlZ10gKi8KKworCXU4IGRlYWR6b25lX2FuZ2xlOworCisJLyoKKwkgKiBUbyBlbGltaW5hdGUgbW9zdCBodW1hbiBtb3Rpb24gc3VjaCBhcyB3YWxraW5nIG9yIHNoYWtpbmcsCisJICogYSBEaXZpc29yIHZhbHVlIHNob3VsZCBiZSBzZWxlY3RlZCB0byBlZmZlY3RpdmVseSBsaW1pdCB0aGUKKwkgKiBvcmllbnRhdGlvbiBiYW5kd2lkdGguIFNldCB0aGUgZGVwdGggb2YgdGhlIGZpbHRlciB1c2VkIHRvCisJICogbG93LXBhc3MgZmlsdGVyIHRoZSBtZWFzdXJlZCBhY2NlbGVyYXRpb24gZm9yIHN0YWJsZQorCSAqIG9yaWVudGF0aW9uIHNlbnNpbmcKKwkgKi8KKworI2RlZmluZSBBRFhMX0xQX0ZJTFRFUl9ESVZJU09SXzIJMAorI2RlZmluZSBBRFhMX0xQX0ZJTFRFUl9ESVZJU09SXzQJMQorI2RlZmluZSBBRFhMX0xQX0ZJTFRFUl9ESVZJU09SXzgJMgorI2RlZmluZSBBRFhMX0xQX0ZJTFRFUl9ESVZJU09SXzE2CTMKKyNkZWZpbmUgQURYTF9MUF9GSUxURVJfRElWSVNPUl8zMgk0CisjZGVmaW5lIEFEWExfTFBfRklMVEVSX0RJVklTT1JfNjQJNQorI2RlZmluZSBBRFhMX0xQX0ZJTFRFUl9ESVZJU09SXzEyOAk2CisjZGVmaW5lIEFEWExfTFBfRklMVEVSX0RJVklTT1JfMjU2CTcKKworCXU4IGRpdmlzb3JfbGVuZ3RoOworCisJdTMyIGV2X2NvZGVzX29yaWVudF8yZFs0XTsJLyogRVZfS0VZIHsrWCwgLVgsICtZLCAtWX0gKi8KKwl1MzIgZXZfY29kZXNfb3JpZW50XzNkWzZdOwkvKiBFVl9LRVkgeytaLCArWSwgK1gsIC1YLCAtWSwgLVp9ICovCit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lucHV0L2N5OGN0bWcxMTBfcGRhdGEuaCBiL2luY2x1ZGUvbGludXgvaW5wdXQvY3k4Y3RtZzExMF9wZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NTIyY2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0L2N5OGN0bWcxMTBfcGRhdGEuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9MSU5VWF9DWThDVE1HMTEwX1BEQVRBX0gKKyNkZWZpbmUgX0xJTlVYX0NZOENUTUcxMTBfUERBVEFfSAorCitzdHJ1Y3QgY3k4Y3RtZzExMF9wZGF0YQoreworCWludCByZXNldF9waW47CQkvKiBSZXNldCBwaW4gaXMgd2lyZWQgdG8gdGhpcyBHUElPIChvcHRpb25hbCkgKi8KKwlpbnQgaXJxX3BpbjsJCS8qIElSUSBwaW4gaXMgd2lyZWQgdG8gdGhpcyBHUElPICovCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmgKaW5kZXggYzk2NGNkNy4uODAzNTJhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmgKQEAgLTQxLDYgKzQxLDkgQEAKICAqIEBjb2xfc2Nhbl9kZWxheV91czogZGVsYXksIG1lYXN1cmVkIGluIG1pY3Jvc2Vjb25kcywgdGhhdCBpcwogICoJbmVlZGVkIGJlZm9yZSB3ZSBjYW4ga2V5cGFkIGFmdGVyIGFjdGl2YXRpbmcgY29sdW1uIGdwaW8KICAqIEBkZWJvdW5jZV9tczogZGVib3VuY2UgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzCisgKiBAY2x1c3RlcmVkX2lycTogbWF5IGJlIHNwZWNpZmllZCBpZiBpbnRlcnJ1cHRzIG9mIGFsbCByb3cvY29sdW1uIEdQSU9zCisgKglhcmUgYnVuZGxlZCB0byBvbmUgc2luZ2xlIGlycQorICogQGNsdXN0ZXJlZF9pcnFfZmxhZ3M6IGZsYWdzIHRoYXQgYXJlIG5lZWRlZCBmb3IgdGhlIGNsdXN0ZXJlZCBpcnEKICAqIEBhY3RpdmVfbG93OiBncGlvIHBvbGFyaXR5CiAgKiBAd2FrZXVwOiBjb250cm9scyB3aGV0aGVyIHRoZSBkZXZpY2Ugc2hvdWxkIGJlIHNldCB1cCBhcyB3YWtldXAKICAqCXNvdXJjZQpAQCAtNjMsNiArNjYsOSBAQAogCS8qIGtleSBkZWJvdW5jZSBpbnRlcnZhbCBpbiBtaWxsaS1zZWNvbmQgKi8KIAl1bnNpZ25lZCBpbnQJZGVib3VuY2VfbXM7CiAKKwl1bnNpZ25lZCBpbnQJY2x1c3RlcmVkX2lycTsKKwl1bnNpZ25lZCBpbnQJY2x1c3RlcmVkX2lycV9mbGFnczsKKwogCWJvb2wJCWFjdGl2ZV9sb3c7CiAJYm9vbAkJd2FrZXVwOwogCWJvb2wJCW5vX2F1dG9yZXBlYXQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ludGVsX3BtaWNfZ3Bpby5oIGIvaW5jbHVkZS9saW51eC9pbnRlbF9wbWljX2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjAxMDlhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pbnRlbF9wbWljX2dwaW8uaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIExJTlVYX0lOVEVMX1BNSUNfSAorI2RlZmluZSBMSU5VWF9JTlRFTF9QTUlDX0gKKworc3RydWN0IGludGVsX3BtaWNfZ3Bpb19wbGF0Zm9ybV9kYXRhIHsKKwkvKiB0aGUgZmlyc3QgSVJRIG9mIHRoZSBjaGlwICovCisJdW5zaWduZWQJaXJxX2Jhc2U7CisJLyogbnVtYmVyIGFzc2lnbmVkIHRvIHRoZSBmaXJzdCBHUElPICovCisJdW5zaWduZWQJZ3Bpb19iYXNlOworCS8qIHNyYW0gYWRkcmVzcyBmb3IgZ3Bpb2ludHIgcmVnaXN0ZXIsIHRoZSBsYW5nd2VsbCBjaGlwIHdpbGwgbWFwCisJICogdGhlIFBNSUMgc3BpIEdQSU8gZXhwYW5kZXIncyBHUElPSU5UUiByZWdpc3RlciBpbiBzcmFtLgorCSAqLworCXVuc2lnbmVkCWdwaW9pbnRyOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAppbmRleCBjMjMzMTEzLi5hMDM4NGE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKQEAgLTUzLDE2ICs1MywyMSBAQAogICogSVJRRl9PTkVTSE9UIC0gSW50ZXJydXB0IGlzIG5vdCByZWVuYWJsZWQgYWZ0ZXIgdGhlIGhhcmRpcnEgaGFuZGxlciBmaW5pc2hlZC4KICAqICAgICAgICAgICAgICAgIFVzZWQgYnkgdGhyZWFkZWQgaW50ZXJydXB0cyB3aGljaCBuZWVkIHRvIGtlZXAgdGhlCiAgKiAgICAgICAgICAgICAgICBpcnEgbGluZSBkaXNhYmxlZCB1bnRpbCB0aGUgdGhyZWFkZWQgaGFuZGxlciBoYXMgYmVlbiBydW4uCisgKiBJUlFGX05PX1NVU1BFTkQgLSBEbyBub3QgZGlzYWJsZSB0aGlzIElSUSBkdXJpbmcgc3VzcGVuZAorICoKICAqLwogI2RlZmluZSBJUlFGX0RJU0FCTEVECQkweDAwMDAwMDIwCiAjZGVmaW5lIElSUUZfU0FNUExFX1JBTkRPTQkweDAwMDAwMDQwCiAjZGVmaW5lIElSUUZfU0hBUkVECQkweDAwMDAwMDgwCiAjZGVmaW5lIElSUUZfUFJPQkVfU0hBUkVECTB4MDAwMDAxMDAKLSNkZWZpbmUgSVJRRl9USU1FUgkJMHgwMDAwMDIwMAorI2RlZmluZSBfX0lSUUZfVElNRVIJCTB4MDAwMDAyMDAKICNkZWZpbmUgSVJRRl9QRVJDUFUJCTB4MDAwMDA0MDAKICNkZWZpbmUgSVJRRl9OT0JBTEFOQ0lORwkweDAwMDAwODAwCiAjZGVmaW5lIElSUUZfSVJRUE9MTAkJMHgwMDAwMTAwMAogI2RlZmluZSBJUlFGX09ORVNIT1QJCTB4MDAwMDIwMDAKKyNkZWZpbmUgSVJRRl9OT19TVVNQRU5ECQkweDAwMDA0MDAwCisKKyNkZWZpbmUgSVJRRl9USU1FUgkJKF9fSVJRRl9USU1FUiB8IElSUUZfTk9fU1VTUEVORCkKIAogLyoKICAqIEJpdHMgdXNlZCBieSB0aHJlYWRlZCBoYW5kbGVyczoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW8tbWFwcGluZy5oIGIvaW5jbHVkZS9saW51eC9pby1tYXBwaW5nLmgKaW5kZXggMjUwODVkZC4uZTBlYTQwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pby1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9saW51eC9pby1tYXBwaW5nLmgKQEAgLTc5LDcgKzc5LDkgQEAKIAogLyogQXRvbWljIG1hcC91bm1hcCAqLwogc3RhdGljIGlubGluZSB2b2lkICoKLWlvX21hcHBpbmdfbWFwX2F0b21pY193YyhzdHJ1Y3QgaW9fbWFwcGluZyAqbWFwcGluZywgdW5zaWduZWQgbG9uZyBvZmZzZXQpCitpb19tYXBwaW5nX21hcF9hdG9taWNfd2Moc3RydWN0IGlvX21hcHBpbmcgKm1hcHBpbmcsCisJCQkgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkgaW50IHNsb3QpCiB7CiAJcmVzb3VyY2Vfc2l6ZV90IHBoeXNfYWRkcjsKIAl1bnNpZ25lZCBsb25nIHBmbjsKQEAgLTg3LDEzICs4OSwxMyBAQAogCUJVR19PTihvZmZzZXQgPj0gbWFwcGluZy0+c2l6ZSk7CiAJcGh5c19hZGRyID0gbWFwcGluZy0+YmFzZSArIG9mZnNldDsKIAlwZm4gPSAodW5zaWduZWQgbG9uZykgKHBoeXNfYWRkciA+PiBQQUdFX1NISUZUKTsKLQlyZXR1cm4gaW9tYXBfYXRvbWljX3Byb3RfcGZuKHBmbiwgS01fVVNFUjAsIG1hcHBpbmctPnByb3QpOworCXJldHVybiBpb21hcF9hdG9taWNfcHJvdF9wZm4ocGZuLCBzbG90LCBtYXBwaW5nLT5wcm90KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1pb19tYXBwaW5nX3VubWFwX2F0b21pYyh2b2lkICp2YWRkcikKK2lvX21hcHBpbmdfdW5tYXBfYXRvbWljKHZvaWQgKnZhZGRyLCBpbnQgc2xvdCkKIHsKLQlpb3VubWFwX2F0b21pYyh2YWRkciwgS01fVVNFUjApOworCWlvdW5tYXBfYXRvbWljKHZhZGRyLCBzbG90KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkICoKQEAgLTEzMywxMyArMTM1LDE1IEBACiAKIC8qIEF0b21pYyBtYXAvdW5tYXAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCAqCi1pb19tYXBwaW5nX21hcF9hdG9taWNfd2Moc3RydWN0IGlvX21hcHBpbmcgKm1hcHBpbmcsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoraW9fbWFwcGluZ19tYXBfYXRvbWljX3djKHN0cnVjdCBpb19tYXBwaW5nICptYXBwaW5nLAorCQkJIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJIGludCBzbG90KQogewogCXJldHVybiAoKGNoYXIgKikgbWFwcGluZykgKyBvZmZzZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotaW9fbWFwcGluZ191bm1hcF9hdG9taWModm9pZCAqdmFkZHIpCitpb19tYXBwaW5nX3VubWFwX2F0b21pYyh2b2lkICp2YWRkciwgaW50IHNsb3QpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW8uaCBiL2luY2x1ZGUvbGludXgvaW8uaAppbmRleCA2YzdmMGJhLi43ZmQyZDIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lvLmgKKysrIGIvaW5jbHVkZS9saW51eC9pby5oCkBAIC0yOSwxMCArMjksMTAgQEAKIAogI2lmZGVmIENPTkZJR19NTVUKIGludCBpb3JlbWFwX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCBwZ3Byb3RfdCBwcm90KTsKKwkJICAgICAgIHBoeXNfYWRkcl90IHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCk7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgaW9yZW1hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCkKKwkJCQkgICAgIHBoeXNfYWRkcl90IHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCkKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9tbXUuaCBiL2luY2x1ZGUvbGludXgvaW9tbXUuaAppbmRleCBiZTIyYWQ4Li4wYTJiYTQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lvbW11LmgKKysrIGIvaW5jbHVkZS9saW51eC9pb21tdS5oCkBAIC0zMCw2ICszMCw3IEBACiB9OwogCiAjZGVmaW5lIElPTU1VX0NBUF9DQUNIRV9DT0hFUkVOQ1kJMHgxCisjZGVmaW5lIElPTU1VX0NBUF9JTlRSX1JFTUFQCQkweDIJLyogaXNvbGF0ZXMgZGV2aWNlIGludHJzICovCiAKIHN0cnVjdCBpb21tdV9vcHMgewogCWludCAoKmRvbWFpbl9pbml0KShzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcF92cy5oIGIvaW5jbHVkZS9saW51eC9pcF92cy5oCmluZGV4IGRmYzE3MDMuLjk3MDhkZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXBfdnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lwX3ZzLmgKQEAgLTE5LDYgKzE5LDcgQEAKICAqLwogI2RlZmluZSBJUF9WU19TVkNfRl9QRVJTSVNURU5UCTB4MDAwMQkJLyogcGVyc2lzdGVudCBwb3J0ICovCiAjZGVmaW5lIElQX1ZTX1NWQ19GX0hBU0hFRAkweDAwMDIJCS8qIGhhc2hlZCBlbnRyeSAqLworI2RlZmluZSBJUF9WU19TVkNfRl9PTkVQQUNLRVQJMHgwMDA0CQkvKiBvbmUtcGFja2V0IHNjaGVkdWxpbmcgKi8KIAogLyoKICAqICAgICAgRGVzdGluYXRpb24gU2VydmVyIEZsYWdzCkBAIC04NSw2ICs4Niw3IEBACiAjZGVmaW5lIElQX1ZTX0NPTk5fRl9TRVFfTUFTSwkweDA2MDAJCS8qIGluL291dCBzZXF1ZW5jZSBtYXNrICovCiAjZGVmaW5lIElQX1ZTX0NPTk5fRl9OT19DUE9SVAkweDA4MDAJCS8qIG5vIGNsaWVudCBwb3J0IHNldCB5ZXQgKi8KICNkZWZpbmUgSVBfVlNfQ09OTl9GX1RFTVBMQVRFCTB4MTAwMAkJLyogdGVtcGxhdGUsIG5vdCBjb25uZWN0aW9uICovCisjZGVmaW5lIElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUCTB4MjAwMAkJLyogZm9yd2FyZCBvbmx5IG9uZSBwYWNrZXQgKi8KIAogI2RlZmluZSBJUF9WU19TQ0hFRE5BTUVfTUFYTEVOCTE2CiAjZGVmaW5lIElQX1ZTX0lGTkFNRV9NQVhMRU4JMTYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXB2Ni5oIGIvaW5jbHVkZS9saW51eC9pcHY2LmgKaW5kZXggOTllMWFiNy4uYWI5ZTllOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcHY2LmgKKysrIGIvaW5jbHVkZS9saW51eC9pcHY2LmgKQEAgLTU4LDcgKzU4LDcgQEAKIAkvKiAKIAkgKiBUTFYgZW5jb2RlZCBvcHRpb24gZGF0YSBmb2xsb3dzLgogCSAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CS8qIHJlcXVpcmVkIGZvciBzb21lIGFyY2hzICovCit9IF9fcGFja2VkOwkvKiByZXF1aXJlZCBmb3Igc29tZSBhcmNocyAqLwogCiAjZGVmaW5lIGlwdjZfZGVzdG9wdF9oZHIgaXB2Nl9vcHRfaGRyCiAjZGVmaW5lIGlwdjZfaG9wb3B0X2hkciAgaXB2Nl9vcHRfaGRyCkBAIC05OSw3ICs5OSw3IEBACiAJX191OAkJCXR5cGU7CiAJX191OAkJCWxlbmd0aDsKIAlzdHJ1Y3QgaW42X2FkZHIJCWFkZHI7Ci19IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7Cit9IF9fcGFja2VkOwogCiAvKgogICoJSVB2NiBmaXhlZCBoZWFkZXIKQEAgLTI0Niw3ICsyNDYsNyBAQAogCV9fdTE2CQkJc3JjcnQ7CiAJX191MTYJCQlkc3QxOwogCV9fdTE2CQkJbGFzdG9wdDsKLQlfX3UzMgkJCW5ob2ZmOworCV9fdTE2CQkJbmhvZmY7CiAJX191MTYJCQlmbGFnczsKICNpZiBkZWZpbmVkKENPTkZJR19JUFY2X01JUDYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTUlQNl9NT0RVTEUpCiAJX191MTYJCQlkc3RoYW87CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lzY3NpX2Jvb3Rfc3lzZnMuaCBiL2luY2x1ZGUvbGludXgvaXNjc2lfYm9vdF9zeXNmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZTZjMTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lzY3NpX2Jvb3Rfc3lzZnMuaApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIEV4cG9ydCB0aGUgaVNDU0kgYm9vdCBpbmZvIHRvIHVzZXJsYW5kIHZpYSBzeXNmcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBNaWtlIENocmlzdGllCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIuMCBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9JU0NTSV9CT09UX1NZU0ZTXworI2RlZmluZSBfSVNDU0lfQk9PVF9TWVNGU18KKworLyoKKyAqIFRoZSB0ZXh0IGF0dHJpYnV0ZXMgbmFtZXMgZm9yIGVhY2ggb2YgdGhlIGtvYmplY3RzLgorKi8KK2VudW0gaXNjc2lfYm9vdF9ldGhfcHJvcGVydGllc19lbnVtIHsKKwlJU0NTSV9CT09UX0VUSF9JTkRFWCwKKwlJU0NTSV9CT09UX0VUSF9GTEFHUywKKwlJU0NTSV9CT09UX0VUSF9JUF9BRERSLAorCUlTQ1NJX0JPT1RfRVRIX1NVQk5FVF9NQVNLLAorCUlTQ1NJX0JPT1RfRVRIX09SSUdJTiwKKwlJU0NTSV9CT09UX0VUSF9HQVRFV0FZLAorCUlTQ1NJX0JPT1RfRVRIX1BSSU1BUllfRE5TLAorCUlTQ1NJX0JPT1RfRVRIX1NFQ09OREFSWV9ETlMsCisJSVNDU0lfQk9PVF9FVEhfREhDUCwKKwlJU0NTSV9CT09UX0VUSF9WTEFOLAorCUlTQ1NJX0JPT1RfRVRIX01BQywKKwkvKiBldGhfcGNpX2JkZiAtIHRoaXMgaXMgcmVwbGFjZWQgYnkgbGluayB0byB0aGUgZGV2aWNlIGl0c2VsZi4gKi8KKwlJU0NTSV9CT09UX0VUSF9IT1NUTkFNRSwKKwlJU0NTSV9CT09UX0VUSF9FTkRfTUFSS0VSLAorfTsKKworZW51bSBpc2NzaV9ib290X3RndF9wcm9wZXJ0aWVzX2VudW0geworCUlTQ1NJX0JPT1RfVEdUX0lOREVYLAorCUlTQ1NJX0JPT1RfVEdUX0ZMQUdTLAorCUlTQ1NJX0JPT1RfVEdUX0lQX0FERFIsCisJSVNDU0lfQk9PVF9UR1RfUE9SVCwKKwlJU0NTSV9CT09UX1RHVF9MVU4sCisJSVNDU0lfQk9PVF9UR1RfQ0hBUF9UWVBFLAorCUlTQ1NJX0JPT1RfVEdUX05JQ19BU1NPQywKKwlJU0NTSV9CT09UX1RHVF9OQU1FLAorCUlTQ1NJX0JPT1RfVEdUX0NIQVBfTkFNRSwKKwlJU0NTSV9CT09UX1RHVF9DSEFQX1NFQ1JFVCwKKwlJU0NTSV9CT09UX1RHVF9SRVZfQ0hBUF9OQU1FLAorCUlTQ1NJX0JPT1RfVEdUX1JFVl9DSEFQX1NFQ1JFVCwKKwlJU0NTSV9CT09UX1RHVF9FTkRfTUFSS0VSLAorfTsKKworZW51bSBpc2NzaV9ib290X2luaXRpYXRvcl9wcm9wZXJ0aWVzX2VudW0geworCUlTQ1NJX0JPT1RfSU5JX0lOREVYLAorCUlTQ1NJX0JPT1RfSU5JX0ZMQUdTLAorCUlTQ1NJX0JPT1RfSU5JX0lTTlNfU0VSVkVSLAorCUlTQ1NJX0JPT1RfSU5JX1NMUF9TRVJWRVIsCisJSVNDU0lfQk9PVF9JTklfUFJJX1JBRElVU19TRVJWRVIsCisJSVNDU0lfQk9PVF9JTklfU0VDX1JBRElVU19TRVJWRVIsCisJSVNDU0lfQk9PVF9JTklfSU5JVElBVE9SX05BTUUsCisJSVNDU0lfQk9PVF9JTklfRU5EX01BUktFUiwKK307CisKK3N0cnVjdCBhdHRyaWJ1dGVfZ3JvdXA7CisKK3N0cnVjdCBpc2NzaV9ib290X2tvYmogeworCXN0cnVjdCBrb2JqZWN0IGtvYmo7CisJc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqYXR0cl9ncm91cDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwkvKgorCSAqIFBvaW50ZXIgdG8gc3RvcmUgZHJpdmVyIHNwZWNpZmljIGluZm8uIElmIHNldCB0aGlzIHdpbGwKKwkgKiBiZSBmcmVlZCBmb3IgdGhlIExMRCB3aGVuIHRoZSBrb2JqIHJlbGVhc2UgZnVuY3Rpb24gaXMgY2FsbGVkLgorCSAqLworCXZvaWQgKmRhdGE7CisJLyoKKwkgKiBEcml2ZXIgc3BlY2lmaWMgc2hvdyBmdW5jdGlvbi4KKwkgKgorCSAqIFRoZSBlbnVtIG9mIHRoZSB0eXBlLiBUaGlzIGNhbiBiZSBhbnkgdmFsdWUgb2YgdGhlIGFib3ZlCisJICogcHJvcGVydGllcy4KKwkgKi8KKwlzc2l6ZV90ICgqc2hvdykgKHZvaWQgKmRhdGEsIGludCB0eXBlLCBjaGFyICpidWYpOworCisJLyoKKwkgKiBEcml2ZXJzIHNwZWNpZmljIHZpc2liaWxpdHkgZnVuY3Rpb24uCisJICogVGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gaWYgdGhleSB0aGUgYXR0ciBzaG91bGQgYmUgcmVhZGFibGUKKwkgKiB3cml0YWJsZSBvciBzaG91bGQgbm90IGJlIHNob3duLgorCSAqCisJICogVGhlIGVudW0gb2YgdGhlIHR5cGUuIFRoaXMgY2FuIGJlIGFueSB2YWx1ZSBvZiB0aGUgYWJvdmUKKwkgKiBwcm9wZXJ0aWVzLgorCSAqLworCW1vZGVfdCAoKmlzX3Zpc2libGUpICh2b2lkICpkYXRhLCBpbnQgdHlwZSk7Cit9OworCitzdHJ1Y3QgaXNjc2lfYm9vdF9rc2V0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGtvYmpfbGlzdDsKKwlzdHJ1Y3Qga3NldCAqa3NldDsKK307CisKK3N0cnVjdCBpc2NzaV9ib290X2tvYmogKgoraXNjc2lfYm9vdF9jcmVhdGVfaW5pdGlhdG9yKHN0cnVjdCBpc2NzaV9ib290X2tzZXQgKmJvb3Rfa3NldCwgaW50IGluZGV4LAorCQkJICAgIHZvaWQgKmRhdGEsCisJCQkgICAgc3NpemVfdCAoKnNob3cpICh2b2lkICpkYXRhLCBpbnQgdHlwZSwgY2hhciAqYnVmKSwKKwkJCSAgICBtb2RlX3QgKCppc192aXNpYmxlKSAodm9pZCAqZGF0YSwgaW50IHR5cGUpKTsKKworc3RydWN0IGlzY3NpX2Jvb3Rfa29iaiAqCitpc2NzaV9ib290X2NyZWF0ZV9ldGhlcm5ldChzdHJ1Y3QgaXNjc2lfYm9vdF9rc2V0ICpib290X2tzZXQsIGludCBpbmRleCwKKwkJCSAgIHZvaWQgKmRhdGEsCisJCQkgICBzc2l6ZV90ICgqc2hvdykgKHZvaWQgKmRhdGEsIGludCB0eXBlLCBjaGFyICpidWYpLAorCQkJICAgbW9kZV90ICgqaXNfdmlzaWJsZSkgKHZvaWQgKmRhdGEsIGludCB0eXBlKSk7CitzdHJ1Y3QgaXNjc2lfYm9vdF9rb2JqICoKK2lzY3NpX2Jvb3RfY3JlYXRlX3RhcmdldChzdHJ1Y3QgaXNjc2lfYm9vdF9rc2V0ICpib290X2tzZXQsIGludCBpbmRleCwKKwkJCSB2b2lkICpkYXRhLAorCQkJIHNzaXplX3QgKCpzaG93KSAodm9pZCAqZGF0YSwgaW50IHR5cGUsIGNoYXIgKmJ1ZiksCisJCQkgbW9kZV90ICgqaXNfdmlzaWJsZSkgKHZvaWQgKmRhdGEsIGludCB0eXBlKSk7CisKK3N0cnVjdCBpc2NzaV9ib290X2tzZXQgKmlzY3NpX2Jvb3RfY3JlYXRlX2tzZXQoY29uc3QgY2hhciAqc2V0X25hbWUpOworc3RydWN0IGlzY3NpX2Jvb3Rfa3NldCAqaXNjc2lfYm9vdF9jcmVhdGVfaG9zdF9rc2V0KHVuc2lnbmVkIGludCBob3N0bm8pOwordm9pZCBpc2NzaV9ib290X2Rlc3Ryb3lfa3NldChzdHJ1Y3QgaXNjc2lfYm9vdF9rc2V0ICpib290X2tzZXQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXNjc2lfaWJmdC5oIGIvaW5jbHVkZS9saW51eC9pc2NzaV9pYmZ0LmgKaW5kZXggZDJlNDA0Mi4uOGJhN2U1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pc2NzaV9pYmZ0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pc2NzaV9pYmZ0LmgKQEAgLTIxLDIxICsyMSwxMyBAQAogI2lmbmRlZiBJU0NTSV9JQkZUX0gKICNkZWZpbmUgSVNDU0lfSUJGVF9ICiAKLXN0cnVjdCBpYmZ0X3RhYmxlX2hlYWRlciB7Ci0JY2hhciBzaWduYXR1cmVbNF07Ci0JdTMyIGxlbmd0aDsKLQl1OCByZXZpc2lvbjsKLQl1OCBjaGVja3N1bTsKLQljaGFyIG9lbV9pZFs2XTsKLQljaGFyIG9lbV90YWJsZV9pZFs4XTsKLQljaGFyIHJlc2VydmVkWzI0XTsKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgogCiAvKgogICogTG9naWNhbCBsb2NhdGlvbiBvZiBpU0NTSSBCb290IEZvcm1hdCBUYWJsZS4KICAqIElmIHRoZSB2YWx1ZSBpcyBOVUxMIHRoZXJlIGlzIG5vIGlCRlQgb24gdGhlIG1hY2hpbmUuCiAgKi8KLWV4dGVybiBzdHJ1Y3QgaWJmdF90YWJsZV9oZWFkZXIgKmliZnRfYWRkcjsKK2V4dGVybiBzdHJ1Y3QgYWNwaV90YWJsZV9pYmZ0ICppYmZ0X2FkZHI7CiAKIC8qCiAgKiBSb3V0aW5lIHVzZWQgdG8gZmluZCBhbmQgcmVzZXJ2ZSB0aGUgaVNDU0kgQm9vdCBGb3JtYXQgVGFibGUuIFRoZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pc2RuaWYuaCBiL2luY2x1ZGUvbGludXgvaXNkbmlmLmgKaW5kZXggYjliNWE2OC4uYjhjMjNmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pc2RuaWYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lzZG5pZi5oCkBAIC0zMTcsNyArMzE3LDcgQEAKIAlfX3U4IHJfc2NhbnRpbWU7CiAJX191OCByX2lkW0ZBWElETEVOXTsKIAlfX3U4IHJfY29kZTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgVDMwX3M7Cit9IF9fcGFja2VkIFQzMF9zOwogCiAjZGVmaW5lIElTRE5fVFRZX0ZBWF9DT05OX0lOCTAKICNkZWZpbmUgSVNETl9UVFlfRkFYX0NPTk5fT1VUCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvamJkMi5oIGIvaW5jbHVkZS9saW51eC9qYmQyLmgKaW5kZXggYTRkMmU5Zi4uYWRmODMyZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qYmQyLmgKKysrIGIvaW5jbHVkZS9saW51eC9qYmQyLmgKQEAgLTEwMjYsMTEgKzEwMjYsMTIgQEAKIAogc3RydWN0IGpiZDJfYnVmZmVyX3RyaWdnZXJfdHlwZSB7CiAJLyoKLQkgKiBGaXJlZCBqdXN0IGJlZm9yZSBhIGJ1ZmZlciBpcyB3cml0dGVuIHRvIHRoZSBqb3VybmFsLgotCSAqIG1hcHBlZF9kYXRhIGlzIGEgbWFwcGVkIGJ1ZmZlciB0aGF0IGlzIHRoZSBmcm96ZW4gZGF0YSBmb3IKLQkgKiBjb21taXQuCisJICogRmlyZWQgYSB0aGUgbW9tZW50IGRhdGEgdG8gd3JpdGUgdG8gdGhlIGpvdXJuYWwgYXJlIGtub3duIHRvIGJlCisJICogc3RhYmxlIC0gc28gZWl0aGVyIGF0IHRoZSBtb21lbnQgYl9mcm96ZW5fZGF0YSBpcyBjcmVhdGVkIG9yIGp1c3QKKwkgKiBiZWZvcmUgYSBidWZmZXIgaXMgd3JpdHRlbiB0byB0aGUgam91cm5hbC4gIG1hcHBlZF9kYXRhIGlzIGEgbWFwcGVkCisJICogYnVmZmVyIHRoYXQgaXMgdGhlIGZyb3plbiBkYXRhIGZvciBjb21taXQuCiAJICovCi0Jdm9pZCAoKnRfY29tbWl0KShzdHJ1Y3QgamJkMl9idWZmZXJfdHJpZ2dlcl90eXBlICp0eXBlLAorCXZvaWQgKCp0X2Zyb3plbikoc3RydWN0IGpiZDJfYnVmZmVyX3RyaWdnZXJfdHlwZSAqdHlwZSwKIAkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCB2b2lkICptYXBwZWRfZGF0YSwKIAkJCSBzaXplX3Qgc2l6ZSk7CiAKQEAgLTEwNDIsNyArMTA0Myw3IEBACiAJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKIH07CiAKLWV4dGVybiB2b2lkIGpiZDJfYnVmZmVyX2NvbW1pdF90cmlnZ2VyKHN0cnVjdCBqb3VybmFsX2hlYWQgKmpoLAorZXh0ZXJuIHZvaWQgamJkMl9idWZmZXJfZnJvemVuX3RyaWdnZXIoc3RydWN0IGpvdXJuYWxfaGVhZCAqamgsCiAJCQkJICAgICAgIHZvaWQgKm1hcHBlZF9kYXRhLAogCQkJCSAgICAgICBzdHJ1Y3QgamJkMl9idWZmZXJfdHJpZ2dlcl90eXBlICp0cmlnZ2Vycyk7CiBleHRlcm4gdm9pZCBqYmQyX2J1ZmZlcl9hYm9ydF90cmlnZ2VyKHN0cnVjdCBqb3VybmFsX2hlYWQgKmpoLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qZmZzMi5oIGIvaW5jbHVkZS9saW51eC9qZmZzMi5oCmluZGV4IDA4NzRhYjUuLmVkYjkyMzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvamZmczIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2pmZnMyLmgKQEAgLTE4NSw3ICsxODUsNyBAQAogCWppbnQzMl90IGhkcl9jcmM7CiAJamludDMyX3QgaW5vOwkJLyogaW5vZGUgbnVtYmVyICovCiAJamludDMyX3QgeGlkOwkJLyogWEFUVFIgaWRlbnRpZmllciBudW1iZXIgKi8KLQlqaW50MzJfdCB4c2Vxbm87CS8qIHhyZWYgc2VxdWVuY2lhbCBudW1iZXIgKi8KKwlqaW50MzJfdCB4c2Vxbm87CS8qIHhyZWYgc2VxdWVudGlhbCBudW1iZXIgKi8KIAlqaW50MzJfdCBub2RlX2NyYzsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2RiLmggYi9pbmNsdWRlL2xpbnV4L2tkYi5oCmluZGV4IGNjYjJiM2UuLmVhNmU1MjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2RiLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZGIuaApAQCAtMTE0LDQgKzExNCw4IEBACiAJS0RCX0lOSVRfRUFSTFksCiAJS0RCX0lOSVRfRlVMTCwKIH07CisKK2V4dGVybiBpbnQga2RiZ2V0aW50ZW52KGNvbnN0IGNoYXIgKiwgaW50ICopOworZXh0ZXJuIGludCBrZGJfc2V0KGludCwgY29uc3QgY2hhciAqKik7CisKICNlbmRpZgkvKiAhX0tEQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaAppbmRleCA4MzE3ZWM0Li4zOGU0NjJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKQEAgLTE3MSw2ICsxNzEsMTEgQEAKIH0KICNlbmRpZgogCitzdHJ1Y3QgdmFfZm9ybWF0IHsKKwljb25zdCBjaGFyICpmbXQ7CisJdmFfbGlzdCAqdmE7Cit9OworCiBleHRlcm4gc3RydWN0IGF0b21pY19ub3RpZmllcl9oZWFkIHBhbmljX25vdGlmaWVyX2xpc3Q7CiBleHRlcm4gbG9uZyAoKnBhbmljX2JsaW5rKShsb25nIHRpbWUpOwogTk9SRVRfVFlQRSB2b2lkIHBhbmljKGNvbnN0IGNoYXIgKiBmbXQsIC4uLikKQEAgLTUwOCw5ICs1MTMsNiBAQAogZXh0ZXJuIHZvaWQgdHJhY2luZ19zdG9wKHZvaWQpOwogZXh0ZXJuIHZvaWQgZnRyYWNlX29mZl9wZXJtYW5lbnQodm9pZCk7CiAKLWV4dGVybiB2b2lkCi1mdHJhY2Vfc3BlY2lhbCh1bnNpZ25lZCBsb25nIGFyZzEsIHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczKTsKLQogc3RhdGljIGlubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQogX19fX3RyYWNlX3ByaW50a19jaGVja19mb3JtYXQoY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CkBAIC01ODYsOCArNTg4LDYgQEAKIAogZXh0ZXJuIHZvaWQgZnRyYWNlX2R1bXAoZW51bSBmdHJhY2VfZHVtcF9tb2RlIG9vcHNfZHVtcF9tb2RlKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQKLWZ0cmFjZV9zcGVjaWFsKHVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMpIHsgfQogc3RhdGljIGlubGluZSBpbnQKIHRyYWNlX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOwogCkBAIC03MjgsMTIgKzcyOCw2IEBACiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKLSNpZm5kZWYgX19FWFBPUlRFRF9IRUFERVJTX18KLSNpZm5kZWYgX19LRVJORUxfXwotI3dhcm5pbmcgQXR0ZW1wdCB0byB1c2Uga2VybmVsIGhlYWRlcnMgZnJvbSB1c2VyIHNwYWNlLCBzZWUgaHR0cDovL2tlcm5lbG5ld2JpZXMub3JnL0tlcm5lbEhlYWRlcnMKLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0jZW5kaWYgLyogX19FWFBPUlRFRF9IRUFERVJTX18gKi8KLQogI2RlZmluZSBTSV9MT0FEX1NISUZUCTE2CiBzdHJ1Y3Qgc3lzaW5mbyB7CiAJbG9uZyB1cHRpbWU7CQkJLyogU2Vjb25kcyBzaW5jZSBib290ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tnZGIuaCBiL2luY2x1ZGUvbGludXgva2dkYi5oCmluZGV4IDkzNDBmMzQuLmNjOTZmMGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2dkYi5oCisrKyBiL2luY2x1ZGUvbGludXgva2dkYi5oCkBAIC05MCw2ICs5MCwxOSBAQAogCWVudW0ga2dkYl9icHN0YXRlCXN0YXRlOwogfTsKIAorc3RydWN0IGRiZ19yZWdfZGVmX3QgeworCWNoYXIgKm5hbWU7CisJaW50IHNpemU7CisJaW50IG9mZnNldDsKK307CisKKyNpZm5kZWYgREJHX01BWF9SRUdfTlVNCisjZGVmaW5lIERCR19NQVhfUkVHX05VTSAwCisjZWxzZQorZXh0ZXJuIHN0cnVjdCBkYmdfcmVnX2RlZl90IGRiZ19yZWdfZGVmW107CitleHRlcm4gY2hhciAqZGJnX2dldF9yZWcoaW50IHJlZ25vLCB2b2lkICptZW0sIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiBpbnQgZGJnX3NldF9yZWcoaW50IHJlZ25vLCB2b2lkICptZW0sIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKyNlbmRpZgogI2lmbmRlZiBLR0RCX01BWF9CUkVBS1BPSU5UUwogIyBkZWZpbmUgS0dEQl9NQVhfQlJFQUtQT0lOVFMJMTAwMAogI2VuZGlmCkBAIC0yODEsNyArMjk0LDcgQEAKIGV4dGVybiBzdHJ1Y3Qga2dkYl9pbyAqZGJnX2lvX29wczsKIAogZXh0ZXJuIGludCBrZ2RiX2hleDJsb25nKGNoYXIgKipwdHIsIHVuc2lnbmVkIGxvbmcgKmxvbmdfdmFsKTsKLWV4dGVybiBpbnQga2dkYl9tZW0yaGV4KGNoYXIgKm1lbSwgY2hhciAqYnVmLCBpbnQgY291bnQpOworZXh0ZXJuIGNoYXIgKmtnZGJfbWVtMmhleChjaGFyICptZW0sIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKIGV4dGVybiBpbnQga2dkYl9oZXgybWVtKGNoYXIgKmJ1ZiwgY2hhciAqbWVtLCBpbnQgY291bnQpOwogCiBleHRlcm4gaW50IGtnZGJfaXNyZW1vdmVkYnJlYWsodW5zaWduZWQgbG9uZyBhZGRyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva21lbXRyYWNlLmggYi9pbmNsdWRlL2xpbnV4L2ttZW10cmFjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjE2ZDM5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgva21lbXRyYWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEVkdWFyZCAtIEdhYnJpZWwgTXVudGVhbnUKLSAqCi0gKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgR1BMIHZlcnNpb24gMi4KLSAqLwotCi0jaWZuZGVmIF9MSU5VWF9LTUVNVFJBQ0VfSAotI2RlZmluZSBfTElOVVhfS01FTVRSQUNFX0gKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9rbWVtLmg+Ci0KLSNpZmRlZiBDT05GSUdfS01FTVRSQUNFCi1leHRlcm4gdm9pZCBrbWVtdHJhY2VfaW5pdCh2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQga21lbXRyYWNlX2luaXQodm9pZCkKLXsKLX0KLSNlbmRpZgotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0jZW5kaWYgLyogX0xJTlVYX0tNRU1UUkFDRV9IICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3M4ODQyLmggYi9pbmNsdWRlL2xpbnV4L2tzODg0Mi5oCmluZGV4IGRhMDM0MWIuLjE0YmE0NDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3M4ODQyLmgKKysrIGIvaW5jbHVkZS9saW51eC9rczg4NDIuaApAQCAtMjUsMTAgKzI1LDE0IEBACiAgKiBzdHJ1Y3Qga3M4ODQyX3BsYXRmb3JtX2RhdGEgLSBQbGF0Zm9ybSBkYXRhIG9mIHRoZSBLUzg4NDIgbmV0d29yayBkcml2ZXIKICAqIEBtYWNhZGRyOglUaGUgTUFDIGFkZHJlc3Mgb2YgdGhlIGRldmljZSwgc2V0IHRvIGFsbCAwOnMgdG8gdXNlIHRoZSBvbiBpbgogICoJCXRoZSBjaGlwLgorICogQHJ4X2RtYV9jaGFubmVsOglUaGUgRE1BIGNoYW5uZWwgdG8gdXNlIGZvciBSWCwgLTEgZm9yIG5vbmUuCisgKiBAdHhfZG1hX2NoYW5uZWw6CVRoZSBETUEgY2hhbm5lbCB0byB1c2UgZm9yIFRYLCAtMSBmb3Igbm9uZS4KICAqCiAgKi8KIHN0cnVjdCBrczg4NDJfcGxhdGZvcm1fZGF0YSB7CiAJdTggbWFjYWRkcltFVEhfQUxFTl07CisJaW50IHJ4X2RtYV9jaGFubmVsOworCWludCB0eF9kbWFfY2hhbm5lbDsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm0uaCBiL2luY2x1ZGUvbGludXgva3ZtLmgKaW5kZXggMjNlYTAyMi4uNjM2ZmMzOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm0uaAorKysgYi9pbmNsdWRlL2xpbnV4L2t2bS5oCkBAIC01MjQsNiArNTI0LDEyIEBACiAjZGVmaW5lIEtWTV9DQVBfUFBDX09TSSA1MgogI2RlZmluZSBLVk1fQ0FQX1BQQ19VTlNFVF9JUlEgNTMKICNkZWZpbmUgS1ZNX0NBUF9FTkFCTEVfQ0FQIDU0CisjaWZkZWYgX19LVk1fSEFWRV9YU0FWRQorI2RlZmluZSBLVk1fQ0FQX1hTQVZFIDU1CisjZW5kaWYKKyNpZmRlZiBfX0tWTV9IQVZFX1hDUlMKKyNkZWZpbmUgS1ZNX0NBUF9YQ1JTIDU2CisjZW5kaWYKIAogI2lmZGVmIEtWTV9DQVBfSVJRX1JPVVRJTkcKIApAQCAtNjEzLDYgKzYxOSw3IEBACiAgKi8KICNkZWZpbmUgS1ZNX0NSRUFURV9WQ1BVICAgICAgICAgICBfSU8oS1ZNSU8sICAgMHg0MSkKICNkZWZpbmUgS1ZNX0dFVF9ESVJUWV9MT0cgICAgICAgICBfSU9XKEtWTUlPLCAgMHg0Miwgc3RydWN0IGt2bV9kaXJ0eV9sb2cpCisvKiBLVk1fU0VUX01FTU9SWV9BTElBUyBpcyBvYnNvbGV0ZTogKi8KICNkZWZpbmUgS1ZNX1NFVF9NRU1PUllfQUxJQVMgICAgICBfSU9XKEtWTUlPLCAgMHg0Mywgc3RydWN0IGt2bV9tZW1vcnlfYWxpYXMpCiAjZGVmaW5lIEtWTV9TRVRfTlJfTU1VX1BBR0VTICAgICAgX0lPKEtWTUlPLCAgIDB4NDQpCiAjZGVmaW5lIEtWTV9HRVRfTlJfTU1VX1BBR0VTICAgICAgX0lPKEtWTUlPLCAgIDB4NDUpCkBAIC03MTQsNiArNzIxLDEyIEBACiAjZGVmaW5lIEtWTV9HRVRfREVCVUdSRUdTICAgICAgICAgX0lPUihLVk1JTywgIDB4YTEsIHN0cnVjdCBrdm1fZGVidWdyZWdzKQogI2RlZmluZSBLVk1fU0VUX0RFQlVHUkVHUyAgICAgICAgIF9JT1coS1ZNSU8sICAweGEyLCBzdHJ1Y3Qga3ZtX2RlYnVncmVncykKICNkZWZpbmUgS1ZNX0VOQUJMRV9DQVAgICAgICAgICAgICBfSU9XKEtWTUlPLCAgMHhhMywgc3RydWN0IGt2bV9lbmFibGVfY2FwKQorLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9YU0FWRSAqLworI2RlZmluZSBLVk1fR0VUX1hTQVZFCQkgIF9JT1IoS1ZNSU8sICAweGE0LCBzdHJ1Y3Qga3ZtX3hzYXZlKQorI2RlZmluZSBLVk1fU0VUX1hTQVZFCQkgIF9JT1coS1ZNSU8sICAweGE1LCBzdHJ1Y3Qga3ZtX3hzYXZlKQorLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9YQ1JTICovCisjZGVmaW5lIEtWTV9HRVRfWENSUwkJICBfSU9SKEtWTUlPLCAgMHhhNiwgc3RydWN0IGt2bV94Y3JzKQorI2RlZmluZSBLVk1fU0VUX1hDUlMJCSAgX0lPVyhLVk1JTywgIDB4YTcsIHN0cnVjdCBrdm1feGNycykKIAogI2RlZmluZSBLVk1fREVWX0FTU0lHTl9FTkFCTEVfSU9NTVUJKDEgPDwgMCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmluZGV4IDdjYjExNmEuLmMxM2NjNDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTgxLDEzICs4MSwxNCBAQAogCWludCB2Y3B1X2lkOwogCXN0cnVjdCBtdXRleCBtdXRleDsKIAlpbnQgICBjcHU7CisJYXRvbWljX3QgZ3Vlc3RfbW9kZTsKIAlzdHJ1Y3Qga3ZtX3J1biAqcnVuOwogCXVuc2lnbmVkIGxvbmcgcmVxdWVzdHM7CiAJdW5zaWduZWQgbG9uZyBndWVzdF9kZWJ1ZzsKIAlpbnQgc3JjdV9pZHg7CiAKIAlpbnQgZnB1X2FjdGl2ZTsKLQlpbnQgZ3Vlc3RfZnB1X2xvYWRlZDsKKwlpbnQgZ3Vlc3RfZnB1X2xvYWRlZCwgZ3Vlc3RfeGNyMF9sb2FkZWQ7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CiAJaW50IHNpZ3NldF9hY3RpdmU7CiAJc2lnc2V0X3Qgc2lnc2V0OwpAQCAtMTIzLDYgKzEyNCw3IEBACiAJfSAqbHBhZ2VfaW5mb1tLVk1fTlJfUEFHRV9TSVpFUyAtIDFdOwogCXVuc2lnbmVkIGxvbmcgdXNlcnNwYWNlX2FkZHI7CiAJaW50IHVzZXJfYWxsb2M7CisJaW50IGlkOwogfTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGt2bV9kaXJ0eV9iaXRtYXBfYnl0ZXMoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCkKQEAgLTI2Niw2ICsyNjgsOCBAQAogCiBpbnQgaXNfZXJyb3JfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBpbnQgaXNfZXJyb3JfcGZuKHBmbl90IHBmbik7CitpbnQgaXNfaHdwb2lzb25fcGZuKHBmbl90IHBmbik7CitpbnQgaXNfZmF1bHRfcGZuKHBmbl90IHBmbik7CiBpbnQga3ZtX2lzX2Vycm9yX2h2YSh1bnNpZ25lZCBsb25nIGFkZHIpOwogaW50IGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiAJCQkgIHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24gKm1lbSwKQEAgLTI4NCw4ICsyODgsNiBAQAogCQkJCWludCB1c2VyX2FsbG9jKTsKIHZvaWQga3ZtX2Rpc2FibGVfbGFyZ2VwYWdlcyh2b2lkKTsKIHZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93KHN0cnVjdCBrdm0gKmt2bSk7Ci1nZm5fdCB1bmFsaWFzX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbik7Ci1nZm5fdCB1bmFsaWFzX2dmbl9pbnN0YW50aWF0aW9uKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKTsKIAogc3RydWN0IHBhZ2UgKmdmbl90b19wYWdlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKTsKIHVuc2lnbmVkIGxvbmcgZ2ZuX3RvX2h2YShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbik7CkBAIC00NDUsNyArNDQ3LDggQEAKIAkJCQkgICAgc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciAqa2ltbik7CiB2b2lkIGt2bV91bnJlZ2lzdGVyX2lycV9tYXNrX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycSwKIAkJCQkgICAgICBzdHJ1Y3Qga3ZtX2lycV9tYXNrX25vdGlmaWVyICpraW1uKTsKLXZvaWQga3ZtX2ZpcmVfbWFza19ub3RpZmllcnMoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxLCBib29sIG1hc2spOwordm9pZCBrdm1fZmlyZV9tYXNrX25vdGlmaWVycyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGlycWNoaXAsIHVuc2lnbmVkIHBpbiwKKwkJCSAgICAgYm9vbCBtYXNrKTsKIAogI2lmZGVmIF9fS1ZNX0hBVkVfSU9BUElDCiB2b2lkIGt2bV9nZXRfaW50cl9kZWxpdmVyeV9iaXRtYXNrKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsCkBAIC01NjIsMTAgKzU2NSw2IEBACiB9CiAjZW5kaWYKIAotI2lmbmRlZiBLVk1fQVJDSF9IQVNfVU5BTElBU19JTlNUQU5USUFUSU9OCi0jZGVmaW5lIHVuYWxpYXNfZ2ZuX2luc3RhbnRpYXRpb24gdW5hbGlhc19nZm4KLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0lSUUNISVAKIAogI2RlZmluZSBLVk1fTUFYX0lSUV9ST1VURVMgMTAyNApAQCAtNjI4LDUgKzYyNywyNSBAQAogCiAjZW5kaWYKIAorc3RhdGljIGlubGluZSB2b2lkIGt2bV9tYWtlX3JlcXVlc3QoaW50IHJlcSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXNldF9iaXQocmVxLCAmdmNwdS0+cmVxdWVzdHMpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wga3ZtX21ha2VfY2hlY2tfcmVxdWVzdChpbnQgcmVxLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQocmVxLCAmdmNwdS0+cmVxdWVzdHMpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2NoZWNrX3JlcXVlc3QoaW50IHJlcSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWlmICh0ZXN0X2JpdChyZXEsICZ2Y3B1LT5yZXF1ZXN0cykpIHsKKwkJY2xlYXJfYml0KHJlcSwgJnZjcHUtPnJlcXVlc3RzKTsKKwkJcmV0dXJuIHRydWU7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2t2bV90eXBlcy5oCmluZGV4IGZiNDZlZmIuLjdhYzBkNGVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV90eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgva3ZtX3R5cGVzLmgKQEAgLTMyLDExICszMiwxMSBAQAogCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIGd2YV90OwogdHlwZWRlZiB1NjQgICAgICAgICAgICBncGFfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgZ2ZuX3Q7Cit0eXBlZGVmIHU2NCAgICAgICAgICAgIGdmbl90OwogCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIGh2YV90OwogdHlwZWRlZiB1NjQgICAgICAgICAgICBocGFfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgaGZuX3Q7Cit0eXBlZGVmIHU2NCAgICAgICAgICAgIGhmbl90OwogCiB0eXBlZGVmIGhmbl90IHBmbl90OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xtYi5oIGIvaW5jbHVkZS9saW51eC9sbWIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNkMTQzMy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L2xtYi5oCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotI2lmbmRlZiBfTElOVVhfTE1CX0gKLSNkZWZpbmUgX0xJTlVYX0xNQl9ICi0jaWZkZWYgX19LRVJORUxfXwotCi0vKgotICogTG9naWNhbCBtZW1vcnkgYmxvY2tzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBCZXJnbmVyLCBJQk0gQ29ycC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLQotI2RlZmluZSBNQVhfTE1CX1JFR0lPTlMgMTI4Ci0KLXN0cnVjdCBsbWJfcHJvcGVydHkgewotCXU2NCBiYXNlOwotCXU2NCBzaXplOwotfTsKLQotc3RydWN0IGxtYl9yZWdpb24gewotCXVuc2lnbmVkIGxvbmcgY250OwotCXU2NCBzaXplOwotCXN0cnVjdCBsbWJfcHJvcGVydHkgcmVnaW9uW01BWF9MTUJfUkVHSU9OUysxXTsKLX07Ci0KLXN0cnVjdCBsbWIgewotCXVuc2lnbmVkIGxvbmcgZGVidWc7Ci0JdTY0IHJtb19zaXplOwotCXN0cnVjdCBsbWJfcmVnaW9uIG1lbW9yeTsKLQlzdHJ1Y3QgbG1iX3JlZ2lvbiByZXNlcnZlZDsKLX07Ci0KLWV4dGVybiBzdHJ1Y3QgbG1iIGxtYjsKLQotZXh0ZXJuIHZvaWQgX19pbml0IGxtYl9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgX19pbml0IGxtYl9hbmFseXplKHZvaWQpOwotZXh0ZXJuIGxvbmcgbG1iX2FkZCh1NjQgYmFzZSwgdTY0IHNpemUpOwotZXh0ZXJuIGxvbmcgbG1iX3JlbW92ZSh1NjQgYmFzZSwgdTY0IHNpemUpOwotZXh0ZXJuIGxvbmcgX19pbml0IGxtYl9mcmVlKHU2NCBiYXNlLCB1NjQgc2l6ZSk7Ci1leHRlcm4gbG9uZyBfX2luaXQgbG1iX3Jlc2VydmUodTY0IGJhc2UsIHU2NCBzaXplKTsKLWV4dGVybiB1NjQgX19pbml0IGxtYl9hbGxvY19uaWQodTY0IHNpemUsIHU2NCBhbGlnbiwgaW50IG5pZCwKLQkJCQl1NjQgKCpuaWRfcmFuZ2UpKHU2NCwgdTY0LCBpbnQgKikpOwotZXh0ZXJuIHU2NCBfX2luaXQgbG1iX2FsbG9jKHU2NCBzaXplLCB1NjQgYWxpZ24pOwotZXh0ZXJuIHU2NCBfX2luaXQgbG1iX2FsbG9jX2Jhc2UodTY0IHNpemUsCi0JCXU2NCwgdTY0IG1heF9hZGRyKTsKLWV4dGVybiB1NjQgX19pbml0IF9fbG1iX2FsbG9jX2Jhc2UodTY0IHNpemUsCi0JCXU2NCBhbGlnbiwgdTY0IG1heF9hZGRyKTsKLWV4dGVybiB1NjQgX19pbml0IGxtYl9waHlzX21lbV9zaXplKHZvaWQpOwotZXh0ZXJuIHU2NCBsbWJfZW5kX29mX0RSQU0odm9pZCk7Ci1leHRlcm4gdm9pZCBfX2luaXQgbG1iX2VuZm9yY2VfbWVtb3J5X2xpbWl0KHU2NCBtZW1vcnlfbGltaXQpOwotZXh0ZXJuIGludCBfX2luaXQgbG1iX2lzX3Jlc2VydmVkKHU2NCBhZGRyKTsKLWV4dGVybiBpbnQgbG1iX2lzX3JlZ2lvbl9yZXNlcnZlZCh1NjQgYmFzZSwgdTY0IHNpemUpOwotZXh0ZXJuIGludCBsbWJfZmluZChzdHJ1Y3QgbG1iX3Byb3BlcnR5ICpyZXMpOwotCi1leHRlcm4gdm9pZCBsbWJfZHVtcF9hbGwodm9pZCk7Ci0KLXN0YXRpYyBpbmxpbmUgdTY0Ci1sbWJfc2l6ZV9ieXRlcyhzdHJ1Y3QgbG1iX3JlZ2lvbiAqdHlwZSwgdW5zaWduZWQgbG9uZyByZWdpb25fbnIpCi17Ci0JcmV0dXJuIHR5cGUtPnJlZ2lvbltyZWdpb25fbnJdLnNpemU7Ci19Ci1zdGF0aWMgaW5saW5lIHU2NAotbG1iX3NpemVfcGFnZXMoc3RydWN0IGxtYl9yZWdpb24gKnR5cGUsIHVuc2lnbmVkIGxvbmcgcmVnaW9uX25yKQotewotCXJldHVybiBsbWJfc2l6ZV9ieXRlcyh0eXBlLCByZWdpb25fbnIpID4+IFBBR0VfU0hJRlQ7Ci19Ci1zdGF0aWMgaW5saW5lIHU2NAotbG1iX3N0YXJ0X3BmbihzdHJ1Y3QgbG1iX3JlZ2lvbiAqdHlwZSwgdW5zaWduZWQgbG9uZyByZWdpb25fbnIpCi17Ci0JcmV0dXJuIHR5cGUtPnJlZ2lvbltyZWdpb25fbnJdLmJhc2UgPj4gUEFHRV9TSElGVDsKLX0KLXN0YXRpYyBpbmxpbmUgdTY0Ci1sbWJfZW5kX3BmbihzdHJ1Y3QgbG1iX3JlZ2lvbiAqdHlwZSwgdW5zaWduZWQgbG9uZyByZWdpb25fbnIpCi17Ci0JcmV0dXJuIGxtYl9zdGFydF9wZm4odHlwZSwgcmVnaW9uX25yKSArCi0JICAgICAgIGxtYl9zaXplX3BhZ2VzKHR5cGUsIHJlZ2lvbl9ucik7Ci19Ci0KLSNpbmNsdWRlIDxhc20vbG1iLmg+Ci0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLSNlbmRpZiAvKiBfTElOVVhfTE1CX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHJ1X2NhY2hlLmggYi9pbmNsdWRlL2xpbnV4L2xydV9jYWNoZS5oCmluZGV4IGRlNDhkMTYuLjc4ZmJmMjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbHJ1X2NhY2hlLmgKKysrIGIvaW5jbHVkZS9saW51eC9scnVfY2FjaGUuaApAQCAtMjYyLDcgKzI2Miw3IEBACiAgKiBAbGM6IHRoZSBscnUgY2FjaGUgdG8gb3BlcmF0ZSBvbgogICoKICAqIE5vdGUgdGhhdCB0aGUgcmVmZXJlbmNlIGNvdW50cyBhbmQgb3JkZXIgb24gdGhlIGFjdGl2ZSBhbmQgbHJ1IGxpc3RzIG1heQotICogc3RpbGwgY2hhbmdlLiAgUmV0dXJucyB0cnVlIGlmIHdlIGFxdWlyZWQgdGhlIGxvY2suCisgKiBzdGlsbCBjaGFuZ2UuICBSZXR1cm5zIHRydWUgaWYgd2UgYWNxdWlyZWQgdGhlIGxvY2suCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGxjX3RyeV9sb2NrKHN0cnVjdCBscnVfY2FjaGUgKmxjKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21fYXVkaXQuaCBiL2luY2x1ZGUvbGludXgvbHNtX2F1ZGl0LmgKaW5kZXggNjkwNzI1MS4uMTEyYTU1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sc21fYXVkaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xzbV9hdWRpdC5oCkBAIC05MCwxMCArOTAsNDIgQEAKIAkJCXUzMiByZXF1ZXN0ZWQ7CiAJCQl1MzIgYXVkaXRlZDsKIAkJCXUzMiBkZW5pZWQ7CisJCQkvKgorCQkJICogYXVkaXRkZW55IGlzIGEgYml0IHRyaWNreSBhbmQgdW5pbnR1aXRpdmUuICBTZWUgdGhlCisJCQkgKiBjb21tZW50cyBpbiBhdmMuYyBmb3IgaXQncyBtZWFuaW5nIGFuZCB1c2FnZS4KKwkJCSAqLworCQkJdTMyIGF1ZGl0ZGVueTsKIAkJCXN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkOwogCQkJaW50IHJlc3VsdDsKIAkJfSBzZWxpbnV4X2F1ZGl0X2RhdGE7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1IKKwkJc3RydWN0IHsKKwkJCWludCBlcnJvcjsKKwkJCWludCBvcDsKKwkJCWludCB0eXBlOworCQkJdm9pZCAqcHJvZmlsZTsKKwkJCWNvbnN0IGNoYXIgKm5hbWU7CisJCQljb25zdCBjaGFyICppbmZvOworCQkJdW5pb24geworCQkJCXZvaWQgKnRhcmdldDsKKwkJCQlzdHJ1Y3QgeworCQkJCQlsb25nIHBvczsKKwkJCQkJdm9pZCAqdGFyZ2V0OworCQkJCX0gaWZhY2U7CisJCQkJc3RydWN0IHsKKwkJCQkJaW50IHJsaW07CisJCQkJCXVuc2lnbmVkIGxvbmcgbWF4OworCQkJCX0gcmxpbTsKKwkJCQlzdHJ1Y3QgeworCQkJCQljb25zdCBjaGFyICp0YXJnZXQ7CisJCQkJCXUzMiByZXF1ZXN0OworCQkJCQl1MzIgZGVuaWVkOworCQkJCQl1aWRfdCBvdWlkOworCQkJCX0gZnM7CisJCQl9OworCQl9IGFwcGFybW9yX2F1ZGl0X2RhdGE7CisjZW5kaWYKIAl9OwogCS8qIHRoZXNlIGNhbGxiYWNrIHdpbGwgYmUgaW1wbGVtZW50ZWQgYnkgYSBzcGVjaWZpYyBMU00gKi8KIAl2b2lkICgqbHNtX3ByZV9hdWRpdCkoc3RydWN0IGF1ZGl0X2J1ZmZlciAqLCB2b2lkICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tSVNETmlmLmggYi9pbmNsdWRlL2xpbnV4L21JU0ROaWYuaAppbmRleCA3OGMzYmVkLi5iNWU3ZjIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21JU0ROaWYuaAorKysgYi9pbmNsdWRlL2xpbnV4L21JU0ROaWYuaApAQCAtMjUxLDcgKzI1MSw3IEBACiBzdHJ1Y3QgbUlTRE5oZWFkIHsKIAl1bnNpZ25lZCBpbnQJcHJpbTsKIAl1bnNpZ25lZCBpbnQJaWQ7Ci19ICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gIF9fcGFja2VkOwogCiAjZGVmaW5lIE1JU0ROX0hFQURFUl9MRU4Jc2l6ZW9mKHN0cnVjdCBtSVNETmhlYWQpCiAjZGVmaW5lIE1BWF9EQVRBX1NJWkUJCTIwNDgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWFydmVsbF9waHkuaCBiL2luY2x1ZGUvbGludXgvbWFydmVsbF9waHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGYwODAxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tYXJ2ZWxsX3BoeS5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgX01BUlZFTExfUEhZX0gKKyNkZWZpbmUgX01BUlZFTExfUEhZX0gKKworLyogTWFzayB1c2VkIGZvciBJRCBjb21wYXJpc29ucyAqLworI2RlZmluZSBNQVJWRUxMX1BIWV9JRF9NQVNLCQkweGZmZmZmZmYwCisKKy8qIEtub3duIFBIWSBJRHMgKi8KKyNkZWZpbmUgTUFSVkVMTF9QSFlfSURfODhFMTEwMQkJMHgwMTQxMGM2MAorI2RlZmluZSBNQVJWRUxMX1BIWV9JRF84OEUxMTEyCQkweDAxNDEwYzkwCisjZGVmaW5lIE1BUlZFTExfUEhZX0lEXzg4RTExMTEJCTB4MDE0MTBjYzAKKyNkZWZpbmUgTUFSVkVMTF9QSFlfSURfODhFMTExOAkJMHgwMTQxMGUxMAorI2RlZmluZSBNQVJWRUxMX1BIWV9JRF84OEUxMTIxUgkJMHgwMTQxMGNiMAorI2RlZmluZSBNQVJWRUxMX1BIWV9JRF84OEUxMTQ1CQkweDAxNDEwY2QwCisjZGVmaW5lIE1BUlZFTExfUEhZX0lEXzg4RTEyNDAJCTB4MDE0MTBlMzAKKyNkZWZpbmUgTUFSVkVMTF9QSFlfSURfODhFQzA0OAkJMHgwMTQxMGU5MAorCisvKiBzdHJ1Y3QgcGh5X2RldmljZSBkZXZfZmxhZ3MgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTUFSVkVMTF9QSFlfTTExNDVfRkxBR1NfUkVTSVNUQU5DRQkweDAwMDAwMDAxCisjZGVmaW5lIE1BUlZFTExfUEhZX00xMTE4X0ROUzMyM19MRURTCQkweDAwMDAwMDAyCisKKyNlbmRpZiAvKiBfTUFSVkVMTF9QSFlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oIGIvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1OWZhZjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgKQEAgLTAsMCArMSw4OSBAQAorI2lmbmRlZiBfTElOVVhfTUVNQkxPQ0tfSAorI2RlZmluZSBfTElOVVhfTUVNQkxPQ0tfSAorI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIExvZ2ljYWwgbWVtb3J5IGJsb2Nrcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgQmVyZ25lciwgSUJNIENvcnAuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNkZWZpbmUgTUFYX01FTUJMT0NLX1JFR0lPTlMgMTI4CisKK3N0cnVjdCBtZW1ibG9ja19wcm9wZXJ0eSB7CisJdTY0IGJhc2U7CisJdTY0IHNpemU7Cit9OworCitzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uIHsKKwl1bnNpZ25lZCBsb25nIGNudDsKKwl1NjQgc2l6ZTsKKwlzdHJ1Y3QgbWVtYmxvY2tfcHJvcGVydHkgcmVnaW9uW01BWF9NRU1CTE9DS19SRUdJT05TKzFdOworfTsKKworc3RydWN0IG1lbWJsb2NrIHsKKwl1bnNpZ25lZCBsb25nIGRlYnVnOworCXU2NCBybW9fc2l6ZTsKKwlzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uIG1lbW9yeTsKKwlzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uIHJlc2VydmVkOworfTsKKworZXh0ZXJuIHN0cnVjdCBtZW1ibG9jayBtZW1ibG9jazsKKworZXh0ZXJuIHZvaWQgX19pbml0IG1lbWJsb2NrX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgbWVtYmxvY2tfYW5hbHl6ZSh2b2lkKTsKK2V4dGVybiBsb25nIG1lbWJsb2NrX2FkZCh1NjQgYmFzZSwgdTY0IHNpemUpOworZXh0ZXJuIGxvbmcgbWVtYmxvY2tfcmVtb3ZlKHU2NCBiYXNlLCB1NjQgc2l6ZSk7CitleHRlcm4gbG9uZyBfX2luaXQgbWVtYmxvY2tfZnJlZSh1NjQgYmFzZSwgdTY0IHNpemUpOworZXh0ZXJuIGxvbmcgX19pbml0IG1lbWJsb2NrX3Jlc2VydmUodTY0IGJhc2UsIHU2NCBzaXplKTsKK2V4dGVybiB1NjQgX19pbml0IG1lbWJsb2NrX2FsbG9jX25pZCh1NjQgc2l6ZSwgdTY0IGFsaWduLCBpbnQgbmlkLAorCQkJCXU2NCAoKm5pZF9yYW5nZSkodTY0LCB1NjQsIGludCAqKSk7CitleHRlcm4gdTY0IF9faW5pdCBtZW1ibG9ja19hbGxvYyh1NjQgc2l6ZSwgdTY0IGFsaWduKTsKK2V4dGVybiB1NjQgX19pbml0IG1lbWJsb2NrX2FsbG9jX2Jhc2UodTY0IHNpemUsCisJCXU2NCwgdTY0IG1heF9hZGRyKTsKK2V4dGVybiB1NjQgX19pbml0IF9fbWVtYmxvY2tfYWxsb2NfYmFzZSh1NjQgc2l6ZSwKKwkJdTY0IGFsaWduLCB1NjQgbWF4X2FkZHIpOworZXh0ZXJuIHU2NCBfX2luaXQgbWVtYmxvY2tfcGh5c19tZW1fc2l6ZSh2b2lkKTsKK2V4dGVybiB1NjQgbWVtYmxvY2tfZW5kX29mX0RSQU0odm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgbWVtYmxvY2tfZW5mb3JjZV9tZW1vcnlfbGltaXQodTY0IG1lbW9yeV9saW1pdCk7CitleHRlcm4gaW50IF9faW5pdCBtZW1ibG9ja19pc19yZXNlcnZlZCh1NjQgYWRkcik7CitleHRlcm4gaW50IG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZCh1NjQgYmFzZSwgdTY0IHNpemUpOworZXh0ZXJuIGludCBtZW1ibG9ja19maW5kKHN0cnVjdCBtZW1ibG9ja19wcm9wZXJ0eSAqcmVzKTsKKworZXh0ZXJuIHZvaWQgbWVtYmxvY2tfZHVtcF9hbGwodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdTY0CittZW1ibG9ja19zaXplX2J5dGVzKHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnR5cGUsIHVuc2lnbmVkIGxvbmcgcmVnaW9uX25yKQoreworCXJldHVybiB0eXBlLT5yZWdpb25bcmVnaW9uX25yXS5zaXplOworfQorc3RhdGljIGlubGluZSB1NjQKK21lbWJsb2NrX3NpemVfcGFnZXMoc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqdHlwZSwgdW5zaWduZWQgbG9uZyByZWdpb25fbnIpCit7CisJcmV0dXJuIG1lbWJsb2NrX3NpemVfYnl0ZXModHlwZSwgcmVnaW9uX25yKSA+PiBQQUdFX1NISUZUOworfQorc3RhdGljIGlubGluZSB1NjQKK21lbWJsb2NrX3N0YXJ0X3BmbihzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICp0eXBlLCB1bnNpZ25lZCBsb25nIHJlZ2lvbl9ucikKK3sKKwlyZXR1cm4gdHlwZS0+cmVnaW9uW3JlZ2lvbl9ucl0uYmFzZSA+PiBQQUdFX1NISUZUOworfQorc3RhdGljIGlubGluZSB1NjQKK21lbWJsb2NrX2VuZF9wZm4oc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqdHlwZSwgdW5zaWduZWQgbG9uZyByZWdpb25fbnIpCit7CisJcmV0dXJuIG1lbWJsb2NrX3N0YXJ0X3Bmbih0eXBlLCByZWdpb25fbnIpICsKKwkgICAgICAgbWVtYmxvY2tfc2l6ZV9wYWdlcyh0eXBlLCByZWdpb25fbnIpOworfQorCisjaW5jbHVkZSA8YXNtL21lbWJsb2NrLmg+CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTElOVVhfTUVNQkxPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IGI5NjllZmIuLjdhOWFiN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTk5OSw3ICs5OTksNyBAQAogICogcXVlcnlpbmcgdGhlIGNhY2hlIHNpemUsIHNvIGEgZmFzdHBhdGggZm9yIHRoYXQgY2FzZSBpcyBhcHByb3ByaWF0ZS4KICAqLwogc3RydWN0IHNocmlua2VyIHsKLQlpbnQgKCpzaHJpbmspKGludCBucl90b19zY2FuLCBnZnBfdCBnZnBfbWFzayk7CisJaW50ICgqc2hyaW5rKShzdHJ1Y3Qgc2hyaW5rZXIgKiwgaW50IG5yX3RvX3NjYW4sIGdmcF90IGdmcF9tYXNrKTsKIAlpbnQgc2Vla3M7CS8qIHNlZWtzIHRvIHJlY3JlYXRlIGFuIG9iaiAqLwogCiAJLyogVGhlc2UgYXJlIGZvciBpbnRlcm5hbCB1c2UgKi8KQEAgLTE0NjUsNiArMTQ2NSwxNCBAQAogZXh0ZXJuIHZvaWQgc2hha2VfcGFnZShzdHJ1Y3QgcGFnZSAqcCwgaW50IGFjY2Vzcyk7CiBleHRlcm4gYXRvbWljX2xvbmdfdCBtY2VfYmFkX3BhZ2VzOwogZXh0ZXJuIGludCBzb2Z0X29mZmxpbmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IGZsYWdzKTsKKyNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkUKK2ludCBpc19od3BvaXNvbl9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcik7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgaXNfaHdwb2lzb25fYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKIAogZXh0ZXJuIHZvaWQgZHVtcF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tc2kuaCBiL2luY2x1ZGUvbGludXgvbXNpLmgKaW5kZXggNjk5MWFiNS4uOTFiMDVjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tc2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L21zaS5oCkBAIC0xNCw4ICsxNCwxMCBAQAogZXh0ZXJuIHZvaWQgbWFza19tc2lfaXJxKHVuc2lnbmVkIGludCBpcnEpOwogZXh0ZXJuIHZvaWQgdW5tYXNrX21zaV9pcnEodW5zaWduZWQgaW50IGlycSk7CiBleHRlcm4gdm9pZCByZWFkX21zaV9tc2dfZGVzYyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHN0cnVjdCBtc2lfbXNnICptc2cpOworZXh0ZXJuIHZvaWQgZ2V0X2NhY2hlZF9tc2lfbXNnX2Rlc2Moc3RydWN0IGlycV9kZXNjICpkZXNjLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKTsKIGV4dGVybiB2b2lkIHdyaXRlX21zaV9tc2dfZGVzYyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHN0cnVjdCBtc2lfbXNnICptc2cpOwogZXh0ZXJuIHZvaWQgcmVhZF9tc2lfbXNnKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpOworZXh0ZXJuIHZvaWQgZ2V0X2NhY2hlZF9tc2lfbXNnKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpOwogZXh0ZXJuIHZvaWQgd3JpdGVfbXNpX21zZyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKTsKIAogc3RydWN0IG1zaV9kZXNjIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmJkLmggYi9pbmNsdWRlL2xpbnV4L25iZC5oCmluZGV4IDE1NTcxOWQuLmJiNTg4NTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmJkLmgKKysrIGIvaW5jbHVkZS9saW51eC9uYmQuaApAQCAtODgsNyArODgsNyBAQAogCWNoYXIgaGFuZGxlWzhdOwogCV9fYmU2NCBmcm9tOwogCV9fYmUzMiBsZW47Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qCiAgKiBUaGlzIGlzIHRoZSByZXBseSBwYWNrZXQgdGhhdCBuYmQtc2VydmVyIHNlbmRzIGJhY2sgdG8gdGhlIGNsaWVudCBhZnRlcgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uY3AuaCBiL2luY2x1ZGUvbGludXgvbmNwLmgKaW5kZXggOTlmMGFkZS4uM2FjZTgzNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uY3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L25jcC5oCkBAIC0yNyw3ICsyNyw3IEBACiAJX191OCBjb25uX2hpZ2g7CiAJX191OCBmdW5jdGlvbjsKIAlfX3U4IGRhdGFbMF07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBOQ1BfUkVQTFkgICAgICAgICAgICAgICAgKDB4MzMzMykKICNkZWZpbmUgTkNQX1dBVENIRE9HCQkgKDB4M0UzRSkKQEAgLTQyLDcgKzQyLDcgQEAKIAlfX3U4IGNvbXBsZXRpb25fY29kZTsKIAlfX3U4IGNvbm5lY3Rpb25fc3RhdGU7CiAJX191OCBkYXRhWzBdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgTkNQX1ZPTE5BTUVfTEVOICgxNikKICNkZWZpbmUgTkNQX05VTUJFUl9PRl9WT0xVTUVTICgyNTYpCkBAIC0xNTgsNyArMTU4LDcgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAJc3RydWN0IG53X25mc19pbmZvIG5mczsKICNlbmRpZgotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIG1vZGlmeSBtYXNrIC0gdXNlIHdpdGggTU9ESUZZX0RPU19JTkZPIHN0cnVjdHVyZSAqLwogI2RlZmluZSBETV9BVFRSSUJVVEVTCQkgIChjcHVfdG9fbGUzMigweDAyKSkKQEAgLTE5MCwxMiArMTkwLDEyIEBACiAJX191MTYgaW5oZXJpdGFuY2VHcmFudE1hc2s7CiAJX191MTYgaW5oZXJpdGFuY2VSZXZva2VNYXNrOwogCV9fdTMyIG1heGltdW1TcGFjZTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3Qgbndfc2VhcmNoX3NlcXVlbmNlIHsKIAlfX3U4IHZvbE51bWJlcjsKIAlfX3UzMiBkaXJCYXNlOwogCV9fdTMyIHNlcXVlbmNlOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNlbmRpZgkJCQkvKiBfTElOVVhfTkNQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmNwX2ZzX3NiLmggYi9pbmNsdWRlL2xpbnV4L25jcF9mc19zYi5oCmluZGV4IDVlYzljYTYuLjhkYTA1YmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmNwX2ZzX3NiLmgKKysrIGIvaW5jbHVkZS9saW51eC9uY3BfZnNfc2IuaApAQCAtMTA0LDEzICsxMDQsMTMgQEAKIAogCQl1bnNpZ25lZCBpbnQgc3RhdGU7CQkvKiBTVFJFQU0gb25seTogcmVjZWl2ZXIgc3RhdGUgKi8KIAkJc3RydWN0IHsKLQkJCV9fdTMyIG1hZ2ljIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCQkJX191MzIgbGVuIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCQkJX191MTYgdHlwZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQkJCV9fdTE2IHAxIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCQkJX191MTYgcDIgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0JCQlfX3UxNiBwMyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQkJCV9fdTE2IHR5cGUyIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCQkJX191MzIgbWFnaWMgX19wYWNrZWQ7CisJCQlfX3UzMiBsZW4gX19wYWNrZWQ7CisJCQlfX3UxNiB0eXBlIF9fcGFja2VkOworCQkJX191MTYgcDEgX19wYWNrZWQ7CisJCQlfX3UxNiBwMiBfX3BhY2tlZDsKKwkJCV9fdTE2IHAzIF9fcGFja2VkOworCQkJX191MTYgdHlwZTIgX19wYWNrZWQ7CiAJCX0gYnVmOwkJCQkvKiBTVFJFQU0gb25seTogdGVtcG9yYXJ5IGJ1ZmZlciAqLwogCQl1bnNpZ25lZCBjaGFyKiBwdHI7CQkvKiBTVFJFQU0gb25seTogcG9pbnRlciB0byBkYXRhICovCiAJCXNpemVfdCBsZW47CQkJLyogU1RSRUFNIG9ubHk6IGxlbmd0aCBvZiBkYXRhIHRvIHJlY2VpdmUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IGIyMWU0MDUuLjQ2YzM2ZmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtNTQsNiArNTQsNyBAQAogCiBzdHJ1Y3Qgdmxhbl9ncm91cDsKIHN0cnVjdCBuZXRwb2xsX2luZm87CitzdHJ1Y3QgcGh5X2RldmljZTsKIC8qIDgwMi4xMSBzcGVjaWZpYyAqLwogc3RydWN0IHdpcmVsZXNzX2RldjsKIAkJCQkJLyogc291cmNlIGJhY2stY29tcGF0IGhvb2tzICovCkBAIC02NSw2ICs2NiwxMSBAQAogI2RlZmluZSBIQVZFX0ZSRUVfTkVUREVWCQkvKiBmcmVlX25ldGRldigpICovCiAjZGVmaW5lIEhBVkVfTkVUREVWX1BSSVYJCS8qIG5ldGRldl9wcml2KCkgKi8KIAorLyogaGFyZHdhcmUgYWRkcmVzcyBhc3NpZ25tZW50IHR5cGVzICovCisjZGVmaW5lIE5FVF9BRERSX1BFUk0JCTAJLyogYWRkcmVzcyBpcyBwZXJtYW5lbnQgKGRlZmF1bHQpICovCisjZGVmaW5lIE5FVF9BRERSX1JBTkRPTQkJMQkvKiBhZGRyZXNzIGlzIGdlbmVyYXRlZCByYW5kb21seSAqLworI2RlZmluZSBORVRfQUREUl9TVE9MRU4JCTIJLyogYWRkcmVzcyBpcyBzdG9sZW4gZnJvbSBvdGhlciBkZXZpY2UgKi8KKwogLyogQmFja2xvZyBjb25nZXN0aW9uIGxldmVscyAqLwogI2RlZmluZSBORVRfUlhfU1VDQ0VTUwkJMAkvKiBrZWVwICdlbSBjb21pbmcsIGJhYnkgKi8KICNkZWZpbmUgTkVUX1JYX0RST1AJCTEJLyogcGFja2V0IGRyb3BwZWQgKi8KQEAgLTE1OSw0NSArMTY1LDM5IEBACiAjZGVmaW5lIE1BWF9IRUFERVIgKExMX01BWF9IRUFERVIgKyA0OCkKICNlbmRpZgogCi0jZW5kaWYgIC8qICBfX0tFUk5FTF9fICAqLwotCiAvKgotICoJTmV0d29yayBkZXZpY2Ugc3RhdGlzdGljcy4gQWtpbiB0byB0aGUgMi4wIGV0aGVyIHN0YXRzIGJ1dAotICoJd2l0aCBieXRlIGNvdW50ZXJzLgorICoJT2xkIG5ldHdvcmsgZGV2aWNlIHN0YXRpc3RpY3MuIEZpZWxkcyBhcmUgbmF0aXZlIHdvcmRzCisgKgkodW5zaWduZWQgbG9uZykgc28gdGhleSBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbiBhdG9taWNhbGx5LgogICovCiAKIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHsKLQl1bnNpZ25lZCBsb25nCXJ4X3BhY2tldHM7CQkvKiB0b3RhbCBwYWNrZXRzIHJlY2VpdmVkCSovCi0JdW5zaWduZWQgbG9uZwl0eF9wYWNrZXRzOwkJLyogdG90YWwgcGFja2V0cyB0cmFuc21pdHRlZAkqLwotCXVuc2lnbmVkIGxvbmcJcnhfYnl0ZXM7CQkvKiB0b3RhbCBieXRlcyByZWNlaXZlZCAJKi8KLQl1bnNpZ25lZCBsb25nCXR4X2J5dGVzOwkJLyogdG90YWwgYnl0ZXMgdHJhbnNtaXR0ZWQJKi8KLQl1bnNpZ25lZCBsb25nCXJ4X2Vycm9yczsJCS8qIGJhZCBwYWNrZXRzIHJlY2VpdmVkCQkqLwotCXVuc2lnbmVkIGxvbmcJdHhfZXJyb3JzOwkJLyogcGFja2V0IHRyYW5zbWl0IHByb2JsZW1zCSovCi0JdW5zaWduZWQgbG9uZwlyeF9kcm9wcGVkOwkJLyogbm8gc3BhY2UgaW4gbGludXggYnVmZmVycwkqLwotCXVuc2lnbmVkIGxvbmcJdHhfZHJvcHBlZDsJCS8qIG5vIHNwYWNlIGF2YWlsYWJsZSBpbiBsaW51eAkqLwotCXVuc2lnbmVkIGxvbmcJbXVsdGljYXN0OwkJLyogbXVsdGljYXN0IHBhY2tldHMgcmVjZWl2ZWQJKi8KKwl1bnNpZ25lZCBsb25nCXJ4X3BhY2tldHM7CisJdW5zaWduZWQgbG9uZwl0eF9wYWNrZXRzOworCXVuc2lnbmVkIGxvbmcJcnhfYnl0ZXM7CisJdW5zaWduZWQgbG9uZwl0eF9ieXRlczsKKwl1bnNpZ25lZCBsb25nCXJ4X2Vycm9yczsKKwl1bnNpZ25lZCBsb25nCXR4X2Vycm9yczsKKwl1bnNpZ25lZCBsb25nCXJ4X2Ryb3BwZWQ7CisJdW5zaWduZWQgbG9uZwl0eF9kcm9wcGVkOworCXVuc2lnbmVkIGxvbmcJbXVsdGljYXN0OwogCXVuc2lnbmVkIGxvbmcJY29sbGlzaW9uczsKLQotCS8qIGRldGFpbGVkIHJ4X2Vycm9yczogKi8KIAl1bnNpZ25lZCBsb25nCXJ4X2xlbmd0aF9lcnJvcnM7Ci0JdW5zaWduZWQgbG9uZwlyeF9vdmVyX2Vycm9yczsJCS8qIHJlY2VpdmVyIHJpbmcgYnVmZiBvdmVyZmxvdwkqLwotCXVuc2lnbmVkIGxvbmcJcnhfY3JjX2Vycm9yczsJCS8qIHJlY3ZlZCBwa3Qgd2l0aCBjcmMgZXJyb3IJKi8KLQl1bnNpZ25lZCBsb25nCXJ4X2ZyYW1lX2Vycm9yczsJLyogcmVjdidkIGZyYW1lIGFsaWdubWVudCBlcnJvciAqLwotCXVuc2lnbmVkIGxvbmcJcnhfZmlmb19lcnJvcnM7CQkvKiByZWN2J3IgZmlmbyBvdmVycnVuCQkqLwotCXVuc2lnbmVkIGxvbmcJcnhfbWlzc2VkX2Vycm9yczsJLyogcmVjZWl2ZXIgbWlzc2VkIHBhY2tldAkqLwotCi0JLyogZGV0YWlsZWQgdHhfZXJyb3JzICovCisJdW5zaWduZWQgbG9uZwlyeF9vdmVyX2Vycm9yczsKKwl1bnNpZ25lZCBsb25nCXJ4X2NyY19lcnJvcnM7CisJdW5zaWduZWQgbG9uZwlyeF9mcmFtZV9lcnJvcnM7CisJdW5zaWduZWQgbG9uZwlyeF9maWZvX2Vycm9yczsKKwl1bnNpZ25lZCBsb25nCXJ4X21pc3NlZF9lcnJvcnM7CiAJdW5zaWduZWQgbG9uZwl0eF9hYm9ydGVkX2Vycm9yczsKIAl1bnNpZ25lZCBsb25nCXR4X2NhcnJpZXJfZXJyb3JzOwogCXVuc2lnbmVkIGxvbmcJdHhfZmlmb19lcnJvcnM7CiAJdW5zaWduZWQgbG9uZwl0eF9oZWFydGJlYXRfZXJyb3JzOwogCXVuc2lnbmVkIGxvbmcJdHhfd2luZG93X2Vycm9yczsKLQkKLQkvKiBmb3IgY3NsaXAgZXRjICovCiAJdW5zaWduZWQgbG9uZwlyeF9jb21wcmVzc2VkOwogCXVuc2lnbmVkIGxvbmcJdHhfY29tcHJlc3NlZDsKIH07CiAKKyNlbmRpZiAgLyogIF9fS0VSTkVMX18gICovCisKIAogLyogTWVkaWEgc2VsZWN0aW9uIG9wdGlvbnMuICovCiBlbnVtIHsKQEAgLTM4MSw2ICszODEsOCBAQAogfTsKIHR5cGVkZWYgZW51bSBncm9fcmVzdWx0IGdyb19yZXN1bHRfdDsKIAordHlwZWRlZiBzdHJ1Y3Qgc2tfYnVmZiAqcnhfaGFuZGxlcl9mdW5jX3Qoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKIGV4dGVybiB2b2lkIF9fbmFwaV9zY2hlZHVsZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pOwogCiBzdGF0aWMgaW5saW5lIGludCBuYXBpX2Rpc2FibGVfcGVuZGluZyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pCkBAIC01MDQsOSArNTA2LDkgQEAKIAkgKiBwbGVhc2UgdXNlIHRoaXMgZmllbGQgaW5zdGVhZCBvZiBkZXYtPnRyYW5zX3N0YXJ0CiAJICovCiAJdW5zaWduZWQgbG9uZwkJdHJhbnNfc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZwkJdHhfYnl0ZXM7Ci0JdW5zaWduZWQgbG9uZwkJdHhfcGFja2V0czsKLQl1bnNpZ25lZCBsb25nCQl0eF9kcm9wcGVkOworCXU2NAkJCXR4X2J5dGVzOworCXU2NAkJCXR4X3BhY2tldHM7CisJdTY0CQkJdHhfZHJvcHBlZDsKIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAogI2lmZGVmIENPTkZJR19SUFMKQEAgLTY2MCwxMCArNjYyLDE5IEBACiAgKglDYWxsYmFjayB1c2VzIHdoZW4gdGhlIHRyYW5zbWl0dGVyIGhhcyBub3QgbWFkZSBhbnkgcHJvZ3Jlc3MKICAqCWZvciBkZXYtPndhdGNoZG9nIHRpY2tzLgogICoKKyAqIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCogKCpuZG9fZ2V0X3N0YXRzNjQpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgKiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0b3JhZ2UpOwogICogc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqICgqbmRvX2dldF9zdGF0cykoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAgKglDYWxsZWQgd2hlbiBhIHVzZXIgd2FudHMgdG8gZ2V0IHRoZSBuZXR3b3JrIGRldmljZSB1c2FnZQotICoJc3RhdGlzdGljcy4gSWYgbm90IGRlZmluZWQsIHRoZSBjb3VudGVycyBpbiBkZXYtPnN0YXRzIHdpbGwKLSAqCWJlIHVzZWQuCisgKglzdGF0aXN0aWNzLiBEcml2ZXJzIG11c3QgZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgKgkxLiBEZWZpbmUgQG5kb19nZXRfc3RhdHM2NCB0byBmaWxsIGluIGEgemVyby1pbml0aWFsaXNlZAorICoJICAgcnRubF9saW5rX3N0YXRzNjQgc3RydWN0dXJlIHBhc3NlZCBieSB0aGUgY2FsbGVyLgorICoJMi4gRGVmaW5lIEBuZG9fZ2V0X3N0YXRzIHRvIHVwZGF0ZSBhIG5ldF9kZXZpY2Vfc3RhdHMgc3RydWN0dXJlCisgKgkgICAod2hpY2ggc2hvdWxkIG5vcm1hbGx5IGJlIGRldi0+c3RhdHMpIGFuZCByZXR1cm4gYSBwb2ludGVyIHRvCisgKgkgICBpdC4gVGhlIHN0cnVjdHVyZSBtYXkgYmUgY2hhbmdlZCBhc3luY2hyb25vdXNseSBvbmx5IGlmIGVhY2gKKyAqCSAgIGZpZWxkIGlzIHdyaXR0ZW4gYXRvbWljYWxseS4KKyAqCTMuIFVwZGF0ZSBkZXYtPnN0YXRzIGFzeW5jaHJvbm91c2x5IGFuZCBhdG9taWNhbGx5LCBhbmQgZGVmaW5lCisgKgkgICBuZWl0aGVyIG9wZXJhdGlvbi4KICAqCiAgKiB2b2lkICgqbmRvX3ZsYW5fcnhfcmVnaXN0ZXIpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB2bGFuX2dyb3VwICpncnApOwogICoJSWYgZGV2aWNlIHN1cHBvcnQgVkxBTiByZWNlaXZlIGFjY2xlcmF0aW9uCkBAIC03MTgsNiArNzI5LDggQEAKIAkJCQkJCSAgIHN0cnVjdCBuZWlnaF9wYXJtcyAqKTsKIAl2b2lkCQkJKCpuZG9fdHhfdGltZW91dCkgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCisJc3RydWN0IHJ0bmxfbGlua19zdGF0czY0KiAoKm5kb19nZXRfc3RhdHM2NCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJCSAgICAgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdG9yYWdlKTsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyogKCpuZG9fZ2V0X3N0YXRzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogCXZvaWQJCQkoKm5kb192bGFuX3J4X3JlZ2lzdGVyKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtNzI4LDYgKzc0MSw4IEBACiAJCQkJCQkgICAgICAgIHVuc2lnbmVkIHNob3J0IHZpZCk7CiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAl2b2lkICAgICAgICAgICAgICAgICAgICAoKm5kb19wb2xsX2NvbnRyb2xsZXIpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCWludAkJCSgqbmRvX25ldHBvbGxfc2V0dXApKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQkgICAgIHN0cnVjdCBuZXRwb2xsX2luZm8gKmluZm8pOwogCXZvaWQJCQkoKm5kb19uZXRwb2xsX2NsZWFudXApKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogI2VuZGlmCiAJaW50CQkJKCpuZG9fc2V0X3ZmX21hYykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTc3NSwxMSArNzkwLDExIEBACiAJLyoKIAkgKiBUaGlzIGlzIHRoZSBmaXJzdCBmaWVsZCBvZiB0aGUgInZpc2libGUiIHBhcnQgb2YgdGhpcyBzdHJ1Y3R1cmUKIAkgKiAoaS5lLiBhcyBzZWVuIGJ5IHVzZXJzIGluIHRoZSAiU3BhY2UuYyIgZmlsZSkuICBJdCBpcyB0aGUgbmFtZQotCSAqIHRoZSBpbnRlcmZhY2UuCisJICogb2YgdGhlIGludGVyZmFjZS4KIAkgKi8KIAljaGFyCQkJbmFtZVtJRk5BTVNJWl07CiAKLQlzdHJ1Y3QgcG1fcW9zX3JlcXVlc3RfbGlzdCAqcG1fcW9zX3JlcTsKKwlzdHJ1Y3QgcG1fcW9zX3JlcXVlc3RfbGlzdCBwbV9xb3NfcmVxOwogCiAJLyogZGV2aWNlIG5hbWUgaGFzaCBjaGFpbiAqLwogCXN0cnVjdCBobGlzdF9ub2RlCW5hbWVfaGxpc3Q7CkBAIC04NDcsNyArODYyLDggQEAKICNkZWZpbmUgTkVUSUZfRl9GU08JCShTS0JfR1NPX0ZDT0UgPDwgTkVUSUZfRl9HU09fU0hJRlQpCiAKIAkvKiBMaXN0IG9mIGZlYXR1cmVzIHdpdGggc29mdHdhcmUgZmFsbGJhY2tzLiAqLwotI2RlZmluZSBORVRJRl9GX0dTT19TT0ZUV0FSRQkoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTT19FQ04gfCBORVRJRl9GX1RTTzYpCisjZGVmaW5lIE5FVElGX0ZfR1NPX1NPRlRXQVJFCShORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPX0VDTiB8IFwKKwkJCQkgTkVUSUZfRl9UU082IHwgTkVUSUZfRl9VRk8pCiAKIAogI2RlZmluZSBORVRJRl9GX0dFTl9DU1VNCShORVRJRl9GX05PX0NTVU0gfCBORVRJRl9GX0hXX0NTVU0pCkBAIC05MDgsNiArOTI0LDcgQEAKIAogCS8qIEludGVyZmFjZSBhZGRyZXNzIGluZm8uICovCiAJdW5zaWduZWQgY2hhcgkJcGVybV9hZGRyW01BWF9BRERSX0xFTl07IC8qIHBlcm1hbmVudCBodyBhZGRyZXNzICovCisJdW5zaWduZWQgY2hhcgkJYWRkcl9hc3NpZ25fdHlwZTsgLyogaHcgYWRkcmVzcyBhc3NpZ25tZW50IHR5cGUgKi8KIAl1bnNpZ25lZCBjaGFyCQlhZGRyX2xlbjsJLyogaGFyZHdhcmUgYWRkcmVzcyBsZW5ndGgJKi8KIAl1bnNpZ25lZCBzaG9ydCAgICAgICAgICBkZXZfaWQ7CQkvKiBmb3Igc2hhcmVkIG5ldHdvcmsgY2FyZHMgKi8KIApAQCAtOTU3LDYgKzk3NCw4IEBACiAjZW5kaWYKIAogCXN0cnVjdCBuZXRkZXZfcXVldWUJcnhfcXVldWU7CisJcnhfaGFuZGxlcl9mdW5jX3QJKnJ4X2hhbmRsZXI7CisJdm9pZAkJCSpyeF9oYW5kbGVyX2RhdGE7CiAKIAlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlCSpfdHggX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIApAQCAtMTAyNCwxMCArMTA0Myw2IEBACiAJLyogbWlkLWxheWVyIHByaXZhdGUgKi8KIAl2b2lkCQkJKm1sX3ByaXY7CiAKLQkvKiBicmlkZ2Ugc3R1ZmYgKi8KLQlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0CSpicl9wb3J0OwotCS8qIG1hY3ZsYW4gKi8KLQlzdHJ1Y3QgbWFjdmxhbl9wb3J0CSptYWN2bGFuX3BvcnQ7CiAJLyogR0FSUCAqLwogCXN0cnVjdCBnYXJwX3BvcnQJKmdhcnBfcG9ydDsKIApAQCAtMTA1Nyw2ICsxMDcyLDkgQEAKICNlbmRpZgogCS8qIG4tdHVwbGUgZmlsdGVyIGxpc3QgYXR0YWNoZWQgdG8gdGhpcyBkZXZpY2UgKi8KIAlzdHJ1Y3QgZXRodG9vbF9yeF9udHVwbGVfbGlzdCBldGh0b29sX250dXBsZV9saXN0OworCisJLyogcGh5IGRldmljZSBtYXkgYXR0YWNoIGl0c2VsZiBmb3IgaGFyZHdhcmUgdGltZXN0YW1waW5nICovCisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKIH07CiAjZGVmaW5lIHRvX25ldF9kZXYoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBuZXRfZGV2aWNlLCBkZXYpCiAKQEAgLTEwODcsMTEgKzExMDUsNyBAQAogc3RhdGljIGlubGluZQogc3RydWN0IG5ldCAqZGV2X25ldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotI2lmZGVmIENPTkZJR19ORVRfTlMKLQlyZXR1cm4gZGV2LT5uZF9uZXQ7Ci0jZWxzZQotCXJldHVybiAmaW5pdF9uZXQ7Ci0jZW5kaWYKKwlyZXR1cm4gcmVhZF9wbmV0KCZkZXYtPm5kX25ldCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUKQEAgLTEyNzIsOCArMTI4Niw4IEBACiBleHRlcm4gdm9pZAkJZGV2X3JlbW92ZV9wYWNrKHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQpOwogZXh0ZXJuIHZvaWQJCV9fZGV2X3JlbW92ZV9wYWNrKHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQpOwogCi1leHRlcm4gc3RydWN0IG5ldF9kZXZpY2UJKmRldl9nZXRfYnlfZmxhZ3Moc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBzaG9ydCBmbGFncywKLQkJCQkJCSAgdW5zaWduZWQgc2hvcnQgbWFzayk7CitleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UJKmRldl9nZXRfYnlfZmxhZ3NfcmN1KHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgc2hvcnQgZmxhZ3MsCisJCQkJCQkgICAgICB1bnNpZ25lZCBzaG9ydCBtYXNrKTsKIGV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZQkqZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UJKmRldl9nZXRfYnlfbmFtZV9yY3Uoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTsKIGV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZQkqX19kZXZfZ2V0X2J5X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTsKQEAgLTE2OTYsNiArMTcxMCwxMSBAQAogCW5hcGktPnNrYiA9IE5VTEw7CiB9CiAKK2V4dGVybiBpbnQgbmV0ZGV2X3J4X2hhbmRsZXJfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgICByeF9oYW5kbGVyX2Z1bmNfdCAqcnhfaGFuZGxlciwKKwkJCQkgICAgICB2b2lkICpyeF9oYW5kbGVyX2RhdGEpOworZXh0ZXJuIHZvaWQgbmV0ZGV2X3J4X2hhbmRsZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwogZXh0ZXJuIHZvaWQJCW5ldGlmX25pdF9kZWxpdmVyKHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludAkJZGV2X3ZhbGlkX25hbWUoY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gaW50CQlkZXZfaW9jdGwoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqKTsKQEAgLTE3NzUsNiArMTc5NCw4IEBACiAKIGV4dGVybiB2b2lkIG5ldGlmX2NhcnJpZXJfb2ZmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCitleHRlcm4gdm9pZCBuZXRpZl9ub3RpZnlfcGVlcnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKIC8qKgogICoJbmV0aWZfZG9ybWFudF9vbiAtIG1hcmsgZGV2aWNlIGFzIGRvcm1hbnQuCiAgKglAZGV2OiBuZXR3b3JrIGRldmljZQpAQCAtMjExOSw4ICsyMTQwLDEwIEBACiAvKiBMb2FkIGEgZGV2aWNlIHZpYSB0aGUga21vZCAqLwogZXh0ZXJuIHZvaWQJCWRldl9sb2FkKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gdm9pZAkJZGV2X21jYXN0X2luaXQodm9pZCk7Ci1leHRlcm4gY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmRldl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZAkJZGV2X3R4cV9zdGF0c19mb2xkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyk7CitleHRlcm4gc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpkZXZfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgICBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0b3JhZ2UpOworZXh0ZXJuIHZvaWQJCWRldl90eHFfc3RhdHNfZm9sZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKTsKIAogZXh0ZXJuIGludAkJbmV0ZGV2X21heF9iYWNrbG9nOwogZXh0ZXJuIGludAkJbmV0ZGV2X3RzdGFtcF9wcmVxdWV1ZTsKQEAgLTIyMzAsMjUgKzIyNTMsMjMgQEAKIAlyZXR1cm4gZGV2LT5uYW1lOwogfQogCi0jZGVmaW5lIG5ldGRldl9wcmludGsobGV2ZWwsIG5ldGRldiwgZm9ybWF0LCBhcmdzLi4uKQkJXAotCWRldl9wcmludGsobGV2ZWwsIChuZXRkZXYpLT5kZXYucGFyZW50LAkJCVwKLQkJICAgIiVzOiAiIGZvcm1hdCwJCQkJXAotCQkgICBuZXRkZXZfbmFtZShuZXRkZXYpLCAjI2FyZ3MpCi0KLSNkZWZpbmUgbmV0ZGV2X2VtZXJnKGRldiwgZm9ybWF0LCBhcmdzLi4uKQkJCVwKLQluZXRkZXZfcHJpbnRrKEtFUk5fRU1FUkcsIGRldiwgZm9ybWF0LCAjI2FyZ3MpCi0jZGVmaW5lIG5ldGRldl9hbGVydChkZXYsIGZvcm1hdCwgYXJncy4uLikJCQlcCi0JbmV0ZGV2X3ByaW50ayhLRVJOX0FMRVJULCBkZXYsIGZvcm1hdCwgIyNhcmdzKQotI2RlZmluZSBuZXRkZXZfY3JpdChkZXYsIGZvcm1hdCwgYXJncy4uLikJCQlcCi0JbmV0ZGV2X3ByaW50ayhLRVJOX0NSSVQsIGRldiwgZm9ybWF0LCAjI2FyZ3MpCi0jZGVmaW5lIG5ldGRldl9lcnIoZGV2LCBmb3JtYXQsIGFyZ3MuLi4pCQkJXAotCW5ldGRldl9wcmludGsoS0VSTl9FUlIsIGRldiwgZm9ybWF0LCAjI2FyZ3MpCi0jZGVmaW5lIG5ldGRldl93YXJuKGRldiwgZm9ybWF0LCBhcmdzLi4uKQkJCVwKLQluZXRkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgZGV2LCBmb3JtYXQsICMjYXJncykKLSNkZWZpbmUgbmV0ZGV2X25vdGljZShkZXYsIGZvcm1hdCwgYXJncy4uLikJCQlcCi0JbmV0ZGV2X3ByaW50ayhLRVJOX05PVElDRSwgZGV2LCBmb3JtYXQsICMjYXJncykKLSNkZWZpbmUgbmV0ZGV2X2luZm8oZGV2LCBmb3JtYXQsIGFyZ3MuLi4pCQkJXAotCW5ldGRldl9wcmludGsoS0VSTl9JTkZPLCBkZXYsIGZvcm1hdCwgIyNhcmdzKQorZXh0ZXJuIGludCBuZXRkZXZfcHJpbnRrKGNvbnN0IGNoYXIgKmxldmVsLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKTsKK2V4dGVybiBpbnQgbmV0ZGV2X2VtZXJnKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKK2V4dGVybiBpbnQgbmV0ZGV2X2FsZXJ0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKK2V4dGVybiBpbnQgbmV0ZGV2X2NyaXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOworZXh0ZXJuIGludCBuZXRkZXZfZXJyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKK2V4dGVybiBpbnQgbmV0ZGV2X3dhcm4oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOworZXh0ZXJuIGludCBuZXRkZXZfbm90aWNlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKK2V4dGVybiBpbnQgbmV0ZGV2X2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOwogCiAjaWYgZGVmaW5lZChERUJVRykKICNkZWZpbmUgbmV0ZGV2X2RiZyhfX2RldiwgZm9ybWF0LCBhcmdzLi4uKQkJCVwKQEAgLTIyOTYsMjAgKzIzMTcsMjYgQEAKIAkJbmV0ZGV2X3ByaW50ayhsZXZlbCwgKGRldiksIGZtdCwgIyNhcmdzKTsJXAogfSB3aGlsZSAoMCkKIAorI2RlZmluZSBuZXRpZl9sZXZlbChsZXZlbCwgcHJpdiwgdHlwZSwgZGV2LCBmbXQsIGFyZ3MuLi4pCVwKK2RvIHsJCQkJCQkJCVwKKwlpZiAobmV0aWZfbXNnXyMjdHlwZShwcml2KSkJCQkJXAorCQluZXRkZXZfIyNsZXZlbChkZXYsIGZtdCwgIyNhcmdzKTsJCVwKK30gd2hpbGUgKDApCisKICNkZWZpbmUgbmV0aWZfZW1lcmcocHJpdiwgdHlwZSwgZGV2LCBmbXQsIGFyZ3MuLi4pCQlcCi0JbmV0aWZfcHJpbnRrKHByaXYsIHR5cGUsIEtFUk5fRU1FUkcsIGRldiwgZm10LCAjI2FyZ3MpCisJbmV0aWZfbGV2ZWwoZW1lcmcsIHByaXYsIHR5cGUsIGRldiwgZm10LCAjI2FyZ3MpCiAjZGVmaW5lIG5ldGlmX2FsZXJ0KHByaXYsIHR5cGUsIGRldiwgZm10LCBhcmdzLi4uKQkJXAotCW5ldGlmX3ByaW50ayhwcml2LCB0eXBlLCBLRVJOX0FMRVJULCBkZXYsIGZtdCwgIyNhcmdzKQorCW5ldGlmX2xldmVsKGFsZXJ0LCBwcml2LCB0eXBlLCBkZXYsIGZtdCwgIyNhcmdzKQogI2RlZmluZSBuZXRpZl9jcml0KHByaXYsIHR5cGUsIGRldiwgZm10LCBhcmdzLi4uKQkJXAotCW5ldGlmX3ByaW50ayhwcml2LCB0eXBlLCBLRVJOX0NSSVQsIGRldiwgZm10LCAjI2FyZ3MpCisJbmV0aWZfbGV2ZWwoY3JpdCwgcHJpdiwgdHlwZSwgZGV2LCBmbXQsICMjYXJncykKICNkZWZpbmUgbmV0aWZfZXJyKHByaXYsIHR5cGUsIGRldiwgZm10LCBhcmdzLi4uKQkJXAotCW5ldGlmX3ByaW50ayhwcml2LCB0eXBlLCBLRVJOX0VSUiwgZGV2LCBmbXQsICMjYXJncykKKwluZXRpZl9sZXZlbChlcnIsIHByaXYsIHR5cGUsIGRldiwgZm10LCAjI2FyZ3MpCiAjZGVmaW5lIG5ldGlmX3dhcm4ocHJpdiwgdHlwZSwgZGV2LCBmbXQsIGFyZ3MuLi4pCQlcCi0JbmV0aWZfcHJpbnRrKHByaXYsIHR5cGUsIEtFUk5fV0FSTklORywgZGV2LCBmbXQsICMjYXJncykKKwluZXRpZl9sZXZlbCh3YXJuLCBwcml2LCB0eXBlLCBkZXYsIGZtdCwgIyNhcmdzKQogI2RlZmluZSBuZXRpZl9ub3RpY2UocHJpdiwgdHlwZSwgZGV2LCBmbXQsIGFyZ3MuLi4pCQlcCi0JbmV0aWZfcHJpbnRrKHByaXYsIHR5cGUsIEtFUk5fTk9USUNFLCBkZXYsIGZtdCwgIyNhcmdzKQorCW5ldGlmX2xldmVsKG5vdGljZSwgcHJpdiwgdHlwZSwgZGV2LCBmbXQsICMjYXJncykKICNkZWZpbmUgbmV0aWZfaW5mbyhwcml2LCB0eXBlLCBkZXYsIGZtdCwgYXJncy4uLikJCVwKLQluZXRpZl9wcmludGsocHJpdiwgdHlwZSwgS0VSTl9JTkZPLCAoZGV2KSwgZm10LCAjI2FyZ3MpCisJbmV0aWZfbGV2ZWwoaW5mbywgcHJpdiwgdHlwZSwgZGV2LCBmbXQsICMjYXJncykKIAogI2lmIGRlZmluZWQoREVCVUcpCiAjZGVmaW5lIG5ldGlmX2RiZyhwcml2LCB0eXBlLCBkZXYsIGZvcm1hdCwgYXJncy4uLikJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL0tidWlsZCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL0tidWlsZAppbmRleCA0ODc2N2NkLi5lZGVlYWJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9LYnVpbGQKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvS2J1aWxkCkBAIC0zLDExICszLDEzIEBACiBoZWFkZXIteSArPSBuZm5ldGxpbmtfY29ubnRyYWNrLmgKIGhlYWRlci15ICs9IG5mbmV0bGlua19sb2cuaAogaGVhZGVyLXkgKz0gbmZuZXRsaW5rX3F1ZXVlLmgKK2hlYWRlci15ICs9IHh0X0NIRUNLU1VNLmgKIGhlYWRlci15ICs9IHh0X0NMQVNTSUZZLmgKIGhlYWRlci15ICs9IHh0X0NPTk5NQVJLLmgKIGhlYWRlci15ICs9IHh0X0NPTk5TRUNNQVJLLmgKIGhlYWRlci15ICs9IHh0X0NULmgKIGhlYWRlci15ICs9IHh0X0RTQ1AuaAoraGVhZGVyLXkgKz0geHRfSURMRVRJTUVSLmgKIGhlYWRlci15ICs9IHh0X0xFRC5oCiBoZWFkZXIteSArPSB4dF9NQVJLLmgKIGhlYWRlci15ICs9IHh0X05GTE9HLmgKQEAgLTE4LDE3ICsyMCwxOSBAQAogaGVhZGVyLXkgKz0geHRfVENQT1BUU1RSSVAuaAogaGVhZGVyLXkgKz0geHRfVEVFLmgKIGhlYWRlci15ICs9IHh0X1RQUk9YWS5oCitoZWFkZXIteSArPSB4dF9jbHVzdGVyLmgKIGhlYWRlci15ICs9IHh0X2NvbW1lbnQuaAogaGVhZGVyLXkgKz0geHRfY29ubmJ5dGVzLmgKIGhlYWRlci15ICs9IHh0X2Nvbm5saW1pdC5oCiBoZWFkZXIteSArPSB4dF9jb25ubWFyay5oCiBoZWFkZXIteSArPSB4dF9jb25udHJhY2suaAotaGVhZGVyLXkgKz0geHRfY2x1c3Rlci5oCitoZWFkZXIteSArPSB4dF9jcHUuaAogaGVhZGVyLXkgKz0geHRfZGNjcC5oCiBoZWFkZXIteSArPSB4dF9kc2NwLmgKIGhlYWRlci15ICs9IHh0X2VzcC5oCiBoZWFkZXIteSArPSB4dF9oYXNobGltaXQuaAogaGVhZGVyLXkgKz0geHRfaXByYW5nZS5oCitoZWFkZXIteSArPSB4dF9pcHZzLmgKIGhlYWRlci15ICs9IHh0X2hlbHBlci5oCiBoZWFkZXIteSArPSB4dF9sZW5ndGguaAogaGVhZGVyLXkgKz0geHRfbGltaXQuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oCmluZGV4IDE0ZTZkMzIuLjFhZmQxOGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmgKQEAgLTc2LDYgKzc2LDEwIEBACiAJLyogQ29ubnRyYWNrIGlzIGEgdGVtcGxhdGUgKi8KIAlJUFNfVEVNUExBVEVfQklUID0gMTEsCiAJSVBTX1RFTVBMQVRFID0gKDEgPDwgSVBTX1RFTVBMQVRFX0JJVCksCisKKwkvKiBDb25udHJhY2sgaXMgYSBmYWtlIHVudHJhY2tlZCBlbnRyeSAqLworCUlQU19VTlRSQUNLRURfQklUID0gMTIsCisJSVBTX1VOVFJBQ0tFRCA9ICgxIDw8IElQU19VTlRSQUNLRURfQklUKSwKIH07CiAKIC8qIENvbm5lY3Rpb24gdHJhY2tpbmcgZXZlbnQgdHlwZXMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuaAppbmRleCBkM2JhYjdhLi5lYTliOGQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5oCkBAIC04OSw2ICs4OSw3IEBACiAjZGVmaW5lIE5GVUxOTF9DT1BZX05PTkUJMHgwMAogI2RlZmluZSBORlVMTkxfQ09QWV9NRVRBCTB4MDEKICNkZWZpbmUgTkZVTE5MX0NPUFlfUEFDS0VUCTB4MDIKKy8qIDB4ZmYgaXMgcmVzZXJ2ZWQsIGRvbid0IHVzZSBpdCBmb3IgbmV3IGNvcHkgbW9kZXMuICovCiAKICNkZWZpbmUgTkZVTE5MX0NGR19GX1NFUQkweDAwMDEKICNkZWZpbmUgTkZVTE5MX0NGR19GX1NFUV9HTE9CQUwJMHgwMDAyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DSEVDS1NVTS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ0hFQ0tTVU0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTJlNDY2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ0hFQ0tTVU0uaApAQCAtMCwwICsxLDIwIEBACisvKiBIZWFkZXIgZmlsZSBmb3IgaXB0YWJsZXMgaXB0X0NIRUNLU1VNIHRhcmdldAorICoKKyAqIChDKSAyMDAyIGJ5IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBnbnVtb25rcy5vcmc+CisgKiAoQykgMjAxMCBSZWQgSGF0IEluYworICogQXV0aG9yOiBNaWNoYWVsIFMuIFRzaXJraW4gPG1zdEByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgR05VIEdQTCB2MiwgMTk5MQorKi8KKyNpZm5kZWYgX1hUX0NIRUNLU1VNX1RBUkdFVF9ICisjZGVmaW5lIF9YVF9DSEVDS1NVTV9UQVJHRVRfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBYVF9DSEVDS1NVTV9PUF9GSUxMCTB4MDEJLyogZmlsbCBpbiBjaGVja3N1bSBpbiBJUCBoZWFkZXIgKi8KKworc3RydWN0IHh0X0NIRUNLU1VNX2luZm8geworCV9fdTggb3BlcmF0aW9uOwkvKiBiaXRzZXQgb2Ygb3BlcmF0aW9ucyAqLworfTsKKworI2VuZGlmIC8qIF9YVF9DSEVDS1NVTV9UQVJHRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9JRExFVElNRVIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTFhYTFiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5oCisgKgorICogSGVhZGVyIGZpbGUgZm9yIFh0YWJsZXMgdGltZXIgdGFyZ2V0IG1vZHVsZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqIFdyaXR0ZW4gYnkgVGltbyBUZXJhcyA8ZXh0LXRpbW8udGVyYXNAbm9raWEuY29tPgorICoKKyAqIENvbnZlcnRlZCB0byB4X3RhYmxlcyBhbmQgZm9yd2FyZC1wb3J0ZWQgdG8gMi42LjM0CisgKiBieSBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICovCisKKyNpZm5kZWYgX1hUX0lETEVUSU1FUl9ICisjZGVmaW5lIF9YVF9JRExFVElNRVJfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBNQVhfSURMRVRJTUVSX0xBQkVMX1NJWkUgMjgKKworc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvIHsKKwlfX3UzMiB0aW1lb3V0OworCisJY2hhciBsYWJlbFtNQVhfSURMRVRJTUVSX0xBQkVMX1NJWkVdOworCisJLyogZm9yIGtlcm5lbCBtb2R1bGUgaW50ZXJuYWwgdXNlIG9ubHkgKi8KKwlzdHJ1Y3QgaWRsZXRpbWVyX3RnICp0aW1lciBfX2F0dHJpYnV0ZSgoYWxpZ25lZCg4KSkpOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jcHUuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2NwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYzdmMTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jcHUuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIF9YVF9DUFVfSAorI2RlZmluZSBfWFRfQ1BVX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCB4dF9jcHVfaW5mbyB7CisJX191MzIJY3B1OworCV9fdTMyCWludmVydDsKK307CisKKyNlbmRpZiAvKl9YVF9DUFVfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9pcHZzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9pcHZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE2N2FlYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2lwdnMuaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIF9YVF9JUFZTX0gKKyNkZWZpbmUgX1hUX0lQVlNfSAorCitlbnVtIHsKKwlYVF9JUFZTX0lQVlNfUFJPUEVSVFkgPQkxIDw8IDAsIC8qIGFsbCBvdGhlciBvcHRpb25zIGltcGx5IHRoaXMgb25lICovCisJWFRfSVBWU19QUk9UTyA9CQkxIDw8IDEsCisJWFRfSVBWU19WQUREUiA9CQkxIDw8IDIsCisJWFRfSVBWU19WUE9SVCA9CQkxIDw8IDMsCisJWFRfSVBWU19ESVIgPQkJMSA8PCA0LAorCVhUX0lQVlNfTUVUSE9EID0JMSA8PCA1LAorCVhUX0lQVlNfVlBPUlRDVEwgPQkxIDw8IDYsCisJWFRfSVBWU19NQVNLID0JCSgxIDw8IDcpIC0gMSwKKwlYVF9JUFZTX09OQ0VfTUFTSyA9CVhUX0lQVlNfTUFTSyAmIH5YVF9JUFZTX0lQVlNfUFJPUEVSVFkKK307CisKK3N0cnVjdCB4dF9pcHZzX210aW5mbyB7CisJdW5pb24gbmZfaW5ldF9hZGRyCXZhZGRyLCB2bWFzazsKKwlfX2JlMTYJCQl2cG9ydDsKKwlfX3U4CQkJbDRwcm90bzsKKwlfX3U4CQkJZndkX21ldGhvZDsKKwlfX2JlMTYJCQl2cG9ydGN0bDsKKworCV9fdTgJCQlpbnZlcnQ7CisJX191OAkJCWJpdG1hc2s7Cit9OworCisjZW5kaWYgLyogX1hUX0lQVlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcXVvdGEuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3F1b3RhLmgKaW5kZXggOGRjODlkZi4uYjBkMjhjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcXVvdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9xdW90YS5oCkBAIC0xMSw5ICsxMSw5IEBACiBzdHJ1Y3QgeHRfcXVvdGFfaW5mbyB7CiAJdV9pbnQzMl90CQlmbGFnczsKIAl1X2ludDMyX3QJCXBhZDsKKwlhbGlnbmVkX3U2NAkJcXVvdGE7CiAKIAkvKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCAqLwotCWFsaWduZWRfdTY0CQlxdW90YTsKIAlzdHJ1Y3QgeHRfcXVvdGFfcHJpdgkqbWFzdGVyOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfTE9HLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9MT0cuaAppbmRleCA5MGZhNjUyLi5kY2RiYWRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9MT0cuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9MT0cuaApAQCAtNyw3ICs3LDggQEAKICNkZWZpbmUgSVBUX0xPR19JUE9QVAkJMHgwNAkvKiBMb2cgSVAgb3B0aW9ucyAqLwogI2RlZmluZSBJUFRfTE9HX1VJRAkJMHgwOAkvKiBMb2cgVUlEIG93bmluZyBsb2NhbCBzb2NrZXQgKi8KICNkZWZpbmUgSVBUX0xPR19ORkxPRwkJMHgxMAkvKiBVbnN1cHBvcnRlZCwgZG9uJ3QgcmV1c2UgKi8KLSNkZWZpbmUgSVBUX0xPR19NQVNLCQkweDFmCisjZGVmaW5lIElQVF9MT0dfTUFDREVDT0RFCTB4MjAJLyogRGVjb2RlIE1BQyBoZWFkZXIgKi8KKyNkZWZpbmUgSVBUX0xPR19NQVNLCQkweDJmCiAKIHN0cnVjdCBpcHRfbG9nX2luZm8gewogCXVuc2lnbmVkIGNoYXIgbGV2ZWw7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfTE9HLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfTE9HLmgKaW5kZXggMGQwMTE5Yi4uOWRkNTU3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X0xPRy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9MT0cuaApAQCAtNyw3ICs3LDggQEAKICNkZWZpbmUgSVA2VF9MT0dfSVBPUFQJCTB4MDQJLyogTG9nIElQIG9wdGlvbnMgKi8KICNkZWZpbmUgSVA2VF9MT0dfVUlECQkweDA4CS8qIExvZyBVSUQgb3duaW5nIGxvY2FsIHNvY2tldCAqLwogI2RlZmluZSBJUDZUX0xPR19ORkxPRwkJMHgxMAkvKiBVbnN1cHBvcnRlZCwgZG9uJ3QgdXNlICovCi0jZGVmaW5lIElQNlRfTE9HX01BU0sJCTB4MWYKKyNkZWZpbmUgSVA2VF9MT0dfTUFDREVDT0RFCTB4MjAJLyogRGVjb2RlIE1BQyBoZWFkZXIgKi8KKyNkZWZpbmUgSVA2VF9MT0dfTUFTSwkJMHgyZgogCiBzdHJ1Y3QgaXA2dF9sb2dfaW5mbyB7CiAJdW5zaWduZWQgY2hhciBsZXZlbDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmgKaW5kZXggZTllMjMxMi4uNDEzNzQyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmgKQEAgLTQ2LDkgKzQ2LDExIEBACiB2b2lkIG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pOwogdm9pZCBuZXRwb2xsX3ByaW50X29wdGlvbnMoc3RydWN0IG5ldHBvbGwgKm5wKTsKIGludCBuZXRwb2xsX3BhcnNlX29wdGlvbnMoc3RydWN0IG5ldHBvbGwgKm5wLCBjaGFyICpvcHQpOworaW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnApOwogaW50IG5ldHBvbGxfc2V0dXAoc3RydWN0IG5ldHBvbGwgKm5wKTsKIGludCBuZXRwb2xsX3RyYXAodm9pZCk7CiB2b2lkIG5ldHBvbGxfc2V0X3RyYXAoaW50IHRyYXApOwordm9pZCBfX25ldHBvbGxfY2xlYW51cChzdHJ1Y3QgbmV0cG9sbCAqbnApOwogdm9pZCBuZXRwb2xsX2NsZWFudXAoc3RydWN0IG5ldHBvbGwgKm5wKTsKIGludCBfX25ldHBvbGxfcngoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIG5ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKQEAgLTU3LDEyICs1OSwxNSBAQAogI2lmZGVmIENPTkZJR19ORVRQT0xMCiBzdGF0aWMgaW5saW5lIGJvb2wgbmV0cG9sbF9yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbyA9IHNrYi0+ZGV2LT5ucGluZm87CisJc3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJYm9vbCByZXQgPSBmYWxzZTsKIAorCXJjdV9yZWFkX2xvY2tfYmgoKTsKKwlucGluZm8gPSByY3VfZGVyZWZlcmVuY2VfYmgoc2tiLT5kZXYtPm5waW5mbyk7CisKIAlpZiAoIW5waW5mbyB8fCAobGlzdF9lbXB0eSgmbnBpbmZvLT5yeF9ucCkgJiYgIW5waW5mby0+cnhfZmxhZ3MpKQotCQlyZXR1cm4gZmFsc2U7CisJCWdvdG8gb3V0OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm5waW5mby0+cnhfbG9jaywgZmxhZ3MpOwogCS8qIGNoZWNrIHJ4X2ZsYWdzIGFnYWluIHdpdGggdGhlIGxvY2sgaGVsZCAqLwpAQCAtNzAsMTIgKzc1LDE0IEBACiAJCXJldCA9IHRydWU7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnBpbmZvLT5yeF9sb2NrLCBmbGFncyk7CiAKK291dDoKKwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW5saW5lIGludCBuZXRwb2xsX3J4X29uKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvID0gc2tiLT5kZXYtPm5waW5mbzsKKwlzdHJ1Y3QgbmV0cG9sbF9pbmZvICpucGluZm8gPSByY3VfZGVyZWZlcmVuY2VfYmgoc2tiLT5kZXYtPm5waW5mbyk7CiAKIAlyZXR1cm4gbnBpbmZvICYmICghbGlzdF9lbXB0eSgmbnBpbmZvLT5yeF9ucCkgfHwgbnBpbmZvLT5yeF9mbGFncyk7CiB9CkBAIC05MSw3ICs5OCw2IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5hcGktPmRldjsKIAotCXJjdV9yZWFkX2xvY2soKTsgLyogZGVhbCB3aXRoIHJhY2Ugb24gLT5ucGluZm8gKi8KIAlpZiAoZGV2ICYmIGRldi0+bnBpbmZvKSB7CiAJCXNwaW5fbG9jaygmbmFwaS0+cG9sbF9sb2NrKTsKIAkJbmFwaS0+cG9sbF9vd25lciA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKQEAgLTEwOCw3ICsxMTQsMTEgQEAKIAkJbmFwaS0+cG9sbF9vd25lciA9IC0xOwogCQlzcGluX3VubG9jaygmbmFwaS0+cG9sbF9sb2NrKTsKIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5ldHBvbGxfdHhfcnVubmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiBpcnFzX2Rpc2FibGVkKCk7CiB9CiAKICNlbHNlCkBAIC0xMzQsNiArMTQ0LDEwIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgbmV0cG9sbF9uZXRkZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogfQorc3RhdGljIGlubGluZSBpbnQgbmV0cG9sbF90eF9ydW5uaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oIGIvaW5jbHVkZS9saW51eC9uZnNfZnMuaAppbmRleCA3N2MyYWU1Li5iYWQ0ZDEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKQEAgLTQ5Myw4ICs0OTMsMTUgQEAKIGV4dGVybiBpbnQgbmZzX3diX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UqIHBhZ2UpOwogZXh0ZXJuIGludCBuZnNfd2JfcGFnZV9jYW5jZWwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UqIHBhZ2UpOwogI2lmIGRlZmluZWQoQ09ORklHX05GU19WMykgfHwgZGVmaW5lZChDT05GSUdfTkZTX1Y0KQorZXh0ZXJuIGludCAgbmZzX2NvbW1pdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKIGV4dGVybiBzdHJ1Y3QgbmZzX3dyaXRlX2RhdGEgKm5mc19jb21taXRkYXRhX2FsbG9jKHZvaWQpOwogZXh0ZXJuIHZvaWQgbmZzX2NvbW1pdF9mcmVlKHN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqd2RhdGEpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50CituZnNfY29tbWl0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBob3cpCit7CisJcmV0dXJuIDA7Cit9CiAjZW5kaWYKIAogc3RhdGljIGlubGluZSBpbnQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS9saW51eC9ubDgwMjExLmgKaW5kZXggYjdjNzdmOS4uMmM4NzAxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ubDgwMjExLmgKKysrIGIvaW5jbHVkZS9saW51eC9ubDgwMjExLmgKQEAgLTEzMiw3ICsxMzIsNyBAQAogICogCSVOTDgwMjExX0FUVFJfUkVHX1JVTEVfUE9XRVJfTUFYX0FOVF9HQUlOIGFuZAogICogCSVOTDgwMjExX0FUVFJfUkVHX1JVTEVfUE9XRVJfTUFYX0VJUlAuCiAgKiBATkw4MDIxMV9DTURfUkVRX1NFVF9SRUc6IGFzayB0aGUgd2lyZWxlc3MgY29yZSB0byBzZXQgdGhlIHJlZ3VsYXRvcnkgZG9tYWluCi0gKiAJdG8gdGhlIHRoZSBzcGVjaWZpZWQgSVNPL0lFQyAzMTY2LTEgYWxwaGEyIGNvdW50cnkgY29kZS4gVGhlIGNvcmUgd2lsbAorICogCXRvIHRoZSBzcGVjaWZpZWQgSVNPL0lFQyAzMTY2LTEgYWxwaGEyIGNvdW50cnkgY29kZS4gVGhlIGNvcmUgd2lsbAogICogCXN0b3JlIHRoaXMgYXMgYSB2YWxpZCByZXF1ZXN0IGFuZCB0aGVuIHF1ZXJ5IHVzZXJzcGFjZSBmb3IgaXQuCiAgKgogICogQE5MODAyMTFfQ01EX0dFVF9NRVNIX1BBUkFNUzogR2V0IG1lc2ggbmV0d29ya2luZyBwcm9wZXJ0aWVzIGZvciB0aGUKQEAgLTcyNSw2ICs3MjUsMTIgQEAKICAqIEBOTDgwMjExX0FUVFJfQVBfSVNPTEFURTogKEFQIG1vZGUpIERvIG5vdCBmb3J3YXJkIHRyYWZmaWMgYmV0d2VlbiBzdGF0aW9ucwogICoJY29ubmVjdGVkIHRvIHRoaXMgQlNTLgogICoKKyAqIEBOTDgwMjExX0FUVFJfV0lQSFlfVFhfUE9XRVJfU0VUVElORzogVHJhbnNtaXQgcG93ZXIgc2V0dGluZyB0eXBlLiBTZWUKKyAqICAgICAgJmVudW0gbmw4MDIxMV90eF9wb3dlcl9zZXR0aW5nIGZvciBwb3NzaWJsZSB2YWx1ZXMuCisgKiBATkw4MDIxMV9BVFRSX1dJUEhZX1RYX1BPV0VSX0xFVkVMOiBUcmFuc21pdCBwb3dlciBsZXZlbCBpbiBzaWduZWQgbUJtIHVuaXRzLgorICogICAgICBUaGlzIGlzIHVzZWQgaW4gYXNzb2NpYXRpb24gd2l0aCBATkw4MDIxMV9BVFRSX1dJUEhZX1RYX1BPV0VSX1NFVFRJTkcKKyAqICAgICAgZm9yIG5vbi1hdXRvbWF0aWMgc2V0dGluZ3MuCisgKgogICogQE5MODAyMTFfQVRUUl9NQVg6IGhpZ2hlc3QgYXR0cmlidXRlIG51bWJlciBjdXJyZW50bHkgZGVmaW5lZAogICogQF9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZQogICovCkBAIC04ODIsNiArODg4LDkgQEAKIAogCU5MODAyMTFfQVRUUl9BUF9JU09MQVRFLAogCisJTkw4MDIxMV9BVFRSX1dJUEhZX1RYX1BPV0VSX1NFVFRJTkcsCisJTkw4MDIxMV9BVFRSX1dJUEhZX1RYX1BPV0VSX0xFVkVMLAorCiAJLyogYWRkIGF0dHJpYnV0ZXMgaGVyZSwgdXBkYXRlIHRoZSBwb2xpY3kgaW4gbmw4MDIxMS5jICovCiAKIAlfX05MODAyMTFfQVRUUl9BRlRFUl9MQVNULApAQCAtMTY1OSw0ICsxNjY4LDE3IEBACiAJTkw4MDIxMV9DUU1fUlNTSV9USFJFU0hPTERfRVZFTlRfSElHSCwKIH07CiAKKworLyoqCisgKiBlbnVtIG5sODAyMTFfdHhfcG93ZXJfc2V0dGluZyAtIFRYIHBvd2VyIGFkanVzdG1lbnQKKyAqIEBOTDgwMjExX1RYX1BPV0VSX0FVVE9NQVRJQzogYXV0b21hdGljYWxseSBkZXRlcm1pbmUgdHJhbnNtaXQgcG93ZXIKKyAqIEBOTDgwMjExX1RYX1BPV0VSX0xJTUlURUQ6IGxpbWl0IFRYIHBvd2VyIGJ5IHRoZSBtQm0gcGFyYW1ldGVyCisgKiBATkw4MDIxMV9UWF9QT1dFUl9GSVhFRDogZml4IFRYIHBvd2VyIHRvIHRoZSBtQm0gcGFyYW1ldGVyCisgKi8KK2VudW0gbmw4MDIxMV90eF9wb3dlcl9zZXR0aW5nIHsKKwlOTDgwMjExX1RYX1BPV0VSX0FVVE9NQVRJQywKKwlOTDgwMjExX1RYX1BPV0VSX0xJTUlURUQsCisJTkw4MDIxMV9UWF9QT1dFUl9GSVhFRCwKK307CisKICNlbmRpZiAvKiBfX0xJTlVYX05MODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ubWkuaCBiL2luY2x1ZGUvbGludXgvbm1pLmgKaW5kZXggYjc1MmU4MC4uMDZhYWI1ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ubWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L25taS5oCkBAIC0yMCwxMCArMjAsMTQgQEAKIGV4dGVybiB2b2lkIGFjcGlfbm1pX2Rpc2FibGUodm9pZCk7CiBleHRlcm4gdm9pZCBhY3BpX25taV9lbmFibGUodm9pZCk7CiAjZWxzZQorI2lmbmRlZiBDT05GSUdfSEFSRExPQ0tVUF9ERVRFQ1RPUgogc3RhdGljIGlubGluZSB2b2lkIHRvdWNoX25taV93YXRjaGRvZyh2b2lkKQogewogCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKIH0KKyNlbHNlCitleHRlcm4gdm9pZCB0b3VjaF9ubWlfd2F0Y2hkb2codm9pZCk7CisjZW5kaWYKIHN0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX25taV9kaXNhYmxlKHZvaWQpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIGFjcGlfbm1pX2VuYWJsZSh2b2lkKSB7IH0KICNlbmRpZgpAQCAtNDcsNCArNTEsMTMgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0xPQ0tVUF9ERVRFQ1RPUgoraW50IGh3X25taV9pc19jcHVfc3R1Y2soc3RydWN0IHB0X3JlZ3MgKik7Cit1NjQgaHdfbm1pX2dldF9zYW1wbGVfcGVyaW9kKHZvaWQpOworZXh0ZXJuIGludCB3YXRjaGRvZ19lbmFibGVkOworc3RydWN0IGN0bF90YWJsZTsKK2V4dGVybiBpbnQgcHJvY19kb3dhdGNoZG9nX2VuYWJsZWQoc3RydWN0IGN0bF90YWJsZSAqLCBpbnQgLAorCQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKKyNlbmRpZgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbm90aWZpZXIuaCBiL2luY2x1ZGUvbGludXgvbm90aWZpZXIuaAppbmRleCA1NDA3MDNiLi5iMmYxYTRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25vdGlmaWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9ub3RpZmllci5oCkBAIC0yMTAsNiArMjEwLDcgQEAKICNkZWZpbmUgTkVUREVWX1BPU1RfSU5JVAkweDAwMTAKICNkZWZpbmUgTkVUREVWX1VOUkVHSVNURVJfQkFUQ0ggMHgwMDExCiAjZGVmaW5lIE5FVERFVl9CT05ESU5HX0RFU0xBVkUgIDB4MDAxMgorI2RlZmluZSBORVRERVZfTk9USUZZX1BFRVJTCTB4MDAxMwogCiAjZGVmaW5lIFNZU19ET1dOCTB4MDAwMQkvKiBOb3RpZnkgb2Ygc3lzdGVtIGRvd24gKi8KICNkZWZpbmUgU1lTX1JFU1RBUlQJU1lTX0RPV04KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb2YuaCBiL2luY2x1ZGUvbGludXgvb2YuaAppbmRleCBhMzY3ZTE5Li5jYWQ3Y2YwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29mLmgKKysrIGIvaW5jbHVkZS9saW51eC9vZi5oCkBAIC03MCw2ICs3MCwxMSBAQAogZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfY2hvc2VuOwogZXh0ZXJuIHJ3bG9ja190IGRldnRyZWVfbG9jazsKIAorc3RhdGljIGlubGluZSBib29sIG9mX25vZGVfaXNfcm9vdChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCit7CisJcmV0dXJuIG5vZGUgJiYgKG5vZGUtPnBhcmVudCA9PSBOVUxMKTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgb2Zfbm9kZV9jaGVja19mbGFnKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbiwgdW5zaWduZWQgbG9uZyBmbGFnKQogewogCXJldHVybiB0ZXN0X2JpdChmbGFnLCAmbi0+X2ZsYWdzKTsKQEAgLTE0MSw2ICsxNDYsMTEgQEAKIAogI2RlZmluZSBPRl9CQURfQUREUgkoKHU2NCktMSkKIAorI2lmbmRlZiBvZl9ub2RlX3RvX25pZAorc3RhdGljIGlubGluZSBpbnQgb2Zfbm9kZV90b19uaWQoc3RydWN0IGRldmljZV9ub2RlICpucCkgeyByZXR1cm4gLTE7IH0KKyNkZWZpbmUgb2Zfbm9kZV90b19uaWQgb2Zfbm9kZV90b19uaWQKKyNlbmRpZgorCiBleHRlcm4gc3RydWN0IGRldmljZV9ub2RlICpvZl9maW5kX25vZGVfYnlfbmFtZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmZyb20sCiAJY29uc3QgY2hhciAqbmFtZSk7CiAjZGVmaW5lIGZvcl9lYWNoX25vZGVfYnlfbmFtZShkbiwgbmFtZSkgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vZl9hZGRyZXNzLmggYi9pbmNsdWRlL2xpbnV4L29mX2FkZHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWVhMDZmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9vZl9hZGRyZXNzLmgKQEAgLTAsMCArMSw0NCBAQAorI2lmbmRlZiBfX09GX0FERFJFU1NfSAorI2RlZmluZSBfX09GX0FERFJFU1NfSAorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisKK2V4dGVybiB1NjQgb2ZfdHJhbnNsYXRlX2FkZHJlc3Moc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgdTMyICphZGRyKTsKK2V4dGVybiBpbnQgb2ZfYWRkcmVzc190b19yZXNvdXJjZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgaW50IGluZGV4LAorCQkJCSAgc3RydWN0IHJlc291cmNlICpyKTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKm9mX2lvbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlLCBpbnQgaW5kZXgpOworCisvKiBFeHRyYWN0IGFuIGFkZHJlc3MgZnJvbSBhIGRldmljZSwgcmV0dXJucyB0aGUgcmVnaW9uIHNpemUgYW5kCisgKiB0aGUgYWRkcmVzcyBzcGFjZSBmbGFncyB0b28uIFRoZSBQQ0kgdmVyc2lvbiB1c2VzIGEgQkFSIG51bWJlcgorICogaW5zdGVhZCBvZiBhbiBhYnNvbHV0ZSBpbmRleAorICovCitleHRlcm4gY29uc3QgdTMyICpvZl9nZXRfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgaW50IGluZGV4LAorCQkJICAgdTY0ICpzaXplLCB1bnNpZ25lZCBpbnQgKmZsYWdzKTsKKworI2lmbmRlZiBwY2lfYWRkcmVzc190b19waW8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwY2lfYWRkcmVzc190b19waW8ocGh5c19hZGRyX3QgYWRkcikgeyByZXR1cm4gLTE7IH0KKyNkZWZpbmUgcGNpX2FkZHJlc3NfdG9fcGlvIHBjaV9hZGRyZXNzX3RvX3BpbworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUENJCitleHRlcm4gY29uc3QgdTMyICpvZl9nZXRfcGNpX2FkZHJlc3Moc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGludCBiYXJfbm8sCisJCQkgICAgICAgdTY0ICpzaXplLCB1bnNpZ25lZCBpbnQgKmZsYWdzKTsKK2V4dGVybiBpbnQgb2ZfcGNpX2FkZHJlc3NfdG9fcmVzb3VyY2Uoc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGludCBiYXIsCisJCQkJICAgICAgc3RydWN0IHJlc291cmNlICpyKTsKKyNlbHNlIC8qIENPTkZJR19QQ0kgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG9mX3BjaV9hZGRyZXNzX3RvX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCBpbnQgYmFyLAorCQkJCSAgICAgICAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnIpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgdTMyICpvZl9nZXRfcGNpX2FkZHJlc3Moc3RydWN0IGRldmljZV9ub2RlICpkZXYsCisJCWludCBiYXJfbm8sIHU2NCAqc2l6ZSwgdW5zaWduZWQgaW50ICpmbGFncykKK3sKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvKiBDT05GSUdfUENJICovCisKKworI2VuZGlmIC8qIF9fT0ZfQUREUkVTU19IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb2ZfZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L29mX2RldmljZS5oCmluZGV4IDExNjUxZmEuLjM1YWE0NGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvb2ZfZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9vZl9kZXZpY2UuaApAQCAtMSwzMiArMSw3NyBAQAogI2lmbmRlZiBfTElOVVhfT0ZfREVWSUNFX0gKICNkZWZpbmUgX0xJTlVYX09GX0RFVklDRV9ICiAKKy8qCisgKiBUaGUgb2ZfZGV2aWNlICp3YXMqIGEga2luZCBvZiAiYmFzZSBjbGFzcyIgdGhhdCB3YXMgYSBzdXBlcnNldCBvZgorICogc3RydWN0IGRldmljZSBmb3IgdXNlIGJ5IGRldmljZXMgYXR0YWNoZWQgdG8gYW4gT0Ygbm9kZSBhbmQgcHJvYmVkCisgKiB1c2luZyBPRiBwcm9wZXJ0aWVzLiAgSG93ZXZlciwgdGhlIGltcG9ydGFudCBiaXQgb2YgT0Ytc3R5bGUKKyAqIHByb2JpbmcsIG5hbWVseSB0aGUgZGV2aWNlIG5vZGUgcG9pbnRlciwgaGFzIGJlZW4gbW92ZWQgaW50byB0aGUKKyAqIGNvbW1vbiBzdHJ1Y3QgZGV2aWNlIHdoZW4gQ09ORklHX09GIGlzIHNldCB0byBtYWtlIE9GLXN0eWxlIHByb2JpbmcKKyAqIGF2YWlsYWJsZSB0byBhbGwgYnVzIHR5cGVzLiAgU28gbm93LCBqdXN0IG1ha2Ugb2ZfZGV2aWNlIGFuZAorICogcGxhdGZvcm1fZGV2aWNlIGVxdWl2YWxlbnQgc28gdGhhdCBjdXJyZW50IG9mX3BsYXRmb3JtIGJ1cyB1c2VycworICogY2FuIGJlIHRyYW5zcGFyZW50bHkgbWlncmF0ZWQgb3ZlciB0byB1c2luZyB0aGUgcGxhdGZvcm0gYnVzLgorICoKKyAqIFRoaXMgbGluZSB3aWxsIGdvIGF3YXkgb25jZSBhbGwgcmVmZXJlbmNlcyB0byBvZl9kZXZpY2UgYXJlIHJlbW92ZWQKKyAqIGZyb20gdGhlIGtlcm5lbC4KKyAqLworI2RlZmluZSBvZl9kZXZpY2UgcGxhdGZvcm1fZGV2aWNlCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4gLyogdGVtcG9yYXJ5IHVudGlsIG1lcmdlICovCisKICNpZmRlZiBDT05GSUdfT0ZfREVWSUNFCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KIAotI2luY2x1ZGUgPGFzbS9vZl9kZXZpY2UuaD4KLQogI2RlZmluZQl0b19vZl9kZXZpY2UoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBvZl9kZXZpY2UsIGRldikKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX21hdGNoX2RldmljZSgKIAljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaGVzLCBjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgb2ZfZGV2aWNlX21ha2VfYnVzX2lkKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKLWV4dGVybiBzdHJ1Y3Qgb2ZfZGV2aWNlICpvZl9kZXZfZ2V0KHN0cnVjdCBvZl9kZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCBvZl9kZXZfcHV0KHN0cnVjdCBvZl9kZXZpY2UgKmRldik7CisvKioKKyAqIG9mX2RyaXZlcl9tYXRjaF9kZXZpY2UgLSBUZWxsIGlmIGEgZHJpdmVyJ3Mgb2ZfbWF0Y2hfdGFibGUgbWF0Y2hlcyBhIGRldmljZS4KKyAqIEBkcnY6IHRoZSBkZXZpY2VfZHJpdmVyIHN0cnVjdHVyZSB0byB0ZXN0CisgKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZSB0byBtYXRjaCBhZ2FpbnN0CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG9mX2RyaXZlcl9tYXRjaF9kZXZpY2UoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKK3sKKwlyZXR1cm4gb2ZfbWF0Y2hfZGV2aWNlKGRydi0+b2ZfbWF0Y2hfdGFibGUsIGRldikgIT0gTlVMTDsKK30KIAotZXh0ZXJuIGludCBvZl9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpOwotZXh0ZXJuIHZvaWQgb2ZfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2Rldl9nZXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIG9mX2Rldl9wdXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKKworZXh0ZXJuIGludCBvZl9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpOworZXh0ZXJuIHZvaWQgb2ZfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpOwogZXh0ZXJuIHZvaWQgb2ZfcmVsZWFzZV9kZXYoc3RydWN0IGRldmljZSAqZGV2KTsKIAotc3RhdGljIGlubGluZSB2b2lkIG9mX2RldmljZV9mcmVlKHN0cnVjdCBvZl9kZXZpY2UgKmRldikKK3N0YXRpYyBpbmxpbmUgdm9pZCBvZl9kZXZpY2VfZnJlZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJb2ZfcmVsZWFzZV9kZXYoJmRldi0+ZGV2KTsKIH0KIAotZXh0ZXJuIHNzaXplX3Qgb2ZfZGV2aWNlX2dldF9tb2RhbGlhcyhzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKK2V4dGVybiBzc2l6ZV90IG9mX2RldmljZV9nZXRfbW9kYWxpYXMoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCQljaGFyICpzdHIsIHNzaXplX3QgbGVuKTsKKworZXh0ZXJuIGludCBvZl9kZXZpY2VfdWV2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KTsKKworCisjZWxzZSAvKiBDT05GSUdfT0ZfREVWSUNFICovCisKK3N0YXRpYyBpbmxpbmUgaW50IG9mX2RyaXZlcl9tYXRjaF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgb2ZfZGV2aWNlX3VldmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KQoreworCXJldHVybiAtRU5PREVWOworfQorCiAjZW5kaWYgLyogQ09ORklHX09GX0RFVklDRSAqLwogCiAjZW5kaWYgLyogX0xJTlVYX09GX0RFVklDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29mX2dwaW8uaCBiL2luY2x1ZGUvbGludXgvb2ZfZ3Bpby5oCmluZGV4IGZjMjQ3MmMuLjY1OThjMDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvb2ZfZ3Bpby5oCisrKyBiL2luY2x1ZGUvbGludXgvb2ZfZ3Bpby5oCkBAIC0zMywzNCArMzMsMTcgQEAKICNpZmRlZiBDT05GSUdfT0ZfR1BJTwogCiAvKgotICogR2VuZXJpYyBPRiBHUElPIGNoaXAKLSAqLwotc3RydWN0IG9mX2dwaW9fY2hpcCB7Ci0Jc3RydWN0IGdwaW9fY2hpcCBnYzsKLQlpbnQgZ3Bpb19jZWxsczsKLQlpbnQgKCp4bGF0ZSkoc3RydWN0IG9mX2dwaW9fY2hpcCAqb2ZfZ2MsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCSAgICAgY29uc3Qgdm9pZCAqZ3Bpb19zcGVjLCBlbnVtIG9mX2dwaW9fZmxhZ3MgKmZsYWdzKTsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IG9mX2dwaW9fY2hpcCAqdG9fb2ZfZ3Bpb19jaGlwKHN0cnVjdCBncGlvX2NoaXAgKmdjKQotewotCXJldHVybiBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBvZl9ncGlvX2NoaXAsIGdjKTsKLX0KLQotLyoKICAqIE9GIEdQSU8gY2hpcCBmb3IgbWVtb3J5IG1hcHBlZCBiYW5rcwogICovCiBzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwIHsKLQlzdHJ1Y3Qgb2ZfZ3Bpb19jaGlwIG9mX2djOworCXN0cnVjdCBncGlvX2NoaXAgZ2M7CiAJdm9pZCAoKnNhdmVfcmVncykoc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW1fZ2MpOwogCXZvaWQgX19pb21lbSAqcmVnczsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqdG9fb2ZfbW1fZ3Bpb19jaGlwKHN0cnVjdCBncGlvX2NoaXAgKmdjKQogewotCXN0cnVjdCBvZl9ncGlvX2NoaXAgKm9mX2djID0gdG9fb2ZfZ3Bpb19jaGlwKGdjKTsKLQotCXJldHVybiBjb250YWluZXJfb2Yob2ZfZ2MsIHN0cnVjdCBvZl9tbV9ncGlvX2NoaXAsIG9mX2djKTsKKwlyZXR1cm4gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwLCBnYyk7CiB9CiAKIGV4dGVybiBpbnQgb2ZfZ2V0X2dwaW9fZmxhZ3Moc3RydWN0IGRldmljZV9ub2RlICpucCwgaW50IGluZGV4LApAQCAtNjksMTEgKzUyLDEyIEBACiAKIGV4dGVybiBpbnQgb2ZfbW1fZ3Bpb2NoaXBfYWRkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiAJCQkgICAgICBzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYyk7Ci1leHRlcm4gaW50IG9mX2dwaW9fc2ltcGxlX3hsYXRlKHN0cnVjdCBvZl9ncGlvX2NoaXAgKm9mX2djLAotCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCQkJY29uc3Qgdm9pZCAqZ3Bpb19zcGVjLAotCQkJCWVudW0gb2ZfZ3Bpb19mbGFncyAqZmxhZ3MpOwotI2Vsc2UKKworZXh0ZXJuIHZvaWQgb2ZfZ3Bpb2NoaXBfYWRkKHN0cnVjdCBncGlvX2NoaXAgKmdjKTsKK2V4dGVybiB2b2lkIG9mX2dwaW9jaGlwX3JlbW92ZShzdHJ1Y3QgZ3Bpb19jaGlwICpnYyk7CitleHRlcm4gc3RydWN0IGdwaW9fY2hpcCAqb2Zfbm9kZV90b19ncGlvY2hpcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTsKKworI2Vsc2UgLyogQ09ORklHX09GX0dQSU8gKi8KIAogLyogRHJpdmVycyBtYXkgbm90IHN0cmljdGx5IGRlcGVuZCBvbiB0aGUgR1BJTyBzdXBwb3J0LCBzbyBsZXQgdGhlbSBsaW5rLiAqLwogc3RhdGljIGlubGluZSBpbnQgb2ZfZ2V0X2dwaW9fZmxhZ3Moc3RydWN0IGRldmljZV9ub2RlICpucCwgaW50IGluZGV4LApAQCAtODcsNiArNzEsOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgb2ZfZ3Bpb2NoaXBfYWRkKHN0cnVjdCBncGlvX2NoaXAgKmdjKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBvZl9ncGlvY2hpcF9yZW1vdmUoc3RydWN0IGdwaW9fY2hpcCAqZ2MpIHsgfQorCiAjZW5kaWYgLyogQ09ORklHX09GX0dQSU8gKi8KIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29mX2kyYy5oIGIvaW5jbHVkZS9saW51eC9vZl9pMmMuaAppbmRleCAzNDk3NGI1Li4wZWZlOGQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29mX2kyYy5oCisrKyBiL2luY2x1ZGUvbGludXgvb2ZfaTJjLmgKQEAgLTEyLDEyICsxMiwxOSBAQAogI2lmbmRlZiBfX0xJTlVYX09GX0kyQ19ICiAjZGVmaW5lIF9fTElOVVhfT0ZfSTJDX0gKIAorI2lmIGRlZmluZWQoQ09ORklHX09GX0kyQykgfHwgZGVmaW5lZChDT05GSUdfT0ZfSTJDX01PRFVMRSkKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KIAotdm9pZCBvZl9yZWdpc3Rlcl9pMmNfZGV2aWNlcyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsCi0JCQkgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqYWRhcF9ub2RlKTsKK2V4dGVybiB2b2lkIG9mX2kyY19yZWdpc3Rlcl9kZXZpY2VzKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCk7CiAKIC8qIG11c3QgY2FsbCBwdXRfZGV2aWNlKCkgd2hlbiBkb25lIHdpdGggcmV0dXJuZWQgaTJjX2NsaWVudCBkZXZpY2UgKi8KLXN0cnVjdCBpMmNfY2xpZW50ICpvZl9maW5kX2kyY19kZXZpY2VfYnlfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpOworZXh0ZXJuIHN0cnVjdCBpMmNfY2xpZW50ICpvZl9maW5kX2kyY19kZXZpY2VfYnlfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpOworCisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG9mX2kyY19yZWdpc3Rlcl9kZXZpY2VzKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKwlyZXR1cm47Cit9CisjZW5kaWYgLyogQ09ORklHX09GX0kyQyAqLwogCiAjZW5kaWYgLyogX19MSU5VWF9PRl9JMkNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vZl9pcnEuaCBiL2luY2x1ZGUvbGludXgvb2ZfaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkyOTc4MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvb2ZfaXJxLmgKQEAgLTAsMCArMSw3MCBAQAorI2lmbmRlZiBfX09GX0lSUV9ICisjZGVmaW5lIF9fT0ZfSVJRX0gKKworI2lmIGRlZmluZWQoQ09ORklHX09GKQorc3RydWN0IG9mX2lycTsKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKworLyoKKyAqIGlycV9vZl9wYXJzZV9hbmRfbWFwKCkgaXMgdXNlZCBiYSBhbGwgT0YgZW5hYmxlZCBwbGF0Zm9ybXM7IGJ1dCBTUEFSQworICogaW1wbGVtZW50cyBpdCBkaWZmZXJlbnRseS4gIEhvd2V2ZXIsIHRoZSBwcm90b3R5cGUgaXMgdGhlIHNhbWUgZm9yIGFsbCwKKyAqIHNvIGRlY2xhcmUgaXQgaGVyZSByZWdhcmRsZXNzIG9mIHRoZSBDT05GSUdfT0ZfSVJRIHNldHRpbmcuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgaXJxX29mX3BhcnNlX2FuZF9tYXAoc3RydWN0IGRldmljZV9ub2RlICpub2RlLCBpbnQgaW5kZXgpOworCisjaWYgZGVmaW5lZChDT05GSUdfT0ZfSVJRKQorLyoqCisgKiBvZl9pcnEgLSBjb250YWluZXIgZm9yIGRldmljZV9ub2RlL2lycV9zcGVjaWZpZXIgcGFpciBmb3IgYW4gaXJxIGNvbnRyb2xsZXIKKyAqIEBjb250cm9sbGVyOiBwb2ludGVyIHRvIGludGVycnVwdCBjb250cm9sbGVyIGRldmljZSB0cmVlIG5vZGUKKyAqIEBzaXplOiBzaXplIG9mIGludGVycnVwdCBzcGVjaWZpZXIKKyAqIEBzcGVjaWZpZXI6IGFycmF5IG9mIGNlbGxzIEBzaXplIGxvbmcgc3BlY2lmaW5nIHRoZSBzcGVjaWZpYyBpbnRlcnJ1cHQKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBpcyByZXR1cm5lZCB3aGVuIGFuIGludGVycnVwdCBpcyBtYXBwZWQuIFRoZSBjb250cm9sbGVyCisgKiBmaWVsZCBuZWVkcyB0byBiZSBwdXQoKSBhZnRlciB1c2UKKyAqLworI2RlZmluZSBPRl9NQVhfSVJRX1NQRUMJCTQgLyogV2UgaGFuZGxlIHNwZWNpZmllcnMgb2YgYXQgbW9zdCA0IGNlbGxzICovCitzdHJ1Y3Qgb2ZfaXJxIHsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbnRyb2xsZXI7IC8qIEludGVycnVwdCBjb250cm9sbGVyIG5vZGUgKi8KKwl1MzIgc2l6ZTsgLyogU3BlY2lmaWVyIHNpemUgKi8KKwl1MzIgc3BlY2lmaWVyW09GX01BWF9JUlFfU1BFQ107IC8qIFNwZWNpZmllciBjb3B5ICovCit9OworCisvKgorICogV29ya2Fyb3VuZHMgb25seSBhcHBsaWVkIHRvIDMyYml0IHBvd2VybWFjIG1hY2hpbmVzCisgKi8KKyNkZWZpbmUgT0ZfSU1BUF9PTERXT1JMRF9NQUMJMHgwMDAwMDAwMQorI2RlZmluZSBPRl9JTUFQX05PX1BIQU5ETEUJMHgwMDAwMDAwMgorCisjaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpICYmIGRlZmluZWQoQ09ORklHX1BQQ19QTUFDKQorZXh0ZXJuIHVuc2lnbmVkIGludCBvZl9pcnFfd29ya2Fyb3VuZHM7CitleHRlcm4gc3RydWN0IGRldmljZV9ub2RlICpvZl9pcnFfZGZsdF9waWM7CitleHRlcm4gaW50IG9mX2lycV9tYXBfb2xkd29ybGQoc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2UsIGludCBpbmRleCwKKwkJCSAgICAgICBzdHJ1Y3Qgb2ZfaXJxICpvdXRfaXJxKTsKKyNlbHNlIC8qIENPTkZJR19QUEMzMiAmJiBDT05GSUdfUFBDX1BNQUMgKi8KKyNkZWZpbmUgb2ZfaXJxX3dvcmthcm91bmRzICgwKQorI2RlZmluZSBvZl9pcnFfZGZsdF9waWMgKE5VTEwpCitzdGF0aWMgaW5saW5lIGludCBvZl9pcnFfbWFwX29sZHdvcmxkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlLCBpbnQgaW5kZXgsCisJCQkJICAgICAgc3RydWN0IG9mX2lycSAqb3V0X2lycSkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKyNlbmRpZiAvKiBDT05GSUdfUFBDMzIgJiYgQ09ORklHX1BQQ19QTUFDICovCisKKworZXh0ZXJuIGludCBvZl9pcnFfbWFwX3JhdyhzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCwgY29uc3QgdTMyICppbnRzcGVjLAorCQkJICB1MzIgb2ludHNpemUsIGNvbnN0IHUzMiAqYWRkciwKKwkJCSAgc3RydWN0IG9mX2lycSAqb3V0X2lycSk7CitleHRlcm4gaW50IG9mX2lycV9tYXBfb25lKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlLCBpbnQgaW5kZXgsCisJCQkgIHN0cnVjdCBvZl9pcnEgKm91dF9pcnEpOworZXh0ZXJuIHVuc2lnbmVkIGludCBpcnFfY3JlYXRlX29mX21hcHBpbmcoc3RydWN0IGRldmljZV9ub2RlICpjb250cm9sbGVyLAorCQkJCQkgIGNvbnN0IHUzMiAqaW50c3BlYywKKwkJCQkJICB1bnNpZ25lZCBpbnQgaW50c2l6ZSk7CitleHRlcm4gaW50IG9mX2lycV90b19yZXNvdXJjZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgaW50IGluZGV4LAorCQkJICAgICAgc3RydWN0IHJlc291cmNlICpyKTsKKworI2VuZGlmIC8qIENPTkZJR19PRl9JUlEgKi8KKyNlbmRpZiAvKiBDT05GSUdfT0YgKi8KKyNlbmRpZiAvKiBfX09GX0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29mX3BsYXRmb3JtLmggYi9pbmNsdWRlL2xpbnV4L29mX3BsYXRmb3JtLmgKaW5kZXggMTY0M2QzNy4uNGU2ZDk4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9vZl9wbGF0Zm9ybS5oCisrKyBiL2luY2x1ZGUvbGludXgvb2ZfcGxhdGZvcm0uaApAQCAtMTcsMjkgKzE3LDI0IEBACiAjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KLQotLyoKLSAqIFRoZSBvZl9wbGF0Zm9ybV9idXNfdHlwZSBpcyBhIGJ1cyB0eXBlIHVzZWQgYnkgZHJpdmVycyB0aGF0IGRvIG5vdAotICogYXR0YWNoIHRvIGEgbWFjaW8gb3Igc2ltaWxhciBidXMgYnV0IHN0aWxsIHVzZSBPRiBwcm9iaW5nCi0gKiBtZWNoYW5pc20KLSAqLwotZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBvZl9wbGF0Zm9ybV9idXNfdHlwZTsKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogLyoKICAqIEFuIG9mX3BsYXRmb3JtX2RyaXZlciBkcml2ZXIgaXMgYXR0YWNoZWQgdG8gYSBiYXNpYyBvZl9kZXZpY2Ugb24KLSAqIHRoZSAicGxhdGZvcm0gYnVzIiAob2ZfcGxhdGZvcm1fYnVzX3R5cGUpLgorICogdGhlICJwbGF0Zm9ybSBidXMiIChwbGF0Zm9ybV9idXNfdHlwZSkuCiAgKi8KIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIKIHsKLQlpbnQJKCpwcm9iZSkoc3RydWN0IG9mX2RldmljZSogZGV2LAorCWludAkoKnByb2JlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlKiBkZXYsCiAJCQkgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpOwotCWludAkoKnJlbW92ZSkoc3RydWN0IG9mX2RldmljZSogZGV2KTsKKwlpbnQJKCpyZW1vdmUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqIGRldik7CiAKLQlpbnQJKCpzdXNwZW5kKShzdHJ1Y3Qgb2ZfZGV2aWNlKiBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7Ci0JaW50CSgqcmVzdW1lKShzdHJ1Y3Qgb2ZfZGV2aWNlKiBkZXYpOwotCWludAkoKnNodXRkb3duKShzdHJ1Y3Qgb2ZfZGV2aWNlKiBkZXYpOworCWludAkoKnN1c3BlbmQpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqIGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKKwlpbnQJKCpyZXN1bWUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqIGRldik7CisJaW50CSgqc2h1dGRvd24pKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqIGRldik7CiAKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlcglkcml2ZXI7CisJc3RydWN0IHBsYXRmb3JtX2RyaXZlcglwbGF0Zm9ybV9kcml2ZXI7CiB9OwogI2RlZmluZQl0b19vZl9wbGF0Zm9ybV9kcml2ZXIoZHJ2KSBcCiAJY29udGFpbmVyX29mKGRydixzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyLCBkcml2ZXIpCkBAIC00OSwyMCArNDQsMzAgQEAKIGV4dGVybiB2b2lkIG9mX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgKmRydik7CiAKIC8qIFBsYXRmb3JtIGRyaXZlcnMgcmVnaXN0ZXIvdW5yZWdpc3RlciAqLwotc3RhdGljIGlubGluZSBpbnQgb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgKmRydikKLXsKLQlyZXR1cm4gb2ZfcmVnaXN0ZXJfZHJpdmVyKGRydiwgJm9mX3BsYXRmb3JtX2J1c190eXBlKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcihzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyICpkcnYpCi17Ci0Jb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoZHJ2KTsKLX0KK2V4dGVybiBpbnQgb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgKmRydik7CitleHRlcm4gdm9pZCBvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcihzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyICpkcnYpOwogCi0jaW5jbHVkZSA8YXNtL29mX3BsYXRmb3JtLmg+Ci0KLWV4dGVybiBzdHJ1Y3Qgb2ZfZGV2aWNlICpvZl9maW5kX2RldmljZV9ieV9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldmljZV9hbGxvYyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCQkgY29uc3QgY2hhciAqYnVzX2lkLAorCQkJCQkgc3RydWN0IGRldmljZSAqcGFyZW50KTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9maW5kX2RldmljZV9ieV9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApOwogCiBleHRlcm4gaW50IG9mX2J1c190eXBlX2luaXQoc3RydWN0IGJ1c190eXBlICpidXMsIGNvbnN0IGNoYXIgKm5hbWUpOworCisjaWYgIWRlZmluZWQoQ09ORklHX1NQQVJDKSAvKiBTUEFSQyBoYXMgaXRzIG93biBkZXZpY2UgcmVnaXN0cmF0aW9uIG1ldGhvZCAqLworLyogUGxhdGZvcm0gZGV2aWNlcyBhbmQgYnVzc2VzIGNyZWF0aW9uICovCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCQkJICAgY29uc3QgY2hhciAqYnVzX2lkLAorCQkJCQkJICAgc3RydWN0IGRldmljZSAqcGFyZW50KTsKKworLyogcHNldWRvICJtYXRjaGVzIiB2YWx1ZSB0byBub3QgZG8gZGVlcCBwcm9iZSAqLworI2RlZmluZSBPRl9OT19ERUVQX1BST0JFICgoc3RydWN0IG9mX2RldmljZV9pZCAqKS0xKQorCitleHRlcm4gaW50IG9mX3BsYXRmb3JtX2J1c19wcm9iZShzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3QsCisJCQkJIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoZXMsCisJCQkJIHN0cnVjdCBkZXZpY2UgKnBhcmVudCk7CisjZW5kaWYgLyogIUNPTkZJR19TUEFSQyAqLworCiAjZW5kaWYgLyogQ09ORklHX09GX0RFVklDRSAqLwogCiAjZW5kaWYJLyogX0xJTlVYX09GX1BMQVRGT1JNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb2Zfc3BpLmggYi9pbmNsdWRlL2xpbnV4L29mX3NwaS5oCmluZGV4IDVmNzFlZTguLjllM2U3MGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvb2Zfc3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9vZl9zcGkuaApAQCAtOSwxMCArOSwxNSBAQAogI2lmbmRlZiBfX0xJTlVYX09GX1NQSV9ICiAjZGVmaW5lIF9fTElOVVhfT0ZfU1BJX0gKIAotI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogCi1leHRlcm4gdm9pZCBvZl9yZWdpc3Rlcl9zcGlfZGV2aWNlcyhzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyLAotCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTsKKyNpZiBkZWZpbmVkKENPTkZJR19PRl9TUEkpIHx8IGRlZmluZWQoQ09ORklHX09GX1NQSV9NT0RVTEUpCitleHRlcm4gdm9pZCBvZl9yZWdpc3Rlcl9zcGlfZGV2aWNlcyhzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb2ZfcmVnaXN0ZXJfc3BpX2RldmljZXMoc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcikKK3sKKwlyZXR1cm47Cit9CisjZW5kaWYgLyogQ09ORklHX09GX1NQSSAqLwogCiAjZW5kaWYgLyogX19MSU5VWF9PRl9TUEkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb21hcGZiLmggYi9pbmNsdWRlL2xpbnV4L29tYXBmYi5oCmluZGV4IDliZGQ5MTQuLjdlNGNkNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvb21hcGZiLmgKKysrIGIvaW5jbHVkZS9saW51eC9vbWFwZmIuaApAQCAtMjUzLDcgKzI1Myw3IEBACiAvKiBpbiBhcmNoL2FybS9wbGF0LW9tYXAvZmIuYyAqLwogZXh0ZXJuIHZvaWQgb21hcGZiX3NldF9wbGF0Zm9ybV9kYXRhKHN0cnVjdCBvbWFwZmJfcGxhdGZvcm1fZGF0YSAqZGF0YSk7CiBleHRlcm4gdm9pZCBvbWFwZmJfc2V0X2N0cmxfcGxhdGZvcm1fZGF0YSh2b2lkICpwZGF0YSk7Ci1leHRlcm4gdm9pZCBvbWFwZmJfcmVzZXJ2ZV9zZHJhbSh2b2lkKTsKK2V4dGVybiB2b2lkIG9tYXBmYl9yZXNlcnZlX3NkcmFtX21lbWJsb2NrKHZvaWQpOwogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWRhdGEuaCBiL2luY2x1ZGUvbGludXgvcGFkYXRhLmgKaW5kZXggOGQ4NDA2Mi4uYmRjZDFlOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWRhdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZGF0YS5oCkBAIC0yNSw2ICsyNSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CisKKyNkZWZpbmUgUEFEQVRBX0NQVV9TRVJJQUwgICAweDAxCisjZGVmaW5lIFBBREFUQV9DUFVfUEFSQUxMRUwgMHgwMgogCiAvKioKICAqIHN0cnVjdCBwYWRhdGFfcHJpdiAtICBFbWJlZGRlZCB0byB0aGUgdXNlcnMgZGF0YSBzdHJ1Y3R1cmUuCkBAIC01OSw3ICs2NCwyMCBAQAogfTsKIAogLyoqCi0gKiBzdHJ1Y3QgcGFkYXRhX3F1ZXVlIC0gVGhlIHBlcmNwdSBwYWRhdGEgcXVldWVzLgorKiBzdHJ1Y3QgcGFkYXRhX3NlcmlhbF9xdWV1ZSAtIFRoZSBwZXJjcHUgcGFkYXRhIHNlcmlhbCBxdWV1ZQorKgorKiBAc2VyaWFsOiBMaXN0IHRvIHdhaXQgZm9yIHNlcmlhbGl6YXRpb24gYWZ0ZXIgcmVvcmRlcmluZy4KKyogQHdvcms6IHdvcmsgc3RydWN0IGZvciBzZXJpYWxpemF0aW9uLgorKiBAcGQ6IEJhY2twb2ludGVyIHRvIHRoZSBpbnRlcm5hbCBjb250cm9sIHN0cnVjdHVyZS4KKyovCitzdHJ1Y3QgcGFkYXRhX3NlcmlhbF9xdWV1ZSB7CisgICAgICAgc3RydWN0IHBhZGF0YV9saXN0ICAgIHNlcmlhbDsKKyAgICAgICBzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgd29yazsKKyAgICAgICBzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQ7Cit9OworCisvKioKKyAqIHN0cnVjdCBwYWRhdGFfcGFyYWxsZWxfcXVldWUgLSBUaGUgcGVyY3B1IHBhZGF0YSBwYXJhbGxlbCBxdWV1ZQogICoKICAqIEBwYXJhbGxlbDogTGlzdCB0byB3YWl0IGZvciBwYXJhbGxlbGl6YXRpb24uCiAgKiBAcmVvcmRlcjogTGlzdCB0byB3YWl0IGZvciByZW9yZGVyaW5nIGFmdGVyIHBhcmFsbGVsIHByb2Nlc3NpbmcuCkBAIC02NywxOCArODUsMjggQEAKICAqIEBwd29yazogd29yayBzdHJ1Y3QgZm9yIHBhcmFsbGVsaXphdGlvbi4KICAqIEBzd29yazogd29yayBzdHJ1Y3QgZm9yIHNlcmlhbGl6YXRpb24uCiAgKiBAcGQ6IEJhY2twb2ludGVyIHRvIHRoZSBpbnRlcm5hbCBjb250cm9sIHN0cnVjdHVyZS4KKyAqIEB3b3JrOiB3b3JrIHN0cnVjdCBmb3IgcGFyYWxsZWxpemF0aW9uLgogICogQG51bV9vYmo6IE51bWJlciBvZiBvYmplY3RzIHRoYXQgYXJlIHByb2Nlc3NlZCBieSB0aGlzIGNwdS4KICAqIEBjcHVfaW5kZXg6IEluZGV4IG9mIHRoZSBjcHUuCiAgKi8KLXN0cnVjdCBwYWRhdGFfcXVldWUgewotCXN0cnVjdCBwYWRhdGFfbGlzdAlwYXJhbGxlbDsKLQlzdHJ1Y3QgcGFkYXRhX2xpc3QJcmVvcmRlcjsKLQlzdHJ1Y3QgcGFkYXRhX2xpc3QJc2VyaWFsOwotCXN0cnVjdCB3b3JrX3N0cnVjdAlwd29yazsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJc3dvcms7Ci0Jc3RydWN0IHBhcmFsbGVsX2RhdGEgICAgKnBkOwotCWF0b21pY190CQludW1fb2JqOwotCWludAkJCWNwdV9pbmRleDsKK3N0cnVjdCBwYWRhdGFfcGFyYWxsZWxfcXVldWUgeworICAgICAgIHN0cnVjdCBwYWRhdGFfbGlzdCAgICBwYXJhbGxlbDsKKyAgICAgICBzdHJ1Y3QgcGFkYXRhX2xpc3QgICAgcmVvcmRlcjsKKyAgICAgICBzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQ7CisgICAgICAgc3RydWN0IHdvcmtfc3RydWN0ICAgIHdvcms7CisgICAgICAgYXRvbWljX3QgICAgICAgICAgICAgIG51bV9vYmo7CisgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIGNwdV9pbmRleDsKK307CisKKy8qKgorICogc3RydWN0IHBhZGF0YV9jcHVtYXNrIC0gVGhlIGNwdW1hc2tzIGZvciB0aGUgcGFyYWxsZWwvc2VyaWFsIHdvcmtlcnMKKyAqCisgKiBAcGNwdTogY3B1bWFzayBmb3IgdGhlIHBhcmFsbGVsIHdvcmtlcnMuCisgKiBAY2JjcHU6IGNwdW1hc2sgZm9yIHRoZSBzZXJpYWwgKGNhbGxiYWNrKSB3b3JrZXJzLgorICovCitzdHJ1Y3QgcGFkYXRhX2NwdW1hc2sgeworCWNwdW1hc2tfdmFyX3QJcGNwdTsKKwljcHVtYXNrX3Zhcl90CWNiY3B1OwogfTsKIAogLyoqCkBAIC04NiwyNSArMTE0LDI5IEBACiAgKiB0aGF0IGRlcGVuZHMgb24gdGhlIGNwdW1hc2sgaW4gdXNlLgogICoKICAqIEBwaW5zdDogcGFkYXRhIGluc3RhbmNlLgotICogQHF1ZXVlOiBwZXJjcHUgcGFkYXRhIHF1ZXVlcy4KKyAqIEBwcXVldWU6IHBlcmNwdSBwYWRhdGEgcXVldWVzIHVzZWQgZm9yIHBhcmFsbGVsaXphdGlvbi4KKyAqIEBzcXVldWU6IHBlcmNwdSBwYWRhdGEgcXVldWVzIHVzZWQgZm9yIHNlcmlhbHV6YXRpb24uCiAgKiBAc2VxX25yOiBUaGUgc2VxdWVuY2UgbnVtYmVyIHRoYXQgd2lsbCBiZSBhdHRhY2hlZCB0byB0aGUgbmV4dCBvYmplY3QuCiAgKiBAcmVvcmRlcl9vYmplY3RzOiBOdW1iZXIgb2Ygb2JqZWN0cyB3YWl0aW5nIGluIHRoZSByZW9yZGVyIHF1ZXVlcy4KICAqIEByZWZjbnQ6IE51bWJlciBvZiBvYmplY3RzIGhvbGRpbmcgYSByZWZlcmVuY2Ugb24gdGhpcyBwYXJhbGxlbF9kYXRhLgogICogQG1heF9zZXFfbnI6ICBNYXhpbWFsIHVzZWQgc2VxdWVuY2UgbnVtYmVyLgotICogQGNwdW1hc2s6IGNwdW1hc2sgaW4gdXNlLgorICogQGNwdW1hc2s6IFRoZSBjcHVtYXNrcyBpbiB1c2UgZm9yIHBhcmFsbGVsIGFuZCBzZXJpYWwgd29ya2Vycy4KICAqIEBsb2NrOiBSZW9yZGVyIGxvY2suCisgKiBAcHJvY2Vzc2VkOiBOdW1iZXIgb2YgYWxyZWFkeSBwcm9jZXNzZWQgb2JqZWN0cy4KICAqIEB0aW1lcjogUmVvcmRlciB0aW1lci4KICAqLwogc3RydWN0IHBhcmFsbGVsX2RhdGEgewotCXN0cnVjdCBwYWRhdGFfaW5zdGFuY2UJKnBpbnN0OwotCXN0cnVjdCBwYWRhdGFfcXVldWUJKnF1ZXVlOwotCWF0b21pY190CQlzZXFfbnI7Ci0JYXRvbWljX3QJCXJlb3JkZXJfb2JqZWN0czsKLQlhdG9taWNfdCAgICAgICAgICAgICAgICByZWZjbnQ7Ci0JdW5zaWduZWQgaW50CQltYXhfc2VxX25yOwotCWNwdW1hc2tfdmFyX3QJCWNwdW1hc2s7Ci0Jc3BpbmxvY2tfdCAgICAgICAgICAgICAgbG9jazsKLQlzdHJ1Y3QgdGltZXJfbGlzdCAgICAgICB0aW1lcjsKKwlzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlCQkqcGluc3Q7CisJc3RydWN0IHBhZGF0YV9wYXJhbGxlbF9xdWV1ZQkqcHF1ZXVlOworCXN0cnVjdCBwYWRhdGFfc2VyaWFsX3F1ZXVlCSpzcXVldWU7CisJYXRvbWljX3QJCQlzZXFfbnI7CisJYXRvbWljX3QJCQlyZW9yZGVyX29iamVjdHM7CisJYXRvbWljX3QJCQlyZWZjbnQ7CisJdW5zaWduZWQgaW50CQkJbWF4X3NlcV9ucjsKKwlzdHJ1Y3QgcGFkYXRhX2NwdW1hc2sJCWNwdW1hc2s7CisJc3BpbmxvY2tfdCAgICAgICAgICAgICAgICAgICAgICBsb2NrIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKwl1bnNpZ25lZCBpbnQJCQlwcm9jZXNzZWQ7CisJc3RydWN0IHRpbWVyX2xpc3QJCXRpbWVyOwogfTsKIAogLyoqCkBAIC0xMTMsMzEgKzE0NSw0OCBAQAogICogQGNwdV9ub3RpZmllcjogY3B1IGhvdHBsdWcgbm90aWZpZXIuCiAgKiBAd3E6IFRoZSB3b3JrcXVldWUgaW4gdXNlLgogICogQHBkOiBUaGUgaW50ZXJuYWwgY29udHJvbCBzdHJ1Y3R1cmUuCi0gKiBAY3B1bWFzazogVXNlciBzdXBwbGllZCBjcHVtYXNrLgorICogQGNwdW1hc2s6IFVzZXIgc3VwcGxpZWQgY3B1bWFza3MgZm9yIHBhcmFsbGVsIGFuZCBzZXJpYWwgd29ya3MuCisgKiBAY3B1bWFza19jaGFuZ2Vfbm90aWZpZXI6IE5vdGlmaWVycyBjaGFpbiBmb3IgdXNlci1kZWZpbmVkIG5vdGlmeQorICogICAgICAgICAgICBjYWxsYmFja3MgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIGVpdGhlciBAcGNwdSBvciBAY2JjcHUKKyAqICAgICAgICAgICAgb3IgYm90aCBjcHVtYXNrcyBjaGFuZ2UuCisgKiBAa29iajogcGFkYXRhIGluc3RhbmNlIGtlcm5lbCBvYmplY3QuCiAgKiBAbG9jazogcGFkYXRhIGluc3RhbmNlIGxvY2suCiAgKiBAZmxhZ3M6IHBhZGF0YSBmbGFncy4KICAqLwogc3RydWN0IHBhZGF0YV9pbnN0YW5jZSB7Ci0Jc3RydWN0IG5vdGlmaWVyX2Jsb2NrICAgY3B1X25vdGlmaWVyOwotCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKLQlzdHJ1Y3QgcGFyYWxsZWxfZGF0YQkqcGQ7Ci0JY3B1bWFza192YXJfdCAgICAgICAgICAgY3B1bWFzazsKLQlzdHJ1Y3QgbXV0ZXgJCWxvY2s7Ci0JdTgJCQlmbGFnczsKLSNkZWZpbmUJUEFEQVRBX0lOSVQJCTEKLSNkZWZpbmUJUEFEQVRBX1JFU0VUCQkyCisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrCQkgY3B1X25vdGlmaWVyOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CQkqd3E7CisJc3RydWN0IHBhcmFsbGVsX2RhdGEJCSpwZDsKKwlzdHJ1Y3QgcGFkYXRhX2NwdW1hc2sJCWNwdW1hc2s7CisJc3RydWN0IGJsb2NraW5nX25vdGlmaWVyX2hlYWQJIGNwdW1hc2tfY2hhbmdlX25vdGlmaWVyOworCXN0cnVjdCBrb2JqZWN0ICAgICAgICAgICAgICAgICAgIGtvYmo7CisJc3RydWN0IG11dGV4CQkJIGxvY2s7CisJdTgJCQkJIGZsYWdzOworI2RlZmluZQlQQURBVEFfSU5JVAkxCisjZGVmaW5lCVBBREFUQV9SRVNFVAkyCisjZGVmaW5lCVBBREFUQV9JTlZBTElECTQKIH07CiAKLWV4dGVybiBzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwYWRhdGFfYWxsb2MoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCi0JCQkJCSAgICBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EpOworZXh0ZXJuIHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBhZGF0YV9hbGxvY19wb3NzaWJsZSgKKwkJCQkJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxKTsKK2V4dGVybiBzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwYWRhdGFfYWxsb2Moc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxLAorCQkJCQkgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKnBjcHVtYXNrLAorCQkJCQkgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNiY3B1bWFzayk7CiBleHRlcm4gdm9pZCBwYWRhdGFfZnJlZShzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCk7CiBleHRlcm4gaW50IHBhZGF0YV9kb19wYXJhbGxlbChzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwKIAkJCSAgICAgIHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhLCBpbnQgY2JfY3B1KTsKIGV4dGVybiB2b2lkIHBhZGF0YV9kb19zZXJpYWwoc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEpOwotZXh0ZXJuIGludCBwYWRhdGFfc2V0X2NwdW1hc2soc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsCitleHRlcm4gaW50IHBhZGF0YV9zZXRfY3B1bWFzayhzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwgaW50IGNwdW1hc2tfdHlwZSwKIAkJCSAgICAgIGNwdW1hc2tfdmFyX3QgY3B1bWFzayk7Ci1leHRlcm4gaW50IHBhZGF0YV9hZGRfY3B1KHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LCBpbnQgY3B1KTsKLWV4dGVybiBpbnQgcGFkYXRhX3JlbW92ZV9jcHUoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsIGludCBjcHUpOwotZXh0ZXJuIHZvaWQgcGFkYXRhX3N0YXJ0KHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KTsKK2V4dGVybiBpbnQgcGFkYXRhX3NldF9jcHVtYXNrcyhzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwKKwkJCSAgICAgICBjcHVtYXNrX3Zhcl90IHBjcHVtYXNrLAorCQkJICAgICAgIGNwdW1hc2tfdmFyX3QgY2JjcHVtYXNrKTsKK2V4dGVybiBpbnQgcGFkYXRhX2FkZF9jcHUoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsIGludCBjcHUsIGludCBtYXNrKTsKK2V4dGVybiBpbnQgcGFkYXRhX3JlbW92ZV9jcHUoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsIGludCBjcHUsIGludCBtYXNrKTsKK2V4dGVybiBpbnQgcGFkYXRhX3N0YXJ0KHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KTsKIGV4dGVybiB2b2lkIHBhZGF0YV9zdG9wKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KTsKK2V4dGVybiBpbnQgcGFkYXRhX3JlZ2lzdGVyX2NwdW1hc2tfbm90aWZpZXIoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsCisJCQkJCSAgICBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5ibG9jayk7CitleHRlcm4gaW50IHBhZGF0YV91bnJlZ2lzdGVyX2NwdW1hc2tfbm90aWZpZXIoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsCisJCQkJCSAgICAgIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmJsb2NrKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAppbmRleCA1YjU5ZjM1Li42ZmEzMTc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaApAQCAtMTI4LDcgKzEyOCw2IEBACiAKIAkvKiBTTFVCICovCiAJUEdfc2x1Yl9mcm96ZW4gPSBQR19hY3RpdmUsCi0JUEdfc2x1Yl9kZWJ1ZyA9IFBHX2Vycm9yLAogfTsKIAogI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0gKQEAgLTIxNSw3ICsyMTQsNiBAQAogX19QQUdFRkxBRyhTbG9iRnJlZSwgc2xvYl9mcmVlKQogCiBfX1BBR0VGTEFHKFNsdWJGcm96ZW4sIHNsdWJfZnJvemVuKQotX19QQUdFRkxBRyhTbHViRGVidWcsIHNsdWJfZGVidWcpCiAKIC8qCiAgKiBQcml2YXRlIHBhZ2UgbWFya2luZ3MgdGhhdCBtYXkgYmUgdXNlZCBieSB0aGUgZmlsZXN5c3RlbSB0aGF0IG93bnMgdGhlIHBhZ2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oCmluZGV4IDdjYjAwODQuLmIxZDE3OTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaApAQCAtMjcwLDYgKzI3MCw4IEBACiAJdW5zaWduZWQgaW50CWQxX3N1cHBvcnQ6MTsJLyogTG93IHBvd2VyIHN0YXRlIEQxIGlzIHN1cHBvcnRlZCAqLwogCXVuc2lnbmVkIGludAlkMl9zdXBwb3J0OjE7CS8qIExvdyBwb3dlciBzdGF0ZSBEMiBpcyBzdXBwb3J0ZWQgKi8KIAl1bnNpZ25lZCBpbnQJbm9fZDFkMjoxOwkvKiBPbmx5IGFsbG93IEQwIGFuZCBEMyAqLworCXVuc2lnbmVkIGludAltbWlvX2Fsd2F5c19vbjoxOwkvKiBkaXNhbGxvdyB0dXJuaW5nIG9mZiBpby9tZW0KKwkJCQkJCSAgIGRlY29kaW5nIGR1cmluZyBiYXIgc2l6aW5nICovCiAJdW5zaWduZWQgaW50CXdha2V1cF9wcmVwYXJlZDoxOwogCXVuc2lnbmVkIGludAlkM19kZWxheTsJLyogRDMtPkQwIHRyYW5zaXRpb24gdGltZSBpbiBtcyAqLwogCkBAIC0yODgsNiArMjkwLDcgQEAKIAkgKi8KIAl1bnNpZ25lZCBpbnQJaXJxOwogCXN0cnVjdCByZXNvdXJjZSByZXNvdXJjZVtERVZJQ0VfQ09VTlRfUkVTT1VSQ0VdOyAvKiBJL08gYW5kIG1lbW9yeSByZWdpb25zICsgZXhwYW5zaW9uIFJPTXMgKi8KKwlyZXNvdXJjZV9zaXplX3QJZndfYWRkcltERVZJQ0VfQ09VTlRfUkVTT1VSQ0VdOyAvKiBGVy1hc3NpZ25lZCBhZGRyICovCiAKIAkvKiBUaGVzZSBmaWVsZHMgYXJlIHVzZWQgYnkgY29tbW9uIGZpeHVwcyAqLwogCXVuc2lnbmVkIGludAl0cmFuc3BhcmVudDoxOwkvKiBUcmFuc3BhcmVudCBQQ0kgYnJpZGdlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IDNiZWRjYzEuLmM4MWVlYzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC0xNDk0LDYgKzE0OTQsOSBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NCRV9XQU5YTDEwMAkweDAzMDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TQkVfV0FOWEwyMDAJMHgwMzAyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0JFX1dBTlhMNDAwCTB4MDEwNAorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX1NCRV9UM0UzCTB4MDAwOQorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX1NCRV8yVDNFM19QMAkweDA5MDEKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9TQkVfMlQzRTNfUDEJMHgwOTAyCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UT1NISUJBCQkweDExNzkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9UT1NISUJBX1BJQ0NPTE9fMQkweDAxMDEKQEAgLTIwNTQsNyArMjA1Nyw2IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlgyXzU3NzExRQkweDE2NTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwNQkweDE2NTMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwNV8yCTB4MTY1NAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzIwCTB4MTY1OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzIxCTB4MTY1OQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzIyCTB4MTY1YQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzIzCTB4MTY1YgpAQCAtMjA2OCwxMyArMjA3MCwxMSBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzU0TQkweDE2NzIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1NU0JMHgxNjczCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTYJMHgxNjc0Ci0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTAJMHgxNjc2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTEJMHgxNjc3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MTUJMHgxNjc4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MTVTCTB4MTY3OQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzU0CTB4MTY3YQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzU1CTB4MTY3YgotI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzUwTQkweDE2N2MKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1MU0JMHgxNjdkCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTFGCTB4MTY3ZQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181Nzg3RgkweDE2N2YKQEAgLTIyNjQsNiArMjI2NCw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVERJX0VIQ0kgICAgICAgICAgMHgwMTAxCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9GUkVFU0NBTEUJCTB4MTk1NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01QQzgzMDgJCTB4YzAwNgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01QQzgzMTVFCQkweDAwYjQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NUEM4MzE1CQkweDAwYjUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NUEM4MzE0RQkJMHgwMGI2CkBAIC0yMzI0LDkgKzIzMjUsMTEgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2MQkweDIzNjEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2MgkweDIzNjIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2MwkweDIzNjMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2NAkweDIzNjQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2NQkweDIzNjUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2NgkweDIzNjYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2OAkweDIzNjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2OQkweDIzNjkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM4WF9TRAkweDIzODEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM4WF9NTUMgMHgyMzgyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzOFhfTVMJMHgyMzgzCkBAIC0yNzcyLDMgKzI3NzUsNiBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJMzIJMHg5ODk2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0kzMl9QUk8JMHg5ODk3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0kzMl84CTB4OTg5OAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfWEVOCQkweDU4NTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9YRU5fUExBVEZPUk0JMHgwMDAxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oIGIvaW5jbHVkZS9saW51eC9wZXJjcHUuaAppbmRleCBkM2EzOGQ2Li5iOGI5MDg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyY3B1LmgKQEAgLTQ1LDYgKzQ1LDE2IEBACiAjZGVmaW5lIFBDUFVfTUlOX1VOSVRfU0laRQkJUEZOX0FMSUdOKDY0IDw8IDEwKQogCiAvKgorICogUGVyY3B1IGFsbG9jYXRvciBjYW4gc2VydmUgcGVyY3B1IGFsbG9jYXRpb25zIGJlZm9yZSBzbGFiIGlzCisgKiBpbml0aWFsaXplZCB3aGljaCBhbGxvd3Mgc2xhYiB0byBkZXBlbmQgb24gdGhlIHBlcmNwdSBhbGxvY2F0b3IuCisgKiBUaGUgZm9sbG93aW5nIHR3byBwYXJhbWV0ZXJzIGRlY2lkZSBob3cgbXVjaCByZXNvdXJjZSB0bworICogcHJlYWxsb2NhdGUgZm9yIHRoaXMuICBLZWVwIFBFUkNQVV9EWU5BTUlDX1JFU0VSVkUgZXF1YWwgdG8gb3IKKyAqIGxhcmdlciB0aGFuIFBFUkNQVV9EWU5BTUlDX0VBUkxZX1NJWkUuCisgKi8KKyNkZWZpbmUgUEVSQ1BVX0RZTkFNSUNfRUFSTFlfU0xPVFMJMTI4CisjZGVmaW5lIFBFUkNQVV9EWU5BTUlDX0VBUkxZX1NJWkUJKDEyIDw8IDEwKQorCisvKgogICogUEVSQ1BVX0RZTkFNSUNfUkVTRVJWRSBpbmRpY2F0ZXMgdGhlIGFtb3VudCBvZiBmcmVlIGFyZWEgdG8gcGlnZ3kKICAqIGJhY2sgb24gdGhlIGZpcnN0IGNodW5rIGZvciBkeW5hbWljIHBlcmNwdSBhbGxvY2F0aW9uIGlmIGFyY2ggaXMKICAqIG1hbnVhbGx5IGFsbG9jYXRpbmcgYW5kIG1hcHBpbmcgaXQgZm9yIGZhc3RlciBhY2Nlc3MgKGFzIGEgcGFydCBvZgpAQCAtMTA0LDE2ICsxMTQsMTEgQEAKIAkJCQkJCQkgICAgIGludCBucl91bml0cyk7CiBleHRlcm4gdm9pZCBfX2luaXQgcGNwdV9mcmVlX2FsbG9jX2luZm8oc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqYWkpOwogCi1leHRlcm4gc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqIF9faW5pdCBwY3B1X2J1aWxkX2FsbG9jX2luZm8oCi0JCQkJc2l6ZV90IHJlc2VydmVkX3NpemUsIHNzaXplX3QgZHluX3NpemUsCi0JCQkJc2l6ZV90IGF0b21fc2l6ZSwKLQkJCQlwY3B1X2ZjX2NwdV9kaXN0YW5jZV9mbl90IGNwdV9kaXN0YW5jZV9mbik7Ci0KIGV4dGVybiBpbnQgX19pbml0IHBjcHVfc2V0dXBfZmlyc3RfY2h1bmsoY29uc3Qgc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqYWksCiAJCQkJCSB2b2lkICpiYXNlX2FkZHIpOwogCiAjaWZkZWYgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSwotZXh0ZXJuIGludCBfX2luaXQgcGNwdV9lbWJlZF9maXJzdF9jaHVuayhzaXplX3QgcmVzZXJ2ZWRfc2l6ZSwgc3NpemVfdCBkeW5fc2l6ZSwKK2V4dGVybiBpbnQgX19pbml0IHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHNpemVfdCBkeW5fc2l6ZSwKIAkJCQlzaXplX3QgYXRvbV9zaXplLAogCQkJCXBjcHVfZmNfY3B1X2Rpc3RhbmNlX2ZuX3QgY3B1X2Rpc3RhbmNlX2ZuLAogCQkJCXBjcHVfZmNfYWxsb2NfZm5fdCBhbGxvY19mbiwKQEAgLTE0MCw2ICsxNDUsNyBAQAogI2lmbmRlZiBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEKIGV4dGVybiB2b2lkIF9faW5pdCBzZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpOwogI2VuZGlmCitleHRlcm4gdm9pZCBfX2luaXQgcGVyY3B1X2luaXRfbGF0ZSh2b2lkKTsKIAogI2Vsc2UgLyogQ09ORklHX1NNUCAqLwogCkBAIC0xNTMsNiArMTU5LDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBzZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpIHsgfQogCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHBlcmNwdV9pbml0X2xhdGUodm9pZCkgeyB9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCAqcGNwdV9scGFnZV9yZW1hcHBlZCh2b2lkICprYWRkcikKIHsKIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oIGIvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKaW5kZXggNWQwMjY2ZC4uNzE2Zjk5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKKysrIGIvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKQEAgLTIxNCw4ICsyMTQsOSBAQAogCQkJCSAqICBTZWUgYWxzbyBQRVJGX1JFQ09SRF9NSVNDX0VYQUNUX0lQCiAJCQkJICovCiAJCQkJcHJlY2lzZV9pcCAgICAgOiAgMiwgLyogc2tpZCBjb25zdHJhaW50ICAgICAgICovCisJCQkJbW1hcF9kYXRhICAgICAgOiAgMSwgLyogbm9uLWV4ZWMgbW1hcCBkYXRhICAgICovCiAKLQkJCQlfX3Jlc2VydmVkXzEgICA6IDQ3OworCQkJCV9fcmVzZXJ2ZWRfMSAgIDogNDY7CiAKIAl1bmlvbiB7CiAJCV9fdTMyCQl3YWtldXBfZXZlbnRzOwkgIC8qIHdha2V1cCBldmVyeSBuIGV2ZW50cyAqLwpAQCAtNDYxLDYgKzQ2Miw3IEBACiAKICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKICMgaW5jbHVkZSA8YXNtL3BlcmZfZXZlbnQuaD4KKyMgaW5jbHVkZSA8YXNtL2xvY2FsNjQuaD4KICNlbmRpZgogCiBzdHJ1Y3QgcGVyZl9ndWVzdF9pbmZvX2NhbGxiYWNrcyB7CkBAIC01MzEsMTQgKzUzMywxNiBAQAogCQkJc3RydWN0IGhydGltZXIJaHJ0aW1lcjsKIAkJfTsKICNpZmRlZiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UCi0JCS8qIGJyZWFrcG9pbnQgKi8KLQkJc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludAlpbmZvOworCQlzdHJ1Y3QgeyAvKiBicmVha3BvaW50ICovCisJCQlzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50CWluZm87CisJCQlzdHJ1Y3QgbGlzdF9oZWFkCQlicF9saXN0OworCQl9OwogI2VuZGlmCiAJfTsKLQlhdG9taWM2NF90CQkJcHJldl9jb3VudDsKKwlsb2NhbDY0X3QJCQlwcmV2X2NvdW50OwogCXU2NAkJCQlzYW1wbGVfcGVyaW9kOwogCXU2NAkJCQlsYXN0X3BlcmlvZDsKLQlhdG9taWM2NF90CQkJcGVyaW9kX2xlZnQ7CisJbG9jYWw2NF90CQkJcGVyaW9kX2xlZnQ7CiAJdTY0CQkJCWludGVycnVwdHM7CiAKIAl1NjQJCQkJZnJlcV90aW1lX3N0YW1wOwpAQCAtNTQ4LDcgKzU1MiwxMCBAQAogCiBzdHJ1Y3QgcGVyZl9ldmVudDsKIAotI2RlZmluZSBQRVJGX0VWRU5UX1RYTl9TVEFSVEVEIDEKKy8qCisgKiBDb21tb24gaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mIHBtdTo6e3N0YXJ0LGNvbW1pdCxjYW5jZWx9X3R4bgorICovCisjZGVmaW5lIFBFUkZfRVZFTlRfVFhOIDB4MQogCiAvKioKICAqIHN0cnVjdCBwbXUgLSBnZW5lcmljIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdApAQCAtNTYyLDE0ICs1NjksMjggQEAKIAl2b2lkICgqdW50aHJvdHRsZSkJCShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOwogCiAJLyoKLQkgKiBncm91cCBldmVudHMgc2NoZWR1bGluZyBpcyB0cmVhdGVkIGFzIGEgdHJhbnNhY3Rpb24sCi0JICogYWRkIGdyb3VwIGV2ZW50cyBhcyBhIHdob2xlIGFuZCBwZXJmb3JtIG9uZSBzY2hlZHVsYWJpbGl0eSB0ZXN0LgotCSAqIElmIHRlc3QgZmFpbHMsIHJvbGwgYmFjayB0aGUgd2hvbGUgZ3JvdXAKKwkgKiBHcm91cCBldmVudHMgc2NoZWR1bGluZyBpcyB0cmVhdGVkIGFzIGEgdHJhbnNhY3Rpb24sIGFkZCBncm91cAorCSAqIGV2ZW50cyBhcyBhIHdob2xlIGFuZCBwZXJmb3JtIG9uZSBzY2hlZHVsYWJpbGl0eSB0ZXN0LiBJZiB0aGUgdGVzdAorCSAqIGZhaWxzLCByb2xsIGJhY2sgdGhlIHdob2xlIGdyb3VwCiAJICovCiAKKwkvKgorCSAqIFN0YXJ0IHRoZSB0cmFuc2FjdGlvbiwgYWZ0ZXIgdGhpcyAtPmVuYWJsZSgpIGRvZXNuJ3QgbmVlZAorCSAqIHRvIGRvIHNjaGVkdWxhYmlsaXR5IHRlc3RzLgorCSAqLwogCXZvaWQgKCpzdGFydF90eG4pCShjb25zdCBzdHJ1Y3QgcG11ICpwbXUpOwotCXZvaWQgKCpjYW5jZWxfdHhuKQkoY29uc3Qgc3RydWN0IHBtdSAqcG11KTsKKwkvKgorCSAqIElmIC0+c3RhcnRfdHhuKCkgZGlzYWJsZWQgdGhlIC0+ZW5hYmxlKCkgc2NoZWR1bGFiaWxpdHkgdGVzdAorCSAqIHRoZW4gLT5jb21taXRfdHhuKCkgaXMgcmVxdWlyZWQgdG8gcGVyZm9ybSBvbmUuIE9uIHN1Y2Nlc3MKKwkgKiB0aGUgdHJhbnNhY3Rpb24gaXMgY2xvc2VkLiBPbiBlcnJvciB0aGUgdHJhbnNhY3Rpb24gaXMga2VwdAorCSAqIG9wZW4gdW50aWwgLT5jYW5jZWxfdHhuKCkgaXMgY2FsbGVkLgorCSAqLwogCWludCAgKCpjb21taXRfdHhuKQkoY29uc3Qgc3RydWN0IHBtdSAqcG11KTsKKwkvKgorCSAqIFdpbGwgY2FuY2VsIHRoZSB0cmFuc2FjdGlvbiwgYXNzdW1lcyAtPmRpc2FibGUoKSBpcyBjYWxsZWQgZm9yCisJICogZWFjaCBzdWNjZXNzZnVsbCAtPmVuYWJsZSgpIGR1cmluZyB0aGUgdHJhbnNhY3Rpb24uCisJICovCisJdm9pZCAoKmNhbmNlbF90eG4pCShjb25zdCBzdHJ1Y3QgcG11ICpwbXUpOwogfTsKIAogLyoqCkBAIC01ODQsNyArNjA1LDkgQEAKIAogc3RydWN0IGZpbGU7CiAKLXN0cnVjdCBwZXJmX21tYXBfZGF0YSB7CisjZGVmaW5lIFBFUkZfQlVGRkVSX1dSSVRBQkxFCQkweDAxCisKK3N0cnVjdCBwZXJmX2J1ZmZlciB7CiAJYXRvbWljX3QJCQlyZWZjb3VudDsKIAlzdHJ1Y3QgcmN1X2hlYWQJCQlyY3VfaGVhZDsKICNpZmRlZiBDT05GSUdfUEVSRl9VU0VfVk1BTExPQwpAQCAtNjUwLDcgKzY3Myw4IEBACiAKIAllbnVtIHBlcmZfZXZlbnRfYWN0aXZlX3N0YXRlCXN0YXRlOwogCXVuc2lnbmVkIGludAkJCWF0dGFjaF9zdGF0ZTsKLQlhdG9taWM2NF90CQkJY291bnQ7CisJbG9jYWw2NF90CQkJY291bnQ7CisJYXRvbWljNjRfdAkJCWNoaWxkX2NvdW50OwogCiAJLyoKIAkgKiBUaGVzZSBhcmUgdGhlIHRvdGFsIHRpbWUgaW4gbmFub3NlY29uZHMgdGhhdCB0aGUgZXZlbnQKQEAgLTcwOSw3ICs3MzMsNyBAQAogCWF0b21pY190CQkJbW1hcF9jb3VudDsKIAlpbnQJCQkJbW1hcF9sb2NrZWQ7CiAJc3RydWN0IHVzZXJfc3RydWN0CQkqbW1hcF91c2VyOwotCXN0cnVjdCBwZXJmX21tYXBfZGF0YQkJKmRhdGE7CisJc3RydWN0IHBlcmZfYnVmZmVyCQkqYnVmZmVyOwogCiAJLyogcG9sbCByZWxhdGVkICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QJCXdhaXRxOwpAQCAtODA3LDcgKzgzMSw3IEBACiAKIHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgewogCXN0cnVjdCBwZXJmX2V2ZW50CQkqZXZlbnQ7Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhCQkqZGF0YTsKKwlzdHJ1Y3QgcGVyZl9idWZmZXIJCSpidWZmZXI7CiAJdW5zaWduZWQgbG9uZwkJCXdha2V1cDsKIAl1bnNpZ25lZCBsb25nCQkJc2l6ZTsKIAl2b2lkCQkJCSphZGRyOwpAQCAtOTEwLDggKzkzNCwxMCBAQAogCiBleHRlcm4gdm9pZCBfX3BlcmZfc3dfZXZlbnQodTMyLCB1NjQsIGludCwgc3RydWN0IHB0X3JlZ3MgKiwgdTY0KTsKIAotZXh0ZXJuIHZvaWQKLXBlcmZfYXJjaF9mZXRjaF9jYWxsZXJfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBpcCwgaW50IHNraXApOworI2lmbmRlZiBwZXJmX2FyY2hfZmV0Y2hfY2FsbGVyX3JlZ3MKK3N0YXRpYyBpbmxpbmUgdm9pZAorcGVyZl9hcmNoX2ZldGNoX2NhbGxlcl9yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGlwKSB7IH0KKyNlbmRpZgogCiAvKgogICogVGFrZSBhIHNuYXBzaG90IG9mIHRoZSByZWdzLiBTa2lwIGlwIGFuZCBmcmFtZSBwb2ludGVyIHRvCkBAIC05MjEsMzEgKzk0NywxMSBAQAogICogLSBicCBmb3IgY2FsbGNoYWlucwogICogLSBlZmxhZ3MsIGZvciBmdXR1cmUgcHVycG9zZXMsIGp1c3QgaW4gY2FzZQogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9mZXRjaF9jYWxsZXJfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNraXApCitzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9mZXRjaF9jYWxsZXJfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQl1bnNpZ25lZCBsb25nIGlwOwotCiAJbWVtc2V0KHJlZ3MsIDAsIHNpemVvZigqcmVncykpOwogCi0Jc3dpdGNoIChza2lwKSB7Ci0JY2FzZSAxIDoKLQkJaXAgPSBDQUxMRVJfQUREUjA7Ci0JCWJyZWFrOwotCWNhc2UgMiA6Ci0JCWlwID0gQ0FMTEVSX0FERFIxOwotCQlicmVhazsKLQljYXNlIDMgOgotCQlpcCA9IENBTExFUl9BRERSMjsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCQlpcCA9IENBTExFUl9BRERSMzsKLQkJYnJlYWs7Ci0JLyogTm8gbmVlZCB0byBzdXBwb3J0IGZ1cnRoZXIgZm9yIG5vdyAqLwotCWRlZmF1bHQ6Ci0JCWlwID0gMDsKLQl9Ci0KLQlyZXR1cm4gcGVyZl9hcmNoX2ZldGNoX2NhbGxlcl9yZWdzKHJlZ3MsIGlwLCBza2lwKTsKKwlwZXJmX2FyY2hfZmV0Y2hfY2FsbGVyX3JlZ3MocmVncywgQ0FMTEVSX0FERFIwKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCkBAIC05NTUsMjEgKzk2MSwxNCBAQAogCQlzdHJ1Y3QgcHRfcmVncyBob3RfcmVnczsKIAogCQlpZiAoIXJlZ3MpIHsKLQkJCXBlcmZfZmV0Y2hfY2FsbGVyX3JlZ3MoJmhvdF9yZWdzLCAxKTsKKwkJCXBlcmZfZmV0Y2hfY2FsbGVyX3JlZ3MoJmhvdF9yZWdzKTsKIAkJCXJlZ3MgPSAmaG90X3JlZ3M7CiAJCX0KIAkJX19wZXJmX3N3X2V2ZW50KGV2ZW50X2lkLCBuciwgbm1pLCByZWdzLCBhZGRyKTsKIAl9CiB9CiAKLWV4dGVybiB2b2lkIF9fcGVyZl9ldmVudF9tbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKLQotc3RhdGljIGlubGluZSB2b2lkIHBlcmZfZXZlbnRfbW1hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpCi0JCV9fcGVyZl9ldmVudF9tbWFwKHZtYSk7Ci19Ci0KK2V4dGVybiB2b2lkIHBlcmZfZXZlbnRfbW1hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiBleHRlcm4gc3RydWN0IHBlcmZfZ3Vlc3RfaW5mb19jYWxsYmFja3MgKnBlcmZfZ3Vlc3RfY2JzOwogZXh0ZXJuIGludCBwZXJmX3JlZ2lzdGVyX2d1ZXN0X2luZm9fY2FsbGJhY2tzKHN0cnVjdCBwZXJmX2d1ZXN0X2luZm9fY2FsbGJhY2tzICpjYWxsYmFja3MpOwogZXh0ZXJuIGludCBwZXJmX3VucmVnaXN0ZXJfZ3Vlc3RfaW5mb19jYWxsYmFja3Moc3RydWN0IHBlcmZfZ3Vlc3RfaW5mb19jYWxsYmFja3MgKmNhbGxiYWNrcyk7CkBAIC0xMDAxLDcgKzEwMDAsNyBAQAogZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgcGVyZl90cF9ldmVudCh1NjQgYWRkciwgdTY0IGNvdW50LCB2b2lkICpyZWNvcmQsCiAJCQkgIGludCBlbnRyeV9zaXplLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJCSAgc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQpOworCQkJICBzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCwgaW50IHJjdHgpOwogZXh0ZXJuIHZvaWQgcGVyZl9icF9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHZvaWQgKmRhdGEpOwogCiAjaWZuZGVmIHBlcmZfbWlzY19mbGFncwpAQCAtMTA2OCw3ICsxMDY3LDcgQEAKICNkZWZpbmUgcGVyZl9jcHVfbm90aWZpZXIoZm4pCQkJCQlcCiBkbyB7CQkJCQkJCQlcCiAJc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBmbiMjX25iIF9fY3B1aW5pdGRhdGEgPQlcCi0JCXsgLm5vdGlmaWVyX2NhbGwgPSBmbiwgLnByaW9yaXR5ID0gMjAgfTsJXAorCQl7IC5ub3RpZmllcl9jYWxsID0gZm4sIC5wcmlvcml0eSA9IENQVV9QUklfUEVSRiB9OyBcCiAJZm4oJmZuIyNfbmIsICh1bnNpZ25lZCBsb25nKUNQVV9VUF9QUkVQQVJFLAkJXAogCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKXNtcF9wcm9jZXNzb3JfaWQoKSk7CVwKIAlmbigmZm4jI19uYiwgKHVuc2lnbmVkIGxvbmcpQ1BVX1NUQVJUSU5HLAkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waG9uZXQuaCBiL2luY2x1ZGUvbGludXgvcGhvbmV0LmgKaW5kZXggZTUxMjZjZi4uMjQ0MjZjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waG9uZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Bob25ldC5oCkBAIC01Niw3ICs1Niw3IEBACiAJX19iZTE2CXBuX2xlbmd0aDsKIAlfX3U4CXBuX3JvYmo7CiAJX191OAlwbl9zb2JqOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIENvbW1vbiBQaG9uZXQgcGF5bG9hZCBoZWFkZXIgKi8KIHN0cnVjdCBwaG9uZXRtc2cgewpAQCAtOTgsNyArOTgsNyBAQAogCV9fdTggc3BuX2RldjsKIAlfX3U4IHNwbl9yZXNvdXJjZTsKIAlfX3U4IHNwbl96ZXJvW3NpemVvZihzdHJ1Y3Qgc29ja2FkZHIpIC0gc2l6ZW9mKHNhX2ZhbWlseV90KSAtIDNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBXZWxsIGtub3duIGFkZHJlc3MgKi8KICNkZWZpbmUgUE5fREVWX1BDCTB4MTAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oCmluZGV4IDk4N2UxMTEuLjZiMGE3ODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmgKKysrIGIvaW5jbHVkZS9saW51eC9waHkuaApAQCAtMjM0LDYgKzIzNCw4IEBACiAJUEhZX1JFU1VNSU5HCiB9OwogCitzdHJ1Y3Qgc2tfYnVmZjsKKwogLyogcGh5X2RldmljZTogQW4gaW5zdGFuY2Ugb2YgYSBQSFkKICAqCiAgKiBkcnY6IFBvaW50ZXIgdG8gdGhlIGRyaXZlciBmb3IgdGhpcyBQSFkgaW5zdGFuY2UKQEAgLTQwMiw2ICs0MDQsMjYgQEAKIAkvKiBDbGVhcnMgdXAgYW55IG1lbW9yeSBpZiBuZWVkZWQgKi8KIAl2b2lkICgqcmVtb3ZlKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIAorCS8qIEhhbmRsZXMgU0lPQ1NIV1RTVEFNUCBpb2N0bCBmb3IgaGFyZHdhcmUgdGltZSBzdGFtcGluZy4gKi8KKwlpbnQgICgqaHd0c3RhbXApKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKTsKKworCS8qCisJICogUmVxdWVzdHMgYSBSeCB0aW1lc3RhbXAgZm9yICdza2InLiBJZiB0aGUgc2tiIGlzIGFjY2VwdGVkLAorCSAqIHRoZSBwaHkgZHJpdmVyIHByb21pc2VzIHRvIGRlbGl2ZXIgaXQgdXNpbmcgbmV0aWZfcngoKSBhcworCSAqIHNvb24gYXMgYSB0aW1lc3RhbXAgYmVjb21lcyBhdmFpbGFibGUuIE9uZSBvZiB0aGUKKwkgKiBQVFBfQ0xBU1NfIHZhbHVlcyBpcyBwYXNzZWQgaW4gJ3R5cGUnLiBUaGUgZnVuY3Rpb24gbXVzdAorCSAqIHJldHVybiB0cnVlIGlmIHRoZSBza2IgaXMgYWNjZXB0ZWQgZm9yIGRlbGl2ZXJ5LgorCSAqLworCWJvb2wgKCpyeHRzdGFtcCkoc3RydWN0IHBoeV9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHR5cGUpOworCisJLyoKKwkgKiBSZXF1ZXN0cyBhIFR4IHRpbWVzdGFtcCBmb3IgJ3NrYicuIFRoZSBwaHkgZHJpdmVyIHByb21pc2VzCisJICogdG8gZGVsaXZlciBpdCB0byB0aGUgc29ja2V0J3MgZXJyb3IgcXVldWUgYXMgc29vbiBhcyBhCisJICogdGltZXN0YW1wIGJlY29tZXMgYXZhaWxhYmxlLiBPbmUgb2YgdGhlIFBUUF9DTEFTU18gdmFsdWVzCisJICogaXMgcGFzc2VkIGluICd0eXBlJy4KKwkgKi8KKwl2b2lkICgqdHh0c3RhbXApKHN0cnVjdCBwaHlfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsIGludCB0eXBlKTsKKwogCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRyaXZlcjsKIH07CiAjZGVmaW5lIHRvX3BoeV9kcml2ZXIoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBwaHlfZHJpdmVyLCBkcml2ZXIpCkBAIC00OTgsNyArNTIwLDcgQEAKIGludCBwaHlfZXRodG9vbF9zc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKTsKIGludCBwaHlfZXRodG9vbF9nc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKTsKIGludCBwaHlfbWlpX2lvY3RsKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCi0JCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqbWlpX2RhdGEsIGludCBjbWQpOworCQlzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCk7CiBpbnQgcGh5X3N0YXJ0X2ludGVycnVwdHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiB2b2lkIHBoeV9wcmludF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiBzdHJ1Y3QgcGh5X2RldmljZSogcGh5X2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBwaHlfaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmgKaW5kZXggNTQxNzk0NC4uZDdlY2FkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCkBAIC00MywxMCArNDMsNjQgQEAKIGV4dGVybiBpbnQgcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLCBjb25zdCBjaGFyICopOwogZXh0ZXJuIGludCBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICoqLCBpbnQpOwogCi1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShjb25zdCBjaGFyICosIGludCBpZCwKLQkJCQkJY29uc3Qgc3RydWN0IHJlc291cmNlICosIHVuc2lnbmVkIGludCk7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEoc3RydWN0IGRldmljZSAqLAotCQljb25zdCBjaGFyICosIGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9yZXNuZGF0YSgKKwkJc3RydWN0IGRldmljZSAqcGFyZW50LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgaWQsCisJCWNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBpbnQgbnVtLAorCQljb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSk7CisKKy8qKgorICogcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSAtIGFkZCBhIHBsYXRmb3JtLWxldmVsIGRldmljZSBhbmQgaXRzIHJlc291cmNlcworICogQG5hbWU6IGJhc2UgbmFtZSBvZiB0aGUgZGV2aWNlIHdlJ3JlIGFkZGluZworICogQGlkOiBpbnN0YW5jZSBpZAorICogQHJlczogc2V0IG9mIHJlc291cmNlcyB0aGF0IG5lZWRzIHRvIGJlIGFsbG9jYXRlZCBmb3IgdGhlIGRldmljZQorICogQG51bTogbnVtYmVyIG9mIHJlc291cmNlcworICoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIHNpbXBsZSBwbGF0Zm9ybSBkZXZpY2UgdGhhdCByZXF1aXJlcyBtaW5pbWFsCisgKiByZXNvdXJjZSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuIENhbm5lZCByZWxlYXNlIGZ1bmN0aW9uIGZyZWVpbmcgbWVtb3J5CisgKiBhbGxvY2F0ZWQgZm9yIHRoZSBkZXZpY2UgYWxsb3dzIGRyaXZlcnMgdXNpbmcgc3VjaCBkZXZpY2VzIHRvIGJlCisgKiB1bmxvYWRlZCB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGUgZGV2aWNlIHRvIGJlCisgKiBkcm9wcGVkLgorICoKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3IgdXNlIHdpdGggbGVnYWN5IGRyaXZlcnMgd2hpY2gKKyAqIHByb2JlIGhhcmR3YXJlIGRpcmVjdGx5LiAgQmVjYXVzZSBzdWNoIGRyaXZlcnMgY3JlYXRlIHN5c2ZzIGRldmljZSBub2RlcworICogdGhlbXNlbHZlcywgcmF0aGVyIHRoYW4gbGV0dGluZyBzeXN0ZW0gaW5mcmFzdHJ1Y3R1cmUgaGFuZGxlIHN1Y2ggZGV2aWNlCisgKiBlbnVtZXJhdGlvbiB0YXNrcywgdGhleSBkb24ndCBmdWxseSBjb25mb3JtIHRvIHRoZSBMaW51eCBkcml2ZXIgbW9kZWwuCisgKiBJbiBwYXJ0aWN1bGFyLCB3aGVuIHN1Y2ggZHJpdmVycyBhcmUgYnVpbHQgYXMgbW9kdWxlcywgdGhleSBjYW4ndCBiZQorICogImhvdHBsdWdnZWQiLgorICoKKyAqIFJldHVybnMgJnN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcG9pbnRlciBvbiBzdWNjZXNzLCBvciBFUlJfUFRSKCkgb24gZXJyb3IuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgKKwkJY29uc3QgY2hhciAqbmFtZSwgaW50IGlkLAorCQljb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdW5zaWduZWQgaW50IG51bSkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3Jlc25kYXRhKE5VTEwsIG5hbWUsIGlkLAorCQkJcmVzLCBudW0sIE5VTEwsIDApOworfQorCisvKioKKyAqIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9kYXRhIC0gYWRkIGEgcGxhdGZvcm0tbGV2ZWwgZGV2aWNlIHdpdGggcGxhdGZvcm0tc3BlY2lmaWMgZGF0YQorICogQHBhcmVudDogcGFyZW50IGRldmljZSBmb3IgdGhlIGRldmljZSB3ZSdyZSBhZGRpbmcKKyAqIEBuYW1lOiBiYXNlIG5hbWUgb2YgdGhlIGRldmljZSB3ZSdyZSBhZGRpbmcKKyAqIEBpZDogaW5zdGFuY2UgaWQKKyAqIEBkYXRhOiBwbGF0Zm9ybSBzcGVjaWZpYyBkYXRhIGZvciB0aGlzIHBsYXRmb3JtIGRldmljZQorICogQHNpemU6IHNpemUgb2YgcGxhdGZvcm0gc3BlY2lmaWMgZGF0YQorICoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIHNpbXBsZSBwbGF0Zm9ybSBkZXZpY2UgdGhhdCByZXF1aXJlcyBtaW5pbWFsCisgKiByZXNvdXJjZSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuIENhbm5lZCByZWxlYXNlIGZ1bmN0aW9uIGZyZWVpbmcgbWVtb3J5CisgKiBhbGxvY2F0ZWQgZm9yIHRoZSBkZXZpY2UgYWxsb3dzIGRyaXZlcnMgdXNpbmcgc3VjaCBkZXZpY2VzIHRvIGJlCisgKiB1bmxvYWRlZCB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGUgZGV2aWNlIHRvIGJlCisgKiBkcm9wcGVkLgorICoKKyAqIFJldHVybnMgJnN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcG9pbnRlciBvbiBzdWNjZXNzLCBvciBFUlJfUFRSKCkgb24gZXJyb3IuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEoCisJCXN0cnVjdCBkZXZpY2UgKnBhcmVudCwgY29uc3QgY2hhciAqbmFtZSwgaW50IGlkLAorCQljb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3Jlc25kYXRhKHBhcmVudCwgbmFtZSwgaWQsCisJCQlOVUxMLCAwLCBkYXRhLCBzaXplKTsKK30KIAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZV9hbGxvYyhjb25zdCBjaGFyICpuYW1lLCBpbnQgaWQpOwogZXh0ZXJuIGludCBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGlzdC5oIGIvaW5jbHVkZS9saW51eC9wbGlzdC5oCmluZGV4IDY4OTg5ODUuLjcyNTRlZGEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BsaXN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9wbGlzdC5oCkBAIC0yNjAsNiArMjYwLDIzIEBACiAjZW5kaWYKIAogLyoqCisgKiBwbGlzdF9sYXN0X2VudHJ5IC0gZ2V0IHRoZSBzdHJ1Y3QgZm9yIHRoZSBsYXN0IGVudHJ5CisgKiBAaGVhZDoJdGhlICZzdHJ1Y3QgcGxpc3RfaGVhZCBwb2ludGVyCisgKiBAdHlwZToJdGhlIHR5cGUgb2YgdGhlIHN0cnVjdCB0aGlzIGlzIGVtYmVkZGVkIGluCisgKiBAbWVtYmVyOgl0aGUgbmFtZSBvZiB0aGUgbGlzdF9zdHJ1Y3Qgd2l0aGluIHRoZSBzdHJ1Y3QKKyAqLworI2lmZGVmIENPTkZJR19ERUJVR19QSV9MSVNUCisjIGRlZmluZSBwbGlzdF9sYXN0X2VudHJ5KGhlYWQsIHR5cGUsIG1lbWJlcikJXAorKHsgXAorCVdBUk5fT04ocGxpc3RfaGVhZF9lbXB0eShoZWFkKSk7IFwKKwljb250YWluZXJfb2YocGxpc3RfbGFzdChoZWFkKSwgdHlwZSwgbWVtYmVyKTsgXAorfSkKKyNlbHNlCisjIGRlZmluZSBwbGlzdF9sYXN0X2VudHJ5KGhlYWQsIHR5cGUsIG1lbWJlcikJXAorCWNvbnRhaW5lcl9vZihwbGlzdF9sYXN0KGhlYWQpLCB0eXBlLCBtZW1iZXIpCisjZW5kaWYKKworLyoqCiAgKiBwbGlzdF9maXJzdCAtIHJldHVybiB0aGUgZmlyc3Qgbm9kZSAoYW5kIHRodXMsIGhpZ2hlc3QgcHJpb3JpdHkpCiAgKiBAaGVhZDoJdGhlICZzdHJ1Y3QgcGxpc3RfaGVhZCBwb2ludGVyCiAgKgpAQCAtMjcxLDQgKzI4OCwxNiBAQAogCQkJICBzdHJ1Y3QgcGxpc3Rfbm9kZSwgcGxpc3Qubm9kZV9saXN0KTsKIH0KIAorLyoqCisgKiBwbGlzdF9sYXN0IC0gcmV0dXJuIHRoZSBsYXN0IG5vZGUgKGFuZCB0aHVzLCBsb3dlc3QgcHJpb3JpdHkpCisgKiBAaGVhZDoJdGhlICZzdHJ1Y3QgcGxpc3RfaGVhZCBwb2ludGVyCisgKgorICogQXNzdW1lcyB0aGUgcGxpc3QgaXMgX25vdF8gZW1wdHkuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBsaXN0X25vZGUgKnBsaXN0X2xhc3QoY29uc3Qgc3RydWN0IHBsaXN0X2hlYWQgKmhlYWQpCit7CisJcmV0dXJuIGxpc3RfZW50cnkoaGVhZC0+bm9kZV9saXN0LnByZXYsCisJCQkgIHN0cnVjdCBwbGlzdF9ub2RlLCBwbGlzdC5ub2RlX2xpc3QpOworfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG0uaCBiL2luY2x1ZGUvbGludXgvcG0uaAppbmRleCA4ZTI1OGM3Li41MmU4YzU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BtLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbS5oCkBAIC00NTcsNiArNDU3LDcgQEAKICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWVudHJ5OwogCXN0cnVjdCBjb21wbGV0aW9uCWNvbXBsZXRpb247CisJdW5zaWduZWQgbG9uZwkJd2FrZXVwX2NvdW50OwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKIAlzdHJ1Y3QgdGltZXJfbGlzdAlzdXNwZW5kX3RpbWVyOwpAQCAtNDc2LDkgKzQ3NywxNSBAQAogCWVudW0gcnBtX3JlcXVlc3QJcmVxdWVzdDsKIAllbnVtIHJwbV9zdGF0dXMJCXJ1bnRpbWVfc3RhdHVzOwogCWludAkJCXJ1bnRpbWVfZXJyb3I7CisJdW5zaWduZWQgbG9uZwkJYWN0aXZlX2ppZmZpZXM7CisJdW5zaWduZWQgbG9uZwkJc3VzcGVuZGVkX2ppZmZpZXM7CisJdW5zaWduZWQgbG9uZwkJYWNjb3VudGluZ190aW1lc3RhbXA7CiAjZW5kaWYKIH07CiAKK2V4dGVybiB2b2lkIHVwZGF0ZV9wbV9ydW50aW1lX2FjY291bnRpbmcoc3RydWN0IGRldmljZSAqZGV2KTsKKworCiAvKgogICogVGhlIFBNX0VWRU5UXyBtZXNzYWdlcyBhcmUgYWxzbyB1c2VkIGJ5IGRyaXZlcnMgaW1wbGVtZW50aW5nIHRoZSBsZWdhY3kKICAqIHN1c3BlbmQgZnJhbWV3b3JrLCBiYXNlZCBvbiB0aGUgLT5zdXNwZW5kKCkgYW5kIC0+cmVzdW1lKCkgY2FsbGJhY2tzIGNvbW1vbgpAQCAtNTUyLDYgKzU1OSwxMSBAQAogCX0gd2hpbGUgKDApCiAKIGV4dGVybiB2b2lkIGRldmljZV9wbV93YWl0X2Zvcl9kZXYoc3RydWN0IGRldmljZSAqc3ViLCBzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisvKiBkcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmMgKi8KK2V4dGVybiB2b2lkIHBtX3dha2V1cF9ldmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBtc2VjKTsKK2V4dGVybiB2b2lkIHBtX3N0YXlfYXdha2Uoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHBtX3JlbGF4KHZvaWQpOwogI2Vsc2UgLyogIUNPTkZJR19QTV9TTEVFUCAqLwogCiAjZGVmaW5lIGRldmljZV9wbV9sb2NrKCkgZG8ge30gd2hpbGUgKDApCkBAIC01NjUsNiArNTc3LDEwIEBACiAjZGVmaW5lIHN1c3BlbmRfcmVwb3J0X3Jlc3VsdChmbiwgcmV0KQkJZG8ge30gd2hpbGUgKDApCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfcG1fd2FpdF9mb3JfZGV2KHN0cnVjdCBkZXZpY2UgKmEsIHN0cnVjdCBkZXZpY2UgKmIpIHt9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbV93YWtldXBfZXZlbnQoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbXNlYykge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBwbV9zdGF5X2F3YWtlKHN0cnVjdCBkZXZpY2UgKmRldikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBwbV9yZWxheCh2b2lkKSB7fQogI2VuZGlmIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KIAogLyogSG93IHRvIHJlb3JkZXIgZHBtX2xpc3QgYWZ0ZXIgZGV2aWNlX21vdmUoKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbV9xb3NfcGFyYW1zLmggYi9pbmNsdWRlL2xpbnV4L3BtX3Fvc19wYXJhbXMuaAppbmRleCA4YmE0NDBlLi43N2NiZGRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BtX3Fvc19wYXJhbXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BtX3Fvc19wYXJhbXMuaApAQCAtMSw4ICsxLDEwIEBACisjaWZuZGVmIF9MSU5VWF9QTV9RT1NfUEFSQU1TX0gKKyNkZWZpbmUgX0xJTlVYX1BNX1FPU19QQVJBTVNfSAogLyogaW50ZXJmYWNlIGZvciB0aGUgcG1fcW9zX3Bvd2VyIGluZnJhc3RydWN0dXJlIG9mIHRoZSBsaW51eCBrZXJuZWwuCiAgKgogICogTWFyayBHcm9zcyA8bWdyb3NzQGxpbnV4LmludGVsLmNvbT4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogCkBAIC0xNCw5ICsxNiwxMiBAQAogI2RlZmluZSBQTV9RT1NfTlVNX0NMQVNTRVMgNAogI2RlZmluZSBQTV9RT1NfREVGQVVMVF9WQUxVRSAtMQogCi1zdHJ1Y3QgcG1fcW9zX3JlcXVlc3RfbGlzdDsKK3N0cnVjdCBwbV9xb3NfcmVxdWVzdF9saXN0IHsKKwlzdHJ1Y3QgcGxpc3Rfbm9kZSBsaXN0OworCWludCBwbV9xb3NfY2xhc3M7Cit9OwogCi1zdHJ1Y3QgcG1fcW9zX3JlcXVlc3RfbGlzdCAqcG1fcW9zX2FkZF9yZXF1ZXN0KGludCBwbV9xb3NfY2xhc3MsIHMzMiB2YWx1ZSk7Cit2b2lkIHBtX3Fvc19hZGRfcmVxdWVzdChzdHJ1Y3QgcG1fcW9zX3JlcXVlc3RfbGlzdCAqbCwgaW50IHBtX3Fvc19jbGFzcywgczMyIHZhbHVlKTsKIHZvaWQgcG1fcW9zX3VwZGF0ZV9yZXF1ZXN0KHN0cnVjdCBwbV9xb3NfcmVxdWVzdF9saXN0ICpwbV9xb3NfcmVxLAogCQlzMzIgbmV3X3ZhbHVlKTsKIHZvaWQgcG1fcW9zX3JlbW92ZV9yZXF1ZXN0KHN0cnVjdCBwbV9xb3NfcmVxdWVzdF9saXN0ICpwbV9xb3NfcmVxKTsKQEAgLTI0LDQgKzI5LDYgQEAKIGludCBwbV9xb3NfcmVxdWVzdChpbnQgcG1fcW9zX2NsYXNzKTsKIGludCBwbV9xb3NfYWRkX25vdGlmaWVyKGludCBwbV9xb3NfY2xhc3MsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbm90aWZpZXIpOwogaW50IHBtX3Fvc19yZW1vdmVfbm90aWZpZXIoaW50IHBtX3Fvc19jbGFzcywgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpub3RpZmllcik7CitpbnQgcG1fcW9zX3JlcXVlc3RfYWN0aXZlKHN0cnVjdCBwbV9xb3NfcmVxdWVzdF9saXN0ICpyZXEpOwogCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG1fd2FrZXVwLmggYi9pbmNsdWRlL2xpbnV4L3BtX3dha2V1cC5oCmluZGV4IDIyZDY0YzEuLjc2YWNhNDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG1fd2FrZXVwLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbV93YWtldXAuaApAQCAtMjksOCArMjksMTEgQEAKIAogI2lmZGVmIENPTkZJR19QTQogCi0vKiBjaGFuZ2VzIHRvIGRldmljZV9tYXlfd2FrZXVwIHRha2UgZWZmZWN0IG9uIHRoZSBuZXh0IHBtIHN0YXRlIGNoYW5nZS4KLSAqIGJ5IGRlZmF1bHQsIGRldmljZXMgc2hvdWxkIHdha2V1cCBpZiB0aGV5IGNhbi4KKy8qIENoYW5nZXMgdG8gZGV2aWNlX21heV93YWtldXAgdGFrZSBlZmZlY3Qgb24gdGhlIG5leHQgcG0gc3RhdGUgY2hhbmdlLgorICoKKyAqIEJ5IGRlZmF1bHQsIG1vc3QgZGV2aWNlcyBzaG91bGQgbGVhdmUgd2FrZXVwIGRpc2FibGVkLiAgVGhlIGV4Y2VwdGlvbnMKKyAqIGFyZSBkZXZpY2VzIHRoYXQgZXZlcnlvbmUgZXhwZWN0cyB0byBiZSB3YWtldXAgc291cmNlczoga2V5Ym9hcmRzLAorICogcG93ZXIgYnV0dG9ucywgcG9zc2libHkgbmV0d29yayBpbnRlcmZhY2VzLCBldGMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfaW5pdF93YWtldXAoc3RydWN0IGRldmljZSAqZGV2LCBib29sIHZhbCkKIHsKQEAgLTU5LDcgKzYyLDcgQEAKIAogI2Vsc2UgLyogIUNPTkZJR19QTSAqLwogCi0vKiBGb3Igc29tZSByZWFzb24gdGhlIG5leHQgdHdvIHJvdXRpbmVzIHdvcmsgZXZlbiB3aXRob3V0IENPTkZJR19QTSAqLworLyogRm9yIHNvbWUgcmVhc29uIHRoZSBmb2xsb3dpbmcgcm91dGluZXMgd29yayBldmVuIHdpdGhvdXQgQ09ORklHX1BNICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX2luaXRfd2FrZXVwKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCB2YWwpCiB7CiAJZGV2LT5wb3dlci5jYW5fd2FrZXVwID0gdmFsOwpAQCAtNjcsNiArNzAsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX3NldF93YWtldXBfY2FwYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgY2FwYWJsZSkKIHsKKwlkZXYtPnBvd2VyLmNhbl93YWtldXAgPSBjYXBhYmxlOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgZGV2aWNlX2Nhbl93YWtldXAoc3RydWN0IGRldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbnAuaCBiL2luY2x1ZGUvbGludXgvcG5wLmgKaW5kZXggN2M0MTkzZS4uMWJjMTMzOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbnAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BucC5oCkBAIC00MTQsNiArNDE0LDcgQEAKIAlpbnQgKCpkaXNhYmxlKSAoc3RydWN0IHBucF9kZXYgKmRldik7CiAKIAkvKiBwcm90b2NvbCBzcGVjaWZpYyBzdXNwZW5kL3Jlc3VtZSAqLworCWJvb2wgKCpjYW5fd2FrZXVwKSAoc3RydWN0IHBucF9kZXYgKmRldik7CiAJaW50ICgqc3VzcGVuZCkgKHN0cnVjdCBwbnBfZGV2ICogZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwogCWludCAoKnJlc3VtZSkgKHN0cnVjdCBwbnBfZGV2ICogZGV2KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wb3dlci9qejQ3NDAtYmF0dGVyeS5oIGIvaW5jbHVkZS9saW51eC9wb3dlci9qejQ3NDAtYmF0dGVyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5Yzk2MTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3Bvd2VyL2p6NDc0MC1iYXR0ZXJ5LmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDksIEppZWppbmcgWmhhbmcgPGt6amVlZkBnbWFpbC5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQkgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YJIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCUxpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX19KWjQ3NDBfQkFUVEVSWV9ICisjZGVmaW5lIF9fSlo0NzQwX0JBVFRFUllfSAorCitzdHJ1Y3QganpfYmF0dGVyeV9wbGF0Zm9ybV9kYXRhIHsKKwlzdHJ1Y3QgcG93ZXJfc3VwcGx5X2luZm8gaW5mbzsKKwlpbnQgZ3Bpb19jaGFyZ2U7CS8qIEdQSU8gcG9ydCBvZiBDaGFyZ2VyIHN0YXRlICovCisJaW50IGdwaW9fY2hhcmdlX2FjdGl2ZV9sb3c7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHRwX2NsYXNzaWZ5LmggYi9pbmNsdWRlL2xpbnV4L3B0cF9jbGFzc2lmeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0M2E4NWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3B0cF9jbGFzc2lmeS5oCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogUFRQIDE1ODggc3VwcG9ydAorICoKKyAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGEgQlBGIHRoYXQgcmVjb2duaXplcyBQVFAgZXZlbnQgbWVzc2FnZXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE9NSUNST04gZWxlY3Ryb25pY3MgR21iSAorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfUFRQX0NMQVNTSUZZX0hfCisjZGVmaW5lIF9QVFBfQ0xBU1NJRllfSF8KKworI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbHRlci5oPgorI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2Vsc2UKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKworI2RlZmluZSBQVFBfQ0xBU1NfTk9ORSAgMHgwMCAvKiBub3QgYSBQVFAgZXZlbnQgbWVzc2FnZSAqLworI2RlZmluZSBQVFBfQ0xBU1NfVjEgICAgMHgwMSAvKiBwcm90b2NvbCB2ZXJzaW9uIDEgKi8KKyNkZWZpbmUgUFRQX0NMQVNTX1YyICAgIDB4MDIgLyogcHJvdG9jb2wgdmVyc2lvbiAyICovCisjZGVmaW5lIFBUUF9DTEFTU19WTUFTSyAweDBmIC8qIG1heCBwcm90b2NvbCB2ZXJzaW9uIGlzIDE1ICovCisjZGVmaW5lIFBUUF9DTEFTU19JUFY0ICAweDEwIC8qIGV2ZW50IGluIGFuIElQVjQgVURQIHBhY2tldCAqLworI2RlZmluZSBQVFBfQ0xBU1NfSVBWNiAgMHgyMCAvKiBldmVudCBpbiBhbiBJUFY2IFVEUCBwYWNrZXQgKi8KKyNkZWZpbmUgUFRQX0NMQVNTX0wyICAgIDB4MzAgLyogZXZlbnQgaW4gYSBMMiBwYWNrZXQgKi8KKyNkZWZpbmUgUFRQX0NMQVNTX1ZMQU4gIDB4NDAgLyogZXZlbnQgaW4gYSBWTEFOIHRhZ2dlZCBMMiBwYWNrZXQgKi8KKyNkZWZpbmUgUFRQX0NMQVNTX1BNQVNLIDB4ZjAgLyogbWFzayBmb3IgdGhlIHBhY2tldCB0eXBlIGZpZWxkICovCisKKyNkZWZpbmUgUFRQX0NMQVNTX1YxX0lQVjQgKFBUUF9DTEFTU19WMSB8IFBUUF9DTEFTU19JUFY0KQorI2RlZmluZSBQVFBfQ0xBU1NfVjFfSVBWNiAoUFRQX0NMQVNTX1YxIHwgUFRQX0NMQVNTX0lQVjYpIC8qcHJvYmFibHkgRE5FKi8KKyNkZWZpbmUgUFRQX0NMQVNTX1YyX0lQVjQgKFBUUF9DTEFTU19WMiB8IFBUUF9DTEFTU19JUFY0KQorI2RlZmluZSBQVFBfQ0xBU1NfVjJfSVBWNiAoUFRQX0NMQVNTX1YyIHwgUFRQX0NMQVNTX0lQVjYpCisjZGVmaW5lIFBUUF9DTEFTU19WMl9MMiAgIChQVFBfQ0xBU1NfVjIgfCBQVFBfQ0xBU1NfTDIpCisjZGVmaW5lIFBUUF9DTEFTU19WMl9WTEFOIChQVFBfQ0xBU1NfVjIgfCBQVFBfQ0xBU1NfVkxBTikKKworI2RlZmluZSBQVFBfRVZfUE9SVCAzMTkKKworI2RlZmluZSBPRkZfRVRZUEUJMTIKKyNkZWZpbmUgT0ZGX0lITAkJMTQKKyNkZWZpbmUgT0ZGX0ZSQUcJMjAKKyNkZWZpbmUgT0ZGX1BST1RPNAkyMworI2RlZmluZSBPRkZfTkVYVAk2CisjZGVmaW5lIE9GRl9VRFBfRFNUCTIKKworI2RlZmluZSBJUDZfSExFTgk0MAorI2RlZmluZSBVRFBfSExFTgk4CisKKyNkZWZpbmUgUkVMT0ZGX0RTVDQJKEVUSF9ITEVOICsgT0ZGX1VEUF9EU1QpCisjZGVmaW5lIE9GRl9EU1Q2CShFVEhfSExFTiArIElQNl9ITEVOICsgT0ZGX1VEUF9EU1QpCisjZGVmaW5lIE9GRl9QVFA2CShFVEhfSExFTiArIElQNl9ITEVOICsgVURQX0hMRU4pCisKKyNkZWZpbmUgT1BfQU5ECShCUEZfQUxVIHwgQlBGX0FORCAgfCBCUEZfSykKKyNkZWZpbmUgT1BfSkVRCShCUEZfSk1QIHwgQlBGX0pFUSAgfCBCUEZfSykKKyNkZWZpbmUgT1BfSlNFVAkoQlBGX0pNUCB8IEJQRl9KU0VUIHwgQlBGX0spCisjZGVmaW5lIE9QX0xEQgkoQlBGX0xEICB8IEJQRl9CICAgIHwgQlBGX0FCUykKKyNkZWZpbmUgT1BfTERICShCUEZfTEQgIHwgQlBGX0ggICAgfCBCUEZfQUJTKQorI2RlZmluZSBPUF9MREhJCShCUEZfTEQgIHwgQlBGX0ggICAgfCBCUEZfSU5EKQorI2RlZmluZSBPUF9MRFgJKEJQRl9MRFggfCBCUEZfQiAgICB8IEJQRl9NU0gpCisjZGVmaW5lIE9QX09SCShCUEZfQUxVIHwgQlBGX09SICAgfCBCUEZfSykKKyNkZWZpbmUgT1BfUkVUQQkoQlBGX1JFVCB8IEJQRl9BKQorI2RlZmluZSBPUF9SRVRLCShCUEZfUkVUIHwgQlBGX0spCisKK3N0YXRpYyBpbmxpbmUgaW50IHB0cF9maWx0ZXJfaW5pdChzdHJ1Y3Qgc29ja19maWx0ZXIgKmYsIGludCBsZW4pCit7CisJaWYgKE9QX0xESCA9PSBmWzBdLmNvZGUpCisJCXJldHVybiBza19jaGtfZmlsdGVyKGYsIGxlbik7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworI2RlZmluZSBQVFBfRklMVEVSIFwKKwl7T1BfTERILAkwLCAgIDAsIE9GRl9FVFlQRQkJfSwgLyogICAgICAgICAgICAgICovIFwKKwl7T1BfSkVRLAkwLCAgMTIsIEVUSF9QX0lQCQl9LCAvKiBmIGdvdG8gTDIwICAgKi8gXAorCXtPUF9MREIsCTAsICAgMCwgT0ZGX1BST1RPNAkJfSwgLyogICAgICAgICAgICAgICovIFwKKwl7T1BfSkVRLAkwLCAgIDksIElQUFJPVE9fVURQCQl9LCAvKiBmIGdvdG8gTDEwICAgKi8gXAorCXtPUF9MREgsCTAsICAgMCwgT0ZGX0ZSQUcJCX0sIC8qICAgICAgICAgICAgICAqLyBcCisJe09QX0pTRVQsCTcsICAgMCwgMHgxZmZmCQkJfSwgLyogdCBnb3RvIEwxMSAgICovIFwKKwl7T1BfTERYLAkwLCAgIDAsIE9GRl9JSEwJCQl9LCAvKiAgICAgICAgICAgICAgKi8gXAorCXtPUF9MREhJLAkwLCAgIDAsIFJFTE9GRl9EU1Q0CQl9LCAvKiAgICAgICAgICAgICAgKi8gXAorCXtPUF9KRVEsCTAsICAgNCwgUFRQX0VWX1BPUlQJCX0sIC8qIGYgZ290byBMMTIgICAqLyBcCisJe09QX0xESEksCTAsICAgMCwgRVRIX0hMRU4gKyBVRFBfSExFTgl9LCAvKiAgICAgICAgICAgICAgKi8gXAorCXtPUF9BTkQsCTAsICAgMCwgUFRQX0NMQVNTX1ZNQVNLCQl9LCAvKiAgICAgICAgICAgICAgKi8gXAorCXtPUF9PUiwJCTAsICAgMCwgUFRQX0NMQVNTX0lQVjQJCX0sIC8qICAgICAgICAgICAgICAqLyBcCisJe09QX1JFVEEsCTAsICAgMCwgMAkJCX0sIC8qICAgICAgICAgICAgICAqLyBcCisvKkwxeCovCXtPUF9SRVRLLAkwLCAgIDAsIFBUUF9DTEFTU19OT05FCQl9LCAvKiAgICAgICAgICAgICAgKi8gXAorLypMMjAqLwl7T1BfSkVRLAkwLCAgIDksIEVUSF9QX0lQVjYJCX0sIC8qIGYgZ290byBMNDAgICAqLyBcCisJe09QX0xEQiwJMCwgICAwLCBFVEhfSExFTiArIE9GRl9ORVhUCX0sIC8qICAgICAgICAgICAgICAqLyBcCisJe09QX0pFUSwJMCwgICA2LCBJUFBST1RPX1VEUAkJfSwgLyogZiBnb3RvIEwzMCAgICovIFwKKwl7T1BfTERILAkwLCAgIDAsIE9GRl9EU1Q2CQl9LCAvKiAgICAgICAgICAgICAgKi8gXAorCXtPUF9KRVEsCTAsICAgNCwgUFRQX0VWX1BPUlQJCX0sIC8qIGYgZ290byBMMzEgICAqLyBcCisJe09QX0xESCwJMCwgICAwLCBPRkZfUFRQNgkJfSwgLyogICAgICAgICAgICAgICovIFwKKwl7T1BfQU5ELAkwLCAgIDAsIFBUUF9DTEFTU19WTUFTSwkJfSwgLyogICAgICAgICAgICAgICovIFwKKwl7T1BfT1IsCQkwLCAgIDAsIFBUUF9DTEFTU19JUFY2CQl9LCAvKiAgICAgICAgICAgICAgKi8gXAorCXtPUF9SRVRBLAkwLCAgIDAsIDAJCQl9LCAvKiAgICAgICAgICAgICAgKi8gXAorLypMM3gqLwl7T1BfUkVUSywJMCwgICAwLCBQVFBfQ0xBU1NfTk9ORQkJfSwgLyogICAgICAgICAgICAgICovIFwKKy8qTDQwKi8Je09QX0pFUSwJMCwgICA2LCBFVEhfUF84MDIxUQkJfSwgLyogZiBnb3RvIEw1MCAgICovIFwKKwl7T1BfTERILAkwLCAgIDAsIE9GRl9FVFlQRSArIDQJCX0sIC8qICAgICAgICAgICAgICAqLyBcCisJe09QX0pFUSwJMCwgICA5LCBFVEhfUF8xNTg4CQl9LCAvKiBmIGdvdG8gTDYwICAgKi8gXAorCXtPUF9MREgsCTAsICAgMCwgRVRIX0hMRU4gKyBWTEFOX0hMRU4JfSwgLyogICAgICAgICAgICAgICovIFwKKwl7T1BfQU5ELAkwLCAgIDAsIFBUUF9DTEFTU19WTUFTSwkJfSwgLyogICAgICAgICAgICAgICovIFwKKwl7T1BfT1IsCQkwLCAgIDAsIFBUUF9DTEFTU19WTEFOCQl9LCAvKiAgICAgICAgICAgICAgKi8gXAorCXtPUF9SRVRBLAkwLCAgIDAsIDAJCQl9LCAvKiAgICAgICAgICAgICAgKi8gXAorLypMNTAqLwl7T1BfSkVRLAkwLCAgIDQsIEVUSF9QXzE1ODgJCX0sIC8qIGYgZ290byBMNjEgICAqLyBcCisJe09QX0xESCwJMCwgICAwLCBFVEhfSExFTgkJfSwgLyogICAgICAgICAgICAgICovIFwKKwl7T1BfQU5ELAkwLCAgIDAsIFBUUF9DTEFTU19WTUFTSwkJfSwgLyogICAgICAgICAgICAgICovIFwKKwl7T1BfT1IsCQkwLCAgIDAsIFBUUF9DTEFTU19MMgkJfSwgLyogICAgICAgICAgICAgICovIFwKKwl7T1BfUkVUQSwJMCwgICAwLCAwCQkJfSwgLyogICAgICAgICAgICAgICovIFwKKy8qTDZ4Ki8Je09QX1JFVEssCTAsICAgMCwgUFRQX0NMQVNTX05PTkUJCX0sCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Jhcl9yZWdpc3Rlci9yYXJfcmVnaXN0ZXIuaCBiL2luY2x1ZGUvbGludXgvcmFyX3JlZ2lzdGVyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc3RhZ2luZy9yYXJfcmVnaXN0ZXIvcmFyX3JlZ2lzdGVyLmgKcmVuYW1lIHRvIGluY2x1ZGUvbGludXgvcmFyX3JlZ2lzdGVyLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaCBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaAppbmRleCBiNjUzYjRhLi45ZmJjNTRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VxbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2xvY2tkZXAuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdvYmplY3RzLmg+CiAKICNpZmRlZiBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVAogZXh0ZXJuIGludCByY3V0b3J0dXJlX3J1bm5hYmxlOyAvKiBmb3Igc3lzY3RsICovCkBAIC03OSw2ICs4MCwxNiBAQAogICAgICAgIChwdHIpLT5uZXh0ID0gTlVMTDsgKHB0ciktPmZ1bmMgPSBOVUxMOyBcCiB9IHdoaWxlICgwKQogCisvKgorICogaW5pdF9yY3VfaGVhZF9vbl9zdGFjaygpL2Rlc3Ryb3lfcmN1X2hlYWRfb25fc3RhY2soKSBhcmUgbmVlZGVkIGZvciBkeW5hbWljCisgKiBpbml0aWFsaXphdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gb2YgcmN1X2hlYWQgb24gdGhlIHN0YWNrLiByY3VfaGVhZCBzdHJ1Y3R1cmVzCisgKiBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgaW4gdGhlIGhlYXAgb3IgZGVmaW5lZCBzdGF0aWNhbGx5IGRvbid0IG5lZWQgYW55CisgKiBpbml0aWFsaXphdGlvbi4KKyAqLworI2lmZGVmIENPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFECitleHRlcm4gdm9pZCBpbml0X3JjdV9oZWFkX29uX3N0YWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCk7CitleHRlcm4gdm9pZCBkZXN0cm95X3JjdV9oZWFkX29uX3N0YWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCk7CisjZWxzZSAvKiAhQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3JjdV9oZWFkX29uX3N0YWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIHsKIH0KQEAgLTg2LDYgKzk3LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZXN0cm95X3JjdV9oZWFkX29uX3N0YWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIHsKIH0KKyNlbmRpZgkvKiAjZWxzZSAhQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQgKi8KIAogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCiAKQEAgLTUxNyw0ICs1MjksNzQgQEAKIGV4dGVybiB2b2lkIGNhbGxfcmN1X2JoKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwKIAkJCXZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpKTsKIAorLyoKKyAqIGRlYnVnX3JjdV9oZWFkX3F1ZXVlKCkvZGVidWdfcmN1X2hlYWRfdW5xdWV1ZSgpIGFyZSB1c2VkIGludGVybmFsbHkKKyAqIGJ5IGNhbGxfcmN1KCkgYW5kIHJjdSBjYWxsYmFjayBleGVjdXRpb24sIGFuZCBhcmUgdGhlcmVmb3JlIG5vdCBwYXJ0IG9mIHRoZQorICogUkNVIEFQSS4gTGVhdmluZyBpbiByY3VwZGF0ZS5oIGJlY2F1c2UgdGhleSBhcmUgdXNlZCBieSBhbGwgUkNVIGZsYXZvcnMuCisgKi8KKworI2lmZGVmIENPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFECisjIGRlZmluZSBTVEFURV9SQ1VfSEVBRF9SRUFEWQkwCisjIGRlZmluZSBTVEFURV9SQ1VfSEVBRF9RVUVVRUQJMQorCitleHRlcm4gc3RydWN0IGRlYnVnX29ial9kZXNjciByY3VoZWFkX2RlYnVnX2Rlc2NyOworCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfcmN1X2hlYWRfcXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCWRlYnVnX29iamVjdF9hY3RpdmF0ZShoZWFkLCAmcmN1aGVhZF9kZWJ1Z19kZXNjcik7CisJZGVidWdfb2JqZWN0X2FjdGl2ZV9zdGF0ZShoZWFkLCAmcmN1aGVhZF9kZWJ1Z19kZXNjciwKKwkJCQkgIFNUQVRFX1JDVV9IRUFEX1JFQURZLAorCQkJCSAgU1RBVEVfUkNVX0hFQURfUVVFVUVEKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX3JjdV9oZWFkX3VucXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCWRlYnVnX29iamVjdF9hY3RpdmVfc3RhdGUoaGVhZCwgJnJjdWhlYWRfZGVidWdfZGVzY3IsCisJCQkJICBTVEFURV9SQ1VfSEVBRF9RVUVVRUQsCisJCQkJICBTVEFURV9SQ1VfSEVBRF9SRUFEWSk7CisJZGVidWdfb2JqZWN0X2RlYWN0aXZhdGUoaGVhZCwgJnJjdWhlYWRfZGVidWdfZGVzY3IpOworfQorI2Vsc2UJLyogIUNPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFEICovCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfcmN1X2hlYWRfcXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfcmN1X2hlYWRfdW5xdWV1ZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7Cit9CisjZW5kaWYJLyogI2Vsc2UgIUNPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFEICovCisKKyNpZm5kZWYgQ09ORklHX1BST1ZFX1JDVQorI2RlZmluZSBfX2RvX3JjdV9kZXJlZmVyZW5jZV9jaGVjayhjKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19QUk9WRV9SQ1UgKi8KKworI2RlZmluZSBfX3JjdV9kZXJlZmVyZW5jZV9pbmRleF9jaGVjayhwLCBjKSBcCisJKHsgXAorCQl0eXBlb2YocCkgX19fX19fX19fcDEgPSBBQ0NFU1NfT05DRShwKTsgXAorCQlfX2RvX3JjdV9kZXJlZmVyZW5jZV9jaGVjayhjKTsgXAorCQlzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKTsgXAorCQkoX19fX19fX19fcDEpOyBcCisJfSkKKworLyoqCisgKiByY3VfZGVyZWZlcmVuY2VfaW5kZXhfY2hlY2soKSAtIHJjdV9kZXJlZmVyZW5jZSBmb3IgaW5kaWNlcyB3aXRoIGRlYnVnIGNoZWNraW5nCisgKiBAcDogVGhlIHBvaW50ZXIgdG8gcmVhZCwgcHJpb3IgdG8gZGVyZWZlcmVuY2luZworICogQGM6IFRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSBkZXJlZmVyZW5jZSB3aWxsIHRha2UgcGxhY2UKKyAqCisgKiBTaW1pbGFyIHRvIHJjdV9kZXJlZmVyZW5jZV9jaGVjaygpLCBidXQgb21pdHMgdGhlIHNwYXJzZSBjaGVja2luZy4KKyAqIFRoaXMgYWxsb3dzIHJjdV9kZXJlZmVyZW5jZV9pbmRleF9jaGVjaygpIHRvIGJlIHVzZWQgb24gaW50ZWdlcnMsCisgKiB3aGljaCBjYW4gdGhlbiBiZSB1c2VkIGFzIGFycmF5IGluZGljZXMuICBBdHRlbXB0aW5nIHRvIHVzZQorICogcmN1X2RlcmVmZXJlbmNlX2NoZWNrKCkgb24gYW4gaW50ZWdlciB3aWxsIGdpdmUgY29tcGlsZXIgd2FybmluZ3MKKyAqIGJlY2F1c2UgdGhlIHNwYXJzZSBhZGRyZXNzLXNwYWNlIG1lY2hhbmlzbSByZWxpZXMgb24gZGVyZWZlcmVuY2luZworICogdGhlIFJDVS1wcm90ZWN0ZWQgcG9pbnRlci4gIERlcmVmZXJlbmNpbmcgaW50ZWdlcnMgaXMgbm90IHNvbWV0aGluZworICogdGhhdCBldmVuIGdjYyB3aWxsIHB1dCB1cCB3aXRoLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGltcGxpY2l0bHkgY2hlY2sgZm9yIFJDVSByZWFkLXNpZGUKKyAqIGNyaXRpY2FsIHNlY3Rpb25zLiAgSWYgdGhpcyBmdW5jdGlvbiBnYWlucyBsb3RzIG9mIHVzZXMsIGl0IG1pZ2h0CisgKiBtYWtlIHNlbnNlIHRvIHByb3ZpZGUgdmVyc2lvbnMgZm9yIGVhY2ggZmxhdm9yIG9mIFJDVSwgYnV0IGl0IGRvZXMKKyAqIG5vdCBtYWtlIHNlbnNlIGFzIG9mIGVhcmx5IDIwMTAuCisgKi8KKyNkZWZpbmUgcmN1X2RlcmVmZXJlbmNlX2luZGV4X2NoZWNrKHAsIGMpIFwKKwlfX3JjdV9kZXJlZmVyZW5jZV9pbmRleF9jaGVjaygocCksIChjKSkKKwogI2VuZGlmIC8qIF9fTElOVVhfUkNVUERBVEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZHMuaCBiL2luY2x1ZGUvbGludXgvcmRzLmgKaW5kZXggY2FiNDk5NC4uMjRiY2UzZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Jkcy5oCkBAIC0xMDAsNyArMTAwLDcgQEAKIHN0cnVjdCByZHNfaW5mb19jb3VudGVyIHsKIAl1X2ludDhfdAluYW1lWzMyXTsKIAl1X2ludDY0X3QJdmFsdWU7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBSRFNfSU5GT19DT05ORUNUSU9OX0ZMQUdfU0VORElORwkweDAxCiAjZGVmaW5lIFJEU19JTkZPX0NPTk5FQ1RJT05fRkxBR19DT05ORUNUSU5HCTB4MDIKQEAgLTExNSw3ICsxMTUsNyBAQAogCV9fYmUzMgkJZmFkZHI7CiAJdV9pbnQ4X3QJdHJhbnNwb3J0W1RSQU5TTkFNU0laXTsJCS8qIG51bGwgdGVybSBhc2NpaSAqLwogCXVfaW50OF90CWZsYWdzOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCByZHNfaW5mb19mbG93IHsKIAlfX2JlMzIJCWxhZGRyOwpAQCAtMTIzLDcgKzEyMyw3IEBACiAJdV9pbnQzMl90CWJ5dGVzOwogCV9fYmUxNgkJbHBvcnQ7CiAJX19iZTE2CQlmcG9ydDsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIFJEU19JTkZPX01FU1NBR0VfRkxBR19BQ0sgICAgICAgICAgICAgICAweDAxCiAjZGVmaW5lIFJEU19JTkZPX01FU1NBR0VfRkxBR19GQVNUX0FDSyAgICAgICAgICAweDAyCkBAIC0xMzYsNyArMTM2LDcgQEAKIAlfX2JlMTYJCWxwb3J0OwogCV9fYmUxNgkJZnBvcnQ7CiAJdV9pbnQ4X3QJZmxhZ3M7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHJkc19pbmZvX3NvY2tldCB7CiAJdV9pbnQzMl90CXNuZGJ1ZjsKQEAgLTE0Niw3ICsxNDYsNyBAQAogCV9fYmUxNgkJY29ubmVjdGVkX3BvcnQ7CiAJdV9pbnQzMl90CXJjdmJ1ZjsKIAl1X2ludDY0X3QJaW51bTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgcmRzX2luZm9fdGNwX3NvY2tldCB7CiAJX19iZTMyICAgICAgICAgIGxvY2FsX2FkZHI7CkBAIC0xNTgsNyArMTU4LDcgQEAKIAl1X2ludDMyX3QgICAgICAgbGFzdF9zZW50X254dDsKIAl1X2ludDMyX3QgICAgICAgbGFzdF9leHBlY3RlZF91bmE7CiAJdV9pbnQzMl90ICAgICAgIGxhc3Rfc2Vlbl91bmE7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBSRFNfSUJfR0lEX0xFTgkxNgogc3RydWN0IHJkc19pbmZvX3JkbWFfY29ubmVjdGlvbiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci90cHM2NTA3eC5oIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvdHBzNjUwN3guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODkyZjU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvdHBzNjUwN3guaApAQCAtMCwwICsxLDMyIEBACisvKgorICogdHBzNjUwN3guaCAgLS0gIFZvbHRhZ2UgcmVndWxhdGlvbiBmb3IgdGhlIFRleGFzIEluc3RydW1lbnRzIFRQUzY1MDdYCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIFJFR1VMQVRPUl9UUFM2NTA3WAorI2RlZmluZSBSRUdVTEFUT1JfVFBTNjUwN1gKKworLyoqCisgKiB0cHM2NTA3eF9yZWdfcGxhdGZvcm1fZGF0YSAtIHBsYXRmb3JtIGRhdGEgZm9yIHRwczY1MDd4CisgKiBAZGVmZGNkY19kZWZhdWx0OiBEZWZpbmVzIHdoZXRoZXIgRENEQyBoaWdoIG9yIHRoZSBsb3cgcmVnaXN0ZXIgY29udHJvbHMKKyAqCW91dHB1dCB2b2x0YWdlIGJ5IGRlZmF1bHQuIFZhbGlkIGZvciBEQ0RDMiBhbmQgRENEQzMgb3V0cHV0cyBvbmx5LgorICovCitzdHJ1Y3QgdHBzNjUwN3hfcmVnX3BsYXRmb3JtX2RhdGEgeworCWJvb2wgZGVmZGNkY19kZWZhdWx0OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKaW5kZXggM2I2MDNmNC4uYmEzOTQxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaApAQCAtMzYwLDcgKzM2MCw3IEBACiAvKiB0aGUgc3BvdCBmb3IgdGhlIHN1cGVyIGluIHZlcnNpb25zIDMuNSAtIDMuNS4xMCAoaW5jbHVzaXZlKSAqLwogI2RlZmluZSBSRUlTRVJGU19PTERfRElTS19PRkZTRVRfSU5fQllURVMgKDggKiAxMDI0KQogCi0vLyByZWlzZXJmcyBpbnRlcm5hbCBlcnJvciBjb2RlICh1c2VkIGJ5IHNlYXJjaF9ieV9rZXkgYWRuIGZpeF9ub2RlcykpCisvKiByZWlzZXJmcyBpbnRlcm5hbCBlcnJvciBjb2RlICh1c2VkIGJ5IHNlYXJjaF9ieV9rZXkgYW5kIGZpeF9ub2RlcykpICovCiAjZGVmaW5lIENBUlJZX09OICAgICAgMAogI2RlZmluZSBSRVBFQVRfU0VBUkNIIC0xCiAjZGVmaW5lIElPX0VSUk9SICAgICAgLTIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCmluZGV4IGZiYzhjYjAuLjU4ZDQ0NDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaApAQCAtMjgyLDYgKzI4Miw3IEBACiAJUlRBX1NFU1NJT04sIC8qIG5vIGxvbmdlciB1c2VkICovCiAJUlRBX01QX0FMR08sIC8qIG5vIGxvbmdlciB1c2VkICovCiAJUlRBX1RBQkxFLAorCVJUQV9NQVJLLAogCV9fUlRBX01BWAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDc0N2ZjYWUuLjk1OTE5MDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTIxNCw2ICsyMTQsNyBAQAogCiAjZGVmaW5lIHRhc2tfaXNfdHJhY2VkKHRhc2spCSgodGFzay0+c3RhdGUgJiBfX1RBU0tfVFJBQ0VEKSAhPSAwKQogI2RlZmluZSB0YXNrX2lzX3N0b3BwZWQodGFzaykJKCh0YXNrLT5zdGF0ZSAmIF9fVEFTS19TVE9QUEVEKSAhPSAwKQorI2RlZmluZSB0YXNrX2lzX2RlYWQodGFzaykJKCh0YXNrKS0+ZXhpdF9zdGF0ZSAhPSAwKQogI2RlZmluZSB0YXNrX2lzX3N0b3BwZWRfb3JfdHJhY2VkKHRhc2spCVwKIAkJCSgodGFzay0+c3RhdGUgJiAoX19UQVNLX1NUT1BQRUQgfCBfX1RBU0tfVFJBQ0VEKSkgIT0gMCkKICNkZWZpbmUgdGFza19jb250cmlidXRlc190b19sb2FkKHRhc2spCVwKQEAgLTI3MSwxOSArMjcyLDEwIEBACiAKIGV4dGVybiBjcHVtYXNrX3Zhcl90IG5vaHpfY3B1X21hc2s7CiAjaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiBkZWZpbmVkKENPTkZJR19OT19IWikKLWV4dGVybiBpbnQgc2VsZWN0X25vaHpfbG9hZF9iYWxhbmNlcihpbnQgY3B1KTsKLWV4dGVybiBpbnQgZ2V0X25vaHpfbG9hZF9iYWxhbmNlcih2b2lkKTsKLWV4dGVybiBpbnQgbm9oel9yYXRlbGltaXQoaW50IGNwdSk7CitleHRlcm4gdm9pZCBzZWxlY3Rfbm9oel9sb2FkX2JhbGFuY2VyKGludCBzdG9wX3RpY2spOworZXh0ZXJuIGludCBnZXRfbm9oel90aW1lcl90YXJnZXQodm9pZCk7CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgc2VsZWN0X25vaHpfbG9hZF9iYWxhbmNlcihpbnQgY3B1KQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBub2h6X3JhdGVsaW1pdChpbnQgY3B1KQotewotCXJldHVybiAwOwotfQorc3RhdGljIGlubGluZSB2b2lkIHNlbGVjdF9ub2h6X2xvYWRfYmFsYW5jZXIoaW50IHN0b3BfdGljaykgeyB9CiAjZW5kaWYKIAogLyoKQEAgLTMxNSwyMCArMzA3LDE2IEBACiAKIGV4dGVybiB2b2lkIHNjaGVkX3Nob3dfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogCi0jaWZkZWYgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQCi1leHRlcm4gdm9pZCBzb2Z0bG9ja3VwX3RpY2sodm9pZCk7CisjaWZkZWYgQ09ORklHX0xPQ0tVUF9ERVRFQ1RPUgogZXh0ZXJuIHZvaWQgdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZyh2b2lkKTsKIGV4dGVybiB2b2lkIHRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2dfc3luYyh2b2lkKTsKIGV4dGVybiB2b2lkIHRvdWNoX2FsbF9zb2Z0bG9ja3VwX3dhdGNoZG9ncyh2b2lkKTsKLWV4dGVybiBpbnQgcHJvY19kb3NvZnRsb2NrdXBfdGhyZXNoKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCi0JCQkJICAgIHZvaWQgX191c2VyICpidWZmZXIsCi0JCQkJICAgIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKTsKK2V4dGVybiBpbnQgcHJvY19kb3dhdGNoZG9nX3RocmVzaChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAorCQkJCSAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwKKwkJCQkgIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgIHNvZnRsb2NrdXBfcGFuaWM7CiBleHRlcm4gaW50IHNvZnRsb2NrdXBfdGhyZXNoOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBzb2Z0bG9ja3VwX3RpY2sodm9pZCkKLXsKLX0KIHN0YXRpYyBpbmxpbmUgdm9pZCB0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKHZvaWQpCiB7CiB9CkBAIC04MDQsNyArNzkyLDcgQEAKICNkZWZpbmUgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UJMHgwMTAwCS8qIEJhbGFuY2UgZm9yIHBvd2VyIHNhdmluZ3MgKi8KICNkZWZpbmUgU0RfU0hBUkVfUEtHX1JFU09VUkNFUwkweDAyMDAJLyogRG9tYWluIG1lbWJlcnMgc2hhcmUgY3B1IHBrZyByZXNvdXJjZXMgKi8KICNkZWZpbmUgU0RfU0VSSUFMSVpFCQkweDA0MDAJLyogT25seSBhIHNpbmdsZSBsb2FkIGJhbGFuY2luZyBpbnN0YW5jZSAqLwotCisjZGVmaW5lIFNEX0FTWU1fUEFDS0lORwkJMHgwODAwICAvKiBQbGFjZSBidXN5IGdyb3VwcyBlYXJsaWVyIGluIHRoZSBkb21haW4gKi8KICNkZWZpbmUgU0RfUFJFRkVSX1NJQkxJTkcJMHgxMDAwCS8qIFByZWZlciB0byBwbGFjZSB0YXNrcyBpbiBhIHNpYmxpbmcgZG9tYWluICovCiAKIGVudW0gcG93ZXJzYXZpbmdzX2JhbGFuY2VfbGV2ZWwgewpAQCAtODM5LDYgKzgyNyw4IEBACiAJcmV0dXJuIFNEX1BSRUZFUl9TSUJMSU5HOwogfQogCitleHRlcm4gaW50IF9fd2VhayBhcmNoX3NkX3NpYmlsaW5nX2FzeW1fcGFja2luZyh2b2lkKTsKKwogLyoKICAqIE9wdGltaXNlIFNEIGZsYWdzIGZvciBwb3dlciBzYXZpbmdzOgogICogU0RfQkFMQU5DRV9ORVdJRExFIGhlbHBzIGFncmVzc2l2ZSB0YXNrIGNvbnNvbGlkYXRpb24gYW5kIHBvd2VyIHNhdmluZ3MuCkBAIC04NjAsNyArODUwLDcgQEAKIAkgKiBDUFUgcG93ZXIgb2YgdGhpcyBncm91cCwgU0NIRURfTE9BRF9TQ0FMRSBiZWluZyBtYXggcG93ZXIgZm9yIGEKIAkgKiBzaW5nbGUgQ1BVLgogCSAqLwotCXVuc2lnbmVkIGludCBjcHVfcG93ZXI7CisJdW5zaWduZWQgaW50IGNwdV9wb3dlciwgY3B1X3Bvd2VyX29yaWc7CiAKIAkvKgogCSAqIFRoZSBDUFVzIHRoaXMgZ3JvdXAgY292ZXJzLgpAQCAtMTY5Niw2ICsxNjg2LDcgQEAKICNkZWZpbmUgUEZfRVhJVElORwkweDAwMDAwMDA0CS8qIGdldHRpbmcgc2h1dCBkb3duICovCiAjZGVmaW5lIFBGX0VYSVRQSURPTkUJMHgwMDAwMDAwOAkvKiBwaSBleGl0IGRvbmUgb24gc2h1dCBkb3duICovCiAjZGVmaW5lIFBGX1ZDUFUJCTB4MDAwMDAwMTAJLyogSSdtIGEgdmlydHVhbCBDUFUgKi8KKyNkZWZpbmUgUEZfV1FfV09SS0VSCTB4MDAwMDAwMjAJLyogSSdtIGEgd29ya3F1ZXVlIHdvcmtlciAqLwogI2RlZmluZSBQRl9GT1JLTk9FWEVDCTB4MDAwMDAwNDAJLyogZm9ya2VkIGJ1dCBkaWRuJ3QgZXhlYyAqLwogI2RlZmluZSBQRl9NQ0VfUFJPQ0VTUyAgMHgwMDAwMDA4MCAgICAgIC8qIHByb2Nlc3MgcG9saWN5IG9uIG1jZSBlcnJvcnMgKi8KICNkZWZpbmUgUEZfU1VQRVJQUklWCTB4MDAwMDAxMDAJLyogdXNlZCBzdXBlci11c2VyIHByaXZpbGVnZXMgKi8KQEAgLTE3OTAsMjAgKzE3ODEsMjMgQEAKICNlbmRpZgogCiAvKgotICogQXJjaGl0ZWN0dXJlcyBjYW4gc2V0IHRoaXMgdG8gMSBpZiB0aGV5IGhhdmUgc3BlY2lmaWVkCi0gKiBDT05GSUdfSEFWRV9VTlNUQUJMRV9TQ0hFRF9DTE9DSyBpbiB0aGVpciBhcmNoIEtjb25maWcsCi0gKiBidXQgdGhlbiBkdXJpbmcgYm9vdHVwIGl0IHR1cm5zIG91dCB0aGF0IHNjaGVkX2Nsb2NrKCkKLSAqIGlzIHJlbGlhYmxlIGFmdGVyIGFsbDoKKyAqIERvIG5vdCB1c2Ugb3V0c2lkZSBvZiBhcmNoaXRlY3R1cmUgY29kZSB3aGljaCBrbm93cyBpdHMgbGltaXRhdGlvbnMuCisgKgorICogc2NoZWRfY2xvY2soKSBoYXMgbm8gcHJvbWlzZSBvZiBtb25vdG9uaWNpdHkgb3IgYm91bmRlZCBkcmlmdCBiZXR3ZWVuCisgKiBDUFVzLCB1c2UgKHdoaWNoIHlvdSBzaG91bGQgbm90KSByZXF1aXJlcyBkaXNhYmxpbmcgSVJRcy4KKyAqCisgKiBQbGVhc2UgdXNlIG9uZSBvZiB0aGUgdGhyZWUgaW50ZXJmYWNlcyBiZWxvdy4KICAqLwotI2lmZGVmIENPTkZJR19IQVZFX1VOU1RBQkxFX1NDSEVEX0NMT0NLCi1leHRlcm4gaW50IHNjaGVkX2Nsb2NrX3N0YWJsZTsKLSNlbmRpZgotCi0vKiBmdHJhY2UgY2FsbHMgc2NoZWRfY2xvY2soKSBkaXJlY3RseSAqLwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBub3RyYWNlIHNjaGVkX2Nsb2NrKHZvaWQpOworLyoKKyAqIFNlZSB0aGUgY29tbWVudCBpbiBrZXJuZWwvc2NoZWRfY2xvY2suYworICovCitleHRlcm4gdTY0IGNwdV9jbG9jayhpbnQgY3B1KTsKK2V4dGVybiB1NjQgbG9jYWxfY2xvY2sodm9pZCk7CitleHRlcm4gdTY0IHNjaGVkX2Nsb2NrX2NwdShpbnQgY3B1KTsKKwogCiBleHRlcm4gdm9pZCBzY2hlZF9jbG9ja19pbml0KHZvaWQpOwotZXh0ZXJuIHU2NCBzY2hlZF9jbG9ja19jcHUoaW50IGNwdSk7CiAKICNpZm5kZWYgQ09ORklHX0hBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0sKIHN0YXRpYyBpbmxpbmUgdm9pZCBzY2hlZF9jbG9ja190aWNrKHZvaWQpCkBAIC0xODE4LDE3ICsxODEyLDE5IEBACiB7CiB9CiAjZWxzZQorLyoKKyAqIEFyY2hpdGVjdHVyZXMgY2FuIHNldCB0aGlzIHRvIDEgaWYgdGhleSBoYXZlIHNwZWNpZmllZAorICogQ09ORklHX0hBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0sgaW4gdGhlaXIgYXJjaCBLY29uZmlnLAorICogYnV0IHRoZW4gZHVyaW5nIGJvb3R1cCBpdCB0dXJucyBvdXQgdGhhdCBzY2hlZF9jbG9jaygpCisgKiBpcyByZWxpYWJsZSBhZnRlciBhbGw6CisgKi8KK2V4dGVybiBpbnQgc2NoZWRfY2xvY2tfc3RhYmxlOworCiBleHRlcm4gdm9pZCBzY2hlZF9jbG9ja190aWNrKHZvaWQpOwogZXh0ZXJuIHZvaWQgc2NoZWRfY2xvY2tfaWRsZV9zbGVlcF9ldmVudCh2b2lkKTsKIGV4dGVybiB2b2lkIHNjaGVkX2Nsb2NrX2lkbGVfd2FrZXVwX2V2ZW50KHU2NCBkZWx0YV9ucyk7CiAjZW5kaWYKIAotLyoKLSAqIEZvciBrZXJuZWwtaW50ZXJuYWwgdXNlOiBoaWdoLXNwZWVkIChidXQgc2xpZ2h0bHkgaW5jb3JyZWN0KSBwZXItY3B1Ci0gKiBjbG9jayBjb25zdHJ1Y3RlZCBmcm9tIHNjaGVkX2Nsb2NrKCk6Ci0gKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgY3B1X2Nsb2NrKGludCBjcHUpOwotCiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nCiB0YXNrX3NjaGVkX3J1bnRpbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgdGhyZWFkX2dyb3VwX3NjaGVkX3J1bnRpbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKQEAgLTI0MzQsMTggKzI0MzAsNiBAQAogCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCi0jaWZkZWYgQ09ORklHX1RSQUNJTkcKLWV4dGVybiB2b2lkCi1fX3RyYWNlX3NwZWNpYWwodm9pZCAqX190ciwgdm9pZCAqX19kYXRhLAotCQl1bnNpZ25lZCBsb25nIGFyZzEsIHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9fdHJhY2Vfc3BlY2lhbCh2b2lkICpfX3RyLCB2b2lkICpfX2RhdGEsCi0JCXVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMpCi17Ci19Ci0jZW5kaWYKLQogZXh0ZXJuIGxvbmcgc2NoZWRfc2V0YWZmaW5pdHkocGlkX3QgcGlkLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbmV3X21hc2spOwogZXh0ZXJuIGxvbmcgc2NoZWRfZ2V0YWZmaW5pdHkocGlkX3QgcGlkLCBzdHJ1Y3QgY3B1bWFzayAqbWFzayk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2N0cC5oIGIvaW5jbHVkZS9saW51eC9zY3RwLmgKaW5kZXggYzIwZDNjZS4uYzExYTI4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY3RwLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY3RwLmgKQEAgLTYxLDcgKzYxLDcgQEAKIAlfX2JlMTYgZGVzdDsKIAlfX2JlMzIgdnRhZzsKIAlfX2xlMzIgY2hlY2tzdW07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfc2N0cGhkcl90OworfSBfX3BhY2tlZCBzY3RwX3NjdHBoZHJfdDsKIAogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KQEAgLTc3LDcgKzc3LDcgQEAKIAlfX3U4IHR5cGU7CiAJX191OCBmbGFnczsKIAlfX2JlMTYgbGVuZ3RoOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX2NodW5raGRyX3Q7Cit9IF9fcGFja2VkIHNjdHBfY2h1bmtoZHJfdDsKIAogCiAvKiBTZWN0aW9uIDMuMi4gIENodW5rIFR5cGUgVmFsdWVzLgpAQCAtMTY3LDcgKzE2Nyw3IEBACiB0eXBlZGVmIHN0cnVjdCBzY3RwX3BhcmFtaGRyIHsKIAlfX2JlMTYgdHlwZTsKIAlfX2JlMTYgbGVuZ3RoOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX3BhcmFtaGRyX3Q7Cit9IF9fcGFja2VkIHNjdHBfcGFyYW1oZHJfdDsKIAogdHlwZWRlZiBlbnVtIHsKIApAQCAtMjI4LDEyICsyMjgsMTIgQEAKIAlfX2JlMTYgc3NuOwogCV9fYmUzMiBwcGlkOwogCV9fdTggIHBheWxvYWRbMF07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfZGF0YWhkcl90OworfSBfX3BhY2tlZCBzY3RwX2RhdGFoZHJfdDsKIAogdHlwZWRlZiBzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rIHsKICAgICAgICAgc2N0cF9jaHVua2hkcl90IGNodW5rX2hkcjsKICAgICAgICAgc2N0cF9kYXRhaGRyX3QgIGRhdGFfaGRyOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX2RhdGFfY2h1bmtfdDsKK30gX19wYWNrZWQgc2N0cF9kYXRhX2NodW5rX3Q7CiAKIC8qIERBVEEgQ2h1Y2sgU3BlY2lmaWMgRmxhZ3MgKi8KIGVudW0gewpAQCAtMjU5LDc4ICsyNTksNzggQEAKIAlfX2JlMTYgbnVtX2luYm91bmRfc3RyZWFtczsKIAlfX2JlMzIgaW5pdGlhbF90c247CiAJX191OCAgcGFyYW1zWzBdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX2luaXRoZHJfdDsKK30gX19wYWNrZWQgc2N0cF9pbml0aGRyX3Q7CiAKIHR5cGVkZWYgc3RydWN0IHNjdHBfaW5pdF9jaHVuayB7CiAJc2N0cF9jaHVua2hkcl90IGNodW5rX2hkcjsKIAlzY3RwX2luaXRoZHJfdCBpbml0X2hkcjsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc2N0cF9pbml0X2NodW5rX3Q7Cit9IF9fcGFja2VkIHNjdHBfaW5pdF9jaHVua190OwogCiAKIC8qIFNlY3Rpb24gMy4zLjIuMS4gSVB2NCBBZGRyZXNzIFBhcmFtZXRlciAoNSkgKi8KIHR5cGVkZWYgc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0gewogCXNjdHBfcGFyYW1oZHJfdCBwYXJhbV9oZHI7CiAJc3RydWN0IGluX2FkZHIgIGFkZHI7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfaXB2NGFkZHJfcGFyYW1fdDsKK30gX19wYWNrZWQgc2N0cF9pcHY0YWRkcl9wYXJhbV90OwogCiAvKiBTZWN0aW9uIDMuMy4yLjEuIElQdjYgQWRkcmVzcyBQYXJhbWV0ZXIgKDYpICovCiB0eXBlZGVmIHN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtIHsKIAlzY3RwX3BhcmFtaGRyX3QgcGFyYW1faGRyOwogCXN0cnVjdCBpbjZfYWRkciBhZGRyOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX2lwdjZhZGRyX3BhcmFtX3Q7Cit9IF9fcGFja2VkIHNjdHBfaXB2NmFkZHJfcGFyYW1fdDsKIAogLyogU2VjdGlvbiAzLjMuMi4xIENvb2tpZSBQcmVzZXJ2YXRpdmUgKDkpICovCiB0eXBlZGVmIHN0cnVjdCBzY3RwX2Nvb2tpZV9wcmVzZXJ2ZV9wYXJhbSB7CiAJc2N0cF9wYXJhbWhkcl90IHBhcmFtX2hkcjsKIAlfX2JlMzIgICAgICAgICAgbGlmZXNwYW5faW5jcmVtZW50OwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX2Nvb2tpZV9wcmVzZXJ2ZV9wYXJhbV90OworfSBfX3BhY2tlZCBzY3RwX2Nvb2tpZV9wcmVzZXJ2ZV9wYXJhbV90OwogCiAvKiBTZWN0aW9uIDMuMy4yLjEgSG9zdCBOYW1lIEFkZHJlc3MgKDExKSAqLwogdHlwZWRlZiBzdHJ1Y3Qgc2N0cF9ob3N0bmFtZV9wYXJhbSB7CiAJc2N0cF9wYXJhbWhkcl90IHBhcmFtX2hkcjsKIAl1aW50OF90IGhvc3RuYW1lWzBdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX2hvc3RuYW1lX3BhcmFtX3Q7Cit9IF9fcGFja2VkIHNjdHBfaG9zdG5hbWVfcGFyYW1fdDsKIAogLyogU2VjdGlvbiAzLjMuMi4xIFN1cHBvcnRlZCBBZGRyZXNzIFR5cGVzICgxMikgKi8KIHR5cGVkZWYgc3RydWN0IHNjdHBfc3VwcG9ydGVkX2FkZHJzX3BhcmFtIHsKIAlzY3RwX3BhcmFtaGRyX3QgcGFyYW1faGRyOwogCV9fYmUxNiB0eXBlc1swXTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc2N0cF9zdXBwb3J0ZWRfYWRkcnNfcGFyYW1fdDsKK30gX19wYWNrZWQgc2N0cF9zdXBwb3J0ZWRfYWRkcnNfcGFyYW1fdDsKIAogLyogQXBwZW5kaXggQS4gRUNOIENhcGFibGUgKDMyNzY4KSAqLwogdHlwZWRlZiBzdHJ1Y3Qgc2N0cF9lY25fY2FwYWJsZV9wYXJhbSB7CiAJc2N0cF9wYXJhbWhkcl90IHBhcmFtX2hkcjsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc2N0cF9lY25fY2FwYWJsZV9wYXJhbV90OworfSBfX3BhY2tlZCBzY3RwX2Vjbl9jYXBhYmxlX3BhcmFtX3Q7CiAKIC8qIEFERElQIFNlY3Rpb24gMy4yLjYgQWRhcHRhdGlvbiBMYXllciBJbmRpY2F0aW9uICovCiB0eXBlZGVmIHN0cnVjdCBzY3RwX2FkYXB0YXRpb25faW5kX3BhcmFtIHsKIAlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwYXJhbV9oZHI7CiAJX19iZTMyIGFkYXB0YXRpb25faW5kOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX2FkYXB0YXRpb25faW5kX3BhcmFtX3Q7Cit9IF9fcGFja2VkIHNjdHBfYWRhcHRhdGlvbl9pbmRfcGFyYW1fdDsKIAogLyogQURESVAgU2VjdGlvbiA0LjIuNyBTdXBwb3J0ZWQgRXh0ZW5zaW9ucyBQYXJhbWV0ZXIgKi8KIHR5cGVkZWYgc3RydWN0IHNjdHBfc3VwcG9ydGVkX2V4dF9wYXJhbSB7CiAJc3RydWN0IHNjdHBfcGFyYW1oZHIgcGFyYW1faGRyOwogCV9fdTggY2h1bmtzWzBdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX3N1cHBvcnRlZF9leHRfcGFyYW1fdDsKK30gX19wYWNrZWQgc2N0cF9zdXBwb3J0ZWRfZXh0X3BhcmFtX3Q7CiAKIC8qIEFVVEggU2VjdGlvbiAzLjEgUmFuZG9tICovCiB0eXBlZGVmIHN0cnVjdCBzY3RwX3JhbmRvbV9wYXJhbSB7CiAJc2N0cF9wYXJhbWhkcl90IHBhcmFtX2hkcjsKIAlfX3U4IHJhbmRvbV92YWxbMF07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfcmFuZG9tX3BhcmFtX3Q7Cit9IF9fcGFja2VkIHNjdHBfcmFuZG9tX3BhcmFtX3Q7CiAKIC8qIEFVVEggU2VjdGlvbiAzLjIgQ2h1bmsgTGlzdCAqLwogdHlwZWRlZiBzdHJ1Y3Qgc2N0cF9jaHVua3NfcGFyYW0gewogCXNjdHBfcGFyYW1oZHJfdCBwYXJhbV9oZHI7CiAJX191OCBjaHVua3NbMF07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfY2h1bmtzX3BhcmFtX3Q7Cit9IF9fcGFja2VkIHNjdHBfY2h1bmtzX3BhcmFtX3Q7CiAKIC8qIEFVVEggU2VjdGlvbiAzLjMgSE1BQyBBbGdvcml0aG0gKi8KIHR5cGVkZWYgc3RydWN0IHNjdHBfaG1hY19hbGdvX3BhcmFtIHsKIAlzY3RwX3BhcmFtaGRyX3QgcGFyYW1faGRyOwogCV9fYmUxNiBobWFjX2lkc1swXTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc2N0cF9obWFjX2FsZ29fcGFyYW1fdDsKK30gX19wYWNrZWQgc2N0cF9obWFjX2FsZ29fcGFyYW1fdDsKIAogLyogUkZDIDI5NjAuICBTZWN0aW9uIDMuMy4zIEluaXRpYXRpb24gQWNrbm93bGVkZ2VtZW50IChJTklUIEFDSykgKDIpOgogICogICBUaGUgSU5JVCBBQ0sgY2h1bmsgaXMgdXNlZCB0byBhY2tub3dsZWRnZSB0aGUgaW5pdGlhdGlvbiBvZiBhbiBTQ1RQCkBAIC0zNDIsMTMgKzM0MiwxMyBAQAogdHlwZWRlZiBzdHJ1Y3Qgc2N0cF9jb29raWVfcGFyYW0gewogCXNjdHBfcGFyYW1oZHJfdCBwOwogCV9fdTggYm9keVswXTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc2N0cF9jb29raWVfcGFyYW1fdDsKK30gX19wYWNrZWQgc2N0cF9jb29raWVfcGFyYW1fdDsKIAogLyogU2VjdGlvbiAzLjMuMy4xIFVucmVjb2duaXplZCBQYXJhbWV0ZXJzICg4KSAqLwogdHlwZWRlZiBzdHJ1Y3Qgc2N0cF91bnJlY29nbml6ZWRfcGFyYW0gewogCXNjdHBfcGFyYW1oZHJfdCBwYXJhbV9oZHI7CiAJc2N0cF9wYXJhbWhkcl90IHVucmVjb2duaXplZDsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc2N0cF91bnJlY29nbml6ZWRfcGFyYW1fdDsKK30gX19wYWNrZWQgc2N0cF91bnJlY29nbml6ZWRfcGFyYW1fdDsKIAogCiAKQEAgLTM2Myw3ICszNjMsNyBAQAogdHlwZWRlZiBzdHJ1Y3Qgc2N0cF9nYXBfYWNrX2Jsb2NrIHsKIAlfX2JlMTYgc3RhcnQ7CiAJX19iZTE2IGVuZDsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc2N0cF9nYXBfYWNrX2Jsb2NrX3Q7Cit9IF9fcGFja2VkIHNjdHBfZ2FwX2Fja19ibG9ja190OwogCiB0eXBlZGVmIF9fYmUzMiBzY3RwX2R1cF90c25fdDsKIApAQCAtMzc4LDEyICszNzgsMTIgQEAKIAlfX2JlMTYgbnVtX2dhcF9hY2tfYmxvY2tzOwogCV9fYmUxNiBudW1fZHVwX3RzbnM7CiAJc2N0cF9zYWNrX3ZhcmlhYmxlX3QgdmFyaWFibGVbMF07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfc2Fja2hkcl90OworfSBfX3BhY2tlZCBzY3RwX3NhY2toZHJfdDsKIAogdHlwZWRlZiBzdHJ1Y3Qgc2N0cF9zYWNrX2NodW5rIHsKIAlzY3RwX2NodW5raGRyX3QgY2h1bmtfaGRyOwogCXNjdHBfc2Fja2hkcl90IHNhY2tfaGRyOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX3NhY2tfY2h1bmtfdDsKK30gX19wYWNrZWQgc2N0cF9zYWNrX2NodW5rX3Q7CiAKIAogLyogUkZDIDI5NjAuICBTZWN0aW9uIDMuMy41IEhlYXJ0YmVhdCBSZXF1ZXN0IChIRUFSVEJFQVQpICg0KToKQEAgLTM5NSwxMiArMzk1LDEyIEBACiAKIHR5cGVkZWYgc3RydWN0IHNjdHBfaGVhcnRiZWF0aGRyIHsKIAlzY3RwX3BhcmFtaGRyX3QgaW5mbzsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc2N0cF9oZWFydGJlYXRoZHJfdDsKK30gX19wYWNrZWQgc2N0cF9oZWFydGJlYXRoZHJfdDsKIAogdHlwZWRlZiBzdHJ1Y3Qgc2N0cF9oZWFydGJlYXRfY2h1bmsgewogCXNjdHBfY2h1bmtoZHJfdCBjaHVua19oZHI7CiAJc2N0cF9oZWFydGJlYXRoZHJfdCBoYl9oZHI7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfaGVhcnRiZWF0X2NodW5rX3Q7Cit9IF9fcGFja2VkIHNjdHBfaGVhcnRiZWF0X2NodW5rX3Q7CiAKIAogLyogRm9yIHRoZSBhYm9ydCBhbmQgc2h1dGRvd24gQUNLIHdlIG11c3QgY2FycnkgdGhlIGluaXQgdGFnIGluIHRoZQpAQCAtNDA5LDcgKzQwOSw3IEBACiAgKi8KIHR5cGVkZWYgc3RydWN0IHNjdHBfYWJvcnRfY2h1bmsgewogICAgICAgICBzY3RwX2NodW5raGRyX3QgdWg7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfYWJvcnRfY2h1bmtfdDsKK30gX19wYWNrZWQgc2N0cF9hYm9ydF9jaHVua190OwogCiAKIC8qIEZvciB0aGUgZ3JhY2VmdWwgc2h1dGRvd24gd2UgbXVzdCBjYXJyeSB0aGUgdGFnIChpbiBjb21tb24gaGVhZGVyKQpAQCAtNDE3LDEyICs0MTcsMTIgQEAKICAqLwogdHlwZWRlZiBzdHJ1Y3Qgc2N0cF9zaHV0ZG93bmhkciB7CiAJX19iZTMyIGN1bV90c25fYWNrOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX3NodXRkb3duaGRyX3Q7Cit9IF9fcGFja2VkIHNjdHBfc2h1dGRvd25oZHJfdDsKIAogc3RydWN0IHNjdHBfc2h1dGRvd25fY2h1bmtfdCB7CiAgICAgICAgIHNjdHBfY2h1bmtoZHJfdCAgICBjaHVua19oZHI7CiAgICAgICAgIHNjdHBfc2h1dGRvd25oZHJfdCBzaHV0ZG93bl9oZHI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIFJGQyAyOTYwLiAgU2VjdGlvbiAzLjMuMTAgT3BlcmF0aW9uIEVycm9yIChFUlJPUikgKDkpICovCiAKQEAgLTQzMCwxMiArNDMwLDEyIEBACiAJX19iZTE2IGNhdXNlOwogCV9fYmUxNiBsZW5ndGg7CiAJX191OCAgdmFyaWFibGVbMF07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfZXJyaGRyX3Q7Cit9IF9fcGFja2VkIHNjdHBfZXJyaGRyX3Q7CiAKIHR5cGVkZWYgc3RydWN0IHNjdHBfb3BlcnJfY2h1bmsgewogICAgICAgICBzY3RwX2NodW5raGRyX3QgY2h1bmtfaGRyOwogCXNjdHBfZXJyaGRyX3QgICBlcnJfaGRyOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX29wZXJyX2NodW5rX3Q7Cit9IF9fcGFja2VkIHNjdHBfb3BlcnJfY2h1bmtfdDsKIAogLyogUkZDIDI5NjAgMy4zLjEwIC0gT3BlcmF0aW9uIEVycm9yCiAgKgpAQCAtNTI1LDcgKzUyNSw3IEBACiB0eXBlZGVmIHN0cnVjdCBzY3RwX2VjbmVfY2h1bmsgewogCXNjdHBfY2h1bmtoZHJfdCBjaHVua19oZHI7CiAJc2N0cF9lY25laGRyX3QgZW5jZV9oZHI7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfZWNuZV9jaHVua190OworfSBfX3BhY2tlZCBzY3RwX2VjbmVfY2h1bmtfdDsKIAogLyogUkZDIDI5NjAuICBBcHBlbmRpeCBBLiAgRXhwbGljaXQgQ29uZ2VzdGlvbiBOb3RpZmljYXRpb24uCiAgKiAgIENvbmdlc3Rpb24gV2luZG93IFJlZHVjZWQgKENXUikgKDEzKQpAQCAtNTM3LDcgKzUzNyw3IEBACiB0eXBlZGVmIHN0cnVjdCBzY3RwX2N3cl9jaHVuayB7CiAJc2N0cF9jaHVua2hkcl90IGNodW5rX2hkcjsKIAlzY3RwX2N3cmhkcl90IGN3cl9oZHI7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfY3dyX2NodW5rX3Q7Cit9IF9fcGFja2VkIHNjdHBfY3dyX2NodW5rX3Q7CiAKIC8qIFBSLVNDVFAKICAqIDMuMiBGb3J3YXJkIEN1bXVsYXRpdmUgVFNOIENodW5rIERlZmluaXRpb24gKEZPUldBUkQgVFNOKQpAQCAtNTg4LDE3ICs1ODgsMTcgQEAKIHN0cnVjdCBzY3RwX2Z3ZHRzbl9za2lwIHsKIAlfX2JlMTYgc3RyZWFtOwogCV9fYmUxNiBzc247Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHNjdHBfZndkdHNuX2hkciB7CiAJX19iZTMyIG5ld19jdW1fdHNuOwogCXN0cnVjdCBzY3RwX2Z3ZHRzbl9za2lwIHNraXBbMF07Ci19IF9fYXR0cmlidXRlKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBzY3RwX2Z3ZHRzbl9jaHVuayB7CiAJc3RydWN0IHNjdHBfY2h1bmtoZHIgY2h1bmtfaGRyOwogCXN0cnVjdCBzY3RwX2Z3ZHRzbl9oZHIgZndkdHNuX2hkcjsKLX0gX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogCiAvKiBBRERJUApAQCAtNjM2LDE3ICs2MzYsMTcgQEAKIHR5cGVkZWYgc3RydWN0IHNjdHBfYWRkaXBfcGFyYW0gewogCXNjdHBfcGFyYW1oZHJfdAlwYXJhbV9oZHI7CiAJX19iZTMyCQljcnJfaWQ7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfYWRkaXBfcGFyYW1fdDsKK30gX19wYWNrZWQgc2N0cF9hZGRpcF9wYXJhbV90OwogCiB0eXBlZGVmIHN0cnVjdCBzY3RwX2FkZGlwaGRyIHsKIAlfX2JlMzIJc2VyaWFsOwogCV9fdTgJcGFyYW1zWzBdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX2FkZGlwaGRyX3Q7Cit9IF9fcGFja2VkIHNjdHBfYWRkaXBoZHJfdDsKIAogdHlwZWRlZiBzdHJ1Y3Qgc2N0cF9hZGRpcF9jaHVuayB7CiAJc2N0cF9jaHVua2hkcl90IGNodW5rX2hkcjsKIAlzY3RwX2FkZGlwaGRyX3QgYWRkaXBfaGRyOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX2FkZGlwX2NodW5rX3Q7Cit9IF9fcGFja2VkIHNjdHBfYWRkaXBfY2h1bmtfdDsKIAogLyogQVVUSAogICogU2VjdGlvbiA0LjEgIEF1dGhlbnRpY2F0aW9uIENodW5rIChBVVRIKQpAQCAtNzAxLDExICs3MDEsMTEgQEAKIAlfX2JlMTYgc2hrZXlfaWQ7CiAJX19iZTE2IGhtYWNfaWQ7CiAJX191OCAgIGhtYWNbMF07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfYXV0aGhkcl90OworfSBfX3BhY2tlZCBzY3RwX2F1dGhoZHJfdDsKIAogdHlwZWRlZiBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rIHsKIAlzY3RwX2NodW5raGRyX3QgY2h1bmtfaGRyOwogCXNjdHBfYXV0aGhkcl90IGF1dGhfaGRyOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX2F1dGhfY2h1bmtfdDsKK30gX19wYWNrZWQgc2N0cF9hdXRoX2NodW5rX3Q7CiAKICNlbmRpZiAvKiBfX0xJTlVYX1NDVFBfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKaW5kZXggMGM4ODE5MS4uNzIzYTkzZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaApAQCAtNDcwLDggKzQ3MCw2IEBACiAgKiBAcGF0aF90cnVuY2F0ZToKICAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIHRydW5jYXRpbmcgYSBmaWxlLgogICoJQHBhdGggY29udGFpbnMgdGhlIHBhdGggc3RydWN0dXJlIGZvciB0aGUgZmlsZS4KLSAqCUBsZW5ndGggaXMgdGhlIG5ldyBsZW5ndGggb2YgdGhlIGZpbGUuCi0gKglAdGltZV9hdHRycyBpcyB0aGUgZmxhZ3MgcGFzc2VkIHRvIGRvX3RydW5jYXRlKCkuCiAgKglSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKiBAaW5vZGVfZ2V0YXR0cjoKICAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIG9idGFpbmluZyBmaWxlIGF0dHJpYnV0ZXMuCkBAIC0xNDEyLDggKzE0MTAsNyBAQAogCWludCAoKnBhdGhfcm1kaXIpIChzdHJ1Y3QgcGF0aCAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogCWludCAoKnBhdGhfbWtub2QpIChzdHJ1Y3QgcGF0aCAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlLAogCQkJICAgdW5zaWduZWQgaW50IGRldik7Ci0JaW50ICgqcGF0aF90cnVuY2F0ZSkgKHN0cnVjdCBwYXRoICpwYXRoLCBsb2ZmX3QgbGVuZ3RoLAotCQkJICAgICAgdW5zaWduZWQgaW50IHRpbWVfYXR0cnMpOworCWludCAoKnBhdGhfdHJ1bmNhdGUpIChzdHJ1Y3QgcGF0aCAqcGF0aCk7CiAJaW50ICgqcGF0aF9zeW1saW5rKSAoc3RydWN0IHBhdGggKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkJICAgICBjb25zdCBjaGFyICpvbGRfbmFtZSk7CiAJaW50ICgqcGF0aF9saW5rKSAoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IHBhdGggKm5ld19kaXIsCkBAIC0yODA2LDggKzI4MDMsNyBAQAogaW50IHNlY3VyaXR5X3BhdGhfcm1kaXIoc3RydWN0IHBhdGggKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIGludCBzZWN1cml0eV9wYXRoX21rbm9kKHN0cnVjdCBwYXRoICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsCiAJCQl1bnNpZ25lZCBpbnQgZGV2KTsKLWludCBzZWN1cml0eV9wYXRoX3RydW5jYXRlKHN0cnVjdCBwYXRoICpwYXRoLCBsb2ZmX3QgbGVuZ3RoLAotCQkJICAgdW5zaWduZWQgaW50IHRpbWVfYXR0cnMpOworaW50IHNlY3VyaXR5X3BhdGhfdHJ1bmNhdGUoc3RydWN0IHBhdGggKnBhdGgpOwogaW50IHNlY3VyaXR5X3BhdGhfc3ltbGluayhzdHJ1Y3QgcGF0aCAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCQkgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTsKIGludCBzZWN1cml0eV9wYXRoX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IHBhdGggKm5ld19kaXIsCkBAIC0yODQxLDggKzI4MzcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9wYXRoX3RydW5jYXRlKHN0cnVjdCBwYXRoICpwYXRoLCBsb2ZmX3QgbGVuZ3RoLAotCQkJCQkgdW5zaWduZWQgaW50IHRpbWVfYXR0cnMpCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9wYXRoX3RydW5jYXRlKHN0cnVjdCBwYXRoICpwYXRoKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKaW5kZXggZjg5ZTdmZC4uZDIwZDllNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC0xNjksNiArMTY5LDcgQEAKICAqIEBzb2Z0d2FyZToJCWdlbmVyYXRlIHNvZnR3YXJlIHRpbWUgc3RhbXAKICAqIEBpbl9wcm9ncmVzczoJZGV2aWNlIGRyaXZlciBpcyBnb2luZyB0byBwcm92aWRlCiAgKgkJCWhhcmR3YXJlIHRpbWUgc3RhbXAKKyAqIEBwcmV2ZW50X3NrX29ycGhhbjoJbWFrZSBzayByZWZlcmVuY2UgYXZhaWxhYmxlIG9uIGRyaXZlciBsZXZlbAogICogQGZsYWdzOgkJYWxsIHNoYXJlZF90eCBmbGFncwogICoKICAqIFRoZXNlIGZsYWdzIGFyZSBhdHRhY2hlZCB0byBwYWNrZXRzIGFzIHBhcnQgb2YgdGhlCkBAIC0xNzgsNyArMTc5LDggQEAKIAlzdHJ1Y3QgewogCQlfX3U4CWhhcmR3YXJlOjEsCiAJCQlzb2Z0d2FyZToxLAotCQkJaW5fcHJvZ3Jlc3M6MTsKKwkJCWluX3Byb2dyZXNzOjEsCisJCQlwcmV2ZW50X3NrX29ycGhhbjoxOwogCX07CiAJX191OCBmbGFnczsKIH07CkBAIC0yMDIsMTAgKzIwNCwxMSBAQAogCSAqLwogCWF0b21pY190CWRhdGFyZWY7CiAKLQlza2JfZnJhZ190CWZyYWdzW01BWF9TS0JfRlJBR1NdOwogCS8qIEludGVybWVkaWF0ZSBsYXllcnMgbXVzdCBlbnN1cmUgdGhhdCBkZXN0cnVjdG9yX2FyZwogCSAqIHJlbWFpbnMgdmFsaWQgdW50aWwgc2tiIGRlc3RydWN0b3IgKi8KIAl2b2lkICoJCWRlc3RydWN0b3JfYXJnOworCS8qIG11c3QgYmUgbGFzdCBmaWVsZCwgc2VlIHBza2JfZXhwYW5kX2hlYWQoKSAqLworCXNrYl9mcmFnX3QJZnJhZ3NbTUFYX1NLQl9GUkFHU107CiB9OwogCiAvKiBXZSBkaXZpZGUgZGF0YXJlZiBpbnRvIHR3byBoYWx2ZXMuICBUaGUgaGlnaGVyIDE2IGJpdHMgaG9sZCByZWZlcmVuY2VzCkBAIC0xNDE0LDEyICsxNDE3LDE0IEBACiAgKgogICogVmFyaW91cyBwYXJ0cyBvZiB0aGUgbmV0d29ya2luZyBsYXllciBleHBlY3QgYXQgbGVhc3QgMzIgYnl0ZXMgb2YKICAqIGhlYWRyb29tLCB5b3Ugc2hvdWxkIG5vdCByZWR1Y2UgdGhpcy4KLSAqIFdpdGggUlBTLCB3ZSByYWlzZWQgTkVUX1NLQl9QQUQgdG8gNjQgc28gdGhhdCBnZXRfcnBzX2NwdXMoKSBmZXRjaGVzIHNwYW4KLSAqIGEgNjQgYnl0ZXMgYWxpZ25lZCBibG9jayB0byBmaXQgbW9kZXJuICg+PSA2NCBieXRlcykgY2FjaGUgbGluZSBzaXplcworICoKKyAqIFVzaW5nIG1heCgzMiwgTDFfQ0FDSEVfQllURVMpIG1ha2VzIHNlbnNlIChlc3BlY2lhbGx5IHdpdGggUlBTKQorICogdG8gcmVkdWNlIGF2ZXJhZ2UgbnVtYmVyIG9mIGNhY2hlIGxpbmVzIHBlciBwYWNrZXQuCisgKiBnZXRfcnBzX2NwdXMoKSBmb3IgZXhhbXBsZSBvbmx5IGFjY2VzcyBvbmUgNjQgYnl0ZXMgYWxpZ25lZCBibG9jayA6CiAgKiBORVRfSVBfQUxJR04oMikgKyBldGhlcm5ldF9oZWFkZXIoMTQpICsgSVBfaGVhZGVyKDIwLzQwKSArIHBvcnRzKDgpCiAgKi8KICNpZm5kZWYgTkVUX1NLQl9QQUQKLSNkZWZpbmUgTkVUX1NLQl9QQUQJNjQKKyNkZWZpbmUgTkVUX1NLQl9QQUQJbWF4KDMyLCBMMV9DQUNIRV9CWVRFUykKICNlbmRpZgogCiBleHRlcm4gaW50IF9fX3Bza2JfdHJpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKTsKQEAgLTE5MzEsNiArMTkzNiwzNiBAQAogCXJldHVybiBrdGltZV9zZXQoMCwgMCk7CiB9CiAKK2V4dGVybiB2b2lkIHNrYl90aW1lc3RhbXBpbmdfaW5pdCh2b2lkKTsKKworI2lmZGVmIENPTkZJR19ORVRXT1JLX1BIWV9USU1FU1RBTVBJTkcKKworZXh0ZXJuIHZvaWQgc2tiX2Nsb25lX3R4X3RpbWVzdGFtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBib29sIHNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKyNlbHNlIC8qIENPTkZJR19ORVRXT1JLX1BIWV9USU1FU1RBTVBJTkcgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHNrYl9jbG9uZV90eF90aW1lc3RhbXAoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKK30KKworc3RhdGljIGlubGluZSBib29sIHNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisKKyNlbmRpZiAvKiAhQ09ORklHX05FVFdPUktfUEhZX1RJTUVTVEFNUElORyAqLworCisvKioKKyAqIHNrYl9jb21wbGV0ZV90eF90aW1lc3RhbXAoKSAtIGRlbGl2ZXIgY2xvbmVkIHNrYiB3aXRoIHR4IHRpbWVzdGFtcHMKKyAqCisgKiBAc2tiOiBjbG9uZSBvZiB0aGUgdGhlIG9yaWdpbmFsIG91dGdvaW5nIHBhY2tldAorICogQGh3dHN0YW1wczogaGFyZHdhcmUgdGltZSBzdGFtcHMKKyAqCisgKi8KK3ZvaWQgc2tiX2NvbXBsZXRlX3R4X3RpbWVzdGFtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgIHN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyAqaHd0c3RhbXBzKTsKKwogLyoqCiAgKiBza2JfdHN0YW1wX3R4IC0gcXVldWUgY2xvbmUgb2Ygc2tiIHdpdGggc2VuZCB0aW1lIHN0YW1wcwogICogQG9yaWdfc2tiOgl0aGUgb3JpZ2luYWwgb3V0Z29pbmcgcGFja2V0CkBAIC0xOTQ1LDYgKzE5ODAsMjggQEAKIGV4dGVybiB2b2lkIHNrYl90c3RhbXBfdHgoc3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLAogCQkJc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzICpod3RzdGFtcHMpOwogCitzdGF0aWMgaW5saW5lIHZvaWQgc3dfdHhfdGltZXN0YW1wKHN0cnVjdCBza19idWZmICpza2IpCit7CisJdW5pb24gc2tiX3NoYXJlZF90eCAqc2h0eCA9IHNrYl90eChza2IpOworCWlmIChzaHR4LT5zb2Z0d2FyZSAmJiAhc2h0eC0+aW5fcHJvZ3Jlc3MpCisJCXNrYl90c3RhbXBfdHgoc2tiLCBOVUxMKTsKK30KKworLyoqCisgKiBza2JfdHhfdGltZXN0YW1wKCkgLSBEcml2ZXIgaG9vayBmb3IgdHJhbnNtaXQgdGltZXN0YW1waW5nCisgKgorICogRXRoZXJuZXQgTUFDIERyaXZlcnMgc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiB0aGVpciBoYXJkX3htaXQoKQorICogZnVuY3Rpb24gYXMgc29vbiBhcyBwb3NzaWJsZSBhZnRlciBnaXZpbmcgdGhlIHNrX2J1ZmYgdG8gdGhlIE1BQworICogaGFyZHdhcmUsIGJ1dCBiZWZvcmUgZnJlZWluZyB0aGUgc2tfYnVmZi4KKyAqCisgKiBAc2tiOiBBIHNvY2tldCBidWZmZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBza2JfdHhfdGltZXN0YW1wKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc2tiX2Nsb25lX3R4X3RpbWVzdGFtcChza2IpOworCXN3X3R4X3RpbWVzdGFtcChza2IpOworfQorCiBleHRlcm4gX19zdW0xNiBfX3NrYl9jaGVja3N1bV9jb21wbGV0ZV9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pOwogZXh0ZXJuIF9fc3VtMTYgX19za2JfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKQEAgLTIxMzIsNyArMjE4OSw4IEBACiAJLyogTFJPIHNldHMgZ3NvX3NpemUgYnV0IG5vdCBnc29fdHlwZSwgd2hlcmVhcyBpZiBHU08gaXMgcmVhbGx5CiAJICogd2FudGVkIHRoZW4gZ3NvX3R5cGUgd2lsbCBiZSBzZXQuICovCiAJc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvID0gc2tiX3NoaW5mbyhza2IpOwotCWlmIChzaGluZm8tPmdzb19zaXplICE9IDAgJiYgdW5saWtlbHkoc2hpbmZvLT5nc29fdHlwZSA9PSAwKSkgeworCWlmIChza2JfaXNfbm9ubGluZWFyKHNrYikgJiYgc2hpbmZvLT5nc29fc2l6ZSAhPSAwICYmCisJICAgIHVubGlrZWx5KHNoaW5mby0+Z3NvX3R5cGUgPT0gMCkpIHsKIAkJX19za2Jfd2Fybl9scm9fZm9yd2FyZGluZyhza2IpOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NsYWIuaCBiL2luY2x1ZGUvbGludXgvc2xhYi5oCmluZGV4IDQ5ZDEyNDcuLjU5MjYwZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2xhYi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2xhYi5oCkBAIC0yNjgsNyArMjY4LDggQEAKICAqIGFsbG9jYXRvciB3aGVyZSB3ZSBjYXJlIGFib3V0IHRoZSByZWFsIHBsYWNlIHRoZSBtZW1vcnkgYWxsb2NhdGlvbgogICogcmVxdWVzdCBjb21lcyBmcm9tLgogICovCi0jaWYgZGVmaW5lZChDT05GSUdfREVCVUdfU0xBQikgfHwgZGVmaW5lZChDT05GSUdfU0xVQikKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19TTEFCKSB8fCBkZWZpbmVkKENPTkZJR19TTFVCKSB8fCBcCisJKGRlZmluZWQoQ09ORklHX1NMQUIpICYmIGRlZmluZWQoQ09ORklHX1RSQUNJTkcpKQogZXh0ZXJuIHZvaWQgKl9fa21hbGxvY190cmFja19jYWxsZXIoc2l6ZV90LCBnZnBfdCwgdW5zaWduZWQgbG9uZyk7CiAjZGVmaW5lIGttYWxsb2NfdHJhY2tfY2FsbGVyKHNpemUsIGZsYWdzKSBcCiAJX19rbWFsbG9jX3RyYWNrX2NhbGxlcihzaXplLCBmbGFncywgX1JFVF9JUF8pCkBAIC0yODYsNyArMjg3LDggQEAKICAqIHN0YW5kYXJkIGFsbG9jYXRvciB3aGVyZSB3ZSBjYXJlIGFib3V0IHRoZSByZWFsIHBsYWNlIHRoZSBtZW1vcnkKICAqIGFsbG9jYXRpb24gcmVxdWVzdCBjb21lcyBmcm9tLgogICovCi0jaWYgZGVmaW5lZChDT05GSUdfREVCVUdfU0xBQikgfHwgZGVmaW5lZChDT05GSUdfU0xVQikKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19TTEFCKSB8fCBkZWZpbmVkKENPTkZJR19TTFVCKSB8fCBcCisJKGRlZmluZWQoQ09ORklHX1NMQUIpICYmIGRlZmluZWQoQ09ORklHX1RSQUNJTkcpKQogZXh0ZXJuIHZvaWQgKl9fa21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihzaXplX3QsIGdmcF90LCBpbnQsIHVuc2lnbmVkIGxvbmcpOwogI2RlZmluZSBrbWFsbG9jX25vZGVfdHJhY2tfY2FsbGVyKHNpemUsIGZsYWdzLCBub2RlKSBcCiAJX19rbWFsbG9jX25vZGVfdHJhY2tfY2FsbGVyKHNpemUsIGZsYWdzLCBub2RlLCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NsYWJfZGVmLmggYi9pbmNsdWRlL2xpbnV4L3NsYWJfZGVmLmgKaW5kZXggMTgxMmRhYy4uMWFjZmE3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbGFiX2RlZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2xhYl9kZWYuaApAQCAtMTQsNyArMTQsOCBAQAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CQkvKiBrbWFsbG9jX3NpemVzLmggbmVlZHMgUEFHRV9TSVpFICovCiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CQkvKiBrbWFsbG9jX3NpemVzLmggbmVlZHMgTDFfQ0FDSEVfQllURVMgKi8KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGxpbnV4L2ttZW10cmFjZS5oPgorCisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2ttZW0uaD4KIAogI2lmbmRlZiBBUkNIX0tNQUxMT0NfTUlOQUxJR04KIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmggYi9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmgKaW5kZXggNGJhNTljZi4uNjQ0N2E3MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbHViX2RlZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaApAQCAtMTAsOSArMTAsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8bGludXgva21lbXRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgva21lbWxlYWsuaD4KIAorI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9rbWVtLmg+CisKIGVudW0gc3RhdF9pdGVtIHsKIAlBTExPQ19GQVNUUEFUSCwJCS8qIEFsbG9jYXRpb24gZnJvbSBjcHUgc2xhYiAqLwogCUFMTE9DX1NMT1dQQVRILAkJLyogQWxsb2NhdGlvbiBieSBnZXR0aW5nIGEgbmV3IGNwdSBzbGFiICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NubXAuaCBiL2luY2x1ZGUvbGludXgvc25tcC5oCmluZGV4IDUyNzk3NzEuLmViYjBjODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc25tcC5oCisrKyBiL2luY2x1ZGUvbGludXgvc25tcC5oCkBAIC0yMjksNiArMjI5LDcgQEAKIAlMSU5VWF9NSUJfVENQQkFDS0xPR0RST1AsCiAJTElOVVhfTUlCX1RDUE1JTlRUTERST1AsIC8qIFJGQyA1MDgyICovCiAJTElOVVhfTUlCX1RDUERFRkVSQUNDRVBURFJPUCwKKwlMSU5VWF9NSUJfSVBSUEZJTFRFUiwgLyogSVAgUmV2ZXJzZSBQYXRoIEZpbHRlciAocnBfZmlsdGVyKSAqLwogCV9fTElOVVhfTUlCX01BWAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaCBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKaW5kZXggMDMyYTE5ZS4uYTJmYWRhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCkBAIC0yNCw2ICsyNCw5IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4JCS8qIHBpZF90CQkJKi8KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgkJLyogX191c2VyCQkJKi8KIAorc3RydWN0IHBpZDsKK3N0cnVjdCBjcmVkOworCiAjZGVmaW5lIF9fc29ja2FkZHJfY2hlY2tfc2l6ZShzaXplKQlcCiAJQlVJTERfQlVHX09OKCgoc2l6ZSkgPiBzaXplb2Yoc3RydWN0IF9fa2VybmVsX3NvY2thZGRyX3N0b3JhZ2UpKSkKIApAQCAtMzA5LDYgKzMxMiw4IEBACiAjZGVmaW5lIElQWF9UWVBFCTEKIAogI2lmZGVmIF9fS0VSTkVMX18KK2V4dGVybiB2b2lkIGNyZWRfdG9fdWNyZWQoc3RydWN0IHBpZCAqcGlkLCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwgc3RydWN0IHVjcmVkICp1Y3JlZCk7CisKIGV4dGVybiBpbnQgbWVtY3B5X2Zyb21pb3ZlYyh1bnNpZ25lZCBjaGFyICprZGF0YSwgc3RydWN0IGlvdmVjICppb3YsIGludCBsZW4pOwogZXh0ZXJuIGludCBtZW1jcHlfZnJvbWlvdmVjZW5kKHVuc2lnbmVkIGNoYXIgKmtkYXRhLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKIAkJCSAgICAgICBpbnQgb2Zmc2V0LCBpbnQgbGVuKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpL2Fkczc4NDYuaCBiL2luY2x1ZGUvbGludXgvc3BpL2Fkczc4NDYuaAppbmRleCBiNGFlNTcwLi45MmJkMDgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaS9hZHM3ODQ2LmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvYWRzNzg0Ni5oCkBAIC00OCwxMSArNDgsMTIgQEAKIAkJCQkJICogc3RhdGUgaWYgZ2V0X3BlbmRvd25fc3RhdGUgPT0gTlVMTAogCQkJCQkgKi8KIAlpbnQJKCpnZXRfcGVuZG93bl9zdGF0ZSkodm9pZCk7Ci0JaW50CSgqZmlsdGVyX2luaXQpCShzdHJ1Y3QgYWRzNzg0Nl9wbGF0Zm9ybV9kYXRhICpwZGF0YSwKKwlpbnQJKCpmaWx0ZXJfaW5pdCkJKGNvbnN0IHN0cnVjdCBhZHM3ODQ2X3BsYXRmb3JtX2RhdGEgKnBkYXRhLAogCQkJCSB2b2lkICoqZmlsdGVyX2RhdGEpOwogCWludAkoKmZpbHRlcikJKHZvaWQgKmZpbHRlcl9kYXRhLCBpbnQgZGF0YV9pZHgsIGludCAqdmFsKTsKIAl2b2lkCSgqZmlsdGVyX2NsZWFudXApKHZvaWQgKmZpbHRlcl9kYXRhKTsKIAl2b2lkCSgqd2FpdF9mb3Jfc3luYykodm9pZCk7CiAJYm9vbAl3YWtldXA7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NzYi9zc2IuaCBiL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oCmluZGV4IGEyNjA4YmYuLjYyM2I3MDRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NzYi9zc2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NzYi9zc2IuaApAQCAtMTY3LDcgKzE2Nyw3IEBACiAJICogaXMgYW4gb3B0aW1pemF0aW9uLiAqLwogCWNvbnN0IHN0cnVjdCBzc2JfYnVzX29wcyAqb3BzOwogCi0Jc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldiwgKmRtYV9kZXY7CiAKIAlzdHJ1Y3Qgc3NiX2J1cyAqYnVzOwogCXN0cnVjdCBzc2JfZGV2aWNlX2lkIGlkOwpAQCAtNDcwLDE0ICs0NzAsNiBAQAogI2RlZmluZSBTU0JfRE1BX1RSQU5TTEFUSU9OX01BU0sJMHhDMDAwMDAwMAogI2RlZmluZSBTU0JfRE1BX1RSQU5TTEFUSU9OX1NISUZUCTMwCiAKLWV4dGVybiBpbnQgc3NiX2RtYV9zZXRfbWFzayhzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LCB1NjQgbWFzayk7Ci0KLWV4dGVybiB2b2lkICogc3NiX2RtYV9hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJCSAgICAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnBfZmxhZ3MpOwotZXh0ZXJuIHZvaWQgc3NiX2RtYV9mcmVlX2NvbnNpc3RlbnQoc3RydWN0IHNzYl9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCi0JCQkJICAgIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCi0JCQkJICAgIGdmcF90IGdmcF9mbGFncyk7Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2NvbGQgX19zc2JfZG1hX25vdF9pbXBsZW1lbnRlZChzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2KQogewogI2lmZGVmIENPTkZJR19TU0JfREVCVUcKQEAgLTQ4NiwxNTUgKzQ3OCw2IEBACiAjZW5kaWYgLyogREVCVUcgKi8KIH0KIAotc3RhdGljIGlubGluZSBpbnQgc3NiX2RtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYWRkcikKLXsKLQlzd2l0Y2ggKGRldi0+YnVzLT5idXN0eXBlKSB7Ci0JY2FzZSBTU0JfQlVTVFlQRV9QQ0k6Ci0jaWZkZWYgQ09ORklHX1NTQl9QQ0lIT1NUCi0JCXJldHVybiBwY2lfZG1hX21hcHBpbmdfZXJyb3IoZGV2LT5idXMtPmhvc3RfcGNpLCBhZGRyKTsKLSNlbmRpZgotCQlicmVhazsKLQljYXNlIFNTQl9CVVNUWVBFX1NTQjoKLQkJcmV0dXJuIGRtYV9tYXBwaW5nX2Vycm9yKGRldi0+ZGV2LCBhZGRyKTsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0JX19zc2JfZG1hX25vdF9pbXBsZW1lbnRlZChkZXYpOwotCXJldHVybiAtRU5PU1lTOwotfQotCi1zdGF0aWMgaW5saW5lIGRtYV9hZGRyX3Qgc3NiX2RtYV9tYXBfc2luZ2xlKHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIHZvaWQgKnAsCi0JCQkJCSAgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQotewotCXN3aXRjaCAoZGV2LT5idXMtPmJ1c3R5cGUpIHsKLQljYXNlIFNTQl9CVVNUWVBFX1BDSToKLSNpZmRlZiBDT05GSUdfU1NCX1BDSUhPU1QKLQkJcmV0dXJuIHBjaV9tYXBfc2luZ2xlKGRldi0+YnVzLT5ob3N0X3BjaSwgcCwgc2l6ZSwgZGlyKTsKLSNlbmRpZgotCQlicmVhazsKLQljYXNlIFNTQl9CVVNUWVBFX1NTQjoKLQkJcmV0dXJuIGRtYV9tYXBfc2luZ2xlKGRldi0+ZGV2LCBwLCBzaXplLCBkaXIpOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQlfX3NzYl9kbWFfbm90X2ltcGxlbWVudGVkKGRldik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzc2JfZG1hX3VubWFwX3NpbmdsZShzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLAotCQkJCQlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQotewotCXN3aXRjaCAoZGV2LT5idXMtPmJ1c3R5cGUpIHsKLQljYXNlIFNTQl9CVVNUWVBFX1BDSToKLSNpZmRlZiBDT05GSUdfU1NCX1BDSUhPU1QKLQkJcGNpX3VubWFwX3NpbmdsZShkZXYtPmJ1cy0+aG9zdF9wY2ksIGRtYV9hZGRyLCBzaXplLCBkaXIpOwotCQlyZXR1cm47Ci0jZW5kaWYKLQkJYnJlYWs7Ci0JY2FzZSBTU0JfQlVTVFlQRV9TU0I6Ci0JCWRtYV91bm1hcF9zaW5nbGUoZGV2LT5kZXYsIGRtYV9hZGRyLCBzaXplLCBkaXIpOwotCQlyZXR1cm47Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCV9fc3NiX2RtYV9ub3RfaW1wbGVtZW50ZWQoZGV2KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNzYl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LAotCQkJCQkgICAgICAgZG1hX2FkZHJfdCBkbWFfYWRkciwKLQkJCQkJICAgICAgIHNpemVfdCBzaXplLAotCQkJCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQotewotCXN3aXRjaCAoZGV2LT5idXMtPmJ1c3R5cGUpIHsKLQljYXNlIFNTQl9CVVNUWVBFX1BDSToKLSNpZmRlZiBDT05GSUdfU1NCX1BDSUhPU1QKLQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldi0+YnVzLT5ob3N0X3BjaSwgZG1hX2FkZHIsCi0JCQkJCSAgICBzaXplLCBkaXIpOwotCQlyZXR1cm47Ci0jZW5kaWYKLQkJYnJlYWs7Ci0JY2FzZSBTU0JfQlVTVFlQRV9TU0I6Ci0JCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldi0+ZGV2LCBkbWFfYWRkciwgc2l6ZSwgZGlyKTsKLQkJcmV0dXJuOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQlfX3NzYl9kbWFfbm90X2ltcGxlbWVudGVkKGRldik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzc2JfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IHNzYl9kZXZpY2UgKmRldiwKLQkJCQkJCSAgZG1hX2FkZHJfdCBkbWFfYWRkciwKLQkJCQkJCSAgc2l6ZV90IHNpemUsCi0JCQkJCQkgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKLXsKLQlzd2l0Y2ggKGRldi0+YnVzLT5idXN0eXBlKSB7Ci0JY2FzZSBTU0JfQlVTVFlQRV9QQ0k6Ci0jaWZkZWYgQ09ORklHX1NTQl9QQ0lIT1NUCi0JCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYtPmJ1cy0+aG9zdF9wY2ksIGRtYV9hZGRyLAotCQkJCQkgICAgICAgc2l6ZSwgZGlyKTsKLQkJcmV0dXJuOwotI2VuZGlmCi0JCWJyZWFrOwotCWNhc2UgU1NCX0JVU1RZUEVfU1NCOgotCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYtPmRldiwgZG1hX2FkZHIsIHNpemUsIGRpcik7Ci0JCXJldHVybjsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0JX19zc2JfZG1hX25vdF9pbXBsZW1lbnRlZChkZXYpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3NiX2RtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsCi0JCQkJCQkgICAgIGRtYV9hZGRyX3QgZG1hX2FkZHIsCi0JCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJCQkJICAgICBzaXplX3Qgc2l6ZSwKLQkJCQkJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQotewotCXN3aXRjaCAoZGV2LT5idXMtPmJ1c3R5cGUpIHsKLQljYXNlIFNTQl9CVVNUWVBFX1BDSToKLSNpZmRlZiBDT05GSUdfU1NCX1BDSUhPU1QKLQkJLyogSnVzdCBzeW5jIGV2ZXJ5dGhpbmcuIFRoYXQncyBhbGwgdGhlIFBDSSBBUEkgY2FuIGRvLiAqLwotCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LT5idXMtPmhvc3RfcGNpLCBkbWFfYWRkciwKLQkJCQkJICAgIG9mZnNldCArIHNpemUsIGRpcik7Ci0JCXJldHVybjsKLSNlbmRpZgotCQlicmVhazsKLQljYXNlIFNTQl9CVVNUWVBFX1NTQjoKLQkJZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUoZGV2LT5kZXYsIGRtYV9hZGRyLCBvZmZzZXQsCi0JCQkJCSAgICAgIHNpemUsIGRpcik7Ci0JCXJldHVybjsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0JX19zc2JfZG1hX25vdF9pbXBsZW1lbnRlZChkZXYpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3NiX2RtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsCi0JCQkJCQkJZG1hX2FkZHJfdCBkbWFfYWRkciwKLQkJCQkJCQl1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkJCQkJCQlzaXplX3Qgc2l6ZSwKLQkJCQkJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCi17Ci0Jc3dpdGNoIChkZXYtPmJ1cy0+YnVzdHlwZSkgewotCWNhc2UgU1NCX0JVU1RZUEVfUENJOgotI2lmZGVmIENPTkZJR19TU0JfUENJSE9TVAotCQkvKiBKdXN0IHN5bmMgZXZlcnl0aGluZy4gVGhhdCdzIGFsbCB0aGUgUENJIEFQSSBjYW4gZG8uICovCi0JCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYtPmJ1cy0+aG9zdF9wY2ksIGRtYV9hZGRyLAotCQkJCQkgICAgICAgb2Zmc2V0ICsgc2l6ZSwgZGlyKTsKLQkJcmV0dXJuOwotI2VuZGlmCi0JCWJyZWFrOwotCWNhc2UgU1NCX0JVU1RZUEVfU1NCOgotCQlkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShkZXYtPmRldiwgZG1hX2FkZHIsIG9mZnNldCwKLQkJCQkJCSBzaXplLCBkaXIpOwotCQlyZXR1cm47Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCV9fc3NiX2RtYV9ub3RfaW1wbGVtZW50ZWQoZGV2KTsKLX0KLQotCiAjaWZkZWYgQ09ORklHX1NTQl9QQ0lIT1NUCiAvKiBQQ0ktaG9zdCB3cmFwcGVyIGRyaXZlciAqLwogZXh0ZXJuIGludCBzc2JfcGNpaG9zdF9yZWdpc3RlcihzdHJ1Y3QgcGNpX2RyaXZlciAqZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oIGIvaW5jbHVkZS9saW51eC9zdXNwZW5kLmgKaW5kZXggYmM3ZDZiYi4uNGFmMjcwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdXNwZW5kLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdXNwZW5kLmgKQEAgLTYxLDE0ICs2MSwxNSBAQAogICoJYmVmb3JlIGRldmljZSBkcml2ZXJzJyBsYXRlIHN1c3BlbmQgY2FsbGJhY2tzIGFyZSBleGVjdXRlZC4gIEl0IHJldHVybnMKICAqCTAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLCBpbiB3aGljaCBjYXNlIHRoZQogICoJc3lzdGVtIGNhbm5vdCBlbnRlciB0aGUgZGVzaXJlZCBzbGVlcCBzdGF0ZSAoQHByZXBhcmVfbGF0ZSgpLCBAZW50ZXIoKSwKLSAqCUB3YWtlKCksIGFuZCBAZmluaXNoKCkgd2lsbCBub3QgYmUgY2FsbGVkIGluIHRoYXQgY2FzZSkuCisgKglhbmQgQHdha2UoKSB3aWxsIG5vdCBiZSBjYWxsZWQgaW4gdGhhdCBjYXNlKS4KICAqCiAgKiBAcHJlcGFyZV9sYXRlOiBGaW5pc2ggcHJlcGFyaW5nIHRoZSBwbGF0Zm9ybSBmb3IgZW50ZXJpbmcgdGhlIHN5c3RlbSBzbGVlcAogICoJc3RhdGUgaW5kaWNhdGVkIGJ5IEBiZWdpbigpLgogICoJQHByZXBhcmVfbGF0ZSBpcyBjYWxsZWQgYmVmb3JlIGRpc2FibGluZyBub25ib290IENQVXMgYW5kIGFmdGVyCiAgKglkZXZpY2UgZHJpdmVycycgbGF0ZSBzdXNwZW5kIGNhbGxiYWNrcyBoYXZlIGJlZW4gZXhlY3V0ZWQuICBJdCByZXR1cm5zCiAgKgkwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZSwgaW4gd2hpY2ggY2FzZSB0aGUKLSAqCXN5c3RlbSBjYW5ub3QgZW50ZXIgdGhlIGRlc2lyZWQgc2xlZXAgc3RhdGUgKEBlbnRlcigpIGFuZCBAd2FrZSgpKS4KKyAqCXN5c3RlbSBjYW5ub3QgZW50ZXIgdGhlIGRlc2lyZWQgc2xlZXAgc3RhdGUgKEBlbnRlcigpIHdpbGwgbm90IGJlCisgKglleGVjdXRlZCkuCiAgKgogICogQGVudGVyOiBFbnRlciB0aGUgc3lzdGVtIHNsZWVwIHN0YXRlIGluZGljYXRlZCBieSBAYmVnaW4oKSBvciByZXByZXNlbnRlZCBieQogICoJdGhlIGFyZ3VtZW50IGlmIEBiZWdpbigpIGlzIG5vdCBpbXBsZW1lbnRlZC4KQEAgLTgxLDE0ICs4MiwxNSBAQAogICoJcmVzdW1lIGNhbGxiYWNrcyBhcmUgZXhlY3V0ZWQuCiAgKglUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsLCBidXQgc2hvdWxkIGJlIGltcGxlbWVudGVkIGJ5IHRoZSBwbGF0Zm9ybXMKICAqCXRoYXQgaW1wbGVtZW50IEBwcmVwYXJlX2xhdGUoKS4gIElmIGltcGxlbWVudGVkLCBpdCBpcyBhbHdheXMgY2FsbGVkCi0gKglhZnRlciBAZW50ZXIoKSwgZXZlbiBpZiBAZW50ZXIoKSBmYWlscy4KKyAqCWFmdGVyIEBwcmVwYXJlX2xhdGUgYW5kIEBlbnRlcigpLCBldmVuIGlmIG9uZSBvZiB0aGVtIGZhaWxzLgogICoKICAqIEBmaW5pc2g6IEZpbmlzaCB3YWtlLXVwIG9mIHRoZSBwbGF0Zm9ybS4KICAqCUBmaW5pc2ggaXMgY2FsbGVkIHJpZ2h0IHByaW9yIHRvIGNhbGxpbmcgZGV2aWNlIGRyaXZlcnMnIHJlZ3VsYXIgc3VzcGVuZAogICoJY2FsbGJhY2tzLgogICoJVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbCwgYnV0IHNob3VsZCBiZSBpbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm1zCiAgKgl0aGF0IGltcGxlbWVudCBAcHJlcGFyZSgpLiAgSWYgaW1wbGVtZW50ZWQsIGl0IGlzIGFsd2F5cyBjYWxsZWQgYWZ0ZXIKLSAqCUBlbnRlcigpIGFuZCBAd2FrZSgpLCBpZiBpbXBsZW1lbnRlZCwgZXZlbiBpZiBhbnkgb2YgdGhlbSBmYWlscy4KKyAqCUBlbnRlcigpIGFuZCBAd2FrZSgpLCBldmVuIGlmIGFueSBvZiB0aGVtIGZhaWxzLiAgSXQgaXMgZXhlY3V0ZWQgYWZ0ZXIKKyAqCWEgZmFpbGluZyBAcHJlcGFyZS4KICAqCiAgKiBAZW5kOiBDYWxsZWQgYnkgdGhlIFBNIGNvcmUgcmlnaHQgYWZ0ZXIgcmVzdW1pbmcgZGV2aWNlcywgdG8gaW5kaWNhdGUgdG8KICAqCXRoZSBwbGF0Zm9ybSB0aGF0IHRoZSBzeXN0ZW0gaGFzIHJldHVybmVkIHRvIHRoZSB3b3JraW5nIHN0YXRlIG9yCkBAIC0yODYsNiArMjg4LDEzIEBACiAJCXsgLm5vdGlmaWVyX2NhbGwgPSBmbiwgLnByaW9yaXR5ID0gcHJpIH07CVwKIAlyZWdpc3Rlcl9wbV9ub3RpZmllcigmZm4jI19uYik7CQkJXAogfQorCisvKiBkcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmMgKi8KK2V4dGVybiBib29sIGV2ZW50c19jaGVja19lbmFibGVkOworCitleHRlcm4gYm9vbCBwbV9jaGVja193YWtldXBfZXZlbnRzKHZvaWQpOworZXh0ZXJuIGJvb2wgcG1fZ2V0X3dha2V1cF9jb3VudCh1bnNpZ25lZCBsb25nICpjb3VudCk7CitleHRlcm4gYm9vbCBwbV9zYXZlX3dha2V1cF9jb3VudCh1bnNpZ25lZCBsb25nIGNvdW50KTsKICNlbHNlIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KIAogc3RhdGljIGlubGluZSBpbnQgcmVnaXN0ZXJfcG1fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dpb3RsYi5oIGIvaW5jbHVkZS9saW51eC9zd2lvdGxiLmgKaW5kZXggODFhNGUyMS4uOGMwZTM0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2lvdGxiLmgKKysrIGIvaW5jbHVkZS9saW51eC9zd2lvdGxiLmgKQEAgLTIzLDYgKzIzLDI5IEBACiAjZGVmaW5lIElPX1RMQl9TSElGVCAxMQogCiBleHRlcm4gdm9pZCBzd2lvdGxiX2luaXQoaW50IHZlcmJvc2UpOworZXh0ZXJuIHZvaWQgc3dpb3RsYl9pbml0X3dpdGhfdGJsKGNoYXIgKnRsYiwgdW5zaWduZWQgbG9uZyBuc2xhYnMsIGludCB2ZXJib3NlKTsKKworLyoKKyAqIEVudW1lcmF0aW9uIGZvciBzeW5jIHRhcmdldHMKKyAqLworZW51bSBkbWFfc3luY190YXJnZXQgeworCVNZTkNfRk9SX0NQVSA9IDAsCisJU1lOQ19GT1JfREVWSUNFID0gMSwKK307CitleHRlcm4gdm9pZCAqc3dpb3RsYl90YmxfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCB0YmxfZG1hX2FkZHIsCisJCQkJICAgIHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplLAorCQkJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpOworCitleHRlcm4gdm9pZCBzd2lvdGxiX3RibF91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqaHdkZXYsIGNoYXIgKmRtYV9hZGRyLAorCQkJCSAgICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7CisKK2V4dGVybiB2b2lkIHN3aW90bGJfdGJsX3N5bmNfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBjaGFyICpkbWFfYWRkciwKKwkJCQkgICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCQkgICAgZW51bSBkbWFfc3luY190YXJnZXQgdGFyZ2V0KTsKKworLyogQWNjZXNzb3J5IGZ1bmN0aW9ucy4gKi8KK2V4dGVybiB2b2lkIHN3aW90bGJfYm91bmNlKHBoeXNfYWRkcl90IHBoeXMsIGNoYXIgKmRtYV9hZGRyLCBzaXplX3Qgc2l6ZSwKKwkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7CiAKIGV4dGVybiB2b2lkCiAqc3dpb3RsYl9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc2l6ZV90IHNpemUsCkBAIC00MiwxMSArNjUsMTEgQEAKIAogZXh0ZXJuIGludAogc3dpb3RsYl9tYXBfc2coc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKLQkgICAgICAgaW50IGRpcmVjdGlvbik7CisJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7CiAKIGV4dGVybiB2b2lkCiBzd2lvdGxiX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCi0JCSBpbnQgZGlyZWN0aW9uKTsKKwkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7CiAKIGV4dGVybiBpbnQKIHN3aW90bGJfbWFwX3NnX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgaW50IG5lbGVtcywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaCBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAppbmRleCA3ZjYxNGNlLi5hNmJmZDEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCkBAIC0xMjQsNyArMTI0LDggQEAKIGV4dGVybiBzdHJ1Y3QgdHJhY2VfZXZlbnRfZnVuY3Rpb25zIGV4aXRfc3lzY2FsbF9wcmludF9mdW5jczsKIAogI2RlZmluZSBTWVNDQUxMX1RSQUNFX0VOVEVSX0VWRU5UKHNuYW1lKQkJCQlcCi0Jc3RhdGljIHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhIF9fc3lzY2FsbF9tZXRhXyMjc25hbWU7CQlcCisJc3RhdGljIHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhCQkJCQlcCisJX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKSBfX3N5c2NhbGxfbWV0YV8jI3NuYW1lOwkJXAogCXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwJCQkJCVwKIAlfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpIGV2ZW50X2VudGVyXyMjc25hbWU7CQlcCiAJc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQJCQkJXApAQCAtMTM4LDcgKzEzOSw4IEBACiAJfQogCiAjZGVmaW5lIFNZU0NBTExfVFJBQ0VfRVhJVF9FVkVOVChzbmFtZSkJCQkJCVwKLQlzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX19zeXNjYWxsX21ldGFfIyNzbmFtZTsJCVwKKwlzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEJCQkJCVwKKwlfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpIF9fc3lzY2FsbF9tZXRhXyMjc25hbWU7CQlcCiAJc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbAkJCQkJXAogCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkgZXZlbnRfZXhpdF8jI3NuYW1lOwkJXAogCXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCVwKQEAgLTE2NSw3ICsxNjcsNiBAQAogCQkuZW50ZXJfZXZlbnQJPSAmZXZlbnRfZW50ZXJfIyNzbmFtZSwJCVwKIAkJLmV4aXRfZXZlbnQJPSAmZXZlbnRfZXhpdF8jI3NuYW1lLAkJXAogCQkuZW50ZXJfZmllbGRzCT0gTElTVF9IRUFEX0lOSVQoX19zeXNjYWxsX21ldGFfIyNzbmFtZS5lbnRlcl9maWVsZHMpLCBcCi0JCS5leGl0X2ZpZWxkcwk9IExJU1RfSEVBRF9JTklUKF9fc3lzY2FsbF9tZXRhXyMjc25hbWUuZXhpdF9maWVsZHMpLCBcCiAJfTsKIAogI2RlZmluZSBTWVNDQUxMX0RFRklORTAoc25hbWUpCQkJCQlcCkBAIC0xODAsNyArMTgxLDYgQEAKIAkJLmVudGVyX2V2ZW50CT0gJmV2ZW50X2VudGVyX18jI3NuYW1lLAlcCiAJCS5leGl0X2V2ZW50CT0gJmV2ZW50X2V4aXRfXyMjc25hbWUsCQlcCiAJCS5lbnRlcl9maWVsZHMJPSBMSVNUX0hFQURfSU5JVChfX3N5c2NhbGxfbWV0YV9fIyNzbmFtZS5lbnRlcl9maWVsZHMpLCBcCi0JCS5leGl0X2ZpZWxkcwk9IExJU1RfSEVBRF9JTklUKF9fc3lzY2FsbF9tZXRhX18jI3NuYW1lLmV4aXRfZmllbGRzKSwgXAogCX07CQkJCQkJCVwKIAlhc21saW5rYWdlIGxvbmcgc3lzXyMjc25hbWUodm9pZCkKICNlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2ZzLmggYi9pbmNsdWRlL2xpbnV4L3N5c2ZzLmgKaW5kZXggZjI2OTRlYi4uM2M5MjEyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNmcy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzZnMuaApAQCAtMjIsMTQgKzIyLDggQEAKIHN0cnVjdCBtb2R1bGU7CiBlbnVtIGtvYmpfbnNfdHlwZTsKIAotLyogRklYTUUKLSAqIFRoZSAqb3duZXIgZmllbGQgaXMgbm8gbG9uZ2VyIHVzZWQuCi0gKiB4ODYgdHJlZSBoYXMgYmVlbiBjbGVhbmVkIHVwLiBUaGUgb3duZXIKLSAqIGF0dHJpYnV0ZSBpcyBzdGlsbCBsZWZ0IGZvciBvdGhlciBhcmNoZXMuCi0gKi8KIHN0cnVjdCBhdHRyaWJ1dGUgewogCWNvbnN0IGNoYXIJCSpuYW1lOwotCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsKIAltb2RlX3QJCQltb2RlOwogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCiAJc3RydWN0IGxvY2tfY2xhc3Nfa2V5CSprZXk7CkBAIC0xMzYsOCArMTMwLDggQEAKIAkJCQkgICBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyKTsKIGludCBfX211c3RfY2hlY2sgc3lzZnNfY3JlYXRlX2ZpbGVzKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKiphdHRyKTsKLWludCBfX211c3RfY2hlY2sgc3lzZnNfY2htb2RfZmlsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKLQkJCQkgIG1vZGVfdCBtb2RlKTsKK2ludCBfX211c3RfY2hlY2sgc3lzZnNfY2htb2RfZmlsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIG1vZGVfdCBtb2RlKTsKIHZvaWQgc3lzZnNfcmVtb3ZlX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIpOwogdm9pZCBzeXNmc19yZW1vdmVfZmlsZXMoc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKiphdHRyKTsKIApAQCAtMjI1LDcgKzIxOSw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHN5c2ZzX2NobW9kX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkJICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgbW9kZV90IG1vZGUpCisJCQkJICAgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgbW9kZV90IG1vZGUpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c3JxLmggYi9pbmNsdWRlL2xpbnV4L3N5c3JxLmgKaW5kZXggNDQ5NjMyMi4uNjA5ZThjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNycS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzcnEuaApAQCAtNDUsNiArNDUsNyBAQAogICovCiAKIHZvaWQgaGFuZGxlX3N5c3JxKGludCBrZXksIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwordm9pZCBfX2hhbmRsZV9zeXNycShpbnQga2V5LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgY2hlY2tfbWFzayk7CiBpbnQgcmVnaXN0ZXJfc3lzcnFfa2V5KGludCBrZXksIHN0cnVjdCBzeXNycV9rZXlfb3AgKm9wKTsKIGludCB1bnJlZ2lzdGVyX3N5c3JxX2tleShpbnQga2V5LCBzdHJ1Y3Qgc3lzcnFfa2V5X29wICpvcCk7CiBzdHJ1Y3Qgc3lzcnFfa2V5X29wICpfX3N5c3JxX2dldF9rZXlfb3AoaW50IGtleSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWUuaCBiL2luY2x1ZGUvbGludXgvdGltZS5oCmluZGV4IGVhMzU1OWYwLi5jYjM0ZTM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWUuaApAQCAtNzYsOSArNzYsMjUgQEAKIAkJCSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWluLCBjb25zdCB1bnNpZ25lZCBpbnQgc2VjKTsKIAogZXh0ZXJuIHZvaWQgc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoc3RydWN0IHRpbWVzcGVjICp0cywgdGltZV90IHNlYywgczY0IG5zZWMpOworCisvKgorICogdGltZXNwZWNfYWRkX3NhZmUgYXNzdW1lcyBib3RoIHZhbHVlcyBhcmUgcG9zaXRpdmUgYW5kIGNoZWNrcworICogZm9yIG92ZXJmbG93LiBJdCB3aWxsIHJldHVybiBUSU1FX1RfTUFYIGlmIHRoZSByZXV0cm4gd291bGQgYmUKKyAqIHNtYWxsZXIgdGhlbiBlaXRoZXIgb2YgdGhlIGFyZ3VtZW50cy4KKyAqLwogZXh0ZXJuIHN0cnVjdCB0aW1lc3BlYyB0aW1lc3BlY19hZGRfc2FmZShjb25zdCBzdHJ1Y3QgdGltZXNwZWMgbGhzLAogCQkJCQkgY29uc3Qgc3RydWN0IHRpbWVzcGVjIHJocyk7CiAKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGltZXNwZWMgdGltZXNwZWNfYWRkKHN0cnVjdCB0aW1lc3BlYyBsaHMsCisJCQkJCQlzdHJ1Y3QgdGltZXNwZWMgcmhzKQoreworCXN0cnVjdCB0aW1lc3BlYyB0c19kZWx0YTsKKwlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmdHNfZGVsdGEsIGxocy50dl9zZWMgKyByaHMudHZfc2VjLAorCQkJCWxocy50dl9uc2VjICsgcmhzLnR2X25zZWMpOworCXJldHVybiB0c19kZWx0YTsKK30KKwogLyoKICAqIHN1YiA9IGxocyAtIHJocywgaW4gbm9ybWFsaXplZCBmb3JtCiAgKi8KQEAgLTk3LDggKzExMyw2IEBACiAjZGVmaW5lIHRpbWVzcGVjX3ZhbGlkKHRzKSBcCiAJKCgodHMpLT50dl9zZWMgPj0gMCkgJiYgKCgodW5zaWduZWQgbG9uZykgKHRzKS0+dHZfbnNlYykgPCBOU0VDX1BFUl9TRUMpKQogCi1leHRlcm4gc3RydWN0IHRpbWVzcGVjIHh0aW1lOwotZXh0ZXJuIHN0cnVjdCB0aW1lc3BlYyB3YWxsX3RvX21vbm90b25pYzsKIGV4dGVybiBzZXFsb2NrX3QgeHRpbWVfbG9jazsKIAogZXh0ZXJuIHZvaWQgcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKHN0cnVjdCB0aW1lc3BlYyAqdHMpOwpAQCAtMTEwLDcgKzEyNCw4IEBACiAKIHVuc2lnbmVkIGxvbmcgZ2V0X3NlY29uZHModm9pZCk7CiBzdHJ1Y3QgdGltZXNwZWMgY3VycmVudF9rZXJuZWxfdGltZSh2b2lkKTsKLXN0cnVjdCB0aW1lc3BlYyBfX2N1cnJlbnRfa2VybmVsX3RpbWUodm9pZCk7IC8qIGRvZXMgbm90IGhvbGQgeHRpbWVfbG9jayAqLworc3RydWN0IHRpbWVzcGVjIF9fY3VycmVudF9rZXJuZWxfdGltZSh2b2lkKTsgLyogZG9lcyBub3QgdGFrZSB4dGltZV9sb2NrICovCitzdHJ1Y3QgdGltZXNwZWMgX19nZXRfd2FsbF90b19tb25vdG9uaWModm9pZCk7IC8qIGRvZXMgbm90IHRha2UgeHRpbWVfbG9jayAqLwogc3RydWN0IHRpbWVzcGVjIGdldF9tb25vdG9uaWNfY29hcnNlKHZvaWQpOwogCiAjZGVmaW5lIENVUlJFTlRfVElNRQkJKGN1cnJlbnRfa2VybmVsX3RpbWUoKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZXIuaCBiL2luY2x1ZGUvbGludXgvdGltZXIuaAppbmRleCBlYTk2NWI4Li4zOGNmMDkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1lci5oCkBAIC0xMDAsNiArMTAwLDEzIEBACiAJCXNldHVwX3RpbWVyX29uX3N0YWNrX2tleSgodGltZXIpLCAjdGltZXIsICZfX2tleSwJXAogCQkJCQkgKGZuKSwgKGRhdGEpKTsJCQlcCiAJfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2V0dXBfZGVmZXJyYWJsZV90aW1lcl9vbl9zdGFjayh0aW1lciwgZm4sIGRhdGEpCQlcCisJZG8gewkJCQkJCQkJXAorCQlzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fa2V5OwkJCVwKKwkJc2V0dXBfZGVmZXJyYWJsZV90aW1lcl9vbl9zdGFja19rZXkoKHRpbWVyKSwgI3RpbWVyLAlcCisJCQkJCQkgICAgJl9fa2V5LCAoZm4pLAlcCisJCQkJCQkgICAgKGRhdGEpKTsJCVwKKwl9IHdoaWxlICgwKQogI2Vsc2UKICNkZWZpbmUgaW5pdF90aW1lcih0aW1lcilcCiAJaW5pdF90aW1lcl9rZXkoKHRpbWVyKSwgTlVMTCwgTlVMTCkKQEAgLTExMSw2ICsxMTgsOCBAQAogCXNldHVwX3RpbWVyX2tleSgodGltZXIpLCBOVUxMLCBOVUxMLCAoZm4pLCAoZGF0YSkpCiAjZGVmaW5lIHNldHVwX3RpbWVyX29uX3N0YWNrKHRpbWVyLCBmbiwgZGF0YSlcCiAJc2V0dXBfdGltZXJfb25fc3RhY2tfa2V5KCh0aW1lciksIE5VTEwsIE5VTEwsIChmbiksIChkYXRhKSkKKyNkZWZpbmUgc2V0dXBfZGVmZXJyYWJsZV90aW1lcl9vbl9zdGFjayh0aW1lciwgZm4sIGRhdGEpXAorCXNldHVwX2RlZmVycmFibGVfdGltZXJfb25fc3RhY2tfa2V5KCh0aW1lciksIE5VTEwsIE5VTEwsIChmbiksIChkYXRhKSkKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0RFQlVHX09CSkVDVFNfVElNRVJTCkBAIC0xNTAsNiArMTU5LDEyIEBACiAJaW5pdF90aW1lcl9vbl9zdGFja19rZXkodGltZXIsIG5hbWUsIGtleSk7CiB9CiAKK2V4dGVybiB2b2lkIHNldHVwX2RlZmVycmFibGVfdGltZXJfb25fc3RhY2tfa2V5KHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwKKwkJCQkJCWNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCQlzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSwKKwkJCQkJCXZvaWQgKCpmdW5jdGlvbikodW5zaWduZWQgbG9uZyksCisJCQkJCQl1bnNpZ25lZCBsb25nIGRhdGEpOworCiAvKioKICAqIHRpbWVyX3BlbmRpbmcgLSBpcyBhIHRpbWVyIHBlbmRpbmc/CiAgKiBAdGltZXI6IHRoZSB0aW1lciBpbiBxdWVzdGlvbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90b3BvbG9neS5oIGIvaW5jbHVkZS9saW51eC90b3BvbG9neS5oCmluZGV4IGM0NGRmNTAuLmI1NzJlNDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgKQEAgLTEwMyw2ICsxMDMsNyBAQAogCQkJCXwgMSpTRF9TSEFSRV9QS0dfUkVTT1VSQ0VTCQlcCiAJCQkJfCAwKlNEX1NFUklBTElaRQkJCVwKIAkJCQl8IDAqU0RfUFJFRkVSX1NJQkxJTkcJCQlcCisJCQkJfCBhcmNoX3NkX3NpYmxpbmdfYXN5bV9wYWNraW5nKCkJXAogCQkJCSwJCQkJCVwKIAkubGFzdF9iYWxhbmNlCQk9IGppZmZpZXMsCQkJCVwKIAkuYmFsYW5jZV9pbnRlcnZhbAk9IDEsCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R0eS5oIGIvaW5jbHVkZS9saW51eC90dHkuaAppbmRleCA5MzEwNzhiLi43ODAyYTI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3R0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvdHR5LmgKQEAgLTU1Miw2ICs1NTIsOSBAQAogfQogI2VuZGlmCiAKKy8qIHR0eV9pby5jICovCitleHRlcm4gaW50IF9faW5pdCB0dHlfaW5pdCh2b2lkKTsKKwogLyogdHR5X2lvY3RsLmMgKi8KIGV4dGVybiBpbnQgbl90dHlfaW9jdGxfaGVscGVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90eXBlcy5oIGIvaW5jbHVkZS9saW51eC90eXBlcy5oCmluZGV4IDIzZDIzN2EuLjMzMWQ4YmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHlwZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKQEAgLTgsNyArOCwxMCBAQAogCiAjZGVmaW5lIERFQ0xBUkVfQklUTUFQKG5hbWUsYml0cykgXAogCXVuc2lnbmVkIGxvbmcgbmFtZVtCSVRTX1RPX0xPTkdTKGJpdHMpXQotCisjZWxzZQorI2lmbmRlZiBfX0VYUE9SVEVEX0hFQURFUlNfXworI3dhcm5pbmcgIkF0dGVtcHQgdG8gdXNlIGtlcm5lbCBoZWFkZXJzIGZyb20gdXNlciBzcGFjZSwgc2VlIGh0dHA6Ly9rZXJuZWxuZXdiaWVzLm9yZy9LZXJuZWxIZWFkZXJzIgorI2VuZGlmIC8qIF9fRVhQT1JURURfSEVBREVSU19fICovCiAjZW5kaWYKIAogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X3R5cGVzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3U2NF9zdGF0c19zeW5jLmggYi9pbmNsdWRlL2xpbnV4L3U2NF9zdGF0c19zeW5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEyNjFhMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdTY0X3N0YXRzX3N5bmMuaApAQCAtMCwwICsxLDE0MCBAQAorI2lmbmRlZiBfTElOVVhfVTY0X1NUQVRTX1NZTkNfSAorI2RlZmluZSBfTElOVVhfVTY0X1NUQVRTX1NZTkNfSAorCisvKgorICogVG8gcHJvcGVybHkgaW1wbGVtZW50IDY0Yml0cyBuZXR3b3JrIHN0YXRpc3RpY3Mgb24gMzJiaXQgYW5kIDY0Yml0IGhvc3RzLAorICogd2UgcHJvdmlkZSBhIHN5bmNocm9uaXphdGlvbiBwb2ludCwgdGhhdCBpcyBhIG5vb3Agb24gNjRiaXQgb3IgVVAga2VybmVscy4KKyAqCisgKiBLZXkgcG9pbnRzIDoKKyAqIDEpIFVzZSBhIHNlcWNvdW50IG9uIFNNUCAzMmJpdHMsIHdpdGggbG93IG92ZXJoZWFkLgorICogMikgV2hvbGUgdGhpbmcgaXMgYSBub29wIG9uIDY0Yml0IGFyY2hlcyBvciBVUCBrZXJuZWxzLgorICogMykgV3JpdGUgc2lkZSBtdXN0IGVuc3VyZSBtdXR1YWwgZXhjbHVzaW9uIG9yIG9uZSBzZXFjb3VudCB1cGRhdGUgY291bGQKKyAqICAgIGJlIGxvc3QsIHRodXMgYmxvY2tpbmcgcmVhZGVycyBmb3JldmVyLgorICogICAgSWYgdGhpcyBzeW5jaHJvbml6YXRpb24gcG9pbnQgaXMgbm90IGEgbXV0ZXgsIGJ1dCBhIHNwaW5sb2NrIG9yCisgKiAgICBzcGlubG9ja19iaCgpIG9yIGRpc2FibGVfYmgoKSA6CisgKiAzLjEpIFdyaXRlIHNpZGUgc2hvdWxkIG5vdCBzbGVlcC4KKyAqIDMuMikgV3JpdGUgc2lkZSBzaG91bGQgbm90IGFsbG93IHByZWVtcHRpb24uCisgKiAzLjMpIElmIGFwcGxpY2FibGUsIGludGVycnVwdHMgc2hvdWxkIGJlIGRpc2FibGVkLgorICoKKyAqIDQpIElmIHJlYWRlciBmZXRjaGVzIHNldmVyYWwgY291bnRlcnMsIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGUgd2hvbGUgdmFsdWVzCisgKiAgICBhcmUgY29uc2lzdGVudCAocmVtZW1iZXIgcG9pbnQgMSkgOiB0aGlzIGlzIGEgbm9vcCBvbiA2NGJpdCBhcmNoZXMgYW55d2F5KQorICoKKyAqIDUpIHJlYWRlcnMgYXJlIGFsbG93ZWQgdG8gc2xlZXAgb3IgYmUgcHJlZW1wdGVkL2ludGVycnVwdGVkIDogVGhleSBwZXJmb3JtCisgKiAgICBwdXJlIHJlYWRzLiBCdXQgaWYgdGhleSBoYXZlIHRvIGZldGNoIG1hbnkgdmFsdWVzLCBpdCdzIGJldHRlciB0byBub3QgYWxsb3cKKyAqICAgIHByZWVtcHRpb25zL2ludGVycnVwdGlvbnMgdG8gYXZvaWQgbWFueSByZXRyaWVzLgorICoKKyAqIDYpIElmIGNvdW50ZXIgbWlnaHQgYmUgd3JpdHRlbiBieSBhbiBpbnRlcnJ1cHQsIHJlYWRlcnMgc2hvdWxkIGJsb2NrIGludGVycnVwdHMuCisgKiAgICAoT24gVVAsIHRoZXJlIGlzIG5vIHNlcWNvdW50X3QgcHJvdGVjdGlvbiwgYSByZWFkZXIgYWxsb3dpbmcgaW50ZXJydXB0cyBjb3VsZAorICogICAgIHJlYWQgcGFydGlhbCB2YWx1ZXMpCisgKgorICogNykgRm9yIHNvZnRpcnEgdXNlcywgcmVhZGVycyBjYW4gdXNlIHU2NF9zdGF0c19mZXRjaF9iZWdpbl9iaCgpIGFuZAorICogICAgdTY0X3N0YXRzX2ZldGNoX3JldHJ5X2JoKCkgaGVscGVycworICoKKyAqIFVzYWdlIDoKKyAqCisgKiBTdGF0cyBwcm9kdWNlciAod3JpdGVyKSBzaG91bGQgdXNlIGZvbGxvd2luZyB0ZW1wbGF0ZSBncmFudGVkIGl0IGFscmVhZHkgZ290CisgKiBhbiBleGNsdXNpdmUgYWNjZXNzIHRvIGNvdW50ZXJzIChhIGxvY2sgaXMgYWxyZWFkeSB0YWtlbiwgb3IgcGVyIGNwdQorICogZGF0YSBpcyB1c2VkIFtpbiBhIG5vbiBwcmVlbXB0YWJsZSBjb250ZXh0XSkKKyAqCisgKiAgIHNwaW5fbG9ja19iaCguLi4pIG9yIG90aGVyIHN5bmNocm9uaXphdGlvbiB0byBnZXQgZXhjbHVzaXZlIGFjY2VzcworICogICAuLi4KKyAqICAgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmc3RhdHMtPnN5bmNwKTsKKyAqICAgc3RhdHMtPmJ5dGVzNjQgKz0gbGVuOyAvLyBub24gYXRvbWljIG9wZXJhdGlvbgorICogICBzdGF0cy0+cGFja2V0czY0Kys7ICAgIC8vIG5vbiBhdG9taWMgb3BlcmF0aW9uCisgKiAgIHU2NF9zdGF0c191cGRhdGVfZW5kKCZzdGF0cy0+c3luY3ApOworICoKKyAqIFdoaWxlIGEgY29uc3VtZXIgKHJlYWRlcikgc2hvdWxkIHVzZSBmb2xsb3dpbmcgdGVtcGxhdGUgdG8gZ2V0IGNvbnNpc3RlbnQKKyAqIHNuYXBzaG90IGZvciBlYWNoIHZhcmlhYmxlIChidXQgbm8gZ3VhcmFudGVlIG9uIHNldmVyYWwgb25lcykKKyAqCisgKiB1NjQgdGJ5dGVzLCB0cGFja2V0czsKKyAqIHVuc2lnbmVkIGludCBzdGFydDsKKyAqCisgKiBkbyB7CisgKiAgICAgICAgIHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKCZzdGF0cy0+c3luY3ApOworICogICAgICAgICB0Ynl0ZXMgPSBzdGF0cy0+Ynl0ZXM2NDsgLy8gbm9uIGF0b21pYyBvcGVyYXRpb24KKyAqICAgICAgICAgdHBhY2tldHMgPSBzdGF0cy0+cGFja2V0czY0OyAvLyBub24gYXRvbWljIG9wZXJhdGlvbgorICogfSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KCZzdGF0cy0+c3luY3AsIHN0YXJ0KSk7CisgKgorICoKKyAqIEV4YW1wbGUgb2YgdXNlIGluIGRyaXZlcnMvbmV0L2xvb3BiYWNrLmMsIHVzaW5nIHBlcl9jcHUgY29udGFpbmVycywKKyAqIGluIEJIIGRpc2FibGVkIGNvbnRleHQuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9zZXFsb2NrLmg+CisKK3N0cnVjdCB1NjRfc3RhdHNfc3luYyB7CisjaWYgQklUU19QRVJfTE9ORz09MzIgJiYgZGVmaW5lZChDT05GSUdfU01QKQorCXNlcWNvdW50X3QJc2VxOworI2VuZGlmCit9OworCitzdGF0aWMgdm9pZCBpbmxpbmUgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgKnN5bmNwKQoreworI2lmIEJJVFNfUEVSX0xPTkc9PTMyICYmIGRlZmluZWQoQ09ORklHX1NNUCkKKwl3cml0ZV9zZXFjb3VudF9iZWdpbigmc3luY3AtPnNlcSk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgaW5saW5lIHU2NF9zdGF0c191cGRhdGVfZW5kKHN0cnVjdCB1NjRfc3RhdHNfc3luYyAqc3luY3ApCit7CisjaWYgQklUU19QRVJfTE9ORz09MzIgJiYgZGVmaW5lZChDT05GSUdfU01QKQorCXdyaXRlX3NlcWNvdW50X2VuZCgmc3luY3AtPnNlcSk7CisjZW5kaWYKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBpbmxpbmUgdTY0X3N0YXRzX2ZldGNoX2JlZ2luKGNvbnN0IHN0cnVjdCB1NjRfc3RhdHNfc3luYyAqc3luY3ApCit7CisjaWYgQklUU19QRVJfTE9ORz09MzIgJiYgZGVmaW5lZChDT05GSUdfU01QKQorCXJldHVybiByZWFkX3NlcWNvdW50X2JlZ2luKCZzeW5jcC0+c2VxKTsKKyNlbHNlCisjaWYgQklUU19QRVJfTE9ORz09MzIKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKyNlbmRpZgorCXJldHVybiAwOworI2VuZGlmCit9CisKK3N0YXRpYyBib29sIGlubGluZSB1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoY29uc3Qgc3RydWN0IHU2NF9zdGF0c19zeW5jICpzeW5jcCwKKwkJCQkJIHVuc2lnbmVkIGludCBzdGFydCkKK3sKKyNpZiBCSVRTX1BFUl9MT05HPT0zMiAmJiBkZWZpbmVkKENPTkZJR19TTVApCisJcmV0dXJuIHJlYWRfc2VxY291bnRfcmV0cnkoJnN5bmNwLT5zZXEsIHN0YXJ0KTsKKyNlbHNlCisjaWYgQklUU19QRVJfTE9ORz09MzIKKwlwcmVlbXB0X2VuYWJsZSgpOworI2VuZGlmCisJcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKKy8qCisgKiBJbiBjYXNlIHNvZnRpcnEgaGFuZGxlcnMgY2FuIHVwZGF0ZSB1NjQgY291bnRlcnMsIHJlYWRlcnMgY2FuIHVzZSBmb2xsb3dpbmcgaGVscGVycworICogLSBTTVAgMzJiaXQgYXJjaGVzIHVzZSBzZXFjb3VudCBwcm90ZWN0aW9uLCBpcnEgc2FmZS4KKyAqIC0gVVAgMzJiaXQgbXVzdCBkaXNhYmxlIEJILgorICogLSA2NGJpdCBoYXZlIG5vIHByb2JsZW0gYXRvbWljYWxseSByZWFkaW5nIHU2NCB2YWx1ZXMsIGlycSBzYWZlLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGlubGluZSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW5fYmgoY29uc3Qgc3RydWN0IHU2NF9zdGF0c19zeW5jICpzeW5jcCkKK3sKKyNpZiBCSVRTX1BFUl9MT05HPT0zMiAmJiBkZWZpbmVkKENPTkZJR19TTVApCisJcmV0dXJuIHJlYWRfc2VxY291bnRfYmVnaW4oJnN5bmNwLT5zZXEpOworI2Vsc2UKKyNpZiBCSVRTX1BFUl9MT05HPT0zMgorCWxvY2FsX2JoX2Rpc2FibGUoKTsKKyNlbmRpZgorCXJldHVybiAwOworI2VuZGlmCit9CisKK3N0YXRpYyBib29sIGlubGluZSB1NjRfc3RhdHNfZmV0Y2hfcmV0cnlfYmgoY29uc3Qgc3RydWN0IHU2NF9zdGF0c19zeW5jICpzeW5jcCwKKwkJCQkJIHVuc2lnbmVkIGludCBzdGFydCkKK3sKKyNpZiBCSVRTX1BFUl9MT05HPT0zMiAmJiBkZWZpbmVkKENPTkZJR19TTVApCisJcmV0dXJuIHJlYWRfc2VxY291bnRfcmV0cnkoJnN5bmNwLT5zZXEsIHN0YXJ0KTsKKyNlbHNlCisjaWYgQklUU19QRVJfTE9ORz09MzIKKwlsb2NhbF9iaF9lbmFibGUoKTsKKyNlbmRpZgorCXJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCisjZW5kaWYgLyogX0xJTlVYX1U2NF9TVEFUU19TWU5DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3ZpZGVvLmggYi9pbmNsdWRlL2xpbnV4L3VzYi92aWRlby5oCmluZGV4IGJlNDM2ZDkuLjNiM2I5NWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3ZpZGVvLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvdmlkZW8uaApAQCAtMTYwLDUgKzE2MCw0MDkgQEAKICNkZWZpbmUgVVZDX1NUQVRVU19UWVBFX0NPTlRST0wJCQkJMQogI2RlZmluZSBVVkNfU1RBVFVTX1RZUEVfU1RSRUFNSU5HCQkJMgogCisvKiAyLjQuMy4zLiBQYXlsb2FkIEhlYWRlciBJbmZvcm1hdGlvbiAqLworI2RlZmluZSBVVkNfU1RSRUFNX0VPSAkJCQkJKDEgPDwgNykKKyNkZWZpbmUgVVZDX1NUUkVBTV9FUlIJCQkJCSgxIDw8IDYpCisjZGVmaW5lIFVWQ19TVFJFQU1fU1RJCQkJCQkoMSA8PCA1KQorI2RlZmluZSBVVkNfU1RSRUFNX1JFUwkJCQkJKDEgPDwgNCkKKyNkZWZpbmUgVVZDX1NUUkVBTV9TQ1IJCQkJCSgxIDw8IDMpCisjZGVmaW5lIFVWQ19TVFJFQU1fUFRTCQkJCQkoMSA8PCAyKQorI2RlZmluZSBVVkNfU1RSRUFNX0VPRgkJCQkJKDEgPDwgMSkKKyNkZWZpbmUgVVZDX1NUUkVBTV9GSUQJCQkJCSgxIDw8IDApCisKKy8qIDQuMS4yLiBDb250cm9sIENhcGFiaWxpdGllcyAqLworI2RlZmluZSBVVkNfQ09OVFJPTF9DQVBfR0VUCQkJCSgxIDw8IDApCisjZGVmaW5lIFVWQ19DT05UUk9MX0NBUF9TRVQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgVVZDX0NPTlRST0xfQ0FQX0RJU0FCTEVECQkJKDEgPDwgMikKKyNkZWZpbmUgVVZDX0NPTlRST0xfQ0FQX0FVVE9VUERBVEUJCQkoMSA8PCAzKQorI2RlZmluZSBVVkNfQ09OVFJPTF9DQVBfQVNZTkNIUk9OT1VTCQkJKDEgPDwgNCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVVkMgc3RydWN0dXJlcworICovCisKKy8qIEFsbCBVVkMgZGVzY3JpcHRvcnMgaGF2ZSB0aGVzZSAzIGZpZWxkcyBhdCB0aGUgYmVnaW5uaW5nICovCitzdHJ1Y3QgdXZjX2Rlc2NyaXB0b3JfaGVhZGVyIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4ICBiRGVzY3JpcHRvclN1YlR5cGU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiAzLjcuMi4gVmlkZW8gQ29udHJvbCBJbnRlcmZhY2UgSGVhZGVyIERlc2NyaXB0b3IgKi8KK3N0cnVjdCB1dmNfaGVhZGVyX2Rlc2NyaXB0b3IgeworCV9fdTggIGJMZW5ndGg7CisJX191OCAgYkRlc2NyaXB0b3JUeXBlOworCV9fdTggIGJEZXNjcmlwdG9yU3ViVHlwZTsKKwlfX3UxNiBiY2RVVkM7CisJX191MTYgd1RvdGFsTGVuZ3RoOworCV9fdTMyIGR3Q2xvY2tGcmVxdWVuY3k7CisJX191OCAgYkluQ29sbGVjdGlvbjsKKwlfX3U4ICBiYUludGVyZmFjZU5yW107Cit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKworI2RlZmluZSBVVkNfRFRfSEVBREVSX1NJWkUobikJCQkJKDEyKyhuKSkKKworI2RlZmluZSBVVkNfSEVBREVSX0RFU0NSSVBUT1IobikgXAorCXV2Y19oZWFkZXJfZGVzY3JpcHRvcl8jI24KKworI2RlZmluZSBERUNMQVJFX1VWQ19IRUFERVJfREVTQ1JJUFRPUihuKQkJXAorc3RydWN0IFVWQ19IRUFERVJfREVTQ1JJUFRPUihuKSB7CQkJXAorCV9fdTggIGJMZW5ndGg7CQkJCQlcCisJX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJCQlcCisJX191OCAgYkRlc2NyaXB0b3JTdWJUeXBlOwkJCVwKKwlfX3UxNiBiY2RVVkM7CQkJCQlcCisJX191MTYgd1RvdGFsTGVuZ3RoOwkJCQlcCisJX191MzIgZHdDbG9ja0ZyZXF1ZW5jeTsJCQkJXAorCV9fdTggIGJJbkNvbGxlY3Rpb247CQkJCVwKKwlfX3U4ICBiYUludGVyZmFjZU5yW25dOwkJCQlcCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKQorCisvKiAzLjcuMi4xLiBJbnB1dCBUZXJtaW5hbCBEZXNjcmlwdG9yICovCitzdHJ1Y3QgdXZjX2lucHV0X3Rlcm1pbmFsX2Rlc2NyaXB0b3IgeworCV9fdTggIGJMZW5ndGg7CisJX191OCAgYkRlc2NyaXB0b3JUeXBlOworCV9fdTggIGJEZXNjcmlwdG9yU3ViVHlwZTsKKwlfX3U4ICBiVGVybWluYWxJRDsKKwlfX3UxNiB3VGVybWluYWxUeXBlOworCV9fdTggIGJBc3NvY1Rlcm1pbmFsOworCV9fdTggIGlUZXJtaW5hbDsKK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCisjZGVmaW5lIFVWQ19EVF9JTlBVVF9URVJNSU5BTF9TSVpFCQkJOAorCisvKiAzLjcuMi4yLiBPdXRwdXQgVGVybWluYWwgRGVzY3JpcHRvciAqLworc3RydWN0IHV2Y19vdXRwdXRfdGVybWluYWxfZGVzY3JpcHRvciB7CisJX191OCAgYkxlbmd0aDsKKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CisJX191OCAgYkRlc2NyaXB0b3JTdWJUeXBlOworCV9fdTggIGJUZXJtaW5hbElEOworCV9fdTE2IHdUZXJtaW5hbFR5cGU7CisJX191OCAgYkFzc29jVGVybWluYWw7CisJX191OCAgYlNvdXJjZUlEOworCV9fdTggIGlUZXJtaW5hbDsKK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCisjZGVmaW5lIFVWQ19EVF9PVVRQVVRfVEVSTUlOQUxfU0laRQkJCTkKKworLyogMy43LjIuMy4gQ2FtZXJhIFRlcm1pbmFsIERlc2NyaXB0b3IgKi8KK3N0cnVjdCB1dmNfY2FtZXJhX3Rlcm1pbmFsX2Rlc2NyaXB0b3IgeworCV9fdTggIGJMZW5ndGg7CisJX191OCAgYkRlc2NyaXB0b3JUeXBlOworCV9fdTggIGJEZXNjcmlwdG9yU3ViVHlwZTsKKwlfX3U4ICBiVGVybWluYWxJRDsKKwlfX3UxNiB3VGVybWluYWxUeXBlOworCV9fdTggIGJBc3NvY1Rlcm1pbmFsOworCV9fdTggIGlUZXJtaW5hbDsKKwlfX3UxNiB3T2JqZWN0aXZlRm9jYWxMZW5ndGhNaW47CisJX191MTYgd09iamVjdGl2ZUZvY2FsTGVuZ3RoTWF4OworCV9fdTE2IHdPY3VsYXJGb2NhbExlbmd0aDsKKwlfX3U4ICBiQ29udHJvbFNpemU7CisJX191OCAgYm1Db250cm9sc1szXTsKK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCisjZGVmaW5lIFVWQ19EVF9DQU1FUkFfVEVSTUlOQUxfU0laRShuKQkJCSgxNSsobikpCisKKy8qIDMuNy4yLjQuIFNlbGVjdG9yIFVuaXQgRGVzY3JpcHRvciAqLworc3RydWN0IHV2Y19zZWxlY3Rvcl91bml0X2Rlc2NyaXB0b3IgeworCV9fdTggIGJMZW5ndGg7CisJX191OCAgYkRlc2NyaXB0b3JUeXBlOworCV9fdTggIGJEZXNjcmlwdG9yU3ViVHlwZTsKKwlfX3U4ICBiVW5pdElEOworCV9fdTggIGJOckluUGluczsKKwlfX3U4ICBiYVNvdXJjZUlEWzBdOworCV9fdTggIGlTZWxlY3RvcjsKK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCisjZGVmaW5lIFVWQ19EVF9TRUxFQ1RPUl9VTklUX1NJWkUobikJCQkoNisobikpCisKKyNkZWZpbmUgVVZDX1NFTEVDVE9SX1VOSVRfREVTQ1JJUFRPUihuKQlcCisJdXZjX3NlbGVjdG9yX3VuaXRfZGVzY3JpcHRvcl8jI24KKworI2RlZmluZSBERUNMQVJFX1VWQ19TRUxFQ1RPUl9VTklUX0RFU0NSSVBUT1IobikJXAorc3RydWN0IFVWQ19TRUxFQ1RPUl9VTklUX0RFU0NSSVBUT1IobikgewkJXAorCV9fdTggIGJMZW5ndGg7CQkJCQlcCisJX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJCQlcCisJX191OCAgYkRlc2NyaXB0b3JTdWJUeXBlOwkJCVwKKwlfX3U4ICBiVW5pdElEOwkJCQkJXAorCV9fdTggIGJOckluUGluczsJCQkJXAorCV9fdTggIGJhU291cmNlSURbbl07CQkJCVwKKwlfX3U4ICBpU2VsZWN0b3I7CQkJCVwKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpCisKKy8qIDMuNy4yLjUuIFByb2Nlc3NpbmcgVW5pdCBEZXNjcmlwdG9yICovCitzdHJ1Y3QgdXZjX3Byb2Nlc3NpbmdfdW5pdF9kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4ICBiRGVzY3JpcHRvclN1YlR5cGU7CisJX191OCAgYlVuaXRJRDsKKwlfX3U4ICBiU291cmNlSUQ7CisJX191MTYgd01heE11bHRpcGxpZXI7CisJX191OCAgYkNvbnRyb2xTaXplOworCV9fdTggIGJtQ29udHJvbHNbMl07CisJX191OCAgaVByb2Nlc3Npbmc7Cit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKworI2RlZmluZSBVVkNfRFRfUFJPQ0VTU0lOR19VTklUX1NJWkUobikJCQkoOSsobikpCisKKy8qIDMuNy4yLjYuIEV4dGVuc2lvbiBVbml0IERlc2NyaXB0b3IgKi8KK3N0cnVjdCB1dmNfZXh0ZW5zaW9uX3VuaXRfZGVzY3JpcHRvciB7CisJX191OCAgYkxlbmd0aDsKKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CisJX191OCAgYkRlc2NyaXB0b3JTdWJUeXBlOworCV9fdTggIGJVbml0SUQ7CisJX191OCAgZ3VpZEV4dGVuc2lvbkNvZGVbMTZdOworCV9fdTggIGJOdW1Db250cm9sczsKKwlfX3U4ICBiTnJJblBpbnM7CisJX191OCAgYmFTb3VyY2VJRFswXTsKKwlfX3U4ICBiQ29udHJvbFNpemU7CisJX191OCAgYm1Db250cm9sc1swXTsKKwlfX3U4ICBpRXh0ZW5zaW9uOworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisKKyNkZWZpbmUgVVZDX0RUX0VYVEVOU0lPTl9VTklUX1NJWkUocCwgbikJCSgyNCsocCkrKG4pKQorCisjZGVmaW5lIFVWQ19FWFRFTlNJT05fVU5JVF9ERVNDUklQVE9SKHAsIG4pIFwKKwl1dmNfZXh0ZW5zaW9uX3VuaXRfZGVzY3JpcHRvcl8jI3BfIyNuCisKKyNkZWZpbmUgREVDTEFSRV9VVkNfRVhURU5TSU9OX1VOSVRfREVTQ1JJUFRPUihwLCBuKQlcCitzdHJ1Y3QgVVZDX0VYVEVOU0lPTl9VTklUX0RFU0NSSVBUT1IocCwgbikgewkJXAorCV9fdTggIGJMZW5ndGg7CQkJCQlcCisJX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJCQlcCisJX191OCAgYkRlc2NyaXB0b3JTdWJUeXBlOwkJCVwKKwlfX3U4ICBiVW5pdElEOwkJCQkJXAorCV9fdTggIGd1aWRFeHRlbnNpb25Db2RlWzE2XTsJCQlcCisJX191OCAgYk51bUNvbnRyb2xzOwkJCQlcCisJX191OCAgYk5ySW5QaW5zOwkJCQlcCisJX191OCAgYmFTb3VyY2VJRFtwXTsJCQkJXAorCV9fdTggIGJDb250cm9sU2l6ZTsJCQkJXAorCV9fdTggIGJtQ29udHJvbHNbbl07CQkJCVwKKwlfX3U4ICBpRXh0ZW5zaW9uOwkJCQlcCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKQorCisvKiAzLjguMi4yLiBWaWRlbyBDb250cm9sIEludGVycnVwdCBFbmRwb2ludCBEZXNjcmlwdG9yICovCitzdHJ1Y3QgdXZjX2NvbnRyb2xfZW5kcG9pbnRfZGVzY3JpcHRvciB7CisJX191OCAgYkxlbmd0aDsKKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CisJX191OCAgYkRlc2NyaXB0b3JTdWJUeXBlOworCV9fdTE2IHdNYXhUcmFuc2ZlclNpemU7Cit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKworI2RlZmluZSBVVkNfRFRfQ09OVFJPTF9FTkRQT0lOVF9TSVpFCQkJNQorCisvKiAzLjkuMi4xLiBJbnB1dCBIZWFkZXIgRGVzY3JpcHRvciAqLworc3RydWN0IHV2Y19pbnB1dF9oZWFkZXJfZGVzY3JpcHRvciB7CisJX191OCAgYkxlbmd0aDsKKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CisJX191OCAgYkRlc2NyaXB0b3JTdWJUeXBlOworCV9fdTggIGJOdW1Gb3JtYXRzOworCV9fdTE2IHdUb3RhbExlbmd0aDsKKwlfX3U4ICBiRW5kcG9pbnRBZGRyZXNzOworCV9fdTggIGJtSW5mbzsKKwlfX3U4ICBiVGVybWluYWxMaW5rOworCV9fdTggIGJTdGlsbENhcHR1cmVNZXRob2Q7CisJX191OCAgYlRyaWdnZXJTdXBwb3J0OworCV9fdTggIGJUcmlnZ2VyVXNhZ2U7CisJX191OCAgYkNvbnRyb2xTaXplOworCV9fdTggIGJtYUNvbnRyb2xzW107Cit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKworI2RlZmluZSBVVkNfRFRfSU5QVVRfSEVBREVSX1NJWkUobiwgcCkJCQkoMTMrKG4qcCkpCisKKyNkZWZpbmUgVVZDX0lOUFVUX0hFQURFUl9ERVNDUklQVE9SKG4sIHApIFwKKwl1dmNfaW5wdXRfaGVhZGVyX2Rlc2NyaXB0b3JfIyNuXyMjcAorCisjZGVmaW5lIERFQ0xBUkVfVVZDX0lOUFVUX0hFQURFUl9ERVNDUklQVE9SKG4sIHApCVwKK3N0cnVjdCBVVkNfSU5QVVRfSEVBREVSX0RFU0NSSVBUT1IobiwgcCkgewkJXAorCV9fdTggIGJMZW5ndGg7CQkJCQlcCisJX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJCQlcCisJX191OCAgYkRlc2NyaXB0b3JTdWJUeXBlOwkJCVwKKwlfX3U4ICBiTnVtRm9ybWF0czsJCQkJXAorCV9fdTE2IHdUb3RhbExlbmd0aDsJCQkJXAorCV9fdTggIGJFbmRwb2ludEFkZHJlc3M7CQkJCVwKKwlfX3U4ICBibUluZm87CQkJCQlcCisJX191OCAgYlRlcm1pbmFsTGluazsJCQkJXAorCV9fdTggIGJTdGlsbENhcHR1cmVNZXRob2Q7CQkJXAorCV9fdTggIGJUcmlnZ2VyU3VwcG9ydDsJCQkJXAorCV9fdTggIGJUcmlnZ2VyVXNhZ2U7CQkJCVwKKwlfX3U4ICBiQ29udHJvbFNpemU7CQkJCVwKKwlfX3U4ICBibWFDb250cm9sc1twXVtuXTsJCQlcCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKQorCisvKiAzLjkuMi4yLiBPdXRwdXQgSGVhZGVyIERlc2NyaXB0b3IgKi8KK3N0cnVjdCB1dmNfb3V0cHV0X2hlYWRlcl9kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4ICBiRGVzY3JpcHRvclN1YlR5cGU7CisJX191OCAgYk51bUZvcm1hdHM7CisJX191MTYgd1RvdGFsTGVuZ3RoOworCV9fdTggIGJFbmRwb2ludEFkZHJlc3M7CisJX191OCAgYlRlcm1pbmFsTGluazsKKwlfX3U4ICBiQ29udHJvbFNpemU7CisJX191OCAgYm1hQ29udHJvbHNbXTsKK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCisjZGVmaW5lIFVWQ19EVF9PVVRQVVRfSEVBREVSX1NJWkUobiwgcCkJCQkoOSsobipwKSkKKworI2RlZmluZSBVVkNfT1VUUFVUX0hFQURFUl9ERVNDUklQVE9SKG4sIHApIFwKKwl1dmNfb3V0cHV0X2hlYWRlcl9kZXNjcmlwdG9yXyMjbl8jI3AKKworI2RlZmluZSBERUNMQVJFX1VWQ19PVVRQVVRfSEVBREVSX0RFU0NSSVBUT1IobiwgcCkJXAorc3RydWN0IFVWQ19PVVRQVVRfSEVBREVSX0RFU0NSSVBUT1IobiwgcCkgewkJXAorCV9fdTggIGJMZW5ndGg7CQkJCQlcCisJX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJCQlcCisJX191OCAgYkRlc2NyaXB0b3JTdWJUeXBlOwkJCVwKKwlfX3U4ICBiTnVtRm9ybWF0czsJCQkJXAorCV9fdTE2IHdUb3RhbExlbmd0aDsJCQkJXAorCV9fdTggIGJFbmRwb2ludEFkZHJlc3M7CQkJCVwKKwlfX3U4ICBiVGVybWluYWxMaW5rOwkJCQlcCisJX191OCAgYkNvbnRyb2xTaXplOwkJCQlcCisJX191OCAgYm1hQ29udHJvbHNbcF1bbl07CQkJXAorfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkKKworLyogMy45LjIuNi4gQ29sb3IgbWF0Y2hpbmcgZGVzY3JpcHRvciAqLworc3RydWN0IHV2Y19jb2xvcl9tYXRjaGluZ19kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4ICBiRGVzY3JpcHRvclN1YlR5cGU7CisJX191OCAgYkNvbG9yUHJpbWFyaWVzOworCV9fdTggIGJUcmFuc2ZlckNoYXJhY3RlcmlzdGljczsKKwlfX3U4ICBiTWF0cml4Q29lZmZpY2llbnRzOworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisKKyNkZWZpbmUgVVZDX0RUX0NPTE9SX01BVENISU5HX1NJWkUJCQk2CisKKy8qIDQuMy4xLjEuIFZpZGVvIFByb2JlIGFuZCBDb21taXQgQ29udHJvbHMgKi8KK3N0cnVjdCB1dmNfc3RyZWFtaW5nX2NvbnRyb2wgeworCV9fdTE2IGJtSGludDsKKwlfX3U4ICBiRm9ybWF0SW5kZXg7CisJX191OCAgYkZyYW1lSW5kZXg7CisJX191MzIgZHdGcmFtZUludGVydmFsOworCV9fdTE2IHdLZXlGcmFtZVJhdGU7CisJX191MTYgd1BGcmFtZVJhdGU7CisJX191MTYgd0NvbXBRdWFsaXR5OworCV9fdTE2IHdDb21wV2luZG93U2l6ZTsKKwlfX3UxNiB3RGVsYXk7CisJX191MzIgZHdNYXhWaWRlb0ZyYW1lU2l6ZTsKKwlfX3UzMiBkd01heFBheWxvYWRUcmFuc2ZlclNpemU7CisJX191MzIgZHdDbG9ja0ZyZXF1ZW5jeTsKKwlfX3U4ICBibUZyYW1pbmdJbmZvOworCV9fdTggIGJQcmVmZXJlZFZlcnNpb247CisJX191OCAgYk1pblZlcnNpb247CisJX191OCAgYk1heFZlcnNpb247Cit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKworLyogVW5jb21wcmVzc2VkIFBheWxvYWQgLSAzLjEuMS4gVW5jb21wcmVzc2VkIFZpZGVvIEZvcm1hdCBEZXNjcmlwdG9yICovCitzdHJ1Y3QgdXZjX2Zvcm1hdF91bmNvbXByZXNzZWQgeworCV9fdTggIGJMZW5ndGg7CisJX191OCAgYkRlc2NyaXB0b3JUeXBlOworCV9fdTggIGJEZXNjcmlwdG9yU3ViVHlwZTsKKwlfX3U4ICBiRm9ybWF0SW5kZXg7CisJX191OCAgYk51bUZyYW1lRGVzY3JpcHRvcnM7CisJX191OCAgZ3VpZEZvcm1hdFsxNl07CisJX191OCAgYkJpdHNQZXJQaXhlbDsKKwlfX3U4ICBiRGVmYXVsdEZyYW1lSW5kZXg7CisJX191OCAgYkFzcGVjdFJhdGlvWDsKKwlfX3U4ICBiQXNwZWN0UmF0aW9ZOworCV9fdTggIGJtSW50ZXJmYWNlRmxhZ3M7CisJX191OCAgYkNvcHlQcm90ZWN0OworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisKKyNkZWZpbmUgVVZDX0RUX0ZPUk1BVF9VTkNPTVBSRVNTRURfU0laRQkJCTI3CisKKy8qIFVuY29tcHJlc3NlZCBQYXlsb2FkIC0gMy4xLjIuIFVuY29tcHJlc3NlZCBWaWRlbyBGcmFtZSBEZXNjcmlwdG9yICovCitzdHJ1Y3QgdXZjX2ZyYW1lX3VuY29tcHJlc3NlZCB7CisJX191OCAgYkxlbmd0aDsKKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CisJX191OCAgYkRlc2NyaXB0b3JTdWJUeXBlOworCV9fdTggIGJGcmFtZUluZGV4OworCV9fdTggIGJtQ2FwYWJpbGl0aWVzOworCV9fdTE2IHdXaWR0aDsKKwlfX3UxNiB3SGVpZ2h0OworCV9fdTMyIGR3TWluQml0UmF0ZTsKKwlfX3UzMiBkd01heEJpdFJhdGU7CisJX191MzIgZHdNYXhWaWRlb0ZyYW1lQnVmZmVyU2l6ZTsKKwlfX3UzMiBkd0RlZmF1bHRGcmFtZUludGVydmFsOworCV9fdTggIGJGcmFtZUludGVydmFsVHlwZTsKKwlfX3UzMiBkd0ZyYW1lSW50ZXJ2YWxbXTsKK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCisjZGVmaW5lIFVWQ19EVF9GUkFNRV9VTkNPTVBSRVNTRURfU0laRShuKQkJKDI2KzQqKG4pKQorCisjZGVmaW5lIFVWQ19GUkFNRV9VTkNPTVBSRVNTRUQobikgXAorCXV2Y19mcmFtZV91bmNvbXByZXNzZWRfIyNuCisKKyNkZWZpbmUgREVDTEFSRV9VVkNfRlJBTUVfVU5DT01QUkVTU0VEKG4pCQlcCitzdHJ1Y3QgVVZDX0ZSQU1FX1VOQ09NUFJFU1NFRChuKSB7CQkJXAorCV9fdTggIGJMZW5ndGg7CQkJCQlcCisJX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJCQlcCisJX191OCAgYkRlc2NyaXB0b3JTdWJUeXBlOwkJCVwKKwlfX3U4ICBiRnJhbWVJbmRleDsJCQkJXAorCV9fdTggIGJtQ2FwYWJpbGl0aWVzOwkJCQlcCisJX191MTYgd1dpZHRoOwkJCQkJXAorCV9fdTE2IHdIZWlnaHQ7CQkJCQlcCisJX191MzIgZHdNaW5CaXRSYXRlOwkJCQlcCisJX191MzIgZHdNYXhCaXRSYXRlOwkJCQlcCisJX191MzIgZHdNYXhWaWRlb0ZyYW1lQnVmZmVyU2l6ZTsJCVwKKwlfX3UzMiBkd0RlZmF1bHRGcmFtZUludGVydmFsOwkJCVwKKwlfX3U4ICBiRnJhbWVJbnRlcnZhbFR5cGU7CQkJXAorCV9fdTMyIGR3RnJhbWVJbnRlcnZhbFtuXTsJCQlcCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKQorCisvKiBNSlBFRyBQYXlsb2FkIC0gMy4xLjEuIE1KUEVHIFZpZGVvIEZvcm1hdCBEZXNjcmlwdG9yICovCitzdHJ1Y3QgdXZjX2Zvcm1hdF9tanBlZyB7CisJX191OCAgYkxlbmd0aDsKKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CisJX191OCAgYkRlc2NyaXB0b3JTdWJUeXBlOworCV9fdTggIGJGb3JtYXRJbmRleDsKKwlfX3U4ICBiTnVtRnJhbWVEZXNjcmlwdG9yczsKKwlfX3U4ICBibUZsYWdzOworCV9fdTggIGJEZWZhdWx0RnJhbWVJbmRleDsKKwlfX3U4ICBiQXNwZWN0UmF0aW9YOworCV9fdTggIGJBc3BlY3RSYXRpb1k7CisJX191OCAgYm1JbnRlcmZhY2VGbGFnczsKKwlfX3U4ICBiQ29weVByb3RlY3Q7Cit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKworI2RlZmluZSBVVkNfRFRfRk9STUFUX01KUEVHX1NJWkUJCQkxMQorCisvKiBNSlBFRyBQYXlsb2FkIC0gMy4xLjIuIE1KUEVHIFZpZGVvIEZyYW1lIERlc2NyaXB0b3IgKi8KK3N0cnVjdCB1dmNfZnJhbWVfbWpwZWcgeworCV9fdTggIGJMZW5ndGg7CisJX191OCAgYkRlc2NyaXB0b3JUeXBlOworCV9fdTggIGJEZXNjcmlwdG9yU3ViVHlwZTsKKwlfX3U4ICBiRnJhbWVJbmRleDsKKwlfX3U4ICBibUNhcGFiaWxpdGllczsKKwlfX3UxNiB3V2lkdGg7CisJX191MTYgd0hlaWdodDsKKwlfX3UzMiBkd01pbkJpdFJhdGU7CisJX191MzIgZHdNYXhCaXRSYXRlOworCV9fdTMyIGR3TWF4VmlkZW9GcmFtZUJ1ZmZlclNpemU7CisJX191MzIgZHdEZWZhdWx0RnJhbWVJbnRlcnZhbDsKKwlfX3U4ICBiRnJhbWVJbnRlcnZhbFR5cGU7CisJX191MzIgZHdGcmFtZUludGVydmFsW107Cit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKworI2RlZmluZSBVVkNfRFRfRlJBTUVfTUpQRUdfU0laRShuKQkJCSgyNis0KihuKSkKKworI2RlZmluZSBVVkNfRlJBTUVfTUpQRUcobikgXAorCXV2Y19mcmFtZV9tanBlZ18jI24KKworI2RlZmluZSBERUNMQVJFX1VWQ19GUkFNRV9NSlBFRyhuKQkJCVwKK3N0cnVjdCBVVkNfRlJBTUVfTUpQRUcobikgewkJCQlcCisJX191OCAgYkxlbmd0aDsJCQkJCVwKKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CQkJCVwKKwlfX3U4ICBiRGVzY3JpcHRvclN1YlR5cGU7CQkJXAorCV9fdTggIGJGcmFtZUluZGV4OwkJCQlcCisJX191OCAgYm1DYXBhYmlsaXRpZXM7CQkJCVwKKwlfX3UxNiB3V2lkdGg7CQkJCQlcCisJX191MTYgd0hlaWdodDsJCQkJCVwKKwlfX3UzMiBkd01pbkJpdFJhdGU7CQkJCVwKKwlfX3UzMiBkd01heEJpdFJhdGU7CQkJCVwKKwlfX3UzMiBkd01heFZpZGVvRnJhbWVCdWZmZXJTaXplOwkJXAorCV9fdTMyIGR3RGVmYXVsdEZyYW1lSW50ZXJ2YWw7CQkJXAorCV9fdTggIGJGcmFtZUludGVydmFsVHlwZTsJCQlcCisJX191MzIgZHdGcmFtZUludGVydmFsW25dOwkJCVwKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpCisKICNlbmRpZiAvKiBfX0xJTlVYX1VTQl9WSURFT19IICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaCBiL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaAppbmRleCBjYzRmNDUzLi44MTc4MTU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oCkBAIC0zNiw2ICszNiw5IEBACiAJCWtyZWZfcHV0KCZucy0+a3JlZiwgZnJlZV91c2VyX25zKTsKIH0KIAordWlkX3QgdXNlcl9uc19tYXBfdWlkKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdG8sIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLCB1aWRfdCB1aWQpOworZ2lkX3QgdXNlcl9uc19tYXBfZ2lkKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdG8sIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLCBnaWRfdCBnaWQpOworCiAjZWxzZQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqZ2V0X3VzZXJfbnMoc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucykKQEAgLTUyLDYgKzU1LDE3IEBACiB7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdWlkX3QgdXNlcl9uc19tYXBfdWlkKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdG8sCisJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsIHVpZF90IHVpZCkKK3sKKwlyZXR1cm4gdWlkOworfQorc3RhdGljIGlubGluZSBnaWRfdCB1c2VyX25zX21hcF9naWQoc3RydWN0IHVzZXJfbmFtZXNwYWNlICp0bywKKwljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwgZ2lkX3QgZ2lkKQoreworCXJldHVybiBnaWQ7Cit9CisKICNlbmRpZgogCiAjZW5kaWYgLyogX0xJTlVYX1VTRVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92Z2FhcmIuaCBiL2luY2x1ZGUvbGludXgvdmdhYXJiLmgKaW5kZXggYzlhOTc1OS4uODE0ZjI5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92Z2FhcmIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZnYWFyYi5oCkBAIC0yOSw2ICsyOSw3IEBACiAgKi8KIAogI2lmbmRlZiBMSU5VWF9WR0FfSAorI2RlZmluZSBMSU5VWF9WR0FfSAogCiAjaW5jbHVkZSA8YXNtL3ZnYS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb185cC5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fOXAuaAppbmRleCA1Y2YxMTc2Li4zOTVjMzhhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb185cC5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvXzlwLmgKQEAgLTQsNiArNCw3IEBACiAgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4gKi8KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIC8qIFRoZSBmZWF0dXJlIGJpdG1hcCBmb3IgdmlydGlvIDlQICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oIGIvaW5jbHVkZS9saW51eC92bWFsbG9jLmgKaW5kZXggMjI3YzJhNS4uZGUwNWU5NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92bWFsbG9jLmgKKysrIGIvaW5jbHVkZS9saW51eC92bWFsbG9jLmgKQEAgLTMwLDcgKzMwLDcgQEAKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAlzdHJ1Y3QgcGFnZQkJKipwYWdlczsKIAl1bnNpZ25lZCBpbnQJCW5yX3BhZ2VzOwotCXVuc2lnbmVkIGxvbmcJCXBoeXNfYWRkcjsKKwlwaHlzX2FkZHJfdAkJcGh5c19hZGRyOwogCXZvaWQJCQkqY2FsbGVyOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93bHAuaCBiL2luY2x1ZGUvbGludXgvd2xwLmgKaW5kZXggYWM5NWNlNi4uYzc2ZmUyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93bHAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3dscC5oCkBAIC0zMDAsNyArMzAwLDcgQEAKIAlfX2xlMTYgY3ljbGVfcGFyYW07CiAJX19sZTE2IGFjd19hbmNob3JfYWRkcjsKIAl1OCB3c3NpZF9oYXNoX2xpc3RbXTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdGF0aWMgaW5saW5lIGludCB3bHBfaWVfaGFzaF9sZW5ndGgoc3RydWN0IHdscF9pZSAqaWUpCiB7CkBAIC0zMjQsNyArMzI0LDcgQEAKICAqLwogc3RydWN0IHdscF9ub25jZSB7CiAJdTggZGF0YVsxNl07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoqCiAgKiBXTFAgVVVJRApAQCAtMzM2LDcgKzMzNiw3IEBACiAgKi8KIHN0cnVjdCB3bHBfdXVpZCB7CiAJdTggZGF0YVsxNl07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogCiAvKioKQEAgLTM0OCw3ICszNDgsNyBAQAogCXU4IE9VSVszXTsKIAl1OCBPVUlzdWJkaXY7CiAJX19sZTE2IHN1YklEOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qKgogICogV0xQIGZyYW1lIGhlYWRlcgpAQCAtMzU3LDcgKzM1Nyw3IEBACiBzdHJ1Y3Qgd2xwX2ZyYW1lX2hkciB7CiAJX19sZTE2IG11eF9oZHI7CQkJLyogV0xQX1BST1RPQ09MX0lEICovCiAJZW51bSB3bHBfZnJhbWVfdHlwZSB0eXBlOjg7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoqCiAgKiBXTFAgYXR0cmlidXRlIGZpZWxkIGhlYWRlcgpAQCAtMzY4LDcgKzM2OCw3IEBACiBzdHJ1Y3Qgd2xwX2F0dHJfaGRyIHsKIAlfX2xlMTYgdHlwZTsKIAlfX2xlMTYgbGVuZ3RoOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qKgogICogRGV2aWNlIGluZm9ybWF0aW9uIGNvbW1vbmx5IHVzZWQgdG9nZXRoZXIKQEAgLTQwMSwxMyArNDAxLDEzIEBACiBzdHJ1Y3Qgd2xwX2F0dHJfIyNuYW1lIHsJCQkJCQlcCiAJc3RydWN0IHdscF9hdHRyX2hkciBoZHI7CQkJCQlcCiAJdHlwZSBuYW1lOwkJCQkJCQlcCi19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSB3bHBfYXR0cl9hcnJheSh0eXBlLCBuYW1lKQkJCQkJXAogc3RydWN0IHdscF9hdHRyXyMjbmFtZSB7CQkJCQkJXAogCXN0cnVjdCB3bHBfYXR0cl9oZHIgaGRyOwkJCQkJXAogCXR5cGUgbmFtZVtdOwkJCQkJCQlcCi19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoqCiAgKiBXTFAgYXNzb2NpYXRpb24gYXR0cmlidXRlIGZpZWxkcwpAQCAtNDgzLDcgKzQ4Myw3IEBACiAJc3RydWN0IHdscF9hdHRyX2FjY2VwdF9lbnJsIGFjY2VwdDsKIAlzdHJ1Y3Qgd2xwX2F0dHJfd3NzX3NlY19zdGF0dXMgc2VjX3N0YXQ7CiAJc3RydWN0IHdscF9hdHRyX3dzc19iY2FzdCBiY2FzdDsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBXTFAgV1NTIEluZm9ybWF0aW9uICovCiB3bHBfYXR0cl9hcnJheShzdHJ1Y3Qgd2xwX3dzc19pbmZvLCB3c3NfaW5mbykKQEAgLTUyMCw3ICs1MjAsNyBAQAogc3RydWN0IHdscF9mcmFtZV9zdGRfYWJicnZfaGRyIHsKIAlzdHJ1Y3Qgd2xwX2ZyYW1lX2hkciBoZHI7CiAJdTggdGFnOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qKgogICogV0xQIGFzc29jaWF0aW9uIGZyYW1lcwpAQCAtNTMzLDcgKzUzMyw3IEBACiAJc3RydWN0IHdscF9hdHRyX3ZlcnNpb24gdmVyc2lvbjsKIAlzdHJ1Y3Qgd2xwX2F0dHJfbXNnX3R5cGUgbXNnX3R5cGU7CiAJdTggYXR0cltdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIEV0aGVybmV0IHRvIGRldiBhZGRyZXNzIG1hcHBpbmcgKi8KIHN0cnVjdCB3bHBfZWRhIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oCmluZGV4IDk0NjZlODYuLmQwZjdjODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaApAQCAtMjk3LDQgKzI5Nyw4IEBACiAjZWxzZQogbG9uZyB3b3JrX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCBsb25nICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZyk7CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisjaWZkZWYgQ09ORklHX0xPQ0tERVAKK2ludCBpbl93b3JrcXVldWVfY29udGV4dChzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EpOworI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd3JpdGViYWNrLmggYi9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oCmluZGV4IGQ2M2VmOGYuLmMyNGVjYTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd3JpdGViYWNrLmgKKysrIGIvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaApAQCAtMjcsMTAgKzI3LDYgQEAKICAqIGluIGEgbWFubmVyIHN1Y2ggdGhhdCB1bnNwZWNpZmllZCBmaWVsZHMgYXJlIHNldCB0byB6ZXJvLgogICovCiBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgewotCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGk7CS8qIElmICFOVUxMLCBvbmx5IHdyaXRlIGJhY2sgdGhpcwotCQkJCQkgICBxdWV1ZSAqLwotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CQkvKiBpZiAhTlVMTCwgb25seSB3cml0ZSBpbm9kZXMgZnJvbQotCQkJCQkgICB0aGlzIHN1cGVyX2Jsb2NrICovCiAJZW51bSB3cml0ZWJhY2tfc3luY19tb2RlcyBzeW5jX21vZGU7CiAJdW5zaWduZWQgbG9uZyAqb2xkZXJfdGhhbl90aGlzOwkvKiBJZiAhTlVMTCwgb25seSB3cml0ZSBiYWNrIGlub2RlcwogCQkJCQkgICBvbGRlciB0aGFuIHRoaXMgKi8KQEAgLTY2LDcgKzYyLDggQEAKIHZvaWQgd3JpdGViYWNrX2lub2Rlc19zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiBpbnQgd3JpdGViYWNrX2lub2Rlc19zYl9pZl9pZGxlKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIHZvaWQgc3luY19pbm9kZXNfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICopOwotdm9pZCB3cml0ZWJhY2tfaW5vZGVzX3diYyhzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7Cit2b2lkIHdyaXRlYmFja19pbm9kZXNfd2Ioc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLAorCQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7CiBsb25nIHdiX2RvX3dyaXRlYmFjayhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsIGludCBmb3JjZV93YWl0KTsKIHZvaWQgd2FrZXVwX2ZsdXNoZXJfdGhyZWFkcyhsb25nIG5yX3BhZ2VzKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC94YXR0ci5oIGIvaW5jbHVkZS9saW51eC94YXR0ci5oCmluZGV4IDBjZmExZTkuLmYxZTViZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgveGF0dHIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3hhdHRyLmgKQEAgLTMzLDYgKzMzLDIwIEBACiAjZGVmaW5lIFhBVFRSX1VTRVJfUFJFRklYICJ1c2VyLiIKICNkZWZpbmUgWEFUVFJfVVNFUl9QUkVGSVhfTEVOIChzaXplb2YgKFhBVFRSX1VTRVJfUFJFRklYKSAtIDEpCiAKKy8qIFNlY3VyaXR5IG5hbWVzcGFjZSAqLworI2RlZmluZSBYQVRUUl9TRUxJTlVYX1NVRkZJWCAic2VsaW51eCIKKyNkZWZpbmUgWEFUVFJfTkFNRV9TRUxJTlVYIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCBYQVRUUl9TRUxJTlVYX1NVRkZJWAorCisjZGVmaW5lIFhBVFRSX1NNQUNLX1NVRkZJWCAiU01BQ0s2NCIKKyNkZWZpbmUgWEFUVFJfU01BQ0tfSVBJTiAiU01BQ0s2NElQSU4iCisjZGVmaW5lIFhBVFRSX1NNQUNLX0lQT1VUICJTTUFDSzY0SVBPVVQiCisjZGVmaW5lIFhBVFRSX05BTUVfU01BQ0sgWEFUVFJfU0VDVVJJVFlfUFJFRklYIFhBVFRSX1NNQUNLX1NVRkZJWAorI2RlZmluZSBYQVRUUl9OQU1FX1NNQUNLSVBJTglYQVRUUl9TRUNVUklUWV9QUkVGSVggWEFUVFJfU01BQ0tfSVBJTgorI2RlZmluZSBYQVRUUl9OQU1FX1NNQUNLSVBPVVQJWEFUVFJfU0VDVVJJVFlfUFJFRklYIFhBVFRSX1NNQUNLX0lQT1VUCisKKyNkZWZpbmUgWEFUVFJfQ0FQU19TVUZGSVggImNhcGFiaWxpdHkiCisjZGVmaW5lIFhBVFRSX05BTUVfQ0FQUyBYQVRUUl9TRUNVUklUWV9QUkVGSVggWEFUVFJfQ0FQU19TVUZGSVgKKwogc3RydWN0IGlub2RlOwogc3RydWN0IGRlbnRyeTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tYXRoLWVtdS9vcC1jb21tb24uaCBiL2luY2x1ZGUvbWF0aC1lbXUvb3AtY29tbW9uLmgKaW5kZXggZmQ4ODIyNi4uOTY5NmE1ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tYXRoLWVtdS9vcC1jb21tb24uaAorKysgYi9pbmNsdWRlL21hdGgtZW11L29wLWNvbW1vbi5oCkBAIC03OTksNyArNzk5LDcgQEAKIAkJWCMjX2UgLT0gKF9GUF9XX1RZUEVfU0laRSAtIHJzaXplKTsJCQlcCiAJWCMjX2UgPSByc2l6ZSAtIFgjI19lIC0gMTsJCQkJCVwKIAkJCQkJCQkJCVwKLQlpZiAoX0ZQX0ZSQUNCSVRTXyMjZnMgPCByc2l6ZSAmJiBfRlBfV0ZSQUNCSVRTXyMjZnMgPCBYIyNfZSkJXAorCWlmIChfRlBfRlJBQ0JJVFNfIyNmcyA8IHJzaXplICYmIF9GUF9XRlJBQ0JJVFNfIyNmcyA8PSBYIyNfZSkJXAogCSAgX19GUF9GUkFDX1NSU18xKHVyXywgKFgjI19lIC0gX0ZQX1dGUkFDQklUU18jI2ZzICsgMSksIHJzaXplKTtcCiAJX0ZQX0ZSQUNfRElTQVNTRU1CTEVfIyN3YyhYLCB1cl8sIHJzaXplKTsJCQlcCiAJaWYgKChfRlBfV0ZSQUNCSVRTXyMjZnMgLSBYIyNfZSAtIDEpID4gMCkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2lyLWNvcmUuaCBiL2luY2x1ZGUvbWVkaWEvaXItY29yZS5oCmluZGV4IGFkMTMwM2YuLjUxM2U2MGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvaXItY29yZS5oCisrKyBiL2luY2x1ZGUvbWVkaWEvaXItY29yZS5oCkBAIC00NywxNSArNDcsMjEgQEAKICAqCWlzIG9wZW5lZC4KICAqIEBjbG9zZTogY2FsbGJhY2sgdG8gYWxsb3cgZHJpdmVycyB0byBkaXNhYmxlIHBvbGxpbmcvaXJxIHdoZW4gSVIgaW5wdXQgZGV2aWNlCiAgKglpcyBvcGVuZWQuCisgKiBAc190eF9tYXNrOiBzZXQgdHJhbnNtaXR0ZXIgbWFzayAoZm9yIGRldmljZXMgd2l0aCBtdWx0aXBsZSB0eCBvdXRwdXRzKQorICogQHNfdHhfY2Fycmllcjogc2V0IHRyYW5zbWl0IGNhcnJpZXIgZnJlcXVlbmN5CisgKiBAdHhfaXI6IHRyYW5zbWl0IElSCiAgKi8KIHN0cnVjdCBpcl9kZXZfcHJvcHMgewogCWVudW0gcmNfZHJpdmVyX3R5cGUJZHJpdmVyX3R5cGU7CiAJdW5zaWduZWQgbG9uZwkJYWxsb3dlZF9wcm90b3M7CiAJdTMyCQkJc2Nhbm1hc2s7Ci0Jdm9pZCAJCQkqcHJpdjsKKwl2b2lkCQkJKnByaXY7CiAJaW50CQkJKCpjaGFuZ2VfcHJvdG9jb2wpKHZvaWQgKnByaXYsIHU2NCBpcl90eXBlKTsKIAlpbnQJCQkoKm9wZW4pKHZvaWQgKnByaXYpOwogCXZvaWQJCQkoKmNsb3NlKSh2b2lkICpwcml2KTsKKwlpbnQJCQkoKnNfdHhfbWFzaykodm9pZCAqcHJpdiwgdTMyIG1hc2spOworCWludAkJCSgqc190eF9jYXJyaWVyKSh2b2lkICpwcml2LCB1MzIgY2Fycmllcik7CisJaW50CQkJKCp0eF9pcikodm9pZCAqcHJpdiwgaW50ICp0eGJ1ZiwgdTMyIG4pOwogfTsKIAogc3RydWN0IGlyX2lucHV0X2RldiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2lyLWtiZC1pMmMuaCBiL2luY2x1ZGUvbWVkaWEvaXIta2JkLWkyYy5oCmluZGV4IDA1MDZlNDUuLjVlOTZkN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvaXIta2JkLWkyYy5oCisrKyBiL2luY2x1ZGUvbWVkaWEvaXIta2JkLWkyYy5oCkBAIC0xMSw3ICsxMSw3IEBACiAJc3RydWN0IGkyY19jbGllbnQgICAgICAqYzsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICAgICAgICppbnB1dDsKIAlzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgIGlyOwotCisJdTY0ICAgICAgICAgICAgICAgICAgICBpcl90eXBlOwogCS8qIFVzZWQgdG8gYXZvaWQgZmFzdCByZXBlYXRpbmcgKi8KIAl1bnNpZ25lZCBjaGFyICAgICAgICAgIG9sZDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9saXJjLmggYi9pbmNsdWRlL21lZGlhL2xpcmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmM0NjdjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9saXJjLmgKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiBsaXJjLmggLSBsaW51eCBpbmZyYXJlZCByZW1vdGUgY29udHJvbCBoZWFkZXIgZmlsZQorICogbGFzdCBtb2RpZmllZCAyMDEwLzA3LzEzIGJ5IEphcm9kIFdpbHNvbgorICovCisKKyNpZm5kZWYgX0xJTlVYX0xJUkNfSAorI2RlZmluZSBfTElOVVhfTElSQ19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNkZWZpbmUgUFVMU0VfQklUICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgUFVMU0VfTUFTSyAgICAgIDB4MDBGRkZGRkYKKworI2RlZmluZSBMSVJDX01PREUyX1NQQUNFICAgICAweDAwMDAwMDAwCisjZGVmaW5lIExJUkNfTU9ERTJfUFVMU0UgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgTElSQ19NT0RFMl9GUkVRVUVOQ1kgMHgwMjAwMDAwMAorI2RlZmluZSBMSVJDX01PREUyX1RJTUVPVVQgICAweDAzMDAwMDAwCisKKyNkZWZpbmUgTElSQ19WQUxVRV9NQVNLICAgICAgMHgwMEZGRkZGRgorI2RlZmluZSBMSVJDX01PREUyX01BU0sgICAgICAweEZGMDAwMDAwCisKKyNkZWZpbmUgTElSQ19TUEFDRSh2YWwpICgoKHZhbCkmTElSQ19WQUxVRV9NQVNLKSB8IExJUkNfTU9ERTJfU1BBQ0UpCisjZGVmaW5lIExJUkNfUFVMU0UodmFsKSAoKCh2YWwpJkxJUkNfVkFMVUVfTUFTSykgfCBMSVJDX01PREUyX1BVTFNFKQorI2RlZmluZSBMSVJDX0ZSRVFVRU5DWSh2YWwpICgoKHZhbCkmTElSQ19WQUxVRV9NQVNLKSB8IExJUkNfTU9ERTJfRlJFUVVFTkNZKQorI2RlZmluZSBMSVJDX1RJTUVPVVQodmFsKSAoKCh2YWwpJkxJUkNfVkFMVUVfTUFTSykgfCBMSVJDX01PREUyX1RJTUVPVVQpCisKKyNkZWZpbmUgTElSQ19WQUxVRSh2YWwpICgodmFsKSZMSVJDX1ZBTFVFX01BU0spCisjZGVmaW5lIExJUkNfTU9ERTIodmFsKSAoKHZhbCkmTElSQ19NT0RFMl9NQVNLKQorCisjZGVmaW5lIExJUkNfSVNfU1BBQ0UodmFsKSAoTElSQ19NT0RFMih2YWwpID09IExJUkNfTU9ERTJfU1BBQ0UpCisjZGVmaW5lIExJUkNfSVNfUFVMU0UodmFsKSAoTElSQ19NT0RFMih2YWwpID09IExJUkNfTU9ERTJfUFVMU0UpCisjZGVmaW5lIExJUkNfSVNfRlJFUVVFTkNZKHZhbCkgKExJUkNfTU9ERTIodmFsKSA9PSBMSVJDX01PREUyX0ZSRVFVRU5DWSkKKyNkZWZpbmUgTElSQ19JU19USU1FT1VUKHZhbCkgKExJUkNfTU9ERTIodmFsKSA9PSBMSVJDX01PREUyX1RJTUVPVVQpCisKKy8qIHVzZWQgaGVhdmlseSBieSBsaXJjIHVzZXJzcGFjZSAqLworI2RlZmluZSBsaXJjX3QgaW50CisKKy8qKiogbGlyYyBjb21wYXRpYmxlIGhhcmR3YXJlIGZlYXR1cmVzICoqKi8KKworI2RlZmluZSBMSVJDX01PREUyU0VORCh4KSAoeCkKKyNkZWZpbmUgTElSQ19TRU5EMk1PREUoeCkgKHgpCisjZGVmaW5lIExJUkNfTU9ERTJSRUMoeCkgKCh4KSA8PCAxNikKKyNkZWZpbmUgTElSQ19SRUMyTU9ERSh4KSAoKHgpID4+IDE2KQorCisjZGVmaW5lIExJUkNfTU9ERV9SQVcgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIExJUkNfTU9ERV9QVUxTRSAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIExJUkNfTU9ERV9NT0RFMiAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIExJUkNfTU9ERV9MSVJDQ09ERSAgICAgICAgICAgICAweDAwMDAwMDEwCisKKworI2RlZmluZSBMSVJDX0NBTl9TRU5EX1JBVyAgICAgICAgICAgICAgTElSQ19NT0RFMlNFTkQoTElSQ19NT0RFX1JBVykKKyNkZWZpbmUgTElSQ19DQU5fU0VORF9QVUxTRSAgICAgICAgICAgIExJUkNfTU9ERTJTRU5EKExJUkNfTU9ERV9QVUxTRSkKKyNkZWZpbmUgTElSQ19DQU5fU0VORF9NT0RFMiAgICAgICAgICAgIExJUkNfTU9ERTJTRU5EKExJUkNfTU9ERV9NT0RFMikKKyNkZWZpbmUgTElSQ19DQU5fU0VORF9MSVJDQ09ERSAgICAgICAgIExJUkNfTU9ERTJTRU5EKExJUkNfTU9ERV9MSVJDQ09ERSkKKworI2RlZmluZSBMSVJDX0NBTl9TRU5EX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAzZgorCisjZGVmaW5lIExJUkNfQ0FOX1NFVF9TRU5EX0NBUlJJRVIgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIExJUkNfQ0FOX1NFVF9TRU5EX0RVVFlfQ1lDTEUgICAweDAwMDAwMjAwCisjZGVmaW5lIExJUkNfQ0FOX1NFVF9UUkFOU01JVFRFUl9NQVNLICAweDAwMDAwNDAwCisKKyNkZWZpbmUgTElSQ19DQU5fUkVDX1JBVyAgICAgICAgICAgICAgIExJUkNfTU9ERTJSRUMoTElSQ19NT0RFX1JBVykKKyNkZWZpbmUgTElSQ19DQU5fUkVDX1BVTFNFICAgICAgICAgICAgIExJUkNfTU9ERTJSRUMoTElSQ19NT0RFX1BVTFNFKQorI2RlZmluZSBMSVJDX0NBTl9SRUNfTU9ERTIgICAgICAgICAgICAgTElSQ19NT0RFMlJFQyhMSVJDX01PREVfTU9ERTIpCisjZGVmaW5lIExJUkNfQ0FOX1JFQ19MSVJDQ09ERSAgICAgICAgICBMSVJDX01PREUyUkVDKExJUkNfTU9ERV9MSVJDQ09ERSkKKworI2RlZmluZSBMSVJDX0NBTl9SRUNfTUFTSyAgICAgICAgICAgICAgTElSQ19NT0RFMlJFQyhMSVJDX0NBTl9TRU5EX01BU0spCisKKyNkZWZpbmUgTElSQ19DQU5fU0VUX1JFQ19DQVJSSUVSICAgICAgIChMSVJDX0NBTl9TRVRfU0VORF9DQVJSSUVSIDw8IDE2KQorI2RlZmluZSBMSVJDX0NBTl9TRVRfUkVDX0RVVFlfQ1lDTEUgICAgKExJUkNfQ0FOX1NFVF9TRU5EX0RVVFlfQ1lDTEUgPDwgMTYpCisKKyNkZWZpbmUgTElSQ19DQU5fU0VUX1JFQ19EVVRZX0NZQ0xFX1JBTkdFIDB4NDAwMDAwMDAKKyNkZWZpbmUgTElSQ19DQU5fU0VUX1JFQ19DQVJSSUVSX1JBTkdFICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgTElSQ19DQU5fR0VUX1JFQ19SRVNPTFVUSU9OICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgTElSQ19DQU5fU0VUX1JFQ19USU1FT1VUICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgTElSQ19DQU5fU0VUX1JFQ19GSUxURVIgICAgICAgICAgIDB4MDgwMDAwMDAKKworI2RlZmluZSBMSVJDX0NBTl9NRUFTVVJFX0NBUlJJRVIgICAgICAgICAgMHgwMjAwMDAwMAorCisjZGVmaW5lIExJUkNfQ0FOX1NFTkQoeCkgKCh4KSZMSVJDX0NBTl9TRU5EX01BU0spCisjZGVmaW5lIExJUkNfQ0FOX1JFQyh4KSAoKHgpJkxJUkNfQ0FOX1JFQ19NQVNLKQorCisjZGVmaW5lIExJUkNfQ0FOX05PVElGWV9ERUNPREUgICAgICAgICAgICAweDAxMDAwMDAwCisKKy8qKiogSU9DVEwgY29tbWFuZHMgZm9yIGxpcmMgZHJpdmVyICoqKi8KKworI2RlZmluZSBMSVJDX0dFVF9GRUFUVVJFUyAgICAgICAgICAgICAgX0lPUignaScsIDB4MDAwMDAwMDAsIF9fdTMyKQorCisjZGVmaW5lIExJUkNfR0VUX1NFTkRfTU9ERSAgICAgICAgICAgICBfSU9SKCdpJywgMHgwMDAwMDAwMSwgX191MzIpCisjZGVmaW5lIExJUkNfR0VUX1JFQ19NT0RFICAgICAgICAgICAgICBfSU9SKCdpJywgMHgwMDAwMDAwMiwgX191MzIpCisjZGVmaW5lIExJUkNfR0VUX1NFTkRfQ0FSUklFUiAgICAgICAgICBfSU9SKCdpJywgMHgwMDAwMDAwMywgX191MzIpCisjZGVmaW5lIExJUkNfR0VUX1JFQ19DQVJSSUVSICAgICAgICAgICBfSU9SKCdpJywgMHgwMDAwMDAwNCwgX191MzIpCisjZGVmaW5lIExJUkNfR0VUX1NFTkRfRFVUWV9DWUNMRSAgICAgICBfSU9SKCdpJywgMHgwMDAwMDAwNSwgX191MzIpCisjZGVmaW5lIExJUkNfR0VUX1JFQ19EVVRZX0NZQ0xFICAgICAgICBfSU9SKCdpJywgMHgwMDAwMDAwNiwgX191MzIpCisjZGVmaW5lIExJUkNfR0VUX1JFQ19SRVNPTFVUSU9OICAgICAgICBfSU9SKCdpJywgMHgwMDAwMDAwNywgX191MzIpCisKKyNkZWZpbmUgTElSQ19HRVRfTUlOX1RJTUVPVVQgICAgICAgICAgIF9JT1IoJ2knLCAweDAwMDAwMDA4LCBfX3UzMikKKyNkZWZpbmUgTElSQ19HRVRfTUFYX1RJTUVPVVQgICAgICAgICAgIF9JT1IoJ2knLCAweDAwMDAwMDA5LCBfX3UzMikKKworI2RlZmluZSBMSVJDX0dFVF9NSU5fRklMVEVSX1BVTFNFICAgICAgX0lPUignaScsIDB4MDAwMDAwMGEsIF9fdTMyKQorI2RlZmluZSBMSVJDX0dFVF9NQVhfRklMVEVSX1BVTFNFICAgICAgX0lPUignaScsIDB4MDAwMDAwMGIsIF9fdTMyKQorI2RlZmluZSBMSVJDX0dFVF9NSU5fRklMVEVSX1NQQUNFICAgICAgX0lPUignaScsIDB4MDAwMDAwMGMsIF9fdTMyKQorI2RlZmluZSBMSVJDX0dFVF9NQVhfRklMVEVSX1NQQUNFICAgICAgX0lPUignaScsIDB4MDAwMDAwMGQsIF9fdTMyKQorCisvKiBjb2RlIGxlbmd0aCBpbiBiaXRzLCBjdXJyZW50bHkgb25seSBmb3IgTElSQ19NT0RFX0xJUkNDT0RFICovCisjZGVmaW5lIExJUkNfR0VUX0xFTkdUSCAgICAgICAgICAgICAgICBfSU9SKCdpJywgMHgwMDAwMDAwZiwgX191MzIpCisKKyNkZWZpbmUgTElSQ19TRVRfU0VORF9NT0RFICAgICAgICAgICAgIF9JT1coJ2knLCAweDAwMDAwMDExLCBfX3UzMikKKyNkZWZpbmUgTElSQ19TRVRfUkVDX01PREUgICAgICAgICAgICAgIF9JT1coJ2knLCAweDAwMDAwMDEyLCBfX3UzMikKKy8qIE5vdGU6IHRoZXNlIGNhbiByZXNldCB0aGUgYWNjb3JkaW5nIHB1bHNlX3dpZHRoICovCisjZGVmaW5lIExJUkNfU0VUX1NFTkRfQ0FSUklFUiAgICAgICAgICBfSU9XKCdpJywgMHgwMDAwMDAxMywgX191MzIpCisjZGVmaW5lIExJUkNfU0VUX1JFQ19DQVJSSUVSICAgICAgICAgICBfSU9XKCdpJywgMHgwMDAwMDAxNCwgX191MzIpCisjZGVmaW5lIExJUkNfU0VUX1NFTkRfRFVUWV9DWUNMRSAgICAgICBfSU9XKCdpJywgMHgwMDAwMDAxNSwgX191MzIpCisjZGVmaW5lIExJUkNfU0VUX1JFQ19EVVRZX0NZQ0xFICAgICAgICBfSU9XKCdpJywgMHgwMDAwMDAxNiwgX191MzIpCisjZGVmaW5lIExJUkNfU0VUX1RSQU5TTUlUVEVSX01BU0sgICAgICBfSU9XKCdpJywgMHgwMDAwMDAxNywgX191MzIpCisKKy8qCisgKiB3aGVuIGEgdGltZW91dCAhPSAwIGlzIHNldCB0aGUgZHJpdmVyIHdpbGwgc2VuZCBhCisgKiBMSVJDX01PREUyX1RJTUVPVVQgZGF0YSBwYWNrZXQsIG90aGVyd2lzZSBMSVJDX01PREUyX1RJTUVPVVQgaXMKKyAqIG5ldmVyIHNlbnQsIHRpbWVvdXQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdAorICovCisjZGVmaW5lIExJUkNfU0VUX1JFQ19USU1FT1VUICAgICAgICAgICBfSU9XKCdpJywgMHgwMDAwMDAxOCwgX191MzIpCisKKy8qIDEgZW5hYmxlcywgMCBkaXNhYmxlcyB0aW1lb3V0IHJlcG9ydHMgaW4gTU9ERTIgKi8KKyNkZWZpbmUgTElSQ19TRVRfUkVDX1RJTUVPVVRfUkVQT1JUUyAgIF9JT1coJ2knLCAweDAwMDAwMDE5LCBfX3UzMikKKworLyoKKyAqIHB1bHNlcyBzaG9ydGVyIHRoYW4gdGhpcyBhcmUgZmlsdGVyZWQgb3V0IGJ5IGhhcmR3YXJlIChzb2Z0d2FyZQorICogZW11bGF0aW9uIGluIGxpcmNfZGV2PykKKyAqLworI2RlZmluZSBMSVJDX1NFVF9SRUNfRklMVEVSX1BVTFNFICAgICAgX0lPVygnaScsIDB4MDAwMDAwMWEsIF9fdTMyKQorLyoKKyAqIHNwYWNlcyBzaG9ydGVyIHRoYW4gdGhpcyBhcmUgZmlsdGVyZWQgb3V0IGJ5IGhhcmR3YXJlIChzb2Z0d2FyZQorICogZW11bGF0aW9uIGluIGxpcmNfZGV2PykKKyAqLworI2RlZmluZSBMSVJDX1NFVF9SRUNfRklMVEVSX1NQQUNFICAgICAgX0lPVygnaScsIDB4MDAwMDAwMWIsIF9fdTMyKQorLyoKKyAqIGlmIGZpbHRlciBjYW5ub3QgYmUgc2V0IGluZGVwZW5kYW50bHkgZm9yIHB1bHNlL3NwYWNlLCB0aGlzIHNob3VsZAorICogYmUgdXNlZAorICovCisjZGVmaW5lIExJUkNfU0VUX1JFQ19GSUxURVIgICAgICAgICAgICBfSU9XKCdpJywgMHgwMDAwMDAxYywgX191MzIpCisKKy8qCisgKiBpZiBlbmFibGVkIGZyb20gdGhlIG5leHQga2V5IHByZXNzIG9uIHRoZSBkcml2ZXIgd2lsbCBzZW5kCisgKiBMSVJDX01PREUyX0ZSRVFVRU5DWSBwYWNrZXRzCisgKi8KKyNkZWZpbmUgTElSQ19TRVRfTUVBU1VSRV9DQVJSSUVSX01PREUgIF9JT1coJ2knLCAweDAwMDAwMDFkLCBfX3UzMikKKworLyoKKyAqIHRvIHNldCBhIHJhbmdlIHVzZQorICogTElSQ19TRVRfUkVDX0RVVFlfQ1lDTEVfUkFOR0UvTElSQ19TRVRfUkVDX0NBUlJJRVJfUkFOR0Ugd2l0aCB0aGUKKyAqIGxvd2VyIGJvdW5kIGZpcnN0IGFuZCBsYXRlcgorICogTElSQ19TRVRfUkVDX0RVVFlfQ1lDTEUvTElSQ19TRVRfUkVDX0NBUlJJRVIgd2l0aCB0aGUgdXBwZXIgYm91bmQKKyAqLworCisjZGVmaW5lIExJUkNfU0VUX1JFQ19EVVRZX0NZQ0xFX1JBTkdFICBfSU9XKCdpJywgMHgwMDAwMDAxZSwgX191MzIpCisjZGVmaW5lIExJUkNfU0VUX1JFQ19DQVJSSUVSX1JBTkdFICAgICBfSU9XKCdpJywgMHgwMDAwMDAxZiwgX191MzIpCisKKyNkZWZpbmUgTElSQ19OT1RJRllfREVDT0RFICAgICAgICAgICAgIF9JTygnaScsIDB4MDAwMDAwMjApCisKKyNkZWZpbmUgTElSQ19TRVRVUF9TVEFSVCAgICAgICAgICAgICAgIF9JTygnaScsIDB4MDAwMDAwMjEpCisjZGVmaW5lIExJUkNfU0VUVVBfRU5EICAgICAgICAgICAgICAgICBfSU8oJ2knLCAweDAwMDAwMDIyKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvbGlyY19kZXYuaCBiL2luY2x1ZGUvbWVkaWEvbGlyY19kZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWY2MDY2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9saXJjX2Rldi5oCkBAIC0wLDAgKzEsMjI1IEBACisvKgorICogTElSQyBiYXNlIGRyaXZlcgorICoKKyAqIGJ5IEFydHVyIExpcG93c2tpIDxhbGlwb3dza2lAaW50ZXJpYS5wbD4KKyAqICAgICAgICBUaGlzIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgR05VIEdQTAorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9MSVJDX0RFVl9ICisjZGVmaW5lIF9MSU5VWF9MSVJDX0RFVl9ICisKKyNkZWZpbmUgTUFYX0lSQ1RMX0RFVklDRVMgNAorI2RlZmluZSBCVUZMRU4gICAgICAgICAgICAxNgorCisjZGVmaW5lIG1vZChuLCBkaXYpICgobikgJSAoZGl2KSkKKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CisjaW5jbHVkZSA8bWVkaWEvbGlyYy5oPgorCitzdHJ1Y3QgbGlyY19idWZmZXIgeworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfcG9sbDsKKwlzcGlubG9ja190IGZpZm9fbG9jazsKKwl1bnNpZ25lZCBpbnQgY2h1bmtfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsgLyogaW4gY2h1bmtzICovCisJLyogVXNpbmcgY2h1bmtzIGluc3RlYWQgb2YgYnl0ZXMgcHJldGVuZHMgdG8gc2ltcGxpZnkgYm91bmRhcnkgY2hlY2tpbmcKKwkgKiBBbmQgc2hvdWxkIGFsbG93IGZvciBzb21lIHBlcmZvcm1hbmNlIGZpbmUgdHVubmluZyBsYXRlciAqLworCXN0cnVjdCBrZmlmbyBmaWZvOworCXU4IGZpZm9faW5pdGlhbGl6ZWQ7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgbGlyY19idWZmZXJfY2xlYXIoc3RydWN0IGxpcmNfYnVmZmVyICpidWYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChidWYtPmZpZm9faW5pdGlhbGl6ZWQpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmJ1Zi0+Zmlmb19sb2NrLCBmbGFncyk7CisJCWtmaWZvX3Jlc2V0KCZidWYtPmZpZm8pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZidWYtPmZpZm9fbG9jaywgZmxhZ3MpOworCX0gZWxzZQorCQlXQVJOKDEsICJjYWxsaW5nICVzIG9uIGFuIHVuaW5pdGlhbGl6ZWQgbGlyY19idWZmZXJcbiIsCisJCSAgICAgX19mdW5jX18pOworfQorCitzdGF0aWMgaW5saW5lIGludCBsaXJjX2J1ZmZlcl9pbml0KHN0cnVjdCBsaXJjX2J1ZmZlciAqYnVmLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgY2h1bmtfc2l6ZSwKKwkJCQkgICAgdW5zaWduZWQgaW50IHNpemUpCit7CisJaW50IHJldDsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmJ1Zi0+d2FpdF9wb2xsKTsKKwlzcGluX2xvY2tfaW5pdCgmYnVmLT5maWZvX2xvY2spOworCWJ1Zi0+Y2h1bmtfc2l6ZSA9IGNodW5rX3NpemU7CisJYnVmLT5zaXplID0gc2l6ZTsKKwlyZXQgPSBrZmlmb19hbGxvYygmYnVmLT5maWZvLCBzaXplICogY2h1bmtfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldCA9PSAwKQorCQlidWYtPmZpZm9faW5pdGlhbGl6ZWQgPSAxOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxpcmNfYnVmZmVyX2ZyZWUoc3RydWN0IGxpcmNfYnVmZmVyICpidWYpCit7CisJaWYgKGJ1Zi0+Zmlmb19pbml0aWFsaXplZCkgeworCQlrZmlmb19mcmVlKCZidWYtPmZpZm8pOworCQlidWYtPmZpZm9faW5pdGlhbGl6ZWQgPSAwOworCX0gZWxzZQorCQlXQVJOKDEsICJjYWxsaW5nICVzIG9uIGFuIHVuaW5pdGlhbGl6ZWQgbGlyY19idWZmZXJcbiIsCisJCSAgICAgX19mdW5jX18pOworfQorCitzdGF0aWMgaW5saW5lIGludCBsaXJjX2J1ZmZlcl9sZW4oc3RydWN0IGxpcmNfYnVmZmVyICpidWYpCit7CisJaW50IGxlbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJ1Zi0+Zmlmb19sb2NrLCBmbGFncyk7CisJbGVuID0ga2ZpZm9fbGVuKCZidWYtPmZpZm8pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJ1Zi0+Zmlmb19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW5saW5lIGludCBsaXJjX2J1ZmZlcl9mdWxsKHN0cnVjdCBsaXJjX2J1ZmZlciAqYnVmKQoreworCXJldHVybiBsaXJjX2J1ZmZlcl9sZW4oYnVmKSA9PSBidWYtPnNpemUgKiBidWYtPmNodW5rX3NpemU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxpcmNfYnVmZmVyX2VtcHR5KHN0cnVjdCBsaXJjX2J1ZmZlciAqYnVmKQoreworCXJldHVybiAhbGlyY19idWZmZXJfbGVuKGJ1Zik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxpcmNfYnVmZmVyX2F2YWlsYWJsZShzdHJ1Y3QgbGlyY19idWZmZXIgKmJ1ZikKK3sKKwlyZXR1cm4gYnVmLT5zaXplIC0gKGxpcmNfYnVmZmVyX2xlbihidWYpIC8gYnVmLT5jaHVua19zaXplKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbGlyY19idWZmZXJfcmVhZChzdHJ1Y3QgbGlyY19idWZmZXIgKmJ1ZiwKKwkJCQkJICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QpCit7CisJdW5zaWduZWQgaW50IHJldCA9IDA7CisKKwlpZiAobGlyY19idWZmZXJfbGVuKGJ1ZikgPj0gYnVmLT5jaHVua19zaXplKQorCQlyZXQgPSBrZmlmb19vdXRfbG9ja2VkKCZidWYtPmZpZm8sIGRlc3QsIGJ1Zi0+Y2h1bmtfc2l6ZSwKKwkJCQkgICAgICAgJmJ1Zi0+Zmlmb19sb2NrKTsKKwlyZXR1cm4gcmV0OworCit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGxpcmNfYnVmZmVyX3dyaXRlKHN0cnVjdCBsaXJjX2J1ZmZlciAqYnVmLAorCQkJCQkgICAgIHVuc2lnbmVkIGNoYXIgKm9yaWcpCit7CisJdW5zaWduZWQgaW50IHJldDsKKworCXJldCA9IGtmaWZvX2luX2xvY2tlZCgmYnVmLT5maWZvLCBvcmlnLCBidWYtPmNodW5rX3NpemUsCisJCQkgICAgICAmYnVmLT5maWZvX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IGxpcmNfZHJpdmVyIHsKKwljaGFyIG5hbWVbNDBdOworCWludCBtaW5vcjsKKwl1bnNpZ25lZCBsb25nIGNvZGVfbGVuZ3RoOworCXVuc2lnbmVkIGludCBidWZmZXJfc2l6ZTsgLyogaW4gY2h1bmtzIGhvbGRpbmcgb25lIGNvZGUgZWFjaCAqLworCWludCBzYW1wbGVfcmF0ZTsKKwl1bnNpZ25lZCBsb25nIGZlYXR1cmVzOworCisJdW5zaWduZWQgaW50IGNodW5rX3NpemU7CisKKwl2b2lkICpkYXRhOworCWludCBtaW5fdGltZW91dDsKKwlpbnQgbWF4X3RpbWVvdXQ7CisJaW50ICgqYWRkX3RvX2J1ZikgKHZvaWQgKmRhdGEsIHN0cnVjdCBsaXJjX2J1ZmZlciAqYnVmKTsKKwlzdHJ1Y3QgbGlyY19idWZmZXIgKnJidWY7CisJaW50ICgqc2V0X3VzZV9pbmMpICh2b2lkICpkYXRhKTsKKwl2b2lkICgqc2V0X3VzZV9kZWMpICh2b2lkICpkYXRhKTsKKwlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKK307CisKKy8qIG5hbWU6CisgKiB0aGlzIHN0cmluZyB3aWxsIGJlIHVzZWQgZm9yIGxvZ3MKKyAqCisgKiBtaW5vcjoKKyAqIGluZGljYXRlcyBtaW5vciBkZXZpY2UgKC9kZXYvbGlyYykgbnVtYmVyIGZvciByZWdpc3RlcmVkIGRyaXZlcgorICogaWYgY2FsbGVyIGZpbGxzIGl0IHdpdGggbmVnYXRpdmUgdmFsdWUsIHRoZW4gdGhlIGZpcnN0IGZyZWUgbWlub3IKKyAqIG51bWJlciB3aWxsIGJlIHVzZWQgKGlmIGF2YWlsYWJsZSkKKyAqCisgKiBjb2RlX2xlbmd0aDoKKyAqIGxlbmd0aCBvZiB0aGUgcmVtb3RlIGNvbnRyb2wga2V5IGNvZGUgZXhwcmVzc2VkIGluIGJpdHMKKyAqCisgKiBzYW1wbGVfcmF0ZToKKyAqCisgKiBkYXRhOgorICogaXQgbWF5IHBvaW50IHRvIGFueSBkcml2ZXIgZGF0YSBhbmQgdGhpcyBwb2ludGVyIHdpbGwgYmUgcGFzc2VkIHRvCisgKiBhbGwgY2FsbGJhY2sgZnVuY3Rpb25zCisgKgorICogYWRkX3RvX2J1ZjoKKyAqIGFkZF90b19idWYgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgc3BlY2lmaWVkIHBlcmlvZCBvZiB0aGUgdGltZSBvcgorICogdHJpZ2dlcmVkIGJ5IHRoZSBleHRlcm5hbCBldmVudCwgdGhpcyBiZWhhdmlvciBkZXBlbmRzIG9uIHZhbHVlIG9mCisgKiB0aGUgc2FtcGxlX3JhdGUgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB1c2VyIGNvbnRleHQuIFRoaXMKKyAqIHJvdXRpbmUgc2hvdWxkIHJldHVybiAwIGlmIGRhdGEgd2FzIGFkZGVkIHRvIHRoZSBidWZmZXIgYW5kCisgKiAtRU5PREFUQSBpZiBub25lIHdhcyBhdmFpbGFibGUuIFRoaXMgc2hvdWxkIGFkZCBzb21lIG51bWJlciBvZiBiaXRzCisgKiBldmVubHkgZGl2aXNpYmxlIGJ5IGNvZGVfbGVuZ3RoIHRvIHRoZSBidWZmZXIKKyAqCisgKiByYnVmOgorICogaWYgbm90IE5VTEwsIGl0IHdpbGwgYmUgdXNlZCBhcyBhIHJlYWQgYnVmZmVyLCB5b3Ugd2lsbCBoYXZlIHRvCisgKiB3cml0ZSB0byB0aGUgYnVmZmVyIGJ5IG90aGVyIG1lYW5zLCBsaWtlIGlycSdzIChzZWUgYWxzbworICogbGlyY19zZXJpYWwuYykuCisgKgorICogc2V0X3VzZV9pbmM6CisgKiBzZXRfdXNlX2luYyB3aWxsIGJlIGNhbGxlZCBhZnRlciBkZXZpY2UgaXMgb3BlbmVkCisgKgorICogc2V0X3VzZV9kZWM6CisgKiBzZXRfdXNlX2RlYyB3aWxsIGJlIGNhbGxlZCBhZnRlciBkZXZpY2UgaXMgY2xvc2VkCisgKgorICogZm9wczoKKyAqIGZpbGVfb3BlcmF0aW9ucyBmb3IgZHJpdmVycyB3aGljaCBkb24ndCBmaXQgdGhlIGN1cnJlbnQgZHJpdmVyIG1vZGVsLgorICoKKyAqIFNvbWUgaW9jdGwncyBjYW4gYmUgZGlyZWN0bHkgaGFuZGxlZCBieSBsaXJjX2RldiBpZiB0aGUgZHJpdmVyJ3MKKyAqIGlvY3RsIGZ1bmN0aW9uIGlzIE5VTEwgb3IgaWYgaXQgcmV0dXJucyAtRU5PSU9DVExDTUQgKHNlZSBhbHNvCisgKiBsaXJjX3NlcmlhbC5jKS4KKyAqCisgKiBvd25lcjoKKyAqIHRoZSBtb2R1bGUgb3duaW5nIHRoaXMgc3RydWN0CisgKgorICovCisKKworLyogZm9sbG93aW5nIGZ1bmN0aW9ucyBjYW4gYmUgY2FsbGVkIE9OTFkgZnJvbSB1c2VyIGNvbnRleHQKKyAqCisgKiByZXR1cm5zIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yIG9yIG1pbm9yIG51bWJlcgorICogb2YgdGhlIHJlZ2lzdGVyZWQgZGV2aWNlIGlmIHN1Y2Nlc3MKKyAqIGNvbnRlbnRzIG9mIHRoZSBzdHJ1Y3R1cmUgcG9pbnRlZCBieSBwIGlzIGNvcGllZAorICovCitleHRlcm4gaW50IGxpcmNfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBsaXJjX2RyaXZlciAqZCk7CisKKy8qIHJldHVybnMgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3Igb3IgMCBpZiBzdWNjZXNzCisqLworZXh0ZXJuIGludCBsaXJjX3VucmVnaXN0ZXJfZHJpdmVyKGludCBtaW5vcik7CisKKy8qIFJldHVybnMgdGhlIHByaXZhdGUgZGF0YSBzdG9yZWQgaW4gdGhlIGxpcmNfZHJpdmVyCisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGRldmljZSBmaWxlIHBvaW50ZXIuCisgKi8KK3ZvaWQgKmxpcmNfZ2V0X3BkYXRhKHN0cnVjdCBmaWxlICpmaWxlKTsKKworLyogZGVmYXVsdCBmaWxlIG9wZXJhdGlvbnMKKyAqIHVzZWQgYnkgZHJpdmVycyBpZiB0aGV5IG92ZXJyaWRlIG9ubHkgc29tZSBvcGVyYXRpb25zCisgKi8KK2ludCBsaXJjX2Rldl9mb3Bfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitpbnQgbGlyY19kZXZfZm9wX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKK3Vuc2lnbmVkIGludCBsaXJjX2Rldl9mb3BfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCk7Citsb25nIGxpcmNfZGV2X2ZvcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3NpemVfdCBsaXJjX2Rldl9mb3BfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLAorCQkJICBsb2ZmX3QgKnBwb3MpOworc3NpemVfdCBsaXJjX2Rldl9mb3Bfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwKKwkJCSAgIGxvZmZfdCAqcHBvcyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9yYy1tYXAuaCBiL2luY2x1ZGUvbWVkaWEvcmMtbWFwLmgKaW5kZXggYzc4ZTk5YS4uOTU2OWQwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9yYy1tYXAuaAorKysgYi9pbmNsdWRlL21lZGlhL3JjLW1hcC5oCkBAIC0xNyw4ICsxNywxMyBAQAogI2RlZmluZSBJUl9UWVBFX1JDNgkoMSAgPDwgMikJLyogUGhpbGlwcyBSQzYgcHJvdG9jb2wgKi8KICNkZWZpbmUgSVJfVFlQRV9KVkMJKDEgIDw8IDMpCS8qIEpWQyBwcm90b2NvbCAqLwogI2RlZmluZSBJUl9UWVBFX1NPTlkJKDEgIDw8IDQpCS8qIFNvbnkxMi8xNS8yMCBwcm90b2NvbCAqLworI2RlZmluZSBJUl9UWVBFX0xJUkMJKDEgIDw8IDMwKQkvKiBQYXNzIHJhdyBJUiB0byBsaXJjIHVzZXJzcGFjZSAqLwogI2RlZmluZSBJUl9UWVBFX09USEVSCSgxdSA8PCAzMSkKIAorI2RlZmluZSBJUl9UWVBFX0FMTCAoSVJfVFlQRV9SQzUgfCBJUl9UWVBFX05FQyAgfCBJUl9UWVBFX1JDNiAgfCBcCisJCSAgICAgSVJfVFlQRV9KVkMgfCBJUl9UWVBFX1NPTlkgfCBJUl9UWVBFX0xJUkMgfCBcCisJCSAgICAgSVJfVFlQRV9PVEhFUikKKwogc3RydWN0IGlyX3NjYW5jb2RlIHsKIAl1MzIJc2NhbmNvZGU7CiAJdTMyCWtleWNvZGU7CkBAIC02NCw2ICs2OSw4IEBACiAjZGVmaW5lIFJDX01BUF9CVURHRVRfQ0lfT0xEICAgICAgICAgICAgICJyYy1idWRnZXQtY2ktb2xkIgogI2RlZmluZSBSQ19NQVBfQ0lORVJHWV8xNDAwICAgICAgICAgICAgICAicmMtY2luZXJneS0xNDAwIgogI2RlZmluZSBSQ19NQVBfQ0lORVJHWSAgICAgICAgICAgICAgICAgICAicmMtY2luZXJneSIKKyNkZWZpbmUgUkNfTUFQX0RJQjA3MDBfTkVDX1RBQkxFICAgICAgICAgInJjLWRpYjA3MDAtbmVjIgorI2RlZmluZSBSQ19NQVBfRElCMDcwMF9SQzVfVEFCTEUgICAgICAgICAicmMtZGliMDcwMC1yYzUiCiAjZGVmaW5lIFJDX01BUF9ETTExMDVfTkVDICAgICAgICAgICAgICAgICJyYy1kbTExMDUtbmVjIgogI2RlZmluZSBSQ19NQVBfRE5UVl9MSVZFX0RWQlRfUFJPICAgICAgICAicmMtZG50di1saXZlLWR2YnQtcHJvIgogI2RlZmluZSBSQ19NQVBfRE5UVl9MSVZFX0RWQl9UICAgICAgICAgICAicmMtZG50di1saXZlLWR2Yi10IgpAQCAtODcsNiArOTQsNyBAQAogI2RlZmluZSBSQ19NQVBfS0FJT01ZICAgICAgICAgICAgICAgICAgICAicmMta2Fpb215IgogI2RlZmluZSBSQ19NQVBfS1dPUkxEXzMxNVUgICAgICAgICAgICAgICAicmMta3dvcmxkLTMxNXUiCiAjZGVmaW5lIFJDX01BUF9LV09STERfUExVU19UVl9BTkFMT0cgICAgICJyYy1rd29ybGQtcGx1cy10di1hbmFsb2ciCisjZGVmaW5lIFJDX01BUF9MSVJDICAgICAgICAgICAgICAgICAgICAgICJyYy1saXJjIgogI2RlZmluZSBSQ19NQVBfTUFOTEkgICAgICAgICAgICAgICAgICAgICAicmMtbWFubGkiCiAjZGVmaW5lIFJDX01BUF9NU0lfVFZBTllXSEVSRV9QTFVTICAgICAgICJyYy1tc2ktdHZhbnl3aGVyZS1wbHVzIgogI2RlZmluZSBSQ19NQVBfTVNJX1RWQU5ZV0hFUkUgICAgICAgICAgICAicmMtbXNpLXR2YW55d2hlcmUiCkBAIC0xMDcsNiArMTE1LDcgQEAKICNkZWZpbmUgUkNfTUFQX1BWOTUxICAgICAgICAgICAgICAgICAgICAgInJjLXB2OTUxIgogI2RlZmluZSBSQ19NQVBfUkM1X0hBVVBQQVVHRV9ORVcgICAgICAgICAicmMtcmM1LWhhdXBwYXVnZS1uZXciCiAjZGVmaW5lIFJDX01BUF9SQzVfVFYgICAgICAgICAgICAgICAgICAgICJyYy1yYzUtdHYiCisjZGVmaW5lIFJDX01BUF9SQzZfTUNFICAgICAgICAgICAgICAgICAgICJyYy1yYzYtbWNlIgogI2RlZmluZSBSQ19NQVBfUkVBTF9BVURJT18yMjBfMzJfS0VZUyAgICAicmMtcmVhbC1hdWRpby0yMjAtMzIta2V5cyIKICNkZWZpbmUgUkNfTUFQX1RCU19ORUMgICAgICAgICAgICAgICAgICAgInJjLXRicy1uZWMiCiAjZGVmaW5lIFJDX01BUF9URVJSQVRFQ19DSU5FUkdZX1hTICAgICAgICJyYy10ZXJyYXRlYy1jaW5lcmd5LXhzIgpAQCAtMTE2LDYgKzEyNSw3IEBACiAjZGVmaW5lIFJDX01BUF9WSURFT01BVEVfVFZfUFZSICAgICAgICAgICJyYy12aWRlb21hdGUtdHYtcHZyIgogI2RlZmluZSBSQ19NQVBfV0lORkFTVCAgICAgICAgICAgICAgICAgICAicmMtd2luZmFzdCIKICNkZWZpbmUgUkNfTUFQX1dJTkZBU1RfVVNCSUlfREVMVVhFICAgICAgInJjLXdpbmZhc3QtdXNiaWktZGVsdXhlIgorCiAvKgogICogUGxlYXNlLCBkbyBub3QganVzdCBhcHBlbmQgbmV3ZXIgUmVtb3RlIENvbnRyb2xsZXIgbmFtZXMgYXQgdGhlIGVuZC4KICAqIFRoZSBuYW1lcyBzaG91bGQgYmUgb3JkZXJlZCBpbiBhbHBoYWJldGljYWwgb3JkZXIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc2hfbW9iaWxlX2NldS5oIGIvaW5jbHVkZS9tZWRpYS9zaF9tb2JpbGVfY2V1LmgKaW5kZXggYjY3NzQ3OC4uODAzNDZhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zaF9tb2JpbGVfY2V1LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zaF9tb2JpbGVfY2V1LmgKQEAgLTYsOCArNiwxMSBAQAogI2RlZmluZSBTSF9DRVVfRkxBR19IU1lOQ19MT1cJCSgxIDw8IDIpIC8qIGRlZmF1bHQgSGlnaCBpZiBwb3NzaWJsZSAqLwogI2RlZmluZSBTSF9DRVVfRkxBR19WU1lOQ19MT1cJCSgxIDw8IDMpIC8qIGRlZmF1bHQgSGlnaCBpZiBwb3NzaWJsZSAqLwogCitzdHJ1Y3QgZGV2aWNlOworCiBzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9pbmZvIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBkZXZpY2UgKmNzaTJfZGV2OwogfTsKIAogI2VuZGlmIC8qIF9fQVNNX1NIX01PQklMRV9DRVVfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NoX21vYmlsZV9jc2kyLmggYi9pbmNsdWRlL21lZGlhL3NoX21vYmlsZV9jc2kyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQyNjE1MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvc2hfbW9iaWxlX2NzaTIuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogRHJpdmVyIGhlYWRlciBmb3IgdGhlIFNILU1vYmlsZSBNSVBJIENTSS0yIHVuaXQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBTSF9NSVBJX0NTSQorI2RlZmluZSBTSF9NSVBJX0NTSQorCitlbnVtIHNoX2NzaTJfcGh5IHsKKwlTSF9DU0kyX1BIWV9NQUlOLAorCVNIX0NTSTJfUEhZX1NVQiwKK307CisKK2VudW0gc2hfY3NpMl90eXBlIHsKKwlTSF9DU0kyQywKKwlTSF9DU0kySSwKK307CisKKyNkZWZpbmUgU0hfQ1NJMl9DUkMJKDEgPDwgMCkKKyNkZWZpbmUgU0hfQ1NJMl9FQ0MJKDEgPDwgMSkKKworc3RydWN0IHBsYXRmb3JtX2RldmljZTsKKworc3RydWN0IHNoX2NzaTJfY2xpZW50X2NvbmZpZyB7CisJZW51bSBzaF9jc2kyX3BoeSBwaHk7CisJdW5zaWduZWQgY2hhciBsYW5lczsJCS8qIGJpdG1hc2tbMzowXSAqLworCXVuc2lnbmVkIGNoYXIgY2hhbm5lbDsJCS8qIDAuLjMgKi8KKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwkvKiBjbGllbnQgcGxhdGZvcm0gZGV2aWNlICovCit9OworCitzdHJ1Y3Qgc2hfY3NpMl9wZGF0YSB7CisJZW51bSBzaF9jc2kyX3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJc3RydWN0IHNoX2NzaTJfY2xpZW50X2NvbmZpZyAqY2xpZW50czsKKwlpbnQgbnVtX2NsaWVudHM7Cit9OworCitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IHY0bDJfZGV2aWNlOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYS5oIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKaW5kZXggYjgyODljMi4uMmNlOTU3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKQEAgLTEyLDEyICsxMiwxNSBAQAogI2lmbmRlZiBTT0NfQ0FNRVJBX0gKICNkZWZpbmUgU09DX0NBTUVSQV9ICiAKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtY29yZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAKK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgc29jX2NhbWVyYV9idXNfdHlwZTsKKwogc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IGRldmljZSBkZXY7CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3R1bmVyLmggYi9pbmNsdWRlL21lZGlhL3R1bmVyLmgKaW5kZXggNTUwNWM1My4uNTE4MTFlYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdHVuZXIuaAorKysgYi9pbmNsdWRlL21lZGlhL3R1bmVyLmgKQEAgLTEzMCw2ICsxMzAsNyBAQAogI2RlZmluZSBUVU5FUl9QSElMSVBTX0NVMTIxNkwgICAgICAgICAgIDgyCiAjZGVmaW5lIFRVTkVSX05YUF9UREExODI3MQkJODMKICNkZWZpbmUgVFVORVJfU09OWV9CVEZfUFhOMDFaCQk4NAorI2RlZmluZSBUVU5FUl9QSElMSVBTX0ZRMTIzNl9NSzUJODUJLyogTlRTQywgVERBOTg4NSwgbm8gRk0gcmFkaW8gKi8KIAogLyogdHYgY2FyZCBzcGVjaWZpYyAqLwogI2RlZmluZSBUREE5ODg3X1BSRVNFTlQgCQkoMTw8MCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1tZWRpYWJ1cy5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLW1lZGlhYnVzLmgKaW5kZXggODY1Y2RhNy4uZjBjZjJlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLW1lZGlhYnVzLmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLW1lZGlhYnVzLmgKQEAgLTI0LDEwICsyNCwxMCBAQAogICovCiBlbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUgewogCVY0TDJfTUJVU19GTVRfRklYRUQgPSAxLAotCVY0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0xFLAotCVY0TDJfTUJVU19GTVRfWVZZVThfMlg4X0xFLAotCVY0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0JFLAotCVY0TDJfTUJVU19GTVRfWVZZVThfMlg4X0JFLAorCVY0TDJfTUJVU19GTVRfWVVZVjhfMlg4LAorCVY0TDJfTUJVU19GTVRfWVZZVThfMlg4LAorCVY0TDJfTUJVU19GTVRfVVlWWThfMlg4LAorCVY0TDJfTUJVU19GTVRfVllVWThfMlg4LAogCVY0TDJfTUJVU19GTVRfUkdCNTU1XzJYOF9QQURISV9MRSwKIAlWNEwyX01CVVNfRk1UX1JHQjU1NV8yWDhfUEFESElfQkUsCiAJVjRMMl9NQlVTX0ZNVF9SR0I1NjVfMlg4X0xFLApAQCAtNDEsNiArNDEsMTEgQEAKIAlWNEwyX01CVVNfRk1UX1NCR0dSMTBfMlg4X1BBREhJX0JFLAogCVY0TDJfTUJVU19GTVRfU0JHR1IxMF8yWDhfUEFETE9fQkUsCiAJVjRMMl9NQlVTX0ZNVF9TR1JCRzhfMVg4LAorCVY0TDJfTUJVU19GTVRfU0JHR1IxMl8xWDEyLAorCVY0TDJfTUJVU19GTVRfWVVZVjhfMV81WDgsCisJVjRMMl9NQlVTX0ZNVF9ZVllVOF8xXzVYOCwKKwlWNEwyX01CVVNfRk1UX1VZVlk4XzFfNVg4LAorCVY0TDJfTUJVU19GTVRfVllVWThfMV81WDgsCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdmlkZW9idWYtY29yZS5oIGIvaW5jbHVkZS9tZWRpYS92aWRlb2J1Zi1jb3JlLmgKaW5kZXggZjkxYTczNi4uZjJjNDFjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92aWRlb2J1Zi1jb3JlLmgKKysrIGIvaW5jbHVkZS9tZWRpYS92aWRlb2J1Zi1jb3JlLmgKQEAgLTU0LDggKzU0LDYgQEAKIAogc3RydWN0IHZpZGVvYnVmX21hcHBpbmcgewogCXVuc2lnbmVkIGludCBjb3VudDsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0OwotCXVuc2lnbmVkIGxvbmcgZW5kOwogCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcTsKIH07CiAKQEAgLTEyNyw3ICsxMjUsNyBAQAogc3RydWN0IHZpZGVvYnVmX3F0eXBlX29wcyB7CiAJdTMyICAgICAgICAgICAgICAgICAgICAgbWFnaWM7CiAKLQlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICooKmFsbG9jKShzaXplX3Qgc2l6ZSk7CisJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqKCphbGxvY192Yikoc2l6ZV90IHNpemUpOwogCXZvaWQgKigqdmFkZHIpCQkoc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqYnVmKTsKIAlpbnQgKCppb2xvY2spCQkoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAogCQkJCSBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwKQEAgLTE3Myw3ICsxNzEsNyBAQAogaW50IHZpZGVvYnVmX2lvbG9jayhzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLAogCQlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqZmJ1Zik7CiAKLXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZpZGVvYnVmX2FsbG9jKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSk7CitzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2aWRlb2J1Zl9hbGxvY192YihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEpOwogCiAvKiBVc2VkIG9uIHZpZGVvYnVmLWR2YiAqLwogdm9pZCAqdmlkZW9idWZfcXVldWVfdG9fdmFkZHIoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92aWRlb2J1Zi1kbWEtc2cuaCBiL2luY2x1ZGUvbWVkaWEvdmlkZW9idWYtZG1hLXNnLmgKaW5kZXggYTE5NWYzYi4uOTdlMDdmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92aWRlb2J1Zi1kbWEtc2cuaAorKysgYi9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWRtYS1zZy5oCkBAIC0yNSwyMyArMjUsNiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qCi0gKiBSZXR1cm4gYSBzY2F0dGVybGlzdCBmb3Igc29tZSBwYWdlLWFsaWduZWQgdm1hbGxvYygpJ2VkIG1lbW9yeQotICogYmxvY2sgKE5VTEwgb24gZXJyb3JzKS4gIE1lbW9yeSBmb3IgdGhlIHNjYXR0ZXJsaXN0IGlzIGFsbG9jYXRlZAotICogdXNpbmcga21hbGxvYy4gIFRoZSBjYWxsZXIgbXVzdCBmcmVlIHRoZSBtZW1vcnkuCi0gKi8KLXN0cnVjdCBzY2F0dGVybGlzdCAqdmlkZW9idWZfdm1hbGxvY190b19zZyh1bnNpZ25lZCBjaGFyICp2aXJ0LCBpbnQgbnJfcGFnZXMpOwotCi0vKgotICogUmV0dXJuIGEgc2NhdHRlcmxpc3QgZm9yIGEgYW4gYXJyYXkgb2YgdXNlcnBhZ2VzIChOVUxMIG9uIGVycm9ycykuCi0gKiBNZW1vcnkgZm9yIHRoZSBzY2F0dGVybGlzdCBpcyBhbGxvY2F0ZWQgdXNpbmcga21hbGxvYy4gIFRoZSBjYWxsZXIKLSAqIG11c3QgZnJlZSB0aGUgbWVtb3J5LgotICovCi1zdHJ1Y3Qgc2NhdHRlcmxpc3QgKnZpZGVvYnVmX3BhZ2VzX3RvX3NnKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBucl9wYWdlcywKLQkJCQkJIGludCBvZmZzZXQpOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKICAqIEEgc21hbGwgc2V0IG9mIGhlbHBlciBmdW5jdGlvbnMgdG8gbWFuYWdlIGJ1ZmZlcnMgKGJvdGggdXNlcmxhbmQKICAqIGFuZCBrZXJuZWwpIGZvciBETUEuCiAgKgpAQCAtNjgsNyArNTEsNyBAQAogCXN0cnVjdCBwYWdlICAgICAgICAgKipwYWdlczsKIAogCS8qIGZvciBrZXJuZWwgYnVmZmVycyAqLwotCXZvaWQgICAgICAgICAgICAgICAgKnZtYWxsb2M7CisJdm9pZCAgICAgICAgICAgICAgICAqdmFkZHI7CiAKIAkvKiBmb3Igb3ZlcmxheSBidWZmZXJzIChwY2ktcGNpIGRtYSkgKi8KIAlkbWFfYWRkcl90ICAgICAgICAgIGJ1c19hZGRyOwpAQCAtODcsNiArNzAsMTYgQEAKIAlzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICBkbWE7CiB9OwogCisvKgorICogU2NhdHRlci1nYXRoZXIgRE1BIGJ1ZmZlciBBUEkuCisgKgorICogVGhlc2UgZnVuY3Rpb25zIHByb3ZpZGUgYSBzaW1wbGUgd2F5IHRvIGNyZWF0ZSBhIHBhZ2UgbGlzdCBhbmQgYQorICogc2NhdHRlci1nYXRoZXIgbGlzdCBmcm9tIGEga2VybmVsLCB1c2Vyc3BhY2Ugb2YgcGh5c2ljYWwgYWRkcmVzcyBhbmQgbWFwIHRoZQorICogbWVtb3J5IGZvciBETUEgb3BlcmF0aW9uLgorICoKKyAqIERlc3BpdGUgdGhlIG5hbWUsIHRoaXMgaXMgdG90YWxseSB1bnJlbGF0ZWQgdG8gdmlkZW9idWYsIGV4Y2VwdCB0aGF0CisgKiB2aWRlb2J1Zi1kbWEtc2cgdXNlcyB0aGUgc2FtZSBBUEkgaW50ZXJuYWxseS4KKyAqLwogdm9pZCB2aWRlb2J1Zl9kbWFfaW5pdChzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWEpOwogaW50IHZpZGVvYnVmX2RtYV9pbml0X3VzZXIoc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hLCBpbnQgZGlyZWN0aW9uLAogCQkJICAgdW5zaWduZWQgbG9uZyBkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUpOwpAQCAtOTYsOCArODksOCBAQAogCQkJICAgICAgZG1hX2FkZHJfdCBhZGRyLCBpbnQgbnJfcGFnZXMpOwogaW50IHZpZGVvYnVmX2RtYV9mcmVlKHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSk7CiAKLWludCB2aWRlb2J1Zl9kbWFfbWFwKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hKTsKLWludCB2aWRlb2J1Zl9kbWFfdW5tYXAoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWEpOworaW50IHZpZGVvYnVmX2RtYV9tYXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWEpOworaW50IHZpZGVvYnVmX2RtYV91bm1hcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSk7CiBzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICp2aWRlb2J1Zl90b19kbWEoc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqYnVmKTsKIAogdm9pZCAqdmlkZW9idWZfc2dfYWxsb2Moc2l6ZV90IHNpemUpOwpAQCAtMTExLDExICsxMDQsNSBAQAogCQkJIHVuc2lnbmVkIGludCBtc2l6ZSwKIAkJCSB2b2lkICpwcml2KTsKIAotLypGSVhNRTogdGhlc2UgdmFyaWFudHMgYXJlIHVzZWQgb25seSBvbiAqLWFsc2EgY29kZSwgd2hlcmUgdmlkZW9idWYgaXMKLSAqIHVzZWQgd2l0aG91dCBxdWV1ZQotICovCi1pbnQgdmlkZW9idWZfc2dfZG1hX21hcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSk7Ci1pbnQgdmlkZW9idWZfc2dfZG1hX3VubWFwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hKTsKLQogI2VuZGlmIC8qIF9WSURFT0JVRl9ETUFfU0dfSCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLXZtYWxsb2MuaCBiL2luY2x1ZGUvbWVkaWEvdmlkZW9idWYtdm1hbGxvYy5oCmluZGV4IDg1MWViMWEuLmUxOTQwM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdmlkZW9idWYtdm1hbGxvYy5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdmlkZW9idWYtdm1hbGxvYy5oCkBAIC0yMiw3ICsyMiw3IEBACiBzdHJ1Y3QgdmlkZW9idWZfdm1hbGxvY19tZW1vcnkgewogCXUzMiAgICAgICAgICAgICAgICAgbWFnaWM7CiAKLQl2b2lkICAgICAgICAgICAgICAgICp2bWFsbG9jOworCXZvaWQgICAgICAgICAgICAgICAgKnZhZGRyOwogCiAJLyogcmVtYXBfdm1hbGxvY19yYW5nZSBzZWVtcyB0byBuZWVkIHRvIHJ1bgogCSAqIGFmdGVyIG1tYXAoKSBvbiBzb21lIGNhc2VzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC85cC85cC5oIGIvaW5jbHVkZS9uZXQvOXAvOXAuaAppbmRleCAxNTZjMjZiLi5hOGRlODEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC85cC85cC5oCisrKyBiL2luY2x1ZGUvbmV0LzlwLzlwLmgKQEAgLTg4LDggKzg4LDE2IEBACiAgKiBlbnVtIHA5X21zZ190IC0gOVAgbWVzc2FnZSB0eXBlcwogICogQFA5X1RTVEFURlM6IGZpbGUgc3lzdGVtIHN0YXR1cyByZXF1ZXN0CiAgKiBAUDlfUlNUQVRGUzogZmlsZSBzeXN0ZW0gc3RhdHVzIHJlc3BvbnNlCisgKiBAUDlfVFNZTUxJTks6IG1ha2Ugc3ltbGluayByZXF1ZXN0CisgKiBAUDlfUlNZTUxJTks6IG1ha2Ugc3ltbGluayByZXNwb25zZQorICogQFA5X1RNS05PRDogY3JlYXRlIGEgc3BlY2lhbCBmaWxlIG9iamVjdCByZXF1ZXN0CisgKiBAUDlfUk1LTk9EOiBjcmVhdGUgYSBzcGVjaWFsIGZpbGUgb2JqZWN0IHJlc3BvbnNlCisgKiBAUDlfVExDUkVBVEU6IHByZXBhcmUgYSBoYW5kbGUgZm9yIEkvTyBvbiBhbiBuZXcgZmlsZSBmb3IgOVAyMDAwLkwKKyAqIEBQOV9STENSRUFURTogcmVzcG9uc2Ugd2l0aCBmaWxlIGFjY2VzcyBpbmZvcm1hdGlvbiBmb3IgOVAyMDAwLkwKICAqIEBQOV9UUkVOQU1FOiByZW5hbWUgcmVxdWVzdAogICogQFA5X1JSRU5BTUU6IHJlbmFtZSByZXNwb25zZQorICogQFA5X1RNS0RJUjogY3JlYXRlIGEgZGlyZWN0b3J5IHJlcXVlc3QKKyAqIEBQOV9STUtESVI6IGNyZWF0ZSBhIGRpcmVjdG9yeSByZXNwb25zZQogICogQFA5X1RWRVJTSU9OOiB2ZXJzaW9uIGhhbmRzaGFrZSByZXF1ZXN0CiAgKiBAUDlfUlZFUlNJT046IHZlcnNpb24gaGFuZHNoYWtlIHJlc3BvbnNlCiAgKiBAUDlfVEFVVEg6IHJlcXVlc3QgdG8gZXN0YWJsaXNoIGF1dGhlbnRpY2F0aW9uIGNoYW5uZWwKQEAgLTEzMSw4ICsxMzksMzAgQEAKIGVudW0gcDlfbXNnX3QgewogCVA5X1RTVEFURlMgPSA4LAogCVA5X1JTVEFURlMsCisJUDlfVExPUEVOID0gMTIsCisJUDlfUkxPUEVOLAorCVA5X1RMQ1JFQVRFID0gMTQsCisJUDlfUkxDUkVBVEUsCisJUDlfVFNZTUxJTksgPSAxNiwKKwlQOV9SU1lNTElOSywKKwlQOV9UTUtOT0QgPSAxOCwKKwlQOV9STUtOT0QsCiAJUDlfVFJFTkFNRSA9IDIwLAogCVA5X1JSRU5BTUUsCisJUDlfVEdFVEFUVFIgPSAyNCwKKwlQOV9SR0VUQVRUUiwKKwlQOV9UU0VUQVRUUiA9IDI2LAorCVA5X1JTRVRBVFRSLAorCVA5X1RYQVRUUldBTEsgPSAzMCwKKwlQOV9SWEFUVFJXQUxLLAorCVA5X1RYQVRUUkNSRUFURSA9IDMyLAorCVA5X1JYQVRUUkNSRUFURSwKKwlQOV9UUkVBRERJUiA9IDQwLAorCVA5X1JSRUFERElSLAorCVA5X1RMSU5LID0gNzAsCisJUDlfUkxJTkssCisJUDlfVE1LRElSID0gNzIsCisJUDlfUk1LRElSLAogCVA5X1RWRVJTSU9OID0gMTAwLAogCVA5X1JWRVJTSU9OLAogCVA5X1RBVVRIID0gMTAyLApAQCAtMjc1LDYgKzMwNSw5IEBACiAvKiBhbXBsZSByb29tIGZvciBUd3JpdGUvUnJlYWQgaGVhZGVyICovCiAjZGVmaW5lIFA5X0lPSERSU1oJMjQKIAorLyogUm9vbSBmb3IgcmVhZGRpciBoZWFkZXIgKi8KKyNkZWZpbmUgUDlfUkVBRERJUkhEUlNaCTI0CisKIC8qKgogICogc3RydWN0IHA5X3N0ciAtIGxlbmd0aCBwcmVmaXhlZCBzdHJpbmcgdHlwZQogICogQGxlbjogbGVuZ3RoIG9mIHRoZSBzdHJpbmcKQEAgLTM1Nyw2ICszOTAsNzQgQEAKIAl1MzIgbl9tdWlkOwkJLyogOXAyMDAwLnUgZXh0ZW5zaW9ucyAqLwogfTsKIAorc3RydWN0IHA5X3N0YXRfZG90bCB7CisJdTY0IHN0X3Jlc3VsdF9tYXNrOworCXN0cnVjdCBwOV9xaWQgcWlkOworCXUzMiBzdF9tb2RlOworCXUzMiBzdF91aWQ7CisJdTMyIHN0X2dpZDsKKwl1NjQgc3Rfbmxpbms7CisJdTY0IHN0X3JkZXY7CisJdTY0IHN0X3NpemU7CisJdTY0IHN0X2Jsa3NpemU7CisJdTY0IHN0X2Jsb2NrczsKKwl1NjQgc3RfYXRpbWVfc2VjOworCXU2NCBzdF9hdGltZV9uc2VjOworCXU2NCBzdF9tdGltZV9zZWM7CisJdTY0IHN0X210aW1lX25zZWM7CisJdTY0IHN0X2N0aW1lX3NlYzsKKwl1NjQgc3RfY3RpbWVfbnNlYzsKKwl1NjQgc3RfYnRpbWVfc2VjOworCXU2NCBzdF9idGltZV9uc2VjOworCXU2NCBzdF9nZW47CisJdTY0IHN0X2RhdGFfdmVyc2lvbjsKK307CisKKyNkZWZpbmUgUDlfU1RBVFNfTU9ERQkJMHgwMDAwMDAwMVVMTAorI2RlZmluZSBQOV9TVEFUU19OTElOSwkJMHgwMDAwMDAwMlVMTAorI2RlZmluZSBQOV9TVEFUU19VSUQJCTB4MDAwMDAwMDRVTEwKKyNkZWZpbmUgUDlfU1RBVFNfR0lECQkweDAwMDAwMDA4VUxMCisjZGVmaW5lIFA5X1NUQVRTX1JERVYJCTB4MDAwMDAwMTBVTEwKKyNkZWZpbmUgUDlfU1RBVFNfQVRJTUUJCTB4MDAwMDAwMjBVTEwKKyNkZWZpbmUgUDlfU1RBVFNfTVRJTUUJCTB4MDAwMDAwNDBVTEwKKyNkZWZpbmUgUDlfU1RBVFNfQ1RJTUUJCTB4MDAwMDAwODBVTEwKKyNkZWZpbmUgUDlfU1RBVFNfSU5PCQkweDAwMDAwMTAwVUxMCisjZGVmaW5lIFA5X1NUQVRTX1NJWkUJCTB4MDAwMDAyMDBVTEwKKyNkZWZpbmUgUDlfU1RBVFNfQkxPQ0tTCQkweDAwMDAwNDAwVUxMCisKKyNkZWZpbmUgUDlfU1RBVFNfQlRJTUUJCTB4MDAwMDA4MDBVTEwKKyNkZWZpbmUgUDlfU1RBVFNfR0VOCQkweDAwMDAxMDAwVUxMCisjZGVmaW5lIFA5X1NUQVRTX0RBVEFfVkVSU0lPTgkweDAwMDAyMDAwVUxMCisKKyNkZWZpbmUgUDlfU1RBVFNfQkFTSUMJCTB4MDAwMDA3ZmZVTEwgLyogTWFzayBmb3IgZmllbGRzIHVwIHRvIEJMT0NLUyAqLworI2RlZmluZSBQOV9TVEFUU19BTEwJCTB4MDAwMDNmZmZVTEwgLyogTWFzayBmb3IgQWxsIGZpZWxkcyBhYm92ZSAqLworCisvKioKKyAqIHN0cnVjdCBwOV9pYXR0cl9kb3RsIC0gUDkgaW5vZGUgYXR0cmlidXRlIGZvciBzZXRhdHRyCisgKiBAdmFsaWQ6IGJpdGZpZWxkIHNwZWNpZnlpbmcgd2hpY2ggZmllbGRzIGFyZSB2YWxpZAorICogICAgICAgICBzYW1lIGFzIGluIHN0cnVjdCBpYXR0cgorICogQG1vZGU6IEZpbGUgcGVybWlzc2lvbiBiaXRzCisgKiBAdWlkOiB1c2VyIGlkIG9mIG93bmVyCisgKiBAZ2lkOiBncm91cCBpZAorICogQHNpemU6IEZpbGUgc2l6ZQorICogQGF0aW1lX3NlYzogTGFzdCBhY2Nlc3MgdGltZSwgc2Vjb25kcworICogQGF0aW1lX25zZWM6IExhc3QgYWNjZXNzIHRpbWUsIG5hbm9zZWNvbmRzCisgKiBAbXRpbWVfc2VjOiBMYXN0IG1vZGlmaWNhdGlvbiB0aW1lLCBzZWNvbmRzCisgKiBAbXRpbWVfbnNlYzogTGFzdCBtb2RpZmljYXRpb24gdGltZSwgbmFub3NlY29uZHMKKyAqLworCitzdHJ1Y3QgcDlfaWF0dHJfZG90bCB7CisJdTMyIHZhbGlkOworCXUzMiBtb2RlOworCXUzMiB1aWQ7CisJdTMyIGdpZDsKKwl1NjQgc2l6ZTsKKwl1NjQgYXRpbWVfc2VjOworCXU2NCBhdGltZV9uc2VjOworCXU2NCBtdGltZV9zZWM7CisJdTY0IG10aW1lX25zZWM7Cit9OworCiAvKiBTdHJ1Y3R1cmVzIGZvciBQcm90b2NvbCBPcGVyYXRpb25zICovCiBzdHJ1Y3QgcDlfdHN0YXRmcyB7CiAJdTMyIGZpZDsKQEAgLTQ4NSw2ICs1ODYsMTggQEAKIAl1MzIgY291bnQ7CiB9OwogCitzdHJ1Y3QgcDlfdHJlYWRkaXIgeworCXUzMiBmaWQ7CisJdTY0IG9mZnNldDsKKwl1MzIgY291bnQ7Cit9OworCitzdHJ1Y3QgcDlfcnJlYWRkaXIgeworCXUzMiBjb3VudDsKKwl1OCAqZGF0YTsKK307CisKKwogc3RydWN0IHA5X3RjbHVuayB7CiAJdTMyIGZpZDsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC85cC9jbGllbnQuaCBiL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oCmluZGV4IDdkZDNlZDguLmQxYWEyY2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oCisrKyBiL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oCkBAIC0xOTUsNiArMTk1LDIxIEBACiAJc3RydWN0IGxpc3RfaGVhZCBkbGlzdDsJLyogbGlzdCBvZiBhbGwgZmlkcyBhdHRhY2hlZCB0byBhIGRlbnRyeSAqLwogfTsKIAorLyoqCisgKiBzdHJ1Y3QgcDlfZGlyZW50IC0gZGlyZWN0b3J5IGVudHJ5IHN0cnVjdHVyZQorICogQHFpZDogVGhlIHA5IHNlcnZlciBxaWQgZm9yIHRoaXMgZGlyZW50CisgKiBAZF9vZmY6IG9mZnNldCB0byB0aGUgbmV4dCBkaXJlbnQKKyAqIEBkX3R5cGU6IHR5cGUgb2YgZmlsZQorICogQGRfbmFtZTogZmlsZSBuYW1lCisgKi8KKworc3RydWN0IHA5X2RpcmVudCB7CisJc3RydWN0IHA5X3FpZCBxaWQ7CisJdTY0IGRfb2ZmOworCXVuc2lnbmVkIGNoYXIgZF90eXBlOworCWNoYXIgZF9uYW1lWzI1Nl07Cit9OworCiBpbnQgcDlfY2xpZW50X3N0YXRmcyhzdHJ1Y3QgcDlfZmlkICpmaWQsIHN0cnVjdCBwOV9yc3RhdGZzICpzYik7CiBpbnQgcDlfY2xpZW50X3JlbmFtZShzdHJ1Y3QgcDlfZmlkICpmaWQsIHN0cnVjdCBwOV9maWQgKm5ld2RpcmZpZCwgY2hhciAqbmFtZSk7CiBpbnQgcDlfY2xpZW50X3ZlcnNpb24oc3RydWN0IHA5X2NsaWVudCAqKTsKQEAgLTIxMSwxNSArMjI2LDMxIEBACiBpbnQgcDlfY2xpZW50X29wZW4oc3RydWN0IHA5X2ZpZCAqZmlkLCBpbnQgbW9kZSk7CiBpbnQgcDlfY2xpZW50X2ZjcmVhdGUoc3RydWN0IHA5X2ZpZCAqZmlkLCBjaGFyICpuYW1lLCB1MzIgcGVybSwgaW50IG1vZGUsCiAJCQkJCQkJY2hhciAqZXh0ZW5zaW9uKTsKK2ludCBwOV9jbGllbnRfbGluayhzdHJ1Y3QgcDlfZmlkICpmaWQsIHN0cnVjdCBwOV9maWQgKm9sZGZpZCwgY2hhciAqbmV3bmFtZSk7CitpbnQgcDlfY2xpZW50X3N5bWxpbmsoc3RydWN0IHA5X2ZpZCAqZmlkLCBjaGFyICpuYW1lLCBjaGFyICpzeW1uYW1lLCBnaWRfdCBnaWQsCisJCQkJCQkJc3RydWN0IHA5X3FpZCAqcWlkKTsKK2ludCBwOV9jbGllbnRfY3JlYXRlX2RvdGwoc3RydWN0IHA5X2ZpZCAqb2ZpZCwgY2hhciAqbmFtZSwgdTMyIGZsYWdzLCB1MzIgbW9kZSwKKwkJZ2lkX3QgZ2lkLCBzdHJ1Y3QgcDlfcWlkICpxaWQpOwogaW50IHA5X2NsaWVudF9jbHVuayhzdHJ1Y3QgcDlfZmlkICpmaWQpOwogaW50IHA5X2NsaWVudF9yZW1vdmUoc3RydWN0IHA5X2ZpZCAqZmlkKTsKIGludCBwOV9jbGllbnRfcmVhZChzdHJ1Y3QgcDlfZmlkICpmaWQsIGNoYXIgKmRhdGEsIGNoYXIgX191c2VyICp1ZGF0YSwKIAkJCQkJCQl1NjQgb2Zmc2V0LCB1MzIgY291bnQpOwogaW50IHA5X2NsaWVudF93cml0ZShzdHJ1Y3QgcDlfZmlkICpmaWQsIGNoYXIgKmRhdGEsIGNvbnN0IGNoYXIgX191c2VyICp1ZGF0YSwKIAkJCQkJCQl1NjQgb2Zmc2V0LCB1MzIgY291bnQpOworaW50IHA5X2NsaWVudF9yZWFkZGlyKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciAqZGF0YSwgdTMyIGNvdW50LCB1NjQgb2Zmc2V0KTsKK2ludCBwOWRpcmVudF9yZWFkKGNoYXIgKmJ1ZiwgaW50IGxlbiwgc3RydWN0IHA5X2RpcmVudCAqZGlyZW50LAorCQkJCQkJCWludCBwcm90b192ZXJzaW9uKTsKIHN0cnVjdCBwOV93c3RhdCAqcDlfY2xpZW50X3N0YXQoc3RydWN0IHA5X2ZpZCAqZmlkKTsKIGludCBwOV9jbGllbnRfd3N0YXQoc3RydWN0IHA5X2ZpZCAqZmlkLCBzdHJ1Y3QgcDlfd3N0YXQgKndzdCk7CitpbnQgcDlfY2xpZW50X3NldGF0dHIoc3RydWN0IHA5X2ZpZCAqZmlkLCBzdHJ1Y3QgcDlfaWF0dHJfZG90bCAqYXR0cik7CiAKK3N0cnVjdCBwOV9zdGF0X2RvdGwgKnA5X2NsaWVudF9nZXRhdHRyX2RvdGwoc3RydWN0IHA5X2ZpZCAqZmlkLAorCQkJCQkJCXU2NCByZXF1ZXN0X21hc2spOworCitpbnQgcDlfY2xpZW50X21rbm9kX2RvdGwoc3RydWN0IHA5X2ZpZCAqb2xkZmlkLCBjaGFyICpuYW1lLCBpbnQgbW9kZSwKKwkJCWRldl90IHJkZXYsIGdpZF90IGdpZCwgc3RydWN0IHA5X3FpZCAqKTsKK2ludCBwOV9jbGllbnRfbWtkaXJfZG90bChzdHJ1Y3QgcDlfZmlkICpmaWQsIGNoYXIgKm5hbWUsIGludCBtb2RlLAorCQkJCWdpZF90IGdpZCwgc3RydWN0IHA5X3FpZCAqKTsKIHN0cnVjdCBwOV9yZXFfdCAqcDlfdGFnX2xvb2t1cChzdHJ1Y3QgcDlfY2xpZW50ICosIHUxNik7CiB2b2lkIHA5X2NsaWVudF9jYihzdHJ1Y3QgcDlfY2xpZW50ICpjLCBzdHJ1Y3QgcDlfcmVxX3QgKnJlcSk7CiAKQEAgLTIyOSw1ICsyNjAsNyBAQAogCiBpbnQgcDlfaXNfcHJvdG9fZG90dShzdHJ1Y3QgcDlfY2xpZW50ICpjbG50KTsKIGludCBwOV9pc19wcm90b19kb3RsKHN0cnVjdCBwOV9jbGllbnQgKmNsbnQpOworc3RydWN0IHA5X2ZpZCAqcDlfY2xpZW50X3hhdHRyd2FsayhzdHJ1Y3QgcDlfZmlkICosIGNvbnN0IGNoYXIgKiwgdTY0ICopOworaW50IHA5X2NsaWVudF94YXR0cmNyZWF0ZShzdHJ1Y3QgcDlfZmlkICosIGNvbnN0IGNoYXIgKiwgdTY0LCBpbnQpOwogCiAjZW5kaWYgLyogTkVUXzlQX0NMSUVOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hY3RfYXBpLmggYi9pbmNsdWRlL25ldC9hY3RfYXBpLmgKaW5kZXggYzA1ZmQ3MS4uYmFiMzg1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYWN0X2FwaS5oCisrKyBiL2luY2x1ZGUvbmV0L2FjdF9hcGkuaApAQCAtMjAsNiArMjAsNyBAQAogCXN0cnVjdCBnbmV0X3N0YXRzX3F1ZXVlCQl0Y2ZjX3FzdGF0czsKIAlzdHJ1Y3QgZ25ldF9zdGF0c19yYXRlX2VzdAl0Y2ZjX3JhdGVfZXN0OwogCXNwaW5sb2NrX3QJCQl0Y2ZjX2xvY2s7CisJc3RydWN0IHJjdV9oZWFkCQkJdGNmY19yY3U7CiB9OwogI2RlZmluZSB0Y2ZfbmV4dAljb21tb24udGNmY19uZXh0CiAjZGVmaW5lIHRjZl9pbmRleAljb21tb24udGNmY19pbmRleApAQCAtMzIsNiArMzMsNyBAQAogI2RlZmluZSB0Y2ZfcXN0YXRzCWNvbW1vbi50Y2ZjX3FzdGF0cwogI2RlZmluZSB0Y2ZfcmF0ZV9lc3QJY29tbW9uLnRjZmNfcmF0ZV9lc3QKICNkZWZpbmUgdGNmX2xvY2sJY29tbW9uLnRjZmNfbG9jaworI2RlZmluZSB0Y2ZfcmN1CQljb21tb24udGNmY19yY3UKIAogc3RydWN0IHRjZl9wb2xpY2UgewogCXN0cnVjdCB0Y2ZfY29tbW9uCWNvbW1vbjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FmX3VuaXguaCBiL2luY2x1ZGUvbmV0L2FmX3VuaXguaAppbmRleCAyMDcyNWUyLi45MGM5ZTI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9hZl91bml4LmgKKysrIGIvaW5jbHVkZS9uZXQvYWZfdW5peC5oCkBAIC0yMyw3ICsyMyw4IEBACiB9OwogCiBzdHJ1Y3QgdW5peF9za2JfcGFybXMgewotCXN0cnVjdCB1Y3JlZAkJY3JlZHM7CQkvKiBTa2IgY3JlZGVudGlhbHMJKi8KKwlzdHJ1Y3QgcGlkCQkqcGlkOwkJLyogU2tiIGNyZWRlbnRpYWxzCSovCisJY29uc3Qgc3RydWN0IGNyZWQJKmNyZWQ7CiAJc3RydWN0IHNjbV9mcF9saXN0CSpmcDsJCS8qIFBhc3NlZCBmaWxlcwkJKi8KICNpZmRlZiBDT05GSUdfU0VDVVJJVFlfTkVUV09SSwogCXUzMgkJCXNlY2lkOwkJLyogU2VjdXJpdHkgSUQJCSovCkBAIC0zMSw3ICszMiw2IEBACiB9OwogCiAjZGVmaW5lIFVOSVhDQihza2IpIAkoKihzdHJ1Y3QgdW5peF9za2JfcGFybXMgKikmKChza2IpLT5jYikpCi0jZGVmaW5lIFVOSVhDUkVEUyhza2IpCSgmVU5JWENCKChza2IpKS5jcmVkcykKICNkZWZpbmUgVU5JWFNJRChza2IpCSgmVU5JWENCKChza2IpKS5zZWNpZCkKIAogI2RlZmluZSB1bml4X3N0YXRlX2xvY2socykJc3Bpbl9sb2NrKCZ1bml4X3NrKHMpLT5sb2NrKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oCmluZGV4IGZmNzdlOGYuLjI3YTkwMmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9ibHVldG9vdGguaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmgKQEAgLTg0LDcgKzg0LDcgQEAKIC8qIEJEIEFkZHJlc3MgKi8KIHR5cGVkZWYgc3RydWN0IHsKIAlfX3U4IGJbNl07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGJkYWRkcl90OworfSBfX3BhY2tlZCBiZGFkZHJfdDsKIAogI2RlZmluZSBCREFERFJfQU5ZICAgKCYoYmRhZGRyX3QpIHt7MCwgMCwgMCwgMCwgMCwgMH19KQogI2RlZmluZSBCREFERFJfTE9DQUwgKCYoYmRhZGRyX3QpIHt7MCwgMCwgMCwgMHhmZiwgMHhmZiwgMHhmZn19KQpAQCAtMTM4LDYgKzEzOCw3IEBACiBzdHJ1Y3QgYnRfc2tiX2NiIHsKIAlfX3U4IHBrdF90eXBlOwogCV9fdTggaW5jb21pbmc7CisJX191MTYgZXhwZWN0OwogCV9fdTggdHhfc2VxOwogCV9fdTggcmV0cmllczsKIAlfX3U4IHNhcjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaAppbmRleCBmYzBjNTAyLi5iY2JkZDZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oCkBAIC0xMDAsNiArMTAwLDkgQEAKICNkZWZpbmUgSENJU0VUQUNMTVRVCV9JT1coJ0gnLCAyMjcsIGludCkKICNkZWZpbmUgSENJU0VUU0NPTVRVCV9JT1coJ0gnLCAyMjgsIGludCkKIAorI2RlZmluZSBIQ0lCTE9DS0FERFIJX0lPVygnSCcsIDIzMCwgaW50KQorI2RlZmluZSBIQ0lVTkJMT0NLQUREUglfSU9XKCdIJywgMjMxLCBpbnQpCisKICNkZWZpbmUgSENJSU5RVUlSWQlfSU9SKCdIJywgMjQwLCBpbnQpCiAKIC8qIEhDSSB0aW1lb3V0cyAqLwpAQCAtMjI3LDcgKzIzMCw3IEBACiAJX191OCAgICAgbGFwWzNdOwogCV9fdTggICAgIGxlbmd0aDsKIAlfX3U4ICAgICBudW1fcnNwOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9PUF9JTlFVSVJZX0NBTkNFTAkJMHgwNDAyCiAKQEAgLTI0MSw4MSArMjQ0LDgxIEBACiAJX191OCAgICAgcHNjYW5fbW9kZTsKIAlfX2xlMTYgICBjbG9ja19vZmZzZXQ7CiAJX191OCAgICAgcm9sZV9zd2l0Y2g7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX09QX0RJU0NPTk5FQ1QJCTB4MDQwNgogc3RydWN0IGhjaV9jcF9kaXNjb25uZWN0IHsKIAlfX2xlMTYgICBoYW5kbGU7CiAJX191OCAgICAgcmVhc29uOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9PUF9BRERfU0NPCQkJMHgwNDA3CiBzdHJ1Y3QgaGNpX2NwX2FkZF9zY28gewogCV9fbGUxNiAgIGhhbmRsZTsKIAlfX2xlMTYgICBwa3RfdHlwZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBIQ0lfT1BfQ1JFQVRFX0NPTk5fQ0FOQ0VMCTB4MDQwOAogc3RydWN0IGhjaV9jcF9jcmVhdGVfY29ubl9jYW5jZWwgewogCWJkYWRkcl90IGJkYWRkcjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBIQ0lfT1BfQUNDRVBUX0NPTk5fUkVRCQkweDA0MDkKIHN0cnVjdCBoY2lfY3BfYWNjZXB0X2Nvbm5fcmVxIHsKIAliZGFkZHJfdCBiZGFkZHI7CiAJX191OCAgICAgcm9sZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBIQ0lfT1BfUkVKRUNUX0NPTk5fUkVRCQkweDA0MGEKIHN0cnVjdCBoY2lfY3BfcmVqZWN0X2Nvbm5fcmVxIHsKIAliZGFkZHJfdCBiZGFkZHI7CiAJX191OCAgICAgcmVhc29uOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9PUF9MSU5LX0tFWV9SRVBMWQkJMHgwNDBiCiBzdHJ1Y3QgaGNpX2NwX2xpbmtfa2V5X3JlcGx5IHsKIAliZGFkZHJfdCBiZGFkZHI7CiAJX191OCAgICAgbGlua19rZXlbMTZdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9PUF9MSU5LX0tFWV9ORUdfUkVQTFkJMHgwNDBjCiBzdHJ1Y3QgaGNpX2NwX2xpbmtfa2V5X25lZ19yZXBseSB7CiAJYmRhZGRyX3QgYmRhZGRyOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9PUF9QSU5fQ09ERV9SRVBMWQkJMHgwNDBkCiBzdHJ1Y3QgaGNpX2NwX3Bpbl9jb2RlX3JlcGx5IHsKIAliZGFkZHJfdCBiZGFkZHI7CiAJX191OCAgICAgcGluX2xlbjsKIAlfX3U4ICAgICBwaW5fY29kZVsxNl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX09QX1BJTl9DT0RFX05FR19SRVBMWQkweDA0MGUKIHN0cnVjdCBoY2lfY3BfcGluX2NvZGVfbmVnX3JlcGx5IHsKIAliZGFkZHJfdCBiZGFkZHI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX09QX0NIQU5HRV9DT05OX1BUWVBFCTB4MDQwZgogc3RydWN0IGhjaV9jcF9jaGFuZ2VfY29ubl9wdHlwZSB7CiAJX19sZTE2ICAgaGFuZGxlOwogCV9fbGUxNiAgIHBrdF90eXBlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9PUF9BVVRIX1JFUVVFU1RFRAkJMHgwNDExCiBzdHJ1Y3QgaGNpX2NwX2F1dGhfcmVxdWVzdGVkIHsKIAlfX2xlMTYgICBoYW5kbGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX09QX1NFVF9DT05OX0VOQ1JZUFQJCTB4MDQxMwogc3RydWN0IGhjaV9jcF9zZXRfY29ubl9lbmNyeXB0IHsKIAlfX2xlMTYgICBoYW5kbGU7CiAJX191OCAgICAgZW5jcnlwdDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBIQ0lfT1BfQ0hBTkdFX0NPTk5fTElOS19LRVkJMHgwNDE1CiBzdHJ1Y3QgaGNpX2NwX2NoYW5nZV9jb25uX2xpbmtfa2V5IHsKIAlfX2xlMTYgICBoYW5kbGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX09QX1JFTU9URV9OQU1FX1JFUQkJMHgwNDE5CiBzdHJ1Y3QgaGNpX2NwX3JlbW90ZV9uYW1lX3JlcSB7CkBAIC0zMjMsMjggKzMyNiwyOCBAQAogCV9fdTggICAgIHBzY2FuX3JlcF9tb2RlOwogCV9fdTggICAgIHBzY2FuX21vZGU7CiAJX19sZTE2ICAgY2xvY2tfb2Zmc2V0OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9PUF9SRU1PVEVfTkFNRV9SRVFfQ0FOQ0VMCTB4MDQxYQogc3RydWN0IGhjaV9jcF9yZW1vdGVfbmFtZV9yZXFfY2FuY2VsIHsKIAliZGFkZHJfdCBiZGFkZHI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX09QX1JFQURfUkVNT1RFX0ZFQVRVUkVTCTB4MDQxYgogc3RydWN0IGhjaV9jcF9yZWFkX3JlbW90ZV9mZWF0dXJlcyB7CiAJX19sZTE2ICAgaGFuZGxlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9PUF9SRUFEX1JFTU9URV9FWFRfRkVBVFVSRVMJMHgwNDFjCiBzdHJ1Y3QgaGNpX2NwX3JlYWRfcmVtb3RlX2V4dF9mZWF0dXJlcyB7CiAJX19sZTE2ICAgaGFuZGxlOwogCV9fdTggICAgIHBhZ2U7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX09QX1JFQURfUkVNT1RFX1ZFUlNJT04JMHgwNDFkCiBzdHJ1Y3QgaGNpX2NwX3JlYWRfcmVtb3RlX3ZlcnNpb24gewogCV9fbGUxNiAgIGhhbmRsZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBIQ0lfT1BfU0VUVVBfU1lOQ19DT05OCQkweDA0MjgKIHN0cnVjdCBoY2lfY3Bfc2V0dXBfc3luY19jb25uIHsKQEAgLTM1NSw3ICszNTgsNyBAQAogCV9fbGUxNiAgIHZvaWNlX3NldHRpbmc7CiAJX191OCAgICAgcmV0cmFuc19lZmZvcnQ7CiAJX19sZTE2ICAgcGt0X3R5cGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX09QX0FDQ0VQVF9TWU5DX0NPTk5fUkVRCTB4MDQyOQogc3RydWN0IGhjaV9jcF9hY2NlcHRfc3luY19jb25uX3JlcSB7CkBAIC0zNjYsMTMgKzM2OSwxMyBAQAogCV9fbGUxNiAgIGNvbnRlbnRfZm9ybWF0OwogCV9fdTggICAgIHJldHJhbnNfZWZmb3J0OwogCV9fbGUxNiAgIHBrdF90eXBlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9PUF9SRUpFQ1RfU1lOQ19DT05OX1JFUQkweDA0MmEKIHN0cnVjdCBoY2lfY3BfcmVqZWN0X3N5bmNfY29ubl9yZXEgewogCWJkYWRkcl90IGJkYWRkcjsKIAlfX3U4ICAgICByZWFzb247Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX09QX1NOSUZGX01PREUJCTB4MDgwMwogc3RydWN0IGhjaV9jcF9zbmlmZl9tb2RlIHsKQEAgLTM4MSw1OSArMzg0LDU5IEBACiAJX19sZTE2ICAgbWluX2ludGVydmFsOwogCV9fbGUxNiAgIGF0dGVtcHQ7CiAJX19sZTE2ICAgdGltZW91dDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBIQ0lfT1BfRVhJVF9TTklGRl9NT0RFCQkweDA4MDQKIHN0cnVjdCBoY2lfY3BfZXhpdF9zbmlmZl9tb2RlIHsKIAlfX2xlMTYgICBoYW5kbGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX09QX1JPTEVfRElTQ09WRVJZCQkweDA4MDkKIHN0cnVjdCBoY2lfY3Bfcm9sZV9kaXNjb3ZlcnkgewogCV9fbGUxNiAgIGhhbmRsZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIHN0cnVjdCBoY2lfcnBfcm9sZV9kaXNjb3ZlcnkgewogCV9fdTggICAgIHN0YXR1czsKIAlfX2xlMTYgICBoYW5kbGU7CiAJX191OCAgICAgcm9sZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBIQ0lfT1BfU1dJVENIX1JPTEUJCTB4MDgwYgogc3RydWN0IGhjaV9jcF9zd2l0Y2hfcm9sZSB7CiAJYmRhZGRyX3QgYmRhZGRyOwogCV9fdTggICAgIHJvbGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX09QX1JFQURfTElOS19QT0xJQ1kJCTB4MDgwYwogc3RydWN0IGhjaV9jcF9yZWFkX2xpbmtfcG9saWN5IHsKIAlfX2xlMTYgICBoYW5kbGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiBzdHJ1Y3QgaGNpX3JwX3JlYWRfbGlua19wb2xpY3kgewogCV9fdTggICAgIHN0YXR1czsKIAlfX2xlMTYgICBoYW5kbGU7CiAJX19sZTE2ICAgcG9saWN5OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9PUF9XUklURV9MSU5LX1BPTElDWQkweDA4MGQKIHN0cnVjdCBoY2lfY3Bfd3JpdGVfbGlua19wb2xpY3kgewogCV9fbGUxNiAgIGhhbmRsZTsKIAlfX2xlMTYgICBwb2xpY3k7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiBzdHJ1Y3QgaGNpX3JwX3dyaXRlX2xpbmtfcG9saWN5IHsKIAlfX3U4ICAgICBzdGF0dXM7CiAJX19sZTE2ICAgaGFuZGxlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9PUF9SRUFEX0RFRl9MSU5LX1BPTElDWQkweDA4MGUKIHN0cnVjdCBoY2lfcnBfcmVhZF9kZWZfbGlua19wb2xpY3kgewogCV9fdTggICAgIHN0YXR1czsKIAlfX2xlMTYgICBwb2xpY3k7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX09QX1dSSVRFX0RFRl9MSU5LX1BPTElDWQkweDA4MGYKIHN0cnVjdCBoY2lfY3Bfd3JpdGVfZGVmX2xpbmtfcG9saWN5IHsKIAlfX2xlMTYgICBwb2xpY3k7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX09QX1NOSUZGX1NVQlJBVEUJCTB4MDgxMQogc3RydWN0IGhjaV9jcF9zbmlmZl9zdWJyYXRlIHsKQEAgLTQ0MSwxMiArNDQ0LDEyIEBACiAJX19sZTE2ICAgbWF4X2xhdGVuY3k7CiAJX19sZTE2ICAgbWluX3JlbW90ZV90aW1lb3V0OwogCV9fbGUxNiAgIG1pbl9sb2NhbF90aW1lb3V0OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9PUF9TRVRfRVZFTlRfTUFTSwkJMHgwYzAxCiBzdHJ1Y3QgaGNpX2NwX3NldF9ldmVudF9tYXNrIHsKIAlfX3U4ICAgICBtYXNrWzhdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9PUF9SRVNFVAkJCTB4MGMwMwogCkBAIC00NTUsNyArNDU4LDcgQEAKIAlfX3U4ICAgICBmbHRfdHlwZTsKIAlfX3U4ICAgICBjb25kX3R5cGU7CiAJX191OCAgICAgY29uZGl0aW9uWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBGaWx0ZXIgdHlwZXMgKi8KICNkZWZpbmUgSENJX0ZMVF9DTEVBUl9BTEwJMHgwMApAQCAtNDc0LDEzICs0NzcsMTMgQEAKICNkZWZpbmUgSENJX09QX1dSSVRFX0xPQ0FMX05BTUUJCTB4MGMxMwogc3RydWN0IGhjaV9jcF93cml0ZV9sb2NhbF9uYW1lIHsKIAlfX3U4ICAgICBuYW1lWzI0OF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX09QX1JFQURfTE9DQUxfTkFNRQkJMHgwYzE0CiBzdHJ1Y3QgaGNpX3JwX3JlYWRfbG9jYWxfbmFtZSB7CiAJX191OCAgICAgc3RhdHVzOwogCV9fdTggICAgIG5hbWVbMjQ4XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBIQ0lfT1BfV1JJVEVfQ0FfVElNRU9VVAkJMHgwYzE2CiAKQEAgLTUwOCwyMyArNTExLDIzIEBACiBzdHJ1Y3QgaGNpX3JwX3JlYWRfY2xhc3Nfb2ZfZGV2IHsKIAlfX3U4ICAgICBzdGF0dXM7CiAJX191OCAgICAgZGV2X2NsYXNzWzNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9PUF9XUklURV9DTEFTU19PRl9ERVYJMHgwYzI0CiBzdHJ1Y3QgaGNpX2NwX3dyaXRlX2NsYXNzX29mX2RldiB7CiAJX191OCAgICAgZGV2X2NsYXNzWzNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9PUF9SRUFEX1ZPSUNFX1NFVFRJTkcJMHgwYzI1CiBzdHJ1Y3QgaGNpX3JwX3JlYWRfdm9pY2Vfc2V0dGluZyB7CiAJX191OCAgICAgc3RhdHVzOwogCV9fbGUxNiAgIHZvaWNlX3NldHRpbmc7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX09QX1dSSVRFX1ZPSUNFX1NFVFRJTkcJMHgwYzI2CiBzdHJ1Y3QgaGNpX2NwX3dyaXRlX3ZvaWNlX3NldHRpbmcgewogCV9fbGUxNiAgIHZvaWNlX3NldHRpbmc7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX09QX0hPU1RfQlVGRkVSX1NJWkUJCTB4MGMzMwogc3RydWN0IGhjaV9jcF9ob3N0X2J1ZmZlcl9zaXplIHsKQEAgLTUzMiwxOCArNTM1LDE4IEBACiAJX191OCAgICAgc2NvX210dTsKIAlfX2xlMTYgICBhY2xfbWF4X3BrdDsKIAlfX2xlMTYgICBzY29fbWF4X3BrdDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBIQ0lfT1BfUkVBRF9TU1BfTU9ERQkJMHgwYzU1CiBzdHJ1Y3QgaGNpX3JwX3JlYWRfc3NwX21vZGUgewogCV9fdTggICAgIHN0YXR1czsKIAlfX3U4ICAgICBtb2RlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9PUF9XUklURV9TU1BfTU9ERQkJMHgwYzU2CiBzdHJ1Y3QgaGNpX2NwX3dyaXRlX3NzcF9tb2RlIHsKIAlfX3U4ICAgICBtb2RlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9PUF9SRUFEX0xPQ0FMX1ZFUlNJT04JMHgxMDAxCiBzdHJ1Y3QgaGNpX3JwX3JlYWRfbG9jYWxfdmVyc2lvbiB7CkBAIC01NTMsMTkgKzU1NiwxOSBAQAogCV9fdTggICAgIGxtcF92ZXI7CiAJX19sZTE2ICAgbWFudWZhY3R1cmVyOwogCV9fbGUxNiAgIGxtcF9zdWJ2ZXI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX09QX1JFQURfTE9DQUxfQ09NTUFORFMJMHgxMDAyCiBzdHJ1Y3QgaGNpX3JwX3JlYWRfbG9jYWxfY29tbWFuZHMgewogCV9fdTggICAgIHN0YXR1czsKIAlfX3U4ICAgICBjb21tYW5kc1s2NF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX09QX1JFQURfTE9DQUxfRkVBVFVSRVMJMHgxMDAzCiBzdHJ1Y3QgaGNpX3JwX3JlYWRfbG9jYWxfZmVhdHVyZXMgewogCV9fdTggICAgIHN0YXR1czsKIAlfX3U4ICAgICBmZWF0dXJlc1s4XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBIQ0lfT1BfUkVBRF9MT0NBTF9FWFRfRkVBVFVSRVMJMHgxMDA0CiBzdHJ1Y3QgaGNpX3JwX3JlYWRfbG9jYWxfZXh0X2ZlYXR1cmVzIHsKQEAgLTU3Myw3ICs1NzYsNyBAQAogCV9fdTggICAgIHBhZ2U7CiAJX191OCAgICAgbWF4X3BhZ2U7CiAJX191OCAgICAgZmVhdHVyZXNbOF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX09QX1JFQURfQlVGRkVSX1NJWkUJCTB4MTAwNQogc3RydWN0IGhjaV9ycF9yZWFkX2J1ZmZlcl9zaXplIHsKQEAgLTU4MiwxMyArNTg1LDEzIEBACiAJX191OCAgICAgc2NvX210dTsKIAlfX2xlMTYgICBhY2xfbWF4X3BrdDsKIAlfX2xlMTYgICBzY29fbWF4X3BrdDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBIQ0lfT1BfUkVBRF9CRF9BRERSCQkweDEwMDkKIHN0cnVjdCBoY2lfcnBfcmVhZF9iZF9hZGRyIHsKIAlfX3U4ICAgICBzdGF0dXM7CiAJYmRhZGRyX3QgYmRhZGRyOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiAtLS0tIEhDSSBFdmVudHMgLS0tLSAqLwogI2RlZmluZSBIQ0lfRVZfSU5RVUlSWV9DT01QTEVURQkJMHgwMQpAQCAtNjAxLDcgKzYwNCw3IEBACiAJX191OCAgICAgcHNjYW5fbW9kZTsKIAlfX3U4ICAgICBkZXZfY2xhc3NbM107CiAJX19sZTE2ICAgY2xvY2tfb2Zmc2V0OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9FVl9DT05OX0NPTVBMRVRFCQkweDAzCiBzdHJ1Y3QgaGNpX2V2X2Nvbm5fY29tcGxldGUgewpAQCAtNjEwLDU0ICs2MTMsNTQgQEAKIAliZGFkZHJfdCBiZGFkZHI7CiAJX191OCAgICAgbGlua190eXBlOwogCV9fdTggICAgIGVuY3JfbW9kZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBIQ0lfRVZfQ09OTl9SRVFVRVNUCQkweDA0CiBzdHJ1Y3QgaGNpX2V2X2Nvbm5fcmVxdWVzdCB7CiAJYmRhZGRyX3QgYmRhZGRyOwogCV9fdTggICAgIGRldl9jbGFzc1szXTsKIAlfX3U4ICAgICBsaW5rX3R5cGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX0VWX0RJU0NPTk5fQ09NUExFVEUJCTB4MDUKIHN0cnVjdCBoY2lfZXZfZGlzY29ubl9jb21wbGV0ZSB7CiAJX191OCAgICAgc3RhdHVzOwogCV9fbGUxNiAgIGhhbmRsZTsKIAlfX3U4ICAgICByZWFzb247Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX0VWX0FVVEhfQ09NUExFVEUJCTB4MDYKIHN0cnVjdCBoY2lfZXZfYXV0aF9jb21wbGV0ZSB7CiAJX191OCAgICAgc3RhdHVzOwogCV9fbGUxNiAgIGhhbmRsZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBIQ0lfRVZfUkVNT1RFX05BTUUJCTB4MDcKIHN0cnVjdCBoY2lfZXZfcmVtb3RlX25hbWUgewogCV9fdTggICAgIHN0YXR1czsKIAliZGFkZHJfdCBiZGFkZHI7CiAJX191OCAgICAgbmFtZVsyNDhdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9FVl9FTkNSWVBUX0NIQU5HRQkJMHgwOAogc3RydWN0IGhjaV9ldl9lbmNyeXB0X2NoYW5nZSB7CiAJX191OCAgICAgc3RhdHVzOwogCV9fbGUxNiAgIGhhbmRsZTsKIAlfX3U4ICAgICBlbmNyeXB0OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9FVl9DSEFOR0VfTElOS19LRVlfQ09NUExFVEUJMHgwOQogc3RydWN0IGhjaV9ldl9jaGFuZ2VfbGlua19rZXlfY29tcGxldGUgewogCV9fdTggICAgIHN0YXR1czsKIAlfX2xlMTYgICBoYW5kbGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX0VWX1JFTU9URV9GRUFUVVJFUwkJMHgwYgogc3RydWN0IGhjaV9ldl9yZW1vdGVfZmVhdHVyZXMgewogCV9fdTggICAgIHN0YXR1czsKIAlfX2xlMTYgICBoYW5kbGU7CiAJX191OCAgICAgZmVhdHVyZXNbOF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX0VWX1JFTU9URV9WRVJTSU9OCQkweDBjCiBzdHJ1Y3QgaGNpX2V2X3JlbW90ZV92ZXJzaW9uIHsKQEAgLTY2Niw3ICs2NjksNyBAQAogCV9fdTggICAgIGxtcF92ZXI7CiAJX19sZTE2ICAgbWFudWZhY3R1cmVyOwogCV9fbGUxNiAgIGxtcF9zdWJ2ZXI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX0VWX1FPU19TRVRVUF9DT01QTEVURQkweDBkCiBzdHJ1Y3QgaGNpX3FvcyB7CkBAIC02NzUsMzggKzY3OCwzOCBAQAogCV9fdTMyICAgIHBlYWtfYmFuZHdpZHRoOwogCV9fdTMyICAgIGxhdGVuY3k7CiAJX191MzIgICAgZGVsYXlfdmFyaWF0aW9uOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogc3RydWN0IGhjaV9ldl9xb3Nfc2V0dXBfY29tcGxldGUgewogCV9fdTggICAgIHN0YXR1czsKIAlfX2xlMTYgICBoYW5kbGU7CiAJc3RydWN0ICAgaGNpX3FvcyBxb3M7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX0VWX0NNRF9DT01QTEVURQkJMHgwZQogc3RydWN0IGhjaV9ldl9jbWRfY29tcGxldGUgewogCV9fdTggICAgIG5jbWQ7CiAJX19sZTE2ICAgb3Bjb2RlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9FVl9DTURfU1RBVFVTCQkweDBmCiBzdHJ1Y3QgaGNpX2V2X2NtZF9zdGF0dXMgewogCV9fdTggICAgIHN0YXR1czsKIAlfX3U4ICAgICBuY21kOwogCV9fbGUxNiAgIG9wY29kZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBIQ0lfRVZfUk9MRV9DSEFOR0UJCTB4MTIKIHN0cnVjdCBoY2lfZXZfcm9sZV9jaGFuZ2UgewogCV9fdTggICAgIHN0YXR1czsKIAliZGFkZHJfdCBiZGFkZHI7CiAJX191OCAgICAgcm9sZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBIQ0lfRVZfTlVNX0NPTVBfUEtUUwkJMHgxMwogc3RydWN0IGhjaV9ldl9udW1fY29tcF9wa3RzIHsKIAlfX3U4ICAgICBudW1faG5kbDsKIAkvKiB2YXJpYWJsZSBsZW5ndGggcGFydCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9FVl9NT0RFX0NIQU5HRQkJMHgxNAogc3RydWN0IGhjaV9ldl9tb2RlX2NoYW5nZSB7CkBAIC03MTQsNDQgKzcxNyw0NCBAQAogCV9fbGUxNiAgIGhhbmRsZTsKIAlfX3U4ICAgICBtb2RlOwogCV9fbGUxNiAgIGludGVydmFsOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9FVl9QSU5fQ09ERV9SRVEJCTB4MTYKIHN0cnVjdCBoY2lfZXZfcGluX2NvZGVfcmVxIHsKIAliZGFkZHJfdCBiZGFkZHI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX0VWX0xJTktfS0VZX1JFUQkJMHgxNwogc3RydWN0IGhjaV9ldl9saW5rX2tleV9yZXEgewogCWJkYWRkcl90IGJkYWRkcjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBIQ0lfRVZfTElOS19LRVlfTk9USUZZCQkweDE4CiBzdHJ1Y3QgaGNpX2V2X2xpbmtfa2V5X25vdGlmeSB7CiAJYmRhZGRyX3QgYmRhZGRyOwogCV9fdTggICAgIGxpbmtfa2V5WzE2XTsKIAlfX3U4ICAgICBrZXlfdHlwZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBIQ0lfRVZfQ0xPQ0tfT0ZGU0VUCQkweDFjCiBzdHJ1Y3QgaGNpX2V2X2Nsb2NrX29mZnNldCB7CiAJX191OCAgICAgc3RhdHVzOwogCV9fbGUxNiAgIGhhbmRsZTsKIAlfX2xlMTYgICBjbG9ja19vZmZzZXQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX0VWX1BLVF9UWVBFX0NIQU5HRQkJMHgxZAogc3RydWN0IGhjaV9ldl9wa3RfdHlwZV9jaGFuZ2UgewogCV9fdTggICAgIHN0YXR1czsKIAlfX2xlMTYgICBoYW5kbGU7CiAJX19sZTE2ICAgcGt0X3R5cGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX0VWX1BTQ0FOX1JFUF9NT0RFCQkweDIwCiBzdHJ1Y3QgaGNpX2V2X3BzY2FuX3JlcF9tb2RlIHsKIAliZGFkZHJfdCBiZGFkZHI7CiAJX191OCAgICAgcHNjYW5fcmVwX21vZGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX0VWX0lOUVVJUllfUkVTVUxUX1dJVEhfUlNTSQkweDIyCiBzdHJ1Y3QgaW5xdWlyeV9pbmZvX3dpdGhfcnNzaSB7CkBAIC03NjEsNyArNzY0LDcgQEAKIAlfX3U4ICAgICBkZXZfY2xhc3NbM107CiAJX19sZTE2ICAgY2xvY2tfb2Zmc2V0OwogCV9fczggICAgIHJzc2k7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiBzdHJ1Y3QgaW5xdWlyeV9pbmZvX3dpdGhfcnNzaV9hbmRfcHNjYW5fbW9kZSB7CiAJYmRhZGRyX3QgYmRhZGRyOwogCV9fdTggICAgIHBzY2FuX3JlcF9tb2RlOwpAQCAtNzcwLDcgKzc3Myw3IEBACiAJX191OCAgICAgZGV2X2NsYXNzWzNdOwogCV9fbGUxNiAgIGNsb2NrX29mZnNldDsKIAlfX3M4ICAgICByc3NpOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9FVl9SRU1PVEVfRVhUX0ZFQVRVUkVTCTB4MjMKIHN0cnVjdCBoY2lfZXZfcmVtb3RlX2V4dF9mZWF0dXJlcyB7CkBAIC03NzksNyArNzgyLDcgQEAKIAlfX3U4ICAgICBwYWdlOwogCV9fdTggICAgIG1heF9wYWdlOwogCV9fdTggICAgIGZlYXR1cmVzWzhdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9FVl9TWU5DX0NPTk5fQ09NUExFVEUJMHgyYwogc3RydWN0IGhjaV9ldl9zeW5jX2Nvbm5fY29tcGxldGUgewpAQCAtNzkyLDcgKzc5NSw3IEBACiAJX19sZTE2ICAgcnhfcGt0X2xlbjsKIAlfX2xlMTYgICB0eF9wa3RfbGVuOwogCV9fdTggICAgIGFpcl9tb2RlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9FVl9TWU5DX0NPTk5fQ0hBTkdFRAkweDJkCiBzdHJ1Y3QgaGNpX2V2X3N5bmNfY29ubl9jaGFuZ2VkIHsKQEAgLTgwMiw3ICs4MDUsNyBAQAogCV9fdTggICAgIHJldHJhbnNfd2luZG93OwogCV9fbGUxNiAgIHJ4X3BrdF9sZW47CiAJX19sZTE2ICAgdHhfcGt0X2xlbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBIQ0lfRVZfU05JRkZfU1VCUkFURQkJMHgyZQogc3RydWN0IGhjaV9ldl9zbmlmZl9zdWJyYXRlIHsKQEAgLTgxMiw3ICs4MTUsNyBAQAogCV9fbGUxNiAgIG1heF9yeF9sYXRlbmN5OwogCV9fbGUxNiAgIG1heF9yZW1vdGVfdGltZW91dDsKIAlfX2xlMTYgICBtYXhfbG9jYWxfdGltZW91dDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBIQ0lfRVZfRVhURU5ERURfSU5RVUlSWV9SRVNVTFQJMHgyZgogc3RydWN0IGV4dGVuZGVkX2lucXVpcnlfaW5mbyB7CkBAIC04MjMsMzcgKzgyNiwzNyBAQAogCV9fbGUxNiAgIGNsb2NrX29mZnNldDsKIAlfX3M4ICAgICByc3NpOwogCV9fdTggICAgIGRhdGFbMjQwXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBIQ0lfRVZfSU9fQ0FQQV9SRVFVRVNUCQkweDMxCiBzdHJ1Y3QgaGNpX2V2X2lvX2NhcGFfcmVxdWVzdCB7CiAJYmRhZGRyX3QgYmRhZGRyOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9FVl9TSU1QTEVfUEFJUl9DT01QTEVURQkweDM2CiBzdHJ1Y3QgaGNpX2V2X3NpbXBsZV9wYWlyX2NvbXBsZXRlIHsKIAlfX3U4ICAgICBzdGF0dXM7CiAJYmRhZGRyX3QgYmRhZGRyOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9FVl9SRU1PVEVfSE9TVF9GRUFUVVJFUwkweDNkCiBzdHJ1Y3QgaGNpX2V2X3JlbW90ZV9ob3N0X2ZlYXR1cmVzIHsKIAliZGFkZHJfdCBiZGFkZHI7CiAJX191OCAgICAgZmVhdHVyZXNbOF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIEludGVybmFsIGV2ZW50cyBnZW5lcmF0ZWQgYnkgQmx1ZXRvb3RoIHN0YWNrICovCiAjZGVmaW5lIEhDSV9FVl9TVEFDS19JTlRFUk5BTAkweGZkCiBzdHJ1Y3QgaGNpX2V2X3N0YWNrX2ludGVybmFsIHsKIAlfX3UxNiAgICB0eXBlOwogCV9fdTggICAgIGRhdGFbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX0VWX1NJX0RFVklDRQkweDAxCiBzdHJ1Y3QgaGNpX2V2X3NpX2RldmljZSB7CiAJX191MTYgICAgZXZlbnQ7CiAJX191MTYgICAgZGV2X2lkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9FVl9TSV9TRUNVUklUWQkweDAyCiBzdHJ1Y3QgaGNpX2V2X3NpX3NlY3VyaXR5IHsKQEAgLTg2MSw3ICs4NjQsNyBAQAogCV9fdTE2ICAgIHByb3RvOwogCV9fdTE2ICAgIHN1YnByb3RvOwogCV9fdTggICAgIGluY29taW5nOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiAtLS0tIEhDSSBQYWNrZXQgc3RydWN0dXJlcyAtLS0tICovCiAjZGVmaW5lIEhDSV9DT01NQU5EX0hEUl9TSVpFIDMKQEAgLTg3MiwyMiArODc1LDIyIEBACiBzdHJ1Y3QgaGNpX2NvbW1hbmRfaGRyIHsKIAlfX2xlMTYJb3Bjb2RlOwkJLyogT0NGICYgT0dGICovCiAJX191OCAJcGxlbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGhjaV9ldmVudF9oZHIgewogCV9fdTgJZXZ0OwogCV9fdTgJcGxlbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGhjaV9hY2xfaGRyIHsKIAlfX2xlMTYJaGFuZGxlOwkJLyogSGFuZGxlICYgRmxhZ3MoUEIsIEJDKSAqLwogCV9fbGUxNglkbGVuOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaGNpX3Njb19oZHIgewogCV9fbGUxNgloYW5kbGU7CiAJX191OAlkbGVuOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaAppbmRleCBlNDJmNmVkLi44YjI4OTYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaApAQCAtMSw2ICsxLDYgQEAKLS8qIAorLyoKICAgIEJsdWVaIC0gQmx1ZXRvb3RoIHByb3RvY29sIHN0YWNrIGZvciBMaW51eAotICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgUXVhbGNvbW0gSW5jb3Jwb3JhdGVkCisgICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMSwgMjAxMCwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgIFdyaXR0ZW4gMjAwMCwyMDAxIGJ5IE1heGltIEtyYXNueWFuc2t5IDxtYXhrQHF1YWxjb21tLmNvbT4KIApAQCAtMTIsMTMgKzEyLDEzIEBACiAgICBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKICAgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLgogICAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQU5EIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWQotICAgQ0xBSU0sIE9SIEFOWSBTUEVDSUFMIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgT1IgQU5ZIERBTUFHRVMgCi0gICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gCi0gICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiAKKyAgIENMQUlNLCBPUiBBTlkgU1BFQ0lBTCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIE9SIEFOWSBEQU1BR0VTCisgICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAgIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCiAgICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogCi0gICBBTEwgTElBQklMSVRZLCBJTkNMVURJTkcgTElBQklMSVRZIEZPUiBJTkZSSU5HRU1FTlQgT0YgQU5ZIFBBVEVOVFMsIAotICAgQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMsIFJFTEFUSU5HIFRPIFVTRSBPRiBUSElTIAorICAgQUxMIExJQUJJTElUWSwgSU5DTFVESU5HIExJQUJJTElUWSBGT1IgSU5GUklOR0VNRU5UIE9GIEFOWSBQQVRFTlRTLAorICAgQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMsIFJFTEFUSU5HIFRPIFVTRSBPRiBUSElTCiAgICBTT0ZUV0FSRSBJUyBESVNDTEFJTUVELgogKi8KIApAQCAtNjIsNiArNjIsMTEgQEAKIAl1bnNpZ25lZCBpbnQgICAgIHNjb19udW07CiB9OwogCitzdHJ1Y3QgYmRhZGRyX2xpc3QgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwliZGFkZHJfdCBiZGFkZHI7Cit9OworI2RlZmluZSBOVU1fUkVBU1NFTUJMWSA0CiBzdHJ1Y3QgaGNpX2RldiB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXNwaW5sb2NrX3QJbG9jazsKQEAgLTExOCw3ICsxMjMsNyBAQAogCXN0cnVjdCBza19idWZmX2hlYWQJY21kX3E7CiAKIAlzdHJ1Y3Qgc2tfYnVmZgkJKnNlbnRfY21kOwotCXN0cnVjdCBza19idWZmCQkqcmVhc3NlbWJseVszXTsKKwlzdHJ1Y3Qgc2tfYnVmZgkJKnJlYXNzZW1ibHlbTlVNX1JFQVNTRU1CTFldOwogCiAJc3RydWN0IG11dGV4CQlyZXFfbG9jazsKIAl3YWl0X3F1ZXVlX2hlYWRfdAlyZXFfd2FpdF9xOwpAQCAtMTI3LDYgKzEzMiw3IEBACiAKIAlzdHJ1Y3QgaW5xdWlyeV9jYWNoZQlpbnFfY2FjaGU7CiAJc3RydWN0IGhjaV9jb25uX2hhc2gJY29ubl9oYXNoOworCXN0cnVjdCBiZGFkZHJfbGlzdAlibGFja2xpc3Q7CiAKIAlzdHJ1Y3QgaGNpX2Rldl9zdGF0cwlzdGF0OwogCkBAIC0yNTAsNiArMjU2LDcgQEAKIAlIQ0lfQ09OTl9FTkNSWVBUX1BFTkQsCiAJSENJX0NPTk5fUlNXSVRDSF9QRU5ELAogCUhDSV9DT05OX01PREVfQ0hBTkdFX1BFTkQsCisJSENJX0NPTk5fU0NPX1NFVFVQX1BFTkQsCiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgaGNpX2Nvbm5faGFzaF9pbml0KHN0cnVjdCBoY2lfZGV2ICpoZGV2KQpAQCAtMzMwLDYgKzMzNyw3IEBACiB2b2lkIGhjaV9hY2xfZGlzY29ubihzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggcmVhc29uKTsKIHZvaWQgaGNpX2FkZF9zY28oc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3UxNiBoYW5kbGUpOwogdm9pZCBoY2lfc2V0dXBfc3luYyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTE2IGhhbmRsZSk7Cit2b2lkIGhjaV9zY29fc2V0dXAoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cyk7CiAKIHN0cnVjdCBoY2lfY29ubiAqaGNpX2Nvbm5fYWRkKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBpbnQgdHlwZSwgYmRhZGRyX3QgKmRzdCk7CiBpbnQgaGNpX2Nvbm5fZGVsKHN0cnVjdCBoY2lfY29ubiAqY29ubik7CkBAIC0zODAsNyArMzg4LDcgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGhjaV9kZXZfcHV0KHN0cnVjdCBoY2lfZGV2ICpkKQoteyAKK3sKIAlfX2hjaV9kZXZfcHV0KGQpOwogCW1vZHVsZV9wdXQoZC0+b3duZXIpOwogfQpAQCAtNDI0LDEwICs0MzIsMTQgQEAKIGludCBoY2lfZ2V0X2F1dGhfaW5mbyhzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdm9pZCBfX3VzZXIgKmFyZyk7CiBpbnQgaGNpX2lucXVpcnkodm9pZCBfX3VzZXIgKmFyZyk7CiAKK3N0cnVjdCBiZGFkZHJfbGlzdCAqaGNpX2JsYWNrbGlzdF9sb29rdXAoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGJkYWRkcl90ICpiZGFkZHIpOworaW50IGhjaV9ibGFja2xpc3RfY2xlYXIoc3RydWN0IGhjaV9kZXYgKmhkZXYpOworCiB2b2lkIGhjaV9ldmVudF9wYWNrZXQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwogCiBpbnQgaGNpX3JlY3ZfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgaGNpX3JlY3ZfZnJhZ21lbnQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGludCB0eXBlLCB2b2lkICpkYXRhLCBpbnQgY291bnQpOworaW50IGhjaV9yZWN2X3N0cmVhbV9mcmFnbWVudChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdm9pZCAqZGF0YSwgaW50IGNvdW50KTsKIAogaW50IGhjaV9yZWdpc3Rlcl9zeXNmcyhzdHJ1Y3QgaGNpX2RldiAqaGRldik7CiB2b2lkIGhjaV91bnJlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBoY2lfZGV2ICpoZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9sMmNhcC5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmgKaW5kZXggN2M2OTViZi4uNjM2NzI0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmgKQEAgLTEsNiArMSw4IEBACiAvKiAKICAgIEJsdWVaIC0gQmx1ZXRvb3RoIHByb3RvY29sIHN0YWNrIGZvciBMaW51eAogICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgUXVhbGNvbW0gSW5jb3Jwb3JhdGVkCisgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBHdXN0YXZvIEYuIFBhZG92YW4gPGd1c3Rhdm9AcGFkb3Zhbi5vcmc+CisgICBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4KIAogICAgV3JpdHRlbiAyMDAwLDIwMDEgYnkgTWF4aW0gS3Jhc255YW5za3kgPG1heGtAcXVhbGNvbW0uY29tPgogCkBAIC0xMjksMzEgKzEzMSwzMSBAQAogc3RydWN0IGwyY2FwX2hkciB7CiAJX19sZTE2ICAgICBsZW47CiAJX19sZTE2ICAgICBjaWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAjZGVmaW5lIEwyQ0FQX0hEUl9TSVpFCQk0CiAKIHN0cnVjdCBsMmNhcF9jbWRfaGRyIHsKIAlfX3U4ICAgICAgIGNvZGU7CiAJX191OCAgICAgICBpZGVudDsKIAlfX2xlMTYgICAgIGxlbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKICNkZWZpbmUgTDJDQVBfQ01EX0hEUl9TSVpFCTQKIAogc3RydWN0IGwyY2FwX2NtZF9yZWogewogCV9fbGUxNiAgICAgcmVhc29uOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbDJjYXBfY29ubl9yZXEgewogCV9fbGUxNiAgICAgcHNtOwogCV9fbGUxNiAgICAgc2NpZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGwyY2FwX2Nvbm5fcnNwIHsKIAlfX2xlMTYgICAgIGRjaWQ7CiAJX19sZTE2ICAgICBzY2lkOwogCV9fbGUxNiAgICAgcmVzdWx0OwogCV9fbGUxNiAgICAgc3RhdHVzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKiBjaGFubmVsIGluZGVudGlmaWVyICovCiAjZGVmaW5lIEwyQ0FQX0NJRF9TSUdOQUxJTkcJMHgwMDAxCkBAIC0xNzcsMTQgKzE3OSwxNCBAQAogCV9fbGUxNiAgICAgZGNpZDsKIAlfX2xlMTYgICAgIGZsYWdzOwogCV9fdTggICAgICAgZGF0YVswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGwyY2FwX2NvbmZfcnNwIHsKIAlfX2xlMTYgICAgIHNjaWQ7CiAJX19sZTE2ICAgICBmbGFnczsKIAlfX2xlMTYgICAgIHJlc3VsdDsKIAlfX3U4ICAgICAgIGRhdGFbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgTDJDQVBfQ09ORl9TVUNDRVNTCTB4MDAwMAogI2RlZmluZSBMMkNBUF9DT05GX1VOQUNDRVBUCTB4MDAwMQpAQCAtMTk1LDcgKzE5Nyw3IEBACiAJX191OCAgICAgICB0eXBlOwogCV9fdTggICAgICAgbGVuOwogCV9fdTggICAgICAgdmFsWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogI2RlZmluZSBMMkNBUF9DT05GX09QVF9TSVpFCTIKIAogI2RlZmluZSBMMkNBUF9DT05GX0hJTlQJCTB4ODAKQEAgLTIxNiw3ICsyMTgsNyBAQAogCV9fbGUxNiAgICAgcmV0cmFuc190aW1lb3V0OwogCV9fbGUxNiAgICAgbW9uaXRvcl90aW1lb3V0OwogCV9fbGUxNiAgICAgbWF4X3BkdV9zaXplOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEwyQ0FQX01PREVfQkFTSUMJMHgwMAogI2RlZmluZSBMMkNBUF9NT0RFX1JFVFJBTlMJMHgwMQpAQCAtMjI3LDIyICsyMjksMjIgQEAKIHN0cnVjdCBsMmNhcF9kaXNjb25uX3JlcSB7CiAJX19sZTE2ICAgICBkY2lkOwogCV9fbGUxNiAgICAgc2NpZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGwyY2FwX2Rpc2Nvbm5fcnNwIHsKIAlfX2xlMTYgICAgIGRjaWQ7CiAJX19sZTE2ICAgICBzY2lkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbDJjYXBfaW5mb19yZXEgewogCV9fbGUxNiAgICAgIHR5cGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBsMmNhcF9pbmZvX3JzcCB7CiAJX19sZTE2ICAgICAgdHlwZTsKIAlfX2xlMTYgICAgICByZXN1bHQ7CiAJX191OCAgICAgICAgZGF0YVswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogaW5mbyB0eXBlICovCiAjZGVmaW5lIEwyQ0FQX0lUX0NMX01UVSAgICAgMHgwMDAxCkBAIC0yODcsNiArMjg5LDExIEBACiAJc3RydWN0IGwyY2FwX2NoYW5fbGlzdCBjaGFuX2xpc3Q7CiB9OwogCitzdHJ1Y3Qgc29ja19kZWxfbGlzdCB7CisJc3RydWN0IHNvY2sgKnNrOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKICNkZWZpbmUgTDJDQVBfSU5GT19DTF9NVFVfUkVRX1NFTlQJMHgwMQogI2RlZmluZSBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfU0VOVAkweDA0CiAjZGVmaW5lIEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9ET05FCTB4MDgKQEAgLTM1Myw3ICszNjAsNiBAQAogCiAJX19sZTE2CQlzcG9ydDsKIAotCXNwaW5sb2NrX3QJCXNlbmRfbG9jazsKIAlzdHJ1Y3QgdGltZXJfbGlzdAlyZXRyYW5zX3RpbWVyOwogCXN0cnVjdCB0aW1lcl9saXN0CW1vbml0b3JfdGltZXI7CiAJc3RydWN0IHRpbWVyX2xpc3QJYWNrX3RpbWVyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL3JmY29tbS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL3JmY29tbS5oCmluZGV4IDkyMWQ3YjMuLmExNDA4NDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9yZmNvbW0uaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvcmZjb21tLmgKQEAgLTEwNiwxOSArMTA2LDE5IEBACiAJdTggYWRkcjsKIAl1OCBjdHJsOwogCXU4IGxlbjsgICAgLy8gQWN0dWFsIHNpemUgY2FuIGJlIDIgYnl0ZXMKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHJmY29tbV9jbWQgewogCXU4IGFkZHI7CiAJdTggY3RybDsKIAl1OCBsZW47CiAJdTggZmNzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgcmZjb21tX21jYyB7CiAJdTggdHlwZTsKIAl1OCBsZW47Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCByZmNvbW1fcG4gewogCXU4ICBkbGNpOwpAQCAtMTI4LDcgKzEyOCw3IEBACiAJX19sZTE2IG10dTsKIAl1OCAgbWF4X3JldHJhbnM7CiAJdTggIGNyZWRpdHM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCByZmNvbW1fcnBuIHsKIAl1OCAgZGxjaTsKQEAgLTEzOCwxNyArMTM4LDE3IEBACiAJdTggIHhvbl9jaGFyOwogCXU4ICB4b2ZmX2NoYXI7CiAJX19sZTE2IHBhcmFtX21hc2s7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCByZmNvbW1fcmxzIHsKIAl1OCAgZGxjaTsKIAl1OCAgc3RhdHVzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgcmZjb21tX21zYyB7CiAJdTggIGRsY2k7CiAJdTggIHYyNF9zaWc7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIC0tLS0gQ29yZSBzdHJ1Y3R1cmVzLCBmbGFncyBldGMgLS0tLSAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jYWlmL2NhaWZfZGV2LmggYi9pbmNsdWRlL25ldC9jYWlmL2NhaWZfZGV2LmgKaW5kZXggMzE4YWI5NC4uNmRhNTczYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2FpZi9jYWlmX2Rldi5oCisrKyBiL2luY2x1ZGUvbmV0L2NhaWYvY2FpZl9kZXYuaApAQCAtNTAsNiArNTAsOSBAQAogICogQGNsaWVudF9sYXllcjoJVXNlciBpbXBsZW1lbnRhdGlvbiBvZiBjbGllbnQgbGF5ZXIuIFRoaXMgbGF5ZXIKICAqCQkJTVVTVCBoYXZlIHJlY2VpdmUgYW5kIGNvbnRyb2wgY2FsbGJhY2sgZnVuY3Rpb25zCiAgKgkJCWltcGxlbWVudGVkLgorICogQGlmaW5kZXg6CQlMaW5rIGxheWVyIGludGVyZmFjZSBpbmRleCB1c2VkIGZvciB0aGlzIGNvbm5lY3Rpb24uCisgKiBAaGVhZHJvb206CQlIZWFkIHJvb20gbmVlZGVkIGJ5IENBSUYgcHJvdG9jb2wuCisgKiBAdGFpbHJvb206CQlUYWlsIHJvb20gbmVlZGVkIGJ5IENBSUYgcHJvdG9jb2wuCiAgKgogICogVGhpcyBmdW5jdGlvbiBjb25uZWN0cyBhIENBSUYgY2hhbm5lbC4gVGhlIENsaWVudCBtdXN0IGltcGxlbWVudAogICogdGhlIHN0cnVjdCBjZmxheWVyLiBUaGlzIGxheWVyIHJlcHJlc2VudHMgdGhlIENsaWVudCBsYXllciBhbmQgaG9sZHMKQEAgLTU5LDggKzYyLDkgQEAKICAqIEUuZy4gQ0FJRiBTb2NrZXQgd2lsbCBjYWxsIHRoaXMgZnVuY3Rpb24gZm9yIGVhY2ggc29ja2V0IGl0IGNvbm5lY3RzCiAgKiBhbmQgaGF2ZSBvbmUgY2xpZW50X2xheWVyIGluc3RhbmNlIGZvciBlYWNoIHNvY2tldC4KICAqLwotaW50IGNhaWZfY29ubmVjdF9jbGllbnQoc3RydWN0IGNhaWZfY29ubmVjdF9yZXF1ZXN0ICpjb25maWcsCi0JCQkgICBzdHJ1Y3QgY2ZsYXllciAqY2xpZW50X2xheWVyKTsKK2ludCBjYWlmX2Nvbm5lY3RfY2xpZW50KHN0cnVjdCBjYWlmX2Nvbm5lY3RfcmVxdWVzdCAqY29ubl9yZXEsCisJCQlzdHJ1Y3QgY2ZsYXllciAqY2xpZW50X2xheWVyLCBpbnQgKmlmaW5kZXgsCisJCQlpbnQgKmhlYWRyb29tLCBpbnQgKnRhaWxyb29tKTsKIAogLyoqCiAgKiBjYWlmX2Rpc2Nvbm5lY3RfY2xpZW50IC0gRGlzY29ubmVjdHMgYSBjbGllbnQgZnJvbSB0aGUgQ0FJRiBzdGFjay4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NhaWYvY2FpZl9sYXllci5oIGIvaW5jbHVkZS9uZXQvY2FpZi9jYWlmX2xheWVyLmgKaW5kZXggMjVjNDcyZi4uYzhiMDdhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2FpZi9jYWlmX2xheWVyLmgKKysrIGIvaW5jbHVkZS9uZXQvY2FpZi9jYWlmX2xheWVyLmgKQEAgLTE1LDE0ICsxNSw4IEBACiBzdHJ1Y3QgY2FpZl9wYXlsb2FkX2luZm87CiBzdHJ1Y3QgY2FpZl9wYWNrZXRfZnVuY3M7CiAKLSNkZWZpbmUgQ0FJRl9NQVhfRlJBTUVTSVpFIDQwOTYKLSNkZWZpbmUgQ0FJRl9NQVhfUEFZTE9BRF9TSVpFICg0MDk2IC0gNjQpCi0jZGVmaW5lIENBSUZfTkVFREVEX0hFQURST09NICgxMCkKLSNkZWZpbmUgQ0FJRl9ORUVERURfVEFJTFJPT00gKDIpCiAKICNkZWZpbmUgQ0FJRl9MQVlFUl9OQU1FX1NaIDE2Ci0jZGVmaW5lIENBSUZfU1VDQ0VTUwkxCi0jZGVmaW5lIENBSUZfRkFJTFVSRQkwCiAKIC8qKgogICogY2FpZl9hc3NlcnQoKSAtIEFzc2VydCBmdW5jdGlvbiBmb3IgQ0FJRi4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NhaWYvY2FpZl9zcGkuaCBiL2luY2x1ZGUvbmV0L2NhaWYvY2FpZl9zcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTQ1NzBkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvY2FpZi9jYWlmX3NwaS5oCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSBTVC1Fcmljc3NvbiBBQiAyMDEwCisgKiBBdXRob3I6CURhbmllbCBNYXJ0ZW5zc29uIC8gRGFuaWVsLk1hcnRlbnNzb25Ac3Rlcmljc3Nvbi5jb20KKyAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHZlcnNpb24gMgorICovCisKKyNpZm5kZWYgQ0FJRl9TUElfSF8KKyNkZWZpbmUgQ0FJRl9TUElfSF8KKworI2luY2x1ZGUgPG5ldC9jYWlmL2NhaWZfZGV2aWNlLmg+CisKKyNkZWZpbmUgU1BJX0NNRF9XUgkJCTB4MDAKKyNkZWZpbmUgU1BJX0NNRF9SRAkJCTB4MDEKKyNkZWZpbmUgU1BJX0NNRF9FT1QJCQkweDAyCisjZGVmaW5lIFNQSV9DTURfSU5ECQkJMHgwNAorCisjZGVmaW5lIFNQSV9ETUFfQlVGX0xFTgkJCTgxOTIKKworI2RlZmluZSBXTF9TWgkJCQkyCS8qIDE2IGJpdHMuICovCisjZGVmaW5lIFNQSV9DTURfU1oJCQk0CS8qIDMyIGJpdHMuICovCisjZGVmaW5lIFNQSV9JTkRfU1oJCQk0CS8qIDMyIGJpdHMuICovCisKKyNkZWZpbmUgU1BJX1hGRVIJCQkwCisjZGVmaW5lIFNQSV9TU19PTgkJCTEKKyNkZWZpbmUgU1BJX1NTX09GRgkJCTIKKyNkZWZpbmUgU1BJX1RFUk1JTkFURQkJCTMKKworLyogTWluaW11bSB0aW1lIGJldHdlZW4gZGlmZmVyZW50IGxldmVscyBpcyA1MCBtaWNyb3NlY29uZHMuICovCisjZGVmaW5lIE1JTl9UUkFOU0lUSU9OX1RJTUVfVVNFQwk1MAorCisvKiBEZWZpbmVzIGZvciBjYWxjdWxhdGluZyBkdXJhdGlvbiBvZiBTUEkgdHJhbnNmZXJzIGZvciBhIHBhcnRpY3VsYXIKKyAqIG51bWJlciBvZiBieXRlcy4KKyAqLworI2RlZmluZSBTUElfTUFTVEVSX0NMS19NSFoJCTEzCisjZGVmaW5lIFNQSV9YRkVSX1RJTUVfVVNFQyhieXRlcywgY2xrKSAoKChieXRlcykgKiA4KSAvIGNsaykKKworLyogTm9ybWFsbHkgdGhpcyBzaG91bGQgYmUgYWxpZ25lZCBvbiB0aGUgbW9kZW0gaW4gb3JkZXIgdG8gYmVuZWZpdCBmcm9tIGZ1bGwKKyAqIGR1cGxleCB0cmFuc2ZlcnMuIEhvd2V2ZXIgYSBzaXplIG9mIDgxODggcHJvdm9rZXMgZXJyb3JzIHdoZW4gcnVubmluZyB3aXRoCisgKiB0aGUgbW9kZW0uIFRoZXNlIGVycm9ycyBvY2N1ciB3aGVuIHBhY2tldCBzaXplcyBhcHByb2FjaGVzIDQga0Igb2YgZGF0YS4KKyAqLworI2RlZmluZSBDQUlGX01BWF9TUElfRlJBTUUgNDA5MgorCisvKiBNYXhpbXVtIG51bWJlciBvZiB1cGxpbmsgQ0FJRiBmcmFtZXMgdGhhdCBjYW4gcmVzaWRlIGluIHRoZSBzYW1lIFNQSSBmcmFtZS4KKyAqIFRoaXMgbnVtYmVyIHNob3VsZCBjb3JyZXNwb25kIHdpdGggdGhlIG1vZGVtIHNldHRpbmcuIFRoZSBhcHBsaWNhdGlvbiBzaWRlCisgKiBDQUlGIGFjY2VwdHMgYW55IG51bWJlciBvZiBlbWJlZGRlZCBkb3dubGluayBDQUlGIGZyYW1lcy4KKyAqLworI2RlZmluZSBDQUlGX01BWF9TUElfUEtUUyA5CisKKy8qIERlY2lkZXMgaWYgU1BJIGJ1ZmZlcnMgc2hvdWxkIGJlIHByZWZpbGxlZCB3aXRoIDB4RkYgcGF0dGVybiBmb3IgZWFzaWVyCisgKiBkZWJ1Z2dpbmcuIEJvdGggVFggYW5kIFJYIGJ1ZmZlcnMgd2lsbCBiZSBmaWxsZWQgYmVmb3JlIHRoZSB0cmFuc2Zlci4KKyAqLworI2RlZmluZSBDRlNQSV9EQkdfUFJFRklMTAkJMAorCisvKiBTdHJ1Y3R1cmUgZGVzY3JpYmluZyBhIFNQSSB0cmFuc2Zlci4gKi8KK3N0cnVjdCBjZnNwaV94ZmVyIHsKKwl1MTYgdHhfZG1hX2xlbjsKKwl1MTYgcnhfZG1hX2xlbjsKKwl2b2lkICp2YV90eDsKKwlkbWFfYWRkcl90IHBhX3R4OworCXZvaWQgKnZhX3J4OworCWRtYV9hZGRyX3QgcGFfcng7Cit9OworCisvKiBTdHJ1Y3R1cmUgaW1wbGVtZW50ZWQgYnkgdGhlIFNQSSBpbnRlcmZhY2UuICovCitzdHJ1Y3QgY2ZzcGlfaWZjIHsKKwl2b2lkICgqc3NfY2IpIChib29sIGFzc2VydCwgc3RydWN0IGNmc3BpX2lmYyAqaWZjKTsKKwl2b2lkICgqeGZlcl9kb25lX2NiKSAoc3RydWN0IGNmc3BpX2lmYyAqaWZjKTsKKwl2b2lkICpwcml2OworfTsKKworLyogU3RydWN0dXJlIGltcGxlbWVudGVkIGJ5IFNQSSBjbGllbnRzLiAqLworc3RydWN0IGNmc3BpX2RldiB7CisJaW50ICgqaW5pdF94ZmVyKSAoc3RydWN0IGNmc3BpX3hmZXIgKnhmZXIsIHN0cnVjdCBjZnNwaV9kZXYgKmRldik7CisJdm9pZCAoKnNpZ194ZmVyKSAoYm9vbCB4ZmVyLCBzdHJ1Y3QgY2ZzcGlfZGV2ICpkZXYpOworCXN0cnVjdCBjZnNwaV9pZmMgKmlmYzsKKwljaGFyICpuYW1lOworCXUzMiBjbGtfbWh6OworCXZvaWQgKnByaXY7Cit9OworCisvKiBFbnVtZXJhdGlvbiBkZXNjcmliaW5nIHRoZSBDQUlGIFNQSSBzdGF0ZS4gKi8KK2VudW0gY2ZzcGlfc3RhdGUgeworCUNGU1BJX1NUQVRFX1dBSVRJTkcgPSAwLAorCUNGU1BJX1NUQVRFX0FXQUtFLAorCUNGU1BJX1NUQVRFX0ZFVENIX1BLVCwKKwlDRlNQSV9TVEFURV9HRVRfTkVYVCwKKwlDRlNQSV9TVEFURV9JTklUX1hGRVIsCisJQ0ZTUElfU1RBVEVfV0FJVF9BQ1RJVkUsCisJQ0ZTUElfU1RBVEVfU0lHX0FDVElWRSwKKwlDRlNQSV9TVEFURV9XQUlUX1hGRVJfRE9ORSwKKwlDRlNQSV9TVEFURV9YRkVSX0RPTkUsCisJQ0ZTUElfU1RBVEVfV0FJVF9JTkFDVElWRSwKKwlDRlNQSV9TVEFURV9TSUdfSU5BQ1RJVkUsCisJQ0ZTUElfU1RBVEVfREVMSVZFUl9QS1QsCisJQ0ZTUElfU1RBVEVfTUFYLAorfTsKKworLyogU3RydWN0dXJlIGltcGxlbWVudGVkIGJ5IFNQSSBwaHlzaWNhbCBpbnRlcmZhY2VzLiAqLworc3RydWN0IGNmc3BpIHsKKwlzdHJ1Y3QgY2FpZl9kZXZfY29tbW9uIGNmZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCBxaGVhZDsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGNoZWFkOworCXUxNiBjbWQ7CisJdTE2IHR4X2NwY2tfbGVuOworCXUxNiB0eF9ucGNrX2xlbjsKKwl1MTYgcnhfY3Bja19sZW47CisJdTE2IHJ4X25wY2tfbGVuOworCXN0cnVjdCBjZnNwaV9pZmMgaWZjOworCXN0cnVjdCBjZnNwaV94ZmVyIHhmZXI7CisJc3RydWN0IGNmc3BpX2RldiAqZGV2OworCXVuc2lnbmVkIGxvbmcgc3RhdGU7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlpbnQgICAgZmxvd19vZmZfc2VudDsKKwl1MzIgcWRfbG93X21hcms7CisJdTMyIHFkX2hpZ2hfbWFyazsKKwlzdHJ1Y3QgY29tcGxldGlvbiBjb21wOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CisJc3BpbmxvY2tfdCBsb2NrOworCWJvb2wgZmxvd19zdG9wOworI2lmZGVmIENPTkZJR19ERUJVR19GUworCWVudW0gY2ZzcGlfc3RhdGUgZGJnX3N0YXRlOworCXUxNiBwY21kOworCXUxNiB0eF9wcGNrX2xlbjsKKwl1MTYgcnhfcHBja19sZW47CisJc3RydWN0IGRlbnRyeSAqZGJnZnNfZGlyOworCXN0cnVjdCBkZW50cnkgKmRiZ2ZzX3N0YXRlOworCXN0cnVjdCBkZW50cnkgKmRiZ2ZzX2ZyYW1lOworI2VuZGlmCQkJCS8qIENPTkZJR19ERUJVR19GUyAqLworfTsKKworZXh0ZXJuIGludCBzcGlfZnJtX2FsaWduOworZXh0ZXJuIGludCBzcGlfdXBfaGVhZF9hbGlnbjsKK2V4dGVybiBpbnQgc3BpX3VwX3RhaWxfYWxpZ247CitleHRlcm4gaW50IHNwaV9kb3duX2hlYWRfYWxpZ247CitleHRlcm4gaW50IHNwaV9kb3duX3RhaWxfYWxpZ247CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBjZnNwaV9zcGlfZHJpdmVyOworCit2b2lkIGNmc3BpX2RiZ19zdGF0ZShzdHJ1Y3QgY2ZzcGkgKmNmc3BpLCBpbnQgc3RhdGUpOworaW50IGNmc3BpX3htaXRmcm0oc3RydWN0IGNmc3BpICpjZnNwaSwgdTggKmJ1Ziwgc2l6ZV90IGxlbik7CitpbnQgY2ZzcGlfeG1pdGxlbihzdHJ1Y3QgY2ZzcGkgKmNmc3BpKTsKK2ludCBjZnNwaV9yeGZybShzdHJ1Y3QgY2ZzcGkgKmNmc3BpLCB1OCAqYnVmLCBzaXplX3QgbGVuKTsKK2ludCBjZnNwaV9zcGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworaW50IGNmc3BpX3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKK2ludCBjZnNwaV94bWl0ZnJtKHN0cnVjdCBjZnNwaSAqY2ZzcGksIHU4ICpidWYsIHNpemVfdCBsZW4pOworaW50IGNmc3BpX3htaXRsZW4oc3RydWN0IGNmc3BpICpjZnNwaSk7CitpbnQgY2ZzcGlfcnhmcm0oc3RydWN0IGNmc3BpICpjZnNwaSwgdTggKmJ1Ziwgc2l6ZV90IGxlbik7Cit2b2lkIGNmc3BpX3hmZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKworI2VuZGlmCQkJCS8qIENBSUZfU1BJX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jYWlmL2NmY25mZy5oIGIvaW5jbHVkZS9uZXQvY2FpZi9jZmNuZmcuaAppbmRleCA5ZmMyZmMyLi5iZDY0NmZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jYWlmL2NmY25mZy5oCisrKyBiL2luY2x1ZGUvbmV0L2NhaWYvY2ZjbmZnLmgKQEAgLTcsNiArNyw3IEBACiAjaWZuZGVmIENGQ05GR19IXwogI2RlZmluZSBDRkNORkdfSF8KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPG5ldC9jYWlmL2NhaWZfbGF5ZXIuaD4KICNpbmNsdWRlIDxuZXQvY2FpZi9jZmN0cmwuaD4KIApAQCAtNzMsOCArNzQsOCBAQAogCiB2b2lkCiBjZmNuZmdfYWRkX3BoeV9sYXllcihzdHJ1Y3QgY2ZjbmZnICpjbmZnLCBlbnVtIGNmY25mZ19waHlfdHlwZSBwaHlfdHlwZSwKLQkJICAgICB2b2lkICpkZXYsIHN0cnVjdCBjZmxheWVyICpwaHlfbGF5ZXIsIHUxNiAqcGh5aWQsCi0JCSAgICAgZW51bSBjZmNuZmdfcGh5X3ByZWZlcmVuY2UgcHJlZiwKKwkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2ZsYXllciAqcGh5X2xheWVyLAorCQkgICAgIHUxNiAqcGh5aWQsIGVudW0gY2ZjbmZnX3BoeV9wcmVmZXJlbmNlIHByZWYsCiAJCSAgICAgYm9vbCBmY3MsIGJvb2wgc3R4KTsKIAogLyoqCkBAIC0xMTQsMTEgKzExNSwxOCBAQAogICogQHBhcmFtOgkJTGluayBzZXR1cCBwYXJhbWV0ZXJzLgogICogQGFkYXBfbGF5ZXI6CQlTcGVjaWZ5IHRoZSBhZGFwdGF0aW9uIGxheWVyOyB0aGUgcmVjZWl2ZSBhbmQKICAqCQkJZmxvdy1jb250cm9sIGZ1bmN0aW9ucyBNVVNUIGJlIHNldCBpbiB0aGUgc3RydWN0dXJlLgotICoKKyAqIEBpZmluZGV4OgkJTGluayBsYXllciBpbnRlcmZhY2UgaW5kZXggdXNlZCBmb3IgdGhpcyBjb25uZWN0aW9uLgorICogQHByb3RvX2hlYWQ6CQlQcm90b2NvbCBoZWFkLXNwYWNlIG5lZWRlZCBieSBDQUlGIHByb3RvY29sLAorICoJCQlleGNsdWRpbmcgbGluayBsYXllci4KKyAqIEBwcm90b190YWlsOgkJUHJvdG9jb2wgdGFpbC1zcGFjZSBuZWVkZWQgYnkgQ0FJRiBwcm90b2NvbCwKKyAqCQkJZXhjbHVkaW5nIGxpbmsgbGF5ZXIuCiAgKi8KIGludCBjZmNuZmdfYWRkX2FkYXB0YXRpb25fbGF5ZXIoc3RydWN0IGNmY25mZyAqY25mZywKIAkJCSAgICBzdHJ1Y3QgY2ZjdHJsX2xpbmtfcGFyYW0gKnBhcmFtLAotCQkJICAgIHN0cnVjdCBjZmxheWVyICphZGFwX2xheWVyKTsKKwkJCSAgICBzdHJ1Y3QgY2ZsYXllciAqYWRhcF9sYXllciwKKwkJCSAgICBpbnQgKmlmaW5kZXgsCisJCQkgICAgaW50ICpwcm90b19oZWFkLAorCQkJICAgIGludCAqcHJvdG9fdGFpbCk7CiAKIC8qKgogICogY2ZjbmZnX2dldF9waHlpZCgpIC0gR2V0IHBoeXNpY2FsIElELCBnaXZlbiB0eXBlLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2FpZi9jZnNydmwuaCBiL2luY2x1ZGUvbmV0L2NhaWYvY2ZzcnZsLmgKaW5kZXggMmRjOWViMS4uYjFmYTg3ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2FpZi9jZnNydmwuaAorKysgYi9pbmNsdWRlL25ldC9jYWlmL2Nmc3J2bC5oCkBAIC0xNiw2ICsxNiw4IEBACiAJYm9vbCBvcGVuOwogCWJvb2wgcGh5X2Zsb3dfb247CiAJYm9vbCBtb2RlbV9mbG93X29uOworCWJvb2wgc3VwcG9ydHNfZmxvd2N0cmw7CisJdm9pZCAoKnJlbGVhc2UpKHN0cnVjdCBrcmVmICopOwogCXN0cnVjdCBkZXZfaW5mbyBkZXZfaW5mbzsKIAlzdHJ1Y3Qga3JlZiByZWY7CiB9OwpAQCAtMjUsMTMgKzI3LDE1IEBACiBzdHJ1Y3QgY2ZsYXllciAqY2ZkZ21sX2NyZWF0ZSh1OCBsaW5raWQsIHN0cnVjdCBkZXZfaW5mbyAqZGV2X2luZm8pOwogc3RydWN0IGNmbGF5ZXIgKmNmdXRpbGxfY3JlYXRlKHU4IGxpbmtpZCwgc3RydWN0IGRldl9pbmZvICpkZXZfaW5mbyk7CiBzdHJ1Y3QgY2ZsYXllciAqY2Z2aWRsX2NyZWF0ZSh1OCBsaW5raWQsIHN0cnVjdCBkZXZfaW5mbyAqZGV2X2luZm8pOwotc3RydWN0IGNmbGF5ZXIgKmNmcmZtbF9jcmVhdGUodTggbGlua2lkLCBzdHJ1Y3QgZGV2X2luZm8gKmRldl9pbmZvKTsKK3N0cnVjdCBjZmxheWVyICpjZnJmbWxfY3JlYXRlKHU4IGxpbmtpZCwgc3RydWN0IGRldl9pbmZvICpkZXZfaW5mbywKKwkJCQlpbnQgbXR1X3NpemUpOwogc3RydWN0IGNmbGF5ZXIgKmNmZGJnbF9jcmVhdGUodTggbGlua2lkLCBzdHJ1Y3QgZGV2X2luZm8gKmRldl9pbmZvKTsKIGJvb2wgY2ZzcnZsX3BoeWlkX21hdGNoKHN0cnVjdCBjZmxheWVyICpsYXllciwgaW50IHBoeWlkKTsKIHZvaWQgY2ZzZXJ2bF9kZXN0cm95KHN0cnVjdCBjZmxheWVyICpsYXllcik7CiB2b2lkIGNmc3J2bF9pbml0KHN0cnVjdCBjZnNydmwgKnNlcnZpY2UsCi0JCSB1OCBjaGFubmVsX2lkLAotCQkgc3RydWN0IGRldl9pbmZvICpkZXZfaW5mbyk7CisJCQl1OCBjaGFubmVsX2lkLAorCQkJc3RydWN0IGRldl9pbmZvICpkZXZfaW5mbywKKwkJCWJvb2wgc3VwcG9ydHNfZmxvd2N0cmwpOwogYm9vbCBjZnNydmxfcmVhZHkoc3RydWN0IGNmc3J2bCAqc2VydmljZSwgaW50ICplcnIpOwogdTggY2ZzcnZsX2dldHBoeWlkKHN0cnVjdCBjZmxheWVyICpsYXllcik7CiAKQEAgLTUwLDcgKzU0LDEwIEBACiAJaWYgKGxheXIgPT0gTlVMTCkKIAkJcmV0dXJuOwogCXMgPSBjb250YWluZXJfb2YobGF5ciwgc3RydWN0IGNmc3J2bCwgbGF5ZXIpOwotCWtyZWZfcHV0KCZzLT5yZWYsIGNmc3J2bF9yZWxlYXNlKTsKKworCVdBUk5fT04oIXMtPnJlbGVhc2UpOworCWlmIChzLT5yZWxlYXNlKQorCQlrcmVmX3B1dCgmcy0+cmVmLCBzLT5yZWxlYXNlKTsKIH0KIAogI2VuZGlmCQkJCS8qIENGU1JWTF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKaW5kZXggYjQ0YTJlNS4uMmZkMDZjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaAorKysgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCkBAIC0zNyw2ICszNyw3IEBACiAgKgogICogQElFRUU4MDIxMV9CQU5EXzJHSFo6IDIuNEdIeiBJU00gYmFuZAogICogQElFRUU4MDIxMV9CQU5EXzVHSFo6IGFyb3VuZCA1R0h6IGJhbmQgKDQuOS01LjcpCisgKiBASUVFRTgwMjExX05VTV9CQU5EUzogbnVtYmVyIG9mIGRlZmluZWQgYmFuZHMKICAqLwogZW51bSBpZWVlODAyMTFfYmFuZCB7CiAJSUVFRTgwMjExX0JBTkRfMkdIWiA9IE5MODAyMTFfQkFORF8yR0haLApAQCAtODksNyArOTAsNyBAQAogICogQG1heF9wb3dlcjogbWF4aW11bSB0cmFuc21pc3Npb24gcG93ZXIgKGluIGRCbSkKICAqIEBiZWFjb25fZm91bmQ6IGhlbHBlciB0byByZWd1bGF0b3J5IGNvZGUgdG8gaW5kaWNhdGUgd2hlbiBhIGJlYWNvbgogICoJaGFzIGJlZW4gZm91bmQgb24gdGhpcyBjaGFubmVsLiBVc2UgcmVndWxhdG9yeV9oaW50X2ZvdW5kX2JlYWNvbigpCi0gKgl0byBlbmFibGUgdGhpcywgdGhpcyBpcyBpcyB1c2VmdWwgb25seSBvbiA1IEdIeiBiYW5kLgorICoJdG8gZW5hYmxlIHRoaXMsIHRoaXMgaXMgdXNlZnVsIG9ubHkgb24gNSBHSHogYmFuZC4KICAqIEBvcmlnX21hZzogaW50ZXJuYWwgdXNlCiAgKiBAb3JpZ19tcHdyOiBpbnRlcm5hbCB1c2UKICAqLwpAQCAtMTg4LDYgKzE4OSw3IEBACiAgKglpbiB0aGlzIGJhbmQuIE11c3QgYmUgc29ydGVkIHRvIGdpdmUgYSB2YWxpZCAic3VwcG9ydGVkCiAgKglyYXRlcyIgSUUsIGkuZS4gQ0NLIHJhdGVzIGZpcnN0LCB0aGVuIE9GRE0uCiAgKiBAbl9iaXRyYXRlczogTnVtYmVyIG9mIGJpdHJhdGVzIGluIEBiaXRyYXRlcworICogQGh0X2NhcDogSFQgY2FwYWJpbGl0aWVzIGluIHRoaXMgYmFuZAogICovCiBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWxzOwpAQCAtMjI1LDYgKzIyNyw3IEBACiAgKiBAc2VxOiBzZXF1ZW5jZSBjb3VudGVyIChJVi9QTikgZm9yIFRLSVAgYW5kIENDTVAga2V5cywgb25seSB1c2VkCiAgKgl3aXRoIHRoZSBnZXRfa2V5KCkgY2FsbGJhY2ssIG11c3QgYmUgaW4gbGl0dGxlIGVuZGlhbiwKICAqCWxlbmd0aCBnaXZlbiBieSBAc2VxX2xlbi4KKyAqIEBzZXFfbGVuOiBsZW5ndGggb2YgQHNlcS4KICAqLwogc3RydWN0IGtleV9wYXJhbXMgewogCXU4ICprZXk7CkBAIC0yMzcsNiArMjQwLDggQEAKIC8qKgogICogZW51bSBzdXJ2ZXlfaW5mb19mbGFncyAtIHN1cnZleSBpbmZvcm1hdGlvbiBmbGFncwogICoKKyAqIEBTVVJWRVlfSU5GT19OT0lTRV9EQk06IG5vaXNlIChpbiBkQm0pIHdhcyBmaWxsZWQgaW4KKyAqCiAgKiBVc2VkIGJ5IHRoZSBkcml2ZXIgdG8gaW5kaWNhdGUgd2hpY2ggaW5mbyBpbiAmc3RydWN0IHN1cnZleV9pbmZvCiAgKiBpdCBoYXMgZmlsbGVkIGluIGR1cmluZyB0aGUgZ2V0X3N1cnZleSgpLgogICovCkBAIC0yNDcsMTMgKzI1MiwxMyBAQAogLyoqCiAgKiBzdHJ1Y3Qgc3VydmV5X2luZm8gLSBjaGFubmVsIHN1cnZleSByZXNwb25zZQogICoKLSAqIFVzZWQgYnkgZHVtcF9zdXJ2ZXkoKSB0byByZXBvcnQgYmFjayBwZXItY2hhbm5lbCBzdXJ2ZXkgaW5mb3JtYXRpb24uCi0gKgogICogQGNoYW5uZWw6IHRoZSBjaGFubmVsIHRoaXMgc3VydmV5IHJlY29yZCByZXBvcnRzLCBtYW5kYXRvcnkKICAqIEBmaWxsZWQ6IGJpdGZsYWcgb2YgZmxhZ3MgZnJvbSAmZW51bSBzdXJ2ZXlfaW5mb19mbGFncwogICogQG5vaXNlOiBjaGFubmVsIG5vaXNlIGluIGRCbS4gVGhpcyBhbmQgYWxsIGZvbGxvd2luZyBmaWVsZHMgYXJlCiAgKiAgICAgb3B0aW9uYWwKICAqCisgKiBVc2VkIGJ5IGR1bXBfc3VydmV5KCkgdG8gcmVwb3J0IGJhY2sgcGVyLWNoYW5uZWwgc3VydmV5IGluZm9ybWF0aW9uLgorICoKICAqIFRoaXMgc3RydWN0dXJlIGNhbiBsYXRlciBiZSBleHBhbmRlZCB3aXRoIHRoaW5ncyBsaWtlCiAgKiBjaGFubmVsIGR1dHkgY3ljbGUgZXRjLgogICovCkBAIC0yODgsNyArMjkzLDcgQEAKICAqCiAgKiBAUExJTktfQUNUSU9OX0lOVkFMSUQ6IGFjdGlvbiAwIGlzIHJlc2VydmVkCiAgKiBAUExJTktfQUNUSU9OX09QRU46IHN0YXJ0IG1lc2ggcGVlciBsaW5rIGVzdGFibGlzaG1lbnQKLSAqIEBQTElOS19BQ1RJT05fQkxPQ0w6IGJsb2NrIHRyYWZmaWMgZnJvbSB0aGlzIG1lc2ggcGVlcgorICogQFBMSU5LX0FDVElPTl9CTE9DSzogYmxvY2sgdHJhZmZpYyBmcm9tIHRoaXMgbWVzaCBwZWVyCiAgKi8KIGVudW0gcGxpbmtfYWN0aW9ucyB7CiAJUExJTktfQUNUSU9OX0lOVkFMSUQsCkBAIC0zMTEsNiArMzE2LDggQEAKICAqCShiaXRtYXNrIG9mIEJJVChOTDgwMjExX1NUQV9GTEFHXy4uLikpCiAgKiBAbGlzdGVuX2ludGVydmFsOiBsaXN0ZW4gaW50ZXJ2YWwgb3IgLTEgZm9yIG5vIGNoYW5nZQogICogQGFpZDogQUlEIG9yIHplcm8gZm9yIG5vIGNoYW5nZQorICogQHBsaW5rX2FjdGlvbjogcGxpbmsgYWN0aW9uIHRvIHRha2UKKyAqIEBodF9jYXBhOiBIVCBjYXBhYmlsaXRpZXMgb2Ygc3RhdGlvbgogICovCiBzdHJ1Y3Qgc3RhdGlvbl9wYXJhbWV0ZXJzIHsKIAl1OCAqc3VwcG9ydGVkX3JhdGVzOwpAQCAtNDQ4LDEzICs0NTUsMTMgQEAKICAqIFVzZWQgYnkgdGhlIGRyaXZlciB0byBpbmRpY2F0ZSB3aGljaCBpbmZvIGluICZzdHJ1Y3QgbXBhdGhfaW5mbyBpdCBoYXMgZmlsbGVkCiAgKiBpbiBkdXJpbmcgZ2V0X3N0YXRpb24oKSBvciBkdW1wX3N0YXRpb24oKS4KICAqCi0gKiBNUEFUSF9JTkZPX0ZSQU1FX1FMRU46IEBmcmFtZV9xbGVuIGZpbGxlZAotICogTVBBVEhfSU5GT19TTjogQHNuIGZpbGxlZAotICogTVBBVEhfSU5GT19NRVRSSUM6IEBtZXRyaWMgZmlsbGVkCi0gKiBNUEFUSF9JTkZPX0VYUFRJTUU6IEBleHB0aW1lIGZpbGxlZAotICogTVBBVEhfSU5GT19ESVNDT1ZFUllfVElNRU9VVDogQGRpc2NvdmVyeV90aW1lb3V0IGZpbGxlZAotICogTVBBVEhfSU5GT19ESVNDT1ZFUllfUkVUUklFUzogQGRpc2NvdmVyeV9yZXRyaWVzIGZpbGxlZAotICogTVBBVEhfSU5GT19GTEFHUzogQGZsYWdzIGZpbGxlZAorICogQE1QQVRIX0lORk9fRlJBTUVfUUxFTjogQGZyYW1lX3FsZW4gZmlsbGVkCisgKiBATVBBVEhfSU5GT19TTjogQHNuIGZpbGxlZAorICogQE1QQVRIX0lORk9fTUVUUklDOiBAbWV0cmljIGZpbGxlZAorICogQE1QQVRIX0lORk9fRVhQVElNRTogQGV4cHRpbWUgZmlsbGVkCisgKiBATVBBVEhfSU5GT19ESVNDT1ZFUllfVElNRU9VVDogQGRpc2NvdmVyeV90aW1lb3V0IGZpbGxlZAorICogQE1QQVRIX0lORk9fRElTQ09WRVJZX1JFVFJJRVM6IEBkaXNjb3ZlcnlfcmV0cmllcyBmaWxsZWQKKyAqIEBNUEFUSF9JTkZPX0ZMQUdTOiBAZmxhZ3MgZmlsbGVkCiAgKi8KIGVudW0gbXBhdGhfaW5mb19mbGFncyB7CiAJTVBBVEhfSU5GT19GUkFNRV9RTEVOCQk9IEJJVCgwKSwKQEAgLTU4Nyw2ICs1OTQsNyBAQAogICogQGllX2xlbjogbGVuZ3RoIG9mIGllIGluIG9jdGV0cwogICogQHdpcGh5OiB0aGUgd2lwaHkgdGhpcyB3YXMgZm9yCiAgKiBAZGV2OiB0aGUgaW50ZXJmYWNlCisgKiBAYWJvcnRlZDogKGludGVybmFsKSBzY2FuIHJlcXVlc3Qgd2FzIG5vdGlmaWVkIGFzIGFib3J0ZWQKICAqLwogc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCB7CiAJc3RydWN0IGNmZzgwMjExX3NzaWQgKnNzaWRzOwpAQCAtNjIzLDYgKzYzMSw3IEBACiAgKiBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgYSBCU1MgKHdoaWNoIG1heSBhbHNvIGJlIGEgbWVzaCBuZXR3b3JrKQogICogZm9yIHVzZSBpbiBzY2FuIHJlc3VsdHMgYW5kIHNpbWlsYXIuCiAgKgorICogQGNoYW5uZWw6IGNoYW5uZWwgdGhpcyBCU1MgaXMgb24KICAqIEBic3NpZDogQlNTSUQgb2YgdGhlIEJTUwogICogQHRzZjogdGltZXN0YW1wIG9mIGxhc3QgcmVjZWl2ZWQgdXBkYXRlCiAgKiBAYmVhY29uX2ludGVydmFsOiB0aGUgYmVhY29uIGludGVydmFsIGFzIGZyb20gdGhlIGZyYW1lCkBAIC04MDEsNiArODEwLDcgQEAKICAqIEBiZWFjb25faW50ZXJ2YWw6IGJlYWNvbiBpbnRlcnZhbCB0byB1c2UKICAqIEBwcml2YWN5OiB0aGlzIGlzIGEgcHJvdGVjdGVkIG5ldHdvcmssIGtleXMgd2lsbCBiZSBjb25maWd1cmVkCiAgKglhZnRlciBqb2luaW5nCisgKiBAYmFzaWNfcmF0ZXM6IGJpdG1hcCBvZiBiYXNpYyByYXRlcyB0byB1c2Ugd2hlbiBjcmVhdGluZyB0aGUgSUJTUwogICovCiBzdHJ1Y3QgY2ZnODAyMTFfaWJzc19wYXJhbXMgewogCXU4ICpzc2lkOwpAQCAtODA5LDYgKzgxOSw3IEBACiAJdTggKmllOwogCXU4IHNzaWRfbGVuLCBpZV9sZW47CiAJdTE2IGJlYWNvbl9pbnRlcnZhbDsKKwl1MzIgYmFzaWNfcmF0ZXM7CiAJYm9vbCBjaGFubmVsX2ZpeGVkOwogCWJvb2wgcHJpdmFjeTsKIH07CkBAIC04MjYsOCArODM3LDggQEAKICAqIEBzc2lkOiBTU0lECiAgKiBAc3NpZF9sZW46IExlbmd0aCBvZiBzc2lkIGluIG9jdGV0cwogICogQGF1dGhfdHlwZTogQXV0aGVudGljYXRpb24gdHlwZSAoYWxnb3JpdGhtKQotICogQGFzc29jX2llOiBJRXMgZm9yIGFzc29jaWF0aW9uIHJlcXVlc3QKLSAqIEBhc3NvY19pZV9sZW46IExlbmd0aCBvZiBhc3NvY19pZSBpbiBvY3RldHMKKyAqIEBpZTogSUVzIGZvciBhc3NvY2lhdGlvbiByZXF1ZXN0CisgKiBAaWVfbGVuOiBMZW5ndGggb2YgYXNzb2NfaWUgaW4gb2N0ZXRzCiAgKiBAcHJpdmFjeTogaW5kaWNhdGVzIHdoZXRoZXIgcHJpdmFjeS1lbmFibGVkIEFQcyBzaG91bGQgYmUgdXNlZAogICogQGNyeXB0bzogY3J5cHRvIHNldHRpbmdzCiAgKiBAa2V5X2xlbjogbGVuZ3RoIG9mIFdFUCBrZXkgZm9yIHNoYXJlZCBrZXkgYXV0aGVudGljYXRpb24KQEAgLTg1MCwxMCArODYxLDExIEBACiAKIC8qKgogICogZW51bSB3aXBoeV9wYXJhbXNfZmxhZ3MgLSBzZXRfd2lwaHlfcGFyYW1zIGJpdGZpZWxkIHZhbHVlcwotICogV0lQSFlfUEFSQU1fUkVUUllfU0hPUlQ6IHdpcGh5LT5yZXRyeV9zaG9ydCBoYXMgY2hhbmdlZAotICogV0lQSFlfUEFSQU1fUkVUUllfTE9ORzogd2lwaHktPnJldHJ5X2xvbmcgaGFzIGNoYW5nZWQKLSAqIFdJUEhZX1BBUkFNX0ZSQUdfVEhSRVNIT0xEOiB3aXBoeS0+ZnJhZ190aHJlc2hvbGQgaGFzIGNoYW5nZWQKLSAqIFdJUEhZX1BBUkFNX1JUU19USFJFU0hPTEQ6IHdpcGh5LT5ydHNfdGhyZXNob2xkIGhhcyBjaGFuZ2VkCisgKiBAV0lQSFlfUEFSQU1fUkVUUllfU0hPUlQ6IHdpcGh5LT5yZXRyeV9zaG9ydCBoYXMgY2hhbmdlZAorICogQFdJUEhZX1BBUkFNX1JFVFJZX0xPTkc6IHdpcGh5LT5yZXRyeV9sb25nIGhhcyBjaGFuZ2VkCisgKiBAV0lQSFlfUEFSQU1fRlJBR19USFJFU0hPTEQ6IHdpcGh5LT5mcmFnX3RocmVzaG9sZCBoYXMgY2hhbmdlZAorICogQFdJUEhZX1BBUkFNX1JUU19USFJFU0hPTEQ6IHdpcGh5LT5ydHNfdGhyZXNob2xkIGhhcyBjaGFuZ2VkCisgKiBAV0lQSFlfUEFSQU1fQ09WRVJBR0VfQ0xBU1M6IGNvdmVyYWdlIGNsYXNzIGNoYW5nZWQKICAqLwogZW51bSB3aXBoeV9wYXJhbXNfZmxhZ3MgewogCVdJUEhZX1BBUkFNX1JFVFJZX1NIT1JUCQk9IDEgPDwgMCwKQEAgLTg2MywxOSArODc1LDYgQEAKIAlXSVBIWV9QQVJBTV9DT1ZFUkFHRV9DTEFTUwk9IDEgPDwgNCwKIH07CiAKLS8qKgotICogZW51bSB0eF9wb3dlcl9zZXR0aW5nIC0gVFggcG93ZXIgYWRqdXN0bWVudAotICoKLSAqIEBUWF9QT1dFUl9BVVRPTUFUSUM6IHRoZSBkYm0gcGFyYW1ldGVyIGlzIGlnbm9yZWQKLSAqIEBUWF9QT1dFUl9MSU1JVEVEOiBsaW1pdCBUWCBwb3dlciBieSB0aGUgZGJtIHBhcmFtZXRlcgotICogQFRYX1BPV0VSX0ZJWEVEOiBmaXggVFggcG93ZXIgdG8gdGhlIGRibSBwYXJhbWV0ZXIKLSAqLwotZW51bSB0eF9wb3dlcl9zZXR0aW5nIHsKLQlUWF9QT1dFUl9BVVRPTUFUSUMsCi0JVFhfUE9XRVJfTElNSVRFRCwKLQlUWF9QT1dFUl9GSVhFRCwKLX07Ci0KIC8qCiAgKiBjZmc4MDIxMV9iaXRyYXRlX21hc2sgLSBtYXNrcyBmb3IgYml0cmF0ZSBjb250cm9sCiAgKi8KQEAgLTk0OSwxMCArOTQ4LDE2IEBACiAgKiBAZGVsX2JlYWNvbjogUmVtb3ZlIGJlYWNvbiBjb25maWd1cmF0aW9uIGFuZCBzdG9wIHNlbmRpbmcgdGhlIGJlYWNvbi4KICAqCiAgKiBAYWRkX3N0YXRpb246IEFkZCBhIG5ldyBzdGF0aW9uLgotICoKICAqIEBkZWxfc3RhdGlvbjogUmVtb3ZlIGEgc3RhdGlvbjsgQG1hYyBtYXkgYmUgTlVMTCB0byByZW1vdmUgYWxsIHN0YXRpb25zLgotICoKICAqIEBjaGFuZ2Vfc3RhdGlvbjogTW9kaWZ5IGEgZ2l2ZW4gc3RhdGlvbi4KKyAqIEBnZXRfc3RhdGlvbjogZ2V0IHN0YXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzdGF0aW9uIGlkZW50aWZpZWQgYnkgQG1hYworICogQGR1bXBfc3RhdGlvbjogZHVtcCBzdGF0aW9uIGNhbGxiYWNrIC0tIHJlc3VtZSBkdW1wIGF0IGluZGV4IEBpZHgKKyAqCisgKiBAYWRkX21wYXRoOiBhZGQgYSBmaXhlZCBtZXNoIHBhdGgKKyAqIEBkZWxfbXBhdGg6IGRlbGV0ZSBhIGdpdmVuIG1lc2ggcGF0aAorICogQGNoYW5nZV9tcGF0aDogY2hhbmdlIGEgZ2l2ZW4gbWVzaCBwYXRoCisgKiBAZ2V0X21wYXRoOiBnZXQgYSBtZXNoIHBhdGggZm9yIHRoZSBnaXZlbiBwYXJhbWV0ZXJzCisgKiBAZHVtcF9tcGF0aDogZHVtcCBtZXNoIHBhdGggY2FsbGJhY2sgLS0gcmVzdW1lIGR1bXAgYXQgaW5kZXggQGlkeAogICoKICAqIEBnZXRfbWVzaF9wYXJhbXM6IFB1dCB0aGUgY3VycmVudCBtZXNoIHBhcmFtZXRlcnMgaW50byAqcGFyYW1zCiAgKgpAQCAtOTYwLDggKzk2NSw2IEBACiAgKglUaGUgbWFzayBpcyBhIGJpdGZpZWxkIHdoaWNoIHRlbGxzIHVzIHdoaWNoIHBhcmFtZXRlcnMgdG8KICAqCXNldCwgYW5kIHdoaWNoIHRvIGxlYXZlIGFsb25lLgogICoKLSAqIEBzZXRfbWVzaF9jZmc6IHNldCBtZXNoIHBhcmFtZXRlcnMgKGJ5IG5vdywganVzdCBtZXNoIGlkKQotICoKICAqIEBjaGFuZ2VfYnNzOiBNb2RpZnkgcGFyYW1ldGVycyBmb3IgYSBnaXZlbiBCU1MuCiAgKgogICogQHNldF90eHFfcGFyYW1zOiBTZXQgVFggcXVldWUgcGFyYW1ldGVycwpAQCAtMTAwMiw2ICsxMDA1LDggQEAKICAqIEBnZXRfdHhfcG93ZXI6IHN0b3JlIHRoZSBjdXJyZW50IFRYIHBvd2VyIGludG8gdGhlIGRibSB2YXJpYWJsZTsKICAqCXJldHVybiAwIGlmIHN1Y2Nlc3NmdWwKICAqCisgKiBAc2V0X3dkc19wZWVyOiBzZXQgdGhlIFdEUyBwZWVyIGZvciBhIFdEUyBpbnRlcmZhY2UKKyAqCiAgKiBAcmZraWxsX3BvbGw6IHBvbGxzIHRoZSBodyByZmtpbGwgbGluZSwgdXNlIGNmZzgwMjExIHJlcG9ydGluZwogICoJZnVuY3Rpb25zIHRvIGFkanVzdCByZmtpbGwgaHcgc3RhdGUKICAqCkBAIC0xMDE5LDYgKzEwMjQsOCBAQAogICoKICAqIEB0ZXN0bW9kZV9jbWQ6IHJ1biBhIHRlc3QgbW9kZSBjb21tYW5kCiAgKgorICogQHNldF9iaXRyYXRlX21hc2s6IHNldCB0aGUgYml0cmF0ZSBtYXNrIGNvbmZpZ3VyYXRpb24KKyAqCiAgKiBAc2V0X3Bta3NhOiBDYWNoZSBhIFBNS0lEIGZvciBhIEJTU0lELiBUaGlzIGlzIG1vc3RseSB1c2VmdWwgZm9yIGZ1bGxtYWMKICAqCWRldmljZXMgcnVubmluZyBmaXJtd2FyZXMgY2FwYWJsZSBvZiBnZW5lcmF0aW5nIHRoZSAocmUpIGFzc29jaWF0aW9uCiAgKglSU04gSUUuIEl0IGFsbG93cyBmb3IgZmFzdGVyIHJvYW1pbmcgYmV0d2VlbiBXUEEyIEJTU0lEcy4KQEAgLTExMjksNyArMTEzNiw3IEBACiAJaW50CSgqc2V0X3dpcGh5X3BhcmFtcykoc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIGNoYW5nZWQpOwogCiAJaW50CSgqc2V0X3R4X3Bvd2VyKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAotCQkJCWVudW0gdHhfcG93ZXJfc2V0dGluZyB0eXBlLCBpbnQgZGJtKTsKKwkJCQllbnVtIG5sODAyMTFfdHhfcG93ZXJfc2V0dGluZyB0eXBlLCBpbnQgbWJtKTsKIAlpbnQJKCpnZXRfdHhfcG93ZXIpKHN0cnVjdCB3aXBoeSAqd2lwaHksIGludCAqZGJtKTsKIAogCWludAkoKnNldF93ZHNfcGVlcikoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTExNjgsNiArMTE3NSw3IEBACiAJaW50CSgqYWN0aW9uKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCiAJCQkgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAorCQkJICBib29sIGNoYW5uZWxfdHlwZV92YWxpZCwKIAkJCSAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbiwgdTY0ICpjb29raWUpOwogCiAJaW50CSgqc2V0X3Bvd2VyX21nbXQpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0xMjMwLDggKzEyMzgsNiBAQAogCiAvKioKICAqIHN0cnVjdCB3aXBoeSAtIHdpcmVsZXNzIGhhcmR3YXJlIGRlc2NyaXB0aW9uCi0gKiBAaWR4OiB0aGUgd2lwaHkgaW5kZXggYXNzaWduZWQgdG8gdGhpcyBpdGVtCi0gKiBAY2xhc3NfZGV2OiB0aGUgY2xhc3MgZGV2aWNlIHJlcHJlc2VudGluZyAvc3lzL2NsYXNzL2llZWU4MDIxMS88d2lwaHktbmFtZT4KICAqIEByZWdfbm90aWZpZXI6IHRoZSBkcml2ZXIncyByZWd1bGF0b3J5IG5vdGlmaWNhdGlvbiBjYWxsYmFjawogICogQHJlZ2Q6IHRoZSBkcml2ZXIncyByZWd1bGF0b3J5IGRvbWFpbiwgaWYgb25lIHdhcyByZXF1ZXN0ZWQgdmlhCiAgKiAJdGhlIHJlZ3VsYXRvcnlfaGludCgpIEFQSS4gVGhpcyBjYW4gYmUgdXNlZCBieSB0aGUgZHJpdmVyCkBAIC0xMjQ1LDcgKzEyNTEsNyBAQAogICogQGZyYWdfdGhyZXNob2xkOiBGcmFnbWVudGF0aW9uIHRocmVzaG9sZCAoZG90MTFGcmFnbWVudGF0aW9uVGhyZXNob2xkKTsKICAqCS0xID0gZnJhZ21lbnRhdGlvbiBkaXNhYmxlZCwgb25seSBvZGQgdmFsdWVzID49IDI1NiB1c2VkCiAgKiBAcnRzX3RocmVzaG9sZDogUlRTIHRocmVzaG9sZCAoZG90MTFSVFNUaHJlc2hvbGQpOyAtMSA9IFJUUy9DVFMgZGlzYWJsZWQKLSAqIEBuZXQ6IHRoZSBuZXR3b3JrIG5hbWVzcGFjZSB0aGlzIHdpcGh5IGN1cnJlbnRseSBsaXZlcyBpbgorICogQF9uZXQ6IHRoZSBuZXR3b3JrIG5hbWVzcGFjZSB0aGlzIHdpcGh5IGN1cnJlbnRseSBsaXZlcyBpbgogICogQHBlcm1fYWRkcjogcGVybWFuZW50IE1BQyBhZGRyZXNzIG9mIHRoaXMgZGV2aWNlCiAgKiBAYWRkcl9tYXNrOiBJZiB0aGUgZGV2aWNlIHN1cHBvcnRzIG11bHRpcGxlIE1BQyBhZGRyZXNzZXMgYnkgbWFza2luZywKICAqCXNldCB0aGlzIHRvIGEgbWFzayB3aXRoIHZhcmlhYmxlIGJpdHMgc2V0IHRvIDEsIGUuZy4gaWYgdGhlIGxhc3QKQEAgLTEyNTgsNiArMTI2NCwyOCBAQAogICoJYnkgZGVmYXVsdCBmb3IgcGVybV9hZGRyLiBJbiB0aGlzIGNhc2UsIHRoZSBtYXNrIHNob3VsZCBiZSBzZXQgdG8KICAqCWFsbC16ZXJvZXMuIEluIHRoaXMgY2FzZSBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGRldmljZSBjYW4gaGFuZGxlCiAgKgl0aGUgc2FtZSBudW1iZXIgb2YgYXJiaXRyYXJ5IE1BQyBhZGRyZXNzZXMuCisgKiBAZGVidWdmc2RpcjogZGVidWdmcyBkaXJlY3RvcnkgdXNlZCBmb3IgdGhpcyB3aXBoeSwgd2lsbCBiZSByZW5hbWVkCisgKglhdXRvbWF0aWNhbGx5IG9uIHdpcGh5IHJlbmFtZXMKKyAqIEBkZXY6ICh2aXJ0dWFsKSBzdHJ1Y3QgZGV2aWNlIGZvciB0aGlzIHdpcGh5CisgKiBAd2V4dDogd2lyZWxlc3MgZXh0ZW5zaW9uIGhhbmRsZXJzCisgKiBAcHJpdjogZHJpdmVyIHByaXZhdGUgZGF0YSAoc2l6ZWQgYWNjb3JkaW5nIHRvIHdpcGh5X25ldygpIHBhcmFtZXRlcikKKyAqIEBpbnRlcmZhY2VfbW9kZXM6IGJpdG1hc2sgb2YgaW50ZXJmYWNlcyB0eXBlcyB2YWxpZCBmb3IgdGhpcyB3aXBoeSwKKyAqCW11c3QgYmUgc2V0IGJ5IGRyaXZlcgorICogQGZsYWdzOiB3aXBoeSBmbGFncywgc2VlICZlbnVtIHdpcGh5X2ZsYWdzCisgKiBAYnNzX3ByaXZfc2l6ZTogZWFjaCBCU1Mgc3RydWN0IGhhcyBwcml2YXRlIGRhdGEgYWxsb2NhdGVkIHdpdGggaXQsCisgKgl0aGlzIHZhcmlhYmxlIGRldGVybWluZXMgaXRzIHNpemUKKyAqIEBtYXhfc2Nhbl9zc2lkczogbWF4aW11bSBudW1iZXIgb2YgU1NJRHMgdGhlIGRldmljZSBjYW4gc2NhbiBmb3IgaW4KKyAqCWFueSBnaXZlbiBzY2FuCisgKiBAbWF4X3NjYW5faWVfbGVuOiBtYXhpbXVtIGxlbmd0aCBvZiB1c2VyLWNvbnRyb2xsZWQgSUVzIGRldmljZSBjYW4KKyAqCWFkZCB0byBwcm9iZSByZXF1ZXN0IGZyYW1lcyB0cmFuc21pdHRlZCBkdXJpbmcgYSBzY2FuLCBtdXN0IG5vdAorICoJaW5jbHVkZSBmaXhlZCBJRXMgbGlrZSBzdXBwb3J0ZWQgcmF0ZXMKKyAqIEBjb3ZlcmFnZV9jbGFzczogY3VycmVudCBjb3ZlcmFnZSBjbGFzcworICogQGZ3X3ZlcnNpb246IGZpcm13YXJlIHZlcnNpb24gZm9yIGV0aHRvb2wgcmVwb3J0aW5nCisgKiBAaHdfdmVyc2lvbjogaGFyZHdhcmUgdmVyc2lvbiBmb3IgZXRodG9vbCByZXBvcnRpbmcKKyAqIEBtYXhfbnVtX3Bta2lkczogbWF4aW11bSBudW1iZXIgb2YgUE1LSURzIHN1cHBvcnRlZCBieSBkZXZpY2UKKyAqIEBwcml2aWQ6IGEgcG9pbnRlciB0aGF0IGRyaXZlcnMgY2FuIHVzZSB0byBpZGVudGlmeSBpZiBhbiBhcmJpdHJhcnkKKyAqCXdpcGh5IGlzIHRoZWlycywgZS5nLiBpbiBnbG9iYWwgbm90aWZpZXJzCisgKiBAYmFuZHM6IGluZm9ybWF0aW9uIGFib3V0IGJhbmRzL2NoYW5uZWxzIHN1cHBvcnRlZCBieSB0aGlzIGRldmljZQogICovCiBzdHJ1Y3Qgd2lwaHkgewogCS8qIGFzc2lnbiB0aGVzZSBmaWVsZHMgYmVmb3JlIHlvdSByZWdpc3RlciB0aGUgd2lwaHkgKi8KQEAgLTEzMzAsMjYgKzEzNTgsMTUgQEAKIAljaGFyIHByaXZbMF0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oTkVUREVWX0FMSUdOKSkpOwogfTsKIAotI2lmZGVmIENPTkZJR19ORVRfTlMKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldCAqd2lwaHlfbmV0KHN0cnVjdCB3aXBoeSAqd2lwaHkpCiB7Ci0JcmV0dXJuIHdpcGh5LT5fbmV0OworCXJldHVybiByZWFkX3BuZXQoJndpcGh5LT5fbmV0KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHdpcGh5X25ldF9zZXQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldCAqbmV0KQogewotCXdpcGh5LT5fbmV0ID0gbmV0OworCXdyaXRlX3BuZXQoJndpcGh5LT5fbmV0LCBuZXQpOwogfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldCAqd2lwaHlfbmV0KHN0cnVjdCB3aXBoeSAqd2lwaHkpCi17Ci0JcmV0dXJuICZpbml0X25ldDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdpcGh5X25ldF9zZXQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldCAqbmV0KQotewotfQotI2VuZGlmCiAKIC8qKgogICogd2lwaHlfcHJpdiAtIHJldHVybiBwcml2IGZyb20gd2lwaHkKQEAgLTEzOTksNyArMTQxNiw3IEBACiAgKgogICogQHdpcGh5OiBUaGUgd2lwaHkgd2hvc2UgbmFtZSB0byByZXR1cm4KICAqLwotc3RhdGljIGlubGluZSBjb25zdCBjaGFyICp3aXBoeV9uYW1lKHN0cnVjdCB3aXBoeSAqd2lwaHkpCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKndpcGh5X25hbWUoY29uc3Qgc3RydWN0IHdpcGh5ICp3aXBoeSkKIHsKIAlyZXR1cm4gZGV2X25hbWUoJndpcGh5LT5kZXYpOwogfQpAQCAtMTQ3MSwxMyArMTQ4OCwxNCBAQAogICogQHNzaWQ6IChwcml2YXRlKSBVc2VkIGJ5IHRoZSBpbnRlcm5hbCBjb25maWd1cmF0aW9uIGNvZGUKICAqIEBzc2lkX2xlbjogKHByaXZhdGUpIFVzZWQgYnkgdGhlIGludGVybmFsIGNvbmZpZ3VyYXRpb24gY29kZQogICogQHdleHQ6IChwcml2YXRlKSBVc2VkIGJ5IHRoZSBpbnRlcm5hbCB3aXJlbGVzcyBleHRlbnNpb25zIGNvbXBhdCBjb2RlCi0gKiBAd2V4dF9ic3NpZDogKHByaXZhdGUpIFVzZWQgYnkgdGhlIGludGVybmFsIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0IGNvZGUKICAqIEB1c2VfNGFkZHI6IGluZGljYXRlcyA0YWRkciBtb2RlIGlzIHVzZWQgb24gdGhpcyBpbnRlcmZhY2UsIG11c3QgYmUKICAqCXNldCBieSBkcml2ZXIgKGlmIHN1cHBvcnRlZCkgb24gYWRkX2ludGVyZmFjZSBCRUZPUkUgcmVnaXN0ZXJpbmcgdGhlCiAgKgluZXRkZXYgYW5kIG1heSBvdGhlcndpc2UgYmUgdXNlZCBieSBkcml2ZXIgcmVhZC1vbmx5LCB3aWxsIGJlIHVwZGF0ZQogICoJYnkgY2ZnODAyMTEgb24gY2hhbmdlX2ludGVyZmFjZQogICogQGFjdGlvbl9yZWdpc3RyYXRpb25zOiBsaXN0IG9mIHJlZ2lzdHJhdGlvbnMgZm9yIGFjdGlvbiBmcmFtZXMKICAqIEBhY3Rpb25fcmVnaXN0cmF0aW9uc19sb2NrOiBsb2NrIGZvciB0aGUgbGlzdAorICogQG10eDogbXV0ZXggdXNlZCB0byBsb2NrIGRhdGEgaW4gdGhpcyBzdHJ1Y3QKKyAqIEBjbGVhbnVwX3dvcms6IHdvcmsgc3RydWN0IHVzZWQgZm9yIGNsZWFudXAgdGhhdCBjYW4ndCBiZSBkb25lIGRpcmVjdGx5CiAgKi8KIHN0cnVjdCB3aXJlbGVzc19kZXYgewogCXN0cnVjdCB3aXBoeSAqd2lwaHk7CkBAIC0xNTUxLDExICsxNTY5LDEzIEBACiAKIC8qKgogICogaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5IC0gY29udmVydCBjaGFubmVsIG51bWJlciB0byBmcmVxdWVuY3kKKyAqIEBjaGFuOiBjaGFubmVsIG51bWJlcgogICovCiBleHRlcm4gaW50IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShpbnQgY2hhbik7CiAKIC8qKgogICogaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsIC0gY29udmVydCBmcmVxdWVuY3kgdG8gY2hhbm5lbCBudW1iZXIKKyAqIEBmcmVxOiBjZW50ZXIgZnJlcXVlbmN5CiAgKi8KIGV4dGVybiBpbnQgaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGludCBmcmVxKTsKIApAQCAtMTU3MCw2ICsxNTkwLDggQEAKIAkJCQkJCQkgaW50IGZyZXEpOwogLyoqCiAgKiBpZWVlODAyMTFfZ2V0X2NoYW5uZWwgLSBnZXQgY2hhbm5lbCBzdHJ1Y3QgZnJvbSB3aXBoeSBmb3Igc3BlY2lmaWVkIGZyZXF1ZW5jeQorICogQHdpcGh5OiB0aGUgc3RydWN0IHdpcGh5IHRvIGdldCB0aGUgY2hhbm5lbCBmb3IKKyAqIEBmcmVxOiB0aGUgY2VudGVyIGZyZXF1ZW5jeSBvZiB0aGUgY2hhbm5lbAogICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqCiBpZWVlODAyMTFfZ2V0X2NoYW5uZWwoc3RydWN0IHdpcGh5ICp3aXBoeSwgaW50IGZyZXEpCkBAIC0xNjMwLDkgKzE2NTIsNiBAQAogICogQGlzX3JhZGlvdGFwX25zOiBpbmRpY2F0ZXMgd2hldGhlciB0aGUgY3VycmVudCBuYW1lc3BhY2UgaXMgdGhlIGRlZmF1bHQKICAqCXJhZGlvdGFwIG5hbWVzcGFjZSBvciBub3QKICAqCi0gKiBAb3ZlcnJpZGVzOiBvdmVycmlkZSBzdGFuZGFyZCByYWRpb3RhcCBmaWVsZHMKLSAqIEBuX292ZXJyaWRlczogbnVtYmVyIG9mIG92ZXJyaWRlcwotICoKICAqIEBfcnRoZWFkZXI6IHBvaW50ZXIgdG8gdGhlIHJhZGlvdGFwIGhlYWRlciB3ZSBhcmUgd2Fsa2luZyB0aHJvdWdoCiAgKiBAX21heF9sZW5ndGg6IGxlbmd0aCBvZiByYWRpb3RhcCBoZWFkZXIgaW4gY3B1IGJ5dGUgb3JkZXJpbmcKICAqIEBfYXJnX2luZGV4OiBuZXh0IGFyZ3VtZW50IGluZGV4CkBAIC0xOTMzLDYgKzE5NTIsMTAgQEAKIAkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQlzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsIGNoYXIgKmV4dHJhKTsKIAoraW50IGNmZzgwMjExX3dleHRfc2l3cG1rc2Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKTsKKwogLyoKICAqIGNhbGxiYWNrcyBmb3IgYXN5bmNocm9ub3VzIGNmZzgwMjExIG1ldGhvZHMsIG5vdGlmaWNhdGlvbgogICogZnVuY3Rpb25zIGFuZCBCU1MgaGFuZGxpbmcgaGVscGVycwpAQCAtMTk0OCwxMCArMTk3MSwxMiBAQAogdm9pZCBjZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxdWVzdCwgYm9vbCBhYm9ydGVkKTsKIAogLyoqCi0gKiBjZmc4MDIxMV9pbmZvcm1fYnNzIC0gaW5mb3JtIGNmZzgwMjExIG9mIGEgbmV3IEJTUworICogY2ZnODAyMTFfaW5mb3JtX2Jzc19mcmFtZSAtIGluZm9ybSBjZmc4MDIxMSBvZiBhIHJlY2VpdmVkIEJTUyBmcmFtZQogICoKICAqIEB3aXBoeTogdGhlIHdpcGh5IHJlcG9ydGluZyB0aGUgQlNTCi0gKiBAYnNzOiB0aGUgZm91bmQgQlNTCisgKiBAY2hhbm5lbDogVGhlIGNoYW5uZWwgdGhlIGZyYW1lIHdhcyByZWNlaXZlZCBvbgorICogQG1nbXQ6IHRoZSBtYW5hZ2VtZW50IGZyYW1lIChwcm9iZSByZXNwb25zZSBvciBiZWFjb24pCisgKiBAbGVuOiBsZW5ndGggb2YgdGhlIG1hbmFnZW1lbnQgZnJhbWUKICAqIEBzaWduYWw6IHRoZSBzaWduYWwgc3RyZW5ndGgsIHR5cGUgZGVwZW5kcyBvbiB0aGUgd2lwaHkncyBzaWduYWxfdHlwZQogICogQGdmcDogY29udGV4dCBmbGFncwogICoKQEAgLTE5NjQsNiArMTk4OSwyMyBAQAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4sCiAJCQkgIHMzMiBzaWduYWwsIGdmcF90IGdmcCk7CiAKKy8qKgorICogY2ZnODAyMTFfaW5mb3JtX2JzcyAtIGluZm9ybSBjZmc4MDIxMSBvZiBhIG5ldyBCU1MKKyAqCisgKiBAd2lwaHk6IHRoZSB3aXBoeSByZXBvcnRpbmcgdGhlIEJTUworICogQGNoYW5uZWw6IFRoZSBjaGFubmVsIHRoZSBmcmFtZSB3YXMgcmVjZWl2ZWQgb24KKyAqIEBic3NpZDogdGhlIEJTU0lEIG9mIHRoZSBCU1MKKyAqIEB0aW1lc3RhbXA6IHRoZSBUU0YgdGltZXN0YW1wIHNlbnQgYnkgdGhlIHBlZXIKKyAqIEBjYXBhYmlsaXR5OiB0aGUgY2FwYWJpbGl0eSBmaWVsZCBzZW50IGJ5IHRoZSBwZWVyCisgKiBAYmVhY29uX2ludGVydmFsOiB0aGUgYmVhY29uIGludGVydmFsIGFubm91bmNlZCBieSB0aGUgcGVlcgorICogQGllOiBhZGRpdGlvbmFsIElFcyBzZW50IGJ5IHRoZSBwZWVyCisgKiBAaWVsZW46IGxlbmd0aCBvZiB0aGUgYWRkaXRpb25hbCBJRXMKKyAqIEBzaWduYWw6IHRoZSBzaWduYWwgc3RyZW5ndGgsIHR5cGUgZGVwZW5kcyBvbiB0aGUgd2lwaHkncyBzaWduYWxfdHlwZQorICogQGdmcDogY29udGV4dCBmbGFncworICoKKyAqIFRoaXMgaW5mb3JtcyBjZmc4MDIxMSB0aGF0IEJTUyBpbmZvcm1hdGlvbiB3YXMgZm91bmQgYW5kCisgKiB0aGUgQlNTIHNob3VsZCBiZSB1cGRhdGVkL2FkZGVkLgorICovCiBzdHJ1Y3QgY2ZnODAyMTFfYnNzKgogY2ZnODAyMTFfaW5mb3JtX2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLApAQCAtMjM3OCw0ICsyNDIwLDY3IEBACiAJCQkgICAgICBlbnVtIG5sODAyMTFfY3FtX3Jzc2lfdGhyZXNob2xkX2V2ZW50IHJzc2lfZXZlbnQsCiAJCQkgICAgICBnZnBfdCBnZnApOwogCisjaWZkZWYgX19LRVJORUxfXworCisvKiBMb2dnaW5nLCBkZWJ1Z2dpbmcgYW5kIHRyb3VibGVzaG9vdGluZy9kaWFnbm9zdGljIGhlbHBlcnMuICovCisKKy8qIHdpcGh5X3ByaW50ayBoZWxwZXJzLCBzaW1pbGFyIHRvIGRldl9wcmludGsgKi8KKworI2RlZmluZSB3aXBoeV9wcmludGsobGV2ZWwsIHdpcGh5LCBmb3JtYXQsIGFyZ3MuLi4pCQlcCisJcHJpbnRrKGxldmVsICIlczogIiBmb3JtYXQsIHdpcGh5X25hbWUod2lwaHkpLCAjI2FyZ3MpCisjZGVmaW5lIHdpcGh5X2VtZXJnKHdpcGh5LCBmb3JtYXQsIGFyZ3MuLi4pCQkJXAorCXdpcGh5X3ByaW50ayhLRVJOX0VNRVJHLCB3aXBoeSwgZm9ybWF0LCAjI2FyZ3MpCisjZGVmaW5lIHdpcGh5X2FsZXJ0KHdpcGh5LCBmb3JtYXQsIGFyZ3MuLi4pCQkJXAorCXdpcGh5X3ByaW50ayhLRVJOX0FMRVJULCB3aXBoeSwgZm9ybWF0LCAjI2FyZ3MpCisjZGVmaW5lIHdpcGh5X2NyaXQod2lwaHksIGZvcm1hdCwgYXJncy4uLikJCQlcCisJd2lwaHlfcHJpbnRrKEtFUk5fQ1JJVCwgd2lwaHksIGZvcm1hdCwgIyNhcmdzKQorI2RlZmluZSB3aXBoeV9lcnIod2lwaHksIGZvcm1hdCwgYXJncy4uLikJCQlcCisJd2lwaHlfcHJpbnRrKEtFUk5fRVJSLCB3aXBoeSwgZm9ybWF0LCAjI2FyZ3MpCisjZGVmaW5lIHdpcGh5X3dhcm4od2lwaHksIGZvcm1hdCwgYXJncy4uLikJCQlcCisJd2lwaHlfcHJpbnRrKEtFUk5fV0FSTklORywgd2lwaHksIGZvcm1hdCwgIyNhcmdzKQorI2RlZmluZSB3aXBoeV9ub3RpY2Uod2lwaHksIGZvcm1hdCwgYXJncy4uLikJCQlcCisJd2lwaHlfcHJpbnRrKEtFUk5fTk9USUNFLCB3aXBoeSwgZm9ybWF0LCAjI2FyZ3MpCisjZGVmaW5lIHdpcGh5X2luZm8od2lwaHksIGZvcm1hdCwgYXJncy4uLikJCQlcCisJd2lwaHlfcHJpbnRrKEtFUk5fSU5GTywgd2lwaHksIGZvcm1hdCwgIyNhcmdzKQorCitpbnQgd2lwaHlfZGVidWcoY29uc3Qgc3RydWN0IHdpcGh5ICp3aXBoeSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOworCisjaWYgZGVmaW5lZChERUJVRykKKyNkZWZpbmUgd2lwaHlfZGJnKHdpcGh5LCBmb3JtYXQsIGFyZ3MuLi4pCQkJXAorCXdpcGh5X3ByaW50ayhLRVJOX0RFQlVHLCB3aXBoeSwgZm9ybWF0LCAjI2FyZ3MpCisjZWxpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0RFQlVHKQorI2RlZmluZSB3aXBoeV9kYmcod2lwaHksIGZvcm1hdCwgYXJncy4uLikJCQlcCisJZHluYW1pY19wcl9kZWJ1ZygiJXM6ICIgZm9ybWF0LAl3aXBoeV9uYW1lKHdpcGh5KSwgIyNhcmdzKQorI2Vsc2UKKyNkZWZpbmUgd2lwaHlfZGJnKHdpcGh5LCBmb3JtYXQsIGFyZ3MuLi4pCQkJCVwKKyh7CQkJCQkJCQkJXAorCWlmICgwKQkJCQkJCQkJXAorCQl3aXBoeV9wcmludGsoS0VSTl9ERUJVRywgd2lwaHksIGZvcm1hdCwgIyNhcmdzKTsJXAorCTA7CQkJCQkJCQlcCit9KQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFZFUkJPU0VfREVCVUcpCisjZGVmaW5lIHdpcGh5X3ZkYmcJd2lwaHlfZGJnCisjZWxzZQorCisjZGVmaW5lIHdpcGh5X3ZkYmcod2lwaHksIGZvcm1hdCwgYXJncy4uLikJCQkJXAorKHsJCQkJCQkJCQlcCisJaWYgKDApCQkJCQkJCQlcCisJCXdpcGh5X3ByaW50ayhLRVJOX0RFQlVHLCB3aXBoeSwgZm9ybWF0LCAjI2FyZ3MpOwlcCisJCTA7CQkJCQkJCVwKK30pCisjZW5kaWYKKworLyoKKyAqIHdpcGh5X1dBUk4oKSBhY3RzIGxpa2Ugd2lwaHlfcHJpbnRrKCksIGJ1dCB3aXRoIHRoZSBrZXkgZGlmZmVyZW5jZQorICogb2YgdXNpbmcgYSBXQVJOL1dBUk5fT04gdG8gZ2V0IHRoZSBtZXNzYWdlIG91dCwgaW5jbHVkaW5nIHRoZQorICogZmlsZS9saW5lIGluZm9ybWF0aW9uIGFuZCBhIGJhY2t0cmFjZS4KKyAqLworI2RlZmluZSB3aXBoeV9XQVJOKHdpcGh5LCBmb3JtYXQsIGFyZ3MuLi4pCQkJXAorCVdBUk4oMSwgIndpcGh5OiAlc1xuIiBmb3JtYXQsIHdpcGh5X25hbWUod2lwaHkpLCAjI2FyZ3MpOworCisjZW5kaWYKKwogI2VuZGlmIC8qIF9fTkVUX0NGRzgwMjExX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RuX2Rldi5oIGIvaW5jbHVkZS9uZXQvZG5fZGV2LmgKaW5kZXggNTExYTQ1OS4uMDkxNmJiZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZG5fZGV2LmgKKysrIGIvaW5jbHVkZS9uZXQvZG5fZGV2LmgKQEAgLTEwMSw3ICsxMDEsNyBAQAogCV9fbGUxNiBkc3Rub2RlOwogCV9fbGUxNiBzcmNub2RlOwogCV9fdTggICBmb3J3YXJkOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBkbl9sb25nX3BhY2tldCB7CiAJX191OCAgIG1zZ2ZsZzsKQEAgLTExNSw3ICsxMTUsNyBAQAogCV9fdTggICB2aXNpdF9jdDsKIAlfX3U4ICAgc19jbGFzczsKIAlfX3U4ICAgcHQ7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERSUCAtIFJvdXRpbmcgbWVzc2FnZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTMyLDcgKzEzMiw3IEBACiAJX191OCAgIG1wZDsKIAlfX3U4ICAgZGF0YWxlbjsKIAlfX3U4ICAgZGF0YVsyXTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgcnRub2RlX2hlbGxvX21lc3NhZ2UgewogCV9fdTggICBtc2dmbGc7CkBAIC0xNDQsNyArMTQ0LDcgQEAKIAlfX3U4ICAgYXJlYTsKIAlfX2xlMTYgIHRpbWVyOwogCV9fdTggICBtcGQ7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogCiBleHRlcm4gdm9pZCBkbl9kZXZfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RuX25zcC5oIGIvaW5jbHVkZS9uZXQvZG5fbnNwLmgKaW5kZXggMTdkNDNkMi4uZTQzYTI4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZG5fbnNwLmgKKysrIGIvaW5jbHVkZS9uZXQvZG5fbnNwLmgKQEAgLTc0LDE4ICs3NCwxOCBAQAogCV9fdTggICBtc2dmbGc7CiAJX19sZTE2IGRzdGFkZHI7CiAJX19sZTE2IHNyY2FkZHI7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IG5zcF9kYXRhX29wdF9tc2cgewogCV9fbGUxNiBhY2tudW07CiAJX19sZTE2IHNlZ251bTsKIAlfX2xlMTYgbHNmbGdzOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBuc3BfZGF0YV9vcHRfbXNnMSB7CiAJX19sZTE2IGFja251bTsKIAlfX2xlMTYgc2VnbnVtOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIAogLyogQWNrbm93bGVkZ21lbnQgTWVzc2FnZSAoZGF0YS9vdGhlciBkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTk0LDEzICs5NCwxMyBAQAogCV9fbGUxNiBkc3RhZGRyOwogCV9fbGUxNiBzcmNhZGRyOwogCV9fbGUxNiBhY2tudW07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogQ29ubmVjdCBBY2tub3dsZWRnbWVudCBNZXNzYWdlICovCiBzdHJ1Y3QgIG5zcF9jb25uX2Fja19tc2cgewogCV9fdTggbXNnZmxnOwogCV9fbGUxNiBkc3RhZGRyOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIAogLyogQ29ubmVjdCBJbml0aWF0ZS9SZXRyYW5zbWl0IEluaXRpYXRlL0Nvbm5lY3QgQ29uZmlybSAqLwpAQCAtMTE3LDcgKzExNyw3IEBACiAjZGVmaW5lIE5TUF9GQ19NQVNLICAgMHgwYyAgICAgICAgICAgIC8qIEZDIHR5cGUgbWFzayAgICAgICAgICovCiAJX191OCAgIGluZm87CiAJX19sZTE2IHNlZ3NpemU7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogRGlzY29ubmVjdCBJbml0aWF0ZS9EaXNjb25uZWN0IENvbmZpcm0gKi8KIHN0cnVjdCAgbnNwX2Rpc2Nvbm5faW5pdF9tc2cgewpAQCAtMTI1LDcgKzEyNSw3IEBACiAJX19sZTE2IGRzdGFkZHI7CiAJX19sZTE2IHNyY2FkZHI7CiAJX19sZTE2IHJlYXNvbjsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAKIApAQCAtMTM1LDcgKzEzNSw3IEBACiAJX19sZTE2IGdycGNvZGU7CiAJX19sZTE2IHVzcmNvZGU7CiAJX191OCAgIGRsZW47Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoKICAqIEEgY29sbGVjdGlvbiBvZiBmdW5jdGlvbnMgZm9yIG1hbmlwdWxhdGluZyB0aGUgc2VxdWVuY2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RuX3JvdXRlLmggYi9pbmNsdWRlL25ldC9kbl9yb3V0ZS5oCmluZGV4IDYwYzlmMjIuLmNjYWRhYjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2RuX3JvdXRlLmgKKysrIGIvaW5jbHVkZS9uZXQvZG5fcm91dGUuaApAQCAtNjUsOSArNjUsNyBAQAogICogcGFja2V0cyB0byB0aGUgb3JpZ2luYXRpbmcgaG9zdC4KICAqLwogc3RydWN0IGRuX3JvdXRlIHsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBkc3RfZW50cnkgZHN0OwotCX0gdTsKKwlzdHJ1Y3QgZHN0X2VudHJ5IGRzdDsKIAogCXN0cnVjdCBmbG93aSBmbDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmggYi9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaAppbmRleCBlYjU1MWJhLi5mN2RjZDJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaAorKysgYi9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaApAQCAtNjgsMjYgKzY4LDE1IEBACiAjZW5kaWYKIH07CiAKLSNpZmRlZiBDT05GSUdfTkVUX05TCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXQgKmdlbmxfaW5mb19uZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKLQlyZXR1cm4gaW5mby0+X25ldDsKKwlyZXR1cm4gcmVhZF9wbmV0KCZpbmZvLT5fbmV0KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGdlbmxfaW5mb19uZXRfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlpbmZvLT5fbmV0ID0gbmV0OworCXdyaXRlX3BuZXQoJmluZm8tPl9uZXQsIG5ldCk7CiB9Ci0jZWxzZQotc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0ICpnZW5sX2luZm9fbmV0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCi17Ci0JcmV0dXJuICZpbml0X25ldDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdlbmxfaW5mb19uZXRfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXQgKm5ldCkKLXsKLX0KLSNlbmRpZgogCiAvKioKICAqIHN0cnVjdCBnZW5sX29wcyAtIGdlbmVyaWMgbmV0bGluayBvcGVyYXRpb25zCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0X2NvbW1vbi5oIGIvaW5jbHVkZS9uZXQvaW5ldF9jb21tb24uaAppbmRleCAxOGM3NzMyLi4yMmZhYzk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0X2NvbW1vbi5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXRfY29tbW9uLmgKQEAgLTEsOCArMSw4IEBACiAjaWZuZGVmIF9JTkVUX0NPTU1PTl9ICiAjZGVmaW5lIF9JTkVUX0NPTU1PTl9ICiAKLWV4dGVybiBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzCQlpbmV0X3N0cmVhbV9vcHM7Ci1leHRlcm4gY29uc3Qgc3RydWN0IHByb3RvX29wcwkJaW5ldF9kZ3JhbV9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0X3N0cmVhbV9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0X2RncmFtX29wczsKIAogLyoKICAqCUlORVQ0IHByb3RvdHlwZXMgdXNlZCBieSBJTkVUNgpAQCAtMTMsMzcgKzEzLDI4IEBACiBzdHJ1Y3Qgc29ja2FkZHI7CiBzdHJ1Y3Qgc29ja2V0OwogCi1leHRlcm4gaW50CQkJaW5ldF9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spOwotZXh0ZXJuIGludAkJCWluZXRfc3RyZWFtX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywKLQkJCQkJCSAgICBzdHJ1Y3Qgc29ja2FkZHIgKiB1YWRkciwKLQkJCQkJCSAgICBpbnQgYWRkcl9sZW4sIGludCBmbGFncyk7Ci1leHRlcm4gaW50CQkJaW5ldF9kZ3JhbV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIAotCQkJCQkJICAgc3RydWN0IHNvY2thZGRyICogdWFkZHIsCi0JCQkJCQkgICBpbnQgYWRkcl9sZW4sIGludCBmbGFncyk7Ci1leHRlcm4gaW50CQkJaW5ldF9hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgCi0JCQkJCSAgICBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLCBpbnQgZmxhZ3MpOwotZXh0ZXJuIGludAkJCWluZXRfc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsCi0JCQkJCSAgICAgc3RydWN0IHNvY2tldCAqc29jaywgCi0JCQkJCSAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCAKLQkJCQkJICAgICBzaXplX3Qgc2l6ZSk7Ci1leHRlcm4gaW50CQkJaW5ldF9zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KTsKLWV4dGVybiBpbnQJCQlpbmV0X2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgYmFja2xvZyk7Ci0KLWV4dGVybiB2b2lkCQkJaW5ldF9zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzayk7Ci0KLWV4dGVybiBpbnQJCQlpbmV0X2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgCi0JCQkJCSAgc3RydWN0IHNvY2thZGRyICp1YWRkciwgaW50IGFkZHJfbGVuKTsKLWV4dGVybiBpbnQJCQlpbmV0X2dldG5hbWUoc3RydWN0IHNvY2tldCAqc29jaywgCi0JCQkJCSAgICAgc3RydWN0IHNvY2thZGRyICp1YWRkciwgCi0JCQkJCSAgICAgaW50ICp1YWRkcl9sZW4sIGludCBwZWVyKTsKLWV4dGVybiBpbnQJCQlpbmV0X2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIAotCQkJCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci0KLWV4dGVybiBpbnQJCQlpbmV0X2N0bF9zb2NrX2NyZWF0ZShzdHJ1Y3Qgc29jayAqKnNrLAotCQkJCQkJICAgICB1bnNpZ25lZCBzaG9ydCBmYW1pbHksCi0JCQkJCQkgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsCi0JCQkJCQkgICAgIHVuc2lnbmVkIGNoYXIgcHJvdG9jb2wsCi0JCQkJCQkgICAgIHN0cnVjdCBuZXQgKm5ldCk7CitleHRlcm4gaW50IGluZXRfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKTsKK2V4dGVybiBpbnQgaW5ldF9zdHJlYW1fY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKiB1YWRkciwKKwkJCSAgICAgICBpbnQgYWRkcl9sZW4sIGludCBmbGFncyk7CitleHRlcm4gaW50IGluZXRfZGdyYW1fY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKiB1YWRkciwKKwkJCSAgICAgIGludCBhZGRyX2xlbiwgaW50IGZsYWdzKTsKK2V4dGVybiBpbnQgaW5ldF9hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jaywgaW50IGZsYWdzKTsKK2V4dGVybiBpbnQgaW5ldF9zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywKKwkJCXN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpOworZXh0ZXJuIHNzaXplX3QgaW5ldF9zZW5kcGFnZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9mZnNldCwKKwkJCSAgICAgc2l6ZV90IHNpemUsIGludCBmbGFncyk7CitleHRlcm4gaW50IGluZXRfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCisJCQlzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGludCBpbmV0X3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBob3cpOworZXh0ZXJuIGludCBpbmV0X2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgYmFja2xvZyk7CitleHRlcm4gdm9pZCBpbmV0X3NvY2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiBpbnQgaW5ldF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsIGludCBhZGRyX2xlbik7CitleHRlcm4gaW50IGluZXRfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLAorCQkJaW50ICp1YWRkcl9sZW4sIGludCBwZWVyKTsKK2V4dGVybiBpbnQgaW5ldF9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gaW50IGluZXRfY3RsX3NvY2tfY3JlYXRlKHN0cnVjdCBzb2NrICoqc2ssIHVuc2lnbmVkIHNob3J0IGZhbWlseSwKKwkJCQl1bnNpZ25lZCBzaG9ydCB0eXBlLCB1bnNpZ25lZCBjaGFyIHByb3RvY29sLAorCQkJCXN0cnVjdCBuZXQgKm5ldCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbmV0X2N0bF9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2sgKnNrKQogewpAQCAtNTEsNSArNDIsMyBAQAogfQogCiAjZW5kaWYKLQotCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0X2ZyYWcuaCBiL2luY2x1ZGUvbmV0L2luZXRfZnJhZy5oCmluZGV4IDM5ZjJkYzkuLjE2ZmYyOWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRfZnJhZy5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXRfZnJhZy5oCkBAIC0yMCw2ICsyMCw3IEBACiAJYXRvbWljX3QJCXJlZmNudDsKIAlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcjsgICAgICAvKiB3aGVuIHdpbGwgdGhpcyBxdWV1ZSBleHBpcmU/ICovCiAJc3RydWN0IHNrX2J1ZmYJCSpmcmFnbWVudHM7IC8qIGxpc3Qgb2YgcmVjZWl2ZWQgZnJhZ21lbnRzICovCisJc3RydWN0IHNrX2J1ZmYJCSpmcmFnbWVudHNfdGFpbDsKIAlrdGltZV90CQkJc3RhbXA7CiAJaW50CQkJbGVuOyAgICAgICAgLyogdG90YWwgbGVuZ3RoIG9mIG9yaWcgZGF0YWdyYW0gKi8KIAlpbnQJCQltZWF0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmggYi9pbmNsdWRlL25ldC9pbmV0X3NvY2suaAppbmRleCAxNjUzZGU1Li4xOTg5Y2ZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0X3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9pbmV0X3NvY2suaApAQCAtMTM3LDcgKzEzNyw4IEBACiAJCQkJaGRyaW5jbDoxLAogCQkJCW1jX2xvb3A6MSwKIAkJCQl0cmFuc3BhcmVudDoxLAotCQkJCW1jX2FsbDoxOworCQkJCW1jX2FsbDoxLAorCQkJCW5vZGVmcmFnOjE7CiAJaW50CQkJbWNfaW5kZXg7CiAJX19iZTMyCQkJbWNfYWRkcjsKIAlzdHJ1Y3QgaXBfbWNfc29ja2xpc3QJKm1jX2xpc3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0cGVlci5oIGIvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaAppbmRleCA4N2IxZGYwLi40MTdkMGM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0cGVlci5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXRwZWVyLmgKQEAgLTIyLDEwICsyMiwyMSBAQAogCV9fdTMyCQkJZHRpbWU7CQkvKiB0aGUgdGltZSBvZiBsYXN0IHVzZSBvZiBub3QKIAkJCQkJCSAqIHJlZmVyZW5jZWQgZW50cmllcyAqLwogCWF0b21pY190CQlyZWZjbnQ7Ci0JYXRvbWljX3QJCXJpZDsJCS8qIEZyYWcgcmVjZXB0aW9uIGNvdW50ZXIgKi8KLQlhdG9taWNfdAkJaXBfaWRfY291bnQ7CS8qIElQIElEIGZvciB0aGUgbmV4dCBwYWNrZXQgKi8KLQlfX3UzMgkJCXRjcF90czsKLQlfX3UzMgkJCXRjcF90c19zdGFtcDsKKwkvKgorCSAqIE9uY2UgaW5ldF9wZWVyIGlzIHF1ZXVlZCBmb3IgZGVsZXRpb24gKHJlZmNudCA9PSAtMSksIGZvbGxvd2luZyBmaWVsZHMKKwkgKiBhcmUgbm90IGF2YWlsYWJsZTogcmlkLCBpcF9pZF9jb3VudCwgdGNwX3RzLCB0Y3BfdHNfc3RhbXAKKwkgKiBXZSBjYW4gc2hhcmUgbWVtb3J5IHdpdGggcmN1X2hlYWQgdG8ga2VlcCBpbmV0X3BlZXIgc21hbGwKKwkgKiAobGVzcyB0aGVuIDY0IGJ5dGVzKQorCSAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCWF0b21pY190CXJpZDsJCS8qIEZyYWcgcmVjZXB0aW9uIGNvdW50ZXIgKi8KKwkJCWF0b21pY190CWlwX2lkX2NvdW50OwkvKiBJUCBJRCBmb3IgdGhlIG5leHQgcGFja2V0ICovCisJCQlfX3UzMgkJdGNwX3RzOworCQkJX191MzIJCXRjcF90c19zdGFtcDsKKwkJfTsKKwkJc3RydWN0IHJjdV9oZWFkICAgICAgICAgcmN1OworCX07CiB9OwogCiB2b2lkCQkJaW5ldF9pbml0cGVlcnModm9pZCkgX19pbml0OwpAQCAtMzYsMTAgKzQ3LDIxIEBACiAvKiBjYW4gYmUgY2FsbGVkIGZyb20gQkggY29udGV4dCBvciBvdXRzaWRlICovCiBleHRlcm4gdm9pZCBpbmV0X3B1dHBlZXIoc3RydWN0IGluZXRfcGVlciAqcCk7CiAKKy8qCisgKiB0ZW1wb3JhcnkgY2hlY2sgdG8gbWFrZSBzdXJlIHdlIGRvbnQgYWNjZXNzIHJpZCwgaXBfaWRfY291bnQsIHRjcF90cywKKyAqIHRjcF90c19zdGFtcCBpZiBubyByZWZjb3VudCBpcyB0YWtlbiBvbiBpbmV0X3BlZXIKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGluZXRfcGVlcl9yZWZjaGVjayhjb25zdCBzdHJ1Y3QgaW5ldF9wZWVyICpwKQoreworCVdBUk5fT05fT05DRShhdG9taWNfcmVhZCgmcC0+cmVmY250KSA8PSAwKTsKK30KKworCiAvKiBjYW4gYmUgY2FsbGVkIHdpdGggb3Igd2l0aG91dCBsb2NhbCBCSCBiZWluZyBkaXNhYmxlZCAqLwogc3RhdGljIGlubGluZSBfX3UxNglpbmV0X2dldGlkKHN0cnVjdCBpbmV0X3BlZXIgKnAsIGludCBtb3JlKQogewogCW1vcmUrKzsKKwlpbmV0X3BlZXJfcmVmY2hlY2socCk7CiAJcmV0dXJuIGF0b21pY19hZGRfcmV0dXJuKG1vcmUsICZwLT5pcF9pZF9jb3VudCkgLSBtb3JlOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcC5oIGIvaW5jbHVkZS9uZXQvaXAuaAppbmRleCA0NTJmMjI5Li44OTBmOTcyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcC5oCisrKyBiL2luY2x1ZGUvbmV0L2lwLmgKQEAgLTYxLDExICs2MSwxNCBAQAogc3RydWN0IGlwX3JhX2NoYWluIHsKIAlzdHJ1Y3QgaXBfcmFfY2hhaW4JKm5leHQ7CiAJc3RydWN0IHNvY2sJCSpzazsKLQl2b2lkCQkJKCpkZXN0cnVjdG9yKShzdHJ1Y3Qgc29jayAqKTsKKwl1bmlvbiB7CisJCXZvaWQJCQkoKmRlc3RydWN0b3IpKHN0cnVjdCBzb2NrICopOworCQlzdHJ1Y3Qgc29jawkJKnNhdmVkX3NrOworCX07CisJc3RydWN0IHJjdV9oZWFkCQlyY3U7CiB9OwogCiBleHRlcm4gc3RydWN0IGlwX3JhX2NoYWluICppcF9yYV9jaGFpbjsKLWV4dGVybiByd2xvY2tfdCBpcF9yYV9sb2NrOwogCiAvKiBJUCBmbGFncy4gKi8KICNkZWZpbmUgSVBfQ0UJCTB4ODAwMAkJLyogRmxhZzogIkNvbmdlc3Rpb24iCQkqLwpAQCAtMTYyLDEyICsxNjUsMTIgQEAKIH07CiAKIGV4dGVybiBzdHJ1Y3QgaXB2NF9jb25maWcgaXB2NF9jb25maWc7Ci0jZGVmaW5lIElQX0lOQ19TVEFUUyhuZXQsIGZpZWxkKQlTTk1QX0lOQ19TVEFUUygobmV0KS0+bWliLmlwX3N0YXRpc3RpY3MsIGZpZWxkKQotI2RlZmluZSBJUF9JTkNfU1RBVFNfQkgobmV0LCBmaWVsZCkJU05NUF9JTkNfU1RBVFNfQkgoKG5ldCktPm1pYi5pcF9zdGF0aXN0aWNzLCBmaWVsZCkKLSNkZWZpbmUgSVBfQUREX1NUQVRTKG5ldCwgZmllbGQsIHZhbCkJU05NUF9BRERfU1RBVFMoKG5ldCktPm1pYi5pcF9zdGF0aXN0aWNzLCBmaWVsZCwgdmFsKQotI2RlZmluZSBJUF9BRERfU1RBVFNfQkgobmV0LCBmaWVsZCwgdmFsKSBTTk1QX0FERF9TVEFUU19CSCgobmV0KS0+bWliLmlwX3N0YXRpc3RpY3MsIGZpZWxkLCB2YWwpCi0jZGVmaW5lIElQX1VQRF9QT19TVEFUUyhuZXQsIGZpZWxkLCB2YWwpIFNOTVBfVVBEX1BPX1NUQVRTKChuZXQpLT5taWIuaXBfc3RhdGlzdGljcywgZmllbGQsIHZhbCkKLSNkZWZpbmUgSVBfVVBEX1BPX1NUQVRTX0JIKG5ldCwgZmllbGQsIHZhbCkgU05NUF9VUERfUE9fU1RBVFNfQkgoKG5ldCktPm1pYi5pcF9zdGF0aXN0aWNzLCBmaWVsZCwgdmFsKQorI2RlZmluZSBJUF9JTkNfU1RBVFMobmV0LCBmaWVsZCkJU05NUF9JTkNfU1RBVFM2NCgobmV0KS0+bWliLmlwX3N0YXRpc3RpY3MsIGZpZWxkKQorI2RlZmluZSBJUF9JTkNfU1RBVFNfQkgobmV0LCBmaWVsZCkJU05NUF9JTkNfU1RBVFM2NF9CSCgobmV0KS0+bWliLmlwX3N0YXRpc3RpY3MsIGZpZWxkKQorI2RlZmluZSBJUF9BRERfU1RBVFMobmV0LCBmaWVsZCwgdmFsKQlTTk1QX0FERF9TVEFUUzY0KChuZXQpLT5taWIuaXBfc3RhdGlzdGljcywgZmllbGQsIHZhbCkKKyNkZWZpbmUgSVBfQUREX1NUQVRTX0JIKG5ldCwgZmllbGQsIHZhbCkgU05NUF9BRERfU1RBVFM2NF9CSCgobmV0KS0+bWliLmlwX3N0YXRpc3RpY3MsIGZpZWxkLCB2YWwpCisjZGVmaW5lIElQX1VQRF9QT19TVEFUUyhuZXQsIGZpZWxkLCB2YWwpIFNOTVBfVVBEX1BPX1NUQVRTNjQoKG5ldCktPm1pYi5pcF9zdGF0aXN0aWNzLCBmaWVsZCwgdmFsKQorI2RlZmluZSBJUF9VUERfUE9fU1RBVFNfQkgobmV0LCBmaWVsZCwgdmFsKSBTTk1QX1VQRF9QT19TVEFUUzY0X0JIKChuZXQpLT5taWIuaXBfc3RhdGlzdGljcywgZmllbGQsIHZhbCkKICNkZWZpbmUgTkVUX0lOQ19TVEFUUyhuZXQsIGZpZWxkKQlTTk1QX0lOQ19TVEFUUygobmV0KS0+bWliLm5ldF9zdGF0aXN0aWNzLCBmaWVsZCkKICNkZWZpbmUgTkVUX0lOQ19TVEFUU19CSChuZXQsIGZpZWxkKQlTTk1QX0lOQ19TVEFUU19CSCgobmV0KS0+bWliLm5ldF9zdGF0aXN0aWNzLCBmaWVsZCkKICNkZWZpbmUgTkVUX0lOQ19TVEFUU19VU0VSKG5ldCwgZmllbGQpIAlTTk1QX0lOQ19TVEFUU19VU0VSKChuZXQpLT5taWIubmV0X3N0YXRpc3RpY3MsIGZpZWxkKQpAQCAtMTc1LDcgKzE3OCwxNSBAQAogI2RlZmluZSBORVRfQUREX1NUQVRTX1VTRVIobmV0LCBmaWVsZCwgYWRuZCkgU05NUF9BRERfU1RBVFNfVVNFUigobmV0KS0+bWliLm5ldF9zdGF0aXN0aWNzLCBmaWVsZCwgYWRuZCkKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc25tcF9mb2xkX2ZpZWxkKHZvaWQgX19wZXJjcHUgKm1pYltdLCBpbnQgb2ZmdCk7Ci1leHRlcm4gaW50IHNubXBfbWliX2luaXQodm9pZCBfX3BlcmNwdSAqcHRyWzJdLCBzaXplX3QgbWlic2l6ZSk7CisjaWYgQklUU19QRVJfTE9ORz09MzIKK2V4dGVybiB1NjQgc25tcF9mb2xkX2ZpZWxkNjQodm9pZCBfX3BlcmNwdSAqbWliW10sIGludCBvZmZ0LCBzaXplX3Qgc3luY19vZmYpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdTY0IHNubXBfZm9sZF9maWVsZDY0KHZvaWQgX19wZXJjcHUgKm1pYltdLCBpbnQgb2ZmdCwgc2l6ZV90IHN5bmNwX29mZikKK3sKKwlyZXR1cm4gc25tcF9mb2xkX2ZpZWxkKG1pYiwgb2ZmdCk7Cit9CisjZW5kaWYKK2V4dGVybiBpbnQgc25tcF9taWJfaW5pdCh2b2lkIF9fcGVyY3B1ICpwdHJbMl0sIHNpemVfdCBtaWJzaXplLCBzaXplX3QgYWxpZ24pOwogZXh0ZXJuIHZvaWQgc25tcF9taWJfZnJlZSh2b2lkIF9fcGVyY3B1ICpwdHJbMl0pOwogCiBleHRlcm4gc3RydWN0IGxvY2FsX3BvcnRzIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9maWIuaCBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaAppbmRleCA0YjFkYzExLi4wNjJhODIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfZmliLmgKKysrIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oCkBAIC04NCwxMyArODQsMTEgQEAKIHN0cnVjdCBmaWI2X3RhYmxlOwogCiBzdHJ1Y3QgcnQ2X2luZm8gewotCXVuaW9uIHsKLQkJc3RydWN0IGRzdF9lbnRyeQlkc3Q7Ci0JfSB1OworCXN0cnVjdCBkc3RfZW50cnkJCWRzdDsKIAotI2RlZmluZSBydDZpX2RldgkJCXUuZHN0LmRldgotI2RlZmluZSBydDZpX25leHRob3AJCQl1LmRzdC5uZWlnaGJvdXIKLSNkZWZpbmUgcnQ2aV9leHBpcmVzCQkJdS5kc3QuZXhwaXJlcworI2RlZmluZSBydDZpX2RldgkJCWRzdC5kZXYKKyNkZWZpbmUgcnQ2aV9uZXh0aG9wCQkJZHN0Lm5laWdoYm91cgorI2RlZmluZSBydDZpX2V4cGlyZXMJCQlkc3QuZXhwaXJlcwogCiAJLyoKIAkgKiBUYWlsIGVsZW1lbnRzIG9mIGRzdF9lbnRyeSAoX19yZWZjbnQgZXRjLikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaCBiL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaAppbmRleCBmYmY5ZDFjLi5mYzk0ZWM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfdHVubmVsLmgKKysrIGIvaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oCkBAIC0yNyw2ICsyNyw2IEBACiAJX191OCB0eXBlOwkJLyogdHlwZS1jb2RlIGZvciBvcHRpb24gICAgICAgICAqLwogCV9fdTggbGVuZ3RoOwkJLyogb3B0aW9uIGxlbmd0aCAgICAgICAgICAgICAgICAqLwogCV9fdTggZW5jYXBfbGltaXQ7CS8qIHR1bm5lbCBlbmNhcHN1bGF0aW9uIGxpbWl0ICAgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaAppbmRleCBmZTgyYjFlMS4uYTQ3NDdhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXBfdnMuaAorKysgYi9pbmNsdWRlL25ldC9pcF92cy5oCkBAIC02MzIsMTAgKzYzMiwyMiBAQAogKGludCBhZiwgaW50IHByb3RvY29sLCBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKnNfYWRkciwgX19iZTE2IHNfcG9ydCwKICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmRfYWRkciwgX19iZTE2IGRfcG9ydCk7CiAKK3N0cnVjdCBpcF92c19jb25uICogaXBfdnNfY29ubl9pbl9nZXRfcHJvdG8oaW50IGFmLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKKwkJCQkJICAgIGNvbnN0IHN0cnVjdCBpcF92c19pcGhkciAqaXBoLAorCQkJCQkgICAgdW5zaWduZWQgaW50IHByb3RvX29mZiwKKwkJCQkJICAgIGludCBpbnZlcnNlKTsKKwogZXh0ZXJuIHN0cnVjdCBpcF92c19jb25uICppcF92c19jb25uX291dF9nZXQKIChpbnQgYWYsIGludCBwcm90b2NvbCwgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICpzX2FkZHIsIF9fYmUxNiBzX3BvcnQsCiAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICpkX2FkZHIsIF9fYmUxNiBkX3BvcnQpOwogCitzdHJ1Y3QgaXBfdnNfY29ubiAqIGlwX3ZzX2Nvbm5fb3V0X2dldF9wcm90byhpbnQgYWYsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKKwkJCQkJICAgICBjb25zdCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgcHJvdG9fb2ZmLAorCQkJCQkgICAgIGludCBpbnZlcnNlKTsKKwogLyogcHV0IGJhY2sgdGhlIGNvbm4gd2l0aG91dCByZXN0YXJ0aW5nIGl0cyB0aW1lciAqLwogc3RhdGljIGlubGluZSB2b2lkIF9faXBfdnNfY29ubl9wdXQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKQogewpAQCAtNzM2LDggKzc0OCw2IEBACiAKIGV4dGVybiBpbnQgaXBfdnNfYXBwX3BrdF9vdXQoc3RydWN0IGlwX3ZzX2Nvbm4gKiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50IGlwX3ZzX2FwcF9wa3RfaW4oc3RydWN0IGlwX3ZzX2Nvbm4gKiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1leHRlcm4gaW50IGlwX3ZzX3NrYl9yZXBsYWNlKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IHByaSwKLQkJCSAgICAgY2hhciAqb19idWYsIGludCBvX2xlbiwgY2hhciAqbl9idWYsIGludCBuX2xlbik7CiBleHRlcm4gaW50IGlwX3ZzX2FwcF9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgaXBfdnNfYXBwX2NsZWFudXAodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwaXAuaCBiL2luY2x1ZGUvbmV0L2lwaXAuaAppbmRleCAxMWU4NTEzLi42NWNhZWE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcGlwLmgKKysrIGIvaW5jbHVkZS9uZXQvaXBpcC5oCkBAIC01MCw3ICs1MCw3IEBACiAJaW50IHBrdF9sZW4gPSBza2ItPmxlbiAtIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7CQlcCiAJCQkJCQkJCQlcCiAJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwkJCQkJXAotCWlwX3NlbGVjdF9pZGVudChpcGgsICZydC0+dS5kc3QsIE5VTEwpOwkJCQlcCisJaXBfc2VsZWN0X2lkZW50KGlwaCwgJnJ0LT5kc3QsIE5VTEwpOwkJCQlcCiAJCQkJCQkJCQlcCiAJZXJyID0gaXBfbG9jYWxfb3V0KHNrYik7CQkJCQlcCiAJaWYgKGxpa2VseShuZXRfeG1pdF9ldmFsKGVycikgPT0gMCkpIHsJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXB2Ni5oIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCmluZGV4IDI2MDBiNjkuLjFmODQxMjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwdjYuaAorKysgYi9pbmNsdWRlL25ldC9pcHY2LmgKQEAgLTEzNiwxNyArMTM2LDE3IEBACiAvKiBNSUJzICovCiAKICNkZWZpbmUgSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsZmllbGQpCQlcCi0JCV9ERVZJTkMobmV0LCBpcHY2LCAsIGlkZXYsIGZpZWxkKQorCQlfREVWSU5DKG5ldCwgaXB2NiwgNjQsIGlkZXYsIGZpZWxkKQogI2RlZmluZSBJUDZfSU5DX1NUQVRTX0JIKG5ldCwgaWRldixmaWVsZCkJXAotCQlfREVWSU5DKG5ldCwgaXB2NiwgX0JILCBpZGV2LCBmaWVsZCkKKwkJX0RFVklOQyhuZXQsIGlwdjYsIDY0X0JILCBpZGV2LCBmaWVsZCkKICNkZWZpbmUgSVA2X0FERF9TVEFUUyhuZXQsIGlkZXYsZmllbGQsdmFsKQlcCi0JCV9ERVZBREQobmV0LCBpcHY2LCAsIGlkZXYsIGZpZWxkLCB2YWwpCisJCV9ERVZBREQobmV0LCBpcHY2LCA2NCwgaWRldiwgZmllbGQsIHZhbCkKICNkZWZpbmUgSVA2X0FERF9TVEFUU19CSChuZXQsIGlkZXYsZmllbGQsdmFsKQlcCi0JCV9ERVZBREQobmV0LCBpcHY2LCBfQkgsIGlkZXYsIGZpZWxkLCB2YWwpCisJCV9ERVZBREQobmV0LCBpcHY2LCA2NF9CSCwgaWRldiwgZmllbGQsIHZhbCkKICNkZWZpbmUgSVA2X1VQRF9QT19TVEFUUyhuZXQsIGlkZXYsZmllbGQsdmFsKSAgIFwKLQkJX0RFVlVQRChuZXQsIGlwdjYsICwgaWRldiwgZmllbGQsIHZhbCkKKwkJX0RFVlVQRChuZXQsIGlwdjYsIDY0LCBpZGV2LCBmaWVsZCwgdmFsKQogI2RlZmluZSBJUDZfVVBEX1BPX1NUQVRTX0JIKG5ldCwgaWRldixmaWVsZCx2YWwpICAgXAotCQlfREVWVVBEKG5ldCwgaXB2NiwgX0JILCBpZGV2LCBmaWVsZCwgdmFsKQorCQlfREVWVVBEKG5ldCwgaXB2NiwgNjRfQkgsIGlkZXYsIGZpZWxkLCB2YWwpCiAjZGVmaW5lIElDTVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIGZpZWxkKQlcCiAJCV9ERVZJTkMobmV0LCBpY21wdjYsICwgaWRldiwgZmllbGQpCiAjZGVmaW5lIElDTVA2X0lOQ19TVEFUU19CSChuZXQsIGlkZXYsIGZpZWxkKQlcCkBAIC01NTEsNiArNTUxLDEwIEBACiAKIGV4dGVybiBpbnQgaXB2Nl9maW5kX3RsdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgdHlwZSk7CiAKK2V4dGVybiBzdHJ1Y3QgaW42X2FkZHIgKmZsNl91cGRhdGVfZHN0KHN0cnVjdCBmbG93aSAqZmwsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0LAorCQkJCSAgICAgICBzdHJ1Y3QgaW42X2FkZHIgKm9yaWcpOworCiAvKgogICoJc29ja2V0IG9wdGlvbnMgKGlwdjZfc29ja2dsdWUuYykKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXB4LmggYi9pbmNsdWRlL25ldC9pcHguaAppbmRleCBlZjUxYTY2Li4wNWQ3ZTRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcHguaAorKysgYi9pbmNsdWRlL25ldC9pcHguaApAQCAtMjcsOSArMjcsOSBAQAogI2RlZmluZSBJUFhfTUFYX1BQUk9QX0hPUFMgOAogCiBzdHJ1Y3QgaXB4aGRyIHsKLQlfX2JlMTYJCQlpcHhfY2hlY2tzdW0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCV9fYmUxNgkJCWlweF9jaGVja3N1bSBfX3BhY2tlZDsKICNkZWZpbmUgSVBYX05PX0NIRUNLU1VNCWNwdV90b19iZTE2KDB4RkZGRikKLQlfX2JlMTYJCQlpcHhfcGt0c2l6ZSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJX19iZTE2CQkJaXB4X3BrdHNpemUgX19wYWNrZWQ7CiAJX191OAkJCWlweF90Y3RybDsKIAlfX3U4CQkJaXB4X3R5cGU7CiAjZGVmaW5lIElQWF9UWVBFX1VOS05PV04JMHgwMApAQCAtMzgsOCArMzgsOCBAQAogI2RlZmluZSBJUFhfVFlQRV9TUFgJCTB4MDUJLyogU1BYIHByb3RvY29sICovCiAjZGVmaW5lIElQWF9UWVBFX05DUAkJMHgxMQkvKiAkbG90cyBmb3IgZG9jcyBvbiB0aGlzIChTUElUKSAqLwogI2RlZmluZSBJUFhfVFlQRV9QUFJPUAkJMHgxNAkvKiBjb21wbGljYXRlZCBmbG9vZCBmaWxsIGJyZGNhc3QgKi8KLQlzdHJ1Y3QgaXB4X2FkZHJlc3MJaXB4X2Rlc3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCXN0cnVjdCBpcHhfYWRkcmVzcwlpcHhfc291cmNlIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwlzdHJ1Y3QgaXB4X2FkZHJlc3MJaXB4X2Rlc3QgX19wYWNrZWQ7CisJc3RydWN0IGlweF9hZGRyZXNzCWlweF9zb3VyY2UgX19wYWNrZWQ7CiB9OwogCiBzdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgaXB4aGRyICppcHhfaGRyKHN0cnVjdCBza19idWZmICpza2IpCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lyZGEuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJkYS5oCmluZGV4IDdlNTgyMDYuLjNiZWQ2MWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lyZGEvaXJkYS5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJkYS5oCkBAIC01MywxMCArNTMsNiBAQAogI2lmbmRlZiBJUkRBX0FMSUdOCiAjICBkZWZpbmUgSVJEQV9BTElHTiBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKSkKICNlbmRpZgotI2lmbmRlZiBJUkRBX1BBQ0sKLSMgIGRlZmluZSBJUkRBX1BBQ0sgX19hdHRyaWJ1dGVfXygocGFja2VkKSkKLSNlbmRpZgotCiAKICNpZmRlZiBDT05GSUdfSVJEQV9ERUJVRwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lybGFwX2ZyYW1lLmggYi9pbmNsdWRlL25ldC9pcmRhL2lybGFwX2ZyYW1lLmgKaW5kZXggNjQxZjg4ZS4uNmIxZGM0ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxhcF9mcmFtZS5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYXBfZnJhbWUuaApAQCAtODUsNyArODUsNyBAQAogc3RydWN0IGRpc2NfZnJhbWUgewogCV9fdTggY2FkZHI7ICAgICAgICAgIC8qIENvbm5lY3Rpb24gYWRkcmVzcyAqLwogCV9fdTggY29udHJvbDsKLX0gSVJEQV9QQUNLOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHhpZF9mcmFtZSB7CiAJX191OCAgY2FkZHI7IC8qIENvbm5lY3Rpb24gYWRkcmVzcyAqLwpAQCAtOTYsNDEgKzk2LDQxIEBACiAJX191OCAgZmxhZ3M7IC8qIERpc2NvdmVyeSBmbGFncyAqLwogCV9fdTggIHNsb3RucjsKIAlfX3U4ICB2ZXJzaW9uOwotfSBJUkRBX1BBQ0s7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgdGVzdF9mcmFtZSB7CiAJX191OCBjYWRkcjsgICAgICAgICAgLyogQ29ubmVjdGlvbiBhZGRyZXNzICovCiAJX191OCBjb250cm9sOwogCV9fbGUzMiBzYWRkcjsgICAgICAgICAvKiBTb3VyY2UgZGV2aWNlIGFkZHJlc3MgKi8KIAlfX2xlMzIgZGFkZHI7ICAgICAgICAgLyogRGVzdGluYXRpb24gZGV2aWNlIGFkZHJlc3MgKi8KLX0gSVJEQV9QQUNLOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHVhX2ZyYW1lIHsKIAlfX3U4IGNhZGRyOwogCV9fdTggY29udHJvbDsKIAlfX2xlMzIgc2FkZHI7IC8qIFNvdXJjZSBkZXZpY2UgYWRkcmVzcyAqLwogCV9fbGUzMiBkYWRkcjsgLyogRGVzdCBkZXZpY2UgYWRkcmVzcyAqLwotfSBJUkRBX1BBQ0s7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgZG1fZnJhbWUgewogCV9fdTggY2FkZHI7ICAgICAgICAgIC8qIENvbm5lY3Rpb24gYWRkcmVzcyAqLwogCV9fdTggY29udHJvbDsKLX0gSVJEQV9QQUNLOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHJkX2ZyYW1lIHsKIAlfX3U4IGNhZGRyOyAgICAgICAgICAvKiBDb25uZWN0aW9uIGFkZHJlc3MgKi8KIAlfX3U4IGNvbnRyb2w7Ci19IElSREFfUEFDSzsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBycl9mcmFtZSB7CiAJX191OCBjYWRkcjsgICAgICAgICAgLyogQ29ubmVjdGlvbiBhZGRyZXNzICovCiAJX191OCBjb250cm9sOwotfSBJUkRBX1BBQ0s7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgaV9mcmFtZSB7CiAJX191OCBjYWRkcjsKIAlfX3U4IGNvbnRyb2w7Ci19IElSREFfUEFDSzsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBzbnJtX2ZyYW1lIHsKIAlfX3U4ICBjYWRkcjsKQEAgLTEzOCw3ICsxMzgsNyBAQAogCV9fbGUzMiBzYWRkcjsKIAlfX2xlMzIgZGFkZHI7CiAJX191OCAgbmNhZGRyOwotfSBJUkRBX1BBQ0s7Cit9IF9fcGFja2VkOwogCiB2b2lkIGlybGFwX3F1ZXVlX3htaXQoc3RydWN0IGlybGFwX2NiICpzZWxmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHZvaWQgaXJsYXBfc2VuZF9kaXNjb3ZlcnlfeGlkX2ZyYW1lKHN0cnVjdCBpcmxhcF9jYiAqLCBpbnQgUywgX191OCBzLCAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xpYjgwMjExLmggYi9pbmNsdWRlL25ldC9saWI4MDIxMS5oCmluZGV4IGZiNGUyNzguLjg0OGNjZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2xpYjgwMjExLmgKKysrIGIvaW5jbHVkZS9uZXQvbGliODAyMTEuaApAQCAtNTQsOSArNTQsNiBAQAogCS8qIGRlaW5pdGlhbGl6ZSBjcnlwdG8gY29udGV4dCBhbmQgZnJlZSBhbGxvY2F0ZWQgcHJpdmF0ZSBkYXRhICovCiAJdm9pZCAoKmRlaW5pdCkgKHZvaWQgKnByaXYpOwogCi0JaW50ICgqYnVpbGRfaXYpIChzdHJ1Y3Qgc2tfYnVmZiAqIHNrYiwgaW50IGhkcl9sZW4sCi0JCQkgdTggKmtleSwgaW50IGtleWxlbiwgdm9pZCAqcHJpdik7Ci0KIAkvKiBlbmNyeXB0L2RlY3J5cHQgcmV0dXJuIDwgMCBvbiBlcnJvciBvciA+PSAwIG9uIHN1Y2Nlc3MuIFRoZSByZXR1cm4KIAkgKiB2YWx1ZSBmcm9tIGRlY3J5cHRfbXBkdSBpcyBwYXNzZWQgYXMgdGhlIGtleWlkeCB2YWx1ZSBmb3IKIAkgKiBkZWNyeXB0X21zZHUuIHNrYiBtdXN0IGhhdmUgZW5vdWdoIGhlYWQgYW5kIHRhaWwgcm9vbSBmb3IgdGhlCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAppbmRleCBkZTIyY2JmLi5iMDc4N2ExIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCisrKyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKQEAgLTE0Niw2ICsxNDYsOSBAQAogICoJZW5hYmxlZC9kaXNhYmxlZCAoYmVhY29uaW5nIG1vZGVzKQogICogQEJTU19DSEFOR0VEX0NRTTogQ29ubmVjdGlvbiBxdWFsaXR5IG1vbml0b3IgY29uZmlnIGNoYW5nZWQKICAqIEBCU1NfQ0hBTkdFRF9JQlNTOiBJQlNTIGpvaW4gc3RhdHVzIGNoYW5nZWQKKyAqIEBCU1NfQ0hBTkdFRF9BUlBfRklMVEVSOiBIYXJkd2FyZSBBUlAgZmlsdGVyIGFkZHJlc3MgbGlzdCBvciBzdGF0ZSBjaGFuZ2VkLgorICogQEJTU19DSEFOR0VEX1FPUzogUW9TIGZvciB0aGlzIGFzc29jaWF0aW9uIHdhcyBlbmFibGVkL2Rpc2FibGVkLiBOb3RlCisgKgl0aGF0IGl0IGlzIG9ubHkgZXZlciBkaXNhYmxlZCBmb3Igc3RhdGlvbiBtb2RlLgogICovCiBlbnVtIGllZWU4MDIxMV9ic3NfY2hhbmdlIHsKIAlCU1NfQ0hBTkdFRF9BU1NPQwkJPSAxPDwwLApAQCAtMTYwLDEwICsxNjMsMTkgQEAKIAlCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRAk9IDE8PDksCiAJQlNTX0NIQU5HRURfQ1FNCQkJPSAxPDwxMCwKIAlCU1NfQ0hBTkdFRF9JQlNTCQk9IDE8PDExLAorCUJTU19DSEFOR0VEX0FSUF9GSUxURVIJCT0gMTw8MTIsCisJQlNTX0NIQU5HRURfUU9TCQkJPSAxPDwxMywKIAogCS8qIHdoZW4gYWRkaW5nIGhlcmUsIG1ha2Ugc3VyZSB0byBjaGFuZ2UgaWVlZTgwMjExX3JlY29uZmlnICovCiB9OwogCisvKgorICogVGhlIG1heGltdW0gbnVtYmVyIG9mIElQdjQgYWRkcmVzc2VzIGxpc3RlZCBmb3IgQVJQIGZpbHRlcmluZy4gSWYgdGhlIG51bWJlcgorICogb2YgYWRkcmVzc2VzIGZvciBhbiBpbnRlcmZhY2UgaW5jcmVhc2UgYmV5b25kIHRoaXMgdmFsdWUsIGhhcmR3YXJlIEFSUAorICogZmlsdGVyaW5nIHdpbGwgYmUgZGlzYWJsZWQuCisgKi8KKyNkZWZpbmUgSUVFRTgwMjExX0JTU19BUlBfQUREUl9MSVNUX0xFTiA0CisKIC8qKgogICogc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAtIGhvbGRzIHRoZSBCU1MncyBjaGFuZ2luZyBwYXJhbWV0ZXJzCiAgKgpAQCAtMTgyLDcgKzE5NCw5IEBACiAgKglpZiB0aGUgaGFyZHdhcmUgY2Fubm90IGhhbmRsZSB0aGlzIGl0IG11c3Qgc2V0IHRoZQogICoJSUVFRTgwMjExX0hXXzJHSFpfU0hPUlRfU0xPVF9JTkNBUEFCTEUgaGFyZHdhcmUgZmxhZwogICogQGR0aW1fcGVyaW9kOiBudW0gb2YgYmVhY29ucyBiZWZvcmUgdGhlIG5leHQgRFRJTSwgZm9yIGJlYWNvbmluZywKLSAqCW5vdCB2YWxpZCBpbiBzdGF0aW9uIG1vZGUgKGNmLiBodyBjb25mIHBzX2R0aW1fcGVyaW9kKQorICoJdmFsaWQgaW4gc3RhdGlvbiBtb2RlIG9ubHkgd2hpbGUgQGFzc29jIGlzIHRydWUgYW5kIGlmIGFsc28KKyAqCXJlcXVlc3RlZCBieSAlSUVFRTgwMjExX0hXX05FRURfRFRJTV9QRVJJT0QgKGNmLiBhbHNvIGh3IGNvbmYKKyAqCUBwc19kdGltX3BlcmlvZCkKICAqIEB0aW1lc3RhbXA6IGJlYWNvbiB0aW1lc3RhbXAKICAqIEBiZWFjb25faW50OiBiZWFjb24gaW50ZXJ2YWwKICAqIEBhc3NvY19jYXBhYmlsaXR5OiBjYXBhYmlsaXRpZXMgdGFrZW4gZnJvbSBhc3NvYyByZXNwCkBAIC0xOTksNiArMjEzLDE2IEBACiAgKiBAY3FtX3Jzc2lfdGhvbGQ6IENvbm5lY3Rpb24gcXVhbGl0eSBtb25pdG9yIFJTU0kgdGhyZXNob2xkLCBhIHplcm8gdmFsdWUKICAqCWltcGxpZXMgZGlzYWJsZWQKICAqIEBjcW1fcnNzaV9oeXN0OiBDb25uZWN0aW9uIHF1YWxpdHkgbW9uaXRvciBSU1NJIGh5c3RlcmVzaXMKKyAqIEBhcnBfYWRkcl9saXN0OiBMaXN0IG9mIElQdjQgYWRkcmVzc2VzIGZvciBoYXJkd2FyZSBBUlAgZmlsdGVyaW5nLiBUaGUKKyAqCW1heSBmaWx0ZXIgQVJQIHF1ZXJpZXMgdGFyZ2V0ZWQgZm9yIG90aGVyIGFkZHJlc3NlcyB0aGFuIGxpc3RlZCBoZXJlLgorICoJVGhlIGRyaXZlciBtdXN0IGFsbG93IEFSUCBxdWVyaWVzIHRhcmdldGVkIGZvciBhbGwgYWRkcmVzcyBsaXN0ZWQgaGVyZQorICoJdG8gcGFzcyB0aHJvdWdoLiBBbiBlbXB0eSBsaXN0IGltcGxpZXMgbm8gQVJQIHF1ZXJpZXMgbmVlZCB0byBwYXNzLgorICogQGFycF9hZGRyX2NudDogTnVtYmVyIG9mIGFkZHJlc3NlcyBjdXJyZW50bHkgb24gdGhlIGxpc3QuCisgKiBAYXJwX2ZpbHRlcl9lbmFibGVkOiBFbmFibGUgQVJQIGZpbHRlcmluZyAtIGlmIGVuYWJsZWQsIHRoZSBoYXJkd2FyZSBtYXkKKyAqCWZpbHRlciBBUlAgcXVlcmllcyBiYXNlZCBvbiB0aGUgQGFycF9hZGRyX2xpc3QsIGlmIGRpc2FibGVkLCB0aGUKKyAqCWhhcmR3YXJlIG11c3Qgbm90IHBlcmZvcm0gYW55IEFSUCBmaWx0ZXJpbmcuIE5vdGUsIHRoYXQgdGhlIGZpbHRlciB3aWxsCisgKgliZSBlbmFibGVkIGFsc28gaW4gcHJvbWlzY3VvdXMgbW9kZS4KKyAqIEBxb3M6IFRoaXMgaXMgYSBRb1MtZW5hYmxlZCBCU1MuCiAgKi8KIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgewogCWNvbnN0IHU4ICpic3NpZDsKQEAgLTIxOSw2ICsyNDMsMTAgQEAKIAlzMzIgY3FtX3Jzc2lfdGhvbGQ7CiAJdTMyIGNxbV9yc3NpX2h5c3Q7CiAJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGU7CisJX19iZTMyIGFycF9hZGRyX2xpc3RbSUVFRTgwMjExX0JTU19BUlBfQUREUl9MSVNUX0xFTl07CisJdTggYXJwX2FkZHJfY250OworCWJvb2wgYXJwX2ZpbHRlcl9lbmFibGVkOworCWJvb2wgcW9zOwogfTsKIAogLyoqCkBAIC0zMTIsOSArMzQwLDEwIEBACiAJSUVFRTgwMjExX1RYX0lOVEZMX05MODAyMTFfRlJBTUVfVFgJPSBCSVQoMjEpLAogCUlFRUU4MDIxMV9UWF9DVExfTERQQwkJCT0gQklUKDIyKSwKIAlJRUVFODAyMTFfVFhfQ1RMX1NUQkMJCQk9IEJJVCgyMykgfCBCSVQoMjQpLAotI2RlZmluZSBJRUVFODAyMTFfVFhfQ1RMX1NUQkNfU0hJRlQJCTIzCiB9OwogCisjZGVmaW5lIElFRUU4MDIxMV9UWF9DVExfU1RCQ19TSElGVAkJMjMKKwogLyoqCiAgKiBlbnVtIG1hYzgwMjExX3JhdGVfY29udHJvbF9mbGFncyAtIHBlci1yYXRlIGZsYWdzIHNldCBieSB0aGUKICAqCVJhdGUgQ29udHJvbCBhbGdvcml0aG0uCkBAIC0zOTAsNyArNDE5LDcgQEAKIAlzOCBpZHg7CiAJdTggY291bnQ7CiAJdTggZmxhZ3M7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyoqCiAgKiBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gLSBza2IgdHJhbnNtaXQgaW5mb3JtYXRpb24KQEAgLTQxMiw4ICs0NDEsNiBAQAogICogQGRyaXZlcl9kYXRhOiBhcnJheSBvZiBkcml2ZXJfZGF0YSBwb2ludGVycwogICogQGFtcGR1X2Fja19sZW46IG51bWJlciBvZiBhY2tlZCBhZ2dyZWdhdGVkIGZyYW1lcy4KICAqIAlyZWxldmFudCBvbmx5IGlmIElFRUU4MDIxMV9UWF9TVEFUX0FNUERVIHdhcyBzZXQuCi0gKiBAYW1wZHVfYWNrX21hcDogYmxvY2sgYWNrIGJpdCBtYXAgZm9yIHRoZSBhZ2dyZWdhdGlvbi4KLSAqIAlyZWxldmFudCBvbmx5IGlmIElFRUU4MDIxMV9UWF9TVEFUX0FNUERVIHdhcyBzZXQuCiAgKiBAYW1wZHVfbGVuOiBudW1iZXIgb2YgYWdncmVnYXRlZCBmcmFtZXMuCiAgKiAJcmVsZXZhbnQgb25seSBpZiBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVSB3YXMgc2V0LgogICogQGFja19zaWduYWw6IHNpZ25hbCBzdHJlbmd0aCBvZiB0aGUgQUNLIGZyYW1lCkBAIC00NDgsMTAgKzQ3NSw5IEBACiAJCXN0cnVjdCB7CiAJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgcmF0ZXNbSUVFRTgwMjExX1RYX01BWF9SQVRFU107CiAJCQl1OCBhbXBkdV9hY2tfbGVuOwotCQkJdTY0IGFtcGR1X2Fja19tYXA7CiAJCQlpbnQgYWNrX3NpZ25hbDsKIAkJCXU4IGFtcGR1X2xlbjsKLQkJCS8qIDcgYnl0ZXMgZnJlZSAqLworCQkJLyogMTUgYnl0ZXMgZnJlZSAqLwogCQl9IHN0YXR1czsKIAkJc3RydWN0IHsKIAkJCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSBkcml2ZXJfcmF0ZXNbCkBAIC02MDEsMTUgKzYyNywxNCBAQAogICoJbWF5IHR1cm4gdGhlIGRldmljZSBvZmYgYXMgbXVjaCBhcyBwb3NzaWJsZS4gVHlwaWNhbGx5LCB0aGlzIGZsYWcgd2lsbAogICoJYmUgc2V0IHdoZW4gYW4gaW50ZXJmYWNlIGlzIHNldCBVUCBidXQgbm90IGFzc29jaWF0ZWQgb3Igc2Nhbm5pbmcsIGJ1dAogICoJaXQgY2FuIGFsc28gYmUgdW5zZXQgaW4gdGhhdCBjYXNlIHdoZW4gbW9uaXRvciBpbnRlcmZhY2VzIGFyZSBhY3RpdmUuCi0gKiBASUVFRTgwMjExX0NPTkZfUU9TOiBFbmFibGUgODAyLjExZSBRb1MgYWxzbyBrbm93IGFzIFdNTSAoV2lyZWxlc3MKLSAqICAgICAgTXVsdGltZWRpYSkuIE9uIHNvbWUgZHJpdmVycyAoaXdsd2lmaSBpcyBvbmUgb2Yga25vdykgd2UgaGF2ZQotICogICAgICB0byBlbmFibGUvZGlzYWJsZSBRb1MgZXhwbGljaXRseS4KKyAqIEBJRUVFODAyMTFfQ09ORl9PRkZDSEFOTkVMOiBUaGUgZGV2aWNlIGlzIGN1cnJlbnRseSBub3Qgb24gaXRzIG1haW4KKyAqCW9wZXJhdGluZyBjaGFubmVsLgogICovCiBlbnVtIGllZWU4MDIxMV9jb25mX2ZsYWdzIHsKIAlJRUVFODAyMTFfQ09ORl9NT05JVE9SCQk9ICgxPDwwKSwKIAlJRUVFODAyMTFfQ09ORl9QUwkJPSAoMTw8MSksCiAJSUVFRTgwMjExX0NPTkZfSURMRQkJPSAoMTw8MiksCi0JSUVFRTgwMjExX0NPTkZfUU9TCQk9ICgxPDwzKSwKKwlJRUVFODAyMTFfQ09ORl9PRkZDSEFOTkVMCT0gKDE8PDMpLAogfTsKIAogCkBAIC02MjQsNyArNjQ5LDYgQEAKICAqIEBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUkVUUllfTElNSVRTOiByZXRyeSBsaW1pdHMgY2hhbmdlZAogICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9JRExFOiBJZGxlIGZsYWcgY2hhbmdlZAogICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9TTVBTOiBTcGF0aWFsIG11bHRpcGxleGluZyBwb3dlcnNhdmUgbW9kZSBjaGFuZ2VkCi0gKiBASUVFRTgwMjExX0NPTkZfQ0hBTkdFX1FPUzogUXVhbGl0eSBvZiBzZXJ2aWNlIHdhcyBlbmFibGVkIG9yIGRpc2FibGVkCiAgKi8KIGVudW0gaWVlZTgwMjExX2NvbmZfY2hhbmdlZCB7CiAJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1NNUFMJCT0gQklUKDEpLApAQCAtNjM1LDcgKzY1OSw2IEBACiAJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwJCT0gQklUKDYpLAogCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9SRVRSWV9MSU1JVFMJPSBCSVQoNyksCiAJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0lETEUJCT0gQklUKDgpLAotCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9RT1MJCT0gQklUKDkpLAogfTsKIAogLyoqCkBAIC02NzYsOSArNjk5LDYgQEAKICAqIEBkeW5hbWljX3BzX3RpbWVvdXQ6IFRoZSBkeW5hbWljIHBvd2Vyc2F2ZSB0aW1lb3V0IChpbiBtcyksIHNlZSB0aGUKICAqCXBvd2Vyc2F2ZSBkb2N1bWVudGF0aW9uIGJlbG93LiBUaGlzIHZhcmlhYmxlIGlzIHZhbGlkIG9ubHkgd2hlbgogICoJdGhlIENPTkZfUFMgZmxhZyBpcyBzZXQuCi0gKiBAZHluYW1pY19wc19mb3JjZWRfdGltZW91dDogVGhlIGR5bmFtaWMgcG93ZXJzYXZlIHRpbWVvdXQgKGluIG1zKSBjb25maWd1cmVkCi0gKglieSBjZmc4MDIxMSAoZXNzZW50aWFsbHksIHdleHQpIElmIHNldCwgdGhpcyB2YWx1ZSBvdmVycnVsZXMgdGhlIHZhbHVlCi0gKgljaG9zZW4gYnkgbWFjODAyMTEgYmFzZWQgb24gcHMgcW9zIG5ldHdvcmsgbGF0ZW5jeS4KICAqCiAgKiBAcG93ZXJfbGV2ZWw6IHJlcXVlc3RlZCB0cmFuc21pdCBwb3dlciAoaW4gZEJtKQogICoKQEAgLTY5OCw3ICs3MTgsNyBAQAogICovCiBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgewogCXUzMiBmbGFnczsKLQlpbnQgcG93ZXJfbGV2ZWwsIGR5bmFtaWNfcHNfdGltZW91dCwgZHluYW1pY19wc19mb3JjZWRfdGltZW91dDsKKwlpbnQgcG93ZXJfbGV2ZWwsIGR5bmFtaWNfcHNfdGltZW91dDsKIAlpbnQgbWF4X3NsZWVwX3BlcmlvZDsKIAogCXUxNiBsaXN0ZW5faW50ZXJ2YWw7CkBAIC04MTUsNyArODM1LDYgQEAKICAqCWVuY3J5cHRlZCBpbiBoYXJkd2FyZS4KICAqIEBhbGc6IFRoZSBrZXkgYWxnb3JpdGhtLgogICogQGZsYWdzOiBrZXkgZmxhZ3MsIHNlZSAmZW51bSBpZWVlODAyMTFfa2V5X2ZsYWdzLgotICogQGFwX2FkZHI6IEFQJ3MgTUFDIGFkZHJlc3MKICAqIEBrZXlpZHg6IHRoZSBrZXkgaW5kZXggKDAtMykKICAqIEBrZXlsZW46IGtleSBtYXRlcmlhbCBsZW5ndGgKICAqIEBrZXk6IGtleSBtYXRlcmlhbC4gRm9yIEFMR19US0lQIHRoZSBrZXkgaXMgZW5jb2RlZCBhcyBhIDI1Ni1iaXQgKDMyIGJ5dGUpCkBAIC04ODEsMTYgKzkwMCwxMiBAQAogICogZW51bSBzdGFfbm90aWZ5X2NtZCAtIHN0YSBub3RpZnkgY29tbWFuZAogICoKICAqIFVzZWQgd2l0aCB0aGUgc3RhX25vdGlmeSgpIGNhbGxiYWNrIGluICZzdHJ1Y3QgaWVlZTgwMjExX29wcywgdGhpcwotICogaW5kaWNhdGVzIGFkZGl0aW9uIGFuZCByZW1vdmFsIG9mIGEgc3RhdGlvbiB0byBzdGF0aW9uIHRhYmxlLAotICogb3IgaWYgYSBhc3NvY2lhdGVkIHN0YXRpb24gbWFkZSBhIHBvd2VyIHN0YXRlIHRyYW5zaXRpb24uCisgKiBpbmRpY2F0ZXMgaWYgYW4gYXNzb2NpYXRlZCBzdGF0aW9uIG1hZGUgYSBwb3dlciBzdGF0ZSB0cmFuc2l0aW9uLgogICoKLSAqIEBTVEFfTk9USUZZX0FERDogKERFUFJFQ0FURUQpIGEgc3RhdGlvbiB3YXMgYWRkZWQgdG8gdGhlIHN0YXRpb24gdGFibGUKLSAqIEBTVEFfTk9USUZZX1JFTU9WRTogKERFUFJFQ0FURUQpIGEgc3RhdGlvbiBiZWluZyByZW1vdmVkIGZyb20gdGhlIHN0YXRpb24gdGFibGUKICAqIEBTVEFfTk9USUZZX1NMRUVQOiBhIHN0YXRpb24gaXMgbm93IHNsZWVwaW5nCiAgKiBAU1RBX05PVElGWV9BV0FLRTogYSBzbGVlcGluZyBzdGF0aW9uIHdva2UgdXAKICAqLwogZW51bSBzdGFfbm90aWZ5X2NtZCB7Ci0JU1RBX05PVElGWV9BREQsIFNUQV9OT1RJRllfUkVNT1ZFLAogCVNUQV9OT1RJRllfU0xFRVAsIFNUQV9OT1RJRllfQVdBS0UsCiB9OwogCkBAIC0xMDE0LDYgKzEwMjksOSBAQAogICoJY29ubmVjdGlvbiBxdWFsaXR5IHJlbGF0ZWQgcGFyYW1ldGVycywgc3VjaCBhcyB0aGUgUlNTSSBsZXZlbCBhbmQKICAqCXByb3ZpZGUgbm90aWZpY2F0aW9ucyBpZiBjb25maWd1cmVkIHRyaWdnZXIgbGV2ZWxzIGFyZSByZWFjaGVkLgogICoKKyAqIEBJRUVFODAyMTFfSFdfTkVFRF9EVElNX1BFUklPRDoKKyAqCVRoaXMgZGV2aWNlIG5lZWRzIHRvIGtub3cgdGhlIERUSU0gcGVyaW9kIGZvciB0aGUgQlNTIGJlZm9yZQorICoJYXNzb2NpYXRpbmcuCiAgKi8KIGVudW0gaWVlZTgwMjExX2h3X2ZsYWdzIHsKIAlJRUVFODAyMTFfSFdfSEFTX1JBVEVfQ09OVFJPTAkJCT0gMTw8MCwKQEAgLTEwMjMsNyArMTA0MSw3IEBACiAJSUVFRTgwMjExX0hXXzJHSFpfU0hPUlRfUFJFQU1CTEVfSU5DQVBBQkxFCT0gMTw8NCwKIAlJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQwkJCT0gMTw8NSwKIAlJRUVFODAyMTFfSFdfU0lHTkFMX0RCTQkJCQk9IDE8PDYsCi0JLyogdXNlIHRoaXMgaG9sZSAqLworCUlFRUU4MDIxMV9IV19ORUVEX0RUSU1fUEVSSU9ECQkJPSAxPDw3LAogCUlFRUU4MDIxMV9IV19TUEVDVFJVTV9NR01UCQkJPSAxPDw4LAogCUlFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTgkJCT0gMTw8OSwKIAlJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMJCQk9IDE8PDEwLApAQCAtMTI2MCw2ICsxMjc4LDE1IEBACiAgKiBkeW5hbWljIFBTIGZlYXR1cmUgaW4gc3RhY2sgYW5kIHdpbGwganVzdCBrZWVwICVJRUVFODAyMTFfQ09ORl9QUwogICogZW5hYmxlZCB3aGVuZXZlciB1c2VyIGhhcyBlbmFibGVkIHBvd2Vyc2F2ZS4KICAqCisgKiBTb21lIGhhcmR3YXJlIG5lZWQgdG8gdG9nZ2xlIGEgc2luZ2xlIHNoYXJlZCBhbnRlbm5hIGJldHdlZW4gV0xBTiBhbmQKKyAqIEJsdWV0b290aCB0byBmYWNpbGl0YXRlIGNvLWV4aXN0ZW5jZS4gVGhlc2UgdHlwZXMgb2YgaGFyZHdhcmUgc2V0CisgKiBsaW1pdGF0aW9ucyBvbiB0aGUgdXNlIG9mIGhvc3QgY29udHJvbGxlZCBkeW5hbWljIHBvd2Vyc2F2ZSB3aGVuZXZlciB0aGVyZQorICogaXMgc2ltdWx0YW5lb3VzIFdMQU4gYW5kIEJsdWV0b290aCB0cmFmZmljLiBGb3IgdGhlc2UgdHlwZXMgb2YgaGFyZHdhcmUsIHRoZQorICogZHJpdmVyIG1heSByZXF1ZXN0IHRlbXBvcmFyaWx5IGdvaW5nIGludG8gZnVsbCBwb3dlciBzYXZlLCBpbiBvcmRlciB0bworICogZW5hYmxlIHRvZ2dsaW5nIHRoZSBhbnRlbm5hIGJldHdlZW4gQlQgYW5kIFdMQU4uIElmIHRoZSBkcml2ZXIgcmVxdWVzdHMKKyAqIGRpc2FibGluZyBkeW5hbWljIHBvd2Vyc2F2ZSwgdGhlIEBkeW5hbWljX3BzX3RpbWVvdXQgdmFsdWUgd2lsbCBiZQorICogdGVtcG9yYXJpbHkgc2V0IHRvIHplcm8gdW50aWwgdGhlIGRyaXZlciByZS1lbmFibGVzIGR5bmFtaWMgcG93ZXJzYXZlLgorICoKICAqIERyaXZlciBpbmZvcm1zIFUtQVBTRCBjbGllbnQgc3VwcG9ydCBieSBlbmFibGluZwogICogJUlFRUU4MDIxMV9IV19TVVBQT1JUU19VQVBTRCBmbGFnLiBUaGUgbW9kZSBpcyBjb25maWd1cmVkIHRocm91Z2ggdGhlCiAgKiB1YXBzZCBwYXJhbWF0ZXIgaW4gY29uZl90eCgpIG9wZXJhdGlvbi4gSGFyZHdhcmUgbmVlZHMgdG8gc2VuZCB0aGUgUW9TCkBAIC0xNDUxLDcgKzE0NzgsNyBAQAogICoKICAqIE5vdGUgdGhhdCBkcml2ZXJzIE1VU1QgYmUgYWJsZSB0byBkZWFsIHdpdGggYSBUWCBhZ2dyZWdhdGlvbgogICogc2Vzc2lvbiBiZWluZyBzdG9wcGVkIGV2ZW4gYmVmb3JlIHRoZXkgT0snZWQgc3RhcnRpbmcgaXQgYnkKLSAqIGNhbGxpbmcgaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiKF9pcnFzYWZlKSwgYmVjYXVzZSB0aGUgcGVlcgorICogY2FsbGluZyBpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZSwgYmVjYXVzZSB0aGUgcGVlcgogICogbWlnaHQgcmVjZWl2ZSB0aGUgYWRkQkEgZnJhbWUgYW5kIHNlbmQgYSBkZWxCQSByaWdodCBhd2F5IQogICoKICAqIEBJRUVFODAyMTFfQU1QRFVfUlhfU1RBUlQ6IHN0YXJ0IFJ4IGFnZ3JlZ2F0aW9uCkBAIC0xNjM2LDcgKzE2NjMsNyBAQAogICogCWlzIHRoZSBmaXJzdCBmcmFtZSB3ZSBleHBlY3QgdG8gcGVyZm9ybSB0aGUgYWN0aW9uIG9uLiBOb3RpY2UKICAqIAl0aGF0IFRYL1JYX1NUT1AgY2FuIHBhc3MgTlVMTCBmb3IgdGhpcyBwYXJhbWV0ZXIuCiAgKglSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgotICoJVGhlIGNhbGxiYWNrIG11c3QgYmUgYXRvbWljLgorICoJVGhlIGNhbGxiYWNrIGNhbiBzbGVlcC4KICAqCiAgKiBAZ2V0X3N1cnZleTogUmV0dXJuIHBlci1jaGFubmVsIHN1cnZleSBpbmZvcm1hdGlvbgogICoKQEAgLTIzMDcsMjUgKzIzMzQsMTQgQEAKIGludCBpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbihzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKTsKIAogLyoqCi0gKiBpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2IgLSBsb3cgbGV2ZWwgZHJpdmVyIHJlYWR5IHRvIGFnZ3JlZ2F0ZS4KLSAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gdGhlIGFkZF9pbnRlcmZhY2UgY2FsbGJhY2sKLSAqIEByYTogcmVjZWl2ZXIgYWRkcmVzcyBvZiB0aGUgQkEgc2Vzc2lvbiByZWNpcGllbnQuCi0gKiBAdGlkOiB0aGUgVElEIHRvIEJBIG9uLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYnkgbG93IGxldmVsIGRyaXZlciBvbmNlIGl0IGhhcwotICogZmluaXNoZWQgd2l0aCBwcmVwYXJhdGlvbnMgZm9yIHRoZSBCQSBzZXNzaW9uLgotICovCi12b2lkIGllZWU4MDIxMV9zdGFydF90eF9iYV9jYihzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCB1OCAqcmEsIHUxNiB0aWQpOwotCi0vKioKICAqIGllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlIC0gbG93IGxldmVsIGRyaXZlciByZWFkeSB0byBhZ2dyZWdhdGUuCiAgKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tIHRoZSBhZGRfaW50ZXJmYWNlIGNhbGxiYWNrCiAgKiBAcmE6IHJlY2VpdmVyIGFkZHJlc3Mgb2YgdGhlIEJBIHNlc3Npb24gcmVjaXBpZW50LgogICogQHRpZDogdGhlIFRJRCB0byBCQSBvbi4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGJ5IGxvdyBsZXZlbCBkcml2ZXIgb25jZSBpdCBoYXMKLSAqIGZpbmlzaGVkIHdpdGggcHJlcGFyYXRpb25zIGZvciB0aGUgQkEgc2Vzc2lvbi4KLSAqIFRoaXMgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24gaXMgSVJRLXNhZmUuCisgKiBmaW5pc2hlZCB3aXRoIHByZXBhcmF0aW9ucyBmb3IgdGhlIEJBIHNlc3Npb24uIEl0IGNhbiBiZSBjYWxsZWQKKyAqIGZyb20gYW55IGNvbnRleHQuCiAgKi8KIHZvaWQgaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgY29uc3QgdTggKnJhLAogCQkJCSAgICAgIHUxNiB0aWQpOwpAQCAtMjMzNCwyNyArMjM1MCwxNCBAQAogICogaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbiAtIFN0b3AgYSBCbG9jayBBY2sgc2Vzc2lvbi4KICAqIEBzdGE6IHRoZSBzdGF0aW9uIHdob3NlIEJBIHNlc3Npb24gdG8gc3RvcAogICogQHRpZDogdGhlIFRJRCB0byBzdG9wIEJBLgotICogQGluaXRpYXRvcjogaWYgaW5kaWNhdGVzIGluaXRpYXRvciBERUxCQSBmcmFtZSB3aWxsIGJlIHNlbnQuCiAgKgotICogUmV0dXJuOiBlcnJvciBpZiBubyBzdGEgd2l0aCBtYXRjaGluZyBkYSBmb3VuZCwgc3VjY2VzcyBvdGhlcndpc2UKKyAqIFJldHVybjogbmVnYXRpdmUgZXJyb3IgaWYgdGhlIFRJRCBpcyBpbnZhbGlkLCBvciBubyBhZ2dyZWdhdGlvbiBhY3RpdmUKICAqCiAgKiBBbHRob3VnaCBtYWM4MDIxMS9sb3cgbGV2ZWwgZHJpdmVyL3VzZXIgc3BhY2UgYXBwbGljYXRpb24gY2FuIGVzdGltYXRlCiAgKiB0aGUgbmVlZCB0byBzdG9wIGFnZ3JlZ2F0aW9uIG9uIGEgY2VydGFpbiBSQS9USUQsIHRoZSBzZXNzaW9uIGxldmVsCiAgKiB3aWxsIGJlIG1hbmFnZWQgYnkgdGhlIG1hYzgwMjExLgogICovCi1pbnQgaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLAotCQkJCSBlbnVtIGllZWU4MDIxMV9iYWNrX3BhcnRpZXMgaW5pdGlhdG9yKTsKLQotLyoqCi0gKiBpZWVlODAyMTFfc3RvcF90eF9iYV9jYiAtIGxvdyBsZXZlbCBkcml2ZXIgcmVhZHkgdG8gc3RvcCBhZ2dyZWdhdGUuCi0gKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tIHRoZSBhZGRfaW50ZXJmYWNlIGNhbGxiYWNrCi0gKiBAcmE6IHJlY2VpdmVyIGFkZHJlc3Mgb2YgdGhlIEJBIHNlc3Npb24gcmVjaXBpZW50LgotICogQHRpZDogdGhlIGRlc2lyZWQgVElEIHRvIEJBIG9uLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYnkgbG93IGxldmVsIGRyaXZlciBvbmNlIGl0IGhhcwotICogZmluaXNoZWQgd2l0aCBwcmVwYXJhdGlvbnMgZm9yIHRoZSBCQSBzZXNzaW9uIHRlYXIgZG93bi4KLSAqLwotdm9pZCBpZWVlODAyMTFfc3RvcF90eF9iYV9jYihzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCB1OCAqcmEsIHU4IHRpZCk7CitpbnQgaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKTsKIAogLyoqCiAgKiBpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlIC0gbG93IGxldmVsIGRyaXZlciByZWFkeSB0byBzdG9wIGFnZ3JlZ2F0ZS4KQEAgLTIzNjMsOCArMjM2Niw4IEBACiAgKiBAdGlkOiB0aGUgZGVzaXJlZCBUSUQgdG8gQkEgb24uCiAgKgogICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBieSBsb3cgbGV2ZWwgZHJpdmVyIG9uY2UgaXQgaGFzCi0gKiBmaW5pc2hlZCB3aXRoIHByZXBhcmF0aW9ucyBmb3IgdGhlIEJBIHNlc3Npb24gdGVhciBkb3duLgotICogVGhpcyB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiBpcyBJUlEtc2FmZS4KKyAqIGZpbmlzaGVkIHdpdGggcHJlcGFyYXRpb25zIGZvciB0aGUgQkEgc2Vzc2lvbiB0ZWFyIGRvd24uIEl0CisgKiBjYW4gYmUgY2FsbGVkIGZyb20gYW55IGNvbnRleHQuCiAgKi8KIHZvaWQgaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZShzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBjb25zdCB1OCAqcmEsCiAJCQkJICAgICB1MTYgdGlkKTsKQEAgLTI0NjAsNiArMjQ2MywzNiBAQAogdm9pZCBpZWVlODAyMTFfY29ubmVjdGlvbl9sb3NzKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwogCiAvKioKKyAqIGllZWU4MDIxMV9kaXNhYmxlX2R5bl9wcyAtIGZvcmNlIG1hYzgwMjExIHRvIHRlbXBvcmFyaWx5IGRpc2FibGUgZHluYW1pYyBwc20KKyAqCisgKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tIHRoZSBhZGRfaW50ZXJmYWNlIGNhbGxiYWNrLgorICoKKyAqIFNvbWUgaGFyZHdhcmUgcmVxdWlyZSBmdWxsIHBvd2VyIHNhdmUgdG8gbWFuYWdlIHNpbXVsdGFuZW91cyBCVCB0cmFmZmljCisgKiBvbiB0aGUgV0xBTiBmcmVxdWVuY3kuIEZ1bGwgUFNNIGlzIHJlcXVpcmVkIHBlcmlvZGljYWxseSwgd2hlbmV2ZXIgdGhlcmUgYXJlCisgKiBidXJzdCBvZiBCVCB0cmFmZmljLiBUaGUgaGFyZHdhcmUgZ2V0cyBpbmZvcm1hdGlvbiBvZiBCVCB0cmFmZmljIHZpYQorICogaGFyZHdhcmUgY28tZXhpc3RlbmNlIGxpbmVzLCBhbmQgY29uc2VxdWVudGlhbGx5IHJlcXVlc3RzIG1hYzgwMjExIHRvCisgKiAodGVtcG9yYXJpbHkpIGVudGVyIGZ1bGwgcHNtLgorICogVGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgdGVtcG9yYXJpbHkgZGlzYWJsZSBkeW5hbWljIFBTLCBub3QgZW5hYmxlIFBTTSBpZgorICogaXQgd2FzIG5vdCBhbHJlYWR5IGVuYWJsZWQuCisgKiBUaGUgZHJpdmVyIG11c3QgbWFrZSBzdXJlIHRvIHJlLWVuYWJsZSBkeW5hbWljIFBTIHVzaW5nCisgKiBpZWVlODAyMTFfZW5hYmxlX2R5bl9wcygpIGlmIHRoZSBkcml2ZXIgaGFzIGRpc2FibGVkIGl0LgorICoKKyAqLwordm9pZCBpZWVlODAyMTFfZGlzYWJsZV9keW5fcHMoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7CisKKy8qKgorICogaWVlZTgwMjExX2VuYWJsZV9keW5fcHMgLSByZXN0b3JlIGR5bmFtaWMgcHNtIGFmdGVyIGJlaW5nIGRpc2FibGVkCisgKgorICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSB0aGUgYWRkX2ludGVyZmFjZSBjYWxsYmFjay4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlc3RvcmVzIGR5bmFtaWMgUFMgYWZ0ZXIgYmVpbmcgdGVtcG9yYXJpbHkgZGlzYWJsZWQgdmlhCisgKiBpZWVlODAyMTFfZGlzYWJsZV9keW5fcHMoKS4gRWFjaCBpZWVlODAyMTFfZGlzYWJsZV9keW5fcHMoKSBjYWxsIG11c3QKKyAqIGJlIGNvdXBsZWQgd2l0aCBhbiBldmVudHVhbCBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uCisgKgorICovCit2b2lkIGllZWU4MDIxMV9lbmFibGVfZHluX3BzKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOworCisvKioKICAqIGllZWU4MDIxMV9jcW1fcnNzaV9ub3RpZnkgLSBpbmZvcm0gYSBjb25maWd1cmVkIGNvbm5lY3Rpb24gcXVhbGl0eSBtb25pdG9yaW5nCiAgKglyc3NpIHRocmVzaG9sZCB0cmlnZ2VyZWQKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9taXA2LmggYi9pbmNsdWRlL25ldC9taXA2LmgKaW5kZXggYTgzYWQxOS4uMjZiYTk5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbWlwNi5oCisrKyBiL2luY2x1ZGUvbmV0L21pcDYuaApAQCAtMzksNyArMzksNyBAQAogCV9fdTE2CWlwNm1oX2Nrc3VtOwogCS8qIEZvbGxvd2VkIGJ5IHR5cGUgc3BlY2lmaWMgbWVzc2FnZXMgKi8KIAlfX3U4CWRhdGFbMF07Ci19IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIElQNl9NSF9UWVBFX0JSUgkJMCAgIC8qIEJpbmRpbmcgUmVmcmVzaCBSZXF1ZXN0ICovCiAjZGVmaW5lIElQNl9NSF9UWVBFX0hPVEkJMSAgIC8qIEhPVEkgTWVzc2FnZSAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZGlzYy5oIGIvaW5jbHVkZS9uZXQvbmRpc2MuaAppbmRleCBmNzZmMjJkLi44OTU5OTdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZGlzYy5oCisrKyBiL2luY2x1ZGUvbmV0L25kaXNjLmgKQEAgLTgyLDcgKzgyLDcgQEAKIHN0cnVjdCBuZF9vcHRfaGRyIHsKIAlfX3U4CQluZF9vcHRfdHlwZTsKIAlfX3U4CQluZF9vcHRfbGVuOwotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Cit9IF9fcGFja2VkOwogCiAKIGV4dGVybiBpbnQJCQluZGlzY19pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmggYi9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaAppbmRleCBlYjIxMzQwLi4yNDI4NzliIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaAorKysgYi9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaApAQCAtMTUxLDcgKzE1MSw3IEBACiAJdm9pZAkJCSgqcHJveHlfcmVkbykoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJY2hhcgkJCSppZDsKIAlzdHJ1Y3QgbmVpZ2hfcGFybXMJcGFybXM7Ci0JLyogSEFDSy4gZ2NfKiBzaG91bCBmb2xsb3cgcGFybXMgd2l0aG91dCBhIGdhcCEgKi8KKwkvKiBIQUNLLiBnY18qIHNob3VsZCBmb2xsb3cgcGFybXMgd2l0aG91dCBhIGdhcCEgKi8KIAlpbnQJCQlnY19pbnRlcnZhbDsKIAlpbnQJCQlnY190aHJlc2gxOwogCWludAkJCWdjX3RocmVzaDI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgKaW5kZXggYmRlMDk1Zi4uZTYyNGRhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaApAQCAtMTUyLDExICsxNTIsNyBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXQgKm5mX2N0X25ldChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpCiB7Ci0jaWZkZWYgQ09ORklHX05FVF9OUwotCXJldHVybiBjdC0+Y3RfbmV0OwotI2Vsc2UKLQlyZXR1cm4gJmluaXRfbmV0OwotI2VuZGlmCisJcmV0dXJuIHJlYWRfcG5ldCgmY3QtPmN0X25ldCk7CiB9CiAKIC8qIEFsdGVyIHJlcGx5IHR1cGxlIChtYXliZSBhbHRlciBoZWxwZXIpLiAqLwpAQCAtMjYxLDcgKzI1NywxMiBAQAogCQkJICAgICAgIHUzMiBzZXEpOwogCiAvKiBGYWtlIGNvbm50cmFjayBlbnRyeSBmb3IgdW50cmFja2VkIGNvbm5lY3Rpb25zICovCi1leHRlcm4gc3RydWN0IG5mX2Nvbm4gbmZfY29ubnRyYWNrX3VudHJhY2tlZDsKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbmZfY29ubiwgbmZfY29ubnRyYWNrX3VudHJhY2tlZCk7CitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZl9jb25uICpuZl9jdF91bnRyYWNrZWRfZ2V0KHZvaWQpCit7CisJcmV0dXJuICZfX3Jhd19nZXRfY3B1X3ZhcihuZl9jb25udHJhY2tfdW50cmFja2VkKTsKK30KK2V4dGVybiB2b2lkIG5mX2N0X3VudHJhY2tlZF9zdGF0dXNfb3IodW5zaWduZWQgbG9uZyBiaXRzKTsKIAogLyogSXRlcmF0ZSBvdmVyIGFsbCBjb25udHJhY2tzOiBpZiBpdGVyIHJldHVybnMgdHJ1ZSwgaXQncyBkZWxldGVkLiAqLwogZXh0ZXJuIHZvaWQKQEAgLTI4OSw5ICsyOTAsOSBAQAogCXJldHVybiB0ZXN0X2JpdChJUFNfRFlJTkdfQklULCAmY3QtPnN0YXR1cyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IG5mX2N0X2lzX3VudHJhY2tlZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGlubGluZSBpbnQgbmZfY3RfaXNfdW50cmFja2VkKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKIHsKLQlyZXR1cm4gKHNrYi0+bmZjdCA9PSAmbmZfY29ubnRyYWNrX3VudHJhY2tlZC5jdF9nZW5lcmFsKTsKKwlyZXR1cm4gdGVzdF9iaXQoSVBTX1VOVFJBQ0tFRF9CSVQsICZjdC0+c3RhdHVzKTsKIH0KIAogZXh0ZXJuIGludCBuZl9jb25udHJhY2tfc2V0X2hhc2hzaXplKGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hY2N0LmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FjY3QuaAppbmRleCAwM2UyMThmLi40ZTljNjNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FjY3QuaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FjY3QuaApAQCAtNDUsNiArNDUsMTggQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQKIHNlcV9wcmludF9hY2N0KHN0cnVjdCBzZXFfZmlsZSAqcywgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LCBpbnQgZGlyKTsKIAorLyogQ2hlY2sgaWYgY29ubmVjdGlvbiB0cmFja2luZyBhY2NvdW50aW5nIGlzIGVuYWJsZWQgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBuZl9jdF9hY2N0X2VuYWJsZWQoc3RydWN0IG5ldCAqbmV0KQoreworCXJldHVybiBuZXQtPmN0LnN5c2N0bF9hY2N0ICE9IDA7Cit9CisKKy8qIEVuYWJsZS9kaXNhYmxlIGNvbm5lY3Rpb24gdHJhY2tpbmcgYWNjb3VudGluZyAqLworc3RhdGljIGlubGluZSB2b2lkIG5mX2N0X3NldF9hY2N0KHN0cnVjdCBuZXQgKm5ldCwgYm9vbCBlbmFibGUpCit7CisJbmV0LT5jdC5zeXNjdGxfYWNjdCA9IGVuYWJsZTsKK30KKwogZXh0ZXJuIGludCBuZl9jb25udHJhY2tfYWNjdF9pbml0KHN0cnVjdCBuZXQgKm5ldCk7CiBleHRlcm4gdm9pZCBuZl9jb25udHJhY2tfYWNjdF9maW5pKHN0cnVjdCBuZXQgKm5ldCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmgKaW5kZXggM2Q3NTI0Zi4uYWNlZDA4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmgKQEAgLTYwLDcgKzYwLDcgQEAKIAlzdHJ1Y3QgbmZfY29ubiAqY3QgPSAoc3RydWN0IG5mX2Nvbm4gKilza2ItPm5mY3Q7CiAJaW50IHJldCA9IE5GX0FDQ0VQVDsKIAotCWlmIChjdCAmJiBjdCAhPSAmbmZfY29ubnRyYWNrX3VudHJhY2tlZCkgeworCWlmIChjdCAmJiAhbmZfY3RfaXNfdW50cmFja2VkKGN0KSkgewogCQlpZiAoIW5mX2N0X2lzX2NvbmZpcm1lZChjdCkpCiAJCQlyZXQgPSBfX25mX2Nvbm50cmFja19jb25maXJtKHNrYik7CiAJCWlmIChsaWtlbHkocmV0ID09IE5GX0FDQ0VQVCkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuaAppbmRleCAzMmQxNWJkLi4wNzcyZDI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmgKQEAgLTI4LDkgKzI4LDE0IEBACiAJY2hhciBkYXRhWzBdOwogfTsKIAotc3RhdGljIGlubGluZSBpbnQgbmZfY3RfZXh0X2V4aXN0KGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwgdTggaWQpCitzdGF0aWMgaW5saW5lIGJvb2wgX19uZl9jdF9leHRfZXhpc3QoY29uc3Qgc3RydWN0IG5mX2N0X2V4dCAqZXh0LCB1OCBpZCkKIHsKLQlyZXR1cm4gKGN0LT5leHQgJiYgY3QtPmV4dC0+b2Zmc2V0W2lkXSk7CisJcmV0dXJuICEhZXh0LT5vZmZzZXRbaWRdOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgbmZfY3RfZXh0X2V4aXN0KGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwgdTggaWQpCit7CisJcmV0dXJuIChjdC0+ZXh0ICYmIF9fbmZfY3RfZXh0X2V4aXN0KGN0LT5leHQsIGlkKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqX19uZl9jdF9leHRfZmluZChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIHU4IGlkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90b2NvbC5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90b2NvbC5oCmluZGV4IGMzOTgwMTcuLmRmMTdiYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9jb2wuaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvY29sLmgKQEAgLTI3LDkgKzI3LDkgQEAKIAogCS8qIEFsdGVyIHRoZSBwZXItcHJvdG8gcGFydCBvZiB0aGUgdHVwbGUgKGRlcGVuZGluZyBvbgogCSAgIG1hbmlwdHlwZSksIHRvIGdpdmUgYSB1bmlxdWUgdHVwbGUgaW4gdGhlIGdpdmVuIHJhbmdlIGlmCi0JICAgcG9zc2libGU7IHJldHVybiBmYWxzZSBpZiBub3QuICBQZXItcHJvdG9jb2wgcGFydCBvZiB0dXBsZQotCSAgIGlzIGluaXRpYWxpemVkIHRvIHRoZSBpbmNvbWluZyBwYWNrZXQuICovCi0JYm9vbCAoKnVuaXF1ZV90dXBsZSkoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJICAgcG9zc2libGUuICBQZXItcHJvdG9jb2wgcGFydCBvZiB0dXBsZSBpcyBpbml0aWFsaXplZCB0byB0aGUKKwkgICBpbmNvbWluZyBwYWNrZXQuICovCisJdm9pZCAoKnVuaXF1ZV90dXBsZSkoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCiAJCQkgICAgIGNvbnN0IHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlLAogCQkJICAgICBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwdHlwZSwKIAkJCSAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KTsKQEAgLTYzLDcgKzYzLDcgQEAKIAkJCQkgIGNvbnN0IHVuaW9uIG5mX2Nvbm50cmFja19tYW5fcHJvdG8gKm1pbiwKIAkJCQkgIGNvbnN0IHVuaW9uIG5mX2Nvbm50cmFja19tYW5fcHJvdG8gKm1heCk7CiAKLWV4dGVybiBib29sIG5mX25hdF9wcm90b191bmlxdWVfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCitleHRlcm4gdm9pZCBuZl9uYXRfcHJvdG9fdW5pcXVlX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlLAogCQkJCSAgICAgIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXB0eXBlLAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmgKaW5kZXggZTRhMThhZS4uMjg5MGJkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmgKQEAgLTEyLDYgKzEyLDQgQEAKIAkJCSAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAogCQkJICAgIHN0cnVjdCBuZl9jb25uICpjdCk7CiAKLWV4dGVybiB1bnNpZ25lZCBpbnQKLWFsbG9jX251bGxfYmluZGluZyhzdHJ1Y3QgbmZfY29ubiAqY3QsIHVuc2lnbmVkIGludCBob29rbnVtKTsKICNlbmRpZiAvKiBfTkZfTkFUX1JVTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmgKaW5kZXggYjA1NjlmZi4uZTJkZWM0MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5oCkBAIC0xMCw1ICsxMCw3IEBACiAJCSAgY29uc3Qgc3RydWN0IG5mX2xvZ2luZm8gKmxpX3VzZXIsCiAJCSAgY29uc3QgY2hhciAqcHJlZml4KTsKIAorI2RlZmluZSBORlVMTkxfQ09QWV9ESVNBQkxFRCAgICAweGZmCisKICNlbmRpZiAvKiBfS0VSX05GTkVUTElOS19MT0dfSCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIveHRfcmF0ZWVzdC5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL3h0X3JhdGVlc3QuaAppbmRleCBkZGJmMzdlLi41YTI5NzhkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIveHRfcmF0ZWVzdC5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci94dF9yYXRlZXN0LmgKQEAgLTIsMTMgKzIsMTggQEAKICNkZWZpbmUgX1hUX1JBVEVFU1RfSAogCiBzdHJ1Y3QgeHRfcmF0ZWVzdCB7CisJLyoga2VlcCBsb2NrIGFuZCBic3RhdHMgb24gc2FtZSBjYWNoZSBsaW5lIHRvIHNwZWVkdXAgeHRfcmF0ZWVzdF90ZygpICovCisJc3RydWN0IGduZXRfc3RhdHNfYmFzaWNfcGFja2VkCWJzdGF0czsKKwlzcGlubG9ja190CQkJbG9jazsKKwkvKiBrZWVwIHJzdGF0cyBhbmQgbG9jayBvbiBzYW1lIGNhY2hlIGxpbmUgdG8gc3BlZWR1cCB4dF9yYXRlZXN0X210KCkgKi8KKwlzdHJ1Y3QgZ25ldF9zdGF0c19yYXRlX2VzdAlyc3RhdHM7CisKKwkvKiBmb2xsb3dpbmcgZmllbGRzIG5vdCBhY2Nlc3NlZCBpbiBob3QgcGF0aCAqLwogCXN0cnVjdCBobGlzdF9ub2RlCQlsaXN0OwogCWNoYXIJCQkJbmFtZVtJRk5BTVNJWl07CiAJdW5zaWduZWQgaW50CQkJcmVmY250OwotCXNwaW5sb2NrX3QJCQlsb2NrOwogCXN0cnVjdCBnbmV0X2VzdGltYXRvcgkJcGFyYW1zOwotCXN0cnVjdCBnbmV0X3N0YXRzX3JhdGVfZXN0CXJzdGF0czsKLQlzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpY19wYWNrZWQJYnN0YXRzOworCXN0cnVjdCByY3VfaGVhZAkJCXJjdTsKIH07CiAKIGV4dGVybiBzdHJ1Y3QgeHRfcmF0ZWVzdCAqeHRfcmF0ZWVzdF9sb29rdXAoY29uc3QgY2hhciAqbmFtZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRsaW5rLmggYi9pbmNsdWRlL25ldC9uZXRsaW5rLmgKaW5kZXggNGZjMDViNS4uZjNiMjAxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGxpbmsuaApAQCAtMzUsNyArMzUsNyBAQAogICogICBubG1zZ19uZXcoKQkJCWNyZWF0ZSBhIG5ldyBuZXRsaW5rIG1lc3NhZ2UKICAqICAgbmxtc2dfcHV0KCkJCQlhZGQgYSBuZXRsaW5rIG1lc3NhZ2UgdG8gYW4gc2tiCiAgKiAgIG5sbXNnX3B1dF9hbnN3ZXIoKQkJCWNhbGxiYWNrIGJhc2VkIG5sbXNnX3B1dCgpCi0gKiAgIG5sbXNnX2VuZCgpCQkJZmluYW5saXplIG5ldGxpbmsgbWVzc2FnZQorICogICBubG1zZ19lbmQoKQkJCWZpbmFsaXplIG5ldGxpbmsgbWVzc2FnZQogICogICBubG1zZ19nZXRfcG9zKCkJCQlyZXR1cm4gY3VycmVudCBwb3NpdGlvbiBpbiBtZXNzYWdlCiAgKiAgIG5sbXNnX3RyaW0oKQkJCXRyaW0gcGFydCBvZiBtZXNzYWdlCiAgKiAgIG5sbXNnX2NhbmNlbCgpCQkJY2FuY2VsIG1lc3NhZ2UgY29uc3RydWN0aW9uCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9waG9uZXQvcG5fZGV2LmggYi9pbmNsdWRlL25ldC9waG9uZXQvcG5fZGV2LmgKaW5kZXggZDdiOTg5Yy4uMmQxNjc4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcGhvbmV0L3BuX2Rldi5oCisrKyBiL2luY2x1ZGUvbmV0L3Bob25ldC9wbl9kZXYuaApAQCAtMzQsNiArMzQsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCURFQ0xBUkVfQklUTUFQKGFkZHJzLCA2NCk7CisJc3RydWN0IHJjdV9oZWFkCXJjdTsKIH07CiAKIGludCBwaG9uZXRfZGV2aWNlX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaCBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCmluZGV4IDlkNGQ4N2MuLmQ5NTQ5YWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCkBAIC05NSw3ICs5NSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBxZGlzY19ydW4oc3RydWN0IFFkaXNjICpxKQogewotCWlmICghdGVzdF9hbmRfc2V0X2JpdChfX1FESVNDX1NUQVRFX1JVTk5JTkcsICZxLT5zdGF0ZSkpCisJaWYgKHFkaXNjX3J1bl9iZWdpbihxKSkKIAkJX19xZGlzY19ydW4ocSk7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3JlZ3VsYXRvcnkuaCBiL2luY2x1ZGUvbmV0L3JlZ3VsYXRvcnkuaAppbmRleCBmODczZWUzLi45ZTEwM2E0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcmVndWxhdG9yeS5oCisrKyBiL2luY2x1ZGUvbmV0L3JlZ3VsYXRvcnkuaApAQCAtNTQsNyArNTQsNiBAQAogCWVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvcjsKIAljaGFyIGFscGhhMlsyXTsKIAlib29sIGludGVyc2VjdDsKLQl1MzIgY291bnRyeV9pZV9jaGVja3N1bTsKIAllbnVtIGVudmlyb25tZW50X2NhcCBjb3VudHJ5X2llX2VudjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcm91dGUuaCBiL2luY2x1ZGUvbmV0L3JvdXRlLmgKaW5kZXggYWY2Y2Y0Yi4uYmQ3MzJkNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcm91dGUuaAorKysgYi9pbmNsdWRlL25ldC9yb3V0ZS5oCkBAIC01MCw5ICs1MCw3IEBACiBzdHJ1Y3QgZmliX25oOwogc3RydWN0IGluZXRfcGVlcjsKIHN0cnVjdCBydGFibGUgewotCXVuaW9uIHsKLQkJc3RydWN0IGRzdF9lbnRyeQlkc3Q7Ci0JfSB1OworCXN0cnVjdCBkc3RfZW50cnkJZHN0OwogCiAJLyogQ2FjaGUgbG9va3VwIGtleXMgKi8KIAlzdHJ1Y3QgZmxvd2kJCWZsOwpAQCAtMTQ0LDcgKzE0Miw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaXBfcnRfcHV0KHN0cnVjdCBydGFibGUgKiBydCkKIHsKIAlpZiAocnQpCi0JCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOworCQlkc3RfcmVsZWFzZSgmcnQtPmRzdCk7CiB9CiAKICNkZWZpbmUgSVBUT1NfUlRfTUFTSwkoSVBUT1NfVE9TX01BU0sgJiB+MykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmggYi9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCmluZGV4IDQzMzYwNGIuLjNjODcyOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKKysrIGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaApAQCAtMjMsMTEgKzIzLDE3IEBACiB9OwogCiBlbnVtIHFkaXNjX3N0YXRlX3QgewotCV9fUURJU0NfU1RBVEVfUlVOTklORywKIAlfX1FESVNDX1NUQVRFX1NDSEVELAogCV9fUURJU0NfU1RBVEVfREVBQ1RJVkFURUQsCiB9OwogCisvKgorICogZm9sbG93aW5nIGJpdHMgYXJlIG9ubHkgY2hhbmdlZCB3aGlsZSBxZGlzYyBsb2NrIGlzIGhlbGQKKyAqLworZW51bSBxZGlzY19fX3N0YXRlX3QgeworCV9fUURJU0NfX19TVEFURV9SVU5OSU5HLAorfTsKKwogc3RydWN0IHFkaXNjX3NpemVfdGFibGUgewogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIAlzdHJ1Y3QgdGNfc2l6ZXNwZWMJc3pvcHRzOwpAQCAtNzIsMTAgKzc4LDI3IEBACiAJdW5zaWduZWQgbG9uZwkJc3RhdGU7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZAlxOwogCXN0cnVjdCBnbmV0X3N0YXRzX2Jhc2ljX3BhY2tlZCBic3RhdHM7CisJdW5zaWduZWQgbG9uZwkJX19zdGF0ZTsKIAlzdHJ1Y3QgZ25ldF9zdGF0c19xdWV1ZQlxc3RhdHM7Ci0Jc3RydWN0IHJjdV9oZWFkICAgICByY3VfaGVhZDsKKwlzdHJ1Y3QgcmN1X2hlYWQJCXJjdV9oZWFkOworCXNwaW5sb2NrX3QJCWJ1c3lsb2NrOwogfTsKIAorc3RhdGljIGlubGluZSBib29sIHFkaXNjX2lzX3J1bm5pbmcoc3RydWN0IFFkaXNjICpxZGlzYykKK3sKKwlyZXR1cm4gdGVzdF9iaXQoX19RRElTQ19fX1NUQVRFX1JVTk5JTkcsICZxZGlzYy0+X19zdGF0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBxZGlzY19ydW5fYmVnaW4oc3RydWN0IFFkaXNjICpxZGlzYykKK3sKKwlyZXR1cm4gIV9fdGVzdF9hbmRfc2V0X2JpdChfX1FESVNDX19fU1RBVEVfUlVOTklORywgJnFkaXNjLT5fX3N0YXRlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHFkaXNjX3J1bl9lbmQoc3RydWN0IFFkaXNjICpxZGlzYykKK3sKKwlfX2NsZWFyX2JpdChfX1FESVNDX19fU1RBVEVfUlVOTklORywgJnFkaXNjLT5fX3N0YXRlKTsKK30KKwogc3RydWN0IFFkaXNjX2NsYXNzX29wcyB7CiAJLyogQ2hpbGQgcWRpc2MgbWFuaXB1bGF0aW9uICovCiAJc3RydWN0IG5ldGRldl9xdWV1ZSAqCSgqc2VsZWN0X3F1ZXVlKShzdHJ1Y3QgUWRpc2MgKiwgc3RydWN0IHRjbXNnICopOwpAQCAtNTgzLDkgKzYwNiwxNiBAQAogfQogCiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpza2JfYWN0X2Nsb25lKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2FjdF9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaywKKwkJCQkJICAgIGludCBhY3Rpb24pCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKm4gPSBza2JfY2xvbmUoc2tiLCBnZnBfbWFzayk7CisJc3RydWN0IHNrX2J1ZmYgKm47CisKKwlpZiAoKGFjdGlvbiA9PSBUQ19BQ1RfU1RPTEVOIHx8IGFjdGlvbiA9PSBUQ19BQ1RfUVVFVUVEKSAmJgorCSAgICAhc2tiX3NoYXJlZChza2IpKQorCQluID0gc2tiX2dldChza2IpOworCWVsc2UKKwkJbiA9IHNrYl9jbG9uZShza2IsIGdmcF9tYXNrKTsKIAogCWlmIChuKSB7CiAJCW4tPnRjX3ZlcmQgPSBTRVRfVENfVkVSRChuLT50Y192ZXJkLCAwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjbS5oIGIvaW5jbHVkZS9uZXQvc2NtLmgKaW5kZXggODM2MGU0Ny4uMzE2NTY1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2NtLmgKKysrIGIvaW5jbHVkZS9uZXQvc2NtLmgKQEAgLTE5LDggKzE5LDEwIEBACiB9OwogCiBzdHJ1Y3Qgc2NtX2Nvb2tpZSB7Ci0Jc3RydWN0IHVjcmVkCQljcmVkczsJCS8qIFNrYiBjcmVkZW50aWFscwkqLworCXN0cnVjdCBwaWQJCSpwaWQ7CQkvKiBTa2IgY3JlZGVudGlhbHMgKi8KKwljb25zdCBzdHJ1Y3QgY3JlZAkqY3JlZDsKIAlzdHJ1Y3Qgc2NtX2ZwX2xpc3QJKmZwOwkJLyogUGFzc2VkIGZpbGVzCQkqLworCXN0cnVjdCB1Y3JlZAkJY3JlZHM7CQkvKiBTa2IgY3JlZGVudGlhbHMJKi8KICNpZmRlZiBDT05GSUdfU0VDVVJJVFlfTkVUV09SSwogCXUzMgkJCXNlY2lkOwkJLyogUGFzc2VkIHNlY3VyaXR5IElEIAkqLwogI2VuZGlmCkBAIC00Miw4ICs0NCwyNyBAQAogeyB9CiAjZW5kaWYgLyogQ09ORklHX1NFQ1VSSVRZX05FVFdPUksgKi8KIAorc3RhdGljIF9faW5saW5lX18gdm9pZCBzY21fc2V0X2NyZWQoc3RydWN0IHNjbV9jb29raWUgKnNjbSwKKwkJCQkgICAgc3RydWN0IHBpZCAqcGlkLCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCkKK3sKKwlzY20tPnBpZCAgPSBnZXRfcGlkKHBpZCk7CisJc2NtLT5jcmVkID0gZ2V0X2NyZWQoY3JlZCk7CisJY3JlZF90b191Y3JlZChwaWQsIGNyZWQsICZzY20tPmNyZWRzKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBzY21fZGVzdHJveV9jcmVkKHN0cnVjdCBzY21fY29va2llICpzY20pCit7CisJcHV0X3BpZChzY20tPnBpZCk7CisJc2NtLT5waWQgID0gTlVMTDsKKworCWlmIChzY20tPmNyZWQpCisJCXB1dF9jcmVkKHNjbS0+Y3JlZCk7CisJc2NtLT5jcmVkID0gTlVMTDsKK30KKwogc3RhdGljIF9faW5saW5lX18gdm9pZCBzY21fZGVzdHJveShzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtKQogeworCXNjbV9kZXN0cm95X2NyZWQoc2NtKTsKIAlpZiAoc2NtICYmIHNjbS0+ZnApCiAJCV9fc2NtX2Rlc3Ryb3koc2NtKTsKIH0KQEAgLTUxLDEwICs3Miw3IEBACiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgc2NtX3NlbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAogCQkJICAgICAgIHN0cnVjdCBzY21fY29va2llICpzY20pCiB7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwID0gY3VycmVudDsKLQlzY20tPmNyZWRzLnVpZCA9IGN1cnJlbnRfdWlkKCk7Ci0Jc2NtLT5jcmVkcy5naWQgPSBjdXJyZW50X2dpZCgpOwotCXNjbS0+Y3JlZHMucGlkID0gdGFza190Z2lkX3ZucihwKTsKKwlzY21fc2V0X2NyZWQoc2NtLCB0YXNrX3RnaWQoY3VycmVudCksIGN1cnJlbnRfY3JlZCgpKTsKIAlzY20tPmZwID0gTlVMTDsKIAl1bml4X2dldF9wZWVyc2VjX2RncmFtKHNvY2ssIHNjbSk7CiAJaWYgKG1zZy0+bXNnX2NvbnRyb2xsZW4gPD0gMCkKQEAgLTk2LDYgKzExNCw4IEBACiAJaWYgKHRlc3RfYml0KFNPQ0tfUEFTU0NSRUQsICZzb2NrLT5mbGFncykpCiAJCXB1dF9jbXNnKG1zZywgU09MX1NPQ0tFVCwgU0NNX0NSRURFTlRJQUxTLCBzaXplb2Yoc2NtLT5jcmVkcyksICZzY20tPmNyZWRzKTsKIAorCXNjbV9kZXN0cm95X2NyZWQoc2NtKTsKKwogCXNjbV9wYXNzZWMoc29jaywgbXNnLCBzY20pOwogCiAJaWYgKCFzY20tPmZwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmggYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaAppbmRleCA0Yjg2MDExLi5mOWU3NDczIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaApAQCAtNDQzLDcgKzQ0Myw3IEBACiAJX191OCBzaWduYXR1cmVbU0NUUF9TRUNSRVRfU0laRV07CiAJX191MzIgX19wYWQ7CQkvKiBmb3JjZSBzY3RwX2Nvb2tpZSBhbGlnbm1lbnQgdG8gNjQgYml0cyAqLwogCXN0cnVjdCBzY3RwX2Nvb2tpZSBjOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qIFRoaXMgaXMgYW5vdGhlciBjb252ZW5pZW5jZSB0eXBlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYWRkcmVzcwogICogcGFyYW1zIGZvciB0aGUgbWF4aW11bSBzaXplIGFuZCBwYXNzIHN1Y2ggc3RydWN0dXJlcyBhcm91bmQKQEAgLTQ4OCw3ICs0ODgsNyBAQAogCXVuaW9uIHNjdHBfYWRkciBkYWRkcjsKIAl1bnNpZ25lZCBsb25nIHNlbnRfYXQ7CiAJX191NjQgaGJfbm9uY2U7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfc2VuZGVyX2hiX2luZm9fdDsKK30gX19wYWNrZWQgc2N0cF9zZW5kZXJfaGJfaW5mb190OwogCiAvKgogICogIFJGQyAyOTYwIDEuMy4yIFNlcXVlbmNlZCBEZWxpdmVyeSB3aXRoaW4gU3RyZWFtcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc25tcC5oIGIvaW5jbHVkZS9uZXQvc25tcC5oCmluZGV4IDg5OTAwM2QuLmEwZTYxODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NubXAuaAorKysgYi9pbmNsdWRlL25ldC9zbm1wLmgKQEAgLTQ3LDE1ICs0NywxNiBAQAogfQogCiAvKgotICogV2UgdXNlIGFsbCB1bnNpZ25lZCBsb25ncy4gTGludXggd2lsbCBzb29uIGJlIHNvIHJlbGlhYmxlIHRoYXQgZXZlbiAKLSAqIHRoZXNlIHdpbGwgcmFwaWRseSBnZXQgdG9vIHNtYWxsIDgtKS4gU2VyaW91c2x5IGNvbnNpZGVyIHRoZSBJcEluUmVjZWl2ZXMgCi0gKiBjb3VudCBvbiB0aGUgMjBHYi9zICsgbmV0d29ya3MgcGVvcGxlIGV4cGVjdCBpbiBhIGZldyB5ZWFycyB0aW1lIQorICogV2UgdXNlIHVuc2lnbmVkIGxvbmdzIGZvciBtb3N0IG1pYnMgYnV0IHU2NCBmb3IgaXBzdGF0cy4KICAqLworI2luY2x1ZGUgPGxpbnV4L3U2NF9zdGF0c19zeW5jLmg+CiAKIC8qIElQc3RhdHMgKi8KICNkZWZpbmUgSVBTVEFUU19NSUJfTUFYCV9fSVBTVEFUU19NSUJfTUFYCiBzdHJ1Y3QgaXBzdGF0c19taWIgewotCXVuc2lnbmVkIGxvbmcJbWlic1tJUFNUQVRTX01JQl9NQVhdOworCS8qIG1pYnNbXSBtdXN0IGJlIGZpcnN0IGZpZWxkIG9mIHN0cnVjdCBpcHN0YXRzX21pYiAqLworCXU2NAkJbWlic1tJUFNUQVRTX01JQl9NQVhdOworCXN0cnVjdCB1NjRfc3RhdHNfc3luYyBzeW5jcDsKIH07CiAKIC8qIElDTVAgKi8KQEAgLTE1NSw0ICsxNTYsNzAgQEAKIAkJcHRyLT5taWJzW2Jhc2VmaWVsZCMjUEtUU10rKzsgXAogCQlwdHItPm1pYnNbYmFzZWZpZWxkIyNPQ1RFVFNdICs9IGFkZGVuZDtcCiAJfSB3aGlsZSAoMCkKKworCisjaWYgQklUU19QRVJfTE9ORz09MzIKKworI2RlZmluZSBTTk1QX0FERF9TVEFUUzY0X0JIKG1pYiwgZmllbGQsIGFkZGVuZCkgCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJX190eXBlb2ZfXygqbWliWzBdKSAqcHRyID0gX190aGlzX2NwdV9wdHIoKG1pYilbMF0pOwlcCisJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJnB0ci0+c3luY3ApOwkJCVwKKwkJcHRyLT5taWJzW2ZpZWxkXSArPSBhZGRlbmQ7CQkJCVwKKwkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJnB0ci0+c3luY3ApOwkJCVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBTTk1QX0FERF9TVEFUUzY0X1VTRVIobWliLCBmaWVsZCwgYWRkZW5kKSAJCQlcCisJZG8gewkJCQkJCQkJXAorCQlfX3R5cGVvZl9fKCptaWJbMF0pICpwdHI7CQkJCVwKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CQkJCQlcCisJCXB0ciA9IF9fdGhpc19jcHVfcHRyKChtaWIpWzFdKTsJCQkJXAorCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZwdHItPnN5bmNwKTsJCQlcCisJCXB0ci0+bWlic1tmaWVsZF0gKz0gYWRkZW5kOwkJCQlcCisJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZwdHItPnN5bmNwKTsJCQlcCisJCXByZWVtcHRfZW5hYmxlKCk7CQkJCQlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgU05NUF9BRERfU1RBVFM2NChtaWIsIGZpZWxkLCBhZGRlbmQpCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCV9fdHlwZW9mX18oKm1pYlswXSkgKnB0cjsJCQkJXAorCQlwcmVlbXB0X2Rpc2FibGUoKTsJCQkJCVwKKwkJcHRyID0gX190aGlzX2NwdV9wdHIoKG1pYilbIWluX3NvZnRpcnEoKV0pOwkJXAorCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZwdHItPnN5bmNwKTsJCQlcCisJCXB0ci0+bWlic1tmaWVsZF0gKz0gYWRkZW5kOwkJCQlcCisJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZwdHItPnN5bmNwKTsJCQlcCisJCXByZWVtcHRfZW5hYmxlKCk7CQkJCQlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgU05NUF9JTkNfU1RBVFM2NF9CSChtaWIsIGZpZWxkKSBTTk1QX0FERF9TVEFUUzY0X0JIKG1pYiwgZmllbGQsIDEpCisjZGVmaW5lIFNOTVBfSU5DX1NUQVRTNjRfVVNFUihtaWIsIGZpZWxkKSBTTk1QX0FERF9TVEFUUzY0X1VTRVIobWliLCBmaWVsZCwgMSkKKyNkZWZpbmUgU05NUF9JTkNfU1RBVFM2NChtaWIsIGZpZWxkKSBTTk1QX0FERF9TVEFUUzY0KG1pYiwgZmllbGQsIDEpCisjZGVmaW5lIFNOTVBfVVBEX1BPX1NUQVRTNjQobWliLCBiYXNlZmllbGQsIGFkZGVuZCkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlfX3R5cGVvZl9fKCptaWJbMF0pICpwdHI7CQkJCVwKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CQkJCQlcCisJCXB0ciA9IF9fdGhpc19jcHVfcHRyKChtaWIpWyFpbl9zb2Z0aXJxKCldKTsJCVwKKwkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmcHRyLT5zeW5jcCk7CQkJXAorCQlwdHItPm1pYnNbYmFzZWZpZWxkIyNQS1RTXSsrOwkJCQlcCisJCXB0ci0+bWlic1tiYXNlZmllbGQjI09DVEVUU10gKz0gYWRkZW5kOwkJCVwKKwkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJnB0ci0+c3luY3ApOwkJCVwKKwkJcHJlZW1wdF9lbmFibGUoKTsJCQkJCVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBTTk1QX1VQRF9QT19TVEFUUzY0X0JIKG1pYiwgYmFzZWZpZWxkLCBhZGRlbmQpCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJX190eXBlb2ZfXygqbWliWzBdKSAqcHRyOwkJCQlcCisJCXB0ciA9IF9fdGhpc19jcHVfcHRyKChtaWIpWyFpbl9zb2Z0aXJxKCldKTsJCVwKKwkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmcHRyLT5zeW5jcCk7CQkJXAorCQlwdHItPm1pYnNbYmFzZWZpZWxkIyNQS1RTXSsrOwkJCQlcCisJCXB0ci0+bWlic1tiYXNlZmllbGQjI09DVEVUU10gKz0gYWRkZW5kOwkJCVwKKwkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJnB0ci0+c3luY3ApOwkJCVwKKwl9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgU05NUF9JTkNfU1RBVFM2NF9CSChtaWIsIGZpZWxkKQkJU05NUF9JTkNfU1RBVFNfQkgobWliLCBmaWVsZCkKKyNkZWZpbmUgU05NUF9JTkNfU1RBVFM2NF9VU0VSKG1pYiwgZmllbGQpCVNOTVBfSU5DX1NUQVRTX1VTRVIobWliLCBmaWVsZCkKKyNkZWZpbmUgU05NUF9JTkNfU1RBVFM2NChtaWIsIGZpZWxkKQkJU05NUF9JTkNfU1RBVFMobWliLCBmaWVsZCkKKyNkZWZpbmUgU05NUF9ERUNfU1RBVFM2NChtaWIsIGZpZWxkKQkJU05NUF9ERUNfU1RBVFMobWliLCBmaWVsZCkKKyNkZWZpbmUgU05NUF9BRERfU1RBVFM2NF9CSChtaWIsIGZpZWxkLCBhZGRlbmQpIFNOTVBfQUREX1NUQVRTX0JIKG1pYiwgZmllbGQsIGFkZGVuZCkKKyNkZWZpbmUgU05NUF9BRERfU1RBVFM2NF9VU0VSKG1pYiwgZmllbGQsIGFkZGVuZCkgU05NUF9BRERfU1RBVFNfVVNFUihtaWIsIGZpZWxkLCBhZGRlbmQpCisjZGVmaW5lIFNOTVBfQUREX1NUQVRTNjQobWliLCBmaWVsZCwgYWRkZW5kKQlTTk1QX0FERF9TVEFUUyhtaWIsIGZpZWxkLCBhZGRlbmQpCisjZGVmaW5lIFNOTVBfVVBEX1BPX1NUQVRTNjQobWliLCBiYXNlZmllbGQsIGFkZGVuZCkgU05NUF9VUERfUE9fU1RBVFMobWliLCBiYXNlZmllbGQsIGFkZGVuZCkKKyNkZWZpbmUgU05NUF9VUERfUE9fU1RBVFM2NF9CSChtaWIsIGJhc2VmaWVsZCwgYWRkZW5kKSBTTk1QX1VQRF9QT19TVEFUU19CSChtaWIsIGJhc2VmaWVsZCwgYWRkZW5kKQorI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oCmluZGV4IDczMTE1MGQ1Li5hNDQxYzljIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvc29jay5oCkBAIC0yOTUsNyArMjk1LDggQEAKIAl1bnNpZ25lZCBzaG9ydAkJc2tfYWNrX2JhY2tsb2c7CiAJdW5zaWduZWQgc2hvcnQJCXNrX21heF9hY2tfYmFja2xvZzsKIAlfX3UzMgkJCXNrX3ByaW9yaXR5OwotCXN0cnVjdCB1Y3JlZAkJc2tfcGVlcmNyZWQ7CisJc3RydWN0IHBpZAkJKnNrX3BlZXJfcGlkOworCWNvbnN0IHN0cnVjdCBjcmVkCSpza19wZWVyX2NyZWQ7CiAJbG9uZwkJCXNrX3JjdnRpbWVvOwogCWxvbmcJCQlza19zbmR0aW1lbzsKIAlzdHJ1Y3Qgc2tfZmlsdGVyICAgICAgCSpza19maWx0ZXI7CkBAIC03NzEsNiArNzcyLDcgQEAKIAlpbnQJCQkqc3lzY3RsX3dtZW07CiAJaW50CQkJKnN5c2N0bF9ybWVtOwogCWludAkJCW1heF9oZWFkZXI7CisJYm9vbAkJCW5vX2F1dG9iaW5kOwogCiAJc3RydWN0IGttZW1fY2FjaGUJKnNsYWI7CiAJdW5zaWduZWQgaW50CQlvYmpfc2l6ZTsKQEAgLTEyMjQsMTIgKzEyMjYsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBza190eF9xdWV1ZV9nZXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQogewotCXJldHVybiBzay0+c2tfdHhfcXVldWVfbWFwcGluZzsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNrX3R4X3F1ZXVlX3JlY29yZGVkKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKLXsKLQlyZXR1cm4gKHNrICYmIHNrLT5za190eF9xdWV1ZV9tYXBwaW5nID49IDApOworCXJldHVybiBzayA/IHNrLT5za190eF9xdWV1ZV9tYXBwaW5nIDogLTE7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBza19zZXRfc29ja2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2tldCAqc29jaykKQEAgLTE3MTEsMTkgKzE3MDgsMTMgQEAKIHN0YXRpYyBpbmxpbmUKIHN0cnVjdCBuZXQgKnNvY2tfbmV0KGNvbnN0IHN0cnVjdCBzb2NrICpzaykKIHsKLSNpZmRlZiBDT05GSUdfTkVUX05TCi0JcmV0dXJuIHNrLT5za19uZXQ7Ci0jZWxzZQotCXJldHVybiAmaW5pdF9uZXQ7Ci0jZW5kaWYKKwlyZXR1cm4gcmVhZF9wbmV0KCZzay0+c2tfbmV0KTsKIH0KIAogc3RhdGljIGlubGluZQogdm9pZCBzb2NrX25ldF9zZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0jaWZkZWYgQ09ORklHX05FVF9OUwotCXNrLT5za19uZXQgPSBuZXQ7Ci0jZW5kaWYKKwl3cml0ZV9wbmV0KCZzay0+c2tfbmV0LCBuZXQpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNfYWN0L3RjX21pcnJlZC5oIGIvaW5jbHVkZS9uZXQvdGNfYWN0L3RjX21pcnJlZC5oCmluZGV4IGNlYWM2NjEuLmNmZTI5NDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RjX2FjdC90Y19taXJyZWQuaAorKysgYi9pbmNsdWRlL25ldC90Y19hY3QvdGNfbWlycmVkLmgKQEAgLTksNiArOSw3IEBACiAJaW50CQkJdGNmbV9pZmluZGV4OwogCWludAkJCXRjZm1fb2tfcHVzaDsKIAlzdHJ1Y3QgbmV0X2RldmljZQkqdGNmbV9kZXY7CisJc3RydWN0IGxpc3RfaGVhZAl0Y2ZtX2xpc3Q7CiB9OwogI2RlZmluZSB0b19taXJyZWQocGMpIFwKIAljb250YWluZXJfb2YocGMsIHN0cnVjdCB0Y2ZfbWlycmVkLCBjb21tb24pCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oCmluZGV4IGExNDQ5MTQuLmRmNmEyZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oCisrKyBiL2luY2x1ZGUvbmV0L3RjcC5oCkBAIC0yOTYsNDUgKzI5NiwzMCBAQAogI2RlZmluZSBUQ1BfQUREX1NUQVRTX1VTRVIobmV0LCBmaWVsZCwgdmFsKSBTTk1QX0FERF9TVEFUU19VU0VSKChuZXQpLT5taWIudGNwX3N0YXRpc3RpY3MsIGZpZWxkLCB2YWwpCiAjZGVmaW5lIFRDUF9BRERfU1RBVFMobmV0LCBmaWVsZCwgdmFsKQlTTk1QX0FERF9TVEFUUygobmV0KS0+bWliLnRjcF9zdGF0aXN0aWNzLCBmaWVsZCwgdmFsKQogCi1leHRlcm4gdm9pZAkJCXRjcF92NF9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyKTsKK2V4dGVybiB2b2lkIHRjcF92NF9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyKTsKIAotZXh0ZXJuIHZvaWQJCQl0Y3Bfc2h1dGRvd24gKHN0cnVjdCBzb2NrICpzaywgaW50IGhvdyk7CitleHRlcm4gdm9pZCB0Y3Bfc2h1dGRvd24gKHN0cnVjdCBzb2NrICpzaywgaW50IGhvdyk7CiAKLWV4dGVybiBpbnQJCQl0Y3BfdjRfcmN2KHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCB0Y3BfdjRfcmN2KHN0cnVjdCBza19idWZmICpza2IpOwogCi1leHRlcm4gaW50CQkJdGNwX3Y0X3JlbWVtYmVyX3N0YW1wKHN0cnVjdCBzb2NrICpzayk7Ci0KLWV4dGVybiBpbnQJCSAgICAJdGNwX3Y0X3R3X3JlbWVtYmVyX3N0YW1wKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3KTsKLQotZXh0ZXJuIGludAkJCXRjcF9zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywKLQkJCQkJICAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpOwotZXh0ZXJuIHNzaXplX3QJCQl0Y3Bfc2VuZHBhZ2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvZmZzZXQsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOwotCi1leHRlcm4gaW50CQkJdGNwX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgCi0JCQkJCSAgaW50IGNtZCwgCi0JCQkJCSAgdW5zaWduZWQgbG9uZyBhcmcpOwotCi1leHRlcm4gaW50CQkJdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgCi0JCQkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQkJICAgICAgc3RydWN0IHRjcGhkciAqdGgsCi0JCQkJCQkgICAgICB1bnNpZ25lZCBsZW4pOwotCi1leHRlcm4gaW50CQkJdGNwX3Jjdl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIAotCQkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCQkgICAgc3RydWN0IHRjcGhkciAqdGgsIAotCQkJCQkJICAgIHVuc2lnbmVkIGxlbik7Ci0KLWV4dGVybiB2b2lkCQkJdGNwX3Jjdl9zcGFjZV9hZGp1c3Qoc3RydWN0IHNvY2sgKnNrKTsKLQotZXh0ZXJuIHZvaWQJCQl0Y3BfY2xlYW51cF9yYnVmKHN0cnVjdCBzb2NrICpzaywgaW50IGNvcGllZCk7Ci0KLWV4dGVybiBpbnQJCQl0Y3BfdHdza191bmlxdWUoc3RydWN0IHNvY2sgKnNrLAotCQkJCQkJc3RydWN0IHNvY2sgKnNrdHcsIHZvaWQgKnR3cCk7Ci0KLWV4dGVybiB2b2lkCQkJdGNwX3R3c2tfZGVzdHJ1Y3RvcihzdHJ1Y3Qgc29jayAqc2spOwotCi1leHRlcm4gc3NpemVfdAkJCXRjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzaywgbG9mZl90ICpwcG9zLAotCQkJCQkgICAgICAgIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncyk7CitleHRlcm4gaW50IHRjcF92NF9yZW1lbWJlcl9zdGFtcChzdHJ1Y3Qgc29jayAqc2spOworZXh0ZXJuIGludCB0Y3BfdjRfdHdfcmVtZW1iZXJfc3RhbXAoc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcpOworZXh0ZXJuIGludCB0Y3Bfc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLAorCQkgICAgICAgc2l6ZV90IHNpemUpOworZXh0ZXJuIGludCB0Y3Bfc2VuZHBhZ2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9mZnNldCwKKwkJCXNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGludCB0Y3BfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gaW50IHRjcF9yY3Zfc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJIHN0cnVjdCB0Y3BoZHIgKnRoLCB1bnNpZ25lZCBsZW4pOworZXh0ZXJuIGludCB0Y3BfcmN2X2VzdGFibGlzaGVkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgICBzdHJ1Y3QgdGNwaGRyICp0aCwgdW5zaWduZWQgbGVuKTsKK2V4dGVybiB2b2lkIHRjcF9yY3Zfc3BhY2VfYWRqdXN0KHN0cnVjdCBzb2NrICpzayk7CitleHRlcm4gdm9pZCB0Y3BfY2xlYW51cF9yYnVmKHN0cnVjdCBzb2NrICpzaywgaW50IGNvcGllZCk7CitleHRlcm4gaW50IHRjcF90d3NrX3VuaXF1ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpza3R3LCB2b2lkICp0d3ApOworZXh0ZXJuIHZvaWQgdGNwX3R3c2tfZGVzdHJ1Y3RvcihzdHJ1Y3Qgc29jayAqc2spOworZXh0ZXJuIHNzaXplX3QgdGNwX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNrLCBsb2ZmX3QgKnBwb3MsCisJCQkgICAgICAgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc2l6ZV90IGxlbiwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2RlY19xdWlja2Fja19tb2RlKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJIGNvbnN0IHVuc2lnbmVkIGludCBwa3RzKQpAQCAtMzcyLDg4ICszNTcsNTkgQEAKIH07CiAKIAotZXh0ZXJuIGVudW0gdGNwX3R3X3N0YXR1cwl0Y3BfdGltZXdhaXRfc3RhdGVfcHJvY2VzcyhzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywKLQkJCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQkJCSAgIGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoKTsKLQotZXh0ZXJuIHN0cnVjdCBzb2NrICoJCXRjcF9jaGVja19yZXEoc3RydWN0IHNvY2sgKnNrLHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCSAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKLQkJCQkJICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqKnByZXYpOwotZXh0ZXJuIGludAkJCXRjcF9jaGlsZF9wcm9jZXNzKHN0cnVjdCBzb2NrICpwYXJlbnQsCi0JCQkJCQkgIHN0cnVjdCBzb2NrICpjaGlsZCwKLQkJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1leHRlcm4gaW50CQkJdGNwX3VzZV9mcnRvKHN0cnVjdCBzb2NrICpzayk7Ci1leHRlcm4gdm9pZAkJCXRjcF9lbnRlcl9mcnRvKHN0cnVjdCBzb2NrICpzayk7Ci1leHRlcm4gdm9pZAkJCXRjcF9lbnRlcl9sb3NzKHN0cnVjdCBzb2NrICpzaywgaW50IGhvdyk7Ci1leHRlcm4gdm9pZAkJCXRjcF9jbGVhcl9yZXRyYW5zKHN0cnVjdCB0Y3Bfc29jayAqdHApOwotZXh0ZXJuIHZvaWQJCQl0Y3BfdXBkYXRlX21ldHJpY3Moc3RydWN0IHNvY2sgKnNrKTsKLQotZXh0ZXJuIHZvaWQJCQl0Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCAKLQkJCQkJICBsb25nIHRpbWVvdXQpOwotZXh0ZXJuIHVuc2lnbmVkIGludAkJdGNwX3BvbGwoc3RydWN0IGZpbGUgKiBmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpOwotCi1leHRlcm4gaW50CQkJdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIAotCQkJCQkgICAgICAgaW50IG9wdG5hbWUsCi0JCQkJCSAgICAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCAKLQkJCQkJICAgICAgIGludCBfX3VzZXIgKm9wdGxlbik7Ci1leHRlcm4gaW50CQkJdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIAotCQkJCQkgICAgICAgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIAotCQkJCQkgICAgICAgdW5zaWduZWQgaW50IG9wdGxlbik7Ci1leHRlcm4gaW50CQkJY29tcGF0X3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywKLQkJCQkJaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKLQkJCQkJY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKTsKLWV4dGVybiBpbnQJCQljb21wYXRfdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLAotCQkJCQlpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAotCQkJCQljaGFyIF9fdXNlciAqb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKTsKLWV4dGVybiB2b2lkCQkJdGNwX3NldF9rZWVwYWxpdmUoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKTsKLWV4dGVybiB2b2lkCQkJdGNwX3N5bl9hY2tfdGltZW91dChzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCQkgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTsKLWV4dGVybiBpbnQJCQl0Y3BfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrICpzaywKLQkJCQkJICAgIHN0cnVjdCBtc2doZHIgKm1zZywKLQkJCQkJICAgIHNpemVfdCBsZW4sIGludCBub25ibG9jaywgCi0JCQkJCSAgICBpbnQgZmxhZ3MsIGludCAqYWRkcl9sZW4pOwotCi1leHRlcm4gdm9pZAkJCXRjcF9wYXJzZV9vcHRpb25zKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCQkgIHN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqb3B0X3J4LAotCQkJCQkJICB1OCAqKmh2cHAsCi0JCQkJCQkgIGludCBlc3RhYik7Ci0KLWV4dGVybiB1OAkJCSp0Y3BfcGFyc2VfbWQ1c2lnX29wdGlvbihzdHJ1Y3QgdGNwaGRyICp0aCk7CitleHRlcm4gZW51bSB0Y3BfdHdfc3RhdHVzIHRjcF90aW1ld2FpdF9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LAorCQkJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJICAgICBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCk7CitleHRlcm4gc3RydWN0IHNvY2sgKiB0Y3BfY2hlY2tfcmVxKHN0cnVjdCBzb2NrICpzayxzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKKwkJCQkgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICoqcHJldik7CitleHRlcm4gaW50IHRjcF9jaGlsZF9wcm9jZXNzKHN0cnVjdCBzb2NrICpwYXJlbnQsIHN0cnVjdCBzb2NrICpjaGlsZCwKKwkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IHRjcF91c2VfZnJ0byhzdHJ1Y3Qgc29jayAqc2spOworZXh0ZXJuIHZvaWQgdGNwX2VudGVyX2ZydG8oc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiB2b2lkIHRjcF9lbnRlcl9sb3NzKHN0cnVjdCBzb2NrICpzaywgaW50IGhvdyk7CitleHRlcm4gdm9pZCB0Y3BfY2xlYXJfcmV0cmFucyhzdHJ1Y3QgdGNwX3NvY2sgKnRwKTsKK2V4dGVybiB2b2lkIHRjcF91cGRhdGVfbWV0cmljcyhzdHJ1Y3Qgc29jayAqc2spOworZXh0ZXJuIHZvaWQgdGNwX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgdGNwX3BvbGwoc3RydWN0IGZpbGUgKiBmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAorCQkJICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpOworZXh0ZXJuIGludCB0Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbik7CitleHRlcm4gaW50IHRjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJCSAgY2hhciBfX3VzZXIgKm9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbik7CitleHRlcm4gaW50IGNvbXBhdF90Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkJIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbik7CitleHRlcm4gaW50IGNvbXBhdF90Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkJIGNoYXIgX191c2VyICpvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pOworZXh0ZXJuIHZvaWQgdGNwX3NldF9rZWVwYWxpdmUoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKTsKK2V4dGVybiB2b2lkIHRjcF9zeW5fYWNrX3RpbWVvdXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpOworZXh0ZXJuIGludCB0Y3BfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLAorCQkgICAgICAgc2l6ZV90IGxlbiwgaW50IG5vbmJsb2NrLCBpbnQgZmxhZ3MsIGludCAqYWRkcl9sZW4pOworZXh0ZXJuIHZvaWQgdGNwX3BhcnNlX29wdGlvbnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgIHN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqb3B0X3J4LCB1OCAqKmh2cHAsCisJCQkgICAgICBpbnQgZXN0YWIpOworZXh0ZXJuIHU4ICp0Y3BfcGFyc2VfbWQ1c2lnX29wdGlvbihzdHJ1Y3QgdGNwaGRyICp0aCk7CiAKIC8qCiAgKglUQ1AgdjQgZnVuY3Rpb25zIGV4cG9ydGVkIGZvciB0aGUgaW5ldDYgQVBJCiAgKi8KIAotZXh0ZXJuIHZvaWQJCSAgICAgICAJdGNwX3Y0X3NlbmRfY2hlY2soc3RydWN0IHNvY2sgKnNrLAotCQkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLQotZXh0ZXJuIGludAkJCXRjcF92NF9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLAotCQkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpOwotCi1leHRlcm4gc3RydWN0IHNvY2sgKgkJdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKHN0cnVjdCBzb2NrICpzaywKLQkJCQkJCQkgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAotCQkJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLQotZXh0ZXJuIHN0cnVjdCBzb2NrICoJCXRjcF92NF9zeW5fcmVjdl9zb2NrKHN0cnVjdCBzb2NrICpzaywKLQkJCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJCSAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAotCQkJCQkJCXN0cnVjdCBkc3RfZW50cnkgKmRzdCk7Ci0KLWV4dGVybiBpbnQJCQl0Y3BfdjRfZG9fcmN2KHN0cnVjdCBzb2NrICpzaywKK2V4dGVybiB2b2lkIHRjcF92NF9zZW5kX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IHRjcF92NF9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBzdHJ1Y3Qgc29jayAqIHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZChzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCSAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKIAkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0KLWV4dGVybiBpbnQJCQl0Y3BfdjRfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCSAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLAotCQkJCQkgICAgICAgaW50IGFkZHJfbGVuKTsKLQotZXh0ZXJuIGludAkJCXRjcF9jb25uZWN0KHN0cnVjdCBzb2NrICpzayk7Ci0KLWV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqCQl0Y3BfbWFrZV9zeW5hY2soc3RydWN0IHNvY2sgKnNrLAotCQkJCQkJc3RydWN0IGRzdF9lbnRyeSAqZHN0LAotCQkJCQkJc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAotCQkJCQkJc3RydWN0IHJlcXVlc3RfdmFsdWVzICpydnApOwotCi1leHRlcm4gaW50CQkJdGNwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpOworZXh0ZXJuIHN0cnVjdCBzb2NrICogdGNwX3Y0X3N5bl9yZWN2X3NvY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKKwkJCQkJICBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpOworZXh0ZXJuIGludCB0Y3BfdjRfZG9fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IHRjcF92NF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwKKwkJCSAgaW50IGFkZHJfbGVuKTsKK2V4dGVybiBpbnQgdGNwX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqIHRjcF9tYWtlX3N5bmFjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKKwkJCQkJc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAorCQkJCQlzdHJ1Y3QgcmVxdWVzdF92YWx1ZXMgKnJ2cCk7CitleHRlcm4gaW50IHRjcF9kaXNjb25uZWN0KHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKTsKIAogCiAvKiBGcm9tIHN5bmNvb2tpZXMuYyAqLwpAQCAtNDY0LDcgKzQyMCw3IEBACiAJCQkJICAgICBfX3UxNiAqbXNzKTsKIAogZXh0ZXJuIF9fdTMyIGNvb2tpZV9pbml0X3RpbWVzdGFtcChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpOwotZXh0ZXJuIHZvaWQgY29va2llX2NoZWNrX3RpbWVzdGFtcChzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgKnRjcF9vcHQpOworZXh0ZXJuIGJvb2wgY29va2llX2NoZWNrX3RpbWVzdGFtcChzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm9wdCwgYm9vbCAqKTsKIAogLyogRnJvbSBuZXQvaXB2Ni9zeW5jb29raWVzLmMgKi8KIGV4dGVybiBzdHJ1Y3Qgc29jayAqY29va2llX3Y2X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CkBAIC00ODUsMTAgKzQ0MSwxMCBAQAogCiBleHRlcm4gdm9pZCB0Y3Bfc2VuZF9wcm9iZTAoc3RydWN0IHNvY2sgKik7CiBleHRlcm4gdm9pZCB0Y3Bfc2VuZF9wYXJ0aWFsKHN0cnVjdCBzb2NrICopOwotZXh0ZXJuIGludCAgdGNwX3dyaXRlX3dha2V1cChzdHJ1Y3Qgc29jayAqKTsKK2V4dGVybiBpbnQgdGNwX3dyaXRlX3dha2V1cChzdHJ1Y3Qgc29jayAqKTsKIGV4dGVybiB2b2lkIHRjcF9zZW5kX2ZpbihzdHJ1Y3Qgc29jayAqc2spOwogZXh0ZXJuIHZvaWQgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgZ2ZwX3QgcHJpb3JpdHkpOwotZXh0ZXJuIGludCAgdGNwX3NlbmRfc3luYWNrKHN0cnVjdCBzb2NrICopOworZXh0ZXJuIGludCB0Y3Bfc2VuZF9zeW5hY2soc3RydWN0IHNvY2sgKik7CiBleHRlcm4gdm9pZCB0Y3BfcHVzaF9vbmUoc3RydWN0IHNvY2sgKiwgdW5zaWduZWQgaW50IG1zc19ub3cpOwogZXh0ZXJuIHZvaWQgdGNwX3NlbmRfYWNrKHN0cnVjdCBzb2NrICpzayk7CiBleHRlcm4gdm9pZCB0Y3Bfc2VuZF9kZWxheWVkX2FjayhzdHJ1Y3Qgc29jayAqc2spOwpAQCAtNTkyLDcgKzU0OCw3IEBACiAgKiBzY2FsaW5nIGFwcGxpZWQgdG8gdGhlIHJlc3VsdC4gIFRoZSBjYWxsZXIgZG9lcyB0aGVzZSB0aGluZ3MKICAqIGlmIG5lY2Vzc2FyeS4gIFRoaXMgaXMgYSAicmF3IiB3aW5kb3cgc2VsZWN0aW9uLgogICovCi1leHRlcm4gdTMyCV9fdGNwX3NlbGVjdF93aW5kb3coc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiB1MzIgX190Y3Bfc2VsZWN0X3dpbmRvdyhzdHJ1Y3Qgc29jayAqc2spOwogCiAvKiBUQ1AgdGltZXN0YW1wcyBhcmUgb25seSAzMi1iaXRzLCB0aGlzIGNhdXNlcyBhIHNsaWdodAogICogY29tcGxpY2F0aW9uIG9uIDY0LWJpdCBzeXN0ZW1zIHNpbmNlIHdlIHN0b3JlIGEgc25hcHNob3QKQEAgLTYwMiwxMiArNTU4LDIyIEBACiAgKi8KICNkZWZpbmUgdGNwX3RpbWVfc3RhbXAJCSgoX191MzIpKGppZmZpZXMpKQogCisjZGVmaW5lIHRjcF9mbGFnX2J5dGUodGgpICgoKHVfaW50OF90ICopdGgpWzEzXSkKKworI2RlZmluZSBUQ1BIRFJfRklOIDB4MDEKKyNkZWZpbmUgVENQSERSX1NZTiAweDAyCisjZGVmaW5lIFRDUEhEUl9SU1QgMHgwNAorI2RlZmluZSBUQ1BIRFJfUFNIIDB4MDgKKyNkZWZpbmUgVENQSERSX0FDSyAweDEwCisjZGVmaW5lIFRDUEhEUl9VUkcgMHgyMAorI2RlZmluZSBUQ1BIRFJfRUNFIDB4NDAKKyNkZWZpbmUgVENQSERSX0NXUiAweDgwCisKIC8qIFRoaXMgaXMgd2hhdCB0aGUgc2VuZCBwYWNrZXQgcXVldWluZyBlbmdpbmUgdXNlcyB0byBwYXNzCi0gKiBUQ1AgcGVyLXBhY2tldCBjb250cm9sIGluZm9ybWF0aW9uIHRvIHRoZSB0cmFuc21pc3Npb24KLSAqIGNvZGUuICBXZSBhbHNvIHN0b3JlIHRoZSBob3N0LW9yZGVyIHNlcXVlbmNlIG51bWJlcnMgaW4KLSAqIGhlcmUgdG9vLiAgVGhpcyBpcyAzNiBieXRlcyBvbiAzMi1iaXQgYXJjaGl0ZWN0dXJlcywKLSAqIDQwIGJ5dGVzIG9uIDY0LWJpdCBtYWNoaW5lcywgaWYgdGhpcyBncm93cyBwbGVhc2UgYWRqdXN0Ci0gKiBza2J1ZmYuaDpza2J1ZmYtPmNiW3h4eF0gc2l6ZSBhcHByb3ByaWF0ZWx5LgorICogVENQIHBlci1wYWNrZXQgY29udHJvbCBpbmZvcm1hdGlvbiB0byB0aGUgdHJhbnNtaXNzaW9uIGNvZGUuCisgKiBXZSBhbHNvIHN0b3JlIHRoZSBob3N0LW9yZGVyIHNlcXVlbmNlIG51bWJlcnMgaW4gaGVyZSB0b28uCisgKiBUaGlzIGlzIDQ0IGJ5dGVzIGlmIElQVjYgaXMgZW5hYmxlZC4KKyAqIElmIHRoaXMgZ3Jvd3MgcGxlYXNlIGFkanVzdCBza2J1ZmYuaDpza2J1ZmYtPmNiW3h4eF0gc2l6ZSBhcHByb3ByaWF0ZWx5LgogICovCiBzdHJ1Y3QgdGNwX3NrYl9jYiB7CiAJdW5pb24gewpAQCAtNjIwLDE5ICs1ODYsNiBAQAogCV9fdTMyCQllbmRfc2VxOwkvKiBTRVEgKyBGSU4gKyBTWU4gKyBkYXRhbGVuCSovCiAJX191MzIJCXdoZW47CQkvKiB1c2VkIHRvIGNvbXB1dGUgcnR0J3MJKi8KIAlfX3U4CQlmbGFnczsJCS8qIFRDUCBoZWFkZXIgZmxhZ3MuCQkqLwotCi0JLyogTk9URTogVGhlc2UgbXVzdCBtYXRjaCB1cCB0byB0aGUgZmxhZ3MgYnl0ZSBpbiBhCi0JICogICAgICAgcmVhbCBUQ1AgaGVhZGVyLgotCSAqLwotI2RlZmluZSBUQ1BDQl9GTEFHX0ZJTgkJMHgwMQotI2RlZmluZSBUQ1BDQl9GTEFHX1NZTgkJMHgwMgotI2RlZmluZSBUQ1BDQl9GTEFHX1JTVAkJMHgwNAotI2RlZmluZSBUQ1BDQl9GTEFHX1BTSAkJMHgwOAotI2RlZmluZSBUQ1BDQl9GTEFHX0FDSwkJMHgxMAotI2RlZmluZSBUQ1BDQl9GTEFHX1VSRwkJMHgyMAotI2RlZmluZSBUQ1BDQl9GTEFHX0VDRQkJMHg0MAotI2RlZmluZSBUQ1BDQl9GTEFHX0NXUgkJMHg4MAotCiAJX191OAkJc2Fja2VkOwkJLyogU3RhdGUgZmxhZ3MgZm9yIFNBQ0svRkFDSy4JKi8KICNkZWZpbmUgVENQQ0JfU0FDS0VEX0FDS0VECTB4MDEJLyogU0tCIEFDSydkIGJ5IGEgU0FDSyBibG9jawkqLwogI2RlZmluZSBUQ1BDQl9TQUNLRURfUkVUUkFOUwkweDAyCS8qIFNLQiByZXRyYW5zbWl0dGVkCQkqLwpAQCAtMTE3NiwyMiArMTEyOSwxNCBAQAogI2RlZmluZSBUQ1BfTUQ1U0lHX01BWEtFWVMJKH4odTMyKTApCS8qIHJlYWxseT8hICovCiAKIC8qIC0gZnVuY3Rpb25zICovCi1leHRlcm4gaW50CQkJdGNwX3Y0X21kNV9oYXNoX3NrYihjaGFyICptZDVfaGFzaCwKLQkJCQkJCSAgICBzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgKmtleSwKLQkJCQkJCSAgICBzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCQkgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAotCQkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpOwotCi1leHRlcm4gc3RydWN0IHRjcF9tZDVzaWdfa2V5CSp0Y3BfdjRfbWQ1X2xvb2t1cChzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCQkgICBzdHJ1Y3Qgc29jayAqYWRkcl9zayk7Ci0KLWV4dGVybiBpbnQJCQl0Y3BfdjRfbWQ1X2RvX2FkZChzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCQkgIF9fYmUzMiBhZGRyLAotCQkJCQkJICB1OCAqbmV3a2V5LAotCQkJCQkJICB1OCBuZXdrZXlsZW4pOwotCi1leHRlcm4gaW50CQkJdGNwX3Y0X21kNV9kb19kZWwoc3RydWN0IHNvY2sgKnNrLAotCQkJCQkJICBfX2JlMzIgYWRkcik7CitleHRlcm4gaW50IHRjcF92NF9tZDVfaGFzaF9za2IoY2hhciAqbWQ1X2hhc2gsIHN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqa2V5LAorCQkJICAgICAgIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAorCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIHN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqIHRjcF92NF9tZDVfbG9va3VwKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJCSBzdHJ1Y3Qgc29jayAqYWRkcl9zayk7CitleHRlcm4gaW50IHRjcF92NF9tZDVfZG9fYWRkKHN0cnVjdCBzb2NrICpzaywgX19iZTMyIGFkZHIsIHU4ICpuZXdrZXksCisJCQkgICAgIHU4IG5ld2tleWxlbik7CitleHRlcm4gaW50IHRjcF92NF9tZDVfZG9fZGVsKHN0cnVjdCBzb2NrICpzaywgX19iZTMyIGFkZHIpOwogCiAjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKICNkZWZpbmUgdGNwX3R3c2tfbWQ1X2tleSh0d3NrKQkoKHR3c2spLT50d19tZDVfa2V5bGVuID8gCQkgXApAQCAtMTIwNCwxMCArMTE0OSwxMCBAQAogI2VuZGlmCiAKIGV4dGVybiBzdHJ1Y3QgdGNwX21kNXNpZ19wb29sICogX19wZXJjcHUgKnRjcF9hbGxvY19tZDVzaWdfcG9vbChzdHJ1Y3Qgc29jayAqKTsKLWV4dGVybiB2b2lkCQkJdGNwX2ZyZWVfbWQ1c2lnX3Bvb2wodm9pZCk7CitleHRlcm4gdm9pZCB0Y3BfZnJlZV9tZDVzaWdfcG9vbCh2b2lkKTsKIAogZXh0ZXJuIHN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wJKnRjcF9nZXRfbWQ1c2lnX3Bvb2wodm9pZCk7Ci1leHRlcm4gdm9pZAkJCXRjcF9wdXRfbWQ1c2lnX3Bvb2wodm9pZCk7CitleHRlcm4gdm9pZCB0Y3BfcHV0X21kNXNpZ19wb29sKHZvaWQpOwogCiBleHRlcm4gaW50IHRjcF9tZDVfaGFzaF9oZWFkZXIoc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqLCBzdHJ1Y3QgdGNwaGRyICopOwogZXh0ZXJuIGludCB0Y3BfbWQ1X2hhc2hfc2tiX2RhdGEoc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLApAQCAtMTQxMyw3ICsxMzU4LDggQEAKIAlzYV9mYW1pbHlfdAkJZmFtaWx5OwogCWVudW0gdGNwX3NlcV9zdGF0ZXMJc3RhdGU7CiAJc3RydWN0IHNvY2sJCSpzeW5fd2FpdF9zazsKLQlpbnQJCQlidWNrZXQsIHNidWNrZXQsIG51bSwgdWlkOworCWludAkJCWJ1Y2tldCwgb2Zmc2V0LCBzYnVja2V0LCBudW0sIHVpZDsKKwlsb2ZmX3QJCQlsYXN0X3BvczsKIH07CiAKIGV4dGVybiBpbnQgdGNwX3Byb2NfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNwX3NlcV9hZmluZm8gKmFmaW5mbyk7CkBAIC0xNDM0LDcgKzEzODAsNyBAQAogZXh0ZXJuIGludCB0Y3A0X2dyb19jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1leHRlcm4gaW50ICB0Y3A0X3Byb2NfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgdGNwNF9wcm9jX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCB0Y3A0X3Byb2NfZXhpdCh2b2lkKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC91ZHAuaCBiL2luY2x1ZGUvbmV0L3VkcC5oCmluZGV4IDUzNDhkODAuLjdhYmRmMzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3VkcC5oCisrKyBiL2luY2x1ZGUvbmV0L3VkcC5oCkBAIC0xNTcsMzAgKzE1NywyOCBAQAogCXNrX2NvbW1vbl9yZWxlYXNlKHNrKTsKIH0KIAotZXh0ZXJuIGludAl1ZHBfbGliX2dldF9wb3J0KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgc251bSwKLQkJaW50ICgqKShjb25zdCBzdHJ1Y3Qgc29jayAqLGNvbnN0IHN0cnVjdCBzb2NrICopLAotCQl1bnNpZ25lZCBpbnQgaGFzaDJfbnVsbGFkZHIpOworZXh0ZXJuIGludCB1ZHBfbGliX2dldF9wb3J0KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgc251bSwKKwkJCSAgICBpbnQgKCopKGNvbnN0IHN0cnVjdCBzb2NrICosY29uc3Qgc3RydWN0IHNvY2sgKiksCisJCQkgICAgdW5zaWduZWQgaW50IGhhc2gyX251bGxhZGRyKTsKIAogLyogbmV0L2lwdjQvdWRwLmMgKi8KLWV4dGVybiBpbnQJdWRwX2dldF9wb3J0KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgc251bSwKLQkJCSAgICAgaW50ICgqc2FkZHJfY21wKShjb25zdCBzdHJ1Y3Qgc29jayAqLCBjb25zdCBzdHJ1Y3Qgc29jayAqKSk7Ci1leHRlcm4gdm9pZAl1ZHBfZXJyKHN0cnVjdCBza19idWZmICosIHUzMik7Ci0KLWV4dGVybiBpbnQJdWRwX3NlbmRtc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29jayAqc2ssCitleHRlcm4gaW50IHVkcF9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0sCisJCQlpbnQgKCpzYWRkcl9jbXApKGNvbnN0IHN0cnVjdCBzb2NrICosCisJCQkJCSBjb25zdCBzdHJ1Y3Qgc29jayAqKSk7CitleHRlcm4gdm9pZCB1ZHBfZXJyKHN0cnVjdCBza19idWZmICosIHUzMik7CitleHRlcm4gaW50IHVkcF9zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2sgKnNrLAogCQkJICAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbik7Ci1leHRlcm4gdm9pZAl1ZHBfZmx1c2hfcGVuZGluZ19mcmFtZXMoc3RydWN0IHNvY2sgKnNrKTsKLQotZXh0ZXJuIGludAl1ZHBfcmN2KHN0cnVjdCBza19idWZmICpza2IpOwotZXh0ZXJuIGludAl1ZHBfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci1leHRlcm4gaW50CXVkcF9kaXNjb25uZWN0KHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKTsKK2V4dGVybiB2b2lkIHVkcF9mbHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2spOworZXh0ZXJuIGludCB1ZHBfcmN2KHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCB1ZHBfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gaW50IHVkcF9kaXNjb25uZWN0KHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgdWRwX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCQkgICAgIHBvbGxfdGFibGUgKndhaXQpOwotZXh0ZXJuIGludCAJdWRwX2xpYl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKLQkJCSAgICAgICAgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKTsKLWV4dGVybiBpbnQgCXVkcF9saWJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCi0JCQkJICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbiwKLQkJCQkgICBpbnQgKCpwdXNoX3BlbmRpbmdfZnJhbWVzKShzdHJ1Y3Qgc29jayAqKSk7Ci0KK2V4dGVybiBpbnQgdWRwX2xpYl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJCSAgICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbik7CitleHRlcm4gaW50IHVkcF9saWJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkgICAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuLAorCQkJICAgICAgaW50ICgqcHVzaF9wZW5kaW5nX2ZyYW1lcykoc3RydWN0IHNvY2sgKikpOwogZXh0ZXJuIHN0cnVjdCBzb2NrICp1ZHA0X2xpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBfX2JlMzIgc2FkZHIsIF9fYmUxNiBzcG9ydCwKIAkJCQkgICAgX19iZTMyIGRhZGRyLCBfX2JlMTYgZHBvcnQsCiAJCQkJICAgIGludCBkaWYpOwpAQCAtMjM2LDcgKzIzNCw3IEBACiBleHRlcm4gaW50IHVkcF9wcm9jX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHVkcF9zZXFfYWZpbmZvICphZmluZm8pOwogZXh0ZXJuIHZvaWQgdWRwX3Byb2NfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1ZHBfc2VxX2FmaW5mbyAqYWZpbmZvKTsKIAotZXh0ZXJuIGludCAgdWRwNF9wcm9jX2luaXQodm9pZCk7CitleHRlcm4gaW50IHVkcDRfcHJvY19pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgdWRwNF9wcm9jX2V4aXQodm9pZCk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvY2lzdHBsLmggYi9pbmNsdWRlL3BjbWNpYS9jaXN0cGwuaAppbmRleCBjZmRkNWFmLi4xYzUwODhjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9jaXN0cGwuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9jaXN0cGwuaApAQCAtMTUsNiArMTUsOCBAQAogI2lmbmRlZiBfTElOVVhfQ0lTVFBMX0gKICNkZWZpbmUgX0xJTlVYX0NJU1RQTF9ICiAKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBjaXNkYXRhX3Q7CisKICNkZWZpbmUgQ0lTVFBMX05VTEwJCTB4MDAKICNkZWZpbmUgQ0lTVFBMX0RFVklDRQkJMHgwMQogI2RlZmluZSBDSVNUUExfTE9OR0xJTktfQ0IJMHgwMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvY3MuaCBiL2luY2x1ZGUvcGNtY2lhL2NzLmgKaW5kZXggNTdkOGQwMy4uNjhkOGJkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wY21jaWEvY3MuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9jcy5oCkBAIC0xOSw0NCArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2VuZGlmCiAKLS8qIEZvciBBY2Nlc3NDb25maWd1cmF0aW9uUmVnaXN0ZXIgKi8KLXR5cGVkZWYgc3RydWN0IGNvbmZfcmVnX3QgewotICAgIHVfY2hhcglGdW5jdGlvbjsKLSAgICB1X2ludAlBY3Rpb247Ci0gICAgb2ZmX3QJT2Zmc2V0OwotICAgIHVfaW50CVZhbHVlOwotfSBjb25mX3JlZ190OwotCi0vKiBBY3Rpb25zICovCi0jZGVmaW5lIENTX1JFQUQJCTEKLSNkZWZpbmUgQ1NfV1JJVEUJMgotCi0vKiBmb3IgQWRqdXN0UmVzb3VyY2VJbmZvICovCi0vKiBBY3Rpb24gZmllbGQgKi8KLSNkZWZpbmUgUkVNT1ZFX01BTkFHRURfUkVTT1VSQ0UJCTEKLSNkZWZpbmUgQUREX01BTkFHRURfUkVTT1VSQ0UJCTIKLQotCi10eXBlZGVmIHN0cnVjdCBldmVudF9jYWxsYmFja19hcmdzX3QgewotCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpjbGllbnRfaGFuZGxlOwotCXZvaWQJCQkqY2xpZW50X2RhdGE7Ci19IGV2ZW50X2NhbGxiYWNrX2FyZ3NfdDsKLQotLyogRm9yIENhcmRWYWx1ZXMgZmllbGQgKi8KLSNkZWZpbmUgQ1ZfT1BUSU9OX1ZBTFVFCQkweDAxCi0jZGVmaW5lIENWX1NUQVRVU19WQUxVRQkJMHgwMgotI2RlZmluZSBDVl9QSU5fUkVQTEFDRU1FTlQJMHgwNAotI2RlZmluZSBDVl9DT1BZX1ZBTFVFCQkweDA4Ci0jZGVmaW5lIENWX0VYVF9TVEFUVVMJCTB4MTAKLQotLyogRm9yIEdldEZpcnN0L05leHRDbGllbnQgKi8KLXR5cGVkZWYgc3RydWN0IGNsaWVudF9yZXFfdCB7Ci0gICAgc29ja2V0X3QJU29ja2V0OwotICAgIHVfaW50CUF0dHJpYnV0ZXM7Ci19IGNsaWVudF9yZXFfdDsKLQotI2RlZmluZSBDTElFTlRfVEhJU19TT0NLRVQJMHgwMQotCiAvKiBNb2RpZnlDb25maWd1cmF0aW9uICovCiB0eXBlZGVmIHN0cnVjdCBtb2Rjb25mX3QgewogICAgIHVfaW50CUF0dHJpYnV0ZXM7CkBAIC05NCw0MyArNTYsNiBAQAogI2RlZmluZSBJTlRfQ0FSREJVUwkJMHgwNAogI2RlZmluZSBJTlRfWk9PTUVEX1ZJREVPCTB4MDgKIAotLyogRm9yIFJlcXVlc3RJTyBhbmQgUmVsZWFzZUlPICovCi10eXBlZGVmIHN0cnVjdCBpb19yZXFfdCB7Ci0gICAgdV9pbnQJQmFzZVBvcnQxOwotICAgIHVfaW50CU51bVBvcnRzMTsKLSAgICB1X2ludAlBdHRyaWJ1dGVzMTsKLSAgICB1X2ludAlCYXNlUG9ydDI7Ci0gICAgdV9pbnQJTnVtUG9ydHMyOwotICAgIHVfaW50CUF0dHJpYnV0ZXMyOwotICAgIHVfaW50CUlPQWRkckxpbmVzOwotfSBpb19yZXFfdDsKLQotLyogQXR0cmlidXRlcyBmb3IgUmVxdWVzdElPIGFuZCBSZWxlYXNlSU8gKi8KLSNkZWZpbmUgSU9fU0hBUkVECQkweDAxCi0jZGVmaW5lIElPX0ZJUlNUX1NIQVJFRAkJMHgwMgotI2RlZmluZSBJT19GT1JDRV9BTElBU19BQ0NFU1MJMHgwNAotI2RlZmluZSBJT19EQVRBX1BBVEhfV0lEVEgJMHgxOAotI2RlZmluZSBJT19EQVRBX1BBVEhfV0lEVEhfOAkweDAwCi0jZGVmaW5lIElPX0RBVEFfUEFUSF9XSURUSF8xNgkweDA4Ci0jZGVmaW5lIElPX0RBVEFfUEFUSF9XSURUSF9BVVRPCTB4MTAKLQotLyogQml0cyBpbiBJUlFJbmZvMSBmaWVsZCAqLwotI2RlZmluZSBJUlFfTk1JX0lECQkweDAxCi0jZGVmaW5lIElSUV9JT0NLX0lECQkweDAyCi0jZGVmaW5lIElSUV9CRVJSX0lECQkweDA0Ci0jZGVmaW5lIElSUV9WRU5EX0lECQkweDA4Ci0jZGVmaW5lIElSUV9JTkZPMl9WQUxJRAkJMHgxMAotI2RlZmluZSBJUlFfTEVWRUxfSUQJCTB4MjAKLSNkZWZpbmUgSVJRX1BVTFNFX0lECQkweDQwCi0jZGVmaW5lIElSUV9TSEFSRV9JRAkJMHg4MAotCi10eXBlZGVmIHN0cnVjdCBldmVudG1hc2tfdCB7Ci0gICAgdV9pbnQJQXR0cmlidXRlczsKLSAgICB1X2ludAlFdmVudE1hc2s7Ci19IGV2ZW50bWFza190OwotCi0jZGVmaW5lIENPTkZfRVZFTlRfTUFTS19WQUxJRAkweDAxCi0KIC8qIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIHByZXNlbnQgKi8KICNkZWZpbmUgUFJFU0VOVF9PUFRJT04JCTB4MDAxCiAjZGVmaW5lIFBSRVNFTlRfU1RBVFVTCQkweDAwMgpAQCAtMTQzLDE4ICs2OCw2IEBACiAjZGVmaW5lIFBSRVNFTlRfSU9CQVNFXzMJMHgxMDAKICNkZWZpbmUgUFJFU0VOVF9JT1NJWkUJCTB4MjAwCiAKLS8qIEZvciBHZXRNZW1QYWdlLCBNYXBNZW1QYWdlICovCi10eXBlZGVmIHN0cnVjdCBtZW1yZXFfdCB7Ci0gICAgdV9pbnQJQ2FyZE9mZnNldDsKLSAgICBwYWdlX3QJUGFnZTsKLX0gbWVtcmVxX3Q7Ci0KLS8qIEZvciBNb2RpZnlXaW5kb3cgKi8KLXR5cGVkZWYgc3RydWN0IG1vZHdpbl90IHsKLSAgICB1X2ludAlBdHRyaWJ1dGVzOwotICAgIHVfaW50CUFjY2Vzc1NwZWVkOwotfSBtb2R3aW5fdDsKLQogLyogRm9yIFJlcXVlc3RXaW5kb3cgKi8KIHR5cGVkZWYgc3RydWN0IHdpbl9yZXFfdCB7CiAgICAgdV9pbnQJQXR0cmlidXRlczsKQEAgLTE2NCw2MSArNzcsMTkgQEAKIH0gd2luX3JlcV90OwogCiAvKiBBdHRyaWJ1dGVzIGZvciBSZXF1ZXN0V2luZG93ICovCi0jZGVmaW5lIFdJTl9BRERSX1NQQUNFCQkweDAwMDEKLSNkZWZpbmUgV0lOX0FERFJfU1BBQ0VfTUVNCTB4MDAwMAotI2RlZmluZSBXSU5fQUREUl9TUEFDRV9JTwkweDAwMDEKLSNkZWZpbmUgV0lOX01FTU9SWV9UWVBFCQkweDAwMDIKLSNkZWZpbmUgV0lOX01FTU9SWV9UWVBFX0NNCTB4MDAwMAotI2RlZmluZSBXSU5fTUVNT1JZX1RZUEVfQU0JMHgwMDAyCi0jZGVmaW5lIFdJTl9FTkFCTEUJCTB4MDAwNAotI2RlZmluZSBXSU5fREFUQV9XSURUSAkJMHgwMDE4Ci0jZGVmaW5lIFdJTl9EQVRBX1dJRFRIXzgJMHgwMDAwCi0jZGVmaW5lIFdJTl9EQVRBX1dJRFRIXzE2CTB4MDAwOAotI2RlZmluZSBXSU5fREFUQV9XSURUSF8zMgkweDAwMTAKLSNkZWZpbmUgV0lOX1BBR0VECQkweDAwMjAKLSNkZWZpbmUgV0lOX1NIQVJFRAkJMHgwMDQwCi0jZGVmaW5lIFdJTl9GSVJTVF9TSEFSRUQJMHgwMDgwCi0jZGVmaW5lIFdJTl9VU0VfV0FJVAkJMHgwMTAwCi0jZGVmaW5lIFdJTl9TVFJJQ1RfQUxJR04JMHgwMjAwCi0jZGVmaW5lIFdJTl9NQVBfQkVMT1dfMU1CCTB4MDQwMAotI2RlZmluZSBXSU5fUFJFRkVUQ0gJCTB4MDgwMAotI2RlZmluZSBXSU5fQ0FDSEVBQkxFCQkweDEwMDAKLSNkZWZpbmUgV0lOX0JBUl9NQVNLCQkweGUwMDAKLSNkZWZpbmUgV0lOX0JBUl9TSElGVAkJMTMKKyNkZWZpbmUgV0lOX01FTU9SWV9UWVBFX0NNCTB4MDAgLyogZGVmYXVsdCAqLworI2RlZmluZSBXSU5fTUVNT1JZX1RZUEVfQU0JMHgyMCAvKiBNQVBfQVRUUklCICovCisjZGVmaW5lIFdJTl9EQVRBX1dJRFRIXzgJMHgwMCAvKiBkZWZhdWx0ICovCisjZGVmaW5lIFdJTl9EQVRBX1dJRFRIXzE2CTB4MDIgLyogTUFQXzE2QklUICovCisjZGVmaW5lIFdJTl9FTkFCTEUJCTB4MDEgLyogTUFQX0FDVElWRSAqLworI2RlZmluZSBXSU5fVVNFX1dBSVQJCTB4NDAgLyogTUFQX1VTRV9XQUlUICovCiAKLXR5cGVkZWYgc3RydWN0IGVycm9yX2luZm9fdCB7Ci0gICAgaW50CQlmdW5jOwotICAgIGludAkJcmV0Y29kZTsKLX0gZXJyb3JfaW5mb190OwotCi0vKiBGbGFnIHRvIGJpbmQgdG8gYWxsIGZ1bmN0aW9ucyAqLwotI2RlZmluZSBCSU5EX0ZOX0FMTAkweGZmCi0KLS8qIEV2ZW50cyAqLwotI2RlZmluZSBDU19FVkVOVF9QUklfTE9XCQkwCi0jZGVmaW5lIENTX0VWRU5UX1BSSV9ISUdICQkxCi0KLSNkZWZpbmUgQ1NfRVZFTlRfV1JJVEVfUFJPVEVDVAkJMHgwMDAwMDEKLSNkZWZpbmUgQ1NfRVZFTlRfQ0FSRF9MT0NLCQkweDAwMDAwMgotI2RlZmluZSBDU19FVkVOVF9DQVJEX0lOU0VSVElPTgkJMHgwMDAwMDQKLSNkZWZpbmUgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMCQkweDAwMDAwOAotI2RlZmluZSBDU19FVkVOVF9CQVRURVJZX0RFQUQJCTB4MDAwMDEwCi0jZGVmaW5lIENTX0VWRU5UX0JBVFRFUllfTE9XCQkweDAwMDAyMAotI2RlZmluZSBDU19FVkVOVF9SRUFEWV9DSEFOR0UJCTB4MDAwMDQwCi0jZGVmaW5lIENTX0VWRU5UX0NBUkRfREVURUNUCQkweDAwMDA4MAotI2RlZmluZSBDU19FVkVOVF9SRVNFVF9SRVFVRVNUCQkweDAwMDEwMAotI2RlZmluZSBDU19FVkVOVF9SRVNFVF9QSFlTSUNBTAkJMHgwMDAyMDAKLSNkZWZpbmUgQ1NfRVZFTlRfQ0FSRF9SRVNFVAkJMHgwMDA0MDAKLSNkZWZpbmUgQ1NfRVZFTlRfUkVHSVNUUkFUSU9OX0NPTVBMRVRFCTB4MDAwODAwCi0jZGVmaW5lIENTX0VWRU5UX1BNX1NVU1BFTkQJCTB4MDAyMDAwCi0jZGVmaW5lIENTX0VWRU5UX1BNX1JFU1VNRQkJMHgwMDQwMDAKLSNkZWZpbmUgQ1NfRVZFTlRfSU5TRVJUSU9OX1JFUVVFU1QJMHgwMDgwMDAKLSNkZWZpbmUgQ1NfRVZFTlRfRUpFQ1RJT05fUkVRVUVTVAkweDAxMDAwMAotI2RlZmluZSBDU19FVkVOVF9NVERfUkVRVUVTVAkJMHgwMjAwMDAKLSNkZWZpbmUgQ1NfRVZFTlRfRVJBU0VfQ09NUExFVEUJCTB4MDQwMDAwCi0jZGVmaW5lIENTX0VWRU5UX1JFUVVFU1RfQVRURU5USU9OCTB4MDgwMDAwCi0jZGVmaW5lIENTX0VWRU5UX0NCX0RFVEVDVAkJMHgxMDAwMDAKLSNkZWZpbmUgQ1NfRVZFTlRfM1ZDQVJECQkJMHgyMDAwMDAKLSNkZWZpbmUgQ1NfRVZFTlRfWFZDQVJECQkJMHg0MDAwMDAKKyNkZWZpbmUgV0lOX0ZMQUdTX01BUAkJMHg2MyAvKiBNQVBfQVRUUklCIHwgTUFQXzE2QklUIHwgTUFQX0FDVElWRSB8CisJCQkJCU1BUF9VU0VfV0FJVCAqLworI2RlZmluZSBXSU5fRkxBR1NfUkVRCQkweDFjIC8qIG1hcHBpbmcgdG8gc29ja2V0LT53aW5baV06CisJCQkJCTB4MDQgLT4gMAorCQkJCQkweDA4IC0+IDEKKwkJCQkJMHgwYyAtPiAyCisJCQkJCTB4MTAgLT4gMyAqLwogCiAjZW5kaWYgLyogX0xJTlVYX0NTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGNtY2lhL2NzX3R5cGVzLmggYi9pbmNsdWRlL3BjbWNpYS9jc190eXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWUzYjgzLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvcGNtY2lhL2NzX3R5cGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKgotICogY3NfdHlwZXMuaAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIHRoZSBvcmlnaW5hbCBjb2RlIGlzIERhdmlkIEEuIEhpbmRzCi0gKiA8ZGFoaW5kc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LiAgUG9ydGlvbnMgY3JlYXRlZCBieSBEYXZpZCBBLiBIaW5kcwotICogYXJlIENvcHlyaWdodCAoQykgMTk5OSBEYXZpZCBBLiBIaW5kcy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogKEMpIDE5OTkgICAgICAgICAgICAgRGF2aWQgQS4gSGluZHMKLSAqLwotCi0jaWZuZGVmIF9MSU5VWF9DU19UWVBFU19ICi0jZGVmaW5lIF9MSU5VWF9DU19UWVBFU19ICi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLQotdHlwZWRlZiB1X3Nob3J0CXNvY2tldF90OwotdHlwZWRlZiB1X2ludAlldmVudF90OwotdHlwZWRlZiB1X2NoYXIJY2lzZGF0YV90OwotdHlwZWRlZiB1X3Nob3J0CXBhZ2VfdDsKLQotdHlwZWRlZiB1bnNpZ25lZCBsb25nIHdpbmRvd19oYW5kbGVfdDsKLQotc3RydWN0IHJlZ2lvbl90OwotdHlwZWRlZiBzdHJ1Y3QgcmVnaW9uX3QgKm1lbW9yeV9oYW5kbGVfdDsKLQotI2lmbmRlZiBERVZfTkFNRV9MRU4KLSNkZWZpbmUgREVWX05BTUVfTEVOIDMyCi0jZW5kaWYKLQotdHlwZWRlZiBjaGFyIGRldl9pbmZvX3RbREVWX05BTUVfTEVOXTsKLQotI2VuZGlmIC8qIF9MSU5VWF9DU19UWVBFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9kcy5oIGIvaW5jbHVkZS9wY21jaWEvZHMuaAppbmRleCBjMTgwMTY1Li43MGM1OGVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9kcy5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL2RzLmgKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KICNlbmRpZgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2RldmljZV9pZC5oPgogCiAjaWZkZWYgX19LRVJORUxfXwpAQCAtMzcsNiArMzYsOCBAQAogc3RydWN0IGNvbmZpZ190Owogc3RydWN0IG5ldF9kZXZpY2U7CiAKK3R5cGVkZWYgc3RydWN0IHJlc291cmNlICp3aW5kb3dfaGFuZGxlX3Q7CisKIC8qIGR5bmFtaWMgZGV2aWNlIElEcyBmb3IgUENNQ0lBIGRldmljZSBkcml2ZXJzLiBTZWUKICAqIERvY3VtZW50YXRpb24vcGNtY2lhL2RyaXZlci50eHQgZm9yIGRldGFpbHMuCiAqLwpAQCAtNjIsNiArNjMsMTcgQEAKIGludCBwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY21jaWFfZHJpdmVyICpkcml2ZXIpOwogdm9pZCBwY21jaWFfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjbWNpYV9kcml2ZXIgKmRyaXZlcik7CiAKKy8qIGZvciBzdHJ1Y3QgcmVzb3VyY2UgKiBhcnJheSBlbWJlZGRlZCBpbiBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqLworZW51bSB7CisJUENNQ0lBX0lPUE9SVF8wLAorCVBDTUNJQV9JT1BPUlRfMSwKKwlQQ01DSUFfSU9NRU1fMCwKKwlQQ01DSUFfSU9NRU1fMSwKKwlQQ01DSUFfSU9NRU1fMiwKKwlQQ01DSUFfSU9NRU1fMywKKwlQQ01DSUFfTlVNX1JFU09VUkNFUywKK307CisKIHN0cnVjdCBwY21jaWFfZGV2aWNlIHsKIAkvKiB0aGUgc29ja2V0IGFuZCB0aGUgZGV2aWNlX25vIFtmb3IgbXVsdGlmdW5jdGlvbiBkZXZpY2VzXQogCSAgIHVuaXF1ZWx5IGRlZmluZSBhIHBjbWNpYV9kZXZpY2UgKi8KQEAgLTc5LDEzICs5MSwxNCBAQAogCXN0cnVjdCBsaXN0X2hlYWQJc29ja2V0X2RldmljZV9saXN0OwogCiAJLyogZGVwcmVjYXRlZCwgd2lsbCBiZSBjbGVhbmVkIHVwIHNvb24gKi8KLQl1X2ludAkJCW9wZW47Ci0JaW9fcmVxX3QJCWlvOwogCWNvbmZpZ19yZXFfdAkJY29uZjsKIAl3aW5kb3dfaGFuZGxlX3QJCXdpbjsKIAogCS8qIGRldmljZSBzZXR1cCAqLwogCXVuc2lnbmVkIGludAkJaXJxOworCXN0cnVjdCByZXNvdXJjZQkJKnJlc291cmNlW1BDTUNJQV9OVU1fUkVTT1VSQ0VTXTsKKworCXVuc2lnbmVkIGludAkJaW9fbGluZXM7IC8qIG51bWJlciBvZiBJL08gbGluZXMgKi8KIAogCS8qIElzIHRoZSBkZXZpY2Ugc3VzcGVuZGVkPyAqLwogCXUxNgkJCXN1c3BlbmRlZDoxOwpAQCAtMTE3LDEzICsxMzAsOSBAQAogCXU2NAkJCWRtYV9tYXNrOwogCXN0cnVjdCBkZXZpY2UJCWRldjsKIAotI2lmZGVmIENPTkZJR19QQ01DSUFfSU9DVEwKLQkvKiBkZXZpY2UgZHJpdmVyIHdhbnRlZCBieSBjYXJkbWdyICovCi0Jc3RydWN0IHBjbWNpYV9kcml2ZXIJKmNhcmRtZ3I7Ci0jZW5kaWYKLQogCS8qIGRhdGEgcHJpdmF0ZSB0byBkcml2ZXJzICovCiAJdm9pZAkJCSpwcml2OworCXVuc2lnbmVkIGludAkJb3BlbjsKIH07CiAKICNkZWZpbmUgdG9fcGNtY2lhX2RldihuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IHBjbWNpYV9kZXZpY2UsIGRldikKQEAgLTE3OCwxMSArMTg3LDExIEBACiBpbnQgcGNtY2lhX3Jlc2V0X2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7CiAKIC8qIENJUyBjb25maWcgKi8KLWludCBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAotCQkJCQkgY29uZl9yZWdfdCAqcmVnKTsKK2ludCBwY21jaWFfcmVhZF9jb25maWdfYnl0ZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIG9mZl90IHdoZXJlLCB1OCAqdmFsKTsKK2ludCBwY21jaWFfd3JpdGVfY29uZmlnX2J5dGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBvZmZfdCB3aGVyZSwgdTggdmFsKTsKIAogLyogZGV2aWNlIGNvbmZpZ3VyYXRpb24gKi8KLWludCBwY21jaWFfcmVxdWVzdF9pbyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGlvX3JlcV90ICpyZXEpOworaW50IHBjbWNpYV9yZXF1ZXN0X2lvKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CiAKIGludCBfX211c3RfY2hlY2sKIF9fcGNtY2lhX3JlcXVlc3RfZXhjbHVzaXZlX2lycShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCkBAIC0yMDQsMjE1ICsyMTMsMjcgQEAKIAkJCSAgd2luZG93X2hhbmRsZV90ICp3aCk7CiBpbnQgcGNtY2lhX3JlbGVhc2Vfd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldiwgd2luZG93X2hhbmRsZV90IHdpbik7CiBpbnQgcGNtY2lhX21hcF9tZW1fcGFnZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIHdpbmRvd19oYW5kbGVfdCB3aW4sCi0JCQltZW1yZXFfdCAqcmVxKTsKKwkJCXVuc2lnbmVkIGludCBvZmZzZXQpOwogCiBpbnQgcGNtY2lhX21vZGlmeV9jb25maWd1cmF0aW9uKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgbW9kY29uZl90ICptb2QpOwogdm9pZCBwY21jaWFfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKIAorLyogSU8gcG9ydHMgKi8KKyNkZWZpbmUgSU9fREFUQV9QQVRIX1dJRFRICTB4MTgKKyNkZWZpbmUgSU9fREFUQV9QQVRIX1dJRFRIXzgJMHgwMAorI2RlZmluZSBJT19EQVRBX1BBVEhfV0lEVEhfMTYJMHgwOAorI2RlZmluZSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTwkweDEwCisKKy8qIGNvbnZlcnQgZmxhZyBmb3VuZCBpbiBjZmd0YWJsZSB0byBkYXRhIHBhdGggd2lkdGggcGFyYW1ldGVyICovCitzdGF0aWMgaW5saW5lIGludCBwY21jaWFfaW9fY2ZnX2RhdGFfd2lkdGgodW5zaWduZWQgaW50IGZsYWdzKQoreworCWlmICghKGZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQorCQlyZXR1cm4gSU9fREFUQV9QQVRIX1dJRFRIXzE2OworCWlmICghKGZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKKwkJcmV0dXJuIElPX0RBVEFfUEFUSF9XSURUSF84OworCXJldHVybiBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKK30KKwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAotCi0KLS8qIEJlbG93LCB0aGVyZSBhcmUgb25seSBkZWZpbml0aW9ucyB3aGljaCBhcmUgdXNlZCBieQotICogLSB0aGUgUENNQ0lBIGlvY3RsCi0gKiAtIGRlcHJlY2F0ZWQgUENNQ0lBIHVzZXJzcGFjZSB0b29scyBvbmx5Ci0gKgotICogaGVyZSBiZSBkcmFnb25zIC4uLiBoZXJlIGJlIGRyYWdvbnMgLi4uIGhlcmUgYmUgZHJhZ29ucyAuLi4gaGVyZSBiZSBkcmFnCi0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1BDTUNJQV9JT0NUTCkgfHwgIWRlZmluZWQoX19LRVJORUxfXykKLQotI2lmIGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX21pcHNfXykgfHwgZGVmaW5lZChfX2F2cjMyX18pIHx8IFwKLQlkZWZpbmVkKF9fYmZpbl9fKQotLyogVGhpcyAoaW9hZGRyX3QpIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlICYgaGVuY2UgY2Fubm90IGJlIGNoYW5nZWQuICovCi10eXBlZGVmIHVfaW50ICAgaW9hZGRyX3Q7Ci0jZWxzZQotdHlwZWRlZiB1X3Nob3J0CWlvYWRkcl90OwotI2VuZGlmCi0KLS8qIGZvciBBZGp1c3RSZXNvdXJjZUluZm8gKi8KLXR5cGVkZWYgc3RydWN0IGFkanVzdF90IHsKLQl1X2ludAkJCUFjdGlvbjsKLQl1X2ludAkJCVJlc291cmNlOwotCXVfaW50CQkJQXR0cmlidXRlczsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBtZW1vcnkgewotCQkJdV9sb25nCQlCYXNlOwotCQkJdV9sb25nCQlTaXplOwotCQl9IG1lbW9yeTsKLQkJc3RydWN0IGlvIHsKLQkJCWlvYWRkcl90CUJhc2VQb3J0OwotCQkJaW9hZGRyX3QJTnVtUG9ydHM7Ci0JCQl1X2ludAkJSU9BZGRyTGluZXM7Ci0JCX0gaW87Ci0JCXN0cnVjdCBpcnEgewotCQkJdV9pbnQJCUlSUTsKLQkJfSBpcnE7Ci0JfSByZXNvdXJjZTsKLX0gYWRqdXN0X3Q7Ci0KLS8qIEFjdGlvbiBmaWVsZCAqLwotI2RlZmluZSBSRU1PVkVfTUFOQUdFRF9SRVNPVVJDRQkJMQotI2RlZmluZSBBRERfTUFOQUdFRF9SRVNPVVJDRQkJMgotI2RlZmluZSBHRVRfRklSU1RfTUFOQUdFRF9SRVNPVVJDRQkzCi0jZGVmaW5lIEdFVF9ORVhUX01BTkFHRURfUkVTT1VSQ0UJNAotLyogUmVzb3VyY2UgZmllbGQgKi8KLSNkZWZpbmUgUkVTX01FTU9SWV9SQU5HRQkJMQotI2RlZmluZSBSRVNfSU9fUkFOR0UJCQkyCi0jZGVmaW5lIFJFU19JUlEJCQkJMwotLyogQXR0cmlidXRlIGZpZWxkICovCi0jZGVmaW5lIFJFU19JUlFfVFlQRQkJCTB4MDMKLSNkZWZpbmUgUkVTX0lSUV9UWVBFX0VYQ0xVU0lWRQkJMAotI2RlZmluZSBSRVNfSVJRX1RZUEVfVElNRQkJMQotI2RlZmluZSBSRVNfSVJRX1RZUEVfRFlOQU1JQwkJMgotI2RlZmluZSBSRVNfSVJRX0NTQwkJCTB4MDQKLSNkZWZpbmUgUkVTX1NIQVJFRAkJCTB4MDgKLSNkZWZpbmUgUkVTX1JFU0VSVkVECQkJMHgxMAotI2RlZmluZSBSRVNfQUxMT0NBVEVECQkJMHgyMAotI2RlZmluZSBSRVNfUkVNT1ZFRAkJCTB4NDAKLQotCi10eXBlZGVmIHN0cnVjdCB0dXBsZV9wYXJzZV90IHsKLQl0dXBsZV90CQkJdHVwbGU7Ci0JY2lzZGF0YV90CQlkYXRhWzI1NV07Ci0JY2lzcGFyc2VfdAkJcGFyc2U7Ci19IHR1cGxlX3BhcnNlX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHdpbl9pbmZvX3QgewotCXdpbmRvd19oYW5kbGVfdAkJaGFuZGxlOwotCXdpbl9yZXFfdAkJd2luZG93OwotCW1lbXJlcV90CQltYXA7Ci19IHdpbl9pbmZvX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGJpbmRfaW5mb190IHsKLQlkZXZfaW5mb190CQlkZXZfaW5mbzsKLQl1X2NoYXIJCQlmdW5jdGlvbjsKLQlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqaW5zdGFuY2U7Ci0JY2hhcgkJCW5hbWVbREVWX05BTUVfTEVOXTsKLQl1X3Nob3J0CQkJbWFqb3IsIG1pbm9yOwotCXZvaWQJCQkqbmV4dDsKLX0gYmluZF9pbmZvX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IG10ZF9pbmZvX3QgewotCWRldl9pbmZvX3QgICAgIAkJZGV2X2luZm87Ci0JdV9pbnQJCQlBdHRyaWJ1dGVzOwotCXVfaW50CQkJQ2FyZE9mZnNldDsKLX0gbXRkX2luZm9fdDsKLQotdHlwZWRlZiBzdHJ1Y3QgcmVnaW9uX2luZm9fdCB7Ci0JdV9pbnQJCQlBdHRyaWJ1dGVzOwotCXVfaW50CQkJQ2FyZE9mZnNldDsKLQl1X2ludAkJCVJlZ2lvblNpemU7Ci0JdV9pbnQJCQlBY2Nlc3NTcGVlZDsKLQl1X2ludAkJCUJsb2NrU2l6ZTsKLQl1X2ludAkJCVBhcnRNdWx0aXBsZTsKLQl1X2NoYXIJCQlKZWRlY01mciwgSmVkZWNJbmZvOwotCW1lbW9yeV9oYW5kbGVfdAkJbmV4dDsKLX0gcmVnaW9uX2luZm9fdDsKLQotI2RlZmluZSBSRUdJT05fVFlQRQkJMHgwMDAxCi0jZGVmaW5lIFJFR0lPTl9UWVBFX0NNCQkweDAwMDAKLSNkZWZpbmUgUkVHSU9OX1RZUEVfQU0JCTB4MDAwMQotI2RlZmluZSBSRUdJT05fUFJFRkVUQ0gJCTB4MDAwOAotI2RlZmluZSBSRUdJT05fQ0FDSEVBQkxFCTB4MDAxMAotI2RlZmluZSBSRUdJT05fQkFSX01BU0sJCTB4ZTAwMAotI2RlZmluZSBSRUdJT05fQkFSX1NISUZUCTEzCi0KLS8qIEZvciBSZXBsYWNlQ0lTICovCi10eXBlZGVmIHN0cnVjdCBjaXNkdW1wX3QgewotCXVfaW50CQkJTGVuZ3RoOwotCWNpc2RhdGFfdAkJRGF0YVtDSVNUUExfTUFYX0NJU19TSVpFXTsKLX0gY2lzZHVtcF90OwotCi0vKiBmb3IgR2V0Q29uZmlndXJhdGlvbkluZm8gKi8KLXR5cGVkZWYgc3RydWN0IGNvbmZpZ19pbmZvX3QgewotCXVfY2hhcgkJCUZ1bmN0aW9uOwotCXVfaW50CQkJQXR0cmlidXRlczsKLQl1X2ludAkJCVZjYywgVnBwMSwgVnBwMjsKLQl1X2ludAkJCUludFR5cGU7Ci0JdV9pbnQJCQlDb25maWdCYXNlOwotCXVfY2hhcgkJCVN0YXR1cywgUGluLCBDb3B5LCBPcHRpb24sIEV4dFN0YXR1czsKLQl1X2ludAkJCVByZXNlbnQ7Ci0JdV9pbnQJCQlDYXJkVmFsdWVzOwotCXVfaW50CQkJQXNzaWduZWRJUlE7Ci0JdV9pbnQJCQlJUlFBdHRyaWJ1dGVzOwotCWlvYWRkcl90CQlCYXNlUG9ydDE7Ci0JaW9hZGRyX3QJCU51bVBvcnRzMTsKLQl1X2ludAkJCUF0dHJpYnV0ZXMxOwotCWlvYWRkcl90CQlCYXNlUG9ydDI7Ci0JaW9hZGRyX3QJCU51bVBvcnRzMjsKLQl1X2ludAkJCUF0dHJpYnV0ZXMyOwotCXVfaW50CQkJSU9BZGRyTGluZXM7Ci19IGNvbmZpZ19pbmZvX3Q7Ci0KLS8qIEZvciBWYWxpZGF0ZUNJUyAqLwotdHlwZWRlZiBzdHJ1Y3QgY2lzaW5mb190IHsKLQl1X2ludAkJCUNoYWluczsKLX0gY2lzaW5mb190OwotCi10eXBlZGVmIHN0cnVjdCBjc19zdGF0dXNfdCB7Ci0JdV9jaGFyCQkJRnVuY3Rpb247Ci0JZXZlbnRfdCAJCUNhcmRTdGF0ZTsKLQlldmVudF90CQkJU29ja2V0U3RhdGU7Ci19IGNzX3N0YXR1c190OwotCi10eXBlZGVmIHVuaW9uIGRzX2lvY3RsX2FyZ190IHsKLQlhZGp1c3RfdAkJYWRqdXN0OwotCWNvbmZpZ19pbmZvX3QJCWNvbmZpZzsKLQl0dXBsZV90CQkJdHVwbGU7Ci0JdHVwbGVfcGFyc2VfdAkJdHVwbGVfcGFyc2U7Ci0JY2xpZW50X3JlcV90CQljbGllbnRfcmVxOwotCWNzX3N0YXR1c190CQlzdGF0dXM7Ci0JY29uZl9yZWdfdAkJY29uZl9yZWc7Ci0JY2lzaW5mb190CQljaXNpbmZvOwotCXJlZ2lvbl9pbmZvX3QJCXJlZ2lvbjsKLQliaW5kX2luZm9fdAkJYmluZF9pbmZvOwotCW10ZF9pbmZvX3QJCW10ZF9pbmZvOwotCXdpbl9pbmZvX3QJCXdpbl9pbmZvOwotCWNpc2R1bXBfdAkJY2lzZHVtcDsKLX0gZHNfaW9jdGxfYXJnX3Q7Ci0KLSNkZWZpbmUgRFNfQURKVVNUX1JFU09VUkNFX0lORk8JCQlfSU9XUignZCcsICAyLCBhZGp1c3RfdCkKLSNkZWZpbmUgRFNfR0VUX0NPTkZJR1VSQVRJT05fSU5GTwkJX0lPV1IoJ2QnLCAgMywgY29uZmlnX2luZm9fdCkKLSNkZWZpbmUgRFNfR0VUX0ZJUlNUX1RVUExFCQkJX0lPV1IoJ2QnLCAgNCwgdHVwbGVfdCkKLSNkZWZpbmUgRFNfR0VUX05FWFRfVFVQTEUJCQlfSU9XUignZCcsICA1LCB0dXBsZV90KQotI2RlZmluZSBEU19HRVRfVFVQTEVfREFUQQkJCV9JT1dSKCdkJywgIDYsIHR1cGxlX3BhcnNlX3QpCi0jZGVmaW5lIERTX1BBUlNFX1RVUExFCQkJCV9JT1dSKCdkJywgIDcsIHR1cGxlX3BhcnNlX3QpCi0jZGVmaW5lIERTX1JFU0VUX0NBUkQJCQkJX0lPICAoJ2QnLCAgOCkKLSNkZWZpbmUgRFNfR0VUX1NUQVRVUwkJCQlfSU9XUignZCcsICA5LCBjc19zdGF0dXNfdCkKLSNkZWZpbmUgRFNfQUNDRVNTX0NPTkZJR1VSQVRJT05fUkVHSVNURVIJX0lPV1IoJ2QnLCAxMCwgY29uZl9yZWdfdCkKLSNkZWZpbmUgRFNfVkFMSURBVEVfQ0lTCQkJCV9JT1IgKCdkJywgMTEsIGNpc2luZm9fdCkKLSNkZWZpbmUgRFNfU1VTUEVORF9DQVJECQkJCV9JTyAgKCdkJywgMTIpCi0jZGVmaW5lIERTX1JFU1VNRV9DQVJECQkJCV9JTyAgKCdkJywgMTMpCi0jZGVmaW5lIERTX0VKRUNUX0NBUkQJCQkJX0lPICAoJ2QnLCAxNCkKLSNkZWZpbmUgRFNfSU5TRVJUX0NBUkQJCQkJX0lPICAoJ2QnLCAxNSkKLSNkZWZpbmUgRFNfR0VUX0ZJUlNUX1JFR0lPTgkJCV9JT1dSKCdkJywgMTYsIHJlZ2lvbl9pbmZvX3QpCi0jZGVmaW5lIERTX0dFVF9ORVhUX1JFR0lPTgkJCV9JT1dSKCdkJywgMTcsIHJlZ2lvbl9pbmZvX3QpCi0jZGVmaW5lIERTX1JFUExBQ0VfQ0lTCQkJCV9JT1dSKCdkJywgMTgsIGNpc2R1bXBfdCkKLSNkZWZpbmUgRFNfR0VUX0ZJUlNUX1dJTkRPVwkJCV9JT1IgKCdkJywgMTksIHdpbl9pbmZvX3QpCi0jZGVmaW5lIERTX0dFVF9ORVhUX1dJTkRPVwkJCV9JT1dSKCdkJywgMjAsIHdpbl9pbmZvX3QpCi0jZGVmaW5lIERTX0dFVF9NRU1fUEFHRQkJCQlfSU9XUignZCcsIDIxLCB3aW5faW5mb190KQotCi0jZGVmaW5lIERTX0JJTkRfUkVRVUVTVAkJCQlfSU9XUignZCcsIDYwLCBiaW5kX2luZm9fdCkKLSNkZWZpbmUgRFNfR0VUX0RFVklDRV9JTkZPCQkJX0lPV1IoJ2QnLCA2MSwgYmluZF9pbmZvX3QpCi0jZGVmaW5lIERTX0dFVF9ORVhUX0RFVklDRQkJCV9JT1dSKCdkJywgNjIsIGJpbmRfaW5mb190KQotI2RlZmluZSBEU19VTkJJTkRfUkVRVUVTVAkJCV9JT1cgKCdkJywgNjMsIGJpbmRfaW5mb190KQotI2RlZmluZSBEU19CSU5EX01URAkJCQlfSU9XUignZCcsIDY0LCBtdGRfaW5mb190KQotCi0KLS8qIHVzZWQgaW4gdXNlcnNwYWNlIG9ubHkgKi8KLSNkZWZpbmUgQ1NfSU5fVVNFCQkJMHgxZQotCi0jZGVmaW5lIElORk9fTUFTVEVSX0NMSUVOVAkweDAxCi0jZGVmaW5lIElORk9fSU9fQ0xJRU5UCQkweDAyCi0jZGVmaW5lIElORk9fTVREX0NMSUVOVAkJMHgwNAotI2RlZmluZSBJTkZPX01FTV9DTElFTlQJCTB4MDgKLSNkZWZpbmUgTUFYX05VTV9DTElFTlRTCQkzCi0KLSNkZWZpbmUgSU5GT19DQVJEX1NIQVJFCQkweDEwCi0jZGVmaW5lIElORk9fQ0FSRF9FWENMCQkweDIwCi0KLQotI2VuZGlmIC8qICFkZWZpbmVkKF9fS0VSTkVMX18pIHx8IGRlZmluZWQoQ09ORklHX1BDTUNJQV9JT0NUTCkgKi8KLQogI2VuZGlmIC8qIF9MSU5VWF9EU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9zcy5oIGIvaW5jbHVkZS9wY21jaWEvc3MuaAppbmRleCA3NjQyODFiLi42MjZiNjNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9zcy5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL3NzLmgKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgkvKiB0YXNrX3N0cnVjdCwgY29tcGxldGlvbiAqLwogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpZmRlZiBDT05GSUdfQ0FSREJVUwogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpAQCAtMTYyLDE3ICsxNjEsMTAgQEAKIAl1X2ludAkJCQlwY2lfaXJxOwogCXN0cnVjdCBwY2lfZGV2CQkJKmNiX2RldjsKIAotCiAJLyogc29ja2V0IHNldHVwIGlzIGRvbmUgc28gcmVzb3VyY2VzIHNob3VsZCBiZSBhYmxlIHRvIGJlIGFsbG9jYXRlZC4KIAkgKiBPbmx5IGlmIHNldCB0byAxLCBjYWxscyB0byBmaW5kX3tpbyxtZW19X3JlZ2lvbiBhcmUgaGFuZGxlZCwgYW5kCiAJICogaW5zZXJ0aW8gZXZlbnRzIGFyZSBhY3R1YWxseSBtYW5hZ2VkIGJ5IHRoZSBQQ01DSUEgbGF5ZXIuKi8KLQl1OAkJCQlyZXNvdXJjZV9zZXR1cF9kb25lOjE7Ci0KLQkvKiBJdCdzIG9sZCBpZiByZXNvdXJjZSBzZXR1cCBpcyBkb25lIHVzaW5nIGFkanVzdF9yZXNvdXJjZV9pbmZvKCkgKi8KLQl1OAkJCQlyZXNvdXJjZV9zZXR1cF9vbGQ6MTsKLQl1OAkJCQlyZXNvdXJjZV9zZXR1cF9uZXc6MTsKLQotCXU4CQkJCXJlc2VydmVkOjU7CisJdTgJCQkJcmVzb3VyY2Vfc2V0dXBfZG9uZTsKIAogCS8qIHNvY2tldCBvcGVyYXRpb25zICovCiAJc3RydWN0IHBjY2FyZF9vcGVyYXRpb25zCSpvcHM7CkBAIC0yMTgsMTUgKzIxMCw4IEBACiAJICogaW5jb3JyZWN0bmVzcyBhbmQgY2hhbmdlICovCiAJdTgJCQkJZGV2aWNlX2NvdW50OwogCi0JLyogMTYtYml0IHN0YXRlOiAqLwotCXN0cnVjdCB7Ci0JCS8qICJtYXN0ZXIiIGlvY3RsIGlzIHVzZWQgKi8KLQkJdTgJCQlidXN5OjE7Ci0JCS8qIHRoZSBQQ01DSUEgY2FyZCBjb25zaXN0cyBvZiB0d28gcHNldWRvIGRldmljZXMgKi8KLQkJdTgJCQloYXNfcGZjOjE7Ci0KLQkJdTgJCQlyZXNlcnZlZDo2OwotCX0gcGNtY2lhX3N0YXRlOworCS8qIGRvZXMgdGhlIFBDTUNJQSBjYXJkIGNvbnNpc3Qgb2YgdHdvIHBzZXVkbyBkZXZpY2VzPyAqLworCXU4CQkJCXBjbWNpYV9wZmM7CiAKIAkvKiBub24temVybyBpZiBQQ01DSUEgY2FyZCBpcyBwcmVzZW50ICovCiAJYXRvbWljX3QJCQlwcmVzZW50OwpAQCAtMjM0LDEwICsyMTksNiBAQAogCS8qIElSUSB0byBiZSB1c2VkIGJ5IFBDTUNJQSBkZXZpY2VzLiBNYXkgbm90IGJlIElSUSAwLiAqLwogCXVuc2lnbmVkIGludAkJCXBjbWNpYV9pcnE7CiAKLSNpZmRlZiBDT05GSUdfUENNQ0lBX0lPQ1RMCi0Jc3RydWN0IHVzZXJfaW5mb190CQkqdXNlcjsKLQl3YWl0X3F1ZXVlX2hlYWRfdAkJcXVldWU7Ci0jZW5kaWYgLyogQ09ORklHX1BDTUNJQV9JT0NUTCAqLwogI2VuZGlmIC8qIENPTkZJR19QQ01DSUEgKi8KIAogCS8qIHNvY2tldCBkZXZpY2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcnhycGMvcGFja2V0LmggYi9pbmNsdWRlL3J4cnBjL3BhY2tldC5oCmluZGV4IGI2OWU2ZTEuLjliMmMzMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcnhycGMvcGFja2V0LmgKKysrIGIvaW5jbHVkZS9yeHJwYy9wYWNrZXQuaApAQCAtNjUsNyArNjUsNyBAQAogCX07CiAJX19iZTE2CQlzZXJ2aWNlSWQ7CS8qIHNlcnZpY2UgSUQgKi8KIAotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgX19yeHJwY19oZWFkZXJfb2ZmKFgpIG9mZnNldG9mKHN0cnVjdCByeHJwY19oZWFkZXIsWCkKIApAQCAtMTIwLDcgKzEyMCw3IEBACiAjZGVmaW5lIFJYUlBDX0FDS19UWVBFX05BQ0sJCTAKICNkZWZpbmUgUlhSUENfQUNLX1RZUEVfQUNLCQkxCiAKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKgogICogQUNLIHBhY2tldHMgY2FuIGhhdmUgYSBmdXJ0aGVyIHBpZWNlIG9mIGluZm9ybWF0aW9uIHRhZ2dlZCBvbiB0aGUgZW5kCkBAIC0xNDEsNyArMTQxLDcgQEAKIAlfX2JlMzIJCW5vbmNlOwkJLyogZW5jcnlwdGVkIHJhbmRvbSBudW1iZXIgKi8KIAlfX2JlMzIJCW1pbl9sZXZlbDsJLyogbWluaW11bSBzZWN1cml0eSBsZXZlbCAqLwogCV9fYmUzMgkJX19wYWRkaW5nOwkvKiBwYWRkaW5nIHRvIDgtYnl0ZSBib3VuZGFyeSAqLwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCkBAIC0xNjQsNyArMTY0LDcgQEAKIAogCV9fYmUzMgkJa3ZubzsJCS8qIEtlcmJlcm9zIGtleSB2ZXJzaW9uIG51bWJlciAqLwogCV9fYmUzMgkJdGlja2V0X2xlbjsJLyogS2VyYmVyb3MgdGlja2V0IGxlbmd0aCAgKi8KLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2ZjL2ZjX2Vscy5oIGIvaW5jbHVkZS9zY3NpL2ZjL2ZjX2Vscy5oCmluZGV4IGY5NDMyODEuLjQ4MWFiYmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9mYy9mY19lbHMuaAorKysgYi9pbmNsdWRlL3Njc2kvZmMvZmNfZWxzLmgKQEAgLTE5MSw2ICsxOTEsNyBAQAogCUVMU19SSlRfVU5BQiA9CQkweDA5LAkvKiB1bmFibGUgdG8gcGVyZm9ybSBjb21tYW5kIHJlcXVlc3QgKi8KIAlFTFNfUkpUX1VOU1VQID0JCTB4MGIsCS8qIGNvbW1hbmQgbm90IHN1cHBvcnRlZCAqLwogCUVMU19SSlRfSU5QUk9HID0JMHgwZSwJLyogY29tbWFuZCBhbHJlYWR5IGluIHByb2dyZXNzICovCisJRUxTX1JKVF9GSVAgPQkJMHgyMCwJLyogRklQIGVycm9yICovCiAJRUxTX1JKVF9WRU5ET1IgPQkweGZmLAkvKiB2ZW5kb3Igc3BlY2lmaWMgZXJyb3IgKi8KIH07CiAKQEAgLTIxMiw2ICsyMTMsNyBAQAogCUVMU19FWFBMX1VOQUJfREFUQSA9CTB4MmEsCS8qIHVuYWJsZSB0byBzdXBwbHkgcmVxdWVzdGVkIGRhdGEgKi8KIAlFTFNfRVhQTF9VTlNVUFIgPQkweDJjLAkvKiBSZXF1ZXN0IG5vdCBzdXBwb3J0ZWQgKi8KIAlFTFNfRVhQTF9JTlZfTEVOID0JMHgyZCwJLyogSW52YWxpZCBwYXlsb2FkIGxlbmd0aCAqLworCUVMU19FWFBMX05PVF9ORUlHSEJPUiA9IDB4NjIsCS8qIFZOMlZOX1BvcnQgbm90IGluIG5laWdoYm9yIHNldCAqLwogCS8qIFRCRCAtIGFib3ZlIGRlZmluaXRpb25zIGluY29tcGxldGUgKi8KIH07CiAKQEAgLTQwNSw2ICs0MDcsMTUgQEAKIH07CiAKIC8qCisgKiBFTFNfUFJMTyAtIFByb2Nlc3MgbG9nb3V0IHJlcXVlc3QgYW5kIHJlc3BvbnNlLgorICovCitzdHJ1Y3QgZmNfZWxzX3BybG8geworCV9fdTggICAgICAgICAgICBwcmxvX2NtZDsgICAgICAgLyogY29tbWFuZCAqLworCV9fdTggICAgICAgICAgICBwcmxvX29iczsgICAgICAgLyogb2Jzb2xldGUsIGJ1dCBzaGFsbCBiZSBzZXQgdG8gMTBoICovCisJX19iZTE2ICAgICAgICAgIHBybG9fbGVuOyAgICAgICAvKiBwYXlsb2FkIGxlbmd0aCAqLworfTsKKworLyoKICAqIEVMU19BRElTQyBwYXlsb2FkCiAgKi8KIHN0cnVjdCBmY19lbHNfYWRpc2MgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2ZjL2ZjX2Zjb2UuaCBiL2luY2x1ZGUvc2NzaS9mYy9mY19mY29lLmgKaW5kZXggZTZhZDNkMi4uZDVkY2Q2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2ZjL2ZjX2Zjb2UuaAorKysgYi9pbmNsdWRlL3Njc2kvZmMvZmNfZmNvZS5oCkBAIC0yMiwyMyArMjIsMTggQEAKIAogLyoKICAqIEZDb0UgLSBGaWJyZSBDaGFubmVsIG92ZXIgRXRoZXJuZXQuCisgKiBTZWUgVDExIEZDLUJCLTUgUmV2IDIuMDAgKDA5LTA1NnY1LnBkZikKICAqLwogCiAvKgotICogRkNfRkNPRV9PVUkgaGFzbid0IGJlZW4gc3RhbmRhcmRpemVkIHlldC4gICBYWFggVEJELgorICogRGVmYXVsdCBGQ19GQ09FX09VSSAvIEZDLU1BUCB2YWx1ZS4KICAqLwotI2lmbmRlZiBGQ19GQ09FX09VSQotI2RlZmluZQlGQ19GQ09FX09VSQkweDBlZmMwMAkvKiB1cHBlciAyNCBiaXRzIG9mIEZDT0UgZGVzdCBNQUMgVEJEICovCi0jZW5kaWYKKyNkZWZpbmUJRkNfRkNPRV9PVUkJMHgwZWZjMDAJLyogdXBwZXIgMjQgYml0cyBvZiBGQ09FIE1BQyAqLwogCiAvKgotICogVGhlIGRlc3RpbmF0aW9uIE1BQyBhZGRyZXNzIGZvciB0aGUgZmFicmljIGxvZ2luIG1heSBnZXQgYSBkaWZmZXJlbnQgT1VJLgotICogVGhpcyBpc24ndCBzdGFuZGFyZGl6ZWQgeWV0LgorICogRmFicmljIExvZ2luIChGTE9HSSkgTUFDIGZvciBub24tRklQIHVzZS4gIE5vbi1GSVAgdXNlIGlzIGRlcHJlY2F0ZWQuCiAgKi8KLSNpZm5kZWYgRkNfRkNPRV9GTE9HSV9NQUMKLS8qIGdhdGV3YXkgTUFDIC0gVEJEICovCiAjZGVmaW5lCUZDX0ZDT0VfRkxPR0lfTUFDIHsgMHgwZSwgMHhmYywgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZSB9Ci0jZW5kaWYKIAogI2RlZmluZQlGQ19GQ09FX1ZFUgkwCQkJLyogdmVyc2lvbiAqLwogCkBAIC01MSw4ICs0Niw2IEBACiAKIC8qCiAgKiBGQ29FIGZyYW1lIGhlYWRlciAtIDE0IGJ5dGVzCi0gKgotICogVGhpcyBpcyB0aGUgQXVndXN0IDIwMDcgdmVyc2lvbiBvZiB0aGUgRkNvRSBoZWFkZXIgYXMgZGVmaW5lZCBieSBUMTEuCiAgKiBUaGlzIGZvbGxvd3MgdGhlIFZMQU4gaGVhZGVyLCB3aGljaCBpbmNsdWRlcyB0aGUgZXRoZXJ0eXBlLgogICovCiBzdHJ1Y3QgZmNvZV9oZHIgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2ZjL2ZjX2ZpcC5oIGIvaW5jbHVkZS9zY3NpL2ZjL2ZjX2ZpcC5oCmluZGV4IDE3YmFhMTkuLmFlMjVkNGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9mYy9mY19maXAuaAorKysgYi9pbmNsdWRlL3Njc2kvZmMvZmNfZmlwLmgKQEAgLTE3LDkgKzE3LDEyIEBACiAjaWZuZGVmIF9GQ19GSVBfSF8KICNkZWZpbmUgX0ZDX0ZJUF9IXwogCisjaW5jbHVkZSA8c2NzaS9mYy9mY19ucy5oPgorCiAvKgogICogVGhpcyB2ZXJzaW9uIGlzIGJhc2VkIG9uOgogICogaHR0cDovL3d3dy50MTEub3JnL2Z0cC90MTEvcHViL2ZjL2JiLTUvMDgtNTQzdjEucGRmCisgKiBhbmQgVDExIEZDLUJCLTYgMTAtMDE5djQucGRmIChKdW5lIDIwMTAgVk4yVk4gcHJvcG9zYWwpCiAgKi8KIAogI2RlZmluZSBGSVBfREVGX1BSSQkxMjgJLyogZGVmYXVsdCBzZWxlY3Rpb24gcHJpb3JpdHkgKi8KQEAgLTI5LDExICszMiwyNCBAQAogI2RlZmluZSBGSVBfRkNGX0ZVWloJMTAwCS8qIHJhbmRvbSB0aW1lIGFkZGVkIGJ5IEZDRiAobVMpICovCiAKIC8qCisgKiBWTjJWTiBwcm9wb3NlZC1zdGFuZGFyZCB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgRklQX1ZOX0ZDX01BUAkweDBlZmQwMCAvKiBNQUMgT1VJIGZvciBWTjJWTiB1c2UgKi8KKyNkZWZpbmUgRklQX1ZOX1BST0JFX1dBSVQgMTAwCS8qIGludGVydmFsIGJldHdlZW4gVk4yVk4gcHJvYmVzIChtcykgKi8KKyNkZWZpbmUgRklQX1ZOX0FOTl9XQUlUIDQwMAkvKiBpbnRlcnZhbCBiZXR3ZWVuIFZOMlZOIGFubm91bmNlbWVudHMgKG1zKSAqLworI2RlZmluZSBGSVBfVk5fUkxJTV9JTlQgMTAwMDAJLyogaW50ZXJ2YWwgYmV0d2VlbiBwcm9iZXMgd2hlbiByYXRlIGxpbWl0ZWQgKi8KKyNkZWZpbmUgRklQX1ZOX1JMSU1fQ09VTlQgMTAJLyogbnVtYmVyIG9mIHByb2JlcyBiZWZvcmUgcmF0ZSBsaW1pdGluZyAqLworI2RlZmluZSBGSVBfVk5fQkVBQ09OX0lOVCA4MDAwCS8qIGludGVydmFsIGJldHdlZW4gVk4yVk4gYmVhY29ucyAqLworI2RlZmluZSBGSVBfVk5fQkVBQ09OX0ZVWlogMTAwCS8qIHJhbmRvbSB0aW1lIHRvIGFkZCB0byBiZWFjb24gcGVyaW9kIChtcykgKi8KKworLyoKICAqIE11bHRpY2FzdCBNQUMgYWRkcmVzc2VzLiAgVDExLWFkb3B0ZWQuCiAgKi8KLSNkZWZpbmUgRklQX0FMTF9GQ09FX01BQ1MJKCh1OFs2XSkgeyAxLCAweDEwLCAweDE4LCAxLCAwLCAwIH0pCi0jZGVmaW5lIEZJUF9BTExfRU5PREVfTUFDUwkoKHU4WzZdKSB7IDEsIDB4MTAsIDB4MTgsIDEsIDAsIDEgfSkKLSNkZWZpbmUgRklQX0FMTF9GQ0ZfTUFDUwkoKHU4WzZdKSB7IDEsIDB4MTAsIDB4MTgsIDEsIDAsIDIgfSkKKyNkZWZpbmUgRklQX0FMTF9GQ09FX01BQ1MJKChfX3U4WzZdKSB7IDEsIDB4MTAsIDB4MTgsIDEsIDAsIDAgfSkKKyNkZWZpbmUgRklQX0FMTF9FTk9ERV9NQUNTCSgoX191OFs2XSkgeyAxLCAweDEwLCAweDE4LCAxLCAwLCAxIH0pCisjZGVmaW5lIEZJUF9BTExfRkNGX01BQ1MJKChfX3U4WzZdKSB7IDEsIDB4MTAsIDB4MTgsIDEsIDAsIDIgfSkKKyNkZWZpbmUgRklQX0FMTF9WTjJWTl9NQUNTCSgoX191OFs2XSkgeyAxLCAweDEwLCAweDE4LCAxLCAwLCA0IH0pCisjZGVmaW5lIEZJUF9BTExfUDJQX01BQ1MJKChfX3U4WzZdKSB7IDEsIDB4MTAsIDB4MTgsIDEsIDAsIDUgfSkKIAogI2RlZmluZSBGSVBfVkVSCQkxCQkvKiB2ZXJzaW9uIGZvciBmaXBfaGVhZGVyICovCiAKQEAgLTYwLDYgKzc2LDcgQEAKIAlGSVBfT1BfTFMgPQkyLAkJLyogTGluayBTZXJ2aWNlIHJlcXVlc3Qgb3IgcmVwbHkgKi8KIAlGSVBfT1BfQ1RSTCA9CTMsCQkvKiBLZWVwIEFsaXZlIC8gTGluayBSZXNldCAqLwogCUZJUF9PUF9WTEFOID0JNCwJCS8qIFZMQU4gZGlzY292ZXJ5ICovCisJRklQX09QX1ZOMlZOID0JNSwJCS8qIFZOMlZOIG9wZXJhdGlvbiAqLwogCUZJUF9PUF9WRU5ET1JfTUlOID0gMHhmZmY4LAkvKiBtaW4gdmVuZG9yLXNwZWNpZmljIG9wY29kZSAqLwogCUZJUF9PUF9WRU5ET1JfTUFYID0gMHhmZmZlLAkvKiBtYXggdmVuZG9yLXNwZWNpZmljIG9wY29kZSAqLwogfTsKQEAgLTk3LDExICsxMTQsMjMgQEAKIH07CiAKIC8qCisgKiBTdWJjb2RlcyBmb3IgRklQX09QX1ZOMlZOLgorICovCitlbnVtIGZpcF92bjJ2bl9zdWJjb2RlIHsKKwlGSVBfU0NfVk5fUFJPQkVfUkVRID0gMSwJLyogcHJvYmUgcmVxdWVzdCAqLworCUZJUF9TQ19WTl9QUk9CRV9SRVAgPSAyLAkvKiBwcm9iZSByZXBseSAqLworCUZJUF9TQ19WTl9DTEFJTV9OT1RJRlkgPSAzLAkvKiBjbGFpbSBub3RpZmljYXRpb24gKi8KKwlGSVBfU0NfVk5fQ0xBSU1fUkVQID0gNCwJLyogY2xhaW0gcmVzcG9uc2UgKi8KKwlGSVBfU0NfVk5fQkVBQ09OID0gNSwJCS8qIGJlYWNvbiAqLworfTsKKworLyoKICAqIGZsYWdzIGluIGhlYWRlciBmaXBfZmxhZ3MuCiAgKi8KIGVudW0gZmlwX2ZsYWcgewogCUZJUF9GTF9GUE1BID0JMHg4MDAwLAkJLyogc3VwcG9ydHMgRlBNQSBmYWJyaWMtcHJvdmlkZWQgTUFDcyAqLwogCUZJUF9GTF9TUE1BID0JMHg0MDAwLAkJLyogc3VwcG9ydHMgU1BNQSBzZXJ2ZXItcHJvdmlkZWQgTUFDcyAqLworCUZJUF9GTF9SRUNfT1JfUDJQID0gMHgwMDA4LAkvKiBjb25maWd1cmVkIGFkZHIgb3IgcG9pbnQtdG8tcG9pbnQgKi8KIAlGSVBfRkxfQVZBSUwgPQkweDAwMDQsCQkvKiBhdmFpbGFibGUgZm9yIEZMT0dJL0VMUCAqLwogCUZJUF9GTF9TT0wgPQkweDAwMDIsCQkvKiB0aGlzIGlzIGEgc29saWNpdGVkIG1lc3NhZ2UgKi8KIAlGSVBfRkxfRlBPUlQgPQkweDAwMDEsCQkvKiBzZW50IGZyb20gYW4gRiBwb3J0ICovCkBAIC0xMzAsNiArMTU5LDcgQEAKIAlGSVBfRFRfRktBID0JMTIsCQkvKiBhZHZlcnRpc2VtZW50IGtlZXAtYWxpdmUgcGVyaW9kICovCiAJRklQX0RUX1ZFTkRPUiA9CTEzLAkJLyogdmVuZG9yIElEICovCiAJRklQX0RUX1ZMQU4gPQkxNCwJCS8qIHZsYW4gbnVtYmVyICovCisJRklQX0RUX0ZDNEYgPQkxNSwJCS8qIEZDLTQgZmVhdHVyZXMgKi8KIAlGSVBfRFRfTElNSVQsCQkJLyogbWF4IGRlZmluZWQgZGVzY190eXBlICsgMSAqLwogCUZJUF9EVF9WRU5ET1JfQkFTRSA9IDEyOCwJLyogZmlyc3QgdmVuZG9yLXNwZWNpZmljIGRlc2NfdHlwZSAqLwogfTsKQEAgLTIyOSw2ICsyNTksMTYgQEAKIC8qIEZJUF9EVF9GS0EgZmxhZ3MgKi8KIAogLyoKKyAqIEZJUF9EVF9GQzRGIC0gRkMtNCBmZWF0dXJlcy4KKyAqLworc3RydWN0IGZpcF9mYzRfZmVhdCB7CisJc3RydWN0IGZpcF9kZXNjIGZkX2Rlc2M7CisJX191OAkJZmRfcmVzdmRbMl07CisJc3RydWN0IGZjX25zX2Z0cyBmZF9mdHM7CisJc3RydWN0IGZjX25zX2ZmCWZkX2ZmOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoKICAqIEZJUF9EVF9WRU5ET1IgZGVzY3JpcHRvci4KICAqLwogc3RydWN0IGZpcF92ZW5kb3JfZGVzYyB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvZmMvZmNfbnMuaCBiL2luY2x1ZGUvc2NzaS9mYy9mY19ucy5oCmluZGV4IGU3ZDNhYzQuLjE4NTAxNWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9mYy9mY19ucy5oCisrKyBiL2luY2x1ZGUvc2NzaS9mYy9mY19ucy5oCkBAIC0xMDAsNiArMTAwLDEzIEBACiB9OwogCiAvKgorICogRkM0LWZlYXR1cmVzIG9iamVjdC4KKyAqLworc3RydWN0IGZjX25zX2ZmCXsKKwlfX2JlMzIJZmRfZmVhdFtGQ19OU19UWVBFUyAqIDQgLyBGQ19OU19CUFddOyAvKiA0LWJpdHMgcGVyIEZDLXR5cGUgKi8KK307CisKKy8qCiAgKiBHSURfUFQgcmVxdWVzdC4KICAqLwogc3RydWN0IGZjX25zX2dpZF9wdCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvZmNfZW5jb2RlLmggYi9pbmNsdWRlL3Njc2kvZmNfZW5jb2RlLmgKaW5kZXggOWI0ODY3Yy4uNmQyOTNjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2ZjX2VuY29kZS5oCisrKyBiL2luY2x1ZGUvc2NzaS9mY19lbmNvZGUuaApAQCAtMjEsNiArMjEsMTMgQEAKICNkZWZpbmUgX0ZDX0VOQ09ERV9IXwogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAorLyoKKyAqIEZfQ1RMIHZhbHVlcyBmb3Igc2ltcGxlIHJlcXVlc3RzIGFuZCByZXNwb25zZXMuCisgKi8KKyNkZWZpbmUgRkNfRkNUTF9SRVEJKEZDX0ZDX0ZJUlNUX1NFUSB8IEZDX0ZDX0VORF9TRVEgfCBGQ19GQ19TRVFfSU5JVCkKKyNkZWZpbmUgRkNfRkNUTF9SRVNQCShGQ19GQ19FWF9DVFggfCBGQ19GQ19MQVNUX1NFUSB8IFwKKwkJCUZDX0ZDX0VORF9TRVEgfCBGQ19GQ19TRVFfSU5JVCkKKwogc3RydWN0IGZjX25zX3JmdCB7CiAJc3RydWN0IGZjX25zX2ZpZCBmaWQ7CS8qIHBvcnQgSUQgb2JqZWN0ICovCiAJc3RydWN0IGZjX25zX2Z0cyBmdHM7CS8qIEZDNC10eXBlcyBvYmplY3QgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9mY19mcmFtZS5oIGIvaW5jbHVkZS9zY3NpL2ZjX2ZyYW1lLmgKaW5kZXggNGQzZTljNy4uNGFkMDIwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2ZjX2ZyYW1lLmgKKysrIGIvaW5jbHVkZS9zY3NpL2ZjX2ZyYW1lLmgKQEAgLTMwLDYgKzMwLDIzIEBACiAKICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogCisvKiBzb21lIGhlbHBmdWwgbWFjcm9zICovCisKKyNkZWZpbmUgbnRvaGxsKHgpIGJlNjRfdG9fY3B1KHgpCisjZGVmaW5lIGh0b25sbCh4KSBjcHVfdG9fYmU2NCh4KQorCitzdGF0aWMgaW5saW5lIHUzMiBudG9oMjQoY29uc3QgdTggKnApCit7CisJcmV0dXJuIChwWzBdIDw8IDE2KSB8IChwWzFdIDw8IDgpIHwgcFsyXTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGh0b24yNCh1OCAqcCwgdTMyIHYpCit7CisJcFswXSA9ICh2ID4+IDE2KSAmIDB4ZmY7CisJcFsxXSA9ICh2ID4+IDgpICYgMHhmZjsKKwlwWzJdID0gdiAmIDB4ZmY7Cit9CisKIC8qCiAgKiBUaGUgZmNfZnJhbWUgaW50ZXJmYWNlIGlzIHVzZWQgdG8gcGFzcyBmcmFtZSBkYXRhIGJldHdlZW4gZnVuY3Rpb25zLgogICogVGhlIGZyYW1lIGluY2x1ZGVzIHRoZSBkYXRhIGJ1ZmZlciwgbGVuZ3RoLCBhbmQgU09GIC8gRU9GIGRlbGltaXRlciB0eXBlcy4KQEAgLTUxLDYgKzY4LDcgQEAKICNkZWZpbmUgZnJfc29mKGZwKQkoZnJfY2IoZnApLT5mcl9zb2YpCiAjZGVmaW5lIGZyX2VvZihmcCkJKGZyX2NiKGZwKS0+ZnJfZW9mKQogI2RlZmluZSBmcl9mbGFncyhmcCkJKGZyX2NiKGZwKS0+ZnJfZmxhZ3MpCisjZGVmaW5lIGZyX2VuY2FwcyhmcCkJKGZyX2NiKGZwKS0+ZnJfZW5jYXBzKQogI2RlZmluZSBmcl9tYXhfcGF5bG9hZChmcCkJKGZyX2NiKGZwKS0+ZnJfbWF4X3BheWxvYWQpCiAjZGVmaW5lIGZyX2ZzcChmcCkJKGZyX2NiKGZwKS0+ZnJfZnNwKQogI2RlZmluZSBmcl9jcmMoZnApCShmcl9jYihmcCktPmZyX2NyYykKQEAgLTY2LDkgKzg0LDEwIEBACiAJc3RydWN0IGZjX2ZjcF9wa3QgKmZyX2ZzcDsJLyogZm9yIHRoZSBjb3JyZXNwb25kaW5nIGZjcCBJL08gKi8KIAl1MzIJCWZyX2NyYzsKIAl1MTYJCWZyX21heF9wYXlsb2FkOwkvKiBtYXggRkMgcGF5bG9hZCAqLwotCWVudW0gZmNfc29mCWZyX3NvZjsJCS8qIHN0YXJ0IG9mIGZyYW1lIGRlbGltaXRlciAqLwotCWVudW0gZmNfZW9mCWZyX2VvZjsJCS8qIGVuZCBvZiBmcmFtZSBkZWxpbWl0ZXIgKi8KKwl1OAkJZnJfc29mOwkJLyogc3RhcnQgb2YgZnJhbWUgZGVsaW1pdGVyICovCisJdTgJCWZyX2VvZjsJCS8qIGVuZCBvZiBmcmFtZSBkZWxpbWl0ZXIgKi8KIAl1OAkJZnJfZmxhZ3M7CS8qIGZsYWdzIC0gc2VlIGJlbG93ICovCisJdTgJCWZyX2VuY2FwczsJLyogTExEIGVuY2Fwc3VsYXRpb24gaW5mbyAoZS5nLiBGSVApICovCiAJdTgJCWdyYW50ZWRfbWFjW0VUSF9BTEVOXTsgLyogRkNvRSBNQUMgYWRkcmVzcyAqLwogfTsKIApAQCAtOTcsNiArMTE2LDcgQEAKIAlmcl9kZXYoZnApID0gTlVMTDsKIAlmcl9zZXEoZnApID0gTlVMTDsKIAlmcl9mbGFncyhmcCkgPSAwOworCWZyX2VuY2FwcyhmcCkgPSAwOwogfQogCiBzdHJ1Y3QgZmNfZnJhbWUgKmZjX2ZyYW1lX2FsbG9jX2ZpbGwoc3RydWN0IGZjX2xwb3J0ICosIHNpemVfdCBwYXlsb2FkX2xlbik7CkBAIC0xMzYsMTMgKzE1NiwzOSBAQAogCiAvKgogICogR2V0IGZyYW1lIGhlYWRlciBmcm9tIG1lc3NhZ2UgaW4gZmNfZnJhbWUgc3RydWN0dXJlLgorICogVGhpcyB2ZXJzaW9uIGRvZXNuJ3QgZG8gYSBsZW5ndGggY2hlY2suCisgKi8KK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBmY19mcmFtZV9oZWFkZXIgKl9fZmNfZnJhbWVfaGVhZGVyX2dldChjb25zdCBzdHJ1Y3QgZmNfZnJhbWUgKmZwKQoreworCXJldHVybiAoc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqKWZyX2hkcihmcCk7Cit9CisKKy8qCisgKiBHZXQgZnJhbWUgaGVhZGVyIGZyb20gbWVzc2FnZSBpbiBmY19mcmFtZSBzdHJ1Y3R1cmUuCiAgKiBUaGlzIGhpZGVzIGEgY2FzdCBhbmQgcHJvdmlkZXMgYSBwbGFjZSB0byBhZGQgc29tZSBjaGVja2luZy4KICAqLwogc3RhdGljIGlubGluZQogc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqZmNfZnJhbWVfaGVhZGVyX2dldChjb25zdCBzdHJ1Y3QgZmNfZnJhbWUgKmZwKQogewogCVdBUk5fT04oZnJfbGVuKGZwKSA8IHNpemVvZihzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyKSk7Ci0JcmV0dXJuIChzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICopIGZyX2hkcihmcCk7CisJcmV0dXJuIF9fZmNfZnJhbWVfaGVhZGVyX2dldChmcCk7Cit9CisKKy8qCisgKiBHZXQgc291cmNlIEZDX0lEIChTX0lEKSBmcm9tIGZyYW1lIGhlYWRlciBpbiBtZXNzYWdlLgorICovCitzdGF0aWMgaW5saW5lIHUzMiBmY19mcmFtZV9zaWQoY29uc3Qgc3RydWN0IGZjX2ZyYW1lICpmcCkKK3sKKwlyZXR1cm4gbnRvaDI0KF9fZmNfZnJhbWVfaGVhZGVyX2dldChmcCktPmZoX3NfaWQpOworfQorCisvKgorICogR2V0IGRlc3RpbmF0aW9uIEZDX0lEIChEX0lEKSBmcm9tIGZyYW1lIGhlYWRlciBpbiBtZXNzYWdlLgorICovCitzdGF0aWMgaW5saW5lIHUzMiBmY19mcmFtZV9kaWQoY29uc3Qgc3RydWN0IGZjX2ZyYW1lICpmcCkKK3sKKwlyZXR1cm4gbnRvaDI0KF9fZmNfZnJhbWVfaGVhZGVyX2dldChmcCktPmZoX2RfaWQpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2lzY3NpX2lmLmggYi9pbmNsdWRlL3Njc2kvaXNjc2lfaWYuaAppbmRleCA2NmQzNzdiLi5hODYzMWFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvaXNjc2lfaWYuaAorKysgYi9pbmNsdWRlL3Njc2kvaXNjc2lfaWYuaApAQCAtMzEzLDYgKzMxMyw3IEBACiAJSVNDU0lfUEFSQU1fSU5JVElBVE9SX05BTUUsCiAKIAlJU0NTSV9QQVJBTV9UR1RfUkVTRVRfVE1PLAorCUlTQ1NJX1BBUkFNX1RBUkdFVF9BTElBUywKIAkvKiBtdXN0IGFsd2F5cyBiZSBsYXN0ICovCiAJSVNDU0lfUEFSQU1fTUFYLAogfTsKQEAgLTM1Myw2ICszNTQsNyBAQAogI2RlZmluZSBJU0NTSV9JU0lECQkJKDFVTEwgPDwgSVNDU0lfUEFSQU1fSVNJRCkKICNkZWZpbmUgSVNDU0lfSU5JVElBVE9SX05BTUUJCSgxVUxMIDw8IElTQ1NJX1BBUkFNX0lOSVRJQVRPUl9OQU1FKQogI2RlZmluZSBJU0NTSV9UR1RfUkVTRVRfVE1PCQkoMVVMTCA8PCBJU0NTSV9QQVJBTV9UR1RfUkVTRVRfVE1PKQorI2RlZmluZSBJU0NTSV9UQVJHRVRfQUxJQVMJCSgxVUxMIDw8IElTQ1NJX1BBUkFNX1RBUkdFVF9BTElBUykKIAogLyogaVNDU0kgSEJBIHBhcmFtcyAqLwogZW51bSBpc2NzaV9ob3N0X3BhcmFtIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9saWJmYy5oIGIvaW5jbHVkZS9zY3NpL2xpYmZjLmgKaW5kZXggNzQ5NWMwYi4uMTRiZTQ5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2xpYmZjLmgKKysrIGIvaW5jbHVkZS9zY3NpL2xpYmZjLmgKQEAgLTQyLDI0ICs0Miw2IEBACiAjZGVmaW5lCUZDX0VYX1RJTUVPVVQJMQkvKiBFeGNoYW5nZSB0aW1lb3V0ICovCiAjZGVmaW5lCUZDX0VYX0NMT1NFRAkyCS8qIEV4Y2hhbmdlIGNsb3NlZCAqLwogCi0vKiBzb21lIGhlbHBmdWwgbWFjcm9zICovCi0KLSNkZWZpbmUgbnRvaGxsKHgpIGJlNjRfdG9fY3B1KHgpCi0jZGVmaW5lIGh0b25sbCh4KSBjcHVfdG9fYmU2NCh4KQotCi0KLXN0YXRpYyBpbmxpbmUgdTMyIG50b2gyNChjb25zdCB1OCAqcCkKLXsKLQlyZXR1cm4gKHBbMF0gPDwgMTYpIHwgKHBbMV0gPDwgOCkgfCBwWzJdOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaHRvbjI0KHU4ICpwLCB1MzIgdikKLXsKLQlwWzBdID0gKHYgPj4gMTYpICYgMHhmZjsKLQlwWzFdID0gKHYgPj4gOCkgJiAweGZmOwotCXBbMl0gPSB2ICYgMHhmZjsKLX0KLQogLyoqCiAgKiBlbnVtIGZjX2xwb3J0X3N0YXRlIC0gTG9jYWwgcG9ydCBzdGF0ZXMKICAqIEBMUE9SVF9TVF9ESVNBQkxFRDogRGlzYWJsZWQKQEAgLTk3LDI1ICs3OSwyNSBAQAogLyoqCiAgKiBlbnVtIGZjX3Jwb3J0X3N0YXRlIC0gUmVtb3RlIHBvcnQgc3RhdGVzCiAgKiBAUlBPUlRfU1RfSU5JVDogICAgSW5pdGlhbGl6ZWQKKyAqIEBSUE9SVF9TVF9GTE9HSTogICBXYWl0aW5nIGZvciBGTE9HSSBjb21wbGV0aW9uIGZvciBwb2ludC10by1tdWx0aXBvaW50CisgKiBAUlBPUlRfU1RfUExPR0lfV0FJVDogICBXYWl0aW5nIGZvciBwZWVyIHRvIGxvZ2luIGZvciBwb2ludC10by1tdWx0aXBvaW50CiAgKiBAUlBPUlRfU1RfUExPR0k6ICAgV2FpdGluZyBmb3IgUExPR0kgY29tcGxldGlvbgogICogQFJQT1JUX1NUX1BSTEk6ICAgIFdhaXRpbmcgZm9yIFBSTEkgY29tcGxldGlvbgogICogQFJQT1JUX1NUX1JUVjogICAgIFdhaXRpbmcgZm9yIFJUViBjb21wbGV0aW9uCiAgKiBAUlBPUlRfU1RfUkVBRFk6ICAgUmVhZHkgZm9yIHVzZQotICogQFJQT1JUX1NUX0xPR086ICAgIFJlbW90ZSBwb3J0IGxvZ291dCAoTE9HTykgc2VudAogICogQFJQT1JUX1NUX0FESVNDOiAgIERpc2NvdmVyIEFkZHJlc3Mgc2VudAogICogQFJQT1JUX1NUX0RFTEVURTogIFJlbW90ZSBwb3J0IGJlaW5nIGRlbGV0ZWQKLSAqIEBSUE9SVF9TVF9SRVNUQVJUOiBSZW1vdGUgcG9ydCBiZWluZyBkZWxldGVkIGFuZCB3aWxsIHJlc3RhcnQKICovCiBlbnVtIGZjX3Jwb3J0X3N0YXRlIHsKIAlSUE9SVF9TVF9JTklULAorCVJQT1JUX1NUX0ZMT0dJLAorCVJQT1JUX1NUX1BMT0dJX1dBSVQsCiAJUlBPUlRfU1RfUExPR0ksCiAJUlBPUlRfU1RfUFJMSSwKIAlSUE9SVF9TVF9SVFYsCiAJUlBPUlRfU1RfUkVBRFksCi0JUlBPUlRfU1RfTE9HTywKIAlSUE9SVF9TVF9BRElTQywKIAlSUE9SVF9TVF9ERUxFVEUsCi0JUlBPUlRfU1RfUkVTVEFSVCwKIH07CiAKIC8qKgpAQCAtMTczLDYgKzE1NSw3IEBACiAJdTE2CQkJICAgZmxhZ3M7CiAJI2RlZmluZSBGQ19SUF9GTEFHU19SRUNfU1VQUE9SVEVECSgxIDw8IDApCiAJI2RlZmluZSBGQ19SUF9GTEFHU19SRVRSWQkJKDEgPDwgMSkKKwkjZGVmaW5lIEZDX1JQX1NUQVJURUQJCQkoMSA8PCAyKQogCXVuc2lnbmVkIGludAkgICAgICAgICAgIGVfZF90b3Y7CiAJdW5zaWduZWQgaW50CSAgICAgICAgICAgcl9hX3RvdjsKIH07CkBAIC0xODUsMTYgKzE2OCwxOCBAQAogICogQHJwX3N0YXRlOiAgICAgICBFbnVtZXJhdGlvbiB0aGF0IHRyYWNrcyBwcm9ncmVzcyBvZiBQTE9HSSwgUFJMSSwKICAqICAgICAgICAgICAgICAgICAgYW5kIFJUViBleGNoYW5nZXMKICAqIEBpZHM6ICAgICAgICAgICAgVGhlIHJlbW90ZSBwb3J0IGlkZW50aWZpZXJzIGFuZCByb2xlcwotICogQGZsYWdzOiAgICAgICAgICBSRUMgYW5kIFJFVFJZIHN1cHBvcnRlZCBmbGFncworICogQGZsYWdzOiAgICAgICAgICBTVEFSVEVELCBSRUMgYW5kIFJFVFJZX1NVUFBPUlRFRCBmbGFncwogICogQG1heF9zZXE6ICAgICAgICBNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IHNlcXVlbmNlcwogICogQGRpc2NfaWQ6ICAgICAgICBUaGUgZGlzY292ZXJ5IGlkZW50aWZpZXIKICAqIEBtYXhmcmFtZV9zaXplOiAgVGhlIG1heGltdW0gZnJhbWUgc2l6ZQogICogQHJldHJpZXM6ICAgICAgICBUaGUgcmV0cnkgY291bnQgZm9yIHRoZSBjdXJyZW50IHN0YXRlCisgKiBAbWFqb3JfcmV0cmllczogIFRoZSByZXRyeSBjb3VudCBmb3IgdGhlIGVudGlyZSBQTE9HSS9QUkxJIHN0YXRlIG1hY2hpbmUKICAqIEBlX2RfdG92OiAgICAgICAgRXJyb3IgZGV0ZWN0IHRpbWVvdXQgdmFsdWUgKGluIG1zZWMpCiAgKiBAcl9hX3RvdjogICAgICAgIFJlc291cmNlIGFsbG9jYXRpb24gdGltZW91dCB2YWx1ZSAoaW4gbXNlYykKICAqIEBycF9tdXRleDogICAgICAgVGhlIG11dGV4IHRoYXQgcHJvdGVjdHMgdGhlIHJlbW90ZSBwb3J0CiAgKiBAcmV0cnlfd29yazogICAgIEhhbmRsZSBmb3IgcmV0cmllcwogICogQGV2ZW50X2NhbGxiYWNrOiBDYWxsYmFjayB3aGVuIFJFQURZLCBGQUlMRUQgb3IgTE9HTyBzdGF0ZXMgY29tcGxldGUKKyAqIEByY3U6CSAgICBTdHJ1Y3R1cmUgdXNlZCBmb3IgZnJlZWluZyBpbiBhbiBSQ1Utc2FmZSBtYW5uZXIKICAqLwogc3RydWN0IGZjX3Jwb3J0X3ByaXYgewogCXN0cnVjdCBmY19scG9ydAkJICAgICpsb2NhbF9wb3J0OwpAQCAtMjA3LDYgKzE5Miw3IEBACiAJdTE2CQkJICAgIGRpc2NfaWQ7CiAJdTE2CQkJICAgIG1heGZyYW1lX3NpemU7CiAJdW5zaWduZWQgaW50CSAgICAgICAgICAgIHJldHJpZXM7CisJdW5zaWduZWQgaW50CSAgICAgICAgICAgIG1ham9yX3JldHJpZXM7CiAJdW5zaWduZWQgaW50CSAgICAgICAgICAgIGVfZF90b3Y7CiAJdW5zaWduZWQgaW50CSAgICAgICAgICAgIHJfYV90b3Y7CiAJc3RydWN0IG11dGV4ICAgICAgICAgICAgICAgIHJwX211dGV4OwpAQCAtMjE2LDYgKzIwMiw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICAgIHBlZXJzOwogCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgICAgICBldmVudF93b3JrOwogCXUzMgkJCSAgICBzdXBwb3J0ZWRfY2xhc3NlczsKKwlzdHJ1Y3QgcmN1X2hlYWQJCSAgICByY3U7CiB9OwogCiAvKioKQEAgLTI2MiwxNCArMjQ5LDEyIEBACiAKIC8qKgogICogc3RydWN0IGZjX3NlcV9lbHNfZGF0YSAtIEVMUyBkYXRhIHVzZWQgZm9yIHBhc3NpbmcgRUxTIHNwZWNpZmljIHJlc3BvbnNlcwotICogQGZwOiAgICAgVGhlIEVMUyBmcmFtZQogICogQHJlYXNvbjogVGhlIHJlYXNvbiBmb3IgcmVqZWN0aW9uCiAgKiBAZXhwbGFuOiBUaGUgZXhwbGFpbmF0aW9uIG9mIHRoZSByZWplY3Rpb24KICAqCiAgKiBNYWlubHkgdXNlZCBieSB0aGUgZXhjaGFuZ2UgbWFuYWdlciBsYXllci4KICAqLwogc3RydWN0IGZjX3NlcV9lbHNfZGF0YSB7Ci0Jc3RydWN0IGZjX2ZyYW1lICpmcDsKIAllbnVtIGZjX2Vsc19yanRfcmVhc29uIHJlYXNvbjsKIAllbnVtIGZjX2Vsc19yanRfZXhwbGFuIGV4cGxhbjsKIH07CkBAIC00MDUsNiArMzkwLDcgQEAKICAqIEBlc2Jfc3RhdDogICAgIEVTQiBleGNoYW5nZSBzdGF0dXMKICAqIEByX2FfdG92OiAgICAgIFJlc291Y2UgYWxsb2NhdGlvbiB0aW1lIG91dCB2YWx1ZSAoaW4gbXNlY3MpCiAgKiBAc2VxX2lkOiAgICAgICBUaGUgbmV4dCBzZXF1ZW5jZSBJRCB0byB1c2UKKyAqIEBlbmNhcHM6ICAgICAgIGVuY2Fwc3VsYXRpb24gaW5mb3JtYXRpb24gZm9yIGxvd2VyLWxldmVsIGRyaXZlcgogICogQGZfY3RsOiAgICAgICAgRl9DVEwgZmxhZ3MgZm9yIHRoZSBzZXF1ZW5jZQogICogQGZoX3R5cGU6ICAgICAgVGhlIGZyYW1lIHR5cGUKICAqIEBjbGFzczogICAgICAgIFRoZSBjbGFzcyBvZiBzZXJ2aWNlCkBAIC00MzYsNiArNDIyLDcgQEAKIAl1MzIJCSAgICBlc2Jfc3RhdDsKIAl1MzIJCSAgICByX2FfdG92OwogCXU4CQkgICAgc2VxX2lkOworCXU4CQkgICAgZW5jYXBzOwogCXUzMgkJICAgIGZfY3RsOwogCXU4CQkgICAgZmhfdHlwZTsKIAllbnVtIGZjX2NsYXNzCSAgICBjbGFzczsKQEAgLTUzMCwxMiArNTE3LDExIEBACiAJCQlzdHJ1Y3QgZmNfZnJhbWUgKik7CiAKIAkvKgotCSAqIFNlbmQgYW4gRUxTIHJlc3BvbnNlIHVzaW5nIGluZm9tYXRpb24gZnJvbSBhIHByZXZpb3VzCi0JICogZXhjaGFuZ2UgYW5kIHNlcXVlbmNlLgorCSAqIFNlbmQgYW4gRUxTIHJlc3BvbnNlIHVzaW5nIGluZm9tYXRpb24gZnJvbSB0aGUgcmVjZWl2ZWQgZnJhbWUuCiAJICoKIAkgKiBTVEFUVVM6IE9QVElPTkFMCiAJICovCi0Jdm9pZCAoKnNlcV9lbHNfcnNwX3NlbmQpKHN0cnVjdCBmY19zZXEgKiwgZW51bSBmY19lbHNfY21kLAorCXZvaWQgKCpzZXFfZWxzX3JzcF9zZW5kKShzdHJ1Y3QgZmNfZnJhbWUgKiwgZW51bSBmY19lbHNfY21kLAogCQkJCSBzdHJ1Y3QgZmNfc2VxX2Vsc19kYXRhICopOwogCiAJLyoKQEAgLTU2Nyw2ICs1NTMsMTMgQEAKIAlzdHJ1Y3QgZmNfc2VxICooKnNlcV9zdGFydF9uZXh0KShzdHJ1Y3QgZmNfc2VxICopOwogCiAJLyoKKwkgKiBBc3NpZ24gYSBzZXF1ZW5jZSBmb3IgYW4gaW5jb21pbmcgcmVxdWVzdCBmcmFtZS4KKwkgKgorCSAqIFNUQVRVUzogT1BUSU9OQUwKKwkgKi8KKwlzdHJ1Y3QgZmNfc2VxICooKnNlcV9hc3NpZ24pKHN0cnVjdCBmY19scG9ydCAqLCBzdHJ1Y3QgZmNfZnJhbWUgKik7CisKKwkvKgogCSAqIFJlc2V0IGFuIGV4Y2hhbmdlIG1hbmFnZXIsIGNvbXBsZXRpbmcgYWxsIHNlcXVlbmNlcyBhbmQgZXhjaGFuZ2VzLgogCSAqIElmIHNfaWQgaXMgbm9uLXplcm8sIHJlc2V0IG9ubHkgZXhjaGFuZ2VzIG9yaWdpbmF0aW5nIGZyb20gdGhhdCBGSUQuCiAJICogSWYgZF9pZCBpcyBub24temVybywgcmVzZXQgb25seSBleGNoYW5nZXMgc2VuZGluZyB0byB0aGF0IEZJRC4KQEAgLTU4Nyw4ICs1ODAsNyBAQAogCSAqCiAJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwotCXZvaWQgKCpscG9ydF9yZWN2KShzdHJ1Y3QgZmNfbHBvcnQgKiwgc3RydWN0IGZjX3NlcSAqLAotCQkJICAgc3RydWN0IGZjX2ZyYW1lICopOworCXZvaWQgKCpscG9ydF9yZWN2KShzdHJ1Y3QgZmNfbHBvcnQgKiwgc3RydWN0IGZjX2ZyYW1lICopOwogCiAJLyoKIAkgKiBSZXNldCB0aGUgbG9jYWwgcG9ydC4KQEAgLTY1MCw4ICs2NDIsNyBAQAogCSAqCiAJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwotCXZvaWQgKCpycG9ydF9yZWN2X3JlcSkoc3RydWN0IGZjX3NlcSAqLCBzdHJ1Y3QgZmNfZnJhbWUgKiwKLQkJCSAgICAgICBzdHJ1Y3QgZmNfbHBvcnQgKik7CisJdm9pZCAoKnJwb3J0X3JlY3ZfcmVxKShzdHJ1Y3QgZmNfbHBvcnQgKiwgc3RydWN0IGZjX2ZyYW1lICopOwogCiAJLyoKIAkgKiBsb29rdXAgYW4gcnBvcnQgYnkgaXQncyBwb3J0IElELgpAQCAtNjk3LDggKzY4OCw3IEBACiAJICoKIAkgKiBTVEFUVVM6IE9QVElPTkFMCiAJICovCi0Jdm9pZCAoKmRpc2NfcmVjdl9yZXEpKHN0cnVjdCBmY19zZXEgKiwgc3RydWN0IGZjX2ZyYW1lICosCi0JCQkgICAgICBzdHJ1Y3QgZmNfbHBvcnQgKik7CisJdm9pZCAoKmRpc2NfcmVjdl9yZXEpKHN0cnVjdCBmY19scG9ydCAqLCBzdHJ1Y3QgZmNfZnJhbWUgKik7CiAKIAkvKgogCSAqIFN0YXJ0IGRpc2NvdmVyeSBmb3IgYSBsb2NhbCBwb3J0LgpAQCAtNzM2LDcgKzcyNiw3IEBACiAgKiBAYnVmX2xlbjogICAgICAgTGVuZ3RoIG9mIHRoZSBkaXNjb3ZlcnkgYnVmZmVyCiAgKiBAZGlzY19pZDogICAgICAgRGlzY292ZXJ5IElECiAgKiBAcnBvcnRzOiAgICAgICAgTGlzdCBvZiBkaXNjb3ZlcmVkIHJlbW90ZSBwb3J0cwotICogQGxwb3J0OiAgICAgICAgIFRoZSBsb2NhbCBwb3J0IHRoYXQgZGlzY292ZXJ5IGlzIGZvcgorICogQHByaXY6ICAgICAgICAgIFByaXZhdGUgcG9pbnRlciBmb3IgdXNlIGJ5IGRpc2NvdmVyeSBjb2RlCiAgKiBAZGlzY19tdXRleDogICAgTXV0ZXggdGhhdCBwcm90ZWN0cyB0aGUgZGlzY292ZXJ5IGNvbnRleHQKICAqIEBwYXJ0aWFsX2J1ZjogICBQYXJ0aWFsIG5hbWUgYnVmZmVyIChpZiBuYW1lcyBhcmUgcmV0dXJuZWQKICAqICAgICAgICAgICAgICAgICBpbiBtdWx0aXBsZSBmcmFtZXMpCkBAIC03NTIsNyArNzQyLDcgQEAKIAl1MTYgICAgICAgICAgICAgICAgICAgZGlzY19pZDsKIAogCXN0cnVjdCBsaXN0X2hlYWQgICAgICBycG9ydHM7Ci0Jc3RydWN0IGZjX2xwb3J0CSAgICAgICpscG9ydDsKKwl2b2lkCQkgICAgICAqcHJpdjsKIAlzdHJ1Y3QgbXV0ZXgJICAgICAgZGlzY19tdXRleDsKIAlzdHJ1Y3QgZmNfZ3BuX2Z0X3Jlc3AgcGFydGlhbF9idWY7CiAJc3RydWN0IGRlbGF5ZWRfd29yayAgIGRpc2Nfd29yazsKQEAgLTc5Niw2ICs3ODYsNyBAQAogICogQG1mczogICAgICAgICAgICAgICAgICAgVGhlIG1heGltdW0gRmlicmUgQ2hhbm5lbCBwYXlsb2FkIHNpemUKICAqIEBtYXhfcmV0cnlfY291bnQ6ICAgICAgIFRoZSBtYXhpbXVtIHJldHJ5IGF0dGVtcHRzCiAgKiBAbWF4X3Jwb3J0X3JldHJ5X2NvdW50OiBUaGUgbWF4aW11bSByZW1vdGUgcG9ydCByZXRyeSBhdHRlbXB0cworICogQHJwb3J0X3ByaXZfc2l6ZTogICAgICAgU2l6ZSBuZWVkZWQgYnkgZHJpdmVyIGFmdGVyIHN0cnVjdCBmY19ycG9ydF9wcml2CiAgKiBAbHJvX3hpZDogICAgICAgICAgICAgICBUaGUgbWF4aW11bSBYSUQgZm9yIExSTwogICogQGxzb19tYXg6ICAgICAgICAgICAgICAgVGhlIG1heGltdW0gbGFyZ2Ugb2ZmbG9hZCBzZW5kIHNpemUKICAqIEBmY3RzOiAgICAgICAgICAgICAgICAgIEZDLTQgdHlwZSBtYXNrCkBAIC04NDIsOSArODMzLDExIEBACiAJdTMyCQkJICAgICAgIGxyb19lbmFibGVkOjE7CiAJdTMyCQkJICAgICAgIGRvZXNfbnBpdjoxOwogCXUzMgkJCSAgICAgICBucGl2X2VuYWJsZWQ6MTsKKwl1MzIJCQkgICAgICAgcG9pbnRfdG9fbXVsdGlwb2ludDoxOwogCXUzMgkJCSAgICAgICBtZnM7CiAJdTgJCQkgICAgICAgbWF4X3JldHJ5X2NvdW50OwogCXU4CQkJICAgICAgIG1heF9ycG9ydF9yZXRyeV9jb3VudDsKKwl1MTYJCQkgICAgICAgcnBvcnRfcHJpdl9zaXplOwogCXUxNgkJCSAgICAgICBsaW5rX3NwZWVkOwogCXUxNgkJCSAgICAgICBsaW5rX3N1cHBvcnRlZF9zcGVlZHM7CiAJdTE2CQkJICAgICAgIGxyb194aWQ7CkBAIC05ODYsNiArOTc5LDcgQEAKIHN0cnVjdCBmY19scG9ydCAqbGliZmNfdnBvcnRfY3JlYXRlKHN0cnVjdCBmY192cG9ydCAqLCBpbnQgcHJpdnNpemUpOwogc3RydWN0IGZjX2xwb3J0ICpmY192cG9ydF9pZF9sb29rdXAoc3RydWN0IGZjX2xwb3J0ICosIHUzMiBwb3J0X2lkKTsKIGludCBmY19scG9ydF9ic2dfcmVxdWVzdChzdHJ1Y3QgZmNfYnNnX2pvYiAqKTsKK3ZvaWQgZmNfbHBvcnRfc2V0X2xvY2FsX2lkKHN0cnVjdCBmY19scG9ydCAqLCB1MzIgcG9ydF9pZCk7CiAKIC8qCiAgKiBSRU1PVEUgUE9SVCBMQVlFUgpAQCAtOTk4LDYgKzk5MiwxMSBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogaW50IGZjX2Rpc2NfaW5pdChzdHJ1Y3QgZmNfbHBvcnQgKik7CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZjX2xwb3J0ICpmY19kaXNjX2xwb3J0KHN0cnVjdCBmY19kaXNjICpkaXNjKQoreworCXJldHVybiBjb250YWluZXJfb2YoZGlzYywgc3RydWN0IGZjX2xwb3J0LCBkaXNjKTsKK30KKwogLyoKICAqIEZDUCBMQVlFUgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTAyOSw2ICsxMDI4LDEwIEBACiAJCQkJICAgIHZvaWQgKmFyZywgdTMyIHRpbWVyX21zZWMpOwogdm9pZCBmY19scG9ydF9mbG9naV9yZXNwKHN0cnVjdCBmY19zZXEgKiwgc3RydWN0IGZjX2ZyYW1lICosIHZvaWQgKik7CiB2b2lkIGZjX2xwb3J0X2xvZ29fcmVzcChzdHJ1Y3QgZmNfc2VxICosIHN0cnVjdCBmY19mcmFtZSAqLCB2b2lkICopOwordm9pZCBmY19maWxsX3JlcGx5X2hkcihzdHJ1Y3QgZmNfZnJhbWUgKiwgY29uc3Qgc3RydWN0IGZjX2ZyYW1lICosCisJCSAgICAgICBlbnVtIGZjX3JjdGwsIHUzMiBwYXJtX29mZnNldCk7Cit2b2lkIGZjX2ZpbGxfaGRyKHN0cnVjdCBmY19mcmFtZSAqLCBjb25zdCBzdHJ1Y3QgZmNfZnJhbWUgKiwKKwkJIGVudW0gZmNfcmN0bCwgdTMyIGZfY3RsLCB1MTYgc2VxX2NudCwgdTMyIHBhcm1fb2Zmc2V0KTsKIAogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2xpYmZjb2UuaCBiL2luY2x1ZGUvc2NzaS9saWJmY29lLmgKaW5kZXggZWMxM2Y1MS4uMDZmMWI1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2xpYmZjb2UuaAorKysgYi9pbmNsdWRlL3Njc2kvbGliZmNvZS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8c2NzaS9mYy9mY19mY29lLmg+CiAjaW5jbHVkZSA8c2NzaS9saWJmYy5oPgogCkBAIC0zNyw2ICszOCw3IEBACiAjZGVmaW5lIEZDT0VfQ1RMUl9TVEFSVF9ERUxBWQkyMDAwCS8qIG1TIGFmdGVyIGZpcnN0IGFkdi4gdG8gY2hvb3NlIEZDRiAqLwogI2RlZmluZSBGQ09FX0NUUkxfU09MX1RPVgkyMDAwCS8qIG1pbi4gc29saWNpdGF0aW9uIGludGVydmFsIChtUykgKi8KICNkZWZpbmUgRkNPRV9DVExSX0ZDRl9MSU1JVAkyMAkvKiBtYXguIG51bWJlciBvZiBGQ0YgZW50cmllcyAqLworI2RlZmluZSBGQ09FX0NUTFJfVk4yVk5fTE9HSU5fTElNSVQgMwkvKiBtYXguIFZOMlZOIHJwb3J0IGxvZ2luIHJldHJpZXMgKi8KIAogLyoqCiAgKiBlbnVtIGZpcF9zdGF0ZSAtIGludGVybmFsIHN0YXRlIG9mIEZDb0UgY29udHJvbGxlci4KQEAgLTQ1LDYgKzQ3LDExIEBACiAgKiBARklQX1NUX0FVVE86CWRldGVybWluaW5nIHdoZXRoZXIgdG8gdXNlIEZJUCBvciBub24tRklQIG1vZGUuCiAgKiBARklQX1NUX05PTl9GSVA6CW5vbi1GSVAgbW9kZSBzZWxlY3RlZC4KICAqIEBGSVBfU1RfRU5BQkxFRDoJRklQIG1vZGUgc2VsZWN0ZWQuCisgKiBARklQX1NUX1ZOTVBfU1RBUlQ6CVZOMlZOIG11bHRpcGF0aCBtb2RlIHN0YXJ0LCB3YWl0CisgKiBARklQX1NUX1ZOTVBfUFJPQkUxOglWTjJWTiBzZW50IGZpcnN0IHByb2JlLCBsaXN0ZW5pbmcKKyAqIEBGSVBfU1RfVk5NUF9QUk9CRTI6CVZOMlZOIHNlbnQgc2Vjb25kIHByb2JlLCBsaXN0ZW5pbmcKKyAqIEBGSVBfU1RfVk5NUF9DTEFJTToJVk4yVk4gc2VudCBjbGFpbSwgd2FpdGluZyBmb3IgcmVzcG9uc2VzCisgKiBARklQX1NUX1ZOTVBfVVA6CVZOMlZOIG11bHRpcGF0aCBtb2RlIG9wZXJhdGlvbgogICovCiBlbnVtIGZpcF9zdGF0ZSB7CiAJRklQX1NUX0RJU0FCTEVELApAQCAtNTIsOCArNTksMjMgQEAKIAlGSVBfU1RfQVVUTywKIAlGSVBfU1RfTk9OX0ZJUCwKIAlGSVBfU1RfRU5BQkxFRCwKKwlGSVBfU1RfVk5NUF9TVEFSVCwKKwlGSVBfU1RfVk5NUF9QUk9CRTEsCisJRklQX1NUX1ZOTVBfUFJPQkUyLAorCUZJUF9TVF9WTk1QX0NMQUlNLAorCUZJUF9TVF9WTk1QX1VQLAogfTsKIAorLyoKKyAqIE1vZGVzOgorICogVGhlIG1vZGUgaXMgdGhlIHN0YXRlIHRoYXQgaXMgdG8gYmUgZW50ZXJlZCBhZnRlciBsaW5rIHVwLgorICogSXQgbXVzdCBub3QgY2hhbmdlIGFmdGVyIGZjb2VfY3Rscl9pbml0KCkgc2V0cyBpdC4KKyAqLworI2RlZmluZSBGSVBfTU9ERV9BVVRPCQlGSVBfU1RfQVVUTworI2RlZmluZSBGSVBfTU9ERV9OT05fRklQCUZJUF9TVF9OT05fRklQCisjZGVmaW5lIEZJUF9NT0RFX0ZBQlJJQwkJRklQX1NUX0VOQUJMRUQKKyNkZWZpbmUgRklQX01PREVfVk4yVk4JCUZJUF9TVF9WTk1QX1NUQVJUCisKIC8qKgogICogc3RydWN0IGZjb2VfY3RsciAtIEZDb0UgQ29udHJvbGxlciBhbmQgRklQIHN0YXRlCiAgKiBAc3RhdGU6CSAgIGludGVybmFsIEZJUCBzdGF0ZSBmb3IgbmV0d29yayBsaW5rIGFuZCBGSVAgb3Igbm9uLUZJUCBtb2RlLgpAQCAtNzAsMTkgKzkyLDIwIEBACiAgKiBAdGltZXJfd29yazoJICAgJndvcmtfc3RydWN0IGZvciBkb2luZyBrZWVwLWFsaXZlcyBhbmQgcmVzZXRzLgogICogQHJlY3Zfd29yazoJICAgJndvcmtfc3RydWN0IGZvciByZWNlaXZpbmcgRklQIGZyYW1lcy4KICAqIEBmaXBfcmVjdl9saXN0OiBsaXN0IG9mIHJlY2VpdmVkIEZJUCBmcmFtZXMuCisgKiBAcm5kX3N0YXRlOgkgICBzdGF0ZSBmb3IgcHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICogQHBvcnRfaWQ6CSAgIHByb3Bvc2VkIG9yIHNlbGVjdGVkIGxvY2FsLXBvcnQgSUQuCiAgKiBAdXNlcl9tZnM6CSAgIGNvbmZpZ3VyZWQgbWF4aW11bSBGQyBmcmFtZSBzaXplLCBpbmNsdWRpbmcgRkMgaGVhZGVyLgogICogQGZsb2dpX294aWQ6ICAgIGV4Y2hhbmdlIElEIG9mIG1vc3QgcmVjZW50IGZhYnJpYyBsb2dpbi4KICAqIEBmbG9naV9jb3VudDogICBudW1iZXIgb2YgRkxPR0kgYXR0ZW1wdHMgaW4gQVVUTyBtb2RlLgogICogQG1hcF9kZXN0OgkgICB1c2UgdGhlIEZDX01BUCBtb2RlIGZvciBkZXN0aW5hdGlvbiBNQUMgYWRkcmVzc2VzLgogICogQHNwbWE6CSAgIHN1cHBvcnRzIFNQTUEgc2VydmVyLXByb3ZpZGVkIE1BQ3MgbW9kZQotICogQHNlbmRfY3Rscl9rYTogIG5lZWQgdG8gc2VuZCBjb250cm9sbGVyIGtlZXAgYWxpdmUKLSAqIEBzZW5kX3BvcnRfa2E6ICBuZWVkIHRvIHNlbmQgcG9ydCBrZWVwIGFsaXZlcworICogQHByb2JlX3RyaWVzOiAgIG51bWJlciBvZiBGQ19JRHMgcHJvYmVkCiAgKiBAZGVzdF9hZGRyOgkgICBNQUMgYWRkcmVzcyBvZiB0aGUgc2VsZWN0ZWQgRkMgZm9yd2FyZGVyLgogICogQGN0bF9zcmNfYWRkcjogIHRoZSBuYXRpdmUgTUFDIGFkZHJlc3Mgb2Ygb3VyIGxvY2FsIHBvcnQuCiAgKiBAc2VuZDoJICAgTExELXN1cHBsaWVkIGZ1bmN0aW9uIHRvIGhhbmRsZSBzZW5kaW5nIEZJUCBFdGhlcm5ldCBmcmFtZXMKICAqIEB1cGRhdGVfbWFjOiAgICBMTEQtc3VwcGxpZWQgZnVuY3Rpb24gdG8gaGFuZGxlIGNoYW5nZXMgdG8gTUFDIGFkZHJlc3Nlcy4KICAqIEBnZXRfc3JjX2FkZHI6ICBMTEQtc3VwcGxpZWQgZnVuY3Rpb24gdG8gc3VwcGx5IGEgc291cmNlIE1BQyBhZGRyZXNzLgotICogQGxvY2s6CSAgIGxvY2sgcHJvdGVjdGluZyB0aGlzIHN0cnVjdHVyZS4KKyAqIEBjdGxyX211dGV4OgkgICBsb2NrIHByb3RlY3RpbmcgdGhpcyBzdHJ1Y3R1cmUuCiAgKgogICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBieSBhbGwgRkNvRSBkcml2ZXJzLiAgSXQgY29udGFpbnMgaW5mb3JtYXRpb24KICAqIG5lZWRlZCBieSBhbGwgRkNvRSBsb3ctbGV2ZWwgZHJpdmVycyAoTExEcykgYXMgd2VsbCBhcyBpbnRlcm5hbCBzdGF0ZQpAQCAtMTAzLDIxICsxMjYsMjMgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdGltZXJfd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVjdl93b3JrOwogCXN0cnVjdCBza19idWZmX2hlYWQgZmlwX3JlY3ZfbGlzdDsKKworCXN0cnVjdCBybmRfc3RhdGUgcm5kX3N0YXRlOworCXUzMiBwb3J0X2lkOworCiAJdTE2IHVzZXJfbWZzOwogCXUxNiBmbG9naV9veGlkOwogCXU4IGZsb2dpX2NvdW50OwotCXU4IHJlc2V0X3JlcTsKIAl1OCBtYXBfZGVzdDsKIAl1OCBzcG1hOwotCXU4IHNlbmRfY3Rscl9rYTsKLQl1OCBzZW5kX3BvcnRfa2E7CisJdTggcHJvYmVfdHJpZXM7CiAJdTggZGVzdF9hZGRyW0VUSF9BTEVOXTsKIAl1OCBjdGxfc3JjX2FkZHJbRVRIX0FMRU5dOwogCiAJdm9pZCAoKnNlbmQpKHN0cnVjdCBmY29lX2N0bHIgKiwgc3RydWN0IHNrX2J1ZmYgKik7CiAJdm9pZCAoKnVwZGF0ZV9tYWMpKHN0cnVjdCBmY19scG9ydCAqLCB1OCAqYWRkcik7CiAJdTggKiAoKmdldF9zcmNfYWRkcikoc3RydWN0IGZjX2xwb3J0ICopOwotCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgbXV0ZXggY3Rscl9tdXRleDsKIH07CiAKIC8qKgpAQCAtMTU2LDggKzE4MSwyNiBAQAogCXU4IGZkX2ZsYWdzOjE7CiB9OwogCisvKioKKyAqIHN0cnVjdCBmY29lX3Jwb3J0IC0gVk4yVk4gcmVtb3RlIHBvcnQKKyAqIEB0aW1lOgl0aW1lIG9mIGNyZWF0ZSBvciBsYXN0IGJlYWNvbiBwYWNrZXQgcmVjZWl2ZWQgZnJvbSBub2RlCisgKiBAZmNvZV9sZW46CW1heCBGQ29FIGZyYW1lIHNpemUsIG5vdCBpbmNsdWRpbmcgVkxBTiBvciBFdGhlcm5ldCBoZWFkZXJzCisgKiBAZmxhZ3M6CWZsYWdzIGZyb20gcHJvYmUgb3IgY2xhaW0KKyAqIEBsb2dpbl9jb3VudDogbnVtYmVyIG9mIHVuc3VjY2Vzc2Z1bCBycG9ydCBsb2dpbnMgdG8gdGhpcyBwb3J0CisgKiBAZW5vZGVfbWFjOglFX05vZGUgY29udHJvbCBNQUMgYWRkcmVzcworICogQHZuX21hYzoJVk5fTm9kZSBhc3NpZ25lZCBNQUMgYWRkcmVzcyBmb3IgZGF0YQorICovCitzdHJ1Y3QgZmNvZV9ycG9ydCB7CisJdW5zaWduZWQgbG9uZyB0aW1lOworCXUxNiBmY29lX2xlbjsKKwl1MTYgZmxhZ3M7CisJdTggbG9naW5fY291bnQ7CisJdTggZW5vZGVfbWFjW0VUSF9BTEVOXTsKKwl1OCB2bl9tYWNbRVRIX0FMRU5dOworfTsKKwogLyogRklQIEFQSSBmdW5jdGlvbnMgKi8KLXZvaWQgZmNvZV9jdGxyX2luaXQoc3RydWN0IGZjb2VfY3RsciAqKTsKK3ZvaWQgZmNvZV9jdGxyX2luaXQoc3RydWN0IGZjb2VfY3RsciAqLCBlbnVtIGZpcF9zdGF0ZSk7CiB2b2lkIGZjb2VfY3Rscl9kZXN0cm95KHN0cnVjdCBmY29lX2N0bHIgKik7CiB2b2lkIGZjb2VfY3Rscl9saW5rX3VwKHN0cnVjdCBmY29lX2N0bHIgKik7CiBpbnQgZmNvZV9jdGxyX2xpbmtfZG93bihzdHJ1Y3QgZmNvZV9jdGxyICopOwpAQCAtMTY4LDYgKzIxMSwxNyBAQAogCiAvKiBsaWJmY29lIGZ1bmNzICovCiB1NjQgZmNvZV93d25fZnJvbV9tYWModW5zaWduZWQgY2hhciBtYWNbXSwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwotaW50IGZjb2VfbGliZmNfY29uZmlnKHN0cnVjdCBmY19scG9ydCAqLCBzdHJ1Y3QgbGliZmNfZnVuY3Rpb25fdGVtcGxhdGUgKik7CitpbnQgZmNvZV9saWJmY19jb25maWcoc3RydWN0IGZjX2xwb3J0ICosIHN0cnVjdCBmY29lX2N0bHIgKiwKKwkJICAgICAgY29uc3Qgc3RydWN0IGxpYmZjX2Z1bmN0aW9uX3RlbXBsYXRlICosIGludCBpbml0X2ZjcCk7CisKKy8qKgorICogaXNfZmlwX21vZGUoKSAtIHJldHVybnMgdHJ1ZSBpZiBGSVAgbW9kZSBzZWxlY3RlZC4KKyAqIEBmaXA6CUZDb0UgY29udHJvbGxlci4KKyAqLworc3RhdGljIGlubGluZSBib29sIGlzX2ZpcF9tb2RlKHN0cnVjdCBmY29lX2N0bHIgKmZpcCkKK3sKKwlyZXR1cm4gZmlwLT5zdGF0ZSA9PSBGSVBfU1RfRU5BQkxFRDsKK30KKwogCiAjZW5kaWYgLyogX0xJQkZDT0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2xpYnNhcy5oIGIvaW5jbHVkZS9zY3NpL2xpYnNhcy5oCmluZGV4IDNiNTg2ODUuLmQwNmUxM2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9saWJzYXMuaAorKysgYi9pbmNsdWRlL3Njc2kvbGlic2FzLmgKQEAgLTQyMiwxNiArNDIyLDcgQEAKIH07CiAKIGVudW0gZXhlY19zdGF0dXMgewotCVNBTV9HT09EICAgICAgICAgPSAwLAotCVNBTV9DSEVDS19DT05EICAgPSAyLAotCVNBTV9DT05EX01FVCAgICAgPSA0LAotCVNBTV9CVVNZICAgICAgICAgPSA4LAotCVNBTV9JTlRFUk1FRElBVEUgPSAweDEwLAotCVNBTV9JTV9DT05EX01FVCAgPSAweDEyLAotCVNBTV9SRVNWX0NPTkZMSUNUPSAweDE0LAotCVNBTV9UQVNLX1NFVF9GVUxMPSAweDI4LAotCVNBTV9BQ0FfQUNUSVZFICAgPSAweDMwLAotCVNBTV9UQVNLX0FCT1JURUQgPSAweDQwLAorCS8qIFRoZSBTQU1fU1RBVF8uLiBjb2RlcyBmaXQgaW4gdGhlIGxvd2VyIDYgYml0cyAqLwogCiAJU0FTX0RFVl9OT19SRVNQT05TRSA9IDB4ODAsCiAJU0FTX0RBVEFfVU5ERVJSVU4sCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCmluZGV4IGQ4MGI2ZGIuLjUwY2IzNGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCkBAIC0zODEsNiArMzgxLDE0IEBACiAJCQkgICAgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICosIGludCB0aW1lb3V0LCBpbnQgcmV0cmllcywKIAkJCSAgICBpbnQgKnJlc2lkKTsKIAorI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCitleHRlcm4gaW50IHNjc2lfYXV0b3BtX2dldF9kZXZpY2Uoc3RydWN0IHNjc2lfZGV2aWNlICopOworZXh0ZXJuIHZvaWQgc2NzaV9hdXRvcG1fcHV0X2RldmljZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKik7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgc2NzaV9hdXRvcG1fZ2V0X2RldmljZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmQpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzY3NpX2F1dG9wbV9wdXRfZGV2aWNlKHN0cnVjdCBzY3NpX2RldmljZSAqZCkge30KKyNlbmRpZiAvKiBDT05GSUdfUE1fUlVOVElNRSAqLworCiBzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgc2NzaV9kZXZpY2VfcmVwcm9iZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7CiAJcmV0dXJuIGRldmljZV9yZXByb2JlKCZzZGV2LT5zZGV2X2dlbmRldik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oCmluZGV4IDM0OWM3ZjMuLjdmZmY5NGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oCkBAIC0zMiw2ICszMiw3IEBACiBzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0Owogc3RydWN0IGlzY3NpX2VuZHBvaW50Owogc3RydWN0IFNjc2lfSG9zdDsKK3N0cnVjdCBzY3NpX2NtbmQ7CiBzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm47CiBzdHJ1Y3QgaXNjc2lfY29ubjsKIHN0cnVjdCBpc2NzaV90YXNrOwpAQCAtMjU1LDUgKzI1Niw2IEBACiBleHRlcm4gc3RydWN0IGlzY3NpX2VuZHBvaW50ICppc2NzaV9jcmVhdGVfZW5kcG9pbnQoaW50IGRkX3NpemUpOwogZXh0ZXJuIHZvaWQgaXNjc2lfZGVzdHJveV9lbmRwb2ludChzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwKTsKIGV4dGVybiBzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmlzY3NpX2xvb2t1cF9lbmRwb2ludCh1NjQgaGFuZGxlKTsKK2V4dGVybiBpbnQgaXNjc2lfYmxvY2tfc2NzaV9laChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvcGNtLmggYi9pbmNsdWRlL3NvdW5kL3BjbS5oCmluZGV4IGRkNzZjZGUuLjZlM2EyOTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvcGNtLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9wY20uaApAQCAtMzY2LDcgKzM2Niw3IEBACiAJaW50IG51bWJlcjsKIAljaGFyIG5hbWVbMzJdOwkJCS8qIHN1YnN0cmVhbSBuYW1lICovCiAJaW50IHN0cmVhbTsJCQkvKiBzdHJlYW0gKGRpcmVjdGlvbikgKi8KLQlzdHJ1Y3QgcG1fcW9zX3JlcXVlc3RfbGlzdCAqbGF0ZW5jeV9wbV9xb3NfcmVxOyAvKiBwbV9xb3MgcmVxdWVzdCAqLworCXN0cnVjdCBwbV9xb3NfcmVxdWVzdF9saXN0IGxhdGVuY3lfcG1fcW9zX3JlcTsgLyogcG1fcW9zIHJlcXVlc3QgKi8KIAlzaXplX3QgYnVmZmVyX2J5dGVzX21heDsJLyogbGltaXQgcmluZyBidWZmZXIgc2l6ZSAqLwogCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciBkbWFfYnVmZmVyOwogCXVuc2lnbmVkIGludCBkbWFfYnVmX2lkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ib290LmggYi9pbmNsdWRlL3RyYWNlL2Jvb3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg4ZWEwOC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL3RyYWNlL2Jvb3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLSNpZm5kZWYgX0xJTlVYX1RSQUNFX0JPT1RfSAotI2RlZmluZSBfTElOVVhfVFJBQ0VfQk9PVF9ICi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotLyoKLSAqIFN0cnVjdHVyZSB3aGljaCBkZWZpbmVzIHRoZSB0cmFjZSBvZiBhbiBpbml0Y2FsbAotICogd2hpbGUgaXQgaXMgY2FsbGVkLgotICogWW91IGRvbid0IGhhdmUgdG8gZmlsbCB0aGUgZnVuYyBmaWVsZCBzaW5jZSBpdCBpcwotICogb25seSB1c2VkIGludGVybmFsbHkgYnkgdGhlIHRyYWNlci4KLSAqLwotc3RydWN0IGJvb3RfdHJhY2VfY2FsbCB7Ci0JcGlkX3QJCQljYWxsZXI7Ci0JY2hhcgkJCWZ1bmNbS1NZTV9TWU1CT0xfTEVOXTsKLX07Ci0KLS8qCi0gKiBTdHJ1Y3R1cmUgd2hpY2ggZGVmaW5lcyB0aGUgdHJhY2Ugb2YgYW4gaW5pdGNhbGwKLSAqIHdoaWxlIGl0IHJldHVybnMuCi0gKi8KLXN0cnVjdCBib290X3RyYWNlX3JldCB7Ci0JY2hhcgkJCWZ1bmNbS1NZTV9TWU1CT0xfTEVOXTsKLQlpbnQJCQkJcmVzdWx0OwotCXVuc2lnbmVkIGxvbmcgbG9uZwlkdXJhdGlvbjsJCS8qIG5zZWNzICovCi19OwotCi0jaWZkZWYgQ09ORklHX0JPT1RfVFJBQ0VSCi0vKiBBcHBlbmQgdGhlIHRyYWNlcyBvbiB0aGUgcmluZy1idWZmZXIgKi8KLWV4dGVybiB2b2lkIHRyYWNlX2Jvb3RfY2FsbChzdHJ1Y3QgYm9vdF90cmFjZV9jYWxsICpidCwgaW5pdGNhbGxfdCBmbik7Ci1leHRlcm4gdm9pZCB0cmFjZV9ib290X3JldChzdHJ1Y3QgYm9vdF90cmFjZV9yZXQgKmJ0LCBpbml0Y2FsbF90IGZuKTsKLQotLyogVGVsbHMgdGhlIHRyYWNlciB0aGF0IHNtcF9wcmVfaW5pdGNhbGwgaXMgZmluaXNoZWQuCi0gKiBTbyB3ZSBjYW4gc3RhcnQgdGhlIHRyYWNpbmcKLSAqLwotZXh0ZXJuIHZvaWQgc3RhcnRfYm9vdF90cmFjZSh2b2lkKTsKLQotLyogUmVzdW1lIHRoZSB0cmFjaW5nIG9mIG90aGVyIG5lY2Vzc2FyeSBldmVudHMKLSAqIHN1Y2ggYXMgc2NoZWQgc3dpdGNoZXMKLSAqLwotZXh0ZXJuIHZvaWQgZW5hYmxlX2Jvb3RfdHJhY2Uodm9pZCk7Ci0KLS8qIFN1c3BlbmQgdGhpcyB0cmFjaW5nLiBBY3R1YWxseSwgb25seSBzY2hlZF9zd2l0Y2hlcyB0cmFjaW5nIGhhdmUKLSAqIHRvIGJlIHN1c3BlbmRlZC4gSW5pdGNhbGxzIGRvZXNuJ3QgbmVlZCBpdC4pCi0gKi8KLWV4dGVybiB2b2lkIGRpc2FibGVfYm9vdF90cmFjZSh2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lCi12b2lkIHRyYWNlX2Jvb3RfY2FsbChzdHJ1Y3QgYm9vdF90cmFjZV9jYWxsICpidCwgaW5pdGNhbGxfdCBmbikgeyB9Ci0KLXN0YXRpYyBpbmxpbmUKLXZvaWQgdHJhY2VfYm9vdF9yZXQoc3RydWN0IGJvb3RfdHJhY2VfcmV0ICpidCwgaW5pdGNhbGxfdCBmbikgeyB9Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzdGFydF9ib290X3RyYWNlKHZvaWQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9ib290X3RyYWNlKHZvaWQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfYm9vdF90cmFjZSh2b2lkKSB7IH0KLSNlbmRpZiAvKiBDT05GSUdfQk9PVF9UUkFDRVIgKi8KLQotI2VuZGlmIC8qIF9fTElOVVhfVFJBQ0VfQk9PVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9wb3dlci5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcG93ZXIuaAppbmRleCBjNGVmZTliLi4zNWEyYTZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9wb3dlci5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Bvd2VyLmgKQEAgLTE4LDUyICsxOCw1NSBAQAogCiBERUNMQVJFX0VWRU5UX0NMQVNTKHBvd2VyLAogCi0JVFBfUFJPVE8odW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBzdGF0ZSksCisJVFBfUFJPVE8odW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBzdGF0ZSwgdW5zaWduZWQgaW50IGNwdV9pZCksCiAKLQlUUF9BUkdTKHR5cGUsIHN0YXRlKSwKKwlUUF9BUkdTKHR5cGUsIHN0YXRlLCBjcHVfaWQpLAogCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJX19maWVsZCgJdTY0LAkJdHlwZQkJKQogCQlfX2ZpZWxkKAl1NjQsCQlzdGF0ZQkJKQorCQlfX2ZpZWxkKAl1NjQsCQljcHVfaWQJCSkKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCiAJCV9fZW50cnktPnR5cGUgPSB0eXBlOwogCQlfX2VudHJ5LT5zdGF0ZSA9IHN0YXRlOworCQlfX2VudHJ5LT5jcHVfaWQgPSBjcHVfaWQ7CiAJKSwKIAotCVRQX3ByaW50aygidHlwZT0lbHUgc3RhdGU9JWx1IiwgKHVuc2lnbmVkIGxvbmcpX19lbnRyeS0+dHlwZSwgKHVuc2lnbmVkIGxvbmcpX19lbnRyeS0+c3RhdGUpCisJVFBfcHJpbnRrKCJ0eXBlPSVsdSBzdGF0ZT0lbHUgY3B1X2lkPSVsdSIsICh1bnNpZ25lZCBsb25nKV9fZW50cnktPnR5cGUsCisJCSh1bnNpZ25lZCBsb25nKV9fZW50cnktPnN0YXRlLCAodW5zaWduZWQgbG9uZylfX2VudHJ5LT5jcHVfaWQpCiApOwogCiBERUZJTkVfRVZFTlQocG93ZXIsIHBvd2VyX3N0YXJ0LAogCi0JVFBfUFJPVE8odW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBzdGF0ZSksCisJVFBfUFJPVE8odW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBzdGF0ZSwgdW5zaWduZWQgaW50IGNwdV9pZCksCiAKLQlUUF9BUkdTKHR5cGUsIHN0YXRlKQorCVRQX0FSR1ModHlwZSwgc3RhdGUsIGNwdV9pZCkKICk7CiAKIERFRklORV9FVkVOVChwb3dlciwgcG93ZXJfZnJlcXVlbmN5LAogCi0JVFBfUFJPVE8odW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBzdGF0ZSksCisJVFBfUFJPVE8odW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBzdGF0ZSwgdW5zaWduZWQgaW50IGNwdV9pZCksCiAKLQlUUF9BUkdTKHR5cGUsIHN0YXRlKQorCVRQX0FSR1ModHlwZSwgc3RhdGUsIGNwdV9pZCkKICk7CiAKIFRSQUNFX0VWRU5UKHBvd2VyX2VuZCwKIAotCVRQX1BST1RPKGludCBkdW1teSksCisJVFBfUFJPVE8odW5zaWduZWQgaW50IGNwdV9pZCksCiAKLQlUUF9BUkdTKGR1bW15KSwKKwlUUF9BUkdTKGNwdV9pZCksCiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAotCQlfX2ZpZWxkKAl1NjQsCQlkdW1teQkJKQorCQlfX2ZpZWxkKAl1NjQsCQljcHVfaWQJCSkKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCi0JCV9fZW50cnktPmR1bW15ID0gMHhmZmZmOworCQlfX2VudHJ5LT5jcHVfaWQgPSBjcHVfaWQ7CiAJKSwKIAotCVRQX3ByaW50aygiZHVtbXk9JWx1IiwgKHVuc2lnbmVkIGxvbmcpX19lbnRyeS0+ZHVtbXkpCisJVFBfcHJpbnRrKCJjcHVfaWQ9JWx1IiwgKHVuc2lnbmVkIGxvbmcpX19lbnRyeS0+Y3B1X2lkKQogCiApOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zY2hlZC5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvc2NoZWQuaAppbmRleCBiOWUxZGQ2Li45MjA4YzkyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zY2hlZC5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NjaGVkLmgKQEAgLTUwLDMxICs1MCw2IEBACiApOwogCiAvKgotICogVHJhY2Vwb2ludCBmb3Igd2FpdGluZyBvbiB0YXNrIHRvIHVuc2NoZWR1bGU6Ci0gKi8KLVRSQUNFX0VWRU5UKHNjaGVkX3dhaXRfdGFzaywKLQotCVRQX1BST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCksCi0KLQlUUF9BUkdTKHApLAotCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJX19hcnJheSgJY2hhciwJY29tbSwJVEFTS19DT01NX0xFTgkpCi0JCV9fZmllbGQoCXBpZF90LAlwaWQJCQkpCi0JCV9fZmllbGQoCWludCwJcHJpbwkJCSkKLQkpLAotCi0JVFBfZmFzdF9hc3NpZ24oCi0JCW1lbWNweShfX2VudHJ5LT5jb21tLCBwLT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKLQkJX19lbnRyeS0+cGlkCT0gcC0+cGlkOwotCQlfX2VudHJ5LT5wcmlvCT0gcC0+cHJpbzsKLQkpLAotCi0JVFBfcHJpbnRrKCJjb21tPSVzIHBpZD0lZCBwcmlvPSVkIiwKLQkJICBfX2VudHJ5LT5jb21tLCBfX2VudHJ5LT5waWQsIF9fZW50cnktPnByaW8pCi0pOwotCi0vKgogICogVHJhY2Vwb2ludCBmb3Igd2FraW5nIHVwIGEgdGFzazoKICAqLwogREVDTEFSRV9FVkVOVF9DTEFTUyhzY2hlZF93YWtldXBfdGVtcGxhdGUsCkBAIC0yNDAsNiArMjE1LDEzIEBACiAJICAgICBUUF9BUkdTKHApKTsKIAogLyoKKyAqIFRyYWNlcG9pbnQgZm9yIHdhaXRpbmcgb24gdGFzayB0byB1bnNjaGVkdWxlOgorICovCitERUZJTkVfRVZFTlQoc2NoZWRfcHJvY2Vzc190ZW1wbGF0ZSwgc2NoZWRfd2FpdF90YXNrLAorCVRQX1BST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCksCisJVFBfQVJHUyhwKSk7CisKKy8qCiAgKiBUcmFjZXBvaW50IGZvciBhIHdhaXRpbmcgdGFzazoKICAqLwogVFJBQ0VfRVZFTlQoc2NoZWRfcHJvY2Vzc193YWl0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvdGltZXIuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3RpbWVyLmgKaW5kZXggOTQ5NmI5Ni4uYzYyNDEyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvdGltZXIuaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy90aW1lci5oCkBAIC04LDExICs4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KIAotLyoqCi0gKiB0aW1lcl9pbml0IC0gY2FsbGVkIHdoZW4gdGhlIHRpbWVyIGlzIGluaXRpYWxpemVkCi0gKiBAdGltZXI6CXBvaW50ZXIgdG8gc3RydWN0IHRpbWVyX2xpc3QKLSAqLwotVFJBQ0VfRVZFTlQodGltZXJfaW5pdCwKK0RFQ0xBUkVfRVZFTlRfQ0xBU1ModGltZXJfY2xhc3MsCiAKIAlUUF9QUk9UTyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpLAogCkBAIC0zMCw2ICsyNiwxNyBAQAogKTsKIAogLyoqCisgKiB0aW1lcl9pbml0IC0gY2FsbGVkIHdoZW4gdGhlIHRpbWVyIGlzIGluaXRpYWxpemVkCisgKiBAdGltZXI6CXBvaW50ZXIgdG8gc3RydWN0IHRpbWVyX2xpc3QKKyAqLworREVGSU5FX0VWRU5UKHRpbWVyX2NsYXNzLCB0aW1lcl9pbml0LAorCisJVFBfUFJPVE8oc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKSwKKworCVRQX0FSR1ModGltZXIpCispOworCisvKioKICAqIHRpbWVyX3N0YXJ0IC0gY2FsbGVkIHdoZW4gdGhlIHRpbWVyIGlzIHN0YXJ0ZWQKICAqIEB0aW1lcjoJcG9pbnRlciB0byBzdHJ1Y3QgdGltZXJfbGlzdAogICogQGV4cGlyZXM6CXRoZSB0aW1lcnMgZXhwaXJ5IHRpbWUKQEAgLTk0LDQyICsxMDEsMjIgQEAKICAqIE5PVEU6IERvIE5PVCBkZXJlZmVybmNlIHRpbWVyIGluIFRQX2Zhc3RfYXNzaWduLiBUaGUgcG9pbnRlciBtaWdodAogICogYmUgaW52YWxpZC4gV2Ugc29sZWx5IHRyYWNrIHRoZSBwb2ludGVyLgogICovCi1UUkFDRV9FVkVOVCh0aW1lcl9leHBpcmVfZXhpdCwKK0RFRklORV9FVkVOVCh0aW1lcl9jbGFzcywgdGltZXJfZXhwaXJlX2V4aXQsCiAKIAlUUF9QUk9UTyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpLAogCi0JVFBfQVJHUyh0aW1lciksCi0KLQlUUF9TVFJVQ1RfX2VudHJ5KAotCQlfX2ZpZWxkKHZvaWQgKiwJdGltZXIJKQotCSksCi0KLQlUUF9mYXN0X2Fzc2lnbigKLQkJX19lbnRyeS0+dGltZXIJPSB0aW1lcjsKLQkpLAotCi0JVFBfcHJpbnRrKCJ0aW1lcj0lcCIsIF9fZW50cnktPnRpbWVyKQorCVRQX0FSR1ModGltZXIpCiApOwogCiAvKioKICAqIHRpbWVyX2NhbmNlbCAtIGNhbGxlZCB3aGVuIHRoZSB0aW1lciBpcyBjYW5jZWxlZAogICogQHRpbWVyOglwb2ludGVyIHRvIHN0cnVjdCB0aW1lcl9saXN0CiAgKi8KLVRSQUNFX0VWRU5UKHRpbWVyX2NhbmNlbCwKK0RFRklORV9FVkVOVCh0aW1lcl9jbGFzcywgdGltZXJfY2FuY2VsLAogCiAJVFBfUFJPVE8oc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKSwKIAotCVRQX0FSR1ModGltZXIpLAotCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJX19maWVsZCggdm9pZCAqLAl0aW1lcgkpCi0JKSwKLQotCVRQX2Zhc3RfYXNzaWduKAotCQlfX2VudHJ5LT50aW1lcgk9IHRpbWVyOwotCSksCi0KLQlUUF9wcmludGsoInRpbWVyPSVwIiwgX19lbnRyeS0+dGltZXIpCisJVFBfQVJHUyh0aW1lcikKICk7CiAKIC8qKgpAQCAtMjI0LDE0ICsyMTEsNyBAQAogCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpa3RpbWVfdG9fbnMoKGt0aW1lX3QpIHsgLnR2NjQgPSBfX2VudHJ5LT5ub3cgfSkpCiAgKTsKIAotLyoqCi0gKiBocnRpbWVyX2V4cGlyZV9leGl0IC0gY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBocnRpbWVyIGNhbGxiYWNrIHJldHVybnMKLSAqIEB0aW1lcjoJcG9pbnRlciB0byBzdHJ1Y3QgaHJ0aW1lcgotICoKLSAqIFdoZW4gdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBocnRpbWVyX2V4cGlyZV9lbnRyeSB0cmFjZXBvaW50IHdlIGNhbgotICogZGV0ZXJtaW5lIHRoZSBydW50aW1lIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4KLSAqLwotVFJBQ0VfRVZFTlQoaHJ0aW1lcl9leHBpcmVfZXhpdCwKK0RFQ0xBUkVfRVZFTlRfQ0xBU1MoaHJ0aW1lcl9jbGFzcywKIAogCVRQX1BST1RPKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKSwKIApAQCAtMjQ5LDI0ICsyMjksMjggQEAKICk7CiAKIC8qKgotICogaHJ0aW1lcl9jYW5jZWwgLSBjYWxsZWQgd2hlbiB0aGUgaHJ0aW1lciBpcyBjYW5jZWxlZAotICogQGhydGltZXI6CXBvaW50ZXIgdG8gc3RydWN0IGhydGltZXIKKyAqIGhydGltZXJfZXhwaXJlX2V4aXQgLSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGhydGltZXIgY2FsbGJhY2sgcmV0dXJucworICogQHRpbWVyOglwb2ludGVyIHRvIHN0cnVjdCBocnRpbWVyCisgKgorICogV2hlbiB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIGhydGltZXJfZXhwaXJlX2VudHJ5IHRyYWNlcG9pbnQgd2UgY2FuCisgKiBkZXRlcm1pbmUgdGhlIHJ1bnRpbWUgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgogICovCi1UUkFDRV9FVkVOVChocnRpbWVyX2NhbmNlbCwKK0RFRklORV9FVkVOVChocnRpbWVyX2NsYXNzLCBocnRpbWVyX2V4cGlyZV9leGl0LAogCiAJVFBfUFJPVE8oc3RydWN0IGhydGltZXIgKmhydGltZXIpLAogCi0JVFBfQVJHUyhocnRpbWVyKSwKKwlUUF9BUkdTKGhydGltZXIpCispOwogCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJX19maWVsZCggdm9pZCAqLAlocnRpbWVyCSkKLQkpLAorLyoqCisgKiBocnRpbWVyX2NhbmNlbCAtIGNhbGxlZCB3aGVuIHRoZSBocnRpbWVyIGlzIGNhbmNlbGVkCisgKiBAaHJ0aW1lcjoJcG9pbnRlciB0byBzdHJ1Y3QgaHJ0aW1lcgorICovCitERUZJTkVfRVZFTlQoaHJ0aW1lcl9jbGFzcywgaHJ0aW1lcl9jYW5jZWwsCiAKLQlUUF9mYXN0X2Fzc2lnbigKLQkJX19lbnRyeS0+aHJ0aW1lcgk9IGhydGltZXI7Ci0JKSwKKwlUUF9QUk9UTyhzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lciksCiAKLQlUUF9wcmludGsoImhydGltZXI9JXAiLCBfX2VudHJ5LT5ocnRpbWVyKQorCVRQX0FSR1MoaHJ0aW1lcikKICk7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9mdHJhY2UuaCBiL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmgKaW5kZXggNWE2NDkwNS4uYTkzNzdjMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9mdHJhY2UuaAorKysgYi9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oCkBAIC03NSwxNSArNzUsMTIgQEAKICNkZWZpbmUgREVGSU5FX0VWRU5UX1BSSU5UKHRlbXBsYXRlLCBuYW1lLCBwcm90bywgYXJncywgcHJpbnQpCVwKIAlERUZJTkVfRVZFTlQodGVtcGxhdGUsIG5hbWUsIFBBUkFNUyhwcm90byksIFBBUkFNUyhhcmdzKSkKIAotI3VuZGVmIF9fY3BwYXJnCi0jZGVmaW5lIF9fY3BwYXJnKGFyZy4uLikgYXJnCi0KIC8qIENhbGxiYWNrcyBhcmUgbWVhbmluZ2xlc3MgdG8gZnRyYWNlLiAqLwogI3VuZGVmIFRSQUNFX0VWRU5UX0ZOCiAjZGVmaW5lIFRSQUNFX0VWRU5UX0ZOKG5hbWUsIHByb3RvLCBhcmdzLCB0c3RydWN0LAkJCVwKIAkJYXNzaWduLCBwcmludCwgcmVnLCB1bnJlZykJCQkJXAotCVRSQUNFX0VWRU5UKG5hbWUsIF9fY3BwYXJnKHByb3RvKSwgX19jcHBhcmcoYXJncyksCQlcCi0JCV9fY3BwYXJnKHRzdHJ1Y3QpLCBfX2NwcGFyZyhhc3NpZ24pLCBfX2NwcGFyZyhwcmludCkpCVwKKwlUUkFDRV9FVkVOVChuYW1lLCBQQVJBTVMocHJvdG8pLCBQQVJBTVMoYXJncyksCQkJXAorCQlQQVJBTVModHN0cnVjdCksIFBBUkFNUyhhc3NpZ24pLCBQQVJBTVMocHJpbnQpKQkJXAogCiAjaW5jbHVkZSBUUkFDRV9JTkNMVURFKFRSQUNFX0lOQ0xVREVfRklMRSkKIApAQCAtMTQ1LDcgKzE0Miw3IEBACiAgKglzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKICAqCXN0cnVjdCBmdHJhY2VfcmF3XzxjYWxsPiAqZmllbGQ7IDwtLSBkZWZpbmVkIGluIHN0YWdlIDEKICAqCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnk7Ci0gKglzdHJ1Y3QgdHJhY2Vfc2VxICpwOworICoJc3RydWN0IHRyYWNlX3NlcSAqcCA9ICZpdGVyLT50bXBfc2VxOwogICoJaW50IHJldDsKICAqCiAgKgllbnRyeSA9IGl0ZXItPmVudDsKQEAgLTE1NywxMiArMTU0LDEwIEBACiAgKgogICoJZmllbGQgPSAodHlwZW9mKGZpZWxkKSllbnRyeTsKICAqCi0gKglwID0gJmdldF9jcHVfdmFyKGZ0cmFjZV9ldmVudF9zZXEpOwogICoJdHJhY2Vfc2VxX2luaXQocCk7CiAgKglyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlczogIiwgPGNhbGw+KTsKICAqCWlmIChyZXQpCiAgKgkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCA8VFBfcHJpbnRrPiAiXG4iKTsKLSAqCXB1dF9jcHUoKTsKICAqCWlmICghcmV0KQogICoJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKICAqCkBAIC0yMTYsNyArMjExLDcgQEAKIAlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsJCQkJXAogCXN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCAqZmllbGQ7CQkJCVwKIAlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5OwkJCQkJXAotCXN0cnVjdCB0cmFjZV9zZXEgKnA7CQkJCQkJXAorCXN0cnVjdCB0cmFjZV9zZXEgKnAgPSAmaXRlci0+dG1wX3NlcTsJCQkJXAogCWludCByZXQ7CQkJCQkJCVwKIAkJCQkJCQkJCVwKIAlldmVudCA9IGNvbnRhaW5lcl9vZih0cmFjZV9ldmVudCwgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsLAlcCkBAIC0yMzEsMTIgKzIyNiwxMCBAQAogCQkJCQkJCQkJXAogCWZpZWxkID0gKHR5cGVvZihmaWVsZCkpZW50cnk7CQkJCQlcCiAJCQkJCQkJCQlcCi0JcCA9ICZnZXRfY3B1X3ZhcihmdHJhY2VfZXZlbnRfc2VxKTsJCQkJXAogCXRyYWNlX3NlcV9pbml0KHApOwkJCQkJCVwKIAlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlczogIiwgZXZlbnQtPm5hbWUpOwkJCVwKIAlpZiAocmV0KQkJCQkJCQlcCiAJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgcHJpbnQpOwkJCVwKLQlwdXRfY3B1KCk7CQkJCQkJCVwKIAlpZiAoIXJldCkJCQkJCQkJXAogCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CQkJCVwKIAkJCQkJCQkJCVwKQEAgLTI1NSw3ICsyNDgsNyBAQAogCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOwkJCQlcCiAJc3RydWN0IGZ0cmFjZV9yYXdfIyN0ZW1wbGF0ZSAqZmllbGQ7CQkJCVwKIAlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5OwkJCQkJXAotCXN0cnVjdCB0cmFjZV9zZXEgKnA7CQkJCQkJXAorCXN0cnVjdCB0cmFjZV9zZXEgKnAgPSAmaXRlci0+dG1wX3NlcTsJCQkJXAogCWludCByZXQ7CQkJCQkJCVwKIAkJCQkJCQkJCVwKIAllbnRyeSA9IGl0ZXItPmVudDsJCQkJCQlcCkBAIC0yNjcsMTIgKzI2MCwxMCBAQAogCQkJCQkJCQkJXAogCWZpZWxkID0gKHR5cGVvZihmaWVsZCkpZW50cnk7CQkJCQlcCiAJCQkJCQkJCQlcCi0JcCA9ICZnZXRfY3B1X3ZhcihmdHJhY2VfZXZlbnRfc2VxKTsJCQkJXAogCXRyYWNlX3NlcV9pbml0KHApOwkJCQkJCVwKIAlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlczogIiwgI2NhbGwpOwkJCVwKIAlpZiAocmV0KQkJCQkJCQlcCiAJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgcHJpbnQpOwkJCVwKLQlwdXRfY3B1KCk7CQkJCQkJCVwKIAlpZiAoIXJldCkJCQkJCQkJXAogCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CQkJCVwKIAkJCQkJCQkJCVwKQEAgLTQzOSw2ICs0MzAsNyBAQAogICoJLmZpZWxkcwkJCT0gTElTVF9IRUFEX0lOSVQoZXZlbnRfY2xhc3NfIyNjYWxsLmZpZWxkcyksCiAgKgkucmF3X2luaXQJCT0gdHJhY2VfZXZlbnRfcmF3X2luaXQsCiAgKgkucHJvYmUJCQk9IGZ0cmFjZV9yYXdfZXZlbnRfIyNjYWxsLAorICoJLnJlZwkJCT0gZnRyYWNlX2V2ZW50X3JlZywKICAqIH07CiAgKgogICogc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQKQEAgLTU2Nyw2ICs1NTksNyBAQAogCS5maWVsZHMJCQk9IExJU1RfSEVBRF9JTklUKGV2ZW50X2NsYXNzXyMjY2FsbC5maWVsZHMpLFwKIAkucmF3X2luaXQJCT0gdHJhY2VfZXZlbnRfcmF3X2luaXQsCQkJXAogCS5wcm9iZQkJCT0gZnRyYWNlX3Jhd19ldmVudF8jI2NhbGwsCQlcCisJLnJlZwkJCT0gZnRyYWNlX2V2ZW50X3JlZywJCQlcCiAJX1RSQUNFX1BFUkZfSU5JVChjYWxsKQkJCQkJCVwKIH07CiAKQEAgLTcwNSw3ICs2OTgsNyBAQAogCWludCBfX2RhdGFfc2l6ZTsJCQkJCQlcCiAJaW50IHJjdHg7CQkJCQkJCVwKIAkJCQkJCQkJCVwKLQlwZXJmX2ZldGNoX2NhbGxlcl9yZWdzKCZfX3JlZ3MsIDEpOwkJCQlcCisJcGVyZl9mZXRjaF9jYWxsZXJfcmVncygmX19yZWdzKTsJCQkJXAogCQkJCQkJCQkJXAogCV9fZGF0YV9zaXplID0gZnRyYWNlX2dldF9vZmZzZXRzXyMjY2FsbCgmX19kYXRhX29mZnNldHMsIGFyZ3MpOyBcCiAJX19lbnRyeV9zaXplID0gQUxJR04oX19kYXRhX3NpemUgKyBzaXplb2YoKmVudHJ5KSArIHNpemVvZih1MzIpLFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2Uvc3lzY2FsbC5oIGIvaW5jbHVkZS90cmFjZS9zeXNjYWxsLmgKaW5kZXggMjU3ZTA4OS4uMzE5NjZhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9zeXNjYWxsLmgKKysrIGIvaW5jbHVkZS90cmFjZS9zeXNjYWxsLmgKQEAgLTI2LDcgKzI2LDYgQEAKIAljb25zdCBjaGFyCSoqdHlwZXM7CiAJY29uc3QgY2hhcgkqKmFyZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCBlbnRlcl9maWVsZHM7Ci0Jc3RydWN0IGxpc3RfaGVhZCBleGl0X2ZpZWxkczsKIAogCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZW50ZXJfZXZlbnQ7CiAJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpleGl0X2V2ZW50OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS94ZW4vZXZlbnRzLmggYi9pbmNsdWRlL3hlbi9ldmVudHMuaAppbmRleCBlNjhkNTlhLi5hMTVkOTMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3hlbi9ldmVudHMuaAorKysgYi9pbmNsdWRlL3hlbi9ldmVudHMuaApAQCAtNTYsNCArNTYsMTEgQEAKIC8qIERldGVybWluZSB0aGUgSVJRIHdoaWNoIGlzIGJvdW5kIHRvIGFuIGV2ZW50IGNoYW5uZWwgKi8KIHVuc2lnbmVkIGlycV9mcm9tX2V2dGNobih1bnNpZ25lZCBpbnQgZXZ0Y2huKTsKIAorLyogWGVuIEhWTSBldnRjaG4gdmVjdG9yIGNhbGxiYWNrICovCitleHRlcm4gdm9pZCB4ZW5faHZtX2NhbGxiYWNrX3ZlY3Rvcih2b2lkKTsKK2V4dGVybiBpbnQgeGVuX2hhdmVfdmVjdG9yX2NhbGxiYWNrOworaW50IHhlbl9zZXRfY2FsbGJhY2tfdmlhKHVpbnQ2NF90IHZpYSk7Cit2b2lkIHhlbl9ldnRjaG5fZG9fdXBjYWxsKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3ZvaWQgeGVuX2h2bV9ldnRjaG5fZG9fdXBjYWxsKHZvaWQpOworCiAjZW5kaWYJLyogX1hFTl9FVkVOVFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS94ZW4vZ3JhbnRfdGFibGUuaCBiL2luY2x1ZGUveGVuL2dyYW50X3RhYmxlLmgKaW5kZXggYTQwZjFjZC4uOWE3MzE3MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS94ZW4vZ3JhbnRfdGFibGUuaAorKysgYi9pbmNsdWRlL3hlbi9ncmFudF90YWJsZS5oCkBAIC01MSw2ICs1MSw3IEBACiAJdTE2IGNvdW50OwogfTsKIAoraW50IGdudHRhYl9pbml0KHZvaWQpOwogaW50IGdudHRhYl9zdXNwZW5kKHZvaWQpOwogaW50IGdudHRhYl9yZXN1bWUodm9pZCk7CiAKQEAgLTExMiw2ICsxMTMsOSBAQAogdm9pZCBhcmNoX2dudHRhYl91bm1hcF9zaGFyZWQoc3RydWN0IGdyYW50X2VudHJ5ICpzaGFyZWQsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIG5yX2dmcmFtZXMpOwogCitleHRlcm4gdW5zaWduZWQgbG9uZyB4ZW5faHZtX3Jlc3VtZV9mcmFtZXM7Cit1bnNpZ25lZCBpbnQgZ250dGFiX21heF9ncmFudF9mcmFtZXModm9pZCk7CisKICNkZWZpbmUgZ250dGFiX21hcF92YWRkcihtYXApICgodm9pZCAqKShtYXAuaG9zdF92aXJ0X2FkZHIpKQogCiAjZW5kaWYgLyogX19BU01fR05UVEFCX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS94ZW4vaHZtLmggYi9pbmNsdWRlL3hlbi9odm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTkzZmEyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS94ZW4vaHZtLmgKQEAgLTAsMCArMSwzMCBAQAorLyogU2ltcGxlIHdyYXBwZXJzIGFyb3VuZCBIVk0gZnVuY3Rpb25zICovCisjaWZuZGVmIFhFTl9IVk1fSF9fCisjZGVmaW5lIFhFTl9IVk1fSF9fCisKKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL2h2bS9wYXJhbXMuaD4KKyNpbmNsdWRlIDxhc20veGVuL2h5cGVyY2FsbC5oPgorCitzdGF0aWMgaW5saW5lIGludCBodm1fZ2V0X3BhcmFtZXRlcihpbnQgaWR4LCB1aW50NjRfdCAqdmFsdWUpCit7CisJc3RydWN0IHhlbl9odm1fcGFyYW0geGh2OworCWludCByOworCisJeGh2LmRvbWlkID0gRE9NSURfU0VMRjsKKwl4aHYuaW5kZXggPSBpZHg7CisJciA9IEhZUEVSVklTT1JfaHZtX29wKEhWTU9QX2dldF9wYXJhbSwgJnhodik7CisJaWYgKHIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90IGdldCBodm0gcGFyYW1ldGVyICVkOiAlZCFcbiIsCisJCQlpZHgsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJKnZhbHVlID0geGh2LnZhbHVlOworCXJldHVybiByOworfQorCisjZGVmaW5lIEhWTV9DQUxMQkFDS19WSUFfVFlQRV9WRUNUT1IgMHgyCisjZGVmaW5lIEhWTV9DQUxMQkFDS19WSUFfVFlQRV9TSElGVCA1NgorI2RlZmluZSBIVk1fQ0FMTEJBQ0tfVkVDVE9SKHgpICgoKHVpbnQ2NF90KUhWTV9DQUxMQkFDS19WSUFfVFlQRV9WRUNUT1IpPDxcCisJCUhWTV9DQUxMQkFDS19WSUFfVFlQRV9TSElGVCB8ICh4KSkKKworI2VuZGlmIC8qIFhFTl9IVk1fSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3hlbi9pbnRlcmZhY2UvZmVhdHVyZXMuaCBiL2luY2x1ZGUveGVuL2ludGVyZmFjZS9mZWF0dXJlcy5oCmluZGV4IGY1MWI2NDEuLjcwZDI1NjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUveGVuL2ludGVyZmFjZS9mZWF0dXJlcy5oCisrKyBiL2luY2x1ZGUveGVuL2ludGVyZmFjZS9mZWF0dXJlcy5oCkBAIC00MSw2ICs0MSwxMiBAQAogLyogeDg2OiBEb2VzIHRoaXMgWGVuIGhvc3Qgc3VwcG9ydCB0aGUgTU1VX1BUX1VQREFURV9QUkVTRVJWRV9BRCBoeXBlcmNhbGw/ICovCiAjZGVmaW5lIFhFTkZFQVRfbW11X3B0X3VwZGF0ZV9wcmVzZXJ2ZV9hZCAgNQogCisvKiB4ODY6IERvZXMgdGhpcyBYZW4gaG9zdCBzdXBwb3J0IHRoZSBIVk0gY2FsbGJhY2sgdmVjdG9yIHR5cGU/ICovCisjZGVmaW5lIFhFTkZFQVRfaHZtX2NhbGxiYWNrX3ZlY3RvciAgICAgICAgOAorCisvKiB4ODY6IHB2Y2xvY2sgYWxnb3JpdGhtIGlzIHNhZmUgdG8gdXNlIG9uIEhWTSAqLworI2RlZmluZSBYRU5GRUFUX2h2bV9zYWZlX3B2Y2xvY2sgICAgICAgICAgIDkKKwogI2RlZmluZSBYRU5GRUFUX05SX1NVQk1BUFMgMQogCiAjZW5kaWYgLyogX19YRU5fUFVCTElDX0ZFQVRVUkVTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS94ZW4vaW50ZXJmYWNlL2dyYW50X3RhYmxlLmggYi9pbmNsdWRlL3hlbi9pbnRlcmZhY2UvZ3JhbnRfdGFibGUuaAppbmRleCAzOWRhOTNjLi4zOWU1NzE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3hlbi9pbnRlcmZhY2UvZ3JhbnRfdGFibGUuaAorKysgYi9pbmNsdWRlL3hlbi9pbnRlcmZhY2UvZ3JhbnRfdGFibGUuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmbmRlZiBfX1hFTl9QVUJMSUNfR1JBTlRfVEFCTEVfSF9fCiAjZGVmaW5lIF9fWEVOX1BVQkxJQ19HUkFOVF9UQUJMRV9IX18KIAorI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UveGVuLmg+CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogR1JBTlQgVEFCTEUgUkVQUkVTRU5UQVRJT04KZGlmZiAtLWdpdCBhL2luY2x1ZGUveGVuL2ludGVyZmFjZS9odm0vaHZtX29wLmggYi9pbmNsdWRlL3hlbi9pbnRlcmZhY2UvaHZtL2h2bV9vcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ODI3ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3hlbi9pbnRlcmZhY2UvaHZtL2h2bV9vcC5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8KKyAqIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCisgKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfX1hFTl9QVUJMSUNfSFZNX0hWTV9PUF9IX18KKyNkZWZpbmUgX19YRU5fUFVCTElDX0hWTV9IVk1fT1BfSF9fCisKKy8qIEdldC9zZXQgc3ViY29tbWFuZHM6IHRoZSBzZWNvbmQgYXJndW1lbnQgb2YgdGhlIGh5cGVyY2FsbCBpcyBhCisgKiBwb2ludGVyIHRvIGEgeGVuX2h2bV9wYXJhbSBzdHJ1Y3QuICovCisjZGVmaW5lIEhWTU9QX3NldF9wYXJhbSAgICAgICAgICAgMAorI2RlZmluZSBIVk1PUF9nZXRfcGFyYW0gICAgICAgICAgIDEKK3N0cnVjdCB4ZW5faHZtX3BhcmFtIHsKKyAgICBkb21pZF90ICBkb21pZDsgICAgLyogSU4gKi8KKyAgICB1aW50MzJfdCBpbmRleDsgICAgLyogSU4gKi8KKyAgICB1aW50NjRfdCB2YWx1ZTsgICAgLyogSU4vT1VUICovCit9OworREVGSU5FX0dVRVNUX0hBTkRMRV9TVFJVQ1QoeGVuX2h2bV9wYXJhbSk7CisKKy8qIEhpbnQgZnJvbSBQViBkcml2ZXJzIGZvciBwYWdldGFibGUgZGVzdHJ1Y3Rpb24uICovCisjZGVmaW5lIEhWTU9QX3BhZ2V0YWJsZV9keWluZyAgICAgICA5CitzdHJ1Y3QgeGVuX2h2bV9wYWdldGFibGVfZHlpbmcgeworICAgIC8qIERvbWFpbiB3aXRoIGEgcGFnZXRhYmxlIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4gKi8KKyAgICBkb21pZF90ICBkb21pZDsKKyAgICAvKiBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSB0b3BsZXZlbCBwYWdldGFibGUgZHlpbmcgKi8KKyAgICBhbGlnbmVkX3U2NCBncGE7Cit9OwordHlwZWRlZiBzdHJ1Y3QgeGVuX2h2bV9wYWdldGFibGVfZHlpbmcgeGVuX2h2bV9wYWdldGFibGVfZHlpbmdfdDsKK0RFRklORV9HVUVTVF9IQU5ETEVfU1RSVUNUKHhlbl9odm1fcGFnZXRhYmxlX2R5aW5nX3QpOworIAorI2VuZGlmIC8qIF9fWEVOX1BVQkxJQ19IVk1fSFZNX09QX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS94ZW4vaW50ZXJmYWNlL2h2bS9wYXJhbXMuaCBiL2luY2x1ZGUveGVuL2ludGVyZmFjZS9odm0vcGFyYW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg4OGQ4YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUveGVuL2ludGVyZmFjZS9odm0vcGFyYW1zLmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bworICogZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKKyAqIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9fWEVOX1BVQkxJQ19IVk1fUEFSQU1TX0hfXworI2RlZmluZSBfX1hFTl9QVUJMSUNfSFZNX1BBUkFNU19IX18KKworI2luY2x1ZGUgImh2bV9vcC5oIgorCisvKgorICogUGFyYW1ldGVyIHNwYWNlIGZvciBIVk1PUF97c2V0LGdldH1fcGFyYW0uCisgKi8KKworLyoKKyAqIEhvdyBzaG91bGQgQ1BVMCBldmVudC1jaGFubmVsIG5vdGlmaWNhdGlvbnMgYmUgZGVsaXZlcmVkPworICogdmFsWzYzOjU2XSA9PSAwOiB2YWxbNTU6MF0gaXMgYSBkZWxpdmVyeSBHU0kgKEdsb2JhbCBTeXN0ZW0gSW50ZXJydXB0KS4KKyAqIHZhbFs2Mzo1Nl0gPT0gMTogdmFsWzU1OjBdIGlzIGEgZGVsaXZlcnkgUENJIElOVHggbGluZSwgYXMgZm9sbG93czoKKyAqICAgICAgICAgICAgICAgICAgRG9tYWluID0gdmFsWzQ3OjMyXSwgQnVzICA9IHZhbFszMToxNl0sCisgKiAgICAgICAgICAgICAgICAgIERldkZuICA9IHZhbFsxNTogOF0sIEludFggPSB2YWxbIDE6IDBdCisgKiB2YWxbNjM6NTZdID09IDI6IHZhbFs3OjBdIGlzIGEgdmVjdG9yIG51bWJlci4KKyAqIElmIHZhbCA9PSAwIHRoZW4gQ1BVMCBldmVudC1jaGFubmVsIG5vdGlmaWNhdGlvbnMgYXJlIG5vdCBkZWxpdmVyZWQuCisgKi8KKyNkZWZpbmUgSFZNX1BBUkFNX0NBTExCQUNLX0lSUSAwCisKKyNkZWZpbmUgSFZNX1BBUkFNX1NUT1JFX1BGTiAgICAxCisjZGVmaW5lIEhWTV9QQVJBTV9TVE9SRV9FVlRDSE4gMgorCisjZGVmaW5lIEhWTV9QQVJBTV9QQUVfRU5BQkxFRCAgNAorCisjZGVmaW5lIEhWTV9QQVJBTV9JT1JFUV9QRk4gICAgNQorCisjZGVmaW5lIEhWTV9QQVJBTV9CVUZJT1JFUV9QRk4gNgorCisvKgorICogU2V0IG1vZGUgZm9yIHZpcnR1YWwgdGltZXJzIChjdXJyZW50bHkgeDg2IG9ubHkpOgorICogIGRlbGF5X2Zvcl9taXNzZWRfdGlja3MgKGRlZmF1bHQpOgorICogICBEbyBub3QgYWR2YW5jZSBhIHZjcHUncyB0aW1lIGJleW9uZCB0aGUgY29ycmVjdCBkZWxpdmVyeSB0aW1lIGZvcgorICogICBpbnRlcnJ1cHRzIHRoYXQgaGF2ZSBiZWVuIG1pc3NlZCBkdWUgdG8gcHJlZW1wdGlvbi4gRGVsaXZlciBtaXNzZWQKKyAqICAgaW50ZXJydXB0cyB3aGVuIHRoZSB2Y3B1IGlzIHJlc2NoZWR1bGVkIGFuZCBhZHZhbmNlIHRoZSB2Y3B1J3MgdmlydHVhbAorICogICB0aW1lIHN0ZXB3aXNlIGZvciBlYWNoIG9uZS4KKyAqICBub19kZWxheV9mb3JfbWlzc2VkX3RpY2tzOgorICogICBBcyBhYm92ZSwgbWlzc2VkIGludGVycnVwdHMgYXJlIGRlbGl2ZXJlZCwgYnV0IGd1ZXN0IHRpbWUgYWx3YXlzIHRyYWNrcworICogICB3YWxsY2xvY2sgKGkuZS4sIHJlYWwpIHRpbWUgd2hpbGUgZG9pbmcgc28uCisgKiAgbm9fbWlzc2VkX3RpY2tzX3BlbmRpbmc6CisgKiAgIE5vIG1pc3NlZCBpbnRlcnJ1cHRzIGFyZSBoZWxkIHBlbmRpbmcuIEluc3RlYWQsIHRvIGVuc3VyZSB0aWNrcyBhcmUKKyAqICAgZGVsaXZlcmVkIGF0IHNvbWUgbm9uLXplcm8gcmF0ZSwgaWYgd2UgZGV0ZWN0IG1pc3NlZCB0aWNrcyB0aGVuIHRoZQorICogICBpbnRlcm5hbCB0aWNrIGFsYXJtIGlzIG5vdCBkaXNhYmxlZCBpZiB0aGUgVkNQVSBpcyBwcmVlbXB0ZWQgZHVyaW5nIHRoZQorICogICBuZXh0IHRpY2sgcGVyaW9kLgorICogIG9uZV9taXNzZWRfdGlja19wZW5kaW5nOgorICogICBNaXNzZWQgaW50ZXJydXB0cyBhcmUgY29sbGFwc2VkIHRvZ2V0aGVyIGFuZCBkZWxpdmVyZWQgYXMgb25lICdsYXRlIHRpY2snLgorICogICBHdWVzdCB0aW1lIGFsd2F5cyB0cmFja3Mgd2FsbGNsb2NrIChpLmUuLCByZWFsKSB0aW1lLgorICovCisjZGVmaW5lIEhWTV9QQVJBTV9USU1FUl9NT0RFICAgMTAKKyNkZWZpbmUgSFZNUFRNX2RlbGF5X2Zvcl9taXNzZWRfdGlja3MgICAgMAorI2RlZmluZSBIVk1QVE1fbm9fZGVsYXlfZm9yX21pc3NlZF90aWNrcyAxCisjZGVmaW5lIEhWTVBUTV9ub19taXNzZWRfdGlja3NfcGVuZGluZyAgIDIKKyNkZWZpbmUgSFZNUFRNX29uZV9taXNzZWRfdGlja19wZW5kaW5nICAgMworCisvKiBCb29sZWFuOiBFbmFibGUgdmlydHVhbCBIUEVUIChoaWdoLXByZWNpc2lvbiBldmVudCB0aW1lcik/ICh4ODYtb25seSkgKi8KKyNkZWZpbmUgSFZNX1BBUkFNX0hQRVRfRU5BQkxFRCAxMQorCisvKiBJZGVudGl0eS1tYXAgcGFnZSBkaXJlY3RvcnkgdXNlZCBieSBJbnRlbCBFUFQgd2hlbiBDUjAuUEc9MC4gKi8KKyNkZWZpbmUgSFZNX1BBUkFNX0lERU5UX1BUICAgICAxMgorCisvKiBEZXZpY2UgTW9kZWwgZG9tYWluLCBkZWZhdWx0cyB0byAwLiAqLworI2RlZmluZSBIVk1fUEFSQU1fRE1fRE9NQUlOICAgIDEzCisKKy8qIEFDUEkgUyBzdGF0ZTogY3VycmVudGx5IHN1cHBvcnQgUzAgYW5kIFMzIG9uIHg4Ni4gKi8KKyNkZWZpbmUgSFZNX1BBUkFNX0FDUElfU19TVEFURSAxNAorCisvKiBUU1MgdXNlZCBvbiBJbnRlbCB3aGVuIENSMC5QRT0wLiAqLworI2RlZmluZSBIVk1fUEFSQU1fVk04Nl9UU1MgICAgIDE1CisKKy8qIEJvb2xlYW46IEVuYWJsZSBhbGlnbmluZyBhbGwgcGVyaW9kaWMgdnB0cyB0byByZWR1Y2UgaW50ZXJydXB0cyAqLworI2RlZmluZSBIVk1fUEFSQU1fVlBUX0FMSUdOICAgIDE2CisKKyNkZWZpbmUgSFZNX05SX1BBUkFNUyAgICAgICAgICAxNworCisjZW5kaWYgLyogX19YRU5fUFVCTElDX0hWTV9QQVJBTVNfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3hlbi9wbGF0Zm9ybV9wY2kuaCBiL2luY2x1ZGUveGVuL3BsYXRmb3JtX3BjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlOWQ2NzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3hlbi9wbGF0Zm9ybV9wY2kuaApAQCAtMCwwICsxLDQ5IEBACisjaWZuZGVmIF9YRU5fUExBVEZPUk1fUENJX0gKKyNkZWZpbmUgX1hFTl9QTEFURk9STV9QQ0lfSAorCisjZGVmaW5lIFhFTl9JT1BPUlRfTUFHSUNfVkFMIDB4NDlkMgorI2RlZmluZSBYRU5fSU9QT1JUX0xJTlVYX1BST0ROVU0gMHgwMDAzCisjZGVmaW5lIFhFTl9JT1BPUlRfTElOVVhfRFJWVkVSICAweDAwMDEKKworI2RlZmluZSBYRU5fSU9QT1JUX0JBU0UgMHgxMAorCisjZGVmaW5lIFhFTl9JT1BPUlRfUExBVEZMQUdTCShYRU5fSU9QT1JUX0JBU0UgKyAwKSAvKiAxIGJ5dGUgYWNjZXNzIChSL1cpICovCisjZGVmaW5lIFhFTl9JT1BPUlRfTUFHSUMJKFhFTl9JT1BPUlRfQkFTRSArIDApIC8qIDIgYnl0ZSBhY2Nlc3MgKFIpICovCisjZGVmaW5lIFhFTl9JT1BPUlRfVU5QTFVHCShYRU5fSU9QT1JUX0JBU0UgKyAwKSAvKiAyIGJ5dGUgYWNjZXNzIChXKSAqLworI2RlZmluZSBYRU5fSU9QT1JUX0RSVlZFUgkoWEVOX0lPUE9SVF9CQVNFICsgMCkgLyogNCBieXRlIGFjY2VzcyAoVykgKi8KKworI2RlZmluZSBYRU5fSU9QT1JUX1NZU0xPRwkoWEVOX0lPUE9SVF9CQVNFICsgMikgLyogMSBieXRlIGFjY2VzcyAoVykgKi8KKyNkZWZpbmUgWEVOX0lPUE9SVF9QUk9UT1ZFUgkoWEVOX0lPUE9SVF9CQVNFICsgMikgLyogMSBieXRlIGFjY2VzcyAoUikgKi8KKyNkZWZpbmUgWEVOX0lPUE9SVF9QUk9ETlVNCShYRU5fSU9QT1JUX0JBU0UgKyAyKSAvKiAyIGJ5dGUgYWNjZXNzIChXKSAqLworCisjZGVmaW5lIFhFTl9VTlBMVUdfQUxMX0lERV9ESVNLUyAxCisjZGVmaW5lIFhFTl9VTlBMVUdfQUxMX05JQ1MgMgorI2RlZmluZSBYRU5fVU5QTFVHX0FVWF9JREVfRElTS1MgNAorI2RlZmluZSBYRU5fVU5QTFVHX0FMTCA3CisjZGVmaW5lIFhFTl9VTlBMVUdfSUdOT1JFIDgKKworc3RhdGljIGlubGluZSBpbnQgeGVuX211c3RfdW5wbHVnX25pY3Modm9pZCkgeworI2lmIChkZWZpbmVkKENPTkZJR19YRU5fTkVUREVWX0ZST05URU5EKSB8fCBcCisJCWRlZmluZWQoQ09ORklHX1hFTl9ORVRERVZfRlJPTlRFTkRfTU9EVUxFKSkgJiYgXAorCQkoZGVmaW5lZChDT05GSUdfWEVOX1BMQVRGT1JNX1BDSSkgfHwgXAorCQkgZGVmaW5lZChDT05GSUdfWEVOX1BMQVRGT1JNX1BDSV9NT0RVTEUpKQorICAgICAgICByZXR1cm4gMTsKKyNlbHNlCisgICAgICAgIHJldHVybiAwOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHhlbl9tdXN0X3VucGx1Z19kaXNrcyh2b2lkKSB7CisjaWYgKGRlZmluZWQoQ09ORklHX1hFTl9CTEtERVZfRlJPTlRFTkQpIHx8IFwKKwkJZGVmaW5lZChDT05GSUdfWEVOX0JMS0RFVl9GUk9OVEVORF9NT0RVTEUpKSAmJiBcCisJCShkZWZpbmVkKENPTkZJR19YRU5fUExBVEZPUk1fUENJKSB8fCBcCisJCSBkZWZpbmVkKENPTkZJR19YRU5fUExBVEZPUk1fUENJX01PRFVMRSkpCisgICAgICAgIHJldHVybiAxOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworZXh0ZXJuIGludCB4ZW5fcGxhdGZvcm1fcGNpX3VucGx1ZzsKKworI2VuZGlmIC8qIF9YRU5fUExBVEZPUk1fUENJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUveGVuL3hlbi1vcHMuaCBiL2luY2x1ZGUveGVuL3hlbi1vcHMuaAppbmRleCA4ODNhMjFiLi40NmJjODFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3hlbi94ZW4tb3BzLmgKKysrIGIvaW5jbHVkZS94ZW4veGVuLW9wcy5oCkBAIC03LDYgKzcsNyBAQAogCiB2b2lkIHhlbl9wcmVfc3VzcGVuZCh2b2lkKTsKIHZvaWQgeGVuX3Bvc3Rfc3VzcGVuZChpbnQgc3VzcGVuZF9jYW5jZWxsZWQpOwordm9pZCB4ZW5faHZtX3Bvc3Rfc3VzcGVuZChpbnQgc3VzcGVuZF9jYW5jZWxsZWQpOwogCiB2b2lkIHhlbl9tbV9waW5fYWxsKHZvaWQpOwogdm9pZCB4ZW5fbW1fdW5waW5fYWxsKHZvaWQpOwpAQCAtMTQsNCArMTUsNiBAQAogdm9pZCB4ZW5fdGltZXJfcmVzdW1lKHZvaWQpOwogdm9pZCB4ZW5fYXJjaF9yZXN1bWUodm9pZCk7CiAKK2ludCB4ZW5fc2V0dXBfc2h1dGRvd25fZXZlbnQodm9pZCk7CisKICNlbmRpZiAvKiBJTkNMVURFX1hFTl9PUFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uYwppbmRleCBhNDJmZGY0Li5iMDNhNGMxIDEwMDY0NAotLS0gYS9pbml0L21haW4uYworKysgYi9pbml0L21haW4uYwpAQCAtNjYsMTEgKzY2LDkgQEAKICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9hc3luYy5oPgogI2luY2x1ZGUgPGxpbnV4L2ttZW1jaGVjay5oPgotI2luY2x1ZGUgPGxpbnV4L2ttZW10cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NmaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NobWVtX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPHRyYWNlL2Jvb3QuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9idWdzLmg+CkBAIC01MzIsNiArNTMwLDcgQEAKIAlwYWdlX2Nncm91cF9pbml0X2ZsYXRtZW0oKTsKIAltZW1faW5pdCgpOwogCWttZW1fY2FjaGVfaW5pdCgpOworCXBlcmNwdV9pbml0X2xhdGUoKTsKIAlwZ3RhYmxlX2NhY2hlX2luaXQoKTsKIAl2bWFsbG9jX2luaXQoKTsKIH0KQEAgLTY2Myw3ICs2NjIsNiBAQAogI2VuZGlmCiAJcGFnZV9jZ3JvdXBfaW5pdCgpOwogCWVuYWJsZV9kZWJ1Z19wYWdlYWxsb2MoKTsKLQlrbWVtdHJhY2VfaW5pdCgpOwogCWttZW1sZWFrX2luaXQoKTsKIAlkZWJ1Z19vYmplY3RzX21lbV9pbml0KCk7CiAJaWRyX2luaXRfY2FjaGUoKTsKQEAgLTcyNSwzOCArNzIzLDMzIEBACiBjb3JlX3BhcmFtKGluaXRjYWxsX2RlYnVnLCBpbml0Y2FsbF9kZWJ1ZywgYm9vbCwgMDY0NCk7CiAKIHN0YXRpYyBjaGFyIG1zZ2J1Zls2NF07Ci1zdGF0aWMgc3RydWN0IGJvb3RfdHJhY2VfY2FsbCBjYWxsOwotc3RhdGljIHN0cnVjdCBib290X3RyYWNlX3JldCByZXQ7CiAKIGludCBkb19vbmVfaW5pdGNhbGwoaW5pdGNhbGxfdCBmbikKIHsKIAlpbnQgY291bnQgPSBwcmVlbXB0X2NvdW50KCk7CiAJa3RpbWVfdCBjYWxsdGltZSwgZGVsdGEsIHJldHRpbWU7CisJdW5zaWduZWQgbG9uZyBsb25nIGR1cmF0aW9uOworCWludCByZXQ7CiAKIAlpZiAoaW5pdGNhbGxfZGVidWcpIHsKLQkJY2FsbC5jYWxsZXIgPSB0YXNrX3BpZF9ucihjdXJyZW50KTsKLQkJcHJpbnRrKCJjYWxsaW5nICAlcEYgQCAlaVxuIiwgZm4sIGNhbGwuY2FsbGVyKTsKKwkJcHJpbnRrKCJjYWxsaW5nICAlcEYgQCAlaVxuIiwgZm4sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKIAkJY2FsbHRpbWUgPSBrdGltZV9nZXQoKTsKLQkJdHJhY2VfYm9vdF9jYWxsKCZjYWxsLCBmbik7Ci0JCWVuYWJsZV9ib290X3RyYWNlKCk7CiAJfQogCi0JcmV0LnJlc3VsdCA9IGZuKCk7CisJcmV0ID0gZm4oKTsKIAogCWlmIChpbml0Y2FsbF9kZWJ1ZykgewotCQlkaXNhYmxlX2Jvb3RfdHJhY2UoKTsKIAkJcmV0dGltZSA9IGt0aW1lX2dldCgpOwogCQlkZWx0YSA9IGt0aW1lX3N1YihyZXR0aW1lLCBjYWxsdGltZSk7Ci0JCXJldC5kdXJhdGlvbiA9ICh1bnNpZ25lZCBsb25nIGxvbmcpIGt0aW1lX3RvX25zKGRlbHRhKSA+PiAxMDsKLQkJdHJhY2VfYm9vdF9yZXQoJnJldCwgZm4pOwotCQlwcmludGsoImluaXRjYWxsICVwRiByZXR1cm5lZCAlZCBhZnRlciAlTGQgdXNlY3NcbiIsIGZuLAotCQkJcmV0LnJlc3VsdCwgcmV0LmR1cmF0aW9uKTsKKwkJZHVyYXRpb24gPSAodW5zaWduZWQgbG9uZyBsb25nKSBrdGltZV90b19ucyhkZWx0YSkgPj4gMTA7CisJCXByaW50aygiaW5pdGNhbGwgJXBGIHJldHVybmVkICVkIGFmdGVyICVsbGQgdXNlY3NcbiIsIGZuLAorCQkJcmV0LCBkdXJhdGlvbik7CiAJfQogCiAJbXNnYnVmWzBdID0gMDsKIAotCWlmIChyZXQucmVzdWx0ICYmIHJldC5yZXN1bHQgIT0gLUVOT0RFViAmJiBpbml0Y2FsbF9kZWJ1ZykKLQkJc3ByaW50Zihtc2didWYsICJlcnJvciBjb2RlICVkICIsIHJldC5yZXN1bHQpOworCWlmIChyZXQgJiYgcmV0ICE9IC1FTk9ERVYgJiYgaW5pdGNhbGxfZGVidWcpCisJCXNwcmludGYobXNnYnVmLCAiZXJyb3IgY29kZSAlZCAiLCByZXQpOwogCiAJaWYgKHByZWVtcHRfY291bnQoKSAhPSBjb3VudCkgewogCQlzdHJsY2F0KG1zZ2J1ZiwgInByZWVtcHRpb24gaW1iYWxhbmNlICIsIHNpemVvZihtc2didWYpKTsKQEAgLTc3MCw3ICs3NjMsNyBAQAogCQlwcmludGsoImluaXRjYWxsICVwRiByZXR1cm5lZCB3aXRoICVzXG4iLCBmbiwgbXNnYnVmKTsKIAl9CiAKLQlyZXR1cm4gcmV0LnJlc3VsdDsKKwlyZXR1cm4gcmV0OwogfQogCiAKQEAgLTg5NCw3ICs4ODcsNiBAQAogCXNtcF9wcmVwYXJlX2NwdXMoc2V0dXBfbWF4X2NwdXMpOwogCiAJZG9fcHJlX3NtcF9pbml0Y2FsbHMoKTsKLQlzdGFydF9ib290X3RyYWNlKCk7CiAKIAlzbXBfaW5pdCgpOwogCXNjaGVkX2luaXRfc21wKCk7CmRpZmYgLS1naXQgYS9pcGMvc2VtLmMgYi9pcGMvc2VtLmMKaW5kZXggNTA2Yzg0OS4uNDBhOGY0NiAxMDA2NDQKLS0tIGEvaXBjL3NlbS5jCisrKyBiL2lwYy9zZW0uYwpAQCAtMTI1Niw2ICsxMjU2LDMzIEBACiAJcmV0dXJuIHVuOwogfQogCisKKy8qKgorICogZ2V0X3F1ZXVlX3Jlc3VsdCAtIFJldHJpZXZlIHRoZSByZXN1bHQgY29kZSBmcm9tIHNlbV9xdWV1ZQorICogQHE6IFBvaW50ZXIgdG8gcXVldWUgc3RydWN0dXJlCisgKgorICogUmV0cmlldmUgdGhlIHJldHVybiBjb2RlIGZyb20gdGhlIHBlbmRpbmcgcXVldWUuIElmIElOX1dBS0VVUCBpcyBmb3VuZCBpbgorICogcS0+c3RhdHVzLCB0aGVuIHdlIG11c3QgbG9vcCB1bnRpbCB0aGUgdmFsdWUgaXMgcmVwbGFjZWQgd2l0aCB0aGUgZmluYWwKKyAqIHZhbHVlOiBUaGlzIG1heSBoYXBwZW4gaWYgYSB0YXNrIGlzIHdva2VuIHVwIGJ5IGFuIHVucmVsYXRlZCBldmVudCAoZS5nLgorICogc2lnbmFsKSBhbmQgaW4gcGFyYWxsZWwgdGhlIHRhc2sgaXMgd29rZW4gdXAgYnkgYW5vdGhlciB0YXNrIGJlY2F1c2UgaXQgZ290CisgKiB0aGUgcmVxdWVzdGVkIHNlbWFwaG9yZXMuCisgKgorICogVGhlIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgd2l0aCBvciB3aXRob3V0IGhvbGRpbmcgdGhlIHNlbWFwaG9yZSBzcGlubG9jay4KKyAqLworc3RhdGljIGludCBnZXRfcXVldWVfcmVzdWx0KHN0cnVjdCBzZW1fcXVldWUgKnEpCit7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBxLT5zdGF0dXM7CisJd2hpbGUgKHVubGlrZWx5KGVycm9yID09IElOX1dBS0VVUCkpIHsKKwkJY3B1X3JlbGF4KCk7CisJCWVycm9yID0gcS0+c3RhdHVzOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKworCiBTWVNDQUxMX0RFRklORTQoc2VtdGltZWRvcCwgaW50LCBzZW1pZCwgc3RydWN0IHNlbWJ1ZiBfX3VzZXIgKiwgdHNvcHMsCiAJCXVuc2lnbmVkLCBuc29wcywgY29uc3Qgc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqLCB0aW1lb3V0KQogewpAQCAtMTQwOSwxNSArMTQzNiwxOCBAQAogCWVsc2UKIAkJc2NoZWR1bGUoKTsKIAotCWVycm9yID0gcXVldWUuc3RhdHVzOwotCXdoaWxlKHVubGlrZWx5KGVycm9yID09IElOX1dBS0VVUCkpIHsKLQkJY3B1X3JlbGF4KCk7Ci0JCWVycm9yID0gcXVldWUuc3RhdHVzOwotCX0KKwllcnJvciA9IGdldF9xdWV1ZV9yZXN1bHQoJnF1ZXVlKTsKIAogCWlmIChlcnJvciAhPSAtRUlOVFIpIHsKIAkJLyogZmFzdCBwYXRoOiB1cGRhdGVfcXVldWUgYWxyZWFkeSBvYnRhaW5lZCBhbGwgcmVxdWVzdGVkCi0JCSAqIHJlc291cmNlcyAqLworCQkgKiByZXNvdXJjZXMuCisJCSAqIFBlcmZvcm0gYSBzbXBfbWIoKTogVXNlciBzcGFjZSBjb3VsZCBhc3N1bWUgdGhhdCBzZW1vcCgpCisJCSAqIGlzIGEgbWVtb3J5IGJhcnJpZXI6IFdpdGhvdXQgdGhlIG1iKCksIHRoZSBjcHUgY291bGQKKwkJICogc3BlY3VsYXRpdmVseSByZWFkIGluIHVzZXIgc3BhY2Ugc3RhbGUgZGF0YSB0aGF0IHdhcworCQkgKiBvdmVyd3JpdHRlbiBieSB0aGUgcHJldmlvdXMgb3duZXIgb2YgdGhlIHNlbWFwaG9yZS4KKwkJICovCisJCXNtcF9tYigpOworCiAJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCkBAIC0xNDI3LDEwICsxNDU3LDEyIEBACiAJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCisJZXJyb3IgPSBnZXRfcXVldWVfcmVzdWx0KCZxdWV1ZSk7CisKIAkvKgogCSAqIElmIHF1ZXVlLnN0YXR1cyAhPSAtRUlOVFIgd2UgYXJlIHdva2VuIHVwIGJ5IGFub3RoZXIgcHJvY2VzcwogCSAqLwotCWVycm9yID0gcXVldWUuc3RhdHVzOworCiAJaWYgKGVycm9yICE9IC1FSU5UUikgewogCQlnb3RvIG91dF91bmxvY2tfZnJlZTsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvTWFrZWZpbGUgYi9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMDU3NDcyZi4uY2U1M2ZiMiAxMDA2NDQKLS0tIGEva2VybmVsL01ha2VmaWxlCisrKyBiL2tlcm5lbC9NYWtlZmlsZQpAQCAtNzYsOCArNzYsOCBAQAogb2JqLSQoQ09ORklHX0FVRElUX1RSRUUpICs9IGF1ZGl0X3RyZWUubwogb2JqLSQoQ09ORklHX0tQUk9CRVMpICs9IGtwcm9iZXMubwogb2JqLSQoQ09ORklHX0tHREIpICs9IGRlYnVnLwotb2JqLSQoQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQKSArPSBzb2Z0bG9ja3VwLm8KIG9iai0kKENPTkZJR19ERVRFQ1RfSFVOR19UQVNLKSArPSBodW5nX3Rhc2subworb2JqLSQoQ09ORklHX0xPQ0tVUF9ERVRFQ1RPUikgKz0gd2F0Y2hkb2cubwogb2JqLSQoQ09ORklHX0dFTkVSSUNfSEFSRElSUVMpICs9IGlycS8KIG9iai0kKENPTkZJR19TRUNDT01QKSArPSBzZWNjb21wLm8KIG9iai0kKENPTkZJR19SQ1VfVE9SVFVSRV9URVNUKSArPSByY3V0b3J0dXJlLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdC5jIGIva2VybmVsL2F1ZGl0LmMKaW5kZXggYzcxYmQyNi4uODI5NmFhNSAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0LmMKKysrIGIva2VybmVsL2F1ZGl0LmMKQEAgLTQwNyw3ICs0MDcsNyBAQAogCQlhdWRpdF9ob2xkX3NrYihza2IpOwogCX0gZWxzZQogCQkvKiBkcm9wIHRoZSBleHRyYSByZWZlcmVuY2UgaWYgc2VudCBvayAqLwotCQlrZnJlZV9za2Ioc2tiKTsKKwkJY29uc3VtZV9za2Ioc2tiKTsKIH0KIAogc3RhdGljIGludCBrYXVkaXRkX3RocmVhZCh2b2lkICpkdW1teSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAuYyBiL2tlcm5lbC9jZ3JvdXAuYwppbmRleCAzYWM2ZjViLi5kODNjYWIwIDEwMDY0NAotLS0gYS9rZXJuZWwvY2dyb3VwLmMKKysrIGIva2VybmVsL2Nncm91cC5jCkBAIC0xNjIzLDYgKzE2MjMsOCBAQAogCS5raWxsX3NiID0gY2dyb3VwX2tpbGxfc2IsCiB9OwogCitzdGF0aWMgc3RydWN0IGtvYmplY3QgKmNncm91cF9rb2JqOworCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjZ3JvdXAgKl9fZF9jZ3JwKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKIAlyZXR1cm4gZGVudHJ5LT5kX2ZzZGF0YTsKQEAgLTE3ODgsNiArMTc5MCwyOSBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKKy8qKgorICogY2dyb3VwX2F0dGFjaF90YXNrX2N1cnJlbnRfY2cgLSBhdHRhY2ggdGFzayAndHNrJyB0byBjdXJyZW50IHRhc2sncyBjZ3JvdXAKKyAqIEB0c2s6IHRoZSB0YXNrIHRvIGJlIGF0dGFjaGVkCisgKi8KK2ludCBjZ3JvdXBfYXR0YWNoX3Rhc2tfY3VycmVudF9jZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlzdHJ1Y3QgY2dyb3VwZnNfcm9vdCAqcm9vdDsKKwlzdHJ1Y3QgY2dyb3VwICpjdXJfY2c7CisJaW50IHJldHZhbCA9IDA7CisKKwljZ3JvdXBfbG9jaygpOworCWZvcl9lYWNoX2FjdGl2ZV9yb290KHJvb3QpIHsKKwkJY3VyX2NnID0gdGFza19jZ3JvdXBfZnJvbV9yb290KGN1cnJlbnQsIHJvb3QpOworCQlyZXR2YWwgPSBjZ3JvdXBfYXR0YWNoX3Rhc2soY3VyX2NnLCB0c2spOworCQlpZiAocmV0dmFsKQorCQkJYnJlYWs7CisJfQorCWNncm91cF91bmxvY2soKTsKKworCXJldHVybiByZXR2YWw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjZ3JvdXBfYXR0YWNoX3Rhc2tfY3VycmVudF9jZyk7CisKIC8qCiAgKiBBdHRhY2ggdGFzayB3aXRoIHBpZCAncGlkJyB0byBjZ3JvdXAgJ2NncnAnLiBDYWxsIHdpdGggY2dyb3VwX211dGV4CiAgKiBoZWxkLiBNYXkgdGFrZSB0YXNrX2xvY2sgb2YgdGFzawpAQCAtMzg3MSw5ICszODk2LDE4IEBACiAJaGhlYWQgPSBjc3Nfc2V0X2hhc2goaW5pdF9jc3Nfc2V0LnN1YnN5cyk7CiAJaGxpc3RfYWRkX2hlYWQoJmluaXRfY3NzX3NldC5obGlzdCwgaGhlYWQpOwogCUJVR19PTighaW5pdF9yb290X2lkKCZyb290bm9kZSkpOwotCWVyciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmNncm91cF9mc190eXBlKTsKLQlpZiAoZXJyIDwgMCkKKworCWNncm91cF9rb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZCgiY2dyb3VwIiwgZnNfa29iaik7CisJaWYgKCFjZ3JvdXBfa29iaikgeworCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZjZ3JvdXBfZnNfdHlwZSk7CisJaWYgKGVyciA8IDApIHsKKwkJa29iamVjdF9wdXQoY2dyb3VwX2tvYmopOworCQlnb3RvIG91dDsKKwl9CiAKIAlwcm9jX2NyZWF0ZSgiY2dyb3VwcyIsIDAsIE5VTEwsICZwcm9jX2Nncm91cHN0YXRzX29wZXJhdGlvbnMpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1LmMgYi9rZXJuZWwvY3B1LmMKaW5kZXggOTdkMWI0Mi4uZjZlNzI2ZiAxMDA2NDQKLS0tIGEva2VybmVsL2NwdS5jCisrKyBiL2tlcm5lbC9jcHUuYwpAQCAtMjM1LDExICsyMzUsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWNwdV9ob3RwbHVnX2JlZ2luKCk7Ci0Jc2V0X2NwdV9hY3RpdmUoY3B1LCBmYWxzZSk7CiAJZXJyID0gX19jcHVfbm90aWZ5KENQVV9ET1dOX1BSRVBBUkUgfCBtb2QsIGhjcHUsIC0xLCAmbnJfY2FsbHMpOwogCWlmIChlcnIpIHsKLQkJc2V0X2NwdV9hY3RpdmUoY3B1LCB0cnVlKTsKLQogCQlucl9jYWxscy0tOwogCQlfX2NwdV9ub3RpZnkoQ1BVX0RPV05fRkFJTEVEIHwgbW9kLCBoY3B1LCBucl9jYWxscywgTlVMTCk7CiAJCXByaW50aygiJXM6IGF0dGVtcHQgdG8gdGFrZSBkb3duIENQVSAldSBmYWlsZWRcbiIsCkBAIC0yNDksNyArMjQ2LDYgQEAKIAogCWVyciA9IF9fc3RvcF9tYWNoaW5lKHRha2VfY3B1X2Rvd24sICZ0Y2RfcGFyYW0sIGNwdW1hc2tfb2YoY3B1KSk7CiAJaWYgKGVycikgewotCQlzZXRfY3B1X2FjdGl2ZShjcHUsIHRydWUpOwogCQkvKiBDUFUgZGlkbid0IGRpZTogdGVsbCBldmVyeW9uZS4gIENhbid0IGNvbXBsYWluLiAqLwogCQljcHVfbm90aWZ5X25vZmFpbChDUFVfRE9XTl9GQUlMRUQgfCBtb2QsIGhjcHUpOwogCkBAIC0zMjEsOCArMzE3LDYgQEAKIAkJZ290byBvdXRfbm90aWZ5OwogCUJVR19PTighY3B1X29ubGluZShjcHUpKTsKIAotCXNldF9jcHVfYWN0aXZlKGNwdSwgdHJ1ZSk7Ci0KIAkvKiBOb3cgY2FsbCBub3RpZmllciBpbiBwcmVwYXJhdGlvbi4gKi8KIAljcHVfbm90aWZ5KENQVV9PTkxJTkUgfCBtb2QsIGhjcHUpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1c2V0LmMgYi9rZXJuZWwvY3B1c2V0LmMKaW5kZXggMDJiOTYxMS4uYjIzYzA5NyAxMDA2NDQKLS0tIGEva2VybmVsL2NwdXNldC5jCisrKyBiL2tlcm5lbC9jcHVzZXQuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAJLyogZm9yIGN1c3RvbSBzY2hlZCBkb21haW4gKi8KIAlpbnQgcmVsYXhfZG9tYWluX2xldmVsOwogCi0JLyogdXNlZCBmb3Igd2Fsa2luZyBhIGNwdXNldCBoZWlyYXJjaHkgKi8KKwkvKiB1c2VkIGZvciB3YWxraW5nIGEgY3B1c2V0IGhpZXJhcmNoeSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgc3RhY2tfbGlzdDsKIH07CiAKQEAgLTIxMTMsMzEgKzIxMTMsMTcgQEAKICAqIGJ1dCBtYWtpbmcgbm8gYWN0aXZlIHVzZSBvZiBjcHVzZXRzLgogICoKICAqIFRoaXMgcm91dGluZSBlbnN1cmVzIHRoYXQgdG9wX2NwdXNldC5jcHVzX2FsbG93ZWQgdHJhY2tzCi0gKiBjcHVfb25saW5lX21hcCBvbiBlYWNoIENQVSBob3RwbHVnIChjcHVocCkgZXZlbnQuCisgKiBjcHVfYWN0aXZlX21hc2sgb24gZWFjaCBDUFUgaG90cGx1ZyAoY3B1aHApIGV2ZW50LgogICoKICAqIENhbGxlZCB3aXRoaW4gZ2V0X29ubGluZV9jcHVzKCkuICBOZWVkcyB0byBjYWxsIGNncm91cF9sb2NrKCkKICAqIGJlZm9yZSBjYWxsaW5nIGdlbmVyYXRlX3NjaGVkX2RvbWFpbnMoKS4KICAqLwotc3RhdGljIGludCBjcHVzZXRfdHJhY2tfb25saW5lX2NwdXMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWRfbmIsCi0JCQkJdW5zaWduZWQgbG9uZyBwaGFzZSwgdm9pZCAqdW51c2VkX2NwdSkKK3ZvaWQgY3B1c2V0X3VwZGF0ZV9hY3RpdmVfY3B1cyh2b2lkKQogewogCXN0cnVjdCBzY2hlZF9kb21haW5fYXR0ciAqYXR0cjsKIAljcHVtYXNrX3Zhcl90ICpkb21zOwogCWludCBuZG9tczsKIAotCXN3aXRjaCAocGhhc2UpIHsKLQljYXNlIENQVV9PTkxJTkU6Ci0JY2FzZSBDUFVfT05MSU5FX0ZST1pFTjoKLQljYXNlIENQVV9ET1dOX1BSRVBBUkU6Ci0JY2FzZSBDUFVfRE9XTl9QUkVQQVJFX0ZST1pFTjoKLQljYXNlIENQVV9ET1dOX0ZBSUxFRDoKLQljYXNlIENQVV9ET1dOX0ZBSUxFRF9GUk9aRU46Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIE5PVElGWV9ET05FOwotCX0KLQogCWNncm91cF9sb2NrKCk7CiAJbXV0ZXhfbG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogCWNwdW1hc2tfY29weSh0b3BfY3B1c2V0LmNwdXNfYWxsb3dlZCwgY3B1X2FjdGl2ZV9tYXNrKTsKQEAgLTIxNDgsOCArMjEzNCw2IEBACiAKIAkvKiBIYXZlIHNjaGVkdWxlciByZWJ1aWxkIHRoZSBkb21haW5zICovCiAJcGFydGl0aW9uX3NjaGVkX2RvbWFpbnMobmRvbXMsIGRvbXMsIGF0dHIpOwotCi0JcmV0dXJuIE5PVElGWV9PSzsKIH0KIAogI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRwpAQCAtMjIwMyw3ICsyMTg3LDYgQEAKIAljcHVtYXNrX2NvcHkodG9wX2NwdXNldC5jcHVzX2FsbG93ZWQsIGNwdV9hY3RpdmVfbWFzayk7CiAJdG9wX2NwdXNldC5tZW1zX2FsbG93ZWQgPSBub2RlX3N0YXRlc1tOX0hJR0hfTUVNT1JZXTsKIAotCWhvdGNwdV9ub3RpZmllcihjcHVzZXRfdHJhY2tfb25saW5lX2NwdXMsIDApOwogCWhvdHBsdWdfbWVtb3J5X25vdGlmaWVyKGNwdXNldF90cmFja19vbmxpbmVfbm9kZXMsIDEwKTsKIAogCWNwdXNldF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJjcHVzZXQiKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9jcmVkLmMgYi9rZXJuZWwvY3JlZC5jCmluZGV4IGEyZDU1MDQuLjYwYmM4YjEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcmVkLmMKKysrIGIva2VybmVsL2NyZWQuYwpAQCAtMjA5LDYgKzIwOSwzMSBAQAogCX0KIH0KIAorLyoqCisgKiBnZXRfdGFza19jcmVkIC0gR2V0IGFub3RoZXIgdGFzaydzIG9iamVjdGl2ZSBjcmVkZW50aWFscworICogQHRhc2s6IFRoZSB0YXNrIHRvIHF1ZXJ5CisgKgorICogR2V0IHRoZSBvYmplY3RpdmUgY3JlZGVudGlhbHMgb2YgYSB0YXNrLCBwaW5uaW5nIHRoZW0gc28gdGhhdCB0aGV5IGNhbid0IGdvCisgKiBhd2F5LiAgQWNjZXNzaW5nIGEgdGFzaydzIGNyZWRlbnRpYWxzIGRpcmVjdGx5IGlzIG5vdCBwZXJtaXR0ZWQuCisgKgorICogVGhlIGNhbGxlciBtdXN0IGFsc28gbWFrZSBzdXJlIHRhc2sgZG9lc24ndCBnZXQgZGVsZXRlZCwgZWl0aGVyIGJ5IGhvbGRpbmcgYQorICogcmVmIG9uIHRhc2sgb3IgYnkgaG9sZGluZyB0YXNrbGlzdF9sb2NrIHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyB1bmxpbmtlZC4KKyAqLworY29uc3Qgc3RydWN0IGNyZWQgKmdldF90YXNrX2NyZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkOworCisJcmN1X3JlYWRfbG9jaygpOworCisJZG8geworCQljcmVkID0gX190YXNrX2NyZWQoKHRhc2spKTsKKwkJQlVHX09OKCFjcmVkKTsKKwl9IHdoaWxlICghYXRvbWljX2luY19ub3RfemVybygmKChzdHJ1Y3QgY3JlZCAqKWNyZWQpLT51c2FnZSkpOworCisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIGNyZWQ7Cit9CisKIC8qCiAgKiBBbGxvY2F0ZSBibGFuayBjcmVkZW50aWFscywgc3VjaCB0aGF0IHRoZSBjcmVkZW50aWFscyBjYW4gYmUgZmlsbGVkIGluIGF0IGEKICAqIGxhdGVyIGRhdGUgd2l0aG91dCByaXNrIG9mIEVOT01FTS4KZGlmZiAtLWdpdCBhL2tlcm5lbC9kZWJ1Zy9kZWJ1Z19jb3JlLmMgYi9rZXJuZWwvZGVidWcvZGVidWdfY29yZS5jCmluZGV4IDVjYjdjZDEuLjNjMmQ0OTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9kZWJ1Zy9kZWJ1Z19jb3JlLmMKKysrIGIva2VybmVsL2RlYnVnL2RlYnVnX2NvcmUuYwpAQCAtNiw3ICs2LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMC0yMDAxIFZFUklUQVMgU29mdHdhcmUgQ29ycG9yYXRpb24uCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCBUaW1lc3lzIENvcnBvcmF0aW9uCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBBbWl0IFMuIEthbGUgPGFtaXRrYWxlQGxpbnN5c3NvZnQuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA0IFBhdmVsIE1hY2hlayA8cGF2ZWxAc3VzZS5jej4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBQYXZlbCBNYWNoZWsgPHBhdmVsQHVjdy5jej4KICAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IFRvbSBSaW5pIDx0cmluaUBrZXJuZWwuY3Jhc2hpbmcub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgTGluU3lzU29mdCBUZWNobm9sb2dpZXMgUHZ0LiBMdGQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4KQEAgLTYwNSwxMyArNjA1LDE1IEBACiAJCWlmIChkYmdfa2RiX21vZGUpIHsKIAkJCWtnZGJfY29ubmVjdGVkID0gMTsKIAkJCWVycm9yID0ga2RiX3N0dWIoa3MpOworCQkJaWYgKGVycm9yID09IC0xKQorCQkJCWNvbnRpbnVlOworCQkJa2dkYl9jb25uZWN0ZWQgPSAwOwogCQl9IGVsc2UgewogCQkJZXJyb3IgPSBnZGJfc2VyaWFsX3N0dWIoa3MpOwogCQl9CiAKIAkJaWYgKGVycm9yID09IERCR19QQVNTX0VWRU5UKSB7CiAJCQlkYmdfa2RiX21vZGUgPSAhZGJnX2tkYl9tb2RlOwotCQkJa2dkYl9jb25uZWN0ZWQgPSAwOwogCQl9IGVsc2UgaWYgKGVycm9yID09IERCR19TV0lUQ0hfQ1BVX0VWRU5UKSB7CiAJCQlkYmdfY3B1X3N3aXRjaChjcHUsIGRiZ19zd2l0Y2hfY3B1KTsKIAkJCWdvdG8gY3B1X2xvb3A7CmRpZmYgLS1naXQgYS9rZXJuZWwvZGVidWcvZ2Ric3R1Yi5jIGIva2VybmVsL2RlYnVnL2dkYnN0dWIuYwppbmRleCA0YjE3YjMyLi40ODFhN2JkIDEwMDY0NAotLS0gYS9rZXJuZWwvZGVidWcvZ2Ric3R1Yi5jCisrKyBiL2tlcm5lbC9kZWJ1Zy9nZGJzdHViLmMKQEAgLTYsNyArNiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSBWRVJJVEFTIFNvZnR3YXJlIENvcnBvcmF0aW9uLgogICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQgVGltZXN5cyBDb3Jwb3JhdGlvbgogICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgQW1pdCBTLiBLYWxlIDxhbWl0a2FsZUBsaW5zeXNzb2Z0LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNCBQYXZlbCBNYWNoZWsgPHBhdmVsQHN1c2UuY3o+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgUGF2ZWwgTWFjaGVrIDxwYXZlbEB1Y3cuY3o+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBUb20gUmluaSA8dHJpbmlAa2VybmVsLmNyYXNoaW5nLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IExpblN5c1NvZnQgVGVjaG5vbG9naWVzIFB2dC4gTHRkLgogICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCkBAIC01MiwxNyArNTIsNiBAQAogICogR0RCIHJlbW90ZSBwcm90b2NvbCBwYXJzZXI6CiAgKi8KIAotc3RhdGljIGludCBoZXgoY2hhciBjaCkKLXsKLQlpZiAoKGNoID49ICdhJykgJiYgKGNoIDw9ICdmJykpCi0JCXJldHVybiBjaCAtICdhJyArIDEwOwotCWlmICgoY2ggPj0gJzAnKSAmJiAoY2ggPD0gJzknKSkKLQkJcmV0dXJuIGNoIC0gJzAnOwotCWlmICgoY2ggPj0gJ0EnKSAmJiAoY2ggPD0gJ0YnKSkKLQkJcmV0dXJuIGNoIC0gJ0EnICsgMTA7Ci0JcmV0dXJuIC0xOwotfQotCiAjaWZkZWYgQ09ORklHX0tHREJfS0RCCiBzdGF0aWMgaW50IGdkYnN0dWJfcmVhZF93YWl0KHZvaWQpCiB7CkBAIC0xMjMsOCArMTEyLDggQEAKIAkJYnVmZmVyW2NvdW50XSA9IDA7CiAKIAkJaWYgKGNoID09ICcjJykgewotCQkJeG1pdGNzdW0gPSBoZXgoZ2Ric3R1Yl9yZWFkX3dhaXQoKSkgPDwgNDsKLQkJCXhtaXRjc3VtICs9IGhleChnZGJzdHViX3JlYWRfd2FpdCgpKTsKKwkJCXhtaXRjc3VtID0gaGV4X3RvX2JpbihnZGJzdHViX3JlYWRfd2FpdCgpKSA8PCA0OworCQkJeG1pdGNzdW0gKz0gaGV4X3RvX2JpbihnZGJzdHViX3JlYWRfd2FpdCgpKTsKIAogCQkJaWYgKGNoZWNrc3VtICE9IHhtaXRjc3VtKQogCQkJCS8qIGZhaWxlZCBjaGVja3N1bSAqLwpAQCAtMjM2LDcgKzIyNSw3IEBACiAgKiBidWYuICBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBsYXN0IGNoYXIgcHV0IGluIGJ1ZiAobnVsbCkuIE1heQogICogcmV0dXJuIGFuIGVycm9yLgogICovCi1pbnQga2dkYl9tZW0yaGV4KGNoYXIgKm1lbSwgY2hhciAqYnVmLCBpbnQgY291bnQpCitjaGFyICprZ2RiX21lbTJoZXgoY2hhciAqbWVtLCBjaGFyICpidWYsIGludCBjb3VudCkKIHsKIAljaGFyICp0bXA7CiAJaW50IGVycjsKQEAgLTI0OCwxNyArMjM3LDE2IEBACiAJdG1wID0gYnVmICsgY291bnQ7CiAKIAllcnIgPSBwcm9iZV9rZXJuZWxfcmVhZCh0bXAsIG1lbSwgY291bnQpOwotCWlmICghZXJyKSB7Ci0JCXdoaWxlIChjb3VudCA+IDApIHsKLQkJCWJ1ZiA9IHBhY2tfaGV4X2J5dGUoYnVmLCAqdG1wKTsKLQkJCXRtcCsrOwotCQkJY291bnQtLTsKLQkJfQotCi0JCSpidWYgPSAwOworCWlmIChlcnIpCisJCXJldHVybiBOVUxMOworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJYnVmID0gcGFja19oZXhfYnl0ZShidWYsICp0bXApOworCQl0bXArKzsKKwkJY291bnQtLTsKIAl9CisJKmJ1ZiA9IDA7CiAKLQlyZXR1cm4gZXJyOworCXJldHVybiBidWY7CiB9CiAKIC8qCkBAIC0yODAsOCArMjY4LDggQEAKIAl0bXBfaGV4ID0gdG1wX3JhdyAtIDE7CiAJd2hpbGUgKHRtcF9oZXggPj0gYnVmKSB7CiAJCXRtcF9yYXctLTsKLQkJKnRtcF9yYXcgPSBoZXgoKnRtcF9oZXgtLSk7Ci0JCSp0bXBfcmF3IHw9IGhleCgqdG1wX2hleC0tKSA8PCA0OworCQkqdG1wX3JhdyA9IGhleF90b19iaW4oKnRtcF9oZXgtLSk7CisJCSp0bXBfcmF3IHw9IGhleF90b19iaW4oKnRtcF9oZXgtLSkgPDwgNDsKIAl9CiAKIAlyZXR1cm4gcHJvYmVfa2VybmVsX3dyaXRlKG1lbSwgdG1wX3JhdywgY291bnQpOwpAQCAtMzA0LDcgKzI5Miw3IEBACiAJCSgqcHRyKSsrOwogCX0KIAl3aGlsZSAoKipwdHIpIHsKLQkJaGV4X3ZhbCA9IGhleCgqKnB0cik7CisJCWhleF92YWwgPSBoZXhfdG9fYmluKCoqcHRyKTsKIAkJaWYgKGhleF92YWwgPCAwKQogCQkJYnJlYWs7CiAKQEAgLTMzOSw2ICszMjcsMzIgQEAKIAlyZXR1cm4gcHJvYmVfa2VybmVsX3dyaXRlKG1lbSwgYywgc2l6ZSk7CiB9CiAKKyNpZiBEQkdfTUFYX1JFR19OVU0gPiAwCit2b2lkIHB0X3JlZ3NfdG9fZ2RiX3JlZ3ModW5zaWduZWQgbG9uZyAqZ2RiX3JlZ3MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBpOworCWludCBpZHggPSAwOworCWNoYXIgKnB0ciA9IChjaGFyICopZ2RiX3JlZ3M7CisKKwlmb3IgKGkgPSAwOyBpIDwgREJHX01BWF9SRUdfTlVNOyBpKyspIHsKKwkJZGJnX2dldF9yZWcoaSwgcHRyICsgaWR4LCByZWdzKTsKKwkJaWR4ICs9IGRiZ19yZWdfZGVmW2ldLnNpemU7CisJfQorfQorCit2b2lkIGdkYl9yZWdzX3RvX3B0X3JlZ3ModW5zaWduZWQgbG9uZyAqZ2RiX3JlZ3MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBpOworCWludCBpZHggPSAwOworCWNoYXIgKnB0ciA9IChjaGFyICopZ2RiX3JlZ3M7CisKKwlmb3IgKGkgPSAwOyBpIDwgREJHX01BWF9SRUdfTlVNOyBpKyspIHsKKwkJZGJnX3NldF9yZWcoaSwgcHRyICsgaWR4LCByZWdzKTsKKwkJaWR4ICs9IGRiZ19yZWdfZGVmW2ldLnNpemU7CisJfQorfQorI2VuZGlmIC8qIERCR19NQVhfUkVHX05VTSA+IDAgKi8KKwogLyogV3JpdGUgbWVtb3J5IGR1ZSB0byBhbiAnTScgb3IgJ1gnIHBhY2tldC4gKi8KIHN0YXRpYyBpbnQgd3JpdGVfbWVtX21zZyhpbnQgYmluYXJ5KQogewpAQCAtMzc4LDI4ICszOTIsMzEgQEAKICAqIHJlbWFwcGVkIHRvIG5lZ2F0aXZlIFRJRHMuCiAgKi8KIAotI2RlZmluZSBCVUZfVEhSRUFEX0lEX1NJWkUJMTYKKyNkZWZpbmUgQlVGX1RIUkVBRF9JRF9TSVpFCTgKIAogc3RhdGljIGNoYXIgKnBhY2tfdGhyZWFkaWQoY2hhciAqcGt0LCB1bnNpZ25lZCBjaGFyICppZCkKIHsKLQljaGFyICpsaW1pdDsKKwl1bnNpZ25lZCBjaGFyICpsaW1pdDsKKwlpbnQgbHplcm8gPSAxOwogCi0JbGltaXQgPSBwa3QgKyBCVUZfVEhSRUFEX0lEX1NJWkU7Ci0Jd2hpbGUgKHBrdCA8IGxpbWl0KQotCQlwa3QgPSBwYWNrX2hleF9ieXRlKHBrdCwgKmlkKyspOworCWxpbWl0ID0gaWQgKyAoQlVGX1RIUkVBRF9JRF9TSVpFIC8gMik7CisJd2hpbGUgKGlkIDwgbGltaXQpIHsKKwkJaWYgKCFsemVybyB8fCAqaWQgIT0gMCkgeworCQkJcGt0ID0gcGFja19oZXhfYnl0ZShwa3QsICppZCk7CisJCQlsemVybyA9IDA7CisJCX0KKwkJaWQrKzsKKwl9CisKKwlpZiAobHplcm8pCisJCXBrdCA9IHBhY2tfaGV4X2J5dGUocGt0LCAwKTsKIAogCXJldHVybiBwa3Q7CiB9CiAKIHN0YXRpYyB2b2lkIGludF90b190aHJlYWRyZWYodW5zaWduZWQgY2hhciAqaWQsIGludCB2YWx1ZSkKIHsKLQl1bnNpZ25lZCBjaGFyICpzY2FuOwotCWludCBpID0gNDsKLQotCXNjYW4gPSAodW5zaWduZWQgY2hhciAqKWlkOwotCXdoaWxlIChpLS0pCi0JCSpzY2FuKysgPSAwOwotCXB1dF91bmFsaWduZWRfYmUzMih2YWx1ZSwgc2Nhbik7CisJcHV0X3VuYWxpZ25lZF9iZTMyKHZhbHVlLCBpZCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmdldHRocmVhZChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRpZCkKQEAgLTQ2Myw4ICs0ODAsNyBAQAogCXBhY2tfaGV4X2J5dGUoJnJlbWNvbV9vdXRfYnVmZmVyWzFdLCBrcy0+c2lnbm8pOwogfQogCi0vKiBIYW5kbGUgdGhlICdnJyBnZXQgcmVnaXN0ZXJzIHJlcXVlc3QgKi8KLXN0YXRpYyB2b2lkIGdkYl9jbWRfZ2V0cmVncyhzdHJ1Y3Qga2dkYl9zdGF0ZSAqa3MpCitzdGF0aWMgdm9pZCBnZGJfZ2V0X3JlZ3NfaGVscGVyKHN0cnVjdCBrZ2RiX3N0YXRlICprcykKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZDsKIAl2b2lkICpsb2NhbF9kZWJ1Z2dlcmluZm87CkBAIC01MDUsNiArNTIxLDEyIEBACiAJCSAqLwogCQlzbGVlcGluZ190aHJlYWRfdG9fZ2RiX3JlZ3MoZ2RiX3JlZ3MsIHRocmVhZCk7CiAJfQorfQorCisvKiBIYW5kbGUgdGhlICdnJyBnZXQgcmVnaXN0ZXJzIHJlcXVlc3QgKi8KK3N0YXRpYyB2b2lkIGdkYl9jbWRfZ2V0cmVncyhzdHJ1Y3Qga2dkYl9zdGF0ZSAqa3MpCit7CisJZ2RiX2dldF9yZWdzX2hlbHBlcihrcyk7CiAJa2dkYl9tZW0yaGV4KChjaGFyICopZ2RiX3JlZ3MsIHJlbWNvbV9vdXRfYnVmZmVyLCBOVU1SRUdCWVRFUyk7CiB9CiAKQEAgLTUyNywxMyArNTQ5LDEzIEBACiAJY2hhciAqcHRyID0gJnJlbWNvbV9pbl9idWZmZXJbMV07CiAJdW5zaWduZWQgbG9uZyBsZW5ndGg7CiAJdW5zaWduZWQgbG9uZyBhZGRyOwotCWludCBlcnI7CisJY2hhciAqZXJyOwogCiAJaWYgKGtnZGJfaGV4MmxvbmcoJnB0ciwgJmFkZHIpID4gMCAmJiAqcHRyKysgPT0gJywnICYmCiAJCQkJCWtnZGJfaGV4MmxvbmcoJnB0ciwgJmxlbmd0aCkgPiAwKSB7CiAJCWVyciA9IGtnZGJfbWVtMmhleCgoY2hhciAqKWFkZHIsIHJlbWNvbV9vdXRfYnVmZmVyLCBsZW5ndGgpOwotCQlpZiAoZXJyKQotCQkJZXJyb3JfcGFja2V0KHJlbWNvbV9vdXRfYnVmZmVyLCBlcnIpOworCQlpZiAoIWVycikKKwkJCWVycm9yX3BhY2tldChyZW1jb21fb3V0X2J1ZmZlciwgLUVJTlZBTCk7CiAJfSBlbHNlIHsKIAkJZXJyb3JfcGFja2V0KHJlbWNvbV9vdXRfYnVmZmVyLCAtRUlOVkFMKTsKIAl9CkBAIC01NTAsNiArNTcyLDYwIEBACiAJCXN0cmNweShyZW1jb21fb3V0X2J1ZmZlciwgIk9LIik7CiB9CiAKKyNpZiBEQkdfTUFYX1JFR19OVU0gPiAwCitzdGF0aWMgY2hhciAqZ2RiX2hleF9yZWdfaGVscGVyKGludCByZWdudW0sIGNoYXIgKm91dCkKK3sKKwlpbnQgaTsKKwlpbnQgb2Zmc2V0ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCByZWdudW07IGkrKykKKwkJb2Zmc2V0ICs9IGRiZ19yZWdfZGVmW2ldLnNpemU7CisJcmV0dXJuIGtnZGJfbWVtMmhleCgoY2hhciAqKWdkYl9yZWdzICsgb2Zmc2V0LCBvdXQsCisJCQkgICAgZGJnX3JlZ19kZWZbaV0uc2l6ZSk7Cit9CisKKy8qIEhhbmRsZSB0aGUgJ3AnIGluZGl2aWR1YWwgcmVnc3RlciBnZXQgKi8KK3N0YXRpYyB2b2lkIGdkYl9jbWRfcmVnX2dldChzdHJ1Y3Qga2dkYl9zdGF0ZSAqa3MpCit7CisJdW5zaWduZWQgbG9uZyByZWdudW07CisJY2hhciAqcHRyID0gJnJlbWNvbV9pbl9idWZmZXJbMV07CisKKwlrZ2RiX2hleDJsb25nKCZwdHIsICZyZWdudW0pOworCWlmIChyZWdudW0gPj0gREJHX01BWF9SRUdfTlVNKSB7CisJCWVycm9yX3BhY2tldChyZW1jb21fb3V0X2J1ZmZlciwgLUVJTlZBTCk7CisJCXJldHVybjsKKwl9CisJZ2RiX2dldF9yZWdzX2hlbHBlcihrcyk7CisJZ2RiX2hleF9yZWdfaGVscGVyKHJlZ251bSwgcmVtY29tX291dF9idWZmZXIpOworfQorCisvKiBIYW5kbGUgdGhlICdQJyBpbmRpdmlkdWFsIHJlZ3N0ZXIgc2V0ICovCitzdGF0aWMgdm9pZCBnZGJfY21kX3JlZ19zZXQoc3RydWN0IGtnZGJfc3RhdGUgKmtzKQoreworCXVuc2lnbmVkIGxvbmcgcmVnbnVtOworCWNoYXIgKnB0ciA9ICZyZW1jb21faW5fYnVmZmVyWzFdOworCWludCBpID0gMDsKKworCWtnZGJfaGV4MmxvbmcoJnB0ciwgJnJlZ251bSk7CisJaWYgKCpwdHIrKyAhPSAnPScgfHwKKwkgICAgISgha2dkYl91c2V0aHJlYWQgfHwga2dkYl91c2V0aHJlYWQgPT0gY3VycmVudCkgfHwKKwkgICAgIWRiZ19nZXRfcmVnKHJlZ251bSwgZ2RiX3JlZ3MsIGtzLT5saW51eF9yZWdzKSkgeworCQllcnJvcl9wYWNrZXQocmVtY29tX291dF9idWZmZXIsIC1FSU5WQUwpOworCQlyZXR1cm47CisJfQorCW1lbXNldChnZGJfcmVncywgMCwgc2l6ZW9mKGdkYl9yZWdzKSk7CisJd2hpbGUgKGkgPCBzaXplb2YoZ2RiX3JlZ3MpICogMikKKwkJaWYgKGhleF90b19iaW4ocHRyW2ldKSA+PSAwKQorCQkJaSsrOworCQllbHNlCisJCQlicmVhazsKKwlpID0gaSAvIDI7CisJa2dkYl9oZXgybWVtKHB0ciwgKGNoYXIgKilnZGJfcmVncywgaSk7CisJZGJnX3NldF9yZWcocmVnbnVtLCBnZGJfcmVncywga3MtPmxpbnV4X3JlZ3MpOworCXN0cmNweShyZW1jb21fb3V0X2J1ZmZlciwgIk9LIik7Cit9CisjZW5kaWYgLyogREJHX01BWF9SRUdfTlVNID4gMCAqLworCiAvKiBIYW5kbGUgdGhlICdYJyBtZW1vcnkgYmluYXJ5IHdyaXRlIGJ5dGVzICovCiBzdGF0aWMgdm9pZCBnZGJfY21kX2JpbndyaXRlKHN0cnVjdCBrZ2RiX3N0YXRlICprcykKIHsKQEAgLTYxMiw3ICs2ODgsNyBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqZzsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7Ci0JdW5zaWduZWQgY2hhciB0aHJlZls4XTsKKwl1bnNpZ25lZCBjaGFyIHRocmVmW0JVRl9USFJFQURfSURfU0laRV07CiAJY2hhciAqcHRyOwogCWludCBpOwogCWludCBjcHU7CkBAIC02MjEsMTAgKzY5Nyw4IEBACiAJc3dpdGNoIChyZW1jb21faW5fYnVmZmVyWzFdKSB7CiAJY2FzZSAncyc6CiAJY2FzZSAnZic6Ci0JCWlmIChtZW1jbXAocmVtY29tX2luX2J1ZmZlciArIDIsICJUaHJlYWRJbmZvIiwgMTApKSB7Ci0JCQllcnJvcl9wYWNrZXQocmVtY29tX291dF9idWZmZXIsIC1FSU5WQUwpOworCQlpZiAobWVtY21wKHJlbWNvbV9pbl9idWZmZXIgKyAyLCAiVGhyZWFkSW5mbyIsIDEwKSkKIAkJCWJyZWFrOwotCQl9CiAKIAkJaSA9IDA7CiAJCXJlbWNvbV9vdXRfYnVmZmVyWzBdID0gJ20nOwpAQCAtNjM0LDggKzcwOCw3IEBACiAJCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQkJCWtzLT50aHJfcXVlcnkgPSAwOwogCQkJCWludF90b190aHJlYWRyZWYodGhyZWYsIC1jcHUgLSAyKTsKLQkJCQlwYWNrX3RocmVhZGlkKHB0ciwgdGhyZWYpOwotCQkJCXB0ciArPSBCVUZfVEhSRUFEX0lEX1NJWkU7CisJCQkJcHRyID0gcGFja190aHJlYWRpZChwdHIsIHRocmVmKTsKIAkJCQkqKHB0cisrKSA9ICcsJzsKIAkJCQlpKys7CiAJCQl9CkBAIC02NDQsOCArNzE3LDcgQEAKIAkJZG9fZWFjaF90aHJlYWQoZywgcCkgewogCQkJaWYgKGkgPj0ga3MtPnRocl9xdWVyeSAmJiAhZmluaXNoZWQpIHsKIAkJCQlpbnRfdG9fdGhyZWFkcmVmKHRocmVmLCBwLT5waWQpOwotCQkJCXBhY2tfdGhyZWFkaWQocHRyLCB0aHJlZik7Ci0JCQkJcHRyICs9IEJVRl9USFJFQURfSURfU0laRTsKKwkJCQlwdHIgPSBwYWNrX3RocmVhZGlkKHB0ciwgdGhyZWYpOwogCQkJCSoocHRyKyspID0gJywnOwogCQkJCWtzLT50aHJfcXVlcnkrKzsKIAkJCQlpZiAoa3MtPnRocl9xdWVyeSAlIEtHREJfTUFYX1RIUkVBRF9RVUVSWSA9PSAwKQpAQCAtNjY1LDEwICs3MzcsOSBAQAogCQlwYWNrX3RocmVhZGlkKHJlbWNvbV9vdXRfYnVmZmVyICsgMiwgdGhyZWYpOwogCQlicmVhazsKIAljYXNlICdUJzoKLQkJaWYgKG1lbWNtcChyZW1jb21faW5fYnVmZmVyICsgMSwgIlRocmVhZEV4dHJhSW5mbywiLCAxNikpIHsKLQkJCWVycm9yX3BhY2tldChyZW1jb21fb3V0X2J1ZmZlciwgLUVJTlZBTCk7CisJCWlmIChtZW1jbXAocmVtY29tX2luX2J1ZmZlciArIDEsICJUaHJlYWRFeHRyYUluZm8sIiwgMTYpKQogCQkJYnJlYWs7Ci0JCX0KKwogCQlrcy0+dGhyZWFkaWQgPSAwOwogCQlwdHIgPSByZW1jb21faW5fYnVmZmVyICsgMTc7CiAJCWtnZGJfaGV4MmxvbmcoJnB0ciwgJmtzLT50aHJlYWRpZCk7CkBAIC04NjEsMTEgKzkzMiwxNCBAQAogCWludCBlcnJvciA9IDA7CiAJaW50IHRtcDsKIAotCS8qIENsZWFyIHRoZSBvdXQgYnVmZmVyLiAqLworCS8qIEluaXRpYWxpemUgY29tbSBidWZmZXIgYW5kIGdsb2JhbHMuICovCiAJbWVtc2V0KHJlbWNvbV9vdXRfYnVmZmVyLCAwLCBzaXplb2YocmVtY29tX291dF9idWZmZXIpKTsKKwlrZ2RiX3VzZXRocmVhZCA9IGtnZGJfaW5mb1trcy0+Y3B1XS50YXNrOworCWtzLT5rZ2RiX3VzZXRocmVhZGlkID0gc2hhZG93X3BpZChrZ2RiX2luZm9ba3MtPmNwdV0udGFzay0+cGlkKTsKKwlrcy0+cGFzc19leGNlcHRpb24gPSAwOwogCiAJaWYgKGtnZGJfY29ubmVjdGVkKSB7Ci0JCXVuc2lnbmVkIGNoYXIgdGhyZWZbOF07CisJCXVuc2lnbmVkIGNoYXIgdGhyZWZbQlVGX1RIUkVBRF9JRF9TSVpFXTsKIAkJY2hhciAqcHRyOwogCiAJCS8qIFJlcGx5IHRvIGhvc3QgdGhhdCBhbiBleGNlcHRpb24gaGFzIG9jY3VycmVkICovCkBAIC04NzksMTAgKzk1Myw2IEBACiAJCXB1dF9wYWNrZXQocmVtY29tX291dF9idWZmZXIpOwogCX0KIAotCWtnZGJfdXNldGhyZWFkID0ga2dkYl9pbmZvW2tzLT5jcHVdLnRhc2s7Ci0Ja3MtPmtnZGJfdXNldGhyZWFkaWQgPSBzaGFkb3dfcGlkKGtnZGJfaW5mb1trcy0+Y3B1XS50YXNrLT5waWQpOwotCWtzLT5wYXNzX2V4Y2VwdGlvbiA9IDA7Ci0KIAl3aGlsZSAoMSkgewogCQllcnJvciA9IDA7CiAKQEAgLTkwNyw2ICs5NzcsMTQgQEAKIAkJY2FzZSAnTSc6IC8qIE1BQS4uQUEsTExMTDogV3JpdGUgTExMTCBieXRlcyBhdCBhZGRyZXNzIEFBLi5BQSAqLwogCQkJZ2RiX2NtZF9tZW13cml0ZShrcyk7CiAJCQlicmVhazsKKyNpZiBEQkdfTUFYX1JFR19OVU0gPiAwCisJCWNhc2UgJ3AnOiAvKiBwWFggUmV0dXJuIGdkYiByZWdpc3RlciBYWCAoaW4gaGV4KSAqLworCQkJZ2RiX2NtZF9yZWdfZ2V0KGtzKTsKKwkJCWJyZWFrOworCQljYXNlICdQJzogLyogUFhYPWFhYWEgU2V0IGdkYiByZWdpc3RlciBYWCB0byBhYWFhIChpbiBoZXgpICovCisJCQlnZGJfY21kX3JlZ19zZXQoa3MpOworCQkJYnJlYWs7CisjZW5kaWYgLyogREJHX01BWF9SRUdfTlVNID4gMCAqLwogCQljYXNlICdYJzogLyogWEFBLi5BQSxMTExMOiBXcml0ZSBMTExMIGJ5dGVzIGF0IGFkZHJlc3MgQUEuLkFBICovCiAJCQlnZGJfY21kX2JpbndyaXRlKGtzKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEva2VybmVsL2RlYnVnL2tkYi9rZGJfbWFpbi5jIGIva2VybmVsL2RlYnVnL2tkYi9rZGJfbWFpbi5jCmluZGV4IDE4NGNkODIuLjI4Yjg0NDEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX21haW4uYworKysgYi9rZXJuZWwvZGVidWcva2RiL2tkYl9tYWluLmMKQEAgLTMxMiw3ICszMTIsNyBAQAogCiAJaWYgKGVuZHAgPT0gYXJnKSB7CiAJCS8qCi0JCSAqIFRyeSBiYXNlIDE2LCBmb3IgdXMgZm9sa3MgdG9vIGxhenkgdG8gdHlwZSB0aGUKKwkJICogQWxzbyB0cnkgYmFzZSAxNiwgZm9yIHVzIGZvbGtzIHRvbyBsYXp5IHRvIHR5cGUgdGhlCiAJCSAqIGxlYWRpbmcgMHguLi4KIAkJICovCiAJCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGFyZywgJmVuZHAsIDE2KTsKQEAgLTMyNSw2ICszMjUsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IGtkYmdldHU2NGFyZyhjb25zdCBjaGFyICphcmcsIHU2NCAqdmFsdWUpCit7CisJY2hhciAqZW5kcDsKKwl1NjQgdmFsOworCisJdmFsID0gc2ltcGxlX3N0cnRvdWxsKGFyZywgJmVuZHAsIDApOworCisJaWYgKGVuZHAgPT0gYXJnKSB7CisKKwkJdmFsID0gc2ltcGxlX3N0cnRvdWxsKGFyZywgJmVuZHAsIDE2KTsKKwkJaWYgKGVuZHAgPT0gYXJnKQorCQkJcmV0dXJuIEtEQl9CQURJTlQ7CisJfQorCisJKnZhbHVlID0gdmFsOworCisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBrZGJfc2V0IC0gVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSAnc2V0JyBjb21tYW5kLiAgQWx0ZXIgYW4KICAqCWV4aXN0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlIG9yIGNyZWF0ZSBhIG5ldyBvbmUuCkBAIC0xNzcwLDExICsxNzg5LDY1IEBACiAgKi8KIHN0YXRpYyBpbnQga2RiX3JkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKLQlpbnQgZGlhZyA9IGtkYl9jaGVja19yZWdzKCk7Ci0JaWYgKGRpYWcpCi0JCXJldHVybiBkaWFnOworCWludCBsZW4gPSBrZGJfY2hlY2tfcmVncygpOworI2lmIERCR19NQVhfUkVHX05VTSA+IDAKKwlpbnQgaTsKKwljaGFyICpybmFtZTsKKwlpbnQgcnNpemU7CisJdTY0IHJlZzY0OworCXUzMiByZWczMjsKKwl1MTYgcmVnMTY7CisJdTggcmVnODsKKworCWlmIChsZW4pCisJCXJldHVybiBsZW47CisKKwlmb3IgKGkgPSAwOyBpIDwgREJHX01BWF9SRUdfTlVNOyBpKyspIHsKKwkJcnNpemUgPSBkYmdfcmVnX2RlZltpXS5zaXplICogMjsKKwkJaWYgKHJzaXplID4gMTYpCisJCQlyc2l6ZSA9IDI7CisJCWlmIChsZW4gKyBzdHJsZW4oZGJnX3JlZ19kZWZbaV0ubmFtZSkgKyA0ICsgcnNpemUgPiA4MCkgeworCQkJbGVuID0gMDsKKwkJCWtkYl9wcmludGYoIlxuIik7CisJCX0KKwkJaWYgKGxlbikKKwkJCWxlbiArPSBrZGJfcHJpbnRmKCIgICIpOworCQlzd2l0Y2goZGJnX3JlZ19kZWZbaV0uc2l6ZSAqIDgpIHsKKwkJY2FzZSA4OgorCQkJcm5hbWUgPSBkYmdfZ2V0X3JlZyhpLCAmcmVnOCwga2RiX2N1cnJlbnRfcmVncyk7CisJCQlpZiAoIXJuYW1lKQorCQkJCWJyZWFrOworCQkJbGVuICs9IGtkYl9wcmludGYoIiVzOiAlMDJ4Iiwgcm5hbWUsIHJlZzgpOworCQkJYnJlYWs7CisJCWNhc2UgMTY6CisJCQlybmFtZSA9IGRiZ19nZXRfcmVnKGksICZyZWcxNiwga2RiX2N1cnJlbnRfcmVncyk7CisJCQlpZiAoIXJuYW1lKQorCQkJCWJyZWFrOworCQkJbGVuICs9IGtkYl9wcmludGYoIiVzOiAlMDR4Iiwgcm5hbWUsIHJlZzE2KTsKKwkJCWJyZWFrOworCQljYXNlIDMyOgorCQkJcm5hbWUgPSBkYmdfZ2V0X3JlZyhpLCAmcmVnMzIsIGtkYl9jdXJyZW50X3JlZ3MpOworCQkJaWYgKCFybmFtZSkKKwkJCQlicmVhazsKKwkJCWxlbiArPSBrZGJfcHJpbnRmKCIlczogJTA4eCIsIHJuYW1lLCByZWczMik7CisJCQlicmVhazsKKwkJY2FzZSA2NDoKKwkJCXJuYW1lID0gZGJnX2dldF9yZWcoaSwgJnJlZzY0LCBrZGJfY3VycmVudF9yZWdzKTsKKwkJCWlmICghcm5hbWUpCisJCQkJYnJlYWs7CisJCQlsZW4gKz0ga2RiX3ByaW50ZigiJXM6ICUwMTZsbHgiLCBybmFtZSwgcmVnNjQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlsZW4gKz0ga2RiX3ByaW50ZigiJXM6ID8/IiwgZGJnX3JlZ19kZWZbaV0ubmFtZSk7CisJCX0KKwl9CisJa2RiX3ByaW50ZigiXG4iKTsKKyNlbHNlCisJaWYgKGxlbikKKwkJcmV0dXJuIGxlbjsKIAogCWtkYl9kdW1wcmVncyhrZGJfY3VycmVudF9yZWdzKTsKKyNlbmRpZgogCXJldHVybiAwOwogfQogCkBAIC0xNzgyLDMyICsxODU1LDY3IEBACiAgKiBrZGJfcm0gLSBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlICdybScgKHJlZ2lzdGVyIG1vZGlmeSkgIGNvbW1hbmQuCiAgKglybSByZWdpc3Rlci1uYW1lIG5ldy1jb250ZW50cwogICogUmVtYXJrczoKLSAqCUN1cnJlbnRseSBkb2Vzbid0IGFsbG93IG1vZGlmaWNhdGlvbiBvZiBjb250cm9sIG9yCi0gKglkZWJ1ZyByZWdpc3RlcnMuCisgKglBbGxvd3MgcmVnaXN0ZXIgbW9kaWZpY2F0aW9uIHdpdGggdGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFzIGdkYgogICovCiBzdGF0aWMgaW50IGtkYl9ybShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CisjaWYgREJHX01BWF9SRUdfTlVNID4gMAogCWludCBkaWFnOwotCWludCBpbmQgPSAwOwotCXVuc2lnbmVkIGxvbmcgY29udGVudHM7CisJY29uc3QgY2hhciAqcm5hbWU7CisJaW50IGk7CisJdTY0IHJlZzY0OworCXUzMiByZWczMjsKKwl1MTYgcmVnMTY7CisJdTggcmVnODsKIAogCWlmIChhcmdjICE9IDIpCiAJCXJldHVybiBLREJfQVJHQ09VTlQ7CiAJLyoKIAkgKiBBbGxvdyBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIGxlYWRpbmcgJyUnIHN5bWJvbC4KIAkgKi8KLQlpZiAoYXJndlsxXVswXSA9PSAnJScpCi0JCWluZCA9IDE7CisJcm5hbWUgPSBhcmd2WzFdOworCWlmICgqcm5hbWUgPT0gJyUnKQorCQlybmFtZSsrOwogCi0JZGlhZyA9IGtkYmdldHVsYXJnKGFyZ3ZbMl0sICZjb250ZW50cyk7CisJZGlhZyA9IGtkYmdldHU2NGFyZyhhcmd2WzJdLCAmcmVnNjQpOwogCWlmIChkaWFnKQogCQlyZXR1cm4gZGlhZzsKIAogCWRpYWcgPSBrZGJfY2hlY2tfcmVncygpOwogCWlmIChkaWFnKQogCQlyZXR1cm4gZGlhZzsKKworCWRpYWcgPSBLREJfQkFEUkVHOworCWZvciAoaSA9IDA7IGkgPCBEQkdfTUFYX1JFR19OVU07IGkrKykgeworCQlpZiAoc3RyY21wKHJuYW1lLCBkYmdfcmVnX2RlZltpXS5uYW1lKSA9PSAwKSB7CisJCQlkaWFnID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICghZGlhZykgeworCQlzd2l0Y2goZGJnX3JlZ19kZWZbaV0uc2l6ZSAqIDgpIHsKKwkJY2FzZSA4OgorCQkJcmVnOCA9IHJlZzY0OworCQkJZGJnX3NldF9yZWcoaSwgJnJlZzgsIGtkYl9jdXJyZW50X3JlZ3MpOworCQkJYnJlYWs7CisJCWNhc2UgMTY6CisJCQlyZWcxNiA9IHJlZzY0OworCQkJZGJnX3NldF9yZWcoaSwgJnJlZzE2LCBrZGJfY3VycmVudF9yZWdzKTsKKwkJCWJyZWFrOworCQljYXNlIDMyOgorCQkJcmVnMzIgPSByZWc2NDsKKwkJCWRiZ19zZXRfcmVnKGksICZyZWczMiwga2RiX2N1cnJlbnRfcmVncyk7CisJCQlicmVhazsKKwkJY2FzZSA2NDoKKwkJCWRiZ19zZXRfcmVnKGksICZyZWc2NCwga2RiX2N1cnJlbnRfcmVncyk7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gZGlhZzsKKyNlbHNlCiAJa2RiX3ByaW50ZigiRVJST1I6IFJlZ2lzdGVyIHNldCBjdXJyZW50bHkgbm90IGltcGxlbWVudGVkXG4iKTsKLQlyZXR1cm4gMDsKKyAgICByZXR1cm4gMDsKKyNlbmRpZgogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfTUFHSUNfU1lTUlEpCkBAIC0xODIwLDkgKzE5MjgsOCBAQAogewogCWlmIChhcmdjICE9IDEpCiAJCXJldHVybiBLREJfQVJHQ09VTlQ7Ci0Jc3lzcnFfdG9nZ2xlX3N1cHBvcnQoMSk7CiAJa2RiX3RyYXBfcHJpbnRrKys7Ci0JaGFuZGxlX3N5c3JxKCphcmd2WzFdLCBOVUxMKTsKKwlfX2hhbmRsZV9zeXNycSgqYXJndlsxXSwgTlVMTCwgMCk7CiAJa2RiX3RyYXBfcHJpbnRrLS07CiAKIAlyZXR1cm4gMDsKQEAgLTE4ODMsNiArMTk5MCw3IEBACiAJCQlrZGJfcHJpbnRmKCIgKExvYWRpbmcpIik7CiAJCWVsc2UKIAkJCWtkYl9wcmludGYoIiAoTGl2ZSkiKTsKKwkJa2RiX3ByaW50ZigiIDB4JXAiLCBtb2QtPm1vZHVsZV9jb3JlKTsKIAogI2lmZGVmIENPTkZJR19NT0RVTEVfVU5MT0FECiAJCXsKQEAgLTIyOTEsNiArMjM5OSw5IEBACiAJd2hpbGUgKHZhKSB7CiAJCWNoYXIgYnVmWzgwXTsKIAorCQlpZiAoS0RCX0ZMQUcoQ01EX0lOVEVSUlVQVCkpCisJCQlyZXR1cm4gMDsKKwogCQlzcHJpbnRmKGJ1ZiwgIiVzICIga2RiX21hY2hyZWdfZm10ICJcbiIsIGNvbW1hbmQsIHZhKTsKIAkJZGlhZyA9IGtkYl9wYXJzZShidWYpOwogCQlpZiAoZGlhZykKQEAgLTI0MzcsNiArMjU0OCw3IEBACiAgKi8KIHN0YXRpYyBpbnQga2RiX3N1bW1hcnkoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogeworCXN0cnVjdCB0aW1lc3BlYyBub3c7CiAJc3RydWN0IGtkYl90bSB0bTsKIAlzdHJ1Y3Qgc3lzaW5mbyB2YWw7CiAKQEAgLTI0NTEsNyArMjU2Myw4IEBACiAJa2RiX3ByaW50ZigiZG9tYWlubmFtZSAlc1xuIiwgaW5pdF91dHNfbnMubmFtZS5kb21haW5uYW1lKTsKIAlrZGJfcHJpbnRmKCJjY3ZlcnNpb24gICVzXG4iLCBfX3N0cmluZ2lmeShDQ1ZFUlNJT04pKTsKIAotCWtkYl9nbXRpbWUoJnh0aW1lLCAmdG0pOworCW5vdyA9IF9fY3VycmVudF9rZXJuZWxfdGltZSgpOworCWtkYl9nbXRpbWUoJm5vdywgJnRtKTsKIAlrZGJfcHJpbnRmKCJkYXRlICAgICAgICUwNGQtJTAyZC0lMDJkICUwMmQ6JTAyZDolMDJkICIKIAkJICAgInR6X21pbnV0ZXN3ZXN0ICVkXG4iLAogCQkxOTAwK3RtLnRtX3llYXIsIHRtLnRtX21vbisxLCB0bS50bV9tZGF5LApkaWZmIC0tZ2l0IGEva2VybmVsL2RlYnVnL2tkYi9rZGJfcHJpdmF0ZS5oIGIva2VybmVsL2RlYnVnL2tkYi9rZGJfcHJpdmF0ZS5oCmluZGV4IDk3ZDNiYTYuLmM0MzhmNTQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX3ByaXZhdGUuaAorKysgYi9rZXJuZWwvZGVidWcva2RiL2tkYl9wcml2YXRlLmgKQEAgLTE0NCw5ICsxNDQsNyBAQAogZXh0ZXJuIGludCBrZGJfcHV0d29yZCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBzaXplX3QpOwogCiBleHRlcm4gaW50IGtkYmdldHVsYXJnKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgbG9uZyAqKTsKLWV4dGVybiBpbnQga2RiX3NldChpbnQsIGNvbnN0IGNoYXIgKiopOwogZXh0ZXJuIGNoYXIgKmtkYmdldGVudihjb25zdCBjaGFyICopOwotZXh0ZXJuIGludCBrZGJnZXRpbnRlbnYoY29uc3QgY2hhciAqLCBpbnQgKik7CiBleHRlcm4gaW50IGtkYmdldGFkZHJhcmcoaW50LCBjb25zdCBjaGFyICoqLCBpbnQqLCB1bnNpZ25lZCBsb25nICosCiAJCQkgbG9uZyAqLCBjaGFyICoqKTsKIGV4dGVybiBpbnQga2RiZ2V0c3ltdmFsKGNvbnN0IGNoYXIgKiwga2RiX3N5bXRhYl90ICopOwpkaWZmIC0tZ2l0IGEva2VybmVsL2Vhcmx5X3Jlcy5jIGIva2VybmVsL2Vhcmx5X3Jlcy5jCmluZGV4IDMxYWE5MzMuLjdiZmFlODggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9lYXJseV9yZXMuYworKysgYi9rZXJuZWwvZWFybHlfcmVzLmMKQEAgLTcsNiArNyw4IEBACiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZWFybHlfcmVzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ttZW1sZWFrLmg+CiAKIC8qCiAgKiBFYXJseSByZXNlcnZlZCBtZW1vcnkgYXJlYXMuCkBAIC0zMTksNiArMzIxLDggQEAKIAlzdHJ1Y3QgZWFybHlfcmVzICpyOwogCWludCBpOwogCisJa21lbWxlYWtfZnJlZV9wYXJ0KF9fdmEoc3RhcnQpLCBlbmQgLSBzdGFydCk7CisKIAlpID0gZmluZF9vdmVybGFwcGVkX2Vhcmx5KHN0YXJ0LCBlbmQpOwogCXIgPSAmZWFybHlfcmVzW2ldOwogCWlmIChpID49IG1heF9lYXJseV9yZXMgfHwgci0+ZW5kICE9IGVuZCB8fCByLT5zdGFydCAhPSBzdGFydCkKQEAgLTMzMyw2ICszMzcsOCBAQAogCXN0cnVjdCBlYXJseV9yZXMgKnI7CiAJaW50IGk7CiAKKwlrbWVtbGVha19mcmVlX3BhcnQoX192YShzdGFydCksIGVuZCAtIHN0YXJ0KTsKKwogCWlmIChzdGFydCA9PSBlbmQpCiAJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggYjZjY2UxNC4uYTgyYTY1YyAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYworKysgYi9rZXJuZWwvZm9yay5jCkBAIC05MDcsNyArOTA3LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIG5ld19mbGFncyA9IHAtPmZsYWdzOwogCi0JbmV3X2ZsYWdzICY9IH5QRl9TVVBFUlBSSVY7CisJbmV3X2ZsYWdzICY9IH4oUEZfU1VQRVJQUklWIHwgUEZfV1FfV09SS0VSKTsKIAluZXdfZmxhZ3MgfD0gUEZfRk9SS05PRVhFQzsKIAluZXdfZmxhZ3MgfD0gUEZfU1RBUlRJTkc7CiAJcC0+ZmxhZ3MgPSBuZXdfZmxhZ3M7CmRpZmYgLS1naXQgYS9rZXJuZWwvaHJ0aW1lci5jIGIva2VybmVsL2hydGltZXIuYwppbmRleCA1YzY5ZTk5Li5jZTY2OTE3IDEwMDY0NAotLS0gYS9rZXJuZWwvaHJ0aW1lci5jCisrKyBiL2tlcm5lbC9ocnRpbWVyLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAlkbyB7CiAJCXNlcSA9IHJlYWRfc2VxYmVnaW4oJnh0aW1lX2xvY2spOwogCQl4dHMgPSBfX2N1cnJlbnRfa2VybmVsX3RpbWUoKTsKLQkJdG9tID0gd2FsbF90b19tb25vdG9uaWM7CisJCXRvbSA9IF9fZ2V0X3dhbGxfdG9fbW9ub3RvbmljKCk7CiAJfSB3aGlsZSAocmVhZF9zZXFyZXRyeSgmeHRpbWVfbG9jaywgc2VxKSk7CiAKIAl4dGltID0gdGltZXNwZWNfdG9fa3RpbWUoeHRzKTsKQEAgLTE0NCwxMiArMTQ0LDggQEAKIHN0YXRpYyBpbnQgaHJ0aW1lcl9nZXRfdGFyZ2V0KGludCB0aGlzX2NwdSwgaW50IHBpbm5lZCkKIHsKICNpZmRlZiBDT05GSUdfTk9fSFoKLQlpZiAoIXBpbm5lZCAmJiBnZXRfc3lzY3RsX3RpbWVyX21pZ3JhdGlvbigpICYmIGlkbGVfY3B1KHRoaXNfY3B1KSkgewotCQlpbnQgcHJlZmVycmVkX2NwdSA9IGdldF9ub2h6X2xvYWRfYmFsYW5jZXIoKTsKLQotCQlpZiAocHJlZmVycmVkX2NwdSA+PSAwKQotCQkJcmV0dXJuIHByZWZlcnJlZF9jcHU7Ci0JfQorCWlmICghcGlubmVkICYmIGdldF9zeXNjdGxfdGltZXJfbWlncmF0aW9uKCkgJiYgaWRsZV9jcHUodGhpc19jcHUpKQorCQlyZXR1cm4gZ2V0X25vaHpfdGltZXJfdGFyZ2V0KCk7CiAjZW5kaWYKIAlyZXR1cm4gdGhpc19jcHU7CiB9CkBAIC02MTIsNyArNjA4LDcgQEAKIHN0YXRpYyB2b2lkIHJldHJpZ2dlcl9uZXh0X2V2ZW50KHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZSAqYmFzZTsKLQlzdHJ1Y3QgdGltZXNwZWMgcmVhbHRpbWVfb2Zmc2V0OworCXN0cnVjdCB0aW1lc3BlYyByZWFsdGltZV9vZmZzZXQsIHd0bTsKIAl1bnNpZ25lZCBsb25nIHNlcTsKIAogCWlmICghaHJ0aW1lcl9ocmVzX2FjdGl2ZSgpKQpAQCAtNjIwLDEwICs2MTYsOSBAQAogCiAJZG8gewogCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZ4dGltZV9sb2NrKTsKLQkJc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJnJlYWx0aW1lX29mZnNldCwKLQkJCQkJLXdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYywKLQkJCQkJLXdhbGxfdG9fbW9ub3RvbmljLnR2X25zZWMpOworCQl3dG0gPSBfX2dldF93YWxsX3RvX21vbm90b25pYygpOwogCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoJnh0aW1lX2xvY2ssIHNlcSkpOworCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZyZWFsdGltZV9vZmZzZXQsIC13dG0udHZfc2VjLCAtd3RtLnR2X25zZWMpOwogCiAJYmFzZSA9ICZfX2dldF9jcHVfdmFyKGhydGltZXJfYmFzZXMpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvaHdfYnJlYWtwb2ludC5jIGIva2VybmVsL2h3X2JyZWFrcG9pbnQuYwppbmRleCA3YTU2YjIyLi5kNzFhOTg3IDEwMDY0NAotLS0gYS9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCisrKyBiL2tlcm5lbC9od19icmVha3BvaW50LmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogCkBAIC02Miw2ICs2Myw5IEBACiAKIHN0YXRpYyBpbnQgbnJfc2xvdHNbVFlQRV9NQVhdOwogCisvKiBLZWVwIHRyYWNrIG9mIHRoZSBicmVha3BvaW50cyBhdHRhY2hlZCB0byB0YXNrcyAqLworc3RhdGljIExJU1RfSEVBRChicF90YXNrX2hlYWQpOworCiBzdGF0aWMgaW50IGNvbnN0cmFpbnRzX2luaXRpYWxpemVkOwogCiAvKiBHYXRoZXIgdGhlIG51bWJlciBvZiB0b3RhbCBwaW5uZWQgYW5kIHVuLXBpbm5lZCBicCBpbiBhIGNwdXNldCAqLwpAQCAtMTAzLDMzICsxMDcsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0YXNrX2JwX3Bpbm5lZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgZW51bSBicF90eXBlX2lkeCB0eXBlKQorLyoKKyAqIENvdW50IHRoZSBudW1iZXIgb2YgYnJlYWtwb2ludHMgb2YgdGhlIHNhbWUgdHlwZSBhbmQgc2FtZSB0YXNrLgorICogVGhlIGdpdmVuIGV2ZW50IG11c3QgYmUgbm90IG9uIHRoZSBsaXN0LgorICovCitzdGF0aWMgaW50IHRhc2tfYnBfcGlubmVkKHN0cnVjdCBwZXJmX2V2ZW50ICpicCwgZW51bSBicF90eXBlX2lkeCB0eXBlKQogewotCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IHRzay0+cGVyZl9ldmVudF9jdHhwOwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7Ci0Jc3RydWN0IHBlcmZfZXZlbnQgKmJwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gYnAtPmN0eDsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqaXRlcjsKIAlpbnQgY291bnQgPSAwOwogCi0JaWYgKFdBUk5fT05DRSghY3R4LCAiTm8gcGVyZiBjb250ZXh0IGZvciB0aGlzIHRhc2siKSkKLQkJcmV0dXJuIDA7Ci0KLQlsaXN0ID0gJmN0eC0+ZXZlbnRfbGlzdDsKLQotCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmY3R4LT5sb2NrLCBmbGFncyk7Ci0KLQkvKgotCSAqIFRoZSBjdXJyZW50IGJyZWFrcG9pbnQgY291bnRlciBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGxpc3QKLQkgKiBhdCB0aGUgb3BlbigpIGNhbGxiYWNrIHRpbWUKLQkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJwLCBsaXN0LCBldmVudF9lbnRyeSkgewotCQlpZiAoYnAtPmF0dHIudHlwZSA9PSBQRVJGX1RZUEVfQlJFQUtQT0lOVCkKLQkJCWlmIChmaW5kX3Nsb3RfaWR4KGJwKSA9PSB0eXBlKQotCQkJCWNvdW50ICs9IGh3X2JyZWFrcG9pbnRfd2VpZ2h0KGJwKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsICZicF90YXNrX2hlYWQsIGh3LmJwX2xpc3QpIHsKKwkJaWYgKGl0ZXItPmN0eCA9PSBjdHggJiYgZmluZF9zbG90X2lkeChpdGVyKSA9PSB0eXBlKQorCQkJY291bnQgKz0gaHdfYnJlYWtwb2ludF93ZWlnaHQoaXRlcik7CiAJfQogCi0JcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0eC0+bG9jaywgZmxhZ3MpOwotCiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0xNDksNyArMTQxLDcgQEAKIAkJaWYgKCF0c2spCiAJCQlzbG90cy0+cGlubmVkICs9IG1heF90YXNrX2JwX3Bpbm5lZChjcHUsIHR5cGUpOwogCQllbHNlCi0JCQlzbG90cy0+cGlubmVkICs9IHRhc2tfYnBfcGlubmVkKHRzaywgdHlwZSk7CisJCQlzbG90cy0+cGlubmVkICs9IHRhc2tfYnBfcGlubmVkKGJwLCB0eXBlKTsKIAkJc2xvdHMtPmZsZXhpYmxlID0gcGVyX2NwdShucl9icF9mbGV4aWJsZVt0eXBlXSwgY3B1KTsKIAogCQlyZXR1cm47CkBAIC0xNjIsNyArMTU0LDcgQEAKIAkJaWYgKCF0c2spCiAJCQluciArPSBtYXhfdGFza19icF9waW5uZWQoY3B1LCB0eXBlKTsKIAkJZWxzZQotCQkJbnIgKz0gdGFza19icF9waW5uZWQodHNrLCB0eXBlKTsKKwkJCW5yICs9IHRhc2tfYnBfcGlubmVkKGJwLCB0eXBlKTsKIAogCQlpZiAobnIgPiBzbG90cy0+cGlubmVkKQogCQkJc2xvdHMtPnBpbm5lZCA9IG5yOwpAQCAtMTg4LDcgKzE4MCw3IEBACiAvKgogICogQWRkIGEgcGlubmVkIGJyZWFrcG9pbnQgZm9yIHRoZSBnaXZlbiB0YXNrIGluIG91ciBjb25zdHJhaW50IHRhYmxlCiAgKi8KLXN0YXRpYyB2b2lkIHRvZ2dsZV9icF90YXNrX3Nsb3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBjcHUsIGJvb2wgZW5hYmxlLAorc3RhdGljIHZvaWQgdG9nZ2xlX2JwX3Rhc2tfc2xvdChzdHJ1Y3QgcGVyZl9ldmVudCAqYnAsIGludCBjcHUsIGJvb2wgZW5hYmxlLAogCQkJCWVudW0gYnBfdHlwZV9pZHggdHlwZSwgaW50IHdlaWdodCkKIHsKIAl1bnNpZ25lZCBpbnQgKnRza19waW5uZWQ7CkBAIC0xOTYsMTAgKzE4OCwxMSBAQAogCWludCBvbGRfaWR4ID0gMDsKIAlpbnQgaWR4ID0gMDsKIAotCW9sZF9jb3VudCA9IHRhc2tfYnBfcGlubmVkKHRzaywgdHlwZSk7CisJb2xkX2NvdW50ID0gdGFza19icF9waW5uZWQoYnAsIHR5cGUpOwogCW9sZF9pZHggPSBvbGRfY291bnQgLSAxOwogCWlkeCA9IG9sZF9pZHggKyB3ZWlnaHQ7CiAKKwkvKiB0c2tfcGlubmVkW25dIGlzIHRoZSBudW1iZXIgb2YgdGFza3MgaGF2aW5nIG4gYnJlYWtwb2ludHMgKi8KIAl0c2tfcGlubmVkID0gcGVyX2NwdShucl90YXNrX2JwX3Bpbm5lZFt0eXBlXSwgY3B1KTsKIAlpZiAoZW5hYmxlKSB7CiAJCXRza19waW5uZWRbaWR4XSsrOwpAQCAtMjIyLDIzICsyMTUsNDEgQEAKIAlpbnQgY3B1ID0gYnAtPmNwdTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGJwLT5jdHgtPnRhc2s7CiAKLQkvKiBQaW5uZWQgY291bnRlciB0YXNrIHByb2ZpbGluZyAqLwotCWlmICh0c2spIHsKLQkJaWYgKGNwdSA+PSAwKSB7Ci0JCQl0b2dnbGVfYnBfdGFza19zbG90KHRzaywgY3B1LCBlbmFibGUsIHR5cGUsIHdlaWdodCk7Ci0JCQlyZXR1cm47Ci0JCX0KKwkvKiBQaW5uZWQgY291bnRlciBjcHUgcHJvZmlsaW5nICovCisJaWYgKCF0c2spIHsKIAotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJCXRvZ2dsZV9icF90YXNrX3Nsb3QodHNrLCBjcHUsIGVuYWJsZSwgdHlwZSwgd2VpZ2h0KTsKKwkJaWYgKGVuYWJsZSkKKwkJCXBlcl9jcHUobnJfY3B1X2JwX3Bpbm5lZFt0eXBlXSwgYnAtPmNwdSkgKz0gd2VpZ2h0OworCQllbHNlCisJCQlwZXJfY3B1KG5yX2NwdV9icF9waW5uZWRbdHlwZV0sIGJwLT5jcHUpIC09IHdlaWdodDsKIAkJcmV0dXJuOwogCX0KIAotCS8qIFBpbm5lZCBjb3VudGVyIGNwdSBwcm9maWxpbmcgKi8KKwkvKiBQaW5uZWQgY291bnRlciB0YXNrIHByb2ZpbGluZyAqLworCisJaWYgKCFlbmFibGUpCisJCWxpc3RfZGVsKCZicC0+aHcuYnBfbGlzdCk7CisKKwlpZiAoY3B1ID49IDApIHsKKwkJdG9nZ2xlX2JwX3Rhc2tfc2xvdChicCwgY3B1LCBlbmFibGUsIHR5cGUsIHdlaWdodCk7CisJfSBlbHNlIHsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCisJCQl0b2dnbGVfYnBfdGFza19zbG90KGJwLCBjcHUsIGVuYWJsZSwgdHlwZSwgd2VpZ2h0KTsKKwl9CisKIAlpZiAoZW5hYmxlKQotCQlwZXJfY3B1KG5yX2NwdV9icF9waW5uZWRbdHlwZV0sIGJwLT5jcHUpICs9IHdlaWdodDsKLQllbHNlCi0JCXBlcl9jcHUobnJfY3B1X2JwX3Bpbm5lZFt0eXBlXSwgYnAtPmNwdSkgLT0gd2VpZ2h0OworCQlsaXN0X2FkZF90YWlsKCZicC0+aHcuYnBfbGlzdCwgJmJwX3Rhc2tfaGVhZCk7Cit9CisKKy8qCisgKiBGdW5jdGlvbiB0byBwZXJmb3JtIHByb2Nlc3Nvci1zcGVjaWZpYyBjbGVhbnVwIGR1cmluZyB1bnJlZ2lzdHJhdGlvbgorICovCitfX3dlYWsgdm9pZCBhcmNoX3VucmVnaXN0ZXJfaHdfYnJlYWtwb2ludChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCit7CisJLyoKKwkgKiBBIHdlYWsgc3R1YiBmdW5jdGlvbiBoZXJlIGZvciB0aG9zZSBhcmNocyB0aGF0IGRvbid0IGRlZmluZQorCSAqIGl0IGluc2lkZSBhcmNoLy4uLi9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCisJICovCiB9CiAKIC8qCkBAIC0zMDEsNiArMzEyLDEwIEBACiAJd2VpZ2h0ID0gaHdfYnJlYWtwb2ludF93ZWlnaHQoYnApOwogCiAJZmV0Y2hfYnBfYnVzeV9zbG90cygmc2xvdHMsIGJwLCB0eXBlKTsKKwkvKgorCSAqIFNpbXVsYXRlIHRoZSBhZGRpdGlvbiBvZiB0aGlzIGJyZWFrcG9pbnQgdG8gdGhlIGNvbnN0cmFpbnRzCisJICogYW5kIHNlZSB0aGUgcmVzdWx0LgorCSAqLwogCWZldGNoX3RoaXNfc2xvdCgmc2xvdHMsIHdlaWdodCk7CiAKIAkvKiBGbGV4aWJsZSBjb3VudGVycyBuZWVkIHRvIGtlZXAgYXQgbGVhc3Qgb25lIHNsb3QgKi8KQEAgLTMzOSw2ICszNTQsNyBAQAogewogCW11dGV4X2xvY2soJm5yX2JwX211dGV4KTsKIAorCWFyY2hfdW5yZWdpc3Rlcl9od19icmVha3BvaW50KGJwKTsKIAlfX3JlbGVhc2VfYnBfc2xvdChicCk7CiAKIAltdXRleF91bmxvY2soJm5yX2JwX211dGV4KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWFuYWdlLmMgYi9rZXJuZWwvaXJxL21hbmFnZS5jCmluZGV4IGUxNDk3NDguLmMzMDAzZTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWFuYWdlLmMKKysrIGIva2VybmVsL2lycS9tYW5hZ2UuYwpAQCAtMjE2LDcgKzIxNiw3IEBACiB2b2lkIF9fZGlzYWJsZV9pcnEoc3RydWN0IGlycV9kZXNjICpkZXNjLCB1bnNpZ25lZCBpbnQgaXJxLCBib29sIHN1c3BlbmQpCiB7CiAJaWYgKHN1c3BlbmQpIHsKLQkJaWYgKCFkZXNjLT5hY3Rpb24gfHwgKGRlc2MtPmFjdGlvbi0+ZmxhZ3MgJiBJUlFGX1RJTUVSKSkKKwkJaWYgKCFkZXNjLT5hY3Rpb24gfHwgKGRlc2MtPmFjdGlvbi0+ZmxhZ3MgJiBJUlFGX05PX1NVU1BFTkQpKQogCQkJcmV0dXJuOwogCQlkZXNjLT5zdGF0dXMgfD0gSVJRX1NVU1BFTkRFRDsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tkZXAuYwppbmRleCA1NDI4Njc5Li5mMjg1MmE1IDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2RlcC5jCisrKyBiL2tlcm5lbC9sb2NrZGVwLmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCiBzdGF0aWMgaW5saW5lIHU2NCBsb2Nrc3RhdF9jbG9jayh2b2lkKQogewotCXJldHVybiBjcHVfY2xvY2soc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlyZXR1cm4gbG9jYWxfY2xvY2soKTsKIH0KIAogc3RhdGljIGludCBsb2NrX3BvaW50KHVuc2lnbmVkIGxvbmcgcG9pbnRzW10sIHVuc2lnbmVkIGxvbmcgaXApCmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlLmMgYi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggNWQyZDI4MS4uZDBiNWY4ZCAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS5jCisrKyBiL2tlcm5lbC9tb2R1bGUuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICBDb3B5cmlnaHQgKEMpIDIwMDIgUmljaGFyZCBIZW5kZXJzb24KLSAgIENvcHlyaWdodCAoQykgMjAwMSBSdXN0eSBSdXNzZWxsLCAyMDAyIFJ1c3R5IFJ1c3NlbGwgSUJNLgorICAgQ29weXJpZ2h0IChDKSAyMDAxIFJ1c3R5IFJ1c3NlbGwsIDIwMDIsIDIwMTAgUnVzdHkgUnVzc2VsbCBJQk0uCiAKICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xMTAsNiArMTEwLDIwIEBACiB9CiBFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfbW9kdWxlX25vdGlmaWVyKTsKIAorc3RydWN0IGxvYWRfaW5mbyB7CisJRWxmX0VoZHIgKmhkcjsKKwl1bnNpZ25lZCBsb25nIGxlbjsKKwlFbGZfU2hkciAqc2VjaGRyczsKKwljaGFyICpzZWNzdHJpbmdzLCAqc3RydGFiOworCXVuc2lnbmVkIGxvbmcgKnN0cm1hcDsKKwl1bnNpZ25lZCBsb25nIHN5bW9mZnMsIHN0cm9mZnM7CisJc3RydWN0IF9kZGVidWcgKmRlYnVnOworCXVuc2lnbmVkIGludCBudW1fZGVidWc7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgaW50IHN5bSwgc3RyLCBtb2QsIHZlcnMsIGluZm8sIHBjcHU7CisJfSBpbmRleDsKK307CisKIC8qIFdlIHJlcXVpcmUgYSB0cnVseSBzdHJvbmcgdHJ5X21vZHVsZV9nZXQoKTogMCBtZWFucyBmYWlsdXJlIGR1ZSB0bwogICAgb25nb2luZyBvciBmYWlsZWQgaW5pdGlhbGl6YXRpb24gZXRjLiAqLwogc3RhdGljIGlubGluZSBpbnQgc3Ryb25nX3RyeV9tb2R1bGVfZ2V0KHN0cnVjdCBtb2R1bGUgKm1vZCkKQEAgLTE0MCw0MiArMTU0LDM4IEBACiBFWFBPUlRfU1lNQk9MKF9fbW9kdWxlX3B1dF9hbmRfZXhpdCk7CiAKIC8qIEZpbmQgYSBtb2R1bGUgc2VjdGlvbjogMCBtZWFucyBub3QgZm91bmQuICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfc2VjKEVsZl9FaGRyICpoZHIsCi0JCQkgICAgIEVsZl9TaGRyICpzZWNoZHJzLAotCQkJICAgICBjb25zdCBjaGFyICpzZWNzdHJpbmdzLAotCQkJICAgICBjb25zdCBjaGFyICpuYW1lKQorc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX3NlYyhjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBjb25zdCBjaGFyICpuYW1lKQogewogCXVuc2lnbmVkIGludCBpOwogCi0JZm9yIChpID0gMTsgaSA8IGhkci0+ZV9zaG51bTsgaSsrKQorCWZvciAoaSA9IDE7IGkgPCBpbmZvLT5oZHItPmVfc2hudW07IGkrKykgeworCQlFbGZfU2hkciAqc2hkciA9ICZpbmZvLT5zZWNoZHJzW2ldOwogCQkvKiBBbGxvYyBiaXQgY2xlYXJlZCBtZWFucyAiaWdub3JlIGl0LiIgKi8KLQkJaWYgKChzZWNoZHJzW2ldLnNoX2ZsYWdzICYgU0hGX0FMTE9DKQotCQkgICAgJiYgc3RyY21wKHNlY3N0cmluZ3Mrc2VjaGRyc1tpXS5zaF9uYW1lLCBuYW1lKSA9PSAwKQorCQlpZiAoKHNoZHItPnNoX2ZsYWdzICYgU0hGX0FMTE9DKQorCQkgICAgJiYgc3RyY21wKGluZm8tPnNlY3N0cmluZ3MgKyBzaGRyLT5zaF9uYW1lLCBuYW1lKSA9PSAwKQogCQkJcmV0dXJuIGk7CisJfQogCXJldHVybiAwOwogfQogCiAvKiBGaW5kIGEgbW9kdWxlIHNlY3Rpb24sIG9yIE5VTEwuICovCi1zdGF0aWMgdm9pZCAqc2VjdGlvbl9hZGRyKEVsZl9FaGRyICpoZHIsIEVsZl9TaGRyICpzaGRycywKLQkJCSAgY29uc3QgY2hhciAqc2Vjc3RyaW5ncywgY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyB2b2lkICpzZWN0aW9uX2FkZHIoY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqbmFtZSkKIHsKIAkvKiBTZWN0aW9uIDAgaGFzIHNoX2FkZHIgMC4gKi8KLQlyZXR1cm4gKHZvaWQgKilzaGRyc1tmaW5kX3NlYyhoZHIsIHNoZHJzLCBzZWNzdHJpbmdzLCBuYW1lKV0uc2hfYWRkcjsKKwlyZXR1cm4gKHZvaWQgKilpbmZvLT5zZWNoZHJzW2ZpbmRfc2VjKGluZm8sIG5hbWUpXS5zaF9hZGRyOwogfQogCiAvKiBGaW5kIGEgbW9kdWxlIHNlY3Rpb24sIG9yIE5VTEwuICBGaWxsIGluIG51bWJlciBvZiAib2JqZWN0cyIgaW4gc2VjdGlvbi4gKi8KLXN0YXRpYyB2b2lkICpzZWN0aW9uX29ianMoRWxmX0VoZHIgKmhkciwKLQkJCSAgRWxmX1NoZHIgKnNlY2hkcnMsCi0JCQkgIGNvbnN0IGNoYXIgKnNlY3N0cmluZ3MsCitzdGF0aWMgdm9pZCAqc2VjdGlvbl9vYmpzKGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8sCiAJCQkgIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkgIHNpemVfdCBvYmplY3Rfc2l6ZSwKIAkJCSAgdW5zaWduZWQgaW50ICpudW0pCiB7Ci0JdW5zaWduZWQgaW50IHNlYyA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgbmFtZSk7CisJdW5zaWduZWQgaW50IHNlYyA9IGZpbmRfc2VjKGluZm8sIG5hbWUpOwogCiAJLyogU2VjdGlvbiAwIGhhcyBzaF9hZGRyIDAgYW5kIHNoX3NpemUgMC4gKi8KLQkqbnVtID0gc2VjaGRyc1tzZWNdLnNoX3NpemUgLyBvYmplY3Rfc2l6ZTsKLQlyZXR1cm4gKHZvaWQgKilzZWNoZHJzW3NlY10uc2hfYWRkcjsKKwkqbnVtID0gaW5mby0+c2VjaGRyc1tzZWNdLnNoX3NpemUgLyBvYmplY3Rfc2l6ZTsKKwlyZXR1cm4gKHZvaWQgKilpbmZvLT5zZWNoZHJzW3NlY10uc2hfYWRkcjsKIH0KIAogLyogUHJvdmlkZWQgYnkgdGhlIGxpbmtlciAqLwpAQCAtMjI3LDcgKzIzNyw3IEBACiAJCQkgICAgdW5zaWduZWQgaW50IHN5bW51bSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG1vZHVsZSAqbW9kOwotCWNvbnN0IHN0cnVjdCBzeW1zZWFyY2ggYXJyW10gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBzeW1zZWFyY2ggYXJyW10gPSB7CiAJCXsgX19zdGFydF9fX2tzeW10YWIsIF9fc3RvcF9fX2tzeW10YWIsIF9fc3RhcnRfX19rY3JjdGFiLAogCQkgIE5PVF9HUExfT05MWSwgZmFsc2UgfSwKIAkJeyBfX3N0YXJ0X19fa3N5bXRhYl9ncGwsIF9fc3RvcF9fX2tzeW10YWJfZ3BsLApAQCAtMzkyLDcgKzQwMiw4IEBACiAJbW9kLT5wZXJjcHUgPSBfX2FsbG9jX3Jlc2VydmVkX3BlcmNwdShzaXplLCBhbGlnbik7CiAJaWYgKCFtb2QtPnBlcmNwdSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiQ291bGQgbm90IGFsbG9jYXRlICVsdSBieXRlcyBwZXJjcHUgZGF0YVxuIiwgc2l6ZSk7CisJCSAgICAgICAiJXM6IENvdWxkIG5vdCBhbGxvY2F0ZSAlbHUgYnl0ZXMgcGVyY3B1IGRhdGFcbiIsCisJCSAgICAgICBtb2QtPm5hbWUsIHNpemUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbW9kLT5wZXJjcHVfc2l6ZSA9IHNpemU7CkBAIC00MDQsMTEgKzQxNSw5IEBACiAJZnJlZV9wZXJjcHUobW9kLT5wZXJjcHUpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfcGNwdXNlYyhFbGZfRWhkciAqaGRyLAotCQkJCSBFbGZfU2hkciAqc2VjaGRycywKLQkJCQkgY29uc3QgY2hhciAqc2Vjc3RyaW5ncykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9wY3B1c2VjKHN0cnVjdCBsb2FkX2luZm8gKmluZm8pCiB7Ci0JcmV0dXJuIGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIi5kYXRhLi5wZXJjcHUiKTsKKwlyZXR1cm4gZmluZF9zZWMoaW5mbywgIi5kYXRhLi5wZXJjcHUiKTsKIH0KIAogc3RhdGljIHZvaWQgcGVyY3B1X21vZGNvcHkoc3RydWN0IG1vZHVsZSAqbW9kLApAQCAtNDY4LDkgKzQ3Nyw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgcGVyY3B1X21vZGZyZWUoc3RydWN0IG1vZHVsZSAqbW9kKQogewogfQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZmluZF9wY3B1c2VjKEVsZl9FaGRyICpoZHIsCi0JCQkJCUVsZl9TaGRyICpzZWNoZHJzLAotCQkJCQljb25zdCBjaGFyICpzZWNzdHJpbmdzKQorc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX3BjcHVzZWMoc3RydWN0IGxvYWRfaW5mbyAqaW5mbykKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTUyNCwyMSArNTMxLDIxIEBACiBFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0wobW9kdWxlX2dldCk7CiAKIC8qIEluaXQgdGhlIHVubG9hZCBzZWN0aW9uIG9mIHRoZSBtb2R1bGUuICovCi1zdGF0aWMgdm9pZCBtb2R1bGVfdW5sb2FkX2luaXQoc3RydWN0IG1vZHVsZSAqbW9kKQorc3RhdGljIGludCBtb2R1bGVfdW5sb2FkX2luaXQoc3RydWN0IG1vZHVsZSAqbW9kKQogewotCWludCBjcHU7CisJbW9kLT5yZWZwdHIgPSBhbGxvY19wZXJjcHUoc3RydWN0IG1vZHVsZV9yZWYpOworCWlmICghbW9kLT5yZWZwdHIpCisJCXJldHVybiAtRU5PTUVNOwogCiAJSU5JVF9MSVNUX0hFQUQoJm1vZC0+c291cmNlX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZtb2QtPnRhcmdldF9saXN0KTsKLQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCXBlcl9jcHVfcHRyKG1vZC0+cmVmcHRyLCBjcHUpLT5pbmNzID0gMDsKLQkJcGVyX2NwdV9wdHIobW9kLT5yZWZwdHIsIGNwdSktPmRlY3MgPSAwOwotCX0KIAogCS8qIEhvbGQgcmVmZXJlbmNlIGNvdW50IGR1cmluZyBpbml0aWFsaXphdGlvbi4gKi8KIAlfX3RoaXNfY3B1X3dyaXRlKG1vZC0+cmVmcHRyLT5pbmNzLCAxKTsKIAkvKiBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBtYWNyb3MgcHV0IHJlZmNvdW50IGR1cmluZyBpbml0LiAqLwogCW1vZC0+d2FpdGVyID0gY3VycmVudDsKKworCXJldHVybiAwOwogfQogCiAvKiBEb2VzIGEgYWxyZWFkeSB1c2UgYj8gKi8KQEAgLTYxOCw2ICs2MjUsOCBAQAogCQlrZnJlZSh1c2UpOwogCX0KIAltdXRleF91bmxvY2soJm1vZHVsZV9tdXRleCk7CisKKwlmcmVlX3BlcmNwdShtb2QtPnJlZnB0cik7CiB9CiAKICNpZmRlZiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRApAQCAtNzg3LDcgKzc5Niw2IEBACiAKIAkvKiBTdG9yZSB0aGUgbmFtZSBvZiB0aGUgbGFzdCB1bmxvYWRlZCBtb2R1bGUgZm9yIGRpYWdub3N0aWMgcHVycG9zZXMgKi8KIAlzdHJsY3B5KGxhc3RfdW5sb2FkZWRfbW9kdWxlLCBtb2QtPm5hbWUsIHNpemVvZihsYXN0X3VubG9hZGVkX21vZHVsZSkpOwotCWRkZWJ1Z19yZW1vdmVfbW9kdWxlKG1vZC0+bmFtZSk7CiAKIAlmcmVlX21vZHVsZShtb2QpOwogCXJldHVybiAwOwpAQCAtODkyLDggKzkwMCw5IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyZWZfbW9kdWxlKTsKIAotc3RhdGljIGlubGluZSB2b2lkIG1vZHVsZV91bmxvYWRfaW5pdChzdHJ1Y3QgbW9kdWxlICptb2QpCitzdGF0aWMgaW5saW5lIGludCBtb2R1bGVfdW5sb2FkX2luaXQoc3RydWN0IG1vZHVsZSAqbW9kKQogeworCXJldHVybiAwOwogfQogI2VuZGlmIC8qIENPTkZJR19NT0RVTEVfVU5MT0FEICovCiAKQEAgLTEwNTIsMTAgKzEwNjEsOSBAQAogI2VuZGlmIC8qIENPTkZJR19NT0RWRVJTSU9OUyAqLwogCiAvKiBSZXNvbHZlIGEgc3ltYm9sIGZvciB0aGlzIG1vZHVsZS4gIEkuZS4gaWYgd2UgZmluZCBvbmUsIHJlY29yZCB1c2FnZS4gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqcmVzb2x2ZV9zeW1ib2woRWxmX1NoZHIgKnNlY2hkcnMsCi0JCQkJCQkgIHVuc2lnbmVkIGludCB2ZXJzaW5kZXgsCitzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgKnJlc29sdmVfc3ltYm9sKHN0cnVjdCBtb2R1bGUgKm1vZCwKKwkJCQkJCSAgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbywKIAkJCQkJCSAgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkJCSAgc3RydWN0IG1vZHVsZSAqbW9kLAogCQkJCQkJICBjaGFyIG93bmVybmFtZVtdKQogewogCXN0cnVjdCBtb2R1bGUgKm93bmVyOwpAQCAtMTA2OSw3ICsxMDc3LDggQEAKIAlpZiAoIXN5bSkKIAkJZ290byB1bmxvY2s7CiAKLQlpZiAoIWNoZWNrX3ZlcnNpb24oc2VjaGRycywgdmVyc2luZGV4LCBuYW1lLCBtb2QsIGNyYywgb3duZXIpKSB7CisJaWYgKCFjaGVja192ZXJzaW9uKGluZm8tPnNlY2hkcnMsIGluZm8tPmluZGV4LnZlcnMsIG5hbWUsIG1vZCwgY3JjLAorCQkJICAgb3duZXIpKSB7CiAJCXN5bSA9IEVSUl9QVFIoLUVJTlZBTCk7CiAJCWdvdG8gZ2V0bmFtZTsKIAl9CkBAIC0xMDg4LDIxICsxMDk3LDIwIEBACiAJcmV0dXJuIHN5bTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICpyZXNvbHZlX3N5bWJvbF93YWl0KEVsZl9TaGRyICpzZWNoZHJzLAotCQkJCQkJICAgICAgIHVuc2lnbmVkIGludCB2ZXJzaW5kZXgsCi0JCQkJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkJCSAgICAgICBzdHJ1Y3QgbW9kdWxlICptb2QpCitzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgKgorcmVzb2x2ZV9zeW1ib2xfd2FpdChzdHJ1Y3QgbW9kdWxlICptb2QsCisJCSAgICBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLAorCQkgICAgY29uc3QgY2hhciAqbmFtZSkKIHsKIAljb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqa3N5bTsKLQljaGFyIG93bmVybmFtZVtNT0RVTEVfTkFNRV9MRU5dOworCWNoYXIgb3duZXJbTU9EVUxFX05BTUVfTEVOXTsKIAogCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChtb2R1bGVfd3EsCi0JCQkhSVNfRVJSKGtzeW0gPSByZXNvbHZlX3N5bWJvbChzZWNoZHJzLCB2ZXJzaW5kZXgsIG5hbWUsCi0JCQkJCQkgICAgICBtb2QsIG93bmVybmFtZSkpIHx8Ci0JCQlQVFJfRVJSKGtzeW0pICE9IC1FQlVTWSwKKwkJCSFJU19FUlIoa3N5bSA9IHJlc29sdmVfc3ltYm9sKG1vZCwgaW5mbywgbmFtZSwgb3duZXIpKQorCQkJfHwgUFRSX0VSUihrc3ltKSAhPSAtRUJVU1ksCiAJCQkJCSAgICAgMzAgKiBIWikgPD0gMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZ2F2ZSB1cCB3YWl0aW5nIGZvciBpbml0IG9mIG1vZHVsZSAlcy5cbiIsCi0JCSAgICAgICBtb2QtPm5hbWUsIG93bmVybmFtZSk7CisJCSAgICAgICBtb2QtPm5hbWUsIG93bmVyKTsKIAl9CiAJcmV0dXJuIGtzeW07CiB9CkBAIC0xMTExLDggKzExMTksOSBAQAogICogL3N5cy9tb2R1bGUvZm9vL3NlY3Rpb25zIHN0dWZmCiAgKiBKLiBDb3JiZXQgPGNvcmJldEBsd24ubmV0PgogICovCi0jaWYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpICYmIGRlZmluZWQoQ09ORklHX1NZU0ZTKQorI2lmZGVmIENPTkZJR19TWVNGUwogCisjaWZkZWYgQ09ORklHX0tBTExTWU1TCiBzdGF0aWMgaW5saW5lIGJvb2wgc2VjdF9lbXB0eShjb25zdCBFbGZfU2hkciAqc2VjdCkKIHsKIAlyZXR1cm4gIShzZWN0LT5zaF9mbGFncyAmIFNIRl9BTExPQykgfHwgc2VjdC0+c2hfc2l6ZSA9PSAwOwpAQCAtMTE0OSw4ICsxMTU4LDcgQEAKIAlrZnJlZShzZWN0X2F0dHJzKTsKIH0KIAotc3RhdGljIHZvaWQgYWRkX3NlY3RfYXR0cnMoc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBpbnQgbnNlY3QsCi0JCWNoYXIgKnNlY3N0cmluZ3MsIEVsZl9TaGRyICpzZWNoZHJzKQorc3RhdGljIHZvaWQgYWRkX3NlY3RfYXR0cnMoc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQogewogCXVuc2lnbmVkIGludCBubG9hZGVkID0gMCwgaSwgc2l6ZVsyXTsKIAlzdHJ1Y3QgbW9kdWxlX3NlY3RfYXR0cnMgKnNlY3RfYXR0cnM7CkBAIC0xMTU4LDggKzExNjYsOCBAQAogCXN0cnVjdCBhdHRyaWJ1dGUgKipnYXR0cjsKIAogCS8qIENvdW50IGxvYWRlZCBzZWN0aW9ucyBhbmQgYWxsb2NhdGUgc3RydWN0dXJlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBuc2VjdDsgaSsrKQotCQlpZiAoIXNlY3RfZW1wdHkoJnNlY2hkcnNbaV0pKQorCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5oZHItPmVfc2hudW07IGkrKykKKwkJaWYgKCFzZWN0X2VtcHR5KCZpbmZvLT5zZWNoZHJzW2ldKSkKIAkJCW5sb2FkZWQrKzsKIAlzaXplWzBdID0gQUxJR04oc2l6ZW9mKCpzZWN0X2F0dHJzKQogCQkJKyBubG9hZGVkICogc2l6ZW9mKHNlY3RfYXR0cnMtPmF0dHJzWzBdKSwKQEAgLTExNzYsMTEgKzExODQsMTIgQEAKIAlzZWN0X2F0dHJzLT5uc2VjdGlvbnMgPSAwOwogCXNhdHRyID0gJnNlY3RfYXR0cnMtPmF0dHJzWzBdOwogCWdhdHRyID0gJnNlY3RfYXR0cnMtPmdycC5hdHRyc1swXTsKLQlmb3IgKGkgPSAwOyBpIDwgbnNlY3Q7IGkrKykgewotCQlpZiAoc2VjdF9lbXB0eSgmc2VjaGRyc1tpXSkpCisJZm9yIChpID0gMDsgaSA8IGluZm8tPmhkci0+ZV9zaG51bTsgaSsrKSB7CisJCUVsZl9TaGRyICpzZWMgPSAmaW5mby0+c2VjaGRyc1tpXTsKKwkJaWYgKHNlY3RfZW1wdHkoc2VjKSkKIAkJCWNvbnRpbnVlOwotCQlzYXR0ci0+YWRkcmVzcyA9IHNlY2hkcnNbaV0uc2hfYWRkcjsKLQkJc2F0dHItPm5hbWUgPSBrc3RyZHVwKHNlY3N0cmluZ3MgKyBzZWNoZHJzW2ldLnNoX25hbWUsCisJCXNhdHRyLT5hZGRyZXNzID0gc2VjLT5zaF9hZGRyOworCQlzYXR0ci0+bmFtZSA9IGtzdHJkdXAoaW5mby0+c2Vjc3RyaW5ncyArIHNlYy0+c2hfbmFtZSwKIAkJCQkJR0ZQX0tFUk5FTCk7CiAJCWlmIChzYXR0ci0+bmFtZSA9PSBOVUxMKQogCQkJZ290byBvdXQ7CkBAIC0xMjQ4LDggKzEyNTcsNyBAQAogCWtmcmVlKG5vdGVzX2F0dHJzKTsKIH0KIAotc3RhdGljIHZvaWQgYWRkX25vdGVzX2F0dHJzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgaW50IG5zZWN0LAotCQkJICAgIGNoYXIgKnNlY3N0cmluZ3MsIEVsZl9TaGRyICpzZWNoZHJzKQorc3RhdGljIHZvaWQgYWRkX25vdGVzX2F0dHJzKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbykKIHsKIAl1bnNpZ25lZCBpbnQgbm90ZXMsIGxvYWRlZCwgaTsKIAlzdHJ1Y3QgbW9kdWxlX25vdGVzX2F0dHJzICpub3Rlc19hdHRyczsKQEAgLTEyNjEsOSArMTI2OSw5IEBACiAKIAkvKiBDb3VudCBub3RlcyBzZWN0aW9ucyBhbmQgYWxsb2NhdGUgc3RydWN0dXJlcy4gICovCiAJbm90ZXMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBuc2VjdDsgaSsrKQotCQlpZiAoIXNlY3RfZW1wdHkoJnNlY2hkcnNbaV0pICYmCi0JCSAgICAoc2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9OT1RFKSkKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+aGRyLT5lX3NobnVtOyBpKyspCisJCWlmICghc2VjdF9lbXB0eSgmaW5mby0+c2VjaGRyc1tpXSkgJiYKKwkJICAgIChpbmZvLT5zZWNoZHJzW2ldLnNoX3R5cGUgPT0gU0hUX05PVEUpKQogCQkJKytub3RlczsKIAogCWlmIChub3RlcyA9PSAwKQpAQCAtMTI3NywxNSArMTI4NSwxNSBAQAogCiAJbm90ZXNfYXR0cnMtPm5vdGVzID0gbm90ZXM7CiAJbmF0dHIgPSAmbm90ZXNfYXR0cnMtPmF0dHJzWzBdOwotCWZvciAobG9hZGVkID0gaSA9IDA7IGkgPCBuc2VjdDsgKytpKSB7Ci0JCWlmIChzZWN0X2VtcHR5KCZzZWNoZHJzW2ldKSkKKwlmb3IgKGxvYWRlZCA9IGkgPSAwOyBpIDwgaW5mby0+aGRyLT5lX3NobnVtOyArK2kpIHsKKwkJaWYgKHNlY3RfZW1wdHkoJmluZm8tPnNlY2hkcnNbaV0pKQogCQkJY29udGludWU7Ci0JCWlmIChzZWNoZHJzW2ldLnNoX3R5cGUgPT0gU0hUX05PVEUpIHsKKwkJaWYgKGluZm8tPnNlY2hkcnNbaV0uc2hfdHlwZSA9PSBTSFRfTk9URSkgewogCQkJc3lzZnNfYmluX2F0dHJfaW5pdChuYXR0cik7CiAJCQluYXR0ci0+YXR0ci5uYW1lID0gbW9kLT5zZWN0X2F0dHJzLT5hdHRyc1tsb2FkZWRdLm5hbWU7CiAJCQluYXR0ci0+YXR0ci5tb2RlID0gU19JUlVHTzsKLQkJCW5hdHRyLT5zaXplID0gc2VjaGRyc1tpXS5zaF9zaXplOwotCQkJbmF0dHItPnByaXZhdGUgPSAodm9pZCAqKSBzZWNoZHJzW2ldLnNoX2FkZHI7CisJCQluYXR0ci0+c2l6ZSA9IGluZm8tPnNlY2hkcnNbaV0uc2hfc2l6ZTsKKwkJCW5hdHRyLT5wcml2YXRlID0gKHZvaWQgKikgaW5mby0+c2VjaGRyc1tpXS5zaF9hZGRyOwogCQkJbmF0dHItPnJlYWQgPSBtb2R1bGVfbm90ZXNfcmVhZDsKIAkJCSsrbmF0dHI7CiAJCX0KQEAgLTEzMTYsOCArMTMyNCw4IEBACiAKICNlbHNlCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRfc2VjdF9hdHRycyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGludCBuc2VjdCwKLQkJY2hhciAqc2VjdHN0cmluZ3MsIEVsZl9TaGRyICpzZWNoZHJzKQorc3RhdGljIGlubGluZSB2b2lkIGFkZF9zZWN0X2F0dHJzKHN0cnVjdCBtb2R1bGUgKm1vZCwKKwkJCQkgIGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8pCiB7CiB9CiAKQEAgLTEzMjUsMTcgKzEzMzMsMTYgQEAKIHsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFkZF9ub3Rlc19hdHRycyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGludCBuc2VjdCwKLQkJCQkgICBjaGFyICpzZWN0c3RyaW5ncywgRWxmX1NoZHIgKnNlY2hkcnMpCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkX25vdGVzX2F0dHJzKHN0cnVjdCBtb2R1bGUgKm1vZCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQogewogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX25vdGVzX2F0dHJzKHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19LQUxMU1lNUyAqLwogCi0jaWZkZWYgQ09ORklHX1NZU0ZTCiBzdGF0aWMgdm9pZCBhZGRfdXNhZ2VfbGlua3Moc3RydWN0IG1vZHVsZSAqbW9kKQogewogI2lmZGVmIENPTkZJR19NT0RVTEVfVU5MT0FECkBAIC0xNDQwLDYgKzE0NDcsNyBAQAogfQogCiBzdGF0aWMgaW50IG1vZF9zeXNmc19zZXR1cChzdHJ1Y3QgbW9kdWxlICptb2QsCisJCQkgICBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLAogCQkJICAgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3BhcmFtLAogCQkJICAgdW5zaWduZWQgaW50IG51bV9wYXJhbXMpCiB7CkBAIC0xNDY0LDYgKzE0NzIsOCBAQAogCQlnb3RvIG91dF91bnJlZ19wYXJhbTsKIAogCWFkZF91c2FnZV9saW5rcyhtb2QpOworCWFkZF9zZWN0X2F0dHJzKG1vZCwgaW5mbyk7CisJYWRkX25vdGVzX2F0dHJzKG1vZCwgaW5mbyk7CiAKIAlrb2JqZWN0X3VldmVudCgmbW9kLT5ta29iai5rb2JqLCBLT0JKX0FERCk7CiAJcmV0dXJuIDA7CkBAIC0xNDgwLDQzICsxNDkwLDM2IEBACiAKIHN0YXRpYyB2b2lkIG1vZF9zeXNmc19maW5pKHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKKwlyZW1vdmVfbm90ZXNfYXR0cnMobW9kKTsKKwlyZW1vdmVfc2VjdF9hdHRycyhtb2QpOwogCWtvYmplY3RfcHV0KCZtb2QtPm1rb2JqLmtvYmopOwogfQogCi0jZWxzZSAvKiBDT05GSUdfU1lTRlMgKi8KKyNlbHNlIC8qICFDT05GSUdfU1lTRlMgKi8KIAotc3RhdGljIGlubGluZSBpbnQgbW9kX3N5c2ZzX2luaXQoc3RydWN0IG1vZHVsZSAqbW9kKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBtb2Rfc3lzZnNfc2V0dXAoc3RydWN0IG1vZHVsZSAqbW9kLAorc3RhdGljIGludCBtb2Rfc3lzZnNfc2V0dXAoc3RydWN0IG1vZHVsZSAqbW9kLAorCQkJICAgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbywKIAkJCSAgIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwYXJhbSwKIAkJCSAgIHVuc2lnbmVkIGludCBudW1fcGFyYW1zKQogewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBtb2R1bGVfYWRkX21vZGluZm9fYXR0cnMoc3RydWN0IG1vZHVsZSAqbW9kKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbW9kdWxlX3JlbW92ZV9tb2RpbmZvX2F0dHJzKHN0cnVjdCBtb2R1bGUgKm1vZCkKLXsKLX0KLQogc3RhdGljIHZvaWQgbW9kX3N5c2ZzX2Zpbmkoc3RydWN0IG1vZHVsZSAqbW9kKQogewogfQogCitzdGF0aWMgdm9pZCBtb2R1bGVfcmVtb3ZlX21vZGluZm9fYXR0cnMoc3RydWN0IG1vZHVsZSAqbW9kKQoreworfQorCiBzdGF0aWMgdm9pZCBkZWxfdXNhZ2VfbGlua3Moc3RydWN0IG1vZHVsZSAqbW9kKQogewogfQogCiAjZW5kaWYgLyogQ09ORklHX1NZU0ZTICovCiAKLXN0YXRpYyB2b2lkIG1vZF9rb2JqZWN0X3JlbW92ZShzdHJ1Y3QgbW9kdWxlICptb2QpCitzdGF0aWMgdm9pZCBtb2Rfc3lzZnNfdGVhcmRvd24oc3RydWN0IG1vZHVsZSAqbW9kKQogewogCWRlbF91c2FnZV9saW5rcyhtb2QpOwogCW1vZHVsZV9yZW1vdmVfbW9kaW5mb19hdHRycyhtb2QpOwpAQCAtMTU0Niw5ICsxNTQ5LDEwIEBACiAJbXV0ZXhfbG9jaygmbW9kdWxlX211dGV4KTsKIAlzdG9wX21hY2hpbmUoX191bmxpbmtfbW9kdWxlLCBtb2QsIE5VTEwpOwogCW11dGV4X3VubG9jaygmbW9kdWxlX211dGV4KTsKLQlyZW1vdmVfbm90ZXNfYXR0cnMobW9kKTsKLQlyZW1vdmVfc2VjdF9hdHRycyhtb2QpOwotCW1vZF9rb2JqZWN0X3JlbW92ZShtb2QpOworCW1vZF9zeXNmc190ZWFyZG93bihtb2QpOworCisJLyogUmVtb3ZlIGR5bmFtaWMgZGVidWcgaW5mbyAqLworCWRkZWJ1Z19yZW1vdmVfbW9kdWxlKG1vZC0+bmFtZSk7CiAKIAkvKiBBcmNoLXNwZWNpZmljIGNsZWFudXAuICovCiAJbW9kdWxlX2FyY2hfY2xlYW51cChtb2QpOwpAQCAtMTU2MywxMCArMTU2Nyw3IEBACiAJbW9kdWxlX2ZyZWUobW9kLCBtb2QtPm1vZHVsZV9pbml0KTsKIAlrZnJlZShtb2QtPmFyZ3MpOwogCXBlcmNwdV9tb2RmcmVlKG1vZCk7Ci0jaWYgZGVmaW5lZChDT05GSUdfTU9EVUxFX1VOTE9BRCkKLQlpZiAobW9kLT5yZWZwdHIpCi0JCWZyZWVfcGVyY3B1KG1vZC0+cmVmcHRyKTsKLSNlbmRpZgorCiAJLyogRnJlZSBsb2NrLWNsYXNzZXM6ICovCiAJbG9ja2RlcF9mcmVlX2tleV9yYW5nZShtb2QtPm1vZHVsZV9jb3JlLCBtb2QtPmNvcmVfc2l6ZSk7CiAKQEAgLTE2MzIsMjUgKzE2MzMsMjMgQEAKIH0KIAogLyogQ2hhbmdlIGFsbCBzeW1ib2xzIHNvIHRoYXQgc3RfdmFsdWUgZW5jb2RlcyB0aGUgcG9pbnRlciBkaXJlY3RseS4gKi8KLXN0YXRpYyBpbnQgc2ltcGxpZnlfc3ltYm9scyhFbGZfU2hkciAqc2VjaGRycywKLQkJCSAgICB1bnNpZ25lZCBpbnQgc3ltaW5kZXgsCi0JCQkgICAgY29uc3QgY2hhciAqc3RydGFiLAotCQkJICAgIHVuc2lnbmVkIGludCB2ZXJzaW5kZXgsCi0JCQkgICAgdW5zaWduZWQgaW50IHBjcHVpbmRleCwKLQkJCSAgICBzdHJ1Y3QgbW9kdWxlICptb2QpCitzdGF0aWMgaW50IHNpbXBsaWZ5X3N5bWJvbHMoc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQogewotCUVsZl9TeW0gKnN5bSA9ICh2b2lkICopc2VjaGRyc1tzeW1pbmRleF0uc2hfYWRkcjsKKwlFbGZfU2hkciAqc3ltc2VjID0gJmluZm8tPnNlY2hkcnNbaW5mby0+aW5kZXguc3ltXTsKKwlFbGZfU3ltICpzeW0gPSAodm9pZCAqKXN5bXNlYy0+c2hfYWRkcjsKIAl1bnNpZ25lZCBsb25nIHNlY2Jhc2U7Ci0JdW5zaWduZWQgaW50IGksIG4gPSBzZWNoZHJzW3N5bWluZGV4XS5zaF9zaXplIC8gc2l6ZW9mKEVsZl9TeW0pOworCXVuc2lnbmVkIGludCBpOwogCWludCByZXQgPSAwOwogCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICprc3ltOwogCi0JZm9yIChpID0gMTsgaSA8IG47IGkrKykgeworCWZvciAoaSA9IDE7IGkgPCBzeW1zZWMtPnNoX3NpemUgLyBzaXplb2YoRWxmX1N5bSk7IGkrKykgeworCQljb25zdCBjaGFyICpuYW1lID0gaW5mby0+c3RydGFiICsgc3ltW2ldLnN0X25hbWU7CisKIAkJc3dpdGNoIChzeW1baV0uc3Rfc2huZHgpIHsKIAkJY2FzZSBTSE5fQ09NTU9OOgogCQkJLyogV2UgY29tcGlsZWQgd2l0aCAtZm5vLWNvbW1vbi4gIFRoZXNlIGFyZSBub3QKIAkJCSAgIHN1cHBvc2VkIHRvIGhhcHBlbi4gICovCi0JCQlERUJVR1AoIkNvbW1vbiBzeW1ib2w6ICVzXG4iLCBzdHJ0YWIgKyBzeW1baV0uc3RfbmFtZSk7CisJCQlERUJVR1AoIkNvbW1vbiBzeW1ib2w6ICVzXG4iLCBuYW1lKTsKIAkJCXByaW50aygiJXM6IHBsZWFzZSBjb21waWxlIHdpdGggLWZuby1jb21tb25cbiIsCiAJCQkgICAgICAgbW9kLT5uYW1lKTsKIAkJCXJldCA9IC1FTk9FWEVDOwpAQCAtMTY2Myw5ICsxNjYyLDcgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgU0hOX1VOREVGOgotCQkJa3N5bSA9IHJlc29sdmVfc3ltYm9sX3dhaXQoc2VjaGRycywgdmVyc2luZGV4LAotCQkJCQkJICAgc3RydGFiICsgc3ltW2ldLnN0X25hbWUsCi0JCQkJCQkgICBtb2QpOworCQkJa3N5bSA9IHJlc29sdmVfc3ltYm9sX3dhaXQobW9kLCBpbmZvLCBuYW1lKTsKIAkJCS8qIE9rIGlmIHJlc29sdmVkLiAgKi8KIAkJCWlmIChrc3ltICYmICFJU19FUlIoa3N5bSkpIHsKIAkJCQlzeW1baV0uc3RfdmFsdWUgPSBrc3ltLT52YWx1ZTsKQEAgLTE2NzcsMTcgKzE2NzQsMTYgQEAKIAkJCQlicmVhazsKIAogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVua25vd24gc3ltYm9sICVzIChlcnIgJWxpKVxuIiwKLQkJCSAgICAgICBtb2QtPm5hbWUsIHN0cnRhYiArIHN5bVtpXS5zdF9uYW1lLAotCQkJICAgICAgIFBUUl9FUlIoa3N5bSkpOworCQkJICAgICAgIG1vZC0+bmFtZSwgbmFtZSwgUFRSX0VSUihrc3ltKSk7CiAJCQlyZXQgPSBQVFJfRVJSKGtzeW0pID86IC1FTk9FTlQ7CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgogCQkJLyogRGl2ZXJ0IHRvIHBlcmNwdSBhbGxvY2F0aW9uIGlmIGEgcGVyY3B1IHZhci4gKi8KLQkJCWlmIChzeW1baV0uc3Rfc2huZHggPT0gcGNwdWluZGV4KQorCQkJaWYgKHN5bVtpXS5zdF9zaG5keCA9PSBpbmZvLT5pbmRleC5wY3B1KQogCQkJCXNlY2Jhc2UgPSAodW5zaWduZWQgbG9uZyltb2RfcGVyY3B1KG1vZCk7CiAJCQllbHNlCi0JCQkJc2VjYmFzZSA9IHNlY2hkcnNbc3ltW2ldLnN0X3NobmR4XS5zaF9hZGRyOworCQkJCXNlY2Jhc2UgPSBpbmZvLT5zZWNoZHJzW3N5bVtpXS5zdF9zaG5keF0uc2hfYWRkcjsKIAkJCXN5bVtpXS5zdF92YWx1ZSArPSBzZWNiYXNlOwogCQkJYnJlYWs7CiAJCX0KQEAgLTE2OTYsNiArMTY5MiwzNSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgYXBwbHlfcmVsb2NhdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQoreworCXVuc2lnbmVkIGludCBpOworCWludCBlcnIgPSAwOworCisJLyogTm93IGRvIHJlbG9jYXRpb25zLiAqLworCWZvciAoaSA9IDE7IGkgPCBpbmZvLT5oZHItPmVfc2hudW07IGkrKykgeworCQl1bnNpZ25lZCBpbnQgaW5mb3NlYyA9IGluZm8tPnNlY2hkcnNbaV0uc2hfaW5mbzsKKworCQkvKiBOb3QgYSB2YWxpZCByZWxvY2F0aW9uIHNlY3Rpb24/ICovCisJCWlmIChpbmZvc2VjID49IGluZm8tPmhkci0+ZV9zaG51bSkKKwkJCWNvbnRpbnVlOworCisJCS8qIERvbid0IGJvdGhlciB3aXRoIG5vbi1hbGxvY2F0ZWQgc2VjdGlvbnMgKi8KKwkJaWYgKCEoaW5mby0+c2VjaGRyc1tpbmZvc2VjXS5zaF9mbGFncyAmIFNIRl9BTExPQykpCisJCQljb250aW51ZTsKKworCQlpZiAoaW5mby0+c2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9SRUwpCisJCQllcnIgPSBhcHBseV9yZWxvY2F0ZShpbmZvLT5zZWNoZHJzLCBpbmZvLT5zdHJ0YWIsCisJCQkJCSAgICAgaW5mby0+aW5kZXguc3ltLCBpLCBtb2QpOworCQllbHNlIGlmIChpbmZvLT5zZWNoZHJzW2ldLnNoX3R5cGUgPT0gU0hUX1JFTEEpCisJCQllcnIgPSBhcHBseV9yZWxvY2F0ZV9hZGQoaW5mby0+c2VjaGRycywgaW5mby0+c3RydGFiLAorCQkJCQkJIGluZm8tPmluZGV4LnN5bSwgaSwgbW9kKTsKKwkJaWYgKGVyciA8IDApCisJCQlicmVhazsKKwl9CisJcmV0dXJuIGVycjsKK30KKwogLyogQWRkaXRpb25hbCBieXRlcyBuZWVkZWQgYnkgYXJjaCBpbiBmcm9udCBvZiBpbmRpdmlkdWFsIHNlY3Rpb25zICovCiB1bnNpZ25lZCBpbnQgX193ZWFrIGFyY2hfbW9kX3NlY3Rpb25fcHJlcGVuZChzdHJ1Y3QgbW9kdWxlICptb2QsCiAJCQkJCSAgICAgdW5zaWduZWQgaW50IHNlY3Rpb24pCkBAIC0xNzIwLDEwICsxNzQ1LDcgQEAKICAgIG1pZ2h0IC0tIGNvZGUsIHJlYWQtb25seSBkYXRhLCByZWFkLXdyaXRlIGRhdGEsIHNtYWxsIGRhdGEuICBUYWxseQogICAgc2l6ZXMsIGFuZCBwbGFjZSB0aGUgb2Zmc2V0cyBpbnRvIHNoX2VudHNpemUgZmllbGRzOiBoaWdoIGJpdCBtZWFucyBpdAogICAgYmVsb25ncyBpbiBpbml0LiAqLwotc3RhdGljIHZvaWQgbGF5b3V0X3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwKLQkJCSAgICBjb25zdCBFbGZfRWhkciAqaGRyLAotCQkJICAgIEVsZl9TaGRyICpzZWNoZHJzLAotCQkJICAgIGNvbnN0IGNoYXIgKnNlY3N0cmluZ3MpCitzdGF0aWMgdm9pZCBsYXlvdXRfc2VjdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQogewogCXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvbnN0IG1hc2tzW11bMl0gPSB7CiAJCS8qIE5PVEU6IGFsbCBleGVjdXRhYmxlIGNvZGUgbXVzdCBiZSB0aGUgZmlyc3Qgc2VjdGlvbgpAQCAtMTczNiwyMSArMTc1OCwyMiBAQAogCX07CiAJdW5zaWduZWQgaW50IG0sIGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaGRyLT5lX3NobnVtOyBpKyspCi0JCXNlY2hkcnNbaV0uc2hfZW50c2l6ZSA9IH4wVUw7CisJZm9yIChpID0gMDsgaSA8IGluZm8tPmhkci0+ZV9zaG51bTsgaSsrKQorCQlpbmZvLT5zZWNoZHJzW2ldLnNoX2VudHNpemUgPSB+MFVMOwogCiAJREVCVUdQKCJDb3JlIHNlY3Rpb24gYWxsb2NhdGlvbiBvcmRlcjpcbiIpOwogCWZvciAobSA9IDA7IG0gPCBBUlJBWV9TSVpFKG1hc2tzKTsgKyttKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBoZHItPmVfc2hudW07ICsraSkgewotCQkJRWxmX1NoZHIgKnMgPSAmc2VjaGRyc1tpXTsKKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPmhkci0+ZV9zaG51bTsgKytpKSB7CisJCQlFbGZfU2hkciAqcyA9ICZpbmZvLT5zZWNoZHJzW2ldOworCQkJY29uc3QgY2hhciAqc25hbWUgPSBpbmZvLT5zZWNzdHJpbmdzICsgcy0+c2hfbmFtZTsKIAogCQkJaWYgKChzLT5zaF9mbGFncyAmIG1hc2tzW21dWzBdKSAhPSBtYXNrc1ttXVswXQogCQkJICAgIHx8IChzLT5zaF9mbGFncyAmIG1hc2tzW21dWzFdKQogCQkJICAgIHx8IHMtPnNoX2VudHNpemUgIT0gfjBVTAotCQkJICAgIHx8IHN0cnN0YXJ0cyhzZWNzdHJpbmdzICsgcy0+c2hfbmFtZSwgIi5pbml0IikpCisJCQkgICAgfHwgc3Ryc3RhcnRzKHNuYW1lLCAiLmluaXQiKSkKIAkJCQljb250aW51ZTsKIAkJCXMtPnNoX2VudHNpemUgPSBnZXRfb2Zmc2V0KG1vZCwgJm1vZC0+Y29yZV9zaXplLCBzLCBpKTsKLQkJCURFQlVHUCgiXHQlc1xuIiwgc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUpOworCQkJREVCVUdQKCJcdCVzXG4iLCBuYW1lKTsKIAkJfQogCQlpZiAobSA9PSAwKQogCQkJbW9kLT5jb3JlX3RleHRfc2l6ZSA9IG1vZC0+Y29yZV9zaXplOwpAQCAtMTc1OCwxNyArMTc4MSwxOCBAQAogCiAJREVCVUdQKCJJbml0IHNlY3Rpb24gYWxsb2NhdGlvbiBvcmRlcjpcbiIpOwogCWZvciAobSA9IDA7IG0gPCBBUlJBWV9TSVpFKG1hc2tzKTsgKyttKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBoZHItPmVfc2hudW07ICsraSkgewotCQkJRWxmX1NoZHIgKnMgPSAmc2VjaGRyc1tpXTsKKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPmhkci0+ZV9zaG51bTsgKytpKSB7CisJCQlFbGZfU2hkciAqcyA9ICZpbmZvLT5zZWNoZHJzW2ldOworCQkJY29uc3QgY2hhciAqc25hbWUgPSBpbmZvLT5zZWNzdHJpbmdzICsgcy0+c2hfbmFtZTsKIAogCQkJaWYgKChzLT5zaF9mbGFncyAmIG1hc2tzW21dWzBdKSAhPSBtYXNrc1ttXVswXQogCQkJICAgIHx8IChzLT5zaF9mbGFncyAmIG1hc2tzW21dWzFdKQogCQkJICAgIHx8IHMtPnNoX2VudHNpemUgIT0gfjBVTAotCQkJICAgIHx8ICFzdHJzdGFydHMoc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUsICIuaW5pdCIpKQorCQkJICAgIHx8ICFzdHJzdGFydHMoc25hbWUsICIuaW5pdCIpKQogCQkJCWNvbnRpbnVlOwogCQkJcy0+c2hfZW50c2l6ZSA9IChnZXRfb2Zmc2V0KG1vZCwgJm1vZC0+aW5pdF9zaXplLCBzLCBpKQogCQkJCQkgfCBJTklUX09GRlNFVF9NQVNLKTsKLQkJCURFQlVHUCgiXHQlc1xuIiwgc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUpOworCQkJREVCVUdQKCJcdCVzXG4iLCBzbmFtZSk7CiAJCX0KIAkJaWYgKG0gPT0gMCkKIAkJCW1vZC0+aW5pdF90ZXh0X3NpemUgPSBtb2QtPmluaXRfc2l6ZTsKQEAgLTE4MDcsMzMgKzE4MzEsMjggQEAKIAlyZXR1cm4gc3RyaW5nOwogfQogCi1zdGF0aWMgY2hhciAqZ2V0X21vZGluZm8oRWxmX1NoZHIgKnNlY2hkcnMsCi0JCQkgdW5zaWduZWQgaW50IGluZm8sCi0JCQkgY29uc3QgY2hhciAqdGFnKQorc3RhdGljIGNoYXIgKmdldF9tb2RpbmZvKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKnRhZykKIHsKIAljaGFyICpwOwogCXVuc2lnbmVkIGludCB0YWdsZW4gPSBzdHJsZW4odGFnKTsKLQl1bnNpZ25lZCBsb25nIHNpemUgPSBzZWNoZHJzW2luZm9dLnNoX3NpemU7CisJRWxmX1NoZHIgKmluZm9zZWMgPSAmaW5mby0+c2VjaGRyc1tpbmZvLT5pbmRleC5pbmZvXTsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSBpbmZvc2VjLT5zaF9zaXplOwogCi0JZm9yIChwID0gKGNoYXIgKilzZWNoZHJzW2luZm9dLnNoX2FkZHI7IHA7IHAgPSBuZXh0X3N0cmluZyhwLCAmc2l6ZSkpIHsKKwlmb3IgKHAgPSAoY2hhciAqKWluZm9zZWMtPnNoX2FkZHI7IHA7IHAgPSBuZXh0X3N0cmluZyhwLCAmc2l6ZSkpIHsKIAkJaWYgKHN0cm5jbXAocCwgdGFnLCB0YWdsZW4pID09IDAgJiYgcFt0YWdsZW5dID09ICc9JykKIAkJCXJldHVybiBwICsgdGFnbGVuICsgMTsKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIHNldHVwX21vZGluZm8oc3RydWN0IG1vZHVsZSAqbW9kLCBFbGZfU2hkciAqc2VjaGRycywKLQkJCSAgdW5zaWduZWQgaW50IGluZm9pbmRleCkKK3N0YXRpYyB2b2lkIHNldHVwX21vZGluZm8oc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQogewogCXN0cnVjdCBtb2R1bGVfYXR0cmlidXRlICphdHRyOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgKGF0dHIgPSBtb2RpbmZvX2F0dHJzW2ldKTsgaSsrKSB7CiAJCWlmIChhdHRyLT5zZXR1cCkKLQkJCWF0dHItPnNldHVwKG1vZCwKLQkJCQkgICAgZ2V0X21vZGluZm8oc2VjaGRycywKLQkJCQkJCWluZm9pbmRleCwKLQkJCQkJCWF0dHItPmF0dHIubmFtZSkpOworCQkJYXR0ci0+c2V0dXAobW9kLCBnZXRfbW9kaW5mbyhpbmZvLCBhdHRyLT5hdHRyLm5hbWUpKTsKIAl9CiB9CiAKQEAgLTE4NzQsMTEgKzE4OTMsMTAgQEAKIH0KIAogLyogQXMgcGVyIG5tICovCi1zdGF0aWMgY2hhciBlbGZfdHlwZShjb25zdCBFbGZfU3ltICpzeW0sCi0JCSAgICAgRWxmX1NoZHIgKnNlY2hkcnMsCi0JCSAgICAgY29uc3QgY2hhciAqc2Vjc3RyaW5ncywKLQkJICAgICBzdHJ1Y3QgbW9kdWxlICptb2QpCitzdGF0aWMgY2hhciBlbGZfdHlwZShjb25zdCBFbGZfU3ltICpzeW0sIGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8pCiB7CisJY29uc3QgRWxmX1NoZHIgKnNlY2hkcnMgPSBpbmZvLT5zZWNoZHJzOworCiAJaWYgKEVMRl9TVF9CSU5EKHN5bS0+c3RfaW5mbykgPT0gU1RCX1dFQUspIHsKIAkJaWYgKEVMRl9TVF9UWVBFKHN5bS0+c3RfaW5mbykgPT0gU1RUX09CSkVDVCkKIAkJCXJldHVybiAndic7CkBAIC0xOTA4LDggKzE5MjYsMTAgQEAKIAkJZWxzZQogCQkJcmV0dXJuICdiJzsKIAl9Ci0JaWYgKHN0cnN0YXJ0cyhzZWNzdHJpbmdzICsgc2VjaGRyc1tzeW0tPnN0X3NobmR4XS5zaF9uYW1lLCAiLmRlYnVnIikpCisJaWYgKHN0cnN0YXJ0cyhpbmZvLT5zZWNzdHJpbmdzICsgc2VjaGRyc1tzeW0tPnN0X3NobmR4XS5zaF9uYW1lLAorCQkgICAgICAiLmRlYnVnIikpIHsKIAkJcmV0dXJuICduJzsKKwl9CiAJcmV0dXJuICc/JzsKIH0KIApAQCAtMTkzNCwxMjcgKzE5NTQsOTYgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgbGF5b3V0X3N5bXRhYihzdHJ1Y3QgbW9kdWxlICptb2QsCi0JCQkJICAgRWxmX1NoZHIgKnNlY2hkcnMsCi0JCQkJICAgdW5zaWduZWQgaW50IHN5bWluZGV4LAotCQkJCSAgIHVuc2lnbmVkIGludCBzdHJpbmRleCwKLQkJCQkgICBjb25zdCBFbGZfRWhkciAqaGRyLAotCQkJCSAgIGNvbnN0IGNoYXIgKnNlY3N0cmluZ3MsCi0JCQkJICAgdW5zaWduZWQgbG9uZyAqcHN0cm9mZnMsCi0JCQkJICAgdW5zaWduZWQgbG9uZyAqc3RybWFwKQorc3RhdGljIHZvaWQgbGF5b3V0X3N5bXRhYihzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pCiB7Ci0JdW5zaWduZWQgbG9uZyBzeW1vZmZzOwotCUVsZl9TaGRyICpzeW1zZWN0ID0gc2VjaGRycyArIHN5bWluZGV4OwotCUVsZl9TaGRyICpzdHJzZWN0ID0gc2VjaGRycyArIHN0cmluZGV4OworCUVsZl9TaGRyICpzeW1zZWN0ID0gaW5mby0+c2VjaGRycyArIGluZm8tPmluZGV4LnN5bTsKKwlFbGZfU2hkciAqc3Ryc2VjdCA9IGluZm8tPnNlY2hkcnMgKyBpbmZvLT5pbmRleC5zdHI7CiAJY29uc3QgRWxmX1N5bSAqc3JjOwotCWNvbnN0IGNoYXIgKnN0cnRhYjsKIAl1bnNpZ25lZCBpbnQgaSwgbnNyYywgbmRzdDsKIAogCS8qIFB1dCBzeW1ib2wgc2VjdGlvbiBhdCBlbmQgb2YgaW5pdCBwYXJ0IG9mIG1vZHVsZS4gKi8KIAlzeW1zZWN0LT5zaF9mbGFncyB8PSBTSEZfQUxMT0M7CiAJc3ltc2VjdC0+c2hfZW50c2l6ZSA9IGdldF9vZmZzZXQobW9kLCAmbW9kLT5pbml0X3NpemUsIHN5bXNlY3QsCi0JCQkJCSBzeW1pbmRleCkgfCBJTklUX09GRlNFVF9NQVNLOwotCURFQlVHUCgiXHQlc1xuIiwgc2Vjc3RyaW5ncyArIHN5bXNlY3QtPnNoX25hbWUpOworCQkJCQkgaW5mby0+aW5kZXguc3ltKSB8IElOSVRfT0ZGU0VUX01BU0s7CisJREVCVUdQKCJcdCVzXG4iLCBpbmZvLT5zZWNzdHJpbmdzICsgc3ltc2VjdC0+c2hfbmFtZSk7CiAKLQlzcmMgPSAodm9pZCAqKWhkciArIHN5bXNlY3QtPnNoX29mZnNldDsKKwlzcmMgPSAodm9pZCAqKWluZm8tPmhkciArIHN5bXNlY3QtPnNoX29mZnNldDsKIAluc3JjID0gc3ltc2VjdC0+c2hfc2l6ZSAvIHNpemVvZigqc3JjKTsKLQlzdHJ0YWIgPSAodm9pZCAqKWhkciArIHN0cnNlY3QtPnNoX29mZnNldDsKIAlmb3IgKG5kc3QgPSBpID0gMTsgaSA8IG5zcmM7ICsraSwgKytzcmMpCi0JCWlmIChpc19jb3JlX3N5bWJvbChzcmMsIHNlY2hkcnMsIGhkci0+ZV9zaG51bSkpIHsKKwkJaWYgKGlzX2NvcmVfc3ltYm9sKHNyYywgaW5mby0+c2VjaGRycywgaW5mby0+aGRyLT5lX3NobnVtKSkgewogCQkJdW5zaWduZWQgaW50IGogPSBzcmMtPnN0X25hbWU7CiAKLQkJCXdoaWxlKCFfX3Rlc3RfYW5kX3NldF9iaXQoaiwgc3RybWFwKSAmJiBzdHJ0YWJbal0pCisJCQl3aGlsZSAoIV9fdGVzdF9hbmRfc2V0X2JpdChqLCBpbmZvLT5zdHJtYXApCisJCQkgICAgICAgJiYgaW5mby0+c3RydGFiW2pdKQogCQkJCSsrajsKIAkJCSsrbmRzdDsKIAkJfQogCiAJLyogQXBwZW5kIHJvb20gZm9yIGNvcmUgc3ltYm9scyBhdCBlbmQgb2YgY29yZSBwYXJ0LiAqLwotCXN5bW9mZnMgPSBBTElHTihtb2QtPmNvcmVfc2l6ZSwgc3ltc2VjdC0+c2hfYWRkcmFsaWduID86IDEpOwotCW1vZC0+Y29yZV9zaXplID0gc3ltb2ZmcyArIG5kc3QgKiBzaXplb2YoRWxmX1N5bSk7CisJaW5mby0+c3ltb2ZmcyA9IEFMSUdOKG1vZC0+Y29yZV9zaXplLCBzeW1zZWN0LT5zaF9hZGRyYWxpZ24gPzogMSk7CisJbW9kLT5jb3JlX3NpemUgPSBpbmZvLT5zeW1vZmZzICsgbmRzdCAqIHNpemVvZihFbGZfU3ltKTsKIAogCS8qIFB1dCBzdHJpbmcgdGFibGUgc2VjdGlvbiBhdCBlbmQgb2YgaW5pdCBwYXJ0IG9mIG1vZHVsZS4gKi8KIAlzdHJzZWN0LT5zaF9mbGFncyB8PSBTSEZfQUxMT0M7CiAJc3Ryc2VjdC0+c2hfZW50c2l6ZSA9IGdldF9vZmZzZXQobW9kLCAmbW9kLT5pbml0X3NpemUsIHN0cnNlY3QsCi0JCQkJCSBzdHJpbmRleCkgfCBJTklUX09GRlNFVF9NQVNLOwotCURFQlVHUCgiXHQlc1xuIiwgc2Vjc3RyaW5ncyArIHN0cnNlY3QtPnNoX25hbWUpOworCQkJCQkgaW5mby0+aW5kZXguc3RyKSB8IElOSVRfT0ZGU0VUX01BU0s7CisJREVCVUdQKCJcdCVzXG4iLCBpbmZvLT5zZWNzdHJpbmdzICsgc3Ryc2VjdC0+c2hfbmFtZSk7CiAKIAkvKiBBcHBlbmQgcm9vbSBmb3IgY29yZSBzeW1ib2xzJyBzdHJpbmdzIGF0IGVuZCBvZiBjb3JlIHBhcnQuICovCi0JKnBzdHJvZmZzID0gbW9kLT5jb3JlX3NpemU7Ci0JX19zZXRfYml0KDAsIHN0cm1hcCk7Ci0JbW9kLT5jb3JlX3NpemUgKz0gYml0bWFwX3dlaWdodChzdHJtYXAsIHN0cnNlY3QtPnNoX3NpemUpOwotCi0JcmV0dXJuIHN5bW9mZnM7CisJaW5mby0+c3Ryb2ZmcyA9IG1vZC0+Y29yZV9zaXplOworCV9fc2V0X2JpdCgwLCBpbmZvLT5zdHJtYXApOworCW1vZC0+Y29yZV9zaXplICs9IGJpdG1hcF93ZWlnaHQoaW5mby0+c3RybWFwLCBzdHJzZWN0LT5zaF9zaXplKTsKIH0KIAotc3RhdGljIHZvaWQgYWRkX2thbGxzeW1zKHN0cnVjdCBtb2R1bGUgKm1vZCwKLQkJCSBFbGZfU2hkciAqc2VjaGRycywKLQkJCSB1bnNpZ25lZCBpbnQgc2hudW0sCi0JCQkgdW5zaWduZWQgaW50IHN5bWluZGV4LAotCQkJIHVuc2lnbmVkIGludCBzdHJpbmRleCwKLQkJCSB1bnNpZ25lZCBsb25nIHN5bW9mZnMsCi0JCQkgdW5zaWduZWQgbG9uZyBzdHJvZmZzLAotCQkJIGNvbnN0IGNoYXIgKnNlY3N0cmluZ3MsCi0JCQkgdW5zaWduZWQgbG9uZyAqc3RybWFwKQorc3RhdGljIHZvaWQgYWRkX2thbGxzeW1zKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbykKIHsKIAl1bnNpZ25lZCBpbnQgaSwgbmRzdDsKIAljb25zdCBFbGZfU3ltICpzcmM7CiAJRWxmX1N5bSAqZHN0OwogCWNoYXIgKnM7CisJRWxmX1NoZHIgKnN5bXNlYyA9ICZpbmZvLT5zZWNoZHJzW2luZm8tPmluZGV4LnN5bV07CiAKLQltb2QtPnN5bXRhYiA9ICh2b2lkICopc2VjaGRyc1tzeW1pbmRleF0uc2hfYWRkcjsKLQltb2QtPm51bV9zeW10YWIgPSBzZWNoZHJzW3N5bWluZGV4XS5zaF9zaXplIC8gc2l6ZW9mKEVsZl9TeW0pOwotCW1vZC0+c3RydGFiID0gKHZvaWQgKilzZWNoZHJzW3N0cmluZGV4XS5zaF9hZGRyOworCW1vZC0+c3ltdGFiID0gKHZvaWQgKilzeW1zZWMtPnNoX2FkZHI7CisJbW9kLT5udW1fc3ltdGFiID0gc3ltc2VjLT5zaF9zaXplIC8gc2l6ZW9mKEVsZl9TeW0pOworCS8qIE1ha2Ugc3VyZSB3ZSBnZXQgcGVybWFuZW50IHN0cnRhYjogZG9uJ3QgdXNlIGluZm8tPnN0cnRhYi4gKi8KKwltb2QtPnN0cnRhYiA9ICh2b2lkICopaW5mby0+c2VjaGRyc1tpbmZvLT5pbmRleC5zdHJdLnNoX2FkZHI7CiAKIAkvKiBTZXQgdHlwZXMgdXAgd2hpbGUgd2Ugc3RpbGwgaGF2ZSBhY2Nlc3MgdG8gc2VjdGlvbnMuICovCiAJZm9yIChpID0gMDsgaSA8IG1vZC0+bnVtX3N5bXRhYjsgaSsrKQotCQltb2QtPnN5bXRhYltpXS5zdF9pbmZvCi0JCQk9IGVsZl90eXBlKCZtb2QtPnN5bXRhYltpXSwgc2VjaGRycywgc2Vjc3RyaW5ncywgbW9kKTsKKwkJbW9kLT5zeW10YWJbaV0uc3RfaW5mbyA9IGVsZl90eXBlKCZtb2QtPnN5bXRhYltpXSwgaW5mbyk7CiAKLQltb2QtPmNvcmVfc3ltdGFiID0gZHN0ID0gbW9kLT5tb2R1bGVfY29yZSArIHN5bW9mZnM7CisJbW9kLT5jb3JlX3N5bXRhYiA9IGRzdCA9IG1vZC0+bW9kdWxlX2NvcmUgKyBpbmZvLT5zeW1vZmZzOwogCXNyYyA9IG1vZC0+c3ltdGFiOwogCSpkc3QgPSAqc3JjOwogCWZvciAobmRzdCA9IGkgPSAxOyBpIDwgbW9kLT5udW1fc3ltdGFiOyArK2ksICsrc3JjKSB7Ci0JCWlmICghaXNfY29yZV9zeW1ib2woc3JjLCBzZWNoZHJzLCBzaG51bSkpCisJCWlmICghaXNfY29yZV9zeW1ib2woc3JjLCBpbmZvLT5zZWNoZHJzLCBpbmZvLT5oZHItPmVfc2hudW0pKQogCQkJY29udGludWU7CiAJCWRzdFtuZHN0XSA9ICpzcmM7Ci0JCWRzdFtuZHN0XS5zdF9uYW1lID0gYml0bWFwX3dlaWdodChzdHJtYXAsIGRzdFtuZHN0XS5zdF9uYW1lKTsKKwkJZHN0W25kc3RdLnN0X25hbWUgPSBiaXRtYXBfd2VpZ2h0KGluZm8tPnN0cm1hcCwKKwkJCQkJCSAgZHN0W25kc3RdLnN0X25hbWUpOwogCQkrK25kc3Q7CiAJfQogCW1vZC0+Y29yZV9udW1fc3ltcyA9IG5kc3Q7CiAKLQltb2QtPmNvcmVfc3RydGFiID0gcyA9IG1vZC0+bW9kdWxlX2NvcmUgKyBzdHJvZmZzOwotCWZvciAoKnMgPSAwLCBpID0gMTsgaSA8IHNlY2hkcnNbc3RyaW5kZXhdLnNoX3NpemU7ICsraSkKLQkJaWYgKHRlc3RfYml0KGksIHN0cm1hcCkpCisJbW9kLT5jb3JlX3N0cnRhYiA9IHMgPSBtb2QtPm1vZHVsZV9jb3JlICsgaW5mby0+c3Ryb2ZmczsKKwlmb3IgKCpzID0gMCwgaSA9IDE7IGkgPCBpbmZvLT5zZWNoZHJzW2luZm8tPmluZGV4LnN0cl0uc2hfc2l6ZTsgKytpKQorCQlpZiAodGVzdF9iaXQoaSwgaW5mby0+c3RybWFwKSkKIAkJCSorK3MgPSBtb2QtPnN0cnRhYltpXTsKIH0KICNlbHNlCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbGF5b3V0X3N5bXRhYihzdHJ1Y3QgbW9kdWxlICptb2QsCi0JCQkJCSAgRWxmX1NoZHIgKnNlY2hkcnMsCi0JCQkJCSAgdW5zaWduZWQgaW50IHN5bWluZGV4LAotCQkJCQkgIHVuc2lnbmVkIGludCBzdHJpbmRleCwKLQkJCQkJICBjb25zdCBFbGZfRWhkciAqaGRyLAotCQkJCQkgIGNvbnN0IGNoYXIgKnNlY3N0cmluZ3MsCi0JCQkJCSAgdW5zaWduZWQgbG9uZyAqcHN0cm9mZnMsCi0JCQkJCSAgdW5zaWduZWQgbG9uZyAqc3RybWFwKQorc3RhdGljIGlubGluZSB2b2lkIGxheW91dF9zeW10YWIoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQogewotCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkX2thbGxzeW1zKHN0cnVjdCBtb2R1bGUgKm1vZCwKLQkJCQlFbGZfU2hkciAqc2VjaGRycywKLQkJCQl1bnNpZ25lZCBpbnQgc2hudW0sCi0JCQkJdW5zaWduZWQgaW50IHN5bWluZGV4LAotCQkJCXVuc2lnbmVkIGludCBzdHJpbmRleCwKLQkJCQl1bnNpZ25lZCBsb25nIHN5bW9mZnMsCi0JCQkJdW5zaWduZWQgbG9uZyBzdHJvZmZzLAotCQkJCWNvbnN0IGNoYXIgKnNlY3N0cmluZ3MsCi0JCQkJY29uc3QgdW5zaWduZWQgbG9uZyAqc3RybWFwKQorc3RhdGljIHZvaWQgYWRkX2thbGxzeW1zKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbykKIHsKIH0KICNlbmRpZiAvKiBDT05GSUdfS0FMTFNZTVMgKi8KIAogc3RhdGljIHZvaWQgZHluYW1pY19kZWJ1Z19zZXR1cChzdHJ1Y3QgX2RkZWJ1ZyAqZGVidWcsIHVuc2lnbmVkIGludCBudW0pCiB7CisJaWYgKCFkZWJ1ZykKKwkJcmV0dXJuOwogI2lmZGVmIENPTkZJR19EWU5BTUlDX0RFQlVHCiAJaWYgKGRkZWJ1Z19hZGRfbW9kdWxlKGRlYnVnLCBudW0sIGRlYnVnLT5tb2RuYW1lKSkKIAkJcHJpbnRrKEtFUk5fRVJSICJkeW5hbWljIGRlYnVnIGVycm9yIGFkZGluZyBtb2R1bGU6ICVzXG4iLApAQCAtMjA4NSw2NSArMjA3NCw0NyBAQAogfQogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0tNRU1MRUFLCi1zdGF0aWMgdm9pZCBrbWVtbGVha19sb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIEVsZl9FaGRyICpoZHIsCi0JCQkJIEVsZl9TaGRyICpzZWNoZHJzLCBjaGFyICpzZWNzdHJpbmdzKQorc3RhdGljIHZvaWQga21lbWxlYWtfbG9hZF9tb2R1bGUoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kLAorCQkJCSBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQogewogCXVuc2lnbmVkIGludCBpOwogCiAJLyogb25seSBzY2FuIHRoZSBzZWN0aW9ucyBjb250YWluaW5nIGRhdGEgKi8KIAlrbWVtbGVha19zY2FuX2FyZWEobW9kLCBzaXplb2Yoc3RydWN0IG1vZHVsZSksIEdGUF9LRVJORUwpOwogCi0JZm9yIChpID0gMTsgaSA8IGhkci0+ZV9zaG51bTsgaSsrKSB7Ci0JCWlmICghKHNlY2hkcnNbaV0uc2hfZmxhZ3MgJiBTSEZfQUxMT0MpKQorCWZvciAoaSA9IDE7IGkgPCBpbmZvLT5oZHItPmVfc2hudW07IGkrKykgeworCQljb25zdCBjaGFyICpuYW1lID0gaW5mby0+c2Vjc3RyaW5ncyArIGluZm8tPnNlY2hkcnNbaV0uc2hfbmFtZTsKKwkJaWYgKCEoaW5mby0+c2VjaGRyc1tpXS5zaF9mbGFncyAmIFNIRl9BTExPQykpCiAJCQljb250aW51ZTsKLQkJaWYgKHN0cm5jbXAoc2Vjc3RyaW5ncyArIHNlY2hkcnNbaV0uc2hfbmFtZSwgIi5kYXRhIiwgNSkgIT0gMAotCQkgICAgJiYgc3RybmNtcChzZWNzdHJpbmdzICsgc2VjaGRyc1tpXS5zaF9uYW1lLCAiLmJzcyIsIDQpICE9IDApCisJCWlmICghc3Ryc3RhcnRzKG5hbWUsICIuZGF0YSIpICYmICFzdHJzdGFydHMobmFtZSwgIi5ic3MiKSkKIAkJCWNvbnRpbnVlOwogCi0JCWttZW1sZWFrX3NjYW5fYXJlYSgodm9pZCAqKXNlY2hkcnNbaV0uc2hfYWRkciwKLQkJCQkgICBzZWNoZHJzW2ldLnNoX3NpemUsIEdGUF9LRVJORUwpOworCQlrbWVtbGVha19zY2FuX2FyZWEoKHZvaWQgKilpbmZvLT5zZWNoZHJzW2ldLnNoX2FkZHIsCisJCQkJICAgaW5mby0+c2VjaGRyc1tpXS5zaF9zaXplLCBHRlBfS0VSTkVMKTsKIAl9CiB9CiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGttZW1sZWFrX2xvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmX0VoZHIgKmhkciwKLQkJCQkJRWxmX1NoZHIgKnNlY2hkcnMsIGNoYXIgKnNlY3N0cmluZ3MpCitzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfbG9hZF9tb2R1bGUoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kLAorCQkJCQljb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQogewogfQogI2VuZGlmCiAKLS8qIEFsbG9jYXRlIGFuZCBsb2FkIHRoZSBtb2R1bGU6IG5vdGUgdGhhdCBzaXplIG9mIHNlY3Rpb24gMCBpcyBhbHdheXMKLSAgIHplcm8sIGFuZCB3ZSByZWx5IG9uIHRoaXMgZm9yIG9wdGlvbmFsIHNlY3Rpb25zLiAqLwotc3RhdGljIG5vaW5saW5lIHN0cnVjdCBtb2R1bGUgKmxvYWRfbW9kdWxlKHZvaWQgX191c2VyICp1bW9kLAotCQkJCSAgdW5zaWduZWQgbG9uZyBsZW4sCi0JCQkJICBjb25zdCBjaGFyIF9fdXNlciAqdWFyZ3MpCisvKiBTZXRzIGluZm8tPmhkciBhbmQgaW5mby0+bGVuLiAqLworc3RhdGljIGludCBjb3B5X2FuZF9jaGVjayhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLAorCQkJICBjb25zdCB2b2lkIF9fdXNlciAqdW1vZCwgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkgIGNvbnN0IGNoYXIgX191c2VyICp1YXJncykKIHsKKwlpbnQgZXJyOwogCUVsZl9FaGRyICpoZHI7Ci0JRWxmX1NoZHIgKnNlY2hkcnM7Ci0JY2hhciAqc2Vjc3RyaW5ncywgKmFyZ3MsICptb2RtYWdpYywgKnN0cnRhYiA9IE5VTEw7Ci0JY2hhciAqc3RhZ2luZzsKLQl1bnNpZ25lZCBpbnQgaTsKLQl1bnNpZ25lZCBpbnQgc3ltaW5kZXggPSAwOwotCXVuc2lnbmVkIGludCBzdHJpbmRleCA9IDA7Ci0JdW5zaWduZWQgaW50IG1vZGluZGV4LCB2ZXJzaW5kZXgsIGluZm9pbmRleCwgcGNwdWluZGV4OwotCXN0cnVjdCBtb2R1bGUgKm1vZDsKLQlsb25nIGVyciA9IDA7Ci0Jdm9pZCAqcHRyID0gTlVMTDsgLyogU3RvcHMgc3B1cmlvdXMgZ2NjIHdhcm5pbmcgKi8KLQl1bnNpZ25lZCBsb25nIHN5bW9mZnMsIHN0cm9mZnMsICpzdHJtYXA7Ci0Jdm9pZCBfX3BlcmNwdSAqcGVyY3B1OwotCXN0cnVjdCBfZGRlYnVnICpkZWJ1ZyA9IE5VTEw7Ci0JdW5zaWduZWQgaW50IG51bV9kZWJ1ZyA9IDA7CiAKLQltbV9zZWdtZW50X3Qgb2xkX2ZzOwotCi0JREVCVUdQKCJsb2FkX21vZHVsZTogdW1vZD0lcCwgbGVuPSVsdSwgdWFyZ3M9JXBcbiIsCi0JICAgICAgIHVtb2QsIGxlbiwgdWFyZ3MpOwogCWlmIChsZW4gPCBzaXplb2YoKmhkcikpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9FWEVDKTsKKwkJcmV0dXJuIC1FTk9FWEVDOwogCiAJLyogU3VjayBpbiBlbnRpcmUgZmlsZTogd2UnbGwgd2FudCBtb3N0IG9mIGl0LiAqLwogCS8qIHZtYWxsb2MgYmFyZnMgb24gInVudXN1YWwiIG51bWJlcnMuICBDaGVjayBoZXJlICovCiAJaWYgKGxlbiA+IDY0ICogMTAyNCAqIDEwMjQgfHwgKGhkciA9IHZtYWxsb2MobGVuKSkgPT0gTlVMTCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCXJldHVybiAtRU5PTUVNOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKGhkciwgdW1vZCwgbGVuKSAhPSAwKSB7CiAJCWVyciA9IC1FRkFVTFQ7CkBAIC0yMTUxLDEzNSArMjEyMiwyMjUgQEAKIAl9CiAKIAkvKiBTYW5pdHkgY2hlY2tzIGFnYWluc3QgaW5zbW9kaW5nIGJpbmFyaWVzIG9yIHdyb25nIGFyY2gsCi0gICAgICAgICAgIHdlaXJkIGVsZiB2ZXJzaW9uICovCisJICAgd2VpcmQgZWxmIHZlcnNpb24gKi8KIAlpZiAobWVtY21wKGhkci0+ZV9pZGVudCwgRUxGTUFHLCBTRUxGTUFHKSAhPSAwCiAJICAgIHx8IGhkci0+ZV90eXBlICE9IEVUX1JFTAogCSAgICB8fCAhZWxmX2NoZWNrX2FyY2goaGRyKQotCSAgICB8fCBoZHItPmVfc2hlbnRzaXplICE9IHNpemVvZigqc2VjaGRycykpIHsKKwkgICAgfHwgaGRyLT5lX3NoZW50c2l6ZSAhPSBzaXplb2YoRWxmX1NoZHIpKSB7CiAJCWVyciA9IC1FTk9FWEVDOwogCQlnb3RvIGZyZWVfaGRyOwogCX0KIAotCWlmIChsZW4gPCBoZHItPmVfc2hvZmYgKyBoZHItPmVfc2hudW0gKiBzaXplb2YoRWxmX1NoZHIpKQotCQlnb3RvIHRydW5jYXRlZDsKKwlpZiAobGVuIDwgaGRyLT5lX3Nob2ZmICsgaGRyLT5lX3NobnVtICogc2l6ZW9mKEVsZl9TaGRyKSkgeworCQllcnIgPSAtRU5PRVhFQzsKKwkJZ290byBmcmVlX2hkcjsKKwl9CiAKLQkvKiBDb252ZW5pZW5jZSB2YXJpYWJsZXMgKi8KLQlzZWNoZHJzID0gKHZvaWQgKiloZHIgKyBoZHItPmVfc2hvZmY7Ci0Jc2Vjc3RyaW5ncyA9ICh2b2lkICopaGRyICsgc2VjaGRyc1toZHItPmVfc2hzdHJuZHhdLnNoX29mZnNldDsKLQlzZWNoZHJzWzBdLnNoX2FkZHIgPSAwOworCWluZm8tPmhkciA9IGhkcjsKKwlpbmZvLT5sZW4gPSBsZW47CisJcmV0dXJuIDA7CiAKLQlmb3IgKGkgPSAxOyBpIDwgaGRyLT5lX3NobnVtOyBpKyspIHsKLQkJaWYgKHNlY2hkcnNbaV0uc2hfdHlwZSAhPSBTSFRfTk9CSVRTCi0JCSAgICAmJiBsZW4gPCBzZWNoZHJzW2ldLnNoX29mZnNldCArIHNlY2hkcnNbaV0uc2hfc2l6ZSkKLQkJCWdvdG8gdHJ1bmNhdGVkOworZnJlZV9oZHI6CisJdmZyZWUoaGRyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2NvcHkoc3RydWN0IGxvYWRfaW5mbyAqaW5mbykKK3sKKwl2ZnJlZShpbmZvLT5oZHIpOworfQorCitzdGF0aWMgaW50IHJld3JpdGVfc2VjdGlvbl9oZWFkZXJzKHN0cnVjdCBsb2FkX2luZm8gKmluZm8pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwkvKiBUaGlzIHNob3VsZCBhbHdheXMgYmUgdHJ1ZSwgYnV0IGxldCdzIGJlIHN1cmUuICovCisJaW5mby0+c2VjaGRyc1swXS5zaF9hZGRyID0gMDsKKworCWZvciAoaSA9IDE7IGkgPCBpbmZvLT5oZHItPmVfc2hudW07IGkrKykgeworCQlFbGZfU2hkciAqc2hkciA9ICZpbmZvLT5zZWNoZHJzW2ldOworCQlpZiAoc2hkci0+c2hfdHlwZSAhPSBTSFRfTk9CSVRTCisJCSAgICAmJiBpbmZvLT5sZW4gPCBzaGRyLT5zaF9vZmZzZXQgKyBzaGRyLT5zaF9zaXplKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIk1vZHVsZSBsZW4gJWx1IHRydW5jYXRlZFxuIiwKKwkJCSAgICAgICBpbmZvLT5sZW4pOworCQkJcmV0dXJuIC1FTk9FWEVDOworCQl9CiAKIAkJLyogTWFyayBhbGwgc2VjdGlvbnMgc2hfYWRkciB3aXRoIHRoZWlyIGFkZHJlc3MgaW4gdGhlCiAJCSAgIHRlbXBvcmFyeSBpbWFnZS4gKi8KLQkJc2VjaGRyc1tpXS5zaF9hZGRyID0gKHNpemVfdCloZHIgKyBzZWNoZHJzW2ldLnNoX29mZnNldDsKKwkJc2hkci0+c2hfYWRkciA9IChzaXplX3QpaW5mby0+aGRyICsgc2hkci0+c2hfb2Zmc2V0OwogCi0JCS8qIEludGVybmFsIHN5bWJvbHMgYW5kIHN0cmluZ3MuICovCi0JCWlmIChzZWNoZHJzW2ldLnNoX3R5cGUgPT0gU0hUX1NZTVRBQikgewotCQkJc3ltaW5kZXggPSBpOwotCQkJc3RyaW5kZXggPSBzZWNoZHJzW2ldLnNoX2xpbms7Ci0JCQlzdHJ0YWIgPSAoY2hhciAqKWhkciArIHNlY2hkcnNbc3RyaW5kZXhdLnNoX29mZnNldDsKLQkJfQogI2lmbmRlZiBDT05GSUdfTU9EVUxFX1VOTE9BRAogCQkvKiBEb24ndCBsb2FkIC5leGl0IHNlY3Rpb25zICovCi0JCWlmIChzdHJzdGFydHMoc2Vjc3RyaW5ncytzZWNoZHJzW2ldLnNoX25hbWUsICIuZXhpdCIpKQotCQkJc2VjaGRyc1tpXS5zaF9mbGFncyAmPSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DOworCQlpZiAoc3Ryc3RhcnRzKGluZm8tPnNlY3N0cmluZ3Mrc2hkci0+c2hfbmFtZSwgIi5leGl0IikpCisJCQlzaGRyLT5zaF9mbGFncyAmPSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DOwogI2VuZGlmCiAJfQogCi0JbW9kaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsCi0JCQkgICAgIi5nbnUubGlua29uY2UudGhpc19tb2R1bGUiKTsKLQlpZiAoIW1vZGluZGV4KSB7CisJLyogVHJhY2sgYnV0IGRvbid0IGtlZXAgbW9kaW5mbyBhbmQgdmVyc2lvbiBzZWN0aW9ucy4gKi8KKwlpbmZvLT5pbmRleC52ZXJzID0gZmluZF9zZWMoaW5mbywgIl9fdmVyc2lvbnMiKTsKKwlpbmZvLT5pbmRleC5pbmZvID0gZmluZF9zZWMoaW5mbywgIi5tb2RpbmZvIik7CisJaW5mby0+c2VjaGRyc1tpbmZvLT5pbmRleC5pbmZvXS5zaF9mbGFncyAmPSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DOworCWluZm8tPnNlY2hkcnNbaW5mby0+aW5kZXgudmVyc10uc2hfZmxhZ3MgJj0gfih1bnNpZ25lZCBsb25nKVNIRl9BTExPQzsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNldCB1cCBvdXIgYmFzaWMgY29udmVuaWVuY2UgdmFyaWFibGVzIChwb2ludGVycyB0byBzZWN0aW9uIGhlYWRlcnMsCisgKiBzZWFyY2ggZm9yIG1vZHVsZSBzZWN0aW9uIGluZGV4IGV0YyksIGFuZCBkbyBzb21lIGJhc2ljIHNlY3Rpb24KKyAqIHZlcmlmaWNhdGlvbi4KKyAqCisgKiBSZXR1cm4gdGhlIHRlbXBvcmFyeSBtb2R1bGUgcG9pbnRlciAod2UnbGwgcmVwbGFjZSBpdCB3aXRoIHRoZSBmaW5hbAorICogb25lIHdoZW4gd2UgbW92ZSB0aGUgbW9kdWxlIHNlY3Rpb25zIGFyb3VuZCkuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbW9kdWxlICpzZXR1cF9sb2FkX2luZm8oc3RydWN0IGxvYWRfaW5mbyAqaW5mbykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgZXJyOworCXN0cnVjdCBtb2R1bGUgKm1vZDsKKworCS8qIFNldCB1cCB0aGUgY29udmVuaWVuY2UgdmFyaWFibGVzICovCisJaW5mby0+c2VjaGRycyA9ICh2b2lkICopaW5mby0+aGRyICsgaW5mby0+aGRyLT5lX3Nob2ZmOworCWluZm8tPnNlY3N0cmluZ3MgPSAodm9pZCAqKWluZm8tPmhkcgorCQkrIGluZm8tPnNlY2hkcnNbaW5mby0+aGRyLT5lX3Noc3RybmR4XS5zaF9vZmZzZXQ7CisKKwllcnIgPSByZXdyaXRlX3NlY3Rpb25faGVhZGVycyhpbmZvKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCisJLyogRmluZCBpbnRlcm5hbCBzeW1ib2xzIGFuZCBzdHJpbmdzLiAqLworCWZvciAoaSA9IDE7IGkgPCBpbmZvLT5oZHItPmVfc2hudW07IGkrKykgeworCQlpZiAoaW5mby0+c2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9TWU1UQUIpIHsKKwkJCWluZm8tPmluZGV4LnN5bSA9IGk7CisJCQlpbmZvLT5pbmRleC5zdHIgPSBpbmZvLT5zZWNoZHJzW2ldLnNoX2xpbms7CisJCQlpbmZvLT5zdHJ0YWIgPSAoY2hhciAqKWluZm8tPmhkcgorCQkJCSsgaW5mby0+c2VjaGRyc1tpbmZvLT5pbmRleC5zdHJdLnNoX29mZnNldDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaW5mby0+aW5kZXgubW9kID0gZmluZF9zZWMoaW5mbywgIi5nbnUubGlua29uY2UudGhpc19tb2R1bGUiKTsKKwlpZiAoIWluZm8tPmluZGV4Lm1vZCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyBtb2R1bGUgZm91bmQgaW4gb2JqZWN0XG4iKTsKLQkJZXJyID0gLUVOT0VYRUM7Ci0JCWdvdG8gZnJlZV9oZHI7CisJCXJldHVybiBFUlJfUFRSKC1FTk9FWEVDKTsKIAl9CiAJLyogVGhpcyBpcyB0ZW1wb3Jhcnk6IHBvaW50IG1vZCBpbnRvIGNvcHkgb2YgZGF0YS4gKi8KLQltb2QgPSAodm9pZCAqKXNlY2hkcnNbbW9kaW5kZXhdLnNoX2FkZHI7CisJbW9kID0gKHZvaWQgKilpbmZvLT5zZWNoZHJzW2luZm8tPmluZGV4Lm1vZF0uc2hfYWRkcjsKIAotCWlmIChzeW1pbmRleCA9PSAwKSB7CisJaWYgKGluZm8tPmluZGV4LnN5bSA9PSAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBtb2R1bGUgaGFzIG5vIHN5bWJvbHMgKHN0cmlwcGVkPylcbiIsCiAJCSAgICAgICBtb2QtPm5hbWUpOwotCQllcnIgPSAtRU5PRVhFQzsKLQkJZ290byBmcmVlX2hkcjsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0VYRUMpOwogCX0KIAotCXZlcnNpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fdmVyc2lvbnMiKTsKLQlpbmZvaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICIubW9kaW5mbyIpOwotCXBjcHVpbmRleCA9IGZpbmRfcGNwdXNlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MpOwotCi0JLyogRG9uJ3Qga2VlcCBtb2RpbmZvIGFuZCB2ZXJzaW9uIHNlY3Rpb25zLiAqLwotCXNlY2hkcnNbaW5mb2luZGV4XS5zaF9mbGFncyAmPSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DOwotCXNlY2hkcnNbdmVyc2luZGV4XS5zaF9mbGFncyAmPSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DOworCWluZm8tPmluZGV4LnBjcHUgPSBmaW5kX3BjcHVzZWMoaW5mbyk7CiAKIAkvKiBDaGVjayBtb2R1bGUgc3RydWN0IHZlcnNpb24gbm93LCBiZWZvcmUgd2UgdHJ5IHRvIHVzZSBtb2R1bGUuICovCi0JaWYgKCFjaGVja19tb2RzdHJ1Y3RfdmVyc2lvbihzZWNoZHJzLCB2ZXJzaW5kZXgsIG1vZCkpIHsKLQkJZXJyID0gLUVOT0VYRUM7Ci0JCWdvdG8gZnJlZV9oZHI7Ci0JfQorCWlmICghY2hlY2tfbW9kc3RydWN0X3ZlcnNpb24oaW5mby0+c2VjaGRycywgaW5mby0+aW5kZXgudmVycywgbW9kKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0VYRUMpOwogCi0JbW9kbWFnaWMgPSBnZXRfbW9kaW5mbyhzZWNoZHJzLCBpbmZvaW5kZXgsICJ2ZXJtYWdpYyIpOworCXJldHVybiBtb2Q7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfbW9kaW5mbyhzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pCit7CisJY29uc3QgY2hhciAqbW9kbWFnaWMgPSBnZXRfbW9kaW5mbyhpbmZvLCAidmVybWFnaWMiKTsKKwlpbnQgZXJyOworCiAJLyogVGhpcyBpcyBhbGxvd2VkOiBtb2Rwcm9iZSAtLWZvcmNlIHdpbGwgaW52YWxpZGF0ZSBpdC4gKi8KIAlpZiAoIW1vZG1hZ2ljKSB7CiAJCWVyciA9IHRyeV90b19mb3JjZV9sb2FkKG1vZCwgImJhZCB2ZXJtYWdpYyIpOwogCQlpZiAoZXJyKQotCQkJZ290byBmcmVlX2hkcjsKLQl9IGVsc2UgaWYgKCFzYW1lX21hZ2ljKG1vZG1hZ2ljLCB2ZXJtYWdpYywgdmVyc2luZGV4KSkgeworCQkJcmV0dXJuIGVycjsKKwl9IGVsc2UgaWYgKCFzYW1lX21hZ2ljKG1vZG1hZ2ljLCB2ZXJtYWdpYywgaW5mby0+aW5kZXgudmVycykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogdmVyc2lvbiBtYWdpYyAnJXMnIHNob3VsZCBiZSAnJXMnXG4iLAogCQkgICAgICAgbW9kLT5uYW1lLCBtb2RtYWdpYywgdmVybWFnaWMpOwotCQllcnIgPSAtRU5PRVhFQzsKLQkJZ290byBmcmVlX2hkcjsKKwkJcmV0dXJuIC1FTk9FWEVDOwogCX0KIAotCXN0YWdpbmcgPSBnZXRfbW9kaW5mbyhzZWNoZHJzLCBpbmZvaW5kZXgsICJzdGFnaW5nIik7Ci0JaWYgKHN0YWdpbmcpIHsKKwlpZiAoZ2V0X21vZGluZm8oaW5mbywgInN0YWdpbmciKSkgewogCQlhZGRfdGFpbnRfbW9kdWxlKG1vZCwgVEFJTlRfQ1JBUCk7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBtb2R1bGUgaXMgZnJvbSB0aGUgc3RhZ2luZyBkaXJlY3RvcnksIgogCQkgICAgICAgIiB0aGUgcXVhbGl0eSBpcyB1bmtub3duLCB5b3UgaGF2ZSBiZWVuIHdhcm5lZC5cbiIsCiAJCSAgICAgICBtb2QtPm5hbWUpOwogCX0KIAotCS8qIE5vdyBjb3B5IGluIGFyZ3MgKi8KLQlhcmdzID0gc3RybmR1cF91c2VyKHVhcmdzLCB+MFVMID4+IDEpOwotCWlmIChJU19FUlIoYXJncykpIHsKLQkJZXJyID0gUFRSX0VSUihhcmdzKTsKLQkJZ290byBmcmVlX2hkcjsKLQl9CisJLyogU2V0IHVwIGxpY2Vuc2UgaW5mbyBiYXNlZCBvbiB0aGUgaW5mbyBzZWN0aW9uICovCisJc2V0X2xpY2Vuc2UobW9kLCBnZXRfbW9kaW5mbyhpbmZvLCAibGljZW5zZSIpKTsKIAotCXN0cm1hcCA9IGt6YWxsb2MoQklUU19UT19MT05HUyhzZWNoZHJzW3N0cmluZGV4XS5zaF9zaXplKQotCQkJICogc2l6ZW9mKGxvbmcpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXN0cm1hcCkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGZyZWVfbW9kOwotCX0KKwlyZXR1cm4gMDsKK30KIAotCW1vZC0+c3RhdGUgPSBNT0RVTEVfU1RBVEVfQ09NSU5HOworc3RhdGljIHZvaWQgZmluZF9tb2R1bGVfc2VjdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQoreworCW1vZC0+a3AgPSBzZWN0aW9uX29ianMoaW5mbywgIl9fcGFyYW0iLAorCQkJICAgICAgIHNpemVvZigqbW9kLT5rcCksICZtb2QtPm51bV9rcCk7CisJbW9kLT5zeW1zID0gc2VjdGlvbl9vYmpzKGluZm8sICJfX2tzeW10YWIiLAorCQkJCSBzaXplb2YoKm1vZC0+c3ltcyksICZtb2QtPm51bV9zeW1zKTsKKwltb2QtPmNyY3MgPSBzZWN0aW9uX2FkZHIoaW5mbywgIl9fa2NyY3RhYiIpOworCW1vZC0+Z3BsX3N5bXMgPSBzZWN0aW9uX29ianMoaW5mbywgIl9fa3N5bXRhYl9ncGwiLAorCQkJCSAgICAgc2l6ZW9mKCptb2QtPmdwbF9zeW1zKSwKKwkJCQkgICAgICZtb2QtPm51bV9ncGxfc3ltcyk7CisJbW9kLT5ncGxfY3JjcyA9IHNlY3Rpb25fYWRkcihpbmZvLCAiX19rY3JjdGFiX2dwbCIpOworCW1vZC0+Z3BsX2Z1dHVyZV9zeW1zID0gc2VjdGlvbl9vYmpzKGluZm8sCisJCQkJCSAgICAiX19rc3ltdGFiX2dwbF9mdXR1cmUiLAorCQkJCQkgICAgc2l6ZW9mKCptb2QtPmdwbF9mdXR1cmVfc3ltcyksCisJCQkJCSAgICAmbW9kLT5udW1fZ3BsX2Z1dHVyZV9zeW1zKTsKKwltb2QtPmdwbF9mdXR1cmVfY3JjcyA9IHNlY3Rpb25fYWRkcihpbmZvLCAiX19rY3JjdGFiX2dwbF9mdXR1cmUiKTsKIAotCS8qIEFsbG93IGFyY2hlcyB0byBmcm9iIHNlY3Rpb24gY29udGVudHMgYW5kIHNpemVzLiAgKi8KLQllcnIgPSBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgbW9kKTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBmcmVlX21vZDsKKyNpZmRlZiBDT05GSUdfVU5VU0VEX1NZTUJPTFMKKwltb2QtPnVudXNlZF9zeW1zID0gc2VjdGlvbl9vYmpzKGluZm8sICJfX2tzeW10YWJfdW51c2VkIiwKKwkJCQkJc2l6ZW9mKCptb2QtPnVudXNlZF9zeW1zKSwKKwkJCQkJJm1vZC0+bnVtX3VudXNlZF9zeW1zKTsKKwltb2QtPnVudXNlZF9jcmNzID0gc2VjdGlvbl9hZGRyKGluZm8sICJfX2tjcmN0YWJfdW51c2VkIik7CisJbW9kLT51bnVzZWRfZ3BsX3N5bXMgPSBzZWN0aW9uX29ianMoaW5mbywgIl9fa3N5bXRhYl91bnVzZWRfZ3BsIiwKKwkJCQkJICAgIHNpemVvZigqbW9kLT51bnVzZWRfZ3BsX3N5bXMpLAorCQkJCQkgICAgJm1vZC0+bnVtX3VudXNlZF9ncGxfc3ltcyk7CisJbW9kLT51bnVzZWRfZ3BsX2NyY3MgPSBzZWN0aW9uX2FkZHIoaW5mbywgIl9fa2NyY3RhYl91bnVzZWRfZ3BsIik7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQ09OU1RSVUNUT1JTCisJbW9kLT5jdG9ycyA9IHNlY3Rpb25fb2JqcyhpbmZvLCAiLmN0b3JzIiwKKwkJCQkgIHNpemVvZigqbW9kLT5jdG9ycyksICZtb2QtPm51bV9jdG9ycyk7CisjZW5kaWYKIAotCWlmIChwY3B1aW5kZXgpIHsKLQkJLyogV2UgaGF2ZSBhIHNwZWNpYWwgYWxsb2NhdGlvbiBmb3IgdGhpcyBzZWN0aW9uLiAqLwotCQllcnIgPSBwZXJjcHVfbW9kYWxsb2MobW9kLCBzZWNoZHJzW3BjcHVpbmRleF0uc2hfc2l6ZSwKLQkJCQkgICAgICBzZWNoZHJzW3BjcHVpbmRleF0uc2hfYWRkcmFsaWduKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZnJlZV9tb2Q7Ci0JCXNlY2hkcnNbcGNwdWluZGV4XS5zaF9mbGFncyAmPSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DOwotCX0KLQkvKiBLZWVwIHRoaXMgYXJvdW5kIGZvciBmYWlsdXJlIHBhdGguICovCi0JcGVyY3B1ID0gbW9kX3BlcmNwdShtb2QpOworI2lmZGVmIENPTkZJR19UUkFDRVBPSU5UUworCW1vZC0+dHJhY2Vwb2ludHMgPSBzZWN0aW9uX29ianMoaW5mbywgIl9fdHJhY2Vwb2ludHMiLAorCQkJCQlzaXplb2YoKm1vZC0+dHJhY2Vwb2ludHMpLAorCQkJCQkmbW9kLT5udW1fdHJhY2Vwb2ludHMpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0VWRU5UX1RSQUNJTkcKKwltb2QtPnRyYWNlX2V2ZW50cyA9IHNlY3Rpb25fb2JqcyhpbmZvLCAiX2Z0cmFjZV9ldmVudHMiLAorCQkJCQkgc2l6ZW9mKCptb2QtPnRyYWNlX2V2ZW50cyksCisJCQkJCSAmbW9kLT5udW1fdHJhY2VfZXZlbnRzKTsKKwkvKgorCSAqIFRoaXMgc2VjdGlvbiBjb250YWlucyBwb2ludGVycyB0byBhbGxvY2F0ZWQgb2JqZWN0cyBpbiB0aGUgdHJhY2UKKwkgKiBjb2RlIGFuZCBub3Qgc2Nhbm5pbmcgaXQgbGVhZHMgdG8gZmFsc2UgcG9zaXRpdmVzLgorCSAqLworCWttZW1sZWFrX3NjYW5fYXJlYShtb2QtPnRyYWNlX2V2ZW50cywgc2l6ZW9mKCptb2QtPnRyYWNlX2V2ZW50cykgKgorCQkJICAgbW9kLT5udW1fdHJhY2VfZXZlbnRzLCBHRlBfS0VSTkVMKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19GVFJBQ0VfTUNPVU5UX1JFQ09SRAorCS8qIHNlY2hkcnNbMF0uc2hfc2l6ZSBpcyBhbHdheXMgemVybyAqLworCW1vZC0+ZnRyYWNlX2NhbGxzaXRlcyA9IHNlY3Rpb25fb2JqcyhpbmZvLCAiX19tY291bnRfbG9jIiwKKwkJCQkJICAgICBzaXplb2YoKm1vZC0+ZnRyYWNlX2NhbGxzaXRlcyksCisJCQkJCSAgICAgJm1vZC0+bnVtX2Z0cmFjZV9jYWxsc2l0ZXMpOworI2VuZGlmCiAKLQkvKiBEZXRlcm1pbmUgdG90YWwgc2l6ZXMsIGFuZCBwdXQgb2Zmc2V0cyBpbiBzaF9lbnRzaXplLiAgRm9yIG5vdwotCSAgIHRoaXMgaXMgZG9uZSBnZW5lcmljYWxseTsgdGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYW55Ci0JICAgc3BlY2lhbCBjYXNlcyBmb3IgdGhlIGFyY2hpdGVjdHVyZXMuICovCi0JbGF5b3V0X3NlY3Rpb25zKG1vZCwgaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzKTsKLQlzeW1vZmZzID0gbGF5b3V0X3N5bXRhYihtb2QsIHNlY2hkcnMsIHN5bWluZGV4LCBzdHJpbmRleCwgaGRyLAotCQkJCXNlY3N0cmluZ3MsICZzdHJvZmZzLCBzdHJtYXApOworCW1vZC0+ZXh0YWJsZSA9IHNlY3Rpb25fb2JqcyhpbmZvLCAiX19leF90YWJsZSIsCisJCQkJICAgIHNpemVvZigqbW9kLT5leHRhYmxlKSwgJm1vZC0+bnVtX2V4ZW50cmllcyk7CisKKwlpZiAoc2VjdGlvbl9hZGRyKGluZm8sICJfX29ic3Bhcm0iKSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IElnbm9yaW5nIG9ic29sZXRlIHBhcmFtZXRlcnNcbiIsCisJCSAgICAgICBtb2QtPm5hbWUpOworCisJaW5mby0+ZGVidWcgPSBzZWN0aW9uX29ianMoaW5mbywgIl9fdmVyYm9zZSIsCisJCQkJICAgc2l6ZW9mKCppbmZvLT5kZWJ1ZyksICZpbmZvLT5udW1fZGVidWcpOworfQorCitzdGF0aWMgaW50IG1vdmVfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbykKK3sKKwlpbnQgaTsKKwl2b2lkICpwdHI7CiAKIAkvKiBEbyB0aGUgYWxsb2NzLiAqLwogCXB0ciA9IG1vZHVsZV9hbGxvY191cGRhdGVfYm91bmRzKG1vZC0+Y29yZV9zaXplKTsKQEAgLTIyODksMTAgKzIzNTAsOSBAQAogCSAqIGxlYWsuCiAJICovCiAJa21lbWxlYWtfbm90X2xlYWsocHRyKTsKLQlpZiAoIXB0cikgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGZyZWVfcGVyY3B1OwotCX0KKwlpZiAoIXB0cikKKwkJcmV0dXJuIC1FTk9NRU07CisKIAltZW1zZXQocHRyLCAwLCBtb2QtPmNvcmVfc2l6ZSk7CiAJbW9kLT5tb2R1bGVfY29yZSA9IHB0cjsKIApAQCAtMjMwNSw1MCArMjM2NSw0MCBAQAogCSAqLwogCWttZW1sZWFrX2lnbm9yZShwdHIpOwogCWlmICghcHRyICYmIG1vZC0+aW5pdF9zaXplKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZnJlZV9jb3JlOworCQltb2R1bGVfZnJlZShtb2QsIG1vZC0+bW9kdWxlX2NvcmUpOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbWVtc2V0KHB0ciwgMCwgbW9kLT5pbml0X3NpemUpOwogCW1vZC0+bW9kdWxlX2luaXQgPSBwdHI7CiAKIAkvKiBUcmFuc2ZlciBlYWNoIHNlY3Rpb24gd2hpY2ggc3BlY2lmaWVzIFNIRl9BTExPQyAqLwogCURFQlVHUCgiZmluYWwgc2VjdGlvbiBhZGRyZXNzZXM6XG4iKTsKLQlmb3IgKGkgPSAwOyBpIDwgaGRyLT5lX3NobnVtOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+aGRyLT5lX3NobnVtOyBpKyspIHsKIAkJdm9pZCAqZGVzdDsKKwkJRWxmX1NoZHIgKnNoZHIgPSAmaW5mby0+c2VjaGRyc1tpXTsKIAotCQlpZiAoIShzZWNoZHJzW2ldLnNoX2ZsYWdzICYgU0hGX0FMTE9DKSkKKwkJaWYgKCEoc2hkci0+c2hfZmxhZ3MgJiBTSEZfQUxMT0MpKQogCQkJY29udGludWU7CiAKLQkJaWYgKHNlY2hkcnNbaV0uc2hfZW50c2l6ZSAmIElOSVRfT0ZGU0VUX01BU0spCisJCWlmIChzaGRyLT5zaF9lbnRzaXplICYgSU5JVF9PRkZTRVRfTUFTSykKIAkJCWRlc3QgPSBtb2QtPm1vZHVsZV9pbml0Ci0JCQkJKyAoc2VjaGRyc1tpXS5zaF9lbnRzaXplICYgfklOSVRfT0ZGU0VUX01BU0spOworCQkJCSsgKHNoZHItPnNoX2VudHNpemUgJiB+SU5JVF9PRkZTRVRfTUFTSyk7CiAJCWVsc2UKLQkJCWRlc3QgPSBtb2QtPm1vZHVsZV9jb3JlICsgc2VjaGRyc1tpXS5zaF9lbnRzaXplOworCQkJZGVzdCA9IG1vZC0+bW9kdWxlX2NvcmUgKyBzaGRyLT5zaF9lbnRzaXplOwogCi0JCWlmIChzZWNoZHJzW2ldLnNoX3R5cGUgIT0gU0hUX05PQklUUykKLQkJCW1lbWNweShkZXN0LCAodm9pZCAqKXNlY2hkcnNbaV0uc2hfYWRkciwKLQkJCSAgICAgICBzZWNoZHJzW2ldLnNoX3NpemUpOworCQlpZiAoc2hkci0+c2hfdHlwZSAhPSBTSFRfTk9CSVRTKQorCQkJbWVtY3B5KGRlc3QsICh2b2lkICopc2hkci0+c2hfYWRkciwgc2hkci0+c2hfc2l6ZSk7CiAJCS8qIFVwZGF0ZSBzaF9hZGRyIHRvIHBvaW50IHRvIGNvcHkgaW4gaW1hZ2UuICovCi0JCXNlY2hkcnNbaV0uc2hfYWRkciA9ICh1bnNpZ25lZCBsb25nKWRlc3Q7Ci0JCURFQlVHUCgiXHQweCVseCAlc1xuIiwgc2VjaGRyc1tpXS5zaF9hZGRyLCBzZWNzdHJpbmdzICsgc2VjaGRyc1tpXS5zaF9uYW1lKTsKKwkJc2hkci0+c2hfYWRkciA9ICh1bnNpZ25lZCBsb25nKWRlc3Q7CisJCURFQlVHUCgiXHQweCVseCAlc1xuIiwKKwkJICAgICAgIHNoZHItPnNoX2FkZHIsIGluZm8tPnNlY3N0cmluZ3MgKyBzaGRyLT5zaF9uYW1lKTsKIAl9Ci0JLyogTW9kdWxlIGhhcyBiZWVuIG1vdmVkLiAqLwotCW1vZCA9ICh2b2lkICopc2VjaGRyc1ttb2RpbmRleF0uc2hfYWRkcjsKLQlrbWVtbGVha19sb2FkX21vZHVsZShtb2QsIGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncyk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19NT0RVTEVfVU5MT0FEKQotCW1vZC0+cmVmcHRyID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBtb2R1bGVfcmVmKTsKLQlpZiAoIW1vZC0+cmVmcHRyKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZnJlZV9pbml0OwotCX0KLSNlbmRpZgotCS8qIE5vdyB3ZSd2ZSBtb3ZlZCBtb2R1bGUsIGluaXRpYWxpemUgbGlua2VkIGxpc3RzLCBldGMuICovCi0JbW9kdWxlX3VubG9hZF9pbml0KG1vZCk7CisJcmV0dXJuIDA7Cit9CiAKLQkvKiBTZXQgdXAgbGljZW5zZSBpbmZvIGJhc2VkIG9uIHRoZSBpbmZvIHNlY3Rpb24gKi8KLQlzZXRfbGljZW5zZShtb2QsIGdldF9tb2RpbmZvKHNlY2hkcnMsIGluZm9pbmRleCwgImxpY2Vuc2UiKSk7Ci0KK3N0YXRpYyBpbnQgY2hlY2tfbW9kdWxlX2xpY2Vuc2VfYW5kX3ZlcnNpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCkKK3sKIAkvKgogCSAqIG5kaXN3cmFwcGVyIGlzIHVuZGVyIEdQTCBieSBpdHNlbGYsIGJ1dCBsb2FkcyBwcm9wcmlldGFyeSBtb2R1bGVzLgogCSAqIERvbid0IHVzZSBhZGRfdGFpbnRfbW9kdWxlKCksIGFzIGl0IHdvdWxkIHByZXZlbnQgbmRpc3dyYXBwZXIgZnJvbQpAQCAtMjM2MSw3NyArMjQxMSw2IEBACiAJaWYgKHN0cmNtcChtb2QtPm5hbWUsICJkcml2ZXJsb2FkZXIiKSA9PSAwKQogCQlhZGRfdGFpbnRfbW9kdWxlKG1vZCwgVEFJTlRfUFJPUFJJRVRBUllfTU9EVUxFKTsKIAotCS8qIFNldCB1cCBNT0RJTkZPX0FUVFIgZmllbGRzICovCi0Jc2V0dXBfbW9kaW5mbyhtb2QsIHNlY2hkcnMsIGluZm9pbmRleCk7Ci0KLQkvKiBGaXggdXAgc3ltcywgc28gdGhhdCBzdF92YWx1ZSBpcyBhIHBvaW50ZXIgdG8gbG9jYXRpb24uICovCi0JZXJyID0gc2ltcGxpZnlfc3ltYm9scyhzZWNoZHJzLCBzeW1pbmRleCwgc3RydGFiLCB2ZXJzaW5kZXgsIHBjcHVpbmRleCwKLQkJCSAgICAgICBtb2QpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIGNsZWFudXA7Ci0KLQkvKiBOb3cgd2UndmUgZ290IGV2ZXJ5dGhpbmcgaW4gdGhlIGZpbmFsIGxvY2F0aW9ucywgd2UgY2FuCi0JICogZmluZCBvcHRpb25hbCBzZWN0aW9ucy4gKi8KLQltb2QtPmtwID0gc2VjdGlvbl9vYmpzKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fcGFyYW0iLAotCQkJICAgICAgIHNpemVvZigqbW9kLT5rcCksICZtb2QtPm51bV9rcCk7Ci0JbW9kLT5zeW1zID0gc2VjdGlvbl9vYmpzKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fa3N5bXRhYiIsCi0JCQkJIHNpemVvZigqbW9kLT5zeW1zKSwgJm1vZC0+bnVtX3N5bXMpOwotCW1vZC0+Y3JjcyA9IHNlY3Rpb25fYWRkcihoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX2tjcmN0YWIiKTsKLQltb2QtPmdwbF9zeW1zID0gc2VjdGlvbl9vYmpzKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fa3N5bXRhYl9ncGwiLAotCQkJCSAgICAgc2l6ZW9mKCptb2QtPmdwbF9zeW1zKSwKLQkJCQkgICAgICZtb2QtPm51bV9ncGxfc3ltcyk7Ci0JbW9kLT5ncGxfY3JjcyA9IHNlY3Rpb25fYWRkcihoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX2tjcmN0YWJfZ3BsIik7Ci0JbW9kLT5ncGxfZnV0dXJlX3N5bXMgPSBzZWN0aW9uX29ianMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLAotCQkJCQkgICAgIl9fa3N5bXRhYl9ncGxfZnV0dXJlIiwKLQkJCQkJICAgIHNpemVvZigqbW9kLT5ncGxfZnV0dXJlX3N5bXMpLAotCQkJCQkgICAgJm1vZC0+bnVtX2dwbF9mdXR1cmVfc3ltcyk7Ci0JbW9kLT5ncGxfZnV0dXJlX2NyY3MgPSBzZWN0aW9uX2FkZHIoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLAotCQkJCQkgICAgIl9fa2NyY3RhYl9ncGxfZnV0dXJlIik7Ci0KLSNpZmRlZiBDT05GSUdfVU5VU0VEX1NZTUJPTFMKLQltb2QtPnVudXNlZF9zeW1zID0gc2VjdGlvbl9vYmpzKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywKLQkJCQkJIl9fa3N5bXRhYl91bnVzZWQiLAotCQkJCQlzaXplb2YoKm1vZC0+dW51c2VkX3N5bXMpLAotCQkJCQkmbW9kLT5udW1fdW51c2VkX3N5bXMpOwotCW1vZC0+dW51c2VkX2NyY3MgPSBzZWN0aW9uX2FkZHIoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLAotCQkJCQkiX19rY3JjdGFiX3VudXNlZCIpOwotCW1vZC0+dW51c2VkX2dwbF9zeW1zID0gc2VjdGlvbl9vYmpzKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywKLQkJCQkJICAgICJfX2tzeW10YWJfdW51c2VkX2dwbCIsCi0JCQkJCSAgICBzaXplb2YoKm1vZC0+dW51c2VkX2dwbF9zeW1zKSwKLQkJCQkJICAgICZtb2QtPm51bV91bnVzZWRfZ3BsX3N5bXMpOwotCW1vZC0+dW51c2VkX2dwbF9jcmNzID0gc2VjdGlvbl9hZGRyKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywKLQkJCQkJICAgICJfX2tjcmN0YWJfdW51c2VkX2dwbCIpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0NPTlNUUlVDVE9SUwotCW1vZC0+Y3RvcnMgPSBzZWN0aW9uX29ianMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiLmN0b3JzIiwKLQkJCQkgIHNpemVvZigqbW9kLT5jdG9ycyksICZtb2QtPm51bV9jdG9ycyk7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19UUkFDRVBPSU5UUwotCW1vZC0+dHJhY2Vwb2ludHMgPSBzZWN0aW9uX29ianMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLAotCQkJCQkiX190cmFjZXBvaW50cyIsCi0JCQkJCXNpemVvZigqbW9kLT50cmFjZXBvaW50cyksCi0JCQkJCSZtb2QtPm51bV90cmFjZXBvaW50cyk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfRVZFTlRfVFJBQ0lORwotCW1vZC0+dHJhY2VfZXZlbnRzID0gc2VjdGlvbl9vYmpzKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywKLQkJCQkJICJfZnRyYWNlX2V2ZW50cyIsCi0JCQkJCSBzaXplb2YoKm1vZC0+dHJhY2VfZXZlbnRzKSwKLQkJCQkJICZtb2QtPm51bV90cmFjZV9ldmVudHMpOwotCS8qCi0JICogVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHBvaW50ZXJzIHRvIGFsbG9jYXRlZCBvYmplY3RzIGluIHRoZSB0cmFjZQotCSAqIGNvZGUgYW5kIG5vdCBzY2FubmluZyBpdCBsZWFkcyB0byBmYWxzZSBwb3NpdGl2ZXMuCi0JICovCi0Ja21lbWxlYWtfc2Nhbl9hcmVhKG1vZC0+dHJhY2VfZXZlbnRzLCBzaXplb2YoKm1vZC0+dHJhY2VfZXZlbnRzKSAqCi0JCQkgICBtb2QtPm51bV90cmFjZV9ldmVudHMsIEdGUF9LRVJORUwpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0ZUUkFDRV9NQ09VTlRfUkVDT1JECi0JLyogc2VjaGRyc1swXS5zaF9zaXplIGlzIGFsd2F5cyB6ZXJvICovCi0JbW9kLT5mdHJhY2VfY2FsbHNpdGVzID0gc2VjdGlvbl9vYmpzKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywKLQkJCQkJICAgICAiX19tY291bnRfbG9jIiwKLQkJCQkJICAgICBzaXplb2YoKm1vZC0+ZnRyYWNlX2NhbGxzaXRlcyksCi0JCQkJCSAgICAgJm1vZC0+bnVtX2Z0cmFjZV9jYWxsc2l0ZXMpOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX01PRFZFUlNJT05TCiAJaWYgKChtb2QtPm51bV9zeW1zICYmICFtb2QtPmNyY3MpCiAJICAgIHx8IChtb2QtPm51bV9ncGxfc3ltcyAmJiAhbW9kLT5ncGxfY3JjcykKQEAgLTI0NDEsNTYgKzI0MjAsMTYgQEAKIAkgICAgfHwgKG1vZC0+bnVtX3VudXNlZF9ncGxfc3ltcyAmJiAhbW9kLT51bnVzZWRfZ3BsX2NyY3MpCiAjZW5kaWYKIAkJKSB7Ci0JCWVyciA9IHRyeV90b19mb3JjZV9sb2FkKG1vZCwKLQkJCQkJIm5vIHZlcnNpb25zIGZvciBleHBvcnRlZCBzeW1ib2xzIik7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGNsZWFudXA7CisJCXJldHVybiB0cnlfdG9fZm9yY2VfbG9hZChtb2QsCisJCQkJCSAibm8gdmVyc2lvbnMgZm9yIGV4cG9ydGVkIHN5bWJvbHMiKTsKIAl9CiAjZW5kaWYKKwlyZXR1cm4gMDsKK30KIAotCS8qIE5vdyBkbyByZWxvY2F0aW9ucy4gKi8KLQlmb3IgKGkgPSAxOyBpIDwgaGRyLT5lX3NobnVtOyBpKyspIHsKLQkJY29uc3QgY2hhciAqc3RydGFiID0gKGNoYXIgKilzZWNoZHJzW3N0cmluZGV4XS5zaF9hZGRyOwotCQl1bnNpZ25lZCBpbnQgaW5mbyA9IHNlY2hkcnNbaV0uc2hfaW5mbzsKLQotCQkvKiBOb3QgYSB2YWxpZCByZWxvY2F0aW9uIHNlY3Rpb24/ICovCi0JCWlmIChpbmZvID49IGhkci0+ZV9zaG51bSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIERvbid0IGJvdGhlciB3aXRoIG5vbi1hbGxvY2F0ZWQgc2VjdGlvbnMgKi8KLQkJaWYgKCEoc2VjaGRyc1tpbmZvXS5zaF9mbGFncyAmIFNIRl9BTExPQykpCi0JCQljb250aW51ZTsKLQotCQlpZiAoc2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9SRUwpCi0JCQllcnIgPSBhcHBseV9yZWxvY2F0ZShzZWNoZHJzLCBzdHJ0YWIsIHN5bWluZGV4LCBpLG1vZCk7Ci0JCWVsc2UgaWYgKHNlY2hkcnNbaV0uc2hfdHlwZSA9PSBTSFRfUkVMQSkKLQkJCWVyciA9IGFwcGx5X3JlbG9jYXRlX2FkZChzZWNoZHJzLCBzdHJ0YWIsIHN5bWluZGV4LCBpLAotCQkJCQkJIG1vZCk7Ci0JCWlmIChlcnIgPCAwKQotCQkJZ290byBjbGVhbnVwOwotCX0KLQotICAJLyogU2V0IHVwIGFuZCBzb3J0IGV4Y2VwdGlvbiB0YWJsZSAqLwotCW1vZC0+ZXh0YWJsZSA9IHNlY3Rpb25fb2JqcyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX2V4X3RhYmxlIiwKLQkJCQkgICAgc2l6ZW9mKCptb2QtPmV4dGFibGUpLCAmbW9kLT5udW1fZXhlbnRyaWVzKTsKLQlzb3J0X2V4dGFibGUobW9kLT5leHRhYmxlLCBtb2QtPmV4dGFibGUgKyBtb2QtPm51bV9leGVudHJpZXMpOwotCi0JLyogRmluYWxseSwgY29weSBwZXJjcHUgYXJlYSBvdmVyLiAqLwotCXBlcmNwdV9tb2Rjb3B5KG1vZCwgKHZvaWQgKilzZWNoZHJzW3BjcHVpbmRleF0uc2hfYWRkciwKLQkJICAgICAgIHNlY2hkcnNbcGNwdWluZGV4XS5zaF9zaXplKTsKLQotCWFkZF9rYWxsc3ltcyhtb2QsIHNlY2hkcnMsIGhkci0+ZV9zaG51bSwgc3ltaW5kZXgsIHN0cmluZGV4LAotCQkgICAgIHN5bW9mZnMsIHN0cm9mZnMsIHNlY3N0cmluZ3MsIHN0cm1hcCk7Ci0Ja2ZyZWUoc3RybWFwKTsKLQlzdHJtYXAgPSBOVUxMOwotCi0JaWYgKCFtb2QtPnRhaW50cykKLQkJZGVidWcgPSBzZWN0aW9uX29ianMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX192ZXJib3NlIiwKLQkJCQkgICAgIHNpemVvZigqZGVidWcpLCAmbnVtX2RlYnVnKTsKLQotCWVyciA9IG1vZHVsZV9maW5hbGl6ZShoZHIsIHNlY2hkcnMsIG1vZCk7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gY2xlYW51cDsKK3N0YXRpYyB2b2lkIGZsdXNoX21vZHVsZV9pY2FjaGUoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kKQoreworCW1tX3NlZ21lbnRfdCBvbGRfZnM7CiAKIAkvKiBmbHVzaCB0aGUgaWNhY2hlIGluIGNvcnJlY3QgY29udGV4dCAqLwogCW9sZF9mcyA9IGdldF9mcygpOwpAQCAtMjUwOSwxMSArMjQ0OCwxNjAgQEAKIAkJCSAgICh1bnNpZ25lZCBsb25nKW1vZC0+bW9kdWxlX2NvcmUgKyBtb2QtPmNvcmVfc2l6ZSk7CiAKIAlzZXRfZnMob2xkX2ZzKTsKK30KIAotCW1vZC0+YXJncyA9IGFyZ3M7Ci0JaWYgKHNlY3Rpb25fYWRkcihoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX29ic3Bhcm0iKSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IElnbm9yaW5nIG9ic29sZXRlIHBhcmFtZXRlcnNcbiIsCi0JCSAgICAgICBtb2QtPm5hbWUpOworc3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbykKK3sKKwkvKiBNb2R1bGUgd2l0aGluIHRlbXBvcmFyeSBjb3B5LiAqLworCXN0cnVjdCBtb2R1bGUgKm1vZDsKKwlFbGZfU2hkciAqcGNwdXNlYzsKKwlpbnQgZXJyOworCisJbW9kID0gc2V0dXBfbG9hZF9pbmZvKGluZm8pOworCWlmIChJU19FUlIobW9kKSkKKwkJcmV0dXJuIG1vZDsKKworCWVyciA9IGNoZWNrX21vZGluZm8obW9kLCBpbmZvKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCisJLyogQWxsb3cgYXJjaGVzIHRvIGZyb2Igc2VjdGlvbiBjb250ZW50cyBhbmQgc2l6ZXMuICAqLworCWVyciA9IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoaW5mby0+aGRyLCBpbmZvLT5zZWNoZHJzLAorCQkJCQlpbmZvLT5zZWNzdHJpbmdzLCBtb2QpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCXBjcHVzZWMgPSAmaW5mby0+c2VjaGRyc1tpbmZvLT5pbmRleC5wY3B1XTsKKwlpZiAocGNwdXNlYy0+c2hfc2l6ZSkgeworCQkvKiBXZSBoYXZlIGEgc3BlY2lhbCBhbGxvY2F0aW9uIGZvciB0aGlzIHNlY3Rpb24uICovCisJCWVyciA9IHBlcmNwdV9tb2RhbGxvYyhtb2QsCisJCQkJICAgICAgcGNwdXNlYy0+c2hfc2l6ZSwgcGNwdXNlYy0+c2hfYWRkcmFsaWduKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCQlwY3B1c2VjLT5zaF9mbGFncyAmPSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DOworCX0KKworCS8qIERldGVybWluZSB0b3RhbCBzaXplcywgYW5kIHB1dCBvZmZzZXRzIGluIHNoX2VudHNpemUuICBGb3Igbm93CisJICAgdGhpcyBpcyBkb25lIGdlbmVyaWNhbGx5OyB0aGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhbnkKKwkgICBzcGVjaWFsIGNhc2VzIGZvciB0aGUgYXJjaGl0ZWN0dXJlcy4gKi8KKwlsYXlvdXRfc2VjdGlvbnMobW9kLCBpbmZvKTsKKworCWluZm8tPnN0cm1hcCA9IGt6YWxsb2MoQklUU19UT19MT05HUyhpbmZvLT5zZWNoZHJzW2luZm8tPmluZGV4LnN0cl0uc2hfc2l6ZSkKKwkJCSAqIHNpemVvZihsb25nKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvLT5zdHJtYXApIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmcmVlX3BlcmNwdTsKKwl9CisJbGF5b3V0X3N5bXRhYihtb2QsIGluZm8pOworCisJLyogQWxsb2NhdGUgYW5kIG1vdmUgdG8gdGhlIGZpbmFsIHBsYWNlICovCisJZXJyID0gbW92ZV9tb2R1bGUobW9kLCBpbmZvKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZyZWVfc3RybWFwOworCisJLyogTW9kdWxlIGhhcyBiZWVuIGNvcGllZCB0byBpdHMgZmluYWwgcGxhY2Ugbm93OiByZXR1cm4gaXQuICovCisJbW9kID0gKHZvaWQgKilpbmZvLT5zZWNoZHJzW2luZm8tPmluZGV4Lm1vZF0uc2hfYWRkcjsKKwlrbWVtbGVha19sb2FkX21vZHVsZShtb2QsIGluZm8pOworCXJldHVybiBtb2Q7CisKK2ZyZWVfc3RybWFwOgorCWtmcmVlKGluZm8tPnN0cm1hcCk7CitmcmVlX3BlcmNwdToKKwlwZXJjcHVfbW9kZnJlZShtb2QpOworb3V0OgorCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKKy8qIG1vZCBpcyBubyBsb25nZXIgdmFsaWQgYWZ0ZXIgdGhpcyEgKi8KK3N0YXRpYyB2b2lkIG1vZHVsZV9kZWFsbG9jYXRlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbykKK3sKKwlrZnJlZShpbmZvLT5zdHJtYXApOworCXBlcmNwdV9tb2RmcmVlKG1vZCk7CisJbW9kdWxlX2ZyZWUobW9kLCBtb2QtPm1vZHVsZV9pbml0KTsKKwltb2R1bGVfZnJlZShtb2QsIG1vZC0+bW9kdWxlX2NvcmUpOworfQorCitzdGF0aWMgaW50IHBvc3RfcmVsb2NhdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8pCit7CisJLyogU29ydCBleGNlcHRpb24gdGFibGUgbm93IHJlbG9jYXRpb25zIGFyZSBkb25lLiAqLworCXNvcnRfZXh0YWJsZShtb2QtPmV4dGFibGUsIG1vZC0+ZXh0YWJsZSArIG1vZC0+bnVtX2V4ZW50cmllcyk7CisKKwkvKiBDb3B5IHJlbG9jYXRlZCBwZXJjcHUgYXJlYSBvdmVyLiAqLworCXBlcmNwdV9tb2Rjb3B5KG1vZCwgKHZvaWQgKilpbmZvLT5zZWNoZHJzW2luZm8tPmluZGV4LnBjcHVdLnNoX2FkZHIsCisJCSAgICAgICBpbmZvLT5zZWNoZHJzW2luZm8tPmluZGV4LnBjcHVdLnNoX3NpemUpOworCisJLyogU2V0dXAga2FsbHN5bXMtc3BlY2lmaWMgZmllbGRzLiAqLworCWFkZF9rYWxsc3ltcyhtb2QsIGluZm8pOworCisJLyogQXJjaC1zcGVjaWZpYyBtb2R1bGUgZmluYWxpemluZy4gKi8KKwlyZXR1cm4gbW9kdWxlX2ZpbmFsaXplKGluZm8tPmhkciwgaW5mby0+c2VjaGRycywgbW9kKTsKK30KKworLyogQWxsb2NhdGUgYW5kIGxvYWQgdGhlIG1vZHVsZTogbm90ZSB0aGF0IHNpemUgb2Ygc2VjdGlvbiAwIGlzIGFsd2F5cworICAgemVybywgYW5kIHdlIHJlbHkgb24gdGhpcyBmb3Igb3B0aW9uYWwgc2VjdGlvbnMuICovCitzdGF0aWMgc3RydWN0IG1vZHVsZSAqbG9hZF9tb2R1bGUodm9pZCBfX3VzZXIgKnVtb2QsCisJCQkJICB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQkgIGNvbnN0IGNoYXIgX191c2VyICp1YXJncykKK3sKKwlzdHJ1Y3QgbG9hZF9pbmZvIGluZm8gPSB7IE5VTEwsIH07CisJc3RydWN0IG1vZHVsZSAqbW9kOworCWxvbmcgZXJyOworCisJREVCVUdQKCJsb2FkX21vZHVsZTogdW1vZD0lcCwgbGVuPSVsdSwgdWFyZ3M9JXBcbiIsCisJICAgICAgIHVtb2QsIGxlbiwgdWFyZ3MpOworCisJLyogQ29weSBpbiB0aGUgYmxvYnMgZnJvbSB1c2Vyc3BhY2UsIGNoZWNrIHRoZXkgYXJlIHZhZ3VlbHkgc2FuZS4gKi8KKwllcnIgPSBjb3B5X2FuZF9jaGVjaygmaW5mbywgdW1vZCwgbGVuLCB1YXJncyk7CisJaWYgKGVycikKKwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKworCS8qIEZpZ3VyZSBvdXQgbW9kdWxlIGxheW91dCwgYW5kIGFsbG9jYXRlIGFsbCB0aGUgbWVtb3J5LiAqLworCW1vZCA9IGxheW91dF9hbmRfYWxsb2NhdGUoJmluZm8pOworCWlmIChJU19FUlIobW9kKSkgeworCQllcnIgPSBQVFJfRVJSKG1vZCk7CisJCWdvdG8gZnJlZV9jb3B5OworCX0KKworCS8qIE5vdyBtb2R1bGUgaXMgaW4gZmluYWwgbG9jYXRpb24sIGluaXRpYWxpemUgbGlua2VkIGxpc3RzLCBldGMuICovCisJZXJyID0gbW9kdWxlX3VubG9hZF9pbml0KG1vZCk7CisJaWYgKGVycikKKwkJZ290byBmcmVlX21vZHVsZTsKKworCS8qIE5vdyB3ZSd2ZSBnb3QgZXZlcnl0aGluZyBpbiB0aGUgZmluYWwgbG9jYXRpb25zLCB3ZSBjYW4KKwkgKiBmaW5kIG9wdGlvbmFsIHNlY3Rpb25zLiAqLworCWZpbmRfbW9kdWxlX3NlY3Rpb25zKG1vZCwgJmluZm8pOworCisJZXJyID0gY2hlY2tfbW9kdWxlX2xpY2Vuc2VfYW5kX3ZlcnNpb25zKG1vZCk7CisJaWYgKGVycikKKwkJZ290byBmcmVlX3VubG9hZDsKKworCS8qIFNldCB1cCBNT0RJTkZPX0FUVFIgZmllbGRzICovCisJc2V0dXBfbW9kaW5mbyhtb2QsICZpbmZvKTsKKworCS8qIEZpeCB1cCBzeW1zLCBzbyB0aGF0IHN0X3ZhbHVlIGlzIGEgcG9pbnRlciB0byBsb2NhdGlvbi4gKi8KKwllcnIgPSBzaW1wbGlmeV9zeW1ib2xzKG1vZCwgJmluZm8pOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGZyZWVfbW9kaW5mbzsKKworCWVyciA9IGFwcGx5X3JlbG9jYXRpb25zKG1vZCwgJmluZm8pOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGZyZWVfbW9kaW5mbzsKKworCWVyciA9IHBvc3RfcmVsb2NhdGlvbihtb2QsICZpbmZvKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBmcmVlX21vZGluZm87CisKKwlmbHVzaF9tb2R1bGVfaWNhY2hlKG1vZCk7CisKKwkvKiBOb3cgY29weSBpbiBhcmdzICovCisJbW9kLT5hcmdzID0gc3RybmR1cF91c2VyKHVhcmdzLCB+MFVMID4+IDEpOworCWlmIChJU19FUlIobW9kLT5hcmdzKSkgeworCQllcnIgPSBQVFJfRVJSKG1vZC0+YXJncyk7CisJCWdvdG8gZnJlZV9hcmNoX2NsZWFudXA7CisJfQorCisJLyogTWFyayBzdGF0ZSBhcyBjb21pbmcgc28gc3Ryb25nX3RyeV9tb2R1bGVfZ2V0KCkgaWdub3JlcyB1cy4gKi8KKwltb2QtPnN0YXRlID0gTU9EVUxFX1NUQVRFX0NPTUlORzsKIAogCS8qIE5vdyBzZXcgaXQgaW50byB0aGUgbGlzdHMgc28gd2UgY2FuIGdldCBsb2NrZGVwIGFuZCBvb3BzCiAJICogaW5mbyBkdXJpbmcgYXJndW1lbnQgcGFyc2luZy4gIE5vb25lIHNob3VsZCBhY2Nlc3MgdXMsIHNpbmNlCkBAIC0yNTI4LDggKzI2MTYsOSBAQAogCQlnb3RvIHVubG9jazsKIAl9CiAKLQlpZiAoZGVidWcpCi0JCWR5bmFtaWNfZGVidWdfc2V0dXAoZGVidWcsIG51bV9kZWJ1Zyk7CisJLyogVGhpcyBoYXMgdG8gYmUgZG9uZSBvbmNlIHdlJ3JlIHN1cmUgbW9kdWxlIG5hbWUgaXMgdW5pcXVlLiAqLworCWlmICghbW9kLT50YWludHMpCisJCWR5bmFtaWNfZGVidWdfc2V0dXAoaW5mby5kZWJ1ZywgaW5mby5udW1fZGVidWcpOwogCiAJLyogRmluZCBkdXBsaWNhdGUgc3ltYm9scyAqLwogCWVyciA9IHZlcmlmeV9leHBvcnRfc3ltYm9scyhtb2QpOwpAQCAtMjUzOSwyMyArMjYyOCwyMiBAQAogCWxpc3RfYWRkX3JjdSgmbW9kLT5saXN0LCAmbW9kdWxlcyk7CiAJbXV0ZXhfdW5sb2NrKCZtb2R1bGVfbXV0ZXgpOwogCisJLyogTW9kdWxlIGlzIHJlYWR5IHRvIGV4ZWN1dGU6IHBhcnNpbmcgYXJncyBtYXkgZG8gdGhhdC4gKi8KIAllcnIgPSBwYXJzZV9hcmdzKG1vZC0+bmFtZSwgbW9kLT5hcmdzLCBtb2QtPmtwLCBtb2QtPm51bV9rcCwgTlVMTCk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gdW5saW5rOwogCi0JZXJyID0gbW9kX3N5c2ZzX3NldHVwKG1vZCwgbW9kLT5rcCwgbW9kLT5udW1fa3ApOworCS8qIExpbmsgaW4gdG8gc3lmcy4gKi8KKwllcnIgPSBtb2Rfc3lzZnNfc2V0dXAobW9kLCAmaW5mbywgbW9kLT5rcCwgbW9kLT5udW1fa3ApOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIHVubGluazsKIAotCWFkZF9zZWN0X2F0dHJzKG1vZCwgaGRyLT5lX3NobnVtLCBzZWNzdHJpbmdzLCBzZWNoZHJzKTsKLQlhZGRfbm90ZXNfYXR0cnMobW9kLCBoZHItPmVfc2hudW0sIHNlY3N0cmluZ3MsIHNlY2hkcnMpOwotCi0JLyogR2V0IHJpZCBvZiB0ZW1wb3JhcnkgY29weSAqLwotCXZmcmVlKGhkcik7Ci0KLQl0cmFjZV9tb2R1bGVfbG9hZChtb2QpOworCS8qIEdldCByaWQgb2YgdGVtcG9yYXJ5IGNvcHkgYW5kIHN0cm1hcC4gKi8KKwlrZnJlZShpbmZvLnN0cm1hcCk7CisJZnJlZV9jb3B5KCZpbmZvKTsKIAogCS8qIERvbmUhICovCisJdHJhY2VfbW9kdWxlX2xvYWQobW9kKTsKIAlyZXR1cm4gbW9kOwogCiAgdW5saW5rOgpAQCAtMjU2MywzNSArMjY1MSwyMyBAQAogCS8qIFVubGluayBjYXJlZnVsbHk6IGthbGxzeW1zIGNvdWxkIGJlIHdhbGtpbmcgbGlzdC4gKi8KIAlsaXN0X2RlbF9yY3UoJm1vZC0+bGlzdCk7CiAgZGRlYnVnOgotCWR5bmFtaWNfZGVidWdfcmVtb3ZlKGRlYnVnKTsKKwlpZiAoIW1vZC0+dGFpbnRzKQorCQlkeW5hbWljX2RlYnVnX3JlbW92ZShpbmZvLmRlYnVnKTsKICB1bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZtb2R1bGVfbXV0ZXgpOwogCXN5bmNocm9uaXplX3NjaGVkKCk7CisJa2ZyZWUobW9kLT5hcmdzKTsKKyBmcmVlX2FyY2hfY2xlYW51cDoKIAltb2R1bGVfYXJjaF9jbGVhbnVwKG1vZCk7Ci0gY2xlYW51cDoKKyBmcmVlX21vZGluZm86CiAJZnJlZV9tb2RpbmZvKG1vZCk7CisgZnJlZV91bmxvYWQ6CiAJbW9kdWxlX3VubG9hZF9mcmVlKG1vZCk7Ci0jaWYgZGVmaW5lZChDT05GSUdfTU9EVUxFX1VOTE9BRCkKLQlmcmVlX3BlcmNwdShtb2QtPnJlZnB0cik7Ci0gZnJlZV9pbml0OgotI2VuZGlmCi0JbW9kdWxlX2ZyZWUobW9kLCBtb2QtPm1vZHVsZV9pbml0KTsKLSBmcmVlX2NvcmU6Ci0JbW9kdWxlX2ZyZWUobW9kLCBtb2QtPm1vZHVsZV9jb3JlKTsKLQkvKiBtb2Qgd2lsbCBiZSBmcmVlZCB3aXRoIGNvcmUuIERvbid0IGFjY2VzcyBpdCBiZXlvbmQgdGhpcyBsaW5lISAqLwotIGZyZWVfcGVyY3B1OgotCWZyZWVfcGVyY3B1KHBlcmNwdSk7Ci0gZnJlZV9tb2Q6Ci0Ja2ZyZWUoYXJncyk7Ci0Ja2ZyZWUoc3RybWFwKTsKLSBmcmVlX2hkcjoKLQl2ZnJlZShoZHIpOworIGZyZWVfbW9kdWxlOgorCW1vZHVsZV9kZWFsbG9jYXRlKG1vZCwgJmluZm8pOworIGZyZWVfY29weToKKwlmcmVlX2NvcHkoJmluZm8pOwogCXJldHVybiBFUlJfUFRSKGVycik7Ci0KLSB0cnVuY2F0ZWQ6Ci0JcHJpbnRrKEtFUk5fRVJSICJNb2R1bGUgbGVuICVsdSB0cnVuY2F0ZWRcbiIsIGxlbik7Ci0JZXJyID0gLUVOT0VYRUM7Ci0JZ290byBmcmVlX2hkcjsKIH0KIAogLyogQ2FsbCBtb2R1bGUgY29uc3RydWN0b3JzLiAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3BhZGF0YS5jIGIva2VybmVsL3BhZGF0YS5jCmluZGV4IGZkZDhhZTYuLjc1MTAxOTQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYWRhdGEuYworKysgYi9rZXJuZWwvcGFkYXRhLmMKQEAgLTI2LDE4ICsyNiwxOSBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogCi0jZGVmaW5lIE1BWF9TRVFfTlIgSU5UX01BWCAtIE5SX0NQVVMKKyNkZWZpbmUgTUFYX1NFUV9OUiAoSU5UX01BWCAtIE5SX0NQVVMpCiAjZGVmaW5lIE1BWF9PQkpfTlVNIDEwMDAKIAogc3RhdGljIGludCBwYWRhdGFfaW5kZXhfdG9fY3B1KHN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZCwgaW50IGNwdV9pbmRleCkKIHsKIAlpbnQgY3B1LCB0YXJnZXRfY3B1OwogCi0JdGFyZ2V0X2NwdSA9IGNwdW1hc2tfZmlyc3QocGQtPmNwdW1hc2spOworCXRhcmdldF9jcHUgPSBjcHVtYXNrX2ZpcnN0KHBkLT5jcHVtYXNrLnBjcHUpOwogCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1X2luZGV4OyBjcHUrKykKLQkJdGFyZ2V0X2NwdSA9IGNwdW1hc2tfbmV4dCh0YXJnZXRfY3B1LCBwZC0+Y3B1bWFzayk7CisJCXRhcmdldF9jcHUgPSBjcHVtYXNrX25leHQodGFyZ2V0X2NwdSwgcGQtPmNwdW1hc2sucGNwdSk7CiAKIAlyZXR1cm4gdGFyZ2V0X2NwdTsKIH0KQEAgLTUzLDI2ICs1NCwyNyBAQAogCSAqIEhhc2ggdGhlIHNlcXVlbmNlIG51bWJlcnMgdG8gdGhlIGNwdXMgYnkgdGFraW5nCiAJICogc2VxX25yIG1vZC4gbnVtYmVyIG9mIGNwdXMgaW4gdXNlLgogCSAqLwotCWNwdV9pbmRleCA9ICBwYWRhdGEtPnNlcV9uciAlIGNwdW1hc2tfd2VpZ2h0KHBkLT5jcHVtYXNrKTsKKwljcHVfaW5kZXggPSAgcGFkYXRhLT5zZXFfbnIgJSBjcHVtYXNrX3dlaWdodChwZC0+Y3B1bWFzay5wY3B1KTsKIAogCXJldHVybiBwYWRhdGFfaW5kZXhfdG9fY3B1KHBkLCBjcHVfaW5kZXgpOwogfQogCi1zdGF0aWMgdm9pZCBwYWRhdGFfcGFyYWxsZWxfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyB2b2lkIHBhZGF0YV9wYXJhbGxlbF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICpwYXJhbGxlbF93b3JrKQogewotCXN0cnVjdCBwYWRhdGFfcXVldWUgKnF1ZXVlOworCXN0cnVjdCBwYWRhdGFfcGFyYWxsZWxfcXVldWUgKnBxdWV1ZTsKIAlzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQ7CiAJc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3Q7CiAJTElTVF9IRUFEKGxvY2FsX2xpc3QpOwogCiAJbG9jYWxfYmhfZGlzYWJsZSgpOwotCXF1ZXVlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwYWRhdGFfcXVldWUsIHB3b3JrKTsKLQlwZCA9IHF1ZXVlLT5wZDsKKwlwcXVldWUgPSBjb250YWluZXJfb2YocGFyYWxsZWxfd29yaywKKwkJCSAgICAgIHN0cnVjdCBwYWRhdGFfcGFyYWxsZWxfcXVldWUsIHdvcmspOworCXBkID0gcHF1ZXVlLT5wZDsKIAlwaW5zdCA9IHBkLT5waW5zdDsKIAotCXNwaW5fbG9jaygmcXVldWUtPnBhcmFsbGVsLmxvY2spOwotCWxpc3RfcmVwbGFjZV9pbml0KCZxdWV1ZS0+cGFyYWxsZWwubGlzdCwgJmxvY2FsX2xpc3QpOwotCXNwaW5fdW5sb2NrKCZxdWV1ZS0+cGFyYWxsZWwubG9jayk7CisJc3Bpbl9sb2NrKCZwcXVldWUtPnBhcmFsbGVsLmxvY2spOworCWxpc3RfcmVwbGFjZV9pbml0KCZwcXVldWUtPnBhcmFsbGVsLmxpc3QsICZsb2NhbF9saXN0KTsKKwlzcGluX3VubG9jaygmcHF1ZXVlLT5wYXJhbGxlbC5sb2NrKTsKIAogCXdoaWxlICghbGlzdF9lbXB0eSgmbG9jYWxfbGlzdCkpIHsKIAkJc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGE7CkBAIC05NCw3ICs5Niw3IEBACiAgKiBAcGluc3Q6IHBhZGF0YSBpbnN0YW5jZQogICogQHBhZGF0YTogb2JqZWN0IHRvIGJlIHBhcmFsbGVsaXplZAogICogQGNiX2NwdTogY3B1IHRoZSBzZXJpYWxpemF0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgcnVuIG9uLAotICogICAgICAgICAgbXVzdCBiZSBpbiB0aGUgY3B1bWFzayBvZiBwYWRhdGEuCisgKiAgICAgICAgICBtdXN0IGJlIGluIHRoZSBzZXJpYWwgY3B1bWFzayBvZiBwYWRhdGEoaS5lLiBjcHVtYXNrLmNiY3B1KS4KICAqCiAgKiBUaGUgcGFyYWxsZWxpemF0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgcnVuIHdpdGggQkhzIG9mZi4KICAqIE5vdGU6IEV2ZXJ5IG9iamVjdCB3aGljaCBpcyBwYXJhbGxlbGl6ZWQgYnkgcGFkYXRhX2RvX3BhcmFsbGVsCkBAIC0xMDQsMTUgKzEwNiwxOCBAQAogCQkgICAgICAgc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEsIGludCBjYl9jcHUpCiB7CiAJaW50IHRhcmdldF9jcHUsIGVycjsKLQlzdHJ1Y3QgcGFkYXRhX3F1ZXVlICpxdWV1ZTsKKwlzdHJ1Y3QgcGFkYXRhX3BhcmFsbGVsX3F1ZXVlICpxdWV1ZTsKIAlzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQ7CiAKIAlyY3VfcmVhZF9sb2NrX2JoKCk7CiAKIAlwZCA9IHJjdV9kZXJlZmVyZW5jZShwaW5zdC0+cGQpOwogCi0JZXJyID0gMDsKLQlpZiAoIShwaW5zdC0+ZmxhZ3MgJiBQQURBVEFfSU5JVCkpCisJZXJyID0gLUVJTlZBTDsKKwlpZiAoIShwaW5zdC0+ZmxhZ3MgJiBQQURBVEFfSU5JVCkgfHwgcGluc3QtPmZsYWdzICYgUEFEQVRBX0lOVkFMSUQpCisJCWdvdG8gb3V0OworCisJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNiX2NwdSwgcGQtPmNwdW1hc2suY2JjcHUpKQogCQlnb3RvIG91dDsKIAogCWVyciA9ICAtRUJVU1k7CkBAIC0xMjIsMTEgKzEyNyw3IEBACiAJaWYgKGF0b21pY19yZWFkKCZwZC0+cmVmY250KSA+PSBNQVhfT0JKX05VTSkKIAkJZ290byBvdXQ7CiAKLQllcnIgPSAtRUlOVkFMOwotCWlmICghY3B1bWFza190ZXN0X2NwdShjYl9jcHUsIHBkLT5jcHVtYXNrKSkKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSAtRUlOUFJPR1JFU1M7CisJZXJyID0gMDsKIAlhdG9taWNfaW5jKCZwZC0+cmVmY250KTsKIAlwYWRhdGEtPnBkID0gcGQ7CiAJcGFkYXRhLT5jYl9jcHUgPSBjYl9jcHU7CkBAIC0xMzcsMTMgKzEzOCwxMyBAQAogCXBhZGF0YS0+c2VxX25yID0gYXRvbWljX2luY19yZXR1cm4oJnBkLT5zZXFfbnIpOwogCiAJdGFyZ2V0X2NwdSA9IHBhZGF0YV9jcHVfaGFzaChwYWRhdGEpOwotCXF1ZXVlID0gcGVyX2NwdV9wdHIocGQtPnF1ZXVlLCB0YXJnZXRfY3B1KTsKKwlxdWV1ZSA9IHBlcl9jcHVfcHRyKHBkLT5wcXVldWUsIHRhcmdldF9jcHUpOwogCiAJc3Bpbl9sb2NrKCZxdWV1ZS0+cGFyYWxsZWwubG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmcGFkYXRhLT5saXN0LCAmcXVldWUtPnBhcmFsbGVsLmxpc3QpOwogCXNwaW5fdW5sb2NrKCZxdWV1ZS0+cGFyYWxsZWwubG9jayk7CiAKLQlxdWV1ZV93b3JrX29uKHRhcmdldF9jcHUsIHBpbnN0LT53cSwgJnF1ZXVlLT5wd29yayk7CisJcXVldWVfd29ya19vbih0YXJnZXRfY3B1LCBwaW5zdC0+d3EsICZxdWV1ZS0+d29yayk7CiAKIG91dDoKIAlyY3VfcmVhZF91bmxvY2tfYmgoKTsKQEAgLTE3MSw4NCArMTcyLDUyIEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YV9nZXRfbmV4dChzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQpCiB7Ci0JaW50IGNwdSwgbnVtX2NwdXMsIGVtcHR5LCBjYWxjX3NlcV9ucjsKLQlpbnQgc2VxX25yLCBuZXh0X25yLCBvdmVycnVuLCBuZXh0X292ZXJydW47Ci0Jc3RydWN0IHBhZGF0YV9xdWV1ZSAqcXVldWUsICpuZXh0X3F1ZXVlOworCWludCBjcHUsIG51bV9jcHVzOworCWludCBuZXh0X25yLCBuZXh0X2luZGV4OworCXN0cnVjdCBwYWRhdGFfcGFyYWxsZWxfcXVldWUgKnF1ZXVlLCAqbmV4dF9xdWV1ZTsKIAlzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YTsKIAlzdHJ1Y3QgcGFkYXRhX2xpc3QgKnJlb3JkZXI7CiAKLQllbXB0eSA9IDA7Ci0JbmV4dF9uciA9IC0xOwotCW5leHRfb3ZlcnJ1biA9IDA7Ci0JbmV4dF9xdWV1ZSA9IE5VTEw7CisJbnVtX2NwdXMgPSBjcHVtYXNrX3dlaWdodChwZC0+Y3B1bWFzay5wY3B1KTsKIAotCW51bV9jcHVzID0gY3B1bWFza193ZWlnaHQocGQtPmNwdW1hc2spOworCS8qCisJICogQ2FsY3VsYXRlIHRoZSBwZXJjcHUgcmVvcmRlciBxdWV1ZSBhbmQgdGhlIHNlcXVlbmNlCisJICogbnVtYmVyIG9mIHRoZSBuZXh0IG9iamVjdC4KKwkgKi8KKwluZXh0X25yID0gcGQtPnByb2Nlc3NlZDsKKwluZXh0X2luZGV4ID0gbmV4dF9uciAlIG51bV9jcHVzOworCWNwdSA9IHBhZGF0YV9pbmRleF90b19jcHUocGQsIG5leHRfaW5kZXgpOworCW5leHRfcXVldWUgPSBwZXJfY3B1X3B0cihwZC0+cHF1ZXVlLCBjcHUpOwogCi0JZm9yX2VhY2hfY3B1KGNwdSwgcGQtPmNwdW1hc2spIHsKLQkJcXVldWUgPSBwZXJfY3B1X3B0cihwZC0+cXVldWUsIGNwdSk7Ci0JCXJlb3JkZXIgPSAmcXVldWUtPnJlb3JkZXI7Ci0KLQkJLyoKLQkJICogQ2FsY3VsYXRlIHRoZSBzZXFfbnIgb2YgdGhlIG9iamVjdCB0aGF0IHNob3VsZCBiZQotCQkgKiBuZXh0IGluIHRoaXMgcmVvcmRlciBxdWV1ZS4KLQkJICovCi0JCW92ZXJydW4gPSAwOwotCQljYWxjX3NlcV9uciA9IChhdG9taWNfcmVhZCgmcXVldWUtPm51bV9vYmopICogbnVtX2NwdXMpCi0JCQkgICAgICAgKyBxdWV1ZS0+Y3B1X2luZGV4OwotCi0JCWlmICh1bmxpa2VseShjYWxjX3NlcV9uciA+IHBkLT5tYXhfc2VxX25yKSkgewotCQkJY2FsY19zZXFfbnIgPSBjYWxjX3NlcV9uciAtIHBkLT5tYXhfc2VxX25yIC0gMTsKLQkJCW92ZXJydW4gPSAxOwotCQl9Ci0KLQkJaWYgKCFsaXN0X2VtcHR5KCZyZW9yZGVyLT5saXN0KSkgewotCQkJcGFkYXRhID0gbGlzdF9lbnRyeShyZW9yZGVyLT5saXN0Lm5leHQsCi0JCQkJCSAgICBzdHJ1Y3QgcGFkYXRhX3ByaXYsIGxpc3QpOwotCi0JCQlzZXFfbnIgID0gcGFkYXRhLT5zZXFfbnI7Ci0JCQlCVUdfT04oY2FsY19zZXFfbnIgIT0gc2VxX25yKTsKLQkJfSBlbHNlIHsKLQkJCXNlcV9uciA9IGNhbGNfc2VxX25yOwotCQkJZW1wdHkrKzsKLQkJfQotCi0JCWlmIChuZXh0X25yIDwgMCB8fCBzZXFfbnIgPCBuZXh0X25yCi0JCSAgICB8fCAobmV4dF9vdmVycnVuICYmICFvdmVycnVuKSkgewotCQkJbmV4dF9uciA9IHNlcV9ucjsKLQkJCW5leHRfb3ZlcnJ1biA9IG92ZXJydW47Ci0JCQluZXh0X3F1ZXVlID0gcXVldWU7Ci0JCX0KKwlpZiAodW5saWtlbHkobmV4dF9uciA+IHBkLT5tYXhfc2VxX25yKSkgeworCQluZXh0X25yID0gbmV4dF9uciAtIHBkLT5tYXhfc2VxX25yIC0gMTsKKwkJbmV4dF9pbmRleCA9IG5leHRfbnIgJSBudW1fY3B1czsKKwkJY3B1ID0gcGFkYXRhX2luZGV4X3RvX2NwdShwZCwgbmV4dF9pbmRleCk7CisJCW5leHRfcXVldWUgPSBwZXJfY3B1X3B0cihwZC0+cHF1ZXVlLCBjcHUpOworCQlwZC0+cHJvY2Vzc2VkID0gMDsKIAl9CiAKIAlwYWRhdGEgPSBOVUxMOwogCi0JaWYgKGVtcHR5ID09IG51bV9jcHVzKQotCQlnb3RvIG91dDsKLQogCXJlb3JkZXIgPSAmbmV4dF9xdWV1ZS0+cmVvcmRlcjsKIAogCWlmICghbGlzdF9lbXB0eSgmcmVvcmRlci0+bGlzdCkpIHsKIAkJcGFkYXRhID0gbGlzdF9lbnRyeShyZW9yZGVyLT5saXN0Lm5leHQsCiAJCQkJICAgIHN0cnVjdCBwYWRhdGFfcHJpdiwgbGlzdCk7CiAKLQkJaWYgKHVubGlrZWx5KG5leHRfb3ZlcnJ1bikpIHsKLQkJCWZvcl9lYWNoX2NwdShjcHUsIHBkLT5jcHVtYXNrKSB7Ci0JCQkJcXVldWUgPSBwZXJfY3B1X3B0cihwZC0+cXVldWUsIGNwdSk7Ci0JCQkJYXRvbWljX3NldCgmcXVldWUtPm51bV9vYmosIDApOwotCQkJfQotCQl9CisJCUJVR19PTihuZXh0X25yICE9IHBhZGF0YS0+c2VxX25yKTsKIAogCQlzcGluX2xvY2soJnJlb3JkZXItPmxvY2spOwogCQlsaXN0X2RlbF9pbml0KCZwYWRhdGEtPmxpc3QpOwogCQlhdG9taWNfZGVjKCZwZC0+cmVvcmRlcl9vYmplY3RzKTsKIAkJc3Bpbl91bmxvY2soJnJlb3JkZXItPmxvY2spOwogCi0JCWF0b21pY19pbmMoJm5leHRfcXVldWUtPm51bV9vYmopOworCQlwZC0+cHJvY2Vzc2VkKys7CiAKIAkJZ290byBvdXQ7CiAJfQogCi0JcXVldWUgPSBwZXJfY3B1X3B0cihwZC0+cXVldWUsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcXVldWUgPSBwZXJfY3B1X3B0cihwZC0+cHF1ZXVlLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCWlmIChxdWV1ZS0+Y3B1X2luZGV4ID09IG5leHRfcXVldWUtPmNwdV9pbmRleCkgewogCQlwYWRhdGEgPSBFUlJfUFRSKC1FTk9EQVRBKTsKIAkJZ290byBvdXQ7CkBAIC0yNjIsNyArMjMxLDcgQEAKIHN0YXRpYyB2b2lkIHBhZGF0YV9yZW9yZGVyKHN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZCkKIHsKIAlzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YTsKLQlzdHJ1Y3QgcGFkYXRhX3F1ZXVlICpxdWV1ZTsKKwlzdHJ1Y3QgcGFkYXRhX3NlcmlhbF9xdWV1ZSAqc3F1ZXVlOwogCXN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0ID0gcGQtPnBpbnN0OwogCiAJLyoKQEAgLTMwMSwxMyArMjcwLDEzIEBACiAJCQlyZXR1cm47CiAJCX0KIAotCQlxdWV1ZSA9IHBlcl9jcHVfcHRyKHBkLT5xdWV1ZSwgcGFkYXRhLT5jYl9jcHUpOworCQlzcXVldWUgPSBwZXJfY3B1X3B0cihwZC0+c3F1ZXVlLCBwYWRhdGEtPmNiX2NwdSk7CiAKLQkJc3Bpbl9sb2NrKCZxdWV1ZS0+c2VyaWFsLmxvY2spOwotCQlsaXN0X2FkZF90YWlsKCZwYWRhdGEtPmxpc3QsICZxdWV1ZS0+c2VyaWFsLmxpc3QpOwotCQlzcGluX3VubG9jaygmcXVldWUtPnNlcmlhbC5sb2NrKTsKKwkJc3Bpbl9sb2NrKCZzcXVldWUtPnNlcmlhbC5sb2NrKTsKKwkJbGlzdF9hZGRfdGFpbCgmcGFkYXRhLT5saXN0LCAmc3F1ZXVlLT5zZXJpYWwubGlzdCk7CisJCXNwaW5fdW5sb2NrKCZzcXVldWUtPnNlcmlhbC5sb2NrKTsKIAotCQlxdWV1ZV93b3JrX29uKHBhZGF0YS0+Y2JfY3B1LCBwaW5zdC0+d3EsICZxdWV1ZS0+c3dvcmspOworCQlxdWV1ZV93b3JrX29uKHBhZGF0YS0+Y2JfY3B1LCBwaW5zdC0+d3EsICZzcXVldWUtPndvcmspOwogCX0KIAogCXNwaW5fdW5sb2NrX2JoKCZwZC0+bG9jayk7CkBAIC0zMzMsMTkgKzMwMiwxOSBAQAogCXBhZGF0YV9yZW9yZGVyKHBkKTsKIH0KIAotc3RhdGljIHZvaWQgcGFkYXRhX3NlcmlhbF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHZvaWQgcGFkYXRhX3NlcmlhbF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICpzZXJpYWxfd29yaykKIHsKLQlzdHJ1Y3QgcGFkYXRhX3F1ZXVlICpxdWV1ZTsKKwlzdHJ1Y3QgcGFkYXRhX3NlcmlhbF9xdWV1ZSAqc3F1ZXVlOwogCXN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZDsKIAlMSVNUX0hFQUQobG9jYWxfbGlzdCk7CiAKIAlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0JcXVldWUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBhZGF0YV9xdWV1ZSwgc3dvcmspOwotCXBkID0gcXVldWUtPnBkOworCXNxdWV1ZSA9IGNvbnRhaW5lcl9vZihzZXJpYWxfd29yaywgc3RydWN0IHBhZGF0YV9zZXJpYWxfcXVldWUsIHdvcmspOworCXBkID0gc3F1ZXVlLT5wZDsKIAotCXNwaW5fbG9jaygmcXVldWUtPnNlcmlhbC5sb2NrKTsKLQlsaXN0X3JlcGxhY2VfaW5pdCgmcXVldWUtPnNlcmlhbC5saXN0LCAmbG9jYWxfbGlzdCk7Ci0Jc3Bpbl91bmxvY2soJnF1ZXVlLT5zZXJpYWwubG9jayk7CisJc3Bpbl9sb2NrKCZzcXVldWUtPnNlcmlhbC5sb2NrKTsKKwlsaXN0X3JlcGxhY2VfaW5pdCgmc3F1ZXVlLT5zZXJpYWwubGlzdCwgJmxvY2FsX2xpc3QpOworCXNwaW5fdW5sb2NrKCZzcXVldWUtPnNlcmlhbC5sb2NrKTsKIAogCXdoaWxlICghbGlzdF9lbXB0eSgmbG9jYWxfbGlzdCkpIHsKIAkJc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGE7CkBAIC0zNzIsMTggKzM0MSwxOCBAQAogdm9pZCBwYWRhdGFfZG9fc2VyaWFsKHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhKQogewogCWludCBjcHU7Ci0Jc3RydWN0IHBhZGF0YV9xdWV1ZSAqcXVldWU7CisJc3RydWN0IHBhZGF0YV9wYXJhbGxlbF9xdWV1ZSAqcHF1ZXVlOwogCXN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZDsKIAogCXBkID0gcGFkYXRhLT5wZDsKIAogCWNwdSA9IGdldF9jcHUoKTsKLQlxdWV1ZSA9IHBlcl9jcHVfcHRyKHBkLT5xdWV1ZSwgY3B1KTsKKwlwcXVldWUgPSBwZXJfY3B1X3B0cihwZC0+cHF1ZXVlLCBjcHUpOwogCi0Jc3Bpbl9sb2NrKCZxdWV1ZS0+cmVvcmRlci5sb2NrKTsKKwlzcGluX2xvY2soJnBxdWV1ZS0+cmVvcmRlci5sb2NrKTsKIAlhdG9taWNfaW5jKCZwZC0+cmVvcmRlcl9vYmplY3RzKTsKLQlsaXN0X2FkZF90YWlsKCZwYWRhdGEtPmxpc3QsICZxdWV1ZS0+cmVvcmRlci5saXN0KTsKLQlzcGluX3VubG9jaygmcXVldWUtPnJlb3JkZXIubG9jayk7CisJbGlzdF9hZGRfdGFpbCgmcGFkYXRhLT5saXN0LCAmcHF1ZXVlLT5yZW9yZGVyLmxpc3QpOworCXNwaW5fdW5sb2NrKCZwcXVldWUtPnJlb3JkZXIubG9jayk7CiAKIAlwdXRfY3B1KCk7CiAKQEAgLTM5MSw1MiArMzYwLDg5IEBACiB9CiBFWFBPUlRfU1lNQk9MKHBhZGF0YV9kb19zZXJpYWwpOwogCi0vKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgaW50ZXJuYWwgY3B1bWFzayBkZXBlbmRlbmQgcmVzb3VyY2VzLiAqLwotc3RhdGljIHN0cnVjdCBwYXJhbGxlbF9kYXRhICpwYWRhdGFfYWxsb2NfcGQoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsCi0JCQkJCSAgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2spCitzdGF0aWMgaW50IHBhZGF0YV9zZXR1cF9jcHVtYXNrcyhzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQsCisJCQkJIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpwY3B1bWFzaywKKwkJCQkgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNiY3B1bWFzaykKIHsKLQlpbnQgY3B1LCBjcHVfaW5kZXgsIG51bV9jcHVzOwotCXN0cnVjdCBwYWRhdGFfcXVldWUgKnF1ZXVlOwotCXN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZDsKKwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZwZC0+Y3B1bWFzay5wY3B1LCBHRlBfS0VSTkVMKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljcHVtYXNrX2FuZChwZC0+Y3B1bWFzay5wY3B1LCBwY3B1bWFzaywgY3B1X2FjdGl2ZV9tYXNrKTsKKwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZwZC0+Y3B1bWFzay5jYmNwdSwgR0ZQX0tFUk5FTCkpIHsKKwkJZnJlZV9jcHVtYXNrX3ZhcihwZC0+Y3B1bWFzay5jYmNwdSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWNwdW1hc2tfYW5kKHBkLT5jcHVtYXNrLmNiY3B1LCBjYmNwdW1hc2ssIGNwdV9hY3RpdmVfbWFzayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fcGFkYXRhX2xpc3RfaW5pdChzdHJ1Y3QgcGFkYXRhX2xpc3QgKnBkX2xpc3QpCit7CisJSU5JVF9MSVNUX0hFQUQoJnBkX2xpc3QtPmxpc3QpOworCXNwaW5fbG9ja19pbml0KCZwZF9saXN0LT5sb2NrKTsKK30KKworLyogSW5pdGlhbGl6ZSBhbGwgcGVyY3B1IHF1ZXVlcyB1c2VkIGJ5IHNlcmlhbCB3b3JrZXJzICovCitzdGF0aWMgdm9pZCBwYWRhdGFfaW5pdF9zcXVldWVzKHN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZCkKK3sKKwlpbnQgY3B1OworCXN0cnVjdCBwYWRhdGFfc2VyaWFsX3F1ZXVlICpzcXVldWU7CisKKwlmb3JfZWFjaF9jcHUoY3B1LCBwZC0+Y3B1bWFzay5jYmNwdSkgeworCQlzcXVldWUgPSBwZXJfY3B1X3B0cihwZC0+c3F1ZXVlLCBjcHUpOworCQlzcXVldWUtPnBkID0gcGQ7CisJCV9fcGFkYXRhX2xpc3RfaW5pdCgmc3F1ZXVlLT5zZXJpYWwpOworCQlJTklUX1dPUksoJnNxdWV1ZS0+d29yaywgcGFkYXRhX3NlcmlhbF93b3JrZXIpOworCX0KK30KKworLyogSW5pdGlhbGl6ZSBhbGwgcGVyY3B1IHF1ZXVlcyB1c2VkIGJ5IHBhcmFsbGVsIHdvcmtlcnMgKi8KK3N0YXRpYyB2b2lkIHBhZGF0YV9pbml0X3BxdWV1ZXMoc3RydWN0IHBhcmFsbGVsX2RhdGEgKnBkKQoreworCWludCBjcHVfaW5kZXgsIG51bV9jcHVzLCBjcHU7CisJc3RydWN0IHBhZGF0YV9wYXJhbGxlbF9xdWV1ZSAqcHF1ZXVlOwogCiAJY3B1X2luZGV4ID0gMDsKKwlmb3JfZWFjaF9jcHUoY3B1LCBwZC0+Y3B1bWFzay5wY3B1KSB7CisJCXBxdWV1ZSA9IHBlcl9jcHVfcHRyKHBkLT5wcXVldWUsIGNwdSk7CisJCXBxdWV1ZS0+cGQgPSBwZDsKKwkJcHF1ZXVlLT5jcHVfaW5kZXggPSBjcHVfaW5kZXg7CisJCWNwdV9pbmRleCsrOworCisJCV9fcGFkYXRhX2xpc3RfaW5pdCgmcHF1ZXVlLT5yZW9yZGVyKTsKKwkJX19wYWRhdGFfbGlzdF9pbml0KCZwcXVldWUtPnBhcmFsbGVsKTsKKwkJSU5JVF9XT1JLKCZwcXVldWUtPndvcmssIHBhZGF0YV9wYXJhbGxlbF93b3JrZXIpOworCQlhdG9taWNfc2V0KCZwcXVldWUtPm51bV9vYmosIDApOworCX0KKworCW51bV9jcHVzID0gY3B1bWFza193ZWlnaHQocGQtPmNwdW1hc2sucGNwdSk7CisJcGQtPm1heF9zZXFfbnIgPSBudW1fY3B1cyA/IChNQVhfU0VRX05SIC8gbnVtX2NwdXMpICogbnVtX2NwdXMgLSAxIDogMDsKK30KKworLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIGludGVybmFsIGNwdW1hc2sgZGVwZW5kZW5kIHJlc291cmNlcy4gKi8KK3N0YXRpYyBzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGFkYXRhX2FsbG9jX3BkKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpwY3B1bWFzaywKKwkJCQkJICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY2JjcHVtYXNrKQoreworCXN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZDsKIAogCXBkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBhcmFsbGVsX2RhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBkKQogCQlnb3RvIGVycjsKIAotCXBkLT5xdWV1ZSA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgcGFkYXRhX3F1ZXVlKTsKLQlpZiAoIXBkLT5xdWV1ZSkKKwlwZC0+cHF1ZXVlID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBwYWRhdGFfcGFyYWxsZWxfcXVldWUpOworCWlmICghcGQtPnBxdWV1ZSkKIAkJZ290byBlcnJfZnJlZV9wZDsKIAotCWlmICghYWxsb2NfY3B1bWFza192YXIoJnBkLT5jcHVtYXNrLCBHRlBfS0VSTkVMKSkKLQkJZ290byBlcnJfZnJlZV9xdWV1ZTsKKwlwZC0+c3F1ZXVlID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBwYWRhdGFfc2VyaWFsX3F1ZXVlKTsKKwlpZiAoIXBkLT5zcXVldWUpCisJCWdvdG8gZXJyX2ZyZWVfcHF1ZXVlOworCWlmIChwYWRhdGFfc2V0dXBfY3B1bWFza3MocGQsIHBjcHVtYXNrLCBjYmNwdW1hc2spIDwgMCkKKwkJZ290byBlcnJfZnJlZV9zcXVldWU7CiAKLQljcHVtYXNrX2FuZChwZC0+Y3B1bWFzaywgY3B1bWFzaywgY3B1X2FjdGl2ZV9tYXNrKTsKLQotCWZvcl9lYWNoX2NwdShjcHUsIHBkLT5jcHVtYXNrKSB7Ci0JCXF1ZXVlID0gcGVyX2NwdV9wdHIocGQtPnF1ZXVlLCBjcHUpOwotCi0JCXF1ZXVlLT5wZCA9IHBkOwotCi0JCXF1ZXVlLT5jcHVfaW5kZXggPSBjcHVfaW5kZXg7Ci0JCWNwdV9pbmRleCsrOwotCi0JCUlOSVRfTElTVF9IRUFEKCZxdWV1ZS0+cmVvcmRlci5saXN0KTsKLQkJSU5JVF9MSVNUX0hFQUQoJnF1ZXVlLT5wYXJhbGxlbC5saXN0KTsKLQkJSU5JVF9MSVNUX0hFQUQoJnF1ZXVlLT5zZXJpYWwubGlzdCk7Ci0JCXNwaW5fbG9ja19pbml0KCZxdWV1ZS0+cmVvcmRlci5sb2NrKTsKLQkJc3Bpbl9sb2NrX2luaXQoJnF1ZXVlLT5wYXJhbGxlbC5sb2NrKTsKLQkJc3Bpbl9sb2NrX2luaXQoJnF1ZXVlLT5zZXJpYWwubG9jayk7Ci0KLQkJSU5JVF9XT1JLKCZxdWV1ZS0+cHdvcmssIHBhZGF0YV9wYXJhbGxlbF93b3JrZXIpOwotCQlJTklUX1dPUksoJnF1ZXVlLT5zd29yaywgcGFkYXRhX3NlcmlhbF93b3JrZXIpOwotCQlhdG9taWNfc2V0KCZxdWV1ZS0+bnVtX29iaiwgMCk7Ci0JfQotCi0JbnVtX2NwdXMgPSBjcHVtYXNrX3dlaWdodChwZC0+Y3B1bWFzayk7Ci0JcGQtPm1heF9zZXFfbnIgPSAoTUFYX1NFUV9OUiAvIG51bV9jcHVzKSAqIG51bV9jcHVzIC0gMTsKLQorCXBhZGF0YV9pbml0X3BxdWV1ZXMocGQpOworCXBhZGF0YV9pbml0X3NxdWV1ZXMocGQpOwogCXNldHVwX3RpbWVyKCZwZC0+dGltZXIsIHBhZGF0YV9yZW9yZGVyX3RpbWVyLCAodW5zaWduZWQgbG9uZylwZCk7CiAJYXRvbWljX3NldCgmcGQtPnNlcV9uciwgLTEpOwogCWF0b21pY19zZXQoJnBkLT5yZW9yZGVyX29iamVjdHMsIDApOwpAQCAtNDQ2LDggKzQ1MiwxMCBAQAogCiAJcmV0dXJuIHBkOwogCi1lcnJfZnJlZV9xdWV1ZToKLQlmcmVlX3BlcmNwdShwZC0+cXVldWUpOworZXJyX2ZyZWVfc3F1ZXVlOgorCWZyZWVfcGVyY3B1KHBkLT5zcXVldWUpOworZXJyX2ZyZWVfcHF1ZXVlOgorCWZyZWVfcGVyY3B1KHBkLT5wcXVldWUpOwogZXJyX2ZyZWVfcGQ6CiAJa2ZyZWUocGQpOwogZXJyOgpAQCAtNDU2LDggKzQ2NCwxMCBAQAogCiBzdGF0aWMgdm9pZCBwYWRhdGFfZnJlZV9wZChzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQpCiB7Ci0JZnJlZV9jcHVtYXNrX3ZhcihwZC0+Y3B1bWFzayk7Ci0JZnJlZV9wZXJjcHUocGQtPnF1ZXVlKTsKKwlmcmVlX2NwdW1hc2tfdmFyKHBkLT5jcHVtYXNrLnBjcHUpOworCWZyZWVfY3B1bWFza192YXIocGQtPmNwdW1hc2suY2JjcHUpOworCWZyZWVfcGVyY3B1KHBkLT5wcXVldWUpOworCWZyZWVfcGVyY3B1KHBkLT5zcXVldWUpOwogCWtmcmVlKHBkKTsKIH0KIApAQCAtNDY1LDExICs0NzUsMTIgQEAKIHN0YXRpYyB2b2lkIHBhZGF0YV9mbHVzaF9xdWV1ZXMoc3RydWN0IHBhcmFsbGVsX2RhdGEgKnBkKQogewogCWludCBjcHU7Ci0Jc3RydWN0IHBhZGF0YV9xdWV1ZSAqcXVldWU7CisJc3RydWN0IHBhZGF0YV9wYXJhbGxlbF9xdWV1ZSAqcHF1ZXVlOworCXN0cnVjdCBwYWRhdGFfc2VyaWFsX3F1ZXVlICpzcXVldWU7CiAKLQlmb3JfZWFjaF9jcHUoY3B1LCBwZC0+Y3B1bWFzaykgewotCQlxdWV1ZSA9IHBlcl9jcHVfcHRyKHBkLT5xdWV1ZSwgY3B1KTsKLQkJZmx1c2hfd29yaygmcXVldWUtPnB3b3JrKTsKKwlmb3JfZWFjaF9jcHUoY3B1LCBwZC0+Y3B1bWFzay5wY3B1KSB7CisJCXBxdWV1ZSA9IHBlcl9jcHVfcHRyKHBkLT5wcXVldWUsIGNwdSk7CisJCWZsdXNoX3dvcmsoJnBxdWV1ZS0+d29yayk7CiAJfQogCiAJZGVsX3RpbWVyX3N5bmMoJnBkLT50aW1lcik7CkBAIC00NzcsMTkgKzQ4OCwzOSBAQAogCWlmIChhdG9taWNfcmVhZCgmcGQtPnJlb3JkZXJfb2JqZWN0cykpCiAJCXBhZGF0YV9yZW9yZGVyKHBkKTsKIAotCWZvcl9lYWNoX2NwdShjcHUsIHBkLT5jcHVtYXNrKSB7Ci0JCXF1ZXVlID0gcGVyX2NwdV9wdHIocGQtPnF1ZXVlLCBjcHUpOwotCQlmbHVzaF93b3JrKCZxdWV1ZS0+c3dvcmspOworCWZvcl9lYWNoX2NwdShjcHUsIHBkLT5jcHVtYXNrLmNiY3B1KSB7CisJCXNxdWV1ZSA9IHBlcl9jcHVfcHRyKHBkLT5zcXVldWUsIGNwdSk7CisJCWZsdXNoX3dvcmsoJnNxdWV1ZS0+d29yayk7CiAJfQogCiAJQlVHX09OKGF0b21pY19yZWFkKCZwZC0+cmVmY250KSAhPSAwKTsKIH0KIAorc3RhdGljIHZvaWQgX19wYWRhdGFfc3RhcnQoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QpCit7CisJcGluc3QtPmZsYWdzIHw9IFBBREFUQV9JTklUOworfQorCitzdGF0aWMgdm9pZCBfX3BhZGF0YV9zdG9wKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KQoreworCWlmICghKHBpbnN0LT5mbGFncyAmIFBBREFUQV9JTklUKSkKKwkJcmV0dXJuOworCisJcGluc3QtPmZsYWdzICY9IH5QQURBVEFfSU5JVDsKKworCXN5bmNocm9uaXplX3JjdSgpOworCisJZ2V0X29ubGluZV9jcHVzKCk7CisJcGFkYXRhX2ZsdXNoX3F1ZXVlcyhwaW5zdC0+cGQpOworCXB1dF9vbmxpbmVfY3B1cygpOworfQorCiAvKiBSZXBsYWNlIHRoZSBpbnRlcm5hbCBjb250cm9sIHN0dWN0dXJlIHdpdGggYSBuZXcgb25lLiAqLwogc3RhdGljIHZvaWQgcGFkYXRhX3JlcGxhY2Uoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsCiAJCQkgICBzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGRfbmV3KQogewogCXN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZF9vbGQgPSBwaW5zdC0+cGQ7CisJaW50IG5vdGlmaWNhdGlvbl9tYXNrID0gMDsKIAogCXBpbnN0LT5mbGFncyB8PSBQQURBVEFfUkVTRVQ7CiAKQEAgLTQ5Nyw0MSArNTI4LDE2MiBAQAogCiAJc3luY2hyb25pemVfcmN1KCk7CiAKKwlpZiAoIWNwdW1hc2tfZXF1YWwocGRfb2xkLT5jcHVtYXNrLnBjcHUsIHBkX25ldy0+Y3B1bWFzay5wY3B1KSkKKwkJbm90aWZpY2F0aW9uX21hc2sgfD0gUEFEQVRBX0NQVV9QQVJBTExFTDsKKwlpZiAoIWNwdW1hc2tfZXF1YWwocGRfb2xkLT5jcHVtYXNrLmNiY3B1LCBwZF9uZXctPmNwdW1hc2suY2JjcHUpKQorCQlub3RpZmljYXRpb25fbWFzayB8PSBQQURBVEFfQ1BVX1NFUklBTDsKKwogCXBhZGF0YV9mbHVzaF9xdWV1ZXMocGRfb2xkKTsKIAlwYWRhdGFfZnJlZV9wZChwZF9vbGQpOwogCisJaWYgKG5vdGlmaWNhdGlvbl9tYXNrKQorCQlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZwaW5zdC0+Y3B1bWFza19jaGFuZ2Vfbm90aWZpZXIsCisJCQkJCSAgICAgbm90aWZpY2F0aW9uX21hc2ssCisJCQkJCSAgICAgJnBkX25ldy0+Y3B1bWFzayk7CisKIAlwaW5zdC0+ZmxhZ3MgJj0gflBBREFUQV9SRVNFVDsKIH0KIAogLyoqCi0gKiBwYWRhdGFfc2V0X2NwdW1hc2sgLSBzZXQgdGhlIGNwdW1hc2sgdGhhdCBwYWRhdGEgc2hvdWxkIHVzZQorICogcGFkYXRhX3JlZ2lzdGVyX2NwdW1hc2tfbm90aWZpZXIgLSBSZWdpc3RlcnMgYSBub3RpZmllciB0aGF0IHdpbGwgYmUgY2FsbGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZWl0aGVyIHBjcHUgb3IgY2JjcHUgb3IgYm90aCBjcHVtYXNrcyBjaGFuZ2UuCiAgKgotICogQHBpbnN0OiBwYWRhdGEgaW5zdGFuY2UKLSAqIEBjcHVtYXNrOiB0aGUgY3B1bWFzayB0byB1c2UKKyAqIEBwaW5zdDogQSBwb2luZXRlciB0byBwYWRhdGEgaW5zdGFuY2UKKyAqIEBuYmxvY2s6IEEgcG9pbnRlciB0byBub3RpZmllciBibG9jay4KICAqLwotaW50IHBhZGF0YV9zZXRfY3B1bWFzayhzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwKLQkJCWNwdW1hc2tfdmFyX3QgY3B1bWFzaykKK2ludCBwYWRhdGFfcmVnaXN0ZXJfY3B1bWFza19ub3RpZmllcihzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwKKwkJCQkgICAgIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmJsb2NrKQogewotCXN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZDsKLQlpbnQgZXJyID0gMDsKKwlyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBpbnN0LT5jcHVtYXNrX2NoYW5nZV9ub3RpZmllciwKKwkJCQkJCW5ibG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKHBhZGF0YV9yZWdpc3Rlcl9jcHVtYXNrX25vdGlmaWVyKTsKIAotCW11dGV4X2xvY2soJnBpbnN0LT5sb2NrKTsKKy8qKgorICogcGFkYXRhX3VucmVnaXN0ZXJfY3B1bWFza19ub3RpZmllciAtIFVucmVnaXN0ZXJzIGNwdW1hc2sgbm90aWZpZXIKKyAqICAgICAgICByZWdpc3RlcmVkIGVhcmxpZXIgIHVzaW5nIHBhZGF0YV9yZWdpc3Rlcl9jcHVtYXNrX25vdGlmaWVyCisgKgorICogQHBpbnN0OiBBIHBvaW50ZXIgdG8gZGF0YSBpbnN0YW5jZS4KKyAqIEBubG9jazogQSBwb2ludGVyIHRvIG5vdGlmaWVyIGJsb2NrLgorICovCitpbnQgcGFkYXRhX3VucmVnaXN0ZXJfY3B1bWFza19ub3RpZmllcihzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwKKwkJCQkgICAgICAgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYmxvY2spCit7CisJcmV0dXJuIGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoCisJCSZwaW5zdC0+Y3B1bWFza19jaGFuZ2Vfbm90aWZpZXIsCisJCW5ibG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKHBhZGF0YV91bnJlZ2lzdGVyX2NwdW1hc2tfbm90aWZpZXIpOwogCi0JZ2V0X29ubGluZV9jcHVzKCk7CiAKLQlwZCA9IHBhZGF0YV9hbGxvY19wZChwaW5zdCwgY3B1bWFzayk7Ci0JaWYgKCFwZCkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKKy8qIElmIGNwdW1hc2sgY29udGFpbnMgbm8gYWN0aXZlIGNwdSwgd2UgbWFyayB0aGUgaW5zdGFuY2UgYXMgaW52YWxpZC4gKi8KK3N0YXRpYyBib29sIHBhZGF0YV92YWxpZGF0ZV9jcHVtYXNrKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaykKK3sKKwlpZiAoIWNwdW1hc2tfaW50ZXJzZWN0cyhjcHVtYXNrLCBjcHVfYWN0aXZlX21hc2spKSB7CisJCXBpbnN0LT5mbGFncyB8PSBQQURBVEFfSU5WQUxJRDsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAotCWNwdW1hc2tfY29weShwaW5zdC0+Y3B1bWFzaywgY3B1bWFzayk7CisJcGluc3QtPmZsYWdzICY9IH5QQURBVEFfSU5WQUxJRDsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCBfX3BhZGF0YV9zZXRfY3B1bWFza3Moc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsCisJCQkJIGNwdW1hc2tfdmFyX3QgcGNwdW1hc2ssCisJCQkJIGNwdW1hc2tfdmFyX3QgY2JjcHVtYXNrKQoreworCWludCB2YWxpZDsKKwlzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQ7CisKKwl2YWxpZCA9IHBhZGF0YV92YWxpZGF0ZV9jcHVtYXNrKHBpbnN0LCBwY3B1bWFzayk7CisJaWYgKCF2YWxpZCkgeworCQlfX3BhZGF0YV9zdG9wKHBpbnN0KTsKKwkJZ290byBvdXRfcmVwbGFjZTsKKwl9CisKKwl2YWxpZCA9IHBhZGF0YV92YWxpZGF0ZV9jcHVtYXNrKHBpbnN0LCBjYmNwdW1hc2spOworCWlmICghdmFsaWQpCisJCV9fcGFkYXRhX3N0b3AocGluc3QpOworCitvdXRfcmVwbGFjZToKKwlwZCA9IHBhZGF0YV9hbGxvY19wZChwaW5zdCwgcGNwdW1hc2ssIGNiY3B1bWFzayk7CisJaWYgKCFwZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljcHVtYXNrX2NvcHkocGluc3QtPmNwdW1hc2sucGNwdSwgcGNwdW1hc2spOworCWNwdW1hc2tfY29weShwaW5zdC0+Y3B1bWFzay5jYmNwdSwgY2JjcHVtYXNrKTsKIAogCXBhZGF0YV9yZXBsYWNlKHBpbnN0LCBwZCk7CiAKKwlpZiAodmFsaWQpCisJCV9fcGFkYXRhX3N0YXJ0KHBpbnN0KTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHBhZGF0YV9zZXRfY3B1bWFza3MgLSBTZXQgYm90aCBwYXJhbGxlbCBhbmQgc2VyaWFsIGNwdW1hc2tzLiBUaGUgZmlyc3QKKyAqICAgICAgICAgICAgICAgICAgICAgICBvbmUgaXMgdXNlZCBieSBwYXJhbGxlbCB3b3JrZXJzIGFuZCB0aGUgc2Vjb25kIG9uZQorICogICAgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSB3b2tlcnMgZG9pbmcgc2VyaWFsaXphdGlvbi4KKyAqCisgKiBAcGluc3Q6IHBhZGF0YSBpbnN0YW5jZQorICogQHBjcHVtYXNrOiB0aGUgY3B1bWFzayB0byB1c2UgZm9yIHBhcmFsbGVsIHdvcmtlcnMKKyAqIEBjYmNwdW1hc2s6IHRoZSBjcHVtc2FrIHRvIHVzZSBmb3Igc2VyaWFsIHdvcmtlcnMKKyAqLworaW50IHBhZGF0YV9zZXRfY3B1bWFza3Moc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsIGNwdW1hc2tfdmFyX3QgcGNwdW1hc2ssCisJCQljcHVtYXNrX3Zhcl90IGNiY3B1bWFzaykKK3sKKwlpbnQgZXJyOworCisJbXV0ZXhfbG9jaygmcGluc3QtPmxvY2spOworCWdldF9vbmxpbmVfY3B1cygpOworCisJZXJyID0gX19wYWRhdGFfc2V0X2NwdW1hc2tzKHBpbnN0LCBwY3B1bWFzaywgY2JjcHVtYXNrKTsKKworCXB1dF9vbmxpbmVfY3B1cygpOworCW11dGV4X3VubG9jaygmcGluc3QtPmxvY2spOworCisJcmV0dXJuIGVycjsKKworfQorRVhQT1JUX1NZTUJPTChwYWRhdGFfc2V0X2NwdW1hc2tzKTsKKworLyoqCisgKiBwYWRhdGFfc2V0X2NwdW1hc2s6IFNldHMgc3BlY2lmaWVkIGJ5IEBjcHVtYXNrX3R5cGUgY3B1bWFzayB0byB0aGUgdmFsdWUKKyAqICAgICAgICAgICAgICAgICAgICAgZXF1aXZhbGVudCB0byBAY3B1bWFzay4KKyAqCisgKiBAcGluc3Q6IHBhZGF0YSBpbnN0YW5jZQorICogQGNwdW1hc2tfdHlwZTogUEFEQVRBX0NQVV9TRVJJQUwgb3IgUEFEQVRBX0NQVV9QQVJBTExFTCBjb3JyZXNwb25kaW5nCisgKiAgICAgICAgICAgICAgICB0byBwYXJhbGxlbCBhbmQgc2VyaWFsIGNwdW1hc2tzIHJlc3BlY3RpdmVseS4KKyAqIEBjcHVtYXNrOiB0aGUgY3B1bWFzayB0byB1c2UKKyAqLworaW50IHBhZGF0YV9zZXRfY3B1bWFzayhzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwgaW50IGNwdW1hc2tfdHlwZSwKKwkJICAgICAgIGNwdW1hc2tfdmFyX3QgY3B1bWFzaykKK3sKKwlzdHJ1Y3QgY3B1bWFzayAqc2VyaWFsX21hc2ssICpwYXJhbGxlbF9tYXNrOworCWludCBlcnIgPSAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmcGluc3QtPmxvY2spOworCWdldF9vbmxpbmVfY3B1cygpOworCisJc3dpdGNoIChjcHVtYXNrX3R5cGUpIHsKKwljYXNlIFBBREFUQV9DUFVfUEFSQUxMRUw6CisJCXNlcmlhbF9tYXNrID0gcGluc3QtPmNwdW1hc2suY2JjcHU7CisJCXBhcmFsbGVsX21hc2sgPSBjcHVtYXNrOworCQlicmVhazsKKwljYXNlIFBBREFUQV9DUFVfU0VSSUFMOgorCQlwYXJhbGxlbF9tYXNrID0gcGluc3QtPmNwdW1hc2sucGNwdTsKKwkJc2VyaWFsX21hc2sgPSBjcHVtYXNrOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkgZ290byBvdXQ7CisJfQorCisJZXJyID0gIF9fcGFkYXRhX3NldF9jcHVtYXNrcyhwaW5zdCwgcGFyYWxsZWxfbWFzaywgc2VyaWFsX21hc2spOworCiBvdXQ6CiAJcHV0X29ubGluZV9jcHVzKCk7Ci0KIAltdXRleF91bmxvY2soJnBpbnN0LT5sb2NrKTsKIAogCXJldHVybiBlcnI7CkBAIC01NDMsMzAgKzY5NSw0OCBAQAogCXN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZDsKIAogCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1X2FjdGl2ZV9tYXNrKSkgewotCQlwZCA9IHBhZGF0YV9hbGxvY19wZChwaW5zdCwgcGluc3QtPmNwdW1hc2spOworCQlwZCA9IHBhZGF0YV9hbGxvY19wZChwaW5zdCwgcGluc3QtPmNwdW1hc2sucGNwdSwKKwkJCQkgICAgIHBpbnN0LT5jcHVtYXNrLmNiY3B1KTsKIAkJaWYgKCFwZCkKIAkJCXJldHVybiAtRU5PTUVNOwogCiAJCXBhZGF0YV9yZXBsYWNlKHBpbnN0LCBwZCk7CisKKwkJaWYgKHBhZGF0YV92YWxpZGF0ZV9jcHVtYXNrKHBpbnN0LCBwaW5zdC0+Y3B1bWFzay5wY3B1KSAmJgorCQkgICAgcGFkYXRhX3ZhbGlkYXRlX2NwdW1hc2socGluc3QsIHBpbnN0LT5jcHVtYXNrLmNiY3B1KSkKKwkJCV9fcGFkYXRhX3N0YXJ0KHBpbnN0KTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotLyoqCi0gKiBwYWRhdGFfYWRkX2NwdSAtIGFkZCBhIGNwdSB0byB0aGUgcGFkYXRhIGNwdW1hc2sKKyAvKioKKyAqIHBhZGF0YV9hZGRfY3B1IC0gYWRkIGEgY3B1IHRvIG9uZSBvciBib3RoKHBhcmFsbGVsIGFuZCBzZXJpYWwpCisgKiAgICAgICAgICAgICAgICAgIHBhZGF0YSBjcHVtYXNrcy4KICAqCiAgKiBAcGluc3Q6IHBhZGF0YSBpbnN0YW5jZQogICogQGNwdTogY3B1IHRvIGFkZAorICogQG1hc2s6IGJpdG1hc2sgb2YgZmxhZ3Mgc3BlY2lmeWluZyB0byB3aGljaCBjcHVtYXNrIEBjcHUgc2h1bGQgYmUgYWRkZWQuCisgKiAgICAgICAgVGhlIEBtYXNrIG1heSBiZSBhbnkgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyBmbGFnczoKKyAqICAgICAgICAgIFBBREFUQV9DUFVfU0VSSUFMICAgLSBzZXJpYWwgY3B1bWFzaworICogICAgICAgICAgUEFEQVRBX0NQVV9QQVJBTExFTCAtIHBhcmFsbGVsIGNwdW1hc2sKICAqLwotaW50IHBhZGF0YV9hZGRfY3B1KHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LCBpbnQgY3B1KQorCitpbnQgcGFkYXRhX2FkZF9jcHUoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsIGludCBjcHUsIGludCBtYXNrKQogewogCWludCBlcnI7CiAKKwlpZiAoIShtYXNrICYgKFBBREFUQV9DUFVfU0VSSUFMIHwgUEFEQVRBX0NQVV9QQVJBTExFTCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCW11dGV4X2xvY2soJnBpbnN0LT5sb2NrKTsKIAogCWdldF9vbmxpbmVfY3B1cygpOwotCWNwdW1hc2tfc2V0X2NwdShjcHUsIHBpbnN0LT5jcHVtYXNrKTsKKwlpZiAobWFzayAmIFBBREFUQV9DUFVfU0VSSUFMKQorCQljcHVtYXNrX3NldF9jcHUoY3B1LCBwaW5zdC0+Y3B1bWFzay5jYmNwdSk7CisJaWYgKG1hc2sgJiBQQURBVEFfQ1BVX1BBUkFMTEVMKQorCQljcHVtYXNrX3NldF9jcHUoY3B1LCBwaW5zdC0+Y3B1bWFzay5wY3B1KTsKKwogCWVyciA9IF9fcGFkYXRhX2FkZF9jcHUocGluc3QsIGNwdSk7CiAJcHV0X29ubGluZV9jcHVzKCk7CiAKQEAgLTU3OCwxMCArNzQ4LDE2IEBACiAKIHN0YXRpYyBpbnQgX19wYWRhdGFfcmVtb3ZlX2NwdShzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwgaW50IGNwdSkKIHsKLQlzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQ7CisJc3RydWN0IHBhcmFsbGVsX2RhdGEgKnBkID0gTlVMTDsKIAogCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1X29ubGluZV9tYXNrKSkgewotCQlwZCA9IHBhZGF0YV9hbGxvY19wZChwaW5zdCwgcGluc3QtPmNwdW1hc2spOworCisJCWlmICghcGFkYXRhX3ZhbGlkYXRlX2NwdW1hc2socGluc3QsIHBpbnN0LT5jcHVtYXNrLnBjcHUpIHx8CisJCSAgICAhcGFkYXRhX3ZhbGlkYXRlX2NwdW1hc2socGluc3QsIHBpbnN0LT5jcHVtYXNrLmNiY3B1KSkKKwkJCV9fcGFkYXRhX3N0b3AocGluc3QpOworCisJCXBkID0gcGFkYXRhX2FsbG9jX3BkKHBpbnN0LCBwaW5zdC0+Y3B1bWFzay5wY3B1LAorCQkJCSAgICAgcGluc3QtPmNwdW1hc2suY2JjcHUpOwogCQlpZiAoIXBkKQogCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTU5MSwyMCArNzY3LDMyIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qKgotICogcGFkYXRhX3JlbW92ZV9jcHUgLSByZW1vdmUgYSBjcHUgZnJvbSB0aGUgcGFkYXRhIGNwdW1hc2sKKyAvKioKKyAqIHBhZGF0YV9yZW1vdmVfY3B1IC0gcmVtb3ZlIGEgY3B1IGZyb20gdGhlIG9uZSBvciBib3RoKHNlcmlhbCBhbmQgcGFyYWxlbGwpCisgKiAgICAgICAgICAgICAgICAgICAgIHBhZGF0YSBjcHVtYXNrcy4KICAqCiAgKiBAcGluc3Q6IHBhZGF0YSBpbnN0YW5jZQogICogQGNwdTogY3B1IHRvIHJlbW92ZQorICogQG1hc2s6IGJpdG1hc2sgc3BlY2lmeWluZyBmcm9tIHdoaWNoIGNwdW1hc2sgQGNwdSBzaG91bGQgYmUgcmVtb3ZlZAorICogICAgICAgIFRoZSBAbWFzayBtYXkgYmUgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgZmxhZ3M6CisgKiAgICAgICAgICBQQURBVEFfQ1BVX1NFUklBTCAgIC0gc2VyaWFsIGNwdW1hc2sKKyAqICAgICAgICAgIFBBREFUQV9DUFVfUEFSQUxMRUwgLSBwYXJhbGxlbCBjcHVtYXNrCiAgKi8KLWludCBwYWRhdGFfcmVtb3ZlX2NwdShzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwgaW50IGNwdSkKK2ludCBwYWRhdGFfcmVtb3ZlX2NwdShzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwgaW50IGNwdSwgaW50IG1hc2spCiB7CiAJaW50IGVycjsKIAorCWlmICghKG1hc2sgJiAoUEFEQVRBX0NQVV9TRVJJQUwgfCBQQURBVEFfQ1BVX1BBUkFMTEVMKSkpCisJCXJldHVybiAtRUlOVkFMOworCiAJbXV0ZXhfbG9jaygmcGluc3QtPmxvY2spOwogCiAJZ2V0X29ubGluZV9jcHVzKCk7Ci0JY3B1bWFza19jbGVhcl9jcHUoY3B1LCBwaW5zdC0+Y3B1bWFzayk7CisJaWYgKG1hc2sgJiBQQURBVEFfQ1BVX1NFUklBTCkKKwkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBwaW5zdC0+Y3B1bWFzay5jYmNwdSk7CisJaWYgKG1hc2sgJiBQQURBVEFfQ1BVX1BBUkFMTEVMKQorCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIHBpbnN0LT5jcHVtYXNrLnBjcHUpOworCiAJZXJyID0gX19wYWRhdGFfcmVtb3ZlX2NwdShwaW5zdCwgY3B1KTsKIAlwdXRfb25saW5lX2NwdXMoKTsKIApAQCAtNjE5LDExICs4MDcsMjAgQEAKICAqCiAgKiBAcGluc3Q6IHBhZGF0YSBpbnN0YW5jZSB0byBzdGFydAogICovCi12b2lkIHBhZGF0YV9zdGFydChzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCkKK2ludCBwYWRhdGFfc3RhcnQoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QpCiB7CisJaW50IGVyciA9IDA7CisKIAltdXRleF9sb2NrKCZwaW5zdC0+bG9jayk7Ci0JcGluc3QtPmZsYWdzIHw9IFBBREFUQV9JTklUOworCisJaWYgKHBpbnN0LT5mbGFncyAmIFBBREFUQV9JTlZBTElEKQorCQllcnIgPS1FSU5WQUw7CisKKwkgX19wYWRhdGFfc3RhcnQocGluc3QpOworCiAJbXV0ZXhfdW5sb2NrKCZwaW5zdC0+bG9jayk7CisKKwlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTChwYWRhdGFfc3RhcnQpOwogCkBAIC02MzUsMTIgKzgzMiwyMCBAQAogdm9pZCBwYWRhdGFfc3RvcChzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCkKIHsKIAltdXRleF9sb2NrKCZwaW5zdC0+bG9jayk7Ci0JcGluc3QtPmZsYWdzICY9IH5QQURBVEFfSU5JVDsKKwlfX3BhZGF0YV9zdG9wKHBpbnN0KTsKIAltdXRleF91bmxvY2soJnBpbnN0LT5sb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0wocGFkYXRhX3N0b3ApOwogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisKK3N0YXRpYyBpbmxpbmUgaW50IHBpbnN0X2hhc19jcHUoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsIGludCBjcHUpCit7CisJcmV0dXJuIGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBwaW5zdC0+Y3B1bWFzay5wY3B1KSB8fAorCQljcHVtYXNrX3Rlc3RfY3B1KGNwdSwgcGluc3QtPmNwdW1hc2suY2JjcHUpOworfQorCisKIHN0YXRpYyBpbnQgcGFkYXRhX2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKQEAgLTY1Myw3ICs4NTgsNyBAQAogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBDUFVfT05MSU5FOgogCWNhc2UgQ1BVX09OTElORV9GUk9aRU46Ci0JCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIHBpbnN0LT5jcHVtYXNrKSkKKwkJaWYgKCFwaW5zdF9oYXNfY3B1KHBpbnN0LCBjcHUpKQogCQkJYnJlYWs7CiAJCW11dGV4X2xvY2soJnBpbnN0LT5sb2NrKTsKIAkJZXJyID0gX19wYWRhdGFfYWRkX2NwdShwaW5zdCwgY3B1KTsKQEAgLTY2NCw3ICs4NjksNyBAQAogCiAJY2FzZSBDUFVfRE9XTl9QUkVQQVJFOgogCWNhc2UgQ1BVX0RPV05fUFJFUEFSRV9GUk9aRU46Ci0JCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIHBpbnN0LT5jcHVtYXNrKSkKKwkJaWYgKCFwaW5zdF9oYXNfY3B1KHBpbnN0LCBjcHUpKQogCQkJYnJlYWs7CiAJCW11dGV4X2xvY2soJnBpbnN0LT5sb2NrKTsKIAkJZXJyID0gX19wYWRhdGFfcmVtb3ZlX2NwdShwaW5zdCwgY3B1KTsKQEAgLTY3NSw3ICs4ODAsNyBAQAogCiAJY2FzZSBDUFVfVVBfQ0FOQ0VMRUQ6CiAJY2FzZSBDUFVfVVBfQ0FOQ0VMRURfRlJPWkVOOgotCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBwaW5zdC0+Y3B1bWFzaykpCisJCWlmICghcGluc3RfaGFzX2NwdShwaW5zdCwgY3B1KSkKIAkJCWJyZWFrOwogCQltdXRleF9sb2NrKCZwaW5zdC0+bG9jayk7CiAJCV9fcGFkYXRhX3JlbW92ZV9jcHUocGluc3QsIGNwdSk7CkBAIC02ODMsNyArODg4LDcgQEAKIAogCWNhc2UgQ1BVX0RPV05fRkFJTEVEOgogCWNhc2UgQ1BVX0RPV05fRkFJTEVEX0ZST1pFTjoKLQkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgcGluc3QtPmNwdW1hc2spKQorCQlpZiAoIXBpbnN0X2hhc19jcHUocGluc3QsIGNwdSkpCiAJCQlicmVhazsKIAkJbXV0ZXhfbG9jaygmcGluc3QtPmxvY2spOwogCQlfX3BhZGF0YV9hZGRfY3B1KHBpbnN0LCBjcHUpOwpAQCAtNjk0LDM2ICs4OTksMjAyIEBACiB9CiAjZW5kaWYKIAotLyoqCi0gKiBwYWRhdGFfYWxsb2MgLSBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIHBhZGF0YSBpbnN0YW5jZQotICoKLSAqIEBjcHVtYXNrOiBjcHVtYXNrIHRoYXQgcGFkYXRhIHVzZXMgZm9yIHBhcmFsbGVsaXphdGlvbgotICogQHdxOiB3b3JrcXVldWUgdG8gdXNlIGZvciB0aGUgYWxsb2NhdGVkIHBhZGF0YSBpbnN0YW5jZQorc3RhdGljIHZvaWQgX19wYWRhdGFfZnJlZShzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCkKK3sKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwl1bnJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmcGluc3QtPmNwdV9ub3RpZmllcik7CisjZW5kaWYKKworCXBhZGF0YV9zdG9wKHBpbnN0KTsKKwlwYWRhdGFfZnJlZV9wZChwaW5zdC0+cGQpOworCWZyZWVfY3B1bWFza192YXIocGluc3QtPmNwdW1hc2sucGNwdSk7CisJZnJlZV9jcHVtYXNrX3ZhcihwaW5zdC0+Y3B1bWFzay5jYmNwdSk7CisJa2ZyZWUocGluc3QpOworfQorCisjZGVmaW5lIGtvYmoycGluc3QoX2tvYmopCQkJCQlcCisJY29udGFpbmVyX29mKF9rb2JqLCBzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlLCBrb2JqKQorI2RlZmluZSBhdHRyMnBlbnRyeShfYXR0cikJCQkJCVwKKwljb250YWluZXJfb2YoX2F0dHIsIHN0cnVjdCBwYWRhdGFfc3lzZnNfZW50cnksIGF0dHIpCisKK3N0YXRpYyB2b2lkIHBhZGF0YV9zeXNmc19yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKQoreworCXN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0ID0ga29iajJwaW5zdChrb2JqKTsKKwlfX3BhZGF0YV9mcmVlKHBpbnN0KTsKK30KKworc3RydWN0IHBhZGF0YV9zeXNmc19lbnRyeSB7CisJc3RydWN0IGF0dHJpYnV0ZSBhdHRyOworCXNzaXplX3QgKCpzaG93KShzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICosIHN0cnVjdCBhdHRyaWJ1dGUgKiwgY2hhciAqKTsKKwlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKiwgc3RydWN0IGF0dHJpYnV0ZSAqLAorCQkJIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK307CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfY3B1bWFzayhzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwKKwkJCSAgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCAgY2hhciAqYnVmKQoreworCXN0cnVjdCBjcHVtYXNrICpjcHVtYXNrOworCXNzaXplX3QgbGVuOworCisJbXV0ZXhfbG9jaygmcGluc3QtPmxvY2spOworCWlmICghc3RyY21wKGF0dHItPm5hbWUsICJzZXJpYWxfY3B1bWFzayIpKQorCQljcHVtYXNrID0gcGluc3QtPmNwdW1hc2suY2JjcHU7CisJZWxzZQorCQljcHVtYXNrID0gcGluc3QtPmNwdW1hc2sucGNwdTsKKworCWxlbiA9IGJpdG1hcF9zY25wcmludGYoYnVmLCBQQUdFX1NJWkUsIGNwdW1hc2tfYml0cyhjcHVtYXNrKSwKKwkJCSAgICAgICBucl9jcHVfaWRzKTsKKwlpZiAoUEFHRV9TSVpFIC0gbGVuIDwgMikKKwkJbGVuID0gLUVJTlZBTDsKKwllbHNlCisJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIlxuIik7CisKKwltdXRleF91bmxvY2soJnBpbnN0LT5sb2NrKTsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9jcHVtYXNrKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LAorCQkJICAgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwljcHVtYXNrX3Zhcl90IG5ld19jcHVtYXNrOworCXNzaXplX3QgcmV0OworCWludCBtYXNrX3R5cGU7CisKKwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZuZXdfY3B1bWFzaywgR0ZQX0tFUk5FTCkpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gYml0bWFwX3BhcnNlKGJ1ZiwgY291bnQsIGNwdW1hc2tfYml0cyhuZXdfY3B1bWFzayksCisJCQkgICBucl9jcHVtYXNrX2JpdHMpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCW1hc2tfdHlwZSA9ICFzdHJjbXAoYXR0ci0+bmFtZSwgInNlcmlhbF9jcHVtYXNrIikgPworCQlQQURBVEFfQ1BVX1NFUklBTCA6IFBBREFUQV9DUFVfUEFSQUxMRUw7CisJcmV0ID0gcGFkYXRhX3NldF9jcHVtYXNrKHBpbnN0LCBtYXNrX3R5cGUsIG5ld19jcHVtYXNrKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gY291bnQ7CisKK291dDoKKwlmcmVlX2NwdW1hc2tfdmFyKG5ld19jcHVtYXNrKTsKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIFBBREFUQV9BVFRSX1JXKF9uYW1lLCBfc2hvd19uYW1lLCBfc3RvcmVfbmFtZSkJCVwKKwlzdGF0aWMgc3RydWN0IHBhZGF0YV9zeXNmc19lbnRyeSBfbmFtZSMjX2F0dHIgPQkJXAorCQlfX0FUVFIoX25hbWUsIDA2NDQsIF9zaG93X25hbWUsIF9zdG9yZV9uYW1lKQorI2RlZmluZSBQQURBVEFfQVRUUl9STyhfbmFtZSwgX3Nob3dfbmFtZSkJCVwKKwlzdGF0aWMgc3RydWN0IHBhZGF0YV9zeXNmc19lbnRyeSBfbmFtZSMjX2F0dHIgPSBcCisJCV9fQVRUUihfbmFtZSwgMDQwMCwgX3Nob3dfbmFtZSwgTlVMTCkKKworUEFEQVRBX0FUVFJfUlcoc2VyaWFsX2NwdW1hc2ssIHNob3dfY3B1bWFzaywgc3RvcmVfY3B1bWFzayk7CitQQURBVEFfQVRUUl9SVyhwYXJhbGxlbF9jcHVtYXNrLCBzaG93X2NwdW1hc2ssIHN0b3JlX2NwdW1hc2spOworCisvKgorICogUGFkYXRhIHN5c2ZzIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgb2JqZWN0czoKKyAqIHNlcmlhbF9jcHVtYXNrICAgW1JXXSAtIGNwdW1hc2sgZm9yIHNlcmlhbCB3b3JrZXJzCisgKiBwYXJhbGxlbF9jcHVtYXNrIFtSV10gLSBjcHVtYXNrIGZvciBwYXJhbGxlbCB3b3JrZXJzCiAgKi8KLXN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBhZGF0YV9hbGxvYyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKLQkJCQkgICAgIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSkKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpwYWRhdGFfZGVmYXVsdF9hdHRyc1tdID0geworCSZzZXJpYWxfY3B1bWFza19hdHRyLmF0dHIsCisJJnBhcmFsbGVsX2NwdW1hc2tfYXR0ci5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3NpemVfdCBwYWRhdGFfc3lzZnNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0OwotCXN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZDsKKwlzdHJ1Y3QgcGFkYXRhX3N5c2ZzX2VudHJ5ICpwZW50cnk7CisJc3NpemVfdCByZXQgPSAtRUlPOworCisJcGluc3QgPSBrb2JqMnBpbnN0KGtvYmopOworCXBlbnRyeSA9IGF0dHIycGVudHJ5KGF0dHIpOworCWlmIChwZW50cnktPnNob3cpCisJCXJldCA9IHBlbnRyeS0+c2hvdyhwaW5zdCwgYXR0ciwgYnVmKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBhZGF0YV9zeXNmc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0OworCXN0cnVjdCBwYWRhdGFfc3lzZnNfZW50cnkgKnBlbnRyeTsKKwlzc2l6ZV90IHJldCA9IC1FSU87CisKKwlwaW5zdCA9IGtvYmoycGluc3Qoa29iaik7CisJcGVudHJ5ID0gYXR0cjJwZW50cnkoYXR0cik7CisJaWYgKHBlbnRyeS0+c2hvdykKKwkJcmV0ID0gcGVudHJ5LT5zdG9yZShwaW5zdCwgYXR0ciwgYnVmLCBjb3VudCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyBwYWRhdGFfc3lzZnNfb3BzID0geworCS5zaG93ID0gcGFkYXRhX3N5c2ZzX3Nob3csCisJLnN0b3JlID0gcGFkYXRhX3N5c2ZzX3N0b3JlLAorfTsKKworc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgcGFkYXRhX2F0dHJfdHlwZSA9IHsKKwkuc3lzZnNfb3BzID0gJnBhZGF0YV9zeXNmc19vcHMsCisJLmRlZmF1bHRfYXR0cnMgPSBwYWRhdGFfZGVmYXVsdF9hdHRycywKKwkucmVsZWFzZSA9IHBhZGF0YV9zeXNmc19yZWxlYXNlLAorfTsKKworLyoqCisgKiBwYWRhdGFfYWxsb2NfcG9zc2libGUgLSBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBwYWRhdGEgaW5zdGFuY2UuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIGNwdV9wb3NzaWJsZV9tYXNrIGZvciBzZXJpYWwgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbGxlbCB3b3JrZXJzLgorICoKKyAqIEB3cTogd29ya3F1ZXVlIHRvIHVzZSBmb3IgdGhlIGFsbG9jYXRlZCBwYWRhdGEgaW5zdGFuY2UKKyAqLworc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGFkYXRhX2FsbG9jX3Bvc3NpYmxlKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSkKK3sKKwlyZXR1cm4gcGFkYXRhX2FsbG9jKHdxLCBjcHVfcG9zc2libGVfbWFzaywgY3B1X3Bvc3NpYmxlX21hc2spOworfQorRVhQT1JUX1NZTUJPTChwYWRhdGFfYWxsb2NfcG9zc2libGUpOworCisvKioKKyAqIHBhZGF0YV9hbGxvYyAtIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgcGFkYXRhIGluc3RhbmNlIGFuZCBzcGVjaWZ5CisgKiAgICAgICAgICAgICAgICBjcHVtYXNrcyBmb3Igc2VyaWFsIGFuZCBwYXJhbGxlbCB3b3JrZXJzLgorICoKKyAqIEB3cTogd29ya3F1ZXVlIHRvIHVzZSBmb3IgdGhlIGFsbG9jYXRlZCBwYWRhdGEgaW5zdGFuY2UKKyAqIEBwY3B1bWFzazogY3B1bWFzayB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcGFkYXRhIHBhcmFsbGVsaXphdGlvbgorICogQGNiY3B1bWFzazogY3B1bWFzayB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcGFkYXRhIHNlcmlhbGl6YXRpb24KKyAqLworc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGFkYXRhX2FsbG9jKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpwY3B1bWFzaywKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjYmNwdW1hc2spCit7CisJc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3Q7CisJc3RydWN0IHBhcmFsbGVsX2RhdGEgKnBkID0gTlVMTDsKIAogCXBpbnN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSksIEdGUF9LRVJORUwpOwogCWlmICghcGluc3QpCiAJCWdvdG8gZXJyOwogCiAJZ2V0X29ubGluZV9jcHVzKCk7Ci0KLQlwZCA9IHBhZGF0YV9hbGxvY19wZChwaW5zdCwgY3B1bWFzayk7Ci0JaWYgKCFwZCkKKwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZwaW5zdC0+Y3B1bWFzay5wY3B1LCBHRlBfS0VSTkVMKSkKIAkJZ290byBlcnJfZnJlZV9pbnN0OworCWlmICghYWxsb2NfY3B1bWFza192YXIoJnBpbnN0LT5jcHVtYXNrLmNiY3B1LCBHRlBfS0VSTkVMKSkgeworCQlmcmVlX2NwdW1hc2tfdmFyKHBpbnN0LT5jcHVtYXNrLnBjcHUpOworCQlnb3RvIGVycl9mcmVlX2luc3Q7CisJfQorCWlmICghcGFkYXRhX3ZhbGlkYXRlX2NwdW1hc2socGluc3QsIHBjcHVtYXNrKSB8fAorCSAgICAhcGFkYXRhX3ZhbGlkYXRlX2NwdW1hc2socGluc3QsIGNiY3B1bWFzaykpCisJCWdvdG8gZXJyX2ZyZWVfbWFza3M7CiAKLQlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZwaW5zdC0+Y3B1bWFzaywgR0ZQX0tFUk5FTCkpCi0JCWdvdG8gZXJyX2ZyZWVfcGQ7CisJcGQgPSBwYWRhdGFfYWxsb2NfcGQocGluc3QsIHBjcHVtYXNrLCBjYmNwdW1hc2spOworCWlmICghcGQpCisJCWdvdG8gZXJyX2ZyZWVfbWFza3M7CiAKIAlyY3VfYXNzaWduX3BvaW50ZXIocGluc3QtPnBkLCBwZCk7CiAKIAlwaW5zdC0+d3EgPSB3cTsKIAotCWNwdW1hc2tfY29weShwaW5zdC0+Y3B1bWFzaywgY3B1bWFzayk7CisJY3B1bWFza19jb3B5KHBpbnN0LT5jcHVtYXNrLnBjcHUsIHBjcHVtYXNrKTsKKwljcHVtYXNrX2NvcHkocGluc3QtPmNwdW1hc2suY2JjcHUsIGNiY3B1bWFzayk7CiAKIAlwaW5zdC0+ZmxhZ3MgPSAwOwogCkBAIC03MzUsMTIgKzExMDYsMTUgQEAKIAogCXB1dF9vbmxpbmVfY3B1cygpOwogCisJQkxPQ0tJTkdfSU5JVF9OT1RJRklFUl9IRUFEKCZwaW5zdC0+Y3B1bWFza19jaGFuZ2Vfbm90aWZpZXIpOworCWtvYmplY3RfaW5pdCgmcGluc3QtPmtvYmosICZwYWRhdGFfYXR0cl90eXBlKTsKIAltdXRleF9pbml0KCZwaW5zdC0+bG9jayk7CiAKIAlyZXR1cm4gcGluc3Q7CiAKLWVycl9mcmVlX3BkOgotCXBhZGF0YV9mcmVlX3BkKHBkKTsKK2Vycl9mcmVlX21hc2tzOgorCWZyZWVfY3B1bWFza192YXIocGluc3QtPmNwdW1hc2sucGNwdSk7CisJZnJlZV9jcHVtYXNrX3ZhcihwaW5zdC0+Y3B1bWFzay5jYmNwdSk7CiBlcnJfZnJlZV9pbnN0OgogCWtmcmVlKHBpbnN0KTsKIAlwdXRfb25saW5lX2NwdXMoKTsKQEAgLTc1NiwxOSArMTEzMCw2IEBACiAgKi8KIHZvaWQgcGFkYXRhX2ZyZWUoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QpCiB7Ci0JcGFkYXRhX3N0b3AocGluc3QpOwotCi0Jc3luY2hyb25pemVfcmN1KCk7Ci0KLSNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLQl1bnJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmcGluc3QtPmNwdV9ub3RpZmllcik7Ci0jZW5kaWYKLQlnZXRfb25saW5lX2NwdXMoKTsKLQlwYWRhdGFfZmx1c2hfcXVldWVzKHBpbnN0LT5wZCk7Ci0JcHV0X29ubGluZV9jcHVzKCk7Ci0KLQlwYWRhdGFfZnJlZV9wZChwaW5zdC0+cGQpOwotCWZyZWVfY3B1bWFza192YXIocGluc3QtPmNwdW1hc2spOwotCWtmcmVlKHBpbnN0KTsKKwlrb2JqZWN0X3B1dCgmcGluc3QtPmtvYmopOwogfQogRVhQT1JUX1NZTUJPTChwYWRhdGFfZnJlZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcGVyZl9ldmVudC5jIGIva2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCBmZjg2YzU1Li40MDNkMTgwIDEwMDY0NAotLS0gYS9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogCiBzdGF0aWMgaW5saW5lIHU2NCBwZXJmX2Nsb2NrKHZvaWQpCiB7Ci0JcmV0dXJuIGNwdV9jbG9jayhyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlyZXR1cm4gbG9jYWxfY2xvY2soKTsKIH0KIAogLyoKQEAgLTY3NSw3ICs2NzUsNiBAQAogCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgKnBhcnRpYWxfZ3JvdXAgPSBOVUxMOwogCWNvbnN0IHN0cnVjdCBwbXUgKnBtdSA9IGdyb3VwX2V2ZW50LT5wbXU7CiAJYm9vbCB0eG4gPSBmYWxzZTsKLQlpbnQgcmV0OwogCiAJaWYgKGdyb3VwX2V2ZW50LT5zdGF0ZSA9PSBQRVJGX0VWRU5UX1NUQVRFX09GRikKIAkJcmV0dXJuIDA7CkBAIC03MDMsMTUgKzcwMiw5IEBACiAJCX0KIAl9CiAKLQlpZiAoIXR4bikKKwlpZiAoIXR4biB8fCAhcG11LT5jb21taXRfdHhuKHBtdSkpCiAJCXJldHVybiAwOwogCi0JcmV0ID0gcG11LT5jb21taXRfdHhuKHBtdSk7Ci0JaWYgKCFyZXQpIHsKLQkJcG11LT5jYW5jZWxfdHhuKHBtdSk7Ci0JCXJldHVybiAwOwotCX0KLQogZ3JvdXBfZXJyb3I6CiAJLyoKIAkgKiBHcm91cHMgY2FuIGJlIHNjaGVkdWxlZCBpbiBhcyBvbmUgdW5pdCBvbmx5LCBzbyB1bmRvIGFueQpAQCAtMTE1NSw5ICsxMTQ4LDkgQEAKIAkgKiBJbiBvcmRlciB0byBrZWVwIHBlci10YXNrIHN0YXRzIHJlbGlhYmxlIHdlIG5lZWQgdG8gZmxpcCB0aGUgZXZlbnQKIAkgKiB2YWx1ZXMgd2hlbiB3ZSBmbGlwIHRoZSBjb250ZXh0cy4KIAkgKi8KLQl2YWx1ZSA9IGF0b21pYzY0X3JlYWQoJm5leHRfZXZlbnQtPmNvdW50KTsKLQl2YWx1ZSA9IGF0b21pYzY0X3hjaGcoJmV2ZW50LT5jb3VudCwgdmFsdWUpOwotCWF0b21pYzY0X3NldCgmbmV4dF9ldmVudC0+Y291bnQsIHZhbHVlKTsKKwl2YWx1ZSA9IGxvY2FsNjRfcmVhZCgmbmV4dF9ldmVudC0+Y291bnQpOworCXZhbHVlID0gbG9jYWw2NF94Y2hnKCZldmVudC0+Y291bnQsIHZhbHVlKTsKKwlsb2NhbDY0X3NldCgmbmV4dF9ldmVudC0+Y291bnQsIHZhbHVlKTsKIAogCXN3YXAoZXZlbnQtPnRvdGFsX3RpbWVfZW5hYmxlZCwgbmV4dF9ldmVudC0+dG90YWxfdGltZV9lbmFibGVkKTsKIAlzd2FwKGV2ZW50LT50b3RhbF90aW1lX3J1bm5pbmcsIG5leHRfZXZlbnQtPnRvdGFsX3RpbWVfcnVubmluZyk7CkBAIC0xNTQ3LDEwICsxNTQwLDEwIEBACiAKIAlod2MtPnNhbXBsZV9wZXJpb2QgPSBzYW1wbGVfcGVyaW9kOwogCi0JaWYgKGF0b21pYzY0X3JlYWQoJmh3Yy0+cGVyaW9kX2xlZnQpID4gOCpzYW1wbGVfcGVyaW9kKSB7CisJaWYgKGxvY2FsNjRfcmVhZCgmaHdjLT5wZXJpb2RfbGVmdCkgPiA4KnNhbXBsZV9wZXJpb2QpIHsKIAkJcGVyZl9kaXNhYmxlKCk7CiAJCXBlcmZfZXZlbnRfc3RvcChldmVudCk7Ci0JCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgMCk7CisJCWxvY2FsNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCAwKTsKIAkJcGVyZl9ldmVudF9zdGFydChldmVudCk7CiAJCXBlcmZfZW5hYmxlKCk7CiAJfQpAQCAtMTU5MSw3ICsxNTg0LDcgQEAKIAogCQlwZXJmX2Rpc2FibGUoKTsKIAkJZXZlbnQtPnBtdS0+cmVhZChldmVudCk7Ci0JCW5vdyA9IGF0b21pYzY0X3JlYWQoJmV2ZW50LT5jb3VudCk7CisJCW5vdyA9IGxvY2FsNjRfcmVhZCgmZXZlbnQtPmNvdW50KTsKIAkJZGVsdGEgPSBub3cgLSBod2MtPmZyZXFfY291bnRfc3RhbXA7CiAJCWh3Yy0+ZnJlcV9jb3VudF9zdGFtcCA9IG5vdzsKIApAQCAtMTc0Myw2ICsxNzM2LDExIEBACiAJZXZlbnQtPnBtdS0+cmVhZChldmVudCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTY0IHBlcmZfZXZlbnRfY291bnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiBsb2NhbDY0X3JlYWQoJmV2ZW50LT5jb3VudCkgKyBhdG9taWM2NF9yZWFkKCZldmVudC0+Y2hpbGRfY291bnQpOworfQorCiBzdGF0aWMgdTY0IHBlcmZfZXZlbnRfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CiAJLyoKQEAgLTE3NjIsNyArMTc2MCw3IEBACiAJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPmxvY2ssIGZsYWdzKTsKIAl9CiAKLQlyZXR1cm4gYXRvbWljNjRfcmVhZCgmZXZlbnQtPmNvdW50KTsKKwlyZXR1cm4gcGVyZl9ldmVudF9jb3VudChldmVudCk7CiB9CiAKIC8qCkBAIC0xODgzLDcgKzE4ODEsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBwZXJmX3BlbmRpbmdfc3luYyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOwotc3RhdGljIHZvaWQgcGVyZl9tbWFwX2RhdGFfcHV0KHN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSk7CitzdGF0aWMgdm9pZCBwZXJmX2J1ZmZlcl9wdXQoc3RydWN0IHBlcmZfYnVmZmVyICpidWZmZXIpOwogCiBzdGF0aWMgdm9pZCBmcmVlX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKQEAgLTE4OTEsNyArMTg4OSw3IEBACiAKIAlpZiAoIWV2ZW50LT5wYXJlbnQpIHsKIAkJYXRvbWljX2RlYygmbnJfZXZlbnRzKTsKLQkJaWYgKGV2ZW50LT5hdHRyLm1tYXApCisJCWlmIChldmVudC0+YXR0ci5tbWFwIHx8IGV2ZW50LT5hdHRyLm1tYXBfZGF0YSkKIAkJCWF0b21pY19kZWMoJm5yX21tYXBfZXZlbnRzKTsKIAkJaWYgKGV2ZW50LT5hdHRyLmNvbW0pCiAJCQlhdG9taWNfZGVjKCZucl9jb21tX2V2ZW50cyk7CkBAIC0xODk5LDkgKzE4OTcsOSBAQAogCQkJYXRvbWljX2RlYygmbnJfdGFza19ldmVudHMpOwogCX0KIAotCWlmIChldmVudC0+ZGF0YSkgewotCQlwZXJmX21tYXBfZGF0YV9wdXQoZXZlbnQtPmRhdGEpOwotCQlldmVudC0+ZGF0YSA9IE5VTEw7CisJaWYgKGV2ZW50LT5idWZmZXIpIHsKKwkJcGVyZl9idWZmZXJfcHV0KGV2ZW50LT5idWZmZXIpOworCQlldmVudC0+YnVmZmVyID0gTlVMTDsKIAl9CiAKIAlpZiAoZXZlbnQtPmRlc3Ryb3kpCkBAIC0yMTI2LDEzICsyMTI0LDEzIEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHBlcmZfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOworCXN0cnVjdCBwZXJmX2J1ZmZlciAqYnVmZmVyOwogCXVuc2lnbmVkIGludCBldmVudHMgPSBQT0xMX0hVUDsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlkYXRhID0gcmN1X2RlcmVmZXJlbmNlKGV2ZW50LT5kYXRhKTsKLQlpZiAoZGF0YSkKLQkJZXZlbnRzID0gYXRvbWljX3hjaGcoJmRhdGEtPnBvbGwsIDApOworCWJ1ZmZlciA9IHJjdV9kZXJlZmVyZW5jZShldmVudC0+YnVmZmVyKTsKKwlpZiAoYnVmZmVyKQorCQlldmVudHMgPSBhdG9taWNfeGNoZygmYnVmZmVyLT5wb2xsLCAwKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCXBvbGxfd2FpdChmaWxlLCAmZXZlbnQtPndhaXRxLCB3YWl0KTsKQEAgLTIxNDMsNyArMjE0MSw3IEBACiBzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X3Jlc2V0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAkodm9pZClwZXJmX2V2ZW50X3JlYWQoZXZlbnQpOwotCWF0b21pYzY0X3NldCgmZXZlbnQtPmNvdW50LCAwKTsKKwlsb2NhbDY0X3NldCgmZXZlbnQtPmNvdW50LCAwKTsKIAlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7CiB9CiAKQEAgLTIzNDIsMTQgKzIzNDAsMTQgQEAKIHZvaWQgcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2Uoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewogCXN0cnVjdCBwZXJmX2V2ZW50X21tYXBfcGFnZSAqdXNlcnBnOwotCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgcGVyZl9idWZmZXIgKmJ1ZmZlcjsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlkYXRhID0gcmN1X2RlcmVmZXJlbmNlKGV2ZW50LT5kYXRhKTsKLQlpZiAoIWRhdGEpCisJYnVmZmVyID0gcmN1X2RlcmVmZXJlbmNlKGV2ZW50LT5idWZmZXIpOworCWlmICghYnVmZmVyKQogCQlnb3RvIHVubG9jazsKIAotCXVzZXJwZyA9IGRhdGEtPnVzZXJfcGFnZTsKKwl1c2VycGcgPSBidWZmZXItPnVzZXJfcGFnZTsKIAogCS8qCiAJICogRGlzYWJsZSBwcmVlbXB0aW9uIHNvIGFzIHRvIG5vdCBsZXQgdGhlIGNvcnJlc3BvbmRpbmcgdXNlci1zcGFjZQpAQCAtMjM1OSw5ICsyMzU3LDkgQEAKIAkrK3VzZXJwZy0+bG9jazsKIAliYXJyaWVyKCk7CiAJdXNlcnBnLT5pbmRleCA9IHBlcmZfZXZlbnRfaW5kZXgoZXZlbnQpOwotCXVzZXJwZy0+b2Zmc2V0ID0gYXRvbWljNjRfcmVhZCgmZXZlbnQtPmNvdW50KTsKKwl1c2VycGctPm9mZnNldCA9IHBlcmZfZXZlbnRfY291bnQoZXZlbnQpOwogCWlmIChldmVudC0+c3RhdGUgPT0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkUpCi0JCXVzZXJwZy0+b2Zmc2V0IC09IGF0b21pYzY0X3JlYWQoJmV2ZW50LT5ody5wcmV2X2NvdW50KTsKKwkJdXNlcnBnLT5vZmZzZXQgLT0gbG9jYWw2NF9yZWFkKCZldmVudC0+aHcucHJldl9jb3VudCk7CiAKIAl1c2VycGctPnRpbWVfZW5hYmxlZCA9IGV2ZW50LT50b3RhbF90aW1lX2VuYWJsZWQgKwogCQkJYXRvbWljNjRfcmVhZCgmZXZlbnQtPmNoaWxkX3RvdGFsX3RpbWVfZW5hYmxlZCk7CkBAIC0yMzc2LDYgKzIzNzQsMjUgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgcGVyZl9kYXRhX3NpemUoc3RydWN0IHBlcmZfYnVmZmVyICpidWZmZXIpOworCitzdGF0aWMgdm9pZAorcGVyZl9idWZmZXJfaW5pdChzdHJ1Y3QgcGVyZl9idWZmZXIgKmJ1ZmZlciwgbG9uZyB3YXRlcm1hcmssIGludCBmbGFncykKK3sKKwlsb25nIG1heF9zaXplID0gcGVyZl9kYXRhX3NpemUoYnVmZmVyKTsKKworCWlmICh3YXRlcm1hcmspCisJCWJ1ZmZlci0+d2F0ZXJtYXJrID0gbWluKG1heF9zaXplLCB3YXRlcm1hcmspOworCisJaWYgKCFidWZmZXItPndhdGVybWFyaykKKwkJYnVmZmVyLT53YXRlcm1hcmsgPSBtYXhfc2l6ZSAvIDI7CisKKwlpZiAoZmxhZ3MgJiBQRVJGX0JVRkZFUl9XUklUQUJMRSkKKwkJYnVmZmVyLT53cml0YWJsZSA9IDE7CisKKwlhdG9taWNfc2V0KCZidWZmZXItPnJlZmNvdW50LCAxKTsKK30KKwogI2lmbmRlZiBDT05GSUdfUEVSRl9VU0VfVk1BTExPQwogCiAvKgpAQCAtMjM4MywxNSArMjQwMCwxNSBAQAogICovCiAKIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqCi1wZXJmX21tYXBfdG9fcGFnZShzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEsIHVuc2lnbmVkIGxvbmcgcGdvZmYpCitwZXJmX21tYXBfdG9fcGFnZShzdHJ1Y3QgcGVyZl9idWZmZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBwZ29mZikKIHsKLQlpZiAocGdvZmYgPiBkYXRhLT5ucl9wYWdlcykKKwlpZiAocGdvZmYgPiBidWZmZXItPm5yX3BhZ2VzKQogCQlyZXR1cm4gTlVMTDsKIAogCWlmIChwZ29mZiA9PSAwKQotCQlyZXR1cm4gdmlydF90b19wYWdlKGRhdGEtPnVzZXJfcGFnZSk7CisJCXJldHVybiB2aXJ0X3RvX3BhZ2UoYnVmZmVyLT51c2VyX3BhZ2UpOwogCi0JcmV0dXJuIHZpcnRfdG9fcGFnZShkYXRhLT5kYXRhX3BhZ2VzW3Bnb2ZmIC0gMV0pOworCXJldHVybiB2aXJ0X3RvX3BhZ2UoYnVmZmVyLT5kYXRhX3BhZ2VzW3Bnb2ZmIC0gMV0pOwogfQogCiBzdGF0aWMgdm9pZCAqcGVyZl9tbWFwX2FsbG9jX3BhZ2UoaW50IGNwdSkKQEAgLTI0MDcsNDIgKzI0MjQsNDQgQEAKIAlyZXR1cm4gcGFnZV9hZGRyZXNzKHBhZ2UpOwogfQogCi1zdGF0aWMgc3RydWN0IHBlcmZfbW1hcF9kYXRhICoKLXBlcmZfbW1hcF9kYXRhX2FsbG9jKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IG5yX3BhZ2VzKQorc3RhdGljIHN0cnVjdCBwZXJmX2J1ZmZlciAqCitwZXJmX2J1ZmZlcl9hbGxvYyhpbnQgbnJfcGFnZXMsIGxvbmcgd2F0ZXJtYXJrLCBpbnQgY3B1LCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOworCXN0cnVjdCBwZXJmX2J1ZmZlciAqYnVmZmVyOwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAlpbnQgaTsKIAotCXNpemUgPSBzaXplb2Yoc3RydWN0IHBlcmZfbW1hcF9kYXRhKTsKKwlzaXplID0gc2l6ZW9mKHN0cnVjdCBwZXJmX2J1ZmZlcik7CiAJc2l6ZSArPSBucl9wYWdlcyAqIHNpemVvZih2b2lkICopOwogCi0JZGF0YSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKQorCWJ1ZmZlciA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCiAJCWdvdG8gZmFpbDsKIAotCWRhdGEtPnVzZXJfcGFnZSA9IHBlcmZfbW1hcF9hbGxvY19wYWdlKGV2ZW50LT5jcHUpOwotCWlmICghZGF0YS0+dXNlcl9wYWdlKQorCWJ1ZmZlci0+dXNlcl9wYWdlID0gcGVyZl9tbWFwX2FsbG9jX3BhZ2UoY3B1KTsKKwlpZiAoIWJ1ZmZlci0+dXNlcl9wYWdlKQogCQlnb3RvIGZhaWxfdXNlcl9wYWdlOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKLQkJZGF0YS0+ZGF0YV9wYWdlc1tpXSA9IHBlcmZfbW1hcF9hbGxvY19wYWdlKGV2ZW50LT5jcHUpOwotCQlpZiAoIWRhdGEtPmRhdGFfcGFnZXNbaV0pCisJCWJ1ZmZlci0+ZGF0YV9wYWdlc1tpXSA9IHBlcmZfbW1hcF9hbGxvY19wYWdlKGNwdSk7CisJCWlmICghYnVmZmVyLT5kYXRhX3BhZ2VzW2ldKQogCQkJZ290byBmYWlsX2RhdGFfcGFnZXM7CiAJfQogCi0JZGF0YS0+bnJfcGFnZXMgPSBucl9wYWdlczsKKwlidWZmZXItPm5yX3BhZ2VzID0gbnJfcGFnZXM7CiAKLQlyZXR1cm4gZGF0YTsKKwlwZXJmX2J1ZmZlcl9pbml0KGJ1ZmZlciwgd2F0ZXJtYXJrLCBmbGFncyk7CisKKwlyZXR1cm4gYnVmZmVyOwogCiBmYWlsX2RhdGFfcGFnZXM6CiAJZm9yIChpLS07IGkgPj0gMDsgaS0tKQotCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpZGF0YS0+ZGF0YV9wYWdlc1tpXSk7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWZmZXItPmRhdGFfcGFnZXNbaV0pOwogCi0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWRhdGEtPnVzZXJfcGFnZSk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1ZmZlci0+dXNlcl9wYWdlKTsKIAogZmFpbF91c2VyX3BhZ2U6Ci0Ja2ZyZWUoZGF0YSk7CisJa2ZyZWUoYnVmZmVyKTsKIAogZmFpbDoKIAlyZXR1cm4gTlVMTDsKQEAgLTI0NTYsMTcgKzI0NzUsMTcgQEAKIAlfX2ZyZWVfcGFnZShwYWdlKTsKIH0KIAotc3RhdGljIHZvaWQgcGVyZl9tbWFwX2RhdGFfZnJlZShzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEpCitzdGF0aWMgdm9pZCBwZXJmX2J1ZmZlcl9mcmVlKHN0cnVjdCBwZXJmX2J1ZmZlciAqYnVmZmVyKQogewogCWludCBpOwogCi0JcGVyZl9tbWFwX2ZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylkYXRhLT51c2VyX3BhZ2UpOwotCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5ucl9wYWdlczsgaSsrKQotCQlwZXJmX21tYXBfZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWRhdGEtPmRhdGFfcGFnZXNbaV0pOwotCWtmcmVlKGRhdGEpOworCXBlcmZfbW1hcF9mcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmZmVyLT51c2VyX3BhZ2UpOworCWZvciAoaSA9IDA7IGkgPCBidWZmZXItPm5yX3BhZ2VzOyBpKyspCisJCXBlcmZfbW1hcF9mcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmZmVyLT5kYXRhX3BhZ2VzW2ldKTsKKwlrZnJlZShidWZmZXIpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBwYWdlX29yZGVyKHN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSkKK3N0YXRpYyBpbmxpbmUgaW50IHBhZ2Vfb3JkZXIoc3RydWN0IHBlcmZfYnVmZmVyICpidWZmZXIpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNDc5LDE4ICsyNDk4LDE4IEBACiAgKiBSZXF1aXJlZCBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGhhdmUgZC1jYWNoZSBhbGlhc2luZyBpc3N1ZXMuCiAgKi8KIAotc3RhdGljIGlubGluZSBpbnQgcGFnZV9vcmRlcihzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEpCitzdGF0aWMgaW5saW5lIGludCBwYWdlX29yZGVyKHN0cnVjdCBwZXJmX2J1ZmZlciAqYnVmZmVyKQogewotCXJldHVybiBkYXRhLT5wYWdlX29yZGVyOworCXJldHVybiBidWZmZXItPnBhZ2Vfb3JkZXI7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqCi1wZXJmX21tYXBfdG9fcGFnZShzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEsIHVuc2lnbmVkIGxvbmcgcGdvZmYpCitwZXJmX21tYXBfdG9fcGFnZShzdHJ1Y3QgcGVyZl9idWZmZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBwZ29mZikKIHsKLQlpZiAocGdvZmYgPiAoMVVMIDw8IHBhZ2Vfb3JkZXIoZGF0YSkpKQorCWlmIChwZ29mZiA+ICgxVUwgPDwgcGFnZV9vcmRlcihidWZmZXIpKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gdm1hbGxvY190b19wYWdlKCh2b2lkICopZGF0YS0+dXNlcl9wYWdlICsgcGdvZmYgKiBQQUdFX1NJWkUpOworCXJldHVybiB2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilidWZmZXItPnVzZXJfcGFnZSArIHBnb2ZmICogUEFHRV9TSVpFKTsKIH0KIAogc3RhdGljIHZvaWQgcGVyZl9tbWFwX3VubWFya19wYWdlKHZvaWQgKmFkZHIpCkBAIC0yNTAwLDU3ICsyNTE5LDU5IEBACiAJcGFnZS0+bWFwcGluZyA9IE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIHBlcmZfbW1hcF9kYXRhX2ZyZWVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgdm9pZCBwZXJmX2J1ZmZlcl9mcmVlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgcGVyZl9idWZmZXIgKmJ1ZmZlcjsKIAl2b2lkICpiYXNlOwogCWludCBpLCBucjsKIAotCWRhdGEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBlcmZfbW1hcF9kYXRhLCB3b3JrKTsKLQluciA9IDEgPDwgcGFnZV9vcmRlcihkYXRhKTsKKwlidWZmZXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBlcmZfYnVmZmVyLCB3b3JrKTsKKwluciA9IDEgPDwgcGFnZV9vcmRlcihidWZmZXIpOwogCi0JYmFzZSA9IGRhdGEtPnVzZXJfcGFnZTsKKwliYXNlID0gYnVmZmVyLT51c2VyX3BhZ2U7CiAJZm9yIChpID0gMDsgaSA8IG5yICsgMTsgaSsrKQogCQlwZXJmX21tYXBfdW5tYXJrX3BhZ2UoYmFzZSArIChpICogUEFHRV9TSVpFKSk7CiAKIAl2ZnJlZShiYXNlKTsKLQlrZnJlZShkYXRhKTsKKwlrZnJlZShidWZmZXIpOwogfQogCi1zdGF0aWMgdm9pZCBwZXJmX21tYXBfZGF0YV9mcmVlKHN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSkKK3N0YXRpYyB2b2lkIHBlcmZfYnVmZmVyX2ZyZWUoc3RydWN0IHBlcmZfYnVmZmVyICpidWZmZXIpCiB7Ci0Jc2NoZWR1bGVfd29yaygmZGF0YS0+d29yayk7CisJc2NoZWR1bGVfd29yaygmYnVmZmVyLT53b3JrKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwZXJmX21tYXBfZGF0YSAqCi1wZXJmX21tYXBfZGF0YV9hbGxvYyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBucl9wYWdlcykKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9idWZmZXIgKgorcGVyZl9idWZmZXJfYWxsb2MoaW50IG5yX3BhZ2VzLCBsb25nIHdhdGVybWFyaywgaW50IGNwdSwgaW50IGZsYWdzKQogewotCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgcGVyZl9idWZmZXIgKmJ1ZmZlcjsKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAJdm9pZCAqYWxsX2J1ZjsKIAotCXNpemUgPSBzaXplb2Yoc3RydWN0IHBlcmZfbW1hcF9kYXRhKTsKKwlzaXplID0gc2l6ZW9mKHN0cnVjdCBwZXJmX2J1ZmZlcik7CiAJc2l6ZSArPSBzaXplb2Yodm9pZCAqKTsKIAotCWRhdGEgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKKwlidWZmZXIgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQogCQlnb3RvIGZhaWw7CiAKLQlJTklUX1dPUksoJmRhdGEtPndvcmssIHBlcmZfbW1hcF9kYXRhX2ZyZWVfd29yayk7CisJSU5JVF9XT1JLKCZidWZmZXItPndvcmssIHBlcmZfYnVmZmVyX2ZyZWVfd29yayk7CiAKIAlhbGxfYnVmID0gdm1hbGxvY191c2VyKChucl9wYWdlcyArIDEpICogUEFHRV9TSVpFKTsKIAlpZiAoIWFsbF9idWYpCiAJCWdvdG8gZmFpbF9hbGxfYnVmOwogCi0JZGF0YS0+dXNlcl9wYWdlID0gYWxsX2J1ZjsKLQlkYXRhLT5kYXRhX3BhZ2VzWzBdID0gYWxsX2J1ZiArIFBBR0VfU0laRTsKLQlkYXRhLT5wYWdlX29yZGVyID0gaWxvZzIobnJfcGFnZXMpOwotCWRhdGEtPm5yX3BhZ2VzID0gMTsKKwlidWZmZXItPnVzZXJfcGFnZSA9IGFsbF9idWY7CisJYnVmZmVyLT5kYXRhX3BhZ2VzWzBdID0gYWxsX2J1ZiArIFBBR0VfU0laRTsKKwlidWZmZXItPnBhZ2Vfb3JkZXIgPSBpbG9nMihucl9wYWdlcyk7CisJYnVmZmVyLT5ucl9wYWdlcyA9IDE7CiAKLQlyZXR1cm4gZGF0YTsKKwlwZXJmX2J1ZmZlcl9pbml0KGJ1ZmZlciwgd2F0ZXJtYXJrLCBmbGFncyk7CisKKwlyZXR1cm4gYnVmZmVyOwogCiBmYWlsX2FsbF9idWY6Ci0Ja2ZyZWUoZGF0YSk7CisJa2ZyZWUoYnVmZmVyKTsKIAogZmFpbDoKIAlyZXR1cm4gTlVMTDsKQEAgLTI1NTgsMTUgKzI1NzksMTUgQEAKIAogI2VuZGlmCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBlcmZfZGF0YV9zaXplKHN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBlcmZfZGF0YV9zaXplKHN0cnVjdCBwZXJmX2J1ZmZlciAqYnVmZmVyKQogewotCXJldHVybiBkYXRhLT5ucl9wYWdlcyA8PCAoUEFHRV9TSElGVCArIHBhZ2Vfb3JkZXIoZGF0YSkpOworCXJldHVybiBidWZmZXItPm5yX3BhZ2VzIDw8IChQQUdFX1NISUZUICsgcGFnZV9vcmRlcihidWZmZXIpKTsKIH0KIAogc3RhdGljIGludCBwZXJmX21tYXBfZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogewogCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IHZtYS0+dm1fZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgcGVyZl9idWZmZXIgKmJ1ZmZlcjsKIAlpbnQgcmV0ID0gVk1fRkFVTFRfU0lHQlVTOwogCiAJaWYgKHZtZi0+ZmxhZ3MgJiBGQVVMVF9GTEFHX01LV1JJVEUpIHsKQEAgLTI1NzYsMTQgKzI1OTcsMTQgQEAKIAl9CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShldmVudC0+ZGF0YSk7Ci0JaWYgKCFkYXRhKQorCWJ1ZmZlciA9IHJjdV9kZXJlZmVyZW5jZShldmVudC0+YnVmZmVyKTsKKwlpZiAoIWJ1ZmZlcikKIAkJZ290byB1bmxvY2s7CiAKIAlpZiAodm1mLT5wZ29mZiAmJiAodm1mLT5mbGFncyAmIEZBVUxUX0ZMQUdfV1JJVEUpKQogCQlnb3RvIHVubG9jazsKIAotCXZtZi0+cGFnZSA9IHBlcmZfbW1hcF90b19wYWdlKGRhdGEsIHZtZi0+cGdvZmYpOworCXZtZi0+cGFnZSA9IHBlcmZfbW1hcF90b19wYWdlKGJ1ZmZlciwgdm1mLT5wZ29mZik7CiAJaWYgKCF2bWYtPnBhZ2UpCiAJCWdvdG8gdW5sb2NrOwogCkBAIC0yNTk4LDUyICsyNjE5LDM1IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQKLXBlcmZfbW1hcF9kYXRhX2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEpCitzdGF0aWMgdm9pZCBwZXJmX2J1ZmZlcl9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKQogewotCWxvbmcgbWF4X3NpemUgPSBwZXJmX2RhdGFfc2l6ZShkYXRhKTsKKwlzdHJ1Y3QgcGVyZl9idWZmZXIgKmJ1ZmZlcjsKIAotCWlmIChldmVudC0+YXR0ci53YXRlcm1hcmspIHsKLQkJZGF0YS0+d2F0ZXJtYXJrID0gbWluX3QobG9uZywgbWF4X3NpemUsCi0JCQkJCWV2ZW50LT5hdHRyLndha2V1cF93YXRlcm1hcmspOwotCX0KLQotCWlmICghZGF0YS0+d2F0ZXJtYXJrKQotCQlkYXRhLT53YXRlcm1hcmsgPSBtYXhfc2l6ZSAvIDI7Ci0KLQlhdG9taWNfc2V0KCZkYXRhLT5yZWZjb3VudCwgMSk7Ci0JcmN1X2Fzc2lnbl9wb2ludGVyKGV2ZW50LT5kYXRhLCBkYXRhKTsKKwlidWZmZXIgPSBjb250YWluZXJfb2YocmN1X2hlYWQsIHN0cnVjdCBwZXJmX2J1ZmZlciwgcmN1X2hlYWQpOworCXBlcmZfYnVmZmVyX2ZyZWUoYnVmZmVyKTsKIH0KIAotc3RhdGljIHZvaWQgcGVyZl9tbWFwX2RhdGFfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3VfaGVhZCkKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9idWZmZXIgKnBlcmZfYnVmZmVyX2dldChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOwotCi0JZGF0YSA9IGNvbnRhaW5lcl9vZihyY3VfaGVhZCwgc3RydWN0IHBlcmZfbW1hcF9kYXRhLCByY3VfaGVhZCk7Ci0JcGVyZl9tbWFwX2RhdGFfZnJlZShkYXRhKTsKLX0KLQotc3RhdGljIHN0cnVjdCBwZXJmX21tYXBfZGF0YSAqcGVyZl9tbWFwX2RhdGFfZ2V0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKLXsKLQlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGE7CisJc3RydWN0IHBlcmZfYnVmZmVyICpidWZmZXI7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShldmVudC0+ZGF0YSk7Ci0JaWYgKGRhdGEpIHsKLQkJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZkYXRhLT5yZWZjb3VudCkpCi0JCQlkYXRhID0gTlVMTDsKKwlidWZmZXIgPSByY3VfZGVyZWZlcmVuY2UoZXZlbnQtPmJ1ZmZlcik7CisJaWYgKGJ1ZmZlcikgeworCQlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJmJ1ZmZlci0+cmVmY291bnQpKQorCQkJYnVmZmVyID0gTlVMTDsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlyZXR1cm4gZGF0YTsKKwlyZXR1cm4gYnVmZmVyOwogfQogCi1zdGF0aWMgdm9pZCBwZXJmX21tYXBfZGF0YV9wdXQoc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhKQorc3RhdGljIHZvaWQgcGVyZl9idWZmZXJfcHV0KHN0cnVjdCBwZXJmX2J1ZmZlciAqYnVmZmVyKQogewotCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmZGF0YS0+cmVmY291bnQpKQorCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmYnVmZmVyLT5yZWZjb3VudCkpCiAJCXJldHVybjsKIAotCWNhbGxfcmN1KCZkYXRhLT5yY3VfaGVhZCwgcGVyZl9tbWFwX2RhdGFfZnJlZV9yY3UpOworCWNhbGxfcmN1KCZidWZmZXItPnJjdV9oZWFkLCBwZXJmX2J1ZmZlcl9mcmVlX3JjdSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBlcmZfbW1hcF9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQpAQCAtMjY1OCwxNiArMjY2MiwxNiBAQAogCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IHZtYS0+dm1fZmlsZS0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKGF0b21pY19kZWNfYW5kX211dGV4X2xvY2soJmV2ZW50LT5tbWFwX2NvdW50LCAmZXZlbnQtPm1tYXBfbXV0ZXgpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHBlcmZfZGF0YV9zaXplKGV2ZW50LT5kYXRhKTsKKwkJdW5zaWduZWQgbG9uZyBzaXplID0gcGVyZl9kYXRhX3NpemUoZXZlbnQtPmJ1ZmZlcik7CiAJCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciA9IGV2ZW50LT5tbWFwX3VzZXI7Ci0JCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSA9IGV2ZW50LT5kYXRhOworCQlzdHJ1Y3QgcGVyZl9idWZmZXIgKmJ1ZmZlciA9IGV2ZW50LT5idWZmZXI7CiAKIAkJYXRvbWljX2xvbmdfc3ViKChzaXplID4+IFBBR0VfU0hJRlQpICsgMSwgJnVzZXItPmxvY2tlZF92bSk7CiAJCXZtYS0+dm1fbW0tPmxvY2tlZF92bSAtPSBldmVudC0+bW1hcF9sb2NrZWQ7Ci0JCXJjdV9hc3NpZ25fcG9pbnRlcihldmVudC0+ZGF0YSwgTlVMTCk7CisJCXJjdV9hc3NpZ25fcG9pbnRlcihldmVudC0+YnVmZmVyLCBOVUxMKTsKIAkJbXV0ZXhfdW5sb2NrKCZldmVudC0+bW1hcF9tdXRleCk7CiAKLQkJcGVyZl9tbWFwX2RhdGFfcHV0KGRhdGEpOworCQlwZXJmX2J1ZmZlcl9wdXQoYnVmZmVyKTsKIAkJZnJlZV91aWQodXNlcik7CiAJfQogfQpAQCAtMjY4NSwxMSArMjY4OSwxMSBAQAogCXVuc2lnbmVkIGxvbmcgdXNlcl9sb2NrZWQsIHVzZXJfbG9ja19saW1pdDsKIAlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIgPSBjdXJyZW50X3VzZXIoKTsKIAl1bnNpZ25lZCBsb25nIGxvY2tlZCwgbG9ja19saW1pdDsKLQlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGE7CisJc3RydWN0IHBlcmZfYnVmZmVyICpidWZmZXI7CiAJdW5zaWduZWQgbG9uZyB2bWFfc2l6ZTsKIAl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOwogCWxvbmcgdXNlcl9leHRyYSwgZXh0cmE7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldCA9IDAsIGZsYWdzID0gMDsKIAogCS8qCiAJICogRG9uJ3QgYWxsb3cgbW1hcCgpIG9mIGluaGVyaXRlZCBwZXItdGFzayBjb3VudGVycy4gVGhpcyB3b3VsZApAQCAtMjcwNiw3ICsyNzEwLDcgQEAKIAlucl9wYWdlcyA9ICh2bWFfc2l6ZSAvIFBBR0VfU0laRSkgLSAxOwogCiAJLyoKLQkgKiBJZiB3ZSBoYXZlIGRhdGEgcGFnZXMgZW5zdXJlIHRoZXkncmUgYSBwb3dlci1vZi10d28gbnVtYmVyLCBzbyB3ZQorCSAqIElmIHdlIGhhdmUgYnVmZmVyIHBhZ2VzIGVuc3VyZSB0aGV5J3JlIGEgcG93ZXItb2YtdHdvIG51bWJlciwgc28gd2UKIAkgKiBjYW4gZG8gYml0bWFza3MgaW5zdGVhZCBvZiBtb2R1bG8uCiAJICovCiAJaWYgKG5yX3BhZ2VzICE9IDAgJiYgIWlzX3Bvd2VyX29mXzIobnJfcGFnZXMpKQpAQCAtMjcyMCw5ICsyNzI0LDkgQEAKIAogCVdBUk5fT05fT05DRShldmVudC0+Y3R4LT5wYXJlbnRfY3R4KTsKIAltdXRleF9sb2NrKCZldmVudC0+bW1hcF9tdXRleCk7Ci0JaWYgKGV2ZW50LT5kYXRhKSB7Ci0JCWlmIChldmVudC0+ZGF0YS0+bnJfcGFnZXMgPT0gbnJfcGFnZXMpCi0JCQlhdG9taWNfaW5jKCZldmVudC0+ZGF0YS0+cmVmY291bnQpOworCWlmIChldmVudC0+YnVmZmVyKSB7CisJCWlmIChldmVudC0+YnVmZmVyLT5ucl9wYWdlcyA9PSBucl9wYWdlcykKKwkJCWF0b21pY19pbmMoJmV2ZW50LT5idWZmZXItPnJlZmNvdW50KTsKIAkJZWxzZQogCQkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byB1bmxvY2s7CkBAIC0yNzUyLDE3ICsyNzU2LDE4IEBACiAJCWdvdG8gdW5sb2NrOwogCX0KIAotCVdBUk5fT04oZXZlbnQtPmRhdGEpOworCVdBUk5fT04oZXZlbnQtPmJ1ZmZlcik7CiAKLQlkYXRhID0gcGVyZl9tbWFwX2RhdGFfYWxsb2MoZXZlbnQsIG5yX3BhZ2VzKTsKLQlpZiAoIWRhdGEpIHsKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKQorCQlmbGFncyB8PSBQRVJGX0JVRkZFUl9XUklUQUJMRTsKKworCWJ1ZmZlciA9IHBlcmZfYnVmZmVyX2FsbG9jKG5yX3BhZ2VzLCBldmVudC0+YXR0ci53YWtldXBfd2F0ZXJtYXJrLAorCQkJCSAgIGV2ZW50LT5jcHUsIGZsYWdzKTsKKwlpZiAoIWJ1ZmZlcikgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIHVubG9jazsKIAl9Ci0KLQlwZXJmX21tYXBfZGF0YV9pbml0KGV2ZW50LCBkYXRhKTsKLQlpZiAodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKQotCQlldmVudC0+ZGF0YS0+d3JpdGFibGUgPSAxOworCXJjdV9hc3NpZ25fcG9pbnRlcihldmVudC0+YnVmZmVyLCBidWZmZXIpOwogCiAJYXRvbWljX2xvbmdfYWRkKHVzZXJfZXh0cmEsICZ1c2VyLT5sb2NrZWRfdm0pOwogCWV2ZW50LT5tbWFwX2xvY2tlZCA9IGV4dHJhOwpAQCAtMjk0MSwxMSArMjk0Niw2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLV9fd2Vhawotdm9pZCBwZXJmX2FyY2hfZmV0Y2hfY2FsbGVyX3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgaXAsIGludCBza2lwKQotewotfQotCiAKIC8qCiAgKiBXZSBhc3N1bWUgdGhlcmUgaXMgb25seSBLVk0gc3VwcG9ydGluZyB0aGUgY2FsbGJhY2tzLgpAQCAtMjk3MSwxNSArMjk3MSwxNSBAQAogLyoKICAqIE91dHB1dAogICovCi1zdGF0aWMgYm9vbCBwZXJmX291dHB1dF9zcGFjZShzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEsIHVuc2lnbmVkIGxvbmcgdGFpbCwKK3N0YXRpYyBib29sIHBlcmZfb3V0cHV0X3NwYWNlKHN0cnVjdCBwZXJmX2J1ZmZlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHRhaWwsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBoZWFkKQogewogCXVuc2lnbmVkIGxvbmcgbWFzazsKIAotCWlmICghZGF0YS0+d3JpdGFibGUpCisJaWYgKCFidWZmZXItPndyaXRhYmxlKQogCQlyZXR1cm4gdHJ1ZTsKIAotCW1hc2sgPSBwZXJmX2RhdGFfc2l6ZShkYXRhKSAtIDE7CisJbWFzayA9IHBlcmZfZGF0YV9zaXplKGJ1ZmZlcikgLSAxOwogCiAJb2Zmc2V0ID0gKG9mZnNldCAtIHRhaWwpICYgbWFzazsKIAloZWFkICAgPSAoaGVhZCAgIC0gdGFpbCkgJiBtYXNrOwpAQCAtMjk5Miw3ICsyOTkyLDcgQEAKIAogc3RhdGljIHZvaWQgcGVyZl9vdXRwdXRfd2FrZXVwKHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSkKIHsKLQlhdG9taWNfc2V0KCZoYW5kbGUtPmRhdGEtPnBvbGwsIFBPTExfSU4pOworCWF0b21pY19zZXQoJmhhbmRsZS0+YnVmZmVyLT5wb2xsLCBQT0xMX0lOKTsKIAogCWlmIChoYW5kbGUtPm5taSkgewogCQloYW5kbGUtPmV2ZW50LT5wZW5kaW5nX3dha2V1cCA9IDE7CkBAIC0zMDEyLDQ1ICszMDEyLDQ1IEBACiAgKi8KIHN0YXRpYyB2b2lkIHBlcmZfb3V0cHV0X2dldF9oYW5kbGUoc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAqaGFuZGxlKQogewotCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSA9IGhhbmRsZS0+ZGF0YTsKKwlzdHJ1Y3QgcGVyZl9idWZmZXIgKmJ1ZmZlciA9IGhhbmRsZS0+YnVmZmVyOwogCiAJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JbG9jYWxfaW5jKCZkYXRhLT5uZXN0KTsKLQloYW5kbGUtPndha2V1cCA9IGxvY2FsX3JlYWQoJmRhdGEtPndha2V1cCk7CisJbG9jYWxfaW5jKCZidWZmZXItPm5lc3QpOworCWhhbmRsZS0+d2FrZXVwID0gbG9jYWxfcmVhZCgmYnVmZmVyLT53YWtldXApOwogfQogCiBzdGF0aWMgdm9pZCBwZXJmX291dHB1dF9wdXRfaGFuZGxlKHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSkKIHsKLQlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEgPSBoYW5kbGUtPmRhdGE7CisJc3RydWN0IHBlcmZfYnVmZmVyICpidWZmZXIgPSBoYW5kbGUtPmJ1ZmZlcjsKIAl1bnNpZ25lZCBsb25nIGhlYWQ7CiAKIGFnYWluOgotCWhlYWQgPSBsb2NhbF9yZWFkKCZkYXRhLT5oZWFkKTsKKwloZWFkID0gbG9jYWxfcmVhZCgmYnVmZmVyLT5oZWFkKTsKIAogCS8qCiAJICogSVJRL05NSSBjYW4gaGFwcGVuIGhlcmUsIHdoaWNoIG1lYW5zIHdlIGNhbiBtaXNzIGEgaGVhZCB1cGRhdGUuCiAJICovCiAKLQlpZiAoIWxvY2FsX2RlY19hbmRfdGVzdCgmZGF0YS0+bmVzdCkpCisJaWYgKCFsb2NhbF9kZWNfYW5kX3Rlc3QoJmJ1ZmZlci0+bmVzdCkpCiAJCWdvdG8gb3V0OwogCiAJLyoKIAkgKiBQdWJsaXNoIHRoZSBrbm93biBnb29kIGhlYWQuIFJlbHkgb24gdGhlIGZ1bGwgYmFycmllciBpbXBsaWVkCi0JICogYnkgYXRvbWljX2RlY19hbmRfdGVzdCgpIG9yZGVyIHRoZSBkYXRhLT5oZWFkIHJlYWQgYW5kIHRoaXMKKwkgKiBieSBhdG9taWNfZGVjX2FuZF90ZXN0KCkgb3JkZXIgdGhlIGJ1ZmZlci0+aGVhZCByZWFkIGFuZCB0aGlzCiAJICogd3JpdGUuCiAJICovCi0JZGF0YS0+dXNlcl9wYWdlLT5kYXRhX2hlYWQgPSBoZWFkOworCWJ1ZmZlci0+dXNlcl9wYWdlLT5kYXRhX2hlYWQgPSBoZWFkOwogCiAJLyoKIAkgKiBOb3cgY2hlY2sgaWYgd2UgbWlzc2VkIGFuIHVwZGF0ZSwgcmVseSBvbiB0aGUgKGNvbXBpbGVyKQotCSAqIGJhcnJpZXIgaW4gYXRvbWljX2RlY19hbmRfdGVzdCgpIHRvIHJlLXJlYWQgZGF0YS0+aGVhZC4KKwkgKiBiYXJyaWVyIGluIGF0b21pY19kZWNfYW5kX3Rlc3QoKSB0byByZS1yZWFkIGJ1ZmZlci0+aGVhZC4KIAkgKi8KLQlpZiAodW5saWtlbHkoaGVhZCAhPSBsb2NhbF9yZWFkKCZkYXRhLT5oZWFkKSkpIHsKLQkJbG9jYWxfaW5jKCZkYXRhLT5uZXN0KTsKKwlpZiAodW5saWtlbHkoaGVhZCAhPSBsb2NhbF9yZWFkKCZidWZmZXItPmhlYWQpKSkgeworCQlsb2NhbF9pbmMoJmJ1ZmZlci0+bmVzdCk7CiAJCWdvdG8gYWdhaW47CiAJfQogCi0JaWYgKGhhbmRsZS0+d2FrZXVwICE9IGxvY2FsX3JlYWQoJmRhdGEtPndha2V1cCkpCisJaWYgKGhhbmRsZS0+d2FrZXVwICE9IGxvY2FsX3JlYWQoJmJ1ZmZlci0+d2FrZXVwKSkKIAkJcGVyZl9vdXRwdXRfd2FrZXVwKGhhbmRsZSk7CiAKICBvdXQ6CkBAIC0zMDcwLDEyICszMDcwLDEyIEBACiAJCWJ1ZiArPSBzaXplOwogCQloYW5kbGUtPnNpemUgLT0gc2l6ZTsKIAkJaWYgKCFoYW5kbGUtPnNpemUpIHsKLQkJCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSA9IGhhbmRsZS0+ZGF0YTsKKwkJCXN0cnVjdCBwZXJmX2J1ZmZlciAqYnVmZmVyID0gaGFuZGxlLT5idWZmZXI7CiAKIAkJCWhhbmRsZS0+cGFnZSsrOwotCQkJaGFuZGxlLT5wYWdlICY9IGRhdGEtPm5yX3BhZ2VzIC0gMTsKLQkJCWhhbmRsZS0+YWRkciA9IGRhdGEtPmRhdGFfcGFnZXNbaGFuZGxlLT5wYWdlXTsKLQkJCWhhbmRsZS0+c2l6ZSA9IFBBR0VfU0laRSA8PCBwYWdlX29yZGVyKGRhdGEpOworCQkJaGFuZGxlLT5wYWdlICY9IGJ1ZmZlci0+bnJfcGFnZXMgLSAxOworCQkJaGFuZGxlLT5hZGRyID0gYnVmZmVyLT5kYXRhX3BhZ2VzW2hhbmRsZS0+cGFnZV07CisJCQloYW5kbGUtPnNpemUgPSBQQUdFX1NJWkUgPDwgcGFnZV9vcmRlcihidWZmZXIpOwogCQl9CiAJfSB3aGlsZSAobGVuKTsKIH0KQEAgLTMwODQsNyArMzA4NCw3IEBACiAJCSAgICAgIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdW5zaWduZWQgaW50IHNpemUsCiAJCSAgICAgIGludCBubWksIGludCBzYW1wbGUpCiB7Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOworCXN0cnVjdCBwZXJmX2J1ZmZlciAqYnVmZmVyOwogCXVuc2lnbmVkIGxvbmcgdGFpbCwgb2Zmc2V0LCBoZWFkOwogCWludCBoYXZlX2xvc3Q7CiAJc3RydWN0IHsKQEAgLTMxMDAsMTkgKzMxMDAsMTkgQEAKIAlpZiAoZXZlbnQtPnBhcmVudCkKIAkJZXZlbnQgPSBldmVudC0+cGFyZW50OwogCi0JZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShldmVudC0+ZGF0YSk7Ci0JaWYgKCFkYXRhKQorCWJ1ZmZlciA9IHJjdV9kZXJlZmVyZW5jZShldmVudC0+YnVmZmVyKTsKKwlpZiAoIWJ1ZmZlcikKIAkJZ290byBvdXQ7CiAKLQloYW5kbGUtPmRhdGEJPSBkYXRhOworCWhhbmRsZS0+YnVmZmVyCT0gYnVmZmVyOwogCWhhbmRsZS0+ZXZlbnQJPSBldmVudDsKIAloYW5kbGUtPm5taQk9IG5taTsKIAloYW5kbGUtPnNhbXBsZQk9IHNhbXBsZTsKIAotCWlmICghZGF0YS0+bnJfcGFnZXMpCisJaWYgKCFidWZmZXItPm5yX3BhZ2VzKQogCQlnb3RvIG91dDsKIAotCWhhdmVfbG9zdCA9IGxvY2FsX3JlYWQoJmRhdGEtPmxvc3QpOworCWhhdmVfbG9zdCA9IGxvY2FsX3JlYWQoJmJ1ZmZlci0+bG9zdCk7CiAJaWYgKGhhdmVfbG9zdCkKIAkJc2l6ZSArPSBzaXplb2YobG9zdF9ldmVudCk7CiAKQEAgLTMxMjQsMzAgKzMxMjQsMzAgQEAKIAkJICogdGFpbCBwb2ludGVyLiBTbyB0aGF0IGFsbCByZWFkcyB3aWxsIGJlIGNvbXBsZXRlZCBiZWZvcmUgdGhlCiAJCSAqIHdyaXRlIGlzIGlzc3VlZC4KIAkJICovCi0JCXRhaWwgPSBBQ0NFU1NfT05DRShkYXRhLT51c2VyX3BhZ2UtPmRhdGFfdGFpbCk7CisJCXRhaWwgPSBBQ0NFU1NfT05DRShidWZmZXItPnVzZXJfcGFnZS0+ZGF0YV90YWlsKTsKIAkJc21wX3JtYigpOwotCQlvZmZzZXQgPSBoZWFkID0gbG9jYWxfcmVhZCgmZGF0YS0+aGVhZCk7CisJCW9mZnNldCA9IGhlYWQgPSBsb2NhbF9yZWFkKCZidWZmZXItPmhlYWQpOwogCQloZWFkICs9IHNpemU7Ci0JCWlmICh1bmxpa2VseSghcGVyZl9vdXRwdXRfc3BhY2UoZGF0YSwgdGFpbCwgb2Zmc2V0LCBoZWFkKSkpCisJCWlmICh1bmxpa2VseSghcGVyZl9vdXRwdXRfc3BhY2UoYnVmZmVyLCB0YWlsLCBvZmZzZXQsIGhlYWQpKSkKIAkJCWdvdG8gZmFpbDsKLQl9IHdoaWxlIChsb2NhbF9jbXB4Y2hnKCZkYXRhLT5oZWFkLCBvZmZzZXQsIGhlYWQpICE9IG9mZnNldCk7CisJfSB3aGlsZSAobG9jYWxfY21weGNoZygmYnVmZmVyLT5oZWFkLCBvZmZzZXQsIGhlYWQpICE9IG9mZnNldCk7CiAKLQlpZiAoaGVhZCAtIGxvY2FsX3JlYWQoJmRhdGEtPndha2V1cCkgPiBkYXRhLT53YXRlcm1hcmspCi0JCWxvY2FsX2FkZChkYXRhLT53YXRlcm1hcmssICZkYXRhLT53YWtldXApOworCWlmIChoZWFkIC0gbG9jYWxfcmVhZCgmYnVmZmVyLT53YWtldXApID4gYnVmZmVyLT53YXRlcm1hcmspCisJCWxvY2FsX2FkZChidWZmZXItPndhdGVybWFyaywgJmJ1ZmZlci0+d2FrZXVwKTsKIAotCWhhbmRsZS0+cGFnZSA9IG9mZnNldCA+PiAoUEFHRV9TSElGVCArIHBhZ2Vfb3JkZXIoZGF0YSkpOwotCWhhbmRsZS0+cGFnZSAmPSBkYXRhLT5ucl9wYWdlcyAtIDE7Ci0JaGFuZGxlLT5zaXplID0gb2Zmc2V0ICYgKChQQUdFX1NJWkUgPDwgcGFnZV9vcmRlcihkYXRhKSkgLSAxKTsKLQloYW5kbGUtPmFkZHIgPSBkYXRhLT5kYXRhX3BhZ2VzW2hhbmRsZS0+cGFnZV07CisJaGFuZGxlLT5wYWdlID0gb2Zmc2V0ID4+IChQQUdFX1NISUZUICsgcGFnZV9vcmRlcihidWZmZXIpKTsKKwloYW5kbGUtPnBhZ2UgJj0gYnVmZmVyLT5ucl9wYWdlcyAtIDE7CisJaGFuZGxlLT5zaXplID0gb2Zmc2V0ICYgKChQQUdFX1NJWkUgPDwgcGFnZV9vcmRlcihidWZmZXIpKSAtIDEpOworCWhhbmRsZS0+YWRkciA9IGJ1ZmZlci0+ZGF0YV9wYWdlc1toYW5kbGUtPnBhZ2VdOwogCWhhbmRsZS0+YWRkciArPSBoYW5kbGUtPnNpemU7Ci0JaGFuZGxlLT5zaXplID0gKFBBR0VfU0laRSA8PCBwYWdlX29yZGVyKGRhdGEpKSAtIGhhbmRsZS0+c2l6ZTsKKwloYW5kbGUtPnNpemUgPSAoUEFHRV9TSVpFIDw8IHBhZ2Vfb3JkZXIoYnVmZmVyKSkgLSBoYW5kbGUtPnNpemU7CiAKIAlpZiAoaGF2ZV9sb3N0KSB7CiAJCWxvc3RfZXZlbnQuaGVhZGVyLnR5cGUgPSBQRVJGX1JFQ09SRF9MT1NUOwogCQlsb3N0X2V2ZW50LmhlYWRlci5taXNjID0gMDsKIAkJbG9zdF9ldmVudC5oZWFkZXIuc2l6ZSA9IHNpemVvZihsb3N0X2V2ZW50KTsKIAkJbG9zdF9ldmVudC5pZCAgICAgICAgICA9IGV2ZW50LT5pZDsKLQkJbG9zdF9ldmVudC5sb3N0ICAgICAgICA9IGxvY2FsX3hjaGcoJmRhdGEtPmxvc3QsIDApOworCQlsb3N0X2V2ZW50Lmxvc3QgICAgICAgID0gbG9jYWxfeGNoZygmYnVmZmVyLT5sb3N0LCAwKTsKIAogCQlwZXJmX291dHB1dF9wdXQoaGFuZGxlLCBsb3N0X2V2ZW50KTsKIAl9CkBAIC0zMTU1LDcgKzMxNTUsNyBAQAogCXJldHVybiAwOwogCiBmYWlsOgotCWxvY2FsX2luYygmZGF0YS0+bG9zdCk7CisJbG9jYWxfaW5jKCZidWZmZXItPmxvc3QpOwogCXBlcmZfb3V0cHV0X3B1dF9oYW5kbGUoaGFuZGxlKTsKIG91dDoKIAlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTMxNjYsMTUgKzMxNjYsMTUgQEAKIHZvaWQgcGVyZl9vdXRwdXRfZW5kKHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSkKIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBoYW5kbGUtPmV2ZW50OwotCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSA9IGhhbmRsZS0+ZGF0YTsKKwlzdHJ1Y3QgcGVyZl9idWZmZXIgKmJ1ZmZlciA9IGhhbmRsZS0+YnVmZmVyOwogCiAJaW50IHdha2V1cF9ldmVudHMgPSBldmVudC0+YXR0ci53YWtldXBfZXZlbnRzOwogCiAJaWYgKGhhbmRsZS0+c2FtcGxlICYmIHdha2V1cF9ldmVudHMpIHsKLQkJaW50IGV2ZW50cyA9IGxvY2FsX2luY19yZXR1cm4oJmRhdGEtPmV2ZW50cyk7CisJCWludCBldmVudHMgPSBsb2NhbF9pbmNfcmV0dXJuKCZidWZmZXItPmV2ZW50cyk7CiAJCWlmIChldmVudHMgPj0gd2FrZXVwX2V2ZW50cykgewotCQkJbG9jYWxfc3ViKHdha2V1cF9ldmVudHMsICZkYXRhLT5ldmVudHMpOwotCQkJbG9jYWxfaW5jKCZkYXRhLT53YWtldXApOworCQkJbG9jYWxfc3ViKHdha2V1cF9ldmVudHMsICZidWZmZXItPmV2ZW50cyk7CisJCQlsb2NhbF9pbmMoJmJ1ZmZlci0+d2FrZXVwKTsKIAkJfQogCX0KIApAQCAtMzIxMSw3ICszMjExLDcgQEAKIAl1NjQgdmFsdWVzWzRdOwogCWludCBuID0gMDsKIAotCXZhbHVlc1tuKytdID0gYXRvbWljNjRfcmVhZCgmZXZlbnQtPmNvdW50KTsKKwl2YWx1ZXNbbisrXSA9IHBlcmZfZXZlbnRfY291bnQoZXZlbnQpOwogCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfRU5BQkxFRCkgewogCQl2YWx1ZXNbbisrXSA9IGV2ZW50LT50b3RhbF90aW1lX2VuYWJsZWQgKwogCQkJYXRvbWljNjRfcmVhZCgmZXZlbnQtPmNoaWxkX3RvdGFsX3RpbWVfZW5hYmxlZCk7CkBAIC0zMjQ4LDcgKzMyNDgsNyBAQAogCWlmIChsZWFkZXIgIT0gZXZlbnQpCiAJCWxlYWRlci0+cG11LT5yZWFkKGxlYWRlcik7CiAKLQl2YWx1ZXNbbisrXSA9IGF0b21pYzY0X3JlYWQoJmxlYWRlci0+Y291bnQpOworCXZhbHVlc1tuKytdID0gcGVyZl9ldmVudF9jb3VudChsZWFkZXIpOwogCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0lEKQogCQl2YWx1ZXNbbisrXSA9IHByaW1hcnlfZXZlbnRfaWQobGVhZGVyKTsKIApAQCAtMzI2MCw3ICszMjYwLDcgQEAKIAkJaWYgKHN1YiAhPSBldmVudCkKIAkJCXN1Yi0+cG11LT5yZWFkKHN1Yik7CiAKLQkJdmFsdWVzW24rK10gPSBhdG9taWM2NF9yZWFkKCZzdWItPmNvdW50KTsKKwkJdmFsdWVzW24rK10gPSBwZXJmX2V2ZW50X2NvdW50KHN1Yik7CiAJCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0lEKQogCQkJdmFsdWVzW24rK10gPSBwcmltYXJ5X2V2ZW50X2lkKHN1Yik7CiAKQEAgLTM0OTEsNyArMzQ5MSw3IEBACiAvKgogICogdGFzayB0cmFja2luZyAtLSBmb3JrL2V4aXQKICAqCi0gKiBlbmFibGVkIGJ5OiBhdHRyLmNvbW0gfCBhdHRyLm1tYXAgfCBhdHRyLnRhc2sKKyAqIGVuYWJsZWQgYnk6IGF0dHIuY29tbSB8IGF0dHIubW1hcCB8IGF0dHIubW1hcF9kYXRhIHwgYXR0ci50YXNrCiAgKi8KIAogc3RydWN0IHBlcmZfdGFza19ldmVudCB7CkBAIC0zNTQxLDcgKzM1NDEsOCBAQAogCWlmIChldmVudC0+Y3B1ICE9IC0xICYmIGV2ZW50LT5jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQogCQlyZXR1cm4gMDsKIAotCWlmIChldmVudC0+YXR0ci5jb21tIHx8IGV2ZW50LT5hdHRyLm1tYXAgfHwgZXZlbnQtPmF0dHIudGFzaykKKwlpZiAoZXZlbnQtPmF0dHIuY29tbSB8fCBldmVudC0+YXR0ci5tbWFwIHx8CisJICAgIGV2ZW50LT5hdHRyLm1tYXBfZGF0YSB8fCBldmVudC0+YXR0ci50YXNrKQogCQlyZXR1cm4gMTsKIAogCXJldHVybiAwOwpAQCAtMzc2Niw3ICszNzY3LDggQEAKIH0KIAogc3RhdGljIGludCBwZXJmX2V2ZW50X21tYXBfbWF0Y2goc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAotCQkJCSAgIHN0cnVjdCBwZXJmX21tYXBfZXZlbnQgKm1tYXBfZXZlbnQpCisJCQkJICAgc3RydWN0IHBlcmZfbW1hcF9ldmVudCAqbW1hcF9ldmVudCwKKwkJCQkgICBpbnQgZXhlY3V0YWJsZSkKIHsKIAlpZiAoZXZlbnQtPnN0YXRlIDwgUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRSkKIAkJcmV0dXJuIDA7CkBAIC0zNzc0LDE5ICszNzc2LDIxIEBACiAJaWYgKGV2ZW50LT5jcHUgIT0gLTEgJiYgZXZlbnQtPmNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCiAJCXJldHVybiAwOwogCi0JaWYgKGV2ZW50LT5hdHRyLm1tYXApCisJaWYgKCghZXhlY3V0YWJsZSAmJiBldmVudC0+YXR0ci5tbWFwX2RhdGEpIHx8CisJICAgIChleGVjdXRhYmxlICYmIGV2ZW50LT5hdHRyLm1tYXApKQogCQlyZXR1cm4gMTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X21tYXBfY3R4KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCwKLQkJCQkgIHN0cnVjdCBwZXJmX21tYXBfZXZlbnQgKm1tYXBfZXZlbnQpCisJCQkJICBzdHJ1Y3QgcGVyZl9tbWFwX2V2ZW50ICptbWFwX2V2ZW50LAorCQkJCSAgaW50IGV4ZWN1dGFibGUpCiB7CiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZXZlbnQsICZjdHgtPmV2ZW50X2xpc3QsIGV2ZW50X2VudHJ5KSB7Ci0JCWlmIChwZXJmX2V2ZW50X21tYXBfbWF0Y2goZXZlbnQsIG1tYXBfZXZlbnQpKQorCQlpZiAocGVyZl9ldmVudF9tbWFwX21hdGNoKGV2ZW50LCBtbWFwX2V2ZW50LCBleGVjdXRhYmxlKSkKIAkJCXBlcmZfZXZlbnRfbW1hcF9vdXRwdXQoZXZlbnQsIG1tYXBfZXZlbnQpOwogCX0KIH0KQEAgLTM4MzAsNiArMzgzNCwxNCBAQAogCQlpZiAoIXZtYS0+dm1fbW0pIHsKIAkJCW5hbWUgPSBzdHJuY3B5KHRtcCwgIlt2ZHNvXSIsIHNpemVvZih0bXApKTsKIAkJCWdvdG8gZ290X25hbWU7CisJCX0gZWxzZSBpZiAodm1hLT52bV9zdGFydCA8PSB2bWEtPnZtX21tLT5zdGFydF9icmsgJiYKKwkJCQl2bWEtPnZtX2VuZCA+PSB2bWEtPnZtX21tLT5icmspIHsKKwkJCW5hbWUgPSBzdHJuY3B5KHRtcCwgIltoZWFwXSIsIHNpemVvZih0bXApKTsKKwkJCWdvdG8gZ290X25hbWU7CisJCX0gZWxzZSBpZiAodm1hLT52bV9zdGFydCA8PSB2bWEtPnZtX21tLT5zdGFydF9zdGFjayAmJgorCQkJCXZtYS0+dm1fZW5kID49IHZtYS0+dm1fbW0tPnN0YXJ0X3N0YWNrKSB7CisJCQluYW1lID0gc3RybmNweSh0bXAsICJbc3RhY2tdIiwgc2l6ZW9mKHRtcCkpOworCQkJZ290byBnb3RfbmFtZTsKIAkJfQogCiAJCW5hbWUgPSBzdHJuY3B5KHRtcCwgIi8vYW5vbiIsIHNpemVvZih0bXApKTsKQEAgLTM4NDYsMTcgKzM4NTgsMTcgQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAljcHVjdHggPSAmZ2V0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7Ci0JcGVyZl9ldmVudF9tbWFwX2N0eCgmY3B1Y3R4LT5jdHgsIG1tYXBfZXZlbnQpOworCXBlcmZfZXZlbnRfbW1hcF9jdHgoJmNwdWN0eC0+Y3R4LCBtbWFwX2V2ZW50LCB2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQyk7CiAJY3R4ID0gcmN1X2RlcmVmZXJlbmNlKGN1cnJlbnQtPnBlcmZfZXZlbnRfY3R4cCk7CiAJaWYgKGN0eCkKLQkJcGVyZl9ldmVudF9tbWFwX2N0eChjdHgsIG1tYXBfZXZlbnQpOworCQlwZXJmX2V2ZW50X21tYXBfY3R4KGN0eCwgbW1hcF9ldmVudCwgdm1hLT52bV9mbGFncyAmIFZNX0VYRUMpOwogCXB1dF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJa2ZyZWUoYnVmKTsKIH0KIAotdm9pZCBfX3BlcmZfZXZlbnRfbW1hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3ZvaWQgcGVyZl9ldmVudF9tbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBwZXJmX21tYXBfZXZlbnQgbW1hcF9ldmVudDsKIApAQCAtNDAxOCwxNCArNDAzMCwxNCBAQAogCWh3Yy0+bGFzdF9wZXJpb2QgPSBod2MtPnNhbXBsZV9wZXJpb2Q7CiAKIGFnYWluOgotCW9sZCA9IHZhbCA9IGF0b21pYzY0X3JlYWQoJmh3Yy0+cGVyaW9kX2xlZnQpOworCW9sZCA9IHZhbCA9IGxvY2FsNjRfcmVhZCgmaHdjLT5wZXJpb2RfbGVmdCk7CiAJaWYgKHZhbCA8IDApCiAJCXJldHVybiAwOwogCiAJbnIgPSBkaXY2NF91NjQocGVyaW9kICsgdmFsLCBwZXJpb2QpOwogCW9mZnNldCA9IG5yICogcGVyaW9kOwogCXZhbCAtPSBvZmZzZXQ7Ci0JaWYgKGF0b21pYzY0X2NtcHhjaGcoJmh3Yy0+cGVyaW9kX2xlZnQsIG9sZCwgdmFsKSAhPSBvbGQpCisJaWYgKGxvY2FsNjRfY21weGNoZygmaHdjLT5wZXJpb2RfbGVmdCwgb2xkLCB2YWwpICE9IG9sZCkKIAkJZ290byBhZ2FpbjsKIAogCXJldHVybiBucjsKQEAgLTQwNjQsNyArNDA3Niw3IEBACiB7CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CiAKLQlhdG9taWM2NF9hZGQobnIsICZldmVudC0+Y291bnQpOworCWxvY2FsNjRfYWRkKG5yLCAmZXZlbnQtPmNvdW50KTsKIAogCWlmICghcmVncykKIAkJcmV0dXJuOwpAQCAtNDA3NSw3ICs0MDg3LDcgQEAKIAlpZiAobnIgPT0gMSAmJiBod2MtPnNhbXBsZV9wZXJpb2QgPT0gMSAmJiAhZXZlbnQtPmF0dHIuZnJlcSkKIAkJcmV0dXJuIHBlcmZfc3dldmVudF9vdmVyZmxvdyhldmVudCwgMSwgbm1pLCBkYXRhLCByZWdzKTsKIAotCWlmIChhdG9taWM2NF9hZGRfbmVnYXRpdmUobnIsICZod2MtPnBlcmlvZF9sZWZ0KSkKKwlpZiAobG9jYWw2NF9hZGRfbmVnYXRpdmUobnIsICZod2MtPnBlcmlvZF9sZWZ0KSkKIAkJcmV0dXJuOwogCiAJcGVyZl9zd2V2ZW50X292ZXJmbG93KGV2ZW50LCAwLCBubWksIGRhdGEsIHJlZ3MpOwpAQCAtNDIxMywxNCArNDIyNSwxMiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCk7CiAKLXZvaWQgcGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dChpbnQgcmN0eCkKK3ZvaWQgaW5saW5lIHBlcmZfc3dldmVudF9wdXRfcmVjdXJzaW9uX2NvbnRleHQoaW50IHJjdHgpCiB7CiAJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZfX2dldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCWJhcnJpZXIoKTsKIAljcHVjdHgtPnJlY3Vyc2lvbltyY3R4XS0tOwogfQotRVhQT1JUX1NZTUJPTF9HUEwocGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dCk7Ci0KIAogdm9pZCBfX3BlcmZfc3dfZXZlbnQodTMyIGV2ZW50X2lkLCB1NjQgbnIsIGludCBubWksCiAJCQkgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHU2NCBhZGRyKQpAQCAtNDM2OCw4ICs0Mzc4LDggQEAKIAl1NjQgbm93OwogCiAJbm93ID0gY3B1X2Nsb2NrKGNwdSk7Ci0JcHJldiA9IGF0b21pYzY0X3hjaGcoJmV2ZW50LT5ody5wcmV2X2NvdW50LCBub3cpOwotCWF0b21pYzY0X2FkZChub3cgLSBwcmV2LCAmZXZlbnQtPmNvdW50KTsKKwlwcmV2ID0gbG9jYWw2NF94Y2hnKCZldmVudC0+aHcucHJldl9jb3VudCwgbm93KTsKKwlsb2NhbDY0X2FkZChub3cgLSBwcmV2LCAmZXZlbnQtPmNvdW50KTsKIH0KIAogc3RhdGljIGludCBjcHVfY2xvY2tfcGVyZl9ldmVudF9lbmFibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQpAQCAtNDM3Nyw3ICs0Mzg3LDcgQEAKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKIAlpbnQgY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKIAotCWF0b21pYzY0X3NldCgmaHdjLT5wcmV2X2NvdW50LCBjcHVfY2xvY2soY3B1KSk7CisJbG9jYWw2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgY3B1X2Nsb2NrKGNwdSkpOwogCXBlcmZfc3dldmVudF9zdGFydF9ocnRpbWVyKGV2ZW50KTsKIAogCXJldHVybiAwOwpAQCAtNDQwOSw5ICs0NDE5LDkgQEAKIAl1NjQgcHJldjsKIAlzNjQgZGVsdGE7CiAKLQlwcmV2ID0gYXRvbWljNjRfeGNoZygmZXZlbnQtPmh3LnByZXZfY291bnQsIG5vdyk7CisJcHJldiA9IGxvY2FsNjRfeGNoZygmZXZlbnQtPmh3LnByZXZfY291bnQsIG5vdyk7CiAJZGVsdGEgPSBub3cgLSBwcmV2OwotCWF0b21pYzY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7CisJbG9jYWw2NF9hZGQoZGVsdGEsICZldmVudC0+Y291bnQpOwogfQogCiBzdGF0aWMgaW50IHRhc2tfY2xvY2tfcGVyZl9ldmVudF9lbmFibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQpAQCAtNDQyMSw3ICs0NDMxLDcgQEAKIAogCW5vdyA9IGV2ZW50LT5jdHgtPnRpbWU7CiAKLQlhdG9taWM2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgbm93KTsKKwlsb2NhbDY0X3NldCgmaHdjLT5wcmV2X2NvdW50LCBub3cpOwogCiAJcGVyZl9zd2V2ZW50X3N0YXJ0X2hydGltZXIoZXZlbnQpOwogCkBAIC00NjAxLDcgKzQ2MTEsNyBAQAogfQogCiB2b2lkIHBlcmZfdHBfZXZlbnQodTY0IGFkZHIsIHU2NCBjb3VudCwgdm9pZCAqcmVjb3JkLCBpbnQgZW50cnlfc2l6ZSwKLQkJICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBobGlzdF9oZWFkICpoZWFkKQorCQkgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsIGludCByY3R4KQogewogCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7CiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OwpAQCAtNDYxNSwxMiArNDYyNSwxMiBAQAogCXBlcmZfc2FtcGxlX2RhdGFfaW5pdCgmZGF0YSwgYWRkcik7CiAJZGF0YS5yYXcgPSAmcmF3OwogCi0JcmN1X3JlYWRfbG9jaygpOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShldmVudCwgbm9kZSwgaGVhZCwgaGxpc3RfZW50cnkpIHsKIAkJaWYgKHBlcmZfdHBfZXZlbnRfbWF0Y2goZXZlbnQsICZkYXRhLCByZWdzKSkKIAkJCXBlcmZfc3dldmVudF9hZGQoZXZlbnQsIGNvdW50LCAxLCAmZGF0YSwgcmVncyk7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOworCisJcGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dChyY3R4KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBlcmZfdHBfZXZlbnQpOwogCkBAIC00ODY0LDcgKzQ4NzQsNyBAQAogCQlod2MtPnNhbXBsZV9wZXJpb2QgPSAxOwogCWh3Yy0+bGFzdF9wZXJpb2QgPSBod2MtPnNhbXBsZV9wZXJpb2Q7CiAKLQlhdG9taWM2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7CisJbG9jYWw2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7CiAKIAkvKgogCSAqIHdlIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCBQRVJGX0ZPUk1BVF9HUk9VUCBvbiBpbmhlcml0ZWQgZXZlbnRzCkBAIC00OTEzLDcgKzQ5MjMsNyBAQAogCiAJaWYgKCFldmVudC0+cGFyZW50KSB7CiAJCWF0b21pY19pbmMoJm5yX2V2ZW50cyk7Ci0JCWlmIChldmVudC0+YXR0ci5tbWFwKQorCQlpZiAoZXZlbnQtPmF0dHIubW1hcCB8fCBldmVudC0+YXR0ci5tbWFwX2RhdGEpCiAJCQlhdG9taWNfaW5jKCZucl9tbWFwX2V2ZW50cyk7CiAJCWlmIChldmVudC0+YXR0ci5jb21tKQogCQkJYXRvbWljX2luYygmbnJfY29tbV9ldmVudHMpOwpAQCAtNTAwNyw3ICs1MDE3LDcgQEAKIHN0YXRpYyBpbnQKIHBlcmZfZXZlbnRfc2V0X291dHB1dChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHN0cnVjdCBwZXJmX2V2ZW50ICpvdXRwdXRfZXZlbnQpCiB7Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhID0gTlVMTCwgKm9sZF9kYXRhID0gTlVMTDsKKwlzdHJ1Y3QgcGVyZl9idWZmZXIgKmJ1ZmZlciA9IE5VTEwsICpvbGRfYnVmZmVyID0gTlVMTDsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAogCWlmICghb3V0cHV0X2V2ZW50KQpAQCAtNTAzNywxOSArNTA0NywxOSBAQAogCiAJaWYgKG91dHB1dF9ldmVudCkgewogCQkvKiBnZXQgdGhlIGJ1ZmZlciB3ZSB3YW50IHRvIHJlZGlyZWN0IHRvICovCi0JCWRhdGEgPSBwZXJmX21tYXBfZGF0YV9nZXQob3V0cHV0X2V2ZW50KTsKLQkJaWYgKCFkYXRhKQorCQlidWZmZXIgPSBwZXJmX2J1ZmZlcl9nZXQob3V0cHV0X2V2ZW50KTsKKwkJaWYgKCFidWZmZXIpCiAJCQlnb3RvIHVubG9jazsKIAl9CiAKLQlvbGRfZGF0YSA9IGV2ZW50LT5kYXRhOwotCXJjdV9hc3NpZ25fcG9pbnRlcihldmVudC0+ZGF0YSwgZGF0YSk7CisJb2xkX2J1ZmZlciA9IGV2ZW50LT5idWZmZXI7CisJcmN1X2Fzc2lnbl9wb2ludGVyKGV2ZW50LT5idWZmZXIsIGJ1ZmZlcik7CiAJcmV0ID0gMDsKIHVubG9jazoKIAltdXRleF91bmxvY2soJmV2ZW50LT5tbWFwX211dGV4KTsKIAotCWlmIChvbGRfZGF0YSkKLQkJcGVyZl9tbWFwX2RhdGFfcHV0KG9sZF9kYXRhKTsKKwlpZiAob2xkX2J1ZmZlcikKKwkJcGVyZl9idWZmZXJfcHV0KG9sZF9idWZmZXIpOwogb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC01Mjk4LDcgKzUzMDgsNyBAQAogCQlod2MtPnNhbXBsZV9wZXJpb2QgPSBzYW1wbGVfcGVyaW9kOwogCQlod2MtPmxhc3RfcGVyaW9kICAgPSBzYW1wbGVfcGVyaW9kOwogCi0JCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgc2FtcGxlX3BlcmlvZCk7CisJCWxvY2FsNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCBzYW1wbGVfcGVyaW9kKTsKIAl9CiAKIAljaGlsZF9ldmVudC0+b3ZlcmZsb3dfaGFuZGxlciA9IHBhcmVudF9ldmVudC0+b3ZlcmZsb3dfaGFuZGxlcjsKQEAgLTUzNTksMTIgKzUzNjksMTIgQEAKIAlpZiAoY2hpbGRfZXZlbnQtPmF0dHIuaW5oZXJpdF9zdGF0KQogCQlwZXJmX2V2ZW50X3JlYWRfZXZlbnQoY2hpbGRfZXZlbnQsIGNoaWxkKTsKIAotCWNoaWxkX3ZhbCA9IGF0b21pYzY0X3JlYWQoJmNoaWxkX2V2ZW50LT5jb3VudCk7CisJY2hpbGRfdmFsID0gcGVyZl9ldmVudF9jb3VudChjaGlsZF9ldmVudCk7CiAKIAkvKgogCSAqIEFkZCBiYWNrIHRoZSBjaGlsZCdzIGNvdW50IHRvIHRoZSBwYXJlbnQncyBjb3VudDoKIAkgKi8KLQlhdG9taWM2NF9hZGQoY2hpbGRfdmFsLCAmcGFyZW50X2V2ZW50LT5jb3VudCk7CisJYXRvbWljNjRfYWRkKGNoaWxkX3ZhbCwgJnBhcmVudF9ldmVudC0+Y2hpbGRfY291bnQpOwogCWF0b21pYzY0X2FkZChjaGlsZF9ldmVudC0+dG90YWxfdGltZV9lbmFibGVkLAogCQkgICAgICZwYXJlbnRfZXZlbnQtPmNoaWxkX3RvdGFsX3RpbWVfZW5hYmxlZCk7CiAJYXRvbWljNjRfYWRkKGNoaWxkX2V2ZW50LT50b3RhbF90aW1lX3J1bm5pbmcsCmRpZmYgLS1naXQgYS9rZXJuZWwvcG1fcW9zX3BhcmFtcy5jIGIva2VybmVsL3BtX3Fvc19wYXJhbXMuYwppbmRleCBmNDJkM2Y3Li45OTZhNGRlIDEwMDY0NAotLS0gYS9rZXJuZWwvcG1fcW9zX3BhcmFtcy5jCisrKyBiL2tlcm5lbC9wbV9xb3NfcGFyYW1zLmMKQEAgLTQ4LDU5ICs0OCw0OSBAQAogICogb3IgcG1fcW9zX29iamVjdCBsaXN0IGFuZCBwbV9xb3Nfb2JqZWN0cyBuZWVkIHRvIGhhcHBlbiB3aXRoIHBtX3Fvc19sb2NrCiAgKiBoZWxkLCB0YWtlbiB3aXRoIF9pcnFzYXZlLiAgT25lIGxvY2sgdG8gcnVsZSB0aGVtIGFsbAogICovCi1zdHJ1Y3QgcG1fcW9zX3JlcXVlc3RfbGlzdCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXVuaW9uIHsKLQkJczMyIHZhbHVlOwotCQlzMzIgdXNlYzsKLQkJczMyIGticHM7Ci0JfTsKLQlpbnQgcG1fcW9zX2NsYXNzOworZW51bSBwbV9xb3NfdHlwZSB7CisJUE1fUU9TX01BWCwJCS8qIHJldHVybiB0aGUgbGFyZ2VzdCB2YWx1ZSAqLworCVBNX1FPU19NSU4JCS8qIHJldHVybiB0aGUgc21hbGxlc3QgdmFsdWUgKi8KIH07CiAKLXN0YXRpYyBzMzIgbWF4X2NvbXBhcmUoczMyIHYxLCBzMzIgdjIpOwotc3RhdGljIHMzMiBtaW5fY29tcGFyZShzMzIgdjEsIHMzMiB2Mik7Ci0KIHN0cnVjdCBwbV9xb3Nfb2JqZWN0IHsKLQlzdHJ1Y3QgcG1fcW9zX3JlcXVlc3RfbGlzdCByZXF1ZXN0czsKKwlzdHJ1Y3QgcGxpc3RfaGVhZCByZXF1ZXN0czsKIAlzdHJ1Y3QgYmxvY2tpbmdfbm90aWZpZXJfaGVhZCAqbm90aWZpZXJzOwogCXN0cnVjdCBtaXNjZGV2aWNlIHBtX3Fvc19wb3dlcl9taXNjZGV2OwogCWNoYXIgKm5hbWU7CiAJczMyIGRlZmF1bHRfdmFsdWU7Ci0JYXRvbWljX3QgdGFyZ2V0X3ZhbHVlOwotCXMzMiAoKmNvbXBhcml0b3IpKHMzMiwgczMyKTsKKwllbnVtIHBtX3Fvc190eXBlIHR5cGU7CiB9OwogCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBtX3Fvc19sb2NrKTsKKwogc3RhdGljIHN0cnVjdCBwbV9xb3Nfb2JqZWN0IG51bGxfcG1fcW9zOwogc3RhdGljIEJMT0NLSU5HX05PVElGSUVSX0hFQUQoY3B1X2RtYV9sYXRfbm90aWZpZXIpOwogc3RhdGljIHN0cnVjdCBwbV9xb3Nfb2JqZWN0IGNwdV9kbWFfcG1fcW9zID0gewotCS5yZXF1ZXN0cyA9IHtMSVNUX0hFQURfSU5JVChjcHVfZG1hX3BtX3Fvcy5yZXF1ZXN0cy5saXN0KX0sCisJLnJlcXVlc3RzID0gUExJU1RfSEVBRF9JTklUKGNwdV9kbWFfcG1fcW9zLnJlcXVlc3RzLCBwbV9xb3NfbG9jayksCiAJLm5vdGlmaWVycyA9ICZjcHVfZG1hX2xhdF9ub3RpZmllciwKIAkubmFtZSA9ICJjcHVfZG1hX2xhdGVuY3kiLAogCS5kZWZhdWx0X3ZhbHVlID0gMjAwMCAqIFVTRUNfUEVSX1NFQywKLQkudGFyZ2V0X3ZhbHVlID0gQVRPTUlDX0lOSVQoMjAwMCAqIFVTRUNfUEVSX1NFQyksCi0JLmNvbXBhcml0b3IgPSBtaW5fY29tcGFyZQorCS50eXBlID0gUE1fUU9TX01JTiwKIH07CiAKIHN0YXRpYyBCTE9DS0lOR19OT1RJRklFUl9IRUFEKG5ldHdvcmtfbGF0X25vdGlmaWVyKTsKIHN0YXRpYyBzdHJ1Y3QgcG1fcW9zX29iamVjdCBuZXR3b3JrX2xhdF9wbV9xb3MgPSB7Ci0JLnJlcXVlc3RzID0ge0xJU1RfSEVBRF9JTklUKG5ldHdvcmtfbGF0X3BtX3Fvcy5yZXF1ZXN0cy5saXN0KX0sCisJLnJlcXVlc3RzID0gUExJU1RfSEVBRF9JTklUKG5ldHdvcmtfbGF0X3BtX3Fvcy5yZXF1ZXN0cywgcG1fcW9zX2xvY2spLAogCS5ub3RpZmllcnMgPSAmbmV0d29ya19sYXRfbm90aWZpZXIsCiAJLm5hbWUgPSAibmV0d29ya19sYXRlbmN5IiwKIAkuZGVmYXVsdF92YWx1ZSA9IDIwMDAgKiBVU0VDX1BFUl9TRUMsCi0JLnRhcmdldF92YWx1ZSA9IEFUT01JQ19JTklUKDIwMDAgKiBVU0VDX1BFUl9TRUMpLAotCS5jb21wYXJpdG9yID0gbWluX2NvbXBhcmUKKwkudHlwZSA9IFBNX1FPU19NSU4KIH07CiAKIAogc3RhdGljIEJMT0NLSU5HX05PVElGSUVSX0hFQUQobmV0d29ya190aHJvdWdocHV0X25vdGlmaWVyKTsKIHN0YXRpYyBzdHJ1Y3QgcG1fcW9zX29iamVjdCBuZXR3b3JrX3Rocm91Z2hwdXRfcG1fcW9zID0gewotCS5yZXF1ZXN0cyA9IHtMSVNUX0hFQURfSU5JVChuZXR3b3JrX3Rocm91Z2hwdXRfcG1fcW9zLnJlcXVlc3RzLmxpc3QpfSwKKwkucmVxdWVzdHMgPSBQTElTVF9IRUFEX0lOSVQobmV0d29ya190aHJvdWdocHV0X3BtX3Fvcy5yZXF1ZXN0cywgcG1fcW9zX2xvY2spLAogCS5ub3RpZmllcnMgPSAmbmV0d29ya190aHJvdWdocHV0X25vdGlmaWVyLAogCS5uYW1lID0gIm5ldHdvcmtfdGhyb3VnaHB1dCIsCiAJLmRlZmF1bHRfdmFsdWUgPSAwLAotCS50YXJnZXRfdmFsdWUgPSBBVE9NSUNfSU5JVCgwKSwKLQkuY29tcGFyaXRvciA9IG1heF9jb21wYXJlCisJLnR5cGUgPSBQTV9RT1NfTUFYLAogfTsKIAogCkBAIC0xMTEsOCArMTAxLDYgQEAKIAkmbmV0d29ya190aHJvdWdocHV0X3BtX3FvcwogfTsKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhwbV9xb3NfbG9jayk7Ci0KIHN0YXRpYyBzc2l6ZV90IHBtX3Fvc19wb3dlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmZfcG9zKTsKIHN0YXRpYyBpbnQgcG1fcW9zX3Bvd2VyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApOwpAQCAtMTI0LDQ2ICsxMTIsNTUgQEAKIAkucmVsZWFzZSA9IHBtX3Fvc19wb3dlcl9yZWxlYXNlLAogfTsKIAotLyogc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKi8KLXN0YXRpYyBzMzIgbWF4X2NvbXBhcmUoczMyIHYxLCBzMzIgdjIpCisvKiB1bmxvY2tlZCBpbnRlcm5hbCB2YXJpYW50ICovCitzdGF0aWMgaW5saW5lIGludCBwbV9xb3NfZ2V0X3ZhbHVlKHN0cnVjdCBwbV9xb3Nfb2JqZWN0ICpvKQogewotCXJldHVybiBtYXgodjEsIHYyKTsKKwlpZiAocGxpc3RfaGVhZF9lbXB0eSgmby0+cmVxdWVzdHMpKQorCQlyZXR1cm4gby0+ZGVmYXVsdF92YWx1ZTsKKworCXN3aXRjaCAoby0+dHlwZSkgeworCWNhc2UgUE1fUU9TX01JTjoKKwkJcmV0dXJuIHBsaXN0X2xhc3QoJm8tPnJlcXVlc3RzKS0+cHJpbzsKKworCWNhc2UgUE1fUU9TX01BWDoKKwkJcmV0dXJuIHBsaXN0X2ZpcnN0KCZvLT5yZXF1ZXN0cyktPnByaW87CisKKwlkZWZhdWx0OgorCQkvKiBydW50aW1lIGNoZWNrIGZvciBub3QgdXNpbmcgZW51bSAqLworCQlCVUcoKTsKKwl9CiB9CiAKLXN0YXRpYyBzMzIgbWluX2NvbXBhcmUoczMyIHYxLCBzMzIgdjIpCitzdGF0aWMgdm9pZCB1cGRhdGVfdGFyZ2V0KHN0cnVjdCBwbV9xb3Nfb2JqZWN0ICpvLCBzdHJ1Y3QgcGxpc3Rfbm9kZSAqbm9kZSwKKwkJCSAgaW50IGRlbCwgaW50IHZhbHVlKQogewotCXJldHVybiBtaW4odjEsIHYyKTsKLX0KLQotCi1zdGF0aWMgdm9pZCB1cGRhdGVfdGFyZ2V0KGludCBwbV9xb3NfY2xhc3MpCi17Ci0JczMyIGV4dHJlbWVfdmFsdWU7Ci0Jc3RydWN0IHBtX3Fvc19yZXF1ZXN0X2xpc3QgKm5vZGU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgY2FsbF9ub3RpZmllciA9IDA7CisJaW50IHByZXZfdmFsdWUsIGN1cnJfdmFsdWU7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG1fcW9zX2xvY2ssIGZsYWdzKTsKLQlleHRyZW1lX3ZhbHVlID0gcG1fcW9zX2FycmF5W3BtX3Fvc19jbGFzc10tPmRlZmF1bHRfdmFsdWU7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLAotCQkJJnBtX3Fvc19hcnJheVtwbV9xb3NfY2xhc3NdLT5yZXF1ZXN0cy5saXN0LCBsaXN0KSB7Ci0JCWV4dHJlbWVfdmFsdWUgPSBwbV9xb3NfYXJyYXlbcG1fcW9zX2NsYXNzXS0+Y29tcGFyaXRvcigKLQkJCQlleHRyZW1lX3ZhbHVlLCBub2RlLT52YWx1ZSk7CisJcHJldl92YWx1ZSA9IHBtX3Fvc19nZXRfdmFsdWUobyk7CisJLyogUE1fUU9TX0RFRkFVTFRfVkFMVUUgaXMgYSBzaWduYWwgdGhhdCB0aGUgdmFsdWUgaXMgdW5jaGFuZ2VkICovCisJaWYgKHZhbHVlICE9IFBNX1FPU19ERUZBVUxUX1ZBTFVFKSB7CisJCS8qCisJCSAqIHRvIGNoYW5nZSB0aGUgbGlzdCwgd2UgYXRvbWljYWxseSByZW1vdmUsIHJlaW5pdAorCQkgKiB3aXRoIG5ldyB2YWx1ZSBhbmQgYWRkLCB0aGVuIHNlZSBpZiB0aGUgZXh0cmVtYWwKKwkJICogY2hhbmdlZAorCQkgKi8KKwkJcGxpc3RfZGVsKG5vZGUsICZvLT5yZXF1ZXN0cyk7CisJCXBsaXN0X25vZGVfaW5pdChub2RlLCB2YWx1ZSk7CisJCXBsaXN0X2FkZChub2RlLCAmby0+cmVxdWVzdHMpOworCX0gZWxzZSBpZiAoZGVsKSB7CisJCXBsaXN0X2RlbChub2RlLCAmby0+cmVxdWVzdHMpOworCX0gZWxzZSB7CisJCXBsaXN0X2FkZChub2RlLCAmby0+cmVxdWVzdHMpOwogCX0KLQlpZiAoYXRvbWljX3JlYWQoJnBtX3Fvc19hcnJheVtwbV9xb3NfY2xhc3NdLT50YXJnZXRfdmFsdWUpICE9Ci0JCQlleHRyZW1lX3ZhbHVlKSB7Ci0JCWNhbGxfbm90aWZpZXIgPSAxOwotCQlhdG9taWNfc2V0KCZwbV9xb3NfYXJyYXlbcG1fcW9zX2NsYXNzXS0+dGFyZ2V0X3ZhbHVlLAotCQkJCWV4dHJlbWVfdmFsdWUpOwotCQlwcl9kZWJ1ZyhLRVJOX0VSUiAibmV3IHRhcmdldCBmb3IgcW9zICVkIGlzICVkXG4iLCBwbV9xb3NfY2xhc3MsCi0JCQlhdG9taWNfcmVhZCgmcG1fcW9zX2FycmF5W3BtX3Fvc19jbGFzc10tPnRhcmdldF92YWx1ZSkpOwotCX0KKwljdXJyX3ZhbHVlID0gcG1fcW9zX2dldF92YWx1ZShvKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbV9xb3NfbG9jaywgZmxhZ3MpOwogCi0JaWYgKGNhbGxfbm90aWZpZXIpCi0JCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oCi0JCQkJcG1fcW9zX2FycmF5W3BtX3Fvc19jbGFzc10tPm5vdGlmaWVycywKLQkJCQkJKHVuc2lnbmVkIGxvbmcpIGV4dHJlbWVfdmFsdWUsIE5VTEwpOworCWlmIChwcmV2X3ZhbHVlICE9IGN1cnJfdmFsdWUpCisJCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oby0+bm90aWZpZXJzLAorCQkJCQkgICAgICh1bnNpZ25lZCBsb25nKWN1cnJfdmFsdWUsCisJCQkJCSAgICAgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbnQgcmVnaXN0ZXJfcG1fcW9zX21pc2Moc3RydWN0IHBtX3Fvc19vYmplY3QgKnFvcykKQEAgLTE5NiwxMCArMTkzLDIzIEBACiAgKi8KIGludCBwbV9xb3NfcmVxdWVzdChpbnQgcG1fcW9zX2NsYXNzKQogewotCXJldHVybiBhdG9taWNfcmVhZCgmcG1fcW9zX2FycmF5W3BtX3Fvc19jbGFzc10tPnRhcmdldF92YWx1ZSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgdmFsdWU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG1fcW9zX2xvY2ssIGZsYWdzKTsKKwl2YWx1ZSA9IHBtX3Fvc19nZXRfdmFsdWUocG1fcW9zX2FycmF5W3BtX3Fvc19jbGFzc10pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtX3Fvc19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gdmFsdWU7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwbV9xb3NfcmVxdWVzdCk7CiAKK2ludCBwbV9xb3NfcmVxdWVzdF9hY3RpdmUoc3RydWN0IHBtX3Fvc19yZXF1ZXN0X2xpc3QgKnJlcSkKK3sKKwlyZXR1cm4gcmVxLT5wbV9xb3NfY2xhc3MgIT0gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBtX3Fvc19yZXF1ZXN0X2FjdGl2ZSk7CisKIC8qKgogICogcG1fcW9zX2FkZF9yZXF1ZXN0IC0gaW5zZXJ0cyBuZXcgcW9zIHJlcXVlc3QgaW50byB0aGUgbGlzdAogICogQHBtX3Fvc19jbGFzczogaWRlbnRpZmllcyB3aGljaCBsaXN0IG9mIHFvcyByZXF1ZXN0IHRvIHVzCkBAIC0yMTEsMjcgKzIyMSwyMyBAQAogICogZWxlbWVudCBhcyBhIGhhbmRsZSBmb3IgdXNlIGluIHVwZGF0aW5nIGFuZCByZW1vdmFsLiAgQ2FsbCBuZWVkcyB0byBzYXZlCiAgKiB0aGlzIGhhbmRsZSBmb3IgbGF0ZXIgdXNlLgogICovCi1zdHJ1Y3QgcG1fcW9zX3JlcXVlc3RfbGlzdCAqcG1fcW9zX2FkZF9yZXF1ZXN0KGludCBwbV9xb3NfY2xhc3MsIHMzMiB2YWx1ZSkKK3ZvaWQgcG1fcW9zX2FkZF9yZXF1ZXN0KHN0cnVjdCBwbV9xb3NfcmVxdWVzdF9saXN0ICpkZXAsCisJCQlpbnQgcG1fcW9zX2NsYXNzLCBzMzIgdmFsdWUpCiB7Ci0Jc3RydWN0IHBtX3Fvc19yZXF1ZXN0X2xpc3QgKmRlcDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBwbV9xb3Nfb2JqZWN0ICpvID0gIHBtX3Fvc19hcnJheVtwbV9xb3NfY2xhc3NdOworCWludCBuZXdfdmFsdWU7CiAKLQlkZXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG1fcW9zX3JlcXVlc3RfbGlzdCksIEdGUF9LRVJORUwpOwotCWlmIChkZXApIHsKLQkJaWYgKHZhbHVlID09IFBNX1FPU19ERUZBVUxUX1ZBTFVFKQotCQkJZGVwLT52YWx1ZSA9IHBtX3Fvc19hcnJheVtwbV9xb3NfY2xhc3NdLT5kZWZhdWx0X3ZhbHVlOwotCQllbHNlCi0JCQlkZXAtPnZhbHVlID0gdmFsdWU7Ci0JCWRlcC0+cG1fcW9zX2NsYXNzID0gcG1fcW9zX2NsYXNzOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZwbV9xb3NfbG9jaywgZmxhZ3MpOwotCQlsaXN0X2FkZCgmZGVwLT5saXN0LAotCQkJJnBtX3Fvc19hcnJheVtwbV9xb3NfY2xhc3NdLT5yZXF1ZXN0cy5saXN0KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1fcW9zX2xvY2ssIGZsYWdzKTsKLQkJdXBkYXRlX3RhcmdldChwbV9xb3NfY2xhc3MpOworCWlmIChwbV9xb3NfcmVxdWVzdF9hY3RpdmUoZGVwKSkgeworCQlXQVJOKDEsIEtFUk5fRVJSICJwbV9xb3NfYWRkX3JlcXVlc3QoKSBjYWxsZWQgZm9yIGFscmVhZHkgYWRkZWQgcmVxdWVzdFxuIik7CisJCXJldHVybjsKIAl9Ci0KLQlyZXR1cm4gZGVwOworCWlmICh2YWx1ZSA9PSBQTV9RT1NfREVGQVVMVF9WQUxVRSkKKwkJbmV3X3ZhbHVlID0gby0+ZGVmYXVsdF92YWx1ZTsKKwllbHNlCisJCW5ld192YWx1ZSA9IHZhbHVlOworCXBsaXN0X25vZGVfaW5pdCgmZGVwLT5saXN0LCBuZXdfdmFsdWUpOworCWRlcC0+cG1fcW9zX2NsYXNzID0gcG1fcW9zX2NsYXNzOworCXVwZGF0ZV90YXJnZXQobywgJmRlcC0+bGlzdCwgMCwgUE1fUU9TX0RFRkFVTFRfVkFMVUUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocG1fcW9zX2FkZF9yZXF1ZXN0KTsKIApAQCAtMjQ2LDI3ICsyNTIsMjggQEAKICAqIEF0dGVtcHRzIGFyZSBtYWRlIHRvIG1ha2UgdGhpcyBjb2RlIGNhbGxhYmxlIG9uIGhvdCBjb2RlIHBhdGhzLgogICovCiB2b2lkIHBtX3Fvc191cGRhdGVfcmVxdWVzdChzdHJ1Y3QgcG1fcW9zX3JlcXVlc3RfbGlzdCAqcG1fcW9zX3JlcSwKLQkJczMyIG5ld192YWx1ZSkKKwkJCSAgIHMzMiBuZXdfdmFsdWUpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcGVuZGluZ191cGRhdGUgPSAwOwogCXMzMiB0ZW1wOworCXN0cnVjdCBwbV9xb3Nfb2JqZWN0ICpvOwogCi0JaWYgKHBtX3Fvc19yZXEpIHsgLypndWFyZCBhZ2FpbnN0IGNhbGxlcnMgcGFzc2luZyBpbiBudWxsICovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZwbV9xb3NfbG9jaywgZmxhZ3MpOwotCQlpZiAobmV3X3ZhbHVlID09IFBNX1FPU19ERUZBVUxUX1ZBTFVFKQotCQkJdGVtcCA9IHBtX3Fvc19hcnJheVtwbV9xb3NfcmVxLT5wbV9xb3NfY2xhc3NdLT5kZWZhdWx0X3ZhbHVlOwotCQllbHNlCi0JCQl0ZW1wID0gbmV3X3ZhbHVlOworCWlmICghcG1fcW9zX3JlcSkgLypndWFyZCBhZ2FpbnN0IGNhbGxlcnMgcGFzc2luZyBpbiBudWxsICovCisJCXJldHVybjsKIAotCQlpZiAodGVtcCAhPSBwbV9xb3NfcmVxLT52YWx1ZSkgewotCQkJcGVuZGluZ191cGRhdGUgPSAxOwotCQkJcG1fcW9zX3JlcS0+dmFsdWUgPSB0ZW1wOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtX3Fvc19sb2NrLCBmbGFncyk7Ci0JCWlmIChwZW5kaW5nX3VwZGF0ZSkKLQkJCXVwZGF0ZV90YXJnZXQocG1fcW9zX3JlcS0+cG1fcW9zX2NsYXNzKTsKKwlpZiAoIXBtX3Fvc19yZXF1ZXN0X2FjdGl2ZShwbV9xb3NfcmVxKSkgeworCQlXQVJOKDEsIEtFUk5fRVJSICJwbV9xb3NfdXBkYXRlX3JlcXVlc3QoKSBjYWxsZWQgZm9yIHVua25vd24gb2JqZWN0XG4iKTsKKwkJcmV0dXJuOwogCX0KKworCW8gPSBwbV9xb3NfYXJyYXlbcG1fcW9zX3JlcS0+cG1fcW9zX2NsYXNzXTsKKworCWlmIChuZXdfdmFsdWUgPT0gUE1fUU9TX0RFRkFVTFRfVkFMVUUpCisJCXRlbXAgPSBvLT5kZWZhdWx0X3ZhbHVlOworCWVsc2UKKwkJdGVtcCA9IG5ld192YWx1ZTsKKworCWlmICh0ZW1wICE9IHBtX3Fvc19yZXEtPmxpc3QucHJpbykKKwkJdXBkYXRlX3RhcmdldChvLCAmcG1fcW9zX3JlcS0+bGlzdCwgMCwgdGVtcCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwbV9xb3NfdXBkYXRlX3JlcXVlc3QpOwogCkBAIC0yODAsMTkgKzI4NywyMCBAQAogICovCiB2b2lkIHBtX3Fvc19yZW1vdmVfcmVxdWVzdChzdHJ1Y3QgcG1fcW9zX3JlcXVlc3RfbGlzdCAqcG1fcW9zX3JlcSkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBxb3NfY2xhc3M7CisJc3RydWN0IHBtX3Fvc19vYmplY3QgKm87CiAKIAlpZiAocG1fcW9zX3JlcSA9PSBOVUxMKQogCQlyZXR1cm47CiAJCS8qIHNpbGVudCByZXR1cm4gdG8ga2VlcCBwY20gY29kZSBjbGVhbmVyICovCiAKLQlxb3NfY2xhc3MgPSBwbV9xb3NfcmVxLT5wbV9xb3NfY2xhc3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBtX3Fvc19sb2NrLCBmbGFncyk7Ci0JbGlzdF9kZWwoJnBtX3Fvc19yZXEtPmxpc3QpOwotCWtmcmVlKHBtX3Fvc19yZXEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtX3Fvc19sb2NrLCBmbGFncyk7Ci0JdXBkYXRlX3RhcmdldChxb3NfY2xhc3MpOworCWlmICghcG1fcW9zX3JlcXVlc3RfYWN0aXZlKHBtX3Fvc19yZXEpKSB7CisJCVdBUk4oMSwgS0VSTl9FUlIgInBtX3Fvc19yZW1vdmVfcmVxdWVzdCgpIGNhbGxlZCBmb3IgdW5rbm93biBvYmplY3RcbiIpOworCQlyZXR1cm47CisJfQorCisJbyA9IHBtX3Fvc19hcnJheVtwbV9xb3NfcmVxLT5wbV9xb3NfY2xhc3NdOworCXVwZGF0ZV90YXJnZXQobywgJnBtX3Fvc19yZXEtPmxpc3QsIDEsIFBNX1FPU19ERUZBVUxUX1ZBTFVFKTsKKwltZW1zZXQocG1fcW9zX3JlcSwgMCwgc2l6ZW9mKCpwbV9xb3NfcmVxKSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwbV9xb3NfcmVtb3ZlX3JlcXVlc3QpOwogCkBAIC0zNDAsOCArMzQ4LDEyIEBACiAKIAlwbV9xb3NfY2xhc3MgPSBmaW5kX3BtX3Fvc19vYmplY3RfYnlfbWlub3IoaW1pbm9yKGlub2RlKSk7CiAJaWYgKHBtX3Fvc19jbGFzcyA+PSAwKSB7Ci0JCWZpbHAtPnByaXZhdGVfZGF0YSA9ICh2b2lkICopIHBtX3Fvc19hZGRfcmVxdWVzdChwbV9xb3NfY2xhc3MsCi0JCQkJUE1fUU9TX0RFRkFVTFRfVkFMVUUpOworCQlzdHJ1Y3QgcG1fcW9zX3JlcXVlc3RfbGlzdCAqcmVxID0ga3phbGxvYyhHRlBfS0VSTkVMLCBzaXplb2YoKnJlcSkpOworCQlpZiAoIXJlcSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXBtX3Fvc19hZGRfcmVxdWVzdChyZXEsIHBtX3Fvc19jbGFzcywgUE1fUU9TX0RFRkFVTFRfVkFMVUUpOworCQlmaWxwLT5wcml2YXRlX2RhdGEgPSByZXE7CiAKIAkJaWYgKGZpbHAtPnByaXZhdGVfZGF0YSkKIAkJCXJldHVybiAwOwpAQCAtMzUzLDggKzM2NSw5IEBACiB7CiAJc3RydWN0IHBtX3Fvc19yZXF1ZXN0X2xpc3QgKnJlcTsKIAotCXJlcSA9IChzdHJ1Y3QgcG1fcW9zX3JlcXVlc3RfbGlzdCAqKWZpbHAtPnByaXZhdGVfZGF0YTsKKwlyZXEgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJcG1fcW9zX3JlbW92ZV9yZXF1ZXN0KHJlcSk7CisJa2ZyZWUocmVxKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYyBiL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKaW5kZXggOTgyOTY0Ni4uZjY2YmRkMyAxMDA2NDQKLS0tIGEva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYworKysgYi9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCkBAIC0yMzIsMzEgKzIzMiwyNCBAQAogCiB2b2lkIHRocmVhZF9ncm91cF9jcHV0aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgdGFza19jcHV0aW1lICp0aW1lcykKIHsKLQlzdHJ1Y3Qgc2lnaGFuZF9zdHJ1Y3QgKnNpZ2hhbmQ7Ci0Jc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZzsKKwlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnID0gdHNrLT5zaWduYWw7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0OwogCi0JKnRpbWVzID0gSU5JVF9DUFVUSU1FOworCXRpbWVzLT51dGltZSA9IHNpZy0+dXRpbWU7CisJdGltZXMtPnN0aW1lID0gc2lnLT5zdGltZTsKKwl0aW1lcy0+c3VtX2V4ZWNfcnVudGltZSA9IHNpZy0+c3VtX3NjaGVkX3J1bnRpbWU7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0Jc2lnaGFuZCA9IHJjdV9kZXJlZmVyZW5jZSh0c2stPnNpZ2hhbmQpOwotCWlmICghc2lnaGFuZCkKKwkvKiBtYWtlIHN1cmUgd2UgY2FuIHRydXN0IHRzay0+dGhyZWFkX2dyb3VwIGxpc3QgKi8KKwlpZiAoIWxpa2VseShwaWRfYWxpdmUodHNrKSkpCiAJCWdvdG8gb3V0OwogCi0Jc2lnID0gdHNrLT5zaWduYWw7Ci0KIAl0ID0gdHNrOwogCWRvIHsKIAkJdGltZXMtPnV0aW1lID0gY3B1dGltZV9hZGQodGltZXMtPnV0aW1lLCB0LT51dGltZSk7CiAJCXRpbWVzLT5zdGltZSA9IGNwdXRpbWVfYWRkKHRpbWVzLT5zdGltZSwgdC0+c3RpbWUpOwogCQl0aW1lcy0+c3VtX2V4ZWNfcnVudGltZSArPSB0LT5zZS5zdW1fZXhlY19ydW50aW1lOwotCi0JCXQgPSBuZXh0X3RocmVhZCh0KTsKLQl9IHdoaWxlICh0ICE9IHRzayk7Ci0KLQl0aW1lcy0+dXRpbWUgPSBjcHV0aW1lX2FkZCh0aW1lcy0+dXRpbWUsIHNpZy0+dXRpbWUpOwotCXRpbWVzLT5zdGltZSA9IGNwdXRpbWVfYWRkKHRpbWVzLT5zdGltZSwgc2lnLT5zdGltZSk7Ci0JdGltZXMtPnN1bV9leGVjX3J1bnRpbWUgKz0gc2lnLT5zdW1fc2NoZWRfcnVudGltZTsKKwl9IHdoaWxlX2VhY2hfdGhyZWFkKHRzaywgdCk7CiBvdXQ6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CkBAIC0xMjc5LDEwICsxMjcyLDYgQEAKIHsKIAlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnOwogCi0JLyogdHNrID09IGN1cnJlbnQsIGVuc3VyZSBpdCBpcyBzYWZlIHRvIHVzZSAtPnNpZ25hbC9zaWdoYW5kICovCi0JaWYgKHVubGlrZWx5KHRzay0+ZXhpdF9zdGF0ZSkpCi0JCXJldHVybiAwOwotCiAJaWYgKCF0YXNrX2NwdXRpbWVfemVybygmdHNrLT5jcHV0aW1lX2V4cGlyZXMpKSB7CiAJCXN0cnVjdCB0YXNrX2NwdXRpbWUgdGFza19zYW1wbGUgPSB7CiAJCQkudXRpbWUgPSB0c2stPnV0aW1lLApAQCAtMTI5OCw3ICsxMjg3LDEwIEBACiAJaWYgKHNpZy0+Y3B1dGltZXIucnVubmluZykgewogCQlzdHJ1Y3QgdGFza19jcHV0aW1lIGdyb3VwX3NhbXBsZTsKIAotCQl0aHJlYWRfZ3JvdXBfY3B1dGltZXIodHNrLCAmZ3JvdXBfc2FtcGxlKTsKKwkJc3Bpbl9sb2NrKCZzaWctPmNwdXRpbWVyLmxvY2spOworCQlncm91cF9zYW1wbGUgPSBzaWctPmNwdXRpbWVyLmNwdXRpbWU7CisJCXNwaW5fdW5sb2NrKCZzaWctPmNwdXRpbWVyLmxvY2spOworCiAJCWlmICh0YXNrX2NwdXRpbWVfZXhwaXJlZCgmZ3JvdXBfc2FtcGxlLCAmc2lnLT5jcHV0aW1lX2V4cGlyZXMpKQogCQkJcmV0dXJuIDE7CiAJfQpAQCAtMTMxNSw2ICsxMzA3LDcgQEAKIHsKIAlMSVNUX0hFQUQoZmlyaW5nKTsKIAlzdHJ1Y3Qga19pdGltZXIgKnRpbWVyLCAqbmV4dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOwogCkBAIC0xMzI1LDcgKzEzMTgsOCBAQAogCWlmICghZmFzdHBhdGhfdGltZXJfY2hlY2sodHNrKSkKIAkJcmV0dXJuOwogCi0Jc3Bpbl9sb2NrKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOworCWlmICghbG9ja190YXNrX3NpZ2hhbmQodHNrLCAmZmxhZ3MpKQorCQlyZXR1cm47CiAJLyoKIAkgKiBIZXJlIHdlIHRha2Ugb2ZmIHRzay0+c2lnbmFsLT5jcHVfdGltZXJzW05dIGFuZAogCSAqIHRzay0+Y3B1X3RpbWVyc1tOXSBhbGwgdGhlIHRpbWVycyB0aGF0IGFyZSBmaXJpbmcsIGFuZApAQCAtMTM0Nyw3ICsxMzQxLDcgQEAKIAkgKiB0aGF0IGdldHMgdGhlIHRpbWVyIGxvY2sgYmVmb3JlIHdlIGRvIHdpbGwgZ2l2ZSBpdCB1cCBhbmQKIAkgKiBzcGluIHVudGlsIHdlJ3ZlIHRha2VuIGNhcmUgb2YgdGhhdCB0aW1lciBiZWxvdy4KIAkgKi8KLQlzcGluX3VubG9jaygmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKKwl1bmxvY2tfdGFza19zaWdoYW5kKHRzaywgJmZsYWdzKTsKIAogCS8qCiAJICogTm93IHRoYXQgYWxsIHRoZSB0aW1lcnMgb24gb3VyIGxpc3QgaGF2ZSB0aGUgZmlyaW5nIGZsYWcsCmRpZmYgLS1naXQgYS9rZXJuZWwvcG9zaXgtdGltZXJzLmMgYi9rZXJuZWwvcG9zaXgtdGltZXJzLmMKaW5kZXggYWQ3MjM0Mi4uOWNhNDk3MyAxMDA2NDQKLS0tIGEva2VybmVsL3Bvc2l4LXRpbWVycy5jCisrKyBiL2tlcm5lbC9wb3NpeC10aW1lcnMuYwpAQCAtNTYwLDExICs1NjAsNiBAQAogCW5ld190aW1lci0+aXRfY2xvY2sgPSB3aGljaF9jbG9jazsKIAluZXdfdGltZXItPml0X292ZXJydW4gPSAtMTsKIAotCWlmIChjb3B5X3RvX3VzZXIoY3JlYXRlZF90aW1lcl9pZCwKLQkJCSAmbmV3X3RpbWVyX2lkLCBzaXplb2YgKG5ld190aW1lcl9pZCkpKSB7Ci0JCWVycm9yID0gLUVGQVVMVDsKLQkJZ290byBvdXQ7Ci0JfQogCWlmICh0aW1lcl9ldmVudF9zcGVjKSB7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmZXZlbnQsIHRpbWVyX2V2ZW50X3NwZWMsIHNpemVvZiAoZXZlbnQpKSkgewogCQkJZXJyb3IgPSAtRUZBVUxUOwpAQCAtNTkwLDYgKzU4NSwxMiBAQAogCW5ld190aW1lci0+c2lncS0+aW5mby5zaV90aWQgICA9IG5ld190aW1lci0+aXRfaWQ7CiAJbmV3X3RpbWVyLT5zaWdxLT5pbmZvLnNpX2NvZGUgID0gU0lfVElNRVI7CiAKKwlpZiAoY29weV90b191c2VyKGNyZWF0ZWRfdGltZXJfaWQsCisJCQkgJm5ld190aW1lcl9pZCwgc2l6ZW9mIChuZXdfdGltZXJfaWQpKSkgeworCQllcnJvciA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKwogCWVycm9yID0gQ0xPQ0tfRElTUEFUQ0god2hpY2hfY2xvY2ssIHRpbWVyX2NyZWF0ZSwgKG5ld190aW1lcikpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvaGliZXJuYXRlLmMgYi9rZXJuZWwvcG93ZXIvaGliZXJuYXRlLmMKaW5kZXggYWE5ZTkxNi4uOGRjMzFlMCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jCisrKyBiL2tlcm5lbC9wb3dlci9oaWJlcm5hdGUuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDMgUGF0cmljayBNb2NoZWwKICAqIENvcHlyaWdodCAoYykgMjAwMyBPcGVuIFNvdXJjZSBEZXZlbG9wbWVudCBMYWIKLSAqIENvcHlyaWdodCAoYykgMjAwNCBQYXZlbCBNYWNoZWsgPHBhdmVsQHN1c2UuY3o+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgUGF2ZWwgTWFjaGVrIDxwYXZlbEB1Y3cuY3o+CiAgKiBDb3B5cmlnaHQgKGMpIDIwMDkgUmFmYWVsIEouIFd5c29ja2ksIE5vdmVsbCBJbmMuCiAgKgogICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEx2Mi4KQEAgLTI3Nyw3ICsyNzcsNyBAQAogCQlnb3RvIEVuYWJsZV9pcnFzOwogCX0KIAotCWlmIChoaWJlcm5hdGlvbl90ZXN0KFRFU1RfQ09SRSkpCisJaWYgKGhpYmVybmF0aW9uX3Rlc3QoVEVTVF9DT1JFKSB8fCAhcG1fY2hlY2tfd2FrZXVwX2V2ZW50cygpKQogCQlnb3RvIFBvd2VyX3VwOwogCiAJaW5fc3VzcGVuZCA9IDE7CkBAIC0yODgsOCArMjg4LDEwIEBACiAJCQllcnJvcik7CiAJLyogUmVzdG9yZSBjb250cm9sIGZsb3cgbWFnaWNhbGx5IGFwcGVhcnMgaGVyZSAqLwogCXJlc3RvcmVfcHJvY2Vzc29yX3N0YXRlKCk7Ci0JaWYgKCFpbl9zdXNwZW5kKQorCWlmICghaW5fc3VzcGVuZCkgeworCQlldmVudHNfY2hlY2tfZW5hYmxlZCA9IGZhbHNlOwogCQlwbGF0Zm9ybV9sZWF2ZShwbGF0Zm9ybV9tb2RlKTsKKwl9CiAKICBQb3dlcl91cDoKIAlzeXNkZXZfcmVzdW1lKCk7CkBAIC0zMjgsNyArMzMwLDcgQEAKIAogCWVycm9yID0gcGxhdGZvcm1fYmVnaW4ocGxhdGZvcm1fbW9kZSk7CiAJaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7CisJCWdvdG8gQ2xvc2U7CiAKIAkvKiBQcmVhbGxvY2F0ZSBpbWFnZSBtZW1vcnkgYmVmb3JlIHNodXR0aW5nIGRvd24gZGV2aWNlcy4gKi8KIAllcnJvciA9IGhpYmVybmF0ZV9wcmVhbGxvY2F0ZV9tZW1vcnkoKTsKQEAgLTUxMSwxOCArNTEzLDI0IEBACiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCXN5c2Rldl9zdXNwZW5kKFBNU0dfSElCRVJOQVRFKTsKKwlpZiAoIXBtX2NoZWNrX3dha2V1cF9ldmVudHMoKSkgeworCQllcnJvciA9IC1FQUdBSU47CisJCWdvdG8gUG93ZXJfdXA7CisJfQorCiAJaGliZXJuYXRpb25fb3BzLT5lbnRlcigpOwogCS8qIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSAqLwogCXdoaWxlICgxKTsKIAotCS8qCi0JICogV2UgZG9uJ3QgbmVlZCB0byByZWVuYWJsZSB0aGUgbm9uYm9vdCBDUFVzIG9yIHJlc3VtZSBjb25zb2xlcywgc2luY2UKLQkgKiB0aGUgc3lzdGVtIGlzIGdvaW5nIHRvIGJlIGhhbHRlZCBhbnl3YXkuCi0JICovCisgUG93ZXJfdXA6CisJc3lzZGV2X3Jlc3VtZSgpOworCWxvY2FsX2lycV9lbmFibGUoKTsKKwllbmFibGVfbm9uYm9vdF9jcHVzKCk7CisKICBQbGF0Zm9ybV9maW5pc2g6CiAJaGliZXJuYXRpb25fb3BzLT5maW5pc2goKTsKIAotCWRwbV9zdXNwZW5kX25vaXJxKFBNU0dfUkVTVE9SRSk7CisJZHBtX3Jlc3VtZV9ub2lycShQTVNHX1JFU1RPUkUpOwogCiAgUmVzdW1lX2RldmljZXM6CiAJZW50ZXJpbmdfcGxhdGZvcm1faGliZXJuYXRpb24gPSBmYWxzZTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9tYWluLmMgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCmluZGV4IGI1ODgwMGIuLjYyYjBiYzYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9tYWluLmMKKysrIGIva2VybmVsL3Bvd2VyL21haW4uYwpAQCAtMjA0LDYgKzIwNCw2MCBAQAogCiBwb3dlcl9hdHRyKHN0YXRlKTsKIAorI2lmZGVmIENPTkZJR19QTV9TTEVFUAorLyoKKyAqIFRoZSAnd2FrZXVwX2NvdW50JyBhdHRyaWJ1dGUsIGFsb25nIHdpdGggdGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGluCisgKiBkcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmMsIHByb3ZpZGVzIGEgbWVhbnMgYnkgd2hpY2ggd2FrZXVwIGV2ZW50cyBjYW4gYmUKKyAqIGhhbmRsZWQgaW4gYSBub24tcmFjeSB3YXkuCisgKgorICogSWYgYSB3YWtldXAgZXZlbnQgb2NjdXJzIHdoZW4gdGhlIHN5c3RlbSBpcyBpbiBhIHNsZWVwIHN0YXRlLCBpdCBzaW1wbHkgaXMKKyAqIHdva2VuIHVwLiAgSW4gdHVybiwgaWYgYW4gZXZlbnQgdGhhdCB3b3VsZCB3YWtlIHRoZSBzeXN0ZW0gdXAgZnJvbSBhIHNsZWVwCisgKiBzdGF0ZSBvY2N1cnMgd2hlbiBpdCBpcyB1bmRlcmdvaW5nIGEgdHJhbnNpdGlvbiB0byB0aGF0IHNsZWVwIHN0YXRlLCB0aGUKKyAqIHRyYW5zaXRpb24gc2hvdWxkIGJlIGFib3J0ZWQuICBNb3Jlb3ZlciwgaWYgc3VjaCBhbiBldmVudCBvY2N1cnMgd2hlbiB0aGUKKyAqIHN5c3RlbSBpcyBpbiB0aGUgd29ya2luZyBzdGF0ZSwgYW4gYXR0ZW1wdCB0byBzdGFydCBhIHRyYW5zaXRpb24gdG8gdGhlCisgKiBnaXZlbiBzbGVlcCBzdGF0ZSBzaG91bGQgZmFpbCBkdXJpbmcgY2VydGFpbiBwZXJpb2QgYWZ0ZXIgdGhlIGRldGVjdGlvbiBvZgorICogdGhlIGV2ZW50LiAgVXNpbmcgdGhlICdzdGF0ZScgYXR0cmlidXRlIGFsb25lIGlzIG5vdCBzdWZmaWNpZW50IHRvIHNhdGlzZnkKKyAqIHRoZXNlIHJlcXVpcmVtZW50cywgYmVjYXVzZSBhIHdha2V1cCBldmVudCBtYXkgb2NjdXIgZXhhY3RseSB3aGVuICdzdGF0ZScKKyAqIGlzIGJlaW5nIHdyaXR0ZW4gdG8gYW5kIG1heSBiZSBkZWxpdmVyZWQgdG8gdXNlciBzcGFjZSByaWdodCBiZWZvcmUgaXQgaXMKKyAqIGZyb3plbiwgc28gdGhlIGV2ZW50IHdpbGwgcmVtYWluIG9ubHkgcGFydGlhbGx5IHByb2Nlc3NlZCB1bnRpbCB0aGUgc3lzdGVtIGlzCisgKiB3b2tlbiB1cCBieSBhbm90aGVyIGV2ZW50LiAgSW4gcGFydGljdWxhciwgaXQgd29uJ3QgY2F1c2UgdGhlIHRyYW5zaXRpb24gdG8KKyAqIGEgc2xlZXAgc3RhdGUgdG8gYmUgYWJvcnRlZC4KKyAqCisgKiBUaGlzIGRpZmZpY3VsdHkgbWF5IGJlIG92ZXJjb21lIGlmIHVzZXIgc3BhY2UgdXNlcyAnd2FrZXVwX2NvdW50JyBiZWZvcmUKKyAqIHdyaXRpbmcgdG8gJ3N0YXRlJy4gIEl0IGZpcnN0IHNob3VsZCByZWFkIGZyb20gJ3dha2V1cF9jb3VudCcgYW5kIHN0b3JlCisgKiB0aGUgcmVhZCB2YWx1ZS4gIFRoZW4sIGFmdGVyIGNhcnJ5aW5nIG91dCBpdHMgb3duIHByZXBhcmF0aW9ucyBmb3IgdGhlIHN5c3RlbQorICogdHJhbnNpdGlvbiB0byBhIHNsZWVwIHN0YXRlLCBpdCBzaG91bGQgd3JpdGUgdGhlIHN0b3JlZCB2YWx1ZSB0bworICogJ3dha2V1cF9jb3VudCcuICBJZiB0aGF0IGZhaWxzLCBhdCBsZWFzdCBvbmUgd2FrZXVwIGV2ZW50IGhhcyBvY2N1cmVkIHNpbmNlCisgKiAnd2FrZXVwX2NvdW50JyB3YXMgcmVhZCBhbmQgJ3N0YXRlJyBzaG91bGQgbm90IGJlIHdyaXR0ZW4gdG8uICBPdGhlcndpc2UsIGl0CisgKiBpcyBhbGxvd2VkIHRvIHdyaXRlIHRvICdzdGF0ZScsIGJ1dCB0aGUgdHJhbnNpdGlvbiB3aWxsIGJlIGFib3J0ZWQgaWYgdGhlcmUKKyAqIGFyZSBhbnkgd2FrZXVwIGV2ZW50cyBkZXRlY3RlZCBhZnRlciAnd2FrZXVwX2NvdW50JyB3YXMgd3JpdHRlbiB0by4KKyAqLworCitzdGF0aWMgc3NpemVfdCB3YWtldXBfY291bnRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQlzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY2hhciAqYnVmKQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJcmV0dXJuIHBtX2dldF93YWtldXBfY291bnQoJnZhbCkgPyBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwgdmFsKSA6IC1FSU5UUjsKK30KKworc3RhdGljIHNzaXplX3Qgd2FrZXVwX2NvdW50X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBuKQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJaWYgKHNzY2FuZihidWYsICIlbHUiLCAmdmFsKSA9PSAxKSB7CisJCWlmIChwbV9zYXZlX3dha2V1cF9jb3VudCh2YWwpKQorCQkJcmV0dXJuIG47CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitwb3dlcl9hdHRyKHdha2V1cF9jb3VudCk7CisjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCisKICNpZmRlZiBDT05GSUdfUE1fVFJBQ0UKIGludCBwbV90cmFjZV9lbmFibGVkOwogCkBAIC0yMzYsNiArMjkwLDcgQEAKICNlbmRpZgogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogCSZwbV9hc3luY19hdHRyLmF0dHIsCisJJndha2V1cF9jb3VudF9hdHRyLmF0dHIsCiAjaWZkZWYgQ09ORklHX1BNX0RFQlVHCiAJJnBtX3Rlc3RfYXR0ci5hdHRyLAogI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc25hcHNob3QuYyBiL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCmluZGV4IDI1Y2UwMTAuLmY2Y2Q2ZmEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCisrKyBiL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIFRoaXMgZmlsZSBwcm92aWRlcyBzeXN0ZW0gc25hcHNob3QvcmVzdG9yZSBmdW5jdGlvbmFsaXR5IGZvciBzd3N1c3AuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDUgUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PgorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDUgUGF2ZWwgTWFjaGVrIDxwYXZlbEB1Y3cuY3o+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPgogICoKICAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIuCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc3VzcGVuZC5jIGIva2VybmVsL3Bvd2VyL3N1c3BlbmQuYwppbmRleCBmMzdjYjdkLi43MzM1OTUyIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc3VzcGVuZC5jCisrKyBiL2tlcm5lbC9wb3dlci9zdXNwZW5kLmMKQEAgLTEzNiwxOSArMTM2LDE5IEBACiAJaWYgKHN1c3BlbmRfb3BzLT5wcmVwYXJlKSB7CiAJCWVycm9yID0gc3VzcGVuZF9vcHMtPnByZXBhcmUoKTsKIAkJaWYgKGVycm9yKQotCQkJcmV0dXJuIGVycm9yOworCQkJZ290byBQbGF0Zm9ybV9maW5pc2g7CiAJfQogCiAJZXJyb3IgPSBkcG1fc3VzcGVuZF9ub2lycShQTVNHX1NVU1BFTkQpOwogCWlmIChlcnJvcikgewogCQlwcmludGsoS0VSTl9FUlIgIlBNOiBTb21lIGRldmljZXMgZmFpbGVkIHRvIHBvd2VyIGRvd25cbiIpOwotCQlnb3RvIFBsYXRmcm9tX2ZpbmlzaDsKKwkJZ290byBQbGF0Zm9ybV9maW5pc2g7CiAJfQogCiAJaWYgKHN1c3BlbmRfb3BzLT5wcmVwYXJlX2xhdGUpIHsKIAkJZXJyb3IgPSBzdXNwZW5kX29wcy0+cHJlcGFyZV9sYXRlKCk7CiAJCWlmIChlcnJvcikKLQkJCWdvdG8gUG93ZXJfdXBfZGV2aWNlczsKKwkJCWdvdG8gUGxhdGZvcm1fd2FrZTsKIAl9CiAKIAlpZiAoc3VzcGVuZF90ZXN0KFRFU1RfUExBVEZPUk0pKQpAQCAtMTYzLDggKzE2MywxMCBAQAogCiAJZXJyb3IgPSBzeXNkZXZfc3VzcGVuZChQTVNHX1NVU1BFTkQpOwogCWlmICghZXJyb3IpIHsKLQkJaWYgKCFzdXNwZW5kX3Rlc3QoVEVTVF9DT1JFKSkKKwkJaWYgKCFzdXNwZW5kX3Rlc3QoVEVTVF9DT1JFKSAmJiBwbV9jaGVja193YWtldXBfZXZlbnRzKCkpIHsKIAkJCWVycm9yID0gc3VzcGVuZF9vcHMtPmVudGVyKHN0YXRlKTsKKwkJCWV2ZW50c19jaGVja19lbmFibGVkID0gZmFsc2U7CisJCX0KIAkJc3lzZGV2X3Jlc3VtZSgpOwogCX0KIApAQCAtMTc4LDEwICsxODAsOSBAQAogCWlmIChzdXNwZW5kX29wcy0+d2FrZSkKIAkJc3VzcGVuZF9vcHMtPndha2UoKTsKIAotIFBvd2VyX3VwX2RldmljZXM6CiAJZHBtX3Jlc3VtZV9ub2lycShQTVNHX1JFU1VNRSk7CiAKLSBQbGF0ZnJvbV9maW5pc2g6CisgUGxhdGZvcm1fZmluaXNoOgogCWlmIChzdXNwZW5kX29wcy0+ZmluaXNoKQogCQlzdXNwZW5kX29wcy0+ZmluaXNoKCk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zd2FwLmMgYi9rZXJuZWwvcG93ZXIvc3dhcC5jCmluZGV4IGIwYmIyMTcuLmU2YTViZGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zd2FwLmMKKysrIGIva2VybmVsL3Bvd2VyL3N3YXAuYwpAQCAtNCw3ICs0LDcgQEAKICAqIFRoaXMgZmlsZSBwcm92aWRlcyBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgdGhlIHN1c3BlbmQgaW1hZ2UgZnJvbQogICogYW5kIHdyaXRpbmcgaXQgdG8gYSBzd2FwIHBhcnRpdGlvbi4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTgsMjAwMS0yMDA1IFBhdmVsIE1hY2hlayA8cGF2ZWxAc3VzZS5jej4KKyAqIENvcHlyaWdodCAoQykgMTk5OCwyMDAxLTIwMDUgUGF2ZWwgTWFjaGVrIDxwYXZlbEB1Y3cuY3o+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPgogICoKICAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIuCkBAIC0zMiw3ICszMiw3IEBACiAvKgogICoJVGhlIHN3YXAgbWFwIGlzIGEgZGF0YSBzdHJ1Y3R1cmUgdXNlZCBmb3Iga2VlcGluZyB0cmFjayBvZiBlYWNoIHBhZ2UKICAqCXdyaXR0ZW4gdG8gYSBzd2FwIHBhcnRpdGlvbi4gIEl0IGNvbnNpc3RzIG9mIG1hbnkgc3dhcF9tYXBfcGFnZQotICoJc3RydWN0dXJlcyB0aGF0IGNvbnRhaW4gZWFjaCBhbiBhcnJheSBvZiBNQVBfUEFHRV9TSVpFIHN3YXAgZW50cmllcy4KKyAqCXN0cnVjdHVyZXMgdGhhdCBjb250YWluIGVhY2ggYW4gYXJyYXkgb2YgTUFQX1BBR0VfRU5UUklFUyBzd2FwIGVudHJpZXMuCiAgKglUaGVzZSBzdHJ1Y3R1cmVzIGFyZSBzdG9yZWQgb24gdGhlIHN3YXAgYW5kIGxpbmtlZCB0b2dldGhlciB3aXRoIHRoZQogICoJaGVscCBvZiB0aGUgLm5leHRfc3dhcCBtZW1iZXIuCiAgKgpAQCAtMTQ4LDcgKzE0OCw3IEBACiAKIC8qKgogICoJZnJlZV9hbGxfc3dhcF9wYWdlcyAtIGZyZWUgc3dhcCBwYWdlcyBhbGxvY2F0ZWQgZm9yIHNhdmluZyBpbWFnZSBkYXRhLgotICoJSXQgYWxzbyBmcmVlcyB0aGUgZXh0ZW50cyB1c2VkIHRvIHJlZ2lzdGVyIHdoaWNoIHN3YXAgZW50cmVzIGhhZCBiZWVuCisgKglJdCBhbHNvIGZyZWVzIHRoZSBleHRlbnRzIHVzZWQgdG8gcmVnaXN0ZXIgd2hpY2ggc3dhcCBlbnRyaWVzIGhhZCBiZWVuCiAgKglhbGxvY2F0ZWQuCiAgKi8KIApkaWZmIC0tZ2l0IGEva2VybmVsL3ByaW50ay5jIGIva2VybmVsL3ByaW50ay5jCmluZGV4IDQ0NGI3NzAuLjRhYjAxNjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wcmludGsuYworKysgYi9rZXJuZWwvcHJpbnRrLmMKQEAgLTM3LDYgKzM3LDggQEAKICNpbmNsdWRlIDxsaW51eC9yYXRlbGltaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rbXNnX2R1bXAuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNsb2cuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtOTg1LDYgKzk4NywzMiBAQAogfQogCiAvKioKKyAqIGNvbnNvbGVfY3B1X25vdGlmeSAtIHByaW50IGRlZmVycmVkIGNvbnNvbGUgbWVzc2FnZXMgYWZ0ZXIgQ1BVIGhvdHBsdWcKKyAqIEBzZWxmOiBub3RpZmllciBzdHJ1Y3QKKyAqIEBhY3Rpb246IENQVSBob3RwbHVnIGV2ZW50CisgKiBAaGNwdTogdW51c2VkCisgKgorICogSWYgcHJpbnRrKCkgaXMgY2FsbGVkIGZyb20gYSBDUFUgdGhhdCBpcyBub3Qgb25saW5lIHlldCwgdGhlIG1lc3NhZ2VzCisgKiB3aWxsIGJlIHNwb29sZWQgYnV0IHdpbGwgbm90IHNob3cgdXAgb24gdGhlIGNvbnNvbGUuICBUaGlzIGZ1bmN0aW9uIGlzCisgKiBjYWxsZWQgd2hlbiBhIG5ldyBDUFUgY29tZXMgb25saW5lIChvciBmYWlscyB0byBjb21lIHVwKSwgYW5kIGVuc3VyZXMKKyAqIHRoYXQgYW55IHN1Y2ggb3V0cHV0IGdldHMgcHJpbnRlZC4KKyAqLworc3RhdGljIGludCBfX2NwdWluaXQgY29uc29sZV9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwl1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKK3sKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgQ1BVX09OTElORToKKwljYXNlIENQVV9ERUFEOgorCWNhc2UgQ1BVX0RZSU5HOgorCWNhc2UgQ1BVX0RPV05fRkFJTEVEOgorCWNhc2UgQ1BVX1VQX0NBTkNFTEVEOgorCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwl9CisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworLyoqCiAgKiBhY3F1aXJlX2NvbnNvbGVfc2VtIC0gbG9jayB0aGUgY29uc29sZSBzeXN0ZW0gZm9yIGV4Y2x1c2l2ZSB1c2UuCiAgKgogICogQWNxdWlyZXMgYSBzZW1hcGhvcmUgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBjYWxsZXIgaGFzCkBAIC0xMzcxLDcgKzEzOTksNyBAQAogfQogRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX2NvbnNvbGUpOwogCi1zdGF0aWMgaW50IF9faW5pdCBkaXNhYmxlX2Jvb3RfY29uc29sZXModm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHByaW50a19sYXRlX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgY29uc29sZSAqY29uOwogCkBAIC0xMzgyLDkgKzE0MTAsMTAgQEAKIAkJCXVucmVnaXN0ZXJfY29uc29sZShjb24pOwogCQl9CiAJfQorCWhvdGNwdV9ub3RpZmllcihjb25zb2xlX2NwdV9ub3RpZnksIDApOwogCXJldHVybiAwOwogfQotbGF0ZV9pbml0Y2FsbChkaXNhYmxlX2Jvb3RfY29uc29sZXMpOworbGF0ZV9pbml0Y2FsbChwcmludGtfbGF0ZV9pbml0KTsKIAogI2lmIGRlZmluZWQgQ09ORklHX1BSSU5USwogCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1cGRhdGUuYyBiL2tlcm5lbC9yY3VwZGF0ZS5jCmluZGV4IDcyYThkYzkuLjRkMTY5ODMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3VwZGF0ZS5jCisrKyBiL2tlcm5lbC9yY3VwZGF0ZS5jCkBAIC0xMTQsMyArMTE0LDE2MyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocmN1X215X3RocmVhZF9ncm91cF9lbXB0eSk7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19QUk9WRV9SQ1UgKi8KKworI2lmZGVmIENPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFECitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfaW5pdF9yY3VfaGVhZChzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJZGVidWdfb2JqZWN0X2luaXQoaGVhZCwgJnJjdWhlYWRfZGVidWdfZGVzY3IpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfcmN1X2hlYWRfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJZGVidWdfb2JqZWN0X2ZyZWUoaGVhZCwgJnJjdWhlYWRfZGVidWdfZGVzY3IpOworfQorCisvKgorICogZml4dXBfaW5pdCBpcyBjYWxsZWQgd2hlbjoKKyAqIC0gYW4gYWN0aXZlIG9iamVjdCBpcyBpbml0aWFsaXplZAorICovCitzdGF0aWMgaW50IHJjdWhlYWRfZml4dXBfaW5pdCh2b2lkICphZGRyLCBlbnVtIGRlYnVnX29ial9zdGF0ZSBzdGF0ZSkKK3sKKwlzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQgPSBhZGRyOworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgT0RFQlVHX1NUQVRFX0FDVElWRToKKwkJLyoKKwkJICogRW5zdXJlIHRoYXQgcXVldWVkIGNhbGxiYWNrcyBhcmUgYWxsIGV4ZWN1dGVkLgorCQkgKiBJZiB3ZSBkZXRlY3QgdGhhdCB3ZSBhcmUgbmVzdGVkIGluIGEgUkNVIHJlYWQtc2lkZSBjcml0aWNhbAorCQkgKiBzZWN0aW9uLCB3ZSBzaG91bGQgc2ltcGx5IGZhaWwsIG90aGVyd2lzZSB3ZSB3b3VsZCBkZWFkbG9jay4KKwkJICovCisJCWlmIChyY3VfcHJlZW1wdF9kZXB0aCgpICE9IDAgfHwgcHJlZW1wdF9jb3VudCgpICE9IDAgfHwKKwkJICAgIGlycXNfZGlzYWJsZWQoKSkgeworCQkJV0FSTl9PTigxKTsKKwkJCXJldHVybiAwOworCQl9CisJCXJjdV9iYXJyaWVyKCk7CisJCXJjdV9iYXJyaWVyX3NjaGVkKCk7CisJCXJjdV9iYXJyaWVyX2JoKCk7CisJCWRlYnVnX29iamVjdF9pbml0KGhlYWQsICZyY3VoZWFkX2RlYnVnX2Rlc2NyKTsKKwkJcmV0dXJuIDE7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCisvKgorICogZml4dXBfYWN0aXZhdGUgaXMgY2FsbGVkIHdoZW46CisgKiAtIGFuIGFjdGl2ZSBvYmplY3QgaXMgYWN0aXZhdGVkCisgKiAtIGFuIHVua25vd24gb2JqZWN0IGlzIGFjdGl2YXRlZCAobWlnaHQgYmUgYSBzdGF0aWNhbGx5IGluaXRpYWxpemVkIG9iamVjdCkKKyAqIEFjdGl2YXRpb24gaXMgcGVyZm9ybWVkIGludGVybmFsbHkgYnkgY2FsbF9yY3UoKS4KKyAqLworc3RhdGljIGludCByY3VoZWFkX2ZpeHVwX2FjdGl2YXRlKHZvaWQgKmFkZHIsIGVudW0gZGVidWdfb2JqX3N0YXRlIHN0YXRlKQoreworCXN0cnVjdCByY3VfaGVhZCAqaGVhZCA9IGFkZHI7CisKKwlzd2l0Y2ggKHN0YXRlKSB7CisKKwljYXNlIE9ERUJVR19TVEFURV9OT1RBVkFJTEFCTEU6CisJCS8qCisJCSAqIFRoaXMgaXMgbm90IHJlYWxseSBhIGZpeHVwLiBXZSBqdXN0IG1ha2Ugc3VyZSB0aGF0IGl0IGlzCisJCSAqIHRyYWNrZWQgaW4gdGhlIG9iamVjdCB0cmFja2VyLgorCQkgKi8KKwkJZGVidWdfb2JqZWN0X2luaXQoaGVhZCwgJnJjdWhlYWRfZGVidWdfZGVzY3IpOworCQlkZWJ1Z19vYmplY3RfYWN0aXZhdGUoaGVhZCwgJnJjdWhlYWRfZGVidWdfZGVzY3IpOworCQlyZXR1cm4gMDsKKworCWNhc2UgT0RFQlVHX1NUQVRFX0FDVElWRToKKwkJLyoKKwkJICogRW5zdXJlIHRoYXQgcXVldWVkIGNhbGxiYWNrcyBhcmUgYWxsIGV4ZWN1dGVkLgorCQkgKiBJZiB3ZSBkZXRlY3QgdGhhdCB3ZSBhcmUgbmVzdGVkIGluIGEgUkNVIHJlYWQtc2lkZSBjcml0aWNhbAorCQkgKiBzZWN0aW9uLCB3ZSBzaG91bGQgc2ltcGx5IGZhaWwsIG90aGVyd2lzZSB3ZSB3b3VsZCBkZWFkbG9jay4KKwkJICovCisJCWlmIChyY3VfcHJlZW1wdF9kZXB0aCgpICE9IDAgfHwgcHJlZW1wdF9jb3VudCgpICE9IDAgfHwKKwkJICAgIGlycXNfZGlzYWJsZWQoKSkgeworCQkJV0FSTl9PTigxKTsKKwkJCXJldHVybiAwOworCQl9CisJCXJjdV9iYXJyaWVyKCk7CisJCXJjdV9iYXJyaWVyX3NjaGVkKCk7CisJCXJjdV9iYXJyaWVyX2JoKCk7CisJCWRlYnVnX29iamVjdF9hY3RpdmF0ZShoZWFkLCAmcmN1aGVhZF9kZWJ1Z19kZXNjcik7CisJCXJldHVybiAxOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworLyoKKyAqIGZpeHVwX2ZyZWUgaXMgY2FsbGVkIHdoZW46CisgKiAtIGFuIGFjdGl2ZSBvYmplY3QgaXMgZnJlZWQKKyAqLworc3RhdGljIGludCByY3VoZWFkX2ZpeHVwX2ZyZWUodm9pZCAqYWRkciwgZW51bSBkZWJ1Z19vYmpfc3RhdGUgc3RhdGUpCit7CisJc3RydWN0IHJjdV9oZWFkICpoZWFkID0gYWRkcjsKKworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIE9ERUJVR19TVEFURV9BQ1RJVkU6CisJCS8qCisJCSAqIEVuc3VyZSB0aGF0IHF1ZXVlZCBjYWxsYmFja3MgYXJlIGFsbCBleGVjdXRlZC4KKwkJICogSWYgd2UgZGV0ZWN0IHRoYXQgd2UgYXJlIG5lc3RlZCBpbiBhIFJDVSByZWFkLXNpZGUgY3JpdGljYWwKKwkJICogc2VjdGlvbiwgd2Ugc2hvdWxkIHNpbXBseSBmYWlsLCBvdGhlcndpc2Ugd2Ugd291bGQgZGVhZGxvY2suCisJCSAqLworI2lmbmRlZiBDT05GSUdfUFJFRU1QVAorCQlXQVJOX09OKDEpOworCQlyZXR1cm4gMDsKKyNlbHNlCisJCWlmIChyY3VfcHJlZW1wdF9kZXB0aCgpICE9IDAgfHwgcHJlZW1wdF9jb3VudCgpICE9IDAgfHwKKwkJICAgIGlycXNfZGlzYWJsZWQoKSkgeworCQkJV0FSTl9PTigxKTsKKwkJCXJldHVybiAwOworCQl9CisJCXJjdV9iYXJyaWVyKCk7CisJCXJjdV9iYXJyaWVyX3NjaGVkKCk7CisJCXJjdV9iYXJyaWVyX2JoKCk7CisJCWRlYnVnX29iamVjdF9mcmVlKGhlYWQsICZyY3VoZWFkX2RlYnVnX2Rlc2NyKTsKKwkJcmV0dXJuIDE7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKKy8qKgorICogaW5pdF9yY3VfaGVhZF9vbl9zdGFjaygpIC0gaW5pdGlhbGl6ZSBvbi1zdGFjayByY3VfaGVhZCBmb3IgZGVidWdvYmplY3RzCisgKiBAaGVhZDogcG9pbnRlciB0byByY3VfaGVhZCBzdHJ1Y3R1cmUgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluZm9ybXMgZGVidWdvYmplY3RzIG9mIGEgbmV3IHJjdV9oZWFkIHN0cnVjdHVyZSB0aGF0CisgKiBoYXMgYmVlbiBhbGxvY2F0ZWQgYXMgYW4gYXV0byB2YXJpYWJsZSBvbiB0aGUgc3RhY2suICBUaGlzIGZ1bmN0aW9uCisgKiBpcyBub3QgcmVxdWlyZWQgZm9yIHJjdV9oZWFkIHN0cnVjdHVyZXMgdGhhdCBhcmUgc3RhdGljYWxseSBkZWZpbmVkIG9yCisgKiB0aGF0IGFyZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgb24gdGhlIGhlYXAuICBUaGlzIGZ1bmN0aW9uIGhhcyBubworICogZWZmZWN0IGZvciAhQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQga2VybmVsIGJ1aWxkcy4KKyAqLwordm9pZCBpbml0X3JjdV9oZWFkX29uX3N0YWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlkZWJ1Z19vYmplY3RfaW5pdF9vbl9zdGFjayhoZWFkLCAmcmN1aGVhZF9kZWJ1Z19kZXNjcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpbml0X3JjdV9oZWFkX29uX3N0YWNrKTsKKworLyoqCisgKiBkZXN0cm95X3JjdV9oZWFkX29uX3N0YWNrKCkgLSBkZXN0cm95IG9uLXN0YWNrIHJjdV9oZWFkIGZvciBkZWJ1Z29iamVjdHMKKyAqIEBoZWFkOiBwb2ludGVyIHRvIHJjdV9oZWFkIHN0cnVjdHVyZSB0byBiZSBpbml0aWFsaXplZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5mb3JtcyBkZWJ1Z29iamVjdHMgdGhhdCBhbiBvbi1zdGFjayByY3VfaGVhZCBzdHJ1Y3R1cmUKKyAqIGlzIGFib3V0IHRvIGdvIG91dCBvZiBzY29wZS4gIEFzIHdpdGggaW5pdF9yY3VfaGVhZF9vbl9zdGFjaygpLCB0aGlzCisgKiBmdW5jdGlvbiBpcyBub3QgcmVxdWlyZWQgZm9yIHJjdV9oZWFkIHN0cnVjdHVyZXMgdGhhdCBhcmUgc3RhdGljYWxseQorICogZGVmaW5lZCBvciB0aGF0IGFyZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgb24gdGhlIGhlYXAuICBBbHNvIGFzIHdpdGgKKyAqIGluaXRfcmN1X2hlYWRfb25fc3RhY2soKSwgdGhpcyBmdW5jdGlvbiBoYXMgbm8gZWZmZWN0IGZvcgorICogIUNPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFEIGtlcm5lbCBidWlsZHMuCisgKi8KK3ZvaWQgZGVzdHJveV9yY3VfaGVhZF9vbl9zdGFjayhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJZGVidWdfb2JqZWN0X2ZyZWUoaGVhZCwgJnJjdWhlYWRfZGVidWdfZGVzY3IpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGVzdHJveV9yY3VfaGVhZF9vbl9zdGFjayk7CisKK3N0cnVjdCBkZWJ1Z19vYmpfZGVzY3IgcmN1aGVhZF9kZWJ1Z19kZXNjciA9IHsKKwkubmFtZSA9ICJyY3VfaGVhZCIsCisJLmZpeHVwX2luaXQgPSByY3VoZWFkX2ZpeHVwX2luaXQsCisJLmZpeHVwX2FjdGl2YXRlID0gcmN1aGVhZF9maXh1cF9hY3RpdmF0ZSwKKwkuZml4dXBfZnJlZSA9IHJjdWhlYWRfZml4dXBfZnJlZSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChyY3VoZWFkX2RlYnVnX2Rlc2NyKTsKKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0aW55LmMgYi9rZXJuZWwvcmN1dGlueS5jCmluZGV4IDM4NzI5ZDMuLjE5NmVjMDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0aW55LmMKKysrIGIva2VybmVsL3JjdXRpbnkuYwpAQCAtMTY5LDYgKzE2OSw3IEBACiAJd2hpbGUgKGxpc3QpIHsKIAkJbmV4dCA9IGxpc3QtPm5leHQ7CiAJCXByZWZldGNoKG5leHQpOworCQlkZWJ1Z19yY3VfaGVhZF91bnF1ZXVlKGxpc3QpOwogCQlsaXN0LT5mdW5jKGxpc3QpOwogCQlsaXN0ID0gbmV4dDsKIAl9CkBAIC0yMTEsNiArMjEyLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJZGVidWdfcmN1X2hlYWRfcXVldWUoaGVhZCk7CiAJaGVhZC0+ZnVuYyA9IGZ1bmM7CiAJaGVhZC0+bmV4dCA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0b3J0dXJlLmMgYi9rZXJuZWwvcmN1dG9ydHVyZS5jCmluZGV4IDY1MzVhYzguLjJlMjcyNmQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0b3J0dXJlLmMKKysrIGIva2VybmVsL3JjdXRvcnR1cmUuYwpAQCAtMjM5LDggKzIzOSw3IEBACiByY3VfcmFuZG9tKHN0cnVjdCByY3VfcmFuZG9tX3N0YXRlICpycnNwKQogewogCWlmICgtLXJyc3AtPnJyc19jb3VudCA8IDApIHsKLQkJcnJzcC0+cnJzX3N0YXRlICs9Ci0JCQkodW5zaWduZWQgbG9uZyljcHVfY2xvY2socmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CisJCXJyc3AtPnJyc19zdGF0ZSArPSAodW5zaWduZWQgbG9uZylsb2NhbF9jbG9jaygpOwogCQlycnNwLT5ycnNfY291bnQgPSBSQ1VfUkFORE9NX1JFRlJFU0g7CiAJfQogCXJyc3AtPnJyc19zdGF0ZSA9IHJyc3AtPnJyc19zdGF0ZSAqIFJDVV9SQU5ET01fTVVMVCArIFJDVV9SQU5ET01fQUREOwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWUuYyBiL2tlcm5lbC9yY3V0cmVlLmMKaW5kZXggZDQ0MzczNC4uZDViYzQzOSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRyZWUuYworKysgYi9rZXJuZWwvcmN1dHJlZS5jCkBAIC0xMTEyLDYgKzExMTIsNyBAQAogCXdoaWxlIChsaXN0KSB7CiAJCW5leHQgPSBsaXN0LT5uZXh0OwogCQlwcmVmZXRjaChuZXh0KTsKKwkJZGVidWdfcmN1X2hlYWRfdW5xdWV1ZShsaXN0KTsKIAkJbGlzdC0+ZnVuYyhsaXN0KTsKIAkJbGlzdCA9IG5leHQ7CiAJCWlmICgrK2NvdW50ID49IHJkcC0+YmxpbWl0KQpAQCAtMTM4OCw2ICsxMzg5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCByY3VfZGF0YSAqcmRwOwogCisJZGVidWdfcmN1X2hlYWRfcXVldWUoaGVhZCk7CiAJaGVhZC0+ZnVuYyA9IGZ1bmM7CiAJaGVhZC0+bmV4dCA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggZjUyYTg4MC4uNDE1NDFkNyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTc3LDYgKzc3LDcgQEAKICNpbmNsdWRlIDxhc20vaXJxX3JlZ3MuaD4KIAogI2luY2x1ZGUgInNjaGVkX2NwdXByaS5oIgorI2luY2x1ZGUgIndvcmtxdWV1ZV9zY2hlZC5oIgogCiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKICNpbmNsdWRlIDx0cmFjZS9ldmVudHMvc2NoZWQuaD4KQEAgLTQ1Niw5ICs0NTcsMTAgQEAKIAl1bnNpZ25lZCBsb25nIG5yX3J1bm5pbmc7CiAJI2RlZmluZSBDUFVfTE9BRF9JRFhfTUFYIDUKIAl1bnNpZ25lZCBsb25nIGNwdV9sb2FkW0NQVV9MT0FEX0lEWF9NQVhdOworCXVuc2lnbmVkIGxvbmcgbGFzdF9sb2FkX3VwZGF0ZV90aWNrOwogI2lmZGVmIENPTkZJR19OT19IWgogCXU2NCBub2h6X3N0YW1wOwotCXVuc2lnbmVkIGNoYXIgaW5fbm9oel9yZWNlbnRseTsKKwl1bnNpZ25lZCBjaGFyIG5vaHpfYmFsYW5jZV9raWNrOwogI2VuZGlmCiAJdW5zaWduZWQgaW50IHNraXBfY2xvY2tfdXBkYXRlOwogCkBAIC0xMTkzLDYgKzExOTUsMjcgQEAKIAogI2lmZGVmIENPTkZJR19OT19IWgogLyoKKyAqIEluIHRoZSBzZW1pIGlkbGUgY2FzZSwgdXNlIHRoZSBuZWFyZXN0IGJ1c3kgY3B1IGZvciBtaWdyYXRpbmcgdGltZXJzCisgKiBmcm9tIGFuIGlkbGUgY3B1LiAgVGhpcyBpcyBnb29kIGZvciBwb3dlci1zYXZpbmdzLgorICoKKyAqIFdlIGRvbid0IGRvIHNpbWlsYXIgb3B0aW1pemF0aW9uIGZvciBjb21wbGV0ZWx5IGlkbGUgc3lzdGVtLCBhcworICogc2VsZWN0aW5nIGFuIGlkbGUgY3B1IHdpbGwgYWRkIG1vcmUgZGVsYXlzIHRvIHRoZSB0aW1lcnMgdGhhbiBpbnRlbmRlZAorICogKGFzIHRoYXQgY3B1J3MgdGltZXIgYmFzZSBtYXkgbm90IGJlIHVwdG9kYXRlIHdydCBqaWZmaWVzIGV0YykuCisgKi8KK2ludCBnZXRfbm9oel90aW1lcl90YXJnZXQodm9pZCkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWludCBpOworCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOworCisJZm9yX2VhY2hfZG9tYWluKGNwdSwgc2QpIHsKKwkJZm9yX2VhY2hfY3B1KGksIHNjaGVkX2RvbWFpbl9zcGFuKHNkKSkKKwkJCWlmICghaWRsZV9jcHUoaSkpCisJCQkJcmV0dXJuIGk7CisJfQorCXJldHVybiBjcHU7Cit9CisvKgogICogV2hlbiBhZGRfdGltZXJfb24oKSBlbnF1ZXVlcyBhIHRpbWVyIGludG8gdGhlIHRpbWVyIHdoZWVsIG9mIGFuCiAgKiBpZGxlIENQVSB0aGVuIHRoaXMgdGltZXIgbWlnaHQgZXhwaXJlIGJlZm9yZSB0aGUgbmV4dCB0aW1lciBldmVudAogICogd2hpY2ggaXMgc2NoZWR1bGVkIHRvIHdha2UgdXAgdGhhdCBDUFUuIEluIGNhc2Ugb2YgYSBjb21wbGV0ZWx5CkBAIC0xMjMyLDE2ICsxMjU1LDYgQEAKIAkJc21wX3NlbmRfcmVzY2hlZHVsZShjcHUpOwogfQogCi1pbnQgbm9oel9yYXRlbGltaXQoaW50IGNwdSkKLXsKLQlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7Ci0JdTY0IGRpZmYgPSBycS0+Y2xvY2sgLSBycS0+bm9oel9zdGFtcDsKLQotCXJxLT5ub2h6X3N0YW1wID0gcnEtPmNsb2NrOwotCi0JcmV0dXJuIGRpZmYgPCAoTlNFQ19QRVJfU0VDIC8gSFopID4+IDE7Ci19Ci0KICNlbmRpZiAvKiBDT05GSUdfTk9fSFogKi8KIAogc3RhdGljIHU2NCBzY2hlZF9hdmdfcGVyaW9kKHZvaWQpCkBAIC0xNjUyLDcgKzE2NjUsNyBAQAogCWlmIChyb290X3Rhc2tfZ3JvdXBfZW1wdHkoKSkKIAkJcmV0dXJuOwogCi0Jbm93ID0gY3B1X2Nsb2NrKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOworCW5vdyA9IGxvY2FsX2Nsb2NrKCk7CiAJZWxhcHNlZCA9IG5vdyAtIHNkLT5sYXN0X3VwZGF0ZTsKIAogCWlmIChlbGFwc2VkID49IChzNjQpKHU2NClzeXNjdGxfc2NoZWRfc2hhcmVzX3JhdGVsaW1pdCkgewpAQCAtMTgwNSw2ICsxODE4LDcgQEAKIHN0YXRpYyB2b2lkIGNhbGNfbG9hZF9hY2NvdW50X2lkbGUoc3RydWN0IHJxICp0aGlzX3JxKTsKIHN0YXRpYyB2b2lkIHVwZGF0ZV9zeXNjdGwodm9pZCk7CiBzdGF0aWMgaW50IGdldF91cGRhdGVfc3lzY3RsX2ZhY3Rvcih2b2lkKTsKK3N0YXRpYyB2b2lkIHVwZGF0ZV9jcHVfbG9hZChzdHJ1Y3QgcnEgKnRoaXNfcnEpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfdGFza19jcHUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgY3B1KQogewpAQCAtMjI2NywxMSArMjI4MSw1NSBAQAogfQogI2VuZGlmCiAKLS8qKioKK3N0YXRpYyBpbmxpbmUgdm9pZCB0dHd1X2FjdGl2YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHJxICpycSwKKwkJCQkgYm9vbCBpc19zeW5jLCBib29sIGlzX21pZ3JhdGUsIGJvb2wgaXNfbG9jYWwsCisJCQkJIHVuc2lnbmVkIGxvbmcgZW5fZmxhZ3MpCit7CisJc2NoZWRzdGF0X2luYyhwLCBzZS5zdGF0aXN0aWNzLm5yX3dha2V1cHMpOworCWlmIChpc19zeW5jKQorCQlzY2hlZHN0YXRfaW5jKHAsIHNlLnN0YXRpc3RpY3MubnJfd2FrZXVwc19zeW5jKTsKKwlpZiAoaXNfbWlncmF0ZSkKKwkJc2NoZWRzdGF0X2luYyhwLCBzZS5zdGF0aXN0aWNzLm5yX3dha2V1cHNfbWlncmF0ZSk7CisJaWYgKGlzX2xvY2FsKQorCQlzY2hlZHN0YXRfaW5jKHAsIHNlLnN0YXRpc3RpY3MubnJfd2FrZXVwc19sb2NhbCk7CisJZWxzZQorCQlzY2hlZHN0YXRfaW5jKHAsIHNlLnN0YXRpc3RpY3MubnJfd2FrZXVwc19yZW1vdGUpOworCisJYWN0aXZhdGVfdGFzayhycSwgcCwgZW5fZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdHR3dV9wb3N0X2FjdGl2YXRpb24oc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcnEgKnJxLAorCQkJCQlpbnQgd2FrZV9mbGFncywgYm9vbCBzdWNjZXNzKQoreworCXRyYWNlX3NjaGVkX3dha2V1cChwLCBzdWNjZXNzKTsKKwljaGVja19wcmVlbXB0X2N1cnIocnEsIHAsIHdha2VfZmxhZ3MpOworCisJcC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CisjaWZkZWYgQ09ORklHX1NNUAorCWlmIChwLT5zY2hlZF9jbGFzcy0+dGFza193b2tlbikKKwkJcC0+c2NoZWRfY2xhc3MtPnRhc2tfd29rZW4ocnEsIHApOworCisJaWYgKHVubGlrZWx5KHJxLT5pZGxlX3N0YW1wKSkgeworCQl1NjQgZGVsdGEgPSBycS0+Y2xvY2sgLSBycS0+aWRsZV9zdGFtcDsKKwkJdTY0IG1heCA9IDIqc3lzY3RsX3NjaGVkX21pZ3JhdGlvbl9jb3N0OworCisJCWlmIChkZWx0YSA+IG1heCkKKwkJCXJxLT5hdmdfaWRsZSA9IG1heDsKKwkJZWxzZQorCQkJdXBkYXRlX2F2ZygmcnEtPmF2Z19pZGxlLCBkZWx0YSk7CisJCXJxLT5pZGxlX3N0YW1wID0gMDsKKwl9CisjZW5kaWYKKwkvKiBpZiBhIHdvcmtlciBpcyB3YWtpbmcgdXAsIG5vdGlmeSB3b3JrcXVldWUgKi8KKwlpZiAoKHAtPmZsYWdzICYgUEZfV1FfV09SS0VSKSAmJiBzdWNjZXNzKQorCQl3cV93b3JrZXJfd2FraW5nX3VwKHAsIGNwdV9vZihycSkpOworfQorCisvKioKICAqIHRyeV90b193YWtlX3VwIC0gd2FrZSB1cCBhIHRocmVhZAotICogQHA6IHRoZSB0by1iZS13b2tlbi11cCB0aHJlYWQKKyAqIEBwOiB0aGUgdGhyZWFkIHRvIGJlIGF3YWtlbmVkCiAgKiBAc3RhdGU6IHRoZSBtYXNrIG9mIHRhc2sgc3RhdGVzIHRoYXQgY2FuIGJlIHdva2VuCi0gKiBAc3luYzogZG8gYSBzeW5jaHJvbm91cyB3YWtldXA/CisgKiBAd2FrZV9mbGFnczogd2FrZSBtb2RpZmllciBmbGFncyAoV0ZfKikKICAqCiAgKiBQdXQgaXQgb24gdGhlIHJ1bi1xdWV1ZSBpZiBpdCdzIG5vdCBhbHJlYWR5IHRoZXJlLiBUaGUgImN1cnJlbnQiCiAgKiB0aHJlYWQgaXMgYWx3YXlzIG9uIHRoZSBydW4tcXVldWUgKGV4Y2VwdCB3aGVuIHRoZSBhY3R1YWwKQEAgLTIyNzksNyArMjMzNyw4IEBACiAgKiB0aGUgc2ltcGxlciAiY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkciIHRvIG1hcmsgeW91cnNlbGYKICAqIHJ1bm5hYmxlIHdpdGhvdXQgdGhlIG92ZXJoZWFkIG9mIHRoaXMuCiAgKgotICogcmV0dXJucyBmYWlsdXJlIG9ubHkgaWYgdGhlIHRhc2sgaXMgYWxyZWFkeSBhY3RpdmUuCisgKiBSZXR1cm5zICV0cnVlIGlmIEBwIHdhcyB3b2tlbiB1cCwgJWZhbHNlIGlmIGl0IHdhcyBhbHJlYWR5IHJ1bm5pbmcKKyAqIG9yIEBzdGF0ZSBkaWRuJ3QgbWF0Y2ggQHAncyBzdGF0ZS4KICAqLwogc3RhdGljIGludCB0cnlfdG9fd2FrZV91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludCBzdGF0ZSwKIAkJCSAgaW50IHdha2VfZmxhZ3MpCkBAIC0yMzU5LDM4ICsyNDE4LDExIEBACiAKIG91dF9hY3RpdmF0ZToKICNlbmRpZiAvKiBDT05GSUdfU01QICovCi0Jc2NoZWRzdGF0X2luYyhwLCBzZS5zdGF0aXN0aWNzLm5yX3dha2V1cHMpOwotCWlmICh3YWtlX2ZsYWdzICYgV0ZfU1lOQykKLQkJc2NoZWRzdGF0X2luYyhwLCBzZS5zdGF0aXN0aWNzLm5yX3dha2V1cHNfc3luYyk7Ci0JaWYgKG9yaWdfY3B1ICE9IGNwdSkKLQkJc2NoZWRzdGF0X2luYyhwLCBzZS5zdGF0aXN0aWNzLm5yX3dha2V1cHNfbWlncmF0ZSk7Ci0JaWYgKGNwdSA9PSB0aGlzX2NwdSkKLQkJc2NoZWRzdGF0X2luYyhwLCBzZS5zdGF0aXN0aWNzLm5yX3dha2V1cHNfbG9jYWwpOwotCWVsc2UKLQkJc2NoZWRzdGF0X2luYyhwLCBzZS5zdGF0aXN0aWNzLm5yX3dha2V1cHNfcmVtb3RlKTsKLQlhY3RpdmF0ZV90YXNrKHJxLCBwLCBlbl9mbGFncyk7CisJdHR3dV9hY3RpdmF0ZShwLCBycSwgd2FrZV9mbGFncyAmIFdGX1NZTkMsIG9yaWdfY3B1ICE9IGNwdSwKKwkJICAgICAgY3B1ID09IHRoaXNfY3B1LCBlbl9mbGFncyk7CiAJc3VjY2VzcyA9IDE7Ci0KIG91dF9ydW5uaW5nOgotCXRyYWNlX3NjaGVkX3dha2V1cChwLCBzdWNjZXNzKTsKLQljaGVja19wcmVlbXB0X2N1cnIocnEsIHAsIHdha2VfZmxhZ3MpOwotCi0JcC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7Ci0jaWZkZWYgQ09ORklHX1NNUAotCWlmIChwLT5zY2hlZF9jbGFzcy0+dGFza193b2tlbikKLQkJcC0+c2NoZWRfY2xhc3MtPnRhc2tfd29rZW4ocnEsIHApOwotCi0JaWYgKHVubGlrZWx5KHJxLT5pZGxlX3N0YW1wKSkgewotCQl1NjQgZGVsdGEgPSBycS0+Y2xvY2sgLSBycS0+aWRsZV9zdGFtcDsKLQkJdTY0IG1heCA9IDIqc3lzY3RsX3NjaGVkX21pZ3JhdGlvbl9jb3N0OwotCi0JCWlmIChkZWx0YSA+IG1heCkKLQkJCXJxLT5hdmdfaWRsZSA9IG1heDsKLQkJZWxzZQotCQkJdXBkYXRlX2F2ZygmcnEtPmF2Z19pZGxlLCBkZWx0YSk7Ci0JCXJxLT5pZGxlX3N0YW1wID0gMDsKLQl9Ci0jZW5kaWYKKwl0dHd1X3Bvc3RfYWN0aXZhdGlvbihwLCBycSwgd2FrZV9mbGFncywgc3VjY2Vzcyk7CiBvdXQ6CiAJdGFza19ycV91bmxvY2socnEsICZmbGFncyk7CiAJcHV0X2NwdSgpOwpAQCAtMjM5OSw2ICsyNDMxLDM3IEBACiB9CiAKIC8qKgorICogdHJ5X3RvX3dha2VfdXBfbG9jYWwgLSB0cnkgdG8gd2FrZSB1cCBhIGxvY2FsIHRhc2sgd2l0aCBycSBsb2NrIGhlbGQKKyAqIEBwOiB0aGUgdGhyZWFkIHRvIGJlIGF3YWtlbmVkCisgKgorICogUHV0IEBwIG9uIHRoZSBydW4tcXVldWUgaWYgaXQncyBub3QgYWxyZWR5IHRoZXJlLiAgVGhlIGNhbGxlciBtdXN0CisgKiBlbnN1cmUgdGhhdCB0aGlzX3JxKCkgaXMgbG9ja2VkLCBAcCBpcyBib3VuZCB0byB0aGlzX3JxKCkgYW5kIG5vdAorICogdGhlIGN1cnJlbnQgdGFzay4gIHRoaXNfcnEoKSBzdGF5cyBsb2NrZWQgb3ZlciBpbnZvY2F0aW9uLgorICovCitzdGF0aWMgdm9pZCB0cnlfdG9fd2FrZV91cF9sb2NhbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJc3RydWN0IHJxICpycSA9IHRhc2tfcnEocCk7CisJYm9vbCBzdWNjZXNzID0gZmFsc2U7CisKKwlCVUdfT04ocnEgIT0gdGhpc19ycSgpKTsKKwlCVUdfT04ocCA9PSBjdXJyZW50KTsKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZycS0+bG9jayk7CisKKwlpZiAoIShwLT5zdGF0ZSAmIFRBU0tfTk9STUFMKSkKKwkJcmV0dXJuOworCisJaWYgKCFwLT5zZS5vbl9ycSkgeworCQlpZiAobGlrZWx5KCF0YXNrX3J1bm5pbmcocnEsIHApKSkgeworCQkJc2NoZWRzdGF0X2luYyhycSwgdHR3dV9jb3VudCk7CisJCQlzY2hlZHN0YXRfaW5jKHJxLCB0dHd1X2xvY2FsKTsKKwkJfQorCQl0dHd1X2FjdGl2YXRlKHAsIHJxLCBmYWxzZSwgZmFsc2UsIHRydWUsIEVOUVVFVUVfV0FLRVVQKTsKKwkJc3VjY2VzcyA9IHRydWU7CisJfQorCXR0d3VfcG9zdF9hY3RpdmF0aW9uKHAsIHJxLCAwLCBzdWNjZXNzKTsKK30KKworLyoqCiAgKiB3YWtlX3VwX3Byb2Nlc3MgLSBXYWtlIHVwIGEgc3BlY2lmaWMgcHJvY2VzcwogICogQHA6IFRoZSBwcm9jZXNzIHRvIGJlIHdva2VuIHVwLgogICoKQEAgLTMwMTIsMjMgKzMwNzUsMTAyIEBACiB9CiAKIC8qCisgKiBUaGUgZXhhY3QgY3B1bG9hZCBhdCB2YXJpb3VzIGlkeCB2YWx1ZXMsIGNhbGN1bGF0ZWQgYXQgZXZlcnkgdGljayB3b3VsZCBiZQorICogbG9hZCA9ICgyXmlkeCAtIDEpIC8gMl5pZHggKiBsb2FkICsgMSAvIDJeaWR4ICogY3VyX2xvYWQKKyAqCisgKiBJZiBhIGNwdSBtaXNzZXMgdXBkYXRlcyBmb3Igbi0xIHRpY2tzIChhcyBpdCB3YXMgaWRsZSkgYW5kIHVwZGF0ZSBnZXRzIGNhbGxlZAorICogb24gbnRoIHRpY2sgd2hlbiBjcHUgbWF5IGJlIGJ1c3ksIHRoZW4gd2UgaGF2ZToKKyAqIGxvYWQgPSAoKDJeaWR4IC0gMSkgLyAyXmlkeCleKG4tMSkgKiBsb2FkCisgKiBsb2FkID0gKDJeaWR4IC0gMSkgLyAyXmlkeCkgKiBsb2FkICsgMSAvIDJeaWR4ICogY3VyX2xvYWQKKyAqCisgKiBkZWNheV9sb2FkX21pc3NlZCgpIGJlbG93IGRvZXMgZWZmaWNpZW50IGNhbGN1bGF0aW9uIG9mCisgKiBsb2FkID0gKCgyXmlkeCAtIDEpIC8gMl5pZHgpXihuLTEpICogbG9hZAorICogYXZvaWRpbmcgMC4ubi0xIGxvb3AgZG9pbmcgbG9hZCA9ICgoMl5pZHggLSAxKSAvIDJeaWR4KSAqIGxvYWQKKyAqCisgKiBUaGUgY2FsY3VsYXRpb24gaXMgYXBwcm94aW1hdGVkIG9uIGEgMTI4IHBvaW50IHNjYWxlLgorICogZGVncmFkZV96ZXJvX3RpY2tzIGlzIHRoZSBudW1iZXIgb2YgdGlja3MgYWZ0ZXIgd2hpY2ggbG9hZCBhdCBhbnkKKyAqIHBhcnRpY3VsYXIgaWR4IGlzIGFwcHJveGltYXRlZCB0byBiZSB6ZXJvLgorICogZGVncmFkZV9mYWN0b3IgaXMgYSBwcmVjb21wdXRlZCB0YWJsZSwgYSByb3cgZm9yIGVhY2ggbG9hZCBpZHguCisgKiBFYWNoIGNvbHVtbiBjb3JyZXNwb25kcyB0byBkZWdyYWRhdGlvbiBmYWN0b3IgZm9yIGEgcG93ZXIgb2YgdHdvIHRpY2tzLAorICogYmFzZWQgb24gMTI4IHBvaW50IHNjYWxlLgorICogRXhhbXBsZToKKyAqIHJvdyAyLCBjb2wgMyAoPTEyKSBzYXlzIHRoYXQgdGhlIGRlZ3JhZGF0aW9uIGF0IGxvYWQgaWR4IDIgYWZ0ZXIKKyAqIDggdGlja3MgaXMgMTIvMTI4ICh3aGljaCBpcyBhbiBhcHByb3hpbWF0aW9uIG9mIGV4YWN0IGZhY3RvciAzXjgvNF44KS4KKyAqCisgKiBXaXRoIHRoaXMgcG93ZXIgb2YgMiBsb2FkIGZhY3RvcnMsIHdlIGNhbiBkZWdyYWRlIHRoZSBsb2FkIG4gdGltZXMKKyAqIGJ5IGxvb2tpbmcgYXQgMSBiaXRzIGluIG4gYW5kIGRvaW5nIGFzIG1hbnkgbXVsdC9zaGlmdCBpbnN0ZWFkIG9mCisgKiBuIG11bHQvc2hpZnRzIG5lZWRlZCBieSB0aGUgZXhhY3QgZGVncmFkYXRpb24uCisgKi8KKyNkZWZpbmUgREVHUkFERV9TSElGVAkJNworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIKKwkJZGVncmFkZV96ZXJvX3RpY2tzW0NQVV9MT0FEX0lEWF9NQVhdID0gezAsIDgsIDMyLCA2NCwgMTI4fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyCisJCWRlZ3JhZGVfZmFjdG9yW0NQVV9MT0FEX0lEWF9NQVhdW0RFR1JBREVfU0hJRlQgKyAxXSA9IHsKKwkJCQkJezAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9LAorCQkJCQl7NjQsIDMyLCA4LCAwLCAwLCAwLCAwLCAwfSwKKwkJCQkJezk2LCA3MiwgNDAsIDEyLCAxLCAwLCAwfSwKKwkJCQkJezExMiwgOTgsIDc1LCA0MywgMTUsIDEsIDB9LAorCQkJCQl7MTIwLCAxMTIsIDk4LCA3NiwgNDUsIDE2LCAyfSB9OworCisvKgorICogVXBkYXRlIGNwdV9sb2FkIGZvciBhbnkgbWlzc2VkIHRpY2tzLCBkdWUgdG8gdGlja2xlc3MgaWRsZS4gVGhlIGJhY2tsb2cKKyAqIHdvdWxkIGJlIHdoZW4gQ1BVIGlzIGlkbGUgYW5kIHNvIHdlIGp1c3QgZGVjYXkgdGhlIG9sZCBsb2FkIHdpdGhvdXQKKyAqIGFkZGluZyBhbnkgbmV3IGxvYWQuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nCitkZWNheV9sb2FkX21pc3NlZCh1bnNpZ25lZCBsb25nIGxvYWQsIHVuc2lnbmVkIGxvbmcgbWlzc2VkX3VwZGF0ZXMsIGludCBpZHgpCit7CisJaW50IGogPSAwOworCisJaWYgKCFtaXNzZWRfdXBkYXRlcykKKwkJcmV0dXJuIGxvYWQ7CisKKwlpZiAobWlzc2VkX3VwZGF0ZXMgPj0gZGVncmFkZV96ZXJvX3RpY2tzW2lkeF0pCisJCXJldHVybiAwOworCisJaWYgKGlkeCA9PSAxKQorCQlyZXR1cm4gbG9hZCA+PiBtaXNzZWRfdXBkYXRlczsKKworCXdoaWxlIChtaXNzZWRfdXBkYXRlcykgeworCQlpZiAobWlzc2VkX3VwZGF0ZXMgJSAyKQorCQkJbG9hZCA9IChsb2FkICogZGVncmFkZV9mYWN0b3JbaWR4XVtqXSkgPj4gREVHUkFERV9TSElGVDsKKworCQltaXNzZWRfdXBkYXRlcyA+Pj0gMTsKKwkJaisrOworCX0KKwlyZXR1cm4gbG9hZDsKK30KKworLyoKICAqIFVwZGF0ZSBycS0+Y3B1X2xvYWRbXSBzdGF0aXN0aWNzLiBUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkIGV2ZXJ5Ci0gKiBzY2hlZHVsZXIgdGljayAoVElDS19OU0VDKS4KKyAqIHNjaGVkdWxlciB0aWNrIChUSUNLX05TRUMpLiBXaXRoIHRpY2tsZXNzIGlkbGUgdGhpcyB3aWxsIG5vdCBiZSBjYWxsZWQKKyAqIGV2ZXJ5IHRpY2suIFdlIGZpeCBpdCB1cCBiYXNlZCBvbiBqaWZmaWVzLgogICovCiBzdGF0aWMgdm9pZCB1cGRhdGVfY3B1X2xvYWQoc3RydWN0IHJxICp0aGlzX3JxKQogewogCXVuc2lnbmVkIGxvbmcgdGhpc19sb2FkID0gdGhpc19ycS0+bG9hZC53ZWlnaHQ7CisJdW5zaWduZWQgbG9uZyBjdXJyX2ppZmZpZXMgPSBqaWZmaWVzOworCXVuc2lnbmVkIGxvbmcgcGVuZGluZ191cGRhdGVzOwogCWludCBpLCBzY2FsZTsKIAogCXRoaXNfcnEtPm5yX2xvYWRfdXBkYXRlcysrOwogCisJLyogQXZvaWQgcmVwZWF0ZWQgY2FsbHMgb24gc2FtZSBqaWZmeSwgd2hlbiBtb3ZpbmcgaW4gYW5kIG91dCBvZiBpZGxlICovCisJaWYgKGN1cnJfamlmZmllcyA9PSB0aGlzX3JxLT5sYXN0X2xvYWRfdXBkYXRlX3RpY2spCisJCXJldHVybjsKKworCXBlbmRpbmdfdXBkYXRlcyA9IGN1cnJfamlmZmllcyAtIHRoaXNfcnEtPmxhc3RfbG9hZF91cGRhdGVfdGljazsKKwl0aGlzX3JxLT5sYXN0X2xvYWRfdXBkYXRlX3RpY2sgPSBjdXJyX2ppZmZpZXM7CisKIAkvKiBVcGRhdGUgb3VyIGxvYWQ6ICovCi0JZm9yIChpID0gMCwgc2NhbGUgPSAxOyBpIDwgQ1BVX0xPQURfSURYX01BWDsgaSsrLCBzY2FsZSArPSBzY2FsZSkgeworCXRoaXNfcnEtPmNwdV9sb2FkWzBdID0gdGhpc19sb2FkOyAvKiBGYXN0dHJhY2sgZm9yIGlkeCAwICovCisJZm9yIChpID0gMSwgc2NhbGUgPSAyOyBpIDwgQ1BVX0xPQURfSURYX01BWDsgaSsrLCBzY2FsZSArPSBzY2FsZSkgewogCQl1bnNpZ25lZCBsb25nIG9sZF9sb2FkLCBuZXdfbG9hZDsKIAogCQkvKiBzY2FsZSBpcyBlZmZlY3RpdmVseSAxIDw8IGkgbm93LCBhbmQgPj4gaSBkaXZpZGVzIGJ5IHNjYWxlICovCiAKIAkJb2xkX2xvYWQgPSB0aGlzX3JxLT5jcHVfbG9hZFtpXTsKKwkJb2xkX2xvYWQgPSBkZWNheV9sb2FkX21pc3NlZChvbGRfbG9hZCwgcGVuZGluZ191cGRhdGVzIC0gMSwgaSk7CiAJCW5ld19sb2FkID0gdGhpc19sb2FkOwogCQkvKgogCQkgKiBSb3VuZCB1cCB0aGUgYXZlcmFnaW5nIGRpdmlzaW9uIGlmIGxvYWQgaXMgaW5jcmVhc2luZy4gVGhpcwpAQCAtMzAzNiw5ICszMTc4LDE1IEBACiAJCSAqIGV4YW1wbGUuCiAJCSAqLwogCQlpZiAobmV3X2xvYWQgPiBvbGRfbG9hZCkKLQkJCW5ld19sb2FkICs9IHNjYWxlLTE7Ci0JCXRoaXNfcnEtPmNwdV9sb2FkW2ldID0gKG9sZF9sb2FkKihzY2FsZS0xKSArIG5ld19sb2FkKSA+PiBpOworCQkJbmV3X2xvYWQgKz0gc2NhbGUgLSAxOworCisJCXRoaXNfcnEtPmNwdV9sb2FkW2ldID0gKG9sZF9sb2FkICogKHNjYWxlIC0gMSkgKyBuZXdfbG9hZCkgPj4gaTsKIAl9Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9jcHVfbG9hZF9hY3RpdmUoc3RydWN0IHJxICp0aGlzX3JxKQoreworCXVwZGF0ZV9jcHVfbG9hZCh0aGlzX3JxKTsKIAogCWNhbGNfbG9hZF9hY2NvdW50X2FjdGl2ZSh0aGlzX3JxKTsKIH0KQEAgLTM0MjYsNyArMzU3NCw3IEBACiAKIAlyYXdfc3Bpbl9sb2NrKCZycS0+bG9jayk7CiAJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKLQl1cGRhdGVfY3B1X2xvYWQocnEpOworCXVwZGF0ZV9jcHVfbG9hZF9hY3RpdmUocnEpOwogCWN1cnItPnNjaGVkX2NsYXNzLT50YXNrX3RpY2socnEsIGN1cnIsIDApOwogCXJhd19zcGluX3VubG9jaygmcnEtPmxvY2spOwogCkBAIC0zNTk4LDcgKzM3NDYsNiBAQAogCXJxID0gY3B1X3JxKGNwdSk7CiAJcmN1X25vdGVfY29udGV4dF9zd2l0Y2goY3B1KTsKIAlwcmV2ID0gcnEtPmN1cnI7Ci0Jc3dpdGNoX2NvdW50ID0gJnByZXYtPm5pdmNzdzsKIAogCXJlbGVhc2Vfa2VybmVsX2xvY2socHJldik7CiBuZWVkX3Jlc2NoZWRfbm9ucHJlZW1wdGlibGU6CkBAIC0zNjExLDExICszNzU4LDI2IEBACiAJcmF3X3NwaW5fbG9ja19pcnEoJnJxLT5sb2NrKTsKIAljbGVhcl90c2tfbmVlZF9yZXNjaGVkKHByZXYpOwogCisJc3dpdGNoX2NvdW50ID0gJnByZXYtPm5pdmNzdzsKIAlpZiAocHJldi0+c3RhdGUgJiYgIShwcmVlbXB0X2NvdW50KCkgJiBQUkVFTVBUX0FDVElWRSkpIHsKLQkJaWYgKHVubGlrZWx5KHNpZ25hbF9wZW5kaW5nX3N0YXRlKHByZXYtPnN0YXRlLCBwcmV2KSkpCisJCWlmICh1bmxpa2VseShzaWduYWxfcGVuZGluZ19zdGF0ZShwcmV2LT5zdGF0ZSwgcHJldikpKSB7CiAJCQlwcmV2LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKLQkJZWxzZQorCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIElmIGEgd29ya2VyIGlzIGdvaW5nIHRvIHNsZWVwLCBub3RpZnkgYW5kCisJCQkgKiBhc2sgd29ya3F1ZXVlIHdoZXRoZXIgaXQgd2FudHMgdG8gd2FrZSB1cCBhCisJCQkgKiB0YXNrIHRvIG1haW50YWluIGNvbmN1cnJlbmN5LiAgSWYgc28sIHdha2UKKwkJCSAqIHVwIHRoZSB0YXNrLgorCQkJICovCisJCQlpZiAocHJldi0+ZmxhZ3MgJiBQRl9XUV9XT1JLRVIpIHsKKwkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRvX3dha2V1cDsKKworCQkJCXRvX3dha2V1cCA9IHdxX3dvcmtlcl9zbGVlcGluZyhwcmV2LCBjcHUpOworCQkJCWlmICh0b193YWtldXApCisJCQkJCXRyeV90b193YWtlX3VwX2xvY2FsKHRvX3dha2V1cCk7CisJCQl9CiAJCQlkZWFjdGl2YXRlX3Rhc2socnEsIHByZXYsIERFUVVFVUVfU0xFRVApOworCQl9CiAJCXN3aXRjaF9jb3VudCA9ICZwcmV2LT5udmNzdzsKIAl9CiAKQEAgLTM2MzcsOCArMzc5OSwxMCBAQAogCiAJCWNvbnRleHRfc3dpdGNoKHJxLCBwcmV2LCBuZXh0KTsgLyogdW5sb2NrcyB0aGUgcnEgKi8KIAkJLyoKLQkJICogdGhlIGNvbnRleHQgc3dpdGNoIG1pZ2h0IGhhdmUgZmxpcHBlZCB0aGUgc3RhY2sgZnJvbSB1bmRlcgotCQkgKiB1cywgaGVuY2UgcmVmcmVzaCB0aGUgbG9jYWwgdmFyaWFibGVzLgorCQkgKiBUaGUgY29udGV4dCBzd2l0Y2ggaGF2ZSBmbGlwcGVkIHRoZSBzdGFjayBmcm9tIHVuZGVyIHVzCisJCSAqIGFuZCByZXN0b3JlZCB0aGUgbG9jYWwgdmFyaWFibGVzIHdoaWNoIHdlcmUgc2F2ZWQgd2hlbgorCQkgKiB0aGlzIHRhc2sgY2FsbGVkIHNjaGVkdWxlKCkgaW4gdGhlIHBhc3QuIHByZXYgPT0gY3VycmVudAorCQkgKiBpcyBzdGlsbCBjb3JyZWN0LCBidXQgaXQgY2FuIGJlIG1vdmVkIHRvIGFub3RoZXIgY3B1L3JxLgogCQkgKi8KIAkJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCQlycSA9IGNwdV9ycShjcHUpOwpAQCAtMzY0NywxMSArMzgxMSw4IEBACiAKIAlwb3N0X3NjaGVkdWxlKHJxKTsKIAotCWlmICh1bmxpa2VseShyZWFjcXVpcmVfa2VybmVsX2xvY2soY3VycmVudCkgPCAwKSkgewotCQlwcmV2ID0gcnEtPmN1cnI7Ci0JCXN3aXRjaF9jb3VudCA9ICZwcmV2LT5uaXZjc3c7CisJaWYgKHVubGlrZWx5KHJlYWNxdWlyZV9rZXJuZWxfbG9jayhwcmV2KSkpCiAJCWdvdG8gbmVlZF9yZXNjaGVkX25vbnByZWVtcHRpYmxlOwotCX0KIAogCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAlpZiAobmVlZF9yZXNjaGVkKCkpCkBAIC0zNzI2LDcgKzM4ODcsNyBAQAogICogb2ZmIG9mIHByZWVtcHRfZW5hYmxlLiBLZXJuZWwgcHJlZW1wdGlvbnMgb2ZmIHJldHVybiBmcm9tIGludGVycnVwdAogICogb2NjdXIgdGhlcmUgYW5kIGNhbGwgc2NoZWR1bGUgZGlyZWN0bHkuCiAgKi8KLWFzbWxpbmthZ2Ugdm9pZCBfX3NjaGVkIHByZWVtcHRfc2NoZWR1bGUodm9pZCkKK2FzbWxpbmthZ2Ugdm9pZCBfX3NjaGVkIG5vdHJhY2UgcHJlZW1wdF9zY2hlZHVsZSh2b2lkKQogewogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGkgPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7CiAKQEAgLTM3MzgsOSArMzg5OSw5IEBACiAJCXJldHVybjsKIAogCWRvIHsKLQkJYWRkX3ByZWVtcHRfY291bnQoUFJFRU1QVF9BQ1RJVkUpOworCQlhZGRfcHJlZW1wdF9jb3VudF9ub3RyYWNlKFBSRUVNUFRfQUNUSVZFKTsKIAkJc2NoZWR1bGUoKTsKLQkJc3ViX3ByZWVtcHRfY291bnQoUFJFRU1QVF9BQ1RJVkUpOworCQlzdWJfcHJlZW1wdF9jb3VudF9ub3RyYWNlKFBSRUVNUFRfQUNUSVZFKTsKIAogCQkvKgogCQkgKiBDaGVjayBhZ2FpbiBpbiBjYXNlIHdlIG1pc3NlZCBhIHByZWVtcHRpb24gb3Bwb3J0dW5pdHkKQEAgLTQ0NDEsMTIgKzQ2MDIsOCBAQAogCSAqLwogCWlmICh1c2VyICYmICFjYXBhYmxlKENBUF9TWVNfTklDRSkpIHsKIAkJaWYgKHJ0X3BvbGljeShwb2xpY3kpKSB7Ci0JCQl1bnNpZ25lZCBsb25nIHJsaW1fcnRwcmlvOwotCi0JCQlpZiAoIWxvY2tfdGFza19zaWdoYW5kKHAsICZmbGFncykpCi0JCQkJcmV0dXJuIC1FU1JDSDsKLQkJCXJsaW1fcnRwcmlvID0gdGFza19ybGltaXQocCwgUkxJTUlUX1JUUFJJTyk7Ci0JCQl1bmxvY2tfdGFza19zaWdoYW5kKHAsICZmbGFncyk7CisJCQl1bnNpZ25lZCBsb25nIHJsaW1fcnRwcmlvID0KKwkJCQkJdGFza19ybGltaXQocCwgUkxJTUlUX1JUUFJJTyk7CiAKIAkJCS8qIGNhbid0IHNldC9jaGFuZ2UgdGhlIHJ0IHBvbGljeSAqLwogCQkJaWYgKHBvbGljeSAhPSBwLT5wb2xpY3kgJiYgIXJsaW1fcnRwcmlvKQpAQCAtNTgxNiwyMCArNTk3Myw0OSBAQAogICovCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fY3B1aW5pdGRhdGEgbWlncmF0aW9uX25vdGlmaWVyID0gewogCS5ub3RpZmllcl9jYWxsID0gbWlncmF0aW9uX2NhbGwsCi0JLnByaW9yaXR5ID0gMTAKKwkucHJpb3JpdHkgPSBDUFVfUFJJX01JR1JBVElPTiwKIH07CiAKK3N0YXRpYyBpbnQgX19jcHVpbml0IHNjaGVkX2NwdV9hY3RpdmUoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJc3dpdGNoIChhY3Rpb24gJiB+Q1BVX1RBU0tTX0ZST1pFTikgeworCWNhc2UgQ1BVX09OTElORToKKwljYXNlIENQVV9ET1dOX0ZBSUxFRDoKKwkJc2V0X2NwdV9hY3RpdmUoKGxvbmcpaGNwdSwgdHJ1ZSk7CisJCXJldHVybiBOT1RJRllfT0s7CisJZGVmYXVsdDoKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCX0KK30KKworc3RhdGljIGludCBfX2NwdWluaXQgc2NoZWRfY3B1X2luYWN0aXZlKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAorCQkJCQl1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKK3sKKwlzd2l0Y2ggKGFjdGlvbiAmIH5DUFVfVEFTS1NfRlJPWkVOKSB7CisJY2FzZSBDUFVfRE9XTl9QUkVQQVJFOgorCQlzZXRfY3B1X2FjdGl2ZSgobG9uZyloY3B1LCBmYWxzZSk7CisJCXJldHVybiBOT1RJRllfT0s7CisJZGVmYXVsdDoKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCX0KK30KKwogc3RhdGljIGludCBfX2luaXQgbWlncmF0aW9uX2luaXQodm9pZCkKIHsKIAl2b2lkICpjcHUgPSAodm9pZCAqKShsb25nKXNtcF9wcm9jZXNzb3JfaWQoKTsKIAlpbnQgZXJyOwogCi0JLyogU3RhcnQgb25lIGZvciB0aGUgYm9vdCBDUFU6ICovCisJLyogSW5pdGlhbGl6ZSBtaWdyYXRpb24gZm9yIHRoZSBib290IENQVSAqLwogCWVyciA9IG1pZ3JhdGlvbl9jYWxsKCZtaWdyYXRpb25fbm90aWZpZXIsIENQVV9VUF9QUkVQQVJFLCBjcHUpOwogCUJVR19PTihlcnIgPT0gTk9USUZZX0JBRCk7CiAJbWlncmF0aW9uX2NhbGwoJm1pZ3JhdGlvbl9ub3RpZmllciwgQ1BVX09OTElORSwgY3B1KTsKIAlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJm1pZ3JhdGlvbl9ub3RpZmllcik7CiAKKwkvKiBSZWdpc3RlciBjcHUgYWN0aXZlIG5vdGlmaWVycyAqLworCWNwdV9ub3RpZmllcihzY2hlZF9jcHVfYWN0aXZlLCBDUFVfUFJJX1NDSEVEX0FDVElWRSk7CisJY3B1X25vdGlmaWVyKHNjaGVkX2NwdV9pbmFjdGl2ZSwgQ1BVX1BSSV9TQ0hFRF9JTkFDVElWRSk7CisKIAlyZXR1cm4gMDsKIH0KIGVhcmx5X2luaXRjYWxsKG1pZ3JhdGlvbl9pbml0KTsKQEAgLTYwNjQsMjMgKzYyNTAsMTggQEAKIAkJZnJlZV9yb290ZG9tYWluKG9sZF9yZCk7CiB9CiAKLXN0YXRpYyBpbnQgaW5pdF9yb290ZG9tYWluKHN0cnVjdCByb290X2RvbWFpbiAqcmQsIGJvb2wgYm9vdG1lbSkKK3N0YXRpYyBpbnQgaW5pdF9yb290ZG9tYWluKHN0cnVjdCByb290X2RvbWFpbiAqcmQpCiB7Ci0JZ2ZwX3QgZ2ZwID0gR0ZQX0tFUk5FTDsKLQogCW1lbXNldChyZCwgMCwgc2l6ZW9mKCpyZCkpOwogCi0JaWYgKGJvb3RtZW0pCi0JCWdmcCA9IEdGUF9OT1dBSVQ7Ci0KLQlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZyZC0+c3BhbiwgZ2ZwKSkKKwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZyZC0+c3BhbiwgR0ZQX0tFUk5FTCkpCiAJCWdvdG8gb3V0OwotCWlmICghYWxsb2NfY3B1bWFza192YXIoJnJkLT5vbmxpbmUsIGdmcCkpCisJaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmcmQtPm9ubGluZSwgR0ZQX0tFUk5FTCkpCiAJCWdvdG8gZnJlZV9zcGFuOwotCWlmICghYWxsb2NfY3B1bWFza192YXIoJnJkLT5ydG9fbWFzaywgZ2ZwKSkKKwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZyZC0+cnRvX21hc2ssIEdGUF9LRVJORUwpKQogCQlnb3RvIGZyZWVfb25saW5lOwogCi0JaWYgKGNwdXByaV9pbml0KCZyZC0+Y3B1cHJpLCBib290bWVtKSAhPSAwKQorCWlmIChjcHVwcmlfaW5pdCgmcmQtPmNwdXByaSkgIT0gMCkKIAkJZ290byBmcmVlX3J0b19tYXNrOwogCXJldHVybiAwOwogCkBAIC02MDk2LDcgKzYyNzcsNyBAQAogCiBzdGF0aWMgdm9pZCBpbml0X2RlZnJvb3Rkb21haW4odm9pZCkKIHsKLQlpbml0X3Jvb3Rkb21haW4oJmRlZl9yb290X2RvbWFpbiwgdHJ1ZSk7CisJaW5pdF9yb290ZG9tYWluKCZkZWZfcm9vdF9kb21haW4pOwogCiAJYXRvbWljX3NldCgmZGVmX3Jvb3RfZG9tYWluLnJlZmNvdW50LCAxKTsKIH0KQEAgLTYxMDksNyArNjI5MCw3IEBACiAJaWYgKCFyZCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAoaW5pdF9yb290ZG9tYWluKHJkLCBmYWxzZSkgIT0gMCkgeworCWlmIChpbml0X3Jvb3Rkb21haW4ocmQpICE9IDApIHsKIAkJa2ZyZWUocmQpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC03Mjg4LDI5ICs3NDY5LDM1IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1NDSEVEX01DIHx8IENPTkZJR19TQ0hFRF9TTVQgKi8KIAotI2lmbmRlZiBDT05GSUdfQ1BVU0VUUwogLyoKLSAqIEFkZCBvbmxpbmUgYW5kIHJlbW92ZSBvZmZsaW5lIENQVXMgZnJvbSB0aGUgc2NoZWR1bGVyIGRvbWFpbnMuCi0gKiBXaGVuIGNwdXNldHMgYXJlIGVuYWJsZWQgdGhleSB0YWtlIG92ZXIgdGhpcyBmdW5jdGlvbi4KKyAqIFVwZGF0ZSBjcHVzZXRzIGFjY29yZGluZyB0byBjcHVfYWN0aXZlIG1hc2suICBJZiBjcHVzZXRzIGFyZQorICogZGlzYWJsZWQsIGNwdXNldF91cGRhdGVfYWN0aXZlX2NwdXMoKSBiZWNvbWVzIGEgc2ltcGxlIHdyYXBwZXIKKyAqIGFyb3VuZCBwYXJ0aXRpb25fc2NoZWRfZG9tYWlucygpLgogICovCi1zdGF0aWMgaW50IHVwZGF0ZV9zY2hlZF9kb21haW5zKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAotCQkJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQorc3RhdGljIGludCBjcHVzZXRfY3B1X2FjdGl2ZShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sCisJCQkgICAgIHZvaWQgKmhjcHUpCiB7Ci0Jc3dpdGNoIChhY3Rpb24pIHsKKwlzd2l0Y2ggKGFjdGlvbiAmIH5DUFVfVEFTS1NfRlJPWkVOKSB7CiAJY2FzZSBDUFVfT05MSU5FOgotCWNhc2UgQ1BVX09OTElORV9GUk9aRU46Ci0JY2FzZSBDUFVfRE9XTl9QUkVQQVJFOgotCWNhc2UgQ1BVX0RPV05fUFJFUEFSRV9GUk9aRU46CiAJY2FzZSBDUFVfRE9XTl9GQUlMRUQ6Ci0JY2FzZSBDUFVfRE9XTl9GQUlMRURfRlJPWkVOOgotCQlwYXJ0aXRpb25fc2NoZWRfZG9tYWlucygxLCBOVUxMLCBOVUxMKTsKKwkJY3B1c2V0X3VwZGF0ZV9hY3RpdmVfY3B1cygpOwogCQlyZXR1cm4gTk9USUZZX09LOwotCiAJZGVmYXVsdDoKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCX0KIH0KLSNlbmRpZgorCitzdGF0aWMgaW50IGNwdXNldF9jcHVfaW5hY3RpdmUoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLAorCQkJICAgICAgIHZvaWQgKmhjcHUpCit7CisJc3dpdGNoIChhY3Rpb24gJiB+Q1BVX1RBU0tTX0ZST1pFTikgeworCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKKwkJY3B1c2V0X3VwZGF0ZV9hY3RpdmVfY3B1cygpOworCQlyZXR1cm4gTk9USUZZX09LOworCWRlZmF1bHQ6CisJCXJldHVybiBOT1RJRllfRE9ORTsKKwl9Cit9CiAKIHN0YXRpYyBpbnQgdXBkYXRlX3J1bnRpbWUoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCiAJCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCkBAIC03MzU2LDEwICs3NTQzLDggQEAKIAltdXRleF91bmxvY2soJnNjaGVkX2RvbWFpbnNfbXV0ZXgpOwogCXB1dF9vbmxpbmVfY3B1cygpOwogCi0jaWZuZGVmIENPTkZJR19DUFVTRVRTCi0JLyogWFhYOiBUaGVvcmV0aWNhbCByYWNlIGhlcmUgLSBDUFUgbWF5IGJlIGhvdHBsdWdnZWQgbm93ICovCi0JaG90Y3B1X25vdGlmaWVyKHVwZGF0ZV9zY2hlZF9kb21haW5zLCAwKTsKLSNlbmRpZgorCWhvdGNwdV9ub3RpZmllcihjcHVzZXRfY3B1X2FjdGl2ZSwgQ1BVX1BSSV9DUFVTRVRfQUNUSVZFKTsKKwlob3RjcHVfbm90aWZpZXIoY3B1c2V0X2NwdV9pbmFjdGl2ZSwgQ1BVX1BSSV9DUFVTRVRfSU5BQ1RJVkUpOwogCiAJLyogUlQgcnVudGltZSBjb2RlIG5lZWRzIHRvIGhhbmRsZSBzb21lIGhvdHBsdWcgZXZlbnRzICovCiAJaG90Y3B1X25vdGlmaWVyKHVwZGF0ZV9ydW50aW1lLCAwKTsKQEAgLTc2MDQsNiArNzc4OSw5IEBACiAKIAkJZm9yIChqID0gMDsgaiA8IENQVV9MT0FEX0lEWF9NQVg7IGorKykKIAkJCXJxLT5jcHVfbG9hZFtqXSA9IDA7CisKKwkJcnEtPmxhc3RfbG9hZF91cGRhdGVfdGljayA9IGppZmZpZXM7CisKICNpZmRlZiBDT05GSUdfU01QCiAJCXJxLT5zZCA9IE5VTEw7CiAJCXJxLT5yZCA9IE5VTEw7CkBAIC03NjE3LDYgKzc4MDUsMTAgQEAKIAkJcnEtPmlkbGVfc3RhbXAgPSAwOwogCQlycS0+YXZnX2lkbGUgPSAyKnN5c2N0bF9zY2hlZF9taWdyYXRpb25fY29zdDsKIAkJcnFfYXR0YWNoX3Jvb3QocnEsICZkZWZfcm9vdF9kb21haW4pOworI2lmZGVmIENPTkZJR19OT19IWgorCQlycS0+bm9oel9iYWxhbmNlX2tpY2sgPSAwOworCQlpbml0X3NjaGVkX3NvZnRpcnFfY3NkKCZwZXJfY3B1KHJlbW90ZV9zY2hlZF9zb2Z0aXJxX2NiLCBpKSk7CisjZW5kaWYKICNlbmRpZgogCQlpbml0X3JxX2hydGljayhycSk7CiAJCWF0b21pY19zZXQoJnJxLT5ucl9pb3dhaXQsIDApOwpAQCAtNzY2MSw4ICs3ODUzLDExIEBACiAJemFsbG9jX2NwdW1hc2tfdmFyKCZub2h6X2NwdV9tYXNrLCBHRlBfTk9XQUlUKTsKICNpZmRlZiBDT05GSUdfU01QCiAjaWZkZWYgQ09ORklHX05PX0haCi0JemFsbG9jX2NwdW1hc2tfdmFyKCZub2h6LmNwdV9tYXNrLCBHRlBfTk9XQUlUKTsKLQlhbGxvY19jcHVtYXNrX3Zhcigmbm9oei5pbGJfZ3JwX25vaHpfbWFzaywgR0ZQX05PV0FJVCk7CisJemFsbG9jX2NwdW1hc2tfdmFyKCZub2h6LmlkbGVfY3B1c19tYXNrLCBHRlBfTk9XQUlUKTsKKwlhbGxvY19jcHVtYXNrX3Zhcigmbm9oei5ncnBfaWRsZV9tYXNrLCBHRlBfTk9XQUlUKTsKKwlhdG9taWNfc2V0KCZub2h6LmxvYWRfYmFsYW5jZXIsIG5yX2NwdV9pZHMpOworCWF0b21pY19zZXQoJm5vaHouZmlyc3RfcGlja19jcHUsIG5yX2NwdV9pZHMpOworCWF0b21pY19zZXQoJm5vaHouc2Vjb25kX3BpY2tfY3B1LCBucl9jcHVfaWRzKTsKICNlbmRpZgogCS8qIE1heSBiZSBhbGxvY2F0ZWQgYXQgaXNvbGNwdXMgY21kbGluZSBwYXJzZSB0aW1lICovCiAJaWYgKGNwdV9pc29sYXRlZF9tYXAgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9jbG9jay5jIGIva2VybmVsL3NjaGVkX2Nsb2NrLmMKaW5kZXggOTA2YTBmNy4uNTJmMWExNCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2Nsb2NrLmMKKysrIGIva2VybmVsL3NjaGVkX2Nsb2NrLmMKQEAgLTEwLDE5ICsxMCw1NSBAQAogICogICBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KICAqICAgR3VpbGxhdW1lIENoYXphcmFpbiA8Z3VpY2hhekBnbWFpbC5jb20+CiAgKgotICogQ3JlYXRlIGEgc2VtaSBzdGFibGUgY2xvY2sgZnJvbSBhIG1peHR1cmUgb2Ygb3RoZXIgZXZlbnRzLCBpbmNsdWRpbmc6Ci0gKiAgLSBndG9kCisgKgorICogV2hhdDoKKyAqCisgKiBjcHVfY2xvY2soaSkgcHJvdmlkZXMgYSBmYXN0IChleGVjdXRpb24gdGltZSkgaGlnaCByZXNvbHV0aW9uCisgKiBjbG9jayB3aXRoIGJvdW5kZWQgZHJpZnQgYmV0d2VlbiBDUFVzLiBUaGUgdmFsdWUgb2YgY3B1X2Nsb2NrKGkpCisgKiBpcyBtb25vdG9uaWMgZm9yIGNvbnN0YW50IGkuIFRoZSB0aW1lc3RhbXAgcmV0dXJuZWQgaXMgaW4gbmFub3NlY29uZHMuCisgKgorICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBCSUcgRkFUIFdBUk5JTkcgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAqICMgd2hlbiBjb21wYXJpbmcgY3B1X2Nsb2NrKGkpIHRvIGNwdV9jbG9jayhqKSBmb3IgaSAhPSBqLCB0aW1lIGNhbiAjCisgKiAjIGdvIGJhY2t3YXJkcyAhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAqCisgKiBUaGVyZSBpcyBubyBzdHJpY3QgcHJvbWlzZSBhYm91dCB0aGUgYmFzZSwgYWx0aG91Z2ggaXQgdGVuZHMgdG8gc3RhcnQKKyAqIGF0IDAgb24gYm9vdCAoYnV0IHBlb3BsZSByZWFsbHkgc2hvdWxkbid0IHJlbHkgb24gdGhhdCkuCisgKgorICogY3B1X2Nsb2NrKGkpICAgICAgIC0tIGNhbiBiZSB1c2VkIGZyb20gYW55IGNvbnRleHQsIGluY2x1ZGluZyBOTUkuCisgKiBzY2hlZF9jbG9ja19jcHUoaSkgLS0gbXVzdCBiZSB1c2VkIHdpdGggbG9jYWwgSVJRcyBkaXNhYmxlZCAoaW1wbGllZCBieSBOTUkpCisgKiBsb2NhbF9jbG9jaygpICAgICAgLS0gaXMgY3B1X2Nsb2NrKCkgb24gdGhlIGN1cnJlbnQgY3B1LgorICoKKyAqIEhvdzoKKyAqCisgKiBUaGUgaW1wbGVtZW50YXRpb24gZWl0aGVyIHVzZXMgc2NoZWRfY2xvY2soKSB3aGVuCisgKiAhQ09ORklHX0hBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0ssIHdoaWNoIG1lYW5zIGluIHRoYXQgY2FzZSB0aGUKKyAqIHNjaGVkX2Nsb2NrKCkgaXMgYXNzdW1lZCB0byBwcm92aWRlIHRoZXNlIHByb3BlcnRpZXMgKG1vc3RseSBpdCBtZWFucworICogdGhlIGFyY2hpdGVjdHVyZSBwcm92aWRlcyBhIGdsb2JhbGx5IHN5bmNocm9uaXplZCBoaWdocmVzIHRpbWUgc291cmNlKS4KKyAqCisgKiBPdGhlcndpc2UgaXQgdHJpZXMgdG8gY3JlYXRlIGEgc2VtaSBzdGFibGUgY2xvY2sgZnJvbSBhIG1peHR1cmUgb2Ygb3RoZXIKKyAqIGNsb2NrcywgaW5jbHVkaW5nOgorICoKKyAqICAtIEdUT0QgKGNsb2NrIG1vbm90b21pYykKICAqICAtIHNjaGVkX2Nsb2NrKCkKICAqICAtIGV4cGxpY2l0IGlkbGUgZXZlbnRzCiAgKgotICogV2UgdXNlIGd0b2QgYXMgYmFzZSBhbmQgdGhlIHVuc3RhYmxlIGNsb2NrIGRlbHRhcy4gVGhlIGRlbHRhcyBhcmUgZmlsdGVyZWQsCi0gKiBtYWtpbmcgaXQgbW9ub3RvbmljIGFuZCBrZWVwaW5nIGl0IHdpdGhpbiBhbiBleHBlY3RlZCB3aW5kb3cuCisgKiBXZSB1c2UgR1RPRCBhcyBiYXNlIGFuZCB1c2Ugc2NoZWRfY2xvY2soKSBkZWx0YXMgdG8gaW1wcm92ZSByZXNvbHV0aW9uLiBUaGUKKyAqIGRlbHRhcyBhcmUgZmlsdGVyZWQgdG8gcHJvdmlkZSBtb25vdG9uaWNpdHkgYW5kIGtlZXBpbmcgaXQgd2l0aGluIGFuCisgKiBleHBlY3RlZCB3aW5kb3cuCiAgKgogICogRnVydGhlcm1vcmUsIGV4cGxpY2l0IHNsZWVwIGFuZCB3YWtldXAgaG9va3MgYWxsb3cgdXMgdG8gYWNjb3VudCBmb3IgdGltZQogICogdGhhdCBpcyBvdGhlcndpc2UgaW52aXNpYmxlIChUU0MgZ2V0cyBzdG9wcGVkKS4KICAqCi0gKiBUaGUgY2xvY2s6IHNjaGVkX2Nsb2NrX2NwdSgpIGlzIG1vbm90b25pYyBwZXIgY3B1LCBhbmQgc2hvdWxkIGJlIHNvbWV3aGF0Ci0gKiBjb25zaXN0ZW50IGJldHdlZW4gY3B1cyAobmV2ZXIgbW9yZSB0aGFuIDIgamlmZmllcyBkaWZmZXJlbmNlKS4KKyAqCisgKiBOb3RlczoKKyAqCisgKiBUaGUgIUlSUS1zYWZldGx5IG9mIHNjaGVkX2Nsb2NrKCkgYW5kIHNjaGVkX2Nsb2NrX2NwdSgpIGNvbWVzIGZyb20gdGhpbmdzCisgKiBsaWtlIGNwdWZyZXEgaW50ZXJydXB0cyB0aGF0IGNhbiBjaGFuZ2UgdGhlIGJhc2UgY2xvY2sgKFRTQykgbXVsdGlwbGllcgorICogYW5kIGNhdXNlIGZ1bm55IGp1bXBzIGluIHRpbWUgLS0gYWx0aG91Z2ggdGhlIGZpbHRlcmluZyBwcm92aWRlZCBieQorICogc2NoZWRfY2xvY2tfY3B1KCkgc2hvdWxkIG1pdGlnYXRlIHNlcmlvdXMgYXJ0aWZhY3RzIHdlIGNhbm5vdCByZWx5IG9uIGl0CisgKiBpbiBnZW5lcmFsIHNpbmNlIGZvciAhQ09ORklHX0hBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0sgd2UgZnVsbHkgcmVseSBvbgorICogc2NoZWRfY2xvY2soKS4KICAqLwogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgpAQCAtMTcwLDYgKzIwNiwxMSBAQAogCXJldHVybiB2YWw7CiB9CiAKKy8qCisgKiBTaW1pbGFyIHRvIGNwdV9jbG9jaygpLCBidXQgcmVxdWlyZXMgbG9jYWwgSVJRcyB0byBiZSBkaXNhYmxlZC4KKyAqCisgKiBTZWUgY3B1X2Nsb2NrKCkuCisgKi8KIHU2NCBzY2hlZF9jbG9ja19jcHUoaW50IGNwdSkKIHsKIAlzdHJ1Y3Qgc2NoZWRfY2xvY2tfZGF0YSAqc2NkOwpAQCAtMjM3LDkgKzI3OCwxOSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2NoZWRfY2xvY2tfaWRsZV93YWtldXBfZXZlbnQpOwogCi11bnNpZ25lZCBsb25nIGxvbmcgY3B1X2Nsb2NrKGludCBjcHUpCisvKgorICogQXMgb3V0bGluZWQgYXQgdGhlIHRvcCwgcHJvdmlkZXMgYSBmYXN0LCBoaWdoIHJlc29sdXRpb24sIG5hbm9zZWNvbmQKKyAqIHRpbWUgc291cmNlIHRoYXQgaXMgbW9ub3RvbmljIHBlciBjcHUgYXJndW1lbnQgYW5kIGhhcyBib3VuZGVkIGRyaWZ0CisgKiBiZXR3ZWVuIGNwdXMuCisgKgorICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBCSUcgRkFUIFdBUk5JTkcgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAqICMgd2hlbiBjb21wYXJpbmcgY3B1X2Nsb2NrKGkpIHRvIGNwdV9jbG9jayhqKSBmb3IgaSAhPSBqLCB0aW1lIGNhbiAjCisgKiAjIGdvIGJhY2t3YXJkcyAhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAqLwordTY0IGNwdV9jbG9jayhpbnQgY3B1KQogewotCXVuc2lnbmVkIGxvbmcgbG9uZyBjbG9jazsKKwl1NjQgY2xvY2s7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKQEAgLTI0OSw2ICszMDAsMjUgQEAKIAlyZXR1cm4gY2xvY2s7CiB9CiAKKy8qCisgKiBTaW1pbGFyIHRvIGNwdV9jbG9jaygpIGZvciB0aGUgY3VycmVudCBjcHUuIFRpbWUgd2lsbCBvbmx5IGJlIG9ic2VydmVkCisgKiB0byBiZSBtb25vdG9uaWMgaWYgY2FyZSBpcyB0YWtlbiB0byBvbmx5IGNvbXBhcmUgdGltZXN0YW1wdCB0YWtlbiBvbiB0aGUKKyAqIHNhbWUgQ1BVLgorICoKKyAqIFNlZSBjcHVfY2xvY2soKS4KKyAqLwordTY0IGxvY2FsX2Nsb2NrKHZvaWQpCit7CisJdTY0IGNsb2NrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJY2xvY2sgPSBzY2hlZF9jbG9ja19jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gY2xvY2s7Cit9CisKICNlbHNlIC8qIENPTkZJR19IQVZFX1VOU1RBQkxFX1NDSEVEX0NMT0NLICovCiAKIHZvaWQgc2NoZWRfY2xvY2tfaW5pdCh2b2lkKQpAQCAtMjY0LDEyICszMzQsMTcgQEAKIAlyZXR1cm4gc2NoZWRfY2xvY2soKTsKIH0KIAotCi11bnNpZ25lZCBsb25nIGxvbmcgY3B1X2Nsb2NrKGludCBjcHUpCit1NjQgY3B1X2Nsb2NrKGludCBjcHUpCiB7CiAJcmV0dXJuIHNjaGVkX2Nsb2NrX2NwdShjcHUpOwogfQogCit1NjQgbG9jYWxfY2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gc2NoZWRfY2xvY2tfY3B1KDApOworfQorCiAjZW5kaWYgLyogQ09ORklHX0hBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0sgKi8KIAogRVhQT1JUX1NZTUJPTF9HUEwoY3B1X2Nsb2NrKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGxvY2FsX2Nsb2NrKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9jcHVwcmkuYyBiL2tlcm5lbC9zY2hlZF9jcHVwcmkuYwppbmRleCBlNjg3MWNiLi4yNzIyZGMxIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfY3B1cHJpLmMKKysrIGIva2VybmVsL3NjaGVkX2NwdXByaS5jCkBAIC0xNjYsMTQgKzE2NiwxMCBAQAogICoKICAqIFJldHVybnM6IC1FTk9NRU0gaWYgbWVtb3J5IGZhaWxzLgogICovCi1pbnQgY3B1cHJpX2luaXQoc3RydWN0IGNwdXByaSAqY3AsIGJvb2wgYm9vdG1lbSkKK2ludCBjcHVwcmlfaW5pdChzdHJ1Y3QgY3B1cHJpICpjcCkKIHsKLQlnZnBfdCBnZnAgPSBHRlBfS0VSTkVMOwogCWludCBpOwogCi0JaWYgKGJvb3RtZW0pCi0JCWdmcCA9IEdGUF9OT1dBSVQ7Ci0KIAltZW1zZXQoY3AsIDAsIHNpemVvZigqY3ApKTsKIAogCWZvciAoaSA9IDA7IGkgPCBDUFVQUklfTlJfUFJJT1JJVElFUzsgaSsrKSB7CkBAIC0xODEsNyArMTc3LDcgQEAKIAogCQlyYXdfc3Bpbl9sb2NrX2luaXQoJnZlYy0+bG9jayk7CiAJCXZlYy0+Y291bnQgPSAwOwotCQlpZiAoIXphbGxvY19jcHVtYXNrX3ZhcigmdmVjLT5tYXNrLCBnZnApKQorCQlpZiAoIXphbGxvY19jcHVtYXNrX3ZhcigmdmVjLT5tYXNrLCBHRlBfS0VSTkVMKSkKIAkJCWdvdG8gY2xlYW51cDsKIAl9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9jcHVwcmkuaCBiL2tlcm5lbC9zY2hlZF9jcHVwcmkuaAppbmRleCA3Y2I1YmI2Li45ZmM3ZDM4IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfY3B1cHJpLmgKKysrIGIva2VybmVsL3NjaGVkX2NwdXByaS5oCkBAIC0yNyw3ICsyNyw3IEBACiBpbnQgIGNwdXByaV9maW5kKHN0cnVjdCBjcHVwcmkgKmNwLAogCQkgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgY3B1bWFzayAqbG93ZXN0X21hc2spOwogdm9pZCBjcHVwcmlfc2V0KHN0cnVjdCBjcHVwcmkgKmNwLCBpbnQgY3B1LCBpbnQgcHJpKTsKLWludCBjcHVwcmlfaW5pdChzdHJ1Y3QgY3B1cHJpICpjcCwgYm9vbCBib290bWVtKTsKK2ludCBjcHVwcmlfaW5pdChzdHJ1Y3QgY3B1cHJpICpjcCk7CiB2b2lkIGNwdXByaV9jbGVhbnVwKHN0cnVjdCBjcHVwcmkgKmNwKTsKICNlbHNlCiAjZGVmaW5lIGNwdXByaV9zZXQoY3AsIGNwdSwgcHJpKSBkbyB7IH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfZGVidWcuYyBiL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jCmluZGV4IDM1NTY1MzkuLjJlMWIwZDEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jCisrKyBiL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jCkBAIC0zMzIsNyArMzMyLDcgQEAKIAlQTihzeXNjdGxfc2NoZWRfbGF0ZW5jeSk7CiAJUE4oc3lzY3RsX3NjaGVkX21pbl9ncmFudWxhcml0eSk7CiAJUE4oc3lzY3RsX3NjaGVkX3dha2V1cF9ncmFudWxhcml0eSk7Ci0JUE4oc3lzY3RsX3NjaGVkX2NoaWxkX3J1bnNfZmlyc3QpOworCVAoc3lzY3RsX3NjaGVkX2NoaWxkX3J1bnNfZmlyc3QpOwogCVAoc3lzY3RsX3NjaGVkX2ZlYXR1cmVzKTsKICN1bmRlZiBQTgogI3VuZGVmIFAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9mYWlyLmMgYi9rZXJuZWwvc2NoZWRfZmFpci5jCmluZGV4IGE4NzhiNTMuLjgwNmQxYjIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9mYWlyLmMKKysrIGIva2VybmVsL3NjaGVkX2ZhaXIuYwpAQCAtMjI4NywxMyArMjI4Nyw2IEBACiAJdW5zaWduZWQgbG9uZyBwb3dlciA9IFNDSEVEX0xPQURfU0NBTEU7CiAJc3RydWN0IHNjaGVkX2dyb3VwICpzZGcgPSBzZC0+Z3JvdXBzOwogCi0JaWYgKHNjaGVkX2ZlYXQoQVJDSF9QT1dFUikpCi0JCXBvd2VyICo9IGFyY2hfc2NhbGVfZnJlcV9wb3dlcihzZCwgY3B1KTsKLQllbHNlCi0JCXBvd2VyICo9IGRlZmF1bHRfc2NhbGVfZnJlcV9wb3dlcihzZCwgY3B1KTsKLQotCXBvd2VyID4+PSBTQ0hFRF9MT0FEX1NISUZUOwotCiAJaWYgKChzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUikgJiYgd2VpZ2h0ID4gMSkgewogCQlpZiAoc2NoZWRfZmVhdChBUkNIX1BPV0VSKSkKIAkJCXBvd2VyICo9IGFyY2hfc2NhbGVfc210X3Bvd2VyKHNkLCBjcHUpOwpAQCAtMjMwMyw2ICsyMjk2LDE1IEBACiAJCXBvd2VyID4+PSBTQ0hFRF9MT0FEX1NISUZUOwogCX0KIAorCXNkZy0+Y3B1X3Bvd2VyX29yaWcgPSBwb3dlcjsKKworCWlmIChzY2hlZF9mZWF0KEFSQ0hfUE9XRVIpKQorCQlwb3dlciAqPSBhcmNoX3NjYWxlX2ZyZXFfcG93ZXIoc2QsIGNwdSk7CisJZWxzZQorCQlwb3dlciAqPSBkZWZhdWx0X3NjYWxlX2ZyZXFfcG93ZXIoc2QsIGNwdSk7CisKKwlwb3dlciA+Pj0gU0NIRURfTE9BRF9TSElGVDsKKwogCXBvd2VyICo9IHNjYWxlX3J0X3Bvd2VyKGNwdSk7CiAJcG93ZXIgPj49IFNDSEVEX0xPQURfU0hJRlQ7CiAKQEAgLTIzMzUsNiArMjMzNywzMSBAQAogCXNkZy0+Y3B1X3Bvd2VyID0gcG93ZXI7CiB9CiAKKy8qCisgKiBUcnkgYW5kIGZpeCB1cCBjYXBhY2l0eSBmb3IgdGlueSBzaWJsaW5ncywgdGhpcyBpcyBuZWVkZWQgd2hlbgorICogdGhpbmdzIGxpa2UgU0RfQVNZTV9QQUNLSU5HIG5lZWQgZl9iX2cgdG8gc2VsZWN0IGFub3RoZXIgc2libGluZworICogd2hpY2ggb24gaXRzIG93biBpc24ndCBwb3dlcmZ1bCBlbm91Z2guCisgKgorICogU2VlIHVwZGF0ZV9zZF9waWNrX2J1c2llc3QoKSBhbmQgY2hlY2tfYXN5bV9wYWNraW5nKCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitmaXhfc21hbGxfY2FwYWNpdHkoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXApCit7CisJLyoKKwkgKiBPbmx5IHNpYmxpbmdzIGNhbiBoYXZlIHNpZ25pZmljYW50bHkgbGVzcyB0aGFuIFNDSEVEX0xPQURfU0NBTEUKKwkgKi8KKwlpZiAoc2QtPmxldmVsICE9IFNEX0xWX1NJQkxJTkcpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJZiB+OTAlIG9mIHRoZSBjcHVfcG93ZXIgaXMgc3RpbGwgdGhlcmUsIHdlJ3JlIGdvb2QuCisJICovCisJaWYgKGdyb3VwLT5jcHVfcG93ZXIgKiAzMiA+IGdyb3VwLT5jcHVfcG93ZXJfb3JpZyAqIDI5KQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCiAvKioKICAqIHVwZGF0ZV9zZ19sYl9zdGF0cyAtIFVwZGF0ZSBzY2hlZF9ncm91cCdzIHN0YXRpc3RpY3MgZm9yIGxvYWQgYmFsYW5jaW5nLgogICogQHNkOiBUaGUgc2NoZWRfZG9tYWluIHdob3NlIHN0YXRpc3RpY3MgYXJlIHRvIGJlIHVwZGF0ZWQuCkBAIC0yNDAwLDE0ICsyNDI3LDE0IEBACiAJICogZG9tYWlucy4gSW4gdGhlIG5ld2x5IGlkbGUgY2FzZSwgd2Ugd2lsbCBhbGxvdyBhbGwgdGhlIGNwdSdzCiAJICogdG8gZG8gdGhlIG5ld2x5IGlkbGUgbG9hZCBiYWxhbmNlLgogCSAqLwotCWlmIChpZGxlICE9IENQVV9ORVdMWV9JRExFICYmIGxvY2FsX2dyb3VwICYmCi0JICAgIGJhbGFuY2VfY3B1ICE9IHRoaXNfY3B1KSB7Ci0JCSpiYWxhbmNlID0gMDsKLQkJcmV0dXJuOworCWlmIChpZGxlICE9IENQVV9ORVdMWV9JRExFICYmIGxvY2FsX2dyb3VwKSB7CisJCWlmIChiYWxhbmNlX2NwdSAhPSB0aGlzX2NwdSkgeworCQkJKmJhbGFuY2UgPSAwOworCQkJcmV0dXJuOworCQl9CisJCXVwZGF0ZV9ncm91cF9wb3dlcihzZCwgdGhpc19jcHUpOwogCX0KIAotCXVwZGF0ZV9ncm91cF9wb3dlcihzZCwgdGhpc19jcHUpOwotCiAJLyogQWRqdXN0IGJ5IHJlbGF0aXZlIENQVSBwb3dlciBvZiB0aGUgZ3JvdXAgKi8KIAlzZ3MtPmF2Z19sb2FkID0gKHNncy0+Z3JvdXBfbG9hZCAqIFNDSEVEX0xPQURfU0NBTEUpIC8gZ3JvdXAtPmNwdV9wb3dlcjsKIApAQCAtMjQyOCw2ICsyNDU1LDUxIEBACiAKIAlzZ3MtPmdyb3VwX2NhcGFjaXR5ID0KIAkJRElWX1JPVU5EX0NMT1NFU1QoZ3JvdXAtPmNwdV9wb3dlciwgU0NIRURfTE9BRF9TQ0FMRSk7CisJaWYgKCFzZ3MtPmdyb3VwX2NhcGFjaXR5KQorCQlzZ3MtPmdyb3VwX2NhcGFjaXR5ID0gZml4X3NtYWxsX2NhcGFjaXR5KHNkLCBncm91cCk7Cit9CisKKy8qKgorICogdXBkYXRlX3NkX3BpY2tfYnVzaWVzdCAtIHJldHVybiAxIG9uIGJ1c2llc3QgZ3JvdXAKKyAqIEBzZDogc2NoZWRfZG9tYWluIHdob3NlIHN0YXRpc3RpY3MgYXJlIHRvIGJlIGNoZWNrZWQKKyAqIEBzZHM6IHNjaGVkX2RvbWFpbiBzdGF0aXN0aWNzCisgKiBAc2c6IHNjaGVkX2dyb3VwIGNhbmRpZGF0ZSB0byBiZSBjaGVja2VkIGZvciBiZWluZyB0aGUgYnVzaWVzdAorICogQHNnczogc2NoZWRfZ3JvdXAgc3RhdGlzdGljcworICogQHRoaXNfY3B1OiB0aGUgY3VycmVudCBjcHUKKyAqCisgKiBEZXRlcm1pbmUgaWYgQHNnIGlzIGEgYnVzaWVyIGdyb3VwIHRoYW4gdGhlIHByZXZpb3VzbHkgc2VsZWN0ZWQKKyAqIGJ1c2llc3QgZ3JvdXAuCisgKi8KK3N0YXRpYyBib29sIHVwZGF0ZV9zZF9waWNrX2J1c2llc3Qoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCisJCQkJICAgc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsCisJCQkJICAgc3RydWN0IHNjaGVkX2dyb3VwICpzZywKKwkJCQkgICBzdHJ1Y3Qgc2dfbGJfc3RhdHMgKnNncywKKwkJCQkgICBpbnQgdGhpc19jcHUpCit7CisJaWYgKHNncy0+YXZnX2xvYWQgPD0gc2RzLT5tYXhfbG9hZCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHNncy0+c3VtX25yX3J1bm5pbmcgPiBzZ3MtPmdyb3VwX2NhcGFjaXR5KQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmIChzZ3MtPmdyb3VwX2ltYikKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAqIEFTWU1fUEFDS0lORyBuZWVkcyB0byBtb3ZlIGFsbCB0aGUgd29yayB0byB0aGUgbG93ZXN0CisJICogbnVtYmVyZWQgQ1BVcyBpbiB0aGUgZ3JvdXAsIHRoZXJlZm9yZSBtYXJrIGFsbCBncm91cHMKKwkgKiBoaWdoZXIgdGhhbiBvdXJzZWxmIGFzIGJ1c3kuCisJICovCisJaWYgKChzZC0+ZmxhZ3MgJiBTRF9BU1lNX1BBQ0tJTkcpICYmIHNncy0+c3VtX25yX3J1bm5pbmcgJiYKKwkgICAgdGhpc19jcHUgPCBncm91cF9maXJzdF9jcHUoc2cpKSB7CisJCWlmICghc2RzLT5idXNpZXN0KQorCQkJcmV0dXJuIHRydWU7CisKKwkJaWYgKGdyb3VwX2ZpcnN0X2NwdShzZHMtPmJ1c2llc3QpID4gZ3JvdXBfZmlyc3RfY3B1KHNnKSkKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKIH0KIAogLyoqCkBAIC0yNDM1LDcgKzI1MDcsNyBAQAogICogQHNkOiBzY2hlZF9kb21haW4gd2hvc2Ugc3RhdGlzdGljcyBhcmUgdG8gYmUgdXBkYXRlZC4KICAqIEB0aGlzX2NwdTogQ3B1IGZvciB3aGljaCBsb2FkIGJhbGFuY2UgaXMgY3VycmVudGx5IHBlcmZvcm1lZC4KICAqIEBpZGxlOiBJZGxlIHN0YXR1cyBvZiB0aGlzX2NwdQotICogQHNkX2lkbGU6IElkbGUgc3RhdHVzIG9mIHRoZSBzY2hlZF9kb21haW4gY29udGFpbmluZyBncm91cC4KKyAqIEBzZF9pZGxlOiBJZGxlIHN0YXR1cyBvZiB0aGUgc2NoZWRfZG9tYWluIGNvbnRhaW5pbmcgc2cuCiAgKiBAY3B1czogU2V0IG9mIGNwdXMgY29uc2lkZXJlZCBmb3IgbG9hZCBiYWxhbmNpbmcuCiAgKiBAYmFsYW5jZTogU2hvdWxkIHdlIGJhbGFuY2UuCiAgKiBAc2RzOiB2YXJpYWJsZSB0byBob2xkIHRoZSBzdGF0aXN0aWNzIGZvciB0aGlzIHNjaGVkX2RvbWFpbi4KQEAgLTI0NDYsNyArMjUxOCw3IEBACiAJCQlzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcykKIHsKIAlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpjaGlsZCA9IHNkLT5jaGlsZDsKLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwID0gc2QtPmdyb3VwczsKKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKnNnID0gc2QtPmdyb3VwczsKIAlzdHJ1Y3Qgc2dfbGJfc3RhdHMgc2dzOwogCWludCBsb2FkX2lkeCwgcHJlZmVyX3NpYmxpbmcgPSAwOwogCkBAIC0yNDU5LDIxICsyNTMxLDIwIEBACiAJZG8gewogCQlpbnQgbG9jYWxfZ3JvdXA7CiAKLQkJbG9jYWxfZ3JvdXAgPSBjcHVtYXNrX3Rlc3RfY3B1KHRoaXNfY3B1LAotCQkJCQkgICAgICAgc2NoZWRfZ3JvdXBfY3B1cyhncm91cCkpOworCQlsb2NhbF9ncm91cCA9IGNwdW1hc2tfdGVzdF9jcHUodGhpc19jcHUsIHNjaGVkX2dyb3VwX2NwdXMoc2cpKTsKIAkJbWVtc2V0KCZzZ3MsIDAsIHNpemVvZihzZ3MpKTsKLQkJdXBkYXRlX3NnX2xiX3N0YXRzKHNkLCBncm91cCwgdGhpc19jcHUsIGlkbGUsIGxvYWRfaWR4LCBzZF9pZGxlLAorCQl1cGRhdGVfc2dfbGJfc3RhdHMoc2QsIHNnLCB0aGlzX2NwdSwgaWRsZSwgbG9hZF9pZHgsIHNkX2lkbGUsCiAJCQkJbG9jYWxfZ3JvdXAsIGNwdXMsIGJhbGFuY2UsICZzZ3MpOwogCiAJCWlmIChsb2NhbF9ncm91cCAmJiAhKCpiYWxhbmNlKSkKIAkJCXJldHVybjsKIAogCQlzZHMtPnRvdGFsX2xvYWQgKz0gc2dzLmdyb3VwX2xvYWQ7Ci0JCXNkcy0+dG90YWxfcHdyICs9IGdyb3VwLT5jcHVfcG93ZXI7CisJCXNkcy0+dG90YWxfcHdyICs9IHNnLT5jcHVfcG93ZXI7CiAKIAkJLyoKIAkJICogSW4gY2FzZSB0aGUgY2hpbGQgZG9tYWluIHByZWZlcnMgdGFza3MgZ28gdG8gc2libGluZ3MKLQkJICogZmlyc3QsIGxvd2VyIHRoZSBncm91cCBjYXBhY2l0eSB0byBvbmUgc28gdGhhdCB3ZSdsbCB0cnkKKwkJICogZmlyc3QsIGxvd2VyIHRoZSBzZyBjYXBhY2l0eSB0byBvbmUgc28gdGhhdCB3ZSdsbCB0cnkKIAkJICogYW5kIG1vdmUgYWxsIHRoZSBleGNlc3MgdGFza3MgYXdheS4KIAkJICovCiAJCWlmIChwcmVmZXJfc2libGluZykKQEAgLTI0ODEsMjMgKzI1NTIsNzIgQEAKIAogCQlpZiAobG9jYWxfZ3JvdXApIHsKIAkJCXNkcy0+dGhpc19sb2FkID0gc2dzLmF2Z19sb2FkOwotCQkJc2RzLT50aGlzID0gZ3JvdXA7CisJCQlzZHMtPnRoaXMgPSBzZzsKIAkJCXNkcy0+dGhpc19ucl9ydW5uaW5nID0gc2dzLnN1bV9ucl9ydW5uaW5nOwogCQkJc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2sgPSBzZ3Muc3VtX3dlaWdodGVkX2xvYWQ7Ci0JCX0gZWxzZSBpZiAoc2dzLmF2Z19sb2FkID4gc2RzLT5tYXhfbG9hZCAmJgotCQkJICAgKHNncy5zdW1fbnJfcnVubmluZyA+IHNncy5ncm91cF9jYXBhY2l0eSB8fAotCQkJCXNncy5ncm91cF9pbWIpKSB7CisJCX0gZWxzZSBpZiAodXBkYXRlX3NkX3BpY2tfYnVzaWVzdChzZCwgc2RzLCBzZywgJnNncywgdGhpc19jcHUpKSB7CiAJCQlzZHMtPm1heF9sb2FkID0gc2dzLmF2Z19sb2FkOwotCQkJc2RzLT5idXNpZXN0ID0gZ3JvdXA7CisJCQlzZHMtPmJ1c2llc3QgPSBzZzsKIAkJCXNkcy0+YnVzaWVzdF9ucl9ydW5uaW5nID0gc2dzLnN1bV9ucl9ydW5uaW5nOwogCQkJc2RzLT5idXNpZXN0X2dyb3VwX2NhcGFjaXR5ID0gc2dzLmdyb3VwX2NhcGFjaXR5OwogCQkJc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgPSBzZ3Muc3VtX3dlaWdodGVkX2xvYWQ7CiAJCQlzZHMtPmdyb3VwX2ltYiA9IHNncy5ncm91cF9pbWI7CiAJCX0KIAotCQl1cGRhdGVfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhncm91cCwgc2RzLCBsb2NhbF9ncm91cCwgJnNncyk7Ci0JCWdyb3VwID0gZ3JvdXAtPm5leHQ7Ci0JfSB3aGlsZSAoZ3JvdXAgIT0gc2QtPmdyb3Vwcyk7CisJCXVwZGF0ZV9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKHNnLCBzZHMsIGxvY2FsX2dyb3VwLCAmc2dzKTsKKwkJc2cgPSBzZy0+bmV4dDsKKwl9IHdoaWxlIChzZyAhPSBzZC0+Z3JvdXBzKTsKK30KKworaW50IF9fd2VhayBhcmNoX3NkX3NpYmxpbmdfYXN5bV9wYWNraW5nKHZvaWQpCit7CisgICAgICAgcmV0dXJuIDAqU0RfQVNZTV9QQUNLSU5HOworfQorCisvKioKKyAqIGNoZWNrX2FzeW1fcGFja2luZyAtIENoZWNrIHRvIHNlZSBpZiB0aGUgZ3JvdXAgaXMgcGFja2VkIGludG8gdGhlCisgKgkJCXNjaGVkIGRvbWFuLgorICoKKyAqIFRoaXMgaXMgcHJpbWFyaWx5IGludGVuZGVkIHRvIHVzZWQgYXQgdGhlIHNpYmxpbmcgbGV2ZWwuICBTb21lCisgKiBjb3JlcyBsaWtlIFBPV0VSNyBwcmVmZXIgdG8gdXNlIGxvd2VyIG51bWJlcmVkIFNNVCB0aHJlYWRzLiAgSW4gdGhlCisgKiBjYXNlIG9mIFBPV0VSNywgaXQgY2FuIG1vdmUgdG8gbG93ZXIgU01UIG1vZGVzIG9ubHkgd2hlbiBoaWdoZXIKKyAqIHRocmVhZHMgYXJlIGlkbGUuICBXaGVuIGluIGxvd2VyIFNNVCBtb2RlcywgdGhlIHRocmVhZHMgd2lsbAorICogcGVyZm9ybSBiZXR0ZXIgc2luY2UgdGhleSBzaGFyZSBsZXNzIGNvcmUgcmVzb3VyY2VzLiAgSGVuY2Ugd2hlbiB3ZQorICogaGF2ZSBpZGxlIHRocmVhZHMsIHdlIHdhbnQgdGhlbSB0byBiZSB0aGUgaGlnaGVyIG9uZXMuCisgKgorICogVGhpcyBwYWNraW5nIGZ1bmN0aW9uIGlzIHJ1biBvbiBpZGxlIHRocmVhZHMuICBJdCBjaGVja3MgdG8gc2VlIGlmCisgKiB0aGUgYnVzaWVzdCBDUFUgaW4gdGhpcyBkb21haW4gKGNvcmUgaW4gdGhlIFA3IGNhc2UpIGhhcyBhIGhpZ2hlcgorICogQ1BVIG51bWJlciB0aGFuIHRoZSBwYWNraW5nIGZ1bmN0aW9uIGlzIGJlaW5nIHJ1biBvbi4gIEhlcmUgd2UgYXJlCisgKiBhc3N1bWluZyBsb3dlciBDUFUgbnVtYmVyIHdpbGwgYmUgZXF1aXZhbGVudCB0byBsb3dlciBhIFNNVCB0aHJlYWQKKyAqIG51bWJlci4KKyAqCisgKiBSZXR1cm5zIDEgd2hlbiBwYWNraW5nIGlzIHJlcXVpcmVkIGFuZCBhIHRhc2sgc2hvdWxkIGJlIG1vdmVkIHRvCisgKiB0aGlzIENQVS4gIFRoZSBhbW91bnQgb2YgdGhlIGltYmFsYW5jZSBpcyByZXR1cm5lZCBpbiAqaW1iYWxhbmNlLgorICoKKyAqIEBzZDogVGhlIHNjaGVkX2RvbWFpbiB3aG9zZSBwYWNraW5nIGlzIHRvIGJlIGNoZWNrZWQuCisgKiBAc2RzOiBTdGF0aXN0aWNzIG9mIHRoZSBzY2hlZF9kb21haW4gd2hpY2ggaXMgdG8gYmUgcGFja2VkCisgKiBAdGhpc19jcHU6IFRoZSBjcHUgYXQgd2hvc2Ugc2NoZWRfZG9tYWluIHdlJ3JlIHBlcmZvcm1pbmcgbG9hZC1iYWxhbmNlLgorICogQGltYmFsYW5jZTogcmV0dXJucyBhbW91bnQgb2YgaW1iYWxhbmNlZCBkdWUgdG8gcGFja2luZy4KKyAqLworc3RhdGljIGludCBjaGVja19hc3ltX3BhY2tpbmcoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCisJCQkgICAgICBzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywKKwkJCSAgICAgIGludCB0aGlzX2NwdSwgdW5zaWduZWQgbG9uZyAqaW1iYWxhbmNlKQoreworCWludCBidXNpZXN0X2NwdTsKKworCWlmICghKHNkLT5mbGFncyAmIFNEX0FTWU1fUEFDS0lORykpCisJCXJldHVybiAwOworCisJaWYgKCFzZHMtPmJ1c2llc3QpCisJCXJldHVybiAwOworCisJYnVzaWVzdF9jcHUgPSBncm91cF9maXJzdF9jcHUoc2RzLT5idXNpZXN0KTsKKwlpZiAodGhpc19jcHUgPiBidXNpZXN0X2NwdSkKKwkJcmV0dXJuIDA7CisKKwkqaW1iYWxhbmNlID0gRElWX1JPVU5EX0NMT1NFU1Qoc2RzLT5tYXhfbG9hZCAqIHNkcy0+YnVzaWVzdC0+Y3B1X3Bvd2VyLAorCQkJCSAgICAgICBTQ0hFRF9MT0FEX1NDQUxFKTsKKwlyZXR1cm4gMTsKIH0KIAogLyoqCkBAIC0yNjkyLDYgKzI4MTIsMTAgQEAKIAlpZiAoISgqYmFsYW5jZSkpCiAJCWdvdG8gcmV0OwogCisJaWYgKChpZGxlID09IENQVV9JRExFIHx8IGlkbGUgPT0gQ1BVX05FV0xZX0lETEUpICYmCisJICAgIGNoZWNrX2FzeW1fcGFja2luZyhzZCwgJnNkcywgdGhpc19jcHUsIGltYmFsYW5jZSkpCisJCXJldHVybiBzZHMuYnVzaWVzdDsKKwogCWlmICghc2RzLmJ1c2llc3QgfHwgc2RzLmJ1c2llc3RfbnJfcnVubmluZyA9PSAwKQogCQlnb3RvIG91dF9iYWxhbmNlZDsKIApAQCAtMjcyNiw4ICsyODUwLDkgQEAKICAqIGZpbmRfYnVzaWVzdF9xdWV1ZSAtIGZpbmQgdGhlIGJ1c2llc3QgcnVucXVldWUgYW1vbmcgdGhlIGNwdXMgaW4gZ3JvdXAuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcnEgKgotZmluZF9idXNpZXN0X3F1ZXVlKHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAotCQkgICB1bnNpZ25lZCBsb25nIGltYmFsYW5jZSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdXMpCitmaW5kX2J1c2llc3RfcXVldWUoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsCisJCSAgIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLCB1bnNpZ25lZCBsb25nIGltYmFsYW5jZSwKKwkJICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdXMpCiB7CiAJc3RydWN0IHJxICpidXNpZXN0ID0gTlVMTCwgKnJxOwogCXVuc2lnbmVkIGxvbmcgbWF4X2xvYWQgPSAwOwpAQCAtMjczOCw2ICsyODYzLDkgQEAKIAkJdW5zaWduZWQgbG9uZyBjYXBhY2l0eSA9IERJVl9ST1VORF9DTE9TRVNUKHBvd2VyLCBTQ0hFRF9MT0FEX1NDQUxFKTsKIAkJdW5zaWduZWQgbG9uZyB3bDsKIAorCQlpZiAoIWNhcGFjaXR5KQorCQkJY2FwYWNpdHkgPSBmaXhfc21hbGxfY2FwYWNpdHkoc2QsIGdyb3VwKTsKKwogCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoaSwgY3B1cykpCiAJCQljb250aW51ZTsKIApAQCAtMjc3Nyw5ICsyOTA1LDE5IEBACiAvKiBXb3JraW5nIGNwdW1hc2sgZm9yIGxvYWRfYmFsYW5jZSBhbmQgbG9hZF9iYWxhbmNlX25ld2lkbGUuICovCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoY3B1bWFza192YXJfdCwgbG9hZF9iYWxhbmNlX3RtcG1hc2spOwogCi1zdGF0aWMgaW50IG5lZWRfYWN0aXZlX2JhbGFuY2Uoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCBzZF9pZGxlLCBpbnQgaWRsZSkKK3N0YXRpYyBpbnQgbmVlZF9hY3RpdmVfYmFsYW5jZShzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IHNkX2lkbGUsIGludCBpZGxlLAorCQkJICAgICAgIGludCBidXNpZXN0X2NwdSwgaW50IHRoaXNfY3B1KQogewogCWlmIChpZGxlID09IENQVV9ORVdMWV9JRExFKSB7CisKKwkJLyoKKwkJICogQVNZTV9QQUNLSU5HIG5lZWRzIHRvIGZvcmNlIG1pZ3JhdGUgdGFza3MgZnJvbSBidXN5IGJ1dAorCQkgKiBoaWdoZXIgbnVtYmVyZWQgQ1BVcyBpbiBvcmRlciB0byBwYWNrIGFsbCB0YXNrcyBpbiB0aGUKKwkJICogbG93ZXN0IG51bWJlcmVkIENQVXMuCisJCSAqLworCQlpZiAoKHNkLT5mbGFncyAmIFNEX0FTWU1fUEFDS0lORykgJiYgYnVzaWVzdF9jcHUgPiB0aGlzX2NwdSkKKwkJCXJldHVybiAxOworCiAJCS8qCiAJCSAqIFRoZSBvbmx5IHRhc2sgcnVubmluZyBpbiBhIG5vbi1pZGxlIGNwdSBjYW4gYmUgbW92ZWQgdG8gdGhpcwogCQkgKiBjcHUgaW4gYW4gYXR0ZW1wdCB0byBjb21wbGV0ZWx5IGZyZWV1cCB0aGUgb3RoZXIgQ1BVCkBAIC0yODU0LDcgKzI5OTIsNyBAQAogCQlnb3RvIG91dF9iYWxhbmNlZDsKIAl9CiAKLQlidXNpZXN0ID0gZmluZF9idXNpZXN0X3F1ZXVlKGdyb3VwLCBpZGxlLCBpbWJhbGFuY2UsIGNwdXMpOworCWJ1c2llc3QgPSBmaW5kX2J1c2llc3RfcXVldWUoc2QsIGdyb3VwLCBpZGxlLCBpbWJhbGFuY2UsIGNwdXMpOwogCWlmICghYnVzaWVzdCkgewogCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9ub2J1c3lxW2lkbGVdKTsKIAkJZ290byBvdXRfYmFsYW5jZWQ7CkBAIC0yODk4LDcgKzMwMzYsOCBAQAogCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9mYWlsZWRbaWRsZV0pOwogCQlzZC0+bnJfYmFsYW5jZV9mYWlsZWQrKzsKIAotCQlpZiAobmVlZF9hY3RpdmVfYmFsYW5jZShzZCwgc2RfaWRsZSwgaWRsZSkpIHsKKwkJaWYgKG5lZWRfYWN0aXZlX2JhbGFuY2Uoc2QsIHNkX2lkbGUsIGlkbGUsIGNwdV9vZihidXNpZXN0KSwKKwkJCQkJdGhpc19jcHUpKSB7CiAJCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmJ1c2llc3QtPmxvY2ssIGZsYWdzKTsKIAogCQkJLyogZG9uJ3Qga2ljayB0aGUgYWN0aXZlX2xvYWRfYmFsYW5jZV9jcHVfc3RvcCwKQEAgLTMwOTMsMTMgKzMyMzIsNDAgQEAKIH0KIAogI2lmZGVmIENPTkZJR19OT19IWgorCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEsIHJlbW90ZV9zY2hlZF9zb2Z0aXJxX2NiKTsKKworc3RhdGljIHZvaWQgdHJpZ2dlcl9zY2hlZF9zb2Z0aXJxKHZvaWQgKmRhdGEpCit7CisJcmFpc2Vfc29mdGlycV9pcnFvZmYoU0NIRURfU09GVElSUSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NjaGVkX3NvZnRpcnFfY3NkKHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpjc2QpCit7CisJY3NkLT5mdW5jID0gdHJpZ2dlcl9zY2hlZF9zb2Z0aXJxOworCWNzZC0+aW5mbyA9IE5VTEw7CisJY3NkLT5mbGFncyA9IDA7CisJY3NkLT5wcml2ID0gMDsKK30KKworLyoKKyAqIGlkbGUgbG9hZCBiYWxhbmNpbmcgZGV0YWlscworICogLSBPbmUgb2YgdGhlIGlkbGUgQ1BVcyBub21pbmF0ZXMgaXRzZWxmIGFzIGlkbGUgbG9hZF9iYWxhbmNlciwgd2hpbGUKKyAqICAgZW50ZXJpbmcgaWRsZS4KKyAqIC0gVGhpcyBpZGxlIGxvYWQgYmFsYW5jZXIgQ1BVIHdpbGwgYWxzbyBnbyBpbnRvIHRpY2tsZXNzIG1vZGUgd2hlbgorICogICBpdCBpcyBpZGxlLCBqdXN0IGxpa2UgYWxsIG90aGVyIGlkbGUgQ1BVcworICogLSBXaGVuIG9uZSBvZiB0aGUgYnVzeSBDUFVzIG5vdGljZSB0aGF0IHRoZXJlIG1heSBiZSBhbiBpZGxlIHJlYmFsYW5jaW5nCisgKiAgIG5lZWRlZCwgdGhleSB3aWxsIGtpY2sgdGhlIGlkbGUgbG9hZCBiYWxhbmNlciwgd2hpY2ggdGhlbiBkb2VzIGlkbGUKKyAqICAgbG9hZCBiYWxhbmNpbmcgZm9yIGFsbCB0aGUgaWRsZSBDUFVzLgorICovCiBzdGF0aWMgc3RydWN0IHsKIAlhdG9taWNfdCBsb2FkX2JhbGFuY2VyOwotCWNwdW1hc2tfdmFyX3QgY3B1X21hc2s7Ci0JY3B1bWFza192YXJfdCBpbGJfZ3JwX25vaHpfbWFzazsKLX0gbm9oeiBfX19fY2FjaGVsaW5lX2FsaWduZWQgPSB7Ci0JLmxvYWRfYmFsYW5jZXIgPSBBVE9NSUNfSU5JVCgtMSksCi19OworCWF0b21pY190IGZpcnN0X3BpY2tfY3B1OworCWF0b21pY190IHNlY29uZF9waWNrX2NwdTsKKwljcHVtYXNrX3Zhcl90IGlkbGVfY3B1c19tYXNrOworCWNwdW1hc2tfdmFyX3QgZ3JwX2lkbGVfbWFzazsKKwl1bnNpZ25lZCBsb25nIG5leHRfYmFsYW5jZTsgICAgIC8qIGluIGppZmZ5IHVuaXRzICovCit9IG5vaHogX19fX2NhY2hlbGluZV9hbGlnbmVkOwogCiBpbnQgZ2V0X25vaHpfbG9hZF9iYWxhbmNlcih2b2lkKQogewpAQCAtMzE1MywxNyArMzMxOSwxNyBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBpc19zZW1pX2lkbGVfZ3JvdXAoc3RydWN0IHNjaGVkX2dyb3VwICppbGJfZ3JvdXApCiB7Ci0JY3B1bWFza19hbmQobm9oei5pbGJfZ3JwX25vaHpfbWFzaywgbm9oei5jcHVfbWFzaywKKwljcHVtYXNrX2FuZChub2h6LmdycF9pZGxlX21hc2ssIG5vaHouaWRsZV9jcHVzX21hc2ssCiAJCQkJCXNjaGVkX2dyb3VwX2NwdXMoaWxiX2dyb3VwKSk7CiAKIAkvKgogCSAqIEEgc2NoZWRfZ3JvdXAgaXMgc2VtaS1pZGxlIHdoZW4gaXQgaGFzIGF0bGVhc3Qgb25lIGJ1c3kgY3B1CiAJICogYW5kIGF0bGVhc3Qgb25lIGlkbGUgY3B1LgogCSAqLwotCWlmIChjcHVtYXNrX2VtcHR5KG5vaHouaWxiX2dycF9ub2h6X21hc2spKQorCWlmIChjcHVtYXNrX2VtcHR5KG5vaHouZ3JwX2lkbGVfbWFzaykpCiAJCXJldHVybiAwOwogCi0JaWYgKGNwdW1hc2tfZXF1YWwobm9oei5pbGJfZ3JwX25vaHpfbWFzaywgc2NoZWRfZ3JvdXBfY3B1cyhpbGJfZ3JvdXApKSkKKwlpZiAoY3B1bWFza19lcXVhbChub2h6LmdycF9pZGxlX21hc2ssIHNjaGVkX2dyb3VwX2NwdXMoaWxiX2dyb3VwKSkpCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIDE7CkBAIC0zMTk2LDcgKzMzNjIsNyBAQAogCSAqIE9wdGltaXplIGZvciB0aGUgY2FzZSB3aGVuIHdlIGhhdmUgbm8gaWRsZSBDUFVzIG9yIG9ubHkgb25lCiAJICogaWRsZSBDUFUuIERvbid0IHdhbGsgdGhlIHNjaGVkX2RvbWFpbiBoaWVyYXJjaHkgaW4gc3VjaCBjYXNlcwogCSAqLwotCWlmIChjcHVtYXNrX3dlaWdodChub2h6LmNwdV9tYXNrKSA8IDIpCisJaWYgKGNwdW1hc2tfd2VpZ2h0KG5vaHouaWRsZV9jcHVzX21hc2spIDwgMikKIAkJZ290byBvdXRfZG9uZTsKIAogCWZvcl9lYWNoX2ZsYWdfZG9tYWluKGNwdSwgc2QsIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSB7CkBAIC0zMjA0LDcgKzMzNzAsNyBAQAogCiAJCWRvIHsKIAkJCWlmIChpc19zZW1pX2lkbGVfZ3JvdXAoaWxiX2dyb3VwKSkKLQkJCQlyZXR1cm4gY3B1bWFza19maXJzdChub2h6LmlsYl9ncnBfbm9oel9tYXNrKTsKKwkJCQlyZXR1cm4gY3B1bWFza19maXJzdChub2h6LmdycF9pZGxlX21hc2spOwogCiAJCQlpbGJfZ3JvdXAgPSBpbGJfZ3JvdXAtPm5leHQ7CiAKQEAgLTMyMTIsOTggKzMzNzgsMTE2IEBACiAJfQogCiBvdXRfZG9uZToKLQlyZXR1cm4gY3B1bWFza19maXJzdChub2h6LmNwdV9tYXNrKTsKKwlyZXR1cm4gbnJfY3B1X2lkczsKIH0KICNlbHNlIC8qICAoQ09ORklHX1NDSEVEX01DIHx8IENPTkZJR19TQ0hFRF9TTVQpICovCiBzdGF0aWMgaW5saW5lIGludCBmaW5kX25ld19pbGIoaW50IGNhbGxfY3B1KQogewotCXJldHVybiBjcHVtYXNrX2ZpcnN0KG5vaHouY3B1X21hc2spOworCXJldHVybiBucl9jcHVfaWRzOwogfQogI2VuZGlmCiAKIC8qCisgKiBLaWNrIGEgQ1BVIHRvIGRvIHRoZSBub2h6IGJhbGFuY2luZywgaWYgaXQgaXMgdGltZSBmb3IgaXQuIFdlIHBpY2sgdGhlCisgKiBub2h6X2xvYWRfYmFsYW5jZXIgQ1BVIChpZiB0aGVyZSBpcyBvbmUpIG90aGVyd2lzZSBmYWxsYmFjayB0byBhbnkgaWRsZQorICogQ1BVIChpZiB0aGVyZSBpcyBvbmUpLgorICovCitzdGF0aWMgdm9pZCBub2h6X2JhbGFuY2VyX2tpY2soaW50IGNwdSkKK3sKKwlpbnQgaWxiX2NwdTsKKworCW5vaHoubmV4dF9iYWxhbmNlKys7CisKKwlpbGJfY3B1ID0gZ2V0X25vaHpfbG9hZF9iYWxhbmNlcigpOworCisJaWYgKGlsYl9jcHUgPj0gbnJfY3B1X2lkcykgeworCQlpbGJfY3B1ID0gY3B1bWFza19maXJzdChub2h6LmlkbGVfY3B1c19tYXNrKTsKKwkJaWYgKGlsYl9jcHUgPj0gbnJfY3B1X2lkcykKKwkJCXJldHVybjsKKwl9CisKKwlpZiAoIWNwdV9ycShpbGJfY3B1KS0+bm9oel9iYWxhbmNlX2tpY2spIHsKKwkJc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmNwOworCisJCWNwdV9ycShpbGJfY3B1KS0+bm9oel9iYWxhbmNlX2tpY2sgPSAxOworCQljcCA9ICZwZXJfY3B1KHJlbW90ZV9zY2hlZF9zb2Z0aXJxX2NiLCBjcHUpOworCQlfX3NtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShpbGJfY3B1LCBjcCwgMCk7CisJfQorCXJldHVybjsKK30KKworLyoKICAqIFRoaXMgcm91dGluZSB3aWxsIHRyeSB0byBub21pbmF0ZSB0aGUgaWxiIChpZGxlIGxvYWQgYmFsYW5jaW5nKQogICogb3duZXIgYW1vbmcgdGhlIGNwdXMgd2hvc2UgdGlja3MgYXJlIHN0b3BwZWQuIGlsYiBvd25lciB3aWxsIGRvIHRoZSBpZGxlCi0gKiBsb2FkIGJhbGFuY2luZyBvbiBiZWhhbGYgb2YgYWxsIHRob3NlIGNwdXMuIElmIGFsbCB0aGUgY3B1cyBpbiB0aGUgc3lzdGVtCi0gKiBnbyBpbnRvIHRoaXMgdGlja2xlc3MgbW9kZSwgdGhlbiB0aGVyZSB3aWxsIGJlIG5vIGlsYiBvd25lciAoYXMgdGhlcmUgaXMKLSAqIG5vIG5lZWQgZm9yIG9uZSkgYW5kIGFsbCB0aGUgY3B1cyB3aWxsIHNsZWVwIHRpbGwgdGhlIG5leHQgd2FrZXVwIGV2ZW50Ci0gKiBhcnJpdmVzLi4uCisgKiBsb2FkIGJhbGFuY2luZyBvbiBiZWhhbGYgb2YgYWxsIHRob3NlIGNwdXMuCiAgKgotICogRm9yIHRoZSBpbGIgb3duZXIsIHRpY2sgaXMgbm90IHN0b3BwZWQuIEFuZCB0aGlzIHRpY2sgd2lsbCBiZSB1c2VkCi0gKiBmb3IgaWRsZSBsb2FkIGJhbGFuY2luZy4gaWxiIG93bmVyIHdpbGwgc3RpbGwgYmUgcGFydCBvZgotICogbm9oei5jcHVfbWFzay4uCisgKiBXaGVuIHRoZSBpbGIgb3duZXIgYmVjb21lcyBidXN5LCB3ZSB3aWxsIG5vdCBoYXZlIG5ldyBpbGIgb3duZXIgdW50aWwgc29tZQorICogaWRsZSBDUFUgd2FrZXMgdXAgYW5kIGdvZXMgYmFjayB0byBpZGxlIG9yIHNvbWUgYnVzeSBDUFUgdHJpZXMgdG8ga2ljaworICogaWRsZSBsb2FkIGJhbGFuY2luZyBieSBraWNraW5nIG9uZSBvZiB0aGUgaWRsZSBDUFVzLgogICoKLSAqIFdoaWxlIHN0b3BwaW5nIHRoZSB0aWNrLCB0aGlzIGNwdSB3aWxsIGJlY29tZSB0aGUgaWxiIG93bmVyIGlmIHRoZXJlCi0gKiBpcyBubyBvdGhlciBvd25lci4gQW5kIHdpbGwgYmUgdGhlIG93bmVyIHRpbGwgdGhhdCBjcHUgYmVjb21lcyBidXN5Ci0gKiBvciBpZiBhbGwgY3B1cyBpbiB0aGUgc3lzdGVtIHN0b3AgdGhlaXIgdGlja3MgYXQgd2hpY2ggcG9pbnQKLSAqIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGlsYiBvd25lci4KLSAqCi0gKiBXaGVuIHRoZSBpbGIgb3duZXIgYmVjb21lcyBidXN5LCBpdCBub21pbmF0ZXMgYW5vdGhlciBvd25lciwgZHVyaW5nIHRoZQotICogbmV4dCBidXN5IHNjaGVkdWxlcl90aWNrKCkKKyAqIFRpY2tzIGFyZSBzdG9wcGVkIGZvciB0aGUgaWxiIG93bmVyIGFzIHdlbGwsIHdpdGggYnVzeSBDUFUga2lja2luZyB0aGlzCisgKiBpbGIgb3duZXIgQ1BVIGluIGZ1dHVyZSAod2hlbiB0aGVyZSBpcyBhIG5lZWQgZm9yIGlkbGUgbG9hZCBiYWxhbmNpbmcgb24KKyAqIGJlaGFsZiBvZiBhbGwgaWRsZSBDUFVzKS4KICAqLwotaW50IHNlbGVjdF9ub2h6X2xvYWRfYmFsYW5jZXIoaW50IHN0b3BfdGljaykKK3ZvaWQgc2VsZWN0X25vaHpfbG9hZF9iYWxhbmNlcihpbnQgc3RvcF90aWNrKQogewogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAlpZiAoc3RvcF90aWNrKSB7Ci0JCWNwdV9ycShjcHUpLT5pbl9ub2h6X3JlY2VudGx5ID0gMTsKLQogCQlpZiAoIWNwdV9hY3RpdmUoY3B1KSkgewogCQkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpICE9IGNwdSkKLQkJCQlyZXR1cm4gMDsKKwkJCQlyZXR1cm47CiAKIAkJCS8qCiAJCQkgKiBJZiB3ZSBhcmUgZ29pbmcgb2ZmbGluZSBhbmQgc3RpbGwgdGhlIGxlYWRlciwKIAkJCSAqIGdpdmUgdXAhCiAJCQkgKi8KLQkJCWlmIChhdG9taWNfY21weGNoZygmbm9oei5sb2FkX2JhbGFuY2VyLCBjcHUsIC0xKSAhPSBjcHUpCisJCQlpZiAoYXRvbWljX2NtcHhjaGcoJm5vaHoubG9hZF9iYWxhbmNlciwgY3B1LAorCQkJCQkgICBucl9jcHVfaWRzKSAhPSBjcHUpCiAJCQkJQlVHKCk7CiAKLQkJCXJldHVybiAwOworCQkJcmV0dXJuOwogCQl9CiAKLQkJY3B1bWFza19zZXRfY3B1KGNwdSwgbm9oei5jcHVfbWFzayk7CisJCWNwdW1hc2tfc2V0X2NwdShjcHUsIG5vaHouaWRsZV9jcHVzX21hc2spOwogCi0JCS8qIHRpbWUgZm9yIGlsYiBvd25lciBhbHNvIHRvIHNsZWVwICovCi0JCWlmIChjcHVtYXNrX3dlaWdodChub2h6LmNwdV9tYXNrKSA9PSBudW1fYWN0aXZlX2NwdXMoKSkgewotCQkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IGNwdSkKLQkJCQlhdG9taWNfc2V0KCZub2h6LmxvYWRfYmFsYW5jZXIsIC0xKTsKLQkJCXJldHVybiAwOwotCQl9CisJCWlmIChhdG9taWNfcmVhZCgmbm9oei5maXJzdF9waWNrX2NwdSkgPT0gY3B1KQorCQkJYXRvbWljX2NtcHhjaGcoJm5vaHouZmlyc3RfcGlja19jcHUsIGNwdSwgbnJfY3B1X2lkcyk7CisJCWlmIChhdG9taWNfcmVhZCgmbm9oei5zZWNvbmRfcGlja19jcHUpID09IGNwdSkKKwkJCWF0b21pY19jbXB4Y2hnKCZub2h6LnNlY29uZF9waWNrX2NwdSwgY3B1LCBucl9jcHVfaWRzKTsKIAotCQlpZiAoYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gLTEpIHsKLQkJCS8qIG1ha2UgbWUgdGhlIGlsYiBvd25lciAqLwotCQkJaWYgKGF0b21pY19jbXB4Y2hnKCZub2h6LmxvYWRfYmFsYW5jZXIsIC0xLCBjcHUpID09IC0xKQotCQkJCXJldHVybiAxOwotCQl9IGVsc2UgaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IGNwdSkgeworCQlpZiAoYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPj0gbnJfY3B1X2lkcykgewogCQkJaW50IG5ld19pbGI7CiAKLQkJCWlmICghKHNjaGVkX3NtdF9wb3dlcl9zYXZpbmdzIHx8Ci0JCQkJCQlzY2hlZF9tY19wb3dlcl9zYXZpbmdzKSkKLQkJCQlyZXR1cm4gMTsKKwkJCS8qIG1ha2UgbWUgdGhlIGlsYiBvd25lciAqLworCQkJaWYgKGF0b21pY19jbXB4Y2hnKCZub2h6LmxvYWRfYmFsYW5jZXIsIG5yX2NwdV9pZHMsCisJCQkJCSAgIGNwdSkgIT0gbnJfY3B1X2lkcykKKwkJCQlyZXR1cm47CisKIAkJCS8qCiAJCQkgKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYSBtb3JlIHBvd2VyLWVmZmljaWVudAogCQkJICogaWxiLgogCQkJICovCiAJCQluZXdfaWxiID0gZmluZF9uZXdfaWxiKGNwdSk7CiAJCQlpZiAobmV3X2lsYiA8IG5yX2NwdV9pZHMgJiYgbmV3X2lsYiAhPSBjcHUpIHsKLQkJCQlhdG9taWNfc2V0KCZub2h6LmxvYWRfYmFsYW5jZXIsIC0xKTsKKwkJCQlhdG9taWNfc2V0KCZub2h6LmxvYWRfYmFsYW5jZXIsIG5yX2NwdV9pZHMpOwogCQkJCXJlc2NoZWRfY3B1KG5ld19pbGIpOwotCQkJCXJldHVybiAwOworCQkJCXJldHVybjsKIAkJCX0KLQkJCXJldHVybiAxOworCQkJcmV0dXJuOwogCQl9CiAJfSBlbHNlIHsKLQkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgbm9oei5jcHVfbWFzaykpCi0JCQlyZXR1cm4gMDsKKwkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgbm9oei5pZGxlX2NwdXNfbWFzaykpCisJCQlyZXR1cm47CiAKLQkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBub2h6LmNwdV9tYXNrKTsKKwkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBub2h6LmlkbGVfY3B1c19tYXNrKTsKIAogCQlpZiAoYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gY3B1KQotCQkJaWYgKGF0b21pY19jbXB4Y2hnKCZub2h6LmxvYWRfYmFsYW5jZXIsIGNwdSwgLTEpICE9IGNwdSkKKwkJCWlmIChhdG9taWNfY21weGNoZygmbm9oei5sb2FkX2JhbGFuY2VyLCBjcHUsCisJCQkJCSAgIG5yX2NwdV9pZHMpICE9IGNwdSkKIAkJCQlCVUcoKTsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuOwogfQogI2VuZGlmCiAKQEAgLTMzODUsMTAgKzM1NjksMTAxIEBACiAJCXJxLT5uZXh0X2JhbGFuY2UgPSBuZXh0X2JhbGFuY2U7CiB9CiAKKyNpZmRlZiBDT05GSUdfTk9fSFoKKy8qCisgKiBJbiBDT05GSUdfTk9fSFogY2FzZSwgdGhlIGlkbGUgYmFsYW5jZSBraWNrZWUgd2lsbCBkbyB0aGUKKyAqIHJlYmFsYW5jaW5nIGZvciBhbGwgdGhlIGNwdXMgZm9yIHdob20gc2NoZWR1bGVyIHRpY2tzIGFyZSBzdG9wcGVkLgorICovCitzdGF0aWMgdm9pZCBub2h6X2lkbGVfYmFsYW5jZShpbnQgdGhpc19jcHUsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKQoreworCXN0cnVjdCBycSAqdGhpc19ycSA9IGNwdV9ycSh0aGlzX2NwdSk7CisJc3RydWN0IHJxICpycTsKKwlpbnQgYmFsYW5jZV9jcHU7CisKKwlpZiAoaWRsZSAhPSBDUFVfSURMRSB8fCAhdGhpc19ycS0+bm9oel9iYWxhbmNlX2tpY2spCisJCXJldHVybjsKKworCWZvcl9lYWNoX2NwdShiYWxhbmNlX2NwdSwgbm9oei5pZGxlX2NwdXNfbWFzaykgeworCQlpZiAoYmFsYW5jZV9jcHUgPT0gdGhpc19jcHUpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBJZiB0aGlzIGNwdSBnZXRzIHdvcmsgdG8gZG8sIHN0b3AgdGhlIGxvYWQgYmFsYW5jaW5nCisJCSAqIHdvcmsgYmVpbmcgZG9uZSBmb3Igb3RoZXIgY3B1cy4gTmV4dCBsb2FkCisJCSAqIGJhbGFuY2luZyBvd25lciB3aWxsIHBpY2sgaXQgdXAuCisJCSAqLworCQlpZiAobmVlZF9yZXNjaGVkKCkpIHsKKwkJCXRoaXNfcnEtPm5vaHpfYmFsYW5jZV9raWNrID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJcmF3X3NwaW5fbG9ja19pcnEoJnRoaXNfcnEtPmxvY2spOworCQl1cGRhdGVfcnFfY2xvY2sodGhpc19ycSk7CisJCXVwZGF0ZV9jcHVfbG9hZCh0aGlzX3JxKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycSgmdGhpc19ycS0+bG9jayk7CisKKwkJcmViYWxhbmNlX2RvbWFpbnMoYmFsYW5jZV9jcHUsIENQVV9JRExFKTsKKworCQlycSA9IGNwdV9ycShiYWxhbmNlX2NwdSk7CisJCWlmICh0aW1lX2FmdGVyKHRoaXNfcnEtPm5leHRfYmFsYW5jZSwgcnEtPm5leHRfYmFsYW5jZSkpCisJCQl0aGlzX3JxLT5uZXh0X2JhbGFuY2UgPSBycS0+bmV4dF9iYWxhbmNlOworCX0KKwlub2h6Lm5leHRfYmFsYW5jZSA9IHRoaXNfcnEtPm5leHRfYmFsYW5jZTsKKwl0aGlzX3JxLT5ub2h6X2JhbGFuY2Vfa2ljayA9IDA7Cit9CisKKy8qCisgKiBDdXJyZW50IGhldXJpc3RpYyBmb3Iga2lja2luZyB0aGUgaWRsZSBsb2FkIGJhbGFuY2VyCisgKiAtIGZpcnN0X3BpY2tfY3B1IGlzIHRoZSBvbmUgb2YgdGhlIGJ1c3kgQ1BVcy4gSXQgd2lsbCBraWNrCisgKiAgIGlkbGUgbG9hZCBiYWxhbmNlciB3aGVuIGl0IGhhcyBtb3JlIHRoYW4gb25lIHByb2Nlc3MgYWN0aXZlLiBUaGlzCisgKiAgIGVsaW1pbmF0ZXMgdGhlIG5lZWQgZm9yIGlkbGUgbG9hZCBiYWxhbmNpbmcgYWx0b2dldGhlciB3aGVuIHdlIGhhdmUKKyAqICAgb25seSBvbmUgcnVubmluZyBwcm9jZXNzIGluIHRoZSBzeXN0ZW0gKGNvbW1vbiBjYXNlKS4KKyAqIC0gSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgYnVzeSBDUFUsIGlkbGUgbG9hZCBiYWxhbmNlciBtYXkgaGF2ZQorICogICB0byBydW4gZm9yIGFjdGl2ZV9sb2FkX2JhbGFuY2UgdG8gaGFwcGVuIChpLmUuLCB0d28gYnVzeSBDUFVzIGFyZQorICogICBTTVQgb3IgY29yZSBzaWJsaW5ncyBhbmQgY2FuIHJ1biBiZXR0ZXIgaWYgdGhleSBtb3ZlIHRvIGRpZmZlcmVudAorICogICBwaHlzaWNhbCBDUFVzKS4gU28sIHNlY29uZF9waWNrX2NwdSBpcyB0aGUgc2Vjb25kIG9mIHRoZSBidXN5IENQVXMKKyAqICAgd2hpY2ggd2lsbCBraWNrIGlkbGUgbG9hZCBiYWxhbmNlciBhcyBzb29uIGFzIGl0IGhhcyBhbnkgbG9hZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbm9oel9raWNrX25lZWRlZChzdHJ1Y3QgcnEgKnJxLCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKKwlpbnQgcmV0OworCWludCBmaXJzdF9waWNrX2NwdSwgc2Vjb25kX3BpY2tfY3B1OworCisJaWYgKHRpbWVfYmVmb3JlKG5vdywgbm9oei5uZXh0X2JhbGFuY2UpKQorCQlyZXR1cm4gMDsKKworCWlmICghcnEtPm5yX3J1bm5pbmcpCisJCXJldHVybiAwOworCisJZmlyc3RfcGlja19jcHUgPSBhdG9taWNfcmVhZCgmbm9oei5maXJzdF9waWNrX2NwdSk7CisJc2Vjb25kX3BpY2tfY3B1ID0gYXRvbWljX3JlYWQoJm5vaHouc2Vjb25kX3BpY2tfY3B1KTsKKworCWlmIChmaXJzdF9waWNrX2NwdSA8IG5yX2NwdV9pZHMgJiYgZmlyc3RfcGlja19jcHUgIT0gY3B1ICYmCisJICAgIHNlY29uZF9waWNrX2NwdSA8IG5yX2NwdV9pZHMgJiYgc2Vjb25kX3BpY2tfY3B1ICE9IGNwdSkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBhdG9taWNfY21weGNoZygmbm9oei5maXJzdF9waWNrX2NwdSwgbnJfY3B1X2lkcywgY3B1KTsKKwlpZiAocmV0ID09IG5yX2NwdV9pZHMgfHwgcmV0ID09IGNwdSkgeworCQlhdG9taWNfY21weGNoZygmbm9oei5zZWNvbmRfcGlja19jcHUsIGNwdSwgbnJfY3B1X2lkcyk7CisJCWlmIChycS0+bnJfcnVubmluZyA+IDEpCisJCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQlyZXQgPSBhdG9taWNfY21weGNoZygmbm9oei5zZWNvbmRfcGlja19jcHUsIG5yX2NwdV9pZHMsIGNwdSk7CisJCWlmIChyZXQgPT0gbnJfY3B1X2lkcyB8fCByZXQgPT0gY3B1KSB7CisJCQlpZiAocnEtPm5yX3J1bm5pbmcpCisJCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgbm9oel9pZGxlX2JhbGFuY2UoaW50IHRoaXNfY3B1LCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSkgeyB9CisjZW5kaWYKKwogLyoKICAqIHJ1bl9yZWJhbGFuY2VfZG9tYWlucyBpcyB0cmlnZ2VyZWQgd2hlbiBuZWVkZWQgZnJvbSB0aGUgc2NoZWR1bGVyIHRpY2suCi0gKiBJbiBDT05GSUdfTk9fSFogY2FzZSwgdGhlIGlkbGUgbG9hZCBiYWxhbmNlIG93bmVyIHdpbGwgZG8gdGhlCi0gKiByZWJhbGFuY2luZyBmb3IgYWxsIHRoZSBjcHVzIGZvciB3aG9tIHNjaGVkdWxlciB0aWNrcyBhcmUgc3RvcHBlZC4KKyAqIEFsc28gdHJpZ2dlcmVkIGZvciBub2h6IGlkbGUgYmFsYW5jaW5nICh3aXRoIG5vaHpfYmFsYW5jaW5nX2tpY2sgc2V0KS4KICAqLwogc3RhdGljIHZvaWQgcnVuX3JlYmFsYW5jZV9kb21haW5zKHN0cnVjdCBzb2Z0aXJxX2FjdGlvbiAqaCkKIHsKQEAgLTMzOTksMzcgKzM2NzQsMTIgQEAKIAogCXJlYmFsYW5jZV9kb21haW5zKHRoaXNfY3B1LCBpZGxlKTsKIAotI2lmZGVmIENPTkZJR19OT19IWgogCS8qCi0JICogSWYgdGhpcyBjcHUgaXMgdGhlIG93bmVyIGZvciBpZGxlIGxvYWQgYmFsYW5jaW5nLCB0aGVuIGRvIHRoZQorCSAqIElmIHRoaXMgY3B1IGhhcyBhIHBlbmRpbmcgbm9oel9iYWxhbmNlX2tpY2ssIHRoZW4gZG8gdGhlCiAJICogYmFsYW5jaW5nIG9uIGJlaGFsZiBvZiB0aGUgb3RoZXIgaWRsZSBjcHVzIHdob3NlIHRpY2tzIGFyZQogCSAqIHN0b3BwZWQuCiAJICovCi0JaWYgKHRoaXNfcnEtPmlkbGVfYXRfdGljayAmJgotCSAgICBhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSB0aGlzX2NwdSkgewotCQlzdHJ1Y3QgcnEgKnJxOwotCQlpbnQgYmFsYW5jZV9jcHU7Ci0KLQkJZm9yX2VhY2hfY3B1KGJhbGFuY2VfY3B1LCBub2h6LmNwdV9tYXNrKSB7Ci0JCQlpZiAoYmFsYW5jZV9jcHUgPT0gdGhpc19jcHUpCi0JCQkJY29udGludWU7Ci0KLQkJCS8qCi0JCQkgKiBJZiB0aGlzIGNwdSBnZXRzIHdvcmsgdG8gZG8sIHN0b3AgdGhlIGxvYWQgYmFsYW5jaW5nCi0JCQkgKiB3b3JrIGJlaW5nIGRvbmUgZm9yIG90aGVyIGNwdXMuIE5leHQgbG9hZAotCQkJICogYmFsYW5jaW5nIG93bmVyIHdpbGwgcGljayBpdCB1cC4KLQkJCSAqLwotCQkJaWYgKG5lZWRfcmVzY2hlZCgpKQotCQkJCWJyZWFrOwotCi0JCQlyZWJhbGFuY2VfZG9tYWlucyhiYWxhbmNlX2NwdSwgQ1BVX0lETEUpOwotCi0JCQlycSA9IGNwdV9ycShiYWxhbmNlX2NwdSk7Ci0JCQlpZiAodGltZV9hZnRlcih0aGlzX3JxLT5uZXh0X2JhbGFuY2UsIHJxLT5uZXh0X2JhbGFuY2UpKQotCQkJCXRoaXNfcnEtPm5leHRfYmFsYW5jZSA9IHJxLT5uZXh0X2JhbGFuY2U7Ci0JCX0KLQl9Ci0jZW5kaWYKKwlub2h6X2lkbGVfYmFsYW5jZSh0aGlzX2NwdSwgaWRsZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IG9uX251bGxfZG9tYWluKGludCBjcHUpCkBAIC0zNDM5LDU3ICszNjg5LDE3IEBACiAKIC8qCiAgKiBUcmlnZ2VyIHRoZSBTQ0hFRF9TT0ZUSVJRIGlmIGl0IGlzIHRpbWUgdG8gZG8gcGVyaW9kaWMgbG9hZCBiYWxhbmNpbmcuCi0gKgotICogSW4gY2FzZSBvZiBDT05GSUdfTk9fSFosIHRoaXMgaXMgdGhlIHBsYWNlIHdoZXJlIHdlIG5vbWluYXRlIGEgbmV3Ci0gKiBpZGxlIGxvYWQgYmFsYW5jaW5nIG93bmVyIG9yIGRlY2lkZSB0byBzdG9wIHRoZSBwZXJpb2RpYyBsb2FkIGJhbGFuY2luZywKLSAqIGlmIHRoZSB3aG9sZSBzeXN0ZW0gaXMgaWRsZS4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIHRyaWdnZXJfbG9hZF9iYWxhbmNlKHN0cnVjdCBycSAqcnEsIGludCBjcHUpCiB7Ci0jaWZkZWYgQ09ORklHX05PX0haCi0JLyoKLQkgKiBJZiB3ZSB3ZXJlIGluIHRoZSBub2h6IG1vZGUgcmVjZW50bHkgYW5kIGJ1c3kgYXQgdGhlIGN1cnJlbnQKLQkgKiBzY2hlZHVsZXIgdGljaywgdGhlbiBjaGVjayBpZiB3ZSBuZWVkIHRvIG5vbWluYXRlIG5ldyBpZGxlCi0JICogbG9hZCBiYWxhbmNlci4KLQkgKi8KLQlpZiAocnEtPmluX25vaHpfcmVjZW50bHkgJiYgIXJxLT5pZGxlX2F0X3RpY2spIHsKLQkJcnEtPmluX25vaHpfcmVjZW50bHkgPSAwOwotCi0JCWlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSBjcHUpIHsKLQkJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbm9oei5jcHVfbWFzayk7Ci0JCQlhdG9taWNfc2V0KCZub2h6LmxvYWRfYmFsYW5jZXIsIC0xKTsKLQkJfQotCi0JCWlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSAtMSkgewotCQkJaW50IGlsYiA9IGZpbmRfbmV3X2lsYihjcHUpOwotCi0JCQlpZiAoaWxiIDwgbnJfY3B1X2lkcykKLQkJCQlyZXNjaGVkX2NwdShpbGIpOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBJZiB0aGlzIGNwdSBpcyBpZGxlIGFuZCBkb2luZyBpZGxlIGxvYWQgYmFsYW5jaW5nIGZvciBhbGwgdGhlCi0JICogY3B1cyB3aXRoIHRpY2tzIHN0b3BwZWQsIGlzIGl0IHRpbWUgZm9yIHRoYXQgdG8gc3RvcD8KLQkgKi8KLQlpZiAocnEtPmlkbGVfYXRfdGljayAmJiBhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSBjcHUgJiYKLQkgICAgY3B1bWFza193ZWlnaHQobm9oei5jcHVfbWFzaykgPT0gbnVtX29ubGluZV9jcHVzKCkpIHsKLQkJcmVzY2hlZF9jcHUoY3B1KTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogSWYgdGhpcyBjcHUgaXMgaWRsZSBhbmQgdGhlIGlkbGUgbG9hZCBiYWxhbmNpbmcgaXMgZG9uZSBieQotCSAqIHNvbWVvbmUgZWxzZSwgdGhlbiBubyBuZWVkIHJhaXNlIHRoZSBTQ0hFRF9TT0ZUSVJRCi0JICovCi0JaWYgKHJxLT5pZGxlX2F0X3RpY2sgJiYgYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgIT0gY3B1ICYmCi0JICAgIGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBub2h6LmNwdV9tYXNrKSkKLQkJcmV0dXJuOwotI2VuZGlmCiAJLyogRG9uJ3QgbmVlZCB0byByZWJhbGFuY2Ugd2hpbGUgYXR0YWNoZWQgdG8gTlVMTCBkb21haW4gKi8KIAlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBycS0+bmV4dF9iYWxhbmNlKSAmJgogCSAgICBsaWtlbHkoIW9uX251bGxfZG9tYWluKGNwdSkpKQogCQlyYWlzZV9zb2Z0aXJxKFNDSEVEX1NPRlRJUlEpOworI2lmZGVmIENPTkZJR19OT19IWgorCWVsc2UgaWYgKG5vaHpfa2lja19uZWVkZWQocnEsIGNwdSkgJiYgbGlrZWx5KCFvbl9udWxsX2RvbWFpbihjcHUpKSkKKwkJbm9oel9iYWxhbmNlcl9raWNrKGNwdSk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgcnFfb25saW5lX2ZhaXIoc3RydWN0IHJxICpycSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9ydC5jIGIva2VybmVsL3NjaGVkX3J0LmMKaW5kZXggOGFmYjk1My4uZDEwYzgwZSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX3J0LmMKKysrIGIva2VybmVsL3NjaGVkX3J0LmMKQEAgLTE2NjMsOSArMTY2Myw2IEBACiB7CiAJdW5zaWduZWQgbG9uZyBzb2Z0LCBoYXJkOwogCi0JaWYgKCFwLT5zaWduYWwpCi0JCXJldHVybjsKLQogCS8qIG1heCBtYXkgY2hhbmdlIGFmdGVyIGN1ciB3YXMgcmVhZCwgdGhpcyB3aWxsIGJlIGZpeGVkIG5leHQgdGljayAqLwogCXNvZnQgPSB0YXNrX3JsaW1pdChwLCBSTElNSVRfUlRUSU1FKTsKIAloYXJkID0gdGFza19ybGltaXRfbWF4KHAsIFJMSU1JVF9SVFRJTUUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX3N0YXRzLmggYi9rZXJuZWwvc2NoZWRfc3RhdHMuaAppbmRleCAzMmQyYmQ0Li4yNWMyZjk2IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfc3RhdHMuaAorKysgYi9rZXJuZWwvc2NoZWRfc3RhdHMuaApAQCAtMjk1LDEzICsyOTUsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfZ3JvdXBfdXNlcl90aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAogCQkJCQkgICBjcHV0aW1lX3QgY3B1dGltZSkKIHsKLQlzdHJ1Y3QgdGhyZWFkX2dyb3VwX2NwdXRpbWVyICpjcHV0aW1lcjsKLQotCS8qIHRzayA9PSBjdXJyZW50LCBlbnN1cmUgaXQgaXMgc2FmZSB0byB1c2UgLT5zaWduYWwgKi8KLQlpZiAodW5saWtlbHkodHNrLT5leGl0X3N0YXRlKSkKLQkJcmV0dXJuOwotCi0JY3B1dGltZXIgPSAmdHNrLT5zaWduYWwtPmNwdXRpbWVyOworCXN0cnVjdCB0aHJlYWRfZ3JvdXBfY3B1dGltZXIgKmNwdXRpbWVyID0gJnRzay0+c2lnbmFsLT5jcHV0aW1lcjsKIAogCWlmICghY3B1dGltZXItPnJ1bm5pbmcpCiAJCXJldHVybjsKQEAgLTMyNSwxMyArMzE5LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X2dyb3VwX3N5c3RlbV90aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAogCQkJCQkgICAgIGNwdXRpbWVfdCBjcHV0aW1lKQogewotCXN0cnVjdCB0aHJlYWRfZ3JvdXBfY3B1dGltZXIgKmNwdXRpbWVyOwotCi0JLyogdHNrID09IGN1cnJlbnQsIGVuc3VyZSBpdCBpcyBzYWZlIHRvIHVzZSAtPnNpZ25hbCAqLwotCWlmICh1bmxpa2VseSh0c2stPmV4aXRfc3RhdGUpKQotCQlyZXR1cm47Ci0KLQljcHV0aW1lciA9ICZ0c2stPnNpZ25hbC0+Y3B1dGltZXI7CisJc3RydWN0IHRocmVhZF9ncm91cF9jcHV0aW1lciAqY3B1dGltZXIgPSAmdHNrLT5zaWduYWwtPmNwdXRpbWVyOwogCiAJaWYgKCFjcHV0aW1lci0+cnVubmluZykKIAkJcmV0dXJuOwpAQCAtMzU1LDE2ICszNDMsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfZ3JvdXBfZXhlY19ydW50aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAogCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbnMpCiB7Ci0Jc3RydWN0IHRocmVhZF9ncm91cF9jcHV0aW1lciAqY3B1dGltZXI7Ci0Jc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZzsKLQotCXNpZyA9IHRzay0+c2lnbmFsOwotCS8qIHNlZSBfX2V4aXRfc2lnbmFsKCktPnRhc2tfcnFfdW5sb2NrX3dhaXQoKSAqLwotCWJhcnJpZXIoKTsKLQlpZiAodW5saWtlbHkoIXNpZykpCi0JCXJldHVybjsKLQotCWNwdXRpbWVyID0gJnNpZy0+Y3B1dGltZXI7CisJc3RydWN0IHRocmVhZF9ncm91cF9jcHV0aW1lciAqY3B1dGltZXIgPSAmdHNrLT5zaWduYWwtPmNwdXRpbWVyOwogCiAJaWYgKCFjcHV0aW1lci0+cnVubmluZykKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2VybmVsL3NpZ25hbC5jCmluZGV4IDkwNmFlNWExLi5iZGVkNjUxIDEwMDY0NAotLS0gYS9rZXJuZWwvc2lnbmFsLmMKKysrIGIva2VybmVsL3NpZ25hbC5jCkBAIC02MzcsNyArNjM3LDcgQEAKIAogLyoKICAqIEJhZCBwZXJtaXNzaW9ucyBmb3Igc2VuZGluZyB0aGUgc2lnbmFsCi0gKiAtIHRoZSBjYWxsZXIgbXVzdCBob2xkIGF0IGxlYXN0IHRoZSBSQ1UgcmVhZCBsb2NrCisgKiAtIHRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBSQ1UgcmVhZCBsb2NrCiAgKi8KIHN0YXRpYyBpbnQgY2hlY2tfa2lsbF9wZXJtaXNzaW9uKGludCBzaWcsIHN0cnVjdCBzaWdpbmZvICppbmZvLAogCQkJCSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpCkBAIC0xMTI3LDExICsxMTI3LDE0IEBACiAKIC8qCiAgKiBzZW5kIHNpZ25hbCBpbmZvIHRvIGFsbCB0aGUgbWVtYmVycyBvZiBhIGdyb3VwCi0gKiAtIHRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBSQ1UgcmVhZCBsb2NrIGF0IGxlYXN0CiAgKi8KIGludCBncm91cF9zZW5kX3NpZ19pbmZvKGludCBzaWcsIHN0cnVjdCBzaWdpbmZvICppbmZvLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7Ci0JaW50IHJldCA9IGNoZWNrX2tpbGxfcGVybWlzc2lvbihzaWcsIGluZm8sIHApOworCWludCByZXQ7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJcmV0ID0gY2hlY2tfa2lsbF9wZXJtaXNzaW9uKHNpZywgaW5mbywgcCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoIXJldCAmJiBzaWcpCiAJCXJldCA9IGRvX3NlbmRfc2lnX2luZm8oc2lnLCBpbmZvLCBwLCB0cnVlKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0bG9ja3VwLmMgYi9rZXJuZWwvc29mdGxvY2t1cC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjQ5M2Y2Li4wMDAwMDAwCi0tLSBhL2tlcm5lbC9zb2Z0bG9ja3VwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTMgKzAsMCBAQAotLyoKLSAqIERldGVjdCBTb2Z0IExvY2t1cHMKLSAqCi0gKiBzdGFydGVkIGJ5IEluZ28gTW9sbmFyLCBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgUmVkIEhhdCwgSW5jLgotICoKLSAqIHRoaXMgY29kZSBkZXRlY3RzIHNvZnQgbG9ja3VwczogaW5jaWRlbnRzIGluIHdoZXJlIG9uIGEgQ1BVCi0gKiB0aGUga2VybmVsIGRvZXMgbm90IHJlc2NoZWR1bGUgZm9yIDEwIHNlY29uZHMgb3IgbW9yZS4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1Lmg+Ci0jaW5jbHVkZSA8bGludXgvbm1pLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgotI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+Ci0jaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KLQotI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgotCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHByaW50X2xvY2spOwotCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgc29mdGxvY2t1cF90b3VjaF90cyk7IC8qIHRvdWNoIHRpbWVzdGFtcCAqLwotc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHNvZnRsb2NrdXBfcHJpbnRfdHMpOyAvKiBwcmludCB0aW1lc3RhbXAgKi8KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgc29mdGxvY2t1cF93YXRjaGRvZyk7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoYm9vbCwgc29mdGxvY2tfdG91Y2hfc3luYyk7Ci0KLXN0YXRpYyBpbnQgX19yZWFkX21vc3RseSBkaWRfcGFuaWM7Ci1pbnQgX19yZWFkX21vc3RseSBzb2Z0bG9ja3VwX3RocmVzaCA9IDYwOwotCi0vKgotICogU2hvdWxkIHdlIHBhbmljIChhbmQgcmVib290LCBpZiBwYW5pY190aW1lb3V0PSBpcyBzZXQpIHdoZW4gYQotICogc29mdC1sb2NrdXAgb2NjdXJzOgotICovCi11bnNpZ25lZCBpbnQgX19yZWFkX21vc3RseSBzb2Z0bG9ja3VwX3BhbmljID0KLQkJCQlDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNvZnRsb2NrdXBfcGFuaWNfc2V0dXAoY2hhciAqc3RyKQotewotCXNvZnRsb2NrdXBfcGFuaWMgPSBzaW1wbGVfc3RydG91bChzdHIsIE5VTEwsIDApOwotCi0JcmV0dXJuIDE7Ci19Ci1fX3NldHVwKCJzb2Z0bG9ja3VwX3BhbmljPSIsIHNvZnRsb2NrdXBfcGFuaWNfc2V0dXApOwotCi1zdGF0aWMgaW50Ci1zb2Z0bG9ja19wYW5pYyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKLXsKLQlkaWRfcGFuaWMgPSAxOwotCi0JcmV0dXJuIE5PVElGWV9ET05FOwotfQotCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBhbmljX2Jsb2NrID0gewotCS5ub3RpZmllcl9jYWxsID0gc29mdGxvY2tfcGFuaWMsCi19OwotCi0vKgotICogUmV0dXJucyBzZWNvbmRzLCBhcHByb3hpbWF0ZWx5LiAgV2UgZG9uJ3QgbmVlZCBuYW5vc2Vjb25kCi0gKiByZXNvbHV0aW9uLCBhbmQgd2UgZG9uJ3QgbmVlZCB0byB3YXN0ZSB0aW1lIHdpdGggYSBiaWcgZGl2aWRlIHdoZW4KLSAqIDJeMzBucyA9PSAxLjA3NHMuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF90aW1lc3RhbXAoaW50IHRoaXNfY3B1KQotewotCXJldHVybiBjcHVfY2xvY2sodGhpc19jcHUpID4+IDMwTEw7ICAvKiAyXjMwIH49IDEwXjkgKi8KLX0KLQotc3RhdGljIHZvaWQgX190b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKHZvaWQpCi17Ci0JaW50IHRoaXNfY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKLQotCV9fcmF3X2dldF9jcHVfdmFyKHNvZnRsb2NrdXBfdG91Y2hfdHMpID0gZ2V0X3RpbWVzdGFtcCh0aGlzX2NwdSk7Ci19Ci0KLXZvaWQgdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZyh2b2lkKQotewotCV9fcmF3X2dldF9jcHVfdmFyKHNvZnRsb2NrdXBfdG91Y2hfdHMpID0gMDsKLX0KLUVYUE9SVF9TWU1CT0wodG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZyk7Ci0KLXZvaWQgdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZ19zeW5jKHZvaWQpCi17Ci0JX19yYXdfZ2V0X2NwdV92YXIoc29mdGxvY2tfdG91Y2hfc3luYykgPSB0cnVlOwotCV9fcmF3X2dldF9jcHVfdmFyKHNvZnRsb2NrdXBfdG91Y2hfdHMpID0gMDsKLX0KLQotdm9pZCB0b3VjaF9hbGxfc29mdGxvY2t1cF93YXRjaGRvZ3Modm9pZCkKLXsKLQlpbnQgY3B1OwotCi0JLyogQ2F1c2UgZWFjaCBDUFUgdG8gcmUtdXBkYXRlIGl0cyB0aW1lc3RhbXAgcmF0aGVyIHRoYW4gY29tcGxhaW4gKi8KLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJcGVyX2NwdShzb2Z0bG9ja3VwX3RvdWNoX3RzLCBjcHUpID0gMDsKLX0KLUVYUE9SVF9TWU1CT0wodG91Y2hfYWxsX3NvZnRsb2NrdXBfd2F0Y2hkb2dzKTsKLQotaW50IHByb2NfZG9zb2Z0bG9ja3VwX3RocmVzaChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAotCQkJICAgICB2b2lkIF9fdXNlciAqYnVmZmVyLAotCQkJICAgICBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKLXsKLQl0b3VjaF9hbGxfc29mdGxvY2t1cF93YXRjaGRvZ3MoKTsKLQlyZXR1cm4gcHJvY19kb2ludHZlY19taW5tYXgodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpOwotfQotCi0vKgotICogVGhpcyBjYWxsYmFjayBydW5zIGZyb20gdGhlIHRpbWVyIGludGVycnVwdCwgYW5kIGNoZWNrcwotICogd2hldGhlciB0aGUgd2F0Y2hkb2cgdGhyZWFkIGhhcyBodW5nIG9yIG5vdDoKLSAqLwotdm9pZCBzb2Z0bG9ja3VwX3RpY2sodm9pZCkKLXsKLQlpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JdW5zaWduZWQgbG9uZyB0b3VjaF90cyA9IHBlcl9jcHUoc29mdGxvY2t1cF90b3VjaF90cywgdGhpc19jcHUpOwotCXVuc2lnbmVkIGxvbmcgcHJpbnRfdHM7Ci0Jc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKLQl1bnNpZ25lZCBsb25nIG5vdzsKLQotCS8qIElzIGRldGVjdGlvbiBzd2l0Y2hlZCBvZmY/ICovCi0JaWYgKCFwZXJfY3B1KHNvZnRsb2NrdXBfd2F0Y2hkb2csIHRoaXNfY3B1KSB8fCBzb2Z0bG9ja3VwX3RocmVzaCA8PSAwKSB7Ci0JCS8qIEJlIHN1cmUgd2UgZG9uJ3QgZmFsc2UgdHJpZ2dlciBpZiBzd2l0Y2hlZCBiYWNrIG9uICovCi0JCWlmICh0b3VjaF90cykKLQkJCXBlcl9jcHUoc29mdGxvY2t1cF90b3VjaF90cywgdGhpc19jcHUpID0gMDsKLQkJcmV0dXJuOwotCX0KLQotCWlmICh0b3VjaF90cyA9PSAwKSB7Ci0JCWlmICh1bmxpa2VseShwZXJfY3B1KHNvZnRsb2NrX3RvdWNoX3N5bmMsIHRoaXNfY3B1KSkpIHsKLQkJCS8qCi0JCQkgKiBJZiB0aGUgdGltZSBzdGFtcCB3YXMgdG91Y2hlZCBhdG9taWNhbGx5Ci0JCQkgKiBtYWtlIHN1cmUgdGhlIHNjaGVkdWxlciB0aWNrIGlzIHVwIHRvIGRhdGUuCi0JCQkgKi8KLQkJCXBlcl9jcHUoc29mdGxvY2tfdG91Y2hfc3luYywgdGhpc19jcHUpID0gZmFsc2U7Ci0JCQlzY2hlZF9jbG9ja190aWNrKCk7Ci0JCX0KLQkJX190b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlwcmludF90cyA9IHBlcl9jcHUoc29mdGxvY2t1cF9wcmludF90cywgdGhpc19jcHUpOwotCi0JLyogcmVwb3J0IGF0IG1vc3Qgb25jZSBhIHNlY29uZCAqLwotCWlmIChwcmludF90cyA9PSB0b3VjaF90cyB8fCBkaWRfcGFuaWMpCi0JCXJldHVybjsKLQotCS8qIGRvIG5vdCBwcmludCBkdXJpbmcgZWFybHkgYm9vdHVwOiAqLwotCWlmICh1bmxpa2VseShzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX1JVTk5JTkcpKSB7Ci0JCV9fdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOwotCQlyZXR1cm47Ci0JfQotCi0Jbm93ID0gZ2V0X3RpbWVzdGFtcCh0aGlzX2NwdSk7Ci0KLQkvKgotCSAqIFdha2UgdXAgdGhlIGhpZ2gtcHJpbyB3YXRjaGRvZyB0YXNrIHR3aWNlIHBlcgotCSAqIHRocmVzaG9sZCB0aW1lc3Bhbi4KLQkgKi8KLQlpZiAodGltZV9hZnRlcihub3cgLSBzb2Z0bG9ja3VwX3RocmVzaC8yLCB0b3VjaF90cykpCi0JCXdha2VfdXBfcHJvY2VzcyhwZXJfY3B1KHNvZnRsb2NrdXBfd2F0Y2hkb2csIHRoaXNfY3B1KSk7Ci0KLQkvKiBXYXJuIGFib3V0IHVucmVhc29uYWJsZSBkZWxheXM6ICovCi0JaWYgKHRpbWVfYmVmb3JlX2VxKG5vdyAtIHNvZnRsb2NrdXBfdGhyZXNoLCB0b3VjaF90cykpCi0JCXJldHVybjsKLQotCXBlcl9jcHUoc29mdGxvY2t1cF9wcmludF90cywgdGhpc19jcHUpID0gdG91Y2hfdHM7Ci0KLQlzcGluX2xvY2soJnByaW50X2xvY2spOwotCXByaW50ayhLRVJOX0VSUiAiQlVHOiBzb2Z0IGxvY2t1cCAtIENQVSMlZCBzdHVjayBmb3IgJWx1cyEgWyVzOiVkXVxuIiwKLQkJCXRoaXNfY3B1LCBub3cgLSB0b3VjaF90cywKLQkJCWN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKLQlwcmludF9tb2R1bGVzKCk7Ci0JcHJpbnRfaXJxdHJhY2VfZXZlbnRzKGN1cnJlbnQpOwotCWlmIChyZWdzKQotCQlzaG93X3JlZ3MocmVncyk7Ci0JZWxzZQotCQlkdW1wX3N0YWNrKCk7Ci0Jc3Bpbl91bmxvY2soJnByaW50X2xvY2spOwotCi0JaWYgKHNvZnRsb2NrdXBfcGFuaWMpCi0JCXBhbmljKCJzb2Z0bG9ja3VwOiBodW5nIHRhc2tzIik7Ci19Ci0KLS8qCi0gKiBUaGUgd2F0Y2hkb2cgdGhyZWFkIC0gcnVucyBldmVyeSBzZWNvbmQgYW5kIHRvdWNoZXMgdGhlIHRpbWVzdGFtcC4KLSAqLwotc3RhdGljIGludCB3YXRjaGRvZyh2b2lkICpfX2JpbmRfY3B1KQotewotCXN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbSA9IHsgLnNjaGVkX3ByaW9yaXR5ID0gTUFYX1JUX1BSSU8tMSB9OwotCi0Jc2NoZWRfc2V0c2NoZWR1bGVyKGN1cnJlbnQsIFNDSEVEX0ZJRk8sICZwYXJhbSk7Ci0KLQkvKiBpbml0aWFsaXplIHRpbWVzdGFtcCAqLwotCV9fdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOwotCi0Jc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkvKgotCSAqIFJ1biBicmllZmx5IG9uY2UgcGVyIHNlY29uZCB0byByZXNldCB0aGUgc29mdGxvY2t1cCB0aW1lc3RhbXAuCi0JICogSWYgdGhpcyBnZXRzIGRlbGF5ZWQgZm9yIG1vcmUgdGhhbiA2MCBzZWNvbmRzIHRoZW4gdGhlCi0JICogZGVidWctcHJpbnRvdXQgdHJpZ2dlcnMgaW4gc29mdGxvY2t1cF90aWNrKCkuCi0JICovCi0Jd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKLQkJX190b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7Ci0JCXNjaGVkdWxlKCk7Ci0KLQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKLQkJCWJyZWFrOwotCi0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JfQotCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogQ3JlYXRlL2Rlc3Ryb3kgd2F0Y2hkb2cgdGhyZWFkcyBhcyBDUFVzIGNvbWUgYW5kIGdvOgotICovCi1zdGF0aWMgaW50IF9fY3B1aW5pdAotY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKLXsKLQlpbnQgaG90Y3B1ID0gKHVuc2lnbmVkIGxvbmcpaGNwdTsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7Ci0KLQlzd2l0Y2ggKGFjdGlvbikgewotCWNhc2UgQ1BVX1VQX1BSRVBBUkU6Ci0JY2FzZSBDUFVfVVBfUFJFUEFSRV9GUk9aRU46Ci0JCUJVR19PTihwZXJfY3B1KHNvZnRsb2NrdXBfd2F0Y2hkb2csIGhvdGNwdSkpOwotCQlwID0ga3RocmVhZF9jcmVhdGUod2F0Y2hkb2csIGhjcHUsICJ3YXRjaGRvZy8lZCIsIGhvdGNwdSk7Ci0JCWlmIChJU19FUlIocCkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAid2F0Y2hkb2cgZm9yICVpIGZhaWxlZFxuIiwgaG90Y3B1KTsKLQkJCXJldHVybiBOT1RJRllfQkFEOwotCQl9Ci0JCXBlcl9jcHUoc29mdGxvY2t1cF90b3VjaF90cywgaG90Y3B1KSA9IDA7Ci0JCXBlcl9jcHUoc29mdGxvY2t1cF93YXRjaGRvZywgaG90Y3B1KSA9IHA7Ci0JCWt0aHJlYWRfYmluZChwLCBob3RjcHUpOwotCQlicmVhazsKLQljYXNlIENQVV9PTkxJTkU6Ci0JY2FzZSBDUFVfT05MSU5FX0ZST1pFTjoKLQkJd2FrZV91cF9wcm9jZXNzKHBlcl9jcHUoc29mdGxvY2t1cF93YXRjaGRvZywgaG90Y3B1KSk7Ci0JCWJyZWFrOwotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotCWNhc2UgQ1BVX1VQX0NBTkNFTEVEOgotCWNhc2UgQ1BVX1VQX0NBTkNFTEVEX0ZST1pFTjoKLQkJaWYgKCFwZXJfY3B1KHNvZnRsb2NrdXBfd2F0Y2hkb2csIGhvdGNwdSkpCi0JCQlicmVhazsKLQkJLyogVW5iaW5kIHNvIGl0IGNhbiBydW4uICBGYWxsIHRocnUuICovCi0JCWt0aHJlYWRfYmluZChwZXJfY3B1KHNvZnRsb2NrdXBfd2F0Y2hkb2csIGhvdGNwdSksCi0JCQkgICAgIGNwdW1hc2tfYW55KGNwdV9vbmxpbmVfbWFzaykpOwotCWNhc2UgQ1BVX0RFQUQ6Ci0JY2FzZSBDUFVfREVBRF9GUk9aRU46Ci0JCXAgPSBwZXJfY3B1KHNvZnRsb2NrdXBfd2F0Y2hkb2csIGhvdGNwdSk7Ci0JCXBlcl9jcHUoc29mdGxvY2t1cF93YXRjaGRvZywgaG90Y3B1KSA9IE5VTEw7Ci0JCWt0aHJlYWRfc3RvcChwKTsKLQkJYnJlYWs7Ci0jZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCi0JfQotCXJldHVybiBOT1RJRllfT0s7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19jcHVpbml0ZGF0YSBjcHVfbmZiID0gewotCS5ub3RpZmllcl9jYWxsID0gY3B1X2NhbGxiYWNrCi19OwotCi1zdGF0aWMgaW50IF9faW5pdGRhdGEgbm9zb2Z0bG9ja3VwOwotCi1zdGF0aWMgaW50IF9faW5pdCBub3NvZnRsb2NrdXBfc2V0dXAoY2hhciAqc3RyKQotewotCW5vc29mdGxvY2t1cCA9IDE7Ci0JcmV0dXJuIDE7Ci19Ci1fX3NldHVwKCJub3NvZnRsb2NrdXAiLCBub3NvZnRsb2NrdXBfc2V0dXApOwotCi1zdGF0aWMgaW50IF9faW5pdCBzcGF3bl9zb2Z0bG9ja3VwX3Rhc2sodm9pZCkKLXsKLQl2b2lkICpjcHUgPSAodm9pZCAqKShsb25nKXNtcF9wcm9jZXNzb3JfaWQoKTsKLQlpbnQgZXJyOwotCi0JaWYgKG5vc29mdGxvY2t1cCkKLQkJcmV0dXJuIDA7Ci0KLQllcnIgPSBjcHVfY2FsbGJhY2soJmNwdV9uZmIsIENQVV9VUF9QUkVQQVJFLCBjcHUpOwotCWlmIChlcnIgPT0gTk9USUZZX0JBRCkgewotCQlCVUcoKTsKLQkJcmV0dXJuIDE7Ci0JfQotCWNwdV9jYWxsYmFjaygmY3B1X25mYiwgQ1BVX09OTElORSwgY3B1KTsKLQlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmNwdV9uZmIpOwotCi0JYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LCAmcGFuaWNfYmxvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci1lYXJseV9pbml0Y2FsbChzcGF3bl9zb2Z0bG9ja3VwX3Rhc2spOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bC5jIGIva2VybmVsL3N5c2N0bC5jCmluZGV4IGQyNGY3NjFmLi45YWNmY2UwIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsLmMKKysrIGIva2VybmVsL3N5c2N0bC5jCkBAIC03Niw2ICs3NiwxMCBAQAogI2luY2x1ZGUgPHNjc2kvc2cuaD4KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0xPQ0tVUF9ERVRFQ1RPUgorI2luY2x1ZGUgPGxpbnV4L25taS5oPgorI2VuZGlmCisKIAogI2lmIGRlZmluZWQoQ09ORklHX1NZU0NUTCkKIApAQCAtMTA2LDcgKzExMCw3IEBACiAjZW5kaWYKIAogLyogQ29uc3RhbnRzIHVzZWQgZm9yIG1pbmltdW0gYW5kICBtYXhpbXVtICovCi0jaWZkZWYgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQCisjaWZkZWYgQ09ORklHX0xPQ0tVUF9ERVRFQ1RPUgogc3RhdGljIGludCBzaXh0eSA9IDYwOwogc3RhdGljIGludCBuZWdfb25lID0gLTE7CiAjZW5kaWYKQEAgLTU2Miw3ICs1NjYsNyBAQAogCQkuZXh0cmEyCQk9ICZvbmUsCiAJfSwKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0hPVFBMVUcpICYmIGRlZmluZWQoQ09ORklHX05FVCkKKyNpZmRlZiBDT05GSUdfSE9UUExVRwogCXsKIAkJLnByb2NuYW1lCT0gImhvdHBsdWciLAogCQkuZGF0YQkJPSAmdWV2ZW50X2hlbHBlciwKQEAgLTcxMCw3ICs3MTQsMzQgQEAKIAkJLm1vZGUJCT0gMDQ0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCiAJfSwKLSNpZiBkZWZpbmVkKENPTkZJR19YODZfTE9DQUxfQVBJQykgJiYgZGVmaW5lZChDT05GSUdfWDg2KQorI2lmIGRlZmluZWQoQ09ORklHX0xPQ0tVUF9ERVRFQ1RPUikKKwl7CisJCS5wcm9jbmFtZSAgICAgICA9ICJ3YXRjaGRvZyIsCisJCS5kYXRhICAgICAgICAgICA9ICZ3YXRjaGRvZ19lbmFibGVkLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YgKGludCksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9IHByb2NfZG93YXRjaGRvZ19lbmFibGVkLAorCX0sCisJeworCQkucHJvY25hbWUJPSAid2F0Y2hkb2dfdGhyZXNoIiwKKwkJLmRhdGEJCT0gJnNvZnRsb2NrdXBfdGhyZXNoLAorCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb3dhdGNoZG9nX3RocmVzaCwKKwkJLmV4dHJhMQkJPSAmbmVnX29uZSwKKwkJLmV4dHJhMgkJPSAmc2l4dHksCisJfSwKKwl7CisJCS5wcm9jbmFtZQk9ICJzb2Z0bG9ja3VwX3BhbmljIiwKKwkJLmRhdGEJCT0gJnNvZnRsb2NrdXBfcGFuaWMsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmemVybywKKwkJLmV4dHJhMgkJPSAmb25lLAorCX0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfTE9DQUxfQVBJQykgJiYgZGVmaW5lZChDT05GSUdfWDg2KSAmJiAhZGVmaW5lZChDT05GSUdfTE9DS1VQX0RFVEVDVE9SKQogCXsKIAkJLnByb2NuYW1lICAgICAgID0gInVua25vd25fbm1pX3BhbmljIiwKIAkJLmRhdGEgICAgICAgICAgID0gJnVua25vd25fbm1pX3BhbmljLApAQCAtODEzLDI2ICs4NDQsNiBAQAogCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYywKIAl9LAogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQCi0JewotCQkucHJvY25hbWUJPSAic29mdGxvY2t1cF9wYW5pYyIsCi0JCS5kYXRhCQk9ICZzb2Z0bG9ja3VwX3BhbmljLAotCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAotCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCi0JCS5leHRyYTEJCT0gJnplcm8sCi0JCS5leHRyYTIJCT0gJm9uZSwKLQl9LAotCXsKLQkJLnByb2NuYW1lCT0gInNvZnRsb2NrdXBfdGhyZXNoIiwKLQkJLmRhdGEJCT0gJnNvZnRsb2NrdXBfdGhyZXNoLAotCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAotCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb3NvZnRsb2NrdXBfdGhyZXNoLAotCQkuZXh0cmExCQk9ICZuZWdfb25lLAotCQkuZXh0cmEyCQk9ICZzaXh0eSwKLQl9LAotI2VuZGlmCiAjaWZkZWYgQ09ORklHX0RFVEVDVF9IVU5HX1RBU0sKIAl7CiAJCS5wcm9jbmFtZQk9ICJodW5nX3Rhc2tfcGFuaWMiLApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUuYyBiL2tlcm5lbC90aW1lLmMKaW5kZXggODQ4YjFjMi4uYmE5YjMzOCAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUuYworKysgYi9rZXJuZWwvdGltZS5jCkBAIC0zMDAsMjIgKzMwMCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKHRpbWVzcGVjX3RydW5jKTsKIAotI2lmbmRlZiBDT05GSUdfR0VORVJJQ19USU1FCi0vKgotICogU2ltdWxhdGUgZ2V0dGltZW9mZGF5IHVzaW5nIGRvX2dldHRpbWVvZmRheSB3aGljaCBvbmx5IGFsbG93cyBhIHRpbWV2YWwKLSAqIGFuZCB0aGVyZWZvcmUgb25seSB5aWVsZHMgdXNlYyBhY2N1cmFjeQotICovCi12b2lkIGdldG5zdGltZW9mZGF5KHN0cnVjdCB0aW1lc3BlYyAqdHYpCi17Ci0Jc3RydWN0IHRpbWV2YWwgeDsKLQotCWRvX2dldHRpbWVvZmRheSgmeCk7Ci0JdHYtPnR2X3NlYyA9IHgudHZfc2VjOwotCXR2LT50dl9uc2VjID0geC50dl91c2VjICogTlNFQ19QRVJfVVNFQzsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGdldG5zdGltZW9mZGF5KTsKLSNlbmRpZgotCiAvKiBDb252ZXJ0cyBHcmVnb3JpYW4gZGF0ZSB0byBzZWNvbmRzIHNpbmNlIDE5NzAtMDEtMDEgMDA6MDA6MDAuCiAgKiBBc3N1bWVzIGlucHV0IGluIG5vcm1hbCBkYXRlIGZvcm1hdCwgaS5lLiAxOTgwLTEyLTMxIDIzOjU5OjU5CiAgKiA9PiB5ZWFyPTE5ODAsIG1vbj0xMiwgZGF5PTMxLCBob3VyPTIzLCBtaW49NTksIHNlYz01OS4KZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL0tjb25maWcgYi9rZXJuZWwvdGltZS9LY29uZmlnCmluZGV4IDk1ZWQ0MjkuLmYwNmE4YTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL0tjb25maWcKKysrIGIva2VybmVsL3RpbWUvS2NvbmZpZwpAQCAtNiw3ICs2LDcgQEAKIAogY29uZmlnIE5PX0haCiAJYm9vbCAiVGlja2xlc3MgU3lzdGVtIChEeW5hbWljIFRpY2tzKSIKLQlkZXBlbmRzIG9uIEdFTkVSSUNfVElNRSAmJiBHRU5FUklDX0NMT0NLRVZFTlRTCisJZGVwZW5kcyBvbiAhQVJDSF9VU0VTX0dFVFRJTUVPRkZTRVQgJiYgR0VORVJJQ19DTE9DS0VWRU5UUwogCXNlbGVjdCBUSUNLX09ORVNIT1QKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIGEgdGlja2xlc3Mgc3lzdGVtOiB0aW1lciBpbnRlcnJ1cHRzIHdpbGwKQEAgLTE1LDcgKzE1LDcgQEAKIAogY29uZmlnIEhJR0hfUkVTX1RJTUVSUwogCWJvb2wgIkhpZ2ggUmVzb2x1dGlvbiBUaW1lciBTdXBwb3J0IgotCWRlcGVuZHMgb24gR0VORVJJQ19USU1FICYmIEdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwlkZXBlbmRzIG9uICFBUkNIX1VTRVNfR0VUVElNRU9GRlNFVCAmJiBHRU5FUklDX0NMT0NLRVZFTlRTCiAJc2VsZWN0IFRJQ0tfT05FU0hPVAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgaGlnaCByZXNvbHV0aW9uIHRpbWVyIHN1cHBvcnQuIElmIHlvdXIKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMgYi9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCmluZGV4IGYwOGU5OWMuLmMxOGQ3ZWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKKysrIGIva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwpAQCAtNTMxLDcgKzUzMSw3IEBACiAJcmV0dXJuIG1heF9uc2VjcyAtIChtYXhfbnNlY3MgPj4gNSk7CiB9CiAKLSNpZmRlZiBDT05GSUdfR0VORVJJQ19USU1FCisjaWZuZGVmIENPTkZJR19BUkNIX1VTRVNfR0VUVElNRU9GRlNFVAogCiAvKioKICAqIGNsb2Nrc291cmNlX3NlbGVjdCAtIFNlbGVjdCB0aGUgYmVzdCBjbG9ja3NvdXJjZSBhdmFpbGFibGUKQEAgLTU3Nyw3ICs1NzcsNyBAQAogCX0KIH0KIAotI2Vsc2UgLyogQ09ORklHX0dFTkVSSUNfVElNRSAqLworI2Vsc2UgLyogIUNPTkZJR19BUkNIX1VTRVNfR0VUVElNRU9GRlNFVCAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2xvY2tzb3VyY2Vfc2VsZWN0KHZvaWQpIHsgfQogCkBAIC02MzksNiArNjM5LDMyIEBACiAjZGVmaW5lIE1BWF9VUERBVEVfTEVOR1RIIDUgLyogU2Vjb25kcyAqLwogCiAvKioKKyAqIF9fY2xvY2tzb3VyY2VfdXBkYXRlZnJlcV9zY2FsZSAtIFVzZWQgdXBkYXRlIGNsb2Nrc291cmNlIHdpdGggbmV3IGZyZXEKKyAqIEB0OgkJY2xvY2tzb3VyY2UgdG8gYmUgcmVnaXN0ZXJlZAorICogQHNjYWxlOglTY2FsZSBmYWN0b3IgbXVsdGlwbGllZCBhZ2FpbnN0IGZyZXEgdG8gZ2V0IGNsb2Nrc291cmNlIGh6CisgKiBAZnJlcToJY2xvY2tzb3VyY2UgZnJlcXVlbmN5IChjeWNsZXMgcGVyIHNlY29uZCkgZGl2aWRlZCBieSBzY2FsZQorICoKKyAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIGNsb2Nrc291cmNlLT5lbmFibGUoKSBtZXRob2QuCisgKgorICogVGhpcyAqU0hPVUxEIE5PVCogYmUgY2FsbGVkIGRpcmVjdGx5ISBQbGVhc2UgdXNlIHRoZQorICogY2xvY2tzb3VyY2VfdXBkYXRlZnJlcV9oeigpIG9yIGNsb2Nrc291cmNlX3VwZGF0ZWZyZXFfa2h6IGhlbHBlciBmdW5jdGlvbnMuCisgKi8KK3ZvaWQgX19jbG9ja3NvdXJjZV91cGRhdGVmcmVxX3NjYWxlKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MsIHUzMiBzY2FsZSwgdTMyIGZyZXEpCit7CisJLyoKKwkgKiBJZGVhbGx5IHdlIHdhbnQgdG8gdXNlICBzb21lIG9mIHRoZSBsaW1pdHMgdXNlZCBpbgorCSAqIGNsb2Nrc291cmNlX21heF9kZWZlcm1lbnQsIHRvIHByb3ZpZGUgYSBtb3JlIGluZm9ybWVkCisJICogTUFYX1VQREFURV9MRU5HVEguIEJ1dCBmb3Igbm93IHRoaXMganVzdCBnZXRzIHRoZQorCSAqIHJlZ2lzdGVyIGludGVyZmFjZSB3b3JraW5nIHByb3Blcmx5LgorCSAqLworCWNsb2Nrc19jYWxjX211bHRfc2hpZnQoJmNzLT5tdWx0LCAmY3MtPnNoaWZ0LCBmcmVxLAorCQkJCSAgICAgIE5TRUNfUEVSX1NFQy9zY2FsZSwKKwkJCQkgICAgICBNQVhfVVBEQVRFX0xFTkdUSCpzY2FsZSk7CisJY3MtPm1heF9pZGxlX25zID0gY2xvY2tzb3VyY2VfbWF4X2RlZmVybWVudChjcyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX2Nsb2Nrc291cmNlX3VwZGF0ZWZyZXFfc2NhbGUpOworCisvKioKICAqIF9fY2xvY2tzb3VyY2VfcmVnaXN0ZXJfc2NhbGUgLSBVc2VkIHRvIGluc3RhbGwgbmV3IGNsb2Nrc291cmNlcwogICogQHQ6CQljbG9ja3NvdXJjZSB0byBiZSByZWdpc3RlcmVkCiAgKiBAc2NhbGU6CVNjYWxlIGZhY3RvciBtdWx0aXBsaWVkIGFnYWluc3QgZnJlcSB0byBnZXQgY2xvY2tzb3VyY2UgaHoKQEAgLTY1MiwxNyArNjc4LDEwIEBACiBpbnQgX19jbG9ja3NvdXJjZV9yZWdpc3Rlcl9zY2FsZShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzLCB1MzIgc2NhbGUsIHUzMiBmcmVxKQogewogCi0JLyoKLQkgKiBJZGVhbGx5IHdlIHdhbnQgdG8gdXNlICBzb21lIG9mIHRoZSBsaW1pdHMgdXNlZCBpbgotCSAqIGNsb2Nrc291cmNlX21heF9kZWZlcm1lbnQsIHRvIHByb3ZpZGUgYSBtb3JlIGluZm9ybWVkCi0JICogTUFYX1VQREFURV9MRU5HVEguIEJ1dCBmb3Igbm93IHRoaXMganVzdCBnZXRzIHRoZQotCSAqIHJlZ2lzdGVyIGludGVyZmFjZSB3b3JraW5nIHByb3Blcmx5LgotCSAqLwotCWNsb2Nrc19jYWxjX211bHRfc2hpZnQoJmNzLT5tdWx0LCAmY3MtPnNoaWZ0LCBmcmVxLAotCQkJCSAgICAgIE5TRUNfUEVSX1NFQy9zY2FsZSwKLQkJCQkgICAgICBNQVhfVVBEQVRFX0xFTkdUSCpzY2FsZSk7Ci0JY3MtPm1heF9pZGxlX25zID0gY2xvY2tzb3VyY2VfbWF4X2RlZmVybWVudChjcyk7CisJLyogSW50aWFsaXplIG11bHQvc2hpZnQgYW5kIG1heF9pZGxlX25zICovCisJX19jbG9ja3NvdXJjZV91cGRhdGVmcmVxX3NjYWxlKGNzLCBzY2FsZSwgZnJlcSk7CiAKKwkvKiBBZGQgY2xvY2tzb3VyY2UgdG8gdGhlIGNsY29rc291cmNlIGxpc3QgKi8KIAltdXRleF9sb2NrKCZjbG9ja3NvdXJjZV9tdXRleCk7CiAJY2xvY2tzb3VyY2VfZW5xdWV1ZShjcyk7CiAJY2xvY2tzb3VyY2Vfc2VsZWN0KCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jIGIva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYwppbmRleCBiM2JhZmQ1Li40OGIyNzYxIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jCisrKyBiL2tlcm5lbC90aW1lL3RpY2stYnJvYWRjYXN0LmMKQEAgLTE4OCw3ICsxODgsNyBAQAogCS8qCiAJICogU2V0dXAgdGhlIG5leHQgcGVyaW9kIGZvciBkZXZpY2VzLCB3aGljaCBkbyBub3QgaGF2ZQogCSAqIHBlcmlvZGljIG1vZGUuIFdlIHJlYWQgZGV2LT5uZXh0X2V2ZW50IGZpcnN0IGFuZCBhZGQgdG8gaXQKLQkgKiB3aGVuIHRoZSBldmVudCBhbHJhZHkgZXhwaXJlZC4gY2xvY2tldmVudHNfcHJvZ3JhbV9ldmVudCgpCisJICogd2hlbiB0aGUgZXZlbnQgYWxyZWFkeSBleHBpcmVkLiBjbG9ja2V2ZW50c19wcm9ncmFtX2V2ZW50KCkKIAkgKiBzZXRzIGRldi0+bmV4dF9ldmVudCBvbmx5IHdoZW4gdGhlIGV2ZW50IGlzIHJlYWxseQogCSAqIHByb2dyYW1tZWQgdG8gdGhlIGRldmljZS4KIAkgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYyBiL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYwppbmRleCA4MTM5OTNiLi4zZTIxNmUwIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKKysrIGIva2VybmVsL3RpbWUvdGljay1zY2hlZC5jCkBAIC0zMjUsNyArMzI1LDcgQEAKIAl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZ4dGltZV9sb2NrLCBzZXEpKTsKIAogCWlmIChyY3VfbmVlZHNfY3B1KGNwdSkgfHwgcHJpbnRrX25lZWRzX2NwdShjcHUpIHx8Ci0JICAgIGFyY2hfbmVlZHNfY3B1KGNwdSkgfHwgbm9oel9yYXRlbGltaXQoY3B1KSkgeworCSAgICBhcmNoX25lZWRzX2NwdShjcHUpKSB7CiAJCW5leHRfamlmZmllcyA9IGxhc3RfamlmZmllcyArIDE7CiAJCWRlbHRhX2ppZmZpZXMgPSAxOwogCX0gZWxzZSB7CkBAIC00MDUsMTMgKzQwNSw3IEBACiAJCSAqIHRoZSBzY2hlZHVsZXIgdGljayBpbiBub2h6X3Jlc3RhcnRfc2NoZWRfdGljay4KIAkJICovCiAJCWlmICghdHMtPnRpY2tfc3RvcHBlZCkgewotCQkJaWYgKHNlbGVjdF9ub2h6X2xvYWRfYmFsYW5jZXIoMSkpIHsKLQkJCQkvKgotCQkJCSAqIHNjaGVkIHRpY2sgbm90IHN0b3BwZWQhCi0JCQkJICovCi0JCQkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBub2h6X2NwdV9tYXNrKTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KKwkJCXNlbGVjdF9ub2h6X2xvYWRfYmFsYW5jZXIoMSk7CiAKIAkJCXRzLT5pZGxlX3RpY2sgPSBocnRpbWVyX2dldF9leHBpcmVzKCZ0cy0+c2NoZWRfdGltZXIpOwogCQkJdHMtPnRpY2tfc3RvcHBlZCA9IDE7CkBAIC03ODAsNyArNzc0LDYgQEAKIHsKIAlzdHJ1Y3QgdGlja19zY2hlZCAqdHMgPSAmX19nZXRfY3B1X3Zhcih0aWNrX2NwdV9zY2hlZCk7CiAJa3RpbWVfdCBub3cgPSBrdGltZV9nZXQoKTsKLQl1NjQgb2Zmc2V0OwogCiAJLyoKIAkgKiBFbXVsYXRlIHRpY2sgcHJvY2Vzc2luZyB2aWEgcGVyLUNQVSBocnRpbWVyczoKQEAgLTc5MCwxMCArNzgzLDYgQEAKIAogCS8qIEdldCB0aGUgbmV4dCBwZXJpb2QgKHBlciBjcHUpICovCiAJaHJ0aW1lcl9zZXRfZXhwaXJlcygmdHMtPnNjaGVkX3RpbWVyLCB0aWNrX2luaXRfamlmZnlfdXBkYXRlKCkpOwotCW9mZnNldCA9IGt0aW1lX3RvX25zKHRpY2tfcGVyaW9kKSA+PiAxOwotCWRvX2RpdihvZmZzZXQsIG51bV9wb3NzaWJsZV9jcHVzKCkpOwotCW9mZnNldCAqPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JaHJ0aW1lcl9hZGRfZXhwaXJlc19ucygmdHMtPnNjaGVkX3RpbWVyLCBvZmZzZXQpOwogCiAJZm9yICg7OykgewogCQlocnRpbWVyX2ZvcndhcmQoJnRzLT5zY2hlZF90aW1lciwgbm93LCB0aWNrX3BlcmlvZCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jIGIva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYwppbmRleCBjYWY4ZDRkLi5lMTRjODM5IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCisrKyBiL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKQEAgLTE1Myw4ICsxNTMsOCBAQAogICogLSB3YWxsX3RvX21vbm90b25pYyBpcyBubyBsb25nZXIgdGhlIGJvb3QgdGltZSwgZ2V0Ym9vdHRpbWUgbXVzdCBiZQogICogdXNlZCBpbnN0ZWFkLgogICovCi1zdHJ1Y3QgdGltZXNwZWMgeHRpbWUgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDE2KSkpOwotc3RydWN0IHRpbWVzcGVjIHdhbGxfdG9fbW9ub3RvbmljIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICgxNikpKTsKK3N0YXRpYyBzdHJ1Y3QgdGltZXNwZWMgeHRpbWUgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDE2KSkpOworc3RhdGljIHN0cnVjdCB0aW1lc3BlYyB3YWxsX3RvX21vbm90b25pYyBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoMTYpKSk7CiBzdGF0aWMgc3RydWN0IHRpbWVzcGVjIHRvdGFsX3NsZWVwX3RpbWU7CiAKIC8qCkBAIC0xNzAsMTEgKzE3MCwxMCBAQAogewogCXh0aW1lLnR2X3NlYyArPSBsZWFwc2Vjb25kOwogCXdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYyAtPSBsZWFwc2Vjb25kOwotCXVwZGF0ZV92c3lzY2FsbCgmeHRpbWUsIHRpbWVrZWVwZXIuY2xvY2ssIHRpbWVrZWVwZXIubXVsdCk7CisJdXBkYXRlX3ZzeXNjYWxsKCZ4dGltZSwgJndhbGxfdG9fbW9ub3RvbmljLCB0aW1la2VlcGVyLmNsb2NrLAorCQkJdGltZWtlZXBlci5tdWx0KTsKIH0KIAotI2lmZGVmIENPTkZJR19HRU5FUklDX1RJTUUKLQogLyoqCiAgKiB0aW1la2VlcGluZ19mb3J3YXJkX25vdyAtIHVwZGF0ZSBjbG9jayB0byB0aGUgY3VycmVudCB0aW1lCiAgKgpAQCAtMzI4LDcgKzMyNyw4IEBACiAJdGltZWtlZXBlci5udHBfZXJyb3IgPSAwOwogCW50cF9jbGVhcigpOwogCi0JdXBkYXRlX3ZzeXNjYWxsKCZ4dGltZSwgdGltZWtlZXBlci5jbG9jaywgdGltZWtlZXBlci5tdWx0KTsKKwl1cGRhdGVfdnN5c2NhbGwoJnh0aW1lLCAmd2FsbF90b19tb25vdG9uaWMsIHRpbWVrZWVwZXIuY2xvY2ssCisJCQkJdGltZWtlZXBlci5tdWx0KTsKIAogCXdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBmbGFncyk7CiAKQEAgLTM3Niw1MiArMzc2LDYgQEAKIAl0aWNrX2Nsb2NrX25vdGlmeSgpOwogfQogCi0jZWxzZSAvKiBHRU5FUklDX1RJTUUgKi8KLQotc3RhdGljIGlubGluZSB2b2lkIHRpbWVrZWVwaW5nX2ZvcndhcmRfbm93KHZvaWQpIHsgfQotCi0vKioKLSAqIGt0aW1lX2dldCAtIGdldCB0aGUgbW9ub3RvbmljIHRpbWUgaW4ga3RpbWVfdCBmb3JtYXQKLSAqCi0gKiByZXR1cm5zIHRoZSB0aW1lIGluIGt0aW1lX3QgZm9ybWF0Ci0gKi8KLWt0aW1lX3Qga3RpbWVfZ2V0KHZvaWQpCi17Ci0Jc3RydWN0IHRpbWVzcGVjIG5vdzsKLQotCWt0aW1lX2dldF90cygmbm93KTsKLQotCXJldHVybiB0aW1lc3BlY190b19rdGltZShub3cpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoa3RpbWVfZ2V0KTsKLQotLyoqCi0gKiBrdGltZV9nZXRfdHMgLSBnZXQgdGhlIG1vbm90b25pYyBjbG9jayBpbiB0aW1lc3BlYyBmb3JtYXQKLSAqIEB0czoJCXBvaW50ZXIgdG8gdGltZXNwZWMgdmFyaWFibGUKLSAqCi0gKiBUaGUgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgbW9ub3RvbmljIGNsb2NrIGZyb20gdGhlIHJlYWx0aW1lCi0gKiBjbG9jayBhbmQgdGhlIHdhbGxfdG9fbW9ub3RvbmljIG9mZnNldCBhbmQgc3RvcmVzIHRoZSByZXN1bHQKLSAqIGluIG5vcm1hbGl6ZWQgdGltZXNwZWMgZm9ybWF0IGluIHRoZSB2YXJpYWJsZSBwb2ludGVkIHRvIGJ5IEB0cy4KLSAqLwotdm9pZCBrdGltZV9nZXRfdHMoc3RydWN0IHRpbWVzcGVjICp0cykKLXsKLQlzdHJ1Y3QgdGltZXNwZWMgdG9tb25vOwotCXVuc2lnbmVkIGxvbmcgc2VxOwotCi0JZG8gewotCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZ4dGltZV9sb2NrKTsKLQkJZ2V0bnN0aW1lb2ZkYXkodHMpOwotCQl0b21vbm8gPSB3YWxsX3RvX21vbm90b25pYzsKLQotCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoJnh0aW1lX2xvY2ssIHNlcSkpOwotCi0Jc2V0X25vcm1hbGl6ZWRfdGltZXNwZWModHMsIHRzLT50dl9zZWMgKyB0b21vbm8udHZfc2VjLAotCQkJCXRzLT50dl9uc2VjICsgdG9tb25vLnR2X25zZWMpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoa3RpbWVfZ2V0X3RzKTsKLQotI2VuZGlmIC8qICFHRU5FUklDX1RJTUUgKi8KLQogLyoqCiAgKiBrdGltZV9nZXRfcmVhbCAtIGdldCB0aGUgcmVhbCAod2FsbC0pIHRpbWUgaW4ga3RpbWVfdCBmb3JtYXQKICAqCkBAIC01NzksOSArNTMzLDkgQEAKIAogCWlmICh0aW1lc3BlY19jb21wYXJlKCZ0cywgJnRpbWVrZWVwaW5nX3N1c3BlbmRfdGltZSkgPiAwKSB7CiAJCXRzID0gdGltZXNwZWNfc3ViKHRzLCB0aW1la2VlcGluZ19zdXNwZW5kX3RpbWUpOwotCQl4dGltZSA9IHRpbWVzcGVjX2FkZF9zYWZlKHh0aW1lLCB0cyk7CisJCXh0aW1lID0gdGltZXNwZWNfYWRkKHh0aW1lLCB0cyk7CiAJCXdhbGxfdG9fbW9ub3RvbmljID0gdGltZXNwZWNfc3ViKHdhbGxfdG9fbW9ub3RvbmljLCB0cyk7Ci0JCXRvdGFsX3NsZWVwX3RpbWUgPSB0aW1lc3BlY19hZGRfc2FmZSh0b3RhbF9zbGVlcF90aW1lLCB0cyk7CisJCXRvdGFsX3NsZWVwX3RpbWUgPSB0aW1lc3BlY19hZGQodG90YWxfc2xlZXBfdGltZSwgdHMpOwogCX0KIAkvKiByZS1iYXNlIHRoZSBsYXN0IGN5Y2xlIHZhbHVlICovCiAJdGltZWtlZXBlci5jbG9jay0+Y3ljbGVfbGFzdCA9IHRpbWVrZWVwZXIuY2xvY2stPnJlYWQodGltZWtlZXBlci5jbG9jayk7CkBAIC03ODQsMTAgKzczOCwxMSBAQAogCQlyZXR1cm47CiAKIAljbG9jayA9IHRpbWVrZWVwZXIuY2xvY2s7Ci0jaWZkZWYgQ09ORklHX0dFTkVSSUNfVElNRQotCW9mZnNldCA9IChjbG9jay0+cmVhZChjbG9jaykgLSBjbG9jay0+Y3ljbGVfbGFzdCkgJiBjbG9jay0+bWFzazsKLSNlbHNlCisKKyNpZmRlZiBDT05GSUdfQVJDSF9VU0VTX0dFVFRJTUVPRkZTRVQKIAlvZmZzZXQgPSB0aW1la2VlcGVyLmN5Y2xlX2ludGVydmFsOworI2Vsc2UKKwlvZmZzZXQgPSAoY2xvY2stPnJlYWQoY2xvY2spIC0gY2xvY2stPmN5Y2xlX2xhc3QpICYgY2xvY2stPm1hc2s7CiAjZW5kaWYKIAl0aW1la2VlcGVyLnh0aW1lX25zZWMgPSAoczY0KXh0aW1lLnR2X25zZWMgPDwgdGltZWtlZXBlci5zaGlmdDsKIApAQCAtODU2LDcgKzgxMSw4IEBACiAJfQogCiAJLyogY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGEgbmV3IGNsb2Nrc291cmNlIHRvIHVzZSAqLwotCXVwZGF0ZV92c3lzY2FsbCgmeHRpbWUsIHRpbWVrZWVwZXIuY2xvY2ssIHRpbWVrZWVwZXIubXVsdCk7CisJdXBkYXRlX3ZzeXNjYWxsKCZ4dGltZSwgJndhbGxfdG9fbW9ub3RvbmljLCB0aW1la2VlcGVyLmNsb2NrLAorCQkJCXRpbWVrZWVwZXIubXVsdCk7CiB9CiAKIC8qKgpAQCAtODg3LDcgKzg0Myw3IEBACiAgKi8KIHZvaWQgbW9ub3RvbmljX3RvX2Jvb3RiYXNlZChzdHJ1Y3QgdGltZXNwZWMgKnRzKQogewotCSp0cyA9IHRpbWVzcGVjX2FkZF9zYWZlKCp0cywgdG90YWxfc2xlZXBfdGltZSk7CisJKnRzID0gdGltZXNwZWNfYWRkKCp0cywgdG90YWxfc2xlZXBfdGltZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtb25vdG9uaWNfdG9fYm9vdGJhc2VkKTsKIApAQCAtOTAyLDYgKzg1OCwxMSBAQAogCXJldHVybiB4dGltZTsKIH0KIAorc3RydWN0IHRpbWVzcGVjIF9fZ2V0X3dhbGxfdG9fbW9ub3RvbmljKHZvaWQpCit7CisJcmV0dXJuIHdhbGxfdG9fbW9ub3RvbmljOworfQorCiBzdHJ1Y3QgdGltZXNwZWMgY3VycmVudF9rZXJuZWxfdGltZSh2b2lkKQogewogCXN0cnVjdCB0aW1lc3BlYyBub3c7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZXIuYyBiL2tlcm5lbC90aW1lci5jCmluZGV4IGVlMzA1YzguLmYxYjhhZmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lci5jCisrKyBiL2tlcm5lbC90aW1lci5jCkBAIC05MCw4ICs5MCwxMyBAQAogCiAvKgogICogTm90ZSB0aGF0IGFsbCB0dmVjX2Jhc2VzIGFyZSAyIGJ5dGUgYWxpZ25lZCBhbmQgbG93ZXIgYml0IG9mCi0gKiBiYXNlIGluIHRpbWVyX2xpc3QgaXMgZ3VhcmFudGVlZCB0byBiZSB6ZXJvLiBVc2UgdGhlIExTQiBmb3IKLSAqIHRoZSBuZXcgZmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSB0aW1lciBpcyBkZWZlcnJhYmxlCisgKiBiYXNlIGluIHRpbWVyX2xpc3QgaXMgZ3VhcmFudGVlZCB0byBiZSB6ZXJvLiBVc2UgdGhlIExTQiB0bworICogaW5kaWNhdGUgd2hldGhlciB0aGUgdGltZXIgaXMgZGVmZXJyYWJsZS4KKyAqCisgKiBBIGRlZmVycmFibGUgdGltZXIgd2lsbCB3b3JrIG5vcm1hbGx5IHdoZW4gdGhlIHN5c3RlbSBpcyBidXN5LCBidXQKKyAqIHdpbGwgbm90IGNhdXNlIGEgQ1BVIHRvIGNvbWUgb3V0IG9mIGlkbGUganVzdCB0byBzZXJ2aWNlIGl0OyBpbnN0ZWFkLAorICogdGhlIHRpbWVyIHdpbGwgYmUgc2VydmljZWQgd2hlbiB0aGUgQ1BVIGV2ZW50dWFsbHkgd2FrZXMgdXAgd2l0aCBhCisgKiBzdWJzZXF1ZW50IG5vbi1kZWZlcnJhYmxlIHRpbWVyLgogICovCiAjZGVmaW5lIFRCQVNFX0RFRkVSUkFCTEVfRkxBRwkJKDB4MSkKIApAQCAtNTc3LDYgKzU4MiwxOSBAQAogCWxvY2tkZXBfaW5pdF9tYXAoJnRpbWVyLT5sb2NrZGVwX21hcCwgbmFtZSwga2V5LCAwKTsKIH0KIAordm9pZCBzZXR1cF9kZWZlcnJhYmxlX3RpbWVyX29uX3N0YWNrX2tleShzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsCisJCQkJCSBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXksCisJCQkJCSB2b2lkICgqZnVuY3Rpb24pKHVuc2lnbmVkIGxvbmcpLAorCQkJCQkgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXRpbWVyLT5mdW5jdGlvbiA9IGZ1bmN0aW9uOworCXRpbWVyLT5kYXRhID0gZGF0YTsKKwlpbml0X3RpbWVyX29uX3N0YWNrX2tleSh0aW1lciwgbmFtZSwga2V5KTsKKwl0aW1lcl9zZXRfZGVmZXJyYWJsZSh0aW1lcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzZXR1cF9kZWZlcnJhYmxlX3RpbWVyX29uX3N0YWNrX2tleSk7CisKIC8qKgogICogaW5pdF90aW1lcl9rZXkgLSBpbml0aWFsaXplIGEgdGltZXIKICAqIEB0aW1lcjogdGhlIHRpbWVyIHRvIGJlIGluaXRpYWxpemVkCkBAIC02NzksMTIgKzY5Nyw4IEBACiAJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfTk9fSFopICYmIGRlZmluZWQoQ09ORklHX1NNUCkKLQlpZiAoIXBpbm5lZCAmJiBnZXRfc3lzY3RsX3RpbWVyX21pZ3JhdGlvbigpICYmIGlkbGVfY3B1KGNwdSkpIHsKLQkJaW50IHByZWZlcnJlZF9jcHUgPSBnZXRfbm9oel9sb2FkX2JhbGFuY2VyKCk7Ci0KLQkJaWYgKHByZWZlcnJlZF9jcHUgPj0gMCkKLQkJCWNwdSA9IHByZWZlcnJlZF9jcHU7Ci0JfQorCWlmICghcGlubmVkICYmIGdldF9zeXNjdGxfdGltZXJfbWlncmF0aW9uKCkgJiYgaWRsZV9jcHUoY3B1KSkKKwkJY3B1ID0gZ2V0X25vaHpfdGltZXJfdGFyZ2V0KCk7CiAjZW5kaWYKIAluZXdfYmFzZSA9IHBlcl9jcHUodHZlY19iYXNlcywgY3B1KTsKIApAQCAtMTI4OSw3ICsxMzAzLDYgQEAKIHsKIAlocnRpbWVyX3J1bl9xdWV1ZXMoKTsKIAlyYWlzZV9zb2Z0aXJxKFRJTUVSX1NPRlRJUlEpOwotCXNvZnRsb2NrdXBfdGljaygpOwogfQogCiAvKgpAQCAtMTc1MCwzICsxNzYzLDI1IEBACiB9CiAKIEVYUE9SVF9TWU1CT0wobXNsZWVwX2ludGVycnVwdGlibGUpOworCitzdGF0aWMgaW50IF9fc2NoZWQgZG9fdXNsZWVwX3JhbmdlKHVuc2lnbmVkIGxvbmcgbWluLCB1bnNpZ25lZCBsb25nIG1heCkKK3sKKwlrdGltZV90IGttaW47CisJdW5zaWduZWQgbG9uZyBkZWx0YTsKKworCWttaW4gPSBrdGltZV9zZXQoMCwgbWluICogTlNFQ19QRVJfVVNFQyk7CisJZGVsdGEgPSAobWF4IC0gbWluKSAqIE5TRUNfUEVSX1VTRUM7CisJcmV0dXJuIHNjaGVkdWxlX2hydGltZW91dF9yYW5nZSgma21pbiwgZGVsdGEsIEhSVElNRVJfTU9ERV9SRUwpOworfQorCisvKioKKyAqIHVzbGVlcF9yYW5nZSAtIERyb3AgaW4gcmVwbGFjZW1lbnQgZm9yIHVkZWxheSB3aGVyZSB3YWtldXAgaXMgZmxleGlibGUKKyAqIEBtaW46IE1pbmltdW0gdGltZSBpbiB1c2VjcyB0byBzbGVlcAorICogQG1heDogTWF4aW11bSB0aW1lIGluIHVzZWNzIHRvIHNsZWVwCisgKi8KK3ZvaWQgdXNsZWVwX3JhbmdlKHVuc2lnbmVkIGxvbmcgbWluLCB1bnNpZ25lZCBsb25nIG1heCkKK3sKKwlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwlkb191c2xlZXBfcmFuZ2UobWluLCBtYXgpOworfQorRVhQT1JUX1NZTUJPTCh1c2xlZXBfcmFuZ2UpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL0tjb25maWcgYi9rZXJuZWwvdHJhY2UvS2NvbmZpZwppbmRleCA4YjE3OTdjLi42ZWI5N2JiIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvS2NvbmZpZworKysgYi9rZXJuZWwvdHJhY2UvS2NvbmZpZwpAQCAtMTUzLDcgKzE1Myw3IEBACiAJYm9vbCAiSW50ZXJydXB0cy1vZmYgTGF0ZW5jeSBUcmFjZXIiCiAJZGVmYXVsdCBuCiAJZGVwZW5kcyBvbiBUUkFDRV9JUlFGTEFHU19TVVBQT1JUCi0JZGVwZW5kcyBvbiBHRU5FUklDX1RJTUUKKwlkZXBlbmRzIG9uICFBUkNIX1VTRVNfR0VUVElNRU9GRlNFVAogCXNlbGVjdCBUUkFDRV9JUlFGTEFHUwogCXNlbGVjdCBHRU5FUklDX1RSQUNFUgogCXNlbGVjdCBUUkFDRVJfTUFYX1RSQUNFCkBAIC0xNzUsNyArMTc1LDcgQEAKIGNvbmZpZyBQUkVFTVBUX1RSQUNFUgogCWJvb2wgIlByZWVtcHRpb24tb2ZmIExhdGVuY3kgVHJhY2VyIgogCWRlZmF1bHQgbgotCWRlcGVuZHMgb24gR0VORVJJQ19USU1FCisJZGVwZW5kcyBvbiAhQVJDSF9VU0VTX0dFVFRJTUVPRkZTRVQKIAlkZXBlbmRzIG9uIFBSRUVNUFQKIAlzZWxlY3QgR0VORVJJQ19UUkFDRVIKIAlzZWxlY3QgVFJBQ0VSX01BWF9UUkFDRQpAQCAtMTk0LDE1ICsxOTQsNiBAQAogCSAgZW5hYmxlZC4gVGhpcyBvcHRpb24gYW5kIHRoZSBpcnFzLW9mZiB0aW1pbmcgb3B0aW9uIGNhbiBiZQogCSAgdXNlZCB0b2dldGhlciBvciBzZXBhcmF0ZWx5LikKIAotY29uZmlnIFNZU1BST0ZfVFJBQ0VSCi0JYm9vbCAiU3lzcHJvZiBUcmFjZXIiCi0JZGVwZW5kcyBvbiBYODYKLQlzZWxlY3QgR0VORVJJQ19UUkFDRVIKLQlzZWxlY3QgQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSCi0JaGVscAotCSAgVGhpcyB0cmFjZXIgcHJvdmlkZXMgdGhlIHRyYWNlIG5lZWRlZCBieSB0aGUgJ1N5c3Byb2YnIHVzZXJzcGFjZQotCSAgdG9vbC4KLQogY29uZmlnIFNDSEVEX1RSQUNFUgogCWJvb2wgIlNjaGVkdWxpbmcgTGF0ZW5jeSBUcmFjZXIiCiAJc2VsZWN0IEdFTkVSSUNfVFJBQ0VSCkBAIC0yMjksMjMgKzIyMCw2IEBACiAJaGVscAogCSAgQmFzaWMgdHJhY2VyIHRvIGNhdGNoIHRoZSBzeXNjYWxsIGVudHJ5IGFuZCBleGl0IGV2ZW50cy4KIAotY29uZmlnIEJPT1RfVFJBQ0VSCi0JYm9vbCAiVHJhY2UgYm9vdCBpbml0Y2FsbHMiCi0Jc2VsZWN0IEdFTkVSSUNfVFJBQ0VSCi0Jc2VsZWN0IENPTlRFWFRfU1dJVENIX1RSQUNFUgotCWhlbHAKLQkgIFRoaXMgdHJhY2VyIGhlbHBzIGRldmVsb3BlcnMgdG8gb3B0aW1pemUgYm9vdCB0aW1lczogaXQgcmVjb3JkcwotCSAgdGhlIHRpbWluZ3Mgb2YgdGhlIGluaXRjYWxscyBhbmQgdHJhY2VzIGtleSBldmVudHMgYW5kIHRoZSBpZGVudGl0eQotCSAgb2YgdGFza3MgdGhhdCBjYW4gY2F1c2UgYm9vdCBkZWxheXMsIHN1Y2ggYXMgY29udGV4dC1zd2l0Y2hlcy4KLQotCSAgSXRzIGFpbSBpcyB0byBiZSBwYXJzZWQgYnkgdGhlIHNjcmlwdHMvYm9vdGdyYXBoLnBsIHRvb2wgdG8KLQkgIHByb2R1Y2UgcHJldHR5IGdyYXBoaWNzIGFib3V0IGJvb3QgaW5lZmZpY2llbmNpZXMsIGdpdmluZyBhIHZpc3VhbAotCSAgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRlbGF5cyBkdXJpbmcgaW5pdGNhbGxzIC0gYnV0IHRoZSByYXcKLQkgIC9kZWJ1Zy90cmFjaW5nL3RyYWNlIHRleHQgb3V0cHV0IGlzIHJlYWRhYmxlIHRvby4KLQotCSAgWW91IG11c3QgcGFzcyBpbiBpbml0Y2FsbF9kZWJ1ZyBhbmQgZnRyYWNlPWluaXRjYWxsIHRvIHRoZSBrZXJuZWwKLQkgIGNvbW1hbmQgbGluZSB0byBlbmFibGUgdGhpcyBvbiBib290dXAuCi0KIGNvbmZpZyBUUkFDRV9CUkFOQ0hfUFJPRklMSU5HCiAJYm9vbAogCXNlbGVjdCBHRU5FUklDX1RSQUNFUgpAQCAtMzI1LDI4ICsyOTksNiBAQAogCiAJICBTYXkgTiBpZiB1bnN1cmUuCiAKLWNvbmZpZyBLU1lNX1RSQUNFUgotCWJvb2wgIlRyYWNlIHJlYWQgYW5kIHdyaXRlIGFjY2VzcyBvbiBrZXJuZWwgbWVtb3J5IGxvY2F0aW9ucyIKLQlkZXBlbmRzIG9uIEhBVkVfSFdfQlJFQUtQT0lOVAotCXNlbGVjdCBUUkFDSU5HCi0JaGVscAotCSAgVGhpcyB0cmFjZXIgaGVscHMgZmluZCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG9uIGFueSBnaXZlbiBrZXJuZWwKLQkgIHN5bWJvbCBpLmUuIC9wcm9jL2thbGxzeW1zLgotCi1jb25maWcgUFJPRklMRV9LU1lNX1RSQUNFUgotCWJvb2wgIlByb2ZpbGUgYWxsIGtlcm5lbCBtZW1vcnkgYWNjZXNzZXMgb24gJ3dhdGNoZWQnIHZhcmlhYmxlcyIKLQlkZXBlbmRzIG9uIEtTWU1fVFJBQ0VSCi0JaGVscAotCSAgVGhpcyB0cmFjZXIgcHJvZmlsZXMga2VybmVsIGFjY2Vzc2VzIG9uIHZhcmlhYmxlcyB3YXRjaGVkIHRocm91Z2ggdGhlCi0JICBrc3ltIHRyYWNlciBmdHJhY2UgcGx1Z2luLiBEZXBlbmRpbmcgdXBvbiB0aGUgaGFyZHdhcmUsIGFsbCByZWFkCi0JICBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvbiBrZXJuZWwgdmFyaWFibGVzIGNhbiBiZSBtb25pdG9yZWQgZm9yCi0JICBhY2Nlc3Nlcy4KLQotCSAgVGhlIHJlc3VsdHMgd2lsbCBiZSBkaXNwbGF5ZWQgaW46Ci0JICAvZGVidWdmcy90cmFjaW5nL3Byb2ZpbGVfa3N5bQotCi0JICBTYXkgTiBpZiB1bnN1cmUuCi0KIGNvbmZpZyBTVEFDS19UUkFDRVIKIAlib29sICJUcmFjZSBtYXggc3RhY2siCiAJZGVwZW5kcyBvbiBIQVZFX0ZVTkNUSU9OX1RSQUNFUgpAQCAtMzcxLDI2ICszMjMsNiBAQAogCiAJICBTYXkgTiBpZiB1bnN1cmUuCiAKLWNvbmZpZyBLTUVNVFJBQ0UKLQlib29sICJUcmFjZSBTTEFCIGFsbG9jYXRpb25zIgotCXNlbGVjdCBHRU5FUklDX1RSQUNFUgotCWhlbHAKLQkgIGttZW10cmFjZSBwcm92aWRlcyB0cmFjaW5nIGZvciBzbGFiIGFsbG9jYXRvciBmdW5jdGlvbnMsIHN1Y2ggYXMKLQkgIGttYWxsb2MsIGtmcmVlLCBrbWVtX2NhY2hlX2FsbG9jLCBrbWVtX2NhY2hlX2ZyZWUsIGV0Yy4gQ29sbGVjdGVkCi0JICBkYXRhIGlzIHRoZW4gZmVkIHRvIHRoZSB1c2Vyc3BhY2UgYXBwbGljYXRpb24gaW4gb3JkZXIgdG8gYW5hbHlzZQotCSAgYWxsb2NhdGlvbiBob3RzcG90cywgaW50ZXJuYWwgZnJhZ21lbnRhdGlvbiBhbmQgc28gb24sIG1ha2luZyBpdAotCSAgcG9zc2libGUgdG8gc2VlIGhvdyB3ZWxsIGFuIGFsbG9jYXRvciBwZXJmb3JtcywgYXMgd2VsbCBhcyBkZWJ1ZwotCSAgYW5kIHByb2ZpbGUga2VybmVsIGNvZGUuCi0KLQkgIFRoaXMgcmVxdWlyZXMgYW4gdXNlcnNwYWNlIGFwcGxpY2F0aW9uIHRvIHVzZS4gU2VlCi0JICBEb2N1bWVudGF0aW9uL3RyYWNlL2ttZW10cmFjZS50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0KLQkgIFNheWluZyBZIHdpbGwgbWFrZSB0aGUga2VybmVsIHNvbWV3aGF0IGxhcmdlciBhbmQgc2xvd2VyLiBIb3dldmVyLAotCSAgaWYgeW91IGRpc2FibGUga21lbXRyYWNlIGF0IHJ1bi10aW1lIG9yIGJvb3QtdGltZSwgdGhlIHBlcmZvcm1hbmNlCi0JICBpbXBhY3QgaXMgbWluaW1hbCAoZGVwZW5kaW5nIG9uIHRoZSBhcmNoIHRoZSBrZXJuZWwgaXMgYnVpbHQgZm9yKS4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQogY29uZmlnIFdPUktRVUVVRV9UUkFDRVIKIAlib29sICJUcmFjZSB3b3JrcXVldWVzIgogCXNlbGVjdCBHRU5FUklDX1RSQUNFUgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL01ha2VmaWxlIGIva2VybmVsL3RyYWNlL01ha2VmaWxlCmluZGV4IGZmYjFhNWIuLjUzZjMzODEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9NYWtlZmlsZQorKysgYi9rZXJuZWwvdHJhY2UvTWFrZWZpbGUKQEAgLTMwLDcgKzMwLDYgQEAKIG9iai0kKENPTkZJR19UUkFDSU5HKSArPSB0cmFjZV9zdGF0Lm8KIG9iai0kKENPTkZJR19UUkFDSU5HKSArPSB0cmFjZV9wcmludGsubwogb2JqLSQoQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUikgKz0gdHJhY2Vfc2NoZWRfc3dpdGNoLm8KLW9iai0kKENPTkZJR19TWVNQUk9GX1RSQUNFUikgKz0gdHJhY2Vfc3lzcHJvZi5vCiBvYmotJChDT05GSUdfRlVOQ1RJT05fVFJBQ0VSKSArPSB0cmFjZV9mdW5jdGlvbnMubwogb2JqLSQoQ09ORklHX0lSUVNPRkZfVFJBQ0VSKSArPSB0cmFjZV9pcnFzb2ZmLm8KIG9iai0kKENPTkZJR19QUkVFTVBUX1RSQUNFUikgKz0gdHJhY2VfaXJxc29mZi5vCkBAIC0zOCwxMCArMzcsOCBAQAogb2JqLSQoQ09ORklHX05PUF9UUkFDRVIpICs9IHRyYWNlX25vcC5vCiBvYmotJChDT05GSUdfU1RBQ0tfVFJBQ0VSKSArPSB0cmFjZV9zdGFjay5vCiBvYmotJChDT05GSUdfTU1JT1RSQUNFKSArPSB0cmFjZV9tbWlvdHJhY2Uubwotb2JqLSQoQ09ORklHX0JPT1RfVFJBQ0VSKSArPSB0cmFjZV9ib290Lm8KIG9iai0kKENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIpICs9IHRyYWNlX2Z1bmN0aW9uc19ncmFwaC5vCiBvYmotJChDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORykgKz0gdHJhY2VfYnJhbmNoLm8KLW9iai0kKENPTkZJR19LTUVNVFJBQ0UpICs9IGttZW10cmFjZS5vCiBvYmotJChDT05GSUdfV09SS1FVRVVFX1RSQUNFUikgKz0gdHJhY2Vfd29ya3F1ZXVlLm8KIG9iai0kKENPTkZJR19CTEtfREVWX0lPX1RSQUNFKSArPSBibGt0cmFjZS5vCiBpZmVxICgkKENPTkZJR19CTE9DSykseSkKQEAgLTU1LDcgKzUyLDkgQEAKIGVuZGlmCiBvYmotJChDT05GSUdfRVZFTlRfVFJBQ0lORykgKz0gdHJhY2VfZXZlbnRzX2ZpbHRlci5vCiBvYmotJChDT05GSUdfS1BST0JFX0VWRU5UKSArPSB0cmFjZV9rcHJvYmUubwotb2JqLSQoQ09ORklHX0tTWU1fVFJBQ0VSKSArPSB0cmFjZV9rc3ltLm8KIG9iai0kKENPTkZJR19FVkVOVF9UUkFDSU5HKSArPSBwb3dlci10cmFjZXMubworaWZlcSAoJChDT05GSUdfVFJBQ0lORykseSkKK29iai0kKENPTkZJR19LR0RCX0tEQikgKz0gdHJhY2Vfa2RiLm8KK2VuZGlmCiAKIGxpYmZ0cmFjZS15IDo9IGZ0cmFjZS5vCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvZnRyYWNlLmMgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKaW5kZXggNmQyY2IxNC4uMGQ4OGNlOSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9mdHJhY2UuYwpAQCAtMTg4Myw3ICsxODgzLDYgQEAKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGhkOwogCXN0cnVjdCBobGlzdF9ub2RlICpuOwogCXVuc2lnbmVkIGxvbmcga2V5OwotCWludCByZXNjaGVkOwogCiAJa2V5ID0gaGFzaF9sb25nKGlwLCBGVFJBQ0VfSEFTSF9CSVRTKTsKIApAQCAtMTg5NywxMiArMTg5NiwxMiBAQAogCSAqIHBlcmlvZC4gVGhpcyBzeW5jcyB0aGUgaGFzaCBpdGVyYXRpb24gYW5kIGZyZWVpbmcgb2YgaXRlbXMKIAkgKiBvbiB0aGUgaGFzaC4gcmN1X3JlYWRfbG9jayBpcyB0b28gZGFuZ2Vyb3VzIGhlcmUuCiAJICovCi0JcmVzY2hlZCA9IGZ0cmFjZV9wcmVlbXB0X2Rpc2FibGUoKTsKKwlwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgbiwgaGhkLCBub2RlKSB7CiAJCWlmIChlbnRyeS0+aXAgPT0gaXApCiAJCQllbnRyeS0+b3BzLT5mdW5jKGlwLCBwYXJlbnRfaXAsICZlbnRyeS0+ZGF0YSk7CiAJfQotCWZ0cmFjZV9wcmVlbXB0X2VuYWJsZShyZXNjaGVkKTsKKwlwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX29wcyB0cmFjZV9wcm9iZV9vcHMgX19yZWFkX21vc3RseSA9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2Uva21lbXRyYWNlLmMgYi9rZXJuZWwvdHJhY2Uva21lbXRyYWNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZmMxYmIuLjAwMDAwMDAKLS0tIGEva2VybmVsL3RyYWNlL2ttZW10cmFjZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTI5ICswLDAgQEAKLS8qCi0gKiBNZW1vcnkgYWxsb2NhdG9yIHRyYWNpbmcKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggRWR1YXJkIC0gR2FicmllbCBNdW50ZWFudQotICogQ29weXJpZ2h0IChDKSAyMDA4IFBla2thIEVuYmVyZyA8cGVuYmVyZ0Bjcy5oZWxzaW5raS5maT4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBGcmVkZXJpYyBXZWlzYmVja2VyIDxmd2Vpc2JlY0BnbWFpbC5jb20+Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9kY2FjaGUuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotCi0jaW5jbHVkZSA8bGludXgva21lbXRyYWNlLmg+Ci0KLSNpbmNsdWRlICJ0cmFjZV9vdXRwdXQuaCIKLSNpbmNsdWRlICJ0cmFjZS5oIgotCi0vKiBTZWxlY3QgYW4gYWx0ZXJuYXRpdmUsIG1pbmltYWxpc3RpYyBvdXRwdXQgdGhhbiB0aGUgb3JpZ2luYWwgb25lICovCi0jZGVmaW5lIFRSQUNFX0tNRU1fT1BUX01JTklNQUwJMHgxCi0KLXN0YXRpYyBzdHJ1Y3QgdHJhY2VyX29wdCBrbWVtX29wdHNbXSA9IHsKLQkvKiBEZWZhdWx0IGRpc2FibGUgdGhlIG1pbmltYWxpc3RpYyBvdXRwdXQgKi8KLQl7IFRSQUNFUl9PUFQoa21lbV9taW5pbWFsaXN0aWMsIFRSQUNFX0tNRU1fT1BUX01JTklNQUwpIH0sCi0JeyB9Ci19OwotCi1zdGF0aWMgc3RydWN0IHRyYWNlcl9mbGFncyBrbWVtX3RyYWNlcl9mbGFncyA9IHsKLQkudmFsCQkJPSAwLAotCS5vcHRzCQkJPSBrbWVtX29wdHMKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdHJhY2VfYXJyYXkgKmttZW10cmFjZV9hcnJheTsKLQotLyogVHJhY2UgYWxsb2NhdGlvbnMgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBrbWVtdHJhY2VfYWxsb2MoZW51bSBrbWVtdHJhY2VfdHlwZV9pZCB0eXBlX2lkLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgY2FsbF9zaXRlLAotCQkJCSAgIGNvbnN0IHZvaWQgKnB0ciwKLQkJCQkgICBzaXplX3QgYnl0ZXNfcmVxLAotCQkJCSAgIHNpemVfdCBieXRlc19hbGxvYywKLQkJCQkgICBnZnBfdCBnZnBfZmxhZ3MsCi0JCQkJICAgaW50IG5vZGUpCi17Ci0Jc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJmV2ZW50X2ttZW1fYWxsb2M7Ci0Jc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IGttZW10cmFjZV9hcnJheTsKLQlzdHJ1Y3Qga21lbXRyYWNlX2FsbG9jX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwotCi0JZXZlbnQgPSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHItPmJ1ZmZlciwgc2l6ZW9mKCplbnRyeSkpOwotCWlmICghZXZlbnQpCi0JCXJldHVybjsKLQotCWVudHJ5ID0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7Ci0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgMCwgMCk7Ci0KLQllbnRyeS0+ZW50LnR5cGUJCT0gVFJBQ0VfS01FTV9BTExPQzsKLQllbnRyeS0+dHlwZV9pZAkJPSB0eXBlX2lkOwotCWVudHJ5LT5jYWxsX3NpdGUJPSBjYWxsX3NpdGU7Ci0JZW50cnktPnB0cgkJPSBwdHI7Ci0JZW50cnktPmJ5dGVzX3JlcQk9IGJ5dGVzX3JlcTsKLQllbnRyeS0+Ynl0ZXNfYWxsb2MJPSBieXRlc19hbGxvYzsKLQllbnRyeS0+Z2ZwX2ZsYWdzCT0gZ2ZwX2ZsYWdzOwotCWVudHJ5LT5ub2RlCQk9IG5vZGU7Ci0KLQlpZiAoIWZpbHRlcl9jaGVja19kaXNjYXJkKGNhbGwsIGVudHJ5LCB0ci0+YnVmZmVyLCBldmVudCkpCi0JCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQpOwotCi0JdHJhY2Vfd2FrZV91cCgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQga21lbXRyYWNlX2ZyZWUoZW51bSBrbWVtdHJhY2VfdHlwZV9pZCB0eXBlX2lkLAotCQkJCSAgdW5zaWduZWQgbG9uZyBjYWxsX3NpdGUsCi0JCQkJICBjb25zdCB2b2lkICpwdHIpCi17Ci0Jc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJmV2ZW50X2ttZW1fZnJlZTsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0ga21lbXRyYWNlX2FycmF5OwotCXN0cnVjdCBrbWVtdHJhY2VfZnJlZV9lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKLQotCWV2ZW50ID0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHRyLT5idWZmZXIsIHNpemVvZigqZW50cnkpKTsKLQlpZiAoIWV2ZW50KQotCQlyZXR1cm47Ci0JZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZlbnRyeS0+ZW50LCAwLCAwKTsKLQotCWVudHJ5LT5lbnQudHlwZQkJPSBUUkFDRV9LTUVNX0ZSRUU7Ci0JZW50cnktPnR5cGVfaWQJCT0gdHlwZV9pZDsKLQllbnRyeS0+Y2FsbF9zaXRlCT0gY2FsbF9zaXRlOwotCWVudHJ5LT5wdHIJCT0gcHRyOwotCi0JaWYgKCFmaWx0ZXJfY2hlY2tfZGlzY2FyZChjYWxsLCBlbnRyeSwgdHItPmJ1ZmZlciwgZXZlbnQpKQotCQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50KTsKLQotCXRyYWNlX3dha2VfdXAoKTsKLX0KLQotc3RhdGljIHZvaWQga21lbXRyYWNlX2ttYWxsb2Modm9pZCAqaWdub3JlLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBjYWxsX3NpdGUsCi0JCQkgICAgICBjb25zdCB2b2lkICpwdHIsCi0JCQkgICAgICBzaXplX3QgYnl0ZXNfcmVxLAotCQkJICAgICAgc2l6ZV90IGJ5dGVzX2FsbG9jLAotCQkJICAgICAgZ2ZwX3QgZ2ZwX2ZsYWdzKQotewotCWttZW10cmFjZV9hbGxvYyhLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DLCBjYWxsX3NpdGUsIHB0ciwKLQkJCWJ5dGVzX3JlcSwgYnl0ZXNfYWxsb2MsIGdmcF9mbGFncywgLTEpOwotfQotCi1zdGF0aWMgdm9pZCBrbWVtdHJhY2Vfa21lbV9jYWNoZV9hbGxvYyh2b2lkICppZ25vcmUsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgY2FsbF9zaXRlLAotCQkJCSAgICAgICBjb25zdCB2b2lkICpwdHIsCi0JCQkJICAgICAgIHNpemVfdCBieXRlc19yZXEsCi0JCQkJICAgICAgIHNpemVfdCBieXRlc19hbGxvYywKLQkJCQkgICAgICAgZ2ZwX3QgZ2ZwX2ZsYWdzKQotewotCWttZW10cmFjZV9hbGxvYyhLTUVNVFJBQ0VfVFlQRV9DQUNIRSwgY2FsbF9zaXRlLCBwdHIsCi0JCQlieXRlc19yZXEsIGJ5dGVzX2FsbG9jLCBnZnBfZmxhZ3MsIC0xKTsKLX0KLQotc3RhdGljIHZvaWQga21lbXRyYWNlX2ttYWxsb2Nfbm9kZSh2b2lkICppZ25vcmUsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBjYWxsX3NpdGUsCi0JCQkJICAgY29uc3Qgdm9pZCAqcHRyLAotCQkJCSAgIHNpemVfdCBieXRlc19yZXEsCi0JCQkJICAgc2l6ZV90IGJ5dGVzX2FsbG9jLAotCQkJCSAgIGdmcF90IGdmcF9mbGFncywKLQkJCQkgICBpbnQgbm9kZSkKLXsKLQlrbWVtdHJhY2VfYWxsb2MoS01FTVRSQUNFX1RZUEVfS01BTExPQywgY2FsbF9zaXRlLCBwdHIsCi0JCQlieXRlc19yZXEsIGJ5dGVzX2FsbG9jLCBnZnBfZmxhZ3MsIG5vZGUpOwotfQotCi1zdGF0aWMgdm9pZCBrbWVtdHJhY2Vfa21lbV9jYWNoZV9hbGxvY19ub2RlKHZvaWQgKmlnbm9yZSwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgY2FsbF9zaXRlLAotCQkJCQkgICAgY29uc3Qgdm9pZCAqcHRyLAotCQkJCQkgICAgc2l6ZV90IGJ5dGVzX3JlcSwKLQkJCQkJICAgIHNpemVfdCBieXRlc19hbGxvYywKLQkJCQkJICAgIGdmcF90IGdmcF9mbGFncywKLQkJCQkJICAgIGludCBub2RlKQotewotCWttZW10cmFjZV9hbGxvYyhLTUVNVFJBQ0VfVFlQRV9DQUNIRSwgY2FsbF9zaXRlLCBwdHIsCi0JCQlieXRlc19yZXEsIGJ5dGVzX2FsbG9jLCBnZnBfZmxhZ3MsIG5vZGUpOwotfQotCi1zdGF0aWMgdm9pZAota21lbXRyYWNlX2tmcmVlKHZvaWQgKmlnbm9yZSwgdW5zaWduZWQgbG9uZyBjYWxsX3NpdGUsIGNvbnN0IHZvaWQgKnB0cikKLXsKLQlrbWVtdHJhY2VfZnJlZShLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DLCBjYWxsX3NpdGUsIHB0cik7Ci19Ci0KLXN0YXRpYyB2b2lkIGttZW10cmFjZV9rbWVtX2NhY2hlX2ZyZWUodm9pZCAqaWdub3JlLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgY2FsbF9zaXRlLCBjb25zdCB2b2lkICpwdHIpCi17Ci0Ja21lbXRyYWNlX2ZyZWUoS01FTVRSQUNFX1RZUEVfQ0FDSEUsIGNhbGxfc2l0ZSwgcHRyKTsKLX0KLQotc3RhdGljIGludCBrbWVtdHJhY2Vfc3RhcnRfcHJvYmVzKHZvaWQpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IHJlZ2lzdGVyX3RyYWNlX2ttYWxsb2Moa21lbXRyYWNlX2ttYWxsb2MsIE5VTEwpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JZXJyID0gcmVnaXN0ZXJfdHJhY2Vfa21lbV9jYWNoZV9hbGxvYyhrbWVtdHJhY2Vfa21lbV9jYWNoZV9hbGxvYywgTlVMTCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQllcnIgPSByZWdpc3Rlcl90cmFjZV9rbWFsbG9jX25vZGUoa21lbXRyYWNlX2ttYWxsb2Nfbm9kZSwgTlVMTCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQllcnIgPSByZWdpc3Rlcl90cmFjZV9rbWVtX2NhY2hlX2FsbG9jX25vZGUoa21lbXRyYWNlX2ttZW1fY2FjaGVfYWxsb2Nfbm9kZSwgTlVMTCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQllcnIgPSByZWdpc3Rlcl90cmFjZV9rZnJlZShrbWVtdHJhY2Vfa2ZyZWUsIE5VTEwpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JZXJyID0gcmVnaXN0ZXJfdHJhY2Vfa21lbV9jYWNoZV9mcmVlKGttZW10cmFjZV9rbWVtX2NhY2hlX2ZyZWUsIE5VTEwpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQga21lbXRyYWNlX3N0b3BfcHJvYmVzKHZvaWQpCi17Ci0JdW5yZWdpc3Rlcl90cmFjZV9rbWFsbG9jKGttZW10cmFjZV9rbWFsbG9jLCBOVUxMKTsKLQl1bnJlZ2lzdGVyX3RyYWNlX2ttZW1fY2FjaGVfYWxsb2Moa21lbXRyYWNlX2ttZW1fY2FjaGVfYWxsb2MsIE5VTEwpOwotCXVucmVnaXN0ZXJfdHJhY2Vfa21hbGxvY19ub2RlKGttZW10cmFjZV9rbWFsbG9jX25vZGUsIE5VTEwpOwotCXVucmVnaXN0ZXJfdHJhY2Vfa21lbV9jYWNoZV9hbGxvY19ub2RlKGttZW10cmFjZV9rbWVtX2NhY2hlX2FsbG9jX25vZGUsIE5VTEwpOwotCXVucmVnaXN0ZXJfdHJhY2Vfa2ZyZWUoa21lbXRyYWNlX2tmcmVlLCBOVUxMKTsKLQl1bnJlZ2lzdGVyX3RyYWNlX2ttZW1fY2FjaGVfZnJlZShrbWVtdHJhY2Vfa21lbV9jYWNoZV9mcmVlLCBOVUxMKTsKLX0KLQotc3RhdGljIGludCBrbWVtX3RyYWNlX2luaXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKLXsKLQlrbWVtdHJhY2VfYXJyYXkgPSB0cjsKLQotCXRyYWNpbmdfcmVzZXRfb25saW5lX2NwdXModHIpOwotCi0Ja21lbXRyYWNlX3N0YXJ0X3Byb2JlcygpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGttZW1fdHJhY2VfcmVzZXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKLXsKLQlrbWVtdHJhY2Vfc3RvcF9wcm9iZXMoKTsKLX0KLQotc3RhdGljIHZvaWQga21lbXRyYWNlX2hlYWRlcnMoc3RydWN0IHNlcV9maWxlICpzKQotewotCS8qIERvbid0IG5lZWQgaGVhZGVycyBmb3IgdGhlIG9yaWdpbmFsIGttZW10cmFjZSBvdXRwdXQgKi8KLQlpZiAoIShrbWVtX3RyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9LTUVNX09QVF9NSU5JTUFMKSkKLQkJcmV0dXJuOwotCi0Jc2VxX3ByaW50ZihzLCAiI1xuIik7Ci0Jc2VxX3ByaW50ZihzLCAiIyBBTExPQyAgVFlQRSAgUkVRICAgR0lWRU4gIEZMQUdTICAgICAiCi0JCQkiICAgICAgUE9JTlRFUiAgICAgICAgIE5PREUgICAgQ0FMTEVSXG4iKTsKLQlzZXFfcHJpbnRmKHMsICIjIEZSRUUgICB8ICAgICAgfCAgICAgfCAgICAgICB8ICAgICAgICIKLQkJCSIgICAgICAgfCAgIHwgICAgICAgICAgICB8ICAgICAgICB8XG4iKTsKLQlzZXFfcHJpbnRmKHMsICIjIHxcblxuIik7Ci19Ci0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBnaXZlIHRoZSBvcmlnaW5hbCBvdXRwdXQgZnJvbSBrbWVtdHJhY2UsCi0gKiBwbHVzIHRoZSBvcmlnaW4gQ1BVLCBzaW5jZSByZW9yZGVyaW5nIG9jY3VycyBpbi1rZXJuZWwgbm93LgotICovCi0KLSNkZWZpbmUgS01FTVRSQUNFX1VTRVJfQUxMT0MJMAotI2RlZmluZSBLTUVNVFJBQ0VfVVNFUl9GUkVFCTEKLQotc3RydWN0IGttZW10cmFjZV91c2VyX2V2ZW50IHsKLQl1OAkJCWV2ZW50X2lkOwotCXU4CQkJdHlwZV9pZDsKLQl1MTYJCQlldmVudF9zaXplOwotCXUzMgkJCWNwdTsKLQl1NjQJCQl0aW1lc3RhbXA7Ci0JdW5zaWduZWQgbG9uZwkJY2FsbF9zaXRlOwotCXVuc2lnbmVkIGxvbmcJCXB0cjsKLX07Ci0KLXN0cnVjdCBrbWVtdHJhY2VfdXNlcl9ldmVudF9hbGxvYyB7Ci0Jc2l6ZV90CQkJYnl0ZXNfcmVxOwotCXNpemVfdAkJCWJ5dGVzX2FsbG9jOwotCXVuc2lnbmVkCQlnZnBfZmxhZ3M7Ci0JaW50CQkJbm9kZTsKLX07Ci0KLXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAota21lbXRyYWNlX3ByaW50X2FsbG9jKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzLAotCQkgICAgICBzdHJ1Y3QgdHJhY2VfZXZlbnQgKmV2ZW50KQotewotCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOwotCXN0cnVjdCBrbWVtdHJhY2VfYWxsb2NfZW50cnkgKmVudHJ5OwotCWludCByZXQ7Ci0KLQl0cmFjZV9hc3NpZ25fdHlwZShlbnRyeSwgaXRlci0+ZW50KTsKLQotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgInR5cGVfaWQgJWQgY2FsbF9zaXRlICVwRiBwdHIgJWx1ICIKLQkgICAgImJ5dGVzX3JlcSAlbHUgYnl0ZXNfYWxsb2MgJWx1IGdmcF9mbGFncyAlbHUgbm9kZSAlZFxuIiwKLQkgICAgZW50cnktPnR5cGVfaWQsICh2b2lkICopZW50cnktPmNhbGxfc2l0ZSwgKHVuc2lnbmVkIGxvbmcpZW50cnktPnB0ciwKLQkgICAgKHVuc2lnbmVkIGxvbmcpZW50cnktPmJ5dGVzX3JlcSwgKHVuc2lnbmVkIGxvbmcpZW50cnktPmJ5dGVzX2FsbG9jLAotCSAgICAodW5zaWduZWQgbG9uZyllbnRyeS0+Z2ZwX2ZsYWdzLCBlbnRyeS0+bm9kZSk7Ci0KLQlpZiAoIXJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAota21lbXRyYWNlX3ByaW50X2ZyZWUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MsCi0JCSAgICAgc3RydWN0IHRyYWNlX2V2ZW50ICpldmVudCkKLXsKLQlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKLQlzdHJ1Y3Qga21lbXRyYWNlX2ZyZWVfZW50cnkgKmVudHJ5OwotCWludCByZXQ7Ci0KLQl0cmFjZV9hc3NpZ25fdHlwZShlbnRyeSwgaXRlci0+ZW50KTsKLQotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgInR5cGVfaWQgJWQgY2FsbF9zaXRlICVwRiBwdHIgJWx1XG4iLAotCQkJICAgICAgIGVudHJ5LT50eXBlX2lkLCAodm9pZCAqKWVudHJ5LT5jYWxsX3NpdGUsCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpZW50cnktPnB0cik7Ci0KLQlpZiAoIXJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAota21lbXRyYWNlX3ByaW50X2FsbG9jX3VzZXIoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MsCi0JCQkgICBzdHJ1Y3QgdHJhY2VfZXZlbnQgKmV2ZW50KQotewotCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOwotCXN0cnVjdCBrbWVtdHJhY2VfYWxsb2NfZW50cnkgKmVudHJ5OwotCXN0cnVjdCBrbWVtdHJhY2VfdXNlcl9ldmVudCAqZXY7Ci0Jc3RydWN0IGttZW10cmFjZV91c2VyX2V2ZW50X2FsbG9jICpldl9hbGxvYzsKLQotCXRyYWNlX2Fzc2lnbl90eXBlKGVudHJ5LCBpdGVyLT5lbnQpOwotCi0JZXYgPSB0cmFjZV9zZXFfcmVzZXJ2ZShzLCBzaXplb2YoKmV2KSk7Ci0JaWYgKCFldikKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCi0JZXYtPmV2ZW50X2lkCQk9IEtNRU1UUkFDRV9VU0VSX0FMTE9DOwotCWV2LT50eXBlX2lkCQk9IGVudHJ5LT50eXBlX2lkOwotCWV2LT5ldmVudF9zaXplCQk9IHNpemVvZigqZXYpICsgc2l6ZW9mKCpldl9hbGxvYyk7Ci0JZXYtPmNwdQkJCT0gaXRlci0+Y3B1OwotCWV2LT50aW1lc3RhbXAJCT0gaXRlci0+dHM7Ci0JZXYtPmNhbGxfc2l0ZQkJPSBlbnRyeS0+Y2FsbF9zaXRlOwotCWV2LT5wdHIJCQk9ICh1bnNpZ25lZCBsb25nKWVudHJ5LT5wdHI7Ci0KLQlldl9hbGxvYyA9IHRyYWNlX3NlcV9yZXNlcnZlKHMsIHNpemVvZigqZXZfYWxsb2MpKTsKLQlpZiAoIWV2X2FsbG9jKQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQlldl9hbGxvYy0+Ynl0ZXNfcmVxCT0gZW50cnktPmJ5dGVzX3JlcTsKLQlldl9hbGxvYy0+Ynl0ZXNfYWxsb2MJPSBlbnRyeS0+Ynl0ZXNfYWxsb2M7Ci0JZXZfYWxsb2MtPmdmcF9mbGFncwk9IGVudHJ5LT5nZnBfZmxhZ3M7Ci0JZXZfYWxsb2MtPm5vZGUJCT0gZW50cnktPm5vZGU7Ci0KLQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwotfQotCi1zdGF0aWMgZW51bSBwcmludF9saW5lX3QKLWttZW10cmFjZV9wcmludF9mcmVlX3VzZXIoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MsCi0JCQkgIHN0cnVjdCB0cmFjZV9ldmVudCAqZXZlbnQpCi17Ci0Jc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7Ci0Jc3RydWN0IGttZW10cmFjZV9mcmVlX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3Qga21lbXRyYWNlX3VzZXJfZXZlbnQgKmV2OwotCi0JdHJhY2VfYXNzaWduX3R5cGUoZW50cnksIGl0ZXItPmVudCk7Ci0KLQlldiA9IHRyYWNlX3NlcV9yZXNlcnZlKHMsIHNpemVvZigqZXYpKTsKLQlpZiAoIWV2KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQlldi0+ZXZlbnRfaWQJCT0gS01FTVRSQUNFX1VTRVJfRlJFRTsKLQlldi0+dHlwZV9pZAkJPSBlbnRyeS0+dHlwZV9pZDsKLQlldi0+ZXZlbnRfc2l6ZQkJPSBzaXplb2YoKmV2KTsKLQlldi0+Y3B1CQkJPSBpdGVyLT5jcHU7Ci0JZXYtPnRpbWVzdGFtcAkJPSBpdGVyLT50czsKLQlldi0+Y2FsbF9zaXRlCQk9IGVudHJ5LT5jYWxsX3NpdGU7Ci0JZXYtPnB0cgkJCT0gKHVuc2lnbmVkIGxvbmcpZW50cnktPnB0cjsKLQotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci19Ci0KLS8qIFRoZSB0d28gb3RoZXIgZm9sbG93aW5nIHByb3ZpZGUgYSBtb3JlIG1pbmltYWxpc3RpYyBvdXRwdXQgKi8KLXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAota21lbXRyYWNlX3ByaW50X2FsbG9jX2NvbXByZXNzKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKLXsKLQlzdHJ1Y3Qga21lbXRyYWNlX2FsbG9jX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKLQlpbnQgcmV0OwotCi0JdHJhY2VfYXNzaWduX3R5cGUoZW50cnksIGl0ZXItPmVudCk7Ci0KLQkvKiBBbGxvYyBlbnRyeSAqLwotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiAgKyAgICAgICIpOwotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQkvKiBUeXBlICovCi0Jc3dpdGNoIChlbnRyeS0+dHlwZV9pZCkgewotCWNhc2UgS01FTVRSQUNFX1RZUEVfS01BTExPQzoKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiSyAgICIpOwotCQlicmVhazsKLQljYXNlIEtNRU1UUkFDRV9UWVBFX0NBQ0hFOgotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJDICAgIik7Ci0JCWJyZWFrOwotCWNhc2UgS01FTVRSQUNFX1RZUEVfUEFHRVM6Ci0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlAgICAiKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiPyAgICIpOwotCX0KLQotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQkvKiBSZXF1ZXN0ZWQgKi8KLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlNHp1ICAgIiwgZW50cnktPmJ5dGVzX3JlcSk7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQotCS8qIEFsbG9jYXRlZCAqLwotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiU0enUgICAiLCBlbnRyeS0+Ynl0ZXNfYWxsb2MpOwotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQkvKiBGbGFncwotCSAqIFRPRE86IHdvdWxkIGJlIGJldHRlciB0byBzZWUgdGhlIG5hbWUgb2YgdGhlIEdGUCBmbGFnIG5hbWVzCi0JICovCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJTA4eCAgICIsIGVudHJ5LT5nZnBfZmxhZ3MpOwotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQkvKiBQb2ludGVyIHRvIGFsbG9jYXRlZCAqLwotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIjB4JXR4ICAgIiwgKHB0cmRpZmZfdCllbnRyeS0+cHRyKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCi0JLyogTm9kZSBhbmQgY2FsbCBzaXRlKi8KLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlNGQgICAlcGZcbiIsIGVudHJ5LT5ub2RlLAotCQkJCQkJICh2b2lkICopZW50cnktPmNhbGxfc2l0ZSk7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAota21lbXRyYWNlX3ByaW50X2ZyZWVfY29tcHJlc3Moc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQotewotCXN0cnVjdCBrbWVtdHJhY2VfZnJlZV9lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7Ci0JaW50IHJldDsKLQotCXRyYWNlX2Fzc2lnbl90eXBlKGVudHJ5LCBpdGVyLT5lbnQpOwotCi0JLyogRnJlZSBlbnRyeSAqLwotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiAgLSAgICAgICIpOwotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQkvKiBUeXBlICovCi0Jc3dpdGNoIChlbnRyeS0+dHlwZV9pZCkgewotCWNhc2UgS01FTVRSQUNFX1RZUEVfS01BTExPQzoKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiSyAgICAgIik7Ci0JCWJyZWFrOwotCWNhc2UgS01FTVRSQUNFX1RZUEVfQ0FDSEU6Ci0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIkMgICAgICIpOwotCQlicmVhazsKLQljYXNlIEtNRU1UUkFDRV9UWVBFX1BBR0VTOgotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJQICAgICAiKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiPyAgICAgIik7Ci0JfQotCi0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQotCS8qIFNraXAgcmVxdWVzdGVkL2FsbG9jYXRlZC9mbGFncyAqLwotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiAgICAgICAgICAgICAgICAgICAgICAgIik7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQotCS8qIFBvaW50ZXIgdG8gYWxsb2NhdGVkICovCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiMHgldHggICAiLCAocHRyZGlmZl90KWVudHJ5LT5wdHIpOwotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQkvKiBTa2lwIG5vZGUgYW5kIHByaW50IGNhbGwgc2l0ZSovCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICAgICAgICVwZlxuIiwgKHZvaWQgKillbnRyeS0+Y2FsbF9zaXRlKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCi0JcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKLX0KLQotc3RhdGljIGVudW0gcHJpbnRfbGluZV90IGttZW10cmFjZV9wcmludF9saW5lKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKLXsKLQlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5ID0gaXRlci0+ZW50OwotCi0JaWYgKCEoa21lbV90cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfS01FTV9PUFRfTUlOSU1BTCkpCi0JCXJldHVybiBUUkFDRV9UWVBFX1VOSEFORExFRDsKLQotCXN3aXRjaCAoZW50cnktPnR5cGUpIHsKLQljYXNlIFRSQUNFX0tNRU1fQUxMT0M6Ci0JCXJldHVybiBrbWVtdHJhY2VfcHJpbnRfYWxsb2NfY29tcHJlc3MoaXRlcik7Ci0JY2FzZSBUUkFDRV9LTUVNX0ZSRUU6Ci0JCXJldHVybiBrbWVtdHJhY2VfcHJpbnRfZnJlZV9jb21wcmVzcyhpdGVyKTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gVFJBQ0VfVFlQRV9VTkhBTkRMRUQ7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50X2Z1bmN0aW9ucyBrbWVtX3RyYWNlX2FsbG9jX2Z1bmNzID0gewotCS50cmFjZQkJCT0ga21lbXRyYWNlX3ByaW50X2FsbG9jLAotCS5iaW5hcnkJCQk9IGttZW10cmFjZV9wcmludF9hbGxvY191c2VyLAotfTsKLQotc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCBrbWVtX3RyYWNlX2FsbG9jID0gewotCS50eXBlCQkJPSBUUkFDRV9LTUVNX0FMTE9DLAotCS5mdW5jcwkJCT0gJmttZW1fdHJhY2VfYWxsb2NfZnVuY3MsCi19OwotCi1zdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50X2Z1bmN0aW9ucyBrbWVtX3RyYWNlX2ZyZWVfZnVuY3MgPSB7Ci0JLnRyYWNlCQkJPSBrbWVtdHJhY2VfcHJpbnRfZnJlZSwKLQkuYmluYXJ5CQkJPSBrbWVtdHJhY2VfcHJpbnRfZnJlZV91c2VyLAotfTsKLQotc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCBrbWVtX3RyYWNlX2ZyZWUgPSB7Ci0JLnR5cGUJCQk9IFRSQUNFX0tNRU1fRlJFRSwKLQkuZnVuY3MJCQk9ICZrbWVtX3RyYWNlX2ZyZWVfZnVuY3MsCi19OwotCi1zdGF0aWMgc3RydWN0IHRyYWNlciBrbWVtX3RyYWNlciBfX3JlYWRfbW9zdGx5ID0gewotCS5uYW1lCQkJPSAia21lbXRyYWNlIiwKLQkuaW5pdAkJCT0ga21lbV90cmFjZV9pbml0LAotCS5yZXNldAkJCT0ga21lbV90cmFjZV9yZXNldCwKLQkucHJpbnRfbGluZQkJPSBrbWVtdHJhY2VfcHJpbnRfbGluZSwKLQkucHJpbnRfaGVhZGVyCQk9IGttZW10cmFjZV9oZWFkZXJzLAotCS5mbGFncwkJCT0gJmttZW1fdHJhY2VyX2ZsYWdzCi19OwotCi12b2lkIGttZW10cmFjZV9pbml0KHZvaWQpCi17Ci0JLyogZWFybGllc3Qgb3Bwb3J0dW5pdHkgdG8gc3RhcnQga21lbSB0cmFjaW5nICovCi19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfa21lbV90cmFjZXIodm9pZCkKLXsKLQlpZiAoIXJlZ2lzdGVyX2Z0cmFjZV9ldmVudCgma21lbV90cmFjZV9hbGxvYykpIHsKLQkJcHJfd2FybmluZygiV2FybmluZzogY291bGQgbm90IHJlZ2lzdGVyIGttZW0gZXZlbnRzXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKCFyZWdpc3Rlcl9mdHJhY2VfZXZlbnQoJmttZW1fdHJhY2VfZnJlZSkpIHsKLQkJcHJfd2FybmluZygiV2FybmluZzogY291bGQgbm90IHJlZ2lzdGVyIGttZW0gZXZlbnRzXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKHJlZ2lzdGVyX3RyYWNlcigma21lbV90cmFjZXIpICE9IDApIHsKLQkJcHJfd2FybmluZygiV2FybmluZzogY291bGQgbm90IHJlZ2lzdGVyIHRoZSBrbWVtIHRyYWNlclxuIik7Ci0JCXJldHVybiAxOwotCX0KLQotCXJldHVybiAwOwotfQotZGV2aWNlX2luaXRjYWxsKGluaXRfa21lbV90cmFjZXIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwppbmRleCAxZGE3YjZlLi4zNjMyY2U4IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYworKysgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwpAQCAtNDQzLDYgKzQ0Myw3IEBACiAgKi8KIHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1IHsKIAlpbnQJCQkJY3B1OworCWF0b21pY190CQkJcmVjb3JkX2Rpc2FibGVkOwogCXN0cnVjdCByaW5nX2J1ZmZlcgkJKmJ1ZmZlcjsKIAlzcGlubG9ja190CQkJcmVhZGVyX2xvY2s7CS8qIHNlcmlhbGl6ZSByZWFkZXJzICovCiAJYXJjaF9zcGlubG9ja190CQkJbG9jazsKQEAgLTQ2Miw3ICs0NjMsNiBAQAogCXVuc2lnbmVkIGxvbmcJCQlyZWFkOwogCXU2NAkJCQl3cml0ZV9zdGFtcDsKIAl1NjQJCQkJcmVhZF9zdGFtcDsKLQlhdG9taWNfdAkJCXJlY29yZF9kaXNhYmxlZDsKIH07CiAKIHN0cnVjdCByaW5nX2J1ZmZlciB7CkBAIC0yMjQyLDggKzIyNDIsNiBAQAogCiAjZW5kaWYKIAotc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgcmJfbmVlZF9yZXNjaGVkKTsKLQogLyoqCiAgKiByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUgLSByZXNlcnZlIGEgcGFydCBvZiB0aGUgYnVmZmVyCiAgKiBAYnVmZmVyOiB0aGUgcmluZyBidWZmZXIgdG8gcmVzZXJ2ZSBmcm9tCkBAIC0yMjY0LDEzICsyMjYyLDEzIEBACiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKLQlpbnQgY3B1LCByZXNjaGVkOworCWludCBjcHU7CiAKIAlpZiAocmluZ19idWZmZXJfZmxhZ3MgIT0gUkJfQlVGRkVSU19PTikKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKiBJZiB3ZSBhcmUgdHJhY2luZyBzY2hlZHVsZSwgd2UgZG9uJ3Qgd2FudCB0byByZWN1cnNlICovCi0JcmVzY2hlZCA9IGZ0cmFjZV9wcmVlbXB0X2Rpc2FibGUoKTsKKwlwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpOwogCiAJaWYgKGF0b21pY19yZWFkKCZidWZmZXItPnJlY29yZF9kaXNhYmxlZCkpCiAJCWdvdG8gb3V0X25vY2hlY2s7CkBAIC0yMjk1LDIxICsyMjkzLDEzIEBACiAJaWYgKCFldmVudCkKIAkJZ290byBvdXQ7CiAKLQkvKgotCSAqIE5lZWQgdG8gc3RvcmUgcmVzY2hlZCBzdGF0ZSBvbiB0aGlzIGNwdS4KLQkgKiBPbmx5IHRoZSBmaXJzdCBuZWVkcyB0by4KLQkgKi8KLQotCWlmIChwcmVlbXB0X2NvdW50KCkgPT0gMSkKLQkJcGVyX2NwdShyYl9uZWVkX3Jlc2NoZWQsIGNwdSkgPSByZXNjaGVkOwotCiAJcmV0dXJuIGV2ZW50OwogCiAgb3V0OgogCXRyYWNlX3JlY3Vyc2l2ZV91bmxvY2soKTsKIAogIG91dF9ub2NoZWNrOgotCWZ0cmFjZV9wcmVlbXB0X2VuYWJsZShyZXNjaGVkKTsKKwlwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7CiAJcmV0dXJuIE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUpOwpAQCAtMjM1NSwxMyArMjM0NSw3IEBACiAKIAl0cmFjZV9yZWN1cnNpdmVfdW5sb2NrKCk7CiAKLQkvKgotCSAqIE9ubHkgdGhlIGxhc3QgcHJlZW1wdCBjb3VudCBuZWVkcyB0byByZXN0b3JlIHByZWVtcHRpb24uCi0JICovCi0JaWYgKHByZWVtcHRfY291bnQoKSA9PSAxKQotCQlmdHJhY2VfcHJlZW1wdF9lbmFibGUocGVyX2NwdShyYl9uZWVkX3Jlc2NoZWQsIGNwdSkpOwotCWVsc2UKLQkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZF9ub3RyYWNlKCk7CisJcHJlZW1wdF9lbmFibGVfbm90cmFjZSgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNDY5LDEzICsyNDUzLDcgQEAKIAogCXRyYWNlX3JlY3Vyc2l2ZV91bmxvY2soKTsKIAotCS8qCi0JICogT25seSB0aGUgbGFzdCBwcmVlbXB0IGNvdW50IG5lZWRzIHRvIHJlc3RvcmUgcHJlZW1wdGlvbi4KLQkgKi8KLQlpZiAocHJlZW1wdF9jb3VudCgpID09IDEpCi0JCWZ0cmFjZV9wcmVlbXB0X2VuYWJsZShwZXJfY3B1KHJiX25lZWRfcmVzY2hlZCwgY3B1KSk7Ci0JZWxzZQotCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkX25vdHJhY2UoKTsKKwlwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7CiAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX2Rpc2NhcmRfY29tbWl0KTsKQEAgLTI1MDEsMTIgKzI0NzksMTIgQEAKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXZvaWQgKmJvZHk7CiAJaW50IHJldCA9IC1FQlVTWTsKLQlpbnQgY3B1LCByZXNjaGVkOworCWludCBjcHU7CiAKIAlpZiAocmluZ19idWZmZXJfZmxhZ3MgIT0gUkJfQlVGRkVSU19PTikKIAkJcmV0dXJuIC1FQlVTWTsKIAotCXJlc2NoZWQgPSBmdHJhY2VfcHJlZW1wdF9kaXNhYmxlKCk7CisJcHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTsKIAogCWlmIChhdG9taWNfcmVhZCgmYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpKQogCQlnb3RvIG91dDsKQEAgLTI1MzYsNyArMjUxNCw3IEBACiAKIAlyZXQgPSAwOwogIG91dDoKLQlmdHJhY2VfcHJlZW1wdF9lbmFibGUocmVzY2hlZCk7CisJcHJlZW1wdF9lbmFibGVfbm90cmFjZSgpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKaW5kZXggMDg2ZDM2My4uZWQxMDMyZCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKQEAgLTEwMSwxMCArMTAxLDcgQEAKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQogCi1zdGF0aWMgY3B1bWFza192YXJfdCBfX3JlYWRfbW9zdGx5CXRyYWNpbmdfYnVmZmVyX21hc2s7Ci0KLSNkZWZpbmUgZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KQlcCi0JZm9yX2VhY2hfY3B1KGNwdSwgdHJhY2luZ19idWZmZXJfbWFzaykKK2NwdW1hc2tfdmFyX3QgX19yZWFkX21vc3RseQl0cmFjaW5nX2J1ZmZlcl9tYXNrOwogCiAvKgogICogZnRyYWNlX2R1bXBfb25fb29wcyAtIHZhcmlhYmxlIHRvIGR1bXAgZnRyYWNlIGJ1ZmZlciBvbiBvb3BzCkBAIC0zNDQsNyArMzQxLDcgQEAKIC8qIHRyYWNlX2ZsYWdzIGhvbGRzIHRyYWNlX29wdGlvbnMgZGVmYXVsdCB2YWx1ZXMgKi8KIHVuc2lnbmVkIGxvbmcgdHJhY2VfZmxhZ3MgPSBUUkFDRV9JVEVSX1BSSU5UX1BBUkVOVCB8IFRSQUNFX0lURVJfUFJJTlRLIHwKIAlUUkFDRV9JVEVSX0FOTk9UQVRFIHwgVFJBQ0VfSVRFUl9DT05URVhUX0lORk8gfCBUUkFDRV9JVEVSX1NMRUVQX1RJTUUgfAotCVRSQUNFX0lURVJfR1JBUEhfVElNRTsKKwlUUkFDRV9JVEVSX0dSQVBIX1RJTUUgfCBUUkFDRV9JVEVSX1JFQ09SRF9DTUQ7CiAKIHN0YXRpYyBpbnQgdHJhY2Vfc3RvcF9jb3VudDsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodHJhY2luZ19zdGFydF9sb2NrKTsKQEAgLTQyOCw2ICs0MjUsNyBAQAogCSJsYXRlbmN5LWZvcm1hdCIsCiAJInNsZWVwLXRpbWUiLAogCSJncmFwaC10aW1lIiwKKwkicmVjb3JkLWNtZCIsCiAJTlVMTAogfTsKIApAQCAtNjU5LDYgKzY1NywxMCBAQAogCQlyZXR1cm47CiAKIAlXQVJOX09OX09OQ0UoIWlycXNfZGlzYWJsZWQoKSk7CisJaWYgKCFjdXJyZW50X3RyYWNlLT51c2VfbWF4X3RyKSB7CisJCVdBUk5fT05fT05DRSgxKTsKKwkJcmV0dXJuOworCX0KIAlhcmNoX3NwaW5fbG9jaygmZnRyYWNlX21heF9sb2NrKTsKIAogCXRyLT5idWZmZXIgPSBtYXhfdHIuYnVmZmVyOwpAQCAtNjg1LDYgKzY4NywxMSBAQAogCQlyZXR1cm47CiAKIAlXQVJOX09OX09OQ0UoIWlycXNfZGlzYWJsZWQoKSk7CisJaWYgKCFjdXJyZW50X3RyYWNlLT51c2VfbWF4X3RyKSB7CisJCVdBUk5fT05fT05DRSgxKTsKKwkJcmV0dXJuOworCX0KKwogCWFyY2hfc3Bpbl9sb2NrKCZmdHJhY2VfbWF4X2xvY2spOwogCiAJZnRyYWNlX2Rpc2FibGVfY3B1KCk7CkBAIC03MjksNyArNzM2LDcgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlmIChzdHJsZW4odHlwZS0+bmFtZSkgPiBNQVhfVFJBQ0VSX1NJWkUpIHsKKwlpZiAoc3RybGVuKHR5cGUtPm5hbWUpID49IE1BWF9UUkFDRVJfU0laRSkgewogCQlwcl9pbmZvKCJUcmFjZXIgaGFzIGEgbmFtZSBsb25nZXIgdGhhbiAlZFxuIiwgTUFYX1RSQUNFUl9TSVpFKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTEzMzEsNjEgKzEzMzgsNiBAQAogCiAjZW5kaWYgLyogQ09ORklHX1NUQUNLVFJBQ0UgKi8KIAotc3RhdGljIHZvaWQKLWZ0cmFjZV90cmFjZV9zcGVjaWFsKHZvaWQgKl9fdHIsCi0JCSAgICAgdW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywKLQkJICAgICBpbnQgcGMpCi17Ci0Jc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJmV2ZW50X3NwZWNpYWw7Ci0Jc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gX190cjsKLQlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciA9IHRyLT5idWZmZXI7Ci0Jc3RydWN0IHNwZWNpYWxfZW50cnkgKmVudHJ5OwotCi0JZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfU1BFQ0lBTCwKLQkJCQkJICBzaXplb2YoKmVudHJ5KSwgMCwgcGMpOwotCWlmICghZXZlbnQpCi0JCXJldHVybjsKLQllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwotCWVudHJ5LT5hcmcxCQkJPSBhcmcxOwotCWVudHJ5LT5hcmcyCQkJPSBhcmcyOwotCWVudHJ5LT5hcmczCQkJPSBhcmczOwotCi0JaWYgKCFmaWx0ZXJfY2hlY2tfZGlzY2FyZChjYWxsLCBlbnRyeSwgYnVmZmVyLCBldmVudCkpCi0JCXRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwgZXZlbnQsIDAsIHBjKTsKLX0KLQotdm9pZAotX190cmFjZV9zcGVjaWFsKHZvaWQgKl9fdHIsIHZvaWQgKl9fZGF0YSwKLQkJdW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMykKLXsKLQlmdHJhY2VfdHJhY2Vfc3BlY2lhbChfX3RyLCBhcmcxLCBhcmcyLCBhcmczLCBwcmVlbXB0X2NvdW50KCkpOwotfQotCi12b2lkCi1mdHJhY2Vfc3BlY2lhbCh1bnNpZ25lZCBsb25nIGFyZzEsIHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczKQotewotCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSAmZ2xvYmFsX3RyYWNlOwotCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgY3B1OwotCWludCBwYzsKLQotCWlmICh0cmFjaW5nX2Rpc2FibGVkKQotCQlyZXR1cm47Ci0KLQlwYyA9IHByZWVtcHRfY291bnQoKTsKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKLQlkYXRhID0gdHItPmRhdGFbY3B1XTsKLQotCWlmIChsaWtlbHkoYXRvbWljX2luY19yZXR1cm4oJmRhdGEtPmRpc2FibGVkKSA9PSAxKSkKLQkJZnRyYWNlX3RyYWNlX3NwZWNpYWwodHIsIGFyZzEsIGFyZzIsIGFyZzMsIHBjKTsKLQotCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KIC8qKgogICogdHJhY2VfdmJwcmludGsgLSB3cml0ZSBiaW5hcnkgbXNnIHRvIHRyYWNpbmcgYnVmZmVyCiAgKgpAQCAtMTQwNCw3ICsxMzU2LDYgQEAKIAlzdHJ1Y3QgYnByaW50X2VudHJ5ICplbnRyeTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBkaXNhYmxlOwotCWludCByZXNjaGVkOwogCWludCBjcHUsIGxlbiA9IDAsIHNpemUsIHBjOwogCiAJaWYgKHVubGlrZWx5KHRyYWNpbmdfc2VsZnRlc3RfcnVubmluZyB8fCB0cmFjaW5nX2Rpc2FibGVkKSkKQEAgLTE0MTQsNyArMTM2NSw3IEBACiAJcGF1c2VfZ3JhcGhfdHJhY2luZygpOwogCiAJcGMgPSBwcmVlbXB0X2NvdW50KCk7Ci0JcmVzY2hlZCA9IGZ0cmFjZV9wcmVlbXB0X2Rpc2FibGUoKTsKKwlwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpOwogCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CiAJZGF0YSA9IHRyLT5kYXRhW2NwdV07CiAKQEAgLTE0NTIsNyArMTQwMyw3IEBACiAKIG91dDoKIAlhdG9taWNfZGVjX3JldHVybigmZGF0YS0+ZGlzYWJsZWQpOwotCWZ0cmFjZV9wcmVlbXB0X2VuYWJsZShyZXNjaGVkKTsKKwlwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7CiAJdW5wYXVzZV9ncmFwaF90cmFjaW5nKCk7CiAKIAlyZXR1cm4gbGVuOwpAQCAtMTUzOSwxMSArMTQ5MCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cmFjZV92cHJpbnRrKTsKIAotZW51bSB0cmFjZV9maWxlX3R5cGUgewotCVRSQUNFX0ZJTEVfTEFUX0ZNVAk9IDEsCi0JVFJBQ0VfRklMRV9BTk5PVEFURQk9IDIsCi19OwotCiBzdGF0aWMgdm9pZCB0cmFjZV9pdGVyYXRvcl9pbmNyZW1lbnQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQogewogCS8qIERvbid0IGFsbG93IGZ0cmFjZSB0byB0cmFjZSBpbnRvIHRoZSByaW5nIGJ1ZmZlcnMgKi8KQEAgLTE2NDEsNyArMTU4Nyw3IEBACiB9CiAKIC8qIEZpbmQgdGhlIG5leHQgcmVhbCBlbnRyeSwgYW5kIGluY3JlbWVudCB0aGUgaXRlcmF0b3IgdG8gdGhlIG5leHQgZW50cnkgKi8KLXN0YXRpYyB2b2lkICpmaW5kX25leHRfZW50cnlfaW5jKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKK3ZvaWQgKnRyYWNlX2ZpbmRfbmV4dF9lbnRyeV9pbmMoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQogewogCWl0ZXItPmVudCA9IF9fZmluZF9uZXh0X2VudHJ5KGl0ZXIsICZpdGVyLT5jcHUsCiAJCQkJICAgICAgJml0ZXItPmxvc3RfZXZlbnRzLCAmaXRlci0+dHMpOwpAQCAtMTY3NiwxOSArMTYyMiwxOSBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWlmIChpdGVyLT5pZHggPCAwKQotCQllbnQgPSBmaW5kX25leHRfZW50cnlfaW5jKGl0ZXIpOworCQllbnQgPSB0cmFjZV9maW5kX25leHRfZW50cnlfaW5jKGl0ZXIpOwogCWVsc2UKIAkJZW50ID0gaXRlcjsKIAogCXdoaWxlIChlbnQgJiYgaXRlci0+aWR4IDwgaSkKLQkJZW50ID0gZmluZF9uZXh0X2VudHJ5X2luYyhpdGVyKTsKKwkJZW50ID0gdHJhY2VfZmluZF9uZXh0X2VudHJ5X2luYyhpdGVyKTsKIAogCWl0ZXItPnBvcyA9ICpwb3M7CiAKIAlyZXR1cm4gZW50OwogfQogCi1zdGF0aWMgdm9pZCB0cmFjaW5nX2l0ZXJfcmVzZXQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgY3B1KQordm9pZCB0cmFjaW5nX2l0ZXJfcmVzZXQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgY3B1KQogewogCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBpdGVyLT50cjsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwpAQCAtMjA0OSw3ICsxOTk1LDcgQEAKIH0KIAogLyogIENhbGxlZCB3aXRoIHRyYWNlX2V2ZW50X3JlYWRfbG9jaygpIGhlbGQuICovCi1zdGF0aWMgZW51bSBwcmludF9saW5lX3QgcHJpbnRfdHJhY2VfbGluZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCitlbnVtIHByaW50X2xpbmVfdCBwcmludF90cmFjZV9saW5lKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKIHsKIAllbnVtIHByaW50X2xpbmVfdCByZXQ7CiAKQEAgLTIzOTQsNiArMjM0MCw3IEBACiAJLm9wZW4JCT0gc2hvd190cmFjZXNfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAogfTsKIAogLyoKQEAgLTI0ODcsNiArMjQzNCw3IEBACiAJLm9wZW4JCT0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCiAJLnJlYWQJCT0gdHJhY2luZ19jcHVtYXNrX3JlYWQsCiAJLndyaXRlCQk9IHRyYWNpbmdfY3B1bWFza193cml0ZSwKKwkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiB9OwogCiBzdGF0aWMgaW50IHRyYWNpbmdfdHJhY2Vfb3B0aW9uc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKQEAgLTI1NjIsNiArMjUxMCw5IEBACiAJCXRyYWNlX2ZsYWdzIHw9IG1hc2s7CiAJZWxzZQogCQl0cmFjZV9mbGFncyAmPSB+bWFzazsKKworCWlmIChtYXNrID09IFRSQUNFX0lURVJfUkVDT1JEX0NNRCkKKwkJdHJhY2VfZXZlbnRfZW5hYmxlX2NtZF9yZWNvcmQoZW5hYmxlZCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC0yNjUzLDYgKzI2MDQsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19yZWFkbWVfZm9wcyA9IHsKIAkub3BlbgkJPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKIAkucmVhZAkJPSB0cmFjaW5nX3JlYWRtZV9yZWFkLAorCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIH07CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC0yNzAzLDYgKzI2NTUsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19zYXZlZF9jbWRsaW5lc19mb3BzID0gewogICAgIC5vcGVuICAgICAgID0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCiAgICAgLnJlYWQgICAgICAgPSB0cmFjaW5nX3NhdmVkX2NtZGxpbmVzX3JlYWQsCisgICAgLmxsc2Vlawk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiB9OwogCiBzdGF0aWMgc3NpemVfdApAQCAtMjc5OCw2ICsyNzUxLDkgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAorCWlmICghY3VycmVudF90cmFjZS0+dXNlX21heF90cikKKwkJZ290byBvdXQ7CisKIAlyZXQgPSByaW5nX2J1ZmZlcl9yZXNpemUobWF4X3RyLmJ1ZmZlciwgc2l6ZSk7CiAJaWYgKHJldCA8IDApIHsKIAkJaW50IHI7CkBAIC0yODI1LDExICsyNzgxLDE0IEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJbWF4X3RyLmVudHJpZXMgPSBzaXplOworIG91dDoKIAlnbG9iYWxfdHJhY2UuZW50cmllcyA9IHNpemU7CiAKIAlyZXR1cm4gcmV0OwogfQogCisKIC8qKgogICogdHJhY2luZ191cGRhdGVfYnVmZmVycyAtIHVzZWQgYnkgdHJhY2luZyBmYWNpbGl0eSB0byBleHBhbmQgcmluZyBidWZmZXJzCiAgKgpAQCAtMjg5MCwxMiArMjg0OSwyNiBAQAogCXRyYWNlX2JyYW5jaF9kaXNhYmxlKCk7CiAJaWYgKGN1cnJlbnRfdHJhY2UgJiYgY3VycmVudF90cmFjZS0+cmVzZXQpCiAJCWN1cnJlbnRfdHJhY2UtPnJlc2V0KHRyKTsKLQorCWlmIChjdXJyZW50X3RyYWNlICYmIGN1cnJlbnRfdHJhY2UtPnVzZV9tYXhfdHIpIHsKKwkJLyoKKwkJICogV2UgZG9uJ3QgZnJlZSB0aGUgcmluZyBidWZmZXIuIGluc3RlYWQsIHJlc2l6ZSBpdCBiZWNhdXNlCisJCSAqIFRoZSBtYXhfdHIgcmluZyBidWZmZXIgaGFzIHNvbWUgc3RhdGUgKGUuZy4gcmluZy0+Y2xvY2spIGFuZAorCQkgKiB3ZSB3YW50IHByZXNlcnZlIGl0LgorCQkgKi8KKwkJcmluZ19idWZmZXJfcmVzaXplKG1heF90ci5idWZmZXIsIDEpOworCQltYXhfdHIuZW50cmllcyA9IDE7CisJfQogCWRlc3Ryb3lfdHJhY2Vfb3B0aW9uX2ZpbGVzKHRvcHRzKTsKIAogCWN1cnJlbnRfdHJhY2UgPSB0OwogCiAJdG9wdHMgPSBjcmVhdGVfdHJhY2Vfb3B0aW9uX2ZpbGVzKGN1cnJlbnRfdHJhY2UpOworCWlmIChjdXJyZW50X3RyYWNlLT51c2VfbWF4X3RyKSB7CisJCXJldCA9IHJpbmdfYnVmZmVyX3Jlc2l6ZShtYXhfdHIuYnVmZmVyLCBnbG9iYWxfdHJhY2UuZW50cmllcyk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJCW1heF90ci5lbnRyaWVzID0gZ2xvYmFsX3RyYWNlLmVudHJpZXM7CisJfQogCiAJaWYgKHQtPmluaXQpIHsKIAkJcmV0ID0gdHJhY2VyX2luaXQodCwgdHIpOwpAQCAtMzAzMiw2ICszMDA1LDcgQEAKIAlpZiAoaXRlci0+dHJhY2UtPnBpcGVfb3BlbikKIAkJaXRlci0+dHJhY2UtPnBpcGVfb3BlbihpdGVyKTsKIAorCW5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbHApOwogb3V0OgogCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiAJcmV0dXJuIHJldDsKQEAgLTMyMTEsNyArMzE4NSw3IEBACiAKIAl0cmFjZV9ldmVudF9yZWFkX2xvY2soKTsKIAl0cmFjZV9hY2Nlc3NfbG9jayhpdGVyLT5jcHVfZmlsZSk7Ci0Jd2hpbGUgKGZpbmRfbmV4dF9lbnRyeV9pbmMoaXRlcikgIT0gTlVMTCkgeworCXdoaWxlICh0cmFjZV9maW5kX25leHRfZW50cnlfaW5jKGl0ZXIpICE9IE5VTEwpIHsKIAkJZW51bSBwcmludF9saW5lX3QgcmV0OwogCQlpbnQgbGVuID0gaXRlci0+c2VxLmxlbjsKIApAQCAtMzI5NCw3ICszMjY4LDcgQEAKIAkJaWYgKHJldCAhPSBUUkFDRV9UWVBFX05PX0NPTlNVTUUpCiAJCQl0cmFjZV9jb25zdW1lKGl0ZXIpOwogCQlyZW0gLT0gY291bnQ7Ci0JCWlmICghZmluZF9uZXh0X2VudHJ5X2luYyhpdGVyKSkJeworCQlpZiAoIXRyYWNlX2ZpbmRfbmV4dF9lbnRyeV9pbmMoaXRlcikpCXsKIAkJCXJlbSA9IDA7CiAJCQlpdGVyLT5lbnQgPSBOVUxMOwogCQkJYnJlYWs7CkBAIC0zMzUwLDcgKzMzMjQsNyBAQAogCWlmIChyZXQgPD0gMCkKIAkJZ290byBvdXRfZXJyOwogCi0JaWYgKCFpdGVyLT5lbnQgJiYgIWZpbmRfbmV4dF9lbnRyeV9pbmMoaXRlcikpIHsKKwlpZiAoIWl0ZXItPmVudCAmJiAhdHJhY2VfZmluZF9uZXh0X2VudHJ5X2luYyhpdGVyKSkgewogCQlyZXQgPSAtRUZBVUxUOwogCQlnb3RvIG91dF9lcnI7CiAJfQpAQCAtMzQ3Nyw3ICszNDUxLDYgQEAKIAl9CiAKIAl0cmFjaW5nX3N0YXJ0KCk7Ci0JbWF4X3RyLmVudHJpZXMgPSBnbG9iYWxfdHJhY2UuZW50cmllczsKIAltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCiAJcmV0dXJuIGNudDsKQEAgLTM1OTAsMTggKzM1NjMsMjEgQEAKIAkub3BlbgkJPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKIAkucmVhZAkJPSB0cmFjaW5nX21heF9sYXRfcmVhZCwKIAkud3JpdGUJCT0gdHJhY2luZ19tYXhfbGF0X3dyaXRlLAorCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfY3RybF9mb3BzID0gewogCS5vcGVuCQk9IHRyYWNpbmdfb3Blbl9nZW5lcmljLAogCS5yZWFkCQk9IHRyYWNpbmdfY3RybF9yZWFkLAogCS53cml0ZQkJPSB0cmFjaW5nX2N0cmxfd3JpdGUsCisJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2V0X3RyYWNlcl9mb3BzID0gewogCS5vcGVuCQk9IHRyYWNpbmdfb3Blbl9nZW5lcmljLAogCS5yZWFkCQk9IHRyYWNpbmdfc2V0X3RyYWNlX3JlYWQsCiAJLndyaXRlCQk9IHRyYWNpbmdfc2V0X3RyYWNlX3dyaXRlLAorCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfcGlwZV9mb3BzID0gewpAQCAtMzYxMCwxNyArMzU4NiwyMCBAQAogCS5yZWFkCQk9IHRyYWNpbmdfcmVhZF9waXBlLAogCS5zcGxpY2VfcmVhZAk9IHRyYWNpbmdfc3BsaWNlX3JlYWRfcGlwZSwKIAkucmVsZWFzZQk9IHRyYWNpbmdfcmVsZWFzZV9waXBlLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19lbnRyaWVzX2ZvcHMgPSB7CiAJLm9wZW4JCT0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCiAJLnJlYWQJCT0gdHJhY2luZ19lbnRyaWVzX3JlYWQsCiAJLndyaXRlCQk9IHRyYWNpbmdfZW50cmllc193cml0ZSwKKwkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX21hcmtfZm9wcyA9IHsKIAkub3BlbgkJPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKIAkud3JpdGUJCT0gdHJhY2luZ19tYXJrX3dyaXRlLAorCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNlX2Nsb2NrX2ZvcHMgPSB7CkBAIC0zOTI2LDYgKzM5MDUsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19zdGF0c19mb3BzID0gewogCS5vcGVuCQk9IHRyYWNpbmdfb3Blbl9nZW5lcmljLAogCS5yZWFkCQk9IHRyYWNpbmdfc3RhdHNfcmVhZCwKKwkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiB9OwogCiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCkBAIC0zOTYyLDYgKzM5NDIsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19keW5faW5mb19mb3BzID0gewogCS5vcGVuCQk9IHRyYWNpbmdfb3Blbl9nZW5lcmljLAogCS5yZWFkCQk9IHRyYWNpbmdfcmVhZF9keW5faW5mbywKKwkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiB9OwogI2VuZGlmCiAKQEAgLTQxMTUsNiArNDA5Niw3IEBACiAJLm9wZW4gPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKIAkucmVhZCA9IHRyYWNlX29wdGlvbnNfcmVhZCwKIAkud3JpdGUgPSB0cmFjZV9vcHRpb25zX3dyaXRlLAorCS5sbHNlZWsJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogfTsKIAogc3RhdGljIHNzaXplX3QKQEAgLTQxNjYsNiArNDE0OCw3IEBACiAJLm9wZW4gPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKIAkucmVhZCA9IHRyYWNlX29wdGlvbnNfY29yZV9yZWFkLAogCS53cml0ZSA9IHRyYWNlX29wdGlvbnNfY29yZV93cml0ZSwKKwkubGxzZWVrID0gZ2VuZXJpY19maWxlX2xsc2VlaywKIH07CiAKIHN0cnVjdCBkZW50cnkgKnRyYWNlX2NyZWF0ZV9maWxlKGNvbnN0IGNoYXIgKm5hbWUsCkBAIC00MzU1LDkgKzQzMzgsNiBAQAogCXRyYWNlX2NyZWF0ZV9maWxlKCJkeW5fZnRyYWNlX3RvdGFsX2luZm8iLCAwNDQ0LCBkX3RyYWNlciwKIAkJCSZmdHJhY2VfdXBkYXRlX3RvdF9jbnQsICZ0cmFjaW5nX2R5bl9pbmZvX2ZvcHMpOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NZU1BST0ZfVFJBQ0VSCi0JaW5pdF90cmFjZXJfc3lzcHJvZl9kZWJ1Z2ZzKGRfdHJhY2VyKTsKLSNlbmRpZgogCiAJY3JlYXRlX3RyYWNlX29wdGlvbnNfZGlyKCk7CiAKQEAgLTQ0MTQsNyArNDM5NCw3IEBACiAgKi8KICNkZWZpbmUgS0VSTl9UUkFDRQkJS0VSTl9FTUVSRwogCi1zdGF0aWMgdm9pZAordm9pZAogdHJhY2VfcHJpbnRrX3NlcShzdHJ1Y3QgdHJhY2Vfc2VxICpzKQogewogCS8qIFByb2JhYmx5IHNob3VsZCBwcmludCBhIHdhcm5pbmcgaGVyZS4gKi8KQEAgLTQ0MjksNiArNDQwOSwxMyBAQAogCXRyYWNlX3NlcV9pbml0KHMpOwogfQogCit2b2lkIHRyYWNlX2luaXRfZ2xvYmFsX2l0ZXIoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQoreworCWl0ZXItPnRyID0gJmdsb2JhbF90cmFjZTsKKwlpdGVyLT50cmFjZSA9IGN1cnJlbnRfdHJhY2U7CisJaXRlci0+Y3B1X2ZpbGUgPSBUUkFDRV9QSVBFX0FMTF9DUFU7Cit9CisKIHN0YXRpYyB2b2lkCiBfX2Z0cmFjZV9kdW1wKGJvb2wgZGlzYWJsZV90cmFjaW5nLCBlbnVtIGZ0cmFjZV9kdW1wX21vZGUgb29wc19kdW1wX21vZGUpCiB7CkBAIC00NDU0LDggKzQ0NDEsMTAgQEAKIAlpZiAoZGlzYWJsZV90cmFjaW5nKQogCQlmdHJhY2Vfa2lsbCgpOwogCisJdHJhY2VfaW5pdF9nbG9iYWxfaXRlcigmaXRlcik7CisKIAlmb3JfZWFjaF90cmFjaW5nX2NwdShjcHUpIHsKLQkJYXRvbWljX2luYygmZ2xvYmFsX3RyYWNlLmRhdGFbY3B1XS0+ZGlzYWJsZWQpOworCQlhdG9taWNfaW5jKCZpdGVyLnRyLT5kYXRhW2NwdV0tPmRpc2FibGVkKTsKIAl9CiAKIAlvbGRfdXNlcm9iaiA9IHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9TWU1fVVNFUk9CSjsKQEAgLTQ1MDQsNyArNDQ5Myw3IEBACiAJCWl0ZXIuaXRlcl9mbGFncyB8PSBUUkFDRV9GSUxFX0xBVF9GTVQ7CiAJCWl0ZXIucG9zID0gLTE7CiAKLQkJaWYgKGZpbmRfbmV4dF9lbnRyeV9pbmMoJml0ZXIpICE9IE5VTEwpIHsKKwkJaWYgKHRyYWNlX2ZpbmRfbmV4dF9lbnRyeV9pbmMoJml0ZXIpICE9IE5VTEwpIHsKIAkJCWludCByZXQ7CiAKIAkJCXJldCA9IHByaW50X3RyYWNlX2xpbmUoJml0ZXIpOwpAQCAtNDUyNiw3ICs0NTE1LDcgQEAKIAkJdHJhY2VfZmxhZ3MgfD0gb2xkX3VzZXJvYmo7CiAKIAkJZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KSB7Ci0JCQlhdG9taWNfZGVjKCZnbG9iYWxfdHJhY2UuZGF0YVtjcHVdLT5kaXNhYmxlZCk7CisJCQlhdG9taWNfZGVjKCZpdGVyLnRyLT5kYXRhW2NwdV0tPmRpc2FibGVkKTsKIAkJfQogCQl0cmFjaW5nX29uKCk7CiAJfQpAQCAtNDU3NSwxNiArNDU2NCwxNCBAQAogCiAKICNpZmRlZiBDT05GSUdfVFJBQ0VSX01BWF9UUkFDRQotCW1heF90ci5idWZmZXIgPSByaW5nX2J1ZmZlcl9hbGxvYyhyaW5nX2J1Zl9zaXplLAotCQkJCQkgICAgIFRSQUNFX0JVRkZFUl9GTEFHUyk7CisJbWF4X3RyLmJ1ZmZlciA9IHJpbmdfYnVmZmVyX2FsbG9jKDEsIFRSQUNFX0JVRkZFUl9GTEFHUyk7CiAJaWYgKCFtYXhfdHIuYnVmZmVyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidHJhY2VyOiBmYWlsZWQgdG8gYWxsb2NhdGUgbWF4IHJpbmcgYnVmZmVyIVxuIik7CiAJCVdBUk5fT04oMSk7CiAJCXJpbmdfYnVmZmVyX2ZyZWUoZ2xvYmFsX3RyYWNlLmJ1ZmZlcik7CiAJCWdvdG8gb3V0X2ZyZWVfY3B1bWFzazsKIAl9Ci0JbWF4X3RyLmVudHJpZXMgPSByaW5nX2J1ZmZlcl9zaXplKG1heF90ci5idWZmZXIpOwotCVdBUk5fT04obWF4X3RyLmVudHJpZXMgIT0gZ2xvYmFsX3RyYWNlLmVudHJpZXMpOworCW1heF90ci5lbnRyaWVzID0gMTsKICNlbmRpZgogCiAJLyogQWxsb2NhdGUgdGhlIGZpcnN0IHBhZ2UgZm9yIGFsbCBidWZmZXJzICovCkBAIC00NTk3LDkgKzQ1ODQsNiBAQAogCiAJcmVnaXN0ZXJfdHJhY2VyKCZub3BfdHJhY2UpOwogCWN1cnJlbnRfdHJhY2UgPSAmbm9wX3RyYWNlOwotI2lmZGVmIENPTkZJR19CT09UX1RSQUNFUgotCXJlZ2lzdGVyX3RyYWNlcigmYm9vdF90cmFjZXIpOwotI2VuZGlmCiAJLyogQWxsIHNlZW1zIE9LLCBlbmFibGUgdHJhY2luZyAqLwogCXRyYWNpbmdfZGlzYWJsZWQgPSAwOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2UuaCBiL2tlcm5lbC90cmFjZS90cmFjZS5oCmluZGV4IDJjZDk2MzkuLmQzOWIzYzUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZS5oCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZS5oCkBAIC05LDEwICs5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbWlvdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+Ci0jaW5jbHVkZSA8dHJhY2UvYm9vdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ttZW10cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2h3X2JyZWFrcG9pbnQuaD4KLQogI2luY2x1ZGUgPGxpbnV4L3RyYWNlX3NlcS5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZV9ldmVudC5oPgogCkBAIC0yNSwzMCArMjIsMTcgQEAKIAlUUkFDRV9TVEFDSywKIAlUUkFDRV9QUklOVCwKIAlUUkFDRV9CUFJJTlQsCi0JVFJBQ0VfU1BFQ0lBTCwKIAlUUkFDRV9NTUlPX1JXLAogCVRSQUNFX01NSU9fTUFQLAogCVRSQUNFX0JSQU5DSCwKLQlUUkFDRV9CT09UX0NBTEwsCi0JVFJBQ0VfQk9PVF9SRVQsCiAJVFJBQ0VfR1JBUEhfUkVULAogCVRSQUNFX0dSQVBIX0VOVCwKIAlUUkFDRV9VU0VSX1NUQUNLLAotCVRSQUNFX0tNRU1fQUxMT0MsCi0JVFJBQ0VfS01FTV9GUkVFLAogCVRSQUNFX0JMSywKLQlUUkFDRV9LU1lNLAogCiAJX19UUkFDRV9MQVNUX1RZUEUsCiB9OwogCi1lbnVtIGttZW10cmFjZV90eXBlX2lkIHsKLQlLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DID0gMCwJLyoga21hbGxvYygpIG9yIGtmcmVlKCkuICovCi0JS01FTVRSQUNFX1RZUEVfQ0FDSEUsCQkvKiBrbWVtX2NhY2hlXyooKS4gKi8KLQlLTUVNVFJBQ0VfVFlQRV9QQUdFUywJCS8qIF9fZ2V0X2ZyZWVfcGFnZXMoKSBhbmQgZnJpZW5kcy4gKi8KLX07Ci0KLWV4dGVybiBzdHJ1Y3QgdHJhY2VyIGJvb3RfdHJhY2VyOwogCiAjdW5kZWYgX19maWVsZAogI2RlZmluZSBfX2ZpZWxkKHR5cGUsIGl0ZW0pCQl0eXBlCWl0ZW07CkBAIC0yMDQsMjMgKzE4OCwxNSBAQAogCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCB1c2Vyc3RhY2tfZW50cnksIFRSQUNFX1VTRVJfU1RBQ0spO1wKIAkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3QgcHJpbnRfZW50cnksIFRSQUNFX1BSSU5UKTsJXAogCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBicHJpbnRfZW50cnksIFRSQUNFX0JQUklOVCk7CVwKLQkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3Qgc3BlY2lhbF9lbnRyeSwgMCk7CQlcCiAJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IHRyYWNlX21taW90cmFjZV9ydywJCVwKIAkJCSAgVFJBQ0VfTU1JT19SVyk7CQkJCVwKIAkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3QgdHJhY2VfbW1pb3RyYWNlX21hcCwJCVwKIAkJCSAgVFJBQ0VfTU1JT19NQVApOwkJCQlcCi0JCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IHRyYWNlX2Jvb3RfY2FsbCwgVFJBQ0VfQk9PVF9DQUxMKTtcCi0JCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IHRyYWNlX2Jvb3RfcmV0LCBUUkFDRV9CT09UX1JFVCk7XAogCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCB0cmFjZV9icmFuY2gsIFRSQUNFX0JSQU5DSCk7IFwKIAkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudF9lbnRyeSwJXAogCQkJICBUUkFDRV9HUkFQSF9FTlQpOwkJXAogCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0X2VudHJ5LAlcCiAJCQkgIFRSQUNFX0dSQVBIX1JFVCk7CQlcCi0JCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IGttZW10cmFjZV9hbGxvY19lbnRyeSwJXAotCQkJICBUUkFDRV9LTUVNX0FMTE9DKTsJXAotCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBrbWVtdHJhY2VfZnJlZV9lbnRyeSwJXAotCQkJICBUUkFDRV9LTUVNX0ZSRUUpOwlcCi0JCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IGtzeW1fdHJhY2VfZW50cnksIFRSQUNFX0tTWU0pO1wKIAkJX19mdHJhY2VfYmFkX3R5cGUoKTsJCQkJCVwKIAl9IHdoaWxlICgwKQogCkBAIC0yOTgsNiArMjc0LDcgQEAKIAlzdHJ1Y3QgdHJhY2VyCQkqbmV4dDsKIAlpbnQJCQlwcmludF9tYXg7CiAJc3RydWN0IHRyYWNlcl9mbGFncwkqZmxhZ3M7CisJaW50CQkJdXNlX21heF90cjsKIH07CiAKIApAQCAtMzE4LDcgKzI5NSw2IEBACiAJCQkJIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMpOwogCiBzdHJ1Y3QgZGVudHJ5ICp0cmFjaW5nX2luaXRfZGVudHJ5KHZvaWQpOwotdm9pZCBpbml0X3RyYWNlcl9zeXNwcm9mX2RlYnVnZnMoc3RydWN0IGRlbnRyeSAqZF90cmFjZXIpOwogCiBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQ7CiAKQEAgLTMzOCw2ICszMTQsMTQgQEAKIHN0cnVjdCB0cmFjZV9lbnRyeSAqdHJhY2VfZmluZF9uZXh0X2VudHJ5KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKIAkJCQkJICBpbnQgKmVudF9jcHUsIHU2NCAqZW50X3RzKTsKIAoraW50IHRyYWNlX2VtcHR5KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcik7CisKK3ZvaWQgKnRyYWNlX2ZpbmRfbmV4dF9lbnRyeV9pbmMoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKTsKKwordm9pZCB0cmFjZV9pbml0X2dsb2JhbF9pdGVyKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcik7CisKK3ZvaWQgdHJhY2luZ19pdGVyX3Jlc2V0KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGNwdSk7CisKIHZvaWQgZGVmYXVsdF93YWl0X3BpcGUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKTsKIHZvaWQgcG9sbF93YWl0X3BpcGUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKTsKIApAQCAtMzU1LDExICszMzksNiBAQAogCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqd2FrZWUsCiAJCQkJc3RydWN0IHRhc2tfc3RydWN0ICpjdXIsCiAJCQkJdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKTsKLXZvaWQgdHJhY2Vfc3BlY2lhbChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAotCQkgICBzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAotCQkgICB1bnNpZ25lZCBsb25nIGFyZzEsCi0JCSAgIHVuc2lnbmVkIGxvbmcgYXJnMiwKLQkJICAgdW5zaWduZWQgbG9uZyBhcmczLCBpbnQgcGMpOwogdm9pZCB0cmFjZV9mdW5jdGlvbihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAogCQkgICAgdW5zaWduZWQgbG9uZyBpcCwKIAkJICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwLApAQCAtMzgwLDggKzM1OSwxNSBAQAogaW50IHJlZ2lzdGVyX3RyYWNlcihzdHJ1Y3QgdHJhY2VyICp0eXBlKTsKIHZvaWQgdW5yZWdpc3Rlcl90cmFjZXIoc3RydWN0IHRyYWNlciAqdHlwZSk7CiBpbnQgaXNfdHJhY2luZ19zdG9wcGVkKHZvaWQpOworZW51bSB0cmFjZV9maWxlX3R5cGUgeworCVRSQUNFX0ZJTEVfTEFUX0ZNVAk9IDEsCisJVFJBQ0VfRklMRV9BTk5PVEFURQk9IDIsCit9OwogCi1leHRlcm4gaW50IHByb2Nlc3NfbmV3X2tzeW1fZW50cnkoY2hhciAqa3N5bW5hbWUsIGludCBvcCwgdW5zaWduZWQgbG9uZyBhZGRyKTsKK2V4dGVybiBjcHVtYXNrX3Zhcl90IF9fcmVhZF9tb3N0bHkgdHJhY2luZ19idWZmZXJfbWFzazsKKworI2RlZmluZSBmb3JfZWFjaF90cmFjaW5nX2NwdShjcHUpCVwKKwlmb3JfZWFjaF9jcHUoY3B1LCB0cmFjaW5nX2J1ZmZlcl9tYXNrKQogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBuc2Vjc190b191c2Vjcyh1bnNpZ25lZCBsb25nIG5zZWNzKTsKIApAQCAtNDUyLDEyICs0MzgsOCBAQAogCQkJCQkgc3RydWN0IHRyYWNlX2FycmF5ICp0cik7CiBleHRlcm4gaW50IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfc2NoZWRfc3dpdGNoKHN0cnVjdCB0cmFjZXIgKnRyYWNlLAogCQkJCQkgICAgICAgc3RydWN0IHRyYWNlX2FycmF5ICp0cik7Ci1leHRlcm4gaW50IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfc3lzcHJvZihzdHJ1Y3QgdHJhY2VyICp0cmFjZSwKLQkJCQkJICAgICAgIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOwogZXh0ZXJuIGludCB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX2JyYW5jaChzdHJ1Y3QgdHJhY2VyICp0cmFjZSwKIAkJCQkJIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOwotZXh0ZXJuIGludCB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX2tzeW0oc3RydWN0IHRyYWNlciAqdHJhY2UsCi0JCQkJCSBzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKTsKICNlbmRpZiAvKiBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVCAqLwogCiBleHRlcm4gdm9pZCAqaGVhZF9wYWdlKHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEpOwpAQCAtNDcxLDYgKzQ1Myw4IEBACiAJCSAgICB1bnNpZ25lZCBsb25nIGlwLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncyk7CiBpbnQgdHJhY2VfYXJyYXlfcHJpbnRrKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCiAJCSAgICAgICB1bnNpZ25lZCBsb25nIGlwLCBjb25zdCBjaGFyICpmbXQsIC4uLik7Cit2b2lkIHRyYWNlX3ByaW50a19zZXEoc3RydWN0IHRyYWNlX3NlcSAqcyk7CitlbnVtIHByaW50X2xpbmVfdCBwcmludF90cmFjZV9saW5lKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcik7CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHRyYWNlX2ZsYWdzOwogCkBAIC02MTcsNiArNjAxLDcgQEAKIAlUUkFDRV9JVEVSX0xBVEVOQ1lfRk1UCQk9IDB4MjAwMDAsCiAJVFJBQ0VfSVRFUl9TTEVFUF9USU1FCQk9IDB4NDAwMDAsCiAJVFJBQ0VfSVRFUl9HUkFQSF9USU1FCQk9IDB4ODAwMDAsCisJVFJBQ0VfSVRFUl9SRUNPUkRfQ01ECQk9IDB4MTAwMDAwLAogfTsKIAogLyoKQEAgLTYyOCw1NCArNjEzLDYgQEAKIAogZXh0ZXJuIHN0cnVjdCB0cmFjZXIgbm9wX3RyYWNlOwogCi0vKioKLSAqIGZ0cmFjZV9wcmVlbXB0X2Rpc2FibGUgLSBkaXNhYmxlIHByZWVtcHRpb24gc2NoZWR1bGVyIHNhZmUKLSAqCi0gKiBXaGVuIHRyYWNpbmcgY2FuIGhhcHBlbiBpbnNpZGUgdGhlIHNjaGVkdWxlciwgdGhlcmUgZXhpc3RzCi0gKiBjYXNlcyB0aGF0IHRoZSB0cmFjaW5nIG1pZ2h0IGhhcHBlbiBiZWZvcmUgdGhlIG5lZWRfcmVzY2hlZAotICogZmxhZyBpcyBjaGVja2VkLiBJZiB0aGlzIGhhcHBlbnMgYW5kIHRoZSB0cmFjZXIgY2FsbHMKLSAqIHByZWVtcHRfZW5hYmxlIChhZnRlciBhIGRpc2FibGUpLCBhIHNjaGVkdWxlIG1pZ2h0IHRha2UgcGxhY2UKLSAqIGNhdXNpbmcgYW4gaW5maW5pdGUgcmVjdXJzaW9uLgotICoKLSAqIFRvIHByZXZlbnQgdGhpcywgd2UgcmVhZCB0aGUgbmVlZF9yZXNjaGVkIGZsYWcgYmVmb3JlCi0gKiBkaXNhYmxpbmcgcHJlZW1wdGlvbi4gV2hlbiB3ZSB3YW50IHRvIGVuYWJsZSBwcmVlbXB0aW9uIHdlCi0gKiBjaGVjayB0aGUgZmxhZywgaWYgaXQgaXMgc2V0LCB0aGVuIHdlIGNhbGwgcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZC4KLSAqIE90aGVyd2lzZSwgd2UgY2FsbCBwcmVlbXB0X2VuYWJsZS4KLSAqCi0gKiBUaGUgcmF0aW9uYWwgZm9yIGRvaW5nIHRoZSBhYm92ZSBpcyB0aGF0IGlmIG5lZWRfcmVzY2hlZCBpcyBzZXQKLSAqIGFuZCB3ZSBoYXZlIHlldCB0byByZXNjaGVkdWxlLCB3ZSBhcmUgZWl0aGVyIGluIGFuIGF0b21pYyBsb2NhdGlvbgotICogKHdoZXJlIHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIGZvciBzY2hlZHVsaW5nKSBvciB3ZSBhcmUgaW5zaWRlCi0gKiB0aGUgc2NoZWR1bGVyIGFuZCBkbyBub3Qgd2FudCB0byByZXNjaGVkLgotICovCi1zdGF0aWMgaW5saW5lIGludCBmdHJhY2VfcHJlZW1wdF9kaXNhYmxlKHZvaWQpCi17Ci0JaW50IHJlc2NoZWQ7Ci0KLQlyZXNjaGVkID0gbmVlZF9yZXNjaGVkKCk7Ci0JcHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTsKLQotCXJldHVybiByZXNjaGVkOwotfQotCi0vKioKLSAqIGZ0cmFjZV9wcmVlbXB0X2VuYWJsZSAtIGVuYWJsZSBwcmVlbXB0aW9uIHNjaGVkdWxlciBzYWZlCi0gKiBAcmVzY2hlZDogdGhlIHJldHVybiB2YWx1ZSBmcm9tIGZ0cmFjZV9wcmVlbXB0X2Rpc2FibGUKLSAqCi0gKiBUaGlzIGlzIGEgc2NoZWR1bGVyIHNhZmUgd2F5IHRvIGVuYWJsZSBwcmVlbXB0aW9uIGFuZCBub3QgbWlzcwotICogYW55IHByZWVtcHRpb24gY2hlY2tzLiBUaGUgZGlzYWJsZWQgc2F2ZWQgdGhlIHN0YXRlIG9mIHByZWVtcHRpb24uCi0gKiBJZiByZXNjaGVkIGlzIHNldCwgdGhlbiB3ZSBhcmUgZWl0aGVyIGluc2lkZSBhbiBhdG9taWMgb3IKLSAqIGFyZSBpbnNpZGUgdGhlIHNjaGVkdWxlciAod2Ugd291bGQgaGF2ZSBhbHJlYWR5IHNjaGVkdWxlZAotICogb3RoZXJ3aXNlKS4gSW4gdGhpcyBjYXNlLCB3ZSBkbyBub3Qgd2FudCB0byBjYWxsIG5vcm1hbAotICogcHJlZW1wdF9lbmFibGUsIGJ1dCBwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkIGluc3RlYWQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfcHJlZW1wdF9lbmFibGUoaW50IHJlc2NoZWQpCi17Ci0JaWYgKHJlc2NoZWQpCi0JCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWRfbm90cmFjZSgpOwotCWVsc2UKLQkJcHJlZW1wdF9lbmFibGVfbm90cmFjZSgpOwotfQotCiAjaWZkZWYgQ09ORklHX0JSQU5DSF9UUkFDRVIKIGV4dGVybiBpbnQgZW5hYmxlX2JyYW5jaF90cmFjaW5nKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOwogZXh0ZXJuIHZvaWQgZGlzYWJsZV9icmFuY2hfdHJhY2luZyh2b2lkKTsKQEAgLTc2Niw2ICs3MDMsOCBAQAogCWludCAJCQlwb3BfbjsKIH07CiAKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGZ0cmFjZV9jb21tb25fZmllbGRzOworCiBleHRlcm4gZW51bSByZWdleF90eXBlCiBmaWx0ZXJfcGFyc2VfcmVnZXgoY2hhciAqYnVmZiwgaW50IGxlbiwgY2hhciAqKnNlYXJjaCwgaW50ICpub3QpOwogZXh0ZXJuIHZvaWQgcHJpbnRfZXZlbnRfZmlsdGVyKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwKQEAgLTc5NSw2ICs3MzQsOCBAQAogCXJldHVybiAwOwogfQogCitleHRlcm4gdm9pZCB0cmFjZV9ldmVudF9lbmFibGVfY21kX3JlY29yZChib29sIGVuYWJsZSk7CisKIGV4dGVybiBzdHJ1Y3QgbXV0ZXggZXZlbnRfbXV0ZXg7CiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBmdHJhY2VfZXZlbnRzOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfYm9vdC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2Jvb3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIxZDVmMy4uMDAwMDAwMAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfYm9vdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTg1ICswLDAgQEAKLS8qCi0gKiByaW5nIGJ1ZmZlciBiYXNlZCBpbml0Y2FsbHMgdHJhY2VyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEZyZWRlcmljIFdlaXNiZWNrZXIgPGZ3ZWlzYmVjQGdtYWlsLmNvbT4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+Ci0jaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0KLSNpbmNsdWRlICJ0cmFjZS5oIgotI2luY2x1ZGUgInRyYWNlX291dHB1dC5oIgotCi1zdGF0aWMgc3RydWN0IHRyYWNlX2FycmF5ICpib290X3RyYWNlOwotc3RhdGljIGJvb2wgcHJlX2luaXRjYWxsc19maW5pc2hlZDsKLQotLyogVGVsbHMgdGhlIGJvb3QgdHJhY2VyIHRoYXQgdGhlIHByZV9zbXBfaW5pdGNhbGxzIGFyZSBmaW5pc2hlZC4KLSAqIFNvIHdlIGFyZSByZWFkeSAuCi0gKiBJdCBkb2Vzbid0IGVuYWJsZSBzY2hlZCBldmVudHMgdHJhY2luZyBob3dldmVyLgotICogWW91IGhhdmUgdG8gY2FsbCBlbmFibGVfYm9vdF90cmFjZSB0byBkbyBzby4KLSAqLwotdm9pZCBzdGFydF9ib290X3RyYWNlKHZvaWQpCi17Ci0JcHJlX2luaXRjYWxsc19maW5pc2hlZCA9IHRydWU7Ci19Ci0KLXZvaWQgZW5hYmxlX2Jvb3RfdHJhY2Uodm9pZCkKLXsKLQlpZiAoYm9vdF90cmFjZSAmJiBwcmVfaW5pdGNhbGxzX2ZpbmlzaGVkKQotCQl0cmFjaW5nX3N0YXJ0X3NjaGVkX3N3aXRjaF9yZWNvcmQoKTsKLX0KLQotdm9pZCBkaXNhYmxlX2Jvb3RfdHJhY2Uodm9pZCkKLXsKLQlpZiAoYm9vdF90cmFjZSAmJiBwcmVfaW5pdGNhbGxzX2ZpbmlzaGVkKQotCQl0cmFjaW5nX3N0b3Bfc2NoZWRfc3dpdGNoX3JlY29yZCgpOwotfQotCi1zdGF0aWMgaW50IGJvb3RfdHJhY2VfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQotewotCWJvb3RfdHJhY2UgPSB0cjsKLQotCWlmICghdHIpCi0JCXJldHVybiAwOwotCi0JdHJhY2luZ19yZXNldF9vbmxpbmVfY3B1cyh0cik7Ci0KLQl0cmFjaW5nX3NjaGVkX3N3aXRjaF9hc3NpZ25fdHJhY2UodHIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgZW51bSBwcmludF9saW5lX3QKLWluaXRjYWxsX2NhbGxfcHJpbnRfbGluZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCi17Ci0Jc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeSA9IGl0ZXItPmVudDsKLQlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKLQlzdHJ1Y3QgdHJhY2VfYm9vdF9jYWxsICpmaWVsZDsKLQlzdHJ1Y3QgYm9vdF90cmFjZV9jYWxsICpjYWxsOwotCXU2NCB0czsKLQl1bnNpZ25lZCBsb25nIG5zZWNfcmVtOwotCWludCByZXQ7Ci0KLQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCWNhbGwgPSAmZmllbGQtPmJvb3RfY2FsbDsKLQl0cyA9IGl0ZXItPnRzOwotCW5zZWNfcmVtID0gZG9fZGl2KHRzLCBOU0VDX1BFUl9TRUMpOwotCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiWyU1bGQuJTA5bGRdIGNhbGxpbmcgICVzIEAgJWlcbiIsCi0JCQkodW5zaWduZWQgbG9uZyl0cywgbnNlY19yZW0sIGNhbGwtPmZ1bmMsIGNhbGwtPmNhbGxlcik7Ci0KLQlpZiAoIXJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCWVsc2UKLQkJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKLX0KLQotc3RhdGljIGVudW0gcHJpbnRfbGluZV90Ci1pbml0Y2FsbF9yZXRfcHJpbnRfbGluZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCi17Ci0Jc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeSA9IGl0ZXItPmVudDsKLQlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKLQlzdHJ1Y3QgdHJhY2VfYm9vdF9yZXQgKmZpZWxkOwotCXN0cnVjdCBib290X3RyYWNlX3JldCAqaW5pdF9yZXQ7Ci0JdTY0IHRzOwotCXVuc2lnbmVkIGxvbmcgbnNlY19yZW07Ci0JaW50IHJldDsKLQotCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0JaW5pdF9yZXQgPSAmZmllbGQtPmJvb3RfcmV0OwotCXRzID0gaXRlci0+dHM7Ci0JbnNlY19yZW0gPSBkb19kaXYodHMsIE5TRUNfUEVSX1NFQyk7Ci0KLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJbJTVsZC4lMDlsZF0gaW5pdGNhbGwgJXMgIgotCQkJInJldHVybmVkICVkIGFmdGVyICVsbHUgbXNlY3NcbiIsCi0JCQkodW5zaWduZWQgbG9uZykgdHMsCi0JCQluc2VjX3JlbSwKLQkJCWluaXRfcmV0LT5mdW5jLCBpbml0X3JldC0+cmVzdWx0LCBpbml0X3JldC0+ZHVyYXRpb24pOwotCi0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQllbHNlCi0JCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBpbml0Y2FsbF9wcmludF9saW5lKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKLXsKLQlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5ID0gaXRlci0+ZW50OwotCi0Jc3dpdGNoIChlbnRyeS0+dHlwZSkgewotCWNhc2UgVFJBQ0VfQk9PVF9DQUxMOgotCQlyZXR1cm4gaW5pdGNhbGxfY2FsbF9wcmludF9saW5lKGl0ZXIpOwotCWNhc2UgVFJBQ0VfQk9PVF9SRVQ6Ci0JCXJldHVybiBpbml0Y2FsbF9yZXRfcHJpbnRfbGluZShpdGVyKTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gVFJBQ0VfVFlQRV9VTkhBTkRMRUQ7Ci0JfQotfQotCi1zdHJ1Y3QgdHJhY2VyIGJvb3RfdHJhY2VyIF9fcmVhZF9tb3N0bHkgPQotewotCS5uYW1lCQk9ICJpbml0Y2FsbCIsCi0JLmluaXQJCT0gYm9vdF90cmFjZV9pbml0LAotCS5yZXNldAkJPSB0cmFjaW5nX3Jlc2V0X29ubGluZV9jcHVzLAotCS5wcmludF9saW5lCT0gaW5pdGNhbGxfcHJpbnRfbGluZSwKLX07Ci0KLXZvaWQgdHJhY2VfYm9vdF9jYWxsKHN0cnVjdCBib290X3RyYWNlX2NhbGwgKmJ0LCBpbml0Y2FsbF90IGZuKQotewotCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9ICZldmVudF9ib290X2NhbGw7Ci0Jc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKLQlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcjsKLQlzdHJ1Y3QgdHJhY2VfYm9vdF9jYWxsICplbnRyeTsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gYm9vdF90cmFjZTsKLQotCWlmICghdHIgfHwgIXByZV9pbml0Y2FsbHNfZmluaXNoZWQpCi0JCXJldHVybjsKLQotCS8qIEdldCBpdHMgbmFtZSBub3cgc2luY2UgdGhpcyBmdW5jdGlvbiBjb3VsZAotCSAqIGRpc2FwcGVhciBiZWNhdXNlIGl0IGlzIGluIHRoZSAuaW5pdCBzZWN0aW9uLgotCSAqLwotCXNwcmludF9zeW1ib2woYnQtPmZ1bmMsICh1bnNpZ25lZCBsb25nKWZuKTsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQotCWJ1ZmZlciA9IHRyLT5idWZmZXI7Ci0JZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfQk9PVF9DQUxMLAotCQkJCQkgIHNpemVvZigqZW50cnkpLCAwLCAwKTsKLQlpZiAoIWV2ZW50KQotCQlnb3RvIG91dDsKLQllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwotCWVudHJ5LT5ib290X2NhbGwgPSAqYnQ7Ci0JaWYgKCFmaWx0ZXJfY2hlY2tfZGlzY2FyZChjYWxsLCBlbnRyeSwgYnVmZmVyLCBldmVudCkpCi0JCXRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwgZXZlbnQsIDAsIDApOwotIG91dDoKLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotCi12b2lkIHRyYWNlX2Jvb3RfcmV0KHN0cnVjdCBib290X3RyYWNlX3JldCAqYnQsIGluaXRjYWxsX3QgZm4pCi17Ci0Jc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJmV2ZW50X2Jvb3RfcmV0OwotCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7Ci0Jc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXI7Ci0Jc3RydWN0IHRyYWNlX2Jvb3RfcmV0ICplbnRyeTsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gYm9vdF90cmFjZTsKLQotCWlmICghdHIgfHwgIXByZV9pbml0Y2FsbHNfZmluaXNoZWQpCi0JCXJldHVybjsKLQotCXNwcmludF9zeW1ib2woYnQtPmZ1bmMsICh1bnNpZ25lZCBsb25nKWZuKTsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQotCWJ1ZmZlciA9IHRyLT5idWZmZXI7Ci0JZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfQk9PVF9SRVQsCi0JCQkJCSAgc2l6ZW9mKCplbnRyeSksIDAsIDApOwotCWlmICghZXZlbnQpCi0JCWdvdG8gb3V0OwotCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7Ci0JZW50cnktPmJvb3RfcmV0ID0gKmJ0OwotCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIGJ1ZmZlciwgZXZlbnQpKQotCQl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50LCAwLCAwKTsKLSBvdXQ6Ci0JcHJlZW1wdF9lbmFibGUoKTsKLX0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9jbG9jay5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2Nsb2NrLmMKaW5kZXggOWQ1ODlkOC4uNjg1YTY3ZCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2Nsb2NrLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2Nsb2NrLmMKQEAgLTMyLDE2ICszMiwxNSBAQAogdTY0IG5vdHJhY2UgdHJhY2VfY2xvY2tfbG9jYWwodm9pZCkKIHsKIAl1NjQgY2xvY2s7Ci0JaW50IHJlc2NoZWQ7CiAKIAkvKgogCSAqIHNjaGVkX2Nsb2NrKCkgaXMgYW4gYXJjaGl0ZWN0dXJlIGltcGxlbWVudGVkLCBmYXN0LCBzY2FsYWJsZSwKIAkgKiBsb2NrbGVzcyBjbG9jay4gSXQgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgY29oZXJlbnQgYWNyb3NzCiAJICogQ1BVcywgbm9yIGFjcm9zcyBDUFUgaWRsZSBldmVudHMuCiAJICovCi0JcmVzY2hlZCA9IGZ0cmFjZV9wcmVlbXB0X2Rpc2FibGUoKTsKKwlwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpOwogCWNsb2NrID0gc2NoZWRfY2xvY2soKTsKLQlmdHJhY2VfcHJlZW1wdF9lbmFibGUocmVzY2hlZCk7CisJcHJlZW1wdF9lbmFibGVfbm90cmFjZSgpOwogCiAJcmV0dXJuIGNsb2NrOwogfQpAQCAtNTYsNyArNTUsNyBAQAogICovCiB1NjQgbm90cmFjZSB0cmFjZV9jbG9jayh2b2lkKQogewotCXJldHVybiBjcHVfY2xvY2socmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CisJcmV0dXJuIGxvY2FsX2Nsb2NrKCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2VudHJpZXMuaCBiL2tlcm5lbC90cmFjZS90cmFjZV9lbnRyaWVzLmgKaW5kZXggZGMwMDhjMS4uZTNkZmVjYSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2VudHJpZXMuaAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZW50cmllcy5oCkBAIC0xNTEsMjMgKzE1MSw2IEBACiApOwogCiAvKgotICogU3BlY2lhbCAoZnJlZS1mb3JtKSB0cmFjZSBlbnRyeToKLSAqLwotRlRSQUNFX0VOVFJZKHNwZWNpYWwsIHNwZWNpYWxfZW50cnksCi0KLQlUUkFDRV9TUEVDSUFMLAotCi0JRl9TVFJVQ1QoCi0JCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCWFyZzEJKQotCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAlhcmcyCSkKLQkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJYXJnMwkpCi0JKSwKLQotCUZfcHJpbnRrKCIoJTA4bHgpICglMDhseCkgKCUwOGx4KSIsCi0JCSBfX2VudHJ5LT5hcmcxLCBfX2VudHJ5LT5hcmcyLCBfX2VudHJ5LT5hcmczKQotKTsKLQotLyoKICAqIFN0YWNrLXRyYWNlIGVudHJ5OgogICovCiAKQEAgLTI3MSwzMyArMjU0LDYgQEAKIAkJIF9fZW50cnktPm1hcF9pZCwgX19lbnRyeS0+b3Bjb2RlKQogKTsKIAotRlRSQUNFX0VOVFJZKGJvb3RfY2FsbCwgdHJhY2VfYm9vdF9jYWxsLAotCi0JVFJBQ0VfQk9PVF9DQUxMLAotCi0JRl9TVFJVQ1QoCi0JCV9fZmllbGRfc3RydWN0KAlzdHJ1Y3QgYm9vdF90cmFjZV9jYWxsLAlib290X2NhbGwJKQotCQlfX2ZpZWxkX2Rlc2MoCXBpZF90LAlib290X2NhbGwsCWNhbGxlcgkJKQotCQlfX2FycmF5X2Rlc2MoCWNoYXIsCWJvb3RfY2FsbCwJZnVuYywJS1NZTV9TWU1CT0xfTEVOKQotCSksCi0KLQlGX3ByaW50aygiJWQgICVzIiwgX19lbnRyeS0+Y2FsbGVyLCBfX2VudHJ5LT5mdW5jKQotKTsKLQotRlRSQUNFX0VOVFJZKGJvb3RfcmV0LCB0cmFjZV9ib290X3JldCwKLQotCVRSQUNFX0JPT1RfUkVULAotCi0JRl9TVFJVQ1QoCi0JCV9fZmllbGRfc3RydWN0KAlzdHJ1Y3QgYm9vdF90cmFjZV9yZXQsCWJvb3RfcmV0CSkKLQkJX19hcnJheV9kZXNjKAljaGFyLAlib290X3JldCwJZnVuYywJS1NZTV9TWU1CT0xfTEVOKQotCQlfX2ZpZWxkX2Rlc2MoCWludCwJYm9vdF9yZXQsCXJlc3VsdAkJKQotCQlfX2ZpZWxkX2Rlc2MoCXVuc2lnbmVkIGxvbmcsIGJvb3RfcmV0LCBkdXJhdGlvbgkpCi0JKSwKLQotCUZfcHJpbnRrKCIlcyAlZCAlbHgiLAotCQkgX19lbnRyeS0+ZnVuYywgX19lbnRyeS0+cmVzdWx0LCBfX2VudHJ5LT5kdXJhdGlvbikKLSk7CiAKICNkZWZpbmUgVFJBQ0VfRlVOQ19TSVpFIDMwCiAjZGVmaW5lIFRSQUNFX0ZJTEVfU0laRSAyMApAQCAtMzE4LDUzICsyNzQsMyBAQAogCQkgX19lbnRyeS0+ZnVuYywgX19lbnRyeS0+ZmlsZSwgX19lbnRyeS0+Y29ycmVjdCkKICk7CiAKLUZUUkFDRV9FTlRSWShrbWVtX2FsbG9jLCBrbWVtdHJhY2VfYWxsb2NfZW50cnksCi0KLQlUUkFDRV9LTUVNX0FMTE9DLAotCi0JRl9TVFJVQ1QoCi0JCV9fZmllbGQoCWVudW0ga21lbXRyYWNlX3R5cGVfaWQsCXR5cGVfaWQJCSkKLQkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJCWNhbGxfc2l0ZQkpCi0JCV9fZmllbGQoCWNvbnN0IHZvaWQgKiwJCXB0cgkJKQotCQlfX2ZpZWxkKAlzaXplX3QsCQkJYnl0ZXNfcmVxCSkKLQkJX19maWVsZCgJc2l6ZV90LAkJCWJ5dGVzX2FsbG9jCSkKLQkJX19maWVsZCgJZ2ZwX3QsCQkJZ2ZwX2ZsYWdzCSkKLQkJX19maWVsZCgJaW50LAkJCW5vZGUJCSkKLQkpLAotCi0JRl9wcmludGsoInR5cGU6JXUgY2FsbF9zaXRlOiVseCBwdHI6JXAgcmVxOiV6aSBhbGxvYzolemkiCi0JCSAiIGZsYWdzOiV4IG5vZGU6JWQiLAotCQkgX19lbnRyeS0+dHlwZV9pZCwgX19lbnRyeS0+Y2FsbF9zaXRlLCBfX2VudHJ5LT5wdHIsCi0JCSBfX2VudHJ5LT5ieXRlc19yZXEsIF9fZW50cnktPmJ5dGVzX2FsbG9jLAotCQkgX19lbnRyeS0+Z2ZwX2ZsYWdzLCBfX2VudHJ5LT5ub2RlKQotKTsKLQotRlRSQUNFX0VOVFJZKGttZW1fZnJlZSwga21lbXRyYWNlX2ZyZWVfZW50cnksCi0KLQlUUkFDRV9LTUVNX0ZSRUUsCi0KLQlGX1NUUlVDVCgKLQkJX19maWVsZCgJZW51bSBrbWVtdHJhY2VfdHlwZV9pZCwJdHlwZV9pZAkJKQotCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAkJY2FsbF9zaXRlCSkKLQkJX19maWVsZCgJY29uc3Qgdm9pZCAqLAkJcHRyCQkpCi0JKSwKLQotCUZfcHJpbnRrKCJ0eXBlOiV1IGNhbGxfc2l0ZTolbHggcHRyOiVwIiwKLQkJIF9fZW50cnktPnR5cGVfaWQsIF9fZW50cnktPmNhbGxfc2l0ZSwgX19lbnRyeS0+cHRyKQotKTsKLQotRlRSQUNFX0VOVFJZKGtzeW1fdHJhY2UsIGtzeW1fdHJhY2VfZW50cnksCi0KLQlUUkFDRV9LU1lNLAotCi0JRl9TVFJVQ1QoCi0JCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCWlwCQkJICApCi0JCV9fZmllbGQoCXVuc2lnbmVkIGNoYXIsCXR5cGUJCQkgICkKLQkJX19hcnJheSgJY2hhcgkgICAgICwJY21kLAkgICBUQVNLX0NPTU1fTEVOICApCi0JCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsICBhZGRyCQkJICApCi0JKSwKLQotCUZfcHJpbnRrKCJpcDogJXBGIHR5cGU6ICVkIGtzeW1fbmFtZTogJXBTIGNtZDogJXMiLAotCQkodm9pZCAqKV9fZW50cnktPmlwLCAodW5zaWduZWQgaW50KV9fZW50cnktPnR5cGUsCi0JCSh2b2lkICopX19lbnRyeS0+YWRkciwgIF9fZW50cnktPmNtZCkKLSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcGVyZi5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3BlcmYuYwppbmRleCA4YTJiNzNmLi4wMDBlNmU4IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcGVyZi5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wZXJmLmMKQEAgLTksOCArOSw2IEBACiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogI2luY2x1ZGUgInRyYWNlLmgiCiAKLUVYUE9SVF9TWU1CT0xfR1BMKHBlcmZfYXJjaF9mZXRjaF9jYWxsZXJfcmVncyk7Ci0KIHN0YXRpYyBjaGFyICpwZXJmX3RyYWNlX2J1Zls0XTsKIAogLyoKQEAgLTU2LDEzICs1NCw3IEBACiAJCX0KIAl9CiAKLQlpZiAodHBfZXZlbnQtPmNsYXNzLT5yZWcpCi0JCXJldCA9IHRwX2V2ZW50LT5jbGFzcy0+cmVnKHRwX2V2ZW50LCBUUkFDRV9SRUdfUEVSRl9SRUdJU1RFUik7Ci0JZWxzZQotCQlyZXQgPSB0cmFjZXBvaW50X3Byb2JlX3JlZ2lzdGVyKHRwX2V2ZW50LT5uYW1lLAotCQkJCQkJdHBfZXZlbnQtPmNsYXNzLT5wZXJmX3Byb2JlLAotCQkJCQkJdHBfZXZlbnQpOwotCisJcmV0ID0gdHBfZXZlbnQtPmNsYXNzLT5yZWcodHBfZXZlbnQsIFRSQUNFX1JFR19QRVJGX1JFR0lTVEVSKTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWw7CiAKQEAgLTk2LDkgKzg4LDcgQEAKIAltdXRleF9sb2NrKCZldmVudF9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cF9ldmVudCwgJmZ0cmFjZV9ldmVudHMsIGxpc3QpIHsKIAkJaWYgKHRwX2V2ZW50LT5ldmVudC50eXBlID09IGV2ZW50X2lkICYmCi0JCSAgICB0cF9ldmVudC0+Y2xhc3MgJiYKLQkJICAgICh0cF9ldmVudC0+Y2xhc3MtPnBlcmZfcHJvYmUgfHwKLQkJICAgICB0cF9ldmVudC0+Y2xhc3MtPnJlZykgJiYKKwkJICAgIHRwX2V2ZW50LT5jbGFzcyAmJiB0cF9ldmVudC0+Y2xhc3MtPnJlZyAmJgogCQkgICAgdHJ5X21vZHVsZV9nZXQodHBfZXZlbnQtPm1vZCkpIHsKIAkJCXJldCA9IHBlcmZfdHJhY2VfZXZlbnRfaW5pdCh0cF9ldmVudCwgcF9ldmVudCk7CiAJCQlicmVhazsKQEAgLTEzOCwxOCArMTI4LDEzIEBACiAJaWYgKC0tdHBfZXZlbnQtPnBlcmZfcmVmY291bnQgPiAwKQogCQlnb3RvIG91dDsKIAotCWlmICh0cF9ldmVudC0+Y2xhc3MtPnJlZykKLQkJdHBfZXZlbnQtPmNsYXNzLT5yZWcodHBfZXZlbnQsIFRSQUNFX1JFR19QRVJGX1VOUkVHSVNURVIpOwotCWVsc2UKLQkJdHJhY2Vwb2ludF9wcm9iZV91bnJlZ2lzdGVyKHRwX2V2ZW50LT5uYW1lLAotCQkJCQkgICAgdHBfZXZlbnQtPmNsYXNzLT5wZXJmX3Byb2JlLAotCQkJCQkgICAgdHBfZXZlbnQpOworCXRwX2V2ZW50LT5jbGFzcy0+cmVnKHRwX2V2ZW50LCBUUkFDRV9SRUdfUEVSRl9VTlJFR0lTVEVSKTsKIAogCS8qCi0JICogRW5zdXJlIG91ciBjYWxsYmFjayB3b24ndCBiZSBjYWxsZWQgYW55bW9yZS4gU2VlCi0JICogdHJhY2Vwb2ludF9wcm9iZV91bnJlZ2lzdGVyKCkgYW5kIF9fRE9fVFJBQ0UoKS4KKwkgKiBFbnN1cmUgb3VyIGNhbGxiYWNrIHdvbid0IGJlIGNhbGxlZCBhbnltb3JlLiBUaGUgYnVmZmVycworCSAqIHdpbGwgYmUgZnJlZWQgYWZ0ZXIgdGhhdC4KIAkgKi8KLQlzeW5jaHJvbml6ZV9zY2hlZCgpOworCXRyYWNlcG9pbnRfc3luY2hyb25pemVfdW5yZWdpc3RlcigpOwogCiAJZnJlZV9wZXJjcHUodHBfZXZlbnQtPnBlcmZfZXZlbnRzKTsKIAl0cF9ldmVudC0+cGVyZl9ldmVudHMgPSBOVUxMOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCmluZGV4IDUzY2ZmYzAuLjA5YjRmYTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKQEAgLTI4LDYgKzI4LDcgQEAKIERFRklORV9NVVRFWChldmVudF9tdXRleCk7CiAKIExJU1RfSEVBRChmdHJhY2VfZXZlbnRzKTsKK0xJU1RfSEVBRChmdHJhY2VfY29tbW9uX2ZpZWxkcyk7CiAKIHN0cnVjdCBsaXN0X2hlYWQgKgogdHJhY2VfZ2V0X2ZpZWxkcyhzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwpCkBAIC0zNywxNSArMzgsMTEgQEAKIAlyZXR1cm4gZXZlbnRfY2FsbC0+Y2xhc3MtPmdldF9maWVsZHMoZXZlbnRfY2FsbCk7CiB9CiAKLWludCB0cmFjZV9kZWZpbmVfZmllbGQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLCBjb25zdCBjaGFyICp0eXBlLAotCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgaW50IG9mZnNldCwgaW50IHNpemUsIGludCBpc19zaWduZWQsCi0JCSAgICAgICBpbnQgZmlsdGVyX3R5cGUpCitzdGF0aWMgaW50IF9fdHJhY2VfZGVmaW5lX2ZpZWxkKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGNvbnN0IGNoYXIgKnR5cGUsCisJCQkJY29uc3QgY2hhciAqbmFtZSwgaW50IG9mZnNldCwgaW50IHNpemUsCisJCQkJaW50IGlzX3NpZ25lZCwgaW50IGZpbHRlcl90eXBlKQogewogCXN0cnVjdCBmdHJhY2VfZXZlbnRfZmllbGQgKmZpZWxkOwotCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7Ci0KLQlpZiAoV0FSTl9PTighY2FsbC0+Y2xhc3MpKQotCQlyZXR1cm4gMDsKIAogCWZpZWxkID0ga3phbGxvYyhzaXplb2YoKmZpZWxkKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmaWVsZCkKQEAgLTY4LDcgKzY1LDYgQEAKIAlmaWVsZC0+c2l6ZSA9IHNpemU7CiAJZmllbGQtPmlzX3NpZ25lZCA9IGlzX3NpZ25lZDsKIAotCWhlYWQgPSB0cmFjZV9nZXRfZmllbGRzKGNhbGwpOwogCWxpc3RfYWRkKCZmaWVsZC0+bGluaywgaGVhZCk7CiAKIAlyZXR1cm4gMDsKQEAgLTgwLDE3ICs3NiwzMiBAQAogCiAJcmV0dXJuIC1FTk9NRU07CiB9CisKK2ludCB0cmFjZV9kZWZpbmVfZmllbGQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLCBjb25zdCBjaGFyICp0eXBlLAorCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgaW50IG9mZnNldCwgaW50IHNpemUsIGludCBpc19zaWduZWQsCisJCSAgICAgICBpbnQgZmlsdGVyX3R5cGUpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKKworCWlmIChXQVJOX09OKCFjYWxsLT5jbGFzcykpCisJCXJldHVybiAwOworCisJaGVhZCA9IHRyYWNlX2dldF9maWVsZHMoY2FsbCk7CisJcmV0dXJuIF9fdHJhY2VfZGVmaW5lX2ZpZWxkKGhlYWQsIHR5cGUsIG5hbWUsIG9mZnNldCwgc2l6ZSwKKwkJCQkgICAgaXNfc2lnbmVkLCBmaWx0ZXJfdHlwZSk7Cit9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cmFjZV9kZWZpbmVfZmllbGQpOwogCiAjZGVmaW5lIF9fY29tbW9uX2ZpZWxkKHR5cGUsIGl0ZW0pCQkJCQlcCi0JcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGNhbGwsICN0eXBlLCAiY29tbW9uXyIgI2l0ZW0sCQlcCi0JCQkJIG9mZnNldG9mKHR5cGVvZihlbnQpLCBpdGVtKSwJCVwKLQkJCQkgc2l6ZW9mKGVudC5pdGVtKSwJCQlcCi0JCQkJIGlzX3NpZ25lZF90eXBlKHR5cGUpLCBGSUxURVJfT1RIRVIpOwlcCisJcmV0ID0gX190cmFjZV9kZWZpbmVfZmllbGQoJmZ0cmFjZV9jb21tb25fZmllbGRzLCAjdHlwZSwJXAorCQkJCSAgICJjb21tb25fIiAjaXRlbSwJCQlcCisJCQkJICAgb2Zmc2V0b2YodHlwZW9mKGVudCksIGl0ZW0pLAkJXAorCQkJCSAgIHNpemVvZihlbnQuaXRlbSksCQkJXAorCQkJCSAgIGlzX3NpZ25lZF90eXBlKHR5cGUpLCBGSUxURVJfT1RIRVIpOwlcCiAJaWYgKHJldCkJCQkJCQkJXAogCQlyZXR1cm4gcmV0OwogCi1zdGF0aWMgaW50IHRyYWNlX2RlZmluZV9jb21tb25fZmllbGRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKK3N0YXRpYyBpbnQgdHJhY2VfZGVmaW5lX2NvbW1vbl9maWVsZHModm9pZCkKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCB0cmFjZV9lbnRyeSBlbnQ7CkBAIC0xMzAsNiArMTQxLDU1IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cmFjZV9ldmVudF9yYXdfaW5pdCk7CiAKK2ludCBmdHJhY2VfZXZlbnRfcmVnKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgZW51bSB0cmFjZV9yZWcgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFRSQUNFX1JFR19SRUdJU1RFUjoKKwkJcmV0dXJuIHRyYWNlcG9pbnRfcHJvYmVfcmVnaXN0ZXIoY2FsbC0+bmFtZSwKKwkJCQkJCSBjYWxsLT5jbGFzcy0+cHJvYmUsCisJCQkJCQkgY2FsbCk7CisJY2FzZSBUUkFDRV9SRUdfVU5SRUdJU1RFUjoKKwkJdHJhY2Vwb2ludF9wcm9iZV91bnJlZ2lzdGVyKGNhbGwtPm5hbWUsCisJCQkJCSAgICBjYWxsLT5jbGFzcy0+cHJvYmUsCisJCQkJCSAgICBjYWxsKTsKKwkJcmV0dXJuIDA7CisKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKKwljYXNlIFRSQUNFX1JFR19QRVJGX1JFR0lTVEVSOgorCQlyZXR1cm4gdHJhY2Vwb2ludF9wcm9iZV9yZWdpc3RlcihjYWxsLT5uYW1lLAorCQkJCQkJIGNhbGwtPmNsYXNzLT5wZXJmX3Byb2JlLAorCQkJCQkJIGNhbGwpOworCWNhc2UgVFJBQ0VfUkVHX1BFUkZfVU5SRUdJU1RFUjoKKwkJdHJhY2Vwb2ludF9wcm9iZV91bnJlZ2lzdGVyKGNhbGwtPm5hbWUsCisJCQkJCSAgICBjYWxsLT5jbGFzcy0+cGVyZl9wcm9iZSwKKwkJCQkJICAgIGNhbGwpOworCQlyZXR1cm4gMDsKKyNlbmRpZgorCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGZ0cmFjZV9ldmVudF9yZWcpOworCit2b2lkIHRyYWNlX2V2ZW50X2VuYWJsZV9jbWRfcmVjb3JkKGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbDsKKworCW11dGV4X2xvY2soJmV2ZW50X211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhbGwsICZmdHJhY2VfZXZlbnRzLCBsaXN0KSB7CisJCWlmICghKGNhbGwtPmZsYWdzICYgVFJBQ0VfRVZFTlRfRkxfRU5BQkxFRCkpCisJCQljb250aW51ZTsKKworCQlpZiAoZW5hYmxlKSB7CisJCQl0cmFjaW5nX3N0YXJ0X2NtZGxpbmVfcmVjb3JkKCk7CisJCQljYWxsLT5mbGFncyB8PSBUUkFDRV9FVkVOVF9GTF9SRUNPUkRFRF9DTUQ7CisJCX0gZWxzZSB7CisJCQl0cmFjaW5nX3N0b3BfY21kbGluZV9yZWNvcmQoKTsKKwkJCWNhbGwtPmZsYWdzICY9IH5UUkFDRV9FVkVOVF9GTF9SRUNPUkRFRF9DTUQ7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZldmVudF9tdXRleCk7Cit9CisKIHN0YXRpYyBpbnQgZnRyYWNlX2V2ZW50X2VuYWJsZV9kaXNhYmxlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwKIAkJCQkJaW50IGVuYWJsZSkKIHsKQEAgLTEzOSwyNCArMTk5LDIwIEBACiAJY2FzZSAwOgogCQlpZiAoY2FsbC0+ZmxhZ3MgJiBUUkFDRV9FVkVOVF9GTF9FTkFCTEVEKSB7CiAJCQljYWxsLT5mbGFncyAmPSB+VFJBQ0VfRVZFTlRfRkxfRU5BQkxFRDsKLQkJCXRyYWNpbmdfc3RvcF9jbWRsaW5lX3JlY29yZCgpOwotCQkJaWYgKGNhbGwtPmNsYXNzLT5yZWcpCi0JCQkJY2FsbC0+Y2xhc3MtPnJlZyhjYWxsLCBUUkFDRV9SRUdfVU5SRUdJU1RFUik7Ci0JCQllbHNlCi0JCQkJdHJhY2Vwb2ludF9wcm9iZV91bnJlZ2lzdGVyKGNhbGwtPm5hbWUsCi0JCQkJCQkJICAgIGNhbGwtPmNsYXNzLT5wcm9iZSwKLQkJCQkJCQkgICAgY2FsbCk7CisJCQlpZiAoY2FsbC0+ZmxhZ3MgJiBUUkFDRV9FVkVOVF9GTF9SRUNPUkRFRF9DTUQpIHsKKwkJCQl0cmFjaW5nX3N0b3BfY21kbGluZV9yZWNvcmQoKTsKKwkJCQljYWxsLT5mbGFncyAmPSB+VFJBQ0VfRVZFTlRfRkxfUkVDT1JERURfQ01EOworCQkJfQorCQkJY2FsbC0+Y2xhc3MtPnJlZyhjYWxsLCBUUkFDRV9SRUdfVU5SRUdJU1RFUik7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSAxOgogCQlpZiAoIShjYWxsLT5mbGFncyAmIFRSQUNFX0VWRU5UX0ZMX0VOQUJMRUQpKSB7Ci0JCQl0cmFjaW5nX3N0YXJ0X2NtZGxpbmVfcmVjb3JkKCk7Ci0JCQlpZiAoY2FsbC0+Y2xhc3MtPnJlZykKLQkJCQlyZXQgPSBjYWxsLT5jbGFzcy0+cmVnKGNhbGwsIFRSQUNFX1JFR19SRUdJU1RFUik7Ci0JCQllbHNlCi0JCQkJcmV0ID0gdHJhY2Vwb2ludF9wcm9iZV9yZWdpc3RlcihjYWxsLT5uYW1lLAotCQkJCQkJCQljYWxsLT5jbGFzcy0+cHJvYmUsCi0JCQkJCQkJCWNhbGwpOworCQkJaWYgKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9SRUNPUkRfQ01EKSB7CisJCQkJdHJhY2luZ19zdGFydF9jbWRsaW5lX3JlY29yZCgpOworCQkJCWNhbGwtPmZsYWdzIHw9IFRSQUNFX0VWRU5UX0ZMX1JFQ09SREVEX0NNRDsKKwkJCX0KKwkJCXJldCA9IGNhbGwtPmNsYXNzLT5yZWcoY2FsbCwgVFJBQ0VfUkVHX1JFR0lTVEVSKTsKIAkJCWlmIChyZXQpIHsKIAkJCQl0cmFjaW5nX3N0b3BfY21kbGluZV9yZWNvcmQoKTsKIAkJCQlwcl9pbmZvKCJldmVudCB0cmFjZTogQ291bGQgbm90IGVuYWJsZSBldmVudCAiCkBAIC0xOTQsOCArMjUwLDcgQEAKIAltdXRleF9sb2NrKCZldmVudF9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjYWxsLCAmZnRyYWNlX2V2ZW50cywgbGlzdCkgewogCi0JCWlmICghY2FsbC0+bmFtZSB8fCAhY2FsbC0+Y2xhc3MgfHwKLQkJICAgICghY2FsbC0+Y2xhc3MtPnByb2JlICYmICFjYWxsLT5jbGFzcy0+cmVnKSkKKwkJaWYgKCFjYWxsLT5uYW1lIHx8ICFjYWxsLT5jbGFzcyB8fCAhY2FsbC0+Y2xhc3MtPnJlZykKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChtYXRjaCAmJgpAQCAtMzIxLDcgKzM3Niw3IEBACiAJCSAqIFRoZSBmdHJhY2Ugc3Vic3lzdGVtIGlzIGZvciBzaG93aW5nIGZvcm1hdHMgb25seS4KIAkJICogVGhleSBjYW4gbm90IGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgdmlhIHRoZSBldmVudCBmaWxlcy4KIAkJICovCi0JCWlmIChjYWxsLT5jbGFzcyAmJiAoY2FsbC0+Y2xhc3MtPnByb2JlIHx8IGNhbGwtPmNsYXNzLT5yZWcpKQorCQlpZiAoY2FsbC0+Y2xhc3MgJiYgY2FsbC0+Y2xhc3MtPnJlZykKIAkJCXJldHVybiBjYWxsOwogCX0KIApAQCAtNDc0LDggKzUyOSw3IEBACiAKIAltdXRleF9sb2NrKCZldmVudF9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjYWxsLCAmZnRyYWNlX2V2ZW50cywgbGlzdCkgewotCQlpZiAoIWNhbGwtPm5hbWUgfHwgIWNhbGwtPmNsYXNzIHx8Ci0JCSAgICAoIWNhbGwtPmNsYXNzLT5wcm9iZSAmJiAhY2FsbC0+Y2xhc3MtPnJlZykpCisJCWlmICghY2FsbC0+bmFtZSB8fCAhY2FsbC0+Y2xhc3MgfHwgIWNhbGwtPmNsYXNzLT5yZWcpCiAJCQljb250aW51ZTsKIAogCQlpZiAoc3lzdGVtICYmIHN0cmNtcChjYWxsLT5jbGFzcy0+c3lzdGVtLCBzeXN0ZW0pICE9IDApCkBAIC01NDQsMzIgKzU5OCwxMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90Ci1ldmVudF9mb3JtYXRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBjbnQsCi0JCSAgbG9mZl90ICpwcG9zKQorc3RhdGljIHZvaWQgcHJpbnRfZXZlbnRfZmllbGRzKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7Ci0Jc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBmdHJhY2VfZXZlbnRfZmllbGQgKmZpZWxkOwotCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7Ci0Jc3RydWN0IHRyYWNlX3NlcSAqczsKLQlpbnQgY29tbW9uX2ZpZWxkX2NvdW50ID0gNTsKLQljaGFyICpidWY7Ci0JaW50IHIgPSAwOwogCi0JaWYgKCpwcG9zKQotCQlyZXR1cm4gMDsKLQotCXMgPSBrbWFsbG9jKHNpemVvZigqcyksIEdGUF9LRVJORUwpOwotCWlmICghcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQl0cmFjZV9zZXFfaW5pdChzKTsKLQotCXRyYWNlX3NlcV9wcmludGYocywgIm5hbWU6ICVzXG4iLCBjYWxsLT5uYW1lKTsKLQl0cmFjZV9zZXFfcHJpbnRmKHMsICJJRDogJWRcbiIsIGNhbGwtPmV2ZW50LnR5cGUpOwotCXRyYWNlX3NlcV9wcmludGYocywgImZvcm1hdDpcbiIpOwotCi0JaGVhZCA9IHRyYWNlX2dldF9maWVsZHMoY2FsbCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGZpZWxkLCBoZWFkLCBsaW5rKSB7CiAJCS8qCiAJCSAqIFNtYXJ0bHkgc2hvd3MgdGhlIGFycmF5IHR5cGUoZXhjZXB0IGR5bmFtaWMgYXJyYXkpLgpAQCAtNTg0LDI5ICs2MTYsNTQgQEAKIAkJCWFycmF5X2Rlc2NyaXB0b3IgPSBOVUxMOwogCiAJCWlmICghYXJyYXlfZGVzY3JpcHRvcikgewotCQkJciA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXU7IgorCQkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDolcyAlcztcdG9mZnNldDoldTsiCiAJCQkJCSJcdHNpemU6JXU7XHRzaWduZWQ6JWQ7XG4iLAogCQkJCQlmaWVsZC0+dHlwZSwgZmllbGQtPm5hbWUsIGZpZWxkLT5vZmZzZXQsCiAJCQkJCWZpZWxkLT5zaXplLCAhIWZpZWxkLT5pc19zaWduZWQpOwogCQl9IGVsc2UgewotCQkJciA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6JS4qcyAlcyVzO1x0b2Zmc2V0OiV1OyIKKwkJCXRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6JS4qcyAlcyVzO1x0b2Zmc2V0OiV1OyIKIAkJCQkJIlx0c2l6ZToldTtcdHNpZ25lZDolZDtcbiIsCiAJCQkJCShpbnQpKGFycmF5X2Rlc2NyaXB0b3IgLSBmaWVsZC0+dHlwZSksCiAJCQkJCWZpZWxkLT50eXBlLCBmaWVsZC0+bmFtZSwKIAkJCQkJYXJyYXlfZGVzY3JpcHRvciwgZmllbGQtPm9mZnNldCwKIAkJCQkJZmllbGQtPnNpemUsICEhZmllbGQtPmlzX3NpZ25lZCk7CiAJCX0KLQotCQlpZiAoLS1jb21tb25fZmllbGRfY291bnQgPT0gMCkKLQkJCXIgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcbiIpOwotCi0JCWlmICghcikKLQkJCWJyZWFrOwogCX0KK30KIAotCWlmIChyKQotCQlyID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXG5wcmludCBmbXQ6ICVzXG4iLAotCQkJCWNhbGwtPnByaW50X2ZtdCk7CitzdGF0aWMgc3NpemVfdAorZXZlbnRfZm9ybWF0X3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY250LAorCQkgIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzOworCWNoYXIgKmJ1ZjsKKwlpbnQgcjsKKworCWlmICgqcHBvcykKKwkJcmV0dXJuIDA7CisKKwlzID0ga21hbGxvYyhzaXplb2YoKnMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXMpCisJCXJldHVybiAtRU5PTUVNOworCisJdHJhY2Vfc2VxX2luaXQocyk7CisKKwl0cmFjZV9zZXFfcHJpbnRmKHMsICJuYW1lOiAlc1xuIiwgY2FsbC0+bmFtZSk7CisJdHJhY2Vfc2VxX3ByaW50ZihzLCAiSUQ6ICVkXG4iLCBjYWxsLT5ldmVudC50eXBlKTsKKwl0cmFjZV9zZXFfcHJpbnRmKHMsICJmb3JtYXQ6XG4iKTsKKworCS8qIHByaW50IGNvbW1vbiBmaWVsZHMgKi8KKwlwcmludF9ldmVudF9maWVsZHMocywgJmZ0cmFjZV9jb21tb25fZmllbGRzKTsKKworCXRyYWNlX3NlcV9wdXRjKHMsICdcbicpOworCisJLyogcHJpbnQgZXZlbnQgc3BlY2lmaWMgZmllbGRzICovCisJaGVhZCA9IHRyYWNlX2dldF9maWVsZHMoY2FsbCk7CisJcHJpbnRfZXZlbnRfZmllbGRzKHMsIGhlYWQpOworCisJciA9IHRyYWNlX3NlcV9wcmludGYocywgIlxucHJpbnQgZm10OiAlc1xuIiwgY2FsbC0+cHJpbnRfZm10KTsKIAogCWlmICghcikgewogCQkvKgpAQCAtOTYzLDM1ICsxMDIwLDMxIEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAoY2FsbC0+Y2xhc3MtPnByb2JlIHx8IGNhbGwtPmNsYXNzLT5yZWcpCisJaWYgKGNhbGwtPmNsYXNzLT5yZWcpCiAJCXRyYWNlX2NyZWF0ZV9maWxlKCJlbmFibGUiLCAwNjQ0LCBjYWxsLT5kaXIsIGNhbGwsCiAJCQkJICBlbmFibGUpOwogCiAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCi0JaWYgKGNhbGwtPmV2ZW50LnR5cGUgJiYgKGNhbGwtPmNsYXNzLT5wZXJmX3Byb2JlIHx8IGNhbGwtPmNsYXNzLT5yZWcpKQorCWlmIChjYWxsLT5ldmVudC50eXBlICYmIGNhbGwtPmNsYXNzLT5yZWcpCiAJCXRyYWNlX2NyZWF0ZV9maWxlKCJpZCIsIDA0NDQsIGNhbGwtPmRpciwgY2FsbCwKIAkJIAkJICBpZCk7CiAjZW5kaWYKIAotCWlmIChjYWxsLT5jbGFzcy0+ZGVmaW5lX2ZpZWxkcykgewotCQkvKgotCQkgKiBPdGhlciBldmVudHMgbWF5IGhhdmUgdGhlIHNhbWUgY2xhc3MuIE9ubHkgdXBkYXRlCi0JCSAqIHRoZSBmaWVsZHMgaWYgdGhleSBhcmUgbm90IGFscmVhZHkgZGVmaW5lZC4KLQkJICovCi0JCWhlYWQgPSB0cmFjZV9nZXRfZmllbGRzKGNhbGwpOwotCQlpZiAobGlzdF9lbXB0eShoZWFkKSkgewotCQkJcmV0ID0gdHJhY2VfZGVmaW5lX2NvbW1vbl9maWVsZHMoY2FsbCk7Ci0JCQlpZiAoIXJldCkKLQkJCQlyZXQgPSBjYWxsLT5jbGFzcy0+ZGVmaW5lX2ZpZWxkcyhjYWxsKTsKLQkJCWlmIChyZXQgPCAwKSB7Ci0JCQkJcHJfd2FybmluZygiQ291bGQgbm90IGluaXRpYWxpemUgdHJhY2UgcG9pbnQiCi0JCQkJCSAgICIgZXZlbnRzLyVzXG4iLCBjYWxsLT5uYW1lKTsKLQkJCQlyZXR1cm4gcmV0OwotCQkJfQorCS8qCisJICogT3RoZXIgZXZlbnRzIG1heSBoYXZlIHRoZSBzYW1lIGNsYXNzLiBPbmx5IHVwZGF0ZQorCSAqIHRoZSBmaWVsZHMgaWYgdGhleSBhcmUgbm90IGFscmVhZHkgZGVmaW5lZC4KKwkgKi8KKwloZWFkID0gdHJhY2VfZ2V0X2ZpZWxkcyhjYWxsKTsKKwlpZiAobGlzdF9lbXB0eShoZWFkKSkgeworCQlyZXQgPSBjYWxsLT5jbGFzcy0+ZGVmaW5lX2ZpZWxkcyhjYWxsKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBpbml0aWFsaXplIHRyYWNlIHBvaW50IgorCQkJCSAgICIgZXZlbnRzLyVzXG4iLCBjYWxsLT5uYW1lKTsKKwkJCXJldHVybiByZXQ7CiAJCX0KLQkJdHJhY2VfY3JlYXRlX2ZpbGUoImZpbHRlciIsIDA2NDQsIGNhbGwtPmRpciwgY2FsbCwKLQkJCQkgIGZpbHRlcik7CiAJfQorCXRyYWNlX2NyZWF0ZV9maWxlKCJmaWx0ZXIiLCAwNjQ0LCBjYWxsLT5kaXIsIGNhbGwsCisJCQkgIGZpbHRlcik7CiAKIAl0cmFjZV9jcmVhdGVfZmlsZSgiZm9ybWF0IiwgMDQ0NCwgY2FsbC0+ZGlyLCBjYWxsLAogCQkJICBmb3JtYXQpOwpAQCAtOTk5LDExICsxMDUyLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX190cmFjZV9hZGRfZXZlbnRfY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCitzdGF0aWMgaW50CitfX3RyYWNlX2FkZF9ldmVudF9jYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgc3RydWN0IG1vZHVsZSAqbW9kLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqaWQsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICplbmFibGUsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmaWx0ZXIsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3JtYXQpCiB7CiAJc3RydWN0IGRlbnRyeSAqZF9ldmVudHM7CiAJaW50IHJldDsKIAorCS8qIFRoZSBsaW5rZXIgbWF5IGxlYXZlIGJsYW5rcyAqLwogCWlmICghY2FsbC0+bmFtZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTEwMTEsOCArMTA3MCw4IEBACiAJCXJldCA9IGNhbGwtPmNsYXNzLT5yYXdfaW5pdChjYWxsKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWlmIChyZXQgIT0gLUVOT1NZUykKLQkJCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgaW5pdGlhbGl6ZSB0cmFjZSAiCi0JCQkJImV2ZW50cy8lc1xuIiwgY2FsbC0+bmFtZSk7CisJCQkJcHJfd2FybmluZygiQ291bGQgbm90IGluaXRpYWxpemUgdHJhY2UgZXZlbnRzLyVzXG4iLAorCQkJCQkgICBjYWxsLT5uYW1lKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAl9CkBAIC0xMDIxLDExICsxMDgwLDEwIEBACiAJaWYgKCFkX2V2ZW50cykKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQlyZXQgPSBldmVudF9jcmVhdGVfZGlyKGNhbGwsIGRfZXZlbnRzLCAmZnRyYWNlX2V2ZW50X2lkX2ZvcHMsCi0JCQkJJmZ0cmFjZV9lbmFibGVfZm9wcywgJmZ0cmFjZV9ldmVudF9maWx0ZXJfZm9wcywKLQkJCQkmZnRyYWNlX2V2ZW50X2Zvcm1hdF9mb3BzKTsKKwlyZXQgPSBldmVudF9jcmVhdGVfZGlyKGNhbGwsIGRfZXZlbnRzLCBpZCwgZW5hYmxlLCBmaWx0ZXIsIGZvcm1hdCk7CiAJaWYgKCFyZXQpCiAJCWxpc3RfYWRkKCZjYWxsLT5saXN0LCAmZnRyYWNlX2V2ZW50cyk7CisJY2FsbC0+bW9kID0gbW9kOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTEwMzUsNyArMTA5MywxMCBAQAogewogCWludCByZXQ7CiAJbXV0ZXhfbG9jaygmZXZlbnRfbXV0ZXgpOwotCXJldCA9IF9fdHJhY2VfYWRkX2V2ZW50X2NhbGwoY2FsbCk7CisJcmV0ID0gX190cmFjZV9hZGRfZXZlbnRfY2FsbChjYWxsLCBOVUxMLCAmZnRyYWNlX2V2ZW50X2lkX2ZvcHMsCisJCQkJICAgICAmZnRyYWNlX2VuYWJsZV9mb3BzLAorCQkJCSAgICAgJmZ0cmFjZV9ldmVudF9maWx0ZXJfZm9wcywKKwkJCQkgICAgICZmdHJhY2VfZXZlbnRfZm9ybWF0X2ZvcHMpOwogCW11dGV4X3VubG9jaygmZXZlbnRfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CkBAIC0xMTUyLDggKzEyMTMsNiBAQAogewogCXN0cnVjdCBmdHJhY2VfbW9kdWxlX2ZpbGVfb3BzICpmaWxlX29wcyA9IE5VTEw7CiAJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLCAqc3RhcnQsICplbmQ7Ci0Jc3RydWN0IGRlbnRyeSAqZF9ldmVudHM7Ci0JaW50IHJldDsKIAogCXN0YXJ0ID0gbW9kLT50cmFjZV9ldmVudHM7CiAJZW5kID0gbW9kLT50cmFjZV9ldmVudHMgKyBtb2QtPm51bV90cmFjZV9ldmVudHM7CkBAIC0xMTYxLDM4ICsxMjIwLDE0IEBACiAJaWYgKHN0YXJ0ID09IGVuZCkKIAkJcmV0dXJuOwogCi0JZF9ldmVudHMgPSBldmVudF90cmFjZV9ldmVudHNfZGlyKCk7Ci0JaWYgKCFkX2V2ZW50cykKKwlmaWxlX29wcyA9IHRyYWNlX2NyZWF0ZV9maWxlX29wcyhtb2QpOworCWlmICghZmlsZV9vcHMpCiAJCXJldHVybjsKIAogCWZvcl9lYWNoX2V2ZW50KGNhbGwsIHN0YXJ0LCBlbmQpIHsKLQkJLyogVGhlIGxpbmtlciBtYXkgbGVhdmUgYmxhbmtzICovCi0JCWlmICghY2FsbC0+bmFtZSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoY2FsbC0+Y2xhc3MtPnJhd19pbml0KSB7Ci0JCQlyZXQgPSBjYWxsLT5jbGFzcy0+cmF3X2luaXQoY2FsbCk7Ci0JCQlpZiAocmV0IDwgMCkgewotCQkJCWlmIChyZXQgIT0gLUVOT1NZUykKLQkJCQkJcHJfd2FybmluZygiQ291bGQgbm90IGluaXRpYWxpemUgdHJhY2UgIgotCQkJCQkicG9pbnQgZXZlbnRzLyVzXG4iLCBjYWxsLT5uYW1lKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJfQotCQkvKgotCQkgKiBUaGlzIG1vZHVsZSBoYXMgZXZlbnRzLCBjcmVhdGUgZmlsZSBvcHMgZm9yIHRoaXMgbW9kdWxlCi0JCSAqIGlmIG5vdCBhbHJlYWR5IGRvbmUuCi0JCSAqLwotCQlpZiAoIWZpbGVfb3BzKSB7Ci0JCQlmaWxlX29wcyA9IHRyYWNlX2NyZWF0ZV9maWxlX29wcyhtb2QpOwotCQkJaWYgKCFmaWxlX29wcykKLQkJCQlyZXR1cm47Ci0JCX0KLQkJY2FsbC0+bW9kID0gbW9kOwotCQlyZXQgPSBldmVudF9jcmVhdGVfZGlyKGNhbGwsIGRfZXZlbnRzLAorCQlfX3RyYWNlX2FkZF9ldmVudF9jYWxsKGNhbGwsIG1vZCwKIAkJCQkgICAgICAgJmZpbGVfb3BzLT5pZCwgJmZpbGVfb3BzLT5lbmFibGUsCiAJCQkJICAgICAgICZmaWxlX29wcy0+ZmlsdGVyLCAmZmlsZV9vcHMtPmZvcm1hdCk7Ci0JCWlmICghcmV0KQotCQkJbGlzdF9hZGQoJmNhbGwtPmxpc3QsICZmdHJhY2VfZXZlbnRzKTsKIAl9CiB9CiAKQEAgLTEzMTksMjUgKzEzNTQsMTQgQEAKIAl0cmFjZV9jcmVhdGVfZmlsZSgiZW5hYmxlIiwgMDY0NCwgZF9ldmVudHMsCiAJCQkgIE5VTEwsICZmdHJhY2Vfc3lzdGVtX2VuYWJsZV9mb3BzKTsKIAorCWlmICh0cmFjZV9kZWZpbmVfY29tbW9uX2ZpZWxkcygpKQorCQlwcl93YXJuaW5nKCJ0cmFjaW5nOiBGYWlsZWQgdG8gYWxsb2NhdGUgY29tbW9uIGZpZWxkcyIpOworCiAJZm9yX2VhY2hfZXZlbnQoY2FsbCwgX19zdGFydF9mdHJhY2VfZXZlbnRzLCBfX3N0b3BfZnRyYWNlX2V2ZW50cykgewotCQkvKiBUaGUgbGlua2VyIG1heSBsZWF2ZSBibGFua3MgKi8KLQkJaWYgKCFjYWxsLT5uYW1lKQotCQkJY29udGludWU7Ci0JCWlmIChjYWxsLT5jbGFzcy0+cmF3X2luaXQpIHsKLQkJCXJldCA9IGNhbGwtPmNsYXNzLT5yYXdfaW5pdChjYWxsKTsKLQkJCWlmIChyZXQgPCAwKSB7Ci0JCQkJaWYgKHJldCAhPSAtRU5PU1lTKQotCQkJCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgaW5pdGlhbGl6ZSB0cmFjZSAiCi0JCQkJCSJwb2ludCBldmVudHMvJXNcbiIsIGNhbGwtPm5hbWUpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQl9Ci0JCXJldCA9IGV2ZW50X2NyZWF0ZV9kaXIoY2FsbCwgZF9ldmVudHMsICZmdHJhY2VfZXZlbnRfaWRfZm9wcywKKwkJX190cmFjZV9hZGRfZXZlbnRfY2FsbChjYWxsLCBOVUxMLCAmZnRyYWNlX2V2ZW50X2lkX2ZvcHMsCiAJCQkJICAgICAgICZmdHJhY2VfZW5hYmxlX2ZvcHMsCiAJCQkJICAgICAgICZmdHJhY2VfZXZlbnRfZmlsdGVyX2ZvcHMsCiAJCQkJICAgICAgICZmdHJhY2VfZXZlbnRfZm9ybWF0X2ZvcHMpOwotCQlpZiAoIXJldCkKLQkJCWxpc3RfYWRkKCZjYWxsLT5saXN0LCAmZnRyYWNlX2V2ZW50cyk7CiAJfQogCiAJd2hpbGUgKHRydWUpIHsKQEAgLTE1MjQsMTIgKzE1NDgsMTEgQEAKIAlzdHJ1Y3QgZnRyYWNlX2VudHJ5ICplbnRyeTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWxvbmcgZGlzYWJsZWQ7Ci0JaW50IHJlc2NoZWQ7CiAJaW50IGNwdTsKIAlpbnQgcGM7CiAKIAlwYyA9IHByZWVtcHRfY291bnQoKTsKLQlyZXNjaGVkID0gZnRyYWNlX3ByZWVtcHRfZGlzYWJsZSgpOworCXByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7CiAJY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKIAlkaXNhYmxlZCA9IGF0b21pY19pbmNfcmV0dXJuKCZwZXJfY3B1KGZ0cmFjZV90ZXN0X2V2ZW50X2Rpc2FibGUsIGNwdSkpOwogCkBAIC0xNTUxLDcgKzE1NzQsNyBAQAogCiAgb3V0OgogCWF0b21pY19kZWMoJnBlcl9jcHUoZnRyYWNlX3Rlc3RfZXZlbnRfZGlzYWJsZSwgY3B1KSk7Ci0JZnRyYWNlX3ByZWVtcHRfZW5hYmxlKHJlc2NoZWQpOworCXByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTsKIH0KIAogc3RhdGljIHN0cnVjdCBmdHJhY2Vfb3BzIHRyYWNlX29wcyBfX2luaXRkYXRhICA9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX2ZpbHRlci5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYwppbmRleCA1N2JiMWJiLi4zNmQ0MDEwIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX2ZpbHRlci5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMKQEAgLTQ5NywxMiArNDk3LDEwIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2ZpZWxkICoKLWZpbmRfZXZlbnRfZmllbGQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLCBjaGFyICpuYW1lKQorX19maW5kX2V2ZW50X2ZpZWxkKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IGZ0cmFjZV9ldmVudF9maWVsZCAqZmllbGQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKIAotCWhlYWQgPSB0cmFjZV9nZXRfZmllbGRzKGNhbGwpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZmllbGQsIGhlYWQsIGxpbmspIHsKIAkJaWYgKCFzdHJjbXAoZmllbGQtPm5hbWUsIG5hbWUpKQogCQkJcmV0dXJuIGZpZWxkOwpAQCAtNTExLDYgKzUwOSwyMCBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9maWVsZCAqCitmaW5kX2V2ZW50X2ZpZWxkKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2ZpZWxkICpmaWVsZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOworCisJZmllbGQgPSBfX2ZpbmRfZXZlbnRfZmllbGQoJmZ0cmFjZV9jb21tb25fZmllbGRzLCBuYW1lKTsKKwlpZiAoZmllbGQpCisJCXJldHVybiBmaWVsZDsKKworCWhlYWQgPSB0cmFjZV9nZXRfZmllbGRzKGNhbGwpOworCXJldHVybiBfX2ZpbmRfZXZlbnRfZmllbGQoaGVhZCwgbmFtZSk7Cit9CisKIHN0YXRpYyB2b2lkIGZpbHRlcl9mcmVlX3ByZWQoc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkKQogewogCWlmICghcHJlZCkKQEAgLTYyNyw5ICs2MzksNiBAQAogCWludCBlcnI7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhbGwsICZmdHJhY2VfZXZlbnRzLCBsaXN0KSB7Ci0JCWlmICghY2FsbC0+Y2xhc3MgfHwgIWNhbGwtPmNsYXNzLT5kZWZpbmVfZmllbGRzKQotCQkJY29udGludWU7Ci0KIAkJaWYgKHN0cmNtcChjYWxsLT5jbGFzcy0+c3lzdGVtLCBzeXN0ZW0tPm5hbWUpICE9IDApCiAJCQljb250aW51ZTsKIApAQCAtNjQ2LDkgKzY1NSw2IEBACiAJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjYWxsLCAmZnRyYWNlX2V2ZW50cywgbGlzdCkgewotCQlpZiAoIWNhbGwtPmNsYXNzIHx8ICFjYWxsLT5jbGFzcy0+ZGVmaW5lX2ZpZWxkcykKLQkJCWNvbnRpbnVlOwotCiAJCWlmIChzdHJjbXAoY2FsbC0+Y2xhc3MtPnN5c3RlbSwgc3lzdGVtLT5uYW1lKSAhPSAwKQogCQkJY29udGludWU7CiAKQEAgLTEyNTEsOSArMTI1Nyw2IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjYWxsLCAmZnRyYWNlX2V2ZW50cywgbGlzdCkgewogCQlzdHJ1Y3QgZXZlbnRfZmlsdGVyICpmaWx0ZXIgPSBjYWxsLT5maWx0ZXI7CiAKLQkJaWYgKCFjYWxsLT5jbGFzcyB8fCAhY2FsbC0+Y2xhc3MtPmRlZmluZV9maWVsZHMpCi0JCQljb250aW51ZTsKLQogCQlpZiAoc3RyY21wKGNhbGwtPmNsYXNzLT5zeXN0ZW0sIHN5c3RlbS0+bmFtZSkgIT0gMCkKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMKaW5kZXggODUzNmUyYS4uNGJhNDRkZSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYwpAQCAtMTI1LDEyICsxMjUsNiBAQAogCiAjaW5jbHVkZSAidHJhY2VfZW50cmllcy5oIgogCi1zdGF0aWMgaW50IGZ0cmFjZV9yYXdfaW5pdF9ldmVudChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCi17Ci0JSU5JVF9MSVNUX0hFQUQoJmNhbGwtPmNsYXNzLT5maWVsZHMpOwotCXJldHVybiAwOwotfQotCiAjdW5kZWYgX19lbnRyeQogI2RlZmluZSBfX2VudHJ5IFJFQwogCkBAIC0xNTgsNyArMTUyLDcgQEAKIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2xhc3MgZXZlbnRfY2xhc3NfZnRyYWNlXyMjY2FsbCA9IHsJCQlcCiAJLnN5c3RlbQkJCT0gX19zdHJpbmdpZnkoVFJBQ0VfU1lTVEVNKSwJCVwKIAkuZGVmaW5lX2ZpZWxkcwkJPSBmdHJhY2VfZGVmaW5lX2ZpZWxkc18jI2NhbGwsCQlcCi0JLnJhd19pbml0CQk9IGZ0cmFjZV9yYXdfaW5pdF9ldmVudCwJCVwKKwkuZmllbGRzCQkJPSBMSVNUX0hFQURfSU5JVChldmVudF9jbGFzc19mdHJhY2VfIyNjYWxsLmZpZWxkcyksXAogfTsJCQkJCQkJCQlcCiAJCQkJCQkJCQlcCiBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCQkJXApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jCmluZGV4IGIzZjM3NzYuLjE2YWVlNGQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMKQEAgLTU0LDE0ICs1NCwxNCBAQAogCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlsb25nIGRpc2FibGVkOwotCWludCBjcHUsIHJlc2NoZWQ7CisJaW50IGNwdTsKIAlpbnQgcGM7CiAKIAlpZiAodW5saWtlbHkoIWZ0cmFjZV9mdW5jdGlvbl9lbmFibGVkKSkKIAkJcmV0dXJuOwogCiAJcGMgPSBwcmVlbXB0X2NvdW50KCk7Ci0JcmVzY2hlZCA9IGZ0cmFjZV9wcmVlbXB0X2Rpc2FibGUoKTsKKwlwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpOwogCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwogCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CiAJZGF0YSA9IHRyLT5kYXRhW2NwdV07CkBAIC03MSw3ICs3MSw3IEBACiAJCXRyYWNlX2Z1bmN0aW9uKHRyLCBpcCwgcGFyZW50X2lwLCBmbGFncywgcGMpOwogCiAJYXRvbWljX2RlYygmZGF0YS0+ZGlzYWJsZWQpOwotCWZ0cmFjZV9wcmVlbXB0X2VuYWJsZShyZXNjaGVkKTsKKwlwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMKaW5kZXggNzlmNGJhYy4uNmJmZjIzNiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYwpAQCAtNjQxLDcgKzY0MSw4IEBACiAKIAkvKiBQcmludCBuc2VjcyAod2UgZG9uJ3Qgd2FudCB0byBleGNlZWQgNyBudW1iZXJzKSAqLwogCWlmIChsZW4gPCA3KSB7Ci0JCXNucHJpbnRmKG5zZWNzX3N0ciwgOCAtIGxlbiwgIiUwM2x1IiwgbnNlY3NfcmVtKTsKKwkJc25wcmludGYobnNlY3Nfc3RyLCBtaW4oc2l6ZW9mKG5zZWNzX3N0ciksIDhVTCAtIGxlbiksICIlMDNsdSIsCisJCQkgbnNlY3NfcmVtKTsKIAkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiLiVzIiwgbnNlY3Nfc3RyKTsKIAkJaWYgKCFyZXQpCiAJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYwppbmRleCA2ZmQ0ODZlLi43M2E2YjA2IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMKQEAgLTY0OSw2ICs2NDksNyBAQAogI2VuZGlmCiAJLm9wZW4gICAgICAgICAgID0gaXJxc29mZl90cmFjZV9vcGVuLAogCS5jbG9zZSAgICAgICAgICA9IGlycXNvZmZfdHJhY2VfY2xvc2UsCisJLnVzZV9tYXhfdHIJPSAxLAogfTsKICMgZGVmaW5lIHJlZ2lzdGVyX2lycXNvZmYodHJhY2UpIHJlZ2lzdGVyX3RyYWNlcigmdHJhY2UpCiAjZWxzZQpAQCAtNjgxLDYgKzY4Miw3IEBACiAjZW5kaWYKIAkub3BlbgkJPSBpcnFzb2ZmX3RyYWNlX29wZW4sCiAJLmNsb3NlCQk9IGlycXNvZmZfdHJhY2VfY2xvc2UsCisJLnVzZV9tYXhfdHIJPSAxLAogfTsKICMgZGVmaW5lIHJlZ2lzdGVyX3ByZWVtcHRvZmYodHJhY2UpIHJlZ2lzdGVyX3RyYWNlcigmdHJhY2UpCiAjZWxzZQpAQCAtNzE1LDYgKzcxNyw3IEBACiAjZW5kaWYKIAkub3BlbgkJPSBpcnFzb2ZmX3RyYWNlX29wZW4sCiAJLmNsb3NlCQk9IGlycXNvZmZfdHJhY2VfY2xvc2UsCisJLnVzZV9tYXhfdHIJPSAxLAogfTsKIAogIyBkZWZpbmUgcmVnaXN0ZXJfcHJlZW1wdGlycXNvZmYodHJhY2UpIHJlZ2lzdGVyX3RyYWNlcigmdHJhY2UpCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfa2RiLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfa2RiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I4ZWNkNwotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9rZGIuYwpAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIGtkYiBoZWxwZXIgZm9yIGR1bXBpbmcgdGhlIGZ0cmFjZSBidWZmZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKyAqCisgKiBmdHJhY2VfZHVtcF9idWYgYmFzZWQgb24gZnRyYWNlX2R1bXA6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBTdGV2ZW4gUm9zdGVkdCA8c3Jvc3RlZHRAcmVkaGF0LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2dkYi5oPgorI2luY2x1ZGUgPGxpbnV4L2tkYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgorCisjaW5jbHVkZSAiLi4vZGVidWcva2RiL2tkYl9wcml2YXRlLmgiCisjaW5jbHVkZSAidHJhY2UuaCIKKyNpbmNsdWRlICJ0cmFjZV9vdXRwdXQuaCIKKworc3RhdGljIHZvaWQgZnRyYWNlX2R1bXBfYnVmKGludCBza2lwX2xpbmVzLCBsb25nIGNwdV9maWxlKQoreworCS8qIHVzZSBzdGF0aWMgYmVjYXVzZSBpdGVyIGNhbiBiZSBhIGJpdCBiaWcgZm9yIHRoZSBzdGFjayAqLworCXN0YXRpYyBzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgaXRlcjsKKwl1bnNpZ25lZCBpbnQgb2xkX3VzZXJvYmo7CisJaW50IGNudCA9IDAsIGNwdTsKKworCXRyYWNlX2luaXRfZ2xvYmFsX2l0ZXIoJml0ZXIpOworCisJZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KSB7CisJCWF0b21pY19pbmMoJml0ZXIudHItPmRhdGFbY3B1XS0+ZGlzYWJsZWQpOworCX0KKworCW9sZF91c2Vyb2JqID0gdHJhY2VfZmxhZ3M7CisKKwkvKiBkb24ndCBsb29rIGF0IHVzZXIgbWVtb3J5IGluIHBhbmljIG1vZGUgKi8KKwl0cmFjZV9mbGFncyAmPSB+VFJBQ0VfSVRFUl9TWU1fVVNFUk9CSjsKKworCWtkYl9wcmludGYoIkR1bXBpbmcgZnRyYWNlIGJ1ZmZlcjpcbiIpOworCisJLyogcmVzZXQgYWxsIGJ1dCB0ciwgdHJhY2UsIGFuZCBvdmVycnVucyAqLworCW1lbXNldCgmaXRlci5zZXEsIDAsCisJCSAgIHNpemVvZihzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IpIC0KKwkJICAgb2Zmc2V0b2Yoc3RydWN0IHRyYWNlX2l0ZXJhdG9yLCBzZXEpKTsKKwlpdGVyLml0ZXJfZmxhZ3MgfD0gVFJBQ0VfRklMRV9MQVRfRk1UOworCWl0ZXIucG9zID0gLTE7CisKKwlpZiAoY3B1X2ZpbGUgPT0gVFJBQ0VfUElQRV9BTExfQ1BVKSB7CisJCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkgeworCQkJaXRlci5idWZmZXJfaXRlcltjcHVdID0KKwkJCXJpbmdfYnVmZmVyX3JlYWRfcHJlcGFyZShpdGVyLnRyLT5idWZmZXIsIGNwdSk7CisJCQlyaW5nX2J1ZmZlcl9yZWFkX3N0YXJ0KGl0ZXIuYnVmZmVyX2l0ZXJbY3B1XSk7CisJCQl0cmFjaW5nX2l0ZXJfcmVzZXQoJml0ZXIsIGNwdSk7CisJCX0KKwl9IGVsc2UgeworCQlpdGVyLmNwdV9maWxlID0gY3B1X2ZpbGU7CisJCWl0ZXIuYnVmZmVyX2l0ZXJbY3B1X2ZpbGVdID0KKwkJCXJpbmdfYnVmZmVyX3JlYWRfcHJlcGFyZShpdGVyLnRyLT5idWZmZXIsIGNwdV9maWxlKTsKKwkJcmluZ19idWZmZXJfcmVhZF9zdGFydChpdGVyLmJ1ZmZlcl9pdGVyW2NwdV9maWxlXSk7CisJCXRyYWNpbmdfaXRlcl9yZXNldCgmaXRlciwgY3B1X2ZpbGUpOworCX0KKwlpZiAoIXRyYWNlX2VtcHR5KCZpdGVyKSkKKwkJdHJhY2VfZmluZF9uZXh0X2VudHJ5X2luYygmaXRlcik7CisJd2hpbGUgKCF0cmFjZV9lbXB0eSgmaXRlcikpIHsKKwkJaWYgKCFjbnQpCisJCQlrZGJfcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCQljbnQrKzsKKworCQlpZiAodHJhY2VfZmluZF9uZXh0X2VudHJ5X2luYygmaXRlcikgIT0gTlVMTCAmJiAhc2tpcF9saW5lcykKKwkJCXByaW50X3RyYWNlX2xpbmUoJml0ZXIpOworCQlpZiAoIXNraXBfbGluZXMpCisJCQl0cmFjZV9wcmludGtfc2VxKCZpdGVyLnNlcSk7CisJCWVsc2UKKwkJCXNraXBfbGluZXMtLTsKKwkJaWYgKEtEQl9GTEFHKENNRF9JTlRFUlJVUFQpKQorCQkJZ290byBvdXQ7CisJfQorCisJaWYgKCFjbnQpCisJCWtkYl9wcmludGYoIiAgIChmdHJhY2UgYnVmZmVyIGVtcHR5KVxuIik7CisJZWxzZQorCQlrZGJfcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCitvdXQ6CisJdHJhY2VfZmxhZ3MgPSBvbGRfdXNlcm9iajsKKworCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkgeworCQlhdG9taWNfZGVjKCZpdGVyLnRyLT5kYXRhW2NwdV0tPmRpc2FibGVkKTsKKwl9CisKKwlmb3JfZWFjaF90cmFjaW5nX2NwdShjcHUpCisJCWlmIChpdGVyLmJ1ZmZlcl9pdGVyW2NwdV0pCisJCQlyaW5nX2J1ZmZlcl9yZWFkX2ZpbmlzaChpdGVyLmJ1ZmZlcl9pdGVyW2NwdV0pOworfQorCisvKgorICoga2RiX2Z0ZHVtcCAtIER1bXAgdGhlIGZ0cmFjZSBsb2cgYnVmZmVyCisgKi8KK3N0YXRpYyBpbnQga2RiX2Z0ZHVtcChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IHNraXBfbGluZXMgPSAwOworCWxvbmcgY3B1X2ZpbGU7CisJY2hhciAqY3A7CisKKwlpZiAoYXJnYyA+IDIpCisJCXJldHVybiBLREJfQVJHQ09VTlQ7CisKKwlpZiAoYXJnYykgeworCQlza2lwX2xpbmVzID0gc2ltcGxlX3N0cnRvbChhcmd2WzFdLCAmY3AsIDApOworCQlpZiAoKmNwKQorCQkJc2tpcF9saW5lcyA9IDA7CisJfQorCisJaWYgKGFyZ2MgPT0gMikgeworCQljcHVfZmlsZSA9IHNpbXBsZV9zdHJ0b2woYXJndlsyXSwgJmNwLCAwKTsKKwkJaWYgKCpjcCB8fCBjcHVfZmlsZSA+PSBOUl9DUFVTIHx8IGNwdV9maWxlIDwgMCB8fAorCQkgICAgIWNwdV9vbmxpbmUoY3B1X2ZpbGUpKQorCQkJcmV0dXJuIEtEQl9CQURJTlQ7CisJfSBlbHNlIHsKKwkJY3B1X2ZpbGUgPSBUUkFDRV9QSVBFX0FMTF9DUFU7CisJfQorCisJa2RiX3RyYXBfcHJpbnRrKys7CisJZnRyYWNlX2R1bXBfYnVmKHNraXBfbGluZXMsIGNwdV9maWxlKTsKKwlrZGJfdHJhcF9wcmludGstLTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgX19pbml0IGludCBrZGJfZnRyYWNlX3JlZ2lzdGVyKHZvaWQpCit7CisJa2RiX3JlZ2lzdGVyX3JlcGVhdCgiZnRkdW1wIiwga2RiX2Z0ZHVtcCwgIltza2lwXyNsaW5lc10gW2NwdV0iLAorCQkJICAgICJEdW1wIGZ0cmFjZSBsb2ciLCAwLCBLREJfUkVQRUFUX05PTkUpOworCXJldHVybiAwOworfQorCitsYXRlX2luaXRjYWxsKGtkYl9mdHJhY2VfcmVnaXN0ZXIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jCmluZGV4IGY1MmI1ZjUuLjhiMjdjOTggMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CisjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9iaXRzcGVybG9uZy5oPgogCiAjaW5jbHVkZSAidHJhY2UuaCIKQEAgLTM4LDYgKzQwLDcgQEAKICNkZWZpbmUgTUFYX1RSQUNFX0FSR1MgMTI4CiAjZGVmaW5lIE1BWF9BUkdTVFJfTEVOIDYzCiAjZGVmaW5lIE1BWF9FVkVOVF9OQU1FX0xFTiA2NAorI2RlZmluZSBNQVhfU1RSSU5HX1NJWkUgUEFUSF9NQVgKICNkZWZpbmUgS1BST0JFX0VWRU5UX1NZU1RFTSAia3Byb2JlcyIKIAogLyogUmVzZXJ2ZWQgZmllbGQgbmFtZXMgKi8KQEAgLTU4LDE0ICs2MSwxNiBAQAogfTsKIAogLyogUHJpbnRpbmcgZnVuY3Rpb24gdHlwZSAqLwotdHlwZWRlZiBpbnQgKCpwcmludF90eXBlX2Z1bmNfdCkoc3RydWN0IHRyYWNlX3NlcSAqLCBjb25zdCBjaGFyICosIHZvaWQgKik7Cit0eXBlZGVmIGludCAoKnByaW50X3R5cGVfZnVuY190KShzdHJ1Y3QgdHJhY2Vfc2VxICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqLAorCQkJCSB2b2lkICopOwogI2RlZmluZSBQUklOVF9UWVBFX0ZVTkNfTkFNRSh0eXBlKQlwcmludF90eXBlXyMjdHlwZQogI2RlZmluZSBQUklOVF9UWVBFX0ZNVF9OQU1FKHR5cGUpCXByaW50X3R5cGVfZm9ybWF0XyMjdHlwZQogCiAvKiBQcmludGluZyAgaW4gYmFzaWMgdHlwZSBmdW5jdGlvbiB0ZW1wbGF0ZSAqLwogI2RlZmluZSBERUZJTkVfQkFTSUNfUFJJTlRfVFlQRV9GVU5DKHR5cGUsIGZtdCwgY2FzdCkJCQlcCiBzdGF0aWMgX19rcHJvYmVzIGludCBQUklOVF9UWVBFX0ZVTkNfTkFNRSh0eXBlKShzdHJ1Y3QgdHJhY2Vfc2VxICpzLAlcCi0JCQkJCQljb25zdCBjaGFyICpuYW1lLCB2b2lkICpkYXRhKVwKKwkJCQkJCWNvbnN0IGNoYXIgKm5hbWUsCVwKKwkJCQkJCXZvaWQgKmRhdGEsIHZvaWQgKmVudClcCiB7CQkJCQkJCQkJXAogCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICIgJXM9IiBmbXQsIG5hbWUsIChjYXN0KSoodHlwZSAqKWRhdGEpO1wKIH0JCQkJCQkJCQlcCkBAIC04MCw2ICs4NSw0OSBAQAogREVGSU5FX0JBU0lDX1BSSU5UX1RZUEVfRlVOQyhzMzIsICIlbGQiLCBsb25nKQogREVGSU5FX0JBU0lDX1BSSU5UX1RZUEVfRlVOQyhzNjQsICIlbGxkIiwgbG9uZyBsb25nKQogCisvKiBkYXRhX3Jsb2M6IGRhdGEgcmVsYXRpdmUgbG9jYXRpb24sIGNvbXBhdGlibGUgd2l0aCB1MzIgKi8KKyNkZWZpbmUgbWFrZV9kYXRhX3Jsb2MobGVuLCByb2ZmcykJXAorCSgoKHUzMikobGVuKSA8PCAxNikgfCAoKHUzMikocm9mZnMpICYgMHhmZmZmKSkKKyNkZWZpbmUgZ2V0X3Jsb2NfbGVuKGRsKQkoKHUzMikoZGwpID4+IDE2KQorI2RlZmluZSBnZXRfcmxvY19vZmZzKGRsKQkoKHUzMikoZGwpICYgMHhmZmZmKQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmdldF9ybG9jX2RhdGEodTMyICpkbCkKK3sKKwlyZXR1cm4gKHU4ICopZGwgKyBnZXRfcmxvY19vZmZzKCpkbCk7Cit9CisKKy8qIEZvciBkYXRhX2xvYyBjb252ZXJzaW9uICovCitzdGF0aWMgaW5saW5lIHZvaWQgKmdldF9sb2NfZGF0YSh1MzIgKmRsLCB2b2lkICplbnQpCit7CisJcmV0dXJuICh1OCAqKWVudCArIGdldF9ybG9jX29mZnMoKmRsKTsKK30KKworLyoKKyAqIENvbnZlcnQgZGF0YV9ybG9jIHRvIGRhdGFfbG9jOgorICogIGRhdGFfcmxvYyBzdG9yZXMgdGhlIG9mZnNldCBmcm9tIGRhdGFfcmxvYyBpdHNlbGYsIGJ1dCBkYXRhX2xvYworICogIHN0b3JlcyB0aGUgb2Zmc2V0IGZyb20gZXZlbnQgZW50cnkuCisgKi8KKyNkZWZpbmUgY29udmVydF9ybG9jX3RvX2xvYyhkbCwgb2ZmcykJKCh1MzIpKGRsKSArIChvZmZzKSkKKworLyogRm9yIGRlZmluaW5nIG1hY3JvcywgZGVmaW5lIHN0cmluZy9zdHJpbmdfc2l6ZSB0eXBlcyAqLwordHlwZWRlZiB1MzIgc3RyaW5nOwordHlwZWRlZiB1MzIgc3RyaW5nX3NpemU7CisKKy8qIFByaW50IHR5cGUgZnVuY3Rpb24gZm9yIHN0cmluZyB0eXBlICovCitzdGF0aWMgX19rcHJvYmVzIGludCBQUklOVF9UWVBFX0ZVTkNfTkFNRShzdHJpbmcpKHN0cnVjdCB0cmFjZV9zZXEgKnMsCisJCQkJCQkgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCQkgIHZvaWQgKmRhdGEsIHZvaWQgKmVudCkKK3sKKwlpbnQgbGVuID0gKih1MzIgKilkYXRhID4+IDE2OworCisJaWYgKCFsZW4pCisJCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICIgJXM9KGZhdWx0KSIsIG5hbWUpOworCWVsc2UKKwkJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIiAlcz1cIiVzXCIiLCBuYW1lLAorCQkJCQkoY29uc3QgY2hhciAqKWdldF9sb2NfZGF0YShkYXRhLCBlbnQpKTsKK30KK3N0YXRpYyBjb25zdCBjaGFyIFBSSU5UX1RZUEVfRk1UX05BTUUoc3RyaW5nKVtdID0gIlxcXCIlc1xcXCIiOworCiAvKiBEYXRhIGZldGNoIGZ1bmN0aW9uIHR5cGUgKi8KIHR5cGVkZWYJdm9pZCAoKmZldGNoX2Z1bmNfdCkoc3RydWN0IHB0X3JlZ3MgKiwgdm9pZCAqLCB2b2lkICopOwogCkBAIC05NCwzMiArMTQyLDM4IEBACiAJcmV0dXJuIGZwcm0tPmZuKHJlZ3MsIGZwcm0tPmRhdGEsIGRlc3QpOwogfQogCi0jZGVmaW5lIEZFVENIX0ZVTkNfTkFNRShraW5kLCB0eXBlKQlmZXRjaF8jI2tpbmQjI18jI3R5cGUKKyNkZWZpbmUgRkVUQ0hfRlVOQ19OQU1FKG1ldGhvZCwgdHlwZSkJZmV0Y2hfIyNtZXRob2QjI18jI3R5cGUKIC8qCiAgKiBEZWZpbmUgbWFjcm8gZm9yIGJhc2ljIHR5cGVzIC0gd2UgZG9uJ3QgbmVlZCB0byBkZWZpbmUgcyogdHlwZXMsIGJlY2F1c2UKICAqIHdlIGhhdmUgdG8gY2FyZSBvbmx5IGFib3V0IGJpdHdpZHRoIGF0IHJlY29yZGluZyB0aW1lLgogICovCi0jZGVmaW5lIERFRklORV9CQVNJQ19GRVRDSF9GVU5DUyhraW5kKSAgXAotREVGSU5FX0ZFVENIXyMja2luZCh1OCkJCQlcCi1ERUZJTkVfRkVUQ0hfIyNraW5kKHUxNikJCVwKLURFRklORV9GRVRDSF8jI2tpbmQodTMyKQkJXAotREVGSU5FX0ZFVENIXyMja2luZCh1NjQpCisjZGVmaW5lIERFRklORV9CQVNJQ19GRVRDSF9GVU5DUyhtZXRob2QpIFwKK0RFRklORV9GRVRDSF8jI21ldGhvZCh1OCkJCVwKK0RFRklORV9GRVRDSF8jI21ldGhvZCh1MTYpCQlcCitERUZJTkVfRkVUQ0hfIyNtZXRob2QodTMyKQkJXAorREVGSU5FX0ZFVENIXyMjbWV0aG9kKHU2NCkKIAotI2RlZmluZSBDSEVDS19CQVNJQ19GRVRDSF9GVU5DUyhraW5kLCBmbikJXAotCSgoRkVUQ0hfRlVOQ19OQU1FKGtpbmQsIHU4KSA9PSBmbikgfHwJXAotCSAoRkVUQ0hfRlVOQ19OQU1FKGtpbmQsIHUxNikgPT0gZm4pIHx8CVwKLQkgKEZFVENIX0ZVTkNfTkFNRShraW5kLCB1MzIpID09IGZuKSB8fAlcCi0JIChGRVRDSF9GVU5DX05BTUUoa2luZCwgdTY0KSA9PSBmbikpCisjZGVmaW5lIENIRUNLX0ZFVENIX0ZVTkNTKG1ldGhvZCwgZm4pCQkJXAorCSgoKEZFVENIX0ZVTkNfTkFNRShtZXRob2QsIHU4KSA9PSBmbikgfHwJXAorCSAgKEZFVENIX0ZVTkNfTkFNRShtZXRob2QsIHUxNikgPT0gZm4pIHx8CVwKKwkgIChGRVRDSF9GVU5DX05BTUUobWV0aG9kLCB1MzIpID09IGZuKSB8fAlcCisJICAoRkVUQ0hfRlVOQ19OQU1FKG1ldGhvZCwgdTY0KSA9PSBmbikgfHwJXAorCSAgKEZFVENIX0ZVTkNfTkFNRShtZXRob2QsIHN0cmluZykgPT0gZm4pIHx8CVwKKwkgIChGRVRDSF9GVU5DX05BTUUobWV0aG9kLCBzdHJpbmdfc2l6ZSkgPT0gZm4pKSBcCisJICYmIChmbiAhPSBOVUxMKSkKIAogLyogRGF0YSBmZXRjaCBmdW5jdGlvbiB0ZW1wbGF0ZXMgKi8KICNkZWZpbmUgREVGSU5FX0ZFVENIX3JlZyh0eXBlKQkJCQkJCVwKIHN0YXRpYyBfX2twcm9iZXMgdm9pZCBGRVRDSF9GVU5DX05BTUUocmVnLCB0eXBlKShzdHJ1Y3QgcHRfcmVncyAqcmVncywJXAotCQkJCQkgIHZvaWQgKm9mZnNldCwgdm9pZCAqZGVzdCkJXAorCQkJCQl2b2lkICpvZmZzZXQsIHZvaWQgKmRlc3QpCVwKIHsJCQkJCQkJCQlcCiAJKih0eXBlICopZGVzdCA9ICh0eXBlKXJlZ3NfZ2V0X3JlZ2lzdGVyKHJlZ3MsCQkJXAogCQkJCSh1bnNpZ25lZCBpbnQpKCh1bnNpZ25lZCBsb25nKW9mZnNldCkpOwlcCiB9CiBERUZJTkVfQkFTSUNfRkVUQ0hfRlVOQ1MocmVnKQorLyogTm8gc3RyaW5nIG9uIHRoZSByZWdpc3RlciAqLworI2RlZmluZSBmZXRjaF9yZWdfc3RyaW5nIE5VTEwKKyNkZWZpbmUgZmV0Y2hfcmVnX3N0cmluZ19zaXplIE5VTEwKIAogI2RlZmluZSBERUZJTkVfRkVUQ0hfc3RhY2sodHlwZSkJCQkJCVwKIHN0YXRpYyBfX2twcm9iZXMgdm9pZCBGRVRDSF9GVU5DX05BTUUoc3RhY2ssIHR5cGUpKHN0cnVjdCBwdF9yZWdzICpyZWdzLFwKQEAgLTEyOSw2ICsxODMsOSBAQAogCQkJCSh1bnNpZ25lZCBpbnQpKCh1bnNpZ25lZCBsb25nKW9mZnNldCkpOwlcCiB9CiBERUZJTkVfQkFTSUNfRkVUQ0hfRlVOQ1Moc3RhY2spCisvKiBObyBzdHJpbmcgb24gdGhlIHN0YWNrIGVudHJ5ICovCisjZGVmaW5lIGZldGNoX3N0YWNrX3N0cmluZyBOVUxMCisjZGVmaW5lIGZldGNoX3N0YWNrX3N0cmluZ19zaXplIE5VTEwKIAogI2RlZmluZSBERUZJTkVfRkVUQ0hfcmV0dmFsKHR5cGUpCQkJCQlcCiBzdGF0aWMgX19rcHJvYmVzIHZvaWQgRkVUQ0hfRlVOQ19OQU1FKHJldHZhbCwgdHlwZSkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXApAQCAtMTM3LDYgKzE5NCw5IEBACiAJKih0eXBlICopZGVzdCA9ICh0eXBlKXJlZ3NfcmV0dXJuX3ZhbHVlKHJlZ3MpOwkJCVwKIH0KIERFRklORV9CQVNJQ19GRVRDSF9GVU5DUyhyZXR2YWwpCisvKiBObyBzdHJpbmcgb24gdGhlIHJldHZhbCAqLworI2RlZmluZSBmZXRjaF9yZXR2YWxfc3RyaW5nIE5VTEwKKyNkZWZpbmUgZmV0Y2hfcmV0dmFsX3N0cmluZ19zaXplIE5VTEwKIAogI2RlZmluZSBERUZJTkVfRkVUQ0hfbWVtb3J5KHR5cGUpCQkJCQlcCiBzdGF0aWMgX19rcHJvYmVzIHZvaWQgRkVUQ0hfRlVOQ19OQU1FKG1lbW9yeSwgdHlwZSkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXApAQCAtMTQ5LDYgKzIwOSw2MiBAQAogCQkqKHR5cGUgKilkZXN0ID0gcmV0dmFsOwkJCQkJXAogfQogREVGSU5FX0JBU0lDX0ZFVENIX0ZVTkNTKG1lbW9yeSkKKy8qCisgKiBGZXRjaCBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcuIENhbGxlciBNVVNUIHNldCAqKHUzMiAqKWRlc3Qgd2l0aCBtYXgKKyAqIGxlbmd0aCBhbmQgcmVsYXRpdmUgZGF0YSBsb2NhdGlvbi4KKyAqLworc3RhdGljIF9fa3Byb2JlcyB2b2lkIEZFVENIX0ZVTkNfTkFNRShtZW1vcnksIHN0cmluZykoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCQkgICAgICB2b2lkICphZGRyLCB2b2lkICpkZXN0KQoreworCWxvbmcgcmV0OworCWludCBtYXhsZW4gPSBnZXRfcmxvY19sZW4oKih1MzIgKilkZXN0KTsKKwl1OCAqZHN0ID0gZ2V0X3Jsb2NfZGF0YShkZXN0KTsKKwl1OCAqc3JjID0gYWRkcjsKKwltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7CisJaWYgKCFtYXhsZW4pCisJCXJldHVybjsKKwkvKgorCSAqIFRyeSB0byBnZXQgc3RyaW5nIGFnYWluLCBzaW5jZSB0aGUgc3RyaW5nIGNhbiBiZSBjaGFuZ2VkIHdoaWxlCisJICogcHJvYmluZy4KKwkgKi8KKwlzZXRfZnMoS0VSTkVMX0RTKTsKKwlwYWdlZmF1bHRfZGlzYWJsZSgpOworCWRvCisJCXJldCA9IF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMoZHN0KyssIHNyYysrLCAxKTsKKwl3aGlsZSAoZHN0Wy0xXSAmJiByZXQgPT0gMCAmJiBzcmMgLSAodTggKilhZGRyIDwgbWF4bGVuKTsKKwlkc3RbLTFdID0gJ1wwJzsKKwlwYWdlZmF1bHRfZW5hYmxlKCk7CisJc2V0X2ZzKG9sZF9mcyk7CisKKwlpZiAocmV0IDwgMCkgewkvKiBGYWlsZWQgdG8gZmV0Y2ggc3RyaW5nICovCisJCSgodTggKilnZXRfcmxvY19kYXRhKGRlc3QpKVswXSA9ICdcMCc7CisJCSoodTMyICopZGVzdCA9IG1ha2VfZGF0YV9ybG9jKDAsIGdldF9ybG9jX29mZnMoKih1MzIgKilkZXN0KSk7CisJfSBlbHNlCisJCSoodTMyICopZGVzdCA9IG1ha2VfZGF0YV9ybG9jKHNyYyAtICh1OCAqKWFkZHIsCisJCQkJCSAgICAgIGdldF9ybG9jX29mZnMoKih1MzIgKilkZXN0KSk7Cit9CisvKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiBzdHJpbmcgLS0gaW5jbHVkaW5nIG51bGwgdGVybWluYWwgYnl0ZSAqLworc3RhdGljIF9fa3Byb2JlcyB2b2lkIEZFVENIX0ZVTkNfTkFNRShtZW1vcnksIHN0cmluZ19zaXplKShzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkJCQl2b2lkICphZGRyLCB2b2lkICpkZXN0KQoreworCWludCByZXQsIGxlbiA9IDA7CisJdTggYzsKKwltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7CisKKwlzZXRfZnMoS0VSTkVMX0RTKTsKKwlwYWdlZmF1bHRfZGlzYWJsZSgpOworCWRvIHsKKwkJcmV0ID0gX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYygmYywgKHU4ICopYWRkciArIGxlbiwgMSk7CisJCWxlbisrOworCX0gd2hpbGUgKGMgJiYgcmV0ID09IDAgJiYgbGVuIDwgTUFYX1NUUklOR19TSVpFKTsKKwlwYWdlZmF1bHRfZW5hYmxlKCk7CisJc2V0X2ZzKG9sZF9mcyk7CisKKwlpZiAocmV0IDwgMCkJLyogRmFpbGVkIHRvIGNoZWNrIHRoZSBsZW5ndGggKi8KKwkJKih1MzIgKilkZXN0ID0gMDsKKwllbHNlCisJCSoodTMyICopZGVzdCA9IGxlbjsKK30KIAogLyogTWVtb3J5IGZldGNoaW5nIGJ5IHN5bWJvbCAqLwogc3RydWN0IHN5bWJvbF9jYWNoZSB7CkBAIC0yMDMsNiArMzE5LDggQEAKIAkJKih0eXBlICopZGVzdCA9IDA7CQkJCQlcCiB9CiBERUZJTkVfQkFTSUNfRkVUQ0hfRlVOQ1Moc3ltYm9sKQorREVGSU5FX0ZFVENIX3N5bWJvbChzdHJpbmcpCitERUZJTkVfRkVUQ0hfc3ltYm9sKHN0cmluZ19zaXplKQogCiAvKiBEZXJlZmVyZW5jZSBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9uICovCiBzdHJ1Y3QgZGVyZWZfZmV0Y2hfcGFyYW0gewpAQCAtMjI0LDEyICszNDIsMTQgQEAKIAkJKih0eXBlICopZGVzdCA9IDA7CQkJCQlcCiB9CiBERUZJTkVfQkFTSUNfRkVUQ0hfRlVOQ1MoZGVyZWYpCitERUZJTkVfRkVUQ0hfZGVyZWYoc3RyaW5nKQorREVGSU5FX0ZFVENIX2RlcmVmKHN0cmluZ19zaXplKQogCiBzdGF0aWMgX19rcHJvYmVzIHZvaWQgZnJlZV9kZXJlZl9mZXRjaF9wYXJhbShzdHJ1Y3QgZGVyZWZfZmV0Y2hfcGFyYW0gKmRhdGEpCiB7Ci0JaWYgKENIRUNLX0JBU0lDX0ZFVENIX0ZVTkNTKGRlcmVmLCBkYXRhLT5vcmlnLmZuKSkKKwlpZiAoQ0hFQ0tfRkVUQ0hfRlVOQ1MoZGVyZWYsIGRhdGEtPm9yaWcuZm4pKQogCQlmcmVlX2RlcmVmX2ZldGNoX3BhcmFtKGRhdGEtPm9yaWcuZGF0YSk7Ci0JZWxzZSBpZiAoQ0hFQ0tfQkFTSUNfRkVUQ0hfRlVOQ1Moc3ltYm9sLCBkYXRhLT5vcmlnLmZuKSkKKwllbHNlIGlmIChDSEVDS19GRVRDSF9GVU5DUyhzeW1ib2wsIGRhdGEtPm9yaWcuZm4pKQogCQlmcmVlX3N5bWJvbF9jYWNoZShkYXRhLT5vcmlnLmRhdGEpOwogCWtmcmVlKGRhdGEpOwogfQpAQCAtMjQwLDIzICszNjAsNDMgQEAKICNkZWZpbmUgREVGQVVMVF9GRVRDSF9UWVBFIF9ERUZBVUxUX0ZFVENIX1RZUEUoQklUU19QRVJfTE9ORykKICNkZWZpbmUgREVGQVVMVF9GRVRDSF9UWVBFX1NUUiBfX3N0cmluZ2lmeShERUZBVUxUX0ZFVENIX1RZUEUpCiAKLSNkZWZpbmUgQVNTSUdOX0ZFVENIX0ZVTkMoa2luZCwgdHlwZSkJXAotCS5raW5kID0gRkVUQ0hfRlVOQ19OQU1FKGtpbmQsIHR5cGUpCisvKiBGZXRjaCB0eXBlcyAqLworZW51bSB7CisJRkVUQ0hfTVREX3JlZyA9IDAsCisJRkVUQ0hfTVREX3N0YWNrLAorCUZFVENIX01URF9yZXR2YWwsCisJRkVUQ0hfTVREX21lbW9yeSwKKwlGRVRDSF9NVERfc3ltYm9sLAorCUZFVENIX01URF9kZXJlZiwKKwlGRVRDSF9NVERfRU5ELAorfTsKIAotI2RlZmluZSBBU1NJR05fRkVUQ0hfVFlQRShwdHlwZSwgZnR5cGUsIHNpZ24pCVwKLQl7Lm5hbWUgPSAjcHR5cGUsCQkJXAotCSAuc2l6ZSA9IHNpemVvZihmdHlwZSksCQkJXAotCSAuaXNfc2lnbmVkID0gc2lnbiwJCQlcCi0JIC5wcmludCA9IFBSSU5UX1RZUEVfRlVOQ19OQU1FKHB0eXBlKSwJXAotCSAuZm10ID0gUFJJTlRfVFlQRV9GTVRfTkFNRShwdHlwZSksCVwKLUFTU0lHTl9GRVRDSF9GVU5DKHJlZywgZnR5cGUpLAkJCVwKLUFTU0lHTl9GRVRDSF9GVU5DKHN0YWNrLCBmdHlwZSksCQlcCi1BU1NJR05fRkVUQ0hfRlVOQyhyZXR2YWwsIGZ0eXBlKSwJCVwKLUFTU0lHTl9GRVRDSF9GVU5DKG1lbW9yeSwgZnR5cGUpLAkJXAotQVNTSUdOX0ZFVENIX0ZVTkMoc3ltYm9sLCBmdHlwZSksCQlcCi1BU1NJR05fRkVUQ0hfRlVOQyhkZXJlZiwgZnR5cGUpLAkJXAorI2RlZmluZSBBU1NJR05fRkVUQ0hfRlVOQyhtZXRob2QsIHR5cGUpCVwKKwlbRkVUQ0hfTVREXyMjbWV0aG9kXSA9IEZFVENIX0ZVTkNfTkFNRShtZXRob2QsIHR5cGUpCisKKyNkZWZpbmUgX19BU1NJR05fRkVUQ0hfVFlQRShfbmFtZSwgcHR5cGUsIGZ0eXBlLCBfc2l6ZSwgc2lnbiwgX2ZtdHR5cGUpCVwKKwl7Lm5hbWUgPSBfbmFtZSwJCQkJXAorCSAuc2l6ZSA9IF9zaXplLAkJCQkJXAorCSAuaXNfc2lnbmVkID0gc2lnbiwJCQkJXAorCSAucHJpbnQgPSBQUklOVF9UWVBFX0ZVTkNfTkFNRShwdHlwZSksCQlcCisJIC5mbXQgPSBQUklOVF9UWVBFX0ZNVF9OQU1FKHB0eXBlKSwJCVwKKwkgLmZtdHR5cGUgPSBfZm10dHlwZSwJCQkJXAorCSAuZmV0Y2ggPSB7CQkJCQlcCitBU1NJR05fRkVUQ0hfRlVOQyhyZWcsIGZ0eXBlKSwJCQkJXAorQVNTSUdOX0ZFVENIX0ZVTkMoc3RhY2ssIGZ0eXBlKSwJCQlcCitBU1NJR05fRkVUQ0hfRlVOQyhyZXR2YWwsIGZ0eXBlKSwJCQlcCitBU1NJR05fRkVUQ0hfRlVOQyhtZW1vcnksIGZ0eXBlKSwJCQlcCitBU1NJR05fRkVUQ0hfRlVOQyhzeW1ib2wsIGZ0eXBlKSwJCQlcCitBU1NJR05fRkVUQ0hfRlVOQyhkZXJlZiwgZnR5cGUpLAkJCVwKKwkgIH0JCQkJCQlcCiAJfQogCisjZGVmaW5lIEFTU0lHTl9GRVRDSF9UWVBFKHB0eXBlLCBmdHlwZSwgc2lnbikJCQlcCisJX19BU1NJR05fRkVUQ0hfVFlQRSgjcHR5cGUsIHB0eXBlLCBmdHlwZSwgc2l6ZW9mKGZ0eXBlKSwgc2lnbiwgI3B0eXBlKQorCisjZGVmaW5lIEZFVENIX1RZUEVfU1RSSU5HIDAKKyNkZWZpbmUgRkVUQ0hfVFlQRV9TVFJTSVpFIDEKKwogLyogRmV0Y2ggdHlwZSBpbmZvcm1hdGlvbiB0YWJsZSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBmZXRjaF90eXBlIHsKIAljb25zdCBjaGFyCSpuYW1lOwkJLyogTmFtZSBvZiB0eXBlICovCkBAIC0yNjQsMTQgKzQwNCwxNiBAQAogCWludAkJaXNfc2lnbmVkOwkvKiBTaWduZWQgZmxhZyAqLwogCXByaW50X3R5cGVfZnVuY190CXByaW50OwkvKiBQcmludCBmdW5jdGlvbnMgKi8KIAljb25zdCBjaGFyCSpmbXQ7CQkvKiBGcm9tYXQgc3RyaW5nICovCisJY29uc3QgY2hhcgkqZm10dHlwZTsJLyogTmFtZSBpbiBmb3JtYXQgZmlsZSAqLwogCS8qIEZldGNoIGZ1bmN0aW9ucyAqLwotCWZldGNoX2Z1bmNfdAlyZWc7Ci0JZmV0Y2hfZnVuY190CXN0YWNrOwotCWZldGNoX2Z1bmNfdAlyZXR2YWw7Ci0JZmV0Y2hfZnVuY190CW1lbW9yeTsKLQlmZXRjaF9mdW5jX3QJc3ltYm9sOwotCWZldGNoX2Z1bmNfdAlkZXJlZjsKKwlmZXRjaF9mdW5jX3QJZmV0Y2hbRkVUQ0hfTVREX0VORF07CiB9IGZldGNoX3R5cGVfdGFibGVbXSA9IHsKKwkvKiBTcGVjaWFsIHR5cGVzICovCisJW0ZFVENIX1RZUEVfU1RSSU5HXSA9IF9fQVNTSUdOX0ZFVENIX1RZUEUoInN0cmluZyIsIHN0cmluZywgc3RyaW5nLAorCQkJCQlzaXplb2YodTMyKSwgMSwgIl9fZGF0YV9sb2MgY2hhcltdIiksCisJW0ZFVENIX1RZUEVfU1RSU0laRV0gPSBfX0FTU0lHTl9GRVRDSF9UWVBFKCJzdHJpbmdfc2l6ZSIsIHUzMiwKKwkJCQkJc3RyaW5nX3NpemUsIHNpemVvZih1MzIpLCAwLCAidTMyIiksCisJLyogQmFzaWMgdHlwZXMgKi8KIAlBU1NJR05fRkVUQ0hfVFlQRSh1OCwgIHU4LCAgMCksCiAJQVNTSUdOX0ZFVENIX1RZUEUodTE2LCB1MTYsIDApLAogCUFTU0lHTl9GRVRDSF9UWVBFKHUzMiwgdTMyLCAwKSwKQEAgLTMwMiwxMiArNDQ0LDI4IEBACiAJKih1bnNpZ25lZCBsb25nICopZGVzdCA9IGtlcm5lbF9zdGFja19wb2ludGVyKHJlZ3MpOwogfQogCitzdGF0aWMgZmV0Y2hfZnVuY190IGdldF9mZXRjaF9zaXplX2Z1bmN0aW9uKGNvbnN0IHN0cnVjdCBmZXRjaF90eXBlICp0eXBlLAorCQkJCQkgICAgZmV0Y2hfZnVuY190IG9yaWdfZm4pCit7CisJaW50IGk7CisKKwlpZiAodHlwZSAhPSAmZmV0Y2hfdHlwZV90YWJsZVtGRVRDSF9UWVBFX1NUUklOR10pCisJCXJldHVybiBOVUxMOwkvKiBPbmx5IHN0cmluZyB0eXBlIG5lZWRzIHNpemUgZnVuY3Rpb24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgRkVUQ0hfTVREX0VORDsgaSsrKQorCQlpZiAodHlwZS0+ZmV0Y2hbaV0gPT0gb3JpZ19mbikKKwkJCXJldHVybiBmZXRjaF90eXBlX3RhYmxlW0ZFVENIX1RZUEVfU1RSU0laRV0uZmV0Y2hbaV07CisKKwlXQVJOX09OKDEpOwkvKiBUaGlzIHNob3VsZCBub3QgaGFwcGVuICovCisJcmV0dXJuIE5VTEw7Cit9CisKIC8qKgogICogS3Byb2JlIGV2ZW50IGNvcmUgZnVuY3Rpb25zCiAgKi8KIAogc3RydWN0IHByb2JlX2FyZyB7CiAJc3RydWN0IGZldGNoX3BhcmFtCWZldGNoOworCXN0cnVjdCBmZXRjaF9wYXJhbQlmZXRjaF9zaXplOwogCXVuc2lnbmVkIGludAkJb2Zmc2V0OwkvKiBPZmZzZXQgZnJvbSBhcmd1bWVudCBlbnRyeSAqLwogCWNvbnN0IGNoYXIJCSpuYW1lOwkvKiBOYW1lIG9mIHRoaXMgYXJndW1lbnQgKi8KIAljb25zdCBjaGFyCQkqY29tbTsJLyogQ29tbWFuZCBvZiB0aGlzIGFyZ3VtZW50ICovCkBAIC00MjksOSArNTg3LDkgQEAKIAogc3RhdGljIHZvaWQgZnJlZV9wcm9iZV9hcmcoc3RydWN0IHByb2JlX2FyZyAqYXJnKQogewotCWlmIChDSEVDS19CQVNJQ19GRVRDSF9GVU5DUyhkZXJlZiwgYXJnLT5mZXRjaC5mbikpCisJaWYgKENIRUNLX0ZFVENIX0ZVTkNTKGRlcmVmLCBhcmctPmZldGNoLmZuKSkKIAkJZnJlZV9kZXJlZl9mZXRjaF9wYXJhbShhcmctPmZldGNoLmRhdGEpOwotCWVsc2UgaWYgKENIRUNLX0JBU0lDX0ZFVENIX0ZVTkNTKHN5bWJvbCwgYXJnLT5mZXRjaC5mbikpCisJZWxzZSBpZiAoQ0hFQ0tfRkVUQ0hfRlVOQ1Moc3ltYm9sLCBhcmctPmZldGNoLmZuKSkKIAkJZnJlZV9zeW1ib2xfY2FjaGUoYXJnLT5mZXRjaC5kYXRhKTsKIAlrZnJlZShhcmctPm5hbWUpOwogCWtmcmVlKGFyZy0+Y29tbSk7CkBAIC01NDgsNyArNzA2LDcgQEAKIAogCWlmIChzdHJjbXAoYXJnLCAicmV0dmFsIikgPT0gMCkgewogCQlpZiAoaXNfcmV0dXJuKQotCQkJZi0+Zm4gPSB0LT5yZXR2YWw7CisJCQlmLT5mbiA9IHQtPmZldGNoW0ZFVENIX01URF9yZXR2YWxdOwogCQllbHNlCiAJCQlyZXQgPSAtRUlOVkFMOwogCX0gZWxzZSBpZiAoc3RybmNtcChhcmcsICJzdGFjayIsIDUpID09IDApIHsKQEAgLTU2Miw3ICs3MjAsNyBAQAogCQkJaWYgKHJldCB8fCBwYXJhbSA+IFBBUkFNX01BWF9TVEFDSykKIAkJCQlyZXQgPSAtRUlOVkFMOwogCQkJZWxzZSB7Ci0JCQkJZi0+Zm4gPSB0LT5zdGFjazsKKwkJCQlmLT5mbiA9IHQtPmZldGNoW0ZFVENIX01URF9zdGFja107CiAJCQkJZi0+ZGF0YSA9ICh2b2lkICopcGFyYW07CiAJCQl9CiAJCX0gZWxzZQpAQCAtNTg4LDcgKzc0Niw3IEBACiAJY2FzZSAnJSc6CS8qIG5hbWVkIHJlZ2lzdGVyICovCiAJCXJldCA9IHJlZ3NfcXVlcnlfcmVnaXN0ZXJfb2Zmc2V0KGFyZyArIDEpOwogCQlpZiAocmV0ID49IDApIHsKLQkJCWYtPmZuID0gdC0+cmVnOworCQkJZi0+Zm4gPSB0LT5mZXRjaFtGRVRDSF9NVERfcmVnXTsKIAkJCWYtPmRhdGEgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKXJldDsKIAkJCXJldCA9IDA7CiAJCX0KQEAgLTU5OCw3ICs3NTYsNyBAQAogCQkJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYXJnICsgMSwgMCwgJnBhcmFtKTsKIAkJCWlmIChyZXQpCiAJCQkJYnJlYWs7Ci0JCQlmLT5mbiA9IHQtPm1lbW9yeTsKKwkJCWYtPmZuID0gdC0+ZmV0Y2hbRkVUQ0hfTVREX21lbW9yeV07CiAJCQlmLT5kYXRhID0gKHZvaWQgKilwYXJhbTsKIAkJfSBlbHNlIHsKIAkJCXJldCA9IHNwbGl0X3N5bWJvbF9vZmZzZXQoYXJnICsgMSwgJm9mZnNldCk7CkBAIC02MDYsNyArNzY0LDcgQEAKIAkJCQlicmVhazsKIAkJCWYtPmRhdGEgPSBhbGxvY19zeW1ib2xfY2FjaGUoYXJnICsgMSwgb2Zmc2V0KTsKIAkJCWlmIChmLT5kYXRhKQotCQkJCWYtPmZuID0gdC0+c3ltYm9sOworCQkJCWYtPmZuID0gdC0+ZmV0Y2hbRkVUQ0hfTVREX3N5bWJvbF07CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSAnKyc6CS8qIGRlcmVmIG1lbW9yeSAqLwpAQCAtNjM2LDE0ICs3OTQsMTcgQEAKIAkJCWlmIChyZXQpCiAJCQkJa2ZyZWUoZHBybSk7CiAJCQllbHNlIHsKLQkJCQlmLT5mbiA9IHQtPmRlcmVmOworCQkJCWYtPmZuID0gdC0+ZmV0Y2hbRkVUQ0hfTVREX2RlcmVmXTsKIAkJCQlmLT5kYXRhID0gKHZvaWQgKilkcHJtOwogCQkJfQogCQl9CiAJCWJyZWFrOwogCX0KLQlpZiAoIXJldCAmJiAhZi0+Zm4pCisJaWYgKCFyZXQgJiYgIWYtPmZuKSB7CS8qIFBhcnNlZCwgYnV0IGRvIG5vdCBmaW5kIGZldGNoIG1ldGhvZCAqLworCQlwcl9pbmZvKCIlcyB0eXBlIGhhcyBubyBjb3JyZXNwb25kaW5nIGZldGNoIG1ldGhvZC5cbiIsCisJCQl0LT5uYW1lKTsKIAkJcmV0ID0gLUVJTlZBTDsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjUyLDYgKzgxMyw3IEBACiAJCQkgICBzdHJ1Y3QgcHJvYmVfYXJnICpwYXJnLCBpbnQgaXNfcmV0dXJuKQogewogCWNvbnN0IGNoYXIgKnQ7CisJaW50IHJldDsKIAogCWlmIChzdHJsZW4oYXJnKSA+IE1BWF9BUkdTVFJfTEVOKSB7CiAJCXByX2luZm8oIkFyZ3VtZW50IGlzIHRvbyBsb25nLjogJXNcbiIsICBhcmcpOwpAQCAtNjc0LDcgKzgzNiwxMyBAQAogCX0KIAlwYXJnLT5vZmZzZXQgPSB0cC0+c2l6ZTsKIAl0cC0+c2l6ZSArPSBwYXJnLT50eXBlLT5zaXplOwotCXJldHVybiBfX3BhcnNlX3Byb2JlX2FyZyhhcmcsIHBhcmctPnR5cGUsICZwYXJnLT5mZXRjaCwgaXNfcmV0dXJuKTsKKwlyZXQgPSBfX3BhcnNlX3Byb2JlX2FyZyhhcmcsIHBhcmctPnR5cGUsICZwYXJnLT5mZXRjaCwgaXNfcmV0dXJuKTsKKwlpZiAocmV0ID49IDApIHsKKwkJcGFyZy0+ZmV0Y2hfc2l6ZS5mbiA9IGdldF9mZXRjaF9zaXplX2Z1bmN0aW9uKHBhcmctPnR5cGUsCisJCQkJCQkJICAgICAgcGFyZy0+ZmV0Y2guZm4pOworCQlwYXJnLT5mZXRjaF9zaXplLmRhdGEgPSBwYXJnLT5mZXRjaC5kYXRhOworCX0KKwlyZXR1cm4gcmV0OwogfQogCiAvKiBSZXR1cm4gMSBpZiBuYW1lIGlzIHJlc2VydmVkIG9yIGFscmVhZHkgdXNlZCBieSBhbm90aGVyIGFyZ3VtZW50ICovCkBAIC03NTcsMTQgKzkyNSwxNyBAQAogCQkJcHJfaW5mbygiRGVsZXRlIGNvbW1hbmQgbmVlZHMgYW4gZXZlbnQgbmFtZS5cbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KKwkJbXV0ZXhfbG9jaygmcHJvYmVfbG9jayk7CiAJCXRwID0gZmluZF9wcm9iZV9ldmVudChldmVudCwgZ3JvdXApOwogCQlpZiAoIXRwKSB7CisJCQltdXRleF91bmxvY2soJnByb2JlX2xvY2spOwogCQkJcHJfaW5mbygiRXZlbnQgJXMvJXMgZG9lc24ndCBleGlzdC5cbiIsIGdyb3VwLCBldmVudCk7CiAJCQlyZXR1cm4gLUVOT0VOVDsKIAkJfQogCQkvKiBkZWxldGUgYW4gZXZlbnQgKi8KIAkJdW5yZWdpc3Rlcl90cmFjZV9wcm9iZSh0cCk7CiAJCWZyZWVfdHJhY2VfcHJvYmUodHApOworCQltdXRleF91bmxvY2soJnByb2JlX2xvY2spOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTEwNDMsNiArMTIxNCw1NCBAQAogCS5yZWxlYXNlICAgICAgICA9IHNlcV9yZWxlYXNlLAogfTsKIAorLyogU3VtIHVwIHRvdGFsIGRhdGEgbGVuZ3RoIGZvciBkeW5hbWljIGFycmFpZXMgKHN0cmluZ3MpICovCitzdGF0aWMgX19rcHJvYmVzIGludCBfX2dldF9kYXRhX3NpemUoc3RydWN0IHRyYWNlX3Byb2JlICp0cCwKKwkJCQkgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBpLCByZXQgPSAwOworCXUzMiBsZW47CisKKwlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykKKwkJaWYgKHVubGlrZWx5KHRwLT5hcmdzW2ldLmZldGNoX3NpemUuZm4pKSB7CisJCQljYWxsX2ZldGNoKCZ0cC0+YXJnc1tpXS5mZXRjaF9zaXplLCByZWdzLCAmbGVuKTsKKwkJCXJldCArPSBsZW47CisJCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qIFN0b3JlIHRoZSB2YWx1ZSBvZiBlYWNoIGFyZ3VtZW50ICovCitzdGF0aWMgX19rcHJvYmVzIHZvaWQgc3RvcmVfdHJhY2VfYXJncyhpbnQgZW50X3NpemUsIHN0cnVjdCB0cmFjZV9wcm9iZSAqdHAsCisJCQkJICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCSAgICAgICB1OCAqZGF0YSwgaW50IG1heGxlbikKK3sKKwlpbnQgaTsKKwl1MzIgZW5kID0gdHAtPnNpemU7CisJdTMyICpkbDsJLyogRGF0YSAocmVsYXRpdmUpIGxvY2F0aW9uICovCisKKwlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykgeworCQlpZiAodW5saWtlbHkodHAtPmFyZ3NbaV0uZmV0Y2hfc2l6ZS5mbikpIHsKKwkJCS8qCisJCQkgKiBGaXJzdCwgd2Ugc2V0IHRoZSByZWxhdGl2ZSBsb2NhdGlvbiBhbmQKKwkJCSAqIG1heGltdW0gZGF0YSBsZW5ndGggdG8gKmRsCisJCQkgKi8KKwkJCWRsID0gKHUzMiAqKShkYXRhICsgdHAtPmFyZ3NbaV0ub2Zmc2V0KTsKKwkJCSpkbCA9IG1ha2VfZGF0YV9ybG9jKG1heGxlbiwgZW5kIC0gdHAtPmFyZ3NbaV0ub2Zmc2V0KTsKKwkJCS8qIFRoZW4gdHJ5IHRvIGZldGNoIHN0cmluZyBvciBkeW5hbWljIGFycmF5IGRhdGEgKi8KKwkJCWNhbGxfZmV0Y2goJnRwLT5hcmdzW2ldLmZldGNoLCByZWdzLCBkbCk7CisJCQkvKiBSZWR1Y2UgbWF4aW11bSBsZW5ndGggKi8KKwkJCWVuZCArPSBnZXRfcmxvY19sZW4oKmRsKTsKKwkJCW1heGxlbiAtPSBnZXRfcmxvY19sZW4oKmRsKTsKKwkJCS8qIFRyaWNrIGhlcmUsIGNvbnZlcnQgZGF0YV9ybG9jIHRvIGRhdGFfbG9jICovCisJCQkqZGwgPSBjb252ZXJ0X3Jsb2NfdG9fbG9jKCpkbCwKKwkJCQkgZW50X3NpemUgKyB0cC0+YXJnc1tpXS5vZmZzZXQpOworCQl9IGVsc2UKKwkJCS8qIEp1c3QgZmV0Y2hpbmcgZGF0YSBub3JtYWxseSAqLworCQkJY2FsbF9mZXRjaCgmdHAtPmFyZ3NbaV0uZmV0Y2gsIHJlZ3MsCisJCQkJICAgZGF0YSArIHRwLT5hcmdzW2ldLm9mZnNldCk7CisJfQorfQorCiAvKiBLcHJvYmUgaGFuZGxlciAqLwogc3RhdGljIF9fa3Byb2JlcyB2b2lkIGtwcm9iZV90cmFjZV9mdW5jKHN0cnVjdCBrcHJvYmUgKmtwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKQEAgLTEwNTAsOCArMTI2OSw3IEBACiAJc3RydWN0IGtwcm9iZV90cmFjZV9lbnRyeV9oZWFkICplbnRyeTsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyOwotCXU4ICpkYXRhOwotCWludCBzaXplLCBpLCBwYzsKKwlpbnQgc2l6ZSwgZHNpemUsIHBjOwogCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9ICZ0cC0+Y2FsbDsKIApAQCAtMTA2MCw3ICsxMjc4LDggQEAKIAlsb2NhbF9zYXZlX2ZsYWdzKGlycV9mbGFncyk7CiAJcGMgPSBwcmVlbXB0X2NvdW50KCk7CiAKLQlzaXplID0gc2l6ZW9mKCplbnRyeSkgKyB0cC0+c2l6ZTsKKwlkc2l6ZSA9IF9fZ2V0X2RhdGFfc2l6ZSh0cCwgcmVncyk7CisJc2l6ZSA9IHNpemVvZigqZW50cnkpICsgdHAtPnNpemUgKyBkc2l6ZTsKIAogCWV2ZW50ID0gdHJhY2VfY3VycmVudF9idWZmZXJfbG9ja19yZXNlcnZlKCZidWZmZXIsIGNhbGwtPmV2ZW50LnR5cGUsCiAJCQkJCQkgIHNpemUsIGlycV9mbGFncywgcGMpOwpAQCAtMTA2OSw5ICsxMjg4LDcgQEAKIAogCWVudHJ5ID0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CiAJZW50cnktPmlwID0gKHVuc2lnbmVkIGxvbmcpa3AtPmFkZHI7Ci0JZGF0YSA9ICh1OCAqKSZlbnRyeVsxXTsKLQlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykKLQkJY2FsbF9mZXRjaCgmdHAtPmFyZ3NbaV0uZmV0Y2gsIHJlZ3MsIGRhdGEgKyB0cC0+YXJnc1tpXS5vZmZzZXQpOworCXN0b3JlX3RyYWNlX2FyZ3Moc2l6ZW9mKCplbnRyeSksIHRwLCByZWdzLCAodTggKikmZW50cnlbMV0sIGRzaXplKTsKIAogCWlmICghZmlsdGVyX2N1cnJlbnRfY2hlY2tfZGlzY2FyZChidWZmZXIsIGNhbGwsIGVudHJ5LCBldmVudCkpCiAJCXRyYWNlX25vd2FrZV9idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50LCBpcnFfZmxhZ3MsIHBjKTsKQEAgLTEwODUsMTUgKzEzMDIsMTUgQEAKIAlzdHJ1Y3Qga3JldHByb2JlX3RyYWNlX2VudHJ5X2hlYWQgKmVudHJ5OwogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXI7Ci0JdTggKmRhdGE7Ci0JaW50IHNpemUsIGksIHBjOworCWludCBzaXplLCBwYywgZHNpemU7CiAJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJnRwLT5jYWxsOwogCiAJbG9jYWxfc2F2ZV9mbGFncyhpcnFfZmxhZ3MpOwogCXBjID0gcHJlZW1wdF9jb3VudCgpOwogCi0Jc2l6ZSA9IHNpemVvZigqZW50cnkpICsgdHAtPnNpemU7CisJZHNpemUgPSBfX2dldF9kYXRhX3NpemUodHAsIHJlZ3MpOworCXNpemUgPSBzaXplb2YoKmVudHJ5KSArIHRwLT5zaXplICsgZHNpemU7CiAKIAlldmVudCA9IHRyYWNlX2N1cnJlbnRfYnVmZmVyX2xvY2tfcmVzZXJ2ZSgmYnVmZmVyLCBjYWxsLT5ldmVudC50eXBlLAogCQkJCQkJICBzaXplLCBpcnFfZmxhZ3MsIHBjKTsKQEAgLTExMDMsOSArMTMyMCw3IEBACiAJZW50cnkgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKIAllbnRyeS0+ZnVuYyA9ICh1bnNpZ25lZCBsb25nKXRwLT5ycC5rcC5hZGRyOwogCWVudHJ5LT5yZXRfaXAgPSAodW5zaWduZWQgbG9uZylyaS0+cmV0X2FkZHI7Ci0JZGF0YSA9ICh1OCAqKSZlbnRyeVsxXTsKLQlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykKLQkJY2FsbF9mZXRjaCgmdHAtPmFyZ3NbaV0uZmV0Y2gsIHJlZ3MsIGRhdGEgKyB0cC0+YXJnc1tpXS5vZmZzZXQpOworCXN0b3JlX3RyYWNlX2FyZ3Moc2l6ZW9mKCplbnRyeSksIHRwLCByZWdzLCAodTggKikmZW50cnlbMV0sIGRzaXplKTsKIAogCWlmICghZmlsdGVyX2N1cnJlbnRfY2hlY2tfZGlzY2FyZChidWZmZXIsIGNhbGwsIGVudHJ5LCBldmVudCkpCiAJCXRyYWNlX25vd2FrZV9idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50LCBpcnFfZmxhZ3MsIHBjKTsKQEAgLTExMzcsNyArMTM1Miw3IEBACiAJZGF0YSA9ICh1OCAqKSZmaWVsZFsxXTsKIAlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykKIAkJaWYgKCF0cC0+YXJnc1tpXS50eXBlLT5wcmludChzLCB0cC0+YXJnc1tpXS5uYW1lLAotCQkJCQkgICAgIGRhdGEgKyB0cC0+YXJnc1tpXS5vZmZzZXQpKQorCQkJCQkgICAgIGRhdGEgKyB0cC0+YXJnc1tpXS5vZmZzZXQsIGZpZWxkKSkKIAkJCWdvdG8gcGFydGlhbDsKIAogCWlmICghdHJhY2Vfc2VxX3B1dHMocywgIlxuIikpCkBAIC0xMTc5LDcgKzEzOTQsNyBAQAogCWRhdGEgPSAodTggKikmZmllbGRbMV07CiAJZm9yIChpID0gMDsgaSA8IHRwLT5ucl9hcmdzOyBpKyspCiAJCWlmICghdHAtPmFyZ3NbaV0udHlwZS0+cHJpbnQocywgdHAtPmFyZ3NbaV0ubmFtZSwKLQkJCQkJICAgICBkYXRhICsgdHAtPmFyZ3NbaV0ub2Zmc2V0KSkKKwkJCQkJICAgICBkYXRhICsgdHAtPmFyZ3NbaV0ub2Zmc2V0LCBmaWVsZCkpCiAJCQlnb3RvIHBhcnRpYWw7CiAKIAlpZiAoIXRyYWNlX3NlcV9wdXRzKHMsICJcbiIpKQpAQCAtMTIxNCwxMSArMTQyOSw2IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHByb2JlX2V2ZW50X3Jhd19pbml0KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCkKLXsKLQlyZXR1cm4gMDsKLX0KLQogI3VuZGVmIERFRklORV9GSUVMRAogI2RlZmluZSBERUZJTkVfRklFTEQodHlwZSwgaXRlbSwgbmFtZSwgaXNfc2lnbmVkKQkJCVwKIAlkbyB7CQkJCQkJCQlcCkBAIC0xMjM5LDcgKzE0NDksNyBAQAogCURFRklORV9GSUVMRCh1bnNpZ25lZCBsb25nLCBpcCwgRklFTERfU1RSSU5HX0lQLCAwKTsKIAkvKiBTZXQgYXJndW1lbnQgbmFtZXMgYXMgZmllbGRzICovCiAJZm9yIChpID0gMDsgaSA8IHRwLT5ucl9hcmdzOyBpKyspIHsKLQkJcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGV2ZW50X2NhbGwsIHRwLT5hcmdzW2ldLnR5cGUtPm5hbWUsCisJCXJldCA9IHRyYWNlX2RlZmluZV9maWVsZChldmVudF9jYWxsLCB0cC0+YXJnc1tpXS50eXBlLT5mbXR0eXBlLAogCQkJCQkgdHAtPmFyZ3NbaV0ubmFtZSwKIAkJCQkJIHNpemVvZihmaWVsZCkgKyB0cC0+YXJnc1tpXS5vZmZzZXQsCiAJCQkJCSB0cC0+YXJnc1tpXS50eXBlLT5zaXplLApAQCAtMTI2MSw3ICsxNDcxLDcgQEAKIAlERUZJTkVfRklFTEQodW5zaWduZWQgbG9uZywgcmV0X2lwLCBGSUVMRF9TVFJJTkdfUkVUSVAsIDApOwogCS8qIFNldCBhcmd1bWVudCBuYW1lcyBhcyBmaWVsZHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykgewotCQlyZXQgPSB0cmFjZV9kZWZpbmVfZmllbGQoZXZlbnRfY2FsbCwgdHAtPmFyZ3NbaV0udHlwZS0+bmFtZSwKKwkJcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGV2ZW50X2NhbGwsIHRwLT5hcmdzW2ldLnR5cGUtPmZtdHR5cGUsCiAJCQkJCSB0cC0+YXJnc1tpXS5uYW1lLAogCQkJCQkgc2l6ZW9mKGZpZWxkKSArIHRwLT5hcmdzW2ldLm9mZnNldCwKIAkJCQkJIHRwLT5hcmdzW2ldLnR5cGUtPnNpemUsCkBAIC0xMzAxLDggKzE1MTEsMTMgQEAKIAlwb3MgKz0gc25wcmludGYoYnVmICsgcG9zLCBMRU5fT1JfWkVSTywgIlwiLCAlcyIsIGFyZyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykgewotCQlwb3MgKz0gc25wcmludGYoYnVmICsgcG9zLCBMRU5fT1JfWkVSTywgIiwgUkVDLT4lcyIsCi0JCQkJdHAtPmFyZ3NbaV0ubmFtZSk7CisJCWlmIChzdHJjbXAodHAtPmFyZ3NbaV0udHlwZS0+bmFtZSwgInN0cmluZyIpID09IDApCisJCQlwb3MgKz0gc25wcmludGYoYnVmICsgcG9zLCBMRU5fT1JfWkVSTywKKwkJCQkJIiwgX19nZXRfc3RyKCVzKSIsCisJCQkJCXRwLT5hcmdzW2ldLm5hbWUpOworCQllbHNlCisJCQlwb3MgKz0gc25wcmludGYoYnVmICsgcG9zLCBMRU5fT1JfWkVSTywgIiwgUkVDLT4lcyIsCisJCQkJCXRwLT5hcmdzW2ldLm5hbWUpOwogCX0KIAogI3VuZGVmIExFTl9PUl9aRVJPCkBAIC0xMzM5LDExICsxNTU0LDExIEBACiAJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJnRwLT5jYWxsOwogCXN0cnVjdCBrcHJvYmVfdHJhY2VfZW50cnlfaGVhZCAqZW50cnk7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7Ci0JdTggKmRhdGE7Ci0JaW50IHNpemUsIF9fc2l6ZSwgaTsKKwlpbnQgc2l6ZSwgX19zaXplLCBkc2l6ZTsKIAlpbnQgcmN0eDsKIAotCV9fc2l6ZSA9IHNpemVvZigqZW50cnkpICsgdHAtPnNpemU7CisJZHNpemUgPSBfX2dldF9kYXRhX3NpemUodHAsIHJlZ3MpOworCV9fc2l6ZSA9IHNpemVvZigqZW50cnkpICsgdHAtPnNpemUgKyBkc2l6ZTsKIAlzaXplID0gQUxJR04oX19zaXplICsgc2l6ZW9mKHUzMiksIHNpemVvZih1NjQpKTsKIAlzaXplIC09IHNpemVvZih1MzIpOwogCWlmIChXQVJOX09OQ0Uoc2l6ZSA+IFBFUkZfTUFYX1RSQUNFX1NJWkUsCkBAIC0xMzU1LDkgKzE1NzAsOCBAQAogCQlyZXR1cm47CiAKIAllbnRyeS0+aXAgPSAodW5zaWduZWQgbG9uZylrcC0+YWRkcjsKLQlkYXRhID0gKHU4ICopJmVudHJ5WzFdOwotCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKQotCQljYWxsX2ZldGNoKCZ0cC0+YXJnc1tpXS5mZXRjaCwgcmVncywgZGF0YSArIHRwLT5hcmdzW2ldLm9mZnNldCk7CisJbWVtc2V0KCZlbnRyeVsxXSwgMCwgZHNpemUpOworCXN0b3JlX3RyYWNlX2FyZ3Moc2l6ZW9mKCplbnRyeSksIHRwLCByZWdzLCAodTggKikmZW50cnlbMV0sIGRzaXplKTsKIAogCWhlYWQgPSB0aGlzX2NwdV9wdHIoY2FsbC0+cGVyZl9ldmVudHMpOwogCXBlcmZfdHJhY2VfYnVmX3N1Ym1pdChlbnRyeSwgc2l6ZSwgcmN0eCwgZW50cnktPmlwLCAxLCByZWdzLCBoZWFkKTsKQEAgLTEzNzEsMTEgKzE1ODUsMTEgQEAKIAlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSAmdHAtPmNhbGw7CiAJc3RydWN0IGtyZXRwcm9iZV90cmFjZV9lbnRyeV9oZWFkICplbnRyeTsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKLQl1OCAqZGF0YTsKLQlpbnQgc2l6ZSwgX19zaXplLCBpOworCWludCBzaXplLCBfX3NpemUsIGRzaXplOwogCWludCByY3R4OwogCi0JX19zaXplID0gc2l6ZW9mKCplbnRyeSkgKyB0cC0+c2l6ZTsKKwlkc2l6ZSA9IF9fZ2V0X2RhdGFfc2l6ZSh0cCwgcmVncyk7CisJX19zaXplID0gc2l6ZW9mKCplbnRyeSkgKyB0cC0+c2l6ZSArIGRzaXplOwogCXNpemUgPSBBTElHTihfX3NpemUgKyBzaXplb2YodTMyKSwgc2l6ZW9mKHU2NCkpOwogCXNpemUgLT0gc2l6ZW9mKHUzMik7CiAJaWYgKFdBUk5fT05DRShzaXplID4gUEVSRl9NQVhfVFJBQ0VfU0laRSwKQEAgLTEzODgsOSArMTYwMiw3IEBACiAKIAllbnRyeS0+ZnVuYyA9ICh1bnNpZ25lZCBsb25nKXRwLT5ycC5rcC5hZGRyOwogCWVudHJ5LT5yZXRfaXAgPSAodW5zaWduZWQgbG9uZylyaS0+cmV0X2FkZHI7Ci0JZGF0YSA9ICh1OCAqKSZlbnRyeVsxXTsKLQlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykKLQkJY2FsbF9mZXRjaCgmdHAtPmFyZ3NbaV0uZmV0Y2gsIHJlZ3MsIGRhdGEgKyB0cC0+YXJnc1tpXS5vZmZzZXQpOworCXN0b3JlX3RyYWNlX2FyZ3Moc2l6ZW9mKCplbnRyeSksIHRwLCByZWdzLCAodTggKikmZW50cnlbMV0sIGRzaXplKTsKIAogCWhlYWQgPSB0aGlzX2NwdV9wdHIoY2FsbC0+cGVyZl9ldmVudHMpOwogCXBlcmZfdHJhY2VfYnVmX3N1Ym1pdChlbnRyeSwgc2l6ZSwgcmN0eCwgZW50cnktPnJldF9pcCwgMSwgcmVncywgaGVhZCk7CkBAIC0xNDg2LDE1ICsxNjk4LDEyIEBACiAJaW50IHJldDsKIAogCS8qIEluaXRpYWxpemUgZnRyYWNlX2V2ZW50X2NhbGwgKi8KKwlJTklUX0xJU1RfSEVBRCgmY2FsbC0+Y2xhc3MtPmZpZWxkcyk7CiAJaWYgKHByb2JlX2lzX3JldHVybih0cCkpIHsKLQkJSU5JVF9MSVNUX0hFQUQoJmNhbGwtPmNsYXNzLT5maWVsZHMpOwogCQljYWxsLT5ldmVudC5mdW5jcyA9ICZrcmV0cHJvYmVfZnVuY3M7Ci0JCWNhbGwtPmNsYXNzLT5yYXdfaW5pdCA9IHByb2JlX2V2ZW50X3Jhd19pbml0OwogCQljYWxsLT5jbGFzcy0+ZGVmaW5lX2ZpZWxkcyA9IGtyZXRwcm9iZV9ldmVudF9kZWZpbmVfZmllbGRzOwogCX0gZWxzZSB7Ci0JCUlOSVRfTElTVF9IRUFEKCZjYWxsLT5jbGFzcy0+ZmllbGRzKTsKIAkJY2FsbC0+ZXZlbnQuZnVuY3MgPSAma3Byb2JlX2Z1bmNzOwotCQljYWxsLT5jbGFzcy0+cmF3X2luaXQgPSBwcm9iZV9ldmVudF9yYXdfaW5pdDsKIAkJY2FsbC0+Y2xhc3MtPmRlZmluZV9maWVsZHMgPSBrcHJvYmVfZXZlbnRfZGVmaW5lX2ZpZWxkczsKIAl9CiAJaWYgKHNldF9wcmludF9mbXQodHApIDwgMCkKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9rc3ltLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfa3N5bS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWFmMDA3Li4wMDAwMDAwCi0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9rc3ltLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MDggKzAsMCBAQAotLyoKLSAqIHRyYWNlX2tzeW0uYyAtIEtlcm5lbCBTeW1ib2wgVHJhY2VyCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwOQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgotI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0KLSNpbmNsdWRlICJ0cmFjZV9vdXRwdXQuaCIKLSNpbmNsdWRlICJ0cmFjZS5oIgotCi0jaW5jbHVkZSA8bGludXgvaHdfYnJlYWtwb2ludC5oPgotI2luY2x1ZGUgPGFzbS9od19icmVha3BvaW50Lmg+Ci0KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0KLSNkZWZpbmUgS1NZTV9UUkFDRVJfT1BfTEVOIDMgLyogcnctICovCi0KLXN0cnVjdCB0cmFjZV9rc3ltIHsKLQlzdHJ1Y3QgcGVyZl9ldmVudAkqKmtzeW1faGJwOwotCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIJYXR0cjsKLSNpZmRlZiBDT05GSUdfUFJPRklMRV9LU1lNX1RSQUNFUgotCWF0b21pYzY0X3QJCWNvdW50ZXI7Ci0jZW5kaWYKLQlzdHJ1Y3QgaGxpc3Rfbm9kZQlrc3ltX2hsaXN0OwotfTsKLQotc3RhdGljIHN0cnVjdCB0cmFjZV9hcnJheSAqa3N5bV90cmFjZV9hcnJheTsKLQotc3RhdGljIHVuc2lnbmVkIGludCBrc3ltX3RyYWNpbmdfZW5hYmxlZDsKLQotc3RhdGljIEhMSVNUX0hFQUQoa3N5bV9maWx0ZXJfaGVhZCk7Ci0KLXN0YXRpYyBERUZJTkVfTVVURVgoa3N5bV90cmFjZXJfbXV0ZXgpOwotCi0jaWZkZWYgQ09ORklHX1BST0ZJTEVfS1NZTV9UUkFDRVIKLQotI2RlZmluZSBNQVhfVUxfSU5UIDB4ZmZmZmZmZmYKLQotdm9pZCBrc3ltX2NvbGxlY3Rfc3RhdHModW5zaWduZWQgbG9uZyBoYnBfaGl0X2FkZHIpCi17Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0Jc3RydWN0IHRyYWNlX2tzeW0gKmVudHJ5OwotCi0JcmN1X3JlYWRfbG9jaygpOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgbm9kZSwgJmtzeW1fZmlsdGVyX2hlYWQsIGtzeW1faGxpc3QpIHsKLQkJaWYgKGVudHJ5LT5hdHRyLmJwX2FkZHIgPT0gaGJwX2hpdF9hZGRyKSB7Ci0JCQlhdG9taWM2NF9pbmMoJmVudHJ5LT5jb3VudGVyKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXJjdV9yZWFkX3VubG9jaygpOwotfQotI2VuZGlmIC8qIENPTkZJR19QUk9GSUxFX0tTWU1fVFJBQ0VSICovCi0KLXZvaWQga3N5bV9oYnBfaGFuZGxlcihzdHJ1Y3QgcGVyZl9ldmVudCAqaGJwLCBpbnQgbm1pLAotCQkgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwKLQkJICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKLQlzdHJ1Y3Qga3N5bV90cmFjZV9lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXI7Ci0JaW50IHBjOwotCi0JaWYgKCFrc3ltX3RyYWNpbmdfZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0JYnVmZmVyID0ga3N5bV90cmFjZV9hcnJheS0+YnVmZmVyOwotCi0JcGMgPSBwcmVlbXB0X2NvdW50KCk7Ci0KLQlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBUUkFDRV9LU1lNLAotCQkJCQkJCXNpemVvZigqZW50cnkpLCAwLCBwYyk7Ci0JaWYgKCFldmVudCkKLQkJcmV0dXJuOwotCi0JZW50cnkJCT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7Ci0JZW50cnktPmlwCT0gaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKTsKLQllbnRyeS0+dHlwZQk9IGh3X2JyZWFrcG9pbnRfdHlwZShoYnApOwotCWVudHJ5LT5hZGRyCT0gaHdfYnJlYWtwb2ludF9hZGRyKGhicCk7Ci0Jc3RybGNweShlbnRyeS0+Y21kLCBjdXJyZW50LT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKLQotI2lmZGVmIENPTkZJR19QUk9GSUxFX0tTWU1fVFJBQ0VSCi0Ja3N5bV9jb2xsZWN0X3N0YXRzKGh3X2JyZWFrcG9pbnRfYWRkcihoYnApKTsKLSNlbmRpZiAvKiBDT05GSUdfUFJPRklMRV9LU1lNX1RSQUNFUiAqLwotCi0JdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCwgMCwgcGMpOwotfQotCi0vKiBWYWxpZCBhY2Nlc3MgdHlwZXMgYXJlIHJlcHJlc2VudGVkIGFzCi0gKgotICogcnctIDogU2V0IFJlYWQvV3JpdGUgQWNjZXNzIEJyZWFrcG9pbnQKLSAqIC13LSA6IFNldCBXcml0ZSBBY2Nlc3MgQnJlYWtwb2ludAotICogLS0tIDogQ2xlYXIgQnJlYWtwb2ludHMKLSAqIC0teCA6IFNldCBFeGVjdXRpb24gQnJlYWsgcG9pbnRzIChOb3QgYXZhaWxhYmxlIHlldCkKLSAqCi0gKi8KLXN0YXRpYyBpbnQga3N5bV90cmFjZV9nZXRfYWNjZXNzX3R5cGUoY2hhciAqc3RyKQotewotCWludCBhY2Nlc3MgPSAwOwotCi0JaWYgKHN0clswXSA9PSAncicpCi0JCWFjY2VzcyB8PSBIV19CUkVBS1BPSU5UX1I7Ci0KLQlpZiAoc3RyWzFdID09ICd3JykKLQkJYWNjZXNzIHw9IEhXX0JSRUFLUE9JTlRfVzsKLQotCWlmIChzdHJbMl0gPT0gJ3gnKQotCQlhY2Nlc3MgfD0gSFdfQlJFQUtQT0lOVF9YOwotCi0Jc3dpdGNoIChhY2Nlc3MpIHsKLQljYXNlIEhXX0JSRUFLUE9JTlRfUjoKLQljYXNlIEhXX0JSRUFLUE9JTlRfVzoKLQljYXNlIEhXX0JSRUFLUE9JTlRfVyB8IEhXX0JSRUFLUE9JTlRfUjoKLQkJcmV0dXJuIGFjY2VzczsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci19Ci0KLS8qCi0gKiBUaGVyZSBjYW4gYmUgc2V2ZXJhbCBwb3NzaWJsZSBtYWxmb3JtZWQgcmVxdWVzdHMgYW5kIHdlIGF0dGVtcHQgdG8gY2FwdHVyZQotICogYWxsIG9mIHRoZW0uIFdlIGVudW1lcmF0ZSBzb21lIG9mIHRoZSBydWxlcwotICogMS4gV2Ugd2lsbCBub3QgYWxsb3cga2VybmVsIHN5bWJvbHMgd2l0aCAnOicgc2luY2UgaXQgaXMgdXNlZCBhcyBhIGRlbGltaXRlci4KLSAqICAgIGkuZS4gbXVsdGlwbGUgJzonIHN5bWJvbHMgZGlzYWxsb3dlZC4gUG9zc2libGUgdXNlcyBhcmUgb2YgdGhlIGZvcm0KLSAqICAgIDxtb2R1bGU+Ojxrc3ltX25hbWU+OjxvcD4uCi0gKiAyLiBObyBkZWxpbWl0ZXIgc3ltYm9sICc6JyBpbiB0aGUgaW5wdXQgc3RyaW5nCi0gKiAzLiBTcHVyaW91cyBvcGVyYXRvciBzeW1ib2xzIG9yIHN5bWJvbHMgbm90IGluIHRoZWlyIHJlc3BlY3RpdmUgcG9zaXRpb25zCi0gKiA0LiA8a3N5bV9uYW1lPjotLS0gaS5lLiBjbGVhciBicmVha3BvaW50IHJlcXVlc3Qgd2hlbiBrc3ltX25hbWUgbm90IGluIGZpbGUKLSAqIDUuIEtlcm5lbCBzeW1ib2wgbm90IGEgcGFydCBvZiAvcHJvYy9rYWxsc3ltcwotICogNi4gRHVwbGljYXRlIHJlcXVlc3RzCi0gKi8KLXN0YXRpYyBpbnQgcGFyc2Vfa3N5bV90cmFjZV9zdHIoY2hhciAqaW5wdXRfc3RyaW5nLCBjaGFyICoqa3N5bW5hbWUsCi0JCQkJCQkJdW5zaWduZWQgbG9uZyAqYWRkcikKLXsKLQlpbnQgcmV0OwotCi0JKmtzeW1uYW1lID0gc3Ryc2VwKCZpbnB1dF9zdHJpbmcsICI6Iik7Ci0JKmFkZHIgPSBrYWxsc3ltc19sb29rdXBfbmFtZSgqa3N5bW5hbWUpOwotCi0JLyogQ2hlY2sgZm9yIG1hbGZvcm1lZCByZXF1ZXN0OiAoMiksICgxKSBhbmQgKDUpICovCi0JaWYgKCghaW5wdXRfc3RyaW5nKSB8fAotCSAgICAoc3RybGVuKGlucHV0X3N0cmluZykgIT0gS1NZTV9UUkFDRVJfT1BfTEVOKSB8fAotCSAgICAoKmFkZHIgPT0gMCkpCi0JCXJldHVybiAtRUlOVkFMOzsKLQotCXJldCA9IGtzeW1fdHJhY2VfZ2V0X2FjY2Vzc190eXBlKGlucHV0X3N0cmluZyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgcHJvY2Vzc19uZXdfa3N5bV9lbnRyeShjaGFyICprc3ltbmFtZSwgaW50IG9wLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0Jc3RydWN0IHRyYWNlX2tzeW0gKmVudHJ5OwotCWludCByZXQgPSAtRU5PTUVNOwotCi0JZW50cnkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdHJhY2Vfa3N5bSksIEdGUF9LRVJORUwpOwotCWlmICghZW50cnkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaHdfYnJlYWtwb2ludF9pbml0KCZlbnRyeS0+YXR0cik7Ci0KLQllbnRyeS0+YXR0ci5icF90eXBlID0gb3A7Ci0JZW50cnktPmF0dHIuYnBfYWRkciA9IGFkZHI7Ci0JZW50cnktPmF0dHIuYnBfbGVuID0gSFdfQlJFQUtQT0lOVF9MRU5fNDsKLQotCWVudHJ5LT5rc3ltX2hicCA9IHJlZ2lzdGVyX3dpZGVfaHdfYnJlYWtwb2ludCgmZW50cnktPmF0dHIsCi0JCQkJCWtzeW1faGJwX2hhbmRsZXIpOwotCi0JaWYgKElTX0VSUihlbnRyeS0+a3N5bV9oYnApKSB7Ci0JCXJldCA9IFBUUl9FUlIoZW50cnktPmtzeW1faGJwKTsKLQkJaWYgKHJldCA9PSAtRU5PU1BDKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImtzeW1fdHJhY2VyOiBNYXhpbXVtIGxpbWl0IHJlYWNoZWQuIgotCQkJIiBObyBuZXcgcmVxdWVzdHMgZm9yIHRyYWNpbmcgY2FuIGJlIGFjY2VwdGVkIG5vdy5cbiIpOwotCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAia3N5bV90cmFjZXIgcmVxdWVzdCBmYWlsZWQuIFRyeSBhZ2FpbiIKLQkJCQkJICIgbGF0ZXIhIVxuIik7Ci0JCX0KLQkJZ290byBlcnI7Ci0JfQotCi0JaGxpc3RfYWRkX2hlYWRfcmN1KCYoZW50cnktPmtzeW1faGxpc3QpLCAma3N5bV9maWx0ZXJfaGVhZCk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyOgotCWtmcmVlKGVudHJ5KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGtzeW1fdHJhY2VfZmlsdGVyX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLAotCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IHRyYWNlX2tzeW0gKmVudHJ5OwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCXN0cnVjdCB0cmFjZV9zZXEgKnM7Ci0Jc3NpemVfdCBjbnQgPSAwOwotCWludCByZXQ7Ci0KLQlzID0ga21hbGxvYyhzaXplb2YoKnMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXMpCi0JCXJldHVybiAtRU5PTUVNOwotCXRyYWNlX3NlcV9pbml0KHMpOwotCi0JbXV0ZXhfbG9jaygma3N5bV90cmFjZXJfbXV0ZXgpOwotCi0JaGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIG5vZGUsICZrc3ltX2ZpbHRlcl9oZWFkLCBrc3ltX2hsaXN0KSB7Ci0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiVwUzoiLAotCQkJCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpZW50cnktPmF0dHIuYnBfYWRkcik7Ci0JCWlmIChlbnRyeS0+YXR0ci5icF90eXBlID09IEhXX0JSRUFLUE9JTlRfUikKLQkJCXJldCA9IHRyYWNlX3NlcV9wdXRzKHMsICJyLS1cbiIpOwotCQllbHNlIGlmIChlbnRyeS0+YXR0ci5icF90eXBlID09IEhXX0JSRUFLUE9JTlRfVykKLQkJCXJldCA9IHRyYWNlX3NlcV9wdXRzKHMsICItdy1cbiIpOwotCQllbHNlIGlmIChlbnRyeS0+YXR0ci5icF90eXBlID09IChIV19CUkVBS1BPSU5UX1cgfCBIV19CUkVBS1BPSU5UX1IpKQotCQkJcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgInJ3LVxuIik7Ci0JCVdBUk5fT05fT05DRSghcmV0KTsKLQl9Ci0KLQljbnQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjb3VudCwgcHBvcywgcy0+YnVmZmVyLCBzLT5sZW4pOwotCi0JbXV0ZXhfdW5sb2NrKCZrc3ltX3RyYWNlcl9tdXRleCk7Ci0KLQlrZnJlZShzKTsKLQotCXJldHVybiBjbnQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fa3N5bV90cmFjZV9yZXNldCh2b2lkKQotewotCXN0cnVjdCB0cmFjZV9rc3ltICplbnRyeTsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKm5vZGUxOwotCi0JbXV0ZXhfbG9jaygma3N5bV90cmFjZXJfbXV0ZXgpOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5vZGUsIG5vZGUxLCAma3N5bV9maWx0ZXJfaGVhZCwKLQkJCQkJCQkJa3N5bV9obGlzdCkgewotCQl1bnJlZ2lzdGVyX3dpZGVfaHdfYnJlYWtwb2ludChlbnRyeS0+a3N5bV9oYnApOwotCQlobGlzdF9kZWxfcmN1KCYoZW50cnktPmtzeW1faGxpc3QpKTsKLQkJc3luY2hyb25pemVfcmN1KCk7Ci0JCWtmcmVlKGVudHJ5KTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZrc3ltX3RyYWNlcl9tdXRleCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGtzeW1fdHJhY2VfZmlsdGVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCQljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IHRyYWNlX2tzeW0gKmVudHJ5OwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCWNoYXIgKmJ1ZiwgKmlucHV0X3N0cmluZywgKmtzeW1uYW1lID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGtzeW1fYWRkciA9IDA7Ci0JaW50IHJldCwgb3AsIGNoYW5nZWQgPSAwOwotCi0JYnVmID0ga3phbGxvYyhjb3VudCArIDEsIEdGUF9LRVJORUwpOwotCWlmICghYnVmKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJldCA9IC1FRkFVTFQ7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgYnVmZmVyLCBjb3VudCkpCi0JCWdvdG8gb3V0OwotCi0JYnVmW2NvdW50XSA9ICdcMCc7Ci0JaW5wdXRfc3RyaW5nID0gc3Ryc3RyaXAoYnVmKTsKLQotCS8qCi0JICogQ2xlYXIgYWxsIGJyZWFrcG9pbnRzIGlmOgotCSAqIDE6IGVjaG8gPiBrc3ltX3RyYWNlX2ZpbHRlcgotCSAqIDI6IGVjaG8gMCA+IGtzeW1fdHJhY2VfZmlsdGVyCi0JICogMzogZWNobyAiKjotLS0iID4ga3N5bV90cmFjZV9maWx0ZXIKLQkgKi8KLQlpZiAoIWlucHV0X3N0cmluZ1swXSB8fCAhc3RyY21wKGlucHV0X3N0cmluZywgIjAiKSB8fAotCSAgICAhc3RyY21wKGlucHV0X3N0cmluZywgIio6LS0tIikpIHsKLQkJX19rc3ltX3RyYWNlX3Jlc2V0KCk7Ci0JCXJldCA9IDA7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXJldCA9IG9wID0gcGFyc2Vfa3N5bV90cmFjZV9zdHIoaW5wdXRfc3RyaW5nLCAma3N5bW5hbWUsICZrc3ltX2FkZHIpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotCW11dGV4X2xvY2soJmtzeW1fdHJhY2VyX211dGV4KTsKLQotCXJldCA9IC1FSU5WQUw7Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIG5vZGUsICZrc3ltX2ZpbHRlcl9oZWFkLCBrc3ltX2hsaXN0KSB7Ci0JCWlmIChlbnRyeS0+YXR0ci5icF9hZGRyID09IGtzeW1fYWRkcikgewotCQkJLyogQ2hlY2sgZm9yIG1hbGZvcm1lZCByZXF1ZXN0OiAoNikgKi8KLQkJCWlmIChlbnRyeS0+YXR0ci5icF90eXBlICE9IG9wKQotCQkJCWNoYW5nZWQgPSAxOwotCQkJZWxzZQotCQkJCWdvdG8gb3V0X3VubG9jazsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmIChjaGFuZ2VkKSB7Ci0JCXVucmVnaXN0ZXJfd2lkZV9od19icmVha3BvaW50KGVudHJ5LT5rc3ltX2hicCk7Ci0JCWVudHJ5LT5hdHRyLmJwX3R5cGUgPSBvcDsKLQkJcmV0ID0gMDsKLQkJaWYgKG9wID4gMCkgewotCQkJZW50cnktPmtzeW1faGJwID0KLQkJCQlyZWdpc3Rlcl93aWRlX2h3X2JyZWFrcG9pbnQoJmVudHJ5LT5hdHRyLAotCQkJCQlrc3ltX2hicF9oYW5kbGVyKTsKLQkJCWlmIChJU19FUlIoZW50cnktPmtzeW1faGJwKSkKLQkJCQlyZXQgPSBQVFJfRVJSKGVudHJ5LT5rc3ltX2hicCk7Ci0JCQllbHNlCi0JCQkJZ290byBvdXRfdW5sb2NrOwotCQl9Ci0JCS8qIEVycm9yIG9yICJzeW1ib2w6LS0tIiBjYXNlOiBkcm9wIGl0ICovCi0JCWhsaXN0X2RlbF9yY3UoJihlbnRyeS0+a3N5bV9obGlzdCkpOwotCQlzeW5jaHJvbml6ZV9yY3UoKTsKLQkJa2ZyZWUoZW50cnkpOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfSBlbHNlIHsKLQkJLyogQ2hlY2sgZm9yIG1hbGZvcm1lZCByZXF1ZXN0OiAoNCkgKi8KLQkJaWYgKG9wKQotCQkJcmV0ID0gcHJvY2Vzc19uZXdfa3N5bV9lbnRyeShrc3ltbmFtZSwgb3AsIGtzeW1fYWRkcik7Ci0JfQotb3V0X3VubG9jazoKLQltdXRleF91bmxvY2soJmtzeW1fdHJhY2VyX211dGV4KTsKLW91dDoKLQlrZnJlZShidWYpOwotCXJldHVybiAhcmV0ID8gY291bnQgOiByZXQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGtzeW1fdHJhY2luZ19mb3BzID0gewotCS5vcGVuCQk9IHRyYWNpbmdfb3Blbl9nZW5lcmljLAotCS5yZWFkCQk9IGtzeW1fdHJhY2VfZmlsdGVyX3JlYWQsCi0JLndyaXRlCQk9IGtzeW1fdHJhY2VfZmlsdGVyX3dyaXRlLAotfTsKLQotc3RhdGljIHZvaWQga3N5bV90cmFjZV9yZXNldChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQotewotCWtzeW1fdHJhY2luZ19lbmFibGVkID0gMDsKLQlfX2tzeW1fdHJhY2VfcmVzZXQoKTsKLX0KLQotc3RhdGljIGludCBrc3ltX3RyYWNlX2luaXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKLXsKLQlpbnQgY3B1LCByZXQgPSAwOwotCi0JZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCi0JCXRyYWNpbmdfcmVzZXQodHIsIGNwdSk7Ci0Ja3N5bV90cmFjaW5nX2VuYWJsZWQgPSAxOwotCWtzeW1fdHJhY2VfYXJyYXkgPSB0cjsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGtzeW1fdHJhY2VfcHJpbnRfaGVhZGVyKHN0cnVjdCBzZXFfZmlsZSAqbSkKLXsKLQlzZXFfcHV0cyhtLAotCQkgIiMgICAgICAgVEFTSy1QSUQgICBDUFUjICAgICAgU3ltYm9sICAgICAgICAgICAgICAgICAgICAiCi0JCSAiVHlwZSAgICBGdW5jdGlvblxuIik7Ci0Jc2VxX3B1dHMobSwKLQkJICIjICAgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIgotCQkgIiB8ICAgICAgICAgfFxuIik7Ci19Ci0KLXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBrc3ltX3RyYWNlX291dHB1dChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCi17Ci0Jc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeSA9IGl0ZXItPmVudDsKLQlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKLQlzdHJ1Y3Qga3N5bV90cmFjZV9lbnRyeSAqZmllbGQ7Ci0JY2hhciBzdHJbS1NZTV9TWU1CT0xfTEVOXTsKLQlpbnQgcmV0OwotCi0JaWYgKGVudHJ5LT50eXBlICE9IFRSQUNFX0tTWU0pCi0JCXJldHVybiBUUkFDRV9UWVBFX1VOSEFORExFRDsKLQotCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0KLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlMTFzLSUtNWQgWyUwM2RdICVwUyIsIGZpZWxkLT5jbWQsCi0JCQkJZW50cnktPnBpZCwgaXRlci0+Y3B1LCAoY2hhciAqKWZpZWxkLT5hZGRyKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCi0Jc3dpdGNoIChmaWVsZC0+dHlwZSkgewotCWNhc2UgSFdfQlJFQUtQT0lOVF9SOgotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgUiAgIik7Ci0JCWJyZWFrOwotCWNhc2UgSFdfQlJFQUtQT0lOVF9XOgotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgVyAgIik7Ci0JCWJyZWFrOwotCWNhc2UgSFdfQlJFQUtQT0lOVF9SIHwgSFdfQlJFQUtQT0lOVF9XOgotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgUlcgIik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQl9Ci0KLQlpZiAoIXJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCi0Jc3ByaW50X3N5bWJvbChzdHIsIGZpZWxkLT5pcCk7Ci0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXNcbiIsIHN0cik7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci19Ci0KLXN0cnVjdCB0cmFjZXIga3N5bV90cmFjZXIgX19yZWFkX21vc3RseSA9Ci17Ci0JLm5hbWUJCT0gImtzeW1fdHJhY2VyIiwKLQkuaW5pdAkJPSBrc3ltX3RyYWNlX2luaXQsCi0JLnJlc2V0CQk9IGtzeW1fdHJhY2VfcmVzZXQsCi0jaWZkZWYgQ09ORklHX0ZUUkFDRV9TRUxGVEVTVAotCS5zZWxmdGVzdAk9IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfa3N5bSwKLSNlbmRpZgotCS5wcmludF9oZWFkZXIgICA9IGtzeW1fdHJhY2VfcHJpbnRfaGVhZGVyLAotCS5wcmludF9saW5lCT0ga3N5bV90cmFjZV9vdXRwdXQKLX07Ci0KLSNpZmRlZiBDT05GSUdfUFJPRklMRV9LU1lNX1RSQUNFUgotc3RhdGljIGludCBrc3ltX3Byb2ZpbGVfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCi17Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0Jc3RydWN0IHRyYWNlX2tzeW0gKmVudHJ5OwotCWludCBhY2Nlc3NfdHlwZSA9IDA7Ci0JY2hhciBmbl9uYW1lW0tTWU1fTkFNRV9MRU5dOwotCi0Jc2VxX3B1dHMobSwgIiAgQWNjZXNzIFR5cGUgIik7Ci0Jc2VxX3B1dHMobSwgIiAgU3ltYm9sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ291bnRlclxuIik7Ci0Jc2VxX3B1dHMobSwgIiAgLS0tLS0tLS0tLS0gIik7Ci0Jc2VxX3B1dHMobSwgIiAgLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLVxuIik7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCBub2RlLCAma3N5bV9maWx0ZXJfaGVhZCwga3N5bV9obGlzdCkgewotCi0JCWFjY2Vzc190eXBlID0gZW50cnktPmF0dHIuYnBfdHlwZTsKLQotCQlzd2l0Y2ggKGFjY2Vzc190eXBlKSB7Ci0JCWNhc2UgSFdfQlJFQUtQT0lOVF9SOgotCQkJc2VxX3B1dHMobSwgIiAgUiAgICAgICAgICAgIik7Ci0JCQlicmVhazsKLQkJY2FzZSBIV19CUkVBS1BPSU5UX1c6Ci0JCQlzZXFfcHV0cyhtLCAiICBXICAgICAgICAgICAiKTsKLQkJCWJyZWFrOwotCQljYXNlIEhXX0JSRUFLUE9JTlRfUiB8IEhXX0JSRUFLUE9JTlRfVzoKLQkJCXNlcV9wdXRzKG0sICIgIFJXICAgICAgICAgICIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlzZXFfcHV0cyhtLCAiICBOQSAgICAgICAgICAiKTsKLQkJfQotCi0JCWlmIChsb29rdXBfc3ltYm9sX25hbWUoZW50cnktPmF0dHIuYnBfYWRkciwgZm5fbmFtZSkgPj0gMCkKLQkJCXNlcV9wcmludGYobSwgIiAgJS0zNnMiLCBmbl9uYW1lKTsKLQkJZWxzZQotCQkJc2VxX3ByaW50ZihtLCAiICAlLTM2cyIsICI8TkE+Iik7Ci0JCXNlcV9wcmludGYobSwgIiAlMTVsbHVcbiIsCi0JCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWF0b21pYzY0X3JlYWQoJmVudHJ5LT5jb3VudGVyKSk7Ci0JfQotCXJjdV9yZWFkX3VubG9jaygpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQga3N5bV9wcm9maWxlX29wZW4oc3RydWN0IGlub2RlICpub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwga3N5bV9wcm9maWxlX3Nob3csIE5VTEwpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBrc3ltX3Byb2ZpbGVfZm9wcyA9IHsKLQkub3BlbgkJPSBrc3ltX3Byb2ZpbGVfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAotfTsKLSNlbmRpZiAvKiBDT05GSUdfUFJPRklMRV9LU1lNX1RSQUNFUiAqLwotCi1fX2luaXQgc3RhdGljIGludCBpbml0X2tzeW1fdHJhY2Uodm9pZCkKLXsKLQlzdHJ1Y3QgZGVudHJ5ICpkX3RyYWNlcjsKLQotCWRfdHJhY2VyID0gdHJhY2luZ19pbml0X2RlbnRyeSgpOwotCi0JdHJhY2VfY3JlYXRlX2ZpbGUoImtzeW1fdHJhY2VfZmlsdGVyIiwgMDY0NCwgZF90cmFjZXIsCi0JCQkgIE5VTEwsICZrc3ltX3RyYWNpbmdfZm9wcyk7Ci0KLSNpZmRlZiBDT05GSUdfUFJPRklMRV9LU1lNX1RSQUNFUgotCXRyYWNlX2NyZWF0ZV9maWxlKCJrc3ltX3Byb2ZpbGUiLCAwNDQ0LCBkX3RyYWNlciwKLQkJCSAgTlVMTCwgJmtzeW1fcHJvZmlsZV9mb3BzKTsKLSNlbmRpZgotCi0JcmV0dXJuIHJlZ2lzdGVyX3RyYWNlcigma3N5bV90cmFjZXIpOwotfQotZGV2aWNlX2luaXRjYWxsKGluaXRfa3N5bV90cmFjZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmMKaW5kZXggNTdjMWI0NS4uMDIyNzJiYSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuYwpAQCAtMTYsOSArMTYsNiBAQAogCiBERUNMQVJFX1JXU0VNKHRyYWNlX2V2ZW50X211dGV4KTsKIAotREVGSU5FX1BFUl9DUFUoc3RydWN0IHRyYWNlX3NlcSwgZnRyYWNlX2V2ZW50X3NlcSk7Ci1FWFBPUlRfUEVSX0NQVV9TWU1CT0woZnRyYWNlX2V2ZW50X3NlcSk7Ci0KIHN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCBldmVudF9oYXNoW0VWRU5UX0hBU0hTSVpFXSBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgaW50IG5leHRfZXZlbnRfdHlwZSA9IF9fVFJBQ0VfTEFTVF9UWVBFICsgMTsKQEAgLTEwNjksNjUgKzEwNjYsNiBAQAogCS5mdW5jcwkJPSAmdHJhY2Vfd2FrZV9mdW5jcywKIH07CiAKLS8qIFRSQUNFX1NQRUNJQUwgKi8KLXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9zcGVjaWFsX3ByaW50KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKLQkJCQkJICAgICBpbnQgZmxhZ3MsIHN0cnVjdCB0cmFjZV9ldmVudCAqZXZlbnQpCi17Ci0Jc3RydWN0IHNwZWNpYWxfZW50cnkgKmZpZWxkOwotCi0JdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGl0ZXItPmVudCk7Ci0KLQlpZiAoIXRyYWNlX3NlcV9wcmludGYoJml0ZXItPnNlcSwgIiMgJWxkICVsZCAlbGRcbiIsCi0JCQkgICAgICBmaWVsZC0+YXJnMSwKLQkJCSAgICAgIGZpZWxkLT5hcmcyLAotCQkJICAgICAgZmllbGQtPmFyZzMpKQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwotfQotCi1zdGF0aWMgZW51bSBwcmludF9saW5lX3QgdHJhY2Vfc3BlY2lhbF9oZXgoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAotCQkJCQkgICBpbnQgZmxhZ3MsIHN0cnVjdCB0cmFjZV9ldmVudCAqZXZlbnQpCi17Ci0Jc3RydWN0IHNwZWNpYWxfZW50cnkgKmZpZWxkOwotCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOwotCi0JdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGl0ZXItPmVudCk7Ci0KLQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPmFyZzEpOwotCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+YXJnMik7Ci0JU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5hcmczKTsKLQotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9zcGVjaWFsX2JpbihzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCi0JCQkJCSAgIGludCBmbGFncywgc3RydWN0IHRyYWNlX2V2ZW50ICpldmVudCkKLXsKLQlzdHJ1Y3Qgc3BlY2lhbF9lbnRyeSAqZmllbGQ7Ci0Jc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7Ci0KLQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKLQotCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5hcmcxKTsKLQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+YXJnMik7Ci0JU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPmFyZzMpOwotCi0JcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKLX0KLQotc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudF9mdW5jdGlvbnMgdHJhY2Vfc3BlY2lhbF9mdW5jcyA9IHsKLQkudHJhY2UJCT0gdHJhY2Vfc3BlY2lhbF9wcmludCwKLQkucmF3CQk9IHRyYWNlX3NwZWNpYWxfcHJpbnQsCi0JLmhleAkJPSB0cmFjZV9zcGVjaWFsX2hleCwKLQkuYmluYXJ5CQk9IHRyYWNlX3NwZWNpYWxfYmluLAotfTsKLQotc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCB0cmFjZV9zcGVjaWFsX2V2ZW50ID0gewotCS50eXBlCQk9IFRSQUNFX1NQRUNJQUwsCi0JLmZ1bmNzCQk9ICZ0cmFjZV9zcGVjaWFsX2Z1bmNzLAotfTsKLQogLyogVFJBQ0VfU1RBQ0sgKi8KIAogc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX3N0YWNrX3ByaW50KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKQEAgLTExNjEsOSArMTA5OSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnRfZnVuY3Rpb25zIHRyYWNlX3N0YWNrX2Z1bmNzID0gewogCS50cmFjZQkJPSB0cmFjZV9zdGFja19wcmludCwKLQkucmF3CQk9IHRyYWNlX3NwZWNpYWxfcHJpbnQsCi0JLmhleAkJPSB0cmFjZV9zcGVjaWFsX2hleCwKLQkuYmluYXJ5CQk9IHRyYWNlX3NwZWNpYWxfYmluLAogfTsKIAogc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCB0cmFjZV9zdGFja19ldmVudCA9IHsKQEAgLTExOTQsOSArMTEyOSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnRfZnVuY3Rpb25zIHRyYWNlX3VzZXJfc3RhY2tfZnVuY3MgPSB7CiAJLnRyYWNlCQk9IHRyYWNlX3VzZXJfc3RhY2tfcHJpbnQsCi0JLnJhdwkJPSB0cmFjZV9zcGVjaWFsX3ByaW50LAotCS5oZXgJCT0gdHJhY2Vfc3BlY2lhbF9oZXgsCi0JLmJpbmFyeQkJPSB0cmFjZV9zcGVjaWFsX2JpbiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnQgdHJhY2VfdXNlcl9zdGFja19ldmVudCA9IHsKQEAgLTEzMTQsNyArMTI0Niw2IEBACiAJJnRyYWNlX2ZuX2V2ZW50LAogCSZ0cmFjZV9jdHhfZXZlbnQsCiAJJnRyYWNlX3dha2VfZXZlbnQsCi0JJnRyYWNlX3NwZWNpYWxfZXZlbnQsCiAJJnRyYWNlX3N0YWNrX2V2ZW50LAogCSZ0cmFjZV91c2VyX3N0YWNrX2V2ZW50LAogCSZ0cmFjZV9icHJpbnRfZXZlbnQsCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMKaW5kZXggMGU3M2JjMi4uNDA4NmVhZTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMKQEAgLTQ2LDcgKzQ2LDYgQEAKIAlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJbG9uZyBkaXNhYmxlZDsKLQlpbnQgcmVzY2hlZDsKIAlpbnQgY3B1OwogCWludCBwYzsKIApAQCAtNTQsNyArNTMsNyBAQAogCQlyZXR1cm47CiAKIAlwYyA9IHByZWVtcHRfY291bnQoKTsKLQlyZXNjaGVkID0gZnRyYWNlX3ByZWVtcHRfZGlzYWJsZSgpOworCXByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7CiAKIAljcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWlmIChjcHUgIT0gd2FrZXVwX2N1cnJlbnRfY3B1KQpAQCAtNzQsNyArNzMsNyBAQAogIG91dDoKIAlhdG9taWNfZGVjKCZkYXRhLT5kaXNhYmxlZCk7CiAgb3V0X2VuYWJsZToKLQlmdHJhY2VfcHJlZW1wdF9lbmFibGUocmVzY2hlZCk7CisJcHJlZW1wdF9lbmFibGVfbm90cmFjZSgpOwogfQogCiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMgdHJhY2Vfb3BzIF9fcmVhZF9tb3N0bHkgPQpAQCAtMzgzLDYgKzM4Miw3IEBACiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9TRUxGVEVTVAogCS5zZWxmdGVzdCAgICA9IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfd2FrZXVwLAogI2VuZGlmCisJLnVzZV9tYXhfdHIJPSAxLAogfTsKIAogc3RhdGljIHN0cnVjdCB0cmFjZXIgd2FrZXVwX3J0X3RyYWNlciBfX3JlYWRfbW9zdGx5ID0KQEAgLTM5Nyw2ICszOTcsNyBAQAogI2lmZGVmIENPTkZJR19GVFJBQ0VfU0VMRlRFU1QKIAkuc2VsZnRlc3QgICAgPSB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX3dha2V1cCwKICNlbmRpZgorCS51c2VfbWF4X3RyCT0gMSwKIH07CiAKIF9faW5pdCBzdGF0aWMgaW50IGluaXRfd2FrZXVwX3RyYWNlcih2b2lkKQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYwppbmRleCAyNTBlN2Y5Li4xNTVhNDE1IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYwpAQCAtMTMsMTEgKzEzLDkgQEAKIAljYXNlIFRSQUNFX1dBS0U6CiAJY2FzZSBUUkFDRV9TVEFDSzoKIAljYXNlIFRSQUNFX1BSSU5UOgotCWNhc2UgVFJBQ0VfU1BFQ0lBTDoKIAljYXNlIFRSQUNFX0JSQU5DSDoKIAljYXNlIFRSQUNFX0dSQVBIX0VOVDoKIAljYXNlIFRSQUNFX0dSQVBIX1JFVDoKLQljYXNlIFRSQUNFX0tTWU06CiAJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKQEAgLTY5MSwzOCArNjg5LDYgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSICovCiAKLSNpZmRlZiBDT05GSUdfU1lTUFJPRl9UUkFDRVIKLWludAotdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9zeXNwcm9mKHN0cnVjdCB0cmFjZXIgKnRyYWNlLCBzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQotewotCXVuc2lnbmVkIGxvbmcgY291bnQ7Ci0JaW50IHJldDsKLQotCS8qIHN0YXJ0IHRoZSB0cmFjaW5nICovCi0JcmV0ID0gdHJhY2VyX2luaXQodHJhY2UsIHRyKTsKLQlpZiAocmV0KSB7Ci0JCXdhcm5fZmFpbGVkX2luaXRfdHJhY2VyKHRyYWNlLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIFNsZWVwIGZvciBhIDEvMTAgb2YgYSBzZWNvbmQgKi8KLQltc2xlZXAoMTAwKTsKLQkvKiBzdG9wIHRoZSB0cmFjaW5nLiAqLwotCXRyYWNpbmdfc3RvcCgpOwotCS8qIGNoZWNrIHRoZSB0cmFjZSBidWZmZXIgKi8KLQlyZXQgPSB0cmFjZV90ZXN0X2J1ZmZlcih0ciwgJmNvdW50KTsKLQl0cmFjZS0+cmVzZXQodHIpOwotCXRyYWNpbmdfc3RhcnQoKTsKLQotCWlmICghcmV0ICYmICFjb3VudCkgewotCQlwcmludGsoS0VSTl9DT05UICIuLiBubyBlbnRyaWVzIGZvdW5kIC4uIik7Ci0JCXJldCA9IC0xOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1NZU1BST0ZfVFJBQ0VSICovCi0KICNpZmRlZiBDT05GSUdfQlJBTkNIX1RSQUNFUgogaW50CiB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX2JyYW5jaChzdHJ1Y3QgdHJhY2VyICp0cmFjZSwgc3RydWN0IHRyYWNlX2FycmF5ICp0cikKQEAgLTc1NSw1NiArNzIxLDMgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfQlJBTkNIX1RSQUNFUiAqLwogCi0jaWZkZWYgQ09ORklHX0tTWU1fVFJBQ0VSCi1zdGF0aWMgaW50IGtzeW1fc2VsZnRlc3RfZHVtbXk7Ci0KLWludAotdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9rc3ltKHN0cnVjdCB0cmFjZXIgKnRyYWNlLCBzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQotewotCXVuc2lnbmVkIGxvbmcgY291bnQ7Ci0JaW50IHJldDsKLQotCS8qIHN0YXJ0IHRoZSB0cmFjaW5nICovCi0JcmV0ID0gdHJhY2VyX2luaXQodHJhY2UsIHRyKTsKLQlpZiAocmV0KSB7Ci0JCXdhcm5fZmFpbGVkX2luaXRfdHJhY2VyKHRyYWNlLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWtzeW1fc2VsZnRlc3RfZHVtbXkgPSAwOwotCS8qIFJlZ2lzdGVyIHRoZSByZWFkLXdyaXRlIHRyYWNpbmcgcmVxdWVzdCAqLwotCi0JcmV0ID0gcHJvY2Vzc19uZXdfa3N5bV9lbnRyeSgia3N5bV9zZWxmdGVzdF9kdW1teSIsCi0JCQkJICAgICBIV19CUkVBS1BPSU5UX1IgfCBIV19CUkVBS1BPSU5UX1csCi0JCQkJCSh1bnNpZ25lZCBsb25nKSgma3N5bV9zZWxmdGVzdF9kdW1teSkpOwotCi0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fQ09OVCAia3N5bV90cmFjZSByZWFkLXdyaXRlIHN0YXJ0dXAgdGVzdCBmYWlsZWRcbiIpOwotCQlnb3RvIHJldF9wYXRoOwotCX0KLQkvKiBQZXJmb3JtIGEgcmVhZCBhbmQgYSB3cml0ZSBvcGVyYXRpb24gb3ZlciB0aGUgZHVtbXkgdmFyaWFibGUgdG8KLQkgKiB0cmlnZ2VyIHRoZSB0cmFjZXIKLQkgKi8KLQlpZiAoa3N5bV9zZWxmdGVzdF9kdW1teSA9PSAwKQotCQlrc3ltX3NlbGZ0ZXN0X2R1bW15Kys7Ci0KLQkvKiBzdG9wIHRoZSB0cmFjaW5nLiAqLwotCXRyYWNpbmdfc3RvcCgpOwotCS8qIGNoZWNrIHRoZSB0cmFjZSBidWZmZXIgKi8KLQlyZXQgPSB0cmFjZV90ZXN0X2J1ZmZlcih0ciwgJmNvdW50KTsKLQl0cmFjZS0+cmVzZXQodHIpOwotCXRyYWNpbmdfc3RhcnQoKTsKLQotCS8qIHJlYWQgJiB3cml0ZSBvcGVyYXRpb25zIC0gb25lIGVhY2ggaXMgcGVyZm9ybWVkIG9uIHRoZSBkdW1teSB2YXJpYWJsZQotCSAqIHRyaWdnZXJpbmcgdHdvIGVudHJpZXMgaW4gdGhlIHRyYWNlIGJ1ZmZlcgotCSAqLwotCWlmICghcmV0ICYmIGNvdW50ICE9IDIpIHsKLQkJcHJpbnRrKEtFUk5fQ09OVCAiS3N5bSB0cmFjZXIgc3RhcnR1cCB0ZXN0IGZhaWxlZCIpOwotCQlyZXQgPSAtMTsKLQl9Ci0KLXJldF9wYXRoOgotCXJldHVybiByZXQ7Ci19Ci0jZW5kaWYgLyogQ09ORklHX0tTWU1fVFJBQ0VSICovCi0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zdGFjay5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3N0YWNrLmMKaW5kZXggZjRiYzliMi4uMDU2NDY4ZSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3N0YWNrLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3N0YWNrLmMKQEAgLTExMCwxMiArMTEwLDEyIEBACiBzdGF0aWMgdm9pZAogc3RhY2tfdHJhY2VfY2FsbCh1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCkKIHsKLQlpbnQgY3B1LCByZXNjaGVkOworCWludCBjcHU7CiAKIAlpZiAodW5saWtlbHkoIWZ0cmFjZV9lbmFibGVkIHx8IHN0YWNrX3RyYWNlX2Rpc2FibGVkKSkKIAkJcmV0dXJuOwogCi0JcmVzY2hlZCA9IGZ0cmFjZV9wcmVlbXB0X2Rpc2FibGUoKTsKKwlwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpOwogCiAJY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKIAkvKiBubyBhdG9taWMgbmVlZGVkLCB3ZSBvbmx5IG1vZGlmeSB0aGlzIHZhcmlhYmxlIGJ5IHRoaXMgY3B1ICovCkBAIC0xMjcsNyArMTI3LDcgQEAKICBvdXQ6CiAJcGVyX2NwdSh0cmFjZV9hY3RpdmUsIGNwdSktLTsKIAkvKiBwcmV2ZW50IHJlY3Vyc2lvbiBpbiBzY2hlZHVsZSAqLwotCWZ0cmFjZV9wcmVlbXB0X2VuYWJsZShyZXNjaGVkKTsKKwlwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX29wcyB0cmFjZV9vcHMgX19yZWFkX21vc3RseSA9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jCmluZGV4IDM0ZTM1ODAuLmJhYzc1MmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jCkBAIC0yMyw2ICsyMyw5IEBACiBzdGF0aWMgaW50IHN5c2NhbGxfZW50ZXJfZGVmaW5lX2ZpZWxkcyhzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpOwogc3RhdGljIGludCBzeXNjYWxsX2V4aXRfZGVmaW5lX2ZpZWxkcyhzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpOwogCisvKiBBbGwgc3lzY2FsbCBleGl0IGV2ZW50cyBoYXZlIHRoZSBzYW1lIGZpZWxkcyAqLworc3RhdGljIExJU1RfSEVBRChzeXNjYWxsX2V4aXRfZmllbGRzKTsKKwogc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgKgogc3lzY2FsbF9nZXRfZW50ZXJfZmllbGRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKIHsKQEAgLTM0LDkgKzM3LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICoKIHN5c2NhbGxfZ2V0X2V4aXRfZmllbGRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKIHsKLQlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqZW50cnkgPSBjYWxsLT5kYXRhOwotCi0JcmV0dXJuICZlbnRyeS0+ZXhpdF9maWVsZHM7CisJcmV0dXJuICZzeXNjYWxsX2V4aXRfZmllbGRzOwogfQogCiBzdHJ1Y3QgdHJhY2VfZXZlbnRfZnVuY3Rpb25zIGVudGVyX3N5c2NhbGxfcHJpbnRfZnVuY3MgPSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzcHJvZi5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3N5c3Byb2YuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc5NzRhNS4uMDAwMDAwMAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzcHJvZi5jCisrKyAvZGV2L251bGwKQEAgLTEsMzI5ICswLDAgQEAKLS8qCi0gKiB0cmFjZSBzdGFjayB0cmFjZXMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCwgU29lcmVuIFNhbmRtYW5uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgU3RldmVuIFJvc3RlZHQgPHNyb3N0ZWR0QHJlZGhhdC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+Ci0gKi8KLSNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0KLSNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgotCi0jaW5jbHVkZSAidHJhY2UuaCIKLQotc3RhdGljIHN0cnVjdCB0cmFjZV9hcnJheQkqc3lzcHJvZl90cmFjZTsKLXN0YXRpYyBpbnQgX19yZWFkX21vc3RseQl0cmFjZXJfZW5hYmxlZDsKLQotLyoKLSAqIDEgbXNlYyBzYW1wbGUgaW50ZXJ2YWwgYnkgZGVmYXVsdDoKLSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2FtcGxlX3BlcmlvZCA9IDEwMDAwMDA7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNhbXBsZV9tYXhfZGVwdGggPSA1MTI7Ci0KLXN0YXRpYyBERUZJTkVfTVVURVgoc2FtcGxlX3RpbWVyX2xvY2spOwotLyoKLSAqIFBlciBDUFUgaHJ0aW1lcnMgdGhhdCBkbyB0aGUgcHJvZmlsaW5nOgotICovCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGhydGltZXIsIHN0YWNrX3RyYWNlX2hydGltZXIpOwotCi1zdHJ1Y3Qgc3RhY2tfZnJhbWUgewotCWNvbnN0IHZvaWQgX191c2VyCSpuZXh0X2ZwOwotCXVuc2lnbmVkIGxvbmcJCXJldHVybl9hZGRyZXNzOwotfTsKLQotc3RhdGljIGludCBjb3B5X3N0YWNrX2ZyYW1lKGNvbnN0IHZvaWQgX191c2VyICpmcCwgc3RydWN0IHN0YWNrX2ZyYW1lICpmcmFtZSkKLXsKLQlpbnQgcmV0OwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZwLCBzaXplb2YoKmZyYW1lKSkpCi0JCXJldHVybiAwOwotCi0JcmV0ID0gMTsKLQlwYWdlZmF1bHRfZGlzYWJsZSgpOwotCWlmIChfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKGZyYW1lLCBmcCwgc2l6ZW9mKCpmcmFtZSkpKQotCQlyZXQgPSAwOwotCXBhZ2VmYXVsdF9lbmFibGUoKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0cnVjdCBiYWNrdHJhY2VfaW5mbyB7Ci0Jc3RydWN0IHRyYWNlX2FycmF5X2NwdQkqZGF0YTsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXkJKnRyOwotCWludAkJCXBvczsKLX07Ci0KLXN0YXRpYyB2b2lkCi1iYWNrdHJhY2Vfd2FybmluZ19zeW1ib2wodm9pZCAqZGF0YSwgY2hhciAqbXNnLCB1bnNpZ25lZCBsb25nIHN5bWJvbCkKLXsKLQkvKiBJZ25vcmUgd2FybmluZ3MgKi8KLX0KLQotc3RhdGljIHZvaWQgYmFja3RyYWNlX3dhcm5pbmcodm9pZCAqZGF0YSwgY2hhciAqbXNnKQotewotCS8qIElnbm9yZSB3YXJuaW5ncyAqLwotfQotCi1zdGF0aWMgaW50IGJhY2t0cmFjZV9zdGFjayh2b2lkICpkYXRhLCBjaGFyICpuYW1lKQotewotCS8qIERvbid0IGJvdGhlciB3aXRoIElSUSBzdGFja3MgZm9yIG5vdyAqLwotCXJldHVybiAtMTsKLX0KLQotc3RhdGljIHZvaWQgYmFja3RyYWNlX2FkZHJlc3Modm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgcmVsaWFibGUpCi17Ci0Jc3RydWN0IGJhY2t0cmFjZV9pbmZvICppbmZvID0gZGF0YTsKLQotCWlmIChpbmZvLT5wb3MgPCBzYW1wbGVfbWF4X2RlcHRoICYmIHJlbGlhYmxlKSB7Ci0JCV9fdHJhY2Vfc3BlY2lhbChpbmZvLT50ciwgaW5mby0+ZGF0YSwgMSwgYWRkciwgMCk7Ci0KLQkJaW5mby0+cG9zKys7Ci0JfQotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHN0YWNrdHJhY2Vfb3BzIGJhY2t0cmFjZV9vcHMgPSB7Ci0JLndhcm5pbmcJCT0gYmFja3RyYWNlX3dhcm5pbmcsCi0JLndhcm5pbmdfc3ltYm9sCQk9IGJhY2t0cmFjZV93YXJuaW5nX3N5bWJvbCwKLQkuc3RhY2sJCQk9IGJhY2t0cmFjZV9zdGFjaywKLQkuYWRkcmVzcwkJPSBiYWNrdHJhY2VfYWRkcmVzcywKLQkud2Fsa19zdGFjawkJPSBwcmludF9jb250ZXh0X3N0YWNrLAotfTsKLQotc3RhdGljIGludAotdHJhY2Vfa2VybmVsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAotCSAgICAgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSkKLXsKLQlzdHJ1Y3QgYmFja3RyYWNlX2luZm8gaW5mbzsKLQl1bnNpZ25lZCBsb25nIGJwOwotCWNoYXIgKnN0YWNrOwotCi0JaW5mby50ciA9IHRyOwotCWluZm8uZGF0YSA9IGRhdGE7Ci0JaW5mby5wb3MgPSAxOwotCi0JX190cmFjZV9zcGVjaWFsKGluZm8udHIsIGluZm8uZGF0YSwgMSwgcmVncy0+aXAsIDApOwotCi0Jc3RhY2sgPSAoKGNoYXIgKilyZWdzICsgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7Ci0jaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKLQlicCA9IHJlZ3MtPmJwOwotI2Vsc2UKLQlicCA9IDA7Ci0jZW5kaWYKLQotCWR1bXBfdHJhY2UoTlVMTCwgcmVncywgKHZvaWQgKilzdGFjaywgYnAsICZiYWNrdHJhY2Vfb3BzLCAmaW5mbyk7Ci0KLQlyZXR1cm4gaW5mby5wb3M7Ci19Ci0KLXN0YXRpYyB2b2lkIHRpbWVyX25vdGlmeShzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGNwdSkKLXsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOwotCXN0cnVjdCBzdGFja19mcmFtZSBmcmFtZTsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyOwotCWNvbnN0IHZvaWQgX191c2VyICpmcDsKLQlpbnQgaXNfdXNlcjsKLQlpbnQgaTsKLQotCWlmICghcmVncykKLQkJcmV0dXJuOwotCi0JdHIgPSBzeXNwcm9mX3RyYWNlOwotCWRhdGEgPSB0ci0+ZGF0YVtjcHVdOwotCWlzX3VzZXIgPSB1c2VyX21vZGUocmVncyk7Ci0KLQlpZiAoIWN1cnJlbnQgfHwgY3VycmVudC0+cGlkID09IDApCi0JCXJldHVybjsKLQotCWlmIChpc191c2VyICYmIGN1cnJlbnQtPnN0YXRlICE9IFRBU0tfUlVOTklORykKLQkJcmV0dXJuOwotCi0JX190cmFjZV9zcGVjaWFsKHRyLCBkYXRhLCAwLCAwLCBjdXJyZW50LT5waWQpOwotCi0JaWYgKCFpc191c2VyKQotCQlpID0gdHJhY2Vfa2VybmVsKHJlZ3MsIHRyLCBkYXRhKTsKLQllbHNlCi0JCWkgPSAwOwotCi0JLyoKLQkgKiBUcmFjZSB1c2VyIHN0YWNrIGlmIHdlIGFyZSBub3QgYSBrZXJuZWwgdGhyZWFkCi0JICovCi0JaWYgKGN1cnJlbnQtPm1tICYmIGkgPCBzYW1wbGVfbWF4X2RlcHRoKSB7Ci0JCXJlZ3MgPSAoc3RydWN0IHB0X3JlZ3MgKiljdXJyZW50LT50aHJlYWQuc3AwIC0gMTsKLQotCQlmcCA9ICh2b2lkIF9fdXNlciAqKXJlZ3MtPmJwOwotCi0JCV9fdHJhY2Vfc3BlY2lhbCh0ciwgZGF0YSwgMiwgcmVncy0+aXAsIDApOwotCi0JCXdoaWxlIChpIDwgc2FtcGxlX21heF9kZXB0aCkgewotCQkJZnJhbWUubmV4dF9mcCA9IE5VTEw7Ci0JCQlmcmFtZS5yZXR1cm5fYWRkcmVzcyA9IDA7Ci0JCQlpZiAoIWNvcHlfc3RhY2tfZnJhbWUoZnAsICZmcmFtZSkpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoKHVuc2lnbmVkIGxvbmcpZnAgPCByZWdzLT5zcCkKLQkJCQlicmVhazsKLQotCQkJX190cmFjZV9zcGVjaWFsKHRyLCBkYXRhLCAyLCBmcmFtZS5yZXR1cm5fYWRkcmVzcywKLQkJCQkJKHVuc2lnbmVkIGxvbmcpZnApOwotCQkJZnAgPSBmcmFtZS5uZXh0X2ZwOwotCi0JCQlpKys7Ci0JCX0KLQotCX0KLQotCS8qCi0JICogU3BlY2lhbCB0cmFjZSBlbnRyeSBpZiB3ZSBvdmVyZmxvdyB0aGUgbWF4IGRlcHRoOgotCSAqLwotCWlmIChpID09IHNhbXBsZV9tYXhfZGVwdGgpCi0JCV9fdHJhY2Vfc3BlY2lhbCh0ciwgZGF0YSwgLTEsIC0xLCAtMSk7Ci0KLQlfX3RyYWNlX3NwZWNpYWwodHIsIGRhdGEsIDMsIGN1cnJlbnQtPnBpZCwgaSk7Ci19Ci0KLXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBzdGFja190cmFjZV90aW1lcl9mbihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcikKLXsKLQkvKiB0cmFjZSBoZXJlICovCi0JdGltZXJfbm90aWZ5KGdldF9pcnFfcmVncygpLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwotCi0JaHJ0aW1lcl9mb3J3YXJkX25vdyhocnRpbWVyLCBuc190b19rdGltZShzYW1wbGVfcGVyaW9kKSk7Ci0KLQlyZXR1cm4gSFJUSU1FUl9SRVNUQVJUOwotfQotCi1zdGF0aWMgdm9pZCBzdGFydF9zdGFja190aW1lcih2b2lkICp1bnVzZWQpCi17Ci0Jc3RydWN0IGhydGltZXIgKmhydGltZXIgPSAmX19nZXRfY3B1X3ZhcihzdGFja190cmFjZV9ocnRpbWVyKTsKLQotCWhydGltZXJfaW5pdChocnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwotCWhydGltZXItPmZ1bmN0aW9uID0gc3RhY2tfdHJhY2VfdGltZXJfZm47Ci0KLQlocnRpbWVyX3N0YXJ0KGhydGltZXIsIG5zX3RvX2t0aW1lKHNhbXBsZV9wZXJpb2QpLAotCQkgICAgICBIUlRJTUVSX01PREVfUkVMX1BJTk5FRCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YXJ0X3N0YWNrX3RpbWVycyh2b2lkKQotewotCW9uX2VhY2hfY3B1KHN0YXJ0X3N0YWNrX3RpbWVyLCBOVUxMLCAxKTsKLX0KLQotc3RhdGljIHZvaWQgc3RvcF9zdGFja190aW1lcihpbnQgY3B1KQotewotCXN0cnVjdCBocnRpbWVyICpocnRpbWVyID0gJnBlcl9jcHUoc3RhY2tfdHJhY2VfaHJ0aW1lciwgY3B1KTsKLQotCWhydGltZXJfY2FuY2VsKGhydGltZXIpOwotfQotCi1zdGF0aWMgdm9pZCBzdG9wX3N0YWNrX3RpbWVycyh2b2lkKQotewotCWludCBjcHU7Ci0KLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJc3RvcF9zdGFja190aW1lcihjcHUpOwotfQotCi1zdGF0aWMgdm9pZCBzdG9wX3N0YWNrX3RyYWNlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCi17Ci0JbXV0ZXhfbG9jaygmc2FtcGxlX3RpbWVyX2xvY2spOwotCXN0b3Bfc3RhY2tfdGltZXJzKCk7Ci0JdHJhY2VyX2VuYWJsZWQgPSAwOwotCW11dGV4X3VubG9jaygmc2FtcGxlX3RpbWVyX2xvY2spOwotfQotCi1zdGF0aWMgaW50IHN0YWNrX3RyYWNlX2luaXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKLXsKLQlzeXNwcm9mX3RyYWNlID0gdHI7Ci0KLQl0cmFjaW5nX3N0YXJ0X2NtZGxpbmVfcmVjb3JkKCk7Ci0KLQltdXRleF9sb2NrKCZzYW1wbGVfdGltZXJfbG9jayk7Ci0Jc3RhcnRfc3RhY2tfdGltZXJzKCk7Ci0JdHJhY2VyX2VuYWJsZWQgPSAxOwotCW11dGV4X3VubG9jaygmc2FtcGxlX3RpbWVyX2xvY2spOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzdGFja190cmFjZV9yZXNldChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQotewotCXRyYWNpbmdfc3RvcF9jbWRsaW5lX3JlY29yZCgpOwotCXN0b3Bfc3RhY2tfdHJhY2UodHIpOwotfQotCi1zdGF0aWMgc3RydWN0IHRyYWNlciBzdGFja190cmFjZSBfX3JlYWRfbW9zdGx5ID0KLXsKLQkubmFtZQkJPSAic3lzcHJvZiIsCi0JLmluaXQJCT0gc3RhY2tfdHJhY2VfaW5pdCwKLQkucmVzZXQJCT0gc3RhY2tfdHJhY2VfcmVzZXQsCi0jaWZkZWYgQ09ORklHX0ZUUkFDRV9TRUxGVEVTVAotCS5zZWxmdGVzdCAgICA9IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfc3lzcHJvZiwKLSNlbmRpZgotfTsKLQotX19pbml0IHN0YXRpYyBpbnQgaW5pdF9zdGFja190cmFjZSh2b2lkKQotewotCXJldHVybiByZWdpc3Rlcl90cmFjZXIoJnN0YWNrX3RyYWNlKTsKLX0KLWRldmljZV9pbml0Y2FsbChpbml0X3N0YWNrX3RyYWNlKTsKLQotI2RlZmluZSBNQVhfTE9OR19ESUdJVFMgMjIKLQotc3RhdGljIHNzaXplX3QKLXN5c3Byb2Zfc2FtcGxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLAotCQkgICAgc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQotewotCWNoYXIgYnVmW01BWF9MT05HX0RJR0lUU107Ci0JaW50IHI7Ci0KLQlyID0gc3ByaW50ZihidWYsICIlbGRcbiIsIG5zZWNzX3RvX3VzZWNzKHNhbXBsZV9wZXJpb2QpKTsKLQotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjbnQsIHBwb3MsIGJ1Ziwgcik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci1zeXNwcm9mX3NhbXBsZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCi0JCSAgICAgc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQotewotCWNoYXIgYnVmW01BWF9MT05HX0RJR0lUU107Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0KLQlpZiAoY250ID4gTUFYX0xPTkdfRElHSVRTLTEpCi0JCWNudCA9IE1BWF9MT05HX0RJR0lUUy0xOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYsIGNudCkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JYnVmW2NudF0gPSAwOwotCi0JdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7Ci0JLyoKLQkgKiBFbmZvcmNlIGEgbWluaW11bSBzYW1wbGUgcGVyaW9kIG9mIDEwMCB1c2VjczoKLQkgKi8KLQlpZiAodmFsIDwgMTAwKQotCQl2YWwgPSAxMDA7Ci0KLQltdXRleF9sb2NrKCZzYW1wbGVfdGltZXJfbG9jayk7Ci0Jc3RvcF9zdGFja190aW1lcnMoKTsKLQlzYW1wbGVfcGVyaW9kID0gdmFsICogMTAwMDsKLQlzdGFydF9zdGFja190aW1lcnMoKTsKLQltdXRleF91bmxvY2soJnNhbXBsZV90aW1lcl9sb2NrKTsKLQotCXJldHVybiBjbnQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN5c3Byb2Zfc2FtcGxlX2ZvcHMgPSB7Ci0JLnJlYWQJCT0gc3lzcHJvZl9zYW1wbGVfcmVhZCwKLQkud3JpdGUJCT0gc3lzcHJvZl9zYW1wbGVfd3JpdGUsCi19OwotCi12b2lkIGluaXRfdHJhY2VyX3N5c3Byb2ZfZGVidWdmcyhzdHJ1Y3QgZGVudHJ5ICpkX3RyYWNlcikKLXsKLQotCXRyYWNlX2NyZWF0ZV9maWxlKCJzeXNwcm9mX3NhbXBsZV9wZXJpb2QiLCAwNjQ0LAotCQkJZF90cmFjZXIsIE5VTEwsICZzeXNwcm9mX3NhbXBsZV9mb3BzKTsKLX0KZGlmZiAtLWdpdCBhL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jIGIva2VybmVsL3VzZXJfbmFtZXNwYWNlLmMKaW5kZXggYjJkNzBkMy4uMjU5MTU4MyAxMDA2NDQKLS0tIGEva2VybmVsL3VzZXJfbmFtZXNwYWNlLmMKKysrIGIva2VybmVsL3VzZXJfbmFtZXNwYWNlLmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbnNwcm94eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC91c2VyX25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2h1aWQuaD4KICNpbmNsdWRlIDxsaW51eC9jcmVkLmg+CiAKIC8qCkBAIC04MiwzICs4Myw0NiBAQAogCXNjaGVkdWxlX3dvcmsoJm5zLT5kZXN0cm95ZXIpOwogfQogRVhQT1JUX1NZTUJPTChmcmVlX3VzZXJfbnMpOworCit1aWRfdCB1c2VyX25zX21hcF91aWQoc3RydWN0IHVzZXJfbmFtZXNwYWNlICp0bywgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsIHVpZF90IHVpZCkKK3sKKwlzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnRtcDsKKworCWlmIChsaWtlbHkodG8gPT0gY3JlZC0+dXNlci0+dXNlcl9ucykpCisJCXJldHVybiB1aWQ7CisKKworCS8qIElzIGNyZWQtPnVzZXIgdGhlIGNyZWF0b3Igb2YgdGhlIHRhcmdldCB1c2VyX25zCisJICogb3IgdGhlIGNyZWF0b3Igb2Ygb25lIG9mIGl0J3MgcGFyZW50cz8KKwkgKi8KKwlmb3IgKCB0bXAgPSB0bzsgdG1wICE9ICZpbml0X3VzZXJfbnM7CisJICAgICAgdG1wID0gdG1wLT5jcmVhdG9yLT51c2VyX25zICkgeworCQlpZiAoY3JlZC0+dXNlciA9PSB0bXAtPmNyZWF0b3IpIHsKKwkJCXJldHVybiAodWlkX3QpMDsKKwkJfQorCX0KKworCS8qIE5vIHVzZWZ1bCByZWxhdGlvbnNoaXAgc28gbm8gbWFwcGluZyAqLworCXJldHVybiBvdmVyZmxvd3VpZDsKK30KKworZ2lkX3QgdXNlcl9uc19tYXBfZ2lkKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdG8sIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLCBnaWRfdCBnaWQpCit7CisJc3RydWN0IHVzZXJfbmFtZXNwYWNlICp0bXA7CisKKwlpZiAobGlrZWx5KHRvID09IGNyZWQtPnVzZXItPnVzZXJfbnMpKQorCQlyZXR1cm4gZ2lkOworCisJLyogSXMgY3JlZC0+dXNlciB0aGUgY3JlYXRvciBvZiB0aGUgdGFyZ2V0IHVzZXJfbnMKKwkgKiBvciB0aGUgY3JlYXRvciBvZiBvbmUgb2YgaXQncyBwYXJlbnRzPworCSAqLworCWZvciAoIHRtcCA9IHRvOyB0bXAgIT0gJmluaXRfdXNlcl9uczsKKwkgICAgICB0bXAgPSB0bXAtPmNyZWF0b3ItPnVzZXJfbnMgKSB7CisJCWlmIChjcmVkLT51c2VyID09IHRtcC0+Y3JlYXRvcikgeworCQkJcmV0dXJuIChnaWRfdCkwOworCQl9CisJfQorCisJLyogTm8gdXNlZnVsIHJlbGF0aW9uc2hpcCBzbyBubyBtYXBwaW5nICovCisJcmV0dXJuIG92ZXJmbG93Z2lkOworfQpkaWZmIC0tZ2l0IGEva2VybmVsL3dhdGNoZG9nLmMgYi9rZXJuZWwvd2F0Y2hkb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTNiYzFmCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3dhdGNoZG9nLmMKQEAgLTAsMCArMSw1NjcgQEAKKy8qCisgKiBEZXRlY3QgaGFyZCBhbmQgc29mdCBsb2NrdXBzIG9uIGEgc3lzdGVtCisgKgorICogc3RhcnRlZCBieSBEb24gWmlja3VzLCBDb3B5cmlnaHQgKEMpIDIwMTAgUmVkIEhhdCwgSW5jLgorICoKKyAqIHRoaXMgY29kZSBkZXRlY3RzIGhhcmQgbG9ja3VwczogaW5jaWRlbnRzIGluIHdoZXJlIG9uIGEgQ1BVCisgKiB0aGUga2VybmVsIGRvZXMgbm90IHJlc3BvbmQgdG8gYW55dGhpbmcgZXhjZXB0IE5NSS4KKyAqCisgKiBOb3RlOiBNb3N0IG9mIHRoaXMgY29kZSBpcyBib3Jyb3dlZCBoZWF2aWx5IGZyb20gc29mdGxvY2t1cC5jLAorICogc28gdGhhbmtzIHRvIEluZ28gZm9yIHRoZSBpbml0aWFsIGltcGxlbWVudGF0aW9uLgorICogU29tZSBjaHVua3MgYWxzbyB0YWtlbiBmcm9tIGFyY2gveDg2L2tlcm5lbC9hcGljL25taS5jLCB0aGFua3MKKyAqIHRvIHRob3NlIGNvbnRyaWJ1dG9ycyBhcyB3ZWxsLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L25taS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CisKKyNpbmNsdWRlIDxhc20vaXJxX3JlZ3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CisKK2ludCB3YXRjaGRvZ19lbmFibGVkOworaW50IF9fcmVhZF9tb3N0bHkgc29mdGxvY2t1cF90aHJlc2ggPSA2MDsKKworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHdhdGNoZG9nX3RvdWNoX3RzKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgc29mdGxvY2t1cF93YXRjaGRvZyk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGhydGltZXIsIHdhdGNoZG9nX2hydGltZXIpOworc3RhdGljIERFRklORV9QRVJfQ1BVKGJvb2wsIHNvZnRsb2NrdXBfdG91Y2hfc3luYyk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoYm9vbCwgc29mdF93YXRjaGRvZ193YXJuKTsKKyNpZmRlZiBDT05GSUdfSEFSRExPQ0tVUF9ERVRFQ1RPUgorc3RhdGljIERFRklORV9QRVJfQ1BVKGJvb2wsIGhhcmRfd2F0Y2hkb2dfd2Fybik7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoYm9vbCwgd2F0Y2hkb2dfbm1pX3RvdWNoKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBocnRpbWVyX2ludGVycnVwdHMpOworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGhydGltZXJfaW50ZXJydXB0c19zYXZlZCk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBlcmZfZXZlbnQgKiwgd2F0Y2hkb2dfZXYpOworI2VuZGlmCisKK3N0YXRpYyBpbnQgX19yZWFkX21vc3RseSBkaWRfcGFuaWM7CitzdGF0aWMgaW50IF9faW5pdGRhdGEgbm9fd2F0Y2hkb2c7CisKKworLyogYm9vdCBjb21tYW5kcyAqLworLyoKKyAqIFNob3VsZCB3ZSBwYW5pYyB3aGVuIGEgc29mdC1sb2NrdXAgb3IgaGFyZC1sb2NrdXAgb2NjdXJzOgorICovCisjaWZkZWYgQ09ORklHX0hBUkRMT0NLVVBfREVURUNUT1IKK3N0YXRpYyBpbnQgaGFyZGxvY2t1cF9wYW5pYzsKKworc3RhdGljIGludCBfX2luaXQgaGFyZGxvY2t1cF9wYW5pY19zZXR1cChjaGFyICpzdHIpCit7CisJaWYgKCFzdHJuY21wKHN0ciwgInBhbmljIiwgNSkpCisJCWhhcmRsb2NrdXBfcGFuaWMgPSAxOworCXJldHVybiAxOworfQorX19zZXR1cCgibm1pX3dhdGNoZG9nPSIsIGhhcmRsb2NrdXBfcGFuaWNfc2V0dXApOworI2VuZGlmCisKK3Vuc2lnbmVkIGludCBfX3JlYWRfbW9zdGx5IHNvZnRsb2NrdXBfcGFuaWMgPQorCQkJQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFOworCitzdGF0aWMgaW50IF9faW5pdCBzb2Z0bG9ja3VwX3BhbmljX3NldHVwKGNoYXIgKnN0cikKK3sKKwlzb2Z0bG9ja3VwX3BhbmljID0gc2ltcGxlX3N0cnRvdWwoc3RyLCBOVUxMLCAwKTsKKworCXJldHVybiAxOworfQorX19zZXR1cCgic29mdGxvY2t1cF9wYW5pYz0iLCBzb2Z0bG9ja3VwX3BhbmljX3NldHVwKTsKKworc3RhdGljIGludCBfX2luaXQgbm93YXRjaGRvZ19zZXR1cChjaGFyICpzdHIpCit7CisJbm9fd2F0Y2hkb2cgPSAxOworCXJldHVybiAxOworfQorX19zZXR1cCgibm93YXRjaGRvZyIsIG5vd2F0Y2hkb2dfc2V0dXApOworCisvKiBkZXByZWNhdGVkICovCitzdGF0aWMgaW50IF9faW5pdCBub3NvZnRsb2NrdXBfc2V0dXAoY2hhciAqc3RyKQoreworCW5vX3dhdGNoZG9nID0gMTsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoIm5vc29mdGxvY2t1cCIsIG5vc29mdGxvY2t1cF9zZXR1cCk7CisvKiAgKi8KKworCisvKgorICogUmV0dXJucyBzZWNvbmRzLCBhcHByb3hpbWF0ZWx5LiAgV2UgZG9uJ3QgbmVlZCBuYW5vc2Vjb25kCisgKiByZXNvbHV0aW9uLCBhbmQgd2UgZG9uJ3QgbmVlZCB0byB3YXN0ZSB0aW1lIHdpdGggYSBiaWcgZGl2aWRlIHdoZW4KKyAqIDJeMzBucyA9PSAxLjA3NHMuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF90aW1lc3RhbXAoaW50IHRoaXNfY3B1KQoreworCXJldHVybiBjcHVfY2xvY2sodGhpc19jcHUpID4+IDMwTEw7ICAvKiAyXjMwIH49IDEwXjkgKi8KK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3NhbXBsZV9wZXJpb2Qodm9pZCkKK3sKKwkvKgorCSAqIGNvbnZlcnQgc29mdGxvY2t1cF90aHJlc2ggZnJvbSBzZWNvbmRzIHRvIG5zCisJICogdGhlIGRpdmlkZSBieSA1IGlzIHRvIGdpdmUgaHJ0aW1lciA1IGNoYW5jZXMgdG8KKwkgKiBpbmNyZW1lbnQgYmVmb3JlIHRoZSBoYXJkbG9ja3VwIGRldGVjdG9yIGdlbmVyYXRlcworCSAqIGEgd2FybmluZworCSAqLworCXJldHVybiBzb2Z0bG9ja3VwX3RocmVzaCAvIDUgKiBOU0VDX1BFUl9TRUM7Cit9CisKKy8qIENvbW1hbmRzIGZvciByZXNldHRpbmcgdGhlIHdhdGNoZG9nICovCitzdGF0aWMgdm9pZCBfX3RvdWNoX3dhdGNoZG9nKHZvaWQpCit7CisJaW50IHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJX19nZXRfY3B1X3Zhcih3YXRjaGRvZ190b3VjaF90cykgPSBnZXRfdGltZXN0YW1wKHRoaXNfY3B1KTsKK30KKwordm9pZCB0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKHZvaWQpCit7CisJX19nZXRfY3B1X3Zhcih3YXRjaGRvZ190b3VjaF90cykgPSAwOworfQorRVhQT1JUX1NZTUJPTCh0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKTsKKwordm9pZCB0b3VjaF9hbGxfc29mdGxvY2t1cF93YXRjaGRvZ3Modm9pZCkKK3sKKwlpbnQgY3B1OworCisJLyoKKwkgKiB0aGlzIGlzIGRvbmUgbG9ja2xlc3MKKwkgKiBkbyB3ZSBjYXJlIGlmIGEgMCByYWNlcyB3aXRoIGEgdGltZXN0YW1wPworCSAqIGFsbCBpdCBtZWFucyBpcyB0aGUgc29mdGxvY2sgY2hlY2sgc3RhcnRzIG9uZSBjeWNsZSBsYXRlcgorCSAqLworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQorCQlwZXJfY3B1KHdhdGNoZG9nX3RvdWNoX3RzLCBjcHUpID0gMDsKK30KKworI2lmZGVmIENPTkZJR19IQVJETE9DS1VQX0RFVEVDVE9SCit2b2lkIHRvdWNoX25taV93YXRjaGRvZyh2b2lkKQoreworCV9fZ2V0X2NwdV92YXIod2F0Y2hkb2dfbm1pX3RvdWNoKSA9IHRydWU7CisJdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOworfQorRVhQT1JUX1NZTUJPTCh0b3VjaF9ubWlfd2F0Y2hkb2cpOworCisjZW5kaWYKKwordm9pZCB0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nX3N5bmModm9pZCkKK3sKKwlfX3Jhd19nZXRfY3B1X3Zhcihzb2Z0bG9ja3VwX3RvdWNoX3N5bmMpID0gdHJ1ZTsKKwlfX3Jhd19nZXRfY3B1X3Zhcih3YXRjaGRvZ190b3VjaF90cykgPSAwOworfQorCisjaWZkZWYgQ09ORklHX0hBUkRMT0NLVVBfREVURUNUT1IKKy8qIHdhdGNoZG9nIGRldGVjdG9yIGZ1bmN0aW9ucyAqLworc3RhdGljIGludCBpc19oYXJkbG9ja3VwKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBocmludCA9IF9fZ2V0X2NwdV92YXIoaHJ0aW1lcl9pbnRlcnJ1cHRzKTsKKworCWlmIChfX2dldF9jcHVfdmFyKGhydGltZXJfaW50ZXJydXB0c19zYXZlZCkgPT0gaHJpbnQpCisJCXJldHVybiAxOworCisJX19nZXRfY3B1X3ZhcihocnRpbWVyX2ludGVycnVwdHNfc2F2ZWQpID0gaHJpbnQ7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBpc19zb2Z0bG9ja3VwKHVuc2lnbmVkIGxvbmcgdG91Y2hfdHMpCit7CisJdW5zaWduZWQgbG9uZyBub3cgPSBnZXRfdGltZXN0YW1wKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisKKwkvKiBXYXJuIGFib3V0IHVucmVhc29uYWJsZSBkZWxheXM6ICovCisJaWYgKHRpbWVfYWZ0ZXIobm93LCB0b3VjaF90cyArIHNvZnRsb2NrdXBfdGhyZXNoKSkKKwkJcmV0dXJuIG5vdyAtIHRvdWNoX3RzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3dhdGNoZG9nX3BhbmljKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQoreworCWRpZF9wYW5pYyA9IDE7CisKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcGFuaWNfYmxvY2sgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSB3YXRjaGRvZ19wYW5pYywKK307CisKKyNpZmRlZiBDT05GSUdfSEFSRExPQ0tVUF9ERVRFQ1RPUgorc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgd2RfaHdfYXR0ciA9IHsKKwkudHlwZQkJPSBQRVJGX1RZUEVfSEFSRFdBUkUsCisJLmNvbmZpZwkJPSBQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMsCisJLnNpemUJCT0gc2l6ZW9mKHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIpLAorCS5waW5uZWQJCT0gMSwKKwkuZGlzYWJsZWQJPSAxLAorfTsKKworLyogQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIHBlcmYgZXZlbnQgc3Vic3lzdGVtICovCit2b2lkIHdhdGNoZG9nX292ZXJmbG93X2NhbGxiYWNrKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IG5taSwKKwkJIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLAorCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaWYgKF9fZ2V0X2NwdV92YXIod2F0Y2hkb2dfbm1pX3RvdWNoKSA9PSB0cnVlKSB7CisJCV9fZ2V0X2NwdV92YXIod2F0Y2hkb2dfbm1pX3RvdWNoKSA9IGZhbHNlOworCQlyZXR1cm47CisJfQorCisJLyogY2hlY2sgZm9yIGEgaGFyZGxvY2t1cAorCSAqIFRoaXMgaXMgZG9uZSBieSBtYWtpbmcgc3VyZSBvdXIgdGltZXIgaW50ZXJydXB0CisJICogaXMgaW5jcmVtZW50aW5nLiAgVGhlIHRpbWVyIGludGVycnVwdCBzaG91bGQgaGF2ZQorCSAqIGZpcmVkIG11bHRpcGxlIHRpbWVzIGJlZm9yZSB3ZSBvdmVyZmxvdydkLiAgSWYgaXQgaGFzbid0CisJICogdGhlbiB0aGlzIGlzIGEgZ29vZCBpbmRpY2F0aW9uIHRoZSBjcHUgaXMgc3R1Y2sKKwkgKi8KKwlpZiAoaXNfaGFyZGxvY2t1cCgpKSB7CisJCWludCB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCQkvKiBvbmx5IHByaW50IGhhcmRsb2NrdXBzIG9uY2UgKi8KKwkJaWYgKF9fZ2V0X2NwdV92YXIoaGFyZF93YXRjaGRvZ193YXJuKSA9PSB0cnVlKQorCQkJcmV0dXJuOworCisJCWlmIChoYXJkbG9ja3VwX3BhbmljKQorCQkJcGFuaWMoIldhdGNoZG9nIGRldGVjdGVkIGhhcmQgTE9DS1VQIG9uIGNwdSAlZCIsIHRoaXNfY3B1KTsKKwkJZWxzZQorCQkJV0FSTigxLCAiV2F0Y2hkb2cgZGV0ZWN0ZWQgaGFyZCBMT0NLVVAgb24gY3B1ICVkIiwgdGhpc19jcHUpOworCisJCV9fZ2V0X2NwdV92YXIoaGFyZF93YXRjaGRvZ193YXJuKSA9IHRydWU7CisJCXJldHVybjsKKwl9CisKKwlfX2dldF9jcHVfdmFyKGhhcmRfd2F0Y2hkb2dfd2FybikgPSBmYWxzZTsKKwlyZXR1cm47Cit9CitzdGF0aWMgdm9pZCB3YXRjaGRvZ19pbnRlcnJ1cHRfY291bnQodm9pZCkKK3sKKwlfX2dldF9jcHVfdmFyKGhydGltZXJfaW50ZXJydXB0cykrKzsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgd2F0Y2hkb2dfaW50ZXJydXB0X2NvdW50KHZvaWQpIHsgcmV0dXJuOyB9CisjZW5kaWYgLyogQ09ORklHX0hBUkRMT0NLVVBfREVURUNUT1IgKi8KKworLyogd2F0Y2hkb2cga2lja2VyIGZ1bmN0aW9ucyAqLworc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHdhdGNoZG9nX3RpbWVyX2ZuKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKQoreworCXVuc2lnbmVkIGxvbmcgdG91Y2hfdHMgPSBfX2dldF9jcHVfdmFyKHdhdGNoZG9nX3RvdWNoX3RzKTsKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGdldF9pcnFfcmVncygpOworCWludCBkdXJhdGlvbjsKKworCS8qIGtpY2sgdGhlIGhhcmRsb2NrdXAgZGV0ZWN0b3IgKi8KKwl3YXRjaGRvZ19pbnRlcnJ1cHRfY291bnQoKTsKKworCS8qIGtpY2sgdGhlIHNvZnRsb2NrdXAgZGV0ZWN0b3IgKi8KKwl3YWtlX3VwX3Byb2Nlc3MoX19nZXRfY3B1X3Zhcihzb2Z0bG9ja3VwX3dhdGNoZG9nKSk7CisKKwkvKiAuLiBhbmQgcmVwZWF0ICovCisJaHJ0aW1lcl9mb3J3YXJkX25vdyhocnRpbWVyLCBuc190b19rdGltZShnZXRfc2FtcGxlX3BlcmlvZCgpKSk7CisKKwlpZiAodG91Y2hfdHMgPT0gMCkgeworCQlpZiAodW5saWtlbHkoX19nZXRfY3B1X3Zhcihzb2Z0bG9ja3VwX3RvdWNoX3N5bmMpKSkgeworCQkJLyoKKwkJCSAqIElmIHRoZSB0aW1lIHN0YW1wIHdhcyB0b3VjaGVkIGF0b21pY2FsbHkKKwkJCSAqIG1ha2Ugc3VyZSB0aGUgc2NoZWR1bGVyIHRpY2sgaXMgdXAgdG8gZGF0ZS4KKwkJCSAqLworCQkJX19nZXRfY3B1X3Zhcihzb2Z0bG9ja3VwX3RvdWNoX3N5bmMpID0gZmFsc2U7CisJCQlzY2hlZF9jbG9ja190aWNrKCk7CisJCX0KKwkJX190b3VjaF93YXRjaGRvZygpOworCQlyZXR1cm4gSFJUSU1FUl9SRVNUQVJUOworCX0KKworCS8qIGNoZWNrIGZvciBhIHNvZnRsb2NrdXAKKwkgKiBUaGlzIGlzIGRvbmUgYnkgbWFraW5nIHN1cmUgYSBoaWdoIHByaW9yaXR5IHRhc2sgaXMKKwkgKiBiZWluZyBzY2hlZHVsZWQuICBUaGUgdGFzayB0b3VjaGVzIHRoZSB3YXRjaGRvZyB0bworCSAqIGluZGljYXRlIGl0IGlzIGdldHRpbmcgY3B1IHRpbWUuICBJZiBpdCBoYXNuJ3QgdGhlbgorCSAqIHRoaXMgaXMgYSBnb29kIGluZGljYXRpb24gc29tZSB0YXNrIGlzIGhvZ2dpbmcgdGhlIGNwdQorCSAqLworCWR1cmF0aW9uID0gaXNfc29mdGxvY2t1cCh0b3VjaF90cyk7CisJaWYgKHVubGlrZWx5KGR1cmF0aW9uKSkgeworCQkvKiBvbmx5IHdhcm4gb25jZSAqLworCQlpZiAoX19nZXRfY3B1X3Zhcihzb2Z0X3dhdGNoZG9nX3dhcm4pID09IHRydWUpCisJCQlyZXR1cm4gSFJUSU1FUl9SRVNUQVJUOworCisJCXByaW50ayhLRVJOX0VSUiAiQlVHOiBzb2Z0IGxvY2t1cCAtIENQVSMlZCBzdHVjayBmb3IgJXVzISBbJXM6JWRdXG4iLAorCQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCBkdXJhdGlvbiwKKwkJCWN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKKwkJcHJpbnRfbW9kdWxlcygpOworCQlwcmludF9pcnF0cmFjZV9ldmVudHMoY3VycmVudCk7CisJCWlmIChyZWdzKQorCQkJc2hvd19yZWdzKHJlZ3MpOworCQllbHNlCisJCQlkdW1wX3N0YWNrKCk7CisKKwkJaWYgKHNvZnRsb2NrdXBfcGFuaWMpCisJCQlwYW5pYygic29mdGxvY2t1cDogaHVuZyB0YXNrcyIpOworCQlfX2dldF9jcHVfdmFyKHNvZnRfd2F0Y2hkb2dfd2FybikgPSB0cnVlOworCX0gZWxzZQorCQlfX2dldF9jcHVfdmFyKHNvZnRfd2F0Y2hkb2dfd2FybikgPSBmYWxzZTsKKworCXJldHVybiBIUlRJTUVSX1JFU1RBUlQ7Cit9CisKKworLyoKKyAqIFRoZSB3YXRjaGRvZyB0aHJlYWQgLSB0b3VjaGVzIHRoZSB0aW1lc3RhbXAuCisgKi8KK3N0YXRpYyBpbnQgd2F0Y2hkb2codm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbSA9IHsgLnNjaGVkX3ByaW9yaXR5ID0gTUFYX1JUX1BSSU8tMSB9OworCXN0cnVjdCBocnRpbWVyICpocnRpbWVyID0gJl9fcmF3X2dldF9jcHVfdmFyKHdhdGNoZG9nX2hydGltZXIpOworCisJc2NoZWRfc2V0c2NoZWR1bGVyKGN1cnJlbnQsIFNDSEVEX0ZJRk8sICZwYXJhbSk7CisKKwkvKiBpbml0aWFsaXplIHRpbWVzdGFtcCAqLworCV9fdG91Y2hfd2F0Y2hkb2coKTsKKworCS8qIGtpY2sgb2ZmIHRoZSB0aW1lciBmb3IgdGhlIGhhcmRsb2NrdXAgZGV0ZWN0b3IgKi8KKwkvKiBkb25lIGhlcmUgYmVjYXVzZSBocnRpbWVyX3N0YXJ0IGNhbiBvbmx5IHBpbiB0byBzbXBfcHJvY2Vzc29yX2lkKCkgKi8KKwlocnRpbWVyX3N0YXJ0KGhydGltZXIsIG5zX3RvX2t0aW1lKGdldF9zYW1wbGVfcGVyaW9kKCkpLAorCQkgICAgICBIUlRJTUVSX01PREVfUkVMX1BJTk5FRCk7CisKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCS8qCisJICogUnVuIGJyaWVmbHkgb25jZSBwZXIgc2Vjb25kIHRvIHJlc2V0IHRoZSBzb2Z0bG9ja3VwIHRpbWVzdGFtcC4KKwkgKiBJZiB0aGlzIGdldHMgZGVsYXllZCBmb3IgbW9yZSB0aGFuIDYwIHNlY29uZHMgdGhlbiB0aGUKKwkgKiBkZWJ1Zy1wcmludG91dCB0cmlnZ2VycyBpbiB3YXRjaGRvZ190aW1lcl9mbigpLgorCSAqLworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCV9fdG91Y2hfd2F0Y2hkb2coKTsKKwkJc2NoZWR1bGUoKTsKKworCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQorCQkJYnJlYWs7CisKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwl9CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCisJcmV0dXJuIDA7Cit9CisKKworI2lmZGVmIENPTkZJR19IQVJETE9DS1VQX0RFVEVDVE9SCitzdGF0aWMgaW50IHdhdGNoZG9nX25taV9lbmFibGUoaW50IGNwdSkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICp3ZF9hdHRyOworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IHBlcl9jcHUod2F0Y2hkb2dfZXYsIGNwdSk7CisKKwkvKiBpcyBpdCBhbHJlYWR5IHNldHVwIGFuZCBlbmFibGVkPyAqLworCWlmIChldmVudCAmJiBldmVudC0+c3RhdGUgPiBQRVJGX0VWRU5UX1NUQVRFX09GRikKKwkJZ290byBvdXQ7CisKKwkvKiBpdCBpcyBzZXR1cCBidXQgbm90IGVuYWJsZWQgKi8KKwlpZiAoZXZlbnQgIT0gTlVMTCkKKwkJZ290byBvdXRfZW5hYmxlOworCisJLyogVHJ5IHRvIHJlZ2lzdGVyIHVzaW5nIGhhcmR3YXJlIHBlcmYgZXZlbnRzICovCisJd2RfYXR0ciA9ICZ3ZF9od19hdHRyOworCXdkX2F0dHItPnNhbXBsZV9wZXJpb2QgPSBod19ubWlfZ2V0X3NhbXBsZV9wZXJpb2QoKTsKKwlldmVudCA9IHBlcmZfZXZlbnRfY3JlYXRlX2tlcm5lbF9jb3VudGVyKHdkX2F0dHIsIGNwdSwgLTEsIHdhdGNoZG9nX292ZXJmbG93X2NhbGxiYWNrKTsKKwlpZiAoIUlTX0VSUihldmVudCkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTk1JIHdhdGNoZG9nIGVuYWJsZWQsIHRha2VzIG9uZSBody1wbXUgY291bnRlci5cbiIpOworCQlnb3RvIG91dF9zYXZlOworCX0KKworCXByaW50ayhLRVJOX0VSUiAiTk1JIHdhdGNoZG9nIGZhaWxlZCB0byBjcmVhdGUgcGVyZiBldmVudCBvbiBjcHUlaTogJXBcbiIsIGNwdSwgZXZlbnQpOworCXJldHVybiAtMTsKKworCS8qIHN1Y2Nlc3MgcGF0aCAqLworb3V0X3NhdmU6CisJcGVyX2NwdSh3YXRjaGRvZ19ldiwgY3B1KSA9IGV2ZW50Oworb3V0X2VuYWJsZToKKwlwZXJmX2V2ZW50X2VuYWJsZShwZXJfY3B1KHdhdGNoZG9nX2V2LCBjcHUpKTsKK291dDoKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd2F0Y2hkb2dfbm1pX2Rpc2FibGUoaW50IGNwdSkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBwZXJfY3B1KHdhdGNoZG9nX2V2LCBjcHUpOworCisJaWYgKGV2ZW50KSB7CisJCXBlcmZfZXZlbnRfZGlzYWJsZShldmVudCk7CisJCXBlcl9jcHUod2F0Y2hkb2dfZXYsIGNwdSkgPSBOVUxMOworCisJCS8qIHNob3VsZCBiZSBpbiBjbGVhbnVwLCBidXQgYmxvY2tzIG9wcm9maWxlICovCisJCXBlcmZfZXZlbnRfcmVsZWFzZV9rZXJuZWwoZXZlbnQpOworCX0KKwlyZXR1cm47Cit9CisjZWxzZQorc3RhdGljIGludCB3YXRjaGRvZ19ubWlfZW5hYmxlKGludCBjcHUpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyB2b2lkIHdhdGNoZG9nX25taV9kaXNhYmxlKGludCBjcHUpIHsgcmV0dXJuOyB9CisjZW5kaWYgLyogQ09ORklHX0hBUkRMT0NLVVBfREVURUNUT1IgKi8KKworLyogcHJlcGFyZS9lbmFibGUvZGlzYWJsZSByb3V0aW5lcyAqLworc3RhdGljIGludCB3YXRjaGRvZ19wcmVwYXJlX2NwdShpbnQgY3B1KQoreworCXN0cnVjdCBocnRpbWVyICpocnRpbWVyID0gJnBlcl9jcHUod2F0Y2hkb2dfaHJ0aW1lciwgY3B1KTsKKworCVdBUk5fT04ocGVyX2NwdShzb2Z0bG9ja3VwX3dhdGNoZG9nLCBjcHUpKTsKKwlocnRpbWVyX2luaXQoaHJ0aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKKwlocnRpbWVyLT5mdW5jdGlvbiA9IHdhdGNoZG9nX3RpbWVyX2ZuOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2F0Y2hkb2dfZW5hYmxlKGludCBjcHUpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwID0gcGVyX2NwdShzb2Z0bG9ja3VwX3dhdGNoZG9nLCBjcHUpOworCisJLyogZW5hYmxlIHRoZSBwZXJmIGV2ZW50ICovCisJaWYgKHdhdGNoZG9nX25taV9lbmFibGUoY3B1KSAhPSAwKQorCQlyZXR1cm4gLTE7CisKKwkvKiBjcmVhdGUgdGhlIHdhdGNoZG9nIHRocmVhZCAqLworCWlmICghcCkgeworCQlwID0ga3RocmVhZF9jcmVhdGUod2F0Y2hkb2csICh2b2lkICopKHVuc2lnbmVkIGxvbmcpY3B1LCAid2F0Y2hkb2cvJWQiLCBjcHUpOworCQlpZiAoSVNfRVJSKHApKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInNvZnRsb2NrdXAgd2F0Y2hkb2cgZm9yICVpIGZhaWxlZFxuIiwgY3B1KTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlrdGhyZWFkX2JpbmQocCwgY3B1KTsKKwkJcGVyX2NwdSh3YXRjaGRvZ190b3VjaF90cywgY3B1KSA9IDA7CisJCXBlcl9jcHUoc29mdGxvY2t1cF93YXRjaGRvZywgY3B1KSA9IHA7CisJCXdha2VfdXBfcHJvY2VzcyhwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd2F0Y2hkb2dfZGlzYWJsZShpbnQgY3B1KQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IHBlcl9jcHUoc29mdGxvY2t1cF93YXRjaGRvZywgY3B1KTsKKwlzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lciA9ICZwZXJfY3B1KHdhdGNoZG9nX2hydGltZXIsIGNwdSk7CisKKwkvKgorCSAqIGNhbmNlbCB0aGUgdGltZXIgZmlyc3QgdG8gc3RvcCBpbmNyZW1lbnRpbmcgdGhlIHN0YXRzCisJICogYW5kIHdha2luZyB1cCB0aGUga3RocmVhZAorCSAqLworCWhydGltZXJfY2FuY2VsKGhydGltZXIpOworCisJLyogZGlzYWJsZSB0aGUgcGVyZiBldmVudCAqLworCXdhdGNoZG9nX25taV9kaXNhYmxlKGNwdSk7CisKKwkvKiBzdG9wIHRoZSB3YXRjaGRvZyB0aHJlYWQgKi8KKwlpZiAocCkgeworCQlwZXJfY3B1KHNvZnRsb2NrdXBfd2F0Y2hkb2csIGNwdSkgPSBOVUxMOworCQlrdGhyZWFkX3N0b3AocCk7CisJfQorCisJLyogaWYgYW55IGNwdSBzdWNjZWVkcywgd2F0Y2hkb2cgaXMgY29uc2lkZXJlZCBlbmFibGVkIGZvciB0aGUgc3lzdGVtICovCisJd2F0Y2hkb2dfZW5hYmxlZCA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHdhdGNoZG9nX2VuYWJsZV9hbGxfY3B1cyh2b2lkKQoreworCWludCBjcHU7CisJaW50IHJlc3VsdCA9IDA7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKKwkJcmVzdWx0ICs9IHdhdGNoZG9nX2VuYWJsZShjcHUpOworCisJaWYgKHJlc3VsdCkKKwkJcHJpbnRrKEtFUk5fRVJSICJ3YXRjaGRvZzogZmFpbGVkIHRvIGJlIGVuYWJsZWQgb24gc29tZSBjcHVzXG4iKTsKKworfQorCitzdGF0aWMgdm9pZCB3YXRjaGRvZ19kaXNhYmxlX2FsbF9jcHVzKHZvaWQpCit7CisJaW50IGNwdTsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQorCQl3YXRjaGRvZ19kaXNhYmxlKGNwdSk7CisKKwkvKiBpZiBhbGwgd2F0Y2hkb2dzIGFyZSBkaXNhYmxlZCwgdGhlbiB0aGV5IGFyZSBkaXNhYmxlZCBmb3IgdGhlIHN5c3RlbSAqLworCXdhdGNoZG9nX2VuYWJsZWQgPSAwOworfQorCisKKy8qIHN5c2N0bCBmdW5jdGlvbnMgKi8KKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisvKgorICogcHJvYyBoYW5kbGVyIGZvciAvcHJvYy9zeXMva2VybmVsL25taV93YXRjaGRvZworICovCisKK2ludCBwcm9jX2Rvd2F0Y2hkb2dfZW5hYmxlZChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAorCQkgICAgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVuZ3RoLCBsb2ZmX3QgKnBwb3MpCit7CisJcHJvY19kb2ludHZlYyh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVuZ3RoLCBwcG9zKTsKKworCWlmICh3YXRjaGRvZ19lbmFibGVkKQorCQl3YXRjaGRvZ19lbmFibGVfYWxsX2NwdXMoKTsKKwllbHNlCisJCXdhdGNoZG9nX2Rpc2FibGVfYWxsX2NwdXMoKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHByb2NfZG93YXRjaGRvZ190aHJlc2goc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKKwkJCSAgICAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwKKwkJCSAgICAgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCit7CisJcmV0dXJuIHByb2NfZG9pbnR2ZWNfbWlubWF4KHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovCisKKworLyoKKyAqIENyZWF0ZS9kZXN0cm95IHdhdGNoZG9nIHRocmVhZHMgYXMgQ1BVcyBjb21lIGFuZCBnbzoKKyAqLworc3RhdGljIGludCBfX2NwdWluaXQKK2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJaW50IGhvdGNwdSA9ICh1bnNpZ25lZCBsb25nKWhjcHU7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgQ1BVX1VQX1BSRVBBUkU6CisJY2FzZSBDUFVfVVBfUFJFUEFSRV9GUk9aRU46CisJCWlmICh3YXRjaGRvZ19wcmVwYXJlX2NwdShob3RjcHUpKQorCQkJcmV0dXJuIE5PVElGWV9CQUQ7CisJCWJyZWFrOworCWNhc2UgQ1BVX09OTElORToKKwljYXNlIENQVV9PTkxJTkVfRlJPWkVOOgorCQlpZiAod2F0Y2hkb2dfZW5hYmxlKGhvdGNwdSkpCisJCQlyZXR1cm4gTk9USUZZX0JBRDsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisJY2FzZSBDUFVfVVBfQ0FOQ0VMRUQ6CisJY2FzZSBDUFVfVVBfQ0FOQ0VMRURfRlJPWkVOOgorCQl3YXRjaGRvZ19kaXNhYmxlKGhvdGNwdSk7CisJCWJyZWFrOworCWNhc2UgQ1BVX0RFQUQ6CisJY2FzZSBDUFVfREVBRF9GUk9aRU46CisJCXdhdGNoZG9nX2Rpc2FibGUoaG90Y3B1KTsKKwkJYnJlYWs7CisjZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCisJfQorCXJldHVybiBOT1RJRllfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19jcHVpbml0ZGF0YSBjcHVfbmZiID0geworCS5ub3RpZmllcl9jYWxsID0gY3B1X2NhbGxiYWNrCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzcGF3bl93YXRjaGRvZ190YXNrKHZvaWQpCit7CisJdm9pZCAqY3B1ID0gKHZvaWQgKikobG9uZylzbXBfcHJvY2Vzc29yX2lkKCk7CisJaW50IGVycjsKKworCWlmIChub193YXRjaGRvZykKKwkJcmV0dXJuIDA7CisKKwllcnIgPSBjcHVfY2FsbGJhY2soJmNwdV9uZmIsIENQVV9VUF9QUkVQQVJFLCBjcHUpOworCVdBUk5fT04oZXJyID09IE5PVElGWV9CQUQpOworCisJY3B1X2NhbGxiYWNrKCZjcHVfbmZiLCBDUFVfT05MSU5FLCBjcHUpOworCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmY3B1X25mYik7CisKKwlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsICZwYW5pY19ibG9jayk7CisKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X2luaXRjYWxsKHNwYXduX3dhdGNoZG9nX3Rhc2spOwpkaWZmIC0tZ2l0IGEva2VybmVsL3dvcmtxdWV1ZS5jIGIva2VybmVsL3dvcmtxdWV1ZS5jCmluZGV4IDMyN2QyZGUuLjU5ZmVmMTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC93b3JrcXVldWUuYworKysgYi9rZXJuZWwvd29ya3F1ZXVlLmMKQEAgLTY4LDYgKzY4LDIxIEBACiAjZW5kaWYKIH07CiAKKyNpZmRlZiBDT05GSUdfTE9DS0RFUAorLyoqCisgKiBpbl93b3JrcXVldWVfY29udGV4dCgpIC0gaW4gY29udGV4dCBvZiBzcGVjaWZpZWQgd29ya3F1ZXVlPworICogQHdxOiB0aGUgd29ya3F1ZXVlIG9mIGludGVyZXN0CisgKgorICogQ2hlY2tzIGxvY2tkZXAgc3RhdGUgdG8gc2VlIGlmIHRoZSBjdXJyZW50IHRhc2sgaXMgZXhlY3V0aW5nIGZyb20KKyAqIHdpdGhpbiBhIHdvcmtxdWV1ZSBpdGVtLiAgVGhpcyBmdW5jdGlvbiBleGlzdHMgb25seSBpZiBsb2NrZGVwIGlzCisgKiBlbmFibGVkLgorICovCitpbnQgaW5fd29ya3F1ZXVlX2NvbnRleHQoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxKQoreworCXJldHVybiBsb2NrX2lzX2hlbGQoJndxLT5sb2NrZGVwX21hcCk7Cit9CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19ERUJVR19PQkpFQ1RTX1dPUksKIAogc3RhdGljIHN0cnVjdCBkZWJ1Z19vYmpfZGVzY3Igd29ya19kZWJ1Z19kZXNjcjsKZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWVfc2NoZWQuaCBiL2tlcm5lbC93b3JrcXVldWVfc2NoZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjA0MGJhCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3dvcmtxdWV1ZV9zY2hlZC5oCkBAIC0wLDAgKzEsMTYgQEAKKy8qCisgKiBrZXJuZWwvd29ya3F1ZXVlX3NjaGVkLmgKKyAqCisgKiBTY2hlZHVsZXIgaG9va3MgZm9yIGNvbmN1cnJlbmN5IG1hbmFnZWQgd29ya3F1ZXVlLiAgT25seSB0byBiZQorICogaW5jbHVkZWQgZnJvbSBzY2hlZC5jIGFuZCB3b3JrcXVldWUuYy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHdxX3dvcmtlcl93YWtpbmdfdXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY3B1KQoreworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqd3Ffd29ya2VyX3NsZWVwaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkJCSAgICAgdW5zaWduZWQgaW50IGNwdSkKK3sKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnIGIvbGliL0tjb25maWcKaW5kZXggMTcwZDhjYS4uNWI5MTZiYyAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcKKysrIGIvbGliL0tjb25maWcKQEAgLTE4MSw5ICsxODEsNiBAQAogY29uZmlnIENIRUNLX1NJR05BVFVSRQogCWJvb2wKIAotY29uZmlnIEhBVkVfTE1CCi0JYm9vbGVhbgotCiBjb25maWcgQ1BVTUFTS19PRkZTVEFDSwogCWJvb2wgIkZvcmNlIENQVSBtYXNrcyBvZmYgc3RhY2siIGlmIERFQlVHX1BFUl9DUFVfTUFQUwogCWhlbHAKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggZTcyMmU5ZC4uNzllMGRmZiAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTc2LDcgKzc2LDYgQEAKIAogY29uZmlnIERFQlVHX0ZTCiAJYm9vbCAiRGVidWcgRmlsZXN5c3RlbSIKLQlkZXBlbmRzIG9uIFNZU0ZTCiAJaGVscAogCSAgZGVidWdmcyBpcyBhIHZpcnR1YWwgZmlsZSBzeXN0ZW0gdGhhdCBrZXJuZWwgZGV2ZWxvcGVycyB1c2UgdG8gcHV0CiAJICBkZWJ1Z2dpbmcgZmlsZXMgaW50by4gIEVuYWJsZSB0aGlzIG9wdGlvbiB0byBiZSBhYmxlIHRvIHJlYWQgYW5kCkBAIC0xNTIsMjggKzE1MSwzMyBAQAogCSAgRHJpdmVycyBvdWdodCB0byBiZSBhYmxlIHRvIGhhbmRsZSBpbnRlcnJ1cHRzIGNvbWluZyBpbiBhdCB0aG9zZQogCSAgcG9pbnRzOyBzb21lIGRvbid0IGFuZCBuZWVkIHRvIGJlIGNhdWdodC4KIAotY29uZmlnIERFVEVDVF9TT0ZUTE9DS1VQCi0JYm9vbCAiRGV0ZWN0IFNvZnQgTG9ja3VwcyIKK2NvbmZpZyBMT0NLVVBfREVURUNUT1IKKwlib29sICJEZXRlY3QgSGFyZCBhbmQgU29mdCBMb2NrdXBzIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmICFTMzkwCi0JZGVmYXVsdCB5CiAJaGVscAotCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIGtlcm5lbCB0byBkZXRlY3QgInNvZnQgbG9ja3VwcyIsCi0JICB3aGljaCBhcmUgYnVncyB0aGF0IGNhdXNlIHRoZSBrZXJuZWwgdG8gbG9vcCBpbiBrZXJuZWwKKwkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBrZXJuZWwgdG8gYWN0IGFzIGEgd2F0Y2hkb2cgdG8gZGV0ZWN0CisJICBoYXJkIGFuZCBzb2Z0IGxvY2t1cHMuCisKKwkgIFNvZnRsb2NrdXBzIGFyZSBidWdzIHRoYXQgY2F1c2UgdGhlIGtlcm5lbCB0byBsb29wIGluIGtlcm5lbAogCSAgbW9kZSBmb3IgbW9yZSB0aGFuIDYwIHNlY29uZHMsIHdpdGhvdXQgZ2l2aW5nIG90aGVyIHRhc2tzIGEKLQkgIGNoYW5jZSB0byBydW4uCisJICBjaGFuY2UgdG8gcnVuLiAgVGhlIGN1cnJlbnQgc3RhY2sgdHJhY2UgaXMgZGlzcGxheWVkIHVwb24KKwkgIGRldGVjdGlvbiBhbmQgdGhlIHN5c3RlbSB3aWxsIHN0YXkgbG9ja2VkIHVwLgogCi0JICBXaGVuIGEgc29mdC1sb2NrdXAgaXMgZGV0ZWN0ZWQsIHRoZSBrZXJuZWwgd2lsbCBwcmludCB0aGUKLQkgIGN1cnJlbnQgc3RhY2sgdHJhY2UgKHdoaWNoIHlvdSBzaG91bGQgcmVwb3J0KSwgYnV0IHRoZQotCSAgc3lzdGVtIHdpbGwgc3RheSBsb2NrZWQgdXAuIFRoaXMgZmVhdHVyZSBoYXMgbmVnbGlnaWJsZQotCSAgb3ZlcmhlYWQuCisJICBIYXJkbG9ja3VwcyBhcmUgYnVncyB0aGF0IGNhdXNlIHRoZSBDUFUgdG8gbG9vcCBpbiBrZXJuZWwgbW9kZQorCSAgZm9yIG1vcmUgdGhhbiA2MCBzZWNvbmRzLCB3aXRob3V0IGxldHRpbmcgb3RoZXIgaW50ZXJydXB0cyBoYXZlIGEKKwkgIGNoYW5jZSB0byBydW4uICBUaGUgY3VycmVudCBzdGFjayB0cmFjZSBpcyBkaXNwbGF5ZWQgdXBvbiBkZXRlY3Rpb24KKwkgIGFuZCB0aGUgc3lzdGVtIHdpbGwgc3RheSBsb2NrZWQgdXAuCiAKLQkgIChOb3RlIHRoYXQgImhhcmQgbG9ja3VwcyIgYXJlIHNlcGFyYXRlIHR5cGUgb2YgYnVncyB0aGF0Ci0JICAgY2FuIGJlIGRldGVjdGVkIHZpYSB0aGUgTk1JLXdhdGNoZG9nLCBvbiBwbGF0Zm9ybXMgdGhhdAotCSAgIHN1cHBvcnQgaXQuKQorCSAgVGhlIG92ZXJoZWFkIHNob3VsZCBiZSBtaW5pbWFsLiAgQSBwZXJpb2RpYyBocnRpbWVyIHJ1bnMgdG8KKwkgIGdlbmVyYXRlIGludGVycnVwdHMgYW5kIGtpY2sgdGhlIHdhdGNoZG9nIHRhc2sgZXZlcnkgMTAtMTIgc2Vjb25kcy4KKwkgIEFuIE5NSSBpcyBnZW5lcmF0ZWQgZXZlcnkgNjAgc2Vjb25kcyBvciBzbyB0byBjaGVjayBmb3IgaGFyZGxvY2t1cHMuCisKK2NvbmZpZyBIQVJETE9DS1VQX0RFVEVDVE9SCisJZGVmX2Jvb2wgTE9DS1VQX0RFVEVDVE9SICYmIFBFUkZfRVZFTlRTICYmIEhBVkVfUEVSRl9FVkVOVFNfTk1JCiAKIGNvbmZpZyBCT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQwogCWJvb2wgIlBhbmljIChSZWJvb3QpIE9uIFNvZnQgTG9ja3VwcyIKLQlkZXBlbmRzIG9uIERFVEVDVF9TT0ZUTE9DS1VQCisJZGVwZW5kcyBvbiBMT0NLVVBfREVURUNUT1IKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUga2VybmVsIHRvIHBhbmljIG9uICJzb2Z0IGxvY2t1cHMiLAogCSAgd2hpY2ggYXJlIGJ1Z3MgdGhhdCBjYXVzZSB0aGUga2VybmVsIHRvIGxvb3AgaW4ga2VybmVsCkBAIC0xOTAsNyArMTk0LDcgQEAKIAogY29uZmlnIEJPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFCiAJaW50Ci0JZGVwZW5kcyBvbiBERVRFQ1RfU09GVExPQ0tVUAorCWRlcGVuZHMgb24gTE9DS1VQX0RFVEVDVE9SCiAJcmFuZ2UgMCAxCiAJZGVmYXVsdCAwIGlmICFCT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQwogCWRlZmF1bHQgMSBpZiBCT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQwpAQCAtMzA3LDYgKzMxMSwxMiBAQAogCSAgd29yayBxdWV1ZSByb3V0aW5lcyB0byB0cmFjayB0aGUgbGlmZSB0aW1lIG9mIHdvcmsgb2JqZWN0cyBhbmQKIAkgIHZhbGlkYXRlIHRoZSB3b3JrIG9wZXJhdGlvbnMuCiAKK2NvbmZpZyBERUJVR19PQkpFQ1RTX1JDVV9IRUFECisJYm9vbCAiRGVidWcgUkNVIGNhbGxiYWNrcyBvYmplY3RzIgorCWRlcGVuZHMgb24gREVCVUdfT0JKRUNUUyAmJiBQUkVFTVBUCisJaGVscAorCSAgRW5hYmxlIHRoaXMgdG8gdHVybiBvbiBkZWJ1Z2dpbmcgb2YgUkNVIGxpc3QgaGVhZHMgKGNhbGxfcmN1KCkgdXNhZ2UpLgorCiBjb25maWcgREVCVUdfT0JKRUNUU19FTkFCTEVfREVGQVVMVAogCWludCAiZGVidWdfb2JqZWN0cyBib290dXAgZGVmYXVsdCB2YWx1ZSAoMC0xKSIKICAgICAgICAgcmFuZ2UgMCAxCkBAIC01MjgsNyArNTM4LDcgQEAKIAlib29sCiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVCAmJiBTVEFDS1RSQUNFX1NVUFBPUlQgJiYgTE9DS0RFUF9TVVBQT1JUCiAJc2VsZWN0IFNUQUNLVFJBQ0UKLQlzZWxlY3QgRlJBTUVfUE9JTlRFUiBpZiAhTUlQUyAmJiAhUFBDICYmICFBUk1fVU5XSU5EICYmICFTMzkwCisJc2VsZWN0IEZSQU1FX1BPSU5URVIgaWYgIU1JUFMgJiYgIVBQQyAmJiAhQVJNX1VOV0lORCAmJiAhUzM5MCAmJiAhTUlDUk9CTEFaRQogCXNlbGVjdCBLQUxMU1lNUwogCXNlbGVjdCBLQUxMU1lNU19BTEwKIApAQCAtNjI4LDYgKzYzOCwxOSBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgREVCVUdfSU5GT19SRURVQ0VECisJYm9vbCAiUmVkdWNlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiIKKwlkZXBlbmRzIG9uIERFQlVHX0lORk8KKwloZWxwCisJICBJZiB5b3Ugc2F5IFkgaGVyZSBnY2MgaXMgaW5zdHJ1Y3RlZCB0byBnZW5lcmF0ZSBsZXNzIGRlYnVnZ2luZworCSAgaW5mb3JtYXRpb24gZm9yIHN0cnVjdHVyZSB0eXBlcy4gVGhpcyBtZWFucyB0aGF0IHRvb2xzIHRoYXQKKwkgIG5lZWQgZnVsbCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gKGxpa2Uga2dkYiBvciBzeXN0ZW10YXApIHdvbid0CisJICBiZSBoYXBweS4gQnV0IGlmIHlvdSBtZXJlbHkgbmVlZCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gdG8KKwkgIHJlc29sdmUgbGluZSBudW1iZXJzIHRoZXJlIGlzIG5vIGxvc3MuIEFkdmFudGFnZSBpcyB0aGF0CisJICBidWlsZCBkaXJlY3Rvcnkgb2JqZWN0IHNpemVzIHNocmluayBkcmFtYXRpY2FsbHkgb3ZlciBhIGZ1bGwKKwkgIERFQlVHX0lORk8gYnVpbGQgYW5kIGNvbXBpbGUgdGltZXMgYXJlIHJlZHVjZWQgdG9vLgorCSAgT25seSB3b3JrcyB3aXRoIG5ld2VyIGdjYyB2ZXJzaW9ucy4KKwogY29uZmlnIERFQlVHX1ZNCiAJYm9vbCAiRGVidWcgVk0iCiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKQEAgLTkzNyw3ICs5NjAsNyBAQAogCSAgUHJvdmlkZSBmYXVsdC1pbmplY3Rpb24gY2FwYWJpbGl0eSBmb3IgZGlzayBJTy4KIAogY29uZmlnIEZBSUxfSU9fVElNRU9VVAotCWJvb2wgIkZhdWwtaW5qZWN0aW9uIGNhcGFiaWxpdHkgZm9yIGZha2luZyBkaXNrIGludGVycnVwdHMiCisJYm9vbCAiRmF1bHQtaW5qZWN0aW9uIGNhcGFiaWxpdHkgZm9yIGZha2luZyBkaXNrIGludGVycnVwdHMiCiAJZGVwZW5kcyBvbiBGQVVMVF9JTkpFQ1RJT04gJiYgQkxPQ0sKIAloZWxwCiAJICBQcm92aWRlIGZhdWx0LWluamVjdGlvbiBjYXBhYmlsaXR5IG9uIGVuZCBJTyBoYW5kbGluZy4gVGhpcwpAQCAtOTU4LDEzICs5ODEsMTMgQEAKIAlkZXBlbmRzIG9uIEZBVUxUX0lOSkVDVElPTl9ERUJVR19GUyAmJiBTVEFDS1RSQUNFX1NVUFBPUlQKIAlkZXBlbmRzIG9uICFYODZfNjQKIAlzZWxlY3QgU1RBQ0tUUkFDRQotCXNlbGVjdCBGUkFNRV9QT0lOVEVSIGlmICFQUEMgJiYgIVMzOTAKKwlzZWxlY3QgRlJBTUVfUE9JTlRFUiBpZiAhUFBDICYmICFTMzkwICYmICFNSUNST0JMQVpFCiAJaGVscAogCSAgUHJvdmlkZSBzdGFja3RyYWNlIGZpbHRlciBmb3IgZmF1bHQtaW5qZWN0aW9uIGNhcGFiaWxpdGllcwogCiBjb25maWcgTEFURU5DWVRPUAogCWJvb2wgIkxhdGVuY3kgbWVhc3VyaW5nIGluZnJhc3RydWN0dXJlIgotCXNlbGVjdCBGUkFNRV9QT0lOVEVSIGlmICFNSVBTICYmICFQUEMgJiYgIVMzOTAKKwlzZWxlY3QgRlJBTUVfUE9JTlRFUiBpZiAhTUlQUyAmJiAhUFBDICYmICFTMzkwICYmICFNSUNST0JMQVpFCiAJc2VsZWN0IEtBTExTWU1TCiAJc2VsZWN0IEtBTExTWU1TX0FMTAogCXNlbGVjdCBTVEFDS1RSQUNFCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9saWIvTWFrZWZpbGUKaW5kZXggM2YxMDYyYy4uMGJmYWJiYSAxMDA2NDQKLS0tIGEvbGliL01ha2VmaWxlCisrKyBiL2xpYi9NYWtlZmlsZQpAQCAtODksOCArODksNiBAQAogCiBsaWItJChDT05GSUdfR0VORVJJQ19CVUcpICs9IGJ1Zy5vCiAKLW9iai0kKENPTkZJR19IQVZFX0xNQikgKz0gbG1iLm8KLQogb2JqLSQoQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0spICs9IHN5c2NhbGwubwogCiBvYmotJChDT05GSUdfRFlOQU1JQ19ERUJVRykgKz0gZHluYW1pY19kZWJ1Zy5vCmRpZmYgLS1naXQgYS9saWIvYXRvbWljNjRfdGVzdC5jIGIvbGliL2F0b21pYzY0X3Rlc3QuYwppbmRleCAyNTBlZDExLi40NDUyNGNjIDEwMDY0NAotLS0gYS9saWIvYXRvbWljNjRfdGVzdC5jCisrKyBiL2xpYi9hdG9taWM2NF90ZXN0LmMKQEAgLTExNCw3ICsxMTQsNyBAQAogCUJVR19PTih2LmNvdW50ZXIgIT0gcik7CiAKICNpZiBkZWZpbmVkKENPTkZJR19YODYpIHx8IGRlZmluZWQoQ09ORklHX01JUFMpIHx8IGRlZmluZWQoQ09ORklHX1BQQykgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX1MzOTApIHx8IGRlZmluZWQoX0FTTV9HRU5FUklDX0FUT01JQzY0X0gpCisgICAgZGVmaW5lZChDT05GSUdfUzM5MCkgfHwgZGVmaW5lZChfQVNNX0dFTkVSSUNfQVRPTUlDNjRfSCkgfHwgZGVmaW5lZChDT05GSUdfQVJNKQogCUlOSVQob25lc3R3b3MpOwogCUJVR19PTihhdG9taWM2NF9kZWNfaWZfcG9zaXRpdmUoJnYpICE9IChvbmVzdHdvcyAtIDEpKTsKIAlyIC09IG9uZTsKZGlmZiAtLWdpdCBhL2xpYi9kZXZyZXMuYyBiL2xpYi9kZXZyZXMuYwppbmRleCA0OTM2ODYwLi42ZWZkZGY1IDEwMDY0NAotLS0gYS9saWIvZGV2cmVzLmMKKysrIGIvbGliL2RldnJlcy5jCkBAIC0zMjgsNyArMzI4LDcgQEAKICAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIG1hcCBJTyByZXNvdXJjZXMgZm9yCiAgKiBAbWFzazogTWFzayBvZiBCQVJzIHRvIHVubWFwIGFuZCByZWxlYXNlCiAgKgotICogVW5hbXAgYW5kIHJlbGVhc2UgcmVnaW9ucyBzcGVjaWZpZWQgYnkgQG1hc2suCisgKiBVbm1hcCBhbmQgcmVsZWFzZSByZWdpb25zIHNwZWNpZmllZCBieSBAbWFzay4KICAqLwogdm9pZCBwY2ltX2lvdW5tYXBfcmVnaW9ucyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTE2IG1hc2spCiB7CmRpZmYgLS1naXQgYS9saWIvaW9yZW1hcC5jIGIvbGliL2lvcmVtYXAuYwppbmRleCAxNGM2MDc4Li41NzMwZWNkIDEwMDY0NAotLS0gYS9saWIvaW9yZW1hcC5jCisrKyBiL2xpYi9pb3JlbWFwLmMKQEAgLTEzLDEwICsxMywxMCBAQAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKIHN0YXRpYyBpbnQgaW9yZW1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQl1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QpCisJCXVuc2lnbmVkIGxvbmcgZW5kLCBwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QpCiB7CiAJcHRlX3QgKnB0ZTsKLQl1bnNpZ25lZCBsb25nIHBmbjsKKwl1NjQgcGZuOwogCiAJcGZuID0gcGh5c19hZGRyID4+IFBBR0VfU0hJRlQ7CiAJcHRlID0gcHRlX2FsbG9jX2tlcm5lbChwbWQsIGFkZHIpOwpAQCAtMzEsNyArMzEsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludCBpb3JlbWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCXVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCkKKwkJdW5zaWduZWQgbG9uZyBlbmQsIHBoeXNfYWRkcl90IHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCkKIHsKIAlwbWRfdCAqcG1kOwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKQEAgLTQ5LDcgKzQ5LDcgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaW9yZW1hcF9wdWRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQl1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QpCisJCXVuc2lnbmVkIGxvbmcgZW5kLCBwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QpCiB7CiAJcHVkX3QgKnB1ZDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7CkBAIC02Nyw3ICs2Nyw3IEBACiB9CiAKIGludCBpb3JlbWFwX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLAotCQkgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCBwZ3Byb3RfdCBwcm90KQorCQkgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHBoeXNfYWRkcl90IHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCkKIHsKIAlwZ2RfdCAqcGdkOwogCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CmRpZmYgLS1naXQgYS9saWIvbG1iLmMgYi9saWIvbG1iLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxZmM1MjYuLjAwMDAwMDAKLS0tIGEvbGliL2xtYi5jCisrKyAvZGV2L251bGwKQEAgLTEsNTQxICswLDAgQEAKLS8qCi0gKiBQcm9jZWR1cmVzIGZvciBtYWludGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCBsb2dpY2FsIG1lbW9yeSBibG9ja3MuCi0gKgotICogUGV0ZXIgQmVyZ25lciwgSUJNIENvcnAuCUp1bmUgMjAwMS4KLSAqIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBCZXJnbmVyLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgotCi0jZGVmaW5lIExNQl9BTExPQ19BTllXSEVSRQkwCi0KLXN0cnVjdCBsbWIgbG1iOwotCi1zdGF0aWMgaW50IGxtYl9kZWJ1ZzsKLQotc3RhdGljIGludCBfX2luaXQgZWFybHlfbG1iKGNoYXIgKnApCi17Ci0JaWYgKHAgJiYgc3Ryc3RyKHAsICJkZWJ1ZyIpKQotCQlsbWJfZGVidWcgPSAxOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oImxtYiIsIGVhcmx5X2xtYik7Ci0KLXN0YXRpYyB2b2lkIGxtYl9kdW1wKHN0cnVjdCBsbWJfcmVnaW9uICpyZWdpb24sIGNoYXIgKm5hbWUpCi17Ci0JdW5zaWduZWQgbG9uZyBsb25nIGJhc2UsIHNpemU7Ci0JaW50IGk7Ci0KLQlwcl9pbmZvKCIgJXMuY250ICA9IDB4JWx4XG4iLCBuYW1lLCByZWdpb24tPmNudCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcmVnaW9uLT5jbnQ7IGkrKykgewotCQliYXNlID0gcmVnaW9uLT5yZWdpb25baV0uYmFzZTsKLQkJc2l6ZSA9IHJlZ2lvbi0+cmVnaW9uW2ldLnNpemU7Ci0KLQkJcHJfaW5mbygiICVzWzB4JXhdXHQweCUwMTZsbHggLSAweCUwMTZsbHgsIDB4JWxseCBieXRlc1xuIiwKLQkJICAgIG5hbWUsIGksIGJhc2UsIGJhc2UgKyBzaXplIC0gMSwgc2l6ZSk7Ci0JfQotfQotCi12b2lkIGxtYl9kdW1wX2FsbCh2b2lkKQotewotCWlmICghbG1iX2RlYnVnKQotCQlyZXR1cm47Ci0KLQlwcl9pbmZvKCJMTUIgY29uZmlndXJhdGlvbjpcbiIpOwotCXByX2luZm8oIiBybW9fc2l6ZSAgICA9IDB4JWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylsbWIucm1vX3NpemUpOwotCXByX2luZm8oIiBtZW1vcnkuc2l6ZSA9IDB4JWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylsbWIubWVtb3J5LnNpemUpOwotCi0JbG1iX2R1bXAoJmxtYi5tZW1vcnksICJtZW1vcnkiKTsKLQlsbWJfZHVtcCgmbG1iLnJlc2VydmVkLCAicmVzZXJ2ZWQiKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgbG1iX2FkZHJzX292ZXJsYXAodTY0IGJhc2UxLCB1NjQgc2l6ZTEsIHU2NCBiYXNlMiwKLQkJCQkJdTY0IHNpemUyKQotewotCXJldHVybiAoKGJhc2UxIDwgKGJhc2UyICsgc2l6ZTIpKSAmJiAoYmFzZTIgPCAoYmFzZTEgKyBzaXplMSkpKTsKLX0KLQotc3RhdGljIGxvbmcgbG1iX2FkZHJzX2FkamFjZW50KHU2NCBiYXNlMSwgdTY0IHNpemUxLCB1NjQgYmFzZTIsIHU2NCBzaXplMikKLXsKLQlpZiAoYmFzZTIgPT0gYmFzZTEgKyBzaXplMSkKLQkJcmV0dXJuIDE7Ci0JZWxzZSBpZiAoYmFzZTEgPT0gYmFzZTIgKyBzaXplMikKLQkJcmV0dXJuIC0xOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBsb25nIGxtYl9yZWdpb25zX2FkamFjZW50KHN0cnVjdCBsbWJfcmVnaW9uICpyZ24sCi0JCXVuc2lnbmVkIGxvbmcgcjEsIHVuc2lnbmVkIGxvbmcgcjIpCi17Ci0JdTY0IGJhc2UxID0gcmduLT5yZWdpb25bcjFdLmJhc2U7Ci0JdTY0IHNpemUxID0gcmduLT5yZWdpb25bcjFdLnNpemU7Ci0JdTY0IGJhc2UyID0gcmduLT5yZWdpb25bcjJdLmJhc2U7Ci0JdTY0IHNpemUyID0gcmduLT5yZWdpb25bcjJdLnNpemU7Ci0KLQlyZXR1cm4gbG1iX2FkZHJzX2FkamFjZW50KGJhc2UxLCBzaXplMSwgYmFzZTIsIHNpemUyKTsKLX0KLQotc3RhdGljIHZvaWQgbG1iX3JlbW92ZV9yZWdpb24oc3RydWN0IGxtYl9yZWdpb24gKnJnbiwgdW5zaWduZWQgbG9uZyByKQotewotCXVuc2lnbmVkIGxvbmcgaTsKLQotCWZvciAoaSA9IHI7IGkgPCByZ24tPmNudCAtIDE7IGkrKykgewotCQlyZ24tPnJlZ2lvbltpXS5iYXNlID0gcmduLT5yZWdpb25baSArIDFdLmJhc2U7Ci0JCXJnbi0+cmVnaW9uW2ldLnNpemUgPSByZ24tPnJlZ2lvbltpICsgMV0uc2l6ZTsKLQl9Ci0JcmduLT5jbnQtLTsKLX0KLQotLyogQXNzdW1wdGlvbjogYmFzZSBhZGRyIG9mIHJlZ2lvbiAxIDwgYmFzZSBhZGRyIG9mIHJlZ2lvbiAyICovCi1zdGF0aWMgdm9pZCBsbWJfY29hbGVzY2VfcmVnaW9ucyhzdHJ1Y3QgbG1iX3JlZ2lvbiAqcmduLAotCQl1bnNpZ25lZCBsb25nIHIxLCB1bnNpZ25lZCBsb25nIHIyKQotewotCXJnbi0+cmVnaW9uW3IxXS5zaXplICs9IHJnbi0+cmVnaW9uW3IyXS5zaXplOwotCWxtYl9yZW1vdmVfcmVnaW9uKHJnbiwgcjIpOwotfQotCi12b2lkIF9faW5pdCBsbWJfaW5pdCh2b2lkKQotewotCS8qIENyZWF0ZSBhIGR1bW15IHplcm8gc2l6ZSBMTUIgd2hpY2ggd2lsbCBnZXQgY29hbGVzY2VkIGF3YXkgbGF0ZXIuCi0JICogVGhpcyBzaW1wbGlmaWVzIHRoZSBsbWJfYWRkKCkgY29kZSBiZWxvdy4uLgotCSAqLwotCWxtYi5tZW1vcnkucmVnaW9uWzBdLmJhc2UgPSAwOwotCWxtYi5tZW1vcnkucmVnaW9uWzBdLnNpemUgPSAwOwotCWxtYi5tZW1vcnkuY250ID0gMTsKLQotCS8qIERpdHRvLiAqLwotCWxtYi5yZXNlcnZlZC5yZWdpb25bMF0uYmFzZSA9IDA7Ci0JbG1iLnJlc2VydmVkLnJlZ2lvblswXS5zaXplID0gMDsKLQlsbWIucmVzZXJ2ZWQuY250ID0gMTsKLX0KLQotdm9pZCBfX2luaXQgbG1iX2FuYWx5emUodm9pZCkKLXsKLQlpbnQgaTsKLQotCWxtYi5tZW1vcnkuc2l6ZSA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbG1iLm1lbW9yeS5jbnQ7IGkrKykKLQkJbG1iLm1lbW9yeS5zaXplICs9IGxtYi5tZW1vcnkucmVnaW9uW2ldLnNpemU7Ci19Ci0KLXN0YXRpYyBsb25nIGxtYl9hZGRfcmVnaW9uKHN0cnVjdCBsbWJfcmVnaW9uICpyZ24sIHU2NCBiYXNlLCB1NjQgc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGNvYWxlc2NlZCA9IDA7Ci0JbG9uZyBhZGphY2VudCwgaTsKLQotCWlmICgocmduLT5jbnQgPT0gMSkgJiYgKHJnbi0+cmVnaW9uWzBdLnNpemUgPT0gMCkpIHsKLQkJcmduLT5yZWdpb25bMF0uYmFzZSA9IGJhc2U7Ci0JCXJnbi0+cmVnaW9uWzBdLnNpemUgPSBzaXplOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBGaXJzdCB0cnkgYW5kIGNvYWxlc2NlIHRoaXMgTE1CIHdpdGggYW5vdGhlci4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgcmduLT5jbnQ7IGkrKykgewotCQl1NjQgcmduYmFzZSA9IHJnbi0+cmVnaW9uW2ldLmJhc2U7Ci0JCXU2NCByZ25zaXplID0gcmduLT5yZWdpb25baV0uc2l6ZTsKLQotCQlpZiAoKHJnbmJhc2UgPT0gYmFzZSkgJiYgKHJnbnNpemUgPT0gc2l6ZSkpCi0JCQkvKiBBbHJlYWR5IGhhdmUgdGhpcyByZWdpb24sIHNvIHdlJ3JlIGRvbmUgKi8KLQkJCXJldHVybiAwOwotCi0JCWFkamFjZW50ID0gbG1iX2FkZHJzX2FkamFjZW50KGJhc2UsIHNpemUsIHJnbmJhc2UsIHJnbnNpemUpOwotCQlpZiAoYWRqYWNlbnQgPiAwKSB7Ci0JCQlyZ24tPnJlZ2lvbltpXS5iYXNlIC09IHNpemU7Ci0JCQlyZ24tPnJlZ2lvbltpXS5zaXplICs9IHNpemU7Ci0JCQljb2FsZXNjZWQrKzsKLQkJCWJyZWFrOwotCQl9IGVsc2UgaWYgKGFkamFjZW50IDwgMCkgewotCQkJcmduLT5yZWdpb25baV0uc2l6ZSArPSBzaXplOwotCQkJY29hbGVzY2VkKys7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmICgoaSA8IHJnbi0+Y250IC0gMSkgJiYgbG1iX3JlZ2lvbnNfYWRqYWNlbnQocmduLCBpLCBpKzEpKSB7Ci0JCWxtYl9jb2FsZXNjZV9yZWdpb25zKHJnbiwgaSwgaSsxKTsKLQkJY29hbGVzY2VkKys7Ci0JfQotCi0JaWYgKGNvYWxlc2NlZCkKLQkJcmV0dXJuIGNvYWxlc2NlZDsKLQlpZiAocmduLT5jbnQgPj0gTUFYX0xNQl9SRUdJT05TKQotCQlyZXR1cm4gLTE7Ci0KLQkvKiBDb3VsZG4ndCBjb2FsZXNjZSB0aGUgTE1CLCBzbyBhZGQgaXQgdG8gdGhlIHNvcnRlZCB0YWJsZS4gKi8KLQlmb3IgKGkgPSByZ24tPmNudCAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCWlmIChiYXNlIDwgcmduLT5yZWdpb25baV0uYmFzZSkgewotCQkJcmduLT5yZWdpb25baSsxXS5iYXNlID0gcmduLT5yZWdpb25baV0uYmFzZTsKLQkJCXJnbi0+cmVnaW9uW2krMV0uc2l6ZSA9IHJnbi0+cmVnaW9uW2ldLnNpemU7Ci0JCX0gZWxzZSB7Ci0JCQlyZ24tPnJlZ2lvbltpKzFdLmJhc2UgPSBiYXNlOwotCQkJcmduLT5yZWdpb25baSsxXS5zaXplID0gc2l6ZTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKGJhc2UgPCByZ24tPnJlZ2lvblswXS5iYXNlKSB7Ci0JCXJnbi0+cmVnaW9uWzBdLmJhc2UgPSBiYXNlOwotCQlyZ24tPnJlZ2lvblswXS5zaXplID0gc2l6ZTsKLQl9Ci0JcmduLT5jbnQrKzsKLQotCXJldHVybiAwOwotfQotCi1sb25nIGxtYl9hZGQodTY0IGJhc2UsIHU2NCBzaXplKQotewotCXN0cnVjdCBsbWJfcmVnaW9uICpfcmduID0gJmxtYi5tZW1vcnk7Ci0KLQkvKiBPbiBwU2VyaWVzIExQQVIgc3lzdGVtcywgdGhlIGZpcnN0IExNQiBpcyBvdXIgUk1PIHJlZ2lvbi4gKi8KLQlpZiAoYmFzZSA9PSAwKQotCQlsbWIucm1vX3NpemUgPSBzaXplOwotCi0JcmV0dXJuIGxtYl9hZGRfcmVnaW9uKF9yZ24sIGJhc2UsIHNpemUpOwotCi19Ci0KLXN0YXRpYyBsb25nIF9fbG1iX3JlbW92ZShzdHJ1Y3QgbG1iX3JlZ2lvbiAqcmduLCB1NjQgYmFzZSwgdTY0IHNpemUpCi17Ci0JdTY0IHJnbmJlZ2luLCByZ25lbmQ7Ci0JdTY0IGVuZCA9IGJhc2UgKyBzaXplOwotCWludCBpOwotCi0JcmduYmVnaW4gPSByZ25lbmQgPSAwOyAvKiBzdXByZXNzIGdjYyB3YXJuaW5ncyAqLwotCi0JLyogRmluZCB0aGUgcmVnaW9uIHdoZXJlIChiYXNlLCBzaXplKSBiZWxvbmdzIHRvICovCi0JZm9yIChpPTA7IGkgPCByZ24tPmNudDsgaSsrKSB7Ci0JCXJnbmJlZ2luID0gcmduLT5yZWdpb25baV0uYmFzZTsKLQkJcmduZW5kID0gcmduYmVnaW4gKyByZ24tPnJlZ2lvbltpXS5zaXplOwotCi0JCWlmICgocmduYmVnaW4gPD0gYmFzZSkgJiYgKGVuZCA8PSByZ25lbmQpKQotCQkJYnJlYWs7Ci0JfQotCi0JLyogRGlkbid0IGZpbmQgdGhlIHJlZ2lvbiAqLwotCWlmIChpID09IHJnbi0+Y250KQotCQlyZXR1cm4gLTE7Ci0KLQkvKiBDaGVjayB0byBzZWUgaWYgd2UgYXJlIHJlbW92aW5nIGVudGlyZSByZWdpb24gKi8KLQlpZiAoKHJnbmJlZ2luID09IGJhc2UpICYmIChyZ25lbmQgPT0gZW5kKSkgewotCQlsbWJfcmVtb3ZlX3JlZ2lvbihyZ24sIGkpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBDaGVjayB0byBzZWUgaWYgcmVnaW9uIGlzIG1hdGNoaW5nIGF0IHRoZSBmcm9udCAqLwotCWlmIChyZ25iZWdpbiA9PSBiYXNlKSB7Ci0JCXJnbi0+cmVnaW9uW2ldLmJhc2UgPSBlbmQ7Ci0JCXJnbi0+cmVnaW9uW2ldLnNpemUgLT0gc2l6ZTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSByZWdpb24gaXMgbWF0Y2hpbmcgYXQgdGhlIGVuZCAqLwotCWlmIChyZ25lbmQgPT0gZW5kKSB7Ci0JCXJnbi0+cmVnaW9uW2ldLnNpemUgLT0gc2l6ZTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoKLQkgKiBXZSBuZWVkIHRvIHNwbGl0IHRoZSBlbnRyeSAtICBhZGp1c3QgdGhlIGN1cnJlbnQgb25lIHRvIHRoZQotCSAqIGJlZ2luZ2luZyBvZiB0aGUgaG9sZSBhbmQgYWRkIHRoZSByZWdpb24gYWZ0ZXIgaG9sZS4KLQkgKi8KLQlyZ24tPnJlZ2lvbltpXS5zaXplID0gYmFzZSAtIHJnbi0+cmVnaW9uW2ldLmJhc2U7Ci0JcmV0dXJuIGxtYl9hZGRfcmVnaW9uKHJnbiwgZW5kLCByZ25lbmQgLSBlbmQpOwotfQotCi1sb25nIGxtYl9yZW1vdmUodTY0IGJhc2UsIHU2NCBzaXplKQotewotCXJldHVybiBfX2xtYl9yZW1vdmUoJmxtYi5tZW1vcnksIGJhc2UsIHNpemUpOwotfQotCi1sb25nIF9faW5pdCBsbWJfZnJlZSh1NjQgYmFzZSwgdTY0IHNpemUpCi17Ci0JcmV0dXJuIF9fbG1iX3JlbW92ZSgmbG1iLnJlc2VydmVkLCBiYXNlLCBzaXplKTsKLX0KLQotbG9uZyBfX2luaXQgbG1iX3Jlc2VydmUodTY0IGJhc2UsIHU2NCBzaXplKQotewotCXN0cnVjdCBsbWJfcmVnaW9uICpfcmduID0gJmxtYi5yZXNlcnZlZDsKLQotCUJVR19PTigwID09IHNpemUpOwotCi0JcmV0dXJuIGxtYl9hZGRfcmVnaW9uKF9yZ24sIGJhc2UsIHNpemUpOwotfQotCi1sb25nIGxtYl9vdmVybGFwc19yZWdpb24oc3RydWN0IGxtYl9yZWdpb24gKnJnbiwgdTY0IGJhc2UsIHU2NCBzaXplKQotewotCXVuc2lnbmVkIGxvbmcgaTsKLQotCWZvciAoaSA9IDA7IGkgPCByZ24tPmNudDsgaSsrKSB7Ci0JCXU2NCByZ25iYXNlID0gcmduLT5yZWdpb25baV0uYmFzZTsKLQkJdTY0IHJnbnNpemUgPSByZ24tPnJlZ2lvbltpXS5zaXplOwotCQlpZiAobG1iX2FkZHJzX292ZXJsYXAoYmFzZSwgc2l6ZSwgcmduYmFzZSwgcmduc2l6ZSkpCi0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gKGkgPCByZ24tPmNudCkgPyBpIDogLTE7Ci19Ci0KLXN0YXRpYyB1NjQgbG1iX2FsaWduX2Rvd24odTY0IGFkZHIsIHU2NCBzaXplKQotewotCXJldHVybiBhZGRyICYgfihzaXplIC0gMSk7Ci19Ci0KLXN0YXRpYyB1NjQgbG1iX2FsaWduX3VwKHU2NCBhZGRyLCB1NjQgc2l6ZSkKLXsKLQlyZXR1cm4gKGFkZHIgKyAoc2l6ZSAtIDEpKSAmIH4oc2l6ZSAtIDEpOwotfQotCi1zdGF0aWMgdTY0IF9faW5pdCBsbWJfYWxsb2NfbmlkX3VucmVzZXJ2ZWQodTY0IHN0YXJ0LCB1NjQgZW5kLAotCQkJCQkgICB1NjQgc2l6ZSwgdTY0IGFsaWduKQotewotCXU2NCBiYXNlLCByZXNfYmFzZTsKLQlsb25nIGo7Ci0KLQliYXNlID0gbG1iX2FsaWduX2Rvd24oKGVuZCAtIHNpemUpLCBhbGlnbik7Ci0Jd2hpbGUgKHN0YXJ0IDw9IGJhc2UpIHsKLQkJaiA9IGxtYl9vdmVybGFwc19yZWdpb24oJmxtYi5yZXNlcnZlZCwgYmFzZSwgc2l6ZSk7Ci0JCWlmIChqIDwgMCkgewotCQkJLyogdGhpcyBhcmVhIGlzbid0IHJlc2VydmVkLCB0YWtlIGl0ICovCi0JCQlpZiAobG1iX2FkZF9yZWdpb24oJmxtYi5yZXNlcnZlZCwgYmFzZSwgc2l6ZSkgPCAwKQotCQkJCWJhc2UgPSB+KHU2NCkwOwotCQkJcmV0dXJuIGJhc2U7Ci0JCX0KLQkJcmVzX2Jhc2UgPSBsbWIucmVzZXJ2ZWQucmVnaW9uW2pdLmJhc2U7Ci0JCWlmIChyZXNfYmFzZSA8IHNpemUpCi0JCQlicmVhazsKLQkJYmFzZSA9IGxtYl9hbGlnbl9kb3duKHJlc19iYXNlIC0gc2l6ZSwgYWxpZ24pOwotCX0KLQotCXJldHVybiB+KHU2NCkwOwotfQotCi1zdGF0aWMgdTY0IF9faW5pdCBsbWJfYWxsb2NfbmlkX3JlZ2lvbihzdHJ1Y3QgbG1iX3Byb3BlcnR5ICptcCwKLQkJCQkgICAgICAgdTY0ICgqbmlkX3JhbmdlKSh1NjQsIHU2NCwgaW50ICopLAotCQkJCSAgICAgICB1NjQgc2l6ZSwgdTY0IGFsaWduLCBpbnQgbmlkKQotewotCXU2NCBzdGFydCwgZW5kOwotCi0Jc3RhcnQgPSBtcC0+YmFzZTsKLQllbmQgPSBzdGFydCArIG1wLT5zaXplOwotCi0Jc3RhcnQgPSBsbWJfYWxpZ25fdXAoc3RhcnQsIGFsaWduKTsKLQl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKLQkJdTY0IHRoaXNfZW5kOwotCQlpbnQgdGhpc19uaWQ7Ci0KLQkJdGhpc19lbmQgPSBuaWRfcmFuZ2Uoc3RhcnQsIGVuZCwgJnRoaXNfbmlkKTsKLQkJaWYgKHRoaXNfbmlkID09IG5pZCkgewotCQkJdTY0IHJldCA9IGxtYl9hbGxvY19uaWRfdW5yZXNlcnZlZChzdGFydCwgdGhpc19lbmQsCi0JCQkJCQkJICAgc2l6ZSwgYWxpZ24pOwotCQkJaWYgKHJldCAhPSB+KHU2NCkwKQotCQkJCXJldHVybiByZXQ7Ci0JCX0KLQkJc3RhcnQgPSB0aGlzX2VuZDsKLQl9Ci0KLQlyZXR1cm4gfih1NjQpMDsKLX0KLQotdTY0IF9faW5pdCBsbWJfYWxsb2NfbmlkKHU2NCBzaXplLCB1NjQgYWxpZ24sIGludCBuaWQsCi0JCQkgdTY0ICgqbmlkX3JhbmdlKSh1NjQgc3RhcnQsIHU2NCBlbmQsIGludCAqbmlkKSkKLXsKLQlzdHJ1Y3QgbG1iX3JlZ2lvbiAqbWVtID0gJmxtYi5tZW1vcnk7Ci0JaW50IGk7Ci0KLQlCVUdfT04oMCA9PSBzaXplKTsKLQotCXNpemUgPSBsbWJfYWxpZ25fdXAoc2l6ZSwgYWxpZ24pOwotCi0JZm9yIChpID0gMDsgaSA8IG1lbS0+Y250OyBpKyspIHsKLQkJdTY0IHJldCA9IGxtYl9hbGxvY19uaWRfcmVnaW9uKCZtZW0tPnJlZ2lvbltpXSwKLQkJCQkJICAgICAgIG5pZF9yYW5nZSwKLQkJCQkJICAgICAgIHNpemUsIGFsaWduLCBuaWQpOwotCQlpZiAocmV0ICE9IH4odTY0KTApCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiBsbWJfYWxsb2Moc2l6ZSwgYWxpZ24pOwotfQotCi11NjQgX19pbml0IGxtYl9hbGxvYyh1NjQgc2l6ZSwgdTY0IGFsaWduKQotewotCXJldHVybiBsbWJfYWxsb2NfYmFzZShzaXplLCBhbGlnbiwgTE1CX0FMTE9DX0FOWVdIRVJFKTsKLX0KLQotdTY0IF9faW5pdCBsbWJfYWxsb2NfYmFzZSh1NjQgc2l6ZSwgdTY0IGFsaWduLCB1NjQgbWF4X2FkZHIpCi17Ci0JdTY0IGFsbG9jOwotCi0JYWxsb2MgPSBfX2xtYl9hbGxvY19iYXNlKHNpemUsIGFsaWduLCBtYXhfYWRkcik7Ci0KLQlpZiAoYWxsb2MgPT0gMCkKLQkJcGFuaWMoIkVSUk9SOiBGYWlsZWQgdG8gYWxsb2NhdGUgMHglbGx4IGJ5dGVzIGJlbG93IDB4JWxseC5cbiIsCi0JCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHNpemUsICh1bnNpZ25lZCBsb25nIGxvbmcpIG1heF9hZGRyKTsKLQotCXJldHVybiBhbGxvYzsKLX0KLQotdTY0IF9faW5pdCBfX2xtYl9hbGxvY19iYXNlKHU2NCBzaXplLCB1NjQgYWxpZ24sIHU2NCBtYXhfYWRkcikKLXsKLQlsb25nIGksIGo7Ci0JdTY0IGJhc2UgPSAwOwotCXU2NCByZXNfYmFzZTsKLQotCUJVR19PTigwID09IHNpemUpOwotCi0Jc2l6ZSA9IGxtYl9hbGlnbl91cChzaXplLCBhbGlnbik7Ci0KLQkvKiBPbiBzb21lIHBsYXRmb3JtcywgbWFrZSBzdXJlIHdlIGFsbG9jYXRlIGxvd21lbSAqLwotCS8qIE5vdGUgdGhhdCBMTUJfUkVBTF9MSU1JVCBtYXkgYmUgTE1CX0FMTE9DX0FOWVdIRVJFICovCi0JaWYgKG1heF9hZGRyID09IExNQl9BTExPQ19BTllXSEVSRSkKLQkJbWF4X2FkZHIgPSBMTUJfUkVBTF9MSU1JVDsKLQotCWZvciAoaSA9IGxtYi5tZW1vcnkuY250IC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJdTY0IGxtYmJhc2UgPSBsbWIubWVtb3J5LnJlZ2lvbltpXS5iYXNlOwotCQl1NjQgbG1ic2l6ZSA9IGxtYi5tZW1vcnkucmVnaW9uW2ldLnNpemU7Ci0KLQkJaWYgKGxtYnNpemUgPCBzaXplKQotCQkJY29udGludWU7Ci0JCWlmIChtYXhfYWRkciA9PSBMTUJfQUxMT0NfQU5ZV0hFUkUpCi0JCQliYXNlID0gbG1iX2FsaWduX2Rvd24obG1iYmFzZSArIGxtYnNpemUgLSBzaXplLCBhbGlnbik7Ci0JCWVsc2UgaWYgKGxtYmJhc2UgPCBtYXhfYWRkcikgewotCQkJYmFzZSA9IG1pbihsbWJiYXNlICsgbG1ic2l6ZSwgbWF4X2FkZHIpOwotCQkJYmFzZSA9IGxtYl9hbGlnbl9kb3duKGJhc2UgLSBzaXplLCBhbGlnbik7Ci0JCX0gZWxzZQotCQkJY29udGludWU7Ci0KLQkJd2hpbGUgKGJhc2UgJiYgbG1iYmFzZSA8PSBiYXNlKSB7Ci0JCQlqID0gbG1iX292ZXJsYXBzX3JlZ2lvbigmbG1iLnJlc2VydmVkLCBiYXNlLCBzaXplKTsKLQkJCWlmIChqIDwgMCkgewotCQkJCS8qIHRoaXMgYXJlYSBpc24ndCByZXNlcnZlZCwgdGFrZSBpdCAqLwotCQkJCWlmIChsbWJfYWRkX3JlZ2lvbigmbG1iLnJlc2VydmVkLCBiYXNlLCBzaXplKSA8IDApCi0JCQkJCXJldHVybiAwOwotCQkJCXJldHVybiBiYXNlOwotCQkJfQotCQkJcmVzX2Jhc2UgPSBsbWIucmVzZXJ2ZWQucmVnaW9uW2pdLmJhc2U7Ci0JCQlpZiAocmVzX2Jhc2UgPCBzaXplKQotCQkJCWJyZWFrOwotCQkJYmFzZSA9IGxtYl9hbGlnbl9kb3duKHJlc19iYXNlIC0gc2l6ZSwgYWxpZ24pOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi0vKiBZb3UgbXVzdCBjYWxsIGxtYl9hbmFseXplKCkgYmVmb3JlIHRoaXMuICovCi11NjQgX19pbml0IGxtYl9waHlzX21lbV9zaXplKHZvaWQpCi17Ci0JcmV0dXJuIGxtYi5tZW1vcnkuc2l6ZTsKLX0KLQotdTY0IGxtYl9lbmRfb2ZfRFJBTSh2b2lkKQotewotCWludCBpZHggPSBsbWIubWVtb3J5LmNudCAtIDE7Ci0KLQlyZXR1cm4gKGxtYi5tZW1vcnkucmVnaW9uW2lkeF0uYmFzZSArIGxtYi5tZW1vcnkucmVnaW9uW2lkeF0uc2l6ZSk7Ci19Ci0KLS8qIFlvdSBtdXN0IGNhbGwgbG1iX2FuYWx5emUoKSBhZnRlciB0aGlzLiAqLwotdm9pZCBfX2luaXQgbG1iX2VuZm9yY2VfbWVtb3J5X2xpbWl0KHU2NCBtZW1vcnlfbGltaXQpCi17Ci0JdW5zaWduZWQgbG9uZyBpOwotCXU2NCBsaW1pdDsKLQlzdHJ1Y3QgbG1iX3Byb3BlcnR5ICpwOwotCi0JaWYgKCFtZW1vcnlfbGltaXQpCi0JCXJldHVybjsKLQotCS8qIFRydW5jYXRlIHRoZSBsbWIgcmVnaW9ucyB0byBzYXRpc2Z5IHRoZSBtZW1vcnkgbGltaXQuICovCi0JbGltaXQgPSBtZW1vcnlfbGltaXQ7Ci0JZm9yIChpID0gMDsgaSA8IGxtYi5tZW1vcnkuY250OyBpKyspIHsKLQkJaWYgKGxpbWl0ID4gbG1iLm1lbW9yeS5yZWdpb25baV0uc2l6ZSkgewotCQkJbGltaXQgLT0gbG1iLm1lbW9yeS5yZWdpb25baV0uc2l6ZTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJbG1iLm1lbW9yeS5yZWdpb25baV0uc2l6ZSA9IGxpbWl0OwotCQlsbWIubWVtb3J5LmNudCA9IGkgKyAxOwotCQlicmVhazsKLQl9Ci0KLQlpZiAobG1iLm1lbW9yeS5yZWdpb25bMF0uc2l6ZSA8IGxtYi5ybW9fc2l6ZSkKLQkJbG1iLnJtb19zaXplID0gbG1iLm1lbW9yeS5yZWdpb25bMF0uc2l6ZTsKLQotCW1lbW9yeV9saW1pdCA9IGxtYl9lbmRfb2ZfRFJBTSgpOwotCi0JLyogQW5kIHRydW5jYXRlIGFueSByZXNlcnZlcyBhYm92ZSB0aGUgbGltaXQgYWxzby4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgbG1iLnJlc2VydmVkLmNudDsgaSsrKSB7Ci0JCXAgPSAmbG1iLnJlc2VydmVkLnJlZ2lvbltpXTsKLQotCQlpZiAocC0+YmFzZSA+IG1lbW9yeV9saW1pdCkKLQkJCXAtPnNpemUgPSAwOwotCQllbHNlIGlmICgocC0+YmFzZSArIHAtPnNpemUpID4gbWVtb3J5X2xpbWl0KQotCQkJcC0+c2l6ZSA9IG1lbW9yeV9saW1pdCAtIHAtPmJhc2U7Ci0KLQkJaWYgKHAtPnNpemUgPT0gMCkgewotCQkJbG1iX3JlbW92ZV9yZWdpb24oJmxtYi5yZXNlcnZlZCwgaSk7Ci0JCQlpLS07Ci0JCX0KLQl9Ci19Ci0KLWludCBfX2luaXQgbG1iX2lzX3Jlc2VydmVkKHU2NCBhZGRyKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGxtYi5yZXNlcnZlZC5jbnQ7IGkrKykgewotCQl1NjQgdXBwZXIgPSBsbWIucmVzZXJ2ZWQucmVnaW9uW2ldLmJhc2UgKwotCQkJbG1iLnJlc2VydmVkLnJlZ2lvbltpXS5zaXplIC0gMTsKLQkJaWYgKChhZGRyID49IGxtYi5yZXNlcnZlZC5yZWdpb25baV0uYmFzZSkgJiYgKGFkZHIgPD0gdXBwZXIpKQotCQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQgbG1iX2lzX3JlZ2lvbl9yZXNlcnZlZCh1NjQgYmFzZSwgdTY0IHNpemUpCi17Ci0JcmV0dXJuIGxtYl9vdmVybGFwc19yZWdpb24oJmxtYi5yZXNlcnZlZCwgYmFzZSwgc2l6ZSk7Ci19Ci0KLS8qCi0gKiBHaXZlbiBhIDxiYXNlLCBsZW4+LCBmaW5kIHdoaWNoIG1lbW9yeSByZWdpb25zIGJlbG9uZyB0byB0aGlzIHJhbmdlLgotICogQWRqdXN0IHRoZSByZXF1ZXN0IGFuZCByZXR1cm4gYSBjb250aWd1b3VzIGNodW5rLgotICovCi1pbnQgbG1iX2ZpbmQoc3RydWN0IGxtYl9wcm9wZXJ0eSAqcmVzKQotewotCWludCBpOwotCXU2NCByc3RhcnQsIHJlbmQ7Ci0KLQlyc3RhcnQgPSByZXMtPmJhc2U7Ci0JcmVuZCA9IHJzdGFydCArIHJlcy0+c2l6ZSAtIDE7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbG1iLm1lbW9yeS5jbnQ7IGkrKykgewotCQl1NjQgc3RhcnQgPSBsbWIubWVtb3J5LnJlZ2lvbltpXS5iYXNlOwotCQl1NjQgZW5kID0gc3RhcnQgKyBsbWIubWVtb3J5LnJlZ2lvbltpXS5zaXplIC0gMTsKLQotCQlpZiAoc3RhcnQgPiByZW5kKQotCQkJcmV0dXJuIC0xOwotCi0JCWlmICgoZW5kID49IHJzdGFydCkgJiYgKHN0YXJ0IDwgcmVuZCkpIHsKLQkJCS8qIGFkanVzdCB0aGUgcmVxdWVzdCAqLwotCQkJaWYgKHJzdGFydCA8IHN0YXJ0KQotCQkJCXJzdGFydCA9IHN0YXJ0OwotCQkJaWYgKHJlbmQgPiBlbmQpCi0JCQkJcmVuZCA9IGVuZDsKLQkJCXJlcy0+YmFzZSA9IHJzdGFydDsKLQkJCXJlcy0+c2l6ZSA9IHJlbmQgLSByc3RhcnQgKyAxOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0JcmV0dXJuIC0xOwotfQpkaWZmIC0tZ2l0IGEvbGliL3JhbmRvbTMyLmMgYi9saWIvcmFuZG9tMzIuYwppbmRleCA4NzBkYzNmLi5mYzM1NDVhIDEwMDY0NAotLS0gYS9saWIvcmFuZG9tMzIuYworKysgYi9saWIvcmFuZG9tMzIuYwpAQCAtMTI3LDcgKzEyNyw3IEBACiAKIC8qCiAgKglHZW5lcmF0ZSBiZXR0ZXIgdmFsdWVzIGFmdGVyIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCi0gKglpcyBmdWxseSBpbml0YWxpemVkLgorICoJaXMgZnVsbHkgaW5pdGlhbGl6ZWQuCiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IHJhbmRvbTMyX3Jlc2VlZCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvbGliL3N3aW90bGIuYyBiL2xpYi9zd2lvdGxiLmMKaW5kZXggYTAwOTA1NS4uMzRlMzA4MiAxMDA2NDQKLS0tIGEvbGliL3N3aW90bGIuYworKysgYi9saWIvc3dpb3RsYi5jCkBAIC01MCwxOSArNTAsMTEgQEAKICAqLwogI2RlZmluZSBJT19UTEJfTUlOX1NMQUJTICgoMTw8MjApID4+IElPX1RMQl9TSElGVCkKIAotLyoKLSAqIEVudW1lcmF0aW9uIGZvciBzeW5jIHRhcmdldHMKLSAqLwotZW51bSBkbWFfc3luY190YXJnZXQgewotCVNZTkNfRk9SX0NQVSA9IDAsCi0JU1lOQ19GT1JfREVWSUNFID0gMSwKLX07Ci0KIGludCBzd2lvdGxiX2ZvcmNlOwogCiAvKgotICogVXNlZCB0byBkbyBhIHF1aWNrIHJhbmdlIGNoZWNrIGluIHVubWFwX3NpbmdsZSBhbmQKLSAqIHN5bmNfc2luZ2xlXyosIHRvIHNlZSBpZiB0aGUgbWVtb3J5IHdhcyBpbiBmYWN0IGFsbG9jYXRlZCBieSB0aGlzCisgKiBVc2VkIHRvIGRvIGEgcXVpY2sgcmFuZ2UgY2hlY2sgaW4gc3dpb3RsYl90YmxfdW5tYXBfc2luZ2xlIGFuZAorICogc3dpb3RsYl90Ymxfc3luY19zaW5nbGVfKiwgdG8gc2VlIGlmIHRoZSBtZW1vcnkgd2FzIGluIGZhY3QgYWxsb2NhdGVkIGJ5IHRoaXMKICAqIEFQSS4KICAqLwogc3RhdGljIGNoYXIgKmlvX3RsYl9zdGFydCwgKmlvX3RsYl9lbmQ7CkBAIC0xNDAsMjggKzEzMiwxNCBAQAogCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBlbmQpOwogfQogCi0vKgotICogU3RhdGljYWxseSByZXNlcnZlIGJvdW5jZSBidWZmZXIgc3BhY2UgYW5kIGluaXRpYWxpemUgYm91bmNlIGJ1ZmZlciBkYXRhCi0gKiBzdHJ1Y3R1cmVzIGZvciB0aGUgc29mdHdhcmUgSU8gVExCIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBETUEgQVBJLgotICovCi12b2lkIF9faW5pdAotc3dpb3RsYl9pbml0X3dpdGhfZGVmYXVsdF9zaXplKHNpemVfdCBkZWZhdWx0X3NpemUsIGludCB2ZXJib3NlKQordm9pZCBfX2luaXQgc3dpb3RsYl9pbml0X3dpdGhfdGJsKGNoYXIgKnRsYiwgdW5zaWduZWQgbG9uZyBuc2xhYnMsIGludCB2ZXJib3NlKQogewogCXVuc2lnbmVkIGxvbmcgaSwgYnl0ZXM7CiAKLQlpZiAoIWlvX3RsYl9uc2xhYnMpIHsKLQkJaW9fdGxiX25zbGFicyA9IChkZWZhdWx0X3NpemUgPj4gSU9fVExCX1NISUZUKTsKLQkJaW9fdGxiX25zbGFicyA9IEFMSUdOKGlvX3RsYl9uc2xhYnMsIElPX1RMQl9TRUdTSVpFKTsKLQl9CisJYnl0ZXMgPSBuc2xhYnMgPDwgSU9fVExCX1NISUZUOwogCi0JYnl0ZXMgPSBpb190bGJfbnNsYWJzIDw8IElPX1RMQl9TSElGVDsKLQotCS8qCi0JICogR2V0IElPIFRMQiBtZW1vcnkgZnJvbSB0aGUgbG93IHBhZ2VzCi0JICovCi0JaW9fdGxiX3N0YXJ0ID0gYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMoYnl0ZXMpOwotCWlmICghaW9fdGxiX3N0YXJ0KQotCQlwYW5pYygiQ2Fubm90IGFsbG9jYXRlIFNXSU9UTEIgYnVmZmVyIik7CisJaW9fdGxiX25zbGFicyA9IG5zbGFiczsKKwlpb190bGJfc3RhcnQgPSB0bGI7CiAJaW9fdGxiX2VuZCA9IGlvX3RsYl9zdGFydCArIGJ5dGVzOwogCiAJLyoKQEAgLTE4NSw2ICsxNjMsMzIgQEAKIAkJc3dpb3RsYl9wcmludF9pbmZvKCk7CiB9CiAKKy8qCisgKiBTdGF0aWNhbGx5IHJlc2VydmUgYm91bmNlIGJ1ZmZlciBzcGFjZSBhbmQgaW5pdGlhbGl6ZSBib3VuY2UgYnVmZmVyIGRhdGEKKyAqIHN0cnVjdHVyZXMgZm9yIHRoZSBzb2Z0d2FyZSBJTyBUTEIgdXNlZCB0byBpbXBsZW1lbnQgdGhlIERNQSBBUEkuCisgKi8KK3ZvaWQgX19pbml0Citzd2lvdGxiX2luaXRfd2l0aF9kZWZhdWx0X3NpemUoc2l6ZV90IGRlZmF1bHRfc2l6ZSwgaW50IHZlcmJvc2UpCit7CisJdW5zaWduZWQgbG9uZyBieXRlczsKKworCWlmICghaW9fdGxiX25zbGFicykgeworCQlpb190bGJfbnNsYWJzID0gKGRlZmF1bHRfc2l6ZSA+PiBJT19UTEJfU0hJRlQpOworCQlpb190bGJfbnNsYWJzID0gQUxJR04oaW9fdGxiX25zbGFicywgSU9fVExCX1NFR1NJWkUpOworCX0KKworCWJ5dGVzID0gaW9fdGxiX25zbGFicyA8PCBJT19UTEJfU0hJRlQ7CisKKwkvKgorCSAqIEdldCBJTyBUTEIgbWVtb3J5IGZyb20gdGhlIGxvdyBwYWdlcworCSAqLworCWlvX3RsYl9zdGFydCA9IGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKGJ5dGVzKTsKKwlpZiAoIWlvX3RsYl9zdGFydCkKKwkJcGFuaWMoIkNhbm5vdCBhbGxvY2F0ZSBTV0lPVExCIGJ1ZmZlciIpOworCisJc3dpb3RsYl9pbml0X3dpdGhfdGJsKGlvX3RsYl9zdGFydCwgaW9fdGxiX25zbGFicywgdmVyYm9zZSk7Cit9CisKIHZvaWQgX19pbml0CiBzd2lvdGxiX2luaXQoaW50IHZlcmJvc2UpCiB7CkBAIC0zMjMsOCArMzI3LDggQEAKIC8qCiAgKiBCb3VuY2U6IGNvcHkgdGhlIHN3aW90bGIgYnVmZmVyIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGRtYSBsb2NhdGlvbgogICovCi1zdGF0aWMgdm9pZCBzd2lvdGxiX2JvdW5jZShwaHlzX2FkZHJfdCBwaHlzLCBjaGFyICpkbWFfYWRkciwgc2l6ZV90IHNpemUsCi0JCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit2b2lkIHN3aW90bGJfYm91bmNlKHBoeXNfYWRkcl90IHBoeXMsIGNoYXIgKmRtYV9hZGRyLCBzaXplX3Qgc2l6ZSwKKwkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAl1bnNpZ25lZCBsb25nIHBmbiA9IFBGTl9ET1dOKHBoeXMpOwogCkBAIC0zNjAsMjYgKzM2NCwyNSBAQAogCQkJbWVtY3B5KHBoeXNfdG9fdmlydChwaHlzKSwgZG1hX2FkZHIsIHNpemUpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHN3aW90bGJfYm91bmNlKTsKIAotLyoKLSAqIEFsbG9jYXRlcyBib3VuY2UgYnVmZmVyIGFuZCByZXR1cm5zIGl0cyBrZXJuZWwgdmlydHVhbCBhZGRyZXNzLgotICovCi1zdGF0aWMgdm9pZCAqCi1tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSwgaW50IGRpcikKK3ZvaWQgKnN3aW90bGJfdGJsX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgdGJsX2RtYV9hZGRyLAorCQkJICAgICBwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJY2hhciAqZG1hX2FkZHI7CiAJdW5zaWduZWQgaW50IG5zbG90cywgc3RyaWRlLCBpbmRleCwgd3JhcDsKIAlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0X2RtYV9hZGRyOwogCXVuc2lnbmVkIGxvbmcgbWFzazsKIAl1bnNpZ25lZCBsb25nIG9mZnNldF9zbG90czsKIAl1bnNpZ25lZCBsb25nIG1heF9zbG90czsKIAogCW1hc2sgPSBkbWFfZ2V0X3NlZ19ib3VuZGFyeShod2Rldik7Ci0Jc3RhcnRfZG1hX2FkZHIgPSBzd2lvdGxiX3ZpcnRfdG9fYnVzKGh3ZGV2LCBpb190bGJfc3RhcnQpICYgbWFzazsKIAotCW9mZnNldF9zbG90cyA9IEFMSUdOKHN0YXJ0X2RtYV9hZGRyLCAxIDw8IElPX1RMQl9TSElGVCkgPj4gSU9fVExCX1NISUZUOworCXRibF9kbWFfYWRkciAmPSBtYXNrOworCisJb2Zmc2V0X3Nsb3RzID0gQUxJR04odGJsX2RtYV9hZGRyLCAxIDw8IElPX1RMQl9TSElGVCkgPj4gSU9fVExCX1NISUZUOwogCiAJLyoKICAJICogQ2FyZWZ1bGx5IGhhbmRsZSBpbnRlZ2VyIG92ZXJmbG93IHdoaWNoIGNhbiBvY2N1ciB3aGVuIG1hc2sgPT0gfjBVTC4KQEAgLTQ2NiwxMiArNDY5LDI3IEBACiAKIAlyZXR1cm4gZG1hX2FkZHI7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzd2lvdGxiX3RibF9tYXBfc2luZ2xlKTsKKworLyoKKyAqIEFsbG9jYXRlcyBib3VuY2UgYnVmZmVyIGFuZCByZXR1cm5zIGl0cyBrZXJuZWwgdmlydHVhbCBhZGRyZXNzLgorICovCisKK3N0YXRpYyB2b2lkICoKK21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqaHdkZXYsIHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplLAorCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlkbWFfYWRkcl90IHN0YXJ0X2RtYV9hZGRyID0gc3dpb3RsYl92aXJ0X3RvX2J1cyhod2RldiwgaW9fdGxiX3N0YXJ0KTsKKworCXJldHVybiBzd2lvdGxiX3RibF9tYXBfc2luZ2xlKGh3ZGV2LCBzdGFydF9kbWFfYWRkciwgcGh5cywgc2l6ZSwgZGlyKTsKK30KIAogLyoKICAqIGRtYV9hZGRyIGlzIHRoZSBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBib3VuY2UgYnVmZmVyIHRvIHVubWFwLgogICovCi1zdGF0aWMgdm9pZAotZG9fdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBjaGFyICpkbWFfYWRkciwgc2l6ZV90IHNpemUsIGludCBkaXIpCit2b2lkCitzd2lvdGxiX3RibF91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqaHdkZXYsIGNoYXIgKmRtYV9hZGRyLCBzaXplX3Qgc2l6ZSwKKwkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpLCBjb3VudCwgbnNsb3RzID0gQUxJR04oc2l6ZSwgMSA8PCBJT19UTEJfU0hJRlQpID4+IElPX1RMQl9TSElGVDsKQEAgLTUwOSwxMCArNTI3LDEyIEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvX3RsYl9sb2NrLCBmbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzd2lvdGxiX3RibF91bm1hcF9zaW5nbGUpOwogCi1zdGF0aWMgdm9pZAotc3luY19zaW5nbGUoc3RydWN0IGRldmljZSAqaHdkZXYsIGNoYXIgKmRtYV9hZGRyLCBzaXplX3Qgc2l6ZSwKLQkgICAgaW50IGRpciwgaW50IHRhcmdldCkKK3ZvaWQKK3N3aW90bGJfdGJsX3N5bmNfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBjaGFyICpkbWFfYWRkciwgc2l6ZV90IHNpemUsCisJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQllbnVtIGRtYV9zeW5jX3RhcmdldCB0YXJnZXQpCiB7CiAJaW50IGluZGV4ID0gKGRtYV9hZGRyIC0gaW9fdGxiX3N0YXJ0KSA+PiBJT19UTEJfU0hJRlQ7CiAJcGh5c19hZGRyX3QgcGh5cyA9IGlvX3RsYl9vcmlnX2FkZHJbaW5kZXhdOwpAQCAtNTM2LDYgKzU1Niw3IEBACiAJCUJVRygpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHN3aW90bGJfdGJsX3N5bmNfc2luZ2xlKTsKIAogdm9pZCAqCiBzd2lvdGxiX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwKQEAgLTU1OSw4ICs1ODAsOCBAQAogCX0KIAlpZiAoIXJldCkgewogCQkvKgotCQkgKiBXZSBhcmUgZWl0aGVyIG91dCBvZiBtZW1vcnkgb3IgdGhlIGRldmljZSBjYW4ndCBETUEKLQkJICogdG8gR0ZQX0RNQSBtZW1vcnk7IGZhbGwgYmFjayBvbiBtYXBfc2luZ2xlKCksIHdoaWNoCisJCSAqIFdlIGFyZSBlaXRoZXIgb3V0IG9mIG1lbW9yeSBvciB0aGUgZGV2aWNlIGNhbid0IERNQSB0bworCQkgKiBHRlBfRE1BIG1lbW9yeTsgZmFsbCBiYWNrIG9uIG1hcF9zaW5nbGUoKSwgd2hpY2gKIAkJICogd2lsbCBncmFiIG1lbW9yeSBmcm9tIHRoZSBsb3dlc3QgYXZhaWxhYmxlIGFkZHJlc3MgcmFuZ2UuCiAJCSAqLwogCQlyZXQgPSBtYXBfc2luZ2xlKGh3ZGV2LCAwLCBzaXplLCBETUFfRlJPTV9ERVZJQ0UpOwpAQCAtNTc4LDcgKzU5OSw3IEBACiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWRldl9hZGRyKTsKIAogCQkvKiBETUFfVE9fREVWSUNFIHRvIGF2b2lkIG1lbWNweSBpbiB1bm1hcF9zaW5nbGUgKi8KLQkJZG9fdW5tYXBfc2luZ2xlKGh3ZGV2LCByZXQsIHNpemUsIERNQV9UT19ERVZJQ0UpOworCQlzd2lvdGxiX3RibF91bm1hcF9zaW5nbGUoaHdkZXYsIHJldCwgc2l6ZSwgRE1BX1RPX0RFVklDRSk7CiAJCXJldHVybiBOVUxMOwogCX0KIAkqZG1hX2hhbmRsZSA9IGRldl9hZGRyOwpAQCAtNTk2LDEzICs2MTcsMTQgQEAKIAlpZiAoIWlzX3N3aW90bGJfYnVmZmVyKHBhZGRyKSkKIAkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl2YWRkciwgZ2V0X29yZGVyKHNpemUpKTsKIAllbHNlCi0JCS8qIERNQV9UT19ERVZJQ0UgdG8gYXZvaWQgbWVtY3B5IGluIHVubWFwX3NpbmdsZSAqLwotCQlkb191bm1hcF9zaW5nbGUoaHdkZXYsIHZhZGRyLCBzaXplLCBETUFfVE9fREVWSUNFKTsKKwkJLyogRE1BX1RPX0RFVklDRSB0byBhdm9pZCBtZW1jcHkgaW4gc3dpb3RsYl90YmxfdW5tYXBfc2luZ2xlICovCisJCXN3aW90bGJfdGJsX3VubWFwX3NpbmdsZShod2RldiwgdmFkZHIsIHNpemUsIERNQV9UT19ERVZJQ0UpOwogfQogRVhQT1JUX1NZTUJPTChzd2lvdGxiX2ZyZWVfY29oZXJlbnQpOwogCiBzdGF0aWMgdm9pZAotc3dpb3RsYl9mdWxsKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGludCBkaXIsIGludCBkb19wYW5pYykKK3N3aW90bGJfZnVsbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJICAgICBpbnQgZG9fcGFuaWMpCiB7CiAJLyoKIAkgKiBSYW4gb3V0IG9mIElPTU1VIHNwYWNlIGZvciB0aGlzIG9wZXJhdGlvbi4gVGhpcyBpcyB2ZXJ5IGJhZC4KQEAgLTY4MCwxNCArNzAyLDE0IEBACiAgKiB3aGF0ZXZlciB0aGUgZGV2aWNlIHdyb3RlIHRoZXJlLgogICovCiBzdGF0aWMgdm9pZCB1bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsCi0JCQkgc2l6ZV90IHNpemUsIGludCBkaXIpCisJCQkgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAlwaHlzX2FkZHJfdCBwYWRkciA9IGRtYV90b19waHlzKGh3ZGV2LCBkZXZfYWRkcik7CiAKIAlCVUdfT04oZGlyID09IERNQV9OT05FKTsKIAogCWlmIChpc19zd2lvdGxiX2J1ZmZlcihwYWRkcikpIHsKLQkJZG9fdW5tYXBfc2luZ2xlKGh3ZGV2LCBwaHlzX3RvX3ZpcnQocGFkZHIpLCBzaXplLCBkaXIpOworCQlzd2lvdGxiX3RibF91bm1hcF9zaW5nbGUoaHdkZXYsIHBoeXNfdG9fdmlydChwYWRkciksIHNpemUsIGRpcik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTcyMywxNCArNzQ1LDE2IEBACiAgKi8KIHN0YXRpYyB2b2lkCiBzd2lvdGxiX3N5bmNfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRldl9hZGRyLAotCQkgICAgc2l6ZV90IHNpemUsIGludCBkaXIsIGludCB0YXJnZXQpCisJCSAgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkgICAgZW51bSBkbWFfc3luY190YXJnZXQgdGFyZ2V0KQogewogCXBoeXNfYWRkcl90IHBhZGRyID0gZG1hX3RvX3BoeXMoaHdkZXYsIGRldl9hZGRyKTsKIAogCUJVR19PTihkaXIgPT0gRE1BX05PTkUpOwogCiAJaWYgKGlzX3N3aW90bGJfYnVmZmVyKHBhZGRyKSkgewotCQlzeW5jX3NpbmdsZShod2RldiwgcGh5c190b192aXJ0KHBhZGRyKSwgc2l6ZSwgZGlyLCB0YXJnZXQpOworCQlzd2lvdGxiX3RibF9zeW5jX3NpbmdsZShod2RldiwgcGh5c190b192aXJ0KHBhZGRyKSwgc2l6ZSwgZGlyLAorCQkJCSAgICAgICB0YXJnZXQpOwogCQlyZXR1cm47CiAJfQogCkBAIC04MDksNyArODMzLDcgQEAKIAogaW50CiBzd2lvdGxiX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsIGludCBuZWxlbXMsCi0JICAgICAgIGludCBkaXIpCisJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAlyZXR1cm4gc3dpb3RsYl9tYXBfc2dfYXR0cnMoaHdkZXYsIHNnbCwgbmVsZW1zLCBkaXIsIE5VTEwpOwogfQpAQCAtODM2LDcgKzg2MCw3IEBACiAKIHZvaWQKIHN3aW90bGJfdW5tYXBfc2coc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCBpbnQgbmVsZW1zLAotCQkgaW50IGRpcikKKwkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAlyZXR1cm4gc3dpb3RsYl91bm1hcF9zZ19hdHRycyhod2Rldiwgc2dsLCBuZWxlbXMsIGRpciwgTlVMTCk7CiB9CkBAIC04NTEsNyArODc1LDggQEAKICAqLwogc3RhdGljIHZvaWQKIHN3aW90bGJfc3luY19zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCi0JCWludCBuZWxlbXMsIGludCBkaXIsIGludCB0YXJnZXQpCisJCWludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJZW51bSBkbWFfc3luY190YXJnZXQgdGFyZ2V0KQogewogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9saWIvdnNwcmludGYuYyBiL2xpYi92c3ByaW50Zi5jCmluZGV4IGI4YTJmNTQuLjRlZTE5ZDAgMTAwNjQ0Ci0tLSBhL2xpYi92c3ByaW50Zi5jCisrKyBiL2xpYi92c3ByaW50Zi5jCkBAIC05ODAsNiArOTgwLDExIEBACiAgKiAgICAgICAgICAgICBbMF1bMV1bMl1bM10tWzRdWzVdLVs2XVs3XS1bOF1bOV0tWzEwXVsxMV1bMTJdWzEzXVsxNF1bMTVdCiAgKiAgICAgICAgICAgbGl0dGxlIGVuZGlhbiBvdXRwdXQgYnl0ZSBvcmRlciBpczoKICAqICAgICAgICAgICAgIFszXVsyXVsxXVswXS1bNV1bNF0tWzddWzZdLVs4XVs5XS1bMTBdWzExXVsxMl1bMTNdWzE0XVsxNV0KKyAqIC0gJ1YnIEZvciBhIHN0cnVjdCB2YV9mb3JtYXQgd2hpY2ggY29udGFpbnMgYSBmb3JtYXQgc3RyaW5nICogYW5kIHZhX2xpc3QgKiwKKyAqICAgICAgIGNhbGwgdnNucHJpbnRmKC0+Zm9ybWF0LCAqLT52YV9saXN0KS4KKyAqICAgICAgIEltcGxlbWVudHMgYSAicmVjdXJzaXZlIHZzbnByaW50ZiIuCisgKiAgICAgICBEbyBub3QgdXNlIHRoaXMgZmVhdHVyZSB3aXRob3V0IHNvbWUgbWVjaGFuaXNtIHRvIHZlcmlmeSB0aGUKKyAqICAgICAgIGNvcnJlY3RuZXNzIG9mIHRoZSBmb3JtYXQgc3RyaW5nIGFuZCB2YV9saXN0IGFyZ3VtZW50cy4KICAqCiAgKiBOb3RlOiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuICdTJyBhbmQgJ0YnIGlzIHRoYXQgb24gaWE2NCBhbmQgcHBjNjQKICAqIGZ1bmN0aW9uIHBvaW50ZXJzIGFyZSByZWFsbHkgZnVuY3Rpb24gZGVzY3JpcHRvcnMsIHdoaWNoIGNvbnRhaW4gYQpAQCAtMTAyNSw2ICsxMDMwLDEwIEBACiAJCWJyZWFrOwogCWNhc2UgJ1UnOgogCQlyZXR1cm4gdXVpZF9zdHJpbmcoYnVmLCBlbmQsIHB0ciwgc3BlYywgZm10KTsKKwljYXNlICdWJzoKKwkJcmV0dXJuIGJ1ZiArIHZzbnByaW50ZihidWYsIGVuZCAtIGJ1ZiwKKwkJCQkgICAgICAgKChzdHJ1Y3QgdmFfZm9ybWF0ICopcHRyKS0+Zm10LAorCQkJCSAgICAgICAqKCgoc3RydWN0IHZhX2Zvcm1hdCAqKXB0ciktPnZhKSk7CiAJfQogCXNwZWMuZmxhZ3MgfD0gU01BTEw7CiAJaWYgKHNwZWMuZmllbGRfd2lkdGggPT0gLTEpIHsKZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnCmluZGV4IDUyNzEzNmIuLmY0ZTUxNmUgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKKysrIGIvbW0vS2NvbmZpZwpAQCAtMTI4LDYgKzEyOCw5IEBACiAJIHBmbl90b19wYWdlIGFuZCBwYWdlX3RvX3BmbiBvcGVyYXRpb25zLiAgVGhpcyBpcyB0aGUgbW9zdAogCSBlZmZpY2llbnQgb3B0aW9uIHdoZW4gc3VmZmljaWVudCBrZXJuZWwgcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUuCiAKK2NvbmZpZyBIQVZFX01FTUJMT0NLCisJYm9vbGVhbgorCiAjIGV2ZW50dWFsbHksIHdlIGNhbiBoYXZlIHRoaXMgb3B0aW9uIGp1c3QgJ3NlbGVjdCBTUEFSU0VNRU0nCiBjb25maWcgTUVNT1JZX0hPVFBMVUcKIAlib29sICJBbGxvdyBmb3IgbWVtb3J5IGhvdC1hZGQiCmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlCmluZGV4IDg5ODI1MDQuLjM0YjI1NDYgMTAwNjQ0Ci0tLSBhL21tL01ha2VmaWxlCisrKyBiL21tL01ha2VmaWxlCkBAIC0xNSw2ICsxNSw4IEBACiAJCQkgICAkKG1tdS15KQogb2JqLXkgKz0gaW5pdC1tbS5vCiAKK29iai0kKENPTkZJR19IQVZFX01FTUJMT0NLKSArPSBtZW1ibG9jay5vCisKIG9iai0kKENPTkZJR19CT1VOQ0UpCSs9IGJvdW5jZS5vCiBvYmotJChDT05GSUdfU1dBUCkJKz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vIHRocmFzaC5vCiBvYmotJChDT05GSUdfSEFTX0RNQSkJKz0gZG1hcG9vbC5vCmRpZmYgLS1naXQgYS9tbS9iYWNraW5nLWRldi5jIGIvbW0vYmFja2luZy1kZXYuYwppbmRleCA2NjBhODdhLi5mOWZkM2RkIDEwMDY0NAotLS0gYS9tbS9iYWNraW5nLWRldi5jCisrKyBiL21tL2JhY2tpbmctZGV2LmMKQEAgLTEwNCwxNSArMTA0LDEzIEBACiAJCSAgICJiX21vcmVfaW86ICAgICAgICAlOGx1XG4iCiAJCSAgICJiZGlfbGlzdDogICAgICAgICAlOHVcbiIKIAkJICAgInN0YXRlOiAgICAgICAgICAgICU4bHhcbiIKLQkJICAgIndiX21hc2s6ICAgICAgICAgICU4bHhcbiIKLQkJICAgIndiX2xpc3Q6ICAgICAgICAgICU4dVxuIgotCQkgICAid2JfY250OiAgICAgICAgICAgJTh1XG4iLAorCQkgICAid2JfbGlzdDogICAgICAgICAgJTh1XG4iLAogCQkgICAodW5zaWduZWQgbG9uZykgSyhiZGlfc3RhdChiZGksIEJESV9XUklURUJBQ0spKSwKIAkJICAgKHVuc2lnbmVkIGxvbmcpIEsoYmRpX3N0YXQoYmRpLCBCRElfUkVDTEFJTUFCTEUpKSwKIAkJICAgSyhiZGlfdGhyZXNoKSwgSyhkaXJ0eV90aHJlc2gpLAogCQkgICBLKGJhY2tncm91bmRfdGhyZXNoKSwgbnJfd2IsIG5yX2RpcnR5LCBucl9pbywgbnJfbW9yZV9pbywKLQkJICAgIWxpc3RfZW1wdHkoJmJkaS0+YmRpX2xpc3QpLCBiZGktPnN0YXRlLCBiZGktPndiX21hc2ssCi0JCSAgICFsaXN0X2VtcHR5KCZiZGktPndiX2xpc3QpLCBiZGktPndiX2NudCk7CisJCSAgICFsaXN0X2VtcHR5KCZiZGktPmJkaV9saXN0KSwgYmRpLT5zdGF0ZSwKKwkJICAgIWxpc3RfZW1wdHkoJmJkaS0+d2JfbGlzdCkpOwogI3VuZGVmIEsKIAogCXJldHVybiAwOwpAQCAtMzQwLDE0ICszMzgsMTMgQEAKIHN0YXRpYyB2b2lkIGJkaV9mbHVzaF9pbyhzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKQogewogCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7Ci0JCS5iZGkJCQk9IGJkaSwKIAkJLnN5bmNfbW9kZQkJPSBXQl9TWU5DX05PTkUsCiAJCS5vbGRlcl90aGFuX3RoaXMJPSBOVUxMLAogCQkucmFuZ2VfY3ljbGljCQk9IDEsCiAJCS5ucl90b193cml0ZQkJPSAxMDI0LAogCX07CiAKLQl3cml0ZWJhY2tfaW5vZGVzX3diYygmd2JjKTsKKwl3cml0ZWJhY2tfaW5vZGVzX3diKCZiZGktPndiLCAmd2JjKTsKIH0KIAogLyoKQEAgLTY2OCwxOSArNjY1LDEyIEBACiAJYmRpLT5tYXhfcmF0aW8gPSAxMDA7CiAJYmRpLT5tYXhfcHJvcF9mcmFjID0gUFJPUF9GUkFDX0JBU0U7CiAJc3Bpbl9sb2NrX2luaXQoJmJkaS0+d2JfbG9jayk7Ci0JSU5JVF9SQ1VfSEVBRCgmYmRpLT5yY3VfaGVhZCk7CiAJSU5JVF9MSVNUX0hFQUQoJmJkaS0+YmRpX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZiZGktPndiX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZiZGktPndvcmtfbGlzdCk7CiAKIAliZGlfd2JfaW5pdCgmYmRpLT53YiwgYmRpKTsKIAotCS8qCi0JICogSnVzdCBvbmUgdGhyZWFkIHN1cHBvcnQgZm9yIG5vdywgaGFyZCBjb2RlIG1hc2sgYW5kIGNvdW50Ci0JICovCi0JYmRpLT53Yl9tYXNrID0gMTsKLQliZGktPndiX2NudCA9IDE7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgTlJfQkRJX1NUQVRfSVRFTVM7IGkrKykgewogCQllcnIgPSBwZXJjcHVfY291bnRlcl9pbml0KCZiZGktPmJkaV9zdGF0W2ldLCAwKTsKIAkJaWYgKGVycikKZGlmZiAtLWdpdCBhL21tL2Jvb3RtZW0uYyBiL21tL2Jvb3RtZW0uYwppbmRleCA1OGM2NmNjLi4xNDJjODRhIDEwMDY0NAotLS0gYS9tbS9ib290bWVtLmMKKysrIGIvbW0vYm9vdG1lbS5jCkBAIC04MzMsMTUgKzgzMywyNCBAQAogdm9pZCAqIF9faW5pdCBfX2FsbG9jX2Jvb3RtZW1fbm9kZShwZ19kYXRhX3QgKnBnZGF0LCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJICAgdW5zaWduZWQgbG9uZyBhbGlnbiwgdW5zaWduZWQgbG9uZyBnb2FsKQogeworCXZvaWQgKnB0cjsKKwogCWlmIChXQVJOX09OX09OQ0Uoc2xhYl9pc19hdmFpbGFibGUoKSkpCiAJCXJldHVybiBremFsbG9jX25vZGUoc2l6ZSwgR0ZQX05PV0FJVCwgcGdkYXQtPm5vZGVfaWQpOwogCiAjaWZkZWYgQ09ORklHX05PX0JPT1RNRU0KLQlyZXR1cm4gX19hbGxvY19tZW1vcnlfY29yZV9lYXJseShwZ2RhdC0+bm9kZV9pZCwgc2l6ZSwgYWxpZ24sCisJcHRyID0gX19hbGxvY19tZW1vcnlfY29yZV9lYXJseShwZ2RhdC0+bm9kZV9pZCwgc2l6ZSwgYWxpZ24sCisJCQkJCSBnb2FsLCAtMVVMTCk7CisJaWYgKHB0cikKKwkJcmV0dXJuIHB0cjsKKworCXB0ciA9IF9fYWxsb2NfbWVtb3J5X2NvcmVfZWFybHkoTUFYX05VTU5PREVTLCBzaXplLCBhbGlnbiwKIAkJCQkJIGdvYWwsIC0xVUxMKTsKICNlbHNlCi0JcmV0dXJuIF9fX2FsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdC0+YmRhdGEsIHNpemUsIGFsaWduLCBnb2FsLCAwKTsKKwlwdHIgPSBfX19hbGxvY19ib290bWVtX25vZGUocGdkYXQtPmJkYXRhLCBzaXplLCBhbGlnbiwgZ29hbCwgMCk7CiAjZW5kaWYKKworCXJldHVybiBwdHI7CiB9CiAKIHZvaWQgKiBfX2luaXQgX19hbGxvY19ib290bWVtX25vZGVfaGlnaChwZ19kYXRhX3QgKnBnZGF0LCB1bnNpZ25lZCBsb25nIHNpemUsCkBAIC05NzcsMTQgKzk4NiwyMSBAQAogdm9pZCAqIF9faW5pdCBfX2FsbG9jX2Jvb3RtZW1fbG93X25vZGUocGdfZGF0YV90ICpwZ2RhdCwgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFsaWduLCB1bnNpZ25lZCBsb25nIGdvYWwpCiB7CisJdm9pZCAqcHRyOworCiAJaWYgKFdBUk5fT05fT05DRShzbGFiX2lzX2F2YWlsYWJsZSgpKSkKIAkJcmV0dXJuIGt6YWxsb2Nfbm9kZShzaXplLCBHRlBfTk9XQUlULCBwZ2RhdC0+bm9kZV9pZCk7CiAKICNpZmRlZiBDT05GSUdfTk9fQk9PVE1FTQotCXJldHVybiBfX2FsbG9jX21lbW9yeV9jb3JlX2Vhcmx5KHBnZGF0LT5ub2RlX2lkLCBzaXplLCBhbGlnbiwKKwlwdHIgPSBfX2FsbG9jX21lbW9yeV9jb3JlX2Vhcmx5KHBnZGF0LT5ub2RlX2lkLCBzaXplLCBhbGlnbiwKKwkJCQlnb2FsLCBBUkNIX0xPV19BRERSRVNTX0xJTUlUKTsKKwlpZiAocHRyKQorCQlyZXR1cm4gcHRyOworCXB0ciA9IF9fYWxsb2NfbWVtb3J5X2NvcmVfZWFybHkoTUFYX05VTU5PREVTLCBzaXplLCBhbGlnbiwKIAkJCQlnb2FsLCBBUkNIX0xPV19BRERSRVNTX0xJTUlUKTsKICNlbHNlCi0JcmV0dXJuIF9fX2FsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdC0+YmRhdGEsIHNpemUsIGFsaWduLAorCXB0ciA9IF9fX2FsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdC0+YmRhdGEsIHNpemUsIGFsaWduLAogCQkJCWdvYWwsIEFSQ0hfTE9XX0FERFJFU1NfTElNSVQpOwogI2VuZGlmCisJcmV0dXJuIHB0cjsKIH0KZGlmZiAtLWdpdCBhL21tL2hpZ2htZW0uYyBiL21tL2hpZ2htZW0uYwppbmRleCA2NmJhYTIwLi43YTBhYTFiIDEwMDY0NAotLS0gYS9tbS9oaWdobWVtLmMKKysrIGIvbW0vaGlnaG1lbS5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgva2dkYi5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCiAvKgpAQCAtNDcwLDYgKzQ3MSwxMiBAQAogCQkJd2Fybl9jb3VudC0tOwogCQl9CiAJfQorI2lmZGVmIENPTkZJR19LR0RCX0tEQgorCWlmICh1bmxpa2VseSh0eXBlID09IEtNX0tEQiAmJiBhdG9taWNfcmVhZCgma2dkYl9hY3RpdmUpID09IC0xKSkgeworCQlXQVJOX09OKDEpOworCQl3YXJuX2NvdW50LS07CisJfQorI2VuZGlmIC8qIENPTkZJR19LR0RCX0tEQiAqLwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL21tL21lbWJsb2NrLmMgYi9tbS9tZW1ibG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMjRlYjMKLS0tIC9kZXYvbnVsbAorKysgYi9tbS9tZW1ibG9jay5jCkBAIC0wLDAgKzEsNTQxIEBACisvKgorICogUHJvY2VkdXJlcyBmb3IgbWFpbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgbG9naWNhbCBtZW1vcnkgYmxvY2tzLgorICoKKyAqIFBldGVyIEJlcmduZXIsIElCTSBDb3JwLglKdW5lIDIwMDEuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgQmVyZ25lci4KKyAqCisgKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgICAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgorCisjZGVmaW5lIE1FTUJMT0NLX0FMTE9DX0FOWVdIRVJFCTAKKworc3RydWN0IG1lbWJsb2NrIG1lbWJsb2NrOworCitzdGF0aWMgaW50IG1lbWJsb2NrX2RlYnVnOworCitzdGF0aWMgaW50IF9faW5pdCBlYXJseV9tZW1ibG9jayhjaGFyICpwKQoreworCWlmIChwICYmIHN0cnN0cihwLCAiZGVidWciKSkKKwkJbWVtYmxvY2tfZGVidWcgPSAxOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oIm1lbWJsb2NrIiwgZWFybHlfbWVtYmxvY2spOworCitzdGF0aWMgdm9pZCBtZW1ibG9ja19kdW1wKHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnJlZ2lvbiwgY2hhciAqbmFtZSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgYmFzZSwgc2l6ZTsKKwlpbnQgaTsKKworCXByX2luZm8oIiAlcy5jbnQgID0gMHglbHhcbiIsIG5hbWUsIHJlZ2lvbi0+Y250KTsKKworCWZvciAoaSA9IDA7IGkgPCByZWdpb24tPmNudDsgaSsrKSB7CisJCWJhc2UgPSByZWdpb24tPnJlZ2lvbltpXS5iYXNlOworCQlzaXplID0gcmVnaW9uLT5yZWdpb25baV0uc2l6ZTsKKworCQlwcl9pbmZvKCIgJXNbMHgleF1cdDB4JTAxNmxseCAtIDB4JTAxNmxseCwgMHglbGx4IGJ5dGVzXG4iLAorCQkgICAgbmFtZSwgaSwgYmFzZSwgYmFzZSArIHNpemUgLSAxLCBzaXplKTsKKwl9Cit9CisKK3ZvaWQgbWVtYmxvY2tfZHVtcF9hbGwodm9pZCkKK3sKKwlpZiAoIW1lbWJsb2NrX2RlYnVnKQorCQlyZXR1cm47CisKKwlwcl9pbmZvKCJNRU1CTE9DSyBjb25maWd1cmF0aW9uOlxuIik7CisJcHJfaW5mbygiIHJtb19zaXplICAgID0gMHglbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKW1lbWJsb2NrLnJtb19zaXplKTsKKwlwcl9pbmZvKCIgbWVtb3J5LnNpemUgPSAweCVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpbWVtYmxvY2subWVtb3J5LnNpemUpOworCisJbWVtYmxvY2tfZHVtcCgmbWVtYmxvY2subWVtb3J5LCAibWVtb3J5Iik7CisJbWVtYmxvY2tfZHVtcCgmbWVtYmxvY2sucmVzZXJ2ZWQsICJyZXNlcnZlZCIpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtZW1ibG9ja19hZGRyc19vdmVybGFwKHU2NCBiYXNlMSwgdTY0IHNpemUxLCB1NjQgYmFzZTIsCisJCQkJCXU2NCBzaXplMikKK3sKKwlyZXR1cm4gKChiYXNlMSA8IChiYXNlMiArIHNpemUyKSkgJiYgKGJhc2UyIDwgKGJhc2UxICsgc2l6ZTEpKSk7Cit9CisKK3N0YXRpYyBsb25nIG1lbWJsb2NrX2FkZHJzX2FkamFjZW50KHU2NCBiYXNlMSwgdTY0IHNpemUxLCB1NjQgYmFzZTIsIHU2NCBzaXplMikKK3sKKwlpZiAoYmFzZTIgPT0gYmFzZTEgKyBzaXplMSkKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAoYmFzZTEgPT0gYmFzZTIgKyBzaXplMikKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIG1lbWJsb2NrX3JlZ2lvbnNfYWRqYWNlbnQoc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcmduLAorCQl1bnNpZ25lZCBsb25nIHIxLCB1bnNpZ25lZCBsb25nIHIyKQoreworCXU2NCBiYXNlMSA9IHJnbi0+cmVnaW9uW3IxXS5iYXNlOworCXU2NCBzaXplMSA9IHJnbi0+cmVnaW9uW3IxXS5zaXplOworCXU2NCBiYXNlMiA9IHJnbi0+cmVnaW9uW3IyXS5iYXNlOworCXU2NCBzaXplMiA9IHJnbi0+cmVnaW9uW3IyXS5zaXplOworCisJcmV0dXJuIG1lbWJsb2NrX2FkZHJzX2FkamFjZW50KGJhc2UxLCBzaXplMSwgYmFzZTIsIHNpemUyKTsKK30KKworc3RhdGljIHZvaWQgbWVtYmxvY2tfcmVtb3ZlX3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyZ24sIHVuc2lnbmVkIGxvbmcgcikKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlmb3IgKGkgPSByOyBpIDwgcmduLT5jbnQgLSAxOyBpKyspIHsKKwkJcmduLT5yZWdpb25baV0uYmFzZSA9IHJnbi0+cmVnaW9uW2kgKyAxXS5iYXNlOworCQlyZ24tPnJlZ2lvbltpXS5zaXplID0gcmduLT5yZWdpb25baSArIDFdLnNpemU7CisJfQorCXJnbi0+Y250LS07Cit9CisKKy8qIEFzc3VtcHRpb246IGJhc2UgYWRkciBvZiByZWdpb24gMSA8IGJhc2UgYWRkciBvZiByZWdpb24gMiAqLworc3RhdGljIHZvaWQgbWVtYmxvY2tfY29hbGVzY2VfcmVnaW9ucyhzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyZ24sCisJCXVuc2lnbmVkIGxvbmcgcjEsIHVuc2lnbmVkIGxvbmcgcjIpCit7CisJcmduLT5yZWdpb25bcjFdLnNpemUgKz0gcmduLT5yZWdpb25bcjJdLnNpemU7CisJbWVtYmxvY2tfcmVtb3ZlX3JlZ2lvbihyZ24sIHIyKTsKK30KKwordm9pZCBfX2luaXQgbWVtYmxvY2tfaW5pdCh2b2lkKQoreworCS8qIENyZWF0ZSBhIGR1bW15IHplcm8gc2l6ZSBNRU1CTE9DSyB3aGljaCB3aWxsIGdldCBjb2FsZXNjZWQgYXdheSBsYXRlci4KKwkgKiBUaGlzIHNpbXBsaWZpZXMgdGhlIG1lbWJsb2NrX2FkZCgpIGNvZGUgYmVsb3cuLi4KKwkgKi8KKwltZW1ibG9jay5tZW1vcnkucmVnaW9uWzBdLmJhc2UgPSAwOworCW1lbWJsb2NrLm1lbW9yeS5yZWdpb25bMF0uc2l6ZSA9IDA7CisJbWVtYmxvY2subWVtb3J5LmNudCA9IDE7CisKKwkvKiBEaXR0by4gKi8KKwltZW1ibG9jay5yZXNlcnZlZC5yZWdpb25bMF0uYmFzZSA9IDA7CisJbWVtYmxvY2sucmVzZXJ2ZWQucmVnaW9uWzBdLnNpemUgPSAwOworCW1lbWJsb2NrLnJlc2VydmVkLmNudCA9IDE7Cit9CisKK3ZvaWQgX19pbml0IG1lbWJsb2NrX2FuYWx5emUodm9pZCkKK3sKKwlpbnQgaTsKKworCW1lbWJsb2NrLm1lbW9yeS5zaXplID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBtZW1ibG9jay5tZW1vcnkuY250OyBpKyspCisJCW1lbWJsb2NrLm1lbW9yeS5zaXplICs9IG1lbWJsb2NrLm1lbW9yeS5yZWdpb25baV0uc2l6ZTsKK30KKworc3RhdGljIGxvbmcgbWVtYmxvY2tfYWRkX3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyZ24sIHU2NCBiYXNlLCB1NjQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGNvYWxlc2NlZCA9IDA7CisJbG9uZyBhZGphY2VudCwgaTsKKworCWlmICgocmduLT5jbnQgPT0gMSkgJiYgKHJnbi0+cmVnaW9uWzBdLnNpemUgPT0gMCkpIHsKKwkJcmduLT5yZWdpb25bMF0uYmFzZSA9IGJhc2U7CisJCXJnbi0+cmVnaW9uWzBdLnNpemUgPSBzaXplOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBGaXJzdCB0cnkgYW5kIGNvYWxlc2NlIHRoaXMgTUVNQkxPQ0sgd2l0aCBhbm90aGVyLiAqLworCWZvciAoaSA9IDA7IGkgPCByZ24tPmNudDsgaSsrKSB7CisJCXU2NCByZ25iYXNlID0gcmduLT5yZWdpb25baV0uYmFzZTsKKwkJdTY0IHJnbnNpemUgPSByZ24tPnJlZ2lvbltpXS5zaXplOworCisJCWlmICgocmduYmFzZSA9PSBiYXNlKSAmJiAocmduc2l6ZSA9PSBzaXplKSkKKwkJCS8qIEFscmVhZHkgaGF2ZSB0aGlzIHJlZ2lvbiwgc28gd2UncmUgZG9uZSAqLworCQkJcmV0dXJuIDA7CisKKwkJYWRqYWNlbnQgPSBtZW1ibG9ja19hZGRyc19hZGphY2VudChiYXNlLCBzaXplLCByZ25iYXNlLCByZ25zaXplKTsKKwkJaWYgKGFkamFjZW50ID4gMCkgeworCQkJcmduLT5yZWdpb25baV0uYmFzZSAtPSBzaXplOworCQkJcmduLT5yZWdpb25baV0uc2l6ZSArPSBzaXplOworCQkJY29hbGVzY2VkKys7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChhZGphY2VudCA8IDApIHsKKwkJCXJnbi0+cmVnaW9uW2ldLnNpemUgKz0gc2l6ZTsKKwkJCWNvYWxlc2NlZCsrOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoKGkgPCByZ24tPmNudCAtIDEpICYmIG1lbWJsb2NrX3JlZ2lvbnNfYWRqYWNlbnQocmduLCBpLCBpKzEpKSB7CisJCW1lbWJsb2NrX2NvYWxlc2NlX3JlZ2lvbnMocmduLCBpLCBpKzEpOworCQljb2FsZXNjZWQrKzsKKwl9CisKKwlpZiAoY29hbGVzY2VkKQorCQlyZXR1cm4gY29hbGVzY2VkOworCWlmIChyZ24tPmNudCA+PSBNQVhfTUVNQkxPQ0tfUkVHSU9OUykKKwkJcmV0dXJuIC0xOworCisJLyogQ291bGRuJ3QgY29hbGVzY2UgdGhlIE1FTUJMT0NLLCBzbyBhZGQgaXQgdG8gdGhlIHNvcnRlZCB0YWJsZS4gKi8KKwlmb3IgKGkgPSByZ24tPmNudCAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChiYXNlIDwgcmduLT5yZWdpb25baV0uYmFzZSkgeworCQkJcmduLT5yZWdpb25baSsxXS5iYXNlID0gcmduLT5yZWdpb25baV0uYmFzZTsKKwkJCXJnbi0+cmVnaW9uW2krMV0uc2l6ZSA9IHJnbi0+cmVnaW9uW2ldLnNpemU7CisJCX0gZWxzZSB7CisJCQlyZ24tPnJlZ2lvbltpKzFdLmJhc2UgPSBiYXNlOworCQkJcmduLT5yZWdpb25baSsxXS5zaXplID0gc2l6ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGJhc2UgPCByZ24tPnJlZ2lvblswXS5iYXNlKSB7CisJCXJnbi0+cmVnaW9uWzBdLmJhc2UgPSBiYXNlOworCQlyZ24tPnJlZ2lvblswXS5zaXplID0gc2l6ZTsKKwl9CisJcmduLT5jbnQrKzsKKworCXJldHVybiAwOworfQorCitsb25nIG1lbWJsb2NrX2FkZCh1NjQgYmFzZSwgdTY0IHNpemUpCit7CisJc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqX3JnbiA9ICZtZW1ibG9jay5tZW1vcnk7CisKKwkvKiBPbiBwU2VyaWVzIExQQVIgc3lzdGVtcywgdGhlIGZpcnN0IE1FTUJMT0NLIGlzIG91ciBSTU8gcmVnaW9uLiAqLworCWlmIChiYXNlID09IDApCisJCW1lbWJsb2NrLnJtb19zaXplID0gc2l6ZTsKKworCXJldHVybiBtZW1ibG9ja19hZGRfcmVnaW9uKF9yZ24sIGJhc2UsIHNpemUpOworCit9CisKK3N0YXRpYyBsb25nIF9fbWVtYmxvY2tfcmVtb3ZlKHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnJnbiwgdTY0IGJhc2UsIHU2NCBzaXplKQoreworCXU2NCByZ25iZWdpbiwgcmduZW5kOworCXU2NCBlbmQgPSBiYXNlICsgc2l6ZTsKKwlpbnQgaTsKKworCXJnbmJlZ2luID0gcmduZW5kID0gMDsgLyogc3VwcmVzcyBnY2Mgd2FybmluZ3MgKi8KKworCS8qIEZpbmQgdGhlIHJlZ2lvbiB3aGVyZSAoYmFzZSwgc2l6ZSkgYmVsb25ncyB0byAqLworCWZvciAoaT0wOyBpIDwgcmduLT5jbnQ7IGkrKykgeworCQlyZ25iZWdpbiA9IHJnbi0+cmVnaW9uW2ldLmJhc2U7CisJCXJnbmVuZCA9IHJnbmJlZ2luICsgcmduLT5yZWdpb25baV0uc2l6ZTsKKworCQlpZiAoKHJnbmJlZ2luIDw9IGJhc2UpICYmIChlbmQgPD0gcmduZW5kKSkKKwkJCWJyZWFrOworCX0KKworCS8qIERpZG4ndCBmaW5kIHRoZSByZWdpb24gKi8KKwlpZiAoaSA9PSByZ24tPmNudCkKKwkJcmV0dXJuIC0xOworCisJLyogQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSByZW1vdmluZyBlbnRpcmUgcmVnaW9uICovCisJaWYgKChyZ25iZWdpbiA9PSBiYXNlKSAmJiAocmduZW5kID09IGVuZCkpIHsKKwkJbWVtYmxvY2tfcmVtb3ZlX3JlZ2lvbihyZ24sIGkpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBDaGVjayB0byBzZWUgaWYgcmVnaW9uIGlzIG1hdGNoaW5nIGF0IHRoZSBmcm9udCAqLworCWlmIChyZ25iZWdpbiA9PSBiYXNlKSB7CisJCXJnbi0+cmVnaW9uW2ldLmJhc2UgPSBlbmQ7CisJCXJnbi0+cmVnaW9uW2ldLnNpemUgLT0gc2l6ZTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSByZWdpb24gaXMgbWF0Y2hpbmcgYXQgdGhlIGVuZCAqLworCWlmIChyZ25lbmQgPT0gZW5kKSB7CisJCXJnbi0+cmVnaW9uW2ldLnNpemUgLT0gc2l6ZTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBXZSBuZWVkIHRvIHNwbGl0IHRoZSBlbnRyeSAtICBhZGp1c3QgdGhlIGN1cnJlbnQgb25lIHRvIHRoZQorCSAqIGJlZ2luZ2luZyBvZiB0aGUgaG9sZSBhbmQgYWRkIHRoZSByZWdpb24gYWZ0ZXIgaG9sZS4KKwkgKi8KKwlyZ24tPnJlZ2lvbltpXS5zaXplID0gYmFzZSAtIHJnbi0+cmVnaW9uW2ldLmJhc2U7CisJcmV0dXJuIG1lbWJsb2NrX2FkZF9yZWdpb24ocmduLCBlbmQsIHJnbmVuZCAtIGVuZCk7Cit9CisKK2xvbmcgbWVtYmxvY2tfcmVtb3ZlKHU2NCBiYXNlLCB1NjQgc2l6ZSkKK3sKKwlyZXR1cm4gX19tZW1ibG9ja19yZW1vdmUoJm1lbWJsb2NrLm1lbW9yeSwgYmFzZSwgc2l6ZSk7Cit9CisKK2xvbmcgX19pbml0IG1lbWJsb2NrX2ZyZWUodTY0IGJhc2UsIHU2NCBzaXplKQoreworCXJldHVybiBfX21lbWJsb2NrX3JlbW92ZSgmbWVtYmxvY2sucmVzZXJ2ZWQsIGJhc2UsIHNpemUpOworfQorCitsb25nIF9faW5pdCBtZW1ibG9ja19yZXNlcnZlKHU2NCBiYXNlLCB1NjQgc2l6ZSkKK3sKKwlzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpfcmduID0gJm1lbWJsb2NrLnJlc2VydmVkOworCisJQlVHX09OKDAgPT0gc2l6ZSk7CisKKwlyZXR1cm4gbWVtYmxvY2tfYWRkX3JlZ2lvbihfcmduLCBiYXNlLCBzaXplKTsKK30KKworbG9uZyBtZW1ibG9ja19vdmVybGFwc19yZWdpb24oc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcmduLCB1NjQgYmFzZSwgdTY0IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBpOworCisJZm9yIChpID0gMDsgaSA8IHJnbi0+Y250OyBpKyspIHsKKwkJdTY0IHJnbmJhc2UgPSByZ24tPnJlZ2lvbltpXS5iYXNlOworCQl1NjQgcmduc2l6ZSA9IHJnbi0+cmVnaW9uW2ldLnNpemU7CisJCWlmIChtZW1ibG9ja19hZGRyc19vdmVybGFwKGJhc2UsIHNpemUsIHJnbmJhc2UsIHJnbnNpemUpKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIChpIDwgcmduLT5jbnQpID8gaSA6IC0xOworfQorCitzdGF0aWMgdTY0IG1lbWJsb2NrX2FsaWduX2Rvd24odTY0IGFkZHIsIHU2NCBzaXplKQoreworCXJldHVybiBhZGRyICYgfihzaXplIC0gMSk7Cit9CisKK3N0YXRpYyB1NjQgbWVtYmxvY2tfYWxpZ25fdXAodTY0IGFkZHIsIHU2NCBzaXplKQoreworCXJldHVybiAoYWRkciArIChzaXplIC0gMSkpICYgfihzaXplIC0gMSk7Cit9CisKK3N0YXRpYyB1NjQgX19pbml0IG1lbWJsb2NrX2FsbG9jX25pZF91bnJlc2VydmVkKHU2NCBzdGFydCwgdTY0IGVuZCwKKwkJCQkJICAgdTY0IHNpemUsIHU2NCBhbGlnbikKK3sKKwl1NjQgYmFzZSwgcmVzX2Jhc2U7CisJbG9uZyBqOworCisJYmFzZSA9IG1lbWJsb2NrX2FsaWduX2Rvd24oKGVuZCAtIHNpemUpLCBhbGlnbik7CisJd2hpbGUgKHN0YXJ0IDw9IGJhc2UpIHsKKwkJaiA9IG1lbWJsb2NrX292ZXJsYXBzX3JlZ2lvbigmbWVtYmxvY2sucmVzZXJ2ZWQsIGJhc2UsIHNpemUpOworCQlpZiAoaiA8IDApIHsKKwkJCS8qIHRoaXMgYXJlYSBpc24ndCByZXNlcnZlZCwgdGFrZSBpdCAqLworCQkJaWYgKG1lbWJsb2NrX2FkZF9yZWdpb24oJm1lbWJsb2NrLnJlc2VydmVkLCBiYXNlLCBzaXplKSA8IDApCisJCQkJYmFzZSA9IH4odTY0KTA7CisJCQlyZXR1cm4gYmFzZTsKKwkJfQorCQlyZXNfYmFzZSA9IG1lbWJsb2NrLnJlc2VydmVkLnJlZ2lvbltqXS5iYXNlOworCQlpZiAocmVzX2Jhc2UgPCBzaXplKQorCQkJYnJlYWs7CisJCWJhc2UgPSBtZW1ibG9ja19hbGlnbl9kb3duKHJlc19iYXNlIC0gc2l6ZSwgYWxpZ24pOworCX0KKworCXJldHVybiB+KHU2NCkwOworfQorCitzdGF0aWMgdTY0IF9faW5pdCBtZW1ibG9ja19hbGxvY19uaWRfcmVnaW9uKHN0cnVjdCBtZW1ibG9ja19wcm9wZXJ0eSAqbXAsCisJCQkJICAgICAgIHU2NCAoKm5pZF9yYW5nZSkodTY0LCB1NjQsIGludCAqKSwKKwkJCQkgICAgICAgdTY0IHNpemUsIHU2NCBhbGlnbiwgaW50IG5pZCkKK3sKKwl1NjQgc3RhcnQsIGVuZDsKKworCXN0YXJ0ID0gbXAtPmJhc2U7CisJZW5kID0gc3RhcnQgKyBtcC0+c2l6ZTsKKworCXN0YXJ0ID0gbWVtYmxvY2tfYWxpZ25fdXAoc3RhcnQsIGFsaWduKTsKKwl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKKwkJdTY0IHRoaXNfZW5kOworCQlpbnQgdGhpc19uaWQ7CisKKwkJdGhpc19lbmQgPSBuaWRfcmFuZ2Uoc3RhcnQsIGVuZCwgJnRoaXNfbmlkKTsKKwkJaWYgKHRoaXNfbmlkID09IG5pZCkgeworCQkJdTY0IHJldCA9IG1lbWJsb2NrX2FsbG9jX25pZF91bnJlc2VydmVkKHN0YXJ0LCB0aGlzX2VuZCwKKwkJCQkJCQkgICBzaXplLCBhbGlnbik7CisJCQlpZiAocmV0ICE9IH4odTY0KTApCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCQlzdGFydCA9IHRoaXNfZW5kOworCX0KKworCXJldHVybiB+KHU2NCkwOworfQorCit1NjQgX19pbml0IG1lbWJsb2NrX2FsbG9jX25pZCh1NjQgc2l6ZSwgdTY0IGFsaWduLCBpbnQgbmlkLAorCQkJIHU2NCAoKm5pZF9yYW5nZSkodTY0IHN0YXJ0LCB1NjQgZW5kLCBpbnQgKm5pZCkpCit7CisJc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqbWVtID0gJm1lbWJsb2NrLm1lbW9yeTsKKwlpbnQgaTsKKworCUJVR19PTigwID09IHNpemUpOworCisJc2l6ZSA9IG1lbWJsb2NrX2FsaWduX3VwKHNpemUsIGFsaWduKTsKKworCWZvciAoaSA9IDA7IGkgPCBtZW0tPmNudDsgaSsrKSB7CisJCXU2NCByZXQgPSBtZW1ibG9ja19hbGxvY19uaWRfcmVnaW9uKCZtZW0tPnJlZ2lvbltpXSwKKwkJCQkJICAgICAgIG5pZF9yYW5nZSwKKwkJCQkJICAgICAgIHNpemUsIGFsaWduLCBuaWQpOworCQlpZiAocmV0ICE9IH4odTY0KTApCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiBtZW1ibG9ja19hbGxvYyhzaXplLCBhbGlnbik7Cit9CisKK3U2NCBfX2luaXQgbWVtYmxvY2tfYWxsb2ModTY0IHNpemUsIHU2NCBhbGlnbikKK3sKKwlyZXR1cm4gbWVtYmxvY2tfYWxsb2NfYmFzZShzaXplLCBhbGlnbiwgTUVNQkxPQ0tfQUxMT0NfQU5ZV0hFUkUpOworfQorCit1NjQgX19pbml0IG1lbWJsb2NrX2FsbG9jX2Jhc2UodTY0IHNpemUsIHU2NCBhbGlnbiwgdTY0IG1heF9hZGRyKQoreworCXU2NCBhbGxvYzsKKworCWFsbG9jID0gX19tZW1ibG9ja19hbGxvY19iYXNlKHNpemUsIGFsaWduLCBtYXhfYWRkcik7CisKKwlpZiAoYWxsb2MgPT0gMCkKKwkJcGFuaWMoIkVSUk9SOiBGYWlsZWQgdG8gYWxsb2NhdGUgMHglbGx4IGJ5dGVzIGJlbG93IDB4JWxseC5cbiIsCisJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHNpemUsICh1bnNpZ25lZCBsb25nIGxvbmcpIG1heF9hZGRyKTsKKworCXJldHVybiBhbGxvYzsKK30KKwordTY0IF9faW5pdCBfX21lbWJsb2NrX2FsbG9jX2Jhc2UodTY0IHNpemUsIHU2NCBhbGlnbiwgdTY0IG1heF9hZGRyKQoreworCWxvbmcgaSwgajsKKwl1NjQgYmFzZSA9IDA7CisJdTY0IHJlc19iYXNlOworCisJQlVHX09OKDAgPT0gc2l6ZSk7CisKKwlzaXplID0gbWVtYmxvY2tfYWxpZ25fdXAoc2l6ZSwgYWxpZ24pOworCisJLyogT24gc29tZSBwbGF0Zm9ybXMsIG1ha2Ugc3VyZSB3ZSBhbGxvY2F0ZSBsb3dtZW0gKi8KKwkvKiBOb3RlIHRoYXQgTUVNQkxPQ0tfUkVBTF9MSU1JVCBtYXkgYmUgTUVNQkxPQ0tfQUxMT0NfQU5ZV0hFUkUgKi8KKwlpZiAobWF4X2FkZHIgPT0gTUVNQkxPQ0tfQUxMT0NfQU5ZV0hFUkUpCisJCW1heF9hZGRyID0gTUVNQkxPQ0tfUkVBTF9MSU1JVDsKKworCWZvciAoaSA9IG1lbWJsb2NrLm1lbW9yeS5jbnQgLSAxOyBpID49IDA7IGktLSkgeworCQl1NjQgbWVtYmxvY2tiYXNlID0gbWVtYmxvY2subWVtb3J5LnJlZ2lvbltpXS5iYXNlOworCQl1NjQgbWVtYmxvY2tzaXplID0gbWVtYmxvY2subWVtb3J5LnJlZ2lvbltpXS5zaXplOworCisJCWlmIChtZW1ibG9ja3NpemUgPCBzaXplKQorCQkJY29udGludWU7CisJCWlmIChtYXhfYWRkciA9PSBNRU1CTE9DS19BTExPQ19BTllXSEVSRSkKKwkJCWJhc2UgPSBtZW1ibG9ja19hbGlnbl9kb3duKG1lbWJsb2NrYmFzZSArIG1lbWJsb2Nrc2l6ZSAtIHNpemUsIGFsaWduKTsKKwkJZWxzZSBpZiAobWVtYmxvY2tiYXNlIDwgbWF4X2FkZHIpIHsKKwkJCWJhc2UgPSBtaW4obWVtYmxvY2tiYXNlICsgbWVtYmxvY2tzaXplLCBtYXhfYWRkcik7CisJCQliYXNlID0gbWVtYmxvY2tfYWxpZ25fZG93bihiYXNlIC0gc2l6ZSwgYWxpZ24pOworCQl9IGVsc2UKKwkJCWNvbnRpbnVlOworCisJCXdoaWxlIChiYXNlICYmIG1lbWJsb2NrYmFzZSA8PSBiYXNlKSB7CisJCQlqID0gbWVtYmxvY2tfb3ZlcmxhcHNfcmVnaW9uKCZtZW1ibG9jay5yZXNlcnZlZCwgYmFzZSwgc2l6ZSk7CisJCQlpZiAoaiA8IDApIHsKKwkJCQkvKiB0aGlzIGFyZWEgaXNuJ3QgcmVzZXJ2ZWQsIHRha2UgaXQgKi8KKwkJCQlpZiAobWVtYmxvY2tfYWRkX3JlZ2lvbigmbWVtYmxvY2sucmVzZXJ2ZWQsIGJhc2UsIHNpemUpIDwgMCkKKwkJCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuIGJhc2U7CisJCQl9CisJCQlyZXNfYmFzZSA9IG1lbWJsb2NrLnJlc2VydmVkLnJlZ2lvbltqXS5iYXNlOworCQkJaWYgKHJlc19iYXNlIDwgc2l6ZSkKKwkJCQlicmVhazsKKwkJCWJhc2UgPSBtZW1ibG9ja19hbGlnbl9kb3duKHJlc19iYXNlIC0gc2l6ZSwgYWxpZ24pOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKiBZb3UgbXVzdCBjYWxsIG1lbWJsb2NrX2FuYWx5emUoKSBiZWZvcmUgdGhpcy4gKi8KK3U2NCBfX2luaXQgbWVtYmxvY2tfcGh5c19tZW1fc2l6ZSh2b2lkKQoreworCXJldHVybiBtZW1ibG9jay5tZW1vcnkuc2l6ZTsKK30KKwordTY0IG1lbWJsb2NrX2VuZF9vZl9EUkFNKHZvaWQpCit7CisJaW50IGlkeCA9IG1lbWJsb2NrLm1lbW9yeS5jbnQgLSAxOworCisJcmV0dXJuIChtZW1ibG9jay5tZW1vcnkucmVnaW9uW2lkeF0uYmFzZSArIG1lbWJsb2NrLm1lbW9yeS5yZWdpb25baWR4XS5zaXplKTsKK30KKworLyogWW91IG11c3QgY2FsbCBtZW1ibG9ja19hbmFseXplKCkgYWZ0ZXIgdGhpcy4gKi8KK3ZvaWQgX19pbml0IG1lbWJsb2NrX2VuZm9yY2VfbWVtb3J5X2xpbWl0KHU2NCBtZW1vcnlfbGltaXQpCit7CisJdW5zaWduZWQgbG9uZyBpOworCXU2NCBsaW1pdDsKKwlzdHJ1Y3QgbWVtYmxvY2tfcHJvcGVydHkgKnA7CisKKwlpZiAoIW1lbW9yeV9saW1pdCkKKwkJcmV0dXJuOworCisJLyogVHJ1bmNhdGUgdGhlIG1lbWJsb2NrIHJlZ2lvbnMgdG8gc2F0aXNmeSB0aGUgbWVtb3J5IGxpbWl0LiAqLworCWxpbWl0ID0gbWVtb3J5X2xpbWl0OworCWZvciAoaSA9IDA7IGkgPCBtZW1ibG9jay5tZW1vcnkuY250OyBpKyspIHsKKwkJaWYgKGxpbWl0ID4gbWVtYmxvY2subWVtb3J5LnJlZ2lvbltpXS5zaXplKSB7CisJCQlsaW1pdCAtPSBtZW1ibG9jay5tZW1vcnkucmVnaW9uW2ldLnNpemU7CisJCQljb250aW51ZTsKKwkJfQorCisJCW1lbWJsb2NrLm1lbW9yeS5yZWdpb25baV0uc2l6ZSA9IGxpbWl0OworCQltZW1ibG9jay5tZW1vcnkuY250ID0gaSArIDE7CisJCWJyZWFrOworCX0KKworCWlmIChtZW1ibG9jay5tZW1vcnkucmVnaW9uWzBdLnNpemUgPCBtZW1ibG9jay5ybW9fc2l6ZSkKKwkJbWVtYmxvY2sucm1vX3NpemUgPSBtZW1ibG9jay5tZW1vcnkucmVnaW9uWzBdLnNpemU7CisKKwltZW1vcnlfbGltaXQgPSBtZW1ibG9ja19lbmRfb2ZfRFJBTSgpOworCisJLyogQW5kIHRydW5jYXRlIGFueSByZXNlcnZlcyBhYm92ZSB0aGUgbGltaXQgYWxzby4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWVtYmxvY2sucmVzZXJ2ZWQuY250OyBpKyspIHsKKwkJcCA9ICZtZW1ibG9jay5yZXNlcnZlZC5yZWdpb25baV07CisKKwkJaWYgKHAtPmJhc2UgPiBtZW1vcnlfbGltaXQpCisJCQlwLT5zaXplID0gMDsKKwkJZWxzZSBpZiAoKHAtPmJhc2UgKyBwLT5zaXplKSA+IG1lbW9yeV9saW1pdCkKKwkJCXAtPnNpemUgPSBtZW1vcnlfbGltaXQgLSBwLT5iYXNlOworCisJCWlmIChwLT5zaXplID09IDApIHsKKwkJCW1lbWJsb2NrX3JlbW92ZV9yZWdpb24oJm1lbWJsb2NrLnJlc2VydmVkLCBpKTsKKwkJCWktLTsKKwkJfQorCX0KK30KKworaW50IF9faW5pdCBtZW1ibG9ja19pc19yZXNlcnZlZCh1NjQgYWRkcikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBtZW1ibG9jay5yZXNlcnZlZC5jbnQ7IGkrKykgeworCQl1NjQgdXBwZXIgPSBtZW1ibG9jay5yZXNlcnZlZC5yZWdpb25baV0uYmFzZSArCisJCQltZW1ibG9jay5yZXNlcnZlZC5yZWdpb25baV0uc2l6ZSAtIDE7CisJCWlmICgoYWRkciA+PSBtZW1ibG9jay5yZXNlcnZlZC5yZWdpb25baV0uYmFzZSkgJiYgKGFkZHIgPD0gdXBwZXIpKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitpbnQgbWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKHU2NCBiYXNlLCB1NjQgc2l6ZSkKK3sKKwlyZXR1cm4gbWVtYmxvY2tfb3ZlcmxhcHNfcmVnaW9uKCZtZW1ibG9jay5yZXNlcnZlZCwgYmFzZSwgc2l6ZSk7Cit9CisKKy8qCisgKiBHaXZlbiBhIDxiYXNlLCBsZW4+LCBmaW5kIHdoaWNoIG1lbW9yeSByZWdpb25zIGJlbG9uZyB0byB0aGlzIHJhbmdlLgorICogQWRqdXN0IHRoZSByZXF1ZXN0IGFuZCByZXR1cm4gYSBjb250aWd1b3VzIGNodW5rLgorICovCitpbnQgbWVtYmxvY2tfZmluZChzdHJ1Y3QgbWVtYmxvY2tfcHJvcGVydHkgKnJlcykKK3sKKwlpbnQgaTsKKwl1NjQgcnN0YXJ0LCByZW5kOworCisJcnN0YXJ0ID0gcmVzLT5iYXNlOworCXJlbmQgPSByc3RhcnQgKyByZXMtPnNpemUgLSAxOworCisJZm9yIChpID0gMDsgaSA8IG1lbWJsb2NrLm1lbW9yeS5jbnQ7IGkrKykgeworCQl1NjQgc3RhcnQgPSBtZW1ibG9jay5tZW1vcnkucmVnaW9uW2ldLmJhc2U7CisJCXU2NCBlbmQgPSBzdGFydCArIG1lbWJsb2NrLm1lbW9yeS5yZWdpb25baV0uc2l6ZSAtIDE7CisKKwkJaWYgKHN0YXJ0ID4gcmVuZCkKKwkJCXJldHVybiAtMTsKKworCQlpZiAoKGVuZCA+PSByc3RhcnQpICYmIChzdGFydCA8IHJlbmQpKSB7CisJCQkvKiBhZGp1c3QgdGhlIHJlcXVlc3QgKi8KKwkJCWlmIChyc3RhcnQgPCBzdGFydCkKKwkJCQlyc3RhcnQgPSBzdGFydDsKKwkJCWlmIChyZW5kID4gZW5kKQorCQkJCXJlbmQgPSBlbmQ7CisJCQlyZXMtPmJhc2UgPSByc3RhcnQ7CisJCQlyZXMtPnNpemUgPSByZW5kIC0gcnN0YXJ0ICsgMTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtMTsKK30KZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jCmluZGV4IDYyMGIwYjQuLjZiNDRlNTIgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmMKKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2UtaXNvbGF0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zd2Fwb3BzLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogaW50IHN5c2N0bF9tZW1vcnlfZmFpbHVyZV9lYXJseV9raWxsIF9fcmVhZF9tb3N0bHkgPSAwOwpAQCAtMTI5NiwzICsxMjk3LDM1IEBACiAJLyoga2VlcCBlbGV2YXRlZCBwYWdlIGNvdW50IGZvciBiYWQgcGFnZSAqLwogCXJldHVybiByZXQ7CiB9CisKKy8qCisgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBjdXJyZW50LT5tbS0+bW1hcF9zZW0gaW4gcmVhZCBtb2RlLgorICovCitpbnQgaXNfaHdwb2lzb25fYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcGdkX3QgKnBnZHA7CisJcHVkX3QgcHVkLCAqcHVkcDsKKwlwbWRfdCBwbWQsICpwbWRwOworCXB0ZV90IHB0ZSwgKnB0ZXA7CisJc3dwX2VudHJ5X3QgZW50cnk7CisKKwlwZ2RwID0gcGdkX29mZnNldChjdXJyZW50LT5tbSwgYWRkcik7CisJaWYgKCFwZ2RfcHJlc2VudCgqcGdkcCkpCisJCXJldHVybiAwOworCXB1ZHAgPSBwdWRfb2Zmc2V0KHBnZHAsIGFkZHIpOworCXB1ZCA9ICpwdWRwOworCWlmICghcHVkX3ByZXNlbnQocHVkKSB8fCBwdWRfbGFyZ2UocHVkKSkKKwkJcmV0dXJuIDA7CisJcG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7CisJcG1kID0gKnBtZHA7CisJaWYgKCFwbWRfcHJlc2VudChwbWQpIHx8IHBtZF9sYXJnZShwbWQpKQorCQlyZXR1cm4gMDsKKwlwdGVwID0gcHRlX29mZnNldF9tYXAocG1kcCwgYWRkcik7CisJcHRlID0gKnB0ZXA7CisJcHRlX3VubWFwKHB0ZXApOworCWlmICghaXNfc3dhcF9wdGUocHRlKSkKKwkJcmV0dXJuIDA7CisJZW50cnkgPSBwdGVfdG9fc3dwX2VudHJ5KHB0ZSk7CisJcmV0dXJuIGlzX2h3cG9pc29uX2VudHJ5KGVudHJ5KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlzX2h3cG9pc29uX2FkZHJlc3MpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCAxMTliN2NjLi5iZGU0MmM2IDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1vcnkuYwpAQCAtMTM5NCwxMCArMTM5NCwyMCBAQAogCQkJCXJldHVybiBpID8gOiAtRUZBVUxUOwogCQkJfQogCQkJaWYgKHBhZ2VzKSB7Ci0JCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2bV9ub3JtYWxfcGFnZShnYXRlX3ZtYSwgc3RhcnQsICpwdGUpOworCQkJCXN0cnVjdCBwYWdlICpwYWdlOworCisJCQkJcGFnZSA9IHZtX25vcm1hbF9wYWdlKGdhdGVfdm1hLCBzdGFydCwgKnB0ZSk7CisJCQkJaWYgKCFwYWdlKSB7CisJCQkJCWlmICghKGd1cF9mbGFncyAmIEZPTExfRFVNUCkgJiYKKwkJCQkJICAgICBpc196ZXJvX3BmbihwdGVfcGZuKCpwdGUpKSkKKwkJCQkJCXBhZ2UgPSBwdGVfcGFnZSgqcHRlKTsKKwkJCQkJZWxzZSB7CisJCQkJCQlwdGVfdW5tYXAocHRlKTsKKwkJCQkJCXJldHVybiBpID8gOiAtRUZBVUxUOworCQkJCQl9CisJCQkJfQogCQkJCXBhZ2VzW2ldID0gcGFnZTsKLQkJCQlpZiAocGFnZSkKLQkJCQkJZ2V0X3BhZ2UocGFnZSk7CisJCQkJZ2V0X3BhZ2UocGFnZSk7CiAJCQl9CiAJCQlwdGVfdW5tYXAocHRlKTsKIAkJCWlmICh2bWFzKQpkaWZmIC0tZ2l0IGEvbW0vbW1hcC5jIGIvbW0vbW1hcC5jCmluZGV4IDQ1NmVjNmYuLmUzOGU5MTAgMTAwNjQ0Ci0tLSBhL21tL21tYXAuYworKysgYi9tbS9tbWFwLmMKQEAgLTE3MzQsOCArMTczNCwxMCBAQAogCQlncm93ID0gKGFkZHJlc3MgLSB2bWEtPnZtX2VuZCkgPj4gUEFHRV9TSElGVDsKIAogCQllcnJvciA9IGFjY3Rfc3RhY2tfZ3Jvd3RoKHZtYSwgc2l6ZSwgZ3Jvdyk7Ci0JCWlmICghZXJyb3IpCisJCWlmICghZXJyb3IpIHsKIAkJCXZtYS0+dm1fZW5kID0gYWRkcmVzczsKKwkJCXBlcmZfZXZlbnRfbW1hcCh2bWEpOworCQl9CiAJfQogCWFub25fdm1hX3VubG9jayh2bWEpOwogCXJldHVybiBlcnJvcjsKQEAgLTE3ODEsNiArMTc4Myw3IEBACiAJCWlmICghZXJyb3IpIHsKIAkJCXZtYS0+dm1fc3RhcnQgPSBhZGRyZXNzOwogCQkJdm1hLT52bV9wZ29mZiAtPSBncm93OworCQkJcGVyZl9ldmVudF9tbWFwKHZtYSk7CiAJCX0KIAl9CiAJYW5vbl92bWFfdW5sb2NrKHZtYSk7CkBAIC0yMjA4LDYgKzIyMTEsNyBAQAogCXZtYS0+dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdChmbGFncyk7CiAJdm1hX2xpbmsobW0sIHZtYSwgcHJldiwgcmJfbGluaywgcmJfcGFyZW50KTsKIG91dDoKKwlwZXJmX2V2ZW50X21tYXAodm1hKTsKIAltbS0+dG90YWxfdm0gKz0gbGVuID4+IFBBR0VfU0hJRlQ7CiAJaWYgKGZsYWdzICYgVk1fTE9DS0VEKSB7CiAJCWlmICghbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgYWRkciwgYWRkciArIGxlbikpCmRpZmYgLS1naXQgYS9tbS9wYWdlLXdyaXRlYmFjay5jIGIvbW0vcGFnZS13cml0ZWJhY2suYwppbmRleCA1NGYyOGJkLi4zNzQ5OGVmIDEwMDY0NAotLS0gYS9tbS9wYWdlLXdyaXRlYmFjay5jCisrKyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKQEAgLTQ5NSw3ICs0OTUsNiBAQAogCiAJZm9yICg7OykgewogCQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0gewotCQkJLmJkaQkJPSBiZGksCiAJCQkuc3luY19tb2RlCT0gV0JfU1lOQ19OT05FLAogCQkJLm9sZGVyX3RoYW5fdGhpcyA9IE5VTEwsCiAJCQkubnJfdG9fd3JpdGUJPSB3cml0ZV9jaHVuaywKQEAgLTUzNyw3ICs1MzYsNyBAQAogCQkgKiB1cC4KIAkJICovCiAJCWlmIChiZGlfbnJfcmVjbGFpbWFibGUgPiBiZGlfdGhyZXNoKSB7Ci0JCQl3cml0ZWJhY2tfaW5vZGVzX3diYygmd2JjKTsKKwkJCXdyaXRlYmFja19pbm9kZXNfd2IoJmJkaS0+d2IsICZ3YmMpOwogCQkJcGFnZXNfd3JpdHRlbiArPSB3cml0ZV9jaHVuayAtIHdiYy5ucl90b193cml0ZTsKIAkJCWdldF9kaXJ0eV9saW1pdHMoJmJhY2tncm91bmRfdGhyZXNoLCAmZGlydHlfdGhyZXNoLAogCQkJCSAgICAgICAmYmRpX3RocmVzaCwgYmRpKTsKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCA0MzEyMTRiLi45YmQzMzllIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKKysrIGIvbW0vcGFnZV9hbGxvYy5jCkBAIC0zNjM0LDYgKzM2MzQsOSBAQAogCWludCBpOwogCXZvaWQgKnB0cjsKIAorCWlmIChsaW1pdCA+IGdldF9tYXhfbWFwcGVkKCkpCisJCWxpbWl0ID0gZ2V0X21heF9tYXBwZWQoKTsKKwogCS8qIG5lZWQgdG8gZ28gb3ZlciBlYXJseV9ub2RlX21hcCB0byBmaW5kIG91dCBnb29kIHJhbmdlIGZvciBub2RlICovCiAJZm9yX2VhY2hfYWN0aXZlX3JhbmdlX2luZGV4X2luX25pZChpLCBuaWQpIHsKIAkJdTY0IGFkZHI7CkBAIC0zNjU5LDYgKzM2NjIsMTEgQEAKIAkJcHRyID0gcGh5c190b192aXJ0KGFkZHIpOwogCQltZW1zZXQocHRyLCAwLCBzaXplKTsKIAkJcmVzZXJ2ZV9lYXJseV93aXRob3V0X2NoZWNrKGFkZHIsIGFkZHIgKyBzaXplLCAiQk9PVE1FTSIpOworCQkvKgorCQkgKiBUaGUgbWluX2NvdW50IGlzIHNldCB0byAwIHNvIHRoYXQgYm9vdG1lbSBhbGxvY2F0ZWQgYmxvY2tzCisJCSAqIGFyZSBuZXZlciByZXBvcnRlZCBhcyBsZWFrcy4KKwkJICovCisJCWttZW1sZWFrX2FsbG9jKHB0ciwgc2l6ZSwgMCwgMCk7CiAJCXJldHVybiBwdHI7CiAJfQogCmRpZmYgLS1naXQgYS9tbS9wYWdlX2Nncm91cC5jIGIvbW0vcGFnZV9jZ3JvdXAuYwppbmRleCA2YzAwODE0Li41YmZmYWRhIDEwMDY0NAotLS0gYS9tbS9wYWdlX2Nncm91cC5jCisrKyBiL21tL3BhZ2VfY2dyb3VwLmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2Nncm91cC5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXBvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9rbWVtbGVhay5oPgogCiBzdGF0aWMgdm9pZCBfX21lbWluaXQKIF9faW5pdF9wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjLCB1bnNpZ25lZCBsb25nIHBmbikKQEAgLTEyNiw2ICsxMjcsMTIgQEAKIAkJCWlmICghYmFzZSkKIAkJCQliYXNlID0gdm1hbGxvYyh0YWJsZV9zaXplKTsKIAkJfQorCQkvKgorCQkgKiBUaGUgdmFsdWUgc3RvcmVkIGluIHNlY3Rpb24tPnBhZ2VfY2dyb3VwIGlzIChiYXNlIC0gcGZuKQorCQkgKiBhbmQgaXQgZG9lcyBub3QgcG9pbnQgdG8gdGhlIG1lbW9yeSBibG9jayBhbGxvY2F0ZWQgYWJvdmUsCisJCSAqIGNhdXNpbmcga21lbWxlYWsgZmFsc2UgcG9zaXRpdmVzLgorCQkgKi8KKwkJa21lbWxlYWtfbm90X2xlYWsoYmFzZSk7CiAJfSBlbHNlIHsKIAkJLyoKICAJCSAqIFdlIGRvbid0IGhhdmUgdG8gYWxsb2NhdGUgcGFnZV9jZ3JvdXAgYWdhaW4sIGJ1dApkaWZmIC0tZ2l0IGEvbW0vcGVyY3B1LmMgYi9tbS9wZXJjcHUuYwppbmRleCA2NDcwZTc3Li5lNjFkYzJjIDEwMDY0NAotLS0gYS9tbS9wZXJjcHUuYworKysgYi9tbS9wZXJjcHUuYwpAQCAtMjgyLDYgKzI4Miw5IEBACiAgKi8KIHN0YXRpYyB2b2lkICpwY3B1X21lbV9hbGxvYyhzaXplX3Qgc2l6ZSkKIHsKKwlpZiAoV0FSTl9PTl9PTkNFKCFzbGFiX2lzX2F2YWlsYWJsZSgpKSkKKwkJcmV0dXJuIE5VTEw7CisKIAlpZiAoc2l6ZSA8PSBQQUdFX1NJWkUpCiAJCXJldHVybiBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCWVsc2UgewpAQCAtMzkyLDEzICszOTUsNiBAQAogCW9sZF9zaXplID0gY2h1bmstPm1hcF9hbGxvYyAqIHNpemVvZihjaHVuay0+bWFwWzBdKTsKIAltZW1jcHkobmV3LCBjaHVuay0+bWFwLCBvbGRfc2l6ZSk7CiAKLQkvKgotCSAqIG1hcF9hbGxvYyA8IFBDUFVfREZMX01BUF9BTExPQyBpbmRpY2F0ZXMgdGhhdCB0aGUgY2h1bmsgaXMKLQkgKiBvbmUgb2YgdGhlIGZpcnN0IGNodW5rcyBhbmQgc3RpbGwgdXNpbmcgc3RhdGljIG1hcC4KLQkgKi8KLQlpZiAoY2h1bmstPm1hcF9hbGxvYyA+PSBQQ1BVX0RGTF9NQVBfQUxMT0MpCi0JCW9sZCA9IGNodW5rLT5tYXA7Ci0KIAljaHVuay0+bWFwX2FsbG9jID0gbmV3X2FsbG9jOwogCWNodW5rLT5tYXAgPSBuZXc7CiAJbmV3ID0gTlVMTDsKQEAgLTYwNCw3ICs2MDAsNyBAQAogewogCXN0cnVjdCBwY3B1X2NodW5rICpjaHVuazsKIAotCWNodW5rID0ga3phbGxvYyhwY3B1X2NodW5rX3N0cnVjdF9zaXplLCBHRlBfS0VSTkVMKTsKKwljaHVuayA9IHBjcHVfbWVtX2FsbG9jKHBjcHVfY2h1bmtfc3RydWN0X3NpemUpOwogCWlmICghY2h1bmspCiAJCXJldHVybiBOVUxMOwogCkBAIC0xMDEzLDIwICsxMDA5LDYgQEAKIAkJcmV0dXJuIHBhZ2VfdG9fcGh5cyhwY3B1X2FkZHJfdG9fcGFnZShhZGRyKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc2l6ZV90IHBjcHVfY2FsY19mY19zaXplcyhzaXplX3Qgc3RhdGljX3NpemUsCi0JCQkJCXNpemVfdCByZXNlcnZlZF9zaXplLAotCQkJCQlzc2l6ZV90ICpkeW5fc2l6ZXApCi17Ci0Jc2l6ZV90IHNpemVfc3VtOwotCi0Jc2l6ZV9zdW0gPSBQRk5fQUxJR04oc3RhdGljX3NpemUgKyByZXNlcnZlZF9zaXplICsKLQkJCSAgICAgKCpkeW5fc2l6ZXAgPj0gMCA/ICpkeW5fc2l6ZXAgOiAwKSk7Ci0JaWYgKCpkeW5fc2l6ZXAgIT0gMCkKLQkJKmR5bl9zaXplcCA9IHNpemVfc3VtIC0gc3RhdGljX3NpemUgLSByZXNlcnZlZF9zaXplOwotCi0JcmV0dXJuIHNpemVfc3VtOwotfQotCiAvKioKICAqIHBjcHVfYWxsb2NfYWxsb2NfaW5mbyAtIGFsbG9jYXRlIHBlcmNwdSBhbGxvY2F0aW9uIGluZm8KICAqIEBucl9ncm91cHM6IHRoZSBudW1iZXIgb2YgZ3JvdXBzCkBAIC0xMDg1LDcgKzEwNjcsNyBAQAogLyoqCiAgKiBwY3B1X2J1aWxkX2FsbG9jX2luZm8gLSBidWlsZCBhbGxvY19pbmZvIGNvbnNpZGVyaW5nIGRpc3RhbmNlcyBiZXR3ZWVuIENQVXMKICAqIEByZXNlcnZlZF9zaXplOiB0aGUgc2l6ZSBvZiByZXNlcnZlZCBwZXJjcHUgYXJlYSBpbiBieXRlcwotICogQGR5bl9zaXplOiBmcmVlIHNpemUgZm9yIGR5bmFtaWMgYWxsb2NhdGlvbiBpbiBieXRlcywgLTEgZm9yIGF1dG8KKyAqIEBkeW5fc2l6ZTogbWluaW11bSBmcmVlIHNpemUgZm9yIGR5bmFtaWMgYWxsb2NhdGlvbiBpbiBieXRlcwogICogQGF0b21fc2l6ZTogYWxsb2NhdGlvbiBhdG9tIHNpemUKICAqIEBjcHVfZGlzdGFuY2VfZm46IGNhbGxiYWNrIHRvIGRldGVybWluZSBkaXN0YW5jZSBiZXR3ZWVuIGNwdXMsIG9wdGlvbmFsCiAgKgpAQCAtMTEwMyw4ICsxMDg1LDggQEAKICAqIE9uIHN1Y2Nlc3MsIHBvaW50ZXIgdG8gdGhlIG5ldyBhbGxvY2F0aW9uX2luZm8gaXMgcmV0dXJuZWQuICBPbgogICogZmFpbHVyZSwgRVJSX1BUUiB2YWx1ZSBpcyByZXR1cm5lZC4KICAqLwotc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqIF9faW5pdCBwY3B1X2J1aWxkX2FsbG9jX2luZm8oCi0JCQkJc2l6ZV90IHJlc2VydmVkX3NpemUsIHNzaXplX3QgZHluX3NpemUsCitzdGF0aWMgc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqIF9faW5pdCBwY3B1X2J1aWxkX2FsbG9jX2luZm8oCisJCQkJc2l6ZV90IHJlc2VydmVkX3NpemUsIHNpemVfdCBkeW5fc2l6ZSwKIAkJCQlzaXplX3QgYXRvbV9zaXplLAogCQkJCXBjcHVfZmNfY3B1X2Rpc3RhbmNlX2ZuX3QgY3B1X2Rpc3RhbmNlX2ZuKQogewpAQCAtMTEyMywxMyArMTEwNSwxNyBAQAogCW1lbXNldChncm91cF9tYXAsIDAsIHNpemVvZihncm91cF9tYXApKTsKIAltZW1zZXQoZ3JvdXBfY250LCAwLCBzaXplb2YoZ3JvdXBfY250KSk7CiAKKwkvKiBjYWxjdWxhdGUgc2l6ZV9zdW0gYW5kIGVuc3VyZSBkeW5fc2l6ZSBpcyBlbm91Z2ggZm9yIGVhcmx5IGFsbG9jICovCisJc2l6ZV9zdW0gPSBQRk5fQUxJR04oc3RhdGljX3NpemUgKyByZXNlcnZlZF9zaXplICsKKwkJCSAgICBtYXhfdChzaXplX3QsIGR5bl9zaXplLCBQRVJDUFVfRFlOQU1JQ19FQVJMWV9TSVpFKSk7CisJZHluX3NpemUgPSBzaXplX3N1bSAtIHN0YXRpY19zaXplIC0gcmVzZXJ2ZWRfc2l6ZTsKKwogCS8qCiAJICogRGV0ZXJtaW5lIG1pbl91bml0X3NpemUsIGFsbG9jX3NpemUgYW5kIG1heF91cGEgc3VjaCB0aGF0CiAJICogYWxsb2Nfc2l6ZSBpcyBtdWx0aXBsZSBvZiBhdG9tX3NpemUgYW5kIGlzIHRoZSBzbWFsbGVzdAogCSAqIHdoaWNoIGNhbiBhY2NvbW9kYXRlIDRrIGFsaWduZWQgc2VnbWVudHMgd2hpY2ggYXJlIGVxdWFsIHRvCiAJICogb3IgbGFyZ2VyIHRoYW4gbWluX3VuaXRfc2l6ZS4KIAkgKi8KLQlzaXplX3N1bSA9IHBjcHVfY2FsY19mY19zaXplcyhzdGF0aWNfc2l6ZSwgcmVzZXJ2ZWRfc2l6ZSwgJmR5bl9zaXplKTsKIAltaW5fdW5pdF9zaXplID0gbWF4X3Qoc2l6ZV90LCBzaXplX3N1bSwgUENQVV9NSU5fVU5JVF9TSVpFKTsKIAogCWFsbG9jX3NpemUgPSByb3VuZHVwKG1pbl91bml0X3NpemUsIGF0b21fc2l6ZSk7CkBAIC0xMzUwLDcgKzEzMzYsOCBAQAogCQkJCSAgdm9pZCAqYmFzZV9hZGRyKQogewogCXN0YXRpYyBjaGFyIGNwdXNfYnVmWzQwOTZdIF9faW5pdGRhdGE7Ci0Jc3RhdGljIGludCBzbWFwWzJdLCBkbWFwWzJdOworCXN0YXRpYyBpbnQgc21hcFtQRVJDUFVfRFlOQU1JQ19FQVJMWV9TTE9UU10gX19pbml0ZGF0YTsKKwlzdGF0aWMgaW50IGRtYXBbUEVSQ1BVX0RZTkFNSUNfRUFSTFlfU0xPVFNdIF9faW5pdGRhdGE7CiAJc2l6ZV90IGR5bl9zaXplID0gYWktPmR5bl9zaXplOwogCXNpemVfdCBzaXplX3N1bSA9IGFpLT5zdGF0aWNfc2l6ZSArIGFpLT5yZXNlcnZlZF9zaXplICsgZHluX3NpemU7CiAJc3RydWN0IHBjcHVfY2h1bmsgKnNjaHVuaywgKmRjaHVuayA9IE5VTEw7CkBAIC0xMzczLDE0ICsxMzYwLDEzIEBACiB9IHdoaWxlICgwKQogCiAJLyogc2FuaXR5IGNoZWNrcyAqLwotCUJVSUxEX0JVR19PTihBUlJBWV9TSVpFKHNtYXApID49IFBDUFVfREZMX01BUF9BTExPQyB8fAotCQkgICAgIEFSUkFZX1NJWkUoZG1hcCkgPj0gUENQVV9ERkxfTUFQX0FMTE9DKTsKIAlQQ1BVX1NFVFVQX0JVR19PTihhaS0+bnJfZ3JvdXBzIDw9IDApOwogCVBDUFVfU0VUVVBfQlVHX09OKCFhaS0+c3RhdGljX3NpemUpOwogCVBDUFVfU0VUVVBfQlVHX09OKCFiYXNlX2FkZHIpOwogCVBDUFVfU0VUVVBfQlVHX09OKGFpLT51bml0X3NpemUgPCBzaXplX3N1bSk7CiAJUENQVV9TRVRVUF9CVUdfT04oYWktPnVuaXRfc2l6ZSAmIH5QQUdFX01BU0spOwogCVBDUFVfU0VUVVBfQlVHX09OKGFpLT51bml0X3NpemUgPCBQQ1BVX01JTl9VTklUX1NJWkUpOworCVBDUFVfU0VUVVBfQlVHX09OKGFpLT5keW5fc2l6ZSA8IFBFUkNQVV9EWU5BTUlDX0VBUkxZX1NJWkUpOwogCVBDUFVfU0VUVVBfQlVHX09OKHBjcHVfdmVyaWZ5X2FsbG9jX2luZm8oYWkpIDwgMCk7CiAKIAkvKiBwcm9jZXNzIGdyb3VwIGluZm9ybWF0aW9uIGFuZCBidWlsZCBjb25maWcgdGFibGVzIGFjY29yZGluZ2x5ICovCkBAIC0xNTMyLDcgKzE1MTgsNyBAQAogLyoqCiAgKiBwY3B1X2VtYmVkX2ZpcnN0X2NodW5rIC0gZW1iZWQgdGhlIGZpcnN0IHBlcmNwdSBjaHVuayBpbnRvIGJvb3RtZW0KICAqIEByZXNlcnZlZF9zaXplOiB0aGUgc2l6ZSBvZiByZXNlcnZlZCBwZXJjcHUgYXJlYSBpbiBieXRlcwotICogQGR5bl9zaXplOiBmcmVlIHNpemUgZm9yIGR5bmFtaWMgYWxsb2NhdGlvbiBpbiBieXRlcywgLTEgZm9yIGF1dG8KKyAqIEBkeW5fc2l6ZTogbWluaW11bSBmcmVlIHNpemUgZm9yIGR5bmFtaWMgYWxsb2NhdGlvbiBpbiBieXRlcwogICogQGF0b21fc2l6ZTogYWxsb2NhdGlvbiBhdG9tIHNpemUKICAqIEBjcHVfZGlzdGFuY2VfZm46IGNhbGxiYWNrIHRvIGRldGVybWluZSBkaXN0YW5jZSBiZXR3ZWVuIGNwdXMsIG9wdGlvbmFsCiAgKiBAYWxsb2NfZm46IGZ1bmN0aW9uIHRvIGFsbG9jYXRlIHBlcmNwdSBwYWdlCkBAIC0xNTUzLDEwICsxNTM5LDcgQEAKICAqIHZtYWxsb2Mgc3BhY2UgaXMgbm90IG9yZGVycyBvZiBtYWduaXR1ZGUgbGFyZ2VyIHRoYW4gZGlzdGFuY2VzCiAgKiBiZXR3ZWVuIG5vZGUgbWVtb3J5IGFkZHJlc3NlcyAoaWUuIDMyYml0IE5VTUEgbWFjaGluZXMpLgogICoKLSAqIFdoZW4gQGR5bl9zaXplIGlzIHBvc2l0aXZlLCBkeW5hbWljIGFyZWEgbWlnaHQgYmUgbGFyZ2VyIHRoYW4KLSAqIHNwZWNpZmllZCB0byBmaWxsIHBhZ2UgYWxpZ25tZW50LiAgV2hlbiBAZHluX3NpemUgaXMgYXV0bywKLSAqIEBkeW5fc2l6ZSBpcyBqdXN0IGJpZyBlbm91Z2ggdG8gZmlsbCBwYWdlIGFsaWdubWVudCBhZnRlciBzdGF0aWMKLSAqIGFuZCByZXNlcnZlZCBhcmVhcy4KKyAqIEBkeW5fc2l6ZSBzcGVjaWZpZXMgdGhlIG1pbmltdW0gZHluYW1pYyBhcmVhIHNpemUuCiAgKgogICogSWYgdGhlIG5lZWRlZCBzaXplIGlzIHNtYWxsZXIgdGhhbiB0aGUgbWluaW11bSBvciBzcGVjaWZpZWQgdW5pdAogICogc2l6ZSwgdGhlIGxlZnRvdmVyIGlzIHJldHVybmVkIHVzaW5nIEBmcmVlX2ZuLgpAQCAtMTU2NCw3ICsxNTQ3LDcgQEAKICAqIFJFVFVSTlM6CiAgKiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLgogICovCi1pbnQgX19pbml0IHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHNzaXplX3QgZHluX3NpemUsCitpbnQgX19pbml0IHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHNpemVfdCBkeW5fc2l6ZSwKIAkJCQkgIHNpemVfdCBhdG9tX3NpemUsCiAJCQkJICBwY3B1X2ZjX2NwdV9kaXN0YW5jZV9mbl90IGNwdV9kaXN0YW5jZV9mbiwKIAkJCQkgIHBjcHVfZmNfYWxsb2NfZm5fdCBhbGxvY19mbiwKQEAgLTE2OTUsNyArMTY3OCw3IEBACiAKIAlzbnByaW50Zihwc2l6ZV9zdHIsIHNpemVvZihwc2l6ZV9zdHIpLCAiJWx1SyIsIFBBR0VfU0laRSA+PiAxMCk7CiAKLQlhaSA9IHBjcHVfYnVpbGRfYWxsb2NfaW5mbyhyZXNlcnZlZF9zaXplLCAtMSwgUEFHRV9TSVpFLCBOVUxMKTsKKwlhaSA9IHBjcHVfYnVpbGRfYWxsb2NfaW5mbyhyZXNlcnZlZF9zaXplLCAwLCBQQUdFX1NJWkUsIE5VTEwpOwogCWlmIChJU19FUlIoYWkpKQogCQlyZXR1cm4gUFRSX0VSUihhaSk7CiAJQlVHX09OKGFpLT5ucl9ncm91cHMgIT0gMSk7CkBAIC0xODIxLDMgKzE4MDQsMzMgQEAKIAkJX19wZXJfY3B1X29mZnNldFtjcHVdID0gZGVsdGEgKyBwY3B1X3VuaXRfb2Zmc2V0c1tjcHVdOwogfQogI2VuZGlmIC8qIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSAqLworCisvKgorICogRmlyc3QgYW5kIHJlc2VydmVkIGNodW5rcyBhcmUgaW5pdGlhbGl6ZWQgd2l0aCB0ZW1wb3JhcnkgYWxsb2NhdGlvbgorICogbWFwIGluIGluaXRkYXRhIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZCBiZWZvcmUgc2xhYiBpcyBvbmxpbmUuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBzbGFiIGlzIGJyb3VnaHQgdXAgYW5kIHJlcGxhY2VzIHRob3NlCisgKiB3aXRoIHByb3Blcmx5IGFsbG9jYXRlZCBtYXBzLgorICovCit2b2lkIF9faW5pdCBwZXJjcHVfaW5pdF9sYXRlKHZvaWQpCit7CisJc3RydWN0IHBjcHVfY2h1bmsgKnRhcmdldF9jaHVua3NbXSA9CisJCXsgcGNwdV9maXJzdF9jaHVuaywgcGNwdV9yZXNlcnZlZF9jaHVuaywgTlVMTCB9OworCXN0cnVjdCBwY3B1X2NodW5rICpjaHVuazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCisJZm9yIChpID0gMDsgKGNodW5rID0gdGFyZ2V0X2NodW5rc1tpXSk7IGkrKykgeworCQlpbnQgKm1hcDsKKwkJY29uc3Qgc2l6ZV90IHNpemUgPSBQRVJDUFVfRFlOQU1JQ19FQVJMWV9TTE9UUyAqIHNpemVvZihtYXBbMF0pOworCisJCUJVSUxEX0JVR19PTihzaXplID4gUEFHRV9TSVpFKTsKKworCQltYXAgPSBwY3B1X21lbV9hbGxvYyhzaXplKTsKKwkJQlVHX09OKCFtYXApOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwY3B1X2xvY2ssIGZsYWdzKTsKKwkJbWVtY3B5KG1hcCwgY2h1bmstPm1hcCwgc2l6ZSk7CisJCWNodW5rLT5tYXAgPSBtYXA7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjcHVfbG9jaywgZmxhZ3MpOworCX0KK30KZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCBlNDlmOGY0Li43MzZlNDk3IDEwMDY0NAotLS0gYS9tbS9zbGFiLmMKKysrIGIvbW0vc2xhYi5jCkBAIC0xMDIsNyArMTAyLDYgQEAKICNpbmNsdWRlCTxsaW51eC9jcHUuaD4KICNpbmNsdWRlCTxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlCTxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlCTxsaW51eC9rbWVtdHJhY2UuaD4KICNpbmNsdWRlCTxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUJPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUJPGxpbnV4L3VhY2Nlc3MuaD4KQEAgLTg2MSw3ICs4NjAsNyBAQAogCSAqLwogCWlmIChrZXZlbnRkX3VwKCkgJiYgcmVhcF93b3JrLT53b3JrLmZ1bmMgPT0gTlVMTCkgewogCQlpbml0X3JlYXBfbm9kZShjcHUpOwotCQlJTklUX0RFTEFZRURfV09SSyhyZWFwX3dvcmssIGNhY2hlX3JlYXApOworCQlJTklUX0RFTEFZRURfV09SS19ERUZFUlJBQkxFKHJlYXBfd29yaywgY2FjaGVfcmVhcCk7CiAJCXNjaGVkdWxlX2RlbGF5ZWRfd29ya19vbihjcHUsIHJlYXBfd29yaywKIAkJCQkJX19yb3VuZF9qaWZmaWVzX3JlbGF0aXZlKEhaLCBjcHUpKTsKIAl9CmRpZmYgLS1naXQgYS9tbS9zbG9iLmMgYi9tbS9zbG9iLmMKaW5kZXggMjM2MzFlMi4uZDU4MjE3MSAxMDA2NDQKLS0tIGEvbW0vc2xvYi5jCisrKyBiL21tL3Nsb2IuYwpAQCAtNjYsOCArNjYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9rbWVtdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rbWVtbGVhay5oPgorCisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2ttZW0uaD4KKwogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogLyoKQEAgLTM5NCw2ICszOTYsNyBAQAogCXNsb2JfdCAqcHJldiwgKm5leHQsICpiID0gKHNsb2JfdCAqKWJsb2NrOwogCXNsb2JpZHhfdCB1bml0czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBsaXN0X2hlYWQgKnNsb2JfbGlzdDsKIAogCWlmICh1bmxpa2VseShaRVJPX09SX05VTExfUFRSKGJsb2NrKSkpCiAJCXJldHVybjsKQEAgLTQyMiw3ICs0MjUsMTMgQEAKIAkJc2V0X3Nsb2IoYiwgdW5pdHMsCiAJCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZykoYiArCiAJCQkJCVNMT0JfVU5JVFMoUEFHRV9TSVpFKSkgJiBQQUdFX01BU0spKTsKLQkJc2V0X3Nsb2JfcGFnZV9mcmVlKHNwLCAmZnJlZV9zbG9iX3NtYWxsKTsKKwkJaWYgKHNpemUgPCBTTE9CX0JSRUFLMSkKKwkJCXNsb2JfbGlzdCA9ICZmcmVlX3Nsb2Jfc21hbGw7CisJCWVsc2UgaWYgKHNpemUgPCBTTE9CX0JSRUFLMikKKwkJCXNsb2JfbGlzdCA9ICZmcmVlX3Nsb2JfbWVkaXVtOworCQllbHNlCisJCQlzbG9iX2xpc3QgPSAmZnJlZV9zbG9iX2xhcmdlOworCQlzZXRfc2xvYl9wYWdlX2ZyZWUoc3AsIHNsb2JfbGlzdCk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNjM5LDcgKzY0OCw2IEBACiAJaWYgKHVubGlrZWx5KGMtPmZsYWdzICYgU0xBQl9ERVNUUk9ZX0JZX1JDVSkpIHsKIAkJc3RydWN0IHNsb2JfcmN1ICpzbG9iX3JjdTsKIAkJc2xvYl9yY3UgPSBiICsgKGMtPnNpemUgLSBzaXplb2Yoc3RydWN0IHNsb2JfcmN1KSk7Ci0JCUlOSVRfUkNVX0hFQUQoJnNsb2JfcmN1LT5oZWFkKTsKIAkJc2xvYl9yY3UtPnNpemUgPSBjLT5zaXplOwogCQljYWxsX3JjdSgmc2xvYl9yY3UtPmhlYWQsIGttZW1fcmN1X2ZyZWUpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggNTc4ZjY4Zi4uMTNmZmZlMSAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCisrKyBiL21tL3NsdWIuYwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rbWVtdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rbWVtY2hlY2suaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVzZXQuaD4KQEAgLTEwNywxMSArMTA2LDE3IEBACiAgKiAJCQl0aGUgZmFzdCBwYXRoIGFuZCBkaXNhYmxlcyBsb2NrbGVzcyBmcmVlbGlzdHMuCiAgKi8KIAorI2RlZmluZSBTTEFCX0RFQlVHX0ZMQUdTIChTTEFCX1JFRF9aT05FIHwgU0xBQl9QT0lTT04gfCBTTEFCX1NUT1JFX1VTRVIgfCBcCisJCVNMQUJfVFJBQ0UgfCBTTEFCX0RFQlVHX0ZSRUUpCisKK3N0YXRpYyBpbmxpbmUgaW50IGttZW1fY2FjaGVfZGVidWcoc3RydWN0IGttZW1fY2FjaGUgKnMpCit7CiAjaWZkZWYgQ09ORklHX1NMVUJfREVCVUcKLSNkZWZpbmUgU0xBQkRFQlVHIDEKKwlyZXR1cm4gdW5saWtlbHkocy0+ZmxhZ3MgJiBTTEFCX0RFQlVHX0ZMQUdTKTsKICNlbHNlCi0jZGVmaW5lIFNMQUJERUJVRyAwCisJcmV0dXJuIDA7CiAjZW5kaWYKK30KIAogLyoKICAqIElzc3VlcyBzdGlsbCB0byBiZSByZXNvbHZlZDoKQEAgLTE2Miw4ICsxNjcsOCBAQAogI2RlZmluZSBNQVhfT0JKU19QRVJfUEFHRQk2NTUzNSAvKiBzaW5jZSBwYWdlLm9iamVjdHMgaXMgdTE2ICovCiAKIC8qIEludGVybmFsIFNMVUIgZmxhZ3MgKi8KLSNkZWZpbmUgX19PQkpFQ1RfUE9JU09OCQkweDgwMDAwMDAwIC8qIFBvaXNvbiBvYmplY3QgKi8KLSNkZWZpbmUgX19TWVNGU19BRERfREVGRVJSRUQJMHg0MDAwMDAwMCAvKiBOb3QgeWV0IHZpc2libGUgdmlhIHN5c2ZzICovCisjZGVmaW5lIF9fT0JKRUNUX1BPSVNPTgkJMHg4MDAwMDAwMFVMIC8qIFBvaXNvbiBvYmplY3QgKi8KKyNkZWZpbmUgX19TWVNGU19BRERfREVGRVJSRUQJMHg0MDAwMDAwMFVMIC8qIE5vdCB5ZXQgdmlzaWJsZSB2aWEgc3lzZnMgKi8KIAogc3RhdGljIGludCBrbWVtX3NpemUgPSBzaXplb2Yoc3RydWN0IGttZW1fY2FjaGUpOwogCkBAIC0xMDczLDcgKzEwNzgsNyBAQAogCiAJZmxhZ3MgfD0gX19HRlBfTk9UUkFDSzsKIAotCWlmIChub2RlID09IC0xKQorCWlmIChub2RlID09IE5VTUFfTk9fTk9ERSkKIAkJcmV0dXJuIGFsbG9jX3BhZ2VzKGZsYWdzLCBvcmRlcik7CiAJZWxzZQogCQlyZXR1cm4gYWxsb2NfcGFnZXNfZXhhY3Rfbm9kZShub2RlLCBmbGFncywgb3JkZXIpOwpAQCAtMTE1Nyw5ICsxMTYyLDYgQEAKIAlpbmNfc2xhYnNfbm9kZShzLCBwYWdlX3RvX25pZChwYWdlKSwgcGFnZS0+b2JqZWN0cyk7CiAJcGFnZS0+c2xhYiA9IHM7CiAJcGFnZS0+ZmxhZ3MgfD0gMSA8PCBQR19zbGFiOwotCWlmIChzLT5mbGFncyAmIChTTEFCX0RFQlVHX0ZSRUUgfCBTTEFCX1JFRF9aT05FIHwgU0xBQl9QT0lTT04gfAotCQkJU0xBQl9TVE9SRV9VU0VSIHwgU0xBQl9UUkFDRSkpCi0JCV9fU2V0UGFnZVNsdWJEZWJ1ZyhwYWdlKTsKIAogCXN0YXJ0ID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCkBAIC0xMTg2LDE0ICsxMTg4LDEzIEBACiAJaW50IG9yZGVyID0gY29tcG91bmRfb3JkZXIocGFnZSk7CiAJaW50IHBhZ2VzID0gMSA8PCBvcmRlcjsKIAotCWlmICh1bmxpa2VseShTTEFCREVCVUcgJiYgUGFnZVNsdWJEZWJ1ZyhwYWdlKSkpIHsKKwlpZiAoa21lbV9jYWNoZV9kZWJ1ZyhzKSkgewogCQl2b2lkICpwOwogCiAJCXNsYWJfcGFkX2NoZWNrKHMsIHBhZ2UpOwogCQlmb3JfZWFjaF9vYmplY3QocCwgcywgcGFnZV9hZGRyZXNzKHBhZ2UpLAogCQkJCQkJcGFnZS0+b2JqZWN0cykKIAkJCWNoZWNrX29iamVjdChzLCBwYWdlLCBwLCAwKTsKLQkJX19DbGVhclBhZ2VTbHViRGVidWcocGFnZSk7CiAJfQogCiAJa21lbWNoZWNrX2ZyZWVfc2hhZG93KHBhZ2UsIGNvbXBvdW5kX29yZGVyKHBhZ2UpKTsKQEAgLTEzODcsMTAgKzEzODgsMTAgQEAKIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZ2V0X3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQlpbnQgc2VhcmNobm9kZSA9IChub2RlID09IC0xKSA/IG51bWFfbm9kZV9pZCgpIDogbm9kZTsKKwlpbnQgc2VhcmNobm9kZSA9IChub2RlID09IE5VTUFfTk9fTk9ERSkgPyBudW1hX25vZGVfaWQoKSA6IG5vZGU7CiAKIAlwYWdlID0gZ2V0X3BhcnRpYWxfbm9kZShnZXRfbm9kZShzLCBzZWFyY2hub2RlKSk7Ci0JaWYgKHBhZ2UgfHwgKGZsYWdzICYgX19HRlBfVEhJU05PREUpKQorCWlmIChwYWdlIHx8IG5vZGUgIT0gLTEpCiAJCXJldHVybiBwYWdlOwogCiAJcmV0dXJuIGdldF9hbnlfcGFydGlhbChzLCBmbGFncyk7CkBAIC0xNDE1LDggKzE0MTYsNyBAQAogCQkJc3RhdChzLCB0YWlsID8gREVBQ1RJVkFURV9UT19UQUlMIDogREVBQ1RJVkFURV9UT19IRUFEKTsKIAkJfSBlbHNlIHsKIAkJCXN0YXQocywgREVBQ1RJVkFURV9GVUxMKTsKLQkJCWlmIChTTEFCREVCVUcgJiYgUGFnZVNsdWJEZWJ1ZyhwYWdlKSAmJgotCQkJCQkJKHMtPmZsYWdzICYgU0xBQl9TVE9SRV9VU0VSKSkKKwkJCWlmIChrbWVtX2NhY2hlX2RlYnVnKHMpICYmIChzLT5mbGFncyAmIFNMQUJfU1RPUkVfVVNFUikpCiAJCQkJYWRkX2Z1bGwobiwgcGFnZSk7CiAJCX0KIAkJc2xhYl91bmxvY2socGFnZSk7CkBAIC0xNTE1LDcgKzE1MTUsNyBAQAogc3RhdGljIGlubGluZSBpbnQgbm9kZV9tYXRjaChzdHJ1Y3Qga21lbV9jYWNoZV9jcHUgKmMsIGludCBub2RlKQogewogI2lmZGVmIENPTkZJR19OVU1BCi0JaWYgKG5vZGUgIT0gLTEgJiYgYy0+bm9kZSAhPSBub2RlKQorCWlmIChub2RlICE9IE5VTUFfTk9fTk9ERSAmJiBjLT5ub2RlICE9IG5vZGUpCiAJCXJldHVybiAwOwogI2VuZGlmCiAJcmV0dXJuIDE7CkBAIC0xNjI0LDcgKzE2MjQsNyBAQAogCW9iamVjdCA9IGMtPnBhZ2UtPmZyZWVsaXN0OwogCWlmICh1bmxpa2VseSghb2JqZWN0KSkKIAkJZ290byBhbm90aGVyX3NsYWI7Ci0JaWYgKHVubGlrZWx5KFNMQUJERUJVRyAmJiBQYWdlU2x1YkRlYnVnKGMtPnBhZ2UpKSkKKwlpZiAoa21lbV9jYWNoZV9kZWJ1ZyhzKSkKIAkJZ290byBkZWJ1ZzsKIAogCWMtPmZyZWVsaXN0ID0gZ2V0X2ZyZWVwb2ludGVyKHMsIG9iamVjdCk7CkBAIC0xNzI3LDcgKzE3MjcsNyBAQAogCiB2b2lkICprbWVtX2NhY2hlX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncykKIHsKLQl2b2lkICpyZXQgPSBzbGFiX2FsbG9jKHMsIGdmcGZsYWdzLCAtMSwgX1JFVF9JUF8pOworCXZvaWQgKnJldCA9IHNsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIE5VTUFfTk9fTk9ERSwgX1JFVF9JUF8pOwogCiAJdHJhY2Vfa21lbV9jYWNoZV9hbGxvYyhfUkVUX0lQXywgcmV0LCBzLT5vYmpzaXplLCBzLT5zaXplLCBnZnBmbGFncyk7CiAKQEAgLTE3MzgsNyArMTczOCw3IEBACiAjaWZkZWYgQ09ORklHX1RSQUNJTkcKIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm90cmFjZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MpCiB7Ci0JcmV0dXJuIHNsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIC0xLCBfUkVUX0lQXyk7CisJcmV0dXJuIHNsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIE5VTUFfTk9fTk9ERSwgX1JFVF9JUF8pOwogfQogRVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jX25vdHJhY2UpOwogI2VuZGlmCkBAIC0xNzgzLDcgKzE3ODMsNyBAQAogCXN0YXQocywgRlJFRV9TTE9XUEFUSCk7CiAJc2xhYl9sb2NrKHBhZ2UpOwogCi0JaWYgKHVubGlrZWx5KFNMQUJERUJVRyAmJiBQYWdlU2x1YkRlYnVnKHBhZ2UpKSkKKwlpZiAoa21lbV9jYWNoZV9kZWJ1ZyhzKSkKIAkJZ290byBkZWJ1ZzsKIAogY2hlY2tzX29rOgpAQCAtMjQ5MCw3ICsyNDkwLDYgQEAKIAlzLT5yZWZjb3VudC0tOwogCWlmICghcy0+cmVmY291bnQpIHsKIAkJbGlzdF9kZWwoJnMtPmxpc3QpOwotCQl1cF93cml0ZSgmc2x1Yl9sb2NrKTsKIAkJaWYgKGttZW1fY2FjaGVfY2xvc2UocykpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiU0xVQiAlczogJXMgY2FsbGVkIGZvciBjYWNoZSB0aGF0ICIKIAkJCQkic3RpbGwgaGFzIG9iamVjdHMuXG4iLCBzLT5uYW1lLCBfX2Z1bmNfXyk7CkBAIC0yNDk5LDggKzI0OTgsOCBAQAogCQlpZiAocy0+ZmxhZ3MgJiBTTEFCX0RFU1RST1lfQllfUkNVKQogCQkJcmN1X2JhcnJpZXIoKTsKIAkJc3lzZnNfc2xhYl9yZW1vdmUocyk7Ci0JfSBlbHNlCi0JCXVwX3dyaXRlKCZzbHViX2xvY2spOworCX0KKwl1cF93cml0ZSgmc2x1Yl9sb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9kZXN0cm95KTsKIApAQCAtMjcyOCw3ICsyNzI3LDcgQEAKIAlpZiAodW5saWtlbHkoWkVST19PUl9OVUxMX1BUUihzKSkpCiAJCXJldHVybiBzOwogCi0JcmV0ID0gc2xhYl9hbGxvYyhzLCBmbGFncywgLTEsIF9SRVRfSVBfKTsKKwlyZXQgPSBzbGFiX2FsbG9jKHMsIGZsYWdzLCBOVU1BX05PX05PREUsIF9SRVRfSVBfKTsKIAogCXRyYWNlX2ttYWxsb2MoX1JFVF9JUF8sIHJldCwgc2l6ZSwgcy0+c2l6ZSwgZmxhZ3MpOwogCkBAIC0zMTE4LDkgKzMxMTcsMTIgQEAKIAlzbGFiX3N0YXRlID0gVVA7CiAKIAkvKiBQcm92aWRlIHRoZSBjb3JyZWN0IGttYWxsb2MgbmFtZXMgbm93IHRoYXQgdGhlIGNhY2hlcyBhcmUgdXAgKi8KLQlmb3IgKGkgPSBLTUFMTE9DX1NISUZUX0xPVzsgaSA8IFNMVUJfUEFHRV9TSElGVDsgaSsrKQotCQlrbWFsbG9jX2NhY2hlc1tpXS4gbmFtZSA9Ci0JCQlrYXNwcmludGYoR0ZQX05PV0FJVCwgImttYWxsb2MtJWQiLCAxIDw8IGkpOworCWZvciAoaSA9IEtNQUxMT0NfU0hJRlRfTE9XOyBpIDwgU0xVQl9QQUdFX1NISUZUOyBpKyspIHsKKwkJY2hhciAqcyA9IGthc3ByaW50ZihHRlBfTk9XQUlULCAia21hbGxvYy0lZCIsIDEgPDwgaSk7CisKKwkJQlVHX09OKCFzKTsKKwkJa21hbGxvY19jYWNoZXNbaV0ubmFtZSA9IHM7CisJfQogCiAjaWZkZWYgQ09ORklHX1NNUAogCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmc2xhYl9ub3RpZmllcik7CkBAIC0zMjIzLDE0ICszMjI1LDEyIEBACiAJCSAqLwogCQlzLT5vYmpzaXplID0gbWF4KHMtPm9ianNpemUsIChpbnQpc2l6ZSk7CiAJCXMtPmludXNlID0gbWF4X3QoaW50LCBzLT5pbnVzZSwgQUxJR04oc2l6ZSwgc2l6ZW9mKHZvaWQgKikpKTsKLQkJdXBfd3JpdGUoJnNsdWJfbG9jayk7CiAKIAkJaWYgKHN5c2ZzX3NsYWJfYWxpYXMocywgbmFtZSkpIHsKLQkJCWRvd25fd3JpdGUoJnNsdWJfbG9jayk7CiAJCQlzLT5yZWZjb3VudC0tOwotCQkJdXBfd3JpdGUoJnNsdWJfbG9jayk7CiAJCQlnb3RvIGVycjsKIAkJfQorCQl1cF93cml0ZSgmc2x1Yl9sb2NrKTsKIAkJcmV0dXJuIHM7CiAJfQogCkBAIC0zMjM5LDE0ICszMjM5LDEyIEBACiAJCWlmIChrbWVtX2NhY2hlX29wZW4ocywgR0ZQX0tFUk5FTCwgbmFtZSwKIAkJCQlzaXplLCBhbGlnbiwgZmxhZ3MsIGN0b3IpKSB7CiAJCQlsaXN0X2FkZCgmcy0+bGlzdCwgJnNsYWJfY2FjaGVzKTsKLQkJCXVwX3dyaXRlKCZzbHViX2xvY2spOwogCQkJaWYgKHN5c2ZzX3NsYWJfYWRkKHMpKSB7Ci0JCQkJZG93bl93cml0ZSgmc2x1Yl9sb2NrKTsKIAkJCQlsaXN0X2RlbCgmcy0+bGlzdCk7Ci0JCQkJdXBfd3JpdGUoJnNsdWJfbG9jayk7CiAJCQkJa2ZyZWUocyk7CiAJCQkJZ290byBlcnI7CiAJCQl9CisJCQl1cF93cml0ZSgmc2x1Yl9sb2NrKTsKIAkJCXJldHVybiBzOwogCQl9CiAJCWtmcmVlKHMpOwpAQCAtMzMxMiw3ICszMzEwLDcgQEAKIAlpZiAodW5saWtlbHkoWkVST19PUl9OVUxMX1BUUihzKSkpCiAJCXJldHVybiBzOwogCi0JcmV0ID0gc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgLTEsIGNhbGxlcik7CisJcmV0ID0gc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgTlVNQV9OT19OT0RFLCBjYWxsZXIpOwogCiAJLyogSG9ub3IgdGhlIGNhbGwgc2l0ZSBwb2ludGVyIHdlIHJlY2lldmVkLiAqLwogCXRyYWNlX2ttYWxsb2MoY2FsbGVyLCByZXQsIHNpemUsIHMtPnNpemUsIGdmcGZsYWdzKTsKQEAgLTMzOTUsMTYgKzMzOTMsNiBAQAogCX0gZWxzZQogCQlwcmludGsoS0VSTl9JTkZPICJTTFVCICVzOiBTa2lwcGVkIGJ1c3kgc2xhYiAweCVwXG4iLAogCQkJcy0+bmFtZSwgcGFnZSk7Ci0KLQlpZiAocy0+ZmxhZ3MgJiBERUJVR19ERUZBVUxUX0ZMQUdTKSB7Ci0JCWlmICghUGFnZVNsdWJEZWJ1ZyhwYWdlKSkKLQkJCXByaW50ayhLRVJOX0VSUiAiU0xVQiAlczogU2x1YkRlYnVnIG5vdCBzZXQgIgotCQkJCSJvbiBzbGFiIDB4JXBcbiIsIHMtPm5hbWUsIHBhZ2UpOwotCX0gZWxzZSB7Ci0JCWlmIChQYWdlU2x1YkRlYnVnKHBhZ2UpKQotCQkJcHJpbnRrKEtFUk5fRVJSICJTTFVCICVzOiBTbHViRGVidWcgc2V0IG9uICIKLQkJCQkic2xhYiAweCVwXG4iLCBzLT5uYW1lLCBwYWdlKTsKLQl9CiB9CiAKIHN0YXRpYyBpbnQgdmFsaWRhdGVfc2xhYl9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLApAQCAtNDUwNCw2ICs0NDkyLDEzIEBACiAKIHN0YXRpYyB2b2lkIHN5c2ZzX3NsYWJfcmVtb3ZlKHN0cnVjdCBrbWVtX2NhY2hlICpzKQogeworCWlmIChzbGFiX3N0YXRlIDwgU1lTRlMpCisJCS8qCisJCSAqIFN5c2ZzIGhhcyBub3QgYmVlbiBzZXR1cCB5ZXQgc28gbm8gbmVlZCB0byByZW1vdmUgdGhlCisJCSAqIGNhY2hlIGZyb20gc3lzZnMuCisJCSAqLworCQlyZXR1cm47CisKIAlrb2JqZWN0X3VldmVudCgmcy0+a29iaiwgS09CSl9SRU1PVkUpOwogCWtvYmplY3RfZGVsKCZzLT5rb2JqKTsKIAlrb2JqZWN0X3B1dCgmcy0+a29iaik7CkBAIC00NTQ5LDggKzQ1NDQsMTEgQEAKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKIAlpbnQgZXJyOwogCisJZG93bl93cml0ZSgmc2x1Yl9sb2NrKTsKKwogCXNsYWJfa3NldCA9IGtzZXRfY3JlYXRlX2FuZF9hZGQoInNsYWIiLCAmc2xhYl91ZXZlbnRfb3BzLCBrZXJuZWxfa29iaik7CiAJaWYgKCFzbGFiX2tzZXQpIHsKKwkJdXBfd3JpdGUoJnNsdWJfbG9jayk7CiAJCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90IHJlZ2lzdGVyIHNsYWIgc3Vic3lzdGVtLlxuIik7CiAJCXJldHVybiAtRU5PU1lTOwogCX0KQEAgLTQ1NzUsNiArNDU3Myw3IEBACiAJCWtmcmVlKGFsKTsKIAl9CiAKKwl1cF93cml0ZSgmc2x1Yl9sb2NrKTsKIAlyZXNpbGllbmN5X3Rlc3QoKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCBhZTAwNzQ2Li5iN2UzMTRiIDEwMDY0NAotLS0gYS9tbS92bWFsbG9jLmMKKysrIGIvbW0vdm1hbGxvYy5jCkBAIC0yNDAzLDcgKzI0MDMsNyBAQAogCQlzZXFfcHJpbnRmKG0sICIgcGFnZXM9JWQiLCB2LT5ucl9wYWdlcyk7CiAKIAlpZiAodi0+cGh5c19hZGRyKQotCQlzZXFfcHJpbnRmKG0sICIgcGh5cz0lbHgiLCB2LT5waHlzX2FkZHIpOworCQlzZXFfcHJpbnRmKG0sICIgcGh5cz0lbGx4IiwgKHVuc2lnbmVkIGxvbmcgbG9uZyl2LT5waHlzX2FkZHIpOwogCiAJaWYgKHYtPmZsYWdzICYgVk1fSU9SRU1BUCkKIAkJc2VxX3ByaW50ZihtLCAiIGlvcmVtYXAiKTsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggOWM3ZTU3Yy4uYjk0ZmUxYiAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKKysrIGIvbW0vdm1zY2FuLmMKQEAgLTIxMyw4ICsyMTMsOSBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2hyaW5rZXIsICZzaHJpbmtlcl9saXN0LCBsaXN0KSB7CiAJCXVuc2lnbmVkIGxvbmcgbG9uZyBkZWx0YTsKIAkJdW5zaWduZWQgbG9uZyB0b3RhbF9zY2FuOwotCQl1bnNpZ25lZCBsb25nIG1heF9wYXNzID0gKCpzaHJpbmtlci0+c2hyaW5rKSgwLCBnZnBfbWFzayk7CisJCXVuc2lnbmVkIGxvbmcgbWF4X3Bhc3M7CiAKKwkJbWF4X3Bhc3MgPSAoKnNocmlua2VyLT5zaHJpbmspKHNocmlua2VyLCAwLCBnZnBfbWFzayk7CiAJCWRlbHRhID0gKDQgKiBzY2FubmVkKSAvIHNocmlua2VyLT5zZWVrczsKIAkJZGVsdGEgKj0gbWF4X3Bhc3M7CiAJCWRvX2RpdihkZWx0YSwgbHJ1X3BhZ2VzICsgMSk7CkBAIC0yNDIsOCArMjQzLDkgQEAKIAkJCWludCBzaHJpbmtfcmV0OwogCQkJaW50IG5yX2JlZm9yZTsKIAotCQkJbnJfYmVmb3JlID0gKCpzaHJpbmtlci0+c2hyaW5rKSgwLCBnZnBfbWFzayk7Ci0JCQlzaHJpbmtfcmV0ID0gKCpzaHJpbmtlci0+c2hyaW5rKSh0aGlzX3NjYW4sIGdmcF9tYXNrKTsKKwkJCW5yX2JlZm9yZSA9ICgqc2hyaW5rZXItPnNocmluaykoc2hyaW5rZXIsIDAsIGdmcF9tYXNrKTsKKwkJCXNocmlua19yZXQgPSAoKnNocmlua2VyLT5zaHJpbmspKHNocmlua2VyLCB0aGlzX3NjYW4sCisJCQkJCQkJCWdmcF9tYXNrKTsKIAkJCWlmIChzaHJpbmtfcmV0ID09IC0xKQogCQkJCWJyZWFrOwogCQkJaWYgKHNocmlua19yZXQgPCBucl9iZWZvcmUpCkBAIC0yOTYsNyArMjk4LDcgQEAKIHN0YXRpYyB2b2lkIGhhbmRsZV93cml0ZV9lcnJvcihzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IGVycm9yKQogewotCWxvY2tfcGFnZShwYWdlKTsKKwlsb2NrX3BhZ2Vfbm9zeW5jKHBhZ2UpOwogCWlmIChwYWdlX21hcHBpbmcocGFnZSkgPT0gbWFwcGluZykKIAkJbWFwcGluZ19zZXRfZXJyb3IobWFwcGluZywgZXJyb3IpOwogCXVubG9ja19wYWdlKHBhZ2UpOwpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uYyBiL25ldC84MDIxcS92bGFuLmMKaW5kZXggM2MxYzhjMS4uYTJhZDE1MiAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW4uYworKysgYi9uZXQvODAyMXEvdmxhbi5jCkBAIC0xNTUsOSArMTU1LDEwIEBACiAJQlVHX09OKCFncnApOwogCiAJLyogVGFrZSBpdCBvdXQgb2Ygb3VyIG93biBzdHJ1Y3R1cmVzLCBidXQgYmUgc3VyZSB0byBpbnRlcmxvY2sgd2l0aAotCSAqIEhXIGFjY2VsZXJhdGluZyBkZXZpY2VzIG9yIFNXIHZsYW4gaW5wdXQgcGFja2V0IHByb2Nlc3NpbmcuCisJICogSFcgYWNjZWxlcmF0aW5nIGRldmljZXMgb3IgU1cgdmxhbiBpbnB1dCBwYWNrZXQgcHJvY2Vzc2luZyBpZgorCSAqIFZMQU4gaXMgbm90IDAgKGxlYXZlIGl0IHRoZXJlIGZvciA4MDIuMXApLgogCSAqLwotCWlmIChyZWFsX2Rldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fRklMVEVSKQorCWlmICh2bGFuX2lkICYmIChyZWFsX2Rldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fRklMVEVSKSkKIAkJb3BzLT5uZG9fdmxhbl9yeF9raWxsX3ZpZChyZWFsX2Rldiwgdmxhbl9pZCk7CiAKIAlncnAtPm5yX3ZsYW5zLS07CkBAIC00MTksNiArNDIwLDE0IEBACiAJaWYgKGlzX3ZsYW5fZGV2KGRldikpCiAJCV9fdmxhbl9kZXZpY2VfZXZlbnQoZGV2LCBldmVudCk7CiAKKwlpZiAoKGV2ZW50ID09IE5FVERFVl9VUCkgJiYKKwkgICAgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fRklMVEVSKSAmJgorCSAgICBkZXYtPm5ldGRldl9vcHMtPm5kb192bGFuX3J4X2FkZF92aWQpIHsKKwkJcHJfaW5mbygiODAyMXE6IGFkZGluZyBWTEFOIDAgdG8gSFcgZmlsdGVyIG9uIGRldmljZSAlc1xuIiwKKwkJCWRldi0+bmFtZSk7CisJCWRldi0+bmV0ZGV2X29wcy0+bmRvX3ZsYW5fcnhfYWRkX3ZpZChkZXYsIDApOworCX0KKwogCWdycCA9IF9fdmxhbl9maW5kX2dyb3VwKGRldik7CiAJaWYgKCFncnApCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uaCBiL25ldC84MDIxcS92bGFuLmgKaW5kZXggNmFiZGNhYy4uOGQ5NTAzYSAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW4uaAorKysgYi9uZXQvODAyMXEvdmxhbi5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfX0JFTl9WTEFOXzgwMl8xUV9JTkNfXwogCiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2luY2x1ZGUgPGxpbnV4L3U2NF9zdGF0c19zeW5jLmg+CiAKIAogLyoqCkBAIC0yMSwxNCArMjIsMTYgQEAKICAqCXN0cnVjdCB2bGFuX3J4X3N0YXRzIC0gVkxBTiBwZXJjcHUgcnggc3RhdHMKICAqCUByeF9wYWNrZXRzOiBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cwogICoJQHJ4X2J5dGVzOiBudW1iZXIgb2YgcmVjZWl2ZWQgYnl0ZXMKLSAqCUBtdWx0aWNhc3Q6IG51bWJlciBvZiByZWNlaXZlZCBtdWx0aWNhc3QgcGFja2V0cworICoJQHJ4X211bHRpY2FzdDogbnVtYmVyIG9mIHJlY2VpdmVkIG11bHRpY2FzdCBwYWNrZXRzCisgKglAc3luY3A6IHN5bmNocm9uaXphdGlvbiBwb2ludCBmb3IgNjRiaXQgY291bnRlcnMKICAqCUByeF9lcnJvcnM6IG51bWJlciBvZiBlcnJvcnMKICAqLwogc3RydWN0IHZsYW5fcnhfc3RhdHMgewotCXVuc2lnbmVkIGxvbmcgcnhfcGFja2V0czsKLQl1bnNpZ25lZCBsb25nIHJ4X2J5dGVzOwotCXVuc2lnbmVkIGxvbmcgbXVsdGljYXN0OwotCXVuc2lnbmVkIGxvbmcgcnhfZXJyb3JzOworCXU2NAkJCXJ4X3BhY2tldHM7CisJdTY0CQkJcnhfYnl0ZXM7CisJdTY0CQkJcnhfbXVsdGljYXN0OworCXN0cnVjdCB1NjRfc3RhdHNfc3luYwlzeW5jcDsKKwl1bnNpZ25lZCBsb25nCQlyeF9lcnJvcnM7CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuX2NvcmUuYyBiL25ldC84MDIxcS92bGFuX2NvcmUuYwppbmRleCA1MGY1OGY1Zi4uMDFkZGIwNCAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW5fY29yZS5jCisrKyBiL25ldC84MDIxcS92bGFuX2NvcmUuYwpAQCAtOCw2ICs4LDkgQEAKIGludCBfX3ZsYW5faHdhY2NlbF9yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwLAogCQkgICAgICB1MTYgdmxhbl90Y2ksIGludCBwb2xsaW5nKQogeworCXN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2RldjsKKwl1MTYgdmxhbl9pZDsKKwogCWlmIChuZXRwb2xsX3J4KHNrYikpCiAJCXJldHVybiBORVRfUlhfRFJPUDsKIApAQCAtMTYsOSArMTksMTIgQEAKIAogCXNrYi0+c2tiX2lpZiA9IHNrYi0+ZGV2LT5pZmluZGV4OwogCV9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCB2bGFuX3RjaSk7Ci0Jc2tiLT5kZXYgPSB2bGFuX2dyb3VwX2dldF9kZXZpY2UoZ3JwLCB2bGFuX3RjaSAmIFZMQU5fVklEX01BU0spOworCXZsYW5faWQgPSB2bGFuX3RjaSAmIFZMQU5fVklEX01BU0s7CisJdmxhbl9kZXYgPSB2bGFuX2dyb3VwX2dldF9kZXZpY2UoZ3JwLCB2bGFuX2lkKTsKIAotCWlmICghc2tiLT5kZXYpCisJaWYgKHZsYW5fZGV2KQorCQlza2ItPmRldiA9IHZsYW5fZGV2OworCWVsc2UgaWYgKHZsYW5faWQpCiAJCWdvdG8gZHJvcDsKIAogCXJldHVybiAocG9sbGluZyA/IG5ldGlmX3JlY2VpdmVfc2tiKHNrYikgOiBuZXRpZl9yeChza2IpKTsKQEAgLTQxLDkgKzQ3LDkgQEAKIAlza2ItPnByaW9yaXR5ID0gdmxhbl9nZXRfaW5ncmVzc19wcmlvcml0eShkZXYsIHNrYi0+dmxhbl90Y2kpOwogCXNrYi0+dmxhbl90Y2kgPSAwOwogCi0Jcnhfc3RhdHMgPSBwZXJfY3B1X3B0cih2bGFuX2Rldl9pbmZvKGRldiktPnZsYW5fcnhfc3RhdHMsCi0JCQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlyeF9zdGF0cyA9IHRoaXNfY3B1X3B0cih2bGFuX2Rldl9pbmZvKGRldiktPnZsYW5fcnhfc3RhdHMpOwogCisJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmcnhfc3RhdHMtPnN5bmNwKTsKIAlyeF9zdGF0cy0+cnhfcGFja2V0cysrOwogCXJ4X3N0YXRzLT5yeF9ieXRlcyArPSBza2ItPmxlbjsKIApAQCAtNTEsNyArNTcsNyBAQAogCWNhc2UgUEFDS0VUX0JST0FEQ0FTVDoKIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVRfTVVMVElDQVNUOgotCQlyeF9zdGF0cy0+bXVsdGljYXN0Kys7CisJCXJ4X3N0YXRzLT5yeF9tdWx0aWNhc3QrKzsKIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVRfT1RIRVJIT1NUOgogCQkvKiBPdXIgbG93ZXIgbGF5ZXIgdGhpbmtzIHRoaXMgaXMgbm90IGxvY2FsLCBsZXQncyBtYWtlIHN1cmUuCkBAIC02Miw2ICs2OCw3IEBACiAJCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7CiAJCWJyZWFrOwogCX0KKwl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmcnhfc3RhdHMtPnN5bmNwKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODIsMTUgKzg5LDIwIEBACiAJCXVuc2lnbmVkIGludCB2bGFuX3RjaSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqcDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9kZXY7CisJdTE2IHZsYW5faWQ7CiAKIAlpZiAoc2tiX2JvbmRfc2hvdWxkX2Ryb3Aoc2tiLCBBQ0NFU1NfT05DRShza2ItPmRldi0+bWFzdGVyKSkpCiAJCXNrYi0+ZGVsaXZlcl9ub193Y2FyZCA9IDE7CiAKIAlza2ItPnNrYl9paWYgPSBza2ItPmRldi0+aWZpbmRleDsKIAlfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgdmxhbl90Y2kpOwotCXNrYi0+ZGV2ID0gdmxhbl9ncm91cF9nZXRfZGV2aWNlKGdycCwgdmxhbl90Y2kgJiBWTEFOX1ZJRF9NQVNLKTsKKwl2bGFuX2lkID0gdmxhbl90Y2kgJiBWTEFOX1ZJRF9NQVNLOworCXZsYW5fZGV2ID0gdmxhbl9ncm91cF9nZXRfZGV2aWNlKGdycCwgdmxhbl9pZCk7CiAKLQlpZiAoIXNrYi0+ZGV2KQorCWlmICh2bGFuX2RldikKKwkJc2tiLT5kZXYgPSB2bGFuX2RldjsKKwllbHNlIGlmICh2bGFuX2lkKQogCQlnb3RvIGRyb3A7CiAKIAlmb3IgKHAgPSBuYXBpLT5ncm9fbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuX2Rldi5jIGIvbmV0LzgwMjFxL3ZsYW5fZGV2LmMKaW5kZXggNTI5ODQyNi4uM2Q1OWM5YiAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW5fZGV2LmMKKysrIGIvbmV0LzgwMjFxL3ZsYW5fZGV2LmMKQEAgLTE0Miw2ICsxNDIsNyBAQAogewogCXN0cnVjdCB2bGFuX2hkciAqdmhkcjsKIAlzdHJ1Y3Qgdmxhbl9yeF9zdGF0cyAqcnhfc3RhdHM7CisJc3RydWN0IG5ldF9kZXZpY2UgKnZsYW5fZGV2OwogCXUxNiB2bGFuX2lkOwogCXUxNiB2bGFuX3RjaTsKIApAQCAtMTU3LDUzICsxNTgsNzEgQEAKIAl2bGFuX2lkID0gdmxhbl90Y2kgJiBWTEFOX1ZJRF9NQVNLOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCXNrYi0+ZGV2ID0gX19maW5kX3ZsYW5fZGV2KGRldiwgdmxhbl9pZCk7Ci0JaWYgKCFza2ItPmRldikgewotCQlwcl9kZWJ1ZygiJXM6IEVSUk9SOiBObyBuZXRfZGV2aWNlIGZvciBWSUQ6ICV1IG9uIGRldjogJXNcbiIsCi0JCQkgX19mdW5jX18sIHZsYW5faWQsIGRldi0+bmFtZSk7Ci0JCWdvdG8gZXJyX3VubG9jazsKLQl9CisJdmxhbl9kZXYgPSBfX2ZpbmRfdmxhbl9kZXYoZGV2LCB2bGFuX2lkKTsKIAotCXJ4X3N0YXRzID0gcGVyX2NwdV9wdHIodmxhbl9kZXZfaW5mbyhza2ItPmRldiktPnZsYW5fcnhfc3RhdHMsCi0JCQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlyeF9zdGF0cy0+cnhfcGFja2V0cysrOwotCXJ4X3N0YXRzLT5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkvKiBJZiB0aGUgVkxBTiBkZXZpY2UgaXMgZGVmaW5lZCwgd2UgdXNlIGl0LgorCSAqIElmIG5vdCwgYW5kIHRoZSBWSUQgaXMgMCwgaXQgaXMgYSA4MDIuMXAgcGFja2V0IChub3QKKwkgKiByZWFsbHkgYSBWTEFOKSwgc28gd2Ugd2lsbCBqdXN0IG5ldGlmX3J4IGl0IGxhdGVyIHRvIHRoZQorCSAqIG9yaWdpbmFsIGludGVyZmFjZSwgYnV0IHdpdGggdGhlIHNrYi0+cHJvdG8gc2V0IHRvIHRoZQorCSAqIHdyYXBwZWQgcHJvdG86IHdlIGRvIG5vdGhpbmcgaGVyZS4KKwkgKi8KKworCWlmICghdmxhbl9kZXYpIHsKKwkJaWYgKHZsYW5faWQpIHsKKwkJCXByX2RlYnVnKCIlczogRVJST1I6IE5vIG5ldF9kZXZpY2UgZm9yIFZJRDogJXUgb24gZGV2OiAlc1xuIiwKKwkJCQkgX19mdW5jX18sIHZsYW5faWQsIGRldi0+bmFtZSk7CisJCQlnb3RvIGVycl91bmxvY2s7CisJCX0KKwkJcnhfc3RhdHMgPSBOVUxMOworCX0gZWxzZSB7CisJCXNrYi0+ZGV2ID0gdmxhbl9kZXY7CisKKwkJcnhfc3RhdHMgPSBwZXJfY3B1X3B0cih2bGFuX2Rldl9pbmZvKHNrYi0+ZGV2KS0+dmxhbl9yeF9zdGF0cywKKwkJCQkJc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmcnhfc3RhdHMtPnN5bmNwKTsKKwkJcnhfc3RhdHMtPnJ4X3BhY2tldHMrKzsKKwkJcnhfc3RhdHMtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCisJCXNrYi0+cHJpb3JpdHkgPSB2bGFuX2dldF9pbmdyZXNzX3ByaW9yaXR5KHNrYi0+ZGV2LCB2bGFuX3RjaSk7CisKKwkJcHJfZGVidWcoIiVzOiBwcmlvcml0eTogJXUgZm9yIFRDSTogJWh1XG4iLAorCQkJIF9fZnVuY19fLCBza2ItPnByaW9yaXR5LCB2bGFuX3RjaSk7CisKKwkJc3dpdGNoIChza2ItPnBrdF90eXBlKSB7CisJCWNhc2UgUEFDS0VUX0JST0FEQ0FTVDoKKwkJCS8qIFllYWgsIHN0YXRzIGNvbGxlY3QgdGhlc2UgdG9nZXRoZXIuLiAqLworCQkJLyogc3RhdHMtPmJyb2FkY2FzdCArKzsgLy8gbm8gc3VjaCBjb3VudGVyIDotKCAqLworCQkJYnJlYWs7CisKKwkJY2FzZSBQQUNLRVRfTVVMVElDQVNUOgorCQkJcnhfc3RhdHMtPnJ4X211bHRpY2FzdCsrOworCQkJYnJlYWs7CisKKwkJY2FzZSBQQUNLRVRfT1RIRVJIT1NUOgorCQkJLyogT3VyIGxvd2VyIGxheWVyIHRoaW5rcyB0aGlzIGlzIG5vdCBsb2NhbCwgbGV0J3MgbWFrZQorCQkJICogc3VyZS4KKwkJCSAqIFRoaXMgYWxsb3dzIHRoZSBWTEFOIHRvIGhhdmUgYSBkaWZmZXJlbnQgTUFDIHRoYW4gdGhlCisJCQkgKiB1bmRlcmx5aW5nIGRldmljZSwgYW5kIHN0aWxsIHJvdXRlIGNvcnJlY3RseS4KKwkJCSAqLworCQkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIoZXRoX2hkcihza2IpLT5oX2Rlc3QsCisJCQkJCQlza2ItPmRldi0+ZGV2X2FkZHIpKQorCQkJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJnJ4X3N0YXRzLT5zeW5jcCk7CisJfQogCiAJc2tiX3B1bGxfcmNzdW0oc2tiLCBWTEFOX0hMRU4pOwotCi0Jc2tiLT5wcmlvcml0eSA9IHZsYW5fZ2V0X2luZ3Jlc3NfcHJpb3JpdHkoc2tiLT5kZXYsIHZsYW5fdGNpKTsKLQotCXByX2RlYnVnKCIlczogcHJpb3JpdHk6ICV1IGZvciBUQ0k6ICVodVxuIiwKLQkJIF9fZnVuY19fLCBza2ItPnByaW9yaXR5LCB2bGFuX3RjaSk7Ci0KLQlzd2l0Y2ggKHNrYi0+cGt0X3R5cGUpIHsKLQljYXNlIFBBQ0tFVF9CUk9BRENBU1Q6IC8qIFllYWgsIHN0YXRzIGNvbGxlY3QgdGhlc2UgdG9nZXRoZXIuLiAqLwotCQkvKiBzdGF0cy0+YnJvYWRjYXN0ICsrOyAvLyBubyBzdWNoIGNvdW50ZXIgOi0oICovCi0JCWJyZWFrOwotCi0JY2FzZSBQQUNLRVRfTVVMVElDQVNUOgotCQlyeF9zdGF0cy0+bXVsdGljYXN0Kys7Ci0JCWJyZWFrOwotCi0JY2FzZSBQQUNLRVRfT1RIRVJIT1NUOgotCQkvKiBPdXIgbG93ZXIgbGF5ZXIgdGhpbmtzIHRoaXMgaXMgbm90IGxvY2FsLCBsZXQncyBtYWtlIHN1cmUuCi0JCSAqIFRoaXMgYWxsb3dzIHRoZSBWTEFOIHRvIGhhdmUgYSBkaWZmZXJlbnQgTUFDIHRoYW4gdGhlCi0JCSAqIHVuZGVybHlpbmcgZGV2aWNlLCBhbmQgc3RpbGwgcm91dGUgY29ycmVjdGx5LgotCQkgKi8KLQkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIoZXRoX2hkcihza2IpLT5oX2Rlc3QsCi0JCQkJCXNrYi0+ZGV2LT5kZXZfYWRkcikpCi0JCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQogCXZsYW5fc2V0X2VuY2FwX3Byb3RvKHNrYiwgdmhkcik7CiAKLQlza2IgPSB2bGFuX2NoZWNrX3Jlb3JkZXJfaGVhZGVyKHNrYik7Ci0JaWYgKCFza2IpIHsKLQkJcnhfc3RhdHMtPnJ4X2Vycm9ycysrOwotCQlnb3RvIGVycl91bmxvY2s7CisJaWYgKHZsYW5fZGV2KSB7CisJCXNrYiA9IHZsYW5fY2hlY2tfcmVvcmRlcl9oZWFkZXIoc2tiKTsKKwkJaWYgKCFza2IpIHsKKwkJCXJ4X3N0YXRzLT5yeF9lcnJvcnMrKzsKKwkJCWdvdG8gZXJyX3VubG9jazsKKwkJfQogCX0KIAogCW5ldGlmX3J4KHNrYik7CkBAIC04MDEsMzcgKzgyMCw2NSBAQAogCXJldHVybiBkZXZfZXRodG9vbF9nZXRfZmxhZ3Modmxhbi0+cmVhbF9kZXYpOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnZsYW5fZGV2X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqdmxhbl9kZXZfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cykKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmZGV2LT5zdGF0czsKLQogCWRldl90eHFfc3RhdHNfZm9sZChkZXYsIHN0YXRzKTsKIAogCWlmICh2bGFuX2Rldl9pbmZvKGRldiktPnZsYW5fcnhfc3RhdHMpIHsKLQkJc3RydWN0IHZsYW5fcnhfc3RhdHMgKnAsIHJ4ID0gezB9OworCQlzdHJ1Y3Qgdmxhbl9yeF9zdGF0cyAqcCwgYWNjdW0gPSB7MH07CiAJCWludCBpOwogCiAJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CisJCQl1NjQgcnhwYWNrZXRzLCByeGJ5dGVzLCByeG11bHRpY2FzdDsKKwkJCXVuc2lnbmVkIGludCBzdGFydDsKKwogCQkJcCA9IHBlcl9jcHVfcHRyKHZsYW5fZGV2X2luZm8oZGV2KS0+dmxhbl9yeF9zdGF0cywgaSk7Ci0JCQlyeC5yeF9wYWNrZXRzICs9IHAtPnJ4X3BhY2tldHM7Ci0JCQlyeC5yeF9ieXRlcyAgICs9IHAtPnJ4X2J5dGVzOwotCQkJcngucnhfZXJyb3JzICArPSBwLT5yeF9lcnJvcnM7Ci0JCQlyeC5tdWx0aWNhc3QgICs9IHAtPm11bHRpY2FzdDsKKwkJCWRvIHsKKwkJCQlzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbl9iaCgmcC0+c3luY3ApOworCQkJCXJ4cGFja2V0cwk9IHAtPnJ4X3BhY2tldHM7CisJCQkJcnhieXRlcwkJPSBwLT5yeF9ieXRlczsKKwkJCQlyeG11bHRpY2FzdAk9IHAtPnJ4X211bHRpY2FzdDsKKwkJCX0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeV9iaCgmcC0+c3luY3AsIHN0YXJ0KSk7CisJCQlhY2N1bS5yeF9wYWNrZXRzICs9IHJ4cGFja2V0czsKKwkJCWFjY3VtLnJ4X2J5dGVzICAgKz0gcnhieXRlczsKKwkJCWFjY3VtLnJ4X211bHRpY2FzdCArPSByeG11bHRpY2FzdDsKKwkJCS8qIHJ4X2Vycm9ycyBpcyBhbiB1bG9uZywgbm90IHByb3RlY3RlZCBieSBzeW5jcCAqLworCQkJYWNjdW0ucnhfZXJyb3JzICArPSBwLT5yeF9lcnJvcnM7CiAJCX0KLQkJc3RhdHMtPnJ4X3BhY2tldHMgPSByeC5yeF9wYWNrZXRzOwotCQlzdGF0cy0+cnhfYnl0ZXMgICA9IHJ4LnJ4X2J5dGVzOwotCQlzdGF0cy0+cnhfZXJyb3JzICA9IHJ4LnJ4X2Vycm9yczsKLQkJc3RhdHMtPm11bHRpY2FzdCAgPSByeC5tdWx0aWNhc3Q7CisJCXN0YXRzLT5yeF9wYWNrZXRzID0gYWNjdW0ucnhfcGFja2V0czsKKwkJc3RhdHMtPnJ4X2J5dGVzICAgPSBhY2N1bS5yeF9ieXRlczsKKwkJc3RhdHMtPnJ4X2Vycm9ycyAgPSBhY2N1bS5yeF9lcnJvcnM7CisJCXN0YXRzLT5tdWx0aWNhc3QgID0gYWNjdW0ucnhfbXVsdGljYXN0OwogCX0KIAlyZXR1cm4gc3RhdHM7CiB9CiAKK3N0YXRpYyBpbnQgdmxhbl9ldGh0b29sX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCit7CisgICAgICAgaWYgKGRhdGEpIHsKKwkJc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2ID0gdmxhbl9kZXZfaW5mbyhkZXYpLT5yZWFsX2RldjsKKworCQkvKiBVbmRlcmx5aW5nIGRldmljZSBtdXN0IHN1cHBvcnQgVFNPIGZvciBWTEFOLXRhZ2dlZCBwYWNrZXRzCisJCSAqIGFuZCBtdXN0IGhhdmUgVFNPIGVuYWJsZWQgbm93LgorCQkgKi8KKwkJaWYgKCEocmVhbF9kZXYtPnZsYW5fZmVhdHVyZXMgJiBORVRJRl9GX1RTTykpCisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCWlmICghKHJlYWxfZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfVFNPKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOworCX0gZWxzZSB7CisJCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB2bGFuX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MJICAgICAgICA9IHZsYW5fZXRodG9vbF9nZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvCSAgICAgICAgPSB2bGFuX2V0aHRvb2xfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiAJLmdldF9yeF9jc3VtCQk9IHZsYW5fZXRodG9vbF9nZXRfcnhfY3N1bSwKIAkuZ2V0X2ZsYWdzCQk9IHZsYW5fZXRodG9vbF9nZXRfZmxhZ3MsCisJLnNldF90c28gICAgICAgICAgICAgICAgPSB2bGFuX2V0aHRvb2xfc2V0X3RzbywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmxhbl9uZXRkZXZfb3BzID0gewpAQCAtODQ4LDcgKzg5NSw3IEBACiAJLm5kb19jaGFuZ2VfcnhfZmxhZ3MJPSB2bGFuX2Rldl9jaGFuZ2VfcnhfZmxhZ3MsCiAJLm5kb19kb19pb2N0bAkJPSB2bGFuX2Rldl9pb2N0bCwKIAkubmRvX25laWdoX3NldHVwCT0gdmxhbl9kZXZfbmVpZ2hfc2V0dXAsCi0JLm5kb19nZXRfc3RhdHMJCT0gdmxhbl9kZXZfZ2V0X3N0YXRzLAorCS5uZG9fZ2V0X3N0YXRzNjQJPSB2bGFuX2Rldl9nZXRfc3RhdHM2NCwKICNpZiBkZWZpbmVkKENPTkZJR19GQ09FKSB8fCBkZWZpbmVkKENPTkZJR19GQ09FX01PRFVMRSkKIAkubmRvX2Zjb2VfZGRwX3NldHVwCT0gdmxhbl9kZXZfZmNvZV9kZHBfc2V0dXAsCiAJLm5kb19mY29lX2RkcF9kb25lCT0gdmxhbl9kZXZfZmNvZV9kZHBfZG9uZSwKQEAgLTg3Miw3ICs5MTksNyBAQAogCS5uZG9fY2hhbmdlX3J4X2ZsYWdzCT0gdmxhbl9kZXZfY2hhbmdlX3J4X2ZsYWdzLAogCS5uZG9fZG9faW9jdGwJCT0gdmxhbl9kZXZfaW9jdGwsCiAJLm5kb19uZWlnaF9zZXR1cAk9IHZsYW5fZGV2X25laWdoX3NldHVwLAotCS5uZG9fZ2V0X3N0YXRzCQk9IHZsYW5fZGV2X2dldF9zdGF0cywKKwkubmRvX2dldF9zdGF0czY0CT0gdmxhbl9kZXZfZ2V0X3N0YXRzNjQsCiAjaWYgZGVmaW5lZChDT05GSUdfRkNPRSkgfHwgZGVmaW5lZChDT05GSUdfRkNPRV9NT0RVTEUpCiAJLm5kb19mY29lX2RkcF9zZXR1cAk9IHZsYW5fZGV2X2Zjb2VfZGRwX3NldHVwLAogCS5uZG9fZmNvZV9kZHBfZG9uZQk9IHZsYW5fZGV2X2Zjb2VfZGRwX2RvbmUsCkBAIC04OTcsNyArOTQ0LDcgQEAKIAkubmRvX2NoYW5nZV9yeF9mbGFncwk9IHZsYW5fZGV2X2NoYW5nZV9yeF9mbGFncywKIAkubmRvX2RvX2lvY3RsCQk9IHZsYW5fZGV2X2lvY3RsLAogCS5uZG9fbmVpZ2hfc2V0dXAJPSB2bGFuX2Rldl9uZWlnaF9zZXR1cCwKLQkubmRvX2dldF9zdGF0cwkJPSB2bGFuX2Rldl9nZXRfc3RhdHMsCisJLm5kb19nZXRfc3RhdHM2NAk9IHZsYW5fZGV2X2dldF9zdGF0czY0LAogI2lmIGRlZmluZWQoQ09ORklHX0ZDT0UpIHx8IGRlZmluZWQoQ09ORklHX0ZDT0VfTU9EVUxFKQogCS5uZG9fZmNvZV9kZHBfc2V0dXAJPSB2bGFuX2Rldl9mY29lX2RkcF9zZXR1cCwKIAkubmRvX2Zjb2VfZGRwX2RvbmUJPSB2bGFuX2Rldl9mY29lX2RkcF9kb25lLApAQCAtOTIyLDcgKzk2OSw3IEBACiAJLm5kb19jaGFuZ2VfcnhfZmxhZ3MJPSB2bGFuX2Rldl9jaGFuZ2VfcnhfZmxhZ3MsCiAJLm5kb19kb19pb2N0bAkJPSB2bGFuX2Rldl9pb2N0bCwKIAkubmRvX25laWdoX3NldHVwCT0gdmxhbl9kZXZfbmVpZ2hfc2V0dXAsCi0JLm5kb19nZXRfc3RhdHMJCT0gdmxhbl9kZXZfZ2V0X3N0YXRzLAorCS5uZG9fZ2V0X3N0YXRzNjQJPSB2bGFuX2Rldl9nZXRfc3RhdHM2NCwKICNpZiBkZWZpbmVkKENPTkZJR19GQ09FKSB8fCBkZWZpbmVkKENPTkZJR19GQ09FX01PRFVMRSkKIAkubmRvX2Zjb2VfZGRwX3NldHVwCT0gdmxhbl9kZXZfZmNvZV9kZHBfc2V0dXAsCiAJLm5kb19mY29lX2RkcF9kb25lCT0gdmxhbl9kZXZfZmNvZV9kZHBfZG9uZSwKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFucHJvYy5jIGIvbmV0LzgwMjFxL3ZsYW5wcm9jLmMKaW5kZXggYWZlYWQzNS4uODBlMjgwZiAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW5wcm9jLmMKKysrIGIvbmV0LzgwMjFxL3ZsYW5wcm9jLmMKQEAgLTI3OCwyNSArMjc4LDI3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnZsYW5kZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgc2VxLT5wcml2YXRlOwogCWNvbnN0IHN0cnVjdCB2bGFuX2Rldl9pbmZvICpkZXZfaW5mbyA9IHZsYW5fZGV2X2luZm8odmxhbmRldik7Ci0JY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzOworCXN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCB0ZW1wOworCWNvbnN0IHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHM7CiAJc3RhdGljIGNvbnN0IGNoYXIgZm10W10gPSAiJTMwcyAlMTJsdVxuIjsKKwlzdGF0aWMgY29uc3QgY2hhciBmbXQ2NFtdID0gIiUzMHMgJTEybGx1XG4iOwogCWludCBpOwogCiAJaWYgKCFpc192bGFuX2Rldih2bGFuZGV2KSkKIAkJcmV0dXJuIDA7CiAKLQlzdGF0cyA9IGRldl9nZXRfc3RhdHModmxhbmRldik7CisJc3RhdHMgPSBkZXZfZ2V0X3N0YXRzKHZsYW5kZXYsICZ0ZW1wKTsKIAlzZXFfcHJpbnRmKHNlcSwKIAkJICAgIiVzICBWSUQ6ICVkCSBSRU9SREVSX0hEUjogJWkgIGRldi0+cHJpdl9mbGFnczogJWh4XG4iLAogCQkgICB2bGFuZGV2LT5uYW1lLCBkZXZfaW5mby0+dmxhbl9pZCwKIAkJICAgKGludCkoZGV2X2luZm8tPmZsYWdzICYgMSksIHZsYW5kZXYtPnByaXZfZmxhZ3MpOwogCi0Jc2VxX3ByaW50ZihzZXEsIGZtdCwgInRvdGFsIGZyYW1lcyByZWNlaXZlZCIsIHN0YXRzLT5yeF9wYWNrZXRzKTsKLQlzZXFfcHJpbnRmKHNlcSwgZm10LCAidG90YWwgYnl0ZXMgcmVjZWl2ZWQiLCBzdGF0cy0+cnhfYnl0ZXMpOwotCXNlcV9wcmludGYoc2VxLCBmbXQsICJCcm9hZGNhc3QvTXVsdGljYXN0IFJjdmQiLCBzdGF0cy0+bXVsdGljYXN0KTsKKwlzZXFfcHJpbnRmKHNlcSwgZm10NjQsICJ0b3RhbCBmcmFtZXMgcmVjZWl2ZWQiLCBzdGF0cy0+cnhfcGFja2V0cyk7CisJc2VxX3ByaW50ZihzZXEsIGZtdDY0LCAidG90YWwgYnl0ZXMgcmVjZWl2ZWQiLCBzdGF0cy0+cnhfYnl0ZXMpOworCXNlcV9wcmludGYoc2VxLCBmbXQ2NCwgIkJyb2FkY2FzdC9NdWx0aWNhc3QgUmN2ZCIsIHN0YXRzLT5tdWx0aWNhc3QpOwogCXNlcV9wdXRzKHNlcSwgIlxuIik7Ci0Jc2VxX3ByaW50ZihzZXEsIGZtdCwgInRvdGFsIGZyYW1lcyB0cmFuc21pdHRlZCIsIHN0YXRzLT50eF9wYWNrZXRzKTsKLQlzZXFfcHJpbnRmKHNlcSwgZm10LCAidG90YWwgYnl0ZXMgdHJhbnNtaXR0ZWQiLCBzdGF0cy0+dHhfYnl0ZXMpOworCXNlcV9wcmludGYoc2VxLCBmbXQ2NCwgInRvdGFsIGZyYW1lcyB0cmFuc21pdHRlZCIsIHN0YXRzLT50eF9wYWNrZXRzKTsKKwlzZXFfcHJpbnRmKHNlcSwgZm10NjQsICJ0b3RhbCBieXRlcyB0cmFuc21pdHRlZCIsIHN0YXRzLT50eF9ieXRlcyk7CiAJc2VxX3ByaW50ZihzZXEsIGZtdCwgInRvdGFsIGhlYWRyb29tIGluYyIsCiAJCSAgIGRldl9pbmZvLT5jbnRfaW5jX2hlYWRyb29tX29uX3R4KTsKIAlzZXFfcHJpbnRmKHNlcSwgZm10LCAidG90YWwgZW5jYXAgb24geG1pdCIsCmRpZmYgLS1naXQgYS9uZXQvOXAvY2xpZW50LmMgYi9uZXQvOXAvY2xpZW50LmMKaW5kZXggMzdjOGRhMC4uZGM2ZjJmMiAxMDA2NDQKLS0tIGEvbmV0LzlwL2NsaWVudC5jCisrKyBiL25ldC85cC9jbGllbnQuYwpAQCAtNDYwLDcgKzQ2MCw4IEBACiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKLQkJaWYgKHA5X2lzX3Byb3RvX2RvdHUoYykpCisJCWlmIChwOV9pc19wcm90b19kb3R1KGMpIHx8CisJCQlwOV9pc19wcm90b19kb3RsKGMpKQogCQkJZXJyID0gLWVjb2RlOwogCiAJCWlmICghZXJyIHx8ICFJU19FUlJfVkFMVUUoZXJyKSkKQEAgLTEwMTUsMTQgKzEwMTYsMTggQEAKIAlzdHJ1Y3QgcDlfcWlkIHFpZDsKIAlpbnQgaW91bml0OwogCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBUT1BFTiBmaWQgJWQgbW9kZSAlZFxuIiwgZmlkLT5maWQsIG1vZGUpOwotCWVyciA9IDA7CiAJY2xudCA9IGZpZC0+Y2xudDsKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPj4+ICVzIGZpZCAlZCBtb2RlICVkXG4iLAorCQlwOV9pc19wcm90b19kb3RsKGNsbnQpID8gIlRMT1BFTiIgOiAiVE9QRU4iLCBmaWQtPmZpZCwgbW9kZSk7CisJZXJyID0gMDsKIAogCWlmIChmaWQtPm1vZGUgIT0gLTEpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmVxID0gcDlfY2xpZW50X3JwYyhjbG50LCBQOV9UT1BFTiwgImRiIiwgZmlkLT5maWQsIG1vZGUpOworCWlmIChwOV9pc19wcm90b19kb3RsKGNsbnQpKQorCQlyZXEgPSBwOV9jbGllbnRfcnBjKGNsbnQsIFA5X1RMT1BFTiwgImRkIiwgZmlkLT5maWQsIG1vZGUpOworCWVsc2UKKwkJcmVxID0gcDlfY2xpZW50X3JwYyhjbG50LCBQOV9UT1BFTiwgImRiIiwgZmlkLT5maWQsIG1vZGUpOwogCWlmIChJU19FUlIocmVxKSkgewogCQllcnIgPSBQVFJfRVJSKHJlcSk7CiAJCWdvdG8gZXJyb3I7CkBAIC0xMDM0LDEwICsxMDM5LDkgQEAKIAkJZ290byBmcmVlX2FuZF9lcnJvcjsKIAl9CiAKLQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8IFJPUEVOIHFpZCAleC4lbGx4LiV4IGlvdW5pdCAleFxuIiwKLQkJCQlxaWQudHlwZSwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXFpZC5wYXRoLAotCQkJCXFpZC52ZXJzaW9uLCBpb3VuaXQpOworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI8PDwgJXMgcWlkICV4LiVsbHguJXggaW91bml0ICV4XG4iLAorCQlwOV9pc19wcm90b19kb3RsKGNsbnQpID8gIlJMT1BFTiIgOiAiUk9QRU4iLCAgcWlkLnR5cGUsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpcWlkLnBhdGgsIHFpZC52ZXJzaW9uLCBpb3VuaXQpOwogCiAJZmlkLT5tb2RlID0gbW9kZTsKIAlmaWQtPmlvdW5pdCA9IGlvdW5pdDsKQEAgLTEwNDksNiArMTA1Myw1MCBAQAogfQogRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfb3Blbik7CiAKK2ludCBwOV9jbGllbnRfY3JlYXRlX2RvdGwoc3RydWN0IHA5X2ZpZCAqb2ZpZCwgY2hhciAqbmFtZSwgdTMyIGZsYWdzLCB1MzIgbW9kZSwKKwkJZ2lkX3QgZ2lkLCBzdHJ1Y3QgcDlfcWlkICpxaWQpCit7CisJaW50IGVyciA9IDA7CisJc3RydWN0IHA5X2NsaWVudCAqY2xudDsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwlpbnQgaW91bml0OworCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwKKwkJCSI+Pj4gVExDUkVBVEUgZmlkICVkIG5hbWUgJXMgZmxhZ3MgJWQgbW9kZSAlZCBnaWQgJWRcbiIsCisJCQlvZmlkLT5maWQsIG5hbWUsIGZsYWdzLCBtb2RlLCBnaWQpOworCWNsbnQgPSBvZmlkLT5jbG50OworCisJaWYgKG9maWQtPm1vZGUgIT0gLTEpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVxID0gcDlfY2xpZW50X3JwYyhjbG50LCBQOV9UTENSRUFURSwgImRzZGRkIiwgb2ZpZC0+ZmlkLCBuYW1lLCBmbGFncywKKwkJCW1vZGUsIGdpZCk7CisJaWYgKElTX0VSUihyZXEpKSB7CisJCWVyciA9IFBUUl9FUlIocmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwllcnIgPSBwOXBkdV9yZWFkZihyZXEtPnJjLCBjbG50LT5wcm90b192ZXJzaW9uLCAiUWQiLCBxaWQsICZpb3VuaXQpOworCWlmIChlcnIpIHsKKwkJcDlwZHVfZHVtcCgxLCByZXEtPnJjKTsKKwkJZ290byBmcmVlX2FuZF9lcnJvcjsKKwl9CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8IFJMQ1JFQVRFIHFpZCAleC4lbGx4LiV4IGlvdW5pdCAleFxuIiwKKwkJCXFpZC0+dHlwZSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcWlkLT5wYXRoLAorCQkJcWlkLT52ZXJzaW9uLCBpb3VuaXQpOworCisJb2ZpZC0+bW9kZSA9IG1vZGU7CisJb2ZpZC0+aW91bml0ID0gaW91bml0OworCitmcmVlX2FuZF9lcnJvcjoKKwlwOV9mcmVlX3JlcShjbG50LCByZXEpOworZXJyb3I6CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wocDlfY2xpZW50X2NyZWF0ZV9kb3RsKTsKKwogaW50IHA5X2NsaWVudF9mY3JlYXRlKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciAqbmFtZSwgdTMyIHBlcm0sIGludCBtb2RlLAogCQkgICAgIGNoYXIgKmV4dGVuc2lvbikKIHsKQEAgLTEwOTQsNiArMTE0Miw1OSBAQAogfQogRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfZmNyZWF0ZSk7CiAKK2ludCBwOV9jbGllbnRfc3ltbGluayhzdHJ1Y3QgcDlfZmlkICpkZmlkLCBjaGFyICpuYW1lLCBjaGFyICpzeW10Z3QsIGdpZF90IGdpZCwKKwkJc3RydWN0IHA5X3FpZCAqcWlkKQoreworCWludCBlcnIgPSAwOworCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7CisJc3RydWN0IHA5X3JlcV90ICpyZXE7CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPj4+IFRTWU1MSU5LIGRmaWQgJWQgbmFtZSAlcyAgc3ltdGd0ICVzXG4iLAorCQkJZGZpZC0+ZmlkLCBuYW1lLCBzeW10Z3QpOworCWNsbnQgPSBkZmlkLT5jbG50OworCisJcmVxID0gcDlfY2xpZW50X3JwYyhjbG50LCBQOV9UU1lNTElOSywgImRzc2QiLCBkZmlkLT5maWQsIG5hbWUsIHN5bXRndCwKKwkJCWdpZCk7CisJaWYgKElTX0VSUihyZXEpKSB7CisJCWVyciA9IFBUUl9FUlIocmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwllcnIgPSBwOXBkdV9yZWFkZihyZXEtPnJjLCBjbG50LT5wcm90b192ZXJzaW9uLCAiUSIsIHFpZCk7CisJaWYgKGVycikgeworCQlwOXBkdV9kdW1wKDEsIHJlcS0+cmMpOworCQlnb3RvIGZyZWVfYW5kX2Vycm9yOworCX0KKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI8PDwgUlNZTUxJTksgcWlkICV4LiVsbHguJXhcbiIsCisJCQlxaWQtPnR5cGUsICh1bnNpZ25lZCBsb25nIGxvbmcpcWlkLT5wYXRoLCBxaWQtPnZlcnNpb24pOworCitmcmVlX2FuZF9lcnJvcjoKKwlwOV9mcmVlX3JlcShjbG50LCByZXEpOworZXJyb3I6CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wocDlfY2xpZW50X3N5bWxpbmspOworCitpbnQgcDlfY2xpZW50X2xpbmsoc3RydWN0IHA5X2ZpZCAqZGZpZCwgc3RydWN0IHA5X2ZpZCAqb2xkZmlkLCBjaGFyICpuZXduYW1lKQoreworCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7CisJc3RydWN0IHA5X3JlcV90ICpyZXE7CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPj4+IFRMSU5LIGRmaWQgJWQgb2xkZmlkICVkIG5ld25hbWUgJXNcbiIsCisJCQlkZmlkLT5maWQsIG9sZGZpZC0+ZmlkLCBuZXduYW1lKTsKKwljbG50ID0gZGZpZC0+Y2xudDsKKwlyZXEgPSBwOV9jbGllbnRfcnBjKGNsbnQsIFA5X1RMSU5LLCAiZGRzIiwgZGZpZC0+ZmlkLCBvbGRmaWQtPmZpZCwKKwkJCW5ld25hbWUpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI8PDwgUkxJTktcbiIpOworCXA5X2ZyZWVfcmVxKGNsbnQsIHJlcSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9saW5rKTsKKwogaW50IHA5X2NsaWVudF9jbHVuayhzdHJ1Y3QgcDlfZmlkICpmaWQpCiB7CiAJaW50IGVycjsKQEAgLTExMzksOSArMTI0MCw4IEBACiAJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIjw8PCBSUkVNT1ZFIGZpZCAlZFxuIiwgZmlkLT5maWQpOwogCiAJcDlfZnJlZV9yZXEoY2xudCwgcmVxKTsKLQlwOV9maWRfZGVzdHJveShmaWQpOwotCiBlcnJvcjoKKwlwOV9maWRfZGVzdHJveShmaWQpOwogCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9yZW1vdmUpOwpAQCAtMTMwMiw2ICsxNDAyLDY1IEBACiB9CiBFWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9zdGF0KTsKIAorc3RydWN0IHA5X3N0YXRfZG90bCAqcDlfY2xpZW50X2dldGF0dHJfZG90bChzdHJ1Y3QgcDlfZmlkICpmaWQsCisJCQkJCQkJdTY0IHJlcXVlc3RfbWFzaykKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7CisJc3RydWN0IHA5X3N0YXRfZG90bCAqcmV0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHA5X3N0YXRfZG90bCksCisJCQkJCQkJCUdGUF9LRVJORUwpOworCXN0cnVjdCBwOV9yZXFfdCAqcmVxOworCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBUR0VUQVRUUiBmaWQgJWQsIHJlcXVlc3RfbWFzayAlbGxkXG4iLAorCQkJCQkJCWZpZC0+ZmlkLCByZXF1ZXN0X21hc2spOworCisJaWYgKCFyZXQpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJZXJyID0gMDsKKwljbG50ID0gZmlkLT5jbG50OworCisJcmVxID0gcDlfY2xpZW50X3JwYyhjbG50LCBQOV9UR0VUQVRUUiwgImRxIiwgZmlkLT5maWQsIHJlcXVlc3RfbWFzayk7CisJaWYgKElTX0VSUihyZXEpKSB7CisJCWVyciA9IFBUUl9FUlIocmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwllcnIgPSBwOXBkdV9yZWFkZihyZXEtPnJjLCBjbG50LT5wcm90b192ZXJzaW9uLCAiQSIsIHJldCk7CisJaWYgKGVycikgeworCQlwOXBkdV9kdW1wKDEsIHJlcS0+cmMpOworCQlwOV9mcmVlX3JlcShjbG50LCByZXEpOworCQlnb3RvIGVycm9yOworCX0KKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsCisJCSI8PDwgUkdFVEFUVFIgc3RfcmVzdWx0X21hc2s9JWxsZFxuIgorCQkiPDw8IHFpZD0leC4lbGx4LiV4XG4iCisJCSI8PDwgc3RfbW9kZT0lOC44eCBzdF9ubGluaz0lbGx1XG4iCisJCSI8PDwgc3RfdWlkPSVkIHN0X2dpZD0lZFxuIgorCQkiPDw8IHN0X3JkZXY9JWxseCBzdF9zaXplPSVsbHggc3RfYmxrc2l6ZT0lbGx1IHN0X2Jsb2Nrcz0lbGx1XG4iCisJCSI8PDwgc3RfYXRpbWVfc2VjPSVsbGQgc3RfYXRpbWVfbnNlYz0lbGxkXG4iCisJCSI8PDwgc3RfbXRpbWVfc2VjPSVsbGQgc3RfbXRpbWVfbnNlYz0lbGxkXG4iCisJCSI8PDwgc3RfY3RpbWVfc2VjPSVsbGQgc3RfY3RpbWVfbnNlYz0lbGxkXG4iCisJCSI8PDwgc3RfYnRpbWVfc2VjPSVsbGQgc3RfYnRpbWVfbnNlYz0lbGxkXG4iCisJCSI8PDwgc3RfZ2VuPSVsbGQgc3RfZGF0YV92ZXJzaW9uPSVsbGQiLAorCQlyZXQtPnN0X3Jlc3VsdF9tYXNrLCByZXQtPnFpZC50eXBlLCByZXQtPnFpZC5wYXRoLAorCQlyZXQtPnFpZC52ZXJzaW9uLCByZXQtPnN0X21vZGUsIHJldC0+c3RfbmxpbmssIHJldC0+c3RfdWlkLAorCQlyZXQtPnN0X2dpZCwgcmV0LT5zdF9yZGV2LCByZXQtPnN0X3NpemUsIHJldC0+c3RfYmxrc2l6ZSwKKwkJcmV0LT5zdF9ibG9ja3MsIHJldC0+c3RfYXRpbWVfc2VjLCByZXQtPnN0X2F0aW1lX25zZWMsCisJCXJldC0+c3RfbXRpbWVfc2VjLCByZXQtPnN0X210aW1lX25zZWMsIHJldC0+c3RfY3RpbWVfc2VjLAorCQlyZXQtPnN0X2N0aW1lX25zZWMsIHJldC0+c3RfYnRpbWVfc2VjLCByZXQtPnN0X2J0aW1lX25zZWMsCisJCXJldC0+c3RfZ2VuLCByZXQtPnN0X2RhdGFfdmVyc2lvbik7CisKKwlwOV9mcmVlX3JlcShjbG50LCByZXEpOworCXJldHVybiByZXQ7CisKK2Vycm9yOgorCWtmcmVlKHJldCk7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KK0VYUE9SVF9TWU1CT0wocDlfY2xpZW50X2dldGF0dHJfZG90bCk7CisKIHN0YXRpYyBpbnQgcDlfY2xpZW50X3N0YXRzaXplKHN0cnVjdCBwOV93c3RhdCAqd3N0LCBpbnQgcHJvdG9fdmVyc2lvbikKIHsKIAlpbnQgcmV0OwpAQCAtMTM2Niw2ICsxNTI1LDM2IEBACiB9CiBFWFBPUlRfU1lNQk9MKHA5X2NsaWVudF93c3RhdCk7CiAKK2ludCBwOV9jbGllbnRfc2V0YXR0cihzdHJ1Y3QgcDlfZmlkICpmaWQsIHN0cnVjdCBwOV9pYXR0cl9kb3RsICpwOWF0dHIpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OworCisJZXJyID0gMDsKKwljbG50ID0gZmlkLT5jbG50OworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI+Pj4gVFNFVEFUVFIgZmlkICVkXG4iLCBmaWQtPmZpZCk7CisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwKKwkJIiAgICB2YWxpZD0leCBtb2RlPSV4IHVpZD0lZCBnaWQ9JWQgc2l6ZT0lbGxkXG4iCisJCSIgICAgYXRpbWVfc2VjPSVsbGQgYXRpbWVfbnNlYz0lbGxkXG4iCisJCSIgICAgbXRpbWVfc2VjPSVsbGQgbXRpbWVfbnNlYz0lbGxkXG4iLAorCQlwOWF0dHItPnZhbGlkLCBwOWF0dHItPm1vZGUsIHA5YXR0ci0+dWlkLCBwOWF0dHItPmdpZCwKKwkJcDlhdHRyLT5zaXplLCBwOWF0dHItPmF0aW1lX3NlYywgcDlhdHRyLT5hdGltZV9uc2VjLAorCQlwOWF0dHItPm10aW1lX3NlYywgcDlhdHRyLT5tdGltZV9uc2VjKTsKKworCXJlcSA9IHA5X2NsaWVudF9ycGMoY2xudCwgUDlfVFNFVEFUVFIsICJkSSIsIGZpZC0+ZmlkLCBwOWF0dHIpOworCisJaWYgKElTX0VSUihyZXEpKSB7CisJCWVyciA9IFBUUl9FUlIocmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIjw8PCBSU0VUQVRUUiBmaWQgJWRcbiIsIGZpZC0+ZmlkKTsKKwlwOV9mcmVlX3JlcShjbG50LCByZXEpOworZXJyb3I6CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wocDlfY2xpZW50X3NldGF0dHIpOworCiBpbnQgcDlfY2xpZW50X3N0YXRmcyhzdHJ1Y3QgcDlfZmlkICpmaWQsIHN0cnVjdCBwOV9yc3RhdGZzICpzYikKIHsKIAlpbnQgZXJyOwpAQCAtMTQzMiwzICsxNjIxLDE4NyBAQAogfQogRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfcmVuYW1lKTsKIAorLyoKKyAqIEFuIHhhdHRyd2FsayB3aXRob3V0IEBhdHRyX25hbWUgZ2l2ZXMgdGhlIGZpZCBmb3IgdGhlIGxpc3hhdHRyIG5hbWVzcGFjZQorICovCitzdHJ1Y3QgcDlfZmlkICpwOV9jbGllbnRfeGF0dHJ3YWxrKHN0cnVjdCBwOV9maWQgKmZpbGVfZmlkLAorCQkJCWNvbnN0IGNoYXIgKmF0dHJfbmFtZSwgdTY0ICphdHRyX3NpemUpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OworCXN0cnVjdCBwOV9maWQgKmF0dHJfZmlkOworCisJZXJyID0gMDsKKwljbG50ID0gZmlsZV9maWQtPmNsbnQ7CisJYXR0cl9maWQgPSBwOV9maWRfY3JlYXRlKGNsbnQpOworCWlmIChJU19FUlIoYXR0cl9maWQpKSB7CisJCWVyciA9IFBUUl9FUlIoYXR0cl9maWQpOworCQlhdHRyX2ZpZCA9IE5VTEw7CisJCWdvdG8gZXJyb3I7CisJfQorCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsCisJCSI+Pj4gVFhBVFRSV0FMSyBmaWxlX2ZpZCAlZCwgYXR0cl9maWQgJWQgbmFtZSAlc1xuIiwKKwkJZmlsZV9maWQtPmZpZCwgYXR0cl9maWQtPmZpZCwgYXR0cl9uYW1lKTsKKworCXJlcSA9IHA5X2NsaWVudF9ycGMoY2xudCwgUDlfVFhBVFRSV0FMSywgImRkcyIsCisJCQlmaWxlX2ZpZC0+ZmlkLCBhdHRyX2ZpZC0+ZmlkLCBhdHRyX25hbWUpOworCWlmIChJU19FUlIocmVxKSkgeworCQllcnIgPSBQVFJfRVJSKHJlcSk7CisJCWdvdG8gZXJyb3I7CisJfQorCWVyciA9IHA5cGR1X3JlYWRmKHJlcS0+cmMsIGNsbnQtPnByb3RvX3ZlcnNpb24sICJxIiwgYXR0cl9zaXplKTsKKwlpZiAoZXJyKSB7CisJCXA5cGR1X2R1bXAoMSwgcmVxLT5yYyk7CisJCXA5X2ZyZWVfcmVxKGNsbnQsIHJlcSk7CisJCWdvdG8gY2x1bmtfZmlkOworCX0KKwlwOV9mcmVlX3JlcShjbG50LCByZXEpOworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI8PDwgIFJYQVRUUldBTEsgZmlkICVkIHNpemUgJWxsdVxuIiwKKwkJYXR0cl9maWQtPmZpZCwgKmF0dHJfc2l6ZSk7CisJcmV0dXJuIGF0dHJfZmlkOworY2x1bmtfZmlkOgorCXA5X2NsaWVudF9jbHVuayhhdHRyX2ZpZCk7CisJYXR0cl9maWQgPSBOVUxMOworZXJyb3I6CisJaWYgKGF0dHJfZmlkICYmIChhdHRyX2ZpZCAhPSBmaWxlX2ZpZCkpCisJCXA5X2ZpZF9kZXN0cm95KGF0dHJfZmlkKTsKKworCXJldHVybiBFUlJfUFRSKGVycik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwOV9jbGllbnRfeGF0dHJ3YWxrKTsKKworaW50IHA5X2NsaWVudF94YXR0cmNyZWF0ZShzdHJ1Y3QgcDlfZmlkICpmaWQsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQl1NjQgYXR0cl9zaXplLCBpbnQgZmxhZ3MpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OworCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwKKwkJIj4+PiBUWEFUVFJDUkVBVEUgZmlkICVkIG5hbWUgICVzIHNpemUgJWxsZCBmbGFnICVkXG4iLAorCQlmaWQtPmZpZCwgbmFtZSwgKGxvbmcgbG9uZylhdHRyX3NpemUsIGZsYWdzKTsKKwllcnIgPSAwOworCWNsbnQgPSBmaWQtPmNsbnQ7CisJcmVxID0gcDlfY2xpZW50X3JwYyhjbG50LCBQOV9UWEFUVFJDUkVBVEUsICJkc3FkIiwKKwkJCWZpZC0+ZmlkLCBuYW1lLCBhdHRyX3NpemUsIGZsYWdzKTsKKwlpZiAoSVNfRVJSKHJlcSkpIHsKKwkJZXJyID0gUFRSX0VSUihyZXEpOworCQlnb3RvIGVycm9yOworCX0KKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8IFJYQVRUUkNSRUFURSBmaWQgJWRcbiIsIGZpZC0+ZmlkKTsKKwlwOV9mcmVlX3JlcShjbG50LCByZXEpOworZXJyb3I6CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHA5X2NsaWVudF94YXR0cmNyZWF0ZSk7CisKK2ludCBwOV9jbGllbnRfcmVhZGRpcihzdHJ1Y3QgcDlfZmlkICpmaWQsIGNoYXIgKmRhdGEsIHUzMiBjb3VudCwgdTY0IG9mZnNldCkKK3sKKwlpbnQgZXJyLCByc2l6ZSwgdG90YWw7CisJc3RydWN0IHA5X2NsaWVudCAqY2xudDsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwljaGFyICpkYXRhcHRyOworCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBUUkVBRERJUiBmaWQgJWQgb2Zmc2V0ICVsbHUgY291bnQgJWRcbiIsCisJCQkJZmlkLT5maWQsIChsb25nIGxvbmcgdW5zaWduZWQpIG9mZnNldCwgY291bnQpOworCisJZXJyID0gMDsKKwljbG50ID0gZmlkLT5jbG50OworCXRvdGFsID0gMDsKKworCXJzaXplID0gZmlkLT5pb3VuaXQ7CisJaWYgKCFyc2l6ZSB8fCByc2l6ZSA+IGNsbnQtPm1zaXplLVA5X1JFQURESVJIRFJTWikKKwkJcnNpemUgPSBjbG50LT5tc2l6ZSAtIFA5X1JFQURESVJIRFJTWjsKKworCWlmIChjb3VudCA8IHJzaXplKQorCQlyc2l6ZSA9IGNvdW50OworCisJcmVxID0gcDlfY2xpZW50X3JwYyhjbG50LCBQOV9UUkVBRERJUiwgImRxZCIsIGZpZC0+ZmlkLCBvZmZzZXQsIHJzaXplKTsKKwlpZiAoSVNfRVJSKHJlcSkpIHsKKwkJZXJyID0gUFRSX0VSUihyZXEpOworCQlnb3RvIGVycm9yOworCX0KKworCWVyciA9IHA5cGR1X3JlYWRmKHJlcS0+cmMsIGNsbnQtPnByb3RvX3ZlcnNpb24sICJEIiwgJmNvdW50LCAmZGF0YXB0cik7CisJaWYgKGVycikgeworCQlwOXBkdV9kdW1wKDEsIHJlcS0+cmMpOworCQlnb3RvIGZyZWVfYW5kX2Vycm9yOworCX0KKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI8PDwgUlJFQURESVIgY291bnQgJWRcbiIsIGNvdW50KTsKKworCWlmIChkYXRhKQorCQltZW1tb3ZlKGRhdGEsIGRhdGFwdHIsIGNvdW50KTsKKworCXA5X2ZyZWVfcmVxKGNsbnQsIHJlcSk7CisJcmV0dXJuIGNvdW50OworCitmcmVlX2FuZF9lcnJvcjoKKwlwOV9mcmVlX3JlcShjbG50LCByZXEpOworZXJyb3I6CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wocDlfY2xpZW50X3JlYWRkaXIpOworCitpbnQgcDlfY2xpZW50X21rbm9kX2RvdGwoc3RydWN0IHA5X2ZpZCAqZmlkLCBjaGFyICpuYW1lLCBpbnQgbW9kZSwKKwkJCWRldl90IHJkZXYsIGdpZF90IGdpZCwgc3RydWN0IHA5X3FpZCAqcWlkKQoreworCWludCBlcnI7CisJc3RydWN0IHA5X2NsaWVudCAqY2xudDsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKworCWVyciA9IDA7CisJY2xudCA9IGZpZC0+Y2xudDsKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPj4+IFRNS05PRCBmaWQgJWQgbmFtZSAlcyBtb2RlICVkIG1ham9yICVkICIKKwkJIm1pbm9yICVkXG4iLCBmaWQtPmZpZCwgbmFtZSwgbW9kZSwgTUFKT1IocmRldiksIE1JTk9SKHJkZXYpKTsKKwlyZXEgPSBwOV9jbGllbnRfcnBjKGNsbnQsIFA5X1RNS05PRCwgImRzZGRkZCIsIGZpZC0+ZmlkLCBuYW1lLCBtb2RlLAorCQlNQUpPUihyZGV2KSwgTUlOT1IocmRldiksIGdpZCk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOworCisJZXJyID0gcDlwZHVfcmVhZGYocmVxLT5yYywgY2xudC0+cHJvdG9fdmVyc2lvbiwgIlEiLCBxaWQpOworCWlmIChlcnIpIHsKKwkJcDlwZHVfZHVtcCgxLCByZXEtPnJjKTsKKwkJZ290byBlcnJvcjsKKwl9CisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIjw8PCBSTUtOT0QgcWlkICV4LiVsbHguJXhcbiIsIHFpZC0+dHlwZSwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKXFpZC0+cGF0aCwgcWlkLT52ZXJzaW9uKTsKKworZXJyb3I6CisJcDlfZnJlZV9yZXEoY2xudCwgcmVxKTsKKwlyZXR1cm4gZXJyOworCit9CitFWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9ta25vZF9kb3RsKTsKKworaW50IHA5X2NsaWVudF9ta2Rpcl9kb3RsKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciAqbmFtZSwgaW50IG1vZGUsCisJCQkJZ2lkX3QgZ2lkLCBzdHJ1Y3QgcDlfcWlkICpxaWQpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OworCXN0cnVjdCBwOV9yZXFfdCAqcmVxOworCisJZXJyID0gMDsKKwljbG50ID0gZmlkLT5jbG50OworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI+Pj4gVE1LRElSIGZpZCAlZCBuYW1lICVzIG1vZGUgJWQgZ2lkICVkXG4iLAorCQkgZmlkLT5maWQsIG5hbWUsIG1vZGUsIGdpZCk7CisJcmVxID0gcDlfY2xpZW50X3JwYyhjbG50LCBQOV9UTUtESVIsICJkc2RkIiwgZmlkLT5maWQsIG5hbWUsIG1vZGUsCisJCWdpZCk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOworCisJZXJyID0gcDlwZHVfcmVhZGYocmVxLT5yYywgY2xudC0+cHJvdG9fdmVyc2lvbiwgIlEiLCBxaWQpOworCWlmIChlcnIpIHsKKwkJcDlwZHVfZHVtcCgxLCByZXEtPnJjKTsKKwkJZ290byBlcnJvcjsKKwl9CisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIjw8PCBSTUtESVIgcWlkICV4LiVsbHguJXhcbiIsIHFpZC0+dHlwZSwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKXFpZC0+cGF0aCwgcWlkLT52ZXJzaW9uKTsKKworZXJyb3I6CisJcDlfZnJlZV9yZXEoY2xudCwgcmVxKTsKKwlyZXR1cm4gZXJyOworCit9CitFWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9ta2Rpcl9kb3RsKTsKZGlmZiAtLWdpdCBhL25ldC85cC9wcm90b2NvbC5jIGIvbmV0LzlwL3Byb3RvY29sLmMKaW5kZXggMTQ5ZjgyMS4uM2FjZDNhZiAxMDA2NDQKLS0tIGEvbmV0LzlwL3Byb3RvY29sLmMKKysrIGIvbmV0LzlwL3Byb3RvY29sLmMKQEAgLTE0MSw2ICsxNDEsNyBAQAogCUQgLSBkYXRhIGJsb2IgKGludDMyX3Qgc2l6ZSBmb2xsb3dlZCBieSB2b2lkICosIHJlc3VsdHMgYXJlIG5vdCBmcmVlZCkKIAlUIC0gYXJyYXkgb2Ygc3RyaW5ncyAoaW50MTZfdCBjb3VudCwgZm9sbG93ZWQgYnkgc3RyaW5ncykKIAlSIC0gYXJyYXkgb2YgcWlkcyAoaW50MTZfdCBjb3VudCwgZm9sbG93ZWQgYnkgcWlkcykKKwlBIC0gc3RhdCBmb3IgOXAyMDAwLkwgKHA5X3N0YXRfZG90bCkKIAk/IC0gaWYgb3B0aW9uYWwgPSAxLCBjb250aW51ZSBwYXJzaW5nCiAqLwogCkBAIC0zNDAsNiArMzQxLDMzIEBACiAJCQkJfQogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgJ0EnOiB7CisJCQkJc3RydWN0IHA5X3N0YXRfZG90bCAqc3RidWYgPQorCQkJCSAgICB2YV9hcmcoYXAsIHN0cnVjdCBwOV9zdGF0X2RvdGwgKik7CisKKwkJCQltZW1zZXQoc3RidWYsIDAsIHNpemVvZihzdHJ1Y3QgcDlfc3RhdF9kb3RsKSk7CisJCQkJZXJyY29kZSA9CisJCQkJICAgIHA5cGR1X3JlYWRmKHBkdSwgcHJvdG9fdmVyc2lvbiwKKwkJCQkJInFRZGRkcXFxcXFxcXFxcXFxcXFxIiwKKwkJCQkJJnN0YnVmLT5zdF9yZXN1bHRfbWFzaywKKwkJCQkJJnN0YnVmLT5xaWQsCisJCQkJCSZzdGJ1Zi0+c3RfbW9kZSwKKwkJCQkJJnN0YnVmLT5zdF91aWQsICZzdGJ1Zi0+c3RfZ2lkLAorCQkJCQkmc3RidWYtPnN0X25saW5rLAorCQkJCQkmc3RidWYtPnN0X3JkZXYsICZzdGJ1Zi0+c3Rfc2l6ZSwKKwkJCQkJJnN0YnVmLT5zdF9ibGtzaXplLCAmc3RidWYtPnN0X2Jsb2NrcywKKwkJCQkJJnN0YnVmLT5zdF9hdGltZV9zZWMsCisJCQkJCSZzdGJ1Zi0+c3RfYXRpbWVfbnNlYywKKwkJCQkJJnN0YnVmLT5zdF9tdGltZV9zZWMsCisJCQkJCSZzdGJ1Zi0+c3RfbXRpbWVfbnNlYywKKwkJCQkJJnN0YnVmLT5zdF9jdGltZV9zZWMsCisJCQkJCSZzdGJ1Zi0+c3RfY3RpbWVfbnNlYywKKwkJCQkJJnN0YnVmLT5zdF9idGltZV9zZWMsCisJCQkJCSZzdGJ1Zi0+c3RfYnRpbWVfbnNlYywKKwkJCQkJJnN0YnVmLT5zdF9nZW4sCisJCQkJCSZzdGJ1Zi0+c3RfZGF0YV92ZXJzaW9uKTsKKwkJCX0KKwkJCWJyZWFrOwogCQljYXNlICc/JzoKIAkJCWlmICgocHJvdG9fdmVyc2lvbiAhPSBwOV9wcm90b18yMDAwdSkgJiYKIAkJCQkocHJvdG9fdmVyc2lvbiAhPSBwOV9wcm90b18yMDAwTCkpCkBAIC00ODgsNiArNTE2LDIzIEBACiAJCQkJfQogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgJ0knOnsKKwkJCQlzdHJ1Y3QgcDlfaWF0dHJfZG90bCAqcDlhdHRyID0gdmFfYXJnKGFwLAorCQkJCQkJCXN0cnVjdCBwOV9pYXR0cl9kb3RsICopOworCisJCQkJZXJyY29kZSA9IHA5cGR1X3dyaXRlZihwZHUsIHByb3RvX3ZlcnNpb24sCisJCQkJCQkJImRkZGRxcXFxcSIsCisJCQkJCQkJcDlhdHRyLT52YWxpZCwKKwkJCQkJCQlwOWF0dHItPm1vZGUsCisJCQkJCQkJcDlhdHRyLT51aWQsCisJCQkJCQkJcDlhdHRyLT5naWQsCisJCQkJCQkJcDlhdHRyLT5zaXplLAorCQkJCQkJCXA5YXR0ci0+YXRpbWVfc2VjLAorCQkJCQkJCXA5YXR0ci0+YXRpbWVfbnNlYywKKwkJCQkJCQlwOWF0dHItPm10aW1lX3NlYywKKwkJCQkJCQlwOWF0dHItPm10aW1lX25zZWMpOworCQkJfQorCQkJYnJlYWs7CiAJCWNhc2UgJz8nOgogCQkJaWYgKChwcm90b192ZXJzaW9uICE9IHA5X3Byb3RvXzIwMDB1KSAmJgogCQkJCShwcm90b192ZXJzaW9uICE9IHA5X3Byb3RvXzIwMDBMKSkKQEAgLTU4MCwzICs2MjUsMzAgQEAKIAlwZHUtPm9mZnNldCA9IDA7CiAJcGR1LT5zaXplID0gMDsKIH0KKworaW50IHA5ZGlyZW50X3JlYWQoY2hhciAqYnVmLCBpbnQgbGVuLCBzdHJ1Y3QgcDlfZGlyZW50ICpkaXJlbnQsCisJCQkJCQlpbnQgcHJvdG9fdmVyc2lvbikKK3sKKwlzdHJ1Y3QgcDlfZmNhbGwgZmFrZV9wZHU7CisJaW50IHJldDsKKwljaGFyICpuYW1lcHRyOworCisJZmFrZV9wZHUuc2l6ZSA9IGxlbjsKKwlmYWtlX3BkdS5jYXBhY2l0eSA9IGxlbjsKKwlmYWtlX3BkdS5zZGF0YSA9IGJ1ZjsKKwlmYWtlX3BkdS5vZmZzZXQgPSAwOworCisJcmV0ID0gcDlwZHVfcmVhZGYoJmZha2VfcGR1LCBwcm90b192ZXJzaW9uLCAiUXFicyIsICZkaXJlbnQtPnFpZCwKKwkJCSZkaXJlbnQtPmRfb2ZmLCAmZGlyZW50LT5kX3R5cGUsICZuYW1lcHRyKTsKKwlpZiAocmV0KSB7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI8PDwgcDlkaXJlbnRfcmVhZCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlwOXBkdV9kdW1wKDEsICZmYWtlX3BkdSk7CisJCWdvdG8gb3V0OworCX0KKworCXN0cmNweShkaXJlbnQtPmRfbmFtZSwgbmFtZXB0cik7CisKK291dDoKKwlyZXR1cm4gZmFrZV9wZHUub2Zmc2V0OworfQorRVhQT1JUX1NZTUJPTChwOWRpcmVudF9yZWFkKTsKZGlmZiAtLWdpdCBhL25ldC85cC90cmFuc19mZC5jIGIvbmV0LzlwL3RyYW5zX2ZkLmMKaW5kZXggOThjZTliYy4uYzg1MTA5ZCAxMDA2NDQKLS0tIGEvbmV0LzlwL3RyYW5zX2ZkLmMKKysrIGIvbmV0LzlwL3RyYW5zX2ZkLmMKQEAgLTk0OCw3ICs5NDgsNyBAQAogCiAJY3NvY2tldCA9IE5VTEw7CiAKLQlpZiAoc3RybGVuKGFkZHIpID4gVU5JWF9QQVRIX01BWCkgeworCWlmIChzdHJsZW4oYWRkcikgPj0gVU5JWF9QQVRIX01BWCkgewogCQlQOV9FUFJJTlRLKEtFUk5fRVJSLCAicDlfdHJhbnNfdW5peDogYWRkcmVzcyB0b28gbG9uZzogJXNcbiIsCiAJCQlhZGRyKTsKIAkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7CmRpZmYgLS1naXQgYS9uZXQvS2NvbmZpZyBiL25ldC9LY29uZmlnCmluZGV4IDBkNjhiNDAuLmUyNGZhMDggMTAwNjQ0Ci0tLSBhL25ldC9LY29uZmlnCisrKyBiL25ldC9LY29uZmlnCkBAIC0zMiw3ICszMiw3IEBACiBjb25maWcgQ09NUEFUX05FVExJTktfTUVTU0FHRVMKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBDT01QQVQKLQlkZXBlbmRzIG9uIFdJUkVMRVNTX0VYVCB8fCBXQU5UX0NPTVBBVF9ORVRMSU5LX01FU1NBR0VTCisJZGVwZW5kcyBvbiBXRVhUX0NPUkUgfHwgV0FOVF9DT01QQVRfTkVUTElOS19NRVNTQUdFUwogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHNlbmQgZGlmZmVyZW50IG5ldGxpbmsgbWVzc2FnZXMKIAkgIHRvIHRhc2tzIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSB0YXNrIGlzIGEgY29tcGF0IHRhc2sgb3Igbm90LiBUbwpAQCAtODYsNiArODYsMTYgQEAKIAkgIHRvIG5mbWFyaywgYnV0IGRlc2lnbmF0ZWQgZm9yIHNlY3VyaXR5IHB1cnBvc2VzLgogCSAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi4KIAorY29uZmlnIE5FVFdPUktfUEhZX1RJTUVTVEFNUElORworCWJvb2wgIlRpbWVzdGFtcGluZyBpbiBQSFkgZGV2aWNlcyIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFRoaXMgYWxsb3dzIHRpbWVzdGFtcGluZyBvZiBuZXR3b3JrIHBhY2tldHMgYnkgUEhZcyB3aXRoCisJICBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgY2FwYWJpbGl0aWVzLiBUaGlzIG9wdGlvbiBhZGRzIHNvbWUKKwkgIG92ZXJoZWFkIGluIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBwYXRocy4KKworCSAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi4KKwogbWVudWNvbmZpZyBORVRGSUxURVIKIAlib29sICJOZXR3b3JrIHBhY2tldCBmaWx0ZXJpbmcgZnJhbWV3b3JrIChOZXRmaWx0ZXIpIgogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL25ldC9NYWtlZmlsZSBiL25ldC9NYWtlZmlsZQppbmRleCBjYjdiZGMxLi40MWQ0MjAwIDEwMDY0NAotLS0gYS9uZXQvTWFrZWZpbGUKKysrIGIvbmV0L01ha2VmaWxlCkBAIC01MCw3ICs1MCw3IEBACiBvYmotJChDT05GSUdfSVBfRENDUCkJCSs9IGRjY3AvCiBvYmotJChDT05GSUdfSVBfU0NUUCkJCSs9IHNjdHAvCiBvYmotJChDT05GSUdfUkRTKQkJKz0gcmRzLwotb2JqLXkJCQkJKz0gd2lyZWxlc3MvCitvYmotJChDT05GSUdfV0lSRUxFU1MpCQkrPSB3aXJlbGVzcy8KIG9iai0kKENPTkZJR19NQUM4MDIxMSkJCSs9IG1hYzgwMjExLwogb2JqLSQoQ09ORklHX1RJUEMpCQkrPSB0aXBjLwogb2JqLSQoQ09ORklHX05FVExBQkVMKQkJKz0gbmV0bGFiZWwvCkBAIC02MSw3ICs2MSw3IEBACiBpZm5lcSAoJChDT05GSUdfRENCKSwpCiBvYmoteQkJCQkrPSBkY2IvCiBlbmRpZgotb2JqLXkJCQkJKz0gaWVlZTgwMjE1NC8KK29iai0kKENPTkZJR19JRUVFODAyMTU0KQkrPSBpZWVlODAyMTU0LwogCiBpZmVxICgkKENPTkZJR19ORVQpLHkpCiBvYmotJChDT05GSUdfU1lTQ1RMKQkJKz0gc3lzY3RsX25ldC5vCmRpZmYgLS1naXQgYS9uZXQvYXRtL2JyMjY4NC5jIGIvbmV0L2F0bS9icjI2ODQuYwppbmRleCA2NzE5YWY2Li42NTFiYWJkIDEwMDY0NAotLS0gYS9uZXQvYXRtL2JyMjY4NC5jCisrKyBiL25ldC9hdG0vYnIyNjg0LmMKQEAgLTEzOSw2ICsxMzksNDMgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIGludCBhdG1fZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwKKwkJIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYXRtX2RldiAqYXRtX2RldiA9IGFyZzsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldjsKKwlzdHJ1Y3QgYnIyNjg0X3ZjYyAqYnJ2Y2M7CisJc3RydWN0IGF0bV92Y2MgKmF0bV92Y2M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXByX2RlYnVnKCJldmVudD0lbGQgZGV2PSVwXG4iLCBldmVudCwgYXRtX2Rldik7CisKKwlyZWFkX2xvY2tfaXJxc2F2ZSgmZGV2c19sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaChsaCwgJmJyMjY4NF9kZXZzKSB7CisJCW5ldF9kZXYgPSBsaXN0X2VudHJ5X2JyZGV2KGxoKTsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJydmNjLCAmQlJQUklWKG5ldF9kZXYpLT5icnZjY3MsIGJydmNjcykgeworCQkJYXRtX3ZjYyA9IGJydmNjLT5hdG12Y2M7CisJCQlpZiAoYXRtX3ZjYyAmJiBicnZjYy0+YXRtdmNjLT5kZXYgPT0gYXRtX2RldikgeworCisJCQkJaWYgKGF0bV92Y2MtPmRldi0+c2lnbmFsID09IEFUTV9QSFlfU0lHX0xPU1QpCisJCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldF9kZXYpOworCQkJCWVsc2UKKwkJCQkJbmV0aWZfY2Fycmllcl9vbihuZXRfZGV2KTsKKworCQkJfQorCQl9CisJfQorCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmRldnNfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGF0bV9kZXZfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBhdG1fZGV2X2V2ZW50LAorfTsKKwogLyogY2hhaW5lZCB2Y2MtPnBvcCBmdW5jdGlvbi4gIENoZWNrIGlmIHdlIHNob3VsZCB3YWtlIHRoZSBuZXRpZl9xdWV1ZSAqLwogc3RhdGljIHZvaWQgYnIyNjg0X3BvcChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtMzYyLDYgKzM5OSwxMiBAQAogCQkJdW5yZWdpc3Rlcl9uZXRkZXYobmV0X2Rldik7CiAJCQlmcmVlX25ldGRldihuZXRfZGV2KTsKIAkJfQorCQlyZWFkX2xvY2tfaXJxKCZkZXZzX2xvY2spOworCQlpZiAobGlzdF9lbXB0eSgmYnIyNjg0X2RldnMpKSB7CisJCQkvKiBsYXN0IGJyMjY4NCBkZXZpY2UgKi8KKwkJCXVucmVnaXN0ZXJfYXRtZGV2aWNlX25vdGlmaWVyKCZhdG1fZGV2X25vdGlmaWVyKTsKKwkJfQorCQlyZWFkX3VubG9ja19pcnEoJmRldnNfbG9jayk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTUzMCw2ICs1NzMsMTMgQEAKIAogCQlicjI2ODRfcHVzaChhdG12Y2MsIHNrYik7CiAJfQorCisJLyogaW5pdGlhbGl6ZSBuZXRkZXYgY2FycmllciBzdGF0ZSAqLworCWlmIChhdG12Y2MtPmRldi0+c2lnbmFsID09IEFUTV9QSFlfU0lHX0xPU1QpCisJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldF9kZXYpOworCWVsc2UKKwkJbmV0aWZfY2Fycmllcl9vbihuZXRfZGV2KTsKKwogCV9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7CiAJcmV0dXJuIDA7CiAKQEAgLTYyMCw5ICs2NzAsMTYgQEAKIAl9CiAKIAl3cml0ZV9sb2NrX2lycSgmZGV2c19sb2NrKTsKKwogCWJyZGV2LT5wYXlsb2FkID0gcGF5bG9hZDsKLQlicmRldi0+bnVtYmVyID0gbGlzdF9lbXB0eSgmYnIyNjg0X2RldnMpID8gMSA6Ci0JICAgIEJSUFJJVihsaXN0X2VudHJ5X2JyZGV2KGJyMjY4NF9kZXZzLnByZXYpKS0+bnVtYmVyICsgMTsKKworCWlmIChsaXN0X2VtcHR5KCZicjI2ODRfZGV2cykpIHsKKwkJLyogMXN0IGJyMjY4NCBkZXZpY2UgKi8KKwkJcmVnaXN0ZXJfYXRtZGV2aWNlX25vdGlmaWVyKCZhdG1fZGV2X25vdGlmaWVyKTsKKwkJYnJkZXYtPm51bWJlciA9IDE7CisJfSBlbHNlCisJCWJyZGV2LT5udW1iZXIgPSBCUlBSSVYobGlzdF9lbnRyeV9icmRldihicjI2ODRfZGV2cy5wcmV2KSktPm51bWJlciArIDE7CisKIAlsaXN0X2FkZF90YWlsKCZicmRldi0+YnIyNjg0X2RldnMsICZicjI2ODRfZGV2cyk7CiAJd3JpdGVfdW5sb2NrX2lycSgmZGV2c19sb2NrKTsKIAlyZXR1cm4gMDsKQEAgLTc3Miw2ICs4MjksMTEgQEAKIAlyZW1vdmVfcHJvY19lbnRyeSgiYnIyNjg0IiwgYXRtX3Byb2Nfcm9vdCk7CiAjZW5kaWYKIAorCisJLyogaWYgbm90IGFscmVhZHkgZW1wdHkgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJmJyMjY4NF9kZXZzKSkKKwkJdW5yZWdpc3Rlcl9hdG1kZXZpY2Vfbm90aWZpZXIoJmF0bV9kZXZfbm90aWZpZXIpOworCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZicjI2ODRfZGV2cykpIHsKIAkJbmV0X2RldiA9IGxpc3RfZW50cnlfYnJkZXYoYnIyNjg0X2RldnMubmV4dCk7CiAJCWJyZGV2ID0gQlJQUklWKG5ldF9kZXYpOwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9jbGlwLmMgYi9uZXQvYXRtL2NsaXAuYwppbmRleCAzMTNhYmExLi45NWZkZDExIDEwMDY0NAotLS0gYS9uZXQvYXRtL2NsaXAuYworKysgYi9uZXQvYXRtL2NsaXAuYwpAQCAtNTIyLDcgKzUyMiw3IEBACiAJZXJyb3IgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KCZpbml0X25ldCwgJnJ0LCAmZmwpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwotCW5laWdoID0gX19uZWlnaF9sb29rdXAoJmNsaXBfdGJsLCAmaXAsIHJ0LT51LmRzdC5kZXYsIDEpOworCW5laWdoID0gX19uZWlnaF9sb29rdXAoJmNsaXBfdGJsLCAmaXAsIHJ0LT5kc3QuZGV2LCAxKTsKIAlpcF9ydF9wdXQocnQpOwogCWlmICghbmVpZ2gpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9jb21tb24uYyBiL25ldC9hdG0vY29tbW9uLmMKaW5kZXggYjQzZmViMS4uOTQwNDA0YSAxMDA2NDQKLS0tIGEvbmV0L2F0bS9jb21tb24uYworKysgYi9uZXQvYXRtL2NvbW1vbi5jCkBAIC0zNyw2ICszNyw4IEBACiBERUZJTkVfUldMT0NLKHZjY19za2xpc3RfbG9jayk7CiBFWFBPUlRfU1lNQk9MKHZjY19za2xpc3RfbG9jayk7CiAKK3N0YXRpYyBBVE9NSUNfTk9USUZJRVJfSEVBRChhdG1fZGV2X25vdGlmeV9jaGFpbik7CisKIHN0YXRpYyB2b2lkIF9fdmNjX2luc2VydF9zb2NrZXQoc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCBhdG1fdmNjICp2Y2MgPSBhdG1fc2soc2spOwpAQCAtMjEyLDYgKzIxNCwyMiBAQAogfQogRVhQT1JUX1NZTUJPTCh2Y2NfcmVsZWFzZV9hc3luYyk7CiAKK3ZvaWQgYXRtX2Rldl9zaWduYWxfY2hhbmdlKHN0cnVjdCBhdG1fZGV2ICpkZXYsIGNoYXIgc2lnbmFsKQoreworCXByX2RlYnVnKCIlcyBzaWduYWw9JWQgZGV2PSVwIG51bWJlcj0lZCBkZXYtPnNpZ25hbD0lZFxuIiwKKwkJX19mdW5jX18sIHNpZ25hbCwgZGV2LCBkZXYtPm51bWJlciwgZGV2LT5zaWduYWwpOworCisJLyogYXRtIGRyaXZlciBzZW5kaW5nIGludmFsaWQgc2lnbmFsICovCisJV0FSTl9PTihzaWduYWwgPCBBVE1fUEhZX1NJR19MT1NUIHx8IHNpZ25hbCA+IEFUTV9QSFlfU0lHX0ZPVU5EKTsKKworCWlmIChkZXYtPnNpZ25hbCA9PSBzaWduYWwpCisJCXJldHVybjsgLyogbm8gY2hhbmdlICovCisKKwlkZXYtPnNpZ25hbCA9IHNpZ25hbDsKKworCWF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZhdG1fZGV2X25vdGlmeV9jaGFpbiwgc2lnbmFsLCBkZXYpOworfQorRVhQT1JUX1NZTUJPTChhdG1fZGV2X3NpZ25hbF9jaGFuZ2UpOwogCiB2b2lkIGF0bV9kZXZfcmVsZWFzZV92Y2NzKHN0cnVjdCBhdG1fZGV2ICpkZXYpCiB7CkBAIC03ODEsNiArNzk5LDE4IEBACiAJcmV0dXJuIHZjYy0+ZGV2LT5vcHMtPmdldHNvY2tvcHQodmNjLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBsZW4pOwogfQogCitpbnQgcmVnaXN0ZXJfYXRtZGV2aWNlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmYXRtX2Rldl9ub3RpZnlfY2hhaW4sIG5iKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllcik7CisKK3ZvaWQgdW5yZWdpc3Rlcl9hdG1kZXZpY2Vfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlhdG9taWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmYXRtX2Rldl9ub3RpZnlfY2hhaW4sIG5iKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfYXRtZGV2aWNlX25vdGlmaWVyKTsKKwogc3RhdGljIGludCBfX2luaXQgYXRtX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyb3I7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL0tjb25maWcgYi9uZXQvYmx1ZXRvb3RoL0tjb25maWcKaW5kZXggZWUzYjMwNC4uZWQzNzE2OCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9LY29uZmlnCisrKyBiL25ldC9ibHVldG9vdGgvS2NvbmZpZwpAQCAtNDMsMTkgKzQzLDYgQEAKIAkgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBMMkNBUCBzdXBwb3J0IGludG8gdGhlIGtlcm5lbCBvciBzYXkgTSB0bwogCSAgY29tcGlsZSBpdCBhcyBtb2R1bGUgKGwyY2FwKS4KIAotY29uZmlnIEJUX0wyQ0FQX0VYVF9GRUFUVVJFUwotCWJvb2wgIkwyQ0FQIEV4dGVuZGVkIEZlYXR1cmVzIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBCVF9MMkNBUCAmJiBFWFBFUklNRU5UQUwKLQloZWxwCi0JICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBMMkNBUCBFeHRlbmRlZCBGZWF0dXJlcyBzdXBwb3J0LiBUaGVzZQotCSAgbmV3IGZlYXR1cmVzIGluY2x1ZGUgdGhlIEVuaGFuY2VkIFJldHJhbnNtaXNzaW9uIGFuZCBTdHJlYW1pbmcKLQkgIE1vZGVzLCB0aGUgRnJhbWUgQ2hlY2sgU2VxdWVuY2UgKEZDUyksIGFuZCBTZWdtZW50YXRpb24gYW5kCi0JICBSZWFzc2VtYmx5IChTQVIpIGZvciBMMkNBUCBwYWNrZXRzLiBUaGV5IGFyZSBhIHJlcXVpcmVkIGZvciB0aGUKLQkgIG5ldyBBbHRlcm5hdGUgTUFDL1BIWSBhbmQgdGhlIEJsdWV0b290aCBNZWRpY2FsIFByb2ZpbGUuCi0KLQkgIFlvdSBzaG91bGQgc2F5IE4gdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4gTm90ZSB0aGF0Ci0JICB0aGlzIGlzIGluIGFuIGV4cGVyaW1lbnRhbCBzdGF0ZSB5ZXQuCi0KIGNvbmZpZyBCVF9TQ08KIAl0cmlzdGF0ZSAiU0NPIGxpbmtzIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBCVApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9ibmVwL2JuZXAuaCBiL25ldC9ibHVldG9vdGgvYm5lcC9ibmVwLmgKaW5kZXggMGQ5ZTUwNi4uNzA2NzI1NDQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvYm5lcC9ibmVwLmgKKysrIGIvbmV0L2JsdWV0b290aC9ibmVwL2JuZXAuaApAQCAtODYsMjYgKzg2LDI2IEBACiAJX191OCAgY3RybDsKIAlfX3U4ICB1dWlkX3NpemU7CiAJX191OCAgc2VydmljZVswXTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYm5lcF9zZXRfZmlsdGVyX3JlcSB7CiAJX191OCAgdHlwZTsKIAlfX3U4ICBjdHJsOwogCV9fYmUxNiBsZW47CiAJX191OCAgbGlzdFswXTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYm5lcF9jb250cm9sX3JzcCB7CiAJX191OCAgdHlwZTsKIAlfX3U4ICBjdHJsOwogCV9fYmUxNiByZXNwOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBibmVwX2V4dF9oZHIgewogCV9fdTggIHR5cGU7CiAJX191OCAgbGVuOwogCV9fdTggIGRhdGFbMF07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogLyogQk5FUCBpb2N0bCBkZWZpbmVzICovCiAjZGVmaW5lIEJORVBDT05OQURECV9JT1coJ0InLCAyMDAsIGludCkKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYyBiL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYwppbmRleCBiMTBlM2NkLi4wYjFlNDYwIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgIEJsdWVaIC0gQmx1ZXRvb3RoIHByb3RvY29sIHN0YWNrIGZvciBMaW51eAotICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgUXVhbGNvbW0gSW5jb3Jwb3JhdGVkCisgICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMSwgMjAxMCwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgIFdyaXR0ZW4gMjAwMCwyMDAxIGJ5IE1heGltIEtyYXNueWFuc2t5IDxtYXhrQHF1YWxjb21tLmNvbT4KIApAQCAtMTU1LDYgKzE1NSwyNyBAQAogCWhjaV9zZW5kX2NtZChoZGV2LCBIQ0lfT1BfU0VUVVBfU1lOQ19DT05OLCBzaXplb2YoY3ApLCAmY3ApOwogfQogCisvKiBEZXZpY2UgX211c3RfIGJlIGxvY2tlZCAqLwordm9pZCBoY2lfc2NvX3NldHVwKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMpCit7CisJc3RydWN0IGhjaV9jb25uICpzY28gPSBjb25uLT5saW5rOworCisJQlRfREJHKCIlcCIsIGNvbm4pOworCisJaWYgKCFzY28pCisJCXJldHVybjsKKworCWlmICghc3RhdHVzKSB7CisJCWlmIChsbXBfZXNjb19jYXBhYmxlKGNvbm4tPmhkZXYpKQorCQkJaGNpX3NldHVwX3N5bmMoc2NvLCBjb25uLT5oYW5kbGUpOworCQllbHNlCisJCQloY2lfYWRkX3NjbyhzY28sIGNvbm4tPmhhbmRsZSk7CisJfSBlbHNlIHsKKwkJaGNpX3Byb3RvX2Nvbm5lY3RfY2ZtKHNjbywgc3RhdHVzKTsKKwkJaGNpX2Nvbm5fZGVsKHNjbyk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBoY2lfY29ubl90aW1lb3V0KHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBoY2lfY29ubiAqY29ubiA9ICh2b2lkICopIGFyZzsKQEAgLTM1OCw2ICszNzksMTEgQEAKIAkJYWNsLT5zZWNfbGV2ZWwgPSBzZWNfbGV2ZWw7CiAJCWFjbC0+YXV0aF90eXBlID0gYXV0aF90eXBlOwogCQloY2lfYWNsX2Nvbm5lY3QoYWNsKTsKKwl9IGVsc2UgeworCQlpZiAoYWNsLT5zZWNfbGV2ZWwgPCBzZWNfbGV2ZWwpCisJCQlhY2wtPnNlY19sZXZlbCA9IHNlY19sZXZlbDsKKwkJaWYgKGFjbC0+YXV0aF90eXBlIDwgYXV0aF90eXBlKQorCQkJYWNsLT5hdXRoX3R5cGUgPSBhdXRoX3R5cGU7CiAJfQogCiAJaWYgKHR5cGUgPT0gQUNMX0xJTkspCkBAIC0zODAsMTAgKzQwNiwxMyBAQAogCQlhY2wtPnBvd2VyX3NhdmUgPSAxOwogCQloY2lfY29ubl9lbnRlcl9hY3RpdmVfbW9kZShhY2wpOwogCi0JCWlmIChsbXBfZXNjb19jYXBhYmxlKGhkZXYpKQotCQkJaGNpX3NldHVwX3N5bmMoc2NvLCBhY2wtPmhhbmRsZSk7Ci0JCWVsc2UKLQkJCWhjaV9hZGRfc2NvKHNjbywgYWNsLT5oYW5kbGUpOworCQlpZiAodGVzdF9iaXQoSENJX0NPTk5fTU9ERV9DSEFOR0VfUEVORCwgJmFjbC0+cGVuZCkpIHsKKwkJCS8qIGRlZmVyIFNDTyBzZXR1cCB1bnRpbCBtb2RlIGNoYW5nZSBjb21wbGV0ZWQgKi8KKwkJCXNldF9iaXQoSENJX0NPTk5fU0NPX1NFVFVQX1BFTkQsICZhY2wtPnBlbmQpOworCQkJcmV0dXJuIHNjbzsKKwkJfQorCisJCWhjaV9zY29fc2V0dXAoYWNsLCAweDAwKTsKIAl9CiAKIAlyZXR1cm4gc2NvOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCmluZGV4IDJmNzY4ZGUuLjgzMDNmMWMgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKQEAgLTU2Miw2ICs1NjIsNyBAQAogCWhjaV9kZXZfbG9ja19iaChoZGV2KTsKIAlpbnF1aXJ5X2NhY2hlX2ZsdXNoKGhkZXYpOwogCWhjaV9jb25uX2hhc2hfZmx1c2goaGRldik7CisJaGNpX2JsYWNrbGlzdF9jbGVhcihoZGV2KTsKIAloY2lfZGV2X3VubG9ja19iaChoZGV2KTsKIAogCWhjaV9ub3RpZnkoaGRldiwgSENJX0RFVl9ET1dOKTsKQEAgLTkxMyw3ICs5MTQsNyBAQAogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmhkZXYtPmNtZF9xKTsKIAlza2JfcXVldWVfaGVhZF9pbml0KCZoZGV2LT5yYXdfcSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBOVU1fUkVBU1NFTUJMWTsgaSsrKQogCQloZGV2LT5yZWFzc2VtYmx5W2ldID0gTlVMTDsKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmhkZXYtPnJlcV93YWl0X3EpOwpAQCAtOTIzLDYgKzkyNCw4IEBACiAKIAloY2lfY29ubl9oYXNoX2luaXQoaGRldik7CiAKKwlJTklUX0xJU1RfSEVBRCgmaGRldi0+YmxhY2tsaXN0Lmxpc3QpOworCiAJbWVtc2V0KCZoZGV2LT5zdGF0LCAwLCBzaXplb2Yoc3RydWN0IGhjaV9kZXZfc3RhdHMpKTsKIAogCWF0b21pY19zZXQoJmhkZXYtPnByb21pc2MsIDApOwpAQCAtOTcwLDcgKzk3Myw3IEBACiAKIAloY2lfZGV2X2RvX2Nsb3NlKGhkZXYpOwogCi0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1JFQVNTRU1CTFk7IGkrKykKIAkJa2ZyZWVfc2tiKGhkZXYtPnJlYXNzZW1ibHlbaV0pOwogCiAJaGNpX25vdGlmeShoZGV2LCBIQ0lfREVWX1VOUkVHKTsKQEAgLTEwMzAsOTAgKzEwMzMsMTcxIEBACiB9CiBFWFBPUlRfU1lNQk9MKGhjaV9yZWN2X2ZyYW1lKTsKIAotLyogUmVjZWl2ZSBwYWNrZXQgdHlwZSBmcmFnbWVudCAqLwotI2RlZmluZSBfX3JlYXNzZW1ibHkoaGRldiwgdHlwZSkgICgoaGRldiktPnJlYXNzZW1ibHlbKHR5cGUpIC0gMl0pCi0KLWludCBoY2lfcmVjdl9mcmFnbWVudChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgaW50IHR5cGUsIHZvaWQgKmRhdGEsIGludCBjb3VudCkKK3N0YXRpYyBpbnQgaGNpX3JlYXNzZW1ibHkoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGludCB0eXBlLCB2b2lkICpkYXRhLAorCQkJICBpbnQgY291bnQsIF9fdTggaW5kZXgsIGdmcF90IGdmcF9tYXNrKQogewotCWlmICh0eXBlIDwgSENJX0FDTERBVEFfUEtUIHx8IHR5cGUgPiBIQ0lfRVZFTlRfUEtUKQorCWludCBsZW4gPSAwOworCWludCBobGVuID0gMDsKKwlpbnQgcmVtYWluID0gY291bnQ7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgYnRfc2tiX2NiICpzY2I7CisKKwlpZiAoKHR5cGUgPCBIQ0lfQUNMREFUQV9QS1QgfHwgdHlwZSA+IEhDSV9FVkVOVF9QS1QpIHx8CisJCQkJaW5kZXggPj0gTlVNX1JFQVNTRU1CTFkpCiAJCXJldHVybiAtRUlMU0VROwogCi0Jd2hpbGUgKGNvdW50KSB7Ci0JCXN0cnVjdCBza19idWZmICpza2IgPSBfX3JlYXNzZW1ibHkoaGRldiwgdHlwZSk7Ci0JCXN0cnVjdCB7IGludCBleHBlY3Q7IH0gKnNjYjsKLQkJaW50IGxlbiA9IDA7CisJc2tiID0gaGRldi0+cmVhc3NlbWJseVtpbmRleF07CiAKLQkJaWYgKCFza2IpIHsKLQkJCS8qIFN0YXJ0IG9mIHRoZSBmcmFtZSAqLwotCi0JCQlzd2l0Y2ggKHR5cGUpIHsKLQkJCWNhc2UgSENJX0VWRU5UX1BLVDoKLQkJCQlpZiAoY291bnQgPj0gSENJX0VWRU5UX0hEUl9TSVpFKSB7Ci0JCQkJCXN0cnVjdCBoY2lfZXZlbnRfaGRyICpoID0gZGF0YTsKLQkJCQkJbGVuID0gSENJX0VWRU5UX0hEUl9TSVpFICsgaC0+cGxlbjsKLQkJCQl9IGVsc2UKLQkJCQkJcmV0dXJuIC1FSUxTRVE7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgSENJX0FDTERBVEFfUEtUOgotCQkJCWlmIChjb3VudCA+PSBIQ0lfQUNMX0hEUl9TSVpFKSB7Ci0JCQkJCXN0cnVjdCBoY2lfYWNsX2hkciAqaCA9IGRhdGE7Ci0JCQkJCWxlbiA9IEhDSV9BQ0xfSERSX1NJWkUgKyBfX2xlMTZfdG9fY3B1KGgtPmRsZW4pOwotCQkJCX0gZWxzZQotCQkJCQlyZXR1cm4gLUVJTFNFUTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBIQ0lfU0NPREFUQV9QS1Q6Ci0JCQkJaWYgKGNvdW50ID49IEhDSV9TQ09fSERSX1NJWkUpIHsKLQkJCQkJc3RydWN0IGhjaV9zY29faGRyICpoID0gZGF0YTsKLQkJCQkJbGVuID0gSENJX1NDT19IRFJfU0laRSArIGgtPmRsZW47Ci0JCQkJfSBlbHNlCi0JCQkJCXJldHVybiAtRUlMU0VROwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQlza2IgPSBidF9za2JfYWxsb2MobGVuLCBHRlBfQVRPTUlDKTsKLQkJCWlmICghc2tiKSB7Ci0JCQkJQlRfRVJSKCIlcyBubyBtZW1vcnkgZm9yIHBhY2tldCIsIGhkZXYtPm5hbWUpOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfQotCi0JCQlza2ItPmRldiA9ICh2b2lkICopIGhkZXY7Ci0JCQlidF9jYihza2IpLT5wa3RfdHlwZSA9IHR5cGU7Ci0KLQkJCV9fcmVhc3NlbWJseShoZGV2LCB0eXBlKSA9IHNrYjsKLQotCQkJc2NiID0gKHZvaWQgKikgc2tiLT5jYjsKLQkJCXNjYi0+ZXhwZWN0ID0gbGVuOwotCQl9IGVsc2UgewotCQkJLyogQ29udGludWF0aW9uICovCi0KLQkJCXNjYiA9ICh2b2lkICopIHNrYi0+Y2I7Ci0JCQlsZW4gPSBzY2ItPmV4cGVjdDsKKwlpZiAoIXNrYikgeworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBIQ0lfQUNMREFUQV9QS1Q6CisJCQlsZW4gPSBIQ0lfTUFYX0ZSQU1FX1NJWkU7CisJCQlobGVuID0gSENJX0FDTF9IRFJfU0laRTsKKwkJCWJyZWFrOworCQljYXNlIEhDSV9FVkVOVF9QS1Q6CisJCQlsZW4gPSBIQ0lfTUFYX0VWRU5UX1NJWkU7CisJCQlobGVuID0gSENJX0VWRU5UX0hEUl9TSVpFOworCQkJYnJlYWs7CisJCWNhc2UgSENJX1NDT0RBVEFfUEtUOgorCQkJbGVuID0gSENJX01BWF9TQ09fU0laRTsKKwkJCWhsZW4gPSBIQ0lfU0NPX0hEUl9TSVpFOworCQkJYnJlYWs7CiAJCX0KIAotCQlsZW4gPSBtaW4obGVuLCBjb3VudCk7CisJCXNrYiA9IGJ0X3NrYl9hbGxvYyhsZW4sIGdmcF9tYXNrKTsKKwkJaWYgKCFza2IpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlzY2IgPSAodm9pZCAqKSBza2ItPmNiOworCQlzY2ItPmV4cGVjdCA9IGhsZW47CisJCXNjYi0+cGt0X3R5cGUgPSB0eXBlOworCisJCXNrYi0+ZGV2ID0gKHZvaWQgKikgaGRldjsKKwkJaGRldi0+cmVhc3NlbWJseVtpbmRleF0gPSBza2I7CisJfQorCisJd2hpbGUgKGNvdW50KSB7CisJCXNjYiA9ICh2b2lkICopIHNrYi0+Y2I7CisJCWxlbiA9IG1pbihzY2ItPmV4cGVjdCwgKF9fdTE2KWNvdW50KTsKIAogCQltZW1jcHkoc2tiX3B1dChza2IsIGxlbiksIGRhdGEsIGxlbik7CiAKKwkJY291bnQgLT0gbGVuOworCQlkYXRhICs9IGxlbjsKIAkJc2NiLT5leHBlY3QgLT0gbGVuOworCQlyZW1haW4gPSBjb3VudDsKKworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBIQ0lfRVZFTlRfUEtUOgorCQkJaWYgKHNrYi0+bGVuID09IEhDSV9FVkVOVF9IRFJfU0laRSkgeworCQkJCXN0cnVjdCBoY2lfZXZlbnRfaGRyICpoID0gaGNpX2V2ZW50X2hkcihza2IpOworCQkJCXNjYi0+ZXhwZWN0ID0gaC0+cGxlbjsKKworCQkJCWlmIChza2JfdGFpbHJvb20oc2tiKSA8IHNjYi0+ZXhwZWN0KSB7CisJCQkJCWtmcmVlX3NrYihza2IpOworCQkJCQloZGV2LT5yZWFzc2VtYmx5W2luZGV4XSA9IE5VTEw7CisJCQkJCXJldHVybiAtRU5PTUVNOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgSENJX0FDTERBVEFfUEtUOgorCQkJaWYgKHNrYi0+bGVuICA9PSBIQ0lfQUNMX0hEUl9TSVpFKSB7CisJCQkJc3RydWN0IGhjaV9hY2xfaGRyICpoID0gaGNpX2FjbF9oZHIoc2tiKTsKKwkJCQlzY2ItPmV4cGVjdCA9IF9fbGUxNl90b19jcHUoaC0+ZGxlbik7CisKKwkJCQlpZiAoc2tiX3RhaWxyb29tKHNrYikgPCBzY2ItPmV4cGVjdCkgeworCQkJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCQkJaGRldi0+cmVhc3NlbWJseVtpbmRleF0gPSBOVUxMOworCQkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIEhDSV9TQ09EQVRBX1BLVDoKKwkJCWlmIChza2ItPmxlbiA9PSBIQ0lfU0NPX0hEUl9TSVpFKSB7CisJCQkJc3RydWN0IGhjaV9zY29faGRyICpoID0gaGNpX3Njb19oZHIoc2tiKTsKKwkJCQlzY2ItPmV4cGVjdCA9IGgtPmRsZW47CisKKwkJCQlpZiAoc2tiX3RhaWxyb29tKHNrYikgPCBzY2ItPmV4cGVjdCkgeworCQkJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCQkJaGRldi0+cmVhc3NlbWJseVtpbmRleF0gPSBOVUxMOworCQkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJfQogCiAJCWlmIChzY2ItPmV4cGVjdCA9PSAwKSB7CiAJCQkvKiBDb21wbGV0ZSBmcmFtZSAqLwogCi0JCQlfX3JlYXNzZW1ibHkoaGRldiwgdHlwZSkgPSBOVUxMOwotCiAJCQlidF9jYihza2IpLT5wa3RfdHlwZSA9IHR5cGU7CiAJCQloY2lfcmVjdl9mcmFtZShza2IpOwotCQl9CiAKLQkJY291bnQgLT0gbGVuOyBkYXRhICs9IGxlbjsKKwkJCWhkZXYtPnJlYXNzZW1ibHlbaW5kZXhdID0gTlVMTDsKKwkJCXJldHVybiByZW1haW47CisJCX0KIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmVtYWluOworfQorCitpbnQgaGNpX3JlY3ZfZnJhZ21lbnQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGludCB0eXBlLCB2b2lkICpkYXRhLCBpbnQgY291bnQpCit7CisJaW50IHJlbSA9IDA7CisKKwlpZiAodHlwZSA8IEhDSV9BQ0xEQVRBX1BLVCB8fCB0eXBlID4gSENJX0VWRU5UX1BLVCkKKwkJcmV0dXJuIC1FSUxTRVE7CisKKwl3aGlsZSAoY291bnQpIHsKKwkJcmVtID0gaGNpX3JlYXNzZW1ibHkoaGRldiwgdHlwZSwgZGF0YSwgY291bnQsCisJCQkJCQl0eXBlIC0gMSwgR0ZQX0FUT01JQyk7CisJCWlmIChyZW0gPCAwKQorCQkJcmV0dXJuIHJlbTsKKworCQlkYXRhICs9IChjb3VudCAtIHJlbSk7CisJCWNvdW50ID0gcmVtOworCX07CisKKwlyZXR1cm4gcmVtOwogfQogRVhQT1JUX1NZTUJPTChoY2lfcmVjdl9mcmFnbWVudCk7CiAKKyNkZWZpbmUgU1RSRUFNX1JFQVNTRU1CTFkgMAorCitpbnQgaGNpX3JlY3Zfc3RyZWFtX2ZyYWdtZW50KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB2b2lkICpkYXRhLCBpbnQgY291bnQpCit7CisJaW50IHR5cGU7CisJaW50IHJlbSA9IDA7CisKKwl3aGlsZSAoY291bnQpIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGhkZXYtPnJlYXNzZW1ibHlbU1RSRUFNX1JFQVNTRU1CTFldOworCisJCWlmICghc2tiKSB7CisJCQlzdHJ1Y3QgeyBjaGFyIHR5cGU7IH0gKnBrdDsKKworCQkJLyogU3RhcnQgb2YgdGhlIGZyYW1lICovCisJCQlwa3QgPSBkYXRhOworCQkJdHlwZSA9IHBrdC0+dHlwZTsKKworCQkJZGF0YSsrOworCQkJY291bnQtLTsKKwkJfSBlbHNlCisJCQl0eXBlID0gYnRfY2Ioc2tiKS0+cGt0X3R5cGU7CisKKwkJcmVtID0gaGNpX3JlYXNzZW1ibHkoaGRldiwgdHlwZSwgZGF0YSwKKwkJCQkJY291bnQsIFNUUkVBTV9SRUFTU0VNQkxZLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJlbSA8IDApCisJCQlyZXR1cm4gcmVtOworCisJCWRhdGEgKz0gKGNvdW50IC0gcmVtKTsKKwkJY291bnQgPSByZW07CisJfTsKKworCXJldHVybiByZW07Cit9CitFWFBPUlRfU1lNQk9MKGhjaV9yZWN2X3N0cmVhbV9mcmFnbWVudCk7CisKIC8qIC0tLS0gSW50ZXJmYWNlIHRvIHVwcGVyIHByb3RvY29scyAtLS0tICovCiAKIC8qIFJlZ2lzdGVyL1VucmVnaXN0ZXIgcHJvdG9jb2xzLgpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYyBiL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKaW5kZXggNmM1N2ZjNy4uYmZlZjViYSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgIEJsdWVaIC0gQmx1ZXRvb3RoIHByb3RvY29sIHN0YWNrIGZvciBMaW51eAotICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgUXVhbGNvbW0gSW5jb3Jwb3JhdGVkCisgICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMSwgMjAxMCwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgIFdyaXR0ZW4gMjAwMCwyMDAxIGJ5IE1heGltIEtyYXNueWFuc2t5IDxtYXhrQHF1YWxjb21tLmNvbT4KIApAQCAtNTg0LDcgKzU4NCw3IEBACiAJCQkJY29ubi0+b3V0ID0gMTsKIAkJCQljb25uLT5saW5rX21vZGUgfD0gSENJX0xNX01BU1RFUjsKIAkJCX0gZWxzZQotCQkJCUJUX0VSUigiTm8gbWVtbW9yeSBmb3IgbmV3IGNvbm5lY3Rpb24iKTsKKwkJCQlCVF9FUlIoIk5vIG1lbW9yeSBmb3IgbmV3IGNvbm5lY3Rpb24iKTsKIAkJfQogCX0KIApAQCAtNzg1LDkgKzc4NSwxMyBAQAogCWhjaV9kZXZfbG9jayhoZGV2KTsKIAogCWNvbm4gPSBoY2lfY29ubl9oYXNoX2xvb2t1cF9oYW5kbGUoaGRldiwgX19sZTE2X3RvX2NwdShjcC0+aGFuZGxlKSk7Ci0JaWYgKGNvbm4pCisJaWYgKGNvbm4pIHsKIAkJY2xlYXJfYml0KEhDSV9DT05OX01PREVfQ0hBTkdFX1BFTkQsICZjb25uLT5wZW5kKTsKIAorCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhDSV9DT05OX1NDT19TRVRVUF9QRU5ELCAmY29ubi0+cGVuZCkpCisJCQloY2lfc2NvX3NldHVwKGNvbm4sIHN0YXR1cyk7CisJfQorCiAJaGNpX2Rldl91bmxvY2soaGRldik7CiB9CiAKQEAgLTgwOCw5ICs4MTIsMTMgQEAKIAloY2lfZGV2X2xvY2soaGRldik7CiAKIAljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfaGFuZGxlKGhkZXYsIF9fbGUxNl90b19jcHUoY3AtPmhhbmRsZSkpOwotCWlmIChjb25uKQorCWlmIChjb25uKSB7CiAJCWNsZWFyX2JpdChIQ0lfQ09OTl9NT0RFX0NIQU5HRV9QRU5ELCAmY29ubi0+cGVuZCk7CiAKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIQ0lfQ09OTl9TQ09fU0VUVVBfUEVORCwgJmNvbm4tPnBlbmQpKQorCQkJaGNpX3Njb19zZXR1cChjb25uLCBzdGF0dXMpOworCX0KKwogCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogfQogCkBAIC05MTUsMjAgKzkyMyw4IEBACiAJfSBlbHNlCiAJCWNvbm4tPnN0YXRlID0gQlRfQ0xPU0VEOwogCi0JaWYgKGNvbm4tPnR5cGUgPT0gQUNMX0xJTkspIHsKLQkJc3RydWN0IGhjaV9jb25uICpzY28gPSBjb25uLT5saW5rOwotCQlpZiAoc2NvKSB7Ci0JCQlpZiAoIWV2LT5zdGF0dXMpIHsKLQkJCQlpZiAobG1wX2VzY29fY2FwYWJsZShoZGV2KSkKLQkJCQkJaGNpX3NldHVwX3N5bmMoc2NvLCBjb25uLT5oYW5kbGUpOwotCQkJCWVsc2UKLQkJCQkJaGNpX2FkZF9zY28oc2NvLCBjb25uLT5oYW5kbGUpOwotCQkJfSBlbHNlIHsKLQkJCQloY2lfcHJvdG9fY29ubmVjdF9jZm0oc2NvLCBldi0+c3RhdHVzKTsKLQkJCQloY2lfY29ubl9kZWwoc2NvKTsKLQkJCX0KLQkJfQotCX0KKwlpZiAoY29ubi0+dHlwZSA9PSBBQ0xfTElOSykKKwkJaGNpX3Njb19zZXR1cChjb25uLCBldi0+c3RhdHVzKTsKIAogCWlmIChldi0+c3RhdHVzKSB7CiAJCWhjaV9wcm90b19jb25uZWN0X2NmbShjb25uLCBldi0+c3RhdHVzKTsKQEAgLTk1Miw3ICs5NDgsNyBAQAogCiAJbWFzayB8PSBoY2lfcHJvdG9fY29ubmVjdF9pbmQoaGRldiwgJmV2LT5iZGFkZHIsIGV2LT5saW5rX3R5cGUpOwogCi0JaWYgKG1hc2sgJiBIQ0lfTE1fQUNDRVBUKSB7CisJaWYgKChtYXNrICYgSENJX0xNX0FDQ0VQVCkgJiYgIWhjaV9ibGFja2xpc3RfbG9va3VwKGhkZXYsICZldi0+YmRhZGRyKSkgewogCQkvKiBDb25uZWN0aW9uIGFjY2VwdGVkICovCiAJCXN0cnVjdCBpbnF1aXJ5X2VudHJ5ICppZTsKIAkJc3RydWN0IGhjaV9jb25uICpjb25uOwpAQCAtOTY1LDcgKzk2MSw3IEBACiAJCWNvbm4gPSBoY2lfY29ubl9oYXNoX2xvb2t1cF9iYShoZGV2LCBldi0+bGlua190eXBlLCAmZXYtPmJkYWRkcik7CiAJCWlmICghY29ubikgewogCQkJaWYgKCEoY29ubiA9IGhjaV9jb25uX2FkZChoZGV2LCBldi0+bGlua190eXBlLCAmZXYtPmJkYWRkcikpKSB7Ci0JCQkJQlRfRVJSKCJObyBtZW1tb3J5IGZvciBuZXcgY29ubmVjdGlvbiIpOworCQkJCUJUX0VSUigiTm8gbWVtb3J5IGZvciBuZXcgY29ubmVjdGlvbiIpOwogCQkJCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogCQkJCXJldHVybjsKIAkJCX0KQEAgLTEwNDksNiArMTA0NSw4IEBACiAJaWYgKGNvbm4pIHsKIAkJaWYgKCFldi0+c3RhdHVzKQogCQkJY29ubi0+bGlua19tb2RlIHw9IEhDSV9MTV9BVVRIOworCQllbHNlCisJCQljb25uLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9MT1c7CiAKIAkJY2xlYXJfYml0KEhDSV9DT05OX0FVVEhfUEVORCwgJmNvbm4tPnBlbmQpOwogCkBAIC0xNDc5LDYgKzE0NzcsOSBAQAogCQkJZWxzZQogCQkJCWNvbm4tPnBvd2VyX3NhdmUgPSAwOwogCQl9CisKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIQ0lfQ09OTl9TQ09fU0VUVVBfUEVORCwgJmNvbm4tPnBlbmQpKQorCQkJaGNpX3Njb19zZXR1cChjb25uLCBldi0+c3RhdHVzKTsKIAl9CiAKIAloY2lfZGV2X3VubG9jayhoZGV2KTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX3NvY2suYyBiL25ldC9ibHVldG9vdGgvaGNpX3NvY2suYwppbmRleCAzOGYwOGY2Li40ZjE3MGE1IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9zb2NrLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfc29jay5jCkBAIC0xNjUsNiArMTY1LDg2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0cnVjdCBiZGFkZHJfbGlzdCAqaGNpX2JsYWNrbGlzdF9sb29rdXAoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGJkYWRkcl90ICpiZGFkZHIpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKwlzdHJ1Y3QgYmRhZGRyX2xpc3QgKmJsYWNrbGlzdCA9ICZoZGV2LT5ibGFja2xpc3Q7CisKKwlsaXN0X2Zvcl9lYWNoKHAsICZibGFja2xpc3QtPmxpc3QpIHsKKwkJc3RydWN0IGJkYWRkcl9saXN0ICpiOworCisJCWIgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBiZGFkZHJfbGlzdCwgbGlzdCk7CisKKwkJaWYgKGJhY21wKGJkYWRkciwgJmItPmJkYWRkcikgPT0gMCkKKwkJCXJldHVybiBiOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGhjaV9ibGFja2xpc3RfYWRkKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB2b2lkIF9fdXNlciAqYXJnKQoreworCWJkYWRkcl90IGJkYWRkcjsKKwlzdHJ1Y3QgYmRhZGRyX2xpc3QgKmVudHJ5OworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZiZGFkZHIsIGFyZywgc2l6ZW9mKGJkYWRkcikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChiYWNtcCgmYmRhZGRyLCBCREFERFJfQU5ZKSA9PSAwKQorCQlyZXR1cm4gLUVCQURGOworCisJaWYgKGhjaV9ibGFja2xpc3RfbG9va3VwKGhkZXYsICZiZGFkZHIpKQorCQlyZXR1cm4gLUVFWElTVDsKKworCWVudHJ5ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJkYWRkcl9saXN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlbnRyeSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwliYWNweSgmZW50cnktPmJkYWRkciwgJmJkYWRkcik7CisKKwlsaXN0X2FkZCgmZW50cnktPmxpc3QsICZoZGV2LT5ibGFja2xpc3QubGlzdCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGhjaV9ibGFja2xpc3RfY2xlYXIoc3RydWN0IGhjaV9kZXYgKmhkZXYpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcCwgKm47CisJc3RydWN0IGJkYWRkcl9saXN0ICpibGFja2xpc3QgPSAmaGRldi0+YmxhY2tsaXN0OworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIG4sICZibGFja2xpc3QtPmxpc3QpIHsKKwkJc3RydWN0IGJkYWRkcl9saXN0ICpiOworCisJCWIgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBiZGFkZHJfbGlzdCwgbGlzdCk7CisKKwkJbGlzdF9kZWwocCk7CisJCWtmcmVlKGIpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhjaV9ibGFja2xpc3RfZGVsKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB2b2lkIF9fdXNlciAqYXJnKQoreworCWJkYWRkcl90IGJkYWRkcjsKKwlzdHJ1Y3QgYmRhZGRyX2xpc3QgKmVudHJ5OworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZiZGFkZHIsIGFyZywgc2l6ZW9mKGJkYWRkcikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChiYWNtcCgmYmRhZGRyLCBCREFERFJfQU5ZKSA9PSAwKQorCQlyZXR1cm4gaGNpX2JsYWNrbGlzdF9jbGVhcihoZGV2KTsKKworCWVudHJ5ID0gaGNpX2JsYWNrbGlzdF9sb29rdXAoaGRldiwgJmJkYWRkcik7CisJaWYgKCFlbnRyeSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlsaXN0X2RlbCgmZW50cnktPmxpc3QpOworCWtmcmVlKGVudHJ5KTsKKworCXJldHVybiAwOworfQorCiAvKiBJb2N0bHMgdGhhdCByZXF1aXJlIGJvdW5kIHNvY2tldCAqLwogc3RhdGljIGlubGluZSBpbnQgaGNpX3NvY2tfYm91bmRfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKQEAgLTE5NCw2ICsyNzQsMTYgQEAKIAljYXNlIEhDSUdFVEFVVEhJTkZPOgogCQlyZXR1cm4gaGNpX2dldF9hdXRoX2luZm8oaGRldiwgKHZvaWQgX191c2VyICopIGFyZyk7CiAKKwljYXNlIEhDSUJMT0NLQUREUjoKKwkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQkJcmV0dXJuIC1FQUNDRVM7CisJCXJldHVybiBoY2lfYmxhY2tsaXN0X2FkZChoZGV2LCAodm9pZCBfX3VzZXIgKikgYXJnKTsKKworCWNhc2UgSENJVU5CTE9DS0FERFI6CisJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKKwkJCXJldHVybiAtRUFDQ0VTOworCQlyZXR1cm4gaGNpX2JsYWNrbGlzdF9kZWwoaGRldiwgKHZvaWQgX191c2VyICopIGFyZyk7CisKIAlkZWZhdWx0OgogCQlpZiAoaGRldi0+aW9jdGwpCiAJCQlyZXR1cm4gaGRldi0+aW9jdGwoaGRldiwgY21kLCBhcmcpOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYyBiL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMKaW5kZXggNDYzZmZhNC4uY2U0NGM0NyAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCkBAIC00MzYsNiArNDM2LDQxIEBACiAJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKK3N0YXRpYyBpbnQgYmxhY2tsaXN0X3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICpwKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgYmRhZGRyX2xpc3QgKmJsYWNrbGlzdCA9ICZoZGV2LT5ibGFja2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCAqbDsKKworCWhjaV9kZXZfbG9ja19iaChoZGV2KTsKKworCWxpc3RfZm9yX2VhY2gobCwgJmJsYWNrbGlzdC0+bGlzdCkgeworCQlzdHJ1Y3QgYmRhZGRyX2xpc3QgKmI7CisJCWJkYWRkcl90IGJkYWRkcjsKKworCQliID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgYmRhZGRyX2xpc3QsIGxpc3QpOworCisJCWJhc3dhcCgmYmRhZGRyLCAmYi0+YmRhZGRyKTsKKworCQlzZXFfcHJpbnRmKGYsICIlc1xuIiwgYmF0b3N0cigmYmRhZGRyKSk7CisJfQorCisJaGNpX2Rldl91bmxvY2tfYmgoaGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBibGFja2xpc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgYmxhY2tsaXN0X3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBibGFja2xpc3RfZm9wcyA9IHsKKwkub3BlbgkJPSBibGFja2xpc3Rfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKIGludCBoY2lfcmVnaXN0ZXJfc3lzZnMoc3RydWN0IGhjaV9kZXYgKmhkZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmhkZXYtPmRldjsKQEAgLTQ2NSw2ICs1MDAsOSBAQAogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImlucXVpcnlfY2FjaGUiLCAwNDQ0LCBoZGV2LT5kZWJ1Z2ZzLAogCQkJCQkJaGRldiwgJmlucXVpcnlfY2FjaGVfZm9wcyk7CiAKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJibGFja2xpc3QiLCAwNDQ0LCBoZGV2LT5kZWJ1Z2ZzLAorCQkJCQkJaGRldiwgJmJsYWNrbGlzdF9mb3BzKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKaW5kZXggMWI2ODJhNS4uOWJhMWU4ZSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9sMmNhcC5jCisrKyBiL25ldC9ibHVldG9vdGgvbDJjYXAuYwpAQCAtMSw2ICsxLDggQEAKIC8qCiAgICBCbHVlWiAtIEJsdWV0b290aCBwcm90b2NvbCBzdGFjayBmb3IgTGludXgKICAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAxIFF1YWxjb21tIEluY29ycG9yYXRlZAorICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgR3VzdGF2byBGLiBQYWRvdmFuIDxndXN0YXZvQHBhZG92YW4ub3JnPgorICAgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuCiAKICAgIFdyaXR0ZW4gMjAwMCwyMDAxIGJ5IE1heGltIEtyYXNueWFuc2t5IDxtYXhrQHF1YWxjb21tLmNvbT4KIApAQCAtNTMsMTUgKzU1LDkgQEAKICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmg+CiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9sMmNhcC5oPgogCi0jZGVmaW5lIFZFUlNJT04gIjIuMTQiCisjZGVmaW5lIFZFUlNJT04gIjIuMTUiCiAKLSNpZmRlZiBDT05GSUdfQlRfTDJDQVBfRVhUX0ZFQVRVUkVTCi1zdGF0aWMgaW50IGVuYWJsZV9lcnRtID0gMTsKLSNlbHNlCi1zdGF0aWMgaW50IGVuYWJsZV9lcnRtID0gMDsKLSNlbmRpZgotc3RhdGljIGludCBtYXhfdHJhbnNtaXQgPSBMMkNBUF9ERUZBVUxUX01BWF9UWDsKLXN0YXRpYyBpbnQgdHhfd2luZG93ID0gTDJDQVBfREVGQVVMVF9UWF9XSU5ET1c7CitzdGF0aWMgaW50IGRpc2FibGVfZXJ0bSA9IDA7CiAKIHN0YXRpYyB1MzIgbDJjYXBfZmVhdF9tYXNrID0gTDJDQVBfRkVBVF9GSVhFRF9DSEFOOwogc3RhdGljIHU4IGwyY2FwX2ZpeGVkX2NoYW5bOF0gPSB7IDB4MDIsIH07CkBAIC04MCw5ICs3NiwxMiBAQAogc3RhdGljIHZvaWQgbDJjYXBfc29ja19jbG9zZShzdHJ1Y3Qgc29jayAqc2spOwogc3RhdGljIHZvaWQgbDJjYXBfc29ja19raWxsKHN0cnVjdCBzb2NrICpzayk7CiAKK3N0YXRpYyBpbnQgbDJjYXBfYnVpbGRfY29uZl9yZXEoc3RydWN0IHNvY2sgKnNrLCB2b2lkICpkYXRhKTsKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbDJjYXBfYnVpbGRfY21kKHN0cnVjdCBsMmNhcF9jb25uICpjb25uLAogCQkJCXU4IGNvZGUsIHU4IGlkZW50LCB1MTYgZGxlbiwgdm9pZCAqZGF0YSk7CiAKK3N0YXRpYyBpbnQgbDJjYXBfZXJ0bV9kYXRhX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOworCiAvKiAtLS0tIEwyQ0FQIHRpbWVycyAtLS0tICovCiBzdGF0aWMgdm9pZCBsMmNhcF9zb2NrX3RpbWVvdXQodW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC0yNzgsNiArMjc3LDI0IEBACiAJCXBhcmVudC0+c2tfZGF0YV9yZWFkeShwYXJlbnQsIDApOwogCX0gZWxzZQogCQlzay0+c2tfc3RhdGVfY2hhbmdlKHNrKTsKKworCXNrYl9xdWV1ZV9wdXJnZShUWF9RVUVVRShzaykpOworCisJaWYgKGwyY2FwX3BpKHNrKS0+bW9kZSA9PSBMMkNBUF9NT0RFX0VSVE0pIHsKKwkJc3RydWN0IHNyZWpfbGlzdCAqbCwgKnRtcDsKKworCQlkZWxfdGltZXIoJmwyY2FwX3BpKHNrKS0+cmV0cmFuc190aW1lcik7CisJCWRlbF90aW1lcigmbDJjYXBfcGkoc2spLT5tb25pdG9yX3RpbWVyKTsKKwkJZGVsX3RpbWVyKCZsMmNhcF9waShzayktPmFja190aW1lcik7CisKKwkJc2tiX3F1ZXVlX3B1cmdlKFNSRUpfUVVFVUUoc2spKTsKKwkJc2tiX3F1ZXVlX3B1cmdlKEJVU1lfUVVFVUUoc2spKTsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgdG1wLCBTUkVKX0xJU1Qoc2spLCBsaXN0KSB7CisJCQlsaXN0X2RlbCgmbC0+bGlzdCk7CisJCQlrZnJlZShsKTsKKwkJfQorCX0KIH0KIAogLyogU2VydmljZSBsZXZlbCBzZWN1cml0eSAqLwpAQCAtMzUxLDggKzM2OCwxMiBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGwyY2FwX2hkciAqbGg7CiAJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBwaS0+Y29ubjsKKwlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKilwaTsKIAlpbnQgY291bnQsIGhsZW4gPSBMMkNBUF9IRFJfU0laRSArIDI7CiAKKwlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0NPTk5FQ1RFRCkKKwkJcmV0dXJuOworCiAJaWYgKHBpLT5mY3MgPT0gTDJDQVBfRkNTX0NSQzE2KQogCQlobGVuICs9IDI7CiAKQEAgLTQwMSw2ICs0MjIsMTEgQEAKIAlsMmNhcF9zZW5kX3NmcmFtZShwaSwgY29udHJvbCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IF9fbDJjYXBfbm9fY29ubl9wZW5kaW5nKHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gIShsMmNhcF9waShzayktPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX0NPTk5FQ1RfUEVORCk7Cit9CisKIHN0YXRpYyB2b2lkIGwyY2FwX2RvX3N0YXJ0KHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKQEAgLTQwOSwxMiArNDM1LDEzIEBACiAJCWlmICghKGNvbm4tPmluZm9fc3RhdGUgJiBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfRE9ORSkpCiAJCQlyZXR1cm47CiAKLQkJaWYgKGwyY2FwX2NoZWNrX3NlY3VyaXR5KHNrKSkgeworCQlpZiAobDJjYXBfY2hlY2tfc2VjdXJpdHkoc2spICYmIF9fbDJjYXBfbm9fY29ubl9wZW5kaW5nKHNrKSkgewogCQkJc3RydWN0IGwyY2FwX2Nvbm5fcmVxIHJlcTsKIAkJCXJlcS5zY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKIAkJCXJlcS5wc20gID0gbDJjYXBfcGkoc2spLT5wc207CiAKIAkJCWwyY2FwX3BpKHNrKS0+aWRlbnQgPSBsMmNhcF9nZXRfaWRlbnQoY29ubik7CisJCQlsMmNhcF9waShzayktPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9DT05ORUNUX1BFTkQ7CiAKIAkJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX3BpKHNrKS0+aWRlbnQsCiAJCQkJCUwyQ0FQX0NPTk5fUkVRLCBzaXplb2YocmVxKSwgJnJlcSk7CkBAIC00MzQsMjQgKzQ2MSw1NyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgbDJjYXBfc2VuZF9kaXNjb25uX3JlcShzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiwgc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIGlubGluZSBpbnQgbDJjYXBfbW9kZV9zdXBwb3J0ZWQoX191OCBtb2RlLCBfX3UzMiBmZWF0X21hc2spCit7CisJdTMyIGxvY2FsX2ZlYXRfbWFzayA9IGwyY2FwX2ZlYXRfbWFzazsKKwlpZiAoIWRpc2FibGVfZXJ0bSkKKwkJbG9jYWxfZmVhdF9tYXNrIHw9IEwyQ0FQX0ZFQVRfRVJUTSB8IEwyQ0FQX0ZFQVRfU1RSRUFNSU5HOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBMMkNBUF9NT0RFX0VSVE06CisJCXJldHVybiBMMkNBUF9GRUFUX0VSVE0gJiBmZWF0X21hc2sgJiBsb2NhbF9mZWF0X21hc2s7CisJY2FzZSBMMkNBUF9NT0RFX1NUUkVBTUlORzoKKwkJcmV0dXJuIEwyQ0FQX0ZFQVRfU1RSRUFNSU5HICYgZmVhdF9tYXNrICYgbG9jYWxfZmVhdF9tYXNrOworCWRlZmF1bHQ6CisJCXJldHVybiAweDAwOworCX0KK30KKworc3RhdGljIHZvaWQgbDJjYXBfc2VuZF9kaXNjb25uX3JlcShzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiwgc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKQogewogCXN0cnVjdCBsMmNhcF9kaXNjb25uX3JlcSByZXE7CiAKKwlpZiAoIWNvbm4pCisJCXJldHVybjsKKworCXNrYl9xdWV1ZV9wdXJnZShUWF9RVUVVRShzaykpOworCisJaWYgKGwyY2FwX3BpKHNrKS0+bW9kZSA9PSBMMkNBUF9NT0RFX0VSVE0pIHsKKwkJZGVsX3RpbWVyKCZsMmNhcF9waShzayktPnJldHJhbnNfdGltZXIpOworCQlkZWxfdGltZXIoJmwyY2FwX3BpKHNrKS0+bW9uaXRvcl90aW1lcik7CisJCWRlbF90aW1lcigmbDJjYXBfcGkoc2spLT5hY2tfdGltZXIpOworCX0KKwogCXJlcS5kY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5kY2lkKTsKIAlyZXEuc2NpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7CiAJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfZ2V0X2lkZW50KGNvbm4pLAogCQkJTDJDQVBfRElTQ09OTl9SRVEsIHNpemVvZihyZXEpLCAmcmVxKTsKKworCXNrLT5za19zdGF0ZSA9IEJUX0RJU0NPTk47CisJc2stPnNrX2VyciA9IGVycjsKIH0KIAogLyogLS0tLSBMMkNBUCBjb25uZWN0aW9ucyAtLS0tICovCiBzdGF0aWMgdm9pZCBsMmNhcF9jb25uX3N0YXJ0KHN0cnVjdCBsMmNhcF9jb25uICpjb25uKQogewogCXN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgKmwgPSAmY29ubi0+Y2hhbl9saXN0OworCXN0cnVjdCBzb2NrX2RlbF9saXN0IGRlbCwgKnRtcDEsICp0bXAyOwogCXN0cnVjdCBzb2NrICpzazsKIAogCUJUX0RCRygiY29ubiAlcCIsIGNvbm4pOwogCisJSU5JVF9MSVNUX0hFQUQoJmRlbC5saXN0KTsKKwogCXJlYWRfbG9jaygmbC0+bG9jayk7CiAKIAlmb3IgKHNrID0gbC0+aGVhZDsgc2s7IHNrID0gbDJjYXBfcGkoc2spLT5uZXh0X2MpIHsKQEAgLTQ2NCwxOCArNTI0LDM4IEBACiAJCX0KIAogCQlpZiAoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1QpIHsKLQkJCWlmIChsMmNhcF9jaGVja19zZWN1cml0eShzaykpIHsKLQkJCQlzdHJ1Y3QgbDJjYXBfY29ubl9yZXEgcmVxOwotCQkJCXJlcS5zY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKLQkJCQlyZXEucHNtICA9IGwyY2FwX3BpKHNrKS0+cHNtOworCQkJc3RydWN0IGwyY2FwX2Nvbm5fcmVxIHJlcTsKIAotCQkJCWwyY2FwX3BpKHNrKS0+aWRlbnQgPSBsMmNhcF9nZXRfaWRlbnQoY29ubik7Ci0KLQkJCQlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9waShzayktPmlkZW50LAotCQkJCQlMMkNBUF9DT05OX1JFUSwgc2l6ZW9mKHJlcSksICZyZXEpOworCQkJaWYgKCFsMmNhcF9jaGVja19zZWN1cml0eShzaykgfHwKKwkJCQkJIV9fbDJjYXBfbm9fY29ubl9wZW5kaW5nKHNrKSkgeworCQkJCWJoX3VubG9ja19zb2NrKHNrKTsKKwkJCQljb250aW51ZTsKIAkJCX0KKworCQkJaWYgKCFsMmNhcF9tb2RlX3N1cHBvcnRlZChsMmNhcF9waShzayktPm1vZGUsCisJCQkJCWNvbm4tPmZlYXRfbWFzaykKKwkJCQkJJiYgbDJjYXBfcGkoc2spLT5jb25mX3N0YXRlICYKKwkJCQkJTDJDQVBfQ09ORl9TVEFURTJfREVWSUNFKSB7CisJCQkJdG1wMSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrX2RlbF9saXN0KSwKKwkJCQkJCUdGUF9BVE9NSUMpOworCQkJCXRtcDEtPnNrID0gc2s7CisJCQkJbGlzdF9hZGRfdGFpbCgmdG1wMS0+bGlzdCwgJmRlbC5saXN0KTsKKwkJCQliaF91bmxvY2tfc29jayhzayk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCXJlcS5zY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKKwkJCXJlcS5wc20gID0gbDJjYXBfcGkoc2spLT5wc207CisKKwkJCWwyY2FwX3BpKHNrKS0+aWRlbnQgPSBsMmNhcF9nZXRfaWRlbnQoY29ubik7CisJCQlsMmNhcF9waShzayktPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9DT05ORUNUX1BFTkQ7CisKKwkJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX3BpKHNrKS0+aWRlbnQsCisJCQkJTDJDQVBfQ09OTl9SRVEsIHNpemVvZihyZXEpLCAmcmVxKTsKKwogCQl9IGVsc2UgaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUMikgewogCQkJc3RydWN0IGwyY2FwX2Nvbm5fcnNwIHJzcDsKKwkJCWNoYXIgYnVmWzEyOF07CiAJCQlyc3Auc2NpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+ZGNpZCk7CiAJCQlyc3AuZGNpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7CiAKQEAgLTQ5OCwxMiArNTc4LDMxIEBACiAKIAkJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX3BpKHNrKS0+aWRlbnQsCiAJCQkJCUwyQ0FQX0NPTk5fUlNQLCBzaXplb2YocnNwKSwgJnJzcCk7CisKKwkJCWlmIChsMmNhcF9waShzayktPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX1JFUV9TRU5UIHx8CisJCQkJCXJzcC5yZXN1bHQgIT0gTDJDQVBfQ1JfU1VDQ0VTUykgeworCQkJCWJoX3VubG9ja19zb2NrKHNrKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJbDJjYXBfcGkoc2spLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfUkVRX1NFTlQ7CisJCQlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9nZXRfaWRlbnQoY29ubiksIEwyQ0FQX0NPTkZfUkVRLAorCQkJCQkJbDJjYXBfYnVpbGRfY29uZl9yZXEoc2ssIGJ1ZiksIGJ1Zik7CisJCQlsMmNhcF9waShzayktPm51bV9jb25mX3JlcSsrOwogCQl9CiAKIAkJYmhfdW5sb2NrX3NvY2soc2spOwogCX0KIAogCXJlYWRfdW5sb2NrKCZsLT5sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0bXAxLCB0bXAyLCAmZGVsLmxpc3QsIGxpc3QpIHsKKwkJYmhfbG9ja19zb2NrKHRtcDEtPnNrKTsKKwkJX19sMmNhcF9zb2NrX2Nsb3NlKHRtcDEtPnNrLCBFQ09OTlJFU0VUKTsKKwkJYmhfdW5sb2NrX3NvY2sodG1wMS0+c2spOworCQlsaXN0X2RlbCgmdG1wMS0+bGlzdCk7CisJCWtmcmVlKHRtcDEpOworCX0KIH0KIAogc3RhdGljIHZvaWQgbDJjYXBfY29ubl9yZWFkeShzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubikKQEAgLTczMiw5ICs4MzEsOCBAQAogCQkJCXNrLT5za190eXBlID09IFNPQ0tfU1RSRUFNKSB7CiAJCQlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKIAotCQkJc2stPnNrX3N0YXRlID0gQlRfRElTQ09OTjsKIAkJCWwyY2FwX3NvY2tfc2V0X3RpbWVyKHNrLCBzay0+c2tfc25kdGltZW8pOwotCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjb25uLCBzayk7CisJCQlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKGNvbm4sIHNrLCByZWFzb24pOwogCQl9IGVsc2UKIAkJCWwyY2FwX2NoYW5fZGVsKHNrLCByZWFzb24pOwogCQlicmVhazsKQEAgLTc5NCw2ICs4OTIsNyBAQAogCiAJCXBpLT5pbXR1ID0gbDJjYXBfcGkocGFyZW50KS0+aW10dTsKIAkJcGktPm9tdHUgPSBsMmNhcF9waShwYXJlbnQpLT5vbXR1OworCQlwaS0+Y29uZl9zdGF0ZSA9IGwyY2FwX3BpKHBhcmVudCktPmNvbmZfc3RhdGU7CiAJCXBpLT5tb2RlID0gbDJjYXBfcGkocGFyZW50KS0+bW9kZTsKIAkJcGktPmZjcyAgPSBsMmNhcF9waShwYXJlbnQpLT5mY3M7CiAJCXBpLT5tYXhfdHggPSBsMmNhcF9waShwYXJlbnQpLT5tYXhfdHg7CkBAIC04MDQsMTMgKzkwMywxNSBAQAogCX0gZWxzZSB7CiAJCXBpLT5pbXR1ID0gTDJDQVBfREVGQVVMVF9NVFU7CiAJCXBpLT5vbXR1ID0gMDsKLQkJaWYgKGVuYWJsZV9lcnRtICYmIHNrLT5za190eXBlID09IFNPQ0tfU1RSRUFNKQorCQlpZiAoIWRpc2FibGVfZXJ0bSAmJiBzay0+c2tfdHlwZSA9PSBTT0NLX1NUUkVBTSkgewogCQkJcGktPm1vZGUgPSBMMkNBUF9NT0RFX0VSVE07Ci0JCWVsc2UKKwkJCXBpLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfU1RBVEUyX0RFVklDRTsKKwkJfSBlbHNlIHsKIAkJCXBpLT5tb2RlID0gTDJDQVBfTU9ERV9CQVNJQzsKLQkJcGktPm1heF90eCA9IG1heF90cmFuc21pdDsKKwkJfQorCQlwaS0+bWF4X3R4ID0gTDJDQVBfREVGQVVMVF9NQVhfVFg7CiAJCXBpLT5mY3MgID0gTDJDQVBfRkNTX0NSQzE2OwotCQlwaS0+dHhfd2luID0gdHhfd2luZG93OworCQlwaS0+dHhfd2luID0gTDJDQVBfREVGQVVMVF9UWF9XSU5ET1c7CiAJCXBpLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9MT1c7CiAJCXBpLT5yb2xlX3N3aXRjaCA9IDA7CiAJCXBpLT5mb3JjZV9yZWxpYWJsZSA9IDA7CkBAIC0xMDU5LDcgKzExNjAsNyBAQAogCQlicmVhazsKIAljYXNlIEwyQ0FQX01PREVfRVJUTToKIAljYXNlIEwyQ0FQX01PREVfU1RSRUFNSU5HOgotCQlpZiAoZW5hYmxlX2VydG0pCisJCWlmICghZGlzYWJsZV9lcnRtKQogCQkJYnJlYWs7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWRlZmF1bHQ6CkBAIC0xMDc2LDYgKzExNzcsNyBAQAogCiAJY2FzZSBCVF9DT05ORUNURUQ6CiAJCS8qIEFscmVhZHkgY29ubmVjdGVkICovCisJCWVyciA9IC1FSVNDT05OOwogCQlnb3RvIGRvbmU7CiAKIAljYXNlIEJUX09QRU46CkBAIC0xMTI0LDcgKzEyMjYsNyBAQAogCQlicmVhazsKIAljYXNlIEwyQ0FQX01PREVfRVJUTToKIAljYXNlIEwyQ0FQX01PREVfU1RSRUFNSU5HOgotCQlpZiAoZW5hYmxlX2VydG0pCisJCWlmICghZGlzYWJsZV9lcnRtKQogCQkJYnJlYWs7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWRlZmF1bHQ6CkBAIC0xMjc3LDkgKzEzNzksMTEgQEAKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSAodm9pZCAqKSBhcmc7CiAKKwlCVF9EQkcoInNrICVwIiwgc2spOworCiAJYmhfbG9ja19zb2NrKHNrKTsKIAlpZiAobDJjYXBfcGkoc2spLT5yZXRyeV9jb3VudCA+PSBsMmNhcF9waShzayktPnJlbW90ZV9tYXhfdHgpIHsKLQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShsMmNhcF9waShzayktPmNvbm4sIHNrKTsKKwkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShsMmNhcF9waShzayktPmNvbm4sIHNrLCBFQ09OTkFCT1JURUQpOwogCQliaF91bmxvY2tfc29jayhzayk7CiAJCXJldHVybjsKIAl9CkBAIC0xMjk1LDYgKzEzOTksOCBAQAogewogCXN0cnVjdCBzb2NrICpzayA9ICh2b2lkICopIGFyZzsKIAorCUJUX0RCRygic2sgJXAiLCBzayk7CisKIAliaF9sb2NrX3NvY2soc2spOwogCWwyY2FwX3BpKHNrKS0+cmV0cnlfY291bnQgPSAxOwogCV9fbW9kX21vbml0b3JfdGltZXIoKTsKQEAgLTEzMzMsNyArMTQzOSw3IEBACiAJaGNpX3NlbmRfYWNsKHBpLT5jb25uLT5oY29uLCBza2IsIDApOwogfQogCi1zdGF0aWMgaW50IGwyY2FwX3N0cmVhbWluZ19zZW5kKHN0cnVjdCBzb2NrICpzaykKK3N0YXRpYyB2b2lkIGwyY2FwX3N0cmVhbWluZ19zZW5kKHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdHhfc2tiOwogCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CkBAIC0xMzYzLDcgKzE0NjksNiBAQAogCQlza2IgPSBza2JfZGVxdWV1ZShUWF9RVUVVRShzaykpOwogCQlrZnJlZV9za2Ioc2tiKTsKIAl9Ci0JcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGwyY2FwX3JldHJhbnNtaXRfb25lX2ZyYW1lKHN0cnVjdCBzb2NrICpzaywgdTggdHhfc2VxKQpAQCAtMTM4NywxNSArMTQ5MiwyMiBAQAogCiAJaWYgKHBpLT5yZW1vdGVfbWF4X3R4ICYmCiAJCQlidF9jYihza2IpLT5yZXRyaWVzID09IHBpLT5yZW1vdGVfbWF4X3R4KSB7Ci0JCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEocGktPmNvbm4sIHNrKTsKKwkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShwaS0+Y29ubiwgc2ssIEVDT05OQUJPUlRFRCk7CiAJCXJldHVybjsKIAl9CiAKIAl0eF9za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKIAlidF9jYihza2IpLT5yZXRyaWVzKys7CiAJY29udHJvbCA9IGdldF91bmFsaWduZWRfbGUxNih0eF9za2ItPmRhdGEgKyBMMkNBUF9IRFJfU0laRSk7CisKKwlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NFTkRfRkJJVCkgeworCQljb250cm9sIHw9IEwyQ0FQX0NUUkxfRklOQUw7CisJCXBpLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1NFTkRfRkJJVDsKKwl9CisKIAljb250cm9sIHw9IChwaS0+YnVmZmVyX3NlcSA8PCBMMkNBUF9DVFJMX1JFUVNFUV9TSElGVCkKIAkJCXwgKHR4X3NlcSA8PCBMMkNBUF9DVFJMX1RYU0VRX1NISUZUKTsKKwogCXB1dF91bmFsaWduZWRfbGUxNihjb250cm9sLCB0eF9za2ItPmRhdGEgKyBMMkNBUF9IRFJfU0laRSk7CiAKIAlpZiAocGktPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpIHsKQEAgLTE0MTMsMTUgKzE1MjUsMTQgQEAKIAl1MTYgY29udHJvbCwgZmNzOwogCWludCBuc2VudCA9IDA7CiAKLQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1dBSVRfRikKLQkJcmV0dXJuIDA7CisJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9DT05ORUNURUQpCisJCXJldHVybiAtRU5PVENPTk47CiAKLQl3aGlsZSAoKHNrYiA9IHNrLT5za19zZW5kX2hlYWQpICYmICghbDJjYXBfdHhfd2luZG93X2Z1bGwoc2spKSAmJgotCQkJIShwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fUkVNT1RFX0JVU1kpKSB7CisJd2hpbGUgKChza2IgPSBzay0+c2tfc2VuZF9oZWFkKSAmJiAoIWwyY2FwX3R4X3dpbmRvd19mdWxsKHNrKSkpIHsKIAogCQlpZiAocGktPnJlbW90ZV9tYXhfdHggJiYKIAkJCQlidF9jYihza2IpLT5yZXRyaWVzID09IHBpLT5yZW1vdGVfbWF4X3R4KSB7Ci0JCQlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKHBpLT5jb25uLCBzayk7CisJCQlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKHBpLT5jb25uLCBzaywgRUNPTk5BQk9SVEVEKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTE0MzAsNiArMTU0MSw4IEBACiAJCWJ0X2NiKHNrYiktPnJldHJpZXMrKzsKIAogCQljb250cm9sID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHR4X3NrYi0+ZGF0YSArIEwyQ0FQX0hEUl9TSVpFKTsKKwkJY29udHJvbCAmPSBMMkNBUF9DVFJMX1NBUjsKKwogCQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NFTkRfRkJJVCkgewogCQkJY29udHJvbCB8PSBMMkNBUF9DVFJMX0ZJTkFMOwogCQkJcGktPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fU0VORF9GQklUOwpAQCAtMTQ3MCwxNiArMTU4MywxMSBAQAogCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CiAJaW50IHJldDsKIAotCXNwaW5fbG9ja19iaCgmcGktPnNlbmRfbG9jayk7Ci0KIAlpZiAoIXNrYl9xdWV1ZV9lbXB0eShUWF9RVUVVRShzaykpKQogCQlzay0+c2tfc2VuZF9oZWFkID0gVFhfUVVFVUUoc2spLT5uZXh0OwogCiAJcGktPm5leHRfdHhfc2VxID0gcGktPmV4cGVjdGVkX2Fja19zZXE7CiAJcmV0ID0gbDJjYXBfZXJ0bV9zZW5kKHNrKTsKLQotCXNwaW5fdW5sb2NrX2JoKCZwaS0+c2VuZF9sb2NrKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE0ODcsNyArMTU5NSw2IEBACiB7CiAJc3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopcGk7CiAJdTE2IGNvbnRyb2wgPSAwOwotCWludCBuZnJhbWVzOwogCiAJY29udHJvbCB8PSBwaS0+YnVmZmVyX3NlcSA8PCBMMkNBUF9DVFJMX1JFUVNFUV9TSElGVDsKIApAQCAtMTQ5OCwxMSArMTYwNSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlzcGluX2xvY2tfYmgoJnBpLT5zZW5kX2xvY2spOwotCW5mcmFtZXMgPSBsMmNhcF9lcnRtX3NlbmQoc2spOwotCXNwaW5fdW5sb2NrX2JoKCZwaS0+c2VuZF9sb2NrKTsKLQotCWlmIChuZnJhbWVzID4gMCkKKwlpZiAobDJjYXBfZXJ0bV9zZW5kKHNrKSA+IDApCiAJCXJldHVybjsKIAogCWNvbnRyb2wgfD0gTDJDQVBfU1VQRVJfUkNWX1JFQURZOwpAQCAtMTY5NywxMCArMTgwMCw4IEBACiAJCXNpemUgKz0gYnVmbGVuOwogCX0KIAlza2JfcXVldWVfc3BsaWNlX3RhaWwoJnNhcl9xdWV1ZSwgVFhfUVVFVUUoc2spKTsKLQlzcGluX2xvY2tfYmgoJnBpLT5zZW5kX2xvY2spOwogCWlmIChzay0+c2tfc2VuZF9oZWFkID09IE5VTEwpCiAJCXNrLT5za19zZW5kX2hlYWQgPSBzYXJfcXVldWUubmV4dDsKLQlzcGluX3VubG9ja19iaCgmcGktPnNlbmRfbG9jayk7CiAKIAlyZXR1cm4gc2l6ZTsKIH0KQEAgLTE3NDUsNyArMTg0Niw3IEBACiAJY2FzZSBMMkNBUF9NT0RFX0JBU0lDOgogCQkvKiBDaGVjayBvdXRnb2luZyBNVFUgKi8KIAkJaWYgKGxlbiA+IHBpLT5vbXR1KSB7Ci0JCQllcnIgPSAtRUlOVkFMOworCQkJZXJyID0gLUVNU0dTSVpFOwogCQkJZ290byBkb25lOwogCQl9CiAKQEAgLTE3NzIsMTQgKzE4NzMsOSBAQAogCQkJfQogCQkJX19za2JfcXVldWVfdGFpbChUWF9RVUVVRShzayksIHNrYik7CiAKLQkJCWlmIChwaS0+bW9kZSA9PSBMMkNBUF9NT0RFX0VSVE0pCi0JCQkJc3Bpbl9sb2NrX2JoKCZwaS0+c2VuZF9sb2NrKTsKLQogCQkJaWYgKHNrLT5za19zZW5kX2hlYWQgPT0gTlVMTCkKIAkJCQlzay0+c2tfc2VuZF9oZWFkID0gc2tiOwogCi0JCQlpZiAocGktPm1vZGUgPT0gTDJDQVBfTU9ERV9FUlRNKQotCQkJCXNwaW5fdW5sb2NrX2JoKCZwaS0+c2VuZF9sb2NrKTsKIAkJfSBlbHNlIHsKIAkJLyogU2VnbWVudCBTRFUgaW50byBtdWx0aXBsZXMgUERVcyAqLwogCQkJZXJyID0gbDJjYXBfc2FyX3NlZ21lbnRfc2R1KHNrLCBtc2csIGxlbik7CkBAIC0xNzg4LDExICsxODg0LDE0IEBACiAJCX0KIAogCQlpZiAocGktPm1vZGUgPT0gTDJDQVBfTU9ERV9TVFJFQU1JTkcpIHsKLQkJCWVyciA9IGwyY2FwX3N0cmVhbWluZ19zZW5kKHNrKTsKKwkJCWwyY2FwX3N0cmVhbWluZ19zZW5kKHNrKTsKIAkJfSBlbHNlIHsKLQkJCXNwaW5fbG9ja19iaCgmcGktPnNlbmRfbG9jayk7CisJCQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1JFTU9URV9CVVNZICYmCisJCQkJCXBpLT5jb25uX3N0YXRlICYmIEwyQ0FQX0NPTk5fV0FJVF9GKSB7CisJCQkJZXJyID0gbGVuOworCQkJCWJyZWFrOworCQkJfQogCQkJZXJyID0gbDJjYXBfZXJ0bV9zZW5kKHNrKTsKLQkJCXNwaW5fdW5sb2NrX2JoKCZwaS0+c2VuZF9sb2NrKTsKIAkJfQogCiAJCWlmIChlcnIgPj0gMCkKQEAgLTE4MDEsNyArMTkwMCw3IEBACiAKIAlkZWZhdWx0OgogCQlCVF9EQkcoImJhZCBzdGF0ZSAlMS4xeCIsIHBpLT5tb2RlKTsKLQkJZXJyID0gLUVJTlZBTDsKKwkJZXJyID0gLUVCQURGRDsKIAl9CiAKIGRvbmU6CkBAIC0xODE3LDYgKzE5MTYsOCBAQAogCiAJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUMiAmJiBidF9zayhzayktPmRlZmVyX3NldHVwKSB7CiAJCXN0cnVjdCBsMmNhcF9jb25uX3JzcCByc3A7CisJCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gbDJjYXBfcGkoc2spLT5jb25uOworCQl1OCBidWZbMTI4XTsKIAogCQlzay0+c2tfc3RhdGUgPSBCVF9DT05GSUc7CiAKQEAgLTE4MjcsNiArMTkyOCwxNiBAQAogCQlsMmNhcF9zZW5kX2NtZChsMmNhcF9waShzayktPmNvbm4sIGwyY2FwX3BpKHNrKS0+aWRlbnQsCiAJCQkJCUwyQ0FQX0NPTk5fUlNQLCBzaXplb2YocnNwKSwgJnJzcCk7CiAKKwkJaWYgKGwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfUkVRX1NFTlQpIHsKKwkJCXJlbGVhc2Vfc29jayhzayk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX1JFUV9TRU5UOworCQlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9nZXRfaWRlbnQoY29ubiksIEwyQ0FQX0NPTkZfUkVRLAorCQkJCWwyY2FwX2J1aWxkX2NvbmZfcmVxKHNrLCBidWYpLCBidWYpOworCQlsMmNhcF9waShzayktPm51bV9jb25mX3JlcSsrOworCiAJCXJlbGVhc2Vfc29jayhzayk7CiAJCXJldHVybiAwOwogCX0KQEAgLTE4NjMsMTMgKzE5NzQsMTkgQEAKIAkJCWJyZWFrOwogCQl9CiAKKwkJaWYgKG9wdHMudHh3aW5fc2l6ZSA+IEwyQ0FQX0RFRkFVTFRfVFhfV0lORE9XKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwogCQlsMmNhcF9waShzayktPm1vZGUgPSBvcHRzLm1vZGU7CiAJCXN3aXRjaCAobDJjYXBfcGkoc2spLT5tb2RlKSB7CiAJCWNhc2UgTDJDQVBfTU9ERV9CQVNJQzoKKwkJCWwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSAmPSB+TDJDQVBfQ09ORl9TVEFURTJfREVWSUNFOwogCQkJYnJlYWs7CiAJCWNhc2UgTDJDQVBfTU9ERV9FUlRNOgogCQljYXNlIEwyQ0FQX01PREVfU1RSRUFNSU5HOgotCQkJaWYgKGVuYWJsZV9lcnRtKQorCQkJaWYgKCFkaXNhYmxlX2VydG0pCiAJCQkJYnJlYWs7CiAJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAkJZGVmYXVsdDoKQEAgLTIxMzcsNiArMjI1NCwxMCBAQAogCQkJZXJyID0gYnRfc29ja193YWl0X3N0YXRlKHNrLCBCVF9DTE9TRUQsCiAJCQkJCQkJc2stPnNrX2xpbmdlcnRpbWUpOwogCX0KKworCWlmICghZXJyICYmIHNrLT5za19lcnIpCisJCWVyciA9IC1zay0+c2tfZXJyOworCiAJcmVsZWFzZV9zb2NrKHNrKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMjM1NywyNSArMjQ3OCwxMCBAQAogCiAJX19za2JfcXVldWVfaGVhZF9pbml0KFNSRUpfUVVFVUUoc2spKTsKIAlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoQlVTWV9RVUVVRShzaykpOwotCXNwaW5fbG9ja19pbml0KCZsMmNhcF9waShzayktPnNlbmRfbG9jayk7CiAKIAlJTklUX1dPUksoJmwyY2FwX3BpKHNrKS0+YnVzeV93b3JrLCBsMmNhcF9idXN5X3dvcmspOwotfQogCi1zdGF0aWMgaW50IGwyY2FwX21vZGVfc3VwcG9ydGVkKF9fdTggbW9kZSwgX191MzIgZmVhdF9tYXNrKQotewotCXUzMiBsb2NhbF9mZWF0X21hc2sgPSBsMmNhcF9mZWF0X21hc2s7Ci0JaWYgKGVuYWJsZV9lcnRtKQotCQlsb2NhbF9mZWF0X21hc2sgfD0gTDJDQVBfRkVBVF9FUlRNIHwgTDJDQVBfRkVBVF9TVFJFQU1JTkc7Ci0KLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIEwyQ0FQX01PREVfRVJUTToKLQkJcmV0dXJuIEwyQ0FQX0ZFQVRfRVJUTSAmIGZlYXRfbWFzayAmIGxvY2FsX2ZlYXRfbWFzazsKLQljYXNlIEwyQ0FQX01PREVfU1RSRUFNSU5HOgotCQlyZXR1cm4gTDJDQVBfRkVBVF9TVFJFQU1JTkcgJiBmZWF0X21hc2sgJiBsb2NhbF9mZWF0X21hc2s7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDB4MDA7Ci0JfQorCXNrLT5za19iYWNrbG9nX3JjdiA9IGwyY2FwX2VydG1fZGF0YV9yY3Y7CiB9CiAKIHN0YXRpYyBpbmxpbmUgX191OCBsMmNhcF9zZWxlY3RfbW9kZShfX3U4IG1vZGUsIF9fdTE2IHJlbW90ZV9mZWF0X21hc2spCkBAIC0yNDA2LDEwICsyNTEyLDEwIEBACiAJc3dpdGNoIChwaS0+bW9kZSkgewogCWNhc2UgTDJDQVBfTU9ERV9TVFJFQU1JTkc6CiAJY2FzZSBMMkNBUF9NT0RFX0VSVE06Ci0JCXBpLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfU1RBVEUyX0RFVklDRTsKLQkJaWYgKCFsMmNhcF9tb2RlX3N1cHBvcnRlZChwaS0+bW9kZSwgcGktPmNvbm4tPmZlYXRfbWFzaykpCi0JCQlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKHBpLT5jb25uLCBzayk7Ci0JCWJyZWFrOworCQlpZiAocGktPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX1NUQVRFMl9ERVZJQ0UpCisJCQlicmVhazsKKworCQkvKiBmYWxsIHRocm91Z2ggKi8KIAlkZWZhdWx0OgogCQlwaS0+bW9kZSA9IGwyY2FwX3NlbGVjdF9tb2RlKHJmYy5tb2RlLCBwaS0+Y29ubi0+ZmVhdF9tYXNrKTsKIAkJYnJlYWs7CkBAIC0yNDIwLDYgKzI1MjYsMTQgQEAKIAljYXNlIEwyQ0FQX01PREVfQkFTSUM6CiAJCWlmIChwaS0+aW10dSAhPSBMMkNBUF9ERUZBVUxUX01UVSkKIAkJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX01UVSwgMiwgcGktPmltdHUpOworCisJCXJmYy5tb2RlICAgICAgICAgICAgPSBMMkNBUF9NT0RFX0JBU0lDOworCQlyZmMudHh3aW5fc2l6ZSAgICAgID0gMDsKKwkJcmZjLm1heF90cmFuc21pdCAgICA9IDA7CisJCXJmYy5yZXRyYW5zX3RpbWVvdXQgPSAwOworCQlyZmMubW9uaXRvcl90aW1lb3V0ID0gMDsKKwkJcmZjLm1heF9wZHVfc2l6ZSAgICA9IDA7CisKIAkJYnJlYWs7CiAKIAljYXNlIEwyQ0FQX01PREVfRVJUTToKQEAgLTI0MzIsOSArMjU0Niw2IEBACiAJCWlmIChMMkNBUF9ERUZBVUxUX01BWF9QRFVfU0laRSA+IHBpLT5jb25uLT5tdHUgLSAxMCkKIAkJCXJmYy5tYXhfcGR1X3NpemUgPSBjcHVfdG9fbGUxNihwaS0+Y29ubi0+bXR1IC0gMTApOwogCi0JCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX1JGQywKLQkJCQkJc2l6ZW9mKHJmYyksICh1bnNpZ25lZCBsb25nKSAmcmZjKTsKLQogCQlpZiAoIShwaS0+Y29ubi0+ZmVhdF9tYXNrICYgTDJDQVBfRkVBVF9GQ1MpKQogCQkJYnJlYWs7CiAKQEAgLTI0NTUsOSArMjU2Niw2IEBACiAJCWlmIChMMkNBUF9ERUZBVUxUX01BWF9QRFVfU0laRSA+IHBpLT5jb25uLT5tdHUgLSAxMCkKIAkJCXJmYy5tYXhfcGR1X3NpemUgPSBjcHVfdG9fbGUxNihwaS0+Y29ubi0+bXR1IC0gMTApOwogCi0JCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX1JGQywKLQkJCQkJc2l6ZW9mKHJmYyksICh1bnNpZ25lZCBsb25nKSAmcmZjKTsKLQogCQlpZiAoIShwaS0+Y29ubi0+ZmVhdF9tYXNrICYgTDJDQVBfRkVBVF9GQ1MpKQogCQkJYnJlYWs7CiAKQEAgLTI0NjksNiArMjU3Nyw5IEBACiAJCWJyZWFrOwogCX0KIAorCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX1JGQywgc2l6ZW9mKHJmYyksCisJCQkJCQkodW5zaWduZWQgbG9uZykgJnJmYyk7CisKIAkvKiBGSVhNRTogTmVlZCBhY3R1YWwgdmFsdWUgb2YgdGhlIGZsdXNoIHRpbWVvdXQgKi8KIAkvL2lmIChmbHVzaF90byAhPSBMMkNBUF9ERUZBVUxUX0ZMVVNIX1RPKQogCS8vICAgbDJjYXBfYWRkX2NvbmZfb3B0KCZwdHIsIEwyQ0FQX0NPTkZfRkxVU0hfVE8sIDIsIHBpLT5mbHVzaF90byk7CkBAIC0yNTMzLDE4ICsyNjQ0LDIxIEBACiAJCX0KIAl9CiAKLQlpZiAocGktPm51bV9jb25mX3JzcCB8fCBwaS0+bnVtX2NvbmZfcmVxKQorCWlmIChwaS0+bnVtX2NvbmZfcnNwIHx8IHBpLT5udW1fY29uZl9yZXEgPiAxKQogCQlnb3RvIGRvbmU7CiAKIAlzd2l0Y2ggKHBpLT5tb2RlKSB7CiAJY2FzZSBMMkNBUF9NT0RFX1NUUkVBTUlORzoKIAljYXNlIEwyQ0FQX01PREVfRVJUTToKLQkJcGktPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9TVEFURTJfREVWSUNFOwotCQlpZiAoIWwyY2FwX21vZGVfc3VwcG9ydGVkKHBpLT5tb2RlLCBwaS0+Y29ubi0+ZmVhdF9tYXNrKSkKKwkJaWYgKCEocGktPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX1NUQVRFMl9ERVZJQ0UpKSB7CisJCQlwaS0+bW9kZSA9IGwyY2FwX3NlbGVjdF9tb2RlKHJmYy5tb2RlLAorCQkJCQlwaS0+Y29ubi0+ZmVhdF9tYXNrKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHBpLT5tb2RlICE9IHJmYy5tb2RlKQogCQkJcmV0dXJuIC1FQ09OTlJFRlVTRUQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXBpLT5tb2RlID0gbDJjYXBfc2VsZWN0X21vZGUocmZjLm1vZGUsIHBpLT5jb25uLT5mZWF0X21hc2spOworCiAJCWJyZWFrOwogCX0KIApAQCAtMjY2Nyw3ICsyNzgxLDYgQEAKIAkJCQkJCQlyZmMubW9kZSAhPSBwaS0+bW9kZSkKIAkJCQlyZXR1cm4gLUVDT05OUkVGVVNFRDsKIAotCQkJcGktPm1vZGUgPSByZmMubW9kZTsKIAkJCXBpLT5mY3MgPSAwOwogCiAJCQlsMmNhcF9hZGRfY29uZl9vcHQoJnB0ciwgTDJDQVBfQ09ORl9SRkMsCkBAIC0yNjc2LDYgKzI3ODksMTEgQEAKIAkJfQogCX0KIAorCWlmIChwaS0+bW9kZSA9PSBMMkNBUF9NT0RFX0JBU0lDICYmIHBpLT5tb2RlICE9IHJmYy5tb2RlKQorCQlyZXR1cm4gLUVDT05OUkVGVVNFRDsKKworCXBpLT5tb2RlID0gcmZjLm1vZGU7CisKIAlpZiAoKnJlc3VsdCA9PSBMMkNBUF9DT05GX1NVQ0NFU1MpIHsKIAkJc3dpdGNoIChyZmMubW9kZSkgewogCQljYXNlIEwyQ0FQX01PREVfRVJUTToKQEAgLTI3NzAsNyArMjg4OCw3IEBACiAJc3RydWN0IGwyY2FwX2NoYW5fbGlzdCAqbGlzdCA9ICZjb25uLT5jaGFuX2xpc3Q7CiAJc3RydWN0IGwyY2FwX2Nvbm5fcmVxICpyZXEgPSAoc3RydWN0IGwyY2FwX2Nvbm5fcmVxICopIGRhdGE7CiAJc3RydWN0IGwyY2FwX2Nvbm5fcnNwIHJzcDsKLQlzdHJ1Y3Qgc29jayAqc2ssICpwYXJlbnQ7CisJc3RydWN0IHNvY2sgKnBhcmVudCwgKnVuaW5pdGlhbGl6ZWRfdmFyKHNrKTsKIAlpbnQgcmVzdWx0LCBzdGF0dXMgPSBMMkNBUF9DU19OT19JTkZPOwogCiAJdTE2IGRjaWQgPSAwLCBzY2lkID0gX19sZTE2X3RvX2NwdShyZXEtPnNjaWQpOwpAQCAtMjg3OSw2ICsyOTk3LDE1IEBACiAJCQkJCUwyQ0FQX0lORk9fUkVRLCBzaXplb2YoaW5mbyksICZpbmZvKTsKIAl9CiAKKwlpZiAoIShsMmNhcF9waShzayktPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX1JFUV9TRU5UKSAmJgorCQkJCXJlc3VsdCA9PSBMMkNBUF9DUl9TVUNDRVNTKSB7CisJCXU4IGJ1ZlsxMjhdOworCQlsMmNhcF9waShzayktPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9SRVFfU0VOVDsKKwkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfZ2V0X2lkZW50KGNvbm4pLCBMMkNBUF9DT05GX1JFUSwKKwkJCQkJbDJjYXBfYnVpbGRfY29uZl9yZXEoc2ssIGJ1ZiksIGJ1Zik7CisJCWwyY2FwX3BpKHNrKS0+bnVtX2NvbmZfcmVxKys7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4OTksMTEgKzMwMjYsMTEgQEAKIAlpZiAoc2NpZCkgewogCQlzayA9IGwyY2FwX2dldF9jaGFuX2J5X3NjaWQoJmNvbm4tPmNoYW5fbGlzdCwgc2NpZCk7CiAJCWlmICghc2spCi0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiAtRUZBVUxUOwogCX0gZWxzZSB7CiAJCXNrID0gbDJjYXBfZ2V0X2NoYW5fYnlfaWRlbnQoJmNvbm4tPmNoYW5fbGlzdCwgY21kLT5pZGVudCk7CiAJCWlmICghc2spCi0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiAtRUZBVUxUOwogCX0KIAogCXN3aXRjaCAocmVzdWx0KSB7CkBAIC0yOTExLDEwICszMDM4LDEzIEBACiAJCXNrLT5za19zdGF0ZSA9IEJUX0NPTkZJRzsKIAkJbDJjYXBfcGkoc2spLT5pZGVudCA9IDA7CiAJCWwyY2FwX3BpKHNrKS0+ZGNpZCA9IGRjaWQ7Ci0JCWwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX1JFUV9TRU5UOwotCiAJCWwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSAmPSB+TDJDQVBfQ09ORl9DT05ORUNUX1BFTkQ7CiAKKwkJaWYgKGwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfUkVRX1NFTlQpCisJCQlicmVhazsKKworCQlsMmNhcF9waShzayktPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9SRVFfU0VOVDsKKwogCQlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9nZXRfaWRlbnQoY29ubiksIEwyQ0FQX0NPTkZfUkVRLAogCQkJCQlsMmNhcF9idWlsZF9jb25mX3JlcShzaywgcmVxKSwgcmVxKTsKIAkJbDJjYXBfcGkoc2spLT5udW1fY29uZl9yZXErKzsKQEAgLTI5NTAsOCArMzA4MCwxNCBAQAogCWlmICghc2spCiAJCXJldHVybiAtRU5PRU5UOwogCi0JaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9ESVNDT05OKQorCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQ09ORklHKSB7CisJCXN0cnVjdCBsMmNhcF9jbWRfcmVqIHJlajsKKworCQlyZWoucmVhc29uID0gY3B1X3RvX2xlMTYoMHgwMDAyKTsKKwkJbDJjYXBfc2VuZF9jbWQoY29ubiwgY21kLT5pZGVudCwgTDJDQVBfQ09NTUFORF9SRUosCisJCQkJc2l6ZW9mKHJlaiksICZyZWopOwogCQlnb3RvIHVubG9jazsKKwl9CiAKIAkvKiBSZWplY3QgaWYgY29uZmlnIGJ1ZmZlciBpcyB0b28gc21hbGwuICovCiAJbGVuID0gY21kX2xlbiAtIHNpemVvZigqcmVxKTsKQEAgLTI5NzcsNyArMzExMyw3IEBACiAJLyogQ29tcGxldGUgY29uZmlnLiAqLwogCWxlbiA9IGwyY2FwX3BhcnNlX2NvbmZfcmVxKHNrLCByc3ApOwogCWlmIChsZW4gPCAwKSB7Ci0JCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEoY29ubiwgc2spOworCQlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKGNvbm4sIHNrLCBFQ09OTlJFU0VUKTsKIAkJZ290byB1bmxvY2s7CiAJfQogCkBAIC0zMDQ3LDcgKzMxODMsNyBAQAogCQkJY2hhciByZXFbNjRdOwogCiAJCQlpZiAobGVuID4gc2l6ZW9mKHJlcSkgLSBzaXplb2Yoc3RydWN0IGwyY2FwX2NvbmZfcmVxKSkgewotCQkJCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEoY29ubiwgc2spOworCQkJCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEoY29ubiwgc2ssIEVDT05OUkVTRVQpOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KIApAQCAtMzA1Niw3ICszMTkyLDcgQEAKIAkJCWxlbiA9IGwyY2FwX3BhcnNlX2NvbmZfcnNwKHNrLCByc3AtPmRhdGEsCiAJCQkJCQkJbGVuLCByZXEsICZyZXN1bHQpOwogCQkJaWYgKGxlbiA8IDApIHsKLQkJCQlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKGNvbm4sIHNrKTsKKwkJCQlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKGNvbm4sIHNrLCBFQ09OTlJFU0VUKTsKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CiAKQEAgLTMwNjksMTAgKzMyMDUsOSBAQAogCQl9CiAKIAlkZWZhdWx0OgotCQlzay0+c2tfc3RhdGUgPSBCVF9ESVNDT05OOwogCQlzay0+c2tfZXJyID0gRUNPTk5SRVNFVDsKIAkJbDJjYXBfc29ja19zZXRfdGltZXIoc2ssIEhaICogNSk7Ci0JCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEoY29ubiwgc2spOworCQlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKGNvbm4sIHNrLCBFQ09OTlJFU0VUKTsKIAkJZ290byBkb25lOwogCX0KIApAQCAtMzEyMywxNiArMzI1OCw2IEBACiAKIAlzay0+c2tfc2h1dGRvd24gPSBTSFVURE9XTl9NQVNLOwogCi0Jc2tiX3F1ZXVlX3B1cmdlKFRYX1FVRVVFKHNrKSk7Ci0KLQlpZiAobDJjYXBfcGkoc2spLT5tb2RlID09IEwyQ0FQX01PREVfRVJUTSkgewotCQlza2JfcXVldWVfcHVyZ2UoU1JFSl9RVUVVRShzaykpOwotCQlza2JfcXVldWVfcHVyZ2UoQlVTWV9RVUVVRShzaykpOwotCQlkZWxfdGltZXIoJmwyY2FwX3BpKHNrKS0+cmV0cmFuc190aW1lcik7Ci0JCWRlbF90aW1lcigmbDJjYXBfcGkoc2spLT5tb25pdG9yX3RpbWVyKTsKLQkJZGVsX3RpbWVyKCZsMmNhcF9waShzayktPmFja190aW1lcik7Ci0JfQotCiAJbDJjYXBfY2hhbl9kZWwoc2ssIEVDT05OUkVTRVQpOwogCWJoX3VubG9ja19zb2NrKHNrKTsKIApAQCAtMzE1NSwxNiArMzI4MCw2IEBACiAJaWYgKCFzaykKIAkJcmV0dXJuIDA7CiAKLQlza2JfcXVldWVfcHVyZ2UoVFhfUVVFVUUoc2spKTsKLQotCWlmIChsMmNhcF9waShzayktPm1vZGUgPT0gTDJDQVBfTU9ERV9FUlRNKSB7Ci0JCXNrYl9xdWV1ZV9wdXJnZShTUkVKX1FVRVVFKHNrKSk7Ci0JCXNrYl9xdWV1ZV9wdXJnZShCVVNZX1FVRVVFKHNrKSk7Ci0JCWRlbF90aW1lcigmbDJjYXBfcGkoc2spLT5yZXRyYW5zX3RpbWVyKTsKLQkJZGVsX3RpbWVyKCZsMmNhcF9waShzayktPm1vbml0b3JfdGltZXIpOwotCQlkZWxfdGltZXIoJmwyY2FwX3BpKHNrKS0+YWNrX3RpbWVyKTsKLQl9Ci0KIAlsMmNhcF9jaGFuX2RlbChzaywgMCk7CiAJYmhfdW5sb2NrX3NvY2soc2spOwogCkBAIC0zMTg3LDcgKzMzMDIsNyBAQAogCQlzdHJ1Y3QgbDJjYXBfaW5mb19yc3AgKnJzcCA9IChzdHJ1Y3QgbDJjYXBfaW5mb19yc3AgKikgYnVmOwogCQlyc3AtPnR5cGUgICA9IGNwdV90b19sZTE2KEwyQ0FQX0lUX0ZFQVRfTUFTSyk7CiAJCXJzcC0+cmVzdWx0ID0gY3B1X3RvX2xlMTYoTDJDQVBfSVJfU1VDQ0VTUyk7Ci0JCWlmIChlbmFibGVfZXJ0bSkKKwkJaWYgKCFkaXNhYmxlX2VydG0pCiAJCQlmZWF0X21hc2sgfD0gTDJDQVBfRkVBVF9FUlRNIHwgTDJDQVBfRkVBVF9TVFJFQU1JTkcKIAkJCQkJCQkgfCBMMkNBUF9GRUFUX0ZDUzsKIAkJcHV0X3VuYWxpZ25lZF9sZTMyKGZlYXRfbWFzaywgcnNwLT5kYXRhKTsKQEAgLTMzNTIsNyArMzQ2Nyw3IEBACiAJCW91cl9mY3MgPSBjcmMxNigwLCBza2ItPmRhdGEgLSBoZHJfc2l6ZSwgc2tiLT5sZW4gKyBoZHJfc2l6ZSk7CiAKIAkJaWYgKG91cl9mY3MgIT0gcmN2X2ZjcykKLQkJCXJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuIC1FQkFETVNHOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTMzNjMsMjUgKzM0NzgsMTkgQEAKIAl1MTYgY29udHJvbCA9IDA7CiAKIAlwaS0+ZnJhbWVzX3NlbnQgPSAwOwotCXBpLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU0VORF9GQklUOwogCiAJY29udHJvbCB8PSBwaS0+YnVmZmVyX3NlcSA8PCBMMkNBUF9DVFJMX1JFUVNFUV9TSElGVDsKIAogCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fTE9DQUxfQlVTWSkgewotCQljb250cm9sIHw9IEwyQ0FQX1NVUEVSX1JDVl9OT1RfUkVBRFkgfCBMMkNBUF9DVFJMX0ZJTkFMOworCQljb250cm9sIHw9IEwyQ0FQX1NVUEVSX1JDVl9OT1RfUkVBRFk7CiAJCWwyY2FwX3NlbmRfc2ZyYW1lKHBpLCBjb250cm9sKTsKIAkJcGktPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9STlJfU0VOVDsKLQkJcGktPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fU0VORF9GQklUOwogCX0KIAotCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fUkVNT1RFX0JVU1kgJiYgcGktPnVuYWNrZWRfZnJhbWVzID4gMCkKLQkJX19tb2RfcmV0cmFuc190aW1lcigpOworCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fUkVNT1RFX0JVU1kpCisJCWwyY2FwX3JldHJhbnNtaXRfZnJhbWVzKHNrKTsKIAotCXBpLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1JFTU9URV9CVVNZOwotCi0Jc3Bpbl9sb2NrX2JoKCZwaS0+c2VuZF9sb2NrKTsKIAlsMmNhcF9lcnRtX3NlbmQoc2spOwotCXNwaW5fdW5sb2NrX2JoKCZwaS0+c2VuZF9sb2NrKTsKIAogCWlmICghKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9MT0NBTF9CVVNZKSAmJgogCQkJcGktPmZyYW1lc19zZW50ID09IDApIHsKQEAgLTMzOTMsNiArMzUwMiw4IEBACiBzdGF0aWMgaW50IGwyY2FwX2FkZF90b19zcmVqX3F1ZXVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggdHhfc2VxLCB1OCBzYXIpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKm5leHRfc2tiOworCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CisJaW50IHR4X3NlcV9vZmZzZXQsIG5leHRfdHhfc2VxX29mZnNldDsKIAogCWJ0X2NiKHNrYiktPnR4X3NlcSA9IHR4X3NlcTsKIAlidF9jYihza2IpLT5zYXIgPSBzYXI7CkBAIC0zNDAzLDExICszNTE0LDIwIEBACiAJCXJldHVybiAwOwogCX0KIAorCXR4X3NlcV9vZmZzZXQgPSAodHhfc2VxIC0gcGktPmJ1ZmZlcl9zZXEpICUgNjQ7CisJaWYgKHR4X3NlcV9vZmZzZXQgPCAwKQorCQl0eF9zZXFfb2Zmc2V0ICs9IDY0OworCiAJZG8gewogCQlpZiAoYnRfY2IobmV4dF9za2IpLT50eF9zZXEgPT0gdHhfc2VxKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJaWYgKGJ0X2NiKG5leHRfc2tiKS0+dHhfc2VxID4gdHhfc2VxKSB7CisJCW5leHRfdHhfc2VxX29mZnNldCA9IChidF9jYihuZXh0X3NrYiktPnR4X3NlcSAtCisJCQkJCQlwaS0+YnVmZmVyX3NlcSkgJSA2NDsKKwkJaWYgKG5leHRfdHhfc2VxX29mZnNldCA8IDApCisJCQluZXh0X3R4X3NlcV9vZmZzZXQgKz0gNjQ7CisKKwkJaWYgKG5leHRfdHhfc2VxX29mZnNldCA+IHR4X3NlcV9vZmZzZXQpIHsKIAkJCV9fc2tiX3F1ZXVlX2JlZm9yZShTUkVKX1FVRVVFKHNrKSwgbmV4dF9za2IsIHNrYik7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMzUyNSw2MiArMzY0NSwyNyBAQAogCXBpLT5zZHUgPSBOVUxMOwogCiBkaXNjb25uZWN0OgotCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEocGktPmNvbm4sIHNrKTsKKwlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKHBpLT5jb25uLCBzaywgRUNPTk5SRVNFVCk7CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGwyY2FwX2J1c3lfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgaW50IGwyY2FwX3RyeV9wdXNoX3J4X3NrYihzdHJ1Y3Qgc29jayAqc2spCiB7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0Jc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbDJjYXBfcGluZm8sIGJ1c3lfd29yayk7Ci0Jc3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopcGk7Ci0JaW50IG5fdHJpZXMgPSAwLCB0aW1lbyA9IEhaLzUsIGVycjsKKwlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJdTE2IGNvbnRyb2w7CisJaW50IGVycjsKIAotCWxvY2tfc29jayhzayk7Ci0KLQlhZGRfd2FpdF9xdWV1ZShza19zbGVlcChzayksICZ3YWl0KTsKLQl3aGlsZSAoKHNrYiA9IHNrYl9wZWVrKEJVU1lfUVVFVUUoc2spKSkpIHsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQotCQlpZiAobl90cmllcysrID4gTDJDQVBfTE9DQUxfQlVTWV9UUklFUykgewotCQkJZXJyID0gLUVCVVNZOwotCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShwaS0+Y29ubiwgc2spOwotCQkJZ290byBkb25lOworCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoQlVTWV9RVUVVRShzaykpKSkgeworCQljb250cm9sID0gYnRfY2Ioc2tiKS0+c2FyIDw8IEwyQ0FQX0NUUkxfU0FSX1NISUZUOworCQllcnIgPSBsMmNhcF9lcnRtX3JlYXNzZW1ibHlfc2R1KHNrLCBza2IsIGNvbnRyb2wpOworCQlpZiAoZXJyIDwgMCkgeworCQkJc2tiX3F1ZXVlX2hlYWQoQlVTWV9RVUVVRShzayksIHNrYik7CisJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAKLQkJaWYgKCF0aW1lbykKLQkJCXRpbWVvID0gSFovNTsKLQotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCWVyciA9IHNvY2tfaW50cl9lcnJubyh0aW1lbyk7Ci0JCQlnb3RvIGRvbmU7Ci0JCX0KLQotCQlyZWxlYXNlX3NvY2soc2spOwotCQl0aW1lbyA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW8pOwotCQlsb2NrX3NvY2soc2spOwotCi0JCWVyciA9IHNvY2tfZXJyb3Ioc2spOwotCQlpZiAoZXJyKQotCQkJZ290byBkb25lOwotCi0JCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoQlVTWV9RVUVVRShzaykpKSkgewotCQkJY29udHJvbCA9IGJ0X2NiKHNrYiktPnNhciA8PCBMMkNBUF9DVFJMX1NBUl9TSElGVDsKLQkJCWVyciA9IGwyY2FwX2VydG1fcmVhc3NlbWJseV9zZHUoc2ssIHNrYiwgY29udHJvbCk7Ci0JCQlpZiAoZXJyIDwgMCkgewotCQkJCXNrYl9xdWV1ZV9oZWFkKEJVU1lfUVVFVUUoc2spLCBza2IpOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQlwaS0+YnVmZmVyX3NlcSA9IChwaS0+YnVmZmVyX3NlcSArIDEpICUgNjQ7Ci0JCX0KLQotCQlpZiAoIXNrYikKLQkJCWJyZWFrOworCQlwaS0+YnVmZmVyX3NlcSA9IChwaS0+YnVmZmVyX3NlcSArIDEpICUgNjQ7CiAJfQogCiAJaWYgKCEocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1JOUl9TRU5UKSkKQEAgLTM2MDAsNiArMzY4NSw1MiBAQAogCXBpLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX0xPQ0FMX0JVU1k7CiAJcGktPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fUk5SX1NFTlQ7CiAKKwlCVF9EQkcoInNrICVwLCBFeGl0IGxvY2FsIGJ1c3kiLCBzayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbDJjYXBfYnVzeV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKwlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsMmNhcF9waW5mbywgYnVzeV93b3JrKTsKKwlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKilwaTsKKwlpbnQgbl90cmllcyA9IDAsIHRpbWVvID0gSFovNSwgZXJyOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlsb2NrX3NvY2soc2spOworCisJYWRkX3dhaXRfcXVldWUoc2tfc2xlZXAoc2spLCAmd2FpdCk7CisJd2hpbGUgKChza2IgPSBza2JfcGVlayhCVVNZX1FVRVVFKHNrKSkpKSB7CisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisKKwkJaWYgKG5fdHJpZXMrKyA+IEwyQ0FQX0xPQ0FMX0JVU1lfVFJJRVMpIHsKKwkJCWVyciA9IC1FQlVTWTsKKwkJCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEocGktPmNvbm4sIHNrLCBFQlVTWSk7CisJCQlicmVhazsKKwkJfQorCisJCWlmICghdGltZW8pCisJCQl0aW1lbyA9IEhaLzU7CisKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQllcnIgPSBzb2NrX2ludHJfZXJybm8odGltZW8pOworCQkJYnJlYWs7CisJCX0KKworCQlyZWxlYXNlX3NvY2soc2spOworCQl0aW1lbyA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW8pOworCQlsb2NrX3NvY2soc2spOworCisJCWVyciA9IHNvY2tfZXJyb3Ioc2spOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisKKwkJaWYgKGwyY2FwX3RyeV9wdXNoX3J4X3NrYihzaykgPT0gMCkKKwkJCWJyZWFrOworCX0KKwogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJcmVtb3ZlX3dhaXRfcXVldWUoc2tfc2xlZXAoc2spLCAmd2FpdCk7CiAKQEAgLTM2MTQsNyArMzc0NSw5IEBACiAJaWYgKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9MT0NBTF9CVVNZKSB7CiAJCWJ0X2NiKHNrYiktPnNhciA9IGNvbnRyb2wgPj4gTDJDQVBfQ1RSTF9TQVJfU0hJRlQ7CiAJCV9fc2tiX3F1ZXVlX3RhaWwoQlVTWV9RVUVVRShzayksIHNrYik7Ci0JCXJldHVybiAtRUJVU1k7CisJCXJldHVybiBsMmNhcF90cnlfcHVzaF9yeF9za2Ioc2spOworCisKIAl9CiAKIAllcnIgPSBsMmNhcF9lcnRtX3JlYXNzZW1ibHlfc2R1KHNrLCBza2IsIGNvbnRyb2wpOwpAQCAtMzYyNCw2ICszNzU3LDggQEAKIAl9CiAKIAkvKiBCdXN5IENvbmRpdGlvbiAqLworCUJUX0RCRygic2sgJXAsIEVudGVyIGxvY2FsIGJ1c3kiLCBzayk7CisKIAlwaS0+Y29ubl9zdGF0ZSB8PSBMMkNBUF9DT05OX0xPQ0FMX0JVU1k7CiAJYnRfY2Ioc2tiKS0+c2FyID0gY29udHJvbCA+PiBMMkNBUF9DVFJMX1NBUl9TSElGVDsKIAlfX3NrYl9xdWV1ZV90YWlsKEJVU1lfUVVFVUUoc2spLCBza2IpOwpAQCAtMzYzNCw2ICszNzY5LDggQEAKIAogCXBpLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fUk5SX1NFTlQ7CiAKKwlkZWxfdGltZXIoJnBpLT5hY2tfdGltZXIpOworCiAJcXVldWVfd29yayhfYnVzeV93cSwgJnBpLT5idXN5X3dvcmspOwogCiAJcmV0dXJuIGVycjsKQEAgLTM3NDcsNyArMzg4NCw3IEBACiAJCWwyY2FwX2VydG1fcmVhc3NlbWJseV9zZHUoc2ssIHNrYiwgY29udHJvbCk7CiAJCWwyY2FwX3BpKHNrKS0+YnVmZmVyX3NlcV9zcmVqID0KIAkJCShsMmNhcF9waShzayktPmJ1ZmZlcl9zZXFfc3JlaiArIDEpICUgNjQ7Ci0JCXR4X3NlcSsrOworCQl0eF9zZXEgPSAodHhfc2VxICsgMSkgJSA2NDsKIAl9CiB9CiAKQEAgLTM3ODMsMTAgKzM5MjAsMTEgQEAKIAkJbDJjYXBfc2VuZF9zZnJhbWUocGksIGNvbnRyb2wpOwogCiAJCW5ldyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzcmVqX2xpc3QpLCBHRlBfQVRPTUlDKTsKLQkJbmV3LT50eF9zZXEgPSBwaS0+ZXhwZWN0ZWRfdHhfc2VxKys7CisJCW5ldy0+dHhfc2VxID0gcGktPmV4cGVjdGVkX3R4X3NlcTsKKwkJcGktPmV4cGVjdGVkX3R4X3NlcSA9IChwaS0+ZXhwZWN0ZWRfdHhfc2VxICsgMSkgJSA2NDsKIAkJbGlzdF9hZGRfdGFpbCgmbmV3LT5saXN0LCBTUkVKX0xJU1Qoc2spKTsKIAl9Ci0JcGktPmV4cGVjdGVkX3R4X3NlcSsrOworCXBpLT5leHBlY3RlZF90eF9zZXEgPSAocGktPmV4cGVjdGVkX3R4X3NlcSArIDEpICUgNjQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGwyY2FwX2RhdGFfY2hhbm5lbF9pZnJhbWUoc3RydWN0IHNvY2sgKnNrLCB1MTYgcnhfY29udHJvbCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTM3OTUsMTEgKzM5MzMsMTIgQEAKIAl1OCB0eF9zZXEgPSBfX2dldF90eHNlcShyeF9jb250cm9sKTsKIAl1OCByZXFfc2VxID0gX19nZXRfcmVxc2VxKHJ4X2NvbnRyb2wpOwogCXU4IHNhciA9IHJ4X2NvbnRyb2wgPj4gTDJDQVBfQ1RSTF9TQVJfU0hJRlQ7Ci0JdTggdHhfc2VxX29mZnNldCwgZXhwZWN0ZWRfdHhfc2VxX29mZnNldDsKKwlpbnQgdHhfc2VxX29mZnNldCwgZXhwZWN0ZWRfdHhfc2VxX29mZnNldDsKIAlpbnQgbnVtX3RvX2FjayA9IChwaS0+dHhfd2luLzYpICsgMTsKIAlpbnQgZXJyID0gMDsKIAotCUJUX0RCRygic2sgJXAgcnhfY29udHJvbCAweCU0LjR4IGxlbiAlZCIsIHNrLCByeF9jb250cm9sLCBza2ItPmxlbik7CisJQlRfREJHKCJzayAlcCBsZW4gJWQgdHhfc2VxICVkIHJ4X2NvbnRyb2wgMHglNC40eCIsIHNrLCBza2ItPmxlbiwgdHhfc2VxLAorCQkJCQkJCQlyeF9jb250cm9sKTsKIAogCWlmIChMMkNBUF9DVFJMX0ZJTkFMICYgcnhfY29udHJvbCAmJgogCQkJbDJjYXBfcGkoc2spLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9XQUlUX0YpIHsKQEAgLTM4MjEsNyArMzk2MCw3IEBACiAKIAkvKiBpbnZhbGlkIHR4X3NlcSAqLwogCWlmICh0eF9zZXFfb2Zmc2V0ID49IHBpLT50eF93aW4pIHsKLQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShwaS0+Y29ubiwgc2spOworCQlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKHBpLT5jb25uLCBzaywgRUNPTk5SRVNFVCk7CiAJCWdvdG8gZHJvcDsKIAl9CiAKQEAgLTM4NDQsNiArMzk4Myw3IEBACiAJCQkJcGktPmJ1ZmZlcl9zZXEgPSBwaS0+YnVmZmVyX3NlcV9zcmVqOwogCQkJCXBpLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1NSRUpfU0VOVDsKIAkJCQlsMmNhcF9zZW5kX2FjayhwaSk7CisJCQkJQlRfREJHKCJzayAlcCwgRXhpdCBTUkVKX1NFTlQiLCBzayk7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlzdHJ1Y3Qgc3Jlal9saXN0ICpsOwpAQCAtMzg3Miw2ICs0MDEyLDggQEAKIAogCQlwaS0+Y29ubl9zdGF0ZSB8PSBMMkNBUF9DT05OX1NSRUpfU0VOVDsKIAorCQlCVF9EQkcoInNrICVwLCBFbnRlciBTUkVKIiwgc2spOworCiAJCUlOSVRfTElTVF9IRUFEKFNSRUpfTElTVChzaykpOwogCQlwaS0+YnVmZmVyX3NlcV9zcmVqID0gcGktPmJ1ZmZlcl9zZXE7CiAKQEAgLTM4ODIsNiArNDAyNCw4IEBACiAJCXBpLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU0VORF9QQklUOwogCiAJCWwyY2FwX3NlbmRfc3JlamZyYW1lKHNrLCB0eF9zZXEpOworCisJCWRlbF90aW1lcigmcGktPmFja190aW1lcik7CiAJfQogCXJldHVybiAwOwogCkBAIC0zODk1LDYgKzQwMzksMTAgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJZXJyID0gbDJjYXBfcHVzaF9yeF9za2Ioc2ssIHNrYiwgcnhfY29udHJvbCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiAwOworCiAJaWYgKHJ4X2NvbnRyb2wgJiBMMkNBUF9DVFJMX0ZJTkFMKSB7CiAJCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fUkVKX0FDVCkKIAkJCXBpLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1JFSl9BQ1Q7CkBAIC0zOTAyLDEwICs0MDUwLDYgQEAKIAkJCWwyY2FwX3JldHJhbnNtaXRfZnJhbWVzKHNrKTsKIAl9CiAKLQllcnIgPSBsMmNhcF9wdXNoX3J4X3NrYihzaywgc2tiLCByeF9jb250cm9sKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIDA7Ci0KIAlfX21vZF9hY2tfdGltZXIoKTsKIAogCXBpLT5udW1fYWNrZWQgPSAocGktPm51bV9hY2tlZCArIDEpICUgbnVtX3RvX2FjazsKQEAgLTM5MjMsMTAgKzQwNjcsMTQgQEAKIHsKIAlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwogCisJQlRfREJHKCJzayAlcCwgcmVxX3NlcSAlZCBjdHJsIDB4JTQuNHgiLCBzaywgX19nZXRfcmVxc2VxKHJ4X2NvbnRyb2wpLAorCQkJCQkJcnhfY29udHJvbCk7CisKIAlwaS0+ZXhwZWN0ZWRfYWNrX3NlcSA9IF9fZ2V0X3JlcXNlcShyeF9jb250cm9sKTsKIAlsMmNhcF9kcm9wX2Fja2VkX2ZyYW1lcyhzayk7CiAKIAlpZiAocnhfY29udHJvbCAmIEwyQ0FQX0NUUkxfUE9MTCkgeworCQlwaS0+Y29ubl9zdGF0ZSB8PSBMMkNBUF9DT05OX1NFTkRfRkJJVDsKIAkJaWYgKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TUkVKX1NFTlQpIHsKIAkJCWlmICgocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1JFTU9URV9CVVNZKSAmJgogCQkJCQkocGktPnVuYWNrZWRfZnJhbWVzID4gMCkpCkBAIC0zOTU1LDkgKzQxMDMsNyBAQAogCQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NSRUpfU0VOVCkgewogCQkJbDJjYXBfc2VuZF9hY2socGkpOwogCQl9IGVsc2UgewotCQkJc3Bpbl9sb2NrX2JoKCZwaS0+c2VuZF9sb2NrKTsKIAkJCWwyY2FwX2VydG1fc2VuZChzayk7Ci0JCQlzcGluX3VubG9ja19iaCgmcGktPnNlbmRfbG9jayk7CiAJCX0KIAl9CiB9CkBAIC0zOTY3LDYgKzQxMTMsOCBAQAogCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CiAJdTggdHhfc2VxID0gX19nZXRfcmVxc2VxKHJ4X2NvbnRyb2wpOwogCisJQlRfREJHKCJzayAlcCwgcmVxX3NlcSAlZCBjdHJsIDB4JTQuNHgiLCBzaywgdHhfc2VxLCByeF9jb250cm9sKTsKKwogCXBpLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1JFTU9URV9CVVNZOwogCiAJcGktPmV4cGVjdGVkX2Fja19zZXEgPSB0eF9zZXE7CkBAIC0zOTg5LDE2ICs0MTM3LDE4IEBACiAJc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKIAl1OCB0eF9zZXEgPSBfX2dldF9yZXFzZXEocnhfY29udHJvbCk7CiAKKwlCVF9EQkcoInNrICVwLCByZXFfc2VxICVkIGN0cmwgMHglNC40eCIsIHNrLCB0eF9zZXEsIHJ4X2NvbnRyb2wpOworCiAJcGktPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fUkVNT1RFX0JVU1k7CiAKIAlpZiAocnhfY29udHJvbCAmIEwyQ0FQX0NUUkxfUE9MTCkgewogCQlwaS0+ZXhwZWN0ZWRfYWNrX3NlcSA9IHR4X3NlcTsKIAkJbDJjYXBfZHJvcF9hY2tlZF9mcmFtZXMoc2spOworCisJCXBpLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU0VORF9GQklUOwogCQlsMmNhcF9yZXRyYW5zbWl0X29uZV9mcmFtZShzaywgdHhfc2VxKTsKIAotCQlzcGluX2xvY2tfYmgoJnBpLT5zZW5kX2xvY2spOwogCQlsMmNhcF9lcnRtX3NlbmQoc2spOwotCQlzcGluX3VubG9ja19iaCgmcGktPnNlbmRfbG9jayk7CiAKIAkJaWYgKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9XQUlUX0YpIHsKIAkJCXBpLT5zcmVqX3NhdmVfcmVxc2VxID0gdHhfc2VxOwpAQCAtNDAyNCwxMCArNDE3NCwxNSBAQAogCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CiAJdTggdHhfc2VxID0gX19nZXRfcmVxc2VxKHJ4X2NvbnRyb2wpOwogCisJQlRfREJHKCJzayAlcCwgcmVxX3NlcSAlZCBjdHJsIDB4JTQuNHgiLCBzaywgdHhfc2VxLCByeF9jb250cm9sKTsKKwogCXBpLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fUkVNT1RFX0JVU1k7CiAJcGktPmV4cGVjdGVkX2Fja19zZXEgPSB0eF9zZXE7CiAJbDJjYXBfZHJvcF9hY2tlZF9mcmFtZXMoc2spOwogCisJaWYgKHJ4X2NvbnRyb2wgJiBMMkNBUF9DVFJMX1BPTEwpCisJCXBpLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU0VORF9GQklUOworCiAJaWYgKCEocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NSRUpfU0VOVCkpIHsKIAkJZGVsX3RpbWVyKCZwaS0+cmV0cmFuc190aW1lcik7CiAJCWlmIChyeF9jb250cm9sICYgTDJDQVBfQ1RSTF9QT0xMKQpAQCAtNDA3NSwxMiArNDIzMCw4MyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGwyY2FwX2VydG1fZGF0YV9yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CisJdTE2IGNvbnRyb2w7CisJdTggcmVxX3NlcTsKKwlpbnQgbGVuLCBuZXh0X3R4X3NlcV9vZmZzZXQsIHJlcV9zZXFfb2Zmc2V0OworCisJY29udHJvbCA9IGdldF91bmFsaWduZWRfbGUxNihza2ItPmRhdGEpOworCXNrYl9wdWxsKHNrYiwgMik7CisJbGVuID0gc2tiLT5sZW47CisKKwkvKgorCSAqIFdlIGNhbiBqdXN0IGRyb3AgdGhlIGNvcnJ1cHRlZCBJLWZyYW1lIGhlcmUuCisJICogUmVjZWl2ZXIgd2lsbCBtaXNzIGl0IGFuZCBzdGFydCBwcm9wZXIgcmVjb3ZlcnkKKwkgKiBwcm9jZWR1cmVzIGFuZCBhc2sgcmV0cmFuc21pc3Npb24uCisJICovCisJaWYgKGwyY2FwX2NoZWNrX2ZjcyhwaSwgc2tiKSkKKwkJZ290byBkcm9wOworCisJaWYgKF9faXNfc2FyX3N0YXJ0KGNvbnRyb2wpICYmIF9faXNfaWZyYW1lKGNvbnRyb2wpKQorCQlsZW4gLT0gMjsKKworCWlmIChwaS0+ZmNzID09IEwyQ0FQX0ZDU19DUkMxNikKKwkJbGVuIC09IDI7CisKKwlpZiAobGVuID4gcGktPm1wcykgeworCQlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKHBpLT5jb25uLCBzaywgRUNPTk5SRVNFVCk7CisJCWdvdG8gZHJvcDsKKwl9CisKKwlyZXFfc2VxID0gX19nZXRfcmVxc2VxKGNvbnRyb2wpOworCXJlcV9zZXFfb2Zmc2V0ID0gKHJlcV9zZXEgLSBwaS0+ZXhwZWN0ZWRfYWNrX3NlcSkgJSA2NDsKKwlpZiAocmVxX3NlcV9vZmZzZXQgPCAwKQorCQlyZXFfc2VxX29mZnNldCArPSA2NDsKKworCW5leHRfdHhfc2VxX29mZnNldCA9CisJCShwaS0+bmV4dF90eF9zZXEgLSBwaS0+ZXhwZWN0ZWRfYWNrX3NlcSkgJSA2NDsKKwlpZiAobmV4dF90eF9zZXFfb2Zmc2V0IDwgMCkKKwkJbmV4dF90eF9zZXFfb2Zmc2V0ICs9IDY0OworCisJLyogY2hlY2sgZm9yIGludmFsaWQgcmVxLXNlcSAqLworCWlmIChyZXFfc2VxX29mZnNldCA+IG5leHRfdHhfc2VxX29mZnNldCkgeworCQlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKHBpLT5jb25uLCBzaywgRUNPTk5SRVNFVCk7CisJCWdvdG8gZHJvcDsKKwl9CisKKwlpZiAoX19pc19pZnJhbWUoY29udHJvbCkpIHsKKwkJaWYgKGxlbiA8IDApIHsKKwkJCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEocGktPmNvbm4sIHNrLCBFQ09OTlJFU0VUKTsKKwkJCWdvdG8gZHJvcDsKKwkJfQorCisJCWwyY2FwX2RhdGFfY2hhbm5lbF9pZnJhbWUoc2ssIGNvbnRyb2wsIHNrYik7CisJfSBlbHNlIHsKKwkJaWYgKGxlbiAhPSAwKSB7CisJCQlCVF9FUlIoIiVkIiwgbGVuKTsKKwkJCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEocGktPmNvbm4sIHNrLCBFQ09OTlJFU0VUKTsKKwkJCWdvdG8gZHJvcDsKKwkJfQorCisJCWwyY2FwX2RhdGFfY2hhbm5lbF9zZnJhbWUoc2ssIGNvbnRyb2wsIHNrYik7CisJfQorCisJcmV0dXJuIDA7CisKK2Ryb3A6CisJa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGwyY2FwX2RhdGFfY2hhbm5lbChzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiwgdTE2IGNpZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJc3RydWN0IGwyY2FwX3BpbmZvICpwaTsKLQl1MTYgY29udHJvbCwgbGVuOwotCXU4IHR4X3NlcSwgcmVxX3NlcSwgbmV4dF90eF9zZXFfb2Zmc2V0LCByZXFfc2VxX29mZnNldDsKKwl1MTYgY29udHJvbDsKKwl1OCB0eF9zZXE7CisJaW50IGxlbjsKIAogCXNrID0gbDJjYXBfZ2V0X2NoYW5fYnlfc2NpZCgmY29ubi0+Y2hhbl9saXN0LCBjaWQpOwogCWlmICghc2spIHsKQEAgLTQxMTAsNTkgKzQzMzYsMTEgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEwyQ0FQX01PREVfRVJUTToKLQkJY29udHJvbCA9IGdldF91bmFsaWduZWRfbGUxNihza2ItPmRhdGEpOwotCQlza2JfcHVsbChza2IsIDIpOwotCQlsZW4gPSBza2ItPmxlbjsKLQotCQlpZiAoX19pc19zYXJfc3RhcnQoY29udHJvbCkpCi0JCQlsZW4gLT0gMjsKLQotCQlpZiAocGktPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpCi0JCQlsZW4gLT0gMjsKLQotCQkvKgotCQkgKiBXZSBjYW4ganVzdCBkcm9wIHRoZSBjb3JydXB0ZWQgSS1mcmFtZSBoZXJlLgotCQkgKiBSZWNlaXZlciB3aWxsIG1pc3MgaXQgYW5kIHN0YXJ0IHByb3BlciByZWNvdmVyeQotCQkgKiBwcm9jZWR1cmVzIGFuZCBhc2sgcmV0cmFuc21pc3Npb24uCi0JCSAqLwotCQlpZiAobGVuID4gcGktPm1wcykgewotCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShwaS0+Y29ubiwgc2spOwotCQkJZ290byBkcm9wOwotCQl9Ci0KLQkJaWYgKGwyY2FwX2NoZWNrX2ZjcyhwaSwgc2tiKSkKLQkJCWdvdG8gZHJvcDsKLQotCQlyZXFfc2VxID0gX19nZXRfcmVxc2VxKGNvbnRyb2wpOwotCQlyZXFfc2VxX29mZnNldCA9IChyZXFfc2VxIC0gcGktPmV4cGVjdGVkX2Fja19zZXEpICUgNjQ7Ci0JCWlmIChyZXFfc2VxX29mZnNldCA8IDApCi0JCQlyZXFfc2VxX29mZnNldCArPSA2NDsKLQotCQluZXh0X3R4X3NlcV9vZmZzZXQgPQotCQkJKHBpLT5uZXh0X3R4X3NlcSAtIHBpLT5leHBlY3RlZF9hY2tfc2VxKSAlIDY0OwotCQlpZiAobmV4dF90eF9zZXFfb2Zmc2V0IDwgMCkKLQkJCW5leHRfdHhfc2VxX29mZnNldCArPSA2NDsKLQotCQkvKiBjaGVjayBmb3IgaW52YWxpZCByZXEtc2VxICovCi0JCWlmIChyZXFfc2VxX29mZnNldCA+IG5leHRfdHhfc2VxX29mZnNldCkgewotCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShwaS0+Y29ubiwgc2spOwotCQkJZ290byBkcm9wOwotCQl9Ci0KLQkJaWYgKF9faXNfaWZyYW1lKGNvbnRyb2wpKSB7Ci0JCQlpZiAobGVuIDwgNCkgewotCQkJCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEocGktPmNvbm4sIHNrKTsKLQkJCQlnb3RvIGRyb3A7Ci0JCQl9Ci0KLQkJCWwyY2FwX2RhdGFfY2hhbm5lbF9pZnJhbWUoc2ssIGNvbnRyb2wsIHNrYik7CisJCWlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkgeworCQkJbDJjYXBfZXJ0bV9kYXRhX3Jjdihzaywgc2tiKTsKIAkJfSBlbHNlIHsKLQkJCWlmIChsZW4gIT0gMCkgewotCQkJCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEocGktPmNvbm4sIHNrKTsKKwkJCWlmIChza19hZGRfYmFja2xvZyhzaywgc2tiKSkKIAkJCQlnb3RvIGRyb3A7Ci0JCQl9Ci0KLQkJCWwyY2FwX2RhdGFfY2hhbm5lbF9zZnJhbWUoc2ssIGNvbnRyb2wsIHNrYik7CiAJCX0KIAogCQlnb3RvIGRvbmU7CkBAIC00MTcyLDE2ICs0MzUwLDE2IEBACiAJCXNrYl9wdWxsKHNrYiwgMik7CiAJCWxlbiA9IHNrYi0+bGVuOwogCisJCWlmIChsMmNhcF9jaGVja19mY3MocGksIHNrYikpCisJCQlnb3RvIGRyb3A7CisKIAkJaWYgKF9faXNfc2FyX3N0YXJ0KGNvbnRyb2wpKQogCQkJbGVuIC09IDI7CiAKIAkJaWYgKHBpLT5mY3MgPT0gTDJDQVBfRkNTX0NSQzE2KQogCQkJbGVuIC09IDI7CiAKLQkJaWYgKGxlbiA+IHBpLT5tcHMgfHwgbGVuIDwgNCB8fCBfX2lzX3NmcmFtZShjb250cm9sKSkKLQkJCWdvdG8gZHJvcDsKLQotCQlpZiAobDJjYXBfY2hlY2tfZmNzKHBpLCBza2IpKQorCQlpZiAobGVuID4gcGktPm1wcyB8fCBsZW4gPCAwIHx8IF9faXNfc2ZyYW1lKGNvbnRyb2wpKQogCQkJZ290byBkcm9wOwogCiAJCXR4X3NlcSA9IF9fZ2V0X3R4c2VxKGNvbnRyb2wpOwpAQCAtNDI4MSw3ICs0NDU5LDcgQEAKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAogCWlmICh0eXBlICE9IEFDTF9MSU5LKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlCVF9EQkcoImhkZXYgJXMsIGJkYWRkciAlcyIsIGhkZXYtPm5hbWUsIGJhdG9zdHIoYmRhZGRyKSk7CiAKQEAgLTQzMTQsNyArNDQ5Miw3IEBACiAJQlRfREJHKCJoY29uICVwIGJkYWRkciAlcyBzdGF0dXMgJWQiLCBoY29uLCBiYXRvc3RyKCZoY29uLT5kc3QpLCBzdGF0dXMpOwogCiAJaWYgKGhjb24tPnR5cGUgIT0gQUNMX0xJTkspCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghc3RhdHVzKSB7CiAJCWNvbm4gPSBsMmNhcF9jb25uX2FkZChoY29uLCBzdGF0dXMpOwpAQCAtNDM0Myw3ICs0NTIxLDcgQEAKIAlCVF9EQkcoImhjb24gJXAgcmVhc29uICVkIiwgaGNvbiwgcmVhc29uKTsKIAogCWlmIChoY29uLT50eXBlICE9IEFDTF9MSU5LKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlsMmNhcF9jb25uX2RlbChoY29uLCBidF9lcnIocmVhc29uKSk7CiAKQEAgLTQ0MDQsNiArNDU4Miw3IEBACiAJCQkJcmVxLnBzbSAgPSBsMmNhcF9waShzayktPnBzbTsKIAogCQkJCWwyY2FwX3BpKHNrKS0+aWRlbnQgPSBsMmNhcF9nZXRfaWRlbnQoY29ubik7CisJCQkJbDJjYXBfcGkoc2spLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfQ09OTkVDVF9QRU5EOwogCiAJCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfcGkoc2spLT5pZGVudCwKIAkJCQkJTDJDQVBfQ09OTl9SRVEsIHNpemVvZihyZXEpLCAmcmVxKTsKQEAgLTQ2NzEsMTQgKzQ4NTAsOCBAQAogbW9kdWxlX2luaXQobDJjYXBfaW5pdCk7CiBtb2R1bGVfZXhpdChsMmNhcF9leGl0KTsKIAotbW9kdWxlX3BhcmFtKGVuYWJsZV9lcnRtLCBib29sLCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlX2VydG0sICJFbmFibGUgZW5oYW5jZWQgcmV0cmFuc21pc3Npb24gbW9kZSIpOwotCi1tb2R1bGVfcGFyYW0obWF4X3RyYW5zbWl0LCB1aW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MobWF4X3RyYW5zbWl0LCAiTWF4IHRyYW5zbWl0IHZhbHVlIChkZWZhdWx0ID0gMykiKTsKLQotbW9kdWxlX3BhcmFtKHR4X3dpbmRvdywgdWludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHR4X3dpbmRvdywgIlRyYW5zbWlzc2lvbiB3aW5kb3cgc2l6ZSB2YWx1ZSAoZGVmYXVsdCA9IDYzKSIpOworbW9kdWxlX3BhcmFtKGRpc2FibGVfZXJ0bSwgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfZXJ0bSwgIkRpc2FibGUgZW5oYW5jZWQgcmV0cmFuc21pc3Npb24gbW9kZSIpOwogCiBNT0RVTEVfQVVUSE9SKCJNYXJjZWwgSG9sdG1hbm4gPG1hcmNlbEBob2x0bWFubi5vcmc+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkJsdWV0b290aCBMMkNBUCB2ZXIgIiBWRVJTSU9OKTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYwppbmRleCA0M2ZiZjZiLi40NGE2MjMyIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMKKysrIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jCkBAIC0xMTUyLDcgKzExNTIsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXZvaWQgcmZjb21tX2NsZWFudXBfc29ja2V0cyh2b2lkKQordm9pZCBfX2V4aXQgcmZjb21tX2NsZWFudXBfc29ja2V0cyh2b2lkKQogewogCWRlYnVnZnNfcmVtb3ZlKHJmY29tbV9zb2NrX2RlYnVnZnMpOwogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCmluZGV4IDMwOWI2YzIuLjAyNjIwNWMgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCkBAIC0xMTUzLDcgKzExNTMsNyBAQAogCS50aW9jbXNldAkJPSByZmNvbW1fdHR5X3Rpb2Ntc2V0LAogfTsKIAotaW50IHJmY29tbV9pbml0X3R0eXModm9pZCkKK2ludCBfX2luaXQgcmZjb21tX2luaXRfdHR5cyh2b2lkKQogewogCXJmY29tbV90dHlfZHJpdmVyID0gYWxsb2NfdHR5X2RyaXZlcihSRkNPTU1fVFRZX1BPUlRTKTsKIAlpZiAoIXJmY29tbV90dHlfZHJpdmVyKQpAQCAtMTE4Myw3ICsxMTgzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCByZmNvbW1fY2xlYW51cF90dHlzKHZvaWQpCit2b2lkIF9fZXhpdCByZmNvbW1fY2xlYW51cF90dHlzKHZvaWQpCiB7CiAJdHR5X3VucmVnaXN0ZXJfZHJpdmVyKHJmY29tbV90dHlfZHJpdmVyKTsKIAlwdXRfdHR5X2RyaXZlcihyZmNvbW1fdHR5X2RyaXZlcik7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyLmMgYi9uZXQvYnJpZGdlL2JyLmMKaW5kZXggNzYzNTdiNS4uYzg0MzZmYSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9ici5jCisrKyBiL25ldC9icmlkZ2UvYnIuYwpAQCAtNjMsNyArNjMsNiBAQAogCQlnb3RvIGVycl9vdXQ0OwogCiAJYnJpb2N0bF9zZXQoYnJfaW9jdGxfZGV2aWNlbGVzc19zdHViKTsKLQlicl9oYW5kbGVfZnJhbWVfaG9vayA9IGJyX2hhbmRsZV9mcmFtZTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0FUTV9MQU5FKSB8fCBkZWZpbmVkKENPTkZJR19BVE1fTEFORV9NT0RVTEUpCiAJYnJfZmRiX3Rlc3RfYWRkcl9ob29rID0gYnJfZmRiX3Rlc3RfYWRkcjsKQEAgLTEwMCw3ICs5OSw2IEBACiAJYnJfZmRiX3Rlc3RfYWRkcl9ob29rID0gTlVMTDsKICNlbmRpZgogCi0JYnJfaGFuZGxlX2ZyYW1lX2hvb2sgPSBOVUxMOwogCWJyX2ZkYl9maW5pKCk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMgYi9uZXQvYnJpZGdlL2JyX2RldmljZS5jCmluZGV4IGVlZGYyYzkuLmNmMDlmZTU5IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jCisrKyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgImJyX3ByaXZhdGUuaCIKIAotLyogbmV0IGRldmljZSB0cmFuc21pdCBhbHdheXMgY2FsbGVkIHdpdGggbm8gQkggKHByZWVtcHRfZGlzYWJsZWQpICovCisvKiBuZXQgZGV2aWNlIHRyYW5zbWl0IGFsd2F5cyBjYWxsZWQgd2l0aCBCSCBkaXNhYmxlZCAqLwogbmV0ZGV2X3R4X3QgYnJfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMzgsMTcgKzM4LDI2IEBACiAJfQogI2VuZGlmCiAKKwl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZicnN0YXRzLT5zeW5jcCk7CiAJYnJzdGF0cy0+dHhfcGFja2V0cysrOwogCWJyc3RhdHMtPnR4X2J5dGVzICs9IHNrYi0+bGVuOworCXU2NF9zdGF0c191cGRhdGVfZW5kKCZicnN0YXRzLT5zeW5jcCk7CiAKIAlCUl9JTlBVVF9TS0JfQ0Ioc2tiKS0+YnJkZXYgPSBkZXY7CiAKIAlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwogCXNrYl9wdWxsKHNrYiwgRVRIX0hMRU4pOwogCisJcmN1X3JlYWRfbG9jaygpOwogCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihkZXN0KSkgewotCQlpZiAoYnJfbXVsdGljYXN0X3JjdihiciwgTlVMTCwgc2tiKSkKKwkJaWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhkZXYpKSkgeworCQkJYnJfZmxvb2RfZGVsaXZlcihiciwgc2tiKTsKIAkJCWdvdG8gb3V0OworCQl9CisJCWlmIChicl9tdWx0aWNhc3RfcmN2KGJyLCBOVUxMLCBza2IpKSB7CisJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCWdvdG8gb3V0OworCQl9CiAKIAkJbWRzdCA9IGJyX21kYl9nZXQoYnIsIHNrYik7CiAJCWlmIChtZHN0IHx8IEJSX0lOUFVUX1NLQl9DQl9NUk9VVEVSU19PTkxZKHNrYikpCkBAIC02MSw2ICs3MCw3IEBACiAJCWJyX2Zsb29kX2RlbGl2ZXIoYnIsIHNrYik7CiAKIG91dDoKKwlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCkBAIC05MiwyMSArMTAyLDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYnJfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpicl9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkJc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cykKIHsKIAlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZkZXYtPnN0YXRzOwotCXN0cnVjdCBicl9jcHVfbmV0c3RhdHMgc3VtID0geyAwIH07CisJc3RydWN0IGJyX2NwdV9uZXRzdGF0cyB0bXAsIHN1bSA9IHsgMCB9OwogCXVuc2lnbmVkIGludCBjcHU7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCXVuc2lnbmVkIGludCBzdGFydDsKIAkJY29uc3Qgc3RydWN0IGJyX2NwdV9uZXRzdGF0cyAqYnN0YXRzCiAJCQk9IHBlcl9jcHVfcHRyKGJyLT5zdGF0cywgY3B1KTsKLQotCQlzdW0udHhfYnl0ZXMgICArPSBic3RhdHMtPnR4X2J5dGVzOwotCQlzdW0udHhfcGFja2V0cyArPSBic3RhdHMtPnR4X3BhY2tldHM7Ci0JCXN1bS5yeF9ieXRlcyAgICs9IGJzdGF0cy0+cnhfYnl0ZXM7Ci0JCXN1bS5yeF9wYWNrZXRzICs9IGJzdGF0cy0+cnhfcGFja2V0czsKKwkJZG8geworCQkJc3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oJmJzdGF0cy0+c3luY3ApOworCQkJbWVtY3B5KCZ0bXAsIGJzdGF0cywgc2l6ZW9mKHRtcCkpOworCQl9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoJmJzdGF0cy0+c3luY3AsIHN0YXJ0KSk7CisJCXN1bS50eF9ieXRlcyAgICs9IHRtcC50eF9ieXRlczsKKwkJc3VtLnR4X3BhY2tldHMgKz0gdG1wLnR4X3BhY2tldHM7CisJCXN1bS5yeF9ieXRlcyAgICs9IHRtcC5yeF9ieXRlczsKKwkJc3VtLnJ4X3BhY2tldHMgKz0gdG1wLnJ4X3BhY2tldHM7CiAJfQogCiAJc3RhdHMtPnR4X2J5dGVzICAgPSBzdW0udHhfYnl0ZXM7CkBAIC0xMjcsNyArMTQxLDcgQEAKIAogI2lmZGVmIENPTkZJR19CUklER0VfTkVURklMVEVSCiAJLyogcmVtZW1iZXIgdGhlIE1UVSBpbiB0aGUgcnRhYmxlIGZvciBQTVRVICovCi0JYnItPmZha2VfcnRhYmxlLnUuZHN0Lm1ldHJpY3NbUlRBWF9NVFUgLSAxXSA9IG5ld19tdHU7CisJYnItPmZha2VfcnRhYmxlLmRzdC5tZXRyaWNzW1JUQVhfTVRVIC0gMV0gPSBuZXdfbXR1OwogI2VuZGlmCiAKIAlyZXR1cm4gMDsKQEAgLTE5OSw3MyArMjEzLDgxIEBACiB9CiAKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotc3RhdGljIGJvb2wgYnJfZGV2aWNlc19zdXBwb3J0X25ldHBvbGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyKQotewotCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7Ci0JYm9vbCByZXQgPSB0cnVlOwotCWludCBjb3VudCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZici0+bG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmJyLT5wb3J0X2xpc3QsIGxpc3QpIHsKLQkJY291bnQrKzsKLQkJaWYgKChwLT5kZXYtPnByaXZfZmxhZ3MgJiBJRkZfRElTQUJMRV9ORVRQT0xMKSB8fAotCQkgICAgIXAtPmRldi0+bmV0ZGV2X29wcy0+bmRvX3BvbGxfY29udHJvbGxlcikKLQkJCXJldCA9IGZhbHNlOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZici0+bG9jaywgZmxhZ3MpOwotCXJldHVybiBjb3VudCAhPSAwICYmIHJldDsKLX0KLQogc3RhdGljIHZvaWQgYnJfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpicl9kZXYpCiB7Ci0Jc3RydWN0IG5ldHBvbGwgKm5wID0gYnJfZGV2LT5ucGluZm8tPm5ldHBvbGw7Ci0KLQlpZiAobnAtPnJlYWxfZGV2ICE9IGJyX2RldikKLQkJbmV0cG9sbF9wb2xsX2RldihucC0+cmVhbF9kZXYpOwogfQogCi12b2lkIGJyX25ldHBvbGxfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgYnJfbmV0cG9sbF9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCAqbjsKLQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wczsKIAotCWJyLT5kZXYtPm5waW5mbyA9IE5VTEw7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZici0+cG9ydF9saXN0LCBsaXN0KSB7Ci0JCWlmIChwLT5kZXYpIHsKLQkJCW9wcyA9IHAtPmRldi0+bmV0ZGV2X29wczsKLQkJCWlmIChvcHMtPm5kb19uZXRwb2xsX2NsZWFudXApCi0JCQkJb3BzLT5uZG9fbmV0cG9sbF9jbGVhbnVwKHAtPmRldik7Ci0JCQllbHNlCi0JCQkJcC0+ZGV2LT5ucGluZm8gPSBOVUxMOwotCQl9CisJCWJyX25ldHBvbGxfZGlzYWJsZShwKTsKIAl9CiB9CiAKLXZvaWQgYnJfbmV0cG9sbF9kaXNhYmxlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKLQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGJyX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldHBvbGxfaW5mbyAqbmkpCiB7Ci0JaWYgKGJyX2RldmljZXNfc3VwcG9ydF9uZXRwb2xsKGJyKSkKLQkJYnItPmRldi0+cHJpdl9mbGFncyAmPSB+SUZGX0RJU0FCTEVfTkVUUE9MTDsKLQlpZiAoZGV2LT5uZXRkZXZfb3BzLT5uZG9fbmV0cG9sbF9jbGVhbnVwKQotCQlkZXYtPm5ldGRldl9vcHMtPm5kb19uZXRwb2xsX2NsZWFudXAoZGV2KTsKLQllbHNlCi0JCWRldi0+bnBpbmZvID0gTlVMTDsKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsICpuOworCWludCBlcnIgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZici0+cG9ydF9saXN0LCBsaXN0KSB7CisJCWlmICghcC0+ZGV2KQorCQkJY29udGludWU7CisKKwkJZXJyID0gYnJfbmV0cG9sbF9lbmFibGUocCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGZhaWw7CisJfQorCitvdXQ6CisJcmV0dXJuIGVycjsKKworZmFpbDoKKwlicl9uZXRwb2xsX2NsZWFudXAoZGV2KTsKKwlnb3RvIG91dDsKIH0KIAotdm9pZCBicl9uZXRwb2xsX2VuYWJsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCi0JCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoraW50IGJyX25ldHBvbGxfZW5hYmxlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApCiB7Ci0JaWYgKGJyX2RldmljZXNfc3VwcG9ydF9uZXRwb2xsKGJyKSkgewotCQlici0+ZGV2LT5wcml2X2ZsYWdzICY9IH5JRkZfRElTQUJMRV9ORVRQT0xMOwotCQlpZiAoYnItPmRldi0+bnBpbmZvKQotCQkJZGV2LT5ucGluZm8gPSBici0+ZGV2LT5ucGluZm87Ci0JfSBlbHNlIGlmICghKGJyLT5kZXYtPnByaXZfZmxhZ3MgJiBJRkZfRElTQUJMRV9ORVRQT0xMKSkgewotCQlici0+ZGV2LT5wcml2X2ZsYWdzIHw9IElGRl9ESVNBQkxFX05FVFBPTEw7Ci0JCWJyX2luZm8oYnIsIm5ldyBkZXZpY2UgJXMgZG9lcyBub3Qgc3VwcG9ydCBuZXRwb2xsIChkaXNhYmxpbmcpIiwKLQkJCWRldi0+bmFtZSk7CisJc3RydWN0IG5ldHBvbGwgKm5wOworCWludCBlcnIgPSAwOworCisJbnAgPSBremFsbG9jKHNpemVvZigqcC0+bnApLCBHRlBfS0VSTkVMKTsKKwllcnIgPSAtRU5PTUVNOworCWlmICghbnApCisJCWdvdG8gb3V0OworCisJbnAtPmRldiA9IHAtPmRldjsKKworCWVyciA9IF9fbmV0cG9sbF9zZXR1cChucCk7CisJaWYgKGVycikgeworCQlrZnJlZShucCk7CisJCWdvdG8gb3V0OwogCX0KKworCXAtPm5wID0gbnA7CisKK291dDoKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIGJyX25ldHBvbGxfZGlzYWJsZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKQoreworCXN0cnVjdCBuZXRwb2xsICpucCA9IHAtPm5wOworCisJaWYgKCFucCkKKwkJcmV0dXJuOworCisJcC0+bnAgPSBOVUxMOworCisJLyogV2FpdCBmb3IgdHJhbnNtaXR0aW5nIHBhY2tldHMgdG8gZmluaXNoIGJlZm9yZSBmcmVlaW5nLiAqLworCXN5bmNocm9uaXplX3JjdV9iaCgpOworCisJX19uZXRwb2xsX2NsZWFudXAobnApOworCWtmcmVlKG5wKTsKIH0KIAogI2VuZGlmCkBAIC0yODgsMTIgKzMxMCwxMyBAQAogCS5uZG9fb3BlbgkJID0gYnJfZGV2X29wZW4sCiAJLm5kb19zdG9wCQkgPSBicl9kZXZfc3RvcCwKIAkubmRvX3N0YXJ0X3htaXQJCSA9IGJyX2Rldl94bWl0LAotCS5uZG9fZ2V0X3N0YXRzCQkgPSBicl9nZXRfc3RhdHMsCisJLm5kb19nZXRfc3RhdHM2NAkgPSBicl9nZXRfc3RhdHM2NCwKIAkubmRvX3NldF9tYWNfYWRkcmVzcwkgPSBicl9zZXRfbWFjX2FkZHJlc3MsCiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJID0gYnJfZGV2X3NldF9tdWx0aWNhc3RfbGlzdCwKIAkubmRvX2NoYW5nZV9tdHUJCSA9IGJyX2NoYW5nZV9tdHUsCiAJLm5kb19kb19pb2N0bAkJID0gYnJfZGV2X2lvY3RsLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19uZXRwb2xsX3NldHVwCSA9IGJyX25ldHBvbGxfc2V0dXAsCiAJLm5kb19uZXRwb2xsX2NsZWFudXAJID0gYnJfbmV0cG9sbF9jbGVhbnVwLAogCS5uZG9fcG9sbF9jb250cm9sbGVyCSA9IGJyX3BvbGxfY29udHJvbGxlciwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9mZGIuYyBiL25ldC9icmlkZ2UvYnJfZmRiLmMKaW5kZXggYjAxZGRlMy4uOTA1MTJjYyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9mZGIuYworKysgYi9uZXQvYnJpZGdlL2JyX2ZkYi5jCkBAIC0yMTQsNyArMjE0LDcgQEAKIAlzcGluX3VubG9ja19iaCgmYnItPmhhc2hfbG9jayk7CiB9CiAKLS8qIE5vIGxvY2tpbmcgb3IgcmVmY291bnRpbmcsIGFzc3VtZXMgY2FsbGVyIGhhcyBubyBwcmVlbXB0IChyY3VfcmVhZF9sb2NrKSAqLworLyogTm8gbG9ja2luZyBvciByZWZjb3VudGluZywgYXNzdW1lcyBjYWxsZXIgaGFzIHJjdV9yZWFkX2xvY2sgKi8KIHN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqX19icl9mZGJfZ2V0KHN0cnVjdCBuZXRfYnJpZGdlICpiciwKIAkJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKQogewpAQCAtMjQwLDExICsyNDAsMTEgQEAKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9mZGJfZW50cnkgKmZkYjsKIAlpbnQgcmV0OwogCi0JaWYgKCFkZXYtPmJyX3BvcnQpCisJaWYgKCFicl9wb3J0X2V4aXN0cyhkZXYpKQogCQlyZXR1cm4gMDsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlmZGIgPSBfX2JyX2ZkYl9nZXQoZGV2LT5icl9wb3J0LT5iciwgYWRkcik7CisJZmRiID0gX19icl9mZGJfZ2V0KGJyX3BvcnRfZ2V0X3JjdShkZXYpLT5iciwgYWRkcik7CiAJcmV0ID0gZmRiICYmIGZkYi0+ZHN0LT5kZXYgIT0gZGV2ICYmCiAJCWZkYi0+ZHN0LT5zdGF0ZSA9PSBCUl9TVEFURV9GT1JXQVJESU5HOwogCXJjdV9yZWFkX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9mb3J3YXJkLmMgYi9uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYwppbmRleCBhNGU3MmE4Li5jYmZlODdmIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYworKysgYi9uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYwpAQCAtNTAsMTQgKzUwLDcgQEAKIAkJCWtmcmVlX3NrYihza2IpOwogCQllbHNlIHsKIAkJCXNrYl9wdXNoKHNrYiwgRVRIX0hMRU4pOwotCi0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQkJCWlmICh1bmxpa2VseShza2ItPmRldi0+cHJpdl9mbGFncyAmIElGRl9JTl9ORVRQT0xMKSkgewotCQkJCW5ldHBvbGxfc2VuZF9za2Ioc2tiLT5kZXYtPm5waW5mby0+bmV0cG9sbCwgc2tiKTsKLQkJCQlza2ItPmRldi0+cHJpdl9mbGFncyAmPSB+SUZGX0lOX05FVFBPTEw7Ci0JCQl9IGVsc2UKLSNlbmRpZgotCQkJCWRldl9xdWV1ZV94bWl0KHNrYik7CisJCQlkZXZfcXVldWVfeG1pdChza2IpOwogCQl9CiAJfQogCkBAIC03MywyMyArNjYsMjAgQEAKIAogc3RhdGljIHZvaWQgX19icl9kZWxpdmVyKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0Jc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gdG8tPmJyOwotCWlmICh1bmxpa2VseShici0+ZGV2LT5wcml2X2ZsYWdzICYgSUZGX0lOX05FVFBPTEwpKSB7Ci0JCXN0cnVjdCBuZXRwb2xsICpucDsKLQkJdG8tPmRldi0+bnBpbmZvID0gc2tiLT5kZXYtPm5waW5mbzsKLQkJbnAgPSBza2ItPmRldi0+bnBpbmZvLT5uZXRwb2xsOwotCQlucC0+cmVhbF9kZXYgPSBucC0+ZGV2ID0gdG8tPmRldjsKLQkJdG8tPmRldi0+cHJpdl9mbGFncyB8PSBJRkZfSU5fTkVUUE9MTDsKLQl9Ci0jZW5kaWYKIAlza2ItPmRldiA9IHRvLT5kZXY7CisKKwlpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKHRvLT5kZXYpKSkgeworCQlpZiAocGFja2V0X2xlbmd0aChza2IpID4gc2tiLT5kZXYtPm10dSAmJiAhc2tiX2lzX2dzbyhza2IpKQorCQkJa2ZyZWVfc2tiKHNrYik7CisJCWVsc2UgeworCQkJc2tiX3B1c2goc2tiLCBFVEhfSExFTik7CisJCQlicl9uZXRwb2xsX3NlbmRfc2tiKHRvLCBza2IpOworCQl9CisJCXJldHVybjsKKwl9CisKIAlORl9IT09LKE5GUFJPVE9fQlJJREdFLCBORl9CUl9MT0NBTF9PVVQsIHNrYiwgTlVMTCwgc2tiLT5kZXYsCiAJCWJyX2ZvcndhcmRfZmluaXNoKTsKLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotCWlmIChza2ItPmRldi0+bnBpbmZvKQotCQlza2ItPmRldi0+bnBpbmZvLT5uZXRwb2xsLT5kZXYgPSBici0+ZGV2OwotI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIF9fYnJfZm9yd2FyZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICp0bywgc3RydWN0IHNrX2J1ZmYgKnNrYikKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaWYuYyBiL25ldC9icmlkZ2UvYnJfaWYuYwppbmRleCAxOGIyNDVlLi5jMDNkMmMzIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2lmLmMKKysrIGIvbmV0L2JyaWRnZS9icl9pZi5jCkBAIC0xNDcsMTQgKzE0NywxNyBAQAogCiAJbGlzdF9kZWxfcmN1KCZwLT5saXN0KTsKIAotCXJjdV9hc3NpZ25fcG9pbnRlcihkZXYtPmJyX3BvcnQsIE5VTEwpOworCWRldi0+cHJpdl9mbGFncyAmPSB+SUZGX0JSSURHRV9QT1JUOworCisJbmV0ZGV2X3J4X2hhbmRsZXJfdW5yZWdpc3RlcihkZXYpOwogCiAJYnJfbXVsdGljYXN0X2RlbF9wb3J0KHApOwogCiAJa29iamVjdF91ZXZlbnQoJnAtPmtvYmosIEtPQkpfUkVNT1ZFKTsKIAlrb2JqZWN0X2RlbCgmcC0+a29iaik7CiAKLQlicl9uZXRwb2xsX2Rpc2FibGUoYnIsIGRldik7CisJYnJfbmV0cG9sbF9kaXNhYmxlKHApOworCiAJY2FsbF9yY3UoJnAtPnJjdSwgZGVzdHJveV9uYnBfcmN1KTsKIH0KIApAQCAtMTY3LDggKzE3MCw2IEBACiAJCWRlbF9uYnAocCk7CiAJfQogCi0JYnJfbmV0cG9sbF9jbGVhbnVwKGJyLT5kZXYpOwotCiAJZGVsX3RpbWVyX3N5bmMoJmJyLT5nY190aW1lcik7CiAKIAlicl9zeXNmc19kZWxicihici0+ZGV2KTsKQEAgLTQwMCw3ICs0MDEsNyBAQAogCQlyZXR1cm4gLUVMT09QOwogCiAJLyogRGV2aWNlIGlzIGFscmVhZHkgYmVpbmcgYnJpZGdlZCAqLwotCWlmIChkZXYtPmJyX3BvcnQgIT0gTlVMTCkKKwlpZiAoYnJfcG9ydF9leGlzdHMoZGV2KSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCS8qIE5vIGJyaWRnaW5nIGRldmljZXMgdGhhdCBkaXNsaWtlIHRoYXQgKGUuZy4gd2lyZWxlc3MpICovCkBAIC00MjgsNyArNDI5LDE1IEBACiAJaWYgKGVycikKIAkJZ290byBlcnIyOwogCi0JcmN1X2Fzc2lnbl9wb2ludGVyKGRldi0+YnJfcG9ydCwgcCk7CisJaWYgKGJyX25ldHBvbGxfaW5mbyhicikgJiYgKChlcnIgPSBicl9uZXRwb2xsX2VuYWJsZShwKSkpKQorCQlnb3RvIGVycjM7CisKKwllcnIgPSBuZXRkZXZfcnhfaGFuZGxlcl9yZWdpc3RlcihkZXYsIGJyX2hhbmRsZV9mcmFtZSwgcCk7CisJaWYgKGVycikKKwkJZ290byBlcnIzOworCisJZGV2LT5wcml2X2ZsYWdzIHw9IElGRl9CUklER0VfUE9SVDsKKwogCWRldl9kaXNhYmxlX2xybyhkZXYpOwogCiAJbGlzdF9hZGRfcmN1KCZwLT5saXN0LCAmYnItPnBvcnRfbGlzdCk7CkBAIC00NDgsOSArNDU3LDkgQEAKIAogCWtvYmplY3RfdWV2ZW50KCZwLT5rb2JqLCBLT0JKX0FERCk7CiAKLQlicl9uZXRwb2xsX2VuYWJsZShiciwgZGV2KTsKLQogCXJldHVybiAwOworZXJyMzoKKwlzeXNmc19yZW1vdmVfbGluayhici0+aWZvYmosIHAtPmRldi0+bmFtZSk7CiBlcnIyOgogCWJyX2ZkYl9kZWxldGVfYnlfcG9ydChiciwgcCwgMSk7CiBlcnIxOgpAQCAtNDY3LDkgKzQ3NiwxMyBAQAogLyogY2FsbGVkIHdpdGggUlROTCAqLwogaW50IGJyX2RlbF9pZihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCA9IGRldi0+YnJfcG9ydDsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwOwogCi0JaWYgKCFwIHx8IHAtPmJyICE9IGJyKQorCWlmICghYnJfcG9ydF9leGlzdHMoZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwID0gYnJfcG9ydF9nZXQoZGV2KTsKKwlpZiAocC0+YnIgIT0gYnIpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZGVsX25icChwKTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaW5wdXQuYyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwppbmRleCBkMzZlNzAwLi44MjZjZDUyIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMKKysrIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jCkBAIC0yNyw4ICsyNywxMCBAQAogCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IG5ldGRldl9wcml2KGJyZGV2KTsKIAlzdHJ1Y3QgYnJfY3B1X25ldHN0YXRzICpicnN0YXRzID0gdGhpc19jcHVfcHRyKGJyLT5zdGF0cyk7CiAKKwl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZicnN0YXRzLT5zeW5jcCk7CiAJYnJzdGF0cy0+cnhfcGFja2V0cysrOwogCWJyc3RhdHMtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCXU2NF9zdGF0c191cGRhdGVfZW5kKCZicnN0YXRzLT5zeW5jcCk7CiAKIAlpbmRldiA9IHNrYi0+ZGV2OwogCXNrYi0+ZGV2ID0gYnJkZXY7CkBAIC0zNywxMSArMzksMTEgQEAKIAkJICAgICAgIG5ldGlmX3JlY2VpdmVfc2tiKTsKIH0KIAotLyogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrIChwcmVlbXB0X2Rpc2FibGVkKSAqLworLyogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrICovCiBpbnQgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBldGhfaGRyKHNrYiktPmhfZGVzdDsKLQlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwID0gcmN1X2RlcmVmZXJlbmNlKHNrYi0+ZGV2LT5icl9wb3J0KTsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwID0gYnJfcG9ydF9nZXRfcmN1KHNrYi0+ZGV2KTsKIAlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnI7CiAJc3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpkc3Q7CiAJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptZHN0OwpAQCAtMTA4LDEzICsxMTAsMTIgQEAKIAlnb3RvIG91dDsKIH0KIAotLyogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrIChwcmVlbXB0X2Rpc2FibGVkKSAqLworLyogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrICovCiBzdGF0aWMgaW50IGJyX2hhbmRsZV9sb2NhbF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwID0gcmN1X2RlcmVmZXJlbmNlKHNrYi0+ZGV2LT5icl9wb3J0KTsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwID0gYnJfcG9ydF9nZXRfcmN1KHNrYi0+ZGV2KTsKIAotCWlmIChwKQotCQlicl9mZGJfdXBkYXRlKHAtPmJyLCBwLCBldGhfaGRyKHNrYiktPmhfc291cmNlKTsKKwlicl9mZGJfdXBkYXRlKHAtPmJyLCBwLCBldGhfaGRyKHNrYiktPmhfc291cmNlKTsKIAlyZXR1cm4gMDsJIC8qIHByb2Nlc3MgZnVydGhlciAqLwogfQogCkBAIC0xMzEsMTUgKzEzMiwxOCBAQAogfQogCiAvKgotICogQ2FsbGVkIHZpYSBicl9oYW5kbGVfZnJhbWVfaG9vay4KICAqIFJldHVybiBOVUxMIGlmIHNrYiBpcyBoYW5kbGVkCi0gKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgKHByZWVtcHRfZGlzYWJsZWQpCisgKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sKICAqLwotc3RydWN0IHNrX2J1ZmYgKmJyX2hhbmRsZV9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RydWN0IHNrX2J1ZmYgKmJyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqZGVzdCA9IGV0aF9oZHIoc2tiKS0+aF9kZXN0OwogCWludCAoKnJob29rKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAorCWlmIChza2ItPnBrdF90eXBlID09IFBBQ0tFVF9MT09QQkFDSykKKwkJcmV0dXJuIHNrYjsKKwogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihldGhfaGRyKHNrYiktPmhfc291cmNlKSkKIAkJZ290byBkcm9wOwogCkBAIC0xNDcsNiArMTUxLDggQEAKIAlpZiAoIXNrYikKIAkJcmV0dXJuIE5VTEw7CiAKKwlwID0gYnJfcG9ydF9nZXRfcmN1KHNrYi0+ZGV2KTsKKwogCWlmICh1bmxpa2VseShpc19saW5rX2xvY2FsKGRlc3QpKSkgewogCQkvKiBQYXVzZSBmcmFtZXMgc2hvdWxkbid0IGJlIHBhc3NlZCB1cCBieSBkcml2ZXIgYW55d2F5ICovCiAJCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX1BBVVNFKSkKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCmluZGV4IDI3YWU5NDYuLmViNWIyNTYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKKysrIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwpAQCAtMTQzNSw3ICsxNDM1LDcgQEAKIAlzdHJ1Y3QgaWNtcDZoZHIgKmljbXA2aDsKIAl1OCBuZXh0aGRyOwogCXVuc2lnbmVkIGxlbjsKLQl1bnNpZ25lZCBvZmZzZXQ7CisJaW50IG9mZnNldDsKIAlpbnQgZXJyOwogCiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCppcDZoKSkpCkBAIC0xNzI4LDEzICsxNzI4LDkgQEAKIGludCBicl9tdWx0aWNhc3RfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwpCiB7CiAJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydDsKLQlpbnQgZXJyID0gLUVOT0VOVDsKKwlpbnQgZXJyID0gMDsKIAogCXNwaW5fbG9jaygmYnItPm11bHRpY2FzdF9sb2NrKTsKLQlpZiAoIW5ldGlmX3J1bm5pbmcoYnItPmRldikpCi0JCWdvdG8gdW5sb2NrOwotCi0JZXJyID0gMDsKIAlpZiAoYnItPm11bHRpY2FzdF9kaXNhYmxlZCA9PSAhdmFsKQogCQlnb3RvIHVubG9jazsKIApAQCAtMTc0Miw2ICsxNzM4LDkgQEAKIAlpZiAoYnItPm11bHRpY2FzdF9kaXNhYmxlZCkKIAkJZ290byB1bmxvY2s7CiAKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYnItPmRldikpCisJCWdvdG8gdW5sb2NrOworCiAJaWYgKGJyLT5tZGIpIHsKIAkJaWYgKGJyLT5tZGItPm9sZCkgewogCQkJZXJyID0gLUVFWElTVDsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCmluZGV4IDhmYjc1ZjguLjJjOTExYzAgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKKysrIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYwpAQCAtNTUsNiArNTUsOSBAQAogc3RhdGljIGludCBicm5mX2ZpbHRlcl92bGFuX3RhZ2dlZCBfX3JlYWRfbW9zdGx5ID0gMDsKIHN0YXRpYyBpbnQgYnJuZl9maWx0ZXJfcHBwb2VfdGFnZ2VkIF9fcmVhZF9tb3N0bHkgPSAwOwogI2Vsc2UKKyNkZWZpbmUgYnJuZl9jYWxsX2lwdGFibGVzIDEKKyNkZWZpbmUgYnJuZl9jYWxsX2lwNnRhYmxlcyAxCisjZGVmaW5lIGJybmZfY2FsbF9hcnB0YWJsZXMgMQogI2RlZmluZSBicm5mX2ZpbHRlcl92bGFuX3RhZ2dlZCAwCiAjZGVmaW5lIGJybmZfZmlsdGVyX3BwcG9lX3RhZ2dlZCAwCiAjZW5kaWYKQEAgLTExNywyNiArMTIwLDI3IEBACiB7CiAJc3RydWN0IHJ0YWJsZSAqcnQgPSAmYnItPmZha2VfcnRhYmxlOwogCi0JYXRvbWljX3NldCgmcnQtPnUuZHN0Ll9fcmVmY250LCAxKTsKLQlydC0+dS5kc3QuZGV2ID0gYnItPmRldjsKLQlydC0+dS5kc3QucGF0aCA9ICZydC0+dS5kc3Q7Ci0JcnQtPnUuZHN0Lm1ldHJpY3NbUlRBWF9NVFUgLSAxXSA9IDE1MDA7Ci0JcnQtPnUuZHN0LmZsYWdzCT0gRFNUX05PWEZSTTsKLQlydC0+dS5kc3Qub3BzID0gJmZha2VfZHN0X29wczsKKwlhdG9taWNfc2V0KCZydC0+ZHN0Ll9fcmVmY250LCAxKTsKKwlydC0+ZHN0LmRldiA9IGJyLT5kZXY7CisJcnQtPmRzdC5wYXRoID0gJnJ0LT5kc3Q7CisJcnQtPmRzdC5tZXRyaWNzW1JUQVhfTVRVIC0gMV0gPSAxNTAwOworCXJ0LT5kc3QuZmxhZ3MJPSBEU1RfTk9YRlJNOworCXJ0LT5kc3Qub3BzID0gJmZha2VfZHN0X29wczsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRhYmxlICpicmlkZ2VfcGFyZW50X3J0YWJsZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQgPSByY3VfZGVyZWZlcmVuY2UoZGV2LT5icl9wb3J0KTsKLQotCXJldHVybiBwb3J0ID8gJnBvcnQtPmJyLT5mYWtlX3J0YWJsZSA6IE5VTEw7CisJaWYgKCFicl9wb3J0X2V4aXN0cyhkZXYpKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gJmJyX3BvcnRfZ2V0X3JjdShkZXYpLT5ici0+ZmFrZV9ydGFibGU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKmJyaWRnZV9wYXJlbnQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0ID0gcmN1X2RlcmVmZXJlbmNlKGRldi0+YnJfcG9ydCk7CisJaWYgKCFicl9wb3J0X2V4aXN0cyhkZXYpKQorCQlyZXR1cm4gTlVMTDsKIAotCXJldHVybiBwb3J0ID8gcG9ydC0+YnItPmRldiA6IE5VTEw7CisJcmV0dXJuIGJyX3BvcnRfZ2V0X3JjdShkZXYpLT5ici0+ZGV2OwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqbmZfYnJpZGdlX2FsbG9jKHN0cnVjdCBza19idWZmICpza2IpCkBAIC0yNDQsOCArMjQ4LDcgQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiAwOwogCX0KLQlkc3RfaG9sZCgmcnQtPnUuZHN0KTsKLQlza2JfZHN0X3NldChza2IsICZydC0+dS5kc3QpOworCXNrYl9kc3Rfc2V0X25vcmVmKHNrYiwgJnJ0LT5kc3QpOwogCiAJc2tiLT5kZXYgPSBuZl9icmlkZ2UtPnBoeXNpbmRldjsKIAluZl9icmlkZ2VfdXBkYXRlX3Byb3RvY29sKHNrYik7CkBAIC0zOTYsOCArMzk5LDcgQEAKIAkJCWtmcmVlX3NrYihza2IpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJZHN0X2hvbGQoJnJ0LT51LmRzdCk7Ci0JCXNrYl9kc3Rfc2V0KHNrYiwgJnJ0LT51LmRzdCk7CisJCXNrYl9kc3Rfc2V0X25vcmVmKHNrYiwgJnJ0LT5kc3QpOwogCX0KIAogCXNrYi0+ZGV2ID0gbmZfYnJpZGdlLT5waHlzaW5kZXY7CkBAIC01NDUsMjUgKzU0NywzMCBAQAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCiAJCQkJICAgICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCiB7CisJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcDsKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnI7CiAJc3RydWN0IGlwaGRyICppcGg7CiAJX191MzIgbGVuID0gbmZfYnJpZGdlX2VuY2FwX2hlYWRlcl9sZW4oc2tiKTsKIAogCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIGxlbikpKQogCQlnb3RvIG91dDsKIAorCXAgPSBicl9wb3J0X2dldF9yY3UoaW4pOworCWlmIChwID09IE5VTEwpCisJCWdvdG8gb3V0OworCWJyID0gcC0+YnI7CisKIAlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSB8fCBJU19WTEFOX0lQVjYoc2tiKSB8fAogCSAgICBJU19QUFBPRV9JUFY2KHNrYikpIHsKLSNpZmRlZiBDT05GSUdfU1lTQ1RMCi0JCWlmICghYnJuZl9jYWxsX2lwNnRhYmxlcykKKwkJaWYgKCFicm5mX2NhbGxfaXA2dGFibGVzICYmICFici0+bmZfY2FsbF9pcDZ0YWJsZXMpCiAJCQlyZXR1cm4gTkZfQUNDRVBUOwotI2VuZGlmCisKIAkJbmZfYnJpZGdlX3B1bGxfZW5jYXBfaGVhZGVyX3Jjc3VtKHNrYik7CiAJCXJldHVybiBicl9uZl9wcmVfcm91dGluZ19pcHY2KGhvb2ssIHNrYiwgaW4sIG91dCwgb2tmbik7CiAJfQotI2lmZGVmIENPTkZJR19TWVNDVEwKLQlpZiAoIWJybmZfY2FsbF9pcHRhYmxlcykKKworCWlmICghYnJuZl9jYWxsX2lwdGFibGVzICYmICFici0+bmZfY2FsbF9pcHRhYmxlcykKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKLSNlbmRpZgogCiAJaWYgKHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVApICYmICFJU19WTEFOX0lQKHNrYikgJiYKIAkgICAgIUlTX1BQUE9FX0lQKHNrYikpCkBAIC03MTksMTIgKzcyNiwxNyBAQAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCiAJCQkJICAgICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCiB7CisJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcDsKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKipkID0gKHN0cnVjdCBuZXRfZGV2aWNlICoqKShza2ItPmNiKTsKIAotI2lmZGVmIENPTkZJR19TWVNDVEwKLQlpZiAoIWJybmZfY2FsbF9hcnB0YWJsZXMpCisJcCA9IGJyX3BvcnRfZ2V0X3JjdShvdXQpOworCWlmIChwID09IE5VTEwpCiAJCXJldHVybiBORl9BQ0NFUFQ7Ci0jZW5kaWYKKwliciA9IHAtPmJyOworCisJaWYgKCFicm5mX2NhbGxfYXJwdGFibGVzICYmICFici0+bmZfY2FsbF9hcnB0YWJsZXMpCisJCXJldHVybiBORl9BQ0NFUFQ7CiAKIAlpZiAoc2tiLT5wcm90b2NvbCAhPSBodG9ucyhFVEhfUF9BUlApKSB7CiAJCWlmICghSVNfVkxBTl9BUlAoc2tiKSkKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0bGluay5jIGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKaW5kZXggZmUwYTc5MC4uNGE2YTM3OCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKKysrIGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKQEAgLTEyMCwxMCArMTIwLDExIEBACiAJaWR4ID0gMDsKIAlmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHsKIAkJLyogbm90IGEgYnJpZGdlIHBvcnQgKi8KLQkJaWYgKGRldi0+YnJfcG9ydCA9PSBOVUxMIHx8IGlkeCA8IGNiLT5hcmdzWzBdKQorCQlpZiAoIWJyX3BvcnRfZXhpc3RzKGRldikgfHwgaWR4IDwgY2ItPmFyZ3NbMF0pCiAJCQlnb3RvIHNraXA7CiAKLQkJaWYgKGJyX2ZpbGxfaWZpbmZvKHNrYiwgZGV2LT5icl9wb3J0LCBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKKwkJaWYgKGJyX2ZpbGxfaWZpbmZvKHNrYiwgYnJfcG9ydF9nZXQoZGV2KSwKKwkJCQkgICBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKIAkJCQkgICBjYi0+bmxoLT5ubG1zZ19zZXEsIFJUTV9ORVdMSU5LLAogCQkJCSAgIE5MTV9GX01VTFRJKSA8IDApCiAJCQlicmVhazsKQEAgLTE2OCw5ICsxNjksOSBAQAogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXAgPSBkZXYtPmJyX3BvcnQ7Ci0JaWYgKCFwKQorCWlmICghYnJfcG9ydF9leGlzdHMoZGV2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CisJcCA9IGJyX3BvcnRfZ2V0KGRldik7CiAKIAkvKiBpZiBrZXJuZWwgU1RQIGlzIHJ1bm5pbmcsIGRvbid0IGFsbG93IGNoYW5nZXMgKi8KIAlpZiAocC0+YnItPnN0cF9lbmFibGVkID09IEJSX0tFUk5FTF9TVFApCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX25vdGlmeS5jIGIvbmV0L2JyaWRnZS9icl9ub3RpZnkuYwppbmRleCA3MTdlMWZkLi40MDRkNGUxIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX25vdGlmeS5jCisrKyBiL25ldC9icmlkZ2UvYnJfbm90aWZ5LmMKQEAgLTMyLDE0ICszMiwxNSBAQAogc3RhdGljIGludCBicl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHRyOwotCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAgPSBkZXYtPmJyX3BvcnQ7CisJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCA9IGJyX3BvcnRfZ2V0KGRldik7CiAJc3RydWN0IG5ldF9icmlkZ2UgKmJyOwogCWludCBlcnI7CiAKIAkvKiBub3QgYSBwb3J0IG9mIGEgYnJpZGdlICovCi0JaWYgKHAgPT0gTlVMTCkKKwlpZiAoIWJyX3BvcnRfZXhpc3RzKGRldikpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAorCXAgPSBicl9wb3J0X2dldChkZXYpOwogCWJyID0gcC0+YnI7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaCBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCmluZGV4IDBmNGE3NGIuLjc1YzkwZWQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCisrKyBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCkBAIC0xNSw2ICsxNSw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9icmlkZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRwb2xsLmg+CisjaW5jbHVkZSA8bGludXgvdTY0X3N0YXRzX3N5bmMuaD4KICNpbmNsdWRlIDxuZXQvcm91dGUuaD4KIAogI2RlZmluZSBCUl9IQVNIX0JJVFMgOApAQCAtMTQzLDEzICsxNDUsMjMgQEAKICNpZmRlZiBDT05GSUdfU1lTRlMKIAljaGFyCQkJCXN5c2ZzX25hbWVbSUZOQU1TSVpdOwogI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCXN0cnVjdCBuZXRwb2xsCQkJKm5wOworI2VuZGlmCiB9OwogCisjZGVmaW5lIGJyX3BvcnRfZ2V0X3JjdShkZXYpIFwKKwkoKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKikgcmN1X2RlcmVmZXJlbmNlKGRldi0+cnhfaGFuZGxlcl9kYXRhKSkKKyNkZWZpbmUgYnJfcG9ydF9nZXQoZGV2KSAoKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKikgZGV2LT5yeF9oYW5kbGVyX2RhdGEpCisjZGVmaW5lIGJyX3BvcnRfZXhpc3RzKGRldikgKGRldi0+cHJpdl9mbGFncyAmIElGRl9CUklER0VfUE9SVCkKKwogc3RydWN0IGJyX2NwdV9uZXRzdGF0cyB7Ci0JdW5zaWduZWQgbG9uZwlyeF9wYWNrZXRzOwotCXVuc2lnbmVkIGxvbmcJcnhfYnl0ZXM7Ci0JdW5zaWduZWQgbG9uZwl0eF9wYWNrZXRzOwotCXVuc2lnbmVkIGxvbmcJdHhfYnl0ZXM7CisJdTY0CQkJcnhfcGFja2V0czsKKwl1NjQJCQlyeF9ieXRlczsKKwl1NjQJCQl0eF9wYWNrZXRzOworCXU2NAkJCXR4X2J5dGVzOworCXN0cnVjdCB1NjRfc3RhdHNfc3luYwlzeW5jcDsKIH07CiAKIHN0cnVjdCBuZXRfYnJpZGdlCkBAIC0xNjQsNiArMTc2LDkgQEAKIAl1bnNpZ25lZCBsb25nCQkJZmVhdHVyZV9tYXNrOwogI2lmZGVmIENPTkZJR19CUklER0VfTkVURklMVEVSCiAJc3RydWN0IHJ0YWJsZSAJCQlmYWtlX3J0YWJsZTsKKwlib29sCQkJCW5mX2NhbGxfaXB0YWJsZXM7CisJYm9vbAkJCQluZl9jYWxsX2lwNnRhYmxlczsKKwlib29sCQkJCW5mX2NhbGxfYXJwdGFibGVzOwogI2VuZGlmCiAJdW5zaWduZWQgbG9uZwkJCWZsYWdzOwogI2RlZmluZSBCUl9TRVRfTUFDX0FERFIJCTB4MDAwMDAwMDEKQEAgLTI3MywxNiArMjg4LDQxIEBACiBleHRlcm4gbmV0ZGV2X3R4X3QgYnJfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotZXh0ZXJuIHZvaWQgYnJfbmV0cG9sbF9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotZXh0ZXJuIHZvaWQgYnJfbmV0cG9sbF9lbmFibGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAotCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCBicl9uZXRwb2xsX2Rpc2FibGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAotCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotI2Vsc2UKLSNkZWZpbmUgYnJfbmV0cG9sbF9jbGVhbnVwKGJyKQotI2RlZmluZSBicl9uZXRwb2xsX2VuYWJsZShiciwgZGV2KQotI2RlZmluZSBicl9uZXRwb2xsX2Rpc2FibGUoYnIsIGRldikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5ldHBvbGxfaW5mbyAqYnJfbmV0cG9sbF9pbmZvKHN0cnVjdCBuZXRfYnJpZGdlICpicikKK3sKKwlyZXR1cm4gYnItPmRldi0+bnBpbmZvOworfQogCitzdGF0aWMgaW5saW5lIHZvaWQgYnJfbmV0cG9sbF9zZW5kX3NrYihjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAorCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBuZXRwb2xsICpucCA9IHAtPm5wOworCisJaWYgKG5wKQorCQluZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpOworfQorCitleHRlcm4gaW50IGJyX25ldHBvbGxfZW5hYmxlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApOworZXh0ZXJuIHZvaWQgYnJfbmV0cG9sbF9kaXNhYmxlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5ldHBvbGxfaW5mbyAqYnJfbmV0cG9sbF9pbmZvKHN0cnVjdCBuZXRfYnJpZGdlICpicikKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJyX25ldHBvbGxfc2VuZF9za2IoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwKKwkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQgYnJfbmV0cG9sbF9lbmFibGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJyX25ldHBvbGxfZGlzYWJsZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKQoreworfQogI2VuZGlmCiAKIC8qIGJyX2ZkYi5jICovCkBAIC0zMzEsOCArMzcxLDcgQEAKIAogLyogYnJfaW5wdXQuYyAqLwogZXh0ZXJuIGludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IpOwotZXh0ZXJuIHN0cnVjdCBza19idWZmICpicl9oYW5kbGVfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwKLQkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gc3RydWN0IHNrX2J1ZmYgKmJyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogLyogYnJfaW9jdGwuYyAqLwogZXh0ZXJuIGludCBicl9kZXZfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3N0cF9icGR1LmMgYi9uZXQvYnJpZGdlL2JyX3N0cF9icGR1LmMKaW5kZXggMjE3YmQyMi4uMzVjZjI3MCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9zdHBfYnBkdS5jCisrKyBiL25ldC9icmlkZ2UvYnJfc3RwX2JwZHUuYwpAQCAtMTMxLDE4ICsxMzEsMTkgQEAKIC8qCiAgKiBDYWxsZWQgZnJvbSBsbGMuCiAgKgotICogTk8gbG9ja3MsIGJ1dCByY3VfcmVhZF9sb2NrIChwcmVlbXB0X2Rpc2FibGVkKQorICogTk8gbG9ja3MsIGJ1dCByY3VfcmVhZF9sb2NrCiAgKi8KIHZvaWQgYnJfc3RwX3Jjdihjb25zdCBzdHJ1Y3Qgc3RwX3Byb3RvICpwcm90bywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpkZXN0ID0gZXRoX2hkcihza2IpLT5oX2Rlc3Q7Ci0Jc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCA9IHJjdV9kZXJlZmVyZW5jZShkZXYtPmJyX3BvcnQpOworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7CiAJc3RydWN0IG5ldF9icmlkZ2UgKmJyOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZjsKIAotCWlmICghcCkKKwlpZiAoIWJyX3BvcnRfZXhpc3RzKGRldikpCiAJCWdvdG8gZXJyOworCXAgPSBicl9wb3J0X2dldF9yY3UoZGV2KTsKIAogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIDQpKQogCQlnb3RvIGVycjsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYyBiL25ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYwppbmRleCA0ODZiOGYzLi41YzFlNTU1IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMKKysrIGIvbmV0L2JyaWRnZS9icl9zeXNmc19ici5jCkBAIC02MTEsNiArNjExLDczIEBACiAJCSAgIHNob3dfbXVsdGljYXN0X3N0YXJ0dXBfcXVlcnlfaW50ZXJ2YWwsCiAJCSAgIHN0b3JlX211bHRpY2FzdF9zdGFydHVwX3F1ZXJ5X2ludGVydmFsKTsKICNlbmRpZgorI2lmZGVmIENPTkZJR19CUklER0VfTkVURklMVEVSCitzdGF0aWMgc3NpemVfdCBzaG93X25mX2NhbGxfaXB0YWJsZXMoCisJc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSB0b19icmlkZ2UoZCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGJyLT5uZl9jYWxsX2lwdGFibGVzKTsKK30KKworc3RhdGljIGludCBzZXRfbmZfY2FsbF9pcHRhYmxlcyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCWJyLT5uZl9jYWxsX2lwdGFibGVzID0gdmFsID8gdHJ1ZSA6IGZhbHNlOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9uZl9jYWxsX2lwdGFibGVzKAorCXN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCisJc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gc3RvcmVfYnJpZGdlX3Bhcm0oZCwgYnVmLCBsZW4sIHNldF9uZl9jYWxsX2lwdGFibGVzKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihuZl9jYWxsX2lwdGFibGVzLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgc2hvd19uZl9jYWxsX2lwdGFibGVzLCBzdG9yZV9uZl9jYWxsX2lwdGFibGVzKTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19uZl9jYWxsX2lwNnRhYmxlcygKKwlzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHRvX2JyaWRnZShkKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgYnItPm5mX2NhbGxfaXA2dGFibGVzKTsKK30KKworc3RhdGljIGludCBzZXRfbmZfY2FsbF9pcDZ0YWJsZXMoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlici0+bmZfY2FsbF9pcDZ0YWJsZXMgPSB2YWwgPyB0cnVlIDogZmFsc2U7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX25mX2NhbGxfaXA2dGFibGVzKAorCXN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCisJc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gc3RvcmVfYnJpZGdlX3Bhcm0oZCwgYnVmLCBsZW4sIHNldF9uZl9jYWxsX2lwNnRhYmxlcyk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIobmZfY2FsbF9pcDZ0YWJsZXMsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICBzaG93X25mX2NhbGxfaXA2dGFibGVzLCBzdG9yZV9uZl9jYWxsX2lwNnRhYmxlcyk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbmZfY2FsbF9hcnB0YWJsZXMoCisJc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSB0b19icmlkZ2UoZCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGJyLT5uZl9jYWxsX2FycHRhYmxlcyk7Cit9CisKK3N0YXRpYyBpbnQgc2V0X25mX2NhbGxfYXJwdGFibGVzKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJYnItPm5mX2NhbGxfYXJwdGFibGVzID0gdmFsID8gdHJ1ZSA6IGZhbHNlOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9uZl9jYWxsX2FycHRhYmxlcygKKwlzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLAorCXNpemVfdCBsZW4pCit7CisJcmV0dXJuIHN0b3JlX2JyaWRnZV9wYXJtKGQsIGJ1ZiwgbGVuLCBzZXRfbmZfY2FsbF9hcnB0YWJsZXMpOworfQorc3RhdGljIERFVklDRV9BVFRSKG5mX2NhbGxfYXJwdGFibGVzLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgc2hvd19uZl9jYWxsX2FycHRhYmxlcywgc3RvcmVfbmZfY2FsbF9hcnB0YWJsZXMpOworI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpicmlkZ2VfYXR0cnNbXSA9IHsKIAkmZGV2X2F0dHJfZm9yd2FyZF9kZWxheS5hdHRyLApAQCAtNjQ1LDYgKzcxMiwxMSBAQAogCSZkZXZfYXR0cl9tdWx0aWNhc3RfcXVlcnlfcmVzcG9uc2VfaW50ZXJ2YWwuYXR0ciwKIAkmZGV2X2F0dHJfbXVsdGljYXN0X3N0YXJ0dXBfcXVlcnlfaW50ZXJ2YWwuYXR0ciwKICNlbmRpZgorI2lmZGVmIENPTkZJR19CUklER0VfTkVURklMVEVSCisJJmRldl9hdHRyX25mX2NhbGxfaXB0YWJsZXMuYXR0ciwKKwkmZGV2X2F0dHJfbmZfY2FsbF9pcDZ0YWJsZXMuYXR0ciwKKwkmZGV2X2F0dHJfbmZfY2FsbF9hcnB0YWJsZXMuYXR0ciwKKyNlbmRpZgogCU5VTEwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9yZWRpcmVjdC5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3JlZGlyZWN0LmMKaW5kZXggOWUxOTE2Ni4uNDY2MjRiYiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3JlZGlyZWN0LmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3JlZGlyZWN0LmMKQEAgLTI0LDggKzI0LDkgQEAKIAkJcmV0dXJuIEVCVF9EUk9QOwogCiAJaWYgKHBhci0+aG9va251bSAhPSBORl9CUl9CUk9VVElORykKKwkJLyogcmN1X3JlYWRfbG9jaygpZWQgYnkgbmZfaG9va19zbG93ICovCiAJCW1lbWNweShldGhfaGRyKHNrYiktPmhfZGVzdCwKLQkJICAgICAgIHBhci0+aW4tPmJyX3BvcnQtPmJyLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJCSAgICAgICBicl9wb3J0X2dldF9yY3UocGFyLT5pbiktPmJyLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAJZWxzZQogCQltZW1jcHkoZXRoX2hkcihza2IpLT5oX2Rlc3QsIHBhci0+aW4tPmRldl9hZGRyLCBFVEhfQUxFTik7CiAJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3Vsb2cuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF91bG9nLmMKaW5kZXggYWUzYzdjZS4uMjYzNzdlOSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3Vsb2cuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfdWxvZy5jCkBAIC0xNzcsOCArMTc3LDkgQEAKIAlpZiAoaW4pIHsKIAkJc3RyY3B5KHBtLT5waHlzaW5kZXYsIGluLT5uYW1lKTsKIAkJLyogSWYgaW4gaXNuJ3QgYSBicmlkZ2UsIHRoZW4gcGh5c2luZGV2PT1pbmRldiAqLwotCQlpZiAoaW4tPmJyX3BvcnQpCi0JCQlzdHJjcHkocG0tPmluZGV2LCBpbi0+YnJfcG9ydC0+YnItPmRldi0+bmFtZSk7CisJCWlmIChicl9wb3J0X2V4aXN0cyhpbikpCisJCQkvKiByY3VfcmVhZF9sb2NrKCllZCBieSBuZl9ob29rX3Nsb3cgKi8KKwkJCXN0cmNweShwbS0+aW5kZXYsIGJyX3BvcnRfZ2V0X3JjdShpbiktPmJyLT5kZXYtPm5hbWUpOwogCQllbHNlCiAJCQlzdHJjcHkocG0tPmluZGV2LCBpbi0+bmFtZSk7CiAJfSBlbHNlCkBAIC0xODcsNyArMTg4LDggQEAKIAlpZiAob3V0KSB7CiAJCS8qIElmIG91dCBleGlzdHMsIHRoZW4gb3V0IGlzIGEgYnJpZGdlIHBvcnQgKi8KIAkJc3RyY3B5KHBtLT5waHlzb3V0ZGV2LCBvdXQtPm5hbWUpOwotCQlzdHJjcHkocG0tPm91dGRldiwgb3V0LT5icl9wb3J0LT5ici0+ZGV2LT5uYW1lKTsKKwkJLyogcmN1X3JlYWRfbG9jaygpZWQgYnkgbmZfaG9va19zbG93ICovCisJCXN0cmNweShwbS0+b3V0ZGV2LCBicl9wb3J0X2dldF9yY3Uob3V0KS0+YnItPmRldi0+bmFtZSk7CiAJfSBlbHNlCiAJCXBtLT5vdXRkZXZbMF0gPSBwbS0+cGh5c291dGRldlswXSA9ICdcMCc7CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCmluZGV4IDU5Y2EwMGUuLmJjYzEwMmUgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYwpAQCAtMTQwLDExICsxNDAsMTQgQEAKIAkJcmV0dXJuIDE7CiAJaWYgKEZXSU5WMihlYnRfZGV2X2NoZWNrKGUtPm91dCwgb3V0KSwgRUJUX0lPVVQpKQogCQlyZXR1cm4gMTsKLQlpZiAoKCFpbiB8fCAhaW4tPmJyX3BvcnQpID8gMCA6IEZXSU5WMihlYnRfZGV2X2NoZWNrKAotCSAgIGUtPmxvZ2ljYWxfaW4sIGluLT5icl9wb3J0LT5ici0+ZGV2KSwgRUJUX0lMT0dJQ0FMSU4pKQorCS8qIHJjdV9yZWFkX2xvY2soKWVkIGJ5IG5mX2hvb2tfc2xvdyAqLworCWlmIChpbiAmJiBicl9wb3J0X2V4aXN0cyhpbikgJiYKKwkgICAgRldJTlYyKGVidF9kZXZfY2hlY2soZS0+bG9naWNhbF9pbiwgYnJfcG9ydF9nZXRfcmN1KGluKS0+YnItPmRldiksCisJCSAgIEVCVF9JTE9HSUNBTElOKSkKIAkJcmV0dXJuIDE7Ci0JaWYgKCghb3V0IHx8ICFvdXQtPmJyX3BvcnQpID8gMCA6IEZXSU5WMihlYnRfZGV2X2NoZWNrKAotCSAgIGUtPmxvZ2ljYWxfb3V0LCBvdXQtPmJyX3BvcnQtPmJyLT5kZXYpLCBFQlRfSUxPR0lDQUxPVVQpKQorCWlmIChvdXQgJiYgYnJfcG9ydF9leGlzdHMob3V0KSAmJgorCSAgICBGV0lOVjIoZWJ0X2Rldl9jaGVjayhlLT5sb2dpY2FsX291dCwgYnJfcG9ydF9nZXRfcmN1KG91dCktPmJyLT5kZXYpLAorCQkgICBFQlRfSUxPR0lDQUxPVVQpKQogCQlyZXR1cm4gMTsKIAogCWlmIChlLT5iaXRtYXNrICYgRUJUX1NPVVJDRU1BQykgewpkaWZmIC0tZ2l0IGEvbmV0L2NhaWYvS2NvbmZpZyBiL25ldC9jYWlmL0tjb25maWcKaW5kZXggZWQ2NTE3OC4uNTI5NzUwZCAxMDA2NDQKLS0tIGEvbmV0L2NhaWYvS2NvbmZpZworKysgYi9uZXQvY2FpZi9LY29uZmlnCkBAIC0yMSwxOSArMjEsMTggQEAKIAlTZWUgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2NhaWYgZm9yIGEgZnVydGhlciBleHBsYW5hdGlvbiBvbiBob3cgdG8KIAl1c2UgYW5kIGNvbmZpZ3VyZSBDQUlGLgogCi1pZiBDQUlGCi0KIGNvbmZpZyAgQ0FJRl9ERUJVRwogCWJvb2wgIkVuYWJsZSBEZWJ1ZyIKKwlkZXBlbmRzIG9uIENBSUYKIAlkZWZhdWx0IG4KIAktLS0gaGVscCAtLS0KIAlFbmFibGUgdGhlIGluY2x1c2lvbiBvZiBkZWJ1ZyBjb2RlIGluIHRoZSBDQUlGIHN0YWNrLgogCUJlIGF3YXJlIHRoYXQgZG9pbmcgdGhpcyB3aWxsIGltcGFjdCBwZXJmb3JtYW5jZS4KIAlJZiB1bnN1cmUgc2F5IE4uCiAKLQogY29uZmlnIENBSUZfTkVUREVWCiAJdHJpc3RhdGUgIkNBSUYgR1BSUyBOZXR3b3JrIGRldmljZSIKKwlkZXBlbmRzIG9uIENBSUYKIAlkZWZhdWx0IENBSUYKIAktLS1oZWxwLS0tCiAJU2F5IFkgaWYgeW91IHdpbGwgYmUgdXNpbmcgYSBDQUlGIGJhc2VkIEdQUlMgbmV0d29yayBkZXZpY2UuCkBAIC00MSw1ICs0MCwzIEBACiAJSWYgeW91IHNlbGVjdCB0byBidWlsZCBpdCBhcyBhIGJ1aWx0LWluIHRoZW4gdGhlIG1haW4gQ0FJRiBkZXZpY2UgbXVzdAogCWFsc28gYmUgYSBidWlsdC1pbi4KIAlJZiB1bnN1cmUgc2F5IFkuCi0KLWVuZGlmCmRpZmYgLS1naXQgYS9uZXQvY2FpZi9NYWtlZmlsZSBiL25ldC9jYWlmL01ha2VmaWxlCmluZGV4IDM0ODUyYWYuLmY4NzQ4MWYgMTAwNjQ0Ci0tLSBhL25ldC9jYWlmL01ha2VmaWxlCisrKyBiL25ldC9jYWlmL01ha2VmaWxlCkBAIC0xLDIzICsxLDEzIEBACi1pZmVxICgkKENPTkZJR19DQUlGX0RFQlVHKSwxKQotQ0FJRl9EQkdfRkxBR1MgOj0gLURERUJVRworaWZlcSAoJChDT05GSUdfQ0FJRl9ERUJVRykseSkKK0VYVFJBX0NGTEFHUyArPSAtRERFQlVHCiBlbmRpZgogCi1jY2ZsYWdzLXkgOj0gJChDQUlGX0ZMQUdTKSAkKENBSUZfREJHX0ZMQUdTKQotCiBjYWlmLW9ianMgOj0gY2FpZl9kZXYubyBcCiAJY2ZjbmZnLm8gY2ZtdXhsLm8gY2ZjdHJsLm8gIFwKIAljZmZybWwubyBjZnZlaWwubyBjZmRiZ2wub1wKIAljZnNlcmwubyBjZmRnbWwubyAgXAogCWNmcmZtbC5vIGNmdmlkbC5vIGNmdXRpbGwubyBcCiAJY2ZzcnZsLm8gY2Zwa3Rfc2tidWZmLm8gY2FpZl9jb25maWdfdXRpbC5vCi1jbGVhbi1kaXJzOj0gLnRtcF92ZXJzaW9ucwotCi1jbGVhbi1maWxlczo9IFwKLQlNb2R1bGUuc3ltdmVycyBcCi0JbW9kdWxlcy5vcmRlciBcCi0JKi5jbWQgXAotCSoubyBcCi0JKn4KIAogb2JqLSQoQ09ORklHX0NBSUYpICs9IGNhaWYubwogb2JqLSQoQ09ORklHX0NBSUZfTkVUREVWKSArPSBjaG5sX25ldC5vCmRpZmYgLS1naXQgYS9uZXQvY2FpZi9jYWlmX2NvbmZpZ191dGlsLmMgYi9uZXQvY2FpZi9jYWlmX2NvbmZpZ191dGlsLmMKaW5kZXggNmYzNjU4MC4uNzZhZTY4MyAxMDA2NDQKLS0tIGEvbmV0L2NhaWYvY2FpZl9jb25maWdfdXRpbC5jCisrKyBiL25ldC9jYWlmL2NhaWZfY29uZmlnX3V0aWwuYwpAQCAtODAsNiArODAsMTEgQEAKIAkJICAgICAgIGwtPnUudXRpbGl0eS5wYXJhbWxlbik7CiAKIAkJYnJlYWs7CisJY2FzZSBDQUlGUFJPVE9fREVCVUc6CisJCWwtPmxpbmt0eXBlID0gQ0ZDVFJMX1NSVl9EQkc7CisJCWwtPmVuZHBvaW50ID0gcy0+c29ja2FkZHIudS5kYmcuc2VydmljZTsKKwkJbC0+Y2h0eXBlID0gcy0+c29ja2FkZHIudS5kYmcudHlwZTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2NhaWYvY2FpZl9kZXYuYyBiL25ldC9jYWlmL2NhaWZfZGV2LmMKaW5kZXggZTJiODZmMS4uMGI1ODZlOSAxMDA2NDQKLS0tIGEvbmV0L2NhaWYvY2FpZl9kZXYuYworKysgYi9uZXQvY2FpZi9jYWlmX2Rldi5jCkBAIC0yNTUsNyArMjU1LDcgQEAKIAkJCXByZWYgPSBDRlBIWVBSRUZfSElHSF9CVzsKIAkJCWJyZWFrOwogCQl9Ci0KKwkJZGV2X2hvbGQoZGV2KTsKIAkJY2ZjbmZnX2FkZF9waHlfbGF5ZXIoZ2V0X2NhaWZfY29uZigpLAogCQkJCSAgICAgcGh5X3R5cGUsCiAJCQkJICAgICBkZXYsCkBAIC0yODUsNiArMjg1LDcgQEAKIAkJY2FpZmQtPmxheWVyLnVwLT5jdHJsY21kKGNhaWZkLT5sYXllci51cCwKIAkJCQkJIF9DQUlGX0NUUkxDTURfUEhZSUZfRE9XTl9JTkQsCiAJCQkJCSBjYWlmZC0+bGF5ZXIuaWQpOworCQltaWdodF9zbGVlcCgpOwogCQlyZXMgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChjYWlmZC0+ZXZlbnQsCiAJCQkJCWF0b21pY19yZWFkKCZjYWlmZC0+aW5fdXNlKSA9PSAwLAogCQkJCQlUSU1FT1VUKTsKQEAgLTMwMCw2ICszMDEsNyBAQAogCQkJCSAgICJVbnJlZ2lzdGVyaW5nIGFuIGFjdGl2ZSBDQUlGIGRldmljZTogJXNcbiIsCiAJCQkJICAgX19mdW5jX18sIGRldi0+bmFtZSk7CiAJCWNmY25mZ19kZWxfcGh5X2xheWVyKGdldF9jYWlmX2NvbmYoKSwgJmNhaWZkLT5sYXllcik7CisJCWRldl9wdXQoZGV2KTsKIAkJYXRvbWljX3NldCgmY2FpZmQtPnN0YXRlLCB3aGF0KTsKIAkJYnJlYWs7CiAKQEAgLTMyNiw3ICszMjgsOCBAQAogRVhQT1JUX1NZTUJPTChnZXRfY2FpZl9jb25mKTsKIAogaW50IGNhaWZfY29ubmVjdF9jbGllbnQoc3RydWN0IGNhaWZfY29ubmVjdF9yZXF1ZXN0ICpjb25uX3JlcSwKLQkJCSAgIHN0cnVjdCBjZmxheWVyICpjbGllbnRfbGF5ZXIpCisJCQlzdHJ1Y3QgY2ZsYXllciAqY2xpZW50X2xheWVyLCBpbnQgKmlmaW5kZXgsCisJCQlpbnQgKmhlYWRyb29tLCBpbnQgKnRhaWxyb29tKQogewogCXN0cnVjdCBjZmN0cmxfbGlua19wYXJhbSBwYXJhbTsKIAlpbnQgcmV0OwpAQCAtMzM0LDggKzMzNyw5IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAkvKiBIb29rIHVwIHRoZSBhZGFwdGF0aW9uIGxheWVyLiAqLwotCXJldHVybiBjZmNuZmdfYWRkX2FkYXB0YXRpb25fbGF5ZXIoZ2V0X2NhaWZfY29uZigpLAotCQkJCQkJJnBhcmFtLCBjbGllbnRfbGF5ZXIpOworCXJldHVybiBjZmNuZmdfYWRkX2FkYXB0YXRpb25fbGF5ZXIoZ2V0X2NhaWZfY29uZigpLCAmcGFyYW0sCisJCQkJCWNsaWVudF9sYXllciwgaWZpbmRleCwKKwkJCQkJaGVhZHJvb20sIHRhaWxyb29tKTsKIH0KIEVYUE9SVF9TWU1CT0woY2FpZl9jb25uZWN0X2NsaWVudCk7CiAKZGlmZiAtLWdpdCBhL25ldC9jYWlmL2NhaWZfc29ja2V0LmMgYi9uZXQvY2FpZi9jYWlmX3NvY2tldC5jCmluZGV4IDNkMGUwOTUuLjhjZTkwNDcgMTAwNjQ0Ci0tLSBhL25ldC9jYWlmL2NhaWZfc29ja2V0LmMKKysrIGIvbmV0L2NhaWYvY2FpZl9zb2NrZXQuYwpAQCAtMjgsOCArMjgsOCBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX05FVFBST1RPKEFGX0NBSUYpOwogCi0jZGVmaW5lIENBSUZfREVGX1NOREJVRiAoQ0FJRl9NQVhfUEFZTE9BRF9TSVpFKjEwKQotI2RlZmluZSBDQUlGX0RFRl9SQ1ZCVUYgKENBSUZfTUFYX1BBWUxPQURfU0laRSoxMDApCisjZGVmaW5lIENBSUZfREVGX1NOREJVRiAoNDA5NioxMCkKKyNkZWZpbmUgQ0FJRl9ERUZfUkNWQlVGICg0MDk2KjEwMCkKIAogLyoKICAqIENBSUYgc3RhdGUgaXMgcmUtdXNpbmcgdGhlIFRDUCBzb2NrZXQgc3RhdGVzLgpAQCAtNzYsNiArNzYsNyBAQAogCXN0cnVjdCBjYWlmX2Nvbm5lY3RfcmVxdWVzdCBjb25uX3JlcTsKIAlzdHJ1Y3QgbXV0ZXggcmVhZGxvY2s7CiAJc3RydWN0IGRlbnRyeSAqZGVidWdmc19zb2NrZXRfZGlyOworCWludCBoZWFkcm9vbSwgdGFpbHJvb20sIG1heGZyYW1lOwogfTsKIAogc3RhdGljIGludCByeF9mbG93X2lzX29uKHN0cnVjdCBjYWlmc29jayAqY2Zfc2spCkBAIC01OTQsMjcgKzU5NSwzMiBAQAogCQlnb3RvIGVycjsKIAlub2Jsb2NrID0gbXNnLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQ7CiAKLQlidWZmZXJfc2l6ZSA9IGxlbiArIENBSUZfTkVFREVEX0hFQURST09NICsgQ0FJRl9ORUVERURfVEFJTFJPT007Ci0KLQlyZXQgPSAtRU1TR1NJWkU7Ci0JaWYgKGJ1ZmZlcl9zaXplID4gQ0FJRl9NQVhfUEFZTE9BRF9TSVpFKQotCQlnb3RvIGVycjsKLQogCXRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgbm9ibG9jayk7CiAJdGltZW8gPSBjYWlmX3dhaXRfZm9yX2Zsb3dfb24oY29udGFpbmVyX29mKHNrLCBzdHJ1Y3QgY2FpZnNvY2ssIHNrKSwKIAkJCQkxLCB0aW1lbywgJnJldCk7CiAKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKIAlyZXQgPSAtRVBJUEU7CiAJaWYgKGNmX3NrLT5zay5za19zdGF0ZSAhPSBDQUlGX0NPTk5FQ1RFRCB8fAogCQlzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHwKIAkJKHNrLT5za19zaHV0ZG93biAmIFJDVl9TSFVURE9XTikpCiAJCWdvdG8gZXJyOwogCisJLyogRXJyb3IgaWYgdHJ5aW5nIHRvIHdyaXRlIG1vcmUgdGhhbiBtYXhpbXVtIGZyYW1lIHNpemUuICovCisJcmV0ID0gLUVNU0dTSVpFOworCWlmIChsZW4gPiBjZl9zay0+bWF4ZnJhbWUgJiYgY2Zfc2stPnNrLnNrX3Byb3RvY29sICE9IENBSUZQUk9UT19SRk0pCisJCWdvdG8gZXJyOworCisJYnVmZmVyX3NpemUgPSBsZW4gKyBjZl9zay0+aGVhZHJvb20gKyBjZl9zay0+dGFpbHJvb207CisKIAlyZXQgPSAtRU5PTUVNOwogCXNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2Ioc2ssIGJ1ZmZlcl9zaXplLCBub2Jsb2NrLCAmcmV0KTsKLQlpZiAoIXNrYikKKworCWlmICghc2tiIHx8IHNrYl90YWlscm9vbShza2IpIDwgYnVmZmVyX3NpemUpCiAJCWdvdG8gZXJyOwotCXNrYl9yZXNlcnZlKHNrYiwgQ0FJRl9ORUVERURfSEVBRFJPT00pOworCisJc2tiX3Jlc2VydmUoc2tiLCBjZl9zay0+aGVhZHJvb20pOwogCiAJcmV0ID0gbWVtY3B5X2Zyb21pb3ZlYyhza2JfcHV0KHNrYiwgbGVuKSwgbXNnLT5tc2dfaW92LCBsZW4pOwogCkBAIC02NDUsNyArNjUxLDYgQEAKIAlsb25nIHRpbWVvOwogCiAJZXJyID0gLUVPUE5PVFNVUFA7Ci0KIAlpZiAodW5saWtlbHkobXNnLT5tc2dfZmxhZ3MmTVNHX09PQikpCiAJCWdvdG8gb3V0X2VycjsKIApAQCAtNjYyLDggKzY2Nyw4IEBACiAKIAkJc2l6ZSA9IGxlbi1zZW50OwogCi0JCWlmIChzaXplID4gQ0FJRl9NQVhfUEFZTE9BRF9TSVpFKQotCQkJc2l6ZSA9IENBSUZfTUFYX1BBWUxPQURfU0laRTsKKwkJaWYgKHNpemUgPiBjZl9zay0+bWF4ZnJhbWUpCisJCQlzaXplID0gY2Zfc2stPm1heGZyYW1lOwogCiAJCS8qIElmIHNpemUgaXMgbW9yZSB0aGFuIGhhbGYgb2Ygc25kYnVmLCBjaG9wIHVwIG1lc3NhZ2UgKi8KIAkJaWYgKHNpemUgPiAoKHNrLT5za19zbmRidWYgPj4gMSkgLSA2NCkpCkBAIC02NzMsMTQgKzY3OCwxNCBAQAogCQkJc2l6ZSA9IFNLQl9NQVhfQUxMT0M7CiAKIAkJc2tiID0gc29ja19hbGxvY19zZW5kX3NrYihzaywKLQkJCQkJc2l6ZSArIENBSUZfTkVFREVEX0hFQURST09NCi0JCQkJCSsgQ0FJRl9ORUVERURfVEFJTFJPT00sCisJCQkJCXNpemUgKyBjZl9zay0+aGVhZHJvb20gKworCQkJCQljZl9zay0+dGFpbHJvb20sCiAJCQkJCW1zZy0+bXNnX2ZsYWdzJk1TR19ET05UV0FJVCwKIAkJCQkJJmVycik7CiAJCWlmIChza2IgPT0gTlVMTCkKIAkJCWdvdG8gb3V0X2VycjsKIAotCQlza2JfcmVzZXJ2ZShza2IsIENBSUZfTkVFREVEX0hFQURST09NKTsKKwkJc2tiX3Jlc2VydmUoc2tiLCBjZl9zay0+aGVhZHJvb20pOwogCQkvKgogCQkgKglJZiB5b3UgcGFzcyB0d28gdmFsdWVzIHRvIHRoZSBzb2NrX2FsbG9jX3NlbmRfc2tiCiAJCSAqCWl0IHRyaWVzIHRvIGdyYWIgdGhlIGxhcmdlIGJ1ZmZlciB3aXRoIEdGUF9OT0ZTCkBAIC04MjEsMTcgKzgyNiwxNSBAQAogCXN0cnVjdCBjYWlmc29jayAqY2Zfc2sgPSBjb250YWluZXJfb2Yoc2ssIHN0cnVjdCBjYWlmc29jaywgc2spOwogCWxvbmcgdGltZW87CiAJaW50IGVycjsKKwlpbnQgaWZpbmRleCwgaGVhZHJvb20sIHRhaWxyb29tOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisKIAlsb2NrX3NvY2soc2spOwogCiAJZXJyID0gLUVBRk5PU1VQUE9SVDsKIAlpZiAodWFkZHItPnNhX2ZhbWlseSAhPSBBRl9DQUlGKQogCQlnb3RvIG91dDsKIAotCWVyciA9IC1FU09DS1ROT1NVUFBPUlQ7Ci0JaWYgKHVubGlrZWx5KCEoc2stPnNrX3R5cGUgPT0gU09DS19TVFJFQU0gJiYKLQkJICAgICAgIGNmX3NrLT5zay5za19wcm90b2NvbCA9PSBDQUlGUFJPVE9fQVQpICYmCi0JCSAgICAgICBzay0+c2tfdHlwZSAhPSBTT0NLX1NFUVBBQ0tFVCkpCi0JCWdvdG8gb3V0OwogCXN3aXRjaCAoc29jay0+c3RhdGUpIHsKIAljYXNlIFNTX1VOQ09OTkVDVEVEOgogCQkvKiBOb3JtYWwgY2FzZSwgYSBmcmVzaCBjb25uZWN0ICovCkBAIC04NzQsOCArODc3LDcgQEAKIAlza19zdHJlYW1fa2lsbF9xdWV1ZXMoJmNmX3NrLT5zayk7CiAKIAllcnIgPSAtRUlOVkFMOwotCWlmIChhZGRyX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2NhaWYpIHx8Ci0JCSF1YWRkcikKKwlpZiAoYWRkcl9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jYWlmKSkKIAkJZ290byBvdXQ7CiAKIAltZW1jcHkoJmNmX3NrLT5jb25uX3JlcS5zb2NrYWRkciwgdWFkZHIsCkBAIC04ODgsMTIgKzg5MCwyMyBAQAogCWRiZnNfYXRvbWljX2luYygmY250Lm51bV9jb25uZWN0X3JlcSk7CiAJY2Zfc2stPmxheWVyLnJlY2VpdmUgPSBjYWlmX3NrdHJlY3ZfY2I7CiAJZXJyID0gY2FpZl9jb25uZWN0X2NsaWVudCgmY2Zfc2stPmNvbm5fcmVxLAotCQkJCSZjZl9zay0+bGF5ZXIpOworCQkJCSZjZl9zay0+bGF5ZXIsICZpZmluZGV4LCAmaGVhZHJvb20sICZ0YWlscm9vbSk7CiAJaWYgKGVyciA8IDApIHsKIAkJY2Zfc2stPnNrLnNrX3NvY2tldC0+c3RhdGUgPSBTU19VTkNPTk5FQ1RFRDsKIAkJY2Zfc2stPnNrLnNrX3N0YXRlID0gQ0FJRl9ESVNDT05ORUNURUQ7CiAJCWdvdG8gb3V0OwogCX0KKwlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwgaWZpbmRleCk7CisJY2Zfc2stPmhlYWRyb29tID0gTExfUkVTRVJWRURfU1BBQ0VfRVhUUkEoZGV2LCBoZWFkcm9vbSk7CisJY2Zfc2stPnRhaWxyb29tID0gdGFpbHJvb207CisJY2Zfc2stPm1heGZyYW1lID0gZGV2LT5tdHUgLSAoaGVhZHJvb20gKyB0YWlscm9vbSk7CisJZGV2X3B1dChkZXYpOworCWlmIChjZl9zay0+bWF4ZnJhbWUgPCAxKSB7CisJCXByX3dhcm5pbmcoIkNBSUY6ICVzKCk6IENBSUYgSW50ZXJmYWNlIE1UVSB0b28gc21hbGwgKCVkKVxuIiwKKwkJCV9fZnVuY19fLCBkZXYtPm10dSk7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KIAogCWVyciA9IC1FSU5QUk9HUkVTUzsKIHdhaXRfY29ubmVjdDoKZGlmZiAtLWdpdCBhL25ldC9jYWlmL2NmY25mZy5jIGIvbmV0L2NhaWYvY2ZjbmZnLmMKaW5kZXggZGY0M2YyNi4uMWMyOTE4OSAxMDA2NDQKLS0tIGEvbmV0L2NhaWYvY2ZjbmZnLmMKKysrIGIvbmV0L2NhaWYvY2ZjbmZnLmMKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPG5ldC9jYWlmL2NhaWZfbGF5ZXIuaD4KICNpbmNsdWRlIDxuZXQvY2FpZi9jZnBrdC5oPgogI2luY2x1ZGUgPG5ldC9jYWlmL2NmY25mZy5oPgpAQCAtMjIsNiArMjMsNyBAQAogI2RlZmluZSBQSFlfTkFNRV9MRU4gMjAKIAogI2RlZmluZSBjb250YWluZXJfb2JqKGxheXIpIGNvbnRhaW5lcl9vZihsYXlyLCBzdHJ1Y3QgY2ZjbmZnLCBsYXllcikKKyNkZWZpbmUgUkZNX0ZSQUdNRU5UX1NJWkUgNDAzMAogCiAvKiBJbmZvcm1hdGlvbiBhYm91dCBDQUlGIHBoeXNpY2FsIGludGVyZmFjZXMgaGVsZCBieSBDb25maWcgTW9kdWxlIGluIG9yZGVyCiAgKiB0byBtYW5hZ2UgcGh5c2ljYWwgaW50ZXJmYWNlcwpAQCAtNDEsNiArNDMsMTUgQEAKIAogCS8qIEluZm9ybWF0aW9uIGFib3V0IHRoZSBwaHlzaWNhbCBkZXZpY2UgKi8KIAlzdHJ1Y3QgZGV2X2luZm8gZGV2X2luZm87CisKKwkvKiBJbnRlcmZhY2UgaW5kZXggKi8KKwlpbnQgaWZpbmRleDsKKworCS8qIFVzZSBTdGFydCBvZiBmcmFtZSBleHRlbnNpb24gKi8KKwlib29sIHVzZV9zdHg7CisKKwkvKiBVc2UgU3RhcnQgb2YgZnJhbWUgY2hlY2tzdW0gKi8KKwlib29sIHVzZV9mY3M7CiB9OwogCiBzdHJ1Y3QgY2ZjbmZnIHsKQEAgLTI0OCw5ICsyNTksMjAgQEAKIHsKIH0KIAoraW50IHByb3RvaGVhZFtDRkNUUkxfU1JWX01BU0tdID0geworCVtDRkNUUkxfU1JWX1ZFSV0gPSA0LAorCVtDRkNUUkxfU1JWX0RBVEFHUkFNXSA9IDcsCisJW0NGQ1RSTF9TUlZfVVRJTF0gPSA0LAorCVtDRkNUUkxfU1JWX1JGTV0gPSAzLAorCVtDRkNUUkxfU1JWX0RCR10gPSAzLAorfTsKKwogaW50IGNmY25mZ19hZGRfYWRhcHRhdGlvbl9sYXllcihzdHJ1Y3QgY2ZjbmZnICpjbmZnLAogCQkJCXN0cnVjdCBjZmN0cmxfbGlua19wYXJhbSAqcGFyYW0sCi0JCQkJc3RydWN0IGNmbGF5ZXIgKmFkYXBfbGF5ZXIpCisJCQkJc3RydWN0IGNmbGF5ZXIgKmFkYXBfbGF5ZXIsCisJCQkJaW50ICppZmluZGV4LAorCQkJCWludCAqcHJvdG9faGVhZCwKKwkJCQlpbnQgKnByb3RvX3RhaWwpCiB7CiAJc3RydWN0IGNmbGF5ZXIgKmZybWw7CiAJaWYgKGFkYXBfbGF5ZXIgPT0gTlVMTCkgewpAQCAtMjc2LDYgKzI5OCwxNCBAQAogCQkgICAgIHBhcmFtLT5waHlpZCk7CiAJY2FpZl9hc3NlcnQoY25mZy0+cGh5X2xheWVyc1twYXJhbS0+cGh5aWRdLnBoeV9sYXllci0+aWQgPT0KIAkJICAgICBwYXJhbS0+cGh5aWQpOworCisJKmlmaW5kZXggPSBjbmZnLT5waHlfbGF5ZXJzW3BhcmFtLT5waHlpZF0uaWZpbmRleDsKKwkqcHJvdG9faGVhZCA9CisJCXByb3RvaGVhZFtwYXJhbS0+bGlua3R5cGVdKworCQkoY25mZy0+cGh5X2xheWVyc1twYXJhbS0+cGh5aWRdLnVzZV9zdHggPyAxIDogMCk7CisKKwkqcHJvdG9fdGFpbCA9IDI7CisKIAkvKiBGSVhNRTogRU5VTUVSQVRFIElOSVRJQUxMWSBXSEVOIEFDVElWQVRJTkcgUEhZU0lDQUwgSU5URVJGQUNFICovCiAJY2ZjdHJsX2VudW1fcmVxKGNuZmctPmN0cmwsIHBhcmFtLT5waHlpZCk7CiAJcmV0dXJuIGNmY3RybF9saW5rdXBfcmVxdWVzdChjbmZnLT5jdHJsLCBwYXJhbSwgYWRhcF9sYXllcik7CkBAIC0yOTcsNiArMzI3LDggQEAKIAlzdHJ1Y3QgY2ZjbmZnICpjbmZnID0gY29udGFpbmVyX29iaihsYXllcik7CiAJc3RydWN0IGNmbGF5ZXIgKnNlcnZpY2VsID0gTlVMTDsKIAlzdHJ1Y3QgY2ZjbmZnX3BoeWluZm8gKnBoeWluZm87CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwogCWlmIChhZGFwdF9sYXllciA9PSBOVUxMKSB7CiAJCXByX2RlYnVnKCJDQUlGOiAlcygpOiBsaW5rIHNldHVwIHJlc3BvbnNlICIKIAkJCQkiYnV0IG5vIGNsaWVudCBleGlzdCwgc2VuZCBsaW5rZG93biBiYWNrXG4iLApAQCAtMzA4LDE5ICszNDAsMTUgQEAKIAljYWlmX2Fzc2VydChjbmZnICE9IE5VTEwpOwogCWNhaWZfYXNzZXJ0KHBoeWlkICE9IDApOwogCXBoeWluZm8gPSAmY25mZy0+cGh5X2xheWVyc1twaHlpZF07Ci0JY2FpZl9hc3NlcnQocGh5aW5mbyAhPSBOVUxMKTsKIAljYWlmX2Fzc2VydChwaHlpbmZvLT5pZCA9PSBwaHlpZCk7CiAJY2FpZl9hc3NlcnQocGh5aW5mby0+cGh5X2xheWVyICE9IE5VTEwpOwogCWNhaWZfYXNzZXJ0KHBoeWluZm8tPnBoeV9sYXllci0+aWQgPT0gcGh5aWQpOwogCi0JaWYgKHBoeWluZm8gIT0gTlVMTCAmJgotCSAgICBwaHlpbmZvLT5waHlfcmVmX2NvdW50KysgPT0gMCAmJgotCSAgICBwaHlpbmZvLT5waHlfbGF5ZXIgIT0gTlVMTCAmJgorCXBoeWluZm8tPnBoeV9yZWZfY291bnQrKzsKKwlpZiAocGh5aW5mby0+cGh5X3JlZl9jb3VudCA9PSAxICYmCiAJICAgIHBoeWluZm8tPnBoeV9sYXllci0+bW9kZW1jbWQgIT0gTlVMTCkgewotCQljYWlmX2Fzc2VydChwaHlpbmZvLT5waHlfbGF5ZXItPmlkID09IHBoeWlkKTsKIAkJcGh5aW5mby0+cGh5X2xheWVyLT5tb2RlbWNtZChwaHlpbmZvLT5waHlfbGF5ZXIsCiAJCQkJCSAgICAgX0NBSUZfTU9ERU1DTURfUEhZSUZfVVNFRlVMTCk7Ci0KIAl9CiAJYWRhcHRfbGF5ZXItPmlkID0gY2hhbm5lbF9pZDsKIApAQCAtMzMyLDcgKzM2MCw5IEBACiAJCXNlcnZpY2VsID0gY2ZkZ21sX2NyZWF0ZShjaGFubmVsX2lkLCAmcGh5aW5mby0+ZGV2X2luZm8pOwogCQlicmVhazsKIAljYXNlIENGQ1RSTF9TUlZfUkZNOgotCQlzZXJ2aWNlbCA9IGNmcmZtbF9jcmVhdGUoY2hhbm5lbF9pZCwgJnBoeWluZm8tPmRldl9pbmZvKTsKKwkJbmV0ZGV2ID0gcGh5aW5mby0+ZGV2X2luZm8uZGV2OworCQlzZXJ2aWNlbCA9IGNmcmZtbF9jcmVhdGUoY2hhbm5lbF9pZCwgJnBoeWluZm8tPmRldl9pbmZvLAorCQkJCQkJbmV0ZGV2LT5tdHUpOwogCQlicmVhazsKIAljYXNlIENGQ1RSTF9TUlZfVVRJTDoKIAkJc2VydmljZWwgPSBjZnV0aWxsX2NyZWF0ZShjaGFubmVsX2lkLCAmcGh5aW5mby0+ZGV2X2luZm8pOwpAQCAtMzYzLDggKzM5Myw4IEBACiAKIHZvaWQKIGNmY25mZ19hZGRfcGh5X2xheWVyKHN0cnVjdCBjZmNuZmcgKmNuZmcsIGVudW0gY2ZjbmZnX3BoeV90eXBlIHBoeV90eXBlLAotCQkgICAgIHZvaWQgKmRldiwgc3RydWN0IGNmbGF5ZXIgKnBoeV9sYXllciwgdTE2ICpwaHlpZCwKLQkJICAgICBlbnVtIGNmY25mZ19waHlfcHJlZmVyZW5jZSBwcmVmLAorCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjZmxheWVyICpwaHlfbGF5ZXIsCisJCSAgICAgdTE2ICpwaHlpZCwgZW51bSBjZmNuZmdfcGh5X3ByZWZlcmVuY2UgcHJlZiwKIAkJICAgICBib29sIGZjcywgYm9vbCBzdHgpCiB7CiAJc3RydWN0IGNmbGF5ZXIgKmZybWw7CkBAIC00MTgsNiArNDQ4LDEwIEBACiAJY25mZy0+cGh5X2xheWVyc1sqcGh5aWRdLmRldl9pbmZvLmRldiA9IGRldjsKIAljbmZnLT5waHlfbGF5ZXJzWypwaHlpZF0ucGh5X2xheWVyID0gcGh5X2xheWVyOwogCWNuZmctPnBoeV9sYXllcnNbKnBoeWlkXS5waHlfcmVmX2NvdW50ID0gMDsKKwljbmZnLT5waHlfbGF5ZXJzWypwaHlpZF0uaWZpbmRleCA9IGRldi0+aWZpbmRleDsKKwljbmZnLT5waHlfbGF5ZXJzWypwaHlpZF0udXNlX3N0eCA9IHN0eDsKKwljbmZnLT5waHlfbGF5ZXJzWypwaHlpZF0udXNlX2ZjcyA9IGZjczsKKwogCXBoeV9sYXllci0+dHlwZSA9IHBoeV90eXBlOwogCWZybWwgPSBjZmZybWxfY3JlYXRlKCpwaHlpZCwgZmNzKTsKIAlpZiAoIWZybWwpIHsKZGlmZiAtLWdpdCBhL25ldC9jYWlmL2NmY3RybC5jIGIvbmV0L2NhaWYvY2ZjdHJsLmMKaW5kZXggZmNmZGE5OC4uNTYzMTQ1ZiAxMDA2NDQKLS0tIGEvbmV0L2NhaWYvY2ZjdHJsLmMKKysrIGIvbmV0L2NhaWYvY2ZjdHJsLmMKQEAgLTE5LDcgKzE5LDcgQEAKICNpZmRlZiBDQUlGX05PX0xPT1AKIHN0YXRpYyBpbnQgaGFuZGxlX2xvb3Aoc3RydWN0IGNmY3RybCAqY3RybCwKIAkJCSAgICAgIGludCBjbWQsIHN0cnVjdCBjZnBrdCAqcGt0KXsKLQlyZXR1cm4gQ0FJRl9GQUlMVVJFOworCXJldHVybiAtMTsKIH0KICNlbHNlCiBzdGF0aWMgaW50IGhhbmRsZV9sb29wKHN0cnVjdCBjZmN0cmwgKmN0cmwsCkBAIC00Myw3ICs0Myw3IEBACiAJbWVtc2V0KCZkZXZfaW5mbywgMCwgc2l6ZW9mKGRldl9pbmZvKSk7CiAJZGV2X2luZm8uaWQgPSAweGZmOwogCW1lbXNldCh0aGlzLCAwLCBzaXplb2YoKnRoaXMpKTsKLQljZnNydmxfaW5pdCgmdGhpcy0+c2VydiwgMCwgJmRldl9pbmZvKTsKKwljZnNydmxfaW5pdCgmdGhpcy0+c2VydiwgMCwgJmRldl9pbmZvLCBmYWxzZSk7CiAJYXRvbWljX3NldCgmdGhpcy0+cmVxX3NlcV9ubywgMSk7CiAJYXRvbWljX3NldCgmdGhpcy0+cnNwX3NlcV9ubywgMSk7CiAJdGhpcy0+c2Vydi5sYXllci5yZWNlaXZlID0gY2ZjdHJsX3JlY3Y7CkBAIC0zOTUsNyArMzk1LDcgQEAKIAljbWQgPSBjbWRyc3AgJiBDRkNUUkxfQ01EX01BU0s7CiAJaWYgKGNtZCAhPSBDRkNUUkxfQ01EX0xJTktfRVJSCiAJICAgICYmIENGQ1RSTF9SU1BfQklUICE9IChDRkNUUkxfUlNQX0JJVCAmIGNtZHJzcCkpIHsKLQkJaWYgKGhhbmRsZV9sb29wKGNmY3RybCwgY21kLCBwa3QpID09IENBSUZfRkFJTFVSRSkKKwkJaWYgKGhhbmRsZV9sb29wKGNmY3RybCwgY21kLCBwa3QpICE9IDApCiAJCQljbWRyc3AgfD0gQ0ZDVFJMX0VSUl9CSVQ7CiAJfQogCkBAIC02NDcsNiArNjQ3LDYgQEAKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9Ci0JcmV0dXJuIENBSUZfU1VDQ0VTUzsKKwlyZXR1cm4gMDsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2NhaWYvY2ZkYmdsLmMgYi9uZXQvY2FpZi9jZmRiZ2wuYwppbmRleCBhYjZiNmRjLi42NzY2NDhjIDEwMDY0NAotLS0gYS9uZXQvY2FpZi9jZmRiZ2wuYworKysgYi9uZXQvY2FpZi9jZmRiZ2wuYwpAQCAtMjIsNyArMjIsNyBAQAogCX0KIAljYWlmX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3QgY2ZzcnZsLCBsYXllcikgPT0gMCk7CiAJbWVtc2V0KGRiZywgMCwgc2l6ZW9mKHN0cnVjdCBjZnNydmwpKTsKLQljZnNydmxfaW5pdChkYmcsIGNoYW5uZWxfaWQsIGRldl9pbmZvKTsKKwljZnNydmxfaW5pdChkYmcsIGNoYW5uZWxfaWQsIGRldl9pbmZvLCBmYWxzZSk7CiAJZGJnLT5sYXllci5yZWNlaXZlID0gY2ZkYmdsX3JlY2VpdmU7CiAJZGJnLT5sYXllci50cmFuc21pdCA9IGNmZGJnbF90cmFuc21pdDsKIAlzbnByaW50ZihkYmctPmxheWVyLm5hbWUsIENBSUZfTEFZRVJfTkFNRV9TWiAtIDEsICJkYmclZCIsIGNoYW5uZWxfaWQpOwpkaWZmIC0tZ2l0IGEvbmV0L2NhaWYvY2ZkZ21sLmMgYi9uZXQvY2FpZi9jZmRnbWwuYwppbmRleCA1MzE5NDg0Li5lZDlkNTNhIDEwMDY0NAotLS0gYS9uZXQvY2FpZi9jZmRnbWwuYworKysgYi9uZXQvY2FpZi9jZmRnbWwuYwpAQCAtMTcsNiArMTcsNyBAQAogI2RlZmluZSBER01fRkxPV19PRkYgMHg4MQogI2RlZmluZSBER01fRkxPV19PTiAgMHg4MAogI2RlZmluZSBER01fQ1RSTF9QS1RfU0laRSAxCisjZGVmaW5lIERHTV9NVFUgMTUwMAogCiBzdGF0aWMgaW50IGNmZGdtbF9yZWNlaXZlKHN0cnVjdCBjZmxheWVyICpsYXlyLCBzdHJ1Y3QgY2Zwa3QgKnBrdCk7CiBzdGF0aWMgaW50IGNmZGdtbF90cmFuc21pdChzdHJ1Y3QgY2ZsYXllciAqbGF5ciwgc3RydWN0IGNmcGt0ICpwa3QpOwpAQCAtMzAsNyArMzEsNyBAQAogCX0KIAljYWlmX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3QgY2ZzcnZsLCBsYXllcikgPT0gMCk7CiAJbWVtc2V0KGRnbSwgMCwgc2l6ZW9mKHN0cnVjdCBjZnNydmwpKTsKLQljZnNydmxfaW5pdChkZ20sIGNoYW5uZWxfaWQsIGRldl9pbmZvKTsKKwljZnNydmxfaW5pdChkZ20sIGNoYW5uZWxfaWQsIGRldl9pbmZvLCB0cnVlKTsKIAlkZ20tPmxheWVyLnJlY2VpdmUgPSBjZmRnbWxfcmVjZWl2ZTsKIAlkZ20tPmxheWVyLnRyYW5zbWl0ID0gY2ZkZ21sX3RyYW5zbWl0OwogCXNucHJpbnRmKGRnbS0+bGF5ZXIubmFtZSwgQ0FJRl9MQVlFUl9OQU1FX1NaIC0gMSwgImRnbSVkIiwgY2hhbm5lbF9pZCk7CkBAIC04OSw2ICs5MCwxMCBAQAogCWlmICghY2ZzcnZsX3JlYWR5KHNlcnZpY2UsICZyZXQpKQogCQlyZXR1cm4gcmV0OwogCisJLyogU1RFIE1vZGVtIGNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuIDE1MDAgYnl0ZXMgZGF0YWdyYW1zICovCisJaWYgKGNmcGt0X2dldGxlbihwa3QpID4gREdNX01UVSkKKwkJcmV0dXJuIC1FTVNHU0laRTsKKwogCWNmcGt0X2FkZF9oZWFkKHBrdCwgJnplcm8sIDQpOwogCiAJLyogQWRkIGluZm8gZm9yIE1VWC1sYXllciB0byByb3V0ZSB0aGUgcGFja2V0IG91dC4gKi8KZGlmZiAtLWdpdCBhL25ldC9jYWlmL2NmcGt0X3NrYnVmZi5jIGIvbmV0L2NhaWYvY2Zwa3Rfc2tidWZmLmMKaW5kZXggYTZmZGY4OS4uMDFmMjM4ZiAxMDA2NDQKLS0tIGEvbmV0L2NhaWYvY2Zwa3Rfc2tidWZmLmMKKysrIGIvbmV0L2NhaWYvY2Zwa3Rfc2tidWZmLmMKQEAgLTksOCArOSw4IEBACiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogI2luY2x1ZGUgPG5ldC9jYWlmL2NmcGt0Lmg+CiAKLSNkZWZpbmUgUEtUX1BSRUZJWCBDQUlGX05FRURFRF9IRUFEUk9PTQotI2RlZmluZSBQS1RfUE9TVEZJWCBDQUlGX05FRURFRF9UQUlMUk9PTQorI2RlZmluZSBQS1RfUFJFRklYICAxNgorI2RlZmluZSBQS1RfUE9TVEZJWCAyCiAjZGVmaW5lIFBLVF9MRU5fV0hFTl9FWFRFTkRJTkcgMTI4CiAjZGVmaW5lIFBLVF9FUlJPUihwa3QsIGVycm1zZykgZG8gewkgICBcCiAgICAgY2Zwa3RfcHJpdihwa3QpLT5lcnJvbm91cyA9IHRydWU7CSAgIFwKQEAgLTMzOCw3ICszMzgsNiBAQAogCXUxNiBkc3RsZW47CiAJdTE2IGNyZWF0ZWxlbjsKIAlpZiAodW5saWtlbHkoaXNfZXJyb25vdXMoZHN0cGt0KSB8fCBpc19lcnJvbm91cyhhZGRwa3QpKSkgewotCQljZnBrdF9kZXN0cm95KGFkZHBrdCk7CiAJCXJldHVybiBkc3Rwa3Q7CiAJfQogCWlmIChleHBlY3RsZW4gPiBhZGRsZW4pCmRpZmYgLS1naXQgYS9uZXQvY2FpZi9jZnJmbWwuYyBiL25ldC9jYWlmL2NmcmZtbC5jCmluZGV4IGZkMjdiMTcuLmViMTYwMjAgMTAwNjQ0Ci0tLSBhL25ldC9jYWlmL2NmcmZtbC5jCisrKyBiL25ldC9jYWlmL2NmcmZtbC5jCkBAIC03LDEwMiArNywzMDQgQEAKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvbGVfYnl0ZXNoaWZ0Lmg+CiAjaW5jbHVkZSA8bmV0L2NhaWYvY2FpZl9sYXllci5oPgogI2luY2x1ZGUgPG5ldC9jYWlmL2Nmc3J2bC5oPgogI2luY2x1ZGUgPG5ldC9jYWlmL2NmcGt0Lmg+CiAKLSNkZWZpbmUgY29udGFpbmVyX29iaihsYXlyKSBjb250YWluZXJfb2YobGF5ciwgc3RydWN0IGNmc3J2bCwgbGF5ZXIpCi0KKyNkZWZpbmUgY29udGFpbmVyX29iaihsYXlyKSBjb250YWluZXJfb2YobGF5ciwgc3RydWN0IGNmcmZtbCwgc2Vydi5sYXllcikKICNkZWZpbmUgUkZNX1NFR01FTlRBVElPTl9CSVQgMHgwMQotI2RlZmluZSBSRk1fUEFZTE9BRCAgMHgwMAotI2RlZmluZSBSRk1fQ01EX0JJVCAgMHg4MAotI2RlZmluZSBSRk1fRkxPV19PRkYgMHg4MQotI2RlZmluZSBSRk1fRkxPV19PTiAgMHg4MAotI2RlZmluZSBSRk1fU0VUX1BJTiAgMHg4MgotI2RlZmluZSBSRk1fQ1RSTF9QS1RfU0laRSAxCisjZGVmaW5lIFJGTV9IRUFEX1NJWkUgNwogCiBzdGF0aWMgaW50IGNmcmZtbF9yZWNlaXZlKHN0cnVjdCBjZmxheWVyICpsYXlyLCBzdHJ1Y3QgY2Zwa3QgKnBrdCk7CiBzdGF0aWMgaW50IGNmcmZtbF90cmFuc21pdChzdHJ1Y3QgY2ZsYXllciAqbGF5ciwgc3RydWN0IGNmcGt0ICpwa3QpOwotc3RhdGljIGludCBjZnNlcnZsX21vZGVtY21kKHN0cnVjdCBjZmxheWVyICpsYXlyLCBlbnVtIGNhaWZfbW9kZW1jbWQgY3RybCk7CiAKLXN0cnVjdCBjZmxheWVyICpjZnJmbWxfY3JlYXRlKHU4IGNoYW5uZWxfaWQsIHN0cnVjdCBkZXZfaW5mbyAqZGV2X2luZm8pCitzdHJ1Y3QgY2ZyZm1sIHsKKwlzdHJ1Y3QgY2ZzcnZsIHNlcnY7CisJc3RydWN0IGNmcGt0ICppbmNvbXBsZXRlX2ZybTsKKwlpbnQgZnJhZ21lbnRfc2l6ZTsKKwl1OCAgc2VnaGVhZFs2XTsKKwl1MTYgcGR1X3NpemU7CisJLyogUHJvdGVjdHMgc2VyaWFsaXplZCBwcm9jZXNzaW5nIG9mIHBhY2tldHMgKi8KKwlzcGlubG9ja190IHN5bmM7Cit9OworCitzdGF0aWMgdm9pZCBjZnJmbWxfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKLQlzdHJ1Y3QgY2ZzcnZsICpyZm0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2ZzcnZsKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFyZm0pIHsKKwlzdHJ1Y3QgY2ZzcnZsICpzcnZsID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBjZnNydmwsIHJlZik7CisJc3RydWN0IGNmcmZtbCAqcmZtbCA9IGNvbnRhaW5lcl9vYmooJnNydmwtPmxheWVyKTsKKworCWlmIChyZm1sLT5pbmNvbXBsZXRlX2ZybSkKKwkJY2Zwa3RfZGVzdHJveShyZm1sLT5pbmNvbXBsZXRlX2ZybSk7CisKKwlrZnJlZShzcnZsKTsKK30KKworc3RydWN0IGNmbGF5ZXIgKmNmcmZtbF9jcmVhdGUodTggY2hhbm5lbF9pZCwgc3RydWN0IGRldl9pbmZvICpkZXZfaW5mbywKKwkJCQkJaW50IG10dV9zaXplKQoreworCWludCB0bXA7CisJc3RydWN0IGNmcmZtbCAqdGhpcyA9CisJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjZnJmbWwpLCBHRlBfQVRPTUlDKTsKKworCWlmICghdGhpcykgewogCQlwcl93YXJuaW5nKCJDQUlGOiAlcygpOiBPdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBOVUxMOwogCX0KLQljYWlmX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3QgY2ZzcnZsLCBsYXllcikgPT0gMCk7Ci0JbWVtc2V0KHJmbSwgMCwgc2l6ZW9mKHN0cnVjdCBjZnNydmwpKTsKLQljZnNydmxfaW5pdChyZm0sIGNoYW5uZWxfaWQsIGRldl9pbmZvKTsKLQlyZm0tPmxheWVyLm1vZGVtY21kID0gY2ZzZXJ2bF9tb2RlbWNtZDsKLQlyZm0tPmxheWVyLnJlY2VpdmUgPSBjZnJmbWxfcmVjZWl2ZTsKLQlyZm0tPmxheWVyLnRyYW5zbWl0ID0gY2ZyZm1sX3RyYW5zbWl0OwotCXNucHJpbnRmKHJmbS0+bGF5ZXIubmFtZSwgQ0FJRl9MQVlFUl9OQU1FX1NaLCAicmZtJWQiLCBjaGFubmVsX2lkKTsKLQlyZXR1cm4gJnJmbS0+bGF5ZXI7CisKKwljZnNydmxfaW5pdCgmdGhpcy0+c2VydiwgY2hhbm5lbF9pZCwgZGV2X2luZm8sIGZhbHNlKTsKKwl0aGlzLT5zZXJ2LnJlbGVhc2UgPSBjZnJmbWxfcmVsZWFzZTsKKwl0aGlzLT5zZXJ2LmxheWVyLnJlY2VpdmUgPSBjZnJmbWxfcmVjZWl2ZTsKKwl0aGlzLT5zZXJ2LmxheWVyLnRyYW5zbWl0ID0gY2ZyZm1sX3RyYW5zbWl0OworCisJLyogUm91bmQgZG93biB0byBjbG9zZXN0IG11bHRpcGxlIG9mIDE2ICovCisJdG1wID0gKG10dV9zaXplIC0gUkZNX0hFQURfU0laRSAtIDYpIC8gMTY7CisJdG1wICo9IDE2OworCisJdGhpcy0+ZnJhZ21lbnRfc2l6ZSA9IHRtcDsKKwlzcGluX2xvY2tfaW5pdCgmdGhpcy0+c3luYyk7CisJc25wcmludGYodGhpcy0+c2Vydi5sYXllci5uYW1lLCBDQUlGX0xBWUVSX05BTUVfU1osCisJCSJyZm0lZCIsIGNoYW5uZWxfaWQpOworCisJcmV0dXJuICZ0aGlzLT5zZXJ2LmxheWVyOwogfQogCi1zdGF0aWMgaW50IGNmc2VydmxfbW9kZW1jbWQoc3RydWN0IGNmbGF5ZXIgKmxheXIsIGVudW0gY2FpZl9tb2RlbWNtZCBjdHJsKQorc3RhdGljIHN0cnVjdCBjZnBrdCAqcmZtX2FwcGVuZChzdHJ1Y3QgY2ZyZm1sICpyZm1sLCBjaGFyICpzZWdoZWFkLAorCQkJc3RydWN0IGNmcGt0ICpwa3QsIGludCAqZXJyKQogewotICAgICAgIHJldHVybiAtRVBST1RPOworCXN0cnVjdCBjZnBrdCAqdG1wcGt0OworCSplcnIgPSAtRVBST1RPOworCS8qIG4tdGggYnV0IG5vdCBsYXN0IHNlZ21lbnQgKi8KKworCWlmIChjZnBrdF9leHRyX2hlYWQocGt0LCBzZWdoZWFkLCA2KSA8IDApCisJCXJldHVybiBOVUxMOworCisJLyogVmVyaWZ5IGNvcnJlY3QgaGVhZGVyICovCisJaWYgKG1lbWNtcChzZWdoZWFkLCByZm1sLT5zZWdoZWFkLCA2KSAhPSAwKQorCQlyZXR1cm4gTlVMTDsKKworCXRtcHBrdCA9IGNmcGt0X2FwcGVuZChyZm1sLT5pbmNvbXBsZXRlX2ZybSwgcGt0LAorCQkJcmZtbC0+cGR1X3NpemUgKyBSRk1fSEVBRF9TSVpFKTsKKworCS8qIElmIGNmcGt0X2FwcGVuZCBmYWlsZXMgaW5wdXQgcGt0cyBhcmUgbm90IGZyZWVkICovCisJKmVyciA9IC1FTk9NRU07CisJaWYgKHRtcHBrdCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCSplcnIgPSAwOworCXJldHVybiB0bXBwa3Q7CiB9CiAKIHN0YXRpYyBpbnQgY2ZyZm1sX3JlY2VpdmUoc3RydWN0IGNmbGF5ZXIgKmxheXIsIHN0cnVjdCBjZnBrdCAqcGt0KQogewogCXU4IHRtcDsKIAlib29sIHNlZ21lbnRlZDsKLQlpbnQgcmV0OworCWludCBlcnI7CisJdTggc2VnaGVhZFs2XTsKKwlzdHJ1Y3QgY2ZyZm1sICpyZm1sOworCXN0cnVjdCBjZnBrdCAqdG1wcGt0ID0gTlVMTDsKKwogCWNhaWZfYXNzZXJ0KGxheXItPnVwICE9IE5VTEwpOwogCWNhaWZfYXNzZXJ0KGxheXItPnJlY2VpdmUgIT0gTlVMTCk7CisJcmZtbCA9IGNvbnRhaW5lcl9vYmoobGF5cik7CisJc3Bpbl9sb2NrKCZyZm1sLT5zeW5jKTsKIAotCS8qCi0JICogUkZNIGlzIHRha2luZyBjYXJlIG9mIHNlZ21lbnRhdGlvbiBhbmQgc3RyaXBwaW5nIG9mCi0JICogc2VnbWVudGF0aW9uIGJpdC4KLQkgKi8KLQlpZiAoY2Zwa3RfZXh0cl9oZWFkKHBrdCwgJnRtcCwgMSkgPCAwKSB7Ci0JCXByX2VycigiQ0FJRjogJXMoKTogUGFja2V0IGlzIGVycm9uZW91cyFcbiIsIF9fZnVuY19fKTsKLQkJY2Zwa3RfZGVzdHJveShwa3QpOwotCQlyZXR1cm4gLUVQUk9UTzsKLQl9CisJZXJyID0gLUVQUk9UTzsKKwlpZiAoY2Zwa3RfZXh0cl9oZWFkKHBrdCwgJnRtcCwgMSkgPCAwKQorCQlnb3RvIG91dDsKIAlzZWdtZW50ZWQgPSB0bXAgJiBSRk1fU0VHTUVOVEFUSU9OX0JJVDsKLQljYWlmX2Fzc2VydCghc2VnbWVudGVkKTsKIAotCXJldCA9IGxheXItPnVwLT5yZWNlaXZlKGxheXItPnVwLCBwa3QpOwotCXJldHVybiByZXQ7CisJaWYgKHNlZ21lbnRlZCkgeworCQlpZiAocmZtbC0+aW5jb21wbGV0ZV9mcm0gPT0gTlVMTCkgeworCQkJLyogSW5pdGlhbCBTZWdtZW50ICovCisJCQlpZiAoY2Zwa3RfcGVla19oZWFkKHBrdCwgcmZtbC0+c2VnaGVhZCwgNikgPCAwKQorCQkJCWdvdG8gb3V0OworCisJCQlyZm1sLT5wZHVfc2l6ZSA9IGdldF91bmFsaWduZWRfbGUxNihyZm1sLT5zZWdoZWFkKzQpOworCisJCQlpZiAoY2Zwa3RfZXJyb25lb3VzKHBrdCkpCisJCQkJZ290byBvdXQ7CisJCQlyZm1sLT5pbmNvbXBsZXRlX2ZybSA9IHBrdDsKKwkJCXBrdCA9IE5VTEw7CisJCX0gZWxzZSB7CisKKwkJCXRtcHBrdCA9IHJmbV9hcHBlbmQocmZtbCwgc2VnaGVhZCwgcGt0LCAmZXJyKTsKKwkJCWlmICh0bXBwa3QgPT0gTlVMTCkKKwkJCQlnb3RvIG91dDsKKworCQkJaWYgKGNmcGt0X2Vycm9uZW91cyh0bXBwa3QpKQorCQkJCWdvdG8gb3V0OworCisJCQlyZm1sLT5pbmNvbXBsZXRlX2ZybSA9IHRtcHBrdDsKKworCisJCQlpZiAoY2Zwa3RfZXJyb25lb3VzKHRtcHBrdCkpCisJCQkJZ290byBvdXQ7CisJCX0KKwkJZXJyID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHJmbWwtPmluY29tcGxldGVfZnJtKSB7CisKKwkJLyogTGFzdCBTZWdtZW50ICovCisJCXRtcHBrdCA9IHJmbV9hcHBlbmQocmZtbCwgc2VnaGVhZCwgcGt0LCAmZXJyKTsKKwkJaWYgKHRtcHBrdCA9PSBOVUxMKQorCQkJZ290byBvdXQ7CisKKwkJaWYgKGNmcGt0X2Vycm9uZW91cyh0bXBwa3QpKQorCQkJZ290byBvdXQ7CisKKwkJcmZtbC0+aW5jb21wbGV0ZV9mcm0gPSBOVUxMOworCQlwa3QgPSB0bXBwa3Q7CisJCXRtcHBrdCA9IE5VTEw7CisKKwkJLyogVmVyaWZ5IHRoYXQgbGVuZ3RoIGlzIGNvcnJlY3QgKi8KKwkJZXJyID0gRVBST1RPOworCQlpZiAocmZtbC0+cGR1X3NpemUgIT0gY2Zwa3RfZ2V0bGVuKHBrdCkgLSBSRk1fSEVBRF9TSVpFICsgMSkKKwkJCWdvdG8gb3V0OworCX0KKworCWVyciA9IHJmbWwtPnNlcnYubGF5ZXIudXAtPnJlY2VpdmUocmZtbC0+c2Vydi5sYXllci51cCwgcGt0KTsKKworb3V0OgorCisJaWYgKGVyciAhPSAwKSB7CisJCWlmICh0bXBwa3QpCisJCQljZnBrdF9kZXN0cm95KHRtcHBrdCk7CisJCWlmIChwa3QpCisJCQljZnBrdF9kZXN0cm95KHBrdCk7CisJCWlmIChyZm1sLT5pbmNvbXBsZXRlX2ZybSkKKwkJCWNmcGt0X2Rlc3Ryb3kocmZtbC0+aW5jb21wbGV0ZV9mcm0pOworCQlyZm1sLT5pbmNvbXBsZXRlX2ZybSA9IE5VTEw7CisKKwkJcHJfaW5mbygiQ0FJRjogJXMoKTogIgorCQkJCSJDb25uZWN0aW9uIGVycm9yICVkIHRyaWdnZXJlZCBvbiBSRk0gbGlua1xuIiwKKwkJCQlfX2Z1bmNfXywgZXJyKTsKKworCQkvKiBUcmlnZ2VyIGNvbm5lY3Rpb24gZXJyb3IgdXBvbiBmYWlsdXJlLiovCisJCWxheXItPnVwLT5jdHJsY21kKGxheXItPnVwLCBDQUlGX0NUUkxDTURfUkVNT1RFX1NIVVRET1dOX0lORCwKKwkJCQkJcmZtbC0+c2Vydi5kZXZfaW5mby5pZCk7CisJfQorCXNwaW5fdW5sb2NrKCZyZm1sLT5zeW5jKTsKKwlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGNmcmZtbF90cmFuc21pdChzdHJ1Y3QgY2ZsYXllciAqbGF5ciwgc3RydWN0IGNmcGt0ICpwa3QpCisKK3N0YXRpYyBpbnQgY2ZyZm1sX3RyYW5zbWl0X3NlZ21lbnQoc3RydWN0IGNmcmZtbCAqcmZtbCwgc3RydWN0IGNmcGt0ICpwa3QpCiB7Ci0JdTggdG1wID0gMDsKLQlpbnQgcmV0OwotCXN0cnVjdCBjZnNydmwgKnNlcnZpY2UgPSBjb250YWluZXJfb2JqKGxheXIpOwotCi0JY2FpZl9hc3NlcnQobGF5ci0+ZG4gIT0gTlVMTCk7Ci0JY2FpZl9hc3NlcnQobGF5ci0+ZG4tPnRyYW5zbWl0ICE9IE5VTEwpOwotCi0JaWYgKCFjZnNydmxfcmVhZHkoc2VydmljZSwgJnJldCkpCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAoY2Zwa3RfZ2V0bGVuKHBrdCkgPiBDQUlGX01BWF9QQVlMT0FEX1NJWkUpIHsKLQkJcHJfZXJyKCJDQUlGOiAlcygpOlBhY2tldCB0b28gbGFyZ2UgLSBzaXplPSVkXG4iLAotCQkJX19mdW5jX18sIGNmcGt0X2dldGxlbihwa3QpKTsKLQkJcmV0dXJuIC1FT1ZFUkZMT1c7Ci0JfQotCWlmIChjZnBrdF9hZGRfaGVhZChwa3QsICZ0bXAsIDEpIDwgMCkgewotCQlwcl9lcnIoIkNBSUY6ICVzKCk6IFBhY2tldCBpcyBlcnJvbmVvdXMhXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRVBST1RPOwotCX0KKwljYWlmX2Fzc2VydChjZnBrdF9nZXRsZW4ocGt0KSA+PSByZm1sLT5mcmFnbWVudF9zaXplKTsKIAogCS8qIEFkZCBpbmZvIGZvciBNVVgtbGF5ZXIgdG8gcm91dGUgdGhlIHBhY2tldCBvdXQuICovCi0JY2Zwa3RfaW5mbyhwa3QpLT5jaGFubmVsX2lkID0gc2VydmljZS0+bGF5ZXIuaWQ7CisJY2Zwa3RfaW5mbyhwa3QpLT5jaGFubmVsX2lkID0gcmZtbC0+c2Vydi5sYXllci5pZDsKKwogCS8qCiAJICogVG8gb3B0aW1pemUgYWxpZ25tZW50LCB3ZSBhZGQgdXAgdGhlIHNpemUgb2YgQ0FJRiBoZWFkZXIgYmVmb3JlCiAJICogcGF5bG9hZC4KIAkgKi8KLQljZnBrdF9pbmZvKHBrdCktPmhkcl9sZW4gPSAxOwotCWNmcGt0X2luZm8ocGt0KS0+ZGV2X2luZm8gPSAmc2VydmljZS0+ZGV2X2luZm87Ci0JcmV0ID0gbGF5ci0+ZG4tPnRyYW5zbWl0KGxheXItPmRuLCBwa3QpOwotCWlmIChyZXQgPCAwKQotCQljZnBrdF9leHRyX2hlYWQocGt0LCAmdG1wLCAxKTsKLQlyZXR1cm4gcmV0OworCWNmcGt0X2luZm8ocGt0KS0+aGRyX2xlbiA9IFJGTV9IRUFEX1NJWkU7CisJY2Zwa3RfaW5mbyhwa3QpLT5kZXZfaW5mbyA9ICZyZm1sLT5zZXJ2LmRldl9pbmZvOworCisJcmV0dXJuIHJmbWwtPnNlcnYubGF5ZXIuZG4tPnRyYW5zbWl0KHJmbWwtPnNlcnYubGF5ZXIuZG4sIHBrdCk7Cit9CisKK3N0YXRpYyBpbnQgY2ZyZm1sX3RyYW5zbWl0KHN0cnVjdCBjZmxheWVyICpsYXlyLCBzdHJ1Y3QgY2Zwa3QgKnBrdCkKK3sKKwlpbnQgZXJyOworCXU4IHNlZzsKKwl1OCBoZWFkWzZdOworCXN0cnVjdCBjZnBrdCAqcmVhcnBrdCA9IE5VTEw7CisJc3RydWN0IGNmcGt0ICpmcm9udHBrdCA9IHBrdDsKKwlzdHJ1Y3QgY2ZyZm1sICpyZm1sID0gY29udGFpbmVyX29iaihsYXlyKTsKKworCWNhaWZfYXNzZXJ0KGxheXItPmRuICE9IE5VTEwpOworCWNhaWZfYXNzZXJ0KGxheXItPmRuLT50cmFuc21pdCAhPSBOVUxMKTsKKworCWlmICghY2ZzcnZsX3JlYWR5KCZyZm1sLT5zZXJ2LCAmZXJyKSkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IC1FUFJPVE87CisJaWYgKGNmcGt0X2dldGxlbihwa3QpIDw9IFJGTV9IRUFEX1NJWkUtMSkKKwkJZ290byBvdXQ7CisKKwllcnIgPSAwOworCWlmIChjZnBrdF9nZXRsZW4ocGt0KSA+IHJmbWwtPmZyYWdtZW50X3NpemUgKyBSRk1fSEVBRF9TSVpFKQorCQllcnIgPSBjZnBrdF9wZWVrX2hlYWQocGt0LCBoZWFkLCA2KTsKKworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCXdoaWxlIChjZnBrdF9nZXRsZW4oZnJvbnRwa3QpID4gcmZtbC0+ZnJhZ21lbnRfc2l6ZSArIFJGTV9IRUFEX1NJWkUpIHsKKworCQlzZWcgPSAxOworCQllcnIgPSAtRVBST1RPOworCisJCWlmIChjZnBrdF9hZGRfaGVhZChmcm9udHBrdCwgJnNlZywgMSkgPCAwKQorCQkJZ290byBvdXQ7CisJCS8qCisJCSAqIE9uIE9PTSBlcnJvciBjZnBrdF9zcGxpdCByZXR1cm5zIE5VTEwuCisJCSAqCisJCSAqIE5PVEU6IFNlZ21lbnRlZCBwZHUgaXMgbm90IGNvcnJlY3RseSBhbGlnbmVkLgorCQkgKiBUaGlzIGhhcyBuZWdhdGl2ZSBwZXJmb3JtYW5jZSBpbXBhY3QuCisJCSAqLworCisJCXJlYXJwa3QgPSBjZnBrdF9zcGxpdChmcm9udHBrdCwgcmZtbC0+ZnJhZ21lbnRfc2l6ZSk7CisJCWlmIChyZWFycGt0ID09IE5VTEwpCisJCQlnb3RvIG91dDsKKworCQllcnIgPSBjZnJmbWxfdHJhbnNtaXRfc2VnbWVudChyZm1sLCBmcm9udHBrdCk7CisKKwkJaWYgKGVyciAhPSAwKQorCQkJZ290byBvdXQ7CisJCWZyb250cGt0ID0gcmVhcnBrdDsKKwkJcmVhcnBrdCA9IE5VTEw7CisKKwkJZXJyID0gLUVOT01FTTsKKwkJaWYgKGZyb250cGt0ID09IE5VTEwpCisJCQlnb3RvIG91dDsKKwkJZXJyID0gLUVQUk9UTzsKKwkJaWYgKGNmcGt0X2FkZF9oZWFkKGZyb250cGt0LCBoZWFkLCA2KSA8IDApCisJCQlnb3RvIG91dDsKKworCX0KKworCXNlZyA9IDA7CisJZXJyID0gLUVQUk9UTzsKKworCWlmIChjZnBrdF9hZGRfaGVhZChmcm9udHBrdCwgJnNlZywgMSkgPCAwKQorCQlnb3RvIG91dDsKKworCWVyciA9IGNmcmZtbF90cmFuc21pdF9zZWdtZW50KHJmbWwsIGZyb250cGt0KTsKKworCWZyb250cGt0ID0gTlVMTDsKK291dDoKKworCWlmIChlcnIgIT0gMCkgeworCQlwcl9pbmZvKCJDQUlGOiAlcygpOiAiCisJCQkJIkNvbm5lY3Rpb24gZXJyb3IgJWQgdHJpZ2dlcmVkIG9uIFJGTSBsaW5rXG4iLAorCQkJCV9fZnVuY19fLCBlcnIpOworCQkvKiBUcmlnZ2VyIGNvbm5lY3Rpb24gZXJyb3IgdXBvbiBmYWlsdXJlLiovCisKKwkJbGF5ci0+dXAtPmN0cmxjbWQobGF5ci0+dXAsIENBSUZfQ1RSTENNRF9SRU1PVEVfU0hVVERPV05fSU5ELAorCQkJCQlyZm1sLT5zZXJ2LmRldl9pbmZvLmlkKTsKKworCQlpZiAocmVhcnBrdCkKKwkJCWNmcGt0X2Rlc3Ryb3kocmVhcnBrdCk7CisKKwkJaWYgKGZyb250cGt0ICYmIGZyb250cGt0ICE9IHBrdCkgeworCisJCQljZnBrdF9kZXN0cm95KGZyb250cGt0KTsKKwkJCS8qCisJCQkgKiBTb2NrZXQgbGF5ZXIgd2lsbCBmcmVlIHRoZSBvcmlnaW5hbCBwYWNrZXQsCisJCQkgKiBidXQgdGhpcyBwYWNrZXQgbWF5IGFscmVhZHkgYmUgc2VudCBhbmQKKwkJCSAqIGZyZWVkLiBTbyB3ZSBoYXZlIHRvIHJldHVybiAwIGluIHRoaXMgY2FzZQorCQkJICogdG8gYXZvaWQgc29ja2V0IGxheWVyIHRvIHJlLWZyZWUgdGhpcyBwYWNrZXQuCisJCQkgKiBUaGUgcmV0dXJuIG9mIHNodXRkb3duIGluZGljYXRpb24gd2lsbAorCQkJICogY2F1c2UgY29ubmVjdGlvbiB0byBiZSBpbnZhbGlkYXRlZCBhbnlob3cuCisJCQkgKi8KKwkJCWVyciA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2NhaWYvY2ZzZXJsLmMgYi9uZXQvY2FpZi9jZnNlcmwuYwppbmRleCA5NjVjNWJhLi5hMTFmYmQ2IDEwMDY0NAotLS0gYS9uZXQvY2FpZi9jZnNlcmwuYworKysgYi9uZXQvY2FpZi9jZnNlcmwuYwpAQCAtMTQsNyArMTQsOCBAQAogI2RlZmluZSBjb250YWluZXJfb2JqKGxheXIpICgoc3RydWN0IGNmc2VybCAqKSBsYXlyKQogCiAjZGVmaW5lIENGU0VSTF9TVFggMHgwMgotI2RlZmluZSBDQUlGX01JTklVTV9QQUNLRVRfU0laRSA0CisjZGVmaW5lIFNFUklBTF9NSU5JVU1fUEFDS0VUX1NJWkUgNAorI2RlZmluZSBTRVJJQUxfTUFYX0ZSQU1FU0laRSA0MDk2CiBzdHJ1Y3QgY2ZzZXJsIHsKIAlzdHJ1Y3QgY2ZsYXllciBsYXllcjsKIAlzdHJ1Y3QgY2Zwa3QgKmluY29tcGxldGVfZnJtOwpAQCAtMTE5LDggKzEyMCw4IEBACiAJCS8qCiAJCSAqIEZyYW1lIGVycm9yIGhhbmRsaW5nCiAJCSAqLwotCQlpZiAoZXhwZWN0bGVuIDwgQ0FJRl9NSU5JVU1fUEFDS0VUX1NJWkUKLQkJICAgIHx8IGV4cGVjdGxlbiA+IENBSUZfTUFYX0ZSQU1FU0laRSkgeworCQlpZiAoZXhwZWN0bGVuIDwgU0VSSUFMX01JTklVTV9QQUNLRVRfU0laRQorCQkgICAgfHwgZXhwZWN0bGVuID4gU0VSSUFMX01BWF9GUkFNRVNJWkUpIHsKIAkJCWlmICghbGF5ci0+dXNlc3R4KSB7CiAJCQkJaWYgKHBrdCAhPSBOVUxMKQogCQkJCQljZnBrdF9kZXN0cm95KHBrdCk7CmRpZmYgLS1naXQgYS9uZXQvY2FpZi9jZnNydmwuYyBiL25ldC9jYWlmL2Nmc3J2bC5jCmluZGV4IDZlNWI3MDc5Li5mNDA5MzlhIDEwMDY0NAotLS0gYS9uZXQvY2FpZi9jZnNydmwuYworKysgYi9uZXQvY2FpZi9jZnNydmwuYwpAQCAtMjQsOCArMjQsMTAgQEAKIAkJCQlpbnQgcGh5aWQpCiB7CiAJc3RydWN0IGNmc3J2bCAqc2VydmljZSA9IGNvbnRhaW5lcl9vYmoobGF5cik7CisKIAljYWlmX2Fzc2VydChsYXlyLT51cCAhPSBOVUxMKTsKIAljYWlmX2Fzc2VydChsYXlyLT51cC0+Y3RybGNtZCAhPSBOVUxMKTsKKwogCXN3aXRjaCAoY3RybCkgewogCWNhc2UgQ0FJRl9DVFJMQ01EX0lOSVRfUlNQOgogCQlzZXJ2aWNlLT5vcGVuID0gdHJ1ZTsKQEAgLTg5LDkgKzkxLDE0IEBACiBzdGF0aWMgaW50IGNmc2VydmxfbW9kZW1jbWQoc3RydWN0IGNmbGF5ZXIgKmxheXIsIGVudW0gY2FpZl9tb2RlbWNtZCBjdHJsKQogewogCXN0cnVjdCBjZnNydmwgKnNlcnZpY2UgPSBjb250YWluZXJfb2JqKGxheXIpOworCiAJY2FpZl9hc3NlcnQobGF5ciAhPSBOVUxMKTsKIAljYWlmX2Fzc2VydChsYXlyLT5kbiAhPSBOVUxMKTsKIAljYWlmX2Fzc2VydChsYXlyLT5kbi0+dHJhbnNtaXQgIT0gTlVMTCk7CisKKwlpZiAoIXNlcnZpY2UtPnN1cHBvcnRzX2Zsb3djdHJsKQorCQlyZXR1cm4gMDsKKwogCXN3aXRjaCAoY3RybCkgewogCWNhc2UgQ0FJRl9NT0RFTUNNRF9GTE9XX09OX1JFUToKIAkJewpAQCAtMTUyLDkgKzE1OSwxNyBAQAogCWtmcmVlKGxheWVyKTsKIH0KIAordm9pZCBjZnNydmxfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgY2ZzcnZsICpzZXJ2aWNlID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBjZnNydmwsIHJlZik7CisJa2ZyZWUoc2VydmljZSk7Cit9CisKIHZvaWQgY2ZzcnZsX2luaXQoc3RydWN0IGNmc3J2bCAqc2VydmljZSwKLQkJIHU4IGNoYW5uZWxfaWQsCi0JCSBzdHJ1Y3QgZGV2X2luZm8gKmRldl9pbmZvKQorCQkJdTggY2hhbm5lbF9pZCwKKwkJCXN0cnVjdCBkZXZfaW5mbyAqZGV2X2luZm8sCisJCQlib29sIHN1cHBvcnRzX2Zsb3djdHJsCisJCQkpCiB7CiAJY2FpZl9hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IGNmc3J2bCwgbGF5ZXIpID09IDApOwogCXNlcnZpY2UtPm9wZW4gPSBmYWxzZTsKQEAgLTE2NCwxNCArMTc5LDExIEBACiAJc2VydmljZS0+bGF5ZXIuY3RybGNtZCA9IGNmc2VydmxfY3RybGNtZDsKIAlzZXJ2aWNlLT5sYXllci5tb2RlbWNtZCA9IGNmc2VydmxfbW9kZW1jbWQ7CiAJc2VydmljZS0+ZGV2X2luZm8gPSAqZGV2X2luZm87CisJc2VydmljZS0+c3VwcG9ydHNfZmxvd2N0cmwgPSBzdXBwb3J0c19mbG93Y3RybDsKKwlzZXJ2aWNlLT5yZWxlYXNlID0gY2ZzcnZsX3JlbGVhc2U7CiAJa3JlZl9pbml0KCZzZXJ2aWNlLT5yZWYpOwogfQogCi12b2lkIGNmc3J2bF9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQotewotCXN0cnVjdCBjZnNydmwgKnNlcnZpY2UgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGNmc3J2bCwgcmVmKTsKLQlrZnJlZShzZXJ2aWNlKTsKLX0KIAogYm9vbCBjZnNydmxfcmVhZHkoc3RydWN0IGNmc3J2bCAqc2VydmljZSwgaW50ICplcnIpCiB7CmRpZmYgLS1naXQgYS9uZXQvY2FpZi9jZnV0aWxsLmMgYi9uZXQvY2FpZi9jZnV0aWxsLmMKaW5kZXggNWZkMmM5ZS4uMDI3OTVhZiAxMDA2NDQKLS0tIGEvbmV0L2NhaWYvY2Z1dGlsbC5jCisrKyBiL25ldC9jYWlmL2NmdXRpbGwuYwpAQCAtMzEsNyArMzEsNyBAQAogCX0KIAljYWlmX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3QgY2ZzcnZsLCBsYXllcikgPT0gMCk7CiAJbWVtc2V0KHV0aWwsIDAsIHNpemVvZihzdHJ1Y3QgY2ZzcnZsKSk7Ci0JY2ZzcnZsX2luaXQodXRpbCwgY2hhbm5lbF9pZCwgZGV2X2luZm8pOworCWNmc3J2bF9pbml0KHV0aWwsIGNoYW5uZWxfaWQsIGRldl9pbmZvLCB0cnVlKTsKIAl1dGlsLT5sYXllci5yZWNlaXZlID0gY2Z1dGlsbF9yZWNlaXZlOwogCXV0aWwtPmxheWVyLnRyYW5zbWl0ID0gY2Z1dGlsbF90cmFuc21pdDsKIAlzbnByaW50Zih1dGlsLT5sYXllci5uYW1lLCBDQUlGX0xBWUVSX05BTUVfU1ogLSAxLCAidXRpbDEiKTsKQEAgLTkwLDEyICs5MCw2IEBACiAJaWYgKCFjZnNydmxfcmVhZHkoc2VydmljZSwgJnJldCkpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAoY2Zwa3RfZ2V0bGVuKHBrdCkgPiBDQUlGX01BWF9QQVlMT0FEX1NJWkUpIHsKLQkJcHJfZXJyKCJDQUlGOiAlcygpOiBwYWNrZXQgdG9vIGxhcmdlIHNpemU9JWRcbiIsCi0JCQlfX2Z1bmNfXywgY2Zwa3RfZ2V0bGVuKHBrdCkpOwotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQl9Ci0KIAljZnBrdF9hZGRfaGVhZChwa3QsICZ6ZXJvLCAxKTsKIAkvKiBBZGQgaW5mbyBmb3IgTVVYLWxheWVyIHRvIHJvdXRlIHRoZSBwYWNrZXQgb3V0LiAqLwogCWluZm8gPSBjZnBrdF9pbmZvKHBrdCk7CmRpZmYgLS1naXQgYS9uZXQvY2FpZi9jZnZlaWwuYyBiL25ldC9jYWlmL2NmdmVpbC5jCmluZGV4IGUwNGY3ZDkuLjc3Y2MwOWYgMTAwNjQ0Ci0tLSBhL25ldC9jYWlmL2NmdmVpbC5jCisrKyBiL25ldC9jYWlmL2NmdmVpbC5jCkBAIC0zMCw3ICszMCw3IEBACiAJfQogCWNhaWZfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCBjZnNydmwsIGxheWVyKSA9PSAwKTsKIAltZW1zZXQodmVpLCAwLCBzaXplb2Yoc3RydWN0IGNmc3J2bCkpOwotCWNmc3J2bF9pbml0KHZlaSwgY2hhbm5lbF9pZCwgZGV2X2luZm8pOworCWNmc3J2bF9pbml0KHZlaSwgY2hhbm5lbF9pZCwgZGV2X2luZm8sIHRydWUpOwogCXZlaS0+bGF5ZXIucmVjZWl2ZSA9IGNmdmVpX3JlY2VpdmU7CiAJdmVpLT5sYXllci50cmFuc21pdCA9IGNmdmVpX3RyYW5zbWl0OwogCXNucHJpbnRmKHZlaS0+bGF5ZXIubmFtZSwgQ0FJRl9MQVlFUl9OQU1FX1NaIC0gMSwgInZlaSVkIiwgY2hhbm5lbF9pZCk7CkBAIC04NCwxMSArODQsNiBAQAogCQlyZXR1cm4gcmV0OwogCWNhaWZfYXNzZXJ0KGxheXItPmRuICE9IE5VTEwpOwogCWNhaWZfYXNzZXJ0KGxheXItPmRuLT50cmFuc21pdCAhPSBOVUxMKTsKLQlpZiAoY2Zwa3RfZ2V0bGVuKHBrdCkgPiBDQUlGX01BWF9QQVlMT0FEX1NJWkUpIHsKLQkJcHJfd2FybmluZygiQ0FJRjogJXMoKTogUGFja2V0IHRvbyBsYXJnZSAtIHNpemU9JWRcbiIsCi0JCQkgICBfX2Z1bmNfXywgY2Zwa3RfZ2V0bGVuKHBrdCkpOwotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQl9CiAKIAlpZiAoY2Zwa3RfYWRkX2hlYWQocGt0LCAmdG1wLCAxKSA8IDApIHsKIAkJcHJfZXJyKCJDQUlGOiAlcygpOiBQYWNrZXQgaXMgZXJyb25lb3VzIVxuIiwgX19mdW5jX18pOwpkaWZmIC0tZ2l0IGEvbmV0L2NhaWYvY2Z2aWRsLmMgYi9uZXQvY2FpZi9jZnZpZGwuYwppbmRleCA4OWFkNGVhLi5hZGE2ZWUyIDEwMDY0NAotLS0gYS9uZXQvY2FpZi9jZnZpZGwuYworKysgYi9uZXQvY2FpZi9jZnZpZGwuYwpAQCAtMjcsNyArMjcsNyBAQAogCWNhaWZfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCBjZnNydmwsIGxheWVyKSA9PSAwKTsKIAogCW1lbXNldCh2aWQsIDAsIHNpemVvZihzdHJ1Y3QgY2ZzcnZsKSk7Ci0JY2ZzcnZsX2luaXQodmlkLCBjaGFubmVsX2lkLCBkZXZfaW5mbyk7CisJY2ZzcnZsX2luaXQodmlkLCBjaGFubmVsX2lkLCBkZXZfaW5mbywgZmFsc2UpOwogCXZpZC0+bGF5ZXIucmVjZWl2ZSA9IGNmdmlkbF9yZWNlaXZlOwogCXZpZC0+bGF5ZXIudHJhbnNtaXQgPSBjZnZpZGxfdHJhbnNtaXQ7CiAJc25wcmludGYodmlkLT5sYXllci5uYW1lLCBDQUlGX0xBWUVSX05BTUVfU1ogLSAxLCAidmlkMSIpOwpkaWZmIC0tZ2l0IGEvbmV0L2NhaWYvY2hubF9uZXQuYyBiL25ldC9jYWlmL2NobmxfbmV0LmMKaW5kZXggNjEwOTY2YS4uNDI5M2UxOSAxMDA2NDQKLS0tIGEvbmV0L2NhaWYvY2hubF9uZXQuYworKysgYi9uZXQvY2FpZi9jaG5sX25ldC5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bmV0L2NhaWYvY2FpZl9kZXYuaD4KIAogLyogR1BSUyBQRFAgY29ubmVjdGlvbiBoYXMgTVRVIHRvIDE1MDAgKi8KLSNkZWZpbmUgU0laRV9NVFUgMTUwMAorI2RlZmluZSBHUFJTX1BEUF9NVFUgMTUwMAogLyogNSBzZWMuIGNvbm5lY3QgdGltZW91dCAqLwogI2RlZmluZSBDT05ORUNUX1RJTUVPVVQgKDUgKiBIWikKICNkZWZpbmUgQ0FJRl9ORVRfREVGQVVMVF9RVUVVRV9MRU4gNTAwCkBAIC0yMzIsNiArMjMyLDggQEAKIHsKIAlzdHJ1Y3QgY2hubF9uZXQgKnByaXYgPSBOVUxMOwogCWludCByZXN1bHQgPSAtMTsKKwlpbnQgbGxpZmluZGV4LCBoZWFkcm9vbSwgdGFpbHJvb20sIG10dTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbGxkZXY7CiAJQVNTRVJUX1JUTkwoKTsKIAlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpZiAoIXByaXYpIHsKQEAgLTI0MSw0MSArMjQzLDg4IEBACiAKIAlpZiAocHJpdi0+c3RhdGUgIT0gQ0FJRl9DT05ORUNUSU5HKSB7CiAJCXByaXYtPnN0YXRlID0gQ0FJRl9DT05ORUNUSU5HOwotCQlyZXN1bHQgPSBjYWlmX2Nvbm5lY3RfY2xpZW50KCZwcml2LT5jb25uX3JlcSwgJnByaXYtPmNobmwpOworCQlyZXN1bHQgPSBjYWlmX2Nvbm5lY3RfY2xpZW50KCZwcml2LT5jb25uX3JlcSwgJnByaXYtPmNobmwsCisJCQkJCSZsbGlmaW5kZXgsICZoZWFkcm9vbSwgJnRhaWxyb29tKTsKIAkJaWYgKHJlc3VsdCAhPSAwKSB7Ci0JCQkJcHJpdi0+c3RhdGUgPSBDQUlGX0RJU0NPTk5FQ1RFRDsKIAkJCQlwcl9kZWJ1ZygiQ0FJRjogJXMoKTogZXJyOiAiCiAJCQkJCSJVbmFibGUgdG8gcmVnaXN0ZXIgYW5kIG9wZW4gZGV2aWNlLCIKIAkJCQkJIiBFcnI6JWRcbiIsCiAJCQkJCV9fZnVuY19fLAogCQkJCQlyZXN1bHQpOwotCQkJCXJldHVybiByZXN1bHQ7CisJCQkJZ290byBlcnJvcjsKKwkJfQorCisJCWxsZGV2ID0gZGV2X2dldF9ieV9pbmRleChkZXZfbmV0KGRldiksIGxsaWZpbmRleCk7CisKKwkJaWYgKGxsZGV2ID09IE5VTEwpIHsKKwkJCXByX2RlYnVnKCJDQUlGOiAlcygpOiBubyBpbnRlcmZhY2U/XG4iLCBfX2Z1bmNfXyk7CisJCQlyZXN1bHQgPSAtRU5PREVWOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCWRldi0+bmVlZGVkX3RhaWxyb29tID0gdGFpbHJvb20gKyBsbGRldi0+bmVlZGVkX3RhaWxyb29tOworCQlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IGhlYWRyb29tICsgbGxkZXYtPmhhcmRfaGVhZGVyX2xlbiArCisJCQlsbGRldi0+bmVlZGVkX3RhaWxyb29tOworCisJCS8qCisJCSAqIE1UVSwgaGVhZC1yb29tIGV0YyBpcyBub3Qga25vdyBiZWZvcmUgd2UgaGF2ZSBhCisJCSAqIENBSUYgbGluayBsYXllciBkZXZpY2UgYXZhaWxhYmxlLiBNVFUgY2FsY3VsYXRpb24gbWF5CisJCSAqIG92ZXJyaWRlIGluaXRpYWwgUlROTCBjb25maWd1cmF0aW9uLgorCQkgKiBNVFUgaXMgbWluaW11bSBvZiBjdXJyZW50IG10dSwgbGluayBsYXllciBtdHUgcGx1c3MKKwkJICogQ0FJRiBoZWFkIGFuZCB0YWlsLCBhbmQgUERQIEdQUlMgY29udGV4dHMgbWF4IE1UVS4KKwkJICovCisJCW10dSA9IG1pbl90KGludCwgZGV2LT5tdHUsIGxsZGV2LT5tdHUgLSAoaGVhZHJvb20gKyB0YWlscm9vbSkpOworCQltdHUgPSBtaW5fdChpbnQsIEdQUlNfUERQX01UVSwgbXR1KTsKKwkJZGV2X3NldF9tdHUoZGV2LCBtdHUpOworCQlkZXZfcHV0KGxsZGV2KTsKKworCQlpZiAobXR1IDwgMTAwKSB7CisJCQlwcl93YXJuaW5nKCJDQUlGOiAlcygpOiAiCisJCQkJIkNBSUYgSW50ZXJmYWNlIE1UVSB0b28gc21hbGwgKCVkKVxuIiwKKwkJCQlfX2Z1bmNfXywgbXR1KTsKKwkJCXJlc3VsdCA9IC1FTk9ERVY7CisJCQlnb3RvIGVycm9yOwogCQl9CiAJfQogCisJcnRubF91bmxvY2soKTsgIC8qIFJlbGVhc2UgUlROTCBsb2NrIGR1cmluZyBjb25uZWN0IHdhaXQgKi8KKwogCXJlc3VsdCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHByaXYtPm5ldG1nbXRfd3EsCiAJCQkJCQlwcml2LT5zdGF0ZSAhPSBDQUlGX0NPTk5FQ1RJTkcsCiAJCQkJCQlDT05ORUNUX1RJTUVPVVQpOwogCisJcnRubF9sb2NrKCk7CisKIAlpZiAocmVzdWx0ID09IC1FUkVTVEFSVFNZUykgewogCQlwcl9kZWJ1ZygiQ0FJRjogJXMoKTogd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlIgogCQkJICIgd29rZW4gYnkgYSBzaWduYWxcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkJcmVzdWx0ID0gLUVSRVNUQVJUU1lTOworCQlnb3RvIGVycm9yOwogCX0KKwogCWlmIChyZXN1bHQgPT0gMCkgewogCQlwcl9kZWJ1ZygiQ0FJRjogJXMoKTogY29ubmVjdCB0aW1lb3V0XG4iLCBfX2Z1bmNfXyk7CiAJCWNhaWZfZGlzY29ubmVjdF9jbGllbnQoJnByaXYtPmNobmwpOwogCQlwcml2LT5zdGF0ZSA9IENBSUZfRElTQ09OTkVDVEVEOwogCQlwcl9kZWJ1ZygiQ0FJRjogJXMoKTogc3RhdGUgZGlzY29ubmVjdGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRVRJTUVET1VUOworCQlyZXN1bHQgPSAtRVRJTUVET1VUOworCQlnb3RvIGVycm9yOwogCX0KIAogCWlmIChwcml2LT5zdGF0ZSAhPSBDQUlGX0NPTk5FQ1RFRCkgewogCQlwcl9kZWJ1ZygiQ0FJRjogJXMoKTogY29ubmVjdCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FQ09OTlJFRlVTRUQ7CisJCXJlc3VsdCA9IC1FQ09OTlJFRlVTRUQ7CisJCWdvdG8gZXJyb3I7CiAJfQogCXByX2RlYnVnKCJDQUlGOiAlcygpOiBDQUlGIE5ldGRldmljZSBjb25uZWN0ZWRcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gMDsKKworZXJyb3I6CisJY2FpZl9kaXNjb25uZWN0X2NsaWVudCgmcHJpdi0+Y2hubCk7CisJcHJpdi0+c3RhdGUgPSBDQUlGX0RJU0NPTk5FQ1RFRDsKKwlwcl9kZWJ1ZygiQ0FJRjogJXMoKTogc3RhdGUgZGlzY29ubmVjdGVkXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIHJlc3VsdDsKKwogfQogCiBzdGF0aWMgaW50IGNobmxfbmV0X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTMyMSw5ICszNzAsNyBAQAogCWRldi0+ZGVzdHJ1Y3RvciA9IGZyZWVfbmV0ZGV2OwogCWRldi0+ZmxhZ3MgfD0gSUZGX05PQVJQOwogCWRldi0+ZmxhZ3MgfD0gSUZGX1BPSU5UT1BPSU5UOwotCWRldi0+bmVlZGVkX2hlYWRyb29tID0gQ0FJRl9ORUVERURfSEVBRFJPT007Ci0JZGV2LT5uZWVkZWRfdGFpbHJvb20gPSBDQUlGX05FRURFRF9UQUlMUk9PTTsKLQlkZXYtPm10dSA9IFNJWkVfTVRVOworCWRldi0+bXR1ID0gR1BSU19QRFBfTVRVOwogCWRldi0+dHhfcXVldWVfbGVuID0gQ0FJRl9ORVRfREVGQVVMVF9RVUVVRV9MRU47CiAKIAlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKZGlmZiAtLWdpdCBhL25ldC9jYW4vcmF3LmMgYi9uZXQvY2FuL3Jhdy5jCmluZGV4IGRhOTljZjEuLmExMGUzMzMgMTAwNjQ0Ci0tLSBhL25ldC9jYW4vcmF3LmMKKysrIGIvbmV0L2Nhbi9yYXcuYwpAQCAtNDM2LDE0ICs0MzYsOSBAQAogCiAJCWlmIChjb3VudCA+IDEpIHsKIAkJCS8qIGZpbHRlciBkb2VzIG5vdCBmaXQgaW50byBkZmlsdGVyID0+IGFsbG9jIHNwYWNlICovCi0JCQlmaWx0ZXIgPSBrbWFsbG9jKG9wdGxlbiwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIWZpbHRlcikKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJaWYgKGNvcHlfZnJvbV91c2VyKGZpbHRlciwgb3B0dmFsLCBvcHRsZW4pKSB7Ci0JCQkJa2ZyZWUoZmlsdGVyKTsKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCX0KKwkJCWZpbHRlciA9IG1lbWR1cF91c2VyKG9wdHZhbCwgb3B0bGVuKTsKKwkJCWlmIChJU19FUlIoZmlsdGVyKSkKKwkJCQlyZXR1cm4gUFRSX0VSUihmaWx0ZXIpOwogCQl9IGVsc2UgaWYgKGNvdW50ID09IDEpIHsKIAkJCWlmIChjb3B5X2Zyb21fdXNlcigmc2ZpbHRlciwgb3B0dmFsLCBzaXplb2Yoc2ZpbHRlcikpKQogCQkJCXJldHVybiAtRUZBVUxUOwpAQCAtNjU1LDYgKzY1MCwxMCBAQAogCWVyciA9IHNvY2tfdHhfdGltZXN0YW1wKG1zZywgc2ssIHNrYl90eChza2IpKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBmcmVlX3NrYjsKKworCS8qIHRvIGJlIGFibGUgdG8gY2hlY2sgdGhlIHJlY2VpdmVkIHR4IHNvY2sgcmVmZXJlbmNlIGluIHJhd19yY3YoKSAqLworCXNrYl90eChza2IpLT5wcmV2ZW50X3NrX29ycGhhbiA9IDE7CisKIAlza2ItPmRldiA9IGRldjsKIAlza2ItPnNrICA9IHNrOwogCmRpZmYgLS1naXQgYS9uZXQvY29tcGF0LmMgYi9uZXQvY29tcGF0LmMKaW5kZXggZWMyNGQ5ZS4uNjNkMjYwZSAxMDA2NDQKLS0tIGEvbmV0L2NvbXBhdC5jCisrKyBiL25ldC9jb21wYXQuYwpAQCAtODEsNyArODEsNyBAQAogCWludCB0b3RfbGVuOwogCiAJaWYgKGtlcm5fbXNnLT5tc2dfbmFtZWxlbikgewotCQlpZiAobW9kZT09VkVSSUZZX1JFQUQpIHsKKwkJaWYgKG1vZGUgPT0gVkVSSUZZX1JFQUQpIHsKIAkJCWludCBlcnIgPSBtb3ZlX2FkZHJfdG9fa2VybmVsKGtlcm5fbXNnLT5tc2dfbmFtZSwKIAkJCQkJCSAgICAgIGtlcm5fbXNnLT5tc2dfbmFtZWxlbiwKIAkJCQkJCSAgICAgIGtlcm5fYWRkcmVzcyk7CkBAIC0zNTQsNyArMzU0LDcgQEAKIHN0YXRpYyBpbnQgZG9fc2V0X3NvY2tfdGltZW91dChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsCiAJCWludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKQogewotCXN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnVwID0gKHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKikgb3B0dmFsOworCXN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnVwID0gKHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKilvcHR2YWw7CiAJc3RydWN0IHRpbWV2YWwga3RpbWU7CiAJbW1fc2VnbWVudF90IG9sZF9mczsKIAlpbnQgZXJyOwpAQCAtMzY3LDcgKzM2Nyw3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCW9sZF9mcyA9IGdldF9mcygpOwogCXNldF9mcyhLRVJORUxfRFMpOwotCWVyciA9IHNvY2tfc2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgKGNoYXIgKikgJmt0aW1lLCBzaXplb2Yoa3RpbWUpKTsKKwllcnIgPSBzb2NrX3NldHNvY2tvcHQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIChjaGFyICopJmt0aW1lLCBzaXplb2Yoa3RpbWUpKTsKIAlzZXRfZnMob2xkX2ZzKTsKIAogCXJldHVybiBlcnI7CkBAIC0zODksMTEgKzM4OSwxMCBAQAogCQkJCWNoYXIgX191c2VyICpvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pCiB7CiAJaW50IGVycjsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2NrOworCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSBzb2NrZmRfbG9va3VwKGZkLCAmZXJyKTsKIAotCWlmICgoc29jayA9IHNvY2tmZF9sb29rdXAoZmQsICZlcnIpKSE9TlVMTCkKLQl7Ci0JCWVyciA9IHNlY3VyaXR5X3NvY2tldF9zZXRzb2Nrb3B0KHNvY2ssbGV2ZWwsb3B0bmFtZSk7CisJaWYgKHNvY2spIHsKKwkJZXJyID0gc2VjdXJpdHlfc29ja2V0X3NldHNvY2tvcHQoc29jaywgbGV2ZWwsIG9wdG5hbWUpOwogCQlpZiAoZXJyKSB7CiAJCQlzb2NrZmRfcHV0KHNvY2spOwogCQkJcmV0dXJuIGVycjsKQEAgLTQ1Myw3ICs0NTIsNyBAQAogaW50IGNvbXBhdF9zb2NrX2dldF90aW1lc3RhbXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGltZXZhbCBfX3VzZXIgKnVzZXJzdGFtcCkKIHsKIAlzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICpjdHYgPQotCQkJKHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIqKSB1c2Vyc3RhbXA7CisJCQkoc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqKSB1c2Vyc3RhbXA7CiAJaW50IGVyciA9IC1FTk9FTlQ7CiAJc3RydWN0IHRpbWV2YWwgdHY7CiAKQEAgLTQ3Nyw3ICs0NzYsNyBAQAogaW50IGNvbXBhdF9zb2NrX2dldF90aW1lc3RhbXBucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnVzZXJzdGFtcCkKIHsKIAlzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIF9fdXNlciAqY3R2ID0KLQkJCShzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIF9fdXNlciopIHVzZXJzdGFtcDsKKwkJCShzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIF9fdXNlciAqKSB1c2Vyc3RhbXA7CiAJaW50IGVyciA9IC1FTk9FTlQ7CiAJc3RydWN0IHRpbWVzcGVjIHRzOwogCkBAIC01MDIsMTIgKzUwMSwxMCBAQAogCQkJCWNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKIHsKIAlpbnQgZXJyOwotCXN0cnVjdCBzb2NrZXQgKnNvY2s7CisJc3RydWN0IHNvY2tldCAqc29jayA9IHNvY2tmZF9sb29rdXAoZmQsICZlcnIpOwogCi0JaWYgKChzb2NrID0gc29ja2ZkX2xvb2t1cChmZCwgJmVycikpIT1OVUxMKQotCXsKLQkJZXJyID0gc2VjdXJpdHlfc29ja2V0X2dldHNvY2tvcHQoc29jaywgbGV2ZWwsCi0JCQkJCQkJICAgb3B0bmFtZSk7CisJaWYgKHNvY2spIHsKKwkJZXJyID0gc2VjdXJpdHlfc29ja2V0X2dldHNvY2tvcHQoc29jaywgbGV2ZWwsIG9wdG5hbWUpOwogCQlpZiAoZXJyKSB7CiAJCQlzb2NrZmRfcHV0KHNvY2spOwogCQkJcmV0dXJuIGVycjsKQEAgLTUzMSw3ICs1MjgsNyBAQAogCV9fdTMyCQkJCSBncl9pbnRlcmZhY2U7CiAJc3RydWN0IF9fa2VybmVsX3NvY2thZGRyX3N0b3JhZ2UgZ3JfZ3JvdXAKIAkJX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoNCkpKTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGNvbXBhdF9ncm91cF9zb3VyY2VfcmVxIHsKIAlfX3UzMgkJCQkgZ3NyX2ludGVyZmFjZTsKQEAgLTUzOSw3ICs1MzYsNyBAQAogCQlfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCg0KSkpOwogCXN0cnVjdCBfX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlIGdzcl9zb3VyY2UKIAkJX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoNCkpKTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IGNvbXBhdF9ncm91cF9maWx0ZXIgewogCV9fdTMyCQkJCSBnZl9pbnRlcmZhY2U7CkBAIC01NDksNyArNTQ2LDcgQEAKIAlfX3UzMgkJCQkgZ2ZfbnVtc3JjOwogCXN0cnVjdCBfX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlIGdmX3NsaXN0WzFdCiAJCV9fYXR0cmlidXRlX18gKChhbGlnbmVkKDQpKSk7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgX19DT01QQVRfR0YwX1NJWkUgKHNpemVvZihzdHJ1Y3QgY29tcGF0X2dyb3VwX2ZpbHRlcikgLSBcCiAJCQlzaXplb2Yoc3RydWN0IF9fa2VybmVsX3NvY2thZGRyX3N0b3JhZ2UpKQpAQCAtNTU3LDcgKzU1NCw3IEBACiAKIGludCBjb21wYXRfbWNfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAljaGFyIF9fdXNlciAqb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuLAotCWludCAoKnNldHNvY2tvcHQpKHN0cnVjdCBzb2NrICosaW50LGludCxjaGFyIF9fdXNlciAqLHVuc2lnbmVkIGludCkpCisJaW50ICgqc2V0c29ja29wdCkoc3RydWN0IHNvY2sgKiwgaW50LCBpbnQsIGNoYXIgX191c2VyICosIHVuc2lnbmVkIGludCkpCiB7CiAJY2hhciBfX3VzZXIJKmtvcHR2YWwgPSBvcHR2YWw7CiAJaW50CQlrb3B0bGVuID0gb3B0bGVuOwpAQCAtNjQwLDEyICs2MzcsMTEgQEAKIAl9CiAJcmV0dXJuIHNldHNvY2tvcHQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIGtvcHR2YWwsIGtvcHRsZW4pOwogfQotCiBFWFBPUlRfU1lNQk9MKGNvbXBhdF9tY19zZXRzb2Nrb3B0KTsKIAogaW50IGNvbXBhdF9tY19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCWNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbiwKLQlpbnQgKCpnZXRzb2Nrb3B0KShzdHJ1Y3Qgc29jayAqLGludCxpbnQsY2hhciBfX3VzZXIgKixpbnQgX191c2VyICopKQorCWludCAoKmdldHNvY2tvcHQpKHN0cnVjdCBzb2NrICosIGludCwgaW50LCBjaGFyIF9fdXNlciAqLCBpbnQgX191c2VyICopKQogewogCXN0cnVjdCBjb21wYXRfZ3JvdXBfZmlsdGVyIF9fdXNlciAqZ2YzMiA9ICh2b2lkICopb3B0dmFsOwogCXN0cnVjdCBncm91cF9maWx0ZXIgX191c2VyICprZ2Y7CkBAIC02ODEsNyArNjc3LDcgQEAKIAkgICAgX19wdXRfdXNlcihpbnRlcmZhY2UsICZrZ2YtPmdmX2ludGVyZmFjZSkgfHwKIAkgICAgX19wdXRfdXNlcihmbW9kZSwgJmtnZi0+Z2ZfZm1vZGUpIHx8CiAJICAgIF9fcHV0X3VzZXIobnVtc3JjLCAma2dmLT5nZl9udW1zcmMpIHx8Ci0JICAgIGNvcHlfaW5fdXNlcigma2dmLT5nZl9ncm91cCwmZ2YzMi0+Z2ZfZ3JvdXAsc2l6ZW9mKGtnZi0+Z2ZfZ3JvdXApKSkKKwkgICAgY29weV9pbl91c2VyKCZrZ2YtPmdmX2dyb3VwLCAmZ2YzMi0+Z2ZfZ3JvdXAsIHNpemVvZihrZ2YtPmdmX2dyb3VwKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJZXJyID0gZ2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgKGNoYXIgX191c2VyICopa2dmLCBrb3B0bGVuKTsKQEAgLTcxNCwyMSArNzEwLDIyIEBACiAJCWNvcHlsZW4gPSBudW1zcmMgKiBzaXplb2YoZ2YzMi0+Z2Zfc2xpc3RbMF0pOwogCQlpZiAoY29weWxlbiA+IGtsZW4pCiAJCQljb3B5bGVuID0ga2xlbjsKLQkgICAgICAgIGlmIChjb3B5X2luX3VzZXIoZ2YzMi0+Z2Zfc2xpc3QsIGtnZi0+Z2Zfc2xpc3QsIGNvcHlsZW4pKQorCQlpZiAoY29weV9pbl91c2VyKGdmMzItPmdmX3NsaXN0LCBrZ2YtPmdmX3NsaXN0LCBjb3B5bGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KIAlyZXR1cm4gZXJyOwogfQotCiBFWFBPUlRfU1lNQk9MKGNvbXBhdF9tY19nZXRzb2Nrb3B0KTsKIAogCiAvKiBBcmd1bWVudCBsaXN0IHNpemVzIGZvciBjb21wYXRfc3lzX3NvY2tldGNhbGwgKi8KICNkZWZpbmUgQUwoeCkgKCh4KSAqIHNpemVvZih1MzIpKQotc3RhdGljIHVuc2lnbmVkIGNoYXIgbmFzWzIwXT17QUwoMCksQUwoMyksQUwoMyksQUwoMyksQUwoMiksQUwoMyksCi0JCQkJQUwoMyksQUwoMyksQUwoNCksQUwoNCksQUwoNCksQUwoNiksCi0JCQkJQUwoNiksQUwoMiksQUwoNSksQUwoNSksQUwoMyksQUwoMyksCi0JCQkJQUwoNCksQUwoNSl9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgbmFzWzIwXSA9IHsKKwlBTCgwKSwgQUwoMyksIEFMKDMpLCBBTCgzKSwgQUwoMiksIEFMKDMpLAorCUFMKDMpLCBBTCgzKSwgQUwoNCksIEFMKDQpLCBBTCg0KSwgQUwoNiksCisJQUwoNiksIEFMKDIpLCBBTCg1KSwgQUwoNSksIEFMKDMpLCBBTCgzKSwKKwlBTCg0KSwgQUwoNSkKK307CiAjdW5kZWYgQUwKIAogYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfc2VuZG1zZyhpbnQgZmQsIHN0cnVjdCBjb21wYXRfbXNnaGRyIF9fdXNlciAqbXNnLCB1bnNpZ25lZCBmbGFncykKQEAgLTgyNyw3ICs4MjQsNyBAQAogCQkJCQkgIGNvbXBhdF9wdHIoYVs0XSksIGNvbXBhdF9wdHIoYVs1XSkpOwogCQlicmVhazsKIAljYXNlIFNZU19TSFVURE9XTjoKLQkJcmV0ID0gc3lzX3NodXRkb3duKGEwLGExKTsKKwkJcmV0ID0gc3lzX3NodXRkb3duKGEwLCBhMSk7CiAJCWJyZWFrOwogCWNhc2UgU1lTX1NFVFNPQ0tPUFQ6CiAJCXJldCA9IGNvbXBhdF9zeXNfc2V0c29ja29wdChhMCwgYTEsIGFbMl0sCmRpZmYgLS1naXQgYS9uZXQvY29yZS9NYWtlZmlsZSBiL25ldC9jb3JlL01ha2VmaWxlCmluZGV4IDUxYzNlZWMuLjhhMDRkZDIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL01ha2VmaWxlCisrKyBiL25ldC9jb3JlL01ha2VmaWxlCkBAIC0xOCw0ICsxOCw0IEBACiBvYmotJChDT05GSUdfRklCX1JVTEVTKSArPSBmaWJfcnVsZXMubwogb2JqLSQoQ09ORklHX1RSQUNFUE9JTlRTKSArPSBuZXQtdHJhY2VzLm8KIG9iai0kKENPTkZJR19ORVRfRFJPUF9NT05JVE9SKSArPSBkcm9wX21vbml0b3IubwotCitvYmotJChDT05GSUdfTkVUV09SS19QSFlfVElNRVNUQU1QSU5HKSArPSB0aW1lc3RhbXBpbmcubwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGF0YWdyYW0uYyBiL25ldC9jb3JlL2RhdGFncmFtLmMKaW5kZXggZjViNmY0My4uMjUxOTk3YSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGF0YWdyYW0uYworKysgYi9uZXQvY29yZS9kYXRhZ3JhbS5jCkBAIC0yMTksNiArMjE5LDcgQEAKIAlyZXR1cm4gX19za2JfcmVjdl9kYXRhZ3JhbShzaywgZmxhZ3MgfCAobm9ibG9jayA/IE1TR19ET05UV0FJVCA6IDApLAogCQkJCSAgICZwZWVrZWQsIGVycik7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9yZWN2X2RhdGFncmFtKTsKIAogdm9pZCBza2JfZnJlZV9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC0yODgsNyArMjg5LDYgQEAKIAogCXJldHVybiBlcnI7CiB9Ci0KIEVYUE9SVF9TWU1CT0woc2tiX2tpbGxfZGF0YWdyYW0pOwogCiAvKioKQEAgLTM3Myw2ICszNzMsNyBAQAogZmF1bHQ6CiAJcmV0dXJuIC1FRkFVTFQ7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2RhdGFncmFtX2lvdmVjKTsKIAogLyoqCiAgKglza2JfY29weV9kYXRhZ3JhbV9jb25zdF9pb3ZlYyAtIENvcHkgYSBkYXRhZ3JhbSB0byBhbiBpb3ZlYy4KQEAgLTcxNiw2ICs3MTcsNyBAQAogZmF1bHQ6CiAJcmV0dXJuIC1FRkFVTFQ7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2FuZF9jc3VtX2RhdGFncmFtX2lvdmVjKTsKIAogLyoqCiAgKiAJZGF0YWdyYW1fcG9sbCAtIGdlbmVyaWMgZGF0YWdyYW0gcG9sbApAQCAtNzcwLDggKzc3Miw0IEBACiAKIAlyZXR1cm4gbWFzazsKIH0KLQogRVhQT1JUX1NZTUJPTChkYXRhZ3JhbV9wb2xsKTsKLUVYUE9SVF9TWU1CT0woc2tiX2NvcHlfYW5kX2NzdW1fZGF0YWdyYW1faW92ZWMpOwotRVhQT1JUX1NZTUJPTChza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9yZWN2X2RhdGFncmFtKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggNzIzYTM0Ny4uZTFjMWNkYyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTEwMSw4ICsxMDEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pZl9icmlkZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pZl9tYWN2bGFuLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogI2luY2x1ZGUgPG5ldC9wa3Rfc2NoZWQuaD4KICNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KQEAgLTgwMywzNSArODAxLDMxIEBACiBFWFBPUlRfU1lNQk9MKGRldl9nZXRmaXJzdGJ5aHd0eXBlKTsKIAogLyoqCi0gKglkZXZfZ2V0X2J5X2ZsYWdzIC0gZmluZCBhbnkgZGV2aWNlIHdpdGggZ2l2ZW4gZmxhZ3MKKyAqCWRldl9nZXRfYnlfZmxhZ3NfcmN1IC0gZmluZCBhbnkgZGV2aWNlIHdpdGggZ2l2ZW4gZmxhZ3MKICAqCUBuZXQ6IHRoZSBhcHBsaWNhYmxlIG5ldCBuYW1lc3BhY2UKICAqCUBpZl9mbGFnczogSUZGXyogdmFsdWVzCiAgKglAbWFzazogYml0bWFzayBvZiBiaXRzIGluIGlmX2ZsYWdzIHRvIGNoZWNrCiAgKgogICoJU2VhcmNoIGZvciBhbnkgaW50ZXJmYWNlIHdpdGggdGhlIGdpdmVuIGZsYWdzLiBSZXR1cm5zIE5VTEwgaWYgYSBkZXZpY2UKLSAqCWlzIG5vdCBmb3VuZCBvciBhIHBvaW50ZXIgdG8gdGhlIGRldmljZS4gVGhlIGRldmljZSByZXR1cm5lZCBoYXMKLSAqCWhhZCBhIHJlZmVyZW5jZSBhZGRlZCBhbmQgdGhlIHBvaW50ZXIgaXMgc2FmZSB1bnRpbCB0aGUgdXNlciBjYWxscwotICoJZGV2X3B1dCB0byBpbmRpY2F0ZSB0aGV5IGhhdmUgZmluaXNoZWQgd2l0aCBpdC4KKyAqCWlzIG5vdCBmb3VuZCBvciBhIHBvaW50ZXIgdG8gdGhlIGRldmljZS4gTXVzdCBiZSBjYWxsZWQgaW5zaWRlCisgKglyY3VfcmVhZF9sb2NrKCksIGFuZCByZXN1bHQgcmVmY291bnQgaXMgdW5jaGFuZ2VkLgogICovCiAKLXN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0X2J5X2ZsYWdzKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgc2hvcnQgaWZfZmxhZ3MsCitzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9mbGFnc19yY3Uoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBzaG9ydCBpZl9mbGFncywKIAkJCQkgICAgdW5zaWduZWQgc2hvcnQgbWFzaykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCAqcmV0OwogCiAJcmV0ID0gTlVMTDsKLQlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yX2VhY2hfbmV0ZGV2X3JjdShuZXQsIGRldikgewogCQlpZiAoKChkZXYtPmZsYWdzIF4gaWZfZmxhZ3MpICYgbWFzaykgPT0gMCkgewotCQkJZGV2X2hvbGQoZGV2KTsKIAkJCXJldCA9IGRldjsKIAkJCWJyZWFrOwogCQl9CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MKGRldl9nZXRfYnlfZmxhZ3MpOworRVhQT1JUX1NZTUJPTChkZXZfZ2V0X2J5X2ZsYWdzX3JjdSk7CiAKIC8qKgogICoJZGV2X3ZhbGlkX25hbWUgLSBjaGVjayBpZiBuYW1lIGlzIG9rYXkgZm9yIG5ldHdvcmsgZGV2aWNlCkBAIC0xNDg4LDYgKzE0ODIsNyBAQAogaW50IGRldl9mb3J3YXJkX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXNrYl9vcnBoYW4oc2tiKTsKKwluZl9yZXNldChza2IpOwogCiAJaWYgKCEoZGV2LT5mbGFncyAmIElGRl9VUCkgfHwKIAkgICAgKHNrYi0+bGVuID4gKGRldi0+bXR1ICsgZGV2LT5oYXJkX2hlYWRlcl9sZW4pKSkgewpAQCAtMTU0MSw3ICsxNTM2LDggQEAKIAkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJCQlwcmludGsoS0VSTl9DUklUICJwcm90b2NvbCAlMDR4IGlzICIKIAkJCQkJICAgICAgICJidWdneSwgZGV2ICVzXG4iLAotCQkJCQkgICAgICAgc2tiMi0+cHJvdG9jb2wsIGRldi0+bmFtZSk7CisJCQkJCSAgICAgICBudG9ocyhza2IyLT5wcm90b2NvbCksCisJCQkJCSAgICAgICBkZXYtPm5hbWUpOwogCQkJCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IyKTsKIAkJCX0KIApAQCAtMTkxMSw4ICsxOTA3LDMyIEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBza2Jfb3JwaGFuX3RyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWlmICghc2tiX3R4KHNrYiktPmZsYWdzKQorCXN0cnVjdCBzb2NrICpzayA9IHNrYi0+c2s7CisKKwlpZiAoc2sgJiYgIXNrYl90eChza2IpLT5mbGFncykgeworCQkvKiBza2JfdHhfaGFzaCgpIHdvbnQgYmUgYWJsZSB0byBnZXQgc2suCisJCSAqIFdlIGNvcHkgc2tfaGFzaCBpbnRvIHNrYi0+cnhoYXNoCisJCSAqLworCQlpZiAoIXNrYi0+cnhoYXNoKQorCQkJc2tiLT5yeGhhc2ggPSBzay0+c2tfaGFzaDsKIAkJc2tiX29ycGhhbihza2IpOworCX0KK30KKworLyoKKyAqIFJldHVybnMgdHJ1ZSBpZiBlaXRoZXI6CisgKgkxLiBza2IgaGFzIGZyYWdfbGlzdCBhbmQgdGhlIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgRlJBR0xJU1QsIG9yCisgKgkyLiBza2IgaXMgZnJhZ21lbnRlZCBhbmQgdGhlIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IFNHLCBvciBpZgorICoJICAgYXQgbGVhc3Qgb25lIG9mIGZyYWdtZW50cyBpcyBpbiBoaWdobWVtIGFuZCBkZXZpY2UgZG9lcyBub3QKKyAqCSAgIHN1cHBvcnQgRE1BIGZyb20gaXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNrYl9uZWVkc19saW5lYXJpemUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiBza2JfaXNfbm9ubGluZWFyKHNrYikgJiYKKwkgICAgICAgKChza2JfaGFzX2ZyYWdzKHNrYikgJiYgIShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9GUkFHTElTVCkpIHx8CisJICAgICAgICAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyAmJiAoIShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9TRykgfHwKKwkJCQkJICAgICAgaWxsZWdhbF9oaWdoZG1hKGRldiwgc2tiKSkpKTsKIH0KIAogaW50IGRldl9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTE5MzksNiArMTk1OSwyMiBAQAogCQkJCWdvdG8gb3V0X2tmcmVlX3NrYjsKIAkJCWlmIChza2ItPm5leHQpCiAJCQkJZ290byBnc287CisJCX0gZWxzZSB7CisJCQlpZiAoc2tiX25lZWRzX2xpbmVhcml6ZShza2IsIGRldikgJiYKKwkJCSAgICBfX3NrYl9saW5lYXJpemUoc2tiKSkKKwkJCQlnb3RvIG91dF9rZnJlZV9za2I7CisKKwkJCS8qIElmIHBhY2tldCBpcyBub3QgY2hlY2tzdW1tZWQgYW5kIGRldmljZSBkb2VzIG5vdAorCQkJICogc3VwcG9ydCBjaGVja3N1bW1pbmcgZm9yIHRoaXMgcHJvdG9jb2wsIGNvbXBsZXRlCisJCQkgKiBjaGVja3N1bW1pbmcgaGVyZS4KKwkJCSAqLworCQkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKKwkJCQlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBza2ItPmNzdW1fc3RhcnQgLQorCQkJCQkgICAgICBza2JfaGVhZHJvb20oc2tiKSk7CisJCQkJaWYgKCFkZXZfY2FuX2NoZWNrc3VtKGRldiwgc2tiKSAmJgorCQkJCSAgICAgc2tiX2NoZWNrc3VtX2hlbHAoc2tiKSkKKwkJCQkJZ290byBvdXRfa2ZyZWVfc2tiOworCQkJfQogCQl9CiAKIAkJcmMgPSBvcHMtPm5kb19zdGFydF94bWl0KHNrYiwgZGV2KTsKQEAgLTE5OTgsOCArMjAzNCw3IEBACiAJaWYgKHNrYi0+c2sgJiYgc2tiLT5zay0+c2tfaGFzaCkKIAkJaGFzaCA9IHNrYi0+c2stPnNrX2hhc2g7CiAJZWxzZQotCQloYXNoID0gKF9fZm9yY2UgdTE2KSBza2ItPnByb3RvY29sOwotCisJCWhhc2ggPSAoX19mb3JjZSB1MTYpIHNrYi0+cHJvdG9jb2wgXiBza2ItPnJ4aGFzaDsKIAloYXNoID0gamhhc2hfMXdvcmQoaGFzaCwgaGFzaHJuZCk7CiAKIAlyZXR1cm4gKHUxNikgKCgodTY0KSBoYXNoICogZGV2LT5yZWFsX251bV90eF9xdWV1ZXMpID4+IDMyKTsKQEAgLTIwMjIsMTIgKzIwNTcsMTEgQEAKIHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcGlja190eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXUxNiBxdWV1ZV9pbmRleDsKKwlpbnQgcXVldWVfaW5kZXg7CiAJc3RydWN0IHNvY2sgKnNrID0gc2tiLT5zazsKIAotCWlmIChza190eF9xdWV1ZV9yZWNvcmRlZChzaykpIHsKLQkJcXVldWVfaW5kZXggPSBza190eF9xdWV1ZV9nZXQoc2spOwotCX0gZWxzZSB7CisJcXVldWVfaW5kZXggPSBza190eF9xdWV1ZV9nZXQoc2spOworCWlmIChxdWV1ZV9pbmRleCA8IDApIHsKIAkJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtPm5ldGRldl9vcHM7CiAKIAkJaWYgKG9wcy0+bmRvX3NlbGVjdF9xdWV1ZSkgewpAQCAtMjA1NiwxNCArMjA5MCwyNCBAQAogCQkJCSBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEpCiB7CiAJc3BpbmxvY2tfdCAqcm9vdF9sb2NrID0gcWRpc2NfbG9jayhxKTsKKwlib29sIGNvbnRlbmRlZCA9IHFkaXNjX2lzX3J1bm5pbmcocSk7CiAJaW50IHJjOwogCisJLyoKKwkgKiBIZXVyaXN0aWMgdG8gZm9yY2UgY29udGVuZGVkIGVucXVldWVzIHRvIHNlcmlhbGl6ZSBvbiBhCisJICogc2VwYXJhdGUgbG9jayBiZWZvcmUgdHJ5aW5nIHRvIGdldCBxZGlzYyBtYWluIGxvY2suCisJICogVGhpcyBwZXJtaXRzIF9fUURJU0NfU1RBVEVfUlVOTklORyBvd25lciB0byBnZXQgdGhlIGxvY2sgbW9yZSBvZnRlbgorCSAqIGFuZCBkZXF1ZXVlIHBhY2tldHMgZmFzdGVyLgorCSAqLworCWlmICh1bmxpa2VseShjb250ZW5kZWQpKQorCQlzcGluX2xvY2soJnEtPmJ1c3lsb2NrKTsKKwogCXNwaW5fbG9jayhyb290X2xvY2spOwogCWlmICh1bmxpa2VseSh0ZXN0X2JpdChfX1FESVNDX1NUQVRFX0RFQUNUSVZBVEVELCAmcS0+c3RhdGUpKSkgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmMgPSBORVRfWE1JVF9EUk9QOwogCX0gZWxzZSBpZiAoKHEtPmZsYWdzICYgVENRX0ZfQ0FOX0JZUEFTUykgJiYgIXFkaXNjX3FsZW4ocSkgJiYKLQkJICAgIXRlc3RfYW5kX3NldF9iaXQoX19RRElTQ19TVEFURV9SVU5OSU5HLCAmcS0+c3RhdGUpKSB7CisJCSAgIHFkaXNjX3J1bl9iZWdpbihxKSkgewogCQkvKgogCQkgKiBUaGlzIGlzIGEgd29yay1jb25zZXJ2aW5nIHF1ZXVlOyB0aGVyZSBhcmUgbm8gb2xkIHNrYnMKIAkJICogd2FpdGluZyB0byBiZSBzZW50IG91dDsgYW5kIHRoZSBxZGlzYyBpcyBub3QgcnVubmluZyAtCkBAIC0yMDcyLDM3ICsyMTE2LDMzIEBACiAJCWlmICghKGRldi0+cHJpdl9mbGFncyAmIElGRl9YTUlUX0RTVF9SRUxFQVNFKSkKIAkJCXNrYl9kc3RfZm9yY2Uoc2tiKTsKIAkJX19xZGlzY191cGRhdGVfYnN0YXRzKHEsIHNrYi0+bGVuKTsKLQkJaWYgKHNjaF9kaXJlY3RfeG1pdChza2IsIHEsIGRldiwgdHhxLCByb290X2xvY2spKQorCQlpZiAoc2NoX2RpcmVjdF94bWl0KHNrYiwgcSwgZGV2LCB0eHEsIHJvb3RfbG9jaykpIHsKKwkJCWlmICh1bmxpa2VseShjb250ZW5kZWQpKSB7CisJCQkJc3Bpbl91bmxvY2soJnEtPmJ1c3lsb2NrKTsKKwkJCQljb250ZW5kZWQgPSBmYWxzZTsKKwkJCX0KIAkJCV9fcWRpc2NfcnVuKHEpOwotCQllbHNlCi0JCQljbGVhcl9iaXQoX19RRElTQ19TVEFURV9SVU5OSU5HLCAmcS0+c3RhdGUpOworCQl9IGVsc2UKKwkJCXFkaXNjX3J1bl9lbmQocSk7CiAKIAkJcmMgPSBORVRfWE1JVF9TVUNDRVNTOwogCX0gZWxzZSB7CiAJCXNrYl9kc3RfZm9yY2Uoc2tiKTsKIAkJcmMgPSBxZGlzY19lbnF1ZXVlX3Jvb3Qoc2tiLCBxKTsKLQkJcWRpc2NfcnVuKHEpOworCQlpZiAocWRpc2NfcnVuX2JlZ2luKHEpKSB7CisJCQlpZiAodW5saWtlbHkoY29udGVuZGVkKSkgeworCQkJCXNwaW5fdW5sb2NrKCZxLT5idXN5bG9jayk7CisJCQkJY29udGVuZGVkID0gZmFsc2U7CisJCQl9CisJCQlfX3FkaXNjX3J1bihxKTsKKwkJfQogCX0KIAlzcGluX3VubG9jayhyb290X2xvY2spOwotCisJaWYgKHVubGlrZWx5KGNvbnRlbmRlZCkpCisJCXNwaW5fdW5sb2NrKCZxLT5idXN5bG9jayk7CiAJcmV0dXJuIHJjOwogfQogCi0vKgotICogUmV0dXJucyB0cnVlIGlmIGVpdGhlcjoKLSAqCTEuIHNrYiBoYXMgZnJhZ19saXN0IGFuZCB0aGUgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBGUkFHTElTVCwgb3IKLSAqCTIuIHNrYiBpcyBmcmFnbWVudGVkIGFuZCB0aGUgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgU0csIG9yIGlmCi0gKgkgICBhdCBsZWFzdCBvbmUgb2YgZnJhZ21lbnRzIGlzIGluIGhpZ2htZW0gYW5kIGRldmljZSBkb2VzIG5vdAotICoJICAgc3VwcG9ydCBETUEgZnJvbSBpdC4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgc2tiX25lZWRzX2xpbmVhcml6ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIChza2JfaGFzX2ZyYWdzKHNrYikgJiYgIShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9GUkFHTElTVCkpIHx8Ci0JICAgICAgIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICYmICghKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1NHKSB8fAotCQkJCQkgICAgICBpbGxlZ2FsX2hpZ2hkbWEoZGV2LCBza2IpKSk7Ci19Ci0KIC8qKgogICoJZGV2X3F1ZXVlX3htaXQgLSB0cmFuc21pdCBhIGJ1ZmZlcgogICoJQHNrYjogYnVmZmVyIHRvIHRyYW5zbWl0CkBAIC0yMTM1LDI1ICsyMTc1LDYgQEAKIAlzdHJ1Y3QgUWRpc2MgKnE7CiAJaW50IHJjID0gLUVOT01FTTsKIAotCS8qIEdTTyB3aWxsIGhhbmRsZSB0aGUgZm9sbG93aW5nIGVtdWxhdGlvbnMgZGlyZWN0bHkuICovCi0JaWYgKG5ldGlmX25lZWRzX2dzbyhkZXYsIHNrYikpCi0JCWdvdG8gZ3NvOwotCi0JLyogQ29udmVydCBhIHBhZ2VkIHNrYiB0byBsaW5lYXIsIGlmIHJlcXVpcmVkICovCi0JaWYgKHNrYl9uZWVkc19saW5lYXJpemUoc2tiLCBkZXYpICYmIF9fc2tiX2xpbmVhcml6ZShza2IpKQotCQlnb3RvIG91dF9rZnJlZV9za2I7Ci0KLQkvKiBJZiBwYWNrZXQgaXMgbm90IGNoZWNrc3VtbWVkIGFuZCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydAotCSAqIGNoZWNrc3VtbWluZyBmb3IgdGhpcyBwcm90b2NvbCwgY29tcGxldGUgY2hlY2tzdW1taW5nIGhlcmUuCi0JICovCi0JaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKLQkJc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHNrYiwgc2tiLT5jc3VtX3N0YXJ0IC0KLQkJCQkJICAgICAgc2tiX2hlYWRyb29tKHNrYikpOwotCQlpZiAoIWRldl9jYW5fY2hlY2tzdW0oZGV2LCBza2IpICYmIHNrYl9jaGVja3N1bV9oZWxwKHNrYikpCi0JCQlnb3RvIG91dF9rZnJlZV9za2I7Ci0JfQotCi1nc286CiAJLyogRGlzYWJsZSBzb2Z0IGlycXMgZm9yIHZhcmlvdXMgbG9ja3MgYmVsb3cuIEFsc28KIAkgKiBzdG9wcyBwcmVlbXB0aW9uIGZvciBSQ1UuCiAJICovCkBAIC0yMjEyLDcgKzIyMzMsNiBAQAogCXJjID0gLUVORVRET1dOOwogCXJjdV9yZWFkX3VubG9ja19iaCgpOwogCi1vdXRfa2ZyZWVfc2tiOgogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiByYzsKIG91dDoKQEAgLTI1OTcsNzAgKzI2MTcsMTQgQEAKIAlyZXR1cm4gcHRfcHJldi0+ZnVuYyhza2IsIHNrYi0+ZGV2LCBwdF9wcmV2LCBvcmlnX2Rldik7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19CUklER0UpIHx8IGRlZmluZWQgKENPTkZJR19CUklER0VfTU9EVUxFKQotCi0jaWYgZGVmaW5lZChDT05GSUdfQVRNX0xBTkUpIHx8IGRlZmluZWQoQ09ORklHX0FUTV9MQU5FX01PRFVMRSkKKyNpZiAoZGVmaW5lZChDT05GSUdfQlJJREdFKSB8fCBkZWZpbmVkKENPTkZJR19CUklER0VfTU9EVUxFKSkgJiYgXAorICAgIChkZWZpbmVkKENPTkZJR19BVE1fTEFORSkgfHwgZGVmaW5lZChDT05GSUdfQVRNX0xBTkVfTU9EVUxFKSkKIC8qIFRoaXMgaG9vayBpcyBkZWZpbmVkIGhlcmUgZm9yIEFUTSBMQU5FICovCiBpbnQgKCpicl9mZGJfdGVzdF9hZGRyX2hvb2spKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgIHVuc2lnbmVkIGNoYXIgKmFkZHIpIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MX0dQTChicl9mZGJfdGVzdF9hZGRyX2hvb2spOwogI2VuZGlmCiAKLS8qCi0gKiBJZiBicmlkZ2UgbW9kdWxlIGlzIGxvYWRlZCBjYWxsIGJyaWRnaW5nIGhvb2suCi0gKiAgcmV0dXJucyBOVUxMIGlmIHBhY2tldCB3YXMgY29uc3VtZWQuCi0gKi8KLXN0cnVjdCBza19idWZmICooKmJyX2hhbmRsZV9mcmFtZV9ob29rKShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAotCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSBfX3JlYWRfbW9zdGx5OwotRVhQT1JUX1NZTUJPTF9HUEwoYnJfaGFuZGxlX2ZyYW1lX2hvb2spOwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpoYW5kbGVfYnJpZGdlKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCSAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKipwdF9wcmV2LCBpbnQgKnJldCwKLQkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKLXsKLQlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0OwotCi0JaWYgKHNrYi0+cGt0X3R5cGUgPT0gUEFDS0VUX0xPT1BCQUNLIHx8Ci0JICAgIChwb3J0ID0gcmN1X2RlcmVmZXJlbmNlKHNrYi0+ZGV2LT5icl9wb3J0KSkgPT0gTlVMTCkKLQkJcmV0dXJuIHNrYjsKLQotCWlmICgqcHRfcHJldikgewotCQkqcmV0ID0gZGVsaXZlcl9za2Ioc2tiLCAqcHRfcHJldiwgb3JpZ19kZXYpOwotCQkqcHRfcHJldiA9IE5VTEw7Ci0JfQotCi0JcmV0dXJuIGJyX2hhbmRsZV9mcmFtZV9ob29rKHBvcnQsIHNrYik7Ci19Ci0jZWxzZQotI2RlZmluZSBoYW5kbGVfYnJpZGdlKHNrYiwgcHRfcHJldiwgcmV0LCBvcmlnX2RldikJKHNrYikKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfTUFDVkxBTikgfHwgZGVmaW5lZChDT05GSUdfTUFDVkxBTl9NT0RVTEUpCi1zdHJ1Y3Qgc2tfYnVmZiAqKCptYWN2bGFuX2hhbmRsZV9mcmFtZV9ob29rKShzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwLAotCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpIF9fcmVhZF9tb3N0bHk7Ci1FWFBPUlRfU1lNQk9MX0dQTChtYWN2bGFuX2hhbmRsZV9mcmFtZV9ob29rKTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqaGFuZGxlX21hY3ZsYW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKipwdF9wcmV2LAotCQkJCQkgICAgIGludCAqcmV0LAotCQkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKLXsKLQlzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0OwotCi0JcG9ydCA9IHJjdV9kZXJlZmVyZW5jZShza2ItPmRldi0+bWFjdmxhbl9wb3J0KTsKLQlpZiAoIXBvcnQpCi0JCXJldHVybiBza2I7Ci0KLQlpZiAoKnB0X3ByZXYpIHsKLQkJKnJldCA9IGRlbGl2ZXJfc2tiKHNrYiwgKnB0X3ByZXYsIG9yaWdfZGV2KTsKLQkJKnB0X3ByZXYgPSBOVUxMOwotCX0KLQlyZXR1cm4gbWFjdmxhbl9oYW5kbGVfZnJhbWVfaG9vayhwb3J0LCBza2IpOwotfQotI2Vsc2UKLSNkZWZpbmUgaGFuZGxlX21hY3ZsYW4oc2tiLCBwdF9wcmV2LCByZXQsIG9yaWdfZGV2KQkoc2tiKQotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QKIC8qIFRPRE86IE1heWJlIHdlIHNob3VsZCBqdXN0IGZvcmNlIHNjaF9pbmdyZXNzIHRvIGJlIGNvbXBpbGVkIGluCiAgKiB3aGVuIENPTkZJR19ORVRfQ0xTX0FDVCBpcz8gb3RoZXJ3aXNlIHNvbWUgdXNlbGVzcyBpbnN0cnVjdGlvbnMKQEAgLTI2NzgsMTAgKzI2NDIsMTAgQEAKIAlpbnQgcmVzdWx0ID0gVENfQUNUX09LOwogCXN0cnVjdCBRZGlzYyAqcTsKIAotCWlmIChNQVhfUkVEX0xPT1AgPCB0dGwrKykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiUmVkaXIgbG9vcCBkZXRlY3RlZCBEcm9wcGluZyBwYWNrZXQgKCVkLT4lZClcbiIsCi0JCSAgICAgICBza2ItPnNrYl9paWYsIGRldi0+aWZpbmRleCk7CisJaWYgKHVubGlrZWx5KE1BWF9SRURfTE9PUCA8IHR0bCsrKSkgeworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJfd2FybmluZyggIlJlZGlyIGxvb3AgZGV0ZWN0ZWQgRHJvcHBpbmcgcGFja2V0ICglZC0+JWQpXG4iLAorCQkJICAgICAgIHNrYi0+c2tiX2lpZiwgZGV2LT5pZmluZGV4KTsKIAkJcmV0dXJuIFRDX0FDVF9TSE9UOwogCX0KIApAQCAtMjcxMSw5ICsyNjc1LDYgQEAKIAlpZiAoKnB0X3ByZXYpIHsKIAkJKnJldCA9IGRlbGl2ZXJfc2tiKHNrYiwgKnB0X3ByZXYsIG9yaWdfZGV2KTsKIAkJKnB0X3ByZXYgPSBOVUxMOwotCX0gZWxzZSB7Ci0JCS8qIEh1aD8gV2h5IGRvZXMgdHVybmluZyBvbiBBRl9QQUNLRVQgYWZmZWN0IHRoaXM/ICovCi0JCXNrYi0+dGNfdmVyZCA9IFNFVF9UQ19PSzJNVU5HRShza2ItPnRjX3ZlcmQpOwogCX0KIAogCXN3aXRjaCAoaW5nX2ZpbHRlcihza2IpKSB7CkBAIC0yNzU2LDYgKzI3MTcsNTEgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAorLyoqCisgKgluZXRkZXZfcnhfaGFuZGxlcl9yZWdpc3RlciAtIHJlZ2lzdGVyIHJlY2VpdmUgaGFuZGxlcgorICoJQGRldjogZGV2aWNlIHRvIHJlZ2lzdGVyIGEgaGFuZGxlciBmb3IKKyAqCUByeF9oYW5kbGVyOiByZWNlaXZlIGhhbmRsZXIgdG8gcmVnaXN0ZXIKKyAqCUByeF9oYW5kbGVyX2RhdGE6IGRhdGEgcG9pbnRlciB0aGF0IGlzIHVzZWQgYnkgcnggaGFuZGxlcgorICoKKyAqCVJlZ2lzdGVyIGEgcmVjZWl2ZSBoYW5kZXIgZm9yIGEgZGV2aWNlLiBUaGlzIGhhbmRsZXIgd2lsbCB0aGVuIGJlCisgKgljYWxsZWQgZnJvbSBfX25ldGlmX3JlY2VpdmVfc2tiLiBBIG5lZ2F0aXZlIGVycm5vIGNvZGUgaXMgcmV0dXJuZWQKKyAqCW9uIGEgZmFpbHVyZS4KKyAqCisgKglUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgcnRubF9tdXRleC4KKyAqLworaW50IG5ldGRldl9yeF9oYW5kbGVyX3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICAgcnhfaGFuZGxlcl9mdW5jX3QgKnJ4X2hhbmRsZXIsCisJCQkgICAgICAgdm9pZCAqcnhfaGFuZGxlcl9kYXRhKQoreworCUFTU0VSVF9SVE5MKCk7CisKKwlpZiAoZGV2LT5yeF9oYW5kbGVyKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmN1X2Fzc2lnbl9wb2ludGVyKGRldi0+cnhfaGFuZGxlcl9kYXRhLCByeF9oYW5kbGVyX2RhdGEpOworCXJjdV9hc3NpZ25fcG9pbnRlcihkZXYtPnJ4X2hhbmRsZXIsIHJ4X2hhbmRsZXIpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZXRkZXZfcnhfaGFuZGxlcl9yZWdpc3Rlcik7CisKKy8qKgorICoJbmV0ZGV2X3J4X2hhbmRsZXJfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgcmVjZWl2ZSBoYW5kbGVyCisgKglAZGV2OiBkZXZpY2UgdG8gdW5yZWdpc3RlciBhIGhhbmRsZXIgZnJvbQorICoKKyAqCVVucmVnaXN0ZXIgYSByZWNlaXZlIGhhbmRlciBmcm9tIGEgZGV2aWNlLgorICoKKyAqCVRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBydG5sX211dGV4LgorICovCit2b2lkIG5ldGRldl9yeF9oYW5kbGVyX3VucmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKworCUFTU0VSVF9SVE5MKCk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKGRldi0+cnhfaGFuZGxlciwgTlVMTCk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKGRldi0+cnhfaGFuZGxlcl9kYXRhLCBOVUxMKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5ldGRldl9yeF9oYW5kbGVyX3VucmVnaXN0ZXIpOworCiBzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2JvbmRfc2V0X21hY19ieV9tYXN0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlcikKIHsKQEAgLTI3NzcsNyArMjc4Myw4IEBACiAJaWYgKG1hc3Rlci0+cHJpdl9mbGFncyAmIElGRl9NQVNURVJfQVJQTU9OKQogCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCi0JaWYgKChtYXN0ZXItPnByaXZfZmxhZ3MgJiBJRkZfTUFTVEVSX0FMQikgJiYgbWFzdGVyLT5icl9wb3J0KSB7CisJaWYgKChtYXN0ZXItPnByaXZfZmxhZ3MgJiBJRkZfTUFTVEVSX0FMQikgJiYKKwkgICAgKG1hc3Rlci0+cHJpdl9mbGFncyAmIElGRl9CUklER0VfUE9SVCkpIHsKIAkJLyogRG8gYWRkcmVzcyB1bm1hbmdsZS4gVGhlIGxvY2FsIGRlc3RpbmF0aW9uIGFkZHJlc3MKIAkJICogd2lsbCBiZSBhbHdheXMgdGhlIG9uZSBtYXN0ZXIgaGFzLiBQcm92aWRlcyB0aGUgcmlnaHQKIAkJICogZnVuY3Rpb25hbGl0eSBpbiBhIGJyaWRnZS4KQEAgLTI4MDgsNiArMjgxNSw3IEBACiBzdGF0aWMgaW50IF9fbmV0aWZfcmVjZWl2ZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlLCAqcHRfcHJldjsKKwlyeF9oYW5kbGVyX2Z1bmNfdCAqcnhfaGFuZGxlcjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlcjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbnVsbF9vcl9vcmlnOwpAQCAtMjg0OSw4ICsyODU3LDcgQEAKIAkJCXNrYi0+ZGV2ID0gbWFzdGVyOwogCX0KIAotCV9fZ2V0X2NwdV92YXIoc29mdG5ldF9kYXRhKS5wcm9jZXNzZWQrKzsKLQorCV9fdGhpc19jcHVfaW5jKHNvZnRuZXRfZGF0YS5wcm9jZXNzZWQpOwogCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwogCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiAJc2tiLT5tYWNfbGVuID0gc2tiLT5uZXR3b3JrX2hlYWRlciAtIHNrYi0+bWFjX2hlYWRlcjsKQEAgLTI4ODIsMTIgKzI4ODksMTcgQEAKIG5jbHM6CiAjZW5kaWYKIAotCXNrYiA9IGhhbmRsZV9icmlkZ2Uoc2tiLCAmcHRfcHJldiwgJnJldCwgb3JpZ19kZXYpOwotCWlmICghc2tiKQotCQlnb3RvIG91dDsKLQlza2IgPSBoYW5kbGVfbWFjdmxhbihza2IsICZwdF9wcmV2LCAmcmV0LCBvcmlnX2Rldik7Ci0JaWYgKCFza2IpCi0JCWdvdG8gb3V0OworCS8qIEhhbmRsZSBzcGVjaWFsIGNhc2Ugb2YgYnJpZGdlIG9yIG1hY3ZsYW4gKi8KKwlyeF9oYW5kbGVyID0gcmN1X2RlcmVmZXJlbmNlKHNrYi0+ZGV2LT5yeF9oYW5kbGVyKTsKKwlpZiAocnhfaGFuZGxlcikgeworCQlpZiAocHRfcHJldikgeworCQkJcmV0ID0gZGVsaXZlcl9za2Ioc2tiLCBwdF9wcmV2LCBvcmlnX2Rldik7CisJCQlwdF9wcmV2ID0gTlVMTDsKKwkJfQorCQlza2IgPSByeF9oYW5kbGVyKHNrYik7CisJCWlmICghc2tiKQorCQkJZ290byBvdXQ7CisJfQogCiAJLyoKIAkgKiBNYWtlIHN1cmUgZnJhbWVzIHJlY2VpdmVkIG9uIFZMQU4gaW50ZXJmYWNlcyBzdGFja2VkIG9uCkBAIC0yOTQ4LDYgKzI5NjAsOSBAQAogCWlmIChuZXRkZXZfdHN0YW1wX3ByZXF1ZXVlKQogCQluZXRfdGltZXN0YW1wX2NoZWNrKHNrYik7CiAKKwlpZiAoc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChza2IpKQorCQlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7CisKICNpZmRlZiBDT05GSUdfUlBTCiAJewogCQlzdHJ1Y3QgcnBzX2Rldl9mbG93IHZvaWRmbG93LCAqcmZsb3cgPSAmdm9pZGZsb3c7CkBAIC0zNzEyLDEwICszNzI3LDExIEBACiAKIHN0YXRpYyB2b2lkIGRldl9zZXFfcHJpbnRmX3N0YXRzKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IGRldl9nZXRfc3RhdHMoZGV2KTsKKwlzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgdGVtcDsKKwljb25zdCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzID0gZGV2X2dldF9zdGF0cyhkZXYsICZ0ZW1wKTsKIAotCXNlcV9wcmludGYoc2VxLCAiJTZzOiAlN2x1ICU3bHUgJTRsdSAlNGx1ICU0bHUgJTVsdSAlMTBsdSAlOWx1ICIKLQkJICAgIiU4bHUgJTdsdSAlNGx1ICU0bHUgJTRsdSAlNWx1ICU3bHUgJTEwbHVcbiIsCisJc2VxX3ByaW50ZihzZXEsICIlNnM6ICU3bGx1ICU3bGx1ICU0bGx1ICU0bGx1ICU0bGx1ICU1bGx1ICUxMGxsdSAlOWxsdSAiCisJCSAgICIlOGxsdSAlN2xsdSAlNGxsdSAlNGxsdSAlNGxsdSAlNWxsdSAlN2xsdSAlMTBsbHVcbiIsCiAJCSAgIGRldi0+bmFtZSwgc3RhdHMtPnJ4X2J5dGVzLCBzdGF0cy0+cnhfcGFja2V0cywKIAkJICAgc3RhdHMtPnJ4X2Vycm9ycywKIAkJICAgc3RhdHMtPnJ4X2Ryb3BwZWQgKyBzdGF0cy0+cnhfbWlzc2VkX2Vycm9ycywKQEAgLTUyNjQsMjAgKzUyODAsMjIgQEAKIC8qKgogICoJZGV2X3R4cV9zdGF0c19mb2xkIC0gZm9sZCB0eF9xdWV1ZXMgc3RhdHMKICAqCUBkZXY6IGRldmljZSB0byBnZXQgc3RhdGlzdGljcyBmcm9tCi0gKglAc3RhdHM6IHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHRvIGhvbGQgcmVzdWx0cworICoJQHN0YXRzOiBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgdG8gaG9sZCByZXN1bHRzCiAgKi8KIHZvaWQgZGV2X3R4cV9zdGF0c19mb2xkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMpCisJCQlzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKQogewotCXVuc2lnbmVkIGxvbmcgdHhfYnl0ZXMgPSAwLCB0eF9wYWNrZXRzID0gMCwgdHhfZHJvcHBlZCA9IDA7CisJdTY0IHR4X2J5dGVzID0gMCwgdHhfcGFja2V0cyA9IDAsIHR4X2Ryb3BwZWQgPSAwOwogCXVuc2lnbmVkIGludCBpOwogCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKIAogCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV90eF9xdWV1ZXM7IGkrKykgewogCQl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgaSk7CisJCXNwaW5fbG9ja19iaCgmdHhxLT5feG1pdF9sb2NrKTsKIAkJdHhfYnl0ZXMgICArPSB0eHEtPnR4X2J5dGVzOwogCQl0eF9wYWNrZXRzICs9IHR4cS0+dHhfcGFja2V0czsKIAkJdHhfZHJvcHBlZCArPSB0eHEtPnR4X2Ryb3BwZWQ7CisJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPl94bWl0X2xvY2spOwogCX0KIAlpZiAodHhfYnl0ZXMgfHwgdHhfcGFja2V0cyB8fCB0eF9kcm9wcGVkKSB7CiAJCXN0YXRzLT50eF9ieXRlcyAgID0gdHhfYnl0ZXM7CkBAIC01Mjg3LDIzICs1MzA1LDUzIEBACiB9CiBFWFBPUlRfU1lNQk9MKGRldl90eHFfc3RhdHNfZm9sZCk7CiAKKy8qIENvbnZlcnQgbmV0X2RldmljZV9zdGF0cyB0byBydG5sX2xpbmtfc3RhdHM2NC4gIFRoZXkgaGF2ZSB0aGUgc2FtZQorICogZmllbGRzIGluIHRoZSBzYW1lIG9yZGVyLCB3aXRoIG9ubHkgdGhlIHR5cGUgZGlmZmVyaW5nLgorICovCitzdGF0aWMgdm9pZCBuZXRkZXZfc3RhdHNfdG9fc3RhdHM2NChzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzNjQsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuZXRkZXZfc3RhdHMpCit7CisjaWYgQklUU19QRVJfTE9ORyA9PSA2NAorICAgICAgICBCVUlMRF9CVUdfT04oc2l6ZW9mKCpzdGF0czY0KSAhPSBzaXplb2YoKm5ldGRldl9zdGF0cykpOworICAgICAgICBtZW1jcHkoc3RhdHM2NCwgbmV0ZGV2X3N0YXRzLCBzaXplb2YoKnN0YXRzNjQpKTsKKyNlbHNlCisJc2l6ZV90IGksIG4gPSBzaXplb2YoKnN0YXRzNjQpIC8gc2l6ZW9mKHU2NCk7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjID0gKGNvbnN0IHVuc2lnbmVkIGxvbmcgKiluZXRkZXZfc3RhdHM7CisJdTY0ICpkc3QgPSAodTY0ICopc3RhdHM2NDsKKworCUJVSUxEX0JVR19PTihzaXplb2YoKm5ldGRldl9zdGF0cykgLyBzaXplb2YodW5zaWduZWQgbG9uZykgIT0KKwkJICAgICBzaXplb2YoKnN0YXRzNjQpIC8gc2l6ZW9mKHU2NCkpOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCWRzdFtpXSA9IHNyY1tpXTsKKyNlbmRpZgorfQorCiAvKioKICAqCWRldl9nZXRfc3RhdHMJLSBnZXQgbmV0d29yayBkZXZpY2Ugc3RhdGlzdGljcwogICoJQGRldjogZGV2aWNlIHRvIGdldCBzdGF0aXN0aWNzIGZyb20KKyAqCUBzdG9yYWdlOiBwbGFjZSB0byBzdG9yZSBzdGF0cwogICoKLSAqCUdldCBuZXR3b3JrIHN0YXRpc3RpY3MgZnJvbSBkZXZpY2UuIFRoZSBkZXZpY2UgZHJpdmVyIG1heSBwcm92aWRlCi0gKglpdHMgb3duIG1ldGhvZCBieSBzZXR0aW5nIGRldi0+bmV0ZGV2X29wcy0+Z2V0X3N0YXRzOyBvdGhlcndpc2UKLSAqCXRoZSBpbnRlcm5hbCBzdGF0aXN0aWNzIHN0cnVjdHVyZSBpcyB1c2VkLgorICoJR2V0IG5ldHdvcmsgc3RhdGlzdGljcyBmcm9tIGRldmljZS4gUmV0dXJuIEBzdG9yYWdlLgorICoJVGhlIGRldmljZSBkcml2ZXIgbWF5IHByb3ZpZGUgaXRzIG93biBtZXRob2QgYnkgc2V0dGluZworICoJZGV2LT5uZXRkZXZfb3BzLT5nZXRfc3RhdHM2NCBvciBkZXYtPm5ldGRldl9vcHMtPmdldF9zdGF0czsKKyAqCW90aGVyd2lzZSB0aGUgaW50ZXJuYWwgc3RhdGlzdGljcyBzdHJ1Y3R1cmUgaXMgdXNlZC4KICAqLwotY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmRldl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqZGV2X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0b3JhZ2UpCiB7CiAJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtPm5ldGRldl9vcHM7CiAKLQlpZiAob3BzLT5uZG9fZ2V0X3N0YXRzKQotCQlyZXR1cm4gb3BzLT5uZG9fZ2V0X3N0YXRzKGRldik7Ci0KLQlkZXZfdHhxX3N0YXRzX2ZvbGQoZGV2LCAmZGV2LT5zdGF0cyk7Ci0JcmV0dXJuICZkZXYtPnN0YXRzOworCWlmIChvcHMtPm5kb19nZXRfc3RhdHM2NCkgeworCQltZW1zZXQoc3RvcmFnZSwgMCwgc2l6ZW9mKCpzdG9yYWdlKSk7CisJCXJldHVybiBvcHMtPm5kb19nZXRfc3RhdHM2NChkZXYsIHN0b3JhZ2UpOworCX0KKwlpZiAob3BzLT5uZG9fZ2V0X3N0YXRzKSB7CisJCW5ldGRldl9zdGF0c190b19zdGF0czY0KHN0b3JhZ2UsIG9wcy0+bmRvX2dldF9zdGF0cyhkZXYpKTsKKwkJcmV0dXJuIHN0b3JhZ2U7CisJfQorCW5ldGRldl9zdGF0c190b19zdGF0czY0KHN0b3JhZ2UsICZkZXYtPnN0YXRzKTsKKwlkZXZfdHhxX3N0YXRzX2ZvbGQoZGV2LCBzdG9yYWdlKTsKKwlyZXR1cm4gc3RvcmFnZTsKIH0KIEVYUE9SVF9TWU1CT0woZGV2X2dldF9zdGF0cyk7CiAKQEAgLTU4MDgsNiArNTg1Niw2OCBAQAogCXJldHVybiBidWZmZXI7CiB9CiAKK3N0YXRpYyBpbnQgX19uZXRkZXZfcHJpbnRrKGNvbnN0IGNoYXIgKmxldmVsLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IHZhX2Zvcm1hdCAqdmFmKQoreworCWludCByOworCisJaWYgKGRldiAmJiBkZXYtPmRldi5wYXJlbnQpCisJCXIgPSBkZXZfcHJpbnRrKGxldmVsLCBkZXYtPmRldi5wYXJlbnQsICIlczogJXBWIiwKKwkJCSAgICAgICBuZXRkZXZfbmFtZShkZXYpLCB2YWYpOworCWVsc2UgaWYgKGRldikKKwkJciA9IHByaW50aygiJXMlczogJXBWIiwgbGV2ZWwsIG5ldGRldl9uYW1lKGRldiksIHZhZik7CisJZWxzZQorCQlyID0gcHJpbnRrKCIlcyhOVUxMIG5ldF9kZXZpY2UpOiAlcFYiLCBsZXZlbCwgdmFmKTsKKworCXJldHVybiByOworfQorCitpbnQgbmV0ZGV2X3ByaW50ayhjb25zdCBjaGFyICpsZXZlbCwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKwlzdHJ1Y3QgdmFfZm9ybWF0IHZhZjsKKwl2YV9saXN0IGFyZ3M7CisJaW50IHI7CisKKwl2YV9zdGFydChhcmdzLCBmb3JtYXQpOworCisJdmFmLmZtdCA9IGZvcm1hdDsKKwl2YWYudmEgPSAmYXJnczsKKworCXIgPSBfX25ldGRldl9wcmludGsobGV2ZWwsIGRldiwgJnZhZik7CisJdmFfZW5kKGFyZ3MpOworCisJcmV0dXJuIHI7Cit9CitFWFBPUlRfU1lNQk9MKG5ldGRldl9wcmludGspOworCisjZGVmaW5lIGRlZmluZV9uZXRkZXZfcHJpbnRrX2xldmVsKGZ1bmMsIGxldmVsKQkJCVwKK2ludCBmdW5jKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQlcCit7CQkJCQkJCQlcCisJaW50IHI7CQkJCQkJCVwKKwlzdHJ1Y3QgdmFfZm9ybWF0IHZhZjsJCQkJCVwKKwl2YV9saXN0IGFyZ3M7CQkJCQkJXAorCQkJCQkJCQlcCisJdmFfc3RhcnQoYXJncywgZm10KTsJCQkJCVwKKwkJCQkJCQkJXAorCXZhZi5mbXQgPSBmbXQ7CQkJCQkJXAorCXZhZi52YSA9ICZhcmdzOwkJCQkJCVwKKwkJCQkJCQkJXAorCXIgPSBfX25ldGRldl9wcmludGsobGV2ZWwsIGRldiwgJnZhZik7CQkJXAorCXZhX2VuZChhcmdzKTsJCQkJCQlcCisJCQkJCQkJCVwKKwlyZXR1cm4gcjsJCQkJCQlcCit9CQkJCQkJCQlcCitFWFBPUlRfU1lNQk9MKGZ1bmMpOworCitkZWZpbmVfbmV0ZGV2X3ByaW50a19sZXZlbChuZXRkZXZfZW1lcmcsIEtFUk5fRU1FUkcpOworZGVmaW5lX25ldGRldl9wcmludGtfbGV2ZWwobmV0ZGV2X2FsZXJ0LCBLRVJOX0FMRVJUKTsKK2RlZmluZV9uZXRkZXZfcHJpbnRrX2xldmVsKG5ldGRldl9jcml0LCBLRVJOX0NSSVQpOworZGVmaW5lX25ldGRldl9wcmludGtfbGV2ZWwobmV0ZGV2X2VyciwgS0VSTl9FUlIpOworZGVmaW5lX25ldGRldl9wcmludGtfbGV2ZWwobmV0ZGV2X3dhcm4sIEtFUk5fV0FSTklORyk7CitkZWZpbmVfbmV0ZGV2X3ByaW50a19sZXZlbChuZXRkZXZfbm90aWNlLCBLRVJOX05PVElDRSk7CitkZWZpbmVfbmV0ZGV2X3ByaW50a19sZXZlbChuZXRkZXZfaW5mbywgS0VSTl9JTkZPKTsKKwogc3RhdGljIHZvaWQgX19uZXRfZXhpdCBuZXRkZXZfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJa2ZyZWUobmV0LT5kZXZfbmFtZV9oZWFkKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Ryb3BfbW9uaXRvci5jIGIvbmV0L2NvcmUvZHJvcF9tb25pdG9yLmMKaW5kZXggYWQ0MTUyOS4uMzZlNjAzYyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZHJvcF9tb25pdG9yLmMKKysrIGIvbmV0L2NvcmUvZHJvcF9tb25pdG9yLmMKQEAgLTIyMyw2ICsyMjMsMTEgQEAKIAogCXNwaW5fbG9jaygmdHJhY2Vfc3RhdGVfbG9jayk7CiAKKwlpZiAoc3RhdGUgPT0gdHJhY2Vfc3RhdGUpIHsKKwkJcmMgPSAtRUFHQUlOOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCiAJc3dpdGNoIChzdGF0ZSkgewogCWNhc2UgVFJBQ0VfT046CiAJCXJjIHw9IHJlZ2lzdGVyX3RyYWNlX2tmcmVlX3NrYih0cmFjZV9rZnJlZV9za2JfaGl0LCBOVUxMKTsKQEAgLTI1MSwxMSArMjU2LDEyIEBACiAKIAlpZiAoIXJjKQogCQl0cmFjZV9zdGF0ZSA9IHN0YXRlOworCWVsc2UKKwkJcmMgPSAtRUlOUFJPR1JFU1M7CiAKK291dF91bmxvY2s6CiAJc3Bpbl91bmxvY2soJnRyYWNlX3N0YXRlX2xvY2spOwogCi0JaWYgKHJjKQotCQlyZXR1cm4gLUVJTlBST0dSRVNTOwogCXJldHVybiByYzsKIH0KIApAQCAtMzQxLDkgKzM0Nyw5IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfbmV0X2Ryb3BfbW9uaXRvcih2b2lkKQogewotCWludCBjcHU7Ci0JaW50IHJjLCBpLCByZXQ7CiAJc3RydWN0IHBlcl9jcHVfZG1fZGF0YSAqZGF0YTsKKwlpbnQgY3B1LCByYzsKKwogCXByaW50ayhLRVJOX0lORk8gIkluaXRhbGl6aW5nIG5ldHdvcmsgZHJvcCBtb25pdG9yIHNlcnZpY2VcbiIpOwogCiAJaWYgKHNpemVvZih2b2lkICopID4gOCkgewpAQCAtMzUxLDIxICszNTcsMTIgQEAKIAkJcmV0dXJuIC1FTk9TUEM7CiAJfQogCi0JaWYgKGdlbmxfcmVnaXN0ZXJfZmFtaWx5KCZuZXRfZHJvcF9tb25pdG9yX2ZhbWlseSkgPCAwKSB7CisJcmMgPSBnZW5sX3JlZ2lzdGVyX2ZhbWlseV93aXRoX29wcygmbmV0X2Ryb3BfbW9uaXRvcl9mYW1pbHksCisJCQkJCSAgIGRyb3Btb25fb3BzLAorCQkJCQkgICBBUlJBWV9TSVpFKGRyb3Btb25fb3BzKSk7CisJaWYgKHJjKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGNyZWF0ZSBkcm9wIG1vbml0b3IgbmV0bGluayBmYW1pbHlcbiIpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlyYyA9IC1FRkFVTFQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkcm9wbW9uX29wcyk7IGkrKykgewotCQlyZXQgPSBnZW5sX3JlZ2lzdGVyX29wcygmbmV0X2Ryb3BfbW9uaXRvcl9mYW1pbHksCi0JCQkJCSZkcm9wbW9uX29wc1tpXSk7Ci0JCWlmIChyZXQpIHsKLQkJCXByaW50ayhLRVJOX0NSSVQgIkZhaWxlZCB0byByZWdpc3RlciBvcGVyYXRpb24gJWRcbiIsCi0JCQkJZHJvcG1vbl9vcHNbaV0uY21kKTsKLQkJCWdvdG8gb3V0X3VucmVnOwotCQl9CisJCXJldHVybiByYzsKIAl9CiAKIAlyYyA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmZHJvcG1vbl9uZXRfbm90aWZpZXIpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZHN0LmMgYi9uZXQvY29yZS9kc3QuYwppbmRleCA5OTIwNzIyLi42YzQxYjFmIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kc3QuYworKysgYi9uZXQvY29yZS9kc3QuYwpAQCAtMTk3LDcgKzE5Nyw2IEBACiAJCWRzdC0+aW5wdXQgPSBkc3QtPm91dHB1dCA9IGRzdF9kaXNjYXJkOwogCWRzdC0+b2Jzb2xldGUgPSAyOwogfQotRVhQT1JUX1NZTUJPTChfX2RzdF9mcmVlKTsKIAogdm9pZCBfX2RzdF9mcmVlKHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKIHsKQEAgLTIxMyw2ICsyMTIsNyBAQAogCX0KIAlzcGluX3VubG9ja19iaCgmZHN0X2dhcmJhZ2UubG9jayk7CiB9CitFWFBPUlRfU1lNQk9MKF9fZHN0X2ZyZWUpOwogCiBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfZGVzdHJveShzdHJ1Y3QgZHN0X2VudHJ5ICogZHN0KQogewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZXRodG9vbC5jIGIvbmV0L2NvcmUvZXRodG9vbC5jCmluZGV4IDc1ZTRmZmUuLjdhODUzNjcgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2V0aHRvb2wuYworKysgYi9uZXQvY29yZS9ldGh0b29sLmMKQEAgLTE0NCwzMSArMTQ0LDEzIEBACiB9CiBFWFBPUlRfU1lNQk9MKGV0aHRvb2xfb3BfZ2V0X2ZsYWdzKTsKIAotaW50IGV0aHRvb2xfb3Bfc2V0X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQoraW50IGV0aHRvb2xfb3Bfc2V0X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhLCB1MzIgc3VwcG9ydGVkKQogewotCWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzID0gZGV2LT5ldGh0b29sX29wczsKLQl1bnNpZ25lZCBsb25nIGZlYXR1cmVzID0gZGV2LT5mZWF0dXJlczsKKwlpZiAoZGF0YSAmIH5zdXBwb3J0ZWQpCisJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGRhdGEgJiBFVEhfRkxBR19MUk8pCi0JCWZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOwotCWVsc2UKLQkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfTFJPOwotCi0JaWYgKGRhdGEgJiBFVEhfRkxBR19OVFVQTEUpIHsKLQkJaWYgKCFvcHMtPnNldF9yeF9udHVwbGUpCi0JCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JCWZlYXR1cmVzIHw9IE5FVElGX0ZfTlRVUExFOwotCX0gZWxzZSB7Ci0JCS8qIHNhZmUgdG8gY2xlYXIgcmVnYXJkbGVzcyAqLwotCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9OVFVQTEU7Ci0JfQotCi0JaWYgKGRhdGEgJiBFVEhfRkxBR19SWEhBU0gpCi0JCWZlYXR1cmVzIHw9IE5FVElGX0ZfUlhIQVNIOwotCWVsc2UKLQkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfUlhIQVNIOwotCi0JZGV2LT5mZWF0dXJlcyA9IGZlYXR1cmVzOworCWRldi0+ZmVhdHVyZXMgPSAoKGRldi0+ZmVhdHVyZXMgJiB+ZmxhZ3NfZHVwX2ZlYXR1cmVzKSB8CisJCQkgKGRhdGEgJiBmbGFnc19kdXBfZmVhdHVyZXMpKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woZXRodG9vbF9vcF9zZXRfZmxhZ3MpOwpAQCAtMzk1LDYgKzM3Nyw4MCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IGV0aHRvb2xfZ2V0X3J4ZmhfaW5kaXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJCSAgICAgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQoreworCXN0cnVjdCBldGh0b29sX3J4ZmhfaW5kaXIgKmluZGlyOworCXUzMiB0YWJsZV9zaXplOworCXNpemVfdCBmdWxsX3NpemU7CisJaW50IHJldDsKKworCWlmICghZGV2LT5ldGh0b29sX29wcy0+Z2V0X3J4ZmhfaW5kaXIpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmdGFibGVfc2l6ZSwKKwkJCSAgIHVzZXJhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IGV0aHRvb2xfcnhmaF9pbmRpciwgc2l6ZSksCisJCQkgICBzaXplb2YodGFibGVfc2l6ZSkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmICh0YWJsZV9zaXplID4KKwkgICAgKEtNQUxMT0NfTUFYX1NJWkUgLSBzaXplb2YoKmluZGlyKSkgLyBzaXplb2YoKmluZGlyLT5yaW5nX2luZGV4KSkKKwkJcmV0dXJuIC1FTk9NRU07CisJZnVsbF9zaXplID0gc2l6ZW9mKCppbmRpcikgKyBzaXplb2YoKmluZGlyLT5yaW5nX2luZGV4KSAqIHRhYmxlX3NpemU7CisJaW5kaXIgPSBrbWFsbG9jKGZ1bGxfc2l6ZSwgR0ZQX1VTRVIpOworCWlmICghaW5kaXIpCisJCXJldHVybiAtRU5PTUVNOworCisJaW5kaXItPmNtZCA9IEVUSFRPT0xfR1JYRkhJTkRJUjsKKwlpbmRpci0+c2l6ZSA9IHRhYmxlX3NpemU7CisJcmV0ID0gZGV2LT5ldGh0b29sX29wcy0+Z2V0X3J4ZmhfaW5kaXIoZGV2LCBpbmRpcik7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCBpbmRpciwgZnVsbF9zaXplKSkKKwkJcmV0ID0gLUVGQVVMVDsKKworb3V0OgorCWtmcmVlKGluZGlyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludCBldGh0b29sX3NldF9yeGZoX2luZGlyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQkgICAgIHZvaWQgX191c2VyICp1c2VyYWRkcikKK3sKKwlzdHJ1Y3QgZXRodG9vbF9yeGZoX2luZGlyICppbmRpcjsKKwl1MzIgdGFibGVfc2l6ZTsKKwlzaXplX3QgZnVsbF9zaXplOworCWludCByZXQ7CisKKwlpZiAoIWRldi0+ZXRodG9vbF9vcHMtPnNldF9yeGZoX2luZGlyKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnRhYmxlX3NpemUsCisJCQkgICB1c2VyYWRkciArIG9mZnNldG9mKHN0cnVjdCBldGh0b29sX3J4ZmhfaW5kaXIsIHNpemUpLAorCQkJICAgc2l6ZW9mKHRhYmxlX3NpemUpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAodGFibGVfc2l6ZSA+CisJICAgIChLTUFMTE9DX01BWF9TSVpFIC0gc2l6ZW9mKCppbmRpcikpIC8gc2l6ZW9mKCppbmRpci0+cmluZ19pbmRleCkpCisJCXJldHVybiAtRU5PTUVNOworCWZ1bGxfc2l6ZSA9IHNpemVvZigqaW5kaXIpICsgc2l6ZW9mKCppbmRpci0+cmluZ19pbmRleCkgKiB0YWJsZV9zaXplOworCWluZGlyID0ga21hbGxvYyhmdWxsX3NpemUsIEdGUF9VU0VSKTsKKwlpZiAoIWluZGlyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihpbmRpciwgdXNlcmFkZHIsIGZ1bGxfc2l6ZSkpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gZGV2LT5ldGh0b29sX29wcy0+c2V0X3J4ZmhfaW5kaXIoZGV2LCBpbmRpcik7CisKK291dDoKKwlrZnJlZShpbmRpcik7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHZvaWQgX19yeF9udHVwbGVfZmlsdGVyX2FkZChzdHJ1Y3QgZXRodG9vbF9yeF9udHVwbGVfbGlzdCAqbGlzdCwKIAkJCXN0cnVjdCBldGh0b29sX3J4X250dXBsZV9mbG93X3NwZWMgKnNwZWMsCiAJCQlzdHJ1Y3QgZXRodG9vbF9yeF9udHVwbGVfZmxvd19zcGVjX2NvbnRhaW5lciAqZnNjKQpAQCAtMTU2Myw2ICsxNjE5LDEyIEBACiAJY2FzZSBFVEhUT09MX0dTU0VUX0lORk86CiAJCXJjID0gZXRodG9vbF9nZXRfc3NldF9pbmZvKGRldiwgdXNlcmFkZHIpOwogCQlicmVhazsKKwljYXNlIEVUSFRPT0xfR1JYRkhJTkRJUjoKKwkJcmMgPSBldGh0b29sX2dldF9yeGZoX2luZGlyKGRldiwgdXNlcmFkZHIpOworCQlicmVhazsKKwljYXNlIEVUSFRPT0xfU1JYRkhJTkRJUjoKKwkJcmMgPSBldGh0b29sX3NldF9yeGZoX2luZGlyKGRldiwgdXNlcmFkZHIpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyYyA9IC1FT1BOT1RTVVBQOwogCX0KZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggZGE2OWZiNy4uNTJiMDUxZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmMKKysrIGIvbmV0L2NvcmUvZmlsdGVyLmMKQEAgLTEyOCw4NyArMTI4LDg3IEBACiAJCWZlbnRyeSA9ICZmaWx0ZXJbcGNdOwogCiAJCXN3aXRjaCAoZmVudHJ5LT5jb2RlKSB7Ci0JCWNhc2UgQlBGX0FMVXxCUEZfQUREfEJQRl9YOgorCQljYXNlIEJQRl9TX0FMVV9BRERfWDoKIAkJCUEgKz0gWDsKIAkJCWNvbnRpbnVlOwotCQljYXNlIEJQRl9BTFV8QlBGX0FERHxCUEZfSzoKKwkJY2FzZSBCUEZfU19BTFVfQUREX0s6CiAJCQlBICs9IGZlbnRyeS0+azsKIAkJCWNvbnRpbnVlOwotCQljYXNlIEJQRl9BTFV8QlBGX1NVQnxCUEZfWDoKKwkJY2FzZSBCUEZfU19BTFVfU1VCX1g6CiAJCQlBIC09IFg7CiAJCQljb250aW51ZTsKLQkJY2FzZSBCUEZfQUxVfEJQRl9TVUJ8QlBGX0s6CisJCWNhc2UgQlBGX1NfQUxVX1NVQl9LOgogCQkJQSAtPSBmZW50cnktPms7CiAJCQljb250aW51ZTsKLQkJY2FzZSBCUEZfQUxVfEJQRl9NVUx8QlBGX1g6CisJCWNhc2UgQlBGX1NfQUxVX01VTF9YOgogCQkJQSAqPSBYOwogCQkJY29udGludWU7Ci0JCWNhc2UgQlBGX0FMVXxCUEZfTVVMfEJQRl9LOgorCQljYXNlIEJQRl9TX0FMVV9NVUxfSzoKIAkJCUEgKj0gZmVudHJ5LT5rOwogCQkJY29udGludWU7Ci0JCWNhc2UgQlBGX0FMVXxCUEZfRElWfEJQRl9YOgorCQljYXNlIEJQRl9TX0FMVV9ESVZfWDoKIAkJCWlmIChYID09IDApCiAJCQkJcmV0dXJuIDA7CiAJCQlBIC89IFg7CiAJCQljb250aW51ZTsKLQkJY2FzZSBCUEZfQUxVfEJQRl9ESVZ8QlBGX0s6CisJCWNhc2UgQlBGX1NfQUxVX0RJVl9LOgogCQkJQSAvPSBmZW50cnktPms7CiAJCQljb250aW51ZTsKLQkJY2FzZSBCUEZfQUxVfEJQRl9BTkR8QlBGX1g6CisJCWNhc2UgQlBGX1NfQUxVX0FORF9YOgogCQkJQSAmPSBYOwogCQkJY29udGludWU7Ci0JCWNhc2UgQlBGX0FMVXxCUEZfQU5EfEJQRl9LOgorCQljYXNlIEJQRl9TX0FMVV9BTkRfSzoKIAkJCUEgJj0gZmVudHJ5LT5rOwogCQkJY29udGludWU7Ci0JCWNhc2UgQlBGX0FMVXxCUEZfT1J8QlBGX1g6CisJCWNhc2UgQlBGX1NfQUxVX09SX1g6CiAJCQlBIHw9IFg7CiAJCQljb250aW51ZTsKLQkJY2FzZSBCUEZfQUxVfEJQRl9PUnxCUEZfSzoKKwkJY2FzZSBCUEZfU19BTFVfT1JfSzoKIAkJCUEgfD0gZmVudHJ5LT5rOwogCQkJY29udGludWU7Ci0JCWNhc2UgQlBGX0FMVXxCUEZfTFNIfEJQRl9YOgorCQljYXNlIEJQRl9TX0FMVV9MU0hfWDoKIAkJCUEgPDw9IFg7CiAJCQljb250aW51ZTsKLQkJY2FzZSBCUEZfQUxVfEJQRl9MU0h8QlBGX0s6CisJCWNhc2UgQlBGX1NfQUxVX0xTSF9LOgogCQkJQSA8PD0gZmVudHJ5LT5rOwogCQkJY29udGludWU7Ci0JCWNhc2UgQlBGX0FMVXxCUEZfUlNIfEJQRl9YOgorCQljYXNlIEJQRl9TX0FMVV9SU0hfWDoKIAkJCUEgPj49IFg7CiAJCQljb250aW51ZTsKLQkJY2FzZSBCUEZfQUxVfEJQRl9SU0h8QlBGX0s6CisJCWNhc2UgQlBGX1NfQUxVX1JTSF9LOgogCQkJQSA+Pj0gZmVudHJ5LT5rOwogCQkJY29udGludWU7Ci0JCWNhc2UgQlBGX0FMVXxCUEZfTkVHOgorCQljYXNlIEJQRl9TX0FMVV9ORUc6CiAJCQlBID0gLUE7CiAJCQljb250aW51ZTsKLQkJY2FzZSBCUEZfSk1QfEJQRl9KQToKKwkJY2FzZSBCUEZfU19KTVBfSkE6CiAJCQlwYyArPSBmZW50cnktPms7CiAJCQljb250aW51ZTsKLQkJY2FzZSBCUEZfSk1QfEJQRl9KR1R8QlBGX0s6CisJCWNhc2UgQlBGX1NfSk1QX0pHVF9LOgogCQkJcGMgKz0gKEEgPiBmZW50cnktPmspID8gZmVudHJ5LT5qdCA6IGZlbnRyeS0+amY7CiAJCQljb250aW51ZTsKLQkJY2FzZSBCUEZfSk1QfEJQRl9KR0V8QlBGX0s6CisJCWNhc2UgQlBGX1NfSk1QX0pHRV9LOgogCQkJcGMgKz0gKEEgPj0gZmVudHJ5LT5rKSA/IGZlbnRyeS0+anQgOiBmZW50cnktPmpmOwogCQkJY29udGludWU7Ci0JCWNhc2UgQlBGX0pNUHxCUEZfSkVRfEJQRl9LOgorCQljYXNlIEJQRl9TX0pNUF9KRVFfSzoKIAkJCXBjICs9IChBID09IGZlbnRyeS0+aykgPyBmZW50cnktPmp0IDogZmVudHJ5LT5qZjsKIAkJCWNvbnRpbnVlOwotCQljYXNlIEJQRl9KTVB8QlBGX0pTRVR8QlBGX0s6CisJCWNhc2UgQlBGX1NfSk1QX0pTRVRfSzoKIAkJCXBjICs9IChBICYgZmVudHJ5LT5rKSA/IGZlbnRyeS0+anQgOiBmZW50cnktPmpmOwogCQkJY29udGludWU7Ci0JCWNhc2UgQlBGX0pNUHxCUEZfSkdUfEJQRl9YOgorCQljYXNlIEJQRl9TX0pNUF9KR1RfWDoKIAkJCXBjICs9IChBID4gWCkgPyBmZW50cnktPmp0IDogZmVudHJ5LT5qZjsKIAkJCWNvbnRpbnVlOwotCQljYXNlIEJQRl9KTVB8QlBGX0pHRXxCUEZfWDoKKwkJY2FzZSBCUEZfU19KTVBfSkdFX1g6CiAJCQlwYyArPSAoQSA+PSBYKSA/IGZlbnRyeS0+anQgOiBmZW50cnktPmpmOwogCQkJY29udGludWU7Ci0JCWNhc2UgQlBGX0pNUHxCUEZfSkVRfEJQRl9YOgorCQljYXNlIEJQRl9TX0pNUF9KRVFfWDoKIAkJCXBjICs9IChBID09IFgpID8gZmVudHJ5LT5qdCA6IGZlbnRyeS0+amY7CiAJCQljb250aW51ZTsKLQkJY2FzZSBCUEZfSk1QfEJQRl9KU0VUfEJQRl9YOgorCQljYXNlIEJQRl9TX0pNUF9KU0VUX1g6CiAJCQlwYyArPSAoQSAmIFgpID8gZmVudHJ5LT5qdCA6IGZlbnRyeS0+amY7CiAJCQljb250aW51ZTsKLQkJY2FzZSBCUEZfTER8QlBGX1d8QlBGX0FCUzoKKwkJY2FzZSBCUEZfU19MRF9XX0FCUzoKIAkJCWsgPSBmZW50cnktPms7CiBsb2FkX3c6CiAJCQlwdHIgPSBsb2FkX3BvaW50ZXIoc2tiLCBrLCA0LCAmdG1wKTsKQEAgLTIxNyw3ICsyMTcsNyBAQAogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX0xEfEJQRl9IfEJQRl9BQlM6CisJCWNhc2UgQlBGX1NfTERfSF9BQlM6CiAJCQlrID0gZmVudHJ5LT5rOwogbG9hZF9oOgogCQkJcHRyID0gbG9hZF9wb2ludGVyKHNrYiwgaywgMiwgJnRtcCk7CkBAIC0yMjYsNyArMjI2LDcgQEAKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWJyZWFrOwotCQljYXNlIEJQRl9MRHxCUEZfQnxCUEZfQUJTOgorCQljYXNlIEJQRl9TX0xEX0JfQUJTOgogCQkJayA9IGZlbnRyeS0+azsKIGxvYWRfYjoKIAkJCXB0ciA9IGxvYWRfcG9pbnRlcihza2IsIGssIDEsICZ0bXApOwpAQCAtMjM1LDU0ICsyMzUsNTQgQEAKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWJyZWFrOwotCQljYXNlIEJQRl9MRHxCUEZfV3xCUEZfTEVOOgorCQljYXNlIEJQRl9TX0xEX1dfTEVOOgogCQkJQSA9IHNrYi0+bGVuOwogCQkJY29udGludWU7Ci0JCWNhc2UgQlBGX0xEWHxCUEZfV3xCUEZfTEVOOgorCQljYXNlIEJQRl9TX0xEWF9XX0xFTjoKIAkJCVggPSBza2ItPmxlbjsKIAkJCWNvbnRpbnVlOwotCQljYXNlIEJQRl9MRHxCUEZfV3xCUEZfSU5EOgorCQljYXNlIEJQRl9TX0xEX1dfSU5EOgogCQkJayA9IFggKyBmZW50cnktPms7CiAJCQlnb3RvIGxvYWRfdzsKLQkJY2FzZSBCUEZfTER8QlBGX0h8QlBGX0lORDoKKwkJY2FzZSBCUEZfU19MRF9IX0lORDoKIAkJCWsgPSBYICsgZmVudHJ5LT5rOwogCQkJZ290byBsb2FkX2g7Ci0JCWNhc2UgQlBGX0xEfEJQRl9CfEJQRl9JTkQ6CisJCWNhc2UgQlBGX1NfTERfQl9JTkQ6CiAJCQlrID0gWCArIGZlbnRyeS0+azsKIAkJCWdvdG8gbG9hZF9iOwotCQljYXNlIEJQRl9MRFh8QlBGX0J8QlBGX01TSDoKKwkJY2FzZSBCUEZfU19MRFhfQl9NU0g6CiAJCQlwdHIgPSBsb2FkX3BvaW50ZXIoc2tiLCBmZW50cnktPmssIDEsICZ0bXApOwogCQkJaWYgKHB0ciAhPSBOVUxMKSB7CiAJCQkJWCA9ICgqKHU4ICopcHRyICYgMHhmKSA8PCAyOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJcmV0dXJuIDA7Ci0JCWNhc2UgQlBGX0xEfEJQRl9JTU06CisJCWNhc2UgQlBGX1NfTERfSU1NOgogCQkJQSA9IGZlbnRyeS0+azsKIAkJCWNvbnRpbnVlOwotCQljYXNlIEJQRl9MRFh8QlBGX0lNTToKKwkJY2FzZSBCUEZfU19MRFhfSU1NOgogCQkJWCA9IGZlbnRyeS0+azsKIAkJCWNvbnRpbnVlOwotCQljYXNlIEJQRl9MRHxCUEZfTUVNOgorCQljYXNlIEJQRl9TX0xEX01FTToKIAkJCUEgPSBtZW1bZmVudHJ5LT5rXTsKIAkJCWNvbnRpbnVlOwotCQljYXNlIEJQRl9MRFh8QlBGX01FTToKKwkJY2FzZSBCUEZfU19MRFhfTUVNOgogCQkJWCA9IG1lbVtmZW50cnktPmtdOwogCQkJY29udGludWU7Ci0JCWNhc2UgQlBGX01JU0N8QlBGX1RBWDoKKwkJY2FzZSBCUEZfU19NSVNDX1RBWDoKIAkJCVggPSBBOwogCQkJY29udGludWU7Ci0JCWNhc2UgQlBGX01JU0N8QlBGX1RYQToKKwkJY2FzZSBCUEZfU19NSVNDX1RYQToKIAkJCUEgPSBYOwogCQkJY29udGludWU7Ci0JCWNhc2UgQlBGX1JFVHxCUEZfSzoKKwkJY2FzZSBCUEZfU19SRVRfSzoKIAkJCXJldHVybiBmZW50cnktPms7Ci0JCWNhc2UgQlBGX1JFVHxCUEZfQToKKwkJY2FzZSBCUEZfU19SRVRfQToKIAkJCXJldHVybiBBOwotCQljYXNlIEJQRl9TVDoKKwkJY2FzZSBCUEZfU19TVDoKIAkJCW1lbVtmZW50cnktPmtdID0gQTsKIAkJCWNvbnRpbnVlOwotCQljYXNlIEJQRl9TVFg6CisJCWNhc2UgQlBGX1NfU1RYOgogCQkJbWVtW2ZlbnRyeS0+a10gPSBYOwogCQkJY29udGludWU7CiAJCWRlZmF1bHQ6CkBAIC0zOTAsNTMgKzM5MCwxMjggQEAKIAkJLyogT25seSBhbGxvdyB2YWxpZCBpbnN0cnVjdGlvbnMgKi8KIAkJc3dpdGNoIChmdGVzdC0+Y29kZSkgewogCQljYXNlIEJQRl9BTFV8QlBGX0FERHxCUEZfSzoKKwkJCWZ0ZXN0LT5jb2RlID0gQlBGX1NfQUxVX0FERF9LOworCQkJYnJlYWs7CiAJCWNhc2UgQlBGX0FMVXxCUEZfQUREfEJQRl9YOgorCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19BTFVfQUREX1g7CisJCQlicmVhazsKIAkJY2FzZSBCUEZfQUxVfEJQRl9TVUJ8QlBGX0s6CisJCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0FMVV9TVUJfSzsKKwkJCWJyZWFrOwogCQljYXNlIEJQRl9BTFV8QlBGX1NVQnxCUEZfWDoKKwkJCWZ0ZXN0LT5jb2RlID0gQlBGX1NfQUxVX1NVQl9YOworCQkJYnJlYWs7CiAJCWNhc2UgQlBGX0FMVXxCUEZfTVVMfEJQRl9LOgorCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19BTFVfTVVMX0s7CisJCQlicmVhazsKIAkJY2FzZSBCUEZfQUxVfEJQRl9NVUx8QlBGX1g6CisJCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0FMVV9NVUxfWDsKKwkJCWJyZWFrOwogCQljYXNlIEJQRl9BTFV8QlBGX0RJVnxCUEZfWDoKKwkJCWZ0ZXN0LT5jb2RlID0gQlBGX1NfQUxVX0RJVl9YOworCQkJYnJlYWs7CiAJCWNhc2UgQlBGX0FMVXxCUEZfQU5EfEJQRl9LOgorCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19BTFVfQU5EX0s7CisJCQlicmVhazsKIAkJY2FzZSBCUEZfQUxVfEJQRl9BTkR8QlBGX1g6CisJCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0FMVV9BTkRfWDsKKwkJCWJyZWFrOwogCQljYXNlIEJQRl9BTFV8QlBGX09SfEJQRl9LOgorCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19BTFVfT1JfSzsKKwkJCWJyZWFrOwogCQljYXNlIEJQRl9BTFV8QlBGX09SfEJQRl9YOgorCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19BTFVfT1JfWDsKKwkJCWJyZWFrOwogCQljYXNlIEJQRl9BTFV8QlBGX0xTSHxCUEZfSzoKKwkJCWZ0ZXN0LT5jb2RlID0gQlBGX1NfQUxVX0xTSF9LOworCQkJYnJlYWs7CiAJCWNhc2UgQlBGX0FMVXxCUEZfTFNIfEJQRl9YOgorCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19BTFVfTFNIX1g7CisJCQlicmVhazsKIAkJY2FzZSBCUEZfQUxVfEJQRl9SU0h8QlBGX0s6CisJCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0FMVV9SU0hfSzsKKwkJCWJyZWFrOwogCQljYXNlIEJQRl9BTFV8QlBGX1JTSHxCUEZfWDoKKwkJCWZ0ZXN0LT5jb2RlID0gQlBGX1NfQUxVX1JTSF9YOworCQkJYnJlYWs7CiAJCWNhc2UgQlBGX0FMVXxCUEZfTkVHOgorCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19BTFVfTkVHOworCQkJYnJlYWs7CiAJCWNhc2UgQlBGX0xEfEJQRl9XfEJQRl9BQlM6CisJCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0xEX1dfQUJTOworCQkJYnJlYWs7CiAJCWNhc2UgQlBGX0xEfEJQRl9IfEJQRl9BQlM6CisJCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0xEX0hfQUJTOworCQkJYnJlYWs7CiAJCWNhc2UgQlBGX0xEfEJQRl9CfEJQRl9BQlM6CisJCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0xEX0JfQUJTOworCQkJYnJlYWs7CiAJCWNhc2UgQlBGX0xEfEJQRl9XfEJQRl9MRU46CisJCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0xEX1dfTEVOOworCQkJYnJlYWs7CiAJCWNhc2UgQlBGX0xEfEJQRl9XfEJQRl9JTkQ6CisJCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0xEX1dfSU5EOworCQkJYnJlYWs7CiAJCWNhc2UgQlBGX0xEfEJQRl9IfEJQRl9JTkQ6CisJCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0xEX0hfSU5EOworCQkJYnJlYWs7CiAJCWNhc2UgQlBGX0xEfEJQRl9CfEJQRl9JTkQ6CisJCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0xEX0JfSU5EOworCQkJYnJlYWs7CiAJCWNhc2UgQlBGX0xEfEJQRl9JTU06CisJCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0xEX0lNTTsKKwkJCWJyZWFrOwogCQljYXNlIEJQRl9MRFh8QlBGX1d8QlBGX0xFTjoKKwkJCWZ0ZXN0LT5jb2RlID0gQlBGX1NfTERYX1dfTEVOOworCQkJYnJlYWs7CiAJCWNhc2UgQlBGX0xEWHxCUEZfQnxCUEZfTVNIOgorCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19MRFhfQl9NU0g7CisJCQlicmVhazsKIAkJY2FzZSBCUEZfTERYfEJQRl9JTU06CisJCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0xEWF9JTU07CisJCQlicmVhazsKIAkJY2FzZSBCUEZfTUlTQ3xCUEZfVEFYOgorCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19NSVNDX1RBWDsKKwkJCWJyZWFrOwogCQljYXNlIEJQRl9NSVNDfEJQRl9UWEE6CisJCQlmdGVzdC0+Y29kZSA9IEJQRl9TX01JU0NfVFhBOworCQkJYnJlYWs7CiAJCWNhc2UgQlBGX1JFVHxCUEZfSzoKKwkJCWZ0ZXN0LT5jb2RlID0gQlBGX1NfUkVUX0s7CisJCQlicmVhazsKIAkJY2FzZSBCUEZfUkVUfEJQRl9BOgorCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19SRVRfQTsKIAkJCWJyZWFrOwogCiAJCS8qIFNvbWUgaW5zdHJ1Y3Rpb25zIG5lZWQgc3BlY2lhbCBjaGVja3MgKi8KIAotCQljYXNlIEJQRl9BTFV8QlBGX0RJVnxCUEZfSzoKIAkJCS8qIGNoZWNrIGZvciBkaXZpc2lvbiBieSB6ZXJvICovCisJCWNhc2UgQlBGX0FMVXxCUEZfRElWfEJQRl9LOgogCQkJaWYgKGZ0ZXN0LT5rID09IDApCiAJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0FMVV9ESVZfSzsKIAkJCWJyZWFrOwogCisJCS8qIGNoZWNrIGZvciBpbnZhbGlkIG1lbW9yeSBhZGRyZXNzZXMgKi8KIAkJY2FzZSBCUEZfTER8QlBGX01FTToKLQkJY2FzZSBCUEZfTERYfEJQRl9NRU06Ci0JCWNhc2UgQlBGX1NUOgotCQljYXNlIEJQRl9TVFg6Ci0JCQkvKiBjaGVjayBmb3IgaW52YWxpZCBtZW1vcnkgYWRkcmVzc2VzICovCiAJCQlpZiAoZnRlc3QtPmsgPj0gQlBGX01FTVdPUkRTKQogCQkJCXJldHVybiAtRUlOVkFMOworCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19MRF9NRU07CisJCQlicmVhazsKKwkJY2FzZSBCUEZfTERYfEJQRl9NRU06CisJCQlpZiAoZnRlc3QtPmsgPj0gQlBGX01FTVdPUkRTKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19MRFhfTUVNOworCQkJYnJlYWs7CisJCWNhc2UgQlBGX1NUOgorCQkJaWYgKGZ0ZXN0LT5rID49IEJQRl9NRU1XT1JEUykKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWZ0ZXN0LT5jb2RlID0gQlBGX1NfU1Q7CisJCQlicmVhazsKKwkJY2FzZSBCUEZfU1RYOgorCQkJaWYgKGZ0ZXN0LT5rID49IEJQRl9NRU1XT1JEUykKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWZ0ZXN0LT5jb2RlID0gQlBGX1NfU1RYOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBCUEZfSk1QfEJQRl9KQToKQEAgLTQ0NywyOCArNTIyLDYzIEBACiAJCQkgKi8KIAkJCWlmIChmdGVzdC0+ayA+PSAodW5zaWduZWQpKGZsZW4tcGMtMSkpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0pNUF9KQTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgQlBGX0pNUHxCUEZfSkVRfEJQRl9LOgorCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19KTVBfSkVRX0s7CisJCQlicmVhazsKIAkJY2FzZSBCUEZfSk1QfEJQRl9KRVF8QlBGX1g6CisJCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0pNUF9KRVFfWDsKKwkJCWJyZWFrOwogCQljYXNlIEJQRl9KTVB8QlBGX0pHRXxCUEZfSzoKKwkJCWZ0ZXN0LT5jb2RlID0gQlBGX1NfSk1QX0pHRV9LOworCQkJYnJlYWs7CiAJCWNhc2UgQlBGX0pNUHxCUEZfSkdFfEJQRl9YOgorCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19KTVBfSkdFX1g7CisJCQlicmVhazsKIAkJY2FzZSBCUEZfSk1QfEJQRl9KR1R8QlBGX0s6CisJCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0pNUF9KR1RfSzsKKwkJCWJyZWFrOwogCQljYXNlIEJQRl9KTVB8QlBGX0pHVHxCUEZfWDoKKwkJCWZ0ZXN0LT5jb2RlID0gQlBGX1NfSk1QX0pHVF9YOworCQkJYnJlYWs7CiAJCWNhc2UgQlBGX0pNUHxCUEZfSlNFVHxCUEZfSzoKKwkJCWZ0ZXN0LT5jb2RlID0gQlBGX1NfSk1QX0pTRVRfSzsKKwkJCWJyZWFrOwogCQljYXNlIEJQRl9KTVB8QlBGX0pTRVR8QlBGX1g6Ci0JCQkvKiBmb3IgY29uZGl0aW9uYWxzIGJvdGggbXVzdCBiZSBzYWZlICovCi0JCQlpZiAocGMgKyBmdGVzdC0+anQgKyAxID49IGZsZW4gfHwKLQkJCSAgICBwYyArIGZ0ZXN0LT5qZiArIDEgPj0gZmxlbikKLQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWZ0ZXN0LT5jb2RlID0gQlBGX1NfSk1QX0pTRVRfWDsKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQorCisJCQkvKiBmb3IgY29uZGl0aW9uYWxzIGJvdGggbXVzdCBiZSBzYWZlICovCisJCXN3aXRjaCAoZnRlc3QtPmNvZGUpIHsKKwkJY2FzZSBCUEZfU19KTVBfSkVRX0s6CisJCWNhc2UgQlBGX1NfSk1QX0pFUV9YOgorCQljYXNlIEJQRl9TX0pNUF9KR0VfSzoKKwkJY2FzZSBCUEZfU19KTVBfSkdFX1g6CisJCWNhc2UgQlBGX1NfSk1QX0pHVF9LOgorCQljYXNlIEJQRl9TX0pNUF9KR1RfWDoKKwkJY2FzZSBCUEZfU19KTVBfSlNFVF9YOgorCQljYXNlIEJQRl9TX0pNUF9KU0VUX0s6CisJCQlpZiAocGMgKyBmdGVzdC0+anQgKyAxID49IGZsZW4gfHwKKwkJCSAgICBwYyArIGZ0ZXN0LT5qZiArIDEgPj0gZmxlbikKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCX0KIAotCXJldHVybiAoQlBGX0NMQVNTKGZpbHRlcltmbGVuIC0gMV0uY29kZSkgPT0gQlBGX1JFVCkgPyAwIDogLUVJTlZBTDsKKwkvKiBsYXN0IGluc3RydWN0aW9uIG11c3QgYmUgYSBSRVQgY29kZSAqLworCXN3aXRjaCAoZmlsdGVyW2ZsZW4gLSAxXS5jb2RlKSB7CisJY2FzZSBCUEZfU19SRVRfSzoKKwljYXNlIEJQRl9TX1JFVF9BOgorCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogfQogRVhQT1JUX1NZTUJPTChza19jaGtfZmlsdGVyKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmxvdy5jIGIvbmV0L2NvcmUvZmxvdy5jCmluZGV4IDE2MTkwMDYuLmY2N2RjYmYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Zsb3cuYworKysgYi9uZXQvY29yZS9mbG93LmMKQEAgLTYyLDYgKzYyLDcgQEAKIH07CiAKIGF0b21pY190IGZsb3dfY2FjaGVfZ2VuaWQgPSBBVE9NSUNfSU5JVCgwKTsKK0VYUE9SVF9TWU1CT0woZmxvd19jYWNoZV9nZW5pZCk7CiBzdGF0aWMgc3RydWN0IGZsb3dfY2FjaGUgZmxvd19jYWNoZV9nbG9iYWw7CiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmZsb3dfY2FjaGVwOwogCkBAIC0yMjIsNyArMjIzLDcgQEAKIAl1bnNpZ25lZCBpbnQgaGFzaDsKIAogCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlmY3AgPSBwZXJfY3B1X3B0cihmYy0+cGVyY3B1LCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCWZjcCA9IHRoaXNfY3B1X3B0cihmYy0+cGVyY3B1KTsKIAogCWZsZSA9IE5VTEw7CiAJZmxvID0gTlVMTDsKQEAgLTI5MSw2ICsyOTIsNyBAQAogCWxvY2FsX2JoX2VuYWJsZSgpOwogCXJldHVybiBmbG87CiB9CitFWFBPUlRfU1lNQk9MKGZsb3dfY2FjaGVfbG9va3VwKTsKIAogc3RhdGljIHZvaWQgZmxvd19jYWNoZV9mbHVzaF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKQEAgLTMwMiw3ICszMDQsNyBAQAogCUxJU1RfSEVBRChnY19saXN0KTsKIAlpbnQgaSwgZGVsZXRlZCA9IDA7CiAKLQlmY3AgPSBwZXJfY3B1X3B0cihmYy0+cGVyY3B1LCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCWZjcCA9IHRoaXNfY3B1X3B0cihmYy0+cGVyY3B1KTsKIAlmb3IgKGkgPSAwOyBpIDwgZmxvd19jYWNoZV9oYXNoX3NpemUoZmMpOyBpKyspIHsKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmbGUsIGVudHJ5LCB0bXAsCiAJCQkJCSAgJmZjcC0+aGFzaF90YWJsZVtpXSwgdS5obGlzdCkgewpAQCAtNDI0LDYgKzQyNiwzIEBACiB9CiAKIG1vZHVsZV9pbml0KGZsb3dfY2FjaGVfaW5pdF9nbG9iYWwpOwotCi1FWFBPUlRfU1lNQk9MKGZsb3dfY2FjaGVfZ2VuaWQpOwotRVhQT1JUX1NZTUJPTChmbG93X2NhY2hlX2xvb2t1cCk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9nZW5fZXN0aW1hdG9yLmMgYi9uZXQvY29yZS9nZW5fZXN0aW1hdG9yLmMKaW5kZXggNzg1ZTUyNy4uOWZiZTdmNyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZ2VuX2VzdGltYXRvci5jCisrKyBiL25ldC9jb3JlL2dlbl9lc3RpbWF0b3IuYwpAQCAtMjYzLDYgKzI2Myw3IEBACiAgKgogICogUmVtb3ZlcyB0aGUgcmF0ZSBlc3RpbWF0b3Igc3BlY2lmaWVkIGJ5ICZic3RhdHMgYW5kICZyYXRlX2VzdC4KICAqCisgKiBOb3RlIDogQ2FsbGVyIHNob3VsZCByZXNwZWN0IGFuIFJDVSBncmFjZSBwZXJpb2QgYmVmb3JlIGZyZWVpbmcgc3RhdHNfbG9jawogICovCiB2b2lkIGdlbl9raWxsX2VzdGltYXRvcihzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpY19wYWNrZWQgKmJzdGF0cywKIAkJCXN0cnVjdCBnbmV0X3N0YXRzX3JhdGVfZXN0ICpyYXRlX2VzdCkKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2dlbl9zdGF0cy5jIGIvbmV0L2NvcmUvZ2VuX3N0YXRzLmMKaW5kZXggMzkzYjFkOC4uMDQ1MmViMiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZ2VuX3N0YXRzLmMKKysrIGIvbmV0L2NvcmUvZ2VuX3N0YXRzLmMKQEAgLTczLDYgKzczLDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChnbmV0X3N0YXRzX3N0YXJ0X2NvcHlfY29tcGF0KTsKIAogLyoqCiAgKiBnbmV0X3N0YXRzX3N0YXJ0X2NvcHlfY29tcGF0IC0gc3RhcnQgZHVtcGluZyBwcm9jZWR1cmUgaW4gY29tcGF0aWJpbGl0eSBtb2RlCkBAIC05Myw2ICs5NCw3IEBACiB7CiAJcmV0dXJuIGduZXRfc3RhdHNfc3RhcnRfY29weV9jb21wYXQoc2tiLCB0eXBlLCAwLCAwLCBsb2NrLCBkKTsKIH0KK0VYUE9SVF9TWU1CT0woZ25ldF9zdGF0c19zdGFydF9jb3B5KTsKIAogLyoqCiAgKiBnbmV0X3N0YXRzX2NvcHlfYmFzaWMgLSBjb3B5IGJhc2ljIHN0YXRpc3RpY3MgaW50byBzdGF0aXN0aWMgVExWCkBAIC0xMjMsNiArMTI1LDcgQEAKIAl9CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGduZXRfc3RhdHNfY29weV9iYXNpYyk7CiAKIC8qKgogICogZ25ldF9zdGF0c19jb3B5X3JhdGVfZXN0IC0gY29weSByYXRlIGVzdGltYXRvciBzdGF0aXN0aWNzIGludG8gc3RhdGlzdGljcyBUTFYKQEAgLTE1NCw2ICsxNTcsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGduZXRfc3RhdHNfY29weV9yYXRlX2VzdCk7CiAKIC8qKgogICogZ25ldF9zdGF0c19jb3B5X3F1ZXVlIC0gY29weSBxdWV1ZSBzdGF0aXN0aWNzIGludG8gc3RhdGlzdGljcyBUTFYKQEAgLTE4MSw2ICsxODUsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGduZXRfc3RhdHNfY29weV9xdWV1ZSk7CiAKIC8qKgogICogZ25ldF9zdGF0c19jb3B5X2FwcCAtIGNvcHkgYXBwbGljYXRpb24gc3BlY2lmaWMgc3RhdGlzdGljcyBpbnRvIHN0YXRpc3RpY3MgVExWCkBAIC0yMDgsNiArMjEzLDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChnbmV0X3N0YXRzX2NvcHlfYXBwKTsKIAogLyoqCiAgKiBnbmV0X3N0YXRzX2ZpbmlzaF9jb3B5IC0gZmluaXNoIGR1bXBpbmcgcHJvY2VkdXJlCkBAIC0yNDEsMTIgKzI0Nyw0IEBACiAJc3Bpbl91bmxvY2tfYmgoZC0+bG9jayk7CiAJcmV0dXJuIDA7CiB9Ci0KLQotRVhQT1JUX1NZTUJPTChnbmV0X3N0YXRzX3N0YXJ0X2NvcHkpOwotRVhQT1JUX1NZTUJPTChnbmV0X3N0YXRzX3N0YXJ0X2NvcHlfY29tcGF0KTsKLUVYUE9SVF9TWU1CT0woZ25ldF9zdGF0c19jb3B5X2Jhc2ljKTsKLUVYUE9SVF9TWU1CT0woZ25ldF9zdGF0c19jb3B5X3JhdGVfZXN0KTsKLUVYUE9SVF9TWU1CT0woZ25ldF9zdGF0c19jb3B5X3F1ZXVlKTsKLUVYUE9SVF9TWU1CT0woZ25ldF9zdGF0c19jb3B5X2FwcCk7CiBFWFBPUlRfU1lNQk9MKGduZXRfc3RhdHNfZmluaXNoX2NvcHkpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvaW92ZWMuYyBiL25ldC9jb3JlL2lvdmVjLmMKaW5kZXggMWU3ZjRlOS4uMWNkOThkZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvaW92ZWMuYworKysgYi9uZXQvY29yZS9pb3ZlYy5jCkBAIC05NSw2ICs5NSw3IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0wobWVtY3B5X3RvaW92ZWMpOwogCiAvKgogICoJQ29weSBrZXJuZWwgdG8gaW92ZWMuIFJldHVybnMgLUVGQVVMVCBvbiBlcnJvci4KQEAgLTEyMCw2ICsxMjEsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKG1lbWNweV90b2lvdmVjZW5kKTsKIAogLyoKICAqCUNvcHkgaW92ZWMgdG8ga2VybmVsLiBSZXR1cm5zIC1FRkFVTFQgb24gZXJyb3IuCkBAIC0xNDQsNiArMTQ2LDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChtZW1jcHlfZnJvbWlvdmVjKTsKIAogLyoKICAqCUNvcHkgaW92ZWMgZnJvbSBrZXJuZWwuIFJldHVybnMgLUVGQVVMVCBvbiBlcnJvci4KQEAgLTE3Miw2ICsxNzUsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKG1lbWNweV9mcm9taW92ZWNlbmQpOwogCiAvKgogICoJQW5kIG5vdyBmb3IgdGhlIGFsbC1pbi1vbmU6IGNvcHkgYW5kIGNoZWNrc3VtIGZyb20gYSB1c2VyIGlvdmVjCkBAIC0yNTYsOSArMjYwLDQgQEAKIAllcnIgPSAtRUZBVUxUOwogCWdvdG8gb3V0OwogfQotCiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbF9jb3B5X2Zyb21pb3ZlY2VuZCk7Ci1FWFBPUlRfU1lNQk9MKG1lbWNweV9mcm9taW92ZWMpOwotRVhQT1JUX1NZTUJPTChtZW1jcHlfZnJvbWlvdmVjZW5kKTsKLUVYUE9SVF9TWU1CT0wobWVtY3B5X3RvaW92ZWMpOwotRVhQT1JUX1NZTUJPTChtZW1jcHlfdG9pb3ZlY2VuZCk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9saW5rX3dhdGNoLmMgYi9uZXQvY29yZS9saW5rX3dhdGNoLmMKaW5kZXggYmRiY2UyZi4uMDFhMTEwMSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbGlua193YXRjaC5jCisrKyBiL25ldC9jb3JlL2xpbmtfd2F0Y2guYwpAQCAtMjQzLDUgKzI0Myw0IEBACiAKIAlsaW5rd2F0Y2hfc2NoZWR1bGVfd29yayh1cmdlbnQpOwogfQotCiBFWFBPUlRfU1lNQk9MKGxpbmt3YXRjaF9maXJlX2V2ZW50KTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25laWdoYm91ci5jIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKaW5kZXggNmJhMWMwZS4uYTRlMGE3NCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMKKysrIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKQEAgLTk0OSw3ICs5NDksMTAgQEAKIHsKIAlzdHJ1Y3QgaGhfY2FjaGUgKmhoOwogCXZvaWQgKCp1cGRhdGUpKHN0cnVjdCBoaF9jYWNoZSosIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlKiwgY29uc3QgdW5zaWduZWQgY2hhciAqKQotCQk9IG5laWdoLT5kZXYtPmhlYWRlcl9vcHMtPmNhY2hlX3VwZGF0ZTsKKwkJPSBOVUxMOworCisJaWYgKG5laWdoLT5kZXYtPmhlYWRlcl9vcHMpCisJCXVwZGF0ZSA9IG5laWdoLT5kZXYtPmhlYWRlcl9vcHMtPmNhY2hlX3VwZGF0ZTsKIAogCWlmICh1cGRhdGUpIHsKIAkJZm9yIChoaCA9IG5laWdoLT5oaDsgaGg7IGhoID0gaGgtPmhoX25leHQpIHsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldC1zeXNmcy5jIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKaW5kZXggOTllNzA1Mi4uYWY0ZGZiYSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKKysrIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKQEAgLTI5LDYgKzI5LDcgQEAKIHN0YXRpYyBjb25zdCBjaGFyIGZtdF9sb25nX2hleFtdID0gIiUjbHhcbiI7CiBzdGF0aWMgY29uc3QgY2hhciBmbXRfZGVjW10gPSAiJWRcbiI7CiBzdGF0aWMgY29uc3QgY2hhciBmbXRfdWxvbmdbXSA9ICIlbHVcbiI7CitzdGF0aWMgY29uc3QgY2hhciBmbXRfdTY0W10gPSAiJWxsdVxuIjsKIAogc3RhdGljIGlubGluZSBpbnQgZGV2X2lzYWxpdmUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTk0LDYgKzk1LDcgQEAKIH0KIAogTkVUREVWSUNFX1NIT1coZGV2X2lkLCBmbXRfaGV4KTsKK05FVERFVklDRV9TSE9XKGFkZHJfYXNzaWduX3R5cGUsIGZtdF9kZWMpOwogTkVUREVWSUNFX1NIT1coYWRkcl9sZW4sIGZtdF9kZWMpOwogTkVUREVWSUNFX1NIT1coaWZsaW5rLCBmbXRfZGVjKTsKIE5FVERFVklDRV9TSE9XKGlmaW5kZXgsIGZtdF9kZWMpOwpAQCAtMjk0LDYgKzI5Niw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBuZXRfY2xhc3NfYXR0cmlidXRlc1tdID0geworCV9fQVRUUihhZGRyX2Fzc2lnbl90eXBlLCBTX0lSVUdPLCBzaG93X2FkZHJfYXNzaWduX3R5cGUsIE5VTEwpLAogCV9fQVRUUihhZGRyX2xlbiwgU19JUlVHTywgc2hvd19hZGRyX2xlbiwgTlVMTCksCiAJX19BVFRSKGRldl9pZCwgU19JUlVHTywgc2hvd19kZXZfaWQsIE5VTEwpLAogCV9fQVRUUihpZmFsaWFzLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19pZmFsaWFzLCBzdG9yZV9pZmFsaWFzKSwKQEAgLTMyNCwxNCArMzI3LDE1IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHRvX25ldF9kZXYoZCk7CiAJc3NpemVfdCByZXQgPSAtRUlOVkFMOwogCi0JV0FSTl9PTihvZmZzZXQgPiBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpIHx8Ci0JCQlvZmZzZXQgJSBzaXplb2YodW5zaWduZWQgbG9uZykgIT0gMCk7CisJV0FSTl9PTihvZmZzZXQgPiBzaXplb2Yoc3RydWN0IHJ0bmxfbGlua19zdGF0czY0KSB8fAorCQkJb2Zmc2V0ICUgc2l6ZW9mKHU2NCkgIT0gMCk7CiAKIAlyZWFkX2xvY2soJmRldl9iYXNlX2xvY2spOwogCWlmIChkZXZfaXNhbGl2ZShkZXYpKSB7Ci0JCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IGRldl9nZXRfc3RhdHMoZGV2KTsKLQkJcmV0ID0gc3ByaW50ZihidWYsIGZtdF91bG9uZywKLQkJCSAgICAgICoodW5zaWduZWQgbG9uZyAqKSgoKHU4ICopIHN0YXRzKSArIG9mZnNldCkpOworCQlzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgdGVtcDsKKwkJY29uc3Qgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cyA9IGRldl9nZXRfc3RhdHMoZGV2LCAmdGVtcCk7CisKKwkJcmV0ID0gc3ByaW50ZihidWYsIGZtdF91NjQsICoodTY0ICopKCgodTggKikgc3RhdHMpICsgb2Zmc2V0KSk7CiAJfQogCXJlYWRfdW5sb2NrKCZkZXZfYmFzZV9sb2NrKTsKIAlyZXR1cm4gcmV0OwpAQCAtMzQzLDcgKzM0Nyw3IEBACiAJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKSAJXAogewkJCQkJCQkJCVwKIAlyZXR1cm4gbmV0c3RhdF9zaG93KGQsIGF0dHIsIGJ1ZiwJCQkJXAotCQkJICAgIG9mZnNldG9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzLCBuYW1lKSk7CVwKKwkJCSAgICBvZmZzZXRvZihzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQsIG5hbWUpKTsJXAogfQkJCQkJCQkJCVwKIHN0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93XyMjbmFtZSwgTlVMTCkKIApAQCAtOTIyLDEzICs5MjYsMTIgQEAKIHsKIAlyZXR1cm4gY2xhc3NfY3JlYXRlX2ZpbGUoJm5ldF9jbGFzcywgY2xhc3NfYXR0cik7CiB9CitFWFBPUlRfU1lNQk9MKG5ldGRldl9jbGFzc19jcmVhdGVfZmlsZSk7CiAKIHZvaWQgbmV0ZGV2X2NsYXNzX3JlbW92ZV9maWxlKHN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgKmNsYXNzX2F0dHIpCiB7CiAJY2xhc3NfcmVtb3ZlX2ZpbGUoJm5ldF9jbGFzcywgY2xhc3NfYXR0cik7CiB9Ci0KLUVYUE9SVF9TWU1CT0wobmV0ZGV2X2NsYXNzX2NyZWF0ZV9maWxlKTsKIEVYUE9SVF9TWU1CT0wobmV0ZGV2X2NsYXNzX3JlbW92ZV9maWxlKTsKIAogaW50IG5ldGRldl9rb2JqZWN0X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldGV2ZW50LmMgYi9uZXQvY29yZS9uZXRldmVudC5jCmluZGV4IDk1ZjgxZGUuLjg2NWYwY2UgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldGV2ZW50LmMKKysrIGIvbmV0L2NvcmUvbmV0ZXZlbnQuYwpAQCAtMzUsNiArMzUsNyBAQAogCWVyciA9IGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmbmV0ZXZlbnRfbm90aWZfY2hhaW4sIG5iKTsKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfbmV0ZXZlbnRfbm90aWZpZXIpOwogCiAvKioKICAqCW5ldGV2ZW50X3VucmVnaXN0ZXJfbm90aWZpZXIgLSB1bnJlZ2lzdGVyIGEgbmV0ZXZlbnQgbm90aWZpZXIgYmxvY2sKQEAgLTUwLDYgKzUxLDcgQEAKIHsKIAlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJm5ldGV2ZW50X25vdGlmX2NoYWluLCBuYik7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1bnJlZ2lzdGVyX25ldGV2ZW50X25vdGlmaWVyKTsKIAogLyoqCiAgKgljYWxsX25ldGV2ZW50X25vdGlmaWVycyAtIGNhbGwgYWxsIG5ldGV2ZW50IG5vdGlmaWVyIGJsb2NrcwpAQCAtNjQsNyArNjYsNCBAQAogewogCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmbmV0ZXZlbnRfbm90aWZfY2hhaW4sIHZhbCwgdik7CiB9Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX25ldGV2ZW50X25vdGlmaWVyKTsKLUVYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfbmV0ZXZlbnRfbm90aWZpZXIpOwogRVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9uZXRldmVudF9ub3RpZmllcnMpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0cG9sbC5jIGIvbmV0L2NvcmUvbmV0cG9sbC5jCmluZGV4IDk0ODI1YjEuLjUzN2UwMWEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldHBvbGwuYworKysgYi9uZXQvY29yZS9uZXRwb2xsLmMKQEAgLTE5OSwxMSArMTk5LDEzIEBACiAKIAl6YXBfY29tcGxldGlvbl9xdWV1ZSgpOwogfQorRVhQT1JUX1NZTUJPTChuZXRwb2xsX3BvbGxfZGV2KTsKIAogdm9pZCBuZXRwb2xsX3BvbGwoc3RydWN0IG5ldHBvbGwgKm5wKQogewogCW5ldHBvbGxfcG9sbF9kZXYobnAtPmRldik7CiB9CitFWFBPUlRfU1lNQk9MKG5ldHBvbGxfcG9sbCk7CiAKIHN0YXRpYyB2b2lkIHJlZmlsbF9za2JzKHZvaWQpCiB7CkBAIC0yOTIsNiArMjk0LDcgQEAKIAl1bnNpZ25lZCBsb25nIHRyaWVzOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBucC0+ZGV2OwogCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gZGV2LT5uZXRkZXZfb3BzOworCS8qIEl0IGlzIHVwIHRvIHRoZSBjYWxsZXIgdG8ga2VlcCBucGluZm8gYWxpdmUuICovCiAJc3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvID0gbnAtPmRldi0+bnBpbmZvOwogCiAJaWYgKCFucGluZm8gfHwgIW5ldGlmX3J1bm5pbmcoZGV2KSB8fCAhbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkgewpAQCAtMzQzLDYgKzM0Niw3IEBACiAJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmbnBpbmZvLT50eF93b3JrLDApOwogCX0KIH0KK0VYUE9SVF9TWU1CT0wobmV0cG9sbF9zZW5kX3NrYik7CiAKIHZvaWQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbikKIHsKQEAgLTQwNCw2ICs0MDgsNyBAQAogCiAJbmV0cG9sbF9zZW5kX3NrYihucCwgc2tiKTsKIH0KK0VYUE9SVF9TWU1CT0wobmV0cG9sbF9zZW5kX3VkcCk7CiAKIHN0YXRpYyB2b2lkIGFycF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtNjMwLDYgKzYzNSw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlbW90ZSBldGhlcm5ldCBhZGRyZXNzICVwTVxuIiwKIAkgICAgICAgICAgICAgICAgIG5wLT5uYW1lLCBucC0+cmVtb3RlX21hYyk7CiB9CitFWFBPUlRfU1lNQk9MKG5ldHBvbGxfcHJpbnRfb3B0aW9ucyk7CiAKIGludCBuZXRwb2xsX3BhcnNlX29wdGlvbnMoc3RydWN0IG5ldHBvbGwgKm5wLCBjaGFyICpvcHQpCiB7CkBAIC03MjIsMzAgKzcyOCwyOSBAQAogCSAgICAgICBucC0+bmFtZSwgY3VyKTsKIAlyZXR1cm4gLTE7CiB9CitFWFBPUlRfU1lNQk9MKG5ldHBvbGxfcGFyc2Vfb3B0aW9ucyk7CiAKLWludCBuZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucCkKK2ludCBfX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldHBvbGwgKm5wKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gTlVMTDsKLQlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBucC0+ZGV2OwogCXN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbzsKLQlzdHJ1Y3QgbmV0cG9sbCAqbnBlLCAqdG1wOworCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVycjsKIAotCWlmIChucC0+ZGV2X25hbWUpCi0JCW5kZXYgPSBkZXZfZ2V0X2J5X25hbWUoJmluaXRfbmV0LCBucC0+ZGV2X25hbWUpOwotCWlmICghbmRldikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlcyBkb2Vzbid0IGV4aXN0LCBhYm9ydGluZy5cbiIsCisJaWYgKChuZGV2LT5wcml2X2ZsYWdzICYgSUZGX0RJU0FCTEVfTkVUUE9MTCkgfHwKKwkgICAgIW5kZXYtPm5ldGRldl9vcHMtPm5kb19wb2xsX2NvbnRyb2xsZXIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogJXMgZG9lc24ndCBzdXBwb3J0IHBvbGxpbmcsIGFib3J0aW5nLlxuIiwKIAkJICAgICAgIG5wLT5uYW1lLCBucC0+ZGV2X25hbWUpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJZXJyID0gLUVOT1RTVVBQOworCQlnb3RvIG91dDsKIAl9CiAKLQlucC0+ZGV2ID0gbmRldjsKIAlpZiAoIW5kZXYtPm5waW5mbykgewogCQlucGluZm8gPSBrbWFsbG9jKHNpemVvZigqbnBpbmZvKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghbnBpbmZvKSB7CiAJCQllcnIgPSAtRU5PTUVNOwotCQkJZ290byBwdXQ7CisJCQlnb3RvIG91dDsKIAkJfQogCiAJCW5waW5mby0+cnhfZmxhZ3MgPSAwOwpAQCAtNzU3LDYgKzc2MiwxMyBAQAogCQlJTklUX0RFTEFZRURfV09SSygmbnBpbmZvLT50eF93b3JrLCBxdWV1ZV9wcm9jZXNzKTsKIAogCQlhdG9taWNfc2V0KCZucGluZm8tPnJlZmNudCwgMSk7CisKKwkJb3BzID0gbnAtPmRldi0+bmV0ZGV2X29wczsKKwkJaWYgKG9wcy0+bmRvX25ldHBvbGxfc2V0dXApIHsKKwkJCWVyciA9IG9wcy0+bmRvX25ldHBvbGxfc2V0dXAobmRldiwgbnBpbmZvKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBmcmVlX25waW5mbzsKKwkJfQogCX0gZWxzZSB7CiAJCW5waW5mbyA9IG5kZXYtPm5waW5mbzsKIAkJYXRvbWljX2luYygmbnBpbmZvLT5yZWZjbnQpOwpAQCAtNzY0LDEyICs3NzYsMzcgQEAKIAogCW5waW5mby0+bmV0cG9sbCA9IG5wOwogCi0JaWYgKChuZGV2LT5wcml2X2ZsYWdzICYgSUZGX0RJU0FCTEVfTkVUUE9MTCkgfHwKLQkgICAgIW5kZXYtPm5ldGRldl9vcHMtPm5kb19wb2xsX2NvbnRyb2xsZXIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogJXMgZG9lc24ndCBzdXBwb3J0IHBvbGxpbmcsIGFib3J0aW5nLlxuIiwKKwlpZiAobnAtPnJ4X2hvb2spIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm5waW5mby0+cnhfbG9jaywgZmxhZ3MpOworCQlucGluZm8tPnJ4X2ZsYWdzIHw9IE5FVFBPTExfUlhfRU5BQkxFRDsKKwkJbGlzdF9hZGRfdGFpbCgmbnAtPnJ4LCAmbnBpbmZvLT5yeF9ucCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5waW5mby0+cnhfbG9jaywgZmxhZ3MpOworCX0KKworCS8qIGxhc3QgdGhpbmcgdG8gZG8gaXMgbGluayBpdCB0byB0aGUgbmV0IGRldmljZSBzdHJ1Y3R1cmUgKi8KKwlyY3VfYXNzaWduX3BvaW50ZXIobmRldi0+bnBpbmZvLCBucGluZm8pOworCisJcmV0dXJuIDA7CisKK2ZyZWVfbnBpbmZvOgorCWtmcmVlKG5waW5mbyk7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9fbmV0cG9sbF9zZXR1cCk7CisKK2ludCBuZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IE5VTEw7CisJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OworCWludCBlcnI7CisKKwlpZiAobnAtPmRldl9uYW1lKQorCQluZGV2ID0gZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwgbnAtPmRldl9uYW1lKTsKKwlpZiAoIW5kZXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogJXMgZG9lc24ndCBleGlzdCwgYWJvcnRpbmcuXG4iLAogCQkgICAgICAgbnAtPm5hbWUsIG5wLT5kZXZfbmFtZSk7Ci0JCWVyciA9IC1FTk9UU1VQUDsKLQkJZ290byByZWxlYXNlOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAoIW5ldGlmX3J1bm5pbmcobmRldikpIHsKQEAgLTc4NSw3ICs4MjIsNyBAQAogCQlpZiAoZXJyKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gb3BlbiAlc1xuIiwKIAkJCSAgICAgICBucC0+bmFtZSwgbmRldi0+bmFtZSk7Ci0JCQlnb3RvIHJlbGVhc2U7CisJCQlnb3RvIHB1dDsKIAkJfQogCiAJCWF0bGVhc3QgPSBqaWZmaWVzICsgSFovMTA7CkBAIC04MjIsNyArODU5LDcgQEAKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIElQIGFkZHJlc3MgZm9yICVzLCBhYm9ydGluZ1xuIiwKIAkJCSAgICAgICBucC0+bmFtZSwgbnAtPmRldl9uYW1lKTsKIAkJCWVyciA9IC1FREVTVEFERFJSRVE7Ci0JCQlnb3RvIHJlbGVhc2U7CisJCQlnb3RvIHB1dDsKIAkJfQogCiAJCW5wLT5sb2NhbF9pcCA9IGluX2Rldi0+aWZhX2xpc3QtPmlmYV9sb2NhbDsKQEAgLTgzMCwzOCArODY3LDI1IEBACiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsb2NhbCBJUCAlcEk0XG4iLCBucC0+bmFtZSwgJm5wLT5sb2NhbF9pcCk7CiAJfQogCi0JaWYgKG5wLT5yeF9ob29rKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZucGluZm8tPnJ4X2xvY2ssIGZsYWdzKTsKLQkJbnBpbmZvLT5yeF9mbGFncyB8PSBORVRQT0xMX1JYX0VOQUJMRUQ7Ci0JCWxpc3RfYWRkX3RhaWwoJm5wLT5yeCwgJm5waW5mby0+cnhfbnApOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZucGluZm8tPnJ4X2xvY2ssIGZsYWdzKTsKLQl9CisJbnAtPmRldiA9IG5kZXY7CiAKIAkvKiBmaWxsIHVwIHRoZSBza2IgcXVldWUgKi8KIAlyZWZpbGxfc2ticygpOwogCi0JLyogbGFzdCB0aGluZyB0byBkbyBpcyBsaW5rIGl0IHRvIHRoZSBuZXQgZGV2aWNlIHN0cnVjdHVyZSAqLwotCW5kZXYtPm5waW5mbyA9IG5waW5mbzsKKwlydG5sX2xvY2soKTsKKwllcnIgPSBfX25ldHBvbGxfc2V0dXAobnApOworCXJ0bmxfdW5sb2NrKCk7CiAKLQkvKiBhdm9pZCByYWNpbmcgd2l0aCBOQVBJIHJlYWRpbmcgbnBpbmZvICovCi0Jc3luY2hyb25pemVfcmN1KCk7CisJaWYgKGVycikKKwkJZ290byBwdXQ7CiAKIAlyZXR1cm4gMDsKIAotIHJlbGVhc2U6Ci0JaWYgKCFuZGV2LT5ucGluZm8pIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJm5waW5mby0+cnhfbG9jaywgZmxhZ3MpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobnBlLCB0bXAsICZucGluZm8tPnJ4X25wLCByeCkgewotCQkJbnBlLT5kZXYgPSBOVUxMOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5waW5mby0+cnhfbG9jaywgZmxhZ3MpOwotCi0JCWtmcmVlKG5waW5mbyk7Ci0JfQogcHV0OgogCWRldl9wdXQobmRldik7CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0wobmV0cG9sbF9zZXR1cCk7CiAKIHN0YXRpYyBpbnQgX19pbml0IG5ldHBvbGxfaW5pdCh2b2lkKQogewpAQCAtODcwLDQ5ICs4OTQsNjUgQEAKIH0KIGNvcmVfaW5pdGNhbGwobmV0cG9sbF9pbml0KTsKIAotdm9pZCBuZXRwb2xsX2NsZWFudXAoc3RydWN0IG5ldHBvbGwgKm5wKQordm9pZCBfX25ldHBvbGxfY2xlYW51cChzdHJ1Y3QgbmV0cG9sbCAqbnApCiB7CiAJc3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAobnAtPmRldikgewotCQlucGluZm8gPSBucC0+ZGV2LT5ucGluZm87Ci0JCWlmIChucGluZm8pIHsKLQkJCWlmICghbGlzdF9lbXB0eSgmbnBpbmZvLT5yeF9ucCkpIHsKLQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbnBpbmZvLT5yeF9sb2NrLCBmbGFncyk7Ci0JCQkJbGlzdF9kZWwoJm5wLT5yeCk7Ci0JCQkJaWYgKGxpc3RfZW1wdHkoJm5waW5mby0+cnhfbnApKQotCQkJCQlucGluZm8tPnJ4X2ZsYWdzICY9IH5ORVRQT0xMX1JYX0VOQUJMRUQ7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnBpbmZvLT5yeF9sb2NrLCBmbGFncyk7Ci0JCQl9CisJbnBpbmZvID0gbnAtPmRldi0+bnBpbmZvOworCWlmICghbnBpbmZvKQorCQlyZXR1cm47CiAKLQkJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZucGluZm8tPnJlZmNudCkpIHsKLQkJCQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wczsKLQkJCQlza2JfcXVldWVfcHVyZ2UoJm5waW5mby0+YXJwX3R4KTsKLQkJCQlza2JfcXVldWVfcHVyZ2UoJm5waW5mby0+dHhxKTsKLQkJCQljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrKCZucGluZm8tPnR4X3dvcmspOwotCi0JCQkJLyogY2xlYW4gYWZ0ZXIgbGFzdCwgdW5maW5pc2hlZCB3b3JrICovCi0JCQkJX19za2JfcXVldWVfcHVyZ2UoJm5waW5mby0+dHhxKTsKLQkJCQlrZnJlZShucGluZm8pOwotCQkJCW9wcyA9IG5wLT5kZXYtPm5ldGRldl9vcHM7Ci0JCQkJaWYgKG9wcy0+bmRvX25ldHBvbGxfY2xlYW51cCkKLQkJCQkJb3BzLT5uZG9fbmV0cG9sbF9jbGVhbnVwKG5wLT5kZXYpOwotCQkJCWVsc2UKLQkJCQkJbnAtPmRldi0+bnBpbmZvID0gTlVMTDsKLQkJCX0KLQkJfQotCi0JCWRldl9wdXQobnAtPmRldik7CisJaWYgKCFsaXN0X2VtcHR5KCZucGluZm8tPnJ4X25wKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbnBpbmZvLT5yeF9sb2NrLCBmbGFncyk7CisJCWxpc3RfZGVsKCZucC0+cngpOworCQlpZiAobGlzdF9lbXB0eSgmbnBpbmZvLT5yeF9ucCkpCisJCQlucGluZm8tPnJ4X2ZsYWdzICY9IH5ORVRQT0xMX1JYX0VOQUJMRUQ7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5waW5mby0+cnhfbG9jaywgZmxhZ3MpOwogCX0KIAorCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZucGluZm8tPnJlZmNudCkpIHsKKwkJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHM7CisKKwkJb3BzID0gbnAtPmRldi0+bmV0ZGV2X29wczsKKwkJaWYgKG9wcy0+bmRvX25ldHBvbGxfY2xlYW51cCkKKwkJCW9wcy0+bmRvX25ldHBvbGxfY2xlYW51cChucC0+ZGV2KTsKKworCQlyY3VfYXNzaWduX3BvaW50ZXIobnAtPmRldi0+bnBpbmZvLCBOVUxMKTsKKworCQkvKiBhdm9pZCByYWNpbmcgd2l0aCBOQVBJIHJlYWRpbmcgbnBpbmZvICovCisJCXN5bmNocm9uaXplX3JjdV9iaCgpOworCisJCXNrYl9xdWV1ZV9wdXJnZSgmbnBpbmZvLT5hcnBfdHgpOworCQlza2JfcXVldWVfcHVyZ2UoJm5waW5mby0+dHhxKTsKKwkJY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29yaygmbnBpbmZvLT50eF93b3JrKTsKKworCQkvKiBjbGVhbiBhZnRlciBsYXN0LCB1bmZpbmlzaGVkIHdvcmsgKi8KKwkJX19za2JfcXVldWVfcHVyZ2UoJm5waW5mby0+dHhxKTsKKwkJa2ZyZWUobnBpbmZvKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX25ldHBvbGxfY2xlYW51cCk7CisKK3ZvaWQgbmV0cG9sbF9jbGVhbnVwKHN0cnVjdCBuZXRwb2xsICpucCkKK3sKKwlpZiAoIW5wLT5kZXYpCisJCXJldHVybjsKKworCXJ0bmxfbG9jaygpOworCV9fbmV0cG9sbF9jbGVhbnVwKG5wKTsKKwlydG5sX3VubG9jaygpOworCisJZGV2X3B1dChucC0+ZGV2KTsKIAlucC0+ZGV2ID0gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0wobmV0cG9sbF9jbGVhbnVwKTsKIAogaW50IG5ldHBvbGxfdHJhcCh2b2lkKQogewogCXJldHVybiBhdG9taWNfcmVhZCgmdHJhcHBlZCk7CiB9CitFWFBPUlRfU1lNQk9MKG5ldHBvbGxfdHJhcCk7CiAKIHZvaWQgbmV0cG9sbF9zZXRfdHJhcChpbnQgdHJhcCkKIHsKQEAgLTkyMSwxNCArOTYxLDQgQEAKIAllbHNlCiAJCWF0b21pY19kZWMoJnRyYXBwZWQpOwogfQotCi1FWFBPUlRfU1lNQk9MKG5ldHBvbGxfc2VuZF9za2IpOwogRVhQT1JUX1NZTUJPTChuZXRwb2xsX3NldF90cmFwKTsKLUVYUE9SVF9TWU1CT0wobmV0cG9sbF90cmFwKTsKLUVYUE9SVF9TWU1CT0wobmV0cG9sbF9wcmludF9vcHRpb25zKTsKLUVYUE9SVF9TWU1CT0wobmV0cG9sbF9wYXJzZV9vcHRpb25zKTsKLUVYUE9SVF9TWU1CT0wobmV0cG9sbF9zZXR1cCk7Ci1FWFBPUlRfU1lNQk9MKG5ldHBvbGxfY2xlYW51cCk7Ci1FWFBPUlRfU1lNQk9MKG5ldHBvbGxfc2VuZF91ZHApOwotRVhQT1JUX1NZTUJPTChuZXRwb2xsX3BvbGxfZGV2KTsKLUVYUE9SVF9TWU1CT0wobmV0cG9sbF9wb2xsKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmMKaW5kZXggMWRhY2Q3Yi4uMTBhMWVhNyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmMKKysrIGIvbmV0L2NvcmUvcGt0Z2VuLmMKQEAgLTExNSw2ICsxMTUsOSBAQAogICogY29tbWFuZCBieSBBZGl0IFJhbmFkaXZlIDxhZGl0LjI2MkBnbWFpbC5jb20+CiAgKgogICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L3N5cy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0xNjksMTEgKzE3MiwxMyBAQAogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4JCS8qIGRvX2RpdiAqLwogCi0jZGVmaW5lIFZFUlNJT04gCSIyLjczIgorI2RlZmluZSBWRVJTSU9OCSIyLjc0IgogI2RlZmluZSBJUF9OQU1FX1NaIDMyCiAjZGVmaW5lIE1BWF9NUExTX0xBQkVMUyAxNiAvKiBUaGlzIGlzIHRoZSBtYXggbGFiZWwgc3RhY2sgZGVwdGggKi8KICNkZWZpbmUgTVBMU19TVEFDS19CT1RUT00gaHRvbmwoMHgwMDAwMDEwMCkKIAorI2RlZmluZSBmdW5jX2VudGVyKCkgcHJfZGVidWcoImVudGVyaW5nICVzXG4iLCBfX2Z1bmNfXyk7CisKIC8qIERldmljZSBmbGFnIGJpdHMgKi8KICNkZWZpbmUgRl9JUFNSQ19STkQgICAoMTw8MCkJLyogSVAtU3JjIFJhbmRvbSAgKi8KICNkZWZpbmUgRl9JUERTVF9STkQgICAoMTw8MSkJLyogSVAtRHN0IFJhbmRvbSAgKi8KQEAgLTQyNCw3ICs0MjksOCBAQAogfQogCiBzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gPQotCSJwa3RnZW4gIiBWRVJTSU9OICI6IFBhY2tldCBHZW5lcmF0b3IgZm9yIHBhY2tldCBwZXJmb3JtYW5jZSB0ZXN0aW5nLlxuIjsKKwkiUGFja2V0IEdlbmVyYXRvciBmb3IgcGFja2V0IHBlcmZvcm1hbmNlIHRlc3RpbmcuICIKKwkiVmVyc2lvbjogIiBWRVJTSU9OICJcbiI7CiAKIHN0YXRpYyBpbnQgcGt0Z2VuX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIHN0cnVjdCBwa3RnZW5fZGV2ICppKTsKIHN0YXRpYyBpbnQgcGt0Z2VuX2FkZF9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIGNvbnN0IGNoYXIgKmlmbmFtZSk7CkBAIC00OTUsNyArNTAxLDcgQEAKIAkJcGt0Z2VuX3Jlc2V0X2FsbF90aHJlYWRzKCk7CiAKIAllbHNlCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgInBrdGdlbjogVW5rbm93biBjb21tYW5kOiAlc1xuIiwgZGF0YSk7CisJCXByX3dhcm5pbmcoIlVua25vd24gY29tbWFuZDogJXNcbiIsIGRhdGEpOwogCiAJZXJyID0gY291bnQ7CiAKQEAgLTg0MCw3ICs4NDYsNyBAQAogCQkJICAgICAgIGNvbnN0IGNoYXIgX191c2VyICogdXNlcl9idWZmZXIsIHNpemVfdCBjb3VudCwKIAkJCSAgICAgICBsb2ZmX3QgKiBvZmZzZXQpCiB7Ci0Jc3RydWN0IHNlcV9maWxlICpzZXEgPSAoc3RydWN0IHNlcV9maWxlICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2ID0gc2VxLT5wcml2YXRlOwogCWludCBpID0gMCwgbWF4LCBsZW47CiAJY2hhciBuYW1lWzE2XSwgdmFsc3RyWzMyXTsKQEAgLTg1MiwxNCArODU4LDE0IEBACiAJcGdfcmVzdWx0ID0gJihwa3RfZGV2LT5yZXN1bHRbMF0pOwogCiAJaWYgKGNvdW50IDwgMSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJwa3RnZW46IHdyb25nIGNvbW1hbmQgZm9ybWF0XG4iKTsKKwkJcHJfd2FybmluZygid3JvbmcgY29tbWFuZCBmb3JtYXRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAltYXggPSBjb3VudCAtIGk7CiAJdG1wID0gY291bnRfdHJhaWxfY2hhcnMoJnVzZXJfYnVmZmVyW2ldLCBtYXgpOwogCWlmICh0bXAgPCAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInBrdGdlbjogaWxsZWdhbCBmb3JtYXRcbiIpOworCQlwcl93YXJuaW5nKCJpbGxlZ2FsIGZvcm1hdFxuIik7CiAJCXJldHVybiB0bXA7CiAJfQogCWkgKz0gdG1wOwpAQCAtOTgwLDYgKzk4NiwzNiBAQAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcGt0X2Rldi0+ZGVsYXkpOwogCQlyZXR1cm4gY291bnQ7CiAJfQorCWlmICghc3RyY21wKG5hbWUsICJyYXRlIikpIHsKKwkJbGVuID0gbnVtX2FyZygmdXNlcl9idWZmZXJbaV0sIDEwLCAmdmFsdWUpOworCQlpZiAobGVuIDwgMCkKKwkJCXJldHVybiBsZW47CisKKwkJaSArPSBsZW47CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gbGVuOworCQlwa3RfZGV2LT5kZWxheSA9IHBrdF9kZXYtPm1pbl9wa3Rfc2l6ZSo4Kk5TRUNfUEVSX1VTRUMvdmFsdWU7CisJCWlmIChkZWJ1ZykKKwkJCXByX2luZm8oIkRlbGF5IHNldCBhdDogJWxsdSBuc1xuIiwgcGt0X2Rldi0+ZGVsYXkpOworCisJCXNwcmludGYocGdfcmVzdWx0LCAiT0s6IHJhdGU9JWx1IiwgdmFsdWUpOworCQlyZXR1cm4gY291bnQ7CisJfQorCWlmICghc3RyY21wKG5hbWUsICJyYXRlcCIpKSB7CisJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCAxMCwgJnZhbHVlKTsKKwkJaWYgKGxlbiA8IDApCisJCQlyZXR1cm4gbGVuOworCisJCWkgKz0gbGVuOworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGxlbjsKKwkJcGt0X2Rldi0+ZGVsYXkgPSBOU0VDX1BFUl9TRUMvdmFsdWU7CisJCWlmIChkZWJ1ZykKKwkJCXByX2luZm8oIkRlbGF5IHNldCBhdDogJWxsdSBuc1xuIiwgcGt0X2Rldi0+ZGVsYXkpOworCisJCXNwcmludGYocGdfcmVzdWx0LCAiT0s6IHJhdGU9JWx1IiwgdmFsdWUpOworCQlyZXR1cm4gY291bnQ7CisJfQogCWlmICghc3RyY21wKG5hbWUsICJ1ZHBfc3JjX21pbiIpKSB7CiAJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCAxMCwgJnZhbHVlKTsKIAkJaWYgKGxlbiA8IDApCkBAIC0xMzk4LDE4ICsxNDM0LDEyIEBACiAJCWkgKz0gbGVuOwogCiAJCWZvciAoKm0gPSAwOyAqdiAmJiBtIDwgcGt0X2Rldi0+ZHN0X21hYyArIDY7IHYrKykgewotCQkJaWYgKCp2ID49ICcwJyAmJiAqdiA8PSAnOScpIHsKLQkJCQkqbSAqPSAxNjsKLQkJCQkqbSArPSAqdiAtICcwJzsKLQkJCX0KLQkJCWlmICgqdiA+PSAnQScgJiYgKnYgPD0gJ0YnKSB7Ci0JCQkJKm0gKj0gMTY7Ci0JCQkJKm0gKz0gKnYgLSAnQScgKyAxMDsKLQkJCX0KLQkJCWlmICgqdiA+PSAnYScgJiYgKnYgPD0gJ2YnKSB7Ci0JCQkJKm0gKj0gMTY7Ci0JCQkJKm0gKz0gKnYgLSAnYScgKyAxMDsKLQkJCX0KKwkJCWludCB2YWx1ZTsKKworCQkJdmFsdWUgPSBoZXhfdG9fYmluKCp2KTsKKwkJCWlmICh2YWx1ZSA+PSAwKQorCQkJCSptID0gKm0gKiAxNiArIHZhbHVlOworCiAJCQlpZiAoKnYgPT0gJzonKSB7CiAJCQkJbSsrOwogCQkJCSptID0gMDsKQEAgLTE0NDAsMTggKzE0NzAsMTIgQEAKIAkJaSArPSBsZW47CiAKIAkJZm9yICgqbSA9IDA7ICp2ICYmIG0gPCBwa3RfZGV2LT5zcmNfbWFjICsgNjsgdisrKSB7Ci0JCQlpZiAoKnYgPj0gJzAnICYmICp2IDw9ICc5JykgewotCQkJCSptICo9IDE2OwotCQkJCSptICs9ICp2IC0gJzAnOwotCQkJfQotCQkJaWYgKCp2ID49ICdBJyAmJiAqdiA8PSAnRicpIHsKLQkJCQkqbSAqPSAxNjsKLQkJCQkqbSArPSAqdiAtICdBJyArIDEwOwotCQkJfQotCQkJaWYgKCp2ID49ICdhJyAmJiAqdiA8PSAnZicpIHsKLQkJCQkqbSAqPSAxNjsKLQkJCQkqbSArPSAqdiAtICdhJyArIDEwOwotCQkJfQorCQkJaW50IHZhbHVlOworCisJCQl2YWx1ZSA9IGhleF90b19iaW4oKnYpOworCQkJaWYgKHZhbHVlID49IDApCisJCQkJKm0gPSAqbSAqIDE2ICsgdmFsdWU7CisKIAkJCWlmICgqdiA9PSAnOicpIHsKIAkJCQltKys7CiAJCQkJKm0gPSAwOwpAQCAtMTc0MCw3ICsxNzY0LDcgQEAKIAkJCQkgICBjb25zdCBjaGFyIF9fdXNlciAqIHVzZXJfYnVmZmVyLAogCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICogb2Zmc2V0KQogewotCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCA9IHNlcS0+cHJpdmF0ZTsKIAlpbnQgaSA9IDAsIG1heCwgbGVuLCByZXQ7CiAJY2hhciBuYW1lWzQwXTsKQEAgLTE3ODEsNyArMTgwNSw3IEBACiAJCSAgICAgICBuYW1lLCAodW5zaWduZWQgbG9uZyljb3VudCk7CiAKIAlpZiAoIXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwa3RnZW46IEVSUk9SOiBObyB0aHJlYWRcbiIpOworCQlwcl9lcnIoIkVSUk9SOiBObyB0aHJlYWRcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xODc0LDcgKzE4OTgsNyBAQAogCWludCBpID0gMDsKIAogCW11dGV4X2xvY2soJnBrdGdlbl90aHJlYWRfbG9jayk7Ci0JcHJfZGVidWcoInBrdGdlbjogcGt0Z2VuX21hcmtfZGV2aWNlIG1hcmtpbmcgJXMgZm9yIHJlbW92YWxcbiIsIGlmbmFtZSk7CisJcHJfZGVidWcoIiVzOiBtYXJraW5nICVzIGZvciByZW1vdmFsXG4iLCBfX2Z1bmNfXywgaWZuYW1lKTsKIAogCXdoaWxlICgxKSB7CiAKQEAgLTE4ODMsMTUgKzE5MDcsMTQgQEAKIAkJCWJyZWFrOwkvKiBzdWNjZXNzICovCiAKIAkJbXV0ZXhfdW5sb2NrKCZwa3RnZW5fdGhyZWFkX2xvY2spOwotCQlwcl9kZWJ1ZygicGt0Z2VuOiBwa3RnZW5fbWFya19kZXZpY2Ugd2FpdGluZyBmb3IgJXMgIgotCQkJCSJ0byBkaXNhcHBlYXIuLi4uXG4iLCBpZm5hbWUpOworCQlwcl9kZWJ1ZygiJXM6IHdhaXRpbmcgZm9yICVzIHRvIGRpc2FwcGVhci4uLi5cbiIsCisJCQkgX19mdW5jX18sIGlmbmFtZSk7CiAJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKG1zZWNfcGVyX3RyeSkpOwogCQltdXRleF9sb2NrKCZwa3RnZW5fdGhyZWFkX2xvY2spOwogCiAJCWlmICgrK2kgPj0gbWF4X3RyaWVzKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInBrdGdlbl9tYXJrX2RldmljZTogdGltZWQgb3V0IGFmdGVyICIKLQkJCSAgICAgICAid2FpdGluZyAlZCBtc2VjIGZvciBkZXZpY2UgJXMgdG8gYmUgcmVtb3ZlZFxuIiwKLQkJCSAgICAgICBtc2VjX3Blcl90cnkgKiBpLCBpZm5hbWUpOworCQkJcHJfZXJyKCIlczogdGltZWQgb3V0IGFmdGVyIHdhaXRpbmcgJWQgbXNlYyBmb3IgZGV2aWNlICVzIHRvIGJlIHJlbW92ZWRcbiIsCisJCQkgICAgICAgX19mdW5jX18sIG1zZWNfcGVyX3RyeSAqIGksIGlmbmFtZSk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xOTE4LDggKzE5NDEsOCBAQAogCQkJCQkJCSAgJnBrdGdlbl9pZl9mb3BzLAogCQkJCQkJCSAgcGt0X2Rldik7CiAJCQlpZiAoIXBrdF9kZXYtPmVudHJ5KQotCQkJCXByaW50ayhLRVJOX0VSUiAicGt0Z2VuOiBjYW4ndCBtb3ZlIHByb2MgIgotCQkJCSAgICAgICAiIGVudHJ5IGZvciAnJXMnXG4iLCBkZXYtPm5hbWUpOworCQkJCXByX2VycigiY2FuJ3QgbW92ZSBwcm9jIGVudHJ5IGZvciAnJXMnXG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0xOTgzLDE1ICsyMDA2LDE1IEBACiAKIAlvZGV2ID0gcGt0Z2VuX2Rldl9nZXRfYnlfbmFtZShwa3RfZGV2LCBpZm5hbWUpOwogCWlmICghb2RldikgewotCQlwcmludGsoS0VSTl9FUlIgInBrdGdlbjogbm8gc3VjaCBuZXRkZXZpY2U6IFwiJXNcIlxuIiwgaWZuYW1lKTsKKwkJcHJfZXJyKCJubyBzdWNoIG5ldGRldmljZTogXCIlc1wiXG4iLCBpZm5hbWUpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAob2Rldi0+dHlwZSAhPSBBUlBIUkRfRVRIRVIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwa3RnZW46IG5vdCBhbiBldGhlcm5ldCBkZXZpY2U6IFwiJXNcIlxuIiwgaWZuYW1lKTsKKwkJcHJfZXJyKCJub3QgYW4gZXRoZXJuZXQgZGV2aWNlOiBcIiVzXCJcbiIsIGlmbmFtZSk7CiAJCWVyciA9IC1FSU5WQUw7CiAJfSBlbHNlIGlmICghbmV0aWZfcnVubmluZyhvZGV2KSkgewotCQlwcmludGsoS0VSTl9FUlIgInBrdGdlbjogZGV2aWNlIGlzIGRvd246IFwiJXNcIlxuIiwgaWZuYW1lKTsKKwkJcHJfZXJyKCJkZXZpY2UgaXMgZG93bjogXCIlc1wiXG4iLCBpZm5hbWUpOwogCQllcnIgPSAtRU5FVERPV047CiAJfSBlbHNlIHsKIAkJcGt0X2Rldi0+b2RldiA9IG9kZXY7CkBAIC0yMDEwLDggKzIwMzMsNyBAQAogCWludCBudHhxOwogCiAJaWYgKCFwa3RfZGV2LT5vZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicGt0Z2VuOiBFUlJPUjogcGt0X2Rldi0+b2RldiA9PSBOVUxMIGluICIKLQkJICAgICAgICJzZXR1cF9pbmplY3QuXG4iKTsKKwkJcHJfZXJyKCJFUlJPUjogcGt0X2Rldi0+b2RldiA9PSBOVUxMIGluIHNldHVwX2luamVjdFxuIik7CiAJCXNwcmludGYocGt0X2Rldi0+cmVzdWx0LAogCQkJIkVSUk9SOiBwa3RfZGV2LT5vZGV2ID09IE5VTEwgaW4gc2V0dXBfaW5qZWN0LlxuIik7CiAJCXJldHVybjsKQEAgLTIwMjEsMTkgKzIwNDMsMTUgQEAKIAludHhxID0gcGt0X2Rldi0+b2Rldi0+cmVhbF9udW1fdHhfcXVldWVzOwogCiAJaWYgKG50eHEgPD0gcGt0X2Rldi0+cXVldWVfbWFwX21pbikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJwa3RnZW46IFdBUk5JTkc6IFJlcXVlc3RlZCAiCi0JCSAgICAgICAicXVldWVfbWFwX21pbiAoemVyby1iYXNlZCkgKCVkKSBleGNlZWRzIHZhbGlkIHJhbmdlICIKLQkJICAgICAgICJbMCAtICVkXSBmb3IgKCVkKSBxdWV1ZXMgb24gJXMsIHJlc2V0dGluZ1xuIiwKLQkJICAgICAgIHBrdF9kZXYtPnF1ZXVlX21hcF9taW4sIChudHhxID86IDEpIC0gMSwgbnR4cSwKLQkJICAgICAgIHBrdF9kZXYtPm9kZXZuYW1lKTsKKwkJcHJfd2FybmluZygiV0FSTklORzogUmVxdWVzdGVkIHF1ZXVlX21hcF9taW4gKHplcm8tYmFzZWQpICglZCkgZXhjZWVkcyB2YWxpZCByYW5nZSBbMCAtICVkXSBmb3IgKCVkKSBxdWV1ZXMgb24gJXMsIHJlc2V0dGluZ1xuIiwKKwkJCSAgIHBrdF9kZXYtPnF1ZXVlX21hcF9taW4sIChudHhxID86IDEpIC0gMSwgbnR4cSwKKwkJCSAgIHBrdF9kZXYtPm9kZXZuYW1lKTsKIAkJcGt0X2Rldi0+cXVldWVfbWFwX21pbiA9IG50eHEgLSAxOwogCX0KIAlpZiAocGt0X2Rldi0+cXVldWVfbWFwX21heCA+PSBudHhxKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInBrdGdlbjogV0FSTklORzogUmVxdWVzdGVkICIKLQkJICAgICAgICJxdWV1ZV9tYXBfbWF4ICh6ZXJvLWJhc2VkKSAoJWQpIGV4Y2VlZHMgdmFsaWQgcmFuZ2UgIgotCQkgICAgICAgIlswIC0gJWRdIGZvciAoJWQpIHF1ZXVlcyBvbiAlcywgcmVzZXR0aW5nXG4iLAotCQkgICAgICAgcGt0X2Rldi0+cXVldWVfbWFwX21heCwgKG50eHEgPzogMSkgLSAxLCBudHhxLAotCQkgICAgICAgcGt0X2Rldi0+b2Rldm5hbWUpOworCQlwcl93YXJuaW5nKCJXQVJOSU5HOiBSZXF1ZXN0ZWQgcXVldWVfbWFwX21heCAoemVyby1iYXNlZCkgKCVkKSBleGNlZWRzIHZhbGlkIHJhbmdlIFswIC0gJWRdIGZvciAoJWQpIHF1ZXVlcyBvbiAlcywgcmVzZXR0aW5nXG4iLAorCQkJICAgcGt0X2Rldi0+cXVldWVfbWFwX21heCwgKG50eHEgPzogMSkgLSAxLCBudHhxLAorCQkJICAgcGt0X2Rldi0+b2Rldm5hbWUpOwogCQlwa3RfZGV2LT5xdWV1ZV9tYXBfbWF4ID0gbnR4cSAtIDE7CiAJfQogCkBAIC0yMDkzLDggKzIxMTEsNyBAQAogCQkJfQogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlpZiAoZXJyKQotCQkJCXByaW50ayhLRVJOX0VSUiAicGt0Z2VuOiBFUlJPUjogSVB2NiBsaW5rICIKLQkJCQkgICAgICAgImFkZHJlc3Mgbm90IGF2YWlsYmxlLlxuIik7CisJCQkJcHJfZXJyKCJFUlJPUjogSVB2NiBsaW5rIGFkZHJlc3Mgbm90IGF2YWlsYWJsZVxuIik7CiAJCX0KICNlbmRpZgogCX0gZWxzZSB7CkBAIC0yMTQyLDE1ICsyMTU5LDE1IEBACiAJaHJ0aW1lcl9pbml0X29uX3N0YWNrKCZ0LnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9BQlMpOwogCWhydGltZXJfc2V0X2V4cGlyZXMoJnQudGltZXIsIHNwaW5fdW50aWwpOwogCi0JcmVtYWluaW5nID0ga3RpbWVfdG9fdXMoaHJ0aW1lcl9leHBpcmVzX3JlbWFpbmluZygmdC50aW1lcikpOworCXJlbWFpbmluZyA9IGt0aW1lX3RvX25zKGhydGltZXJfZXhwaXJlc19yZW1haW5pbmcoJnQudGltZXIpKTsKIAlpZiAocmVtYWluaW5nIDw9IDApIHsKIAkJcGt0X2Rldi0+bmV4dF90eCA9IGt0aW1lX2FkZF9ucyhzcGluX3VudGlsLCBwa3RfZGV2LT5kZWxheSk7CiAJCXJldHVybjsKIAl9CiAKIAlzdGFydF90aW1lID0ga3RpbWVfbm93KCk7Ci0JaWYgKHJlbWFpbmluZyA8IDEwMCkKLQkJdWRlbGF5KHJlbWFpbmluZyk7IAkvKiByZWFsbHkgc21hbGwganVzdCBzcGluICovCisJaWYgKHJlbWFpbmluZyA8IDEwMDAwMCkKKwkJbmRlbGF5KHJlbWFpbmluZyk7CS8qIHJlYWxseSBzbWFsbCBqdXN0IHNwaW4gKi8KIAllbHNlIHsKIAkJLyogc2VlIGRvX25hbm9zbGVlcCAqLwogCQlocnRpbWVyX2luaXRfc2xlZXBlcigmdCwgY3VycmVudCk7CkBAIC0yNTI4LDggKzI1NDUsOCBAQAogCQkJaWYgKG5oZWFkID4gMCkgewogCQkJCXJldCA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCBuaGVhZCwgMCwgR0ZQX0FUT01JQyk7CiAJCQkJaWYgKHJldCA8IDApIHsKLQkJCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBleHBhbmRpbmcgIgotCQkJCQkgICAgICAgImlwc2VjIHBhY2tldCAlZFxuIiwgcmV0KTsKKwkJCQkJcHJfZXJyKCJFcnJvciBleHBhbmRpbmcgaXBzZWMgcGFja2V0ICVkXG4iLAorCQkJCQkgICAgICAgcmV0KTsKIAkJCQkJZ290byBlcnI7CiAJCQkJfQogCQkJfQpAQCAtMjUzOCw4ICsyNTU1LDcgQEAKIAkJCXNrYl9wdWxsKHNrYiwgRVRIX0hMRU4pOwogCQkJcmV0ID0gcGt0Z2VuX291dHB1dF9pcHNlYyhza2IsIHBrdF9kZXYpOwogCQkJaWYgKHJldCkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgY3JlYXRpbmcgaXBzZWMgIgotCQkJCSAgICAgICAicGFja2V0ICVkXG4iLCByZXQpOworCQkJCXByX2VycigiRXJyb3IgY3JlYXRpbmcgaXBzZWMgcGFja2V0ICVkXG4iLCByZXQpOwogCQkJCWdvdG8gZXJyOwogCQkJfQogCQkJLyogcmVzdG9yZSBsbCAqLwpAQCAtMzAxNSw4ICszMDMxLDcgQEAKIAlpZiAoZGF0YWxlbiA8IHNpemVvZihzdHJ1Y3QgcGt0Z2VuX2hkcikpIHsKIAkJZGF0YWxlbiA9IHNpemVvZihzdHJ1Y3QgcGt0Z2VuX2hkcik7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9JTkZPICJwa3RnZW46IGluY3JlYXNlZCBkYXRhbGVuIHRvICVkXG4iLAotCQkJICAgICAgIGRhdGFsZW4pOworCQkJcHJfaW5mbygiaW5jcmVhc2VkIGRhdGFsZW4gdG8gJWRcbiIsIGRhdGFsZW4pOwogCX0KIAogCXVkcGgtPnNvdXJjZSA9IGh0b25zKHBrdF9kZXYtPmN1cl91ZHBfc3JjKTsKQEAgLTMxNDMsNyArMzE1OCw3IEBACiAJc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXY7CiAJaW50IHN0YXJ0ZWQgPSAwOwogCi0JcHJfZGVidWcoInBrdGdlbjogZW50ZXJpbmcgcGt0Z2VuX3J1bi4gJXBcbiIsIHQpOworCWZ1bmNfZW50ZXIoKTsKIAogCWlmX2xvY2sodCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwa3RfZGV2LCAmdC0+aWZfbGlzdCwgbGlzdCkgewpAQCAtMzE3Niw3ICszMTkxLDcgQEAKIHsKIAlzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdDsKIAotCXByX2RlYnVnKCJwa3RnZW46IGVudGVyaW5nIHBrdGdlbl9zdG9wX2FsbF90aHJlYWRzX2lmcy5cbiIpOworCWZ1bmNfZW50ZXIoKTsKIAogCW11dGV4X2xvY2soJnBrdGdlbl90aHJlYWRfbG9jayk7CiAKQEAgLTMyNDEsNyArMzI1Niw3IEBACiB7CiAJc3RydWN0IHBrdGdlbl90aHJlYWQgKnQ7CiAKLQlwcl9kZWJ1ZygicGt0Z2VuOiBlbnRlcmluZyBwa3RnZW5fcnVuX2FsbF90aHJlYWRzLlxuIik7CisJZnVuY19lbnRlcigpOwogCiAJbXV0ZXhfbG9jaygmcGt0Z2VuX3RocmVhZF9sb2NrKTsKIApAQCAtMzI2MCw3ICszMjc1LDcgQEAKIHsKIAlzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdDsKIAotCXByX2RlYnVnKCJwa3RnZW46IGVudGVyaW5nIHBrdGdlbl9yZXNldF9hbGxfdGhyZWFkcy5cbiIpOworCWZ1bmNfZW50ZXIoKTsKIAogCW11dGV4X2xvY2soJnBrdGdlbl90aHJlYWRfbG9jayk7CiAKQEAgLTMzMTAsOCArMzMyNSw4IEBACiAJaW50IG5yX2ZyYWdzID0gcGt0X2Rldi0+c2tiID8gc2tiX3NoaW5mbyhwa3RfZGV2LT5za2IpLT5ucl9mcmFncyA6IC0xOwogCiAJaWYgKCFwa3RfZGV2LT5ydW5uaW5nKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInBrdGdlbjogaW50ZXJmYWNlOiAlcyBpcyBhbHJlYWR5ICIKLQkJICAgICAgICJzdG9wcGVkXG4iLCBwa3RfZGV2LT5vZGV2bmFtZSk7CisJCXByX3dhcm5pbmcoImludGVyZmFjZTogJXMgaXMgYWxyZWFkeSBzdG9wcGVkXG4iLAorCQkJICAgcGt0X2Rldi0+b2Rldm5hbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTMzNDcsNyArMzM2Miw3IEBACiB7CiAJc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXY7CiAKLQlwcl9kZWJ1ZygicGt0Z2VuOiBlbnRlcmluZyBwa3RnZW5fc3RvcFxuIik7CisJZnVuY19lbnRlcigpOwogCiAJaWZfbG9jayh0KTsKIApAQCAtMzM2Nyw3ICszMzgyLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpxLCAqbjsKIAlzdHJ1Y3QgcGt0Z2VuX2RldiAqY3VyOwogCi0JcHJfZGVidWcoInBrdGdlbjogZW50ZXJpbmcgcGt0Z2VuX3JlbV9vbmVfaWZcbiIpOworCWZ1bmNfZW50ZXIoKTsKIAogCWlmX2xvY2sodCk7CiAKQEAgLTMzOTMsOSArMzQwOCwxMCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKnEsICpuOwogCXN0cnVjdCBwa3RnZW5fZGV2ICpjdXI7CiAKKwlmdW5jX2VudGVyKCk7CisKIAkvKiBSZW1vdmUgYWxsIGRldmljZXMsIGZyZWUgbWVtICovCiAKLQlwcl9kZWJ1ZygicGt0Z2VuOiBlbnRlcmluZyBwa3RnZW5fcmVtX2FsbF9pZnNcbiIpOwogCWlmX2xvY2sodCk7CiAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUocSwgbiwgJnQtPmlmX2xpc3QpIHsKQEAgLTM0NzcsOCArMzQ5Myw3IEBACiAKIAkJcGt0X2Rldi0+c2tiID0gZmlsbF9wYWNrZXQob2RldiwgcGt0X2Rldik7CiAJCWlmIChwa3RfZGV2LT5za2IgPT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJwa3RnZW46IEVSUk9SOiBjb3VsZG4ndCAiCi0JCQkgICAgICAgImFsbG9jYXRlIHNrYiBpbiBmaWxsX3BhY2tldC5cbiIpOworCQkJcHJfZXJyKCJFUlJPUjogY291bGRuJ3QgYWxsb2NhdGUgc2tiIGluIGZpbGxfcGFja2V0XG4iKTsKIAkJCXNjaGVkdWxlKCk7CiAJCQlwa3RfZGV2LT5jbG9uZV9jb3VudC0tOwkvKiBiYWNrIG91dCBpbmNyZW1lbnQsIE9PTSAqLwogCQkJcmV0dXJuOwpAQCAtMzU1OCw4ICszNTczLDcgQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ0LT5xdWV1ZSk7CiAJY29tcGxldGUoJnQtPnN0YXJ0X2RvbmUpOwogCi0JcHJfZGVidWcoInBrdGdlbjogc3RhcnRpbmcgcGt0Z2VuLyVkOiAgcGlkPSVkXG4iLAotCQkgY3B1LCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CisJcHJfZGVidWcoInN0YXJ0aW5nIHBrdGdlbi8lZDogIHBpZD0lZFxuIiwgY3B1LCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CiAKIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCkBAIC0zNjEyLDEzICszNjI2LDEzIEBACiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJfQogCi0JcHJfZGVidWcoInBrdGdlbjogJXMgc3RvcHBpbmcgYWxsIGRldmljZVxuIiwgdC0+dHNrLT5jb21tKTsKKwlwcl9kZWJ1ZygiJXMgc3RvcHBpbmcgYWxsIGRldmljZVxuIiwgdC0+dHNrLT5jb21tKTsKIAlwa3RnZW5fc3RvcCh0KTsKIAotCXByX2RlYnVnKCJwa3RnZW46ICVzIHJlbW92aW5nIGFsbCBkZXZpY2VcbiIsIHQtPnRzay0+Y29tbSk7CisJcHJfZGVidWcoIiVzIHJlbW92aW5nIGFsbCBkZXZpY2VcbiIsIHQtPnRzay0+Y29tbSk7CiAJcGt0Z2VuX3JlbV9hbGxfaWZzKHQpOwogCi0JcHJfZGVidWcoInBrdGdlbjogJXMgcmVtb3ZpbmcgdGhyZWFkLlxuIiwgdC0+dHNrLT5jb21tKTsKKwlwcl9kZWJ1ZygiJXMgcmVtb3ZpbmcgdGhyZWFkXG4iLCB0LT50c2stPmNvbW0pOwogCXBrdGdlbl9yZW1fdGhyZWFkKHQpOwogCiAJcmV0dXJuIDA7CkBAIC0zNjQyLDcgKzM2NTYsNyBAQAogCQl9CiAKIAlpZl91bmxvY2sodCk7Ci0JcHJfZGVidWcoInBrdGdlbjogZmluZF9kZXYoJXMpIHJldHVybmluZyAlcFxuIiwgaWZuYW1lLCBwa3RfZGV2KTsKKwlwcl9kZWJ1ZygiZmluZF9kZXYoJXMpIHJldHVybmluZyAlcFxuIiwgaWZuYW1lLCBwa3RfZGV2KTsKIAlyZXR1cm4gcGt0X2RldjsKIH0KIApAQCAtMzY1OCw4ICszNjcyLDcgQEAKIAlpZl9sb2NrKHQpOwogCiAJaWYgKHBrdF9kZXYtPnBnX3RocmVhZCkgewotCQlwcmludGsoS0VSTl9FUlIgInBrdGdlbjogRVJST1I6IGFscmVhZHkgYXNzaWduZWQgIgotCQkgICAgICAgInRvIGEgdGhyZWFkLlxuIik7CisJCXByX2VycigiRVJST1I6IGFscmVhZHkgYXNzaWduZWQgdG8gYSB0aHJlYWRcbiIpOwogCQlydiA9IC1FQlVTWTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMzY4NSw3ICszNjk4LDcgQEAKIAogCXBrdF9kZXYgPSBfX3BrdGdlbl9OTl90aHJlYWRzKGlmbmFtZSwgRklORCk7CiAJaWYgKHBrdF9kZXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwa3RnZW46IEVSUk9SOiBpbnRlcmZhY2UgYWxyZWFkeSB1c2VkLlxuIik7CisJCXByX2VycigiRVJST1I6IGludGVyZmFjZSBhbHJlYWR5IHVzZWRcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtMzczMCw3ICszNzQzLDcgQEAKIAlwa3RfZGV2LT5lbnRyeSA9IHByb2NfY3JlYXRlX2RhdGEoaWZuYW1lLCAwNjAwLCBwZ19wcm9jX2RpciwKIAkJCQkJICAmcGt0Z2VuX2lmX2ZvcHMsIHBrdF9kZXYpOwogCWlmICghcGt0X2Rldi0+ZW50cnkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwa3RnZW46IGNhbm5vdCBjcmVhdGUgJXMvJXMgcHJvY2ZzIGVudHJ5LlxuIiwKKwkJcHJfZXJyKCJjYW5ub3QgY3JlYXRlICVzLyVzIHByb2NmcyBlbnRyeVxuIiwKIAkJICAgICAgIFBHX1BST0NfRElSLCBpZm5hbWUpOwogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIG91dDI7CkBAIC0zNzYxLDggKzM3NzQsNyBAQAogCXQgPSBremFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCBwa3RnZW5fdGhyZWFkKSwgR0ZQX0tFUk5FTCwKIAkJCSBjcHVfdG9fbm9kZShjcHUpKTsKIAlpZiAoIXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwa3RnZW46IEVSUk9SOiBvdXQgb2YgbWVtb3J5LCBjYW4ndCAiCi0JCSAgICAgICAiY3JlYXRlIG5ldyB0aHJlYWQuXG4iKTsKKwkJcHJfZXJyKCJFUlJPUjogb3V0IG9mIG1lbW9yeSwgY2FuJ3QgY3JlYXRlIG5ldyB0aHJlYWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTM3NzYsOCArMzc4OCw3IEBACiAKIAlwID0ga3RocmVhZF9jcmVhdGUocGt0Z2VuX3RocmVhZF93b3JrZXIsIHQsICJrcGt0Z2VuZF8lZCIsIGNwdSk7CiAJaWYgKElTX0VSUihwKSkgewotCQlwcmludGsoS0VSTl9FUlIgInBrdGdlbjoga2VybmVsX3RocmVhZCgpIGZhaWxlZCAiCi0JCSAgICAgICAiZm9yIGNwdSAlZFxuIiwgdC0+Y3B1KTsKKwkJcHJfZXJyKCJrZXJuZWxfdGhyZWFkKCkgZmFpbGVkIGZvciBjcHUgJWRcbiIsIHQtPmNwdSk7CiAJCWxpc3RfZGVsKCZ0LT50aF9saXN0KTsKIAkJa2ZyZWUodCk7CiAJCXJldHVybiBQVFJfRVJSKHApOwpAQCAtMzc4OCw3ICszNzk5LDcgQEAKIAlwZSA9IHByb2NfY3JlYXRlX2RhdGEodC0+dHNrLT5jb21tLCAwNjAwLCBwZ19wcm9jX2RpciwKIAkJCSAgICAgICZwa3RnZW5fdGhyZWFkX2ZvcHMsIHQpOwogCWlmICghcGUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwa3RnZW46IGNhbm5vdCBjcmVhdGUgJXMvJXMgcHJvY2ZzIGVudHJ5LlxuIiwKKwkJcHJfZXJyKCJjYW5ub3QgY3JlYXRlICVzLyVzIHByb2NmcyBlbnRyeVxuIiwKIAkJICAgICAgIFBHX1BST0NfRElSLCB0LT50c2stPmNvbW0pOwogCQlrdGhyZWFkX3N0b3AocCk7CiAJCWxpc3RfZGVsKCZ0LT50aF9saXN0KTsKQEAgLTM4MjIsMTEgKzM4MzMsMTAgQEAKIAkJCQlzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKIHsKIAotCXByX2RlYnVnKCJwa3RnZW46IHJlbW92ZV9kZXZpY2UgcGt0X2Rldj0lcFxuIiwgcGt0X2Rldik7CisJcHJfZGVidWcoInJlbW92ZV9kZXZpY2UgcGt0X2Rldj0lcFxuIiwgcGt0X2Rldik7CiAKIAlpZiAocGt0X2Rldi0+cnVubmluZykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJwa3RnZW46IFdBUk5JTkc6IHRyeWluZyB0byByZW1vdmUgYSAiCi0JCSAgICAgICAicnVubmluZyBpbnRlcmZhY2UsIHN0b3BwaW5nIGl0IG5vdy5cbiIpOworCQlwcl93YXJuaW5nKCJXQVJOSU5HOiB0cnlpbmcgdG8gcmVtb3ZlIGEgcnVubmluZyBpbnRlcmZhY2UsIHN0b3BwaW5nIGl0IG5vd1xuIik7CiAJCXBrdGdlbl9zdG9wX2RldmljZShwa3RfZGV2KTsKIAl9CiAKQEAgLTM4NTcsNyArMzg2Nyw3IEBACiAJaW50IGNwdTsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBlOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXMiLCB2ZXJzaW9uKTsKKwlwcl9pbmZvKCIlcyIsIHZlcnNpb24pOwogCiAJcGdfcHJvY19kaXIgPSBwcm9jX21rZGlyKFBHX1BST0NfRElSLCBpbml0X25ldC5wcm9jX25ldCk7CiAJaWYgKCFwZ19wcm9jX2RpcikKQEAgLTM4NjUsOCArMzg3NSw3IEBACiAKIAlwZSA9IHByb2NfY3JlYXRlKFBHQ1RSTCwgMDYwMCwgcGdfcHJvY19kaXIsICZwa3RnZW5fZm9wcyk7CiAJaWYgKHBlID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwa3RnZW46IEVSUk9SOiBjYW5ub3QgY3JlYXRlICVzICIKLQkJICAgICAgICJwcm9jZnMgZW50cnkuXG4iLCBQR0NUUkwpOworCQlwcl9lcnIoIkVSUk9SOiBjYW5ub3QgY3JlYXRlICVzIHByb2NmcyBlbnRyeVxuIiwgUEdDVFJMKTsKIAkJcHJvY19uZXRfcmVtb3ZlKCZpbml0X25ldCwgUEdfUFJPQ19ESVIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0zODc5LDEzICszODg4LDEyIEBACiAKIAkJZXJyID0gcGt0Z2VuX2NyZWF0ZV90aHJlYWQoY3B1KTsKIAkJaWYgKGVycikKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgInBrdGdlbjogV0FSTklORzogQ2Fubm90IGNyZWF0ZSAiCi0JCQkgICAgICAgInRocmVhZCBmb3IgY3B1ICVkICglZClcbiIsIGNwdSwgZXJyKTsKKwkJCXByX3dhcm5pbmcoIldBUk5JTkc6IENhbm5vdCBjcmVhdGUgdGhyZWFkIGZvciBjcHUgJWQgKCVkKVxuIiwKKwkJCQkgICBjcHUsIGVycik7CiAJfQogCiAJaWYgKGxpc3RfZW1wdHkoJnBrdGdlbl90aHJlYWRzKSkgewotCQlwcmludGsoS0VSTl9FUlIgInBrdGdlbjogRVJST1I6IEluaXRpYWxpemF0aW9uIGZhaWxlZCBmb3IgIgotCQkgICAgICAgImFsbCB0aHJlYWRzXG4iKTsKKwkJcHJfZXJyKCJFUlJPUjogSW5pdGlhbGl6YXRpb24gZmFpbGVkIGZvciBhbGwgdGhyZWFkc1xuIik7CiAJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZwa3RnZW5fbm90aWZpZXJfYmxvY2spOwogCQlyZW1vdmVfcHJvY19lbnRyeShQR0NUUkwsIHBnX3Byb2NfZGlyKTsKIAkJcHJvY19uZXRfcmVtb3ZlKCZpbml0X25ldCwgUEdfUFJPQ19ESVIpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCAxYTJhZjI0Li5mNzhkODIxIDEwMDY0NAotLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuYworKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwpAQCAtNTc5LDcgKzU3OSw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGNvcHlfcnRubF9saW5rX3N0YXRzKHN0cnVjdCBydG5sX2xpbmtfc3RhdHMgKmEsCi0JCQkJIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpiKQorCQkJCSBjb25zdCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKmIpCiB7CiAJYS0+cnhfcGFja2V0cyA9IGItPnJ4X3BhY2tldHM7CiAJYS0+dHhfcGFja2V0cyA9IGItPnR4X3BhY2tldHM7CkBAIC02MTAsNyArNjEwLDcgQEAKIAlhLT50eF9jb21wcmVzc2VkID0gYi0+dHhfY29tcHJlc3NlZDsKIH0KIAotc3RhdGljIHZvaWQgY29weV9ydG5sX2xpbmtfc3RhdHM2NCh2b2lkICp2LCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYikKK3N0YXRpYyB2b2lkIGNvcHlfcnRubF9saW5rX3N0YXRzNjQodm9pZCAqdiwgY29uc3Qgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpiKQogewogCXN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCBhOwogCkBAIC02ODYsNyArNjg2LDcgQEAKIAkJcmV0dXJuIHBvcnRfc2VsZl9zaXplOwogfQogCi1zdGF0aWMgaW5saW5lIHNpemVfdCBpZl9ubG1zZ19zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbm9pbmxpbmUgc2l6ZV90IGlmX25sbXNnX3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBpZmluZm9tc2cpKQogCSAgICAgICArIG5sYV90b3RhbF9zaXplKElGTkFNU0laKSAvKiBJRkxBX0lGTkFNRSAqLwpAQCAtNzkxLDcgKzc5MSw4IEBACiB7CiAJc3RydWN0IGlmaW5mb21zZyAqaWZtOwogCXN0cnVjdCBubG1zZ2hkciAqbmxoOwotCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKKwlzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgdGVtcDsKKwljb25zdCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzOwogCXN0cnVjdCBubGF0dHIgKmF0dHI7CiAKIAlubGggPSBubG1zZ19wdXQoc2tiLCBwaWQsIHNlcSwgdHlwZSwgc2l6ZW9mKCppZm0pLCBmbGFncyk7CkBAIC04NDcsNyArODQ4LDcgQEAKIAlpZiAoYXR0ciA9PSBOVUxMKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAotCXN0YXRzID0gZGV2X2dldF9zdGF0cyhkZXYpOworCXN0YXRzID0gZGV2X2dldF9zdGF0cyhkZXYsICZ0ZW1wKTsKIAljb3B5X3J0bmxfbGlua19zdGF0cyhubGFfZGF0YShhdHRyKSwgc3RhdHMpOwogCiAJYXR0ciA9IG5sYV9yZXNlcnZlKHNrYiwgSUZMQV9TVEFUUzY0LApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2NtLmMgYi9uZXQvY29yZS9zY20uYwppbmRleCBiODhmNmY5Li40MTNjYWI4IDEwMDY0NAotLS0gYS9uZXQvY29yZS9zY20uYworKysgYi9uZXQvY29yZS9zY20uYwpAQCAtMTMwLDYgKzEzMCw3IEBACiAJCX0KIAl9CiB9CitFWFBPUlRfU1lNQk9MKF9fc2NtX2Rlc3Ryb3kpOwogCiBpbnQgX19zY21fc2VuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpwKQogewpAQCAtMTcwLDYgKzE3MSwzMCBAQAogCQkJZXJyID0gc2NtX2NoZWNrX2NyZWRzKCZwLT5jcmVkcyk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gZXJyb3I7CisKKwkJCWlmIChwaWRfdm5yKHAtPnBpZCkgIT0gcC0+Y3JlZHMucGlkKSB7CisJCQkJc3RydWN0IHBpZCAqcGlkOworCQkJCWVyciA9IC1FU1JDSDsKKwkJCQlwaWQgPSBmaW5kX2dldF9waWQocC0+Y3JlZHMucGlkKTsKKwkJCQlpZiAoIXBpZCkKKwkJCQkJZ290byBlcnJvcjsKKwkJCQlwdXRfcGlkKHAtPnBpZCk7CisJCQkJcC0+cGlkID0gcGlkOworCQkJfQorCisJCQlpZiAoKHAtPmNyZWQtPmV1aWQgIT0gcC0+Y3JlZHMudWlkKSB8fAorCQkJCShwLT5jcmVkLT5lZ2lkICE9IHAtPmNyZWRzLmdpZCkpIHsKKwkJCQlzdHJ1Y3QgY3JlZCAqY3JlZDsKKwkJCQllcnIgPSAtRU5PTUVNOworCQkJCWNyZWQgPSBwcmVwYXJlX2NyZWRzKCk7CisJCQkJaWYgKCFjcmVkKQorCQkJCQlnb3RvIGVycm9yOworCisJCQkJY3JlZC0+dWlkID0gY3JlZC0+ZXVpZCA9IHAtPmNyZWRzLnVpZDsKKwkJCQljcmVkLT5naWQgPSBjcmVkLT5lZ2lkID0gcC0+Y3JlZHMudWlkOworCQkJCXB1dF9jcmVkKHAtPmNyZWQpOworCQkJCXAtPmNyZWQgPSBjcmVkOworCQkJfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlnb3RvIGVycm9yOwpAQCAtMTg3LDYgKzIxMiw3IEBACiAJc2NtX2Rlc3Ryb3kocCk7CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0woX19zY21fc2VuZCk7CiAKIGludCBwdXRfY21zZyhzdHJ1Y3QgbXNnaGRyICogbXNnLCBpbnQgbGV2ZWwsIGludCB0eXBlLCBpbnQgbGVuLCB2b2lkICpkYXRhKQogewpAQCAtMjI1LDYgKzI1MSw3IEBACiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0wocHV0X2Ntc2cpOwogCiB2b2lkIHNjbV9kZXRhY2hfZmRzKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSkKIHsKQEAgLTI5NCw2ICszMjEsNyBAQAogCSAqLwogCV9fc2NtX2Rlc3Ryb3koc2NtKTsKIH0KK0VYUE9SVF9TWU1CT0woc2NtX2RldGFjaF9mZHMpOwogCiBzdHJ1Y3Qgc2NtX2ZwX2xpc3QgKnNjbV9mcF9kdXAoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwpCiB7CkBAIC0zMTEsOSArMzM5LDQgQEAKIAl9CiAJcmV0dXJuIG5ld19mcGw7CiB9Ci0KLUVYUE9SVF9TWU1CT0woX19zY21fZGVzdHJveSk7Ci1FWFBPUlRfU1lNQk9MKF9fc2NtX3NlbmQpOwotRVhQT1JUX1NZTUJPTChwdXRfY21zZyk7Ci1FWFBPUlRfU1lNQk9MKHNjbV9kZXRhY2hfZmRzKTsKIEVYUE9SVF9TWU1CT0woc2NtX2ZwX2R1cCk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IDM0NDMyYjQuLjNhMjUxM2YgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCisrKyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC04MTcsNyArODE3LDcgQEAKIAltZW1jcHkoZGF0YSArIG5oZWFkLCBza2ItPmhlYWQsIHNrYi0+dGFpbCAtIHNrYi0+aGVhZCk7CiAjZW5kaWYKIAltZW1jcHkoZGF0YSArIHNpemUsIHNrYl9lbmRfcG9pbnRlcihza2IpLAotCSAgICAgICBzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykpOworCSAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvLCBmcmFnc1tza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzXSkpOwogCiAJZm9yIChpID0gMDsgaSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGkrKykKIAkJZ2V0X3BhZ2Uoc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5wYWdlKTsKQEAgLTg0Myw3ICs4NDMsOSBAQAogCXNrYi0+bmV0d29ya19oZWFkZXIgICArPSBvZmY7CiAJaWYgKHNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSkKIAkJc2tiLT5tYWNfaGVhZGVyICs9IG9mZjsKLQlza2ItPmNzdW1fc3RhcnQgICAgICAgKz0gbmhlYWQ7CisJLyogT25seSBhZGp1c3QgdGhpcyBpZiBpdCBhY3R1YWxseSBpcyBjc3VtX3N0YXJ0IHJhdGhlciB0aGFuIGNzdW0gKi8KKwlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkKKwkJc2tiLT5jc3VtX3N0YXJ0ICs9IG5oZWFkOwogCXNrYi0+Y2xvbmVkICAgPSAwOwogCXNrYi0+aGRyX2xlbiAgPSAwOwogCXNrYi0+bm9oZHIgICAgPSAwOwpAQCAtOTMwLDcgKzkzMiw4IEBACiAJY29weV9za2JfaGVhZGVyKG4sIHNrYik7CiAKIAlvZmYgICAgICAgICAgICAgICAgICA9IG5ld2hlYWRyb29tIC0gb2xkaGVhZHJvb207Ci0Jbi0+Y3N1bV9zdGFydCAgICAgICArPSBvZmY7CisJaWYgKG4tPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKQorCQluLT5jc3VtX3N0YXJ0ICs9IG9mZjsKICNpZmRlZiBORVRfU0tCVUZGX0RBVEFfVVNFU19PRkZTRVQKIAluLT50cmFuc3BvcnRfaGVhZGVyICs9IG9mZjsKIAluLT5uZXR3b3JrX2hlYWRlciAgICs9IG9mZjsKQEAgLTI0ODMsNyArMjQ4Niw2IEBACiAJc2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiLT5kYXRhLCBsZW4pOwogCXJldHVybiBza2ItPmRhdGEgKz0gbGVuOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChza2JfcHVsbF9yY3N1bSk7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jCmluZGV4IDJjZjdmOWYuLmIwNWI5YjYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2suYworKysgYi9uZXQvY29yZS9zb2NrLmMKQEAgLTExMCw2ICsxMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvdXNlcl9uYW1lc3BhY2UuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtMTU2LDcgKzE1Nyw3IEBACiAgICJza19sb2NrLTI3IiAgICAgICAsICJza19sb2NrLTI4IiAgICAgICAgICAsICJza19sb2NrLUFGX0NBTiIgICAgICAsCiAgICJza19sb2NrLUFGX1RJUEMiICAsICJza19sb2NrLUFGX0JMVUVUT09USCIsICJza19sb2NrLUlVQ1YiICAgICAgICAsCiAgICJza19sb2NrLUFGX1JYUlBDIiAsICJza19sb2NrLUFGX0lTRE4iICAgICAsICJza19sb2NrLUFGX1BIT05FVCIgICAsCi0gICJza19sb2NrLUFGX0lFRUU4MDIxNTQiLAorICAic2tfbG9jay1BRl9JRUVFODAyMTU0IiwgInNrX2xvY2stQUZfQ0FJRiIgLAogICAic2tfbG9jay1BRl9NQVgiCiB9Owogc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGFmX2ZhbWlseV9zbG9ja19rZXlfc3RyaW5nc1tBRl9NQVgrMV0gPSB7CkBAIC0xNzIsNyArMTczLDcgQEAKICAgInNsb2NrLTI3IiAgICAgICAsICJzbG9jay0yOCIgICAgICAgICAgLCAic2xvY2stQUZfQ0FOIiAgICAgICwKICAgInNsb2NrLUFGX1RJUEMiICAsICJzbG9jay1BRl9CTFVFVE9PVEgiLCAic2xvY2stQUZfSVVDViIgICAgICwKICAgInNsb2NrLUFGX1JYUlBDIiAsICJzbG9jay1BRl9JU0ROIiAgICAgLCAic2xvY2stQUZfUEhPTkVUIiAgICwKLSAgInNsb2NrLUFGX0lFRUU4MDIxNTQiLAorICAic2xvY2stQUZfSUVFRTgwMjE1NCIsICJzbG9jay1BRl9DQUlGIiAsCiAgICJzbG9jay1BRl9NQVgiCiB9Owogc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGFmX2ZhbWlseV9jbG9ja19rZXlfc3RyaW5nc1tBRl9NQVgrMV0gPSB7CkBAIC0xODgsNyArMTg5LDcgQEAKICAgImNsb2NrLTI3IiAgICAgICAsICJjbG9jay0yOCIgICAgICAgICAgLCAiY2xvY2stQUZfQ0FOIiAgICAgICwKICAgImNsb2NrLUFGX1RJUEMiICAsICJjbG9jay1BRl9CTFVFVE9PVEgiLCAiY2xvY2stQUZfSVVDViIgICAgICwKICAgImNsb2NrLUFGX1JYUlBDIiAsICJjbG9jay1BRl9JU0ROIiAgICAgLCAiY2xvY2stQUZfUEhPTkVUIiAgICwKLSAgImNsb2NrLUFGX0lFRUU4MDIxNTQiLAorICAiY2xvY2stQUZfSUVFRTgwMjE1NCIsICJjbG9jay1BRl9DQUlGIiAsCiAgICJjbG9jay1BRl9NQVgiCiB9OwogCkBAIC03NDksNiArNzUwLDIwIEBACiBFWFBPUlRfU1lNQk9MKHNvY2tfc2V0c29ja29wdCk7CiAKIAordm9pZCBjcmVkX3RvX3VjcmVkKHN0cnVjdCBwaWQgKnBpZCwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsCisJCSAgIHN0cnVjdCB1Y3JlZCAqdWNyZWQpCit7CisJdWNyZWQtPnBpZCA9IHBpZF92bnIocGlkKTsKKwl1Y3JlZC0+dWlkID0gdWNyZWQtPmdpZCA9IC0xOworCWlmIChjcmVkKSB7CisJCXN0cnVjdCB1c2VyX25hbWVzcGFjZSAqY3VycmVudF9ucyA9IGN1cnJlbnRfdXNlcl9ucygpOworCisJCXVjcmVkLT51aWQgPSB1c2VyX25zX21hcF91aWQoY3VycmVudF9ucywgY3JlZCwgY3JlZC0+ZXVpZCk7CisJCXVjcmVkLT5naWQgPSB1c2VyX25zX21hcF9naWQoY3VycmVudF9ucywgY3JlZCwgY3JlZC0+ZWdpZCk7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoY3JlZF90b191Y3JlZCk7CisKIGludCBzb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKIHsKQEAgLTkwMSwxMSArOTE2LDE1IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTT19QRUVSQ1JFRDoKLQkJaWYgKGxlbiA+IHNpemVvZihzay0+c2tfcGVlcmNyZWQpKQotCQkJbGVuID0gc2l6ZW9mKHNrLT5za19wZWVyY3JlZCk7Ci0JCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAmc2stPnNrX3BlZXJjcmVkLCBsZW4pKQorCXsKKwkJc3RydWN0IHVjcmVkIHBlZXJjcmVkOworCQlpZiAobGVuID4gc2l6ZW9mKHBlZXJjcmVkKSkKKwkJCWxlbiA9IHNpemVvZihwZWVyY3JlZCk7CisJCWNyZWRfdG9fdWNyZWQoc2stPnNrX3BlZXJfcGlkLCBzay0+c2tfcGVlcl9jcmVkLCAmcGVlcmNyZWQpOworCQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgJnBlZXJjcmVkLCBsZW4pKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWdvdG8gbGVub3V0OworCX0KIAogCWNhc2UgU09fUEVFUk5BTUU6CiAJewpAQCAtMTExOSw2ICsxMTM4LDkgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBvcHRtZW0gbGVha2FnZSAoJWQgYnl0ZXMpIGRldGVjdGVkLlxuIiwKIAkJICAgICAgIF9fZnVuY19fLCBhdG9taWNfcmVhZCgmc2stPnNrX29tZW1fYWxsb2MpKTsKIAorCWlmIChzay0+c2tfcGVlcl9jcmVkKQorCQlwdXRfY3JlZChzay0+c2tfcGVlcl9jcmVkKTsKKwlwdXRfcGlkKHNrLT5za19wZWVyX3BpZCk7CiAJcHV0X25ldChzb2NrX25ldChzaykpOwogCXNrX3Byb3RfZnJlZShzay0+c2tfcHJvdF9jcmVhdG9yLCBzayk7CiB9CkBAIC0xMzE3LDkgKzEzMzksMTAgQEAKIHZvaWQgc29ja19yZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNrYi0+c2s7CisJdW5zaWduZWQgaW50IGxlbiA9IHNrYi0+dHJ1ZXNpemU7CiAKLQlhdG9taWNfc3ViKHNrYi0+dHJ1ZXNpemUsICZzay0+c2tfcm1lbV9hbGxvYyk7Ci0Jc2tfbWVtX3VuY2hhcmdlKHNrYi0+c2ssIHNrYi0+dHJ1ZXNpemUpOworCWF0b21pY19zdWIobGVuLCAmc2stPnNrX3JtZW1fYWxsb2MpOworCXNrX21lbV91bmNoYXJnZShzaywgbGVuKTsKIH0KIEVYUE9SVF9TWU1CT0woc29ja19yZnJlZSk7CiAKQEAgLTE5NTQsOSArMTk3Nyw4IEBACiAJc2stPnNrX3NuZG1zZ19wYWdlCT0JTlVMTDsKIAlzay0+c2tfc25kbXNnX29mZgk9CTA7CiAKLQlzay0+c2tfcGVlcmNyZWQucGlkIAk9CTA7Ci0Jc2stPnNrX3BlZXJjcmVkLnVpZAk9CS0xOwotCXNrLT5za19wZWVyY3JlZC5naWQJPQktMTsKKwlzay0+c2tfcGVlcl9waWQgCT0JTlVMTDsKKwlzay0+c2tfcGVlcl9jcmVkCT0JTlVMTDsKIAlzay0+c2tfd3JpdGVfcGVuZGluZwk9CTA7CiAJc2stPnNrX3Jjdmxvd2F0CQk9CTE7CiAJc2stPnNrX3JjdnRpbWVvCQk9CU1BWF9TQ0hFRFVMRV9USU1FT1VUOwpAQCAtMjIxMCw4ICsyMjMyLDcgQEAKICNpZmRlZiBDT05GSUdfTkVUX05TCiB2b2lkIHNvY2tfcHJvdF9pbnVzZV9hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHJvdG8gKnByb3QsIGludCB2YWwpCiB7Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlwZXJfY3B1X3B0cihuZXQtPmNvcmUuaW51c2UsIGNwdSktPnZhbFtwcm90LT5pbnVzZV9pZHhdICs9IHZhbDsKKwlfX3RoaXNfY3B1X2FkZChuZXQtPmNvcmUuaW51c2UtPnZhbFtwcm90LT5pbnVzZV9pZHhdLCB2YWwpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc29ja19wcm90X2ludXNlX2FkZCk7CiAKQEAgLTIyNTcsNyArMjI3OCw3IEBACiAKIHZvaWQgc29ja19wcm90X2ludXNlX2FkZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IHZhbCkKIHsKLQlfX2dldF9jcHVfdmFyKHByb3RfaW51c2UpLnZhbFtwcm90LT5pbnVzZV9pZHhdICs9IHZhbDsKKwlfX3RoaXNfY3B1X2FkZChwcm90X2ludXNlLnZhbFtwcm90LT5pbnVzZV9pZHhdLCB2YWwpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc29ja19wcm90X2ludXNlX2FkZCk7CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N0cmVhbS5jIGIvbmV0L2NvcmUvc3RyZWFtLmMKaW5kZXggY2MxOTZmNDJiLi5kOTU5ZTBmIDEwMDY0NAotLS0gYS9uZXQvY29yZS9zdHJlYW0uYworKysgYi9uZXQvY29yZS9zdHJlYW0uYwpAQCAtNDMsNyArNDMsNiBAQAogCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiB9Ci0KIEVYUE9SVF9TWU1CT0woc2tfc3RyZWFtX3dyaXRlX3NwYWNlKTsKIAogLyoqCkBAIC04MSw3ICs4MCw2IEBACiAJfSB3aGlsZSAoIWRvbmUpOwogCXJldHVybiAwOwogfQotCiBFWFBPUlRfU1lNQk9MKHNrX3N0cmVhbV93YWl0X2Nvbm5lY3QpOwogCiAvKioKQEAgLTEwOSw3ICsxMDcsNiBAQAogCQlmaW5pc2hfd2FpdChza19zbGVlcChzayksICZ3YWl0KTsKIAl9CiB9Ci0KIEVYUE9SVF9TWU1CT0woc2tfc3RyZWFtX3dhaXRfY2xvc2UpOwogCiAvKioKQEAgLTE3NCw3ICsxNzEsNiBAQAogCWVyciA9IHNvY2tfaW50cl9lcnJubygqdGltZW9fcCk7CiAJZ290byBvdXQ7CiB9Ci0KIEVYUE9SVF9TWU1CT0woc2tfc3RyZWFtX3dhaXRfbWVtb3J5KTsKIAogaW50IHNrX3N0cmVhbV9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncywgaW50IGVycikKQEAgLTE4NSw3ICsxODEsNiBAQAogCQlzZW5kX3NpZyhTSUdQSVBFLCBjdXJyZW50LCAwKTsKIAlyZXR1cm4gZXJyOwogfQotCiBFWFBPUlRfU1lNQk9MKHNrX3N0cmVhbV9lcnJvcik7CiAKIHZvaWQgc2tfc3RyZWFtX2tpbGxfcXVldWVzKHN0cnVjdCBzb2NrICpzaykKQEAgLTIxMCw1ICsyMDUsNCBAQAogCSAqIGhhdmUgZ29uZSBhd2F5LCBvbmx5IHRoZSBuZXQgbGF5ZXIga25vd3MgY2FuIHRvdWNoIGl0LgogCSAqLwogfQotCiBFWFBPUlRfU1lNQk9MKHNrX3N0cmVhbV9raWxsX3F1ZXVlcyk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS90aW1lc3RhbXBpbmcuYyBiL25ldC9jb3JlL3RpbWVzdGFtcGluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZTZjMjIKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvY29yZS90aW1lc3RhbXBpbmcuYwpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIFBUUCAxNTg4IGNsb2NrIHN1cHBvcnQgLSBzdXBwb3J0IGZvciB0aW1lc3RhbXBpbmcgaW4gUEhZIGRldmljZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgT01JQ1JPTiBlbGVjdHJvbmljcyBHbWJICisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2VycnF1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvcHRwX2NsYXNzaWZ5Lmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisKK3N0YXRpYyBzdHJ1Y3Qgc29ja19maWx0ZXIgcHRwX2ZpbHRlcltdID0geworCVBUUF9GSUxURVIKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpZiAobGlrZWx5KHNrYi0+ZGV2ICYmCisJCSAgIHNrYi0+ZGV2LT5waHlkZXYgJiYKKwkJICAgc2tiLT5kZXYtPnBoeWRldi0+ZHJ2KSkKKwkJcmV0dXJuIHNrX3J1bl9maWx0ZXIoc2tiLCBwdHBfZmlsdGVyLCBBUlJBWV9TSVpFKHB0cF9maWx0ZXIpKTsKKwllbHNlCisJCXJldHVybiBQVFBfQ0xBU1NfTk9ORTsKK30KKwordm9pZCBza2JfY2xvbmVfdHhfdGltZXN0YW1wKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqY2xvbmU7CisJc3RydWN0IHNvY2sgKnNrID0gc2tiLT5zazsKKwl1bnNpZ25lZCBpbnQgdHlwZTsKKworCWlmICghc2spCisJCXJldHVybjsKKworCXR5cGUgPSBjbGFzc2lmeShza2IpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBQVFBfQ0xBU1NfVjFfSVBWNDoKKwljYXNlIFBUUF9DTEFTU19WMV9JUFY2OgorCWNhc2UgUFRQX0NMQVNTX1YyX0lQVjQ6CisJY2FzZSBQVFBfQ0xBU1NfVjJfSVBWNjoKKwljYXNlIFBUUF9DTEFTU19WMl9MMjoKKwljYXNlIFBUUF9DTEFTU19WMl9WTEFOOgorCQlwaHlkZXYgPSBza2ItPmRldi0+cGh5ZGV2OworCQlpZiAobGlrZWx5KHBoeWRldi0+ZHJ2LT50eHRzdGFtcCkpIHsKKwkJCWNsb25lID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CisJCQlpZiAoIWNsb25lKQorCQkJCXJldHVybjsKKwkJCWNsb25lLT5zayA9IHNrOworCQkJcGh5ZGV2LT5kcnYtPnR4dHN0YW1wKHBoeWRldiwgY2xvbmUsIHR5cGUpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKwordm9pZCBza2JfY29tcGxldGVfdHhfdGltZXN0YW1wKHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICAgc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzICpod3RzdGFtcHMpCit7CisJc3RydWN0IHNvY2sgKnNrID0gc2tiLT5zazsKKwlzdHJ1Y3Qgc29ja19leHRlcnJfc2tiICpzZXJyOworCWludCBlcnI7CisKKwlpZiAoIWh3dHN0YW1wcykKKwkJcmV0dXJuOworCisJKnNrYl9od3RzdGFtcHMoc2tiKSA9ICpod3RzdGFtcHM7CisJc2VyciA9IFNLQl9FWFRfRVJSKHNrYik7CisJbWVtc2V0KHNlcnIsIDAsIHNpemVvZigqc2VycikpOworCXNlcnItPmVlLmVlX2Vycm5vID0gRU5PTVNHOworCXNlcnItPmVlLmVlX29yaWdpbiA9IFNPX0VFX09SSUdJTl9USU1FU1RBTVBJTkc7CisJc2tiLT5zayA9IE5VTEw7CisJZXJyID0gc29ja19xdWV1ZV9lcnJfc2tiKHNrLCBza2IpOworCWlmIChlcnIpCisJCWtmcmVlX3NrYihza2IpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2tiX2NvbXBsZXRlX3R4X3RpbWVzdGFtcCk7CisKK2Jvb2wgc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CisJdW5zaWduZWQgaW50IHR5cGU7CisKKwlza2JfcHVzaChza2IsIEVUSF9ITEVOKTsKKworCXR5cGUgPSBjbGFzc2lmeShza2IpOworCisJc2tiX3B1bGwoc2tiLCBFVEhfSExFTik7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFBUUF9DTEFTU19WMV9JUFY0OgorCWNhc2UgUFRQX0NMQVNTX1YxX0lQVjY6CisJY2FzZSBQVFBfQ0xBU1NfVjJfSVBWNDoKKwljYXNlIFBUUF9DTEFTU19WMl9JUFY2OgorCWNhc2UgUFRQX0NMQVNTX1YyX0wyOgorCWNhc2UgUFRQX0NMQVNTX1YyX1ZMQU46CisJCXBoeWRldiA9IHNrYi0+ZGV2LT5waHlkZXY7CisJCWlmIChsaWtlbHkocGh5ZGV2LT5kcnYtPnJ4dHN0YW1wKSkKKwkJCXJldHVybiBwaHlkZXYtPmRydi0+cnh0c3RhbXAocGh5ZGV2LCBza2IsIHR5cGUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgX19pbml0IHNrYl90aW1lc3RhbXBpbmdfaW5pdCh2b2lkKQoreworCUJVR19PTihza19jaGtfZmlsdGVyKHB0cF9maWx0ZXIsIEFSUkFZX1NJWkUocHRwX2ZpbHRlcikpKTsKK30KZGlmZiAtLWdpdCBhL25ldC9jb3JlL3V0aWxzLmMgYi9uZXQvY29yZS91dGlscy5jCmluZGV4IDgzODI1MDIuLmY0MTg1NDQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3V0aWxzLmMKKysrIGIvbmV0L2NvcmUvdXRpbHMuYwpAQCAtNzcsNyArNzcsNiBAQAogCX0KIAlyZXR1cm4oaHRvbmwobCkpOwogfQotCiBFWFBPUlRfU1lNQk9MKGluX2F0b24pOwogCiAjZGVmaW5lIElONlBUT05fWERJR0lUCQkweDAwMDEwMDAwCkBAIC0xNjIsNyArMTYxLDYgQEAKIAkJKmVuZCA9IHM7CiAJcmV0dXJuIHJldDsKIH0KLQogRVhQT1JUX1NZTUJPTChpbjRfcHRvbik7CiAKIGludCBpbjZfcHRvbihjb25zdCBjaGFyICpzcmMsIGludCBzcmNsZW4sCkBAIC0yODAsNyArMjc4LDYgQEAKIAkJKmVuZCA9IHM7CiAJcmV0dXJuIHJldDsKIH0KLQogRVhQT1JUX1NZTUJPTChpbjZfcHRvbik7CiAKIHZvaWQgaW5ldF9wcm90b19jc3VtX3JlcGxhY2U0KF9fc3VtMTYgKnN1bSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2Fja3ZlYy5jIGIvbmV0L2RjY3AvYWNrdmVjLmMKaW5kZXggMDFlNGQzOS4uOTJhNmZjYiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvYWNrdmVjLmMKKysrIGIvbmV0L2RjY3AvYWNrdmVjLmMKQEAgLTgyLDcgKzgyLDcgQEAKIAllbGFwc2VkX3RpbWUgPSBkZWx0YSAvIDEwOwogCiAJaWYgKGVsYXBzZWRfdGltZSAhPSAwICYmCi0JICAgIGRjY3BfaW5zZXJ0X29wdGlvbl9lbGFwc2VkX3RpbWUoc2ssIHNrYiwgZWxhcHNlZF90aW1lKSkKKwkgICAgZGNjcF9pbnNlcnRfb3B0aW9uX2VsYXBzZWRfdGltZShza2IsIGVsYXBzZWRfdGltZSkpCiAJCXJldHVybiAtMTsKIAogCWF2ciA9IGRjY3BfYWNrdmVjX3JlY29yZF9uZXcoKTsKQEAgLTIwMSw3ICsyMDEsNyBAQAogCQkJCQkJIGNvbnN0IHVuc2lnbmVkIGludCBwYWNrZXRzLAogCQkJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgc3RhdGUpCiB7Ci0JdW5zaWduZWQgaW50IGdhcDsKKwlsb25nIGdhcDsKIAlsb25nIG5ld19oZWFkOwogCiAJaWYgKGF2LT5hdl92ZWNfbGVuICsgcGFja2V0cyA+IERDQ1BfTUFYX0FDS1ZFQ19MRU4pCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkcy9jY2lkMy5jIGIvbmV0L2RjY3AvY2NpZHMvY2NpZDMuYwppbmRleCBkMzIzNTg5Li45NWY3NTI5IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9jY2lkcy9jY2lkMy5jCisrKyBiL25ldC9kY2NwL2NjaWRzL2NjaWQzLmMKQEAgLTcxNSw5ICs3MTUsOSBAQAogCXhfcmVjdiA9IGh0b25sKGhjLT5yeF94X3JlY3YpOwogCXBpbnYgICA9IGh0b25sKGhjLT5yeF9waW52KTsKIAotCWlmIChkY2NwX2luc2VydF9vcHRpb24oc2ssIHNrYiwgVEZSQ19PUFRfTE9TU19FVkVOVF9SQVRFLAorCWlmIChkY2NwX2luc2VydF9vcHRpb24oc2tiLCBURlJDX09QVF9MT1NTX0VWRU5UX1JBVEUsCiAJCQkgICAgICAgJnBpbnYsIHNpemVvZihwaW52KSkgfHwKLQkgICAgZGNjcF9pbnNlcnRfb3B0aW9uKHNrLCBza2IsIFRGUkNfT1BUX1JFQ0VJVkVfUkFURSwKKwkgICAgZGNjcF9pbnNlcnRfb3B0aW9uKHNrYiwgVEZSQ19PUFRfUkVDRUlWRV9SQVRFLAogCQkJICAgICAgICZ4X3JlY3YsIHNpemVvZih4X3JlY3YpKSkKIAkJcmV0dXJuIC0xOwogCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9kY2NwLmggYi9uZXQvZGNjcC9kY2NwLmgKaW5kZXggYTEwYTYxYS4uM2NjZWYxYiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvZGNjcC5oCisrKyBiL25ldC9kY2NwL2RjY3AuaApAQCAtNDQ2LDE2ICs0NDYsMTIgQEAKIAogZXh0ZXJuIGludCBkY2NwX2luc2VydF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50IGRjY3BfaW5zZXJ0X29wdGlvbnNfcnNrKHN0cnVjdCBkY2NwX3JlcXVlc3Rfc29jayosIHN0cnVjdCBza19idWZmKik7Ci1leHRlcm4gaW50IGRjY3BfaW5zZXJ0X29wdGlvbl9lbGFwc2VkX3RpbWUoc3RydWN0IHNvY2sgKnNrLAotCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJICAgIHUzMiBlbGFwc2VkX3RpbWUpOworZXh0ZXJuIGludCBkY2NwX2luc2VydF9vcHRpb25fZWxhcHNlZF90aW1lKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBlbGFwc2VkKTsKIGV4dGVybiB1MzIgZGNjcF90aW1lc3RhbXAodm9pZCk7CiBleHRlcm4gdm9pZCBkY2NwX3RpbWVzdGFtcGluZ19pbml0KHZvaWQpOwotZXh0ZXJuIGludCBkY2NwX2luc2VydF9vcHRpb25fdGltZXN0YW1wKHN0cnVjdCBzb2NrICpzaywKLQkJCQkJIHN0cnVjdCBza19idWZmICpza2IpOwotZXh0ZXJuIGludCBkY2NwX2luc2VydF9vcHRpb24oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgb3B0aW9uLAotCQkJICAgICAgIGNvbnN0IHZvaWQgKnZhbHVlLCB1bnNpZ25lZCBjaGFyIGxlbik7CitleHRlcm4gaW50IGRjY3BfaW5zZXJ0X29wdGlvbl90aW1lc3RhbXAoc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGRjY3BfaW5zZXJ0X29wdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBjaGFyIG9wdGlvbiwKKwkJCSAgICAgIGNvbnN0IHZvaWQgKnZhbHVlLCB1bnNpZ25lZCBjaGFyIGxlbik7CiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCiBleHRlcm4gaW50IGRjY3Bfc3lzY3RsX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9pbnB1dC5jIGIvbmV0L2RjY3AvaW5wdXQuYwppbmRleCA2YmViNmE3Li4xMGM5NTdhIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pbnB1dC5jCisrKyBiL25ldC9kY2NwL2lucHV0LmMKQEAgLTQzMCw3ICs0MzAsNyBAQAogCQlpZiAoZGNjcF9wYXJzZV9vcHRpb25zKHNrLCBOVUxMLCBza2IpKQogCQkJcmV0dXJuIDE7CiAKLQkJLyogT2J0YWluIHVzZWMgUlRUIHNhbXBsZSBmcm9tIFNZTiBleGNoYW5nZSAodXNlZCBieSBDQ0lEIDMpICovCisJCS8qIE9idGFpbiB1c2VjIFJUVCBzYW1wbGUgZnJvbSBTWU4gZXhjaGFuZ2UgKHVzZWQgYnkgVEZSQykuICovCiAJCWlmIChsaWtlbHkoZHAtPmRjY3BzX29wdGlvbnNfcmVjZWl2ZWQuZGNjcG9yX3RpbWVzdGFtcF9lY2hvKSkKIAkJCWRwLT5kY2Nwc19zeW5fcnR0ID0gZGNjcF9zYW1wbGVfcnR0KHNrLCAxMCAqICh0c3RhbXAgLQogCQkJICAgIGRwLT5kY2Nwc19vcHRpb25zX3JlY2VpdmVkLmRjY3Bvcl90aW1lc3RhbXBfZWNobykpOwpAQCAtNTM1LDYgKzUzNSw4IEBACiAJCQkJCQkgICBjb25zdCBzdHJ1Y3QgZGNjcF9oZHIgKmRoLAogCQkJCQkJICAgY29uc3QgdW5zaWduZWQgbGVuKQogeworCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CisJdTMyIHNhbXBsZSA9IGRwLT5kY2Nwc19vcHRpb25zX3JlY2VpdmVkLmRjY3Bvcl90aW1lc3RhbXBfZWNobzsKIAlpbnQgcXVldWVkID0gMDsKIAogCXN3aXRjaCAoZGgtPmRjY3BoX3R5cGUpIHsKQEAgLTU1OSw3ICs1NjEsMTQgQEAKIAkJaWYgKHNrLT5za19zdGF0ZSA9PSBEQ0NQX1BBUlRPUEVOKQogCQkJaW5ldF9jc2tfY2xlYXJfeG1pdF90aW1lcihzaywgSUNTS19USU1FX0RBQ0spOwogCi0JCWRjY3Bfc2soc2spLT5kY2Nwc19vc3IgPSBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXE7CisJCS8qIE9idGFpbiB1c2VjIFJUVCBzYW1wbGUgZnJvbSBTWU4gZXhjaGFuZ2UgKHVzZWQgYnkgVEZSQykuICovCisJCWlmIChsaWtlbHkoc2FtcGxlKSkgeworCQkJbG9uZyBkZWx0YSA9IGRjY3BfdGltZXN0YW1wKCkgLSBzYW1wbGU7CisKKwkJCWRwLT5kY2Nwc19zeW5fcnR0ID0gZGNjcF9zYW1wbGVfcnR0KHNrLCAxMCAqIGRlbHRhKTsKKwkJfQorCisJCWRwLT5kY2Nwc19vc3IgPSBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXE7CiAJCWRjY3Bfc2V0X3N0YXRlKHNrLCBEQ0NQX09QRU4pOwogCiAJCWlmIChkaC0+ZGNjcGhfdHlwZSA9PSBEQ0NQX1BLVF9EQVRBQUNLIHx8CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9pcHY0LmMgYi9uZXQvZGNjcC9pcHY0LmMKaW5kZXggZDliMTFlZi4uZDRhMTY2ZiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvaXB2NC5jCisrKyBiL25ldC9kY2NwL2lwdjQuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAJCWdvdG8gZmFpbHVyZTsKIAogCS8qIE9LLCBub3cgY29tbWl0IGRlc3RpbmF0aW9uIHRvIHNvY2tldC4gICovCi0Jc2tfc2V0dXBfY2FwcyhzaywgJnJ0LT51LmRzdCk7CisJc2tfc2V0dXBfY2FwcyhzaywgJnJ0LT5kc3QpOwogCiAJZHAtPmRjY3BzX2lzcyA9IHNlY3VyZV9kY2NwX3NlcXVlbmNlX251bWJlcihpbmV0LT5pbmV0X3NhZGRyLAogCQkJCQkJICAgIGluZXQtPmluZXRfZGFkZHIsCkBAIC00NzUsNyArNDc1LDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JcmV0dXJuICZydC0+dS5kc3Q7CisJcmV0dXJuICZydC0+ZHN0OwogfQogCiBzdGF0aWMgaW50IGRjY3BfdjRfc2VuZF9yZXNwb25zZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lwdjYuYyBiL25ldC9kY2NwL2lwdjYuYwppbmRleCAwOTE2OTg4Li42ZTNmMzI1IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pcHY2LmMKKysrIGIvbmV0L2RjY3AvaXB2Ni5jCkBAIC0yNDgsNyArMjQ4LDcgQEAKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCA9IE5VTEw7Ci0Jc3RydWN0IGluNl9hZGRyICpmaW5hbF9wID0gTlVMTCwgZmluYWw7CisJc3RydWN0IGluNl9hZGRyICpmaW5hbF9wLCBmaW5hbDsKIAlzdHJ1Y3QgZmxvd2kgZmw7CiAJaW50IGVyciA9IC0xOwogCXN0cnVjdCBkc3RfZW50cnkgKmRzdDsKQEAgLTI2NSwxMyArMjY1LDcgQEAKIAogCW9wdCA9IG5wLT5vcHQ7CiAKLQlpZiAob3B0ICE9IE5VTEwgJiYgb3B0LT5zcmNydCAhPSBOVUxMKSB7Ci0JCWNvbnN0IHN0cnVjdCBydDBfaGRyICpydDAgPSAoc3RydWN0IHJ0MF9oZHIgKilvcHQtPnNyY3J0OwotCi0JCWlwdjZfYWRkcl9jb3B5KCZmaW5hbCwgJmZsLmZsNl9kc3QpOwotCQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgcnQwLT5hZGRyKTsKLQkJZmluYWxfcCA9ICZmaW5hbDsKLQl9CisJZmluYWxfcCA9IGZsNl91cGRhdGVfZHN0KCZmbCwgb3B0LCAmZmluYWwpOwogCiAJZXJyID0gaXA2X2RzdF9sb29rdXAoc2ssICZkc3QsICZmbCk7CiAJaWYgKGVycikKQEAgLTU0NSwxOSArNTM5LDEzIEBACiAJCWdvdG8gb3V0X292ZXJmbG93OwogCiAJaWYgKGRzdCA9PSBOVUxMKSB7Ci0JCXN0cnVjdCBpbjZfYWRkciAqZmluYWxfcCA9IE5VTEwsIGZpbmFsOworCQlzdHJ1Y3QgaW42X2FkZHIgKmZpbmFsX3AsIGZpbmFsOwogCQlzdHJ1Y3QgZmxvd2kgZmw7CiAKIAkJbWVtc2V0KCZmbCwgMCwgc2l6ZW9mKGZsKSk7CiAJCWZsLnByb3RvID0gSVBQUk9UT19EQ0NQOwogCQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgJmlyZXE2LT5ybXRfYWRkcik7Ci0JCWlmIChvcHQgIT0gTlVMTCAmJiBvcHQtPnNyY3J0ICE9IE5VTEwpIHsKLQkJCWNvbnN0IHN0cnVjdCBydDBfaGRyICpydDAgPSAoc3RydWN0IHJ0MF9oZHIgKilvcHQtPnNyY3J0OwotCi0JCQlpcHY2X2FkZHJfY29weSgmZmluYWwsICZmbC5mbDZfZHN0KTsKLQkJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCBydDAtPmFkZHIpOwotCQkJZmluYWxfcCA9ICZmaW5hbDsKLQkJfQorCQlmaW5hbF9wID0gZmw2X3VwZGF0ZV9kc3QoJmZsLCBvcHQsICZmaW5hbCk7CiAJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfc3JjLCAmaXJlcTYtPmxvY19hZGRyKTsKIAkJZmwub2lmID0gc2stPnNrX2JvdW5kX2Rldl9pZjsKIAkJZmwuZmxfaXBfZHBvcnQgPSBpbmV0X3JzayhyZXEpLT5ybXRfcG9ydDsKQEAgLTg4NSw3ICs4NzMsNyBAQAogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKLQlzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyID0gTlVMTCwgKmZpbmFsX3AgPSBOVUxMLCBmaW5hbDsKKwlzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyID0gTlVMTCwgKmZpbmFsX3AsIGZpbmFsOwogCXN0cnVjdCBmbG93aSBmbDsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CiAJaW50IGFkZHJfdHlwZTsKQEAgLTk4OCwxMyArOTc2LDcgQEAKIAlmbC5mbF9pcF9zcG9ydCA9IGluZXQtPmluZXRfc3BvcnQ7CiAJc2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzaywgJmZsKTsKIAotCWlmIChucC0+b3B0ICE9IE5VTEwgJiYgbnAtPm9wdC0+c3JjcnQgIT0gTlVMTCkgewotCQljb25zdCBzdHJ1Y3QgcnQwX2hkciAqcnQwID0gKHN0cnVjdCBydDBfaGRyICopbnAtPm9wdC0+c3JjcnQ7Ci0KLQkJaXB2Nl9hZGRyX2NvcHkoJmZpbmFsLCAmZmwuZmw2X2RzdCk7Ci0JCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCBydDAtPmFkZHIpOwotCQlmaW5hbF9wID0gJmZpbmFsOwotCX0KKwlmaW5hbF9wID0gZmw2X3VwZGF0ZV9kc3QoJmZsLCBucC0+b3B0LCAmZmluYWwpOwogCiAJZXJyID0gaXA2X2RzdF9sb29rdXAoc2ssICZkc3QsICZmbCk7CiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL25ldC9kY2NwL29wdGlvbnMuYyBiL25ldC9kY2NwL29wdGlvbnMuYwppbmRleCAwNzM5NWY4Li5iZmRhMDg3IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9vcHRpb25zLmMKKysrIGIvbmV0L2RjY3Avb3B0aW9ucy5jCkBAIC0yOTksOSArMjk5LDggQEAKIAlyZXR1cm4gbGlrZWx5KG5kcCA8PSBVU0hSVF9NQVgpID8gMiA6IChuZHAgPD0gVUlOVF9NQVggPyA0IDogNik7CiB9CiAKLWludCBkY2NwX2luc2VydF9vcHRpb24oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJY29uc3QgdW5zaWduZWQgY2hhciBvcHRpb24sCi0JCQljb25zdCB2b2lkICp2YWx1ZSwgY29uc3QgdW5zaWduZWQgY2hhciBsZW4pCitpbnQgZGNjcF9pbnNlcnRfb3B0aW9uKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHVuc2lnbmVkIGNoYXIgb3B0aW9uLAorCQkgICAgICAgY29uc3Qgdm9pZCAqdmFsdWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgbGVuKQogewogCXVuc2lnbmVkIGNoYXIgKnRvOwogCkBAIC0zNTQsOCArMzUzLDcgQEAKIAlyZXR1cm4gZWxhcHNlZF90aW1lID09IDAgPyAwIDogZWxhcHNlZF90aW1lIDw9IDB4RkZGRiA/IDIgOiA0OwogfQogCi1pbnQgZGNjcF9pbnNlcnRfb3B0aW9uX2VsYXBzZWRfdGltZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgIHUzMiBlbGFwc2VkX3RpbWUpCitpbnQgZGNjcF9pbnNlcnRfb3B0aW9uX2VsYXBzZWRfdGltZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgZWxhcHNlZF90aW1lKQogewogCWNvbnN0IGludCBlbGFwc2VkX3RpbWVfbGVuID0gZGNjcF9lbGFwc2VkX3RpbWVfbGVuKGVsYXBzZWRfdGltZSk7CiAJY29uc3QgaW50IGxlbiA9IDIgKyBlbGFwc2VkX3RpbWVfbGVuOwpAQCAtMzg2LDEzICszODQsMTMgQEAKIAogRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9pbnNlcnRfb3B0aW9uX2VsYXBzZWRfdGltZSk7CiAKLWludCBkY2NwX2luc2VydF9vcHRpb25fdGltZXN0YW1wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK2ludCBkY2NwX2luc2VydF9vcHRpb25fdGltZXN0YW1wKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJX19iZTMyIG5vdyA9IGh0b25sKGRjY3BfdGltZXN0YW1wKCkpOwogCS8qIHllcyB0aGlzIHdpbGwgb3ZlcmZsb3cgYnV0IHRoYXQgaXMgdGhlIHBvaW50IGFzIHdlIHdhbnQgYQogCSAqIDEwIHVzZWMgMzIgYml0IHRpbWVyIHdoaWNoIG1lYW4gaXQgd3JhcHMgZXZlcnkgMTEuOSBob3VycyAqLwogCi0JcmV0dXJuIGRjY3BfaW5zZXJ0X29wdGlvbihzaywgc2tiLCBEQ0NQT19USU1FU1RBTVAsICZub3csIHNpemVvZihub3cpKTsKKwlyZXR1cm4gZGNjcF9pbnNlcnRfb3B0aW9uKHNrYiwgRENDUE9fVElNRVNUQU1QLCAmbm93LCBzaXplb2Yobm93KSk7CiB9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKGRjY3BfaW5zZXJ0X29wdGlvbl90aW1lc3RhbXApOwpAQCAtNTMxLDkgKzUyOSw5IEBACiAJCWlmIChEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF90eXBlID09IERDQ1BfUEtUX1JFUVVFU1QpIHsKIAkJCS8qCiAJCQkgKiBPYnRhaW4gUlRUIHNhbXBsZSBmcm9tIFJlcXVlc3QvUmVzcG9uc2UgZXhjaGFuZ2UuCi0JCQkgKiBUaGlzIGlzIGN1cnJlbnRseSB1c2VkIGluIENDSUQgMyBpbml0aWFsaXNhdGlvbi4KKwkJCSAqIFRoaXMgaXMgY3VycmVudGx5IHVzZWQgZm9yIFRGUkMgaW5pdGlhbGlzYXRpb24uCiAJCQkgKi8KLQkJCWlmIChkY2NwX2luc2VydF9vcHRpb25fdGltZXN0YW1wKHNrLCBza2IpKQorCQkJaWYgKGRjY3BfaW5zZXJ0X29wdGlvbl90aW1lc3RhbXAoc2tiKSkKIAkJCQlyZXR1cm4gLTE7CiAKIAkJfSBlbHNlIGlmIChkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjICE9IE5VTEwgJiYKQEAgLTU2NCw2ICs1NjIsMTAgQEAKIAlpZiAoZGNjcF9mZWF0X2luc2VydF9vcHRzKE5VTEwsIGRyZXEsIHNrYikpCiAJCXJldHVybiAtMTsKIAorCS8qIE9idGFpbiBSVFQgc2FtcGxlIGZyb20gUmVzcG9uc2UvQWNrIGV4Y2hhbmdlICh1c2VkIGJ5IFRGUkMpLiAqLworCWlmIChkY2NwX2luc2VydF9vcHRpb25fdGltZXN0YW1wKHNrYikpCisJCXJldHVybiAtMTsKKwogCWlmIChkcmVxLT5kcmVxX3RpbWVzdGFtcF9lY2hvICE9IDAgJiYKIAkgICAgZGNjcF9pbnNlcnRfb3B0aW9uX3RpbWVzdGFtcF9lY2hvKE5VTEwsIGRyZXEsIHNrYikpCiAJCXJldHVybiAtMTsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL3Byb3RvLmMgYi9uZXQvZGNjcC9wcm90by5jCmluZGV4IGIwM2VjZjYuLjA5NjI1MGQgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL3Byb3RvLmMKKysrIGIvbmV0L2RjY3AvcHJvdG8uYwpAQCAtNDczLDE0ICs0NzMsOSBAQAogCWlmIChvcHRsZW4gPCAxIHx8IG9wdGxlbiA+IERDQ1BfRkVBVF9NQVhfU1BfVkFMUykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl2YWwgPSBrbWFsbG9jKG9wdGxlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHZhbCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWlmIChjb3B5X2Zyb21fdXNlcih2YWwsIG9wdHZhbCwgb3B0bGVuKSkgewotCQlrZnJlZSh2YWwpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9CisJdmFsID0gbWVtZHVwX3VzZXIob3B0dmFsLCBvcHRsZW4pOworCWlmIChJU19FUlIodmFsKSkKKwkJcmV0dXJuIFBUUl9FUlIodmFsKTsKIAogCWxvY2tfc29jayhzayk7CiAJaWYgKHR5cGUgPT0gRENDUF9TT0NLT1BUX1RYX0NDSUQgfHwgdHlwZSA9PSBEQ0NQX1NPQ0tPUFRfQ0NJRCkKQEAgLTEwMDcsNyArMTAwMiw4IEBACiBzdGF0aWMgaW5saW5lIGludCBkY2NwX21pYl9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIHNubXBfbWliX2luaXQoKHZvaWQgX19wZXJjcHUgKiopZGNjcF9zdGF0aXN0aWNzLAotCQkJICAgICBzaXplb2Yoc3RydWN0IGRjY3BfbWliKSk7CisJCQkgICAgIHNpemVvZihzdHJ1Y3QgZGNjcF9taWIpLAorCQkJICAgICBfX2FsaWdub2ZfXyhzdHJ1Y3QgZGNjcF9taWIpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRjY3BfbWliX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fcm91dGUuYyBiL25ldC9kZWNuZXQvZG5fcm91dGUuYwppbmRleCA4MTJlNmRmLi42NTg1ZWE2IDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKKysrIGIvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCkBAIC0xNDYsMTMgKzE0NiwxMyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZG5ydF9mcmVlKHN0cnVjdCBkbl9yb3V0ZSAqcnQpCiB7Ci0JY2FsbF9yY3VfYmgoJnJ0LT51LmRzdC5yY3VfaGVhZCwgZHN0X3JjdV9mcmVlKTsKKwljYWxsX3JjdV9iaCgmcnQtPmRzdC5yY3VfaGVhZCwgZHN0X3JjdV9mcmVlKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRucnRfZHJvcChzdHJ1Y3QgZG5fcm91dGUgKnJ0KQogewotCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOwotCWNhbGxfcmN1X2JoKCZydC0+dS5kc3QucmN1X2hlYWQsIGRzdF9yY3VfZnJlZSk7CisJZHN0X3JlbGVhc2UoJnJ0LT5kc3QpOworCWNhbGxfcmN1X2JoKCZydC0+ZHN0LnJjdV9oZWFkLCBkc3RfcmN1X2ZyZWUpOwogfQogCiBzdGF0aWMgdm9pZCBkbl9kc3RfY2hlY2tfZXhwaXJlKHVuc2lnbmVkIGxvbmcgZHVtbXkpCkBAIC0xNjcsMTMgKzE2NywxMyBAQAogCiAJCXNwaW5fbG9jaygmZG5fcnRfaGFzaF90YWJsZVtpXS5sb2NrKTsKIAkJd2hpbGUoKHJ0PSpydHApICE9IE5VTEwpIHsKLQkJCWlmIChhdG9taWNfcmVhZCgmcnQtPnUuZHN0Ll9fcmVmY250KSB8fAotCQkJCQkobm93IC0gcnQtPnUuZHN0Lmxhc3R1c2UpIDwgZXhwaXJlKSB7Ci0JCQkJcnRwID0gJnJ0LT51LmRzdC5kbl9uZXh0OworCQkJaWYgKGF0b21pY19yZWFkKCZydC0+ZHN0Ll9fcmVmY250KSB8fAorCQkJCQkobm93IC0gcnQtPmRzdC5sYXN0dXNlKSA8IGV4cGlyZSkgeworCQkJCXJ0cCA9ICZydC0+ZHN0LmRuX25leHQ7CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQkqcnRwID0gcnQtPnUuZHN0LmRuX25leHQ7Ci0JCQlydC0+dS5kc3QuZG5fbmV4dCA9IE5VTEw7CisJCQkqcnRwID0gcnQtPmRzdC5kbl9uZXh0OworCQkJcnQtPmRzdC5kbl9uZXh0ID0gTlVMTDsKIAkJCWRucnRfZnJlZShydCk7CiAJCX0KIAkJc3Bpbl91bmxvY2soJmRuX3J0X2hhc2hfdGFibGVbaV0ubG9jayk7CkBAIC0xOTgsMTMgKzE5OCwxMyBAQAogCQlydHAgPSAmZG5fcnRfaGFzaF90YWJsZVtpXS5jaGFpbjsKIAogCQl3aGlsZSgocnQ9KnJ0cCkgIT0gTlVMTCkgewotCQkJaWYgKGF0b21pY19yZWFkKCZydC0+dS5kc3QuX19yZWZjbnQpIHx8Ci0JCQkJCShub3cgLSBydC0+dS5kc3QubGFzdHVzZSkgPCBleHBpcmUpIHsKLQkJCQlydHAgPSAmcnQtPnUuZHN0LmRuX25leHQ7CisJCQlpZiAoYXRvbWljX3JlYWQoJnJ0LT5kc3QuX19yZWZjbnQpIHx8CisJCQkJCShub3cgLSBydC0+ZHN0Lmxhc3R1c2UpIDwgZXhwaXJlKSB7CisJCQkJcnRwID0gJnJ0LT5kc3QuZG5fbmV4dDsKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCSpydHAgPSBydC0+dS5kc3QuZG5fbmV4dDsKLQkJCXJ0LT51LmRzdC5kbl9uZXh0ID0gTlVMTDsKKwkJCSpydHAgPSBydC0+ZHN0LmRuX25leHQ7CisJCQlydC0+ZHN0LmRuX25leHQgPSBOVUxMOwogCQkJZG5ydF9kcm9wKHJ0KTsKIAkJCWJyZWFrOwogCQl9CkBAIC0yODcsMjUgKzI4NywyNSBAQAogCXdoaWxlKChydGggPSAqcnRocCkgIT0gTlVMTCkgewogCQlpZiAoY29tcGFyZV9rZXlzKCZydGgtPmZsLCAmcnQtPmZsKSkgewogCQkJLyogUHV0IGl0IGZpcnN0ICovCi0JCQkqcnRocCA9IHJ0aC0+dS5kc3QuZG5fbmV4dDsKLQkJCXJjdV9hc3NpZ25fcG9pbnRlcihydGgtPnUuZHN0LmRuX25leHQsCisJCQkqcnRocCA9IHJ0aC0+ZHN0LmRuX25leHQ7CisJCQlyY3VfYXNzaWduX3BvaW50ZXIocnRoLT5kc3QuZG5fbmV4dCwKIAkJCQkJICAgZG5fcnRfaGFzaF90YWJsZVtoYXNoXS5jaGFpbik7CiAJCQlyY3VfYXNzaWduX3BvaW50ZXIoZG5fcnRfaGFzaF90YWJsZVtoYXNoXS5jaGFpbiwgcnRoKTsKIAotCQkJZHN0X3VzZSgmcnRoLT51LmRzdCwgbm93KTsKKwkJCWRzdF91c2UoJnJ0aC0+ZHN0LCBub3cpOwogCQkJc3Bpbl91bmxvY2tfYmgoJmRuX3J0X2hhc2hfdGFibGVbaGFzaF0ubG9jayk7CiAKIAkJCWRucnRfZHJvcChydCk7CiAJCQkqcnAgPSBydGg7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQlydGhwID0gJnJ0aC0+dS5kc3QuZG5fbmV4dDsKKwkJcnRocCA9ICZydGgtPmRzdC5kbl9uZXh0OwogCX0KIAotCXJjdV9hc3NpZ25fcG9pbnRlcihydC0+dS5kc3QuZG5fbmV4dCwgZG5fcnRfaGFzaF90YWJsZVtoYXNoXS5jaGFpbik7CisJcmN1X2Fzc2lnbl9wb2ludGVyKHJ0LT5kc3QuZG5fbmV4dCwgZG5fcnRfaGFzaF90YWJsZVtoYXNoXS5jaGFpbik7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKGRuX3J0X2hhc2hfdGFibGVbaGFzaF0uY2hhaW4sIHJ0KTsKIAotCWRzdF91c2UoJnJ0LT51LmRzdCwgbm93KTsKKwlkc3RfdXNlKCZydC0+ZHN0LCBub3cpOwogCXNwaW5fdW5sb2NrX2JoKCZkbl9ydF9oYXNoX3RhYmxlW2hhc2hdLmxvY2spOwogCSpycCA9IHJ0OwogCXJldHVybiAwOwpAQCAtMzIzLDggKzMyMyw4IEBACiAJCQlnb3RvIG5vdGhpbmdfdG9fZGVjbGFyZTsKIAogCQlmb3IoOyBydDsgcnQ9bmV4dCkgewotCQkJbmV4dCA9IHJ0LT51LmRzdC5kbl9uZXh0OwotCQkJcnQtPnUuZHN0LmRuX25leHQgPSBOVUxMOworCQkJbmV4dCA9IHJ0LT5kc3QuZG5fbmV4dDsKKwkJCXJ0LT5kc3QuZG5fbmV4dCA9IE5VTEw7CiAJCQlkc3RfZnJlZSgoc3RydWN0IGRzdF9lbnRyeSAqKXJ0KTsKIAkJfQogCkBAIC03NDMsNyArNzQzLDcgQEAKIAkvKiBFbnN1cmUgdGhhdCB3ZSBoYXZlIGVub3VnaCBzcGFjZSBmb3IgaGVhZGVycyAqLwogCXJ0ID0gKHN0cnVjdCBkbl9yb3V0ZSAqKXNrYl9kc3Qoc2tiKTsKIAloZWFkZXJfbGVuID0gZG5fZGItPnVzZV9sb25nID8gMjEgOiA2OwotCWlmIChza2JfY293KHNrYiwgTExfUkVTRVJWRURfU1BBQ0UocnQtPnUuZHN0LmRldikraGVhZGVyX2xlbikpCisJaWYgKHNrYl9jb3coc2tiLCBMTF9SRVNFUlZFRF9TUEFDRShydC0+ZHN0LmRldikraGVhZGVyX2xlbikpCiAJCWdvdG8gZHJvcDsKIAogCS8qCkBAIC03NTIsNyArNzUyLDcgQEAKIAlpZiAoKytjYi0+aG9wcyA+IDMwKQogCQlnb3RvIGRyb3A7CiAKLQlza2ItPmRldiA9IHJ0LT51LmRzdC5kZXY7CisJc2tiLT5kZXYgPSBydC0+ZHN0LmRldjsKIAogCS8qCiAJICogSWYgcGFja2V0IGdvZXMgb3V0IHNhbWUgaW50ZXJmYWNlIGl0IGNhbWUgaW4gb24sIHRoZW4gc2V0CkBAIC03OTIsNyArNzkyLDcgQEAKIHN0YXRpYyBpbnQgZG5fcnRfc2V0X25leHRfaG9wKHN0cnVjdCBkbl9yb3V0ZSAqcnQsIHN0cnVjdCBkbl9maWJfcmVzICpyZXMpCiB7CiAJc3RydWN0IGRuX2ZpYl9pbmZvICpmaSA9IHJlcy0+Zmk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJ0LT51LmRzdC5kZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJ0LT5kc3QuZGV2OwogCXN0cnVjdCBuZWlnaGJvdXIgKm47CiAJdW5zaWduZWQgbXNzOwogCkBAIC04MDAsMjUgKzgwMCwyNSBAQAogCQlpZiAoRE5fRklCX1JFU19HVygqcmVzKSAmJgogCQkgICAgRE5fRklCX1JFU19OSCgqcmVzKS5uaF9zY29wZSA9PSBSVF9TQ09QRV9MSU5LKQogCQkJcnQtPnJ0X2dhdGV3YXkgPSBETl9GSUJfUkVTX0dXKCpyZXMpOwotCQltZW1jcHkocnQtPnUuZHN0Lm1ldHJpY3MsIGZpLT5maWJfbWV0cmljcywKLQkJICAgICAgIHNpemVvZihydC0+dS5kc3QubWV0cmljcykpOworCQltZW1jcHkocnQtPmRzdC5tZXRyaWNzLCBmaS0+ZmliX21ldHJpY3MsCisJCSAgICAgICBzaXplb2YocnQtPmRzdC5tZXRyaWNzKSk7CiAJfQogCXJ0LT5ydF90eXBlID0gcmVzLT50eXBlOwogCi0JaWYgKGRldiAhPSBOVUxMICYmIHJ0LT51LmRzdC5uZWlnaGJvdXIgPT0gTlVMTCkgeworCWlmIChkZXYgIT0gTlVMTCAmJiBydC0+ZHN0Lm5laWdoYm91ciA9PSBOVUxMKSB7CiAJCW4gPSBfX25laWdoX2xvb2t1cF9lcnJubygmZG5fbmVpZ2hfdGFibGUsICZydC0+cnRfZ2F0ZXdheSwgZGV2KTsKIAkJaWYgKElTX0VSUihuKSkKIAkJCXJldHVybiBQVFJfRVJSKG4pOwotCQlydC0+dS5kc3QubmVpZ2hib3VyID0gbjsKKwkJcnQtPmRzdC5uZWlnaGJvdXIgPSBuOwogCX0KIAotCWlmIChkc3RfbWV0cmljKCZydC0+dS5kc3QsIFJUQVhfTVRVKSA9PSAwIHx8Ci0JICAgIGRzdF9tZXRyaWMoJnJ0LT51LmRzdCwgUlRBWF9NVFUpID4gcnQtPnUuZHN0LmRldi0+bXR1KQotCQlydC0+dS5kc3QubWV0cmljc1tSVEFYX01UVS0xXSA9IHJ0LT51LmRzdC5kZXYtPm10dTsKLQltc3MgPSBkbl9tc3NfZnJvbV9wbXR1KGRldiwgZHN0X210dSgmcnQtPnUuZHN0KSk7Ci0JaWYgKGRzdF9tZXRyaWMoJnJ0LT51LmRzdCwgUlRBWF9BRFZNU1MpID09IDAgfHwKLQkgICAgZHN0X21ldHJpYygmcnQtPnUuZHN0LCBSVEFYX0FEVk1TUykgPiBtc3MpCi0JCXJ0LT51LmRzdC5tZXRyaWNzW1JUQVhfQURWTVNTLTFdID0gbXNzOworCWlmIChkc3RfbWV0cmljKCZydC0+ZHN0LCBSVEFYX01UVSkgPT0gMCB8fAorCSAgICBkc3RfbWV0cmljKCZydC0+ZHN0LCBSVEFYX01UVSkgPiBydC0+ZHN0LmRldi0+bXR1KQorCQlydC0+ZHN0Lm1ldHJpY3NbUlRBWF9NVFUtMV0gPSBydC0+ZHN0LmRldi0+bXR1OworCW1zcyA9IGRuX21zc19mcm9tX3BtdHUoZGV2LCBkc3RfbXR1KCZydC0+ZHN0KSk7CisJaWYgKGRzdF9tZXRyaWMoJnJ0LT5kc3QsIFJUQVhfQURWTVNTKSA9PSAwIHx8CisJICAgIGRzdF9tZXRyaWMoJnJ0LT5kc3QsIFJUQVhfQURWTVNTKSA+IG1zcykKKwkJcnQtPmRzdC5tZXRyaWNzW1JUQVhfQURWTVNTLTFdID0gbXNzOwogCXJldHVybiAwOwogfQogCkBAIC0xMDk2LDggKzEwOTYsOCBAQAogCWlmIChydCA9PSBOVUxMKQogCQlnb3RvIGVfbm9idWZzOwogCi0JYXRvbWljX3NldCgmcnQtPnUuZHN0Ll9fcmVmY250LCAxKTsKLQlydC0+dS5kc3QuZmxhZ3MgICA9IERTVF9IT1NUOworCWF0b21pY19zZXQoJnJ0LT5kc3QuX19yZWZjbnQsIDEpOworCXJ0LT5kc3QuZmxhZ3MgICA9IERTVF9IT1NUOwogCiAJcnQtPmZsLmZsZF9zcmMgICAgPSBvbGRmbHAtPmZsZF9zcmM7CiAJcnQtPmZsLmZsZF9kc3QgICAgPSBvbGRmbHAtPmZsZF9kc3Q7CkBAIC0xMTEzLDE3ICsxMTEzLDE3IEBACiAJcnQtPnJ0X2RzdF9tYXAgICAgPSBmbC5mbGRfZHN0OwogCXJ0LT5ydF9zcmNfbWFwICAgID0gZmwuZmxkX3NyYzsKIAotCXJ0LT51LmRzdC5kZXYgPSBkZXZfb3V0OworCXJ0LT5kc3QuZGV2ID0gZGV2X291dDsKIAlkZXZfaG9sZChkZXZfb3V0KTsKLQlydC0+dS5kc3QubmVpZ2hib3VyID0gbmVpZ2g7CisJcnQtPmRzdC5uZWlnaGJvdXIgPSBuZWlnaDsKIAluZWlnaCA9IE5VTEw7CiAKLQlydC0+dS5kc3QubGFzdHVzZSA9IGppZmZpZXM7Ci0JcnQtPnUuZHN0Lm91dHB1dCAgPSBkbl9vdXRwdXQ7Ci0JcnQtPnUuZHN0LmlucHV0ICAgPSBkbl9ydF9idWc7CisJcnQtPmRzdC5sYXN0dXNlID0gamlmZmllczsKKwlydC0+ZHN0Lm91dHB1dCAgPSBkbl9vdXRwdXQ7CisJcnQtPmRzdC5pbnB1dCAgID0gZG5fcnRfYnVnOwogCXJ0LT5ydF9mbGFncyAgICAgID0gZmxhZ3M7CiAJaWYgKGZsYWdzICYgUlRDRl9MT0NBTCkKLQkJcnQtPnUuZHN0LmlucHV0ID0gZG5fbnNwX3J4OworCQlydC0+ZHN0LmlucHV0ID0gZG5fbnNwX3J4OwogCiAJZXJyID0gZG5fcnRfc2V0X25leHRfaG9wKHJ0LCAmcmVzKTsKIAlpZiAoZXJyKQpAQCAtMTE1Miw3ICsxMTUyLDcgQEAKIAllcnIgPSAtRU5PQlVGUzsKIAlnb3RvIGRvbmU7CiBlX25laWdoYm91cjoKLQlkc3RfZnJlZSgmcnQtPnUuZHN0KTsKKwlkc3RfZnJlZSgmcnQtPmRzdCk7CiAJZ290byBlX25vYnVmczsKIH0KIApAQCAtMTE2OCwxNSArMTE2OCwxNSBAQAogCWlmICghKGZsYWdzICYgTVNHX1RSWUhBUkQpKSB7CiAJCXJjdV9yZWFkX2xvY2tfYmgoKTsKIAkJZm9yIChydCA9IHJjdV9kZXJlZmVyZW5jZV9iaChkbl9ydF9oYXNoX3RhYmxlW2hhc2hdLmNoYWluKTsgcnQ7Ci0JCQlydCA9IHJjdV9kZXJlZmVyZW5jZV9iaChydC0+dS5kc3QuZG5fbmV4dCkpIHsKKwkJCXJ0ID0gcmN1X2RlcmVmZXJlbmNlX2JoKHJ0LT5kc3QuZG5fbmV4dCkpIHsKIAkJCWlmICgoZmxwLT5mbGRfZHN0ID09IHJ0LT5mbC5mbGRfZHN0KSAmJgogCQkJICAgIChmbHAtPmZsZF9zcmMgPT0gcnQtPmZsLmZsZF9zcmMpICYmCiAJCQkgICAgKGZscC0+bWFyayA9PSBydC0+ZmwubWFyaykgJiYKIAkJCSAgICAocnQtPmZsLmlpZiA9PSAwKSAmJgogCQkJICAgIChydC0+Zmwub2lmID09IGZscC0+b2lmKSkgewotCQkJCWRzdF91c2UoJnJ0LT51LmRzdCwgamlmZmllcyk7CisJCQkJZHN0X3VzZSgmcnQtPmRzdCwgamlmZmllcyk7CiAJCQkJcmN1X3JlYWRfdW5sb2NrX2JoKCk7Ci0JCQkJKnBwcnQgPSAmcnQtPnUuZHN0OworCQkJCSpwcHJ0ID0gJnJ0LT5kc3Q7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCX0KQEAgLTEzNzUsMjkgKzEzNzUsMjkgQEAKIAlydC0+ZmwuaWlmICAgICAgICA9IGluX2Rldi0+aWZpbmRleDsKIAlydC0+ZmwubWFyayAgICAgICA9IGZsLm1hcms7CiAKLQlydC0+dS5kc3QuZmxhZ3MgPSBEU1RfSE9TVDsKLQlydC0+dS5kc3QubmVpZ2hib3VyID0gbmVpZ2g7Ci0JcnQtPnUuZHN0LmRldiA9IG91dF9kZXY7Ci0JcnQtPnUuZHN0Lmxhc3R1c2UgPSBqaWZmaWVzOwotCXJ0LT51LmRzdC5vdXRwdXQgPSBkbl9ydF9idWc7CisJcnQtPmRzdC5mbGFncyA9IERTVF9IT1NUOworCXJ0LT5kc3QubmVpZ2hib3VyID0gbmVpZ2g7CisJcnQtPmRzdC5kZXYgPSBvdXRfZGV2OworCXJ0LT5kc3QubGFzdHVzZSA9IGppZmZpZXM7CisJcnQtPmRzdC5vdXRwdXQgPSBkbl9ydF9idWc7CiAJc3dpdGNoKHJlcy50eXBlKSB7CiAJCWNhc2UgUlROX1VOSUNBU1Q6Ci0JCQlydC0+dS5kc3QuaW5wdXQgPSBkbl9mb3J3YXJkOworCQkJcnQtPmRzdC5pbnB1dCA9IGRuX2ZvcndhcmQ7CiAJCQlicmVhazsKIAkJY2FzZSBSVE5fTE9DQUw6Ci0JCQlydC0+dS5kc3Qub3V0cHV0ID0gZG5fb3V0cHV0OwotCQkJcnQtPnUuZHN0LmlucHV0ID0gZG5fbnNwX3J4OwotCQkJcnQtPnUuZHN0LmRldiA9IGluX2RldjsKKwkJCXJ0LT5kc3Qub3V0cHV0ID0gZG5fb3V0cHV0OworCQkJcnQtPmRzdC5pbnB1dCA9IGRuX25zcF9yeDsKKwkJCXJ0LT5kc3QuZGV2ID0gaW5fZGV2OwogCQkJZmxhZ3MgfD0gUlRDRl9MT0NBTDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQljYXNlIFJUTl9VTlJFQUNIQUJMRToKIAkJY2FzZSBSVE5fQkxBQ0tIT0xFOgotCQkJcnQtPnUuZHN0LmlucHV0ID0gZHN0X2Rpc2NhcmQ7CisJCQlydC0+ZHN0LmlucHV0ID0gZHN0X2Rpc2NhcmQ7CiAJfQogCXJ0LT5ydF9mbGFncyA9IGZsYWdzOwotCWlmIChydC0+dS5kc3QuZGV2KQotCQlkZXZfaG9sZChydC0+dS5kc3QuZGV2KTsKKwlpZiAocnQtPmRzdC5kZXYpCisJCWRldl9ob2xkKHJ0LT5kc3QuZGV2KTsKIAogCWVyciA9IGRuX3J0X3NldF9uZXh0X2hvcChydCwgJnJlcyk7CiAJaWYgKGVycikKQEAgLTE0MDUsNyArMTQwNSw3IEBACiAKIAloYXNoID0gZG5faGFzaChydC0+ZmwuZmxkX3NyYywgcnQtPmZsLmZsZF9kc3QpOwogCWRuX2luc2VydF9yb3V0ZShydCwgaGFzaCwgJnJ0KTsKLQlza2JfZHN0X3NldChza2IsICZydC0+dS5kc3QpOworCXNrYl9kc3Rfc2V0KHNrYiwgJnJ0LT5kc3QpOwogCiBkb25lOgogCWlmIChuZWlnaCkKQEAgLTE0MjcsNyArMTQyNyw3IEBACiAJZ290byBkb25lOwogCiBlX25laWdoYm91cjoKLQlkc3RfZnJlZSgmcnQtPnUuZHN0KTsKKwlkc3RfZnJlZSgmcnQtPmRzdCk7CiAJZ290byBkb25lOwogfQogCkBAIC0xNDQyLDEzICsxNDQyLDEzIEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yKHJ0ID0gcmN1X2RlcmVmZXJlbmNlKGRuX3J0X2hhc2hfdGFibGVbaGFzaF0uY2hhaW4pOyBydCAhPSBOVUxMOwotCSAgICBydCA9IHJjdV9kZXJlZmVyZW5jZShydC0+dS5kc3QuZG5fbmV4dCkpIHsKKwkgICAgcnQgPSByY3VfZGVyZWZlcmVuY2UocnQtPmRzdC5kbl9uZXh0KSkgewogCQlpZiAoKHJ0LT5mbC5mbGRfc3JjID09IGNiLT5zcmMpICYmCiAJCSAgICAocnQtPmZsLmZsZF9kc3QgPT0gY2ItPmRzdCkgJiYKIAkJICAgIChydC0+Zmwub2lmID09IDApICYmCiAJCSAgICAocnQtPmZsLm1hcmsgPT0gc2tiLT5tYXJrKSAmJgogCQkgICAgKHJ0LT5mbC5paWYgPT0gY2ItPmlpZikpIHsKLQkJCWRzdF91c2UoJnJ0LT51LmRzdCwgamlmZmllcyk7CisJCQlkc3RfdXNlKCZydC0+ZHN0LCBqaWZmaWVzKTsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJc2tiX2RzdF9zZXQoc2tiLCAoc3RydWN0IGRzdF9lbnRyeSAqKXJ0KTsKIAkJCXJldHVybiAwOwpAQCAtMTQ4Nyw4ICsxNDg3LDggQEAKIAkJci0+cnRtX3NyY19sZW4gPSAxNjsKIAkJUlRBX1BVVChza2IsIFJUQV9TUkMsIDIsICZydC0+ZmwuZmxkX3NyYyk7CiAJfQotCWlmIChydC0+dS5kc3QuZGV2KQotCQlSVEFfUFVUKHNrYiwgUlRBX09JRiwgc2l6ZW9mKGludCksICZydC0+dS5kc3QuZGV2LT5pZmluZGV4KTsKKwlpZiAocnQtPmRzdC5kZXYpCisJCVJUQV9QVVQoc2tiLCBSVEFfT0lGLCBzaXplb2YoaW50KSwgJnJ0LT5kc3QuZGV2LT5pZmluZGV4KTsKIAkvKgogCSAqIE5vdGUgdG8gc2VsZiAtIGNoYW5nZSB0aGlzIGlmIGlucHV0IHJvdXRlcyByZXZlcnNlIGRpcmVjdGlvbiB3aGVuCiAJICogdGhleSBkZWFsIG9ubHkgd2l0aCBpbnB1dHMgYW5kIG5vdCB3aXRoIHJlcGxpZXMgbGlrZSB0aGV5IGRvCkBAIC0xNDk3LDExICsxNDk3LDExIEBACiAJUlRBX1BVVChza2IsIFJUQV9QUkVGU1JDLCAyLCAmcnQtPnJ0X2xvY2FsX3NyYyk7CiAJaWYgKHJ0LT5ydF9kYWRkciAhPSBydC0+cnRfZ2F0ZXdheSkKIAkJUlRBX1BVVChza2IsIFJUQV9HQVRFV0FZLCAyLCAmcnQtPnJ0X2dhdGV3YXkpOwotCWlmIChydG5ldGxpbmtfcHV0X21ldHJpY3Moc2tiLCBydC0+dS5kc3QubWV0cmljcykgPCAwKQorCWlmIChydG5ldGxpbmtfcHV0X21ldHJpY3Moc2tiLCBydC0+ZHN0Lm1ldHJpY3MpIDwgMCkKIAkJZ290byBydGF0dHJfZmFpbHVyZTsKLQlleHBpcmVzID0gcnQtPnUuZHN0LmV4cGlyZXMgPyBydC0+dS5kc3QuZXhwaXJlcyAtIGppZmZpZXMgOiAwOwotCWlmIChydG5sX3B1dF9jYWNoZWluZm8oc2tiLCAmcnQtPnUuZHN0LCAwLCAwLCAwLCBleHBpcmVzLAotCQkJICAgICAgIHJ0LT51LmRzdC5lcnJvcikgPCAwKQorCWV4cGlyZXMgPSBydC0+ZHN0LmV4cGlyZXMgPyBydC0+ZHN0LmV4cGlyZXMgLSBqaWZmaWVzIDogMDsKKwlpZiAocnRubF9wdXRfY2FjaGVpbmZvKHNrYiwgJnJ0LT5kc3QsIDAsIDAsIDAsIGV4cGlyZXMsCisJCQkgICAgICAgcnQtPmRzdC5lcnJvcikgPCAwKQogCQlnb3RvIHJ0YXR0cl9mYWlsdXJlOwogCWlmIChydC0+ZmwuaWlmKQogCQlSVEFfUFVUKHNrYiwgUlRBX0lJRiwgc2l6ZW9mKGludCksICZydC0+ZmwuaWlmKTsKQEAgLTE1NjgsOCArMTU2OCw4IEBACiAJCWxvY2FsX2JoX2VuYWJsZSgpOwogCQltZW1zZXQoY2IsIDAsIHNpemVvZihzdHJ1Y3QgZG5fc2tiX2NiKSk7CiAJCXJ0ID0gKHN0cnVjdCBkbl9yb3V0ZSAqKXNrYl9kc3Qoc2tiKTsKLQkJaWYgKCFlcnIgJiYgLXJ0LT51LmRzdC5lcnJvcikKLQkJCWVyciA9IHJ0LT51LmRzdC5lcnJvcjsKKwkJaWYgKCFlcnIgJiYgLXJ0LT5kc3QuZXJyb3IpCisJCQllcnIgPSBydC0+ZHN0LmVycm9yOwogCX0gZWxzZSB7CiAJCWludCBvaWYgPSAwOwogCQlpZiAocnRhW1JUQV9PSUYgLSAxXSkKQEAgLTE1ODMsNyArMTU4Myw3IEBACiAJc2tiLT5kZXYgPSBOVUxMOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZyZWU7Ci0Jc2tiX2RzdF9zZXQoc2tiLCAmcnQtPnUuZHN0KTsKKwlza2JfZHN0X3NldChza2IsICZydC0+ZHN0KTsKIAlpZiAocnRtLT5ydG1fZmxhZ3MgJiBSVE1fRl9OT1RJRlkpCiAJCXJ0LT5ydF9mbGFncyB8PSBSVENGX05PVElGWTsKIApAQCAtMTYzMiwxMCArMTYzMiwxMCBAQAogCQlyY3VfcmVhZF9sb2NrX2JoKCk7CiAJCWZvcihydCA9IHJjdV9kZXJlZmVyZW5jZV9iaChkbl9ydF9oYXNoX3RhYmxlW2hdLmNoYWluKSwgaWR4ID0gMDsKIAkJCXJ0OwotCQkJcnQgPSByY3VfZGVyZWZlcmVuY2VfYmgocnQtPnUuZHN0LmRuX25leHQpLCBpZHgrKykgeworCQkJcnQgPSByY3VfZGVyZWZlcmVuY2VfYmgocnQtPmRzdC5kbl9uZXh0KSwgaWR4KyspIHsKIAkJCWlmIChpZHggPCBzX2lkeCkKIAkJCQljb250aW51ZTsKLQkJCXNrYl9kc3Rfc2V0KHNrYiwgZHN0X2Nsb25lKCZydC0+dS5kc3QpKTsKKwkJCXNrYl9kc3Rfc2V0KHNrYiwgZHN0X2Nsb25lKCZydC0+ZHN0KSk7CiAJCQlpZiAoZG5fcnRfZmlsbF9pbmZvKHNrYiwgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCiAJCQkJCWNiLT5ubGgtPm5sbXNnX3NlcSwgUlRNX05FV1JPVVRFLAogCQkJCQkxLCBOTE1fRl9NVUxUSSkgPD0gMCkgewpAQCAtMTY3OCw3ICsxNjc4LDcgQEAKIHsKIAlzdHJ1Y3QgZG5fcnRfY2FjaGVfaXRlcl9zdGF0ZSAqcyA9IHNlcS0+cHJpdmF0ZTsKIAotCXJ0ID0gcnQtPnUuZHN0LmRuX25leHQ7CisJcnQgPSBydC0+ZHN0LmRuX25leHQ7CiAJd2hpbGUoIXJ0KSB7CiAJCXJjdV9yZWFkX3VubG9ja19iaCgpOwogCQlpZiAoLS1zLT5idWNrZXQgPCAwKQpAQCAtMTcxOSwxMiArMTcxOSwxMiBAQAogCWNoYXIgYnVmMVtETl9BU0NCVUZfTEVOXSwgYnVmMltETl9BU0NCVUZfTEVOXTsKIAogCXNlcV9wcmludGYoc2VxLCAiJS04cyAlLTdzICUtN3MgJTA0ZCAlMDRkICUwNGRcbiIsCi0JCQlydC0+dS5kc3QuZGV2ID8gcnQtPnUuZHN0LmRldi0+bmFtZSA6ICIqIiwKKwkJCXJ0LT5kc3QuZGV2ID8gcnQtPmRzdC5kZXYtPm5hbWUgOiAiKiIsCiAJCQlkbl9hZGRyMmFzYyhsZTE2X3RvX2NwdShydC0+cnRfZGFkZHIpLCBidWYxKSwKIAkJCWRuX2FkZHIyYXNjKGxlMTZfdG9fY3B1KHJ0LT5ydF9zYWRkciksIGJ1ZjIpLAotCQkJYXRvbWljX3JlYWQoJnJ0LT51LmRzdC5fX3JlZmNudCksCi0JCQlydC0+dS5kc3QuX191c2UsCi0JCQkoaW50KSBkc3RfbWV0cmljKCZydC0+dS5kc3QsIFJUQVhfUlRUKSk7CisJCQlhdG9taWNfcmVhZCgmcnQtPmRzdC5fX3JlZmNudCksCisJCQlydC0+ZHN0Ll9fdXNlLAorCQkJKGludCkgZHN0X21ldHJpYygmcnQtPmRzdCwgUlRBWF9SVFQpKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2RzYS9LY29uZmlnIGIvbmV0L2RzYS9LY29uZmlnCmluZGV4IGM1MWI1NTQuLjExMjAxNzggMTAwNjQ0Ci0tLSBhL25ldC9kc2EvS2NvbmZpZworKysgYi9uZXQvZHNhL0tjb25maWcKQEAgLTEsNyArMSw3IEBACiBtZW51Y29uZmlnIE5FVF9EU0EKIAlib29sICJEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlIHN1cHBvcnQiCiAJZGVmYXVsdCBuCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgIVMzOTAKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBORVRfRVRIRVJORVQgJiYgIVMzOTAKIAlzZWxlY3QgUEhZTElCCiAJLS0taGVscC0tLQogCSAgVGhpcyBhbGxvd3MgeW91IHRvIHVzZSBoYXJkd2FyZSBzd2l0Y2ggY2hpcHMgdGhhdCB1c2UKZGlmZiAtLWdpdCBhL25ldC9kc2Evc2xhdmUuYyBiL25ldC9kc2Evc2xhdmUuYwppbmRleCA4ZmRjYTU2Li42NGNhMmE2IDEwMDY0NAotLS0gYS9uZXQvZHNhL3NsYXZlLmMKKysrIGIvbmV0L2RzYS9zbGF2ZS5jCkBAIC0xNjQsMTAgKzE2NCw5IEBACiBzdGF0aWMgaW50IGRzYV9zbGF2ZV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKIHsKIAlzdHJ1Y3QgZHNhX3NsYXZlX3ByaXYgKnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqbWlpX2RhdGEgPSBpZl9taWkoaWZyKTsKIAogCWlmIChwLT5waHkgIT0gTlVMTCkKLQkJcmV0dXJuIHBoeV9taWlfaW9jdGwocC0+cGh5LCBtaWlfZGF0YSwgY21kKTsKKwkJcmV0dXJuIHBoeV9taWlfaW9jdGwocC0+cGh5LCBpZnIsIGNtZCk7CiAKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CmRpZmYgLS1naXQgYS9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jIGIvbmV0L2Vjb25ldC9hZl9lY29uZXQuYwppbmRleCAyYTVhODA1Li5kYzU0YmQwIDEwMDY0NAotLS0gYS9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jCisrKyBiL25ldC9lY29uZXQvYWZfZWNvbmV0LmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgZWNvbmV0X29wczsKIHN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCBlY29uZXRfc2tsaXN0Owotc3RhdGljIERFRklORV9SV0xPQ0soZWNvbmV0X2xvY2spOworc3RhdGljIERFRklORV9TUElOTE9DSyhlY29uZXRfbG9jayk7CiBzdGF0aWMgREVGSU5FX01VVEVYKGVjb25ldF9tdXRleCk7CiAKIC8qIFNpbmNlIHRoZXJlIGFyZSBvbmx5IDI1NiBwb3NzaWJsZSBuZXR3b3JrIG51bWJlcnMgKG9yIGZld2VyLCBkZXBlbmRzCkBAIC05OCwxNiArOTgsMTYgQEAKIAogc3RhdGljIHZvaWQgZWNvbmV0X3JlbW92ZV9zb2NrZXQoc3RydWN0IGhsaXN0X2hlYWQgKmxpc3QsIHN0cnVjdCBzb2NrICpzaykKIHsKLQl3cml0ZV9sb2NrX2JoKCZlY29uZXRfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZlY29uZXRfbG9jayk7CiAJc2tfZGVsX25vZGVfaW5pdChzayk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZlY29uZXRfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJmVjb25ldF9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgZWNvbmV0X2luc2VydF9zb2NrZXQoc3RydWN0IGhsaXN0X2hlYWQgKmxpc3QsIHN0cnVjdCBzb2NrICpzaykKIHsKLQl3cml0ZV9sb2NrX2JoKCZlY29uZXRfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZlY29uZXRfbG9jayk7CiAJc2tfYWRkX25vZGUoc2ssIGxpc3QpOwotCXdyaXRlX3VubG9ja19iaCgmZWNvbmV0X2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZlY29uZXRfbG9jayk7CiB9CiAKIC8qCkBAIC03ODIsMTUgKzc4MiwxOSBAQAogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAorCXNwaW5fbG9jaygmZWNvbmV0X2xvY2spOwogCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmZWNvbmV0X3NrbGlzdCkgewogCQlzdHJ1Y3QgZWNvbmV0X3NvY2sgKm9wdCA9IGVjX3NrKHNrKTsKIAkJaWYgKChvcHQtPnBvcnQgPT0gcG9ydCB8fCBvcHQtPnBvcnQgPT0gMCkgJiYKIAkJICAgIChvcHQtPnN0YXRpb24gPT0gc3RhdGlvbiB8fCBvcHQtPnN0YXRpb24gPT0gMCkgJiYKLQkJICAgIChvcHQtPm5ldCA9PSBuZXQgfHwgb3B0LT5uZXQgPT0gMCkpCisJCSAgICAob3B0LT5uZXQgPT0gbmV0IHx8IG9wdC0+bmV0ID09IDApKSB7CisJCQlzb2NrX2hvbGQoc2spOwogCQkJZ290byBmb3VuZDsKKwkJfQogCX0KIAlzayA9IE5VTEw7CiBmb3VuZDoKKwlzcGluX3VubG9jaygmZWNvbmV0X2xvY2spOwogCXJldHVybiBzazsKIH0KIApAQCAtODUyLDcgKzg1Niw3IEBACiB7CiAJc3RydWN0IGlwaGRyICppcCA9IGlwX2hkcihza2IpOwogCXVuc2lnbmVkIGNoYXIgc3RuID0gbnRvaGwoaXAtPnNhZGRyKSAmIDB4ZmY7Ci0Jc3RydWN0IHNvY2sgKnNrOworCXN0cnVjdCBzb2NrICpzayA9IE5VTEw7CiAJc3RydWN0IHNrX2J1ZmYgKm5ld3NrYjsKIAlzdHJ1Y3QgZWNfZGV2aWNlICplZGV2ID0gc2tiLT5kZXYtPmVjX3B0cjsKIApAQCAtODgyLDEwICs4ODYsMTMgQEAKIAl9CiAKIAlhdW5fc2VuZF9yZXNwb25zZShpcC0+c2FkZHIsIGFoLT5oYW5kbGUsIDMsIDApOworCXNvY2tfcHV0KHNrKTsKIAlyZXR1cm47CiAKIGJhZDoKIAlhdW5fc2VuZF9yZXNwb25zZShpcC0+c2FkZHIsIGFoLT5oYW5kbGUsIDQsIDApOworCWlmIChzaykKKwkJc29ja19wdXQoc2spOwogfQogCiAvKgpAQCAtMTA1MCw3ICsxMDU3LDcgQEAKIHN0YXRpYyBpbnQgZWNvbmV0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7CiAJc3RydWN0IGVjX2ZyYW1laGRyICpoZHI7Ci0Jc3RydWN0IHNvY2sgKnNrOworCXN0cnVjdCBzb2NrICpzayA9IE5VTEw7CiAJc3RydWN0IGVjX2RldmljZSAqZWRldiA9IGRldi0+ZWNfcHRyOwogCiAJaWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCAmaW5pdF9uZXQpKQpAQCAtMTA4NSwxMCArMTA5MiwxMiBAQAogCWlmIChlY19xdWV1ZV9wYWNrZXQoc2ssIHNrYiwgZWRldi0+bmV0LCBoZHItPnNyY19zdG4sIGhkci0+Y2IsCiAJCQkgICAgaGRyLT5wb3J0KSkKIAkJZ290byBkcm9wOwotCisJc29ja19wdXQoc2spOwogCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKIAogZHJvcDoKKwlpZiAoc2spCisJCXNvY2tfcHV0KHNrKTsKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gTkVUX1JYX0RST1A7CiB9CmRpZmYgLS1naXQgYS9uZXQvZXRoZXJuZXQvZXRoLmMgYi9uZXQvZXRoZXJuZXQvZXRoLmMKaW5kZXggNjFlYzAzMi4uMjE1YzgzOSAxMDA2NDQKLS0tIGEvbmV0L2V0aGVybmV0L2V0aC5jCisrKyBiL25ldC9ldGhlcm5ldC9ldGguYwpAQCAtMTU4LDcgKzE1OCw2IEBACiBfX2JlMTYgZXRoX3R5cGVfdHJhbnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZXRoaGRyICpldGg7Ci0JdW5zaWduZWQgY2hhciAqcmF3cDsKIAogCXNrYi0+ZGV2ID0gZGV2OwogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CkBAIC0xOTksMTUgKzE5OCwxMyBAQAogCWlmIChudG9ocyhldGgtPmhfcHJvdG8pID49IDE1MzYpCiAJCXJldHVybiBldGgtPmhfcHJvdG87CiAKLQlyYXdwID0gc2tiLT5kYXRhOwotCiAJLyoKIAkgKiAgICAgIFRoaXMgaXMgYSBtYWdpYyBoYWNrIHRvIHNwb3QgSVBYIHBhY2tldHMuIE9sZGVyIE5vdmVsbCBicmVha3MKIAkgKiAgICAgIHRoZSBwcm90b2NvbCBkZXNpZ24gYW5kIHJ1bnMgSVBYIG92ZXIgODAyLjMgd2l0aG91dCBhbiA4MDIuMiBMTEMKIAkgKiAgICAgIGxheWVyLiBXZSBsb29rIGZvciBGRkZGIHdoaWNoIGlzbid0IGEgdXNlZCA4MDIuMiBTU0FQL0RTQVAuIFRoaXMKIAkgKiAgICAgIHdvbid0IHdvcmsgZm9yIGZhdWx0IHRvbGVyYW50IG5ldHdhcmUgYnV0IGRvZXMgZm9yIHRoZSByZXN0LgogCSAqLwotCWlmICgqKHVuc2lnbmVkIHNob3J0ICopcmF3cCA9PSAweEZGRkYpCisJaWYgKHNrYi0+bGVuID49IDIgJiYgKih1bnNpZ25lZCBzaG9ydCAqKShza2ItPmRhdGEpID09IDB4RkZGRikKIAkJcmV0dXJuIGh0b25zKEVUSF9QXzgwMl8zKTsKIAogCS8qCmRpZmYgLS1naXQgYS9uZXQvZXRoZXJuZXQvcGUyLmMgYi9uZXQvZXRoZXJuZXQvcGUyLmMKaW5kZXggZWIwMDc5Ni4uODVkNTc0YSAxMDA2NDQKLS0tIGEvbmV0L2V0aGVybmV0L3BlMi5jCisrKyBiL25ldC9ldGhlcm5ldC9wZTIuYwpAQCAtMjgsMTEgKzI4LDEwIEBACiAKIAlyZXR1cm4gcHJvdG87CiB9CitFWFBPUlRfU1lNQk9MKG1ha2VfRUlJX2NsaWVudCk7CiAKIHZvaWQgZGVzdHJveV9FSUlfY2xpZW50KHN0cnVjdCBkYXRhbGlua19wcm90byAqZGwpCiB7CiAJa2ZyZWUoZGwpOwogfQotCiBFWFBPUlRfU1lNQk9MKGRlc3Ryb3lfRUlJX2NsaWVudCk7Ci1FWFBPUlRfU1lNQk9MKG1ha2VfRUlJX2NsaWVudCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9hZl9pbmV0LmMgYi9uZXQvaXB2NC9hZl9pbmV0LmMKaW5kZXggNTUxY2U1Ni4uNmExMTAwYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYWZfaW5ldC5jCisrKyBiL25ldC9pcHY0L2FmX2luZXQuYwpAQCAtMzU1LDYgKzM1NSw4IEBACiAJaW5ldCA9IGluZXRfc2soc2spOwogCWluZXQtPmlzX2ljc2sgPSAoSU5FVF9QUk9UT1NXX0lDU0sgJiBhbnN3ZXJfZmxhZ3MpICE9IDA7CiAKKwlpbmV0LT5ub2RlZnJhZyA9IDA7CisKIAlpZiAoU09DS19SQVcgPT0gc29jay0+dHlwZSkgewogCQlpbmV0LT5pbmV0X251bSA9IHByb3RvY29sOwogCQlpZiAoSVBQUk9UT19SQVcgPT0gcHJvdG9jb2wpCkBAIC03MjUsMjggKzcyNywzMSBAQAogCXNvY2tfcnBzX3JlY29yZF9mbG93KHNrKTsKIAogCS8qIFdlIG1heSBuZWVkIHRvIGJpbmQgdGhlIHNvY2tldC4gKi8KLQlpZiAoIWluZXRfc2soc2spLT5pbmV0X251bSAmJiBpbmV0X2F1dG9iaW5kKHNrKSkKKwlpZiAoIWluZXRfc2soc2spLT5pbmV0X251bSAmJiAhc2stPnNrX3Byb3QtPm5vX2F1dG9iaW5kICYmCisJICAgIGluZXRfYXV0b2JpbmQoc2spKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCXJldHVybiBzay0+c2tfcHJvdC0+c2VuZG1zZyhpb2NiLCBzaywgbXNnLCBzaXplKTsKIH0KIEVYUE9SVF9TWU1CT0woaW5ldF9zZW5kbXNnKTsKIAotc3RhdGljIHNzaXplX3QgaW5ldF9zZW5kcGFnZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9mZnNldCwKLQkJCSAgICAgc2l6ZV90IHNpemUsIGludCBmbGFncykKK3NzaXplX3QgaW5ldF9zZW5kcGFnZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9mZnNldCwKKwkJICAgICAgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAogCXNvY2tfcnBzX3JlY29yZF9mbG93KHNrKTsKIAogCS8qIFdlIG1heSBuZWVkIHRvIGJpbmQgdGhlIHNvY2tldC4gKi8KLQlpZiAoIWluZXRfc2soc2spLT5pbmV0X251bSAmJiBpbmV0X2F1dG9iaW5kKHNrKSkKKwlpZiAoIWluZXRfc2soc2spLT5pbmV0X251bSAmJiAhc2stPnNrX3Byb3QtPm5vX2F1dG9iaW5kICYmCisJICAgIGluZXRfYXV0b2JpbmQoc2spKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCWlmIChzay0+c2tfcHJvdC0+c2VuZHBhZ2UpCiAJCXJldHVybiBzay0+c2tfcHJvdC0+c2VuZHBhZ2Uoc2ssIHBhZ2UsIG9mZnNldCwgc2l6ZSwgZmxhZ3MpOwogCXJldHVybiBzb2NrX25vX3NlbmRwYWdlKHNvY2ssIHBhZ2UsIG9mZnNldCwgc2l6ZSwgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChpbmV0X3NlbmRwYWdlKTsKIAogaW50IGluZXRfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKIAkJIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCkBAIC04OTIsMTAgKzg5NywxMCBAQAogCS5zaHV0ZG93bgkgICA9IGluZXRfc2h1dGRvd24sCiAJLnNldHNvY2tvcHQJICAgPSBzb2NrX2NvbW1vbl9zZXRzb2Nrb3B0LAogCS5nZXRzb2Nrb3B0CSAgID0gc29ja19jb21tb25fZ2V0c29ja29wdCwKLQkuc2VuZG1zZwkgICA9IHRjcF9zZW5kbXNnLAorCS5zZW5kbXNnCSAgID0gaW5ldF9zZW5kbXNnLAogCS5yZWN2bXNnCSAgID0gaW5ldF9yZWN2bXNnLAogCS5tbWFwCQkgICA9IHNvY2tfbm9fbW1hcCwKLQkuc2VuZHBhZ2UJICAgPSB0Y3Bfc2VuZHBhZ2UsCisJLnNlbmRwYWdlCSAgID0gaW5ldF9zZW5kcGFnZSwKIAkuc3BsaWNlX3JlYWQJICAgPSB0Y3Bfc3BsaWNlX3JlYWQsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9zZXRzb2Nrb3B0LApAQCAtMTEwMCw3ICsxMTA1LDcgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0Jc2tfc2V0dXBfY2FwcyhzaywgJnJ0LT51LmRzdCk7CisJc2tfc2V0dXBfY2FwcyhzaywgJnJ0LT5kc3QpOwogCiAJbmV3X3NhZGRyID0gcnQtPnJ0X3NyYzsKIApAQCAtMTE2Niw3ICsxMTcxLDcgQEAKIAllcnIgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhzb2NrX25ldChzayksICZydCwgJmZsLCBzaywgMCk7CiB9CiAJaWYgKCFlcnIpCi0JCXNrX3NldHVwX2NhcHMoc2ssICZydC0+dS5kc3QpOworCQlza19zZXR1cF9jYXBzKHNrLCAmcnQtPmRzdCk7CiAJZWxzZSB7CiAJCS8qIFJvdXRpbmcgZmFpbGVkLi4uICovCiAJCXNrLT5za19yb3V0ZV9jYXBzID0gMDsKQEAgLTE0MjUsMTMgKzE0MzAsNDkgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNubXBfZm9sZF9maWVsZCk7CiAKLWludCBzbm1wX21pYl9pbml0KHZvaWQgX19wZXJjcHUgKnB0clsyXSwgc2l6ZV90IG1pYnNpemUpCisjaWYgQklUU19QRVJfTE9ORz09MzIKKwordTY0IHNubXBfZm9sZF9maWVsZDY0KHZvaWQgX19wZXJjcHUgKm1pYltdLCBpbnQgb2ZmdCwgc2l6ZV90IHN5bmNwX29mZnNldCkKK3sKKwl1NjQgcmVzID0gMDsKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQl2b2lkICpiaHB0ciwgKnVzZXJwdHI7CisJCXN0cnVjdCB1NjRfc3RhdHNfc3luYyAqc3luY3A7CisJCXU2NCB2X2JoLCB2X3VzZXI7CisJCXVuc2lnbmVkIGludCBzdGFydDsKKworCQkvKiBmaXJzdCBtaWIgdXNlZCBieSBzb2Z0aXJxIGNvbnRleHQsIHdlIG11c3QgdXNlIF9iaCgpIGFjY2Vzc29ycyAqLworCQliaHB0ciA9IHBlcl9jcHVfcHRyKFNOTVBfU1RBVF9CSFBUUihtaWIpLCBjcHUpOworCQlzeW5jcCA9IChzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgKikoYmhwdHIgKyBzeW5jcF9vZmZzZXQpOworCQlkbyB7CisJCQlzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbl9iaChzeW5jcCk7CisJCQl2X2JoID0gKigoKHU2NCAqKSBiaHB0cikgKyBvZmZ0KTsKKwkJfSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5X2JoKHN5bmNwLCBzdGFydCkpOworCisJCS8qIHNlY29uZCBtaWIgdXNlZCBpbiBVU0VSIGNvbnRleHQgKi8KKwkJdXNlcnB0ciA9IHBlcl9jcHVfcHRyKFNOTVBfU1RBVF9VU1JQVFIobWliKSwgY3B1KTsKKwkJc3luY3AgPSAoc3RydWN0IHU2NF9zdGF0c19zeW5jICopKHVzZXJwdHIgKyBzeW5jcF9vZmZzZXQpOworCQlkbyB7CisJCQlzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbihzeW5jcCk7CisJCQl2X3VzZXIgPSAqKCgodTY0ICopIHVzZXJwdHIpICsgb2ZmdCk7CisJCX0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShzeW5jcCwgc3RhcnQpKTsKKworCQlyZXMgKz0gdl9iaCArIHZfdXNlcjsKKwl9CisJcmV0dXJuIHJlczsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNubXBfZm9sZF9maWVsZDY0KTsKKyNlbmRpZgorCitpbnQgc25tcF9taWJfaW5pdCh2b2lkIF9fcGVyY3B1ICpwdHJbMl0sIHNpemVfdCBtaWJzaXplLCBzaXplX3QgYWxpZ24pCiB7CiAJQlVHX09OKHB0ciA9PSBOVUxMKTsKLQlwdHJbMF0gPSBfX2FsbG9jX3BlcmNwdShtaWJzaXplLCBfX2FsaWdub2ZfXyh1bnNpZ25lZCBsb25nKSk7CisJcHRyWzBdID0gX19hbGxvY19wZXJjcHUobWlic2l6ZSwgYWxpZ24pOwogCWlmICghcHRyWzBdKQogCQlnb3RvIGVycjA7Ci0JcHRyWzFdID0gX19hbGxvY19wZXJjcHUobWlic2l6ZSwgX19hbGlnbm9mX18odW5zaWduZWQgbG9uZykpOworCXB0clsxXSA9IF9fYWxsb2NfcGVyY3B1KG1pYnNpemUsIGFsaWduKTsKIAlpZiAoIXB0clsxXSkKIAkJZ290byBlcnIxOwogCXJldHVybiAwOwpAQCAtMTQ4OCwyNSArMTUyOSwzMiBAQAogc3RhdGljIF9fbmV0X2luaXQgaW50IGlwdjRfbWliX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlpZiAoc25tcF9taWJfaW5pdCgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi50Y3Bfc3RhdGlzdGljcywKLQkJCSAgc2l6ZW9mKHN0cnVjdCB0Y3BfbWliKSkgPCAwKQorCQkJICBzaXplb2Yoc3RydWN0IHRjcF9taWIpLAorCQkJICBfX2FsaWdub2ZfXyhzdHJ1Y3QgdGNwX21pYikpIDwgMCkKIAkJZ290byBlcnJfdGNwX21pYjsKIAlpZiAoc25tcF9taWJfaW5pdCgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5pcF9zdGF0aXN0aWNzLAotCQkJICBzaXplb2Yoc3RydWN0IGlwc3RhdHNfbWliKSkgPCAwKQorCQkJICBzaXplb2Yoc3RydWN0IGlwc3RhdHNfbWliKSwKKwkJCSAgX19hbGlnbm9mX18oc3RydWN0IGlwc3RhdHNfbWliKSkgPCAwKQogCQlnb3RvIGVycl9pcF9taWI7CiAJaWYgKHNubXBfbWliX2luaXQoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIubmV0X3N0YXRpc3RpY3MsCi0JCQkgIHNpemVvZihzdHJ1Y3QgbGludXhfbWliKSkgPCAwKQorCQkJICBzaXplb2Yoc3RydWN0IGxpbnV4X21pYiksCisJCQkgIF9fYWxpZ25vZl9fKHN0cnVjdCBsaW51eF9taWIpKSA8IDApCiAJCWdvdG8gZXJyX25ldF9taWI7CiAJaWYgKHNubXBfbWliX2luaXQoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIudWRwX3N0YXRpc3RpY3MsCi0JCQkgIHNpemVvZihzdHJ1Y3QgdWRwX21pYikpIDwgMCkKKwkJCSAgc2l6ZW9mKHN0cnVjdCB1ZHBfbWliKSwKKwkJCSAgX19hbGlnbm9mX18oc3RydWN0IHVkcF9taWIpKSA8IDApCiAJCWdvdG8gZXJyX3VkcF9taWI7CiAJaWYgKHNubXBfbWliX2luaXQoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIudWRwbGl0ZV9zdGF0aXN0aWNzLAotCQkJICBzaXplb2Yoc3RydWN0IHVkcF9taWIpKSA8IDApCisJCQkgIHNpemVvZihzdHJ1Y3QgdWRwX21pYiksCisJCQkgIF9fYWxpZ25vZl9fKHN0cnVjdCB1ZHBfbWliKSkgPCAwKQogCQlnb3RvIGVycl91ZHBsaXRlX21pYjsKIAlpZiAoc25tcF9taWJfaW5pdCgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5pY21wX3N0YXRpc3RpY3MsCi0JCQkgIHNpemVvZihzdHJ1Y3QgaWNtcF9taWIpKSA8IDApCisJCQkgIHNpemVvZihzdHJ1Y3QgaWNtcF9taWIpLAorCQkJICBfX2FsaWdub2ZfXyhzdHJ1Y3QgaWNtcF9taWIpKSA8IDApCiAJCWdvdG8gZXJyX2ljbXBfbWliOwogCWlmIChzbm1wX21pYl9pbml0KCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLmljbXBtc2dfc3RhdGlzdGljcywKLQkJCSAgc2l6ZW9mKHN0cnVjdCBpY21wbXNnX21pYikpIDwgMCkKKwkJCSAgc2l6ZW9mKHN0cnVjdCBpY21wbXNnX21pYiksCisJCQkgIF9fYWxpZ25vZl9fKHN0cnVjdCBpY21wbXNnX21pYikpIDwgMCkKIAkJZ290byBlcnJfaWNtcG1zZ19taWI7CiAKIAl0Y3BfbWliX2luaXQobmV0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FycC5jIGIvbmV0L2lwdjQvYXJwLmMKaW5kZXggZjA5NGI3NS4uOTZjMTk1NSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYXJwLmMKKysrIGIvbmV0L2lwdjQvYXJwLmMKQEAgLTExNiw2ICsxMTYsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHX0FUTV9DTElQKSB8fCBkZWZpbmVkKENPTkZJR19BVE1fQ0xJUF9NT0RVTEUpCiAjaW5jbHVkZSA8bmV0L2F0bWNsaXAuaD4KIHN0cnVjdCBuZWlnaF90YWJsZSAqY2xpcF90YmxfaG9vazsKK0VYUE9SVF9TWU1CT0woY2xpcF90YmxfaG9vayk7CiAjZW5kaWYKIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTE2OSw2ICsxNzAsNyBAQAogCS5oaF9vdXRwdXQgPQkJZGV2X3F1ZXVlX3htaXQsCiAJLnF1ZXVlX3htaXQgPQkJZGV2X3F1ZXVlX3htaXQsCiB9OworRVhQT1JUX1NZTUJPTChhcnBfYnJva2VuX29wcyk7CiAKIHN0cnVjdCBuZWlnaF90YWJsZSBhcnBfdGJsID0gewogCS5mYW1pbHkgPQlBRl9JTkVULApAQCAtMTk4LDYgKzIwMCw3IEBACiAJLmdjX3RocmVzaDIgPQk1MTIsCiAJLmdjX3RocmVzaDMgPQkxMDI0LAogfTsKK0VYUE9SVF9TWU1CT0woYXJwX3RibCk7CiAKIGludCBhcnBfbWNfbWFwKF9fYmUzMiBhZGRyLCB1OCAqaGFkZHIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkaXIpCiB7CkBAIC0zMzMsMTEgKzMzNiwxNCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZWlnaC0+ZGV2OwogCV9fYmUzMiB0YXJnZXQgPSAqKF9fYmUzMiopbmVpZ2gtPnByaW1hcnlfa2V5OwogCWludCBwcm9iZXMgPSBhdG9taWNfcmVhZCgmbmVpZ2gtPnByb2Jlcyk7Ci0Jc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gaW5fZGV2X2dldChkZXYpOworCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKIAotCWlmICghaW5fZGV2KQorCXJjdV9yZWFkX2xvY2soKTsKKwlpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7CisJaWYgKCFpbl9kZXYpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybjsKLQorCX0KIAlzd2l0Y2ggKElOX0RFVl9BUlBfQU5OT1VOQ0UoaW5fZGV2KSkgewogCWRlZmF1bHQ6CiAJY2FzZSAwOgkJLyogQnkgZGVmYXVsdCBhbm5vdW5jZSBhbnkgbG9jYWwgSVAgKi8KQEAgLTM1OCw5ICszNjQsOCBAQAogCWNhc2UgMjoJCS8qIEF2b2lkIHNlY29uZGFyeSBJUHMsIGdldCBhIHByaW1hcnkvcHJlZmVycmVkIG9uZSAqLwogCQlicmVhazsKIAl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlpZiAoaW5fZGV2KQotCQlpbl9kZXZfcHV0KGluX2Rldik7CiAJaWYgKCFzYWRkcikKIAkJc2FkZHIgPSBpbmV0X3NlbGVjdF9hZGRyKGRldiwgdGFyZ2V0LCBSVF9TQ09QRV9MSU5LKTsKIApAQCAtNDI3LDcgKzQzMiw3IEBACiAKIAlpZiAoaXBfcm91dGVfb3V0cHV0X2tleShuZXQsICZydCwgJmZsKSA8IDApCiAJCXJldHVybiAxOwotCWlmIChydC0+dS5kc3QuZGV2ICE9IGRldikgeworCWlmIChydC0+ZHN0LmRldiAhPSBkZXYpIHsKIAkJTkVUX0lOQ19TVEFUU19CSChuZXQsIExJTlVYX01JQl9BUlBGSUxURVIpOwogCQlmbGFnID0gMTsKIAl9CkBAIC00OTcsNiArNTAyLDcgQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDE7CiB9CitFWFBPUlRfU1lNQk9MKGFycF9maW5kKTsKIAogLyogRU5EIE9GIE9CU09MRVRFIEZVTkNUSU9OUyAqLwogCkBAIC01MzIsNyArNTM4LDcgQEAKIAlzdHJ1Y3QgaW5fZGV2aWNlICpvdXRfZGV2OwogCWludCBpbWksIG9taSA9IC0xOwogCi0JaWYgKHJ0LT51LmRzdC5kZXYgPT0gZGV2KQorCWlmIChydC0+ZHN0LmRldiA9PSBkZXYpCiAJCXJldHVybiAwOwogCiAJaWYgKCFJTl9ERVZfUFJPWFlfQVJQKGluX2RldikpCkBAIC01NDUsMTAgKzU1MSwxMCBAQAogCiAJLyogcGxhY2UgdG8gY2hlY2sgZm9yIHByb3h5X2FycCBmb3Igcm91dGVzICovCiAKLQlpZiAoKG91dF9kZXYgPSBpbl9kZXZfZ2V0KHJ0LT51LmRzdC5kZXYpKSAhPSBOVUxMKSB7CisJb3V0X2RldiA9IF9faW5fZGV2X2dldF9yY3UocnQtPmRzdC5kZXYpOworCWlmIChvdXRfZGV2KQogCQlvbWkgPSBJTl9ERVZfTUVESVVNX0lEKG91dF9kZXYpOwotCQlpbl9kZXZfcHV0KG91dF9kZXYpOwotCX0KKwogCXJldHVybiAob21pICE9IGltaSAmJiBvbWkgIT0gLTEpOwogfQogCkBAIC01NzYsNyArNTgyLDcgQEAKIAkJCQlfX2JlMzIgc2lwLCBfX2JlMzIgdGlwKQogewogCS8qIFByaXZhdGUgVkxBTiBpcyBvbmx5IGNvbmNlcm5lZCBhYm91dCB0aGUgc2FtZSBldGhlcm5ldCBzZWdtZW50ICovCi0JaWYgKHJ0LT51LmRzdC5kZXYgIT0gZGV2KQorCWlmIChydC0+ZHN0LmRldiAhPSBkZXYpCiAJCXJldHVybiAwOwogCiAJLyogRG9uJ3QgcmVwbHkgb24gc2VsZiBwcm9iZXMgKG9mdGVuIGRvbmUgYnkgd2luZG93eiBib3hlcykqLwpAQCAtNjk4LDYgKzcwNCw3IEBACiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MKGFycF9jcmVhdGUpOwogCiAvKgogICoJU2VuZCBhbiBhcnAgcGFja2V0LgpAQCAtNzA3LDYgKzcxNCw3IEBACiAJLyogU2VuZCBpdCBvZmYsIG1heWJlIGZpbHRlciBpdCB1c2luZyBmaXJld2FsbGluZyBmaXJzdC4gICovCiAJTkZfSE9PSyhORlBST1RPX0FSUCwgTkZfQVJQX09VVCwgc2tiLCBOVUxMLCBza2ItPmRldiwgZGV2X3F1ZXVlX3htaXQpOwogfQorRVhQT1JUX1NZTUJPTChhcnBfeG1pdCk7CiAKIC8qCiAgKglDcmVhdGUgYW5kIHNlbmQgYW4gYXJwIHBhY2tldC4KQEAgLTczMyw2ICs3NDEsNyBAQAogCiAJYXJwX3htaXQoc2tiKTsKIH0KK0VYUE9SVF9TWU1CT0woYXJwX3NlbmQpOwogCiAvKgogICoJUHJvY2VzcyBhbiBhcnAgcmVxdWVzdC4KQEAgLTc0MSw3ICs3NTAsNyBAQAogc3RhdGljIGludCBhcnBfcHJvY2VzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItPmRldjsKLQlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBpbl9kZXZfZ2V0KGRldik7CisJc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpOwogCXN0cnVjdCBhcnBoZHIgKmFycDsKIAl1bnNpZ25lZCBjaGFyICphcnBfcHRyOwogCXN0cnVjdCBydGFibGUgKnJ0OwpAQCAtODkwLDcgKzg5OSw2IEBACiAJCQkJCWFycF9zZW5kKEFSUE9QX1JFUExZLEVUSF9QX0FSUCxzaXAsZGV2LHRpcCxzaGEsZGV2LT5kZXZfYWRkcixzaGEpOwogCQkJCX0gZWxzZSB7CiAJCQkJCXBuZWlnaF9lbnF1ZXVlKCZhcnBfdGJsLCBpbl9kZXYtPmFycF9wYXJtcywgc2tiKTsKLQkJCQkJaW5fZGV2X3B1dChpbl9kZXYpOwogCQkJCQlyZXR1cm4gMDsKIAkJCQl9CiAJCQkJZ290byBvdXQ7CkBAIC05MzYsOCArOTQ0LDYgQEAKIAl9CiAKIG91dDoKLQlpZiAoaW5fZGV2KQotCQlpbl9kZXZfcHV0KGluX2Rldik7CiAJY29uc3VtZV9za2Ioc2tiKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEwNDUsNyArMTA1MSw3IEBACiAJCXN0cnVjdCBydGFibGUgKiBydDsKIAkJaWYgKChlcnIgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgJnJ0LCAmZmwpKSAhPSAwKQogCQkJcmV0dXJuIGVycjsKLQkJZGV2ID0gcnQtPnUuZHN0LmRldjsKKwkJZGV2ID0gcnQtPmRzdC5kZXY7CiAJCWlwX3J0X3B1dChydCk7CiAJCWlmICghZGV2KQogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMTUyLDcgKzExNTgsNyBAQAogCQlzdHJ1Y3QgcnRhYmxlICogcnQ7CiAJCWlmICgoZXJyID0gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsICZydCwgJmZsKSkgIT0gMCkKIAkJCXJldHVybiBlcnI7Ci0JCWRldiA9IHJ0LT51LmRzdC5kZXY7CisJCWRldiA9IHJ0LT5kc3QuZGV2OwogCQlpcF9ydF9wdXQocnQpOwogCQlpZiAoIWRldikKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTQ1MywxNCArMTQ1OSwzIEBACiB9CiAKICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwotCi1FWFBPUlRfU1lNQk9MKGFycF9icm9rZW5fb3BzKTsKLUVYUE9SVF9TWU1CT0woYXJwX2ZpbmQpOwotRVhQT1JUX1NZTUJPTChhcnBfY3JlYXRlKTsKLUVYUE9SVF9TWU1CT0woYXJwX3htaXQpOwotRVhQT1JUX1NZTUJPTChhcnBfc2VuZCk7Ci1FWFBPUlRfU1lNQk9MKGFycF90YmwpOwotCi0jaWYgZGVmaW5lZChDT05GSUdfQVRNX0NMSVApIHx8IGRlZmluZWQoQ09ORklHX0FUTV9DTElQX01PRFVMRSkKLUVYUE9SVF9TWU1CT0woY2xpcF90YmxfaG9vayk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2RhdGFncmFtLmMgYi9uZXQvaXB2NC9kYXRhZ3JhbS5jCmluZGV4IGZiMjQ2NTguLmYwNTUwOTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2RhdGFncmFtLmMKKysrIGIvbmV0L2lwdjQvZGF0YWdyYW0uYwpAQCAtNjksOSArNjksNyBAQAogCXNrLT5za19zdGF0ZSA9IFRDUF9FU1RBQkxJU0hFRDsKIAlpbmV0LT5pbmV0X2lkID0gamlmZmllczsKIAotCXNrX2RzdF9zZXQoc2ssICZydC0+dS5kc3QpOworCXNrX2RzdF9zZXQoc2ssICZydC0+ZHN0KTsKIAlyZXR1cm4oMCk7CiB9Ci0KIEVYUE9SVF9TWU1CT0woaXA0X2RhdGFncmFtX2Nvbm5lY3QpOwotCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9kZXZpbmV0LmMgYi9uZXQvaXB2NC9kZXZpbmV0LmMKaW5kZXggMzgyYmM3Ni4uZGExNGM0OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZGV2aW5ldC5jCisrKyBiL25ldC9pcHY0L2RldmluZXQuYwpAQCAtMTA4MSw2ICsxMDgxLDcgQEAKIAkJfQogCQlpcF9tY191cChpbl9kZXYpOwogCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIE5FVERFVl9OT1RJRllfUEVFUlM6CiAJY2FzZSBORVRERVZfQ0hBTkdFQUREUjoKIAkJLyogU2VuZCBncmF0dWl0b3VzIEFSUCB0byBub3RpZnkgb2YgbGluayBjaGFuZ2UgKi8KIAkJaWYgKElOX0RFVl9BUlBfTk9USUZZKGluX2RldikpIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jIGIvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMKaW5kZXggNGYwZWQ0NS4uYTQzOTY4OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMKKysrIGIvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMKQEAgLTE3NSw2ICsxNzUsNyBAQAogCWZpYl9yZXNfcHV0KCZyZXMpOwogCXJldHVybiBkZXY7CiB9CitFWFBPUlRfU1lNQk9MKGlwX2Rldl9maW5kKTsKIAogLyoKICAqIEZpbmQgYWRkcmVzcyB0eXBlIGFzIGlmIG9ubHkgImRldiIgd2FzIHByZXNlbnQgaW4gdGhlIHN5c3RlbS4gSWYKQEAgLTIxNCwxMiArMjE1LDE0IEBACiB7CiAJcmV0dXJuIF9faW5ldF9kZXZfYWRkcl90eXBlKG5ldCwgTlVMTCwgYWRkcik7CiB9CitFWFBPUlRfU1lNQk9MKGluZXRfYWRkcl90eXBlKTsKIAogdW5zaWduZWQgaW50IGluZXRfZGV2X2FkZHJfdHlwZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJX19iZTMyIGFkZHIpCiB7CiAgICAgICAgcmV0dXJuIF9faW5ldF9kZXZfYWRkcl90eXBlKG5ldCwgZGV2LCBhZGRyKTsKIH0KK0VYUE9SVF9TWU1CT0woaW5ldF9kZXZfYWRkcl90eXBlKTsKIAogLyogR2l2ZW4gKHBhY2tldCBzb3VyY2UsIGlucHV0IGludGVyZmFjZSkgYW5kIG9wdGlvbmFsIChkc3QsIG9pZiwgdG9zKToKICAgIC0gKG1haW4pIGNoZWNrLCB0aGF0IHNvdXJjZSBpcyB2YWxpZCBpLmUuIG5vdCBicm9hZGNhc3Qgb3Igb3VyIGxvY2FsCkBAIC0yODQsNyArMjg3LDcgQEAKIAlpZiAobm9fYWRkcikKIAkJZ290byBsYXN0X3Jlc29ydDsKIAlpZiAocnBmID09IDEpCi0JCWdvdG8gZV9pbnZhbDsKKwkJZ290byBlX3JwZjsKIAlmbC5vaWYgPSBkZXYtPmlmaW5kZXg7CiAKIAlyZXQgPSAwOwpAQCAtMjk5LDcgKzMwMiw3IEBACiAKIGxhc3RfcmVzb3J0OgogCWlmIChycGYpCi0JCWdvdG8gZV9pbnZhbDsKKwkJZ290byBlX3JwZjsKIAkqc3BlY19kc3QgPSBpbmV0X3NlbGVjdF9hZGRyKGRldiwgMCwgUlRfU0NPUEVfVU5JVkVSU0UpOwogCSppdGFnID0gMDsKIAlyZXR1cm4gMDsKQEAgLTMwOCw2ICszMTEsOCBAQAogCWZpYl9yZXNfcHV0KCZyZXMpOwogZV9pbnZhbDoKIAlyZXR1cm4gLUVJTlZBTDsKK2VfcnBmOgorCXJldHVybiAtRVhERVY7CiB9CiAKIHN0YXRpYyBpbmxpbmUgX19iZTMyIHNrX2V4dHJhY3RfYWRkcihzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCkBAIC0xMDc1LDcgKzEwODAsMyBAQAogCiAJZmliX2hhc2hfaW5pdCgpOwogfQotCi1FWFBPUlRfU1lNQk9MKGluZXRfYWRkcl90eXBlKTsKLUVYUE9SVF9TWU1CT0woaW5ldF9kZXZfYWRkcl90eXBlKTsKLUVYUE9SVF9TWU1CT0woaXBfZGV2X2ZpbmQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWNtcC5jIGIvbmV0L2lwdjQvaWNtcC5jCmluZGV4IGQ2NWU5MjE1Li5hMGQ4NDdjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pY21wLmMKKysrIGIvbmV0L2lwdjQvaWNtcC5jCkBAIC0xODEsNiArMTgxLDcgQEAKIAkJLmZhdGFsID0gMSwKIAl9LAogfTsKK0VYUE9SVF9TWU1CT0woaWNtcF9lcnJfY29udmVydCk7CiAKIC8qCiAgKglJQ01QIGNvbnRyb2wgYXJyYXkuIFRoaXMgc3BlY2lmaWVzIHdoYXQgdG8gZG8gd2l0aCBlYWNoIElDTVAuCkBAIC0yNjcsMTEgKzI2OCwxMiBAQAogCWRzdC0+cmF0ZV90b2tlbnMgPSB0b2tlbjsKIAlyZXR1cm4gcmM7CiB9CitFWFBPUlRfU1lNQk9MKHhybGltX2FsbG93KTsKIAogc3RhdGljIGlubGluZSBpbnQgaWNtcHY0X3hybGltX2FsbG93KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHJ0YWJsZSAqcnQsCiAJCWludCB0eXBlLCBpbnQgY29kZSkKIHsKLQlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSAmcnQtPnUuZHN0OworCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9ICZydC0+ZHN0OwogCWludCByYyA9IDE7CiAKIAlpZiAodHlwZSA+IE5SX0lDTVBfVFlQRVMpCkBAIC0zMjcsNyArMzI5LDcgQEAKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCXNrID0gaWNtcF9zayhkZXZfbmV0KCgqcnQpLT51LmRzdC5kZXYpKTsKKwlzayA9IGljbXBfc2soZGV2X25ldCgoKnJ0KS0+ZHN0LmRldikpOwogCWlmIChpcF9hcHBlbmRfZGF0YShzaywgaWNtcF9nbHVlX2JpdHMsIGljbXBfcGFyYW0sCiAJCQkgICBpY21wX3BhcmFtLT5kYXRhX2xlbitpY21wX3BhcmFtLT5oZWFkX2xlbiwKIAkJCSAgIGljbXBfcGFyYW0tPmhlYWRfbGVuLApAQCAtMzU5LDcgKzM2MSw3IEBACiB7CiAJc3RydWN0IGlwY21fY29va2llIGlwYzsKIAlzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYl9ydGFibGUoc2tiKTsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHJ0LT51LmRzdC5kZXYpOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQocnQtPmRzdC5kZXYpOwogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0OwogCV9fYmUzMiBkYWRkcjsKQEAgLTQyNyw3ICs0MjksNyBAQAogCiAJaWYgKCFydCkKIAkJZ290byBvdXQ7Ci0JbmV0ID0gZGV2X25ldChydC0+dS5kc3QuZGV2KTsKKwluZXQgPSBkZXZfbmV0KHJ0LT5kc3QuZGV2KTsKIAogCS8qCiAJICoJRmluZCB0aGUgb3JpZ2luYWwgaGVhZGVyLiBJdCBpcyBleHBlY3RlZCB0byBiZSB2YWxpZCwgb2YgY291cnNlLgpAQCAtNTk2LDkgKzU5OCw5IEBACiAJCQkvKiBVZ2ghICovCiAJCQlvcmVmZHN0ID0gc2tiX2luLT5fc2tiX3JlZmRzdDsgLyogc2F2ZSBvbGQgcmVmZHN0ICovCiAJCQllcnIgPSBpcF9yb3V0ZV9pbnB1dChza2JfaW4sIGZsLmZsNF9kc3QsIGZsLmZsNF9zcmMsCi0JCQkJCSAgICAgUlRfVE9TKHRvcyksIHJ0Mi0+dS5kc3QuZGV2KTsKKwkJCQkJICAgICBSVF9UT1ModG9zKSwgcnQyLT5kc3QuZGV2KTsKIAotCQkJZHN0X3JlbGVhc2UoJnJ0Mi0+dS5kc3QpOworCQkJZHN0X3JlbGVhc2UoJnJ0Mi0+ZHN0KTsKIAkJCXJ0MiA9IHNrYl9ydGFibGUoc2tiX2luKTsKIAkJCXNrYl9pbi0+X3NrYl9yZWZkc3QgPSBvcmVmZHN0OyAvKiByZXN0b3JlIG9sZCByZWZkc3QgKi8KIAkJfQpAQCAtNjEwLDcgKzYxMiw3IEBACiAJCQkJICBYRlJNX0xPT0tVUF9JQ01QKTsKIAkJc3dpdGNoIChlcnIpIHsKIAkJY2FzZSAwOgotCQkJZHN0X3JlbGVhc2UoJnJ0LT51LmRzdCk7CisJCQlkc3RfcmVsZWFzZSgmcnQtPmRzdCk7CiAJCQlydCA9IHJ0MjsKIAkJCWJyZWFrOwogCQljYXNlIC1FUEVSTToKQEAgLTYyOSw3ICs2MzEsNyBAQAogCiAJLyogUkZDIHNheXMgcmV0dXJuIGFzIG11Y2ggYXMgd2UgY2FuIHdpdGhvdXQgZXhjZWVkaW5nIDU3NiBieXRlcy4gKi8KIAotCXJvb20gPSBkc3RfbXR1KCZydC0+dS5kc3QpOworCXJvb20gPSBkc3RfbXR1KCZydC0+ZHN0KTsKIAlpZiAocm9vbSA+IDU3NikKIAkJcm9vbSA9IDU3NjsKIAlyb29tIC09IHNpemVvZihzdHJ1Y3QgaXBoZHIpICsgaWNtcF9wYXJhbS5yZXBseW9wdHMub3B0bGVuOwpAQCAtNjQ3LDYgKzY0OSw3IEBACiAJaWNtcF94bWl0X3VubG9jayhzayk7CiBvdXQ6OwogfQorRVhQT1JUX1NZTUJPTChpY21wX3NlbmQpOwogCiAKIC8qCkBAIC05MjUsNiArOTI4LDcgQEAKIC8qCiAgKiBSRkMxODEyICg0LjMuMy45KS4JQSByb3V0ZXIgU0hPVUxEIGxpc3RlbiBhbGwgcmVwbGllcywgYW5kIGNvbXBsYWluCiAgKgkJCWxvdWRseSBpZiBhbiBpbmNvbnNpc3RlbmN5IGlzIGZvdW5kLgorICogY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jaygpCiAgKi8KIAogc3RhdGljIHZvaWQgaWNtcF9hZGRyZXNzX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IpCkBAIC05MzUsMTIgKzkzOSwxMiBAQAogCXN0cnVjdCBpbl9pZmFkZHIgKmlmYTsKIAogCWlmIChza2ItPmxlbiA8IDQgfHwgIShydC0+cnRfZmxhZ3MmUlRDRl9ESVJFQ1RTUkMpKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuOwogCi0JaW5fZGV2ID0gaW5fZGV2X2dldChkZXYpOworCWluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTsKIAlpZiAoIWluX2RldikKLQkJZ290byBvdXQ7Ci0JcmN1X3JlYWRfbG9jaygpOworCQlyZXR1cm47CisKIAlpZiAoaW5fZGV2LT5pZmFfbGlzdCAmJgogCSAgICBJTl9ERVZfTE9HX01BUlRJQU5TKGluX2RldikgJiYKIAkgICAgSU5fREVWX0ZPUldBUkQoaW5fZGV2KSkgewpAQCAtOTU4LDkgKzk2Miw2IEBACiAJCQkgICAgICAgbXAsIGRldi0+bmFtZSwgJnJ0LT5ydF9zcmMpOwogCQl9CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwotCWluX2Rldl9wdXQoaW5fZGV2KTsKLW91dDo7CiB9CiAKIHN0YXRpYyB2b2lkIGljbXBfZGlzY2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtOTc0LDcgKzk3NSw3IEBACiB7CiAJc3RydWN0IGljbXBoZHIgKmljbXBoOwogCXN0cnVjdCBydGFibGUgKnJ0ID0gc2tiX3J0YWJsZShza2IpOwotCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQocnQtPnUuZHN0LmRldik7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChydC0+ZHN0LmRldik7CiAKIAlpZiAoIXhmcm00X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkgewogCQlzdHJ1Y3Qgc2VjX3BhdGggKnNwID0gc2tiX3NlY19wYXRoKHNrYik7CkBAIC0xMjE2LDcgKzEyMTcsMyBAQAogewogCXJldHVybiByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpY21wX3NrX29wcyk7CiB9Ci0KLUVYUE9SVF9TWU1CT0woaWNtcF9lcnJfY29udmVydCk7Ci1FWFBPUlRfU1lNQk9MKGljbXBfc2VuZCk7Ci1FWFBPUlRfU1lNQk9MKHhybGltX2FsbG93KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lnbXAuYyBiL25ldC9pcHY0L2lnbXAuYwppbmRleCA1ZmZmODY1Li5hMWFkMGU3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pZ21wLmMKKysrIGIvbmV0L2lwdjQvaWdtcC5jCkBAIC0zMTIsNyArMzEyLDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0Jc2tiX2RzdF9zZXQoc2tiLCAmcnQtPnUuZHN0KTsKKwlza2JfZHN0X3NldChza2IsICZydC0+ZHN0KTsKIAlza2ItPmRldiA9IGRldjsKIAogCXNrYl9yZXNlcnZlKHNrYiwgTExfUkVTRVJWRURfU1BBQ0UoZGV2KSk7CkBAIC0zMzAsNyArMzMwLDcgQEAKIAlwaXAtPnNhZGRyICAgID0gcnQtPnJ0X3NyYzsKIAlwaXAtPnByb3RvY29sID0gSVBQUk9UT19JR01QOwogCXBpcC0+dG90X2xlbiAgPSAwOwkvKiBmaWxsZWQgaW4gbGF0ZXIgKi8KLQlpcF9zZWxlY3RfaWRlbnQocGlwLCAmcnQtPnUuZHN0LCBOVUxMKTsKKwlpcF9zZWxlY3RfaWRlbnQocGlwLCAmcnQtPmRzdCwgTlVMTCk7CiAJKCh1OCopJnBpcFsxXSlbMF0gPSBJUE9QVF9SQTsKIAkoKHU4KikmcGlwWzFdKVsxXSA9IDQ7CiAJKCh1OCopJnBpcFsxXSlbMl0gPSAwOwpAQCAtNjYwLDcgKzY2MCw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlza2JfZHN0X3NldChza2IsICZydC0+dS5kc3QpOworCXNrYl9kc3Rfc2V0KHNrYiwgJnJ0LT5kc3QpOwogCiAJc2tiX3Jlc2VydmUoc2tiLCBMTF9SRVNFUlZFRF9TUEFDRShkZXYpKTsKIApAQCAtNjc2LDcgKzY3Niw3IEBACiAJaXBoLT5kYWRkciAgICA9IGRzdDsKIAlpcGgtPnNhZGRyICAgID0gcnQtPnJ0X3NyYzsKIAlpcGgtPnByb3RvY29sID0gSVBQUk9UT19JR01QOwotCWlwX3NlbGVjdF9pZGVudChpcGgsICZydC0+dS5kc3QsIE5VTEwpOworCWlwX3NlbGVjdF9pZGVudChpcGgsICZydC0+ZHN0LCBOVUxMKTsKIAkoKHU4KikmaXBoWzFdKVswXSA9IElQT1BUX1JBOwogCSgodTgqKSZpcGhbMV0pWzFdID0gNDsKIAkoKHU4KikmaXBoWzFdKVsyXSA9IDA7CkBAIC05MTYsMTggKzkxNiwxOSBAQAogCXJlYWRfdW5sb2NrKCZpbl9kZXYtPm1jX2xpc3RfbG9jayk7CiB9CiAKKy8qIGNhbGxlZCBpbiByY3VfcmVhZF9sb2NrKCkgc2VjdGlvbiAqLwogaW50IGlnbXBfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJLyogVGhpcyBiYXNpY2FsbHkgZm9sbG93cyB0aGUgc3BlYyBsaW5lIGJ5IGxpbmUgLS0gc2VlIFJGQzExMTIgKi8KIAlzdHJ1Y3QgaWdtcGhkciAqaWg7Ci0Jc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gaW5fZGV2X2dldChza2ItPmRldik7CisJc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShza2ItPmRldik7CiAJaW50IGxlbiA9IHNrYi0+bGVuOwogCiAJaWYgKGluX2RldiA9PSBOVUxMKQogCQlnb3RvIGRyb3A7CiAKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlnbXBoZHIpKSkKLQkJZ290byBkcm9wX3JlZjsKKwkJZ290byBkcm9wOwogCiAJc3dpdGNoIChza2ItPmlwX3N1bW1lZCkgewogCWNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6CkBAIC05MzcsNyArOTM4LDcgQEAKIAljYXNlIENIRUNLU1VNX05PTkU6CiAJCXNrYi0+Y3N1bSA9IDA7CiAJCWlmIChfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKQotCQkJZ290byBkcm9wX3JlZjsKKwkJCWdvdG8gZHJvcDsKIAl9CiAKIAlpaCA9IGlnbXBfaGRyKHNrYik7CkBAIC05NTcsNyArOTU4LDYgQEAKIAkJYnJlYWs7CiAJY2FzZSBJR01QX1BJTToKICNpZmRlZiBDT05GSUdfSVBfUElNU01fVjEKLQkJaW5fZGV2X3B1dChpbl9kZXYpOwogCQlyZXR1cm4gcGltX3Jjdl92MShza2IpOwogI2VuZGlmCiAJY2FzZSBJR01QVjNfSE9TVF9NRU1CRVJTSElQX1JFUE9SVDoKQEAgLTk3MSw4ICs5NzEsNiBAQAogCQlicmVhazsKIAl9CiAKLWRyb3BfcmVmOgotCWluX2Rldl9wdXQoaW5fZGV2KTsKIGRyb3A6CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CkBAIC0xMjQ2LDYgKzEyNDQsNyBAQAogb3V0OgogCXJldHVybjsKIH0KK0VYUE9SVF9TWU1CT0woaXBfbWNfaW5jX2dyb3VwKTsKIAogLyoKICAqCVJlc2VuZCBJR01QIEpPSU4gcmVwb3J0OyB1c2VkIGZvciBib25kaW5nLgpAQCAtMTI2OCw2ICsxMjY3LDcgQEAKIAlpZ21wX2lmY19ldmVudChpbl9kZXYpOwogI2VuZGlmCiB9CitFWFBPUlRfU1lNQk9MKGlwX21jX3Jlam9pbl9ncm91cCk7CiAKIC8qCiAgKglBIHNvY2tldCBoYXMgbGVmdCBhIG11bHRpY2FzdCBncm91cCBvbiBkZXZpY2UgZGV2CkBAIC0xMjk4LDYgKzEyOTgsNyBAQAogCQl9CiAJfQogfQorRVhQT1JUX1NZTUJPTChpcF9tY19kZWNfZ3JvdXApOwogCiAvKiBEZXZpY2UgY2hhbmdpbmcgdHlwZSAqLwogCkBAIC0xNDI3LDcgKzE0MjgsNyBAQAogCX0KIAogCWlmICghZGV2ICYmICFpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgJnJ0LCAmZmwpKSB7Ci0JCWRldiA9IHJ0LT51LmRzdC5kZXY7CisJCWRldiA9IHJ0LT5kc3QuZGV2OwogCQlpcF9ydF9wdXQocnQpOwogCX0KIAlpZiAoZGV2KSB7CkBAIC0xNjQ2LDggKzE2NDcsNyBAQAogCQkJCWlmIChkcHNmLT5zZl9pbmFkZHIgPT0gcHNmLT5zZl9pbmFkZHIpCiAJCQkJCWJyZWFrOwogCQkJaWYgKCFkcHNmKSB7Ci0JCQkJZHBzZiA9IChzdHJ1Y3QgaXBfc2ZfbGlzdCAqKQotCQkJCQlrbWFsbG9jKHNpemVvZigqZHBzZiksIEdGUF9BVE9NSUMpOworCQkJCWRwc2YgPSBrbWFsbG9jKHNpemVvZigqZHBzZiksIEdGUF9BVE9NSUMpOwogCQkJCWlmICghZHBzZikKIAkJCQkJY29udGludWU7CiAJCQkJKmRwc2YgPSAqcHNmOwpAQCAtMTgwNyw2ICsxODA3LDcgQEAKIAlydG5sX3VubG9jaygpOwogCXJldHVybiBlcnI7CiB9CitFWFBPUlRfU1lNQk9MKGlwX21jX2pvaW5fZ3JvdXApOwogCiBzdGF0aWMgdm9pZCBpcF9zZl9zb2NrbGlzdF9yZWNsYWltKHN0cnVjdCByY3VfaGVhZCAqcnApCiB7CkBAIC0yNjc5LDggKzI2ODAsMyBAQAogCXJldHVybiByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpZ21wX25ldF9vcHMpOwogfQogI2VuZGlmCi0KLUVYUE9SVF9TWU1CT0woaXBfbWNfZGVjX2dyb3VwKTsKLUVYUE9SVF9TWU1CT0woaXBfbWNfaW5jX2dyb3VwKTsKLUVYUE9SVF9TWU1CT0woaXBfbWNfam9pbl9ncm91cCk7Ci1FWFBPUlRfU1lNQk9MKGlwX21jX3Jlam9pbl9ncm91cCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwppbmRleCA3MGViMzUwLi43MTc0MzcwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCisrKyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTg0LDcgKzg0LDYgQEAKIAl9CiAJcmV0dXJuIG5vZGUgIT0gTlVMTDsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9jc2tfYmluZF9jb25mbGljdCk7CiAKIC8qIE9idGFpbiBhIHJlZmVyZW5jZSB0byBhIGxvY2FsIHBvcnQgZm9yIHRoZSBnaXZlbiBzb2NrLApAQCAtMjEyLDcgKzIxMSw2IEBACiAJbG9jYWxfYmhfZW5hYmxlKCk7CiAJcmV0dXJuIHJldDsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9jc2tfZ2V0X3BvcnQpOwogCiAvKgpAQCAtMzA1LDcgKzMwMyw2IEBACiAJKmVyciA9IGVycm9yOwogCWdvdG8gb3V0OwogfQotCiBFWFBPUlRfU1lNQk9MKGluZXRfY3NrX2FjY2VwdCk7CiAKIC8qCkBAIC0zMjcsNyArMzI0LDYgQEAKIAlzZXR1cF90aW1lcigmc2stPnNrX3RpbWVyLCBrZWVwYWxpdmVfaGFuZGxlciwgKHVuc2lnbmVkIGxvbmcpc2spOwogCWljc2stPmljc2tfcGVuZGluZyA9IGljc2stPmljc2tfYWNrLnBlbmRpbmcgPSAwOwogfQotCiBFWFBPUlRfU1lNQk9MKGluZXRfY3NrX2luaXRfeG1pdF90aW1lcnMpOwogCiB2b2lkIGluZXRfY3NrX2NsZWFyX3htaXRfdGltZXJzKHN0cnVjdCBzb2NrICpzaykKQEAgLTM0MCwyMSArMzM2LDE4IEBACiAJc2tfc3RvcF90aW1lcihzaywgJmljc2stPmljc2tfZGVsYWNrX3RpbWVyKTsKIAlza19zdG9wX3RpbWVyKHNrLCAmc2stPnNrX3RpbWVyKTsKIH0KLQogRVhQT1JUX1NZTUJPTChpbmV0X2Nza19jbGVhcl94bWl0X3RpbWVycyk7CiAKIHZvaWQgaW5ldF9jc2tfZGVsZXRlX2tlZXBhbGl2ZV90aW1lcihzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc2tfc3RvcF90aW1lcihzaywgJnNrLT5za190aW1lcik7CiB9Ci0KIEVYUE9SVF9TWU1CT0woaW5ldF9jc2tfZGVsZXRlX2tlZXBhbGl2ZV90aW1lcik7CiAKIHZvaWQgaW5ldF9jc2tfcmVzZXRfa2VlcGFsaXZlX3RpbWVyKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgbG9uZyBsZW4pCiB7CiAJc2tfcmVzZXRfdGltZXIoc2ssICZzay0+c2tfdGltZXIsIGppZmZpZXMgKyBsZW4pOwogfQotCiBFWFBPUlRfU1lNQk9MKGluZXRfY3NrX3Jlc2V0X2tlZXBhbGl2ZV90aW1lcik7CiAKIHN0cnVjdCBkc3RfZW50cnkgKmluZXRfY3NrX3JvdXRlX3JlcShzdHJ1Y3Qgc29jayAqc2ssCkBAIC0zODMsNyArMzc2LDcgQEAKIAkJZ290byBub19yb3V0ZTsKIAlpZiAob3B0ICYmIG9wdC0+aXNfc3RyaWN0cm91dGUgJiYgcnQtPnJ0X2RzdCAhPSBydC0+cnRfZ2F0ZXdheSkKIAkJZ290byByb3V0ZV9lcnI7Ci0JcmV0dXJuICZydC0+dS5kc3Q7CisJcmV0dXJuICZydC0+ZHN0OwogCiByb3V0ZV9lcnI6CiAJaXBfcnRfcHV0KHJ0KTsKQEAgLTM5MSw3ICszODQsNiBAQAogCUlQX0lOQ19TVEFUU19CSChuZXQsIElQU1RBVFNfTUlCX09VVE5PUk9VVEVTKTsKIAlyZXR1cm4gTlVMTDsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9jc2tfcm91dGVfcmVxKTsKIAogc3RhdGljIGlubGluZSB1MzIgaW5ldF9zeW5xX2hhc2goY29uc3QgX19iZTMyIHJhZGRyLCBjb25zdCBfX2JlMTYgcnBvcnQsCkBAIC00MzMsNyArNDI1LDYgQEAKIAogCXJldHVybiByZXE7CiB9Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKGluZXRfY3NrX3NlYXJjaF9yZXEpOwogCiB2b2lkIGluZXRfY3NrX3JlcXNrX3F1ZXVlX2hhc2hfYWRkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLApAQCAtNDQ3LDExICs0MzgsMTEgQEAKIAlyZXFza19xdWV1ZV9oYXNoX3JlcSgmaWNzay0+aWNza19hY2NlcHRfcXVldWUsIGgsIHJlcSwgdGltZW91dCk7CiAJaW5ldF9jc2tfcmVxc2tfcXVldWVfYWRkZWQoc2ssIHRpbWVvdXQpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9jc2tfcmVxc2tfcXVldWVfaGFzaF9hZGQpOwogCiAvKiBPbmx5IHRoaW5nIHdlIG5lZWQgZnJvbSB0Y3AuaCAqLwogZXh0ZXJuIGludCBzeXNjdGxfdGNwX3N5bmFja19yZXRyaWVzOwogCi1FWFBPUlRfU1lNQk9MX0dQTChpbmV0X2Nza19yZXFza19xdWV1ZV9oYXNoX2FkZCk7CiAKIC8qIERlY2lkZSB3aGVuIHRvIGV4cGlyZSB0aGUgcmVxdWVzdCBhbmQgd2hlbiB0byByZXNlbmQgU1lOLUFDSyAqLwogc3RhdGljIGlubGluZSB2b2lkIHN5bl9hY2tfcmVjYWxjKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgY29uc3QgaW50IHRocmVzaCwKQEAgLTU2OSw3ICs1NjAsNiBAQAogCWlmIChsb3B0LT5xbGVuKQogCQlpbmV0X2Nza19yZXNldF9rZWVwYWxpdmVfdGltZXIocGFyZW50LCBpbnRlcnZhbCk7CiB9Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKGluZXRfY3NrX3JlcXNrX3F1ZXVlX3BydW5lKTsKIAogc3RydWN0IHNvY2sgKmluZXRfY3NrX2Nsb25lKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLApAQCAtNTk5LDcgKzU4OSw2IEBACiAJfQogCXJldHVybiBuZXdzazsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9jc2tfY2xvbmUpOwogCiAvKgpAQCAtNjMwLDcgKzYxOSw2IEBACiAJcGVyY3B1X2NvdW50ZXJfZGVjKHNrLT5za19wcm90LT5vcnBoYW5fY291bnQpOwogCXNvY2tfcHV0KHNrKTsKIH0KLQogRVhQT1JUX1NZTUJPTChpbmV0X2Nza19kZXN0cm95X3NvY2spOwogCiBpbnQgaW5ldF9jc2tfbGlzdGVuX3N0YXJ0KHN0cnVjdCBzb2NrICpzaywgY29uc3QgaW50IG5yX3RhYmxlX2VudHJpZXMpCkBAIC02NjUsNyArNjUzLDYgQEAKIAlfX3JlcXNrX3F1ZXVlX2Rlc3Ryb3koJmljc2stPmljc2tfYWNjZXB0X3F1ZXVlKTsKIAlyZXR1cm4gLUVBRERSSU5VU0U7CiB9Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKGluZXRfY3NrX2xpc3Rlbl9zdGFydCk7CiAKIC8qCkBAIC03MjAsNyArNzA3LDYgQEAKIAl9CiAJV0FSTl9PTihzay0+c2tfYWNrX2JhY2tsb2cpOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChpbmV0X2Nza19saXN0ZW5fc3RvcCk7CiAKIHZvaWQgaW5ldF9jc2tfYWRkcjJzb2NrYWRkcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIpCkBAIC03MzIsNyArNzE4LDYgQEAKIAlzaW4tPnNpbl9hZGRyLnNfYWRkcgk9IGluZXQtPmluZXRfZGFkZHI7CiAJc2luLT5zaW5fcG9ydAkJPSBpbmV0LT5pbmV0X2Rwb3J0OwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChpbmV0X2Nza19hZGRyMnNvY2thZGRyKTsKIAogI2lmZGVmIENPTkZJR19DT01QQVQKQEAgLTc0Nyw3ICs3MzIsNiBAQAogCXJldHVybiBpY3NrLT5pY3NrX2FmX29wcy0+Z2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsCiAJCQkJCSAgICAgb3B0dmFsLCBvcHRsZW4pOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChpbmV0X2Nza19jb21wYXRfZ2V0c29ja29wdCk7CiAKIGludCBpbmV0X2Nza19jb21wYXRfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCkBAIC03NjEsNiArNzQ1LDUgQEAKIAlyZXR1cm4gaWNzay0+aWNza19hZl9vcHMtPnNldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLAogCQkJCQkgICAgIG9wdHZhbCwgb3B0bGVuKTsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9jc2tfY29tcGF0X3NldHNvY2tvcHQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2ZyYWdtZW50LmMgYi9uZXQvaXB2NC9pbmV0X2ZyYWdtZW50LmMKaW5kZXggYTJjYTZhZS4uNWZmMmE1MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9mcmFnbWVudC5jCisrKyBiL25ldC9pcHY0L2luZXRfZnJhZ21lbnQuYwpAQCAtMTE0LDcgKzExNCw2IEBACiAJCWZxLT5sYXN0X2luIHw9IElORVRfRlJBR19DT01QTEVURTsKIAl9CiB9Ci0KIEVYUE9SVF9TWU1CT0woaW5ldF9mcmFnX2tpbGwpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZnJhZ19rZnJlZV9za2Ioc3RydWN0IG5ldG5zX2ZyYWdzICpuZiwgc3RydWN0IGluZXRfZnJhZ3MgKmYsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYyBiL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jCmluZGV4IGQzZTE2MGEuLmZiN2FkNWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jCisrKyBiL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jCkBAIC05OSw3ICs5OSw2IEBACiAJX19pbmV0X3B1dF9wb3J0KHNrKTsKIAlsb2NhbF9iaF9lbmFibGUoKTsKIH0KLQogRVhQT1JUX1NZTUJPTChpbmV0X3B1dF9wb3J0KTsKIAogdm9pZCBfX2luZXRfaW5oZXJpdF9wb3J0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKmNoaWxkKQpAQCAtMTE2LDcgKzExNSw2IEBACiAJaW5ldF9jc2soY2hpbGQpLT5pY3NrX2JpbmRfaGFzaCA9IHRiOwogCXNwaW5fdW5sb2NrKCZoZWFkLT5sb2NrKTsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoX19pbmV0X2luaGVyaXRfcG9ydCk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IGNvbXB1dGVfc2NvcmUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0ICpuZXQsCkBAIC01NDYsNyArNTQ0LDYgQEAKIAlyZXR1cm4gX19pbmV0X2hhc2hfY29ubmVjdChkZWF0aF9yb3csIHNrLCBpbmV0X3NrX3BvcnRfb2Zmc2V0KHNrKSwKIAkJCV9faW5ldF9jaGVja19lc3RhYmxpc2hlZCwgX19pbmV0X2hhc2hfbm9saXN0ZW4pOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChpbmV0X2hhc2hfY29ubmVjdCk7CiAKIHZvaWQgaW5ldF9oYXNoaW5mb19pbml0KHN0cnVjdCBpbmV0X2hhc2hpbmZvICpoKQpAQCAtNTYwLDUgKzU1Nyw0IEBACiAJCQkJICAgICAgaSArIExJU1RFTklOR19OVUxMU19CQVNFKTsKIAkJfQogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChpbmV0X2hhc2hpbmZvX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldHBlZXIuYyBiL25ldC9pcHY0L2luZXRwZWVyLmMKaW5kZXggNmJjZmU1Mi4uOWZmYTI0YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldHBlZXIuYworKysgYi9uZXQvaXB2NC9pbmV0cGVlci5jCkBAIC01MSw4ICs1MSw4IEBACiAgKiAgbG9va3VwcyBwZXJmb3JtZWQgd2l0aCBkaXNhYmxlZCBCSHMuCiAgKgogICogIFNlcmlhbGlzYXRpb24gaXNzdWVzLgotICogIDEuICBOb2RlcyBtYXkgYXBwZWFyIGluIHRoZSB0cmVlIG9ubHkgd2l0aCB0aGUgcG9vbCB3cml0ZSBsb2NrIGhlbGQuCi0gKiAgMi4gIE5vZGVzIG1heSBkaXNhcHBlYXIgZnJvbSB0aGUgdHJlZSBvbmx5IHdpdGggdGhlIHBvb2wgd3JpdGUgbG9jayBoZWxkCisgKiAgMS4gIE5vZGVzIG1heSBhcHBlYXIgaW4gdGhlIHRyZWUgb25seSB3aXRoIHRoZSBwb29sIGxvY2sgaGVsZC4KKyAqICAyLiAgTm9kZXMgbWF5IGRpc2FwcGVhciBmcm9tIHRoZSB0cmVlIG9ubHkgd2l0aCB0aGUgcG9vbCBsb2NrIGhlbGQKICAqICAgICAgQU5EIHJlZmVyZW5jZSBjb3VudCBiZWluZyAwLgogICogIDMuICBOb2RlcyBhcHBlYXJzIGFuZCBkaXNhcHBlYXJzIGZyb20gdW51c2VkIG5vZGUgbGlzdCBvbmx5IHVuZGVyCiAgKiAgICAgICJpbmV0X3BlZXJfdW51c2VkX2xvY2siLgpAQCAtNjQsMjMgKzY0LDMxIEBACiAgKgkJICAgdXN1YWxseSB1bmRlciBzb21lIG90aGVyIGxvY2sgdG8gcHJldmVudCBub2RlIGRpc2FwcGVhcmluZwogICoJCWR0aW1lOiB1bnVzZWQgbm9kZSBsaXN0IGxvY2sKICAqCQl2NGRhZGRyOiB1bmNoYW5nZWFibGUKLSAqCQlpcF9pZF9jb3VudDogaWRsb2NrCisgKgkJaXBfaWRfY291bnQ6IGF0b21pYyB2YWx1ZSAobm8gbG9jayBuZWVkZWQpCiAgKi8KIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwZWVyX2NhY2hlcCBfX3JlYWRfbW9zdGx5OwogCiAjZGVmaW5lIG5vZGVfaGVpZ2h0KHgpIHgtPmF2bF9oZWlnaHQKLXN0YXRpYyBzdHJ1Y3QgaW5ldF9wZWVyIHBlZXJfZmFrZV9ub2RlID0gewotCS5hdmxfbGVmdAk9ICZwZWVyX2Zha2Vfbm9kZSwKLQkuYXZsX3JpZ2h0CT0gJnBlZXJfZmFrZV9ub2RlLAorCisjZGVmaW5lIHBlZXJfYXZsX2VtcHR5ICgoc3RydWN0IGluZXRfcGVlciAqKSZwZWVyX2Zha2Vfbm9kZSkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9wZWVyIHBlZXJfZmFrZV9ub2RlID0geworCS5hdmxfbGVmdAk9IHBlZXJfYXZsX2VtcHR5LAorCS5hdmxfcmlnaHQJPSBwZWVyX2F2bF9lbXB0eSwKIAkuYXZsX2hlaWdodAk9IDAKIH07Ci0jZGVmaW5lIHBlZXJfYXZsX2VtcHR5ICgmcGVlcl9mYWtlX25vZGUpCi1zdGF0aWMgc3RydWN0IGluZXRfcGVlciAqcGVlcl9yb290ID0gcGVlcl9hdmxfZW1wdHk7Ci1zdGF0aWMgREVGSU5FX1JXTE9DSyhwZWVyX3Bvb2xfbG9jayk7CisKK3N0YXRpYyBzdHJ1Y3QgeworCXN0cnVjdCBpbmV0X3BlZXIgKnJvb3Q7CisJc3BpbmxvY2tfdAlsb2NrOworCWludAkJdG90YWw7Cit9IHBlZXJzID0geworCS5yb290CQk9IHBlZXJfYXZsX2VtcHR5LAorCS5sb2NrCQk9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKHBlZXJzLmxvY2spLAorCS50b3RhbAkJPSAwLAorfTsKICNkZWZpbmUgUEVFUl9NQVhERVBUSCA0MCAvKiBzdWZmaWNpZW50IGZvciBhYm91dCAyXjI3IG5vZGVzICovCiAKLXN0YXRpYyBpbnQgcGVlcl90b3RhbDsKIC8qIEV4cG9ydGVkIGZvciBzeXNjdGxfbmV0X2lwdjQuICAqLwogaW50IGluZXRfcGVlcl90aHJlc2hvbGQgX19yZWFkX21vc3RseSA9IDY1NTM2ICsgMTI4OwkvKiBzdGFydCB0byB0aHJvdyBlbnRyaWVzIG1vcmUKIAkJCQkJICogYWdncmVzc2l2ZWx5IGF0IHRoaXMgc3RhZ2UgKi8KQEAgLTg5LDggKzk3LDEzIEBACiBpbnQgaW5ldF9wZWVyX2djX21pbnRpbWUgX19yZWFkX21vc3RseSA9IDEwICogSFo7CiBpbnQgaW5ldF9wZWVyX2djX21heHRpbWUgX19yZWFkX21vc3RseSA9IDEyMCAqIEhaOwogCi1zdGF0aWMgTElTVF9IRUFEKHVudXNlZF9wZWVycyk7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGluZXRfcGVlcl91bnVzZWRfbG9jayk7CitzdGF0aWMgc3RydWN0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3BpbmxvY2tfdAkJbG9jazsKK30gdW51c2VkX3BlZXJzID0geworCS5saXN0CQkJPSBMSVNUX0hFQURfSU5JVCh1bnVzZWRfcGVlcnMubGlzdCksCisJLmxvY2sJCQk9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKHVudXNlZF9wZWVycy5sb2NrKSwKK307CiAKIHN0YXRpYyB2b2lkIHBlZXJfY2hlY2tfZXhwaXJlKHVuc2lnbmVkIGxvbmcgZHVtbXkpOwogc3RhdGljIERFRklORV9USU1FUihwZWVyX3BlcmlvZGljX3RpbWVyLCBwZWVyX2NoZWNrX2V4cGlyZSwgMCwgMCk7CkBAIC0xMTYsNyArMTI5LDcgQEAKIAogCXBlZXJfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImluZXRfcGVlcl9jYWNoZSIsCiAJCQlzaXplb2Yoc3RydWN0IGluZXRfcGVlciksCi0JCQkwLCBTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9QQU5JQywKKwkJCTAsIFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMsCiAJCQlOVUxMKTsKIAogCS8qIEFsbCB0aGUgdGltZXJzLCBzdGFydGVkIGF0IHN5c3RlbSBzdGFydHVwIHRlbmQKQEAgLTEzMSwzOCArMTQ0LDY5IEBACiAvKiBDYWxsZWQgd2l0aCBvciB3aXRob3V0IGxvY2FsIEJIIGJlaW5nIGRpc2FibGVkLiAqLwogc3RhdGljIHZvaWQgdW5saW5rX2Zyb21fdW51c2VkKHN0cnVjdCBpbmV0X3BlZXIgKnApCiB7Ci0Jc3Bpbl9sb2NrX2JoKCZpbmV0X3BlZXJfdW51c2VkX2xvY2spOwotCWxpc3RfZGVsX2luaXQoJnAtPnVudXNlZCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmluZXRfcGVlcl91bnVzZWRfbG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZwLT51bnVzZWQpKSB7CisJCXNwaW5fbG9ja19iaCgmdW51c2VkX3BlZXJzLmxvY2spOworCQlsaXN0X2RlbF9pbml0KCZwLT51bnVzZWQpOworCQlzcGluX3VubG9ja19iaCgmdW51c2VkX3BlZXJzLmxvY2spOworCX0KIH0KIAogLyoKICAqIENhbGxlZCB3aXRoIGxvY2FsIEJIIGRpc2FibGVkIGFuZCB0aGUgcG9vbCBsb2NrIGhlbGQuCi0gKiBfc3RhY2sgaXMga25vd24gdG8gYmUgTlVMTCBvciBub3QgYXQgY29tcGlsZSB0aW1lLAotICogc28gY29tcGlsZXIgd2lsbCBvcHRpbWl6ZSB0aGUgaWYgKF9zdGFjaykgdGVzdHMuCiAgKi8KICNkZWZpbmUgbG9va3VwKF9kYWRkciwgX3N0YWNrKSAJCQkJCVwKICh7CQkJCQkJCQlcCiAJc3RydWN0IGluZXRfcGVlciAqdSwgKip2OwkJCQlcCi0JaWYgKF9zdGFjayAhPSBOVUxMKSB7CQkJCQlcCi0JCXN0YWNrcHRyID0gX3N0YWNrOwkJCQlcCi0JCSpzdGFja3B0cisrID0gJnBlZXJfcm9vdDsJCQlcCi0JfQkJCQkJCQlcCi0JZm9yICh1ID0gcGVlcl9yb290OyB1ICE9IHBlZXJfYXZsX2VtcHR5OyApIHsJCVwKKwkJCQkJCQkJXAorCXN0YWNrcHRyID0gX3N0YWNrOwkJCQkJXAorCSpzdGFja3B0cisrID0gJnBlZXJzLnJvb3Q7CQkJCVwKKwlmb3IgKHUgPSBwZWVycy5yb290OyB1ICE9IHBlZXJfYXZsX2VtcHR5OyApIHsJCVwKIAkJaWYgKF9kYWRkciA9PSB1LT52NGRhZGRyKQkJCVwKIAkJCWJyZWFrOwkJCQkJXAogCQlpZiAoKF9fZm9yY2UgX191MzIpX2RhZGRyIDwgKF9fZm9yY2UgX191MzIpdS0+djRkYWRkcikJXAogCQkJdiA9ICZ1LT5hdmxfbGVmdDsJCQlcCiAJCWVsc2UJCQkJCQlcCiAJCQl2ID0gJnUtPmF2bF9yaWdodDsJCQlcCi0JCWlmIChfc3RhY2sgIT0gTlVMTCkJCQkJXAotCQkJKnN0YWNrcHRyKysgPSB2OwkJCVwKKwkJKnN0YWNrcHRyKysgPSB2OwkJCQlcCiAJCXUgPSAqdjsJCQkJCQlcCiAJfQkJCQkJCQlcCiAJdTsJCQkJCQkJXAogfSkKIAotLyogQ2FsbGVkIHdpdGggbG9jYWwgQkggZGlzYWJsZWQgYW5kIHRoZSBwb29sIHdyaXRlIGxvY2sgaGVsZC4gKi8KKy8qCisgKiBDYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrX2JoKCkKKyAqIEJlY2F1c2Ugd2UgaG9sZCBubyBsb2NrIGFnYWluc3QgYSB3cml0ZXIsIGl0cyBxdWl0ZSBwb3NzaWJsZSB3ZSBmYWxsCisgKiBpbiBhbiBlbmRsZXNzIGxvb3AuCisgKiBCdXQgZXZlcnkgcG9pbnRlciB3ZSBmb2xsb3cgaXMgZ3VhcmFudGVlZCB0byBiZSB2YWxpZCB0aGFua3MgdG8gUkNVLgorICogV2UgZXhpdCBmcm9tIHRoaXMgZnVuY3Rpb24gaWYgbnVtYmVyIG9mIGxpbmtzIGV4Y2VlZHMgUEVFUl9NQVhERVBUSAorICovCitzdGF0aWMgc3RydWN0IGluZXRfcGVlciAqbG9va3VwX3JjdV9iaChfX2JlMzIgZGFkZHIpCit7CisJc3RydWN0IGluZXRfcGVlciAqdSA9IHJjdV9kZXJlZmVyZW5jZV9iaChwZWVycy5yb290KTsKKwlpbnQgY291bnQgPSAwOworCisJd2hpbGUgKHUgIT0gcGVlcl9hdmxfZW1wdHkpIHsKKwkJaWYgKGRhZGRyID09IHUtPnY0ZGFkZHIpIHsKKwkJCS8qIEJlZm9yZSB0YWtpbmcgYSByZWZlcmVuY2UsIGNoZWNrIGlmIHRoaXMgZW50cnkgd2FzCisJCQkgKiBkZWxldGVkLCB1bmxpbmtfZnJvbV9wb29sKCkgc2V0cyByZWZjbnQ9LTEgdG8gbWFrZQorCQkJICogZGlzdGluY3Rpb24gYmV0d2VlbiBhbiB1bnVzZWQgZW50cnkgKHJlZmNudD0wKSBhbmQKKwkJCSAqIGEgZnJlZWQgb25lLgorCQkJICovCisJCQlpZiAodW5saWtlbHkoIWF0b21pY19hZGRfdW5sZXNzKCZ1LT5yZWZjbnQsIDEsIC0xKSkpCisJCQkJdSA9IE5VTEw7CisJCQlyZXR1cm4gdTsKKwkJfQorCQlpZiAoKF9fZm9yY2UgX191MzIpZGFkZHIgPCAoX19mb3JjZSBfX3UzMil1LT52NGRhZGRyKQorCQkJdSA9IHJjdV9kZXJlZmVyZW5jZV9iaCh1LT5hdmxfbGVmdCk7CisJCWVsc2UKKwkJCXUgPSByY3VfZGVyZWZlcmVuY2VfYmgodS0+YXZsX3JpZ2h0KTsKKwkJaWYgKHVubGlrZWx5KCsrY291bnQgPT0gUEVFUl9NQVhERVBUSCkpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIENhbGxlZCB3aXRoIGxvY2FsIEJIIGRpc2FibGVkIGFuZCB0aGUgcG9vbCBsb2NrIGhlbGQuICovCiAjZGVmaW5lIGxvb2t1cF9yaWdodGVtcHR5KHN0YXJ0KQkJCQlcCiAoewkJCQkJCQkJXAogCXN0cnVjdCBpbmV0X3BlZXIgKnUsICoqdjsJCQkJXApAQCAtMTc2LDkgKzIyMCwxMCBAQAogCXU7CQkJCQkJCVwKIH0pCiAKLS8qIENhbGxlZCB3aXRoIGxvY2FsIEJIIGRpc2FibGVkIGFuZCB0aGUgcG9vbCB3cml0ZSBsb2NrIGhlbGQuCisvKiBDYWxsZWQgd2l0aCBsb2NhbCBCSCBkaXNhYmxlZCBhbmQgdGhlIHBvb2wgbG9jayBoZWxkLgogICogVmFyaWFibGUgbmFtZXMgYXJlIHRoZSBwcm9vZiBvZiBvcGVyYXRpb24gY29ycmVjdG5lc3MuCi0gKiBMb29rIGludG8gbW0vbWFwX2F2bC5jIGZvciBtb3JlIGRldGFpbCBkZXNjcmlwdGlvbiBvZiB0aGUgaWRlYXMuICAqLworICogTG9vayBpbnRvIG1tL21hcF9hdmwuYyBmb3IgbW9yZSBkZXRhaWwgZGVzY3JpcHRpb24gb2YgdGhlIGlkZWFzLgorICovCiBzdGF0aWMgdm9pZCBwZWVyX2F2bF9yZWJhbGFuY2Uoc3RydWN0IGluZXRfcGVlciAqKnN0YWNrW10sCiAJCXN0cnVjdCBpbmV0X3BlZXIgKioqc3RhY2tlbmQpCiB7CkBAIC0yNTQsMTUgKzI5OSwyMSBAQAogCX0KIH0KIAotLyogQ2FsbGVkIHdpdGggbG9jYWwgQkggZGlzYWJsZWQgYW5kIHRoZSBwb29sIHdyaXRlIGxvY2sgaGVsZC4gKi8KKy8qIENhbGxlZCB3aXRoIGxvY2FsIEJIIGRpc2FibGVkIGFuZCB0aGUgcG9vbCBsb2NrIGhlbGQuICovCiAjZGVmaW5lIGxpbmtfdG9fcG9vbChuKQkJCQkJCVwKIGRvIHsJCQkJCQkJCVwKIAluLT5hdmxfaGVpZ2h0ID0gMTsJCQkJCVwKIAluLT5hdmxfbGVmdCA9IHBlZXJfYXZsX2VtcHR5OwkJCQlcCiAJbi0+YXZsX3JpZ2h0ID0gcGVlcl9hdmxfZW1wdHk7CQkJCVwKKwlzbXBfd21iKCk7IC8qIGxvY2tsZXNzIHJlYWRlcnMgY2FuIGNhdGNoIHVzIG5vdyAqLwlcCiAJKiotLXN0YWNrcHRyID0gbjsJCQkJCVwKIAlwZWVyX2F2bF9yZWJhbGFuY2Uoc3RhY2ssIHN0YWNrcHRyKTsJCQlcCi19IHdoaWxlKDApCit9IHdoaWxlICgwKQorCitzdGF0aWMgdm9pZCBpbmV0cGVlcl9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJa21lbV9jYWNoZV9mcmVlKHBlZXJfY2FjaGVwLCBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGluZXRfcGVlciwgcmN1KSk7Cit9CiAKIC8qIE1heSBiZSBjYWxsZWQgd2l0aCBsb2NhbCBCSCBlbmFibGVkLiAqLwogc3RhdGljIHZvaWQgdW5saW5rX2Zyb21fcG9vbChzdHJ1Y3QgaW5ldF9wZWVyICpwKQpAQCAtMjcxLDEzICszMjIsMTQgQEAKIAogCWRvX2ZyZWUgPSAwOwogCi0Jd3JpdGVfbG9ja19iaCgmcGVlcl9wb29sX2xvY2spOworCXNwaW5fbG9ja19iaCgmcGVlcnMubG9jayk7CiAJLyogQ2hlY2sgdGhlIHJlZmVyZW5jZSBjb3VudGVyLiAgSXQgd2FzIGFydGlmaWNpYWxseSBpbmNyZW1lbnRlZCBieSAxCi0JICogaW4gY2xlYW51cCgpIGZ1bmN0aW9uIHRvIHByZXZlbnQgc3VkZGVuIGRpc2FwcGVhcmluZy4gIElmIHRoZQotCSAqIHJlZmVyZW5jZSBjb3VudCBpcyBzdGlsbCAxIHRoZW4gdGhlIG5vZGUgaXMgcmVmZXJlbmNlZCBvbmx5IGFzIGBwJwotCSAqIGhlcmUgYW5kIGZyb20gdGhlIHBvb2wuICBTbyB1bmRlciB0aGUgZXhjbHVzaXZlIHBvb2wgbG9jayBpdCdzIHNhZmUKLQkgKiB0byByZW1vdmUgdGhlIG5vZGUgYW5kIGZyZWUgaXQgbGF0ZXIuICovCi0JaWYgKGF0b21pY19yZWFkKCZwLT5yZWZjbnQpID09IDEpIHsKKwkgKiBpbiBjbGVhbnVwKCkgZnVuY3Rpb24gdG8gcHJldmVudCBzdWRkZW4gZGlzYXBwZWFyaW5nLiAgSWYgd2UgY2FuCisJICogYXRvbWljYWxseSAoYmVjYXVzZSBvZiBsb2NrbGVzcyByZWFkZXJzKSB0YWtlIHRoaXMgbGFzdCByZWZlcmVuY2UsCisJICogaXQncyBzYWZlIHRvIHJlbW92ZSB0aGUgbm9kZSBhbmQgZnJlZSBpdCBsYXRlci4KKwkgKiBXZSB1c2UgcmVmY250PS0xIHRvIGFsZXJ0IGxvY2tsZXNzIHJlYWRlcnMgdGhpcyBlbnRyeSBpcyBkZWxldGVkLgorCSAqLworCWlmIChhdG9taWNfY21weGNoZygmcC0+cmVmY250LCAxLCAtMSkgPT0gMSkgewogCQlzdHJ1Y3QgaW5ldF9wZWVyICoqc3RhY2tbUEVFUl9NQVhERVBUSF07CiAJCXN0cnVjdCBpbmV0X3BlZXIgKioqc3RhY2twdHIsICoqKmRlbHA7CiAJCWlmIChsb29rdXAocC0+djRkYWRkciwgc3RhY2spICE9IHApCkBAIC0zMDMsMjAgKzM1NSwyMSBAQAogCQkJZGVscFsxXSA9ICZ0LT5hdmxfbGVmdDsgLyogd2FzICZwLT5hdmxfbGVmdCAqLwogCQl9CiAJCXBlZXJfYXZsX3JlYmFsYW5jZShzdGFjaywgc3RhY2twdHIpOwotCQlwZWVyX3RvdGFsLS07CisJCXBlZXJzLnRvdGFsLS07CiAJCWRvX2ZyZWUgPSAxOwogCX0KLQl3cml0ZV91bmxvY2tfYmgoJnBlZXJfcG9vbF9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcGVlcnMubG9jayk7CiAKIAlpZiAoZG9fZnJlZSkKLQkJa21lbV9jYWNoZV9mcmVlKHBlZXJfY2FjaGVwLCBwKTsKKwkJY2FsbF9yY3VfYmgoJnAtPnJjdSwgaW5ldHBlZXJfZnJlZV9yY3UpOwogCWVsc2UKIAkJLyogVGhlIG5vZGUgaXMgdXNlZCBhZ2Fpbi4gIERlY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnRlcgogCQkgKiBiYWNrLiAgVGhlIGxvb3AgImNsZWFudXAgLT4gdW5saW5rX2Zyb21fdW51c2VkCiAJCSAqICAgLT4gdW5saW5rX2Zyb21fcG9vbCAtPiBwdXRwZWVyIC0+IGxpbmtfdG9fdW51c2VkCiAJCSAqICAgLT4gY2xlYW51cCAoZm9yIHRoZSBzYW1lIG5vZGUpIgogCQkgKiBkb2Vzbid0IHJlYWxseSBleGlzdCBiZWNhdXNlIHRoZSBlbnRyeSB3aWxsIGhhdmUgYQotCQkgKiByZWNlbnQgZGVsZXRpb24gdGltZSBhbmQgd2lsbCBub3QgYmUgY2xlYW5lZCBhZ2FpbiBzb29uLiAqLworCQkgKiByZWNlbnQgZGVsZXRpb24gdGltZSBhbmQgd2lsbCBub3QgYmUgY2xlYW5lZCBhZ2FpbiBzb29uLgorCQkgKi8KIAkJaW5ldF9wdXRwZWVyKHApOwogfQogCkBAIC0zMjYsMTYgKzM3OSwxNiBAQAogCXN0cnVjdCBpbmV0X3BlZXIgKnAgPSBOVUxMOwogCiAJLyogUmVtb3ZlIHRoZSBmaXJzdCBlbnRyeSBmcm9tIHRoZSBsaXN0IG9mIHVudXNlZCBub2Rlcy4gKi8KLQlzcGluX2xvY2tfYmgoJmluZXRfcGVlcl91bnVzZWRfbG9jayk7Ci0JaWYgKCFsaXN0X2VtcHR5KCZ1bnVzZWRfcGVlcnMpKSB7CisJc3Bpbl9sb2NrX2JoKCZ1bnVzZWRfcGVlcnMubG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZ1bnVzZWRfcGVlcnMubGlzdCkpIHsKIAkJX191MzIgZGVsdGE7CiAKLQkJcCA9IGxpc3RfZmlyc3RfZW50cnkoJnVudXNlZF9wZWVycywgc3RydWN0IGluZXRfcGVlciwgdW51c2VkKTsKKwkJcCA9IGxpc3RfZmlyc3RfZW50cnkoJnVudXNlZF9wZWVycy5saXN0LCBzdHJ1Y3QgaW5ldF9wZWVyLCB1bnVzZWQpOwogCQlkZWx0YSA9IChfX3UzMilqaWZmaWVzIC0gcC0+ZHRpbWU7CiAKIAkJaWYgKGRlbHRhIDwgdHRsKSB7CiAJCQkvKiBEbyBub3QgcHJ1bmUgZnJlc2ggZW50cmllcy4gKi8KLQkJCXNwaW5fdW5sb2NrX2JoKCZpbmV0X3BlZXJfdW51c2VkX2xvY2spOworCQkJc3Bpbl91bmxvY2tfYmgoJnVudXNlZF9wZWVycy5sb2NrKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCkBAIC0zNDUsNyArMzk4LDcgQEAKIAkJICogYmVmb3JlIHVubGlua19mcm9tX3Bvb2woKSBjYWxsLiAqLwogCQlhdG9taWNfaW5jKCZwLT5yZWZjbnQpOwogCX0KLQlzcGluX3VubG9ja19iaCgmaW5ldF9wZWVyX3VudXNlZF9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmdW51c2VkX3BlZXJzLmxvY2spOwogCiAJaWYgKHAgPT0gTlVMTCkKIAkJLyogSXQgbWVhbnMgdGhhdCB0aGUgdG90YWwgbnVtYmVyIG9mIFVTRUQgZW50cmllcyBoYXMKQEAgLTM2MCw2MiArNDEzLDU2IEBACiAvKiBDYWxsZWQgd2l0aCBvciB3aXRob3V0IGxvY2FsIEJIIGJlaW5nIGRpc2FibGVkLiAqLwogc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyKF9fYmUzMiBkYWRkciwgaW50IGNyZWF0ZSkKIHsKLQlzdHJ1Y3QgaW5ldF9wZWVyICpwLCAqbjsKKwlzdHJ1Y3QgaW5ldF9wZWVyICpwOwogCXN0cnVjdCBpbmV0X3BlZXIgKipzdGFja1tQRUVSX01BWERFUFRIXSwgKioqc3RhY2twdHI7CiAKLQkvKiBMb29rIHVwIGZvciB0aGUgYWRkcmVzcyBxdWlja2x5LiAqLwotCXJlYWRfbG9ja19iaCgmcGVlcl9wb29sX2xvY2spOwotCXAgPSBsb29rdXAoZGFkZHIsIE5VTEwpOwotCWlmIChwICE9IHBlZXJfYXZsX2VtcHR5KQotCQlhdG9taWNfaW5jKCZwLT5yZWZjbnQpOwotCXJlYWRfdW5sb2NrX2JoKCZwZWVyX3Bvb2xfbG9jayk7CisJLyogTG9vayB1cCBmb3IgdGhlIGFkZHJlc3MgcXVpY2tseSwgbG9ja2xlc3MuCisJICogQmVjYXVzZSBvZiBhIGNvbmN1cnJlbnQgd3JpdGVyLCB3ZSBtaWdodCBub3QgZmluZCBhbiBleGlzdGluZyBlbnRyeS4KKwkgKi8KKwlyY3VfcmVhZF9sb2NrX2JoKCk7CisJcCA9IGxvb2t1cF9yY3VfYmgoZGFkZHIpOworCXJjdV9yZWFkX3VubG9ja19iaCgpOwogCi0JaWYgKHAgIT0gcGVlcl9hdmxfZW1wdHkpIHsKLQkJLyogVGhlIGV4aXN0aW5nIG5vZGUgaGFzIGJlZW4gZm91bmQuICovCi0JCS8qIFJlbW92ZSB0aGUgZW50cnkgZnJvbSB1bnVzZWQgbGlzdCBpZiBpdCB3YXMgdGhlcmUuICovCisJaWYgKHApIHsKKwkJLyogVGhlIGV4aXN0aW5nIG5vZGUgaGFzIGJlZW4gZm91bmQuCisJCSAqIFJlbW92ZSB0aGUgZW50cnkgZnJvbSB1bnVzZWQgbGlzdCBpZiBpdCB3YXMgdGhlcmUuCisJCSAqLwogCQl1bmxpbmtfZnJvbV91bnVzZWQocCk7CiAJCXJldHVybiBwOwogCX0KIAotCWlmICghY3JlYXRlKQotCQlyZXR1cm4gTlVMTDsKLQotCS8qIEFsbG9jYXRlIHRoZSBzcGFjZSBvdXRzaWRlIHRoZSBsb2NrZWQgcmVnaW9uLiAqLwotCW4gPSBrbWVtX2NhY2hlX2FsbG9jKHBlZXJfY2FjaGVwLCBHRlBfQVRPTUlDKTsKLQlpZiAobiA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQluLT52NGRhZGRyID0gZGFkZHI7Ci0JYXRvbWljX3NldCgmbi0+cmVmY250LCAxKTsKLQlhdG9taWNfc2V0KCZuLT5yaWQsIDApOwotCWF0b21pY19zZXQoJm4tPmlwX2lkX2NvdW50LCBzZWN1cmVfaXBfaWQoZGFkZHIpKTsKLQluLT50Y3BfdHNfc3RhbXAgPSAwOwotCi0Jd3JpdGVfbG9ja19iaCgmcGVlcl9wb29sX2xvY2spOwotCS8qIENoZWNrIGlmIGFuIGVudHJ5IGhhcyBzdWRkZW5seSBhcHBlYXJlZC4gKi8KKwkvKiByZXRyeSBhbiBleGFjdCBsb29rdXAsIHRha2luZyB0aGUgbG9jayBiZWZvcmUuCisJICogQXQgbGVhc3QsIG5vZGVzIHNob3VsZCBiZSBob3QgaW4gb3VyIGNhY2hlLgorCSAqLworCXNwaW5fbG9ja19iaCgmcGVlcnMubG9jayk7CiAJcCA9IGxvb2t1cChkYWRkciwgc3RhY2spOwotCWlmIChwICE9IHBlZXJfYXZsX2VtcHR5KQotCQlnb3RvIG91dF9mcmVlOworCWlmIChwICE9IHBlZXJfYXZsX2VtcHR5KSB7CisJCWF0b21pY19pbmMoJnAtPnJlZmNudCk7CisJCXNwaW5fdW5sb2NrX2JoKCZwZWVycy5sb2NrKTsKKwkJLyogUmVtb3ZlIHRoZSBlbnRyeSBmcm9tIHVudXNlZCBsaXN0IGlmIGl0IHdhcyB0aGVyZS4gKi8KKwkJdW5saW5rX2Zyb21fdW51c2VkKHApOworCQlyZXR1cm4gcDsKKwl9CisJcCA9IGNyZWF0ZSA/IGttZW1fY2FjaGVfYWxsb2MocGVlcl9jYWNoZXAsIEdGUF9BVE9NSUMpIDogTlVMTDsKKwlpZiAocCkgeworCQlwLT52NGRhZGRyID0gZGFkZHI7CisJCWF0b21pY19zZXQoJnAtPnJlZmNudCwgMSk7CisJCWF0b21pY19zZXQoJnAtPnJpZCwgMCk7CisJCWF0b21pY19zZXQoJnAtPmlwX2lkX2NvdW50LCBzZWN1cmVfaXBfaWQoZGFkZHIpKTsKKwkJcC0+dGNwX3RzX3N0YW1wID0gMDsKKwkJSU5JVF9MSVNUX0hFQUQoJnAtPnVudXNlZCk7CiAKLQkvKiBMaW5rIHRoZSBub2RlLiAqLwotCWxpbmtfdG9fcG9vbChuKTsKLQlJTklUX0xJU1RfSEVBRCgmbi0+dW51c2VkKTsKLQlwZWVyX3RvdGFsKys7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZwZWVyX3Bvb2xfbG9jayk7CiAKLQlpZiAocGVlcl90b3RhbCA+PSBpbmV0X3BlZXJfdGhyZXNob2xkKQorCQkvKiBMaW5rIHRoZSBub2RlLiAqLworCQlsaW5rX3RvX3Bvb2wocCk7CisJCXBlZXJzLnRvdGFsKys7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZwZWVycy5sb2NrKTsKKworCWlmIChwZWVycy50b3RhbCA+PSBpbmV0X3BlZXJfdGhyZXNob2xkKQogCQkvKiBSZW1vdmUgb25lIGxlc3MtcmVjZW50bHktdXNlZCBlbnRyeS4gKi8KIAkJY2xlYW51cF9vbmNlKDApOwogCi0JcmV0dXJuIG47Ci0KLW91dF9mcmVlOgotCS8qIFRoZSBhcHByb3ByaWF0ZSBub2RlIGlzIGFscmVhZHkgaW4gdGhlIHBvb2wuICovCi0JYXRvbWljX2luYygmcC0+cmVmY250KTsKLQl3cml0ZV91bmxvY2tfYmgoJnBlZXJfcG9vbF9sb2NrKTsKLQkvKiBSZW1vdmUgdGhlIGVudHJ5IGZyb20gdW51c2VkIGxpc3QgaWYgaXQgd2FzIHRoZXJlLiAqLwotCXVubGlua19mcm9tX3VudXNlZChwKTsKLQkvKiBGcmVlIHByZWFsbG9jYXRlZCB0aGUgcHJlYWxsb2NhdGVkIG5vZGUuICovCi0Ja21lbV9jYWNoZV9mcmVlKHBlZXJfY2FjaGVwLCBuKTsKIAlyZXR1cm4gcDsKIH0KIApAQCAtNDI1LDEyICs0NzIsMTIgQEAKIAl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CiAJaW50IHR0bDsKIAotCWlmIChwZWVyX3RvdGFsID49IGluZXRfcGVlcl90aHJlc2hvbGQpCisJaWYgKHBlZXJzLnRvdGFsID49IGluZXRfcGVlcl90aHJlc2hvbGQpCiAJCXR0bCA9IGluZXRfcGVlcl9taW50dGw7CiAJZWxzZQogCQl0dGwgPSBpbmV0X3BlZXJfbWF4dHRsCiAJCQkJLSAoaW5ldF9wZWVyX21heHR0bCAtIGluZXRfcGVlcl9taW50dGwpIC8gSFogKgotCQkJCQlwZWVyX3RvdGFsIC8gaW5ldF9wZWVyX3RocmVzaG9sZCAqIEhaOworCQkJCQlwZWVycy50b3RhbCAvIGluZXRfcGVlcl90aHJlc2hvbGQgKiBIWjsKIAl3aGlsZSAoIWNsZWFudXBfb25jZSh0dGwpKSB7CiAJCWlmIChqaWZmaWVzICE9IG5vdykKIAkJCWJyZWFrOwpAQCAtNDM5LDIyICs0ODYsMjUgQEAKIAkvKiBUcmlnZ2VyIHRoZSB0aW1lciBhZnRlciBpbmV0X3BlZXJfZ2NfbWludGltZSAuLiBpbmV0X3BlZXJfZ2NfbWF4dGltZQogCSAqIGludGVydmFsIGRlcGVuZGluZyBvbiB0aGUgdG90YWwgbnVtYmVyIG9mIGVudHJpZXMgKG1vcmUgZW50cmllcywKIAkgKiBsZXNzIGludGVydmFsKS4gKi8KLQlpZiAocGVlcl90b3RhbCA+PSBpbmV0X3BlZXJfdGhyZXNob2xkKQorCWlmIChwZWVycy50b3RhbCA+PSBpbmV0X3BlZXJfdGhyZXNob2xkKQogCQlwZWVyX3BlcmlvZGljX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgaW5ldF9wZWVyX2djX21pbnRpbWU7CiAJZWxzZQogCQlwZWVyX3BlcmlvZGljX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzCiAJCQkrIGluZXRfcGVlcl9nY19tYXh0aW1lCiAJCQktIChpbmV0X3BlZXJfZ2NfbWF4dGltZSAtIGluZXRfcGVlcl9nY19taW50aW1lKSAvIEhaICoKLQkJCQlwZWVyX3RvdGFsIC8gaW5ldF9wZWVyX3RocmVzaG9sZCAqIEhaOworCQkJCXBlZXJzLnRvdGFsIC8gaW5ldF9wZWVyX3RocmVzaG9sZCAqIEhaOwogCWFkZF90aW1lcigmcGVlcl9wZXJpb2RpY190aW1lcik7CiB9CiAKIHZvaWQgaW5ldF9wdXRwZWVyKHN0cnVjdCBpbmV0X3BlZXIgKnApCiB7Ci0Jc3Bpbl9sb2NrX2JoKCZpbmV0X3BlZXJfdW51c2VkX2xvY2spOwotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZwLT5yZWZjbnQpKSB7Ci0JCWxpc3RfYWRkX3RhaWwoJnAtPnVudXNlZCwgJnVudXNlZF9wZWVycyk7CisJbG9jYWxfYmhfZGlzYWJsZSgpOworCisJaWYgKGF0b21pY19kZWNfYW5kX2xvY2soJnAtPnJlZmNudCwgJnVudXNlZF9wZWVycy5sb2NrKSkgeworCQlsaXN0X2FkZF90YWlsKCZwLT51bnVzZWQsICZ1bnVzZWRfcGVlcnMubGlzdCk7CiAJCXAtPmR0aW1lID0gKF9fdTMyKWppZmZpZXM7CisJCXNwaW5fdW5sb2NrKCZ1bnVzZWRfcGVlcnMubG9jayk7CiAJfQotCXNwaW5fdW5sb2NrX2JoKCZpbmV0X3BlZXJfdW51c2VkX2xvY2spOworCisJbG9jYWxfYmhfZW5hYmxlKCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9mb3J3YXJkLmMgYi9uZXQvaXB2NC9pcF9mb3J3YXJkLmMKaW5kZXggNTZjZGY2OC4uOTk0NjFmMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZm9yd2FyZC5jCisrKyBiL25ldC9pcHY0L2lwX2ZvcndhcmQuYwpAQCAtODcsMTYgKzg3LDE2IEBACiAJaWYgKG9wdC0+aXNfc3RyaWN0cm91dGUgJiYgcnQtPnJ0X2RzdCAhPSBydC0+cnRfZ2F0ZXdheSkKIAkJZ290byBzcl9mYWlsZWQ7CiAKLQlpZiAodW5saWtlbHkoc2tiLT5sZW4gPiBkc3RfbXR1KCZydC0+dS5kc3QpICYmICFza2JfaXNfZ3NvKHNrYikgJiYKKwlpZiAodW5saWtlbHkoc2tiLT5sZW4gPiBkc3RfbXR1KCZydC0+ZHN0KSAmJiAhc2tiX2lzX2dzbyhza2IpICYmCiAJCSAgICAgKGlwX2hkcihza2IpLT5mcmFnX29mZiAmIGh0b25zKElQX0RGKSkpICYmICFza2ItPmxvY2FsX2RmKSB7Ci0JCUlQX0lOQ19TVEFUUyhkZXZfbmV0KHJ0LT51LmRzdC5kZXYpLCBJUFNUQVRTX01JQl9GUkFHRkFJTFMpOworCQlJUF9JTkNfU1RBVFMoZGV2X25ldChydC0+ZHN0LmRldiksIElQU1RBVFNfTUlCX0ZSQUdGQUlMUyk7CiAJCWljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX0ZSQUdfTkVFREVELAotCQkJICBodG9ubChkc3RfbXR1KCZydC0+dS5kc3QpKSk7CisJCQkgIGh0b25sKGRzdF9tdHUoJnJ0LT5kc3QpKSk7CiAJCWdvdG8gZHJvcDsKIAl9CiAKIAkvKiBXZSBhcmUgYWJvdXQgdG8gbWFuZ2xlIHBhY2tldC4gQ29weSBpdCEgKi8KLQlpZiAoc2tiX2Nvdyhza2IsIExMX1JFU0VSVkVEX1NQQUNFKHJ0LT51LmRzdC5kZXYpK3J0LT51LmRzdC5oZWFkZXJfbGVuKSkKKwlpZiAoc2tiX2Nvdyhza2IsIExMX1JFU0VSVkVEX1NQQUNFKHJ0LT5kc3QuZGV2KStydC0+ZHN0LmhlYWRlcl9sZW4pKQogCQlnb3RvIGRyb3A7CiAJaXBoID0gaXBfaGRyKHNrYik7CiAKQEAgLTExMyw3ICsxMTMsNyBAQAogCXNrYi0+cHJpb3JpdHkgPSBydF90b3MycHJpb3JpdHkoaXBoLT50b3MpOwogCiAJcmV0dXJuIE5GX0hPT0soTkZQUk9UT19JUFY0LCBORl9JTkVUX0ZPUldBUkQsIHNrYiwgc2tiLT5kZXYsCi0JCSAgICAgICBydC0+dS5kc3QuZGV2LCBpcF9mb3J3YXJkX2ZpbmlzaCk7CisJCSAgICAgICBydC0+ZHN0LmRldiwgaXBfZm9yd2FyZF9maW5pc2gpOwogCiBzcl9mYWlsZWQ6CiAJLyoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMgYi9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCmluZGV4IDc1MzQ3ZWEuLmI3YzQxNjUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMKKysrIGIvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYwpAQCAtMTI0LDExICsxMjQsOCBAQAogfQogCiAvKiBNZW1vcnkgVHJhY2tpbmcgRnVuY3Rpb25zLiAqLwotc3RhdGljIF9faW5saW5lX18gdm9pZCBmcmFnX2tmcmVlX3NrYihzdHJ1Y3QgbmV0bnNfZnJhZ3MgKm5mLAotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKndvcmspCitzdGF0aWMgdm9pZCBmcmFnX2tmcmVlX3NrYihzdHJ1Y3QgbmV0bnNfZnJhZ3MgKm5mLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWlmICh3b3JrKQotCQkqd29yayAtPSBza2ItPnRydWVzaXplOwogCWF0b21pY19zdWIoc2tiLT50cnVlc2l6ZSwgJm5mLT5tZW0pOwogCWtmcmVlX3NrYihza2IpOwogfQpAQCAtMzA5LDcgKzMwNiw3IEBACiAJZnAgPSBxcC0+cS5mcmFnbWVudHM7CiAJZG8gewogCQlzdHJ1Y3Qgc2tfYnVmZiAqeHAgPSBmcC0+bmV4dDsKLQkJZnJhZ19rZnJlZV9za2IocXAtPnEubmV0LCBmcCwgTlVMTCk7CisJCWZyYWdfa2ZyZWVfc2tiKHFwLT5xLm5ldCwgZnApOwogCQlmcCA9IHhwOwogCX0gd2hpbGUgKGZwKTsKIApAQCAtMzE3LDYgKzMxNCw3IEBACiAJcXAtPnEubGVuID0gMDsKIAlxcC0+cS5tZWF0ID0gMDsKIAlxcC0+cS5mcmFnbWVudHMgPSBOVUxMOworCXFwLT5xLmZyYWdtZW50c190YWlsID0gTlVMTDsKIAlxcC0+aWlmID0gMDsKIAogCXJldHVybiAwOwpAQCAtMzg5LDYgKzM4NywxMSBAQAogCSAqIGluIHRoZSBjaGFpbiBvZiBmcmFnbWVudHMgc28gZmFyLiAgV2UgbXVzdCBrbm93IHdoZXJlIHRvIHB1dAogCSAqIHRoaXMgZnJhZ21lbnQsIHJpZ2h0PwogCSAqLworCXByZXYgPSBxcC0+cS5mcmFnbWVudHNfdGFpbDsKKwlpZiAoIXByZXYgfHwgRlJBR19DQihwcmV2KS0+b2Zmc2V0IDwgb2Zmc2V0KSB7CisJCW5leHQgPSBOVUxMOworCQlnb3RvIGZvdW5kOworCX0KIAlwcmV2ID0gTlVMTDsKIAlmb3IgKG5leHQgPSBxcC0+cS5mcmFnbWVudHM7IG5leHQgIT0gTlVMTDsgbmV4dCA9IG5leHQtPm5leHQpIHsKIAkJaWYgKEZSQUdfQ0IobmV4dCktPm9mZnNldCA+PSBvZmZzZXQpCkBAIC0zOTYsNiArMzk5LDcgQEAKIAkJcHJldiA9IG5leHQ7CiAJfQogCitmb3VuZDoKIAkvKiBXZSBmb3VuZCB3aGVyZSB0byBwdXQgdGhpcyBvbmUuICBDaGVjayBmb3Igb3ZlcmxhcCB3aXRoCiAJICogcHJlY2VkaW5nIGZyYWdtZW50LCBhbmQsIGlmIG5lZWRlZCwgYWxpZ24gdGhpbmdzIHNvIHRoYXQKIAkgKiBhbnkgb3ZlcmxhcHMgYXJlIGVsaW1pbmF0ZWQuCkBAIC00NDYsNyArNDUwLDcgQEAKIAkJCQlxcC0+cS5mcmFnbWVudHMgPSBuZXh0OwogCiAJCQlxcC0+cS5tZWF0IC09IGZyZWVfaXQtPmxlbjsKLQkJCWZyYWdfa2ZyZWVfc2tiKHFwLT5xLm5ldCwgZnJlZV9pdCwgTlVMTCk7CisJCQlmcmFnX2tmcmVlX3NrYihxcC0+cS5uZXQsIGZyZWVfaXQpOwogCQl9CiAJfQogCkBAIC00NTQsNiArNDU4LDggQEAKIAogCS8qIEluc2VydCB0aGlzIGZyYWdtZW50IGluIHRoZSBjaGFpbiBvZiBmcmFnbWVudHMuICovCiAJc2tiLT5uZXh0ID0gbmV4dDsKKwlpZiAoIW5leHQpCisJCXFwLT5xLmZyYWdtZW50c190YWlsID0gc2tiOwogCWlmIChwcmV2KQogCQlwcmV2LT5uZXh0ID0gc2tiOwogCWVsc2UKQEAgLTUwNyw2ICs1MTMsOCBAQAogCQkJZ290byBvdXRfbm9tZW07CiAKIAkJZnAtPm5leHQgPSBoZWFkLT5uZXh0OworCQlpZiAoIWZwLT5uZXh0KQorCQkJcXAtPnEuZnJhZ21lbnRzX3RhaWwgPSBmcDsKIAkJcHJldi0+bmV4dCA9IGZwOwogCiAJCXNrYl9tb3JwaChoZWFkLCBxcC0+cS5mcmFnbWVudHMpOwpAQCAtNTU2LDcgKzU2NCw2IEBACiAKIAlza2Jfc2hpbmZvKGhlYWQpLT5mcmFnX2xpc3QgPSBoZWFkLT5uZXh0OwogCXNrYl9wdXNoKGhlYWQsIGhlYWQtPmRhdGEgLSBza2JfbmV0d29ya19oZWFkZXIoaGVhZCkpOwotCWF0b21pY19zdWIoaGVhZC0+dHJ1ZXNpemUsICZxcC0+cS5uZXQtPm1lbSk7CiAKIAlmb3IgKGZwPWhlYWQtPm5leHQ7IGZwOyBmcCA9IGZwLT5uZXh0KSB7CiAJCWhlYWQtPmRhdGFfbGVuICs9IGZwLT5sZW47CkBAIC01NjYsOCArNTczLDggQEAKIAkJZWxzZSBpZiAoaGVhZC0+aXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKQogCQkJaGVhZC0+Y3N1bSA9IGNzdW1fYWRkKGhlYWQtPmNzdW0sIGZwLT5jc3VtKTsKIAkJaGVhZC0+dHJ1ZXNpemUgKz0gZnAtPnRydWVzaXplOwotCQlhdG9taWNfc3ViKGZwLT50cnVlc2l6ZSwgJnFwLT5xLm5ldC0+bWVtKTsKIAl9CisJYXRvbWljX3N1YihoZWFkLT50cnVlc2l6ZSwgJnFwLT5xLm5ldC0+bWVtKTsKIAogCWhlYWQtPm5leHQgPSBOVUxMOwogCWhlYWQtPmRldiA9IGRldjsKQEAgLTU3OCw2ICs1ODUsNyBAQAogCWlwaC0+dG90X2xlbiA9IGh0b25zKGxlbik7CiAJSVBfSU5DX1NUQVRTX0JIKG5ldCwgSVBTVEFUU19NSUJfUkVBU01PS1MpOwogCXFwLT5xLmZyYWdtZW50cyA9IE5VTEw7CisJcXAtPnEuZnJhZ21lbnRzX3RhaWwgPSBOVUxMOwogCXJldHVybiAwOwogCiBvdXRfbm9tZW06CkBAIC02MjQsNiArNjMyLDcgQEAKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gLUVOT01FTTsKIH0KK0VYUE9SVF9TWU1CT0woaXBfZGVmcmFnKTsKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKIHN0YXRpYyBpbnQgemVybzsKQEAgLTc3Nyw1ICs3ODYsMyBAQAogCWlwNF9mcmFncy5zZWNyZXRfaW50ZXJ2YWwgPSAxMCAqIDYwICogSFo7CiAJaW5ldF9mcmFnc19pbml0KCZpcDRfZnJhZ3MpOwogfQotCi1FWFBPUlRfU1lNQk9MKGlwX2RlZnJhZyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9ncmUuYyBiL25ldC9pcHY0L2lwX2dyZS5jCmluZGV4IDMyNjE4ZTEuLjk0NWIyMGEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2dyZS5jCisrKyBiL25ldC9pcHY0L2lwX2dyZS5jCkBAIC03MzEsNiArNzMxLDggQEAKIAkJdG9zID0gMDsKIAkJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQogCQkJdG9zID0gb2xkX2lwaC0+dG9zOworCQllbHNlIGlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKQorCQkJdG9zID0gaXB2Nl9nZXRfZHNmaWVsZCgoc3RydWN0IGlwdjZoZHIgKilvbGRfaXBoKTsKIAl9CiAKIAl7CkBAIC03NDUsNyArNzQ3LDcgQEAKIAkJCWdvdG8gdHhfZXJyb3I7CiAJCX0KIAl9Ci0JdGRldiA9IHJ0LT51LmRzdC5kZXY7CisJdGRldiA9IHJ0LT5kc3QuZGV2OwogCiAJaWYgKHRkZXYgPT0gZGV2KSB7CiAJCWlwX3J0X3B1dChydCk7CkBAIC03NTUsNyArNzU3LDcgQEAKIAogCWRmID0gdGlwaC0+ZnJhZ19vZmY7CiAJaWYgKGRmKQotCQltdHUgPSBkc3RfbXR1KCZydC0+dS5kc3QpIC0gZGV2LT5oYXJkX2hlYWRlcl9sZW4gLSB0dW5uZWwtPmhsZW47CisJCW10dSA9IGRzdF9tdHUoJnJ0LT5kc3QpIC0gZGV2LT5oYXJkX2hlYWRlcl9sZW4gLSB0dW5uZWwtPmhsZW47CiAJZWxzZQogCQltdHUgPSBza2JfZHN0KHNrYikgPyBkc3RfbXR1KHNrYl9kc3Qoc2tiKSkgOiBkZXYtPm10dTsKIApAQCAtODAzLDcgKzgwNSw3IEBACiAJCQl0dW5uZWwtPmVycl9jb3VudCA9IDA7CiAJfQogCi0JbWF4X2hlYWRyb29tID0gTExfUkVTRVJWRURfU1BBQ0UodGRldikgKyBncmVfaGxlbiArIHJ0LT51LmRzdC5oZWFkZXJfbGVuOworCW1heF9oZWFkcm9vbSA9IExMX1JFU0VSVkVEX1NQQUNFKHRkZXYpICsgZ3JlX2hsZW4gKyBydC0+ZHN0LmhlYWRlcl9sZW47CiAKIAlpZiAoc2tiX2hlYWRyb29tKHNrYikgPCBtYXhfaGVhZHJvb20gfHwgc2tiX3NoYXJlZChza2IpfHwKIAkgICAgKHNrYl9jbG9uZWQoc2tiKSAmJiAhc2tiX2Nsb25lX3dyaXRhYmxlKHNrYiwgMCkpKSB7CkBAIC04MzAsNyArODMyLDcgQEAKIAlJUENCKHNrYiktPmZsYWdzICY9IH4oSVBTS0JfWEZSTV9UVU5ORUxfU0laRSB8IElQU0tCX1hGUk1fVFJBTlNGT1JNRUQgfAogCQkJICAgICAgSVBTS0JfUkVST1VURUQpOwogCXNrYl9kc3RfZHJvcChza2IpOwotCXNrYl9kc3Rfc2V0KHNrYiwgJnJ0LT51LmRzdCk7CisJc2tiX2RzdF9zZXQoc2tiLCAmcnQtPmRzdCk7CiAKIAkvKgogCSAqCVB1c2ggZG93biBhbmQgaW5zdGFsbCB0aGUgSVBJUCBoZWFkZXIuCkBAIC04NTMsNyArODU1LDcgQEAKIAkJCWlwaC0+dHRsID0gKChzdHJ1Y3QgaXB2NmhkciAqKW9sZF9pcGgpLT5ob3BfbGltaXQ7CiAjZW5kaWYKIAkJZWxzZQotCQkJaXBoLT50dGwgPSBkc3RfbWV0cmljKCZydC0+dS5kc3QsIFJUQVhfSE9QTElNSVQpOworCQkJaXBoLT50dGwgPSBkc3RfbWV0cmljKCZydC0+ZHN0LCBSVEFYX0hPUExJTUlUKTsKIAl9CiAKIAkoKF9fYmUxNiAqKShpcGggKyAxKSlbMF0gPSB0dW5uZWwtPnBhcm1zLm9fZmxhZ3M7CkBAIC05MTUsNyArOTE3LDcgQEAKIAkJCQkgICAgLnByb3RvID0gSVBQUk9UT19HUkUgfTsKIAkJc3RydWN0IHJ0YWJsZSAqcnQ7CiAJCWlmICghaXBfcm91dGVfb3V0cHV0X2tleShkZXZfbmV0KGRldiksICZydCwgJmZsKSkgewotCQkJdGRldiA9IHJ0LT51LmRzdC5kZXY7CisJCQl0ZGV2ID0gcnQtPmRzdC5kZXY7CiAJCQlpcF9ydF9wdXQocnQpOwogCQl9CiAKQEAgLTExNzQsNyArMTE3Niw3IEBACiAJCXN0cnVjdCBydGFibGUgKnJ0OwogCQlpZiAoaXBfcm91dGVfb3V0cHV0X2tleShkZXZfbmV0KGRldiksICZydCwgJmZsKSkKIAkJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKLQkJZGV2ID0gcnQtPnUuZHN0LmRldjsKKwkJZGV2ID0gcnQtPmRzdC5kZXY7CiAJCWlwX3J0X3B1dChydCk7CiAJCWlmIChfX2luX2Rldl9nZXRfcnRubChkZXYpID09IE5VTEwpCiAJCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9pbnB1dC5jIGIvbmV0L2lwdjQvaXBfaW5wdXQuYwppbmRleCBkOTMwZGM1Li5kODU5YmNjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9pbnB1dC5jCisrKyBiL25ldC9pcHY0L2lwX2lucHV0LmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KIAogLyoKLSAqCVByb2Nlc3MgUm91dGVyIEF0dGVudGlvbiBJUCBvcHRpb24KKyAqCVByb2Nlc3MgUm91dGVyIEF0dGVudGlvbiBJUCBvcHRpb24gKFJGQyAyMTEzKQogICovCiBpbnQgaXBfY2FsbF9yYV9jaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtMTU1LDggKzE1NSw3IEBACiAJc3RydWN0IHNvY2sgKmxhc3QgPSBOVUxMOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItPmRldjsKIAotCXJlYWRfbG9jaygmaXBfcmFfbG9jayk7Ci0JZm9yIChyYSA9IGlwX3JhX2NoYWluOyByYTsgcmEgPSByYS0+bmV4dCkgeworCWZvciAocmEgPSByY3VfZGVyZWZlcmVuY2UoaXBfcmFfY2hhaW4pOyByYTsgcmEgPSByY3VfZGVyZWZlcmVuY2UocmEtPm5leHQpKSB7CiAJCXN0cnVjdCBzb2NrICpzayA9IHJhLT5zazsKIAogCQkvKiBJZiBzb2NrZXQgaXMgYm91bmQgdG8gYW4gaW50ZXJmYWNlLCBvbmx5IHJlcG9ydApAQCAtMTY3LDEwICsxNjYsOCBAQAogCQkgICAgIHNrLT5za19ib3VuZF9kZXZfaWYgPT0gZGV2LT5pZmluZGV4KSAmJgogCQkgICAgbmV0X2VxKHNvY2tfbmV0KHNrKSwgZGV2X25ldChkZXYpKSkgewogCQkJaWYgKGlwX2hkcihza2IpLT5mcmFnX29mZiAmIGh0b25zKElQX01GIHwgSVBfT0ZGU0VUKSkgewotCQkJCWlmIChpcF9kZWZyYWcoc2tiLCBJUF9ERUZSQUdfQ0FMTF9SQV9DSEFJTikpIHsKLQkJCQkJcmVhZF91bmxvY2soJmlwX3JhX2xvY2spOworCQkJCWlmIChpcF9kZWZyYWcoc2tiLCBJUF9ERUZSQUdfQ0FMTF9SQV9DSEFJTikpCiAJCQkJCXJldHVybiAxOwotCQkJCX0KIAkJCX0KIAkJCWlmIChsYXN0KSB7CiAJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKQEAgLTE4MywxMCArMTgwLDggQEAKIAogCWlmIChsYXN0KSB7CiAJCXJhd19yY3YobGFzdCwgc2tiKTsKLQkJcmVhZF91bmxvY2soJmlwX3JhX2xvY2spOwogCQlyZXR1cm4gMTsKIAl9Ci0JcmVhZF91bmxvY2soJmlwX3JhX2xvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0yOTgsMTggKzI5MywxNiBAQAogCX0KIAogCWlmICh1bmxpa2VseShvcHQtPnNycikpIHsKLQkJc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gaW5fZGV2X2dldChkZXYpOworCQlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7CisKIAkJaWYgKGluX2RldikgewogCQkJaWYgKCFJTl9ERVZfU09VUkNFX1JPVVRFKGluX2RldikpIHsKIAkJCQlpZiAoSU5fREVWX0xPR19NQVJUSUFOUyhpbl9kZXYpICYmCiAJCQkJICAgIG5ldF9yYXRlbGltaXQoKSkKIAkJCQkJcHJpbnRrKEtFUk5fSU5GTyAic291cmNlIHJvdXRlIG9wdGlvbiAlcEk0IC0+ICVwSTRcbiIsCiAJCQkJCSAgICAgICAmaXBoLT5zYWRkciwgJmlwaC0+ZGFkZHIpOwotCQkJCWluX2Rldl9wdXQoaW5fZGV2KTsKIAkJCQlnb3RvIGRyb3A7CiAJCQl9Ci0KLQkJCWluX2Rldl9wdXQoaW5fZGV2KTsKIAkJfQogCiAJCWlmIChpcF9vcHRpb25zX3Jjdl9zcnIoc2tiKSkKQEAgLTM0MCwxMyArMzMzLDE2IEBACiAJCQllbHNlIGlmIChlcnIgPT0gLUVORVRVTlJFQUNIKQogCQkJCUlQX0lOQ19TVEFUU19CSChkZXZfbmV0KHNrYi0+ZGV2KSwKIAkJCQkJCUlQU1RBVFNfTUlCX0lOTk9ST1VURVMpOworCQkJZWxzZSBpZiAoZXJyID09IC1FWERFVikKKwkJCQlORVRfSU5DX1NUQVRTX0JIKGRldl9uZXQoc2tiLT5kZXYpLAorCQkJCQkJIExJTlVYX01JQl9JUFJQRklMVEVSKTsKIAkJCWdvdG8gZHJvcDsKIAkJfQogCX0KIAogI2lmZGVmIENPTkZJR19ORVRfQ0xTX1JPVVRFCiAJaWYgKHVubGlrZWx5KHNrYl9kc3Qoc2tiKS0+dGNsYXNzaWQpKSB7Ci0JCXN0cnVjdCBpcF9ydF9hY2N0ICpzdCA9IHBlcl9jcHVfcHRyKGlwX3J0X2FjY3QsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJCXN0cnVjdCBpcF9ydF9hY2N0ICpzdCA9IHRoaXNfY3B1X3B0cihpcF9ydF9hY2N0KTsKIAkJdTMyIGlkeCA9IHNrYl9kc3Qoc2tiKS0+dGNsYXNzaWQ7CiAJCXN0W2lkeCYweEZGXS5vX3BhY2tldHMrKzsKIAkJc3RbaWR4JjB4RkZdLm9fYnl0ZXMgKz0gc2tiLT5sZW47CkBAIC0zNjAsMTAgKzM1NiwxMCBAQAogCiAJcnQgPSBza2JfcnRhYmxlKHNrYik7CiAJaWYgKHJ0LT5ydF90eXBlID09IFJUTl9NVUxUSUNBU1QpIHsKLQkJSVBfVVBEX1BPX1NUQVRTX0JIKGRldl9uZXQocnQtPnUuZHN0LmRldiksIElQU1RBVFNfTUlCX0lOTUNBU1QsCisJCUlQX1VQRF9QT19TVEFUU19CSChkZXZfbmV0KHJ0LT5kc3QuZGV2KSwgSVBTVEFUU19NSUJfSU5NQ0FTVCwKIAkJCQlza2ItPmxlbik7CiAJfSBlbHNlIGlmIChydC0+cnRfdHlwZSA9PSBSVE5fQlJPQURDQVNUKQotCQlJUF9VUERfUE9fU1RBVFNfQkgoZGV2X25ldChydC0+dS5kc3QuZGV2KSwgSVBTVEFUU19NSUJfSU5CQ0FTVCwKKwkJSVBfVVBEX1BPX1NUQVRTX0JIKGRldl9uZXQocnQtPmRzdC5kZXYpLCBJUFNUQVRTX01JQl9JTkJDQVNULAogCQkJCXNrYi0+bGVuKTsKIAogCXJldHVybiBkc3RfaW5wdXQoc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKaW5kZXggMDQxZDQxZC4uMDRiNjk4OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKQEAgLTg5LDYgKzg5LDcgQEAKIAlpcGgtPmNoZWNrID0gMDsKIAlpcGgtPmNoZWNrID0gaXBfZmFzdF9jc3VtKCh1bnNpZ25lZCBjaGFyICopaXBoLCBpcGgtPmlobCk7CiB9CitFWFBPUlRfU1lNQk9MKGlwX3NlbmRfY2hlY2spOwogCiBpbnQgX19pcF9sb2NhbF9vdXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTE1MSwxNSArMTUyLDE1IEBACiAJaXBoLT52ZXJzaW9uICA9IDQ7CiAJaXBoLT5paGwgICAgICA9IDU7CiAJaXBoLT50b3MgICAgICA9IGluZXQtPnRvczsKLQlpZiAoaXBfZG9udF9mcmFnbWVudChzaywgJnJ0LT51LmRzdCkpCisJaWYgKGlwX2RvbnRfZnJhZ21lbnQoc2ssICZydC0+ZHN0KSkKIAkJaXBoLT5mcmFnX29mZiA9IGh0b25zKElQX0RGKTsKIAllbHNlCiAJCWlwaC0+ZnJhZ19vZmYgPSAwOwotCWlwaC0+dHRsICAgICAgPSBpcF9zZWxlY3RfdHRsKGluZXQsICZydC0+dS5kc3QpOworCWlwaC0+dHRsICAgICAgPSBpcF9zZWxlY3RfdHRsKGluZXQsICZydC0+ZHN0KTsKIAlpcGgtPmRhZGRyICAgID0gcnQtPnJ0X2RzdDsKIAlpcGgtPnNhZGRyICAgID0gcnQtPnJ0X3NyYzsKIAlpcGgtPnByb3RvY29sID0gc2stPnNrX3Byb3RvY29sOwotCWlwX3NlbGVjdF9pZGVudChpcGgsICZydC0+dS5kc3QsIHNrKTsKKwlpcF9zZWxlY3RfaWRlbnQoaXBoLCAmcnQtPmRzdCwgc2spOwogCiAJaWYgKG9wdCAmJiBvcHQtPm9wdGxlbikgewogCQlpcGgtPmlobCArPSBvcHQtPm9wdGxlbj4+MjsKQEAgLTE3Miw3ICsxNzMsNiBAQAogCS8qIFNlbmQgaXQgb3V0LiAqLwogCXJldHVybiBpcF9sb2NhbF9vdXQoc2tiKTsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoaXBfYnVpbGRfYW5kX3NlbmRfcGt0KTsKIAogc3RhdGljIGlubGluZSBpbnQgaXBfZmluaXNoX291dHB1dDIoc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTI0MCw3ICsyNDAsNyBAQAogewogCXN0cnVjdCBzb2NrICpzayA9IHNrYi0+c2s7CiAJc3RydWN0IHJ0YWJsZSAqcnQgPSBza2JfcnRhYmxlKHNrYik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJ0LT51LmRzdC5kZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJ0LT5kc3QuZGV2OwogCiAJLyoKIAkgKglJZiB0aGUgaW5kaWNhdGVkIGludGVyZmFjZSBpcyB1cCBhbmQgcnVubmluZywgc2VuZCB0aGUgcGFja2V0LgpAQCAtMzU5LDkgKzM1OSw5IEBACiAJCQlpZiAoaXBfcm91dGVfb3V0cHV0X2Zsb3coc29ja19uZXQoc2spLCAmcnQsICZmbCwgc2ssIDApKQogCQkJCWdvdG8gbm9fcm91dGU7CiAJCX0KLQkJc2tfc2V0dXBfY2FwcyhzaywgJnJ0LT51LmRzdCk7CisJCXNrX3NldHVwX2NhcHMoc2ssICZydC0+ZHN0KTsKIAl9Ci0Jc2tiX2RzdF9zZXRfbm9yZWYoc2tiLCAmcnQtPnUuZHN0KTsKKwlza2JfZHN0X3NldF9ub3JlZihza2IsICZydC0+ZHN0KTsKIAogcGFja2V0X3JvdXRlZDoKIAlpZiAob3B0ICYmIG9wdC0+aXNfc3RyaWN0cm91dGUgJiYgcnQtPnJ0X2RzdCAhPSBydC0+cnRfZ2F0ZXdheSkKQEAgLTM3MiwxMSArMzcyLDExIEBACiAJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CiAJaXBoID0gaXBfaGRyKHNrYik7CiAJKigoX19iZTE2ICopaXBoKSA9IGh0b25zKCg0IDw8IDEyKSB8ICg1IDw8IDgpIHwgKGluZXQtPnRvcyAmIDB4ZmYpKTsKLQlpZiAoaXBfZG9udF9mcmFnbWVudChzaywgJnJ0LT51LmRzdCkgJiYgIXNrYi0+bG9jYWxfZGYpCisJaWYgKGlwX2RvbnRfZnJhZ21lbnQoc2ssICZydC0+ZHN0KSAmJiAhc2tiLT5sb2NhbF9kZikKIAkJaXBoLT5mcmFnX29mZiA9IGh0b25zKElQX0RGKTsKIAllbHNlCiAJCWlwaC0+ZnJhZ19vZmYgPSAwOwotCWlwaC0+dHRsICAgICAgPSBpcF9zZWxlY3RfdHRsKGluZXQsICZydC0+dS5kc3QpOworCWlwaC0+dHRsICAgICAgPSBpcF9zZWxlY3RfdHRsKGluZXQsICZydC0+ZHN0KTsKIAlpcGgtPnByb3RvY29sID0gc2stPnNrX3Byb3RvY29sOwogCWlwaC0+c2FkZHIgICAgPSBydC0+cnRfc3JjOwogCWlwaC0+ZGFkZHIgICAgPSBydC0+cnRfZHN0OwpAQCAtMzg3LDcgKzM4Nyw3IEBACiAJCWlwX29wdGlvbnNfYnVpbGQoc2tiLCBvcHQsIGluZXQtPmluZXRfZGFkZHIsIHJ0LCAwKTsKIAl9CiAKLQlpcF9zZWxlY3RfaWRlbnRfbW9yZShpcGgsICZydC0+dS5kc3QsIHNrLAorCWlwX3NlbGVjdF9pZGVudF9tb3JlKGlwaCwgJnJ0LT5kc3QsIHNrLAogCQkJICAgICAoc2tiX3NoaW5mbyhza2IpLT5nc29fc2VncyA/OiAxKSAtIDEpOwogCiAJc2tiLT5wcmlvcml0eSA9IHNrLT5za19wcmlvcml0eTsKQEAgLTQwMyw2ICs0MDMsNyBAQAogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiAtRUhPU1RVTlJFQUNIOwogfQorRVhQT1JUX1NZTUJPTChpcF9xdWV1ZV94bWl0KTsKIAogCiBzdGF0aWMgdm9pZCBpcF9jb3B5X21ldGFkYXRhKHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20pCkBAIC00MTEsNyArNDEyLDcgQEAKIAl0by0+cHJpb3JpdHkgPSBmcm9tLT5wcmlvcml0eTsKIAl0by0+cHJvdG9jb2wgPSBmcm9tLT5wcm90b2NvbDsKIAlza2JfZHN0X2Ryb3AodG8pOwotCXNrYl9kc3Rfc2V0KHRvLCBkc3RfY2xvbmUoc2tiX2RzdChmcm9tKSkpOworCXNrYl9kc3RfY29weSh0bywgZnJvbSk7CiAJdG8tPmRldiA9IGZyb20tPmRldjsKIAl0by0+bWFyayA9IGZyb20tPm1hcms7CiAKQEAgLTQ0MiwxNyArNDQzLDE2IEBACiBpbnQgaXBfZnJhZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICgqb3V0cHV0KShzdHJ1Y3Qgc2tfYnVmZiAqKSkKIHsKIAlzdHJ1Y3QgaXBoZHIgKmlwaDsKLQlpbnQgcmF3ID0gMDsKIAlpbnQgcHRyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjI7Ci0JdW5zaWduZWQgaW50IG10dSwgaGxlbiwgbGVmdCwgbGVuLCBsbF9ycywgcGFkOworCXVuc2lnbmVkIGludCBtdHUsIGhsZW4sIGxlZnQsIGxlbiwgbGxfcnM7CiAJaW50IG9mZnNldDsKIAlfX2JlMTYgbm90X2xhc3RfZnJhZzsKIAlzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYl9ydGFibGUoc2tiKTsKIAlpbnQgZXJyID0gMDsKIAotCWRldiA9IHJ0LT51LmRzdC5kZXY7CisJZGV2ID0gcnQtPmRzdC5kZXY7CiAKIAkvKgogCSAqCVBvaW50IGludG8gdGhlIElQIGRhdGFncmFtIGhlYWRlci4KQEAgLTQ3Myw3ICs0NzMsNyBAQAogCSAqLwogCiAJaGxlbiA9IGlwaC0+aWhsICogNDsKLQltdHUgPSBkc3RfbXR1KCZydC0+dS5kc3QpIC0gaGxlbjsJLyogU2l6ZSBvZiBkYXRhIHNwYWNlICovCisJbXR1ID0gZHN0X210dSgmcnQtPmRzdCkgLSBobGVuOwkvKiBTaXplIG9mIGRhdGEgc3BhY2UgKi8KICNpZmRlZiBDT05GSUdfQlJJREdFX05FVEZJTFRFUgogCWlmIChza2ItPm5mX2JyaWRnZSkKIAkJbXR1IC09IG5mX2JyaWRnZV9tdHVfcmVkdWN0aW9uKHNrYik7CkBAIC01ODAsMTQgKzU4MCwxMiBAQAogCiBzbG93X3BhdGg6CiAJbGVmdCA9IHNrYi0+bGVuIC0gaGxlbjsJCS8qIFNwYWNlIHBlciBmcmFtZSAqLwotCXB0ciA9IHJhdyArIGhsZW47CQkvKiBXaGVyZSB0byBzdGFydCBmcm9tICovCisJcHRyID0gaGxlbjsJCS8qIFdoZXJlIHRvIHN0YXJ0IGZyb20gKi8KIAogCS8qIGZvciBicmlkZ2VkIElQIHRyYWZmaWMgZW5jYXBzdWxhdGVkIGluc2lkZSBmLmUuIGEgdmxhbiBoZWFkZXIsCiAJICogd2UgbmVlZCB0byBtYWtlIHJvb20gZm9yIHRoZSBlbmNhcHN1bGF0aW5nIGhlYWRlcgogCSAqLwotCXBhZCA9IG5mX2JyaWRnZV9wYWQoc2tiKTsKLQlsbF9ycyA9IExMX1JFU0VSVkVEX1NQQUNFX0VYVFJBKHJ0LT51LmRzdC5kZXYsIHBhZCk7Ci0JbXR1IC09IHBhZDsKKwlsbF9ycyA9IExMX1JFU0VSVkVEX1NQQUNFX0VYVFJBKHJ0LT5kc3QuZGV2LCBuZl9icmlkZ2VfcGFkKHNrYikpOwogCiAJLyoKIAkgKglGcmFnbWVudCB0aGUgZGF0YWdyYW0uCkBAIC02OTcsNyArNjk1LDYgQEAKIAlJUF9JTkNfU1RBVFMoZGV2X25ldChkZXYpLCBJUFNUQVRTX01JQl9GUkFHRkFJTFMpOwogCXJldHVybiBlcnI7CiB9Ci0KIEVYUE9SVF9TWU1CT0woaXBfZnJhZ21lbnQpOwogCiBpbnQKQEAgLTcxNiw2ICs3MTMsNyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woaXBfZ2VuZXJpY19nZXRmcmFnKTsKIAogc3RhdGljIGlubGluZSBfX3dzdW0KIGNzdW1fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9mZnNldCwgaW50IGNvcHkpCkBAIC04MzMsMTMgKzgzMSwxMyBAQAogCQkgKi8KIAkJKnJ0cCA9IE5VTEw7CiAJCWluZXQtPmNvcmsuZnJhZ3NpemUgPSBtdHUgPSBpbmV0LT5wbXR1ZGlzYyA9PSBJUF9QTVRVRElTQ19QUk9CRSA/Ci0JCQkJCSAgICBydC0+dS5kc3QuZGV2LT5tdHUgOgotCQkJCQkgICAgZHN0X210dShydC0+dS5kc3QucGF0aCk7Ci0JCWluZXQtPmNvcmsuZHN0ID0gJnJ0LT51LmRzdDsKKwkJCQkJICAgIHJ0LT5kc3QuZGV2LT5tdHUgOgorCQkJCQkgICAgZHN0X210dShydC0+ZHN0LnBhdGgpOworCQlpbmV0LT5jb3JrLmRzdCA9ICZydC0+ZHN0OwogCQlpbmV0LT5jb3JrLmxlbmd0aCA9IDA7CiAJCXNrLT5za19zbmRtc2dfcGFnZSA9IE5VTEw7CiAJCXNrLT5za19zbmRtc2dfb2ZmID0gMDsKLQkJaWYgKChleHRoZHJsZW4gPSBydC0+dS5kc3QuaGVhZGVyX2xlbikgIT0gMCkgeworCQlpZiAoKGV4dGhkcmxlbiA9IHJ0LT5kc3QuaGVhZGVyX2xlbikgIT0gMCkgewogCQkJbGVuZ3RoICs9IGV4dGhkcmxlbjsKIAkJCXRyYW5zaGRybGVuICs9IGV4dGhkcmxlbjsKIAkJfQpAQCAtODUyLDcgKzg1MCw3IEBACiAJCWV4dGhkcmxlbiA9IDA7CiAJCW10dSA9IGluZXQtPmNvcmsuZnJhZ3NpemU7CiAJfQotCWhoX2xlbiA9IExMX1JFU0VSVkVEX1NQQUNFKHJ0LT51LmRzdC5kZXYpOworCWhoX2xlbiA9IExMX1JFU0VSVkVEX1NQQUNFKHJ0LT5kc3QuZGV2KTsKIAogCWZyYWdoZWFkZXJsZW4gPSBzaXplb2Yoc3RydWN0IGlwaGRyKSArIChvcHQgPyBvcHQtPm9wdGxlbiA6IDApOwogCW1heGZyYWdsZW4gPSAoKG10dSAtIGZyYWdoZWFkZXJsZW4pICYgfjcpICsgZnJhZ2hlYWRlcmxlbjsKQEAgLTg2OSw3ICs4NjcsNyBAQAogCSAqLwogCWlmICh0cmFuc2hkcmxlbiAmJgogCSAgICBsZW5ndGggKyBmcmFnaGVhZGVybGVuIDw9IG10dSAmJgotCSAgICBydC0+dS5kc3QuZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfVjRfQ1NVTSAmJgorCSAgICBydC0+ZHN0LmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1Y0X0NTVU0gJiYKIAkgICAgIWV4dGhkcmxlbikKIAkJY3N1bW1vZGUgPSBDSEVDS1NVTV9QQVJUSUFMOwogCkBAIC04NzgsNyArODc2LDcgQEAKIAlpbmV0LT5jb3JrLmxlbmd0aCArPSBsZW5ndGg7CiAJaWYgKCgobGVuZ3RoID4gbXR1KSB8fCAoc2tiICYmIHNrYl9pc19nc28oc2tiKSkpICYmCiAJICAgIChzay0+c2tfcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApICYmCi0JICAgIChydC0+dS5kc3QuZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfVUZPKSkgeworCSAgICAocnQtPmRzdC5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9VRk8pKSB7CiAJCWVyciA9IGlwX3Vmb19hcHBlbmRfZGF0YShzaywgZ2V0ZnJhZywgZnJvbSwgbGVuZ3RoLCBoaF9sZW4sCiAJCQkJCSBmcmFnaGVhZGVybGVuLCB0cmFuc2hkcmxlbiwgbXR1LAogCQkJCQkgZmxhZ3MpOwpAQCAtOTI2LDcgKzkyNCw3IEBACiAJCQlmcmFnbGVuID0gZGF0YWxlbiArIGZyYWdoZWFkZXJsZW47CiAKIAkJCWlmICgoZmxhZ3MgJiBNU0dfTU9SRSkgJiYKLQkJCSAgICAhKHJ0LT51LmRzdC5kZXYtPmZlYXR1cmVzJk5FVElGX0ZfU0cpKQorCQkJICAgICEocnQtPmRzdC5kZXYtPmZlYXR1cmVzJk5FVElGX0ZfU0cpKQogCQkJCWFsbG9jbGVuID0gbXR1OwogCQkJZWxzZQogCQkJCWFsbG9jbGVuID0gZGF0YWxlbiArIGZyYWdoZWFkZXJsZW47CkBAIC05MzcsNyArOTM1LDcgQEAKIAkJCSAqIHRoZSBsYXN0LgogCQkJICovCiAJCQlpZiAoZGF0YWxlbiA9PSBsZW5ndGggKyBmcmFnZ2FwKQotCQkJCWFsbG9jbGVuICs9IHJ0LT51LmRzdC50cmFpbGVyX2xlbjsKKwkJCQlhbGxvY2xlbiArPSBydC0+ZHN0LnRyYWlsZXJfbGVuOwogCiAJCQlpZiAodHJhbnNoZHJsZW4pIHsKIAkJCQlza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLApAQCAtMTAxMCw3ICsxMDA4LDcgQEAKIAkJaWYgKGNvcHkgPiBsZW5ndGgpCiAJCQljb3B5ID0gbGVuZ3RoOwogCi0JCWlmICghKHJ0LT51LmRzdC5kZXYtPmZlYXR1cmVzJk5FVElGX0ZfU0cpKSB7CisJCWlmICghKHJ0LT5kc3QuZGV2LT5mZWF0dXJlcyZORVRJRl9GX1NHKSkgewogCQkJdW5zaWduZWQgaW50IG9mZjsKIAogCQkJb2ZmID0gc2tiLT5sZW47CkBAIC0xMTA1LDEwICsxMTAzLDEwIEBACiAJaWYgKGluZXQtPmNvcmsuZmxhZ3MgJiBJUENPUktfT1BUKQogCQlvcHQgPSBpbmV0LT5jb3JrLm9wdDsKIAotCWlmICghKHJ0LT51LmRzdC5kZXYtPmZlYXR1cmVzJk5FVElGX0ZfU0cpKQorCWlmICghKHJ0LT5kc3QuZGV2LT5mZWF0dXJlcyZORVRJRl9GX1NHKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JaGhfbGVuID0gTExfUkVTRVJWRURfU1BBQ0UocnQtPnUuZHN0LmRldik7CisJaGhfbGVuID0gTExfUkVTRVJWRURfU1BBQ0UocnQtPmRzdC5kZXYpOwogCW10dSA9IGluZXQtPmNvcmsuZnJhZ3NpemU7CiAKIAlmcmFnaGVhZGVybGVuID0gc2l6ZW9mKHN0cnVjdCBpcGhkcikgKyAob3B0ID8gb3B0LT5vcHRsZW4gOiAwKTsKQEAgLTExMjUsNyArMTEyMyw3IEBACiAJaW5ldC0+Y29yay5sZW5ndGggKz0gc2l6ZTsKIAlpZiAoKHNpemUgKyBza2ItPmxlbiA+IG10dSkgJiYKIAkgICAgKHNrLT5za19wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgJiYKLQkgICAgKHJ0LT51LmRzdC5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9VRk8pKSB7CisJICAgIChydC0+ZHN0LmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1VGTykpIHsKIAkJc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSA9IG10dSAtIGZyYWdoZWFkZXJsZW47CiAJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgPSBTS0JfR1NPX1VEUDsKIAl9CkBAIC0xMjc3LDggKzEyNzUsOCBAQAogCSAqIElmIGxvY2FsX2RmIGlzIHNldCB0b28sIHdlIHN0aWxsIGFsbG93IHRvIGZyYWdtZW50IHRoaXMgZnJhbWUKIAkgKiBsb2NhbGx5LiAqLwogCWlmIChpbmV0LT5wbXR1ZGlzYyA+PSBJUF9QTVRVRElTQ19ETyB8fAotCSAgICAoc2tiLT5sZW4gPD0gZHN0X210dSgmcnQtPnUuZHN0KSAmJgotCSAgICAgaXBfZG9udF9mcmFnbWVudChzaywgJnJ0LT51LmRzdCkpKQorCSAgICAoc2tiLT5sZW4gPD0gZHN0X210dSgmcnQtPmRzdCkgJiYKKwkgICAgIGlwX2RvbnRfZnJhZ21lbnQoc2ssICZydC0+ZHN0KSkpCiAJCWRmID0gaHRvbnMoSVBfREYpOwogCiAJaWYgKGluZXQtPmNvcmsuZmxhZ3MgJiBJUENPUktfT1BUKQpAQCAtMTI4Nyw3ICsxMjg1LDcgQEAKIAlpZiAocnQtPnJ0X3R5cGUgPT0gUlROX01VTFRJQ0FTVCkKIAkJdHRsID0gaW5ldC0+bWNfdHRsOwogCWVsc2UKLQkJdHRsID0gaXBfc2VsZWN0X3R0bChpbmV0LCAmcnQtPnUuZHN0KTsKKwkJdHRsID0gaXBfc2VsZWN0X3R0bChpbmV0LCAmcnQtPmRzdCk7CiAKIAlpcGggPSAoc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOwogCWlwaC0+dmVyc2lvbiA9IDQ7CkBAIC0xMjk4LDcgKzEyOTYsNyBAQAogCX0KIAlpcGgtPnRvcyA9IGluZXQtPnRvczsKIAlpcGgtPmZyYWdfb2ZmID0gZGY7Ci0JaXBfc2VsZWN0X2lkZW50KGlwaCwgJnJ0LT51LmRzdCwgc2spOworCWlwX3NlbGVjdF9pZGVudChpcGgsICZydC0+ZHN0LCBzayk7CiAJaXBoLT50dGwgPSB0dGw7CiAJaXBoLT5wcm90b2NvbCA9IHNrLT5za19wcm90b2NvbDsKIAlpcGgtPnNhZGRyID0gcnQtPnJ0X3NyYzsKQEAgLTEzMTEsNyArMTMwOSw3IEBACiAJICogb24gZHN0IHJlZmNvdW50CiAJICovCiAJaW5ldC0+Y29yay5kc3QgPSBOVUxMOwotCXNrYl9kc3Rfc2V0KHNrYiwgJnJ0LT51LmRzdCk7CisJc2tiX2RzdF9zZXQoc2tiLCAmcnQtPmRzdCk7CiAKIAlpZiAoaXBoLT5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApCiAJCWljbXBfb3V0X2NvdW50KG5ldCwgKChzdHJ1Y3QgaWNtcGhkciAqKQpAQCAtMTQ0OCw3ICsxNDQ2LDMgQEAKIAlpZ21wX21jX3Byb2NfaW5pdCgpOwogI2VuZGlmCiB9Ci0KLUVYUE9SVF9TWU1CT0woaXBfZ2VuZXJpY19nZXRmcmFnKTsKLUVYUE9SVF9TWU1CT0woaXBfcXVldWVfeG1pdCk7Ci1FWFBPUlRfU1lNQk9MKGlwX3NlbmRfY2hlY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKaW5kZXggY2UyMzE3OC4uNmM0MGE4YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYworKysgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCkBAIC0yMzksNyArMjM5LDE2IEBACiAgICBzZW50IHRvIG11bHRpY2FzdCBncm91cCB0byByZWFjaCBkZXN0aW5hdGlvbiBkZXNpZ25hdGVkIHJvdXRlci4KICAqLwogc3RydWN0IGlwX3JhX2NoYWluICppcF9yYV9jaGFpbjsKLURFRklORV9SV0xPQ0soaXBfcmFfbG9jayk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlwX3JhX2xvY2spOworCisKK3N0YXRpYyB2b2lkIGlwX3JhX2Rlc3Ryb3lfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgaXBfcmFfY2hhaW4gKnJhID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpcF9yYV9jaGFpbiwgcmN1KTsKKworCXNvY2tfcHV0KHJhLT5zYXZlZF9zayk7CisJa2ZyZWUocmEpOworfQogCiBpbnQgaXBfcmFfY29udHJvbChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGNoYXIgb24sCiAJCSAgdm9pZCAoKmRlc3RydWN0b3IpKHN0cnVjdCBzb2NrICopKQpAQCAtMjUxLDM1ICsyNjAsNDIgQEAKIAogCW5ld19yYSA9IG9uID8ga21hbGxvYyhzaXplb2YoKm5ld19yYSksIEdGUF9LRVJORUwpIDogTlVMTDsKIAotCXdyaXRlX2xvY2tfYmgoJmlwX3JhX2xvY2spOworCXNwaW5fbG9ja19iaCgmaXBfcmFfbG9jayk7CiAJZm9yIChyYXAgPSAmaXBfcmFfY2hhaW47IChyYSA9ICpyYXApICE9IE5VTEw7IHJhcCA9ICZyYS0+bmV4dCkgewogCQlpZiAocmEtPnNrID09IHNrKSB7CiAJCQlpZiAob24pIHsKLQkJCQl3cml0ZV91bmxvY2tfYmgoJmlwX3JhX2xvY2spOworCQkJCXNwaW5fdW5sb2NrX2JoKCZpcF9yYV9sb2NrKTsKIAkJCQlrZnJlZShuZXdfcmEpOwogCQkJCXJldHVybiAtRUFERFJJTlVTRTsKIAkJCX0KLQkJCSpyYXAgPSByYS0+bmV4dDsKLQkJCXdyaXRlX3VubG9ja19iaCgmaXBfcmFfbG9jayk7CisJCQkvKiBkb250IGxldCBpcF9jYWxsX3JhX2NoYWluKCkgdXNlIHNrIGFnYWluICovCisJCQlyYS0+c2sgPSBOVUxMOworCQkJcmN1X2Fzc2lnbl9wb2ludGVyKCpyYXAsIHJhLT5uZXh0KTsKKwkJCXNwaW5fdW5sb2NrX2JoKCZpcF9yYV9sb2NrKTsKIAogCQkJaWYgKHJhLT5kZXN0cnVjdG9yKQogCQkJCXJhLT5kZXN0cnVjdG9yKHNrKTsKLQkJCXNvY2tfcHV0KHNrKTsKLQkJCWtmcmVlKHJhKTsKKwkJCS8qCisJCQkgKiBEZWxheSBzb2NrX3B1dChzaykgYW5kIGtmcmVlKHJhKSBhZnRlciBvbmUgcmN1IGdyYWNlCisJCQkgKiBwZXJpb2QuIFRoaXMgZ3VhcmFudGVlIGlwX2NhbGxfcmFfY2hhaW4oKSBkb250IG5lZWQKKwkJCSAqIHRvIG1lc3Mgd2l0aCBzb2NrZXQgcmVmY291bnRzLgorCQkJICovCisJCQlyYS0+c2F2ZWRfc2sgPSBzazsKKwkJCWNhbGxfcmN1KCZyYS0+cmN1LCBpcF9yYV9kZXN0cm95X3JjdSk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAlpZiAobmV3X3JhID09IE5VTEwpIHsKLQkJd3JpdGVfdW5sb2NrX2JoKCZpcF9yYV9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmlwX3JhX2xvY2spOwogCQlyZXR1cm4gLUVOT0JVRlM7CiAJfQogCW5ld19yYS0+c2sgPSBzazsKIAluZXdfcmEtPmRlc3RydWN0b3IgPSBkZXN0cnVjdG9yOwogCiAJbmV3X3JhLT5uZXh0ID0gcmE7Ci0JKnJhcCA9IG5ld19yYTsKKwlyY3VfYXNzaWduX3BvaW50ZXIoKnJhcCwgbmV3X3JhKTsKIAlzb2NrX2hvbGQoc2spOwotCXdyaXRlX3VubG9ja19iaCgmaXBfcmFfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJmlwX3JhX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NDksNyArNDY1LDcgQEAKIAkJCSAgICAgKDE8PElQX01UVV9ESVNDT1ZFUikgfCAoMTw8SVBfUkVDVkVSUikgfAogCQkJICAgICAoMTw8SVBfUk9VVEVSX0FMRVJUKSB8ICgxPDxJUF9GUkVFQklORCkgfAogCQkJICAgICAoMTw8SVBfUEFTU1NFQykgfCAoMTw8SVBfVFJBTlNQQVJFTlQpIHwKLQkJCSAgICAgKDE8PElQX01JTlRUTCkpKSB8fAorCQkJICAgICAoMTw8SVBfTUlOVFRMKSB8ICgxPDxJUF9OT0RFRlJBRykpKSB8fAogCSAgICBvcHRuYW1lID09IElQX01VTFRJQ0FTVF9UVEwgfHwKIAkgICAgb3B0bmFtZSA9PSBJUF9NVUxUSUNBU1RfQUxMIHx8CiAJICAgIG9wdG5hbWUgPT0gSVBfTVVMVElDQVNUX0xPT1AgfHwKQEAgLTU3Miw2ICs1ODgsMTMgQEAKIAkJfQogCQlpbmV0LT5oZHJpbmNsID0gdmFsID8gMSA6IDA7CiAJCWJyZWFrOworCWNhc2UgSVBfTk9ERUZSQUc6CisJCWlmIChzay0+c2tfdHlwZSAhPSBTT0NLX1JBVykgeworCQkJZXJyID0gLUVOT1BST1RPT1BUOworCQkJYnJlYWs7CisJCX0KKwkJaW5ldC0+bm9kZWZyYWcgPSB2YWwgPyAxIDogMDsKKwkJYnJlYWs7CiAJY2FzZSBJUF9NVFVfRElTQ09WRVI6CiAJCWlmICh2YWwgPCBJUF9QTVRVRElTQ19ET05UIHx8IHZhbCA+IElQX1BNVFVESVNDX1BST0JFKQogCQkJZ290byBlX2ludmFsOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBjb25maWcuYyBiL25ldC9pcHY0L2lwY29uZmlnLmMKaW5kZXggYjlkODRlOC4uM2E2ZTFlYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBjb25maWcuYworKysgYi9uZXQvaXB2NC9pcGNvbmZpZy5jCkBAIC02NjUsNiArNjY1LDEzIEBACiAJCW1lbWNweShlLCBpY19yZXFfcGFyYW1zLCBzaXplb2YoaWNfcmVxX3BhcmFtcykpOwogCQllICs9IHNpemVvZihpY19yZXFfcGFyYW1zKTsKIAorCQlpZiAoaWNfaG9zdF9uYW1lX3NldCkgeworCQkJKmUrKyA9IDEyOwkvKiBob3N0LW5hbWUgKi8KKwkJCWxlbiA9IHN0cmxlbih1dHNuYW1lKCktPm5vZGVuYW1lKTsKKwkJCSplKysgPSBsZW47CisJCQltZW1jcHkoZSwgdXRzbmFtZSgpLT5ub2RlbmFtZSwgbGVuKTsKKwkJCWUgKz0gbGVuOworCQl9CiAJCWlmICgqdmVuZG9yX2NsYXNzX2lkZW50aWZpZXIpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIkRIQ1A6IHNlbmRpbmcgY2xhc3MgaWRlbnRpZmllciBcIiVzXCJcbiIsCiAJCQkgICAgICAgdmVuZG9yX2NsYXNzX2lkZW50aWZpZXIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBpcC5jIGIvbmV0L2lwdjQvaXBpcC5jCmluZGV4IDdmZDYzNjcuLmVjMDM2NzMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwaXAuYworKysgYi9uZXQvaXB2NC9pcGlwLmMKQEAgLTQzNSw3ICs0MzUsNyBAQAogCQkJZ290byB0eF9lcnJvcl9pY21wOwogCQl9CiAJfQotCXRkZXYgPSBydC0+dS5kc3QuZGV2OworCXRkZXYgPSBydC0+ZHN0LmRldjsKIAogCWlmICh0ZGV2ID09IGRldikgewogCQlpcF9ydF9wdXQocnQpOwpAQCAtNDQ2LDcgKzQ0Niw3IEBACiAJZGYgfD0gb2xkX2lwaC0+ZnJhZ19vZmYgJiBodG9ucyhJUF9ERik7CiAKIAlpZiAoZGYpIHsKLQkJbXR1ID0gZHN0X210dSgmcnQtPnUuZHN0KSAtIHNpemVvZihzdHJ1Y3QgaXBoZHIpOworCQltdHUgPSBkc3RfbXR1KCZydC0+ZHN0KSAtIHNpemVvZihzdHJ1Y3QgaXBoZHIpOwogCiAJCWlmIChtdHUgPCA2OCkgewogCQkJc3RhdHMtPmNvbGxpc2lvbnMrKzsKQEAgLTUwMyw3ICs1MDMsNyBAQAogCUlQQ0Ioc2tiKS0+ZmxhZ3MgJj0gfihJUFNLQl9YRlJNX1RVTk5FTF9TSVpFIHwgSVBTS0JfWEZSTV9UUkFOU0ZPUk1FRCB8CiAJCQkgICAgICBJUFNLQl9SRVJPVVRFRCk7CiAJc2tiX2RzdF9kcm9wKHNrYik7Ci0Jc2tiX2RzdF9zZXQoc2tiLCAmcnQtPnUuZHN0KTsKKwlza2JfZHN0X3NldChza2IsICZydC0+ZHN0KTsKIAogCS8qCiAJICoJUHVzaCBkb3duIGFuZCBpbnN0YWxsIHRoZSBJUElQIGhlYWRlci4KQEAgLTU1Miw3ICs1NTIsNyBAQAogCQkJCSAgICAucHJvdG8gPSBJUFBST1RPX0lQSVAgfTsKIAkJc3RydWN0IHJ0YWJsZSAqcnQ7CiAJCWlmICghaXBfcm91dGVfb3V0cHV0X2tleShkZXZfbmV0KGRldiksICZydCwgJmZsKSkgewotCQkJdGRldiA9IHJ0LT51LmRzdC5kZXY7CisJCQl0ZGV2ID0gcnQtPmRzdC5kZXY7CiAJCQlpcF9ydF9wdXQocnQpOwogCQl9CiAJCWRldi0+ZmxhZ3MgfD0gSUZGX1BPSU5UT1BPSU5UOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jCmluZGV4IDc1N2YyNWViLi4xNzlmY2FiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcG1yLmMKKysrIGIvbmV0L2lwdjQvaXBtci5jCkBAIC00NDIsOCArNDQyLDEwIEBACiAJaW50IGVycjsKIAogCWVyciA9IGlwbXJfZmliX2xvb2t1cChuZXQsICZmbCwgJm1ydCk7Ci0JaWYgKGVyciA8IDApCisJaWYgKGVyciA8IDApIHsKKwkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiBlcnI7CisJfQogCiAJcmVhZF9sb2NrKCZtcnRfbG9jayk7CiAJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKQEAgLTE1NTMsOSArMTU1NSw5IEBACiAJCQlnb3RvIG91dF9mcmVlOwogCX0KIAotCWRldiA9IHJ0LT51LmRzdC5kZXY7CisJZGV2ID0gcnQtPmRzdC5kZXY7CiAKLQlpZiAoc2tiLT5sZW4rZW5jYXAgPiBkc3RfbXR1KCZydC0+dS5kc3QpICYmIChudG9ocyhpcGgtPmZyYWdfb2ZmKSAmIElQX0RGKSkgeworCWlmIChza2ItPmxlbitlbmNhcCA+IGRzdF9tdHUoJnJ0LT5kc3QpICYmIChudG9ocyhpcGgtPmZyYWdfb2ZmKSAmIElQX0RGKSkgewogCQkvKiBEbyBub3QgZnJhZ21lbnQgbXVsdGljYXN0cy4gQWxhcywgSVB2NCBkb2VzIG5vdAogCQkgICBhbGxvdyB0byBzZW5kIElDTVAsIHNvIHRoYXQgcGFja2V0cyB3aWxsIGRpc2FwcGVhcgogCQkgICB0byBibGFja2hvbGUuCkBAIC0xNTY2LDcgKzE1NjgsNyBAQAogCQlnb3RvIG91dF9mcmVlOwogCX0KIAotCWVuY2FwICs9IExMX1JFU0VSVkVEX1NQQUNFKGRldikgKyBydC0+dS5kc3QuaGVhZGVyX2xlbjsKKwllbmNhcCArPSBMTF9SRVNFUlZFRF9TUEFDRShkZXYpICsgcnQtPmRzdC5oZWFkZXJfbGVuOwogCiAJaWYgKHNrYl9jb3coc2tiLCBlbmNhcCkpIHsKIAkJaXBfcnRfcHV0KHJ0KTsKQEAgLTE1NzcsNyArMTU3OSw3IEBACiAJdmlmLT5ieXRlc19vdXQgKz0gc2tiLT5sZW47CiAKIAlza2JfZHN0X2Ryb3Aoc2tiKTsKLQlza2JfZHN0X3NldChza2IsICZydC0+dS5kc3QpOworCXNrYl9kc3Rfc2V0KHNrYiwgJnJ0LT5kc3QpOwogCWlwX2RlY3JlYXNlX3R0bChpcF9oZHIoc2tiKSk7CiAKIAkvKiBGSVhNRTogZm9yd2FyZCBhbmQgb3V0cHV0IGZpcmV3YWxscyB1c2VkIHRvIGJlIGNhbGxlZCBoZXJlLgpAQCAtMTcyOCw4ICsxNzMwLDEwIEBACiAJCWdvdG8gZG9udF9mb3J3YXJkOwogCiAJZXJyID0gaXBtcl9maWJfbG9va3VwKG5ldCwgJnNrYl9ydGFibGUoc2tiKS0+ZmwsICZtcnQpOwotCWlmIChlcnIgPCAwKQorCWlmIChlcnIgPCAwKSB7CisJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gZXJyOworCX0KIAogCWlmICghbG9jYWwpIHsKIAkJICAgIGlmIChJUENCKHNrYiktPm9wdC5yb3V0ZXJfYWxlcnQpIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyLmMKaW5kZXggMDdkZTg1NS4uZDg4YTQ2YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyLmMKQEAgLTQzLDcgKzQzLDcgQEAKIAogCQkvKiBEcm9wIG9sZCByb3V0ZS4gKi8KIAkJc2tiX2RzdF9kcm9wKHNrYik7Ci0JCXNrYl9kc3Rfc2V0KHNrYiwgJnJ0LT51LmRzdCk7CisJCXNrYl9kc3Rfc2V0KHNrYiwgJnJ0LT5kc3QpOwogCX0gZWxzZSB7CiAJCS8qIG5vbi1sb2NhbCBzcmMsIGZpbmQgdmFsaWQgaWlmIHRvIHNhdGlzZnkKIAkJICogcnAtZmlsdGVyIHdoZW4gY2FsbGluZyBpcF9yb3V0ZV9pbnB1dC4gKi8KQEAgLTUzLDExICs1MywxMSBAQAogCiAJCW9yZWZkc3QgPSBza2ItPl9za2JfcmVmZHN0OwogCQlpZiAoaXBfcm91dGVfaW5wdXQoc2tiLCBpcGgtPmRhZGRyLCBpcGgtPnNhZGRyLAotCQkJCSAgIFJUX1RPUyhpcGgtPnRvcyksIHJ0LT51LmRzdC5kZXYpICE9IDApIHsKLQkJCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOworCQkJCSAgIFJUX1RPUyhpcGgtPnRvcyksIHJ0LT5kc3QuZGV2KSAhPSAwKSB7CisJCQlkc3RfcmVsZWFzZSgmcnQtPmRzdCk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KLQkJZHN0X3JlbGVhc2UoJnJ0LT51LmRzdCk7CisJCWRzdF9yZWxlYXNlKCZydC0+ZHN0KTsKIAkJcmVmZHN0X2Ryb3Aob3JlZmRzdCk7CiAJfQogCkBAIC0yMTIsOSArMjEyLDcgQEAKIAkJc2tiLT5jc3VtID0gY3N1bV90Y3B1ZHBfbm9mb2xkKGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsIHByb3RvY29sLAogCQkJCQkgICAgICAgc2tiLT5sZW4gLSBkYXRhb2ZmLCAwKTsKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCQljc3VtID0gX19za2JfY2hlY2tzdW1fY29tcGxldGVfaGVhZChza2IsIGRhdGFvZmYgKyBsZW4pOwotCQlpZiAoIWNzdW0pCi0JCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQlyZXR1cm4gX19za2JfY2hlY2tzdW1fY29tcGxldGVfaGVhZChza2IsIGRhdGFvZmYgKyBsZW4pOwogCX0KIAlyZXR1cm4gY3N1bTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCmluZGV4IDFhYzAxYjEuLjZiY2NiYTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwpAQCAtMjgzLDE2ICsyODMsMTMgQEAKIAlhcnAgPSBhcnBfaGRyKHNrYik7CiAJZG8gewogCQljb25zdCBzdHJ1Y3QgYXJwdF9lbnRyeV90YXJnZXQgKnQ7Ci0JCWludCBoZHJfbGVuOwogCiAJCWlmICghYXJwX3BhY2tldF9tYXRjaChhcnAsIHNrYi0+ZGV2LCBpbmRldiwgb3V0ZGV2LCAmZS0+YXJwKSkgewogCQkJZSA9IGFycHRfbmV4dF9lbnRyeShlKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaGRyX2xlbiA9IHNpemVvZigqYXJwKSArICgyICogc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkgKwotCQkJKDIgKiBza2ItPmRldi0+YWRkcl9sZW4pOwotCQlBRERfQ09VTlRFUihlLT5jb3VudGVycywgaGRyX2xlbiwgMSk7CisJCUFERF9DT1VOVEVSKGUtPmNvdW50ZXJzLCBhcnBfaGRyX2xlbihza2ItPmRldiksIDEpOwogCiAJCXQgPSBhcnB0X2dldF90YXJnZXRfYyhlKTsKIApAQCAtNzEzLDcgKzcxMCw3IEBACiAJc3RydWN0IGFycHRfZW50cnkgKml0ZXI7CiAJdW5zaWduZWQgaW50IGNwdTsKIAl1bnNpZ25lZCBpbnQgaTsKLQl1bnNpZ25lZCBpbnQgY3VyY3B1OworCXVuc2lnbmVkIGludCBjdXJjcHUgPSBnZXRfY3B1KCk7CiAKIAkvKiBJbnN0ZWFkIG9mIGNsZWFyaW5nIChieSBhIHByZXZpb3VzIGNhbGwgdG8gbWVtc2V0KCkpCiAJICogdGhlIGNvdW50ZXJzIGFuZCB1c2luZyBhZGRzLCB3ZSBzZXQgdGhlIGNvdW50ZXJzCkBAIC03MjMsMTQgKzcyMCwxNiBAQAogCSAqIGlmIG5ldyBzb2Z0aXJxIHdlcmUgdG8gcnVuIGFuZCBjYWxsIGlwdF9kb190YWJsZQogCSAqLwogCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQljdXJjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KIAlpID0gMDsKIAl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIHQtPmVudHJpZXNbY3VyY3B1XSwgdC0+c2l6ZSkgewogCQlTRVRfQ09VTlRFUihjb3VudGVyc1tpXSwgaXRlci0+Y291bnRlcnMuYmNudCwKIAkJCSAgICBpdGVyLT5jb3VudGVycy5wY250KTsKIAkJKytpOwogCX0KKwlsb2NhbF9iaF9lbmFibGUoKTsKKwkvKiBQcm9jZXNzaW5nIGNvdW50ZXJzIGZyb20gb3RoZXIgY3B1cywgd2UgY2FuIGxldCBib3R0b20gaGFsZiBlbmFibGVkLAorCSAqIChwcmVlbXB0aW9uIGlzIGRpc2FibGVkKQorCSAqLwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlpZiAoY3B1ID09IGN1cmNwdSkKQEAgLTc0NCw3ICs3NDMsNyBAQAogCQl9CiAJCXh0X2luZm9fd3J1bmxvY2soY3B1KTsKIAl9Ci0JbG9jYWxfYmhfZW5hYmxlKCk7CisJcHV0X2NwdSgpOwogfQogCiBzdGF0aWMgc3RydWN0IHh0X2NvdW50ZXJzICphbGxvY19jb3VudGVycyhjb25zdCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlKQpAQCAtNzU4LDcgKzc1Nyw3IEBACiAJICogYWJvdXQpLgogCSAqLwogCWNvdW50ZXJzaXplID0gc2l6ZW9mKHN0cnVjdCB4dF9jb3VudGVycykgKiBwcml2YXRlLT5udW1iZXI7Ci0JY291bnRlcnMgPSB2bWFsbG9jX25vZGUoY291bnRlcnNpemUsIG51bWFfbm9kZV9pZCgpKTsKKwljb3VudGVycyA9IHZtYWxsb2MoY291bnRlcnNpemUpOwogCiAJaWYgKGNvdW50ZXJzID09IE5VTEwpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwpAQCAtMTAwNSw4ICsxMDA0LDcgQEAKIAlzdHJ1Y3QgYXJwdF9lbnRyeSAqaXRlcjsKIAogCXJldCA9IDA7Ci0JY291bnRlcnMgPSB2bWFsbG9jX25vZGUobnVtX2NvdW50ZXJzICogc2l6ZW9mKHN0cnVjdCB4dF9jb3VudGVycyksCi0JCQkJbnVtYV9ub2RlX2lkKCkpOworCWNvdW50ZXJzID0gdm1hbGxvYyhudW1fY291bnRlcnMgKiBzaXplb2Yoc3RydWN0IHh0X2NvdW50ZXJzKSk7CiAJaWYgKCFjb3VudGVycykgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKQEAgLTExNTksNyArMTE1Nyw3IEBACiAJaWYgKGxlbiAhPSBzaXplICsgbnVtX2NvdW50ZXJzICogc2l6ZW9mKHN0cnVjdCB4dF9jb3VudGVycykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcGFkZGMgPSB2bWFsbG9jX25vZGUobGVuIC0gc2l6ZSwgbnVtYV9ub2RlX2lkKCkpOworCXBhZGRjID0gdm1hbGxvYyhsZW4gLSBzaXplKTsKIAlpZiAoIXBhZGRjKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYwppbmRleCBhNGU1ZmM1Li5kMmMxMzExIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYwpAQCAtNDIsNyArNDIsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBjb3B5X21vZGUgX19yZWFkX21vc3RseSA9IElQUV9DT1BZX05PTkU7CiBzdGF0aWMgdW5zaWduZWQgaW50IHF1ZXVlX21heGxlbiBfX3JlYWRfbW9zdGx5ID0gSVBRX1FNQVhfREVGQVVMVDsKLXN0YXRpYyBERUZJTkVfUldMT0NLKHF1ZXVlX2xvY2spOworc3RhdGljIERFRklORV9TUElOTE9DSyhxdWV1ZV9sb2NrKTsKIHN0YXRpYyBpbnQgcGVlcl9waWQgX19yZWFkX21vc3RseTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY29weV9yYW5nZSBfX3JlYWRfbW9zdGx5Owogc3RhdGljIHVuc2lnbmVkIGludCBxdWV1ZV90b3RhbDsKQEAgLTcyLDEwICs3MiwxMCBAQAogCQlicmVhazsKIAogCWNhc2UgSVBRX0NPUFlfUEFDS0VUOgotCQljb3B5X21vZGUgPSBtb2RlOworCQlpZiAocmFuZ2UgPiAweEZGRkYpCisJCQlyYW5nZSA9IDB4RkZGRjsKIAkJY29weV9yYW5nZSA9IHJhbmdlOwotCQlpZiAoY29weV9yYW5nZSA+IDB4RkZGRikKLQkJCWNvcHlfcmFuZ2UgPSAweEZGRkY7CisJCWNvcHlfbW9kZSA9IG1vZGU7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTEwMSw3ICsxMDEsNyBAQAogewogCXN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkgPSBOVUxMLCAqaTsKIAotCXdyaXRlX2xvY2tfYmgoJnF1ZXVlX2xvY2spOworCXNwaW5fbG9ja19iaCgmcXVldWVfbG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGksICZxdWV1ZV9saXN0LCBsaXN0KSB7CiAJCWlmICgodW5zaWduZWQgbG9uZylpID09IGlkKSB7CkBAIC0xMTUsNyArMTE1LDcgQEAKIAkJcXVldWVfdG90YWwtLTsKIAl9CiAKLQl3cml0ZV91bmxvY2tfYmgoJnF1ZXVlX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKIAlyZXR1cm4gZW50cnk7CiB9CiAKQEAgLTEzNiw5ICsxMzYsOSBAQAogc3RhdGljIHZvaWQKIGlwcV9mbHVzaChpcHFfY21wZm4gY21wZm4sIHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQl3cml0ZV9sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnF1ZXVlX2xvY2spOwogCV9faXBxX2ZsdXNoKGNtcGZuLCBkYXRhKTsKLQl3cml0ZV91bmxvY2tfYmgoJnF1ZXVlX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKIH0KIAogc3RhdGljIHN0cnVjdCBza19idWZmICoKQEAgLTE1Miw5ICsxNTIsNyBAQAogCXN0cnVjdCBubG1zZ2hkciAqbmxoOwogCXN0cnVjdCB0aW1ldmFsIHR2OwogCi0JcmVhZF9sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKLQotCXN3aXRjaCAoY29weV9tb2RlKSB7CisJc3dpdGNoIChBQ0NFU1NfT05DRShjb3B5X21vZGUpKSB7CiAJY2FzZSBJUFFfQ09QWV9NRVRBOgogCWNhc2UgSVBRX0NPUFlfTk9ORToKIAkJc2l6ZSA9IE5MTVNHX1NQQUNFKHNpemVvZigqcG1zZykpOwpAQCAtMTYyLDI2ICsxNjAsMjEgQEAKIAogCWNhc2UgSVBRX0NPUFlfUEFDS0VUOgogCQlpZiAoZW50cnktPnNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgJiYKLQkJICAgICgqZXJycCA9IHNrYl9jaGVja3N1bV9oZWxwKGVudHJ5LT5za2IpKSkgewotCQkJcmVhZF91bmxvY2tfYmgoJnF1ZXVlX2xvY2spOworCQkgICAgKCplcnJwID0gc2tiX2NoZWNrc3VtX2hlbHAoZW50cnktPnNrYikpKQogCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJaWYgKGNvcHlfcmFuZ2UgPT0gMCB8fCBjb3B5X3JhbmdlID4gZW50cnktPnNrYi0+bGVuKQorCisJCWRhdGFfbGVuID0gQUNDRVNTX09OQ0UoY29weV9yYW5nZSk7CisJCWlmIChkYXRhX2xlbiA9PSAwIHx8IGRhdGFfbGVuID4gZW50cnktPnNrYi0+bGVuKQogCQkJZGF0YV9sZW4gPSBlbnRyeS0+c2tiLT5sZW47Ci0JCWVsc2UKLQkJCWRhdGFfbGVuID0gY29weV9yYW5nZTsKIAogCQlzaXplID0gTkxNU0dfU1BBQ0Uoc2l6ZW9mKCpwbXNnKSArIGRhdGFfbGVuKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgogCQkqZXJycCA9IC1FSU5WQUw7Ci0JCXJlYWRfdW5sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JcmVhZF91bmxvY2tfYmgoJnF1ZXVlX2xvY2spOwotCiAJc2tiID0gYWxsb2Nfc2tiKHNpemUsIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKQogCQlnb3RvIG5sbXNnX2ZhaWx1cmU7CkBAIC0yNDIsNyArMjM1LDcgQEAKIAlpZiAobnNrYiA9PSBOVUxMKQogCQlyZXR1cm4gc3RhdHVzOwogCi0Jd3JpdGVfbG9ja19iaCgmcXVldWVfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKIAogCWlmICghcGVlcl9waWQpCiAJCWdvdG8gZXJyX291dF9mcmVlX25za2I7CkBAIC0yNjYsMTQgKzI1OSwxNCBAQAogCiAJX19pcHFfZW5xdWV1ZV9lbnRyeShlbnRyeSk7CiAKLQl3cml0ZV91bmxvY2tfYmgoJnF1ZXVlX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKIAlyZXR1cm4gc3RhdHVzOwogCiBlcnJfb3V0X2ZyZWVfbnNrYjoKIAlrZnJlZV9za2IobnNrYik7CiAKIGVycl9vdXRfdW5sb2NrOgotCXdyaXRlX3VubG9ja19iaCgmcXVldWVfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnF1ZXVlX2xvY2spOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTM0Miw5ICszMzUsOSBAQAogewogCWludCBzdGF0dXM7CiAKLQl3cml0ZV9sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnF1ZXVlX2xvY2spOwogCXN0YXR1cyA9IF9faXBxX3NldF9tb2RlKG1vZGUsIHJhbmdlKTsKLQl3cml0ZV91bmxvY2tfYmgoJnF1ZXVlX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC00NDAsMTEgKzQzMywxMSBAQAogCWlmIChzZWN1cml0eV9uZXRsaW5rX3JlY3Yoc2tiLCBDQVBfTkVUX0FETUlOKSkKIAkJUkNWX1NLQl9GQUlMKC1FUEVSTSk7CiAKLQl3cml0ZV9sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnF1ZXVlX2xvY2spOwogCiAJaWYgKHBlZXJfcGlkKSB7CiAJCWlmIChwZWVyX3BpZCAhPSBwaWQpIHsKLQkJCXdyaXRlX3VubG9ja19iaCgmcXVldWVfbG9jayk7CisJCQlzcGluX3VubG9ja19iaCgmcXVldWVfbG9jayk7CiAJCQlSQ1ZfU0tCX0ZBSUwoLUVCVVNZKTsKIAkJfQogCX0gZWxzZSB7CkBAIC00NTIsNyArNDQ1LDcgQEAKIAkJcGVlcl9waWQgPSBwaWQ7CiAJfQogCi0Jd3JpdGVfdW5sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcXVldWVfbG9jayk7CiAKIAlzdGF0dXMgPSBpcHFfcmVjZWl2ZV9wZWVyKE5MTVNHX0RBVEEobmxoKSwgdHlwZSwKIAkJCQkgIG5sbXNnbGVuIC0gTkxNU0dfTEVOR1RIKDApKTsKQEAgLTQ5NywxMCArNDkwLDEwIEBACiAJc3RydWN0IG5ldGxpbmtfbm90aWZ5ICpuID0gcHRyOwogCiAJaWYgKGV2ZW50ID09IE5FVExJTktfVVJFTEVBU0UgJiYgbi0+cHJvdG9jb2wgPT0gTkVUTElOS19GSVJFV0FMTCkgewotCQl3cml0ZV9sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKKwkJc3Bpbl9sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKIAkJaWYgKChuZXRfZXEobi0+bmV0LCAmaW5pdF9uZXQpKSAmJiAobi0+cGlkID09IHBlZXJfcGlkKSkKIAkJCV9faXBxX3Jlc2V0KCk7Ci0JCXdyaXRlX3VubG9ja19iaCgmcXVldWVfbG9jayk7CisJCXNwaW5fdW5sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKIAl9CiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQpAQCAtNTI3LDcgKzUyMCw3IEBACiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0YXRpYyBpbnQgaXBfcXVldWVfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JcmVhZF9sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnF1ZXVlX2xvY2spOwogCiAJc2VxX3ByaW50ZihtLAogCQkgICAgICAiUGVlciBQSUQgICAgICAgICAgOiAlZFxuIgpAQCAtNTQ1LDcgKzUzOCw3IEBACiAJCSAgICAgIHF1ZXVlX2Ryb3BwZWQsCiAJCSAgICAgIHF1ZXVlX3VzZXJfZHJvcHBlZCk7CiAKLQlyZWFkX3VubG9ja19iaCgmcXVldWVfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnF1ZXVlX2xvY2spOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKaW5kZXggNGI2YzVjYS4uYzQzOTcyMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwpAQCAtMzY0LDcgKzM2NCw3IEBACiAJCQkJZ290byBub19tYXRjaDsKIAkJfQogCi0JCUFERF9DT1VOVEVSKGUtPmNvdW50ZXJzLCBudG9ocyhpcC0+dG90X2xlbiksIDEpOworCQlBRERfQ09VTlRFUihlLT5jb3VudGVycywgc2tiLT5sZW4sIDEpOwogCiAJCXQgPSBpcHRfZ2V0X3RhcmdldChlKTsKIAkJSVBfTkZfQVNTRVJUKHQtPnUua2VybmVsLnRhcmdldCk7CkBAIC04ODQsNyArODg0LDcgQEAKIAlzdHJ1Y3QgaXB0X2VudHJ5ICppdGVyOwogCXVuc2lnbmVkIGludCBjcHU7CiAJdW5zaWduZWQgaW50IGk7Ci0JdW5zaWduZWQgaW50IGN1cmNwdTsKKwl1bnNpZ25lZCBpbnQgY3VyY3B1ID0gZ2V0X2NwdSgpOwogCiAJLyogSW5zdGVhZCBvZiBjbGVhcmluZyAoYnkgYSBwcmV2aW91cyBjYWxsIHRvIG1lbXNldCgpKQogCSAqIHRoZSBjb3VudGVycyBhbmQgdXNpbmcgYWRkcywgd2Ugc2V0IHRoZSBjb3VudGVycwpAQCAtODk0LDE0ICs4OTQsMTYgQEAKIAkgKiBpZiBuZXcgc29mdGlycSB3ZXJlIHRvIHJ1biBhbmQgY2FsbCBpcHRfZG9fdGFibGUKIAkgKi8KIAlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0JY3VyY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCiAJaSA9IDA7CiAJeHRfZW50cnlfZm9yZWFjaChpdGVyLCB0LT5lbnRyaWVzW2N1cmNwdV0sIHQtPnNpemUpIHsKIAkJU0VUX0NPVU5URVIoY291bnRlcnNbaV0sIGl0ZXItPmNvdW50ZXJzLmJjbnQsCiAJCQkgICAgaXRlci0+Y291bnRlcnMucGNudCk7CiAJCSsraTsKIAl9CisJbG9jYWxfYmhfZW5hYmxlKCk7CisJLyogUHJvY2Vzc2luZyBjb3VudGVycyBmcm9tIG90aGVyIGNwdXMsIHdlIGNhbiBsZXQgYm90dG9tIGhhbGYgZW5hYmxlZCwKKwkgKiAocHJlZW1wdGlvbiBpcyBkaXNhYmxlZCkKKwkgKi8KIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJaWYgKGNwdSA9PSBjdXJjcHUpCkBAIC05MTUsNyArOTE3LDcgQEAKIAkJfQogCQl4dF9pbmZvX3dydW5sb2NrKGNwdSk7CiAJfQotCWxvY2FsX2JoX2VuYWJsZSgpOworCXB1dF9jcHUoKTsKIH0KIAogc3RhdGljIHN0cnVjdCB4dF9jb3VudGVycyAqYWxsb2NfY291bnRlcnMoY29uc3Qgc3RydWN0IHh0X3RhYmxlICp0YWJsZSkKQEAgLTkyOCw3ICs5MzAsNyBAQAogCSAgIChvdGhlciB0aGFuIGNvbWVmcm9tLCB3aGljaCB1c2Vyc3BhY2UgZG9lc24ndCBjYXJlCiAJICAgYWJvdXQpLiAqLwogCWNvdW50ZXJzaXplID0gc2l6ZW9mKHN0cnVjdCB4dF9jb3VudGVycykgKiBwcml2YXRlLT5udW1iZXI7Ci0JY291bnRlcnMgPSB2bWFsbG9jX25vZGUoY291bnRlcnNpemUsIG51bWFfbm9kZV9pZCgpKTsKKwljb3VudGVycyA9IHZtYWxsb2MoY291bnRlcnNpemUpOwogCiAJaWYgKGNvdW50ZXJzID09IE5VTEwpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwpAQCAtMTM1Miw3ICsxMzU0LDcgQEAKIAlpZiAobGVuICE9IHNpemUgKyBudW1fY291bnRlcnMgKiBzaXplb2Yoc3RydWN0IHh0X2NvdW50ZXJzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlwYWRkYyA9IHZtYWxsb2Nfbm9kZShsZW4gLSBzaXplLCBudW1hX25vZGVfaWQoKSk7CisJcGFkZGMgPSB2bWFsbG9jKGxlbiAtIHNpemUpOwogCWlmICghcGFkZGMpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYwppbmRleCBmOTFjOTRiLi4zYTQzY2YzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ0xVU1RFUklQLmMKQEAgLTUzLDEyICs1MywxMyBAQAogI2VuZGlmCiAJZW51bSBjbHVzdGVyaXBfaGFzaG1vZGUgaGFzaF9tb2RlOwkvKiB3aGljaCBoYXNoaW5nIG1vZGUgKi8KIAl1X2ludDMyX3QgaGFzaF9pbml0dmFsOwkJCS8qIGhhc2ggaW5pdGlhbGl6YXRpb24gKi8KKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwogfTsKIAogc3RhdGljIExJU1RfSEVBRChjbHVzdGVyaXBfY29uZmlncyk7CiAKIC8qIGNsdXN0ZXJpcF9sb2NrIHByb3RlY3RzIHRoZSBjbHVzdGVyaXBfY29uZmlncyBsaXN0ICovCi1zdGF0aWMgREVGSU5FX1JXTE9DSyhjbHVzdGVyaXBfbG9jayk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsdXN0ZXJpcF9sb2NrKTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjbHVzdGVyaXBfcHJvY19mb3BzOwpAQCAtNzEsMTEgKzcyLDE3IEBACiAJYXRvbWljX2luYygmYy0+cmVmY291bnQpOwogfQogCisKK3N0YXRpYyB2b2lkIGNsdXN0ZXJpcF9jb25maWdfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCWtmcmVlKGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZywgcmN1KSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZAogY2x1c3RlcmlwX2NvbmZpZ19wdXQoc3RydWN0IGNsdXN0ZXJpcF9jb25maWcgKmMpCiB7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmMtPnJlZmNvdW50KSkKLQkJa2ZyZWUoYyk7CisJCWNhbGxfcmN1X2JoKCZjLT5yY3UsIGNsdXN0ZXJpcF9jb25maWdfcmN1X2ZyZWUpOwogfQogCiAvKiBkZWNyZWFzZSB0aGUgY291bnQgb2YgZW50cmllcyB1c2luZy9yZWZlcmVuY2luZyB0aGlzIGNvbmZpZy4gIElmIGxhc3QKQEAgLTg0LDEwICs5MSwxMSBAQAogc3RhdGljIGlubGluZSB2b2lkCiBjbHVzdGVyaXBfY29uZmlnX2VudHJ5X3B1dChzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZyAqYykKIHsKLQl3cml0ZV9sb2NrX2JoKCZjbHVzdGVyaXBfbG9jayk7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmMtPmVudHJpZXMpKSB7Ci0JCWxpc3RfZGVsKCZjLT5saXN0KTsKLQkJd3JpdGVfdW5sb2NrX2JoKCZjbHVzdGVyaXBfbG9jayk7CisJbG9jYWxfYmhfZGlzYWJsZSgpOworCWlmIChhdG9taWNfZGVjX2FuZF9sb2NrKCZjLT5lbnRyaWVzLCAmY2x1c3RlcmlwX2xvY2spKSB7CisJCWxpc3RfZGVsX3JjdSgmYy0+bGlzdCk7CisJCXNwaW5fdW5sb2NrKCZjbHVzdGVyaXBfbG9jayk7CisJCWxvY2FsX2JoX2VuYWJsZSgpOwogCiAJCWRldl9tY19kZWwoYy0+ZGV2LCBjLT5jbHVzdGVybWFjKTsKIAkJZGV2X3B1dChjLT5kZXYpOwpAQCAtMTAwLDcgKzEwOCw3IEBACiAjZW5kaWYKIAkJcmV0dXJuOwogCX0KLQl3cml0ZV91bmxvY2tfYmgoJmNsdXN0ZXJpcF9sb2NrKTsKKwlsb2NhbF9iaF9lbmFibGUoKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICoKQEAgLTEwOCw3ICsxMTYsNyBAQAogewogCXN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmY2x1c3RlcmlwX2NvbmZpZ3MsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjLCAmY2x1c3RlcmlwX2NvbmZpZ3MsIGxpc3QpIHsKIAkJaWYgKGMtPmNsdXN0ZXJpcCA9PSBjbHVzdGVyaXApCiAJCQlyZXR1cm4gYzsKIAl9CkBAIC0xMjEsMTYgKzEyOSwxNSBAQAogewogCXN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjOwogCi0JcmVhZF9sb2NrX2JoKCZjbHVzdGVyaXBfbG9jayk7CisJcmN1X3JlYWRfbG9ja19iaCgpOwogCWMgPSBfX2NsdXN0ZXJpcF9jb25maWdfZmluZChjbHVzdGVyaXApOwotCWlmICghYykgewotCQlyZWFkX3VubG9ja19iaCgmY2x1c3RlcmlwX2xvY2spOwotCQlyZXR1cm4gTlVMTDsKKwlpZiAoYykgeworCQlpZiAodW5saWtlbHkoIWF0b21pY19pbmNfbm90X3plcm8oJmMtPnJlZmNvdW50KSkpCisJCQljID0gTlVMTDsKKwkJZWxzZSBpZiAoZW50cnkpCisJCQlhdG9taWNfaW5jKCZjLT5lbnRyaWVzKTsKIAl9Ci0JYXRvbWljX2luYygmYy0+cmVmY291bnQpOwotCWlmIChlbnRyeSkKLQkJYXRvbWljX2luYygmYy0+ZW50cmllcyk7Ci0JcmVhZF91bmxvY2tfYmgoJmNsdXN0ZXJpcF9sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAogCXJldHVybiBjOwogfQpAQCAtMTgxLDkgKzE4OCw5IEBACiAJfQogI2VuZGlmCiAKLQl3cml0ZV9sb2NrX2JoKCZjbHVzdGVyaXBfbG9jayk7Ci0JbGlzdF9hZGQoJmMtPmxpc3QsICZjbHVzdGVyaXBfY29uZmlncyk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZjbHVzdGVyaXBfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZjbHVzdGVyaXBfbG9jayk7CisJbGlzdF9hZGRfcmN1KCZjLT5saXN0LCAmY2x1c3RlcmlwX2NvbmZpZ3MpOworCXNwaW5fdW5sb2NrX2JoKCZjbHVzdGVyaXBfbG9jayk7CiAKIAlyZXR1cm4gYzsKIH0KQEAgLTQ2Miw3ICs0NjksNyBAQAogCV9fYmUzMiBzcmNfaXA7CiAJdV9pbnQ4X3QgZHN0X2h3W0VUSF9BTEVOXTsKIAlfX2JlMzIgZHN0X2lwOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjaWZkZWYgREVCVUcKIHN0YXRpYyB2b2lkIGFycF9wcmludChzdHJ1Y3QgYXJwX3BheWxvYWQgKnBheWxvYWQpCkBAIC03MzMsNiArNzQwLDkgQEAKICNlbmRpZgogCW5mX3VucmVnaXN0ZXJfaG9vaygmY2lwX2FycF9vcHMpOwogCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZjbHVzdGVyaXBfdGdfcmVnKTsKKworCS8qIFdhaXQgZm9yIGNvbXBsZXRpb24gb2YgY2FsbF9yY3VfYmgoKSdzIChjbHVzdGVyaXBfY29uZmlnX3JjdV9mcmVlKSAqLworCXJjdV9iYXJyaWVyX2JoKCk7CiB9CiAKIG1vZHVsZV9pbml0KGNsdXN0ZXJpcF90Z19pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTE9HLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0xPRy5jCmluZGV4IDUyMzRmNGYuLjkxNWZjMTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTE9HLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9MT0cuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxuZXQvaWNtcC5oPgogI2luY2x1ZGUgPG5ldC91ZHAuaD4KQEAgLTM2Myw2ICszNjQsNDIgQEAKIAkvKiBtYXhsZW4gPSAyMzArICAgOTEgICsgMjMwICsgMjUyID0gODAzICovCiB9CiAKK3N0YXRpYyB2b2lkIGR1bXBfbWFjX2hlYWRlcihjb25zdCBzdHJ1Y3QgbmZfbG9naW5mbyAqaW5mbywKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItPmRldjsKKwl1bnNpZ25lZCBpbnQgbG9nZmxhZ3MgPSAwOworCisJaWYgKGluZm8tPnR5cGUgPT0gTkZfTE9HX1RZUEVfTE9HKQorCQlsb2dmbGFncyA9IGluZm8tPnUubG9nLmxvZ2ZsYWdzOworCisJaWYgKCEobG9nZmxhZ3MgJiBJUFRfTE9HX01BQ0RFQ09ERSkpCisJCWdvdG8gZmFsbGJhY2s7CisKKwlzd2l0Y2ggKGRldi0+dHlwZSkgeworCWNhc2UgQVJQSFJEX0VUSEVSOgorCQlwcmludGsoIk1BQ1NSQz0lcE0gTUFDRFNUPSVwTSBNQUNQUk9UTz0lMDR4ICIsCisJCSAgICAgICBldGhfaGRyKHNrYiktPmhfc291cmNlLCBldGhfaGRyKHNrYiktPmhfZGVzdCwKKwkJICAgICAgIG50b2hzKGV0aF9oZHIoc2tiKS0+aF9wcm90bykpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCitmYWxsYmFjazoKKwlwcmludGsoIk1BQz0iKTsKKwlpZiAoZGV2LT5oYXJkX2hlYWRlcl9sZW4gJiYKKwkgICAgc2tiLT5tYWNfaGVhZGVyICE9IHNrYi0+bmV0d29ya19oZWFkZXIpIHsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHNrYl9tYWNfaGVhZGVyKHNrYik7CisJCXVuc2lnbmVkIGludCBpOworCisJCXByaW50aygiJTAyeCIsICpwKyspOworCQlmb3IgKGkgPSAxOyBpIDwgZGV2LT5oYXJkX2hlYWRlcl9sZW47IGkrKywgcCsrKQorCQkJcHJpbnRrKCI6JTAyeCIsICpwKTsKKwl9CisJcHJpbnRrKCIgIik7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbmZfbG9naW5mbyBkZWZhdWx0X2xvZ2luZm8gPSB7CiAJLnR5cGUJPSBORl9MT0dfVFlQRV9MT0csCiAJLnUgPSB7CkBAIC00MDQsMjAgKzQ0MSw5IEBACiAJfQogI2VuZGlmCiAKLQlpZiAoaW4gJiYgIW91dCkgewotCQkvKiBNQUMgbG9nZ2luZyBmb3IgaW5wdXQgY2hhaW4gb25seS4gKi8KLQkJcHJpbnRrKCJNQUM9Iik7Ci0JCWlmIChza2ItPmRldiAmJiBza2ItPmRldi0+aGFyZF9oZWFkZXJfbGVuICYmCi0JCSAgICBza2ItPm1hY19oZWFkZXIgIT0gc2tiLT5uZXR3b3JrX2hlYWRlcikgewotCQkJaW50IGk7Ci0JCQljb25zdCB1bnNpZ25lZCBjaGFyICpwID0gc2tiX21hY19oZWFkZXIoc2tiKTsKLQkJCWZvciAoaSA9IDA7IGkgPCBza2ItPmRldi0+aGFyZF9oZWFkZXJfbGVuOyBpKysscCsrKQotCQkJCXByaW50aygiJTAyeCVjIiwgKnAsCi0JCQkJICAgICAgIGk9PXNrYi0+ZGV2LT5oYXJkX2hlYWRlcl9sZW4gLSAxCi0JCQkJICAgICAgID8gJyAnOic6Jyk7Ci0JCX0gZWxzZQotCQkJcHJpbnRrKCIgIik7Ci0JfQorCS8qIE1BQyBsb2dnaW5nIGZvciBpbnB1dCBwYXRoIG9ubHkuICovCisJaWYgKGluICYmICFvdXQpCisJCWR1bXBfbWFjX2hlYWRlcihsb2dpbmZvLCBza2IpOwogCiAJZHVtcF9wYWNrZXQobG9naW5mbywgc2tiLCAwKTsKIAlwcmludGsoIlxuIik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X05FVE1BUC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9ORVRNQVAuYwppbmRleCBmNDM4NjdkLi42Y2RiMjk4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X05FVE1BUC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTkVUTUFQLmMKQEAgLTQ4LDcgKzQ4LDggQEAKIAogCU5GX0NUX0FTU0VSVChwYXItPmhvb2tudW0gPT0gTkZfSU5FVF9QUkVfUk9VVElORyB8fAogCQkgICAgIHBhci0+aG9va251bSA9PSBORl9JTkVUX1BPU1RfUk9VVElORyB8fAotCQkgICAgIHBhci0+aG9va251bSA9PSBORl9JTkVUX0xPQ0FMX09VVCk7CisJCSAgICAgcGFyLT5ob29rbnVtID09IE5GX0lORVRfTE9DQUxfT1VUIHx8CisJCSAgICAgcGFyLT5ob29rbnVtID09IE5GX0lORVRfTE9DQUxfSU4pOwogCWN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7CiAKIAluZXRtYXNrID0gfihtci0+cmFuZ2VbMF0ubWluX2lwIF4gbXItPnJhbmdlWzBdLm1heF9pcCk7CkBAIC03Nyw3ICs3OCw4IEBACiAJLnRhYmxlCQk9ICJuYXQiLAogCS5ob29rcwkJPSAoMSA8PCBORl9JTkVUX1BSRV9ST1VUSU5HKSB8CiAJCQkgICgxIDw8IE5GX0lORVRfUE9TVF9ST1VUSU5HKSB8Ci0JCQkgICgxIDw8IE5GX0lORVRfTE9DQUxfT1VUKSwKKwkJCSAgKDEgPDwgTkZfSU5FVF9MT0NBTF9PVVQpIHwKKwkJCSAgKDEgPDwgTkZfSU5FVF9MT0NBTF9JTiksCiAJLmNoZWNrZW50cnkgCT0gbmV0bWFwX3RnX2NoZWNrLAogCS5tZSAJCT0gVEhJU19NT0RVTEUKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFSkVDVC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYwppbmRleCBmNWY0YTg4Li5iMjU0ZGFmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFSkVDVC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmMKQEAgLTk1LDEwICs5NSwxMSBAQAogCX0KIAogCXRjcGgtPnJzdAk9IDE7Ci0JdGNwaC0+Y2hlY2sJPSB0Y3BfdjRfY2hlY2soc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpLAotCQkJCSAgICAgICBuaXBoLT5zYWRkciwgbmlwaC0+ZGFkZHIsCi0JCQkJICAgICAgIGNzdW1fcGFydGlhbCh0Y3BoLAotCQkJCQkJICAgIHNpemVvZihzdHJ1Y3QgdGNwaGRyKSwgMCkpOworCXRjcGgtPmNoZWNrID0gfnRjcF92NF9jaGVjayhzaXplb2Yoc3RydWN0IHRjcGhkciksIG5pcGgtPnNhZGRyLAorCQkJCSAgICBuaXBoLT5kYWRkciwgMCk7CisJbnNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fUEFSVElBTDsKKwluc2tiLT5jc3VtX3N0YXJ0ID0gKHVuc2lnbmVkIGNoYXIgKil0Y3BoIC0gbnNrYi0+aGVhZDsKKwluc2tiLT5jc3VtX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTsKIAogCWFkZHJfdHlwZSA9IFJUTl9VTlNQRUM7CiAJaWYgKGhvb2sgIT0gTkZfSU5FVF9GT1JXQVJECkBAIC0xMDksMTMgKzExMCwxMiBAQAogCQlhZGRyX3R5cGUgPSBSVE5fTE9DQUw7CiAKIAkvKiBpcF9yb3V0ZV9tZV9oYXJkZXIgZXhwZWN0cyBza2ItPmRzdCB0byBiZSBzZXQgKi8KLQlza2JfZHN0X3NldChuc2tiLCBkc3RfY2xvbmUoc2tiX2RzdChvbGRza2IpKSk7CisJc2tiX2RzdF9zZXRfbm9yZWYobnNrYiwgc2tiX2RzdChvbGRza2IpKTsKIAogCWlmIChpcF9yb3V0ZV9tZV9oYXJkZXIobnNrYiwgYWRkcl90eXBlKSkKIAkJZ290byBmcmVlX25za2I7CiAKIAluaXBoLT50dGwJPSBkc3RfbWV0cmljKHNrYl9kc3QobnNrYiksIFJUQVhfSE9QTElNSVQpOwotCW5za2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiAKIAkvKiAiTmV2ZXIgaGFwcGVucyIgKi8KIAlpZiAobnNrYi0+bGVuID4gZHN0X210dShza2JfZHN0KG5za2IpKSkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9kZWZyYWdfaXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2RlZnJhZ19pcHY0LmMKaW5kZXggY2I3NjNhZS4uZWFiOGRlMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2RlZnJhZ19pcHY0LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2RlZnJhZ19pcHY0LmMKQEAgLTY2LDYgKzY2LDExIEBACiAJCQkJCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKIAkJCQkJICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKIHsKKwlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhza2ItPnNrKTsKKworCWlmIChpbmV0ICYmIGluZXQtPm5vZGVmcmFnKQorCQlyZXR1cm4gTkZfQUNDRVBUOworCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0tfTU9EVUxFKQogI2lmICFkZWZpbmVkKENPTkZJR19ORl9OQVQpICYmICFkZWZpbmVkKENPTkZJR19ORl9OQVRfTU9EVUxFKQogCS8qIFByZXZpb3VzbHkgc2VlbiAobG9vcGJhY2spPyAgSWdub3JlLiAgRG8gdGhpcyBiZWZvcmUKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKaW5kZXggNGY4YmRkYi4uOGM4NjMyZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKQEAgLTI2MSwxNCArMjYxLDkgQEAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJcHJvdG8gPSBfX25mX25hdF9wcm90b19maW5kKG9yaWdfdHVwbGUtPmRzdC5wcm90b251bSk7CiAKLQkvKiBDaGFuZ2UgcHJvdG9jb2wgaW5mbyB0byBoYXZlIHNvbWUgcmFuZG9taXphdGlvbiAqLwotCWlmIChyYW5nZS0+ZmxhZ3MgJiBJUF9OQVRfUkFOR0VfUFJPVE9fUkFORE9NKSB7Ci0JCXByb3RvLT51bmlxdWVfdHVwbGUodHVwbGUsIHJhbmdlLCBtYW5pcHR5cGUsIGN0KTsKLQkJZ290byBvdXQ7Ci0JfQotCiAJLyogT25seSBib3RoZXIgbWFwcGluZyBpZiBpdCdzIG5vdCBhbHJlYWR5IGluIHJhbmdlIGFuZCB1bmlxdWUgKi8KLQlpZiAoKCEocmFuZ2UtPmZsYWdzICYgSVBfTkFUX1JBTkdFX1BST1RPX1NQRUNJRklFRCkgfHwKKwlpZiAoIShyYW5nZS0+ZmxhZ3MgJiBJUF9OQVRfUkFOR0VfUFJPVE9fUkFORE9NKSAmJgorCSAgICAoIShyYW5nZS0+ZmxhZ3MgJiBJUF9OQVRfUkFOR0VfUFJPVE9fU1BFQ0lGSUVEKSB8fAogCSAgICAgcHJvdG8tPmluX3JhbmdlKHR1cGxlLCBtYW5pcHR5cGUsICZyYW5nZS0+bWluLCAmcmFuZ2UtPm1heCkpICYmCiAJICAgICFuZl9uYXRfdXNlZF90dXBsZSh0dXBsZSwgY3QpKQogCQlnb3RvIG91dDsKQEAgLTQ0MCw3ICs0MzUsNyBAQAogCWlmICghc2tiX21ha2Vfd3JpdGFibGUoc2tiLCBoZHJsZW4gKyBzaXplb2YoKmluc2lkZSkpKQogCQlyZXR1cm4gMDsKIAotCWluc2lkZSA9ICh2b2lkICopc2tiLT5kYXRhICsgaXBfaGRybGVuKHNrYik7CisJaW5zaWRlID0gKHZvaWQgKilza2ItPmRhdGEgKyBoZHJsZW47CiAKIAkvKiBXZSdyZSBhY3R1YWxseSBnb2luZyB0byBtYW5nbGUgaXQgYmV5b25kIHRyaXZpYWwgY2hlY2tzdW0KIAkgICBhZGp1c3RtZW50LCBzbyBtYWtlIHN1cmUgdGhlIGN1cnJlbnQgY2hlY2tzdW0gaXMgY29ycmVjdC4gKi8KQEAgLTQ3MCwxMiArNDY1LDEwIEBACiAJLyogcmN1X3JlYWRfbG9jaygpZWQgYnkgbmZfaG9va19zbG93ICovCiAJbDRwcm90byA9IF9fbmZfY3RfbDRwcm90b19maW5kKFBGX0lORVQsIGluc2lkZS0+aXAucHJvdG9jb2wpOwogCi0JaWYgKCFuZl9jdF9nZXRfdHVwbGUoc2tiLAotCQkJICAgICBpcF9oZHJsZW4oc2tiKSArIHNpemVvZihzdHJ1Y3QgaWNtcGhkciksCi0JCQkgICAgIChpcF9oZHJsZW4oc2tiKSArCisJaWYgKCFuZl9jdF9nZXRfdHVwbGUoc2tiLCBoZHJsZW4gKyBzaXplb2Yoc3RydWN0IGljbXBoZHIpLAorCQkJICAgICAoaGRybGVuICsKIAkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaWNtcGhkcikgKyBpbnNpZGUtPmlwLmlobCAqIDQpLAotCQkJICAgICAodV9pbnQxNl90KUFGX0lORVQsCi0JCQkgICAgIGluc2lkZS0+aXAucHJvdG9jb2wsCisJCQkgICAgICh1X2ludDE2X3QpQUZfSU5FVCwgaW5zaWRlLT5pcC5wcm90b2NvbCwKIAkJCSAgICAgJmlubmVyLCBsM3Byb3RvLCBsNHByb3RvKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTQ4NCwxNSArNDc3LDEzIEBACiAJICAgcGFzcyBhbGwgaG9va3MgKGxvY2FsbHktZ2VuZXJhdGVkIElDTVApLiAgQ29uc2lkZXIgaW5jb21pbmcKIAkgICBwYWNrZXQ6IFBSRVJPVVRJTkcgKERTVCBtYW5pcCksIHJvdXRpbmcgcHJvZHVjZXMgSUNNUCwgZ29lcwogCSAgIHRocm91Z2ggUE9TVFJPVVRJTkcgKHdoaWNoIG11c3QgY29ycmVjdCB0aGUgRFNUIG1hbmlwKS4gKi8KLQlpZiAoIW1hbmlwX3BrdChpbnNpZGUtPmlwLnByb3RvY29sLCBza2IsCi0JCSAgICAgICBpcF9oZHJsZW4oc2tiKSArIHNpemVvZihpbnNpZGUtPmljbXApLAotCQkgICAgICAgJmN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUsCi0JCSAgICAgICAhbWFuaXApKQorCWlmICghbWFuaXBfcGt0KGluc2lkZS0+aXAucHJvdG9jb2wsIHNrYiwgaGRybGVuICsgc2l6ZW9mKGluc2lkZS0+aWNtcCksCisJCSAgICAgICAmY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZSwgIW1hbmlwKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkgewogCQkvKiBSZWxvYWRpbmcgImluc2lkZSIgaGVyZSBzaW5jZSBtYW5pcF9wa3QgaW5uZXIuICovCi0JCWluc2lkZSA9ICh2b2lkICopc2tiLT5kYXRhICsgaXBfaGRybGVuKHNrYik7CisJCWluc2lkZSA9ICh2b2lkICopc2tiLT5kYXRhICsgaGRybGVuOwogCQlpbnNpZGUtPmljbXAuY2hlY2tzdW0gPSAwOwogCQlpbnNpZGUtPmljbXAuY2hlY2tzdW0gPQogCQkJY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIGhkcmxlbiwKQEAgLTc0Miw3ICs3MzMsNyBAQAogCXNwaW5fdW5sb2NrX2JoKCZuZl9uYXRfbG9jayk7CiAKIAkvKiBJbml0aWFsaXplIGZha2UgY29ubnRyYWNrIHNvIHRoYXQgTkFUIHdpbGwgc2tpcCBpdCAqLwotCW5mX2Nvbm50cmFja191bnRyYWNrZWQuc3RhdHVzIHw9IElQU19OQVRfRE9ORV9NQVNLOworCW5mX2N0X3VudHJhY2tlZF9zdGF0dXNfb3IoSVBTX05BVF9ET05FX01BU0spOwogCiAJbDNwcm90byA9IG5mX2N0X2wzcHJvdG9fZmluZF9nZXQoKHVfaW50MTZfdClBRl9JTkVUKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b19jb21tb24uYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9fY29tbW9uLmMKaW5kZXggNmM0ZjExZi4uM2U2MWZhZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b19jb21tb24uYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX2NvbW1vbi5jCkBAIC0zNCw3ICszNCw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfcHJvdG9faW5fcmFuZ2UpOwogCi1ib29sIG5mX25hdF9wcm90b191bmlxdWVfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCit2b2lkIG5mX25hdF9wcm90b191bmlxdWVfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCiAJCQkgICAgICAgY29uc3Qgc3RydWN0IG5mX25hdF9yYW5nZSAqcmFuZ2UsCiAJCQkgICAgICAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUsCiAJCQkgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LApAQCAtNTMsNyArNTMsNyBAQAogCWlmICghKHJhbmdlLT5mbGFncyAmIElQX05BVF9SQU5HRV9QUk9UT19TUEVDSUZJRUQpKSB7CiAJCS8qIElmIGl0J3MgZHN0IHJld3JpdGUsIGNhbid0IGNoYW5nZSBwb3J0ICovCiAJCWlmIChtYW5pcHR5cGUgPT0gSVBfTkFUX01BTklQX0RTVCkKLQkJCXJldHVybiBmYWxzZTsKKwkJCXJldHVybjsKIAogCQlpZiAobnRvaHMoKnBvcnRwdHIpIDwgMTAyNCkgewogCQkJLyogTG9vc2UgY29udmVudGlvbjogPj4gNTEyIGlzIGNyZWRlbnRpYWwgcGFzc2luZyAqLwpAQCAtODEsMTUgKzgxLDE1IEBACiAJZWxzZQogCQlvZmYgPSAqcm92ZXI7CiAKLQlmb3IgKGkgPSAwOyBpIDwgcmFuZ2Vfc2l6ZTsgaSsrLCBvZmYrKykgeworCWZvciAoaSA9IDA7IDsgKytvZmYpIHsKIAkJKnBvcnRwdHIgPSBodG9ucyhtaW4gKyBvZmYgJSByYW5nZV9zaXplKTsKLQkJaWYgKG5mX25hdF91c2VkX3R1cGxlKHR1cGxlLCBjdCkpCisJCWlmICgrK2kgIT0gcmFuZ2Vfc2l6ZSAmJiBuZl9uYXRfdXNlZF90dXBsZSh0dXBsZSwgY3QpKQogCQkJY29udGludWU7CiAJCWlmICghKHJhbmdlLT5mbGFncyAmIElQX05BVF9SQU5HRV9QUk9UT19SQU5ET00pKQogCQkJKnJvdmVyID0gb2ZmOwotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuOwogCX0KLQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobmZfbmF0X3Byb3RvX3VuaXF1ZV90dXBsZSk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9fZGNjcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b19kY2NwLmMKaW5kZXggMjI0ODVjZS4uNTcwZmFmMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b19kY2NwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b19kY2NwLmMKQEAgLTIyLDE0ICsyMiwxNCBAQAogCiBzdGF0aWMgdV9pbnQxNl90IGRjY3BfcG9ydF9yb3ZlcjsKIAotc3RhdGljIGJvb2wKK3N0YXRpYyB2b2lkCiBkY2NwX3VuaXF1ZV90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKIAkJICBjb25zdCBzdHJ1Y3QgbmZfbmF0X3JhbmdlICpyYW5nZSwKIAkJICBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwdHlwZSwKIAkJICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpCiB7Ci0JcmV0dXJuIG5mX25hdF9wcm90b191bmlxdWVfdHVwbGUodHVwbGUsIHJhbmdlLCBtYW5pcHR5cGUsIGN0LAotCQkJCQkgJmRjY3BfcG9ydF9yb3Zlcik7CisJbmZfbmF0X3Byb3RvX3VuaXF1ZV90dXBsZSh0dXBsZSwgcmFuZ2UsIG1hbmlwdHlwZSwgY3QsCisJCQkJICAmZGNjcF9wb3J0X3JvdmVyKTsKIH0KIAogc3RhdGljIGJvb2wKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9fZ3JlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX2dyZS5jCmluZGV4IGQ3ZTg5MjAuLmJjOGQ4M2EgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9fZ3JlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b19ncmUuYwpAQCAtMzcsNyArMzcsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJOZXRmaWx0ZXIgTkFUIHByb3RvY29sIGhlbHBlciBtb2R1bGUgZm9yIEdSRSIpOwogCiAvKiBnZW5lcmF0ZSB1bmlxdWUgdHVwbGUgLi4uICovCi1zdGF0aWMgYm9vbAorc3RhdGljIHZvaWQKIGdyZV91bmlxdWVfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCiAJCSBjb25zdCBzdHJ1Y3QgbmZfbmF0X3JhbmdlICpyYW5nZSwKIAkJIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXB0eXBlLApAQCAtNTAsNyArNTAsNyBAQAogCS8qIElmIHRoZXJlIGlzIG5vIG1hc3RlciBjb25udHJhY2sgd2UgYXJlIG5vdCBQUFRQLAogCSAgIGRvIG5vdCBjaGFuZ2UgdHVwbGVzICovCiAJaWYgKCFjdC0+bWFzdGVyKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybjsKIAogCWlmIChtYW5pcHR5cGUgPT0gSVBfTkFUX01BTklQX1NSQykKIAkJa2V5cHRyID0gJnR1cGxlLT5zcmMudS5ncmUua2V5OwpAQCAtNjgsMTQgKzY4LDE0IEBACiAKIAlwcl9kZWJ1ZygibWluID0gJXUsIHJhbmdlX3NpemUgPSAldVxuIiwgbWluLCByYW5nZV9zaXplKTsKIAotCWZvciAoaSA9IDA7IGkgPCByYW5nZV9zaXplOyBpKyssIGtleSsrKSB7CisJZm9yIChpID0gMDsgOyArK2tleSkgewogCQkqa2V5cHRyID0gaHRvbnMobWluICsga2V5ICUgcmFuZ2Vfc2l6ZSk7Ci0JCWlmICghbmZfbmF0X3VzZWRfdHVwbGUodHVwbGUsIGN0KSkKLQkJCXJldHVybiB0cnVlOworCQlpZiAoKytpID09IHJhbmdlX3NpemUgfHwgIW5mX25hdF91c2VkX3R1cGxlKHR1cGxlLCBjdCkpCisJCQlyZXR1cm47CiAJfQogCiAJcHJfZGVidWcoIiVwOiBubyBOQVQgbWFwcGluZ1xuIiwgY3QpOwotCXJldHVybiBmYWxzZTsKKwlyZXR1cm47CiB9CiAKIC8qIG1hbmlwdWxhdGUgYSBHUkUgcGFja2V0IGFjY29yZGluZyB0byBtYW5pcHR5cGUgKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9faWNtcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b19pY21wLmMKaW5kZXggMTlhOGIwYi4uNTc0NGMzZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b19pY21wLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b19pY21wLmMKQEAgLTI3LDcgKzI3LDcgQEAKIAkgICAgICAgbnRvaHModHVwbGUtPnNyYy51LmljbXAuaWQpIDw9IG50b2hzKG1heC0+aWNtcC5pZCk7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgdm9pZAogaWNtcF91bmlxdWVfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCiAJCSAgY29uc3Qgc3RydWN0IG5mX25hdF9yYW5nZSAqcmFuZ2UsCiAJCSAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUsCkBAIC00MiwxMyArNDIsMTMgQEAKIAlpZiAoIShyYW5nZS0+ZmxhZ3MgJiBJUF9OQVRfUkFOR0VfUFJPVE9fU1BFQ0lGSUVEKSkKIAkJcmFuZ2Vfc2l6ZSA9IDB4RkZGRjsKIAotCWZvciAoaSA9IDA7IGkgPCByYW5nZV9zaXplOyBpKyssIGlkKyspIHsKKwlmb3IgKGkgPSAwOyA7ICsraWQpIHsKIAkJdHVwbGUtPnNyYy51LmljbXAuaWQgPSBodG9ucyhudG9ocyhyYW5nZS0+bWluLmljbXAuaWQpICsKIAkJCQkJICAgICAoaWQgJSByYW5nZV9zaXplKSk7Ci0JCWlmICghbmZfbmF0X3VzZWRfdHVwbGUodHVwbGUsIGN0KSkKLQkJCXJldHVybiB0cnVlOworCQlpZiAoKytpID09IHJhbmdlX3NpemUgfHwgIW5mX25hdF91c2VkX3R1cGxlKHR1cGxlLCBjdCkpCisJCQlyZXR1cm47CiAJfQotCXJldHVybiBmYWxzZTsKKwlyZXR1cm47CiB9CiAKIHN0YXRpYyBib29sCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX3NjdHAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9fc2N0cC5jCmluZGV4IDNmYzU5OGVlLi43NTYzMzFkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX3NjdHAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX3NjdHAuYwpAQCAtMTYsMTQgKzE2LDE0IEBACiAKIHN0YXRpYyB1X2ludDE2X3QgbmZfc2N0cF9wb3J0X3JvdmVyOwogCi1zdGF0aWMgYm9vbAorc3RhdGljIHZvaWQKIHNjdHBfdW5pcXVlX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAogCQkgIGNvbnN0IHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlLAogCQkgIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXB0eXBlLAogCQkgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKIHsKLQlyZXR1cm4gbmZfbmF0X3Byb3RvX3VuaXF1ZV90dXBsZSh0dXBsZSwgcmFuZ2UsIG1hbmlwdHlwZSwgY3QsCi0JCQkJCSAmbmZfc2N0cF9wb3J0X3JvdmVyKTsKKwluZl9uYXRfcHJvdG9fdW5pcXVlX3R1cGxlKHR1cGxlLCByYW5nZSwgbWFuaXB0eXBlLCBjdCwKKwkJCQkgICZuZl9zY3RwX3BvcnRfcm92ZXIpOwogfQogCiBzdGF0aWMgYm9vbApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b190Y3AuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9fdGNwLmMKaW5kZXggMzk5ZTJjZi4uYWE0NjBhNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b190Y3AuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX3RjcC5jCkBAIC0yMCwxNCArMjAsMTMgQEAKIAogc3RhdGljIHVfaW50MTZfdCB0Y3BfcG9ydF9yb3ZlcjsKIAotc3RhdGljIGJvb2wKK3N0YXRpYyB2b2lkCiB0Y3BfdW5pcXVlX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAogCQkgY29uc3Qgc3RydWN0IG5mX25hdF9yYW5nZSAqcmFuZ2UsCiAJCSBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwdHlwZSwKIAkJIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKIHsKLQlyZXR1cm4gbmZfbmF0X3Byb3RvX3VuaXF1ZV90dXBsZSh0dXBsZSwgcmFuZ2UsIG1hbmlwdHlwZSwgY3QsCi0JCQkJCSAmdGNwX3BvcnRfcm92ZXIpOworCW5mX25hdF9wcm90b191bmlxdWVfdHVwbGUodHVwbGUsIHJhbmdlLCBtYW5pcHR5cGUsIGN0LCAmdGNwX3BvcnRfcm92ZXIpOwogfQogCiBzdGF0aWMgYm9vbApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b191ZHAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9fdWRwLmMKaW5kZXggOWU2MWM3OS4uZGZlNjVjNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b191ZHAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX3VkcC5jCkBAIC0xOSwxNCArMTksMTMgQEAKIAogc3RhdGljIHVfaW50MTZfdCB1ZHBfcG9ydF9yb3ZlcjsKIAotc3RhdGljIGJvb2wKK3N0YXRpYyB2b2lkCiB1ZHBfdW5pcXVlX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAogCQkgY29uc3Qgc3RydWN0IG5mX25hdF9yYW5nZSAqcmFuZ2UsCiAJCSBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwdHlwZSwKIAkJIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKIHsKLQlyZXR1cm4gbmZfbmF0X3Byb3RvX3VuaXF1ZV90dXBsZSh0dXBsZSwgcmFuZ2UsIG1hbmlwdHlwZSwgY3QsCi0JCQkJCSAmdWRwX3BvcnRfcm92ZXIpOworCW5mX25hdF9wcm90b191bmlxdWVfdHVwbGUodHVwbGUsIHJhbmdlLCBtYW5pcHR5cGUsIGN0LCAmdWRwX3BvcnRfcm92ZXIpOwogfQogCiBzdGF0aWMgYm9vbApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b191ZHBsaXRlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX3VkcGxpdGUuYwppbmRleCA0NDBhMjI5Li4zY2M4YzhhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX3VkcGxpdGUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX3VkcGxpdGUuYwpAQCAtMTgsMTQgKzE4LDE0IEBACiAKIHN0YXRpYyB1X2ludDE2X3QgdWRwbGl0ZV9wb3J0X3JvdmVyOwogCi1zdGF0aWMgYm9vbAorc3RhdGljIHZvaWQKIHVkcGxpdGVfdW5pcXVlX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAogCQkgICAgIGNvbnN0IHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlLAogCQkgICAgIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXB0eXBlLAogCQkgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKIHsKLQlyZXR1cm4gbmZfbmF0X3Byb3RvX3VuaXF1ZV90dXBsZSh0dXBsZSwgcmFuZ2UsIG1hbmlwdHlwZSwgY3QsCi0JCQkJCSAmdWRwbGl0ZV9wb3J0X3JvdmVyKTsKKwluZl9uYXRfcHJvdG9fdW5pcXVlX3R1cGxlKHR1cGxlLCByYW5nZSwgbWFuaXB0eXBlLCBjdCwKKwkJCQkgICZ1ZHBsaXRlX3BvcnRfcm92ZXIpOwogfQogCiBzdGF0aWMgYm9vbApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b191bmtub3duLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX3Vua25vd24uYwppbmRleCAxNDM4MWM2Li5hNTBmMmJjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX3Vua25vd24uYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX3Vua25vd24uYwpAQCAtMjYsMTQgKzI2LDE0IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIHVua25vd25fdW5pcXVlX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorc3RhdGljIHZvaWQgdW5rbm93bl91bmlxdWVfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCiAJCQkJIGNvbnN0IHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlLAogCQkJCSBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwdHlwZSwKIAkJCQkgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KQogewogCS8qIFNvcnJ5OiB3ZSBjYW4ndCBoZWxwIHlvdTsgaWYgaXQncyBub3QgdW5pcXVlLCB3ZSBjYW4ndCBmcm9iCiAJICAgYW55dGhpbmcuICovCi0JcmV0dXJuIGZhbHNlOworCXJldHVybjsKIH0KIAogc3RhdGljIGJvb2wKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmMKaW5kZXggOThlZDc4Mi4uZWJiZDMxOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmMKQEAgLTI4LDcgKzI4LDggQEAKIAogI2RlZmluZSBOQVRfVkFMSURfSE9PS1MgKCgxIDw8IE5GX0lORVRfUFJFX1JPVVRJTkcpIHwgXAogCQkJICgxIDw8IE5GX0lORVRfUE9TVF9ST1VUSU5HKSB8IFwKLQkJCSAoMSA8PCBORl9JTkVUX0xPQ0FMX09VVCkpCisJCQkgKDEgPDwgTkZfSU5FVF9MT0NBTF9PVVQpIHwgXAorCQkJICgxIDw8IE5GX0lORVRfTE9DQUxfSU4pKQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHh0X3RhYmxlIG5hdF90YWJsZSA9IHsKIAkubmFtZQkJPSAibmF0IiwKQEAgLTQ1LDcgKzQ2LDggQEAKIAllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKIAljb25zdCBzdHJ1Y3QgbmZfbmF0X211bHRpX3JhbmdlX2NvbXBhdCAqbXIgPSBwYXItPnRhcmdpbmZvOwogCi0JTkZfQ1RfQVNTRVJUKHBhci0+aG9va251bSA9PSBORl9JTkVUX1BPU1RfUk9VVElORyk7CisJTkZfQ1RfQVNTRVJUKHBhci0+aG9va251bSA9PSBORl9JTkVUX1BPU1RfUk9VVElORyB8fAorCQkgICAgIHBhci0+aG9va251bSA9PSBORl9JTkVUX0xPQ0FMX0lOKTsKIAogCWN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7CiAKQEAgLTk5LDcgKzEwMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXVuc2lnbmVkIGludAorc3RhdGljIHVuc2lnbmVkIGludAogYWxsb2NfbnVsbF9iaW5kaW5nKHN0cnVjdCBuZl9jb25uICpjdCwgdW5zaWduZWQgaW50IGhvb2tudW0pCiB7CiAJLyogRm9yY2UgcmFuZ2UgdG8gdGhpcyBJUDsgbGV0IHByb3RvIGRlY2lkZSBtYXBwaW5nIGZvcgpAQCAtMTQxLDcgKzE0Myw3IEBACiAJLnRhcmdldAkJPSBpcHRfc25hdF90YXJnZXQsCiAJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IG5mX25hdF9tdWx0aV9yYW5nZV9jb21wYXQpLAogCS50YWJsZQkJPSAibmF0IiwKLQkuaG9va3MJCT0gMSA8PCBORl9JTkVUX1BPU1RfUk9VVElORywKKwkuaG9va3MJCT0gKDEgPDwgTkZfSU5FVF9QT1NUX1JPVVRJTkcpIHwgKDEgPDwgTkZfSU5FVF9MT0NBTF9JTiksCiAJLmNoZWNrZW50cnkJPSBpcHRfc25hdF9jaGVja2VudHJ5LAogCS5mYW1pbHkJCT0gQUZfSU5FVCwKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3N0YW5kYWxvbmUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc3RhbmRhbG9uZS5jCmluZGV4IGJlYjI1ODEuLjk1NDgxZmUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc3RhbmRhbG9uZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc3RhbmRhbG9uZS5jCkBAIC05OCw3ICs5OCw3IEBACiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKIAkvKiBEb24ndCB0cnkgdG8gTkFUIGlmIHRoaXMgcGFja2V0IGlzIG5vdCBjb25udHJhY2tlZCAqLwotCWlmIChjdCA9PSAmbmZfY29ubnRyYWNrX3VudHJhY2tlZCkKKwlpZiAobmZfY3RfaXNfdW50cmFja2VkKGN0KSkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAogCW5hdCA9IG5mY3RfbmF0KGN0KTsKQEAgLTEzMSwxMyArMTMxLDcgQEAKIAkJaWYgKCFuZl9uYXRfaW5pdGlhbGl6ZWQoY3QsIG1hbmlwdHlwZSkpIHsKIAkJCXVuc2lnbmVkIGludCByZXQ7CiAKLQkJCWlmIChob29rbnVtID09IE5GX0lORVRfTE9DQUxfSU4pCi0JCQkJLyogTE9DQUxfSU4gaG9vayBkb2Vzbid0IGhhdmUgYSBjaGFpbiEgICovCi0JCQkJcmV0ID0gYWxsb2NfbnVsbF9iaW5kaW5nKGN0LCBob29rbnVtKTsKLQkJCWVsc2UKLQkJCQlyZXQgPSBuZl9uYXRfcnVsZV9maW5kKHNrYiwgaG9va251bSwgaW4sIG91dCwKLQkJCQkJCSAgICAgICBjdCk7Ci0KKwkJCXJldCA9IG5mX25hdF9ydWxlX2ZpbmQoc2tiLCBob29rbnVtLCBpbiwgb3V0LCBjdCk7CiAJCQlpZiAocmV0ICE9IE5GX0FDQ0VQVCkKIAkJCQlyZXR1cm4gcmV0OwogCQl9IGVsc2UKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3Byb2MuYyBiL25ldC9pcHY0L3Byb2MuYwppbmRleCAzZGM5OTE0Li40YWUxZjIwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9wcm9jLmMKKysrIGIvbmV0L2lwdjQvcHJvYy5jCkBAIC0yNTIsNiArMjUyLDcgQEAKIAlTTk1QX01JQl9JVEVNKCJUQ1BCYWNrbG9nRHJvcCIsIExJTlVYX01JQl9UQ1BCQUNLTE9HRFJPUCksCiAJU05NUF9NSUJfSVRFTSgiVENQTWluVFRMRHJvcCIsIExJTlVYX01JQl9UQ1BNSU5UVExEUk9QKSwKIAlTTk1QX01JQl9JVEVNKCJUQ1BEZWZlckFjY2VwdERyb3AiLCBMSU5VWF9NSUJfVENQREVGRVJBQ0NFUFREUk9QKSwKKwlTTk1QX01JQl9JVEVNKCJJUFJldmVyc2VQYXRoRmlsdGVyIiwgTElOVVhfTUlCX0lQUlBGSUxURVIpLAogCVNOTVBfTUlCX1NFTlRJTkVMCiB9OwogCkBAIC0zNDIsMTAgKzM0MywxMiBAQAogCQkgICBJUFY0X0RFVkNPTkZfQUxMKG5ldCwgRk9SV0FSRElORykgPyAxIDogMiwKIAkJICAgc3lzY3RsX2lwX2RlZmF1bHRfdHRsKTsKIAorCUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaXBzdGF0c19taWIsIG1pYnMpICE9IDApOwogCWZvciAoaSA9IDA7IHNubXA0X2lwc3RhdHNfbGlzdFtpXS5uYW1lICE9IE5VTEw7IGkrKykKLQkJc2VxX3ByaW50ZihzZXEsICIgJWx1IiwKLQkJCSAgIHNubXBfZm9sZF9maWVsZCgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5pcF9zdGF0aXN0aWNzLAotCQkJCQkgICBzbm1wNF9pcHN0YXRzX2xpc3RbaV0uZW50cnkpKTsKKwkJc2VxX3ByaW50ZihzZXEsICIgJWxsdSIsCisJCQkgICBzbm1wX2ZvbGRfZmllbGQ2NCgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5pcF9zdGF0aXN0aWNzLAorCQkJCQkgICAgIHNubXA0X2lwc3RhdHNfbGlzdFtpXS5lbnRyeSwKKwkJCQkJICAgICBvZmZzZXRvZihzdHJ1Y3QgaXBzdGF0c19taWIsIHN5bmNwKSkpOwogCiAJaWNtcF9wdXQoc2VxKTsJLyogUkZDIDIwMTEgY29tcGF0aWJpbGl0eSAqLwogCWljbXBtc2dfcHV0KHNlcSk7CkBAIC00MzEsOSArNDM0LDEwIEBACiAKIAlzZXFfcHV0cyhzZXEsICJcbklwRXh0OiIpOwogCWZvciAoaSA9IDA7IHNubXA0X2lwZXh0c3RhdHNfbGlzdFtpXS5uYW1lICE9IE5VTEw7IGkrKykKLQkJc2VxX3ByaW50ZihzZXEsICIgJWx1IiwKLQkJCSAgIHNubXBfZm9sZF9maWVsZCgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5pcF9zdGF0aXN0aWNzLAotCQkJCQkgICBzbm1wNF9pcGV4dHN0YXRzX2xpc3RbaV0uZW50cnkpKTsKKwkJc2VxX3ByaW50ZihzZXEsICIgJWxsdSIsCisJCQkgICBzbm1wX2ZvbGRfZmllbGQ2NCgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5pcF9zdGF0aXN0aWNzLAorCQkJCQkgICAgIHNubXA0X2lwZXh0c3RhdHNfbGlzdFtpXS5lbnRyeSwKKwkJCQkJICAgICBvZmZzZXRvZihzdHJ1Y3QgaXBzdGF0c19taWIsIHN5bmNwKSkpOwogCiAJc2VxX3B1dGMoc2VxLCAnXG4nKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3Byb3RvY29sLmMgYi9uZXQvaXB2NC9wcm90b2NvbC5jCmluZGV4IDU0MmYyMmZjOS4uZjJkMjk3MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcHJvdG9jb2wuYworKysgYi9uZXQvaXB2NC9wcm90b2NvbC5jCkBAIC01Miw2ICs1Miw3IEBACiAKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChpbmV0X2FkZF9wcm90b2NvbCk7CiAKIC8qCiAgKglSZW1vdmUgYSBwcm90b2NvbCBmcm9tIHRoZSBoYXNoIHRhYmxlcy4KQEAgLTc2LDYgKzc3LDQgQEAKIAogCXJldHVybiByZXQ7CiB9Ci0KLUVYUE9SVF9TWU1CT0woaW5ldF9hZGRfcHJvdG9jb2wpOwogRVhQT1JUX1NZTUJPTChpbmV0X2RlbF9wcm90b2NvbCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yYXcuYyBiL25ldC9pcHY0L3Jhdy5jCmluZGV4IDJjN2ExNjMuLjAwOWE3YjIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3Jhdy5jCisrKyBiL25ldC9pcHY0L3Jhdy5jCkBAIC0zMTQsNyArMzE0LDcgQEAKIH0KIAogc3RhdGljIGludCByYXdfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCB2b2lkICpmcm9tLCBzaXplX3QgbGVuZ3RoLAotCQkJc3RydWN0IHJ0YWJsZSAqcnQsCisJCQlzdHJ1Y3QgcnRhYmxlICoqcnRwLAogCQkJdW5zaWduZWQgaW50IGZsYWdzKQogewogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKQEAgLTMyMywyNSArMzIzLDI3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1bnNpZ25lZCBpbnQgaXBobGVuOwogCWludCBlcnI7CisJc3RydWN0IHJ0YWJsZSAqcnQgPSAqcnRwOwogCi0JaWYgKGxlbmd0aCA+IHJ0LT51LmRzdC5kZXYtPm10dSkgeworCWlmIChsZW5ndGggPiBydC0+ZHN0LmRldi0+bXR1KSB7CiAJCWlwX2xvY2FsX2Vycm9yKHNrLCBFTVNHU0laRSwgcnQtPnJ0X2RzdCwgaW5ldC0+aW5ldF9kcG9ydCwKLQkJCSAgICAgICBydC0+dS5kc3QuZGV2LT5tdHUpOworCQkJICAgICAgIHJ0LT5kc3QuZGV2LT5tdHUpOwogCQlyZXR1cm4gLUVNU0dTSVpFOwogCX0KIAlpZiAoZmxhZ3MmTVNHX1BST0JFKQogCQlnb3RvIG91dDsKIAogCXNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2Ioc2ssCi0JCQkJICBsZW5ndGggKyBMTF9BTExPQ0FURURfU1BBQ0UocnQtPnUuZHN0LmRldikgKyAxNSwKKwkJCQkgIGxlbmd0aCArIExMX0FMTE9DQVRFRF9TUEFDRShydC0+ZHN0LmRldikgKyAxNSwKIAkJCQkgIGZsYWdzICYgTVNHX0RPTlRXQUlULCAmZXJyKTsKIAlpZiAoc2tiID09IE5VTEwpCiAJCWdvdG8gZXJyb3I7Ci0Jc2tiX3Jlc2VydmUoc2tiLCBMTF9SRVNFUlZFRF9TUEFDRShydC0+dS5kc3QuZGV2KSk7CisJc2tiX3Jlc2VydmUoc2tiLCBMTF9SRVNFUlZFRF9TUEFDRShydC0+ZHN0LmRldikpOwogCiAJc2tiLT5wcmlvcml0eSA9IHNrLT5za19wcmlvcml0eTsKIAlza2ItPm1hcmsgPSBzay0+c2tfbWFyazsKLQlza2JfZHN0X3NldChza2IsIGRzdF9jbG9uZSgmcnQtPnUuZHN0KSk7CisJc2tiX2RzdF9zZXQoc2tiLCAmcnQtPmRzdCk7CisJKnJ0cCA9IE5VTEw7CiAKIAlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKIAlpcGggPSBpcF9oZHIoc2tiKTsKQEAgLTM3Myw3ICszNzUsNyBAQAogCQlpcGgtPmNoZWNrICAgPSAwOwogCQlpcGgtPnRvdF9sZW4gPSBodG9ucyhsZW5ndGgpOwogCQlpZiAoIWlwaC0+aWQpCi0JCQlpcF9zZWxlY3RfaWRlbnQoaXBoLCAmcnQtPnUuZHN0LCBOVUxMKTsKKwkJCWlwX3NlbGVjdF9pZGVudChpcGgsICZydC0+ZHN0LCBOVUxMKTsKIAogCQlpcGgtPmNoZWNrID0gaXBfZmFzdF9jc3VtKCh1bnNpZ25lZCBjaGFyICopaXBoLCBpcGgtPmlobCk7CiAJfQpAQCAtMzgyLDcgKzM4NCw3IEBACiAJCQlza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpKS0+dHlwZSk7CiAKIAllcnIgPSBORl9IT09LKE5GUFJPVE9fSVBWNCwgTkZfSU5FVF9MT0NBTF9PVVQsIHNrYiwgTlVMTCwKLQkJICAgICAgcnQtPnUuZHN0LmRldiwgZHN0X291dHB1dCk7CisJCSAgICAgIHJ0LT5kc3QuZGV2LCBkc3Rfb3V0cHV0KTsKIAlpZiAoZXJyID4gMCkKIAkJZXJyID0gbmV0X3htaXRfZXJybm8oZXJyKTsKIAlpZiAoZXJyKQpAQCAtNTc2LDcgKzU3OCw3IEBACiAKIAlpZiAoaW5ldC0+aGRyaW5jbCkKIAkJZXJyID0gcmF3X3NlbmRfaGRyaW5jKHNrLCBtc2ctPm1zZ19pb3YsIGxlbiwKLQkJCQkJcnQsIG1zZy0+bXNnX2ZsYWdzKTsKKwkJCQkJJnJ0LCBtc2ctPm1zZ19mbGFncyk7CiAKIAkgZWxzZSB7CiAJCWlmICghaXBjLmFkZHIpCkBAIC02MDQsNyArNjA2LDcgQEAKIAlyZXR1cm4gbGVuOwogCiBkb19jb25maXJtOgotCWRzdF9jb25maXJtKCZydC0+dS5kc3QpOworCWRzdF9jb25maXJtKCZydC0+ZHN0KTsKIAlpZiAoIShtc2ctPm1zZ19mbGFncyAmIE1TR19QUk9CRSkgfHwgbGVuKQogCQlnb3RvIGJhY2tfZnJvbV9jb25maXJtOwogCWVyciA9IDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuYwppbmRleCA1NjBhY2M2Li4zZjU2YjZlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yb3V0ZS5jCisrKyBiL25ldC9pcHY0L3JvdXRlLmMKQEAgLTI1Myw4ICsyNTMsNyBAQAogc3RhdGljIHVuc2lnbmVkIGludAkJcnRfaGFzaF9sb2cgIF9fcmVhZF9tb3N0bHk7CiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcnRfY2FjaGVfc3RhdCwgcnRfY2FjaGVfc3RhdCk7Ci0jZGVmaW5lIFJUX0NBQ0hFX1NUQVRfSU5DKGZpZWxkKSBcCi0JKF9fcmF3X2dldF9jcHVfdmFyKHJ0X2NhY2hlX3N0YXQpLmZpZWxkKyspCisjZGVmaW5lIFJUX0NBQ0hFX1NUQVRfSU5DKGZpZWxkKSBfX3RoaXNfY3B1X2luYyhydF9jYWNoZV9zdGF0LmZpZWxkKQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBydF9oYXNoKF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLCBpbnQgaWR4LAogCQkJCSAgIGludCBnZW5pZCkKQEAgLTI4NywxMCArMjg2LDEwIEBACiAJCXJjdV9yZWFkX2xvY2tfYmgoKTsKIAkJciA9IHJjdV9kZXJlZmVyZW5jZV9iaChydF9oYXNoX3RhYmxlW3N0LT5idWNrZXRdLmNoYWluKTsKIAkJd2hpbGUgKHIpIHsKLQkJCWlmIChkZXZfbmV0KHItPnUuZHN0LmRldikgPT0gc2VxX2ZpbGVfbmV0KHNlcSkgJiYKKwkJCWlmIChkZXZfbmV0KHItPmRzdC5kZXYpID09IHNlcV9maWxlX25ldChzZXEpICYmCiAJCQkgICAgci0+cnRfZ2VuaWQgPT0gc3QtPmdlbmlkKQogCQkJCXJldHVybiByOwotCQkJciA9IHJjdV9kZXJlZmVyZW5jZV9iaChyLT51LmRzdC5ydF9uZXh0KTsKKwkJCXIgPSByY3VfZGVyZWZlcmVuY2VfYmgoci0+ZHN0LnJ0X25leHQpOwogCQl9CiAJCXJjdV9yZWFkX3VubG9ja19iaCgpOwogCX0KQEAgLTMwMiw3ICszMDEsNyBAQAogewogCXN0cnVjdCBydF9jYWNoZV9pdGVyX3N0YXRlICpzdCA9IHNlcS0+cHJpdmF0ZTsKIAotCXIgPSByLT51LmRzdC5ydF9uZXh0OworCXIgPSByLT5kc3QucnRfbmV4dDsKIAl3aGlsZSAoIXIpIHsKIAkJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiAJCWRvIHsKQEAgLTMyMCw3ICszMTksNyBAQAogewogCXN0cnVjdCBydF9jYWNoZV9pdGVyX3N0YXRlICpzdCA9IHNlcS0+cHJpdmF0ZTsKIAl3aGlsZSAoKHIgPSBfX3J0X2NhY2hlX2dldF9uZXh0KHNlcSwgcikpICE9IE5VTEwpIHsKLQkJaWYgKGRldl9uZXQoci0+dS5kc3QuZGV2KSAhPSBzZXFfZmlsZV9uZXQoc2VxKSkKKwkJaWYgKGRldl9uZXQoci0+ZHN0LmRldikgIT0gc2VxX2ZpbGVfbmV0KHNlcSkpCiAJCQljb250aW51ZTsKIAkJaWYgKHItPnJ0X2dlbmlkID09IHN0LT5nZW5pZCkKIAkJCWJyZWFrOwpAQCAtMzc4LDE5ICszNzcsMTkgQEAKIAogCQlzZXFfcHJpbnRmKHNlcSwgIiVzXHQlMDhYXHQlMDhYXHQlOFhcdCVkXHQldVx0JWRcdCIKIAkJCSAgICAgICIlMDhYXHQlZFx0JXVcdCV1XHQlMDJYXHQlZFx0JTFkXHQlMDhYJW4iLAotCQkJci0+dS5kc3QuZGV2ID8gci0+dS5kc3QuZGV2LT5uYW1lIDogIioiLAorCQkJci0+ZHN0LmRldiA/IHItPmRzdC5kZXYtPm5hbWUgOiAiKiIsCiAJCQkoX19mb3JjZSB1MzIpci0+cnRfZHN0LAogCQkJKF9fZm9yY2UgdTMyKXItPnJ0X2dhdGV3YXksCi0JCQlyLT5ydF9mbGFncywgYXRvbWljX3JlYWQoJnItPnUuZHN0Ll9fcmVmY250KSwKLQkJCXItPnUuZHN0Ll9fdXNlLCAwLCAoX19mb3JjZSB1MzIpci0+cnRfc3JjLAotCQkJKGRzdF9tZXRyaWMoJnItPnUuZHN0LCBSVEFYX0FEVk1TUykgPwotCQkJICAgICAoaW50KWRzdF9tZXRyaWMoJnItPnUuZHN0LCBSVEFYX0FEVk1TUykgKyA0MCA6IDApLAotCQkJZHN0X21ldHJpYygmci0+dS5kc3QsIFJUQVhfV0lORE9XKSwKLQkJCShpbnQpKChkc3RfbWV0cmljKCZyLT51LmRzdCwgUlRBWF9SVFQpID4+IDMpICsKLQkJCSAgICAgIGRzdF9tZXRyaWMoJnItPnUuZHN0LCBSVEFYX1JUVFZBUikpLAorCQkJci0+cnRfZmxhZ3MsIGF0b21pY19yZWFkKCZyLT5kc3QuX19yZWZjbnQpLAorCQkJci0+ZHN0Ll9fdXNlLCAwLCAoX19mb3JjZSB1MzIpci0+cnRfc3JjLAorCQkJKGRzdF9tZXRyaWMoJnItPmRzdCwgUlRBWF9BRFZNU1MpID8KKwkJCSAgICAgKGludClkc3RfbWV0cmljKCZyLT5kc3QsIFJUQVhfQURWTVNTKSArIDQwIDogMCksCisJCQlkc3RfbWV0cmljKCZyLT5kc3QsIFJUQVhfV0lORE9XKSwKKwkJCShpbnQpKChkc3RfbWV0cmljKCZyLT5kc3QsIFJUQVhfUlRUKSA+PiAzKSArCisJCQkgICAgICBkc3RfbWV0cmljKCZyLT5kc3QsIFJUQVhfUlRUVkFSKSksCiAJCQlyLT5mbC5mbDRfdG9zLAotCQkJci0+dS5kc3QuaGggPyBhdG9taWNfcmVhZCgmci0+dS5kc3QuaGgtPmhoX3JlZmNudCkgOiAtMSwKLQkJCXItPnUuZHN0LmhoID8gKHItPnUuZHN0LmhoLT5oaF9vdXRwdXQgPT0KKwkJCXItPmRzdC5oaCA/IGF0b21pY19yZWFkKCZyLT5kc3QuaGgtPmhoX3JlZmNudCkgOiAtMSwKKwkJCXItPmRzdC5oaCA/IChyLT5kc3QuaGgtPmhoX291dHB1dCA9PQogCQkJCSAgICAgICBkZXZfcXVldWVfeG1pdCkgOiAwLAogCQkJci0+cnRfc3BlY19kc3QsICZsZW4pOwogCkBAIC02MDksMTMgKzYwOCwxMyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgcnRfZnJlZShzdHJ1Y3QgcnRhYmxlICpydCkKIHsKLQljYWxsX3JjdV9iaCgmcnQtPnUuZHN0LnJjdV9oZWFkLCBkc3RfcmN1X2ZyZWUpOworCWNhbGxfcmN1X2JoKCZydC0+ZHN0LnJjdV9oZWFkLCBkc3RfcmN1X2ZyZWUpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcnRfZHJvcChzdHJ1Y3QgcnRhYmxlICpydCkKIHsKIAlpcF9ydF9wdXQocnQpOwotCWNhbGxfcmN1X2JoKCZydC0+dS5kc3QucmN1X2hlYWQsIGRzdF9yY3VfZnJlZSk7CisJY2FsbF9yY3VfYmgoJnJ0LT5kc3QucmN1X2hlYWQsIGRzdF9yY3VfZnJlZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHJ0X2Zhc3RfY2xlYW4oc3RydWN0IHJ0YWJsZSAqcnRoKQpAQCAtNjIzLDEzICs2MjIsMTMgQEAKIAkvKiBLaWxsIGJyb2FkY2FzdC9tdWx0aWNhc3QgZW50cmllcyB2ZXJ5IGFnZ3Jlc2l2ZWx5LCBpZiB0aGV5CiAJICAgY29sbGlkZSBpbiBoYXNoIHRhYmxlIHdpdGggbW9yZSB1c2VmdWwgZW50cmllcyAqLwogCXJldHVybiAocnRoLT5ydF9mbGFncyAmIChSVENGX0JST0FEQ0FTVCB8IFJUQ0ZfTVVMVElDQVNUKSkgJiYKLQkJcnRoLT5mbC5paWYgJiYgcnRoLT51LmRzdC5ydF9uZXh0OworCQlydGgtPmZsLmlpZiAmJiBydGgtPmRzdC5ydF9uZXh0OwogfQogCiBzdGF0aWMgaW5saW5lIGludCBydF92YWx1YWJsZShzdHJ1Y3QgcnRhYmxlICpydGgpCiB7CiAJcmV0dXJuIChydGgtPnJ0X2ZsYWdzICYgKFJUQ0ZfUkVESVJFQ1RFRCB8IFJUQ0ZfTk9USUZZKSkgfHwKLQkJcnRoLT51LmRzdC5leHBpcmVzOworCQlydGgtPmRzdC5leHBpcmVzOwogfQogCiBzdGF0aWMgaW50IHJ0X21heV9leHBpcmUoc3RydWN0IHJ0YWJsZSAqcnRoLCB1bnNpZ25lZCBsb25nIHRtbzEsIHVuc2lnbmVkIGxvbmcgdG1vMikKQEAgLTYzNywxNSArNjM2LDE1IEBACiAJdW5zaWduZWQgbG9uZyBhZ2U7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoYXRvbWljX3JlYWQoJnJ0aC0+dS5kc3QuX19yZWZjbnQpKQorCWlmIChhdG9taWNfcmVhZCgmcnRoLT5kc3QuX19yZWZjbnQpKQogCQlnb3RvIG91dDsKIAogCXJldCA9IDE7Ci0JaWYgKHJ0aC0+dS5kc3QuZXhwaXJlcyAmJgotCSAgICB0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHJ0aC0+dS5kc3QuZXhwaXJlcykpCisJaWYgKHJ0aC0+ZHN0LmV4cGlyZXMgJiYKKwkgICAgdGltZV9hZnRlcl9lcShqaWZmaWVzLCBydGgtPmRzdC5leHBpcmVzKSkKIAkJZ290byBvdXQ7CiAKLQlhZ2UgPSBqaWZmaWVzIC0gcnRoLT51LmRzdC5sYXN0dXNlOworCWFnZSA9IGppZmZpZXMgLSBydGgtPmRzdC5sYXN0dXNlOwogCXJldCA9IDA7CiAJaWYgKChhZ2UgPD0gdG1vMSAmJiAhcnRfZmFzdF9jbGVhbihydGgpKSB8fAogCSAgICAoYWdlIDw9IHRtbzIgJiYgcnRfdmFsdWFibGUocnRoKSkpCkBAIC02NjEsNyArNjYwLDcgQEAKICAqLwogc3RhdGljIGlubGluZSB1MzIgcnRfc2NvcmUoc3RydWN0IHJ0YWJsZSAqcnQpCiB7Ci0JdTMyIHNjb3JlID0gamlmZmllcyAtIHJ0LT51LmRzdC5sYXN0dXNlOworCXUzMiBzY29yZSA9IGppZmZpZXMgLSBydC0+ZHN0Lmxhc3R1c2U7CiAKIAlzY29yZSA9IH5zY29yZSAmIH4oMzw8MzApOwogCkBAIC03MDEsMTIgKzcwMCwxMiBAQAogCiBzdGF0aWMgaW5saW5lIGludCBjb21wYXJlX25ldG5zKHN0cnVjdCBydGFibGUgKnJ0MSwgc3RydWN0IHJ0YWJsZSAqcnQyKQogewotCXJldHVybiBuZXRfZXEoZGV2X25ldChydDEtPnUuZHN0LmRldiksIGRldl9uZXQocnQyLT51LmRzdC5kZXYpKTsKKwlyZXR1cm4gbmV0X2VxKGRldl9uZXQocnQxLT5kc3QuZGV2KSwgZGV2X25ldChydDItPmRzdC5kZXYpKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgcnRfaXNfZXhwaXJlZChzdHJ1Y3QgcnRhYmxlICpydGgpCiB7Ci0JcmV0dXJuIHJ0aC0+cnRfZ2VuaWQgIT0gcnRfZ2VuaWQoZGV2X25ldChydGgtPnUuZHN0LmRldikpOworCXJldHVybiBydGgtPnJ0X2dlbmlkICE9IHJ0X2dlbmlkKGRldl9uZXQocnRoLT5kc3QuZGV2KSk7CiB9CiAKIC8qCkBAIC03MzUsNyArNzM0LDcgQEAKIAkJcnRoID0gcnRfaGFzaF90YWJsZVtpXS5jaGFpbjsKIAogCQkvKiBkZWZlciByZWxlYXNpbmcgdGhlIGhlYWQgb2YgdGhlIGxpc3QgYWZ0ZXIgc3Bpbl91bmxvY2sgKi8KLQkJZm9yICh0YWlsID0gcnRoOyB0YWlsOyB0YWlsID0gdGFpbC0+dS5kc3QucnRfbmV4dCkKKwkJZm9yICh0YWlsID0gcnRoOyB0YWlsOyB0YWlsID0gdGFpbC0+ZHN0LnJ0X25leHQpCiAJCQlpZiAoIXJ0X2lzX2V4cGlyZWQodGFpbCkpCiAJCQkJYnJlYWs7CiAJCWlmIChydGggIT0gdGFpbCkKQEAgLTc0NCw5ICs3NDMsOSBAQAogCQkvKiBjYWxsIHJ0X2ZyZWUgb24gZW50cmllcyBhZnRlciB0aGUgdGFpbCByZXF1aXJpbmcgZmx1c2ggKi8KIAkJcHJldiA9ICZydF9oYXNoX3RhYmxlW2ldLmNoYWluOwogCQlmb3IgKHAgPSAqcHJldjsgcDsgcCA9IG5leHQpIHsKLQkJCW5leHQgPSBwLT51LmRzdC5ydF9uZXh0OworCQkJbmV4dCA9IHAtPmRzdC5ydF9uZXh0OwogCQkJaWYgKCFydF9pc19leHBpcmVkKHApKSB7Ci0JCQkJcHJldiA9ICZwLT51LmRzdC5ydF9uZXh0OworCQkJCXByZXYgPSAmcC0+ZHN0LnJ0X25leHQ7CiAJCQl9IGVsc2UgewogCQkJCSpwcmV2ID0gbmV4dDsKIAkJCQlydF9mcmVlKHApOwpAQCAtNzYxLDcgKzc2MCw3IEBACiAJCXNwaW5fdW5sb2NrX2JoKHJ0X2hhc2hfbG9ja19hZGRyKGkpKTsKIAogCQlmb3IgKDsgcnRoICE9IHRhaWw7IHJ0aCA9IG5leHQpIHsKLQkJCW5leHQgPSBydGgtPnUuZHN0LnJ0X25leHQ7CisJCQluZXh0ID0gcnRoLT5kc3QucnRfbmV4dDsKIAkJCXJ0X2ZyZWUocnRoKTsKIAkJfQogCX0KQEAgLTc5Miw3ICs3OTEsNyBAQAogCXdoaWxlIChhdXggIT0gcnRoKSB7CiAJCWlmIChjb21wYXJlX2hhc2hfaW5wdXRzKCZhdXgtPmZsLCAmcnRoLT5mbCkpCiAJCQlyZXR1cm4gMDsKLQkJYXV4ID0gYXV4LT51LmRzdC5ydF9uZXh0OworCQlhdXggPSBhdXgtPmRzdC5ydF9uZXh0OwogCX0KIAlyZXR1cm4gT05FOwogfQpAQCAtODMyLDE4ICs4MzEsMTggQEAKIAkJbGVuZ3RoID0gMDsKIAkJc3Bpbl9sb2NrX2JoKHJ0X2hhc2hfbG9ja19hZGRyKGkpKTsKIAkJd2hpbGUgKChydGggPSAqcnRocCkgIT0gTlVMTCkgewotCQkJcHJlZmV0Y2gocnRoLT51LmRzdC5ydF9uZXh0KTsKKwkJCXByZWZldGNoKHJ0aC0+ZHN0LnJ0X25leHQpOwogCQkJaWYgKHJ0X2lzX2V4cGlyZWQocnRoKSkgewotCQkJCSpydGhwID0gcnRoLT51LmRzdC5ydF9uZXh0OworCQkJCSpydGhwID0gcnRoLT5kc3QucnRfbmV4dDsKIAkJCQlydF9mcmVlKHJ0aCk7CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQlpZiAocnRoLT51LmRzdC5leHBpcmVzKSB7CisJCQlpZiAocnRoLT5kc3QuZXhwaXJlcykgewogCQkJCS8qIEVudHJ5IGlzIGV4cGlyZWQgZXZlbiBpZiBpdCBpcyBpbiB1c2UgKi8KLQkJCQlpZiAodGltZV9iZWZvcmVfZXEoamlmZmllcywgcnRoLT51LmRzdC5leHBpcmVzKSkgeworCQkJCWlmICh0aW1lX2JlZm9yZV9lcShqaWZmaWVzLCBydGgtPmRzdC5leHBpcmVzKSkgewogbm9mcmVlOgogCQkJCQl0bW8gPj49IDE7Ci0JCQkJCXJ0aHAgPSAmcnRoLT51LmRzdC5ydF9uZXh0OworCQkJCQlydGhwID0gJnJ0aC0+ZHN0LnJ0X25leHQ7CiAJCQkJCS8qCiAJCQkJCSAqIFdlIG9ubHkgY291bnQgZW50cmllcyBvbgogCQkJCQkgKiBhIGNoYWluIHdpdGggZXF1YWwgaGFzaCBpbnB1dHMgb25jZQpAQCAtODU5LDcgKzg1OCw3IEBACiAJCQkJZ290byBub2ZyZWU7CiAKIAkJCS8qIENsZWFudXAgYWdlZCBvZmYgZW50cmllcy4gKi8KLQkJCSpydGhwID0gcnRoLT51LmRzdC5ydF9uZXh0OworCQkJKnJ0aHAgPSBydGgtPmRzdC5ydF9uZXh0OwogCQkJcnRfZnJlZShydGgpOwogCQl9CiAJCXNwaW5fdW5sb2NrX2JoKHJ0X2hhc2hfbG9ja19hZGRyKGkpKTsKQEAgLTEwMDAsMTAgKzk5OSwxMCBAQAogCQkJCWlmICghcnRfaXNfZXhwaXJlZChydGgpICYmCiAJCQkJCSFydF9tYXlfZXhwaXJlKHJ0aCwgdG1vLCBleHBpcmUpKSB7CiAJCQkJCXRtbyA+Pj0gMTsKLQkJCQkJcnRocCA9ICZydGgtPnUuZHN0LnJ0X25leHQ7CisJCQkJCXJ0aHAgPSAmcnRoLT5kc3QucnRfbmV4dDsKIAkJCQkJY29udGludWU7CiAJCQkJfQotCQkJCSpydGhwID0gcnRoLT51LmRzdC5ydF9uZXh0OworCQkJCSpydGhwID0gcnRoLT5kc3QucnRfbmV4dDsKIAkJCQlydF9mcmVlKHJ0aCk7CiAJCQkJZ29hbC0tOwogCQkJfQpAQCAtMTA2OSw3ICsxMDY4LDcgQEAKIAogCXdoaWxlIChydGgpIHsKIAkJbGVuZ3RoICs9IGhhc19ub2FsaWFzKGhlYWQsIHJ0aCk7Ci0JCXJ0aCA9IHJ0aC0+dS5kc3QucnRfbmV4dDsKKwkJcnRoID0gcnRoLT5kc3QucnRfbmV4dDsKIAl9CiAJcmV0dXJuIGxlbmd0aCA+PiBGUkFDVF9CSVRTOwogfQpAQCAtMTA5MSw3ICsxMDkwLDcgQEAKIAljYW5kcCA9IE5VTEw7CiAJbm93ID0gamlmZmllczsKIAotCWlmICghcnRfY2FjaGluZyhkZXZfbmV0KHJ0LT51LmRzdC5kZXYpKSkgeworCWlmICghcnRfY2FjaGluZyhkZXZfbmV0KHJ0LT5kc3QuZGV2KSkpIHsKIAkJLyoKIAkJICogSWYgd2UncmUgbm90IGNhY2hpbmcsIGp1c3QgdGVsbCB0aGUgY2FsbGVyIHdlCiAJCSAqIHdlcmUgc3VjY2Vzc2Z1bCBhbmQgZG9uJ3QgdG91Y2ggdGhlIHJvdXRlLiAgVGhlCkBAIC0xMTA5LDcgKzExMDgsNyBAQAogCQkgKi8KIAogCQlpZiAocnQtPnJ0X3R5cGUgPT0gUlROX1VOSUNBU1QgfHwgcnQtPmZsLmlpZiA9PSAwKSB7Ci0JCQlpbnQgZXJyID0gYXJwX2JpbmRfbmVpZ2hib3VyKCZydC0+dS5kc3QpOworCQkJaW50IGVyciA9IGFycF9iaW5kX25laWdoYm91cigmcnQtPmRzdCk7CiAJCQlpZiAoZXJyKSB7CiAJCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCQkJcHJpbnRrKEtFUk5fV0FSTklORwpAQCAtMTEyOCwxOSArMTEyNywxOSBAQAogCXNwaW5fbG9ja19iaChydF9oYXNoX2xvY2tfYWRkcihoYXNoKSk7CiAJd2hpbGUgKChydGggPSAqcnRocCkgIT0gTlVMTCkgewogCQlpZiAocnRfaXNfZXhwaXJlZChydGgpKSB7Ci0JCQkqcnRocCA9IHJ0aC0+dS5kc3QucnRfbmV4dDsKKwkJCSpydGhwID0gcnRoLT5kc3QucnRfbmV4dDsKIAkJCXJ0X2ZyZWUocnRoKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmIChjb21wYXJlX2tleXMoJnJ0aC0+ZmwsICZydC0+ZmwpICYmIGNvbXBhcmVfbmV0bnMocnRoLCBydCkpIHsKIAkJCS8qIFB1dCBpdCBmaXJzdCAqLwotCQkJKnJ0aHAgPSBydGgtPnUuZHN0LnJ0X25leHQ7CisJCQkqcnRocCA9IHJ0aC0+ZHN0LnJ0X25leHQ7CiAJCQkvKgogCQkJICogU2luY2UgbG9va3VwIGlzIGxvY2tmcmVlLCB0aGUgZGVsZXRpb24KIAkJCSAqIG11c3QgYmUgdmlzaWJsZSB0byBhbm90aGVyIHdlYWtseSBvcmRlcmVkIENQVSBiZWZvcmUKIAkJCSAqIHRoZSBpbnNlcnRpb24gYXQgdGhlIHN0YXJ0IG9mIHRoZSBoYXNoIGNoYWluLgogCQkJICovCi0JCQlyY3VfYXNzaWduX3BvaW50ZXIocnRoLT51LmRzdC5ydF9uZXh0LAorCQkJcmN1X2Fzc2lnbl9wb2ludGVyKHJ0aC0+ZHN0LnJ0X25leHQsCiAJCQkJCSAgIHJ0X2hhc2hfdGFibGVbaGFzaF0uY2hhaW4pOwogCQkJLyoKIAkJCSAqIFNpbmNlIGxvb2t1cCBpcyBsb2NrZnJlZSwgdGhlIHVwZGF0ZSB3cml0ZXMKQEAgLTExNDgsMTggKzExNDcsMTggQEAKIAkJCSAqLwogCQkJcmN1X2Fzc2lnbl9wb2ludGVyKHJ0X2hhc2hfdGFibGVbaGFzaF0uY2hhaW4sIHJ0aCk7CiAKLQkJCWRzdF91c2UoJnJ0aC0+dS5kc3QsIG5vdyk7CisJCQlkc3RfdXNlKCZydGgtPmRzdCwgbm93KTsKIAkJCXNwaW5fdW5sb2NrX2JoKHJ0X2hhc2hfbG9ja19hZGRyKGhhc2gpKTsKIAogCQkJcnRfZHJvcChydCk7CiAJCQlpZiAocnApCiAJCQkJKnJwID0gcnRoOwogCQkJZWxzZQotCQkJCXNrYl9kc3Rfc2V0KHNrYiwgJnJ0aC0+dS5kc3QpOworCQkJCXNrYl9kc3Rfc2V0KHNrYiwgJnJ0aC0+ZHN0KTsKIAkJCXJldHVybiAwOwogCQl9CiAKLQkJaWYgKCFhdG9taWNfcmVhZCgmcnRoLT51LmRzdC5fX3JlZmNudCkpIHsKKwkJaWYgKCFhdG9taWNfcmVhZCgmcnRoLT5kc3QuX19yZWZjbnQpKSB7CiAJCQl1MzIgc2NvcmUgPSBydF9zY29yZShydGgpOwogCiAJCQlpZiAoc2NvcmUgPD0gbWluX3Njb3JlKSB7CkBAIC0xMTcxLDcgKzExNzAsNyBAQAogCiAJCWNoYWluX2xlbmd0aCsrOwogCi0JCXJ0aHAgPSAmcnRoLT51LmRzdC5ydF9uZXh0OworCQlydGhwID0gJnJ0aC0+ZHN0LnJ0X25leHQ7CiAJfQogCiAJaWYgKGNhbmQpIHsKQEAgLTExODIsMTcgKzExODEsMTcgQEAKIAkJICogb25seSAyIGVudHJpZXMgcGVyIGJ1Y2tldC4gV2Ugd2lsbCBzZWUuCiAJCSAqLwogCQlpZiAoY2hhaW5fbGVuZ3RoID4gaXBfcnRfZ2NfZWxhc3RpY2l0eSkgewotCQkJKmNhbmRwID0gY2FuZC0+dS5kc3QucnRfbmV4dDsKKwkJCSpjYW5kcCA9IGNhbmQtPmRzdC5ydF9uZXh0OwogCQkJcnRfZnJlZShjYW5kKTsKIAkJfQogCX0gZWxzZSB7CiAJCWlmIChjaGFpbl9sZW5ndGggPiBydF9jaGFpbl9sZW5ndGhfbWF4ICYmCiAJCSAgICBzbG93X2NoYWluX2xlbmd0aChydF9oYXNoX3RhYmxlW2hhc2hdLmNoYWluKSA+IHJ0X2NoYWluX2xlbmd0aF9tYXgpIHsKLQkJCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQocnQtPnUuZHN0LmRldik7CisJCQlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHJ0LT5kc3QuZGV2KTsKIAkJCWludCBudW0gPSArK25ldC0+aXB2NC5jdXJyZW50X3J0X2NhY2hlX3JlYnVpbGRfY291bnQ7CiAJCQlpZiAoIXJ0X2NhY2hpbmcobmV0KSkgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAlZCByZWJ1aWxkcyBpcyBvdmVyIGxpbWl0LCByb3V0ZSBjYWNoaW5nIGRpc2FibGVkXG4iLAotCQkJCQlydC0+dS5kc3QuZGV2LT5uYW1lLCBudW0pOworCQkJCQlydC0+ZHN0LmRldi0+bmFtZSwgbnVtKTsKIAkJCX0KIAkJCXJ0X2VtZXJnZW5jeV9oYXNoX3JlYnVpbGQobmV0KTsKIAkJCXNwaW5fdW5sb2NrX2JoKHJ0X2hhc2hfbG9ja19hZGRyKGhhc2gpKTsKQEAgLTEyMDcsNyArMTIwNiw3IEBACiAJICAgcm91dGUgb3IgdW5pY2FzdCBmb3J3YXJkaW5nIHBhdGguCiAJICovCiAJaWYgKHJ0LT5ydF90eXBlID09IFJUTl9VTklDQVNUIHx8IHJ0LT5mbC5paWYgPT0gMCkgewotCQlpbnQgZXJyID0gYXJwX2JpbmRfbmVpZ2hib3VyKCZydC0+dS5kc3QpOworCQlpbnQgZXJyID0gYXJwX2JpbmRfbmVpZ2hib3VyKCZydC0+ZHN0KTsKIAkJaWYgKGVycikgewogCQkJc3Bpbl91bmxvY2tfYmgocnRfaGFzaF9sb2NrX2FkZHIoaGFzaCkpOwogCkBAIC0xMjM4LDE0ICsxMjM3LDE0IEBACiAJCX0KIAl9CiAKLQlydC0+dS5kc3QucnRfbmV4dCA9IHJ0X2hhc2hfdGFibGVbaGFzaF0uY2hhaW47CisJcnQtPmRzdC5ydF9uZXh0ID0gcnRfaGFzaF90YWJsZVtoYXNoXS5jaGFpbjsKIAogI2lmIFJUX0NBQ0hFX0RFQlVHID49IDIKLQlpZiAocnQtPnUuZHN0LnJ0X25leHQpIHsKKwlpZiAocnQtPmRzdC5ydF9uZXh0KSB7CiAJCXN0cnVjdCBydGFibGUgKnRydDsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInJ0X2NhY2hlIEAlMDJ4OiAlcEk0IiwKIAkJICAgICAgIGhhc2gsICZydC0+cnRfZHN0KTsKLQkJZm9yICh0cnQgPSBydC0+dS5kc3QucnRfbmV4dDsgdHJ0OyB0cnQgPSB0cnQtPnUuZHN0LnJ0X25leHQpCisJCWZvciAodHJ0ID0gcnQtPmRzdC5ydF9uZXh0OyB0cnQ7IHRydCA9IHRydC0+ZHN0LnJ0X25leHQpCiAJCQlwcmludGsoIiAuICVwSTQiLCAmdHJ0LT5ydF9kc3QpOwogCQlwcmludGsoIlxuIik7CiAJfQpAQCAtMTI2Myw3ICsxMjYyLDcgQEAKIAlpZiAocnApCiAJCSpycCA9IHJ0OwogCWVsc2UKLQkJc2tiX2RzdF9zZXQoc2tiLCAmcnQtPnUuZHN0KTsKKwkJc2tiX2RzdF9zZXQoc2tiLCAmcnQtPmRzdCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzMjUsNiArMTMyNCw3IEBACiAKIAlpcF9zZWxlY3RfZmJfaWRlbnQoaXBoKTsKIH0KK0VYUE9SVF9TWU1CT0woX19pcF9zZWxlY3RfaWRlbnQpOwogCiBzdGF0aWMgdm9pZCBydF9kZWwodW5zaWduZWQgaGFzaCwgc3RydWN0IHJ0YWJsZSAqcnQpCiB7CkBAIC0xMzM1LDIwICsxMzM1LDIxIEBACiAJaXBfcnRfcHV0KHJ0KTsKIAl3aGlsZSAoKGF1eCA9ICpydGhwKSAhPSBOVUxMKSB7CiAJCWlmIChhdXggPT0gcnQgfHwgcnRfaXNfZXhwaXJlZChhdXgpKSB7Ci0JCQkqcnRocCA9IGF1eC0+dS5kc3QucnRfbmV4dDsKKwkJCSpydGhwID0gYXV4LT5kc3QucnRfbmV4dDsKIAkJCXJ0X2ZyZWUoYXV4KTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCXJ0aHAgPSAmYXV4LT51LmRzdC5ydF9uZXh0OworCQlydGhwID0gJmF1eC0+ZHN0LnJ0X25leHQ7CiAJfQogCXNwaW5fdW5sb2NrX2JoKHJ0X2hhc2hfbG9ja19hZGRyKGhhc2gpKTsKIH0KIAorLyogY2FsbGVkIGluIHJjdV9yZWFkX2xvY2soKSBzZWN0aW9uICovCiB2b2lkIGlwX3J0X3JlZGlyZWN0KF9fYmUzMiBvbGRfZ3csIF9fYmUzMiBkYWRkciwgX19iZTMyIG5ld19ndywKIAkJICAgIF9fYmUzMiBzYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpbnQgaSwgazsKLQlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBpbl9kZXZfZ2V0KGRldik7CisJc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpOwogCXN0cnVjdCBydGFibGUgKnJ0aCwgKipydGhwOwogCV9fYmUzMiAgc2tleXNbMl0gPSB7IHNhZGRyLCAwIH07CiAJaW50ICBpa2V5c1syXSA9IHsgZGV2LT5pZmluZGV4LCAwIH07CkBAIC0xMzg0LDcgKzEzODUsNiBAQAogCiAJCQlydGhwPSZydF9oYXNoX3RhYmxlW2hhc2hdLmNoYWluOwogCi0JCQlyY3VfcmVhZF9sb2NrKCk7CiAJCQl3aGlsZSAoKHJ0aCA9IHJjdV9kZXJlZmVyZW5jZSgqcnRocCkpICE9IE5VTEwpIHsKIAkJCQlzdHJ1Y3QgcnRhYmxlICpydDsKIApAQCAtMTM5Myw0NCArMTM5Myw0MiBAQAogCQkJCSAgICBydGgtPmZsLm9pZiAhPSBpa2V5c1trXSB8fAogCQkJCSAgICBydGgtPmZsLmlpZiAhPSAwIHx8CiAJCQkJICAgIHJ0X2lzX2V4cGlyZWQocnRoKSB8fAotCQkJCSAgICAhbmV0X2VxKGRldl9uZXQocnRoLT51LmRzdC5kZXYpLCBuZXQpKSB7Ci0JCQkJCXJ0aHAgPSAmcnRoLT51LmRzdC5ydF9uZXh0OworCQkJCSAgICAhbmV0X2VxKGRldl9uZXQocnRoLT5kc3QuZGV2KSwgbmV0KSkgeworCQkJCQlydGhwID0gJnJ0aC0+ZHN0LnJ0X25leHQ7CiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KIAogCQkJCWlmIChydGgtPnJ0X2RzdCAhPSBkYWRkciB8fAogCQkJCSAgICBydGgtPnJ0X3NyYyAhPSBzYWRkciB8fAotCQkJCSAgICBydGgtPnUuZHN0LmVycm9yIHx8CisJCQkJICAgIHJ0aC0+ZHN0LmVycm9yIHx8CiAJCQkJICAgIHJ0aC0+cnRfZ2F0ZXdheSAhPSBvbGRfZ3cgfHwKLQkJCQkgICAgcnRoLT51LmRzdC5kZXYgIT0gZGV2KQorCQkJCSAgICBydGgtPmRzdC5kZXYgIT0gZGV2KQogCQkJCQlicmVhazsKIAotCQkJCWRzdF9ob2xkKCZydGgtPnUuZHN0KTsKLQkJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCQlkc3RfaG9sZCgmcnRoLT5kc3QpOwogCiAJCQkJcnQgPSBkc3RfYWxsb2MoJmlwdjRfZHN0X29wcyk7CiAJCQkJaWYgKHJ0ID09IE5VTEwpIHsKIAkJCQkJaXBfcnRfcHV0KHJ0aCk7Ci0JCQkJCWluX2Rldl9wdXQoaW5fZGV2KTsKIAkJCQkJcmV0dXJuOwogCQkJCX0KIAogCQkJCS8qIENvcHkgYWxsIHRoZSBpbmZvcm1hdGlvbi4gKi8KIAkJCQkqcnQgPSAqcnRoOwotCQkJCXJ0LT51LmRzdC5fX3VzZQkJPSAxOwotCQkJCWF0b21pY19zZXQoJnJ0LT51LmRzdC5fX3JlZmNudCwgMSk7Ci0JCQkJcnQtPnUuZHN0LmNoaWxkCQk9IE5VTEw7Ci0JCQkJaWYgKHJ0LT51LmRzdC5kZXYpCi0JCQkJCWRldl9ob2xkKHJ0LT51LmRzdC5kZXYpOworCQkJCXJ0LT5kc3QuX191c2UJCT0gMTsKKwkJCQlhdG9taWNfc2V0KCZydC0+ZHN0Ll9fcmVmY250LCAxKTsKKwkJCQlydC0+ZHN0LmNoaWxkCQk9IE5VTEw7CisJCQkJaWYgKHJ0LT5kc3QuZGV2KQorCQkJCQlkZXZfaG9sZChydC0+ZHN0LmRldik7CiAJCQkJaWYgKHJ0LT5pZGV2KQogCQkJCQlpbl9kZXZfaG9sZChydC0+aWRldik7Ci0JCQkJcnQtPnUuZHN0Lm9ic29sZXRlCT0gLTE7Ci0JCQkJcnQtPnUuZHN0Lmxhc3R1c2UJPSBqaWZmaWVzOwotCQkJCXJ0LT51LmRzdC5wYXRoCQk9ICZydC0+dS5kc3Q7Ci0JCQkJcnQtPnUuZHN0Lm5laWdoYm91cgk9IE5VTEw7Ci0JCQkJcnQtPnUuZHN0LmhoCQk9IE5VTEw7CisJCQkJcnQtPmRzdC5vYnNvbGV0ZQk9IC0xOworCQkJCXJ0LT5kc3QubGFzdHVzZQk9IGppZmZpZXM7CisJCQkJcnQtPmRzdC5wYXRoCQk9ICZydC0+ZHN0OworCQkJCXJ0LT5kc3QubmVpZ2hib3VyCT0gTlVMTDsKKwkJCQlydC0+ZHN0LmhoCQk9IE5VTEw7CiAjaWZkZWYgQ09ORklHX1hGUk0KLQkJCQlydC0+dS5kc3QueGZybQkJPSBOVUxMOworCQkJCXJ0LT5kc3QueGZybQkJPSBOVUxMOwogI2VuZGlmCiAJCQkJcnQtPnJ0X2dlbmlkCQk9IHJ0X2dlbmlkKG5ldCk7CiAJCQkJcnQtPnJ0X2ZsYWdzCQl8PSBSVENGX1JFRElSRUNURUQ7CkBAIC0xNDM5LDIzICsxNDM3LDIzIEBACiAJCQkJcnQtPnJ0X2dhdGV3YXkJCT0gbmV3X2d3OwogCiAJCQkJLyogUmVkaXJlY3QgcmVjZWl2ZWQgLT4gcGF0aCB3YXMgdmFsaWQgKi8KLQkJCQlkc3RfY29uZmlybSgmcnRoLT51LmRzdCk7CisJCQkJZHN0X2NvbmZpcm0oJnJ0aC0+ZHN0KTsKIAogCQkJCWlmIChydC0+cGVlcikKIAkJCQkJYXRvbWljX2luYygmcnQtPnBlZXItPnJlZmNudCk7CiAKLQkJCQlpZiAoYXJwX2JpbmRfbmVpZ2hib3VyKCZydC0+dS5kc3QpIHx8Ci0JCQkJICAgICEocnQtPnUuZHN0Lm5laWdoYm91ci0+bnVkX3N0YXRlICYKKwkJCQlpZiAoYXJwX2JpbmRfbmVpZ2hib3VyKCZydC0+ZHN0KSB8fAorCQkJCSAgICAhKHJ0LT5kc3QubmVpZ2hib3VyLT5udWRfc3RhdGUgJgogCQkJCQkgICAgTlVEX1ZBTElEKSkgewotCQkJCQlpZiAocnQtPnUuZHN0Lm5laWdoYm91cikKLQkJCQkJCW5laWdoX2V2ZW50X3NlbmQocnQtPnUuZHN0Lm5laWdoYm91ciwgTlVMTCk7CisJCQkJCWlmIChydC0+ZHN0Lm5laWdoYm91cikKKwkJCQkJCW5laWdoX2V2ZW50X3NlbmQocnQtPmRzdC5uZWlnaGJvdXIsIE5VTEwpOwogCQkJCQlpcF9ydF9wdXQocnRoKTsKIAkJCQkJcnRfZHJvcChydCk7CiAJCQkJCWdvdG8gZG9fbmV4dDsKIAkJCQl9CiAKLQkJCQluZXRldmVudC5vbGQgPSAmcnRoLT51LmRzdDsKLQkJCQluZXRldmVudC5uZXcgPSAmcnQtPnUuZHN0OworCQkJCW5ldGV2ZW50Lm9sZCA9ICZydGgtPmRzdDsKKwkJCQluZXRldmVudC5uZXcgPSAmcnQtPmRzdDsKIAkJCQljYWxsX25ldGV2ZW50X25vdGlmaWVycyhORVRFVkVOVF9SRURJUkVDVCwKIAkJCQkJCQkmbmV0ZXZlbnQpOwogCkBAIC0xNDY0LDEyICsxNDYyLDEwIEBACiAJCQkJCWlwX3J0X3B1dChydCk7CiAJCQkJZ290byBkb19uZXh0OwogCQkJfQotCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCWRvX25leHQ6CiAJCQk7CiAJCX0KIAl9Ci0JaW5fZGV2X3B1dChpbl9kZXYpOwogCXJldHVybjsKIAogcmVqZWN0X3JlZGlyZWN0OgpAQCAtMTQ4MCw3ICsxNDc2LDcgQEAKIAkJICAgICAgICZvbGRfZ3csIGRldi0+bmFtZSwgJm5ld19ndywKIAkJICAgICAgICZzYWRkciwgJmRhZGRyKTsKICNlbmRpZgotCWluX2Rldl9wdXQoaW5fZGV2KTsKKwk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICppcHY0X25lZ2F0aXZlX2FkdmljZShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCkBAIC0xNDkzLDggKzE0ODksOCBAQAogCQkJaXBfcnRfcHV0KHJ0KTsKIAkJCXJldCA9IE5VTEw7CiAJCX0gZWxzZSBpZiAoKHJ0LT5ydF9mbGFncyAmIFJUQ0ZfUkVESVJFQ1RFRCkgfHwKLQkJCSAgIChydC0+dS5kc3QuZXhwaXJlcyAmJgotCQkJICAgIHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgcnQtPnUuZHN0LmV4cGlyZXMpKSkgeworCQkJICAgKHJ0LT5kc3QuZXhwaXJlcyAmJgorCQkJICAgIHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgcnQtPmRzdC5leHBpcmVzKSkpIHsKIAkJCXVuc2lnbmVkIGhhc2ggPSBydF9oYXNoKHJ0LT5mbC5mbDRfZHN0LCBydC0+ZmwuZmw0X3NyYywKIAkJCQkJCXJ0LT5mbC5vaWYsCiAJCQkJCQlydF9nZW5pZChkZXZfbmV0KGRzdC0+ZGV2KSkpOwpAQCAtMTUzMiw3ICsxNTI4LDcgQEAKIAlpbnQgbG9nX21hcnRpYW5zOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWluX2RldiA9IF9faW5fZGV2X2dldF9yY3UocnQtPnUuZHN0LmRldik7CisJaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShydC0+ZHN0LmRldik7CiAJaWYgKCFpbl9kZXYgfHwgIUlOX0RFVl9UWF9SRURJUkVDVFMoaW5fZGV2KSkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuOwpAQCAtMTU0MywzMCArMTUzOSwzMCBAQAogCS8qIE5vIHJlZGlyZWN0ZWQgcGFja2V0cyBkdXJpbmcgaXBfcnRfcmVkaXJlY3Rfc2lsZW5jZTsKIAkgKiByZXNldCB0aGUgYWxnb3JpdGhtLgogCSAqLwotCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHJ0LT51LmRzdC5yYXRlX2xhc3QgKyBpcF9ydF9yZWRpcmVjdF9zaWxlbmNlKSkKLQkJcnQtPnUuZHN0LnJhdGVfdG9rZW5zID0gMDsKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBydC0+ZHN0LnJhdGVfbGFzdCArIGlwX3J0X3JlZGlyZWN0X3NpbGVuY2UpKQorCQlydC0+ZHN0LnJhdGVfdG9rZW5zID0gMDsKIAogCS8qIFRvbyBtYW55IGlnbm9yZWQgcmVkaXJlY3RzOyBkbyBub3Qgc2VuZCBhbnl0aGluZwotCSAqIHNldCB1LmRzdC5yYXRlX2xhc3QgdG8gdGhlIGxhc3Qgc2VlbiByZWRpcmVjdGVkIHBhY2tldC4KKwkgKiBzZXQgZHN0LnJhdGVfbGFzdCB0byB0aGUgbGFzdCBzZWVuIHJlZGlyZWN0ZWQgcGFja2V0LgogCSAqLwotCWlmIChydC0+dS5kc3QucmF0ZV90b2tlbnMgPj0gaXBfcnRfcmVkaXJlY3RfbnVtYmVyKSB7Ci0JCXJ0LT51LmRzdC5yYXRlX2xhc3QgPSBqaWZmaWVzOworCWlmIChydC0+ZHN0LnJhdGVfdG9rZW5zID49IGlwX3J0X3JlZGlyZWN0X251bWJlcikgeworCQlydC0+ZHN0LnJhdGVfbGFzdCA9IGppZmZpZXM7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBDaGVjayBmb3IgbG9hZCBsaW1pdDsgc2V0IHJhdGVfbGFzdCB0byB0aGUgbGF0ZXN0IHNlbnQKIAkgKiByZWRpcmVjdC4KIAkgKi8KLQlpZiAocnQtPnUuZHN0LnJhdGVfdG9rZW5zID09IDAgfHwKKwlpZiAocnQtPmRzdC5yYXRlX3Rva2VucyA9PSAwIHx8CiAJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywKLQkJICAgICAgIChydC0+dS5kc3QucmF0ZV9sYXN0ICsKLQkJCShpcF9ydF9yZWRpcmVjdF9sb2FkIDw8IHJ0LT51LmRzdC5yYXRlX3Rva2VucykpKSkgeworCQkgICAgICAgKHJ0LT5kc3QucmF0ZV9sYXN0ICsKKwkJCShpcF9ydF9yZWRpcmVjdF9sb2FkIDw8IHJ0LT5kc3QucmF0ZV90b2tlbnMpKSkpIHsKIAkJaWNtcF9zZW5kKHNrYiwgSUNNUF9SRURJUkVDVCwgSUNNUF9SRURJUl9IT1NULCBydC0+cnRfZ2F0ZXdheSk7Ci0JCXJ0LT51LmRzdC5yYXRlX2xhc3QgPSBqaWZmaWVzOwotCQkrK3J0LT51LmRzdC5yYXRlX3Rva2VuczsKKwkJcnQtPmRzdC5yYXRlX2xhc3QgPSBqaWZmaWVzOworCQkrK3J0LT5kc3QucmF0ZV90b2tlbnM7CiAjaWZkZWYgQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0UKIAkJaWYgKGxvZ19tYXJ0aWFucyAmJgotCQkgICAgcnQtPnUuZHN0LnJhdGVfdG9rZW5zID09IGlwX3J0X3JlZGlyZWN0X251bWJlciAmJgorCQkgICAgcnQtPmRzdC5yYXRlX3Rva2VucyA9PSBpcF9ydF9yZWRpcmVjdF9udW1iZXIgJiYKIAkJICAgIG5ldF9yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgImhvc3QgJXBJNC9pZiVkIGlnbm9yZXMgcmVkaXJlY3RzIGZvciAlcEk0IHRvICVwSTQuXG4iLAogCQkJCSZydC0+cnRfc3JjLCBydC0+cnRfaWlmLApAQCAtMTU4MSw3ICsxNTc3LDcgQEAKIAl1bnNpZ25lZCBsb25nIG5vdzsKIAlpbnQgY29kZTsKIAotCXN3aXRjaCAocnQtPnUuZHN0LmVycm9yKSB7CisJc3dpdGNoIChydC0+ZHN0LmVycm9yKSB7CiAJCWNhc2UgRUlOVkFMOgogCQlkZWZhdWx0OgogCQkJZ290byBvdXQ7CkBAIC0xNTkwLDcgKzE1ODYsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgRU5FVFVOUkVBQ0g6CiAJCQljb2RlID0gSUNNUF9ORVRfVU5SRUFDSDsKLQkJCUlQX0lOQ19TVEFUU19CSChkZXZfbmV0KHJ0LT51LmRzdC5kZXYpLAorCQkJSVBfSU5DX1NUQVRTX0JIKGRldl9uZXQocnQtPmRzdC5kZXYpLAogCQkJCQlJUFNUQVRTX01JQl9JTk5PUk9VVEVTKTsKIAkJCWJyZWFrOwogCQljYXNlIEVBQ0NFUzoKQEAgLTE1OTksMTIgKzE1OTUsMTIgQEAKIAl9CiAKIAlub3cgPSBqaWZmaWVzOwotCXJ0LT51LmRzdC5yYXRlX3Rva2VucyArPSBub3cgLSBydC0+dS5kc3QucmF0ZV9sYXN0OwotCWlmIChydC0+dS5kc3QucmF0ZV90b2tlbnMgPiBpcF9ydF9lcnJvcl9idXJzdCkKLQkJcnQtPnUuZHN0LnJhdGVfdG9rZW5zID0gaXBfcnRfZXJyb3JfYnVyc3Q7Ci0JcnQtPnUuZHN0LnJhdGVfbGFzdCA9IG5vdzsKLQlpZiAocnQtPnUuZHN0LnJhdGVfdG9rZW5zID49IGlwX3J0X2Vycm9yX2Nvc3QpIHsKLQkJcnQtPnUuZHN0LnJhdGVfdG9rZW5zIC09IGlwX3J0X2Vycm9yX2Nvc3Q7CisJcnQtPmRzdC5yYXRlX3Rva2VucyArPSBub3cgLSBydC0+ZHN0LnJhdGVfbGFzdDsKKwlpZiAocnQtPmRzdC5yYXRlX3Rva2VucyA+IGlwX3J0X2Vycm9yX2J1cnN0KQorCQlydC0+ZHN0LnJhdGVfdG9rZW5zID0gaXBfcnRfZXJyb3JfYnVyc3Q7CisJcnQtPmRzdC5yYXRlX2xhc3QgPSBub3c7CisJaWYgKHJ0LT5kc3QucmF0ZV90b2tlbnMgPj0gaXBfcnRfZXJyb3JfY29zdCkgeworCQlydC0+ZHN0LnJhdGVfdG9rZW5zIC09IGlwX3J0X2Vycm9yX2Nvc3Q7CiAJCWljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBjb2RlLCAwKTsKIAl9CiAKQEAgLTE2NDksNyArMTY0NSw3IEBACiAKIAkJCXJjdV9yZWFkX2xvY2soKTsKIAkJCWZvciAocnRoID0gcmN1X2RlcmVmZXJlbmNlKHJ0X2hhc2hfdGFibGVbaGFzaF0uY2hhaW4pOyBydGg7Ci0JCQkgICAgIHJ0aCA9IHJjdV9kZXJlZmVyZW5jZShydGgtPnUuZHN0LnJ0X25leHQpKSB7CisJCQkgICAgIHJ0aCA9IHJjdV9kZXJlZmVyZW5jZShydGgtPmRzdC5ydF9uZXh0KSkgewogCQkJCXVuc2lnbmVkIHNob3J0IG10dSA9IG5ld19tdHU7CiAKIAkJCQlpZiAocnRoLT5mbC5mbDRfZHN0ICE9IGRhZGRyIHx8CkBAIC0xNjU4LDggKzE2NTQsOCBAQAogCQkJCSAgICBydGgtPnJ0X3NyYyAhPSBpcGgtPnNhZGRyIHx8CiAJCQkJICAgIHJ0aC0+Zmwub2lmICE9IGlrZXlzW2tdIHx8CiAJCQkJICAgIHJ0aC0+ZmwuaWlmICE9IDAgfHwKLQkJCQkgICAgZHN0X21ldHJpY19sb2NrZWQoJnJ0aC0+dS5kc3QsIFJUQVhfTVRVKSB8fAotCQkJCSAgICAhbmV0X2VxKGRldl9uZXQocnRoLT51LmRzdC5kZXYpLCBuZXQpIHx8CisJCQkJICAgIGRzdF9tZXRyaWNfbG9ja2VkKCZydGgtPmRzdCwgUlRBWF9NVFUpIHx8CisJCQkJICAgICFuZXRfZXEoZGV2X25ldChydGgtPmRzdC5kZXYpLCBuZXQpIHx8CiAJCQkJICAgIHJ0X2lzX2V4cGlyZWQocnRoKSkKIAkJCQkJY29udGludWU7CiAKQEAgLTE2NjcsMjIgKzE2NjMsMjIgQEAKIAogCQkJCQkvKiBCU0QgNC4yIGNvbXBhdGliaWxpdHkgaGFjayA6LSggKi8KIAkJCQkJaWYgKG10dSA9PSAwICYmCi0JCQkJCSAgICBvbGRfbXR1ID49IGRzdF9tdHUoJnJ0aC0+dS5kc3QpICYmCisJCQkJCSAgICBvbGRfbXR1ID49IGRzdF9tdHUoJnJ0aC0+ZHN0KSAmJgogCQkJCQkgICAgb2xkX210dSA+PSA2OCArIChpcGgtPmlobCA8PCAyKSkKIAkJCQkJCW9sZF9tdHUgLT0gaXBoLT5paGwgPDwgMjsKIAogCQkJCQltdHUgPSBndWVzc19tdHUob2xkX210dSk7CiAJCQkJfQotCQkJCWlmIChtdHUgPD0gZHN0X210dSgmcnRoLT51LmRzdCkpIHsKLQkJCQkJaWYgKG10dSA8IGRzdF9tdHUoJnJ0aC0+dS5kc3QpKSB7Ci0JCQkJCQlkc3RfY29uZmlybSgmcnRoLT51LmRzdCk7CisJCQkJaWYgKG10dSA8PSBkc3RfbXR1KCZydGgtPmRzdCkpIHsKKwkJCQkJaWYgKG10dSA8IGRzdF9tdHUoJnJ0aC0+ZHN0KSkgeworCQkJCQkJZHN0X2NvbmZpcm0oJnJ0aC0+ZHN0KTsKIAkJCQkJCWlmIChtdHUgPCBpcF9ydF9taW5fcG10dSkgewogCQkJCQkJCW10dSA9IGlwX3J0X21pbl9wbXR1OwotCQkJCQkJCXJ0aC0+dS5kc3QubWV0cmljc1tSVEFYX0xPQ0stMV0gfD0KKwkJCQkJCQlydGgtPmRzdC5tZXRyaWNzW1JUQVhfTE9DSy0xXSB8PQogCQkJCQkJCQkoMSA8PCBSVEFYX01UVSk7CiAJCQkJCQl9Ci0JCQkJCQlydGgtPnUuZHN0Lm1ldHJpY3NbUlRBWF9NVFUtMV0gPSBtdHU7Ci0JCQkJCQlkc3Rfc2V0X2V4cGlyZXMoJnJ0aC0+dS5kc3QsCisJCQkJCQlydGgtPmRzdC5tZXRyaWNzW1JUQVhfTVRVLTFdID0gbXR1OworCQkJCQkJZHN0X3NldF9leHBpcmVzKCZydGgtPmRzdCwKIAkJCQkJCQlpcF9ydF9tdHVfZXhwaXJlcyk7CiAJCQkJCX0KIAkJCQkJZXN0X210dSA9IG10dTsKQEAgLTE3NTUsNyArMTc1MSw3IEBACiAKIAlydCA9IHNrYl9ydGFibGUoc2tiKTsKIAlpZiAocnQpCi0JCWRzdF9zZXRfZXhwaXJlcygmcnQtPnUuZHN0LCAwKTsKKwkJZHN0X3NldF9leHBpcmVzKCZydC0+ZHN0LCAwKTsKIH0KIAogc3RhdGljIGludCBpcF9ydF9idWcoc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTE3ODMsMTEgKzE3NzksMTEgQEAKIAogCWlmIChydC0+ZmwuaWlmID09IDApCiAJCXNyYyA9IHJ0LT5ydF9zcmM7Ci0JZWxzZSBpZiAoZmliX2xvb2t1cChkZXZfbmV0KHJ0LT51LmRzdC5kZXYpLCAmcnQtPmZsLCAmcmVzKSA9PSAwKSB7CisJZWxzZSBpZiAoZmliX2xvb2t1cChkZXZfbmV0KHJ0LT5kc3QuZGV2KSwgJnJ0LT5mbCwgJnJlcykgPT0gMCkgewogCQlzcmMgPSBGSUJfUkVTX1BSRUZTUkMocmVzKTsKIAkJZmliX3Jlc19wdXQoJnJlcyk7CiAJfSBlbHNlCi0JCXNyYyA9IGluZXRfc2VsZWN0X2FkZHIocnQtPnUuZHN0LmRldiwgcnQtPnJ0X2dhdGV3YXksCisJCXNyYyA9IGluZXRfc2VsZWN0X2FkZHIocnQtPmRzdC5kZXYsIHJ0LT5ydF9nYXRld2F5LAogCQkJCQlSVF9TQ09QRV9VTklWRVJTRSk7CiAJbWVtY3B5KGFkZHIsICZzcmMsIDQpOwogfQpAQCAtMTc5NSwxMCArMTc5MSwxMCBAQAogI2lmZGVmIENPTkZJR19ORVRfQ0xTX1JPVVRFCiBzdGF0aWMgdm9pZCBzZXRfY2xhc3NfdGFnKHN0cnVjdCBydGFibGUgKnJ0LCB1MzIgdGFnKQogewotCWlmICghKHJ0LT51LmRzdC50Y2xhc3NpZCAmIDB4RkZGRikpCi0JCXJ0LT51LmRzdC50Y2xhc3NpZCB8PSB0YWcgJiAweEZGRkY7Ci0JaWYgKCEocnQtPnUuZHN0LnRjbGFzc2lkICYgMHhGRkZGMDAwMCkpCi0JCXJ0LT51LmRzdC50Y2xhc3NpZCB8PSB0YWcgJiAweEZGRkYwMDAwOworCWlmICghKHJ0LT5kc3QudGNsYXNzaWQgJiAweEZGRkYpKQorCQlydC0+ZHN0LnRjbGFzc2lkIHw9IHRhZyAmIDB4RkZGRjsKKwlpZiAoIShydC0+ZHN0LnRjbGFzc2lkICYgMHhGRkZGMDAwMCkpCisJCXJ0LT5kc3QudGNsYXNzaWQgfD0gdGFnICYgMHhGRkZGMDAwMDsKIH0KICNlbmRpZgogCkBAIC0xODEwLDMwICsxODA2LDMwIEBACiAJCWlmIChGSUJfUkVTX0dXKCpyZXMpICYmCiAJCSAgICBGSUJfUkVTX05IKCpyZXMpLm5oX3Njb3BlID09IFJUX1NDT1BFX0xJTkspCiAJCQlydC0+cnRfZ2F0ZXdheSA9IEZJQl9SRVNfR1coKnJlcyk7Ci0JCW1lbWNweShydC0+dS5kc3QubWV0cmljcywgZmktPmZpYl9tZXRyaWNzLAotCQkgICAgICAgc2l6ZW9mKHJ0LT51LmRzdC5tZXRyaWNzKSk7CisJCW1lbWNweShydC0+ZHN0Lm1ldHJpY3MsIGZpLT5maWJfbWV0cmljcywKKwkJICAgICAgIHNpemVvZihydC0+ZHN0Lm1ldHJpY3MpKTsKIAkJaWYgKGZpLT5maWJfbXR1ID09IDApIHsKLQkJCXJ0LT51LmRzdC5tZXRyaWNzW1JUQVhfTVRVLTFdID0gcnQtPnUuZHN0LmRldi0+bXR1OwotCQkJaWYgKGRzdF9tZXRyaWNfbG9ja2VkKCZydC0+dS5kc3QsIFJUQVhfTVRVKSAmJgorCQkJcnQtPmRzdC5tZXRyaWNzW1JUQVhfTVRVLTFdID0gcnQtPmRzdC5kZXYtPm10dTsKKwkJCWlmIChkc3RfbWV0cmljX2xvY2tlZCgmcnQtPmRzdCwgUlRBWF9NVFUpICYmCiAJCQkgICAgcnQtPnJ0X2dhdGV3YXkgIT0gcnQtPnJ0X2RzdCAmJgotCQkJICAgIHJ0LT51LmRzdC5kZXYtPm10dSA+IDU3NikKLQkJCQlydC0+dS5kc3QubWV0cmljc1tSVEFYX01UVS0xXSA9IDU3NjsKKwkJCSAgICBydC0+ZHN0LmRldi0+bXR1ID4gNTc2KQorCQkJCXJ0LT5kc3QubWV0cmljc1tSVEFYX01UVS0xXSA9IDU3NjsKIAkJfQogI2lmZGVmIENPTkZJR19ORVRfQ0xTX1JPVVRFCi0JCXJ0LT51LmRzdC50Y2xhc3NpZCA9IEZJQl9SRVNfTkgoKnJlcykubmhfdGNsYXNzaWQ7CisJCXJ0LT5kc3QudGNsYXNzaWQgPSBGSUJfUkVTX05IKCpyZXMpLm5oX3RjbGFzc2lkOwogI2VuZGlmCiAJfSBlbHNlCi0JCXJ0LT51LmRzdC5tZXRyaWNzW1JUQVhfTVRVLTFdPSBydC0+dS5kc3QuZGV2LT5tdHU7CisJCXJ0LT5kc3QubWV0cmljc1tSVEFYX01UVS0xXT0gcnQtPmRzdC5kZXYtPm10dTsKIAotCWlmIChkc3RfbWV0cmljKCZydC0+dS5kc3QsIFJUQVhfSE9QTElNSVQpID09IDApCi0JCXJ0LT51LmRzdC5tZXRyaWNzW1JUQVhfSE9QTElNSVQtMV0gPSBzeXNjdGxfaXBfZGVmYXVsdF90dGw7Ci0JaWYgKGRzdF9tdHUoJnJ0LT51LmRzdCkgPiBJUF9NQVhfTVRVKQotCQlydC0+dS5kc3QubWV0cmljc1tSVEFYX01UVS0xXSA9IElQX01BWF9NVFU7Ci0JaWYgKGRzdF9tZXRyaWMoJnJ0LT51LmRzdCwgUlRBWF9BRFZNU1MpID09IDApCi0JCXJ0LT51LmRzdC5tZXRyaWNzW1JUQVhfQURWTVNTLTFdID0gbWF4X3QodW5zaWduZWQgaW50LCBydC0+dS5kc3QuZGV2LT5tdHUgLSA0MCwKKwlpZiAoZHN0X21ldHJpYygmcnQtPmRzdCwgUlRBWF9IT1BMSU1JVCkgPT0gMCkKKwkJcnQtPmRzdC5tZXRyaWNzW1JUQVhfSE9QTElNSVQtMV0gPSBzeXNjdGxfaXBfZGVmYXVsdF90dGw7CisJaWYgKGRzdF9tdHUoJnJ0LT5kc3QpID4gSVBfTUFYX01UVSkKKwkJcnQtPmRzdC5tZXRyaWNzW1JUQVhfTVRVLTFdID0gSVBfTUFYX01UVTsKKwlpZiAoZHN0X21ldHJpYygmcnQtPmRzdCwgUlRBWF9BRFZNU1MpID09IDApCisJCXJ0LT5kc3QubWV0cmljc1tSVEFYX0FEVk1TUy0xXSA9IG1heF90KHVuc2lnbmVkIGludCwgcnQtPmRzdC5kZXYtPm10dSAtIDQwLAogCQkJCSAgICAgICBpcF9ydF9taW5fYWR2bXNzKTsKLQlpZiAoZHN0X21ldHJpYygmcnQtPnUuZHN0LCBSVEFYX0FEVk1TUykgPiA2NTUzNSAtIDQwKQotCQlydC0+dS5kc3QubWV0cmljc1tSVEFYX0FEVk1TUy0xXSA9IDY1NTM1IC0gNDA7CisJaWYgKGRzdF9tZXRyaWMoJnJ0LT5kc3QsIFJUQVhfQURWTVNTKSA+IDY1NTM1IC0gNDApCisJCXJ0LT5kc3QubWV0cmljc1tSVEFYX0FEVk1TUy0xXSA9IDY1NTM1IC0gNDA7CiAKICNpZmRlZiBDT05GSUdfTkVUX0NMU19ST1VURQogI2lmZGVmIENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMKQEAgLTE4NDQsMTQgKzE4NDAsMTYgQEAKIAlydC0+cnRfdHlwZSA9IHJlcy0+dHlwZTsKIH0KIAorLyogY2FsbGVkIGluIHJjdV9yZWFkX2xvY2soKSBzZWN0aW9uICovCiBzdGF0aWMgaW50IGlwX3JvdXRlX2lucHV0X21jKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLAogCQkJCXU4IHRvcywgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG91cikKIHsKLQl1bnNpZ25lZCBoYXNoOworCXVuc2lnbmVkIGludCBoYXNoOwogCXN0cnVjdCBydGFibGUgKnJ0aDsKIAlfX2JlMzIgc3BlY19kc3Q7Ci0Jc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gaW5fZGV2X2dldChkZXYpOworCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTsKIAl1MzIgaXRhZyA9IDA7CisJaW50IGVycjsKIAogCS8qIFByaW1hcnkgc2FuaXR5IGNoZWNrcy4gKi8KIApAQCAtMTg2NiwyMSArMTg2NCwyMyBAQAogCQlpZiAoIWlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGRhZGRyKSkKIAkJCWdvdG8gZV9pbnZhbDsKIAkJc3BlY19kc3QgPSBpbmV0X3NlbGVjdF9hZGRyKGRldiwgMCwgUlRfU0NPUEVfTElOSyk7Ci0JfSBlbHNlIGlmIChmaWJfdmFsaWRhdGVfc291cmNlKHNhZGRyLCAwLCB0b3MsIDAsCi0JCQkJCWRldiwgJnNwZWNfZHN0LCAmaXRhZywgMCkgPCAwKQotCQlnb3RvIGVfaW52YWw7Ci0KKwl9IGVsc2UgeworCQllcnIgPSBmaWJfdmFsaWRhdGVfc291cmNlKHNhZGRyLCAwLCB0b3MsIDAsIGRldiwgJnNwZWNfZHN0LAorCQkJCQkgICZpdGFnLCAwKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVfZXJyOworCX0KIAlydGggPSBkc3RfYWxsb2MoJmlwdjRfZHN0X29wcyk7CiAJaWYgKCFydGgpCiAJCWdvdG8gZV9ub2J1ZnM7CiAKLQlydGgtPnUuZHN0Lm91dHB1dCA9IGlwX3J0X2J1ZzsKLQlydGgtPnUuZHN0Lm9ic29sZXRlID0gLTE7CisJcnRoLT5kc3Qub3V0cHV0ID0gaXBfcnRfYnVnOworCXJ0aC0+ZHN0Lm9ic29sZXRlID0gLTE7CiAKLQlhdG9taWNfc2V0KCZydGgtPnUuZHN0Ll9fcmVmY250LCAxKTsKLQlydGgtPnUuZHN0LmZsYWdzPSBEU1RfSE9TVDsKKwlhdG9taWNfc2V0KCZydGgtPmRzdC5fX3JlZmNudCwgMSk7CisJcnRoLT5kc3QuZmxhZ3M9IERTVF9IT1NUOwogCWlmIChJTl9ERVZfQ09ORl9HRVQoaW5fZGV2LCBOT1BPTElDWSkpCi0JCXJ0aC0+dS5kc3QuZmxhZ3MgfD0gRFNUX05PUE9MSUNZOworCQlydGgtPmRzdC5mbGFncyB8PSBEU1RfTk9QT0xJQ1k7CiAJcnRoLT5mbC5mbDRfZHN0CT0gZGFkZHI7CiAJcnRoLT5ydF9kc3QJPSBkYWRkcjsKIAlydGgtPmZsLmZsNF90b3MJPSB0b3M7CkBAIC0xODg4LDEzICsxODg4LDEzIEBACiAJcnRoLT5mbC5mbDRfc3JjCT0gc2FkZHI7CiAJcnRoLT5ydF9zcmMJPSBzYWRkcjsKICNpZmRlZiBDT05GSUdfTkVUX0NMU19ST1VURQotCXJ0aC0+dS5kc3QudGNsYXNzaWQgPSBpdGFnOworCXJ0aC0+ZHN0LnRjbGFzc2lkID0gaXRhZzsKICNlbmRpZgogCXJ0aC0+cnRfaWlmCT0KIAlydGgtPmZsLmlpZgk9IGRldi0+aWZpbmRleDsKLQlydGgtPnUuZHN0LmRldgk9IGluaXRfbmV0Lmxvb3BiYWNrX2RldjsKLQlkZXZfaG9sZChydGgtPnUuZHN0LmRldik7Ci0JcnRoLT5pZGV2CT0gaW5fZGV2X2dldChydGgtPnUuZHN0LmRldik7CisJcnRoLT5kc3QuZGV2CT0gaW5pdF9uZXQubG9vcGJhY2tfZGV2OworCWRldl9ob2xkKHJ0aC0+ZHN0LmRldik7CisJcnRoLT5pZGV2CT0gaW5fZGV2X2dldChydGgtPmRzdC5kZXYpOwogCXJ0aC0+Zmwub2lmCT0gMDsKIAlydGgtPnJ0X2dhdGV3YXkJPSBkYWRkcjsKIAlydGgtPnJ0X3NwZWNfZHN0PSBzcGVjX2RzdDsKQEAgLTE5MDIsMjcgKzE5MDIsMjUgQEAKIAlydGgtPnJ0X2ZsYWdzCT0gUlRDRl9NVUxUSUNBU1Q7CiAJcnRoLT5ydF90eXBlCT0gUlROX01VTFRJQ0FTVDsKIAlpZiAob3VyKSB7Ci0JCXJ0aC0+dS5kc3QuaW5wdXQ9IGlwX2xvY2FsX2RlbGl2ZXI7CisJCXJ0aC0+ZHN0LmlucHV0PSBpcF9sb2NhbF9kZWxpdmVyOwogCQlydGgtPnJ0X2ZsYWdzIHw9IFJUQ0ZfTE9DQUw7CiAJfQogCiAjaWZkZWYgQ09ORklHX0lQX01ST1VURQogCWlmICghaXB2NF9pc19sb2NhbF9tdWx0aWNhc3QoZGFkZHIpICYmIElOX0RFVl9NRk9SV0FSRChpbl9kZXYpKQotCQlydGgtPnUuZHN0LmlucHV0ID0gaXBfbXJfaW5wdXQ7CisJCXJ0aC0+ZHN0LmlucHV0ID0gaXBfbXJfaW5wdXQ7CiAjZW5kaWYKIAlSVF9DQUNIRV9TVEFUX0lOQyhpbl9zbG93X21jKTsKIAotCWluX2Rldl9wdXQoaW5fZGV2KTsKIAloYXNoID0gcnRfaGFzaChkYWRkciwgc2FkZHIsIGRldi0+aWZpbmRleCwgcnRfZ2VuaWQoZGV2X25ldChkZXYpKSk7CiAJcmV0dXJuIHJ0X2ludGVybl9oYXNoKGhhc2gsIHJ0aCwgTlVMTCwgc2tiLCBkZXYtPmlmaW5kZXgpOwogCiBlX25vYnVmczoKLQlpbl9kZXZfcHV0KGluX2Rldik7CiAJcmV0dXJuIC1FTk9CVUZTOwotCiBlX2ludmFsOgotCWluX2Rldl9wdXQoaW5fZGV2KTsKIAlyZXR1cm4gLUVJTlZBTDsKK2VfZXJyOgorCXJldHVybiBlcnI7CiB9CiAKIApAQCAtMTk1NiwyMiArMTk1NCwyMiBAQAogI2VuZGlmCiB9CiAKKy8qIGNhbGxlZCBpbiByY3VfcmVhZF9sb2NrKCkgc2VjdGlvbiAqLwogc3RhdGljIGludCBfX21rcm91dGVfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsCiAJCQkgICBzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsCiAJCQkgICBfX2JlMzIgZGFkZHIsIF9fYmUzMiBzYWRkciwgdTMyIHRvcywKIAkJCSAgIHN0cnVjdCBydGFibGUgKipyZXN1bHQpCiB7Ci0KIAlzdHJ1Y3QgcnRhYmxlICpydGg7CiAJaW50IGVycjsKIAlzdHJ1Y3QgaW5fZGV2aWNlICpvdXRfZGV2OwotCXVuc2lnbmVkIGZsYWdzID0gMDsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOwogCV9fYmUzMiBzcGVjX2RzdDsKIAl1MzIgaXRhZzsKIAogCS8qIGdldCBhIHdvcmtpbmcgcmVmZXJlbmNlIHRvIHRoZSBvdXRwdXQgZGV2aWNlICovCi0Jb3V0X2RldiA9IGluX2Rldl9nZXQoRklCX1JFU19ERVYoKnJlcykpOworCW91dF9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KEZJQl9SRVNfREVWKCpyZXMpKTsKIAlpZiAob3V0X2RldiA9PSBOVUxMKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9DUklUICJCdWcgaW4gaXBfcm91dGVfaW5wdXQiIFwKQEAgLTE5ODYsNyArMTk4NCw2IEBACiAJCWlwX2hhbmRsZV9tYXJ0aWFuX3NvdXJjZShpbl9kZXYtPmRldiwgaW5fZGV2LCBza2IsIGRhZGRyLAogCQkJCQkgc2FkZHIpOwogCi0JCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gY2xlYW51cDsKIAl9CiAKQEAgLTIwMjAsMTIgKzIwMTcsMTIgQEAKIAkJZ290byBjbGVhbnVwOwogCX0KIAotCWF0b21pY19zZXQoJnJ0aC0+dS5kc3QuX19yZWZjbnQsIDEpOwotCXJ0aC0+dS5kc3QuZmxhZ3M9IERTVF9IT1NUOworCWF0b21pY19zZXQoJnJ0aC0+ZHN0Ll9fcmVmY250LCAxKTsKKwlydGgtPmRzdC5mbGFncz0gRFNUX0hPU1Q7CiAJaWYgKElOX0RFVl9DT05GX0dFVChpbl9kZXYsIE5PUE9MSUNZKSkKLQkJcnRoLT51LmRzdC5mbGFncyB8PSBEU1RfTk9QT0xJQ1k7CisJCXJ0aC0+ZHN0LmZsYWdzIHw9IERTVF9OT1BPTElDWTsKIAlpZiAoSU5fREVWX0NPTkZfR0VUKG91dF9kZXYsIE5PWEZSTSkpCi0JCXJ0aC0+dS5kc3QuZmxhZ3MgfD0gRFNUX05PWEZSTTsKKwkJcnRoLT5kc3QuZmxhZ3MgfD0gRFNUX05PWEZSTTsKIAlydGgtPmZsLmZsNF9kc3QJPSBkYWRkcjsKIAlydGgtPnJ0X2RzdAk9IGRhZGRyOwogCXJ0aC0+ZmwuZmw0X3Rvcwk9IHRvczsKQEAgLTIwMzUsMTYgKzIwMzIsMTYgQEAKIAlydGgtPnJ0X2dhdGV3YXkJPSBkYWRkcjsKIAlydGgtPnJ0X2lpZiAJPQogCQlydGgtPmZsLmlpZgk9IGluX2Rldi0+ZGV2LT5pZmluZGV4OwotCXJ0aC0+dS5kc3QuZGV2CT0gKG91dF9kZXYpLT5kZXY7Ci0JZGV2X2hvbGQocnRoLT51LmRzdC5kZXYpOwotCXJ0aC0+aWRldgk9IGluX2Rldl9nZXQocnRoLT51LmRzdC5kZXYpOworCXJ0aC0+ZHN0LmRldgk9IChvdXRfZGV2KS0+ZGV2OworCWRldl9ob2xkKHJ0aC0+ZHN0LmRldik7CisJcnRoLT5pZGV2CT0gaW5fZGV2X2dldChydGgtPmRzdC5kZXYpOwogCXJ0aC0+Zmwub2lmIAk9IDA7CiAJcnRoLT5ydF9zcGVjX2RzdD0gc3BlY19kc3Q7CiAKLQlydGgtPnUuZHN0Lm9ic29sZXRlID0gLTE7Ci0JcnRoLT51LmRzdC5pbnB1dCA9IGlwX2ZvcndhcmQ7Ci0JcnRoLT51LmRzdC5vdXRwdXQgPSBpcF9vdXRwdXQ7Ci0JcnRoLT5ydF9nZW5pZCA9IHJ0X2dlbmlkKGRldl9uZXQocnRoLT51LmRzdC5kZXYpKTsKKwlydGgtPmRzdC5vYnNvbGV0ZSA9IC0xOworCXJ0aC0+ZHN0LmlucHV0ID0gaXBfZm9yd2FyZDsKKwlydGgtPmRzdC5vdXRwdXQgPSBpcF9vdXRwdXQ7CisJcnRoLT5ydF9nZW5pZCA9IHJ0X2dlbmlkKGRldl9uZXQocnRoLT5kc3QuZGV2KSk7CiAKIAlydF9zZXRfbmV4dGhvcChydGgsIHJlcywgaXRhZyk7CiAKQEAgLTIwNTMsOCArMjA1MCw2IEBACiAJKnJlc3VsdCA9IHJ0aDsKIAllcnIgPSAwOwogIGNsZWFudXA6Ci0JLyogcmVsZWFzZSB0aGUgd29ya2luZyByZWZlcmVuY2UgdG8gdGhlIG91dHB1dCBkZXZpY2UgKi8KLQlpbl9kZXZfcHV0KG91dF9kZXYpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTIwODAsNyArMjA3NSw3IEBACiAKIAkvKiBwdXQgaXQgaW50byB0aGUgY2FjaGUgKi8KIAloYXNoID0gcnRfaGFzaChkYWRkciwgc2FkZHIsIGZsLT5paWYsCi0JCSAgICAgICBydF9nZW5pZChkZXZfbmV0KHJ0aC0+dS5kc3QuZGV2KSkpOworCQkgICAgICAgcnRfZ2VuaWQoZGV2X25ldChydGgtPmRzdC5kZXYpKSk7CiAJcmV0dXJuIHJ0X2ludGVybl9oYXNoKGhhc2gsIHJ0aCwgTlVMTCwgc2tiLCBmbC0+aWlmKTsKIH0KIApAQCAtMjA5OCw3ICsyMDkzLDcgQEAKIAkJCSAgICAgICB1OCB0b3MsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZpYl9yZXN1bHQgcmVzOwotCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGluX2Rldl9nZXQoZGV2KTsKKwlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7CiAJc3RydWN0IGZsb3dpIGZsID0geyAubmxfdSA9IHsgLmlwNF91ID0KIAkJCQkgICAgICB7IC5kYWRkciA9IGRhZGRyLAogCQkJCQkuc2FkZHIgPSBzYWRkciwKQEAgLTIxNTgsMTMgKzIxNTMsMTIgQEAKIAkJZ290byBicmRfaW5wdXQ7CiAKIAlpZiAocmVzLnR5cGUgPT0gUlROX0xPQ0FMKSB7Ci0JCWludCByZXN1bHQ7Ci0JCXJlc3VsdCA9IGZpYl92YWxpZGF0ZV9zb3VyY2Uoc2FkZHIsIGRhZGRyLCB0b3MsCisJCWVyciA9IGZpYl92YWxpZGF0ZV9zb3VyY2Uoc2FkZHIsIGRhZGRyLCB0b3MsCiAJCQkJCSAgICAgbmV0LT5sb29wYmFja19kZXYtPmlmaW5kZXgsCiAJCQkJCSAgICAgZGV2LCAmc3BlY19kc3QsICZpdGFnLCBza2ItPm1hcmspOwotCQlpZiAocmVzdWx0IDwgMCkKLQkJCWdvdG8gbWFydGlhbl9zb3VyY2U7Ci0JCWlmIChyZXN1bHQpCisJCWlmIChlcnIgPCAwKQorCQkJZ290byBtYXJ0aWFuX3NvdXJjZV9rZWVwX2VycjsKKwkJaWYgKGVycikKIAkJCWZsYWdzIHw9IFJUQ0ZfRElSRUNUU1JDOwogCQlzcGVjX2RzdCA9IGRhZGRyOwogCQlnb3RvIGxvY2FsX2lucHV0OwpAQCAtMjE3Nyw3ICsyMTcxLDYgQEAKIAogCWVyciA9IGlwX21rcm91dGVfaW5wdXQoc2tiLCAmcmVzLCAmZmwsIGluX2RldiwgZGFkZHIsIHNhZGRyLCB0b3MpOwogZG9uZToKLQlpbl9kZXZfcHV0KGluX2Rldik7CiAJaWYgKGZyZWVfcmVzKQogCQlmaWJfcmVzX3B1dCgmcmVzKTsKIG91dDoJcmV0dXJuIGVycjsKQEAgLTIxOTIsNyArMjE4NSw3IEBACiAJCWVyciA9IGZpYl92YWxpZGF0ZV9zb3VyY2Uoc2FkZHIsIDAsIHRvcywgMCwgZGV2LCAmc3BlY19kc3QsCiAJCQkJCSAgJml0YWcsIHNrYi0+bWFyayk7CiAJCWlmIChlcnIgPCAwKQotCQkJZ290byBtYXJ0aWFuX3NvdXJjZTsKKwkJCWdvdG8gbWFydGlhbl9zb3VyY2Vfa2VlcF9lcnI7CiAJCWlmIChlcnIpCiAJCQlmbGFncyB8PSBSVENGX0RJUkVDVFNSQzsKIAl9CkBAIC0yMjA1LDE0ICsyMTk4LDE0IEBACiAJaWYgKCFydGgpCiAJCWdvdG8gZV9ub2J1ZnM7CiAKLQlydGgtPnUuZHN0Lm91dHB1dD0gaXBfcnRfYnVnOwotCXJ0aC0+dS5kc3Qub2Jzb2xldGUgPSAtMTsKKwlydGgtPmRzdC5vdXRwdXQ9IGlwX3J0X2J1ZzsKKwlydGgtPmRzdC5vYnNvbGV0ZSA9IC0xOwogCXJ0aC0+cnRfZ2VuaWQgPSBydF9nZW5pZChuZXQpOwogCi0JYXRvbWljX3NldCgmcnRoLT51LmRzdC5fX3JlZmNudCwgMSk7Ci0JcnRoLT51LmRzdC5mbGFncz0gRFNUX0hPU1Q7CisJYXRvbWljX3NldCgmcnRoLT5kc3QuX19yZWZjbnQsIDEpOworCXJ0aC0+ZHN0LmZsYWdzPSBEU1RfSE9TVDsKIAlpZiAoSU5fREVWX0NPTkZfR0VUKGluX2RldiwgTk9QT0xJQ1kpKQotCQlydGgtPnUuZHN0LmZsYWdzIHw9IERTVF9OT1BPTElDWTsKKwkJcnRoLT5kc3QuZmxhZ3MgfD0gRFNUX05PUE9MSUNZOwogCXJ0aC0+ZmwuZmw0X2RzdAk9IGRhZGRyOwogCXJ0aC0+cnRfZHN0CT0gZGFkZHI7CiAJcnRoLT5mbC5mbDRfdG9zCT0gdG9zOwpAQCAtMjIyMCwyMCArMjIxMywyMCBAQAogCXJ0aC0+ZmwuZmw0X3NyYwk9IHNhZGRyOwogCXJ0aC0+cnRfc3JjCT0gc2FkZHI7CiAjaWZkZWYgQ09ORklHX05FVF9DTFNfUk9VVEUKLQlydGgtPnUuZHN0LnRjbGFzc2lkID0gaXRhZzsKKwlydGgtPmRzdC50Y2xhc3NpZCA9IGl0YWc7CiAjZW5kaWYKIAlydGgtPnJ0X2lpZgk9CiAJcnRoLT5mbC5paWYJPSBkZXYtPmlmaW5kZXg7Ci0JcnRoLT51LmRzdC5kZXYJPSBuZXQtPmxvb3BiYWNrX2RldjsKLQlkZXZfaG9sZChydGgtPnUuZHN0LmRldik7Ci0JcnRoLT5pZGV2CT0gaW5fZGV2X2dldChydGgtPnUuZHN0LmRldik7CisJcnRoLT5kc3QuZGV2CT0gbmV0LT5sb29wYmFja19kZXY7CisJZGV2X2hvbGQocnRoLT5kc3QuZGV2KTsKKwlydGgtPmlkZXYJPSBpbl9kZXZfZ2V0KHJ0aC0+ZHN0LmRldik7CiAJcnRoLT5ydF9nYXRld2F5CT0gZGFkZHI7CiAJcnRoLT5ydF9zcGVjX2RzdD0gc3BlY19kc3Q7Ci0JcnRoLT51LmRzdC5pbnB1dD0gaXBfbG9jYWxfZGVsaXZlcjsKKwlydGgtPmRzdC5pbnB1dD0gaXBfbG9jYWxfZGVsaXZlcjsKIAlydGgtPnJ0X2ZsYWdzIAk9IGZsYWdzfFJUQ0ZfTE9DQUw7CiAJaWYgKHJlcy50eXBlID09IFJUTl9VTlJFQUNIQUJMRSkgewotCQlydGgtPnUuZHN0LmlucHV0PSBpcF9lcnJvcjsKLQkJcnRoLT51LmRzdC5lcnJvcj0gLWVycjsKKwkJcnRoLT5kc3QuaW5wdXQ9IGlwX2Vycm9yOworCQlydGgtPmRzdC5lcnJvcj0gLWVycjsKIAkJcnRoLT5ydF9mbGFncyAJJj0gflJUQ0ZfTE9DQUw7CiAJfQogCXJ0aC0+cnRfdHlwZQk9IHJlcy50eXBlOwpAQCAtMjI3Myw4ICsyMjY2LDEwIEBACiAJZ290byBkb25lOwogCiBtYXJ0aWFuX3NvdXJjZToKKwllcnIgPSAtRUlOVkFMOworbWFydGlhbl9zb3VyY2Vfa2VlcF9lcnI6CiAJaXBfaGFuZGxlX21hcnRpYW5fc291cmNlKGRldiwgaW5fZGV2LCBza2IsIGRhZGRyLCBzYWRkcik7Ci0JZ290byBlX2ludmFsOworCWdvdG8gZG9uZTsKIH0KIAogaW50IGlwX3JvdXRlX2lucHV0X2NvbW1vbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgZGFkZHIsIF9fYmUzMiBzYWRkciwKQEAgLTIyODQsMzIgKzIyNzksMzQgQEAKIAl1bnNpZ25lZAloYXNoOwogCWludCBpaWYgPSBkZXYtPmlmaW5kZXg7CiAJc3RydWN0IG5ldCAqbmV0OworCWludCByZXM7CiAKIAluZXQgPSBkZXZfbmV0KGRldik7CiAKKwlyY3VfcmVhZF9sb2NrKCk7CisKIAlpZiAoIXJ0X2NhY2hpbmcobmV0KSkKIAkJZ290byBza2lwX2NhY2hlOwogCiAJdG9zICY9IElQVE9TX1JUX01BU0s7CiAJaGFzaCA9IHJ0X2hhc2goZGFkZHIsIHNhZGRyLCBpaWYsIHJ0X2dlbmlkKG5ldCkpOwogCi0JcmN1X3JlYWRfbG9jaygpOwogCWZvciAocnRoID0gcmN1X2RlcmVmZXJlbmNlKHJ0X2hhc2hfdGFibGVbaGFzaF0uY2hhaW4pOyBydGg7Ci0JICAgICBydGggPSByY3VfZGVyZWZlcmVuY2UocnRoLT51LmRzdC5ydF9uZXh0KSkgeworCSAgICAgcnRoID0gcmN1X2RlcmVmZXJlbmNlKHJ0aC0+ZHN0LnJ0X25leHQpKSB7CiAJCWlmICgoKChfX2ZvcmNlIHUzMilydGgtPmZsLmZsNF9kc3QgXiAoX19mb3JjZSB1MzIpZGFkZHIpIHwKIAkJICAgICAoKF9fZm9yY2UgdTMyKXJ0aC0+ZmwuZmw0X3NyYyBeIChfX2ZvcmNlIHUzMilzYWRkcikgfAogCQkgICAgIChydGgtPmZsLmlpZiBeIGlpZikgfAogCQkgICAgIHJ0aC0+Zmwub2lmIHwKIAkJICAgICAocnRoLT5mbC5mbDRfdG9zIF4gdG9zKSkgPT0gMCAmJgogCQkgICAgcnRoLT5mbC5tYXJrID09IHNrYi0+bWFyayAmJgotCQkgICAgbmV0X2VxKGRldl9uZXQocnRoLT51LmRzdC5kZXYpLCBuZXQpICYmCisJCSAgICBuZXRfZXEoZGV2X25ldChydGgtPmRzdC5kZXYpLCBuZXQpICYmCiAJCSAgICAhcnRfaXNfZXhwaXJlZChydGgpKSB7CiAJCQlpZiAobm9yZWYpIHsKLQkJCQlkc3RfdXNlX25vcmVmKCZydGgtPnUuZHN0LCBqaWZmaWVzKTsKLQkJCQlza2JfZHN0X3NldF9ub3JlZihza2IsICZydGgtPnUuZHN0KTsKKwkJCQlkc3RfdXNlX25vcmVmKCZydGgtPmRzdCwgamlmZmllcyk7CisJCQkJc2tiX2RzdF9zZXRfbm9yZWYoc2tiLCAmcnRoLT5kc3QpOwogCQkJfSBlbHNlIHsKLQkJCQlkc3RfdXNlKCZydGgtPnUuZHN0LCBqaWZmaWVzKTsKLQkJCQlza2JfZHN0X3NldChza2IsICZydGgtPnUuZHN0KTsKKwkJCQlkc3RfdXNlKCZydGgtPmRzdCwgamlmZmllcyk7CisJCQkJc2tiX2RzdF9zZXQoc2tiLCAmcnRoLT5kc3QpOwogCQkJfQogCQkJUlRfQ0FDSEVfU1RBVF9JTkMoaW5faGl0KTsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwpAQCAtMjMxNyw3ICsyMzE0LDYgQEAKIAkJfQogCQlSVF9DQUNIRV9TVEFUX0lOQyhpbl9obGlzdF9zZWFyY2gpOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAogc2tpcF9jYWNoZToKIAkvKiBNdWx0aWNhc3QgcmVjb2duaXRpb24gbG9naWMgaXMgbW92ZWQgZnJvbSByb3V0ZSBjYWNoZSB0byBoZXJlLgpAQCAtMjMzMiwxMiArMjMyOCwxMSBAQAogCSAgIHJvdXRlIGNhY2hlIGVudHJ5IGlzIGNyZWF0ZWQgZXZlbnR1YWxseS4KIAkgKi8KIAlpZiAoaXB2NF9pc19tdWx0aWNhc3QoZGFkZHIpKSB7Ci0JCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKKwkJc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpOwogCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJaWYgKChpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldikpICE9IE5VTEwpIHsKKwkJaWYgKGluX2RldikgewogCQkJaW50IG91ciA9IGlwX2NoZWNrX21jKGluX2RldiwgZGFkZHIsIHNhZGRyLAotCQkJCWlwX2hkcihza2IpLT5wcm90b2NvbCk7CisJCQkJCSAgICAgIGlwX2hkcihza2IpLT5wcm90b2NvbCk7CiAJCQlpZiAob3VyCiAjaWZkZWYgQ09ORklHX0lQX01ST1VURQogCQkJCXx8CkBAIC0yMzQ1LDE1ICsyMzQwLDE4IEBACiAJCQkgICAgIElOX0RFVl9NRk9SV0FSRChpbl9kZXYpKQogI2VuZGlmCiAJCQkgICApIHsKKwkJCQlpbnQgcmVzID0gaXBfcm91dGVfaW5wdXRfbWMoc2tiLCBkYWRkciwgc2FkZHIsCisJCQkJCQkJICAgIHRvcywgZGV2LCBvdXIpOwogCQkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJCXJldHVybiBpcF9yb3V0ZV9pbnB1dF9tYyhza2IsIGRhZGRyLCBzYWRkciwKLQkJCQkJCQkgdG9zLCBkZXYsIG91cik7CisJCQkJcmV0dXJuIHJlczsKIAkJCX0KIAkJfQogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXJldHVybiBpcF9yb3V0ZV9pbnB1dF9zbG93KHNrYiwgZGFkZHIsIHNhZGRyLCB0b3MsIGRldik7CisJcmVzID0gaXBfcm91dGVfaW5wdXRfc2xvdyhza2IsIGRhZGRyLCBzYWRkciwgdG9zLCBkZXYpOworCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiByZXM7CiB9CiBFWFBPUlRfU1lNQk9MKGlwX3JvdXRlX2lucHV0X2NvbW1vbik7CiAKQEAgLTI0MTUsMTIgKzI0MTMsMTIgQEAKIAkJZ290byBjbGVhbnVwOwogCX0KIAotCWF0b21pY19zZXQoJnJ0aC0+dS5kc3QuX19yZWZjbnQsIDEpOwotCXJ0aC0+dS5kc3QuZmxhZ3M9IERTVF9IT1NUOworCWF0b21pY19zZXQoJnJ0aC0+ZHN0Ll9fcmVmY250LCAxKTsKKwlydGgtPmRzdC5mbGFncz0gRFNUX0hPU1Q7CiAJaWYgKElOX0RFVl9DT05GX0dFVChpbl9kZXYsIE5PWEZSTSkpCi0JCXJ0aC0+dS5kc3QuZmxhZ3MgfD0gRFNUX05PWEZSTTsKKwkJcnRoLT5kc3QuZmxhZ3MgfD0gRFNUX05PWEZSTTsKIAlpZiAoSU5fREVWX0NPTkZfR0VUKGluX2RldiwgTk9QT0xJQ1kpKQotCQlydGgtPnUuZHN0LmZsYWdzIHw9IERTVF9OT1BPTElDWTsKKwkJcnRoLT5kc3QuZmxhZ3MgfD0gRFNUX05PUE9MSUNZOwogCiAJcnRoLT5mbC5mbDRfZHN0CT0gb2xkZmxwLT5mbDRfZHN0OwogCXJ0aC0+ZmwuZmw0X3Rvcwk9IHRvczsKQEAgLTI0MzIsMzUgKzI0MzAsMzUgQEAKIAlydGgtPnJ0X2lpZgk9IG9sZGZscC0+b2lmID8gOiBkZXZfb3V0LT5pZmluZGV4OwogCS8qIGdldCByZWZlcmVuY2VzIHRvIHRoZSBkZXZpY2VzIHRoYXQgYXJlIHRvIGJlIGhvbGQgYnkgdGhlIHJvdXRpbmcKIAkgICBjYWNoZSBlbnRyeSAqLwotCXJ0aC0+dS5kc3QuZGV2CT0gZGV2X291dDsKKwlydGgtPmRzdC5kZXYJPSBkZXZfb3V0OwogCWRldl9ob2xkKGRldl9vdXQpOwogCXJ0aC0+aWRldgk9IGluX2Rldl9nZXQoZGV2X291dCk7CiAJcnRoLT5ydF9nYXRld2F5ID0gZmwtPmZsNF9kc3Q7CiAJcnRoLT5ydF9zcGVjX2RzdD0gZmwtPmZsNF9zcmM7CiAKLQlydGgtPnUuZHN0Lm91dHB1dD1pcF9vdXRwdXQ7Ci0JcnRoLT51LmRzdC5vYnNvbGV0ZSA9IC0xOworCXJ0aC0+ZHN0Lm91dHB1dD1pcF9vdXRwdXQ7CisJcnRoLT5kc3Qub2Jzb2xldGUgPSAtMTsKIAlydGgtPnJ0X2dlbmlkID0gcnRfZ2VuaWQoZGV2X25ldChkZXZfb3V0KSk7CiAKIAlSVF9DQUNIRV9TVEFUX0lOQyhvdXRfc2xvd190b3QpOwogCiAJaWYgKGZsYWdzICYgUlRDRl9MT0NBTCkgewotCQlydGgtPnUuZHN0LmlucHV0ID0gaXBfbG9jYWxfZGVsaXZlcjsKKwkJcnRoLT5kc3QuaW5wdXQgPSBpcF9sb2NhbF9kZWxpdmVyOwogCQlydGgtPnJ0X3NwZWNfZHN0ID0gZmwtPmZsNF9kc3Q7CiAJfQogCWlmIChmbGFncyAmIChSVENGX0JST0FEQ0FTVCB8IFJUQ0ZfTVVMVElDQVNUKSkgewogCQlydGgtPnJ0X3NwZWNfZHN0ID0gZmwtPmZsNF9zcmM7CiAJCWlmIChmbGFncyAmIFJUQ0ZfTE9DQUwgJiYKIAkJICAgICEoZGV2X291dC0+ZmxhZ3MgJiBJRkZfTE9PUEJBQ0spKSB7Ci0JCQlydGgtPnUuZHN0Lm91dHB1dCA9IGlwX21jX291dHB1dDsKKwkJCXJ0aC0+ZHN0Lm91dHB1dCA9IGlwX21jX291dHB1dDsKIAkJCVJUX0NBQ0hFX1NUQVRfSU5DKG91dF9zbG93X21jKTsKIAkJfQogI2lmZGVmIENPTkZJR19JUF9NUk9VVEUKIAkJaWYgKHJlcy0+dHlwZSA9PSBSVE5fTVVMVElDQVNUKSB7CiAJCQlpZiAoSU5fREVWX01GT1JXQVJEKGluX2RldikgJiYKIAkJCSAgICAhaXB2NF9pc19sb2NhbF9tdWx0aWNhc3Qob2xkZmxwLT5mbDRfZHN0KSkgewotCQkJCXJ0aC0+dS5kc3QuaW5wdXQgPSBpcF9tcl9pbnB1dDsKLQkJCQlydGgtPnUuZHN0Lm91dHB1dCA9IGlwX21jX291dHB1dDsKKwkJCQlydGgtPmRzdC5pbnB1dCA9IGlwX21yX2lucHV0OworCQkJCXJ0aC0+ZHN0Lm91dHB1dCA9IGlwX21jX291dHB1dDsKIAkJCX0KIAkJfQogI2VuZGlmCkBAIC0yNzE1LDcgKzI3MTMsNyBAQAogCiAJcmN1X3JlYWRfbG9ja19iaCgpOwogCWZvciAocnRoID0gcmN1X2RlcmVmZXJlbmNlX2JoKHJ0X2hhc2hfdGFibGVbaGFzaF0uY2hhaW4pOyBydGg7Ci0JCXJ0aCA9IHJjdV9kZXJlZmVyZW5jZV9iaChydGgtPnUuZHN0LnJ0X25leHQpKSB7CisJCXJ0aCA9IHJjdV9kZXJlZmVyZW5jZV9iaChydGgtPmRzdC5ydF9uZXh0KSkgewogCQlpZiAocnRoLT5mbC5mbDRfZHN0ID09IGZscC0+Zmw0X2RzdCAmJgogCQkgICAgcnRoLT5mbC5mbDRfc3JjID09IGZscC0+Zmw0X3NyYyAmJgogCQkgICAgcnRoLT5mbC5paWYgPT0gMCAmJgpAQCAtMjcyMyw5ICsyNzIxLDkgQEAKIAkJICAgIHJ0aC0+ZmwubWFyayA9PSBmbHAtPm1hcmsgJiYKIAkJICAgICEoKHJ0aC0+ZmwuZmw0X3RvcyBeIGZscC0+Zmw0X3RvcykgJgogCQkJICAgIChJUFRPU19SVF9NQVNLIHwgUlRPX09OTElOSykpICYmCi0JCSAgICBuZXRfZXEoZGV2X25ldChydGgtPnUuZHN0LmRldiksIG5ldCkgJiYKKwkJICAgIG5ldF9lcShkZXZfbmV0KHJ0aC0+ZHN0LmRldiksIG5ldCkgJiYKIAkJICAgICFydF9pc19leHBpcmVkKHJ0aCkpIHsKLQkJCWRzdF91c2UoJnJ0aC0+dS5kc3QsIGppZmZpZXMpOworCQkJZHN0X3VzZSgmcnRoLT5kc3QsIGppZmZpZXMpOwogCQkJUlRfQ0FDSEVfU1RBVF9JTkMob3V0X2hpdCk7CiAJCQlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAkJCSpycCA9IHJ0aDsKQEAgLTI3MzgsNyArMjczNiw2IEBACiBzbG93X291dHB1dDoKIAlyZXR1cm4gaXBfcm91dGVfb3V0cHV0X3Nsb3cobmV0LCBycCwgZmxwKTsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoX19pcF9yb3V0ZV9vdXRwdXRfa2V5KTsKIAogc3RhdGljIHZvaWQgaXB2NF9ydF9ibGFja2hvbGVfdXBkYXRlX3BtdHUoc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgbXR1KQpAQCAtMjc2MiwxNSArMjc1OSwxNSBAQAogCQlkc3RfYWxsb2MoJmlwdjRfZHN0X2JsYWNraG9sZV9vcHMpOwogCiAJaWYgKHJ0KSB7Ci0JCXN0cnVjdCBkc3RfZW50cnkgKm5ldyA9ICZydC0+dS5kc3Q7CisJCXN0cnVjdCBkc3RfZW50cnkgKm5ldyA9ICZydC0+ZHN0OwogCiAJCWF0b21pY19zZXQoJm5ldy0+X19yZWZjbnQsIDEpOwogCQluZXctPl9fdXNlID0gMTsKIAkJbmV3LT5pbnB1dCA9IGRzdF9kaXNjYXJkOwogCQluZXctPm91dHB1dCA9IGRzdF9kaXNjYXJkOwotCQltZW1jcHkobmV3LT5tZXRyaWNzLCBvcnQtPnUuZHN0Lm1ldHJpY3MsIFJUQVhfTUFYKnNpemVvZih1MzIpKTsKKwkJbWVtY3B5KG5ldy0+bWV0cmljcywgb3J0LT5kc3QubWV0cmljcywgUlRBWF9NQVgqc2l6ZW9mKHUzMikpOwogCi0JCW5ldy0+ZGV2ID0gb3J0LT51LmRzdC5kZXY7CisJCW5ldy0+ZGV2ID0gb3J0LT5kc3QuZGV2OwogCQlpZiAobmV3LT5kZXYpCiAJCQlkZXZfaG9sZChuZXctPmRldik7CiAKQEAgLTI3OTQsNyArMjc5MSw3IEBACiAJCWRzdF9mcmVlKG5ldyk7CiAJfQogCi0JZHN0X3JlbGVhc2UoJigqcnApLT51LmRzdCk7CisJZHN0X3JlbGVhc2UoJigqcnApLT5kc3QpOwogCSpycCA9IHJ0OwogCXJldHVybiAocnQgPyAwIDogLUVOT01FTSk7CiB9CkBAIC0yODIyLDEzICsyODE5LDEzIEBACiAKIAlyZXR1cm4gMDsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoaXBfcm91dGVfb3V0cHV0X2Zsb3cpOwogCiBpbnQgaXBfcm91dGVfb3V0cHV0X2tleShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBydGFibGUgKipycCwgc3RydWN0IGZsb3dpICpmbHApCiB7CiAJcmV0dXJuIGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgcnAsIGZscCwgTlVMTCwgMCk7CiB9CitFWFBPUlRfU1lNQk9MKGlwX3JvdXRlX291dHB1dF9rZXkpOwogCiBzdGF0aWMgaW50IHJ0X2ZpbGxfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsCiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgZXZlbnQsCkBAIC0yODY0LDExICsyODYxLDExIEBACiAJCXItPnJ0bV9zcmNfbGVuID0gMzI7CiAJCU5MQV9QVVRfQkUzMihza2IsIFJUQV9TUkMsIHJ0LT5mbC5mbDRfc3JjKTsKIAl9Ci0JaWYgKHJ0LT51LmRzdC5kZXYpCi0JCU5MQV9QVVRfVTMyKHNrYiwgUlRBX09JRiwgcnQtPnUuZHN0LmRldi0+aWZpbmRleCk7CisJaWYgKHJ0LT5kc3QuZGV2KQorCQlOTEFfUFVUX1UzMihza2IsIFJUQV9PSUYsIHJ0LT5kc3QuZGV2LT5pZmluZGV4KTsKICNpZmRlZiBDT05GSUdfTkVUX0NMU19ST1VURQotCWlmIChydC0+dS5kc3QudGNsYXNzaWQpCi0JCU5MQV9QVVRfVTMyKHNrYiwgUlRBX0ZMT1csIHJ0LT51LmRzdC50Y2xhc3NpZCk7CisJaWYgKHJ0LT5kc3QudGNsYXNzaWQpCisJCU5MQV9QVVRfVTMyKHNrYiwgUlRBX0ZMT1csIHJ0LT5kc3QudGNsYXNzaWQpOwogI2VuZGlmCiAJaWYgKHJ0LT5mbC5paWYpCiAJCU5MQV9QVVRfQkUzMihza2IsIFJUQV9QUkVGU1JDLCBydC0+cnRfc3BlY19kc3QpOwpAQCAtMjg3OCwxMiArMjg3NSwxNiBAQAogCWlmIChydC0+cnRfZHN0ICE9IHJ0LT5ydF9nYXRld2F5KQogCQlOTEFfUFVUX0JFMzIoc2tiLCBSVEFfR0FURVdBWSwgcnQtPnJ0X2dhdGV3YXkpOwogCi0JaWYgKHJ0bmV0bGlua19wdXRfbWV0cmljcyhza2IsIHJ0LT51LmRzdC5tZXRyaWNzKSA8IDApCisJaWYgKHJ0bmV0bGlua19wdXRfbWV0cmljcyhza2IsIHJ0LT5kc3QubWV0cmljcykgPCAwKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAotCWVycm9yID0gcnQtPnUuZHN0LmVycm9yOwotCWV4cGlyZXMgPSBydC0+dS5kc3QuZXhwaXJlcyA/IHJ0LT51LmRzdC5leHBpcmVzIC0gamlmZmllcyA6IDA7CisJaWYgKHJ0LT5mbC5tYXJrKQorCQlOTEFfUFVUX0JFMzIoc2tiLCBSVEFfTUFSSywgcnQtPmZsLm1hcmspOworCisJZXJyb3IgPSBydC0+ZHN0LmVycm9yOworCWV4cGlyZXMgPSBydC0+ZHN0LmV4cGlyZXMgPyBydC0+ZHN0LmV4cGlyZXMgLSBqaWZmaWVzIDogMDsKIAlpZiAocnQtPnBlZXIpIHsKKwkJaW5ldF9wZWVyX3JlZmNoZWNrKHJ0LT5wZWVyKTsKIAkJaWQgPSBhdG9taWNfcmVhZCgmcnQtPnBlZXItPmlwX2lkX2NvdW50KSAmIDB4ZmZmZjsKIAkJaWYgKHJ0LT5wZWVyLT50Y3BfdHNfc3RhbXApIHsKIAkJCXRzID0gcnQtPnBlZXItPnRjcF90czsKQEAgLTI5MTQsNyArMjkxNSw3IEBACiAJCQlOTEFfUFVUX1UzMihza2IsIFJUQV9JSUYsIHJ0LT5mbC5paWYpOwogCX0KIAotCWlmIChydG5sX3B1dF9jYWNoZWluZm8oc2tiLCAmcnQtPnUuZHN0LCBpZCwgdHMsIHRzYWdlLAorCWlmIChydG5sX3B1dF9jYWNoZWluZm8oc2tiLCAmcnQtPmRzdCwgaWQsIHRzLCB0c2FnZSwKIAkJCSAgICAgICBleHBpcmVzLCBlcnJvcikgPCAwKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIApAQCAtMjkzNSw2ICsyOTM2LDcgQEAKIAlfX2JlMzIgc3JjID0gMDsKIAl1MzIgaWlmOwogCWludCBlcnI7CisJaW50IG1hcms7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCWVyciA9IG5sbXNnX3BhcnNlKG5saCwgc2l6ZW9mKCpydG0pLCB0YiwgUlRBX01BWCwgcnRtX2lwdjRfcG9saWN5KTsKQEAgLTI5NjIsNiArMjk2NCw3IEBACiAJc3JjID0gdGJbUlRBX1NSQ10gPyBubGFfZ2V0X2JlMzIodGJbUlRBX1NSQ10pIDogMDsKIAlkc3QgPSB0YltSVEFfRFNUXSA/IG5sYV9nZXRfYmUzMih0YltSVEFfRFNUXSkgOiAwOwogCWlpZiA9IHRiW1JUQV9JSUZdID8gbmxhX2dldF91MzIodGJbUlRBX0lJRl0pIDogMDsKKwltYXJrID0gdGJbUlRBX01BUktdID8gbmxhX2dldF91MzIodGJbUlRBX01BUktdKSA6IDA7CiAKIAlpZiAoaWlmKSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC0yOTc0LDEzICsyOTc3LDE0IEBACiAKIAkJc2tiLT5wcm90b2NvbAk9IGh0b25zKEVUSF9QX0lQKTsKIAkJc2tiLT5kZXYJPSBkZXY7CisJCXNrYi0+bWFyawk9IG1hcms7CiAJCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAkJZXJyID0gaXBfcm91dGVfaW5wdXQoc2tiLCBkc3QsIHNyYywgcnRtLT5ydG1fdG9zLCBkZXYpOwogCQlsb2NhbF9iaF9lbmFibGUoKTsKIAogCQlydCA9IHNrYl9ydGFibGUoc2tiKTsKLQkJaWYgKGVyciA9PSAwICYmIHJ0LT51LmRzdC5lcnJvcikKLQkJCWVyciA9IC1ydC0+dS5kc3QuZXJyb3I7CisJCWlmIChlcnIgPT0gMCAmJiBydC0+ZHN0LmVycm9yKQorCQkJZXJyID0gLXJ0LT5kc3QuZXJyb3I7CiAJfSBlbHNlIHsKIAkJc3RydWN0IGZsb3dpIGZsID0gewogCQkJLm5sX3UgPSB7CkBAIC0yOTkxLDYgKzI5OTUsNyBAQAogCQkJCX0sCiAJCQl9LAogCQkJLm9pZiA9IHRiW1JUQV9PSUZdID8gbmxhX2dldF91MzIodGJbUlRBX09JRl0pIDogMCwKKwkJCS5tYXJrID0gbWFyaywKIAkJfTsKIAkJZXJyID0gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsICZydCwgJmZsKTsKIAl9CkBAIC0yOTk4LDcgKzMwMDMsNyBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyb3V0X2ZyZWU7CiAKLQlza2JfZHN0X3NldChza2IsICZydC0+dS5kc3QpOworCXNrYl9kc3Rfc2V0KHNrYiwgJnJ0LT5kc3QpOwogCWlmIChydG0tPnJ0bV9mbGFncyAmIFJUTV9GX05PVElGWSkKIAkJcnQtPnJ0X2ZsYWdzIHw9IFJUQ0ZfTk9USUZZOwogCkBAIC0zMDM0LDEyICszMDM5LDEyIEBACiAJCQljb250aW51ZTsKIAkJcmN1X3JlYWRfbG9ja19iaCgpOwogCQlmb3IgKHJ0ID0gcmN1X2RlcmVmZXJlbmNlX2JoKHJ0X2hhc2hfdGFibGVbaF0uY2hhaW4pLCBpZHggPSAwOyBydDsKLQkJICAgICBydCA9IHJjdV9kZXJlZmVyZW5jZV9iaChydC0+dS5kc3QucnRfbmV4dCksIGlkeCsrKSB7Ci0JCQlpZiAoIW5ldF9lcShkZXZfbmV0KHJ0LT51LmRzdC5kZXYpLCBuZXQpIHx8IGlkeCA8IHNfaWR4KQorCQkgICAgIHJ0ID0gcmN1X2RlcmVmZXJlbmNlX2JoKHJ0LT5kc3QucnRfbmV4dCksIGlkeCsrKSB7CisJCQlpZiAoIW5ldF9lcShkZXZfbmV0KHJ0LT5kc3QuZGV2KSwgbmV0KSB8fCBpZHggPCBzX2lkeCkKIAkJCQljb250aW51ZTsKIAkJCWlmIChydF9pc19leHBpcmVkKHJ0KSkKIAkJCQljb250aW51ZTsKLQkJCXNrYl9kc3Rfc2V0X25vcmVmKHNrYiwgJnJ0LT51LmRzdCk7CisJCQlza2JfZHN0X3NldF9ub3JlZihza2IsICZydC0+ZHN0KTsKIAkJCWlmIChydF9maWxsX2luZm8obmV0LCBza2IsIE5FVExJTktfQ0IoY2ItPnNrYikucGlkLAogCQkJCQkgY2ItPm5saC0+bmxtc2dfc2VxLCBSVE1fTkVXUk9VVEUsCiAJCQkJCSAxLCBOTE1fRl9NVUxUSSkgPD0gMCkgewpAQCAtMzM2NSw2ICszMzcwLDMgQEAKIAlyZWdpc3Rlcl9zeXNjdGxfcGF0aHMoaXB2NF9wYXRoLCBpcHY0X3NrZWxldG9uKTsKIH0KICNlbmRpZgotCi1FWFBPUlRfU1lNQk9MKF9faXBfc2VsZWN0X2lkZW50KTsKLUVYUE9SVF9TWU1CT0woaXBfcm91dGVfb3V0cHV0X2tleSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9zeW5jb29raWVzLmMgYi9uZXQvaXB2NC9zeW5jb29raWVzLmMKaW5kZXggOWY2YjIyMi4uNjUwY2FjZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvc3luY29va2llcy5jCisrKyBiL25ldC9pcHY0L3N5bmNvb2tpZXMuYwpAQCAtMTgsOCArMTgsOCBAQAogI2luY2x1ZGUgPG5ldC90Y3AuaD4KICNpbmNsdWRlIDxuZXQvcm91dGUuaD4KIAotLyogVGltZXN0YW1wczogbG93ZXN0IDkgYml0cyBzdG9yZSBUQ1Agb3B0aW9ucyAqLwotI2RlZmluZSBUU0JJVFMgOQorLyogVGltZXN0YW1wczogbG93ZXN0IGJpdHMgc3RvcmUgVENQIG9wdGlvbnMgKi8KKyNkZWZpbmUgVFNCSVRTIDYKICNkZWZpbmUgVFNNQVNLICgoKF9fdTMyKTEgPDwgVFNCSVRTKSAtIDEpCiAKIGV4dGVybiBpbnQgc3lzY3RsX3RjcF9zeW5jb29raWVzOwpAQCAtNTgsNyArNTgsNyBAQAogCiAvKgogICogd2hlbiBzeW5jb29raWVzIGFyZSBpbiBlZmZlY3QgYW5kIHRjcCB0aW1lc3RhbXBzIGFyZSBlbmFibGVkIHdlIGVuY29kZQotICogdGNwIG9wdGlvbnMgaW4gdGhlIGxvd2VzdCA5IGJpdHMgb2YgdGhlIHRpbWVzdGFtcCB2YWx1ZSB0aGF0IHdpbGwgYmUKKyAqIHRjcCBvcHRpb25zIGluIHRoZSBsb3dlciBiaXRzIG9mIHRoZSB0aW1lc3RhbXAgdmFsdWUgdGhhdCB3aWxsIGJlCiAgKiBzZW50IGluIHRoZSBzeW4tYWNrLgogICogU2luY2Ugc3Vic2VxdWVudCB0aW1lc3RhbXBzIHVzZSB0aGUgbm9ybWFsIHRjcF90aW1lX3N0YW1wIHZhbHVlLCB3ZQogICogbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGUgcmVzdWx0aW5nIGluaXRpYWwgdGltZXN0YW1wIGlzIDw9IHRjcF90aW1lX3N0YW1wLgpAQCAtNzAsMTEgKzcwLDEwIEBACiAJdTMyIG9wdGlvbnMgPSAwOwogCiAJaXJlcSA9IGluZXRfcnNrKHJlcSk7Ci0JaWYgKGlyZXEtPndzY2FsZV9vaykgewotCQlvcHRpb25zID0gaXJlcS0+c25kX3dzY2FsZTsKLQkJb3B0aW9ucyB8PSBpcmVxLT5yY3Zfd3NjYWxlIDw8IDQ7Ci0JfQotCW9wdGlvbnMgfD0gaXJlcS0+c2Fja19vayA8PCA4OworCisJb3B0aW9ucyA9IGlyZXEtPndzY2FsZV9vayA/IGlyZXEtPnNuZF93c2NhbGUgOiAweGY7CisJb3B0aW9ucyB8PSBpcmVxLT5zYWNrX29rIDw8IDQ7CisJb3B0aW9ucyB8PSBpcmVxLT5lY25fb2sgPDwgNTsKIAogCXRzID0gdHNfbm93ICYgflRTTUFTSzsKIAl0cyB8PSBvcHRpb25zOwpAQCAtMTM4LDIzICsxMzcsMjMgQEAKIH0KIAogLyoKLSAqIFRoaXMgdGFibGUgaGFzIHRvIGJlIHNvcnRlZCBhbmQgdGVybWluYXRlZCB3aXRoIChfX3UxNiktMS4KLSAqIFhYWCBnZW5lcmF0ZSBhIGJldHRlciB0YWJsZS4KLSAqIFVucmVzb2x2ZWQgSXNzdWVzOiBISVBQSSB3aXRoIGEgNjRrIE1TUyBpcyBub3Qgd2VsbCBzdXBwb3J0ZWQuCisgKiBNU1MgVmFsdWVzIGFyZSB0YWtlbiBmcm9tIHRoZSAyMDA5IHBhcGVyCisgKiAnTWVhc3VyaW5nIFRDUCBNYXhpbXVtIFNlZ21lbnQgU2l6ZScgYnkgUy4gQWxjb2NrIGFuZCBSLiBOZWxzb246CisgKiAgLSB2YWx1ZXMgMTQ0MCB0byAxNDYwIGFjY291bnRlZCBmb3IgODAlIG9mIG9ic2VydmVkIG1zcyB2YWx1ZXMKKyAqICAtIHZhbHVlcyBvdXRzaWRlIHRoZSA1MzYtMTQ2MCByYW5nZSBhcmUgcmFyZSAoPDAuMiUpLgorICoKKyAqIFRhYmxlIG11c3QgYmUgc29ydGVkLgogICovCiBzdGF0aWMgX191MTYgY29uc3QgbXNzdGFiW10gPSB7Ci0JNjQgLSAxLAotCTI1NiAtIDEsCi0JNTEyIC0gMSwKLQk1MzYgLSAxLAotCTEwMjQgLSAxLAotCTE0NDAgLSAxLAotCTE0NjAgLSAxLAotCTQzMTIgLSAxLAotCShfX3UxNiktMQorCTY0LAorCTUxMiwKKwk1MzYsCisJMTAyNCwKKwkxNDQwLAorCTE0NjAsCisJNDMxMiwKKwk4OTYwLAogfTsKLS8qIFRoZSBudW1iZXIgZG9lc24ndCBpbmNsdWRlIHRoZSAtMSB0ZXJtaW5hdG9yICovCi0jZGVmaW5lIE5VTV9NU1MgKEFSUkFZX1NJWkUobXNzdGFiKSAtIDEpCiAKIC8qCiAgKiBHZW5lcmF0ZSBhIHN5bmNvb2tpZS4gIG1zc3AgcG9pbnRzIHRvIHRoZSBtc3MsIHdoaWNoIGlzIHJldHVybmVkCkBAIC0xNjksMTAgKzE2OCwxMCBAQAogCiAJdGNwX3N5bnFfb3ZlcmZsb3coc2spOwogCi0JLyogWFhYIHNvcnQgbXNzdGFiW10gYnkgcHJvYmFiaWxpdHk/ICBCaW5hcnkgc2VhcmNoPyAqLwotCWZvciAobXNzaW5kID0gMDsgbXNzID4gbXNzdGFiW21zc2luZCArIDFdOyBtc3NpbmQrKykKLQkJOwotCSptc3NwID0gbXNzdGFiW21zc2luZF0gKyAxOworCWZvciAobXNzaW5kID0gQVJSQVlfU0laRShtc3N0YWIpIC0gMTsgbXNzaW5kIDsgbXNzaW5kLS0pCisJCWlmIChtc3MgPj0gbXNzdGFiW21zc2luZF0pCisJCQlicmVhazsKKwkqbXNzcCA9IG1zc3RhYlttc3NpbmRdOwogCiAJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9TWU5DT09LSUVTU0VOVCk7CiAKQEAgLTIwMiw3ICsyMDEsNyBAQAogCQkJCQkgICAgamlmZmllcyAvIChIWiAqIDYwKSwKIAkJCQkJICAgIENPVU5URVJfVFJJRVMpOwogCi0JcmV0dXJuIG1zc2luZCA8IE5VTV9NU1MgPyBtc3N0YWJbbXNzaW5kXSArIDEgOiAwOworCXJldHVybiBtc3NpbmQgPCBBUlJBWV9TSVpFKG1zc3RhYikgPyBtc3N0YWJbbXNzaW5kXSA6IDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2sgKmdldF9jb29raWVfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCkBAIC0yMjcsMjYgKzIyNiwzOCBAQAogICogYWRkaXRpb25hbCB0Y3Agb3B0aW9ucyBpbiB0aGUgdGltZXN0YW1wLgogICogVGhpcyBleHRyYWN0cyB0aGVzZSBvcHRpb25zIGZyb20gdGhlIHRpbWVzdGFtcCBlY2hvLgogICoKLSAqIFRoZSBsb3dlc3QgNCBiaXRzIGFyZSBmb3Igc25kX3dzY2FsZQotICogVGhlIG5leHQgNCBsc2IgYXJlIGZvciByY3Zfd3NjYWxlCi0gKiBUaGUgbmV4dCBsc2IgaXMgZm9yIHNhY2tfb2sKKyAqIFRoZSBsb3dlc3QgNCBiaXRzIHN0b3JlIHNuZF93c2NhbGUuCisgKiBuZXh0IDIgYml0cyBpbmRpY2F0ZSBTQUNLIGFuZCBFQ04gc3VwcG9ydC4KKyAqCisgKiByZXR1cm4gZmFsc2UgaWYgd2UgZGVjb2RlIGFuIG9wdGlvbiB0aGF0IHNob3VsZCBub3QgYmUuCiAgKi8KLXZvaWQgY29va2llX2NoZWNrX3RpbWVzdGFtcChzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgKnRjcF9vcHQpCitib29sIGNvb2tpZV9jaGVja190aW1lc3RhbXAoc3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkICp0Y3Bfb3B0LCBib29sICplY25fb2spCiB7Ci0JLyogZWNob2VkIHRpbWVzdGFtcCwgOSBsb3dlc3QgYml0cyBjb250YWluIG9wdGlvbnMgKi8KKwkvKiBlY2hvZWQgdGltZXN0YW1wLCBsb3dlc3QgYml0cyBjb250YWluIG9wdGlvbnMgKi8KIAl1MzIgb3B0aW9ucyA9IHRjcF9vcHQtPnJjdl90c2VjciAmIFRTTUFTSzsKIAotCXRjcF9vcHQtPnNuZF93c2NhbGUgPSBvcHRpb25zICYgMHhmOwotCW9wdGlvbnMgPj49IDQ7Ci0JdGNwX29wdC0+cmN2X3dzY2FsZSA9IG9wdGlvbnMgJiAweGY7CisJaWYgKCF0Y3Bfb3B0LT5zYXdfdHN0YW1wKSAgeworCQl0Y3BfY2xlYXJfb3B0aW9ucyh0Y3Bfb3B0KTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJaWYgKCFzeXNjdGxfdGNwX3RpbWVzdGFtcHMpCisJCXJldHVybiBmYWxzZTsKIAogCXRjcF9vcHQtPnNhY2tfb2sgPSAob3B0aW9ucyA+PiA0KSAmIDB4MTsKKwkqZWNuX29rID0gKG9wdGlvbnMgPj4gNSkgJiAxOworCWlmICgqZWNuX29rICYmICFzeXNjdGxfdGNwX2VjbikKKwkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKHRjcF9vcHQtPnNhY2tfb2spCi0JCXRjcF9zYWNrX3Jlc2V0KHRjcF9vcHQpOworCWlmICh0Y3Bfb3B0LT5zYWNrX29rICYmICFzeXNjdGxfdGNwX3NhY2spCisJCXJldHVybiBmYWxzZTsKIAotCWlmICh0Y3Bfb3B0LT5zbmRfd3NjYWxlIHx8IHRjcF9vcHQtPnJjdl93c2NhbGUpCi0JCXRjcF9vcHQtPndzY2FsZV9vayA9IDE7CisJaWYgKChvcHRpb25zICYgMHhmKSA9PSAweGYpCisJCXJldHVybiB0cnVlOyAvKiBubyB3aW5kb3cgc2NhbGluZyAqLworCisJdGNwX29wdC0+d3NjYWxlX29rID0gMTsKKwl0Y3Bfb3B0LT5zbmRfd3NjYWxlID0gb3B0aW9ucyAmIDB4ZjsKKwlyZXR1cm4gc3lzY3RsX3RjcF93aW5kb3dfc2NhbGluZyAhPSAwOwogfQogRVhQT1JUX1NZTUJPTChjb29raWVfY2hlY2tfdGltZXN0YW1wKTsKIApAQCAtMjY1LDggKzI3Niw5IEBACiAJaW50IG1zczsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKIAlfX3U4IHJjdl93c2NhbGU7CisJYm9vbCBlY25fb2s7CiAKLQlpZiAoIXN5c2N0bF90Y3Bfc3luY29va2llcyB8fCAhdGgtPmFjaykKKwlpZiAoIXN5c2N0bF90Y3Bfc3luY29va2llcyB8fCAhdGgtPmFjayB8fCB0aC0+cnN0KQogCQlnb3RvIG91dDsKIAogCWlmICh0Y3Bfc3lucV9ub19yZWNlbnRfb3ZlcmZsb3coc2spIHx8CkBAIC0yODEsOCArMjkzLDggQEAKIAltZW1zZXQoJnRjcF9vcHQsIDAsIHNpemVvZih0Y3Bfb3B0KSk7CiAJdGNwX3BhcnNlX29wdGlvbnMoc2tiLCAmdGNwX29wdCwgJmhhc2hfbG9jYXRpb24sIDApOwogCi0JaWYgKHRjcF9vcHQuc2F3X3RzdGFtcCkKLQkJY29va2llX2NoZWNrX3RpbWVzdGFtcCgmdGNwX29wdCk7CisJaWYgKCFjb29raWVfY2hlY2tfdGltZXN0YW1wKCZ0Y3Bfb3B0LCAmZWNuX29rKSkKKwkJZ290byBvdXQ7CiAKIAlyZXQgPSBOVUxMOwogCXJlcSA9IGluZXRfcmVxc2tfYWxsb2MoJnRjcF9yZXF1ZXN0X3NvY2tfb3BzKTsgLyogZm9yIHNhZmV0eSAqLwpAQCAtMjk4LDkgKzMxMCw4IEBACiAJaXJlcS0+cm10X3BvcnQJCT0gdGgtPnNvdXJjZTsKIAlpcmVxLT5sb2NfYWRkcgkJPSBpcF9oZHIoc2tiKS0+ZGFkZHI7CiAJaXJlcS0+cm10X2FkZHIJCT0gaXBfaGRyKHNrYiktPnNhZGRyOwotCWlyZXEtPmVjbl9vawkJPSAwOworCWlyZXEtPmVjbl9vawkJPSBlY25fb2s7CiAJaXJlcS0+c25kX3dzY2FsZQk9IHRjcF9vcHQuc25kX3dzY2FsZTsKLQlpcmVxLT5yY3Zfd3NjYWxlCT0gdGNwX29wdC5yY3Zfd3NjYWxlOwogCWlyZXEtPnNhY2tfb2sJCT0gdGNwX29wdC5zYWNrX29rOwogCWlyZXEtPndzY2FsZV9vawkJPSB0Y3Bfb3B0LndzY2FsZV9vazsKIAlpcmVxLT50c3RhbXBfb2sJCT0gdGNwX29wdC5zYXdfdHN0YW1wOwpAQCAtMzU0LDE1ICszNjUsMTUgQEAKIAl9CiAKIAkvKiBUcnkgdG8gcmVkbyB3aGF0IHRjcF92NF9zZW5kX3N5bmFjayBkaWQuICovCi0JcmVxLT53aW5kb3dfY2xhbXAgPSB0cC0+d2luZG93X2NsYW1wID8gOmRzdF9tZXRyaWMoJnJ0LT51LmRzdCwgUlRBWF9XSU5ET1cpOworCXJlcS0+d2luZG93X2NsYW1wID0gdHAtPndpbmRvd19jbGFtcCA/IDpkc3RfbWV0cmljKCZydC0+ZHN0LCBSVEFYX1dJTkRPVyk7CiAKIAl0Y3Bfc2VsZWN0X2luaXRpYWxfd2luZG93KHRjcF9mdWxsX3NwYWNlKHNrKSwgcmVxLT5tc3MsCiAJCQkJICAmcmVxLT5yY3Zfd25kLCAmcmVxLT53aW5kb3dfY2xhbXAsCiAJCQkJICBpcmVxLT53c2NhbGVfb2ssICZyY3Zfd3NjYWxlLAotCQkJCSAgZHN0X21ldHJpYygmcnQtPnUuZHN0LCBSVEFYX0lOSVRSV05EKSk7CisJCQkJICBkc3RfbWV0cmljKCZydC0+ZHN0LCBSVEFYX0lOSVRSV05EKSk7CiAKIAlpcmVxLT5yY3Zfd3NjYWxlICA9IHJjdl93c2NhbGU7CiAKLQlyZXQgPSBnZXRfY29va2llX3NvY2soc2ssIHNrYiwgcmVxLCAmcnQtPnUuZHN0KTsKKwlyZXQgPSBnZXRfY29va2llX3NvY2soc2ssIHNrYiwgcmVxLCAmcnQtPmRzdCk7CiBvdXQ6CXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IDY1OTZiNGYuLjE3NmUxMWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCisrKyBiL25ldC9pcHY0L3RjcC5jCkBAIC0zMTUsNyArMzE1LDYgQEAKICAqIGlzIHN0cmljdCwgYWN0aW9ucyBhcmUgYWR2aXNvcnkgYW5kIGhhdmUgc29tZSBsYXRlbmN5LgogICovCiBpbnQgdGNwX21lbW9yeV9wcmVzc3VyZSBfX3JlYWRfbW9zdGx5OwotCiBFWFBPUlRfU1lNQk9MKHRjcF9tZW1vcnlfcHJlc3N1cmUpOwogCiB2b2lkIHRjcF9lbnRlcl9tZW1vcnlfcHJlc3N1cmUoc3RydWN0IHNvY2sgKnNrKQpAQCAtMzI1LDcgKzMyNCw2IEBACiAJCXRjcF9tZW1vcnlfcHJlc3N1cmUgPSAxOwogCX0KIH0KLQogRVhQT1JUX1NZTUJPTCh0Y3BfZW50ZXJfbWVtb3J5X3ByZXNzdXJlKTsKIAogLyogQ29udmVydCBzZWNvbmRzIHRvIHJldHJhbnNtaXRzIGJhc2VkIG9uIGluaXRpYWwgYW5kIG1heCB0aW1lb3V0ICovCkBAIC00NjAsNiArNDU4LDcgQEAKIAl9CiAJcmV0dXJuIG1hc2s7CiB9CitFWFBPUlRfU1lNQk9MKHRjcF9wb2xsKTsKIAogaW50IHRjcF9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtNTA4LDEwICs1MDcsMTEgQEAKIAogCXJldHVybiBwdXRfdXNlcihhbnN3LCAoaW50IF9fdXNlciAqKWFyZyk7CiB9CitFWFBPUlRfU1lNQk9MKHRjcF9pb2N0bCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfbWFya19wdXNoKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JVENQX1NLQl9DQihza2IpLT5mbGFncyB8PSBUQ1BDQl9GTEFHX1BTSDsKKwlUQ1BfU0tCX0NCKHNrYiktPmZsYWdzIHw9IFRDUEhEUl9QU0g7CiAJdHAtPnB1c2hlZF9zZXEgPSB0cC0+d3JpdGVfc2VxOwogfQogCkBAIC01MjcsNyArNTI3LDcgQEAKIAogCXNrYi0+Y3N1bSAgICA9IDA7CiAJdGNiLT5zZXEgICAgID0gdGNiLT5lbmRfc2VxID0gdHAtPndyaXRlX3NlcTsKLQl0Y2ItPmZsYWdzICAgPSBUQ1BDQl9GTEFHX0FDSzsKKwl0Y2ItPmZsYWdzICAgPSBUQ1BIRFJfQUNLOwogCXRjYi0+c2Fja2VkICA9IDA7CiAJc2tiX2hlYWRlcl9yZWxlYXNlKHNrYik7CiAJdGNwX2FkZF93cml0ZV9xdWV1ZV90YWlsKHNrLCBza2IpOwpAQCAtNjA4LDYgKzYwOCw3IEBACiAJc3NpemVfdCBzcGxpY2VkOwogCWludCByZXQ7CiAKKwlzb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7CiAJLyoKIAkgKiBXZSBjYW4ndCBzZWVrIG9uIGEgc29ja2V0IGlucHV0CiAJICovCkBAIC02NzUsNiArNjc2LDcgQEAKIAogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKHRjcF9zcGxpY2VfcmVhZCk7CiAKIHN0cnVjdCBza19idWZmICpza19zdHJlYW1fYWxsb2Nfc2tiKHN0cnVjdCBzb2NrICpzaywgaW50IHNpemUsIGdmcF90IGdmcCkKIHsKQEAgLTgxNSw3ICs4MTcsNyBAQAogCQlza2Jfc2hpbmZvKHNrYiktPmdzb19zZWdzID0gMDsKIAogCQlpZiAoIWNvcGllZCkKLQkJCVRDUF9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgJj0gflRDUENCX0ZMQUdfUFNIOworCQkJVENQX1NLQl9DQihza2IpLT5mbGFncyAmPSB+VENQSERSX1BTSDsKIAogCQljb3BpZWQgKz0gY29weTsKIAkJcG9mZnNldCArPSBjb3B5OwpAQCAtODU2LDE1ICs4NTgsMTUgQEAKIAlyZXR1cm4gc2tfc3RyZWFtX2Vycm9yKHNrLCBmbGFncywgZXJyKTsKIH0KIAotc3NpemVfdCB0Y3Bfc2VuZHBhZ2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvZmZzZXQsCi0JCSAgICAgc2l6ZV90IHNpemUsIGludCBmbGFncykKK2ludCB0Y3Bfc2VuZHBhZ2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9mZnNldCwKKwkJIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJc3NpemVfdCByZXM7Ci0Jc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAKIAlpZiAoIShzay0+c2tfcm91dGVfY2FwcyAmIE5FVElGX0ZfU0cpIHx8CiAJICAgICEoc2stPnNrX3JvdXRlX2NhcHMgJiBORVRJRl9GX0FMTF9DU1VNKSkKLQkJcmV0dXJuIHNvY2tfbm9fc2VuZHBhZ2Uoc29jaywgcGFnZSwgb2Zmc2V0LCBzaXplLCBmbGFncyk7CisJCXJldHVybiBzb2NrX25vX3NlbmRwYWdlKHNrLT5za19zb2NrZXQsIHBhZ2UsIG9mZnNldCwgc2l6ZSwKKwkJCQkJZmxhZ3MpOwogCiAJbG9ja19zb2NrKHNrKTsKIAlUQ1BfQ0hFQ0tfVElNRVIoc2spOwpAQCAtODczLDYgKzg3NSw3IEBACiAJcmVsZWFzZV9zb2NrKHNrKTsKIAlyZXR1cm4gcmVzOwogfQorRVhQT1JUX1NZTUJPTCh0Y3Bfc2VuZHBhZ2UpOwogCiAjZGVmaW5lIFRDUF9QQUdFKHNrKQkoc2stPnNrX3NuZG1zZ19wYWdlKQogI2RlZmluZSBUQ1BfT0ZGKHNrKQkoc2stPnNrX3NuZG1zZ19vZmYpCkBAIC04OTcsMTAgKzkwMCw5IEBACiAJcmV0dXJuIHRtcDsKIH0KIAotaW50IHRjcF9zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAoraW50IHRjcF9zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csCiAJCXNpemVfdCBzaXplKQogewotCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBpb3ZlYyAqaW92OwogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0xMDYxLDcgKzEwNjMsNyBAQAogCQkJfQogCiAJCQlpZiAoIWNvcGllZCkKLQkJCQlUQ1BfU0tCX0NCKHNrYiktPmZsYWdzICY9IH5UQ1BDQl9GTEFHX1BTSDsKKwkJCQlUQ1BfU0tCX0NCKHNrYiktPmZsYWdzICY9IH5UQ1BIRFJfUFNIOwogCiAJCQl0cC0+d3JpdGVfc2VxICs9IGNvcHk7CiAJCQlUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEgKz0gY29weTsKQEAgLTExMjEsNiArMTEyMyw3IEBACiAJcmVsZWFzZV9zb2NrKHNrKTsKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTCh0Y3Bfc2VuZG1zZyk7CiAKIC8qCiAgKglIYW5kbGUgcmVhZGluZyB1cmdlbnQgZGF0YS4gQlNEIGhhcyB2ZXJ5IHNpbXBsZSBzZW1hbnRpY3MgZm9yCkBAIC0xMzgwLDYgKzEzODMsNyBAQAogCQl0Y3BfY2xlYW51cF9yYnVmKHNrLCBjb3BpZWQpOwogCXJldHVybiBjb3BpZWQ7CiB9CitFWFBPUlRfU1lNQk9MKHRjcF9yZWFkX3NvY2spOwogCiAvKgogICoJVGhpcyByb3V0aW5lIGNvcGllcyBmcm9tIGEgc29jayBzdHJ1Y3QgaW50byB0aGUgdXNlciBidWZmZXIuCkBAIC0xNzc0LDYgKzE3NzgsNyBAQAogCWVyciA9IHRjcF9yZWN2X3VyZyhzaywgbXNnLCBsZW4sIGZsYWdzKTsKIAlnb3RvIG91dDsKIH0KK0VYUE9SVF9TWU1CT0wodGNwX3JlY3Ztc2cpOwogCiB2b2lkIHRjcF9zZXRfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCBpbnQgc3RhdGUpCiB7CkBAIC0xODY2LDYgKzE4NzEsNyBAQAogCQkJdGNwX3NlbmRfZmluKHNrKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKHRjcF9zaHV0ZG93bik7CiAKIHZvaWQgdGNwX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KQogewpAQCAtMTg5OCw2ICsxOTA0LDEwIEBACiAKIAlza19tZW1fcmVjbGFpbShzayk7CiAKKwkvKiBJZiBzb2NrZXQgaGFzIGJlZW4gYWxyZWFkeSByZXNldCAoZS5nLiBpbiB0Y3BfcmVzZXQoKSkgLSBraWxsIGl0LiAqLworCWlmIChzay0+c2tfc3RhdGUgPT0gVENQX0NMT1NFKQorCQlnb3RvIGFkanVkZ2VfdG9fZGVhdGg7CisKIAkvKiBBcyBvdXRsaW5lZCBpbiBSRkMgMjUyNSwgc2VjdGlvbiAyLjE3LCB3ZSBzZW5kIGEgUlNUIGhlcmUgYmVjYXVzZQogCSAqIGRhdGEgd2FzIGxvc3QuIFRvIHdpdG5lc3MgdGhlIGF3ZnVsIGVmZmVjdHMgb2YgdGhlIG9sZCBiZWhhdmlvciBvZgogCSAqIGFsd2F5cyBkb2luZyBhIEZJTiwgcnVuIGFuIG9sZGVyIDIuMS54IGtlcm5lbCBvciAyLjAueCwgc3RhcnQgYSBidWxrCkBAIC0yMDI1LDYgKzIwMzUsNyBAQAogCWxvY2FsX2JoX2VuYWJsZSgpOwogCXNvY2tfcHV0KHNrKTsKIH0KK0VYUE9SVF9TWU1CT0wodGNwX2Nsb3NlKTsKIAogLyogVGhlc2Ugc3RhdGVzIG5lZWQgUlNUIG9uIEFCT1JUIGFjY29yZGluZyB0byBSRkM3OTMgKi8KIApAQCAtMjA5OCw2ICsyMTA5LDcgQEAKIAlzay0+c2tfZXJyb3JfcmVwb3J0KHNrKTsKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTCh0Y3BfZGlzY29ubmVjdCk7CiAKIC8qCiAgKglTb2NrZXQgb3B0aW9uIGNvZGUgZm9yIFRDUC4KQEAgLTIxNzUsNiArMjE4Nyw4IEBACiAJCQkJICAgICAgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoY3ZwID09IE5VTEwpCiAJCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJCWtyZWZfaW5pdCgmY3ZwLT5rcmVmKTsKIAkJfQogCQlsb2NrX3NvY2soc2spOwogCQl0cC0+cnhfb3B0LmNvb2tpZV9pbl9hbHdheXMgPQpAQCAtMjE4OSwxMiArMjIwMywxMSBAQAogCQkJCSAqLwogCQkJCWtyZWZfcHV0KCZ0cC0+Y29va2llX3ZhbHVlcy0+a3JlZiwKIAkJCQkJIHRjcF9jb29raWVfdmFsdWVzX3JlbGVhc2UpOwotCQkJCWtyZWZfaW5pdCgmY3ZwLT5rcmVmKTsKLQkJCQl0cC0+Y29va2llX3ZhbHVlcyA9IGN2cDsKIAkJCX0gZWxzZSB7CiAJCQkJY3ZwID0gdHAtPmNvb2tpZV92YWx1ZXM7CiAJCQl9CiAJCX0KKwogCQlpZiAoY3ZwICE9IE5VTEwpIHsKIAkJCWN2cC0+Y29va2llX2Rlc2lyZWQgPSBjdGQudGNwY3RfY29va2llX2Rlc2lyZWQ7CiAKQEAgLTIyMDgsNiArMjIyMSw4IEBACiAJCQkJY3ZwLT5zX2RhdGFfZGVzaXJlZCA9IGN0ZC50Y3BjdF9zX2RhdGFfZGVzaXJlZDsKIAkJCQljdnAtPnNfZGF0YV9jb25zdGFudCA9IDA7IC8qIGZhbHNlICovCiAJCQl9CisKKwkJCXRwLT5jb29raWVfdmFsdWVzID0gY3ZwOwogCQl9CiAJCXJlbGVhc2Vfc29jayhzayk7CiAJCXJldHVybiBlcnI7CkBAIC0yMzk2LDYgKzI0MTEsNyBAQAogCQkJCQkJICAgICBvcHR2YWwsIG9wdGxlbik7CiAJcmV0dXJuIGRvX3RjcF9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOwogfQorRVhQT1JUX1NZTUJPTCh0Y3Bfc2V0c29ja29wdCk7CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiBpbnQgY29tcGF0X3RjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKQEAgLTI0MDYsNyArMjQyMiw2IEBACiAJCQkJCQkgIG9wdHZhbCwgb3B0bGVuKTsKIAlyZXR1cm4gZG9fdGNwX3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CiB9Ci0KIEVYUE9SVF9TWU1CT0woY29tcGF0X3RjcF9zZXRzb2Nrb3B0KTsKICNlbmRpZgogCkBAIC0yNDcyLDcgKzI0ODcsNiBAQAogCiAJaW5mby0+dGNwaV90b3RhbF9yZXRyYW5zID0gdHAtPnRvdGFsX3JldHJhbnM7CiB9Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKHRjcF9nZXRfaW5mbyk7CiAKIHN0YXRpYyBpbnQgZG9fdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsCkBAIC0yNTkwLDYgKzI2MDQsMTIgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCQlyZXR1cm4gMDsKIAl9CisJY2FzZSBUQ1BfVEhJTl9MSU5FQVJfVElNRU9VVFM6CisJCXZhbCA9IHRwLT50aGluX2x0bzsKKwkJYnJlYWs7CisJY2FzZSBUQ1BfVEhJTl9EVVBBQ0s6CisJCXZhbCA9IHRwLT50aGluX2R1cGFjazsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9QUk9UT09QVDsKIAl9CkBAIC0yNjExLDYgKzI2MzEsNyBAQAogCQkJCQkJICAgICBvcHR2YWwsIG9wdGxlbik7CiAJcmV0dXJuIGRvX3RjcF9nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOwogfQorRVhQT1JUX1NZTUJPTCh0Y3BfZ2V0c29ja29wdCk7CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiBpbnQgY29tcGF0X3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKQEAgLTI2MjEsNyArMjY0Miw2IEBACiAJCQkJCQkgIG9wdHZhbCwgb3B0bGVuKTsKIAlyZXR1cm4gZG9fdGNwX2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CiB9Ci0KIEVYUE9SVF9TWU1CT0woY29tcGF0X3RjcF9nZXRzb2Nrb3B0KTsKICNlbmRpZgogCkBAIC0yODU4LDcgKzI4NzgsNiBAQAogCWlmIChwb29sKQogCQlfX3RjcF9mcmVlX21kNXNpZ19wb29sKHBvb2wpOwogfQotCiBFWFBPUlRfU1lNQk9MKHRjcF9mcmVlX21kNXNpZ19wb29sKTsKIAogc3RhdGljIHN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKiBfX3BlcmNwdSAqCkBAIC0yOTM0LDcgKzI5NTMsNiBAQAogCX0KIAlyZXR1cm4gcG9vbDsKIH0KLQogRVhQT1JUX1NZTUJPTCh0Y3BfYWxsb2NfbWQ1c2lnX3Bvb2wpOwogCiAKQEAgLTI5NTgsNyArMjk3Niw3IEBACiAJc3Bpbl91bmxvY2soJnRjcF9tZDVzaWdfcG9vbF9sb2NrKTsKIAogCWlmIChwKQotCQlyZXR1cm4gKnBlcl9jcHVfcHRyKHAsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJCXJldHVybiAqdGhpc19jcHVfcHRyKHApOwogCiAJbG9jYWxfYmhfZW5hYmxlKCk7CiAJcmV0dXJuIE5VTEw7CkBAIC0yOTg2LDcgKzMwMDQsNiBAQAogCXRoLT5jaGVjayA9IG9sZF9jaGVja3N1bTsKIAlyZXR1cm4gZXJyOwogfQotCiBFWFBPUlRfU1lNQk9MKHRjcF9tZDVfaGFzaF9oZWFkZXIpOwogCiBpbnQgdGNwX21kNV9oYXNoX3NrYl9kYXRhKHN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKmhwLApAQCAtMjk5OSw2ICszMDE2LDcgQEAKIAljb25zdCB1bnNpZ25lZCBoZWFkX2RhdGFfbGVuID0gc2tiX2hlYWRsZW4oc2tiKSA+IGhlYWRlcl9sZW4gPwogCQkJCSAgICAgICBza2JfaGVhZGxlbihza2IpIC0gaGVhZGVyX2xlbiA6IDA7CiAJY29uc3Qgc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpID0gc2tiX3NoaW5mbyhza2IpOworCXN0cnVjdCBza19idWZmICpmcmFnX2l0ZXI7CiAKIAlzZ19pbml0X3RhYmxlKCZzZywgMSk7CiAKQEAgLTMwMTMsOSArMzAzMSwxMiBAQAogCQkJcmV0dXJuIDE7CiAJfQogCisJc2tiX3dhbGtfZnJhZ3Moc2tiLCBmcmFnX2l0ZXIpCisJCWlmICh0Y3BfbWQ1X2hhc2hfc2tiX2RhdGEoaHAsIGZyYWdfaXRlciwgMCkpCisJCQlyZXR1cm4gMTsKKwogCXJldHVybiAwOwogfQotCiBFWFBPUlRfU1lNQk9MKHRjcF9tZDVfaGFzaF9za2JfZGF0YSk7CiAKIGludCB0Y3BfbWQ1X2hhc2hfa2V5KHN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKmhwLCBzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgKmtleSkKQEAgLTMwMjUsNyArMzA0Niw2IEBACiAJc2dfaW5pdF9vbmUoJnNnLCBrZXktPmtleSwga2V5LT5rZXlsZW4pOwogCXJldHVybiBjcnlwdG9faGFzaF91cGRhdGUoJmhwLT5tZDVfZGVzYywgJnNnLCBrZXktPmtleWxlbik7CiB9Ci0KIEVYUE9SVF9TWU1CT0wodGNwX21kNV9oYXNoX2tleSk7CiAKICNlbmRpZgpAQCAtMzI5NywxNiArMzMxNywzIEBACiAJdGNwX3NlY3JldF9yZXRpcmluZyA9ICZ0Y3Bfc2VjcmV0X3R3bzsKIAl0Y3Bfc2VjcmV0X3NlY29uZGFyeSA9ICZ0Y3Bfc2VjcmV0X3R3bzsKIH0KLQotRVhQT1JUX1NZTUJPTCh0Y3BfY2xvc2UpOwotRVhQT1JUX1NZTUJPTCh0Y3BfZGlzY29ubmVjdCk7Ci1FWFBPUlRfU1lNQk9MKHRjcF9nZXRzb2Nrb3B0KTsKLUVYUE9SVF9TWU1CT0wodGNwX2lvY3RsKTsKLUVYUE9SVF9TWU1CT0wodGNwX3BvbGwpOwotRVhQT1JUX1NZTUJPTCh0Y3BfcmVhZF9zb2NrKTsKLUVYUE9SVF9TWU1CT0wodGNwX3JlY3Ztc2cpOwotRVhQT1JUX1NZTUJPTCh0Y3Bfc2VuZG1zZyk7Ci1FWFBPUlRfU1lNQk9MKHRjcF9zcGxpY2VfcmVhZCk7Ci1FWFBPUlRfU1lNQk9MKHRjcF9zZW5kcGFnZSk7Ci1FWFBPUlRfU1lNQk9MKHRjcF9zZXRzb2Nrb3B0KTsKLUVYUE9SVF9TWU1CT0wodGNwX3NodXRkb3duKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggNTQ4ZDU3NS4uM2M0MjZjYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTc4LDEwICs3OCwxMyBAQAogaW50IHN5c2N0bF90Y3Bfc2FjayBfX3JlYWRfbW9zdGx5ID0gMTsKIGludCBzeXNjdGxfdGNwX2ZhY2sgX19yZWFkX21vc3RseSA9IDE7CiBpbnQgc3lzY3RsX3RjcF9yZW9yZGVyaW5nIF9fcmVhZF9tb3N0bHkgPSBUQ1BfRkFTVFJFVFJBTlNfVEhSRVNIOworRVhQT1JUX1NZTUJPTChzeXNjdGxfdGNwX3Jlb3JkZXJpbmcpOwogaW50IHN5c2N0bF90Y3BfZWNuIF9fcmVhZF9tb3N0bHkgPSAyOworRVhQT1JUX1NZTUJPTChzeXNjdGxfdGNwX2Vjbik7CiBpbnQgc3lzY3RsX3RjcF9kc2FjayBfX3JlYWRfbW9zdGx5ID0gMTsKIGludCBzeXNjdGxfdGNwX2FwcF93aW4gX19yZWFkX21vc3RseSA9IDMxOwogaW50IHN5c2N0bF90Y3BfYWR2X3dpbl9zY2FsZSBfX3JlYWRfbW9zdGx5ID0gMjsKK0VYUE9SVF9TWU1CT0woc3lzY3RsX3RjcF9hZHZfd2luX3NjYWxlKTsKIAogaW50IHN5c2N0bF90Y3Bfc3RkdXJnIF9fcmVhZF9tb3N0bHk7CiBpbnQgc3lzY3RsX3RjcF9yZmMxMzM3IF9fcmVhZF9tb3N0bHk7CkBAIC00MTksNiArNDIyLDcgQEAKIAogCWluZXRfY3NrKHNrKS0+aWNza19hY2sucmN2X21zcyA9IGhpbnQ7CiB9CitFWFBPUlRfU1lNQk9MKHRjcF9pbml0aWFsaXplX3Jjdl9tc3MpOwogCiAvKiBSZWNlaXZlciAiYXV0b3R1bmluZyIgY29kZS4KICAqCkBAIC0yOTM4LDYgKzI5NDIsNyBAQAogCX0KIAl0Y3BfeG1pdF9yZXRyYW5zbWl0X3F1ZXVlKHNrKTsKIH0KK0VYUE9SVF9TWU1CT0wodGNwX3NpbXBsZV9yZXRyYW5zbWl0KTsKIAogLyogUHJvY2VzcyBhbiBldmVudCwgd2hpY2ggY2FuIHVwZGF0ZSBwYWNrZXRzLWluLWZsaWdodCBub3QgdHJpdmlhbGx5LgogICogTWFpbiBnb2FsIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gY2FsY3VsYXRlIG5ldyBlc3RpbWF0ZSBmb3IgbGVmdF9vdXQsCkBAIC0zMjg2LDcgKzMyOTEsNyBAQAogCQkgKiBjb25uZWN0aW9uIHN0YXJ0dXAgc2xvdyBzdGFydCBvbmUgcGFja2V0IHRvbwogCQkgKiBxdWlja2x5LiAgVGhpcyBpcyBzZXZlcmVseSBmcm93bmVkIHVwb24gYmVoYXZpb3IuCiAJCSAqLwotCQlpZiAoIShzY2ItPmZsYWdzICYgVENQQ0JfRkxBR19TWU4pKSB7CisJCWlmICghKHNjYi0+ZmxhZ3MgJiBUQ1BIRFJfU1lOKSkgewogCQkJZmxhZyB8PSBGTEFHX0RBVEFfQUNLRUQ7CiAJCX0gZWxzZSB7CiAJCQlmbGFnIHw9IEZMQUdfU1lOX0FDS0VEOwpAQCAtMzg1OCw2ICszODYzLDcgQEAKIAkJfQogCX0KIH0KK0VYUE9SVF9TWU1CT0wodGNwX3BhcnNlX29wdGlvbnMpOwogCiBzdGF0aWMgaW50IHRjcF9wYXJzZV9hbGlnbmVkX3RpbWVzdGFtcChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCBzdHJ1Y3QgdGNwaGRyICp0aCkKIHsKQEAgLTM5MzEsNiArMzkzNyw3IEBACiAJfQogCXJldHVybiBOVUxMOwogfQorRVhQT1JUX1NZTUJPTCh0Y3BfcGFyc2VfbWQ1c2lnX29wdGlvbik7CiAjZW5kaWYKIAogc3RhdGljIGlubGluZSB2b2lkIHRjcF9zdG9yZV90c19yZWNlbnQoc3RydWN0IHRjcF9zb2NrICp0cCkKQEAgLTU0MzIsNiArNTQzOSw3IEBACiAJX19rZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0wodGNwX3Jjdl9lc3RhYmxpc2hlZCk7CiAKIHN0YXRpYyBpbnQgdGNwX3Jjdl9zeW5zZW50X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgc3RydWN0IHRjcGhkciAqdGgsIHVuc2lnbmVkIGxlbikKQEAgLTU5MzEsMTQgKzU5MzksNCBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLQotRVhQT1JUX1NZTUJPTChzeXNjdGxfdGNwX2Vjbik7Ci1FWFBPUlRfU1lNQk9MKHN5c2N0bF90Y3BfcmVvcmRlcmluZyk7Ci1FWFBPUlRfU1lNQk9MKHN5c2N0bF90Y3BfYWR2X3dpbl9zY2FsZSk7Ci1FWFBPUlRfU1lNQk9MKHRjcF9wYXJzZV9vcHRpb25zKTsKLSNpZmRlZiBDT05GSUdfVENQX01ENVNJRwotRVhQT1JUX1NZTUJPTCh0Y3BfcGFyc2VfbWQ1c2lnX29wdGlvbik7Ci0jZW5kaWYKLUVYUE9SVF9TWU1CT0wodGNwX3Jjdl9lc3RhYmxpc2hlZCk7CiBFWFBPUlRfU1lNQk9MKHRjcF9yY3Zfc3RhdGVfcHJvY2Vzcyk7Ci1FWFBPUlRfU1lNQk9MKHRjcF9pbml0aWFsaXplX3Jjdl9tc3MpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lwdjQuYyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKaW5kZXggZmUxOTNlNS4uMDIwNzY2MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lwdjQuYworKysgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCkBAIC04NCw2ICs4NCw3IEBACiAKIGludCBzeXNjdGxfdGNwX3R3X3JldXNlIF9fcmVhZF9tb3N0bHk7CiBpbnQgc3lzY3RsX3RjcF9sb3dfbGF0ZW5jeSBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTChzeXNjdGxfdGNwX2xvd19sYXRlbmN5KTsKIAogCiAjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKQEAgLTEwMCw2ICsxMDEsNyBAQAogI2VuZGlmCiAKIHN0cnVjdCBpbmV0X2hhc2hpbmZvIHRjcF9oYXNoaW5mbzsKK0VYUE9SVF9TWU1CT0wodGNwX2hhc2hpbmZvKTsKIAogc3RhdGljIGlubGluZSBfX3UzMiB0Y3BfdjRfaW5pdF9zZXF1ZW5jZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtMTM5LDcgKzE0MSw2IEBACiAKIAlyZXR1cm4gMDsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwodGNwX3R3c2tfdW5pcXVlKTsKIAogLyogVGhpcyB3aWxsIGluaXRpYXRlIGFuIG91dGdvaW5nIGNvbm5lY3Rpb24uICovCkBAIC0yMDQsMTAgKzIwNSwxMiBAQAogCQkgKiBUSU1FLVdBSVQgKiBhbmQgaW5pdGlhbGl6ZSByeF9vcHQudHNfcmVjZW50IGZyb20gaXQsCiAJCSAqIHdoZW4gdHJ5aW5nIG5ldyBjb25uZWN0aW9uLgogCQkgKi8KLQkJaWYgKHBlZXIgIT0gTlVMTCAmJgotCQkgICAgKHUzMilnZXRfc2Vjb25kcygpIC0gcGVlci0+dGNwX3RzX3N0YW1wIDw9IFRDUF9QQVdTX01TTCkgewotCQkJdHAtPnJ4X29wdC50c19yZWNlbnRfc3RhbXAgPSBwZWVyLT50Y3BfdHNfc3RhbXA7Ci0JCQl0cC0+cnhfb3B0LnRzX3JlY2VudCA9IHBlZXItPnRjcF90czsKKwkJaWYgKHBlZXIpIHsKKwkJCWluZXRfcGVlcl9yZWZjaGVjayhwZWVyKTsKKwkJCWlmICgodTMyKWdldF9zZWNvbmRzKCkgLSBwZWVyLT50Y3BfdHNfc3RhbXAgPD0gVENQX1BBV1NfTVNMKSB7CisJCQkJdHAtPnJ4X29wdC50c19yZWNlbnRfc3RhbXAgPSBwZWVyLT50Y3BfdHNfc3RhbXA7CisJCQkJdHAtPnJ4X29wdC50c19yZWNlbnQgPSBwZWVyLT50Y3BfdHM7CisJCQl9CiAJCX0KIAl9CiAKQEAgLTIzNyw3ICsyNDAsNyBAQAogCiAJLyogT0ssIG5vdyBjb21taXQgZGVzdGluYXRpb24gdG8gc29ja2V0LiAgKi8KIAlzay0+c2tfZ3NvX3R5cGUgPSBTS0JfR1NPX1RDUFY0OwotCXNrX3NldHVwX2NhcHMoc2ssICZydC0+dS5kc3QpOworCXNrX3NldHVwX2NhcHMoc2ssICZydC0+ZHN0KTsKIAogCWlmICghdHAtPndyaXRlX3NlcSkKIAkJdHAtPndyaXRlX3NlcSA9IHNlY3VyZV90Y3Bfc2VxdWVuY2VfbnVtYmVyKGluZXQtPmluZXRfc2FkZHIsCkBAIC0yNjUsNiArMjY4LDcgQEAKIAlpbmV0LT5pbmV0X2Rwb3J0ID0gMDsKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTCh0Y3BfdjRfY29ubmVjdCk7CiAKIC8qCiAgKiBUaGlzIHJvdXRpbmUgZG9lcyBwYXRoIG10dSBkaXNjb3ZlcnkgYXMgZGVmaW5lZCBpbiBSRkMxMTkxLgpAQCAtNTQzLDYgKzU0Nyw3IEBACiAKIAlfX3RjcF92NF9zZW5kX2NoZWNrKHNrYiwgaW5ldC0+aW5ldF9zYWRkciwgaW5ldC0+aW5ldF9kYWRkcik7CiB9CitFWFBPUlRfU1lNQk9MKHRjcF92NF9zZW5kX2NoZWNrKTsKIAogaW50IHRjcF92NF9nc29fc2VuZF9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtNzkzLDE5ICs3OTgsMjAgQEAKIAlrZnJlZShpbmV0X3JzayhyZXEpLT5vcHQpOwogfQogCi0jaWZkZWYgQ09ORklHX1NZTl9DT09LSUVTCi1zdGF0aWMgdm9pZCBzeW5fZmxvb2Rfd2FybmluZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgc3luX2Zsb29kX3dhcm5pbmcoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdGF0aWMgdW5zaWduZWQgbG9uZyB3YXJudGltZTsKKwljb25zdCBjaGFyICptc2c7CiAKLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCAod2FybnRpbWUgKyBIWiAqIDYwKSkpIHsKLQkJd2FybnRpbWUgPSBqaWZmaWVzOwotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAicG9zc2libGUgU1lOIGZsb29kaW5nIG9uIHBvcnQgJWQuIFNlbmRpbmcgY29va2llcy5cbiIsCi0JCSAgICAgICBudG9ocyh0Y3BfaGRyKHNrYiktPmRlc3QpKTsKLQl9Ci19CisjaWZkZWYgQ09ORklHX1NZTl9DT09LSUVTCisJaWYgKHN5c2N0bF90Y3Bfc3luY29va2llcykKKwkJbXNnID0gIlNlbmRpbmcgY29va2llcyI7CisJZWxzZQogI2VuZGlmCisJCW1zZyA9ICJEcm9wcGluZyByZXF1ZXN0IjsKKworCXByX2luZm8oIlRDUDogUG9zc2libGUgU1lOIGZsb29kaW5nIG9uIHBvcnQgJWQuICVzLlxuIiwKKwkJCQludG9ocyh0Y3BfaGRyKHNrYiktPmRlc3QpLCBtc2cpOworfQogCiAvKgogICogU2F2ZSBhbmQgY29tcGlsZSBJUHY0IG9wdGlvbnMgaW50byB0aGUgcmVxdWVzdF9zb2NrIGlmIG5lZWRlZC4KQEAgLTg1Nyw3ICs4NjMsNiBAQAogewogCXJldHVybiB0Y3BfdjRfbWQ1X2RvX2xvb2t1cChzaywgaW5ldF9zayhhZGRyX3NrKS0+aW5ldF9kYWRkcik7CiB9Ci0KIEVYUE9SVF9TWU1CT0wodGNwX3Y0X21kNV9sb29rdXApOwogCiBzdGF0aWMgc3RydWN0IHRjcF9tZDVzaWdfa2V5ICp0Y3BfdjRfcmVxc2tfbWQ1X2xvb2t1cChzdHJ1Y3Qgc29jayAqc2ssCkBAIC05MjQsNyArOTI5LDYgQEAKIAl9CiAJcmV0dXJuIDA7CiB9Ci0KIEVYUE9SVF9TWU1CT0wodGNwX3Y0X21kNV9kb19hZGQpOwogCiBzdGF0aWMgaW50IHRjcF92NF9tZDVfYWRkX2Z1bmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqYWRkcl9zaywKQEAgLTk2Miw3ICs5NjYsNiBAQAogCX0KIAlyZXR1cm4gLUVOT0VOVDsKIH0KLQogRVhQT1JUX1NZTUJPTCh0Y3BfdjRfbWQ1X2RvX2RlbCk7CiAKIHN0YXRpYyB2b2lkIHRjcF92NF9jbGVhcl9tZDVfbGlzdChzdHJ1Y3Qgc29jayAqc2spCkBAIC0xMTM1LDcgKzExMzgsNiBAQAogCW1lbXNldChtZDVfaGFzaCwgMCwgMTYpOwogCXJldHVybiAxOwogfQotCiBFWFBPUlRfU1lNQk9MKHRjcF92NF9tZDVfaGFzaF9za2IpOwogCiBzdGF0aWMgaW50IHRjcF92NF9pbmJvdW5kX21kNV9oYXNoKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTEyNDMsNiArMTI0NSw4IEBACiAJICogZXZpZGVudGx5IHJlYWwgb25lLgogCSAqLwogCWlmIChpbmV0X2Nza19yZXFza19xdWV1ZV9pc19mdWxsKHNrKSAmJiAhaXNuKSB7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlzeW5fZmxvb2Rfd2FybmluZyhza2IpOwogI2lmZGVmIENPTkZJR19TWU5fQ09PS0lFUwogCQlpZiAoc3lzY3RsX3RjcF9zeW5jb29raWVzKSB7CiAJCQl3YW50X2Nvb2tpZSA9IDE7CkBAIC0xMzIzLDE1ICsxMzI3LDEyIEBACiAJaWYgKHNlY3VyaXR5X2luZXRfY29ubl9yZXF1ZXN0KHNrLCBza2IsIHJlcSkpCiAJCWdvdG8gZHJvcF9hbmRfZnJlZTsKIAotCWlmICghd2FudF9jb29raWUpCisJaWYgKCF3YW50X2Nvb2tpZSB8fCB0bXBfb3B0LnRzdGFtcF9vaykKIAkJVENQX0VDTl9jcmVhdGVfcmVxdWVzdChyZXEsIHRjcF9oZHIoc2tiKSk7CiAKIAlpZiAod2FudF9jb29raWUpIHsKLSNpZmRlZiBDT05GSUdfU1lOX0NPT0tJRVMKLQkJc3luX2Zsb29kX3dhcm5pbmcoc2tiKTsKLQkJcmVxLT5jb29raWVfdHMgPSB0bXBfb3B0LnRzdGFtcF9vazsKLSNlbmRpZgogCQlpc24gPSBjb29raWVfdjRfaW5pdF9zZXF1ZW5jZShzaywgc2tiLCAmcmVxLT5tc3MpOworCQlyZXEtPmNvb2tpZV90cyA9IHRtcF9vcHQudHN0YW1wX29rOwogCX0gZWxzZSBpZiAoIWlzbikgewogCQlzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyID0gTlVMTDsKIApAQCAtMTM0OSw2ICsxMzUwLDcgQEAKIAkJICAgIChkc3QgPSBpbmV0X2Nza19yb3V0ZV9yZXEoc2ssIHJlcSkpICE9IE5VTEwgJiYKIAkJICAgIChwZWVyID0gcnRfZ2V0X3BlZXIoKHN0cnVjdCBydGFibGUgKilkc3QpKSAhPSBOVUxMICYmCiAJCSAgICBwZWVyLT52NGRhZGRyID09IHNhZGRyKSB7CisJCQlpbmV0X3BlZXJfcmVmY2hlY2socGVlcik7CiAJCQlpZiAoKHUzMilnZXRfc2Vjb25kcygpIC0gcGVlci0+dGNwX3RzX3N0YW1wIDwgVENQX1BBV1NfTVNMICYmCiAJCQkgICAgKHMzMikocGVlci0+dGNwX3RzIC0gcmVxLT50c19yZWNlbnQpID4KIAkJCQkJCQlUQ1BfUEFXU19XSU5ET1cpIHsKQEAgLTEzOTMsNiArMTM5NSw3IEBACiBkcm9wOgogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTCh0Y3BfdjRfY29ubl9yZXF1ZXN0KTsKIAogCiAvKgpAQCAtMTQ3OCw2ICsxNDgxLDcgQEAKIAlkc3RfcmVsZWFzZShkc3QpOwogCXJldHVybiBOVUxMOwogfQorRVhQT1JUX1NZTUJPTCh0Y3BfdjRfc3luX3JlY3Zfc29jayk7CiAKIHN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX3Y0X2huZF9yZXEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtMTUwNCw3ICsxNTA4LDcgQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfU1lOX0NPT0tJRVMKLQlpZiAoIXRoLT5yc3QgJiYgIXRoLT5zeW4gJiYgdGgtPmFjaykKKwlpZiAoIXRoLT5zeW4pCiAJCXNrID0gY29va2llX3Y0X2NoZWNrKHNrLCBza2IsICYoSVBDQihza2IpLT5vcHQpKTsKICNlbmRpZgogCXJldHVybiBzazsKQEAgLTE2MDcsNiArMTYxMSw3IEBACiAJVENQX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIFRDUF9NSUJfSU5FUlJTKTsKIAlnb3RvIGRpc2NhcmQ7CiB9CitFWFBPUlRfU1lNQk9MKHRjcF92NF9kb19yY3YpOwogCiAvKgogICoJRnJvbSB0Y3BfaW5wdXQuYwpAQCAtMTc5Myw2ICsxNzk4LDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTCh0Y3BfdjRfcmVtZW1iZXJfc3RhbXApOwogCiBpbnQgdGNwX3Y0X3R3X3JlbWVtYmVyX3N0YW1wKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3KQogewpAQCAtMTgzMiw2ICsxODM4LDcgQEAKIAkuY29tcGF0X2dldHNvY2tvcHQgPSBjb21wYXRfaXBfZ2V0c29ja29wdCwKICNlbmRpZgogfTsKK0VYUE9SVF9TWU1CT0woaXB2NF9zcGVjaWZpYyk7CiAKICNpZmRlZiBDT05GSUdfVENQX01ENVNJRwogc3RhdGljIGNvbnN0IHN0cnVjdCB0Y3Bfc29ja19hZl9vcHMgdGNwX3NvY2tfaXB2NF9zcGVjaWZpYyA9IHsKQEAgLTE5NjAsNyArMTk2Nyw2IEBACiAKIAlwZXJjcHVfY291bnRlcl9kZWMoJnRjcF9zb2NrZXRzX2FsbG9jYXRlZCk7CiB9Ci0KIEVYUE9SVF9TWU1CT0wodGNwX3Y0X2Rlc3Ryb3lfc29jayk7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwpAQCAtMTk3OCw2ICsxOTg0LDExIEBACiAJCWhsaXN0X251bGxzX2VudHJ5KHR3LT50d19ub2RlLm5leHQsIHR5cGVvZigqdHcpLCB0d19ub2RlKSA6IE5VTEw7CiB9CiAKKy8qCisgKiBHZXQgbmV4dCBsaXN0ZW5lciBzb2NrZXQgZm9sbG93IGN1ci4gIElmIGN1ciBpcyBOVUxMLCBnZXQgZmlyc3Qgc29ja2V0CisgKiBzdGFydGluZyBmcm9tIGJ1Y2tldCBnaXZlbiBpbiBzdC0+YnVja2V0OyB3aGVuIHN0LT5idWNrZXQgaXMgemVybyB0aGUKKyAqIHZlcnkgZmlyc3Qgc29ja2V0IGluIHRoZSBoYXNoIHRhYmxlIGlzIHJldHVybmVkLgorICovCiBzdGF0aWMgdm9pZCAqbGlzdGVuaW5nX2dldF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpjdXIpCiB7CiAJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrOwpAQCAtMTk4OCwxNCArMTk5OSwxNSBAQAogCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOwogCiAJaWYgKCFzaykgewotCQlzdC0+YnVja2V0ID0gMDsKLQkJaWxiID0gJnRjcF9oYXNoaW5mby5saXN0ZW5pbmdfaGFzaFswXTsKKwkJaWxiID0gJnRjcF9oYXNoaW5mby5saXN0ZW5pbmdfaGFzaFtzdC0+YnVja2V0XTsKIAkJc3Bpbl9sb2NrX2JoKCZpbGItPmxvY2spOwogCQlzayA9IHNrX251bGxzX2hlYWQoJmlsYi0+aGVhZCk7CisJCXN0LT5vZmZzZXQgPSAwOwogCQlnb3RvIGdldF9zazsKIAl9CiAJaWxiID0gJnRjcF9oYXNoaW5mby5saXN0ZW5pbmdfaGFzaFtzdC0+YnVja2V0XTsKIAkrK3N0LT5udW07CisJKytzdC0+b2Zmc2V0OwogCiAJaWYgKHN0LT5zdGF0ZSA9PSBUQ1BfU0VRX1NUQVRFX09QRU5SRVEpIHsKIAkJc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxID0gY3VyOwpAQCAtMjAxMCw2ICsyMDIyLDcgQEAKIAkJCQl9CiAJCQkJcmVxID0gcmVxLT5kbF9uZXh0OwogCQkJfQorCQkJc3QtPm9mZnNldCA9IDA7CiAJCQlpZiAoKytzdC0+c2J1Y2tldCA+PSBpY3NrLT5pY3NrX2FjY2VwdF9xdWV1ZS5saXN0ZW5fb3B0LT5ucl90YWJsZV9lbnRyaWVzKQogCQkJCWJyZWFrOwogZ2V0X3JlcToKQEAgLTIwNDUsNiArMjA1OCw3IEBACiAJCXJlYWRfdW5sb2NrX2JoKCZpY3NrLT5pY3NrX2FjY2VwdF9xdWV1ZS5zeW5fd2FpdF9sb2NrKTsKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJmlsYi0+bG9jayk7CisJc3QtPm9mZnNldCA9IDA7CiAJaWYgKCsrc3QtPmJ1Y2tldCA8IElORVRfTEhUQUJMRV9TSVpFKSB7CiAJCWlsYiA9ICZ0Y3BfaGFzaGluZm8ubGlzdGVuaW5nX2hhc2hbc3QtPmJ1Y2tldF07CiAJCXNwaW5fbG9ja19iaCgmaWxiLT5sb2NrKTsKQEAgLTIwNTgsNyArMjA3MiwxMiBAQAogCiBzdGF0aWMgdm9pZCAqbGlzdGVuaW5nX2dldF9pZHgoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogewotCXZvaWQgKnJjID0gbGlzdGVuaW5nX2dldF9uZXh0KHNlcSwgTlVMTCk7CisJc3RydWN0IHRjcF9pdGVyX3N0YXRlICpzdCA9IHNlcS0+cHJpdmF0ZTsKKwl2b2lkICpyYzsKKworCXN0LT5idWNrZXQgPSAwOworCXN0LT5vZmZzZXQgPSAwOworCXJjID0gbGlzdGVuaW5nX2dldF9uZXh0KHNlcSwgTlVMTCk7CiAKIAl3aGlsZSAocmMgJiYgKnBvcykgewogCQlyYyA9IGxpc3RlbmluZ19nZXRfbmV4dChzZXEsIHJjKTsKQEAgLTIwNzMsMTMgKzIwOTIsMTggQEAKIAkJaGxpc3RfbnVsbHNfZW1wdHkoJnRjcF9oYXNoaW5mby5laGFzaFtzdC0+YnVja2V0XS50d2NoYWluKTsKIH0KIAorLyoKKyAqIEdldCBmaXJzdCBlc3RhYmxpc2hlZCBzb2NrZXQgc3RhcnRpbmcgZnJvbSBidWNrZXQgZ2l2ZW4gaW4gc3QtPmJ1Y2tldC4KKyAqIElmIHN0LT5idWNrZXQgaXMgemVybywgdGhlIHZlcnkgZmlyc3Qgc29ja2V0IGluIHRoZSBoYXNoIGlzIHJldHVybmVkLgorICovCiBzdGF0aWMgdm9pZCAqZXN0YWJsaXNoZWRfZ2V0X2ZpcnN0KHN0cnVjdCBzZXFfZmlsZSAqc2VxKQogewogCXN0cnVjdCB0Y3BfaXRlcl9zdGF0ZSAqc3QgPSBzZXEtPnByaXZhdGU7CiAJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CiAJdm9pZCAqcmMgPSBOVUxMOwogCi0JZm9yIChzdC0+YnVja2V0ID0gMDsgc3QtPmJ1Y2tldCA8PSB0Y3BfaGFzaGluZm8uZWhhc2hfbWFzazsgKytzdC0+YnVja2V0KSB7CisJc3QtPm9mZnNldCA9IDA7CisJZm9yICg7IHN0LT5idWNrZXQgPD0gdGNwX2hhc2hpbmZvLmVoYXNoX21hc2s7ICsrc3QtPmJ1Y2tldCkgewogCQlzdHJ1Y3Qgc29jayAqc2s7CiAJCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpub2RlOwogCQlzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dzsKQEAgLTIxMjQsNiArMjE0OCw3IEBACiAJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CiAKIAkrK3N0LT5udW07CisJKytzdC0+b2Zmc2V0OwogCiAJaWYgKHN0LT5zdGF0ZSA9PSBUQ1BfU0VRX1NUQVRFX1RJTUVfV0FJVCkgewogCQl0dyA9IGN1cjsKQEAgLTIxNDAsNiArMjE2NSw3IEBACiAJCXN0LT5zdGF0ZSA9IFRDUF9TRVFfU1RBVEVfRVNUQUJMSVNIRUQ7CiAKIAkJLyogTG9vayBmb3IgbmV4dCBub24gZW1wdHkgYnVja2V0ICovCisJCXN0LT5vZmZzZXQgPSAwOwogCQl3aGlsZSAoKytzdC0+YnVja2V0IDw9IHRjcF9oYXNoaW5mby5laGFzaF9tYXNrICYmCiAJCQkJZW1wdHlfYnVja2V0KHN0KSkKIAkJCTsKQEAgLTIxNjcsNyArMjE5MywxMSBAQAogCiBzdGF0aWMgdm9pZCAqZXN0YWJsaXNoZWRfZ2V0X2lkeChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90IHBvcykKIHsKLQl2b2lkICpyYyA9IGVzdGFibGlzaGVkX2dldF9maXJzdChzZXEpOworCXN0cnVjdCB0Y3BfaXRlcl9zdGF0ZSAqc3QgPSBzZXEtPnByaXZhdGU7CisJdm9pZCAqcmM7CisKKwlzdC0+YnVja2V0ID0gMDsKKwlyYyA9IGVzdGFibGlzaGVkX2dldF9maXJzdChzZXEpOwogCiAJd2hpbGUgKHJjICYmIHBvcykgewogCQlyYyA9IGVzdGFibGlzaGVkX2dldF9uZXh0KHNlcSwgcmMpOwpAQCAtMjE5MiwyNCArMjIyMiw3MiBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIHZvaWQgKnRjcF9zZWVrX2xhc3RfcG9zKHN0cnVjdCBzZXFfZmlsZSAqc2VxKQoreworCXN0cnVjdCB0Y3BfaXRlcl9zdGF0ZSAqc3QgPSBzZXEtPnByaXZhdGU7CisJaW50IG9mZnNldCA9IHN0LT5vZmZzZXQ7CisJaW50IG9yaWdfbnVtID0gc3QtPm51bTsKKwl2b2lkICpyYyA9IE5VTEw7CisKKwlzd2l0Y2ggKHN0LT5zdGF0ZSkgeworCWNhc2UgVENQX1NFUV9TVEFURV9PUEVOUkVROgorCWNhc2UgVENQX1NFUV9TVEFURV9MSVNURU5JTkc6CisJCWlmIChzdC0+YnVja2V0ID49IElORVRfTEhUQUJMRV9TSVpFKQorCQkJYnJlYWs7CisJCXN0LT5zdGF0ZSA9IFRDUF9TRVFfU1RBVEVfTElTVEVOSU5HOworCQlyYyA9IGxpc3RlbmluZ19nZXRfbmV4dChzZXEsIE5VTEwpOworCQl3aGlsZSAob2Zmc2V0LS0gJiYgcmMpCisJCQlyYyA9IGxpc3RlbmluZ19nZXRfbmV4dChzZXEsIHJjKTsKKwkJaWYgKHJjKQorCQkJYnJlYWs7CisJCXN0LT5idWNrZXQgPSAwOworCQkvKiBGYWxsdGhyb3VnaCAqLworCWNhc2UgVENQX1NFUV9TVEFURV9FU1RBQkxJU0hFRDoKKwljYXNlIFRDUF9TRVFfU1RBVEVfVElNRV9XQUlUOgorCQlzdC0+c3RhdGUgPSBUQ1BfU0VRX1NUQVRFX0VTVEFCTElTSEVEOworCQlpZiAoc3QtPmJ1Y2tldCA+IHRjcF9oYXNoaW5mby5laGFzaF9tYXNrKQorCQkJYnJlYWs7CisJCXJjID0gZXN0YWJsaXNoZWRfZ2V0X2ZpcnN0KHNlcSk7CisJCXdoaWxlIChvZmZzZXQtLSAmJiByYykKKwkJCXJjID0gZXN0YWJsaXNoZWRfZ2V0X25leHQoc2VxLCByYyk7CisJfQorCisJc3QtPm51bSA9IG9yaWdfbnVtOworCisJcmV0dXJuIHJjOworfQorCiBzdGF0aWMgdm9pZCAqdGNwX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7CiAJc3RydWN0IHRjcF9pdGVyX3N0YXRlICpzdCA9IHNlcS0+cHJpdmF0ZTsKKwl2b2lkICpyYzsKKworCWlmICgqcG9zICYmICpwb3MgPT0gc3QtPmxhc3RfcG9zKSB7CisJCXJjID0gdGNwX3NlZWtfbGFzdF9wb3Moc2VxKTsKKwkJaWYgKHJjKQorCQkJZ290byBvdXQ7CisJfQorCiAJc3QtPnN0YXRlID0gVENQX1NFUV9TVEFURV9MSVNURU5JTkc7CiAJc3QtPm51bSA9IDA7Ci0JcmV0dXJuICpwb3MgPyB0Y3BfZ2V0X2lkeChzZXEsICpwb3MgLSAxKSA6IFNFUV9TVEFSVF9UT0tFTjsKKwlzdC0+YnVja2V0ID0gMDsKKwlzdC0+b2Zmc2V0ID0gMDsKKwlyYyA9ICpwb3MgPyB0Y3BfZ2V0X2lkeChzZXEsICpwb3MgLSAxKSA6IFNFUV9TVEFSVF9UT0tFTjsKKworb3V0OgorCXN0LT5sYXN0X3BvcyA9ICpwb3M7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgdm9pZCAqdGNwX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKKwlzdHJ1Y3QgdGNwX2l0ZXJfc3RhdGUgKnN0ID0gc2VxLT5wcml2YXRlOwogCXZvaWQgKnJjID0gTlVMTDsKLQlzdHJ1Y3QgdGNwX2l0ZXJfc3RhdGUgKnN0OwogCiAJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7CiAJCXJjID0gdGNwX2dldF9pZHgoc2VxLCAwKTsKIAkJZ290byBvdXQ7CiAJfQotCXN0ID0gc2VxLT5wcml2YXRlOwogCiAJc3dpdGNoIChzdC0+c3RhdGUpIHsKIAljYXNlIFRDUF9TRVFfU1RBVEVfT1BFTlJFUToKQEAgLTIyMTcsNiArMjI5NSw4IEBACiAJCXJjID0gbGlzdGVuaW5nX2dldF9uZXh0KHNlcSwgdik7CiAJCWlmICghcmMpIHsKIAkJCXN0LT5zdGF0ZSA9IFRDUF9TRVFfU1RBVEVfRVNUQUJMSVNIRUQ7CisJCQlzdC0+YnVja2V0ID0gMDsKKwkJCXN0LT5vZmZzZXQgPSAwOwogCQkJcmMJICA9IGVzdGFibGlzaGVkX2dldF9maXJzdChzZXEpOwogCQl9CiAJCWJyZWFrOwpAQCAtMjIyNyw2ICsyMzA3LDcgQEAKIAl9CiBvdXQ6CiAJKysqcG9zOworCXN0LT5sYXN0X3BvcyA9ICpwb3M7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0yMjY1LDYgKzIzNDYsNyBAQAogCiAJcyA9ICgoc3RydWN0IHNlcV9maWxlICopZmlsZS0+cHJpdmF0ZV9kYXRhKS0+cHJpdmF0ZTsKIAlzLT5mYW1pbHkJCT0gYWZpbmZvLT5mYW1pbHk7CisJcy0+bGFzdF9wb3MgCQk9IDA7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyODgsMTEgKzIzNzAsMTMgQEAKIAkJcmMgPSAtRU5PTUVNOwogCXJldHVybiByYzsKIH0KK0VYUE9SVF9TWU1CT0wodGNwX3Byb2NfcmVnaXN0ZXIpOwogCiB2b2lkIHRjcF9wcm9jX3VucmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNwX3NlcV9hZmluZm8gKmFmaW5mbykKIHsKIAlwcm9jX25ldF9yZW1vdmUobmV0LCBhZmluZm8tPm5hbWUpOwogfQorRVhQT1JUX1NZTUJPTCh0Y3BfcHJvY191bnJlZ2lzdGVyKTsKIAogc3RhdGljIHZvaWQgZ2V0X29wZW5yZXE0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAogCQkJIHN0cnVjdCBzZXFfZmlsZSAqZiwgaW50IGksIGludCB1aWQsIGludCAqbGVuKQpAQCAtMjUxNiw2ICsyNjAwLDggQEAKIAkuc2V0c29ja29wdAkJPSB0Y3Bfc2V0c29ja29wdCwKIAkuZ2V0c29ja29wdAkJPSB0Y3BfZ2V0c29ja29wdCwKIAkucmVjdm1zZwkJPSB0Y3BfcmVjdm1zZywKKwkuc2VuZG1zZwkJPSB0Y3Bfc2VuZG1zZywKKwkuc2VuZHBhZ2UJCT0gdGNwX3NlbmRwYWdlLAogCS5iYWNrbG9nX3JjdgkJPSB0Y3BfdjRfZG9fcmN2LAogCS5oYXNoCQkJPSBpbmV0X2hhc2gsCiAJLnVuaGFzaAkJCT0gaW5ldF91bmhhc2gsCkBAIC0yNTM0LDExICsyNjIwLDEzIEBACiAJLnR3c2tfcHJvdAkJPSAmdGNwX3RpbWV3YWl0X3NvY2tfb3BzLAogCS5yc2tfcHJvdAkJPSAmdGNwX3JlcXVlc3Rfc29ja19vcHMsCiAJLmguaGFzaGluZm8JCT0gJnRjcF9oYXNoaW5mbywKKwkubm9fYXV0b2JpbmQJCT0gdHJ1ZSwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9zZXRzb2Nrb3B0CT0gY29tcGF0X3RjcF9zZXRzb2Nrb3B0LAogCS5jb21wYXRfZ2V0c29ja29wdAk9IGNvbXBhdF90Y3BfZ2V0c29ja29wdCwKICNlbmRpZgogfTsKK0VYUE9SVF9TWU1CT0wodGNwX3Byb3QpOwogCiAKIHN0YXRpYyBpbnQgX19uZXRfaW5pdCB0Y3Bfc2tfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCkBAIC0yNTY5LDIwICsyNjU3LDMgQEAKIAlpZiAocmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmdGNwX3NrX29wcykpCiAJCXBhbmljKCJGYWlsZWQgdG8gY3JlYXRlIHRoZSBUQ1AgY29udHJvbCBzb2NrZXQuXG4iKTsKIH0KLQotRVhQT1JUX1NZTUJPTChpcHY0X3NwZWNpZmljKTsKLUVYUE9SVF9TWU1CT0wodGNwX2hhc2hpbmZvKTsKLUVYUE9SVF9TWU1CT0wodGNwX3Byb3QpOwotRVhQT1JUX1NZTUJPTCh0Y3BfdjRfY29ubl9yZXF1ZXN0KTsKLUVYUE9SVF9TWU1CT0wodGNwX3Y0X2Nvbm5lY3QpOwotRVhQT1JUX1NZTUJPTCh0Y3BfdjRfZG9fcmN2KTsKLUVYUE9SVF9TWU1CT0wodGNwX3Y0X3JlbWVtYmVyX3N0YW1wKTsKLUVYUE9SVF9TWU1CT0wodGNwX3Y0X3NlbmRfY2hlY2spOwotRVhQT1JUX1NZTUJPTCh0Y3BfdjRfc3luX3JlY3Zfc29jayk7Ci0KLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotRVhQT1JUX1NZTUJPTCh0Y3BfcHJvY19yZWdpc3Rlcik7Ci1FWFBPUlRfU1lNQk9MKHRjcF9wcm9jX3VucmVnaXN0ZXIpOwotI2VuZGlmCi1FWFBPUlRfU1lNQk9MKHN5c2N0bF90Y3BfbG93X2xhdGVuY3kpOwotCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKaW5kZXggNzk0YzJlMS4uZjI1YjU2YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCisrKyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwpAQCAtNDcsNyArNDcsNiBAQAogCS50d2NhbF90aW1lcgk9IFRJTUVSX0lOSVRJQUxJWkVSKGluZXRfdHdkcl90d2NhbF90aWNrLCAwLAogCQkJCQkgICAgKHVuc2lnbmVkIGxvbmcpJnRjcF9kZWF0aF9yb3cpLAogfTsKLQogRVhQT1JUX1NZTUJPTF9HUEwodGNwX2RlYXRoX3Jvdyk7CiAKIHN0YXRpYyBfX2lubGluZV9fIGludCB0Y3BfaW5fd2luZG93KHUzMiBzZXEsIHUzMiBlbmRfc2VxLCB1MzIgc193aW4sIHUzMiBlX3dpbikKQEAgLTI2Miw2ICsyNjEsNyBAQAogCWluZXRfdHdza19wdXQodHcpOwogCXJldHVybiBUQ1BfVFdfU1VDQ0VTUzsKIH0KK0VYUE9SVF9TWU1CT0wodGNwX3RpbWV3YWl0X3N0YXRlX3Byb2Nlc3MpOwogCiAvKgogICogTW92ZSBhIHNvY2tldCB0byB0aW1lLXdhaXQgb3IgZGVhZCBmaW4td2FpdC0yIHN0YXRlLgpAQCAtMzYyLDcgKzM2Miw2IEBACiAJCXRjcF9mcmVlX21kNXNpZ19wb29sKCk7CiAjZW5kaWYKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwodGNwX3R3c2tfZGVzdHJ1Y3Rvcik7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBUQ1BfRUNOX29wZW5yZXFfY2hpbGQoc3RydWN0IHRjcF9zb2NrICp0cCwKQEAgLTUxMCw2ICs1MDksNyBAQAogCX0KIAlyZXR1cm4gbmV3c2s7CiB9CitFWFBPUlRfU1lNQk9MKHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZCk7CiAKIC8qCiAgKglQcm9jZXNzIGFuIGluY29taW5nIHBhY2tldCBmb3IgU1lOX1JFQ1Ygc29ja2V0cyByZXByZXNlbnRlZApAQCAtNzA2LDYgKzcwNiw3IEBACiAJaW5ldF9jc2tfcmVxc2tfcXVldWVfZHJvcChzaywgcmVxLCBwcmV2KTsKIAlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0wodGNwX2NoZWNrX3JlcSk7CiAKIC8qCiAgKiBRdWV1ZSBzZWdtZW50IG9uIHRoZSBuZXcgc29ja2V0IGlmIHRoZSBuZXcgc29ja2V0IGlzIGFjdGl2ZSwKQEAgLTczNyw4ICs3MzgsNCBAQAogCXNvY2tfcHV0KGNoaWxkKTsKIAlyZXR1cm4gcmV0OwogfQotCi1FWFBPUlRfU1lNQk9MKHRjcF9jaGVja19yZXEpOwogRVhQT1JUX1NZTUJPTCh0Y3BfY2hpbGRfcHJvY2Vzcyk7Ci1FWFBPUlRfU1lNQk9MKHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZCk7Ci1FWFBPUlRfU1lNQk9MKHRjcF90aW1ld2FpdF9zdGF0ZV9wcm9jZXNzKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwppbmRleCBiNGVkOTU3Li5kZTNiZDg0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCkBAIC0yNDcsNiArMjQ3LDcgQEAKIAkvKiBTZXQgdGhlIGNsYW1wIG5vIGhpZ2hlciB0aGFuIG1heCByZXByZXNlbnRhYmxlIHZhbHVlICovCiAJKCp3aW5kb3dfY2xhbXApID0gbWluKDY1NTM1VSA8PCAoKnJjdl93c2NhbGUpLCAqd2luZG93X2NsYW1wKTsKIH0KK0VYUE9SVF9TWU1CT0wodGNwX3NlbGVjdF9pbml0aWFsX3dpbmRvdyk7CiAKIC8qIENob3NlIGEgbmV3IHdpbmRvdyB0byBhZHZlcnRpc2UsIHVwZGF0ZSBzdGF0ZSBpbiB0Y3Bfc29jayBmb3IgdGhlCiAgKiBzb2NrZXQsIGFuZCByZXR1cm4gcmVzdWx0IHdpdGggUkZDMTMyMyBzY2FsaW5nIGFwcGxpZWQuICBUaGUgcmV0dXJuCkBAIC0yOTQsOSArMjk1LDkgQEAKIC8qIFBhY2tldCBFQ04gc3RhdGUgZm9yIGEgU1lOLUFDSyAqLwogc3RhdGljIGlubGluZSB2b2lkIFRDUF9FQ05fc2VuZF9zeW5hY2soc3RydWN0IHRjcF9zb2NrICp0cCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlUQ1BfU0tCX0NCKHNrYiktPmZsYWdzICY9IH5UQ1BDQl9GTEFHX0NXUjsKKwlUQ1BfU0tCX0NCKHNrYiktPmZsYWdzICY9IH5UQ1BIRFJfQ1dSOwogCWlmICghKHRwLT5lY25fZmxhZ3MgJiBUQ1BfRUNOX09LKSkKLQkJVENQX1NLQl9DQihza2IpLT5mbGFncyAmPSB+VENQQ0JfRkxBR19FQ0U7CisJCVRDUF9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgJj0gflRDUEhEUl9FQ0U7CiB9CiAKIC8qIFBhY2tldCBFQ04gc3RhdGUgZm9yIGEgU1lOLiAgKi8KQEAgLTMwNiw3ICszMDcsNyBAQAogCiAJdHAtPmVjbl9mbGFncyA9IDA7CiAJaWYgKHN5c2N0bF90Y3BfZWNuID09IDEpIHsKLQkJVENQX1NLQl9DQihza2IpLT5mbGFncyB8PSBUQ1BDQl9GTEFHX0VDRSB8IFRDUENCX0ZMQUdfQ1dSOworCQlUQ1BfU0tCX0NCKHNrYiktPmZsYWdzIHw9IFRDUEhEUl9FQ0UgfCBUQ1BIRFJfQ1dSOwogCQl0cC0+ZWNuX2ZsYWdzID0gVENQX0VDTl9PSzsKIAl9CiB9CkBAIC0zNjEsNyArMzYyLDcgQEAKIAlza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlID0gMDsKIAogCVRDUF9TS0JfQ0Ioc2tiKS0+c2VxID0gc2VxOwotCWlmIChmbGFncyAmIChUQ1BDQl9GTEFHX1NZTiB8IFRDUENCX0ZMQUdfRklOKSkKKwlpZiAoZmxhZ3MgJiAoVENQSERSX1NZTiB8IFRDUEhEUl9GSU4pKQogCQlzZXErKzsKIAlUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEgPSBzZXE7CiB9CkBAIC04MjAsNyArODIxLDcgQEAKIAl0Y2IgPSBUQ1BfU0tCX0NCKHNrYik7CiAJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOwogCi0JaWYgKHVubGlrZWx5KHRjYi0+ZmxhZ3MgJiBUQ1BDQl9GTEFHX1NZTikpCisJaWYgKHVubGlrZWx5KHRjYi0+ZmxhZ3MgJiBUQ1BIRFJfU1lOKSkKIAkJdGNwX29wdGlvbnNfc2l6ZSA9IHRjcF9zeW5fb3B0aW9ucyhzaywgc2tiLCAmb3B0cywgJm1kNSk7CiAJZWxzZQogCQl0Y3Bfb3B0aW9uc19zaXplID0gdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc2ssIHNrYiwgJm9wdHMsCkBAIC04NDMsNyArODQ0LDcgQEAKIAkqKCgoX19iZTE2ICopdGgpICsgNikJPSBodG9ucygoKHRjcF9oZWFkZXJfc2l6ZSA+PiAyKSA8PCAxMikgfAogCQkJCQl0Y2ItPmZsYWdzKTsKIAotCWlmICh1bmxpa2VseSh0Y2ItPmZsYWdzICYgVENQQ0JfRkxBR19TWU4pKSB7CisJaWYgKHVubGlrZWx5KHRjYi0+ZmxhZ3MgJiBUQ1BIRFJfU1lOKSkgewogCQkvKiBSRkMxMzIzOiBUaGUgd2luZG93IGluIFNZTiAmIFNZTi9BQ0sgc2VnbWVudHMKIAkJICogaXMgbmV2ZXIgc2NhbGVkLgogCQkgKi8KQEAgLTg2Niw3ICs4NjcsNyBAQAogCX0KIAogCXRjcF9vcHRpb25zX3dyaXRlKChfX2JlMzIgKikodGggKyAxKSwgdHAsICZvcHRzKTsKLQlpZiAobGlrZWx5KCh0Y2ItPmZsYWdzICYgVENQQ0JfRkxBR19TWU4pID09IDApKQorCWlmIChsaWtlbHkoKHRjYi0+ZmxhZ3MgJiBUQ1BIRFJfU1lOKSA9PSAwKSkKIAkJVENQX0VDTl9zZW5kKHNrLCBza2IsIHRjcF9oZWFkZXJfc2l6ZSk7CiAKICNpZmRlZiBDT05GSUdfVENQX01ENVNJRwpAQCAtODgwLDcgKzg4MSw3IEBACiAKIAlpY3NrLT5pY3NrX2FmX29wcy0+c2VuZF9jaGVjayhzaywgc2tiKTsKIAotCWlmIChsaWtlbHkodGNiLT5mbGFncyAmIFRDUENCX0ZMQUdfQUNLKSkKKwlpZiAobGlrZWx5KHRjYi0+ZmxhZ3MgJiBUQ1BIRFJfQUNLKSkKIAkJdGNwX2V2ZW50X2Fja19zZW50KHNrLCB0Y3Bfc2tiX3Bjb3VudChza2IpKTsKIAogCWlmIChza2ItPmxlbiAhPSB0Y3BfaGVhZGVyX3NpemUpCkBAIC0xMDIzLDcgKzEwMjQsNyBAQAogCiAJLyogUFNIIGFuZCBGSU4gc2hvdWxkIG9ubHkgYmUgc2V0IGluIHRoZSBzZWNvbmQgcGFja2V0LiAqLwogCWZsYWdzID0gVENQX1NLQl9DQihza2IpLT5mbGFnczsKLQlUQ1BfU0tCX0NCKHNrYiktPmZsYWdzID0gZmxhZ3MgJiB+KFRDUENCX0ZMQUdfRklOIHwgVENQQ0JfRkxBR19QU0gpOworCVRDUF9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgPSBmbGFncyAmIH4oVENQSERSX0ZJTiB8IFRDUEhEUl9QU0gpOwogCVRDUF9TS0JfQ0IoYnVmZiktPmZsYWdzID0gZmxhZ3M7CiAJVENQX1NLQl9DQihidWZmKS0+c2Fja2VkID0gVENQX1NLQl9DQihza2IpLT5zYWNrZWQ7CiAKQEAgLTExODksNiArMTE5MCw3IEBACiAJaWNzay0+aWNza19tdHVwLnNlYXJjaF9sb3cgPSB0Y3BfbXNzX3RvX210dShzaywgc3lzY3RsX3RjcF9iYXNlX21zcyk7CiAJaWNzay0+aWNza19tdHVwLnByb2JlX3NpemUgPSAwOwogfQorRVhQT1JUX1NZTUJPTCh0Y3BfbXR1cF9pbml0KTsKIAogLyogVGhpcyBmdW5jdGlvbiBzeW5jaHJvbml6ZSBzbmQgbXNzIHRvIGN1cnJlbnQgcG10dS9leHRoZHIgc2V0LgogCkBAIC0xMjMyLDYgKzEyMzQsNyBAQAogCiAJcmV0dXJuIG1zc19ub3c7CiB9CitFWFBPUlRfU1lNQk9MKHRjcF9zeW5jX21zcyk7CiAKIC8qIENvbXB1dGUgdGhlIGN1cnJlbnQgZWZmZWN0aXZlIE1TUywgdGFraW5nIFNBQ0tzIGFuZCBJUCBvcHRpb25zLAogICogYW5kIGV2ZW4gUE1UVSBkaXNjb3ZlcnkgZXZlbnRzIGludG8gYWNjb3VudC4KQEAgLTEzMjgsOCArMTMzMSw3IEBACiAJdTMyIGluX2ZsaWdodCwgY3duZDsKIAogCS8qIERvbid0IGJlIHN0cmljdCBhYm91dCB0aGUgY29uZ2VzdGlvbiB3aW5kb3cgZm9yIHRoZSBmaW5hbCBGSU4uICAqLwotCWlmICgoVENQX1NLQl9DQihza2IpLT5mbGFncyAmIFRDUENCX0ZMQUdfRklOKSAmJgotCSAgICB0Y3Bfc2tiX3Bjb3VudChza2IpID09IDEpCisJaWYgKChUQ1BfU0tCX0NCKHNrYiktPmZsYWdzICYgVENQSERSX0ZJTikgJiYgdGNwX3NrYl9wY291bnQoc2tiKSA9PSAxKQogCQlyZXR1cm4gMTsKIAogCWluX2ZsaWdodCA9IHRjcF9wYWNrZXRzX2luX2ZsaWdodCh0cCk7CkBAIC0xMzk4LDcgKzE0MDAsNyBAQAogCSAqIE5hZ2xlIGNhbiBiZSBpZ25vcmVkIGR1cmluZyBGLVJUTyB0b28gKHNlZSBSRkM0MTM4KS4KIAkgKi8KIAlpZiAodGNwX3VyZ19tb2RlKHRwKSB8fCAodHAtPmZydG9fY291bnRlciA9PSAyKSB8fAotCSAgICAoVENQX1NLQl9DQihza2IpLT5mbGFncyAmIFRDUENCX0ZMQUdfRklOKSkKKwkgICAgKFRDUF9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgJiBUQ1BIRFJfRklOKSkKIAkJcmV0dXJuIDE7CiAKIAlpZiAoIXRjcF9uYWdsZV9jaGVjayh0cCwgc2tiLCBjdXJfbXNzLCBub25hZ2xlKSkKQEAgLTE0NjEsNyArMTQ2Myw3IEBACiAgKiBwYWNrZXQgaGFzIG5ldmVyIGJlZW4gc2VudCBvdXQgYmVmb3JlIChhbmQgdGh1cyBpcyBub3QgY2xvbmVkKS4KICAqLwogc3RhdGljIGludCB0c29fZnJhZ21lbnQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuLAotCQkJdW5zaWduZWQgaW50IG1zc19ub3cpCisJCQl1bnNpZ25lZCBpbnQgbXNzX25vdywgZ2ZwX3QgZ2ZwKQogewogCXN0cnVjdCBza19idWZmICpidWZmOwogCWludCBubGVuID0gc2tiLT5sZW4gLSBsZW47CkBAIC0xNDcxLDcgKzE0NzMsNyBAQAogCWlmIChza2ItPmxlbiAhPSBza2ItPmRhdGFfbGVuKQogCQlyZXR1cm4gdGNwX2ZyYWdtZW50KHNrLCBza2IsIGxlbiwgbXNzX25vdyk7CiAKLQlidWZmID0gc2tfc3RyZWFtX2FsbG9jX3NrYihzaywgMCwgR0ZQX0FUT01JQyk7CisJYnVmZiA9IHNrX3N0cmVhbV9hbGxvY19za2Ioc2ssIDAsIGdmcCk7CiAJaWYgKHVubGlrZWx5KGJ1ZmYgPT0gTlVMTCkpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xNDg3LDcgKzE0ODksNyBAQAogCiAJLyogUFNIIGFuZCBGSU4gc2hvdWxkIG9ubHkgYmUgc2V0IGluIHRoZSBzZWNvbmQgcGFja2V0LiAqLwogCWZsYWdzID0gVENQX1NLQl9DQihza2IpLT5mbGFnczsKLQlUQ1BfU0tCX0NCKHNrYiktPmZsYWdzID0gZmxhZ3MgJiB+KFRDUENCX0ZMQUdfRklOIHwgVENQQ0JfRkxBR19QU0gpOworCVRDUF9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgPSBmbGFncyAmIH4oVENQSERSX0ZJTiB8IFRDUEhEUl9QU0gpOwogCVRDUF9TS0JfQ0IoYnVmZiktPmZsYWdzID0gZmxhZ3M7CiAKIAkvKiBUaGlzIHBhY2tldCB3YXMgbmV2ZXIgc2VudCBvdXQgeWV0LCBzbyBubyBTQUNLIGJpdHMuICovCkBAIC0xNTE4LDcgKzE1MjAsNyBAQAogCWNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKIAl1MzIgc2VuZF93aW4sIGNvbmdfd2luLCBsaW1pdCwgaW5fZmxpZ2h0OwogCi0JaWYgKFRDUF9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgJiBUQ1BDQl9GTEFHX0ZJTikKKwlpZiAoVENQX1NLQl9DQihza2IpLT5mbGFncyAmIFRDUEhEUl9GSU4pCiAJCWdvdG8gc2VuZF9ub3c7CiAKIAlpZiAoaWNzay0+aWNza19jYV9zdGF0ZSAhPSBUQ1BfQ0FfT3BlbikKQEAgLTE2NDQsNyArMTY0Niw3IEBACiAKIAlUQ1BfU0tCX0NCKG5za2IpLT5zZXEgPSBUQ1BfU0tCX0NCKHNrYiktPnNlcTsKIAlUQ1BfU0tCX0NCKG5za2IpLT5lbmRfc2VxID0gVENQX1NLQl9DQihza2IpLT5zZXEgKyBwcm9iZV9zaXplOwotCVRDUF9TS0JfQ0IobnNrYiktPmZsYWdzID0gVENQQ0JfRkxBR19BQ0s7CisJVENQX1NLQl9DQihuc2tiKS0+ZmxhZ3MgPSBUQ1BIRFJfQUNLOwogCVRDUF9TS0JfQ0IobnNrYiktPnNhY2tlZCA9IDA7CiAJbnNrYi0+Y3N1bSA9IDA7CiAJbnNrYi0+aXBfc3VtbWVkID0gc2tiLT5pcF9zdW1tZWQ7CkBAIC0xNjY5LDcgKzE2NzEsNyBAQAogCQkJc2tfd21lbV9mcmVlX3NrYihzaywgc2tiKTsKIAkJfSBlbHNlIHsKIAkJCVRDUF9TS0JfQ0IobnNrYiktPmZsYWdzIHw9IFRDUF9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgJgotCQkJCQkJICAgfihUQ1BDQl9GTEFHX0ZJTnxUQ1BDQl9GTEFHX1BTSCk7CisJCQkJCQkgICB+KFRDUEhEUl9GSU58VENQSERSX1BTSCk7CiAJCQlpZiAoIXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MpIHsKIAkJCQlza2JfcHVsbChza2IsIGNvcHkpOwogCQkJCWlmIChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9QQVJUSUFMKQpAQCAtMTc2OSw3ICsxNzcxLDcgQEAKIAkJCQkJCSAgICBjd25kX3F1b3RhKTsKIAogCQlpZiAoc2tiLT5sZW4gPiBsaW1pdCAmJgotCQkgICAgdW5saWtlbHkodHNvX2ZyYWdtZW50KHNrLCBza2IsIGxpbWl0LCBtc3Nfbm93KSkpCisJCSAgICB1bmxpa2VseSh0c29fZnJhZ21lbnQoc2ssIHNrYiwgbGltaXQsIG1zc19ub3csIGdmcCkpKQogCQkJYnJlYWs7CiAKIAkJVENQX1NLQl9DQihza2IpLT53aGVuID0gdGNwX3RpbWVfc3RhbXA7CkBAIC0yMDIwLDcgKzIwMjIsNyBAQAogCiAJaWYgKCFzeXNjdGxfdGNwX3JldHJhbnNfY29sbGFwc2UpCiAJCXJldHVybjsKLQlpZiAoVENQX1NLQl9DQihza2IpLT5mbGFncyAmIFRDUENCX0ZMQUdfU1lOKQorCWlmIChUQ1BfU0tCX0NCKHNrYiktPmZsYWdzICYgVENQSERSX1NZTikKIAkJcmV0dXJuOwogCiAJdGNwX2Zvcl93cml0ZV9xdWV1ZV9mcm9tX3NhZmUoc2tiLCB0bXAsIHNrKSB7CkBAIC0yMTEyLDcgKzIxMTQsNyBAQAogCSAqIHNpbmNlIGl0IGlzIGNoZWFwIHRvIGRvIHNvIGFuZCBzYXZlcyBieXRlcyBvbiB0aGUgbmV0d29yay4KIAkgKi8KIAlpZiAoc2tiLT5sZW4gPiAwICYmCi0JICAgIChUQ1BfU0tCX0NCKHNrYiktPmZsYWdzICYgVENQQ0JfRkxBR19GSU4pICYmCisJICAgIChUQ1BfU0tCX0NCKHNrYiktPmZsYWdzICYgVENQSERSX0ZJTikgJiYKIAkgICAgdHAtPnNuZF91bmEgPT0gKFRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcSAtIDEpKSB7CiAJCWlmICghcHNrYl90cmltKHNrYiwgMCkpIHsKIAkJCS8qIFJldXNlLCBldmVuIHRob3VnaCBpdCBkb2VzIHNvbWUgdW5uZWNlc3Nhcnkgd29yayAqLwpAQCAtMjIwOCw2ICsyMjEwLDkgQEAKIAlpbnQgbWliX2lkeDsKIAlpbnQgZndkX3JleG1pdHRpbmcgPSAwOwogCisJaWYgKCF0cC0+cGFja2V0c19vdXQpCisJCXJldHVybjsKKwogCWlmICghdHAtPmxvc3Rfb3V0KQogCQl0cC0+cmV0cmFuc21pdF9oaWdoID0gdHAtPnNuZF91bmE7CiAKQEAgLTIzMDEsNyArMjMwNiw3IEBACiAJbXNzX25vdyA9IHRjcF9jdXJyZW50X21zcyhzayk7CiAKIAlpZiAodGNwX3NlbmRfaGVhZChzaykgIT0gTlVMTCkgewotCQlUQ1BfU0tCX0NCKHNrYiktPmZsYWdzIHw9IFRDUENCX0ZMQUdfRklOOworCQlUQ1BfU0tCX0NCKHNrYiktPmZsYWdzIHw9IFRDUEhEUl9GSU47CiAJCVRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcSsrOwogCQl0cC0+d3JpdGVfc2VxKys7CiAJfSBlbHNlIHsKQEAgLTIzMTgsNyArMjMyMyw3IEBACiAJCXNrYl9yZXNlcnZlKHNrYiwgTUFYX1RDUF9IRUFERVIpOwogCQkvKiBGSU4gZWF0cyBhIHNlcXVlbmNlIGJ5dGUsIHdyaXRlX3NlcSBhZHZhbmNlZCBieSB0Y3BfcXVldWVfc2tiKCkuICovCiAJCXRjcF9pbml0X25vbmRhdGFfc2tiKHNrYiwgdHAtPndyaXRlX3NlcSwKLQkJCQkgICAgIFRDUENCX0ZMQUdfQUNLIHwgVENQQ0JfRkxBR19GSU4pOworCQkJCSAgICAgVENQSERSX0FDSyB8IFRDUEhEUl9GSU4pOwogCQl0Y3BfcXVldWVfc2tiKHNrLCBza2IpOwogCX0KIAlfX3RjcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrLCBtc3Nfbm93LCBUQ1BfTkFHTEVfT0ZGKTsKQEAgLTIzNDMsNyArMjM0OCw3IEBACiAJLyogUmVzZXJ2ZSBzcGFjZSBmb3IgaGVhZGVycyBhbmQgcHJlcGFyZSBjb250cm9sIGJpdHMuICovCiAJc2tiX3Jlc2VydmUoc2tiLCBNQVhfVENQX0hFQURFUik7CiAJdGNwX2luaXRfbm9uZGF0YV9za2Ioc2tiLCB0Y3BfYWNjZXB0YWJsZV9zZXEoc2spLAotCQkJICAgICBUQ1BDQl9GTEFHX0FDSyB8IFRDUENCX0ZMQUdfUlNUKTsKKwkJCSAgICAgVENQSERSX0FDSyB8IFRDUEhEUl9SU1QpOwogCS8qIFNlbmQgaXQgb2ZmLiAqLwogCVRDUF9TS0JfQ0Ioc2tiKS0+d2hlbiA9IHRjcF90aW1lX3N0YW1wOwogCWlmICh0Y3BfdHJhbnNtaXRfc2tiKHNrLCBza2IsIDAsIHByaW9yaXR5KSkKQEAgLTIzNjMsMTEgKzIzNjgsMTEgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJc2tiID0gdGNwX3dyaXRlX3F1ZXVlX2hlYWQoc2spOwotCWlmIChza2IgPT0gTlVMTCB8fCAhKFRDUF9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgJiBUQ1BDQl9GTEFHX1NZTikpIHsKKwlpZiAoc2tiID09IE5VTEwgfHwgIShUQ1BfU0tCX0NCKHNrYiktPmZsYWdzICYgVENQSERSX1NZTikpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInRjcF9zZW5kX3N5bmFjazogd3JvbmcgcXVldWUgc3RhdGVcbiIpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9Ci0JaWYgKCEoVENQX1NLQl9DQihza2IpLT5mbGFncyAmIFRDUENCX0ZMQUdfQUNLKSkgeworCWlmICghKFRDUF9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgJiBUQ1BIRFJfQUNLKSkgewogCQlpZiAoc2tiX2Nsb25lZChza2IpKSB7CiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7CiAJCQlpZiAobnNrYiA9PSBOVUxMKQpAQCAtMjM4MSw3ICsyMzg2LDcgQEAKIAkJCXNrYiA9IG5za2I7CiAJCX0KIAotCQlUQ1BfU0tCX0NCKHNrYiktPmZsYWdzIHw9IFRDUENCX0ZMQUdfQUNLOworCQlUQ1BfU0tCX0NCKHNrYiktPmZsYWdzIHw9IFRDUEhEUl9BQ0s7CiAJCVRDUF9FQ05fc2VuZF9zeW5hY2sodGNwX3NrKHNrKSwgc2tiKTsKIAl9CiAJVENQX1NLQl9DQihza2IpLT53aGVuID0gdGNwX3RpbWVfc3RhbXA7CkBAIC0yNDYwLDcgKzI0NjUsNyBAQAogCSAqIG5vdCBldmVuIGNvcnJlY3RseSBzZXQpCiAJICovCiAJdGNwX2luaXRfbm9uZGF0YV9za2Ioc2tiLCB0Y3BfcnNrKHJlcSktPnNudF9pc24sCi0JCQkgICAgIFRDUENCX0ZMQUdfU1lOIHwgVENQQ0JfRkxBR19BQ0spOworCQkJICAgICBUQ1BIRFJfU1lOIHwgVENQSERSX0FDSyk7CiAKIAlpZiAoT1BUSU9OX0NPT0tJRV9FWFRFTlNJT04gJiBvcHRzLm9wdGlvbnMpIHsKIAkJaWYgKHNfZGF0YV9kZXNpcmVkKSB7CkBAIC0yNTE1LDYgKzI1MjAsNyBAQAogCiAJcmV0dXJuIHNrYjsKIH0KK0VYUE9SVF9TWU1CT0wodGNwX21ha2Vfc3luYWNrKTsKIAogLyogRG8gYWxsIGNvbm5lY3Qgc29ja2V0IHNldHVwcyB0aGF0IGNhbiBiZSBkb25lIEFGIGluZGVwZW5kZW50LiAqLwogc3RhdGljIHZvaWQgdGNwX2Nvbm5lY3RfaW5pdChzdHJ1Y3Qgc29jayAqc2spCkBAIC0yNTkyLDcgKzI1OTgsNyBAQAogCXNrYl9yZXNlcnZlKGJ1ZmYsIE1BWF9UQ1BfSEVBREVSKTsKIAogCXRwLT5zbmRfbnh0ID0gdHAtPndyaXRlX3NlcTsKLQl0Y3BfaW5pdF9ub25kYXRhX3NrYihidWZmLCB0cC0+d3JpdGVfc2VxKyssIFRDUENCX0ZMQUdfU1lOKTsKKwl0Y3BfaW5pdF9ub25kYXRhX3NrYihidWZmLCB0cC0+d3JpdGVfc2VxKyssIFRDUEhEUl9TWU4pOwogCVRDUF9FQ05fc2VuZF9zeW4oc2ssIGJ1ZmYpOwogCiAJLyogU2VuZCBpdCBvZmYuICovCkBAIC0yNjE3LDYgKzI2MjMsNyBAQAogCQkJCSAgaW5ldF9jc2soc2spLT5pY3NrX3J0bywgVENQX1JUT19NQVgpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTCh0Y3BfY29ubmVjdCk7CiAKIC8qIFNlbmQgb3V0IGEgZGVsYXllZCBhY2ssIHRoZSBjYWxsZXIgZG9lcyB0aGUgcG9saWN5IGNoZWNraW5nCiAgKiB0byBzZWUgaWYgd2Ugc2hvdWxkIGV2ZW4gYmUgaGVyZS4gIFNlZSB0Y3BfaW5wdXQuYzp0Y3BfYWNrX3NuZF9jaGVjaygpCkBAIC0yNjk4LDcgKzI3MDUsNyBAQAogCiAJLyogUmVzZXJ2ZSBzcGFjZSBmb3IgaGVhZGVycyBhbmQgcHJlcGFyZSBjb250cm9sIGJpdHMuICovCiAJc2tiX3Jlc2VydmUoYnVmZiwgTUFYX1RDUF9IRUFERVIpOwotCXRjcF9pbml0X25vbmRhdGFfc2tiKGJ1ZmYsIHRjcF9hY2NlcHRhYmxlX3NlcShzayksIFRDUENCX0ZMQUdfQUNLKTsKKwl0Y3BfaW5pdF9ub25kYXRhX3NrYihidWZmLCB0Y3BfYWNjZXB0YWJsZV9zZXEoc2spLCBUQ1BIRFJfQUNLKTsKIAogCS8qIFNlbmQgaXQgb2ZmLCB0aGlzIGNsZWFycyBkZWxheWVkIGFja3MgZm9yIHVzLiAqLwogCVRDUF9TS0JfQ0IoYnVmZiktPndoZW4gPSB0Y3BfdGltZV9zdGFtcDsKQEAgLTI3MzIsNyArMjczOSw3IEBACiAJICogZW5kIHRvIHNlbmQgYW4gYWNrLiAgRG9uJ3QgcXVldWUgb3IgY2xvbmUgU0tCLCBqdXN0CiAJICogc2VuZCBpdC4KIAkgKi8KLQl0Y3BfaW5pdF9ub25kYXRhX3NrYihza2IsIHRwLT5zbmRfdW5hIC0gIXVyZ2VudCwgVENQQ0JfRkxBR19BQ0spOworCXRjcF9pbml0X25vbmRhdGFfc2tiKHNrYiwgdHAtPnNuZF91bmEgLSAhdXJnZW50LCBUQ1BIRFJfQUNLKTsKIAlUQ1BfU0tCX0NCKHNrYiktPndoZW4gPSB0Y3BfdGltZV9zdGFtcDsKIAlyZXR1cm4gdGNwX3RyYW5zbWl0X3NrYihzaywgc2tiLCAwLCBHRlBfQVRPTUlDKTsKIH0KQEAgLTI3NjIsMTMgKzI3NjksMTMgQEAKIAkJaWYgKHNlZ19zaXplIDwgVENQX1NLQl9DQihza2IpLT5lbmRfc2VxIC0gVENQX1NLQl9DQihza2IpLT5zZXEgfHwKIAkJICAgIHNrYi0+bGVuID4gbXNzKSB7CiAJCQlzZWdfc2l6ZSA9IG1pbihzZWdfc2l6ZSwgbXNzKTsKLQkJCVRDUF9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgfD0gVENQQ0JfRkxBR19QU0g7CisJCQlUQ1BfU0tCX0NCKHNrYiktPmZsYWdzIHw9IFRDUEhEUl9QU0g7CiAJCQlpZiAodGNwX2ZyYWdtZW50KHNrLCBza2IsIHNlZ19zaXplLCBtc3MpKQogCQkJCXJldHVybiAtMTsKIAkJfSBlbHNlIGlmICghdGNwX3NrYl9wY291bnQoc2tiKSkKIAkJCXRjcF9zZXRfc2tiX3Rzb19zZWdzKHNrLCBza2IsIG1zcyk7CiAKLQkJVENQX1NLQl9DQihza2IpLT5mbGFncyB8PSBUQ1BDQl9GTEFHX1BTSDsKKwkJVENQX1NLQl9DQihza2IpLT5mbGFncyB8PSBUQ1BIRFJfUFNIOwogCQlUQ1BfU0tCX0NCKHNrYiktPndoZW4gPSB0Y3BfdGltZV9zdGFtcDsKIAkJZXJyID0gdGNwX3RyYW5zbWl0X3NrYihzaywgc2tiLCAxLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFlcnIpCkBAIC0yODIxLDEwICsyODI4LDMgQEAKIAkJCQkJICBUQ1BfUlRPX01BWCk7CiAJfQogfQotCi1FWFBPUlRfU1lNQk9MKHRjcF9zZWxlY3RfaW5pdGlhbF93aW5kb3cpOwotRVhQT1JUX1NZTUJPTCh0Y3BfY29ubmVjdCk7Ci1FWFBPUlRfU1lNQk9MKHRjcF9tYWtlX3N5bmFjayk7Ci1FWFBPUlRfU1lNQk9MKHRjcF9zaW1wbGVfcmV0cmFuc21pdCk7Ci1FWFBPUlRfU1lNQk9MKHRjcF9zeW5jX21zcyk7Ci1FWFBPUlRfU1lNQk9MKHRjcF9tdHVwX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX3RpbWVyLmMgYi9uZXQvaXB2NC90Y3BfdGltZXIuYwppbmRleCA0NDBhNWM2Li44MDhiYjkyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfdGltZXIuYworKysgYi9uZXQvaXB2NC90Y3BfdGltZXIuYwpAQCAtNDEsNyArNDEsNiBAQAogCWluZXRfY3NrX2luaXRfeG1pdF90aW1lcnMoc2ssICZ0Y3Bfd3JpdGVfdGltZXIsICZ0Y3BfZGVsYWNrX3RpbWVyLAogCQkJCSAgJnRjcF9rZWVwYWxpdmVfdGltZXIpOwogfQotCiBFWFBPUlRfU1lNQk9MKHRjcF9pbml0X3htaXRfdGltZXJzKTsKIAogc3RhdGljIHZvaWQgdGNwX3dyaXRlX2VycihzdHJ1Y3Qgc29jayAqc2spCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90dW5uZWw0LmMgYi9uZXQvaXB2NC90dW5uZWw0LmMKaW5kZXggM2IzODEzYy4uNTkxODZjYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdHVubmVsNC5jCisrKyBiL25ldC9pcHY0L3R1bm5lbDQuYwpAQCAtNDgsNyArNDgsNiBAQAogCiAJcmV0dXJuIHJldDsKIH0KLQogRVhQT1JUX1NZTUJPTCh4ZnJtNF90dW5uZWxfcmVnaXN0ZXIpOwogCiBpbnQgeGZybTRfdHVubmVsX2RlcmVnaXN0ZXIoc3RydWN0IHhmcm1fdHVubmVsICpoYW5kbGVyLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCkBAIC03Miw3ICs3MSw2IEBACiAKIAlyZXR1cm4gcmV0OwogfQotCiBFWFBPUlRfU1lNQk9MKHhmcm00X3R1bm5lbF9kZXJlZ2lzdGVyKTsKIAogc3RhdGljIGludCB0dW5uZWw0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwLmMgYi9uZXQvaXB2NC91ZHAuYwppbmRleCBlZWM0ZmY0Li4zMmUwYmVmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC91ZHAuYworKysgYi9uZXQvaXB2NC91ZHAuYwpAQCAtOTE0LDcgKzkxNCw3IEBACiAJCSAgICAhc29ja19mbGFnKHNrLCBTT0NLX0JST0FEQ0FTVCkpCiAJCQlnb3RvIG91dDsKIAkJaWYgKGNvbm5lY3RlZCkKLQkJCXNrX2RzdF9zZXQoc2ssIGRzdF9jbG9uZSgmcnQtPnUuZHN0KSk7CisJCQlza19kc3Rfc2V0KHNrLCBkc3RfY2xvbmUoJnJ0LT5kc3QpKTsKIAl9CiAKIAlpZiAobXNnLT5tc2dfZmxhZ3MmTVNHX0NPTkZJUk0pCkBAIC05NzgsNyArOTc4LDcgQEAKIAlyZXR1cm4gZXJyOwogCiBkb19jb25maXJtOgotCWRzdF9jb25maXJtKCZydC0+dS5kc3QpOworCWRzdF9jb25maXJtKCZydC0+ZHN0KTsKIAlpZiAoIShtc2ctPm1zZ19mbGFncyZNU0dfUFJPQkUpIHx8IGxlbikKIAkJZ290byBiYWNrX2Zyb21fY29uZmlybTsKIAllcnIgPSAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwbGl0ZS5jIGIvbmV0L2lwdjQvdWRwbGl0ZS5jCmluZGV4IDY2MTBiZjcuLmFiNzZhYTkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3VkcGxpdGUuYworKysgYi9uZXQvaXB2NC91ZHBsaXRlLmMKQEAgLTU4LDYgKzU4LDcgQEAKIAkuY29tcGF0X2dldHNvY2tvcHQgPSBjb21wYXRfdWRwX2dldHNvY2tvcHQsCiAjZW5kaWYKIH07CitFWFBPUlRfU1lNQk9MKHVkcGxpdGVfcHJvdCk7CiAKIHN0YXRpYyBzdHJ1Y3QgaW5ldF9wcm90b3N3IHVkcGxpdGU0X3Byb3Rvc3cgPSB7CiAJLnR5cGUJCT0gIFNPQ0tfREdSQU0sCkBAIC0xMjcsNSArMTI4LDMgQEAKIG91dF9yZWdpc3Rlcl9lcnI6CiAJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6IENhbm5vdCBhZGQgVURQLUxpdGUgcHJvdG9jb2wuXG4iLCBfX2Z1bmNfXyk7CiB9Ci0KLUVYUE9SVF9TWU1CT0wodWRwbGl0ZV9wcm90KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X2lucHV0LmMgYi9uZXQvaXB2NC94ZnJtNF9pbnB1dC5jCmluZGV4IGFkOGZiYjguLjA2ODE0YjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X2lucHV0LmMKKysrIGIvbmV0L2lwdjQveGZybTRfaW5wdXQuYwpAQCAtMTYzLDUgKzE2Myw0IEBACiB7CiAJcmV0dXJuIHhmcm00X3Jjdl9zcGkoc2tiLCBpcF9oZHIoc2tiKS0+cHJvdG9jb2wsIDApOwogfQotCiBFWFBPUlRfU1lNQk9MKHhmcm00X3Jjdik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCmluZGV4IDIzODgzYTQuLjg2OTA3OGQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCisrKyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCkBAIC0zNyw3ICszNyw3IEBACiAJCWZsLmZsNF9zcmMgPSBzYWRkci0+YTQ7CiAKIAllcnIgPSBfX2lwX3JvdXRlX291dHB1dF9rZXkobmV0LCAmcnQsICZmbCk7Ci0JZHN0ID0gJnJ0LT51LmRzdDsKKwlkc3QgPSAmcnQtPmRzdDsKIAlpZiAoZXJyKQogCQlkc3QgPSBFUlJfUFRSKGVycik7CiAJcmV0dXJuIGRzdDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IGUxYTY5OGQuLmFiNzBhM2YgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtMTIxLDggKzEyMSw2IEBACiBzdGF0aWMgaW50IF9faXB2Nl9yZWdlbl9ybmRpZChzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KTsKIHN0YXRpYyBpbnQgX19pcHY2X3RyeV9yZWdlbl9ybmRpZChzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCBzdHJ1Y3QgaW42X2FkZHIgKnRtcGFkZHIpOwogc3RhdGljIHZvaWQgaXB2Nl9yZWdlbl9ybmRpZCh1bnNpZ25lZCBsb25nIGRhdGEpOwotCi1zdGF0aWMgaW50IGRlc3luY19mYWN0b3IgPSBNQVhfREVTWU5DX0ZBQ1RPUiAqIEhaOwogI2VuZGlmCiAKIHN0YXRpYyBpbnQgaXB2Nl9nZW5lcmF0ZV9ldWk2NCh1OCAqZXVpLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTI4NCwxMyArMjgyLDE2IEBACiBzdGF0aWMgaW50IHNubXA2X2FsbG9jX2RldihzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KQogewogCWlmIChzbm1wX21pYl9pbml0KCh2b2lkIF9fcGVyY3B1ICoqKWlkZXYtPnN0YXRzLmlwdjYsCi0JCQkgIHNpemVvZihzdHJ1Y3QgaXBzdGF0c19taWIpKSA8IDApCisJCQkgIHNpemVvZihzdHJ1Y3QgaXBzdGF0c19taWIpLAorCQkJICBfX2FsaWdub2ZfXyhzdHJ1Y3QgaXBzdGF0c19taWIpKSA8IDApCiAJCWdvdG8gZXJyX2lwOwogCWlmIChzbm1wX21pYl9pbml0KCh2b2lkIF9fcGVyY3B1ICoqKWlkZXYtPnN0YXRzLmljbXB2NiwKLQkJCSAgc2l6ZW9mKHN0cnVjdCBpY21wdjZfbWliKSkgPCAwKQorCQkJICBzaXplb2Yoc3RydWN0IGljbXB2Nl9taWIpLAorCQkJICBfX2FsaWdub2ZfXyhzdHJ1Y3QgaWNtcHY2X21pYikpIDwgMCkKIAkJZ290byBlcnJfaWNtcDsKIAlpZiAoc25tcF9taWJfaW5pdCgodm9pZCBfX3BlcmNwdSAqKilpZGV2LT5zdGF0cy5pY21wdjZtc2csCi0JCQkgIHNpemVvZihzdHJ1Y3QgaWNtcHY2bXNnX21pYikpIDwgMCkKKwkJCSAgc2l6ZW9mKHN0cnVjdCBpY21wdjZtc2dfbWliKSwKKwkJCSAgX19hbGlnbm9mX18oc3RydWN0IGljbXB2Nm1zZ19taWIpKSA8IDApCiAJCWdvdG8gZXJyX2ljbXBtc2c7CiAKIAlyZXR1cm4gMDsKQEAgLTU1Nyw3ICs1NTgsNyBAQAogCQlwcl93YXJuaW5nKCJGcmVlaW5nIGFsaXZlIGluZXQ2IGFkZHJlc3MgJXBcbiIsIGlmcCk7CiAJCXJldHVybjsKIAl9Ci0JZHN0X3JlbGVhc2UoJmlmcC0+cnQtPnUuZHN0KTsKKwlkc3RfcmVsZWFzZSgmaWZwLT5ydC0+ZHN0KTsKIAogCWNhbGxfcmN1KCZpZnAtPnJjdSwgaW5ldDZfaWZhX2ZpbmlzaF9kZXN0cm95X3JjdSk7CiB9CkBAIC04MjMsNyArODI0LDcgQEAKIAkJCQlydC0+cnQ2aV9mbGFncyB8PSBSVEZfRVhQSVJFUzsKIAkJCX0KIAkJfQotCQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKKwkJZHN0X3JlbGVhc2UoJnJ0LT5kc3QpOwogCX0KIAogb3V0OgpAQCAtODkwLDcgKzg5MSw4IEBACiAJCQkgICAgICBpZGV2LT5jbmYudGVtcF92YWxpZF9sZnQpOwogCXRtcF9wcmVmZXJlZF9sZnQgPSBtaW5fdChfX3UzMiwKIAkJCQkgaWZwLT5wcmVmZXJlZF9sZnQsCi0JCQkJIGlkZXYtPmNuZi50ZW1wX3ByZWZlcmVkX2xmdCAtIGRlc3luY19mYWN0b3IgLyBIWik7CisJCQkJIGlkZXYtPmNuZi50ZW1wX3ByZWZlcmVkX2xmdCAtCisJCQkJIGlkZXYtPmNuZi5tYXhfZGVzeW5jX2ZhY3Rvcik7CiAJdG1wX3BsZW4gPSBpZnAtPnByZWZpeF9sZW47CiAJbWF4X2FkZHJlc3NlcyA9IGlkZXYtPmNuZi5tYXhfYWRkcmVzc2VzOwogCXRtcF9jc3RhbXAgPSBpZnAtPmNzdGFtcDsKQEAgLTE2NTAsNyArMTY1Miw4IEBACiAKIAlleHBpcmVzID0gamlmZmllcyArCiAJCWlkZXYtPmNuZi50ZW1wX3ByZWZlcmVkX2xmdCAqIEhaIC0KLQkJaWRldi0+Y25mLnJlZ2VuX21heF9yZXRyeSAqIGlkZXYtPmNuZi5kYWRfdHJhbnNtaXRzICogaWRldi0+bmRfcGFybXMtPnJldHJhbnNfdGltZSAtIGRlc3luY19mYWN0b3I7CisJCWlkZXYtPmNuZi5yZWdlbl9tYXhfcmV0cnkgKiBpZGV2LT5jbmYuZGFkX3RyYW5zbWl0cyAqIGlkZXYtPm5kX3Bhcm1zLT5yZXRyYW5zX3RpbWUgLQorCQlpZGV2LT5jbmYubWF4X2Rlc3luY19mYWN0b3IgKiBIWjsKIAlpZiAodGltZV9iZWZvcmUoZXhwaXJlcywgamlmZmllcykpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJImlwdjZfcmVnZW5fcm5kaWQoKTogdG9vIHNob3J0IHJlZ2VuZXJhdGlvbiBpbnRlcnZhbDsgdGltZXIgZGlzYWJsZWQgZm9yICVzLlxuIiwKQEAgLTE3NjAsNyArMTc2MywxMCBAQAogCiAJaWRldiA9IGlwdjZfZmluZF9pZGV2KGRldik7CiAJaWYgKCFpZGV2KQotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0JVRlMpOworCisJaWYgKGlkZXYtPmNuZi5kaXNhYmxlX2lwdjYpCisJCXJldHVybiBFUlJfUFRSKC1FQUNDRVMpOwogCiAJLyogQWRkIGRlZmF1bHQgbXVsdGljYXN0IHJvdXRlICovCiAJYWRkcmNvbmZfYWRkX21yb3V0ZShkZXYpOwpAQCAtMTg2Myw3ICsxODY5LDcgQEAKIAkJCQkJICAgICAgZGV2LCBleHBpcmVzLCBmbGFncyk7CiAJCX0KIAkJaWYgKHJ0KQotCQkJZHN0X3JlbGVhc2UoJnJ0LT51LmRzdCk7CisJCQlkc3RfcmVsZWFzZSgmcnQtPmRzdCk7CiAJfQogCiAJLyogVHJ5IHRvIGZpZ3VyZSBvdXQgb3VyIGxvY2FsIGFkZHJlc3MgZm9yIHRoaXMgcHJlZml4ICovCkBAIC0yMTI5LDggKzIxMzUsOSBAQAogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmICgoaWRldiA9IGFkZHJjb25mX2FkZF9kZXYoZGV2KSkgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9CVUZTOworCWlkZXYgPSBhZGRyY29uZl9hZGRfZGV2KGRldik7CisJaWYgKElTX0VSUihpZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIoaWRldik7CiAKIAlzY29wZSA9IGlwdjZfYWRkcl9zY29wZShwZngpOwogCkBAIC0yMzc3LDcgKzIzODQsNyBAQAogCX0KIAogCWlkZXYgPSBhZGRyY29uZl9hZGRfZGV2KGRldik7Ci0JaWYgKGlkZXYgPT0gTlVMTCkKKwlpZiAoSVNfRVJSKGlkZXYpKQogCQlyZXR1cm47CiAKIAltZW1zZXQoJmFkZHIsIDAsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKQEAgLTI0NjgsNyArMjQ3NSw3IEBACiAJQVNTRVJUX1JUTkwoKTsKIAogCWlkZXYgPSBhZGRyY29uZl9hZGRfZGV2KGRldik7Ci0JaWYgKCFpZGV2KSB7CisJaWYgKElTX0VSUihpZGV2KSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiaW5pdCBpcDYtaXA2OiBhZGRfZGV2IGZhaWxlZFxuIik7CiAJCXJldHVybjsKIAl9CkBAIC0zNDkyLDggKzM0OTksMTIgQEAKIAkJCQlwcmVmZXJyZWQgLT0gdHZhbDsKIAkJCWVsc2UKIAkJCQlwcmVmZXJyZWQgPSAwOwotCQkJaWYgKHZhbGlkICE9IElORklOSVRZX0xJRkVfVElNRSkKLQkJCQl2YWxpZCAtPSB0dmFsOworCQkJaWYgKHZhbGlkICE9IElORklOSVRZX0xJRkVfVElNRSkgeworCQkJCWlmICh2YWxpZCA+IHR2YWwpCisJCQkJCXZhbGlkIC09IHR2YWw7CisJCQkJZWxzZQorCQkJCQl2YWxpZCA9IDA7CisJCQl9CiAJCX0KIAl9IGVsc2UgewogCQlwcmVmZXJyZWQgPSBJTkZJTklUWV9MSUZFX1RJTUU7CkBAIC0zODU1LDEyICszODY2LDI4IEBACiAJbWVtc2V0KCZzdGF0c1tpdGVtc10sIDAsIHBhZCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NubXA2X2ZpbGxfc3RhdHM2NCh1NjQgKnN0YXRzLCB2b2lkIF9fcGVyY3B1ICoqbWliLAorCQkJCSAgICAgIGludCBpdGVtcywgaW50IGJ5dGVzLCBzaXplX3Qgc3luY3BvZmYpCit7CisJaW50IGk7CisJaW50IHBhZCA9IGJ5dGVzIC0gc2l6ZW9mKHU2NCkgKiBpdGVtczsKKwlCVUdfT04ocGFkIDwgMCk7CisKKwkvKiBVc2UgcHV0X3VuYWxpZ25lZCgpIGJlY2F1c2Ugc3RhdHMgbWF5IG5vdCBiZSBhbGlnbmVkIGZvciB1NjQuICovCisJcHV0X3VuYWxpZ25lZChpdGVtcywgJnN0YXRzWzBdKTsKKwlmb3IgKGkgPSAxOyBpIDwgaXRlbXM7IGkrKykKKwkJcHV0X3VuYWxpZ25lZChzbm1wX2ZvbGRfZmllbGQ2NChtaWIsIGksIHN5bmNwb2ZmKSwgJnN0YXRzW2ldKTsKKworCW1lbXNldCgmc3RhdHNbaXRlbXNdLCAwLCBwYWQpOworfQorCiBzdGF0aWMgdm9pZCBzbm1wNl9maWxsX3N0YXRzKHU2NCAqc3RhdHMsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsIGludCBhdHRydHlwZSwKIAkJCSAgICAgaW50IGJ5dGVzKQogewogCXN3aXRjaCAoYXR0cnR5cGUpIHsKIAljYXNlIElGTEFfSU5FVDZfU1RBVFM6Ci0JCV9fc25tcDZfZmlsbF9zdGF0cyhzdGF0cywgKHZvaWQgX19wZXJjcHUgKiopaWRldi0+c3RhdHMuaXB2NiwgSVBTVEFUU19NSUJfTUFYLCBieXRlcyk7CisJCV9fc25tcDZfZmlsbF9zdGF0czY0KHN0YXRzLCAodm9pZCBfX3BlcmNwdSAqKilpZGV2LT5zdGF0cy5pcHY2LAorCQkJCSAgICAgSVBTVEFUU19NSUJfTUFYLCBieXRlcywgb2Zmc2V0b2Yoc3RydWN0IGlwc3RhdHNfbWliLCBzeW5jcCkpOwogCQlicmVhazsKIAljYXNlIElGTEFfSU5FVDZfSUNNUDZTVEFUUzoKIAkJX19zbm1wNl9maWxsX3N0YXRzKHN0YXRzLCAodm9pZCBfX3BlcmNwdSAqKilpZGV2LT5zdGF0cy5pY21wdjYsIElDTVA2X01JQl9NQVgsIGJ5dGVzKTsKQEAgLTQwOTMsMTEgKzQxMjAsMTEgQEAKIAkJaWYgKGlmcC0+aWRldi0+Y25mLmZvcndhcmRpbmcpCiAJCQlhZGRyY29uZl9sZWF2ZV9hbnljYXN0KGlmcCk7CiAJCWFkZHJjb25mX2xlYXZlX3NvbGljdChpZnAtPmlkZXYsICZpZnAtPmFkZHIpOwotCQlkc3RfaG9sZCgmaWZwLT5ydC0+dS5kc3QpOworCQlkc3RfaG9sZCgmaWZwLT5ydC0+ZHN0KTsKIAogCQlpZiAoaWZwLT5zdGF0ZSA9PSBJTkVUNl9JRkFERFJfU1RBVEVfREVBRCAmJgogCQkgICAgaXA2X2RlbF9ydChpZnAtPnJ0KSkKLQkJCWRzdF9mcmVlKCZpZnAtPnJ0LT51LmRzdCk7CisJCQlkc3RfZnJlZSgmaWZwLT5ydC0+ZHN0KTsKIAkJYnJlYWs7CiAJfQogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmxhYmVsLmMgYi9uZXQvaXB2Ni9hZGRybGFiZWwuYwppbmRleCA4YzQzNDhjLi5mMGU3NzRjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZGRybGFiZWwuYworKysgYi9uZXQvaXB2Ni9hZGRybGFiZWwuYwpAQCAtNTMsMTEgKzUzLDcgQEAKIHN0YXRpYyBpbmxpbmUKIHN0cnVjdCBuZXQgKmlwNmFkZHJsYmxfbmV0KGNvbnN0IHN0cnVjdCBpcDZhZGRybGJsX2VudHJ5ICpsYmwpCiB7Ci0jaWZkZWYgQ09ORklHX05FVF9OUwotCXJldHVybiBsYmwtPmxibF9uZXQ7Ci0jZWxzZQotCXJldHVybiAmaW5pdF9uZXQ7Ci0jZW5kaWYKKwlyZXR1cm4gcmVhZF9wbmV0KCZsYmwtPmxibF9uZXQpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWZfaW5ldDYuYyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKaW5kZXggZTczMzk0MmQuLjU2YjliZjIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FmX2luZXQ2LmMKKysrIGIvbmV0L2lwdjYvYWZfaW5ldDYuYwpAQCAtNTIyLDEwICs1MjIsMTAgQEAKIAkuc2h1dGRvd24JICAgPSBpbmV0X3NodXRkb3duLAkJLyogb2sJCSovCiAJLnNldHNvY2tvcHQJICAgPSBzb2NrX2NvbW1vbl9zZXRzb2Nrb3B0LAkvKiBvawkJKi8KIAkuZ2V0c29ja29wdAkgICA9IHNvY2tfY29tbW9uX2dldHNvY2tvcHQsCS8qIG9rCQkqLwotCS5zZW5kbXNnCSAgID0gdGNwX3NlbmRtc2csCQkvKiBvawkJKi8KLQkucmVjdm1zZwkgICA9IHNvY2tfY29tbW9uX3JlY3Ztc2csCS8qIG9rCQkqLworCS5zZW5kbXNnCSAgID0gaW5ldF9zZW5kbXNnLAkJLyogb2sJCSovCisJLnJlY3Ztc2cJICAgPSBpbmV0X3JlY3Ztc2csCQkvKiBvawkJKi8KIAkubW1hcAkJICAgPSBzb2NrX25vX21tYXAsCi0JLnNlbmRwYWdlCSAgID0gdGNwX3NlbmRwYWdlLAorCS5zZW5kcGFnZQkgICA9IGluZXRfc2VuZHBhZ2UsCiAJLnNwbGljZV9yZWFkCSAgID0gdGNwX3NwbGljZV9yZWFkLAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X3NldHNvY2tvcHQgPSBjb21wYXRfc29ja19jb21tb25fc2V0c29ja29wdCwKQEAgLTU0OSw3ICs1NDksNyBAQAogCS5zZXRzb2Nrb3B0CSAgID0gc29ja19jb21tb25fc2V0c29ja29wdCwJLyogb2sJCSovCiAJLmdldHNvY2tvcHQJICAgPSBzb2NrX2NvbW1vbl9nZXRzb2Nrb3B0LAkvKiBvawkJKi8KIAkuc2VuZG1zZwkgICA9IGluZXRfc2VuZG1zZywJCS8qIG9rCQkqLwotCS5yZWN2bXNnCSAgID0gc29ja19jb21tb25fcmVjdm1zZywJLyogb2sJCSovCisJLnJlY3Ztc2cJICAgPSBpbmV0X3JlY3Ztc2csCQkvKiBvawkJKi8KIAkubW1hcAkJICAgPSBzb2NrX25vX21tYXAsCiAJLnNlbmRwYWdlCSAgID0gc29ja19ub19zZW5kcGFnZSwKICNpZmRlZiBDT05GSUdfQ09NUEFUCkBAIC02NTEsNyArNjUxLDcgQEAKIAogCWlmIChkc3QgPT0gTlVMTCkgewogCQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7Ci0JCXN0cnVjdCBpbjZfYWRkciAqZmluYWxfcCA9IE5VTEwsIGZpbmFsOworCQlzdHJ1Y3QgaW42X2FkZHIgKmZpbmFsX3AsIGZpbmFsOwogCQlzdHJ1Y3QgZmxvd2kgZmw7CiAKIAkJbWVtc2V0KCZmbCwgMCwgc2l6ZW9mKGZsKSk7CkBAIC02NjUsMTIgKzY2NSw3IEBACiAJCWZsLmZsX2lwX3Nwb3J0ID0gaW5ldC0+aW5ldF9zcG9ydDsKIAkJc2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzaywgJmZsKTsKIAotCQlpZiAobnAtPm9wdCAmJiBucC0+b3B0LT5zcmNydCkgewotCQkJc3RydWN0IHJ0MF9oZHIgKnJ0MCA9IChzdHJ1Y3QgcnQwX2hkciAqKSBucC0+b3B0LT5zcmNydDsKLQkJCWlwdjZfYWRkcl9jb3B5KCZmaW5hbCwgJmZsLmZsNl9kc3QpOwotCQkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9kc3QsIHJ0MC0+YWRkcik7Ci0JCQlmaW5hbF9wID0gJmZpbmFsOwotCQl9CisJCWZpbmFsX3AgPSBmbDZfdXBkYXRlX2RzdCgmZmwsIG5wLT5vcHQsICZmaW5hbCk7CiAKIAkJZXJyID0gaXA2X2RzdF9sb29rdXAoc2ssICZkc3QsICZmbCk7CiAJCWlmIChlcnIpIHsKQEAgLTk3NiwxOSArOTcxLDI0IEBACiBzdGF0aWMgaW50IF9fbmV0X2luaXQgaXB2Nl9pbml0X21pYnMoc3RydWN0IG5ldCAqbmV0KQogewogCWlmIChzbm1wX21pYl9pbml0KCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLnVkcF9zdGF0c19pbjYsCi0JCQkgIHNpemVvZiAoc3RydWN0IHVkcF9taWIpKSA8IDApCisJCQkgIHNpemVvZihzdHJ1Y3QgdWRwX21pYiksCisJCQkgIF9fYWxpZ25vZl9fKHN0cnVjdCB1ZHBfbWliKSkgPCAwKQogCQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoc25tcF9taWJfaW5pdCgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi51ZHBsaXRlX3N0YXRzX2luNiwKLQkJCSAgc2l6ZW9mIChzdHJ1Y3QgdWRwX21pYikpIDwgMCkKKwkJCSAgc2l6ZW9mKHN0cnVjdCB1ZHBfbWliKSwKKwkJCSAgX19hbGlnbm9mX18oc3RydWN0IHVkcF9taWIpKSA8IDApCiAJCWdvdG8gZXJyX3VkcGxpdGVfbWliOwogCWlmIChzbm1wX21pYl9pbml0KCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLmlwdjZfc3RhdGlzdGljcywKLQkJCSAgc2l6ZW9mKHN0cnVjdCBpcHN0YXRzX21pYikpIDwgMCkKKwkJCSAgc2l6ZW9mKHN0cnVjdCBpcHN0YXRzX21pYiksCisJCQkgIF9fYWxpZ25vZl9fKHN0cnVjdCBpcHN0YXRzX21pYikpIDwgMCkKIAkJZ290byBlcnJfaXBfbWliOwogCWlmIChzbm1wX21pYl9pbml0KCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLmljbXB2Nl9zdGF0aXN0aWNzLAotCQkJICBzaXplb2Yoc3RydWN0IGljbXB2Nl9taWIpKSA8IDApCisJCQkgIHNpemVvZihzdHJ1Y3QgaWNtcHY2X21pYiksCisJCQkgIF9fYWxpZ25vZl9fKHN0cnVjdCBpY21wdjZfbWliKSkgPCAwKQogCQlnb3RvIGVycl9pY21wX21pYjsKIAlpZiAoc25tcF9taWJfaW5pdCgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5pY21wdjZtc2dfc3RhdGlzdGljcywKLQkJCSAgc2l6ZW9mKHN0cnVjdCBpY21wdjZtc2dfbWliKSkgPCAwKQorCQkJICBzaXplb2Yoc3RydWN0IGljbXB2Nm1zZ19taWIpLAorCQkJICBfX2FsaWdub2ZfXyhzdHJ1Y3QgaWNtcHY2bXNnX21pYikpIDwgMCkKIAkJZ290byBlcnJfaWNtcG1zZ19taWI7CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FueWNhc3QuYyBiL25ldC9pcHY2L2FueWNhc3QuYwppbmRleCBiNWIwNzA1Li4wZTVlOTQzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hbnljYXN0LmMKKysrIGIvbmV0L2lwdjYvYW55Y2FzdC5jCkBAIC03Nyw0MSArNzcsNDAgQEAKIAlwYWMtPmFjbF9uZXh0ID0gTlVMTDsKIAlpcHY2X2FkZHJfY29weSgmcGFjLT5hY2xfYWRkciwgYWRkcik7CiAKKwlyY3VfcmVhZF9sb2NrKCk7CiAJaWYgKGlmaW5kZXggPT0gMCkgewogCQlzdHJ1Y3QgcnQ2X2luZm8gKnJ0OwogCiAJCXJ0ID0gcnQ2X2xvb2t1cChuZXQsIGFkZHIsIE5VTEwsIDAsIDApOwogCQlpZiAocnQpIHsKIAkJCWRldiA9IHJ0LT5ydDZpX2RldjsKLQkJCWRldl9ob2xkKGRldik7Ci0JCQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKKwkJCWRzdF9yZWxlYXNlKCZydC0+ZHN0KTsKIAkJfSBlbHNlIGlmIChpc2hvc3QpIHsKIAkJCWVyciA9IC1FQUREUk5PVEFWQUlMOwotCQkJZ290byBvdXRfZnJlZV9wYWM7CisJCQlnb3RvIGVycm9yOwogCQl9IGVsc2UgewogCQkJLyogcm91dGVyLCBubyBtYXRjaGluZyBpbnRlcmZhY2U6IGp1c3QgcGljayBvbmUgKi8KLQotCQkJZGV2ID0gZGV2X2dldF9ieV9mbGFncyhuZXQsIElGRl9VUCwgSUZGX1VQfElGRl9MT09QQkFDSyk7CisJCQlkZXYgPSBkZXZfZ2V0X2J5X2ZsYWdzX3JjdShuZXQsIElGRl9VUCwKKwkJCQkJCSAgIElGRl9VUCB8IElGRl9MT09QQkFDSyk7CiAJCX0KIAl9IGVsc2UKLQkJZGV2ID0gZGV2X2dldF9ieV9pbmRleChuZXQsIGlmaW5kZXgpOworCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIGlmaW5kZXgpOwogCiAJaWYgKGRldiA9PSBOVUxMKSB7CiAJCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X2ZyZWVfcGFjOworCQlnb3RvIGVycm9yOwogCX0KIAotCWlkZXYgPSBpbjZfZGV2X2dldChkZXYpOworCWlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7CiAJaWYgKCFpZGV2KSB7CiAJCWlmIChpZmluZGV4KQogCQkJZXJyID0gLUVOT0RFVjsKIAkJZWxzZQogCQkJZXJyID0gLUVBRERSTk9UQVZBSUw7Ci0JCWdvdG8gb3V0X2Rldl9wdXQ7CisJCWdvdG8gZXJyb3I7CiAJfQogCS8qIHJlc2V0IGlzaG9zdCwgbm93IHRoYXQgd2UgaGF2ZSBhIHNwZWNpZmljIGRldmljZSAqLwogCWlzaG9zdCA9ICFpZGV2LT5jbmYuZm9yd2FyZGluZzsKLQlpbjZfZGV2X3B1dChpZGV2KTsKIAogCXBhYy0+YWNsX2lmaW5kZXggPSBkZXYtPmlmaW5kZXg7CiAKQEAgLTEyNCwyNiArMTIzLDIyIEBACiAJCWlmIChpc2hvc3QpCiAJCQllcnIgPSAtRUFERFJOT1RBVkFJTDsKIAkJaWYgKGVycikKLQkJCWdvdG8gb3V0X2Rldl9wdXQ7CisJCQlnb3RvIGVycm9yOwogCX0KIAogCWVyciA9IGlwdjZfZGV2X2FjX2luYyhkZXYsIGFkZHIpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X2Rldl9wdXQ7CisJaWYgKCFlcnIpIHsKKwkJd3JpdGVfbG9ja19iaCgmaXB2Nl9za19hY19sb2NrKTsKKwkJcGFjLT5hY2xfbmV4dCA9IG5wLT5pcHY2X2FjX2xpc3Q7CisJCW5wLT5pcHY2X2FjX2xpc3QgPSBwYWM7CisJCXdyaXRlX3VubG9ja19iaCgmaXB2Nl9za19hY19sb2NrKTsKKwkJcGFjID0gTlVMTDsKKwl9CiAKLQl3cml0ZV9sb2NrX2JoKCZpcHY2X3NrX2FjX2xvY2spOwotCXBhYy0+YWNsX25leHQgPSBucC0+aXB2Nl9hY19saXN0OwotCW5wLT5pcHY2X2FjX2xpc3QgPSBwYWM7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZpcHY2X3NrX2FjX2xvY2spOwotCi0JZGV2X3B1dChkZXYpOwotCi0JcmV0dXJuIDA7Ci0KLW91dF9kZXZfcHV0OgotCWRldl9wdXQoZGV2KTsKLW91dF9mcmVlX3BhYzoKLQlzb2NrX2tmcmVlX3Moc2ssIHBhYywgc2l6ZW9mKCpwYWMpKTsKK2Vycm9yOgorCXJjdV9yZWFkX3VubG9jaygpOworCWlmIChwYWMpCisJCXNvY2tfa2ZyZWVfcyhzaywgcGFjLCBzaXplb2YoKnBhYykpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE3NiwxMSArMTcxLDEyIEBACiAKIAl3cml0ZV91bmxvY2tfYmgoJmlwdjZfc2tfYWNfbG9jayk7CiAKLQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KG5ldCwgcGFjLT5hY2xfaWZpbmRleCk7Ci0JaWYgKGRldikgeworCXJjdV9yZWFkX2xvY2soKTsKKwlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIHBhYy0+YWNsX2lmaW5kZXgpOworCWlmIChkZXYpCiAJCWlwdjZfZGV2X2FjX2RlYyhkZXYsICZwYWMtPmFjbF9hZGRyKTsKLQkJZGV2X3B1dChkZXYpOwotCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKwogCXNvY2tfa2ZyZWVfcyhzaywgcGFjLCBzaXplb2YoKnBhYykpOwogCXJldHVybiAwOwogfQpAQCAtMTk5LDEzICsxOTUsMTIgQEAKIAl3cml0ZV91bmxvY2tfYmgoJmlwdjZfc2tfYWNfbG9jayk7CiAKIAlwcmV2X2luZGV4ID0gMDsKKwlyY3VfcmVhZF9sb2NrKCk7CiAJd2hpbGUgKHBhYykgewogCQlzdHJ1Y3QgaXB2Nl9hY19zb2NrbGlzdCAqbmV4dCA9IHBhYy0+YWNsX25leHQ7CiAKIAkJaWYgKHBhYy0+YWNsX2lmaW5kZXggIT0gcHJldl9pbmRleCkgewotCQkJaWYgKGRldikKLQkJCQlkZXZfcHV0KGRldik7Ci0JCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KG5ldCwgcGFjLT5hY2xfaWZpbmRleCk7CisJCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIHBhYy0+YWNsX2lmaW5kZXgpOwogCQkJcHJldl9pbmRleCA9IHBhYy0+YWNsX2lmaW5kZXg7CiAJCX0KIAkJaWYgKGRldikKQEAgLTIxMyw4ICsyMDgsNyBAQAogCQlzb2NrX2tmcmVlX3Moc2ssIHBhYywgc2l6ZW9mKCpwYWMpKTsKIAkJcGFjID0gbmV4dDsKIAl9Ci0JaWYgKGRldikKLQkJZGV2X3B1dChkZXYpOworCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiAjaWYgMApAQCAtMjUwLDcgKzI0NCw3IEBACiB7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFjLT5hY2FfcmVmY250KSkgewogCQlpbjZfZGV2X3B1dChhYy0+YWNhX2lkZXYpOwotCQlkc3RfcmVsZWFzZSgmYWMtPmFjYV9ydC0+dS5kc3QpOworCQlkc3RfcmVsZWFzZSgmYWMtPmFjYV9ydC0+ZHN0KTsKIAkJa2ZyZWUoYWMpOwogCX0KIH0KQEAgLTM1Niw0MCArMzUwLDM5IEBACiAJd3JpdGVfdW5sb2NrX2JoKCZpZGV2LT5sb2NrKTsKIAlhZGRyY29uZl9sZWF2ZV9zb2xpY3QoaWRldiwgJmFjYS0+YWNhX2FkZHIpOwogCi0JZHN0X2hvbGQoJmFjYS0+YWNhX3J0LT51LmRzdCk7CisJZHN0X2hvbGQoJmFjYS0+YWNhX3J0LT5kc3QpOwogCWlwNl9kZWxfcnQoYWNhLT5hY2FfcnQpOwogCiAJYWNhX3B1dChhY2EpOwogCXJldHVybiAwOwogfQogCisvKiBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgKi8KIHN0YXRpYyBpbnQgaXB2Nl9kZXZfYWNfZGVjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpbjZfYWRkciAqYWRkcikKIHsKLQlpbnQgcmV0OwotCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBpbjZfZGV2X2dldChkZXYpOworCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7CisKIAlpZiAoaWRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlyZXQgPSBfX2lwdjZfZGV2X2FjX2RlYyhpZGV2LCBhZGRyKTsKLQlpbjZfZGV2X3B1dChpZGV2KTsKLQlyZXR1cm4gcmV0OworCXJldHVybiBfX2lwdjZfZGV2X2FjX2RlYyhpZGV2LCBhZGRyKTsKIH0KIAogLyoKICAqCWNoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaGFzIHRoaXMgYW55Y2FzdCBhZGRyZXNzCisgKgljYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkKICAqLwogc3RhdGljIGludCBpcHY2X2Noa19hY2FzdF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGluNl9hZGRyICphZGRyKQogewogCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7CiAJc3RydWN0IGlmYWNhZGRyNiAqYWNhOwogCi0JaWRldiA9IGluNl9kZXZfZ2V0KGRldik7CisJaWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTsKIAlpZiAoaWRldikgewogCQlyZWFkX2xvY2tfYmgoJmlkZXYtPmxvY2spOwogCQlmb3IgKGFjYSA9IGlkZXYtPmFjX2xpc3Q7IGFjYTsgYWNhID0gYWNhLT5hY2FfbmV4dCkKIAkJCWlmIChpcHY2X2FkZHJfZXF1YWwoJmFjYS0+YWNhX2FkZHIsIGFkZHIpKQogCQkJCWJyZWFrOwogCQlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7Ci0JCWluNl9kZXZfcHV0KGlkZXYpOwogCQlyZXR1cm4gYWNhICE9IE5VTEw7CiAJfQogCXJldHVybiAwOwpAQCAtNDAzLDE0ICszOTYsMTUgQEAKIHsKIAlpbnQgZm91bmQgPSAwOwogCi0JaWYgKGRldikKLQkJcmV0dXJuIGlwdjZfY2hrX2FjYXN0X2RldihkZXYsIGFkZHIpOwogCXJjdV9yZWFkX2xvY2soKTsKLQlmb3JfZWFjaF9uZXRkZXZfcmN1KG5ldCwgZGV2KQotCQlpZiAoaXB2Nl9jaGtfYWNhc3RfZGV2KGRldiwgYWRkcikpIHsKLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOwotCQl9CisJaWYgKGRldikKKwkJZm91bmQgPSBpcHY2X2Noa19hY2FzdF9kZXYoZGV2LCBhZGRyKTsKKwllbHNlCisJCWZvcl9lYWNoX25ldGRldl9yY3UobmV0LCBkZXYpCisJCQlpZiAoaXB2Nl9jaGtfYWNhc3RfZGV2KGRldiwgYWRkcikpIHsKKwkJCQlmb3VuZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIGZvdW5kOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZGF0YWdyYW0uYyBiL25ldC9pcHY2L2RhdGFncmFtLmMKaW5kZXggNzEyNjg0Ni4uN2Q5MjlhMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvZGF0YWdyYW0uYworKysgYi9uZXQvaXB2Ni9kYXRhZ3JhbS5jCkBAIC0zOCwxMCArMzgsMTEgQEAKIAlzdHJ1Y3Qgc29ja2FkZHJfaW42CSp1c2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgdWFkZHI7CiAJc3RydWN0IGluZXRfc29jayAgICAgIAkqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBpcHY2X3BpbmZvICAgICAgCSpucCA9IGluZXQ2X3NrKHNrKTsKLQlzdHJ1Y3QgaW42X2FkZHIJCSpkYWRkciwgKmZpbmFsX3AgPSBOVUxMLCBmaW5hbDsKKwlzdHJ1Y3QgaW42X2FkZHIJCSpkYWRkciwgKmZpbmFsX3AsIGZpbmFsOwogCXN0cnVjdCBkc3RfZW50cnkJKmRzdDsKIAlzdHJ1Y3QgZmxvd2kJCWZsOwogCXN0cnVjdCBpcDZfZmxvd2xhYmVsCSpmbG93bGFiZWwgPSBOVUxMOworCXN0cnVjdCBpcHY2X3R4b3B0aW9ucyAgICpvcHQ7CiAJaW50CQkJYWRkcl90eXBlOwogCWludAkJCWVycjsKIApAQCAtMTU1LDE5ICsxNTYsOCBAQAogCiAJc2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzaywgJmZsKTsKIAotCWlmIChmbG93bGFiZWwpIHsKLQkJaWYgKGZsb3dsYWJlbC0+b3B0ICYmIGZsb3dsYWJlbC0+b3B0LT5zcmNydCkgewotCQkJc3RydWN0IHJ0MF9oZHIgKnJ0MCA9IChzdHJ1Y3QgcnQwX2hkciAqKSBmbG93bGFiZWwtPm9wdC0+c3JjcnQ7Ci0JCQlpcHY2X2FkZHJfY29weSgmZmluYWwsICZmbC5mbDZfZHN0KTsKLQkJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCBydDAtPmFkZHIpOwotCQkJZmluYWxfcCA9ICZmaW5hbDsKLQkJfQotCX0gZWxzZSBpZiAobnAtPm9wdCAmJiBucC0+b3B0LT5zcmNydCkgewotCQlzdHJ1Y3QgcnQwX2hkciAqcnQwID0gKHN0cnVjdCBydDBfaGRyICopbnAtPm9wdC0+c3JjcnQ7Ci0JCWlwdjZfYWRkcl9jb3B5KCZmaW5hbCwgJmZsLmZsNl9kc3QpOwotCQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgcnQwLT5hZGRyKTsKLQkJZmluYWxfcCA9ICZmaW5hbDsKLQl9CisJb3B0ID0gZmxvd2xhYmVsID8gZmxvd2xhYmVsLT5vcHQgOiBucC0+b3B0OworCWZpbmFsX3AgPSBmbDZfdXBkYXRlX2RzdCgmZmwsIG9wdCwgJmZpbmFsKTsKIAogCWVyciA9IGlwNl9kc3RfbG9va3VwKHNrLCAmZHN0LCAmZmwpOwogCWlmIChlcnIpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9leHRoZHJzLmMgYi9uZXQvaXB2Ni9leHRoZHJzLmMKaW5kZXggOGE2NTlmOS4uMjYyZjEwNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvZXh0aGRycy5jCisrKyBiL25ldC9pcHY2L2V4dGhkcnMuYwpAQCAtMzEyLDYgKzMxMiw3IEBACiAgIFJvdXRpbmcgaGVhZGVyLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKiBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgKi8KIHN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7CkBAIC0zMjQsMTIgKzMyNSw5IEBACiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItPmRldik7CiAJaW50IGFjY2VwdF9zb3VyY2Vfcm91dGUgPSBuZXQtPmlwdjYuZGV2Y29uZl9hbGwtPmFjY2VwdF9zb3VyY2Vfcm91dGU7CiAKLQlpZGV2ID0gaW42X2Rldl9nZXQoc2tiLT5kZXYpOwotCWlmIChpZGV2KSB7Ci0JCWlmIChhY2NlcHRfc291cmNlX3JvdXRlID4gaWRldi0+Y25mLmFjY2VwdF9zb3VyY2Vfcm91dGUpCi0JCQlhY2NlcHRfc291cmNlX3JvdXRlID0gaWRldi0+Y25mLmFjY2VwdF9zb3VyY2Vfcm91dGU7Ci0JCWluNl9kZXZfcHV0KGlkZXYpOwotCX0KKwlpZGV2ID0gX19pbjZfZGV2X2dldChza2ItPmRldik7CisJaWYgKGlkZXYgJiYgYWNjZXB0X3NvdXJjZV9yb3V0ZSA+IGlkZXYtPmNuZi5hY2NlcHRfc291cmNlX3JvdXRlKQorCQlhY2NlcHRfc291cmNlX3JvdXRlID0gaWRldi0+Y25mLmFjY2VwdF9zb3VyY2Vfcm91dGU7CiAKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgOCkgfHwKIAkgICAgIXBza2JfbWF5X3B1bGwoc2tiLCAoc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArCkBAIC04NzQsMyArODcyLDI3IEBACiAJcmV0dXJuIG9wdDsKIH0KIAorLyoqCisgKiBmbDZfdXBkYXRlX2RzdCAtIHVwZGF0ZSBmbG93aSBkZXN0aW5hdGlvbiBhZGRyZXNzIHdpdGggaW5mbyBnaXZlbgorICogICAgICAgICAgICAgICAgICBieSBzcmNydCBvcHRpb24sIGlmIGFueS4KKyAqCisgKiBAZmw6IGZsb3dpIGZvciB3aGljaCBmbDZfZHN0IGlzIHRvIGJlIHVwZGF0ZWQKKyAqIEBvcHQ6IHN0cnVjdCBpcHY2X3R4b3B0aW9ucyBpbiB3aGljaCB0byBsb29rIGZvciBzcmNydCBvcHQKKyAqIEBvcmlnOiBjb3B5IG9mIG9yaWdpbmFsIGZsNl9kc3QgYWRkcmVzcyBpZiBtb2RpZmllZAorICoKKyAqIFJldHVybnMgTlVMTCBpZiBubyB0eG9wdGlvbnMgb3Igbm8gc3JjcnQsIG90aGVyd2lzZSByZXR1cm5zIG9yaWcKKyAqIGFuZCBpbml0aWFsIHZhbHVlIG9mIGZsLT5mbDZfZHN0IHNldCBpbiBvcmlnCisgKi8KK3N0cnVjdCBpbjZfYWRkciAqZmw2X3VwZGF0ZV9kc3Qoc3RydWN0IGZsb3dpICpmbCwKKwkJCQljb25zdCBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCwKKwkJCQlzdHJ1Y3QgaW42X2FkZHIgKm9yaWcpCit7CisJaWYgKCFvcHQgfHwgIW9wdC0+c3JjcnQpCisJCXJldHVybiBOVUxMOworCisJaXB2Nl9hZGRyX2NvcHkob3JpZywgJmZsLT5mbDZfZHN0KTsKKwlpcHY2X2FkZHJfY29weSgmZmwtPmZsNl9kc3QsICgoc3RydWN0IHJ0MF9oZHIgKilvcHQtPnNyY3J0KS0+YWRkcik7CisJcmV0dXJuIG9yaWc7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGZsNl91cGRhdGVfZHN0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2ZpYjZfcnVsZXMuYyBiL25ldC9pcHY2L2ZpYjZfcnVsZXMuYwppbmRleCA4ZTQ0ZjhmLi5iMTEwOGVkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9maWI2X3J1bGVzLmMKKysrIGIvbmV0L2lwdjYvZmliNl9ydWxlcy5jCkBAIC00Myw4ICs0Myw4IEBACiAJaWYgKGFyZy5yZXN1bHQpCiAJCXJldHVybiBhcmcucmVzdWx0OwogCi0JZHN0X2hvbGQoJm5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeS0+dS5kc3QpOwotCXJldHVybiAmbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5LT51LmRzdDsKKwlkc3RfaG9sZCgmbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5LT5kc3QpOworCXJldHVybiAmbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5LT5kc3Q7CiB9CiAKIHN0YXRpYyBpbnQgZmliNl9ydWxlX2FjdGlvbihzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsIHN0cnVjdCBmbG93aSAqZmxwLApAQCAtODYsNyArODYsNyBAQAogCQkJc3RydWN0IGluNl9hZGRyIHNhZGRyOwogCiAJCQlpZiAoaXB2Nl9kZXZfZ2V0X3NhZGRyKG5ldCwKLQkJCQkJICAgICAgIGlwNl9kc3RfaWRldigmcnQtPnUuZHN0KS0+ZGV2LAorCQkJCQkgICAgICAgaXA2X2RzdF9pZGV2KCZydC0+ZHN0KS0+ZGV2LAogCQkJCQkgICAgICAgJmZscC0+Zmw2X2RzdCwKIAkJCQkJICAgICAgIHJ0Nl9mbGFnczJzcmNwcmVmcyhmbGFncyksCiAJCQkJCSAgICAgICAmc2FkZHIpKQpAQCAtOTksMTIgKzk5LDEyIEBACiAJCWdvdG8gb3V0OwogCX0KIGFnYWluOgotCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOworCWRzdF9yZWxlYXNlKCZydC0+ZHN0KTsKIAlydCA9IE5VTEw7CiAJZ290byBvdXQ7CiAKIGRpc2NhcmRfcGt0OgotCWRzdF9ob2xkKCZydC0+dS5kc3QpOworCWRzdF9ob2xkKCZydC0+ZHN0KTsKIG91dDoKIAlhcmctPnJlc3VsdCA9IHJ0OwogCXJldHVybiBydCA9PSBOVUxMID8gLUVBR0FJTiA6IDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pbmV0Nl9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jCmluZGV4IDBjNWUzYzMuLjhhMTYyODAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jCisrKyBiL25ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jCkBAIC0xODUsNyArMTg1LDcgQEAKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CiAJc3RydWN0IGZsb3dpIGZsOwogCXN0cnVjdCBkc3RfZW50cnkgKmRzdDsKLQlzdHJ1Y3QgaW42X2FkZHIgKmZpbmFsX3AgPSBOVUxMLCBmaW5hbDsKKwlzdHJ1Y3QgaW42X2FkZHIgKmZpbmFsX3AsIGZpbmFsOwogCiAJbWVtc2V0KCZmbCwgMCwgc2l6ZW9mKGZsKSk7CiAJZmwucHJvdG8gPSBzay0+c2tfcHJvdG9jb2w7CkBAIC0xOTksMTIgKzE5OSw3IEBACiAJZmwuZmxfaXBfZHBvcnQgPSBpbmV0LT5pbmV0X2Rwb3J0OwogCXNlY3VyaXR5X3NrX2NsYXNzaWZ5X2Zsb3coc2ssICZmbCk7CiAKLQlpZiAobnAtPm9wdCAmJiBucC0+b3B0LT5zcmNydCkgewotCQlzdHJ1Y3QgcnQwX2hkciAqcnQwID0gKHN0cnVjdCBydDBfaGRyICopbnAtPm9wdC0+c3JjcnQ7Ci0JCWlwdjZfYWRkcl9jb3B5KCZmaW5hbCwgJmZsLmZsNl9kc3QpOwotCQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgcnQwLT5hZGRyKTsKLQkJZmluYWxfcCA9ICZmaW5hbDsKLQl9CisJZmluYWxfcCA9IGZsNl91cGRhdGVfZHN0KCZmbCwgbnAtPm9wdCwgJmZpbmFsKTsKIAogCWRzdCA9IF9faW5ldDZfY3NrX2RzdF9jaGVjayhzaywgbnAtPmRzdF9jb29raWUpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmMKaW5kZXggOTJhMTIyYi4uYjZhNTg1OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X2ZpYi5jCisrKyBiL25ldC9pcHY2L2lwNl9maWIuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHJ0Nl9yZWxlYXNlKHN0cnVjdCBydDZfaW5mbyAqcnQpCiB7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJ0LT5ydDZpX3JlZikpCi0JCWRzdF9mcmVlKCZydC0+dS5kc3QpOworCQlkc3RfZnJlZSgmcnQtPmRzdCk7CiB9CiAKIHN0YXRpYyB2b2lkIGZpYjZfbGlua190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X3RhYmxlICp0YikKQEAgLTI3OCw3ICsyNzgsNyBAQAogCWludCByZXM7CiAJc3RydWN0IHJ0Nl9pbmZvICpydDsKIAotCWZvciAocnQgPSB3LT5sZWFmOyBydDsgcnQgPSBydC0+dS5kc3QucnQ2X25leHQpIHsKKwlmb3IgKHJ0ID0gdy0+bGVhZjsgcnQ7IHJ0ID0gcnQtPmRzdC5ydDZfbmV4dCkgewogCQlyZXMgPSBydDZfZHVtcF9yb3V0ZShydCwgdy0+YXJncyk7CiAJCWlmIChyZXMgPCAwKSB7CiAJCQkvKiBGcmFtZSBpcyBmdWxsLCBzdXNwZW5kIHdhbGtpbmcgKi8KQEAgLTYxOSw3ICs2MTksNyBAQAogCiAJaW5zID0gJmZuLT5sZWFmOwogCi0JZm9yIChpdGVyID0gZm4tPmxlYWY7IGl0ZXI7IGl0ZXI9aXRlci0+dS5kc3QucnQ2X25leHQpIHsKKwlmb3IgKGl0ZXIgPSBmbi0+bGVhZjsgaXRlcjsgaXRlcj1pdGVyLT5kc3QucnQ2X25leHQpIHsKIAkJLyoKIAkJICoJU2VhcmNoIGZvciBkdXBsaWNhdGVzCiAJCSAqLwpAQCAtNjQ3LDcgKzY0Nyw3IEBACiAJCWlmIChpdGVyLT5ydDZpX21ldHJpYyA+IHJ0LT5ydDZpX21ldHJpYykKIAkJCWJyZWFrOwogCi0JCWlucyA9ICZpdGVyLT51LmRzdC5ydDZfbmV4dDsKKwkJaW5zID0gJml0ZXItPmRzdC5ydDZfbmV4dDsKIAl9CiAKIAkvKiBSZXNldCByb3VuZC1yb2JpbiBzdGF0ZSwgaWYgbmVjZXNzYXJ5ICovCkBAIC02NTgsNyArNjU4LDcgQEAKIAkgKglpbnNlcnQgbm9kZQogCSAqLwogCi0JcnQtPnUuZHN0LnJ0Nl9uZXh0ID0gaXRlcjsKKwlydC0+ZHN0LnJ0Nl9uZXh0ID0gaXRlcjsKIAkqaW5zID0gcnQ7CiAJcnQtPnJ0Nmlfbm9kZSA9IGZuOwogCWF0b21pY19pbmMoJnJ0LT5ydDZpX3JlZik7CkBAIC03OTksNyArNzk5LDcgQEAKIAkJCWF0b21pY19pbmMoJnBuLT5sZWFmLT5ydDZpX3JlZik7CiAJCX0KICNlbmRpZgotCQlkc3RfZnJlZSgmcnQtPnUuZHN0KTsKKwkJZHN0X2ZyZWUoJnJ0LT5kc3QpOwogCX0KIAlyZXR1cm4gZXJyOwogCkBAIC04MTAsNyArODEwLDcgQEAKIHN0X2ZhaWx1cmU6CiAJaWYgKGZuICYmICEoZm4tPmZuX2ZsYWdzICYgKFJUTl9SVElORk98UlROX1JPT1QpKSkKIAkJZmliNl9yZXBhaXJfdHJlZShpbmZvLT5ubF9uZXQsIGZuKTsKLQlkc3RfZnJlZSgmcnQtPnUuZHN0KTsKKwlkc3RfZnJlZSgmcnQtPmRzdCk7CiAJcmV0dXJuIGVycjsKICNlbmRpZgogfQpAQCAtMTEwOCw3ICsxMTA4LDcgQEAKIAlSVDZfVFJBQ0UoImZpYjZfZGVsX3JvdXRlXG4iKTsKIAogCS8qIFVubGluayBpdCAqLwotCSpydHAgPSBydC0+dS5kc3QucnQ2X25leHQ7CisJKnJ0cCA9IHJ0LT5kc3QucnQ2X25leHQ7CiAJcnQtPnJ0Nmlfbm9kZSA9IE5VTEw7CiAJbmV0LT5pcHY2LnJ0Nl9zdGF0cy0+ZmliX3J0X2VudHJpZXMtLTsKIAluZXQtPmlwdjYucnQ2X3N0YXRzLT5maWJfZGlzY2FyZGVkX3JvdXRlcysrOwpAQCAtMTEyMiwxNCArMTEyMiwxNCBAQAogCUZPUl9XQUxLRVJTKHcpIHsKIAkJaWYgKHctPnN0YXRlID09IEZXU19DICYmIHctPmxlYWYgPT0gcnQpIHsKIAkJCVJUNl9UUkFDRSgid2Fsa2VyICVwIGFkanVzdGVkIGJ5IGRlbHJvdXRlXG4iLCB3KTsKLQkJCXctPmxlYWYgPSBydC0+dS5kc3QucnQ2X25leHQ7CisJCQl3LT5sZWFmID0gcnQtPmRzdC5ydDZfbmV4dDsKIAkJCWlmICh3LT5sZWFmID09IE5VTEwpCiAJCQkJdy0+c3RhdGUgPSBGV1NfVTsKIAkJfQogCX0KIAlyZWFkX3VubG9jaygmZmliNl93YWxrZXJfbG9jayk7CiAKLQlydC0+dS5kc3QucnQ2X25leHQgPSBOVUxMOworCXJ0LT5kc3QucnQ2X25leHQgPSBOVUxMOwogCiAJLyogSWYgaXQgd2FzIGxhc3Qgcm91dGUsIGV4cHVuZ2UgaXRzIHJhZGl4IHRyZWUgbm9kZSAqLwogCWlmIChmbi0+bGVhZiA9PSBOVUxMKSB7CkBAIC0xMTY4LDcgKzExNjgsNyBAQAogCXN0cnVjdCBydDZfaW5mbyAqKnJ0cDsKIAogI2lmIFJUNl9ERUJVRyA+PSAyCi0JaWYgKHJ0LT51LmRzdC5vYnNvbGV0ZT4wKSB7CisJaWYgKHJ0LT5kc3Qub2Jzb2xldGU+MCkgewogCQlXQVJOX09OKGZuICE9IE5VTEwpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CkBAIC0xMTk1LDcgKzExOTUsNyBAQAogCSAqCVdhbGsgdGhlIGxlYWYgZW50cmllcyBsb29raW5nIGZvciBvdXJzZWxmCiAJICovCiAKLQlmb3IgKHJ0cCA9ICZmbi0+bGVhZjsgKnJ0cDsgcnRwID0gJigqcnRwKS0+dS5kc3QucnQ2X25leHQpIHsKKwlmb3IgKHJ0cCA9ICZmbi0+bGVhZjsgKnJ0cDsgcnRwID0gJigqcnRwKS0+ZHN0LnJ0Nl9uZXh0KSB7CiAJCWlmICgqcnRwID09IHJ0KSB7CiAJCQlmaWI2X2RlbF9yb3V0ZShmbiwgcnRwLCBpbmZvKTsKIAkJCXJldHVybiAwOwpAQCAtMTMzNCw3ICsxMzM0LDcgQEAKIAkJLm5sX25ldCA9IGMtPm5ldCwKIAl9OwogCi0JZm9yIChydCA9IHctPmxlYWY7IHJ0OyBydCA9IHJ0LT51LmRzdC5ydDZfbmV4dCkgeworCWZvciAocnQgPSB3LT5sZWFmOyBydDsgcnQgPSBydC0+ZHN0LnJ0Nl9uZXh0KSB7CiAJCXJlcyA9IGMtPmZ1bmMocnQsIGMtPmFyZyk7CiAJCWlmIChyZXMgPCAwKSB7CiAJCQl3LT5sZWFmID0gcnQ7CkBAIC0xNDQ4LDggKzE0NDgsOCBAQAogCQl9CiAJCWdjX2FyZ3MubW9yZSsrOwogCX0gZWxzZSBpZiAocnQtPnJ0NmlfZmxhZ3MgJiBSVEZfQ0FDSEUpIHsKLQkJaWYgKGF0b21pY19yZWFkKCZydC0+dS5kc3QuX19yZWZjbnQpID09IDAgJiYKLQkJICAgIHRpbWVfYWZ0ZXJfZXEobm93LCBydC0+dS5kc3QubGFzdHVzZSArIGdjX2FyZ3MudGltZW91dCkpIHsKKwkJaWYgKGF0b21pY19yZWFkKCZydC0+ZHN0Ll9fcmVmY250KSA9PSAwICYmCisJCSAgICB0aW1lX2FmdGVyX2VxKG5vdywgcnQtPmRzdC5sYXN0dXNlICsgZ2NfYXJncy50aW1lb3V0KSkgewogCQkJUlQ2X1RSQUNFKCJhZ2luZyBjbG9uZSAlcFxuIiwgcnQpOwogCQkJcmV0dXJuIC0xOwogCQl9IGVsc2UgaWYgKChydC0+cnQ2aV9mbGFncyAmIFJURl9HQVRFV0FZKSAmJgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X291dHB1dC5jIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jCmluZGV4IDg5NDI1YWYuLmQ0MGIzMzAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYworKysgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKQEAgLTY5OCw3ICs2OTgsNyBAQAogCQlpcHY2X2hkcihza2IpLT5wYXlsb2FkX2xlbiA9IGh0b25zKGZpcnN0X2xlbiAtCiAJCQkJCQkgICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTsKIAotCQlkc3RfaG9sZCgmcnQtPnUuZHN0KTsKKwkJZHN0X2hvbGQoJnJ0LT5kc3QpOwogCiAJCWZvciAoOzspIHsKIAkJCS8qIFByZXBhcmUgaGVhZGVyIG9mIHRoZSBuZXh0IGZyYW1lLApAQCAtNzI2LDcgKzcyNiw3IEBACiAKIAkJCWVyciA9IG91dHB1dChza2IpOwogCQkJaWYoIWVycikKLQkJCQlJUDZfSU5DX1NUQVRTKG5ldCwgaXA2X2RzdF9pZGV2KCZydC0+dS5kc3QpLAorCQkJCUlQNl9JTkNfU1RBVFMobmV0LCBpcDZfZHN0X2lkZXYoJnJ0LT5kc3QpLAogCQkJCQkgICAgICBJUFNUQVRTX01JQl9GUkFHQ1JFQVRFUyk7CiAKIAkJCWlmIChlcnIgfHwgIWZyYWcpCkBAIC03NDAsOSArNzQwLDkgQEAKIAkJa2ZyZWUodG1wX2hkcik7CiAKIAkJaWYgKGVyciA9PSAwKSB7Ci0JCQlJUDZfSU5DX1NUQVRTKG5ldCwgaXA2X2RzdF9pZGV2KCZydC0+dS5kc3QpLAorCQkJSVA2X0lOQ19TVEFUUyhuZXQsIGlwNl9kc3RfaWRldigmcnQtPmRzdCksCiAJCQkJICAgICAgSVBTVEFUU19NSUJfRlJBR09LUyk7Ci0JCQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKKwkJCWRzdF9yZWxlYXNlKCZydC0+ZHN0KTsKIAkJCXJldHVybiAwOwogCQl9CiAKQEAgLTc1Miw5ICs3NTIsOSBAQAogCQkJZnJhZyA9IHNrYjsKIAkJfQogCi0JCUlQNl9JTkNfU1RBVFMobmV0LCBpcDZfZHN0X2lkZXYoJnJ0LT51LmRzdCksCisJCUlQNl9JTkNfU1RBVFMobmV0LCBpcDZfZHN0X2lkZXYoJnJ0LT5kc3QpLAogCQkJICAgICAgSVBTVEFUU19NSUJfRlJBR0ZBSUxTKTsKLQkJZHN0X3JlbGVhc2UoJnJ0LT51LmRzdCk7CisJCWRzdF9yZWxlYXNlKCZydC0+ZHN0KTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTc4NSw3ICs3ODUsNyBAQAogCQkgKglBbGxvY2F0ZSBidWZmZXIuCiAJCSAqLwogCi0JCWlmICgoZnJhZyA9IGFsbG9jX3NrYihsZW4raGxlbitzaXplb2Yoc3RydWN0IGZyYWdfaGRyKStMTF9BTExPQ0FURURfU1BBQ0UocnQtPnUuZHN0LmRldiksIEdGUF9BVE9NSUMpKSA9PSBOVUxMKSB7CisJCWlmICgoZnJhZyA9IGFsbG9jX3NrYihsZW4raGxlbitzaXplb2Yoc3RydWN0IGZyYWdfaGRyKStMTF9BTExPQ0FURURfU1BBQ0UocnQtPmRzdC5kZXYpLCBHRlBfQVRPTUlDKSkgPT0gTlVMTCkgewogCQkJTkVUREVCVUcoS0VSTl9JTkZPICJJUHY2OiBmcmFnOiBubyBtZW1vcnkgZm9yIG5ldyBmcmFnbWVudCFcbiIpOwogCQkJSVA2X0lOQ19TVEFUUyhuZXQsIGlwNl9kc3RfaWRldihza2JfZHN0KHNrYikpLAogCQkJCSAgICAgIElQU1RBVFNfTUlCX0ZSQUdGQUlMUyk7CkBAIC03OTgsNyArNzk4LDcgQEAKIAkJICovCiAKIAkJaXA2X2NvcHlfbWV0YWRhdGEoZnJhZywgc2tiKTsKLQkJc2tiX3Jlc2VydmUoZnJhZywgTExfUkVTRVJWRURfU1BBQ0UocnQtPnUuZHN0LmRldikpOworCQlza2JfcmVzZXJ2ZShmcmFnLCBMTF9SRVNFUlZFRF9TUEFDRShydC0+ZHN0LmRldikpOwogCQlza2JfcHV0KGZyYWcsIGxlbiArIGhsZW4gKyBzaXplb2Yoc3RydWN0IGZyYWdfaGRyKSk7CiAJCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihmcmFnKTsKIAkJZmggPSAoc3RydWN0IGZyYWdfaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihmcmFnKSArIGhsZW4pOwpAQCAtMTE1NiwyNCArMTE1NiwyNCBAQAogCiAJCQkvKiBuZWVkIHNvdXJjZSBhZGRyZXNzIGFib3ZlIG1peWF6YXdhKi8KIAkJfQotCQlkc3RfaG9sZCgmcnQtPnUuZHN0KTsKLQkJaW5ldC0+Y29yay5kc3QgPSAmcnQtPnUuZHN0OworCQlkc3RfaG9sZCgmcnQtPmRzdCk7CisJCWluZXQtPmNvcmsuZHN0ID0gJnJ0LT5kc3Q7CiAJCWluZXQtPmNvcmsuZmwgPSAqZmw7CiAJCW5wLT5jb3JrLmhvcF9saW1pdCA9IGhsaW1pdDsKIAkJbnAtPmNvcmsudGNsYXNzID0gdGNsYXNzOwogCQltdHUgPSBucC0+cG10dWRpc2MgPT0gSVBWNl9QTVRVRElTQ19QUk9CRSA/Ci0JCSAgICAgIHJ0LT51LmRzdC5kZXYtPm10dSA6IGRzdF9tdHUocnQtPnUuZHN0LnBhdGgpOworCQkgICAgICBydC0+ZHN0LmRldi0+bXR1IDogZHN0X210dShydC0+ZHN0LnBhdGgpOwogCQlpZiAobnAtPmZyYWdfc2l6ZSA8IG10dSkgewogCQkJaWYgKG5wLT5mcmFnX3NpemUpCiAJCQkJbXR1ID0gbnAtPmZyYWdfc2l6ZTsKIAkJfQogCQlpbmV0LT5jb3JrLmZyYWdzaXplID0gbXR1OwotCQlpZiAoZHN0X2FsbGZyYWcocnQtPnUuZHN0LnBhdGgpKQorCQlpZiAoZHN0X2FsbGZyYWcocnQtPmRzdC5wYXRoKSkKIAkJCWluZXQtPmNvcmsuZmxhZ3MgfD0gSVBDT1JLX0FMTEZSQUc7CiAJCWluZXQtPmNvcmsubGVuZ3RoID0gMDsKIAkJc2stPnNrX3NuZG1zZ19wYWdlID0gTlVMTDsKIAkJc2stPnNrX3NuZG1zZ19vZmYgPSAwOwotCQlleHRoZHJsZW4gPSBydC0+dS5kc3QuaGVhZGVyX2xlbiArIChvcHQgPyBvcHQtPm9wdF9mbGVuIDogMCkgLQorCQlleHRoZHJsZW4gPSBydC0+ZHN0LmhlYWRlcl9sZW4gKyAob3B0ID8gb3B0LT5vcHRfZmxlbiA6IDApIC0KIAkJCSAgICBydC0+cnQ2aV9uZmhlYWRlcl9sZW47CiAJCWxlbmd0aCArPSBleHRoZHJsZW47CiAJCXRyYW5zaGRybGVuICs9IGV4dGhkcmxlbjsKQEAgLTExODYsNyArMTE4Niw3IEBACiAJCW10dSA9IGluZXQtPmNvcmsuZnJhZ3NpemU7CiAJfQogCi0JaGhfbGVuID0gTExfUkVTRVJWRURfU1BBQ0UocnQtPnUuZHN0LmRldik7CisJaGhfbGVuID0gTExfUkVTRVJWRURfU1BBQ0UocnQtPmRzdC5kZXYpOwogCiAJZnJhZ2hlYWRlcmxlbiA9IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgKyBydC0+cnQ2aV9uZmhlYWRlcl9sZW4gKwogCQkJKG9wdCA/IG9wdC0+b3B0X25mbGVuIDogMCk7CkBAIC0xMjI0LDcgKzEyMjQsNyBAQAogCQl9CiAKIAkJaWYgKHByb3RvID09IElQUFJPVE9fVURQICYmCi0JCSAgICAocnQtPnUuZHN0LmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1VGTykpIHsKKwkJICAgIChydC0+ZHN0LmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1VGTykpIHsKIAogCQkJZXJyID0gaXA2X3Vmb19hcHBlbmRfZGF0YShzaywgZ2V0ZnJhZywgZnJvbSwgbGVuZ3RoLAogCQkJCQkJICBoaF9sZW4sIGZyYWdoZWFkZXJsZW4sCkBAIC0xMjcwLDcgKzEyNzAsNyBAQAogCiAJCQlmcmFnbGVuID0gZGF0YWxlbiArIGZyYWdoZWFkZXJsZW47CiAJCQlpZiAoKGZsYWdzICYgTVNHX01PUkUpICYmCi0JCQkgICAgIShydC0+dS5kc3QuZGV2LT5mZWF0dXJlcyZORVRJRl9GX1NHKSkKKwkJCSAgICAhKHJ0LT5kc3QuZGV2LT5mZWF0dXJlcyZORVRJRl9GX1NHKSkKIAkJCQlhbGxvY2xlbiA9IG10dTsKIAkJCWVsc2UKIAkJCQlhbGxvY2xlbiA9IGRhdGFsZW4gKyBmcmFnaGVhZGVybGVuOwpAQCAtMTI4MSw3ICsxMjgxLDcgQEAKIAkJCSAqIGJlY2F1c2Ugd2UgaGF2ZSBubyBpZGVhIGlmIHdlJ3JlIHRoZSBsYXN0IG9uZS4KIAkJCSAqLwogCQkJaWYgKGRhdGFsZW4gPT0gbGVuZ3RoICsgZnJhZ2dhcCkKLQkJCQlhbGxvY2xlbiArPSBydC0+dS5kc3QudHJhaWxlcl9sZW47CisJCQkJYWxsb2NsZW4gKz0gcnQtPmRzdC50cmFpbGVyX2xlbjsKIAogCQkJLyoKIAkJCSAqIFdlIGp1c3QgcmVzZXJ2ZSBzcGFjZSBmb3IgZnJhZ21lbnQgaGVhZGVyLgpAQCAtMTM1OCw3ICsxMzU4LDcgQEAKIAkJaWYgKGNvcHkgPiBsZW5ndGgpCiAJCQljb3B5ID0gbGVuZ3RoOwogCi0JCWlmICghKHJ0LT51LmRzdC5kZXYtPmZlYXR1cmVzJk5FVElGX0ZfU0cpKSB7CisJCWlmICghKHJ0LT5kc3QuZGV2LT5mZWF0dXJlcyZORVRJRl9GX1NHKSkgewogCQkJdW5zaWduZWQgaW50IG9mZjsKIAogCQkJb2ZmID0gc2tiLT5sZW47CkBAIC0xNTAzLDcgKzE1MDMsNyBAQAogCXNrYi0+cHJpb3JpdHkgPSBzay0+c2tfcHJpb3JpdHk7CiAJc2tiLT5tYXJrID0gc2stPnNrX21hcms7CiAKLQlza2JfZHN0X3NldChza2IsIGRzdF9jbG9uZSgmcnQtPnUuZHN0KSk7CisJc2tiX2RzdF9zZXQoc2tiLCBkc3RfY2xvbmUoJnJ0LT5kc3QpKTsKIAlJUDZfVVBEX1BPX1NUQVRTKG5ldCwgcnQtPnJ0NmlfaWRldiwgSVBTVEFUU19NSUJfT1VULCBza2ItPmxlbik7CiAJaWYgKHByb3RvID09IElQUFJPVE9fSUNNUFY2KSB7CiAJCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBpcDZfZHN0X2lkZXYoc2tiX2RzdChza2IpKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwppbmRleCA4ZjM5ODkzLi4wZmQwMjdmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKKysrIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCkBAIC01NTIsNyArNTUyLDcgQEAKIAlpZiAoaXBfcm91dGVfb3V0cHV0X2tleShkZXZfbmV0KHNrYi0+ZGV2KSwgJnJ0LCAmZmwpKQogCQlnb3RvIG91dDsKIAotCXNrYjItPmRldiA9IHJ0LT51LmRzdC5kZXY7CisJc2tiMi0+ZGV2ID0gcnQtPmRzdC5kZXY7CiAKIAkvKiByb3V0ZSAiaW5jb21pbmciIHBhY2tldCAqLwogCWlmIChydC0+cnRfZmxhZ3MgJiBSVENGX0xPQ0FMKSB7CkBAIC01NjIsNyArNTYyLDcgQEAKIAkJZmwuZmw0X3NyYyA9IGVpcGgtPnNhZGRyOwogCQlmbC5mbDRfdG9zID0gZWlwaC0+dG9zOwogCQlpZiAoaXBfcm91dGVfb3V0cHV0X2tleShkZXZfbmV0KHNrYi0+ZGV2KSwgJnJ0LCAmZmwpIHx8Ci0JCSAgICBydC0+dS5kc3QuZGV2LT50eXBlICE9IEFSUEhSRF9UVU5ORUwpIHsKKwkJICAgIHJ0LT5kc3QuZGV2LT50eXBlICE9IEFSUEhSRF9UVU5ORUwpIHsKIAkJCWlwX3J0X3B1dChydCk7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtNjI2LDcgKzYyNiw3IEBACiAJCWljbXB2Nl9zZW5kKHNrYjIsIHJlbF90eXBlLCByZWxfY29kZSwgcmVsX2luZm8pOwogCiAJCWlmIChydCkKLQkJCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOworCQkJZHN0X3JlbGVhc2UoJnJ0LT5kc3QpOwogCiAJCWtmcmVlX3NrYihza2IyKTsKIAl9CkBAIC0xMTM1LDcgKzExMzUsNyBAQAogCQkJaWYgKGRldi0+bXR1IDwgSVBWNl9NSU5fTVRVKQogCQkJCWRldi0+bXR1ID0gSVBWNl9NSU5fTVRVOwogCQl9Ci0JCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOworCQlkc3RfcmVsZWFzZSgmcnQtPmRzdCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKaW5kZXggYmQ0M2YwMS4uYTdmNjZiYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCisrKyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwpAQCAtNTUsOCArNTUsNiBAQAogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotREVGSU5FX1NOTVBfU1RBVChzdHJ1Y3QgaXBzdGF0c19taWIsIGlwdjZfc3RhdGlzdGljcykgX19yZWFkX21vc3RseTsKLQogc3RydWN0IGlwNl9yYV9jaGFpbiAqaXA2X3JhX2NoYWluOwogREVGSU5FX1JXTE9DSyhpcDZfcmFfbG9jayk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L21jYXN0LmMgYi9uZXQvaXB2Ni9tY2FzdC5jCmluZGV4IGFiMTYyMmQuLmQxNDQ0YjkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L21jYXN0LmMKKysrIGIvbmV0L2lwdjYvbWNhc3QuYwpAQCAtMTUyLDE4ICsxNTIsMTkgQEAKIAltY19sc3QtPm5leHQgPSBOVUxMOwogCWlwdjZfYWRkcl9jb3B5KCZtY19sc3QtPmFkZHIsIGFkZHIpOwogCisJcmN1X3JlYWRfbG9jaygpOwogCWlmIChpZmluZGV4ID09IDApIHsKIAkJc3RydWN0IHJ0Nl9pbmZvICpydDsKIAkJcnQgPSBydDZfbG9va3VwKG5ldCwgYWRkciwgTlVMTCwgMCwgMCk7CiAJCWlmIChydCkgewogCQkJZGV2ID0gcnQtPnJ0NmlfZGV2OwotCQkJZGV2X2hvbGQoZGV2KTsKLQkJCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOworCQkJZHN0X3JlbGVhc2UoJnJ0LT5kc3QpOwogCQl9CiAJfSBlbHNlCi0JCWRldiA9IGRldl9nZXRfYnlfaW5kZXgobmV0LCBpZmluZGV4KTsKKwkJZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBpZmluZGV4KTsKIAogCWlmIChkZXYgPT0gTlVMTCkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJc29ja19rZnJlZV9zKHNrLCBtY19sc3QsIHNpemVvZigqbWNfbHN0KSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTE4MCw4ICsxODEsOCBAQAogCWVyciA9IGlwdjZfZGV2X21jX2luYyhkZXYsIGFkZHIpOwogCiAJaWYgKGVycikgeworCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJc29ja19rZnJlZV9zKHNrLCBtY19sc3QsIHNpemVvZigqbWNfbHN0KSk7Ci0JCWRldl9wdXQoZGV2KTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTE5MCw3ICsxOTEsNyBAQAogCW5wLT5pcHY2X21jX2xpc3QgPSBtY19sc3Q7CiAJd3JpdGVfdW5sb2NrX2JoKCZpcHY2X3NrX21jX2xvY2spOwogCi0JZGV2X3B1dChkZXYpOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMTMsMTggKzIxNCwxNyBAQAogCQkJKmxuayA9IG1jX2xzdC0+bmV4dDsKIAkJCXdyaXRlX3VubG9ja19iaCgmaXB2Nl9za19tY19sb2NrKTsKIAotCQkJZGV2ID0gZGV2X2dldF9ieV9pbmRleChuZXQsIG1jX2xzdC0+aWZpbmRleCk7CisJCQlyY3VfcmVhZF9sb2NrKCk7CisJCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIG1jX2xzdC0+aWZpbmRleCk7CiAJCQlpZiAoZGV2ICE9IE5VTEwpIHsKLQkJCQlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gaW42X2Rldl9nZXQoZGV2KTsKKwkJCQlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChkZXYpOwogCiAJCQkJKHZvaWQpIGlwNl9tY19sZWF2ZV9zcmMoc2ssIG1jX2xzdCwgaWRldik7Ci0JCQkJaWYgKGlkZXYpIHsKKwkJCQlpZiAoaWRldikKIAkJCQkJX19pcHY2X2Rldl9tY19kZWMoaWRldiwgJm1jX2xzdC0+YWRkcik7Ci0JCQkJCWluNl9kZXZfcHV0KGlkZXYpOwotCQkJCX0KLQkJCQlkZXZfcHV0KGRldik7CiAJCQl9IGVsc2UKIAkJCQkodm9pZCkgaXA2X21jX2xlYXZlX3NyYyhzaywgbWNfbHN0LCBOVUxMKTsKKwkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJc29ja19rZnJlZV9zKHNrLCBtY19sc3QsIHNpemVvZigqbWNfbHN0KSk7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMjM0LDQzICsyMzQsMzYgQEAKIAlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaW5ldDZfZGV2ICppcDZfbWNfZmluZF9kZXYoc3RydWN0IG5ldCAqbmV0LAotCQkJCQkgc3RydWN0IGluNl9hZGRyICpncm91cCwKLQkJCQkJIGludCBpZmluZGV4KQorLyogY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jaygpICovCitzdGF0aWMgc3RydWN0IGluZXQ2X2RldiAqaXA2X21jX2ZpbmRfZGV2X3JjdShzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJCSAgICAgc3RydWN0IGluNl9hZGRyICpncm91cCwKKwkJCQkJICAgICBpbnQgaWZpbmRleCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gTlVMTDsKIAogCWlmIChpZmluZGV4ID09IDApIHsKLQkJc3RydWN0IHJ0Nl9pbmZvICpydDsKKwkJc3RydWN0IHJ0Nl9pbmZvICpydCA9IHJ0Nl9sb29rdXAobmV0LCBncm91cCwgTlVMTCwgMCwgMCk7CiAKLQkJcnQgPSBydDZfbG9va3VwKG5ldCwgZ3JvdXAsIE5VTEwsIDAsIDApOwogCQlpZiAocnQpIHsKIAkJCWRldiA9IHJ0LT5ydDZpX2RldjsKIAkJCWRldl9ob2xkKGRldik7Ci0JCQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKKwkJCWRzdF9yZWxlYXNlKCZydC0+ZHN0KTsKIAkJfQogCX0gZWxzZQotCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KG5ldCwgaWZpbmRleCk7CisJCWRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KG5ldCwgaWZpbmRleCk7CiAKIAlpZiAoIWRldikKLQkJZ290byBub2RldjsKLQlpZGV2ID0gaW42X2Rldl9nZXQoZGV2KTsKKwkJcmV0dXJuIE5VTEw7CisJaWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTsKIAlpZiAoIWlkZXYpCi0JCWdvdG8gcmVsZWFzZTsKKwkJcmV0dXJuIE5VTEw7OwogCXJlYWRfbG9ja19iaCgmaWRldi0+bG9jayk7Ci0JaWYgKGlkZXYtPmRlYWQpCi0JCWdvdG8gdW5sb2NrX3JlbGVhc2U7Ci0KKwlpZiAoaWRldi0+ZGVhZCkgeworCQlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7CisJCXJldHVybiBOVUxMOworCX0KIAlyZXR1cm4gaWRldjsKLQotdW5sb2NrX3JlbGVhc2U6Ci0JcmVhZF91bmxvY2tfYmgoJmlkZXYtPmxvY2spOwotCWluNl9kZXZfcHV0KGlkZXYpOwotcmVsZWFzZToKLQlkZXZfcHV0KGRldik7Ci1ub2RldjoKLQlyZXR1cm4gTlVMTDsKIH0KIAogdm9pZCBpcHY2X3NvY2tfbWNfY2xvc2Uoc3RydWN0IHNvY2sgKnNrKQpAQCAtMjg2LDE5ICsyNzksMTcgQEAKIAkJbnAtPmlwdjZfbWNfbGlzdCA9IG1jX2xzdC0+bmV4dDsKIAkJd3JpdGVfdW5sb2NrX2JoKCZpcHY2X3NrX21jX2xvY2spOwogCi0JCWRldiA9IGRldl9nZXRfYnlfaW5kZXgobmV0LCBtY19sc3QtPmlmaW5kZXgpOworCQlyY3VfcmVhZF9sb2NrKCk7CisJCWRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KG5ldCwgbWNfbHN0LT5pZmluZGV4KTsKIAkJaWYgKGRldikgewotCQkJc3RydWN0IGluZXQ2X2RldiAqaWRldiA9IGluNl9kZXZfZ2V0KGRldik7CisJCQlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChkZXYpOwogCiAJCQkodm9pZCkgaXA2X21jX2xlYXZlX3NyYyhzaywgbWNfbHN0LCBpZGV2KTsKLQkJCWlmIChpZGV2KSB7CisJCQlpZiAoaWRldikKIAkJCQlfX2lwdjZfZGV2X21jX2RlYyhpZGV2LCAmbWNfbHN0LT5hZGRyKTsKLQkJCQlpbjZfZGV2X3B1dChpZGV2KTsKLQkJCX0KLQkJCWRldl9wdXQoZGV2KTsKIAkJfSBlbHNlCiAJCQkodm9pZCkgaXA2X21jX2xlYXZlX3NyYyhzaywgbWNfbHN0LCBOVUxMKTsKLQorCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJc29ja19rZnJlZV9zKHNrLCBtY19sc3QsIHNpemVvZigqbWNfbHN0KSk7CiAKIAkJd3JpdGVfbG9ja19iaCgmaXB2Nl9za19tY19sb2NrKTsKQEAgLTMyNywxNCArMzE4LDE3IEBACiAJaWYgKCFpcHY2X2FkZHJfaXNfbXVsdGljYXN0KGdyb3VwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZGV2ID0gaXA2X21jX2ZpbmRfZGV2KG5ldCwgZ3JvdXAsIHBnc3ItPmdzcl9pbnRlcmZhY2UpOwotCWlmICghaWRldikKKwlyY3VfcmVhZF9sb2NrKCk7CisJaWRldiA9IGlwNl9tY19maW5kX2Rldl9yY3UobmV0LCBncm91cCwgcGdzci0+Z3NyX2ludGVyZmFjZSk7CisJaWYgKCFpZGV2KSB7CisJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAJZGV2ID0gaWRldi0+ZGV2OwogCiAJZXJyID0gLUVBRERSTk9UQVZBSUw7CiAKLQlyZWFkX2xvY2tfYmgoJmlwdjZfc2tfbWNfbG9jayk7CisJcmVhZF9sb2NrKCZpcHY2X3NrX21jX2xvY2spOwogCWZvciAocG1jPWluZXQ2LT5pcHY2X21jX2xpc3Q7IHBtYzsgcG1jPXBtYy0+bmV4dCkgewogCQlpZiAocGdzci0+Z3NyX2ludGVyZmFjZSAmJiBwbWMtPmlmaW5kZXggIT0gcGdzci0+Z3NyX2ludGVyZmFjZSkKIAkJCWNvbnRpbnVlOwpAQCAtMzU4LDcgKzM1Miw3IEBACiAJCXBtYy0+c2Ztb2RlID0gb21vZGU7CiAJfQogCi0Jd3JpdGVfbG9ja19iaCgmcG1jLT5zZmxvY2spOworCXdyaXRlX2xvY2soJnBtYy0+c2Zsb2NrKTsKIAlwbWNsb2NrZWQgPSAxOwogCiAJcHNsID0gcG1jLT5zZmxpc3Q7CkBAIC00MzMsMTEgKzQyNywxMCBAQAogCWlwNl9tY19hZGRfc3JjKGlkZXYsIGdyb3VwLCBvbW9kZSwgMSwgc291cmNlLCAxKTsKIGRvbmU6CiAJaWYgKHBtY2xvY2tlZCkKLQkJd3JpdGVfdW5sb2NrX2JoKCZwbWMtPnNmbG9jayk7Ci0JcmVhZF91bmxvY2tfYmgoJmlwdjZfc2tfbWNfbG9jayk7CisJCXdyaXRlX3VubG9jaygmcG1jLT5zZmxvY2spOworCXJlYWRfdW5sb2NrKCZpcHY2X3NrX21jX2xvY2spOwogCXJlYWRfdW5sb2NrX2JoKCZpZGV2LT5sb2NrKTsKLQlpbjZfZGV2X3B1dChpZGV2KTsKLQlkZXZfcHV0KGRldik7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJaWYgKGxlYXZlZ3JvdXApCiAJCXJldHVybiBpcHY2X3NvY2tfbWNfZHJvcChzaywgcGdzci0+Z3NyX2ludGVyZmFjZSwgZ3JvdXApOwogCXJldHVybiBlcnI7CkBAIC00NjMsMTQgKzQ1NiwxNyBAQAogCSAgICBnc2YtPmdmX2Ztb2RlICE9IE1DQVNUX0VYQ0xVREUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWRldiA9IGlwNl9tY19maW5kX2RldihuZXQsIGdyb3VwLCBnc2YtPmdmX2ludGVyZmFjZSk7CisJcmN1X3JlYWRfbG9jaygpOworCWlkZXYgPSBpcDZfbWNfZmluZF9kZXZfcmN1KG5ldCwgZ3JvdXAsIGdzZi0+Z2ZfaW50ZXJmYWNlKTsKIAotCWlmICghaWRldikKKwlpZiAoIWlkZXYpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybiAtRU5PREVWOworCX0KIAlkZXYgPSBpZGV2LT5kZXY7CiAKIAllcnIgPSAwOwotCXJlYWRfbG9ja19iaCgmaXB2Nl9za19tY19sb2NrKTsKKwlyZWFkX2xvY2soJmlwdjZfc2tfbWNfbG9jayk7CiAKIAlpZiAoZ3NmLT5nZl9mbW9kZSA9PSBNQ0FTVF9JTkNMVURFICYmIGdzZi0+Z2ZfbnVtc3JjID09IDApIHsKIAkJbGVhdmVncm91cCA9IDE7CkBAIC01MTIsNyArNTA4LDcgQEAKIAkJKHZvaWQpIGlwNl9tY19hZGRfc3JjKGlkZXYsIGdyb3VwLCBnc2YtPmdmX2Ztb2RlLCAwLCBOVUxMLCAwKTsKIAl9CiAKLQl3cml0ZV9sb2NrX2JoKCZwbWMtPnNmbG9jayk7CisJd3JpdGVfbG9jaygmcG1jLT5zZmxvY2spOwogCXBzbCA9IHBtYy0+c2ZsaXN0OwogCWlmIChwc2wpIHsKIAkJKHZvaWQpIGlwNl9tY19kZWxfc3JjKGlkZXYsIGdyb3VwLCBwbWMtPnNmbW9kZSwKQEAgLTUyMiwxMyArNTE4LDEyIEBACiAJCSh2b2lkKSBpcDZfbWNfZGVsX3NyYyhpZGV2LCBncm91cCwgcG1jLT5zZm1vZGUsIDAsIE5VTEwsIDApOwogCXBtYy0+c2ZsaXN0ID0gbmV3cHNsOwogCXBtYy0+c2Ztb2RlID0gZ3NmLT5nZl9mbW9kZTsKLQl3cml0ZV91bmxvY2tfYmgoJnBtYy0+c2Zsb2NrKTsKKwl3cml0ZV91bmxvY2soJnBtYy0+c2Zsb2NrKTsKIAllcnIgPSAwOwogZG9uZToKLQlyZWFkX3VubG9ja19iaCgmaXB2Nl9za19tY19sb2NrKTsKKwlyZWFkX3VubG9jaygmaXB2Nl9za19tY19sb2NrKTsKIAlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7Ci0JaW42X2Rldl9wdXQoaWRldik7Ci0JZGV2X3B1dChkZXYpOworCXJjdV9yZWFkX3VubG9jaygpOwogCWlmIChsZWF2ZWdyb3VwKQogCQllcnIgPSBpcHY2X3NvY2tfbWNfZHJvcChzaywgZ3NmLT5nZl9pbnRlcmZhY2UsIGdyb3VwKTsKIAlyZXR1cm4gZXJyOwpAQCAtNTUxLDExICs1NDYsMTMgQEAKIAlpZiAoIWlwdjZfYWRkcl9pc19tdWx0aWNhc3QoZ3JvdXApKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlkZXYgPSBpcDZfbWNfZmluZF9kZXYobmV0LCBncm91cCwgZ3NmLT5nZl9pbnRlcmZhY2UpOworCXJjdV9yZWFkX2xvY2soKTsKKwlpZGV2ID0gaXA2X21jX2ZpbmRfZGV2X3JjdShuZXQsIGdyb3VwLCBnc2YtPmdmX2ludGVyZmFjZSk7CiAKLQlpZiAoIWlkZXYpCisJaWYgKCFpZGV2KSB7CisJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm4gLUVOT0RFVjsKLQorCX0KIAlkZXYgPSBpZGV2LT5kZXY7CiAKIAllcnIgPSAtRUFERFJOT1RBVkFJTDsKQEAgLTU3Nyw4ICs1NzQsNyBAQAogCXBzbCA9IHBtYy0+c2ZsaXN0OwogCWNvdW50ID0gcHNsID8gcHNsLT5zbF9jb3VudCA6IDA7CiAJcmVhZF91bmxvY2tfYmgoJmlkZXYtPmxvY2spOwotCWluNl9kZXZfcHV0KGlkZXYpOwotCWRldl9wdXQoZGV2KTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCWNvcHljb3VudCA9IGNvdW50IDwgZ3NmLT5nZl9udW1zcmMgPyBjb3VudCA6IGdzZi0+Z2ZfbnVtc3JjOwogCWdzZi0+Z2ZfbnVtc3JjID0gY291bnQ7CkBAIC02MDQsOCArNjAwLDcgQEAKIAlyZXR1cm4gMDsKIGRvbmU6CiAJcmVhZF91bmxvY2tfYmgoJmlkZXYtPmxvY2spOwotCWluNl9kZXZfcHV0KGlkZXYpOwotCWRldl9wdXQoZGV2KTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC04MjIsNiArODE3LDcgQEAKIAlzdHJ1Y3QgaWZtY2FkZHI2ICptYzsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2OwogCisJLyogd2UgbmVlZCB0byB0YWtlIGEgcmVmZXJlbmNlIG9uIGlkZXYgKi8KIAlpZGV2ID0gaW42X2Rldl9nZXQoZGV2KTsKIAogCWlmIChpZGV2ID09IE5VTEwpCkBAIC04NjAsNyArODU2LDcgQEAKIAlzZXR1cF90aW1lcigmbWMtPm1jYV90aW1lciwgaWdtcDZfdGltZXJfaGFuZGxlciwgKHVuc2lnbmVkIGxvbmcpbWMpOwogCiAJaXB2Nl9hZGRyX2NvcHkoJm1jLT5tY2FfYWRkciwgYWRkcik7Ci0JbWMtPmlkZXYgPSBpZGV2OworCW1jLT5pZGV2ID0gaWRldjsgLyogKHJlZmVyZW5jZSB0YWtlbikgKi8KIAltYy0+bWNhX3VzZXJzID0gMTsKIAkvKiBtY2Ffc3RhbXAgc2hvdWxkIGJlIHVwZGF0ZWQgdXBvbiBjaGFuZ2VzICovCiAJbWMtPm1jYV9jc3RhbXAgPSBtYy0+bWNhX3RzdGFtcCA9IGppZmZpZXM7CkBAIC05MTUsMTYgKzkxMSwxOCBAQAogCiBpbnQgaXB2Nl9kZXZfbWNfZGVjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcikKIHsKLQlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gaW42X2Rldl9nZXQoZGV2KTsKKwlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2OwogCWludCBlcnI7CiAKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpOwogCWlmICghaWRldikKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWVyciA9IC1FTk9ERVY7CisJZWxzZQorCQllcnIgPSBfX2lwdjZfZGV2X21jX2RlYyhpZGV2LCBhZGRyKTsKIAotCWVyciA9IF9faXB2Nl9kZXZfbWNfZGVjKGlkZXYsIGFkZHIpOwotCi0JaW42X2Rldl9wdXQoaWRldik7Ci0KKwlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC05NjUsNyArOTYzLDggQEAKIAlzdHJ1Y3QgaWZtY2FkZHI2ICptYzsKIAlpbnQgcnYgPSAwOwogCi0JaWRldiA9IGluNl9kZXZfZ2V0KGRldik7CisJcmN1X3JlYWRfbG9jaygpOworCWlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7CiAJaWYgKGlkZXYpIHsKIAkJcmVhZF9sb2NrX2JoKCZpZGV2LT5sb2NrKTsKIAkJZm9yIChtYyA9IGlkZXYtPm1jX2xpc3Q7IG1jOyBtYz1tYy0+bmV4dCkgewpAQCAtOTkyLDggKzk5MSw4IEBACiAJCQkJcnYgPSAxOyAvKiBkb24ndCBmaWx0ZXIgdW5zcGVjaWZpZWQgc291cmNlICovCiAJCX0KIAkJcmVhZF91bmxvY2tfYmgoJmlkZXYtPmxvY2spOwotCQlpbjZfZGV2X3B1dChpZGV2KTsKIAl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIHJ2OwogfQogCkBAIC0xMTA0LDYgKzExMDMsNyBAQAogCXJldHVybiAxOwogfQogCisvKiBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgKi8KIGludCBpZ21wNl9ldmVudF9xdWVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBtbGQyX3F1ZXJ5ICptbGgyID0gTlVMTDsKQEAgLTExMjcsNyArMTEyNyw3IEBACiAJaWYgKCEoaXB2Nl9hZGRyX3R5cGUoJmlwdjZfaGRyKHNrYiktPnNhZGRyKSAmIElQVjZfQUREUl9MSU5LTE9DQUwpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlkZXYgPSBpbjZfZGV2X2dldChza2ItPmRldik7CisJaWRldiA9IF9faW42X2Rldl9nZXQoc2tiLT5kZXYpOwogCiAJaWYgKGlkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CkBAIC0xMTM3LDEwICsxMTM3LDggQEAKIAlncm91cF90eXBlID0gaXB2Nl9hZGRyX3R5cGUoZ3JvdXApOwogCiAJaWYgKGdyb3VwX3R5cGUgIT0gSVBWNl9BRERSX0FOWSAmJgotCSAgICAhKGdyb3VwX3R5cGUmSVBWNl9BRERSX01VTFRJQ0FTVCkpIHsKLQkJaW42X2Rldl9wdXQoaWRldik7CisJICAgICEoZ3JvdXBfdHlwZSZJUFY2X0FERFJfTVVMVElDQVNUKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCiAJaWYgKGxlbiA9PSAyNCkgewogCQlpbnQgc3dpdGNoYmFjazsKQEAgLTExNjEsMTAgKzExNTksOSBAQAogCX0gZWxzZSBpZiAobGVuID49IDI4KSB7CiAJCWludCBzcmNzX29mZnNldCA9IHNpemVvZihzdHJ1Y3QgbWxkMl9xdWVyeSkgLQogCQkJCSAgc2l6ZW9mKHN0cnVjdCBpY21wNmhkcik7Ci0JCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNyY3Nfb2Zmc2V0KSkgewotCQkJaW42X2Rldl9wdXQoaWRldik7CisJCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNyY3Nfb2Zmc2V0KSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQl9CisKIAkJbWxoMiA9IChzdHJ1Y3QgbWxkMl9xdWVyeSAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiAJCW1heF9kZWxheSA9IChNTERWMl9NUkMobnRvaHMobWxoMi0+bWxkMnFfbXJjKSkqSFopLzEwMDA7CiAJCWlmICghbWF4X2RlbGF5KQpAQCAtMTE3MywyOCArMTE3MCwyMyBAQAogCQlpZiAobWxoMi0+bWxkMnFfcXJ2KQogCQkJaWRldi0+bWNfcXJ2ID0gbWxoMi0+bWxkMnFfcXJ2OwogCQlpZiAoZ3JvdXBfdHlwZSA9PSBJUFY2X0FERFJfQU5ZKSB7IC8qIGdlbmVyYWwgcXVlcnkgKi8KLQkJCWlmIChtbGgyLT5tbGQycV9uc3JjcykgewotCQkJCWluNl9kZXZfcHV0KGlkZXYpOworCQkJaWYgKG1saDItPm1sZDJxX25zcmNzKQogCQkJCXJldHVybiAtRUlOVkFMOyAvKiBubyBzb3VyY2VzIGFsbG93ZWQgKi8KLQkJCX0KKwogCQkJbWxkX2dxX3N0YXJ0X3RpbWVyKGlkZXYpOwotCQkJaW42X2Rldl9wdXQoaWRldik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQkvKiBtYXJrIHNvdXJjZXMgdG8gaW5jbHVkZSwgaWYgZ3JvdXAgJiBzb3VyY2Utc3BlY2lmaWMgKi8KIAkJaWYgKG1saDItPm1sZDJxX25zcmNzICE9IDApIHsKIAkJCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNyY3Nfb2Zmc2V0ICsKLQkJCSAgICBudG9ocyhtbGgyLT5tbGQycV9uc3JjcykgKiBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkpIHsKLQkJCQlpbjZfZGV2X3B1dChpZGV2KTsKKwkJCSAgICBudG9ocyhtbGgyLT5tbGQycV9uc3JjcykgKiBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkpCiAJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9CisKIAkJCW1saDIgPSAoc3RydWN0IG1sZDJfcXVlcnkgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpOwogCQkJbWFyayA9IDE7CiAJCX0KLQl9IGVsc2UgewotCQlpbjZfZGV2X3B1dChpZGV2KTsKKwl9IGVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCiAJcmVhZF9sb2NrX2JoKCZpZGV2LT5sb2NrKTsKIAlpZiAoZ3JvdXBfdHlwZSA9PSBJUFY2X0FERFJfQU5ZKSB7CkBAIC0xMjI3LDEyICsxMjE5LDExIEBACiAJCX0KIAl9CiAJcmVhZF91bmxvY2tfYmgoJmlkZXYtPmxvY2spOwotCWluNl9kZXZfcHV0KGlkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLQorLyogY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jaygpICovCiBpbnQgaWdtcDZfZXZlbnRfcmVwb3J0KHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGlmbWNhZGRyNiAqbWE7CkBAIC0xMjYwLDcgKzEyNTEsNyBAQAogCSAgICAhKGFkZHJfdHlwZSZJUFY2X0FERFJfTElOS0xPQ0FMKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZGV2ID0gaW42X2Rldl9nZXQoc2tiLT5kZXYpOworCWlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi0+ZGV2KTsKIAlpZiAoaWRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtMTI4MCw3ICsxMjcxLDYgQEAKIAkJfQogCX0KIAlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7Ci0JaW42X2Rldl9wdXQoaWRldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzOTYsMTIgKzEzODYsMTQgQEAKIAlzdHJ1Y3QgbWxkMl9yZXBvcnQgKnBtciA9CiAJCQkgICAgICAoc3RydWN0IG1sZDJfcmVwb3J0ICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAlpbnQgcGF5bG9hZF9sZW4sIG1sZGxlbjsKLQlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gaW42X2Rldl9nZXQoc2tiLT5kZXYpOworCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7CiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItPmRldik7CiAJaW50IGVycjsKIAlzdHJ1Y3QgZmxvd2kgZmw7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0OwogCisJcmN1X3JlYWRfbG9jaygpOworCWlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi0+ZGV2KTsKIAlJUDZfVVBEX1BPX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfT1VULCBza2ItPmxlbik7CiAKIAlwYXlsb2FkX2xlbiA9IChza2ItPnRhaWwgLSBza2ItPm5ldHdvcmtfaGVhZGVyKSAtIHNpemVvZigqcGlwNik7CkBAIC0xNDQxLDggKzE0MzMsNyBAQAogCX0gZWxzZQogCQlJUDZfSU5DX1NUQVRTX0JIKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfT1VURElTQ0FSRFMpOwogCi0JaWYgKGxpa2VseShpZGV2ICE9IE5VTEwpKQotCQlpbjZfZGV2X3B1dChpZGV2KTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm47CiAKIGVycl9vdXQ6CkBAIC0xNzc5LDcgKzE3NzAsOCBAQAogCQkJCQkgSVBQUk9UT19JQ01QVjYsCiAJCQkJCSBjc3VtX3BhcnRpYWwoaGRyLCBsZW4sIDApKTsKIAotCWlkZXYgPSBpbjZfZGV2X2dldChza2ItPmRldik7CisJcmN1X3JlYWRfbG9jaygpOworCWlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi0+ZGV2KTsKIAogCWRzdCA9IGljbXA2X2RzdF9hbGxvYyhza2ItPmRldiwgTlVMTCwgJmlwdjZfaGRyKHNrYiktPmRhZGRyKTsKIAlpZiAoIWRzdCkgewpAQCAtMTgwNiw4ICsxNzk4LDcgQEAKIAl9IGVsc2UKIAkJSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTsKIAotCWlmIChsaWtlbHkoaWRldiAhPSBOVUxMKSkKLQkJaW42X2Rldl9wdXQoaWRldik7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuOwogCiBlcnJfb3V0OgpAQCAtMTk5OCw4ICsxOTg5LDcgQEAKIAkJCQkgICAgJnBzZi0+c2ZfYWRkcikpCiAJCQkJCWJyZWFrOwogCQkJaWYgKCFkcHNmKSB7Ci0JCQkJZHBzZiA9IChzdHJ1Y3QgaXA2X3NmX2xpc3QgKikKLQkJCQkJa21hbGxvYyhzaXplb2YoKmRwc2YpLCBHRlBfQVRPTUlDKTsKKwkJCQlkcHNmID0ga21hbGxvYyhzaXplb2YoKmRwc2YpLCBHRlBfQVRPTUlDKTsKIAkJCQlpZiAoIWRwc2YpCiAJCQkJCWNvbnRpbnVlOwogCQkJCSpkcHNmID0gKnBzZjsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L21pcDYuYyBiL25ldC9pcHY2L21pcDYuYwppbmRleCAyNzk0YjYwLi5kNmU5NTk5IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9taXA2LmMKKysrIGIvbmV0L2lwdjYvbWlwNi5jCkBAIC0zNDcsMTEgKzM0NywxMiBAQAogCiBzdGF0aWMgaW50IG1pcDZfcnRoZHJfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCiB7CisJc3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7CiAJc3RydWN0IHJ0Ml9oZHIgKnJ0MiA9IChzdHJ1Y3QgcnQyX2hkciAqKXNrYi0+ZGF0YTsKIAlpbnQgZXJyID0gcnQyLT5ydF9oZHIubmV4dGhkcjsKIAogCXNwaW5fbG9jaygmeC0+bG9jayk7Ci0JaWYgKCFpcHY2X2FkZHJfZXF1YWwoJnJ0Mi0+YWRkciwgKHN0cnVjdCBpbjZfYWRkciAqKXgtPmNvYWRkcikgJiYKKwlpZiAoIWlwdjZfYWRkcl9lcXVhbCgmaXBoLT5kYWRkciwgKHN0cnVjdCBpbjZfYWRkciAqKXgtPmNvYWRkcikgJiYKIAkgICAgIWlwdjZfYWRkcl9hbnkoKHN0cnVjdCBpbjZfYWRkciAqKXgtPmNvYWRkcikpCiAJCWVyciA9IC1FTk9FTlQ7CiAJc3Bpbl91bmxvY2soJngtPmxvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmMKaW5kZXggMmVmZWY1Mi4uNTg4NDFjNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmRpc2MuYworKysgYi9uZXQvaXB2Ni9uZGlzYy5jCkBAIC0xMjI5LDcgKzEyMjksNyBAQAogCQkJTkRfUFJJTlRLMChLRVJOX0VSUgogCQkJCSAgICJJQ01QdjYgUkE6ICVzKCkgZ290IGRlZmF1bHQgcm91dGVyIHdpdGhvdXQgbmVpZ2hib3VyLlxuIiwKIAkJCQkgICBfX2Z1bmNfXyk7Ci0JCQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKKwkJCWRzdF9yZWxlYXNlKCZydC0+ZHN0KTsKIAkJCWluNl9kZXZfcHV0KGluNl9kZXYpOwogCQkJcmV0dXJuOwogCQl9CkBAIC0xMjQ0LDcgKzEyNDQsNyBAQAogCWlmIChyYV9tc2ctPmljbXBoLmljbXA2X2hvcF9saW1pdCkgewogCQlpbjZfZGV2LT5jbmYuaG9wX2xpbWl0ID0gcmFfbXNnLT5pY21waC5pY21wNl9ob3BfbGltaXQ7CiAJCWlmIChydCkKLQkJCXJ0LT51LmRzdC5tZXRyaWNzW1JUQVhfSE9QTElNSVQtMV0gPSByYV9tc2ctPmljbXBoLmljbXA2X2hvcF9saW1pdDsKKwkJCXJ0LT5kc3QubWV0cmljc1tSVEFYX0hPUExJTUlULTFdID0gcmFfbXNnLT5pY21waC5pY21wNl9ob3BfbGltaXQ7CiAJfQogCiBza2lwX2RlZnJ0cjoKQEAgLTEzNjMsNyArMTM2Myw3IEBACiAJCQlpbjZfZGV2LT5jbmYubXR1NiA9IG10dTsKIAogCQkJaWYgKHJ0KQotCQkJCXJ0LT51LmRzdC5tZXRyaWNzW1JUQVhfTVRVLTFdID0gbXR1OworCQkJCXJ0LT5kc3QubWV0cmljc1tSVEFYX01UVS0xXSA9IG10dTsKIAogCQkJcnQ2X210dV9jaGFuZ2Uoc2tiLT5kZXYsIG10dSk7CiAJCX0KQEAgLTEzODQsNyArMTM4NCw3IEBACiAJfQogb3V0OgogCWlmIChydCkKLQkJZHN0X3JlbGVhc2UoJnJ0LT51LmRzdCk7CisJCWRzdF9yZWxlYXNlKCZydC0+ZHN0KTsKIAllbHNlIGlmIChuZWlnaCkKIAkJbmVpZ2hfcmVsZWFzZShuZWlnaCk7CiAJaW42X2Rldl9wdXQoaW42X2Rldik7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIuYyBiL25ldC9pcHY2L25ldGZpbHRlci5jCmluZGV4IGE3NDk1MWMuLjcxNTViMjQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci5jCkBAIC0xNTEsOSArMTUxLDcgQEAKIAkJCQkJCQkgcHJvdG9jb2wsCiAJCQkJCQkJIGNzdW1fc3ViKDAsIGhzdW0pKSk7CiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKLQkJY3N1bSA9IF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlX2hlYWQoc2tiLCBkYXRhb2ZmICsgbGVuKTsKLQkJaWYgKCFjc3VtKQotCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJcmV0dXJuIF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlX2hlYWQoc2tiLCBkYXRhb2ZmICsgbGVuKTsKIAl9CiAJcmV0dXJuIGNzdW07CiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jCmluZGV4IDhjMjAxNzQuLjQxM2FiMDcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMKQEAgLTQzLDcgKzQzLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgY29weV9tb2RlIF9fcmVhZF9tb3N0bHkgPSBJUFFfQ09QWV9OT05FOwogc3RhdGljIHVuc2lnbmVkIGludCBxdWV1ZV9tYXhsZW4gX19yZWFkX21vc3RseSA9IElQUV9RTUFYX0RFRkFVTFQ7Ci1zdGF0aWMgREVGSU5FX1JXTE9DSyhxdWV1ZV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socXVldWVfbG9jayk7CiBzdGF0aWMgaW50IHBlZXJfcGlkIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgdW5zaWduZWQgaW50IGNvcHlfcmFuZ2UgX19yZWFkX21vc3RseTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcXVldWVfdG90YWw7CkBAIC03MywxMCArNzMsMTAgQEAKIAkJYnJlYWs7CiAKIAljYXNlIElQUV9DT1BZX1BBQ0tFVDoKLQkJY29weV9tb2RlID0gbW9kZTsKKwkJaWYgKHJhbmdlID4gMHhGRkZGKQorCQkJcmFuZ2UgPSAweEZGRkY7CiAJCWNvcHlfcmFuZ2UgPSByYW5nZTsKLQkJaWYgKGNvcHlfcmFuZ2UgPiAweEZGRkYpCi0JCQljb3B5X3JhbmdlID0gMHhGRkZGOworCQljb3B5X21vZGUgPSBtb2RlOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0xMDIsNyArMTAyLDcgQEAKIHsKIAlzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5ID0gTlVMTCwgKmk7CiAKLQl3cml0ZV9sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnF1ZXVlX2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpLCAmcXVldWVfbGlzdCwgbGlzdCkgewogCQlpZiAoKHVuc2lnbmVkIGxvbmcpaSA9PSBpZCkgewpAQCAtMTE2LDcgKzExNiw3IEBACiAJCXF1ZXVlX3RvdGFsLS07CiAJfQogCi0Jd3JpdGVfdW5sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcXVldWVfbG9jayk7CiAJcmV0dXJuIGVudHJ5OwogfQogCkBAIC0xMzcsOSArMTM3LDkgQEAKIHN0YXRpYyB2b2lkCiBpcHFfZmx1c2goaXBxX2NtcGZuIGNtcGZuLCB1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jd3JpdGVfbG9ja19iaCgmcXVldWVfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKIAlfX2lwcV9mbHVzaChjbXBmbiwgZGF0YSk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcXVldWVfbG9jayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCkBAIC0xNTMsOSArMTUzLDcgQEAKIAlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKIAlzdHJ1Y3QgdGltZXZhbCB0djsKIAotCXJlYWRfbG9ja19iaCgmcXVldWVfbG9jayk7Ci0KLQlzd2l0Y2ggKGNvcHlfbW9kZSkgeworCXN3aXRjaCAoQUNDRVNTX09OQ0UoY29weV9tb2RlKSkgewogCWNhc2UgSVBRX0NPUFlfTUVUQToKIAljYXNlIElQUV9DT1BZX05PTkU6CiAJCXNpemUgPSBOTE1TR19TUEFDRShzaXplb2YoKnBtc2cpKTsKQEAgLTE2MywyNiArMTYxLDIxIEBACiAKIAljYXNlIElQUV9DT1BZX1BBQ0tFVDoKIAkJaWYgKGVudHJ5LT5za2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMICYmCi0JCSAgICAoKmVycnAgPSBza2JfY2hlY2tzdW1faGVscChlbnRyeS0+c2tiKSkpIHsKLQkJCXJlYWRfdW5sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKKwkJICAgICgqZXJycCA9IHNrYl9jaGVja3N1bV9oZWxwKGVudHJ5LT5za2IpKSkKIAkJCXJldHVybiBOVUxMOwotCQl9Ci0JCWlmIChjb3B5X3JhbmdlID09IDAgfHwgY29weV9yYW5nZSA+IGVudHJ5LT5za2ItPmxlbikKKworCQlkYXRhX2xlbiA9IEFDQ0VTU19PTkNFKGNvcHlfcmFuZ2UpOworCQlpZiAoZGF0YV9sZW4gPT0gMCB8fCBkYXRhX2xlbiA+IGVudHJ5LT5za2ItPmxlbikKIAkJCWRhdGFfbGVuID0gZW50cnktPnNrYi0+bGVuOwotCQllbHNlCi0JCQlkYXRhX2xlbiA9IGNvcHlfcmFuZ2U7CiAKIAkJc2l6ZSA9IE5MTVNHX1NQQUNFKHNpemVvZigqcG1zZykgKyBkYXRhX2xlbik7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKIAkJKmVycnAgPSAtRUlOVkFMOwotCQlyZWFkX3VubG9ja19iaCgmcXVldWVfbG9jayk7CiAJCXJldHVybiBOVUxMOwogCX0KIAotCXJlYWRfdW5sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKLQogCXNrYiA9IGFsbG9jX3NrYihzaXplLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikKIAkJZ290byBubG1zZ19mYWlsdXJlOwpAQCAtMjQyLDcgKzIzNSw3IEBACiAJaWYgKG5za2IgPT0gTlVMTCkKIAkJcmV0dXJuIHN0YXR1czsKIAotCXdyaXRlX2xvY2tfYmgoJnF1ZXVlX2xvY2spOworCXNwaW5fbG9ja19iaCgmcXVldWVfbG9jayk7CiAKIAlpZiAoIXBlZXJfcGlkKQogCQlnb3RvIGVycl9vdXRfZnJlZV9uc2tiOwpAQCAtMjY2LDE0ICsyNTksMTQgQEAKIAogCV9faXBxX2VucXVldWVfZW50cnkoZW50cnkpOwogCi0Jd3JpdGVfdW5sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcXVldWVfbG9jayk7CiAJcmV0dXJuIHN0YXR1czsKIAogZXJyX291dF9mcmVlX25za2I6CiAJa2ZyZWVfc2tiKG5za2IpOwogCiBlcnJfb3V0X3VubG9jazoKLQl3cml0ZV91bmxvY2tfYmgoJnF1ZXVlX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0zNDIsOSArMzM1LDkgQEAKIHsKIAlpbnQgc3RhdHVzOwogCi0Jd3JpdGVfbG9ja19iaCgmcXVldWVfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKIAlzdGF0dXMgPSBfX2lwcV9zZXRfbW9kZShtb2RlLCByYW5nZSk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcXVldWVfbG9jayk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtNDQxLDExICs0MzQsMTEgQEAKIAlpZiAoc2VjdXJpdHlfbmV0bGlua19yZWN2KHNrYiwgQ0FQX05FVF9BRE1JTikpCiAJCVJDVl9TS0JfRkFJTCgtRVBFUk0pOwogCi0Jd3JpdGVfbG9ja19iaCgmcXVldWVfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKIAogCWlmIChwZWVyX3BpZCkgewogCQlpZiAocGVlcl9waWQgIT0gcGlkKSB7Ci0JCQl3cml0ZV91bmxvY2tfYmgoJnF1ZXVlX2xvY2spOworCQkJc3Bpbl91bmxvY2tfYmgoJnF1ZXVlX2xvY2spOwogCQkJUkNWX1NLQl9GQUlMKC1FQlVTWSk7CiAJCX0KIAl9IGVsc2UgewpAQCAtNDUzLDcgKzQ0Niw3IEBACiAJCXBlZXJfcGlkID0gcGlkOwogCX0KIAotCXdyaXRlX3VubG9ja19iaCgmcXVldWVfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnF1ZXVlX2xvY2spOwogCiAJc3RhdHVzID0gaXBxX3JlY2VpdmVfcGVlcihOTE1TR19EQVRBKG5saCksIHR5cGUsCiAJCQkJICBubG1zZ2xlbiAtIE5MTVNHX0xFTkdUSCgwKSk7CkBAIC00OTgsMTAgKzQ5MSwxMCBAQAogCXN0cnVjdCBuZXRsaW5rX25vdGlmeSAqbiA9IHB0cjsKIAogCWlmIChldmVudCA9PSBORVRMSU5LX1VSRUxFQVNFICYmIG4tPnByb3RvY29sID09IE5FVExJTktfSVA2X0ZXKSB7Ci0JCXdyaXRlX2xvY2tfYmgoJnF1ZXVlX2xvY2spOworCQlzcGluX2xvY2tfYmgoJnF1ZXVlX2xvY2spOwogCQlpZiAoKG5ldF9lcShuLT5uZXQsICZpbml0X25ldCkpICYmIChuLT5waWQgPT0gcGVlcl9waWQpKQogCQkJX19pcHFfcmVzZXQoKTsKLQkJd3JpdGVfdW5sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnF1ZXVlX2xvY2spOwogCX0KIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CkBAIC01MjgsNyArNTIxLDcgQEAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogc3RhdGljIGludCBpcDZfcXVldWVfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JcmVhZF9sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnF1ZXVlX2xvY2spOwogCiAJc2VxX3ByaW50ZihtLAogCQkgICAgICAiUGVlciBQSUQgICAgICAgICAgOiAlZFxuIgpAQCAtNTQ2LDcgKzUzOSw3IEBACiAJCSAgICAgIHF1ZXVlX2Ryb3BwZWQsCiAJCSAgICAgIHF1ZXVlX3VzZXJfZHJvcHBlZCk7CiAKLQlyZWFkX3VubG9ja19iaCgmcXVldWVfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnF1ZXVlX2xvY2spOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwppbmRleCA5ZDJkNjhmLi41MzU5ZWY0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKQEAgLTM4Nyw5ICszODcsNyBAQAogCQkJCWdvdG8gbm9fbWF0Y2g7CiAJCX0KIAotCQlBRERfQ09VTlRFUihlLT5jb3VudGVycywKLQkJCSAgICBudG9ocyhpcHY2X2hkcihza2IpLT5wYXlsb2FkX2xlbikgKwotCQkJICAgIHNpemVvZihzdHJ1Y3QgaXB2NmhkciksIDEpOworCQlBRERfQ09VTlRFUihlLT5jb3VudGVycywgc2tiLT5sZW4sIDEpOwogCiAJCXQgPSBpcDZ0X2dldF90YXJnZXRfYyhlKTsKIAkJSVBfTkZfQVNTRVJUKHQtPnUua2VybmVsLnRhcmdldCk7CkBAIC04OTksNyArODk3LDcgQEAKIAlzdHJ1Y3QgaXA2dF9lbnRyeSAqaXRlcjsKIAl1bnNpZ25lZCBpbnQgY3B1OwogCXVuc2lnbmVkIGludCBpOwotCXVuc2lnbmVkIGludCBjdXJjcHU7CisJdW5zaWduZWQgaW50IGN1cmNwdSA9IGdldF9jcHUoKTsKIAogCS8qIEluc3RlYWQgb2YgY2xlYXJpbmcgKGJ5IGEgcHJldmlvdXMgY2FsbCB0byBtZW1zZXQoKSkKIAkgKiB0aGUgY291bnRlcnMgYW5kIHVzaW5nIGFkZHMsIHdlIHNldCB0aGUgY291bnRlcnMKQEAgLTkwOSwxNCArOTA3LDE2IEBACiAJICogaWYgbmV3IHNvZnRpcnEgd2VyZSB0byBydW4gYW5kIGNhbGwgaXB0X2RvX3RhYmxlCiAJICovCiAJbG9jYWxfYmhfZGlzYWJsZSgpOwotCWN1cmNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQogCWkgPSAwOwogCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgdC0+ZW50cmllc1tjdXJjcHVdLCB0LT5zaXplKSB7CiAJCVNFVF9DT1VOVEVSKGNvdW50ZXJzW2ldLCBpdGVyLT5jb3VudGVycy5iY250LAogCQkJICAgIGl0ZXItPmNvdW50ZXJzLnBjbnQpOwogCQkrK2k7CiAJfQorCWxvY2FsX2JoX2VuYWJsZSgpOworCS8qIFByb2Nlc3NpbmcgY291bnRlcnMgZnJvbSBvdGhlciBjcHVzLCB3ZSBjYW4gbGV0IGJvdHRvbSBoYWxmIGVuYWJsZWQsCisJICogKHByZWVtcHRpb24gaXMgZGlzYWJsZWQpCisJICovCiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCWlmIChjcHUgPT0gY3VyY3B1KQpAQCAtOTMwLDcgKzkzMCw3IEBACiAJCX0KIAkJeHRfaW5mb193cnVubG9jayhjcHUpOwogCX0KLQlsb2NhbF9iaF9lbmFibGUoKTsKKwlwdXRfY3B1KCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgeHRfY291bnRlcnMgKmFsbG9jX2NvdW50ZXJzKGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqdGFibGUpCkBAIC05NDMsNyArOTQzLDcgQEAKIAkgICAob3RoZXIgdGhhbiBjb21lZnJvbSwgd2hpY2ggdXNlcnNwYWNlIGRvZXNuJ3QgY2FyZQogCSAgIGFib3V0KS4gKi8KIAljb3VudGVyc2l6ZSA9IHNpemVvZihzdHJ1Y3QgeHRfY291bnRlcnMpICogcHJpdmF0ZS0+bnVtYmVyOwotCWNvdW50ZXJzID0gdm1hbGxvY19ub2RlKGNvdW50ZXJzaXplLCBudW1hX25vZGVfaWQoKSk7CisJY291bnRlcnMgPSB2bWFsbG9jKGNvdW50ZXJzaXplKTsKIAogCWlmIChjb3VudGVycyA9PSBOVUxMKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKQEAgLTEyMTMsOCArMTIxMyw3IEBACiAJc3RydWN0IGlwNnRfZW50cnkgKml0ZXI7CiAKIAlyZXQgPSAwOwotCWNvdW50ZXJzID0gdm1hbGxvY19ub2RlKG51bV9jb3VudGVycyAqIHNpemVvZihzdHJ1Y3QgeHRfY291bnRlcnMpLAotCQkJCW51bWFfbm9kZV9pZCgpKTsKKwljb3VudGVycyA9IHZtYWxsb2MobnVtX2NvdW50ZXJzICogc2l6ZW9mKHN0cnVjdCB4dF9jb3VudGVycykpOwogCWlmICghY291bnRlcnMpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC0xMzY4LDcgKzEzNjcsNyBAQAogCWlmIChsZW4gIT0gc2l6ZSArIG51bV9jb3VudGVycyAqIHNpemVvZihzdHJ1Y3QgeHRfY291bnRlcnMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXBhZGRjID0gdm1hbGxvY19ub2RlKGxlbiAtIHNpemUsIG51bWFfbm9kZV9pZCgpKTsKKwlwYWRkYyA9IHZtYWxsb2MobGVuIC0gc2l6ZSk7CiAJaWYgKCFwYWRkYykKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTE9HLmMKaW5kZXggYWY0ZWUxMS4uMGEwN2FlNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTE9HLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTE9HLmMKQEAgLTM3Myw2ICszNzMsNTYgQEAKIAkJcHJpbnRrKCJNQVJLPTB4JXggIiwgc2tiLT5tYXJrKTsKIH0KIAorc3RhdGljIHZvaWQgZHVtcF9tYWNfaGVhZGVyKGNvbnN0IHN0cnVjdCBuZl9sb2dpbmZvICppbmZvLAorCQkJICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0+ZGV2OworCXVuc2lnbmVkIGludCBsb2dmbGFncyA9IDA7CisKKwlpZiAoaW5mby0+dHlwZSA9PSBORl9MT0dfVFlQRV9MT0cpCisJCWxvZ2ZsYWdzID0gaW5mby0+dS5sb2cubG9nZmxhZ3M7CisKKwlpZiAoIShsb2dmbGFncyAmIElQNlRfTE9HX01BQ0RFQ09ERSkpCisJCWdvdG8gZmFsbGJhY2s7CisKKwlzd2l0Y2ggKGRldi0+dHlwZSkgeworCWNhc2UgQVJQSFJEX0VUSEVSOgorCQlwcmludGsoIk1BQ1NSQz0lcE0gTUFDRFNUPSVwTSBNQUNQUk9UTz0lMDR4ICIsCisJCSAgICAgICBldGhfaGRyKHNrYiktPmhfc291cmNlLCBldGhfaGRyKHNrYiktPmhfZGVzdCwKKwkJICAgICAgIG50b2hzKGV0aF9oZHIoc2tiKS0+aF9wcm90bykpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCitmYWxsYmFjazoKKwlwcmludGsoIk1BQz0iKTsKKwlpZiAoZGV2LT5oYXJkX2hlYWRlcl9sZW4gJiYKKwkgICAgc2tiLT5tYWNfaGVhZGVyICE9IHNrYi0+bmV0d29ya19oZWFkZXIpIHsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHNrYl9tYWNfaGVhZGVyKHNrYik7CisJCXVuc2lnbmVkIGludCBsZW4gPSBkZXYtPmhhcmRfaGVhZGVyX2xlbjsKKwkJdW5zaWduZWQgaW50IGk7CisKKwkJaWYgKGRldi0+dHlwZSA9PSBBUlBIUkRfU0lUICYmCisJCSAgICAocCAtPSBFVEhfSExFTikgPCBza2ItPmhlYWQpCisJCQlwID0gTlVMTDsKKworCQlpZiAocCAhPSBOVUxMKSB7CisJCQlwcmludGsoIiUwMngiLCAqcCsrKTsKKwkJCWZvciAoaSA9IDE7IGkgPCBsZW47IGkrKykKKwkJCQlwcmludGsoIjolMDJ4IiwgcFtpXSk7CisJCX0KKwkJcHJpbnRrKCIgIik7CisKKwkJaWYgKGRldi0+dHlwZSA9PSBBUlBIUkRfU0lUKSB7CisJCQljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9CisJCQkJKHN0cnVjdCBpcGhkciAqKXNrYl9tYWNfaGVhZGVyKHNrYik7CisJCQlwcmludGsoIlRVTk5FTD0lcEk0LT4lcEk0ICIsICZpcGgtPnNhZGRyLCAmaXBoLT5kYWRkcik7CisJCX0KKwl9IGVsc2UKKwkJcHJpbnRrKCIgIik7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbmZfbG9naW5mbyBkZWZhdWx0X2xvZ2luZm8gPSB7CiAJLnR5cGUJPSBORl9MT0dfVFlQRV9MT0csCiAJLnUgPSB7CkBAIC00MDAsMzUgKzQ1MCwxMCBAQAogCQlwcmVmaXgsCiAJCWluID8gaW4tPm5hbWUgOiAiIiwKIAkJb3V0ID8gb3V0LT5uYW1lIDogIiIpOwotCWlmIChpbiAmJiAhb3V0KSB7Ci0JCXVuc2lnbmVkIGludCBsZW47Ci0JCS8qIE1BQyBsb2dnaW5nIGZvciBpbnB1dCBjaGFpbiBvbmx5LiAqLwotCQlwcmludGsoIk1BQz0iKTsKLQkJaWYgKHNrYi0+ZGV2ICYmIChsZW4gPSBza2ItPmRldi0+aGFyZF9oZWFkZXJfbGVuKSAmJgotCQkgICAgc2tiLT5tYWNfaGVhZGVyICE9IHNrYi0+bmV0d29ya19oZWFkZXIpIHsKLQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBza2JfbWFjX2hlYWRlcihza2IpOwotCQkJaW50IGk7CiAKLQkJCWlmIChza2ItPmRldi0+dHlwZSA9PSBBUlBIUkRfU0lUICYmCi0JCQkgICAgKHAgLT0gRVRIX0hMRU4pIDwgc2tiLT5oZWFkKQotCQkJCXAgPSBOVUxMOwotCi0JCQlpZiAocCAhPSBOVUxMKSB7Ci0JCQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotCQkJCQlwcmludGsoIiUwMnglcyIsIHBbaV0sCi0JCQkJCSAgICAgICBpID09IGxlbiAtIDEgPyAiIiA6ICI6Iik7Ci0JCQl9Ci0JCQlwcmludGsoIiAiKTsKLQotCQkJaWYgKHNrYi0+ZGV2LT50eXBlID09IEFSUEhSRF9TSVQpIHsKLQkJCQljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9Ci0JCQkJCShzdHJ1Y3QgaXBoZHIgKilza2JfbWFjX2hlYWRlcihza2IpOwotCQkJCXByaW50aygiVFVOTkVMPSVwSTQtPiVwSTQgIiwKLQkJCQkgICAgICAgJmlwaC0+c2FkZHIsICZpcGgtPmRhZGRyKTsKLQkJCX0KLQkJfSBlbHNlCi0JCQlwcmludGsoIiAiKTsKLQl9CisJLyogTUFDIGxvZ2dpbmcgZm9yIGlucHV0IHBhdGggb25seS4gKi8KKwlpZiAoaW4gJiYgIW91dCkKKwkJZHVtcF9tYWNfaGVhZGVyKGxvZ2luZm8sIHNrYik7CiAKIAlkdW1wX3BhY2tldChsb2dpbmZvLCBza2IsIHNrYl9uZXR3b3JrX29mZnNldChza2IpLCAxKTsKIAlwcmludGsoIlxuIik7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYwppbmRleCA5YmU4MTc3Li4xZGYzYzhiIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKQEAgLTIwOCw3ICsyMDgsNyBAQAogCXR5cGUgPSBpY21wNmgtPmljbXA2X3R5cGUgLSAxMzA7CiAJaWYgKHR5cGUgPj0gMCAmJiB0eXBlIDwgc2l6ZW9mKG5vY3RfdmFsaWRfbmV3KSAmJgogCSAgICBub2N0X3ZhbGlkX25ld1t0eXBlXSkgewotCQlza2ItPm5mY3QgPSAmbmZfY29ubnRyYWNrX3VudHJhY2tlZC5jdF9nZW5lcmFsOworCQlza2ItPm5mY3QgPSAmbmZfY3RfdW50cmFja2VkX2dldCgpLT5jdF9nZW5lcmFsOwogCQlza2ItPm5mY3RpbmZvID0gSVBfQ1RfTkVXOwogCQluZl9jb25udHJhY2tfZ2V0KHNrYi0+bmZjdCk7CiAJCXJldHVybiBORl9BQ0NFUFQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3JlYXNtLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3JlYXNtLmMKaW5kZXggNmZiODkwMS4uMTNlZjViYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19yZWFzbS5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYwpAQCAtMTE0LDEwICsxMTQsOCBAQAogfQogCiAvKiBNZW1vcnkgVHJhY2tpbmcgRnVuY3Rpb25zLiAqLwotc3RhdGljIGlubGluZSB2b2lkIGZyYWdfa2ZyZWVfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCAqd29yaykKK3N0YXRpYyB2b2lkIGZyYWdfa2ZyZWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaWYgKHdvcmspCi0JCSp3b3JrIC09IHNrYi0+dHJ1ZXNpemU7CiAJYXRvbWljX3N1Yihza2ItPnRydWVzaXplLCAmbmZfaW5pdF9mcmFncy5tZW0pOwogCW5mX3NrYl9mcmVlKHNrYik7CiAJa2ZyZWVfc2tiKHNrYik7CkBAIC0yMDEsNyArMTk5LDcgQEAKIAlpbnQgb2Zmc2V0LCBlbmQ7CiAKIAlpZiAoZnEtPnEubGFzdF9pbiAmIElORVRfRlJBR19DT01QTEVURSkgewotCQlwcl9kZWJ1ZygiQWxscmVhZHkgY29tcGxldGVkXG4iKTsKKwkJcHJfZGVidWcoIkFscmVhZHkgY29tcGxldGVkXG4iKTsKIAkJZ290byBlcnI7CiAJfQogCkBAIC0yNzEsNiArMjY5LDExIEBACiAJICogaW4gdGhlIGNoYWluIG9mIGZyYWdtZW50cyBzbyBmYXIuICBXZSBtdXN0IGtub3cgd2hlcmUgdG8gcHV0CiAJICogdGhpcyBmcmFnbWVudCwgcmlnaHQ/CiAJICovCisJcHJldiA9IGZxLT5xLmZyYWdtZW50c190YWlsOworCWlmICghcHJldiB8fCBORkNUX0ZSQUc2X0NCKHByZXYpLT5vZmZzZXQgPCBvZmZzZXQpIHsKKwkJbmV4dCA9IE5VTEw7CisJCWdvdG8gZm91bmQ7CisJfQogCXByZXYgPSBOVUxMOwogCWZvciAobmV4dCA9IGZxLT5xLmZyYWdtZW50czsgbmV4dCAhPSBOVUxMOyBuZXh0ID0gbmV4dC0+bmV4dCkgewogCQlpZiAoTkZDVF9GUkFHNl9DQihuZXh0KS0+b2Zmc2V0ID49IG9mZnNldCkKQEAgLTI3OCw2ICsyODEsNyBAQAogCQlwcmV2ID0gbmV4dDsKIAl9CiAKK2ZvdW5kOgogCS8qIFdlIGZvdW5kIHdoZXJlIHRvIHB1dCB0aGlzIG9uZS4gIENoZWNrIGZvciBvdmVybGFwIHdpdGgKIAkgKiBwcmVjZWRpbmcgZnJhZ21lbnQsIGFuZCwgaWYgbmVlZGVkLCBhbGlnbiB0aGluZ3Mgc28gdGhhdAogCSAqIGFueSBvdmVybGFwcyBhcmUgZWxpbWluYXRlZC4KQEAgLTMzNSw3ICszMzksNyBAQAogCQkJCWZxLT5xLmZyYWdtZW50cyA9IG5leHQ7CiAKIAkJCWZxLT5xLm1lYXQgLT0gZnJlZV9pdC0+bGVuOwotCQkJZnJhZ19rZnJlZV9za2IoZnJlZV9pdCwgTlVMTCk7CisJCQlmcmFnX2tmcmVlX3NrYihmcmVlX2l0KTsKIAkJfQogCX0KIApAQCAtMzQzLDYgKzM0Nyw4IEBACiAKIAkvKiBJbnNlcnQgdGhpcyBmcmFnbWVudCBpbiB0aGUgY2hhaW4gb2YgZnJhZ21lbnRzLiAqLwogCXNrYi0+bmV4dCA9IG5leHQ7CisJaWYgKCFuZXh0KQorCQlmcS0+cS5mcmFnbWVudHNfdGFpbCA9IHNrYjsKIAlpZiAocHJldikKIAkJcHJldi0+bmV4dCA9IHNrYjsKIAllbHNlCkBAIC00NDIsNyArNDQ4LDYgQEAKIAlza2Jfc2hpbmZvKGhlYWQpLT5mcmFnX2xpc3QgPSBoZWFkLT5uZXh0OwogCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKGhlYWQpOwogCXNrYl9wdXNoKGhlYWQsIGhlYWQtPmRhdGEgLSBza2JfbmV0d29ya19oZWFkZXIoaGVhZCkpOwotCWF0b21pY19zdWIoaGVhZC0+dHJ1ZXNpemUsICZuZl9pbml0X2ZyYWdzLm1lbSk7CiAKIAlmb3IgKGZwPWhlYWQtPm5leHQ7IGZwOyBmcCA9IGZwLT5uZXh0KSB7CiAJCWhlYWQtPmRhdGFfbGVuICs9IGZwLT5sZW47CkBAIC00NTIsOCArNDU3LDggQEAKIAkJZWxzZSBpZiAoaGVhZC0+aXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKQogCQkJaGVhZC0+Y3N1bSA9IGNzdW1fYWRkKGhlYWQtPmNzdW0sIGZwLT5jc3VtKTsKIAkJaGVhZC0+dHJ1ZXNpemUgKz0gZnAtPnRydWVzaXplOwotCQlhdG9taWNfc3ViKGZwLT50cnVlc2l6ZSwgJm5mX2luaXRfZnJhZ3MubWVtKTsKIAl9CisJYXRvbWljX3N1YihoZWFkLT50cnVlc2l6ZSwgJm5mX2luaXRfZnJhZ3MubWVtKTsKIAogCWhlYWQtPm5leHQgPSBOVUxMOwogCWhlYWQtPmRldiA9IGRldjsKQEAgLTQ2Nyw2ICs0NzIsNyBAQAogCQkJCQkgIGhlYWQtPmNzdW0pOwogCiAJZnEtPnEuZnJhZ21lbnRzID0gTlVMTDsKKwlmcS0+cS5mcmFnbWVudHNfdGFpbCA9IE5VTEw7CiAKIAkvKiBhbGwgb3JpZ2luYWwgc2ticyBhcmUgbGlua2VkIGludG8gdGhlIE5GQ1RfRlJBRzZfQ0IoaGVhZCkub3JpZyAqLwogCWZwID0gc2tiX3NoaW5mbyhoZWFkKS0+ZnJhZ19saXN0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcHJvYy5jIGIvbmV0L2lwdjYvcHJvYy5jCmluZGV4IDU2Njc5OGQuLmQwODJlYWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3Byb2MuYworKysgYi9uZXQvaXB2Ni9wcm9jLmMKQEAgLTE3NCwxNyArMTc0LDI4IEBACiAJCQkJY29uc3Qgc3RydWN0IHNubXBfbWliICppdGVtbGlzdCkKIHsKIAlpbnQgaTsKLQlmb3IgKGk9MDsgaXRlbWxpc3RbaV0ubmFtZTsgaSsrKQorCisJZm9yIChpID0gMDsgaXRlbWxpc3RbaV0ubmFtZTsgaSsrKQogCQlzZXFfcHJpbnRmKHNlcSwgIiUtMzJzXHQlbHVcbiIsIGl0ZW1saXN0W2ldLm5hbWUsCiAJCQkgICBzbm1wX2ZvbGRfZmllbGQobWliLCBpdGVtbGlzdFtpXS5lbnRyeSkpOwogfQogCitzdGF0aWMgdm9pZCBzbm1wNl9zZXFfc2hvd19pdGVtNjQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgX19wZXJjcHUgKiptaWIsCisJCQkJICBjb25zdCBzdHJ1Y3Qgc25tcF9taWIgKml0ZW1saXN0LCBzaXplX3Qgc3luY3BvZmYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpdGVtbGlzdFtpXS5uYW1lOyBpKyspCisJCXNlcV9wcmludGYoc2VxLCAiJS0zMnNcdCVsbHVcbiIsIGl0ZW1saXN0W2ldLm5hbWUsCisJCQkgICBzbm1wX2ZvbGRfZmllbGQ2NChtaWIsIGl0ZW1saXN0W2ldLmVudHJ5LCBzeW5jcG9mZikpOworfQorCiBzdGF0aWMgaW50IHNubXA2X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewogCXN0cnVjdCBuZXQgKm5ldCA9IChzdHJ1Y3QgbmV0ICopc2VxLT5wcml2YXRlOwogCi0Jc25tcDZfc2VxX3Nob3dfaXRlbShzZXEsICh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLmlwdjZfc3RhdGlzdGljcywKLQkJCSAgICBzbm1wNl9pcHN0YXRzX2xpc3QpOworCXNubXA2X3NlcV9zaG93X2l0ZW02NChzZXEsICh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLmlwdjZfc3RhdGlzdGljcywKKwkJCSAgICBzbm1wNl9pcHN0YXRzX2xpc3QsIG9mZnNldG9mKHN0cnVjdCBpcHN0YXRzX21pYiwgc3luY3ApKTsKIAlzbm1wNl9zZXFfc2hvd19pdGVtKHNlcSwgKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIuaWNtcHY2X3N0YXRpc3RpY3MsCiAJCQkgICAgc25tcDZfaWNtcDZfbGlzdCk7CiAJc25tcDZfc2VxX3Nob3dfaWNtcHY2bXNnKHNlcSwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3Jhdy5jIGIvbmV0L2lwdjYvcmF3LmMKaW5kZXggNGE0ZGNiZS4uZTY3NzkzNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcmF3LmMKKysrIGIvbmV0L2lwdjYvcmF3LmMKQEAgLTYwMiwzMSArNjAyLDMzIEBACiB9CiAKIHN0YXRpYyBpbnQgcmF3djZfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCB2b2lkICpmcm9tLCBpbnQgbGVuZ3RoLAotCQkJc3RydWN0IGZsb3dpICpmbCwgc3RydWN0IHJ0Nl9pbmZvICpydCwKKwkJCXN0cnVjdCBmbG93aSAqZmwsIHN0cnVjdCBkc3RfZW50cnkgKipkc3RwLAogCQkJdW5zaWduZWQgaW50IGZsYWdzKQogewogCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKIAlzdHJ1Y3QgaXB2NmhkciAqaXBoOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGVycjsKKwlzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gKHN0cnVjdCBydDZfaW5mbyAqKSpkc3RwOwogCi0JaWYgKGxlbmd0aCA+IHJ0LT51LmRzdC5kZXYtPm10dSkgewotCQlpcHY2X2xvY2FsX2Vycm9yKHNrLCBFTVNHU0laRSwgZmwsIHJ0LT51LmRzdC5kZXYtPm10dSk7CisJaWYgKGxlbmd0aCA+IHJ0LT5kc3QuZGV2LT5tdHUpIHsKKwkJaXB2Nl9sb2NhbF9lcnJvcihzaywgRU1TR1NJWkUsIGZsLCBydC0+ZHN0LmRldi0+bXR1KTsKIAkJcmV0dXJuIC1FTVNHU0laRTsKIAl9CiAJaWYgKGZsYWdzJk1TR19QUk9CRSkKIAkJZ290byBvdXQ7CiAKIAlza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLAotCQkJCSAgbGVuZ3RoICsgTExfQUxMT0NBVEVEX1NQQUNFKHJ0LT51LmRzdC5kZXYpICsgMTUsCisJCQkJICBsZW5ndGggKyBMTF9BTExPQ0FURURfU1BBQ0UocnQtPmRzdC5kZXYpICsgMTUsCiAJCQkJICBmbGFncyAmIE1TR19ET05UV0FJVCwgJmVycik7CiAJaWYgKHNrYiA9PSBOVUxMKQogCQlnb3RvIGVycm9yOwotCXNrYl9yZXNlcnZlKHNrYiwgTExfUkVTRVJWRURfU1BBQ0UocnQtPnUuZHN0LmRldikpOworCXNrYl9yZXNlcnZlKHNrYiwgTExfUkVTRVJWRURfU1BBQ0UocnQtPmRzdC5kZXYpKTsKIAogCXNrYi0+cHJpb3JpdHkgPSBzay0+c2tfcHJpb3JpdHk7CiAJc2tiLT5tYXJrID0gc2stPnNrX21hcms7Ci0Jc2tiX2RzdF9zZXQoc2tiLCBkc3RfY2xvbmUoJnJ0LT51LmRzdCkpOworCXNrYl9kc3Rfc2V0KHNrYiwgJnJ0LT5kc3QpOworCSpkc3RwID0gTlVMTDsKIAogCXNrYl9wdXQoc2tiLCBsZW5ndGgpOwogCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwpAQCAtNjQxLDcgKzY0Myw3IEBACiAKIAlJUDZfVVBEX1BPX1NUQVRTKHNvY2tfbmV0KHNrKSwgcnQtPnJ0NmlfaWRldiwgSVBTVEFUU19NSUJfT1VULCBza2ItPmxlbik7CiAJZXJyID0gTkZfSE9PSyhORlBST1RPX0lQVjYsIE5GX0lORVRfTE9DQUxfT1VULCBza2IsIE5VTEwsCi0JCSAgICAgIHJ0LT51LmRzdC5kZXYsIGRzdF9vdXRwdXQpOworCQkgICAgICBydC0+ZHN0LmRldiwgZHN0X291dHB1dCk7CiAJaWYgKGVyciA+IDApCiAJCWVyciA9IG5ldF94bWl0X2Vycm5vKGVycik7CiAJaWYgKGVycikKQEAgLTcyNSw3ICs3MjcsNyBAQAogewogCXN0cnVjdCBpcHY2X3R4b3B0aW9ucyBvcHRfc3BhY2U7CiAJc3RydWN0IHNvY2thZGRyX2luNiAqIHNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSBtc2ctPm1zZ19uYW1lOwotCXN0cnVjdCBpbjZfYWRkciAqZGFkZHIsICpmaW5hbF9wID0gTlVMTCwgZmluYWw7CisJc3RydWN0IGluNl9hZGRyICpkYWRkciwgKmZpbmFsX3AsIGZpbmFsOwogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CiAJc3RydWN0IHJhdzZfc29jayAqcnAgPSByYXc2X3NrKHNrKTsKQEAgLTg0NywxMyArODQ5LDcgQEAKIAlpZiAoaXB2Nl9hZGRyX2FueSgmZmwuZmw2X3NyYykgJiYgIWlwdjZfYWRkcl9hbnkoJm5wLT5zYWRkcikpCiAJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfc3JjLCAmbnAtPnNhZGRyKTsKIAotCS8qIG1lcmdlIGlwNl9idWlsZF94bWl0IGZyb20gaXA2X291dHB1dCAqLwotCWlmIChvcHQgJiYgb3B0LT5zcmNydCkgewotCQlzdHJ1Y3QgcnQwX2hkciAqcnQwID0gKHN0cnVjdCBydDBfaGRyICopIG9wdC0+c3JjcnQ7Ci0JCWlwdjZfYWRkcl9jb3B5KCZmaW5hbCwgJmZsLmZsNl9kc3QpOwotCQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgcnQwLT5hZGRyKTsKLQkJZmluYWxfcCA9ICZmaW5hbDsKLQl9CisJZmluYWxfcCA9IGZsNl91cGRhdGVfZHN0KCZmbCwgb3B0LCAmZmluYWwpOwogCiAJaWYgKCFmbC5vaWYgJiYgaXB2Nl9hZGRyX2lzX211bHRpY2FzdCgmZmwuZmw2X2RzdCkpCiAJCWZsLm9pZiA9IG5wLT5tY2FzdF9vaWY7CkBAIC04OTIsOSArODg4LDkgQEAKIAkJZ290byBkb19jb25maXJtOwogCiBiYWNrX2Zyb21fY29uZmlybToKLQlpZiAoaW5ldC0+aGRyaW5jbCkgewotCQllcnIgPSByYXd2Nl9zZW5kX2hkcmluYyhzaywgbXNnLT5tc2dfaW92LCBsZW4sICZmbCwgKHN0cnVjdCBydDZfaW5mbyopZHN0LCBtc2ctPm1zZ19mbGFncyk7Ci0JfSBlbHNlIHsKKwlpZiAoaW5ldC0+aGRyaW5jbCkKKwkJZXJyID0gcmF3djZfc2VuZF9oZHJpbmMoc2ssIG1zZy0+bXNnX2lvdiwgbGVuLCAmZmwsICZkc3QsIG1zZy0+bXNnX2ZsYWdzKTsKKwllbHNlIHsKIAkJbG9ja19zb2NrKHNrKTsKIAkJZXJyID0gaXA2X2FwcGVuZF9kYXRhKHNrLCBpcF9nZW5lcmljX2dldGZyYWcsIG1zZy0+bXNnX2lvdiwKIAkJCWxlbiwgMCwgaGxpbWl0LCB0Y2xhc3MsIG9wdCwgJmZsLCAoc3RydWN0IHJ0Nl9pbmZvKilkc3QsCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMgYi9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMKaW5kZXggNmQ0MjkyZi4uNTQ1YzQxNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcmVhc3NlbWJseS5jCisrKyBiL25ldC9pcHY2L3JlYXNzZW1ibHkuYwpAQCAtMTUwLDExICsxNTAsOCBAQAogRVhQT1JUX1NZTUJPTChpcDZfZnJhZ19tYXRjaCk7CiAKIC8qIE1lbW9yeSBUcmFja2luZyBGdW5jdGlvbnMuICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZnJhZ19rZnJlZV9za2Ioc3RydWN0IG5ldG5zX2ZyYWdzICpuZiwKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICp3b3JrKQorc3RhdGljIHZvaWQgZnJhZ19rZnJlZV9za2Ioc3RydWN0IG5ldG5zX2ZyYWdzICpuZiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpZiAod29yaykKLQkJKndvcmsgLT0gc2tiLT50cnVlc2l6ZTsKIAlhdG9taWNfc3ViKHNrYi0+dHJ1ZXNpemUsICZuZi0+bWVtKTsKIAlrZnJlZV9za2Ioc2tiKTsKIH0KQEAgLTMzNiw2ICszMzMsMTEgQEAKIAkgKiBpbiB0aGUgY2hhaW4gb2YgZnJhZ21lbnRzIHNvIGZhci4gIFdlIG11c3Qga25vdyB3aGVyZSB0byBwdXQKIAkgKiB0aGlzIGZyYWdtZW50LCByaWdodD8KIAkgKi8KKwlwcmV2ID0gZnEtPnEuZnJhZ21lbnRzX3RhaWw7CisJaWYgKCFwcmV2IHx8IEZSQUc2X0NCKHByZXYpLT5vZmZzZXQgPCBvZmZzZXQpIHsKKwkJbmV4dCA9IE5VTEw7CisJCWdvdG8gZm91bmQ7CisJfQogCXByZXYgPSBOVUxMOwogCWZvcihuZXh0ID0gZnEtPnEuZnJhZ21lbnRzOyBuZXh0ICE9IE5VTEw7IG5leHQgPSBuZXh0LT5uZXh0KSB7CiAJCWlmIChGUkFHNl9DQihuZXh0KS0+b2Zmc2V0ID49IG9mZnNldCkKQEAgLTM0Myw2ICszNDUsNyBAQAogCQlwcmV2ID0gbmV4dDsKIAl9CiAKK2ZvdW5kOgogCS8qIFdlIGZvdW5kIHdoZXJlIHRvIHB1dCB0aGlzIG9uZS4gIENoZWNrIGZvciBvdmVybGFwIHdpdGgKIAkgKiBwcmVjZWRpbmcgZnJhZ21lbnQsIGFuZCwgaWYgbmVlZGVkLCBhbGlnbiB0aGluZ3Mgc28gdGhhdAogCSAqIGFueSBvdmVybGFwcyBhcmUgZWxpbWluYXRlZC4KQEAgLTM5Miw3ICszOTUsNyBAQAogCQkJCWZxLT5xLmZyYWdtZW50cyA9IG5leHQ7CiAKIAkJCWZxLT5xLm1lYXQgLT0gZnJlZV9pdC0+bGVuOwotCQkJZnJhZ19rZnJlZV9za2IoZnEtPnEubmV0LCBmcmVlX2l0LCBOVUxMKTsKKwkJCWZyYWdfa2ZyZWVfc2tiKGZxLT5xLm5ldCwgZnJlZV9pdCk7CiAJCX0KIAl9CiAKQEAgLTQwMCw2ICs0MDMsOCBAQAogCiAJLyogSW5zZXJ0IHRoaXMgZnJhZ21lbnQgaW4gdGhlIGNoYWluIG9mIGZyYWdtZW50cy4gKi8KIAlza2ItPm5leHQgPSBuZXh0OworCWlmICghbmV4dCkKKwkJZnEtPnEuZnJhZ21lbnRzX3RhaWwgPSBza2I7CiAJaWYgKHByZXYpCiAJCXByZXYtPm5leHQgPSBza2I7CiAJZWxzZQpAQCAtNDY2LDYgKzQ3MSw4IEBACiAJCQlnb3RvIG91dF9vb207CiAKIAkJZnAtPm5leHQgPSBoZWFkLT5uZXh0OworCQlpZiAoIWZwLT5uZXh0KQorCQkJZnEtPnEuZnJhZ21lbnRzX3RhaWwgPSBmcDsKIAkJcHJldi0+bmV4dCA9IGZwOwogCiAJCXNrYl9tb3JwaChoZWFkLCBmcS0+cS5mcmFnbWVudHMpOwpAQCAtNTI0LDcgKzUzMSw2IEBACiAJc2tiX3NoaW5mbyhoZWFkKS0+ZnJhZ19saXN0ID0gaGVhZC0+bmV4dDsKIAlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihoZWFkKTsKIAlza2JfcHVzaChoZWFkLCBoZWFkLT5kYXRhIC0gc2tiX25ldHdvcmtfaGVhZGVyKGhlYWQpKTsKLQlhdG9taWNfc3ViKGhlYWQtPnRydWVzaXplLCAmZnEtPnEubmV0LT5tZW0pOwogCiAJZm9yIChmcD1oZWFkLT5uZXh0OyBmcDsgZnAgPSBmcC0+bmV4dCkgewogCQloZWFkLT5kYXRhX2xlbiArPSBmcC0+bGVuOwpAQCAtNTM0LDggKzU0MCw4IEBACiAJCWVsc2UgaWYgKGhlYWQtPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSkKIAkJCWhlYWQtPmNzdW0gPSBjc3VtX2FkZChoZWFkLT5jc3VtLCBmcC0+Y3N1bSk7CiAJCWhlYWQtPnRydWVzaXplICs9IGZwLT50cnVlc2l6ZTsKLQkJYXRvbWljX3N1YihmcC0+dHJ1ZXNpemUsICZmcS0+cS5uZXQtPm1lbSk7CiAJfQorCWF0b21pY19zdWIoaGVhZC0+dHJ1ZXNpemUsICZmcS0+cS5uZXQtPm1lbSk7CiAKIAloZWFkLT5uZXh0ID0gTlVMTDsKIAloZWFkLT5kZXYgPSBkZXY7CkBAIC01NTMsNiArNTU5LDcgQEAKIAlJUDZfSU5DX1NUQVRTX0JIKG5ldCwgX19pbjZfZGV2X2dldChkZXYpLCBJUFNUQVRTX01JQl9SRUFTTU9LUyk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJZnEtPnEuZnJhZ21lbnRzID0gTlVMTDsKKwlmcS0+cS5mcmFnbWVudHNfdGFpbCA9IE5VTEw7CiAJcmV0dXJuIDE7CiAKIG91dF9vdmVyc2l6ZToKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jCmluZGV4IDI1MmQ3NjEuLjhmMmQwNDAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JvdXRlLmMKKysrIGIvbmV0L2lwdjYvcm91dGUuYwpAQCAtMTI2LDE2ICsxMjYsMTQgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gaXA2X251bGxfZW50cnlfdGVtcGxhdGUgPSB7Ci0JLnUgPSB7Ci0JCS5kc3QgPSB7Ci0JCQkuX19yZWZjbnQJPSBBVE9NSUNfSU5JVCgxKSwKLQkJCS5fX3VzZQkJPSAxLAotCQkJLm9ic29sZXRlCT0gLTEsCi0JCQkuZXJyb3IJCT0gLUVORVRVTlJFQUNILAotCQkJLm1ldHJpY3MJPSB7IFtSVEFYX0hPUExJTUlUIC0gMV0gPSAyNTUsIH0sCi0JCQkuaW5wdXQJCT0gaXA2X3BrdF9kaXNjYXJkLAotCQkJLm91dHB1dAkJPSBpcDZfcGt0X2Rpc2NhcmRfb3V0LAotCQl9CisJLmRzdCA9IHsKKwkJLl9fcmVmY250CT0gQVRPTUlDX0lOSVQoMSksCisJCS5fX3VzZQkJPSAxLAorCQkub2Jzb2xldGUJPSAtMSwKKwkJLmVycm9yCQk9IC1FTkVUVU5SRUFDSCwKKwkJLm1ldHJpY3MJPSB7IFtSVEFYX0hPUExJTUlUIC0gMV0gPSAyNTUsIH0sCisJCS5pbnB1dAkJPSBpcDZfcGt0X2Rpc2NhcmQsCisJCS5vdXRwdXQJCT0gaXA2X3BrdF9kaXNjYXJkX291dCwKIAl9LAogCS5ydDZpX2ZsYWdzCT0gKFJURl9SRUpFQ1QgfCBSVEZfTk9ORVhUSE9QKSwKIAkucnQ2aV9wcm90b2NvbCAgPSBSVFBST1RfS0VSTkVMLApAQCAtMTQ5LDE2ICsxNDcsMTQgQEAKIHN0YXRpYyBpbnQgaXA2X3BrdF9wcm9oaWJpdF9vdXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIHN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gaXA2X3Byb2hpYml0X2VudHJ5X3RlbXBsYXRlID0gewotCS51ID0gewotCQkuZHN0ID0gewotCQkJLl9fcmVmY250CT0gQVRPTUlDX0lOSVQoMSksCi0JCQkuX191c2UJCT0gMSwKLQkJCS5vYnNvbGV0ZQk9IC0xLAotCQkJLmVycm9yCQk9IC1FQUNDRVMsCi0JCQkubWV0cmljcwk9IHsgW1JUQVhfSE9QTElNSVQgLSAxXSA9IDI1NSwgfSwKLQkJCS5pbnB1dAkJPSBpcDZfcGt0X3Byb2hpYml0LAotCQkJLm91dHB1dAkJPSBpcDZfcGt0X3Byb2hpYml0X291dCwKLQkJfQorCS5kc3QgPSB7CisJCS5fX3JlZmNudAk9IEFUT01JQ19JTklUKDEpLAorCQkuX191c2UJCT0gMSwKKwkJLm9ic29sZXRlCT0gLTEsCisJCS5lcnJvcgkJPSAtRUFDQ0VTLAorCQkubWV0cmljcwk9IHsgW1JUQVhfSE9QTElNSVQgLSAxXSA9IDI1NSwgfSwKKwkJLmlucHV0CQk9IGlwNl9wa3RfcHJvaGliaXQsCisJCS5vdXRwdXQJCT0gaXA2X3BrdF9wcm9oaWJpdF9vdXQsCiAJfSwKIAkucnQ2aV9mbGFncwk9IChSVEZfUkVKRUNUIHwgUlRGX05PTkVYVEhPUCksCiAJLnJ0NmlfcHJvdG9jb2wgID0gUlRQUk9UX0tFUk5FTCwKQEAgLTE2NywxNiArMTYzLDE0IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvIGlwNl9ibGtfaG9sZV9lbnRyeV90ZW1wbGF0ZSA9IHsKLQkudSA9IHsKLQkJLmRzdCA9IHsKLQkJCS5fX3JlZmNudAk9IEFUT01JQ19JTklUKDEpLAotCQkJLl9fdXNlCQk9IDEsCi0JCQkub2Jzb2xldGUJPSAtMSwKLQkJCS5lcnJvcgkJPSAtRUlOVkFMLAotCQkJLm1ldHJpY3MJPSB7IFtSVEFYX0hPUExJTUlUIC0gMV0gPSAyNTUsIH0sCi0JCQkuaW5wdXQJCT0gZHN0X2Rpc2NhcmQsCi0JCQkub3V0cHV0CQk9IGRzdF9kaXNjYXJkLAotCQl9CisJLmRzdCA9IHsKKwkJLl9fcmVmY250CT0gQVRPTUlDX0lOSVQoMSksCisJCS5fX3VzZQkJPSAxLAorCQkub2Jzb2xldGUJPSAtMSwKKwkJLmVycm9yCQk9IC1FSU5WQUwsCisJCS5tZXRyaWNzCT0geyBbUlRBWF9IT1BMSU1JVCAtIDFdID0gMjU1LCB9LAorCQkuaW5wdXQJCT0gZHN0X2Rpc2NhcmQsCisJCS5vdXRwdXQJCT0gZHN0X2Rpc2NhcmQsCiAJfSwKIAkucnQ2aV9mbGFncwk9IChSVEZfUkVKRUNUIHwgUlRGX05PTkVYVEhPUCksCiAJLnJ0NmlfcHJvdG9jb2wgID0gUlRQUk9UX0tFUk5FTCwKQEAgLTI0OSw3ICsyNDMsNyBAQAogCWlmICghb2lmICYmIGlwdjZfYWRkcl9hbnkoc2FkZHIpKQogCQlnb3RvIG91dDsKIAotCWZvciAoc3BydCA9IHJ0OyBzcHJ0OyBzcHJ0ID0gc3BydC0+dS5kc3QucnQ2X25leHQpIHsKKwlmb3IgKHNwcnQgPSBydDsgc3BydDsgc3BydCA9IHNwcnQtPmRzdC5ydDZfbmV4dCkgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3BydC0+cnQ2aV9kZXY7CiAKIAkJaWYgKG9pZikgewpAQCAtNDA3LDEwICs0MDEsMTAgQEAKIAogCW1hdGNoID0gTlVMTDsKIAlmb3IgKHJ0ID0gcnJfaGVhZDsgcnQgJiYgcnQtPnJ0NmlfbWV0cmljID09IG1ldHJpYzsKLQkgICAgIHJ0ID0gcnQtPnUuZHN0LnJ0Nl9uZXh0KQorCSAgICAgcnQgPSBydC0+ZHN0LnJ0Nl9uZXh0KQogCQltYXRjaCA9IGZpbmRfbWF0Y2gocnQsIG9pZiwgc3RyaWN0LCAmbXByaSwgbWF0Y2gpOwogCWZvciAocnQgPSBmbi0+bGVhZjsgcnQgJiYgcnQgIT0gcnJfaGVhZCAmJiBydC0+cnQ2aV9tZXRyaWMgPT0gbWV0cmljOwotCSAgICAgcnQgPSBydC0+dS5kc3QucnQ2X25leHQpCisJICAgICBydCA9IHJ0LT5kc3QucnQ2X25leHQpCiAJCW1hdGNoID0gZmluZF9tYXRjaChydCwgb2lmLCBzdHJpY3QsICZtcHJpLCBtYXRjaCk7CiAKIAlyZXR1cm4gbWF0Y2g7CkBAIC00MzIsNyArNDI2LDcgQEAKIAogCWlmICghbWF0Y2ggJiYKIAkgICAgKHN0cmljdCAmIFJUNl9MT09LVVBfRl9SRUFDSEFCTEUpKSB7Ci0JCXN0cnVjdCBydDZfaW5mbyAqbmV4dCA9IHJ0MC0+dS5kc3QucnQ2X25leHQ7CisJCXN0cnVjdCBydDZfaW5mbyAqbmV4dCA9IHJ0MC0+ZHN0LnJ0Nl9uZXh0OwogCiAJCS8qIG5vIGVudHJpZXMgbWF0Y2hlZDsgZG8gcm91bmQtcm9iaW4gKi8KIAkJaWYgKCFuZXh0IHx8IG5leHQtPnJ0NmlfbWV0cmljICE9IHJ0MC0+cnQ2aV9tZXRyaWMpCkBAIC01MTcsNyArNTExLDcgQEAKIAkJCXJ0LT5ydDZpX2V4cGlyZXMgPSBqaWZmaWVzICsgSFogKiBsaWZldGltZTsKIAkJCXJ0LT5ydDZpX2ZsYWdzIHw9IFJURl9FWFBJUkVTOwogCQl9Ci0JCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOworCQlkc3RfcmVsZWFzZSgmcnQtPmRzdCk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNTU1LDcgKzU0OSw3IEBACiAJcnQgPSBydDZfZGV2aWNlX21hdGNoKG5ldCwgcnQsICZmbC0+Zmw2X3NyYywgZmwtPm9pZiwgZmxhZ3MpOwogCUJBQ0tUUkFDSyhuZXQsICZmbC0+Zmw2X3NyYyk7CiBvdXQ6Ci0JZHN0X3VzZSgmcnQtPnUuZHN0LCBqaWZmaWVzKTsKKwlkc3RfdXNlKCZydC0+ZHN0LCBqaWZmaWVzKTsKIAlyZWFkX3VubG9ja19iaCgmdGFibGUtPnRiNl9sb2NrKTsKIAlyZXR1cm4gcnQ7CiAKQEAgLTY0Myw3ICs2MzcsNyBAQAogCQlpcHY2X2FkZHJfY29weSgmcnQtPnJ0NmlfZHN0LmFkZHIsIGRhZGRyKTsKIAkJcnQtPnJ0NmlfZHN0LnBsZW4gPSAxMjg7CiAJCXJ0LT5ydDZpX2ZsYWdzIHw9IFJURl9DQUNIRTsKLQkJcnQtPnUuZHN0LmZsYWdzIHw9IERTVF9IT1NUOworCQlydC0+ZHN0LmZsYWdzIHw9IERTVF9IT1NUOwogCiAjaWZkZWYgQ09ORklHX0lQVjZfU1VCVFJFRVMKIAkJaWYgKHJ0LT5ydDZpX3NyYy5wbGVuICYmIHNhZGRyKSB7CkBAIC02NzcsNyArNjcxLDcgQEAKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJCSAgICAgICAiTmVpZ2hib3VyIHRhYmxlIG92ZXJmbG93LlxuIik7Ci0JCQlkc3RfZnJlZSgmcnQtPnUuZHN0KTsKKwkJCWRzdF9mcmVlKCZydC0+ZHN0KTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAJCXJ0LT5ydDZpX25leHRob3AgPSBuZWlnaDsKQEAgLTY5NCw3ICs2ODgsNyBAQAogCQlpcHY2X2FkZHJfY29weSgmcnQtPnJ0NmlfZHN0LmFkZHIsIGRhZGRyKTsKIAkJcnQtPnJ0NmlfZHN0LnBsZW4gPSAxMjg7CiAJCXJ0LT5ydDZpX2ZsYWdzIHw9IFJURl9DQUNIRTsKLQkJcnQtPnUuZHN0LmZsYWdzIHw9IERTVF9IT1NUOworCQlydC0+ZHN0LmZsYWdzIHw9IERTVF9IT1NUOwogCQlydC0+cnQ2aV9uZXh0aG9wID0gbmVpZ2hfY2xvbmUob3J0LT5ydDZpX25leHRob3ApOwogCX0KIAlyZXR1cm4gcnQ7CkBAIC03MjYsNyArNzIwLDcgQEAKIAkgICAgcnQtPnJ0NmlfZmxhZ3MgJiBSVEZfQ0FDSEUpCiAJCWdvdG8gb3V0OwogCi0JZHN0X2hvbGQoJnJ0LT51LmRzdCk7CisJZHN0X2hvbGQoJnJ0LT5kc3QpOwogCXJlYWRfdW5sb2NrX2JoKCZ0YWJsZS0+dGI2X2xvY2spOwogCiAJaWYgKCFydC0+cnQ2aV9uZXh0aG9wICYmICEocnQtPnJ0NmlfZmxhZ3MgJiBSVEZfTk9ORVhUSE9QKSkKQEAgLTczOSwxMCArNzMzLDEwIEBACiAjZW5kaWYKIAl9CiAKLQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKKwlkc3RfcmVsZWFzZSgmcnQtPmRzdCk7CiAJcnQgPSBucnQgPyA6IG5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeTsKIAotCWRzdF9ob2xkKCZydC0+dS5kc3QpOworCWRzdF9ob2xkKCZydC0+ZHN0KTsKIAlpZiAobnJ0KSB7CiAJCWVyciA9IGlwNl9pbnNfcnQobnJ0KTsKIAkJaWYgKCFlcnIpCkBAIC03NTYsNyArNzUwLDcgQEAKIAkgKiBSYWNlIGNvbmRpdGlvbiEgSW4gdGhlIGdhcCwgd2hlbiB0YWJsZS0+dGI2X2xvY2sgd2FzCiAJICogcmVsZWFzZWQgc29tZW9uZSBjb3VsZCBpbnNlcnQgdGhpcyByb3V0ZS4gIFJlbG9va3VwLgogCSAqLwotCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOworCWRzdF9yZWxlYXNlKCZydC0+ZHN0KTsKIAlnb3RvIHJlbG9va3VwOwogCiBvdXQ6CkBAIC03NjQsMTEgKzc1OCwxMSBAQAogCQlyZWFjaGFibGUgPSAwOwogCQlnb3RvIHJlc3RhcnRfMjsKIAl9Ci0JZHN0X2hvbGQoJnJ0LT51LmRzdCk7CisJZHN0X2hvbGQoJnJ0LT5kc3QpOwogCXJlYWRfdW5sb2NrX2JoKCZ0YWJsZS0+dGI2X2xvY2spOwogb3V0MjoKLQlydC0+dS5kc3QubGFzdHVzZSA9IGppZmZpZXM7Ci0JcnQtPnUuZHN0Ll9fdXNlKys7CisJcnQtPmRzdC5sYXN0dXNlID0gamlmZmllczsKKwlydC0+ZHN0Ll9fdXNlKys7CiAKIAlyZXR1cm4gcnQ7CiB9CkBAIC04MzUsMTUgKzgyOSwxNSBAQAogCXN0cnVjdCBkc3RfZW50cnkgKm5ldyA9IE5VTEw7CiAKIAlpZiAocnQpIHsKLQkJbmV3ID0gJnJ0LT51LmRzdDsKKwkJbmV3ID0gJnJ0LT5kc3Q7CiAKIAkJYXRvbWljX3NldCgmbmV3LT5fX3JlZmNudCwgMSk7CiAJCW5ldy0+X191c2UgPSAxOwogCQluZXctPmlucHV0ID0gZHN0X2Rpc2NhcmQ7CiAJCW5ldy0+b3V0cHV0ID0gZHN0X2Rpc2NhcmQ7CiAKLQkJbWVtY3B5KG5ldy0+bWV0cmljcywgb3J0LT51LmRzdC5tZXRyaWNzLCBSVEFYX01BWCpzaXplb2YodTMyKSk7Ci0JCW5ldy0+ZGV2ID0gb3J0LT51LmRzdC5kZXY7CisJCW1lbWNweShuZXctPm1ldHJpY3MsIG9ydC0+ZHN0Lm1ldHJpY3MsIFJUQVhfTUFYKnNpemVvZih1MzIpKTsKKwkJbmV3LT5kZXYgPSBvcnQtPmRzdC5kZXY7CiAJCWlmIChuZXctPmRldikKIAkJCWRldl9ob2xkKG5ldy0+ZGV2KTsKIAkJcnQtPnJ0NmlfaWRldiA9IG9ydC0+cnQ2aV9pZGV2OwpAQCAtOTEyLDcgKzkwNiw3IEBACiAJcnQgPSAoc3RydWN0IHJ0Nl9pbmZvICopIHNrYl9kc3Qoc2tiKTsKIAlpZiAocnQpIHsKIAkJaWYgKHJ0LT5ydDZpX2ZsYWdzJlJURl9DQUNIRSkgewotCQkJZHN0X3NldF9leHBpcmVzKCZydC0+dS5kc3QsIDApOworCQkJZHN0X3NldF9leHBpcmVzKCZydC0+ZHN0LCAwKTsKIAkJCXJ0LT5ydDZpX2ZsYWdzIHw9IFJURl9FWFBJUkVTOwogCQl9IGVsc2UgaWYgKHJ0LT5ydDZpX25vZGUgJiYgKHJ0LT5ydDZpX2ZsYWdzICYgUlRGX0RFRkFVTFQpKQogCQkJcnQtPnJ0Nmlfbm9kZS0+Zm5fc2VybnVtID0gLTE7CkBAIC05ODYsMTQgKzk4MCwxNCBAQAogCXJ0LT5ydDZpX2RldgkgID0gZGV2OwogCXJ0LT5ydDZpX2lkZXYgICAgID0gaWRldjsKIAlydC0+cnQ2aV9uZXh0aG9wICA9IG5laWdoOwotCWF0b21pY19zZXQoJnJ0LT51LmRzdC5fX3JlZmNudCwgMSk7Ci0JcnQtPnUuZHN0Lm1ldHJpY3NbUlRBWF9IT1BMSU1JVC0xXSA9IDI1NTsKLQlydC0+dS5kc3QubWV0cmljc1tSVEFYX01UVS0xXSA9IGlwdjZfZ2V0X210dShydC0+cnQ2aV9kZXYpOwotCXJ0LT51LmRzdC5tZXRyaWNzW1JUQVhfQURWTVNTLTFdID0gaXB2Nl9hZHZtc3MobmV0LCBkc3RfbXR1KCZydC0+dS5kc3QpKTsKLQlydC0+dS5kc3Qub3V0cHV0ICA9IGlwNl9vdXRwdXQ7CisJYXRvbWljX3NldCgmcnQtPmRzdC5fX3JlZmNudCwgMSk7CisJcnQtPmRzdC5tZXRyaWNzW1JUQVhfSE9QTElNSVQtMV0gPSAyNTU7CisJcnQtPmRzdC5tZXRyaWNzW1JUQVhfTVRVLTFdID0gaXB2Nl9nZXRfbXR1KHJ0LT5ydDZpX2Rldik7CisJcnQtPmRzdC5tZXRyaWNzW1JUQVhfQURWTVNTLTFdID0gaXB2Nl9hZHZtc3MobmV0LCBkc3RfbXR1KCZydC0+ZHN0KSk7CisJcnQtPmRzdC5vdXRwdXQgID0gaXA2X291dHB1dDsKIAogI2lmIDAJLyogdGhlcmUncyBubyBjaGFuY2UgdG8gdXNlIHRoZXNlIGZvciBuZGlzYyAqLwotCXJ0LT51LmRzdC5mbGFncyAgID0gaXB2Nl9hZGRyX3R5cGUoYWRkcikgJiBJUFY2X0FERFJfVU5JQ0FTVAorCXJ0LT5kc3QuZmxhZ3MgICA9IGlwdjZfYWRkcl90eXBlKGFkZHIpICYgSVBWNl9BRERSX1VOSUNBU1QKIAkJCQk/IERTVF9IT1NUCiAJCQkJOiAwOwogCWlwdjZfYWRkcl9jb3B5KCZydC0+cnQ2aV9kc3QuYWRkciwgYWRkcik7CkBAIC0xMDAxLDE0ICs5OTUsMTQgQEAKICNlbmRpZgogCiAJc3Bpbl9sb2NrX2JoKCZpY21wNl9kc3RfbG9jayk7Ci0JcnQtPnUuZHN0Lm5leHQgPSBpY21wNl9kc3RfZ2NfbGlzdDsKLQlpY21wNl9kc3RfZ2NfbGlzdCA9ICZydC0+dS5kc3Q7CisJcnQtPmRzdC5uZXh0ID0gaWNtcDZfZHN0X2djX2xpc3Q7CisJaWNtcDZfZHN0X2djX2xpc3QgPSAmcnQtPmRzdDsKIAlzcGluX3VubG9ja19iaCgmaWNtcDZfZHN0X2xvY2spOwogCiAJZmliNl9mb3JjZV9zdGFydF9nYyhuZXQpOwogCiBvdXQ6Ci0JcmV0dXJuICZydC0+dS5kc3Q7CisJcmV0dXJuICZydC0+ZHN0OwogfQogCiBpbnQgaWNtcDZfZHN0X2djKHZvaWQpCkBAIC0xMDkwLDExICsxMDg0LDExIEBACiAJaW50IG10dSA9IElQVjZfTUlOX01UVTsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2OwogCi0JaWRldiA9IGluNl9kZXZfZ2V0KGRldik7Ci0JaWYgKGlkZXYpIHsKKwlyY3VfcmVhZF9sb2NrKCk7CisJaWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTsKKwlpZiAoaWRldikKIAkJbXR1ID0gaWRldi0+Y25mLm10dTY7Ci0JCWluNl9kZXZfcHV0KGlkZXYpOwotCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gbXR1OwogfQogCkBAIC0xMTAzLDEyICsxMDk3LDE1IEBACiAJaW50IGhvcGxpbWl0ID0gZHN0X21ldHJpYyhkc3QsIFJUQVhfSE9QTElNSVQpOwogCWlmIChob3BsaW1pdCA8IDApIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRzdC0+ZGV2OwotCQlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gaW42X2Rldl9nZXQoZGV2KTsKLQkJaWYgKGlkZXYpIHsKKwkJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKKworCQlyY3VfcmVhZF9sb2NrKCk7CisJCWlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7CisJCWlmIChpZGV2KQogCQkJaG9wbGltaXQgPSBpZGV2LT5jbmYuaG9wX2xpbWl0OwotCQkJaW42X2Rldl9wdXQoaWRldik7Ci0JCX0gZWxzZQorCQllbHNlCiAJCQlob3BsaW1pdCA9IGRldl9uZXQoZGV2KS0+aXB2Ni5kZXZjb25mX2FsbC0+aG9wX2xpbWl0OworCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiAJcmV0dXJuIGhvcGxpbWl0OwogfQpAQCAtMTE1OSw3ICsxMTU2LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcnQtPnUuZHN0Lm9ic29sZXRlID0gLTE7CisJcnQtPmRzdC5vYnNvbGV0ZSA9IC0xOwogCXJ0LT5ydDZpX2V4cGlyZXMgPSAoY2ZnLT5mY19mbGFncyAmIFJURl9FWFBJUkVTKSA/CiAJCQkJamlmZmllcyArIGNsb2NrX3RfdG9famlmZmllcyhjZmctPmZjX2V4cGlyZXMpIDoKIAkJCQkwOwpAQCAtMTE3MSwxNiArMTE2OCwxNiBAQAogCWFkZHJfdHlwZSA9IGlwdjZfYWRkcl90eXBlKCZjZmctPmZjX2RzdCk7CiAKIAlpZiAoYWRkcl90eXBlICYgSVBWNl9BRERSX01VTFRJQ0FTVCkKLQkJcnQtPnUuZHN0LmlucHV0ID0gaXA2X21jX2lucHV0OworCQlydC0+ZHN0LmlucHV0ID0gaXA2X21jX2lucHV0OwogCWVsc2UKLQkJcnQtPnUuZHN0LmlucHV0ID0gaXA2X2ZvcndhcmQ7CisJCXJ0LT5kc3QuaW5wdXQgPSBpcDZfZm9yd2FyZDsKIAotCXJ0LT51LmRzdC5vdXRwdXQgPSBpcDZfb3V0cHV0OworCXJ0LT5kc3Qub3V0cHV0ID0gaXA2X291dHB1dDsKIAogCWlwdjZfYWRkcl9wcmVmaXgoJnJ0LT5ydDZpX2RzdC5hZGRyLCAmY2ZnLT5mY19kc3QsIGNmZy0+ZmNfZHN0X2xlbik7CiAJcnQtPnJ0NmlfZHN0LnBsZW4gPSBjZmctPmZjX2RzdF9sZW47CiAJaWYgKHJ0LT5ydDZpX2RzdC5wbGVuID09IDEyOCkKLQkgICAgICAgcnQtPnUuZHN0LmZsYWdzID0gRFNUX0hPU1Q7CisJICAgICAgIHJ0LT5kc3QuZmxhZ3MgPSBEU1RfSE9TVDsKIAogI2lmZGVmIENPTkZJR19JUFY2X1NVQlRSRUVTCiAJaXB2Nl9hZGRyX3ByZWZpeCgmcnQtPnJ0Nmlfc3JjLmFkZHIsICZjZmctPmZjX3NyYywgY2ZnLT5mY19zcmNfbGVuKTsKQEAgLTEyMDgsOSArMTIwNSw5IEBACiAJCQkJZ290byBvdXQ7CiAJCQl9CiAJCX0KLQkJcnQtPnUuZHN0Lm91dHB1dCA9IGlwNl9wa3RfZGlzY2FyZF9vdXQ7Ci0JCXJ0LT51LmRzdC5pbnB1dCA9IGlwNl9wa3RfZGlzY2FyZDsKLQkJcnQtPnUuZHN0LmVycm9yID0gLUVORVRVTlJFQUNIOworCQlydC0+ZHN0Lm91dHB1dCA9IGlwNl9wa3RfZGlzY2FyZF9vdXQ7CisJCXJ0LT5kc3QuaW5wdXQgPSBpcDZfcGt0X2Rpc2NhcmQ7CisJCXJ0LT5kc3QuZXJyb3IgPSAtRU5FVFVOUkVBQ0g7CiAJCXJ0LT5ydDZpX2ZsYWdzID0gUlRGX1JFSkVDVHxSVEZfTk9ORVhUSE9QOwogCQlnb3RvIGluc3RhbGxfcm91dGU7CiAJfQpAQCAtMTI0NCw3ICsxMjQxLDcgQEAKIAkJCQlnb3RvIG91dDsKIAkJCWlmIChkZXYpIHsKIAkJCQlpZiAoZGV2ICE9IGdydC0+cnQ2aV9kZXYpIHsKLQkJCQkJZHN0X3JlbGVhc2UoJmdydC0+dS5kc3QpOworCQkJCQlkc3RfcmVsZWFzZSgmZ3J0LT5kc3QpOwogCQkJCQlnb3RvIG91dDsKIAkJCQl9CiAJCQl9IGVsc2UgewpAQCAtMTI1NSw3ICsxMjUyLDcgQEAKIAkJCX0KIAkJCWlmICghKGdydC0+cnQ2aV9mbGFncyZSVEZfR0FURVdBWSkpCiAJCQkJZXJyID0gMDsKLQkJCWRzdF9yZWxlYXNlKCZncnQtPnUuZHN0KTsKKwkJCWRzdF9yZWxlYXNlKCZncnQtPmRzdCk7CiAKIAkJCWlmIChlcnIpCiAJCQkJZ290byBvdXQ7CkBAIC0xMjk0LDE4ICsxMjkxLDE4IEBACiAJCQkJCWdvdG8gb3V0OwogCQkJCX0KIAotCQkJCXJ0LT51LmRzdC5tZXRyaWNzW3R5cGUgLSAxXSA9IG5sYV9nZXRfdTMyKG5sYSk7CisJCQkJcnQtPmRzdC5tZXRyaWNzW3R5cGUgLSAxXSA9IG5sYV9nZXRfdTMyKG5sYSk7CiAJCQl9CiAJCX0KIAl9CiAKLQlpZiAoZHN0X21ldHJpYygmcnQtPnUuZHN0LCBSVEFYX0hPUExJTUlUKSA9PSAwKQotCQlydC0+dS5kc3QubWV0cmljc1tSVEFYX0hPUExJTUlULTFdID0gLTE7Ci0JaWYgKCFkc3RfbXR1KCZydC0+dS5kc3QpKQotCQlydC0+dS5kc3QubWV0cmljc1tSVEFYX01UVS0xXSA9IGlwdjZfZ2V0X210dShkZXYpOwotCWlmICghZHN0X21ldHJpYygmcnQtPnUuZHN0LCBSVEFYX0FEVk1TUykpCi0JCXJ0LT51LmRzdC5tZXRyaWNzW1JUQVhfQURWTVNTLTFdID0gaXB2Nl9hZHZtc3MobmV0LCBkc3RfbXR1KCZydC0+dS5kc3QpKTsKLQlydC0+dS5kc3QuZGV2ID0gZGV2OworCWlmIChkc3RfbWV0cmljKCZydC0+ZHN0LCBSVEFYX0hPUExJTUlUKSA9PSAwKQorCQlydC0+ZHN0Lm1ldHJpY3NbUlRBWF9IT1BMSU1JVC0xXSA9IC0xOworCWlmICghZHN0X210dSgmcnQtPmRzdCkpCisJCXJ0LT5kc3QubWV0cmljc1tSVEFYX01UVS0xXSA9IGlwdjZfZ2V0X210dShkZXYpOworCWlmICghZHN0X21ldHJpYygmcnQtPmRzdCwgUlRBWF9BRFZNU1MpKQorCQlydC0+ZHN0Lm1ldHJpY3NbUlRBWF9BRFZNU1MtMV0gPSBpcHY2X2Fkdm1zcyhuZXQsIGRzdF9tdHUoJnJ0LT5kc3QpKTsKKwlydC0+ZHN0LmRldiA9IGRldjsKIAlydC0+cnQ2aV9pZGV2ID0gaWRldjsKIAlydC0+cnQ2aV90YWJsZSA9IHRhYmxlOwogCkBAIC0xMzE5LDcgKzEzMTYsNyBAQAogCWlmIChpZGV2KQogCQlpbjZfZGV2X3B1dChpZGV2KTsKIAlpZiAocnQpCi0JCWRzdF9mcmVlKCZydC0+dS5kc3QpOworCQlkc3RfZnJlZSgmcnQtPmRzdCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTMzNiw3ICsxMzMzLDcgQEAKIAl3cml0ZV9sb2NrX2JoKCZ0YWJsZS0+dGI2X2xvY2spOwogCiAJZXJyID0gZmliNl9kZWwocnQsIGluZm8pOwotCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOworCWRzdF9yZWxlYXNlKCZydC0+ZHN0KTsKIAogCXdyaXRlX3VubG9ja19iaCgmdGFibGUtPnRiNl9sb2NrKTsKIApAQCAtMTM2OSw3ICsxMzY2LDcgQEAKIAkJCSAmY2ZnLT5mY19zcmMsIGNmZy0+ZmNfc3JjX2xlbik7CiAKIAlpZiAoZm4pIHsKLQkJZm9yIChydCA9IGZuLT5sZWFmOyBydDsgcnQgPSBydC0+dS5kc3QucnQ2X25leHQpIHsKKwkJZm9yIChydCA9IGZuLT5sZWFmOyBydDsgcnQgPSBydC0+ZHN0LnJ0Nl9uZXh0KSB7CiAJCQlpZiAoY2ZnLT5mY19pZmluZGV4ICYmCiAJCQkgICAgKHJ0LT5ydDZpX2RldiA9PSBOVUxMIHx8CiAJCQkgICAgIHJ0LT5ydDZpX2Rldi0+aWZpbmRleCAhPSBjZmctPmZjX2lmaW5kZXgpKQpAQCAtMTM3OSw3ICsxMzc2LDcgQEAKIAkJCQljb250aW51ZTsKIAkJCWlmIChjZmctPmZjX21ldHJpYyAmJiBjZmctPmZjX21ldHJpYyAhPSBydC0+cnQ2aV9tZXRyaWMpCiAJCQkJY29udGludWU7Ci0JCQlkc3RfaG9sZCgmcnQtPnUuZHN0KTsKKwkJCWRzdF9ob2xkKCZydC0+ZHN0KTsKIAkJCXJlYWRfdW5sb2NrX2JoKCZ0YWJsZS0+dGI2X2xvY2spOwogCiAJCQlyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCAmY2ZnLT5mY19ubGluZm8pOwpAQCAtMTQyMSw3ICsxNDE4LDcgQEAKIAlyZWFkX2xvY2tfYmgoJnRhYmxlLT50YjZfbG9jayk7CiAJZm4gPSBmaWI2X2xvb2t1cCgmdGFibGUtPnRiNl9yb290LCAmZmwtPmZsNl9kc3QsICZmbC0+Zmw2X3NyYyk7CiByZXN0YXJ0OgotCWZvciAocnQgPSBmbi0+bGVhZjsgcnQ7IHJ0ID0gcnQtPnUuZHN0LnJ0Nl9uZXh0KSB7CisJZm9yIChydCA9IGZuLT5sZWFmOyBydDsgcnQgPSBydC0+ZHN0LnJ0Nl9uZXh0KSB7CiAJCS8qCiAJCSAqIEN1cnJlbnQgcm91dGUgaXMgb24tbGluazsgcmVkaXJlY3QgaXMgYWx3YXlzIGludmFsaWQuCiAJCSAqCkBAIC0xNDQ1LDcgKzE0NDIsNyBAQAogCQlydCA9IG5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeTsKIAlCQUNLVFJBQ0sobmV0LCAmZmwtPmZsNl9zcmMpOwogb3V0OgotCWRzdF9ob2xkKCZydC0+dS5kc3QpOworCWRzdF9ob2xkKCZydC0+ZHN0KTsKIAogCXJlYWRfdW5sb2NrX2JoKCZ0YWJsZS0+dGI2X2xvY2spOwogCkBAIC0xNTEzLDEwICsxNTEwLDEwIEBACiAJICogTG9vaywgcmVkaXJlY3RzIGFyZSBzZW50IG9ubHkgaW4gcmVzcG9uc2UgdG8gZGF0YSBwYWNrZXRzLAogCSAqIHNvIHRoYXQgdGhpcyBuZXh0aG9wIGFwcGFyZW50bHkgaXMgcmVhY2hhYmxlLiAtLUFOSwogCSAqLwotCWRzdF9jb25maXJtKCZydC0+dS5kc3QpOworCWRzdF9jb25maXJtKCZydC0+ZHN0KTsKIAogCS8qIER1cGxpY2F0ZSByZWRpcmVjdDogc2lsZW50bHkgaWdub3JlLiAqLwotCWlmIChuZWlnaCA9PSBydC0+dS5kc3QubmVpZ2hib3VyKQorCWlmIChuZWlnaCA9PSBydC0+ZHN0Lm5laWdoYm91cikKIAkJZ290byBvdXQ7CiAKIAlucnQgPSBpcDZfcnRfY29weShydCk7CkBAIC0xNTI5LDIwICsxNTI2LDIwIEBACiAKIAlpcHY2X2FkZHJfY29weSgmbnJ0LT5ydDZpX2RzdC5hZGRyLCBkZXN0KTsKIAlucnQtPnJ0NmlfZHN0LnBsZW4gPSAxMjg7Ci0JbnJ0LT51LmRzdC5mbGFncyB8PSBEU1RfSE9TVDsKKwlucnQtPmRzdC5mbGFncyB8PSBEU1RfSE9TVDsKIAogCWlwdjZfYWRkcl9jb3B5KCZucnQtPnJ0NmlfZ2F0ZXdheSwgKHN0cnVjdCBpbjZfYWRkciopbmVpZ2gtPnByaW1hcnlfa2V5KTsKIAlucnQtPnJ0NmlfbmV4dGhvcCA9IG5laWdoX2Nsb25lKG5laWdoKTsKIAkvKiBSZXNldCBwbXR1LCBpdCBtYXkgYmUgYmV0dGVyICovCi0JbnJ0LT51LmRzdC5tZXRyaWNzW1JUQVhfTVRVLTFdID0gaXB2Nl9nZXRfbXR1KG5laWdoLT5kZXYpOwotCW5ydC0+dS5kc3QubWV0cmljc1tSVEFYX0FEVk1TUy0xXSA9IGlwdjZfYWR2bXNzKGRldl9uZXQobmVpZ2gtPmRldiksCi0JCQkJCQkJZHN0X210dSgmbnJ0LT51LmRzdCkpOworCW5ydC0+ZHN0Lm1ldHJpY3NbUlRBWF9NVFUtMV0gPSBpcHY2X2dldF9tdHUobmVpZ2gtPmRldik7CisJbnJ0LT5kc3QubWV0cmljc1tSVEFYX0FEVk1TUy0xXSA9IGlwdjZfYWR2bXNzKGRldl9uZXQobmVpZ2gtPmRldiksCisJCQkJCQkJZHN0X210dSgmbnJ0LT5kc3QpKTsKIAogCWlmIChpcDZfaW5zX3J0KG5ydCkpCiAJCWdvdG8gb3V0OwogCi0JbmV0ZXZlbnQub2xkID0gJnJ0LT51LmRzdDsKLQluZXRldmVudC5uZXcgPSAmbnJ0LT51LmRzdDsKKwluZXRldmVudC5vbGQgPSAmcnQtPmRzdDsKKwluZXRldmVudC5uZXcgPSAmbnJ0LT5kc3Q7CiAJY2FsbF9uZXRldmVudF9ub3RpZmllcnMoTkVURVZFTlRfUkVESVJFQ1QsICZuZXRldmVudCk7CiAKIAlpZiAocnQtPnJ0NmlfZmxhZ3MmUlRGX0NBQ0hFKSB7CkBAIC0xNTUxLDcgKzE1NDgsNyBAQAogCX0KIAogb3V0OgotCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOworCWRzdF9yZWxlYXNlKCZydC0+ZHN0KTsKIH0KIAogLyoKQEAgLTE1NzAsNyArMTU2Nyw3IEBACiAJaWYgKHJ0ID09IE5VTEwpCiAJCXJldHVybjsKIAotCWlmIChwbXR1ID49IGRzdF9tdHUoJnJ0LT51LmRzdCkpCisJaWYgKHBtdHUgPj0gZHN0X210dSgmcnQtPmRzdCkpCiAJCWdvdG8gb3V0OwogCiAJaWYgKHBtdHUgPCBJUFY2X01JTl9NVFUpIHsKQEAgLTE1ODgsNyArMTU4NSw3IEBACiAJICAgVGhleSBhcmUgc2VudCBvbmx5IGluIHJlc3BvbnNlIHRvIGRhdGEgcGFja2V0cywKIAkgICBzbyB0aGF0IHRoaXMgbmV4dGhvcCBhcHBhcmVudGx5IGlzIHJlYWNoYWJsZS4gLS1BTksKIAkgKi8KLQlkc3RfY29uZmlybSgmcnQtPnUuZHN0KTsKKwlkc3RfY29uZmlybSgmcnQtPmRzdCk7CiAKIAkvKiBIb3N0IHJvdXRlLiBJZiBpdCBpcyBzdGF0aWMsIGl0IHdvdWxkIGJlIGJldHRlcgogCSAgIG5vdCB0byBvdmVycmlkZSBpdCwgYnV0IGFkZCBuZXcgb25lLCBzbyB0aGF0CkBAIC0xNTk2LDEwICsxNTkzLDEwIEBACiAJICAgd291bGQgcmV0dXJuIGF1dG9tYXRpY2FsbHkuCiAJICovCiAJaWYgKHJ0LT5ydDZpX2ZsYWdzICYgUlRGX0NBQ0hFKSB7Ci0JCXJ0LT51LmRzdC5tZXRyaWNzW1JUQVhfTVRVLTFdID0gcG10dTsKKwkJcnQtPmRzdC5tZXRyaWNzW1JUQVhfTVRVLTFdID0gcG10dTsKIAkJaWYgKGFsbGZyYWcpCi0JCQlydC0+dS5kc3QubWV0cmljc1tSVEFYX0ZFQVRVUkVTLTFdIHw9IFJUQVhfRkVBVFVSRV9BTExGUkFHOwotCQlkc3Rfc2V0X2V4cGlyZXMoJnJ0LT51LmRzdCwgbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfbXR1X2V4cGlyZXMpOworCQkJcnQtPmRzdC5tZXRyaWNzW1JUQVhfRkVBVFVSRVMtMV0gfD0gUlRBWF9GRUFUVVJFX0FMTEZSQUc7CisJCWRzdF9zZXRfZXhwaXJlcygmcnQtPmRzdCwgbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfbXR1X2V4cGlyZXMpOwogCQlydC0+cnQ2aV9mbGFncyB8PSBSVEZfTU9ESUZJRUR8UlRGX0VYUElSRVM7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTE2MTUsOSArMTYxMiw5IEBACiAJCW5ydCA9IHJ0Nl9hbGxvY19jbG9uZShydCwgZGFkZHIpOwogCiAJaWYgKG5ydCkgewotCQlucnQtPnUuZHN0Lm1ldHJpY3NbUlRBWF9NVFUtMV0gPSBwbXR1OworCQlucnQtPmRzdC5tZXRyaWNzW1JUQVhfTVRVLTFdID0gcG10dTsKIAkJaWYgKGFsbGZyYWcpCi0JCQlucnQtPnUuZHN0Lm1ldHJpY3NbUlRBWF9GRUFUVVJFUy0xXSB8PSBSVEFYX0ZFQVRVUkVfQUxMRlJBRzsKKwkJCW5ydC0+ZHN0Lm1ldHJpY3NbUlRBWF9GRUFUVVJFUy0xXSB8PSBSVEFYX0ZFQVRVUkVfQUxMRlJBRzsKIAogCQkvKiBBY2NvcmRpbmcgdG8gUkZDIDE5ODEsIGRldGVjdGluZyBQTVRVIGluY3JlYXNlIHNob3VsZG4ndCBiZQogCQkgKiBoYXBwZW5lZCB3aXRoaW4gNSBtaW5zLCB0aGUgcmVjb21tZW5kZWQgdGltZXIgaXMgMTAgbWlucy4KQEAgLTE2MjUsMTMgKzE2MjIsMTMgQEAKIAkJICogd2hpY2ggaXMgMTAgbWlucy4gQWZ0ZXIgMTAgbWlucyB0aGUgZGVjcmVhc2VkIHBtdHUgaXMgZXhwaXJlZAogCQkgKiBhbmQgZGV0ZWN0aW5nIFBNVFUgaW5jcmVhc2Ugd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGhhcHBlbmVkLgogCQkgKi8KLQkJZHN0X3NldF9leHBpcmVzKCZucnQtPnUuZHN0LCBuZXQtPmlwdjYuc3lzY3RsLmlwNl9ydF9tdHVfZXhwaXJlcyk7CisJCWRzdF9zZXRfZXhwaXJlcygmbnJ0LT5kc3QsIG5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X210dV9leHBpcmVzKTsKIAkJbnJ0LT5ydDZpX2ZsYWdzIHw9IFJURl9EWU5BTUlDfFJURl9FWFBJUkVTOwogCiAJCWlwNl9pbnNfcnQobnJ0KTsKIAl9CiBvdXQ6Ci0JZHN0X3JlbGVhc2UoJnJ0LT51LmRzdCk7CisJZHN0X3JlbGVhc2UoJnJ0LT5kc3QpOwogfQogCiAvKgpAQCAtMTY0NCwxOCArMTY0MSwxOCBAQAogCXN0cnVjdCBydDZfaW5mbyAqcnQgPSBpcDZfZHN0X2FsbG9jKCZuZXQtPmlwdjYuaXA2X2RzdF9vcHMpOwogCiAJaWYgKHJ0KSB7Ci0JCXJ0LT51LmRzdC5pbnB1dCA9IG9ydC0+dS5kc3QuaW5wdXQ7Ci0JCXJ0LT51LmRzdC5vdXRwdXQgPSBvcnQtPnUuZHN0Lm91dHB1dDsKKwkJcnQtPmRzdC5pbnB1dCA9IG9ydC0+ZHN0LmlucHV0OworCQlydC0+ZHN0Lm91dHB1dCA9IG9ydC0+ZHN0Lm91dHB1dDsKIAotCQltZW1jcHkocnQtPnUuZHN0Lm1ldHJpY3MsIG9ydC0+dS5kc3QubWV0cmljcywgUlRBWF9NQVgqc2l6ZW9mKHUzMikpOwotCQlydC0+dS5kc3QuZXJyb3IgPSBvcnQtPnUuZHN0LmVycm9yOwotCQlydC0+dS5kc3QuZGV2ID0gb3J0LT51LmRzdC5kZXY7Ci0JCWlmIChydC0+dS5kc3QuZGV2KQotCQkJZGV2X2hvbGQocnQtPnUuZHN0LmRldik7CisJCW1lbWNweShydC0+ZHN0Lm1ldHJpY3MsIG9ydC0+ZHN0Lm1ldHJpY3MsIFJUQVhfTUFYKnNpemVvZih1MzIpKTsKKwkJcnQtPmRzdC5lcnJvciA9IG9ydC0+ZHN0LmVycm9yOworCQlydC0+ZHN0LmRldiA9IG9ydC0+ZHN0LmRldjsKKwkJaWYgKHJ0LT5kc3QuZGV2KQorCQkJZGV2X2hvbGQocnQtPmRzdC5kZXYpOwogCQlydC0+cnQ2aV9pZGV2ID0gb3J0LT5ydDZpX2lkZXY7CiAJCWlmIChydC0+cnQ2aV9pZGV2KQogCQkJaW42X2Rldl9ob2xkKHJ0LT5ydDZpX2lkZXYpOwotCQlydC0+dS5kc3QubGFzdHVzZSA9IGppZmZpZXM7CisJCXJ0LT5kc3QubGFzdHVzZSA9IGppZmZpZXM7CiAJCXJ0LT5ydDZpX2V4cGlyZXMgPSAwOwogCiAJCWlwdjZfYWRkcl9jb3B5KCZydC0+cnQ2aV9nYXRld2F5LCAmb3J0LT5ydDZpX2dhdGV3YXkpOwpAQCAtMTY4OSwxNCArMTY4NiwxNCBAQAogCWlmICghZm4pCiAJCWdvdG8gb3V0OwogCi0JZm9yIChydCA9IGZuLT5sZWFmOyBydDsgcnQgPSBydC0+dS5kc3QucnQ2X25leHQpIHsKKwlmb3IgKHJ0ID0gZm4tPmxlYWY7IHJ0OyBydCA9IHJ0LT5kc3QucnQ2X25leHQpIHsKIAkJaWYgKHJ0LT5ydDZpX2Rldi0+aWZpbmRleCAhPSBpZmluZGV4KQogCQkJY29udGludWU7CiAJCWlmICgocnQtPnJ0NmlfZmxhZ3MgJiAoUlRGX1JPVVRFSU5GT3xSVEZfR0FURVdBWSkpICE9IChSVEZfUk9VVEVJTkZPfFJURl9HQVRFV0FZKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoIWlwdjZfYWRkcl9lcXVhbCgmcnQtPnJ0NmlfZ2F0ZXdheSwgZ3dhZGRyKSkKIAkJCWNvbnRpbnVlOwotCQlkc3RfaG9sZCgmcnQtPnUuZHN0KTsKKwkJZHN0X2hvbGQoJnJ0LT5kc3QpOwogCQlicmVhazsKIAl9CiBvdXQ6CkBAIC0xNzQ0LDE0ICsxNzQxLDE0IEBACiAJCXJldHVybiBOVUxMOwogCiAJd3JpdGVfbG9ja19iaCgmdGFibGUtPnRiNl9sb2NrKTsKLQlmb3IgKHJ0ID0gdGFibGUtPnRiNl9yb290LmxlYWY7IHJ0OyBydD1ydC0+dS5kc3QucnQ2X25leHQpIHsKKwlmb3IgKHJ0ID0gdGFibGUtPnRiNl9yb290LmxlYWY7IHJ0OyBydD1ydC0+ZHN0LnJ0Nl9uZXh0KSB7CiAJCWlmIChkZXYgPT0gcnQtPnJ0NmlfZGV2ICYmCiAJCSAgICAoKHJ0LT5ydDZpX2ZsYWdzICYgKFJURl9BRERSQ09ORiB8IFJURl9ERUZBVUxUKSkgPT0gKFJURl9BRERSQ09ORiB8IFJURl9ERUZBVUxUKSkgJiYKIAkJICAgIGlwdjZfYWRkcl9lcXVhbCgmcnQtPnJ0NmlfZ2F0ZXdheSwgYWRkcikpCiAJCQlicmVhazsKIAl9CiAJaWYgKHJ0KQotCQlkc3RfaG9sZCgmcnQtPnUuZHN0KTsKKwkJZHN0X2hvbGQoJnJ0LT5kc3QpOwogCXdyaXRlX3VubG9ja19iaCgmdGFibGUtPnRiNl9sb2NrKTsKIAlyZXR1cm4gcnQ7CiB9CkBAIC0xNzkwLDkgKzE3ODcsOSBAQAogCiByZXN0YXJ0OgogCXJlYWRfbG9ja19iaCgmdGFibGUtPnRiNl9sb2NrKTsKLQlmb3IgKHJ0ID0gdGFibGUtPnRiNl9yb290LmxlYWY7IHJ0OyBydCA9IHJ0LT51LmRzdC5ydDZfbmV4dCkgeworCWZvciAocnQgPSB0YWJsZS0+dGI2X3Jvb3QubGVhZjsgcnQ7IHJ0ID0gcnQtPmRzdC5ydDZfbmV4dCkgewogCQlpZiAocnQtPnJ0NmlfZmxhZ3MgJiAoUlRGX0RFRkFVTFQgfCBSVEZfQUREUkNPTkYpKSB7Ci0JCQlkc3RfaG9sZCgmcnQtPnUuZHN0KTsKKwkJCWRzdF9ob2xkKCZydC0+ZHN0KTsKIAkJCXJlYWRfdW5sb2NrX2JoKCZ0YWJsZS0+dGI2X2xvY2spOwogCQkJaXA2X2RlbF9ydChydCk7CiAJCQlnb3RvIHJlc3RhcnQ7CkBAIC0xOTMwLDE1ICsxOTI3LDE1IEBACiAJZGV2X2hvbGQobmV0LT5sb29wYmFja19kZXYpOwogCWluNl9kZXZfaG9sZChpZGV2KTsKIAotCXJ0LT51LmRzdC5mbGFncyA9IERTVF9IT1NUOwotCXJ0LT51LmRzdC5pbnB1dCA9IGlwNl9pbnB1dDsKLQlydC0+dS5kc3Qub3V0cHV0ID0gaXA2X291dHB1dDsKKwlydC0+ZHN0LmZsYWdzID0gRFNUX0hPU1Q7CisJcnQtPmRzdC5pbnB1dCA9IGlwNl9pbnB1dDsKKwlydC0+ZHN0Lm91dHB1dCA9IGlwNl9vdXRwdXQ7CiAJcnQtPnJ0NmlfZGV2ID0gbmV0LT5sb29wYmFja19kZXY7CiAJcnQtPnJ0NmlfaWRldiA9IGlkZXY7Ci0JcnQtPnUuZHN0Lm1ldHJpY3NbUlRBWF9NVFUtMV0gPSBpcHY2X2dldF9tdHUocnQtPnJ0NmlfZGV2KTsKLQlydC0+dS5kc3QubWV0cmljc1tSVEFYX0FEVk1TUy0xXSA9IGlwdjZfYWR2bXNzKG5ldCwgZHN0X210dSgmcnQtPnUuZHN0KSk7Ci0JcnQtPnUuZHN0Lm1ldHJpY3NbUlRBWF9IT1BMSU1JVC0xXSA9IC0xOwotCXJ0LT51LmRzdC5vYnNvbGV0ZSA9IC0xOworCXJ0LT5kc3QubWV0cmljc1tSVEFYX01UVS0xXSA9IGlwdjZfZ2V0X210dShydC0+cnQ2aV9kZXYpOworCXJ0LT5kc3QubWV0cmljc1tSVEFYX0FEVk1TUy0xXSA9IGlwdjZfYWR2bXNzKG5ldCwgZHN0X210dSgmcnQtPmRzdCkpOworCXJ0LT5kc3QubWV0cmljc1tSVEFYX0hPUExJTUlULTFdID0gLTE7CisJcnQtPmRzdC5vYnNvbGV0ZSA9IC0xOwogCiAJcnQtPnJ0NmlfZmxhZ3MgPSBSVEZfVVAgfCBSVEZfTk9ORVhUSE9QOwogCWlmIChhbnljYXN0KQpAQCAtMTk0Nyw3ICsxOTQ0LDcgQEAKIAkJcnQtPnJ0NmlfZmxhZ3MgfD0gUlRGX0xPQ0FMOwogCW5laWdoID0gbmRpc2NfZ2V0X25laWdoKHJ0LT5ydDZpX2RldiwgJnJ0LT5ydDZpX2dhdGV3YXkpOwogCWlmIChJU19FUlIobmVpZ2gpKSB7Ci0JCWRzdF9mcmVlKCZydC0+dS5kc3QpOworCQlkc3RfZnJlZSgmcnQtPmRzdCk7CiAKIAkJLyogV2UgYXJlIGNhc3RpbmcgdGhpcyBiZWNhdXNlIHRoYXQgaXMgdGhlIHJldHVybgogCQkgKiB2YWx1ZSB0eXBlLiAgQnV0IGFuIGVycm5vIGVuY29kZWQgcG9pbnRlciBpcyB0aGUKQEAgLTE5NjIsNyArMTk1OSw3IEBACiAJcnQtPnJ0NmlfZHN0LnBsZW4gPSAxMjg7CiAJcnQtPnJ0NmlfdGFibGUgPSBmaWI2X2dldF90YWJsZShuZXQsIFJUNl9UQUJMRV9MT0NBTCk7CiAKLQlhdG9taWNfc2V0KCZydC0+dS5kc3QuX19yZWZjbnQsIDEpOworCWF0b21pY19zZXQoJnJ0LT5kc3QuX19yZWZjbnQsIDEpOwogCiAJcmV0dXJuIHJ0OwogfQpAQCAtMjAzMywxMiArMjAzMCwxMiBAQAogCSAgIFBNVFUgZGlzY291dmVyeS4KIAkgKi8KIAlpZiAocnQtPnJ0NmlfZGV2ID09IGFyZy0+ZGV2ICYmCi0JICAgICFkc3RfbWV0cmljX2xvY2tlZCgmcnQtPnUuZHN0LCBSVEFYX01UVSkgJiYKLQkgICAgKGRzdF9tdHUoJnJ0LT51LmRzdCkgPj0gYXJnLT5tdHUgfHwKLQkgICAgIChkc3RfbXR1KCZydC0+dS5kc3QpIDwgYXJnLT5tdHUgJiYKLQkgICAgICBkc3RfbXR1KCZydC0+dS5kc3QpID09IGlkZXYtPmNuZi5tdHU2KSkpIHsKLQkJcnQtPnUuZHN0Lm1ldHJpY3NbUlRBWF9NVFUtMV0gPSBhcmctPm10dTsKLQkJcnQtPnUuZHN0Lm1ldHJpY3NbUlRBWF9BRFZNU1MtMV0gPSBpcHY2X2Fkdm1zcyhuZXQsIGFyZy0+bXR1KTsKKwkgICAgIWRzdF9tZXRyaWNfbG9ja2VkKCZydC0+ZHN0LCBSVEFYX01UVSkgJiYKKwkgICAgKGRzdF9tdHUoJnJ0LT5kc3QpID49IGFyZy0+bXR1IHx8CisJICAgICAoZHN0X210dSgmcnQtPmRzdCkgPCBhcmctPm10dSAmJgorCSAgICAgIGRzdF9tdHUoJnJ0LT5kc3QpID09IGlkZXYtPmNuZi5tdHU2KSkpIHsKKwkJcnQtPmRzdC5tZXRyaWNzW1JUQVhfTVRVLTFdID0gYXJnLT5tdHU7CisJCXJ0LT5kc3QubWV0cmljc1tSVEFYX0FEVk1TUy0xXSA9IGlwdjZfYWR2bXNzKG5ldCwgYXJnLT5tdHUpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTIyNTIsMjAgKzIyNDksMjAgQEAKICNlbmRpZgogCQkJTkxBX1BVVF9VMzIoc2tiLCBSVEFfSUlGLCBpaWYpOwogCX0gZWxzZSBpZiAoZHN0KSB7Ci0JCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBpcDZfZHN0X2lkZXYoJnJ0LT51LmRzdCk7CisJCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBpcDZfZHN0X2lkZXYoJnJ0LT5kc3QpOwogCQlzdHJ1Y3QgaW42X2FkZHIgc2FkZHJfYnVmOwogCQlpZiAoaXB2Nl9kZXZfZ2V0X3NhZGRyKG5ldCwgaWRldiA/IGlkZXYtPmRldiA6IE5VTEwsCiAJCQkJICAgICAgIGRzdCwgMCwgJnNhZGRyX2J1ZikgPT0gMCkKIAkJCU5MQV9QVVQoc2tiLCBSVEFfUFJFRlNSQywgMTYsICZzYWRkcl9idWYpOwogCX0KIAotCWlmIChydG5ldGxpbmtfcHV0X21ldHJpY3Moc2tiLCBydC0+dS5kc3QubWV0cmljcykgPCAwKQorCWlmIChydG5ldGxpbmtfcHV0X21ldHJpY3Moc2tiLCBydC0+ZHN0Lm1ldHJpY3MpIDwgMCkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQlpZiAocnQtPnUuZHN0Lm5laWdoYm91cikKLQkJTkxBX1BVVChza2IsIFJUQV9HQVRFV0FZLCAxNiwgJnJ0LT51LmRzdC5uZWlnaGJvdXItPnByaW1hcnlfa2V5KTsKKwlpZiAocnQtPmRzdC5uZWlnaGJvdXIpCisJCU5MQV9QVVQoc2tiLCBSVEFfR0FURVdBWSwgMTYsICZydC0+ZHN0Lm5laWdoYm91ci0+cHJpbWFyeV9rZXkpOwogCi0JaWYgKHJ0LT51LmRzdC5kZXYpCisJaWYgKHJ0LT5kc3QuZGV2KQogCQlOTEFfUFVUX1UzMihza2IsIFJUQV9PSUYsIHJ0LT5ydDZpX2Rldi0+aWZpbmRleCk7CiAKIAlOTEFfUFVUX1UzMihza2IsIFJUQV9QUklPUklUWSwgcnQtPnJ0NmlfbWV0cmljKTsKQEAgLTIyNzcsOCArMjI3NCw4IEBACiAJZWxzZQogCQlleHBpcmVzID0gSU5UX01BWDsKIAotCWlmIChydG5sX3B1dF9jYWNoZWluZm8oc2tiLCAmcnQtPnUuZHN0LCAwLCAwLCAwLAotCQkJICAgICAgIGV4cGlyZXMsIHJ0LT51LmRzdC5lcnJvcikgPCAwKQorCWlmIChydG5sX3B1dF9jYWNoZWluZm8oc2tiLCAmcnQtPmRzdCwgMCwgMCwgMCwKKwkJCSAgICAgICBleHBpcmVzLCBydC0+ZHN0LmVycm9yKSA8IDApCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCiAJcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CkBAIC0yMzY0LDcgKzIzNjEsNyBAQAogCXNrYl9yZXNlcnZlKHNrYiwgTUFYX0hFQURFUiArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpOwogCiAJcnQgPSAoc3RydWN0IHJ0Nl9pbmZvKikgaXA2X3JvdXRlX291dHB1dChuZXQsIE5VTEwsICZmbCk7Ci0Jc2tiX2RzdF9zZXQoc2tiLCAmcnQtPnUuZHN0KTsKKwlza2JfZHN0X3NldChza2IsICZydC0+ZHN0KTsKIAogCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCAmZmwuZmw2X2RzdCwgJmZsLmZsNl9zcmMsIGlpZiwKIAkJCSAgICBSVE1fTkVXUk9VVEUsIE5FVExJTktfQ0IoaW5fc2tiKS5waWQsCkBAIC0yNDE2LDEyICsyNDEzLDEyIEBACiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwogCiAJaWYgKGV2ZW50ID09IE5FVERFVl9SRUdJU1RFUiAmJiAoZGV2LT5mbGFncyAmIElGRl9MT09QQkFDSykpIHsKLQkJbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5LT51LmRzdC5kZXYgPSBkZXY7CisJCW5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeS0+ZHN0LmRldiA9IGRldjsKIAkJbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5LT5ydDZpX2lkZXYgPSBpbjZfZGV2X2dldChkZXYpOwogI2lmZGVmIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUwotCQluZXQtPmlwdjYuaXA2X3Byb2hpYml0X2VudHJ5LT51LmRzdC5kZXYgPSBkZXY7CisJCW5ldC0+aXB2Ni5pcDZfcHJvaGliaXRfZW50cnktPmRzdC5kZXYgPSBkZXY7CiAJCW5ldC0+aXB2Ni5pcDZfcHJvaGliaXRfZW50cnktPnJ0NmlfaWRldiA9IGluNl9kZXZfZ2V0KGRldik7Ci0JCW5ldC0+aXB2Ni5pcDZfYmxrX2hvbGVfZW50cnktPnUuZHN0LmRldiA9IGRldjsKKwkJbmV0LT5pcHY2LmlwNl9ibGtfaG9sZV9lbnRyeS0+ZHN0LmRldiA9IGRldjsKIAkJbmV0LT5pcHY2LmlwNl9ibGtfaG9sZV9lbnRyeS0+cnQ2aV9pZGV2ID0gaW42X2Rldl9nZXQoZGV2KTsKICNlbmRpZgogCX0KQEAgLTI0NjQsOCArMjQ2MSw4IEBACiAJCXNlcV9wdXRzKG0sICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIpOwogCX0KIAlzZXFfcHJpbnRmKG0sICIgJTA4eCAlMDh4ICUwOHggJTA4eCAlOHNcbiIsCi0JCSAgIHJ0LT5ydDZpX21ldHJpYywgYXRvbWljX3JlYWQoJnJ0LT51LmRzdC5fX3JlZmNudCksCi0JCSAgIHJ0LT51LmRzdC5fX3VzZSwgcnQtPnJ0NmlfZmxhZ3MsCisJCSAgIHJ0LT5ydDZpX21ldHJpYywgYXRvbWljX3JlYWQoJnJ0LT5kc3QuX19yZWZjbnQpLAorCQkgICBydC0+ZHN0Ll9fdXNlLCBydC0+cnQ2aV9mbGFncywKIAkJICAgcnQtPnJ0NmlfZGV2ID8gcnQtPnJ0NmlfZGV2LT5uYW1lIDogIiIpOwogCXJldHVybiAwOwogfQpAQCAtMjY0Niw5ICsyNjQzLDkgQEAKIAkJCQkJICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZXQtPmlwdjYuaXA2X251bGxfZW50cnkpCiAJCWdvdG8gb3V0X2lwNl9kc3Rfb3BzOwotCW5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeS0+dS5kc3QucGF0aCA9CisJbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5LT5kc3QucGF0aCA9CiAJCShzdHJ1Y3QgZHN0X2VudHJ5ICopbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5OwotCW5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeS0+dS5kc3Qub3BzID0gJm5ldC0+aXB2Ni5pcDZfZHN0X29wczsKKwluZXQtPmlwdjYuaXA2X251bGxfZW50cnktPmRzdC5vcHMgPSAmbmV0LT5pcHY2LmlwNl9kc3Rfb3BzOwogCiAjaWZkZWYgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTCiAJbmV0LT5pcHY2LmlwNl9wcm9oaWJpdF9lbnRyeSA9IGttZW1kdXAoJmlwNl9wcm9oaWJpdF9lbnRyeV90ZW1wbGF0ZSwKQEAgLTI2NTYsMTggKzI2NTMsMTggQEAKIAkJCQkJICAgICAgIEdGUF9LRVJORUwpOwogCWlmICghbmV0LT5pcHY2LmlwNl9wcm9oaWJpdF9lbnRyeSkKIAkJZ290byBvdXRfaXA2X251bGxfZW50cnk7Ci0JbmV0LT5pcHY2LmlwNl9wcm9oaWJpdF9lbnRyeS0+dS5kc3QucGF0aCA9CisJbmV0LT5pcHY2LmlwNl9wcm9oaWJpdF9lbnRyeS0+ZHN0LnBhdGggPQogCQkoc3RydWN0IGRzdF9lbnRyeSAqKW5ldC0+aXB2Ni5pcDZfcHJvaGliaXRfZW50cnk7Ci0JbmV0LT5pcHY2LmlwNl9wcm9oaWJpdF9lbnRyeS0+dS5kc3Qub3BzID0gJm5ldC0+aXB2Ni5pcDZfZHN0X29wczsKKwluZXQtPmlwdjYuaXA2X3Byb2hpYml0X2VudHJ5LT5kc3Qub3BzID0gJm5ldC0+aXB2Ni5pcDZfZHN0X29wczsKIAogCW5ldC0+aXB2Ni5pcDZfYmxrX2hvbGVfZW50cnkgPSBrbWVtZHVwKCZpcDZfYmxrX2hvbGVfZW50cnlfdGVtcGxhdGUsCiAJCQkJCSAgICAgICBzaXplb2YoKm5ldC0+aXB2Ni5pcDZfYmxrX2hvbGVfZW50cnkpLAogCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZXQtPmlwdjYuaXA2X2Jsa19ob2xlX2VudHJ5KQogCQlnb3RvIG91dF9pcDZfcHJvaGliaXRfZW50cnk7Ci0JbmV0LT5pcHY2LmlwNl9ibGtfaG9sZV9lbnRyeS0+dS5kc3QucGF0aCA9CisJbmV0LT5pcHY2LmlwNl9ibGtfaG9sZV9lbnRyeS0+ZHN0LnBhdGggPQogCQkoc3RydWN0IGRzdF9lbnRyeSAqKW5ldC0+aXB2Ni5pcDZfYmxrX2hvbGVfZW50cnk7Ci0JbmV0LT5pcHY2LmlwNl9ibGtfaG9sZV9lbnRyeS0+dS5kc3Qub3BzID0gJm5ldC0+aXB2Ni5pcDZfZHN0X29wczsKKwluZXQtPmlwdjYuaXA2X2Jsa19ob2xlX2VudHJ5LT5kc3Qub3BzID0gJm5ldC0+aXB2Ni5pcDZfZHN0X29wczsKICNlbmRpZgogCiAJbmV0LT5pcHY2LnN5c2N0bC5mbHVzaF9kZWxheSA9IDA7CkBAIC0yNzQyLDEyICsyNzM5LDEyIEBACiAJLyogUmVnaXN0ZXJpbmcgb2YgdGhlIGxvb3BiYWNrIGlzIGRvbmUgYmVmb3JlIHRoaXMgcG9ydGlvbiBvZiBjb2RlLAogCSAqIHRoZSBsb29wYmFjayByZWZlcmVuY2UgaW4gcnQ2X2luZm8gd2lsbCBub3QgYmUgdGFrZW4sIGRvIGl0CiAJICogbWFudWFsbHkgZm9yIGluaXRfbmV0ICovCi0JaW5pdF9uZXQuaXB2Ni5pcDZfbnVsbF9lbnRyeS0+dS5kc3QuZGV2ID0gaW5pdF9uZXQubG9vcGJhY2tfZGV2OworCWluaXRfbmV0LmlwdjYuaXA2X251bGxfZW50cnktPmRzdC5kZXYgPSBpbml0X25ldC5sb29wYmFja19kZXY7CiAJaW5pdF9uZXQuaXB2Ni5pcDZfbnVsbF9lbnRyeS0+cnQ2aV9pZGV2ID0gaW42X2Rldl9nZXQoaW5pdF9uZXQubG9vcGJhY2tfZGV2KTsKICAgI2lmZGVmIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUwotCWluaXRfbmV0LmlwdjYuaXA2X3Byb2hpYml0X2VudHJ5LT51LmRzdC5kZXYgPSBpbml0X25ldC5sb29wYmFja19kZXY7CisJaW5pdF9uZXQuaXB2Ni5pcDZfcHJvaGliaXRfZW50cnktPmRzdC5kZXYgPSBpbml0X25ldC5sb29wYmFja19kZXY7CiAJaW5pdF9uZXQuaXB2Ni5pcDZfcHJvaGliaXRfZW50cnktPnJ0NmlfaWRldiA9IGluNl9kZXZfZ2V0KGluaXRfbmV0Lmxvb3BiYWNrX2Rldik7Ci0JaW5pdF9uZXQuaXB2Ni5pcDZfYmxrX2hvbGVfZW50cnktPnUuZHN0LmRldiA9IGluaXRfbmV0Lmxvb3BiYWNrX2RldjsKKwlpbml0X25ldC5pcHY2LmlwNl9ibGtfaG9sZV9lbnRyeS0+ZHN0LmRldiA9IGluaXRfbmV0Lmxvb3BiYWNrX2RldjsKIAlpbml0X25ldC5pcHY2LmlwNl9ibGtfaG9sZV9lbnRyeS0+cnQ2aV9pZGV2ID0gaW42X2Rldl9nZXQoaW5pdF9uZXQubG9vcGJhY2tfZGV2KTsKICAgI2VuZGlmCiAJcmV0ID0gZmliNl9pbml0KCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zaXQuYyBiL25ldC9pcHY2L3NpdC5jCmluZGV4IGU1MWU2NTAuLjQ2OTljZDMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3NpdC5jCisrKyBiL25ldC9pcHY2L3NpdC5jCkBAIC0yNDksOCArMjQ5LDYgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIERFRklORV9TUElOTE9DSyhpcGlwNl9wcmxfbG9jayk7Ci0KICNkZWZpbmUgZm9yX2VhY2hfcHJsX3JjdShzdGFydCkJCQlcCiAJZm9yIChwcmwgPSByY3VfZGVyZWZlcmVuY2Uoc3RhcnQpOwlcCiAJICAgICBwcmw7CQkJCVwKQEAgLTM0MCw3ICszMzgsNyBAQAogCWlmIChhLT5hZGRyID09IGh0b25sKElOQUREUl9BTlkpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNwaW5fbG9jaygmaXBpcDZfcHJsX2xvY2spOworCUFTU0VSVF9SVE5MKCk7CiAKIAlmb3IgKHAgPSB0LT5wcmw7IHA7IHAgPSBwLT5uZXh0KSB7CiAJCWlmIChwLT5hZGRyID09IGEtPmFkZHIpIHsKQEAgLTM3MCw3ICszNjgsNiBAQAogCXQtPnBybF9jb3VudCsrOwogCXJjdV9hc3NpZ25fcG9pbnRlcih0LT5wcmwsIHApOwogb3V0OgotCXNwaW5fdW5sb2NrKCZpcGlwNl9wcmxfbG9jayk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMzk3LDcgKzM5NCw3IEBACiAJc3RydWN0IGlwX3R1bm5lbF9wcmxfZW50cnkgKngsICoqcDsKIAlpbnQgZXJyID0gMDsKIAotCXNwaW5fbG9jaygmaXBpcDZfcHJsX2xvY2spOworCUFTU0VSVF9SVE5MKCk7CiAKIAlpZiAoYSAmJiBhLT5hZGRyICE9IGh0b25sKElOQUREUl9BTlkpKSB7CiAJCWZvciAocCA9ICZ0LT5wcmw7ICpwOyBwID0gJigqcCktPm5leHQpIHsKQEAgLTQxOSw3ICs0MTYsNiBAQAogCQl9CiAJfQogb3V0OgotCXNwaW5fdW5sb2NrKCZpcGlwNl9wcmxfbG9jayk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNzE2LDcgKzcxMiw3IEBACiAJCXN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycysrOwogCQlnb3RvIHR4X2Vycm9yX2ljbXA7CiAJfQotCXRkZXYgPSBydC0+dS5kc3QuZGV2OworCXRkZXYgPSBydC0+ZHN0LmRldjsKIAogCWlmICh0ZGV2ID09IGRldikgewogCQlpcF9ydF9wdXQocnQpOwpAQCAtNzI1LDcgKzcyMSw3IEBACiAJfQogCiAJaWYgKGRmKSB7Ci0JCW10dSA9IGRzdF9tdHUoJnJ0LT51LmRzdCkgLSBzaXplb2Yoc3RydWN0IGlwaGRyKTsKKwkJbXR1ID0gZHN0X210dSgmcnQtPmRzdCkgLSBzaXplb2Yoc3RydWN0IGlwaGRyKTsKIAogCQlpZiAobXR1IDwgNjgpIHsKIAkJCXN0YXRzLT5jb2xsaXNpb25zKys7CkBAIC03ODQsNyArNzgwLDcgQEAKIAltZW1zZXQoJihJUENCKHNrYiktPm9wdCksIDAsIHNpemVvZihJUENCKHNrYiktPm9wdCkpOwogCUlQQ0Ioc2tiKS0+ZmxhZ3MgPSAwOwogCXNrYl9kc3RfZHJvcChza2IpOwotCXNrYl9kc3Rfc2V0KHNrYiwgJnJ0LT51LmRzdCk7CisJc2tiX2RzdF9zZXQoc2tiLCAmcnQtPmRzdCk7CiAKIAkvKgogCSAqCVB1c2ggZG93biBhbmQgaW5zdGFsbCB0aGUgSVBJUCBoZWFkZXIuCkBAIC04MzMsNyArODI5LDcgQEAKIAkJCQkgICAgLnByb3RvID0gSVBQUk9UT19JUFY2IH07CiAJCXN0cnVjdCBydGFibGUgKnJ0OwogCQlpZiAoIWlwX3JvdXRlX291dHB1dF9rZXkoZGV2X25ldChkZXYpLCAmcnQsICZmbCkpIHsKLQkJCXRkZXYgPSBydC0+dS5kc3QuZGV2OworCQkJdGRldiA9IHJ0LT5kc3QuZGV2OwogCQkJaXBfcnRfcHV0KHJ0KTsKIAkJfQogCQlkZXYtPmZsYWdzIHw9IElGRl9QT0lOVE9QT0lOVDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3N5bmNvb2tpZXMuYyBiL25ldC9pcHY2L3N5bmNvb2tpZXMuYwppbmRleCAzNGQxZjA2Li4wOWZkMzRmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zeW5jb29raWVzLmMKKysrIGIvbmV0L2lwdjYvc3luY29va2llcy5jCkBAIC0yNywyOCArMjcsMTcgQEAKICNkZWZpbmUgQ09PS0lFQklUUyAyNAkvKiBVcHBlciBiaXRzIHN0b3JlIGNvdW50ICovCiAjZGVmaW5lIENPT0tJRU1BU0sgKCgoX191MzIpMSA8PCBDT09LSUVCSVRTKSAtIDEpCiAKLS8qCi0gKiBUaGlzIHRhYmxlIGhhcyB0byBiZSBzb3J0ZWQgYW5kIHRlcm1pbmF0ZWQgd2l0aCAoX191MTYpLTEuCi0gKiBYWFggZ2VuZXJhdGUgYSBiZXR0ZXIgdGFibGUuCi0gKiBVbnJlc29sdmVkIElzc3VlczogSElQUEkgd2l0aCBhIDY0ayBNU1MgaXMgbm90IHdlbGwgc3VwcG9ydGVkLgotICoKLSAqIFRha2VuIGRpcmVjdGx5IGZyb20gaXB2NCBpbXBsZW1lbnRhdGlvbi4KLSAqIFNob3VsZCB0aGlzIGxpc3QgYmUgbW9kaWZpZWQgZm9yIGlwdjYgdXNlIG9yIGlzIGl0IGNsb3NlIGVub3VnaD8KLSAqIHJmYyAyNDYwIDguMyBzdWdnZXN0cyBtc3MgdmFsdWVzIDIwIGJ5dGVzIGxlc3MgdGhhbiBpcHY0IGNvdW50ZXJwYXJ0Ci0gKi8KKy8qIFRhYmxlIG11c3QgYmUgc29ydGVkLiAqLwogc3RhdGljIF9fdTE2IGNvbnN0IG1zc3RhYltdID0gewotCTY0IC0gMSwKLQkyNTYgLSAxLAotCTUxMiAtIDEsCi0JNTM2IC0gMSwKLQkxMDI0IC0gMSwKLQkxNDQwIC0gMSwKLQkxNDYwIC0gMSwKLQk0MzEyIC0gMSwKLQkoX191MTYpLTEKKwk2NCwKKwk1MTIsCisJNTM2LAorCTEyODAgLSA2MCwKKwkxNDgwIC0gNjAsCisJMTUwMCAtIDYwLAorCTQ0NjAgLSA2MCwKKwk5MDAwIC0gNjAsCiB9OwotLyogVGhlIG51bWJlciBkb2Vzbid0IGluY2x1ZGUgdGhlIC0xIHRlcm1pbmF0b3IgKi8KLSNkZWZpbmUgTlVNX01TUyAoQVJSQVlfU0laRShtc3N0YWIpIC0gMSkKIAogLyoKICAqIFRoaXMgKG1pc25hbWVkKSB2YWx1ZSBpcyB0aGUgYWdlIG9mIHN5bmNvb2tpZSB3aGljaCBpcyBwZXJtaXR0ZWQuCkBAIC0xMzQsOSArMTIzLDExIEBACiAKIAl0Y3Bfc3lucV9vdmVyZmxvdyhzayk7CiAKLQlmb3IgKG1zc2luZCA9IDA7IG1zcyA+IG1zc3RhYlttc3NpbmQgKyAxXTsgbXNzaW5kKyspCi0JCTsKLQkqbXNzcCA9IG1zc3RhYlttc3NpbmRdICsgMTsKKwlmb3IgKG1zc2luZCA9IEFSUkFZX1NJWkUobXNzdGFiKSAtIDE7IG1zc2luZCA7IG1zc2luZC0tKQorCQlpZiAobXNzID49IG1zc3RhYlttc3NpbmRdKQorCQkJYnJlYWs7CisKKwkqbXNzcCA9IG1zc3RhYlttc3NpbmRdOwogCiAJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9TWU5DT09LSUVTU0VOVCk7CiAKQEAgLTE1NCw3ICsxNDUsNyBAQAogCQkJCQkgICAgdGgtPnNvdXJjZSwgdGgtPmRlc3QsIHNlcSwKIAkJCQkJICAgIGppZmZpZXMgLyAoSFogKiA2MCksIENPVU5URVJfVFJJRVMpOwogCi0JcmV0dXJuIG1zc2luZCA8IE5VTV9NU1MgPyBtc3N0YWJbbXNzaW5kXSArIDEgOiAwOworCXJldHVybiBtc3NpbmQgPCBBUlJBWV9TSVpFKG1zc3RhYikgPyBtc3N0YWJbbXNzaW5kXSA6IDA7CiB9CiAKIHN0cnVjdCBzb2NrICpjb29raWVfdjZfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMTczLDggKzE2NCw5IEBACiAJaW50IG1zczsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CiAJX191OCByY3Zfd3NjYWxlOworCWJvb2wgZWNuX29rOwogCi0JaWYgKCFzeXNjdGxfdGNwX3N5bmNvb2tpZXMgfHwgIXRoLT5hY2spCisJaWYgKCFzeXNjdGxfdGNwX3N5bmNvb2tpZXMgfHwgIXRoLT5hY2sgfHwgdGgtPnJzdCkKIAkJZ290byBvdXQ7CiAKIAlpZiAodGNwX3N5bnFfbm9fcmVjZW50X292ZXJmbG93KHNrKSB8fApAQCAtMTg5LDggKzE4MSw4IEBACiAJbWVtc2V0KCZ0Y3Bfb3B0LCAwLCBzaXplb2YodGNwX29wdCkpOwogCXRjcF9wYXJzZV9vcHRpb25zKHNrYiwgJnRjcF9vcHQsICZoYXNoX2xvY2F0aW9uLCAwKTsKIAotCWlmICh0Y3Bfb3B0LnNhd190c3RhbXApCi0JCWNvb2tpZV9jaGVja190aW1lc3RhbXAoJnRjcF9vcHQpOworCWlmICghY29va2llX2NoZWNrX3RpbWVzdGFtcCgmdGNwX29wdCwgJmVjbl9vaykpCisJCWdvdG8gb3V0OwogCiAJcmV0ID0gTlVMTDsKIAlyZXEgPSBpbmV0Nl9yZXFza19hbGxvYygmdGNwNl9yZXF1ZXN0X3NvY2tfb3BzKTsKQEAgLTIyNCw5ICsyMTYsOCBAQAogCiAJcmVxLT5leHBpcmVzID0gMFVMOwogCXJlcS0+cmV0cmFucyA9IDA7Ci0JaXJlcS0+ZWNuX29rCQk9IDA7CisJaXJlcS0+ZWNuX29rCQk9IGVjbl9vazsKIAlpcmVxLT5zbmRfd3NjYWxlCT0gdGNwX29wdC5zbmRfd3NjYWxlOwotCWlyZXEtPnJjdl93c2NhbGUJPSB0Y3Bfb3B0LnJjdl93c2NhbGU7CiAJaXJlcS0+c2Fja19vawkJPSB0Y3Bfb3B0LnNhY2tfb2s7CiAJaXJlcS0+d3NjYWxlX29rCQk9IHRjcF9vcHQud3NjYWxlX29rOwogCWlyZXEtPnRzdGFtcF9vawkJPSB0Y3Bfb3B0LnNhd190c3RhbXA7CkBAIC0yNDAsMTcgKzIzMSwxMiBAQAogCSAqIG1lIGlmIHRoZXJlIGlzIGEgcHJlZmVycmVkIHdheS4KIAkgKi8KIAl7Ci0JCXN0cnVjdCBpbjZfYWRkciAqZmluYWxfcCA9IE5VTEwsIGZpbmFsOworCQlzdHJ1Y3QgaW42X2FkZHIgKmZpbmFsX3AsIGZpbmFsOwogCQlzdHJ1Y3QgZmxvd2kgZmw7CiAJCW1lbXNldCgmZmwsIDAsIHNpemVvZihmbCkpOwogCQlmbC5wcm90byA9IElQUFJPVE9fVENQOwogCQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgJmlyZXE2LT5ybXRfYWRkcik7Ci0JCWlmIChucC0+b3B0ICYmIG5wLT5vcHQtPnNyY3J0KSB7Ci0JCQlzdHJ1Y3QgcnQwX2hkciAqcnQwID0gKHN0cnVjdCBydDBfaGRyICopIG5wLT5vcHQtPnNyY3J0OwotCQkJaXB2Nl9hZGRyX2NvcHkoJmZpbmFsLCAmZmwuZmw2X2RzdCk7Ci0JCQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgcnQwLT5hZGRyKTsKLQkJCWZpbmFsX3AgPSAmZmluYWw7Ci0JCX0KKwkJZmluYWxfcCA9IGZsNl91cGRhdGVfZHN0KCZmbCwgbnAtPm9wdCwgJmZpbmFsKTsKIAkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9zcmMsICZpcmVxNi0+bG9jX2FkZHIpOwogCQlmbC5vaWYgPSBzay0+c2tfYm91bmRfZGV2X2lmOwogCQlmbC5tYXJrID0gc2stPnNrX21hcms7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwppbmRleCAyYjdjM2ExLi5mZTZkNDA0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jCisrKyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKQEAgLTEyOSw3ICsxMjksNyBAQAogCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7Ci0Jc3RydWN0IGluNl9hZGRyICpzYWRkciA9IE5VTEwsICpmaW5hbF9wID0gTlVMTCwgZmluYWw7CisJc3RydWN0IGluNl9hZGRyICpzYWRkciA9IE5VTEwsICpmaW5hbF9wLCBmaW5hbDsKIAlzdHJ1Y3QgZmxvd2kgZmw7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0OwogCWludCBhZGRyX3R5cGU7CkBAIC0yNTAsMTIgKzI1MCw3IEBACiAJZmwuZmxfaXBfZHBvcnQgPSB1c2luLT5zaW42X3BvcnQ7CiAJZmwuZmxfaXBfc3BvcnQgPSBpbmV0LT5pbmV0X3Nwb3J0OwogCi0JaWYgKG5wLT5vcHQgJiYgbnAtPm9wdC0+c3JjcnQpIHsKLQkJc3RydWN0IHJ0MF9oZHIgKnJ0MCA9IChzdHJ1Y3QgcnQwX2hkciAqKW5wLT5vcHQtPnNyY3J0OwotCQlpcHY2X2FkZHJfY29weSgmZmluYWwsICZmbC5mbDZfZHN0KTsKLQkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9kc3QsIHJ0MC0+YWRkcik7Ci0JCWZpbmFsX3AgPSAmZmluYWw7Ci0JfQorCWZpbmFsX3AgPSBmbDZfdXBkYXRlX2RzdCgmZmwsIG5wLT5vcHQsICZmaW5hbCk7CiAKIAlzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KHNrLCAmZmwpOwogCkBAIC00NzcsNyArNDcyLDcgQEAKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CiAJc3RydWN0IHNrX2J1ZmYgKiBza2I7CiAJc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQgPSBOVUxMOwotCXN0cnVjdCBpbjZfYWRkciAqIGZpbmFsX3AgPSBOVUxMLCBmaW5hbDsKKwlzdHJ1Y3QgaW42X2FkZHIgKiBmaW5hbF9wLCBmaW5hbDsKIAlzdHJ1Y3QgZmxvd2kgZmw7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0OwogCWludCBlcnIgPSAtMTsKQEAgLTQ5NCwxMiArNDg5LDcgQEAKIAlzZWN1cml0eV9yZXFfY2xhc3NpZnlfZmxvdyhyZXEsICZmbCk7CiAKIAlvcHQgPSBucC0+b3B0OwotCWlmIChvcHQgJiYgb3B0LT5zcmNydCkgewotCQlzdHJ1Y3QgcnQwX2hkciAqcnQwID0gKHN0cnVjdCBydDBfaGRyICopIG9wdC0+c3JjcnQ7Ci0JCWlwdjZfYWRkcl9jb3B5KCZmaW5hbCwgJmZsLmZsNl9kc3QpOwotCQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgcnQwLT5hZGRyKTsKLQkJZmluYWxfcCA9ICZmaW5hbDsKLQl9CisJZmluYWxfcCA9IGZsNl91cGRhdGVfZHN0KCZmbCwgb3B0LCAmZmluYWwpOwogCiAJZXJyID0gaXA2X2RzdF9sb29rdXAoc2ssICZkc3QsICZmbCk7CiAJaWYgKGVycikKQEAgLTExNjcsNyArMTE1Nyw3IEBACiAJfQogCiAjaWZkZWYgQ09ORklHX1NZTl9DT09LSUVTCi0JaWYgKCF0aC0+cnN0ICYmICF0aC0+c3luICYmIHRoLT5hY2spCisJaWYgKCF0aC0+c3luKQogCQlzayA9IGNvb2tpZV92Nl9jaGVjayhzaywgc2tiKTsKICNlbmRpZgogCXJldHVybiBzazsKQEAgLTEyNzksMTMgKzEyNjksMTAgQEAKIAl0cmVxID0gaW5ldDZfcnNrKHJlcSk7CiAJaXB2Nl9hZGRyX2NvcHkoJnRyZXEtPnJtdF9hZGRyLCAmaXB2Nl9oZHIoc2tiKS0+c2FkZHIpOwogCWlwdjZfYWRkcl9jb3B5KCZ0cmVxLT5sb2NfYWRkciwgJmlwdjZfaGRyKHNrYiktPmRhZGRyKTsKLQlpZiAoIXdhbnRfY29va2llKQorCWlmICghd2FudF9jb29raWUgfHwgdG1wX29wdC50c3RhbXBfb2spCiAJCVRDUF9FQ05fY3JlYXRlX3JlcXVlc3QocmVxLCB0Y3BfaGRyKHNrYikpOwogCi0JaWYgKHdhbnRfY29va2llKSB7Ci0JCWlzbiA9IGNvb2tpZV92Nl9pbml0X3NlcXVlbmNlKHNrLCBza2IsICZyZXEtPm1zcyk7Ci0JCXJlcS0+Y29va2llX3RzID0gdG1wX29wdC50c3RhbXBfb2s7Ci0JfSBlbHNlIGlmICghaXNuKSB7CisJaWYgKCFpc24pIHsKIAkJaWYgKGlwdjZfb3B0X2FjY2VwdGVkKHNrLCBza2IpIHx8CiAJCSAgICBucC0+cnhvcHQuYml0cy5yeGluZm8gfHwgbnAtPnJ4b3B0LmJpdHMucnhvaW5mbyB8fAogCQkgICAgbnAtPnJ4b3B0LmJpdHMucnhobGltIHx8IG5wLT5yeG9wdC5iaXRzLnJ4b2hsaW0pIHsKQEAgLTEyOTgsOCArMTI4NSwxMiBAQAogCQlpZiAoIXNrLT5za19ib3VuZF9kZXZfaWYgJiYKIAkJICAgIGlwdjZfYWRkcl90eXBlKCZ0cmVxLT5ybXRfYWRkcikgJiBJUFY2X0FERFJfTElOS0xPQ0FMKQogCQkJdHJlcS0+aWlmID0gaW5ldDZfaWlmKHNrYik7Ci0KLQkJaXNuID0gdGNwX3Y2X2luaXRfc2VxdWVuY2Uoc2tiKTsKKwkJaWYgKCF3YW50X2Nvb2tpZSkgeworCQkJaXNuID0gdGNwX3Y2X2luaXRfc2VxdWVuY2Uoc2tiKTsKKwkJfSBlbHNlIHsKKwkJCWlzbiA9IGNvb2tpZV92Nl9pbml0X3NlcXVlbmNlKHNrLCBza2IsICZyZXEtPm1zcyk7CisJCQlyZXEtPmNvb2tpZV90cyA9IHRtcF9vcHQudHN0YW1wX29rOworCQl9CiAJfQogCXRjcF9yc2socmVxKS0+c250X2lzbiA9IGlzbjsKIApAQCAtMTM5MiwxOCArMTM4MywxMyBAQAogCQlnb3RvIG91dF9vdmVyZmxvdzsKIAogCWlmIChkc3QgPT0gTlVMTCkgewotCQlzdHJ1Y3QgaW42X2FkZHIgKmZpbmFsX3AgPSBOVUxMLCBmaW5hbDsKKwkJc3RydWN0IGluNl9hZGRyICpmaW5hbF9wLCBmaW5hbDsKIAkJc3RydWN0IGZsb3dpIGZsOwogCiAJCW1lbXNldCgmZmwsIDAsIHNpemVvZihmbCkpOwogCQlmbC5wcm90byA9IElQUFJPVE9fVENQOwogCQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgJnRyZXEtPnJtdF9hZGRyKTsKLQkJaWYgKG9wdCAmJiBvcHQtPnNyY3J0KSB7Ci0JCQlzdHJ1Y3QgcnQwX2hkciAqcnQwID0gKHN0cnVjdCBydDBfaGRyICopIG9wdC0+c3JjcnQ7Ci0JCQlpcHY2X2FkZHJfY29weSgmZmluYWwsICZmbC5mbDZfZHN0KTsKLQkJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCBydDAtPmFkZHIpOwotCQkJZmluYWxfcCA9ICZmaW5hbDsKLQkJfQorCQlmaW5hbF9wID0gZmw2X3VwZGF0ZV9kc3QoJmZsLCBvcHQsICZmaW5hbCk7CiAJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfc3JjLCAmdHJlcS0+bG9jX2FkZHIpOwogCQlmbC5vaWYgPSBzay0+c2tfYm91bmRfZGV2X2lmOwogCQlmbC5tYXJrID0gc2stPnNrX21hcms7CkBAIC0yMTU2LDYgKzIxNDIsOCBAQAogCS5zZXRzb2Nrb3B0CQk9IHRjcF9zZXRzb2Nrb3B0LAogCS5nZXRzb2Nrb3B0CQk9IHRjcF9nZXRzb2Nrb3B0LAogCS5yZWN2bXNnCQk9IHRjcF9yZWN2bXNnLAorCS5zZW5kbXNnCQk9IHRjcF9zZW5kbXNnLAorCS5zZW5kcGFnZQkJPSB0Y3Bfc2VuZHBhZ2UsCiAJLmJhY2tsb2dfcmN2CQk9IHRjcF92Nl9kb19yY3YsCiAJLmhhc2gJCQk9IHRjcF92Nl9oYXNoLAogCS51bmhhc2gJCQk9IGluZXRfdW5oYXNoLApAQCAtMjE3NCw2ICsyMTYyLDcgQEAKIAkudHdza19wcm90CQk9ICZ0Y3A2X3RpbWV3YWl0X3NvY2tfb3BzLAogCS5yc2tfcHJvdAkJPSAmdGNwNl9yZXF1ZXN0X3NvY2tfb3BzLAogCS5oLmhhc2hpbmZvCQk9ICZ0Y3BfaGFzaGluZm8sCisJLm5vX2F1dG9iaW5kCQk9IHRydWUsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfc2V0c29ja29wdAk9IGNvbXBhdF90Y3Bfc2V0c29ja29wdCwKIAkuY29tcGF0X2dldHNvY2tvcHQJPSBjb21wYXRfdGNwX2dldHNvY2tvcHQsCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jCmluZGV4IDg3YmU1ODYuLjFkZDFhZmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3VkcC5jCisrKyBiL25ldC9pcHY2L3VkcC5jCkBAIC05MjcsNyArOTI3LDcgQEAKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwogCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSBtc2ctPm1zZ19uYW1lOwotCXN0cnVjdCBpbjZfYWRkciAqZGFkZHIsICpmaW5hbF9wID0gTlVMTCwgZmluYWw7CisJc3RydWN0IGluNl9hZGRyICpkYWRkciwgKmZpbmFsX3AsIGZpbmFsOwogCXN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0ID0gTlVMTDsKIAlzdHJ1Y3QgaXA2X2Zsb3dsYWJlbCAqZmxvd2xhYmVsID0gTlVMTDsKIAlzdHJ1Y3QgZmxvd2kgZmw7CkBAIC0xMDk3LDE0ICsxMDk3LDkgQEAKIAkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9zcmMsICZucC0+c2FkZHIpOwogCWZsLmZsX2lwX3Nwb3J0ID0gaW5ldC0+aW5ldF9zcG9ydDsKIAotCS8qIG1lcmdlIGlwNl9idWlsZF94bWl0IGZyb20gaXA2X291dHB1dCAqLwotCWlmIChvcHQgJiYgb3B0LT5zcmNydCkgewotCQlzdHJ1Y3QgcnQwX2hkciAqcnQwID0gKHN0cnVjdCBydDBfaGRyICopIG9wdC0+c3JjcnQ7Ci0JCWlwdjZfYWRkcl9jb3B5KCZmaW5hbCwgJmZsLmZsNl9kc3QpOwotCQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgcnQwLT5hZGRyKTsKLQkJZmluYWxfcCA9ICZmaW5hbDsKKwlmaW5hbF9wID0gZmw2X3VwZGF0ZV9kc3QoJmZsLCBvcHQsICZmaW5hbCk7CisJaWYgKGZpbmFsX3ApCiAJCWNvbm5lY3RlZCA9IDA7Ci0JfQogCiAJaWYgKCFmbC5vaWYgJiYgaXB2Nl9hZGRyX2lzX211bHRpY2FzdCgmZmwuZmw2X2RzdCkpIHsKIAkJZmwub2lmID0gbnAtPm1jYXN0X29pZjsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybmV0L2lybmV0X3BwcC5jIGIvbmV0L2lyZGEvaXJuZXQvaXJuZXRfcHBwLmMKaW5kZXggNmExYTIwMi4uODAwYmM1MyAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJuZXQvaXJuZXRfcHBwLmMKKysrIGIvbmV0L2lyZGEvaXJuZXQvaXJuZXRfcHBwLmMKQEAgLTUyNyw3ICs1MjcsNyBAQAogZGV2X2lybmV0X2Nsb3NlKHN0cnVjdCBpbm9kZSAqCWlub2RlLAogCQlzdHJ1Y3QgZmlsZSAqCWZpbGUpCiB7Ci0gIGlybmV0X3NvY2tldCAqCWFwID0gKHN0cnVjdCBpcm5ldF9zb2NrZXQgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOworICBpcm5ldF9zb2NrZXQgKglhcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAogICBERU5URVIoRlNfVFJBQ0UsICIoZmlsZT0weCVwLCBhcD0weCVwKVxuIiwKIAkgZmlsZSwgYXApOwpAQCAtNTY0LDcgKzU2NCw3IEBACiAJCXNpemVfdAkJY291bnQsCiAJCWxvZmZfdCAqCXBwb3MpCiB7Ci0gIGlybmV0X3NvY2tldCAqCWFwID0gKHN0cnVjdCBpcm5ldF9zb2NrZXQgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOworICBpcm5ldF9zb2NrZXQgKglhcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAogICBEUEFTUyhGU19UUkFDRSwgIihmaWxlPTB4JXAsIGFwPTB4JXAsIGNvdW50PSVaZClcbiIsCiAJZmlsZSwgYXAsIGNvdW50KTsKQEAgLTU4OCw3ICs1ODgsNyBAQAogCSAgICAgICBzaXplX3QJCWNvdW50LAogCSAgICAgICBsb2ZmX3QgKgkJcHBvcykKIHsKLSAgaXJuZXRfc29ja2V0ICoJYXAgPSAoc3RydWN0IGlybmV0X3NvY2tldCAqKSBmaWxlLT5wcml2YXRlX2RhdGE7CisgIGlybmV0X3NvY2tldCAqCWFwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCiAgIERQQVNTKEZTX1RSQUNFLCAiKGZpbGU9MHglcCwgYXA9MHglcCwgY291bnQ9JVpkKVxuIiwKIAlmaWxlLCBhcCwgY291bnQpOwpAQCAtNjA5LDcgKzYwOSw3IEBACiBkZXZfaXJuZXRfcG9sbChzdHJ1Y3QgZmlsZSAqCWZpbGUsCiAJICAgICAgIHBvbGxfdGFibGUgKgl3YWl0KQogewotICBpcm5ldF9zb2NrZXQgKglhcCA9IChzdHJ1Y3QgaXJuZXRfc29ja2V0ICopIGZpbGUtPnByaXZhdGVfZGF0YTsKKyAgaXJuZXRfc29ja2V0ICoJYXAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAgIHVuc2lnbmVkIGludAkJbWFzazsKIAogICBERU5URVIoRlNfVFJBQ0UsICIoZmlsZT0weCVwLCBhcD0weCVwKVxuIiwKQEAgLTYzOCw3ICs2MzgsNyBAQAogCQl1bnNpZ25lZCBpbnQJY21kLAogCQl1bnNpZ25lZCBsb25nCWFyZykKIHsKLSAgaXJuZXRfc29ja2V0ICoJYXAgPSAoc3RydWN0IGlybmV0X3NvY2tldCAqKSBmaWxlLT5wcml2YXRlX2RhdGE7CisgIGlybmV0X3NvY2tldCAqCWFwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogICBpbnQJCQllcnI7CiAgIGludAkJCXZhbDsKICAgdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcnR0cC5jIGIvbmV0L2lyZGEvaXJ0dHAuYwppbmRleCA0N2RiMWQ4Li4yODU3NjFlIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcnR0cC5jCisrKyBiL25ldC9pcmRhL2lydHRwLmMKQEAgLTE4NTMsMjMgKzE4NTMsMjMgQEAKIAkJICAgc2VsZi0+cmVtb3RlX2NyZWRpdCk7CiAJc2VxX3ByaW50ZihzZXEsICJzZW5kIGNyZWRpdDogJWRcbiIsCiAJCSAgIHNlbGYtPnNlbmRfY3JlZGl0KTsKLQlzZXFfcHJpbnRmKHNlcSwgIiAgdHggcGFja2V0czogJWxkLCAiLAorCXNlcV9wcmludGYoc2VxLCAiICB0eCBwYWNrZXRzOiAlbHUsICIsCiAJCSAgIHNlbGYtPnN0YXRzLnR4X3BhY2tldHMpOwotCXNlcV9wcmludGYoc2VxLCAicnggcGFja2V0czogJWxkLCAiLAorCXNlcV9wcmludGYoc2VxLCAicnggcGFja2V0czogJWx1LCAiLAogCQkgICBzZWxmLT5zdGF0cy5yeF9wYWNrZXRzKTsKLQlzZXFfcHJpbnRmKHNlcSwgInR4X3F1ZXVlIGxlbjogJWQgIiwKKwlzZXFfcHJpbnRmKHNlcSwgInR4X3F1ZXVlIGxlbjogJXUgIiwKIAkJICAgc2tiX3F1ZXVlX2xlbigmc2VsZi0+dHhfcXVldWUpKTsKLQlzZXFfcHJpbnRmKHNlcSwgInJ4X3F1ZXVlIGxlbjogJWRcbiIsCisJc2VxX3ByaW50ZihzZXEsICJyeF9xdWV1ZSBsZW46ICV1XG4iLAogCQkgICBza2JfcXVldWVfbGVuKCZzZWxmLT5yeF9xdWV1ZSkpOwogCXNlcV9wcmludGYoc2VxLCAiICB0eF9zZHVfYnVzeTogJXMsICIsCiAJCSAgIHNlbGYtPnR4X3NkdV9idXN5PyAiVFJVRSI6IkZBTFNFIik7CiAJc2VxX3ByaW50ZihzZXEsICJyeF9zZHVfYnVzeTogJXNcbiIsCiAJCSAgIHNlbGYtPnJ4X3NkdV9idXN5PyAiVFJVRSI6IkZBTFNFIik7Ci0Jc2VxX3ByaW50ZihzZXEsICIgIG1heF9zZWdfc2l6ZTogJWQsICIsCisJc2VxX3ByaW50ZihzZXEsICIgIG1heF9zZWdfc2l6ZTogJXUsICIsCiAJCSAgIHNlbGYtPm1heF9zZWdfc2l6ZSk7Ci0Jc2VxX3ByaW50ZihzZXEsICJ0eF9tYXhfc2R1X3NpemU6ICVkLCAiLAorCXNlcV9wcmludGYoc2VxLCAidHhfbWF4X3NkdV9zaXplOiAldSwgIiwKIAkJICAgc2VsZi0+dHhfbWF4X3NkdV9zaXplKTsKLQlzZXFfcHJpbnRmKHNlcSwgInJ4X21heF9zZHVfc2l6ZTogJWRcbiIsCisJc2VxX3ByaW50ZihzZXEsICJyeF9tYXhfc2R1X3NpemU6ICV1XG4iLAogCQkgICBzZWxmLT5yeF9tYXhfc2R1X3NpemUpOwogCiAJc2VxX3ByaW50ZihzZXEsICIgIFVzZWQgYnkgKCVzKVxuXG4iLApkaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvaXVjdi5jIGIvbmV0L2l1Y3YvaXVjdi5jCmluZGV4IGYyOGFkMmNjLi40OTljMDQ1IDEwMDY0NAotLS0gYS9uZXQvaXVjdi9pdWN2LmMKKysrIGIvbmV0L2l1Y3YvaXVjdi5jCkBAIC0xNDYzLDcgKzE0NjMsNyBAQAogCXUzMiByZXMzOwogCXU4ICBpcHBvbGxmZzsKIAl1OCAgcmVzNFszXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RhdGljIHZvaWQgaXVjdl9wYXRoX3BlbmRpbmcoc3RydWN0IGl1Y3ZfaXJxX2RhdGEgKmRhdGEpCiB7CkBAIC0xNTI0LDcgKzE1MjQsNyBAQAogCXUzMiByZXMzOwogCXU4ICBpcHBvbGxmZzsKIAl1OCAgcmVzNFszXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RhdGljIHZvaWQgaXVjdl9wYXRoX2NvbXBsZXRlKHN0cnVjdCBpdWN2X2lycV9kYXRhICpkYXRhKQogewpAQCAtMTU1NCw3ICsxNTU0LDcgQEAKIAl1MzIgcmVzNDsKIAl1OCAgaXBwb2xsZmc7CiAJdTggIHJlczVbM107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0YXRpYyB2b2lkIGl1Y3ZfcGF0aF9zZXZlcmVkKHN0cnVjdCBpdWN2X2lycV9kYXRhICpkYXRhKQogewpAQCAtMTU5MCw3ICsxNTkwLDcgQEAKIAl1MzIgcmVzNDsKIAl1OCAgaXBwb2xsZmc7CiAJdTggIHJlczVbM107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0YXRpYyB2b2lkIGl1Y3ZfcGF0aF9xdWllc2NlZChzdHJ1Y3QgaXVjdl9pcnFfZGF0YSAqZGF0YSkKIHsKQEAgLTE2MTgsNyArMTYxOCw3IEBACiAJdTMyIHJlczQ7CiAJdTggIGlwcG9sbGZnOwogCXU4ICByZXM1WzNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdGF0aWMgdm9pZCBpdWN2X3BhdGhfcmVzdW1lZChzdHJ1Y3QgaXVjdl9pcnFfZGF0YSAqZGF0YSkKIHsKQEAgLTE2NDksNyArMTY0OSw3IEBACiAJdTMyIGlwYmZsbjJmOwogCXU4ICBpcHBvbGxmZzsKIAl1OCAgcmVzMlszXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RhdGljIHZvaWQgaXVjdl9tZXNzYWdlX2NvbXBsZXRlKHN0cnVjdCBpdWN2X2lycV9kYXRhICpkYXRhKQogewpAQCAtMTY5NCw3ICsxNjk0LDcgQEAKIAl1MzIgaXBiZmxuMmY7CiAJdTggIGlwcG9sbGZnOwogCXU4ICByZXMyWzNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdGF0aWMgdm9pZCBpdWN2X21lc3NhZ2VfcGVuZGluZyhzdHJ1Y3QgaXVjdl9pcnFfZGF0YSAqZGF0YSkKIHsKZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfaXAuYyBiL25ldC9sMnRwL2wydHBfaXAuYwppbmRleCAwODUyNTEyLi4yMjZhMGFlIDEwMDY0NAotLS0gYS9uZXQvbDJ0cC9sMnRwX2lwLmMKKysrIGIvbmV0L2wydHAvbDJ0cF9pcC5jCkBAIC0zNDgsNyArMzQ4LDcgQEAKIAlzay0+c2tfc3RhdGUgPSBUQ1BfRVNUQUJMSVNIRUQ7CiAJaW5ldC0+aW5ldF9pZCA9IGppZmZpZXM7CiAKLQlza19kc3Rfc2V0KHNrLCAmcnQtPnUuZHN0KTsKKwlza19kc3Rfc2V0KHNrLCAmcnQtPmRzdCk7CiAKIAl3cml0ZV9sb2NrX2JoKCZsMnRwX2lwX2xvY2spOwogCWhsaXN0X2RlbF9pbml0KCZzay0+c2tfYmluZF9ub2RlKTsKQEAgLTQ5Niw5ICs0OTYsOSBAQAogCQkJaWYgKGlwX3JvdXRlX291dHB1dF9mbG93KHNvY2tfbmV0KHNrKSwgJnJ0LCAmZmwsIHNrLCAwKSkKIAkJCQlnb3RvIG5vX3JvdXRlOwogCQl9Ci0JCXNrX3NldHVwX2NhcHMoc2ssICZydC0+dS5kc3QpOworCQlza19zZXR1cF9jYXBzKHNrLCAmcnQtPmRzdCk7CiAJfQotCXNrYl9kc3Rfc2V0KHNrYiwgZHN0X2Nsb25lKCZydC0+dS5kc3QpKTsKKwlza2JfZHN0X3NldChza2IsIGRzdF9jbG9uZSgmcnQtPmRzdCkpOwogCiAJLyogUXVldWUgdGhlIHBhY2tldCB0byBJUCBmb3Igb3V0cHV0ICovCiAJcmMgPSBpcF9xdWV1ZV94bWl0KHNrYik7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvS2NvbmZpZyBiL25ldC9tYWM4MDIxMS9LY29uZmlnCmluZGV4IDhhOTFmNmMuLjRkNmY4NjUzIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvS2NvbmZpZworKysgYi9uZXQvbWFjODAyMTEvS2NvbmZpZwpAQCAtMzMsNiArMzMsMTMgQEAKIAktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSAnbWluc3RyZWwnIFRYIHJhdGUgY29udHJvbCBhbGdvcml0aG0KIAorY29uZmlnIE1BQzgwMjExX1JDX01JTlNUUkVMX0hUCisJYm9vbCAiTWluc3RyZWwgODAyLjExbiBzdXBwb3J0IiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gTUFDODAyMTFfUkNfTUlOU1RSRUwKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0tCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSAnbWluc3RyZWxfaHQnIFRYIHJhdGUgY29udHJvbCBhbGdvcml0aG0KKwogY2hvaWNlCiAJcHJvbXB0ICJEZWZhdWx0IHJhdGUgY29udHJvbCBhbGdvcml0aG0iCiAJZGVwZW5kcyBvbiBNQUM4MDIxMV9IQVNfUkMKQEAgLTYyLDYgKzY5LDcgQEAKIAogY29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFQKIAlzdHJpbmcKKwlkZWZhdWx0ICJtaW5zdHJlbF9odCIgaWYgTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTCAmJiBNQUM4MDIxMV9SQ19NSU5TVFJFTF9IVAogCWRlZmF1bHQgIm1pbnN0cmVsIiBpZiBNQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMCiAJZGVmYXVsdCAicGlkIiBpZiBNQUM4MDIxMV9SQ19ERUZBVUxUX1BJRAogCWRlZmF1bHQgIiIKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9NYWtlZmlsZSBiL25ldC9tYWM4MDIxMS9NYWtlZmlsZQppbmRleCA4NGI0OGJhLi5mZGI1NGU2IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvTWFrZWZpbGUKKysrIGIvbmV0L21hYzgwMjExL01ha2VmaWxlCkBAIC01MSw3ICs1MSwxMSBAQAogcmM4MDIxMV9taW5zdHJlbC15IDo9IHJjODAyMTFfbWluc3RyZWwubwogcmM4MDIxMV9taW5zdHJlbC0kKENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTKSArPSByYzgwMjExX21pbnN0cmVsX2RlYnVnZnMubwogCityYzgwMjExX21pbnN0cmVsX2h0LXkgOj0gcmM4MDIxMV9taW5zdHJlbF9odC5vCityYzgwMjExX21pbnN0cmVsX2h0LSQoQ09ORklHX01BQzgwMjExX0RFQlVHRlMpICs9IHJjODAyMTFfbWluc3RyZWxfaHRfZGVidWdmcy5vCisKIG1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX1JDX1BJRCkgKz0gJChyYzgwMjExX3BpZC15KQogbWFjODAyMTEtJChDT05GSUdfTUFDODAyMTFfUkNfTUlOU1RSRUwpICs9ICQocmM4MDIxMV9taW5zdHJlbC15KQorbWFjODAyMTEtJChDT05GSUdfTUFDODAyMTFfUkNfTUlOU1RSRUxfSFQpICs9ICQocmM4MDIxMV9taW5zdHJlbF9odC15KQogCiBjY2ZsYWdzLXkgKz0gLURfX0NIRUNLX0VORElBTl9fCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYWdnLXJ4LmMgYi9uZXQvbWFjODAyMTEvYWdnLXJ4LmMKaW5kZXggNmJiOWE5YS4uOTY1YjI3MiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2FnZy1yeC5jCisrKyBiL25ldC9tYWM4MDIxMS9hZ2ctcnguYwpAQCAtNiwzOSArNiw3MCBAQAogICogQ29weXJpZ2h0IDIwMDUtMjAwNiwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy4KICAqIENvcHlyaWdodCAyMDA2LTIwMDcJSmlyaSBCZW5jIDxqYmVuY0BzdXNlLmN6PgogICogQ29weXJpZ2h0IDIwMDcsIE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgotICogQ29weXJpZ2h0IDIwMDctMjAwOCwgSW50ZWwgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAyMDA3LTIwMTAsIEludGVsIENvcnBvcmF0aW9uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisvKioKKyAqIERPQzogUlggQS1NUERVIGFnZ3JlZ2F0aW9uCisgKgorICogQWdncmVnYXRpb24gb24gdGhlIFJYIHNpZGUgcmVxdWlyZXMgb25seSBpbXBsZW1lbnRpbmcgdGhlCisgKiBAYW1wZHVfYWN0aW9uIGNhbGxiYWNrIHRoYXQgaXMgaW52b2tlZCB0byBzdGFydC9zdG9wIGFueQorICogYmxvY2stYWNrIHNlc3Npb25zIGZvciBSWCBhZ2dyZWdhdGlvbi4KKyAqCisgKiBXaGVuIFJYIGFnZ3JlZ2F0aW9uIGlzIHN0YXJ0ZWQgYnkgdGhlIHBlZXIsIHRoZSBkcml2ZXIgaXMKKyAqIG5vdGlmaWVkIHZpYSBAYW1wZHVfYWN0aW9uIGZ1bmN0aW9uLCB3aXRoIHRoZQorICogJUlFRUU4MDIxMV9BTVBEVV9SWF9TVEFSVCBhY3Rpb24sIGFuZCBtYXkgcmVqZWN0IHRoZSByZXF1ZXN0CisgKiBpbiB3aGljaCBjYXNlIGEgbmVnYXRpdmUgcmVzcG9uc2UgaXMgc2VudCB0byB0aGUgcGVlciwgaWYgaXQKKyAqIGFjY2VwdHMgaXQgYSBwb3NpdGl2ZSByZXNwb25zZSBpcyBzZW50LgorICoKKyAqIFdoaWxlIHRoZSBzZXNzaW9uIGlzIGFjdGl2ZSwgdGhlIGRldmljZS9kcml2ZXIgYXJlIHJlcXVpcmVkCisgKiB0byBkZS1hZ2dyZWdhdGUgZnJhbWVzIGFuZCBwYXNzIHRoZW0gdXAgb25lIGJ5IG9uZSB0byBtYWM4MDIxMSwKKyAqIHdoaWNoIHdpbGwgaGFuZGxlIHRoZSByZW9yZGVyIGJ1ZmZlci4KKyAqCisgKiBXaGVuIHRoZSBhZ2dyZWdhdGlvbiBzZXNzaW9uIGlzIHN0b3BwZWQgYWdhaW4gYnkgdGhlIHBlZXIgb3IKKyAqIG91cnNlbHZlcywgdGhlIGRyaXZlcidzIEBhbXBkdV9hY3Rpb24gZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQKKyAqIHdpdGggdGhlIGFjdGlvbiAlSUVFRTgwMjExX0FNUERVX1JYX1NUT1AuIEluIHRoaXMgY2FzZSwgdGhlCisgKiBjYWxsIG11c3Qgbm90IGZhaWwuCisgKi8KKwogI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KICNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgogI2luY2x1ZGUgImRyaXZlci1vcHMuaCIKIAotc3RhdGljIHZvaWQgX19faWVlZTgwMjExX3N0b3BfcnhfYmFfc2Vzc2lvbihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCwKLQkJCQkJICAgIHUxNiBpbml0aWF0b3IsIHUxNiByZWFzb24sCi0JCQkJCSAgICBib29sIGZyb21fdGltZXIpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfZnJlZV90aWRfcngoc3RydWN0IHJjdV9oZWFkICpoKQoreworCXN0cnVjdCB0aWRfYW1wZHVfcnggKnRpZF9yeCA9CisJCWNvbnRhaW5lcl9vZihoLCBzdHJ1Y3QgdGlkX2FtcGR1X3J4LCByY3VfaGVhZCk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdGlkX3J4LT5idWZfc2l6ZTsgaSsrKQorCQlkZXZfa2ZyZWVfc2tiKHRpZF9yeC0+cmVvcmRlcl9idWZbaV0pOworCWtmcmVlKHRpZF9yeC0+cmVvcmRlcl9idWYpOworCWtmcmVlKHRpZF9yeC0+cmVvcmRlcl90aW1lKTsKKwlrZnJlZSh0aWRfcngpOworfQorCit2b2lkIF9fX2llZWU4MDIxMV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQsCisJCQkJICAgICB1MTYgaW5pdGlhdG9yLCB1MTYgcmVhc29uKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc3RhLT5sb2NhbDsKIAlzdHJ1Y3QgdGlkX2FtcGR1X3J4ICp0aWRfcng7Ci0JaW50IGk7CiAKLQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0KLQkvKiBjaGVjayBpZiBUSUQgaXMgaW4gb3BlcmF0aW9uYWwgc3RhdGUgKi8KLQlpZiAoIXN0YS0+YW1wZHVfbWxtZS50aWRfYWN0aXZlX3J4W3RpZF0pIHsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzdGEtPmFtcGR1X21sbWUudGlkX2FjdGl2ZV9yeFt0aWRdID0gZmFsc2U7CisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmc3RhLT5hbXBkdV9tbG1lLm10eCk7CiAKIAl0aWRfcnggPSBzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF07CiAKKwlpZiAoIXRpZF9yeCkKKwkJcmV0dXJuOworCisJcmN1X2Fzc2lnbl9wb2ludGVyKHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSwgTlVMTCk7CisKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAiUnggQkEgc2Vzc2lvbiBzdG9wIHJlcXVlc3RlZCBmb3IgJXBNIHRpZCAldVxuIiwKIAkgICAgICAgc3RhLT5zdGEuYWRkciwgdGlkKTsKQEAgLTU0LDMyICs4NSwxNyBAQAogCQlpZWVlODAyMTFfc2VuZF9kZWxiYShzdGEtPnNkYXRhLCBzdGEtPnN0YS5hZGRyLAogCQkJCSAgICAgdGlkLCAwLCByZWFzb24pOwogCi0JLyogZnJlZSB0aGUgcmVvcmRlcmluZyBidWZmZXIgKi8KLQlmb3IgKGkgPSAwOyBpIDwgdGlkX3J4LT5idWZfc2l6ZTsgaSsrKSB7Ci0JCWlmICh0aWRfcngtPnJlb3JkZXJfYnVmW2ldKSB7Ci0JCQkvKiByZWxlYXNlIHRoZSByZW9yZGVyZWQgZnJhbWVzICovCi0JCQlkZXZfa2ZyZWVfc2tiKHRpZF9yeC0+cmVvcmRlcl9idWZbaV0pOwotCQkJdGlkX3J4LT5zdG9yZWRfbXBkdV9udW0tLTsKLQkJCXRpZF9yeC0+cmVvcmRlcl9idWZbaV0gPSBOVUxMOwotCQl9Ci0JfQorCWRlbF90aW1lcl9zeW5jKCZ0aWRfcngtPnNlc3Npb25fdGltZXIpOwogCi0JLyogZnJlZSByZXNvdXJjZXMgKi8KLQlrZnJlZSh0aWRfcngtPnJlb3JkZXJfYnVmKTsKLQlrZnJlZSh0aWRfcngtPnJlb3JkZXJfdGltZSk7Ci0Jc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdID0gTlVMTDsKLQotCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCi0JaWYgKCFmcm9tX3RpbWVyKQotCQlkZWxfdGltZXJfc3luYygmdGlkX3J4LT5zZXNzaW9uX3RpbWVyKTsKLQlrZnJlZSh0aWRfcngpOworCWNhbGxfcmN1KCZ0aWRfcngtPnJjdV9oZWFkLCBpZWVlODAyMTFfZnJlZV90aWRfcngpOwogfQogCiB2b2lkIF9faWVlZTgwMjExX3N0b3BfcnhfYmFfc2Vzc2lvbihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCwKIAkJCQkgICAgdTE2IGluaXRpYXRvciwgdTE2IHJlYXNvbikKIHsKLQlfX19pZWVlODAyMTFfc3RvcF9yeF9iYV9zZXNzaW9uKHN0YSwgdGlkLCBpbml0aWF0b3IsIHJlYXNvbiwgZmFsc2UpOworCW11dGV4X2xvY2soJnN0YS0+YW1wZHVfbWxtZS5tdHgpOworCV9fX2llZWU4MDIxMV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RhLCB0aWQsIGluaXRpYXRvciwgcmVhc29uKTsKKwltdXRleF91bmxvY2soJnN0YS0+YW1wZHVfbWxtZS5tdHgpOwogfQogCiAvKgpAQCAtMTAwLDggKzExNiw4IEBACiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCiAJcHJpbnRrKEtFUk5fREVCVUcgInJ4IHNlc3Npb24gdGltZXIgZXhwaXJlZCBvbiB0aWQgJWRcbiIsICh1MTYpKnB0aWQpOwogI2VuZGlmCi0JX19faWVlZTgwMjExX3N0b3BfcnhfYmFfc2Vzc2lvbihzdGEsICpwdGlkLCBXTEFOX0JBQ0tfUkVDSVBJRU5ULAotCQkJCQlXTEFOX1JFQVNPTl9RU1RBX1RJTUVPVVQsIHRydWUpOworCXNldF9iaXQoKnB0aWQsIHN0YS0+YW1wZHVfbWxtZS50aWRfcnhfdGltZXJfZXhwaXJlZCk7CisJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJnN0YS0+bG9jYWwtPmh3LCAmc3RhLT5hbXBkdV9tbG1lLndvcmspOwogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqZGEsIHUxNiB0aWQsCkBAIC0yMTIsOSArMjI4LDkgQEAKIAogCiAJLyogZXhhbWluZSBzdGF0ZSBtYWNoaW5lICovCi0Jc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCW11dGV4X2xvY2soJnN0YS0+YW1wZHVfbWxtZS5tdHgpOwogCi0JaWYgKHN0YS0+YW1wZHVfbWxtZS50aWRfYWN0aXZlX3J4W3RpZF0pIHsKKwlpZiAoc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdKSB7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9ERUJVRyAidW5leHBlY3RlZCBBZGRCQSBSZXEgZnJvbSAiCkBAIC0yMjUsOSArMjQxLDggQEAKIAl9CiAKIAkvKiBwcmVwYXJlIEEtTVBEVSBNTE1FIGZvciBSeCBhZ2dyZWdhdGlvbiAqLwotCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSA9Ci0JCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGlkX2FtcGR1X3J4KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0pIHsKKwl0aWRfYWdnX3J4ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHRpZF9hbXBkdV9yeCksIEdGUF9BVE9NSUMpOworCWlmICghdGlkX2FnZ19yeCkgewogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJcHJpbnRrKEtFUk5fRVJSICJhbGxvY2F0ZSByeCBtbG1lIHRvIHRpZCAlZCBmYWlsZWRcbiIsCkBAIC0yMzUsMTQgKzI1MCwxMSBAQAogI2VuZGlmCiAJCWdvdG8gZW5kOwogCX0KLQkvKiByeCB0aW1lciAqLwotCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+c2Vzc2lvbl90aW1lci5mdW5jdGlvbiA9Ci0JCQkJc3RhX3J4X2FnZ19zZXNzaW9uX3RpbWVyX2V4cGlyZWQ7Ci0Jc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyLmRhdGEgPQotCQkJCSh1bnNpZ25lZCBsb25nKSZzdGEtPnRpbWVyX3RvX3RpZFt0aWRdOwotCWluaXRfdGltZXIoJnN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+c2Vzc2lvbl90aW1lcik7CiAKLQl0aWRfYWdnX3J4ID0gc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdOworCS8qIHJ4IHRpbWVyICovCisJdGlkX2FnZ19yeC0+c2Vzc2lvbl90aW1lci5mdW5jdGlvbiA9IHN0YV9yeF9hZ2dfc2Vzc2lvbl90aW1lcl9leHBpcmVkOworCXRpZF9hZ2dfcngtPnNlc3Npb25fdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSZzdGEtPnRpbWVyX3RvX3RpZFt0aWRdOworCWluaXRfdGltZXIoJnRpZF9hZ2dfcngtPnNlc3Npb25fdGltZXIpOwogCiAJLyogcHJlcGFyZSByZW9yZGVyaW5nIGJ1ZmZlciAqLwogCXRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmID0KQEAgLTI1Nyw4ICsyNjksNyBAQAogI2VuZGlmCiAJCWtmcmVlKHRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmKTsKIAkJa2ZyZWUodGlkX2FnZ19yeC0+cmVvcmRlcl90aW1lKTsKLQkJa2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdKTsKLQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdID0gTlVMTDsKKwkJa2ZyZWUodGlkX2FnZ19yeCk7CiAJCWdvdG8gZW5kOwogCX0KIApAQCAtMjcwLDEzICsyODEsMTIgQEAKIAogCWlmIChyZXQpIHsKIAkJa2ZyZWUodGlkX2FnZ19yeC0+cmVvcmRlcl9idWYpOworCQlrZnJlZSh0aWRfYWdnX3J4LT5yZW9yZGVyX3RpbWUpOwogCQlrZnJlZSh0aWRfYWdnX3J4KTsKLQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdID0gTlVMTDsKIAkJZ290byBlbmQ7CiAJfQogCi0JLyogY2hhbmdlIHN0YXRlIGFuZCBzZW5kIGFkZGJhIHJlc3AgKi8KLQlzdGEtPmFtcGR1X21sbWUudGlkX2FjdGl2ZV9yeFt0aWRdID0gdHJ1ZTsKKwkvKiB1cGRhdGUgZGF0YSAqLwogCXRpZF9hZ2dfcngtPmRpYWxvZ190b2tlbiA9IGRpYWxvZ190b2tlbjsKIAl0aWRfYWdnX3J4LT5zc24gPSBzdGFydF9zZXFfbnVtOwogCXRpZF9hZ2dfcngtPmhlYWRfc2VxX251bSA9IHN0YXJ0X3NlcV9udW07CkBAIC0yODQsOCArMjk0LDE1IEBACiAJdGlkX2FnZ19yeC0+dGltZW91dCA9IHRpbWVvdXQ7CiAJdGlkX2FnZ19yeC0+c3RvcmVkX21wZHVfbnVtID0gMDsKIAlzdGF0dXMgPSBXTEFOX1NUQVRVU19TVUNDRVNTOworCisJLyogYWN0aXZhdGUgaXQgZm9yIFJYICovCisJcmN1X2Fzc2lnbl9wb2ludGVyKHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSwgdGlkX2FnZ19yeCk7CisKKwlpZiAodGltZW91dCkKKwkJbW9kX3RpbWVyKCZ0aWRfYWdnX3J4LT5zZXNzaW9uX3RpbWVyLCBUVV9UT19FWFBfVElNRSh0aW1lb3V0KSk7CisKIGVuZDoKLQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKwltdXRleF91bmxvY2soJnN0YS0+YW1wZHVfbWxtZS5tdHgpOwogCiBlbmRfbm9fbG9jazoKIAlpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXNwKHN0YS0+c2RhdGEsIHN0YS0+c3RhLmFkZHIsIHRpZCwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZ2ctdHguYyBiL25ldC9tYWM4MDIxMS9hZ2ctdHguYwppbmRleCA5ODI1OGI3Li5jODkzZjIzIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvYWdnLXR4LmMKKysrIGIvbmV0L21hYzgwMjExL2FnZy10eC5jCkBAIC02LDcgKzYsNyBAQAogICogQ29weXJpZ2h0IDIwMDUtMjAwNiwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy4KICAqIENvcHlyaWdodCAyMDA2LTIwMDcJSmlyaSBCZW5jIDxqYmVuY0BzdXNlLmN6PgogICogQ29weXJpZ2h0IDIwMDcsIE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgotICogQ29weXJpZ2h0IDIwMDctMjAwOSwgSW50ZWwgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAyMDA3LTIwMTAsIEludGVsIENvcnBvcmF0aW9uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0yMSwyOCArMjEsMzkgQEAKICNpbmNsdWRlICJ3bWUuaCIKIAogLyoqCi0gKiBET0M6IFRYIGFnZ3JlZ2F0aW9uCisgKiBET0M6IFRYIEEtTVBEVSBhZ2dyZWdhdGlvbgogICoKICAqIEFnZ3JlZ2F0aW9uIG9uIHRoZSBUWCBzaWRlIHJlcXVpcmVzIHNldHRpbmcgdGhlIGhhcmR3YXJlIGZsYWcKLSAqICVJRUVFODAyMTFfSFdfQU1QRFVfQUdHUkVHQVRJT04gYXMgd2VsbCBhcywgaWYgcHJlc2VudCwgdGhlIEBhbXBkdV9xdWV1ZXMKLSAqIGhhcmR3YXJlIHBhcmFtZXRlciB0byB0aGUgbnVtYmVyIG9mIGhhcmR3YXJlIEFNUERVIHF1ZXVlcy4gSWYgdGhlcmUgYXJlIG5vCi0gKiBoYXJkd2FyZSBxdWV1ZXMgdGhlbiB0aGUgZHJpdmVyIHdpbGwgKGN1cnJlbnRseSkgaGF2ZSB0byBkbyBhbGwgZnJhbWUKLSAqIGJ1ZmZlcmluZy4KKyAqICVJRUVFODAyMTFfSFdfQU1QRFVfQUdHUkVHQVRJT04uIFRoZSBkcml2ZXIgd2lsbCB0aGVuIGJlIGhhbmRlZAorICogcGFja2V0cyB3aXRoIGEgZmxhZyBpbmRpY2F0aW5nIEEtTVBEVSBhZ2dyZWdhdGlvbi4gVGhlIGRyaXZlcgorICogb3IgZGV2aWNlIGlzIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBhZ2dyZWdhdGluZyB0aGUgZnJhbWVzLAorICogYXMgd2VsbCBhcyBkZWNpZGluZyBob3cgbWFueSBhbmQgd2hpY2ggdG8gYWdncmVnYXRlLgogICoKLSAqIFdoZW4gVFggYWdncmVnYXRpb24gaXMgc3RhcnRlZCBieSBzb21lIHN1YnN5c3RlbSAodXN1YWxseSB0aGUgcmF0ZSBjb250cm9sCi0gKiBhbGdvcml0aG0gd291bGQgYmUgYXBwcm9wcmlhdGUpIGJ5IGNhbGxpbmcgdGhlCi0gKiBpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbigpIGZ1bmN0aW9uLCB0aGUgZHJpdmVyIHdpbGwgYmUgbm90aWZpZWQgdmlhCi0gKiBpdHMgQGFtcGR1X2FjdGlvbiBmdW5jdGlvbiwgd2l0aCB0aGUgJUlFRUU4MDIxMV9BTVBEVV9UWF9TVEFSVCBhY3Rpb24uCisgKiBXaGVuIFRYIGFnZ3JlZ2F0aW9uIGlzIHN0YXJ0ZWQgYnkgc29tZSBzdWJzeXN0ZW0gKHVzdWFsbHkgdGhlIHJhdGUKKyAqIGNvbnRyb2wgYWxnb3JpdGhtIHdvdWxkIGJlIGFwcHJvcHJpYXRlKSBieSBjYWxsaW5nIHRoZQorICogaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24oKSBmdW5jdGlvbiwgdGhlIGRyaXZlciB3aWxsIGJlCisgKiBub3RpZmllZCB2aWEgaXRzIEBhbXBkdV9hY3Rpb24gZnVuY3Rpb24sIHdpdGggdGhlCisgKiAlSUVFRTgwMjExX0FNUERVX1RYX1NUQVJUIGFjdGlvbi4KICAqCiAgKiBJbiByZXNwb25zZSB0byB0aGF0LCB0aGUgZHJpdmVyIGlzIGxhdGVyIHJlcXVpcmVkIHRvIGNhbGwgdGhlCi0gKiBpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2IoKSAob3IgaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUoKSkKLSAqIGZ1bmN0aW9uLCB3aGljaCB3aWxsIHN0YXJ0IHRoZSBhZ2dyZWdhdGlvbiBzZXNzaW9uLgorICogaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUoKSBmdW5jdGlvbiwgd2hpY2ggd2lsbCByZWFsbHkKKyAqIHN0YXJ0IHRoZSBhZ2dyZWdhdGlvbiBzZXNzaW9uIGFmdGVyIHRoZSBwZWVyIGhhcyBhbHNvIHJlc3BvbmRlZC4KKyAqIElmIHRoZSBwZWVyIHJlc3BvbmRzIG5lZ2F0aXZlbHksIHRoZSBzZXNzaW9uIHdpbGwgYmUgc3RvcHBlZAorICogYWdhaW4gcmlnaHQgYXdheS4gTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlIGZvciB0aGUgYWdncmVnYXRpb24KKyAqIHNlc3Npb24gdG8gYmUgc3RvcHBlZCBiZWZvcmUgdGhlIGRyaXZlciBoYXMgaW5kaWNhdGVkIHRoYXQgaXQKKyAqIGlzIGRvbmUgc2V0dGluZyBpdCB1cCwgaW4gd2hpY2ggY2FzZSBpdCBtdXN0IG5vdCBpbmRpY2F0ZSB0aGUKKyAqIHNldHVwIGNvbXBsZXRpb24uCiAgKgotICogU2ltaWxhcmx5LCB3aGVuIHRoZSBhZ2dyZWdhdGlvbiBzZXNzaW9uIGlzIHN0b3BwZWQgYnkKLSAqIGllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oKSwgdGhlIGRyaXZlcidzIEBhbXBkdV9hY3Rpb24gZnVuY3Rpb24gd2lsbAotICogYmUgY2FsbGVkIHdpdGggdGhlIGFjdGlvbiAlSUVFRTgwMjExX0FNUERVX1RYX1NUT1AuIEluIHRoaXMgY2FzZSwgdGhlCi0gKiBjYWxsIG11c3Qgbm90IGZhaWwsIGFuZCB0aGUgZHJpdmVyIG11c3QgbGF0ZXIgY2FsbCBpZWVlODAyMTFfc3RvcF90eF9iYV9jYigpCi0gKiAob3IgaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZSgpKS4KKyAqIEFsc28gbm90ZSB0aGF0LCBzaW5jZSB3ZSBhbHNvIG5lZWQgdG8gd2FpdCBmb3IgYSByZXNwb25zZSBmcm9tCisgKiB0aGUgcGVlciwgdGhlIGRyaXZlciBpcyBub3RpZmllZCBvZiB0aGUgY29tcGxldGlvbiBvZiB0aGUKKyAqIGhhbmRzaGFrZSBieSB0aGUgJUlFRUU4MDIxMV9BTVBEVV9UWF9PUEVSQVRJT05BTCBhY3Rpb24gdG8gdGhlCisgKiBAYW1wZHVfYWN0aW9uIGNhbGxiYWNrLgorICoKKyAqIFNpbWlsYXJseSwgd2hlbiB0aGUgYWdncmVnYXRpb24gc2Vzc2lvbiBpcyBzdG9wcGVkIGJ5IHRoZSBwZWVyCisgKiBvciBzb21ldGhpbmcgY2FsbGluZyBpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKCksIHRoZSBkcml2ZXIncworICogQGFtcGR1X2FjdGlvbiBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBhY3Rpb24KKyAqICVJRUVFODAyMTFfQU1QRFVfVFhfU1RPUC4gSW4gdGhpcyBjYXNlLCB0aGUgY2FsbCBtdXN0IG5vdCBmYWlsLAorICogYW5kIHRoZSBkcml2ZXIgbXVzdCBsYXRlciBjYWxsIGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiX2lycXNhZmUoKS4KICAqLwogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXF1ZXN0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLApAQCAtMTI1LDI1ICsxMzYsNTMgQEAKIAlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IpOwogfQogCitzdGF0aWMgdm9pZCBrZnJlZV90aWRfdHgoc3RydWN0IHJjdV9oZWFkICpyY3VfaGVhZCkKK3sKKwlzdHJ1Y3QgdGlkX2FtcGR1X3R4ICp0aWRfdHggPQorCSAgICBjb250YWluZXJfb2YocmN1X2hlYWQsIHN0cnVjdCB0aWRfYW1wZHVfdHgsIHJjdV9oZWFkKTsKKworCWtmcmVlKHRpZF90eCk7Cit9CisKIGludCBfX19pZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAogCQkJCSAgICBlbnVtIGllZWU4MDIxMV9iYWNrX3BhcnRpZXMgaW5pdGlhdG9yKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc3RhLT5sb2NhbDsKKwlzdHJ1Y3QgdGlkX2FtcGR1X3R4ICp0aWRfdHggPSBzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF07CiAJaW50IHJldDsKLQl1OCAqc3RhdGU7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZzdGEtPmFtcGR1X21sbWUubXR4KTsKKworCWlmICghdGlkX3R4KQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKKworCWlmICh0ZXN0X2JpdChIVF9BR0dfU1RBVEVfV0FOVF9TVEFSVCwgJnRpZF90eC0+c3RhdGUpKSB7CisJCS8qIG5vdCBldmVuIHN0YXJ0ZWQgeWV0ISAqLworCQlyY3VfYXNzaWduX3BvaW50ZXIoc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLCBOVUxMKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisJCWNhbGxfcmN1KCZ0aWRfdHgtPnJjdV9oZWFkLCBrZnJlZV90aWRfdHgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwogCXByaW50ayhLRVJOX0RFQlVHICJUeCBCQSBzZXNzaW9uIHN0b3AgcmVxdWVzdGVkIGZvciAlcE0gdGlkICV1XG4iLAogCSAgICAgICBzdGEtPnN0YS5hZGRyLCB0aWQpOwogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwogCi0Jc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOworCXNldF9iaXQoSFRfQUdHX1NUQVRFX1NUT1BQSU5HLCAmdGlkX3R4LT5zdGF0ZSk7CiAKLQlpZiAoKnN0YXRlID09IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCkKLQkJc3RhLT5hbXBkdV9tbG1lLmFkZGJhX3JlcV9udW1bdGlkXSA9IDA7CisJLyoKKwkgKiBBZnRlciB0aGlzIHBhY2tldHMgYXJlIG5vIGxvbmdlciBoYW5kZWQgcmlnaHQgdGhyb3VnaAorCSAqIHRvIHRoZSBkcml2ZXIgYnV0IGFyZSBwdXQgb250byB0aWRfdHgtPnBlbmRpbmcgaW5zdGVhZCwKKwkgKiB3aXRoIGxvY2tpbmcgdG8gZW5zdXJlIHByb3BlciBhY2Nlc3MuCisJICovCisJY2xlYXJfYml0KEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCwgJnRpZF90eC0+c3RhdGUpOwogCi0JKnN0YXRlID0gSFRfQUdHX1NUQVRFX1JFUV9TVE9QX0JBX01TSyB8Ci0JCShpbml0aWF0b3IgPDwgSFRfQUdHX1NUQVRFX0lOSVRJQVRPUl9TSElGVCk7CisJdGlkX3R4LT5zdG9wX2luaXRpYXRvciA9IGluaXRpYXRvcjsKIAogCXJldCA9IGRydl9hbXBkdV9hY3Rpb24obG9jYWwsIHN0YS0+c2RhdGEsCiAJCQkgICAgICAgSUVFRTgwMjExX0FNUERVX1RYX1NUT1AsCkBAIC0xNzQsMTYgKzIxMywxNCBAQAogCXUxNiB0aWQgPSAqKHU4ICopZGF0YTsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGNvbnRhaW5lcl9vZigodm9pZCAqKWRhdGEsCiAJCXN0cnVjdCBzdGFfaW5mbywgdGltZXJfdG9fdGlkW3RpZF0pOwotCXU4ICpzdGF0ZTsKLQotCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKKwlzdHJ1Y3QgdGlkX2FtcGR1X3R4ICp0aWRfdHg7CiAKIAkvKiBjaGVjayBpZiB0aGUgVElEIHdhaXRzIGZvciBhZGRCQSByZXNwb25zZSAqLwotCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKLQlpZiAoKCpzdGF0ZSAmIChIVF9BRERCQV9SRVFVRVNURURfTVNLIHwgSFRfQUREQkFfUkVDRUlWRURfTVNLIHwKLQkJICAgICAgIEhUX0FHR19TVEFURV9SRVFfU1RPUF9CQV9NU0spKSAhPQotCQkJCQkJSFRfQUREQkFfUkVRVUVTVEVEX01TSykgewotCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJdGlkX3R4ID0gcmN1X2RlcmVmZXJlbmNlKHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSk7CisJaWYgKCF0aWRfdHggfHwKKwkgICAgdGVzdF9iaXQoSFRfQUdHX1NUQVRFX1JFU1BPTlNFX1JFQ0VJVkVELCAmdGlkX3R4LT5zdGF0ZSkpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCiAJCXByaW50ayhLRVJOX0RFQlVHICJ0aW1lciBleHBpcmVkIG9uIHRpZCAlZCBidXQgd2UgYXJlIG5vdCAiCiAJCQkJIihvciBubyBsb25nZXIpIGV4cGVjdGluZyBhZGRCQSByZXNwb25zZSB0aGVyZVxuIiwKQEAgLTE5Niw4ICsyMzMsOCBAQAogCXByaW50ayhLRVJOX0RFQlVHICJhZGRCQSByZXNwb25zZSB0aW1lciBleHBpcmVkIG9uIHRpZCAlZFxuIiwgdGlkKTsKICNlbmRpZgogCi0JX19faWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdGEsIHRpZCwgV0xBTl9CQUNLX0lOSVRJQVRPUik7Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisJaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbigmc3RhLT5zdGEsIHRpZCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9hY19mcm9tX3RpZChpbnQgdGlkKQpAQCAtMjA1LDE0ICsyNDIsMTEyIEBACiAJcmV0dXJuIGllZWU4MDJfMWRfdG9fYWNbdGlkICYgN107CiB9CiAKKy8qCisgKiBXaGVuIG11bHRpcGxlIGFnZ3JlZ2F0aW9uIHNlc3Npb25zIG9uIG11bHRpcGxlIHN0YXRpb25zCisgKiBhcmUgYmVpbmcgY3JlYXRlZC9kZXN0cm95ZWQgc2ltdWx0YW5lb3VzbHksIHdlIG5lZWQgdG8KKyAqIHJlZmNvdW50IHRoZSBnbG9iYWwgcXVldWUgc3RvcCBjYXVzZWQgYnkgdGhhdCBpbiBvcmRlcgorICogdG8gbm90IGdldCBpbnRvIGEgc2l0dWF0aW9uIHdoZXJlIG9uZSBvZiB0aGUgYWdncmVnYXRpb24KKyAqIHNldHVwIG9yIHRlYXJkb3duIHJlLWVuYWJsZXMgcXVldWVzIGJlZm9yZSB0aGUgb3RoZXIgaXMKKyAqIHJlYWR5IHRvIGhhbmRsZSB0aGF0LgorICoKKyAqIFRoZXNlIHR3byBmdW5jdGlvbnMgdGFrZSBjYXJlIG9mIHRoaXMgaXNzdWUgYnkga2VlcGluZworICogYSBnbG9iYWwgImFnZ19xdWV1ZV9zdG9wIiByZWZjb3VudC4KKyAqLworc3RhdGljIHZvaWQgX19hY3F1aXJlcyhhZ2dfcXVldWUpCitpZWVlODAyMTFfc3RvcF9xdWV1ZV9hZ2coc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGludCB0aWQpCit7CisJaW50IHF1ZXVlID0gaWVlZTgwMjExX2FjX2Zyb21fdGlkKHRpZCk7CisKKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJmxvY2FsLT5hZ2dfcXVldWVfc3RvcFtxdWV1ZV0pID09IDEpCisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlX2J5X3JlYXNvbigKKwkJCSZsb2NhbC0+aHcsIHF1ZXVlLAorCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OKTsKKwlfX2FjcXVpcmUoYWdnX3F1ZXVlKTsKK30KKworc3RhdGljIHZvaWQgX19yZWxlYXNlcyhhZ2dfcXVldWUpCitpZWVlODAyMTFfd2FrZV9xdWV1ZV9hZ2coc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGludCB0aWQpCit7CisJaW50IHF1ZXVlID0gaWVlZTgwMjExX2FjX2Zyb21fdGlkKHRpZCk7CisKKwlpZiAoYXRvbWljX2RlY19yZXR1cm4oJmxvY2FsLT5hZ2dfcXVldWVfc3RvcFtxdWV1ZV0pID09IDApCisJCWllZWU4MDIxMV93YWtlX3F1ZXVlX2J5X3JlYXNvbigKKwkJCSZsb2NhbC0+aHcsIHF1ZXVlLAorCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OKTsKKwlfX3JlbGVhc2UoYWdnX3F1ZXVlKTsKK30KKwordm9pZCBpZWVlODAyMTFfdHhfYmFfc2Vzc2lvbl9oYW5kbGVfc3RhcnQoc3RydWN0IHN0YV9pbmZvICpzdGEsIGludCB0aWQpCit7CisJc3RydWN0IHRpZF9hbXBkdV90eCAqdGlkX3R4ID0gc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc3RhLT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHN0YS0+c2RhdGE7CisJdTE2IHN0YXJ0X3NlcV9udW07CisJaW50IHJldDsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnN0YS0+YW1wZHVfbWxtZS5tdHgpOworCisJLyoKKwkgKiBXaGlsZSB3ZSdyZSBhc2tpbmcgdGhlIGRyaXZlciBhYm91dCB0aGUgYWdncmVnYXRpb24sCisJICogc3RvcCB0aGUgQUMgcXVldWUgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5CisJICogYWJvdXQgZnJhbWVzIHRoYXQgY2FtZSBpbiB3aGlsZSB3ZSB3ZXJlIGRvaW5nIHRoYXQsCisJICogd2hpY2ggd291bGQgcmVxdWlyZSB1cyB0byBwdXQgdGhlbSB0byB0aGUgQUMgcGVuZGluZworCSAqIGFmdGVyd2FyZHMgd2hpY2gganVzdCBtYWtlcyB0aGUgY29kZSBtb3JlIGNvbXBsZXguCisJICovCisJaWVlZTgwMjExX3N0b3BfcXVldWVfYWdnKGxvY2FsLCB0aWQpOworCisJY2xlYXJfYml0KEhUX0FHR19TVEFURV9XQU5UX1NUQVJULCAmdGlkX3R4LT5zdGF0ZSk7CisKKwkvKgorCSAqIG1ha2Ugc3VyZSBubyBwYWNrZXRzIGFyZSBiZWluZyBwcm9jZXNzZWQgdG8gZ2V0CisJICogdmFsaWQgc3RhcnRpbmcgc2VxdWVuY2UgbnVtYmVyCisJICovCisJc3luY2hyb25pemVfbmV0KCk7CisKKwlzdGFydF9zZXFfbnVtID0gc3RhLT50aWRfc2VxW3RpZF0gPj4gNDsKKworCXJldCA9IGRydl9hbXBkdV9hY3Rpb24obG9jYWwsIHNkYXRhLCBJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQsCisJCQkgICAgICAgJnN0YS0+c3RhLCB0aWQsICZzdGFydF9zZXFfbnVtKTsKKwlpZiAocmV0KSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJCQSByZXF1ZXN0IGRlbmllZCAtIEhXIHVuYXZhaWxhYmxlIGZvciIKKwkJCQkJIiB0aWQgJWRcbiIsIHRpZCk7CisjZW5kaWYKKwkJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCQlyY3VfYXNzaWduX3BvaW50ZXIoc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLCBOVUxMKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisKKwkJaWVlZTgwMjExX3dha2VfcXVldWVfYWdnKGxvY2FsLCB0aWQpOworCQljYWxsX3JjdSgmdGlkX3R4LT5yY3VfaGVhZCwga2ZyZWVfdGlkX3R4KTsKKwkJcmV0dXJuOworCX0KKworCS8qIHdlIGNhbiB0YWtlIHBhY2tldHMgYWdhaW4gbm93ICovCisJaWVlZTgwMjExX3dha2VfcXVldWVfYWdnKGxvY2FsLCB0aWQpOworCisJLyogYWN0aXZhdGUgdGhlIHRpbWVyIGZvciB0aGUgcmVjaXBpZW50J3MgYWRkQkEgcmVzcG9uc2UgKi8KKwltb2RfdGltZXIoJnRpZF90eC0+YWRkYmFfcmVzcF90aW1lciwgamlmZmllcyArIEFEREJBX1JFU1BfSU5URVJWQUwpOworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJhY3RpdmF0ZWQgYWRkQkEgcmVzcG9uc2UgdGltZXIgb24gdGlkICVkXG4iLCB0aWQpOworI2VuZGlmCisKKwlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CisJc3RhLT5hbXBkdV9tbG1lLmFkZGJhX3JlcV9udW1bdGlkXSsrOworCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworCisJLyogc2VuZCBBZGRCQSByZXF1ZXN0ICovCisJaWVlZTgwMjExX3NlbmRfYWRkYmFfcmVxdWVzdChzZGF0YSwgc3RhLT5zdGEuYWRkciwgdGlkLAorCQkJCSAgICAgdGlkX3R4LT5kaWFsb2dfdG9rZW4sIHN0YXJ0X3NlcV9udW0sCisJCQkJICAgICAweDQwLCA1MDAwKTsKK30KKwogaW50IGllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsIHUxNiB0aWQpCiB7CiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBjb250YWluZXJfb2YocHVic3RhLCBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtPnNkYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXU4ICpzdGF0ZTsKKwlzdHJ1Y3QgdGlkX2FtcGR1X3R4ICp0aWRfdHg7CiAJaW50IHJldCA9IDA7Ci0JdTE2IHN0YXJ0X3NlcV9udW07CiAKIAl0cmFjZV9hcGlfc3RhcnRfdHhfYmFfc2Vzc2lvbihwdWJzdGEsIHRpZCk7CiAKQEAgLTIzOSwyNCArMzc0LDE1IEBACiAJICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAodGVzdF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9ESVNBU1NPQykpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkRpc2Fzc29jaWF0aW9uIGlzIGluIHByb2dyZXNzLiAiCi0JCSAgICAgICAiRGVueWluZyBCQSBzZXNzaW9uIHJlcXVlc3RcbiIpOwotI2VuZGlmCi0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCWlmICh0ZXN0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX0JMT0NLX0JBKSkgewogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiU3VzcGVuZCBpbiBwcm9ncmVzcy4gIgorCQlwcmludGsoS0VSTl9ERUJVRyAiQkEgc2Vzc2lvbnMgYmxvY2tlZC4gIgogCQkgICAgICAgIkRlbnlpbmcgQkEgc2Vzc2lvbiByZXF1ZXN0XG4iKTsKICNlbmRpZgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0Jc3Bpbl9sb2NrKCZsb2NhbC0+YW1wZHVfbG9jayk7CiAKIAkvKiB3ZSBoYXZlIHRyaWVkIHRvbyBtYW55IHRpbWVzLCByZWNlaXZlciBkb2VzIG5vdCB3YW50IEEtTVBEVSAqLwogCWlmIChzdGEtPmFtcGR1X21sbWUuYWRkYmFfcmVxX251bVt0aWRdID4gSFRfQUdHX01BWF9SRVRSSUVTKSB7CkBAIC0yNjQsOSArMzkwLDkgQEAKIAkJZ290byBlcnJfdW5sb2NrX3N0YTsKIAl9CiAKLQlzdGF0ZSA9ICZzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07CisJdGlkX3R4ID0gc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdOwogCS8qIGNoZWNrIGlmIHRoZSBUSUQgaXMgbm90IGluIGFnZ3JlZ2F0aW9uIGZsb3cgYWxyZWFkeSAqLwotCWlmICgqc3RhdGUgIT0gSFRfQUdHX1NUQVRFX0lETEUpIHsKKwlpZiAodGlkX3R4KSB7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCiAJCXByaW50ayhLRVJOX0RFQlVHICJCQSByZXF1ZXN0IGRlbmllZCAtIHNlc3Npb24gaXMgbm90ICIKIAkJCQkgImlkbGUgb24gdGlkICV1XG4iLCB0aWQpOwpAQCAtMjc1LDk2ICs0MDEsMzcgQEAKIAkJZ290byBlcnJfdW5sb2NrX3N0YTsKIAl9CiAKLQkvKgotCSAqIFdoaWxlIHdlJ3JlIGFza2luZyB0aGUgZHJpdmVyIGFib3V0IHRoZSBhZ2dyZWdhdGlvbiwKLQkgKiBzdG9wIHRoZSBBQyBxdWV1ZSBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gd29ycnkKLQkgKiBhYm91dCBmcmFtZXMgdGhhdCBjYW1lIGluIHdoaWxlIHdlIHdlcmUgZG9pbmcgdGhhdCwKLQkgKiB3aGljaCB3b3VsZCByZXF1aXJlIHVzIHRvIHB1dCB0aGVtIHRvIHRoZSBBQyBwZW5kaW5nCi0JICogYWZ0ZXJ3YXJkcyB3aGljaCBqdXN0IG1ha2VzIHRoZSBjb2RlIG1vcmUgY29tcGxleC4KLQkgKi8KLQlpZWVlODAyMTFfc3RvcF9xdWV1ZV9ieV9yZWFzb24oCi0JCSZsb2NhbC0+aHcsIGllZWU4MDIxMV9hY19mcm9tX3RpZCh0aWQpLAotCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04pOwotCiAJLyogcHJlcGFyZSBBLU1QRFUgTUxNRSBmb3IgVHggYWdncmVnYXRpb24gKi8KLQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0gPQotCQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IHRpZF9hbXBkdV90eCksIEdGUF9BVE9NSUMpOwotCWlmICghc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdKSB7CisJdGlkX3R4ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRpZF9hbXBkdV90eCksIEdGUF9BVE9NSUMpOworCWlmICghdGlkX3R4KSB7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9FUlIgImFsbG9jYXRlIHR4IG1sbWUgdG8gdGlkICVkIGZhaWxlZFxuIiwKIAkJCQkJdGlkKTsKICNlbmRpZgogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycl93YWtlX3F1ZXVlOworCQlnb3RvIGVycl91bmxvY2tfc3RhOwogCX0KIAotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+cGVuZGluZyk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmdGlkX3R4LT5wZW5kaW5nKTsKKwlfX3NldF9iaXQoSFRfQUdHX1NUQVRFX1dBTlRfU1RBUlQsICZ0aWRfdHgtPnN0YXRlKTsKIAogCS8qIFR4IHRpbWVyICovCi0Jc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyLmZ1bmN0aW9uID0KLQkJCXN0YV9hZGRiYV9yZXNwX3RpbWVyX2V4cGlyZWQ7Ci0Jc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyLmRhdGEgPQotCQkJKHVuc2lnbmVkIGxvbmcpJnN0YS0+dGltZXJfdG9fdGlkW3RpZF07Ci0JaW5pdF90aW1lcigmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyKTsKKwl0aWRfdHgtPmFkZGJhX3Jlc3BfdGltZXIuZnVuY3Rpb24gPSBzdGFfYWRkYmFfcmVzcF90aW1lcl9leHBpcmVkOworCXRpZF90eC0+YWRkYmFfcmVzcF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpJnN0YS0+dGltZXJfdG9fdGlkW3RpZF07CisJaW5pdF90aW1lcigmdGlkX3R4LT5hZGRiYV9yZXNwX3RpbWVyKTsKIAotCS8qIE9rLCB0aGUgQWRkYmEgZnJhbWUgaGFzbid0IGJlZW4gc2VudCB5ZXQsIGJ1dCBpZiB0aGUgZHJpdmVyIGNhbGxzIHRoZQotCSAqIGNhbGwgYmFjayByaWdodCBhd2F5LCBpdCBtdXN0IHNlZSB0aGF0IHRoZSBmbG93IGhhcyBiZWd1biAqLwotCSpzdGF0ZSB8PSBIVF9BRERCQV9SRVFVRVNURURfTVNLOwotCi0Jc3RhcnRfc2VxX251bSA9IHN0YS0+dGlkX3NlcVt0aWRdID4+IDQ7Ci0KLQlyZXQgPSBkcnZfYW1wZHVfYWN0aW9uKGxvY2FsLCBzZGF0YSwgSUVFRTgwMjExX0FNUERVX1RYX1NUQVJULAotCQkJICAgICAgIHB1YnN0YSwgdGlkLCAmc3RhcnRfc2VxX251bSk7Ci0KLQlpZiAocmV0KSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJCQSByZXF1ZXN0IGRlbmllZCAtIEhXIHVuYXZhaWxhYmxlIGZvciIKLQkJCQkJIiB0aWQgJWRcbiIsIHRpZCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0JCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9JRExFOwotCQlnb3RvIGVycl9mcmVlOwotCX0KLQotCS8qIERyaXZlciB2ZXRvZWQgb3IgT0tlZCwgYnV0IHdlIGNhbiB0YWtlIHBhY2tldHMgYWdhaW4gbm93ICovCi0JaWVlZTgwMjExX3dha2VfcXVldWVfYnlfcmVhc29uKAotCQkmbG9jYWwtPmh3LCBpZWVlODAyMTFfYWNfZnJvbV90aWQodGlkKSwKLQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OKTsKLQotCXNwaW5fdW5sb2NrKCZsb2NhbC0+YW1wZHVfbG9jayk7Ci0KLQkvKiBwcmVwYXJlIHRpZCBkYXRhICovCisJLyogYXNzaWduIGEgZGlhbG9nIHRva2VuICovCiAJc3RhLT5hbXBkdV9tbG1lLmRpYWxvZ190b2tlbl9hbGxvY2F0b3IrKzsKLQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmRpYWxvZ190b2tlbiA9Ci0JCQlzdGEtPmFtcGR1X21sbWUuZGlhbG9nX3Rva2VuX2FsbG9jYXRvcjsKLQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPnNzbiA9IHN0YXJ0X3NlcV9udW07CisJdGlkX3R4LT5kaWFsb2dfdG9rZW4gPSBzdGEtPmFtcGR1X21sbWUuZGlhbG9nX3Rva2VuX2FsbG9jYXRvcjsKIAotCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworCS8qIGZpbmFsbHksIGFzc2lnbiBpdCB0byB0aGUgYXJyYXkgKi8KKwlyY3VfYXNzaWduX3BvaW50ZXIoc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLCB0aWRfdHgpOwogCi0JLyogc2VuZCBBZGRCQSByZXF1ZXN0ICovCi0JaWVlZTgwMjExX3NlbmRfYWRkYmFfcmVxdWVzdChzZGF0YSwgcHVic3RhLT5hZGRyLCB0aWQsCi0JCQkgc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5kaWFsb2dfdG9rZW4sCi0JCQkgc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5zc24sCi0JCQkgMHg0MCwgNTAwMCk7Ci0Jc3RhLT5hbXBkdV9tbG1lLmFkZGJhX3JlcV9udW1bdGlkXSsrOwotCS8qIGFjdGl2YXRlIHRoZSB0aW1lciBmb3IgdGhlIHJlY2lwaWVudCdzIGFkZEJBIHJlc3BvbnNlICovCi0Jc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyLmV4cGlyZXMgPQotCQkJCWppZmZpZXMgKyBBRERCQV9SRVNQX0lOVEVSVkFMOwotCWFkZF90aW1lcigmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyKTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiYWN0aXZhdGVkIGFkZEJBIHJlc3BvbnNlIHRpbWVyIG9uIHRpZCAlZFxuIiwgdGlkKTsKLSNlbmRpZgotCXJldHVybiAwOworCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZzdGEtPmFtcGR1X21sbWUud29yayk7CiAKLSBlcnJfZnJlZToKLQlrZnJlZShzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0pOwotCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSA9IE5VTEw7Ci0gZXJyX3dha2VfcXVldWU6Ci0JaWVlZTgwMjExX3dha2VfcXVldWVfYnlfcmVhc29uKAotCQkmbG9jYWwtPmh3LCBpZWVlODAyMTFfYWNfZnJvbV90aWQodGlkKSwKLQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OKTsKKwkvKiB0aGlzIGZsb3cgY29udGludWVzIG9mZiB0aGUgd29yayAqLwogIGVycl91bmxvY2tfc3RhOgotCXNwaW5fdW5sb2NrKCZsb2NhbC0+YW1wZHVfbG9jayk7CiAJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTM3Miw2OSArNDM5LDY1IEBACiAKIC8qCiAgKiBzcGxpY2UgcGFja2V0cyBmcm9tIHRoZSBTVEEncyBwZW5kaW5nIHRvIHRoZSBsb2NhbCBwZW5kaW5nLAotICogcmVxdWlyZXMgYSBjYWxsIHRvIGllZWU4MDIxMV9hZ2dfc3BsaWNlX2ZpbmlzaCBhbmQgaG9sZGluZwotICogbG9jYWwtPmFtcGR1X2xvY2sgYWNyb3NzIGJvdGggY2FsbHMuCisgKiByZXF1aXJlcyBhIGNhbGwgdG8gaWVlZTgwMjExX2FnZ19zcGxpY2VfZmluaXNoIGxhdGVyCiAgKi8KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9hZ2dfc3BsaWNlX3BhY2tldHMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJCSBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCkKK3N0YXRpYyB2b2lkIF9fYWNxdWlyZXMoYWdnX3F1ZXVlKQoraWVlZTgwMjExX2FnZ19zcGxpY2VfcGFja2V0cyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgICAgc3RydWN0IHRpZF9hbXBkdV90eCAqdGlkX3R4LCB1MTYgdGlkKQogeworCWludCBxdWV1ZSA9IGllZWU4MDIxMV9hY19mcm9tX3RpZCh0aWQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTE2IHF1ZXVlID0gaWVlZTgwMjExX2FjX2Zyb21fdGlkKHRpZCk7CiAKLQlpZWVlODAyMTFfc3RvcF9xdWV1ZV9ieV9yZWFzb24oCi0JCSZsb2NhbC0+aHcsIHF1ZXVlLAotCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04pOworCWllZWU4MDIxMV9zdG9wX3F1ZXVlX2FnZyhsb2NhbCwgdGlkKTsKIAotCWlmICghKHN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXSAmIEhUX0FEREJBX1JFUVVFU1RFRF9NU0spKQorCWlmIChXQVJOKCF0aWRfdHgsICJUSUQgJWQgZ29uZSBidXQgZXhwZWN0ZWQgd2hlbiBzcGxpY2luZyBhZ2dyZWdhdGVzIgorCQkJICAiIGZyb20gdGhlIHBlbmRpbmcgcXVldWVcbiIsIHRpZCkpCiAJCXJldHVybjsKIAotCWlmIChXQVJOKCFzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0sCi0JCSAiVElEICVkIGdvbmUgYnV0IGV4cGVjdGVkIHdoZW4gc3BsaWNpbmcgYWdncmVnYXRlcyBmcm9tIgotCQkgInRoZSBwZW5kaW5nIHF1ZXVlXG4iLCB0aWQpKQotCQlyZXR1cm47Ci0KLQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5wZW5kaW5nKSkgeworCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZ0aWRfdHgtPnBlbmRpbmcpKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOwogCQkvKiBjb3B5IG92ZXIgcmVtYWluaW5nIHBhY2tldHMgKi8KLQkJc2tiX3F1ZXVlX3NwbGljZV90YWlsX2luaXQoCi0JCQkmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5wZW5kaW5nLAotCQkJJmxvY2FsLT5wZW5kaW5nW3F1ZXVlXSk7CisJCXNrYl9xdWV1ZV9zcGxpY2VfdGFpbF9pbml0KCZ0aWRfdHgtPnBlbmRpbmcsCisJCQkJCSAgICZsb2NhbC0+cGVuZGluZ1txdWV1ZV0pOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX2FnZ19zcGxpY2VfZmluaXNoKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCkKK3N0YXRpYyB2b2lkIF9fcmVsZWFzZXMoYWdnX3F1ZXVlKQoraWVlZTgwMjExX2FnZ19zcGxpY2VfZmluaXNoKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1MTYgdGlkKQogewotCXUxNiBxdWV1ZSA9IGllZWU4MDIxMV9hY19mcm9tX3RpZCh0aWQpOwotCi0JaWVlZTgwMjExX3dha2VfcXVldWVfYnlfcmVhc29uKAotCQkmbG9jYWwtPmh3LCBxdWV1ZSwKLQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OKTsKKwlpZWVlODAyMTFfd2FrZV9xdWV1ZV9hZ2cobG9jYWwsIHRpZCk7CiB9CiAKLS8qIGNhbGxlciBtdXN0IGhvbGQgc3RhLT5sb2NrICovCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfYWdnX3R4X29wZXJhdGlvbmFsKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJCQkgc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQpCiB7CisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmc3RhLT5hbXBkdV9tbG1lLm10eCk7CisKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAiQWdncmVnYXRpb24gaXMgb24gZm9yIHRpZCAlZFxuIiwgdGlkKTsKICNlbmRpZgogCi0Jc3Bpbl9sb2NrKCZsb2NhbC0+YW1wZHVfbG9jayk7Ci0JaWVlZTgwMjExX2FnZ19zcGxpY2VfcGFja2V0cyhsb2NhbCwgc3RhLCB0aWQpOwotCS8qCi0JICogTkI6IHdlIHJlbHkgb24gc3RhLT5sb2NrIGJlaW5nIHRha2VuIGluIHRoZSBUWAotCSAqIHByb2Nlc3NpbmcgaGVyZSB3aGVuIGFkZGluZyB0byB0aGUgcGVuZGluZyBxdWV1ZSwKLQkgKiBvdGhlcndpc2Ugd2UgY291bGQgb25seSBjaGFuZ2UgdGhlIHN0YXRlIG9mIHRoZQotCSAqIHNlc3Npb24gdG8gT1BFUkFUSU9OQUwgX2hlcmVfLgotCSAqLwotCWllZWU4MDIxMV9hZ2dfc3BsaWNlX2ZpbmlzaChsb2NhbCwgc3RhLCB0aWQpOwotCXNwaW5fdW5sb2NrKCZsb2NhbC0+YW1wZHVfbG9jayk7Ci0KIAlkcnZfYW1wZHVfYWN0aW9uKGxvY2FsLCBzdGEtPnNkYXRhLAogCQkJIElFRUU4MDIxMV9BTVBEVV9UWF9PUEVSQVRJT05BTCwKIAkJCSAmc3RhLT5zdGEsIHRpZCwgTlVMTCk7CisKKwkvKgorCSAqIHN5bmNocm9uaXplIHdpdGggVFggcGF0aCwgd2hpbGUgc3BsaWNpbmcgdGhlIFRYIHBhdGgKKwkgKiBzaG91bGQgYmxvY2sgc28gaXQgd29uJ3QgcHV0IG1vcmUgcGFja2V0cyBvbnRvIHBlbmRpbmcuCisJICovCisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCisJaWVlZTgwMjExX2FnZ19zcGxpY2VfcGFja2V0cyhsb2NhbCwgc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLCB0aWQpOworCS8qCisJICogTm93IG1hcmsgYXMgb3BlcmF0aW9uYWwuIFRoaXMgd2lsbCBiZSB2aXNpYmxlCisJICogaW4gdGhlIFRYIHBhdGgsIGFuZCBsZXRzIGl0IGdvIGxvY2stZnJlZSBpbgorCSAqIHRoZSBjb21tb24gY2FzZS4KKwkgKi8KKwlzZXRfYml0KEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCwgJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+c3RhdGUpOworCWllZWU4MDIxMV9hZ2dfc3BsaWNlX2ZpbmlzaChsb2NhbCwgdGlkKTsKKworCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwogfQogCiB2b2lkIGllZWU4MDIxMV9zdGFydF90eF9iYV9jYihzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCB1OCAqcmEsIHUxNiB0aWQpCkBAIC00NDIsNyArNTA1LDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHZpZl90b19zZGF0YSh2aWYpOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXU4ICpzdGF0ZTsKKwlzdHJ1Y3QgdGlkX2FtcGR1X3R4ICp0aWRfdHg7CiAKIAl0cmFjZV9hcGlfc3RhcnRfdHhfYmFfY2Ioc2RhdGEsIHJhLCB0aWQpOwogCkBAIC00NTQsNDIgKzUxNywzNiBAQAogCQlyZXR1cm47CiAJfQogCi0JcmN1X3JlYWRfbG9jaygpOworCW11dGV4X2xvY2soJmxvY2FsLT5zdGFfbXR4KTsKIAlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIHJhKTsKIAlpZiAoIXN0YSkgewotCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+c3RhX210eCk7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCiAJCXByaW50ayhLRVJOX0RFQlVHICJDb3VsZCBub3QgZmluZCBzdGF0aW9uOiAlcE1cbiIsIHJhKTsKICNlbmRpZgogCQlyZXR1cm47CiAJfQogCi0Jc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOwotCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKKwltdXRleF9sb2NrKCZzdGEtPmFtcGR1X21sbWUubXR4KTsKKwl0aWRfdHggPSBzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF07CiAKLQlpZiAoV0FSTl9PTighKCpzdGF0ZSAmIEhUX0FEREJBX1JFUVVFU1RFRF9NU0spKSkgeworCWlmIChXQVJOX09OKCF0aWRfdHgpKSB7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJhZGRCQSB3YXMgbm90IHJlcXVlc3RlZCB5ZXQsIHN0YXRlIGlzICVkXG4iLAotCQkJCSpzdGF0ZSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJhZGRCQSB3YXMgbm90IHJlcXVlc3RlZCFcbiIpOwogI2VuZGlmCi0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmV0dXJuOworCQlnb3RvIHVubG9jazsKIAl9CiAKLQlpZiAoV0FSTl9PTigqc3RhdGUgJiBIVF9BRERCQV9EUlZfUkVBRFlfTVNLKSkKLQkJZ290byBvdXQ7CisJaWYgKFdBUk5fT04odGVzdF9hbmRfc2V0X2JpdChIVF9BR0dfU1RBVEVfRFJWX1JFQURZLCAmdGlkX3R4LT5zdGF0ZSkpKQorCQlnb3RvIHVubG9jazsKIAotCSpzdGF0ZSB8PSBIVF9BRERCQV9EUlZfUkVBRFlfTVNLOwotCi0JaWYgKCpzdGF0ZSA9PSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpCisJaWYgKHRlc3RfYml0KEhUX0FHR19TVEFURV9SRVNQT05TRV9SRUNFSVZFRCwgJnRpZF90eC0+c3RhdGUpKQogCQlpZWVlODAyMTFfYWdnX3R4X29wZXJhdGlvbmFsKGxvY2FsLCBzdGEsIHRpZCk7CiAKLSBvdXQ6Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CisgdW5sb2NrOgorCW11dGV4X3VubG9jaygmc3RhLT5hbXBkdV9tbG1lLm10eCk7CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+c3RhX210eCk7CiB9Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFydF90eF9iYV9jYik7CiAKIHZvaWQgaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCQkgICAgICBjb25zdCB1OCAqcmEsIHUxNiB0aWQpCkBAIC01MTAsNDQgKzU2NywzNiBAQAogCXJhX3RpZCA9IChzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqKSAmc2tiLT5jYjsKIAltZW1jcHkoJnJhX3RpZC0+cmEsIHJhLCBFVEhfQUxFTik7CiAJcmFfdGlkLT50aWQgPSB0aWQ7Ci0JcmFfdGlkLT52aWYgPSB2aWY7CiAKLQlza2ItPnBrdF90eXBlID0gSUVFRTgwMjExX0FEREJBX01TRzsKLQlza2JfcXVldWVfdGFpbCgmbG9jYWwtPnNrYl9xdWV1ZSwgc2tiKTsKLQl0YXNrbGV0X3NjaGVkdWxlKCZsb2NhbC0+dGFza2xldCk7CisJc2tiLT5wa3RfdHlwZSA9IElFRUU4MDIxMV9TREFUQV9RVUVVRV9BR0dfU1RBUlQ7CisJc2tiX3F1ZXVlX3RhaWwoJnNkYXRhLT5za2JfcXVldWUsIHNrYik7CisJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJnNkYXRhLT53b3JrKTsKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUpOwogCiBpbnQgX19pZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAogCQkJCSAgIGVudW0gaWVlZTgwMjExX2JhY2tfcGFydGllcyBpbml0aWF0b3IpCiB7Ci0JdTggKnN0YXRlOwogCWludCByZXQ7CiAKLQkvKiBjaGVjayBpZiB0aGUgVElEIGlzIGluIGFnZ3JlZ2F0aW9uICovCi0Jc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOwotCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKLQotCWlmICgqc3RhdGUgIT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKSB7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gdW5sb2NrOwotCX0KKwltdXRleF9sb2NrKCZzdGEtPmFtcGR1X21sbWUubXR4KTsKIAogCXJldCA9IF9fX2llZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RhLCB0aWQsIGluaXRpYXRvcik7CiAKLSB1bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZzdGEtPmFtcGR1X21sbWUubXR4KTsKKwogCXJldHVybiByZXQ7CiB9CiAKLWludCBpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsIHUxNiB0aWQsCi0JCQkJIGVudW0gaWVlZTgwMjExX2JhY2tfcGFydGllcyBpbml0aWF0b3IpCitpbnQgaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLCB1MTYgdGlkKQogewogCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gY29udGFpbmVyX29mKHB1YnN0YSwgc3RydWN0IHN0YV9pbmZvLCBzdGEpOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gc3RhLT5zZGF0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3QgdGlkX2FtcGR1X3R4ICp0aWRfdHg7CisJaW50IHJldCA9IDA7CiAKLQl0cmFjZV9hcGlfc3RvcF90eF9iYV9zZXNzaW9uKHB1YnN0YSwgdGlkLCBpbml0aWF0b3IpOworCXRyYWNlX2FwaV9zdG9wX3R4X2JhX3Nlc3Npb24ocHVic3RhLCB0aWQpOwogCiAJaWYgKCFsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNTU1LDcgKzYwNCwyNiBAQAogCWlmICh0aWQgPj0gU1RBX1RJRF9OVU0pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIF9faWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdGEsIHRpZCwgaW5pdGlhdG9yKTsKKwlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CisJdGlkX3R4ID0gc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdOworCisJaWYgKCF0aWRfdHgpIHsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byB1bmxvY2s7CisJfQorCisJaWYgKHRlc3RfYml0KEhUX0FHR19TVEFURV9TVE9QUElORywgJnRpZF90eC0+c3RhdGUpKSB7CisJCS8qIGFscmVhZHkgaW4gcHJvZ3Jlc3Mgc3RvcHBpbmcgaXQgKi8KKwkJcmV0ID0gMDsKKwkJZ290byB1bmxvY2s7CisJfQorCisJc2V0X2JpdChIVF9BR0dfU1RBVEVfV0FOVF9TVE9QLCAmdGlkX3R4LT5zdGF0ZSk7CisJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJnN0YS0+YW1wZHVfbWxtZS53b3JrKTsKKworIHVubG9jazoKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKTsKIApAQCAtNTY0LDcgKzYzMiw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSB2aWZfdG9fc2RhdGEodmlmKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQl1OCAqc3RhdGU7CisJc3RydWN0IHRpZF9hbXBkdV90eCAqdGlkX3R4OwogCiAJdHJhY2VfYXBpX3N0b3BfdHhfYmFfY2Ioc2RhdGEsIHJhLCB0aWQpOwogCkBAIC01ODEsNTEgKzY0OSw1NiBAQAogCSAgICAgICByYSwgdGlkKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KIAotCXJjdV9yZWFkX2xvY2soKTsKKwltdXRleF9sb2NrKCZsb2NhbC0+c3RhX210eCk7CisKIAlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIHJhKTsKIAlpZiAoIXN0YSkgewogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwogCQlwcmludGsoS0VSTl9ERUJVRyAiQ291bGQgbm90IGZpbmQgc3RhdGlvbjogJXBNXG4iLCByYSk7CiAjZW5kaWYKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybjsKKwkJZ290byB1bmxvY2s7CiAJfQotCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKIAotCS8qIE5PVEU6IG5vIG5lZWQgdG8gdXNlIHN0YS0+bG9jayBpbiB0aGlzIHN0YXRlIGNoZWNrLCBhcwotCSAqIGllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24gd2lsbCBsZXQgb25seSBvbmUgc3RvcCBjYWxsIHRvCi0JICogcGFzcyB0aHJvdWdoIHBlciBzdGEvdGlkCi0JICovCi0JaWYgKCgqc3RhdGUgJiBIVF9BR0dfU1RBVEVfUkVRX1NUT1BfQkFfTVNLKSA9PSAwKSB7CisJbXV0ZXhfbG9jaygmc3RhLT5hbXBkdV9tbG1lLm10eCk7CisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCXRpZF90eCA9IHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXTsKKworCWlmICghdGlkX3R4IHx8ICF0ZXN0X2JpdChIVF9BR0dfU1RBVEVfU1RPUFBJTkcsICZ0aWRfdHgtPnN0YXRlKSkgewogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwogCQlwcmludGsoS0VSTl9ERUJVRyAidW5leHBlY3RlZCBjYWxsYmFjayB0byBBLU1QRFUgc3RvcFxuIik7CiAjZW5kaWYKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybjsKKwkJZ290byB1bmxvY2tfc3RhOwogCX0KIAotCWlmICgqc3RhdGUgJiBIVF9BR0dfU1RBVEVfSU5JVElBVE9SX01TSykKKwlpZiAodGlkX3R4LT5zdG9wX2luaXRpYXRvciA9PSBXTEFOX0JBQ0tfSU5JVElBVE9SKQogCQlpZWVlODAyMTFfc2VuZF9kZWxiYShzdGEtPnNkYXRhLCByYSwgdGlkLAogCQkJV0xBTl9CQUNLX0lOSVRJQVRPUiwgV0xBTl9SRUFTT05fUVNUQV9OT1RfVVNFKTsKIAotCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKLQlzcGluX2xvY2soJmxvY2FsLT5hbXBkdV9sb2NrKTsKKwkvKgorCSAqIFdoZW4gd2UgZ2V0IGhlcmUsIHRoZSBUWCBwYXRoIHdpbGwgbm90IGJlIGxvY2tsZXNzIGFueSBtb3JlIHdydC4KKwkgKiBhZ2dyZWdhdGlvbiwgc2luY2UgdGhlIE9QRVJBVElPTkFMIGJpdCBoYXMgbG9uZyBiZWVuIGNsZWFyZWQuCisJICogVGh1cyBpdCB3aWxsIGJsb2NrIG9uIGdldHRpbmcgdGhlIGxvY2ssIGlmIGl0IG9jY3Vycy4gU28gaWYgd2UKKwkgKiBzdG9wIHRoZSBxdWV1ZSBub3csIHdlIHdpbGwgbm90IGdldCBhbnkgbW9yZSBwYWNrZXRzLCBhbmQgYW55CisJICogdGhhdCBtaWdodCBiZSBiZWluZyBwcm9jZXNzZWQgd2lsbCB3YWl0IGZvciB1cyBoZXJlLCB0aGVyZWJ5CisJICogZ3VhcmFudGVlaW5nIHRoYXQgbm8gcGFja2V0cyBnbyB0byB0aGUgdGlkX3R4IHBlbmRpbmcgcXVldWUgYW55CisJICogbW9yZS4KKwkgKi8KIAotCWllZWU4MDIxMV9hZ2dfc3BsaWNlX3BhY2tldHMobG9jYWwsIHN0YSwgdGlkKTsKKwlpZWVlODAyMTFfYWdnX3NwbGljZV9wYWNrZXRzKGxvY2FsLCB0aWRfdHgsIHRpZCk7CiAKLQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfSURMRTsKLQkvKiBmcm9tIG5vdyBvbiBwYWNrZXRzIGFyZSBubyBsb25nZXIgcHV0IG9udG8gc3RhLT5wZW5kaW5nICovCi0Ja2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdKTsKLQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0gPSBOVUxMOworCS8qIGZ1dHVyZSBwYWNrZXRzIG11c3Qgbm90IGZpbmQgdGhlIHRpZF90eCBzdHJ1Y3QgYW55IG1vcmUgKi8KKwlyY3VfYXNzaWduX3BvaW50ZXIoc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLCBOVUxMKTsKIAotCWllZWU4MDIxMV9hZ2dfc3BsaWNlX2ZpbmlzaChsb2NhbCwgc3RhLCB0aWQpOworCWllZWU4MDIxMV9hZ2dfc3BsaWNlX2ZpbmlzaChsb2NhbCwgdGlkKTsKIAotCXNwaW5fdW5sb2NrKCZsb2NhbC0+YW1wZHVfbG9jayk7CisJY2FsbF9yY3UoJnRpZF90eC0+cmN1X2hlYWQsIGtmcmVlX3RpZF90eCk7CisKKyB1bmxvY2tfc3RhOgogCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCi0JcmN1X3JlYWRfdW5sb2NrKCk7CisJbXV0ZXhfdW5sb2NrKCZzdGEtPmFtcGR1X21sbWUubXR4KTsKKyB1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+c3RhX210eCk7CiB9Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiKTsKIAogdm9pZCBpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCQkJICAgICBjb25zdCB1OCAqcmEsIHUxNiB0aWQpCkBAIC02NDYsMTEgKzcxOSwxMCBAQAogCXJhX3RpZCA9IChzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqKSAmc2tiLT5jYjsKIAltZW1jcHkoJnJhX3RpZC0+cmEsIHJhLCBFVEhfQUxFTik7CiAJcmFfdGlkLT50aWQgPSB0aWQ7Ci0JcmFfdGlkLT52aWYgPSB2aWY7CiAKLQlza2ItPnBrdF90eXBlID0gSUVFRTgwMjExX0RFTEJBX01TRzsKLQlza2JfcXVldWVfdGFpbCgmbG9jYWwtPnNrYl9xdWV1ZSwgc2tiKTsKLQl0YXNrbGV0X3NjaGVkdWxlKCZsb2NhbC0+dGFza2xldCk7CisJc2tiLT5wa3RfdHlwZSA9IElFRUU4MDIxMV9TREFUQV9RVUVVRV9BR0dfU1RPUDsKKwlza2JfcXVldWVfdGFpbCgmc2RhdGEtPnNrYl9xdWV1ZSwgc2tiKTsKKwlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmc2RhdGEtPndvcmspOwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlKTsKIApAQCAtNjYwLDQwICs3MzIsNDAgQEAKIAkJCQkgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKIAkJCQkgIHNpemVfdCBsZW4pCiB7CisJc3RydWN0IHRpZF9hbXBkdV90eCAqdGlkX3R4OwogCXUxNiBjYXBhYiwgdGlkOwotCXU4ICpzdGF0ZTsKIAogCWNhcGFiID0gbGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmNhcGFiKTsKIAl0aWQgPSAoY2FwYWIgJiBJRUVFODAyMTFfQUREQkFfUEFSQU1fVElEX01BU0spID4+IDI7CiAKLQlzdGF0ZSA9ICZzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07CisJbXV0ZXhfbG9jaygmc3RhLT5hbXBkdV9tbG1lLm10eCk7CiAKLQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0KLQlpZiAoISgqc3RhdGUgJiBIVF9BRERCQV9SRVFVRVNURURfTVNLKSkKKwl0aWRfdHggPSBzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF07CisJaWYgKCF0aWRfdHgpCiAJCWdvdG8gb3V0OwogCi0JaWYgKG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5kaWFsb2dfdG9rZW4gIT0KLQkJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5kaWFsb2dfdG9rZW4pIHsKKwlpZiAobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmRpYWxvZ190b2tlbiAhPSB0aWRfdHgtPmRpYWxvZ190b2tlbikgewogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwogCQlwcmludGsoS0VSTl9ERUJVRyAid3JvbmcgYWRkQkEgcmVzcG9uc2UgdG9rZW4sIHRpZCAlZFxuIiwgdGlkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKyNlbmRpZgogCQlnb3RvIG91dDsKIAl9CiAKLQlkZWxfdGltZXIoJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lcik7CisJZGVsX3RpbWVyKCZ0aWRfdHgtPmFkZGJhX3Jlc3BfdGltZXIpOwogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCiAJcHJpbnRrKEtFUk5fREVCVUcgInN3aXRjaGVkIG9mZiBhZGRCQSB0aW1lciBmb3IgdGlkICVkXG4iLCB0aWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworI2VuZGlmCiAKIAlpZiAobGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLnN0YXR1cykKIAkJCT09IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKLQkJdTggY3Vyc3RhdGUgPSAqc3RhdGU7CisJCWlmICh0ZXN0X2FuZF9zZXRfYml0KEhUX0FHR19TVEFURV9SRVNQT05TRV9SRUNFSVZFRCwKKwkJCQkgICAgICZ0aWRfdHgtPnN0YXRlKSkgeworCQkJLyogaWdub3JlIGR1cGxpY2F0ZSByZXNwb25zZSAqLworCQkJZ290byBvdXQ7CisJCX0KIAotCQkqc3RhdGUgfD0gSFRfQUREQkFfUkVDRUlWRURfTVNLOwotCi0JCWlmICgqc3RhdGUgIT0gY3Vyc3RhdGUgJiYgKnN0YXRlID09IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCkKKwkJaWYgKHRlc3RfYml0KEhUX0FHR19TVEFURV9EUlZfUkVBRFksICZ0aWRfdHgtPnN0YXRlKSkKIAkJCWllZWU4MDIxMV9hZ2dfdHhfb3BlcmF0aW9uYWwobG9jYWwsIHN0YSwgdGlkKTsKIAogCQlzdGEtPmFtcGR1X21sbWUuYWRkYmFfcmVxX251bVt0aWRdID0gMDsKQEAgLTcwMiw1ICs3NzQsNSBAQAogCX0KIAogIG91dDoKLQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKwltdXRleF91bmxvY2soJnN0YS0+YW1wZHVfbWxtZS5tdHgpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2NmZy5jIGIvbmV0L21hYzgwMjExL2NmZy5jCmluZGV4IGM3MDAwYTYuLjI5YWM4ZTEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9jZmcuYworKysgYi9uZXQvbWFjODAyMTEvY2ZnLmMKQEAgLTEyMCw2ICsxMjAsOSBAQAogCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXk7CiAJaW50IGVycjsKIAorCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVORVRET1dOOworCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCiAJc3dpdGNoIChwYXJhbXMtPmNpcGhlcikgewpAQCAtMTQwLDE3ICsxNDMsMjIgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJLyogcmVqZWN0IFdFUCBhbmQgVEtJUCBrZXlzIGlmIFdFUCBmYWlsZWQgdG8gaW5pdGlhbGl6ZSAqLworCWlmICgoYWxnID09IEFMR19XRVAgfHwgYWxnID09IEFMR19US0lQKSAmJgorCSAgICBJU19FUlIoc2RhdGEtPmxvY2FsLT53ZXBfdHhfdGZtKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlrZXkgPSBpZWVlODAyMTFfa2V5X2FsbG9jKGFsZywga2V5X2lkeCwgcGFyYW1zLT5rZXlfbGVuLCBwYXJhbXMtPmtleSwKIAkJCQkgIHBhcmFtcy0+c2VxX2xlbiwgcGFyYW1zLT5zZXEpOwogCWlmICgha2V5KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJjdV9yZWFkX2xvY2soKTsKKwltdXRleF9sb2NrKCZzZGF0YS0+bG9jYWwtPnN0YV9tdHgpOwogCiAJaWYgKG1hY19hZGRyKSB7CiAJCXN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1hY19hZGRyKTsKIAkJaWYgKCFzdGEpIHsKLQkJCWllZWU4MDIxMV9rZXlfZnJlZShrZXkpOworCQkJaWVlZTgwMjExX2tleV9mcmVlKHNkYXRhLT5sb2NhbCwga2V5KTsKIAkJCWVyciA9IC1FTk9FTlQ7CiAJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KQEAgLTE2MCw3ICsxNjgsNyBAQAogCiAJZXJyID0gMDsKICBvdXRfdW5sb2NrOgotCXJjdV9yZWFkX3VubG9jaygpOworCW11dGV4X3VubG9jaygmc2RhdGEtPmxvY2FsLT5zdGFfbXR4KTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0xNzQsNyArMTgyLDcgQEAKIAogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAotCXJjdV9yZWFkX2xvY2soKTsKKwltdXRleF9sb2NrKCZzZGF0YS0+bG9jYWwtPnN0YV9tdHgpOwogCiAJaWYgKG1hY19hZGRyKSB7CiAJCXJldCA9IC1FTk9FTlQ7CkBAIC0xODQsNyArMTkyLDcgQEAKIAkJCWdvdG8gb3V0X3VubG9jazsKIAogCQlpZiAoc3RhLT5rZXkpIHsKLQkJCWllZWU4MDIxMV9rZXlfZnJlZShzdGEtPmtleSk7CisJCQlpZWVlODAyMTFfa2V5X2ZyZWUoc2RhdGEtPmxvY2FsLCBzdGEtPmtleSk7CiAJCQlXQVJOX09OKHN0YS0+a2V5KTsKIAkJCXJldCA9IDA7CiAJCX0KQEAgLTE5NywxMiArMjA1LDEyIEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQlpZWVlODAyMTFfa2V5X2ZyZWUoc2RhdGEtPmtleXNba2V5X2lkeF0pOworCWllZWU4MDIxMV9rZXlfZnJlZShzZGF0YS0+bG9jYWwsIHNkYXRhLT5rZXlzW2tleV9pZHhdKTsKIAlXQVJOX09OKHNkYXRhLT5rZXlzW2tleV9pZHhdKTsKIAogCXJldCA9IDA7CiAgb3V0X3VubG9jazoKLQlyY3VfcmVhZF91bmxvY2soKTsKKwltdXRleF91bmxvY2soJnNkYXRhLT5sb2NhbC0+c3RhX210eCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzA1LDE1ICszMTMsMTAgQEAKIAkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJdTgga2V5X2lkeCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0KLQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAJaWVlZTgwMjExX3NldF9kZWZhdWx0X2tleShzZGF0YSwga2V5X2lkeCk7CiAKLQlyY3VfcmVhZF91bmxvY2soKTsKLQogCXJldHVybiAwOwogfQogCkBAIC0zMjEsMTUgKzMyNCwxMCBAQAogCQkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCSAgICAgdTgga2V5X2lkeCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0KLQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAJaWVlZTgwMjExX3NldF9kZWZhdWx0X21nbXRfa2V5KHNkYXRhLCBrZXlfaWR4KTsKIAotCXJjdV9yZWFkX3VubG9jaygpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQxNSw5ICs0MTMsNiBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CiAKLQlpZiAoIWxvY2FsLT5vcHMtPmdldF9zdXJ2ZXkpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQogCXJldHVybiBkcnZfZ2V0X3N1cnZleShsb2NhbCwgaWR4LCBzdXJ2ZXkpOwogfQogCkBAIC02MDAsNyArNTk1LDcgQEAKIAl1OCBzc2FwOwkJLyogMCAqLwogCXU4IGNvbnRyb2w7CiAJdTggeGlkX2luZm9bM107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2xheWVyMl91cGRhdGUoc3RydWN0IHN0YV9pbmZvICpzdGEpCiB7CkBAIC02MzIsNyArNjI3LDcgQEAKIAlza2ItPmRldiA9IHN0YS0+c2RhdGEtPmRldjsKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBzdGEtPnNkYXRhLT5kZXYpOwogCW1lbXNldChza2ItPmNiLCAwLCBzaXplb2Yoc2tiLT5jYikpOwotCW5ldGlmX3J4KHNrYik7CisJbmV0aWZfcnhfbmkoc2tiKTsKIH0KIAogc3RhdGljIHZvaWQgc3RhX2FwcGx5X3BhcmFtZXRlcnMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCkBAIC0xMTU0LDEwICsxMTQ5LDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyogZW5hYmxlIFdNTSBvciBhY3RpdmF0ZSBuZXcgc2V0dGluZ3MgKi8KLQlsb2NhbC0+aHcuY29uZi5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9RT1M7Ci0JZHJ2X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1FPUyk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTMzMSwyOCArMTMyMiwyOCBAQAogfQogCiBzdGF0aWMgaW50IGllZWU4MDIxMV9zZXRfdHhfcG93ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwKLQkJCQkgIGVudW0gdHhfcG93ZXJfc2V0dGluZyB0eXBlLCBpbnQgZGJtKQorCQkJCSAgZW51bSBubDgwMjExX3R4X3Bvd2VyX3NldHRpbmcgdHlwZSwgaW50IG1ibSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdpcGh5X3ByaXYod2lwaHkpOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiA9IGxvY2FsLT5ody5jb25mLmNoYW5uZWw7CiAJdTMyIGNoYW5nZXMgPSAwOwogCiAJc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBUWF9QT1dFUl9BVVRPTUFUSUM6CisJY2FzZSBOTDgwMjExX1RYX1BPV0VSX0FVVE9NQVRJQzoKIAkJbG9jYWwtPnVzZXJfcG93ZXJfbGV2ZWwgPSAtMTsKIAkJYnJlYWs7Ci0JY2FzZSBUWF9QT1dFUl9MSU1JVEVEOgotCQlpZiAoZGJtIDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlsb2NhbC0+dXNlcl9wb3dlcl9sZXZlbCA9IGRibTsKKwljYXNlIE5MODAyMTFfVFhfUE9XRVJfTElNSVRFRDoKKwkJaWYgKG1ibSA8IDAgfHwgKG1ibSAlIDEwMCkpCisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCWxvY2FsLT51c2VyX3Bvd2VyX2xldmVsID0gTUJNX1RPX0RCTShtYm0pOwogCQlicmVhazsKLQljYXNlIFRYX1BPV0VSX0ZJWEVEOgotCQlpZiAoZGJtIDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOworCWNhc2UgTkw4MDIxMV9UWF9QT1dFUl9GSVhFRDoKKwkJaWYgKG1ibSA8IDAgfHwgKG1ibSAlIDEwMCkpCisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJCS8qIFRPRE86IG1vdmUgdG8gY2ZnODAyMTEgd2hlbiBpdCBrbm93cyB0aGUgY2hhbm5lbCAqLwotCQlpZiAoZGJtID4gY2hhbi0+bWF4X3Bvd2VyKQorCQlpZiAoTUJNX1RPX0RCTShtYm0pID4gY2hhbi0+bWF4X3Bvd2VyKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWxvY2FsLT51c2VyX3Bvd2VyX2xldmVsID0gZGJtOworCQlsb2NhbC0+dXNlcl9wb3dlcl9sZXZlbCA9IE1CTV9UT19EQk0obWJtKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0xNDQ4LDcgKzE0MzksNiBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZsb2NhbC0+aHcuY29uZjsKIAogCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtMTQ1NywxMSArMTQ0NywxMSBAQAogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpZiAoZW5hYmxlZCA9PSBzZGF0YS0+dS5tZ2QucG93ZXJzYXZlICYmCi0JICAgIHRpbWVvdXQgPT0gY29uZi0+ZHluYW1pY19wc19mb3JjZWRfdGltZW91dCkKKwkgICAgdGltZW91dCA9PSBsb2NhbC0+ZHluYW1pY19wc19mb3JjZWRfdGltZW91dCkKIAkJcmV0dXJuIDA7CiAKIAlzZGF0YS0+dS5tZ2QucG93ZXJzYXZlID0gZW5hYmxlZDsKLQljb25mLT5keW5hbWljX3BzX2ZvcmNlZF90aW1lb3V0ID0gdGltZW91dDsKKwlsb2NhbC0+ZHluYW1pY19wc19mb3JjZWRfdGltZW91dCA9IHRpbWVvdXQ7CiAKIAkvKiBubyBjaGFuZ2UsIGJ1dCBpZiBhdXRvbWF0aWMgZm9sbG93IHBvd2Vyc2F2ZSAqLwogCW11dGV4X2xvY2soJnNkYXRhLT51Lm1nZC5tdHgpOwpAQCAtMTU1NCwxMCArMTU0NCw1OCBAQAogc3RhdGljIGludCBpZWVlODAyMTFfYWN0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAogCQkJICAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAorCQkJICAgIGJvb2wgY2hhbm5lbF90eXBlX3ZhbGlkLAogCQkJICAgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sIHU2NCAqY29va2llKQogewotCXJldHVybiBpZWVlODAyMTFfbWdkX2FjdGlvbihJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpLCBjaGFuLAotCQkJCSAgICBjaGFubmVsX3R5cGUsIGJ1ZiwgbGVuLCBjb29raWUpOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopYnVmOworCXUzMiBmbGFncyA9IElFRUU4MDIxMV9UWF9JTlRGTF9OTDgwMjExX0ZSQU1FX1RYIHwKKwkJICAgIElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUzsKKworCS8qIENoZWNrIHRoYXQgd2UgYXJlIG9uIHRoZSByZXF1ZXN0ZWQgY2hhbm5lbCBmb3IgdHJhbnNtaXNzaW9uICovCisJaWYgKGNoYW4gIT0gbG9jYWwtPnRtcF9jaGFubmVsICYmCisJICAgIGNoYW4gIT0gbG9jYWwtPm9wZXJfY2hhbm5lbCkKKwkJcmV0dXJuIC1FQlVTWTsKKwlpZiAoY2hhbm5lbF90eXBlX3ZhbGlkICYmCisJICAgIChjaGFubmVsX3R5cGUgIT0gbG9jYWwtPnRtcF9jaGFubmVsX3R5cGUgJiYKKwkgICAgIGNoYW5uZWxfdHlwZSAhPSBsb2NhbC0+X29wZXJfY2hhbm5lbF90eXBlKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJaWYgKG1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ID09IFdMQU5fQ0FURUdPUllfUFVCTElDKQorCQkJYnJlYWs7CisJCXJjdV9yZWFkX2xvY2soKTsKKwkJc3RhID0gc3RhX2luZm9fZ2V0KHNkYXRhLCBtZ210LT5kYSk7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlpZiAoIXN0YSkKKwkJCXJldHVybiAtRU5PTElOSzsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlpZiAoIShzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX01GUF9FTkFCTEVEKSkKKwkJCWZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIGxlbik7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKworCW1lbWNweShza2JfcHV0KHNrYiwgbGVuKSwgYnVmLCBsZW4pOworCisJSUVFRTgwMjExX1NLQl9DQihza2IpLT5mbGFncyA9IGZsYWdzOworCisJc2tiLT5kZXYgPSBzZGF0YS0+ZGV2OworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYik7CisKKwkqY29va2llID0gKHVuc2lnbmVkIGxvbmcpIHNrYjsKKwlyZXR1cm4gMDsKIH0KIAogc3RydWN0IGNmZzgwMjExX29wcyBtYWM4MDIxMV9jb25maWdfb3BzID0gewpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnMuYyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMKaW5kZXggNjM3OTI5Yi4uYTY5NGM1OSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnMuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmcy5jCkBAIC0zMDcsOSArMzA3LDYgQEAKIAogLyogc3RhdGlzdGljcyBzdHVmZiAqLwogCi0jZGVmaW5lIERFQlVHRlNfU1RBVFNfRklMRShuYW1lLCBidWZsZW4sIGZtdCwgdmFsdWUuLi4pCQkJXAotCURFQlVHRlNfUkVBRE9OTFlfRklMRShzdGF0c18gIyNuYW1lLCBidWZsZW4sIGZtdCwgIyN2YWx1ZSkKLQogc3RhdGljIHNzaXplX3QgZm9ybWF0X2RldnN0YXRfY291bnRlcihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAljaGFyIF9fdXNlciAqdXNlcmJ1ZiwKIAlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcywKQEAgLTM1MSw3NSArMzQ4LDE2IEBACiAJLm9wZW4gPSBtYWM4MDIxMV9vcGVuX2ZpbGVfZ2VuZXJpYywJCQkJXAogfTsKIAotI2RlZmluZSBERUJVR0ZTX1NUQVRTX0FERChuYW1lKQkJCQkJCVwKKyNkZWZpbmUgREVCVUdGU19TVEFUU19BREQobmFtZSwgZmllbGQpCQkJCQlcCisJZGVidWdmc19jcmVhdGVfdTMyKCNuYW1lLCAwNDAwLCBzdGF0c2QsICh1MzIgKikgJmZpZWxkKTsKKyNkZWZpbmUgREVCVUdGU19ERVZTVEFUU19BREQobmFtZSkJCQkJCVwKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCNuYW1lLCAwNDAwLCBzdGF0c2QsIGxvY2FsLCAmc3RhdHNfICMjbmFtZSMjIF9vcHMpOwogCi1ERUJVR0ZTX1NUQVRTX0ZJTEUodHJhbnNtaXR0ZWRfZnJhZ21lbnRfY291bnQsIDIwLCAiJXUiLAotCQkgICBsb2NhbC0+ZG90MTFUcmFuc21pdHRlZEZyYWdtZW50Q291bnQpOwotREVCVUdGU19TVEFUU19GSUxFKG11bHRpY2FzdF90cmFuc21pdHRlZF9mcmFtZV9jb3VudCwgMjAsICIldSIsCi0JCSAgIGxvY2FsLT5kb3QxMU11bHRpY2FzdFRyYW5zbWl0dGVkRnJhbWVDb3VudCk7Ci1ERUJVR0ZTX1NUQVRTX0ZJTEUoZmFpbGVkX2NvdW50LCAyMCwgIiV1IiwKLQkJICAgbG9jYWwtPmRvdDExRmFpbGVkQ291bnQpOwotREVCVUdGU19TVEFUU19GSUxFKHJldHJ5X2NvdW50LCAyMCwgIiV1IiwKLQkJICAgbG9jYWwtPmRvdDExUmV0cnlDb3VudCk7Ci1ERUJVR0ZTX1NUQVRTX0ZJTEUobXVsdGlwbGVfcmV0cnlfY291bnQsIDIwLCAiJXUiLAotCQkgICBsb2NhbC0+ZG90MTFNdWx0aXBsZVJldHJ5Q291bnQpOwotREVCVUdGU19TVEFUU19GSUxFKGZyYW1lX2R1cGxpY2F0ZV9jb3VudCwgMjAsICIldSIsCi0JCSAgIGxvY2FsLT5kb3QxMUZyYW1lRHVwbGljYXRlQ291bnQpOwotREVCVUdGU19TVEFUU19GSUxFKHJlY2VpdmVkX2ZyYWdtZW50X2NvdW50LCAyMCwgIiV1IiwKLQkJICAgbG9jYWwtPmRvdDExUmVjZWl2ZWRGcmFnbWVudENvdW50KTsKLURFQlVHRlNfU1RBVFNfRklMRShtdWx0aWNhc3RfcmVjZWl2ZWRfZnJhbWVfY291bnQsIDIwLCAiJXUiLAotCQkgICBsb2NhbC0+ZG90MTFNdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQpOwotREVCVUdGU19TVEFUU19GSUxFKHRyYW5zbWl0dGVkX2ZyYW1lX2NvdW50LCAyMCwgIiV1IiwKLQkJICAgbG9jYWwtPmRvdDExVHJhbnNtaXR0ZWRGcmFtZUNvdW50KTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlMKLURFQlVHRlNfU1RBVFNfRklMRSh0eF9oYW5kbGVyc19kcm9wLCAyMCwgIiV1IiwKLQkJICAgbG9jYWwtPnR4X2hhbmRsZXJzX2Ryb3ApOwotREVCVUdGU19TVEFUU19GSUxFKHR4X2hhbmRsZXJzX3F1ZXVlZCwgMjAsICIldSIsCi0JCSAgIGxvY2FsLT50eF9oYW5kbGVyc19xdWV1ZWQpOwotREVCVUdGU19TVEFUU19GSUxFKHR4X2hhbmRsZXJzX2Ryb3BfdW5lbmNyeXB0ZWQsIDIwLCAiJXUiLAotCQkgICBsb2NhbC0+dHhfaGFuZGxlcnNfZHJvcF91bmVuY3J5cHRlZCk7Ci1ERUJVR0ZTX1NUQVRTX0ZJTEUodHhfaGFuZGxlcnNfZHJvcF9mcmFnbWVudCwgMjAsICIldSIsCi0JCSAgIGxvY2FsLT50eF9oYW5kbGVyc19kcm9wX2ZyYWdtZW50KTsKLURFQlVHRlNfU1RBVFNfRklMRSh0eF9oYW5kbGVyc19kcm9wX3dlcCwgMjAsICIldSIsCi0JCSAgIGxvY2FsLT50eF9oYW5kbGVyc19kcm9wX3dlcCk7Ci1ERUJVR0ZTX1NUQVRTX0ZJTEUodHhfaGFuZGxlcnNfZHJvcF9ub3RfYXNzb2MsIDIwLCAiJXUiLAotCQkgICBsb2NhbC0+dHhfaGFuZGxlcnNfZHJvcF9ub3RfYXNzb2MpOwotREVCVUdGU19TVEFUU19GSUxFKHR4X2hhbmRsZXJzX2Ryb3BfdW5hdXRoX3BvcnQsIDIwLCAiJXUiLAotCQkgICBsb2NhbC0+dHhfaGFuZGxlcnNfZHJvcF91bmF1dGhfcG9ydCk7Ci1ERUJVR0ZTX1NUQVRTX0ZJTEUocnhfaGFuZGxlcnNfZHJvcCwgMjAsICIldSIsCi0JCSAgIGxvY2FsLT5yeF9oYW5kbGVyc19kcm9wKTsKLURFQlVHRlNfU1RBVFNfRklMRShyeF9oYW5kbGVyc19xdWV1ZWQsIDIwLCAiJXUiLAotCQkgICBsb2NhbC0+cnhfaGFuZGxlcnNfcXVldWVkKTsKLURFQlVHRlNfU1RBVFNfRklMRShyeF9oYW5kbGVyc19kcm9wX251bGxmdW5jLCAyMCwgIiV1IiwKLQkJICAgbG9jYWwtPnJ4X2hhbmRsZXJzX2Ryb3BfbnVsbGZ1bmMpOwotREVCVUdGU19TVEFUU19GSUxFKHJ4X2hhbmRsZXJzX2Ryb3BfZGVmcmFnLCAyMCwgIiV1IiwKLQkJICAgbG9jYWwtPnJ4X2hhbmRsZXJzX2Ryb3BfZGVmcmFnKTsKLURFQlVHRlNfU1RBVFNfRklMRShyeF9oYW5kbGVyc19kcm9wX3Nob3J0LCAyMCwgIiV1IiwKLQkJICAgbG9jYWwtPnJ4X2hhbmRsZXJzX2Ryb3Bfc2hvcnQpOwotREVCVUdGU19TVEFUU19GSUxFKHJ4X2hhbmRsZXJzX2Ryb3BfcGFzc2l2ZV9zY2FuLCAyMCwgIiV1IiwKLQkJICAgbG9jYWwtPnJ4X2hhbmRsZXJzX2Ryb3BfcGFzc2l2ZV9zY2FuKTsKLURFQlVHRlNfU1RBVFNfRklMRSh0eF9leHBhbmRfc2tiX2hlYWQsIDIwLCAiJXUiLAotCQkgICBsb2NhbC0+dHhfZXhwYW5kX3NrYl9oZWFkKTsKLURFQlVHRlNfU1RBVFNfRklMRSh0eF9leHBhbmRfc2tiX2hlYWRfY2xvbmVkLCAyMCwgIiV1IiwKLQkJICAgbG9jYWwtPnR4X2V4cGFuZF9za2JfaGVhZF9jbG9uZWQpOwotREVCVUdGU19TVEFUU19GSUxFKHJ4X2V4cGFuZF9za2JfaGVhZCwgMjAsICIldSIsCi0JCSAgIGxvY2FsLT5yeF9leHBhbmRfc2tiX2hlYWQpOwotREVCVUdGU19TVEFUU19GSUxFKHJ4X2V4cGFuZF9za2JfaGVhZDIsIDIwLCAiJXUiLAotCQkgICBsb2NhbC0+cnhfZXhwYW5kX3NrYl9oZWFkMik7Ci1ERUJVR0ZTX1NUQVRTX0ZJTEUocnhfaGFuZGxlcnNfZnJhZ21lbnRzLCAyMCwgIiV1IiwKLQkJICAgbG9jYWwtPnJ4X2hhbmRsZXJzX2ZyYWdtZW50cyk7Ci1ERUJVR0ZTX1NUQVRTX0ZJTEUodHhfc3RhdHVzX2Ryb3AsIDIwLCAiJXUiLAotCQkgICBsb2NhbC0+dHhfc3RhdHVzX2Ryb3ApOwotCi0jZW5kaWYKLQogREVCVUdGU19ERVZTVEFUU19GSUxFKGRvdDExQUNLRmFpbHVyZUNvdW50KTsKIERFQlVHRlNfREVWU1RBVFNfRklMRShkb3QxMVJUU0ZhaWx1cmVDb3VudCk7CiBERUJVR0ZTX0RFVlNUQVRTX0ZJTEUoZG90MTFGQ1NFcnJvckNvdW50KTsKIERFQlVHRlNfREVWU1RBVFNfRklMRShkb3QxMVJUU1N1Y2Nlc3NDb3VudCk7CiAKLQogdm9pZCBkZWJ1Z2ZzX2h3X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpwaHlkID0gbG9jYWwtPmh3LndpcGh5LT5kZWJ1Z2ZzZGlyOwpAQCAtNDQ4LDM4ICszODYsNjAgQEAKIAlpZiAoIXN0YXRzZCkKIAkJcmV0dXJuOwogCi0JREVCVUdGU19TVEFUU19BREQodHJhbnNtaXR0ZWRfZnJhZ21lbnRfY291bnQpOwotCURFQlVHRlNfU1RBVFNfQUREKG11bHRpY2FzdF90cmFuc21pdHRlZF9mcmFtZV9jb3VudCk7Ci0JREVCVUdGU19TVEFUU19BREQoZmFpbGVkX2NvdW50KTsKLQlERUJVR0ZTX1NUQVRTX0FERChyZXRyeV9jb3VudCk7Ci0JREVCVUdGU19TVEFUU19BREQobXVsdGlwbGVfcmV0cnlfY291bnQpOwotCURFQlVHRlNfU1RBVFNfQUREKGZyYW1lX2R1cGxpY2F0ZV9jb3VudCk7Ci0JREVCVUdGU19TVEFUU19BREQocmVjZWl2ZWRfZnJhZ21lbnRfY291bnQpOwotCURFQlVHRlNfU1RBVFNfQUREKG11bHRpY2FzdF9yZWNlaXZlZF9mcmFtZV9jb3VudCk7Ci0JREVCVUdGU19TVEFUU19BREQodHJhbnNtaXR0ZWRfZnJhbWVfY291bnQpOworCURFQlVHRlNfU1RBVFNfQUREKHRyYW5zbWl0dGVkX2ZyYWdtZW50X2NvdW50LAorCQlsb2NhbC0+ZG90MTFUcmFuc21pdHRlZEZyYWdtZW50Q291bnQpOworCURFQlVHRlNfU1RBVFNfQUREKG11bHRpY2FzdF90cmFuc21pdHRlZF9mcmFtZV9jb3VudCwKKwkJbG9jYWwtPmRvdDExTXVsdGljYXN0VHJhbnNtaXR0ZWRGcmFtZUNvdW50KTsKKwlERUJVR0ZTX1NUQVRTX0FERChmYWlsZWRfY291bnQsIGxvY2FsLT5kb3QxMUZhaWxlZENvdW50KTsKKwlERUJVR0ZTX1NUQVRTX0FERChyZXRyeV9jb3VudCwgbG9jYWwtPmRvdDExUmV0cnlDb3VudCk7CisJREVCVUdGU19TVEFUU19BREQobXVsdGlwbGVfcmV0cnlfY291bnQsCisJCWxvY2FsLT5kb3QxMU11bHRpcGxlUmV0cnlDb3VudCk7CisJREVCVUdGU19TVEFUU19BREQoZnJhbWVfZHVwbGljYXRlX2NvdW50LAorCQlsb2NhbC0+ZG90MTFGcmFtZUR1cGxpY2F0ZUNvdW50KTsKKwlERUJVR0ZTX1NUQVRTX0FERChyZWNlaXZlZF9mcmFnbWVudF9jb3VudCwKKwkJbG9jYWwtPmRvdDExUmVjZWl2ZWRGcmFnbWVudENvdW50KTsKKwlERUJVR0ZTX1NUQVRTX0FERChtdWx0aWNhc3RfcmVjZWl2ZWRfZnJhbWVfY291bnQsCisJCWxvY2FsLT5kb3QxMU11bHRpY2FzdFJlY2VpdmVkRnJhbWVDb3VudCk7CisJREVCVUdGU19TVEFUU19BREQodHJhbnNtaXR0ZWRfZnJhbWVfY291bnQsCisJCWxvY2FsLT5kb3QxMVRyYW5zbWl0dGVkRnJhbWVDb3VudCk7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHX0NPVU5URVJTCi0JREVCVUdGU19TVEFUU19BREQodHhfaGFuZGxlcnNfZHJvcCk7Ci0JREVCVUdGU19TVEFUU19BREQodHhfaGFuZGxlcnNfcXVldWVkKTsKLQlERUJVR0ZTX1NUQVRTX0FERCh0eF9oYW5kbGVyc19kcm9wX3VuZW5jcnlwdGVkKTsKLQlERUJVR0ZTX1NUQVRTX0FERCh0eF9oYW5kbGVyc19kcm9wX2ZyYWdtZW50KTsKLQlERUJVR0ZTX1NUQVRTX0FERCh0eF9oYW5kbGVyc19kcm9wX3dlcCk7Ci0JREVCVUdGU19TVEFUU19BREQodHhfaGFuZGxlcnNfZHJvcF9ub3RfYXNzb2MpOwotCURFQlVHRlNfU1RBVFNfQUREKHR4X2hhbmRsZXJzX2Ryb3BfdW5hdXRoX3BvcnQpOwotCURFQlVHRlNfU1RBVFNfQUREKHJ4X2hhbmRsZXJzX2Ryb3ApOwotCURFQlVHRlNfU1RBVFNfQUREKHJ4X2hhbmRsZXJzX3F1ZXVlZCk7Ci0JREVCVUdGU19TVEFUU19BREQocnhfaGFuZGxlcnNfZHJvcF9udWxsZnVuYyk7Ci0JREVCVUdGU19TVEFUU19BREQocnhfaGFuZGxlcnNfZHJvcF9kZWZyYWcpOwotCURFQlVHRlNfU1RBVFNfQUREKHJ4X2hhbmRsZXJzX2Ryb3Bfc2hvcnQpOwotCURFQlVHRlNfU1RBVFNfQUREKHJ4X2hhbmRsZXJzX2Ryb3BfcGFzc2l2ZV9zY2FuKTsKLQlERUJVR0ZTX1NUQVRTX0FERCh0eF9leHBhbmRfc2tiX2hlYWQpOwotCURFQlVHRlNfU1RBVFNfQUREKHR4X2V4cGFuZF9za2JfaGVhZF9jbG9uZWQpOwotCURFQlVHRlNfU1RBVFNfQUREKHJ4X2V4cGFuZF9za2JfaGVhZCk7Ci0JREVCVUdGU19TVEFUU19BREQocnhfZXhwYW5kX3NrYl9oZWFkMik7Ci0JREVCVUdGU19TVEFUU19BREQocnhfaGFuZGxlcnNfZnJhZ21lbnRzKTsKLQlERUJVR0ZTX1NUQVRTX0FERCh0eF9zdGF0dXNfZHJvcCk7CisJREVCVUdGU19TVEFUU19BREQodHhfaGFuZGxlcnNfZHJvcCwgbG9jYWwtPnR4X2hhbmRsZXJzX2Ryb3ApOworCURFQlVHRlNfU1RBVFNfQUREKHR4X2hhbmRsZXJzX3F1ZXVlZCwgbG9jYWwtPnR4X2hhbmRsZXJzX3F1ZXVlZCk7CisJREVCVUdGU19TVEFUU19BREQodHhfaGFuZGxlcnNfZHJvcF91bmVuY3J5cHRlZCwKKwkJbG9jYWwtPnR4X2hhbmRsZXJzX2Ryb3BfdW5lbmNyeXB0ZWQpOworCURFQlVHRlNfU1RBVFNfQUREKHR4X2hhbmRsZXJzX2Ryb3BfZnJhZ21lbnQsCisJCWxvY2FsLT50eF9oYW5kbGVyc19kcm9wX2ZyYWdtZW50KTsKKwlERUJVR0ZTX1NUQVRTX0FERCh0eF9oYW5kbGVyc19kcm9wX3dlcCwKKwkJbG9jYWwtPnR4X2hhbmRsZXJzX2Ryb3Bfd2VwKTsKKwlERUJVR0ZTX1NUQVRTX0FERCh0eF9oYW5kbGVyc19kcm9wX25vdF9hc3NvYywKKwkJbG9jYWwtPnR4X2hhbmRsZXJzX2Ryb3Bfbm90X2Fzc29jKTsKKwlERUJVR0ZTX1NUQVRTX0FERCh0eF9oYW5kbGVyc19kcm9wX3VuYXV0aF9wb3J0LAorCQlsb2NhbC0+dHhfaGFuZGxlcnNfZHJvcF91bmF1dGhfcG9ydCk7CisJREVCVUdGU19TVEFUU19BREQocnhfaGFuZGxlcnNfZHJvcCwgbG9jYWwtPnJ4X2hhbmRsZXJzX2Ryb3ApOworCURFQlVHRlNfU1RBVFNfQUREKHJ4X2hhbmRsZXJzX3F1ZXVlZCwgbG9jYWwtPnJ4X2hhbmRsZXJzX3F1ZXVlZCk7CisJREVCVUdGU19TVEFUU19BREQocnhfaGFuZGxlcnNfZHJvcF9udWxsZnVuYywKKwkJbG9jYWwtPnJ4X2hhbmRsZXJzX2Ryb3BfbnVsbGZ1bmMpOworCURFQlVHRlNfU1RBVFNfQUREKHJ4X2hhbmRsZXJzX2Ryb3BfZGVmcmFnLAorCQlsb2NhbC0+cnhfaGFuZGxlcnNfZHJvcF9kZWZyYWcpOworCURFQlVHRlNfU1RBVFNfQUREKHJ4X2hhbmRsZXJzX2Ryb3Bfc2hvcnQsCisJCWxvY2FsLT5yeF9oYW5kbGVyc19kcm9wX3Nob3J0KTsKKwlERUJVR0ZTX1NUQVRTX0FERChyeF9oYW5kbGVyc19kcm9wX3Bhc3NpdmVfc2NhbiwKKwkJbG9jYWwtPnJ4X2hhbmRsZXJzX2Ryb3BfcGFzc2l2ZV9zY2FuKTsKKwlERUJVR0ZTX1NUQVRTX0FERCh0eF9leHBhbmRfc2tiX2hlYWQsCisJCWxvY2FsLT50eF9leHBhbmRfc2tiX2hlYWQpOworCURFQlVHRlNfU1RBVFNfQUREKHR4X2V4cGFuZF9za2JfaGVhZF9jbG9uZWQsCisJCWxvY2FsLT50eF9leHBhbmRfc2tiX2hlYWRfY2xvbmVkKTsKKwlERUJVR0ZTX1NUQVRTX0FERChyeF9leHBhbmRfc2tiX2hlYWQsCisJCWxvY2FsLT5yeF9leHBhbmRfc2tiX2hlYWQpOworCURFQlVHRlNfU1RBVFNfQUREKHJ4X2V4cGFuZF9za2JfaGVhZDIsCisJCWxvY2FsLT5yeF9leHBhbmRfc2tiX2hlYWQyKTsKKwlERUJVR0ZTX1NUQVRTX0FERChyeF9oYW5kbGVyc19mcmFnbWVudHMsCisJCWxvY2FsLT5yeF9oYW5kbGVyc19mcmFnbWVudHMpOworCURFQlVHRlNfU1RBVFNfQUREKHR4X3N0YXR1c19kcm9wLAorCQlsb2NhbC0+dHhfc3RhdHVzX2Ryb3ApOwogI2VuZGlmCi0JREVCVUdGU19TVEFUU19BREQoZG90MTFBQ0tGYWlsdXJlQ291bnQpOwotCURFQlVHRlNfU1RBVFNfQUREKGRvdDExUlRTRmFpbHVyZUNvdW50KTsKLQlERUJVR0ZTX1NUQVRTX0FERChkb3QxMUZDU0Vycm9yQ291bnQpOwotCURFQlVHRlNfU1RBVFNfQUREKGRvdDExUlRTU3VjY2Vzc0NvdW50KTsKKwlERUJVR0ZTX0RFVlNUQVRTX0FERChkb3QxMUFDS0ZhaWx1cmVDb3VudCk7CisJREVCVUdGU19ERVZTVEFUU19BREQoZG90MTFSVFNGYWlsdXJlQ291bnQpOworCURFQlVHRlNfREVWU1RBVFNfQUREKGRvdDExRkNTRXJyb3JDb3VudCk7CisJREVCVUdGU19ERVZTVEFUU19BREQoZG90MTFSVFNTdWNjZXNzQ291bnQpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmMgYi9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuYwppbmRleCA5N2M5ZTQ2Li5mYTVlNzZlIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuYwpAQCAtMTQzLDcgKzE0Myw3IEBACiAJCWxlbiA9IHAgLSBidWY7CiAJCWJyZWFrOwogCWNhc2UgQUxHX0NDTVA6Ci0JCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfREFUQV9RVUVVRVM7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1JYX0RBVEFfUVVFVUVTICsgMTsgaSsrKSB7CiAJCQlycG4gPSBrZXktPnUuY2NtcC5yeF9wbltpXTsKIAkJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLAogCQkJCSAgICAgICAiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMgYi9uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuYwppbmRleCBlNzYzZjE1Li43NjgzOWQ0IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuYwpAQCAtMzAsNyArMzAsNiBAQAogfQogI2RlZmluZSBTVEFfUkVBRF9EKG5hbWUsIGZpZWxkKSBTVEFfUkVBRChuYW1lLCAyMCwgZmllbGQsICIlZFxuIikKICNkZWZpbmUgU1RBX1JFQURfVShuYW1lLCBmaWVsZCkgU1RBX1JFQUQobmFtZSwgMjAsIGZpZWxkLCAiJXVcbiIpCi0jZGVmaW5lIFNUQV9SRUFEX0xVKG5hbWUsIGZpZWxkKSBTVEFfUkVBRChuYW1lLCAyMCwgZmllbGQsICIlbHVcbiIpCiAjZGVmaW5lIFNUQV9SRUFEX1MobmFtZSwgZmllbGQpIFNUQV9SRUFEKG5hbWUsIDIwLCBmaWVsZCwgIiVzXG4iKQogCiAjZGVmaW5lIFNUQV9PUFMobmFtZSkJCQkJCQkJXApAQCAtNTIsMTkgKzUxLDcgQEAKIAogU1RBX0ZJTEUoYWlkLCBzdGEuYWlkLCBEKTsKIFNUQV9GSUxFKGRldiwgc2RhdGEtPm5hbWUsIFMpOwotU1RBX0ZJTEUocnhfcGFja2V0cywgcnhfcGFja2V0cywgTFUpOwotU1RBX0ZJTEUodHhfcGFja2V0cywgdHhfcGFja2V0cywgTFUpOwotU1RBX0ZJTEUocnhfYnl0ZXMsIHJ4X2J5dGVzLCBMVSk7Ci1TVEFfRklMRSh0eF9ieXRlcywgdHhfYnl0ZXMsIExVKTsKLVNUQV9GSUxFKHJ4X2R1cGxpY2F0ZXMsIG51bV9kdXBsaWNhdGVzLCBMVSk7Ci1TVEFfRklMRShyeF9mcmFnbWVudHMsIHJ4X2ZyYWdtZW50cywgTFUpOwotU1RBX0ZJTEUocnhfZHJvcHBlZCwgcnhfZHJvcHBlZCwgTFUpOwotU1RBX0ZJTEUodHhfZnJhZ21lbnRzLCB0eF9mcmFnbWVudHMsIExVKTsKLVNUQV9GSUxFKHR4X2ZpbHRlcmVkLCB0eF9maWx0ZXJlZF9jb3VudCwgTFUpOwotU1RBX0ZJTEUodHhfcmV0cnlfZmFpbGVkLCB0eF9yZXRyeV9mYWlsZWQsIExVKTsKLVNUQV9GSUxFKHR4X3JldHJ5X2NvdW50LCB0eF9yZXRyeV9jb3VudCwgTFUpOwogU1RBX0ZJTEUobGFzdF9zaWduYWwsIGxhc3Rfc2lnbmFsLCBEKTsKLVNUQV9GSUxFKHdlcF93ZWFrX2l2X2NvdW50LCB3ZXBfd2Vha19pdl9jb3VudCwgTFUpOwogCiBzdGF0aWMgc3NpemVfdCBzdGFfZmxhZ3NfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCiAJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKQEAgLTEzNCwyOCArMTIxLDI1IEBACiAJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikgKyBidWYgLSBwLCAibmV4dCBkaWFsb2dfdG9rZW46ICUjMDJ4XG4iLAogCQkJc3RhLT5hbXBkdV9tbG1lLmRpYWxvZ190b2tlbl9hbGxvY2F0b3IgKyAxKTsKIAlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKSArIGJ1ZiAtIHAsCi0JCSAgICAgICAiVElEXHRcdFJYIGFjdGl2ZVx0RFRLTlx0U1NOXHRcdFRYXHREVEtOXHRTU05cdHBlbmRpbmdcbiIpOworCQkgICAgICAgIlRJRFx0XHRSWCBhY3RpdmVcdERUS05cdFNTTlx0XHRUWFx0RFRLTlx0cGVuZGluZ1xuIik7CiAJZm9yIChpID0gMDsgaSA8IFNUQV9USURfTlVNOyBpKyspIHsKIAkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikgKyBidWYgLSBwLCAiJTAyZCIsIGkpOwogCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKSArIGJ1ZiAtIHAsICJcdFx0JXgiLAotCQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfYWN0aXZlX3J4W2ldKTsKKwkJCQkhIXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbaV0pOwogCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKSArIGJ1ZiAtIHAsICJcdCUjLjJ4IiwKLQkJCQlzdGEtPmFtcGR1X21sbWUudGlkX2FjdGl2ZV9yeFtpXSA/CisJCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFtpXSA/CiAJCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFtpXS0+ZGlhbG9nX3Rva2VuIDogMCk7CiAJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpICsgYnVmIC0gcCwgIlx0JSMuM3giLAotCQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfYWN0aXZlX3J4W2ldID8KKwkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W2ldID8KIAkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W2ldLT5zc24gOiAwKTsKIAogCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKSArIGJ1ZiAtIHAsICJcdFx0JXgiLAotCQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbaV0pOworCQkJCSEhc3RhLT5hbXBkdV9tbG1lLnRpZF90eFtpXSk7CiAJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpICsgYnVmIC0gcCwgIlx0JSMuMngiLAotCQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbaV0gPworCQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbaV0gPwogCQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbaV0tPmRpYWxvZ190b2tlbiA6IDApOwotCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKSArIGJ1ZiAtIHAsICJcdCUjLjN4IiwKLQkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W2ldID8KLQkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W2ldLT5zc24gOiAwKTsKIAkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikgKyBidWYgLSBwLCAiXHQlMDNkIiwKLQkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W2ldID8KKwkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W2ldID8KIAkJCQlza2JfcXVldWVfbGVuKCZzdGEtPmFtcGR1X21sbWUudGlkX3R4W2ldLT5wZW5kaW5nKSA6IDApOwogCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKSArIGJ1ZiAtIHAsICJcbiIpOwogCX0KQEAgLTIxMCw4ICsxOTQsNyBAQAogCQlpZiAoc3RhcnQpCiAJCQlyZXQgPSBpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbigmc3RhLT5zdGEsIHRpZCk7CiAJCWVsc2UKLQkJCXJldCA9IGllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oJnN0YS0+c3RhLCB0aWQsCi0JCQkJCQkJICAgV0xBTl9CQUNLX1JFQ0lQSUVOVCk7CisJCQlyZXQgPSBpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKCZzdGEtPnN0YSwgdGlkKTsKIAl9IGVsc2UgewogCQlfX2llZWU4MDIxMV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RhLCB0aWQsIFdMQU5fQkFDS19SRUNJUElFTlQsIDMpOwogCQlyZXQgPSAwOwpAQCAtMzA3LDYgKzI5MCwxMyBAQAogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoI25hbWUsIDA0MDAsIFwKIAkJc3RhLT5kZWJ1Z2ZzLmRpciwgc3RhLCAmc3RhXyAjI25hbWUjIyBfb3BzKTsKIAorI2RlZmluZSBERUJVR0ZTX0FERF9DT1VOVEVSKG5hbWUsIGZpZWxkKQkJCQlcCisJaWYgKHNpemVvZihzdGEtPmZpZWxkKSA9PSBzaXplb2YodTMyKSkJCQkJXAorCQlkZWJ1Z2ZzX2NyZWF0ZV91MzIoI25hbWUsIDA0MDAsIHN0YS0+ZGVidWdmcy5kaXIsCVwKKwkJCSh1MzIgKikgJnN0YS0+ZmllbGQpOwkJCQlcCisJZWxzZQkJCQkJCQkJXAorCQlkZWJ1Z2ZzX2NyZWF0ZV91NjQoI25hbWUsIDA0MDAsIHN0YS0+ZGVidWdmcy5kaXIsCVwKKwkJCSh1NjQgKikgJnN0YS0+ZmllbGQpOwogCiB2b2lkIGllZWU4MDIxMV9zdGFfZGVidWdmc19hZGQoc3RydWN0IHN0YV9pbmZvICpzdGEpCiB7CkBAIC0zMzksMjAgKzMyOSwyMSBAQAogCURFQlVHRlNfQUREKGxhc3Rfc2VxX2N0cmwpOwogCURFQlVHRlNfQUREKGFnZ19zdGF0dXMpOwogCURFQlVHRlNfQUREKGRldik7Ci0JREVCVUdGU19BREQocnhfcGFja2V0cyk7Ci0JREVCVUdGU19BREQodHhfcGFja2V0cyk7Ci0JREVCVUdGU19BREQocnhfYnl0ZXMpOwotCURFQlVHRlNfQUREKHR4X2J5dGVzKTsKLQlERUJVR0ZTX0FERChyeF9kdXBsaWNhdGVzKTsKLQlERUJVR0ZTX0FERChyeF9mcmFnbWVudHMpOwotCURFQlVHRlNfQUREKHJ4X2Ryb3BwZWQpOwotCURFQlVHRlNfQUREKHR4X2ZyYWdtZW50cyk7Ci0JREVCVUdGU19BREQodHhfZmlsdGVyZWQpOwotCURFQlVHRlNfQUREKHR4X3JldHJ5X2ZhaWxlZCk7Ci0JREVCVUdGU19BREQodHhfcmV0cnlfY291bnQpOwogCURFQlVHRlNfQUREKGxhc3Rfc2lnbmFsKTsKLQlERUJVR0ZTX0FERCh3ZXBfd2Vha19pdl9jb3VudCk7CiAJREVCVUdGU19BREQoaHRfY2FwYSk7CisKKwlERUJVR0ZTX0FERF9DT1VOVEVSKHJ4X3BhY2tldHMsIHJ4X3BhY2tldHMpOworCURFQlVHRlNfQUREX0NPVU5URVIodHhfcGFja2V0cywgdHhfcGFja2V0cyk7CisJREVCVUdGU19BRERfQ09VTlRFUihyeF9ieXRlcywgcnhfYnl0ZXMpOworCURFQlVHRlNfQUREX0NPVU5URVIodHhfYnl0ZXMsIHR4X2J5dGVzKTsKKwlERUJVR0ZTX0FERF9DT1VOVEVSKHJ4X2R1cGxpY2F0ZXMsIG51bV9kdXBsaWNhdGVzKTsKKwlERUJVR0ZTX0FERF9DT1VOVEVSKHJ4X2ZyYWdtZW50cywgcnhfZnJhZ21lbnRzKTsKKwlERUJVR0ZTX0FERF9DT1VOVEVSKHJ4X2Ryb3BwZWQsIHJ4X2Ryb3BwZWQpOworCURFQlVHRlNfQUREX0NPVU5URVIodHhfZnJhZ21lbnRzLCB0eF9mcmFnbWVudHMpOworCURFQlVHRlNfQUREX0NPVU5URVIodHhfZmlsdGVyZWQsIHR4X2ZpbHRlcmVkX2NvdW50KTsKKwlERUJVR0ZTX0FERF9DT1VOVEVSKHR4X3JldHJ5X2ZhaWxlZCwgdHhfcmV0cnlfZmFpbGVkKTsKKwlERUJVR0ZTX0FERF9DT1VOVEVSKHR4X3JldHJ5X2NvdW50LCB0eF9yZXRyeV9jb3VudCk7CisJREVCVUdGU19BRERfQ09VTlRFUih3ZXBfd2Vha19pdl9jb3VudCwgd2VwX3dlYWtfaXZfY291bnQpOwogfQogCiB2b2lkIGllZWU4MDIxMV9zdGFfZGVidWdmc19yZW1vdmUoc3RydWN0IHN0YV9pbmZvICpzdGEpCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oIGIvbmV0L21hYzgwMjExL2RyaXZlci1vcHMuaAppbmRleCA5YzFkYTA4Li4xNDEyM2RjIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oCisrKyBiL25ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmgKQEAgLTE2LDEwICsxNiwxMSBAQAogCiAJbWlnaHRfc2xlZXAoKTsKIAorCXRyYWNlX2Rydl9zdGFydChsb2NhbCk7CiAJbG9jYWwtPnN0YXJ0ZWQgPSB0cnVlOwogCXNtcF9tYigpOwogCXJldCA9IGxvY2FsLT5vcHMtPnN0YXJ0KCZsb2NhbC0+aHcpOwotCXRyYWNlX2Rydl9zdGFydChsb2NhbCwgcmV0KTsKKwl0cmFjZV9kcnZfcmV0dXJuX2ludChsb2NhbCwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNyw4ICsyOCw5IEBACiB7CiAJbWlnaHRfc2xlZXAoKTsKIAotCWxvY2FsLT5vcHMtPnN0b3AoJmxvY2FsLT5odyk7CiAJdHJhY2VfZHJ2X3N0b3AobG9jYWwpOworCWxvY2FsLT5vcHMtPnN0b3AoJmxvY2FsLT5odyk7CisJdHJhY2VfZHJ2X3JldHVybl92b2lkKGxvY2FsKTsKIAogCS8qIHN5bmMgYXdheSBhbGwgd29yayBvbiB0aGUgdGFza2xldCBiZWZvcmUgY2xlYXJpbmcgc3RhcnRlZCAqLwogCXRhc2tsZXRfZGlzYWJsZSgmbG9jYWwtPnRhc2tsZXQpOwpAQCAtNDYsOCArNDgsOSBAQAogCiAJbWlnaHRfc2xlZXAoKTsKIAorCXRyYWNlX2Rydl9hZGRfaW50ZXJmYWNlKGxvY2FsLCB2aWZfdG9fc2RhdGEodmlmKSk7CiAJcmV0ID0gbG9jYWwtPm9wcy0+YWRkX2ludGVyZmFjZSgmbG9jYWwtPmh3LCB2aWYpOwotCXRyYWNlX2Rydl9hZGRfaW50ZXJmYWNlKGxvY2FsLCB2aWZfdG9fc2RhdGEodmlmKSwgcmV0KTsKKwl0cmFjZV9kcnZfcmV0dXJuX2ludChsb2NhbCwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01Niw4ICs1OSw5IEBACiB7CiAJbWlnaHRfc2xlZXAoKTsKIAotCWxvY2FsLT5vcHMtPnJlbW92ZV9pbnRlcmZhY2UoJmxvY2FsLT5odywgdmlmKTsKIAl0cmFjZV9kcnZfcmVtb3ZlX2ludGVyZmFjZShsb2NhbCwgdmlmX3RvX3NkYXRhKHZpZikpOworCWxvY2FsLT5vcHMtPnJlbW92ZV9pbnRlcmZhY2UoJmxvY2FsLT5odywgdmlmKTsKKwl0cmFjZV9kcnZfcmV0dXJuX3ZvaWQobG9jYWwpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBkcnZfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1MzIgY2hhbmdlZCkKQEAgLTY2LDggKzcwLDkgQEAKIAogCW1pZ2h0X3NsZWVwKCk7CiAKKwl0cmFjZV9kcnZfY29uZmlnKGxvY2FsLCBjaGFuZ2VkKTsKIAlyZXQgPSBsb2NhbC0+b3BzLT5jb25maWcoJmxvY2FsLT5odywgY2hhbmdlZCk7Ci0JdHJhY2VfZHJ2X2NvbmZpZyhsb2NhbCwgY2hhbmdlZCwgcmV0KTsKKwl0cmFjZV9kcnZfcmV0dXJuX2ludChsb2NhbCwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC03OCw5ICs4MywxMCBAQAogewogCW1pZ2h0X3NsZWVwKCk7CiAKKwl0cmFjZV9kcnZfYnNzX2luZm9fY2hhbmdlZChsb2NhbCwgc2RhdGEsIGluZm8sIGNoYW5nZWQpOwogCWlmIChsb2NhbC0+b3BzLT5ic3NfaW5mb19jaGFuZ2VkKQogCQlsb2NhbC0+b3BzLT5ic3NfaW5mb19jaGFuZ2VkKCZsb2NhbC0+aHcsICZzZGF0YS0+dmlmLCBpbmZvLCBjaGFuZ2VkKTsKLQl0cmFjZV9kcnZfYnNzX2luZm9fY2hhbmdlZChsb2NhbCwgc2RhdGEsIGluZm8sIGNoYW5nZWQpOworCXRyYWNlX2Rydl9yZXR1cm5fdm9pZChsb2NhbCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTY0IGRydl9wcmVwYXJlX211bHRpY2FzdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKQEAgLTg4LDEwICs5NCwxMiBAQAogewogCXU2NCByZXQgPSAwOwogCisJdHJhY2VfZHJ2X3ByZXBhcmVfbXVsdGljYXN0KGxvY2FsLCBtY19saXN0LT5jb3VudCk7CisKIAlpZiAobG9jYWwtPm9wcy0+cHJlcGFyZV9tdWx0aWNhc3QpCiAJCXJldCA9IGxvY2FsLT5vcHMtPnByZXBhcmVfbXVsdGljYXN0KCZsb2NhbC0+aHcsIG1jX2xpc3QpOwogCi0JdHJhY2VfZHJ2X3ByZXBhcmVfbXVsdGljYXN0KGxvY2FsLCBtY19saXN0LT5jb3VudCwgcmV0KTsKKwl0cmFjZV9kcnZfcmV0dXJuX3U2NChsb2NhbCwgcmV0KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMDMsMTkgKzExMSwyMSBAQAogewogCW1pZ2h0X3NsZWVwKCk7CiAKLQlsb2NhbC0+b3BzLT5jb25maWd1cmVfZmlsdGVyKCZsb2NhbC0+aHcsIGNoYW5nZWRfZmxhZ3MsIHRvdGFsX2ZsYWdzLAotCQkJCSAgICAgbXVsdGljYXN0KTsKIAl0cmFjZV9kcnZfY29uZmlndXJlX2ZpbHRlcihsb2NhbCwgY2hhbmdlZF9mbGFncywgdG90YWxfZmxhZ3MsCiAJCQkJICAgbXVsdGljYXN0KTsKKwlsb2NhbC0+b3BzLT5jb25maWd1cmVfZmlsdGVyKCZsb2NhbC0+aHcsIGNoYW5nZWRfZmxhZ3MsIHRvdGFsX2ZsYWdzLAorCQkJCSAgICAgbXVsdGljYXN0KTsKKwl0cmFjZV9kcnZfcmV0dXJuX3ZvaWQobG9jYWwpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBkcnZfc2V0X3RpbShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIGJvb2wgc2V0KQogewogCWludCByZXQgPSAwOworCXRyYWNlX2Rydl9zZXRfdGltKGxvY2FsLCBzdGEsIHNldCk7CiAJaWYgKGxvY2FsLT5vcHMtPnNldF90aW0pCiAJCXJldCA9IGxvY2FsLT5vcHMtPnNldF90aW0oJmxvY2FsLT5odywgc3RhLCBzZXQpOwotCXRyYWNlX2Rydl9zZXRfdGltKGxvY2FsLCBzdGEsIHNldCwgcmV0KTsKKwl0cmFjZV9kcnZfcmV0dXJuX2ludChsb2NhbCwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMjksOCArMTM5LDkgQEAKIAogCW1pZ2h0X3NsZWVwKCk7CiAKKwl0cmFjZV9kcnZfc2V0X2tleShsb2NhbCwgY21kLCBzZGF0YSwgc3RhLCBrZXkpOwogCXJldCA9IGxvY2FsLT5vcHMtPnNldF9rZXkoJmxvY2FsLT5odywgY21kLCAmc2RhdGEtPnZpZiwgc3RhLCBrZXkpOwotCXRyYWNlX2Rydl9zZXRfa2V5KGxvY2FsLCBjbWQsIHNkYXRhLCBzdGEsIGtleSwgcmV0KTsKKwl0cmFjZV9kcnZfcmV0dXJuX2ludChsb2NhbCwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNDUsMTAgKzE1NiwxMSBAQAogCWlmIChzdGEpCiAJCWlzdGEgPSAmc3RhLT5zdGE7CiAKKwl0cmFjZV9kcnZfdXBkYXRlX3RraXBfa2V5KGxvY2FsLCBzZGF0YSwgY29uZiwgaXN0YSwgaXYzMik7CiAJaWYgKGxvY2FsLT5vcHMtPnVwZGF0ZV90a2lwX2tleSkKIAkJbG9jYWwtPm9wcy0+dXBkYXRlX3RraXBfa2V5KCZsb2NhbC0+aHcsICZzZGF0YS0+dmlmLCBjb25mLAogCQkJCQkgICAgaXN0YSwgaXYzMiwgcGhhc2Uxa2V5KTsKLQl0cmFjZV9kcnZfdXBkYXRlX3RraXBfa2V5KGxvY2FsLCBzZGF0YSwgY29uZiwgaXN0YSwgaXYzMik7CisJdHJhY2VfZHJ2X3JldHVybl92b2lkKGxvY2FsKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZHJ2X2h3X3NjYW4oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCkBAIC0xNTksOCArMTcxLDkgQEAKIAogCW1pZ2h0X3NsZWVwKCk7CiAKKwl0cmFjZV9kcnZfaHdfc2Nhbihsb2NhbCwgc2RhdGEsIHJlcSk7CiAJcmV0ID0gbG9jYWwtPm9wcy0+aHdfc2NhbigmbG9jYWwtPmh3LCAmc2RhdGEtPnZpZiwgcmVxKTsKLQl0cmFjZV9kcnZfaHdfc2Nhbihsb2NhbCwgc2RhdGEsIHJlcSwgcmV0KTsKKwl0cmFjZV9kcnZfcmV0dXJuX2ludChsb2NhbCwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNjgsMTggKzE4MSwyMCBAQAogewogCW1pZ2h0X3NsZWVwKCk7CiAKKwl0cmFjZV9kcnZfc3dfc2Nhbl9zdGFydChsb2NhbCk7CiAJaWYgKGxvY2FsLT5vcHMtPnN3X3NjYW5fc3RhcnQpCiAJCWxvY2FsLT5vcHMtPnN3X3NjYW5fc3RhcnQoJmxvY2FsLT5odyk7Ci0JdHJhY2VfZHJ2X3N3X3NjYW5fc3RhcnQobG9jYWwpOworCXRyYWNlX2Rydl9yZXR1cm5fdm9pZChsb2NhbCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkcnZfc3dfc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKIAltaWdodF9zbGVlcCgpOwogCisJdHJhY2VfZHJ2X3N3X3NjYW5fY29tcGxldGUobG9jYWwpOwogCWlmIChsb2NhbC0+b3BzLT5zd19zY2FuX2NvbXBsZXRlKQogCQlsb2NhbC0+b3BzLT5zd19zY2FuX2NvbXBsZXRlKCZsb2NhbC0+aHcpOwotCXRyYWNlX2Rydl9zd19zY2FuX2NvbXBsZXRlKGxvY2FsKTsKKwl0cmFjZV9kcnZfcmV0dXJuX3ZvaWQobG9jYWwpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBkcnZfZ2V0X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLApAQCAtMjExLDkgKzIyNiwxMCBAQAogCiAJbWlnaHRfc2xlZXAoKTsKIAorCXRyYWNlX2Rydl9zZXRfcnRzX3RocmVzaG9sZChsb2NhbCwgdmFsdWUpOwogCWlmIChsb2NhbC0+b3BzLT5zZXRfcnRzX3RocmVzaG9sZCkKIAkJcmV0ID0gbG9jYWwtPm9wcy0+c2V0X3J0c190aHJlc2hvbGQoJmxvY2FsLT5odywgdmFsdWUpOwotCXRyYWNlX2Rydl9zZXRfcnRzX3RocmVzaG9sZChsb2NhbCwgdmFsdWUsIHJldCk7CisJdHJhY2VfZHJ2X3JldHVybl9pbnQobG9jYWwsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjIzLDEyICsyMzksMTMgQEAKIAlpbnQgcmV0ID0gMDsKIAltaWdodF9zbGVlcCgpOwogCisJdHJhY2VfZHJ2X3NldF9jb3ZlcmFnZV9jbGFzcyhsb2NhbCwgdmFsdWUpOwogCWlmIChsb2NhbC0+b3BzLT5zZXRfY292ZXJhZ2VfY2xhc3MpCiAJCWxvY2FsLT5vcHMtPnNldF9jb3ZlcmFnZV9jbGFzcygmbG9jYWwtPmh3LCB2YWx1ZSk7CiAJZWxzZQogCQlyZXQgPSAtRU9QTk9UU1VQUDsKIAotCXRyYWNlX2Rydl9zZXRfY292ZXJhZ2VfY2xhc3MobG9jYWwsIHZhbHVlLCByZXQpOworCXRyYWNlX2Rydl9yZXR1cm5faW50KGxvY2FsLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIzNyw5ICsyNTQsMTAgQEAKIAkJCQkgIGVudW0gc3RhX25vdGlmeV9jbWQgY21kLAogCQkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKKwl0cmFjZV9kcnZfc3RhX25vdGlmeShsb2NhbCwgc2RhdGEsIGNtZCwgc3RhKTsKIAlpZiAobG9jYWwtPm9wcy0+c3RhX25vdGlmeSkKIAkJbG9jYWwtPm9wcy0+c3RhX25vdGlmeSgmbG9jYWwtPmh3LCAmc2RhdGEtPnZpZiwgY21kLCBzdGEpOwotCXRyYWNlX2Rydl9zdGFfbm90aWZ5KGxvY2FsLCBzZGF0YSwgY21kLCBzdGEpOworCXRyYWNlX2Rydl9yZXR1cm5fdm9pZChsb2NhbCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRydl9zdGFfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLApAQCAtMjUwLDEzICsyNjgsMTEgQEAKIAogCW1pZ2h0X3NsZWVwKCk7CiAKKwl0cmFjZV9kcnZfc3RhX2FkZChsb2NhbCwgc2RhdGEsIHN0YSk7CiAJaWYgKGxvY2FsLT5vcHMtPnN0YV9hZGQpCiAJCXJldCA9IGxvY2FsLT5vcHMtPnN0YV9hZGQoJmxvY2FsLT5odywgJnNkYXRhLT52aWYsIHN0YSk7Ci0JZWxzZSBpZiAobG9jYWwtPm9wcy0+c3RhX25vdGlmeSkKLQkJbG9jYWwtPm9wcy0+c3RhX25vdGlmeSgmbG9jYWwtPmh3LCAmc2RhdGEtPnZpZiwKLQkJCQkJU1RBX05PVElGWV9BREQsIHN0YSk7CiAKLQl0cmFjZV9kcnZfc3RhX2FkZChsb2NhbCwgc2RhdGEsIHN0YSwgcmV0KTsKKwl0cmFjZV9kcnZfcmV0dXJuX2ludChsb2NhbCwgcmV0KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yNjcsMTMgKzI4MywxMSBAQAogewogCW1pZ2h0X3NsZWVwKCk7CiAKKwl0cmFjZV9kcnZfc3RhX3JlbW92ZShsb2NhbCwgc2RhdGEsIHN0YSk7CiAJaWYgKGxvY2FsLT5vcHMtPnN0YV9yZW1vdmUpCiAJCWxvY2FsLT5vcHMtPnN0YV9yZW1vdmUoJmxvY2FsLT5odywgJnNkYXRhLT52aWYsIHN0YSk7Ci0JZWxzZSBpZiAobG9jYWwtPm9wcy0+c3RhX25vdGlmeSkKLQkJbG9jYWwtPm9wcy0+c3RhX25vdGlmeSgmbG9jYWwtPmh3LCAmc2RhdGEtPnZpZiwKLQkJCQkJU1RBX05PVElGWV9SRU1PVkUsIHN0YSk7CiAKLQl0cmFjZV9kcnZfc3RhX3JlbW92ZShsb2NhbCwgc2RhdGEsIHN0YSk7CisJdHJhY2VfZHJ2X3JldHVybl92b2lkKGxvY2FsKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZHJ2X2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHUxNiBxdWV1ZSwKQEAgLTI4Myw5ICsyOTcsMTAgQEAKIAogCW1pZ2h0X3NsZWVwKCk7CiAKKwl0cmFjZV9kcnZfY29uZl90eChsb2NhbCwgcXVldWUsIHBhcmFtcyk7CiAJaWYgKGxvY2FsLT5vcHMtPmNvbmZfdHgpCiAJCXJldCA9IGxvY2FsLT5vcHMtPmNvbmZfdHgoJmxvY2FsLT5odywgcXVldWUsIHBhcmFtcyk7Ci0JdHJhY2VfZHJ2X2NvbmZfdHgobG9jYWwsIHF1ZXVlLCBwYXJhbXMsIHJldCk7CisJdHJhY2VfZHJ2X3JldHVybl9pbnQobG9jYWwsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjk1LDkgKzMxMCwxMCBAQAogCiAJbWlnaHRfc2xlZXAoKTsKIAorCXRyYWNlX2Rydl9nZXRfdHNmKGxvY2FsKTsKIAlpZiAobG9jYWwtPm9wcy0+Z2V0X3RzZikKIAkJcmV0ID0gbG9jYWwtPm9wcy0+Z2V0X3RzZigmbG9jYWwtPmh3KTsKLQl0cmFjZV9kcnZfZ2V0X3RzZihsb2NhbCwgcmV0KTsKKwl0cmFjZV9kcnZfcmV0dXJuX3U2NChsb2NhbCwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMDUsMTggKzMyMSwyMCBAQAogewogCW1pZ2h0X3NsZWVwKCk7CiAKKwl0cmFjZV9kcnZfc2V0X3RzZihsb2NhbCwgdHNmKTsKIAlpZiAobG9jYWwtPm9wcy0+c2V0X3RzZikKIAkJbG9jYWwtPm9wcy0+c2V0X3RzZigmbG9jYWwtPmh3LCB0c2YpOwotCXRyYWNlX2Rydl9zZXRfdHNmKGxvY2FsLCB0c2YpOworCXRyYWNlX2Rydl9yZXR1cm5fdm9pZChsb2NhbCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkcnZfcmVzZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewogCW1pZ2h0X3NsZWVwKCk7CiAKKwl0cmFjZV9kcnZfcmVzZXRfdHNmKGxvY2FsKTsKIAlpZiAobG9jYWwtPm9wcy0+cmVzZXRfdHNmKQogCQlsb2NhbC0+b3BzLT5yZXNldF90c2YoJmxvY2FsLT5odyk7Ci0JdHJhY2VfZHJ2X3Jlc2V0X3RzZihsb2NhbCk7CisJdHJhY2VfZHJ2X3JldHVybl92b2lkKGxvY2FsKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZHJ2X3R4X2xhc3RfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQpAQCAtMzI1LDkgKzM0MywxMCBAQAogCiAJbWlnaHRfc2xlZXAoKTsKIAorCXRyYWNlX2Rydl90eF9sYXN0X2JlYWNvbihsb2NhbCk7CiAJaWYgKGxvY2FsLT5vcHMtPnR4X2xhc3RfYmVhY29uKQogCQlyZXQgPSBsb2NhbC0+b3BzLT50eF9sYXN0X2JlYWNvbigmbG9jYWwtPmh3KTsKLQl0cmFjZV9kcnZfdHhfbGFzdF9iZWFjb24obG9jYWwsIHJldCk7CisJdHJhY2VfZHJ2X3JldHVybl9pbnQobG9jYWwsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzM4LDEwICszNTcsMTcgQEAKIAkJCQkgICB1MTYgKnNzbikKIHsKIAlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7CisKKwltaWdodF9zbGVlcCgpOworCisJdHJhY2VfZHJ2X2FtcGR1X2FjdGlvbihsb2NhbCwgc2RhdGEsIGFjdGlvbiwgc3RhLCB0aWQsIHNzbik7CisKIAlpZiAobG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKQogCQlyZXQgPSBsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oJmxvY2FsLT5odywgJnNkYXRhLT52aWYsIGFjdGlvbiwKIAkJCQkJICAgICAgIHN0YSwgdGlkLCBzc24pOwotCXRyYWNlX2Rydl9hbXBkdV9hY3Rpb24obG9jYWwsIHNkYXRhLCBhY3Rpb24sIHN0YSwgdGlkLCBzc24sIHJldCk7CisKKwl0cmFjZV9kcnZfcmV0dXJuX2ludChsb2NhbCwgcmV0KTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM0OSw5ICszNzUsMTQgQEAKIAkJCQlzdHJ1Y3Qgc3VydmV5X2luZm8gKnN1cnZleSkKIHsKIAlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7CisKKwl0cmFjZV9kcnZfZ2V0X3N1cnZleShsb2NhbCwgaWR4LCBzdXJ2ZXkpOworCiAJaWYgKGxvY2FsLT5vcHMtPmdldF9zdXJ2ZXkpCiAJCXJldCA9IGxvY2FsLT5vcHMtPmdldF9zdXJ2ZXkoJmxvY2FsLT5odywgaWR4LCBzdXJ2ZXkpOwotCS8qIHRyYWNlX2Rydl9nZXRfc3VydmV5KGxvY2FsLCBpZHgsIHN1cnZleSwgcmV0KTsgKi8KKworCXRyYWNlX2Rydl9yZXR1cm5faW50KGxvY2FsLCByZXQpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzcwLDYgKzQwMSw3IEBACiAJdHJhY2VfZHJ2X2ZsdXNoKGxvY2FsLCBkcm9wKTsKIAlpZiAobG9jYWwtPm9wcy0+Zmx1c2gpCiAJCWxvY2FsLT5vcHMtPmZsdXNoKCZsb2NhbC0+aHcsIGRyb3ApOworCXRyYWNlX2Rydl9yZXR1cm5fdm9pZChsb2NhbCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkcnZfY2hhbm5lbF9zd2l0Y2goc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCkBAIC0zNzcsOSArNDA5LDkgQEAKIHsKIAltaWdodF9zbGVlcCgpOwogCi0JbG9jYWwtPm9wcy0+Y2hhbm5lbF9zd2l0Y2goJmxvY2FsLT5odywgY2hfc3dpdGNoKTsKLQogCXRyYWNlX2Rydl9jaGFubmVsX3N3aXRjaChsb2NhbCwgY2hfc3dpdGNoKTsKKwlsb2NhbC0+b3BzLT5jaGFubmVsX3N3aXRjaCgmbG9jYWwtPmh3LCBjaF9zd2l0Y2gpOworCXRyYWNlX2Rydl9yZXR1cm5fdm9pZChsb2NhbCk7CiB9CiAKICNlbmRpZiAvKiBfX01BQzgwMjExX0RSSVZFUl9PUFMgKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kcml2ZXItdHJhY2UuaCBiL25ldC9tYWM4MDIxMS9kcml2ZXItdHJhY2UuaAppbmRleCA2YTliMjM0Li41ZDVkMmE5IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZHJpdmVyLXRyYWNlLmgKKysrIGIvbmV0L21hYzgwMjExL2RyaXZlci10cmFjZS5oCkBAIC0zNiwyMCArMzYsNTggQEAKICAqIFRyYWNpbmcgZm9yIGRyaXZlciBjYWxsYmFja3MuCiAgKi8KIAotVFJBQ0VfRVZFTlQoZHJ2X3N0YXJ0LAorVFJBQ0VfRVZFTlQoZHJ2X3JldHVybl92b2lkLAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKSwKKwlUUF9BUkdTKGxvY2FsKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCUxPQ0FMX0FTU0lHTjsKKwkpLAorCVRQX3ByaW50ayhMT0NBTF9QUl9GTVQsIExPQ0FMX1BSX0FSRykKKyk7CisKK1RSQUNFX0VWRU5UKGRydl9yZXR1cm5faW50LAogCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgcmV0KSwKLQogCVRQX0FSR1MobG9jYWwsIHJldCksCi0KIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlMT0NBTF9FTlRSWQogCQlfX2ZpZWxkKGludCwgcmV0KQogCSksCi0KIAlUUF9mYXN0X2Fzc2lnbigKIAkJTE9DQUxfQVNTSUdOOwogCQlfX2VudHJ5LT5yZXQgPSByZXQ7CiAJKSwKKwlUUF9wcmludGsoTE9DQUxfUFJfRk1UICIgLSAlZCIsIExPQ0FMX1BSX0FSRywgX19lbnRyeS0+cmV0KQorKTsKKworVFJBQ0VfRVZFTlQoZHJ2X3JldHVybl91NjQsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHU2NCByZXQpLAorCVRQX0FSR1MobG9jYWwsIHJldCksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJTE9DQUxfRU5UUlkKKwkJX19maWVsZCh1NjQsIHJldCkKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJCV9fZW50cnktPnJldCA9IHJldDsKKwkpLAorCVRQX3ByaW50ayhMT0NBTF9QUl9GTVQgIiAtICVsbHUiLCBMT0NBTF9QUl9BUkcsIF9fZW50cnktPnJldCkKKyk7CisKK1RSQUNFX0VWRU5UKGRydl9zdGFydCwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCksCisKKwlUUF9BUkdTKGxvY2FsKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJKSwKIAogCVRQX3ByaW50aygKIAkJTE9DQUxfUFJfRk1ULCBMT0NBTF9QUl9BUkcKQEAgLTc2LDI4ICsxMTQsMjUgQEAKIAogVFJBQ0VfRVZFTlQoZHJ2X2FkZF9pbnRlcmZhY2UsCiAJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCSBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJIGludCByZXQpLAorCQkgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpLAogCi0JVFBfQVJHUyhsb2NhbCwgc2RhdGEsIHJldCksCisJVFBfQVJHUyhsb2NhbCwgc2RhdGEpLAogCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJTE9DQUxfRU5UUlkKIAkJVklGX0VOVFJZCiAJCV9fYXJyYXkoY2hhciwgYWRkciwgNikKLQkJX19maWVsZChpbnQsIHJldCkKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCiAJCUxPQ0FMX0FTU0lHTjsKIAkJVklGX0FTU0lHTjsKIAkJbWVtY3B5KF9fZW50cnktPmFkZHIsIHNkYXRhLT52aWYuYWRkciwgNik7Ci0JCV9fZW50cnktPnJldCA9IHJldDsKIAkpLAogCiAJVFBfcHJpbnRrKAotCQlMT0NBTF9QUl9GTVQgIFZJRl9QUl9GTVQgIiBhZGRyOiVwTSByZXQ6JWQiLAotCQlMT0NBTF9QUl9BUkcsIFZJRl9QUl9BUkcsIF9fZW50cnktPmFkZHIsIF9fZW50cnktPnJldAorCQlMT0NBTF9QUl9GTVQgIFZJRl9QUl9GTVQgIiBhZGRyOiVwTSIsCisJCUxPQ0FMX1BSX0FSRywgVklGX1BSX0FSRywgX19lbnRyeS0+YWRkcgogCSkKICk7CiAKQEAgLTEyNiwxNSArMTYxLDEzIEBACiAKIFRSQUNFX0VWRU5UKGRydl9jb25maWcsCiAJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCSB1MzIgY2hhbmdlZCwKLQkJIGludCByZXQpLAorCQkgdTMyIGNoYW5nZWQpLAogCi0JVFBfQVJHUyhsb2NhbCwgY2hhbmdlZCwgcmV0KSwKKwlUUF9BUkdTKGxvY2FsLCBjaGFuZ2VkKSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCUxPQ0FMX0VOVFJZCiAJCV9fZmllbGQodTMyLCBjaGFuZ2VkKQotCQlfX2ZpZWxkKGludCwgcmV0KQogCQlfX2ZpZWxkKHUzMiwgZmxhZ3MpCiAJCV9fZmllbGQoaW50LCBwb3dlcl9sZXZlbCkKIAkJX19maWVsZChpbnQsIGR5bmFtaWNfcHNfdGltZW91dCkKQEAgLTE1MCw3ICsxODMsNiBAQAogCVRQX2Zhc3RfYXNzaWduKAogCQlMT0NBTF9BU1NJR047CiAJCV9fZW50cnktPmNoYW5nZWQgPSBjaGFuZ2VkOwotCQlfX2VudHJ5LT5yZXQgPSByZXQ7CiAJCV9fZW50cnktPmZsYWdzID0gbG9jYWwtPmh3LmNvbmYuZmxhZ3M7CiAJCV9fZW50cnktPnBvd2VyX2xldmVsID0gbG9jYWwtPmh3LmNvbmYucG93ZXJfbGV2ZWw7CiAJCV9fZW50cnktPmR5bmFtaWNfcHNfdGltZW91dCA9IGxvY2FsLT5ody5jb25mLmR5bmFtaWNfcHNfdGltZW91dDsKQEAgLTE2NCw4ICsxOTYsOCBAQAogCSksCiAKIAlUUF9wcmludGsoCi0JCUxPQ0FMX1BSX0ZNVCAiIGNoOiUjeCBmcmVxOiVkIHJldDolZCIsCi0JCUxPQ0FMX1BSX0FSRywgX19lbnRyeS0+Y2hhbmdlZCwgX19lbnRyeS0+Y2VudGVyX2ZyZXEsIF9fZW50cnktPnJldAorCQlMT0NBTF9QUl9GTVQgIiBjaDolI3ggZnJlcTolZCIsCisJCUxPQ0FMX1BSX0FSRywgX19lbnRyeS0+Y2hhbmdlZCwgX19lbnRyeS0+Y2VudGVyX2ZyZXEKIAkpCiApOwogCkBAIC0yMjAsMjYgKzI1MiwyMyBAQAogKTsKIAogVFJBQ0VfRVZFTlQoZHJ2X3ByZXBhcmVfbXVsdGljYXN0LAotCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgbWNfY291bnQsIHU2NCByZXQpLAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgbWNfY291bnQpLAogCi0JVFBfQVJHUyhsb2NhbCwgbWNfY291bnQsIHJldCksCisJVFBfQVJHUyhsb2NhbCwgbWNfY291bnQpLAogCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJTE9DQUxfRU5UUlkKIAkJX19maWVsZChpbnQsIG1jX2NvdW50KQotCQlfX2ZpZWxkKHU2NCwgcmV0KQogCSksCiAKIAlUUF9mYXN0X2Fzc2lnbigKIAkJTE9DQUxfQVNTSUdOOwogCQlfX2VudHJ5LT5tY19jb3VudCA9IG1jX2NvdW50OwotCQlfX2VudHJ5LT5yZXQgPSByZXQ7CiAJKSwKIAogCVRQX3ByaW50aygKLQkJTE9DQUxfUFJfRk1UICIgcHJlcGFyZSBtYyAoJWQpOiAlbGx4IiwKLQkJTE9DQUxfUFJfQVJHLCBfX2VudHJ5LT5tY19jb3VudCwKLQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgX19lbnRyeS0+cmV0CisJCUxPQ0FMX1BSX0ZNVCAiIHByZXBhcmUgbWMgKCVkKSIsCisJCUxPQ0FMX1BSX0FSRywgX19lbnRyeS0+bWNfY291bnQKIAkpCiApOwogCkBAIC0yNzMsMjcgKzMwMiwyNSBAQAogCiBUUkFDRV9FVkVOVChkcnZfc2V0X3RpbSwKIAlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIGJvb2wgc2V0LCBpbnQgcmV0KSwKKwkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIGJvb2wgc2V0KSwKIAotCVRQX0FSR1MobG9jYWwsIHN0YSwgc2V0LCByZXQpLAorCVRQX0FSR1MobG9jYWwsIHN0YSwgc2V0KSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCUxPQ0FMX0VOVFJZCiAJCVNUQV9FTlRSWQogCQlfX2ZpZWxkKGJvb2wsIHNldCkKLQkJX19maWVsZChpbnQsIHJldCkKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCiAJCUxPQ0FMX0FTU0lHTjsKIAkJU1RBX0FTU0lHTjsKIAkJX19lbnRyeS0+c2V0ID0gc2V0OwotCQlfX2VudHJ5LT5yZXQgPSByZXQ7CiAJKSwKIAogCVRQX3ByaW50aygKLQkJTE9DQUxfUFJfRk1UIFNUQV9QUl9GTVQgIiBzZXQ6JWQgcmV0OiVkIiwKLQkJTE9DQUxfUFJfQVJHLCBTVEFfUFJfRk1ULCBfX2VudHJ5LT5zZXQsIF9fZW50cnktPnJldAorCQlMT0NBTF9QUl9GTVQgU1RBX1BSX0ZNVCAiIHNldDolZCIsCisJCUxPQ0FMX1BSX0FSRywgU1RBX1BSX0ZNVCwgX19lbnRyeS0+c2V0CiAJKQogKTsKIApAQCAtMzAxLDkgKzMyOCw5IEBACiAJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCSBlbnVtIHNldF9rZXlfY21kIGNtZCwgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAotCQkgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5LCBpbnQgcmV0KSwKKwkJIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSksCiAKLQlUUF9BUkdTKGxvY2FsLCBjbWQsIHNkYXRhLCBzdGEsIGtleSwgcmV0KSwKKwlUUF9BUkdTKGxvY2FsLCBjbWQsIHNkYXRhLCBzdGEsIGtleSksCiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlMT0NBTF9FTlRSWQpAQCAtMzEzLDcgKzM0MCw2IEBACiAJCV9fZmllbGQodTgsIGh3X2tleV9pZHgpCiAJCV9fZmllbGQodTgsIGZsYWdzKQogCQlfX2ZpZWxkKHM4LCBrZXlpZHgpCi0JCV9fZmllbGQoaW50LCByZXQpCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKApAQCAtMzI0LDEyICszNTAsMTEgQEAKIAkJX19lbnRyeS0+ZmxhZ3MgPSBrZXktPmZsYWdzOwogCQlfX2VudHJ5LT5rZXlpZHggPSBrZXktPmtleWlkeDsKIAkJX19lbnRyeS0+aHdfa2V5X2lkeCA9IGtleS0+aHdfa2V5X2lkeDsKLQkJX19lbnRyeS0+cmV0ID0gcmV0OwogCSksCiAKIAlUUF9wcmludGsoCi0JCUxPQ0FMX1BSX0ZNVCAgVklGX1BSX0ZNVCAgU1RBX1BSX0ZNVCAiIHJldDolZCIsCi0JCUxPQ0FMX1BSX0FSRywgVklGX1BSX0FSRywgU1RBX1BSX0FSRywgX19lbnRyeS0+cmV0CisJCUxPQ0FMX1BSX0ZNVCAgVklGX1BSX0ZNVCAgU1RBX1BSX0ZNVCwKKwkJTE9DQUxfUFJfQVJHLCBWSUZfUFJfQVJHLCBTVEFfUFJfQVJHCiAJKQogKTsKIApAQCAtMzY0LDI1ICszODksMjMgQEAKIFRSQUNFX0VWRU5UKGRydl9od19zY2FuLAogCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCSBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEsIGludCByZXQpLAorCQkgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKSwKIAotCVRQX0FSR1MobG9jYWwsIHNkYXRhLCByZXEsIHJldCksCisJVFBfQVJHUyhsb2NhbCwgc2RhdGEsIHJlcSksCiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlMT0NBTF9FTlRSWQogCQlWSUZfRU5UUlkKLQkJX19maWVsZChpbnQsIHJldCkKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCiAJCUxPQ0FMX0FTU0lHTjsKIAkJVklGX0FTU0lHTjsKLQkJX19lbnRyeS0+cmV0ID0gcmV0OwogCSksCiAKIAlUUF9wcmludGsoCi0JCUxPQ0FMX1BSX0ZNVCBWSUZfUFJfRk1UICIgcmV0OiVkIiwKLQkJTE9DQUxfUFJfQVJHLFZJRl9QUl9BUkcsIF9fZW50cnktPnJldAorCQlMT0NBTF9QUl9GTVQgVklGX1BSX0ZNVCwKKwkJTE9DQUxfUFJfQVJHLFZJRl9QUl9BUkcKIAkpCiApOwogCkBAIC00NzksNDggKzUwMiw0NCBAQAogKTsKIAogVFJBQ0VfRVZFTlQoZHJ2X3NldF9ydHNfdGhyZXNob2xkLAotCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1MzIgdmFsdWUsIGludCByZXQpLAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1MzIgdmFsdWUpLAogCi0JVFBfQVJHUyhsb2NhbCwgdmFsdWUsIHJldCksCisJVFBfQVJHUyhsb2NhbCwgdmFsdWUpLAogCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJTE9DQUxfRU5UUlkKIAkJX19maWVsZCh1MzIsIHZhbHVlKQotCQlfX2ZpZWxkKGludCwgcmV0KQogCSksCiAKIAlUUF9mYXN0X2Fzc2lnbigKIAkJTE9DQUxfQVNTSUdOOwotCQlfX2VudHJ5LT5yZXQgPSByZXQ7CiAJCV9fZW50cnktPnZhbHVlID0gdmFsdWU7CiAJKSwKIAogCVRQX3ByaW50aygKLQkJTE9DQUxfUFJfRk1UICIgdmFsdWU6JWQgcmV0OiVkIiwKLQkJTE9DQUxfUFJfQVJHLCBfX2VudHJ5LT52YWx1ZSwgX19lbnRyeS0+cmV0CisJCUxPQ0FMX1BSX0ZNVCAiIHZhbHVlOiVkIiwKKwkJTE9DQUxfUFJfQVJHLCBfX2VudHJ5LT52YWx1ZQogCSkKICk7CiAKIFRSQUNFX0VWRU5UKGRydl9zZXRfY292ZXJhZ2VfY2xhc3MsCi0JVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHU4IHZhbHVlLCBpbnQgcmV0KSwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTggdmFsdWUpLAogCi0JVFBfQVJHUyhsb2NhbCwgdmFsdWUsIHJldCksCisJVFBfQVJHUyhsb2NhbCwgdmFsdWUpLAogCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJTE9DQUxfRU5UUlkKIAkJX19maWVsZCh1OCwgdmFsdWUpCi0JCV9fZmllbGQoaW50LCByZXQpCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKAogCQlMT0NBTF9BU1NJR047Ci0JCV9fZW50cnktPnJldCA9IHJldDsKIAkJX19lbnRyeS0+dmFsdWUgPSB2YWx1ZTsKIAkpLAogCiAJVFBfcHJpbnRrKAotCQlMT0NBTF9QUl9GTVQgIiB2YWx1ZTolZCByZXQ6JWQiLAotCQlMT0NBTF9QUl9BUkcsIF9fZW50cnktPnZhbHVlLCBfX2VudHJ5LT5yZXQKKwkJTE9DQUxfUFJfRk1UICIgdmFsdWU6JWQiLAorCQlMT0NBTF9QUl9BUkcsIF9fZW50cnktPnZhbHVlCiAJKQogKTsKIApAQCAtNTU1LDI3ICs1NzQsMjUgQEAKIFRSQUNFX0VWRU5UKGRydl9zdGFfYWRkLAogCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCBpbnQgcmV0KSwKKwkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpLAogCi0JVFBfQVJHUyhsb2NhbCwgc2RhdGEsIHN0YSwgcmV0KSwKKwlUUF9BUkdTKGxvY2FsLCBzZGF0YSwgc3RhKSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCUxPQ0FMX0VOVFJZCiAJCVZJRl9FTlRSWQogCQlTVEFfRU5UUlkKLQkJX19maWVsZChpbnQsIHJldCkKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCiAJCUxPQ0FMX0FTU0lHTjsKIAkJVklGX0FTU0lHTjsKIAkJU1RBX0FTU0lHTjsKLQkJX19lbnRyeS0+cmV0ID0gcmV0OwogCSksCiAKIAlUUF9wcmludGsoCi0JCUxPQ0FMX1BSX0ZNVCAgVklGX1BSX0ZNVCAgU1RBX1BSX0ZNVCAiIHJldDolZCIsCi0JCUxPQ0FMX1BSX0FSRywgVklGX1BSX0FSRywgU1RBX1BSX0FSRywgX19lbnRyeS0+cmV0CisJCUxPQ0FMX1BSX0ZNVCAgVklGX1BSX0ZNVCAgU1RBX1BSX0ZNVCwKKwkJTE9DQUxfUFJfQVJHLCBWSUZfUFJfQVJHLCBTVEFfUFJfQVJHCiAJKQogKTsKIApAQCAtNjA2LDEwICs2MjMsOSBAQAogCiBUUkFDRV9FVkVOVChkcnZfY29uZl90eCwKIAlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTE2IHF1ZXVlLAotCQkgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcywKLQkJIGludCByZXQpLAorCQkgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcyksCiAKLQlUUF9BUkdTKGxvY2FsLCBxdWV1ZSwgcGFyYW1zLCByZXQpLAorCVRQX0FSR1MobG9jYWwsIHF1ZXVlLCBwYXJhbXMpLAogCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJTE9DQUxfRU5UUlkKQEAgLTYxOCwxMyArNjM0LDExIEBACiAJCV9fZmllbGQodTE2LCBjd19taW4pCiAJCV9fZmllbGQodTE2LCBjd19tYXgpCiAJCV9fZmllbGQodTgsIGFpZnMpCi0JCV9fZmllbGQoaW50LCByZXQpCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKAogCQlMT0NBTF9BU1NJR047CiAJCV9fZW50cnktPnF1ZXVlID0gcXVldWU7Ci0JCV9fZW50cnktPnJldCA9IHJldDsKIAkJX19lbnRyeS0+dHhvcCA9IHBhcmFtcy0+dHhvcDsKIAkJX19lbnRyeS0+Y3dfbWF4ID0gcGFyYW1zLT5jd19tYXg7CiAJCV9fZW50cnktPmN3X21pbiA9IHBhcmFtcy0+Y3dfbWluOwpAQCAtNjMyLDI5ICs2NDYsMjcgQEAKIAkpLAogCiAJVFBfcHJpbnRrKAotCQlMT0NBTF9QUl9GTVQgIiBxdWV1ZTolZCByZXQ6JWQiLAotCQlMT0NBTF9QUl9BUkcsIF9fZW50cnktPnF1ZXVlLCBfX2VudHJ5LT5yZXQKKwkJTE9DQUxfUFJfRk1UICIgcXVldWU6JWQiLAorCQlMT0NBTF9QUl9BUkcsIF9fZW50cnktPnF1ZXVlCiAJKQogKTsKIAogVFJBQ0VfRVZFTlQoZHJ2X2dldF90c2YsCi0JVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHU2NCByZXQpLAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKSwKIAotCVRQX0FSR1MobG9jYWwsIHJldCksCisJVFBfQVJHUyhsb2NhbCksCiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlMT0NBTF9FTlRSWQotCQlfX2ZpZWxkKHU2NCwgcmV0KQogCSksCiAKIAlUUF9mYXN0X2Fzc2lnbigKIAkJTE9DQUxfQVNTSUdOOwotCQlfX2VudHJ5LT5yZXQgPSByZXQ7CiAJKSwKIAogCVRQX3ByaW50aygKLQkJTE9DQUxfUFJfRk1UICIgcmV0OiVsbHUiLAotCQlMT0NBTF9QUl9BUkcsICh1bnNpZ25lZCBsb25nIGxvbmcpX19lbnRyeS0+cmV0CisJCUxPQ0FMX1BSX0ZNVCwKKwkJTE9DQUxfUFJfQVJHCiAJKQogKTsKIApAQCAtNjk4LDIzICs3MTAsMjEgQEAKICk7CiAKIFRSQUNFX0VWRU5UKGRydl90eF9sYXN0X2JlYWNvbiwKLQlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgaW50IHJldCksCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpLAogCi0JVFBfQVJHUyhsb2NhbCwgcmV0KSwKKwlUUF9BUkdTKGxvY2FsKSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCUxPQ0FMX0VOVFJZCi0JCV9fZmllbGQoaW50LCByZXQpCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKAogCQlMT0NBTF9BU1NJR047Ci0JCV9fZW50cnktPnJldCA9IHJldDsKIAkpLAogCiAJVFBfcHJpbnRrKAotCQlMT0NBTF9QUl9GTVQgIiByZXQ6JWQiLAotCQlMT0NBTF9QUl9BUkcsIF9fZW50cnktPnJldAorCQlMT0NBTF9QUl9GTVQsCisJCUxPQ0FMX1BSX0FSRwogCSkKICk7CiAKQEAgLTcyMyw5ICs3MzMsOSBAQAogCQkgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCSBlbnVtIGllZWU4MDIxMV9hbXBkdV9tbG1lX2FjdGlvbiBhY3Rpb24sCiAJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLAotCQkgdTE2ICpzc24sIGludCByZXQpLAorCQkgdTE2ICpzc24pLAogCi0JVFBfQVJHUyhsb2NhbCwgc2RhdGEsIGFjdGlvbiwgc3RhLCB0aWQsIHNzbiwgcmV0KSwKKwlUUF9BUkdTKGxvY2FsLCBzZGF0YSwgYWN0aW9uLCBzdGEsIHRpZCwgc3NuKSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCUxPQ0FMX0VOVFJZCkBAIC03MzMsNyArNzQzLDYgQEAKIAkJX19maWVsZCh1MzIsIGFjdGlvbikKIAkJX19maWVsZCh1MTYsIHRpZCkKIAkJX19maWVsZCh1MTYsIHNzbikKLQkJX19maWVsZChpbnQsIHJldCkKIAkJVklGX0VOVFJZCiAJKSwKIApAQCAtNzQxLDE1ICs3NTAsMzYgQEAKIAkJTE9DQUxfQVNTSUdOOwogCQlWSUZfQVNTSUdOOwogCQlTVEFfQVNTSUdOOwotCQlfX2VudHJ5LT5yZXQgPSByZXQ7CiAJCV9fZW50cnktPmFjdGlvbiA9IGFjdGlvbjsKIAkJX19lbnRyeS0+dGlkID0gdGlkOwogCQlfX2VudHJ5LT5zc24gPSBzc24gPyAqc3NuIDogMDsKIAkpLAogCiAJVFBfcHJpbnRrKAotCQlMT0NBTF9QUl9GTVQgVklGX1BSX0ZNVCBTVEFfUFJfRk1UICIgYWN0aW9uOiVkIHRpZDolZCByZXQ6JWQiLAotCQlMT0NBTF9QUl9BUkcsIFZJRl9QUl9BUkcsIFNUQV9QUl9BUkcsIF9fZW50cnktPmFjdGlvbiwgX19lbnRyeS0+dGlkLCBfX2VudHJ5LT5yZXQKKwkJTE9DQUxfUFJfRk1UIFZJRl9QUl9GTVQgU1RBX1BSX0ZNVCAiIGFjdGlvbjolZCB0aWQ6JWQiLAorCQlMT0NBTF9QUl9BUkcsIFZJRl9QUl9BUkcsIFNUQV9QUl9BUkcsIF9fZW50cnktPmFjdGlvbiwgX19lbnRyeS0+dGlkCisJKQorKTsKKworVFJBQ0VfRVZFTlQoZHJ2X2dldF9zdXJ2ZXksCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGludCBpZHgsCisJCSBzdHJ1Y3Qgc3VydmV5X2luZm8gKnN1cnZleSksCisKKwlUUF9BUkdTKGxvY2FsLCBpZHgsIHN1cnZleSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCQlfX2ZpZWxkKGludCwgaWR4KQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCQlfX2VudHJ5LT5pZHggPSBpZHg7CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UICIgaWR4OiVkIiwKKwkJTE9DQUxfUFJfQVJHLCBfX2VudHJ5LT5pZHgKIAkpCiApOwogCkBAIC04NTEsMjUgKzg4MSwyMyBAQAogKTsKIAogVFJBQ0VfRVZFTlQoYXBpX3N0b3BfdHhfYmFfc2Vzc2lvbiwKLQlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLCB1MTYgaW5pdGlhdG9yKSwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKSwKIAotCVRQX0FSR1Moc3RhLCB0aWQsIGluaXRpYXRvciksCisJVFBfQVJHUyhzdGEsIHRpZCksCiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlTVEFfRU5UUlkKIAkJX19maWVsZCh1MTYsIHRpZCkKLQkJX19maWVsZCh1MTYsIGluaXRpYXRvcikKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCiAJCVNUQV9BU1NJR047CiAJCV9fZW50cnktPnRpZCA9IHRpZDsKLQkJX19lbnRyeS0+aW5pdGlhdG9yID0gaW5pdGlhdG9yOwogCSksCiAKIAlUUF9wcmludGsoCi0JCVNUQV9QUl9GTVQgIiB0aWQ6JWQgaW5pdGlhdG9yOiVkIiwKLQkJU1RBX1BSX0FSRywgX19lbnRyeS0+dGlkLCBfX2VudHJ5LT5pbml0aWF0b3IKKwkJU1RBX1BSX0ZNVCAiIHRpZDolZCIsCisJCVNUQV9QUl9BUkcsIF9fZW50cnktPnRpZAogCSkKICk7CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9odC5jIGIvbmV0L21hYzgwMjExL2h0LmMKaW5kZXggMmFiMTA2YS4uOWQxMDFmYiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2h0LmMKKysrIGIvbmV0L21hYzgwMjExL2h0LmMKQEAgLTYsNyArNiw3IEBACiAgKiBDb3B5cmlnaHQgMjAwNS0yMDA2LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgogICogQ29weXJpZ2h0IDIwMDYtMjAwNwlKaXJpIEJlbmMgPGpiZW5jQHN1c2UuY3o+CiAgKiBDb3B5cmlnaHQgMjAwNywgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+Ci0gKiBDb3B5cmlnaHQgMjAwNy0yMDA4LCBJbnRlbCBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IDIwMDctMjAxMCwgSW50ZWwgQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTI5LDcgKzI5LDcgQEAKIAogCW1lbXNldChodF9jYXAsIDAsIHNpemVvZigqaHRfY2FwKSk7CiAKLQlpZiAoIWh0X2NhcF9pZSkKKwlpZiAoIWh0X2NhcF9pZSB8fCAhc2JhbmQtPmh0X2NhcC5odF9zdXBwb3J0ZWQpCiAJCXJldHVybjsKIAogCWh0X2NhcC0+aHRfc3VwcG9ydGVkID0gdHJ1ZTsKQEAgLTEwNSw2ICsxMDUsOCBAQAogewogCWludCBpOwogCisJY2FuY2VsX3dvcmtfc3luYygmc3RhLT5hbXBkdV9tbG1lLndvcmspOworCiAJZm9yIChpID0gMDsgaSA8ICBTVEFfVElEX05VTTsgaSsrKSB7CiAJCV9faWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdGEsIGksIFdMQU5fQkFDS19JTklUSUFUT1IpOwogCQlfX2llZWU4MDIxMV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RhLCBpLCBXTEFOX0JBQ0tfUkVDSVBJRU5ULApAQCAtMTEyLDYgKzExNCw0MyBAQAogCX0KIH0KIAordm9pZCBpZWVlODAyMTFfYmFfc2Vzc2lvbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc3RhX2luZm8sIGFtcGR1X21sbWUud29yayk7CisJc3RydWN0IHRpZF9hbXBkdV90eCAqdGlkX3R4OworCWludCB0aWQ7CisKKwkvKgorCSAqIFdoZW4gdGhpcyBmbGFnIGlzIHNldCwgbmV3IHNlc3Npb25zIHNob3VsZCBiZQorCSAqIGJsb2NrZWQsIGFuZCBleGlzdGluZyBzZXNzaW9ucyB3aWxsIGJlIHRvcm4KKwkgKiBkb3duIGJ5IHRoZSBjb2RlIHRoYXQgc2V0IHRoZSBmbGFnLCBzbyB0aGlzCisJICogbmVlZCBub3QgcnVuLgorCSAqLworCWlmICh0ZXN0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX0JMT0NLX0JBKSkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmc3RhLT5hbXBkdV9tbG1lLm10eCk7CisJZm9yICh0aWQgPSAwOyB0aWQgPCBTVEFfVElEX05VTTsgdGlkKyspIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdCh0aWQsIHN0YS0+YW1wZHVfbWxtZS50aWRfcnhfdGltZXJfZXhwaXJlZCkpCisJCQlfX19pZWVlODAyMTFfc3RvcF9yeF9iYV9zZXNzaW9uKAorCQkJCXN0YSwgdGlkLCBXTEFOX0JBQ0tfUkVDSVBJRU5ULAorCQkJCVdMQU5fUkVBU09OX1FTVEFfVElNRU9VVCk7CisKKwkJdGlkX3R4ID0gc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdOworCQlpZiAoIXRpZF90eCkKKwkJCWNvbnRpbnVlOworCisJCWlmICh0ZXN0X2JpdChIVF9BR0dfU1RBVEVfV0FOVF9TVEFSVCwgJnRpZF90eC0+c3RhdGUpKQorCQkJaWVlZTgwMjExX3R4X2JhX3Nlc3Npb25faGFuZGxlX3N0YXJ0KHN0YSwgdGlkKTsKKwkJZWxzZSBpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhUX0FHR19TVEFURV9XQU5UX1NUT1AsCisJCQkJCSAgICAmdGlkX3R4LT5zdGF0ZSkpCisJCQlfX19pZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0YSwgdGlkLAorCQkJCQkJCVdMQU5fQkFDS19JTklUSUFUT1IpOworCX0KKwltdXRleF91bmxvY2soJnN0YS0+YW1wZHVfbWxtZS5tdHgpOworfQorCiB2b2lkIGllZWU4MDIxMV9zZW5kX2RlbGJhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJICBjb25zdCB1OCAqZGEsIHUxNiB0aWQsCiAJCQkgIHUxNiBpbml0aWF0b3IsIHUxNiByZWFzb25fY29kZSkKQEAgLTE3NiwxMyArMjE1LDggQEAKIAogCWlmIChpbml0aWF0b3IgPT0gV0xBTl9CQUNLX0lOSVRJQVRPUikKIAkJX19pZWVlODAyMTFfc3RvcF9yeF9iYV9zZXNzaW9uKHN0YSwgdGlkLCBXTEFOX0JBQ0tfSU5JVElBVE9SLCAwKTsKLQllbHNlIHsgLyogV0xBTl9CQUNLX1JFQ0lQSUVOVCAqLwotCQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0JCWlmIChzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF0gJiBIVF9BRERCQV9SRVFVRVNURURfTVNLKQotCQkJX19faWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdGEsIHRpZCwKLQkJCQkJCQlXTEFOX0JBQ0tfUkVDSVBJRU5UKTsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0JfQorCWVsc2UKKwkJX19pZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0YSwgdGlkLCBXTEFOX0JBQ0tfUkVDSVBJRU5UKTsKIH0KIAogaW50IGllZWU4MDIxMV9zZW5kX3NtcHNfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lic3MuYyBiL25ldC9tYWM4MDIxMS9pYnNzLmMKaW5kZXggYjJjYzFmZC4uYzY5MTc4MCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2lic3MuYworKysgYi9uZXQvbWFjODAyMTEvaWJzcy5jCkBAIC00Myw2ICs0Myw4IEBACiB7CiAJdTE2IGF1dGhfYWxnLCBhdXRoX3RyYW5zYWN0aW9uLCBzdGF0dXNfY29kZTsKIAorCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnNkYXRhLT51Lmlic3MubXR4KTsKKwogCWlmIChsZW4gPCAyNCArIDYpCiAJCXJldHVybjsKIApAQCAtNzgsNiArODAsOCBAQAogCXUzMiBic3NfY2hhbmdlOwogCXU4IHN1cHBfcmF0ZXNbSUVFRTgwMjExX01BWF9TVVBQX1JBVEVTXTsKIAorCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmlmaWJzcy0+bXR4KTsKKwogCS8qIFJlc2V0IG93biBUU0YgdG8gYWxsb3cgdGltZSBzeW5jaHJvbml6YXRpb24gd29yay4gKi8KIAlkcnZfcmVzZXRfdHNmKGxvY2FsKTsKIApAQCAtMTcyLDExICsxNzYsMTMgQEAKIAlyY3VfYXNzaWduX3BvaW50ZXIoaWZpYnNzLT5wcmVzcCwgc2tiKTsKIAogCXNkYXRhLT52aWYuYnNzX2NvbmYuYmVhY29uX2ludCA9IGJlYWNvbl9pbnQ7CisJc2RhdGEtPnZpZi5ic3NfY29uZi5iYXNpY19yYXRlcyA9IGJhc2ljX3JhdGVzOwogCWJzc19jaGFuZ2UgPSBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UOwogCWJzc19jaGFuZ2UgfD0gaWVlZTgwMjExX3Jlc2V0X2VycF9pbmZvKHNkYXRhKTsKIAlic3NfY2hhbmdlIHw9IEJTU19DSEFOR0VEX0JTU0lEOwogCWJzc19jaGFuZ2UgfD0gQlNTX0NIQU5HRURfQkVBQ09OOwogCWJzc19jaGFuZ2UgfD0gQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQ7CisJYnNzX2NoYW5nZSB8PSBCU1NfQ0hBTkdFRF9CQVNJQ19SQVRFUzsKIAlic3NfY2hhbmdlIHw9IEJTU19DSEFOR0VEX0lCU1M7CiAJc2RhdGEtPnZpZi5ic3NfY29uZi5pYnNzX2pvaW5lZCA9IHRydWU7CiAJaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoc2RhdGEsIGJzc19jaGFuZ2UpOwpAQCAtMjAzLDYgKzIwOSw4IEBACiAJaW50IGksIGo7CiAJdTE2IGJlYWNvbl9pbnQgPSBjYnNzLT5iZWFjb25faW50ZXJ2YWw7CiAKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZzZGF0YS0+dS5pYnNzLm10eCk7CisKIAlpZiAoYmVhY29uX2ludCA8IDEwKQogCQliZWFjb25faW50ID0gMTA7CiAKQEAgLTQ0Nyw2ICs0NTUsOCBAQAogCWludCBhY3RpdmUgPSAwOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmc2RhdGEtPnUuaWJzcy5tdHgpOworCiAJcmN1X3JlYWRfbG9jaygpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7CkBAIC00NzEsNiArNDgxLDggQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOwogCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmaWZpYnNzLT5tdHgpOworCiAJbW9kX3RpbWVyKCZpZmlic3MtPnRpbWVyLAogCQkgIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMKSk7CiAKQEAgLTUwMyw2ICs1MTUsOCBAQAogCXUxNiBjYXBhYmlsaXR5OwogCWludCBpOwogCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmaWZpYnNzLT5tdHgpOworCiAJaWYgKGlmaWJzcy0+Zml4ZWRfYnNzaWQpIHsKIAkJbWVtY3B5KGJzc2lkLCBpZmlic3MtPmJzc2lkLCBFVEhfQUxFTik7CiAJfSBlbHNlIHsKQEAgLTUyOSw3ICs1NDMsNyBAQAogCQlzZGF0YS0+ZHJvcF91bmVuY3J5cHRlZCA9IDA7CiAKIAlfX2llZWU4MDIxMV9zdGFfam9pbl9pYnNzKHNkYXRhLCBic3NpZCwgc2RhdGEtPnZpZi5ic3NfY29uZi5iZWFjb25faW50LAotCQkJCSAgaWZpYnNzLT5jaGFubmVsLCAzLCAvKiBmaXJzdCB0d28gYXJlIGJhc2ljICovCisJCQkJICBpZmlic3MtPmNoYW5uZWwsIGlmaWJzcy0+YmFzaWNfcmF0ZXMsCiAJCQkJICBjYXBhYmlsaXR5LCAwKTsKIH0KIApAQCAtNTQ3LDYgKzU2MSw4IEBACiAJaW50IGFjdGl2ZV9pYnNzOwogCXUxNiBjYXBhYmlsaXR5OwogCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmaWZpYnNzLT5tdHgpOworCiAJYWN0aXZlX2lic3MgPSBpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHNkYXRhKTsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwogCXByaW50ayhLRVJOX0RFQlVHICIlczogc3RhX2ZpbmRfaWJzcyAoYWN0aXZlX2lic3M9JWQpXG4iLApAQCAtNjM1LDYgKzY1MSw4IEBACiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICpyZXNwOwogCXU4ICpwb3MsICplbmQ7CiAKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZpZmlic3MtPm10eCk7CisKIAlpZiAoaWZpYnNzLT5zdGF0ZSAhPSBJRUVFODAyMTFfSUJTU19NTE1FX0pPSU5FRCB8fAogCSAgICBsZW4gPCAyNCArIDIgfHwgIWlmaWJzcy0+cHJlc3ApCiAJCXJldHVybjsKQEAgLTcyNyw4ICs3NDUsOCBAQAogCWllZWU4MDIxMV9yeF9ic3NfaW5mbyhzZGF0YSwgbWdtdCwgbGVuLCByeF9zdGF0dXMsICZlbGVtcywgdHJ1ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9pYnNzX3J4X3F1ZXVlZF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpCit2b2lkIGllZWU4MDIxMV9pYnNzX3J4X3F1ZXVlZF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1czsKIAlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CkBAIC03MzgsNiArNzU2LDggQEAKIAltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CiAJZmMgPSBsZTE2X3RvX2NwdShtZ210LT5mcmFtZV9jb250cm9sKTsKIAorCW11dGV4X2xvY2soJnNkYXRhLT51Lmlic3MubXR4KTsKKwogCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgewogCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUToKIAkJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVxKHNkYXRhLCBtZ210LCBza2ItPmxlbik7CkBAIC03NTUsMzUgKzc3NSwyMiBAQAogCQlicmVhazsKIAl9CiAKLQlrZnJlZV9za2Ioc2tiKTsKKwltdXRleF91bmxvY2soJnNkYXRhLT51Lmlic3MubXR4KTsKIH0KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX2lic3Nfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit2b2lkIGllZWU4MDIxMV9pYnNzX3dvcmsoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwgdS5pYnNzLndvcmspOwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzOwotCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKIAotCWlmIChXQVJOX09OKGxvY2FsLT5zdXNwZW5kZWQpKQotCQlyZXR1cm47CisJbXV0ZXhfbG9jaygmaWZpYnNzLT5tdHgpOwogCi0JaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCi0JCXJldHVybjsKLQotCWlmIChsb2NhbC0+c2Nhbm5pbmcpCi0JCXJldHVybjsKLQotCWlmIChXQVJOX09OKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykpCi0JCXJldHVybjsKLQlpZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKLQotCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmlmaWJzcy0+c2tiX3F1ZXVlKSkpCi0JCWllZWU4MDIxMV9pYnNzX3J4X3F1ZXVlZF9tZ210KHNkYXRhLCBza2IpOwotCi0JaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjExX0lCU1NfUkVRX1JVTiwgJmlmaWJzcy0+cmVxdWVzdCkpCi0JCXJldHVybjsKKwkvKgorCSAqIFdvcmsgY291bGQgYmUgc2NoZWR1bGVkIGFmdGVyIHNjYW4gb3Igc2ltaWxhcgorCSAqIHdoZW4gd2UgYXJlbid0IGV2ZW4gam9pbmVkIChvciB0cnlpbmcpIHdpdGggYQorCSAqIG5ldHdvcmsuCisJICovCisJaWYgKCFpZmlic3MtPnNzaWRfbGVuKQorCQlnb3RvIG91dDsKIAogCXN3aXRjaCAoaWZpYnNzLT5zdGF0ZSkgewogCWNhc2UgSUVFRTgwMjExX0lCU1NfTUxNRV9TRUFSQ0g6CkBAIC03OTYsNiArODAzLDkgQEAKIAkJV0FSTl9PTigxKTsKIAkJYnJlYWs7CiAJfQorCisgb3V0OgorCW11dGV4X3VubG9jaygmaWZpYnNzLT5tdHgpOwogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWJzc190aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCkBAIC04MTAsOCArODIwLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCXNldF9iaXQoSUVFRTgwMjExX0lCU1NfUkVRX1JVTiwgJmlmaWJzcy0+cmVxdWVzdCk7Ci0JaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJmlmaWJzcy0+d29yayk7CisJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJnNkYXRhLT53b3JrKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpAQCAtODE5LDcgKzgyOCw2IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKIAotCWNhbmNlbF93b3JrX3N5bmMoJmlmaWJzcy0+d29yayk7CiAJaWYgKGRlbF90aW1lcl9zeW5jKCZpZmlic3MtPnRpbWVyKSkKIAkJaWZpYnNzLT50aW1lcl9ydW5uaW5nID0gdHJ1ZTsKIH0KQEAgLTgzOSwxMCArODQ3LDkgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOwogCi0JSU5JVF9XT1JLKCZpZmlic3MtPndvcmssIGllZWU4MDIxMV9pYnNzX3dvcmspOwogCXNldHVwX3RpbWVyKCZpZmlic3MtPnRpbWVyLCBpZWVlODAyMTFfaWJzc190aW1lciwKIAkJICAgICh1bnNpZ25lZCBsb25nKSBzZGF0YSk7Ci0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmaWZpYnNzLT5za2JfcXVldWUpOworCW11dGV4X2luaXQoJmlmaWJzcy0+bXR4KTsKIH0KIAogLyogc2NhbiBmaW5pc2hlZCBub3RpZmljYXRpb24gKi8KQEAgLTg1Niw0NSArODYzLDI4IEBACiAJCQljb250aW51ZTsKIAkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykKIAkJCWNvbnRpbnVlOwotCQlpZiAoIXNkYXRhLT51Lmlic3Muc3NpZF9sZW4pCi0JCQljb250aW51ZTsKIAkJc2RhdGEtPnUuaWJzcy5sYXN0X3NjYW5fY29tcGxldGVkID0gamlmZmllczsKLQkJbW9kX3RpbWVyKCZzZGF0YS0+dS5pYnNzLnRpbWVyLCAwKTsKKwkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJnNkYXRhLT53b3JrKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CiB9CiAKLWllZWU4MDIxMV9yeF9yZXN1bHQKLWllZWU4MDIxMV9pYnNzX3J4X21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCXUxNiBmYzsKLQotCWlmIChza2ItPmxlbiA8IDI0KQotCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwotCi0JbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOwotCWZjID0gbGUxNl90b19jcHUobWdtdC0+ZnJhbWVfY29udHJvbCk7Ci0KLQlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQOgotCWNhc2UgSUVFRTgwMjExX1NUWVBFX0JFQUNPTjoKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVE6Ci0JY2FzZSBJRUVFODAyMTFfU1RZUEVfQVVUSDoKLQkJc2tiX3F1ZXVlX3RhaWwoJnNkYXRhLT51Lmlic3Muc2tiX3F1ZXVlLCBza2IpOwotCQlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmc2RhdGEtPnUuaWJzcy53b3JrKTsKLQkJcmV0dXJuIFJYX1FVRVVFRDsKLQl9Ci0KLQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwotfQotCiBpbnQgaWVlZTgwMjExX2lic3Nfam9pbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCXN0cnVjdCBjZmc4MDIxMV9pYnNzX3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKHNkYXRhLT5sb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKworCQkJICAgIDM2IC8qIGJpdHJhdGVzICovICsKKwkJCSAgICAzNCAvKiBTU0lEICovICsKKwkJCSAgICAzICAvKiBEUyBwYXJhbXMgKi8gKworCQkJICAgIDQgIC8qIElCU1MgcGFyYW1zICovICsKKwkJCSAgICBwYXJhbXMtPmllX2xlbik7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfbG9jaygmc2RhdGEtPnUuaWJzcy5tdHgpOworCiAJaWYgKHBhcmFtcy0+YnNzaWQpIHsKIAkJbWVtY3B5KHNkYXRhLT51Lmlic3MuYnNzaWQsIHBhcmFtcy0+YnNzaWQsIEVUSF9BTEVOKTsKIAkJc2RhdGEtPnUuaWJzcy5maXhlZF9ic3NpZCA9IHRydWU7CkBAIC05MDIsNiArODkyLDcgQEAKIAkJc2RhdGEtPnUuaWJzcy5maXhlZF9ic3NpZCA9IGZhbHNlOwogCiAJc2RhdGEtPnUuaWJzcy5wcml2YWN5ID0gcGFyYW1zLT5wcml2YWN5OworCXNkYXRhLT51Lmlic3MuYmFzaWNfcmF0ZXMgPSBwYXJhbXMtPmJhc2ljX3JhdGVzOwogCiAJc2RhdGEtPnZpZi5ic3NfY29uZi5iZWFjb25faW50ID0gcGFyYW1zLT5iZWFjb25faW50ZXJ2YWw7CiAKQEAgLTkyMiwzNCArOTEzLDE4IEBACiAJCQlzZGF0YS0+dS5pYnNzLmllX2xlbiA9IHBhcmFtcy0+aWVfbGVuOwogCX0KIAotCXNrYiA9IGRldl9hbGxvY19za2Ioc2RhdGEtPmxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArCi0JCQkgICAgMzYgLyogYml0cmF0ZXMgKi8gKwotCQkJICAgIDM0IC8qIFNTSUQgKi8gKwotCQkJICAgIDMgIC8qIERTIHBhcmFtcyAqLyArCi0JCQkgICAgNCAgLyogSUJTUyBwYXJhbXMgKi8gKwotCQkJICAgIHBhcmFtcy0+aWVfbGVuKTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KIAlzZGF0YS0+dS5pYnNzLnNrYiA9IHNrYjsKIAlzZGF0YS0+dS5pYnNzLnN0YXRlID0gSUVFRTgwMjExX0lCU1NfTUxNRV9TRUFSQ0g7CiAJc2RhdGEtPnUuaWJzcy5pYnNzX2pvaW5fcmVxID0gamlmZmllczsKIAogCW1lbWNweShzZGF0YS0+dS5pYnNzLnNzaWQsIHBhcmFtcy0+c3NpZCwgSUVFRTgwMjExX01BWF9TU0lEX0xFTik7Ci0KLQkvKgotCSAqIFRoZSBzc2lkX2xlbiBzZXR0aW5nIGJlbG93IGlzIHVzZWQgdG8gc2VlIHdoZXRoZXIKLQkgKiB3ZSBhcmUgYWN0aXZlLCBhbmQgd2UgbmVlZCBhbGwgb3RoZXIgc2V0dGluZ3MKLQkgKiBiZWZvcmUgdGhhdCBtYXkgZ2V0IHZpc2libGUuCi0JICovCi0JbWIoKTsKLQogCXNkYXRhLT51Lmlic3Muc3NpZF9sZW4gPSBwYXJhbXMtPnNzaWRfbGVuOwogCiAJaWVlZTgwMjExX3JlY2FsY19pZGxlKHNkYXRhLT5sb2NhbCk7CiAKLQlzZXRfYml0KElFRUU4MDIxMV9JQlNTX1JFUV9SVU4sICZzZGF0YS0+dS5pYnNzLnJlcXVlc3QpOwotCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZzZGF0YS0+bG9jYWwtPmh3LCAmc2RhdGEtPnUuaWJzcy53b3JrKTsKKwlpZWVlODAyMTFfcXVldWVfd29yaygmc2RhdGEtPmxvY2FsLT5odywgJnNkYXRhLT53b3JrKTsKKworCW11dGV4X3VubG9jaygmc2RhdGEtPnUuaWJzcy5tdHgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05NTcsMTEgKzkzMiwzMyBAQAogaW50IGllZWU4MDIxMV9pYnNzX2xlYXZlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewogCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjYnNzOworCXUxNiBjYXBhYmlsaXR5OworCWludCBhY3RpdmVfaWJzczsKIAotCWRlbF90aW1lcl9zeW5jKCZzZGF0YS0+dS5pYnNzLnRpbWVyKTsKLQljbGVhcl9iaXQoSUVFRTgwMjExX0lCU1NfUkVRX1JVTiwgJnNkYXRhLT51Lmlic3MucmVxdWVzdCk7Ci0JY2FuY2VsX3dvcmtfc3luYygmc2RhdGEtPnUuaWJzcy53b3JrKTsKLQljbGVhcl9iaXQoSUVFRTgwMjExX0lCU1NfUkVRX1JVTiwgJnNkYXRhLT51Lmlic3MucmVxdWVzdCk7CisJbXV0ZXhfbG9jaygmc2RhdGEtPnUuaWJzcy5tdHgpOworCisJYWN0aXZlX2lic3MgPSBpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHNkYXRhKTsKKworCWlmICghYWN0aXZlX2lic3MgJiYgIWlzX3plcm9fZXRoZXJfYWRkcihpZmlic3MtPmJzc2lkKSkgeworCQljYXBhYmlsaXR5ID0gV0xBTl9DQVBBQklMSVRZX0lCU1M7CisKKwkJaWYgKGlmaWJzcy0+cHJpdmFjeSkKKwkJCWNhcGFiaWxpdHkgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7CisKKwkJY2JzcyA9IGNmZzgwMjExX2dldF9ic3MobG9jYWwtPmh3LndpcGh5LCBpZmlic3MtPmNoYW5uZWwsCisJCQkJCWlmaWJzcy0+YnNzaWQsIGlmaWJzcy0+c3NpZCwKKwkJCQkJaWZpYnNzLT5zc2lkX2xlbiwgV0xBTl9DQVBBQklMSVRZX0lCU1MgfAorCQkJCQlXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSwKKwkJCQkJY2FwYWJpbGl0eSk7CisKKwkJaWYgKGNic3MpIHsKKwkJCWNmZzgwMjExX3VubGlua19ic3MobG9jYWwtPmh3LndpcGh5LCBjYnNzKTsKKwkJCWNmZzgwMjExX3B1dF9ic3MoY2Jzcyk7CisJCX0KKwl9CiAKIAlzdGFfaW5mb19mbHVzaChzZGF0YS0+bG9jYWwsIHNkYXRhKTsKIApAQCAtOTc1LDEwICs5NzIsMTQgQEAKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIAlrZnJlZV9za2Ioc2tiKTsKIAotCXNrYl9xdWV1ZV9wdXJnZSgmc2RhdGEtPnUuaWJzcy5za2JfcXVldWUpOworCXNrYl9xdWV1ZV9wdXJnZSgmc2RhdGEtPnNrYl9xdWV1ZSk7CiAJbWVtc2V0KHNkYXRhLT51Lmlic3MuYnNzaWQsIDAsIEVUSF9BTEVOKTsKIAlzZGF0YS0+dS5pYnNzLnNzaWRfbGVuID0gMDsKIAorCWRlbF90aW1lcl9zeW5jKCZzZGF0YS0+dS5pYnNzLnRpbWVyKTsKKworCW11dGV4X3VubG9jaygmc2RhdGEtPnUuaWJzcy5tdHgpOworCiAJaWVlZTgwMjExX3JlY2FsY19pZGxlKHNkYXRhLT5sb2NhbCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKaW5kZXggMWE5ZTJkYS4uNjVlMGVkNiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKQEAgLTIzOCw2ICsyMzgsNyBAQAogCUlFRUU4MDIxMV9XT1JLX0FCT1JULAogCUlFRUU4MDIxMV9XT1JLX0RJUkVDVF9QUk9CRSwKIAlJRUVFODAyMTFfV09SS19BVVRILAorCUlFRUU4MDIxMV9XT1JLX0FTU09DX0JFQUNPTl9XQUlULAogCUlFRUU4MDIxMV9XT1JLX0FTU09DLAogCUlFRUU4MDIxMV9XT1JLX1JFTUFJTl9PTl9DSEFOTkVMLAogfTsKQEAgLTMyNSw3ICszMjYsNiBAQAogCXN0cnVjdCB0aW1lcl9saXN0IGNvbm5fbW9uX3RpbWVyOwogCXN0cnVjdCB0aW1lcl9saXN0IGJjbl9tb25fdGltZXI7CiAJc3RydWN0IHRpbWVyX2xpc3QgY2hzd2l0Y2hfdGltZXI7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJc3RydWN0IHdvcmtfc3RydWN0IG1vbml0b3Jfd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY2hzd2l0Y2hfd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYmVhY29uX2Nvbm5lY3Rpb25fbG9zc193b3JrOwpAQCAtMzQwLDggKzM0MCw2IEBACiAKIAl1MTYgYWlkOwogCi0Jc3RydWN0IHNrX2J1ZmZfaGVhZCBza2JfcXVldWU7Ci0KIAl1bnNpZ25lZCBsb25nIHRpbWVyc19ydW5uaW5nOyAvKiB1c2VkIGZvciBxdWllc2NlL3Jlc3RhcnQgKi8KIAlib29sIHBvd2Vyc2F2ZTsgLyogcG93ZXJzYXZlIHJlcXVlc3RlZCBmb3IgdGhpcyBpZmFjZSAqLwogCWVudW0gaWVlZTgwMjExX3NtcHNfbW9kZSByZXFfc21wcywgLyogcmVxdWVzdGVkIHNtcHMgbW9kZSAqLwpAQCAtMzgwLDE5ICszNzgsMTUgQEAKIAlpbnQgbGFzdF9jcW1fZXZlbnRfc2lnbmFsOwogfTsKIAotZW51bSBpZWVlODAyMTFfaWJzc19yZXF1ZXN0IHsKLQlJRUVFODAyMTFfSUJTU19SRVFfUlVOCT0gMCwKLX07Ci0KIHN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyB7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYl9xdWV1ZTsKKwlzdHJ1Y3QgbXV0ZXggbXR4OwogCi0JdW5zaWduZWQgbG9uZyByZXF1ZXN0OwogCXVuc2lnbmVkIGxvbmcgbGFzdF9zY2FuX2NvbXBsZXRlZDsKIAorCXUzMiBiYXNpY19yYXRlczsKKwogCWJvb2wgdGltZXJfcnVubmluZzsKIAogCWJvb2wgZml4ZWRfYnNzaWQ7CkBAIC00MTYsMTEgKzQxMCw5IEBACiB9OwogCiBzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggewotCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCXN0cnVjdCB0aW1lcl9saXN0IGhvdXNla2VlcGluZ190aW1lcjsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBtZXNoX3BhdGhfdGltZXI7CiAJc3RydWN0IHRpbWVyX2xpc3QgbWVzaF9wYXRoX3Jvb3RfdGltZXI7Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCBza2JfcXVldWU7CiAKIAl1bnNpZ25lZCBsb25nIHRpbWVyc19ydW5uaW5nOwogCkBAIC01MTcsNiArNTA5LDExIEBACiAKIAl1MTYgc2VxdWVuY2VfbnVtYmVyOwogCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCBza2JfcXVldWU7CisKKwlib29sIGFycF9maWx0ZXJfc3RhdGU7CisKIAkvKgogCSAqIEFQIHRoaXMgYmVsb25ncyB0bzogc2VsZiBpbiBBUCBtb2RlIGFuZAogCSAqIGNvcnJlc3BvbmRpbmcgQVAgaW4gVkxBTiBtb2RlLCBOVUxMIGZvcgpAQCAtNTY5LDExICs1NjYsMTUgQEAKICNlbmRpZgogfQogCitlbnVtIHNkYXRhX3F1ZXVlX3R5cGUgeworCUlFRUU4MDIxMV9TREFUQV9RVUVVRV9UWVBFX0ZSQU1FCT0gMCwKKwlJRUVFODAyMTFfU0RBVEFfUVVFVUVfQUdHX1NUQVJUCQk9IDEsCisJSUVFRTgwMjExX1NEQVRBX1FVRVVFX0FHR19TVE9QCQk9IDIsCit9OworCiBlbnVtIHsKIAlJRUVFODAyMTFfUlhfTVNHCT0gMSwKIAlJRUVFODAyMTFfVFhfU1RBVFVTX01TRwk9IDIsCi0JSUVFRTgwMjExX0RFTEJBX01TRwk9IDMsCi0JSUVFRTgwMjExX0FEREJBX01TRwk9IDQsCiB9OwogCiBlbnVtIHF1ZXVlX3N0b3BfcmVhc29uIHsKQEAgLTcyNCwxMyArNzI1LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHBlbmRpbmdbSUVFRTgwMjExX01BWF9RVUVVRVNdOwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0eF9wZW5kaW5nX3Rhc2tsZXQ7CiAKLQkvKgotCSAqIFRoaXMgbG9jayBpcyB1c2VkIHRvIHByZXZlbnQgY29uY3VycmVudCBBLU1QRFUKLQkgKiBzZXNzaW9uIHN0YXJ0L3N0b3AgcHJvY2Vzc2luZywgdGhpcyB0aHVzIGFsc28KLQkgKiBzeW5jaHJvbmlzZXMgdGhlIC0+YW1wZHVfYWN0aW9uKCkgY2FsbGJhY2sgdG8KLQkgKiBkcml2ZXJzIGFuZCBsaW1pdHMgaXQgdG8gb25lIGF0IGEgdGltZS4KLQkgKi8KLQlzcGlubG9ja190IGFtcGR1X2xvY2s7CisJYXRvbWljX3QgYWdnX3F1ZXVlX3N0b3BbSUVFRTgwMjExX01BWF9RVUVVRVNdOwogCiAJLyogbnVtYmVyIG9mIGludGVyZmFjZXMgd2l0aCBjb3JyZXNwb25kaW5nIElGRl8gZmxhZ3MgKi8KIAlhdG9taWNfdCBpZmZfYWxsbXVsdGlzLCBpZmZfcHJvbWlzY3M7CkBAIC03NDYsMTAgKzc0MSwxMCBAQAogCXN0cnVjdCBtdXRleCBpZmxpc3RfbXR4OwogCiAJLyoKLQkgKiBLZXkgbG9jaywgcHJvdGVjdHMgc2RhdGEncyBrZXlfbGlzdCBhbmQgc3RhX2luZm8ncworCSAqIEtleSBtdXRleCwgcHJvdGVjdHMgc2RhdGEncyBrZXlfbGlzdCBhbmQgc3RhX2luZm8ncwogCSAqIGtleSBwb2ludGVycyAod3JpdGUgYWNjZXNzLCB0aGV5J3JlIFJDVS4pCiAJICovCi0Jc3BpbmxvY2tfdCBrZXlfbG9jazsKKwlzdHJ1Y3QgbXV0ZXgga2V5X210eDsKIAogCiAJLyogU2Nhbm5pbmcgYW5kIEJTUyBsaXN0ICovCkBAIC04NTEsNiArODQ2LDE1IEBACiAJc3RydWN0IHdvcmtfc3RydWN0IGR5bmFtaWNfcHNfZGlzYWJsZV93b3JrOwogCXN0cnVjdCB0aW1lcl9saXN0IGR5bmFtaWNfcHNfdGltZXI7CiAJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG5ldHdvcmtfbGF0ZW5jeV9ub3RpZmllcjsKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaWZhX25vdGlmaWVyOworCisJLyoKKwkgKiBUaGUgZHluYW1pYyBwcyB0aW1lb3V0IGNvbmZpZ3VyZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBXRVhUIC0KKwkgKiB0aGlzIHdpbGwgb3ZlcnJpZGUgd2hhdGV2ZXIgY2hvc2VuIGJ5IG1hYzgwMjExIGludGVybmFsbHkuCisJICovCisJaW50IGR5bmFtaWNfcHNfZm9yY2VkX3RpbWVvdXQ7CisJaW50IGR5bmFtaWNfcHNfdXNlcl90aW1lb3V0OworCWJvb2wgZGlzYWJsZV9keW5hbWljX3BzOwogCiAJaW50IHVzZXJfcG93ZXJfbGV2ZWw7IC8qIGluIGRCbSAqLwogCWludCBwb3dlcl9jb25zdHJfbGV2ZWw7IC8qIGluIGRCbSAqLwpAQCAtODc0LDkgKzg3OCw4IEBACiAJcmV0dXJuIG5ldGRldl9wcml2KGRldik7CiB9CiAKLS8qIHRoaXMgc3RydWN0IHJlcHJlc2VudHMgODAyLjExbidzIFJBL1RJRCBjb21iaW5hdGlvbiBhbG9uZyB3aXRoIG91ciB2aWYgKi8KKy8qIHRoaXMgc3RydWN0IHJlcHJlc2VudHMgODAyLjExbidzIFJBL1RJRCBjb21iaW5hdGlvbiAqLwogc3RydWN0IGllZWU4MDIxMV9yYV90aWQgewotCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7CiAJdTggcmFbRVRIX0FMRU5dOwogCXUxNiB0aWQ7CiB9OwpAQCAtOTg1LDI5ICs5ODgsMjUgQEAKIGludCBpZWVlODAyMTFfbWdkX2Rpc2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJICAgc3RydWN0IGNmZzgwMjExX2Rpc2Fzc29jX3JlcXVlc3QgKnJlcSwKIAkJCSAgIHZvaWQgKmNvb2tpZSk7Ci1pbnQgaWVlZTgwMjExX21nZF9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAotCQkJIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAotCQkJIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sIHU2NCAqY29va2llKTsKLWllZWU4MDIxMV9yeF9yZXN1bHQgaWVlZTgwMjExX3N0YV9yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBpZWVlODAyMTFfc2VuZF9wc3BvbGwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiB2b2lkIGllZWU4MDIxMV9yZWNhbGNfcHMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHMzMiBsYXRlbmN5KTsKIGludCBpZWVlODAyMTFfbWF4X25ldHdvcmtfbGF0ZW5jeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAogCQkJCSAgdW5zaWduZWQgbG9uZyBkYXRhLCB2b2lkICpkdW1teSk7CitpbnQgaWVlZTgwMjExX3NldF9hcnBfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIHZvaWQgaWVlZTgwMjExX3N0YV9wcm9jZXNzX2NoYW5zd2l0Y2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3X2llICpzd19lbGVtLAogCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MsCiAJCQkJICAgICAgdTY0IHRpbWVzdGFtcCk7CiB2b2lkIGllZWU4MDIxMV9zdGFfcXVpZXNjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiB2b2lkIGllZWU4MDIxMV9zdGFfcmVzdGFydChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7Cit2b2lkIGllZWU4MDIxMV9zdGFfd29yayhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7Cit2b2lkIGllZWU4MDIxMV9zdGFfcnhfcXVldWVkX21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogLyogSUJTUyBjb2RlICovCiB2b2lkIGllZWU4MDIxMV9pYnNzX25vdGlmeV9zY2FuX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7CiB2b2lkIGllZWU4MDIxMV9pYnNzX3NldHVwX3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKLWllZWU4MDIxMV9yeF9yZXN1bHQKLWllZWU4MDIxMV9pYnNzX3J4X21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBza19idWZmICpza2IpOwogc3RydWN0IHN0YV9pbmZvICppZWVlODAyMTFfaWJzc19hZGRfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCQl1OCAqYnNzaWQsIHU4ICphZGRyLCB1MzIgc3VwcF9yYXRlcywKIAkJCQkJZ2ZwX3QgZ2ZwKTsKQEAgLTEwMTYsNiArMTAxNSwxNCBAQAogaW50IGllZWU4MDIxMV9pYnNzX2xlYXZlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIHZvaWQgaWVlZTgwMjExX2lic3NfcXVpZXNjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiB2b2lkIGllZWU4MDIxMV9pYnNzX3Jlc3RhcnQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwordm9pZCBpZWVlODAyMTFfaWJzc193b3JrKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKK3ZvaWQgaWVlZTgwMjExX2lic3NfcnhfcXVldWVkX21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKy8qIG1lc2ggY29kZSAqLwordm9pZCBpZWVlODAyMTFfbWVzaF93b3JrKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKK3ZvaWQgaWVlZTgwMjExX21lc2hfcnhfcXVldWVkX21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIC8qIHNjYW4vQlNTIGhhbmRsaW5nICovCiB2b2lkIGllZWU4MDIxMV9zY2FuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKQEAgLTEwODQsNyArMTA5MSw3IEBACiAJdTggcGFkZGluZ19mb3JfcmF0ZTsKIAlfX2xlMTYgdHhfZmxhZ3M7CiAJdTggZGF0YV9yZXRyaWVzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAKIC8qIEhUICovCkBAIC0xMDk5LDYgKzExMDYsOCBAQAogCQkJICAgICAgIGVudW0gaWVlZTgwMjExX3NtcHNfbW9kZSBzbXBzLCBjb25zdCB1OCAqZGEsCiAJCQkgICAgICAgY29uc3QgdTggKmJzc2lkKTsKIAordm9pZCBfX19pZWVlODAyMTFfc3RvcF9yeF9iYV9zZXNzaW9uKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAorCQkJCSAgICAgdTE2IGluaXRpYXRvciwgdTE2IHJlYXNvbik7CiB2b2lkIF9faWVlZTgwMjExX3N0b3BfcnhfYmFfc2Vzc2lvbihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCwKIAkJCQkgICAgdTE2IGluaXRpYXRvciwgdTE2IHJlYXNvbik7CiB2b2lkIGllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKQEAgLTExMTgsNiArMTEyNywxMCBAQAogCQkJCSAgIGVudW0gaWVlZTgwMjExX2JhY2tfcGFydGllcyBpbml0aWF0b3IpOwogaW50IF9fX2llZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQsCiAJCQkJICAgIGVudW0gaWVlZTgwMjExX2JhY2tfcGFydGllcyBpbml0aWF0b3IpOwordm9pZCBpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2Ioc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgdTggKnJhLCB1MTYgdGlkKTsKK3ZvaWQgaWVlZTgwMjExX3N0b3BfdHhfYmFfY2Ioc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgdTggKnJhLCB1OCB0aWQpOwordm9pZCBpZWVlODAyMTFfYmFfc2Vzc2lvbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Cit2b2lkIGllZWU4MDIxMV90eF9iYV9zZXNzaW9uX2hhbmRsZV9zdGFydChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgaW50IHRpZCk7CiAKIC8qIFNwZWN0cnVtIG1hbmFnZW1lbnQgKi8KIHZvaWQgaWVlZTgwMjExX3Byb2Nlc3NfbWVhc3VyZW1lbnRfcmVxKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lmYWNlLmMgYi9uZXQvbWFjODAyMTEvaWZhY2UuYwppbmRleCA1MGRlYjAxLi5lYmJlMjY0IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuYworKysgYi9uZXQvbWFjODAyMTEvaWZhY2UuYwpAQCAtMjQ5LDYgKzI0OSw4IEBACiAJCQlsb2NhbC0+ZmlmX290aGVyX2JzcysrOwogCiAJCWllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTsKKworCQluZXRpZl9jYXJyaWVyX29uKGRldik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJlcyA9IGRydl9hZGRfaW50ZXJmYWNlKGxvY2FsLCAmc2RhdGEtPnZpZik7CkBAIC0yNjgsNyArMjcwLDYgQEAKIAogCQljaGFuZ2VkIHw9IGllZWU4MDIxMV9yZXNldF9lcnBfaW5mbyhzZGF0YSk7CiAJCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLCBjaGFuZ2VkKTsKLQkJaWVlZTgwMjExX2VuYWJsZV9rZXlzKHNkYXRhKTsKIAogCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwpAQCAtMzIxLDE1ICszMjIsNiBAQAogCiAJaWVlZTgwMjExX3JlY2FsY19wcyhsb2NhbCwgLTEpOwogCi0JLyoKLQkgKiBpZWVlODAyMTFfc3RhX3dvcmsgaXMgZGlzYWJsZWQgd2hpbGUgbmV0d29yayBpbnRlcmZhY2UKLQkgKiBpcyBkb3duLiBUaGVyZWZvcmUsIHNvbWUgY29uZmlndXJhdGlvbiBjaGFuZ2VzIG1heSBub3QKLQkgKiB5ZXQgYmUgZWZmZWN0aXZlLiBUcmlnZ2VyIGV4ZWN1dGlvbiBvZiBpZWVlODAyMTFfc3RhX3dvcmsKLQkgKiB0byBmaXggdGhpcy4KLQkgKi8KLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZzZGF0YS0+dS5tZ2Qud29yayk7Ci0KIAluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKGRldik7CiAKIAlyZXR1cm4gMDsKQEAgLTM0OSw3ICszNDEsNiBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBza19idWZmICpza2IsICp0bXA7CiAJdTMyIGh3X3JlY29uZl9mbGFncyA9IDA7CkBAIC0zNjYsMTggKzM1Nyw2IEBACiAJaWVlZTgwMjExX3dvcmtfcHVyZ2Uoc2RhdGEpOwogCiAJLyoKLQkgKiBOb3cgZGVsZXRlIGFsbCBhY3RpdmUgYWdncmVnYXRpb24gc2Vzc2lvbnMuCi0JICovCi0JcmN1X3JlYWRfbG9jaygpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7Ci0JCWlmIChzdGEtPnNkYXRhID09IHNkYXRhKQotCQkJaWVlZTgwMjExX3N0YV90ZWFyX2Rvd25fQkFfc2Vzc2lvbnMoc3RhKTsKLQl9Ci0KLQlyY3VfcmVhZF91bmxvY2soKTsKLQotCS8qCiAJICogUmVtb3ZlIGFsbCBzdGF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbnRlcmZhY2UuCiAJICoKIAkgKiBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgY2FsbGluZyBvcHMtPnJlbW92ZV9pbnRlcmZhY2UoKQpAQCAtNDgzLDI3ICs0NjIsMTQgQEAKIAkJICogd2hldGhlciB0aGUgaW50ZXJmYWNlIGlzIHJ1bm5pbmcsIHdoaWNoLCBhdCB0aGlzIHBvaW50LAogCQkgKiBpdCBubyBsb25nZXIgaXMuCiAJCSAqLwotCQljYW5jZWxfd29ya19zeW5jKCZzZGF0YS0+dS5tZ2Qud29yayk7CiAJCWNhbmNlbF93b3JrX3N5bmMoJnNkYXRhLT51Lm1nZC5jaHN3aXRjaF93b3JrKTsKIAkJY2FuY2VsX3dvcmtfc3luYygmc2RhdGEtPnUubWdkLm1vbml0b3Jfd29yayk7CiAJCWNhbmNlbF93b3JrX3N5bmMoJnNkYXRhLT51Lm1nZC5iZWFjb25fY29ubmVjdGlvbl9sb3NzX3dvcmspOwogCi0JCS8qCi0JCSAqIFdoZW4gd2UgZ2V0IGhlcmUsIHRoZSBpbnRlcmZhY2UgaXMgbWFya2VkIGRvd24uCi0JCSAqIENhbGwgc3luY2hyb25pemVfcmN1KCkgdG8gd2FpdCBmb3IgdGhlIFJYIHBhdGgKLQkJICogc2hvdWxkIGl0IGJlIHVzaW5nIHRoZSBpbnRlcmZhY2UgYW5kIGVucXVldWluZwotCQkgKiBmcmFtZXMgYXQgdGhpcyB2ZXJ5IHRpbWUgb24gYW5vdGhlciBDUFUuCi0JCSAqLwotCQlzeW5jaHJvbml6ZV9yY3UoKTsKLQkJc2tiX3F1ZXVlX3B1cmdlKCZzZGF0YS0+dS5tZ2Quc2tiX3F1ZXVlKTsKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQogCQkJZGVsX3RpbWVyX3N5bmMoJnNkYXRhLT51Lmlic3MudGltZXIpOwotCQkJY2FuY2VsX3dvcmtfc3luYygmc2RhdGEtPnUuaWJzcy53b3JrKTsKLQkJCXN5bmNocm9uaXplX3JjdSgpOwotCQkJc2tiX3F1ZXVlX3B1cmdlKCZzZGF0YS0+dS5pYnNzLnNrYl9xdWV1ZSk7Ci0JCX0KIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgogCQlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkgewpAQCAtNTE4LDYgKzQ4NCwxNiBAQAogCQl9CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWRlZmF1bHQ6CisJCWZsdXNoX3dvcmsoJnNkYXRhLT53b3JrKTsKKwkJLyoKKwkJICogV2hlbiB3ZSBnZXQgaGVyZSwgdGhlIGludGVyZmFjZSBpcyBtYXJrZWQgZG93bi4KKwkJICogQ2FsbCBzeW5jaHJvbml6ZV9yY3UoKSB0byB3YWl0IGZvciB0aGUgUlggcGF0aAorCQkgKiBzaG91bGQgaXQgYmUgdXNpbmcgdGhlIGludGVyZmFjZSBhbmQgZW5xdWV1aW5nCisJCSAqIGZyYW1lcyBhdCB0aGlzIHZlcnkgdGltZSBvbiBhbm90aGVyIENQVS4KKwkJICovCisJCXN5bmNocm9uaXplX3JjdSgpOworCQlza2JfcXVldWVfcHVyZ2UoJnNkYXRhLT5za2JfcXVldWUpOworCiAJCWlmIChsb2NhbC0+c2Nhbl9zZGF0YSA9PSBzZGF0YSkKIAkJCWllZWU4MDIxMV9zY2FuX2NhbmNlbChsb2NhbCk7CiAKQEAgLTUzMSw4ICs1MDcsOCBAQAogCQkJCUJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKTsKIAkJfQogCi0JCS8qIGRpc2FibGUgYWxsIGtleXMgZm9yIGFzIGxvbmcgYXMgdGhpcyBuZXRkZXYgaXMgZG93biAqLwotCQlpZWVlODAyMTFfZGlzYWJsZV9rZXlzKHNkYXRhKTsKKwkJLyogZnJlZSBhbGwgcmVtYWluaW5nIGtleXMsIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgKi8KKwkJaWVlZTgwMjExX2ZyZWVfa2V5cyhzZGF0YSk7CiAJCWRydl9yZW1vdmVfaW50ZXJmYWNlKGxvY2FsLCAmc2RhdGEtPnZpZik7CiAJfQogCkBAIC03MjcsNiArNzAzLDEzNiBAQAogCWRldi0+ZGVzdHJ1Y3RvciA9IGZyZWVfbmV0ZGV2OwogfQogCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWZhY2Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwgd29yayk7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqcmFfdGlkOworCisJaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCisJCXJldHVybjsKKworCWlmIChsb2NhbC0+c2Nhbm5pbmcpCisJCXJldHVybjsKKworCS8qCisJICogaWVlZTgwMjExX3F1ZXVlX3dvcmsoKSBzaG91bGQgaGF2ZSBwaWNrZWQgdXAgbW9zdCBjYXNlcywKKwkgKiBoZXJlIHdlJ2xsIHBpY2sgdGhlIHJlc3QuCisJICovCisJaWYgKFdBUk4obG9jYWwtPnN1c3BlbmRlZCwKKwkJICJpbnRlcmZhY2Ugd29yayBzY2hlZHVsZWQgd2hpbGUgZ29pbmcgdG8gc3VzcGVuZFxuIikpCisJCXJldHVybjsKKworCS8qIGZpcnN0IHByb2Nlc3MgZnJhbWVzICovCisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmc2RhdGEtPnNrYl9xdWV1ZSkpKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopc2tiLT5kYXRhOworCisJCWlmIChza2ItPnBrdF90eXBlID09IElFRUU4MDIxMV9TREFUQV9RVUVVRV9BR0dfU1RBUlQpIHsKKwkJCXJhX3RpZCA9ICh2b2lkICopJnNrYi0+Y2I7CisJCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2IoJnNkYXRhLT52aWYsIHJhX3RpZC0+cmEsCisJCQkJCQkgcmFfdGlkLT50aWQpOworCQl9IGVsc2UgaWYgKHNrYi0+cGt0X3R5cGUgPT0gSUVFRTgwMjExX1NEQVRBX1FVRVVFX0FHR19TVE9QKSB7CisJCQlyYV90aWQgPSAodm9pZCAqKSZza2ItPmNiOworCQkJaWVlZTgwMjExX3N0b3BfdHhfYmFfY2IoJnNkYXRhLT52aWYsIHJhX3RpZC0+cmEsCisJCQkJCQlyYV90aWQtPnRpZCk7CisJCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2FjdGlvbihtZ210LT5mcmFtZV9jb250cm9sKSAmJgorCQkJICAgbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPT0gV0xBTl9DQVRFR09SWV9CQUNLKSB7CisJCQlpbnQgbGVuID0gc2tiLT5sZW47CisKKwkJCW11dGV4X2xvY2soJmxvY2FsLT5zdGFfbXR4KTsKKwkJCXN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1nbXQtPnNhKTsKKwkJCWlmIChzdGEpIHsKKwkJCQlzd2l0Y2ggKG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmFjdGlvbl9jb2RlKSB7CisJCQkJY2FzZSBXTEFOX0FDVElPTl9BRERCQV9SRVE6CisJCQkJCWllZWU4MDIxMV9wcm9jZXNzX2FkZGJhX3JlcXVlc3QoCisJCQkJCQkJbG9jYWwsIHN0YSwgbWdtdCwgbGVuKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBXTEFOX0FDVElPTl9BRERCQV9SRVNQOgorCQkJCQlpZWVlODAyMTFfcHJvY2Vzc19hZGRiYV9yZXNwKGxvY2FsLCBzdGEsCisJCQkJCQkJCSAgICAgbWdtdCwgbGVuKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBXTEFOX0FDVElPTl9ERUxCQToKKwkJCQkJaWVlZTgwMjExX3Byb2Nlc3NfZGVsYmEoc2RhdGEsIHN0YSwKKwkJCQkJCQkJbWdtdCwgbGVuKTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJV0FSTl9PTigxKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+c3RhX210eCk7CisJCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKG1nbXQtPmZyYW1lX2NvbnRyb2wpKSB7CisJCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKiltZ210OworCQkJLyoKKwkJCSAqIFNvIHRoZSBmcmFtZSBpc24ndCBtZ210LCBidXQgZnJhbWVfY29udHJvbAorCQkJICogaXMgYXQgdGhlIHJpZ2h0IHBsYWNlIGFueXdheSwgb2YgY291cnNlLCBzbworCQkJICogdGhlIGlmIHN0YXRlbWVudCBpcyBjb3JyZWN0LgorCQkJICoKKwkJCSAqIFdhcm4gaWYgd2UgaGF2ZSBvdGhlciBkYXRhIGZyYW1lIHR5cGVzIGhlcmUsCisJCQkgKiB0aGV5IG11c3Qgbm90IGdldCBoZXJlLgorCQkJICovCisJCQlXQVJOX09OKGhkci0+ZnJhbWVfY29udHJvbCAmCisJCQkJCWNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQykpOworCQkJV0FSTl9PTighKGhkci0+c2VxX2N0cmwgJgorCQkJCQljcHVfdG9fbGUxNihJRUVFODAyMTFfU0NUTF9GUkFHKSkpOworCQkJLyoKKwkJCSAqIFRoaXMgd2FzIGEgZnJhZ21lbnQgb2YgYSBmcmFtZSwgcmVjZWl2ZWQgd2hpbGUKKwkJCSAqIGEgYmxvY2stYWNrIHNlc3Npb24gd2FzIGFjdGl2ZS4gVGhhdCBjYW5ub3QgYmUKKwkJCSAqIHJpZ2h0LCBzbyB0ZXJtaW5hdGUgdGhlIHNlc3Npb24uCisJCQkgKi8KKwkJCW11dGV4X2xvY2soJmxvY2FsLT5zdGFfbXR4KTsKKwkJCXN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1nbXQtPnNhKTsKKwkJCWlmIChzdGEpIHsKKwkJCQl1MTYgdGlkID0gKmllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpICYKKwkJCQkJCUlFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOworCisJCQkJX19pZWVlODAyMTFfc3RvcF9yeF9iYV9zZXNzaW9uKAorCQkJCQlzdGEsIHRpZCwgV0xBTl9CQUNLX1JFQ0lQSUVOVCwKKwkJCQkJV0xBTl9SRUFTT05fUVNUQV9SRVFVSVJFX1NFVFVQKTsKKwkJCX0KKwkJCW11dGV4X3VubG9jaygmbG9jYWwtPnN0YV9tdHgpOworCQl9IGVsc2Ugc3dpdGNoIChzZGF0YS0+dmlmLnR5cGUpIHsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQkJaWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfbWdtdChzZGF0YSwgc2tiKTsKKwkJCWJyZWFrOworCQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQkJaWVlZTgwMjExX2lic3NfcnhfcXVldWVkX21nbXQoc2RhdGEsIHNrYik7CisJCQlicmVhazsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgorCQkJaWYgKCFpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKQorCQkJCWJyZWFrOworCQkJaWVlZTgwMjExX21lc2hfcnhfcXVldWVkX21nbXQoc2RhdGEsIHNrYik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVdBUk4oMSwgImZyYW1lIGZvciB1bmV4cGVjdGVkIGludGVyZmFjZSB0eXBlIik7CisJCQlicmVhazsKKwkJfQorCisJCWtmcmVlX3NrYihza2IpOworCX0KKworCS8qIHRoZW4gb3RoZXIgdHlwZS1kZXBlbmRlbnQgd29yayAqLworCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlpZWVlODAyMTFfc3RhX3dvcmsoc2RhdGEpOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQlpZWVlODAyMTFfaWJzc193b3JrKHNkYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgorCQlpZiAoIWllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpCisJCQlicmVhazsKKwkJaWVlZTgwMjExX21lc2hfd29yayhzZGF0YSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworCiAvKgogICogSGVscGVyIGZ1bmN0aW9uIHRvIGluaXRpYWxpc2UgYW4gaW50ZXJmYWNlIHRvIGEgc3BlY2lmaWMgdHlwZS4KICAqLwpAQCAtNzQ0LDYgKzg1MCw5IEBACiAJLyogb25seSBtb25pdG9yIGRpZmZlcnMgKi8KIAlzZGF0YS0+ZGV2LT50eXBlID0gQVJQSFJEX0VUSEVSOwogCisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmc2RhdGEtPnNrYl9xdWV1ZSk7CisJSU5JVF9XT1JLKCZzZGF0YS0+d29yaywgaWVlZTgwMjExX2lmYWNlX3dvcmspOworCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKIAkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmc2RhdGEtPnUuYXAucHNfYmNfYnVmKTsKQEAgLTk2OSw2ICsxMDc4LDkgQEAKIAlzZGF0YS0+d2Rldi53aXBoeSA9IGxvY2FsLT5ody53aXBoeTsKIAlzZGF0YS0+bG9jYWwgPSBsb2NhbDsKIAlzZGF0YS0+ZGV2ID0gbmRldjsKKyNpZmRlZiBDT05GSUdfSU5FVAorCXNkYXRhLT5hcnBfZmlsdGVyX3N0YXRlID0gdHJ1ZTsKKyNlbmRpZgogCiAJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9GUkFHTUVOVF9NQVg7IGkrKykKIAkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmc2RhdGEtPmZyYWdtZW50c1tpXS5za2JfbGlzdCk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEva2V5LmMgYi9uZXQvbWFjODAyMTEva2V5LmMKaW5kZXggZThmNmUzYi4uMWI5ZDg3ZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2tleS5jCisrKyBiL25ldC9tYWM4MDIxMS9rZXkuYwpAQCAtMzYsODAgKzM2LDIwIEBACiAgKiBUaGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IG9mIGtub3dpbmcgdGhpcyBleGNlcHQgYnkgbG9va2luZyBpbnRvCiAgKiBkZWJ1Z2ZzLgogICoKLSAqIEFsbCBrZXkgb3BlcmF0aW9ucyBhcmUgcHJvdGVjdGVkIGludGVybmFsbHkgc28geW91IGNhbiBjYWxsIHRoZW0gYXQKLSAqIGFueSB0aW1lLgorICogQWxsIGtleSBvcGVyYXRpb25zIGFyZSBwcm90ZWN0ZWQgaW50ZXJuYWxseS4KICAqCiAgKiBXaXRoaW4gbWFjODAyMTEsIGtleSByZWZlcmVuY2VzIGFyZSwganVzdCBhcyBTVEEgc3RydWN0dXJlIHJlZmVyZW5jZXMsCiAgKiBwcm90ZWN0ZWQgYnkgUkNVLiBOb3RlLCBob3dldmVyLCB0aGF0IHNvbWUgdGhpbmdzIGFyZSB1bnByb3RlY3RlZCwKICAqIG5hbWVseSB0aGUga2V5LT5zdGEgZGVyZWZlcmVuY2VzIHdpdGhpbiB0aGUgaGFyZHdhcmUgYWNjZWxlcmF0aW9uCi0gKiBmdW5jdGlvbnMuIFRoaXMgbWVhbnMgdGhhdCBzdGFfaW5mb19kZXN0cm95KCkgbXVzdCBmbHVzaCB0aGUga2V5IHRvZG8KLSAqIGxpc3QuCi0gKgotICogQWxsIHRoZSBkaXJlY3Qga2V5IGxpc3QgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyBtdXN0IG5vdCBzbGVlcCBiZWNhdXNlCi0gKiB0aGV5IGNhbiBvcGVyYXRlIG9uIFNUQSBpbmZvIHN0cnVjdHMgdGhhdCBhcmUgcHJvdGVjdGVkIGJ5IFJDVS4KKyAqIGZ1bmN0aW9ucy4gVGhpcyBtZWFucyB0aGF0IHN0YV9pbmZvX2Rlc3Ryb3koKSBtdXN0IHJlbW92ZSB0aGUga2V5CisgKiB3aGljaCB3YWl0cyBmb3IgYW4gUkNVIGdyYWNlIHBlcmlvZC4KICAqLwogCiBzdGF0aWMgY29uc3QgdTggYmNhc3RfYWRkcltFVEhfQUxFTl0gPSB7IDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgfTsKIAotLyoga2V5IG11dGV4OiB1c2VkIHRvIHN5bmNocm9uaXNlIHRvZG8gcnVubmVycyAqLwotc3RhdGljIERFRklORV9NVVRFWChrZXlfbXV0ZXgpOwotc3RhdGljIERFRklORV9TUElOTE9DSyh0b2RvX2xvY2spOwotc3RhdGljIExJU1RfSEVBRCh0b2RvX2xpc3QpOwotCi1zdGF0aWMgdm9pZCBrZXlfdG9kbyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgdm9pZCBhc3NlcnRfa2V5X2xvY2soc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7Ci0JaWVlZTgwMjExX2tleV90b2RvKCk7Ci19Ci0KLXN0YXRpYyBERUNMQVJFX1dPUksodG9kb193b3JrLCBrZXlfdG9kbyk7Ci0KLS8qKgotICogYWRkX3RvZG8gLSBhZGQgdG9kbyBpdGVtIGZvciBhIGtleQotICoKLSAqIEBrZXk6IGtleSB0byBhZGQgdG8gZG8gaXRlbSBmb3IKLSAqIEBmbGFnOiB0b2RvIGZsYWcocykKLSAqCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIElSUXMgb3Igc29mdGlycXMgZGlzYWJsZWQuCi0gKi8KLXN0YXRpYyB2b2lkIGFkZF90b2RvKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksIHUzMiBmbGFnKQotewotCWlmICgha2V5KQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2soJnRvZG9fbG9jayk7Ci0Ja2V5LT5mbGFncyB8PSBmbGFnOwotCS8qCi0JICogUmVtb3ZlIGFnYWluIGlmIGFscmVhZHkgb24gdGhlIGxpc3Qgc28gdGhhdCB3ZSBtb3ZlIGl0IHRvIHRoZSBlbmQuCi0JICovCi0JaWYgKCFsaXN0X2VtcHR5KCZrZXktPnRvZG8pKQotCQlsaXN0X2RlbCgma2V5LT50b2RvKTsKLQlsaXN0X2FkZF90YWlsKCZrZXktPnRvZG8sICZ0b2RvX2xpc3QpOwotCXNjaGVkdWxlX3dvcmsoJnRvZG9fd29yayk7Ci0Jc3Bpbl91bmxvY2soJnRvZG9fbG9jayk7Ci19Ci0KLS8qKgotICogaWVlZTgwMjExX2tleV9sb2NrIC0gbG9jayB0aGUgbWFjODAyMTEga2V5IG9wZXJhdGlvbiBsb2NrCi0gKgotICogVGhpcyBsb2NrcyB0aGUgKGdsb2JhbCkgbWFjODAyMTEga2V5IG9wZXJhdGlvbiBsb2NrLCBhbGwKLSAqIGtleSBvcGVyYXRpb25zIG11c3QgYmUgZG9uZSB1bmRlciB0aGlzIGxvY2suCi0gKi8KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9rZXlfbG9jayh2b2lkKQotewotCW11dGV4X2xvY2soJmtleV9tdXRleCk7Ci19Ci0KLS8qKgotICogaWVlZTgwMjExX2tleV91bmxvY2sgLSB1bmxvY2sgdGhlIG1hYzgwMjExIGtleSBvcGVyYXRpb24gbG9jawotICovCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfa2V5X3VubG9jayh2b2lkKQotewotCW11dGV4X3VubG9jaygma2V5X211dGV4KTsKLX0KLQotc3RhdGljIHZvaWQgYXNzZXJ0X2tleV9sb2NrKHZvaWQpCi17Ci0JV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZrZXlfbXV0ZXgpKTsKKwlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmxvY2FsLT5rZXlfbXR4KSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqZ2V0X3N0YV9mb3Jfa2V5KHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpCkBAIC0xMjYsMTIgKzY2LDEzIEBACiAJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKIAlpbnQgcmV0OwogCi0JYXNzZXJ0X2tleV9sb2NrKCk7CiAJbWlnaHRfc2xlZXAoKTsKIAogCWlmICgha2V5LT5sb2NhbC0+b3BzLT5zZXRfa2V5KQogCQlyZXR1cm47CiAKKwlhc3NlcnRfa2V5X2xvY2soa2V5LT5sb2NhbCk7CisKIAlzdGEgPSBnZXRfc3RhX2Zvcl9rZXkoa2V5KTsKIAogCXNkYXRhID0ga2V5LT5zZGF0YTsKQEAgLTE0MiwxMSArODMsOCBAQAogCiAJcmV0ID0gZHJ2X3NldF9rZXkoa2V5LT5sb2NhbCwgU0VUX0tFWSwgc2RhdGEsIHN0YSwgJmtleS0+Y29uZik7CiAKLQlpZiAoIXJldCkgewotCQlzcGluX2xvY2tfYmgoJnRvZG9fbG9jayk7CisJaWYgKCFyZXQpCiAJCWtleS0+ZmxhZ3MgfD0gS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkU7Ci0JCXNwaW5fdW5sb2NrX2JoKCZ0b2RvX2xvY2spOwotCX0KIAogCWlmIChyZXQgJiYgcmV0ICE9IC1FTk9TUEMgJiYgcmV0ICE9IC1FT1BOT1RTVVBQKQogCQlwcmludGsoS0VSTl9FUlIgIm1hYzgwMjExLSVzOiBmYWlsZWQgdG8gc2V0IGtleSAiCkBAIC0xNjEsMTggKzk5LDE1IEBACiAJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKIAlpbnQgcmV0OwogCi0JYXNzZXJ0X2tleV9sb2NrKCk7CiAJbWlnaHRfc2xlZXAoKTsKIAogCWlmICgha2V5IHx8ICFrZXktPmxvY2FsLT5vcHMtPnNldF9rZXkpCiAJCXJldHVybjsKIAotCXNwaW5fbG9ja19iaCgmdG9kb19sb2NrKTsKLQlpZiAoIShrZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZ0b2RvX2xvY2spOworCWFzc2VydF9rZXlfbG9jayhrZXktPmxvY2FsKTsKKworCWlmICghKGtleS0+ZmxhZ3MgJiBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRSkpCiAJCXJldHVybjsKLQl9Ci0Jc3Bpbl91bmxvY2tfYmgoJnRvZG9fbG9jayk7CiAKIAlzdGEgPSBnZXRfc3RhX2Zvcl9rZXkoa2V5KTsKIAlzZGF0YSA9IGtleS0+c2RhdGE7CkBAIC0xOTEsOSArMTI2LDcgQEAKIAkJICAgICAgIHdpcGh5X25hbWUoa2V5LT5sb2NhbC0+aHcud2lwaHkpLAogCQkgICAgICAga2V5LT5jb25mLmtleWlkeCwgc3RhID8gc3RhLT5hZGRyIDogYmNhc3RfYWRkciwgcmV0KTsKIAotCXNwaW5fbG9ja19iaCgmdG9kb19sb2NrKTsKIAlrZXktPmZsYWdzICY9IH5LRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRTsKLQlzcGluX3VubG9ja19iaCgmdG9kb19sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgX19pZWVlODAyMTFfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLApAQCAtMjAxLDIyICsxMzQsMjQgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5ID0gTlVMTDsKIAorCWFzc2VydF9rZXlfbG9jayhzZGF0YS0+bG9jYWwpOworCiAJaWYgKGlkeCA+PSAwICYmIGlkeCA8IE5VTV9ERUZBVUxUX0tFWVMpCiAJCWtleSA9IHNkYXRhLT5rZXlzW2lkeF07CiAKIAlyY3VfYXNzaWduX3BvaW50ZXIoc2RhdGEtPmRlZmF1bHRfa2V5LCBrZXkpOwogCi0JaWYgKGtleSkKLQkJYWRkX3RvZG8oa2V5LCBLRVlfRkxBR19UT0RPX0RFRktFWSk7CisJaWYgKGtleSkgeworCQlpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX2RlZmF1bHQoa2V5LT5zZGF0YSk7CisJCWllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9hZGRfZGVmYXVsdChrZXktPnNkYXRhKTsKKwl9CiB9CiAKIHZvaWQgaWVlZTgwMjExX3NldF9kZWZhdWx0X2tleShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgaW50IGlkeCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNkYXRhLT5sb2NhbC0+a2V5X2xvY2ssIGZsYWdzKTsKKwltdXRleF9sb2NrKCZzZGF0YS0+bG9jYWwtPmtleV9tdHgpOwogCV9faWVlZTgwMjExX3NldF9kZWZhdWx0X2tleShzZGF0YSwgaWR4KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGF0YS0+bG9jYWwtPmtleV9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZzZGF0YS0+bG9jYWwtPmtleV9tdHgpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjI0LDI0ICsxNTksMjYgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5ID0gTlVMTDsKIAorCWFzc2VydF9rZXlfbG9jayhzZGF0YS0+bG9jYWwpOworCiAJaWYgKGlkeCA+PSBOVU1fREVGQVVMVF9LRVlTICYmCiAJICAgIGlkeCA8IE5VTV9ERUZBVUxUX0tFWVMgKyBOVU1fREVGQVVMVF9NR01UX0tFWVMpCiAJCWtleSA9IHNkYXRhLT5rZXlzW2lkeF07CiAKIAlyY3VfYXNzaWduX3BvaW50ZXIoc2RhdGEtPmRlZmF1bHRfbWdtdF9rZXksIGtleSk7CiAKLQlpZiAoa2V5KQotCQlhZGRfdG9kbyhrZXksIEtFWV9GTEFHX1RPRE9fREVGTUdNVEtFWSk7CisJaWYgKGtleSkgeworCQlpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX21nbXRfZGVmYXVsdChrZXktPnNkYXRhKTsKKwkJaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZF9tZ210X2RlZmF1bHQoa2V5LT5zZGF0YSk7CisJfQogfQogCiB2b2lkIGllZWU4MDIxMV9zZXRfZGVmYXVsdF9tZ210X2tleShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgICAgaW50IGlkeCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNkYXRhLT5sb2NhbC0+a2V5X2xvY2ssIGZsYWdzKTsKKwltdXRleF9sb2NrKCZzZGF0YS0+bG9jYWwtPmtleV9tdHgpOwogCV9faWVlZTgwMjExX3NldF9kZWZhdWx0X21nbXRfa2V5KHNkYXRhLCBpZHgpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkYXRhLT5sb2NhbC0+a2V5X2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJnNkYXRhLT5sb2NhbC0+a2V5X210eCk7CiB9CiAKIApAQCAtMzM2LDcgKzI3Myw3IEBACiAJCWtleS0+Y29uZi5pdl9sZW4gPSBDQ01QX0hEUl9MRU47CiAJCWtleS0+Y29uZi5pY3ZfbGVuID0gQ0NNUF9NSUNfTEVOOwogCQlpZiAoc2VxKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1JYX0RBVEFfUVVFVUVTOyBpKyspCisJCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1JYX0RBVEFfUVVFVUVTICsgMTsgaSsrKQogCQkJCWZvciAoaiA9IDA7IGogPCBDQ01QX1BOX0xFTjsgaisrKQogCQkJCQlrZXktPnUuY2NtcC5yeF9wbltpXVtqXSA9CiAJCQkJCQlzZXFbQ0NNUF9QTl9MRU4gLSBqIC0gMV07CkBAIC0zNTIsNyArMjg5LDYgQEAKIAl9CiAJbWVtY3B5KGtleS0+Y29uZi5rZXksIGtleV9kYXRhLCBrZXlfbGVuKTsKIAlJTklUX0xJU1RfSEVBRCgma2V5LT5saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgma2V5LT50b2RvKTsKIAogCWlmIChhbGcgPT0gQUxHX0NDTVApIHsKIAkJLyoKQEAgLTM4MiwxMiArMzE4LDI5IEBACiAJcmV0dXJuIGtleTsKIH0KIAorc3RhdGljIHZvaWQgX19pZWVlODAyMTFfa2V5X2Rlc3Ryb3koc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSkKK3sKKwlpZiAoIWtleSkKKwkJcmV0dXJuOworCisJaWYgKGtleS0+bG9jYWwpCisJCWllZWU4MDIxMV9rZXlfZGlzYWJsZV9od19hY2NlbChrZXkpOworCisJaWYgKGtleS0+Y29uZi5hbGcgPT0gQUxHX0NDTVApCisJCWllZWU4MDIxMV9hZXNfa2V5X2ZyZWUoa2V5LT51LmNjbXAudGZtKTsKKwlpZiAoa2V5LT5jb25mLmFsZyA9PSBBTEdfQUVTX0NNQUMpCisJCWllZWU4MDIxMV9hZXNfY21hY19rZXlfZnJlZShrZXktPnUuYWVzX2NtYWMudGZtKTsKKwlpZiAoa2V5LT5sb2NhbCkKKwkJaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZShrZXkpOworCisJa2ZyZWUoa2V5KTsKK30KKwogdm9pZCBpZWVlODAyMTFfa2V5X2xpbmsoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwKIAkJCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJc3RydWN0IHN0YV9pbmZvICpzdGEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9rZXkgKm9sZF9rZXk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaWR4OwogCiAJQlVHX09OKCFzZGF0YSk7CkBAIC00MzEsNyArMzg0LDcgQEAKIAkJfQogCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZzZGF0YS0+bG9jYWwtPmtleV9sb2NrLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmc2RhdGEtPmxvY2FsLT5rZXlfbXR4KTsKIAogCWlmIChzdGEpCiAJCW9sZF9rZXkgPSBzdGEtPmtleTsKQEAgLTQzOSwxNSArMzkyLDEzIEBACiAJCW9sZF9rZXkgPSBzZGF0YS0+a2V5c1tpZHhdOwogCiAJX19pZWVlODAyMTFfa2V5X3JlcGxhY2Uoc2RhdGEsIHN0YSwgb2xkX2tleSwga2V5KTsKKwlfX2llZWU4MDIxMV9rZXlfZGVzdHJveShvbGRfa2V5KTsKIAotCS8qIGZyZWUgb2xkIGtleSBsYXRlciAqLwotCWFkZF90b2RvKG9sZF9rZXksIEtFWV9GTEFHX1RPRE9fREVMRVRFKTsKKwlpZWVlODAyMTFfZGVidWdmc19rZXlfYWRkKGtleSk7CiAKLQlhZGRfdG9kbyhrZXksIEtFWV9GTEFHX1RPRE9fQUREX0RFQlVHRlMpOwotCWlmIChpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCi0JCWFkZF90b2RvKGtleSwgS0VZX0ZMQUdfVE9ET19IV0FDQ0VMX0FERCk7CisJaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoa2V5KTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkYXRhLT5sb2NhbC0+a2V5X2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJnNkYXRhLT5sb2NhbC0+a2V5X210eCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX2tleV9mcmVlKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpCkBAIC00NTgsMTcwICs0MDksNjIgQEAKIAlpZiAoa2V5LT5zZGF0YSkKIAkJX19pZWVlODAyMTFfa2V5X3JlcGxhY2Uoa2V5LT5zZGF0YSwga2V5LT5zdGEsCiAJCQkJCWtleSwgTlVMTCk7Ci0KLQlhZGRfdG9kbyhrZXksIEtFWV9GTEFHX1RPRE9fREVMRVRFKTsKKwlfX2llZWU4MDIxMV9rZXlfZGVzdHJveShrZXkpOwogfQogCi12b2lkIGllZWU4MDIxMV9rZXlfZnJlZShzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KQordm9pZCBpZWVlODAyMTFfa2V5X2ZyZWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KIAlpZiAoIWtleSkKIAkJcmV0dXJuOwogCi0JaWYgKCFrZXktPnNkYXRhKSB7Ci0JCS8qIFRoZSBrZXkgaGFzIG5vdCBiZWVuIGxpbmtlZCB5ZXQsIHNpbXBseSBmcmVlIGl0Ci0JCSAqIGFuZCBkb24ndCBPb3BzICovCi0JCWlmIChrZXktPmNvbmYuYWxnID09IEFMR19DQ01QKQotCQkJaWVlZTgwMjExX2Flc19rZXlfZnJlZShrZXktPnUuY2NtcC50Zm0pOwotCQlrZnJlZShrZXkpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmtleS0+c2RhdGEtPmxvY2FsLT5rZXlfbG9jaywgZmxhZ3MpOworCW11dGV4X2xvY2soJmxvY2FsLT5rZXlfbXR4KTsKIAlfX2llZWU4MDIxMV9rZXlfZnJlZShrZXkpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmtleS0+c2RhdGEtPmxvY2FsLT5rZXlfbG9jaywgZmxhZ3MpOwotfQotCi0vKgotICogVG8gYmUgc2FmZSBhZ2FpbnN0IGNvbmN1cnJlbnQgbWFuaXB1bGF0aW9ucyBvZiB0aGUgbGlzdCAod2hpY2ggc2hvdWxkbid0Ci0gKiBhY3R1YWxseSBoYXBwZW4pIHdlIG5lZWQgdG8gaG9sZCB0aGUgc3BpbmxvY2suIEJ1dCB1bmRlciB0aGUgc3BpbmxvY2sgd2UKLSAqIGNhbid0IGFjdHVhbGx5IGRvIG11Y2gsIHNvIHdlIGRlZmVyIHByb2Nlc3NpbmcgdG8gdGhlIHRvZG8gbGlzdC4gVGhlbiBydW4KLSAqIHRoZSB0b2RvIGxpc3QgdG8gYmUgc3VyZSB0aGUgb3BlcmF0aW9uIGFuZCBwb3NzaWJseSBwcmV2aW91c2x5IHBlbmRpbmcKLSAqIG9wZXJhdGlvbnMgYXJlIGNvbXBsZXRlZC4KLSAqLwotc3RhdGljIHZvaWQgaWVlZTgwMjExX3RvZG9fZm9yX2VhY2hfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQl1MzIgdG9kb19mbGFncykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQltaWdodF9zbGVlcCgpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNkYXRhLT5sb2NhbC0+a2V5X2xvY2ssIGZsYWdzKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGtleSwgJnNkYXRhLT5rZXlfbGlzdCwgbGlzdCkKLQkJYWRkX3RvZG8oa2V5LCB0b2RvX2ZsYWdzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGF0YS0+bG9jYWwtPmtleV9sb2NrLCBmbGFncyk7Ci0KLQlpZWVlODAyMTFfa2V5X3RvZG8oKTsKKwltdXRleF91bmxvY2soJmxvY2FsLT5rZXlfbXR4KTsKIH0KIAogdm9pZCBpZWVlODAyMTFfZW5hYmxlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CisJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleTsKKwogCUFTU0VSVF9SVE5MKCk7CiAKIAlpZiAoV0FSTl9PTighaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKSkKIAkJcmV0dXJuOwogCi0JaWVlZTgwMjExX3RvZG9fZm9yX2VhY2hfa2V5KHNkYXRhLCBLRVlfRkxBR19UT0RPX0hXQUNDRUxfQUREKTsKKwltdXRleF9sb2NrKCZzZGF0YS0+bG9jYWwtPmtleV9tdHgpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShrZXksICZzZGF0YS0+a2V5X2xpc3QsIGxpc3QpCisJCWllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSk7CisKKwltdXRleF91bmxvY2soJnNkYXRhLT5sb2NhbC0+a2V5X210eCk7CiB9CiAKIHZvaWQgaWVlZTgwMjExX2Rpc2FibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5OworCiAJQVNTRVJUX1JUTkwoKTsKIAotCWllZWU4MDIxMV90b2RvX2Zvcl9lYWNoX2tleShzZGF0YSwgS0VZX0ZMQUdfVE9ET19IV0FDQ0VMX1JFTU9WRSk7Ci19CisJbXV0ZXhfbG9jaygmc2RhdGEtPmxvY2FsLT5rZXlfbXR4KTsKIAotc3RhdGljIHZvaWQgX19pZWVlODAyMTFfa2V5X2Rlc3Ryb3koc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSkKLXsKLQlpZiAoIWtleSkKLQkJcmV0dXJuOworCWxpc3RfZm9yX2VhY2hfZW50cnkoa2V5LCAmc2RhdGEtPmtleV9saXN0LCBsaXN0KQorCQlpZWVlODAyMTFfa2V5X2Rpc2FibGVfaHdfYWNjZWwoa2V5KTsKIAotCWllZWU4MDIxMV9rZXlfZGlzYWJsZV9od19hY2NlbChrZXkpOwotCi0JaWYgKGtleS0+Y29uZi5hbGcgPT0gQUxHX0NDTVApCi0JCWllZWU4MDIxMV9hZXNfa2V5X2ZyZWUoa2V5LT51LmNjbXAudGZtKTsKLQlpZiAoa2V5LT5jb25mLmFsZyA9PSBBTEdfQUVTX0NNQUMpCi0JCWllZWU4MDIxMV9hZXNfY21hY19rZXlfZnJlZShrZXktPnUuYWVzX2NtYWMudGZtKTsKLQlpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlKGtleSk7Ci0KLQlrZnJlZShrZXkpOwotfQotCi1zdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9rZXlfdG9kbyh2b2lkKQotewotCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXk7Ci0JYm9vbCB3b3JrX2RvbmU7Ci0JdTMyIHRvZG9mbGFnczsKLQotCS8qCi0JICogTkI6IHN0YV9pbmZvX2Rlc3Ryb3kgcmVsaWVzIG9uIHRoaXMhCi0JICovCi0Jc3luY2hyb25pemVfcmN1KCk7Ci0KLQlzcGluX2xvY2tfYmgoJnRvZG9fbG9jayk7Ci0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZ0b2RvX2xpc3QpKSB7Ci0JCWtleSA9IGxpc3RfZmlyc3RfZW50cnkoJnRvZG9fbGlzdCwgc3RydWN0IGllZWU4MDIxMV9rZXksIHRvZG8pOwotCQlsaXN0X2RlbF9pbml0KCZrZXktPnRvZG8pOwotCQl0b2RvZmxhZ3MgPSBrZXktPmZsYWdzICYgKEtFWV9GTEFHX1RPRE9fQUREX0RFQlVHRlMgfAotCQkJCQkgIEtFWV9GTEFHX1RPRE9fREVGS0VZIHwKLQkJCQkJICBLRVlfRkxBR19UT0RPX0RFRk1HTVRLRVkgfAotCQkJCQkgIEtFWV9GTEFHX1RPRE9fSFdBQ0NFTF9BREQgfAotCQkJCQkgIEtFWV9GTEFHX1RPRE9fSFdBQ0NFTF9SRU1PVkUgfAotCQkJCQkgIEtFWV9GTEFHX1RPRE9fREVMRVRFKTsKLQkJa2V5LT5mbGFncyAmPSB+dG9kb2ZsYWdzOwotCQlzcGluX3VubG9ja19iaCgmdG9kb19sb2NrKTsKLQotCQl3b3JrX2RvbmUgPSBmYWxzZTsKLQotCQlpZiAodG9kb2ZsYWdzICYgS0VZX0ZMQUdfVE9ET19BRERfREVCVUdGUykgewotCQkJaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZChrZXkpOwotCQkJd29ya19kb25lID0gdHJ1ZTsKLQkJfQotCQlpZiAodG9kb2ZsYWdzICYgS0VZX0ZMQUdfVE9ET19ERUZLRVkpIHsKLQkJCWllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmVfZGVmYXVsdChrZXktPnNkYXRhKTsKLQkJCWllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9hZGRfZGVmYXVsdChrZXktPnNkYXRhKTsKLQkJCXdvcmtfZG9uZSA9IHRydWU7Ci0JCX0KLQkJaWYgKHRvZG9mbGFncyAmIEtFWV9GTEFHX1RPRE9fREVGTUdNVEtFWSkgewotCQkJaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9tZ210X2RlZmF1bHQoa2V5LT5zZGF0YSk7Ci0JCQlpZWVlODAyMTFfZGVidWdmc19rZXlfYWRkX21nbXRfZGVmYXVsdChrZXktPnNkYXRhKTsKLQkJCXdvcmtfZG9uZSA9IHRydWU7Ci0JCX0KLQkJaWYgKHRvZG9mbGFncyAmIEtFWV9GTEFHX1RPRE9fSFdBQ0NFTF9BREQpIHsKLQkJCWllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSk7Ci0JCQl3b3JrX2RvbmUgPSB0cnVlOwotCQl9Ci0JCWlmICh0b2RvZmxhZ3MgJiBLRVlfRkxBR19UT0RPX0hXQUNDRUxfUkVNT1ZFKSB7Ci0JCQlpZWVlODAyMTFfa2V5X2Rpc2FibGVfaHdfYWNjZWwoa2V5KTsKLQkJCXdvcmtfZG9uZSA9IHRydWU7Ci0JCX0KLQkJaWYgKHRvZG9mbGFncyAmIEtFWV9GTEFHX1RPRE9fREVMRVRFKSB7Ci0JCQlfX2llZWU4MDIxMV9rZXlfZGVzdHJveShrZXkpOwotCQkJd29ya19kb25lID0gdHJ1ZTsKLQkJfQotCi0JCVdBUk5fT04oIXdvcmtfZG9uZSk7Ci0KLQkJc3Bpbl9sb2NrX2JoKCZ0b2RvX2xvY2spOwotCX0KLQlzcGluX3VubG9ja19iaCgmdG9kb19sb2NrKTsKLX0KLQotdm9pZCBpZWVlODAyMTFfa2V5X3RvZG8odm9pZCkKLXsKLQlpZWVlODAyMTFfa2V5X2xvY2soKTsKLQlfX2llZWU4MDIxMV9rZXlfdG9kbygpOwotCWllZWU4MDIxMV9rZXlfdW5sb2NrKCk7CisJbXV0ZXhfdW5sb2NrKCZzZGF0YS0+bG9jYWwtPmtleV9tdHgpOwogfQogCiB2b2lkIGllZWU4MDIxMV9mcmVlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwgKnRtcDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWVlZTgwMjExX2tleV9sb2NrKCk7CisJbXV0ZXhfbG9jaygmc2RhdGEtPmxvY2FsLT5rZXlfbXR4KTsKIAogCWllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmVfZGVmYXVsdChzZGF0YSk7CiAJaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9tZ210X2RlZmF1bHQoc2RhdGEpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNkYXRhLT5sb2NhbC0+a2V5X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoa2V5LCB0bXAsICZzZGF0YS0+a2V5X2xpc3QsIGxpc3QpCiAJCV9faWVlZTgwMjExX2tleV9mcmVlKGtleSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RhdGEtPmxvY2FsLT5rZXlfbG9jaywgZmxhZ3MpOwogCi0JX19pZWVlODAyMTFfa2V5X3RvZG8oKTsKLQotCWllZWU4MDIxMV9rZXlfdW5sb2NrKCk7CisJbXV0ZXhfdW5sb2NrKCZzZGF0YS0+bG9jYWwtPmtleV9tdHgpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5oIGIvbmV0L21hYzgwMjExL2tleS5oCmluZGV4IGJkYzI5NjguLmI2NjViYmIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9rZXkuaAorKysgYi9uZXQvbWFjODAyMTEva2V5LmgKQEAgLTM4LDI1ICszOCw5IEBACiAgKgogICogQEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFOiBJbmRpY2F0ZXMgdGhhdCB0aGlzIGtleSBpcyBwcmVzZW50CiAgKglpbiB0aGUgaGFyZHdhcmUgZm9yIFRYIGNyeXB0byBoYXJkd2FyZSBhY2NlbGVyYXRpb24uCi0gKiBAS0VZX0ZMQUdfVE9ET19ERUxFVEU6IEtleSBpcyBtYXJrZWQgZm9yIGRlbGV0aW9uIGFuZCB3aWxsLCBhZnRlciBhbgotICoJUkNVIGdyYWNlIHBlcmlvZCwgbm8gbG9uZ2VyIGJlIHJlYWNoYWJsZSBvdGhlciB0aGFuIGZyb20gdGhlCi0gKgl0b2RvIGxpc3QuCi0gKiBAS0VZX0ZMQUdfVE9ET19IV0FDQ0VMX0FERDogS2V5IG5lZWRzIHRvIGJlIGFkZGVkIHRvIGhhcmR3YXJlIGFjY2VsZXJhdGlvbi4KLSAqIEBLRVlfRkxBR19UT0RPX0hXQUNDRUxfUkVNT1ZFOiBLZXkgbmVlZHMgdG8gYmUgcmVtb3ZlZCBmcm9tIGhhcmR3YXJlCi0gKglhY2NlbGVyYXRpb24uCi0gKiBAS0VZX0ZMQUdfVE9ET19ERUZLRVk6IEtleSBpcyBkZWZhdWx0IGtleSBhbmQgZGVidWdmcyBuZWVkcyB0byBiZSB1cGRhdGVkLgotICogQEtFWV9GTEFHX1RPRE9fQUREX0RFQlVHRlM6IEtleSBuZWVkcyB0byBiZSBhZGRlZCB0byBkZWJ1Z2ZzLgotICogQEtFWV9GTEFHX1RPRE9fREVGTUdNVEtFWTogS2V5IGlzIGRlZmF1bHQgbWFuYWdlbWVudCBrZXkgYW5kIGRlYnVnZnMgbmVlZHMKLSAqCXRvIGJlIHVwZGF0ZWQuCiAgKi8KIGVudW0gaWVlZTgwMjExX2ludGVybmFsX2tleV9mbGFncyB7CiAJS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUJPSBCSVQoMCksCi0JS0VZX0ZMQUdfVE9ET19ERUxFVEUJCT0gQklUKDEpLAotCUtFWV9GTEFHX1RPRE9fSFdBQ0NFTF9BREQJPSBCSVQoMiksCi0JS0VZX0ZMQUdfVE9ET19IV0FDQ0VMX1JFTU9WRQk9IEJJVCgzKSwKLQlLRVlfRkxBR19UT0RPX0RFRktFWQkJPSBCSVQoNCksCi0JS0VZX0ZMQUdfVE9ET19BRERfREVCVUdGUwk9IEJJVCg1KSwKLQlLRVlfRkxBR19UT0RPX0RFRk1HTVRLRVkJPSBCSVQoNiksCiB9OwogCiBlbnVtIGllZWU4MDIxMV9pbnRlcm5hbF90a2lwX3N0YXRlIHsKQEAgLTc5LDEwICs2Myw4IEBACiAKIAkvKiBmb3Igc2RhdGEgbGlzdCAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQkvKiBmb3IgdG9kbyBsaXN0ICovCi0Jc3RydWN0IGxpc3RfaGVhZCB0b2RvOwogCi0JLyogcHJvdGVjdGVkIGJ5IHRvZG8gbG9jayEgKi8KKwkvKiBwcm90ZWN0ZWQgYnkga2V5IG11dGV4ICovCiAJdW5zaWduZWQgaW50IGZsYWdzOwogCiAJdW5pb24gewpAQCAtOTUsNyArNzcsMTMgQEAKIAkJfSB0a2lwOwogCQlzdHJ1Y3QgewogCQkJdTggdHhfcG5bNl07Ci0JCQl1OCByeF9wbltOVU1fUlhfREFUQV9RVUVVRVNdWzZdOworCQkJLyoKKwkJCSAqIExhc3QgcmVjZWl2ZWQgcGFja2V0IG51bWJlci4gVGhlIGZpcnN0CisJCQkgKiBOVU1fUlhfREFUQV9RVUVVRVMgY291bnRlcnMgYXJlIHVzZWQgd2l0aCBEYXRhCisJCQkgKiBmcmFtZXMgYW5kIHRoZSBsYXN0IGNvdW50ZXIgaXMgdXNlZCB3aXRoIFJvYnVzdAorCQkJICogTWFuYWdlbWVudCBmcmFtZXMuCisJCQkgKi8KKwkJCXU4IHJ4X3BuW05VTV9SWF9EQVRBX1FVRVVFUyArIDFdWzZdOwogCQkJc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbTsKIAkJCXUzMiByZXBsYXlzOyAvKiBkb3QxMVJTTkFTdGF0c0NDTVBSZXBsYXlzICovCiAJCQkvKiBzY3JhdGNoIGJ1ZmZlcnMgZm9yIHZpcnRfdG9fcGFnZSgpIChjcnlwdG8gQVBJKSAqLwpAQCAtMTQ3LDcgKzEzNSw4IEBACiB2b2lkIGllZWU4MDIxMV9rZXlfbGluayhzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5LAogCQkJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7Ci12b2lkIGllZWU4MDIxMV9rZXlfZnJlZShzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KTsKK3ZvaWQgaWVlZTgwMjExX2tleV9mcmVlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSk7CiB2b2lkIGllZWU4MDIxMV9zZXRfZGVmYXVsdF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGludCBpZHgpOwogdm9pZCBpZWVlODAyMTFfc2V0X2RlZmF1bHRfbWdtdF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJICAgIGludCBpZHgpOwpAQCAtMTU1LDYgKzE0NCw0IEBACiB2b2lkIGllZWU4MDIxMV9lbmFibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiB2b2lkIGllZWU4MDIxMV9kaXNhYmxlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogCi12b2lkIGllZWU4MDIxMV9rZXlfdG9kbyh2b2lkKTsKLQogI2VuZGlmIC8qIElFRUU4MDIxMV9LRVlfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21haW4uYyBiL25ldC9tYWM4MDIxMS9tYWluLmMKaW5kZXggMjJhMzg0ZC4uN2NjNGY5MSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21haW4uYworKysgYi9uZXQvbWFjODAyMTEvbWFpbi5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcG1fcW9zX3BhcmFtcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgogCkBAIC0xMDYsMTIgKzEwNywxNSBAQAogCWlmIChzY2FuX2NoYW4pIHsKIAkJY2hhbiA9IHNjYW5fY2hhbjsKIAkJY2hhbm5lbF90eXBlID0gTkw4MDIxMV9DSEFOX05PX0hUOworCQlsb2NhbC0+aHcuY29uZi5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9PRkZDSEFOTkVMOwogCX0gZWxzZSBpZiAobG9jYWwtPnRtcF9jaGFubmVsKSB7CiAJCWNoYW4gPSBzY2FuX2NoYW4gPSBsb2NhbC0+dG1wX2NoYW5uZWw7CiAJCWNoYW5uZWxfdHlwZSA9IGxvY2FsLT50bXBfY2hhbm5lbF90eXBlOworCQlsb2NhbC0+aHcuY29uZi5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9PRkZDSEFOTkVMOwogCX0gZWxzZSB7CiAJCWNoYW4gPSBsb2NhbC0+b3Blcl9jaGFubmVsOwogCQljaGFubmVsX3R5cGUgPSBsb2NhbC0+X29wZXJfY2hhbm5lbF90eXBlOworCQlsb2NhbC0+aHcuY29uZi5mbGFncyAmPSB+SUVFRTgwMjExX0NPTkZfT0ZGQ0hBTk5FTDsKIAl9CiAKIAlpZiAoY2hhbiAhPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsIHx8CkBAIC0yNTksNyArMjYzLDYgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICopIGRhdGE7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqcmFfdGlkOwogCiAJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmbG9jYWwtPnNrYl9xdWV1ZSkpIHx8CiAJICAgICAgIChza2IgPSBza2JfZGVxdWV1ZSgmbG9jYWwtPnNrYl9xdWV1ZV91bnJlbGlhYmxlKSkpIHsKQEAgLTI3NCwxOCArMjc3LDYgQEAKIAkJCXNrYi0+cGt0X3R5cGUgPSAwOwogCQkJaWVlZTgwMjExX3R4X3N0YXR1cyhsb2NhbF90b19odyhsb2NhbCksIHNrYik7CiAJCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFfREVMQkFfTVNHOgotCQkJcmFfdGlkID0gKHN0cnVjdCBpZWVlODAyMTFfcmFfdGlkICopICZza2ItPmNiOwotCQkJaWVlZTgwMjExX3N0b3BfdHhfYmFfY2IocmFfdGlkLT52aWYsIHJhX3RpZC0+cmEsCi0JCQkJCQlyYV90aWQtPnRpZCk7Ci0JCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFfQUREQkFfTVNHOgotCQkJcmFfdGlkID0gKHN0cnVjdCBpZWVlODAyMTFfcmFfdGlkICopICZza2ItPmNiOwotCQkJaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiKHJhX3RpZC0+dmlmLCByYV90aWQtPnJhLAotCQkJCQkJIHJhX3RpZC0+dGlkKTsKLQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCWJyZWFrIDsKIAkJZGVmYXVsdDoKIAkJCVdBUk4oMSwgIm1hYzgwMjExOiBQYWNrZXQgaXMgb2YgdW5rbm93biB0eXBlICVkXG4iLAogCQkJICAgICBza2ItPnBrdF90eXBlKTsKQEAgLTMyOSw2ICszMjAsNzYgQEAKIAltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKIH0KIAorI2lmZGVmIENPTkZJR19JTkVUCitzdGF0aWMgaW50IGllZWU4MDIxMV9pZmFfY2hhbmdlZChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJCSB1bnNpZ25lZCBsb25nIGRhdGEsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgaW5faWZhZGRyICppZmEgPSBhcmc7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPQorCQljb250YWluZXJfb2YobmIsIHN0cnVjdCBpZWVlODAyMTFfbG9jYWwsCisJCQkgICAgIGlmYV9ub3RpZmllcik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBpZmEtPmlmYV9kZXYtPmRldjsKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gbmRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgaW5fZGV2aWNlICppZGV2OworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2Q7CisJaW50IGMgPSAwOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKG5kZXYpKQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisKKwkvKiBNYWtlIHN1cmUgaXQncyBvdXIgaW50ZXJmYWNlIHRoYXQgZ290IGNoYW5nZWQgKi8KKwlpZiAoIXdkZXYpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCWlmICh3ZGV2LT53aXBoeSAhPSBsb2NhbC0+aHcud2lwaHkpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYobmRldik7CisJYnNzX2NvbmYgPSAmc2RhdGEtPnZpZi5ic3NfY29uZjsKKworCS8qIEFSUCBmaWx0ZXJpbmcgaXMgb25seSBzdXBwb3J0ZWQgaW4gbWFuYWdlZCBtb2RlICovCisJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisKKwlpZGV2ID0gc2RhdGEtPmRldi0+aXBfcHRyOworCWlmICghaWRldikKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCisJaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCW11dGV4X2xvY2soJmlmbWdkLT5tdHgpOworCisJLyogQ29weSB0aGUgYWRkcmVzc2VzIHRvIHRoZSBic3NfY29uZiBsaXN0ICovCisJaWZhID0gaWRldi0+aWZhX2xpc3Q7CisJd2hpbGUgKGMgPCBJRUVFODAyMTFfQlNTX0FSUF9BRERSX0xJU1RfTEVOICYmIGlmYSkgeworCQlic3NfY29uZi0+YXJwX2FkZHJfbGlzdFtjXSA9IGlmYS0+aWZhX2FkZHJlc3M7CisJCWlmYSA9IGlmYS0+aWZhX25leHQ7CisJCWMrKzsKKwl9CisKKwkvKiBJZiBub3QgYWxsIGFkZHJlc3NlcyBmaXQgdGhlIGxpc3QsIGRpc2FibGUgZmlsdGVyaW5nICovCisJaWYgKGlmYSkgeworCQlzZGF0YS0+YXJwX2ZpbHRlcl9zdGF0ZSA9IGZhbHNlOworCQljID0gMDsKKwl9IGVsc2UgeworCQlzZGF0YS0+YXJwX2ZpbHRlcl9zdGF0ZSA9IHRydWU7CisJfQorCWJzc19jb25mLT5hcnBfYWRkcl9jbnQgPSBjOworCisJLyogQ29uZmlndXJlIGRyaXZlciBvbmx5IGlmIGFzc29jaWF0ZWQgKi8KKwlpZiAoaWZtZ2QtPmFzc29jaWF0ZWQpIHsKKwkJYnNzX2NvbmYtPmFycF9maWx0ZXJfZW5hYmxlZCA9IHNkYXRhLT5hcnBfZmlsdGVyX3N0YXRlOworCQlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwKKwkJCQkJCSBCU1NfQ0hBTkdFRF9BUlBfRklMVEVSKTsKKwl9CisKKwltdXRleF91bmxvY2soJmlmbWdkLT5tdHgpOworCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorI2VuZGlmCisKIHN0cnVjdCBpZWVlODAyMTFfaHcgKmllZWU4MDIxMV9hbGxvY19odyhzaXplX3QgcHJpdl9kYXRhX2xlbiwKIAkJCQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgKm9wcykKIHsKQEAgLTM5Niw3ICs0NTcsNyBAQAogCW11dGV4X2luaXQoJmxvY2FsLT5pZmxpc3RfbXR4KTsKIAltdXRleF9pbml0KCZsb2NhbC0+c2Nhbl9tdHgpOwogCi0Jc3Bpbl9sb2NrX2luaXQoJmxvY2FsLT5rZXlfbG9jayk7CisJbXV0ZXhfaW5pdCgmbG9jYWwtPmtleV9tdHgpOwogCXNwaW5fbG9ja19pbml0KCZsb2NhbC0+ZmlsdGVyX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jayk7CiAKQEAgLTQxOSw4ICs0ODAsMTAgQEAKIAogCXN0YV9pbmZvX2luaXQobG9jYWwpOwogCi0JZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9NQVhfUVVFVUVTOyBpKyspCisJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9NQVhfUVVFVUVTOyBpKyspIHsKIAkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbG9jYWwtPnBlbmRpbmdbaV0pOworCQlhdG9taWNfc2V0KCZsb2NhbC0+YWdnX3F1ZXVlX3N0b3BbaV0sIDApOworCX0KIAl0YXNrbGV0X2luaXQoJmxvY2FsLT50eF9wZW5kaW5nX3Rhc2tsZXQsIGllZWU4MDIxMV90eF9wZW5kaW5nLAogCQkgICAgICh1bnNpZ25lZCBsb25nKWxvY2FsKTsKIApAQCAtNDMxLDggKzQ5NCw2IEBACiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbG9jYWwtPnNrYl9xdWV1ZSk7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbG9jYWwtPnNrYl9xdWV1ZV91bnJlbGlhYmxlKTsKIAotCXNwaW5fbG9ja19pbml0KCZsb2NhbC0+YW1wZHVfbG9jayk7Ci0KIAlyZXR1cm4gbG9jYWxfdG9faHcobG9jYWwpOwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfYWxsb2NfaHcpOwpAQCAtNTcyLDE4ICs2MzMsMTYgQEAKIAogCWxvY2FsLT5ody5jb25mLmxpc3Rlbl9pbnRlcnZhbCA9IGxvY2FsLT5ody5tYXhfbGlzdGVuX2ludGVydmFsOwogCi0JbG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc19mb3JjZWRfdGltZW91dCA9IC0xOworCWxvY2FsLT5keW5hbWljX3BzX2ZvcmNlZF90aW1lb3V0ID0gLTE7CiAKIAlyZXN1bHQgPSBzdGFfaW5mb19zdGFydChsb2NhbCk7CiAJaWYgKHJlc3VsdCA8IDApCiAJCWdvdG8gZmFpbF9zdGFfaW5mbzsKIAogCXJlc3VsdCA9IGllZWU4MDIxMV93ZXBfaW5pdChsb2NhbCk7Ci0JaWYgKHJlc3VsdCA8IDApIHsKKwlpZiAocmVzdWx0IDwgMCkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBGYWlsZWQgdG8gaW5pdGlhbGl6ZSB3ZXA6ICVkXG4iLAogCQkgICAgICAgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpLCByZXN1bHQpOwotCQlnb3RvIGZhaWxfd2VwOwotCX0KIAogCXJ0bmxfbG9jaygpOwogCkBAIC02MTIsMjEgKzY3MSwzMCBAQAogCQlpZWVlODAyMTFfbWF4X25ldHdvcmtfbGF0ZW5jeTsKIAlyZXN1bHQgPSBwbV9xb3NfYWRkX25vdGlmaWVyKFBNX1FPU19ORVRXT1JLX0xBVEVOQ1ksCiAJCQkJICAgICAmbG9jYWwtPm5ldHdvcmtfbGF0ZW5jeV9ub3RpZmllcik7Ci0KIAlpZiAocmVzdWx0KSB7CiAJCXJ0bmxfbG9jaygpOwogCQlnb3RvIGZhaWxfcG1fcW9zOwogCX0KIAorI2lmZGVmIENPTkZJR19JTkVUCisJbG9jYWwtPmlmYV9ub3RpZmllci5ub3RpZmllcl9jYWxsID0gaWVlZTgwMjExX2lmYV9jaGFuZ2VkOworCXJlc3VsdCA9IHJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKCZsb2NhbC0+aWZhX25vdGlmaWVyKTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIGZhaWxfaWZhOworI2VuZGlmCisKIAlyZXR1cm4gMDsKIAorIGZhaWxfaWZhOgorCXBtX3Fvc19yZW1vdmVfbm90aWZpZXIoUE1fUU9TX05FVFdPUktfTEFURU5DWSwKKwkJCSAgICAgICAmbG9jYWwtPm5ldHdvcmtfbGF0ZW5jeV9ub3RpZmllcik7CisJcnRubF9sb2NrKCk7CiAgZmFpbF9wbV9xb3M6CiAJaWVlZTgwMjExX2xlZF9leGl0KGxvY2FsKTsKIAlpZWVlODAyMTFfcmVtb3ZlX2ludGVyZmFjZXMobG9jYWwpOwogIGZhaWxfcmF0ZToKIAlydG5sX3VubG9jaygpOwogCWllZWU4MDIxMV93ZXBfZnJlZShsb2NhbCk7Ci0gZmFpbF93ZXA6CiAJc3RhX2luZm9fc3RvcChsb2NhbCk7CiAgZmFpbF9zdGFfaW5mbzoKIAlkZXN0cm95X3dvcmtxdWV1ZShsb2NhbC0+d29ya3F1ZXVlKTsKQEAgLTY0Nyw2ICs3MTUsOSBAQAogCiAJcG1fcW9zX3JlbW92ZV9ub3RpZmllcihQTV9RT1NfTkVUV09SS19MQVRFTkNZLAogCQkJICAgICAgICZsb2NhbC0+bmV0d29ya19sYXRlbmN5X25vdGlmaWVyKTsKKyNpZmRlZiBDT05GSUdfSU5FVAorCXVucmVnaXN0ZXJfaW5ldGFkZHJfbm90aWZpZXIoJmxvY2FsLT5pZmFfbm90aWZpZXIpOworI2VuZGlmCiAKIAlydG5sX2xvY2soKTsKIApAQCAtNzA0LDYgKzc3NSwxMCBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwlyZXQgPSByYzgwMjExX21pbnN0cmVsX2h0X2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9taW5zdHJlbDsKKwogCXJldCA9IHJjODAyMTFfcGlkX2luaXQoKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9waWQ7CkBAIC03MTYsNiArNzkxLDggQEAKICBlcnJfbmV0ZGV2OgogCXJjODAyMTFfcGlkX2V4aXQoKTsKICBlcnJfcGlkOgorCXJjODAyMTFfbWluc3RyZWxfaHRfZXhpdCgpOworIGVycl9taW5zdHJlbDoKIAlyYzgwMjExX21pbnN0cmVsX2V4aXQoKTsKIAogCXJldHVybiByZXQ7CkBAIC03MjQsNiArODAxLDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpZWVlODAyMTFfZXhpdCh2b2lkKQogewogCXJjODAyMTFfcGlkX2V4aXQoKTsKKwlyYzgwMjExX21pbnN0cmVsX2h0X2V4aXQoKTsKIAlyYzgwMjExX21pbnN0cmVsX2V4aXQoKTsKIAogCS8qCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaC5jIGIvbmV0L21hYzgwMjExL21lc2guYwppbmRleCBiZGU4MTAzLi5jOGE0ZjE5IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWVzaC5jCisrKyBiL25ldC9tYWM4MDIxMS9tZXNoLmMKQEAgLTU0LDcgKzU0LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZpZm1zaC0+d29yayk7CisJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJnNkYXRhLT53b3JrKTsKIH0KIAogLyoqCkBAIC0zNDUsNyArMzQ1LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZpZm1zaC0+d29yayk7CisJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJnNkYXRhLT53b3JrKTsKIH0KIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX21lc2hfcGF0aF9yb290X3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKQEAgLTM2Miw3ICszNjIsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJmlmbXNoLT53b3JrKTsKKwlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmc2RhdGEtPndvcmspOwogfQogCiB2b2lkIGllZWU4MDIxMV9tZXNoX3Jvb3Rfc2V0dXAoc3RydWN0IGllZWU4MDIxMV9pZl9tZXNoICppZm1zaCkKQEAgLTQ4NCw5ICs0ODQsNiBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCAqaWZtc2ggPSAmc2RhdGEtPnUubWVzaDsKIAotCS8qIG1pZ2h0IHJlc3RhcnQgdGhlIHRpbWVyIGJ1dCB0aGF0IGRvZXNuJ3QgbWF0dGVyICovCi0JY2FuY2VsX3dvcmtfc3luYygmaWZtc2gtPndvcmspOwotCiAJLyogdXNlIGF0b21pYyBiaXRvcHMgaW4gY2FzZSBib3RoIHRpbWVycyBmaXJlIGF0IHRoZSBzYW1lIHRpbWUgKi8KIAogCWlmIChkZWxfdGltZXJfc3luYygmaWZtc2gtPmhvdXNla2VlcGluZ190aW1lcikpCkBAIC01MTgsNyArNTE1LDcgQEAKIAogCXNldF9iaXQoTUVTSF9XT1JLX0hPVVNFS0VFUElORywgJmlmbXNoLT53cmtxX2ZsYWdzKTsKIAlpZWVlODAyMTFfbWVzaF9yb290X3NldHVwKGlmbXNoKTsKLQlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmaWZtc2gtPndvcmspOworCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZzZGF0YS0+d29yayk7CiAJc2RhdGEtPnZpZi5ic3NfY29uZi5iZWFjb25faW50ID0gTUVTSF9ERUZBVUxUX0JFQUNPTl9JTlRFUlZBTDsKIAlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgQlNTX0NIQU5HRURfQkVBQ09OIHwKIAkJCQkJCUJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEIHwKQEAgLTUzNiwxNiArNTMzLDcgQEAKIAkgKiB3aGV0aGVyIHRoZSBpbnRlcmZhY2UgaXMgcnVubmluZywgd2hpY2gsIGF0IHRoaXMgcG9pbnQsCiAJICogaXQgbm8gbG9uZ2VyIGlzLgogCSAqLwotCWNhbmNlbF93b3JrX3N5bmMoJnNkYXRhLT51Lm1lc2gud29yayk7Ci0KLQkvKgotCSAqIFdoZW4gd2UgZ2V0IGhlcmUsIHRoZSBpbnRlcmZhY2UgaXMgbWFya2VkIGRvd24uCi0JICogQ2FsbCBzeW5jaHJvbml6ZV9yY3UoKSB0byB3YWl0IGZvciB0aGUgUlggcGF0aAotCSAqIHNob3VsZCBpdCBiZSB1c2luZyB0aGUgaW50ZXJmYWNlIGFuZCBlbnF1ZXVpbmcKLQkgKiBmcmFtZXMgYXQgdGhpcyB2ZXJ5IHRpbWUgb24gYW5vdGhlciBDUFUuCi0JICovCi0JcmN1X2JhcnJpZXIoKTsgLyogV2FpdCBmb3IgUlggcGF0aCBhbmQgY2FsbF9yY3UoKSdzICovCi0Jc2tiX3F1ZXVlX3B1cmdlKCZzZGF0YS0+dS5tZXNoLnNrYl9xdWV1ZSk7CisJY2FuY2VsX3dvcmtfc3luYygmc2RhdGEtPndvcmspOwogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfbWVzaF9yeF9iY25fcHJlc3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCkBAIC02MDgsOCArNTk2LDggQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9tZXNoX3J4X3F1ZXVlZF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpCit2b2lkIGllZWU4MDIxMV9tZXNoX3J4X3F1ZXVlZF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1czsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggKmlmbXNoOwpAQCAtNjMyLDI2ICs2MjAsMTEgQEAKIAkJaWVlZTgwMjExX21lc2hfcnhfbWdtdF9hY3Rpb24oc2RhdGEsIG1nbXQsIHNrYi0+bGVuLCByeF9zdGF0dXMpOwogCQlicmVhazsKIAl9Ci0KLQlrZnJlZV9za2Ioc2tiKTsKIH0KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX21lc2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit2b2lkIGllZWU4MDIxMV9tZXNoX3dvcmsoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwgdS5tZXNoLndvcmspOwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCAqaWZtc2ggPSAmc2RhdGEtPnUubWVzaDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0JaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCi0JCXJldHVybjsKLQotCWlmIChsb2NhbC0+c2Nhbm5pbmcpCi0JCXJldHVybjsKLQotCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmlmbXNoLT5za2JfcXVldWUpKSkKLQkJaWVlZTgwMjExX21lc2hfcnhfcXVldWVkX21nbXQoc2RhdGEsIHNrYik7CiAKIAlpZiAoaWZtc2gtPnByZXFfcXVldWVfbGVuICYmCiAJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywKQEAgLTY3OCw3ICs2NTEsNyBAQAogCXJjdV9yZWFkX2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KQogCQlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkKLQkJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZzZGF0YS0+dS5tZXNoLndvcmspOworCQkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJnNkYXRhLT53b3JrKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIApAQCAtNjg2LDExICs2NTksOSBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCAqaWZtc2ggPSAmc2RhdGEtPnUubWVzaDsKIAotCUlOSVRfV09SSygmaWZtc2gtPndvcmssIGllZWU4MDIxMV9tZXNoX3dvcmspOwogCXNldHVwX3RpbWVyKCZpZm1zaC0+aG91c2VrZWVwaW5nX3RpbWVyLAogCQkgICAgaWVlZTgwMjExX21lc2hfaG91c2VrZWVwaW5nX3RpbWVyLAogCQkgICAgKHVuc2lnbmVkIGxvbmcpIHNkYXRhKTsKLQlza2JfcXVldWVfaGVhZF9pbml0KCZzZGF0YS0+dS5tZXNoLnNrYl9xdWV1ZSk7CiAKIAlpZm1zaC0+bXNoY2ZnLmRvdDExTWVzaFJldHJ5VGltZW91dCA9IE1FU0hfUkVUX1Q7CiAJaWZtc2gtPm1zaGNmZy5kb3QxMU1lc2hDb25maXJtVGltZW91dCA9IE1FU0hfQ09ORl9UOwpAQCAtNzMxLDI5ICs3MDIsMyBAQAogCUlOSVRfTElTVF9IRUFEKCZpZm1zaC0+cHJlcV9xdWV1ZS5saXN0KTsKIAlzcGluX2xvY2tfaW5pdCgmaWZtc2gtPm1lc2hfcHJlcV9xdWV1ZV9sb2NrKTsKIH0KLQotaWVlZTgwMjExX3J4X3Jlc3VsdAotaWVlZTgwMjExX21lc2hfcnhfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggKmlmbXNoID0gJnNkYXRhLT51Lm1lc2g7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCXUxNiBmYzsKLQotCWlmIChza2ItPmxlbiA8IDI0KQotCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwotCi0JbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOwotCWZjID0gbGUxNl90b19jcHUobWdtdC0+ZnJhbWVfY29udHJvbCk7Ci0KLQlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9BQ1RJT046Ci0JY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046Ci0JCXNrYl9xdWV1ZV90YWlsKCZpZm1zaC0+c2tiX3F1ZXVlLCBza2IpOwotCQlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmaWZtc2gtPndvcmspOwotCQlyZXR1cm4gUlhfUVVFVUVEOwotCX0KLQotCXJldHVybiBSWF9DT05USU5VRTsKLX0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoLmggYi9uZXQvbWFjODAyMTEvbWVzaC5oCmluZGV4IGM4ODA4N2YuLmViZDNmMWQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoLmgKKysrIGIvbmV0L21hYzgwMjExL21lc2guaApAQCAtMjM3LDggKzIzNyw2IEBACiAJCXN0cnVjdCBzdGFfaW5mbyAqc3RhaW5mbywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIGllZWU4MDIxMXNfc3RvcCh2b2lkKTsKIHZvaWQgaWVlZTgwMjExX21lc2hfaW5pdF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7Ci1pZWVlODAyMTFfcnhfcmVzdWx0Ci1pZWVlODAyMTFfbWVzaF9yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHZvaWQgaWVlZTgwMjExX3N0YXJ0X21lc2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogdm9pZCBpZWVlODAyMTFfc3RvcF9tZXNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIHZvaWQgaWVlZTgwMjExX21lc2hfcm9vdF9zZXR1cChzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggKmlmbXNoKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYyBiL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYwppbmRleCAwNzA1MDE4Li44MjllMDhhIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWVzaF9od21wLmMKKysrIGIvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jCkBAIC04MDUsMTQgKzgwNSwxNCBAQAogCXNwaW5fdW5sb2NrKCZpZm1zaC0+bWVzaF9wcmVxX3F1ZXVlX2xvY2spOwogCiAJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgaWZtc2gtPmxhc3RfcHJlcSArIG1pbl9wcmVxX2ludF9qaWZmKHNkYXRhKSkpCi0JCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZzZGF0YS0+bG9jYWwtPmh3LCAmaWZtc2gtPndvcmspOworCQlpZWVlODAyMTFfcXVldWVfd29yaygmc2RhdGEtPmxvY2FsLT5odywgJnNkYXRhLT53b3JrKTsKIAogCWVsc2UgaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGlmbXNoLT5sYXN0X3ByZXEpKSB7CiAJCS8qIGF2b2lkIGxvbmcgd2FpdCBpZiBkaWQgbm90IHNlbmQgcHJlcXMgZm9yIGEgbG9uZyB0aW1lCiAJCSAqIGFuZCBqaWZmaWVzIHdyYXBwZWQgYXJvdW5kCiAJCSAqLwogCQlpZm1zaC0+bGFzdF9wcmVxID0gamlmZmllcyAtIG1pbl9wcmVxX2ludF9qaWZmKHNkYXRhKSAtIDE7Ci0JCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZzZGF0YS0+bG9jYWwtPmh3LCAmaWZtc2gtPndvcmspOworCQlpZWVlODAyMTFfcXVldWVfd29yaygmc2RhdGEtPmxvY2FsLT5odywgJnNkYXRhLT53b3JrKTsKIAl9IGVsc2UKIAkJbW9kX3RpbWVyKCZpZm1zaC0+bWVzaF9wYXRoX3RpbWVyLCBpZm1zaC0+bGFzdF9wcmVxICsKIAkJCQkJCW1pbl9wcmVxX2ludF9qaWZmKHNkYXRhKSk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMKaW5kZXggMTgxZmZkNi4uMzQ5ZTQ2NiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jCisrKyBiL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYwpAQCAtMzE1LDcgKzMxNSw3IEBACiAJcmVhZF91bmxvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOwogCWlmIChncm93KSB7CiAJCXNldF9iaXQoTUVTSF9XT1JLX0dST1dfTVBBVEhfVEFCTEUsICAmaWZtc2gtPndya3FfZmxhZ3MpOwotCQlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmaWZtc2gtPndvcmspOworCQlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmc2RhdGEtPndvcmspOwogCX0KIAlyZXR1cm4gMDsKIApAQCAtNDI1LDcgKzQyNSw3IEBACiAJcmVhZF91bmxvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOwogCWlmIChncm93KSB7CiAJCXNldF9iaXQoTUVTSF9XT1JLX0dST1dfTVBQX1RBQkxFLCAgJmlmbXNoLT53cmtxX2ZsYWdzKTsKLQkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJmlmbXNoLT53b3JrKTsKKwkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJnNkYXRhLT53b3JrKTsKIAl9CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMgYi9uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jCmluZGV4IDNjZDVmN2IuLmVhMTNhODAgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMKKysrIGIvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYwpAQCAtNjUsNyArNjUsNiBAQAogewogCWF0b21pY19pbmMoJnNkYXRhLT51Lm1lc2gubXNoc3RhdHMuZXN0YWJfcGxpbmtzKTsKIAltZXNoX2FjY2VwdF9wbGlua3NfdXBkYXRlKHNkYXRhKTsKLQlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgQlNTX0NIQU5HRURfQkVBQ09OKTsKIH0KIAogc3RhdGljIGlubGluZQpAQCAtNzMsNyArNzIsNiBAQAogewogCWF0b21pY19kZWMoJnNkYXRhLT51Lm1lc2gubXNoc3RhdHMuZXN0YWJfcGxpbmtzKTsKIAltZXNoX2FjY2VwdF9wbGlua3NfdXBkYXRlKHNkYXRhKTsKLQlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgQlNTX0NIQU5HRURfQkVBQ09OKTsKIH0KIAogLyoqCkBAIC0xMTUsNyArMTEzLDcgQEAKIH0KIAogLyoqCi0gKiBtZXNoX3BsaW5rX2RlYWN0aXZhdGUgLSBkZWFjdGl2YXRlIG1lc2ggcGVlciBsaW5rCisgKiBfX21lc2hfcGxpbmtfZGVhY3RpdmF0ZSAtIGRlYWN0aXZhdGUgbWVzaCBwZWVyIGxpbmsKICAqCiAgKiBAc3RhOiBtZXNoIHBlZXIgbGluayB0byBkZWFjdGl2YXRlCiAgKgpAQCAtMTIzLDE4ICsxMjEsMjMgQEAKICAqCiAgKiBMb2NraW5nOiB0aGUgY2FsbGVyIG11c3QgaG9sZCBzdGEtPmxvY2sKICAqLwotc3RhdGljIHZvaWQgX19tZXNoX3BsaW5rX2RlYWN0aXZhdGUoc3RydWN0IHN0YV9pbmZvICpzdGEpCitzdGF0aWMgYm9vbCBfX21lc2hfcGxpbmtfZGVhY3RpdmF0ZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHN0YS0+c2RhdGE7CisJYm9vbCBkZWFjdGl2YXRlZCA9IGZhbHNlOwogCi0JaWYgKHN0YS0+cGxpbmtfc3RhdGUgPT0gUExJTktfRVNUQUIpCisJaWYgKHN0YS0+cGxpbmtfc3RhdGUgPT0gUExJTktfRVNUQUIpIHsKIAkJbWVzaF9wbGlua19kZWNfZXN0YWJfY291bnQoc2RhdGEpOworCQlkZWFjdGl2YXRlZCA9IHRydWU7CisJfQogCXN0YS0+cGxpbmtfc3RhdGUgPSBQTElOS19CTE9DS0VEOwogCW1lc2hfcGF0aF9mbHVzaF9ieV9uZXh0aG9wKHN0YSk7CisKKwlyZXR1cm4gZGVhY3RpdmF0ZWQ7CiB9CiAKIC8qKgotICogX19tZXNoX3BsaW5rX2RlYWN0aXZhdGUgLSBkZWFjdGl2YXRlIG1lc2ggcGVlciBsaW5rCisgKiBtZXNoX3BsaW5rX2RlYWN0aXZhdGUgLSBkZWFjdGl2YXRlIG1lc2ggcGVlciBsaW5rCiAgKgogICogQHN0YTogbWVzaCBwZWVyIGxpbmsgdG8gZGVhY3RpdmF0ZQogICoKQEAgLTE0Miw5ICsxNDUsMTUgQEAKICAqLwogdm9pZCBtZXNoX3BsaW5rX2RlYWN0aXZhdGUoc3RydWN0IHN0YV9pbmZvICpzdGEpCiB7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtPnNkYXRhOworCWJvb2wgZGVhY3RpdmF0ZWQ7CisKIAlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0JX19tZXNoX3BsaW5rX2RlYWN0aXZhdGUoc3RhKTsKKwlkZWFjdGl2YXRlZCA9IF9fbWVzaF9wbGlua19kZWFjdGl2YXRlKHN0YSk7CiAJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisKKwlpZiAoZGVhY3RpdmF0ZWQpCisJCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLCBCU1NfQ0hBTkdFRF9CRUFDT04pOwogfQogCiBzdGF0aWMgaW50IG1lc2hfcGxpbmtfZnJhbWVfdHgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCkBAIC0zODEsMTAgKzM5MCwxNiBAQAogCiB2b2lkIG1lc2hfcGxpbmtfYmxvY2soc3RydWN0IHN0YV9pbmZvICpzdGEpCiB7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtPnNkYXRhOworCWJvb2wgZGVhY3RpdmF0ZWQ7CisKIAlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0JX19tZXNoX3BsaW5rX2RlYWN0aXZhdGUoc3RhKTsKKwlkZWFjdGl2YXRlZCA9IF9fbWVzaF9wbGlua19kZWFjdGl2YXRlKHN0YSk7CiAJc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX0JMT0NLRUQ7CiAJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisKKwlpZiAoZGVhY3RpdmF0ZWQpCisJCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLCBCU1NfQ0hBTkdFRF9CRUFDT04pOwogfQogCiAKQEAgLTM5Nyw2ICs0MTIsNyBAQAogCWVudW0gcGxpbmtfZXZlbnQgZXZlbnQ7CiAJZW51bSBwbGlua19mcmFtZV90eXBlIGZ0eXBlOwogCXNpemVfdCBiYXNlbGVuOworCWJvb2wgZGVhY3RpdmF0ZWQ7CiAJdTggaWVfbGVuOwogCXU4ICpiYXNlYWRkcjsKIAlfX2xlMTYgcGxpZCwgbGxpZCwgcmVhc29uOwpAQCAtNjUxLDggKzY2Nyw5IEBACiAJCWNhc2UgQ05GX0FDUFQ6CiAJCQlkZWxfdGltZXIoJnN0YS0+cGxpbmtfdGltZXIpOwogCQkJc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX0VTVEFCOwotCQkJbWVzaF9wbGlua19pbmNfZXN0YWJfY291bnQoc2RhdGEpOwogCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisJCQltZXNoX3BsaW5rX2luY19lc3RhYl9jb3VudChzZGF0YSk7CisJCQlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgQlNTX0NIQU5HRURfQkVBQ09OKTsKIAkJCW1wbF9kYmcoIk1lc2ggcGxpbmsgd2l0aCAlcE0gRVNUQUJMSVNIRURcbiIsCiAJCQkJc3RhLT5zdGEuYWRkcik7CiAJCQlicmVhazsKQEAgLTY4NCw4ICs3MDEsOSBAQAogCQljYXNlIE9QTl9BQ1BUOgogCQkJZGVsX3RpbWVyKCZzdGEtPnBsaW5rX3RpbWVyKTsKIAkJCXN0YS0+cGxpbmtfc3RhdGUgPSBQTElOS19FU1RBQjsKLQkJCW1lc2hfcGxpbmtfaW5jX2VzdGFiX2NvdW50KHNkYXRhKTsKIAkJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworCQkJbWVzaF9wbGlua19pbmNfZXN0YWJfY291bnQoc2RhdGEpOworCQkJaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoc2RhdGEsIEJTU19DSEFOR0VEX0JFQUNPTik7CiAJCQltcGxfZGJnKCJNZXNoIHBsaW5rIHdpdGggJXBNIEVTVEFCTElTSEVEXG4iLAogCQkJCXN0YS0+c3RhLmFkZHIpOwogCQkJbWVzaF9wbGlua19mcmFtZV90eChzZGF0YSwgUExJTktfQ09ORklSTSwgc3RhLT5zdGEuYWRkciwgbGxpZCwKQEAgLTcwMiwxMSArNzIwLDEzIEBACiAJCWNhc2UgQ0xTX0FDUFQ6CiAJCQlyZWFzb24gPSBjcHVfdG9fbGUxNihNRVNIX0NMT1NFX1JDVkQpOwogCQkJc3RhLT5yZWFzb24gPSByZWFzb247Ci0JCQlfX21lc2hfcGxpbmtfZGVhY3RpdmF0ZShzdGEpOworCQkJZGVhY3RpdmF0ZWQgPSBfX21lc2hfcGxpbmtfZGVhY3RpdmF0ZShzdGEpOwogCQkJc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX0hPTERJTkc7CiAJCQlsbGlkID0gc3RhLT5sbGlkOwogCQkJbW9kX3BsaW5rX3RpbWVyKHN0YSwgZG90MTFNZXNoSG9sZGluZ1RpbWVvdXQoc2RhdGEpKTsKIAkJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworCQkJaWYgKGRlYWN0aXZhdGVkKQorCQkJCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLCBCU1NfQ0hBTkdFRF9CRUFDT04pOwogCQkJbWVzaF9wbGlua19mcmFtZV90eChzZGF0YSwgUExJTktfQ0xPU0UsIHN0YS0+c3RhLmFkZHIsIGxsaWQsCiAJCQkJCSAgICBwbGlkLCByZWFzb24pOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWxtZS5jIGIvbmV0L21hYzgwMjExL21sbWUuYwppbmRleCBmODAzZjhiLi5iNmMxNjNhIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWxtZS5jCisrKyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKQEAgLTQ3OCw2ICs0NzgsMzkgQEAKIAl9CiB9CiAKK3ZvaWQgaWVlZTgwMjExX2VuYWJsZV9keW5fcHMoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHZpZl90b19zZGF0YSh2aWYpOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZsb2NhbC0+aHcuY29uZjsKKworCVdBUk5fT04oc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKKwkJIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMpIHx8CisJCShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUykpOworCisJbG9jYWwtPmRpc2FibGVfZHluYW1pY19wcyA9IGZhbHNlOworCWNvbmYtPmR5bmFtaWNfcHNfdGltZW91dCA9IGxvY2FsLT5keW5hbWljX3BzX3VzZXJfdGltZW91dDsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX2VuYWJsZV9keW5fcHMpOworCit2b2lkIGllZWU4MDIxMV9kaXNhYmxlX2R5bl9wcyhzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gdmlmX3RvX3NkYXRhKHZpZik7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmxvY2FsLT5ody5jb25mOworCisJV0FSTl9PTihzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAorCQkhKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19QUykgfHwKKwkJKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1BTKSk7CisKKwlsb2NhbC0+ZGlzYWJsZV9keW5hbWljX3BzID0gdHJ1ZTsKKwljb25mLT5keW5hbWljX3BzX3RpbWVvdXQgPSAwOworCWRlbF90aW1lcl9zeW5jKCZsb2NhbC0+ZHluYW1pY19wc190aW1lcik7CisJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywKKwkJCSAgICAgJmxvY2FsLT5keW5hbWljX3BzX2VuYWJsZV93b3JrKTsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX2Rpc2FibGVfZHluX3BzKTsKKwogLyogcG93ZXJzYXZlICovCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfZW5hYmxlX3BzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQpAQCAtNTUzLDYgKzU4Niw3IEBACiAJICAgIGZvdW5kLT51Lm1nZC5hc3NvY2lhdGVkLT5iZWFjb25faWVzICYmCiAJICAgICEoZm91bmQtPnUubWdkLmZsYWdzICYgKElFRUU4MDIxMV9TVEFfQkVBQ09OX1BPTEwgfAogCQkJCSAgICBJRUVFODAyMTFfU1RBX0NPTk5FQ1RJT05fUE9MTCkpKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZsb2NhbC0+aHcuY29uZjsKIAkJczMyIGJlYWNvbmludF91czsKIAogCQlpZiAobGF0ZW5jeSA8IDApCkBAIC01NjEsMjUgKzU5NSwyNCBAQAogCQliZWFjb25pbnRfdXMgPSBpZWVlODAyMTFfdHVfdG9fdXNlYygKIAkJCQkJZm91bmQtPnZpZi5ic3NfY29uZi5iZWFjb25faW50KTsKIAotCQl0aW1lb3V0ID0gbG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc19mb3JjZWRfdGltZW91dDsKKwkJdGltZW91dCA9IGxvY2FsLT5keW5hbWljX3BzX2ZvcmNlZF90aW1lb3V0OwogCQlpZiAodGltZW91dCA8IDApIHsKIAkJCS8qCisJCQkgKiBHbyB0byBmdWxsIFBTTSBpZiB0aGUgdXNlciBjb25maWd1cmVzIGEgdmVyeSBsb3cKKwkJCSAqIGxhdGVuY3kgcmVxdWlyZW1lbnQuCiAJCQkgKiBUaGUgMiBzZWNvbmQgdmFsdWUgaXMgdGhlcmUgZm9yIGNvbXBhdGliaWxpdHkgdW50aWwKIAkJCSAqIHRoZSBQTV9RT1NfTkVUV09SS19MQVRFTkNZIGlzIGNvbmZpZ3VyZWQgd2l0aCByZWFsCiAJCQkgKiB2YWx1ZXMuCiAJCQkgKi8KLQkJCWlmIChsYXRlbmN5ID09IDIwMDAwMDAwMDApCi0JCQkJdGltZW91dCA9IDEwMDsKLQkJCWVsc2UgaWYgKGxhdGVuY3kgPD0gNTAwMDApCi0JCQkJdGltZW91dCA9IDMwMDsKLQkJCWVsc2UgaWYgKGxhdGVuY3kgPD0gMTAwMDAwKQotCQkJCXRpbWVvdXQgPSAxMDA7Ci0JCQllbHNlIGlmIChsYXRlbmN5IDw9IDUwMDAwMCkKLQkJCQl0aW1lb3V0ID0gNTA7Ci0JCQllbHNlCisJCQlpZiAobGF0ZW5jeSA+IDE5MDAwMDAwMDAgJiYgbGF0ZW5jeSAhPSAyMDAwMDAwMDAwKQogCQkJCXRpbWVvdXQgPSAwOworCQkJZWxzZQorCQkJCXRpbWVvdXQgPSAxMDA7CiAJCX0KLQkJbG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0ID0gdGltZW91dDsKKwkJbG9jYWwtPmR5bmFtaWNfcHNfdXNlcl90aW1lb3V0ID0gdGltZW91dDsKKwkJaWYgKCFsb2NhbC0+ZGlzYWJsZV9keW5hbWljX3BzKQorCQkJY29uZi0+ZHluYW1pY19wc190aW1lb3V0ID0KKwkJCQlsb2NhbC0+ZHluYW1pY19wc191c2VyX3RpbWVvdXQ7CiAKIAkJaWYgKGJlYWNvbmludF91cyA+IGxhdGVuY3kpIHsKIAkJCWxvY2FsLT5wc19zZGF0YSA9IE5VTEw7CkBAIC02NjUsMTAgKzY5OCwxMSBAQAogCiAvKiBNTE1FICovCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3dtbV9wYXJhbXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJICAgICB1OCAqd21tX3BhcmFtLCBzaXplX3Qgd21tX3BhcmFtX2xlbikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyBwYXJhbXM7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc2l6ZV90IGxlZnQ7CiAJaW50IGNvdW50OwogCXU4ICpwb3MsIHVhcHNkX3F1ZXVlcyA9IDA7CkBAIC03NTcsOCArNzkxLDggQEAKIAl9CiAKIAkvKiBlbmFibGUgV01NIG9yIGFjdGl2YXRlIG5ldyBzZXR0aW5ncyAqLwotCWxvY2FsLT5ody5jb25mLmZsYWdzIHw9CUlFRUU4MDIxMV9DT05GX1FPUzsKLQlkcnZfY29uZmlnKGxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUU9TKTsKKwlzZGF0YS0+dmlmLmJzc19jb25mLnFvcyA9IHRydWU7CisJaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoc2RhdGEsIEJTU19DSEFOR0VEX1FPUyk7CiB9CiAKIHN0YXRpYyB1MzIgaWVlZTgwMjExX2hhbmRsZV9ic3NfY2FwYWJpbGl0eShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKQEAgLTgwNiwxMSArODQwLDEyIEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcyA9ICh2b2lkICopY2Jzcy0+cHJpdjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiA9ICZzZGF0YS0+dmlmLmJzc19jb25mOwogCiAJYnNzX2luZm9fY2hhbmdlZCB8PSBCU1NfQ0hBTkdFRF9BU1NPQzsKIAkvKiBzZXQgdGltaW5nIGluZm9ybWF0aW9uICovCi0Jc2RhdGEtPnZpZi5ic3NfY29uZi5iZWFjb25faW50ID0gY2Jzcy0+YmVhY29uX2ludGVydmFsOwotCXNkYXRhLT52aWYuYnNzX2NvbmYudGltZXN0YW1wID0gY2Jzcy0+dHNmOworCWJzc19jb25mLT5iZWFjb25faW50ID0gY2Jzcy0+YmVhY29uX2ludGVydmFsOworCWJzc19jb25mLT50aW1lc3RhbXAgPSBjYnNzLT50c2Y7CiAKIAlic3NfaW5mb19jaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0JFQUNPTl9JTlQ7CiAJYnNzX2luZm9fY2hhbmdlZCB8PSBpZWVlODAyMTFfaGFuZGxlX2Jzc19jYXBhYmlsaXR5KHNkYXRhLApAQCAtODM1LDcgKzg3MCwxMiBAQAogCiAJaWVlZTgwMjExX2xlZF9hc3NvYyhsb2NhbCwgMSk7CiAKLQlzZGF0YS0+dmlmLmJzc19jb25mLmFzc29jID0gMTsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX05FRURfRFRJTV9QRVJJT0QpCisJCWJzc19jb25mLT5kdGltX3BlcmlvZCA9IGJzcy0+ZHRpbV9wZXJpb2Q7CisJZWxzZQorCQlic3NfY29uZi0+ZHRpbV9wZXJpb2QgPSAwOworCisJYnNzX2NvbmYtPmFzc29jID0gMTsKIAkvKgogCSAqIEZvciBub3cganVzdCBhbHdheXMgYXNrIHRoZSBkcml2ZXIgdG8gdXBkYXRlIHRoZSBiYXNpYyByYXRlc2V0CiAJICogd2hlbiB3ZSBoYXZlIGFzc29jaWF0ZWQsIHdlIGFyZW4ndCBjaGVja2luZyB3aGV0aGVyIGl0IGFjdHVhbGx5CkBAIC04NDgsOSArODg4LDE1IEBACiAKIAkvKiBUZWxsIHRoZSBkcml2ZXIgdG8gbW9uaXRvciBjb25uZWN0aW9uIHF1YWxpdHkgKGlmIHN1cHBvcnRlZCkgKi8KIAlpZiAoKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19DUU1fUlNTSSkgJiYKLQkgICAgc2RhdGEtPnZpZi5ic3NfY29uZi5jcW1fcnNzaV90aG9sZCkKKwkgICAgYnNzX2NvbmYtPmNxbV9yc3NpX3Rob2xkKQogCQlic3NfaW5mb19jaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0NRTTsKIAorCS8qIEVuYWJsZSBBUlAgZmlsdGVyaW5nICovCisJaWYgKGJzc19jb25mLT5hcnBfZmlsdGVyX2VuYWJsZWQgIT0gc2RhdGEtPmFycF9maWx0ZXJfc3RhdGUpIHsKKwkJYnNzX2NvbmYtPmFycF9maWx0ZXJfZW5hYmxlZCA9IHNkYXRhLT5hcnBfZmlsdGVyX3N0YXRlOworCQlic3NfaW5mb19jaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0FSUF9GSUxURVI7CisJfQorCiAJaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoc2RhdGEsIGJzc19pbmZvX2NoYW5nZWQpOwogCiAJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwpAQCAtODk4LDEzICs5NDQsMTMgQEAKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CiAJbmV0aWZfY2Fycmllcl9vZmYoc2RhdGEtPmRldik7CiAKLQlyY3VfcmVhZF9sb2NrKCk7CisJbXV0ZXhfbG9jaygmbG9jYWwtPnN0YV9tdHgpOwogCXN0YSA9IHN0YV9pbmZvX2dldChzZGF0YSwgYnNzaWQpOwogCWlmIChzdGEpIHsKLQkJc2V0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX0RJU0FTU09DKTsKKwkJc2V0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX0JMT0NLX0JBKTsKIAkJaWVlZTgwMjExX3N0YV90ZWFyX2Rvd25fQkFfc2Vzc2lvbnMoc3RhKTsKIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+c3RhX210eCk7CiAKIAljaGFuZ2VkIHw9IGllZWU4MDIxMV9yZXNldF9lcnBfaW5mbyhzZGF0YSk7CiAKQEAgLTkzMiw2ICs5NzgsMTIgQEAKIAogCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIGNvbmZpZ19jaGFuZ2VkKTsKIAorCS8qIERpc2FibGUgQVJQIGZpbHRlcmluZyAqLworCWlmIChzZGF0YS0+dmlmLmJzc19jb25mLmFycF9maWx0ZXJfZW5hYmxlZCkgeworCQlzZGF0YS0+dmlmLmJzc19jb25mLmFycF9maWx0ZXJfZW5hYmxlZCA9IGZhbHNlOworCQljaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0FSUF9GSUxURVI7CisJfQorCiAJLyogVGhlIEJTU0lEIChub3QgcmVhbGx5IGludGVyZXN0aW5nKSBhbmQgSFQgY2hhbmdlZCAqLwogCWNoYW5nZWQgfD0gQlNTX0NIQU5HRURfQlNTSUQgfCBCU1NfQ0hBTkdFRF9IVDsKIAlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgY2hhbmdlZCk7CkBAIC0xMjc5LDcgKzEzMzEsNyBAQAogCX0KIAogCWlmIChlbGVtcy53bW1fcGFyYW0pCi0JCWllZWU4MDIxMV9zdGFfd21tX3BhcmFtcyhsb2NhbCwgaWZtZ2QsIGVsZW1zLndtbV9wYXJhbSwKKwkJaWVlZTgwMjExX3N0YV93bW1fcGFyYW1zKGxvY2FsLCBzZGF0YSwgZWxlbXMud21tX3BhcmFtLAogCQkJCQkgZWxlbXMud21tX3BhcmFtX2xlbik7CiAJZWxzZQogCQlpZWVlODAyMTFfc2V0X3dtbV9kZWZhdWx0KHNkYXRhKTsKQEAgLTE1NTEsNyArMTYwMyw3IEBACiAJCWllZWU4MDIxMV9yeF9ic3NfaW5mbyhzZGF0YSwgbWdtdCwgbGVuLCByeF9zdGF0dXMsICZlbGVtcywKIAkJCQkgICAgICB0cnVlKTsKIAotCQlpZWVlODAyMTFfc3RhX3dtbV9wYXJhbXMobG9jYWwsIGlmbWdkLCBlbGVtcy53bW1fcGFyYW0sCisJCWllZWU4MDIxMV9zdGFfd21tX3BhcmFtcyhsb2NhbCwgc2RhdGEsIGVsZW1zLndtbV9wYXJhbSwKIAkJCQkJIGVsZW1zLndtbV9wYXJhbV9sZW4pOwogCX0KIApAQCAtMTYzMywzNSArMTY4NSw4IEBACiAJaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoc2RhdGEsIGNoYW5nZWQpOwogfQogCi1pZWVlODAyMTFfcnhfcmVzdWx0IGllZWU4MDIxMV9zdGFfcnhfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKLQl1MTYgZmM7Ci0KLQlpZiAoc2tiLT5sZW4gPCAyNCkKLQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKLQotCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYi0+ZGF0YTsKLQlmYyA9IGxlMTZfdG9fY3B1KG1nbXQtPmZyYW1lX2NvbnRyb2wpOwotCi0Jc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7Ci0JY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046Ci0JY2FzZSBJRUVFODAyMTFfU1RZUEVfREVBVVRIOgotCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DOgotCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FDVElPTjoKLQkJc2tiX3F1ZXVlX3RhaWwoJnNkYXRhLT51Lm1nZC5za2JfcXVldWUsIHNrYik7Ci0JCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZzZGF0YS0+dS5tZ2Qud29yayk7Ci0JCXJldHVybiBSWF9RVUVVRUQ7Ci0JfQotCi0JcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKLX0KLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJIHN0cnVjdCBza19idWZmICpza2IpCit2b2lkIGllZWU4MDIxMV9zdGFfcnhfcXVldWVkX21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXM7CkBAIC0xNjkzLDQ0ICsxNzE4LDYgQEAKIAkJCWJyZWFrOwogCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BQ1RJT046CiAJCQlzd2l0Y2ggKG1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5KSB7Ci0JCQljYXNlIFdMQU5fQ0FURUdPUllfQkFDSzogewotCQkJCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCQkJCWludCBsZW4gPSBza2ItPmxlbjsKLQkJCQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQotCQkJCXJjdV9yZWFkX2xvY2soKTsKLQkJCQlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIG1nbXQtPnNhKTsKLQkJCQlpZiAoIXN0YSkgewotCQkJCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQkJbG9jYWxfYmhfZGlzYWJsZSgpOwotCi0JCQkJc3dpdGNoIChtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5hY3Rpb25fY29kZSkgewotCQkJCWNhc2UgV0xBTl9BQ1RJT05fQUREQkFfUkVROgotCQkJCQlpZiAobGVuIDwgKElFRUU4MDIxMV9NSU5fQUNUSU9OX1NJWkUgKwotCQkJCQkJICAgc2l6ZW9mKG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxKSkpCi0JCQkJCQlicmVhazsKLQkJCQkJaWVlZTgwMjExX3Byb2Nlc3NfYWRkYmFfcmVxdWVzdChsb2NhbCwgc3RhLCBtZ210LCBsZW4pOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFdMQU5fQUNUSU9OX0FEREJBX1JFU1A6Ci0JCQkJCWlmIChsZW4gPCAoSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSArCi0JCQkJCQkgICBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwKSkpCi0JCQkJCQlicmVhazsKLQkJCQkJaWVlZTgwMjExX3Byb2Nlc3NfYWRkYmFfcmVzcChsb2NhbCwgc3RhLCBtZ210LCBsZW4pOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFdMQU5fQUNUSU9OX0RFTEJBOgotCQkJCQlpZiAobGVuIDwgKElFRUU4MDIxMV9NSU5fQUNUSU9OX1NJWkUgKwotCQkJCQkJICAgc2l6ZW9mKG1nbXQtPnUuYWN0aW9uLnUuZGVsYmEpKSkKLQkJCQkJCWJyZWFrOwotCQkJCQlpZWVlODAyMTFfcHJvY2Vzc19kZWxiYShzZGF0YSwgc3RhLCBtZ210LCBsZW4pOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJbG9jYWxfYmhfZW5hYmxlKCk7Ci0JCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQkJYnJlYWs7Ci0JCQkJfQogCQkJY2FzZSBXTEFOX0NBVEVHT1JZX1NQRUNUUlVNX01HTVQ6CiAJCQkJaWVlZTgwMjExX3N0YV9wcm9jZXNzX2NoYW5zd2l0Y2goc2RhdGEsCiAJCQkJCQkmbWdtdC0+dS5hY3Rpb24udS5jaGFuX3N3aXRjaC5zd19lbGVtLApAQCAtMTc1NCw3ICsxNzQxLDcgQEAKIAkJZGVmYXVsdDoKIAkJCVdBUk4oMSwgInVuZXhwZWN0ZWQ6ICVkIiwgcm1hKTsKIAkJfQotCQlnb3RvIG91dDsKKwkJcmV0dXJuOwogCX0KIAogCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7CkBAIC0xNzY5LDcgKzE3NTYsOCBAQAogCQkJaWYgKHdrLT5zZGF0YSAhPSBzZGF0YSkKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKHdrLT50eXBlICE9IElFRUU4MDIxMV9XT1JLX0FTU09DKQorCQkJaWYgKHdrLT50eXBlICE9IElFRUU4MDIxMV9XT1JLX0FTU09DICYmCisJCQkgICAgd2stPnR5cGUgIT0gSUVFRTgwMjExX1dPUktfQVNTT0NfQkVBQ09OX1dBSVQpCiAJCQkJY29udGludWU7CiAKIAkJCWlmIChtZW1jbXAobWdtdC0+YnNzaWQsIHdrLT5maWx0ZXJfdGEsIEVUSF9BTEVOKSkKQEAgLTE3OTksOCArMTc4Nyw2IEBACiAKIAkJY2ZnODAyMTFfc2VuZF9kZWF1dGgoc2RhdGEtPmRldiwgKHU4ICopbWdtdCwgc2tiLT5sZW4pOwogCX0KLSBvdXQ6Ci0Ja2ZyZWVfc2tiKHNrYik7CiB9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQpAQCAtMTgxNSwzOSArMTgwMSwxMyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJmlmbWdkLT53b3JrKTsKKwlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmc2RhdGEtPndvcmspOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQordm9pZCBpZWVlODAyMTFfc3RhX3dvcmsoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwgdS5tZ2Qud29yayk7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0JaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCi0JCXJldHVybjsKLQotCWlmIChsb2NhbC0+c2Nhbm5pbmcpCi0JCXJldHVybjsKLQotCWlmIChXQVJOX09OKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBpZWVlODAyMTFfcXVldWVfd29yaygpIHNob3VsZCBoYXZlIHBpY2tlZCB1cCBtb3N0IGNhc2VzLAotCSAqIGhlcmUgd2UnbGwgcGljayB0aGUgdGhlIHJlc3QuCi0JICovCi0JaWYgKFdBUk4obG9jYWwtPnN1c3BlbmRlZCwgIlNUQSBNTE1FIHdvcmsgc2NoZWR1bGVkIHdoaWxlICIKLQkJICJnb2luZyB0byBzdXNwZW5kXG4iKSkKLQkJcmV0dXJuOwotCi0JaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwotCi0JLyogZmlyc3QgcHJvY2VzcyBmcmFtZXMgdG8gYXZvaWQgdGltaW5nIG91dCB3aGlsZSBhIGZyYW1lIGlzIHBlbmRpbmcgKi8KLQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZpZm1nZC0+c2tiX3F1ZXVlKSkpCi0JCWllZWU4MDIxMV9zdGFfcnhfcXVldWVkX21nbXQoc2RhdGEsIHNrYik7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAKIAkvKiB0aGVuIHByb2Nlc3MgdGhlIHJlc3Qgb2YgdGhlIHdvcmsgKi8KIAltdXRleF9sb2NrKCZpZm1nZC0+bXR4KTsKQEAgLTE5NDIsOCArMTkwMiw3IEBACiAJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZzZGF0YS0+bG9jYWwtPmh3LAogCQkJICAgJnNkYXRhLT51Lm1nZC5tb25pdG9yX3dvcmspOwogCQkvKiBhbmQgZG8gYWxsIHRoZSBvdGhlciByZWd1bGFyIHdvcmsgdG9vICovCi0JCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZzZGF0YS0+bG9jYWwtPmh3LAotCQkJICAgJnNkYXRhLT51Lm1nZC53b3JrKTsKKwkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJnNkYXRhLT5sb2NhbC0+aHcsICZzZGF0YS0+d29yayk7CiAJfQogfQogCkBAIC0xOTU4LDcgKzE5MTcsNiBAQAogCSAqIHRpbWUgLS0gdGhlIGNvZGUgaGVyZSBpcyBwcm9wZXJseSBzeW5jaHJvbmlzZWQuCiAJICovCiAKLQljYW5jZWxfd29ya19zeW5jKCZpZm1nZC0+d29yayk7CiAJY2FuY2VsX3dvcmtfc3luYygmaWZtZ2QtPmJlYWNvbl9jb25uZWN0aW9uX2xvc3Nfd29yayk7CiAJaWYgKGRlbF90aW1lcl9zeW5jKCZpZm1nZC0+dGltZXIpKQogCQlzZXRfYml0KFRNUl9SVU5OSU5HX1RJTUVSLCAmaWZtZ2QtPnRpbWVyc19ydW5uaW5nKTsKQEAgLTE5OTAsNyArMTk0OCw2IEBACiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZDsKIAogCWlmbWdkID0gJnNkYXRhLT51Lm1nZDsKLQlJTklUX1dPUksoJmlmbWdkLT53b3JrLCBpZWVlODAyMTFfc3RhX3dvcmspOwogCUlOSVRfV09SSygmaWZtZ2QtPm1vbml0b3Jfd29yaywgaWVlZTgwMjExX3N0YV9tb25pdG9yX3dvcmspOwogCUlOSVRfV09SSygmaWZtZ2QtPmNoc3dpdGNoX3dvcmssIGllZWU4MDIxMV9jaHN3aXRjaF93b3JrKTsKIAlJTklUX1dPUksoJmlmbWdkLT5iZWFjb25fY29ubmVjdGlvbl9sb3NzX3dvcmssCkBAIC0yMDAzLDcgKzE5NjAsNiBAQAogCQkgICAgKHVuc2lnbmVkIGxvbmcpIHNkYXRhKTsKIAlzZXR1cF90aW1lcigmaWZtZ2QtPmNoc3dpdGNoX3RpbWVyLCBpZWVlODAyMTFfY2hzd2l0Y2hfdGltZXIsCiAJCSAgICAodW5zaWduZWQgbG9uZykgc2RhdGEpOwotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmlmbWdkLT5za2JfcXVldWUpOwogCiAJaWZtZ2QtPmZsYWdzID0gMDsKIApAQCAtMjA4MSw2ICsyMDM3LDggQEAKIAkJYXV0aF9hbGcgPSBXTEFOX0FVVEhfT1BFTjsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0FVVEhUWVBFX1NIQVJFRF9LRVk6CisJCWlmIChJU19FUlIoc2RhdGEtPmxvY2FsLT53ZXBfdHhfdGZtKSkKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAkJYXV0aF9hbGcgPSBXTEFOX0FVVEhfU0hBUkVEX0tFWTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0FVVEhUWVBFX0ZUOgpAQCAtMjEzNCw2ICsyMDkyLDggQEAKIAkJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1czsKKwlzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyBlbGVtczsKIAl1MTYgc3RhdHVzOwogCiAJaWYgKCFza2IpIHsKQEAgLTIxNDEsNiArMjEwMSwxOSBAQAogCQlyZXR1cm4gV09SS19ET05FX0RFU1RST1k7CiAJfQogCisJaWYgKHdrLT50eXBlID09IElFRUU4MDIxMV9XT1JLX0FTU09DX0JFQUNPTl9XQUlUKSB7CisJCW11dGV4X2xvY2soJndrLT5zZGF0YS0+dS5tZ2QubXR4KTsKKwkJcnhfc3RhdHVzID0gKHZvaWQgKikgc2tiLT5jYjsKKwkJaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyhza2ItPmRhdGEgKyAyNCArIDEyLCBza2ItPmxlbiAtIDI0IC0gMTIsICZlbGVtcyk7CisJCWllZWU4MDIxMV9yeF9ic3NfaW5mbyh3ay0+c2RhdGEsICh2b2lkICopc2tiLT5kYXRhLCBza2ItPmxlbiwgcnhfc3RhdHVzLAorCQkJCSAgICAgICZlbGVtcywgdHJ1ZSk7CisJCW11dGV4X3VubG9jaygmd2stPnNkYXRhLT51Lm1nZC5tdHgpOworCisJCXdrLT50eXBlID0gSUVFRTgwMjExX1dPUktfQVNTT0M7CisJCS8qIG5vdCByZWFsbHkgZG9uZSB5ZXQgKi8KKwkJcmV0dXJuIFdPUktfRE9ORV9SRVFVRVVFOworCX0KKwogCW1nbXQgPSAodm9pZCAqKXNrYi0+ZGF0YTsKIAlzdGF0dXMgPSBsZTE2X3RvX2NwdShtZ210LT51LmFzc29jX3Jlc3Auc3RhdHVzX2NvZGUpOwogCkBAIC0yMTUzLDYgKzIxMjYsNyBAQAogCQkJCQkJICAgIHdrLT5maWx0ZXJfdGEpOwogCQkJcmV0dXJuIFdPUktfRE9ORV9ERVNUUk9ZOwogCQl9CisKIAkJbXV0ZXhfdW5sb2NrKCZ3ay0+c2RhdGEtPnUubWdkLm10eCk7CiAJfQogCkBAIC0yMjUzLDEwICsyMjI3LDE0IEBACiAJaWYgKHJlcS0+cHJldl9ic3NpZCkKIAkJbWVtY3B5KHdrLT5hc3NvYy5wcmV2X2Jzc2lkLCByZXEtPnByZXZfYnNzaWQsIEVUSF9BTEVOKTsKIAotCXdrLT50eXBlID0gSUVFRTgwMjExX1dPUktfQVNTT0M7CiAJd2stPmNoYW4gPSByZXEtPmJzcy0+Y2hhbm5lbDsKIAl3ay0+c2RhdGEgPSBzZGF0YTsKIAl3ay0+ZG9uZSA9IGllZWU4MDIxMV9hc3NvY19kb25lOworCWlmICghYnNzLT5kdGltX3BlcmlvZCAmJgorCSAgICBzZGF0YS0+bG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX05FRURfRFRJTV9QRVJJT0QpCisJCXdrLT50eXBlID0gSUVFRTgwMjExX1dPUktfQVNTT0NfQkVBQ09OX1dBSVQ7CisJZWxzZQorCQl3ay0+dHlwZSA9IElFRUU4MDIxMV9XT1JLX0FTU09DOwogCiAJaWYgKHJlcS0+dXNlX21mcCkgewogCQlpZm1nZC0+bWZwID0gSUVFRTgwMjExX01GUF9SRVFVSVJFRDsKQEAgLTIyODIsMTQgKzIyNjAsMTYgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrOwotCWNvbnN0IHU4ICpic3NpZCA9IHJlcS0+YnNzLT5ic3NpZDsKKwl1OCBic3NpZFtFVEhfQUxFTl07CisJYm9vbCBhc3NvY19ic3MgPSBmYWxzZTsKIAogCW11dGV4X2xvY2soJmlmbWdkLT5tdHgpOwogCisJbWVtY3B5KGJzc2lkLCByZXEtPmJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKIAlpZiAoaWZtZ2QtPmFzc29jaWF0ZWQgPT0gcmVxLT5ic3MpIHsKLQkJYnNzaWQgPSByZXEtPmJzcy0+YnNzaWQ7Ci0JCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUpOworCQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBmYWxzZSk7CiAJCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7CisJCWFzc29jX2JzcyA9IHRydWU7CiAJfSBlbHNlIHsKIAkJYm9vbCBub3RfYXV0aF95ZXQgPSBmYWxzZTsKIApAQCAtMjMwMiw3ICsyMjgyLDggQEAKIAogCQkJaWYgKHdrLT50eXBlICE9IElFRUU4MDIxMV9XT1JLX0RJUkVDVF9QUk9CRSAmJgogCQkJICAgIHdrLT50eXBlICE9IElFRUU4MDIxMV9XT1JLX0FVVEggJiYKLQkJCSAgICB3ay0+dHlwZSAhPSBJRUVFODAyMTFfV09SS19BU1NPQykKKwkJCSAgICB3ay0+dHlwZSAhPSBJRUVFODAyMTFfV09SS19BU1NPQyAmJgorCQkJICAgIHdrLT50eXBlICE9IElFRUU4MDIxMV9XT1JLX0FTU09DX0JFQUNPTl9XQUlUKQogCQkJCWNvbnRpbnVlOwogCiAJCQlpZiAobWVtY21wKHJlcS0+YnNzLT5ic3NpZCwgd2stPmZpbHRlcl90YSwgRVRIX0FMRU4pKQpAQCAtMjMzNSw2ICsyMzE2LDggQEAKIAlpZWVlODAyMTFfc2VuZF9kZWF1dGhfZGlzYXNzb2Moc2RhdGEsIGJzc2lkLCBJRUVFODAyMTFfU1RZUEVfREVBVVRILAogCQkJCSAgICAgICByZXEtPnJlYXNvbl9jb2RlLCBjb29raWUsCiAJCQkJICAgICAgICFyZXEtPmxvY2FsX3N0YXRlX2NoYW5nZSk7CisJaWYgKGFzc29jX2JzcykKKwkJc3RhX2luZm9fZGVzdHJveV9hZGRyKHNkYXRhLCBic3NpZCk7CiAKIAlpZWVlODAyMTFfcmVjYWxjX2lkbGUoc2RhdGEtPmxvY2FsKTsKIApAQCAtMjM3OSw0MSArMjM2Miw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBpZWVlODAyMTFfbWdkX2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCi0JCQkgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUsCi0JCQkgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbiwgdTY0ICpjb29raWUpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCS8qIENoZWNrIHRoYXQgd2UgYXJlIG9uIHRoZSByZXF1ZXN0ZWQgY2hhbm5lbCBmb3IgdHJhbnNtaXNzaW9uICovCi0JaWYgKChjaGFuICE9IGxvY2FsLT50bXBfY2hhbm5lbCB8fAotCSAgICAgY2hhbm5lbF90eXBlICE9IGxvY2FsLT50bXBfY2hhbm5lbF90eXBlKSAmJgotCSAgICAoY2hhbiAhPSBsb2NhbC0+b3Blcl9jaGFubmVsIHx8Ci0JICAgICBjaGFubmVsX3R5cGUgIT0gbG9jYWwtPl9vcGVyX2NoYW5uZWxfdHlwZSkpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIGxlbik7Ci0JaWYgKCFza2IpCi0JCXJldHVybiAtRU5PTUVNOwotCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKLQotCW1lbWNweShza2JfcHV0KHNrYiwgbGVuKSwgYnVmLCBsZW4pOwotCi0JaWYgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9NRlBfRU5BQkxFRCkpCi0JCUlFRUU4MDIxMV9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgfD0KLQkJCUlFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQ7Ci0JSUVFRTgwMjExX1NLQl9DQihza2IpLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfTkw4MDIxMV9GUkFNRV9UWCB8Ci0JCUlFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUzsKLQlza2ItPmRldiA9IHNkYXRhLT5kZXY7Ci0JaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiKTsKLQotCSpjb29raWUgPSAodW5zaWduZWQgbG9uZykgc2tiOwotCXJldHVybiAwOwotfQotCiB2b2lkIGllZWU4MDIxMV9jcW1fcnNzaV9ub3RpZnkoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCSAgICAgICBlbnVtIG5sODAyMTFfY3FtX3Jzc2lfdGhyZXNob2xkX2V2ZW50IHJzc2lfZXZlbnQsCiAJCQkgICAgICAgZ2ZwX3QgZ2ZwKQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3BtLmMgYi9uZXQvbWFjODAyMTEvcG0uYwppbmRleCA3NTIwMmIyLi5kMjg3ZmRlIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcG0uYworKysgYi9uZXQvbWFjODAyMTEvcG0uYwpAQCAtNDAsMjIgKzQwLDE0IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KQogCQlpZWVlODAyMTFfZGlzYWJsZV9rZXlzKHNkYXRhKTsKIAotCS8qIFRlYXIgZG93biBhZ2dyZWdhdGlvbiBzZXNzaW9ucyAqLwotCi0JcmN1X3JlYWRfbG9jaygpOwotCi0JaWYgKGh3LT5mbGFncyAmIElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTikgewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzdGEsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKKwkvKiB0ZWFyIGRvd24gYWdncmVnYXRpb24gc2Vzc2lvbnMgYW5kIHJlbW92ZSBTVEFzICovCisJbXV0ZXhfbG9jaygmbG9jYWwtPnN0YV9tdHgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7CisJCWlmIChody0+ZmxhZ3MgJiBJRUVFODAyMTFfSFdfQU1QRFVfQUdHUkVHQVRJT04pIHsKIAkJCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9CTE9DS19CQSk7CiAJCQlpZWVlODAyMTFfc3RhX3RlYXJfZG93bl9CQV9zZXNzaW9ucyhzdGEpOwogCQl9Ci0JfQogCi0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQkvKiByZW1vdmUgU1RBcyAqLwotCW11dGV4X2xvY2soJmxvY2FsLT5zdGFfbXR4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN0YSwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkgewogCQlpZiAoc3RhLT51cGxvYWRlZCkgewogCQkJc2RhdGEgPSBzdGEtPnNkYXRhOwogCQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQpAQCAtNzIsNiArNjQsOCBAQAogCiAJLyogcmVtb3ZlIGFsbCBpbnRlcmZhY2VzICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CisJCWNhbmNlbF93b3JrX3N5bmMoJnNkYXRhLT53b3JrKTsKKwogCQlzd2l0Y2goc2RhdGEtPnZpZi50eXBlKSB7CiAJCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJCWllZWU4MDIxMV9zdGFfcXVpZXNjZShzZGF0YSk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmF0ZS5oIGIvbmV0L21hYzgwMjExL3JhdGUuaAppbmRleCAwNjVhOTYxOS4uMTY4NDI3YiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JhdGUuaAorKysgYi9uZXQvbWFjODAyMTEvcmF0ZS5oCkBAIC0xNDcsNSArMTQ3LDE4IEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTF9IVAorZXh0ZXJuIGludCByYzgwMjExX21pbnN0cmVsX2h0X2luaXQodm9pZCk7CitleHRlcm4gdm9pZCByYzgwMjExX21pbnN0cmVsX2h0X2V4aXQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgcmM4MDIxMV9taW5zdHJlbF9odF9pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcmM4MDIxMV9taW5zdHJlbF9odF9leGl0KHZvaWQpCit7Cit9CisjZW5kaWYKKwogCiAjZW5kaWYgLyogSUVFRTgwMjExX1JBVEVfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWwuYyBiL25ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsLmMKaW5kZXggZjY1Y2U2ZC4uNzc4YzYwNCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWwuYworKysgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbC5jCkBAIC02Nyw3ICs2Nyw2IEBACiAJZm9yIChpID0gcml4OyBpID49IDA7IGktLSkKIAkJaWYgKG1pLT5yW2ldLnJpeCA9PSByaXgpCiAJCQlicmVhazsKLQlXQVJOX09OKGkgPCAwKTsKIAlyZXR1cm4gaTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuYyBiL25ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzViNDY1OQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmMKQEAgLTAsMCArMSw4MjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRmVsaXggRmlldGthdSA8bmJkQG9wZW53cnQub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlICJyYXRlLmgiCisjaW5jbHVkZSAicmM4MDIxMV9taW5zdHJlbC5oIgorI2luY2x1ZGUgInJjODAyMTFfbWluc3RyZWxfaHQuaCIKKworI2RlZmluZSBBVkdfUEtUX1NJWkUJMTIwMAorI2RlZmluZSBTQU1QTEVfQ09MVU1OUwkxMAorI2RlZmluZSBFV01BX0xFVkVMCQk3NQorCisvKiBOdW1iZXIgb2YgYml0cyBmb3IgYW4gYXZlcmFnZSBzaXplZCBwYWNrZXQgKi8KKyNkZWZpbmUgTUNTX05CSVRTIChBVkdfUEtUX1NJWkUgPDwgMykKKworLyogTnVtYmVyIG9mIHN5bWJvbHMgZm9yIGEgcGFja2V0IHdpdGggKGJwcykgYml0cyBwZXIgc3ltYm9sICovCisjZGVmaW5lIE1DU19OU1lNUyhicHMpICgoTUNTX05CSVRTICsgKGJwcykgLSAxKSAvIChicHMpKQorCisvKiBUcmFuc21pc3Npb24gdGltZSBmb3IgYSBwYWNrZXQgY29udGFpbmluZyAoc3ltcykgc3ltYm9scyAqLworI2RlZmluZSBNQ1NfU1lNQk9MX1RJTUUoc2dpLCBzeW1zKQkJCQkJXAorCShzZ2kgPwkJCQkJCQkJXAorCSAgKChzeW1zKSAqIDE4ICsgNCkgLyA1IDoJLyogc3ltcyAqIDMuNiB1cyAqLwkJXAorCSAgKHN5bXMpIDw8IDIJCQkvKiBzeW1zICogNCB1cyAqLwkJXAorCSkKKworLyogVHJhbnNtaXQgZHVyYXRpb24gZm9yIHRoZSByYXcgZGF0YSBwYXJ0IG9mIGFuIGF2ZXJhZ2Ugc2l6ZWQgcGFja2V0ICovCisjZGVmaW5lIE1DU19EVVJBVElPTihzdHJlYW1zLCBzZ2ksIGJwcykgTUNTX1NZTUJPTF9USU1FKHNnaSwgTUNTX05TWU1TKChzdHJlYW1zKSAqIChicHMpKSkKKworLyogTUNTIHJhdGUgaW5mb3JtYXRpb24gZm9yIGFuIE1DUyBncm91cCAqLworI2RlZmluZSBNQ1NfR1JPVVAoX3N0cmVhbXMsIF9zZ2ksIF9odDQwKSB7CQkJCVwKKwkuc3RyZWFtcyA9IF9zdHJlYW1zLAkJCQkJCVwKKwkuZmxhZ3MgPQkJCQkJCQlcCisJCShfc2dpID8gSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJIDogMCkgfAkJCVwKKwkJKF9odDQwID8gSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSCA6IDApLAkJXAorCS5kdXJhdGlvbiA9IHsJCQkJCQkJXAorCQlNQ1NfRFVSQVRJT04oX3N0cmVhbXMsIF9zZ2ksIF9odDQwID8gNTQgOiAyNiksCQlcCisJCU1DU19EVVJBVElPTihfc3RyZWFtcywgX3NnaSwgX2h0NDAgPyAxMDggOiA1MiksCQlcCisJCU1DU19EVVJBVElPTihfc3RyZWFtcywgX3NnaSwgX2h0NDAgPyAxNjIgOiA3OCksCQlcCisJCU1DU19EVVJBVElPTihfc3RyZWFtcywgX3NnaSwgX2h0NDAgPyAyMTYgOiAxMDQpLAlcCisJCU1DU19EVVJBVElPTihfc3RyZWFtcywgX3NnaSwgX2h0NDAgPyAzMjQgOiAxNTYpLAlcCisJCU1DU19EVVJBVElPTihfc3RyZWFtcywgX3NnaSwgX2h0NDAgPyA0MzIgOiAyMDgpLAlcCisJCU1DU19EVVJBVElPTihfc3RyZWFtcywgX3NnaSwgX2h0NDAgPyA0ODYgOiAyMzQpLAlcCisJCU1DU19EVVJBVElPTihfc3RyZWFtcywgX3NnaSwgX2h0NDAgPyA1NDAgOiAyNjApCQlcCisJfQkJCQkJCQkJXAorfQorCisvKgorICogVG8gZW5hYmxlIHN1ZmZpY2llbnRseSB0YXJnZXRlZCByYXRlIHNhbXBsaW5nLCBNQ1MgcmF0ZXMgYXJlIGRpdmlkZWQgaW50bworICogZ3JvdXBzLCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIHN0cmVhbXMgYW5kIGZsYWdzIChIVDQwLCBTR0kpIHRoYXQgdGhleQorICogdXNlLgorICovCitjb25zdCBzdHJ1Y3QgbWNzX2dyb3VwIG1pbnN0cmVsX21jc19ncm91cHNbXSA9IHsKKwlNQ1NfR1JPVVAoMSwgMCwgMCksCisJTUNTX0dST1VQKDIsIDAsIDApLAorI2lmIE1JTlNUUkVMX01BWF9TVFJFQU1TID49IDMKKwlNQ1NfR1JPVVAoMywgMCwgMCksCisjZW5kaWYKKworCU1DU19HUk9VUCgxLCAxLCAwKSwKKwlNQ1NfR1JPVVAoMiwgMSwgMCksCisjaWYgTUlOU1RSRUxfTUFYX1NUUkVBTVMgPj0gMworCU1DU19HUk9VUCgzLCAxLCAwKSwKKyNlbmRpZgorCisJTUNTX0dST1VQKDEsIDAsIDEpLAorCU1DU19HUk9VUCgyLCAwLCAxKSwKKyNpZiBNSU5TVFJFTF9NQVhfU1RSRUFNUyA+PSAzCisJTUNTX0dST1VQKDMsIDAsIDEpLAorI2VuZGlmCisKKwlNQ1NfR1JPVVAoMSwgMSwgMSksCisJTUNTX0dST1VQKDIsIDEsIDEpLAorI2lmIE1JTlNUUkVMX01BWF9TVFJFQU1TID49IDMKKwlNQ1NfR1JPVVAoMywgMSwgMSksCisjZW5kaWYKK307CisKK3N0YXRpYyB1OCBzYW1wbGVfdGFibGVbU0FNUExFX0NPTFVNTlNdW01DU19HUk9VUF9SQVRFU107CisKKy8qCisgKiBQZXJmb3JtIEVXTUEgKEV4cG9uZW50aWFsbHkgV2VpZ2h0ZWQgTW92aW5nIEF2ZXJhZ2UpIGNhbGN1bGF0aW9uCisgKi8KK3N0YXRpYyBpbnQKK21pbnN0cmVsX2V3bWEoaW50IG9sZCwgaW50IG5ldywgaW50IHdlaWdodCkKK3sKKwlyZXR1cm4gKG5ldyAqICgxMDAgLSB3ZWlnaHQpICsgb2xkICogd2VpZ2h0KSAvIDEwMDsKK30KKworLyoKKyAqIExvb2sgdXAgYW4gTUNTIGdyb3VwIGluZGV4IGJhc2VkIG9uIG1hYzgwMjExIHJhdGUgaW5mb3JtYXRpb24KKyAqLworc3RhdGljIGludAorbWluc3RyZWxfaHRfZ2V0X2dyb3VwX2lkeChzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGUpCit7CisJaW50IHN0cmVhbXMgPSAocmF0ZS0+aWR4IC8gTUNTX0dST1VQX1JBVEVTKSArIDE7CisJdTMyIGZsYWdzID0gSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJIHwgSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1pbnN0cmVsX21jc19ncm91cHMpOyBpKyspIHsKKwkJaWYgKG1pbnN0cmVsX21jc19ncm91cHNbaV0uc3RyZWFtcyAhPSBzdHJlYW1zKQorCQkJY29udGludWU7CisJCWlmIChtaW5zdHJlbF9tY3NfZ3JvdXBzW2ldLmZsYWdzICE9IChyYXRlLT5mbGFncyAmIGZsYWdzKSkKKwkJCWNvbnRpbnVlOworCisJCXJldHVybiBpOworCX0KKworCVdBUk5fT04oMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1pbnN0cmVsX3JhdGVfc3RhdHMgKgorbWluc3RyZWxfZ2V0X3JhdGVzdGF0cyhzdHJ1Y3QgbWluc3RyZWxfaHRfc3RhICptaSwgaW50IGluZGV4KQoreworCXJldHVybiAmbWktPmdyb3Vwc1tpbmRleCAvIE1DU19HUk9VUF9SQVRFU10ucmF0ZXNbaW5kZXggJSBNQ1NfR1JPVVBfUkFURVNdOworfQorCisKKy8qCisgKiBSZWNhbGN1bGF0ZSBzdWNjZXNzIHByb2JhYmlsaXRpZXMgYW5kIGNvdW50ZXJzIGZvciBhIHJhdGUgdXNpbmcgRVdNQQorICovCitzdGF0aWMgdm9pZAorbWluc3RyZWxfY2FsY19yYXRlX2V3bWEoc3RydWN0IG1pbnN0cmVsX3ByaXYgKm1wLCBzdHJ1Y3QgbWluc3RyZWxfcmF0ZV9zdGF0cyAqbXIpCit7CisJaWYgKHVubGlrZWx5KG1yLT5hdHRlbXB0cyA+IDApKSB7CisJCW1yLT5zYW1wbGVfc2tpcHBlZCA9IDA7CisJCW1yLT5jdXJfcHJvYiA9IE1JTlNUUkVMX0ZSQUMobXItPnN1Y2Nlc3MsIG1yLT5hdHRlbXB0cyk7CisJCWlmICghbXItPmF0dF9oaXN0KQorCQkJbXItPnByb2JhYmlsaXR5ID0gbXItPmN1cl9wcm9iOworCQllbHNlCisJCQltci0+cHJvYmFiaWxpdHkgPSBtaW5zdHJlbF9ld21hKG1yLT5wcm9iYWJpbGl0eSwKKwkJCQltci0+Y3VyX3Byb2IsIEVXTUFfTEVWRUwpOworCQltci0+YXR0X2hpc3QgKz0gbXItPmF0dGVtcHRzOworCQltci0+c3VjY19oaXN0ICs9IG1yLT5zdWNjZXNzOworCX0gZWxzZSB7CisJCW1yLT5zYW1wbGVfc2tpcHBlZCsrOworCX0KKwltci0+bGFzdF9zdWNjZXNzID0gbXItPnN1Y2Nlc3M7CisJbXItPmxhc3RfYXR0ZW1wdHMgPSBtci0+YXR0ZW1wdHM7CisJbXItPnN1Y2Nlc3MgPSAwOworCW1yLT5hdHRlbXB0cyA9IDA7Cit9CisKKy8qCisgKiBDYWxjdWxhdGUgdGhyb3VnaHB1dCBiYXNlZCBvbiB0aGUgYXZlcmFnZSBBLU1QRFUgbGVuZ3RoLCB0YWtpbmcgaW50byBhY2NvdW50CisgKiB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIHJldHJhbnNtaXNzaW9ucyBhbmQgdGhlaXIgZXhwZWN0ZWQgbGVuZ3RoCisgKi8KK3N0YXRpYyB2b2lkCittaW5zdHJlbF9odF9jYWxjX3RwKHN0cnVjdCBtaW5zdHJlbF9wcml2ICptcCwgc3RydWN0IG1pbnN0cmVsX2h0X3N0YSAqbWksCisgICAgICAgICAgICAgICAgICAgIGludCBncm91cCwgaW50IHJhdGUpCit7CisJc3RydWN0IG1pbnN0cmVsX3JhdGVfc3RhdHMgKm1yOworCXVuc2lnbmVkIGludCB1c2VjczsKKworCW1yID0gJm1pLT5ncm91cHNbZ3JvdXBdLnJhdGVzW3JhdGVdOworCisJaWYgKG1yLT5wcm9iYWJpbGl0eSA8IE1JTlNUUkVMX0ZSQUMoMSwgMTApKSB7CisJCW1yLT5jdXJfdHAgPSAwOworCQlyZXR1cm47CisJfQorCisJdXNlY3MgPSBtaS0+b3ZlcmhlYWQgLyBNSU5TVFJFTF9UUlVOQyhtaS0+YXZnX2FtcGR1X2xlbik7CisJdXNlY3MgKz0gbWluc3RyZWxfbWNzX2dyb3Vwc1tncm91cF0uZHVyYXRpb25bcmF0ZV07CisJbXItPmN1cl90cCA9IE1JTlNUUkVMX1RSVU5DKCgxMDAwMDAwIC8gdXNlY3MpICogbXItPnByb2JhYmlsaXR5KTsKK30KKworLyoKKyAqIFVwZGF0ZSByYXRlIHN0YXRpc3RpY3MgYW5kIHNlbGVjdCBuZXcgcHJpbWFyeSByYXRlcworICoKKyAqIFJ1bGVzIGZvciByYXRlIHNlbGVjdGlvbjoKKyAqICAtIG1heF9wcm9iX3JhdGUgbXVzdCB1c2Ugb25seSBvbmUgc3RyZWFtLCBhcyBhIHRyYWRlb2ZmIGJldHdlZW4gZGVsaXZlcnkKKyAqICAgIHByb2JhYmlsaXR5IGFuZCB0aHJvdWdocHV0IGR1cmluZyBzdHJvbmcgZmx1Y3R1YXRpb25zCisgKiAgLSBhcyBsb25nIGFzIHRoZSBtYXggcHJvYiByYXRlIGhhcyBhIHByb2JhYmlsaXR5IG9mIG1vcmUgdGhhbiAzLzQsIHBpY2sKKyAqICAgIGhpZ2hlciB0aHJvdWdocHV0IHJhdGVzLCBldmVuIGlmIHRoZSBwcm9iYWJsaXR5IGlzIGEgYml0IGxvd2VyCisgKi8KK3N0YXRpYyB2b2lkCittaW5zdHJlbF9odF91cGRhdGVfc3RhdHMoc3RydWN0IG1pbnN0cmVsX3ByaXYgKm1wLCBzdHJ1Y3QgbWluc3RyZWxfaHRfc3RhICptaSkKK3sKKwlzdHJ1Y3QgbWluc3RyZWxfbWNzX2dyb3VwX2RhdGEgKm1nOworCXN0cnVjdCBtaW5zdHJlbF9yYXRlX3N0YXRzICptcjsKKwlpbnQgY3VyX3Byb2IsIGN1cl9wcm9iX3RwLCBjdXJfdHAsIGN1cl90cDI7CisJaW50IGdyb3VwLCBpLCBpbmRleDsKKworCWlmIChtaS0+YW1wZHVfcGFja2V0cyA+IDApIHsKKwkJbWktPmF2Z19hbXBkdV9sZW4gPSBtaW5zdHJlbF9ld21hKG1pLT5hdmdfYW1wZHVfbGVuLAorCQkJTUlOU1RSRUxfRlJBQyhtaS0+YW1wZHVfbGVuLCBtaS0+YW1wZHVfcGFja2V0cyksIEVXTUFfTEVWRUwpOworCQltaS0+YW1wZHVfbGVuID0gMDsKKwkJbWktPmFtcGR1X3BhY2tldHMgPSAwOworCX0KKworCW1pLT5zYW1wbGVfc2xvdyA9IDA7CisJbWktPnNhbXBsZV9jb3VudCA9IDA7CisJbWktPm1heF90cF9yYXRlID0gMDsKKwltaS0+bWF4X3RwX3JhdGUyID0gMDsKKwltaS0+bWF4X3Byb2JfcmF0ZSA9IDA7CisKKwlmb3IgKGdyb3VwID0gMDsgZ3JvdXAgPCBBUlJBWV9TSVpFKG1pbnN0cmVsX21jc19ncm91cHMpOyBncm91cCsrKSB7CisJCWN1cl9wcm9iID0gMDsKKwkJY3VyX3Byb2JfdHAgPSAwOworCQljdXJfdHAgPSAwOworCQljdXJfdHAyID0gMDsKKworCQltZyA9ICZtaS0+Z3JvdXBzW2dyb3VwXTsKKwkJaWYgKCFtZy0+c3VwcG9ydGVkKQorCQkJY29udGludWU7CisKKwkJbWctPm1heF90cF9yYXRlID0gMDsKKwkJbWctPm1heF90cF9yYXRlMiA9IDA7CisJCW1nLT5tYXhfcHJvYl9yYXRlID0gMDsKKwkJbWktPnNhbXBsZV9jb3VudCsrOworCisJCWZvciAoaSA9IDA7IGkgPCBNQ1NfR1JPVVBfUkFURVM7IGkrKykgeworCQkJaWYgKCEobWctPnN1cHBvcnRlZCAmIEJJVChpKSkpCisJCQkJY29udGludWU7CisKKwkJCW1yID0gJm1nLT5yYXRlc1tpXTsKKwkJCW1yLT5yZXRyeV91cGRhdGVkID0gZmFsc2U7CisJCQlpbmRleCA9IE1DU19HUk9VUF9SQVRFUyAqIGdyb3VwICsgaTsKKwkJCW1pbnN0cmVsX2NhbGNfcmF0ZV9ld21hKG1wLCBtcik7CisJCQltaW5zdHJlbF9odF9jYWxjX3RwKG1wLCBtaSwgZ3JvdXAsIGkpOworCisJCQlpZiAoIW1yLT5jdXJfdHApCisJCQkJY29udGludWU7CisKKwkJCS8qIGlnbm9yZSB0aGUgbG93ZXN0IHJhdGUgb2YgZWFjaCBzaW5nbGUtc3RyZWFtIGdyb3VwICovCisJCQlpZiAoIWkgJiYgbWluc3RyZWxfbWNzX2dyb3Vwc1tncm91cF0uc3RyZWFtcyA9PSAxKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoKG1yLT5jdXJfdHAgPiBjdXJfcHJvYl90cCAmJiBtci0+cHJvYmFiaWxpdHkgPgorCQkJICAgICBNSU5TVFJFTF9GUkFDKDMsIDQpKSB8fCBtci0+cHJvYmFiaWxpdHkgPiBjdXJfcHJvYikgeworCQkJCW1nLT5tYXhfcHJvYl9yYXRlID0gaW5kZXg7CisJCQkJY3VyX3Byb2IgPSBtci0+cHJvYmFiaWxpdHk7CisJCQkJY3VyX3Byb2JfdHAgPSBtci0+Y3VyX3RwOworCQkJfQorCisJCQlpZiAobXItPmN1cl90cCA+IGN1cl90cCkgeworCQkJCXN3YXAoaW5kZXgsIG1nLT5tYXhfdHBfcmF0ZSk7CisJCQkJY3VyX3RwID0gbXItPmN1cl90cDsKKwkJCQltciA9IG1pbnN0cmVsX2dldF9yYXRlc3RhdHMobWksIGluZGV4KTsKKwkJCX0KKworCQkJaWYgKGluZGV4ID49IG1nLT5tYXhfdHBfcmF0ZSkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKG1yLT5jdXJfdHAgPiBjdXJfdHAyKSB7CisJCQkJbWctPm1heF90cF9yYXRlMiA9IGluZGV4OworCQkJCWN1cl90cDIgPSBtci0+Y3VyX3RwOworCQkJfQorCQl9CisJfQorCisJLyogdHJ5IHRvIHNhbXBsZSB1cCB0byBoYWxmIG9mIHRoZSBhdmFpbGJsZSByYXRlcyBkdXJpbmcgZWFjaCBpbnRlcnZhbCAqLworCW1pLT5zYW1wbGVfY291bnQgKj0gNDsKKworCWN1cl9wcm9iID0gMDsKKwljdXJfcHJvYl90cCA9IDA7CisJY3VyX3RwID0gMDsKKwljdXJfdHAyID0gMDsKKwlmb3IgKGdyb3VwID0gMDsgZ3JvdXAgPCBBUlJBWV9TSVpFKG1pbnN0cmVsX21jc19ncm91cHMpOyBncm91cCsrKSB7CisJCW1nID0gJm1pLT5ncm91cHNbZ3JvdXBdOworCQlpZiAoIW1nLT5zdXBwb3J0ZWQpCisJCQljb250aW51ZTsKKworCQltciA9IG1pbnN0cmVsX2dldF9yYXRlc3RhdHMobWksIG1nLT5tYXhfcHJvYl9yYXRlKTsKKwkJaWYgKGN1cl9wcm9iX3RwIDwgbXItPmN1cl90cCAmJgorCQkgICAgbWluc3RyZWxfbWNzX2dyb3Vwc1tncm91cF0uc3RyZWFtcyA9PSAxKSB7CisJCQltaS0+bWF4X3Byb2JfcmF0ZSA9IG1nLT5tYXhfcHJvYl9yYXRlOworCQkJY3VyX3Byb2IgPSBtci0+Y3VyX3Byb2I7CisJCQljdXJfcHJvYl90cCA9IG1yLT5jdXJfdHA7CisJCX0KKworCQltciA9IG1pbnN0cmVsX2dldF9yYXRlc3RhdHMobWksIG1nLT5tYXhfdHBfcmF0ZSk7CisJCWlmIChjdXJfdHAgPCBtci0+Y3VyX3RwKSB7CisJCQltaS0+bWF4X3RwX3JhdGUgPSBtZy0+bWF4X3RwX3JhdGU7CisJCQljdXJfdHAgPSBtci0+Y3VyX3RwOworCQl9CisKKwkJbXIgPSBtaW5zdHJlbF9nZXRfcmF0ZXN0YXRzKG1pLCBtZy0+bWF4X3RwX3JhdGUyKTsKKwkJaWYgKGN1cl90cDIgPCBtci0+Y3VyX3RwKSB7CisJCQltaS0+bWF4X3RwX3JhdGUyID0gbWctPm1heF90cF9yYXRlMjsKKwkJCWN1cl90cDIgPSBtci0+Y3VyX3RwOworCQl9CisJfQorCisJbWktPnN0YXRzX3VwZGF0ZSA9IGppZmZpZXM7Cit9CisKK3N0YXRpYyBib29sCittaW5zdHJlbF9odF90eHN0YXRfdmFsaWQoc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlKQoreworCWlmICghcmF0ZS0+Y291bnQpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChyYXRlLT5pZHggPCAwKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gISEocmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfTUNTKTsKK30KKworc3RhdGljIHZvaWQKK21pbnN0cmVsX25leHRfc2FtcGxlX2lkeChzdHJ1Y3QgbWluc3RyZWxfaHRfc3RhICptaSkKK3sKKwlzdHJ1Y3QgbWluc3RyZWxfbWNzX2dyb3VwX2RhdGEgKm1nOworCisJZm9yICg7OykgeworCQltaS0+c2FtcGxlX2dyb3VwKys7CisJCW1pLT5zYW1wbGVfZ3JvdXAgJT0gQVJSQVlfU0laRShtaW5zdHJlbF9tY3NfZ3JvdXBzKTsKKwkJbWcgPSAmbWktPmdyb3Vwc1ttaS0+c2FtcGxlX2dyb3VwXTsKKworCQlpZiAoIW1nLT5zdXBwb3J0ZWQpCisJCQljb250aW51ZTsKKworCQlpZiAoKyttZy0+aW5kZXggPj0gTUNTX0dST1VQX1JBVEVTKSB7CisJCQltZy0+aW5kZXggPSAwOworCQkJaWYgKCsrbWctPmNvbHVtbiA+PSBBUlJBWV9TSVpFKHNhbXBsZV90YWJsZSkpCisJCQkJbWctPmNvbHVtbiA9IDA7CisJCX0KKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZAorbWluc3RyZWxfZG93bmdyYWRlX3JhdGUoc3RydWN0IG1pbnN0cmVsX2h0X3N0YSAqbWksIHVuc2lnbmVkIGludCAqaWR4LAorCQkJYm9vbCBwcmltYXJ5KQoreworCWludCBncm91cCwgb3JpZ19ncm91cDsKKworCW9yaWdfZ3JvdXAgPSBncm91cCA9ICppZHggLyBNQ1NfR1JPVVBfUkFURVM7CisJd2hpbGUgKGdyb3VwID4gMCkgeworCQlncm91cC0tOworCisJCWlmICghbWktPmdyb3Vwc1tncm91cF0uc3VwcG9ydGVkKQorCQkJY29udGludWU7CisKKwkJaWYgKG1pbnN0cmVsX21jc19ncm91cHNbZ3JvdXBdLnN0cmVhbXMgPgorCQkgICAgbWluc3RyZWxfbWNzX2dyb3Vwc1tvcmlnX2dyb3VwXS5zdHJlYW1zKQorCQkJY29udGludWU7CisKKwkJaWYgKHByaW1hcnkpCisJCQkqaWR4ID0gbWktPmdyb3Vwc1tncm91cF0ubWF4X3RwX3JhdGU7CisJCWVsc2UKKwkJCSppZHggPSBtaS0+Z3JvdXBzW2dyb3VwXS5tYXhfdHBfcmF0ZTI7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK21pbnN0cmVsX2FnZ3JfY2hlY2soc3RydWN0IG1pbnN0cmVsX3ByaXYgKm1wLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gY29udGFpbmVyX29mKHB1YnN0YSwgc3RydWN0IHN0YV9pbmZvLCBzdGEpOworCXUxNiB0aWQ7CisKKwlpZiAodW5saWtlbHkoIWllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItPmZyYW1lX2NvbnRyb2wpKSkKKwkJcmV0dXJuOworCisJaWYgKHVubGlrZWx5KHNrYi0+cHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfUEFFKSkpCisJCXJldHVybjsKKworCXRpZCA9ICppZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOworCWlmIChsaWtlbHkoc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdKSkKKwkJcmV0dXJuOworCisJaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24ocHVic3RhLCB0aWQpOworfQorCitzdGF0aWMgdm9pZAorbWluc3RyZWxfaHRfdHhfc3RhdHVzKHZvaWQgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHZvaWQgKnByaXZfc3RhLAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG1pbnN0cmVsX2h0X3N0YV9wcml2ICptc3AgPSBwcml2X3N0YTsKKwlzdHJ1Y3QgbWluc3RyZWxfaHRfc3RhICptaSA9ICZtc3AtPmh0OworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKmFyID0gaW5mby0+c3RhdHVzLnJhdGVzOworCXN0cnVjdCBtaW5zdHJlbF9yYXRlX3N0YXRzICpyYXRlLCAqcmF0ZTI7CisJc3RydWN0IG1pbnN0cmVsX3ByaXYgKm1wID0gcHJpdjsKKwlib29sIGxhc3QgPSBmYWxzZTsKKwlpbnQgZ3JvdXA7CisJaW50IGkgPSAwOworCisJaWYgKCFtc3AtPmlzX2h0KQorCQlyZXR1cm4gbWFjODAyMTFfbWluc3RyZWwudHhfc3RhdHVzKHByaXYsIHNiYW5kLCBzdGEsICZtc3AtPmxlZ2FjeSwgc2tiKTsKKworCS8qIFRoaXMgcGFja2V0IHdhcyBhZ2dyZWdhdGVkIGJ1dCBkb2Vzbid0IGNhcnJ5IHN0YXR1cyBpbmZvICovCisJaWYgKChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpICYmCisJICAgICEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVSkpCisJCXJldHVybjsKKworCWlmICghaW5mby0+c3RhdHVzLmFtcGR1X2xlbikgeworCQlpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX2xlbiA9IDE7CisJCWluZm8tPnN0YXR1cy5hbXBkdV9sZW4gPSAxOworCX0KKworCW1pLT5hbXBkdV9wYWNrZXRzKys7CisJbWktPmFtcGR1X2xlbiArPSBpbmZvLT5zdGF0dXMuYW1wZHVfbGVuOworCisJaWYgKCFtaS0+c2FtcGxlX3dhaXQgJiYgIW1pLT5zYW1wbGVfdHJpZXMgJiYgbWktPnNhbXBsZV9jb3VudCA+IDApIHsKKwkJbWktPnNhbXBsZV93YWl0ID0gNCArIDIgKiBNSU5TVFJFTF9UUlVOQyhtaS0+YXZnX2FtcGR1X2xlbik7CisJCW1pLT5zYW1wbGVfdHJpZXMgPSAzOworCQltaS0+c2FtcGxlX2NvdW50LS07CisJfQorCisJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9SQVRFX0NUUkxfUFJPQkUpIHsKKwkJbWktPnNhbXBsZV9wYWNrZXRzICs9IGluZm8tPnN0YXR1cy5hbXBkdV9sZW47CisJCW1pbnN0cmVsX25leHRfc2FtcGxlX2lkeChtaSk7CisJfQorCisJZm9yIChpID0gMDsgIWxhc3Q7IGkrKykgeworCQlsYXN0ID0gKGkgPT0gSUVFRTgwMjExX1RYX01BWF9SQVRFUyAtIDEpIHx8CisJCSAgICAgICAhbWluc3RyZWxfaHRfdHhzdGF0X3ZhbGlkKCZhcltpICsgMV0pOworCisJCWlmICghbWluc3RyZWxfaHRfdHhzdGF0X3ZhbGlkKCZhcltpXSkpCisJCQlicmVhazsKKworCQlncm91cCA9IG1pbnN0cmVsX2h0X2dldF9ncm91cF9pZHgoJmFyW2ldKTsKKwkJcmF0ZSA9ICZtaS0+Z3JvdXBzW2dyb3VwXS5yYXRlc1thcltpXS5pZHggJSA4XTsKKworCQlpZiAobGFzdCAmJiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BQ0spKQorCQkJcmF0ZS0+c3VjY2VzcyArPSBpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX2xlbjsKKworCQlyYXRlLT5hdHRlbXB0cyArPSBhcltpXS5jb3VudCAqIGluZm8tPnN0YXR1cy5hbXBkdV9sZW47CisJfQorCisJLyoKKwkgKiBjaGVjayBmb3Igc3VkZGVuIGRlYXRoIG9mIHNwYXRpYWwgbXVsdGlwbGV4aW5nLAorCSAqIGRvd25ncmFkZSB0byBhIGxvd2VyIG51bWJlciBvZiBzdHJlYW1zIGlmIG5lY2Vzc2FyeS4KKwkgKi8KKwlyYXRlID0gbWluc3RyZWxfZ2V0X3JhdGVzdGF0cyhtaSwgbWktPm1heF90cF9yYXRlKTsKKwlpZiAocmF0ZS0+YXR0ZW1wdHMgPiAzMCAmJgorCSAgICBNSU5TVFJFTF9GUkFDKHJhdGUtPnN1Y2Nlc3MsIHJhdGUtPmF0dGVtcHRzKSA8CisJICAgIE1JTlNUUkVMX0ZSQUMoMjAsIDEwMCkpCisJCW1pbnN0cmVsX2Rvd25ncmFkZV9yYXRlKG1pLCAmbWktPm1heF90cF9yYXRlLCB0cnVlKTsKKworCXJhdGUyID0gbWluc3RyZWxfZ2V0X3JhdGVzdGF0cyhtaSwgbWktPm1heF90cF9yYXRlMik7CisJaWYgKHJhdGUyLT5hdHRlbXB0cyA+IDMwICYmCisJICAgIE1JTlNUUkVMX0ZSQUMocmF0ZTItPnN1Y2Nlc3MsIHJhdGUyLT5hdHRlbXB0cykgPAorCSAgICBNSU5TVFJFTF9GUkFDKDIwLCAxMDApKQorCQltaW5zdHJlbF9kb3duZ3JhZGVfcmF0ZShtaSwgJm1pLT5tYXhfdHBfcmF0ZTIsIGZhbHNlKTsKKworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG1pLT5zdGF0c191cGRhdGUgKyAobXAtPnVwZGF0ZV9pbnRlcnZhbCAvIDIgKiBIWikgLyAxMDAwKSkgeworCQltaW5zdHJlbF9odF91cGRhdGVfc3RhdHMobXAsIG1pKTsKKwkJbWluc3RyZWxfYWdncl9jaGVjayhtcCwgc3RhLCBza2IpOworCX0KK30KKworc3RhdGljIHZvaWQKK21pbnN0cmVsX2NhbGNfcmV0cmFuc21pdChzdHJ1Y3QgbWluc3RyZWxfcHJpdiAqbXAsIHN0cnVjdCBtaW5zdHJlbF9odF9zdGEgKm1pLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgbWluc3RyZWxfcmF0ZV9zdGF0cyAqbXI7CisJY29uc3Qgc3RydWN0IG1jc19ncm91cCAqZ3JvdXA7CisJdW5zaWduZWQgaW50IHR4X3RpbWUsIHR4X3RpbWVfcnRzY3RzLCB0eF90aW1lX2RhdGE7CisJdW5zaWduZWQgaW50IGN3ID0gbXAtPmN3X21pbjsKKwl1bnNpZ25lZCBpbnQgdF9zbG90ID0gOTsgLyogRklYTUUgKi8KKwl1bnNpZ25lZCBpbnQgYW1wZHVfbGVuID0gTUlOU1RSRUxfVFJVTkMobWktPmF2Z19hbXBkdV9sZW4pOworCisJbXIgPSBtaW5zdHJlbF9nZXRfcmF0ZXN0YXRzKG1pLCBpbmRleCk7CisJaWYgKG1yLT5wcm9iYWJpbGl0eSA8IE1JTlNUUkVMX0ZSQUMoMSwgMTApKSB7CisJCW1yLT5yZXRyeV9jb3VudCA9IDE7CisJCW1yLT5yZXRyeV9jb3VudF9ydHNjdHMgPSAxOworCQlyZXR1cm47CisJfQorCisJbXItPnJldHJ5X2NvdW50ID0gMjsKKwltci0+cmV0cnlfY291bnRfcnRzY3RzID0gMjsKKwltci0+cmV0cnlfdXBkYXRlZCA9IHRydWU7CisKKwlncm91cCA9ICZtaW5zdHJlbF9tY3NfZ3JvdXBzW2luZGV4IC8gTUNTX0dST1VQX1JBVEVTXTsKKwl0eF90aW1lX2RhdGEgPSBncm91cC0+ZHVyYXRpb25baW5kZXggJSBNQ1NfR1JPVVBfUkFURVNdICogYW1wZHVfbGVuOworCXR4X3RpbWUgPSAyICogKHRfc2xvdCArIG1pLT5vdmVyaGVhZCArIHR4X3RpbWVfZGF0YSk7CisJdHhfdGltZV9ydHNjdHMgPSAyICogKHRfc2xvdCArIG1pLT5vdmVyaGVhZF9ydHNjdHMgKyB0eF90aW1lX2RhdGEpOworCWRvIHsKKwkJY3cgPSAoY3cgPDwgMSkgfCAxOworCQljdyA9IG1pbihjdywgbXAtPmN3X21heCk7CisJCXR4X3RpbWUgKz0gY3cgKyB0X3Nsb3QgKyBtaS0+b3ZlcmhlYWQ7CisJCXR4X3RpbWVfcnRzY3RzICs9IGN3ICsgdF9zbG90ICsgbWktPm92ZXJoZWFkX3J0c2N0czsKKwkJaWYgKHR4X3RpbWVfcnRzY3RzIDwgbXAtPnNlZ21lbnRfc2l6ZSkKKwkJCW1yLT5yZXRyeV9jb3VudF9ydHNjdHMrKzsKKwl9IHdoaWxlICgodHhfdGltZSA8IG1wLT5zZWdtZW50X3NpemUpICYmCisJICAgICAgICAgKCsrbXItPnJldHJ5X2NvdW50IDwgbXAtPm1heF9yZXRyeSkpOworfQorCisKK3N0YXRpYyB2b2lkCittaW5zdHJlbF9odF9zZXRfcmF0ZShzdHJ1Y3QgbWluc3RyZWxfcHJpdiAqbXAsIHN0cnVjdCBtaW5zdHJlbF9odF9zdGEgKm1pLAorICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlLCBpbnQgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGVfY29udHJvbCAqdHhyYywKKyAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2FtcGxlLCBib29sIHJ0c2N0cykKK3sKKwljb25zdCBzdHJ1Y3QgbWNzX2dyb3VwICpncm91cCA9ICZtaW5zdHJlbF9tY3NfZ3JvdXBzW2luZGV4IC8gTUNTX0dST1VQX1JBVEVTXTsKKwlzdHJ1Y3QgbWluc3RyZWxfcmF0ZV9zdGF0cyAqbXI7CisKKwltciA9IG1pbnN0cmVsX2dldF9yYXRlc3RhdHMobWksIGluZGV4KTsKKwlpZiAoIW1yLT5yZXRyeV91cGRhdGVkKQorCQltaW5zdHJlbF9jYWxjX3JldHJhbnNtaXQobXAsIG1pLCBpbmRleCk7CisKKwlpZiAobXItPnByb2JhYmlsaXR5IDwgTUlOU1RSRUxfRlJBQygyMCwgMTAwKSkKKwkJcmF0ZS0+Y291bnQgPSAyOworCWVsc2UgaWYgKHJ0c2N0cykKKwkJcmF0ZS0+Y291bnQgPSBtci0+cmV0cnlfY291bnRfcnRzY3RzOworCWVsc2UKKwkJcmF0ZS0+Y291bnQgPSBtci0+cmV0cnlfY291bnQ7CisKKwlyYXRlLT5mbGFncyA9IElFRUU4MDIxMV9UWF9SQ19NQ1MgfCBncm91cC0+ZmxhZ3M7CisJaWYgKHR4cmMtPnNob3J0X3ByZWFtYmxlKQorCQlyYXRlLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFOworCWlmICh0eHJjLT5ydHMgfHwgcnRzY3RzKQorCQlyYXRlLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFM7CisJcmF0ZS0+aWR4ID0gaW5kZXggJSBNQ1NfR1JPVVBfUkFURVMgKyAoZ3JvdXAtPnN0cmVhbXMgLSAxKSAqIE1DU19HUk9VUF9SQVRFUzsKK30KKworc3RhdGljIGlubGluZSBpbnQKK21pbnN0cmVsX2dldF9kdXJhdGlvbihpbnQgaW5kZXgpCit7CisJY29uc3Qgc3RydWN0IG1jc19ncm91cCAqZ3JvdXAgPSAmbWluc3RyZWxfbWNzX2dyb3Vwc1tpbmRleCAvIE1DU19HUk9VUF9SQVRFU107CisJcmV0dXJuIGdyb3VwLT5kdXJhdGlvbltpbmRleCAlIE1DU19HUk9VUF9SQVRFU107Cit9CisKK3N0YXRpYyBpbnQKK21pbnN0cmVsX2dldF9zYW1wbGVfcmF0ZShzdHJ1Y3QgbWluc3RyZWxfcHJpdiAqbXAsIHN0cnVjdCBtaW5zdHJlbF9odF9zdGEgKm1pKQoreworCXN0cnVjdCBtaW5zdHJlbF9yYXRlX3N0YXRzICptcjsKKwlzdHJ1Y3QgbWluc3RyZWxfbWNzX2dyb3VwX2RhdGEgKm1nOworCWludCBzYW1wbGVfaWR4ID0gMDsKKworCWlmIChtaS0+c2FtcGxlX3dhaXQgPiAwKSB7CisJCW1pLT5zYW1wbGVfd2FpdC0tOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKCFtaS0+c2FtcGxlX3RyaWVzKQorCQlyZXR1cm4gLTE7CisKKwltaS0+c2FtcGxlX3RyaWVzLS07CisJbWcgPSAmbWktPmdyb3Vwc1ttaS0+c2FtcGxlX2dyb3VwXTsKKwlzYW1wbGVfaWR4ID0gc2FtcGxlX3RhYmxlW21nLT5jb2x1bW5dW21nLT5pbmRleF07CisJbXIgPSAmbWctPnJhdGVzW3NhbXBsZV9pZHhdOworCXNhbXBsZV9pZHggKz0gbWktPnNhbXBsZV9ncm91cCAqIE1DU19HUk9VUF9SQVRFUzsKKworCS8qCisJICogV2hlbiBub3QgdXNpbmcgTVJSLCBkbyBub3Qgc2FtcGxlIGlmIHRoZSBwcm9iYWJpbGl0eSBpcyBhbHJlYWR5CisJICogaGlnaGVyIHRoYW4gOTUlIHRvIGF2b2lkIHdhc3RpbmcgYWlydGltZQorCSAqLworCWlmICghbXAtPmhhc19tcnIgJiYgKG1yLT5wcm9iYWJpbGl0eSA+IE1JTlNUUkVMX0ZSQUMoOTUsIDEwMCkpKQorCQlnb3RvIG5leHQ7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGF0IGxvd2VyIHJhdGVzIGdldCBzYW1wbGVkIG9ubHkgb2NjYXNpb25hbGx5LAorCSAqIGlmIHRoZSBsaW5rIGlzIHdvcmtpbmcgcGVyZmVjdGx5LgorCSAqLworCWlmIChtaW5zdHJlbF9nZXRfZHVyYXRpb24oc2FtcGxlX2lkeCkgPgorCSAgICBtaW5zdHJlbF9nZXRfZHVyYXRpb24obWktPm1heF90cF9yYXRlKSkgeworCQlpZiAobXItPnNhbXBsZV9za2lwcGVkIDwgMTApCisJCQlnb3RvIG5leHQ7CisKKwkJaWYgKG1pLT5zYW1wbGVfc2xvdysrID4gMikKKwkJCWdvdG8gbmV4dDsKKwl9CisKKwlyZXR1cm4gc2FtcGxlX2lkeDsKKworbmV4dDoKKwltaW5zdHJlbF9uZXh0X3NhbXBsZV9pZHgobWkpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQKK21pbnN0cmVsX2h0X2dldF9yYXRlKHZvaWQgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHZvaWQgKnByaXZfc3RhLAorICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlX2NvbnRyb2wgKnR4cmMpCit7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQih0eHJjLT5za2IpOworCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqYXIgPSBpbmZvLT5zdGF0dXMucmF0ZXM7CisJc3RydWN0IG1pbnN0cmVsX2h0X3N0YV9wcml2ICptc3AgPSBwcml2X3N0YTsKKwlzdHJ1Y3QgbWluc3RyZWxfaHRfc3RhICptaSA9ICZtc3AtPmh0OworCXN0cnVjdCBtaW5zdHJlbF9wcml2ICptcCA9IHByaXY7CisJaW50IHNhbXBsZV9pZHg7CisKKwlpZiAocmF0ZV9jb250cm9sX3NlbmRfbG93KHN0YSwgcHJpdl9zdGEsIHR4cmMpKQorCQlyZXR1cm47CisKKwlpZiAoIW1zcC0+aXNfaHQpCisJCXJldHVybiBtYWM4MDIxMV9taW5zdHJlbC5nZXRfcmF0ZShwcml2LCBzdGEsICZtc3AtPmxlZ2FjeSwgdHhyYyk7CisKKwlpbmZvLT5mbGFncyB8PSBtaS0+dHhfZmxhZ3M7CisJc2FtcGxlX2lkeCA9IG1pbnN0cmVsX2dldF9zYW1wbGVfcmF0ZShtcCwgbWkpOworCWlmIChzYW1wbGVfaWR4ID49IDApIHsKKwkJbWluc3RyZWxfaHRfc2V0X3JhdGUobXAsIG1pLCAmYXJbMF0sIHNhbXBsZV9pZHgsCisJCQl0eHJjLCB0cnVlLCBmYWxzZSk7CisJCW1pbnN0cmVsX2h0X3NldF9yYXRlKG1wLCBtaSwgJmFyWzFdLCBtaS0+bWF4X3RwX3JhdGUsCisJCQl0eHJjLCBmYWxzZSwgdHJ1ZSk7CisJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfUkFURV9DVFJMX1BST0JFOworCX0gZWxzZSB7CisJCW1pbnN0cmVsX2h0X3NldF9yYXRlKG1wLCBtaSwgJmFyWzBdLCBtaS0+bWF4X3RwX3JhdGUsCisJCQl0eHJjLCBmYWxzZSwgZmFsc2UpOworCQltaW5zdHJlbF9odF9zZXRfcmF0ZShtcCwgbWksICZhclsxXSwgbWktPm1heF90cF9yYXRlMiwKKwkJCXR4cmMsIGZhbHNlLCB0cnVlKTsKKwl9CisJbWluc3RyZWxfaHRfc2V0X3JhdGUobXAsIG1pLCAmYXJbMl0sIG1pLT5tYXhfcHJvYl9yYXRlLCB0eHJjLCBmYWxzZSwgdHJ1ZSk7CisKKwlhclszXS5jb3VudCA9IDA7CisJYXJbM10uaWR4ID0gLTE7CisKKwltaS0+dG90YWxfcGFja2V0cysrOworCisJLyogd3JhcGFyb3VuZCAqLworCWlmIChtaS0+dG90YWxfcGFja2V0cyA9PSB+MCkgeworCQltaS0+dG90YWxfcGFja2V0cyA9IDA7CisJCW1pLT5zYW1wbGVfcGFja2V0cyA9IDA7CisJfQorfQorCitzdGF0aWMgdm9pZAorbWluc3RyZWxfaHRfdXBkYXRlX2NhcHModm9pZCAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpwcml2X3N0YSwKKwkJCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgb3Blcl9jaGFuX3R5cGUpCit7CisJc3RydWN0IG1pbnN0cmVsX3ByaXYgKm1wID0gcHJpdjsKKwlzdHJ1Y3QgbWluc3RyZWxfaHRfc3RhX3ByaXYgKm1zcCA9IHByaXZfc3RhOworCXN0cnVjdCBtaW5zdHJlbF9odF9zdGEgKm1pID0gJm1zcC0+aHQ7CisJc3RydWN0IGllZWU4MDIxMV9tY3NfaW5mbyAqbWNzID0gJnN0YS0+aHRfY2FwLm1jczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKG1wLT5odyk7CisJdTE2IHN0YV9jYXAgPSBzdGEtPmh0X2NhcC5jYXA7CisJaW50IGFja19kdXI7CisJaW50IHN0YmM7CisJaW50IGk7CisKKwkvKiBmYWxsIGJhY2sgdG8gdGhlIG9sZCBtaW5zdHJlbCBmb3IgbGVnYWN5IHN0YXRpb25zICovCisJaWYgKCFzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpIHsKKwkJbXNwLT5pc19odCA9IGZhbHNlOworCQltZW1zZXQoJm1zcC0+bGVnYWN5LCAwLCBzaXplb2YobXNwLT5sZWdhY3kpKTsKKwkJbXNwLT5sZWdhY3kuciA9IG1zcC0+cmF0ZWxpc3Q7CisJCW1zcC0+bGVnYWN5LnNhbXBsZV90YWJsZSA9IG1zcC0+c2FtcGxlX3RhYmxlOworCQlyZXR1cm4gbWFjODAyMTFfbWluc3RyZWwucmF0ZV9pbml0KHByaXYsIHNiYW5kLCBzdGEsICZtc3AtPmxlZ2FjeSk7CisJfQorCisJQlVJTERfQlVHX09OKEFSUkFZX1NJWkUobWluc3RyZWxfbWNzX2dyb3VwcykgIT0KKwkJTUlOU1RSRUxfTUFYX1NUUkVBTVMgKiBNSU5TVFJFTF9TVFJFQU1fR1JPVVBTKTsKKworCW1zcC0+aXNfaHQgPSB0cnVlOworCW1lbXNldChtaSwgMCwgc2l6ZW9mKCptaSkpOworCW1pLT5zdGF0c191cGRhdGUgPSBqaWZmaWVzOworCisJYWNrX2R1ciA9IGllZWU4MDIxMV9mcmFtZV9kdXJhdGlvbihsb2NhbCwgMTAsIDYwLCAxLCAxKTsKKwltaS0+b3ZlcmhlYWQgPSBpZWVlODAyMTFfZnJhbWVfZHVyYXRpb24obG9jYWwsIDAsIDYwLCAxLCAxKSArIGFja19kdXI7CisJbWktPm92ZXJoZWFkX3J0c2N0cyA9IG1pLT5vdmVyaGVhZCArIDIgKiBhY2tfZHVyOworCisJbWktPmF2Z19hbXBkdV9sZW4gPSBNSU5TVFJFTF9GUkFDKDEsIDEpOworCisJLyogV2hlbiB1c2luZyBNUlIsIHNhbXBsZSBtb3JlIG9uIHRoZSBmaXJzdCBhdHRlbXB0LCB3aXRob3V0IGRlbGF5ICovCisJaWYgKG1wLT5oYXNfbXJyKSB7CisJCW1pLT5zYW1wbGVfY291bnQgPSAxNjsKKwkJbWktPnNhbXBsZV93YWl0ID0gMDsKKwl9IGVsc2UgeworCQltaS0+c2FtcGxlX2NvdW50ID0gODsKKwkJbWktPnNhbXBsZV93YWl0ID0gODsKKwl9CisJbWktPnNhbXBsZV90cmllcyA9IDQ7CisKKwlzdGJjID0gKHN0YV9jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1JYX1NUQkMpID4+CisJCUlFRUU4MDIxMV9IVF9DQVBfUlhfU1RCQ19TSElGVDsKKwltaS0+dHhfZmxhZ3MgfD0gc3RiYyA8PCBJRUVFODAyMTFfVFhfQ1RMX1NUQkNfU0hJRlQ7CisKKwlpZiAoc3RhX2NhcCAmIElFRUU4MDIxMV9IVF9DQVBfTERQQ19DT0RJTkcpCisJCW1pLT50eF9mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX0xEUEM7CisKKwlpZiAob3Blcl9jaGFuX3R5cGUgIT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUyAmJgorCSAgICBvcGVyX2NoYW5fdHlwZSAhPSBOTDgwMjExX0NIQU5fSFQ0MFBMVVMpCisJCXN0YV9jYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWktPmdyb3Vwcyk7IGkrKykgeworCQl1MTYgcmVxID0gMDsKKworCQltaS0+Z3JvdXBzW2ldLnN1cHBvcnRlZCA9IDA7CisJCWlmIChtaW5zdHJlbF9tY3NfZ3JvdXBzW2ldLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJKSB7CisJCQlpZiAobWluc3RyZWxfbWNzX2dyb3Vwc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEgpCisJCQkJcmVxIHw9IElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwOworCQkJZWxzZQorCQkJCXJlcSB8PSBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMDsKKwkJfQorCisJCWlmIChtaW5zdHJlbF9tY3NfZ3JvdXBzW2ldLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSCkKKwkJCXJlcSB8PSBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MDsKKworCQlpZiAoKHN0YV9jYXAgJiByZXEpICE9IHJlcSkKKwkJCWNvbnRpbnVlOworCisJCW1pLT5ncm91cHNbaV0uc3VwcG9ydGVkID0KKwkJCW1jcy0+cnhfbWFza1ttaW5zdHJlbF9tY3NfZ3JvdXBzW2ldLnN0cmVhbXMgLSAxXTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCittaW5zdHJlbF9odF9yYXRlX2luaXQodm9pZCAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdm9pZCAqcHJpdl9zdGEpCit7CisJc3RydWN0IG1pbnN0cmVsX3ByaXYgKm1wID0gcHJpdjsKKworCW1pbnN0cmVsX2h0X3VwZGF0ZV9jYXBzKHByaXYsIHNiYW5kLCBzdGEsIHByaXZfc3RhLCBtcC0+aHctPmNvbmYuY2hhbm5lbF90eXBlKTsKK30KKworc3RhdGljIHZvaWQKK21pbnN0cmVsX2h0X3JhdGVfdXBkYXRlKHZvaWQgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdm9pZCAqcHJpdl9zdGEsCisgICAgICAgICAgICAgICAgICAgICAgICB1MzIgY2hhbmdlZCwgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBvcGVyX2NoYW5fdHlwZSkKK3sKKwltaW5zdHJlbF9odF91cGRhdGVfY2Fwcyhwcml2LCBzYmFuZCwgc3RhLCBwcml2X3N0YSwgb3Blcl9jaGFuX3R5cGUpOworfQorCitzdGF0aWMgdm9pZCAqCittaW5zdHJlbF9odF9hbGxvY19zdGEodm9pZCAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBtaW5zdHJlbF9odF9zdGFfcHJpdiAqbXNwOworCXN0cnVjdCBtaW5zdHJlbF9wcml2ICptcCA9IHByaXY7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBtcC0+aHc7CisJaW50IG1heF9yYXRlcyA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgaSsrKSB7CisJCXNiYW5kID0gaHctPndpcGh5LT5iYW5kc1tpXTsKKwkJaWYgKHNiYW5kICYmIHNiYW5kLT5uX2JpdHJhdGVzID4gbWF4X3JhdGVzKQorCQkJbWF4X3JhdGVzID0gc2JhbmQtPm5fYml0cmF0ZXM7CisJfQorCisJbXNwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1pbnN0cmVsX2h0X3N0YSksIGdmcCk7CisJaWYgKCFtc3ApCisJCXJldHVybiBOVUxMOworCisJbXNwLT5yYXRlbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtaW5zdHJlbF9yYXRlKSAqIG1heF9yYXRlcywgZ2ZwKTsKKwlpZiAoIW1zcC0+cmF0ZWxpc3QpCisJCWdvdG8gZXJyb3I7CisKKwltc3AtPnNhbXBsZV90YWJsZSA9IGttYWxsb2MoU0FNUExFX0NPTFVNTlMgKiBtYXhfcmF0ZXMsIGdmcCk7CisJaWYgKCFtc3AtPnNhbXBsZV90YWJsZSkKKwkJZ290byBlcnJvcjE7CisKKwlyZXR1cm4gbXNwOworCitlcnJvcjE6CisJa2ZyZWUobXNwLT5yYXRlbGlzdCk7CitlcnJvcjoKKwlrZnJlZShtc3ApOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorbWluc3RyZWxfaHRfZnJlZV9zdGEodm9pZCAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdm9pZCAqcHJpdl9zdGEpCit7CisJc3RydWN0IG1pbnN0cmVsX2h0X3N0YV9wcml2ICptc3AgPSBwcml2X3N0YTsKKworCWtmcmVlKG1zcC0+c2FtcGxlX3RhYmxlKTsKKwlrZnJlZShtc3AtPnJhdGVsaXN0KTsKKwlrZnJlZShtc3ApOworfQorCitzdGF0aWMgdm9pZCAqCittaW5zdHJlbF9odF9hbGxvYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGRlbnRyeSAqZGVidWdmc2RpcikKK3sKKwlyZXR1cm4gbWFjODAyMTFfbWluc3RyZWwuYWxsb2MoaHcsIGRlYnVnZnNkaXIpOworfQorCitzdGF0aWMgdm9pZAorbWluc3RyZWxfaHRfZnJlZSh2b2lkICpwcml2KQoreworCW1hYzgwMjExX21pbnN0cmVsLmZyZWUocHJpdik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmF0ZV9jb250cm9sX29wcyBtYWM4MDIxMV9taW5zdHJlbF9odCA9IHsKKwkubmFtZSA9ICJtaW5zdHJlbF9odCIsCisJLnR4X3N0YXR1cyA9IG1pbnN0cmVsX2h0X3R4X3N0YXR1cywKKwkuZ2V0X3JhdGUgPSBtaW5zdHJlbF9odF9nZXRfcmF0ZSwKKwkucmF0ZV9pbml0ID0gbWluc3RyZWxfaHRfcmF0ZV9pbml0LAorCS5yYXRlX3VwZGF0ZSA9IG1pbnN0cmVsX2h0X3JhdGVfdXBkYXRlLAorCS5hbGxvY19zdGEgPSBtaW5zdHJlbF9odF9hbGxvY19zdGEsCisJLmZyZWVfc3RhID0gbWluc3RyZWxfaHRfZnJlZV9zdGEsCisJLmFsbG9jID0gbWluc3RyZWxfaHRfYWxsb2MsCisJLmZyZWUgPSBtaW5zdHJlbF9odF9mcmVlLAorI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTCisJLmFkZF9zdGFfZGVidWdmcyA9IG1pbnN0cmVsX2h0X2FkZF9zdGFfZGVidWdmcywKKwkucmVtb3ZlX3N0YV9kZWJ1Z2ZzID0gbWluc3RyZWxfaHRfcmVtb3ZlX3N0YV9kZWJ1Z2ZzLAorI2VuZGlmCit9OworCisKK3N0YXRpYyB2b2lkCitpbml0X3NhbXBsZV90YWJsZSh2b2lkKQoreworCWludCBjb2wsIGksIG5ld19pZHg7CisJdTggcm5kW01DU19HUk9VUF9SQVRFU107CisKKwltZW1zZXQoc2FtcGxlX3RhYmxlLCAweGZmLCBzaXplb2Yoc2FtcGxlX3RhYmxlKSk7CisJZm9yIChjb2wgPSAwOyBjb2wgPCBTQU1QTEVfQ09MVU1OUzsgY29sKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IE1DU19HUk9VUF9SQVRFUzsgaSsrKSB7CisJCQlnZXRfcmFuZG9tX2J5dGVzKHJuZCwgc2l6ZW9mKHJuZCkpOworCQkJbmV3X2lkeCA9IChpICsgcm5kW2ldKSAlIE1DU19HUk9VUF9SQVRFUzsKKworCQkJd2hpbGUgKHNhbXBsZV90YWJsZVtjb2xdW25ld19pZHhdICE9IDB4ZmYpCisJCQkJbmV3X2lkeCA9IChuZXdfaWR4ICsgMSkgJSBNQ1NfR1JPVVBfUkFURVM7CisKKwkJCXNhbXBsZV90YWJsZVtjb2xdW25ld19pZHhdID0gaTsKKwkJfQorCX0KK30KKworaW50IF9faW5pdAorcmM4MDIxMV9taW5zdHJlbF9odF9pbml0KHZvaWQpCit7CisJaW5pdF9zYW1wbGVfdGFibGUoKTsKKwlyZXR1cm4gaWVlZTgwMjExX3JhdGVfY29udHJvbF9yZWdpc3RlcigmbWFjODAyMTFfbWluc3RyZWxfaHQpOworfQorCit2b2lkCityYzgwMjExX21pbnN0cmVsX2h0X2V4aXQodm9pZCkKK3sKKwlpZWVlODAyMTFfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIoJm1hYzgwMjExX21pbnN0cmVsX2h0KTsKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmggYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MmQyYjIKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5oCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEZlbGl4IEZpZXRrYXUgPG5iZEBvcGVud3J0Lm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19SQ19NSU5TVFJFTF9IVF9ICisjZGVmaW5lIF9fUkNfTUlOU1RSRUxfSFRfSAorCisvKgorICogVGhlIG51bWJlciBvZiBzdHJlYW1zIGNhbiBiZSBjaGFuZ2VkIHRvIDIgdG8gcmVkdWNlIGNvZGUKKyAqIHNpemUgYW5kIG1lbW9yeSBmb290cHJpbnQuCisgKi8KKyNkZWZpbmUgTUlOU1RSRUxfTUFYX1NUUkVBTVMJMworI2RlZmluZSBNSU5TVFJFTF9TVFJFQU1fR1JPVVBTCTQKKworLyogc2NhbGVkIGZyYWN0aW9uIHZhbHVlcyAqLworI2RlZmluZSBNSU5TVFJFTF9TQ0FMRQkxNgorI2RlZmluZSBNSU5TVFJFTF9GUkFDKHZhbCwgZGl2KSAoKCh2YWwpIDw8IE1JTlNUUkVMX1NDQUxFKSAvIGRpdikKKyNkZWZpbmUgTUlOU1RSRUxfVFJVTkModmFsKSAoKHZhbCkgPj4gTUlOU1RSRUxfU0NBTEUpCisKKyNkZWZpbmUgTUNTX0dST1VQX1JBVEVTCTgKKworc3RydWN0IG1jc19ncm91cCB7CisJdTMyIGZsYWdzOworCXVuc2lnbmVkIGludCBzdHJlYW1zOworCXVuc2lnbmVkIGludCBkdXJhdGlvbltNQ1NfR1JPVVBfUkFURVNdOworfTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBtY3NfZ3JvdXAgbWluc3RyZWxfbWNzX2dyb3Vwc1tdOworCitzdHJ1Y3QgbWluc3RyZWxfcmF0ZV9zdGF0cyB7CisJLyogY3VycmVudCAvIGxhc3Qgc2FtcGxpbmcgcGVyaW9kIGF0dGVtcHRzL3N1Y2Nlc3MgY291bnRlcnMgKi8KKwl1bnNpZ25lZCBpbnQgYXR0ZW1wdHMsIGxhc3RfYXR0ZW1wdHM7CisJdW5zaWduZWQgaW50IHN1Y2Nlc3MsIGxhc3Rfc3VjY2VzczsKKworCS8qIHRvdGFsIGF0dGVtcHRzL3N1Y2Nlc3MgY291bnRlcnMgKi8KKwl1NjQgYXR0X2hpc3QsIHN1Y2NfaGlzdDsKKworCS8qIGN1cnJlbnQgdGhyb3VnaHB1dCAqLworCXVuc2lnbmVkIGludCBjdXJfdHA7CisKKwkvKiBwYWNrZXQgZGVsaXZlcnkgcHJvYmFiaWxpdGllcyAqLworCXVuc2lnbmVkIGludCBjdXJfcHJvYiwgcHJvYmFiaWxpdHk7CisKKwkvKiBtYXhpbXVtIHJldHJ5IGNvdW50cyAqLworCXVuc2lnbmVkIGludCByZXRyeV9jb3VudDsKKwl1bnNpZ25lZCBpbnQgcmV0cnlfY291bnRfcnRzY3RzOworCisJYm9vbCByZXRyeV91cGRhdGVkOworCXU4IHNhbXBsZV9za2lwcGVkOworfTsKKworc3RydWN0IG1pbnN0cmVsX21jc19ncm91cF9kYXRhIHsKKwl1OCBpbmRleDsKKwl1OCBjb2x1bW47CisKKwkvKiBiaXRmaWVsZCBvZiBzdXBwb3J0ZWQgTUNTIHJhdGVzIG9mIHRoaXMgZ3JvdXAgKi8KKwl1OCBzdXBwb3J0ZWQ7CisKKwkvKiBzZWxlY3RlZCBwcmltYXJ5IHJhdGVzICovCisJdW5zaWduZWQgaW50IG1heF90cF9yYXRlOworCXVuc2lnbmVkIGludCBtYXhfdHBfcmF0ZTI7CisJdW5zaWduZWQgaW50IG1heF9wcm9iX3JhdGU7CisKKwkvKiBNQ1MgcmF0ZSBzdGF0aXN0aWNzICovCisJc3RydWN0IG1pbnN0cmVsX3JhdGVfc3RhdHMgcmF0ZXNbTUNTX0dST1VQX1JBVEVTXTsKK307CisKK3N0cnVjdCBtaW5zdHJlbF9odF9zdGEgeworCS8qIGFtcGR1IGxlbmd0aCAoYXZlcmFnZSwgcGVyIHNhbXBsaW5nIGludGVydmFsKSAqLworCXVuc2lnbmVkIGludCBhbXBkdV9sZW47CisJdW5zaWduZWQgaW50IGFtcGR1X3BhY2tldHM7CisKKwkvKiBhbXBkdSBsZW5ndGggKEVXTUEpICovCisJdW5zaWduZWQgaW50IGF2Z19hbXBkdV9sZW47CisKKwkvKiBiZXN0IHRocm91Z2hwdXQgcmF0ZSAqLworCXVuc2lnbmVkIGludCBtYXhfdHBfcmF0ZTsKKworCS8qIHNlY29uZCBiZXN0IHRocm91Z2hwdXQgcmF0ZSAqLworCXVuc2lnbmVkIGludCBtYXhfdHBfcmF0ZTI7CisKKwkvKiBiZXN0IHByb2JhYmlsaXR5IHJhdGUgKi8KKwl1bnNpZ25lZCBpbnQgbWF4X3Byb2JfcmF0ZTsKKworCS8qIHRpbWUgb2YgbGFzdCBzdGF0dXMgdXBkYXRlICovCisJdW5zaWduZWQgbG9uZyBzdGF0c191cGRhdGU7CisKKwkvKiBvdmVyaGVhZCB0aW1lIGluIHVzZWMgZm9yIGVhY2ggZnJhbWUgKi8KKwl1bnNpZ25lZCBpbnQgb3ZlcmhlYWQ7CisJdW5zaWduZWQgaW50IG92ZXJoZWFkX3J0c2N0czsKKworCXVuc2lnbmVkIGludCB0b3RhbF9wYWNrZXRzOworCXVuc2lnbmVkIGludCBzYW1wbGVfcGFja2V0czsKKworCS8qIHR4IGZsYWdzIHRvIGFkZCBmb3IgZnJhbWVzIGZvciB0aGlzIHN0YSAqLworCXUzMiB0eF9mbGFnczsKKworCXU4IHNhbXBsZV93YWl0OworCXU4IHNhbXBsZV90cmllczsKKwl1OCBzYW1wbGVfY291bnQ7CisJdTggc2FtcGxlX3Nsb3c7CisKKwkvKiBjdXJyZW50IE1DUyBncm91cCB0byBiZSBzYW1wbGVkICovCisJdTggc2FtcGxlX2dyb3VwOworCisJLyogTUNTIHJhdGUgZ3JvdXAgaW5mbyBhbmQgc3RhdGlzdGljcyAqLworCXN0cnVjdCBtaW5zdHJlbF9tY3NfZ3JvdXBfZGF0YSBncm91cHNbTUlOU1RSRUxfTUFYX1NUUkVBTVMgKiBNSU5TVFJFTF9TVFJFQU1fR1JPVVBTXTsKK307CisKK3N0cnVjdCBtaW5zdHJlbF9odF9zdGFfcHJpdiB7CisJdW5pb24geworCQlzdHJ1Y3QgbWluc3RyZWxfaHRfc3RhIGh0OworCQlzdHJ1Y3QgbWluc3RyZWxfc3RhX2luZm8gbGVnYWN5OworCX07CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKKwlzdHJ1Y3QgZGVudHJ5ICpkYmdfc3RhdHM7CisjZW5kaWYKKwl2b2lkICpyYXRlbGlzdDsKKwl2b2lkICpzYW1wbGVfdGFibGU7CisJYm9vbCBpc19odDsKK307CisKK3ZvaWQgbWluc3RyZWxfaHRfYWRkX3N0YV9kZWJ1Z2ZzKHZvaWQgKnByaXYsIHZvaWQgKnByaXZfc3RhLCBzdHJ1Y3QgZGVudHJ5ICpkaXIpOwordm9pZCBtaW5zdHJlbF9odF9yZW1vdmVfc3RhX2RlYnVnZnModm9pZCAqcHJpdiwgdm9pZCAqcHJpdl9zdGEpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0X2RlYnVnZnMuYyBiL25ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0X2RlYnVnZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTVhNGIzCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHRfZGVidWdmcy5jCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEZlbGl4IEZpZXRrYXUgPG5iZEBvcGVud3J0Lm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisjaW5jbHVkZSAicmM4MDIxMV9taW5zdHJlbC5oIgorI2luY2x1ZGUgInJjODAyMTFfbWluc3RyZWxfaHQuaCIKKworc3RhdGljIGludAorbWluc3RyZWxfaHRfc3RhdHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgbWluc3RyZWxfaHRfc3RhX3ByaXYgKm1zcCA9IGlub2RlLT5pX3ByaXZhdGU7CisJc3RydWN0IG1pbnN0cmVsX2h0X3N0YSAqbWkgPSAmbXNwLT5odDsKKwlzdHJ1Y3QgbWluc3RyZWxfZGVidWdmc19pbmZvICptczsKKwl1bnNpZ25lZCBpbnQgaSwgaiwgdHAsIHByb2IsIGVwcm9iOworCWNoYXIgKnA7CisJaW50IHJldDsKKworCWlmICghbXNwLT5pc19odCkgeworCQlpbm9kZS0+aV9wcml2YXRlID0gJm1zcC0+bGVnYWN5OworCQlyZXQgPSBtaW5zdHJlbF9zdGF0c19vcGVuKGlub2RlLCBmaWxlKTsKKwkJaW5vZGUtPmlfcHJpdmF0ZSA9IG1zcDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwltcyA9IGttYWxsb2Moc2l6ZW9mKCptcykgKyA4MTkyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1zKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IG1zOworCXAgPSBtcy0+YnVmOworCXAgKz0gc3ByaW50ZihwLCAidHlwZSAgICAgIHJhdGUgICAgIHRocm91Z2hwdXQgIGV3bWEgcHJvYiAgIHRoaXMgcHJvYiAgIgorCQkJInRoaXMgc3VjYy9hdHRlbXB0ICAgc3VjY2VzcyAgICBhdHRlbXB0c1xuIik7CisJZm9yIChpID0gMDsgaSA8IE1JTlNUUkVMX01BWF9TVFJFQU1TICogTUlOU1RSRUxfU1RSRUFNX0dST1VQUzsgaSsrKSB7CisJCWNoYXIgaHRtb2RlID0gJzInOworCQljaGFyIGdpbW9kZSA9ICdMJzsKKworCQlpZiAoIW1pLT5ncm91cHNbaV0uc3VwcG9ydGVkKQorCQkJY29udGludWU7CisKKwkJaWYgKG1pbnN0cmVsX21jc19ncm91cHNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKQorCQkJaHRtb2RlID0gJzQnOworCQlpZiAobWluc3RyZWxfbWNzX2dyb3Vwc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSkKKwkJCWdpbW9kZSA9ICdTJzsKKworCQlmb3IgKGogPSAwOyBqIDwgTUNTX0dST1VQX1JBVEVTOyBqKyspIHsKKwkJCXN0cnVjdCBtaW5zdHJlbF9yYXRlX3N0YXRzICptciA9ICZtaS0+Z3JvdXBzW2ldLnJhdGVzW2pdOworCQkJaW50IGlkeCA9IGkgKiBNQ1NfR1JPVVBfUkFURVMgKyBqOworCisJCQlpZiAoIShtaS0+Z3JvdXBzW2ldLnN1cHBvcnRlZCAmIEJJVChqKSkpCisJCQkJY29udGludWU7CisKKwkJCXAgKz0gc3ByaW50ZihwLCAiSFQlYzAvJWNHSSAiLCBodG1vZGUsIGdpbW9kZSk7CisKKwkJCSoocCsrKSA9IChpZHggPT0gbWktPm1heF90cF9yYXRlKSA/ICdUJyA6ICcgJzsKKwkJCSoocCsrKSA9IChpZHggPT0gbWktPm1heF90cF9yYXRlMikgPyAndCcgOiAnICc7CisJCQkqKHArKykgPSAoaWR4ID09IG1pLT5tYXhfcHJvYl9yYXRlKSA/ICdQJyA6ICcgJzsKKwkJCXAgKz0gc3ByaW50ZihwLCAiTUNTJS0ydSIsIChtaW5zdHJlbF9tY3NfZ3JvdXBzW2ldLnN0cmVhbXMgLSAxKSAqCisJCQkJCU1DU19HUk9VUF9SQVRFUyArIGopOworCisJCQl0cCA9IG1yLT5jdXJfdHAgLyAxMDsKKwkJCXByb2IgPSBNSU5TVFJFTF9UUlVOQyhtci0+Y3VyX3Byb2IgKiAxMDAwKTsKKwkJCWVwcm9iID0gTUlOU1RSRUxfVFJVTkMobXItPnByb2JhYmlsaXR5ICogMTAwMCk7CisKKwkJCXAgKz0gc3ByaW50ZihwLCAiICAlNnUuJTF1ICAgJTZ1LiUxdSAgICU2dS4lMXUgICAgICAgICIKKwkJCQkJIiUzdSglM3UpICAgJThsbHUgICAgJThsbHVcbiIsCisJCQkJCXRwIC8gMTAsIHRwICUgMTAsCisJCQkJCWVwcm9iIC8gMTAsIGVwcm9iICUgMTAsCisJCQkJCXByb2IgLyAxMCwgcHJvYiAlIDEwLAorCQkJCQltci0+bGFzdF9zdWNjZXNzLAorCQkJCQltci0+bGFzdF9hdHRlbXB0cywKKwkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyltci0+c3VjY19oaXN0LAorCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKW1yLT5hdHRfaGlzdCk7CisJCX0KKwl9CisJcCArPSBzcHJpbnRmKHAsICJcblRvdGFsIHBhY2tldCBjb3VudDo6ICAgIGlkZWFsICVkICAgICAgIgorCQkJImxvb2thcm91bmQgJWRcbiIsCisJCQltYXgoMCwgKGludCkgbWktPnRvdGFsX3BhY2tldHMgLSAoaW50KSBtaS0+c2FtcGxlX3BhY2tldHMpLAorCQkJbWktPnNhbXBsZV9wYWNrZXRzKTsKKwlwICs9IHNwcmludGYocCwgIkF2ZXJhZ2UgQS1NUERVIGxlbmd0aDogJWQuJWRcbiIsCisJCU1JTlNUUkVMX1RSVU5DKG1pLT5hdmdfYW1wZHVfbGVuKSwKKwkJTUlOU1RSRUxfVFJVTkMobWktPmF2Z19hbXBkdV9sZW4gKiAxMCkgJSAxMCk7CisJbXMtPmxlbiA9IHAgLSBtcy0+YnVmOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbnN0cmVsX2h0X3N0YXRfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IG1pbnN0cmVsX2h0X3N0YXRzX29wZW4sCisJLnJlYWQgPSBtaW5zdHJlbF9zdGF0c19yZWFkLAorCS5yZWxlYXNlID0gbWluc3RyZWxfc3RhdHNfcmVsZWFzZSwKK307CisKK3ZvaWQKK21pbnN0cmVsX2h0X2FkZF9zdGFfZGVidWdmcyh2b2lkICpwcml2LCB2b2lkICpwcml2X3N0YSwgc3RydWN0IGRlbnRyeSAqZGlyKQoreworCXN0cnVjdCBtaW5zdHJlbF9odF9zdGFfcHJpdiAqbXNwID0gcHJpdl9zdGE7CisKKwltc3AtPmRiZ19zdGF0cyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJjX3N0YXRzIiwgU19JUlVHTywgZGlyLCBtc3AsCisJCQkmbWluc3RyZWxfaHRfc3RhdF9mb3BzKTsKK30KKwordm9pZAorbWluc3RyZWxfaHRfcmVtb3ZlX3N0YV9kZWJ1Z2ZzKHZvaWQgKnByaXYsIHZvaWQgKnByaXZfc3RhKQoreworCXN0cnVjdCBtaW5zdHJlbF9odF9zdGFfcHJpdiAqbXNwID0gcHJpdl9zdGE7CisKKwlkZWJ1Z2ZzX3JlbW92ZShtc3AtPmRiZ19zdGF0cyk7Cit9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcnguYyBiL25ldC9tYWM4MDIxMS9yeC5jCmluZGV4IGJlOWFiYzIuLmZhMGYzN2UgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yeC5jCisrKyBiL25ldC9tYWM4MDIxMS9yeC5jCkBAIC0yOTMsNyArMjkzLDcgQEAKIAkJCXNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKIAkJCWlmIChza2IyKSB7CiAJCQkJc2tiMi0+ZGV2ID0gcHJldl9kZXY7Ci0JCQkJbmV0aWZfcngoc2tiMik7CisJCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiMik7CiAJCQl9CiAJCX0KIApAQCAtMzA0LDcgKzMwNCw3IEBACiAKIAlpZiAocHJldl9kZXYpIHsKIAkJc2tiLT5kZXYgPSBwcmV2X2RldjsKLQkJbmV0aWZfcngoc2tiKTsKKwkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKIAl9IGVsc2UKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCkBAIC03MTksMTYgKzcxOSwxMyBAQAogCiAJdGlkID0gKmllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpICYgSUVFRTgwMjExX1FPU19DVExfVElEX01BU0s7CiAKLQlzcGluX2xvY2soJnN0YS0+bG9jayk7Ci0KLQlpZiAoIXN0YS0+YW1wZHVfbWxtZS50aWRfYWN0aXZlX3J4W3RpZF0pCi0JCWdvdG8gZG9udF9yZW9yZGVyX3VubG9jazsKLQotCXRpZF9hZ2dfcnggPSBzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF07CisJdGlkX2FnZ19yeCA9IHJjdV9kZXJlZmVyZW5jZShzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0pOworCWlmICghdGlkX2FnZ19yeCkKKwkJZ290byBkb250X3Jlb3JkZXI7CiAKIAkvKiBxb3MgbnVsbCBkYXRhIGZyYW1lcyBhcmUgZXhjbHVkZWQgKi8KIAlpZiAodW5saWtlbHkoaGRyLT5mcmFtZV9jb250cm9sICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX05VTExGVU5DKSkpCi0JCWdvdG8gZG9udF9yZW9yZGVyX3VubG9jazsKKwkJZ290byBkb250X3Jlb3JkZXI7CiAKIAkvKiBuZXcsIHBvdGVudGlhbGx5IHVuLW9yZGVyZWQsIGFtcGR1IGZyYW1lIC0gcHJvY2VzcyBpdCAqLwogCkBAIC03NDAsMjAgKzczNywyMiBAQAogCS8qIGlmIHRoaXMgbXBkdSBpcyBmcmFnbWVudGVkIC0gdGVybWluYXRlIHJ4IGFnZ3JlZ2F0aW9uIHNlc3Npb24gKi8KIAlzYyA9IGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpOwogCWlmIChzYyAmIElFRUU4MDIxMV9TQ1RMX0ZSQUcpIHsKLQkJc3Bpbl91bmxvY2soJnN0YS0+bG9jayk7Ci0JCV9faWVlZTgwMjExX3N0b3BfcnhfYmFfc2Vzc2lvbihzdGEsIHRpZCwgV0xBTl9CQUNLX1JFQ0lQSUVOVCwKLQkJCQkJICAgICAgIFdMQU5fUkVBU09OX1FTVEFfUkVRVUlSRV9TRVRVUCk7Ci0JCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJc2tiLT5wa3RfdHlwZSA9IElFRUU4MDIxMV9TREFUQV9RVUVVRV9UWVBFX0ZSQU1FOworCQlza2JfcXVldWVfdGFpbCgmcngtPnNkYXRhLT5za2JfcXVldWUsIHNrYik7CisJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZyeC0+c2RhdGEtPndvcmspOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKGllZWU4MDIxMV9zdGFfbWFuYWdlX3Jlb3JkZXJfYnVmKGh3LCB0aWRfYWdnX3J4LCBza2IsIGZyYW1lcykpIHsKLQkJc3Bpbl91bmxvY2soJnN0YS0+bG9jayk7CisJLyoKKwkgKiBObyBsb2NraW5nIG5lZWRlZCAtLSB3ZSB3aWxsIG9ubHkgZXZlciBwcm9jZXNzIG9uZQorCSAqIFJYIHBhY2tldCBhdCBhIHRpbWUsIGFuZCB0aHVzIG93biB0aWRfYWdnX3J4LiBBbGwKKwkgKiBvdGhlciBjb2RlIG1hbmlwdWxhdGluZyBpdCBuZWVkcyB0byAoYW5kIGRvZXMpIG1ha2UKKwkgKiBzdXJlIHRoYXQgd2UgY2Fubm90IGdldCB0byBpdCBhbnkgbW9yZSBiZWZvcmUgZG9pbmcKKwkgKiBhbnl0aGluZyB3aXRoIGl0LgorCSAqLworCWlmIChpZWVlODAyMTFfc3RhX21hbmFnZV9yZW9yZGVyX2J1ZihodywgdGlkX2FnZ19yeCwgc2tiLCBmcmFtZXMpKQogCQlyZXR1cm47Ci0JfQogCi0gZG9udF9yZW9yZGVyX3VubG9jazoKLQlzcGluX3VubG9jaygmc3RhLT5sb2NrKTsKICBkb250X3Jlb3JkZXI6CiAJX19za2JfcXVldWVfdGFpbChmcmFtZXMsIHNrYik7CiB9CkBAIC04MjUsNiArODI0LDcgQEAKIAlpZWVlODAyMTFfcnhfcmVzdWx0IHJlc3VsdCA9IFJYX0RST1BfVU5VU0FCTEU7CiAJc3RydWN0IGllZWU4MDIxMV9rZXkgKnN0YWtleSA9IE5VTEw7CiAJaW50IG1taWVfa2V5aWR4ID0gLTE7CisJX19sZTE2IGZjOwogCiAJLyoKIAkgKiBLZXkgc2VsZWN0aW9uIDEwMQpAQCAtODY2LDEzICs4NjYsMTUgQEAKIAlpZiAocngtPnN0YSkKIAkJc3Rha2V5ID0gcmN1X2RlcmVmZXJlbmNlKHJ4LT5zdGEtPmtleSk7CiAKLQlpZiAoIWllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGhkci0+ZnJhbWVfY29udHJvbCkpCisJZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CisKKwlpZiAoIWllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGZjKSkKIAkJbW1pZV9rZXlpZHggPSBpZWVlODAyMTFfZ2V0X21taWVfa2V5aWR4KHJ4LT5za2IpOwogCiAJaWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSAmJiBzdGFrZXkpIHsKIAkJcngtPmtleSA9IHN0YWtleTsKIAkJLyogU2tpcCBkZWNyeXB0aW9uIGlmIHRoZSBmcmFtZSBpcyBub3QgcHJvdGVjdGVkLiAqLwotCQlpZiAoIWllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCWlmICghaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoZmMpKQogCQkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCX0gZWxzZSBpZiAobW1pZV9rZXlpZHggPj0gMCkgewogCQkvKiBCcm9hZGNhc3QvbXVsdGljYXN0IHJvYnVzdCBtYW5hZ2VtZW50IGZyYW1lIC8gQklQICovCkBAIC04ODQsNyArODg2LDcgQEAKIAkJICAgIG1taWVfa2V5aWR4ID49IE5VTV9ERUZBVUxUX0tFWVMgKyBOVU1fREVGQVVMVF9NR01UX0tFWVMpCiAJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOyAvKiB1bmV4cGVjdGVkIEJJUCBrZXlpZHggKi8KIAkJcngtPmtleSA9IHJjdV9kZXJlZmVyZW5jZShyeC0+c2RhdGEtPmtleXNbbW1pZV9rZXlpZHhdKTsKLQl9IGVsc2UgaWYgKCFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJfSBlbHNlIGlmICghaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoZmMpKSB7CiAJCS8qCiAJCSAqIFRoZSBmcmFtZSB3YXMgbm90IHByb3RlY3RlZCwgc28gc2tpcCBkZWNyeXB0aW9uLiBIb3dldmVyLCB3ZQogCQkgKiBuZWVkIHRvIHNldCByeC0+a2V5IGlmIHRoZXJlIGlzIGEga2V5IHRoYXQgY291bGQgaGF2ZSBiZWVuCkBAIC04OTIsNyArODk0LDcgQEAKIAkJICogaGF2ZSBiZWVuIGV4cGVjdGVkLgogCQkgKi8KIAkJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSA9IE5VTEw7Ci0JCWlmIChpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpICYmCisJCWlmIChpZWVlODAyMTFfaXNfbWdtdChmYykgJiYKIAkJICAgIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpICYmCiAJCSAgICAoa2V5ID0gcmN1X2RlcmVmZXJlbmNlKHJ4LT5zZGF0YS0+ZGVmYXVsdF9tZ210X2tleSkpKQogCQkJcngtPmtleSA9IGtleTsKQEAgLTkxNCw3ICs5MTYsNyBAQAogCQkgICAgKHN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSVZfU1RSSVBQRUQpKQogCQkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCi0JCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKKwkJaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbihmYyk7CiAKIAkJaWYgKHJ4LT5za2ItPmxlbiA8IDggKyBoZHJsZW4pCiAJCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsgLyogVE9ETzogY291bnQgdGhpcz8gKi8KQEAgLTk0NywxOSArOTQ5LDE3IEBACiAKIAlpZiAoc2tiX2xpbmVhcml6ZShyeC0+c2tiKSkKIAkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7Ci0KLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilyeC0+c2tiLT5kYXRhOwotCi0JLyogQ2hlY2sgZm9yIHdlYWsgSVZzIGlmIHBvc3NpYmxlICovCi0JaWYgKHJ4LT5zdGEgJiYgcngtPmtleS0+Y29uZi5hbGcgPT0gQUxHX1dFUCAmJgotCSAgICBpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpICYmCi0JICAgICghKHN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSVZfU1RSSVBQRUQpIHx8Ci0JICAgICAhKHN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfREVDUllQVEVEKSkgJiYKLQkgICAgaWVlZTgwMjExX3dlcF9pc193ZWFrX2l2KHJ4LT5za2IsIHJ4LT5rZXkpKQotCQlyeC0+c3RhLT53ZXBfd2Vha19pdl9jb3VudCsrOworCS8qIHRoZSBoZHIgdmFyaWFibGUgaXMgaW52YWxpZCBub3chICovCiAKIAlzd2l0Y2ggKHJ4LT5rZXktPmNvbmYuYWxnKSB7CiAJY2FzZSBBTEdfV0VQOgorCQkvKiBDaGVjayBmb3Igd2VhayBJVnMgaWYgcG9zc2libGUgKi8KKwkJaWYgKHJ4LT5zdGEgJiYgaWVlZTgwMjExX2lzX2RhdGEoZmMpICYmCisJCSAgICAoIShzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0lWX1NUUklQUEVEKSB8fAorCQkgICAgICEoc3RhdHVzLT5mbGFnICYgUlhfRkxBR19ERUNSWVBURUQpKSAmJgorCQkgICAgaWVlZTgwMjExX3dlcF9pc193ZWFrX2l2KHJ4LT5za2IsIHJ4LT5rZXkpKQorCQkJcngtPnN0YS0+d2VwX3dlYWtfaXZfY291bnQrKzsKKwogCQlyZXN1bHQgPSBpZWVlODAyMTFfY3J5cHRvX3dlcF9kZWNyeXB0KHJ4KTsKIAkJYnJlYWs7CiAJY2FzZSBBTEdfVEtJUDoKQEAgLTEyNjcsMTEgKzEyNjcsMTMgQEAKIAkJCQkJCSByeC0+cXVldWUsICYocngtPnNrYikpOwogCQlpZiAocngtPmtleSAmJiByeC0+a2V5LT5jb25mLmFsZyA9PSBBTEdfQ0NNUCAmJgogCQkgICAgaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoZmMpKSB7CisJCQlpbnQgcXVldWUgPSBpZWVlODAyMTFfaXNfbWdtdChmYykgPworCQkJCU5VTV9SWF9EQVRBX1FVRVVFUyA6IHJ4LT5xdWV1ZTsKIAkJCS8qIFN0b3JlIENDTVAgUE4gc28gdGhhdCB3ZSBjYW4gdmVyaWZ5IHRoYXQgdGhlIG5leHQKIAkJCSAqIGZyYWdtZW50IGhhcyBhIHNlcXVlbnRpYWwgUE4gdmFsdWUuICovCiAJCQllbnRyeS0+Y2NtcCA9IDE7CiAJCQltZW1jcHkoZW50cnktPmxhc3RfcG4sCi0JCQkgICAgICAgcngtPmtleS0+dS5jY21wLnJ4X3BuW3J4LT5xdWV1ZV0sCisJCQkgICAgICAgcngtPmtleS0+dS5jY21wLnJ4X3BuW3F1ZXVlXSwKIAkJCSAgICAgICBDQ01QX1BOX0xFTik7CiAJCX0KIAkJcmV0dXJuIFJYX1FVRVVFRDsKQEAgLTEyOTEsNiArMTI5Myw3IEBACiAJaWYgKGVudHJ5LT5jY21wKSB7CiAJCWludCBpOwogCQl1OCBwbltDQ01QX1BOX0xFTl0sICpycG47CisJCWludCBxdWV1ZTsKIAkJaWYgKCFyeC0+a2V5IHx8IHJ4LT5rZXktPmNvbmYuYWxnICE9IEFMR19DQ01QKQogCQkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CiAJCW1lbWNweShwbiwgZW50cnktPmxhc3RfcG4sIENDTVBfUE5fTEVOKTsKQEAgLTEyOTksNyArMTMwMiw5IEBACiAJCQlpZiAocG5baV0pCiAJCQkJYnJlYWs7CiAJCX0KLQkJcnBuID0gcngtPmtleS0+dS5jY21wLnJ4X3BuW3J4LT5xdWV1ZV07CisJCXF1ZXVlID0gaWVlZTgwMjExX2lzX21nbXQoZmMpID8KKwkJCU5VTV9SWF9EQVRBX1FVRVVFUyA6IHJ4LT5xdWV1ZTsKKwkJcnBuID0gcngtPmtleS0+dS5jY21wLnJ4X3BuW3F1ZXVlXTsKIAkJaWYgKG1lbWNtcChwbiwgcnBuLCBDQ01QX1BOX0xFTikpCiAJCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKIAkJbWVtY3B5KGVudHJ5LT5sYXN0X3BuLCBwbiwgQ0NNUF9QTl9MRU4pOwpAQCAtMTU3Myw3ICsxNTc4LDcgQEAKIAkJCS8qIGRlbGl2ZXIgdG8gbG9jYWwgc3RhY2sgKi8KIAkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAJCQltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHNrYi0+Y2IpKTsKLQkJCW5ldGlmX3J4KHNrYik7CisJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCQl9CiAJfQogCkBAIC0xODI5LDEzICsxODM0LDExIEBACiAJCQkJICAmYmFyX2RhdGEsIHNpemVvZihiYXJfZGF0YSkpKQogCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAotCQlzcGluX2xvY2soJnJ4LT5zdGEtPmxvY2spOwogCQl0aWQgPSBsZTE2X3RvX2NwdShiYXJfZGF0YS5jb250cm9sKSA+PiAxMjsKLQkJaWYgKCFyeC0+c3RhLT5hbXBkdV9tbG1lLnRpZF9hY3RpdmVfcnhbdGlkXSkgewotCQkJc3Bpbl91bmxvY2soJnJ4LT5zdGEtPmxvY2spOworCisJCXRpZF9hZ2dfcnggPSByY3VfZGVyZWZlcmVuY2UocngtPnN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSk7CisJCWlmICghdGlkX2FnZ19yeCkKIAkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7Ci0JCX0KLQkJdGlkX2FnZ19yeCA9IHJ4LT5zdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF07CiAKIAkJc3RhcnRfc2VxX251bSA9IGxlMTZfdG9fY3B1KGJhcl9kYXRhLnN0YXJ0X3NlcV9udW0pID4+IDQ7CiAKQEAgLTE4NDgsMTEgKzE4NTEsMTUgQEAKIAkJaWVlZTgwMjExX3JlbGVhc2VfcmVvcmRlcl9mcmFtZXMoaHcsIHRpZF9hZ2dfcngsIHN0YXJ0X3NlcV9udW0sCiAJCQkJCQkgZnJhbWVzKTsKIAkJa2ZyZWVfc2tiKHNrYik7Ci0JCXNwaW5fdW5sb2NrKCZyeC0+c3RhLT5sb2NrKTsKIAkJcmV0dXJuIFJYX1FVRVVFRDsKIAl9CiAKLQlyZXR1cm4gUlhfQ09OVElOVUU7CisJLyoKKwkgKiBBZnRlciB0aGlzIHBvaW50LCB3ZSBvbmx5IHdhbnQgbWFuYWdlbWVudCBmcmFtZXMsCisJICogc28gd2UgY2FuIGRyb3AgYWxsIHJlbWFpbmluZyBjb250cm9sIGZyYW1lcyB0bworCSAqIGNvb2tlZCBtb25pdG9yIGludGVyZmFjZXMuCisJICovCisJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIH0KIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3Byb2Nlc3Nfc2FfcXVlcnlfcmVxKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLApAQCAtMTk0NCwzMCArMTk1MSwyNyBAQAogCQlpZiAobGVuIDwgSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSArIDEpCiAJCQlicmVhazsKIAotCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCQlyZXR1cm4gaWVlZTgwMjExX3N0YV9yeF9tZ210KHNkYXRhLCByeC0+c2tiKTsKLQogCQlzd2l0Y2ggKG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmFjdGlvbl9jb2RlKSB7CiAJCWNhc2UgV0xBTl9BQ1RJT05fQUREQkFfUkVROgogCQkJaWYgKGxlbiA8IChJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFICsKIAkJCQkgICBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEpKSkKLQkJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwotCQkJaWVlZTgwMjExX3Byb2Nlc3NfYWRkYmFfcmVxdWVzdChsb2NhbCwgcngtPnN0YSwgbWdtdCwgbGVuKTsKLQkJCWdvdG8gaGFuZGxlZDsKKwkJCQlnb3RvIGludmFsaWQ7CisJCQlicmVhazsKIAkJY2FzZSBXTEFOX0FDVElPTl9BRERCQV9SRVNQOgogCQkJaWYgKGxlbiA8IChJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFICsKIAkJCQkgICBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwKSkpCi0JCQkJYnJlYWs7Ci0JCQlpZWVlODAyMTFfcHJvY2Vzc19hZGRiYV9yZXNwKGxvY2FsLCByeC0+c3RhLCBtZ210LCBsZW4pOwotCQkJZ290byBoYW5kbGVkOworCQkJCWdvdG8gaW52YWxpZDsKKwkJCWJyZWFrOwogCQljYXNlIFdMQU5fQUNUSU9OX0RFTEJBOgogCQkJaWYgKGxlbiA8IChJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFICsKIAkJCQkgICBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5kZWxiYSkpKQotCQkJCWJyZWFrOwotCQkJaWVlZTgwMjExX3Byb2Nlc3NfZGVsYmEoc2RhdGEsIHJ4LT5zdGEsIG1nbXQsIGxlbik7Ci0JCQlnb3RvIGhhbmRsZWQ7CisJCQkJZ290byBpbnZhbGlkOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGludmFsaWQ7CiAJCX0KLQkJYnJlYWs7CisKKwkJZ290byBxdWV1ZTsKIAljYXNlIFdMQU5fQ0FURUdPUllfU1BFQ1RSVU1fTUdNVDoKIAkJaWYgKGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQgIT0gSUVFRTgwMjExX0JBTkRfNUdIWikKIAkJCWJyZWFrOwpAQCAtMTk5Nyw3ICsyMDAxLDcgQEAKIAkJCWlmIChtZW1jbXAobWdtdC0+YnNzaWQsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pKQogCQkJCWJyZWFrOwogCi0JCQlyZXR1cm4gaWVlZTgwMjExX3N0YV9yeF9tZ210KHNkYXRhLCByeC0+c2tiKTsKKwkJCWdvdG8gcXVldWU7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBXTEFOX0NBVEVHT1JZX1NBX1FVRVJZOgpAQCAtMjAxNSwxMSArMjAxOSwxMiBAQAogCQlicmVhazsKIAljYXNlIFdMQU5fQ0FURUdPUllfTUVTSF9QTElOSzoKIAljYXNlIFdMQU5fQ0FURUdPUllfTUVTSF9QQVRIX1NFTDoKLQkJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpCi0JCQlyZXR1cm4gaWVlZTgwMjExX21lc2hfcnhfbWdtdChzZGF0YSwgcngtPnNrYik7Ci0JCWJyZWFrOworCQlpZiAoIWllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpCisJCQlicmVhazsKKwkJZ290byBxdWV1ZTsKIAl9CiAKKyBpbnZhbGlkOgogCS8qCiAJICogRm9yIEFQIG1vZGUsIGhvc3RhcGQgaXMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIGFueSBhY3Rpb24KIAkgKiBmcmFtZXMgdGhhdCB3ZSBkaWRuJ3QgaGFuZGxlLCBpbmNsdWRpbmcgcmV0dXJuaW5nIHVua25vd24KQEAgLTIwMzksOCArMjA0NCw3IEBACiAJICovCiAJc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHJ4LT5za2IpOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCi0JICAgIGNmZzgwMjExX3J4X2FjdGlvbihyeC0+c2RhdGEtPmRldiwgc3RhdHVzLT5mcmVxLAorCWlmIChjZmc4MDIxMV9yeF9hY3Rpb24ocngtPnNkYXRhLT5kZXYsIHN0YXR1cy0+ZnJlcSwKIAkJCSAgICAgICByeC0+c2tiLT5kYXRhLCByeC0+c2tiLT5sZW4sCiAJCQkgICAgICAgR0ZQX0FUT01JQykpCiAJCWdvdG8gaGFuZGxlZDsKQEAgLTIwNTIsMTEgKzIwNTYsMTEgQEAKIAluc2tiID0gc2tiX2NvcHlfZXhwYW5kKHJ4LT5za2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSwgMCwKIAkJCSAgICAgICBHRlBfQVRPTUlDKTsKIAlpZiAobnNrYikgewotCQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQgPSAodm9pZCAqKW5za2ItPmRhdGE7CisJCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbm1nbXQgPSAodm9pZCAqKW5za2ItPmRhdGE7CiAKLQkJbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgfD0gMHg4MDsKLQkJbWVtY3B5KG1nbXQtPmRhLCBtZ210LT5zYSwgRVRIX0FMRU4pOwotCQltZW1jcHkobWdtdC0+c2EsIHJ4LT5zZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKKwkJbm1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5IHw9IDB4ODA7CisJCW1lbWNweShubWdtdC0+ZGEsIG5tZ210LT5zYSwgRVRIX0FMRU4pOworCQltZW1jcHkobm1nbXQtPnNhLCByeC0+c2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CiAKIAkJbWVtc2V0KG5za2ItPmNiLCAwLCBzaXplb2YobnNrYi0+Y2IpKTsKIApAQCAtMjA2OCw2ICsyMDcyLDE0IEBACiAJCXJ4LT5zdGEtPnJ4X3BhY2tldHMrKzsKIAlkZXZfa2ZyZWVfc2tiKHJ4LT5za2IpOwogCXJldHVybiBSWF9RVUVVRUQ7CisKKyBxdWV1ZToKKwlyeC0+c2tiLT5wa3RfdHlwZSA9IElFRUU4MDIxMV9TREFUQV9RVUVVRV9UWVBFX0ZSQU1FOworCXNrYl9xdWV1ZV90YWlsKCZzZGF0YS0+c2tiX3F1ZXVlLCByeC0+c2tiKTsKKwlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmc2RhdGEtPndvcmspOworCWlmIChyeC0+c3RhKQorCQlyeC0+c3RhLT5yeF9wYWNrZXRzKys7CisJcmV0dXJuIFJYX1FVRVVFRDsKIH0KIAogc3RhdGljIGllZWU4MDIxMV9yeF9yZXN1bHQgZGVidWdfbm9pbmxpbmUKQEAgLTIwNzUsMTAgKzIwODcsMTUgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHJ4LT5zZGF0YTsKIAlpZWVlODAyMTFfcnhfcmVzdWx0IHJ4czsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQgPSAodm9pZCAqKXJ4LT5za2ItPmRhdGE7CisJX19sZTE2IHN0eXBlOwogCiAJaWYgKCEocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX1JBX01BVENIKSkKIAkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAorCWlmIChyeC0+c2tiLT5sZW4gPCAyNCkKKwkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwogCWlmIChpZWVlODAyMTFfZHJvcF91bmVuY3J5cHRlZF9tZ210KHJ4KSkKIAkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CiAKQEAgLTIwODYsMTYgKzIxMDMsNDIgQEAKIAlpZiAocnhzICE9IFJYX0NPTlRJTlVFKQogCQlyZXR1cm4gcnhzOwogCi0JaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpCi0JCXJldHVybiBpZWVlODAyMTFfbWVzaF9yeF9tZ210KHNkYXRhLCByeC0+c2tiKTsKKwlzdHlwZSA9IG1nbXQtPmZyYW1lX2NvbnRyb2wgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9TVFlQRSk7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCQlyZXR1cm4gaWVlZTgwMjExX2lic3NfcnhfbWdtdChzZGF0YSwgcngtPnNrYik7CisJaWYgKCFpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpICYmCisJICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgorCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKLQkJcmV0dXJuIGllZWU4MDIxMV9zdGFfcnhfbWdtdChzZGF0YSwgcngtPnNrYik7CisJc3dpdGNoIChzdHlwZSkgeworCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX0JFQUNPTik6CisJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCk6CisJCS8qIHByb2Nlc3MgZm9yIGFsbDogbWVzaCwgbWxtZSwgaWJzcyAqLworCQlicmVhazsKKwljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9ERUFVVEgpOgorCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DKToKKwkJLyogcHJvY2VzcyBvbmx5IGZvciBzdGF0aW9uICovCisJCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisJCWJyZWFrOworCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUSk6CisJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfQVVUSCk6CisJCS8qIHByb2Nlc3Mgb25seSBmb3IgaWJzcyAqLworCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwl9CiAKLQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCS8qIHF1ZXVlIHVwIGZyYW1lIGFuZCBraWNrIG9mZiB3b3JrIHRvIHByb2Nlc3MgaXQgKi8KKwlyeC0+c2tiLT5wa3RfdHlwZSA9IElFRUU4MDIxMV9TREFUQV9RVUVVRV9UWVBFX0ZSQU1FOworCXNrYl9xdWV1ZV90YWlsKCZzZGF0YS0+c2tiX3F1ZXVlLCByeC0+c2tiKTsKKwlpZWVlODAyMTFfcXVldWVfd29yaygmcngtPmxvY2FsLT5odywgJnNkYXRhLT53b3JrKTsKKwlpZiAocngtPnN0YSkKKwkJcngtPnN0YS0+cnhfcGFja2V0cysrOworCisJcmV0dXJuIFJYX1FVRVVFRDsKIH0KIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21pY2hhZWxfbWljX3JlcG9ydChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLApAQCAtMjE1MSw3ICsyMTk0LDcgQEAKIAkJdTggcmF0ZV9vcl9wYWQ7CiAJCV9fbGUxNiBjaGFuX2ZyZXE7CiAJCV9fbGUxNiBjaGFuX2ZsYWdzOwotCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpydGhkcjsKKwl9IF9fcGFja2VkICpydGhkcjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcngtPnNrYiwgKnNrYjI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnByZXZfZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7CkBAIC0yMjAxLDcgKzIyNDQsNyBAQAogCQkJc2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOwogCQkJaWYgKHNrYjIpIHsKIAkJCQlza2IyLT5kZXYgPSBwcmV2X2RldjsKLQkJCQluZXRpZl9yeChza2IyKTsKKwkJCQluZXRpZl9yZWNlaXZlX3NrYihza2IyKTsKIAkJCX0KIAkJfQogCkBAIC0yMjEyLDcgKzIyNTUsNyBAQAogCiAJaWYgKHByZXZfZGV2KSB7CiAJCXNrYi0+ZGV2ID0gcHJldl9kZXY7Ci0JCW5ldGlmX3J4KHNrYik7CisJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CiAJCXNrYiA9IE5VTEw7CiAJfSBlbHNlCiAJCWdvdG8gb3V0X2ZyZWVfc2tiOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3NjYW4uYyBiL25ldC9tYWM4MDIxMS9zY2FuLmMKaW5kZXggZTFiMGJlNy4uNDFmMjBmYiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3NjYW4uYworKysgYi9uZXQvbWFjODAyMTEvc2Nhbi5jCkBAIC0xMTQsNiArMTE0LDEwIEBACiAJCWJzcy0+ZHRpbV9wZXJpb2QgPSB0aW1faWUtPmR0aW1fcGVyaW9kOwogCX0KIAorCS8qIElmIHRoZSBiZWFjb24gaGFkIG5vIFRJTSBJRSwgb3IgaXQgd2FzIGludmFsaWQsIHVzZSAxICovCisJaWYgKGJlYWNvbiAmJiAhYnNzLT5kdGltX3BlcmlvZCkKKwkJYnNzLT5kdGltX3BlcmlvZCA9IDE7CisKIAkvKiByZXBsYWNlIG9sZCBzdXBwb3J0ZWQgcmF0ZXMgaWYgd2UgZ2V0IG5ldyB2YWx1ZXMgKi8KIAlzcmxlbiA9IDA7CiAJaWYgKGVsZW1zLT5zdXBwX3JhdGVzKSB7CkBAIC03MzQsNyArNzM4LDcgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlpbnQgcmV0ID0gLUVCVVNZOwotCWVudW0gbmw4MDIxMV9iYW5kIGJhbmQ7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwogCiAJbXV0ZXhfbG9jaygmbG9jYWwtPnNjYW5fbXR4KTsKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwppbmRleCBiYTkzNjBhLi42ZDg2ZjBjIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uYworKysgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwpAQCAtMjM1LDYgKzIzNSw4IEBACiAJc3Bpbl9sb2NrX2luaXQoJnN0YS0+bG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnN0YS0+ZmxhZ2xvY2spOwogCUlOSVRfV09SSygmc3RhLT5kcnZfdW5ibG9ja193aywgc3RhX3VuYmxvY2spOworCUlOSVRfV09SSygmc3RhLT5hbXBkdV9tbG1lLndvcmssIGllZWU4MDIxMV9iYV9zZXNzaW9uX3dvcmspOworCW11dGV4X2luaXQoJnN0YS0+YW1wZHVfbWxtZS5tdHgpOwogCiAJbWVtY3B5KHN0YS0+c3RhLmFkZHIsIGFkZHIsIEVUSF9BTEVOKTsKIAlzdGEtPmxvY2FsID0gbG9jYWw7CkBAIC0yNDYsMTQgKzI0OCwxMiBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBTVEFfVElEX05VTTsgaSsrKSB7Ci0JCS8qIHRpbWVyX3RvX3RpZCBtdXN0IGJlIGluaXRpYWxpemVkIHdpdGggaWRlbnRpdHkgbWFwcGluZyB0bwotCQkgKiBlbmFibGUgc2Vzc2lvbl90aW1lcidzIGRhdGEgZGlmZmVyZW50aWF0aW9uLiByZWZlciB0bwotCQkgKiBzdGFfcnhfYWdnX3Nlc3Npb25fdGltZXJfZXhwaXJlZCBmb3IgdXNlYWdlICovCisJCS8qCisJCSAqIHRpbWVyX3RvX3RpZCBtdXN0IGJlIGluaXRpYWxpemVkIHdpdGggaWRlbnRpdHkgbWFwcGluZworCQkgKiB0byBlbmFibGUgc2Vzc2lvbl90aW1lcidzIGRhdGEgZGlmZmVyZW50aWF0aW9uLiBTZWUKKwkJICogc3RhX3J4X2FnZ19zZXNzaW9uX3RpbWVyX2V4cGlyZWQgZm9yIHVzYWdlLgorCQkgKi8KIAkJc3RhLT50aW1lcl90b190aWRbaV0gPSBpOwotCQkvKiB0eCAqLwotCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W2ldID0gSFRfQUdHX1NUQVRFX0lETEU7Ci0JCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbaV0gPSBOVUxMOwotCQlzdGEtPmFtcGR1X21sbWUuYWRkYmFfcmVxX251bVtpXSA9IDA7CiAJfQogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnN0YS0+cHNfdHhfYnVmKTsKIAlza2JfcXVldWVfaGVhZF9pbml0KCZzdGEtPnR4X2ZpbHRlcmVkKTsKQEAgLTY0NywxNSArNjQ3LDcgQEAKIAkJcmV0dXJuIHJldDsKIAogCWlmIChzdGEtPmtleSkgewotCQlpZWVlODAyMTFfa2V5X2ZyZWUoc3RhLT5rZXkpOwotCQkvKgotCQkgKiBXZSBoYXZlIG9ubHkgdW5saW5rZWQgdGhlIGtleSwgYW5kIGFjdHVhbGx5IGRlc3Ryb3lpbmcgaXQKLQkJICogbWF5IG1lYW4gaXQgaXMgcmVtb3ZlZCBmcm9tIGhhcmR3YXJlIHdoaWNoIHJlcXVpcmVzIHRoYXQKLQkJICogdGhlIGtleS0+c3RhIHBvaW50ZXIgaXMgc3RpbGwgdmFsaWQsIHNvIGZsdXNoIHRoZSBrZXkgdG9kbwotCQkgKiBsaXN0IGhlcmUuCi0JCSAqLwotCQlpZWVlODAyMTFfa2V5X3RvZG8oKTsKLQorCQlpZWVlODAyMTFfa2V5X2ZyZWUobG9jYWwsIHN0YS0+a2V5KTsKIAkJV0FSTl9PTihzdGEtPmtleSk7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uaCBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oCmluZGV4IGRmOWQ0NTUuLjU0MjYyZTcgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oCisrKyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oCkBAIC00Miw5ICs0Miw2IEBACiAgKgliZSBpbiB0aGUgcXVldWVzCiAgKiBAV0xBTl9TVEFfUFNQT0xMOiBTdGF0aW9uIHNlbnQgUFMtcG9sbCB3aGlsZSBkcml2ZXIgd2FzIGtlZXBpbmcKICAqCXN0YXRpb24gaW4gcG93ZXItc2F2ZSBtb2RlLCByZXBseSB3aGVuIHRoZSBkcml2ZXIgdW5ibG9ja3MuCi0gKiBAV0xBTl9TVEFfRElTQVNTT0M6IERpc2Fzc29jaWF0aW9uIGluIHByb2dyZXNzLgotICoJVGhpcyBpcyB1c2VkIHRvIHJlamVjdCBUWCBCQSBzZXNzaW9uIHJlcXVlc3RzIHdoZW4gZGlzYXNzb2NpYXRpb24KLSAqCWlzIGluIHByb2dyZXNzLgogICovCiBlbnVtIGllZWU4MDIxMV9zdGFfaW5mb19mbGFncyB7CiAJV0xBTl9TVEFfQVVUSAkJPSAxPDwwLApAQCAtNjAsMzggKzU3LDQ0IEBACiAJV0xBTl9TVEFfQkxPQ0tfQkEJPSAxPDwxMSwKIAlXTEFOX1NUQV9QU19EUklWRVIJPSAxPDwxMiwKIAlXTEFOX1NUQV9QU1BPTEwJCT0gMTw8MTMsCi0JV0xBTl9TVEFfRElTQVNTT0MgICAgICAgPSAxPDwxNCwKIH07CiAKICNkZWZpbmUgU1RBX1RJRF9OVU0gMTYKICNkZWZpbmUgQUREQkFfUkVTUF9JTlRFUlZBTCBIWgotI2RlZmluZSBIVF9BR0dfTUFYX1JFVFJJRVMJCSgweDMpCisjZGVmaW5lIEhUX0FHR19NQVhfUkVUUklFUwkJMHgzCiAKLSNkZWZpbmUgSFRfQUdHX1NUQVRFX0lOSVRJQVRPUl9TSElGVAkoNCkKLQotI2RlZmluZSBIVF9BRERCQV9SRVFVRVNURURfTVNLCQlCSVQoMCkKLSNkZWZpbmUgSFRfQUREQkFfRFJWX1JFQURZX01TSwkJQklUKDEpCi0jZGVmaW5lIEhUX0FEREJBX1JFQ0VJVkVEX01TSwkJQklUKDIpCi0jZGVmaW5lIEhUX0FHR19TVEFURV9SRVFfU1RPUF9CQV9NU0sJQklUKDMpCi0jZGVmaW5lIEhUX0FHR19TVEFURV9JTklUSUFUT1JfTVNLICAgICAgQklUKEhUX0FHR19TVEFURV9JTklUSUFUT1JfU0hJRlQpCi0jZGVmaW5lIEhUX0FHR19TVEFURV9JRExFCQkoMHgwKQotI2RlZmluZSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwJKEhUX0FEREJBX1JFUVVFU1RFRF9NU0sgfAlcCi0JCQkJCSBIVF9BRERCQV9EUlZfUkVBRFlfTVNLIHwJXAotCQkJCQkgSFRfQUREQkFfUkVDRUlWRURfTVNLKQorI2RlZmluZSBIVF9BR0dfU1RBVEVfRFJWX1JFQURZCQkwCisjZGVmaW5lIEhUX0FHR19TVEFURV9SRVNQT05TRV9SRUNFSVZFRAkxCisjZGVmaW5lIEhUX0FHR19TVEFURV9PUEVSQVRJT05BTAkyCisjZGVmaW5lIEhUX0FHR19TVEFURV9TVE9QUElORwkJMworI2RlZmluZSBIVF9BR0dfU1RBVEVfV0FOVF9TVEFSVAkJNAorI2RlZmluZSBIVF9BR0dfU1RBVEVfV0FOVF9TVE9QCQk1CiAKIC8qKgogICogc3RydWN0IHRpZF9hbXBkdV90eCAtIFRJRCBhZ2dyZWdhdGlvbiBpbmZvcm1hdGlvbiAoVHgpLgogICoKKyAqIEByY3VfaGVhZDogcmN1IGhlYWQgZm9yIGZyZWVpbmcgc3RydWN0dXJlCiAgKiBAYWRkYmFfcmVzcF90aW1lcjogdGltZXIgZm9yIHBlZXIncyByZXNwb25zZSB0byBhZGRiYSByZXF1ZXN0CiAgKiBAcGVuZGluZzogcGVuZGluZyBmcmFtZXMgcXVldWUgLS0gdXNlIHN0YSdzIHNwaW5sb2NrIHRvIHByb3RlY3QKLSAqIEBzc246IFN0YXJ0aW5nIFNlcXVlbmNlIE51bWJlciBleHBlY3RlZCB0byBiZSBhZ2dyZWdhdGVkLgogICogQGRpYWxvZ190b2tlbjogZGlhbG9nIHRva2VuIGZvciBhZ2dyZWdhdGlvbiBzZXNzaW9uCisgKiBAc3RhdGU6IHNlc3Npb24gc3RhdGUgKHNlZSBhYm92ZSkKKyAqIEBzdG9wX2luaXRpYXRvcjogaW5pdGlhdG9yIG9mIGEgc2Vzc2lvbiBzdG9wCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgcHJvdGVjdGVkIGJ5IFJDVSBhbmQgdGhlIHBlci1zdGF0aW9uCisgKiBzcGlubG9jay4gQXNzaWdubWVudHMgdG8gdGhlIGFycmF5IGhvbGRpbmcgaXQgbXVzdCBob2xkCisgKiB0aGUgc3BpbmxvY2ssIG9ubHkgdGhlIFRYIHBhdGggY2FuIGFjY2VzcyBpdCB1bmRlciBSQ1UKKyAqIGxvY2stZnJlZSBpZiwgYW5kIG9ubHkgaWYsIHRoZSBzdGF0ZSBoYXMgIHRoZSBmbGFnCisgKiAlSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMIHNldC4gT3RoZXJ3aXNlLCB0aGUgVFggcGF0aAorICogbXVzdCBhbHNvIGFjcXVpcmUgdGhlIHNwaW5sb2NrIGFuZCByZS1jaGVjayB0aGUgc3RhdGUsCisgKiBzZWUgY29tbWVudHMgaW4gdGhlIHR4IGNvZGUgdG91Y2hpbmcgaXQuCiAgKi8KIHN0cnVjdCB0aWRfYW1wZHVfdHggeworCXN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBhZGRiYV9yZXNwX3RpbWVyOwogCXN0cnVjdCBza19idWZmX2hlYWQgcGVuZGluZzsKLQl1MTYgc3NuOworCXVuc2lnbmVkIGxvbmcgc3RhdGU7CiAJdTggZGlhbG9nX3Rva2VuOworCXU4IHN0b3BfaW5pdGlhdG9yOwogfTsKIAogLyoqCkBAIC0xMDYsOCArMTA5LDE4IEBACiAgKiBAYnVmX3NpemU6IGJ1ZmZlciBzaXplIGZvciBpbmNvbWluZyBBLU1QRFVzCiAgKiBAdGltZW91dDogcmVzZXQgdGltZXIgdmFsdWUgKGluIFRVcykuCiAgKiBAZGlhbG9nX3Rva2VuOiBkaWFsb2cgdG9rZW4gZm9yIGFnZ3JlZ2F0aW9uIHNlc3Npb24KKyAqIEByY3VfaGVhZDogUkNVIGhlYWQgdXNlZCBmb3IgZnJlZWluZyB0aGlzIHN0cnVjdAorICoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHByb3RlY3RlZCBieSBSQ1UgYW5kIHRoZSBwZXItc3RhdGlvbgorICogc3BpbmxvY2suIEFzc2lnbm1lbnRzIHRvIHRoZSBhcnJheSBob2xkaW5nIGl0IG11c3QgaG9sZAorICogdGhlIHNwaW5sb2NrLCBvbmx5IHRoZSBSWCBwYXRoIGNhbiBhY2Nlc3MgaXQgdW5kZXIgUkNVCisgKiBsb2NrLWZyZWUuIFRoZSBSWCBwYXRoLCBzaW5jZSBpdCBpcyBzaW5nbGUtdGhyZWFkZWQsCisgKiBjYW4gZXZlbiBtb2RpZnkgdGhlIHN0cnVjdHVyZSB3aXRob3V0IGxvY2tpbmcgc2luY2UgdGhlCisgKiBvbmx5IG90aGVyIG1vZGlmaWNhdGlvbnMgdG8gaXQgYXJlIGRvbmUgd2hlbiB0aGUgc3RydWN0CisgKiBjYW4gbm90IHlldCBvciBubyBsb25nZXIgYmUgZm91bmQgYnkgdGhlIFJYIHBhdGguCiAgKi8KIHN0cnVjdCB0aWRfYW1wZHVfcnggeworCXN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqKnJlb3JkZXJfYnVmOwogCXVuc2lnbmVkIGxvbmcgKnJlb3JkZXJfdGltZTsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBzZXNzaW9uX3RpbWVyOwpAQCAtMTIwLDYgKzEzMywzMiBAQAogfTsKIAogLyoqCisgKiBzdHJ1Y3Qgc3RhX2FtcGR1X21sbWUgLSBTVEEgYWdncmVnYXRpb24gaW5mb3JtYXRpb24uCisgKgorICogQHRpZF9yeDogYWdncmVnYXRpb24gaW5mbyBmb3IgUnggcGVyIFRJRCAtLSBSQ1UgcHJvdGVjdGVkCisgKiBAdGlkX3R4OiBhZ2dyZWdhdGlvbiBpbmZvIGZvciBUeCBwZXIgVElECisgKiBAYWRkYmFfcmVxX251bTogbnVtYmVyIG9mIHRpbWVzIGFkZEJBIHJlcXVlc3QgaGFzIGJlZW4gc2VudC4KKyAqIEBkaWFsb2dfdG9rZW5fYWxsb2NhdG9yOiBkaWFsb2cgdG9rZW4gZW51bWVyYXRvciBmb3IgZWFjaCBuZXcgc2Vzc2lvbjsKKyAqIEB3b3JrOiB3b3JrIHN0cnVjdCBmb3Igc3RhcnRpbmcvc3RvcHBpbmcgYWdncmVnYXRpb24KKyAqIEB0aWRfcnhfdGltZXJfZXhwaXJlZDogYml0bWFwIGluZGljYXRpbmcgb24gd2hpY2ggVElEcyB0aGUKKyAqCVJYIHRpbWVyIGV4cGlyZWQgdW50aWwgdGhlIHdvcmsgZm9yIGl0IHJ1bnMKKyAqIEBtdHg6IG11dGV4IHRvIHByb3RlY3QgYWxsIFRYIGRhdGEgKGV4Y2VwdCBub24tTlVMTCBhc3NpZ25tZW50cworICoJdG8gdGlkX3R4W2lkeF0sIHdoaWNoIGFyZSBwcm90ZWN0ZWQgYnkgdGhlIHN0YSBzcGlubG9jaykKKyAqLworc3RydWN0IHN0YV9hbXBkdV9tbG1lIHsKKwlzdHJ1Y3QgbXV0ZXggbXR4OworCS8qIHJ4ICovCisJc3RydWN0IHRpZF9hbXBkdV9yeCAqdGlkX3J4W1NUQV9USURfTlVNXTsKKwl1bnNpZ25lZCBsb25nIHRpZF9yeF90aW1lcl9leHBpcmVkW0JJVFNfVE9fTE9OR1MoU1RBX1RJRF9OVU0pXTsKKwkvKiB0eCAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCXN0cnVjdCB0aWRfYW1wZHVfdHggKnRpZF90eFtTVEFfVElEX05VTV07CisJdTggYWRkYmFfcmVxX251bVtTVEFfVElEX05VTV07CisJdTggZGlhbG9nX3Rva2VuX2FsbG9jYXRvcjsKK307CisKKworLyoqCiAgKiBlbnVtIHBsaW5rX3N0YXRlIC0gc3RhdGUgb2YgYSBtZXNoIHBlZXIgbGluayBmaW5pdGUgc3RhdGUgbWFjaGluZQogICoKICAqIEBQTElOS19MSVNURU46IGluaXRpYWwgc3RhdGUsIGNvbnNpZGVyZWQgdGhlIGltcGxpY2l0IHN0YXRlIG9mIG5vbiBleGlzdGFudApAQCAtMTQzLDI4ICsxODIsNiBAQAogfTsKIAogLyoqCi0gKiBzdHJ1Y3Qgc3RhX2FtcGR1X21sbWUgLSBTVEEgYWdncmVnYXRpb24gaW5mb3JtYXRpb24uCi0gKgotICogQHRpZF9hY3RpdmVfcng6IFRJRCdzIHN0YXRlIGluIFJ4IHNlc3Npb24gc3RhdGUgbWFjaGluZS4KLSAqIEB0aWRfcng6IGFnZ3JlZ2F0aW9uIGluZm8gZm9yIFJ4IHBlciBUSUQKLSAqIEB0aWRfc3RhdGVfdHg6IFRJRCdzIHN0YXRlIGluIFR4IHNlc3Npb24gc3RhdGUgbWFjaGluZS4KLSAqIEB0aWRfdHg6IGFnZ3JlZ2F0aW9uIGluZm8gZm9yIFR4IHBlciBUSUQKLSAqIEBhZGRiYV9yZXFfbnVtOiBudW1iZXIgb2YgdGltZXMgYWRkQkEgcmVxdWVzdCBoYXMgYmVlbiBzZW50LgotICogQGRpYWxvZ190b2tlbl9hbGxvY2F0b3I6IGRpYWxvZyB0b2tlbiBlbnVtZXJhdG9yIGZvciBlYWNoIG5ldyBzZXNzaW9uOwotICovCi1zdHJ1Y3Qgc3RhX2FtcGR1X21sbWUgewotCS8qIHJ4ICovCi0JYm9vbCB0aWRfYWN0aXZlX3J4W1NUQV9USURfTlVNXTsKLQlzdHJ1Y3QgdGlkX2FtcGR1X3J4ICp0aWRfcnhbU1RBX1RJRF9OVU1dOwotCS8qIHR4ICovCi0JdTggdGlkX3N0YXRlX3R4W1NUQV9USURfTlVNXTsKLQlzdHJ1Y3QgdGlkX2FtcGR1X3R4ICp0aWRfdHhbU1RBX1RJRF9OVU1dOwotCXU4IGFkZGJhX3JlcV9udW1bU1RBX1RJRF9OVU1dOwotCXU4IGRpYWxvZ190b2tlbl9hbGxvY2F0b3I7Ci19OwotCi0KLS8qKgogICogc3RydWN0IHN0YV9pbmZvIC0gU1RBIGluZm9ybWF0aW9uCiAgKgogICogVGhpcyBzdHJ1Y3R1cmUgY29sbGVjdHMgaW5mb3JtYXRpb24gYWJvdXQgYSBzdGF0aW9uIHRoYXQKQEAgLTQxMCwyMCArNDI3LDIwIEBACiB7CiB9CiAKLSNkZWZpbmUgZm9yX2VhY2hfc3RhX2luZm8obG9jYWwsIF9hZGRyLCBzdGEsIG54dCkgCQkJXAorI2RlZmluZSBmb3JfZWFjaF9zdGFfaW5mbyhsb2NhbCwgX2FkZHIsIF9zdGEsIG54dCkgCQkJXAogCWZvciAoCS8qIGluaXRpYWxpc2UgbG9vcCAqLwkJCQkJXAotCQlzdGEgPSByY3VfZGVyZWZlcmVuY2UobG9jYWwtPnN0YV9oYXNoW1NUQV9IQVNIKF9hZGRyKV0pLFwKLQkJbnh0ID0gc3RhID8gcmN1X2RlcmVmZXJlbmNlKHN0YS0+aG5leHQpIDogTlVMTDsJCVwKKwkJX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShsb2NhbC0+c3RhX2hhc2hbU1RBX0hBU0goX2FkZHIpXSksXAorCQlueHQgPSBfc3RhID8gcmN1X2RlcmVmZXJlbmNlKF9zdGEtPmhuZXh0KSA6IE5VTEw7CVwKIAkJLyogdHlwZWNoZWNrICovCQkJCQkJXAotCQlmb3JfZWFjaF9zdGFfaW5mb190eXBlX2NoZWNrKGxvY2FsLCAoX2FkZHIpLCBzdGEsIG54dCksCVwKKwkJZm9yX2VhY2hfc3RhX2luZm9fdHlwZV9jaGVjayhsb2NhbCwgKF9hZGRyKSwgX3N0YSwgbnh0KSxcCiAJCS8qIGNvbnRpbnVlIGNvbmRpdGlvbiAqLwkJCQlcCi0JCXN0YTsJCQkJCQkJXAorCQlfc3RhOwkJCQkJCQlcCiAJCS8qIGFkdmFuY2UgbG9vcCAqLwkJCQkJXAotCQlzdGEgPSBueHQsCQkJCQkJXAotCQlueHQgPSBzdGEgPyByY3VfZGVyZWZlcmVuY2Uoc3RhLT5obmV4dCkgOiBOVUxMCQlcCisJCV9zdGEgPSBueHQsCQkJCQkJXAorCQlueHQgPSBfc3RhID8gcmN1X2RlcmVmZXJlbmNlKF9zdGEtPmhuZXh0KSA6IE5VTEwJXAogCSAgICAgKQkJCQkJCQkJXAogCS8qIGNvbXBhcmUgYWRkcmVzcyBhbmQgcnVuIGNvZGUgb25seSBpZiBpdCBtYXRjaGVzICovCQlcCi0JaWYgKG1lbWNtcChzdGEtPnN0YS5hZGRyLCAoX2FkZHIpLCBFVEhfQUxFTikgPT0gMCkKKwlpZiAobWVtY21wKF9zdGEtPnN0YS5hZGRyLCAoX2FkZHIpLCBFVEhfQUxFTikgPT0gMCkKIAogLyoKICAqIEdldCBTVEEgaW5mbyBieSBpbmRleCwgQlJPS0VOIQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YXR1cy5jIGIvbmV0L21hYzgwMjExL3N0YXR1cy5jCmluZGV4IDk0NjEzYWYwLi4xMGNhZWM1IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhdHVzLmMKKysrIGIvbmV0L21hYzgwMjExL3N0YXR1cy5jCkBAIC00Nyw3ICs0Nyw3IEBACiAJLyoKIAkgKiBUaGlzIHNrYiAnc3Vydml2ZWQnIGEgcm91bmQtdHJpcCB0aHJvdWdoIHRoZSBkcml2ZXIsIGFuZAogCSAqIGhvcGVmdWxseSB0aGUgZHJpdmVyIGRpZG4ndCBtYW5nbGUgaXQgdG9vIGJhZGx5LiBIb3dldmVyLAotCSAqIHdlIGNhbiBkZWZpbml0ZWx5IG5vdCByZWx5IG9uIHRoZSB0aGUgY29udHJvbCBpbmZvcm1hdGlvbgorCSAqIHdlIGNhbiBkZWZpbml0ZWx5IG5vdCByZWx5IG9uIHRoZSBjb250cm9sIGluZm9ybWF0aW9uCiAJICogYmVpbmcgY29ycmVjdC4gQ2xlYXIgaXQgc28gd2UgZG9uJ3QgZ2V0IGp1bmsgdGhlcmUsIGFuZAogCSAqIGluZGljYXRlIHRoYXQgaXQgbmVlZHMgbmV3IHByb2Nlc3NpbmcsIGJ1dCBtdXN0IG5vdCBiZQogCSAqIG1vZGlmaWVkL2VuY3J5cHRlZCBhZ2Fpbi4KQEAgLTM3Nyw3ICszNzcsNyBAQAogCQkJCXNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKIAkJCQlpZiAoc2tiMikgewogCQkJCQlza2IyLT5kZXYgPSBwcmV2X2RldjsKLQkJCQkJbmV0aWZfcngoc2tiMik7CisJCQkJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYjIpOwogCQkJCX0KIAkJCX0KIApAQCAtMzg2LDcgKzM4Niw3IEBACiAJfQogCWlmIChwcmV2X2RldikgewogCQlza2ItPmRldiA9IHByZXZfZGV2OwotCQluZXRpZl9yeChza2IpOworCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCQlza2IgPSBOVUxMOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90a2lwLmMgYi9uZXQvbWFjODAyMTEvdGtpcC5jCmluZGV4IDdlZjQ5MWUuLmU4NDBjOWMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS90a2lwLmMKKysrIGIvbmV0L21hYzgwMjExL3RraXAuYwpAQCAtMjAyLDkgKzIwMiw5IEBACiAgKiBAcGF5bG9hZF9sZW4gaXMgdGhlIGxlbmd0aCBvZiBwYXlsb2FkIChfbm90XyBpbmNsdWRpbmcgSVYvSUNWIGxlbmd0aCkuCiAgKiBAdGEgaXMgdGhlIHRyYW5zbWl0dGVyIGFkZHJlc3Nlcy4KICAqLwotdm9pZCBpZWVlODAyMTFfdGtpcF9lbmNyeXB0X2RhdGEoc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbSwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwKLQkJCQkgdTggKnBvcywgc2l6ZV90IHBheWxvYWRfbGVuLCB1OCAqdGEpCitpbnQgaWVlZTgwMjExX3RraXBfZW5jcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0sCisJCQkJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwKKwkJCQl1OCAqcG9zLCBzaXplX3QgcGF5bG9hZF9sZW4sIHU4ICp0YSkKIHsKIAl1OCByYzRrZXlbMTZdOwogCXN0cnVjdCB0a2lwX2N0eCAqY3R4ID0gJmtleS0+dS50a2lwLnR4OwpAQCAtMjE2LDcgKzIxNiw3IEBACiAKIAl0a2lwX21peGluZ19waGFzZTIodGssIGN0eCwgY3R4LT5pdjE2LCByYzRrZXkpOwogCi0JaWVlZTgwMjExX3dlcF9lbmNyeXB0X2RhdGEodGZtLCByYzRrZXksIDE2LCBwb3MsIHBheWxvYWRfbGVuKTsKKwlyZXR1cm4gaWVlZTgwMjExX3dlcF9lbmNyeXB0X2RhdGEodGZtLCByYzRrZXksIDE2LCBwb3MsIHBheWxvYWRfbGVuKTsKIH0KIAogLyogRGVjcnlwdCBwYWNrZXQgcGF5bG9hZCB3aXRoIFRLSVAgdXNpbmcgQGtleS4gQHBvcyBpcyBhIHBvaW50ZXIgdG8gdGhlCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdGtpcC5oIGIvbmV0L21hYzgwMjExL3RraXAuaAppbmRleCBkNDcxNDM4Li43ZTgzZGVlIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdGtpcC5oCisrKyBiL25ldC9tYWM4MDIxMS90a2lwLmgKQEAgLTE1LDcgKzE1LDcgQEAKIAogdTggKmllZWU4MDIxMV90a2lwX2FkZF9pdih1OCAqcG9zLCBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5LCB1MTYgaXYxNik7CiAKLXZvaWQgaWVlZTgwMjExX3RraXBfZW5jcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0sCitpbnQgaWVlZTgwMjExX3RraXBfZW5jcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0sCiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksCiAJCQkJIHU4ICpwb3MsIHNpemVfdCBwYXlsb2FkX2xlbiwgdTggKnRhKTsKIGVudW0gewpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguYwppbmRleCA2ODBiY2I3Li5jNTRkYjk2IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdHguYworKysgYi9uZXQvbWFjODAyMTEvdHguYwpAQCAtNTc2LDE3ICs1NzYsNiBAQAogfQogCiBzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQotaWVlZTgwMjExX3R4X2hfc3RhKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQih0eC0+c2tiKTsKLQotCWlmICh0eC0+c3RhICYmIHR4LT5zdGEtPnVwbG9hZGVkKQotCQlpbmZvLT5jb250cm9sLnN0YSA9ICZ0eC0+c3RhLT5zdGE7Ci0KLQlyZXR1cm4gVFhfQ09OVElOVUU7Ci19Ci0KLXN0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0IGRlYnVnX25vaW5saW5lCiBpZWVlODAyMTFfdHhfaF9yYXRlX2N0cmwoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4LT5za2IpOwpAQCAtMTA5Miw2ICsxMDgxLDU5IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyBib29sIGllZWU4MDIxMV90eF9wcmVwX2FnZyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4LAorCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbywKKwkJCQkgIHN0cnVjdCB0aWRfYW1wZHVfdHggKnRpZF90eCwKKwkJCQkgIGludCB0aWQpCit7CisJYm9vbCBxdWV1ZWQgPSBmYWxzZTsKKworCWlmICh0ZXN0X2JpdChIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwsICZ0aWRfdHgtPnN0YXRlKSkgeworCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX0FNUERVOworCX0gZWxzZSBpZiAodGVzdF9iaXQoSFRfQUdHX1NUQVRFX1dBTlRfU1RBUlQsICZ0aWRfdHgtPnN0YXRlKSkgeworCQkvKgorCQkgKiBub3RoaW5nIC0tIHRoaXMgYWdncmVnYXRpb24gc2Vzc2lvbiBpcyBiZWluZyBzdGFydGVkCisJCSAqIGJ1dCB0aGF0IG1pZ2h0IHN0aWxsIGZhaWwgd2l0aCB0aGUgZHJpdmVyCisJCSAqLworCX0gZWxzZSB7CisJCXNwaW5fbG9jaygmdHgtPnN0YS0+bG9jayk7CisJCS8qCisJCSAqIE5lZWQgdG8gcmUtY2hlY2sgbm93LCBiZWNhdXNlIHdlIG1heSBnZXQgaGVyZQorCQkgKgorCQkgKiAgMSkgaW4gdGhlIHdpbmRvdyBkdXJpbmcgd2hpY2ggdGhlIHNldHVwIGlzIGFjdHVhbGx5CisJCSAqICAgICBhbHJlYWR5IGRvbmUsIGJ1dCBub3QgbWFya2VkIHlldCBiZWNhdXNlIG5vdCBhbGwKKwkJICogICAgIHBhY2tldHMgYXJlIHNwbGljZWQgb3ZlciB0byB0aGUgZHJpdmVyIHBlbmRpbmcKKwkJICogICAgIHF1ZXVlIHlldCAtLSBpZiB0aGlzIGhhcHBlbmVkIHdlIGFjcXVpcmUgdGhlIGxvY2sKKwkJICogICAgIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlIHNwbGljZSBoYXBwZW5zLCBidXQKKwkJICogICAgIG5lZWQgdG8gcmVjaGVjayB3aGljaCBvZiB0aGVzZSBjYXNlcyBoYXBwZW5lZC4KKwkJICoKKwkJICogIDIpIGR1cmluZyBzZXNzaW9uIHRlYXJkb3duLCBpZiB0aGUgT1BFUkFUSU9OQUwgYml0CisJCSAqICAgICB3YXMgY2xlYXJlZCBkdWUgdG8gdGhlIHRlYXJkb3duIGJ1dCB0aGUgcG9pbnRlcgorCQkgKiAgICAgaGFzbid0IGJlZW4gYXNzaWduZWQgTlVMTCB5ZXQgKG9yIHdlIGxvYWRlZCBpdAorCQkgKiAgICAgYmVmb3JlIGl0IHdhcyBhc3NpZ25lZCkgLS0gaW4gdGhpcyBjYXNlIGl0IG1heQorCQkgKiAgICAgbm93IGJlIE5VTEwgd2hpY2ggbWVhbnMgd2Ugc2hvdWxkIGp1c3QgbGV0IHRoZQorCQkgKiAgICAgcGFja2V0IHBhc3MgdGhyb3VnaCBiZWNhdXNlIHNwbGljaW5nIHRoZSBmcmFtZXMKKwkJICogICAgIGJhY2sgaXMgYWxyZWFkeSBkb25lLgorCQkgKi8KKwkJdGlkX3R4ID0gdHgtPnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXTsKKworCQlpZiAoIXRpZF90eCkgeworCQkJLyogZG8gbm90aGluZywgbGV0IHBhY2tldCBwYXNzIHRocm91Z2ggKi8KKwkJfSBlbHNlIGlmICh0ZXN0X2JpdChIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwsICZ0aWRfdHgtPnN0YXRlKSkgeworCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9BTVBEVTsKKwkJfSBlbHNlIHsKKwkJCXF1ZXVlZCA9IHRydWU7CisJCQlpbmZvLT5jb250cm9sLnZpZiA9ICZ0eC0+c2RhdGEtPnZpZjsKKwkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9ORUVEX1RYUFJPQ0VTU0lORzsKKwkJCV9fc2tiX3F1ZXVlX3RhaWwoJnRpZF90eC0+cGVuZGluZywgc2tiKTsKKwkJfQorCQlzcGluX3VubG9jaygmdHgtPnN0YS0+bG9jayk7CisJfQorCisJcmV0dXJuIHF1ZXVlZDsKK30KKwogLyoKICAqIGluaXRpYWxpc2VzIEB0eAogICovCkBAIC0xMTA0LDggKzExNDYsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCWludCBoZHJsZW4sIHRpZDsKLQl1OCAqcWMsICpzdGF0ZTsKLQlib29sIHF1ZXVlZCA9IGZhbHNlOworCXU4ICpxYzsKIAogCW1lbXNldCh0eCwgMCwgc2l6ZW9mKCp0eCkpOwogCXR4LT5za2IgPSBza2I7CkBAIC0xMTU3LDM1ICsxMTk4LDE2IEBACiAJCXFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CiAJCXRpZCA9ICpxYyAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOwogCi0JCXNwaW5fbG9jaygmdHgtPnN0YS0+bG9jayk7Ci0JCS8qCi0JCSAqIFhYWDogVGhpcyBzcGlubG9jayBjb3VsZCBiZSBmYWlybHkgZXhwZW5zaXZlLCBidXQgc2VlIHRoZQotCQkgKgljb21tZW50IGluIGFnZy10eC5jOmllZWU4MDIxMV9hZ2dfdHhfb3BlcmF0aW9uYWwoKS4KLQkJICoJT25lIHdheSB0byBzb2x2ZSB0aGlzIHdvdWxkIGJlIHRvIGRvIHNvbWV0aGluZyBSQ1UtbGlrZQotCQkgKglmb3IgbWFuYWdpbmcgdGhlIHRpZF90eCBzdHJ1Y3QgYW5kIHVzaW5nIGF0b21pYyBiaXRvcHMKLQkJICoJZm9yIHRoZSBhY3R1YWwgc3RhdGUgLS0gYnkgaW50cm9kdWNpbmcgYW4gYWN0dWFsCi0JCSAqCSdvcGVyYXRpb25hbCcgYml0IHRoYXQgd291bGQgYmUgcG9zc2libGUuIEl0IHdvdWxkCi0JCSAqCXJlcXVpcmUgY2hhbmdpbmcgaWVlZTgwMjExX2FnZ190eF9vcGVyYXRpb25hbCgpIHRvCi0JCSAqCXNldCB0aGF0IGJpdCwgYW5kIGNoYW5naW5nIHRoZSB3YXkgdGlkX3R4IGlzIG1hbmFnZWQKLQkJICoJZXZlcnl3aGVyZSwgaW5jbHVkaW5nIHJhY2VzIGJldHdlZW4gdGhhdCBiaXQgYW5kCi0JCSAqCXRpZF90eCBnb2luZyBhd2F5ICh0aWRfdHggYmVpbmcgYWRkZWQgY2FuIGJlIGVhc2lseQotCQkgKgljb21taXR0ZWQgdG8gbWVtb3J5IGJlZm9yZSB0aGUgJ29wZXJhdGlvbmFsJyBiaXQpLgotCQkgKi8KLQkJdGlkX3R4ID0gdHgtPnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXTsKLQkJc3RhdGUgPSAmdHgtPnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKLQkJaWYgKCpzdGF0ZSA9PSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpIHsKLQkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfQU1QRFU7Ci0JCX0gZWxzZSBpZiAoKnN0YXRlICE9IEhUX0FHR19TVEFURV9JRExFKSB7Ci0JCQkvKiBpbiBwcm9ncmVzcyAqLwotCQkJcXVldWVkID0gdHJ1ZTsKLQkJCWluZm8tPmNvbnRyb2wudmlmID0gJnNkYXRhLT52aWY7Ci0JCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfTkVFRF9UWFBST0NFU1NJTkc7Ci0JCQlfX3NrYl9xdWV1ZV90YWlsKCZ0aWRfdHgtPnBlbmRpbmcsIHNrYik7Ci0JCX0KLQkJc3Bpbl91bmxvY2soJnR4LT5zdGEtPmxvY2spOworCQl0aWRfdHggPSByY3VfZGVyZWZlcmVuY2UodHgtPnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSk7CisJCWlmICh0aWRfdHgpIHsKKwkJCWJvb2wgcXVldWVkOwogCi0JCWlmICh1bmxpa2VseShxdWV1ZWQpKQotCQkJcmV0dXJuIFRYX1FVRVVFRDsKKwkJCXF1ZXVlZCA9IGllZWU4MDIxMV90eF9wcmVwX2FnZyh0eCwgc2tiLCBpbmZvLAorCQkJCQkJICAgICAgIHRpZF90eCwgdGlkKTsKKworCQkJaWYgKHVubGlrZWx5KHF1ZXVlZCkpCisJCQkJcmV0dXJuIFRYX1FVRVVFRDsKKwkJfQogCX0KIAogCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkgewpAQCAtMTI3NCw2ICsxMjk2LDExIEBACiAJCQlicmVhazsKIAkJfQogCisJCWlmIChzdGEgJiYgc3RhLT51cGxvYWRlZCkKKwkJCWluZm8tPmNvbnRyb2wuc3RhID0gJnN0YS0+c3RhOworCQllbHNlCisJCQlpbmZvLT5jb250cm9sLnN0YSA9IE5VTEw7CisKIAkJcmV0ID0gZHJ2X3R4KGxvY2FsLCBza2IpOwogCQlpZiAoV0FSTl9PTihyZXQgIT0gTkVUREVWX1RYX09LICYmIHNrYi0+bGVuICE9IGxlbikpIHsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTEzMTMsNyArMTM0MCw2IEBACiAJQ0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2MpOwogCUNBTExfVFhIKGllZWU4MDIxMV90eF9oX3BzX2J1Zik7CiAJQ0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfc2VsZWN0X2tleSk7Ci0JQ0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfc3RhKTsKIAlpZiAoISh0eC0+bG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX0hBU19SQVRFX0NPTlRST0wpKQogCQlDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9yYXRlX2N0cmwpOwogCkBAIC0xOTA5LDExICsxOTM1LDEzIEBACiAJCWhfcG9zICs9IGVuY2Fwc19sZW47CiAJfQogCisjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKIAlpZiAobWVzaGhkcmxlbiA+IDApIHsKIAkJbWVtY3B5KHNrYl9wdXNoKHNrYiwgbWVzaGhkcmxlbiksICZtZXNoX2hkciwgbWVzaGhkcmxlbik7CiAJCW5oX3BvcyArPSBtZXNoaGRybGVuOwogCQloX3BvcyArPSBtZXNoaGRybGVuOwogCX0KKyNlbmRpZgogCiAJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKIAkJX19sZTE2ICpxb3NfY29udHJvbDsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS91dGlsLmMgYi9uZXQvbWFjODAyMTEvdXRpbC5jCmluZGV4IDViNzlkNTUuLjc0ODM4N2QgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS91dGlsLmMKKysrIGIvbmV0L21hYzgwMjExL3V0aWwuYwpAQCAtODAzLDggKzgwMywxMiBAQAogCiAJLyogYWZ0ZXIgcmVpbml0aWFsaXplIFFvUyBUWCBxdWV1ZXMgc2V0dGluZyB0byBkZWZhdWx0LAogCSAqIGRpc2FibGUgUW9TIGF0IGFsbCAqLwotCWxvY2FsLT5ody5jb25mLmZsYWdzICY9CX5JRUVFODAyMTFfQ09ORl9RT1M7Ci0JZHJ2X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1FPUyk7CisKKwlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IpIHsKKwkJc2RhdGEtPnZpZi5ic3NfY29uZi5xb3MgPQorCQkJc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CisJCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLCBCU1NfQ0hBTkdFRF9RT1MpOworCX0KIH0KIAogdm9pZCBpZWVlODAyMTFfc3RhX2RlZl93bW1fcGFyYW1zKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLApAQCAtMTEzOCwxOCArMTE0Miw2IEBACiAJfQogCW11dGV4X3VubG9jaygmbG9jYWwtPnN0YV9tdHgpOwogCi0JLyogQ2xlYXIgU3VzcGVuZCBzdGF0ZSBzbyB0aGF0IEFEREJBIHJlcXVlc3RzIGNhbiBiZSBwcm9jZXNzZWQgKi8KLQotCXJjdV9yZWFkX2xvY2soKTsKLQotCWlmIChody0+ZmxhZ3MgJiBJRUVFODAyMTFfSFdfQU1QRFVfQUdHUkVHQVRJT04pIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7Ci0JCQljbGVhcl9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9CTE9DS19CQSk7Ci0JCX0KLQl9Ci0KLQlyY3VfcmVhZF91bmxvY2soKTsKLQogCS8qIHNldHVwIFJUUyB0aHJlc2hvbGQgKi8KIAlkcnZfc2V0X3J0c190aHJlc2hvbGQobG9jYWwsIGh3LT53aXBoeS0+cnRzX3RocmVzaG9sZCk7CiAKQEAgLTExNzMsNyArMTE2NSw4IEBACiAJCQkgIEJTU19DSEFOR0VEX0JBU0lDX1JBVEVTIHwKIAkJCSAgQlNTX0NIQU5HRURfQkVBQ09OX0lOVCB8CiAJCQkgIEJTU19DSEFOR0VEX0JTU0lEIHwKLQkJCSAgQlNTX0NIQU5HRURfQ1FNOworCQkJICBCU1NfQ0hBTkdFRF9DUU0gfAorCQkJICBCU1NfQ0hBTkdFRF9RT1M7CiAKIAkJc3dpdGNoIChzZGF0YS0+dmlmLnR5cGUpIHsKIAkJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgpAQCAtMTIwMiwxMyArMTE5NSwyNiBAQAogCQl9CiAJfQogCi0JcmN1X3JlYWRfbG9jaygpOworCS8qCisJICogQ2xlYXIgdGhlIFdMQU5fU1RBX0JMT0NLX0JBIGZsYWcgc28gbmV3IGFnZ3JlZ2F0aW9uCisJICogc2Vzc2lvbnMgY2FuIGJlIGVzdGFibGlzaGVkIGFmdGVyIGEgcmVzdW1lLgorCSAqCisJICogQWxzbyB0ZWFyIGRvd24gYWdncmVnYXRpb24gc2Vzc2lvbnMgc2luY2UgcmVjb25maWd1cmluZworCSAqIHRoZW0gaW4gYSBoYXJkd2FyZSByZXN0YXJ0IHNjZW5hcmlvIGlzIG5vdCBlYXNpbHkgZG9uZQorCSAqIHJpZ2h0IG5vdywgYW5kIHRoZSBoYXJkd2FyZSB3aWxsIGhhdmUgbG9zdCBpbmZvcm1hdGlvbgorCSAqIGFib3V0IHRoZSBzZXNzaW9ucywgYnV0IHdlIGFuZCB0aGUgQVAgc3RpbGwgdGhpbmsgdGhleQorCSAqIGFyZSBhY3RpdmUuIFRoaXMgaXMgcmVhbGx5IGEgd29ya2Fyb3VuZCB0aG91Z2guCisJICovCiAJaWYgKGh3LT5mbGFncyAmIElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTikgewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzdGEsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKKwkJbXV0ZXhfbG9jaygmbG9jYWwtPnN0YV9tdHgpOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7CiAJCQlpZWVlODAyMTFfc3RhX3RlYXJfZG93bl9CQV9zZXNzaW9ucyhzdGEpOworCQkJY2xlYXJfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfQkxPQ0tfQkEpOwogCQl9CisKKwkJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+c3RhX210eCk7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogCiAJLyogYWRkIGJhY2sga2V5cyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93ZXAuYyBiL25ldC9tYWM4MDIxMS93ZXAuYwppbmRleCA1ZjNhNDExLi45ZWJjOGQ4IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd2VwLmMKKysrIGIvbmV0L21hYzgwMjExL3dlcC5jCkBAIC0zMiwxMyArMzIsMTYgQEAKIAogCWxvY2FsLT53ZXBfdHhfdGZtID0gY3J5cHRvX2FsbG9jX2Jsa2NpcGhlcigiZWNiKGFyYzQpIiwgMCwKIAkJCQkJCUNSWVBUT19BTEdfQVNZTkMpOwotCWlmIChJU19FUlIobG9jYWwtPndlcF90eF90Zm0pKQorCWlmIChJU19FUlIobG9jYWwtPndlcF90eF90Zm0pKSB7CisJCWxvY2FsLT53ZXBfcnhfdGZtID0gRVJSX1BUUigtRUlOVkFMKTsKIAkJcmV0dXJuIFBUUl9FUlIobG9jYWwtPndlcF90eF90Zm0pOworCX0KIAogCWxvY2FsLT53ZXBfcnhfdGZtID0gY3J5cHRvX2FsbG9jX2Jsa2NpcGhlcigiZWNiKGFyYzQpIiwgMCwKIAkJCQkJCUNSWVBUT19BTEdfQVNZTkMpOwogCWlmIChJU19FUlIobG9jYWwtPndlcF9yeF90Zm0pKSB7CiAJCWNyeXB0b19mcmVlX2Jsa2NpcGhlcihsb2NhbC0+d2VwX3R4X3RmbSk7CisJCWxvY2FsLT53ZXBfdHhfdGZtID0gRVJSX1BUUigtRUlOVkFMKTsKIAkJcmV0dXJuIFBUUl9FUlIobG9jYWwtPndlcF9yeF90Zm0pOwogCX0KIApAQCAtNDcsOCArNTAsMTAgQEAKIAogdm9pZCBpZWVlODAyMTFfd2VwX2ZyZWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7Ci0JY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKGxvY2FsLT53ZXBfdHhfdGZtKTsKLQljcnlwdG9fZnJlZV9ibGtjaXBoZXIobG9jYWwtPndlcF9yeF90Zm0pOworCWlmICghSVNfRVJSKGxvY2FsLT53ZXBfdHhfdGZtKSkKKwkJY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKGxvY2FsLT53ZXBfdHhfdGZtKTsKKwlpZiAoIUlTX0VSUihsb2NhbC0+d2VwX3J4X3RmbSkpCisJCWNyeXB0b19mcmVlX2Jsa2NpcGhlcihsb2NhbC0+d2VwX3J4X3RmbSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpZWVlODAyMTFfd2VwX3dlYWtfaXYodTMyIGl2LCBpbnQga2V5bGVuKQpAQCAtMTIyLDE5ICsxMjcsMjQgQEAKIC8qIFBlcmZvcm0gV0VQIGVuY3J5cHRpb24gdXNpbmcgZ2l2ZW4ga2V5LiBkYXRhIGJ1ZmZlciBtdXN0IGhhdmUgdGFpbHJvb20KICAqIGZvciA0LWJ5dGUgSUNWLiBkYXRhX2xlbiBtdXN0IG5vdCBpbmNsdWRlIHRoaXMgSUNWLiBOb3RlOiB0aGlzIGZ1bmN0aW9uCiAgKiBkb2VzIF9ub3RfIGFkZCBJVi4gZGF0YSA9IFJDNChkYXRhIHwgQ1JDMzIoZGF0YSkpICovCi12b2lkIGllZWU4MDIxMV93ZXBfZW5jcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0sIHU4ICpyYzRrZXksCi0JCQkJc2l6ZV90IGtsZW4sIHU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4pCitpbnQgaWVlZTgwMjExX3dlcF9lbmNyeXB0X2RhdGEoc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbSwgdTggKnJjNGtleSwKKwkJCSAgICAgICBzaXplX3Qga2xlbiwgdTggKmRhdGEsIHNpemVfdCBkYXRhX2xlbikKIHsKIAlzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgZGVzYyA9IHsgLnRmbSA9IHRmbSB9OwogCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKIAlfX2xlMzIgaWN2OwogCisJaWYgKElTX0VSUih0Zm0pKQorCQlyZXR1cm4gLTE7CisKIAlpY3YgPSBjcHVfdG9fbGUzMih+Y3JjMzJfbGUofjAsIGRhdGEsIGRhdGFfbGVuKSk7CiAJcHV0X3VuYWxpZ25lZChpY3YsIChfX2xlMzIgKikoZGF0YSArIGRhdGFfbGVuKSk7CiAKIAljcnlwdG9fYmxrY2lwaGVyX3NldGtleSh0Zm0sIHJjNGtleSwga2xlbik7CiAJc2dfaW5pdF9vbmUoJnNnLCBkYXRhLCBkYXRhX2xlbiArIFdFUF9JQ1ZfTEVOKTsKIAljcnlwdG9fYmxrY2lwaGVyX2VuY3J5cHQoJmRlc2MsICZzZywgJnNnLCBzZy5sZW5ndGgpOworCisJcmV0dXJuIDA7CiB9CiAKIApAQCAtMTY4LDEwICsxNzgsOCBAQAogCS8qIEFkZCByb29tIGZvciBJQ1YgKi8KIAlza2JfcHV0KHNrYiwgV0VQX0lDVl9MRU4pOwogCi0JaWVlZTgwMjExX3dlcF9lbmNyeXB0X2RhdGEobG9jYWwtPndlcF90eF90Zm0sIHJjNGtleSwga2V5bGVuICsgMywKLQkJCQkgICBpdiArIFdFUF9JVl9MRU4sIGxlbik7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gaWVlZTgwMjExX3dlcF9lbmNyeXB0X2RhdGEobG9jYWwtPndlcF90eF90Zm0sIHJjNGtleSwga2V5bGVuICsgMywKKwkJCQkJICBpdiArIFdFUF9JVl9MRU4sIGxlbik7CiB9CiAKIApAQCAtMTg1LDYgKzE5Myw5IEBACiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOwogCV9fbGUzMiBjcmM7CiAKKwlpZiAoSVNfRVJSKHRmbSkpCisJCXJldHVybiAtMTsKKwogCWNyeXB0b19ibGtjaXBoZXJfc2V0a2V5KHRmbSwgcmM0a2V5LCBrbGVuKTsKIAlzZ19pbml0X29uZSgmc2csIGRhdGEsIGRhdGFfbGVuICsgV0VQX0lDVl9MRU4pOwogCWNyeXB0b19ibGtjaXBoZXJfZGVjcnlwdCgmZGVzYywgJnNnLCAmc2csIHNnLmxlbmd0aCk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd2VwLmggYi9uZXQvbWFjODAyMTEvd2VwLmgKaW5kZXggZmUyOWQ3ZS4uNTg2NTRlZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dlcC5oCisrKyBiL25ldC9tYWM4MDIxMS93ZXAuaApAQCAtMTgsNyArMTgsNyBAQAogCiBpbnQgaWVlZTgwMjExX3dlcF9pbml0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIHZvaWQgaWVlZTgwMjExX3dlcF9mcmVlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKLXZvaWQgaWVlZTgwMjExX3dlcF9lbmNyeXB0X2RhdGEoc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbSwgdTggKnJjNGtleSwKK2ludCBpZWVlODAyMTFfd2VwX2VuY3J5cHRfZGF0YShzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtLCB1OCAqcmM0a2V5LAogCQkJCXNpemVfdCBrbGVuLCB1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuKTsKIGludCBpZWVlODAyMTFfd2VwX2VuY3J5cHQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkgIHN0cnVjdCBza19idWZmICpza2IsCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd29yay5jIGIvbmV0L21hYzgwMjExL3dvcmsuYwppbmRleCBiMDI1ZGM3Li44MWQ0YWQ2IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd29yay5jCisrKyBiL25ldC9tYWM4MDIxMS93b3JrLmMKQEAgLTU2MCw2ICs1NjAsMjIgQEAKIAlyZXR1cm4gV09SS19BQ1RfVElNRU9VVDsKIH0KIAorc3RhdGljIGVudW0gd29ya19hY3Rpb24gX19tdXN0X2NoZWNrCitpZWVlODAyMTFfYXNzb2NfYmVhY29uX3dhaXQoc3RydWN0IGllZWU4MDIxMV93b3JrICp3aykKK3sKKwlpZiAod2stPnN0YXJ0ZWQpCisJCXJldHVybiBXT1JLX0FDVF9USU1FT1VUOworCisJLyoKKwkgKiBXYWl0IHVwIHRvIG9uZSBiZWFjb24gaW50ZXJ2YWwgLi4uCisJICogc2hvdWxkIHRoaXMgYmUgbW9yZSBpZiB3ZSBtaXNzIG9uZT8KKwkgKi8KKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHdhaXRpbmcgZm9yIGJlYWNvbiBmcm9tICVwTVxuIiwKKwkgICAgICAgd2stPnNkYXRhLT5uYW1lLCB3ay0+ZmlsdGVyX3RhKTsKKwl3ay0+dGltZW91dCA9IFRVX1RPX0VYUF9USU1FKHdrLT5hc3NvYy5ic3MtPmJlYWNvbl9pbnRlcnZhbCk7CisJcmV0dXJuIFdPUktfQUNUX05PTkU7Cit9CisKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9hdXRoX2NoYWxsZW5nZShzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrLAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAogCQkJCSAgICAgc2l6ZV90IGxlbikKQEAgLTcwOSw2ICs3MjUsMjUgQEAKIAlyZXR1cm4gV09SS19BQ1RfRE9ORTsKIH0KIAorc3RhdGljIGVudW0gd29ya19hY3Rpb24gX19tdXN0X2NoZWNrCitpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oc3RydWN0IGllZWU4MDIxMV93b3JrICp3aywKKwkJCSBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSB3ay0+c2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisKKwlBU1NFUlRfV09SS19NVFgobG9jYWwpOworCisJaWYgKHdrLT50eXBlICE9IElFRUU4MDIxMV9XT1JLX0FTU09DX0JFQUNPTl9XQUlUKQorCQlyZXR1cm4gV09SS19BQ1RfTUlTTUFUQ0g7CisKKwlpZiAobGVuIDwgMjQgKyAxMikKKwkJcmV0dXJuIFdPUktfQUNUX05PTkU7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJlYWNvbiByZWNlaXZlZFxuIiwgc2RhdGEtPm5hbWUpOworCXJldHVybiBXT1JLX0FDVF9ET05FOworfQorCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfd29ya19yeF9xdWV1ZWRfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtNzMxLDYgKzc2Niw3IEBACiAJCWNhc2UgSUVFRTgwMjExX1dPUktfRElSRUNUX1BST0JFOgogCQljYXNlIElFRUU4MDIxMV9XT1JLX0FVVEg6CiAJCWNhc2UgSUVFRTgwMjExX1dPUktfQVNTT0M6CisJCWNhc2UgSUVFRTgwMjExX1dPUktfQVNTT0NfQkVBQ09OX1dBSVQ6CiAJCQlic3NpZCA9IHdrLT5maWx0ZXJfdGE7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTc0NSw2ICs3ODEsOSBAQAogCQkJY29udGludWU7CiAKIAkJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX0JFQUNPTjoKKwkJCXJtYSA9IGllZWU4MDIxMV9yeF9tZ210X2JlYWNvbih3aywgbWdtdCwgc2tiLT5sZW4pOworCQkJYnJlYWs7CiAJCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1A6CiAJCQlybWEgPSBpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXNwKHdrLCBtZ210LCBza2ItPmxlbiwKIAkJCQkJCQkgICByeF9zdGF0dXMpOwpAQCAtODQwLDcgKzg3OSw3IEBACiAKIAkvKgogCSAqIGllZWU4MDIxMV9xdWV1ZV93b3JrKCkgc2hvdWxkIGhhdmUgcGlja2VkIHVwIG1vc3QgY2FzZXMsCi0JICogaGVyZSB3ZSdsbCBwaWNrIHRoZSB0aGUgcmVzdC4KKwkgKiBoZXJlIHdlJ2xsIHBpY2sgdGhlIHJlc3QuCiAJICovCiAJaWYgKFdBUk4obG9jYWwtPnN1c3BlbmRlZCwgIndvcmsgc2NoZWR1bGVkIHdoaWxlIGdvaW5nIHRvIHN1c3BlbmRcbiIpKQogCQlyZXR1cm47CkBAIC05MTYsNiArOTU1LDkgQEAKIAkJY2FzZSBJRUVFODAyMTFfV09SS19SRU1BSU5fT05fQ0hBTk5FTDoKIAkJCXJtYSA9IGllZWU4MDIxMV9yZW1haW5fb25fY2hhbm5lbF90aW1lb3V0KHdrKTsKIAkJCWJyZWFrOworCQljYXNlIElFRUU4MDIxMV9XT1JLX0FTU09DX0JFQUNPTl9XQUlUOgorCQkJcm1hID0gaWVlZTgwMjExX2Fzc29jX2JlYWNvbl93YWl0KHdrKTsKKwkJCWJyZWFrOwogCQl9CiAKIAkJd2stPnN0YXJ0ZWQgPSBzdGFydGVkOwpAQCAtMTA2NSw2ICsxMTA3LDcgQEAKIAkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKIAkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVTUDoKIAkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQOgorCQljYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046CiAJCQlza2JfcXVldWVfdGFpbCgmbG9jYWwtPndvcmtfc2tiX3F1ZXVlLCBza2IpOwogCQkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJmxvY2FsLT53b3JrX3dvcmspOwogCQkJcmV0dXJuIFJYX1FVRVVFRDsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93cGEuYyBiL25ldC9tYWM4MDIxMS93cGEuYwppbmRleCAwYWRiY2M5Li44ZDU5ZDI3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd3BhLmMKKysrIGIvbmV0L21hYzgwMjExL3dwYS5jCkBAIC0xODMsOSArMTgzLDggQEAKIAlza2JfcHV0KHNrYiwgVEtJUF9JQ1ZfTEVOKTsKIAogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7Ci0JaWVlZTgwMjExX3RraXBfZW5jcnlwdF9kYXRhKHR4LT5sb2NhbC0+d2VwX3R4X3RmbSwKLQkJCQkgICAga2V5LCBwb3MsIGxlbiwgaGRyLT5hZGRyMik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGllZWU4MDIxMV90a2lwX2VuY3J5cHRfZGF0YSh0eC0+bG9jYWwtPndlcF90eF90Zm0sCisJCQkJCSAgIGtleSwgcG9zLCBsZW4sIGhkci0+YWRkcjIpOwogfQogCiAKQEAgLTQzNiw2ICs0MzUsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKIAl1OCBwbltDQ01QX1BOX0xFTl07CiAJaW50IGRhdGFfbGVuOworCWludCBxdWV1ZTsKIAogCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIApAQCAtNDUzLDcgKzQ1MywxMCBAQAogCiAJY2NtcF9oZHIycG4ocG4sIHNrYi0+ZGF0YSArIGhkcmxlbik7CiAKLQlpZiAobWVtY21wKHBuLCBrZXktPnUuY2NtcC5yeF9wbltyeC0+cXVldWVdLCBDQ01QX1BOX0xFTikgPD0gMCkgeworCXF1ZXVlID0gaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKSA/CisJCU5VTV9SWF9EQVRBX1FVRVVFUyA6IHJ4LT5xdWV1ZTsKKworCWlmIChtZW1jbXAocG4sIGtleS0+dS5jY21wLnJ4X3BuW3F1ZXVlXSwgQ0NNUF9QTl9MRU4pIDw9IDApIHsKIAkJa2V5LT51LmNjbXAucmVwbGF5cysrOwogCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKIAl9CkBAIC00NzAsNyArNDczLDcgQEAKIAkJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwogCX0KIAotCW1lbWNweShrZXktPnUuY2NtcC5yeF9wbltyeC0+cXVldWVdLCBwbiwgQ0NNUF9QTl9MRU4pOworCW1lbWNweShrZXktPnUuY2NtcC5yeF9wbltxdWV1ZV0sIHBuLCBDQ01QX1BOX0xFTik7CiAKIAkvKiBSZW1vdmUgQ0NNUCBoZWFkZXIgYW5kIE1JQyAqLwogCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSBDQ01QX01JQ19MRU4pOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L25ldGZpbHRlci9LY29uZmlnCmluZGV4IDg1OTNhNzcuLjQzMjg4MjU5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL0tjb25maWcKKysrIGIvbmV0L25ldGZpbHRlci9LY29uZmlnCkBAIC00MCwyNyArNDAsNiBAQAogCiBpZiBORl9DT05OVFJBQ0sKIAotY29uZmlnIE5GX0NUX0FDQ1QKLQlib29sICJDb25uZWN0aW9uIHRyYWNraW5nIGZsb3cgYWNjb3VudGluZyIKLQlkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRAotCWhlbHAKLQkgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGNvZGUgd2lsbAotCSAga2VlcCBwZXItZmxvdyBwYWNrZXQgYW5kIGJ5dGUgY291bnRlcnMuCi0KLQkgIFRob3NlIGNvdW50ZXJzIGNhbiBiZSB1c2VkIGZvciBmbG93LWJhc2VkIGFjY291bnRpbmcgb3IgdGhlCi0JICBgY29ubmJ5dGVzJyBtYXRjaC4KLQotCSAgUGxlYXNlIG5vdGUgdGhhdCBjdXJyZW50bHkgdGhpcyBvcHRpb24gb25seSBzZXRzIGEgZGVmYXVsdCBzdGF0ZS4KLQkgIFlvdSBtYXkgY2hhbmdlIGl0IGF0IGJvb3QgdGltZSB3aXRoIG5mX2Nvbm50cmFjay5hY2N0PTAvMSBrZXJuZWwKLQkgIHBhcmFtZXRlciBvciBieSBsb2FkaW5nIHRoZSBuZl9jb25udHJhY2sgbW9kdWxlIHdpdGggYWNjdD0wLzEuCi0KLQkgIFlvdSBtYXkgYWxzbyBkaXNhYmxlL2VuYWJsZSBpdCBvbiBhIHJ1bm5pbmcgc3lzdGVtIHdpdGg6Ci0JICAgc3lzY3RsIG5ldC5uZXRmaWx0ZXIubmZfY29ubnRyYWNrX2FjY3Q9MC8xCi0KLQkgIFRoaXMgb3B0aW9uIHdpbGwgYmUgcmVtb3ZlZCBpbiAyLjYuMjkuCi0KLQkgIElmIHVuc3VyZSwgc2F5IGBOJy4KLQogY29uZmlnIE5GX0NPTk5UUkFDS19NQVJLCiAJYm9vbCAgJ0Nvbm5lY3Rpb24gbWFyayB0cmFja2luZyBzdXBwb3J0JwogCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECkBAIC0zNDcsNiArMzI2LDIyIEBACiAKIGNvbW1lbnQgIlh0YWJsZXMgdGFyZ2V0cyIKIAorY29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfQ0hFQ0tTVU0KKwl0cmlzdGF0ZSAiQ0hFQ0tTVU0gdGFyZ2V0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBJUF9ORl9NQU5HTEUgfHwgSVA2X05GX01BTkdMRQorCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gYWRkcyBhIGBDSEVDS1NVTScgdGFyZ2V0LCB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgaXB0YWJsZXMgbWFuZ2xlCisJICB0YWJsZS4KKworCSAgWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gY29tcHV0ZSBhbmQgZmlsbCBpbiB0aGUgY2hlY2tzdW0gaW4KKwkgIGEgcGFja2V0IHRoYXQgbGFja3MgYSBjaGVja3N1bS4gIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCwKKwkgIGlmIHlvdSBuZWVkIHRvIHdvcmsgYXJvdW5kIG9sZCBhcHBsaWNhdGlvbnMgc3VjaCBhcyBkaGNwIGNsaWVudHMsCisJICB0aGF0IGRvIG5vdCB3b3JrIHdlbGwgd2l0aCBjaGVja3N1bSBvZmZsb2FkcywgYnV0IGRvbid0IHdhbnQgdG8gZGlzYWJsZQorCSAgY2hlY2tzdW0gb2ZmbG9hZCBpbiB5b3VyIGRldmljZS4KKworCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZCiAJdHJpc3RhdGUgJyJDTEFTU0lGWSIgdGFyZ2V0IHN1cHBvcnQnCiAJZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRUQKQEAgLTQyNCw2ICs0MTksMTggQEAKIAlzaW5jZSB5b3UgY2FuIGVhc2lseSBjcmVhdGUgaW1tb3J0YWwgcGFja2V0cyB0aGF0IGxvb3AKIAlmb3JldmVyIG9uIHRoZSBuZXR3b3JrLgogCitjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVIKKwl0cmlzdGF0ZSAgIklETEVUSU1FUiB0YXJnZXQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRAorCWhlbHAKKworCSAgVGhpcyBvcHRpb24gYWRkcyB0aGUgYElETEVUSU1FUicgdGFyZ2V0LiAgRWFjaCBtYXRjaGluZyBwYWNrZXQKKwkgIHJlc2V0cyB0aGUgdGltZXIgYXNzb2NpYXRlZCB3aXRoIGxhYmVsIHNwZWNpZmllZCB3aGVuIHRoZSBydWxlIGlzCisJICBhZGRlZC4gIFdoZW4gdGhlIHRpbWVyIGV4cGlyZXMsIGl0IHRyaWdnZXJzIGEgc3lzZnMgbm90aWZpY2F0aW9uLgorCSAgVGhlIHJlbWFpbmluZyB0aW1lIGZvciBleHBpcmF0aW9uIGNhbiBiZSByZWFkIHZpYSBzeXNmcy4KKworCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0xFRAogCXRyaXN0YXRlICciTEVEIiB0YXJnZXQgc3VwcG9ydCcKIAlkZXBlbmRzIG9uIExFRFNfQ0xBU1MgJiYgTEVEU19UUklHR0VSUwpAQCAtNTAzLDcgKzUxMCw3IEBACiAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfVEVFCi0JdHJpc3RhdGUgJyJURUUiIC0gcGFja2V0IGNsb25pbmcgdG8gYWx0ZXJuYXRlIGRlc3RpYW50aW9uJworCXRyaXN0YXRlICciVEVFIiAtIHBhY2tldCBjbG9uaW5nIHRvIGFsdGVybmF0ZSBkZXN0aW5hdGlvbicKIAlkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRAogCWRlcGVuZHMgb24gKElQVjYgfHwgSVBWNj1uKQogCWRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0sKQEAgLTYxOCw3ICs2MjUsNiBAQAogCXRyaXN0YXRlICAnImNvbm5ieXRlcyIgcGVyLWNvbm5lY3Rpb24gY291bnRlciBtYXRjaCBzdXBwb3J0JwogCWRlcGVuZHMgb24gTkZfQ09OTlRSQUNLCiAJZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRUQKLQlzZWxlY3QgTkZfQ1RfQUNDVAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGFkZHMgYSBgY29ubmJ5dGVzJyBtYXRjaCwgd2hpY2ggYWxsb3dzIHlvdSB0byBtYXRjaCB0aGUKIAkgIG51bWJlciBvZiBieXRlcyBhbmQvb3IgcGFja2V0cyBmb3IgZWFjaCBkaXJlY3Rpb24gd2l0aGluIGEgY29ubmVjdGlvbi4KQEAgLTY1Nyw2ICs2NjMsMTUgQEAKIAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfQ1BVCisJdHJpc3RhdGUgJyJjcHUiIG1hdGNoIHN1cHBvcnQnCisJZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRUQKKwloZWxwCisJICBDUFUgbWF0Y2hpbmcgYWxsb3dzIHlvdSB0byBtYXRjaCBwYWNrZXRzIGJhc2VkIG9uIHRoZSBDUFUKKwkgIGN1cnJlbnRseSBoYW5kbGluZyB0aGUgcGFja2V0LgorCisJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQCiAJdHJpc3RhdGUgJyJkY2NwIiBwcm90b2NvbCBtYXRjaCBzdXBwb3J0JwogCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECkBAIC03MzYsNiArNzUxLDE2IEBACiAKIAlJZiB1bnN1cmUsIHNheSBNLgogCitjb25maWcgTkVURklMVEVSX1hUX01BVENIX0lQVlMKKwl0cmlzdGF0ZSAnImlwdnMiIG1hdGNoIHN1cHBvcnQnCisJZGVwZW5kcyBvbiBJUF9WUworCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECisJZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIG1hdGNoIGFnYWluc3QgSVBWUyBwcm9wZXJ0aWVzIG9mIGEgcGFja2V0LgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgTkVURklMVEVSX1hUX01BVENIX0xFTkdUSAogCXRyaXN0YXRlICcibGVuZ3RoIiBtYXRjaCBzdXBwb3J0JwogCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlIGIvbmV0L25ldGZpbHRlci9NYWtlZmlsZQppbmRleCAxNGUzYThmLi40NDEwNTBmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlCisrKyBiL25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUKQEAgLTQ1LDYgKzQ1LDcgQEAKIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfQ09OTk1BUkspICs9IHh0X2Nvbm5tYXJrLm8KIAogIyB0YXJnZXRzCitvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DSEVDS1NVTSkgKz0geHRfQ0hFQ0tTVU0ubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlkpICs9IHh0X0NMQVNTSUZZLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLKSArPSB4dF9DT05OU0VDTUFSSy5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DVCkgKz0geHRfQ1QubwpAQCAtNjEsNiArNjIsNyBAQAogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVApICs9IHh0X1RDUE9QVFNUUklQLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RFRSkgKz0geHRfVEVFLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFKSArPSB4dF9UUkFDRS5vCitvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVIpICs9IHh0X0lETEVUSU1FUi5vCiAKICMgbWF0Y2hlcwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DTFVTVEVSKSArPSB4dF9jbHVzdGVyLm8KQEAgLTY4LDYgKzcwLDcgQEAKIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTKSArPSB4dF9jb25uYnl0ZXMubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVQpICs9IHh0X2Nvbm5saW1pdC5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSykgKz0geHRfY29ubnRyYWNrLm8KK29iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ1BVKSArPSB4dF9jcHUubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQKSArPSB4dF9kY2NwLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUCkgKz0geHRfZHNjcC5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUCkgKz0geHRfZXNwLm8KQEAgLTc1LDYgKzc4LDcgQEAKIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSKSArPSB4dF9oZWxwZXIubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITCkgKz0geHRfaGwubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFKSArPSB4dF9pcHJhbmdlLm8KK29iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBWUykgKz0geHRfaXB2cy5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSCkgKz0geHRfbGVuZ3RoLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQpICs9IHh0X2xpbWl0Lm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDKSArPSB4dF9tYWMubwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZwppbmRleCA3MTJjY2FkLi40NmE3N2Q1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZwpAQCAtMyw3ICszLDcgQEAKICMKIG1lbnVjb25maWcgSVBfVlMKIAl0cmlzdGF0ZSAiSVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE5FVCAmJiBJTkVUICYmIE5FVEZJTFRFUgorCWRlcGVuZHMgb24gTkVUICYmIElORVQgJiYgTkVURklMVEVSICYmIE5GX0NPTk5UUkFDSwogCS0tLWhlbHAtLS0KIAkgIElQIFZpcnR1YWwgU2VydmVyIHN1cHBvcnQgd2lsbCBsZXQgeW91IGJ1aWxkIGEgaGlnaC1wZXJmb3JtYW5jZQogCSAgdmlydHVhbCBzZXJ2ZXIgYmFzZWQgb24gY2x1c3RlciBvZiB0d28gb3IgbW9yZSByZWFsIHNlcnZlcnMuIFRoaXMKQEAgLTI2LDcgKzI2LDcgQEAKIAogY29uZmlnCUlQX1ZTX0lQVjYKIAlib29sICJJUHY2IHN1cHBvcnQgZm9yIElQVlMiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgKElQVjYgPSB5IHx8IElQX1ZTID0gSVBWNikKKwlkZXBlbmRzIG9uIElQVjYgPSB5IHx8IElQX1ZTID0gSVBWNgogCS0tLWhlbHAtLS0KIAkgIEFkZCBJUHY2IHN1cHBvcnQgdG8gSVBWUy4gVGhpcyBpcyBpbmNvbXBsZXRlIGFuZCBtaWdodCBiZSBkYW5nZXJvdXMuCiAKQEAgLTg3LDE5ICs4NywxNiBAQAogCSAgcHJvdG9jb2wuIFNheSBZIGlmIHVuc3VyZS4KIAogY29uZmlnCUlQX1ZTX1BST1RPX0FIX0VTUAotCWJvb2wKLQlkZXBlbmRzIG9uIFVOREVGSU5FRAorCWRlZl9ib29sIElQX1ZTX1BST1RPX0VTUCB8fCBJUF9WU19QUk9UT19BSAogCiBjb25maWcJSVBfVlNfUFJPVE9fRVNQCiAJYm9vbCAiRVNQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnQiCi0Jc2VsZWN0IElQX1ZTX1BST1RPX0FIX0VTUAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgbG9hZCBiYWxhbmNpbmcgRVNQIChFbmNhcHN1bGF0aW9uCiAJICBTZWN1cml0eSBQYXlsb2FkKSB0cmFuc3BvcnQgcHJvdG9jb2wuIFNheSBZIGlmIHVuc3VyZS4KIAogY29uZmlnCUlQX1ZTX1BST1RPX0FICiAJYm9vbCAiQUggbG9hZCBiYWxhbmNpbmcgc3VwcG9ydCIKLQlzZWxlY3QgSVBfVlNfUFJPVE9fQUhfRVNQCiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBsb2FkIGJhbGFuY2luZyBBSCAoQXV0aGVudGljYXRpb24KIAkgIEhlYWRlcikgdHJhbnNwb3J0IHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuCkBAIC0yMzgsNyArMjM1LDcgQEAKIAogY29uZmlnCUlQX1ZTX0ZUUAogICAJdHJpc3RhdGUgIkZUUCBwcm90b2NvbCBoZWxwZXIiCi0gICAgICAgIGRlcGVuZHMgb24gSVBfVlNfUFJPVE9fVENQCisgICAgICAgIGRlcGVuZHMgb24gSVBfVlNfUFJPVE9fVENQICYmIE5GX05BVAogCS0tLWhlbHAtLS0KIAkgIEZUUCBpcyBhIHByb3RvY29sIHRoYXQgdHJhbnNmZXJzIElQIGFkZHJlc3MgYW5kL29yIHBvcnQgbnVtYmVyIGluCiAJICB0aGUgcGF5bG9hZC4gSW4gdGhlIHZpcnR1YWwgc2VydmVyIHZpYSBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24sCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMKaW5kZXggMWNiMGU4My4uZTc2Zjg3ZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYwpAQCAtNTY5LDQ5ICs1NjksNiBAQAogfTsKICNlbmRpZgogCi0KLS8qCi0gKglSZXBsYWNlIGEgc2VnbWVudCBvZiBkYXRhIHdpdGggYSBuZXcgc2VnbWVudAotICovCi1pbnQgaXBfdnNfc2tiX3JlcGxhY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgcHJpLAotCQkgICAgICBjaGFyICpvX2J1ZiwgaW50IG9fbGVuLCBjaGFyICpuX2J1ZiwgaW50IG5fbGVuKQotewotCWludCBkaWZmOwotCWludCBvX29mZnNldDsKLQlpbnQgb19sZWZ0OwotCi0JRW50ZXJGdW5jdGlvbig5KTsKLQotCWRpZmYgPSBuX2xlbiAtIG9fbGVuOwotCW9fb2Zmc2V0ID0gb19idWYgLSAoY2hhciAqKXNrYi0+ZGF0YTsKLQkvKiBUaGUgbGVuZ3RoIG9mIGxlZnQgZGF0YSBhZnRlciBvX2J1ZitvX2xlbiBpbiB0aGUgc2tiIGRhdGEgKi8KLQlvX2xlZnQgPSBza2ItPmxlbiAtIChvX29mZnNldCArIG9fbGVuKTsKLQotCWlmIChkaWZmIDw9IDApIHsKLQkJbWVtbW92ZShvX2J1ZiArIG5fbGVuLCBvX2J1ZiArIG9fbGVuLCBvX2xlZnQpOwotCQltZW1jcHkob19idWYsIG5fYnVmLCBuX2xlbik7Ci0JCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gKyBkaWZmKTsKLQl9IGVsc2UgaWYgKGRpZmYgPD0gc2tiX3RhaWxyb29tKHNrYikpIHsKLQkJc2tiX3B1dChza2IsIGRpZmYpOwotCQltZW1tb3ZlKG9fYnVmICsgbl9sZW4sIG9fYnVmICsgb19sZW4sIG9fbGVmdCk7Ci0JCW1lbWNweShvX2J1Ziwgbl9idWYsIG5fbGVuKTsKLQl9IGVsc2UgewotCQlpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIHNrYl9oZWFkcm9vbShza2IpLCBkaWZmLCBwcmkpKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCXNrYl9wdXQoc2tiLCBkaWZmKTsKLQkJbWVtbW92ZShza2ItPmRhdGEgKyBvX29mZnNldCArIG5fbGVuLAotCQkJc2tiLT5kYXRhICsgb19vZmZzZXQgKyBvX2xlbiwgb19sZWZ0KTsKLQkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGFfb2Zmc2V0KHNrYiwgb19vZmZzZXQsIG5fYnVmLCBuX2xlbik7Ci0JfQotCi0JLyogbXVzdCB1cGRhdGUgdGhlIGlwaCB0b3RhbCBsZW5ndGggaGVyZSAqLwotCWlwX2hkcihza2IpLT50b3RfbGVuID0gaHRvbnMoc2tiLT5sZW4pOwotCi0JTGVhdmVGdW5jdGlvbig5KTsKLQlyZXR1cm4gMDsKLX0KLQotCiBpbnQgX19pbml0IGlwX3ZzX2FwcF9pbml0KHZvaWQpCiB7CiAJLyogd2Ugd2lsbCByZXBsYWNlIGl0IHdpdGggcHJvY19uZXRfaXB2c19jcmVhdGUoKSBzb29uICovCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYwppbmRleCBmZjA0ZTllLi5iNzFjNjlhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMKQEAgLTE1OCw2ICsxNTgsOSBAQAogCXVuc2lnbmVkIGhhc2g7CiAJaW50IHJldDsKIAorCWlmIChjcC0+ZmxhZ3MgJiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkKKwkJcmV0dXJuIDA7CisKIAkvKiBIYXNoIGJ5IHByb3RvY29sLCBjbGllbnQgYWRkcmVzcyBhbmQgcG9ydCAqLwogCWhhc2ggPSBpcF92c19jb25uX2hhc2hrZXkoY3AtPmFmLCBjcC0+cHJvdG9jb2wsICZjcC0+Y2FkZHIsIGNwLT5jcG9ydCk7CiAKQEAgLTI2OCw2ICsyNzEsMjkgQEAKIAlyZXR1cm4gY3A7CiB9CiAKK3N0cnVjdCBpcF92c19jb25uICoKK2lwX3ZzX2Nvbm5faW5fZ2V0X3Byb3RvKGludCBhZiwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCXN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCisJCQljb25zdCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCwKKwkJCXVuc2lnbmVkIGludCBwcm90b19vZmYsIGludCBpbnZlcnNlKQoreworCV9fYmUxNiBfcG9ydHNbMl0sICpwcHRyOworCisJcHB0ciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHByb3RvX29mZiwgc2l6ZW9mKF9wb3J0cyksIF9wb3J0cyk7CisJaWYgKHBwdHIgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAobGlrZWx5KCFpbnZlcnNlKSkKKwkJcmV0dXJuIGlwX3ZzX2Nvbm5faW5fZ2V0KGFmLCBpcGgtPnByb3RvY29sLAorCQkJCQkgJmlwaC0+c2FkZHIsIHBwdHJbMF0sCisJCQkJCSAmaXBoLT5kYWRkciwgcHB0clsxXSk7CisJZWxzZQorCQlyZXR1cm4gaXBfdnNfY29ubl9pbl9nZXQoYWYsIGlwaC0+cHJvdG9jb2wsCisJCQkJCSAmaXBoLT5kYWRkciwgcHB0clsxXSwKKwkJCQkJICZpcGgtPnNhZGRyLCBwcHRyWzBdKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlwX3ZzX2Nvbm5faW5fZ2V0X3Byb3RvKTsKKwogLyogR2V0IHJlZmVyZW5jZSB0byBjb25uZWN0aW9uIHRlbXBsYXRlICovCiBzdHJ1Y3QgaXBfdnNfY29ubiAqaXBfdnNfY3RfaW5fZ2V0CiAoaW50IGFmLCBpbnQgcHJvdG9jb2wsIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqc19hZGRyLCBfX2JlMTYgc19wb3J0LApAQCAtMzUzLDE0ICszNzksMzcgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdHJ1Y3QgaXBfdnNfY29ubiAqCitpcF92c19jb25uX291dF9nZXRfcHJvdG8oaW50IGFmLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCisJCQkgY29uc3Qgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgsCisJCQkgdW5zaWduZWQgaW50IHByb3RvX29mZiwgaW50IGludmVyc2UpCit7CisJX19iZTE2IF9wb3J0c1syXSwgKnBwdHI7CisKKwlwcHRyID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHJvdG9fb2ZmLCBzaXplb2YoX3BvcnRzKSwgX3BvcnRzKTsKKwlpZiAocHB0ciA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChsaWtlbHkoIWludmVyc2UpKQorCQlyZXR1cm4gaXBfdnNfY29ubl9vdXRfZ2V0KGFmLCBpcGgtPnByb3RvY29sLAorCQkJCQkgICZpcGgtPnNhZGRyLCBwcHRyWzBdLAorCQkJCQkgICZpcGgtPmRhZGRyLCBwcHRyWzFdKTsKKwllbHNlCisJCXJldHVybiBpcF92c19jb25uX291dF9nZXQoYWYsIGlwaC0+cHJvdG9jb2wsCisJCQkJCSAgJmlwaC0+ZGFkZHIsIHBwdHJbMV0sCisJCQkJCSAgJmlwaC0+c2FkZHIsIHBwdHJbMF0pOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXBfdnNfY29ubl9vdXRfZ2V0X3Byb3RvKTsKIAogLyoKICAqICAgICAgUHV0IGJhY2sgdGhlIGNvbm4gYW5kIHJlc3RhcnQgaXRzIHRpbWVyIHdpdGggaXRzIHRpbWVvdXQKICAqLwogdm9pZCBpcF92c19jb25uX3B1dChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApCiB7Ci0JLyogcmVzZXQgaXQgZXhwaXJlIGluIGl0cyB0aW1lb3V0ICovCi0JbW9kX3RpbWVyKCZjcC0+dGltZXIsIGppZmZpZXMrY3AtPnRpbWVvdXQpOworCXVuc2lnbmVkIGxvbmcgdCA9IChjcC0+ZmxhZ3MgJiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkgPworCQkwIDogY3AtPnRpbWVvdXQ7CisJbW9kX3RpbWVyKCZjcC0+dGltZXIsIGppZmZpZXMrdCk7CiAKIAlfX2lwX3ZzX2Nvbm5fcHV0KGNwKTsKIH0KQEAgLTY1Myw3ICs3MDIsNyBAQAogCS8qCiAJICoJdW5oYXNoIGl0IGlmIGl0IGlzIGhhc2hlZCBpbiB0aGUgY29ubiB0YWJsZQogCSAqLwotCWlmICghaXBfdnNfY29ubl91bmhhc2goY3ApKQorCWlmICghaXBfdnNfY29ubl91bmhhc2goY3ApICYmICEoY3AtPmZsYWdzICYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpKQogCQlnb3RvIGV4cGlyZV9sYXRlcjsKIAogCS8qCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYwppbmRleCAxY2Q2ZTNmLi40ZjhkZGJhNCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCkBAIC01NCw3ICs1NCw2IEBACiAKIEVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfaXBfdnNfc2NoZWR1bGVyKTsKIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9pcF92c19zY2hlZHVsZXIpOwotRVhQT1JUX1NZTUJPTChpcF92c19za2JfcmVwbGFjZSk7CiBFWFBPUlRfU1lNQk9MKGlwX3ZzX3Byb3RvX25hbWUpOwogRVhQT1JUX1NZTUJPTChpcF92c19jb25uX25ldyk7CiBFWFBPUlRfU1lNQk9MKGlwX3ZzX2Nvbm5faW5fZ2V0KTsKQEAgLTE5NCw2ICsxOTMsNyBAQAogCXN0cnVjdCBpcF92c19kZXN0ICpkZXN0OwogCXN0cnVjdCBpcF92c19jb25uICpjdDsKIAlfX2JlMTYgIGRwb3J0OwkJCS8qIGRlc3RpbmF0aW9uIHBvcnQgdG8gZm9yd2FyZCAqLworCV9fYmUxNiAgZmxhZ3M7CiAJdW5pb24gbmZfaW5ldF9hZGRyIHNuZXQ7CS8qIHNvdXJjZSBuZXR3b3JrIG9mIHRoZSBjbGllbnQsCiAJCQkJCSAgIGFmdGVyIG1hc2tpbmcgKi8KIApAQCAtMzQwLDYgKzM0MCwxMCBAQAogCQlkcG9ydCA9IHBvcnRzWzFdOwogCX0KIAorCWZsYWdzID0gKHN2Yy0+ZmxhZ3MgJiBJUF9WU19TVkNfRl9PTkVQQUNLRVQKKwkJICYmIGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCk/CisJCUlQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUIDogMDsKKwogCS8qCiAJICogICAgQ3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24gYWNjb3JkaW5nIHRvIHRoZSB0ZW1wbGF0ZQogCSAqLwpAQCAtMzQ3LDcgKzM1MSw3IEBACiAJCQkgICAgJmlwaC5zYWRkciwgcG9ydHNbMF0sCiAJCQkgICAgJmlwaC5kYWRkciwgcG9ydHNbMV0sCiAJCQkgICAgJmRlc3QtPmFkZHIsIGRwb3J0LAotCQkJICAgIDAsCisJCQkgICAgZmxhZ3MsCiAJCQkgICAgZGVzdCk7CiAJaWYgKGNwID09IE5VTEwpIHsKIAkJaXBfdnNfY29ubl9wdXQoY3QpOwpAQCAtMzc3LDcgKzM4MSw3IEBACiAJc3RydWN0IGlwX3ZzX2Nvbm4gKmNwID0gTlVMTDsKIAlzdHJ1Y3QgaXBfdnNfaXBoZHIgaXBoOwogCXN0cnVjdCBpcF92c19kZXN0ICpkZXN0OwotCV9fYmUxNiBfcG9ydHNbMl0sICpwcHRyOworCV9fYmUxNiBfcG9ydHNbMl0sICpwcHRyLCBmbGFnczsKIAogCWlwX3ZzX2ZpbGxfaXBoZHIoc3ZjLT5hZiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksICZpcGgpOwogCXBwdHIgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBpcGgubGVuLCBzaXplb2YoX3BvcnRzKSwgX3BvcnRzKTsKQEAgLTQwNyw2ICs0MTEsMTAgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCisJZmxhZ3MgPSAoc3ZjLT5mbGFncyAmIElQX1ZTX1NWQ19GX09ORVBBQ0tFVAorCQkgJiYgaXBoLnByb3RvY29sID09IElQUFJPVE9fVURQKT8KKwkJSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQgOiAwOworCiAJLyoKIAkgKiAgICBDcmVhdGUgYSBjb25uZWN0aW9uIGVudHJ5LgogCSAqLwpAQCAtNDE0LDcgKzQyMiw3IEBACiAJCQkgICAgJmlwaC5zYWRkciwgcHB0clswXSwKIAkJCSAgICAmaXBoLmRhZGRyLCBwcHRyWzFdLAogCQkJICAgICZkZXN0LT5hZGRyLCBkZXN0LT5wb3J0ID8gZGVzdC0+cG9ydCA6IHBwdHJbMV0sCi0JCQkgICAgMCwKKwkJCSAgICBmbGFncywKIAkJCSAgICBkZXN0KTsKIAlpZiAoY3AgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CkBAIC00NjQsNiArNDcyLDkgQEAKIAlpZiAoc3lzY3RsX2lwX3ZzX2NhY2hlX2J5cGFzcyAmJiBzdmMtPmZ3bWFyayAmJiB1bmljYXN0KSB7CiAJCWludCByZXQsIGNzOwogCQlzdHJ1Y3QgaXBfdnNfY29ubiAqY3A7CisJCV9fdTE2IGZsYWdzID0gKHN2Yy0+ZmxhZ3MgJiBJUF9WU19TVkNfRl9PTkVQQUNLRVQgJiYKKwkJCQlpcGgucHJvdG9jb2wgPT0gSVBQUk9UT19VRFApPworCQkJCUlQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUIDogMDsKIAkJdW5pb24gbmZfaW5ldF9hZGRyIGRhZGRyID0gIHsgLmFsbCA9IHsgMCwgMCwgMCwgMCB9IH07CiAKIAkJaXBfdnNfc2VydmljZV9wdXQoc3ZjKTsKQEAgLTQ3NCw3ICs0ODUsNyBAQAogCQkJCSAgICAmaXBoLnNhZGRyLCBwcHRyWzBdLAogCQkJCSAgICAmaXBoLmRhZGRyLCBwcHRyWzFdLAogCQkJCSAgICAmZGFkZHIsIDAsCi0JCQkJICAgIElQX1ZTX0NPTk5fRl9CWVBBU1MsCisJCQkJICAgIElQX1ZTX0NPTk5fRl9CWVBBU1MgfCBmbGFncywKIAkJCQkgICAgTlVMTCk7CiAJCWlmIChjcCA9PSBOVUxMKQogCQkJcmV0dXJuIE5GX0RST1A7CkBAIC01MjQsMjYgKzUzNSw2IEBACiAJcmV0dXJuIE5GX0RST1A7CiB9CiAKLQotLyoKLSAqICAgICAgSXQgaXMgaG9va2VkIGJlZm9yZSBORl9JUF9QUklfTkFUX1NSQyBhdCB0aGUgTkZfSU5FVF9QT1NUX1JPVVRJTkcKLSAqICAgICAgY2hhaW4sIGFuZCBpcyB1c2VkIGZvciBWUy9OQVQuCi0gKiAgICAgIEl0IGRldGVjdHMgcGFja2V0cyBmb3IgVlMvTkFUIGNvbm5lY3Rpb25zIGFuZCBzZW5kcyB0aGUgcGFja2V0cwotICogICAgICBpbW1lZGlhdGVseS4gVGhpcyBjYW4gYXZvaWQgdGhhdCBpcHRhYmxlX25hdCBtYW5nbGVzIHRoZSBwYWNrZXRzCi0gKiAgICAgIGZvciBWUy9OQVQuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgaXBfdnNfcG9zdF9yb3V0aW5nKHVuc2lnbmVkIGludCBob29rbnVtLAotCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCi0JCQkJICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0JCQkJICAgICAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQotewotCWlmICghc2tiLT5pcHZzX3Byb3BlcnR5KQotCQlyZXR1cm4gTkZfQUNDRVBUOwotCS8qIFRoZSBwYWNrZXQgd2FzIHNlbnQgZnJvbSBJUFZTLCBleGl0IHRoaXMgY2hhaW4gKi8KLQlyZXR1cm4gTkZfU1RPUDsKLX0KLQogX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KQogewogCXJldHVybiBjc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItPmxlbiAtIG9mZnNldCwgMCkpOwpAQCAtMTQ4NywxNCArMTQ3OCw2IEBACiAJCS5ob29rbnVtICAgICAgICA9IE5GX0lORVRfRk9SV0FSRCwKIAkJLnByaW9yaXR5ICAgICAgID0gOTksCiAJfSwKLQkvKiBCZWZvcmUgdGhlIG5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nLCBleGl0IGZyb20gUE9TVF9ST1VUSU5HICovCi0JewotCQkuaG9vawkJPSBpcF92c19wb3N0X3JvdXRpbmcsCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQsCi0JCS5ob29rbnVtICAgICAgICA9IE5GX0lORVRfUE9TVF9ST1VUSU5HLAotCQkucHJpb3JpdHkgICAgICAgPSBORl9JUF9QUklfTkFUX1NSQy0xLAotCX0sCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKIAkvKiBBZnRlciBwYWNrZXQgZmlsdGVyaW5nLCBmb3J3YXJkIHBhY2tldCB0aHJvdWdoIFZTL0RSLCBWUy9UVU4sCiAJICogb3IgVlMvTkFUKGNoYW5nZSBkZXN0aW5hdGlvbiksIHNvIHRoYXQgZmlsdGVyaW5nIHJ1bGVzIGNhbiBiZQpAQCAtMTUyMywxNCArMTUwNiw2IEBACiAJCS5ob29rbnVtICAgICAgICA9IE5GX0lORVRfRk9SV0FSRCwKIAkJLnByaW9yaXR5ICAgICAgID0gOTksCiAJfSwKLQkvKiBCZWZvcmUgdGhlIG5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nLCBleGl0IGZyb20gUE9TVF9ST1VUSU5HICovCi0JewotCQkuaG9vawkJPSBpcF92c19wb3N0X3JvdXRpbmcsCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQ2LAotCQkuaG9va251bSAgICAgICAgPSBORl9JTkVUX1BPU1RfUk9VVElORywKLQkJLnByaW9yaXR5ICAgICAgID0gTkZfSVA2X1BSSV9OQVRfU1JDLTEsCi0JfSwKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jCmluZGV4IDM2ZGMxZDguLjBmMGMwNzkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMKQEAgLTE4NjQsMTQgKzE4NjQsMTYgQEAKIAkJCQkJICAgc3ZjLT5zY2hlZHVsZXItPm5hbWUpOwogCQkJZWxzZQogI2VuZGlmCi0JCQkJc2VxX3ByaW50ZihzZXEsICIlcyAgJTA4WDolMDRYICVzICIsCisJCQkJc2VxX3ByaW50ZihzZXEsICIlcyAgJTA4WDolMDRYICVzICVzICIsCiAJCQkJCSAgIGlwX3ZzX3Byb3RvX25hbWUoc3ZjLT5wcm90b2NvbCksCiAJCQkJCSAgIG50b2hsKHN2Yy0+YWRkci5pcCksCiAJCQkJCSAgIG50b2hzKHN2Yy0+cG9ydCksCi0JCQkJCSAgIHN2Yy0+c2NoZWR1bGVyLT5uYW1lKTsKKwkJCQkJICAgc3ZjLT5zY2hlZHVsZXItPm5hbWUsCisJCQkJCSAgIChzdmMtPmZsYWdzICYgSVBfVlNfU1ZDX0ZfT05FUEFDS0VUKT8ib3BzICI6IiIpOwogCQl9IGVsc2UgewotCQkJc2VxX3ByaW50ZihzZXEsICJGV00gICUwOFggJXMgIiwKLQkJCQkgICBzdmMtPmZ3bWFyaywgc3ZjLT5zY2hlZHVsZXItPm5hbWUpOworCQkJc2VxX3ByaW50ZihzZXEsICJGV00gICUwOFggJXMgJXMiLAorCQkJCSAgIHN2Yy0+ZndtYXJrLCBzdmMtPnNjaGVkdWxlci0+bmFtZSwKKwkJCQkgICAoc3ZjLT5mbGFncyAmIElQX1ZTX1NWQ19GX09ORVBBQ0tFVCk/Im9wcyAiOiIiKTsKIAkJfQogCiAJCWlmIChzdmMtPmZsYWdzICYgSVBfVlNfU1ZDX0ZfUEVSU0lTVEVOVCkKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYwppbmRleCAyYWU3NDdhLi5mMjI4YTE3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jCkBAIC0yMCw2ICsyMCwxNyBAQAogICoKICAqIEF1dGhvcjoJV291dGVyIEdhZGV5bmUKICAqCisgKgorICogQ29kZSBmb3IgaXBfdnNfZXhwZWN0X3JlbGF0ZWQgYW5kIGlwX3ZzX2V4cGVjdF9jYWxsYmFjayBpcyB0YWtlbiBmcm9tCisgKiBodHRwOi8vd3d3LnNzaS5iZy9+amEvbmZjdC86CisgKgorICogaXBfdnNfbmZjdC5jOglOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0IGZvciBJUFZTCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIKKyAqIEFudGVmYWN0byBMdGQsIDE4MSBQYXJuZWxsIFN0LCBEdWJsaW4gMSwgSXJlbGFuZC4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOAorICogSnVsaWFuIEFuYXN0YXNvdgogICovCiAKICNkZWZpbmUgS01TR19DT01QT05FTlQgIklQVlMiCkBAIC0zMiw2ICs0Myw5IEBACiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CiAjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CiAjaW5jbHVkZSA8bmV0L3RjcC5oPgpAQCAtNDMsNiArNTcsMTYgQEAKICNkZWZpbmUgU0VSVkVSX1NUUklORyAiMjI3IEVudGVyaW5nIFBhc3NpdmUgTW9kZSAoIgogI2RlZmluZSBDTElFTlRfU1RSSU5HICJQT1JUICIKIAorI2RlZmluZSBGTVRfVFVQTEUJIiVwSTQ6JXUtPiVwSTQ6JXUvJXUiCisjZGVmaW5lIEFSR19UVVBMRShUKQkmKFQpLT5zcmMudTMuaXAsIG50b2hzKChUKS0+c3JjLnUuYWxsKSwgXAorCQkJJihUKS0+ZHN0LnUzLmlwLCBudG9ocygoVCktPmRzdC51LmFsbCksIFwKKwkJCShUKS0+ZHN0LnByb3RvbnVtCisKKyNkZWZpbmUgRk1UX0NPTk4JIiVwSTQ6JXUtPiVwSTQ6JXUtPiVwSTQ6JXUvJXU6JXUiCisjZGVmaW5lIEFSR19DT05OKEMpCSYoKEMpLT5jYWRkci5pcCksIG50b2hzKChDKS0+Y3BvcnQpLCBcCisJCQkmKChDKS0+dmFkZHIuaXApLCBudG9ocygoQyktPnZwb3J0KSwgXAorCQkJJigoQyktPmRhZGRyLmlwKSwgbnRvaHMoKEMpLT5kcG9ydCksIFwKKwkJCShDKS0+cHJvdG9jb2wsIChDKS0+c3RhdGUKIAogLyoKICAqIExpc3Qgb2YgcG9ydHMgKHVwIHRvIElQX1ZTX0FQUF9NQVhfUE9SVFMpIHRvIGJlIGhhbmRsZWQgYnkgaGVscGVyCkBAIC0xMjMsNiArMTQ3LDExOSBAQAogCXJldHVybiAxOwogfQogCisvKgorICogQ2FsbGVkIGZyb20gaW5pdF9jb25udHJhY2soKSBhcyBleHBlY3RmbiBoYW5kbGVyLgorICovCitzdGF0aWMgdm9pZAoraXBfdnNfZXhwZWN0X2NhbGxiYWNrKHN0cnVjdCBuZl9jb25uICpjdCwKKwkJICAgICAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCkKK3sKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvcmlnLCBuZXdfcmVwbHk7CisJc3RydWN0IGlwX3ZzX2Nvbm4gKmNwOworCisJaWYgKGV4cC0+dHVwbGUuc3JjLmwzbnVtICE9IFBGX0lORVQpCisJCXJldHVybjsKKworCS8qCisJICogV2UgYXNzdW1lIHRoYXQgbm8gTkYgbG9ja3MgYXJlIGhlbGQgYmVmb3JlIHRoaXMgY2FsbGJhY2suCisJICogaXBfdnNfY29ubl9vdXRfZ2V0IGFuZCBpcF92c19jb25uX2luX2dldCBzaG91bGQgbWF0Y2ggdGhlaXIKKwkgKiBleHBlY3RhdGlvbnMgZXZlbiBpZiB0aGV5IHVzZSB3aWxkY2FyZCB2YWx1ZXMsIG5vdyB3ZSBwcm92aWRlIHRoZQorCSAqIGFjdHVhbCB2YWx1ZXMgZnJvbSB0aGUgbmV3bHkgY3JlYXRlZCBvcmlnaW5hbCBjb25udHJhY2sgZGlyZWN0aW9uLgorCSAqIFRoZSBjb25udHJhY2sgaXMgY29uZmlybWVkIHdoZW4gcGFja2V0IHJlYWNoZXMgSVBWUyBob29rcy4KKwkgKi8KKworCS8qIFJTLT5DTElFTlQgKi8KKwlvcmlnID0gJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZTsKKwljcCA9IGlwX3ZzX2Nvbm5fb3V0X2dldChleHAtPnR1cGxlLnNyYy5sM251bSwgb3JpZy0+ZHN0LnByb3RvbnVtLAorCQkJCSZvcmlnLT5zcmMudTMsIG9yaWctPnNyYy51LnRjcC5wb3J0LAorCQkJCSZvcmlnLT5kc3QudTMsIG9yaWctPmRzdC51LnRjcC5wb3J0KTsKKwlpZiAoY3ApIHsKKwkJLyogQ2hhbmdlIHJlcGx5IENMSUVOVC0+UlMgdG8gQ0xJRU5ULT5WUyAqLworCQluZXdfcmVwbHkgPSBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGU7CisJCUlQX1ZTX0RCRyg3LCAiJXMoKTogY3Q9JXAsIHN0YXR1cz0weCVsWCwgdHVwbGVzPSIgRk1UX1RVUExFICIsICIKKwkJCSAgRk1UX1RVUExFICIsIGZvdW5kIGlub3V0IGNwPSIgRk1UX0NPTk4gIlxuIiwKKwkJCSAgX19mdW5jX18sIGN0LCBjdC0+c3RhdHVzLAorCQkJICBBUkdfVFVQTEUob3JpZyksIEFSR19UVVBMRSgmbmV3X3JlcGx5KSwKKwkJCSAgQVJHX0NPTk4oY3ApKTsKKwkJbmV3X3JlcGx5LmRzdC51MyA9IGNwLT52YWRkcjsKKwkJbmV3X3JlcGx5LmRzdC51LnRjcC5wb3J0ID0gY3AtPnZwb3J0OworCQlJUF9WU19EQkcoNywgIiVzKCk6IGN0PSVwLCBuZXcgdHVwbGVzPSIgRk1UX1RVUExFICIsICIgRk1UX1RVUExFCisJCQkgICIsIGlub3V0IGNwPSIgRk1UX0NPTk4gIlxuIiwKKwkJCSAgX19mdW5jX18sIGN0LAorCQkJICBBUkdfVFVQTEUob3JpZyksIEFSR19UVVBMRSgmbmV3X3JlcGx5KSwKKwkJCSAgQVJHX0NPTk4oY3ApKTsKKwkJZ290byBhbHRlcjsKKwl9CisKKwkvKiBDTElFTlQtPlZTICovCisJY3AgPSBpcF92c19jb25uX2luX2dldChleHAtPnR1cGxlLnNyYy5sM251bSwgb3JpZy0+ZHN0LnByb3RvbnVtLAorCQkJICAgICAgICZvcmlnLT5zcmMudTMsIG9yaWctPnNyYy51LnRjcC5wb3J0LAorCQkJICAgICAgICZvcmlnLT5kc3QudTMsIG9yaWctPmRzdC51LnRjcC5wb3J0KTsKKwlpZiAoY3ApIHsKKwkJLyogQ2hhbmdlIHJlcGx5IFZTLT5DTElFTlQgdG8gUlMtPkNMSUVOVCAqLworCQluZXdfcmVwbHkgPSBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGU7CisJCUlQX1ZTX0RCRyg3LCAiJXMoKTogY3Q9JXAsIHN0YXR1cz0weCVsWCwgdHVwbGVzPSIgRk1UX1RVUExFICIsICIKKwkJCSAgRk1UX1RVUExFICIsIGZvdW5kIG91dGluIGNwPSIgRk1UX0NPTk4gIlxuIiwKKwkJCSAgX19mdW5jX18sIGN0LCBjdC0+c3RhdHVzLAorCQkJICBBUkdfVFVQTEUob3JpZyksIEFSR19UVVBMRSgmbmV3X3JlcGx5KSwKKwkJCSAgQVJHX0NPTk4oY3ApKTsKKwkJbmV3X3JlcGx5LnNyYy51MyA9IGNwLT5kYWRkcjsKKwkJbmV3X3JlcGx5LnNyYy51LnRjcC5wb3J0ID0gY3AtPmRwb3J0OworCQlJUF9WU19EQkcoNywgIiVzKCk6IGN0PSVwLCBuZXcgdHVwbGVzPSIgRk1UX1RVUExFICIsICIKKwkJCSAgRk1UX1RVUExFICIsIG91dGluIGNwPSIgRk1UX0NPTk4gIlxuIiwKKwkJCSAgX19mdW5jX18sIGN0LAorCQkJICBBUkdfVFVQTEUob3JpZyksIEFSR19UVVBMRSgmbmV3X3JlcGx5KSwKKwkJCSAgQVJHX0NPTk4oY3ApKTsKKwkJZ290byBhbHRlcjsKKwl9CisKKwlJUF9WU19EQkcoNywgIiVzKCk6IGN0PSVwLCBzdGF0dXM9MHglbFgsIHR1cGxlPSIgRk1UX1RVUExFCisJCSAgIiAtIHVua25vd24gZXhwZWN0XG4iLAorCQkgIF9fZnVuY19fLCBjdCwgY3QtPnN0YXR1cywgQVJHX1RVUExFKG9yaWcpKTsKKwlyZXR1cm47CisKK2FsdGVyOgorCS8qIE5ldmVyIGFsdGVyIGNvbm50cmFjayBmb3Igbm9uLU5BVCBjb25ucyAqLworCWlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSkKKwkJbmZfY29ubnRyYWNrX2FsdGVyX3JlcGx5KGN0LCAmbmV3X3JlcGx5KTsKKwlpcF92c19jb25uX3B1dChjcCk7CisJcmV0dXJuOworfQorCisvKgorICogQ3JlYXRlIE5GIGNvbm50cmFjayBleHBlY3RhdGlvbiB3aXRoIHdpbGRjYXJkIChvcHRpb25hbCkgc291cmNlIHBvcnQuCisgKiBUaGVuIHRoZSBkZWZhdWx0IGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgYWx0ZXIgdGhlIHJlcGx5IGFuZCB3aWxsIGNvbmZpcm0KKyAqIHRoZSBjb25udHJhY2sgZW50cnkgd2hlbiB0aGUgZmlyc3QgcGFja2V0IGNvbWVzLgorICovCitzdGF0aWMgdm9pZAoraXBfdnNfZXhwZWN0X3JlbGF0ZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgdV9pbnQ4X3QgcHJvdG8sCisJCSAgICAgY29uc3QgX19iZTE2ICpwb3J0LCBpbnQgZnJvbV9ycykKK3sKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwOworCisJQlVHX09OKCFjdCB8fCBjdCA9PSAmbmZfY29ubnRyYWNrX3VudHJhY2tlZCk7CisKKwlleHAgPSBuZl9jdF9leHBlY3RfYWxsb2MoY3QpOworCWlmICghZXhwKQorCQlyZXR1cm47CisKKwlpZiAoZnJvbV9ycykKKwkJbmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwKKwkJCQkgIG5mX2N0X2wzbnVtKGN0KSwgJmNwLT5kYWRkciwgJmNwLT5jYWRkciwKKwkJCQkgIHByb3RvLCBwb3J0LCAmY3AtPmNwb3J0KTsKKwllbHNlCisJCW5mX2N0X2V4cGVjdF9pbml0KGV4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsCisJCQkJICBuZl9jdF9sM251bShjdCksICZjcC0+Y2FkZHIsICZjcC0+dmFkZHIsCisJCQkJICBwcm90bywgcG9ydCwgJmNwLT52cG9ydCk7CisKKwlleHAtPmV4cGVjdGZuID0gaXBfdnNfZXhwZWN0X2NhbGxiYWNrOworCisJSVBfVlNfREJHKDcsICIlcygpOiBjdD0lcCwgZXhwZWN0IHR1cGxlPSIgRk1UX1RVUExFICJcbiIsCisJCSAgX19mdW5jX18sIGN0LCBBUkdfVFVQTEUoJmV4cC0+dHVwbGUpKTsKKwluZl9jdF9leHBlY3RfcmVsYXRlZChleHApOworCW5mX2N0X2V4cGVjdF9wdXQoZXhwKTsKK30KIAogLyoKICAqIExvb2sgYXQgb3V0Z29pbmcgZnRwIHBhY2tldHMgdG8gY2F0Y2ggdGhlIHJlc3BvbnNlIHRvIGEgUEFTViBjb21tYW5kCkBAIC0xNDksNyArMjg2LDkgQEAKIAlzdHJ1Y3QgaXBfdnNfY29ubiAqbl9jcDsKIAljaGFyIGJ1ZlsyNF07CQkvKiB4eHgueHh4Lnh4eC54eHgscHBwLHBwcFwwMDAgKi8KIAl1bnNpZ25lZCBidWZfbGVuOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CisJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CisJc3RydWN0IG5mX2Nvbm4gKmN0OwogCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKIAkvKiBUaGlzIGFwcGxpY2F0aW9uIGhlbHBlciBkb2Vzbid0IHdvcmsgd2l0aCBJUHY2IHlldCwKQEAgLTIxOSwyMCArMzU4LDI3IEBACiAKIAkJYnVmX2xlbiA9IHN0cmxlbihidWYpOwogCi0JCS8qCi0JCSAqIENhbGN1bGF0ZSByZXF1aXJlZCBkZWx0YS1vZmZzZXQgdG8ga2VlcCBUQ1AgaGFwcHkKLQkJICovCi0JCSpkaWZmID0gYnVmX2xlbiAtIChlbmQtc3RhcnQpOwotCi0JCWlmICgqZGlmZiA9PSAwKSB7Ci0JCQkvKiBzaW1wbHkgcmVwbGFjZSBpdCB3aXRoIG5ldyBwYXNzaXZlIGFkZHJlc3MgKi8KLQkJCW1lbWNweShzdGFydCwgYnVmLCBidWZfbGVuKTsKLQkJCXJldCA9IDE7Ci0JCX0gZWxzZSB7Ci0JCQlyZXQgPSAhaXBfdnNfc2tiX3JlcGxhY2Uoc2tiLCBHRlBfQVRPTUlDLCBzdGFydCwKLQkJCQkJICBlbmQtc3RhcnQsIGJ1ZiwgYnVmX2xlbik7CisJCWN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7CisJCWlmIChjdCAmJiAhbmZfY3RfaXNfdW50cmFja2VkKGN0KSkgeworCQkJLyogSWYgbWFuZ2xpbmcgZmFpbHMgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiAwCisJCQkgKiB3aGljaCB3aWxsIGNhdXNlIHRoZSBwYWNrZXQgdG8gYmUgZHJvcHBlZC4KKwkJCSAqIE1hbmdsaW5nIGNhbiBvbmx5IGZhaWwgdW5kZXIgbWVtb3J5IHByZXNzdXJlLAorCQkJICogaG9wZWZ1bGx5IGl0IHdpbGwgc3VjY2VlZCBvbiB0aGUgcmV0cmFuc21pdHRlZAorCQkJICogcGFja2V0LgorCQkJICovCisJCQlyZXQgPSBuZl9uYXRfbWFuZ2xlX3RjcF9wYWNrZXQoc2tiLCBjdCwgY3RpbmZvLAorCQkJCQkJICAgICAgIHN0YXJ0LWRhdGEsIGVuZC1zdGFydCwKKwkJCQkJCSAgICAgICBidWYsIGJ1Zl9sZW4pOworCQkJaWYgKHJldCkKKwkJCQlpcF92c19leHBlY3RfcmVsYXRlZChza2IsIGN0LCBuX2NwLAorCQkJCQkJICAgICBJUFBST1RPX1RDUCwgTlVMTCwgMCk7CiAJCX0KIAorCQkvKgorCQkgKiBOb3Qgc2V0dGluZyAnZGlmZicgaXMgaW50ZW50aW9uYWwsIG90aGVyd2lzZSB0aGUgc2VxdWVuY2UKKwkJICogd291bGQgYmUgYWRqdXN0ZWQgdHdpY2UuCisJCSAqLworCiAJCWNwLT5hcHBfZGF0YSA9IE5VTEw7CiAJCWlwX3ZzX3RjcF9jb25uX2xpc3RlbihuX2NwKTsKIAkJaXBfdnNfY29ubl9wdXQobl9jcCk7CkBAIC0yNjMsNiArNDA5LDcgQEAKIAl1bmlvbiBuZl9pbmV0X2FkZHIgdG87CiAJX19iZTE2IHBvcnQ7CiAJc3RydWN0IGlwX3ZzX2Nvbm4gKm5fY3A7CisJc3RydWN0IG5mX2Nvbm4gKmN0OwogCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKIAkvKiBUaGlzIGFwcGxpY2F0aW9uIGhlbHBlciBkb2Vzbid0IHdvcmsgd2l0aCBJUHY2IHlldCwKQEAgLTM0OSw2ICs0OTYsMTEgQEAKIAkJaXBfdnNfY29udHJvbF9hZGQobl9jcCwgY3ApOwogCX0KIAorCWN0ID0gKHN0cnVjdCBuZl9jb25uICopc2tiLT5uZmN0OworCWlmIChjdCAmJiBjdCAhPSAmbmZfY29ubnRyYWNrX3VudHJhY2tlZCkKKwkJaXBfdnNfZXhwZWN0X3JlbGF0ZWQoc2tiLCBjdCwgbl9jcCwKKwkJCQkgICAgIElQUFJPVE9fVENQLCAmbl9jcC0+ZHBvcnQsIDEpOworCiAJLyoKIAkgKglNb3ZlIHR1bm5lbCB0byBsaXN0ZW4gc3RhdGUKIAkgKi8KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jCmluZGV4IDk0YTQ1MjEuLjkzMjNmODkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuYwpAQCAtMTEsNyArMTEsNyBAQAogICogQ2hhbmdlczoKICAqICAgICBNYXJ0aW4gSGFtaWx0b24gICAgICAgICA6ICAgIGZpeGVkIHRoZSB0ZXJyaWJsZSBsb2NraW5nIGJ1Z3MKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbG9jayh0YmwtPmxvY2spID09PiAqbG9jaygmdGJsLT5sb2NrKQotICogICAgIFdlbnNvbmcgWmhhbmcgICAgICAgICAgIDogICAgZml4ZWQgdGhlIHVuaW5pdGlsaXplZCB0YmwtPmxvY2sgYnVnCisgKiAgICAgV2Vuc29uZyBaaGFuZyAgICAgICAgICAgOiAgICBmaXhlZCB0aGUgdW5pbml0aWFsaXplZCB0YmwtPmxvY2sgYnVnCiAgKiAgICAgV2Vuc29uZyBaaGFuZyAgICAgICAgICAgOiAgICBhZGRlZCBkb2luZyBmdWxsIGV4cGlyYXRpb24gY2hlY2sgdG8KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0IHN0YWxlIGVudHJpZXMgb2YgMjQrIGhvdXJzIHdoZW4KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubyBwYXJ0aWFsIGV4cGlyZSBjaGVjayBpbiBhIGhhbGYgaG91cgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsY3IuYwppbmRleCA1MzVkYzJiLi5kYmVlZDhlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsY3IuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsY3IuYwpAQCAtMzg2LDcgKzM4Niw3IEBACiAJCWlwX3ZzX2FkZHJfY29weShkZXN0LT5hZiwgJmVuLT5hZGRyLCBkYWRkcik7CiAJCWVuLT5sYXN0dXNlID0gamlmZmllczsKIAotCQkvKiBpbml0aWxpemUgaXRzIGRlc3Qgc2V0ICovCisJCS8qIGluaXRpYWxpemUgaXRzIGRlc3Qgc2V0ICovCiAJCWF0b21pY19zZXQoJihlbi0+c2V0LnNpemUpLCAwKTsKIAkJSU5JVF9MSVNUX0hFQUQoJmVuLT5zZXQubGlzdCk7CiAJCXJ3bG9ja19pbml0KCZlbi0+c2V0LmxvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG8uYwppbmRleCAyZDNkNWU0Li4wMjdmNjU0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG8uYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG8uYwpAQCAtOTgsNiArOTgsNyBAQAogCiAJcmV0dXJuIE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MKGlwX3ZzX3Byb3RvX2dldCk7CiAKIAogLyoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jCmluZGV4IGM5YTNmN2EuLjRjMDg1NWMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYwpAQCAtOCw1NSArOCw2IEBACiAjaW5jbHVkZSA8bmV0L3NjdHAvY2hlY2tzdW0uaD4KICNpbmNsdWRlIDxuZXQvaXBfdnMuaD4KIAotCi1zdGF0aWMgc3RydWN0IGlwX3ZzX2Nvbm4gKgotc2N0cF9jb25uX2luX2dldChpbnQgYWYsCi0JCSBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkJIGNvbnN0IHN0cnVjdCBpcF92c19pcGhkciAqaXBoLAotCQkgdW5zaWduZWQgaW50IHByb3RvX29mZiwKLQkJIGludCBpbnZlcnNlKQotewotCV9fYmUxNiBfcG9ydHNbMl0sICpwcHRyOwotCi0JcHB0ciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHByb3RvX29mZiwgc2l6ZW9mKF9wb3J0cyksIF9wb3J0cyk7Ci0JaWYgKHBwdHIgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAobGlrZWx5KCFpbnZlcnNlKSkgCi0JCXJldHVybiBpcF92c19jb25uX2luX2dldChhZiwgaXBoLT5wcm90b2NvbCwKLQkJCQkJICZpcGgtPnNhZGRyLCBwcHRyWzBdLAotCQkJCQkgJmlwaC0+ZGFkZHIsIHBwdHJbMV0pOwotCWVsc2UgCi0JCXJldHVybiBpcF92c19jb25uX2luX2dldChhZiwgaXBoLT5wcm90b2NvbCwKLQkJCQkJICZpcGgtPmRhZGRyLCBwcHRyWzFdLAotCQkJCQkgJmlwaC0+c2FkZHIsIHBwdHJbMF0pOwotfQotCi1zdGF0aWMgc3RydWN0IGlwX3ZzX2Nvbm4gKgotc2N0cF9jb25uX291dF9nZXQoaW50IGFmLAotCQkgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkJICBjb25zdCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCwKLQkJICB1bnNpZ25lZCBpbnQgcHJvdG9fb2ZmLAotCQkgIGludCBpbnZlcnNlKQotewotCV9fYmUxNiBfcG9ydHNbMl0sICpwcHRyOwotCi0JcHB0ciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHByb3RvX29mZiwgc2l6ZW9mKF9wb3J0cyksIF9wb3J0cyk7Ci0JaWYgKHBwdHIgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAobGlrZWx5KCFpbnZlcnNlKSkgCi0JCXJldHVybiBpcF92c19jb25uX291dF9nZXQoYWYsIGlwaC0+cHJvdG9jb2wsCi0JCQkJCSAgJmlwaC0+c2FkZHIsIHBwdHJbMF0sCi0JCQkJCSAgJmlwaC0+ZGFkZHIsIHBwdHJbMV0pOwotCWVsc2UgCi0JCXJldHVybiBpcF92c19jb25uX291dF9nZXQoYWYsIGlwaC0+cHJvdG9jb2wsCi0JCQkJCSAgJmlwaC0+ZGFkZHIsIHBwdHJbMV0sCi0JCQkJCSAgJmlwaC0+c2FkZHIsIHBwdHJbMF0pOwotfQotCiBzdGF0aWMgaW50CiBzY3RwX2Nvbm5fc2NoZWR1bGUoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQkgICBpbnQgKnZlcmRpY3QsIHN0cnVjdCBpcF92c19jb25uICoqY3BwKQpAQCAtMTczLDcgKzEyNCw3IEBACiAJCQlyZXR1cm4gMDsKIAogCQkvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi8KLQkJaWYgKCFpcF92c19hcHBfcGt0X291dChjcCwgc2tiKSkKKwkJaWYgKCFpcF92c19hcHBfcGt0X2luKGNwLCBza2IpKQogCQkJcmV0dXJuIDA7CiAJfQogCkBAIC0xMTY5LDggKzExMjAsOCBAQAogCS5yZWdpc3Rlcl9hcHAgPSBzY3RwX3JlZ2lzdGVyX2FwcCwKIAkudW5yZWdpc3Rlcl9hcHAgPSBzY3RwX3VucmVnaXN0ZXJfYXBwLAogCS5jb25uX3NjaGVkdWxlID0gc2N0cF9jb25uX3NjaGVkdWxlLAotCS5jb25uX2luX2dldCA9IHNjdHBfY29ubl9pbl9nZXQsCi0JLmNvbm5fb3V0X2dldCA9IHNjdHBfY29ubl9vdXRfZ2V0LAorCS5jb25uX2luX2dldCA9IGlwX3ZzX2Nvbm5faW5fZ2V0X3Byb3RvLAorCS5jb25uX291dF9nZXQgPSBpcF92c19jb25uX291dF9nZXRfcHJvdG8sCiAJLnNuYXRfaGFuZGxlciA9IHNjdHBfc25hdF9oYW5kbGVyLAogCS5kbmF0X2hhbmRsZXIgPSBzY3RwX2RuYXRfaGFuZGxlciwKIAkuY3N1bV9jaGVjayA9IHNjdHBfY3N1bV9jaGVjaywKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYwppbmRleCA5MWQyOGUwLi4yODJkMjRkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jCkBAIC0yNyw1MiArMjcsNiBAQAogCiAjaW5jbHVkZSA8bmV0L2lwX3ZzLmg+CiAKLQotc3RhdGljIHN0cnVjdCBpcF92c19jb25uICoKLXRjcF9jb25uX2luX2dldChpbnQgYWYsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JCWNvbnN0IHN0cnVjdCBpcF92c19pcGhkciAqaXBoLCB1bnNpZ25lZCBpbnQgcHJvdG9fb2ZmLAotCQlpbnQgaW52ZXJzZSkKLXsKLQlfX2JlMTYgX3BvcnRzWzJdLCAqcHB0cjsKLQotCXBwdHIgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwcm90b19vZmYsIHNpemVvZihfcG9ydHMpLCBfcG9ydHMpOwotCWlmIChwcHRyID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKGxpa2VseSghaW52ZXJzZSkpIHsKLQkJcmV0dXJuIGlwX3ZzX2Nvbm5faW5fZ2V0KGFmLCBpcGgtPnByb3RvY29sLAotCQkJCQkgJmlwaC0+c2FkZHIsIHBwdHJbMF0sCi0JCQkJCSAmaXBoLT5kYWRkciwgcHB0clsxXSk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIGlwX3ZzX2Nvbm5faW5fZ2V0KGFmLCBpcGgtPnByb3RvY29sLAotCQkJCQkgJmlwaC0+ZGFkZHIsIHBwdHJbMV0sCi0JCQkJCSAmaXBoLT5zYWRkciwgcHB0clswXSk7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IGlwX3ZzX2Nvbm4gKgotdGNwX2Nvbm5fb3V0X2dldChpbnQgYWYsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JCSBjb25zdCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCwgdW5zaWduZWQgaW50IHByb3RvX29mZiwKLQkJIGludCBpbnZlcnNlKQotewotCV9fYmUxNiBfcG9ydHNbMl0sICpwcHRyOwotCi0JcHB0ciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHByb3RvX29mZiwgc2l6ZW9mKF9wb3J0cyksIF9wb3J0cyk7Ci0JaWYgKHBwdHIgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAobGlrZWx5KCFpbnZlcnNlKSkgewotCQlyZXR1cm4gaXBfdnNfY29ubl9vdXRfZ2V0KGFmLCBpcGgtPnByb3RvY29sLAotCQkJCQkgICZpcGgtPnNhZGRyLCBwcHRyWzBdLAotCQkJCQkgICZpcGgtPmRhZGRyLCBwcHRyWzFdKTsKLQl9IGVsc2UgewotCQlyZXR1cm4gaXBfdnNfY29ubl9vdXRfZ2V0KGFmLCBpcGgtPnByb3RvY29sLAotCQkJCQkgICZpcGgtPmRhZGRyLCBwcHRyWzFdLAotCQkJCQkgICZpcGgtPnNhZGRyLCBwcHRyWzBdKTsKLQl9Ci19Ci0KLQogc3RhdGljIGludAogdGNwX2Nvbm5fc2NoZWR1bGUoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQkgIGludCAqdmVyZGljdCwgc3RydWN0IGlwX3ZzX2Nvbm4gKipjcHApCkBAIC03MjEsOCArNjc1LDggQEAKIAkucmVnaXN0ZXJfYXBwID0JCXRjcF9yZWdpc3Rlcl9hcHAsCiAJLnVucmVnaXN0ZXJfYXBwID0JdGNwX3VucmVnaXN0ZXJfYXBwLAogCS5jb25uX3NjaGVkdWxlID0JdGNwX2Nvbm5fc2NoZWR1bGUsCi0JLmNvbm5faW5fZ2V0ID0JCXRjcF9jb25uX2luX2dldCwKLQkuY29ubl9vdXRfZ2V0ID0JCXRjcF9jb25uX291dF9nZXQsCisJLmNvbm5faW5fZ2V0ID0JCWlwX3ZzX2Nvbm5faW5fZ2V0X3Byb3RvLAorCS5jb25uX291dF9nZXQgPQkJaXBfdnNfY29ubl9vdXRfZ2V0X3Byb3RvLAogCS5zbmF0X2hhbmRsZXIgPQkJdGNwX3NuYXRfaGFuZGxlciwKIAkuZG5hdF9oYW5kbGVyID0JCXRjcF9kbmF0X2hhbmRsZXIsCiAJLmNzdW1fY2hlY2sgPQkJdGNwX2NzdW1fY2hlY2ssCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMKaW5kZXggZTdhNjg4NS4uODU1MzIzMSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYwpAQCAtMjcsNTggKzI3LDYgQEAKICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQvaXA2X2NoZWNrc3VtLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgaXBfdnNfY29ubiAqCi11ZHBfY29ubl9pbl9nZXQoaW50IGFmLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAotCQljb25zdCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCwgdW5zaWduZWQgaW50IHByb3RvX29mZiwKLQkJaW50IGludmVyc2UpCi17Ci0Jc3RydWN0IGlwX3ZzX2Nvbm4gKmNwOwotCV9fYmUxNiBfcG9ydHNbMl0sICpwcHRyOwotCi0JcHB0ciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHByb3RvX29mZiwgc2l6ZW9mKF9wb3J0cyksIF9wb3J0cyk7Ci0JaWYgKHBwdHIgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAobGlrZWx5KCFpbnZlcnNlKSkgewotCQljcCA9IGlwX3ZzX2Nvbm5faW5fZ2V0KGFmLCBpcGgtPnByb3RvY29sLAotCQkJCSAgICAgICAmaXBoLT5zYWRkciwgcHB0clswXSwKLQkJCQkgICAgICAgJmlwaC0+ZGFkZHIsIHBwdHJbMV0pOwotCX0gZWxzZSB7Ci0JCWNwID0gaXBfdnNfY29ubl9pbl9nZXQoYWYsIGlwaC0+cHJvdG9jb2wsCi0JCQkJICAgICAgICZpcGgtPmRhZGRyLCBwcHRyWzFdLAotCQkJCSAgICAgICAmaXBoLT5zYWRkciwgcHB0clswXSk7Ci0JfQotCi0JcmV0dXJuIGNwOwotfQotCi0KLXN0YXRpYyBzdHJ1Y3QgaXBfdnNfY29ubiAqCi11ZHBfY29ubl9vdXRfZ2V0KGludCBhZiwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkJIGNvbnN0IHN0cnVjdCBpcF92c19pcGhkciAqaXBoLCB1bnNpZ25lZCBpbnQgcHJvdG9fb2ZmLAotCQkgaW50IGludmVyc2UpCi17Ci0Jc3RydWN0IGlwX3ZzX2Nvbm4gKmNwOwotCV9fYmUxNiBfcG9ydHNbMl0sICpwcHRyOwotCi0JcHB0ciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHByb3RvX29mZiwgc2l6ZW9mKF9wb3J0cyksIF9wb3J0cyk7Ci0JaWYgKHBwdHIgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAobGlrZWx5KCFpbnZlcnNlKSkgewotCQljcCA9IGlwX3ZzX2Nvbm5fb3V0X2dldChhZiwgaXBoLT5wcm90b2NvbCwKLQkJCQkJJmlwaC0+c2FkZHIsIHBwdHJbMF0sCi0JCQkJCSZpcGgtPmRhZGRyLCBwcHRyWzFdKTsKLQl9IGVsc2UgewotCQljcCA9IGlwX3ZzX2Nvbm5fb3V0X2dldChhZiwgaXBoLT5wcm90b2NvbCwKLQkJCQkJJmlwaC0+ZGFkZHIsIHBwdHJbMV0sCi0JCQkJCSZpcGgtPnNhZGRyLCBwcHRyWzBdKTsKLQl9Ci0KLQlyZXR1cm4gY3A7Ci19Ci0KLQogc3RhdGljIGludAogdWRwX2Nvbm5fc2NoZWR1bGUoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQkgIGludCAqdmVyZGljdCwgc3RydWN0IGlwX3ZzX2Nvbm4gKipjcHApCkBAIC01MjAsOCArNDY4LDggQEAKIAkuaW5pdCA9CQkJdWRwX2luaXQsCiAJLmV4aXQgPQkJCXVkcF9leGl0LAogCS5jb25uX3NjaGVkdWxlID0JdWRwX2Nvbm5fc2NoZWR1bGUsCi0JLmNvbm5faW5fZ2V0ID0JCXVkcF9jb25uX2luX2dldCwKLQkuY29ubl9vdXRfZ2V0ID0JCXVkcF9jb25uX291dF9nZXQsCisJLmNvbm5faW5fZ2V0ID0JCWlwX3ZzX2Nvbm5faW5fZ2V0X3Byb3RvLAorCS5jb25uX291dF9nZXQgPQkJaXBfdnNfY29ubl9vdXRfZ2V0X3Byb3RvLAogCS5zbmF0X2hhbmRsZXIgPQkJdWRwX3NuYXRfaGFuZGxlciwKIAkuZG5hdF9oYW5kbGVyID0JCXVkcF9kbmF0X2hhbmRsZXIsCiAJLmNzdW1fY2hlY2sgPQkJdWRwX2NzdW1fY2hlY2ssCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYwppbmRleCA5M2MxNWExLi4yMWUxYTVlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxuZXQvaXA2X3JvdXRlLmg+CiAjaW5jbHVkZSA8bGludXgvaWNtcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgogCiAjaW5jbHVkZSA8bmV0L2lwX3ZzLmg+CkBAIC05MCwxMCArOTEsMTAgQEAKIAkJCQkJICAgICAmZGVzdC0+YWRkci5pcCk7CiAJCQkJcmV0dXJuIE5VTEw7CiAJCQl9Ci0JCQlfX2lwX3ZzX2RzdF9zZXQoZGVzdCwgcnRvcywgZHN0X2Nsb25lKCZydC0+dS5kc3QpKTsKKwkJCV9faXBfdnNfZHN0X3NldChkZXN0LCBydG9zLCBkc3RfY2xvbmUoJnJ0LT5kc3QpKTsKIAkJCUlQX1ZTX0RCRygxMCwgIm5ldyBkc3QgJXBJNCwgcmVmY250PSVkLCBydG9zPSVYXG4iLAogCQkJCSAgJmRlc3QtPmFkZHIuaXAsCi0JCQkJICBhdG9taWNfcmVhZCgmcnQtPnUuZHN0Ll9fcmVmY250KSwgcnRvcyk7CisJCQkJICBhdG9taWNfcmVhZCgmcnQtPmRzdC5fX3JlZmNudCksIHJ0b3MpOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZkZXN0LT5kc3RfbG9jayk7CiAJfSBlbHNlIHsKQEAgLTE0OCwxMCArMTQ5LDEwIEBACiAJCQkJCSAgICAgJmRlc3QtPmFkZHIuaW42KTsKIAkJCQlyZXR1cm4gTlVMTDsKIAkJCX0KLQkJCV9faXBfdnNfZHN0X3NldChkZXN0LCAwLCBkc3RfY2xvbmUoJnJ0LT51LmRzdCkpOworCQkJX19pcF92c19kc3Rfc2V0KGRlc3QsIDAsIGRzdF9jbG9uZSgmcnQtPmRzdCkpOwogCQkJSVBfVlNfREJHKDEwLCAibmV3IGRzdCAlcEk2LCByZWZjbnQ9JWRcbiIsCiAJCQkJICAmZGVzdC0+YWRkci5pbjYsCi0JCQkJICBhdG9taWNfcmVhZCgmcnQtPnUuZHN0Ll9fcmVmY250KSk7CisJCQkJICBhdG9taWNfcmVhZCgmcnQtPmRzdC5fX3JlZmNudCkpOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZkZXN0LT5kc3RfbG9jayk7CiAJfSBlbHNlIHsKQEAgLTE5OCw3ICsxOTksNyBAQAogCShza2IpLT5pcHZzX3Byb3BlcnR5ID0gMTsJCQlcCiAJc2tiX2ZvcndhcmRfY3N1bShza2IpOwkJCQlcCiAJTkZfSE9PSyhwZiwgTkZfSU5FVF9MT0NBTF9PVVQsIChza2IpLCBOVUxMLAlcCi0JCShydCktPnUuZHN0LmRldiwgZHN0X291dHB1dCk7CQlcCisJCShydCktPmRzdC5kZXYsIGRzdF9vdXRwdXQpOwkJXAogfSB3aGlsZSAoMCkKIAogCkBAIC0yNDUsNyArMjQ2LDcgQEAKIAl9CiAKIAkvKiBNVFUgY2hlY2tpbmcgKi8KLQltdHUgPSBkc3RfbXR1KCZydC0+dS5kc3QpOworCW10dSA9IGRzdF9tdHUoJnJ0LT5kc3QpOwogCWlmICgoc2tiLT5sZW4gPiBtdHUpICYmIChpcGgtPmZyYWdfb2ZmICYgaHRvbnMoSVBfREYpKSkgewogCQlpcF9ydF9wdXQocnQpOwogCQlpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCxJQ01QX0ZSQUdfTkVFREVELCBodG9ubChtdHUpKTsKQEAgLTI2NSw3ICsyNjYsNyBAQAogCiAJLyogZHJvcCBvbGQgcm91dGUgKi8KIAlza2JfZHN0X2Ryb3Aoc2tiKTsKLQlza2JfZHN0X3NldChza2IsICZydC0+dS5kc3QpOworCXNrYl9kc3Rfc2V0KHNrYiwgJnJ0LT5kc3QpOwogCiAJLyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi8KIAlza2ItPmxvY2FsX2RmID0gMTsKQEAgLTMwOSw5ICszMTAsOSBAQAogCX0KIAogCS8qIE1UVSBjaGVja2luZyAqLwotCW10dSA9IGRzdF9tdHUoJnJ0LT51LmRzdCk7CisJbXR1ID0gZHN0X210dSgmcnQtPmRzdCk7CiAJaWYgKHNrYi0+bGVuID4gbXR1KSB7Ci0JCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOworCQlkc3RfcmVsZWFzZSgmcnQtPmRzdCk7CiAJCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1BLVF9UT09CSUcsIDAsIG10dSk7CiAJCUlQX1ZTX0RCR19STCgiJXMoKTogZnJhZyBuZWVkZWRcbiIsIF9fZnVuY19fKTsKIAkJZ290byB0eF9lcnJvcjsKQEAgLTMyMywxMyArMzI0LDEzIEBACiAJICovCiAJc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkgewotCQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKKwkJZHN0X3JlbGVhc2UoJnJ0LT5kc3QpOwogCQlyZXR1cm4gTkZfU1RPTEVOOwogCX0KIAogCS8qIGRyb3Agb2xkIHJvdXRlICovCiAJc2tiX2RzdF9kcm9wKHNrYik7Ci0Jc2tiX2RzdF9zZXQoc2tiLCAmcnQtPnUuZHN0KTsKKwlza2JfZHN0X3NldChza2IsICZydC0+ZHN0KTsKIAogCS8qIEFub3RoZXIgaGFjazogYXZvaWQgaWNtcF9zZW5kIGluIGlwX2ZyYWdtZW50ICovCiAJc2tiLT5sb2NhbF9kZiA9IDE7CkBAIC0zNDgsNiArMzQ5LDMwIEBACiB9CiAjZW5kaWYKIAorc3RhdGljIHZvaWQKK2lwX3ZzX3VwZGF0ZV9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKQoreworCXN0cnVjdCBuZl9jb25uICpjdCA9IChzdHJ1Y3QgbmZfY29ubiAqKXNrYi0+bmZjdDsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIG5ld190dXBsZTsKKworCWlmIChjdCA9PSBOVUxMIHx8IG5mX2N0X2lzX3VudHJhY2tlZChjdCkgfHwgbmZfY3RfaXNfY29uZmlybWVkKGN0KSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBUaGUgY29ubmVjdGlvbiBpcyBub3QgeWV0IGluIHRoZSBoYXNodGFibGUsIHNvIHdlIHVwZGF0ZSBpdC4KKwkgKiBDSVAtPlZJUCB3aWxsIHJlbWFpbiB0aGUgc2FtZSwgc28gbGVhdmUgdGhlIHR1cGxlIGluCisJICogSVBfQ1RfRElSX09SSUdJTkFMIHVudG91Y2hlZC4gIFdoZW4gdGhlIHJlcGx5IGNvbWVzIGJhY2sgZnJvbSB0aGUKKwkgKiByZWFsLXNlcnZlciB3ZSB3aWxsIHNlZSBSSVAtPkRJUC4KKwkgKi8KKwluZXdfdHVwbGUgPSBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGU7CisJbmV3X3R1cGxlLnNyYy51MyA9IGNwLT5kYWRkcjsKKwkvKgorCSAqIFRoaXMgd2lsbCBhbHNvIHRha2UgY2FyZSBvZiBVRFAgYW5kIG90aGVyIHByb3RvY29scy4KKwkgKi8KKwluZXdfdHVwbGUuc3JjLnUudGNwLnBvcnQgPSBjcC0+ZHBvcnQ7CisJbmZfY29ubnRyYWNrX2FsdGVyX3JlcGx5KGN0LCAmbmV3X3R1cGxlKTsKK30KKwogLyoKICAqICAgICAgTkFUIHRyYW5zbWl0dGVyIChvbmx5IGZvciBvdXRzaWRlLXRvLWluc2lkZSBuYXQgZm9yd2FyZGluZykKICAqICAgICAgTm90IHVzZWQgZm9yIHJlbGF0ZWQgSUNNUApAQCAtMzc2LDcgKzQwMSw3IEBACiAJCWdvdG8gdHhfZXJyb3JfaWNtcDsKIAogCS8qIE1UVSBjaGVja2luZyAqLwotCW10dSA9IGRzdF9tdHUoJnJ0LT51LmRzdCk7CisJbXR1ID0gZHN0X210dSgmcnQtPmRzdCk7CiAJaWYgKChza2ItPmxlbiA+IG10dSkgJiYgKGlwaC0+ZnJhZ19vZmYgJiBodG9ucyhJUF9ERikpKSB7CiAJCWlwX3J0X3B1dChydCk7CiAJCWljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILElDTVBfRlJBR19ORUVERUQsIGh0b25sKG10dSkpOwpAQCAtMzg4LDEyICs0MTMsMTIgQEAKIAlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKQogCQlnb3RvIHR4X2Vycm9yX3B1dDsKIAotCWlmIChza2JfY293KHNrYiwgcnQtPnUuZHN0LmRldi0+aGFyZF9oZWFkZXJfbGVuKSkKKwlpZiAoc2tiX2Nvdyhza2IsIHJ0LT5kc3QuZGV2LT5oYXJkX2hlYWRlcl9sZW4pKQogCQlnb3RvIHR4X2Vycm9yX3B1dDsKIAogCS8qIGRyb3Agb2xkIHJvdXRlICovCiAJc2tiX2RzdF9kcm9wKHNrYik7Ci0Jc2tiX2RzdF9zZXQoc2tiLCAmcnQtPnUuZHN0KTsKKwlza2JfZHN0X3NldChza2IsICZydC0+ZHN0KTsKIAogCS8qIG1hbmdsZSB0aGUgcGFja2V0ICovCiAJaWYgKHBwLT5kbmF0X2hhbmRsZXIgJiYgIXBwLT5kbmF0X2hhbmRsZXIoc2tiLCBwcCwgY3ApKQpAQCAtNDAzLDYgKzQyOCw4IEBACiAKIAlJUF9WU19EQkdfUEtUKDEwLCBwcCwgc2tiLCAwLCAiQWZ0ZXIgRE5BVCIpOwogCisJaXBfdnNfdXBkYXRlX2Nvbm50cmFjayhza2IsIGNwKTsKKwogCS8qIEZJWE1FOiB3aGVuIGFwcGxpY2F0aW9uIGhlbHBlciBlbmxhcmdlcyB0aGUgcGFja2V0IGFuZCB0aGUgbGVuZ3RoCiAJICAgaXMgbGFyZ2VyIHRoYW4gdGhlIE1UVSBvZiBvdXRnb2luZyBkZXZpY2UsIHRoZXJlIHdpbGwgYmUgc3RpbGwKIAkgICBNVFUgcHJvYmxlbS4gKi8KQEAgLTQ1Miw5ICs0NzksOSBAQAogCQlnb3RvIHR4X2Vycm9yX2ljbXA7CiAKIAkvKiBNVFUgY2hlY2tpbmcgKi8KLQltdHUgPSBkc3RfbXR1KCZydC0+dS5kc3QpOworCW10dSA9IGRzdF9tdHUoJnJ0LT5kc3QpOwogCWlmIChza2ItPmxlbiA+IG10dSkgewotCQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKKwkJZHN0X3JlbGVhc2UoJnJ0LT5kc3QpOwogCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QS1RfVE9PQklHLCAwLCBtdHUpOwogCQlJUF9WU19EQkdfUkxfUEtUKDAsIHBwLCBza2IsIDAsCiAJCQkJICJpcF92c19uYXRfeG1pdF92NigpOiBmcmFnIG5lZWRlZCBmb3IiKTsKQEAgLTQ2NSwxMiArNDkyLDEyIEBACiAJaWYgKCFza2JfbWFrZV93cml0YWJsZShza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKQogCQlnb3RvIHR4X2Vycm9yX3B1dDsKIAotCWlmIChza2JfY293KHNrYiwgcnQtPnUuZHN0LmRldi0+aGFyZF9oZWFkZXJfbGVuKSkKKwlpZiAoc2tiX2Nvdyhza2IsIHJ0LT5kc3QuZGV2LT5oYXJkX2hlYWRlcl9sZW4pKQogCQlnb3RvIHR4X2Vycm9yX3B1dDsKIAogCS8qIGRyb3Agb2xkIHJvdXRlICovCiAJc2tiX2RzdF9kcm9wKHNrYik7Ci0Jc2tiX2RzdF9zZXQoc2tiLCAmcnQtPnUuZHN0KTsKKwlza2JfZHN0X3NldChza2IsICZydC0+ZHN0KTsKIAogCS8qIG1hbmdsZSB0aGUgcGFja2V0ICovCiAJaWYgKHBwLT5kbmF0X2hhbmRsZXIgJiYgIXBwLT5kbmF0X2hhbmRsZXIoc2tiLCBwcCwgY3ApKQpAQCAtNDc5LDYgKzUwNiw4IEBACiAKIAlJUF9WU19EQkdfUEtUKDEwLCBwcCwgc2tiLCAwLCAiQWZ0ZXIgRE5BVCIpOwogCisJaXBfdnNfdXBkYXRlX2Nvbm50cmFjayhza2IsIGNwKTsKKwogCS8qIEZJWE1FOiB3aGVuIGFwcGxpY2F0aW9uIGhlbHBlciBlbmxhcmdlcyB0aGUgcGFja2V0IGFuZCB0aGUgbGVuZ3RoCiAJICAgaXMgbGFyZ2VyIHRoYW4gdGhlIE1UVSBvZiBvdXRnb2luZyBkZXZpY2UsIHRoZXJlIHdpbGwgYmUgc3RpbGwKIAkgICBNVFUgcHJvYmxlbS4gKi8KQEAgLTQ5OCw3ICs1MjcsNyBAQAogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiBORl9TVE9MRU47CiB0eF9lcnJvcl9wdXQ6Ci0JZHN0X3JlbGVhc2UoJnJ0LT51LmRzdCk7CisJZHN0X3JlbGVhc2UoJnJ0LT5kc3QpOwogCWdvdG8gdHhfZXJyb3I7CiB9CiAjZW5kaWYKQEAgLTU0OSw5ICs1NzgsOSBAQAogCWlmICghKHJ0ID0gX19pcF92c19nZXRfb3V0X3J0KGNwLCBSVF9UT1ModG9zKSkpKQogCQlnb3RvIHR4X2Vycm9yX2ljbXA7CiAKLQl0ZGV2ID0gcnQtPnUuZHN0LmRldjsKKwl0ZGV2ID0gcnQtPmRzdC5kZXY7CiAKLQltdHUgPSBkc3RfbXR1KCZydC0+dS5kc3QpIC0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7CisJbXR1ID0gZHN0X210dSgmcnQtPmRzdCkgLSBzaXplb2Yoc3RydWN0IGlwaGRyKTsKIAlpZiAobXR1IDwgNjgpIHsKIAkJaXBfcnRfcHV0KHJ0KTsKIAkJSVBfVlNfREJHX1JMKCIlcygpOiBtdHUgbGVzcyB0aGFuIDY4XG4iLCBfX2Z1bmNfXyk7CkBAIC02MDEsNyArNjMwLDcgQEAKIAogCS8qIGRyb3Agb2xkIHJvdXRlICovCiAJc2tiX2RzdF9kcm9wKHNrYik7Ci0Jc2tiX2RzdF9zZXQoc2tiLCAmcnQtPnUuZHN0KTsKKwlza2JfZHN0X3NldChza2IsICZydC0+ZHN0KTsKIAogCS8qCiAJICoJUHVzaCBkb3duIGFuZCBpbnN0YWxsIHRoZSBJUElQIGhlYWRlci4KQEAgLTYxNSw3ICs2NDQsNyBAQAogCWlwaC0+ZGFkZHIJCT0JcnQtPnJ0X2RzdDsKIAlpcGgtPnNhZGRyCQk9CXJ0LT5ydF9zcmM7CiAJaXBoLT50dGwJCT0Jb2xkX2lwaC0+dHRsOwotCWlwX3NlbGVjdF9pZGVudChpcGgsICZydC0+dS5kc3QsIE5VTEwpOworCWlwX3NlbGVjdF9pZGVudChpcGgsICZydC0+ZHN0LCBOVUxMKTsKIAogCS8qIEFub3RoZXIgaGFjazogYXZvaWQgaWNtcF9zZW5kIGluIGlwX2ZyYWdtZW50ICovCiAJc2tiLT5sb2NhbF9kZiA9IDE7CkBAIC02NjAsMTIgKzY4OSwxMiBAQAogCWlmICghcnQpCiAJCWdvdG8gdHhfZXJyb3JfaWNtcDsKIAotCXRkZXYgPSBydC0+dS5kc3QuZGV2OworCXRkZXYgPSBydC0+ZHN0LmRldjsKIAotCW10dSA9IGRzdF9tdHUoJnJ0LT51LmRzdCkgLSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOworCW10dSA9IGRzdF9tdHUoJnJ0LT5kc3QpIC0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKIAkvKiBUT0RPIElQdjY6IGRvIHdlIG5lZWQgdGhpcyBjaGVjayBpbiBJUHY2PyAqLwogCWlmIChtdHUgPCAxMjgwKSB7Ci0JCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOworCQlkc3RfcmVsZWFzZSgmcnQtPmRzdCk7CiAJCUlQX1ZTX0RCR19STCgiJXMoKTogbXR1IGxlc3MgdGhhbiAxMjgwXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gdHhfZXJyb3I7CiAJfQpAQCAtNjc0LDcgKzcwMyw3IEBACiAKIAlpZiAobXR1IDwgbnRvaHMob2xkX2lwaC0+cGF5bG9hZF9sZW4pICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkgewogCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QS1RfVE9PQklHLCAwLCBtdHUpOwotCQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKKwkJZHN0X3JlbGVhc2UoJnJ0LT5kc3QpOwogCQlJUF9WU19EQkdfUkwoIiVzKCk6IGZyYWcgbmVlZGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gdHhfZXJyb3I7CiAJfQpAQCAtNjg5LDcgKzcxOCw3IEBACiAJCXN0cnVjdCBza19idWZmICpuZXdfc2tiID0KIAkJCXNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwgbWF4X2hlYWRyb29tKTsKIAkJaWYgKCFuZXdfc2tiKSB7Ci0JCQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKKwkJCWRzdF9yZWxlYXNlKCZydC0+ZHN0KTsKIAkJCWtmcmVlX3NrYihza2IpOwogCQkJSVBfVlNfRVJSX1JMKCIlcygpOiBubyBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybiBORl9TVE9MRU47CkBAIC03MDcsNyArNzM2LDcgQEAKIAogCS8qIGRyb3Agb2xkIHJvdXRlICovCiAJc2tiX2RzdF9kcm9wKHNrYik7Ci0Jc2tiX2RzdF9zZXQoc2tiLCAmcnQtPnUuZHN0KTsKKwlza2JfZHN0X3NldChza2IsICZydC0+ZHN0KTsKIAogCS8qCiAJICoJUHVzaCBkb3duIGFuZCBpbnN0YWxsIHRoZSBJUElQIGhlYWRlci4KQEAgLTc2MCw3ICs3ODksNyBAQAogCQlnb3RvIHR4X2Vycm9yX2ljbXA7CiAKIAkvKiBNVFUgY2hlY2tpbmcgKi8KLQltdHUgPSBkc3RfbXR1KCZydC0+dS5kc3QpOworCW10dSA9IGRzdF9tdHUoJnJ0LT5kc3QpOwogCWlmICgoaXBoLT5mcmFnX29mZiAmIGh0b25zKElQX0RGKSkgJiYgc2tiLT5sZW4gPiBtdHUpIHsKIAkJaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsSUNNUF9GUkFHX05FRURFRCwgaHRvbmwobXR1KSk7CiAJCWlwX3J0X3B1dChydCk7CkBAIC03ODAsNyArODA5LDcgQEAKIAogCS8qIGRyb3Agb2xkIHJvdXRlICovCiAJc2tiX2RzdF9kcm9wKHNrYik7Ci0Jc2tiX2RzdF9zZXQoc2tiLCAmcnQtPnUuZHN0KTsKKwlza2JfZHN0X3NldChza2IsICZydC0+ZHN0KTsKIAogCS8qIEFub3RoZXIgaGFjazogYXZvaWQgaWNtcF9zZW5kIGluIGlwX2ZyYWdtZW50ICovCiAJc2tiLT5sb2NhbF9kZiA9IDE7CkBAIC04MTMsMTAgKzg0MiwxMCBAQAogCQlnb3RvIHR4X2Vycm9yX2ljbXA7CiAKIAkvKiBNVFUgY2hlY2tpbmcgKi8KLQltdHUgPSBkc3RfbXR1KCZydC0+dS5kc3QpOworCW10dSA9IGRzdF9tdHUoJnJ0LT5kc3QpOwogCWlmIChza2ItPmxlbiA+IG10dSkgewogCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QS1RfVE9PQklHLCAwLCBtdHUpOwotCQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKKwkJZHN0X3JlbGVhc2UoJnJ0LT5kc3QpOwogCQlJUF9WU19EQkdfUkwoIiVzKCk6IGZyYWcgbmVlZGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gdHhfZXJyb3I7CiAJfQpAQCAtODI3LDEzICs4NTYsMTMgQEAKIAkgKi8KIAlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKIAlpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKSB7Ci0JCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOworCQlkc3RfcmVsZWFzZSgmcnQtPmRzdCk7CiAJCXJldHVybiBORl9TVE9MRU47CiAJfQogCiAJLyogZHJvcCBvbGQgcm91dGUgKi8KIAlza2JfZHN0X2Ryb3Aoc2tiKTsKLQlza2JfZHN0X3NldChza2IsICZydC0+dS5kc3QpOworCXNrYl9kc3Rfc2V0KHNrYiwgJnJ0LT5kc3QpOwogCiAJLyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi8KIAlza2ItPmxvY2FsX2RmID0gMTsKQEAgLTg4OCw3ICs5MTcsNyBAQAogCQlnb3RvIHR4X2Vycm9yX2ljbXA7CiAKIAkvKiBNVFUgY2hlY2tpbmcgKi8KLQltdHUgPSBkc3RfbXR1KCZydC0+dS5kc3QpOworCW10dSA9IGRzdF9tdHUoJnJ0LT5kc3QpOwogCWlmICgoc2tiLT5sZW4gPiBtdHUpICYmIChpcF9oZHIoc2tiKS0+ZnJhZ19vZmYgJiBodG9ucyhJUF9ERikpKSB7CiAJCWlwX3J0X3B1dChydCk7CiAJCWljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX0ZSQUdfTkVFREVELCBodG9ubChtdHUpKTsKQEAgLTkwMCwxMiArOTI5LDEyIEBACiAJaWYgKCFza2JfbWFrZV93cml0YWJsZShza2IsIG9mZnNldCkpCiAJCWdvdG8gdHhfZXJyb3JfcHV0OwogCi0JaWYgKHNrYl9jb3coc2tiLCBydC0+dS5kc3QuZGV2LT5oYXJkX2hlYWRlcl9sZW4pKQorCWlmIChza2JfY293KHNrYiwgcnQtPmRzdC5kZXYtPmhhcmRfaGVhZGVyX2xlbikpCiAJCWdvdG8gdHhfZXJyb3JfcHV0OwogCiAJLyogZHJvcCB0aGUgb2xkIHJvdXRlIHdoZW4gc2tiIGlzIG5vdCBzaGFyZWQgKi8KIAlza2JfZHN0X2Ryb3Aoc2tiKTsKLQlza2JfZHN0X3NldChza2IsICZydC0+dS5kc3QpOworCXNrYl9kc3Rfc2V0KHNrYiwgJnJ0LT5kc3QpOwogCiAJaXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDApOwogCkBAIC05NjMsOSArOTkyLDkgQEAKIAkJZ290byB0eF9lcnJvcl9pY21wOwogCiAJLyogTVRVIGNoZWNraW5nICovCi0JbXR1ID0gZHN0X210dSgmcnQtPnUuZHN0KTsKKwltdHUgPSBkc3RfbXR1KCZydC0+ZHN0KTsKIAlpZiAoc2tiLT5sZW4gPiBtdHUpIHsKLQkJZHN0X3JlbGVhc2UoJnJ0LT51LmRzdCk7CisJCWRzdF9yZWxlYXNlKCZydC0+ZHN0KTsKIAkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEtUX1RPT0JJRywgMCwgbXR1KTsKIAkJSVBfVlNfREJHX1JMKCIlcygpOiBmcmFnIG5lZWRlZFxuIiwgX19mdW5jX18pOwogCQlnb3RvIHR4X2Vycm9yOwpAQCAtOTc1LDEyICsxMDA0LDEyIEBACiAJaWYgKCFza2JfbWFrZV93cml0YWJsZShza2IsIG9mZnNldCkpCiAJCWdvdG8gdHhfZXJyb3JfcHV0OwogCi0JaWYgKHNrYl9jb3coc2tiLCBydC0+dS5kc3QuZGV2LT5oYXJkX2hlYWRlcl9sZW4pKQorCWlmIChza2JfY293KHNrYiwgcnQtPmRzdC5kZXYtPmhhcmRfaGVhZGVyX2xlbikpCiAJCWdvdG8gdHhfZXJyb3JfcHV0OwogCiAJLyogZHJvcCB0aGUgb2xkIHJvdXRlIHdoZW4gc2tiIGlzIG5vdCBzaGFyZWQgKi8KIAlza2JfZHN0X2Ryb3Aoc2tiKTsKLQlza2JfZHN0X3NldChza2IsICZydC0+dS5kc3QpOworCXNrYl9kc3Rfc2V0KHNrYiwgJnJ0LT5kc3QpOwogCiAJaXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDApOwogCkBAIC0xMDAxLDcgKzEwMzAsNyBAQAogCUxlYXZlRnVuY3Rpb24oMTApOwogCXJldHVybiByYzsKIHR4X2Vycm9yX3B1dDoKLQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKKwlkc3RfcmVsZWFzZSgmcnQtPmRzdCk7CiAJZ290byB0eF9lcnJvcjsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYWNjdC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYWNjdC5jCmluZGV4IGFiODFiMzguLjUxNzhjNjkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FjY3QuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hY2N0LmMKQEAgLTE3LDEzICsxNyw3IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYWNjdC5oPgogCi0jaWZkZWYgQ09ORklHX05GX0NUX0FDQ1QKLSNkZWZpbmUgTkZfQ1RfQUNDVF9ERUZBVUxUIDEKLSNlbHNlCi0jZGVmaW5lIE5GX0NUX0FDQ1RfREVGQVVMVCAwCi0jZW5kaWYKLQotc3RhdGljIGludCBuZl9jdF9hY2N0IF9fcmVhZF9tb3N0bHkgPSBORl9DVF9BQ0NUX0RFRkFVTFQ7CitzdGF0aWMgaW50IG5mX2N0X2FjY3QgX19yZWFkX21vc3RseTsKIAogbW9kdWxlX3BhcmFtX25hbWVkKGFjY3QsIG5mX2N0X2FjY3QsIGJvb2wsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhhY2N0LCAiRW5hYmxlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZmxvdyBhY2NvdW50aW5nLiIpOwpAQCAtMTE0LDEyICsxMDgsNiBAQAogCW5ldC0+Y3Quc3lzY3RsX2FjY3QgPSBuZl9jdF9hY2N0OwogCiAJaWYgKG5ldF9lcShuZXQsICZpbml0X25ldCkpIHsKLSNpZmRlZiBDT05GSUdfTkZfQ1RfQUNDVAotCXByaW50ayhLRVJOX1dBUk5JTkcgIkNPTkZJR19ORl9DVF9BQ0NUIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBzb29uLiBQbGVhc2UgdXNlXG4iKTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAibmZfY29ubnRyYWNrLmFjY3Q9MSBrZXJuZWwgcGFyYW1ldGVyLCBhY2N0PTEgbmZfY29ubnRyYWNrIG1vZHVsZSBvcHRpb24gb3JcbiIpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJzeXNjdGwgbmV0Lm5ldGZpbHRlci5uZl9jb25udHJhY2tfYWNjdD0xIHRvIGVuYWJsZSBpdC5cbiIpOwotI2VuZGlmCi0KIAkJcmV0ID0gbmZfY3RfZXh0ZW5kX3JlZ2lzdGVyKCZhY2N0X2V4dGVuZCk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIm5mX2Nvbm50cmFja19hY2N0OiBVbmFibGUgdG8gcmVnaXN0ZXIgZXh0ZW5zaW9uXG4iKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwppbmRleCBlZWViOGJjLi5kZjNlZWRiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCkBAIC02Miw4ICs2Miw4IEBACiB1bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX21heCBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX21heCk7CiAKLXN0cnVjdCBuZl9jb25uIG5mX2Nvbm50cmFja191bnRyYWNrZWQgX19yZWFkX21vc3RseTsKLUVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja191bnRyYWNrZWQpOworREVGSU5FX1BFUl9DUFUoc3RydWN0IG5mX2Nvbm4sIG5mX2Nvbm50cmFja191bnRyYWNrZWQpOworRVhQT1JUX1BFUl9DUFVfU1lNQk9MKG5mX2Nvbm50cmFja191bnRyYWNrZWQpOwogCiBzdGF0aWMgaW50IG5mX2Nvbm50cmFja19oYXNoX3JuZF9pbml0dGVkOwogc3RhdGljIHVuc2lnbmVkIGludCBuZl9jb25udHJhY2tfaGFzaF9ybmQ7CkBAIC02MTksOSArNjE5LDcgQEAKIAljdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0uaG5ub2RlLnBwcmV2ID0gTlVMTDsKIAkvKiBEb24ndCBzZXQgdGltZXIgeWV0OiB3YWl0IGZvciBjb25maXJtYXRpb24gKi8KIAlzZXR1cF90aW1lcigmY3QtPnRpbWVvdXQsIGRlYXRoX2J5X3RpbWVvdXQsICh1bnNpZ25lZCBsb25nKWN0KTsKLSNpZmRlZiBDT05GSUdfTkVUX05TCi0JY3QtPmN0X25ldCA9IG5ldDsKLSNlbmRpZgorCXdyaXRlX3BuZXQoJmN0LT5jdF9uZXQsIG5ldCk7CiAjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19aT05FUwogCWlmICh6b25lKSB7CiAJCXN0cnVjdCBuZl9jb25udHJhY2tfem9uZSAqbmZfY3Rfem9uZTsKQEAgLTk2OCw4ICs5NjYsNyBAQAogCQlpZiAoYWNjdCkgewogCQkJc3Bpbl9sb2NrX2JoKCZjdC0+bG9jayk7CiAJCQlhY2N0W0NUSU5GTzJESVIoY3RpbmZvKV0ucGFja2V0cysrOwotCQkJYWNjdFtDVElORk8yRElSKGN0aW5mbyldLmJ5dGVzICs9Ci0JCQkJc2tiLT5sZW4gLSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTsKKwkJCWFjY3RbQ1RJTkZPMkRJUihjdGluZm8pXS5ieXRlcyArPSBza2ItPmxlbjsKIAkJCXNwaW5fdW5sb2NrX2JoKCZjdC0+bG9jayk7CiAJCX0KIAl9CkBAIC0xMTgzLDEwICsxMTgwLDIxIEBACiAJc3Bpbl91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKIH0KIAorc3RhdGljIGludCB1bnRyYWNrX3JlZnModm9pZCkKK3sKKwlpbnQgY250ID0gMCwgY3B1OworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQlzdHJ1Y3QgbmZfY29ubiAqY3QgPSAmcGVyX2NwdShuZl9jb25udHJhY2tfdW50cmFja2VkLCBjcHUpOworCisJCWNudCArPSBhdG9taWNfcmVhZCgmY3QtPmN0X2dlbmVyYWwudXNlKSAtIDE7CisJfQorCXJldHVybiBjbnQ7Cit9CisKIHN0YXRpYyB2b2lkIG5mX2Nvbm50cmFja19jbGVhbnVwX2luaXRfbmV0KHZvaWQpCiB7Ci0JLyogd2FpdCB1bnRpbCBhbGwgcmVmZXJlbmNlcyB0byBuZl9jb25udHJhY2tfdW50cmFja2VkIGFyZSBkcm9wcGVkICovCi0Jd2hpbGUgKGF0b21pY19yZWFkKCZuZl9jb25udHJhY2tfdW50cmFja2VkLmN0X2dlbmVyYWwudXNlKSA+IDEpCisJd2hpbGUgKHVudHJhY2tfcmVmcygpID4gMCkKIAkJc2NoZWR1bGUoKTsKIAogCW5mX2Nvbm50cmFja19oZWxwZXJfZmluaSgpOwpAQCAtMTMyMSwxMCArMTMyOSwxOSBAQAogbW9kdWxlX3BhcmFtX2NhbGwoaGFzaHNpemUsIG5mX2Nvbm50cmFja19zZXRfaGFzaHNpemUsIHBhcmFtX2dldF91aW50LAogCQkgICZuZl9jb25udHJhY2tfaHRhYmxlX3NpemUsIDA2MDApOwogCit2b2lkIG5mX2N0X3VudHJhY2tlZF9zdGF0dXNfb3IodW5zaWduZWQgbG9uZyBiaXRzKQoreworCWludCBjcHU7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQorCQlwZXJfY3B1KG5mX2Nvbm50cmFja191bnRyYWNrZWQsIGNwdSkuc3RhdHVzIHw9IGJpdHM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF91bnRyYWNrZWRfc3RhdHVzX29yKTsKKwogc3RhdGljIGludCBuZl9jb25udHJhY2tfaW5pdF9pbml0X25ldCh2b2lkKQogewogCWludCBtYXhfZmFjdG9yID0gODsKLQlpbnQgcmV0OworCWludCByZXQsIGNwdTsKIAogCS8qIElkZWEgZnJvbSB0Y3AuYzogdXNlIDEvMTYzODQgb2YgbWVtb3J5LiAgT24gaTM4NjogMzJNQgogCSAqIG1hY2hpbmUgaGFzIDUxMiBidWNrZXRzLiA+PSAxR0IgbWFjaGluZXMgaGF2ZSAxNjM4NCBidWNrZXRzLiAqLwpAQCAtMTM2MywxMyArMTM4MCwxMyBAQAogCQlnb3RvIGVycl9leHRlbmQ7CiAjZW5kaWYKIAkvKiBTZXQgdXAgZmFrZSBjb25udHJhY2s6IHRvIG5ldmVyIGJlIGRlbGV0ZWQsIG5vdCBpbiBhbnkgaGFzaGVzICovCi0jaWZkZWYgQ09ORklHX05FVF9OUwotCW5mX2Nvbm50cmFja191bnRyYWNrZWQuY3RfbmV0ID0gJmluaXRfbmV0OwotI2VuZGlmCi0JYXRvbWljX3NldCgmbmZfY29ubnRyYWNrX3VudHJhY2tlZC5jdF9nZW5lcmFsLnVzZSwgMSk7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQlzdHJ1Y3QgbmZfY29ubiAqY3QgPSAmcGVyX2NwdShuZl9jb25udHJhY2tfdW50cmFja2VkLCBjcHUpOworCQl3cml0ZV9wbmV0KCZjdC0+Y3RfbmV0LCAmaW5pdF9uZXQpOworCQlhdG9taWNfc2V0KCZjdC0+Y3RfZ2VuZXJhbC51c2UsIDEpOworCX0KIAkvKiAgLSBhbmQgbG9vayBpdCBsaWtlIGFzIGEgY29uZmlybWVkIGNvbm5lY3Rpb24gKi8KLQlzZXRfYml0KElQU19DT05GSVJNRURfQklULCAmbmZfY29ubnRyYWNrX3VudHJhY2tlZC5zdGF0dXMpOwotCisJbmZfY3RfdW50cmFja2VkX3N0YXR1c19vcihJUFNfQ09ORklSTUVEIHwgSVBTX1VOVFJBQ0tFRCk7CiAJcmV0dXJuIDA7CiAKICNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1pPTkVTCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jCmluZGV4IGZkYzhmYjQuLjdkY2Y3YTQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jCkBAIC0yMyw5ICsyMywxMCBAQAogewogCXVuc2lnbmVkIGludCBpOwogCXN0cnVjdCBuZl9jdF9leHRfdHlwZSAqdDsKKwlzdHJ1Y3QgbmZfY3RfZXh0ICpleHQgPSBjdC0+ZXh0OwogCiAJZm9yIChpID0gMDsgaSA8IE5GX0NUX0VYVF9OVU07IGkrKykgewotCQlpZiAoIW5mX2N0X2V4dF9leGlzdChjdCwgaSkpCisJCWlmICghX19uZl9jdF9leHRfZXhpc3QoZXh0LCBpKSkKIAkJCWNvbnRpbnVlOwogCiAJCXJjdV9yZWFkX2xvY2soKTsKQEAgLTczLDQ0ICs3NCw0NSBAQAogCiB2b2lkICpfX25mX2N0X2V4dF9hZGQoc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIG5mX2N0X2V4dF9pZCBpZCwgZ2ZwX3QgZ2ZwKQogewotCXN0cnVjdCBuZl9jdF9leHQgKm5ldzsKKwlzdHJ1Y3QgbmZfY3RfZXh0ICpvbGQsICpuZXc7CiAJaW50IGksIG5ld2xlbiwgbmV3b2ZmOwogCXN0cnVjdCBuZl9jdF9leHRfdHlwZSAqdDsKIAogCS8qIENvbm50cmFjayBtdXN0IG5vdCBiZSBjb25maXJtZWQgdG8gYXZvaWQgcmFjZXMgb24gcmVhbGxvY2F0aW9uLiAqLwogCU5GX0NUX0FTU0VSVCghbmZfY3RfaXNfY29uZmlybWVkKGN0KSk7CiAKLQlpZiAoIWN0LT5leHQpCisJb2xkID0gY3QtPmV4dDsKKwlpZiAoIW9sZCkKIAkJcmV0dXJuIG5mX2N0X2V4dF9jcmVhdGUoJmN0LT5leHQsIGlkLCBnZnApOwogCi0JaWYgKG5mX2N0X2V4dF9leGlzdChjdCwgaWQpKQorCWlmIChfX25mX2N0X2V4dF9leGlzdChvbGQsIGlkKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJdCA9IHJjdV9kZXJlZmVyZW5jZShuZl9jdF9leHRfdHlwZXNbaWRdKTsKIAlCVUdfT04odCA9PSBOVUxMKTsKIAotCW5ld29mZiA9IEFMSUdOKGN0LT5leHQtPmxlbiwgdC0+YWxpZ24pOworCW5ld29mZiA9IEFMSUdOKG9sZC0+bGVuLCB0LT5hbGlnbik7CiAJbmV3bGVuID0gbmV3b2ZmICsgdC0+bGVuOwogCXJjdV9yZWFkX3VubG9jaygpOwogCi0JbmV3ID0gX19rcmVhbGxvYyhjdC0+ZXh0LCBuZXdsZW4sIGdmcCk7CisJbmV3ID0gX19rcmVhbGxvYyhvbGQsIG5ld2xlbiwgZ2ZwKTsKIAlpZiAoIW5ldykKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAobmV3ICE9IGN0LT5leHQpIHsKKwlpZiAobmV3ICE9IG9sZCkgewogCQlmb3IgKGkgPSAwOyBpIDwgTkZfQ1RfRVhUX05VTTsgaSsrKSB7Ci0JCQlpZiAoIW5mX2N0X2V4dF9leGlzdChjdCwgaSkpCisJCQlpZiAoIV9fbmZfY3RfZXh0X2V4aXN0KG9sZCwgaSkpCiAJCQkJY29udGludWU7CiAKIAkJCXJjdV9yZWFkX2xvY2soKTsKIAkJCXQgPSByY3VfZGVyZWZlcmVuY2UobmZfY3RfZXh0X3R5cGVzW2ldKTsKIAkJCWlmICh0ICYmIHQtPm1vdmUpCiAJCQkJdC0+bW92ZSgodm9pZCAqKW5ldyArIG5ldy0+b2Zmc2V0W2ldLAotCQkJCQkodm9pZCAqKWN0LT5leHQgKyBjdC0+ZXh0LT5vZmZzZXRbaV0pOworCQkJCQkodm9pZCAqKW9sZCArIG9sZC0+b2Zmc2V0W2ldKTsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwogCQl9Ci0JCWNhbGxfcmN1KCZjdC0+ZXh0LT5yY3UsIF9fbmZfY3RfZXh0X2ZyZWVfcmN1KTsKKwkJY2FsbF9yY3UoJm9sZC0+cmN1LCBfX25mX2N0X2V4dF9mcmVlX3JjdSk7CiAJCWN0LT5leHQgPSBuZXc7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCmluZGV4IDZlYWVlN2MuLmI5NjkwMjUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCkBAIC03MzQsMTEgKzczNCwxMSBAQAogCQlpZiAoIWFmaW5mby0+cm91dGUoKHN0cnVjdCBkc3RfZW50cnkgKiopJnJ0MSwgJmZsMSkpIHsKIAkJCWlmICghYWZpbmZvLT5yb3V0ZSgoc3RydWN0IGRzdF9lbnRyeSAqKikmcnQyLCAmZmwyKSkgewogCQkJCWlmIChydDEtPnJ0X2dhdGV3YXkgPT0gcnQyLT5ydF9nYXRld2F5ICYmCi0JCQkJICAgIHJ0MS0+dS5kc3QuZGV2ICA9PSBydDItPnUuZHN0LmRldikKKwkJCQkgICAgcnQxLT5kc3QuZGV2ICA9PSBydDItPmRzdC5kZXYpCiAJCQkJCXJldCA9IDE7Ci0JCQkJZHN0X3JlbGVhc2UoJnJ0Mi0+dS5kc3QpOworCQkJCWRzdF9yZWxlYXNlKCZydDItPmRzdCk7CiAJCQl9Ci0JCQlkc3RfcmVsZWFzZSgmcnQxLT51LmRzdCk7CisJCQlkc3RfcmVsZWFzZSgmcnQxLT5kc3QpOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTc1MywxMSArNzUzLDExIEBACiAJCQlpZiAoIWFmaW5mby0+cm91dGUoKHN0cnVjdCBkc3RfZW50cnkgKiopJnJ0MiwgJmZsMikpIHsKIAkJCQlpZiAoIW1lbWNtcCgmcnQxLT5ydDZpX2dhdGV3YXksICZydDItPnJ0NmlfZ2F0ZXdheSwKIAkJCQkJICAgIHNpemVvZihydDEtPnJ0NmlfZ2F0ZXdheSkpICYmCi0JCQkJICAgIHJ0MS0+dS5kc3QuZGV2ID09IHJ0Mi0+dS5kc3QuZGV2KQorCQkJCSAgICBydDEtPmRzdC5kZXYgPT0gcnQyLT5kc3QuZGV2KQogCQkJCQlyZXQgPSAxOwotCQkJCWRzdF9yZWxlYXNlKCZydDItPnUuZHN0KTsKKwkJCQlkc3RfcmVsZWFzZSgmcnQyLT5kc3QpOwogCQkJfQotCQkJZHN0X3JlbGVhc2UoJnJ0MS0+dS5kc3QpOworCQkJZHN0X3JlbGVhc2UoJnJ0MS0+ZHN0KTsKIAkJfQogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmMKaW5kZXggNDk3YjIyMi4uYWFkZGUwMSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYwpAQCAtNjEsNyArNjEsNyBAQAogCQlnb3RvIG91dDsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KHJ0LT51LmRzdC5kZXYpOworCWluX2RldiA9IF9faW5fZGV2X2dldF9yY3UocnQtPmRzdC5kZXYpOwogCWlmIChpbl9kZXYgIT0gTlVMTCkgewogCQlmb3JfcHJpbWFyeV9pZmEoaW5fZGV2KSB7CiAJCQlpZiAoaWZhLT5pZmFfYnJvYWRjYXN0ID09IGlwaC0+ZGFkZHIpIHsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwppbmRleCBjNDJmZjZhLi41YmFlMWNkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCkBAIC00ODAsNyArNDgwLDcgQEAKIAlpbnQgZXJyOwogCiAJLyogaWdub3JlIG91ciBmYWtlIGNvbm50cmFjayBlbnRyeSAqLwotCWlmIChjdCA9PSAmbmZfY29ubnRyYWNrX3VudHJhY2tlZCkKKwlpZiAobmZfY3RfaXNfdW50cmFja2VkKGN0KSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoZXZlbnRzICYgKDEgPDwgSVBDVF9ERVNUUk9ZKSkgewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwppbmRleCA5ZGQ4Y2Q0Li5jNGM4ODVkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwpAQCAtNTg1LDggKzU4NSwxNiBAQAogCQkJICogTGV0J3MgdHJ5IHRvIHVzZSB0aGUgZGF0YSBmcm9tIHRoZSBwYWNrZXQuCiAJCQkgKi8KIAkJCXNlbmRlci0+dGRfZW5kID0gZW5kOworCQkJd2luIDw8PSBzZW5kZXItPnRkX3NjYWxlOwogCQkJc2VuZGVyLT50ZF9tYXh3aW4gPSAod2luID09IDAgPyAxIDogd2luKTsKIAkJCXNlbmRlci0+dGRfbWF4ZW5kID0gZW5kICsgc2VuZGVyLT50ZF9tYXh3aW47CisJCQkvKgorCQkJICogV2UgaGF2ZW4ndCBzZWVuIHRyYWZmaWMgaW4gdGhlIG90aGVyIGRpcmVjdGlvbiB5ZXQKKwkJCSAqIGJ1dCB3ZSBoYXZlIHRvIHR3ZWFrIHdpbmRvdyB0cmFja2luZyB0byBwYXNzIElJSQorCQkJICogYW5kIElWIHVudGlsIHRoYXQgaGFwcGVucy4KKwkJCSAqLworCQkJaWYgKHJlY2VpdmVyLT50ZF9tYXh3aW4gPT0gMCkKKwkJCQlyZWNlaXZlci0+dGRfZW5kID0gcmVjZWl2ZXItPnRkX21heGVuZCA9IHNhY2s7CiAJCX0KIAl9IGVsc2UgaWYgKCgoc3RhdGUtPnN0YXRlID09IFRDUF9DT05OVFJBQ0tfU1lOX1NFTlQKIAkJICAgICAmJiBkaXIgPT0gSVBfQ1RfRElSX09SSUdJTkFMKQpAQCAtNjgwLDcgKzY4OCw3IEBACiAJCS8qCiAJCSAqIFVwZGF0ZSByZWNlaXZlciBkYXRhLgogCQkgKi8KLQkJaWYgKGFmdGVyKGVuZCwgc2VuZGVyLT50ZF9tYXhlbmQpKQorCQlpZiAocmVjZWl2ZXItPnRkX21heHdpbiAhPSAwICYmIGFmdGVyKGVuZCwgc2VuZGVyLT50ZF9tYXhlbmQpKQogCQkJcmVjZWl2ZXItPnRkX21heHdpbiArPSBlbmQgLSBzZW5kZXItPnRkX21heGVuZDsKIAkJaWYgKGFmdGVyKHNhY2sgKyB3aW4sIHJlY2VpdmVyLT50ZF9tYXhlbmQgLSAxKSkgewogCQkJcmVjZWl2ZXItPnRkX21heGVuZCA9IHNhY2sgKyB3aW47CkBAIC03MzYsMjcgKzc0NCwxOSBAQAogCXJldHVybiByZXM7CiB9CiAKLSNkZWZpbmUJVEhfRklOCTB4MDEKLSNkZWZpbmUJVEhfU1lOCTB4MDIKLSNkZWZpbmUJVEhfUlNUCTB4MDQKLSNkZWZpbmUJVEhfUFVTSAkweDA4Ci0jZGVmaW5lCVRIX0FDSwkweDEwCi0jZGVmaW5lCVRIX1VSRwkweDIwCi0jZGVmaW5lCVRIX0VDRQkweDQwCi0jZGVmaW5lCVRIX0NXUgkweDgwCi0KIC8qIHRhYmxlIG9mIHZhbGlkIGZsYWcgY29tYmluYXRpb25zIC0gUFVTSCwgRUNFIGFuZCBDV1IgYXJlIGFsd2F5cyB2YWxpZCAqLwotc3RhdGljIGNvbnN0IHU4IHRjcF92YWxpZF9mbGFnc1soVEhfRklOfFRIX1NZTnxUSF9SU1R8VEhfQUNLfFRIX1VSRykgKyAxXSA9CitzdGF0aWMgY29uc3QgdTggdGNwX3ZhbGlkX2ZsYWdzWyhUQ1BIRFJfRklOfFRDUEhEUl9TWU58VENQSERSX1JTVHxUQ1BIRFJfQUNLfAorCQkJCSBUQ1BIRFJfVVJHKSArIDFdID0KIHsKLQlbVEhfU1lOXQkJCT0gMSwKLQlbVEhfU1lOfFRIX1VSR10JCQk9IDEsCi0JW1RIX1NZTnxUSF9BQ0tdCQkJPSAxLAotCVtUSF9SU1RdCQkJPSAxLAotCVtUSF9SU1R8VEhfQUNLXQkJCT0gMSwKLQlbVEhfRklOfFRIX0FDS10JCQk9IDEsCi0JW1RIX0ZJTnxUSF9BQ0t8VEhfVVJHXQkJPSAxLAotCVtUSF9BQ0tdCQkJPSAxLAotCVtUSF9BQ0t8VEhfVVJHXQkJCT0gMSwKKwlbVENQSERSX1NZTl0JCQkJPSAxLAorCVtUQ1BIRFJfU1lOfFRDUEhEUl9VUkddCQkJPSAxLAorCVtUQ1BIRFJfU1lOfFRDUEhEUl9BQ0tdCQkJPSAxLAorCVtUQ1BIRFJfUlNUXQkJCQk9IDEsCisJW1RDUEhEUl9SU1R8VENQSERSX0FDS10JCQk9IDEsCisJW1RDUEhEUl9GSU58VENQSERSX0FDS10JCQk9IDEsCisJW1RDUEhEUl9GSU58VENQSERSX0FDS3xUQ1BIRFJfVVJHXQk9IDEsCisJW1RDUEhEUl9BQ0tdCQkJCT0gMSwKKwlbVENQSERSX0FDS3xUQ1BIRFJfVVJHXQkJCT0gMSwKIH07CiAKIC8qIFByb3RlY3QgY29ubnRyYWNrIGFnYWlzdCBicm9rZW4gcGFja2V0cy4gQ29kZSB0YWtlbiBmcm9tIGlwdF91bmNsZWFuLmMuICAqLwpAQCAtODAzLDcgKzgwMyw3IEBACiAJfQogCiAJLyogQ2hlY2sgVENQIGZsYWdzLiAqLwotCXRjcGZsYWdzID0gKCgodV9pbnQ4X3QgKil0aClbMTNdICYgfihUSF9FQ0V8VEhfQ1dSfFRIX1BVU0gpKTsKKwl0Y3BmbGFncyA9ICh0Y3BfZmxhZ19ieXRlKHRoKSAmIH4oVENQSERSX0VDRXxUQ1BIRFJfQ1dSfFRDUEhEUl9QU0gpKTsKIAlpZiAoIXRjcF92YWxpZF9mbGFnc1t0Y3BmbGFnc10pIHsKIAkJaWYgKExPR19JTlZBTElEKG5ldCwgSVBQUk9UT19UQ1ApKQogCQkJbmZfbG9nX3BhY2tldChwZiwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYwppbmRleCBmYzlhMjExLi42YTE1NzJiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYwpAQCAtNjYsOSArNjYsMTAgQEAKIAl1X2ludDE2X3QgZ3JvdXBfbnVtOwkJLyogbnVtYmVyIG9mIHRoaXMgcXVldWUgKi8KIAl1X2ludDE2X3QgZmxhZ3M7CiAJdV9pbnQ4X3QgY29weV9tb2RlOworCXN0cnVjdCByY3VfaGVhZCByY3U7CiB9OwogCi1zdGF0aWMgREVGSU5FX1JXTE9DSyhpbnN0YW5jZXNfbG9jayk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGluc3RhbmNlc19sb2NrKTsKIHN0YXRpYyBhdG9taWNfdCBnbG9iYWxfc2VxOwogCiAjZGVmaW5lIElOU1RBTkNFX0JVQ0tFVFMJMTYKQEAgLTg4LDcgKzg5LDcgQEAKIAlzdHJ1Y3QgbmZ1bG5sX2luc3RhbmNlICppbnN0OwogCiAJaGVhZCA9ICZpbnN0YW5jZV90YWJsZVtpbnN0YW5jZV9oYXNoZm4oZ3JvdXBfbnVtKV07Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnkoaW5zdCwgcG9zLCBoZWFkLCBobGlzdCkgeworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpbnN0LCBwb3MsIGhlYWQsIGhsaXN0KSB7CiAJCWlmIChpbnN0LT5ncm91cF9udW0gPT0gZ3JvdXBfbnVtKQogCQkJcmV0dXJuIGluc3Q7CiAJfQpAQCAtMTA2LDIyICsxMDcsMjYgQEAKIHsKIAlzdHJ1Y3QgbmZ1bG5sX2luc3RhbmNlICppbnN0OwogCi0JcmVhZF9sb2NrX2JoKCZpbnN0YW5jZXNfbG9jayk7CisJcmN1X3JlYWRfbG9ja19iaCgpOwogCWluc3QgPSBfX2luc3RhbmNlX2xvb2t1cChncm91cF9udW0pOwotCWlmIChpbnN0KQotCQlpbnN0YW5jZV9nZXQoaW5zdCk7Ci0JcmVhZF91bmxvY2tfYmgoJmluc3RhbmNlc19sb2NrKTsKKwlpZiAoaW5zdCAmJiAhYXRvbWljX2luY19ub3RfemVybygmaW5zdC0+dXNlKSkKKwkJaW5zdCA9IE5VTEw7CisJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiAKIAlyZXR1cm4gaW5zdDsKIH0KIAorc3RhdGljIHZvaWQgbmZ1bG5sX2luc3RhbmNlX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlrZnJlZShjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IG5mdWxubF9pbnN0YW5jZSwgcmN1KSk7CisJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7Cit9CisKIHN0YXRpYyB2b2lkCiBpbnN0YW5jZV9wdXQoc3RydWN0IG5mdWxubF9pbnN0YW5jZSAqaW5zdCkKIHsKLQlpZiAoaW5zdCAmJiBhdG9taWNfZGVjX2FuZF90ZXN0KCZpbnN0LT51c2UpKSB7Ci0JCWtmcmVlKGluc3QpOwotCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKLQl9CisJaWYgKGluc3QgJiYgYXRvbWljX2RlY19hbmRfdGVzdCgmaW5zdC0+dXNlKSkKKwkJY2FsbF9yY3VfYmgoJmluc3QtPnJjdSwgbmZ1bG5sX2luc3RhbmNlX2ZyZWVfcmN1KTsKIH0KIAogc3RhdGljIHZvaWQgbmZ1bG5sX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7CkBAIC0xMzIsNyArMTM3LDcgQEAKIAlzdHJ1Y3QgbmZ1bG5sX2luc3RhbmNlICppbnN0OwogCWludCBlcnI7CiAKLQl3cml0ZV9sb2NrX2JoKCZpbnN0YW5jZXNfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZpbnN0YW5jZXNfbG9jayk7CiAJaWYgKF9faW5zdGFuY2VfbG9va3VwKGdyb3VwX251bSkpIHsKIAkJZXJyID0gLUVFWElTVDsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtMTY2LDMyICsxNzEsMzcgQEAKIAlpbnN0LT5jb3B5X21vZGUgCT0gTkZVTE5MX0NPUFlfUEFDS0VUOwogCWluc3QtPmNvcHlfcmFuZ2UgCT0gTkZVTE5MX0NPUFlfUkFOR0VfTUFYOwogCi0JaGxpc3RfYWRkX2hlYWQoJmluc3QtPmhsaXN0LAorCWhsaXN0X2FkZF9oZWFkX3JjdSgmaW5zdC0+aGxpc3QsCiAJCSAgICAgICAmaW5zdGFuY2VfdGFibGVbaW5zdGFuY2VfaGFzaGZuKGdyb3VwX251bSldKTsKIAotCXdyaXRlX3VubG9ja19iaCgmaW5zdGFuY2VzX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZpbnN0YW5jZXNfbG9jayk7CiAKIAlyZXR1cm4gaW5zdDsKIAogb3V0X3VubG9jazoKLQl3cml0ZV91bmxvY2tfYmgoJmluc3RhbmNlc19sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmaW5zdGFuY2VzX2xvY2spOwogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fbmZ1bG5sX2ZsdXNoKHN0cnVjdCBuZnVsbmxfaW5zdGFuY2UgKmluc3QpOwogCisvKiBjYWxsZWQgd2l0aCBCSCBkaXNhYmxlZCAqLwogc3RhdGljIHZvaWQKIF9faW5zdGFuY2VfZGVzdHJveShzdHJ1Y3QgbmZ1bG5sX2luc3RhbmNlICppbnN0KQogewogCS8qIGZpcnN0IHB1bGwgaXQgb3V0IG9mIHRoZSBnbG9iYWwgbGlzdCAqLwotCWhsaXN0X2RlbCgmaW5zdC0+aGxpc3QpOworCWhsaXN0X2RlbF9yY3UoJmluc3QtPmhsaXN0KTsKIAogCS8qIHRoZW4gZmx1c2ggYWxsIHBlbmRpbmcgcGFja2V0cyBmcm9tIHNrYiAqLwogCi0Jc3Bpbl9sb2NrX2JoKCZpbnN0LT5sb2NrKTsKKwlzcGluX2xvY2soJmluc3QtPmxvY2spOworCisJLyogbG9ja2xlc3MgcmVhZGVycyB3b250IGJlIGFibGUgdG8gdXNlIHVzICovCisJaW5zdC0+Y29weV9tb2RlID0gTkZVTE5MX0NPUFlfRElTQUJMRUQ7CisKIAlpZiAoaW5zdC0+c2tiKQogCQlfX25mdWxubF9mbHVzaChpbnN0KTsKLQlzcGluX3VubG9ja19iaCgmaW5zdC0+bG9jayk7CisJc3Bpbl91bmxvY2soJmluc3QtPmxvY2spOwogCiAJLyogYW5kIGZpbmFsbHkgcHV0IHRoZSByZWZjb3VudCAqLwogCWluc3RhbmNlX3B1dChpbnN0KTsKQEAgLTIwMCw5ICsyMTAsOSBAQAogc3RhdGljIGlubGluZSB2b2lkCiBpbnN0YW5jZV9kZXN0cm95KHN0cnVjdCBuZnVsbmxfaW5zdGFuY2UgKmluc3QpCiB7Ci0Jd3JpdGVfbG9ja19iaCgmaW5zdGFuY2VzX2xvY2spOworCXNwaW5fbG9ja19iaCgmaW5zdGFuY2VzX2xvY2spOwogCV9faW5zdGFuY2VfZGVzdHJveShpbnN0KTsKLQl3cml0ZV91bmxvY2tfYmgoJmluc3RhbmNlc19sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmaW5zdGFuY2VzX2xvY2spOwogfQogCiBzdGF0aWMgaW50CkBAIC00MDMsOCArNDEzLDkgQEAKIAkJCU5MQV9QVVRfQkUzMihpbnN0LT5za2IsIE5GVUxBX0lGSU5ERVhfUEhZU0lOREVWLAogCQkJCSAgICAgaHRvbmwoaW5kZXYtPmlmaW5kZXgpKTsKIAkJCS8qIHRoaXMgaXMgdGhlIGJyaWRnZSBncm91cCAiYnJYIiAqLworCQkJLyogcmN1X3JlYWRfbG9jaygpZWQgYnkgbmZfaG9va19zbG93IG9yIG5mX2xvZ19wYWNrZXQgKi8KIAkJCU5MQV9QVVRfQkUzMihpbnN0LT5za2IsIE5GVUxBX0lGSU5ERVhfSU5ERVYsCi0JCQkJICAgICBodG9ubChpbmRldi0+YnJfcG9ydC0+YnItPmRldi0+aWZpbmRleCkpOworCQkJCSAgICAgaHRvbmwoYnJfcG9ydF9nZXRfcmN1KGluZGV2KS0+YnItPmRldi0+aWZpbmRleCkpOwogCQl9IGVsc2UgewogCQkJLyogQ2FzZSAyOiBpbmRldiBpcyBicmlkZ2UgZ3JvdXAsIHdlIG5lZWQgdG8gbG9vayBmb3IKIAkJCSAqIHBoeXNpY2FsIGRldmljZSAod2hlbiBjYWxsZWQgZnJvbSBpcHY0KSAqLwpAQCAtNDMwLDggKzQ0MSw5IEBACiAJCQlOTEFfUFVUX0JFMzIoaW5zdC0+c2tiLCBORlVMQV9JRklOREVYX1BIWVNPVVRERVYsCiAJCQkJICAgICBodG9ubChvdXRkZXYtPmlmaW5kZXgpKTsKIAkJCS8qIHRoaXMgaXMgdGhlIGJyaWRnZSBncm91cCAiYnJYIiAqLworCQkJLyogcmN1X3JlYWRfbG9jaygpZWQgYnkgbmZfaG9va19zbG93IG9yIG5mX2xvZ19wYWNrZXQgKi8KIAkJCU5MQV9QVVRfQkUzMihpbnN0LT5za2IsIE5GVUxBX0lGSU5ERVhfT1VUREVWLAotCQkJCSAgICAgaHRvbmwob3V0ZGV2LT5icl9wb3J0LT5ici0+ZGV2LT5pZmluZGV4KSk7CisJCQkJICAgICBodG9ubChicl9wb3J0X2dldF9yY3Uob3V0ZGV2KS0+YnItPmRldi0+aWZpbmRleCkpOwogCQl9IGVsc2UgewogCQkJLyogQ2FzZSAyOiBpbmRldiBpcyBhIGJyaWRnZSBncm91cCwgd2UgbmVlZCB0byBsb29rCiAJCQkgKiBmb3IgcGh5c2ljYWwgZGV2aWNlICh3aGVuIGNhbGxlZCBmcm9tIGlwdjQpICovCkBAIC02MTksNiArNjMxLDcgQEAKIAkJc2l6ZSArPSBubGFfdG90YWxfc2l6ZShkYXRhX2xlbik7CiAJCWJyZWFrOwogCisJY2FzZSBORlVMTkxfQ09QWV9ESVNBQkxFRDoKIAlkZWZhdWx0OgogCQlnb3RvIHVubG9ja19hbmRfcmVsZWFzZTsKIAl9CkBAIC02NzIsNyArNjg1LDcgQEAKIAkJaW50IGk7CiAKIAkJLyogZGVzdHJveSBhbGwgaW5zdGFuY2VzIGZvciB0aGlzIHBpZCAqLwotCQl3cml0ZV9sb2NrX2JoKCZpbnN0YW5jZXNfbG9jayk7CisJCXNwaW5fbG9ja19iaCgmaW5zdGFuY2VzX2xvY2spOwogCQlmb3IgIChpID0gMDsgaSA8IElOU1RBTkNFX0JVQ0tFVFM7IGkrKykgewogCQkJc3RydWN0IGhsaXN0X25vZGUgKnRtcCwgKnQyOwogCQkJc3RydWN0IG5mdWxubF9pbnN0YW5jZSAqaW5zdDsKQEAgLTY4NCw3ICs2OTcsNyBAQAogCQkJCQlfX2luc3RhbmNlX2Rlc3Ryb3koaW5zdCk7CiAJCQl9CiAJCX0KLQkJd3JpdGVfdW5sb2NrX2JoKCZpbnN0YW5jZXNfbG9jayk7CisJCXNwaW5fdW5sb2NrX2JoKCZpbnN0YW5jZXNfbG9jayk7CiAJfQogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KQEAgLTg2MSwxOSArODc0LDE5IEBACiAKIAlmb3IgKHN0LT5idWNrZXQgPSAwOyBzdC0+YnVja2V0IDwgSU5TVEFOQ0VfQlVDS0VUUzsgc3QtPmJ1Y2tldCsrKSB7CiAJCWlmICghaGxpc3RfZW1wdHkoJmluc3RhbmNlX3RhYmxlW3N0LT5idWNrZXRdKSkKLQkJCXJldHVybiBpbnN0YW5jZV90YWJsZVtzdC0+YnVja2V0XS5maXJzdDsKKwkJCXJldHVybiByY3VfZGVyZWZlcmVuY2VfYmgoaW5zdGFuY2VfdGFibGVbc3QtPmJ1Y2tldF0uZmlyc3QpOwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHN0cnVjdCBobGlzdF9ub2RlICpnZXRfbmV4dChzdHJ1Y3QgaXRlcl9zdGF0ZSAqc3QsIHN0cnVjdCBobGlzdF9ub2RlICpoKQogewotCWggPSBoLT5uZXh0OworCWggPSByY3VfZGVyZWZlcmVuY2VfYmgoaC0+bmV4dCk7CiAJd2hpbGUgKCFoKSB7CiAJCWlmICgrK3N0LT5idWNrZXQgPj0gSU5TVEFOQ0VfQlVDS0VUUykKIAkJCXJldHVybiBOVUxMOwogCi0JCWggPSBpbnN0YW5jZV90YWJsZVtzdC0+YnVja2V0XS5maXJzdDsKKwkJaCA9IHJjdV9kZXJlZmVyZW5jZV9iaChpbnN0YW5jZV90YWJsZVtzdC0+YnVja2V0XS5maXJzdCk7CiAJfQogCXJldHVybiBoOwogfQpAQCAtODkwLDkgKzkwMyw5IEBACiB9CiAKIHN0YXRpYyB2b2lkICpzZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQotCV9fYWNxdWlyZXMoaW5zdGFuY2VzX2xvY2spCisJX19hY3F1aXJlcyhyY3VfYmgpCiB7Ci0JcmVhZF9sb2NrX2JoKCZpbnN0YW5jZXNfbG9jayk7CisJcmN1X3JlYWRfbG9ja19iaCgpOwogCXJldHVybiBnZXRfaWR4KHNlcS0+cHJpdmF0ZSwgKnBvcyk7CiB9CiAKQEAgLTkwMyw5ICs5MTYsOSBAQAogfQogCiBzdGF0aWMgdm9pZCBzZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCi0JX19yZWxlYXNlcyhpbnN0YW5jZXNfbG9jaykKKwlfX3JlbGVhc2VzKHJjdV9iaCkKIHsKLQlyZWFkX3VubG9ja19iaCgmaW5zdGFuY2VzX2xvY2spOworCXJjdV9yZWFkX3VubG9ja19iaCgpOwogfQogCiBzdGF0aWMgaW50IHNlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jCmluZGV4IDEyZTFhYjMuLjY4ZTY3ZDEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYwpAQCAtNDYsMTcgKzQ2LDE5IEBACiAJaW50IHBlZXJfcGlkOwogCXVuc2lnbmVkIGludCBxdWV1ZV9tYXhsZW47CiAJdW5zaWduZWQgaW50IGNvcHlfcmFuZ2U7Ci0JdW5zaWduZWQgaW50IHF1ZXVlX3RvdGFsOwogCXVuc2lnbmVkIGludCBxdWV1ZV9kcm9wcGVkOwogCXVuc2lnbmVkIGludCBxdWV1ZV91c2VyX2Ryb3BwZWQ7CiAKLQl1bnNpZ25lZCBpbnQgaWRfc2VxdWVuY2U7CQkvKiAnc2VxdWVuY2UnIG9mIHBrdCBpZHMgKi8KIAogCXVfaW50MTZfdCBxdWV1ZV9udW07CQkJLyogbnVtYmVyIG9mIHRoaXMgcXVldWUgKi8KIAl1X2ludDhfdCBjb3B5X21vZGU7Ci0KLQlzcGlubG9ja190IGxvY2s7Ci0KKy8qCisgKiBGb2xsb3dpbmcgZmllbGRzIGFyZSBkaXJ0aWVkIGZvciBlYWNoIHF1ZXVlZCBwYWNrZXQsCisgKiBrZWVwIHRoZW0gaW4gc2FtZSBjYWNoZSBsaW5lIGlmIHBvc3NpYmxlLgorICovCisJc3BpbmxvY2tfdAlsb2NrOworCXVuc2lnbmVkIGludAlxdWV1ZV90b3RhbDsKKwlhdG9taWNfdAlpZF9zZXF1ZW5jZTsJCS8qICdzZXF1ZW5jZScgb2YgcGt0IGlkcyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgcXVldWVfbGlzdDsJCS8qIHBhY2tldHMgaW4gcXVldWUgKi8KIH07CiAKQEAgLTIzOCwzMiArMjQwLDI0IEBACiAKIAlvdXRkZXYgPSBlbnRyeS0+b3V0ZGV2OwogCi0Jc3Bpbl9sb2NrX2JoKCZxdWV1ZS0+bG9jayk7Ci0KLQlzd2l0Y2ggKChlbnVtIG5mcW5sX2NvbmZpZ19tb2RlKXF1ZXVlLT5jb3B5X21vZGUpIHsKKwlzd2l0Y2ggKChlbnVtIG5mcW5sX2NvbmZpZ19tb2RlKUFDQ0VTU19PTkNFKHF1ZXVlLT5jb3B5X21vZGUpKSB7CiAJY2FzZSBORlFOTF9DT1BZX01FVEE6CiAJY2FzZSBORlFOTF9DT1BZX05PTkU6CiAJCWJyZWFrOwogCiAJY2FzZSBORlFOTF9DT1BZX1BBQ0tFVDoKIAkJaWYgKGVudHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgJiYKLQkJICAgIHNrYl9jaGVja3N1bV9oZWxwKGVudHNrYikpIHsKLQkJCXNwaW5fdW5sb2NrX2JoKCZxdWV1ZS0+bG9jayk7CisJCSAgICBza2JfY2hlY2tzdW1faGVscChlbnRza2IpKQogCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJaWYgKHF1ZXVlLT5jb3B5X3JhbmdlID09IDAKLQkJICAgIHx8IHF1ZXVlLT5jb3B5X3JhbmdlID4gZW50c2tiLT5sZW4pCisKKwkJZGF0YV9sZW4gPSBBQ0NFU1NfT05DRShxdWV1ZS0+Y29weV9yYW5nZSk7CisJCWlmIChkYXRhX2xlbiA9PSAwIHx8IGRhdGFfbGVuID4gZW50c2tiLT5sZW4pCiAJCQlkYXRhX2xlbiA9IGVudHNrYi0+bGVuOwotCQllbHNlCi0JCQlkYXRhX2xlbiA9IHF1ZXVlLT5jb3B5X3JhbmdlOwogCiAJCXNpemUgKz0gbmxhX3RvdGFsX3NpemUoZGF0YV9sZW4pOwogCQlicmVhazsKIAl9CiAKLQllbnRyeS0+aWQgPSBxdWV1ZS0+aWRfc2VxdWVuY2UrKzsKLQotCXNwaW5fdW5sb2NrX2JoKCZxdWV1ZS0+bG9jayk7CiAKIAlza2IgPSBhbGxvY19za2Ioc2l6ZSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpCkBAIC0yNzgsNiArMjcyLDcgQEAKIAluZm1zZy0+dmVyc2lvbiA9IE5GTkVUTElOS19WMDsKIAluZm1zZy0+cmVzX2lkID0gaHRvbnMocXVldWUtPnF1ZXVlX251bSk7CiAKKwllbnRyeS0+aWQgPSBhdG9taWNfaW5jX3JldHVybigmcXVldWUtPmlkX3NlcXVlbmNlKTsKIAlwbXNnLnBhY2tldF9pZCAJCT0gaHRvbmwoZW50cnktPmlkKTsKIAlwbXNnLmh3X3Byb3RvY29sCT0gZW50c2tiLT5wcm90b2NvbDsKIAlwbXNnLmhvb2sJCT0gZW50cnktPmhvb2s7CkBAIC0yOTYsOCArMjkxLDkgQEAKIAkJCU5MQV9QVVRfQkUzMihza2IsIE5GUUFfSUZJTkRFWF9QSFlTSU5ERVYsCiAJCQkJICAgICBodG9ubChpbmRldi0+aWZpbmRleCkpOwogCQkJLyogdGhpcyBpcyB0aGUgYnJpZGdlIGdyb3VwICJiclgiICovCisJCQkvKiByY3VfcmVhZF9sb2NrKCllZCBieSBfX25mX3F1ZXVlICovCiAJCQlOTEFfUFVUX0JFMzIoc2tiLCBORlFBX0lGSU5ERVhfSU5ERVYsCi0JCQkJICAgICBodG9ubChpbmRldi0+YnJfcG9ydC0+YnItPmRldi0+aWZpbmRleCkpOworCQkJCSAgICAgaHRvbmwoYnJfcG9ydF9nZXRfcmN1KGluZGV2KS0+YnItPmRldi0+aWZpbmRleCkpOwogCQl9IGVsc2UgewogCQkJLyogQ2FzZSAyOiBpbmRldiBpcyBicmlkZ2UgZ3JvdXAsIHdlIG5lZWQgdG8gbG9vayBmb3IKIAkJCSAqIHBoeXNpY2FsIGRldmljZSAod2hlbiBjYWxsZWQgZnJvbSBpcHY0KSAqLwpAQCAtMzIxLDggKzMxNyw5IEBACiAJCQlOTEFfUFVUX0JFMzIoc2tiLCBORlFBX0lGSU5ERVhfUEhZU09VVERFViwKIAkJCQkgICAgIGh0b25sKG91dGRldi0+aWZpbmRleCkpOwogCQkJLyogdGhpcyBpcyB0aGUgYnJpZGdlIGdyb3VwICJiclgiICovCisJCQkvKiByY3VfcmVhZF9sb2NrKCllZCBieSBfX25mX3F1ZXVlICovCiAJCQlOTEFfUFVUX0JFMzIoc2tiLCBORlFBX0lGSU5ERVhfT1VUREVWLAotCQkJCSAgICAgaHRvbmwob3V0ZGV2LT5icl9wb3J0LT5ici0+ZGV2LT5pZmluZGV4KSk7CisJCQkJICAgICBodG9ubChicl9wb3J0X2dldF9yY3Uob3V0ZGV2KS0+YnItPmRldi0+aWZpbmRleCkpOwogCQl9IGVsc2UgewogCQkJLyogQ2FzZSAyOiBvdXRkZXYgaXMgYnJpZGdlIGdyb3VwLCB3ZSBuZWVkIHRvIGxvb2sgZm9yCiAJCQkgKiBwaHlzaWNhbCBvdXRwdXQgZGV2aWNlICh3aGVuIGNhbGxlZCBmcm9tIGlwdjQpICovCkBAIC04NjYsNyArODYzLDcgQEAKIAkJCSAgaW5zdC0+cGVlcl9waWQsIGluc3QtPnF1ZXVlX3RvdGFsLAogCQkJICBpbnN0LT5jb3B5X21vZGUsIGluc3QtPmNvcHlfcmFuZ2UsCiAJCQkgIGluc3QtPnF1ZXVlX2Ryb3BwZWQsIGluc3QtPnF1ZXVlX3VzZXJfZHJvcHBlZCwKLQkJCSAgaW5zdC0+aWRfc2VxdWVuY2UsIDEpOworCQkJICBhdG9taWNfcmVhZCgmaW5zdC0+aWRfc2VxdWVuY2UpLCAxKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBuZnFubF9zZXFfb3BzID0gewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9DSEVDS1NVTS5jIGIvbmV0L25ldGZpbHRlci94dF9DSEVDS1NVTS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNjQyZWYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0NIRUNLU1VNLmMKQEAgLTAsMCArMSw3MCBAQAorLyogaXB0YWJsZXMgbW9kdWxlIGZvciB0aGUgcGFja2V0IGNoZWNrc3VtIG1hbmdsaW5nCisgKgorICogKEMpIDIwMDIgYnkgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+CisgKiAoQykgMjAxMCBSZWQgSGF0LCBJbmMuCisgKgorICogQXV0aG9yOiBNaWNoYWVsIFMuIFRzaXJraW4gPG1zdEByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X0NIRUNLU1VNLmg+CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1pY2hhZWwgUy4gVHNpcmtpbiA8bXN0QHJlZGhhdC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IGNoZWNrc3VtIG1vZGlmaWNhdGlvbiIpOworTU9EVUxFX0FMSUFTKCJpcHRfQ0hFQ0tTVU0iKTsKK01PRFVMRV9BTElBUygiaXA2dF9DSEVDS1NVTSIpOworCitzdGF0aWMgdW5zaWduZWQgaW50CitjaGVja3N1bV90ZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCit7CisJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpCisJCXNrYl9jaGVja3N1bV9oZWxwKHNrYik7CisKKwlyZXR1cm4gWFRfQ09OVElOVUU7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tzdW1fdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCit7CisJY29uc3Qgc3RydWN0IHh0X0NIRUNLU1VNX2luZm8gKmVpbmZvID0gcGFyLT50YXJnaW5mbzsKKworCWlmIChlaW5mby0+b3BlcmF0aW9uICYgflhUX0NIRUNLU1VNX09QX0ZJTEwpIHsKKwkJcHJfaW5mbygidW5zdXBwb3J0ZWQgQ0hFQ0tTVU0gb3BlcmF0aW9uICV4XG4iLCBlaW5mby0+b3BlcmF0aW9uKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICghZWluZm8tPm9wZXJhdGlvbikgeworCQlwcl9pbmZvKCJubyBDSEVDS1NVTSBvcGVyYXRpb24gZW5hYmxlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB4dF90YXJnZXQgY2hlY2tzdW1fdGdfcmVnIF9fcmVhZF9tb3N0bHkgPSB7CisJLm5hbWUJCT0gIkNIRUNLU1VNIiwKKwkuZmFtaWx5CQk9IE5GUFJPVE9fVU5TUEVDLAorCS50YXJnZXQJCT0gY2hlY2tzdW1fdGcsCisJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X0NIRUNLU1VNX2luZm8pLAorCS50YWJsZQkJPSAibWFuZ2xlIiwKKwkuY2hlY2tlbnRyeQk9IGNoZWNrc3VtX3RnX2NoZWNrLAorCS5tZQkJPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGNoZWNrc3VtX3RnX2luaXQodm9pZCkKK3sKKwlyZXR1cm4geHRfcmVnaXN0ZXJfdGFyZ2V0KCZjaGVja3N1bV90Z19yZWcpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY2hlY2tzdW1fdGdfZXhpdCh2b2lkKQoreworCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZjaGVja3N1bV90Z19yZWcpOworfQorCittb2R1bGVfaW5pdChjaGVja3N1bV90Z19pbml0KTsKK21vZHVsZV9leGl0KGNoZWNrc3VtX3RnX2V4aXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9DVC5jIGIvbmV0L25ldGZpbHRlci94dF9DVC5jCmluZGV4IDU2MmJmMzIuLjBjYjYwNTMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfQ1QuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0NULmMKQEAgLTY3LDcgKzY3LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoaW5mby0+ZmxhZ3MgJiBYVF9DVF9OT1RSQUNLKSB7Ci0JCWN0ID0gJm5mX2Nvbm50cmFja191bnRyYWNrZWQ7CisJCWN0ID0gbmZfY3RfdW50cmFja2VkX2dldCgpOwogCQlhdG9taWNfaW5jKCZjdC0+Y3RfZ2VuZXJhbC51c2UpOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xMzIsNyArMTMyLDcgQEAKIAlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBpbmZvLT5jdDsKIAlzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwOwogCi0JaWYgKGN0ICE9ICZuZl9jb25udHJhY2tfdW50cmFja2VkKSB7CisJaWYgKCFuZl9jdF9pc191bnRyYWNrZWQoY3QpKSB7CiAJCWhlbHAgPSBuZmN0X2hlbHAoY3QpOwogCQlpZiAoaGVscCkKIAkJCW1vZHVsZV9wdXQoaGVscC0+aGVscGVyLT5tZSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jIGIvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTFmMjJlCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYwpAQCAtMCwwICsxLDMxNSBAQAorLyoKKyAqIGxpbnV4L25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMKKyAqCisgKiBOZXRmaWx0ZXIgbW9kdWxlIHRvIHRyaWdnZXIgYSB0aW1lciB3aGVuIHBhY2tldCBtYXRjaGVzLgorICogQWZ0ZXIgdGltZXIgZXhwaXJlcyBhIGtldmVudCB3aWxsIGJlIHNlbnQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKiBXcml0dGVuIGJ5IFRpbW8gVGVyYXMgPGV4dC10aW1vLnRlcmFzQG5va2lhLmNvbT4KKyAqCisgKiBDb252ZXJ0ZWQgdG8geF90YWJsZXMgYW5kIHJld29ya2VkIGZvciB1cHN0cmVhbSBpbmNsdXNpb24KKyAqIGJ5IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmg+CisjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CisjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisKK3N0cnVjdCBpZGxldGltZXJfdGdfYXR0ciB7CisJc3RydWN0IGF0dHJpYnV0ZSBhdHRyOworCXNzaXplX3QJKCpzaG93KShzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCXN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7Cit9OworCitzdHJ1Y3QgaWRsZXRpbWVyX3RnIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCisJc3RydWN0IGtvYmplY3QgKmtvYmo7CisJc3RydWN0IGlkbGV0aW1lcl90Z19hdHRyIGF0dHI7CisKKwl1bnNpZ25lZCBpbnQgcmVmY250OworfTsKKworc3RhdGljIExJU1RfSEVBRChpZGxldGltZXJfdGdfbGlzdCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGxpc3RfbXV0ZXgpOworCitzdGF0aWMgc3RydWN0IGtvYmplY3QgKmlkbGV0aW1lcl90Z19rb2JqOworCitzdGF0aWMKK3N0cnVjdCBpZGxldGltZXJfdGcgKl9faWRsZXRpbWVyX3RnX2ZpbmRfYnlfbGFiZWwoY29uc3QgY2hhciAqbGFiZWwpCit7CisJc3RydWN0IGlkbGV0aW1lcl90ZyAqZW50cnk7CisKKwlCVUdfT04oIWxhYmVsKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZpZGxldGltZXJfdGdfbGlzdCwgZW50cnkpIHsKKwkJaWYgKCFzdHJjbXAobGFiZWwsIGVudHJ5LT5hdHRyLmF0dHIubmFtZSkpCisJCQlyZXR1cm4gZW50cnk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGlkbGV0aW1lcl90Z19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCQkJCSBjaGFyICpidWYpCit7CisJc3RydWN0IGlkbGV0aW1lcl90ZyAqdGltZXI7CisJdW5zaWduZWQgbG9uZyBleHBpcmVzID0gMDsKKworCW11dGV4X2xvY2soJmxpc3RfbXV0ZXgpOworCisJdGltZXIgPQlfX2lkbGV0aW1lcl90Z19maW5kX2J5X2xhYmVsKGF0dHItPm5hbWUpOworCWlmICh0aW1lcikKKwkJZXhwaXJlcyA9IHRpbWVyLT50aW1lci5leHBpcmVzOworCisJbXV0ZXhfdW5sb2NrKCZsaXN0X211dGV4KTsKKworCWlmICh0aW1lX2FmdGVyKGV4cGlyZXMsIGppZmZpZXMpKQorCQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwKKwkJCSAgICAgICBqaWZmaWVzX3RvX21zZWNzKGV4cGlyZXMgLSBqaWZmaWVzKSAvIDEwMDApOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiMFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaWRsZXRpbWVyX3RnICp0aW1lciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWRsZXRpbWVyX3RnLAorCQkJCQkJICB3b3JrKTsKKworCXN5c2ZzX25vdGlmeShpZGxldGltZXJfdGdfa29iaiwgTlVMTCwgdGltZXItPmF0dHIuYXR0ci5uYW1lKTsKK30KKworc3RhdGljIHZvaWQgaWRsZXRpbWVyX3RnX2V4cGlyZWQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpZGxldGltZXJfdGcgKnRpbWVyID0gKHN0cnVjdCBpZGxldGltZXJfdGcgKikgZGF0YTsKKworCXByX2RlYnVnKCJ0aW1lciAlcyBleHBpcmVkXG4iLCB0aW1lci0+YXR0ci5hdHRyLm5hbWUpOworCisJc2NoZWR1bGVfd29yaygmdGltZXItPndvcmspOworfQorCitzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGUoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvKQoreworCWludCByZXQ7CisKKwlpbmZvLT50aW1lciA9IGttYWxsb2Moc2l6ZW9mKCppbmZvLT50aW1lciksIEdGUF9LRVJORUwpOworCWlmICghaW5mby0+dGltZXIpIHsKKwkJcHJfZGVidWcoImNvdWxkbid0IGFsbG9jIHRpbWVyXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJaW5mby0+dGltZXItPmF0dHIuYXR0ci5uYW1lID0ga3N0cmR1cChpbmZvLT5sYWJlbCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvLT50aW1lci0+YXR0ci5hdHRyLm5hbWUpIHsKKwkJcHJfZGVidWcoImNvdWxkbid0IGFsbG9jIGF0dHJpYnV0ZSBuYW1lXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZV90aW1lcjsKKwl9CisJaW5mby0+dGltZXItPmF0dHIuYXR0ci5tb2RlID0gU19JUlVHTzsKKwlpbmZvLT50aW1lci0+YXR0ci5zaG93ID0gaWRsZXRpbWVyX3RnX3Nob3c7CisKKwlyZXQgPSBzeXNmc19jcmVhdGVfZmlsZShpZGxldGltZXJfdGdfa29iaiwgJmluZm8tPnRpbWVyLT5hdHRyLmF0dHIpOworCWlmIChyZXQgPCAwKSB7CisJCXByX2RlYnVnKCJjb3VsZG4ndCBhZGQgZmlsZSB0byBzeXNmcyIpOworCQlnb3RvIG91dF9mcmVlX2F0dHI7CisJfQorCisJbGlzdF9hZGQoJmluZm8tPnRpbWVyLT5lbnRyeSwgJmlkbGV0aW1lcl90Z19saXN0KTsKKworCXNldHVwX3RpbWVyKCZpbmZvLT50aW1lci0+dGltZXIsIGlkbGV0aW1lcl90Z19leHBpcmVkLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpIGluZm8tPnRpbWVyKTsKKwlpbmZvLT50aW1lci0+cmVmY250ID0gMTsKKworCW1vZF90aW1lcigmaW5mby0+dGltZXItPnRpbWVyLAorCQkgIG1zZWNzX3RvX2ppZmZpZXMoaW5mby0+dGltZW91dCAqIDEwMDApICsgamlmZmllcyk7CisKKwlJTklUX1dPUksoJmluZm8tPnRpbWVyLT53b3JrLCBpZGxldGltZXJfdGdfd29yayk7CisKKwlyZXR1cm4gMDsKKworb3V0X2ZyZWVfYXR0cjoKKwlrZnJlZShpbmZvLT50aW1lci0+YXR0ci5hdHRyLm5hbWUpOworb3V0X2ZyZWVfdGltZXI6CisJa2ZyZWUoaW5mby0+dGltZXIpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGUgYWN0dWFsIHh0X3RhYmxlcyBwbHVnaW4uCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgaWRsZXRpbWVyX3RnX3RhcmdldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQoreworCWNvbnN0IHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87CisKKwlwcl9kZWJ1ZygicmVzZXR0aW5nIHRpbWVyICVzLCB0aW1lb3V0IHBlcmlvZCAldVxuIiwKKwkJIGluZm8tPmxhYmVsLCBpbmZvLT50aW1lb3V0KTsKKworCUJVR19PTighaW5mby0+dGltZXIpOworCisJbW9kX3RpbWVyKCZpbmZvLT50aW1lci0+dGltZXIsCisJCSAgbXNlY3NfdG9famlmZmllcyhpbmZvLT50aW1lb3V0ICogMTAwMCkgKyBqaWZmaWVzKTsKKworCXJldHVybiBYVF9DT05USU5VRTsKK30KKworc3RhdGljIGludCBpZGxldGltZXJfdGdfY2hlY2tlbnRyeShjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcikKK3sKKwlzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8gKmluZm8gPSBwYXItPnRhcmdpbmZvOworCWludCByZXQ7CisKKwlwcl9kZWJ1ZygiY2hlY2tlbnRyeSB0YXJnaW5mbyVzXG4iLCBpbmZvLT5sYWJlbCk7CisKKwlpZiAoaW5mby0+dGltZW91dCA9PSAwKSB7CisJCXByX2RlYnVnKCJ0aW1lb3V0IHZhbHVlIGlzIHplcm9cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoaW5mby0+bGFiZWxbMF0gPT0gJ1wwJyB8fAorCSAgICBzdHJubGVuKGluZm8tPmxhYmVsLAorCQkgICAgTUFYX0lETEVUSU1FUl9MQUJFTF9TSVpFKSA9PSBNQVhfSURMRVRJTUVSX0xBQkVMX1NJWkUpIHsKKwkJcHJfZGVidWcoImxhYmVsIGlzIGVtcHR5IG9yIG5vdCBudWwtdGVybWluYXRlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2xvY2soJmxpc3RfbXV0ZXgpOworCisJaW5mby0+dGltZXIgPSBfX2lkbGV0aW1lcl90Z19maW5kX2J5X2xhYmVsKGluZm8tPmxhYmVsKTsKKwlpZiAoaW5mby0+dGltZXIpIHsKKwkJaW5mby0+dGltZXItPnJlZmNudCsrOworCQltb2RfdGltZXIoJmluZm8tPnRpbWVyLT50aW1lciwKKwkJCSAgbXNlY3NfdG9famlmZmllcyhpbmZvLT50aW1lb3V0ICogMTAwMCkgKyBqaWZmaWVzKTsKKworCQlwcl9kZWJ1ZygiaW5jcmVhc2VkIHJlZmNudCBvZiB0aW1lciAlcyB0byAldVxuIiwKKwkJCSBpbmZvLT5sYWJlbCwgaW5mby0+dGltZXItPnJlZmNudCk7CisJfSBlbHNlIHsKKwkJcmV0ID0gaWRsZXRpbWVyX3RnX2NyZWF0ZShpbmZvKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByX2RlYnVnKCJmYWlsZWQgdG8gY3JlYXRlIHRpbWVyXG4iKTsKKwkJCW11dGV4X3VubG9jaygmbGlzdF9tdXRleCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZsaXN0X211dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaWRsZXRpbWVyX3RnX2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X3RnZHRvcl9wYXJhbSAqcGFyKQoreworCWNvbnN0IHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87CisKKwlwcl9kZWJ1ZygiZGVzdHJveSB0YXJnaW5mbyAlc1xuIiwgaW5mby0+bGFiZWwpOworCisJbXV0ZXhfbG9jaygmbGlzdF9tdXRleCk7CisKKwlpZiAoLS1pbmZvLT50aW1lci0+cmVmY250ID09IDApIHsKKwkJcHJfZGVidWcoImRlbGV0aW5nIHRpbWVyICVzXG4iLCBpbmZvLT5sYWJlbCk7CisKKwkJbGlzdF9kZWwoJmluZm8tPnRpbWVyLT5lbnRyeSk7CisJCWRlbF90aW1lcl9zeW5jKCZpbmZvLT50aW1lci0+dGltZXIpOworCQlzeXNmc19yZW1vdmVfZmlsZShpZGxldGltZXJfdGdfa29iaiwgJmluZm8tPnRpbWVyLT5hdHRyLmF0dHIpOworCQlrZnJlZShpbmZvLT50aW1lci0+YXR0ci5hdHRyLm5hbWUpOworCQlrZnJlZShpbmZvLT50aW1lcik7CisJfSBlbHNlIHsKKwkJcHJfZGVidWcoImRlY3JlYXNlZCByZWZjbnQgb2YgdGltZXIgJXMgdG8gJXVcbiIsCisJCQkgaW5mby0+bGFiZWwsIGluZm8tPnRpbWVyLT5yZWZjbnQpOworCX0KKworCW11dGV4X3VubG9jaygmbGlzdF9tdXRleCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IGlkbGV0aW1lcl90ZyBfX3JlYWRfbW9zdGx5ID0geworCS5uYW1lCQk9ICJJRExFVElNRVIiLAorCS5mYW1pbHkJCT0gTkZQUk9UT19VTlNQRUMsCisJLnRhcmdldAkJPSBpZGxldGltZXJfdGdfdGFyZ2V0LAorCS50YXJnZXRzaXplICAgICA9IHNpemVvZihzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8pLAorCS5jaGVja2VudHJ5CT0gaWRsZXRpbWVyX3RnX2NoZWNrZW50cnksCisJLmRlc3Ryb3kgICAgICAgID0gaWRsZXRpbWVyX3RnX2Rlc3Ryb3ksCisJLm1lCQk9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGFzcyAqaWRsZXRpbWVyX3RnX2NsYXNzOworCitzdGF0aWMgc3RydWN0IGRldmljZSAqaWRsZXRpbWVyX3RnX2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgaWRsZXRpbWVyX3RnX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJaWRsZXRpbWVyX3RnX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAieHRfaWRsZXRpbWVyIik7CisJZXJyID0gUFRSX0VSUihpZGxldGltZXJfdGdfY2xhc3MpOworCWlmIChJU19FUlIoaWRsZXRpbWVyX3RnX2NsYXNzKSkgeworCQlwcl9kZWJ1ZygiY291bGRuJ3QgcmVnaXN0ZXIgZGV2aWNlIGNsYXNzXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWRsZXRpbWVyX3RnX2RldmljZSA9IGRldmljZV9jcmVhdGUoaWRsZXRpbWVyX3RnX2NsYXNzLCBOVUxMLAorCQkJCQkgICAgTUtERVYoMCwgMCksIE5VTEwsICJ0aW1lcnMiKTsKKwllcnIgPSBQVFJfRVJSKGlkbGV0aW1lcl90Z19kZXZpY2UpOworCWlmIChJU19FUlIoaWRsZXRpbWVyX3RnX2RldmljZSkpIHsKKwkJcHJfZGVidWcoImNvdWxkbid0IHJlZ2lzdGVyIHN5c3RlbSBkZXZpY2VcbiIpOworCQlnb3RvIG91dF9jbGFzczsKKwl9CisKKwlpZGxldGltZXJfdGdfa29iaiA9ICZpZGxldGltZXJfdGdfZGV2aWNlLT5rb2JqOworCisJZXJyID0gIHh0X3JlZ2lzdGVyX3RhcmdldCgmaWRsZXRpbWVyX3RnKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcl9kZWJ1ZygiY291bGRuJ3QgcmVnaXN0ZXIgeHQgdGFyZ2V0XG4iKTsKKwkJZ290byBvdXRfZGV2OworCX0KKworCXJldHVybiAwOworb3V0X2RldjoKKwlkZXZpY2VfZGVzdHJveShpZGxldGltZXJfdGdfY2xhc3MsIE1LREVWKDAsIDApKTsKK291dF9jbGFzczoKKwljbGFzc19kZXN0cm95KGlkbGV0aW1lcl90Z19jbGFzcyk7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGlkbGV0aW1lcl90Z19leGl0KHZvaWQpCit7CisJeHRfdW5yZWdpc3Rlcl90YXJnZXQoJmlkbGV0aW1lcl90Zyk7CisKKwlkZXZpY2VfZGVzdHJveShpZGxldGltZXJfdGdfY2xhc3MsIE1LREVWKDAsIDApKTsKKwljbGFzc19kZXN0cm95KGlkbGV0aW1lcl90Z19jbGFzcyk7Cit9CisKK21vZHVsZV9pbml0KGlkbGV0aW1lcl90Z19pbml0KTsKK21vZHVsZV9leGl0KGlkbGV0aW1lcl90Z19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiVGltbyBUZXJhcyA8ZXh0LXRpbW8udGVyYXNAbm9raWEuY29tPiIpOworTU9EVUxFX0FVVEhPUigiTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogaWRsZSB0aW1lIG1vbml0b3IiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfTk9UUkFDSy5jIGIvbmV0L25ldGZpbHRlci94dF9OT1RSQUNLLmMKaW5kZXggNTEyYjkxMi4uOWQ3ODIxOCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9OT1RSQUNLLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9OT1RSQUNLLmMKQEAgLTIzLDcgKzIzLDcgQEAKIAkgICBJZiB0aGVyZSBpcyBhIHJlYWwgY3QgZW50cnkgY29ycmVzcG9uZGlnIHRvIHRoaXMgcGFja2V0LAogCSAgIGl0J2xsIGhhbmcgYXJvdW4gdGlsbCB0aW1pbmcgb3V0LiBXZSBkb24ndCBkZWFsIHdpdGggaXQKIAkgICBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gSksgKi8KLQlza2ItPm5mY3QgPSAmbmZfY29ubnRyYWNrX3VudHJhY2tlZC5jdF9nZW5lcmFsOworCXNrYi0+bmZjdCA9ICZuZl9jdF91bnRyYWNrZWRfZ2V0KCktPmN0X2dlbmVyYWw7CiAJc2tiLT5uZmN0aW5mbyA9IElQX0NUX05FVzsKIAluZl9jb25udHJhY2tfZ2V0KHNrYi0+bmZjdCk7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfUkFURUVTVC5jIGIvbmV0L25ldGZpbHRlci94dF9SQVRFRVNULmMKaW5kZXggNjljMDFlMS4uZGUwNzlhYmQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfUkFURUVTVC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfUkFURUVTVC5jCkBAIC02MCwxMyArNjAsMjIgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHh0X3JhdGVlc3RfbG9va3VwKTsKIAorc3RhdGljIHZvaWQgeHRfcmF0ZWVzdF9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJa2ZyZWUoY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCB4dF9yYXRlZXN0LCByY3UpKTsKK30KKwogdm9pZCB4dF9yYXRlZXN0X3B1dChzdHJ1Y3QgeHRfcmF0ZWVzdCAqZXN0KQogewogCW11dGV4X2xvY2soJnh0X3JhdGVlc3RfbXV0ZXgpOwogCWlmICgtLWVzdC0+cmVmY250ID09IDApIHsKIAkJaGxpc3RfZGVsKCZlc3QtPmxpc3QpOwogCQlnZW5fa2lsbF9lc3RpbWF0b3IoJmVzdC0+YnN0YXRzLCAmZXN0LT5yc3RhdHMpOwotCQlrZnJlZShlc3QpOworCQkvKgorCQkgKiBnZW5fZXN0aW1hdG9yIGVzdF90aW1lcigpIG1pZ2h0IGFjY2VzcyBlc3QtPmxvY2sgb3IgYnN0YXRzLAorCQkgKiB3YWl0IGEgUkNVIGdyYWNlIHBlcmlvZCBiZWZvcmUgZnJlZWluZyAnZXN0JworCQkgKi8KKwkJY2FsbF9yY3UoJmVzdC0+cmN1LCB4dF9yYXRlZXN0X2ZyZWVfcmN1KTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZ4dF9yYXRlZXN0X211dGV4KTsKIH0KQEAgLTE3OSw2ICsxODgsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IHh0X3JhdGVlc3RfdGdfZmluaSh2b2lkKQogewogCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZ4dF9yYXRlZXN0X3RnX3JlZyk7CisJcmN1X2JhcnJpZXIoKTsgLyogV2FpdCBmb3IgY29tcGxldGlvbiBvZiBjYWxsX3JjdSgpJ3MgKHh0X3JhdGVlc3RfZnJlZV9yY3UpICovCiB9CiAKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9UQ1BNU1MuYyBiL25ldC9uZXRmaWx0ZXIveHRfVENQTVNTLmMKaW5kZXggNjJlYzAyMS4uZWI4MWMzOCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9UQ1BNU1MuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X1RDUE1TUy5jCkBAIC0xNjUsOCArMTY1LDggQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmIChydCAhPSBOVUxMKSB7Ci0JCW10dSA9IGRzdF9tdHUoJnJ0LT51LmRzdCk7Ci0JCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOworCQltdHUgPSBkc3RfbXR1KCZydC0+ZHN0KTsKKwkJZHN0X3JlbGVhc2UoJnJ0LT5kc3QpOwogCX0KIAlyZXR1cm4gbXR1OwogfQpAQCAtMjIwLDE1ICsyMjAsMTMgQEAKIH0KICNlbmRpZgogCi0jZGVmaW5lIFRIX1NZTiAweDAyCi0KIC8qIE11c3Qgc3BlY2lmeSAtcCB0Y3AgLS1zeW4gKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBmaW5kX3N5bl9tYXRjaChjb25zdCBzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKm0pCiB7CiAJY29uc3Qgc3RydWN0IHh0X3RjcCAqdGNwaW5mbyA9IChjb25zdCBzdHJ1Y3QgeHRfdGNwICopbS0+ZGF0YTsKIAogCWlmIChzdHJjbXAobS0+dS5rZXJuZWwubWF0Y2gtPm5hbWUsICJ0Y3AiKSA9PSAwICYmCi0JICAgIHRjcGluZm8tPmZsZ19jbXAgJiBUSF9TWU4gJiYKKwkgICAgdGNwaW5mby0+ZmxnX2NtcCAmIFRDUEhEUl9TWU4gJiYKIAkgICAgISh0Y3BpbmZvLT5pbnZmbGFncyAmIFhUX1RDUF9JTlZfRkxBR1MpKQogCQlyZXR1cm4gdHJ1ZTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9URUUuYyBiL25ldC9uZXRmaWx0ZXIveHRfVEVFLmMKaW5kZXggODU5ZDlmZC4uMjJhMmQ0MiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9URUUuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jCkBAIC03Nyw4ICs3Nyw4IEBACiAJCXJldHVybiBmYWxzZTsKIAogCXNrYl9kc3RfZHJvcChza2IpOwotCXNrYl9kc3Rfc2V0KHNrYiwgJnJ0LT51LmRzdCk7Ci0Jc2tiLT5kZXYgICAgICA9IHJ0LT51LmRzdC5kZXY7CisJc2tiX2RzdF9zZXQoc2tiLCAmcnQtPmRzdCk7CisJc2tiLT5kZXYgICAgICA9IHJ0LT5kc3QuZGV2OwogCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7CiAJcmV0dXJuIHRydWU7CiB9CkBAIC0xMDQsNyArMTA0LDcgQEAKICNpZmRlZiBXSVRIX0NPTk5UUkFDSwogCS8qIEF2b2lkIGNvdW50aW5nIGNsb25lZCBwYWNrZXRzIHRvd2FyZHMgdGhlIG9yaWdpbmFsIGNvbm5lY3Rpb24uICovCiAJbmZfY29ubnRyYWNrX3B1dChza2ItPm5mY3QpOwotCXNrYi0+bmZjdCAgICAgPSAmbmZfY29ubnRyYWNrX3VudHJhY2tlZC5jdF9nZW5lcmFsOworCXNrYi0+bmZjdCAgICAgPSAmbmZfY3RfdW50cmFja2VkX2dldCgpLT5jdF9nZW5lcmFsOwogCXNrYi0+bmZjdGluZm8gPSBJUF9DVF9ORVc7CiAJbmZfY29ubnRyYWNrX2dldChza2ItPm5mY3QpOwogI2VuZGlmCkBAIC0xNzcsNyArMTc3LDcgQEAKIAogI2lmZGVmIFdJVEhfQ09OTlRSQUNLCiAJbmZfY29ubnRyYWNrX3B1dChza2ItPm5mY3QpOwotCXNrYi0+bmZjdCAgICAgPSAmbmZfY29ubnRyYWNrX3VudHJhY2tlZC5jdF9nZW5lcmFsOworCXNrYi0+bmZjdCAgICAgPSAmbmZfY3RfdW50cmFja2VkX2dldCgpLT5jdF9nZW5lcmFsOwogCXNrYi0+bmZjdGluZm8gPSBJUF9DVF9ORVc7CiAJbmZfY29ubnRyYWNrX2dldChza2ItPm5mY3QpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X1RQUk9YWS5jIGIvbmV0L25ldGZpbHRlci94dF9UUFJPWFkuYwppbmRleCBlMWEwZGVkLi5jNjEyOTRkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X1RQUk9YWS5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfVFBST1hZLmMKQEAgLTM3LDggKzM3LDEwIEBACiAJCXJldHVybiBORl9EUk9QOwogCiAJc2sgPSBuZl90cHJveHlfZ2V0X3NvY2tfdjQoZGV2X25ldChza2ItPmRldiksIGlwaC0+cHJvdG9jb2wsCi0JCQkJICAgaXBoLT5zYWRkciwgdGdpLT5sYWRkciA/IHRnaS0+bGFkZHIgOiBpcGgtPmRhZGRyLAotCQkJCSAgIGhwLT5zb3VyY2UsIHRnaS0+bHBvcnQgPyB0Z2ktPmxwb3J0IDogaHAtPmRlc3QsCisJCQkJICAgaXBoLT5zYWRkciwKKwkJCQkgICB0Z2ktPmxhZGRyID8gdGdpLT5sYWRkciA6IGlwaC0+ZGFkZHIsCisJCQkJICAgaHAtPnNvdXJjZSwKKwkJCQkgICB0Z2ktPmxwb3J0ID8gdGdpLT5scG9ydCA6IGhwLT5kZXN0LAogCQkJCSAgIHBhci0+aW4sIHRydWUpOwogCiAJLyogTk9URTogYXNzaWduX3NvY2sgY29uc3VtZXMgb3VyIHNrIHJlZmVyZW5jZSAqLwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jbHVzdGVyLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2NsdXN0ZXIuYwppbmRleCAzMGI5NWExLi5mNGFmMWJmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2NsdXN0ZXIuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2NsdXN0ZXIuYwpAQCAtMTIwLDcgKzEyMCw3IEBACiAJaWYgKGN0ID09IE5VTEwpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmIChjdCA9PSAmbmZfY29ubnRyYWNrX3VudHJhY2tlZCkKKwlpZiAobmZfY3RfaXNfdW50cmFja2VkKGN0KSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJaWYgKGN0LT5tYXN0ZXIpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5ieXRlcy5jIGIvbmV0L25ldGZpbHRlci94dF9jb25uYnl0ZXMuYwppbmRleCA3MzUxNzgzLi41YjEzODUwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5ieXRlcy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfY29ubmJ5dGVzLmMKQEAgLTExMiw2ICsxMTIsMTYgQEAKIAlpZiAocmV0IDwgMCkKIAkJcHJfaW5mbygiY2Fubm90IGxvYWQgY29ubnRyYWNrIHN1cHBvcnQgZm9yIHByb3RvPSV1XG4iLAogCQkJcGFyLT5mYW1pbHkpOworCisJLyoKKwkgKiBUaGlzIGZpbHRlciBjYW5ub3QgZnVuY3Rpb24gY29ycmVjdGx5IHVubGVzcyBjb25uZWN0aW9uIHRyYWNraW5nCisJICogYWNjb3VudGluZyBpcyBlbmFibGVkLCBzbyBjb21wbGFpbiBpbiB0aGUgaG9wZSB0aGF0IHNvbWVvbmUgbm90aWNlcy4KKwkgKi8KKwlpZiAoIW5mX2N0X2FjY3RfZW5hYmxlZChwYXItPm5ldCkpIHsKKwkJcHJfd2FybmluZygiRm9yY2luZyBDVCBhY2NvdW50aW5nIHRvIGJlIGVuYWJsZWRcbiIpOworCQluZl9jdF9zZXRfYWNjdChwYXItPm5ldCwgdHJ1ZSk7CisJfQorCiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jb25udHJhY2suYyBiL25ldC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmMKaW5kZXggMzk2ODFmMS4uZTUzNjcxMCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9jb25udHJhY2suYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5jCkBAIC0xMjMsMTEgKzEyMywxMiBAQAogCiAJY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKIAotCWlmIChjdCA9PSAmbmZfY29ubnRyYWNrX3VudHJhY2tlZCkKLQkJc3RhdGViaXQgPSBYVF9DT05OVFJBQ0tfU1RBVEVfVU5UUkFDS0VEOwotCWVsc2UgaWYgKGN0ICE9IE5VTEwpCi0JCXN0YXRlYml0ID0gWFRfQ09OTlRSQUNLX1NUQVRFX0JJVChjdGluZm8pOwotCWVsc2UKKwlpZiAoY3QpIHsKKwkJaWYgKG5mX2N0X2lzX3VudHJhY2tlZChjdCkpCisJCQlzdGF0ZWJpdCA9IFhUX0NPTk5UUkFDS19TVEFURV9VTlRSQUNLRUQ7CisJCWVsc2UKKwkJCXN0YXRlYml0ID0gWFRfQ09OTlRSQUNLX1NUQVRFX0JJVChjdGluZm8pOworCX0gZWxzZQogCQlzdGF0ZWJpdCA9IFhUX0NPTk5UUkFDS19TVEFURV9JTlZBTElEOwogCiAJaWYgKGluZm8tPm1hdGNoX2ZsYWdzICYgWFRfQ09OTlRSQUNLX1NUQVRFKSB7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2NwdS5jIGIvbmV0L25ldGZpbHRlci94dF9jcHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzlkYjhhCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L25ldGZpbHRlci94dF9jcHUuYwpAQCAtMCwwICsxLDYzIEBACisvKiBLZXJuZWwgbW9kdWxlIHRvIG1hdGNoIHJ1bm5pbmcgQ1BVICovCisKKy8qCisgKiBNaWdodCBiZSB1c2VkIHRvIGRpc3RyaWJ1dGUgY29ubmVjdGlvbnMgb24gc2V2ZXJhbCBkYWVtb25zLCBpZgorICogUlBTIChSZW1vdGUgUGFja2V0IFN0ZWVyaW5nKSBpcyBlbmFibGVkIG9yIE5JQyBpcyBtdWx0aXF1ZXVlIGNhcGFibGUsCisgKiBlYWNoIFJYIHF1ZXVlIElSUSBhZmZpbmVkIHRvIG9uZSBDUFUgKDE6MSBtYXBwaW5nKQorICoKKyAqLworCisvKiAoQykgMjAxMCBFcmljIER1bWF6ZXQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkVyaWMgRHVtYXpldCA8ZXJpYy5kdW1hemV0QGdtYWlsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogQ1BVIG1hdGNoIik7CisKK3N0YXRpYyBpbnQgY3B1X210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQoreworCWNvbnN0IHN0cnVjdCB4dF9jcHVfaW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOworCisJaWYgKGluZm8tPmludmVydCAmIH4xKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgY3B1X210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKK3sKKwljb25zdCBzdHJ1Y3QgeHRfY3B1X2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKKworCXJldHVybiAoaW5mby0+Y3B1ID09IHNtcF9wcm9jZXNzb3JfaWQoKSkgXiBpbmZvLT5pbnZlcnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggY3B1X210X3JlZyBfX3JlYWRfbW9zdGx5ID0geworCS5uYW1lICAgICAgID0gImNwdSIsCisJLnJldmlzaW9uICAgPSAwLAorCS5mYW1pbHkgICAgID0gTkZQUk9UT19VTlNQRUMsCisJLmNoZWNrZW50cnkgPSBjcHVfbXRfY2hlY2ssCisJLm1hdGNoICAgICAgPSBjcHVfbXQsCisJLm1hdGNoc2l6ZSAgPSBzaXplb2Yoc3RydWN0IHh0X2NwdV9pbmZvKSwKKwkubWUgICAgICAgICA9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY3B1X210X2luaXQodm9pZCkKK3sKKwlyZXR1cm4geHRfcmVnaXN0ZXJfbWF0Y2goJmNwdV9tdF9yZWcpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY3B1X210X2V4aXQodm9pZCkKK3sKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZjcHVfbXRfcmVnKTsKK30KKworbW9kdWxlX2luaXQoY3B1X210X2luaXQpOworbW9kdWxlX2V4aXQoY3B1X210X2V4aXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9pcHZzLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwdnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTRkNjZkYgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaXB2cy5jCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICoJeHRfaXB2cyAtIGtlcm5lbCBtb2R1bGUgdG8gbWF0Y2ggSVBWUyBjb25uZWN0aW9uIHByb3BlcnRpZXMKKyAqCisgKglBdXRob3I6IEhhbm5lcyBFZGVyIDxoZWRlckBnb29nbGUuY29tPgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgorI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9pcF92cy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2lwdnMuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgorCisjaW5jbHVkZSA8bmV0L2lwX3ZzLmg+CisKK01PRFVMRV9BVVRIT1IoIkhhbm5lcyBFZGVyIDxoZWRlckBnb29nbGUuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJYdGFibGVzOiBtYXRjaCBJUFZTIGNvbm5lY3Rpb24gcHJvcGVydGllcyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJpcHRfaXB2cyIpOworTU9EVUxFX0FMSUFTKCJpcDZ0X2lwdnMiKTsKKworLyogYm9ycm93ZWQgZnJvbSB4dF9jb25udHJhY2sgKi8KK3N0YXRpYyBib29sIGlwdnNfbXRfYWRkcmNtcChjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmthZGRyLAorCQkJICAgIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqdWFkZHIsCisJCQkgICAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICp1bWFzaywKKwkJCSAgICB1bnNpZ25lZCBpbnQgbDNwcm90bykKK3sKKwlpZiAobDNwcm90byA9PSBORlBST1RPX0lQVjQpCisJCXJldHVybiAoKGthZGRyLT5pcCBeIHVhZGRyLT5pcCkgJiB1bWFzay0+aXApID09IDA7CisjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKKwllbHNlIGlmIChsM3Byb3RvID09IE5GUFJPVE9fSVBWNikKKwkJcmV0dXJuIGlwdjZfbWFza2VkX2FkZHJfY21wKCZrYWRkci0+aW42LCAmdW1hc2stPmluNiwKKwkJICAgICAgICZ1YWRkci0+aW42KSA9PSAwOworI2VuZGlmCisJZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sCitpcHZzX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKK3sKKwljb25zdCBzdHJ1Y3QgeHRfaXB2c19tdGluZm8gKmRhdGEgPSBwYXItPm1hdGNoaW5mbzsKKwkvKiBpcHZzX210X2NoZWNrIGVuc3VyZXMgdGhhdCBmYW1pbHkgaXMgb25seSBORlBST1RPX0lQVls0Nl0uICovCisJY29uc3QgdV9pbnQ4X3QgZmFtaWx5ID0gcGFyLT5mYW1pbHk7CisJc3RydWN0IGlwX3ZzX2lwaGRyIGlwaDsKKwlzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwOworCXN0cnVjdCBpcF92c19jb25uICpjcDsKKwlib29sIG1hdGNoID0gdHJ1ZTsKKworCWlmIChkYXRhLT5iaXRtYXNrID09IFhUX0lQVlNfSVBWU19QUk9QRVJUWSkgeworCQltYXRjaCA9IHNrYi0+aXB2c19wcm9wZXJ0eSBeCisJCQkhIShkYXRhLT5pbnZlcnQgJiBYVF9JUFZTX0lQVlNfUFJPUEVSVFkpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBvdGhlciBmbGFncyB0aGFuIFhUX0lQVlNfSVBWU19QUk9QRVJUWSBhcmUgc2V0ICovCisJaWYgKCFza2ItPmlwdnNfcHJvcGVydHkpIHsKKwkJbWF0Y2ggPSBmYWxzZTsKKwkJZ290byBvdXQ7CisJfQorCisJaXBfdnNfZmlsbF9pcGhkcihmYW1pbHksIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCAmaXBoKTsKKworCWlmIChkYXRhLT5iaXRtYXNrICYgWFRfSVBWU19QUk9UTykKKwkJaWYgKChpcGgucHJvdG9jb2wgPT0gZGF0YS0+bDRwcm90bykgXgorCQkgICAgIShkYXRhLT5pbnZlcnQgJiBYVF9JUFZTX1BST1RPKSkgeworCQkJbWF0Y2ggPSBmYWxzZTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwlwcCA9IGlwX3ZzX3Byb3RvX2dldChpcGgucHJvdG9jb2wpOworCWlmICh1bmxpa2VseSghcHApKSB7CisJCW1hdGNoID0gZmFsc2U7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogQ2hlY2sgaWYgdGhlIHBhY2tldCBiZWxvbmdzIHRvIGFuIGV4aXN0aW5nIGVudHJ5CisJICovCisJY3AgPSBwcC0+Y29ubl9vdXRfZ2V0KGZhbWlseSwgc2tiLCBwcCwgJmlwaCwgaXBoLmxlbiwgMSAvKiBpbnZlcnNlICovKTsKKwlpZiAodW5saWtlbHkoY3AgPT0gTlVMTCkpIHsKKwkJbWF0Y2ggPSBmYWxzZTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBXZSBmb3VuZCBhIGNvbm5lY3Rpb24sIGkuZS4gY3QgIT0gMCwgbWFrZSBzdXJlIHRvIGNhbGwKKwkgKiBfX2lwX3ZzX2Nvbm5fcHV0IGJlZm9yZSByZXR1cm5pbmcuICBJbiBvdXIgY2FzZSBqdW1wIHRvIG91dF9wdXRfY29uLgorCSAqLworCisJaWYgKGRhdGEtPmJpdG1hc2sgJiBYVF9JUFZTX1ZQT1JUKQorCQlpZiAoKGNwLT52cG9ydCA9PSBkYXRhLT52cG9ydCkgXgorCQkgICAgIShkYXRhLT5pbnZlcnQgJiBYVF9JUFZTX1ZQT1JUKSkgeworCQkJbWF0Y2ggPSBmYWxzZTsKKwkJCWdvdG8gb3V0X3B1dF9jcDsKKwkJfQorCisJaWYgKGRhdGEtPmJpdG1hc2sgJiBYVF9JUFZTX1ZQT1JUQ1RMKQorCQlpZiAoKGNwLT5jb250cm9sICE9IE5VTEwgJiYKKwkJICAgICBjcC0+Y29udHJvbC0+dnBvcnQgPT0gZGF0YS0+dnBvcnRjdGwpIF4KKwkJICAgICEoZGF0YS0+aW52ZXJ0ICYgWFRfSVBWU19WUE9SVENUTCkpIHsKKwkJCW1hdGNoID0gZmFsc2U7CisJCQlnb3RvIG91dF9wdXRfY3A7CisJCX0KKworCWlmIChkYXRhLT5iaXRtYXNrICYgWFRfSVBWU19ESVIpIHsKKwkJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CisJCXN0cnVjdCBuZl9jb25uICpjdCA9IG5mX2N0X2dldChza2IsICZjdGluZm8pOworCisJCWlmIChjdCA9PSBOVUxMIHx8IG5mX2N0X2lzX3VudHJhY2tlZChjdCkpIHsKKwkJCW1hdGNoID0gZmFsc2U7CisJCQlnb3RvIG91dF9wdXRfY3A7CisJCX0KKworCQlpZiAoKGN0aW5mbyA+PSBJUF9DVF9JU19SRVBMWSkgXgorCQkgICAgISEoZGF0YS0+aW52ZXJ0ICYgWFRfSVBWU19ESVIpKSB7CisJCQltYXRjaCA9IGZhbHNlOworCQkJZ290byBvdXRfcHV0X2NwOworCQl9CisJfQorCisJaWYgKGRhdGEtPmJpdG1hc2sgJiBYVF9JUFZTX01FVEhPRCkKKwkJaWYgKCgoY3AtPmZsYWdzICYgSVBfVlNfQ09OTl9GX0ZXRF9NQVNLKSA9PSBkYXRhLT5md2RfbWV0aG9kKSBeCisJCSAgICAhKGRhdGEtPmludmVydCAmIFhUX0lQVlNfTUVUSE9EKSkgeworCQkJbWF0Y2ggPSBmYWxzZTsKKwkJCWdvdG8gb3V0X3B1dF9jcDsKKwkJfQorCisJaWYgKGRhdGEtPmJpdG1hc2sgJiBYVF9JUFZTX1ZBRERSKSB7CisJCWlmIChpcHZzX210X2FkZHJjbXAoJmNwLT52YWRkciwgJmRhdGEtPnZhZGRyLAorCQkJCSAgICAmZGF0YS0+dm1hc2ssIGZhbWlseSkgXgorCQkgICAgIShkYXRhLT5pbnZlcnQgJiBYVF9JUFZTX1ZBRERSKSkgeworCQkJbWF0Y2ggPSBmYWxzZTsKKwkJCWdvdG8gb3V0X3B1dF9jcDsKKwkJfQorCX0KKworb3V0X3B1dF9jcDoKKwlfX2lwX3ZzX2Nvbm5fcHV0KGNwKTsKK291dDoKKwlwcl9kZWJ1ZygibWF0Y2g9JWRcbiIsIG1hdGNoKTsKKwlyZXR1cm4gbWF0Y2g7Cit9CisKK3N0YXRpYyBpbnQgaXB2c19tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKK3sKKwlpZiAocGFyLT5mYW1pbHkgIT0gTkZQUk9UT19JUFY0CisjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKKwkgICAgJiYgcGFyLT5mYW1pbHkgIT0gTkZQUk9UT19JUFY2CisjZW5kaWYKKwkJKSB7CisJCXByX2luZm8oInByb3RvY29sIGZhbWlseSAldSBub3Qgc3VwcG9ydGVkXG4iLCBwYXItPmZhbWlseSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHh0X21hdGNoIHh0X2lwdnNfbXRfcmVnIF9fcmVhZF9tb3N0bHkgPSB7CisJLm5hbWUgICAgICAgPSAiaXB2cyIsCisJLnJldmlzaW9uICAgPSAwLAorCS5mYW1pbHkgICAgID0gTkZQUk9UT19VTlNQRUMsCisJLm1hdGNoICAgICAgPSBpcHZzX210LAorCS5jaGVja2VudHJ5ID0gaXB2c19tdF9jaGVjaywKKwkubWF0Y2hzaXplICA9IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgeHRfaXB2c19tdGluZm8pKSwKKwkubWUgICAgICAgICA9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaXB2c19tdF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHh0X3JlZ2lzdGVyX21hdGNoKCZ4dF9pcHZzX210X3JlZyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpcHZzX210X2V4aXQodm9pZCkKK3sKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZ4dF9pcHZzX210X3JlZyk7Cit9CisKK21vZHVsZV9pbml0KGlwdnNfbXRfaW5pdCk7Cittb2R1bGVfZXhpdChpcHZzX210X2V4aXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9xdW90YS5jIGIvbmV0L25ldGZpbHRlci94dF9xdW90YS5jCmluZGV4IGI0ZjdkZmUuLjcwZWIyYjQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfcXVvdGEuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmMKQEAgLTExLDcgKzExLDggQEAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfcXVvdGEuaD4KIAogc3RydWN0IHh0X3F1b3RhX3ByaXYgewotCXVpbnQ2NF90IHF1b3RhOworCXNwaW5sb2NrX3QJbG9jazsKKwl1aW50NjRfdAlxdW90YTsKIH07CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKQEAgLTIwLDggKzIxLDYgQEAKIE1PRFVMRV9BTElBUygiaXB0X3F1b3RhIik7CiBNT0RVTEVfQUxJQVMoImlwNnRfcXVvdGEiKTsKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhxdW90YV9sb2NrKTsKLQogc3RhdGljIGJvb2wKIHF1b3RhX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIHsKQEAgLTI5LDcgKzI4LDcgQEAKIAlzdHJ1Y3QgeHRfcXVvdGFfcHJpdiAqcHJpdiA9IHEtPm1hc3RlcjsKIAlib29sIHJldCA9IHEtPmZsYWdzICYgWFRfUVVPVEFfSU5WRVJUOwogCi0Jc3Bpbl9sb2NrX2JoKCZxdW90YV9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnByaXYtPmxvY2spOwogCWlmIChwcml2LT5xdW90YSA+PSBza2ItPmxlbikgewogCQlwcml2LT5xdW90YSAtPSBza2ItPmxlbjsKIAkJcmV0ID0gIXJldDsKQEAgLTM3LDkgKzM2LDcgQEAKIAkJLyogd2UgZG8gbm90IGFsbG93IGV2ZW4gc21hbGwgcGFja2V0cyBmcm9tIG5vdyBvbiAqLwogCQlwcml2LT5xdW90YSA9IDA7CiAJfQotCS8qIENvcHkgcXVvdGEgYmFjayB0byBtYXRjaGluZm8gc28gdGhhdCBpcHRhYmxlcyBjYW4gZGlzcGxheSBpdCAqLwotCXEtPnF1b3RhID0gcHJpdi0+cXVvdGE7Ci0Jc3Bpbl91bmxvY2tfYmgoJnF1b3RhX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5sb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC01NSw2ICs1Miw3IEBACiAJaWYgKHEtPm1hc3RlciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCXNwaW5fbG9ja19pbml0KCZxLT5tYXN0ZXItPmxvY2spOwogCXEtPm1hc3Rlci0+cXVvdGEgPSBxLT5xdW90YTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfc2N0cC5jIGIvbmV0L25ldGZpbHRlci94dF9zY3RwLmMKaW5kZXggYzA0ZmNmMy4uZWYzNmE1NiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9zY3RwLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9zY3RwLmMKQEAgLTMsNiArMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L2lwdjYuaD4KKyNpbmNsdWRlIDxuZXQvc2N0cC9zY3RwLmg+CiAjaW5jbHVkZSA8bGludXgvc2N0cC5oPgogCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CkBAIC02Nyw3ICs2OCw3IEBACiAJCQkgKytpLCBvZmZzZXQsIHNjaC0+dHlwZSwgaHRvbnMoc2NoLT5sZW5ndGgpLAogCQkJIHNjaC0+ZmxhZ3MpOwogI2VuZGlmCi0JCW9mZnNldCArPSAobnRvaHMoc2NoLT5sZW5ndGgpICsgMykgJiB+MzsKKwkJb2Zmc2V0ICs9IFdPUkRfUk9VTkQobnRvaHMoc2NoLT5sZW5ndGgpKTsKIAogCQlwcl9kZWJ1Zygic2tiLT5sZW46ICVkXHRvZmZzZXQ6ICVkXG4iLCBza2ItPmxlbiwgb2Zmc2V0KTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9zb2NrZXQuYyBiL25ldC9uZXRmaWx0ZXIveHRfc29ja2V0LmMKaW5kZXggM2Q1NGMyMy4uMWNhODk5MCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9zb2NrZXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3NvY2tldC5jCkBAIC0xMjcsNyArMTI3LDcgQEAKIAkgKiByZXBseSBwYWNrZXQgb2YgYW4gZXN0YWJsaXNoZWQgU05BVC10ZWQgY29ubmVjdGlvbi4gKi8KIAogCWN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7Ci0JaWYgKGN0ICYmIChjdCAhPSAmbmZfY29ubnRyYWNrX3VudHJhY2tlZCkgJiYKKwlpZiAoY3QgJiYgIW5mX2N0X2lzX3VudHJhY2tlZChjdCkgJiYKIAkgICAgKChpcGgtPnByb3RvY29sICE9IElQUFJPVE9fSUNNUCAmJgogCSAgICAgIGN0aW5mbyA9PSBJUF9DVF9JU19SRVBMWSArIElQX0NUX0VTVEFCTElTSEVEKSB8fAogCSAgICAgKGlwaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QICYmCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRlLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRlLmMKaW5kZXggZTEyZTA1My4uYTUwNzkyMiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9zdGF0ZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfc3RhdGUuYwpAQCAtMjYsMTQgKzI2LDE2IEBACiAJY29uc3Qgc3RydWN0IHh0X3N0YXRlX2luZm8gKnNpbmZvID0gcGFyLT5tYXRjaGluZm87CiAJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CiAJdW5zaWduZWQgaW50IHN0YXRlYml0OworCXN0cnVjdCBuZl9jb25uICpjdCA9IG5mX2N0X2dldChza2IsICZjdGluZm8pOwogCi0JaWYgKG5mX2N0X2lzX3VudHJhY2tlZChza2IpKQotCQlzdGF0ZWJpdCA9IFhUX1NUQVRFX1VOVFJBQ0tFRDsKLQllbHNlIGlmICghbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbykpCisJaWYgKCFjdCkKIAkJc3RhdGViaXQgPSBYVF9TVEFURV9JTlZBTElEOwotCWVsc2UKLQkJc3RhdGViaXQgPSBYVF9TVEFURV9CSVQoY3RpbmZvKTsKLQorCWVsc2UgeworCQlpZiAobmZfY3RfaXNfdW50cmFja2VkKGN0KSkKKwkJCXN0YXRlYml0ID0gWFRfU1RBVEVfVU5UUkFDS0VEOworCQllbHNlCisJCQlzdGF0ZWJpdCA9IFhUX1NUQVRFX0JJVChjdGluZm8pOworCX0KIAlyZXR1cm4gKHNpbmZvLT5zdGF0ZW1hc2sgJiBzdGF0ZWJpdCk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5jCmluZGV4IDk2ZTYyYjguLjQyZWNiNzEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9zdGF0aXN0aWMuYwpAQCAtMTgsOCArMTgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgogCiBzdHJ1Y3QgeHRfc3RhdGlzdGljX3ByaXYgewotCXVpbnQzMl90IGNvdW50OwotfTsKKwlhdG9taWNfdCBjb3VudDsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiUGF0cmljayBNY0hhcmR5IDxrYWJlckB0cmFzaC5uZXQ+Iik7CkBAIC0yNywxMyArMjcsMTIgQEAKIE1PRFVMRV9BTElBUygiaXB0X3N0YXRpc3RpYyIpOwogTU9EVUxFX0FMSUFTKCJpcDZ0X3N0YXRpc3RpYyIpOwogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKG50aF9sb2NrKTsKLQogc3RhdGljIGJvb2wKIHN0YXRpc3RpY19tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiB7CiAJY29uc3Qgc3RydWN0IHh0X3N0YXRpc3RpY19pbmZvICppbmZvID0gcGFyLT5tYXRjaGluZm87CiAJYm9vbCByZXQgPSBpbmZvLT5mbGFncyAmIFhUX1NUQVRJU1RJQ19JTlZFUlQ7CisJaW50IG52YWwsIG92YWw7CiAKIAlzd2l0Y2ggKGluZm8tPm1vZGUpIHsKIAljYXNlIFhUX1NUQVRJU1RJQ19NT0RFX1JBTkRPTToKQEAgLTQxLDEyICs0MCwxMiBAQAogCQkJcmV0ID0gIXJldDsKIAkJYnJlYWs7CiAJY2FzZSBYVF9TVEFUSVNUSUNfTU9ERV9OVEg6Ci0JCXNwaW5fbG9ja19iaCgmbnRoX2xvY2spOwotCQlpZiAoaW5mby0+bWFzdGVyLT5jb3VudCsrID09IGluZm8tPnUubnRoLmV2ZXJ5KSB7Ci0JCQlpbmZvLT5tYXN0ZXItPmNvdW50ID0gMDsKKwkJZG8geworCQkJb3ZhbCA9IGF0b21pY19yZWFkKCZpbmZvLT5tYXN0ZXItPmNvdW50KTsKKwkJCW52YWwgPSAob3ZhbCA9PSBpbmZvLT51Lm50aC5ldmVyeSkgPyAwIDogb3ZhbCArIDE7CisJCX0gd2hpbGUgKGF0b21pY19jbXB4Y2hnKCZpbmZvLT5tYXN0ZXItPmNvdW50LCBvdmFsLCBudmFsKSAhPSBvdmFsKTsKKwkJaWYgKG52YWwgPT0gMCkKIAkJCXJldCA9ICFyZXQ7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfYmgoJm50aF9sb2NrKTsKIAkJYnJlYWs7CiAJfQogCkBAIC02NCw3ICs2Myw3IEBACiAJaW5mby0+bWFzdGVyID0ga3phbGxvYyhzaXplb2YoKmluZm8tPm1hc3RlciksIEdGUF9LRVJORUwpOwogCWlmIChpbmZvLT5tYXN0ZXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JaW5mby0+bWFzdGVyLT5jb3VudCA9IGluZm8tPnUubnRoLmNvdW50OworCWF0b21pY19zZXQoJmluZm8tPm1hc3Rlci0+Y291bnQsIGluZm8tPnUubnRoLmNvdW50KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCmluZGV4IGEyZWI5NjUuLjJjYmYzODAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKQEAgLTEwNzYsMTQgKzEwNzYsMTUgQEAKIAlza19mb3JfZWFjaF9ib3VuZChzaywgbm9kZSwgJm5sX3RhYmxlW3Nzay0+c2tfcHJvdG9jb2xdLm1jX2xpc3QpCiAJCWRvX29uZV9icm9hZGNhc3Qoc2ssICZpbmZvKTsKIAotCWtmcmVlX3NrYihza2IpOworCWNvbnN1bWVfc2tiKHNrYik7CiAKIAluZXRsaW5rX3VubG9ja190YWJsZSgpOwogCi0Ja2ZyZWVfc2tiKGluZm8uc2tiMik7Ci0KLQlpZiAoaW5mby5kZWxpdmVyeV9mYWlsdXJlKQorCWlmIChpbmZvLmRlbGl2ZXJ5X2ZhaWx1cmUpIHsKKwkJa2ZyZWVfc2tiKGluZm8uc2tiMik7CiAJCXJldHVybiAtRU5PQlVGUzsKKwl9IGVsc2UKKwkJY29uc3VtZV9za2IoaW5mby5za2IyKTsKIAogCWlmIChpbmZvLmRlbGl2ZXJlZCkgewogCQlpZiAoaW5mby5jb25nZXN0ZWQgJiYgKGFsbG9jYXRpb24gJiBfX0dGUF9XQUlUKSkKQEAgLTEzMjMsMTkgKzEzMjQsMjMgQEAKIAlpZiAobXNnLT5tc2dfZmxhZ3MmTVNHX09PQikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JaWYgKE5VTEwgPT0gc2lvY2ItPnNjbSkKKwlpZiAoTlVMTCA9PSBzaW9jYi0+c2NtKSB7CiAJCXNpb2NiLT5zY20gPSAmc2NtOworCQltZW1zZXQoJnNjbSwgMCwgc2l6ZW9mKHNjbSkpOworCX0KIAllcnIgPSBzY21fc2VuZChzb2NrLCBtc2csIHNpb2NiLT5zY20pOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCiAJaWYgKG1zZy0+bXNnX25hbWVsZW4pIHsKKwkJZXJyID0gLUVJTlZBTDsKIAkJaWYgKGFkZHItPm5sX2ZhbWlseSAhPSBBRl9ORVRMSU5LKQotCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlnb3RvIG91dDsKIAkJZHN0X3BpZCA9IGFkZHItPm5sX3BpZDsKIAkJZHN0X2dyb3VwID0gZmZzKGFkZHItPm5sX2dyb3Vwcyk7CisJCWVyciA9ICAtRVBFUk07CiAJCWlmIChkc3RfZ3JvdXAgJiYgIW5ldGxpbmtfY2FwYWJsZShzb2NrLCBOTF9OT05ST09UX1NFTkQpKQotCQkJcmV0dXJuIC1FUEVSTTsKKwkJCWdvdG8gb3V0OwogCX0gZWxzZSB7CiAJCWRzdF9waWQgPSBubGstPmRzdF9waWQ7CiAJCWRzdF9ncm91cCA9IG5say0+ZHN0X2dyb3VwOwpAQCAtMTM4Nyw2ICsxMzkyLDcgQEAKIAllcnIgPSBuZXRsaW5rX3VuaWNhc3Qoc2ssIHNrYiwgZHN0X3BpZCwgbXNnLT5tc2dfZmxhZ3MmTVNHX0RPTlRXQUlUKTsKIAogb3V0OgorCXNjbV9kZXN0cm95KHNpb2NiLT5zY20pOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE0MDAsNyArMTQwNiw3IEBACiAJc3RydWN0IG5ldGxpbmtfc29jayAqbmxrID0gbmxrX3NrKHNrKTsKIAlpbnQgbm9ibG9jayA9IGZsYWdzJk1TR19ET05UV0FJVDsKIAlzaXplX3QgY29waWVkOwotCXN0cnVjdCBza19idWZmICpza2IsICpmcmFnIF9fbWF5YmVfdW51c2VkID0gTlVMTDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBlcnI7CiAKIAlpZiAoZmxhZ3MmTVNHX09PQikKQEAgLTE0MzUsNyArMTQ0MSwyMSBAQAogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlza2IgPSBjb21wc2tiOwogCQl9IGVsc2UgewotCQkJZnJhZyA9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0OworCQkJLyoKKwkJCSAqIEJlZm9yZSBzZXR0aW5nIGZyYWdfbGlzdCB0byBOVUxMLCB3ZSBtdXN0IGdldCBhCisJCQkgKiBwcml2YXRlIGNvcHkgb2Ygc2tiIGlmIHNoYXJlZCAoYmVjYXVzZSBvZiBNU0dfUEVFSykKKwkJCSAqLworCQkJaWYgKHNrYl9zaGFyZWQoc2tiKSkgeworCQkJCXN0cnVjdCBza19idWZmICpuc2tiOworCisJCQkJbnNrYiA9IHBza2JfY29weShza2IsIEdGUF9LRVJORUwpOworCQkJCWtmcmVlX3NrYihza2IpOworCQkJCXNrYiA9IG5za2I7CisJCQkJZXJyID0gLUVOT01FTTsKKwkJCQlpZiAoIXNrYikKKwkJCQkJZ290byBvdXQ7CisJCQl9CisJCQlrZnJlZV9za2Ioc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3QpOwogCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3QgPSBOVUxMOwogCQl9CiAJfQpAQCAtMTQ3MiwxMCArMTQ5Miw2IEBACiAJaWYgKGZsYWdzICYgTVNHX1RSVU5DKQogCQljb3BpZWQgPSBza2ItPmxlbjsKIAotI2lmZGVmIENPTkZJR19DT01QQVRfTkVUTElOS19NRVNTQUdFUwotCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0ID0gZnJhZzsKLSNlbmRpZgotCiAJc2tiX2ZyZWVfZGF0YWdyYW0oc2ssIHNrYik7CiAKIAlpZiAobmxrLT5jYiAmJiBhdG9taWNfcmVhZCgmc2stPnNrX3JtZW1fYWxsb2MpIDw9IHNrLT5za19yY3ZidWYgLyAyKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMgYi9uZXQvbmV0bGluay9nZW5ldGxpbmsuYwppbmRleCBhYTQzMDhhLi4yNmVkM2U4IDEwMDY0NAotLS0gYS9uZXQvbmV0bGluay9nZW5ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9nZW5ldGxpbmsuYwpAQCAtMzAzLDYgKzMwMyw3IEBACiBlcnJvdXQ6CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0woZ2VubF9yZWdpc3Rlcl9vcHMpOwogCiAvKioKICAqIGdlbmxfdW5yZWdpc3Rlcl9vcHMgLSB1bnJlZ2lzdGVyIGdlbmVyaWMgbmV0bGluayBvcGVyYXRpb25zCkBAIC0zMzcsNiArMzM4LDcgQEAKIAogCXJldHVybiAtRU5PRU5UOwogfQorRVhQT1JUX1NZTUJPTChnZW5sX3VucmVnaXN0ZXJfb3BzKTsKIAogLyoqCiAgKiBnZW5sX3JlZ2lzdGVyX2ZhbWlseSAtIHJlZ2lzdGVyIGEgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseQpAQCAtNDA1LDYgKzQwNyw3IEBACiBlcnJvdXQ6CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0woZ2VubF9yZWdpc3Rlcl9mYW1pbHkpOwogCiAvKioKICAqIGdlbmxfcmVnaXN0ZXJfZmFtaWx5X3dpdGhfb3BzIC0gcmVnaXN0ZXIgYSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5CkBAIC00ODUsNiArNDg4LDcgQEAKIAogCXJldHVybiAtRU5PRU5UOwogfQorRVhQT1JUX1NZTUJPTChnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KTsKIAogc3RhdGljIGludCBnZW5sX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgpCiB7CkBAIC04NzMsMTEgKzg3Nyw3IEBACiAJZm9yIChpID0gMDsgaSA8IEdFTkxfRkFNX1RBQl9TSVpFOyBpKyspCiAJCUlOSVRfTElTVF9IRUFEKCZmYW1pbHlfaHRbaV0pOwogCi0JZXJyID0gZ2VubF9yZWdpc3Rlcl9mYW1pbHkoJmdlbmxfY3RybCk7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gcHJvYmxlbTsKLQotCWVyciA9IGdlbmxfcmVnaXN0ZXJfb3BzKCZnZW5sX2N0cmwsICZnZW5sX2N0cmxfb3BzKTsKKwllcnIgPSBnZW5sX3JlZ2lzdGVyX2ZhbWlseV93aXRoX29wcygmZ2VubF9jdHJsLCAmZ2VubF9jdHJsX29wcywgMSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gcHJvYmxlbTsKIApAQCAtODk5LDExICs4OTksNiBAQAogCiBzdWJzeXNfaW5pdGNhbGwoZ2VubF9pbml0KTsKIAotRVhQT1JUX1NZTUJPTChnZW5sX3JlZ2lzdGVyX29wcyk7Ci1FWFBPUlRfU1lNQk9MKGdlbmxfdW5yZWdpc3Rlcl9vcHMpOwotRVhQT1JUX1NZTUJPTChnZW5sX3JlZ2lzdGVyX2ZhbWlseSk7Ci1FWFBPUlRfU1lNQk9MKGdlbmxfdW5yZWdpc3Rlcl9mYW1pbHkpOwotCiBzdGF0aWMgaW50IGdlbmxtc2dfbWNhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdW5zaWduZWQgbG9uZyBncm91cCwKIAkJCSBnZnBfdCBmbGFncykKIHsKZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCmluZGV4IDIwNzhhMjcuLjlhMTdmMjggMTAwNjQ0Ci0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwpAQCAtODMsNiArODMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJycXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRfdHN0YW1wLmg+CiAKICNpZmRlZiBDT05GSUdfSU5FVAogI2luY2x1ZGUgPG5ldC9pbmV0X2NvbW1vbi5oPgpAQCAtMjAyLDYgKzIwMyw3IEBACiAJdW5zaWduZWQgaW50CQl0cF9oZHJsZW47CiAJdW5zaWduZWQgaW50CQl0cF9yZXNlcnZlOwogCXVuc2lnbmVkIGludAkJdHBfbG9zczoxOworCXVuc2lnbmVkIGludAkJdHBfdHN0YW1wOwogCXN0cnVjdCBwYWNrZXRfdHlwZQlwcm90X2hvb2sgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIH07CiAKQEAgLTY1Niw2ICs2NTgsNyBAQAogCXN0cnVjdCBza19idWZmICpjb3B5X3NrYiA9IE5VTEw7CiAJc3RydWN0IHRpbWV2YWwgdHY7CiAJc3RydWN0IHRpbWVzcGVjIHRzOworCXN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyAqc2hod3RzdGFtcHMgPSBza2JfaHd0c3RhbXBzKHNrYik7CiAKIAlpZiAoc2tiLT5wa3RfdHlwZSA9PSBQQUNLRVRfTE9PUEJBQ0spCiAJCWdvdG8gZHJvcDsKQEAgLTczNyw3ICs3NDAsMTMgQEAKIAkJaC5oMS0+dHBfc25hcGxlbiA9IHNuYXBsZW47CiAJCWguaDEtPnRwX21hYyA9IG1hY29mZjsKIAkJaC5oMS0+dHBfbmV0ID0gbmV0b2ZmOwotCQlpZiAoc2tiLT50c3RhbXAudHY2NCkKKwkJaWYgKChwby0+dHBfdHN0YW1wICYgU09GX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkUpCisJCQkJJiYgc2hod3RzdGFtcHMtPnN5c3RzdGFtcC50djY0KQorCQkJdHYgPSBrdGltZV90b190aW1ldmFsKHNoaHd0c3RhbXBzLT5zeXN0c3RhbXApOworCQllbHNlIGlmICgocG8tPnRwX3RzdGFtcCAmIFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFKQorCQkJCSYmIHNoaHd0c3RhbXBzLT5od3RzdGFtcC50djY0KQorCQkJdHYgPSBrdGltZV90b190aW1ldmFsKHNoaHd0c3RhbXBzLT5od3RzdGFtcCk7CisJCWVsc2UgaWYgKHNrYi0+dHN0YW1wLnR2NjQpCiAJCQl0diA9IGt0aW1lX3RvX3RpbWV2YWwoc2tiLT50c3RhbXApOwogCQllbHNlCiAJCQlkb19nZXR0aW1lb2ZkYXkoJnR2KTsKQEAgLTc1MCw3ICs3NTksMTMgQEAKIAkJaC5oMi0+dHBfc25hcGxlbiA9IHNuYXBsZW47CiAJCWguaDItPnRwX21hYyA9IG1hY29mZjsKIAkJaC5oMi0+dHBfbmV0ID0gbmV0b2ZmOwotCQlpZiAoc2tiLT50c3RhbXAudHY2NCkKKwkJaWYgKChwby0+dHBfdHN0YW1wICYgU09GX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkUpCisJCQkJJiYgc2hod3RzdGFtcHMtPnN5c3RzdGFtcC50djY0KQorCQkJdHMgPSBrdGltZV90b190aW1lc3BlYyhzaGh3dHN0YW1wcy0+c3lzdHN0YW1wKTsKKwkJZWxzZSBpZiAoKHBvLT50cF90c3RhbXAgJiBTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSkKKwkJCQkmJiBzaGh3dHN0YW1wcy0+aHd0c3RhbXAudHY2NCkKKwkJCXRzID0ga3RpbWVfdG9fdGltZXNwZWMoc2hod3RzdGFtcHMtPmh3dHN0YW1wKTsKKwkJZWxzZSBpZiAoc2tiLT50c3RhbXAudHY2NCkKIAkJCXRzID0ga3RpbWVfdG9fdGltZXNwZWMoc2tiLT50c3RhbXApOwogCQllbHNlCiAJCQlnZXRuc3RpbWVvZmRheSgmdHMpOwpAQCAtMjAyNyw2ICsyMDQyLDE4IEBACiAJCXBvLT5oYXNfdm5ldF9oZHIgPSAhIXZhbDsKIAkJcmV0dXJuIDA7CiAJfQorCWNhc2UgUEFDS0VUX1RJTUVTVEFNUDoKKwl7CisJCWludCB2YWw7CisKKwkJaWYgKG9wdGxlbiAhPSBzaXplb2YodmFsKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoY29weV9mcm9tX3VzZXIoJnZhbCwgb3B0dmFsLCBzaXplb2YodmFsKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlwby0+dHBfdHN0YW1wID0gdmFsOworCQlyZXR1cm4gMDsKKwl9CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9QUk9UT09QVDsKIAl9CkBAIC0yMTE5LDYgKzIxNDYsMTIgQEAKIAkJdmFsID0gcG8tPnRwX2xvc3M7CiAJCWRhdGEgPSAmdmFsOwogCQlicmVhazsKKwljYXNlIFBBQ0tFVF9USU1FU1RBTVA6CisJCWlmIChsZW4gPiBzaXplb2YoaW50KSkKKwkJCWxlbiA9IHNpemVvZihpbnQpOworCQl2YWwgPSBwby0+dHBfdHN0YW1wOworCQlkYXRhID0gJnZhbDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9QUk9UT09QVDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L3BlcC5jIGIvbmV0L3Bob25ldC9wZXAuYwppbmRleCA5NGQ3MmU4Li5iMmEzYWU2IDEwMDY0NAotLS0gYS9uZXQvcGhvbmV0L3BlcC5jCisrKyBiL25ldC9waG9uZXQvcGVwLmMKQEAgLTY5OCw2ICs2OTgsNyBAQAogCQluZXdzayA9IE5VTEw7CiAJCWdvdG8gb3V0OwogCX0KKwlrZnJlZV9za2Iob3NrYik7CiAKIAlzb2NrX2hvbGQoc2spOwogCXBlcF9zayhuZXdzayktPmxpc3RlbmVyID0gc2s7CmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L3BuX2Rldi5jIGIvbmV0L3Bob25ldC9wbl9kZXYuYwppbmRleCBjMzNkYTY1Li5iMThlNDhmIDEwMDY0NAotLS0gYS9uZXQvcGhvbmV0L3BuX2Rldi5jCisrKyBiL25ldC9waG9uZXQvcG5fZGV2LmMKQEAgLTE2Miw2ICsxNjIsMTQgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgdm9pZCBwaG9uZXRfZGV2aWNlX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgcGhvbmV0X2RldmljZSAqcG5kOworCisJcG5kID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBwaG9uZXRfZGV2aWNlLCByY3UpOworCWtmcmVlKHBuZCk7Cit9CisKIGludCBwaG9uZXRfYWRkcmVzc19kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggYWRkcikKIHsKIAlzdHJ1Y3QgcGhvbmV0X2RldmljZV9saXN0ICpwbmRldnMgPSBwaG9uZXRfZGV2aWNlX2xpc3QoZGV2X25ldChkZXYpKTsKQEAgLTE3OSwxMCArMTg3LDkgQEAKIAkJcG5kID0gTlVMTDsKIAltdXRleF91bmxvY2soJnBuZGV2cy0+bG9jayk7CiAKLQlpZiAocG5kKSB7Ci0JCXN5bmNocm9uaXplX3JjdSgpOwotCQlrZnJlZShwbmQpOwotCX0KKwlpZiAocG5kKQorCQljYWxsX3JjdSgmcG5kLT5yY3UsIHBob25ldF9kZXZpY2VfcmN1X2ZyZWUpOworCiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3Jvc2Uvcm9zZV9yb3V0ZS5jIGIvbmV0L3Jvc2Uvcm9zZV9yb3V0ZS5jCmluZGV4IGNiYzI0NGExLi5iNGZkYWFjIDEwMDY0NAotLS0gYS9uZXQvcm9zZS9yb3NlX3JvdXRlLmMKKysrIGIvbmV0L3Jvc2Uvcm9zZV9yb3V0ZS5jCkBAIC0xMDksNyArMTA5LDkgQEAKIAkJaW5pdF90aW1lcigmcm9zZV9uZWlnaC0+dDB0aW1lcik7CiAKIAkJaWYgKHJvc2Vfcm91dGUtPm5kaWdpcyAhPSAwKSB7Ci0JCQlpZiAoKHJvc2VfbmVpZ2gtPmRpZ2lwZWF0ID0ga21hbGxvYyhzaXplb2YoYXgyNV9kaWdpKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwkJCXJvc2VfbmVpZ2gtPmRpZ2lwZWF0ID0KKwkJCQlrbWFsbG9jKHNpemVvZihheDI1X2RpZ2kpLCBHRlBfQVRPTUlDKTsKKwkJCWlmIChyb3NlX25laWdoLT5kaWdpcGVhdCA9PSBOVUxMKSB7CiAJCQkJa2ZyZWUocm9zZV9uZWlnaCk7CiAJCQkJcmVzID0gLUVOT01FTTsKIAkJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci1wZWVyLmMgYi9uZXQvcnhycGMvYXItcGVlci5jCmluZGV4IGYwZjg1YjAuLjlmMTcyOWIgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9hci1wZWVyLmMKKysrIGIvbmV0L3J4cnBjL2FyLXBlZXIuYwpAQCAtNjQsOCArNjQsOCBAQAogCQlyZXR1cm47CiAJfQogCi0JcGVlci0+aWZfbXR1ID0gZHN0X210dSgmcnQtPnUuZHN0KTsKLQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKKwlwZWVyLT5pZl9tdHUgPSBkc3RfbXR1KCZydC0+ZHN0KTsKKwlkc3RfcmVsZWFzZSgmcnQtPmRzdCk7CiAKIAlfbGVhdmUoIiBbaWZfbXR1ICV1XSIsIHBlZXItPmlmX210dSk7CiB9CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2FwaS5jIGIvbmV0L3NjaGVkL2FjdF9hcGkuYwppbmRleCA5NzIzNzhmLi4yM2IyNWY4IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2FwaS5jCisrKyBiL25ldC9zY2hlZC9hY3RfYXBpLmMKQEAgLTI2LDYgKzI2LDExIEBACiAjaW5jbHVkZSA8bmV0L2FjdF9hcGkuaD4KICNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgogCitzdGF0aWMgdm9pZCB0Y2ZfY29tbW9uX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlrZnJlZShjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHRjZl9jb21tb24sIHRjZmNfcmN1KSk7Cit9CisKIHZvaWQgdGNmX2hhc2hfZGVzdHJveShzdHJ1Y3QgdGNmX2NvbW1vbiAqcCwgc3RydWN0IHRjZl9oYXNoaW5mbyAqaGluZm8pCiB7CiAJdW5zaWduZWQgaW50IGggPSB0Y2ZfaGFzaChwLT50Y2ZjX2luZGV4LCBoaW5mby0+aG1hc2spOwpAQCAtMzgsNyArNDMsMTEgQEAKIAkJCXdyaXRlX3VubG9ja19iaChoaW5mby0+bG9jayk7CiAJCQlnZW5fa2lsbF9lc3RpbWF0b3IoJnAtPnRjZmNfYnN0YXRzLAogCQkJCQkgICAmcC0+dGNmY19yYXRlX2VzdCk7Ci0JCQlrZnJlZShwKTsKKwkJCS8qCisJCQkgKiBnZW5fZXN0aW1hdG9yIGVzdF90aW1lcigpIG1pZ2h0IGFjY2VzcyBwLT50Y2ZjX2xvY2sKKwkJCSAqIG9yIGJzdGF0cywgd2FpdCBhIFJDVSBncmFjZSBwZXJpb2QgYmVmb3JlIGZyZWVpbmcgcAorCQkJICovCisJCQljYWxsX3JjdSgmcC0+dGNmY19yY3UsIHRjZl9jb21tb25fZnJlZV9yY3UpOwogCQkJcmV0dXJuOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9taXJyZWQuYyBiL25ldC9zY2hlZC9hY3RfbWlycmVkLmMKaW5kZXggYzBiNjg2My4uMTFmMTk1YSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9taXJyZWQuYworKysgYi9uZXQvc2NoZWQvYWN0X21pcnJlZC5jCkBAIC0zMyw2ICszMyw3IEBACiBzdGF0aWMgc3RydWN0IHRjZl9jb21tb24gKnRjZl9taXJyZWRfaHRbTUlSUkVEX1RBQl9NQVNLICsgMV07CiBzdGF0aWMgdTMyIG1pcnJlZF9pZHhfZ2VuOwogc3RhdGljIERFRklORV9SV0xPQ0sobWlycmVkX2xvY2spOworc3RhdGljIExJU1RfSEVBRChtaXJyZWRfbGlzdCk7CiAKIHN0YXRpYyBzdHJ1Y3QgdGNmX2hhc2hpbmZvIG1pcnJlZF9oYXNoX2luZm8gPSB7CiAJLmh0YWIJPQl0Y2ZfbWlycmVkX2h0LApAQCAtNDcsNyArNDgsOSBAQAogCQkJbS0+dGNmX2JpbmRjbnQtLTsKIAkJbS0+dGNmX3JlZmNudC0tOwogCQlpZighbS0+dGNmX2JpbmRjbnQgJiYgbS0+dGNmX3JlZmNudCA8PSAwKSB7Ci0JCQlkZXZfcHV0KG0tPnRjZm1fZGV2KTsKKwkJCWxpc3RfZGVsKCZtLT50Y2ZtX2xpc3QpOworCQkJaWYgKG0tPnRjZm1fZGV2KQorCQkJCWRldl9wdXQobS0+dGNmbV9kZXYpOwogCQkJdGNmX2hhc2hfZGVzdHJveSgmbS0+Y29tbW9uLCAmbWlycmVkX2hhc2hfaW5mbyk7CiAJCQlyZXR1cm4gMTsKIAkJfQpAQCAtMTM0LDggKzEzNywxMCBAQAogCQltLT50Y2ZtX29rX3B1c2ggPSBva19wdXNoOwogCX0KIAlzcGluX3VubG9ja19iaCgmbS0+dGNmX2xvY2spOwotCWlmIChyZXQgPT0gQUNUX1BfQ1JFQVRFRCkKKwlpZiAocmV0ID09IEFDVF9QX0NSRUFURUQpIHsKKwkJbGlzdF9hZGQoJm0tPnRjZm1fbGlzdCwgJm1pcnJlZF9saXN0KTsKIAkJdGNmX2hhc2hfaW5zZXJ0KHBjLCAmbWlycmVkX2hhc2hfaW5mbyk7CisJfQogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE2MCwyMiArMTY1LDI3IEBACiAKIAlzcGluX2xvY2soJm0tPnRjZl9sb2NrKTsKIAltLT50Y2ZfdG0ubGFzdHVzZSA9IGppZmZpZXM7CisJbS0+dGNmX2JzdGF0cy5ieXRlcyArPSBxZGlzY19wa3RfbGVuKHNrYik7CisJbS0+dGNmX2JzdGF0cy5wYWNrZXRzKys7CiAKIAlkZXYgPSBtLT50Y2ZtX2RldjsKKwlpZiAoIWRldikgeworCQlwcmludGtfb25jZShLRVJOX05PVElDRSAidGMgbWlycmVkOiB0YXJnZXQgZGV2aWNlIGlzIGdvbmVcbiIpOworCQlnb3RvIG91dDsKKwl9CisKIAlpZiAoIShkZXYtPmZsYWdzICYgSUZGX1VQKSkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJfbm90aWNlKCJ0YyBtaXJyZWQgdG8gSG91c3RvbjogZGV2aWNlICVzIGlzIGdvbmUhXG4iLAorCQkJcHJfbm90aWNlKCJ0YyBtaXJyZWQgdG8gSG91c3RvbjogZGV2aWNlICVzIGlzIGRvd25cbiIsCiAJCQkJICBkZXYtPm5hbWUpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlza2IyID0gc2tiX2FjdF9jbG9uZShza2IsIEdGUF9BVE9NSUMpOworCWF0ID0gR19UQ19BVChza2ItPnRjX3ZlcmQpOworCXNrYjIgPSBza2JfYWN0X2Nsb25lKHNrYiwgR0ZQX0FUT01JQywgbS0+dGNmX2FjdGlvbik7CiAJaWYgKHNrYjIgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKLQltLT50Y2ZfYnN0YXRzLmJ5dGVzICs9IHFkaXNjX3BrdF9sZW4oc2tiMik7Ci0JbS0+dGNmX2JzdGF0cy5wYWNrZXRzKys7Ci0JYXQgPSBHX1RDX0FUKHNrYi0+dGNfdmVyZCk7CiAJaWYgKCEoYXQgJiBBVF9FR1JFU1MpKSB7CiAJCWlmIChtLT50Y2ZtX29rX3B1c2gpCiAJCQlza2JfcHVzaChza2IyLCBza2IyLT5kZXYtPmhhcmRfaGVhZGVyX2xlbik7CkBAIC0xODUsMTYgKzE5NSwxNCBAQAogCWlmIChtLT50Y2ZtX2VhY3Rpb24gIT0gVENBX0VHUkVTU19NSVJST1IpCiAJCXNrYjItPnRjX3ZlcmQgPSBTRVRfVENfRlJPTShza2IyLT50Y192ZXJkLCBhdCk7CiAKLQlza2IyLT5kZXYgPSBkZXY7CiAJc2tiMi0+c2tiX2lpZiA9IHNrYi0+ZGV2LT5pZmluZGV4OworCXNrYjItPmRldiA9IGRldjsKIAlkZXZfcXVldWVfeG1pdChza2IyKTsKIAllcnIgPSAwOwogCiBvdXQ6CiAJaWYgKGVycikgewogCQltLT50Y2ZfcXN0YXRzLm92ZXJsaW1pdHMrKzsKLQkJbS0+dGNmX2JzdGF0cy5ieXRlcyArPSBxZGlzY19wa3RfbGVuKHNrYik7Ci0JCW0tPnRjZl9ic3RhdHMucGFja2V0cysrOwogCQkvKiBzaG91bGQgd2UgYmUgYXNraW5nIGZvciBwYWNrZXQgdG8gYmUgZHJvcHBlZD8KIAkJICogbWF5IG1ha2Ugc2Vuc2UgZm9yIHJlZGlyZWN0IGNhc2Ugb25seQogCQkgKi8KQEAgLTIzMiw2ICsyNDAsMjggQEAKIAlyZXR1cm4gLTE7CiB9CiAKK3N0YXRpYyBpbnQgbWlycmVkX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHB0cjsKKwlzdHJ1Y3QgdGNmX21pcnJlZCAqbTsKKworCWlmIChldmVudCA9PSBORVRERVZfVU5SRUdJU1RFUikKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShtLCAmbWlycmVkX2xpc3QsIHRjZm1fbGlzdCkgeworCQkJaWYgKG0tPnRjZm1fZGV2ID09IGRldikgeworCQkJCWRldl9wdXQoZGV2KTsKKwkJCQltLT50Y2ZtX2RldiA9IE5VTEw7CisJCQl9CisJCX0KKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBtaXJyZWRfZGV2aWNlX25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsID0gbWlycmVkX2RldmljZV9ldmVudCwKK307CisKKwogc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9taXJyZWRfb3BzID0gewogCS5raW5kCQk9CSJtaXJyZWQiLAogCS5oaW5mbwkJPQkmbWlycmVkX2hhc2hfaW5mbywKQEAgLTI1MiwxMiArMjgyLDE3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG1pcnJlZF9pbml0X21vZHVsZSh2b2lkKQogeworCWludCBlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJm1pcnJlZF9kZXZpY2Vfbm90aWZpZXIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKIAlwcl9pbmZvKCJNaXJyb3IvcmVkaXJlY3QgYWN0aW9uIG9uXG4iKTsKIAlyZXR1cm4gdGNmX3JlZ2lzdGVyX2FjdGlvbigmYWN0X21pcnJlZF9vcHMpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbWlycmVkX2NsZWFudXBfbW9kdWxlKHZvaWQpCiB7CisJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJm1pcnJlZF9kZXZpY2Vfbm90aWZpZXIpOwogCXRjZl91bnJlZ2lzdGVyX2FjdGlvbigmYWN0X21pcnJlZF9vcHMpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X25hdC5jIGIvbmV0L3NjaGVkL2FjdF9uYXQuYwppbmRleCA1NzA5NDk0Li5kMDM4NmE0IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X25hdC5jCisrKyBiL25ldC9zY2hlZC9hY3RfbmF0LmMKQEAgLTIwNSw3ICsyMDUsNyBAQAogCXsKIAkJc3RydWN0IGljbXBoZHIgKmljbXBoOwogCi0JCWlmICghcHNrYl9tYXlfcHVsbChza2IsIGlobCArIHNpemVvZigqaWNtcGgpICsgc2l6ZW9mKCppcGgpKSkKKwkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaWhsICsgc2l6ZW9mKCppY21waCkpKQogCQkJZ290byBkcm9wOwogCiAJCWljbXBoID0gKHZvaWQgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBpaGwpOwpAQCAtMjE1LDYgKzIxNSwxMCBAQAogCQkgICAgKGljbXBoLT50eXBlICE9IElDTVBfUEFSQU1FVEVSUFJPQikpCiAJCQlicmVhazsKIAorCQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBpaGwgKyBzaXplb2YoKmljbXBoKSArIHNpemVvZigqaXBoKSkpCisJCQlnb3RvIGRyb3A7CisKKwkJaWNtcGggPSAodm9pZCAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIGlobCk7CiAJCWlwaCA9ICh2b2lkICopKGljbXBoICsgMSk7CiAJCWlmIChlZ3Jlc3MpCiAJCQlhZGRyID0gaXBoLT5kYWRkcjsKQEAgLTI0Myw3ICsyNDcsNyBAQAogCQkJaXBoLT5zYWRkciA9IG5ld19hZGRyOwogCiAJCWluZXRfcHJvdG9fY3N1bV9yZXBsYWNlNCgmaWNtcGgtPmNoZWNrc3VtLCBza2IsIGFkZHIsIG5ld19hZGRyLAotCQkJCQkgMSk7CisJCQkJCSAwKTsKIAkJYnJlYWs7CiAJfQogCWRlZmF1bHQ6CkBAIC0yNjUsNDAgKzI2OSwyOSBAQAogewogCXVuc2lnbmVkIGNoYXIgKmIgPSBza2JfdGFpbF9wb2ludGVyKHNrYik7CiAJc3RydWN0IHRjZl9uYXQgKnAgPSBhLT5wcml2OwotCXN0cnVjdCB0Y19uYXQgKm9wdDsKKwlzdHJ1Y3QgdGNfbmF0IG9wdDsKIAlzdHJ1Y3QgdGNmX3QgdDsKLQlpbnQgczsKIAotCXMgPSBzaXplb2YoKm9wdCk7CisJb3B0Lm9sZF9hZGRyID0gcC0+b2xkX2FkZHI7CisJb3B0Lm5ld19hZGRyID0gcC0+bmV3X2FkZHI7CisJb3B0Lm1hc2sgPSBwLT5tYXNrOworCW9wdC5mbGFncyA9IHAtPmZsYWdzOwogCi0JLyogbmV0bGluayBzcGlubG9ja3MgaGVsZCBhYm92ZSB1cyAtIG11c3QgdXNlIEFUT01JQyAqLwotCW9wdCA9IGt6YWxsb2MocywgR0ZQX0FUT01JQyk7Ci0JaWYgKHVubGlrZWx5KCFvcHQpKQotCQlyZXR1cm4gLUVOT0JVRlM7CisJb3B0LmluZGV4ID0gcC0+dGNmX2luZGV4OworCW9wdC5hY3Rpb24gPSBwLT50Y2ZfYWN0aW9uOworCW9wdC5yZWZjbnQgPSBwLT50Y2ZfcmVmY250IC0gcmVmOworCW9wdC5iaW5kY250ID0gcC0+dGNmX2JpbmRjbnQgLSBiaW5kOwogCi0Jb3B0LT5vbGRfYWRkciA9IHAtPm9sZF9hZGRyOwotCW9wdC0+bmV3X2FkZHIgPSBwLT5uZXdfYWRkcjsKLQlvcHQtPm1hc2sgPSBwLT5tYXNrOwotCW9wdC0+ZmxhZ3MgPSBwLT5mbGFnczsKLQotCW9wdC0+aW5kZXggPSBwLT50Y2ZfaW5kZXg7Ci0Jb3B0LT5hY3Rpb24gPSBwLT50Y2ZfYWN0aW9uOwotCW9wdC0+cmVmY250ID0gcC0+dGNmX3JlZmNudCAtIHJlZjsKLQlvcHQtPmJpbmRjbnQgPSBwLT50Y2ZfYmluZGNudCAtIGJpbmQ7Ci0KLQlOTEFfUFVUKHNrYiwgVENBX05BVF9QQVJNUywgcywgb3B0KTsKKwlOTEFfUFVUKHNrYiwgVENBX05BVF9QQVJNUywgc2l6ZW9mKG9wdCksICZvcHQpOwogCXQuaW5zdGFsbCA9IGppZmZpZXNfdG9fY2xvY2tfdChqaWZmaWVzIC0gcC0+dGNmX3RtLmluc3RhbGwpOwogCXQubGFzdHVzZSA9IGppZmZpZXNfdG9fY2xvY2tfdChqaWZmaWVzIC0gcC0+dGNmX3RtLmxhc3R1c2UpOwogCXQuZXhwaXJlcyA9IGppZmZpZXNfdG9fY2xvY2tfdChwLT50Y2ZfdG0uZXhwaXJlcyk7CiAJTkxBX1BVVChza2IsIFRDQV9OQVRfVE0sIHNpemVvZih0KSwgJnQpOwogCi0Ja2ZyZWUob3B0KTsKLQogCXJldHVybiBza2ItPmxlbjsKIAogbmxhX3B1dF9mYWlsdXJlOgogCW5sbXNnX3RyaW0oc2tiLCBiKTsKLQlrZnJlZShvcHQpOwogCXJldHVybiAtMTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9wZWRpdC5jIGIvbmV0L3NjaGVkL2FjdF9wZWRpdC5jCmluZGV4IDUwZTNkOTQuLmEwNTkzYzkgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfcGVkaXQuYworKysgYi9uZXQvc2NoZWQvYWN0X3BlZGl0LmMKQEAgLTEyNyw4ICsxMjcsNyBAQAogCWludCBpLCBtdW5nZWQgPSAwOwogCXVuc2lnbmVkIGludCBvZmY7CiAKLQlpZiAoIShza2ItPnRjX3ZlcmQgJiBUQ19PSzJNVU5HRSkpIHsKLQkJLyogc2hvdWxkIHdlIHNldCBza2ItPmNsb25lZD8gKi8KKwlpZiAoc2tiX2Nsb25lZChza2IpKSB7CiAJCWlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQykpIHsKIAkJCXJldHVybiBwLT50Y2ZfYWN0aW9uOwogCQl9CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X3BvbGljZS5jIGIvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYwppbmRleCA2NTRmNzNkLi41MzdhNDg3IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X3BvbGljZS5jCisrKyBiL25ldC9zY2hlZC9hY3RfcG9saWNlLmMKQEAgLTk3LDYgKzk3LDExIEBACiAJZ290byBkb25lOwogfQogCitzdGF0aWMgdm9pZCB0Y2ZfcG9saWNlX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlrZnJlZShjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHRjZl9wb2xpY2UsIHRjZl9yY3UpKTsKK30KKwogc3RhdGljIHZvaWQgdGNmX3BvbGljZV9kZXN0cm95KHN0cnVjdCB0Y2ZfcG9saWNlICpwKQogewogCXVuc2lnbmVkIGludCBoID0gdGNmX2hhc2gocC0+dGNmX2luZGV4LCBQT0xfVEFCX01BU0spOwpAQCAtMTEzLDcgKzExOCwxMSBAQAogCQkJCXFkaXNjX3B1dF9ydGFiKHAtPnRjZnBfUl90YWIpOwogCQkJaWYgKHAtPnRjZnBfUF90YWIpCiAJCQkJcWRpc2NfcHV0X3J0YWIocC0+dGNmcF9QX3RhYik7Ci0JCQlrZnJlZShwKTsKKwkJCS8qCisJCQkgKiBnZW5fZXN0aW1hdG9yIGVzdF90aW1lcigpIG1pZ2h0IGFjY2VzcyBwLT50Y2ZfbG9jaworCQkJICogb3IgYnN0YXRzLCB3YWl0IGEgUkNVIGdyYWNlIHBlcmlvZCBiZWZvcmUgZnJlZWluZyBwCisJCQkgKi8KKwkJCWNhbGxfcmN1KCZwLT50Y2ZfcmN1LCB0Y2ZfcG9saWNlX2ZyZWVfcmN1KTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTM5Nyw2ICs0MDYsNyBAQAogcG9saWNlX2NsZWFudXBfbW9kdWxlKHZvaWQpCiB7CiAJdGNmX3VucmVnaXN0ZXJfYWN0aW9uKCZhY3RfcG9saWNlX29wcyk7CisJcmN1X2JhcnJpZXIoKTsgLyogV2FpdCBmb3IgY29tcGxldGlvbiBvZiBjYWxsX3JjdSgpJ3MgKHRjZl9wb2xpY2VfZnJlZV9yY3UpICovCiB9CiAKIG1vZHVsZV9pbml0KHBvbGljZV9pbml0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X3NpbXBsZS5jIGIvbmV0L3NjaGVkL2FjdF9zaW1wbGUuYwppbmRleCAxYjRiYzY5Li40YTFkNjQwIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X3NpbXBsZS5jCisrKyBiL25ldC9zY2hlZC9hY3Rfc2ltcGxlLmMKQEAgLTczLDEwICs3MywxMCBAQAogCiBzdGF0aWMgaW50IGFsbG9jX2RlZmRhdGEoc3RydWN0IHRjZl9kZWZhY3QgKmQsIGNoYXIgKmRlZmRhdGEpCiB7Ci0JZC0+dGNmZF9kZWZkYXRhID0ga3N0cm5kdXAoZGVmZGF0YSwgU0lNUF9NQVhfREFUQSwgR0ZQX0tFUk5FTCk7CisJZC0+dGNmZF9kZWZkYXRhID0ga3phbGxvYyhTSU1QX01BWF9EQVRBLCBHRlBfS0VSTkVMKTsKIAlpZiAodW5saWtlbHkoIWQtPnRjZmRfZGVmZGF0YSkpCiAJCXJldHVybiAtRU5PTUVNOwotCisJc3RybGNweShkLT50Y2ZkX2RlZmRhdGEsIGRlZmRhdGEsIFNJTVBfTUFYX0RBVEEpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3UzMi5jIGIvbmV0L3NjaGVkL2Nsc191MzIuYwppbmRleCA0ZjUyMjE0Li43NDE2YTVjIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX3UzMi5jCisrKyBiL25ldC9zY2hlZC9jbHNfdTMyLmMKQEAgLTEzNCwxMCArMTM0LDEyIEBACiAjZW5kaWYKIAogCQlmb3IgKGkgPSBuLT5zZWwubmtleXM7IGk+MDsgaS0tLCBrZXkrKykgewotCQkJdW5zaWduZWQgaW50IHRvZmY7CisJCQlpbnQgdG9mZiA9IG9mZiArIGtleS0+b2ZmICsgKG9mZjIgJiBrZXktPm9mZm1hc2spOwogCQkJX19iZTMyICpkYXRhLCBfZGF0YTsKIAotCQkJdG9mZiA9IG9mZiArIGtleS0+b2ZmICsgKG9mZjIgJiBrZXktPm9mZm1hc2spOworCQkJaWYgKHNrYl9oZWFkcm9vbShza2IpICsgdG9mZiA8IDApCisJCQkJZ290byBvdXQ7CisKIAkJCWRhdGEgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCB0b2ZmLCA0LCAmX2RhdGEpOwogCQkJaWYgKCFkYXRhKQogCQkJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9hdG0uYyBiL25ldC9zY2hlZC9zY2hfYXRtLmMKaW5kZXggZmNiYjg2YS4uZTExNGYyMyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9hdG0uYworKysgYi9uZXQvc2NoZWQvc2NoX2F0bS5jCkBAIC01Miw3ICs1Miw3IEBACiAJaW50CQkJcmVmOwkJLyogcmVmZXJlbmNlIGNvdW50ICovCiAJc3RydWN0IGduZXRfc3RhdHNfYmFzaWNfcGFja2VkCWJzdGF0czsKIAlzdHJ1Y3QgZ25ldF9zdGF0c19xdWV1ZQlxc3RhdHM7Ci0Jc3RydWN0IGF0bV9mbG93X2RhdGEJKm5leHQ7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogCXN0cnVjdCBhdG1fZmxvd19kYXRhCSpleGNlc3M7CS8qIGZsb3cgZm9yIGV4Y2VzcyB0cmFmZmljOwogCQkJCQkJICAgTlVMTCB0byBzZXQgQ0xQIGluc3RlYWQgKi8KIAlpbnQJCQloZHJfbGVuOwpAQCAtNjEsMzQgKzYxLDIzIEBACiAKIHN0cnVjdCBhdG1fcWRpc2NfZGF0YSB7CiAJc3RydWN0IGF0bV9mbG93X2RhdGEJbGluazsJCS8qIHVuY2xhc3NpZmllZCBza2JzIGdvIGhlcmUgKi8KLQlzdHJ1Y3QgYXRtX2Zsb3dfZGF0YQkqZmxvd3M7CQkvKiBOQjogImxpbmsiIGlzIGFsc28gb24gdGhpcworCXN0cnVjdCBsaXN0X2hlYWQJZmxvd3M7CQkvKiBOQjogImxpbmsiIGlzIGFsc28gb24gdGhpcwogCQkJCQkJICAgbGlzdCAqLwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAl0YXNrOwkJLyogZGVxdWV1ZSB0YXNrbGV0ICovCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENsYXNzL2Zsb3cgb3BlcmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgZmluZF9mbG93KHN0cnVjdCBhdG1fcWRpc2NfZGF0YSAqcWRpc2MsIHN0cnVjdCBhdG1fZmxvd19kYXRhICpmbG93KQotewotCXN0cnVjdCBhdG1fZmxvd19kYXRhICp3YWxrOwotCi0JcHJfZGVidWcoImZpbmRfZmxvdyhxZGlzYyAlcCxmbG93ICVwKVxuIiwgcWRpc2MsIGZsb3cpOwotCWZvciAod2FsayA9IHFkaXNjLT5mbG93czsgd2Fsazsgd2FsayA9IHdhbGstPm5leHQpCi0JCWlmICh3YWxrID09IGZsb3cpCi0JCQlyZXR1cm4gMTsKLQlwcl9kZWJ1ZygiZmluZF9mbG93OiBub3QgZm91bmRcbiIpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhdG1fZmxvd19kYXRhICpsb29rdXBfZmxvdyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGNsYXNzaWQpCiB7CiAJc3RydWN0IGF0bV9xZGlzY19kYXRhICpwID0gcWRpc2NfcHJpdihzY2gpOwogCXN0cnVjdCBhdG1fZmxvd19kYXRhICpmbG93OwogCi0JZm9yIChmbG93ID0gcC0+Zmxvd3M7IGZsb3c7IGZsb3cgPSBmbG93LT5uZXh0KQorCWxpc3RfZm9yX2VhY2hfZW50cnkoZmxvdywgJnAtPmZsb3dzLCBsaXN0KSB7CiAJCWlmIChmbG93LT5jbGFzc2lkID09IGNsYXNzaWQpCi0JCQlicmVhazsKLQlyZXR1cm4gZmxvdzsKKwkJCXJldHVybiBmbG93OworCX0KKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIGludCBhdG1fdGNfZ3JhZnQoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnLApAQCAtOTksNyArODgsNyBAQAogCiAJcHJfZGVidWcoImF0bV90Y19ncmFmdChzY2ggJXAsW3FkaXNjICVwXSxmbG93ICVwLG5ldyAlcCxvbGQgJXApXG4iLAogCQlzY2gsIHAsIGZsb3csIG5ldywgb2xkKTsKLQlpZiAoIWZpbmRfZmxvdyhwLCBmbG93KSkKKwlpZiAobGlzdF9lbXB0eSgmZmxvdy0+bGlzdCkpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmICghbmV3KQogCQluZXcgPSAmbm9vcF9xZGlzYzsKQEAgLTE0NiwyMCArMTM1LDEyIEBACiB7CiAJc3RydWN0IGF0bV9xZGlzY19kYXRhICpwID0gcWRpc2NfcHJpdihzY2gpOwogCXN0cnVjdCBhdG1fZmxvd19kYXRhICpmbG93ID0gKHN0cnVjdCBhdG1fZmxvd19kYXRhICopY2w7Ci0Jc3RydWN0IGF0bV9mbG93X2RhdGEgKipwcmV2OwogCiAJcHJfZGVidWcoImF0bV90Y19wdXQoc2NoICVwLFtxZGlzYyAlcF0sZmxvdyAlcClcbiIsIHNjaCwgcCwgZmxvdyk7CiAJaWYgKC0tZmxvdy0+cmVmKQogCQlyZXR1cm47CiAJcHJfZGVidWcoImF0bV90Y19wdXQ6IGRlc3Ryb3lpbmdcbiIpOwotCWZvciAocHJldiA9ICZwLT5mbG93czsgKnByZXY7IHByZXYgPSAmKCpwcmV2KS0+bmV4dCkKLQkJaWYgKCpwcmV2ID09IGZsb3cpCi0JCQlicmVhazsKLQlpZiAoISpwcmV2KSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgImF0bV90Y19wdXQ6IGNsYXNzICVwIG5vdCBmb3VuZFxuIiwgZmxvdyk7Ci0JCXJldHVybjsKLQl9Ci0JKnByZXYgPSBmbG93LT5uZXh0OworCWxpc3RfZGVsX2luaXQoJmZsb3ctPmxpc3QpOwogCXByX2RlYnVnKCJhdG1fdGNfcHV0OiBxZGlzYyAlcFxuIiwgZmxvdy0+cSk7CiAJcWRpc2NfZGVzdHJveShmbG93LT5xKTsKIAl0Y2ZfZGVzdHJveV9jaGFpbigmZmxvdy0+ZmlsdGVyX2xpc3QpOwpAQCAtMjc0LDcgKzI1NSw3IEBACiAJCQllcnJvciA9IC1FSU5WQUw7CiAJCQlnb3RvIGVycl9vdXQ7CiAJCX0KLQkJaWYgKGZpbmRfZmxvdyhwLCBmbG93KSkgeworCQlpZiAoIWxpc3RfZW1wdHkoJmZsb3ctPmxpc3QpKSB7CiAJCQllcnJvciA9IC1FRVhJU1Q7CiAJCQlnb3RvIGVycl9vdXQ7CiAJCX0KQEAgLTMxMyw4ICsyOTQsNyBAQAogCWZsb3ctPmNsYXNzaWQgPSBjbGFzc2lkOwogCWZsb3ctPnJlZiA9IDE7CiAJZmxvdy0+ZXhjZXNzID0gZXhjZXNzOwotCWZsb3ctPm5leHQgPSBwLT5saW5rLm5leHQ7Ci0JcC0+bGluay5uZXh0ID0gZmxvdzsKKwlsaXN0X2FkZCgmZmxvdy0+bGlzdCwgJnAtPmxpbmsubGlzdCk7CiAJZmxvdy0+aGRyX2xlbiA9IGhkcl9sZW47CiAJaWYgKGhkcikKIAkJbWVtY3B5KGZsb3ctPmhkciwgaGRyLCBoZHJfbGVuKTsKQEAgLTMzNSw3ICszMTUsNyBAQAogCXN0cnVjdCBhdG1fZmxvd19kYXRhICpmbG93ID0gKHN0cnVjdCBhdG1fZmxvd19kYXRhICopYXJnOwogCiAJcHJfZGVidWcoImF0bV90Y19kZWxldGUoc2NoICVwLFtxZGlzYyAlcF0sZmxvdyAlcClcbiIsIHNjaCwgcCwgZmxvdyk7Ci0JaWYgKCFmaW5kX2Zsb3cocWRpc2NfcHJpdihzY2gpLCBmbG93KSkKKwlpZiAobGlzdF9lbXB0eSgmZmxvdy0+bGlzdCkpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChmbG93LT5maWx0ZXJfbGlzdCB8fCBmbG93ID09ICZwLT5saW5rKQogCQlyZXR1cm4gLUVCVVNZOwpAQCAtMzYxLDEyICszNDEsMTIgQEAKIAlwcl9kZWJ1ZygiYXRtX3RjX3dhbGsoc2NoICVwLFtxZGlzYyAlcF0sd2Fsa2VyICVwKVxuIiwgc2NoLCBwLCB3YWxrZXIpOwogCWlmICh3YWxrZXItPnN0b3ApCiAJCXJldHVybjsKLQlmb3IgKGZsb3cgPSBwLT5mbG93czsgZmxvdzsgZmxvdyA9IGZsb3ctPm5leHQpIHsKLQkJaWYgKHdhbGtlci0+Y291bnQgPj0gd2Fsa2VyLT5za2lwKQotCQkJaWYgKHdhbGtlci0+Zm4oc2NoLCAodW5zaWduZWQgbG9uZylmbG93LCB3YWxrZXIpIDwgMCkgewotCQkJCXdhbGtlci0+c3RvcCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeShmbG93LCAmcC0+Zmxvd3MsIGxpc3QpIHsKKwkJaWYgKHdhbGtlci0+Y291bnQgPj0gd2Fsa2VyLT5za2lwICYmCisJCSAgICB3YWxrZXItPmZuKHNjaCwgKHVuc2lnbmVkIGxvbmcpZmxvdywgd2Fsa2VyKSA8IDApIHsKKwkJCXdhbGtlci0+c3RvcCA9IDE7CisJCQlicmVhazsKKwkJfQogCQl3YWxrZXItPmNvdW50Kys7CiAJfQogfQpAQCAtMzg1LDE2ICszNjUsMTcgQEAKIHN0YXRpYyBpbnQgYXRtX3RjX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gpCiB7CiAJc3RydWN0IGF0bV9xZGlzY19kYXRhICpwID0gcWRpc2NfcHJpdihzY2gpOwotCXN0cnVjdCBhdG1fZmxvd19kYXRhICpmbG93ID0gTlVMTDsJLyogQEBAICovCisJc3RydWN0IGF0bV9mbG93X2RhdGEgKmZsb3c7CiAJc3RydWN0IHRjZl9yZXN1bHQgcmVzOwogCWludCByZXN1bHQ7CiAJaW50IHJldCA9IE5FVF9YTUlUX1BPTElDRUQ7CiAKIAlwcl9kZWJ1ZygiYXRtX3RjX2VucXVldWUoc2tiICVwLHNjaCAlcCxbcWRpc2MgJXBdKVxuIiwgc2tiLCBzY2gsIHApOwogCXJlc3VsdCA9IFRDX1BPTElDRV9PSzsJLyogYmUgbmljZSB0byBnY2MgKi8KKwlmbG93ID0gTlVMTDsKIAlpZiAoVENfSF9NQUooc2tiLT5wcmlvcml0eSkgIT0gc2NoLT5oYW5kbGUgfHwKLQkgICAgIShmbG93ID0gKHN0cnVjdCBhdG1fZmxvd19kYXRhICopYXRtX3RjX2dldChzY2gsIHNrYi0+cHJpb3JpdHkpKSkKLQkJZm9yIChmbG93ID0gcC0+Zmxvd3M7IGZsb3c7IGZsb3cgPSBmbG93LT5uZXh0KQorCSAgICAhKGZsb3cgPSAoc3RydWN0IGF0bV9mbG93X2RhdGEgKilhdG1fdGNfZ2V0KHNjaCwgc2tiLT5wcmlvcml0eSkpKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZmxvdywgJnAtPmZsb3dzLCBsaXN0KSB7CiAJCQlpZiAoZmxvdy0+ZmlsdGVyX2xpc3QpIHsKIAkJCQlyZXN1bHQgPSB0Y19jbGFzc2lmeV9jb21wYXQoc2tiLAogCQkJCQkJCSAgICBmbG93LT5maWx0ZXJfbGlzdCwKQEAgLTQwNCw4ICszODUsMTMgQEAKIAkJCQlmbG93ID0gKHN0cnVjdCBhdG1fZmxvd19kYXRhICopcmVzLmNsYXNzOwogCQkJCWlmICghZmxvdykKIAkJCQkJZmxvdyA9IGxvb2t1cF9mbG93KHNjaCwgcmVzLmNsYXNzaWQpOwotCQkJCWJyZWFrOworCQkJCWdvdG8gZG9uZTsKIAkJCX0KKwkJfQorCQlmbG93ID0gTlVMTDsKKwlkb25lOgorCQk7CQkKKwl9CiAJaWYgKCFmbG93KQogCQlmbG93ID0gJnAtPmxpbms7CiAJZWxzZSB7CkBAIC00NzcsNyArNDYzLDkgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJcHJfZGVidWcoInNjaF9hdG1fZGVxdWV1ZShzY2ggJXAsW3FkaXNjICVwXSlcbiIsIHNjaCwgcCk7Ci0JZm9yIChmbG93ID0gcC0+bGluay5uZXh0OyBmbG93OyBmbG93ID0gZmxvdy0+bmV4dCkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZsb3csICZwLT5mbG93cywgbGlzdCkgeworCQlpZiAoZmxvdyA9PSAmcC0+bGluaykKKwkJCWNvbnRpbnVlOwogCQkvKgogCQkgKiBJZiB0cmFmZmljIGlzIHByb3Blcmx5IHNoYXBlZCwgdGhpcyB3b24ndCBnZW5lcmF0ZSBuYXN0eQogCQkgKiBsaXR0bGUgYnVyc3RzLiBPdGhlcndpc2UsIGl0IG1heSAuLi4gKGJ1dCB0aGF0J3Mgb2theSkKQEAgLTUxMiw2ICs1MDAsNyBAQAogCQkJLyogYXRtLmF0bV9vcHRpb25zIGFyZSBhbHJlYWR5IHNldCBieSBhdG1fdGNfZW5xdWV1ZSAqLwogCQkJZmxvdy0+dmNjLT5zZW5kKGZsb3ctPnZjYywgc2tiKTsKIAkJfQorCX0KIH0KIAogc3RhdGljIHN0cnVjdCBza19idWZmICphdG1fdGNfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaCkKQEAgLTU0Myw5ICs1MzIsMTAgQEAKIAl1bnNpZ25lZCBpbnQgbGVuOwogCiAJcHJfZGVidWcoImF0bV90Y19kcm9wKHNjaCAlcCxbcWRpc2MgJXBdKVxuIiwgc2NoLCBwKTsKLQlmb3IgKGZsb3cgPSBwLT5mbG93czsgZmxvdzsgZmxvdyA9IGZsb3ctPm5leHQpCisJbGlzdF9mb3JfZWFjaF9lbnRyeShmbG93LCAmcC0+Zmxvd3MsIGxpc3QpIHsKIAkJaWYgKGZsb3ctPnEtPm9wcy0+ZHJvcCAmJiAobGVuID0gZmxvdy0+cS0+b3BzLT5kcm9wKGZsb3ctPnEpKSkKIAkJCXJldHVybiBsZW47CisJfQogCXJldHVybiAwOwogfQogCkBAIC01NTQsNyArNTQ0LDkgQEAKIAlzdHJ1Y3QgYXRtX3FkaXNjX2RhdGEgKnAgPSBxZGlzY19wcml2KHNjaCk7CiAKIAlwcl9kZWJ1ZygiYXRtX3RjX2luaXQoc2NoICVwLFtxZGlzYyAlcF0sb3B0ICVwKVxuIiwgc2NoLCBwLCBvcHQpOwotCXAtPmZsb3dzID0gJnAtPmxpbms7CisJSU5JVF9MSVNUX0hFQUQoJnAtPmZsb3dzKTsKKwlJTklUX0xJU1RfSEVBRCgmcC0+bGluay5saXN0KTsKKwlsaXN0X2FkZCgmcC0+bGluay5saXN0LCAmcC0+Zmxvd3MpOwogCXAtPmxpbmsucSA9IHFkaXNjX2NyZWF0ZV9kZmx0KHFkaXNjX2RldihzY2gpLCBzY2gtPmRldl9xdWV1ZSwKIAkJCQkgICAgICAmcGZpZm9fcWRpc2Nfb3BzLCBzY2gtPmhhbmRsZSk7CiAJaWYgKCFwLT5saW5rLnEpCkBAIC01NjUsNyArNTU3LDYgQEAKIAlwLT5saW5rLnNvY2sgPSBOVUxMOwogCXAtPmxpbmsuY2xhc3NpZCA9IHNjaC0+aGFuZGxlOwogCXAtPmxpbmsucmVmID0gMTsKLQlwLT5saW5rLm5leHQgPSBOVUxMOwogCXRhc2tsZXRfaW5pdCgmcC0+dGFzaywgc2NoX2F0bV9kZXF1ZXVlLCAodW5zaWduZWQgbG9uZylzY2gpOwogCXJldHVybiAwOwogfQpAQCAtNTc2LDcgKzU2Nyw3IEBACiAJc3RydWN0IGF0bV9mbG93X2RhdGEgKmZsb3c7CiAKIAlwcl9kZWJ1ZygiYXRtX3RjX3Jlc2V0KHNjaCAlcCxbcWRpc2MgJXBdKVxuIiwgc2NoLCBwKTsKLQlmb3IgKGZsb3cgPSBwLT5mbG93czsgZmxvdzsgZmxvdyA9IGZsb3ctPm5leHQpCisJbGlzdF9mb3JfZWFjaF9lbnRyeShmbG93LCAmcC0+Zmxvd3MsIGxpc3QpCiAJCXFkaXNjX3Jlc2V0KGZsb3ctPnEpOwogCXNjaC0+cS5xbGVuID0gMDsKIH0KQEAgLTU4NCwyNCArNTc1LDE3IEBACiBzdGF0aWMgdm9pZCBhdG1fdGNfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnNjaCkKIHsKIAlzdHJ1Y3QgYXRtX3FkaXNjX2RhdGEgKnAgPSBxZGlzY19wcml2KHNjaCk7Ci0Jc3RydWN0IGF0bV9mbG93X2RhdGEgKmZsb3c7CisJc3RydWN0IGF0bV9mbG93X2RhdGEgKmZsb3csICp0bXA7CiAKIAlwcl9kZWJ1ZygiYXRtX3RjX2Rlc3Ryb3koc2NoICVwLFtxZGlzYyAlcF0pXG4iLCBzY2gsIHApOwotCWZvciAoZmxvdyA9IHAtPmZsb3dzOyBmbG93OyBmbG93ID0gZmxvdy0+bmV4dCkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZsb3csICZwLT5mbG93cywgbGlzdCkKIAkJdGNmX2Rlc3Ryb3lfY2hhaW4oJmZsb3ctPmZpbHRlcl9saXN0KTsKIAotCS8qIHJhY2VzID8gKi8KLQl3aGlsZSAoKGZsb3cgPSBwLT5mbG93cykpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZmxvdywgdG1wLCAmcC0+Zmxvd3MsIGxpc3QpIHsKIAkJaWYgKGZsb3ctPnJlZiA+IDEpCiAJCQlwcmludGsoS0VSTl9FUlIgImF0bV9kZXN0cm95OiAlcC0+cmVmID0gJWRcbiIsIGZsb3csCiAJCQkgICAgICAgZmxvdy0+cmVmKTsKIAkJYXRtX3RjX3B1dChzY2gsICh1bnNpZ25lZCBsb25nKWZsb3cpOwotCQlpZiAocC0+Zmxvd3MgPT0gZmxvdykgewotCQkJcHJpbnRrKEtFUk5fRVJSICJhdG1fZGVzdHJveTogcHV0dGluZyBmbG93ICVwIGRpZG4ndCAiCi0JCQkgICAgICAgImtpbGwgaXRcbiIsIGZsb3cpOwotCQkJcC0+Zmxvd3MgPSBmbG93LT5uZXh0OwkvKiBicnV0ZSBmb3JjZSAqLwotCQkJYnJlYWs7Ci0JCX0KIAl9CiAJdGFza2xldF9raWxsKCZwLT50YXNrKTsKIH0KQEAgLTYxNSw3ICs1OTksNyBAQAogCiAJcHJfZGVidWcoImF0bV90Y19kdW1wX2NsYXNzKHNjaCAlcCxbcWRpc2MgJXBdLGZsb3cgJXAsc2tiICVwLHRjbSAlcClcbiIsCiAJCXNjaCwgcCwgZmxvdywgc2tiLCB0Y20pOwotCWlmICghZmluZF9mbG93KHAsIGZsb3cpKQorCWlmIChsaXN0X2VtcHR5KCZmbG93LT5saXN0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJdGNtLT50Y21faGFuZGxlID0gZmxvdy0+Y2xhc3NpZDsKIAl0Y20tPnRjbV9pbmZvID0gZmxvdy0+cS0+aGFuZGxlOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwppbmRleCBhNjMwMjllLi4yYWViM2E0IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYworKysgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwpAQCAtOTYsNyArOTYsNyBAQAogCQkgKiBBbm90aGVyIGNwdSBpcyBob2xkaW5nIGxvY2ssIHJlcXVldWUgJiBkZWxheSB4bWl0cyBmb3IKIAkJICogc29tZSB0aW1lLgogCQkgKi8KLQkJX19nZXRfY3B1X3Zhcihzb2Z0bmV0X2RhdGEpLmNwdV9jb2xsaXNpb24rKzsKKwkJX190aGlzX2NwdV9pbmMoc29mdG5ldF9kYXRhLmNwdV9jb2xsaXNpb24pOwogCQlyZXQgPSBkZXZfcmVxdWV1ZV9za2Ioc2tiLCBxKTsKIAl9CiAKQEAgLTIwNSw3ICsyMDUsNyBAQAogCQl9CiAJfQogCi0JY2xlYXJfYml0KF9fUURJU0NfU1RBVEVfUlVOTklORywgJnEtPnN0YXRlKTsKKwlxZGlzY19ydW5fZW5kKHEpOwogfQogCiB1bnNpZ25lZCBsb25nIGRldl90cmFuc19zdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMzI3LDYgKzMyNywyNCBAQAogfQogRVhQT1JUX1NZTUJPTChuZXRpZl9jYXJyaWVyX29mZik7CiAKKy8qKgorICogCW5ldGlmX25vdGlmeV9wZWVycyAtIG5vdGlmeSBuZXR3b3JrIHBlZXJzIGFib3V0IGV4aXN0ZW5jZSBvZiBAZGV2CisgKiAJQGRldjogbmV0d29yayBkZXZpY2UKKyAqCisgKiBHZW5lcmF0ZSB0cmFmZmljIHN1Y2ggdGhhdCBpbnRlcmVzdGVkIG5ldHdvcmsgcGVlcnMgYXJlIGF3YXJlIG9mCisgKiBAZGV2LCBzdWNoIGFzIGJ5IGdlbmVyYXRpbmcgYSBncmF0dWl0b3VzIEFSUC4gVGhpcyBtYXkgYmUgdXNlZCB3aGVuCisgKiBhIGRldmljZSB3YW50cyB0byBpbmZvcm0gdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmsgYWJvdXQgc29tZSBzb3J0IG9mCisgKiByZWNvbmZpZ3VyYXRpb24gc3VjaCBhcyBhIGZhaWxvdmVyIGV2ZW50IG9yIHZpcnR1YWwgbWFjaGluZQorICogbWlncmF0aW9uLgorICovCit2b2lkIG5ldGlmX25vdGlmeV9wZWVycyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJ0bmxfbG9jaygpOworCWNhbGxfbmV0ZGV2aWNlX25vdGlmaWVycyhORVRERVZfTk9USUZZX1BFRVJTLCBkZXYpOworCXJ0bmxfdW5sb2NrKCk7Cit9CitFWFBPUlRfU1lNQk9MKG5ldGlmX25vdGlmeV9wZWVycyk7CisKIC8qICJOT09QIiBzY2hlZHVsZXI6IHRoZSBiZXN0IHNjaGVkdWxlciwgcmVjb21tZW5kZWQgZm9yIGFsbCBpbnRlcmZhY2VzCiAgICB1bmRlciBhbGwgY2lyY3Vtc3RhbmNlcy4gSXQgaXMgZGlmZmljdWx0IHRvIGludmVudCBhbnl0aGluZyBmYXN0ZXIgb3IKICAgIGNoZWFwZXIuCkBAIC01NDMsNiArNTYxLDcgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZzY2gtPmxpc3QpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnNjaC0+cSk7CisJc3Bpbl9sb2NrX2luaXQoJnNjaC0+YnVzeWxvY2spOwogCXNjaC0+b3BzID0gb3BzOwogCXNjaC0+ZW5xdWV1ZSA9IG9wcy0+ZW5xdWV1ZTsKIAlzY2gtPmRlcXVldWUgPSBvcHMtPmRlcXVldWU7CkBAIC03NzksNyArNzk4LDcgQEAKIAogCQlzcGluX2xvY2tfYmgocm9vdF9sb2NrKTsKIAotCQl2YWwgPSAodGVzdF9iaXQoX19RRElTQ19TVEFURV9SVU5OSU5HLCAmcS0+c3RhdGUpIHx8CisJCXZhbCA9IChxZGlzY19pc19ydW5uaW5nKHEpIHx8CiAJCSAgICAgICB0ZXN0X2JpdChfX1FESVNDX1NUQVRFX1NDSEVELCAmcS0+c3RhdGUpKTsKIAogCQlzcGluX3VubG9ja19iaChyb290X2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9odGIuYyBiL25ldC9zY2hlZC9zY2hfaHRiLmMKaW5kZXggMGI1MmI4ZC4uNGJlOGQwNCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9odGIuYworKysgYi9uZXQvc2NoZWQvc2NoX2h0Yi5jCkBAIC0xNTUwLDcgKzE1NTAsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBRZGlzY19vcHMgaHRiX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0gewotCS5uZXh0CQk9CU5VTEwsCiAJLmNsX29wcwkJPQkmaHRiX2NsYXNzX29wcywKIAkuaWQJCT0JImh0YiIsCiAJLnByaXZfc2l6ZQk9CXNpemVvZihzdHJ1Y3QgaHRiX3NjaGVkKSwKQEAgLTE1NjEsNyArMTU2MCw2IEBACiAJLmluaXQJCT0JaHRiX2luaXQsCiAJLnJlc2V0CQk9CWh0Yl9yZXNldCwKIAkuZGVzdHJveQk9CWh0Yl9kZXN0cm95LAotCS5jaGFuZ2UJCT0JTlVMTCAvKiBodGJfY2hhbmdlICovLAogCS5kdW1wCQk9CWh0Yl9kdW1wLAogCS5vd25lcgkJPQlUSElTX01PRFVMRSwKIH07CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9hc3NvY2lvbGEuYyBiL25ldC9zY3RwL2Fzc29jaW9sYS5jCmluZGV4IGU0MWZlZmYuLjBiODVlNTIgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2Fzc29jaW9sYS5jCisrKyBiL25ldC9zY3RwL2Fzc29jaW9sYS5jCkBAIC0xNzIsNyArMTcyLDcgQEAKIAlhc29jLT50aW1lb3V0c1tTQ1RQX0VWRU5UX1RJTUVPVVRfQVVUT0NMT1NFXSA9CiAJCSh1bnNpZ25lZCBsb25nKXNwLT5hdXRvY2xvc2UgKiBIWjsKIAotCS8qIEluaXRpbGl6ZXMgdGhlIHRpbWVycyAqLworCS8qIEluaXRpYWxpemVzIHRoZSB0aW1lcnMgKi8KIAlmb3IgKGkgPSBTQ1RQX0VWRU5UX1RJTUVPVVRfTk9ORTsgaSA8IFNDVFBfTlVNX1RJTUVPVVRfVFlQRVM7ICsraSkKIAkJc2V0dXBfdGltZXIoJmFzb2MtPnRpbWVyc1tpXSwgc2N0cF90aW1lcl9ldmVudHNbaV0sCiAJCQkJKHVuc2lnbmVkIGxvbmcpYXNvYyk7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9wcm90b2NvbC5jIGIvbmV0L3NjdHAvcHJvdG9jb2wuYwppbmRleCAxODI3NDk4Li41MDI3YjgzIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9wcm90b2NvbC5jCisrKyBiL25ldC9zY3RwL3Byb3RvY29sLmMKQEAgLTQ5MCw3ICs0OTAsNyBAQAogCQkJICBfX2Z1bmNfXywgJmZsLmZsNF9kc3QsICZmbC5mbDRfc3JjKTsKIAogCWlmICghaXBfcm91dGVfb3V0cHV0X2tleSgmaW5pdF9uZXQsICZydCwgJmZsKSkgewotCQlkc3QgPSAmcnQtPnUuZHN0OworCQlkc3QgPSAmcnQtPmRzdDsKIAl9CiAKIAkvKiBJZiB0aGVyZSBpcyBubyBhc3NvY2lhdGlvbiBvciBpZiBhIHNvdXJjZSBhZGRyZXNzIGlzIHBhc3NlZCwgbm8KQEAgLTUzNCw3ICs1MzQsNyBAQAogCQkJZmwuZmw0X3NyYyA9IGxhZGRyLT5hLnY0LnNpbl9hZGRyLnNfYWRkcjsKIAkJCWZsLmZsX2lwX3Nwb3J0ID0gbGFkZHItPmEudjQuc2luX3BvcnQ7CiAJCQlpZiAoIWlwX3JvdXRlX291dHB1dF9rZXkoJmluaXRfbmV0LCAmcnQsICZmbCkpIHsKLQkJCQlkc3QgPSAmcnQtPnUuZHN0OworCQkJCWRzdCA9ICZydC0+ZHN0OwogCQkJCWdvdG8gb3V0X3VubG9jazsKIAkJCX0KIAkJfQpAQCAtMTAwMiw3ICsxMDAyLDggQEAKIHN0YXRpYyBpbmxpbmUgaW50IGluaXRfc2N0cF9taWJzKHZvaWQpCiB7CiAJcmV0dXJuIHNubXBfbWliX2luaXQoKHZvaWQgX19wZXJjcHUgKiopc2N0cF9zdGF0aXN0aWNzLAotCQkJICAgICBzaXplb2Yoc3RydWN0IHNjdHBfbWliKSk7CisJCQkgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9taWIpLAorCQkJICAgICBfX2FsaWdub2ZfXyhzdHJ1Y3Qgc2N0cF9taWIpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNsZWFudXBfc2N0cF9taWJzKHZvaWQpCkBAIC0xMTYyLDcgKzExNjMsNyBAQAogCS8qIFNldCB0aGUgcHJlc3N1cmUgdGhyZXNob2xkIHRvIGJlIGEgZnJhY3Rpb24gb2YgZ2xvYmFsIG1lbW9yeSB0aGF0CiAJICogaXMgdXAgdG8gMS8yIGF0IDI1NiBNQiwgZGVjcmVhc2luZyB0b3dhcmQgemVybyB3aXRoIHRoZSBhbW91bnQgb2YKIAkgKiBtZW1vcnksIHdpdGggYSBmbG9vciBvZiAxMjggcGFnZXMuCi0JICogTm90ZSB0aGlzIGluaXRhbGl6ZXMgdGhlIGRhdGEgaW4gc2N0cHY2X3Byb3QgdG9vCisJICogTm90ZSB0aGlzIGluaXRpYWxpemVzIHRoZSBkYXRhIGluIHNjdHB2Nl9wcm90IHRvbwogCSAqIFVuYWJhc2hlZGx5IHN0b2xlbiBmcm9tIHRjcF9pbml0CiAJICovCiAJbnJfcGFnZXMgPSB0b3RhbHJhbV9wYWdlcyAtIHRvdGFsaGlnaF9wYWdlczsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYyBiL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYwppbmRleCBiZDJhNTBiLi4yNDZmOTI5IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKKysrIGIvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCkBAIC0xODE3LDcgKzE4MTcsNyBAQAogc3RydWN0IF9fc2N0cF9taXNzaW5nIHsKIAlfX2JlMzIgbnVtX21pc3Npbmc7CiAJX19iZTE2IHR5cGU7Ci19ICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gIF9fcGFja2VkOwogCiAvKgogICogUmVwb3J0IGEgbWlzc2luZyBtYW5kYXRvcnkgcGFyYW1ldGVyLgpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IDM2N2Q1NDcuLjIyNzBiOTQgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYworKysgYi9uZXQvc29ja2V0LmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogc3RhdGljIHNzaXplX3Qgc29ja19zZW5kcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkgICAgIGludCBvZmZzZXQsIHNpemVfdCBzaXplLCBsb2ZmX3QgKnBwb3MsIGludCBtb3JlKTsKIHN0YXRpYyBzc2l6ZV90IHNvY2tfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCAqcHBvcywKLQkJCSAgICAgICAgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc2l6ZV90IGxlbiwKKwkJCQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgbGVuLAogCQkJCXVuc2lnbmVkIGludCBmbGFncyk7CiAKIC8qCkBAIC0xNjIsNyArMTYyLDcgQEAKICAqCVN0YXRpc3RpY3MgY291bnRlcnMgb2YgdGhlIHNvY2tldCBsaXN0cwogICovCiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIHNvY2tldHNfaW5fdXNlKSA9IDA7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBzb2NrZXRzX2luX3VzZSk7CiAKIC8qCiAgKiBTdXBwb3J0IHJvdXRpbmVzLgpAQCAtMTcwLDE1ICsxNzAsNiBAQAogICogZGl2aWRlIGFuZCBsb29rIGFmdGVyIHRoZSBtZXNzeSBiaXRzLgogICovCiAKLSNkZWZpbmUgTUFYX1NPQ0tfQUREUgkxMjgJCS8qIDEwOCBmb3IgVW5peCBkb21haW4gLQotCQkJCQkgICAxNiBmb3IgSVAsIDE2IGZvciBJUFgsCi0JCQkJCSAgIDI0IGZvciBJUHY2LAotCQkJCQkgICBhYm91dCA4MCBmb3IgQVguMjUKLQkJCQkJICAgbXVzdCBiZSBhdCBsZWFzdCBvbmUgYmlnZ2VyIHRoYW4KLQkJCQkJICAgdGhlIEFGX1VOSVggc2l6ZSAoc2VlIG5ldC91bml4L2FmX3VuaXguYwotCQkJCQkgICA6dW5peF9ta25hbWUoKSkuCi0JCQkJCSAqLwotCiAvKioKICAqCW1vdmVfYWRkcl90b19rZXJuZWwJLQljb3B5IGEgc29ja2V0IGFkZHJlc3MgaW50byBrZXJuZWwgc3BhY2UKICAqCUB1YWRkcjogQWRkcmVzcyBpbiB1c2VyIHNwYWNlCkBAIC0zMDksOSArMzAwLDkgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNvY2tmc19vcHMgPSB7Ci0JLmFsbG9jX2lub2RlID0Jc29ja19hbGxvY19pbm9kZSwKLQkuZGVzdHJveV9pbm9kZSA9c29ja19kZXN0cm95X2lub2RlLAotCS5zdGF0ZnMgPQlzaW1wbGVfc3RhdGZzLAorCS5hbGxvY19pbm9kZQk9IHNvY2tfYWxsb2NfaW5vZGUsCisJLmRlc3Ryb3lfaW5vZGUJPSBzb2NrX2Rlc3Ryb3lfaW5vZGUsCisJLnN0YXRmcwkJPSBzaW1wbGVfc3RhdGZzLAogfTsKIAogc3RhdGljIGludCBzb2NrZnNfZ2V0X3NiKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLApAQCAtNDExLDYgKzQwMiw3IEBACiAKIAlyZXR1cm4gZmQ7CiB9CitFWFBPUlRfU1lNQk9MKHNvY2tfbWFwX2ZkKTsKIAogc3RhdGljIHN0cnVjdCBzb2NrZXQgKnNvY2tfZnJvbV9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgKmVycikKIHsKQEAgLTQyMiw3ICs0MTQsNyBAQAogfQogCiAvKioKLSAqCXNvY2tmZF9sb29rdXAJLSAJR28gZnJvbSBhIGZpbGUgbnVtYmVyIHRvIGl0cyBzb2NrZXQgc2xvdAorICoJc29ja2ZkX2xvb2t1cCAtIEdvIGZyb20gYSBmaWxlIG51bWJlciB0byBpdHMgc29ja2V0IHNsb3QKICAqCUBmZDogZmlsZSBoYW5kbGUKICAqCUBlcnI6IHBvaW50ZXIgdG8gYW4gZXJyb3IgY29kZSByZXR1cm4KICAqCkBAIC00NTAsNiArNDQyLDcgQEAKIAkJZnB1dChmaWxlKTsKIAlyZXR1cm4gc29jazsKIH0KK0VYUE9SVF9TWU1CT0woc29ja2ZkX2xvb2t1cCk7CiAKIHN0YXRpYyBzdHJ1Y3Qgc29ja2V0ICpzb2NrZmRfbG9va3VwX2xpZ2h0KGludCBmZCwgaW50ICplcnIsIGludCAqZnB1dF9uZWVkZWQpCiB7CkBAIC01NDAsNiArNTMzLDcgQEAKIAl9CiAJc29jay0+ZmlsZSA9IE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MKHNvY2tfcmVsZWFzZSk7CiAKIGludCBzb2NrX3R4X3RpbWVzdGFtcChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzaywKIAkJICAgICAgdW5pb24gc2tiX3NoYXJlZF90eCAqc2h0eCkKQEAgLTU4Niw2ICs1ODAsNyBAQAogCQlyZXQgPSB3YWl0X29uX3N5bmNfa2lvY2IoJmlvY2IpOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKHNvY2tfc2VuZG1zZyk7CiAKIGludCBrZXJuZWxfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csCiAJCSAgIHN0cnVjdCBrdmVjICp2ZWMsIHNpemVfdCBudW0sIHNpemVfdCBzaXplKQpAQCAtNjA0LDYgKzU5OSw3IEBACiAJc2V0X2ZzKG9sZGZzKTsKIAlyZXR1cm4gcmVzdWx0OwogfQorRVhQT1JUX1NZTUJPTChrZXJuZWxfc2VuZG1zZyk7CiAKIHN0YXRpYyBpbnQga3RpbWUydHMoa3RpbWVfdCBrdCwgc3RydWN0IHRpbWVzcGVjICp0cykKIHsKQEAgLTY2NCw3ICs2NjAsNiBAQAogCQlwdXRfY21zZyhtc2csIFNPTF9TT0NLRVQsCiAJCQkgU0NNX1RJTUVTVEFNUElORywgc2l6ZW9mKHRzKSwgJnRzKTsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoX19zb2NrX3JlY3ZfdGltZXN0YW1wKTsKIAogaW5saW5lIHZvaWQgc29ja19yZWN2X2Ryb3BzKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtNzIwLDYgKzcxNSw3IEBACiAJCXJldCA9IHdhaXRfb25fc3luY19raW9jYigmaW9jYik7CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0woc29ja19yZWN2bXNnKTsKIAogc3RhdGljIGludCBzb2NrX3JlY3Ztc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAogCQkJICAgICAgc2l6ZV90IHNpemUsIGludCBmbGFncykKQEAgLTc1Miw2ICs3NDgsNyBAQAogCXNldF9mcyhvbGRmcyk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KK0VYUE9SVF9TWU1CT0woa2VybmVsX3JlY3Ztc2cpOwogCiBzdGF0aWMgdm9pZCBzb2NrX2Fpb19kdG9yKHN0cnVjdCBraW9jYiAqaW9jYikKIHsKQEAgLTc3NCw3ICs3NzEsNyBAQAogfQogCiBzdGF0aWMgc3NpemVfdCBzb2NrX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3QgKnBwb3MsCi0JCQkgICAgICAgIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sCisJCQkJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc2l6ZV90IGxlbiwKIAkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHNvY2tldCAqc29jayA9IGZpbGUtPnByaXZhdGVfZGF0YTsKQEAgLTg4Nyw3ICs4ODQsNyBAQAogICovCiAKIHN0YXRpYyBERUZJTkVfTVVURVgoYnJfaW9jdGxfbXV0ZXgpOwotc3RhdGljIGludCAoKmJyX2lvY3RsX2hvb2spIChzdHJ1Y3QgbmV0ICosIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpID0gTlVMTDsKK3N0YXRpYyBpbnQgKCpicl9pb2N0bF9ob29rKSAoc3RydWN0IG5ldCAqLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKTsKIAogdm9pZCBicmlvY3RsX3NldChpbnQgKCpob29rKSAoc3RydWN0IG5ldCAqLCB1bnNpZ25lZCBpbnQsIHZvaWQgX191c2VyICopKQogewpAQCAtODk1LDcgKzg5Miw2IEBACiAJYnJfaW9jdGxfaG9vayA9IGhvb2s7CiAJbXV0ZXhfdW5sb2NrKCZicl9pb2N0bF9tdXRleCk7CiB9Ci0KIEVYUE9SVF9TWU1CT0woYnJpb2N0bF9zZXQpOwogCiBzdGF0aWMgREVGSU5FX01VVEVYKHZsYW5faW9jdGxfbXV0ZXgpOwpAQCAtOTA3LDcgKzkwMyw2IEBACiAJdmxhbl9pb2N0bF9ob29rID0gaG9vazsKIAltdXRleF91bmxvY2soJnZsYW5faW9jdGxfbXV0ZXgpOwogfQotCiBFWFBPUlRfU1lNQk9MKHZsYW5faW9jdGxfc2V0KTsKIAogc3RhdGljIERFRklORV9NVVRFWChkbGNpX2lvY3RsX211dGV4KTsKQEAgLTkxOSw3ICs5MTQsNiBAQAogCWRsY2lfaW9jdGxfaG9vayA9IGhvb2s7CiAJbXV0ZXhfdW5sb2NrKCZkbGNpX2lvY3RsX211dGV4KTsKIH0KLQogRVhQT1JUX1NZTUJPTChkbGNpX2lvY3RsX3NldCk7CiAKIHN0YXRpYyBsb25nIHNvY2tfZG9faW9jdGwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLApAQCAtMTA0Nyw2ICsxMDQxLDcgQEAKIAlzb2NrID0gTlVMTDsKIAlnb3RvIG91dDsKIH0KK0VYUE9SVF9TWU1CT0woc29ja19jcmVhdGVfbGl0ZSk7CiAKIC8qIE5vIGtlcm5lbCBsb2NrIGhlbGQgLSBwZXJmZWN0ICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHNvY2tfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKQEAgLTExNDcsNiArMTE0Miw3IEBACiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKHNvY2tfd2FrZV9hc3luYyk7CiAKIHN0YXRpYyBpbnQgX19zb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wsCiAJCQkgc3RydWN0IHNvY2tldCAqKnJlcywgaW50IGtlcm4pCkBAIC0xMjY1LDExICsxMjYxLDEzIEBACiB7CiAJcmV0dXJuIF9fc29ja19jcmVhdGUoY3VycmVudC0+bnNwcm94eS0+bmV0X25zLCBmYW1pbHksIHR5cGUsIHByb3RvY29sLCByZXMsIDApOwogfQorRVhQT1JUX1NZTUJPTChzb2NrX2NyZWF0ZSk7CiAKIGludCBzb2NrX2NyZWF0ZV9rZXJuKGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wsIHN0cnVjdCBzb2NrZXQgKipyZXMpCiB7CiAJcmV0dXJuIF9fc29ja19jcmVhdGUoJmluaXRfbmV0LCBmYW1pbHksIHR5cGUsIHByb3RvY29sLCByZXMsIDEpOwogfQorRVhQT1JUX1NZTUJPTChzb2NrX2NyZWF0ZV9rZXJuKTsKIAogU1lTQ0FMTF9ERUZJTkUzKHNvY2tldCwgaW50LCBmYW1pbHksIGludCwgdHlwZSwgaW50LCBwcm90b2NvbCkKIHsKQEAgLTE0NzQsNyArMTQ3Miw4IEBACiAJCWdvdG8gb3V0OwogCiAJZXJyID0gLUVORklMRTsKLQlpZiAoIShuZXdzb2NrID0gc29ja19hbGxvYygpKSkKKwluZXdzb2NrID0gc29ja19hbGxvYygpOworCWlmICghbmV3c29jaykKIAkJZ290byBvdXRfcHV0OwogCiAJbmV3c29jay0+dHlwZSA9IHNvY2stPnR5cGU7CkBAIC0xODYxLDggKzE4NjAsNyBAQAogCWlmIChNU0dfQ01TR19DT01QQVQgJiBmbGFncykgewogCQlpZiAoZ2V0X2NvbXBhdF9tc2doZHIoJm1zZ19zeXMsIG1zZ19jb21wYXQpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCWVsc2UgaWYgKGNvcHlfZnJvbV91c2VyKCZtc2dfc3lzLCBtc2csIHNpemVvZihzdHJ1Y3QgbXNnaGRyKSkpCisJfSBlbHNlIGlmIChjb3B5X2Zyb21fdXNlcigmbXNnX3N5cywgbXNnLCBzaXplb2Yoc3RydWN0IG1zZ2hkcikpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXNvY2sgPSBzb2NrZmRfbG9va3VwX2xpZ2h0KGZkLCAmZXJyLCAmZnB1dF9uZWVkZWQpOwpAQCAtMTk2NCw4ICsxOTYyLDcgQEAKIAlpZiAoTVNHX0NNU0dfQ09NUEFUICYgZmxhZ3MpIHsKIAkJaWYgKGdldF9jb21wYXRfbXNnaGRyKG1zZ19zeXMsIG1zZ19jb21wYXQpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCWVsc2UgaWYgKGNvcHlfZnJvbV91c2VyKG1zZ19zeXMsIG1zZywgc2l6ZW9mKHN0cnVjdCBtc2doZHIpKSkKKwl9IGVsc2UgaWYgKGNvcHlfZnJvbV91c2VyKG1zZ19zeXMsIG1zZywgc2l6ZW9mKHN0cnVjdCBtc2doZHIpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAllcnIgPSAtRU1TR1NJWkU7CkBAIC0yMTkxLDEwICsyMTg4LDEwIEBACiAvKiBBcmd1bWVudCBsaXN0IHNpemVzIGZvciBzeXNfc29ja2V0Y2FsbCAqLwogI2RlZmluZSBBTCh4KSAoKHgpICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbmFyZ3NbMjBdID0gewotCUFMKDApLEFMKDMpLEFMKDMpLEFMKDMpLEFMKDIpLEFMKDMpLAotCUFMKDMpLEFMKDMpLEFMKDQpLEFMKDQpLEFMKDQpLEFMKDYpLAotCUFMKDYpLEFMKDIpLEFMKDUpLEFMKDUpLEFMKDMpLEFMKDMpLAotCUFMKDQpLEFMKDUpCisJQUwoMCksIEFMKDMpLCBBTCgzKSwgQUwoMyksIEFMKDIpLCBBTCgzKSwKKwlBTCgzKSwgQUwoMyksIEFMKDQpLCBBTCg0KSwgQUwoNCksIEFMKDYpLAorCUFMKDYpLCBBTCgyKSwgQUwoNSksIEFMKDUpLCBBTCgzKSwgQUwoMyksCisJQUwoNCksIEFMKDUpCiB9OwogCiAjdW5kZWYgQUwKQEAgLTIzNDAsNiArMjMzNyw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiTkVUOiBSZWdpc3RlcmVkIHByb3RvY29sIGZhbWlseSAlZFxuIiwgb3BzLT5mYW1pbHkpOwogCXJldHVybiBlcnI7CiB9CitFWFBPUlRfU1lNQk9MKHNvY2tfcmVnaXN0ZXIpOwogCiAvKioKICAqCXNvY2tfdW5yZWdpc3RlciAtIHJlbW92ZSBhIHByb3RvY29sIGhhbmRsZXIKQEAgLTIzNjYsNiArMjM2NCw3IEBACiAKIAlwcmludGsoS0VSTl9JTkZPICJORVQ6IFVucmVnaXN0ZXJlZCBwcm90b2NvbCBmYW1pbHkgJWRcbiIsIGZhbWlseSk7CiB9CitFWFBPUlRfU1lNQk9MKHNvY2tfdW5yZWdpc3Rlcik7CiAKIHN0YXRpYyBpbnQgX19pbml0IHNvY2tfaW5pdCh2b2lkKQogewpAQCAtMjM5NSw2ICsyMzk0LDEwIEBACiAJbmV0ZmlsdGVyX2luaXQoKTsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX05FVFdPUktfUEhZX1RJTUVTVEFNUElORworCXNrYl90aW1lc3RhbXBpbmdfaW5pdCgpOworI2VuZGlmCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQ5MCwxMyArMjQ5MywxMyBAQAogCQlpZmMuaWZjX3JlcSA9IE5VTEw7CiAJCXVpZmMgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2Yoc3RydWN0IGlmY29uZikpOwogCX0gZWxzZSB7Ci0JCXNpemVfdCBsZW4gPSgoaWZjMzIuaWZjX2xlbiAvIHNpemVvZiAoc3RydWN0IGNvbXBhdF9pZnJlcSkpICsgMSkgKgotCQkJc2l6ZW9mIChzdHJ1Y3QgaWZyZXEpOworCQlzaXplX3QgbGVuID0gKChpZmMzMi5pZmNfbGVuIC8gc2l6ZW9mKHN0cnVjdCBjb21wYXRfaWZyZXEpKSArIDEpICoKKwkJCXNpemVvZihzdHJ1Y3QgaWZyZXEpOwogCQl1aWZjID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKHN0cnVjdCBpZmNvbmYpICsgbGVuKTsKIAkJaWZjLmlmY19sZW4gPSBsZW47CiAJCWlmciA9IGlmYy5pZmNfcmVxID0gKHZvaWQgX191c2VyICopKHVpZmMgKyAxKTsKIAkJaWZyMzIgPSBjb21wYXRfcHRyKGlmYzMyLmlmY2J1Zik7Ci0JCWZvciAoaSA9IDA7IGkgPCBpZmMzMi5pZmNfbGVuOyBpICs9IHNpemVvZiAoc3RydWN0IGNvbXBhdF9pZnJlcSkpIHsKKwkJZm9yIChpID0gMDsgaSA8IGlmYzMyLmlmY19sZW47IGkgKz0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfaWZyZXEpKSB7CiAJCQlpZiAoY29weV9pbl91c2VyKGlmciwgaWZyMzIsIHNpemVvZihzdHJ1Y3QgY29tcGF0X2lmcmVxKSkpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQlpZnIrKzsKQEAgLTI1MTYsOSArMjUxOSw5IEBACiAJaWZyID0gaWZjLmlmY19yZXE7CiAJaWZyMzIgPSBjb21wYXRfcHRyKGlmYzMyLmlmY2J1Zik7CiAJZm9yIChpID0gMCwgaiA9IDA7Ci0gICAgICAgICAgICAgaSArIHNpemVvZiAoc3RydWN0IGNvbXBhdF9pZnJlcSkgPD0gaWZjMzIuaWZjX2xlbiAmJiBqIDwgaWZjLmlmY19sZW47Ci0JICAgICBpICs9IHNpemVvZiAoc3RydWN0IGNvbXBhdF9pZnJlcSksIGogKz0gc2l6ZW9mIChzdHJ1Y3QgaWZyZXEpKSB7Ci0JCWlmIChjb3B5X2luX3VzZXIoaWZyMzIsIGlmciwgc2l6ZW9mIChzdHJ1Y3QgY29tcGF0X2lmcmVxKSkpCisJICAgICBpICsgc2l6ZW9mKHN0cnVjdCBjb21wYXRfaWZyZXEpIDw9IGlmYzMyLmlmY19sZW4gJiYgaiA8IGlmYy5pZmNfbGVuOworCSAgICAgaSArPSBzaXplb2Yoc3RydWN0IGNvbXBhdF9pZnJlcSksIGogKz0gc2l6ZW9mKHN0cnVjdCBpZnJlcSkpIHsKKwkJaWYgKGNvcHlfaW5fdXNlcihpZnIzMiwgaWZyLCBzaXplb2Yoc3RydWN0IGNvbXBhdF9pZnJlcSkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWlmcjMyKys7CiAJCWlmcisrOwpAQCAtMjU2Nyw3ICsyNTcwLDcgQEAKIAljb21wYXRfdXB0cl90IHVwdHIzMjsKIAlzdHJ1Y3QgaWZyZXEgX191c2VyICp1aWZyOwogCi0JdWlmciA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZiAoKnVpZnIpKTsKKwl1aWZyID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCp1aWZyKSk7CiAJaWYgKGNvcHlfaW5fdXNlcih1aWZyLCB1aWZyMzIsIHNpemVvZihzdHJ1Y3QgY29tcGF0X2lmcmVxKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCkBAIC0yNjAxLDkgKzI2MDQsOSBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkJb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0JCXNldF9mcyAoS0VSTkVMX0RTKTsKKwkJc2V0X2ZzKEtFUk5FTF9EUyk7CiAJCWVyciA9IGRldl9pb2N0bChuZXQsIGNtZCwgJmtpZnIpOwotCQlzZXRfZnMgKG9sZF9mcyk7CisJCXNldF9mcyhvbGRfZnMpOwogCiAJCXJldHVybiBlcnI7CiAJY2FzZSBTSU9DQk9ORFNMQVZFSU5GT1FVRVJZOgpAQCAtMjcxMCw5ICsyNzEzLDkgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlvbGRfZnMgPSBnZXRfZnMoKTsKLQlzZXRfZnMgKEtFUk5FTF9EUyk7CisJc2V0X2ZzKEtFUk5FTF9EUyk7CiAJZXJyID0gZGV2X2lvY3RsKG5ldCwgY21kLCAodm9pZCBfX3VzZXIgKikmaWZyKTsKLQlzZXRfZnMgKG9sZF9mcyk7CisJc2V0X2ZzKG9sZF9mcyk7CiAKIAlpZiAoY21kID09IFNJT0NHSUZNQVAgJiYgIWVycikgewogCQllcnIgPSBjb3B5X3RvX3VzZXIodWlmcjMyLCAmaWZyLCBzaXplb2YoaWZyLmlmcl9uYW1lKSk7CkBAIC0yNzM0LDcgKzI3MzcsNyBAQAogCWNvbXBhdF91cHRyX3QgdXB0cjMyOwogCXN0cnVjdCBpZnJlcSBfX3VzZXIgKnVpZnI7CiAKLQl1aWZyID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mICgqdWlmcikpOworCXVpZnIgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKnVpZnIpKTsKIAlpZiAoY29weV9pbl91c2VyKHVpZnIsIHVpZnIzMiwgc2l6ZW9mKHN0cnVjdCBjb21wYXRfaWZyZXEpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKQEAgLTI3NTAsMjAgKzI3NTMsMjAgQEAKIH0KIAogc3RydWN0IHJ0ZW50cnkzMiB7Ci0JdTMyICAgCQlydF9wYWQxOworCXUzMgkJcnRfcGFkMTsKIAlzdHJ1Y3Qgc29ja2FkZHIgcnRfZHN0OyAgICAgICAgIC8qIHRhcmdldCBhZGRyZXNzICAgICAgICAgICAgICAgKi8KIAlzdHJ1Y3Qgc29ja2FkZHIgcnRfZ2F0ZXdheTsgICAgIC8qIGdhdGV3YXkgYWRkciAoUlRGX0dBVEVXQVkpICAgKi8KIAlzdHJ1Y3Qgc29ja2FkZHIgcnRfZ2VubWFzazsgICAgIC8qIHRhcmdldCBuZXR3b3JrIG1hc2sgKElQKSAgICAgKi8KLQl1bnNpZ25lZCBzaG9ydCAgcnRfZmxhZ3M7Ci0Jc2hvcnQgICAgICAgICAgIHJ0X3BhZDI7Ci0JdTMyICAgCQlydF9wYWQzOwotCXVuc2lnbmVkIGNoYXIgICBydF90b3M7Ci0JdW5zaWduZWQgY2hhciAgIHJ0X2NsYXNzOwotCXNob3J0ICAgICAgICAgICBydF9wYWQ0OwotCXNob3J0ICAgICAgICAgICBydF9tZXRyaWM7ICAgICAgLyogKzEgZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5ISAqLworCXVuc2lnbmVkIHNob3J0CXJ0X2ZsYWdzOworCXNob3J0CQlydF9wYWQyOworCXUzMgkJcnRfcGFkMzsKKwl1bnNpZ25lZCBjaGFyCXJ0X3RvczsKKwl1bnNpZ25lZCBjaGFyCXJ0X2NsYXNzOworCXNob3J0CQlydF9wYWQ0OworCXNob3J0CQlydF9tZXRyaWM7ICAgICAgLyogKzEgZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5ISAqLwogCS8qIGNoYXIgKiAqLyB1MzIgcnRfZGV2OyAgICAgICAgLyogZm9yY2luZyB0aGUgZGV2aWNlIGF0IGFkZCAgICAqLwotCXUzMiAgIAkJcnRfbXR1OyAgICAgICAgIC8qIHBlciByb3V0ZSBNVFUvV2luZG93ICAgICAgICAgKi8KLQl1MzIgICAJCXJ0X3dpbmRvdzsgICAgICAvKiBXaW5kb3cgY2xhbXBpbmcgICAgICAgICAgICAgICovCisJdTMyCQlydF9tdHU7ICAgICAgICAgLyogcGVyIHJvdXRlIE1UVS9XaW5kb3cgICAgICAgICAqLworCXUzMgkJcnRfd2luZG93OyAgICAgIC8qIFdpbmRvdyBjbGFtcGluZyAgICAgICAgICAgICAgKi8KIAl1bnNpZ25lZCBzaG9ydCAgcnRfaXJ0dDsgICAgICAgIC8qIEluaXRpYWwgUlRUICAgICAgICAgICAgICAgICAgKi8KIH07CiAKQEAgLTI3OTMsMjkgKzI3OTYsMjkgQEAKIAogCWlmIChzb2NrICYmIHNvY2stPnNrICYmIHNvY2stPnNrLT5za19mYW1pbHkgPT0gQUZfSU5FVDYpIHsgLyogaXB2NiAqLwogCQlzdHJ1Y3QgaW42X3J0bXNnMzIgX191c2VyICp1cjYgPSBhcmdwOwotCQlyZXQgPSBjb3B5X2Zyb21fdXNlciAoJnI2LnJ0bXNnX2RzdCwgJih1cjYtPnJ0bXNnX2RzdCksCisJCXJldCA9IGNvcHlfZnJvbV91c2VyKCZyNi5ydG1zZ19kc3QsICYodXI2LT5ydG1zZ19kc3QpLAogCQkJMyAqIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKLQkJcmV0IHw9IF9fZ2V0X3VzZXIgKHI2LnJ0bXNnX3R5cGUsICYodXI2LT5ydG1zZ190eXBlKSk7Ci0JCXJldCB8PSBfX2dldF91c2VyIChyNi5ydG1zZ19kc3RfbGVuLCAmKHVyNi0+cnRtc2dfZHN0X2xlbikpOwotCQlyZXQgfD0gX19nZXRfdXNlciAocjYucnRtc2dfc3JjX2xlbiwgJih1cjYtPnJ0bXNnX3NyY19sZW4pKTsKLQkJcmV0IHw9IF9fZ2V0X3VzZXIgKHI2LnJ0bXNnX21ldHJpYywgJih1cjYtPnJ0bXNnX21ldHJpYykpOwotCQlyZXQgfD0gX19nZXRfdXNlciAocjYucnRtc2dfaW5mbywgJih1cjYtPnJ0bXNnX2luZm8pKTsKLQkJcmV0IHw9IF9fZ2V0X3VzZXIgKHI2LnJ0bXNnX2ZsYWdzLCAmKHVyNi0+cnRtc2dfZmxhZ3MpKTsKLQkJcmV0IHw9IF9fZ2V0X3VzZXIgKHI2LnJ0bXNnX2lmaW5kZXgsICYodXI2LT5ydG1zZ19pZmluZGV4KSk7CisJCXJldCB8PSBfX2dldF91c2VyKHI2LnJ0bXNnX3R5cGUsICYodXI2LT5ydG1zZ190eXBlKSk7CisJCXJldCB8PSBfX2dldF91c2VyKHI2LnJ0bXNnX2RzdF9sZW4sICYodXI2LT5ydG1zZ19kc3RfbGVuKSk7CisJCXJldCB8PSBfX2dldF91c2VyKHI2LnJ0bXNnX3NyY19sZW4sICYodXI2LT5ydG1zZ19zcmNfbGVuKSk7CisJCXJldCB8PSBfX2dldF91c2VyKHI2LnJ0bXNnX21ldHJpYywgJih1cjYtPnJ0bXNnX21ldHJpYykpOworCQlyZXQgfD0gX19nZXRfdXNlcihyNi5ydG1zZ19pbmZvLCAmKHVyNi0+cnRtc2dfaW5mbykpOworCQlyZXQgfD0gX19nZXRfdXNlcihyNi5ydG1zZ19mbGFncywgJih1cjYtPnJ0bXNnX2ZsYWdzKSk7CisJCXJldCB8PSBfX2dldF91c2VyKHI2LnJ0bXNnX2lmaW5kZXgsICYodXI2LT5ydG1zZ19pZmluZGV4KSk7CiAKIAkJciA9ICh2b2lkICopICZyNjsKIAl9IGVsc2UgeyAvKiBpcHY0ICovCiAJCXN0cnVjdCBydGVudHJ5MzIgX191c2VyICp1cjQgPSBhcmdwOwotCQlyZXQgPSBjb3B5X2Zyb21fdXNlciAoJnI0LnJ0X2RzdCwgJih1cjQtPnJ0X2RzdCksCisJCXJldCA9IGNvcHlfZnJvbV91c2VyKCZyNC5ydF9kc3QsICYodXI0LT5ydF9kc3QpLAogCQkJCQkzICogc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOwotCQlyZXQgfD0gX19nZXRfdXNlciAocjQucnRfZmxhZ3MsICYodXI0LT5ydF9mbGFncykpOwotCQlyZXQgfD0gX19nZXRfdXNlciAocjQucnRfbWV0cmljLCAmKHVyNC0+cnRfbWV0cmljKSk7Ci0JCXJldCB8PSBfX2dldF91c2VyIChyNC5ydF9tdHUsICYodXI0LT5ydF9tdHUpKTsKLQkJcmV0IHw9IF9fZ2V0X3VzZXIgKHI0LnJ0X3dpbmRvdywgJih1cjQtPnJ0X3dpbmRvdykpOwotCQlyZXQgfD0gX19nZXRfdXNlciAocjQucnRfaXJ0dCwgJih1cjQtPnJ0X2lydHQpKTsKLQkJcmV0IHw9IF9fZ2V0X3VzZXIgKHJ0ZGV2LCAmKHVyNC0+cnRfZGV2KSk7CisJCXJldCB8PSBfX2dldF91c2VyKHI0LnJ0X2ZsYWdzLCAmKHVyNC0+cnRfZmxhZ3MpKTsKKwkJcmV0IHw9IF9fZ2V0X3VzZXIocjQucnRfbWV0cmljLCAmKHVyNC0+cnRfbWV0cmljKSk7CisJCXJldCB8PSBfX2dldF91c2VyKHI0LnJ0X210dSwgJih1cjQtPnJ0X210dSkpOworCQlyZXQgfD0gX19nZXRfdXNlcihyNC5ydF93aW5kb3csICYodXI0LT5ydF93aW5kb3cpKTsKKwkJcmV0IHw9IF9fZ2V0X3VzZXIocjQucnRfaXJ0dCwgJih1cjQtPnJ0X2lydHQpKTsKKwkJcmV0IHw9IF9fZ2V0X3VzZXIocnRkZXYsICYodXI0LT5ydF9kZXYpKTsKIAkJaWYgKHJ0ZGV2KSB7Ci0JCQlyZXQgfD0gY29weV9mcm9tX3VzZXIgKGRldm5hbWUsIGNvbXBhdF9wdHIocnRkZXYpLCAxNSk7CisJCQlyZXQgfD0gY29weV9mcm9tX3VzZXIoZGV2bmFtZSwgY29tcGF0X3B0cihydGRldiksIDE1KTsKIAkJCXI0LnJ0X2RldiA9IGRldm5hbWU7IGRldm5hbWVbMTVdID0gMDsKIAkJfSBlbHNlCiAJCQlyNC5ydF9kZXYgPSBOVUxMOwpAQCAtMjgyOCw5ICsyODMxLDkgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0Jc2V0X2ZzIChLRVJORUxfRFMpOworCXNldF9mcyhLRVJORUxfRFMpOwogCXJldCA9IHNvY2tfZG9faW9jdGwobmV0LCBzb2NrLCBjbWQsICh1bnNpZ25lZCBsb25nKSByKTsKLQlzZXRfZnMgKG9sZF9mcyk7CisJc2V0X2ZzKG9sZF9mcyk7CiAKIG91dDoKIAlyZXR1cm4gcmV0OwpAQCAtMjk5MywxMSArMjk5NiwxMyBAQAogewogCXJldHVybiBzb2NrLT5vcHMtPmJpbmQoc29jaywgYWRkciwgYWRkcmxlbik7CiB9CitFWFBPUlRfU1lNQk9MKGtlcm5lbF9iaW5kKTsKIAogaW50IGtlcm5lbF9saXN0ZW4oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGJhY2tsb2cpCiB7CiAJcmV0dXJuIHNvY2stPm9wcy0+bGlzdGVuKHNvY2ssIGJhY2tsb2cpOwogfQorRVhQT1JUX1NZTUJPTChrZXJuZWxfbGlzdGVuKTsKIAogaW50IGtlcm5lbF9hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqKm5ld3NvY2ssIGludCBmbGFncykKIHsKQEAgLTMwMjIsMjQgKzMwMjcsMjggQEAKIGRvbmU6CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0woa2VybmVsX2FjY2VwdCk7CiAKIGludCBrZXJuZWxfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIGludCBhZGRybGVuLAogCQkgICBpbnQgZmxhZ3MpCiB7CiAJcmV0dXJuIHNvY2stPm9wcy0+Y29ubmVjdChzb2NrLCBhZGRyLCBhZGRybGVuLCBmbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MKGtlcm5lbF9jb25uZWN0KTsKIAogaW50IGtlcm5lbF9nZXRzb2NrbmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCiAJCQkgaW50ICphZGRybGVuKQogewogCXJldHVybiBzb2NrLT5vcHMtPmdldG5hbWUoc29jaywgYWRkciwgYWRkcmxlbiwgMCk7CiB9CitFWFBPUlRfU1lNQk9MKGtlcm5lbF9nZXRzb2NrbmFtZSk7CiAKIGludCBrZXJuZWxfZ2V0cGVlcm5hbWUoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICphZGRyLAogCQkJIGludCAqYWRkcmxlbikKIHsKIAlyZXR1cm4gc29jay0+b3BzLT5nZXRuYW1lKHNvY2ssIGFkZHIsIGFkZHJsZW4sIDEpOwogfQorRVhQT1JUX1NZTUJPTChrZXJuZWxfZ2V0cGVlcm5hbWUpOwogCiBpbnQga2VybmVsX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJCWNoYXIgKm9wdHZhbCwgaW50ICpvcHRsZW4pCkBAIC0zMDU2LDYgKzMwNjUsNyBAQAogCXNldF9mcyhvbGRmcyk7CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0woa2VybmVsX2dldHNvY2tvcHQpOwogCiBpbnQga2VybmVsX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJCWNoYXIgKm9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbikKQEAgLTMwNzIsNiArMzA4Miw3IEBACiAJc2V0X2ZzKG9sZGZzKTsKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTChrZXJuZWxfc2V0c29ja29wdCk7CiAKIGludCBrZXJuZWxfc2VuZHBhZ2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvZmZzZXQsCiAJCSAgICBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQpAQCAtMzA4Myw2ICszMDk0LDcgQEAKIAogCXJldHVybiBzb2NrX25vX3NlbmRwYWdlKHNvY2ssIHBhZ2UsIG9mZnNldCwgc2l6ZSwgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChrZXJuZWxfc2VuZHBhZ2UpOwogCiBpbnQga2VybmVsX3NvY2tfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC0zMDk1LDMzICszMTA3LDEwIEBACiAKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTChrZXJuZWxfc29ja19pb2N0bCk7CiAKIGludCBrZXJuZWxfc29ja19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBlbnVtIHNvY2tfc2h1dGRvd25fY21kIGhvdykKIHsKIAlyZXR1cm4gc29jay0+b3BzLT5zaHV0ZG93bihzb2NrLCBob3cpOwogfQotCi1FWFBPUlRfU1lNQk9MKHNvY2tfY3JlYXRlKTsKLUVYUE9SVF9TWU1CT0woc29ja19jcmVhdGVfa2Vybik7Ci1FWFBPUlRfU1lNQk9MKHNvY2tfY3JlYXRlX2xpdGUpOwotRVhQT1JUX1NZTUJPTChzb2NrX21hcF9mZCk7Ci1FWFBPUlRfU1lNQk9MKHNvY2tfcmVjdm1zZyk7Ci1FWFBPUlRfU1lNQk9MKHNvY2tfcmVnaXN0ZXIpOwotRVhQT1JUX1NZTUJPTChzb2NrX3JlbGVhc2UpOwotRVhQT1JUX1NZTUJPTChzb2NrX3NlbmRtc2cpOwotRVhQT1JUX1NZTUJPTChzb2NrX3VucmVnaXN0ZXIpOwotRVhQT1JUX1NZTUJPTChzb2NrX3dha2VfYXN5bmMpOwotRVhQT1JUX1NZTUJPTChzb2NrZmRfbG9va3VwKTsKLUVYUE9SVF9TWU1CT0woa2VybmVsX3NlbmRtc2cpOwotRVhQT1JUX1NZTUJPTChrZXJuZWxfcmVjdm1zZyk7Ci1FWFBPUlRfU1lNQk9MKGtlcm5lbF9iaW5kKTsKLUVYUE9SVF9TWU1CT0woa2VybmVsX2xpc3Rlbik7Ci1FWFBPUlRfU1lNQk9MKGtlcm5lbF9hY2NlcHQpOwotRVhQT1JUX1NZTUJPTChrZXJuZWxfY29ubmVjdCk7Ci1FWFBPUlRfU1lNQk9MKGtlcm5lbF9nZXRzb2NrbmFtZSk7Ci1FWFBPUlRfU1lNQk9MKGtlcm5lbF9nZXRwZWVybmFtZSk7Ci1FWFBPUlRfU1lNQk9MKGtlcm5lbF9nZXRzb2Nrb3B0KTsKLUVYUE9SVF9TWU1CT0woa2VybmVsX3NldHNvY2tvcHQpOwotRVhQT1JUX1NZTUJPTChrZXJuZWxfc2VuZHBhZ2UpOwotRVhQT1JUX1NZTUJPTChrZXJuZWxfc29ja19pb2N0bCk7CiBFWFBPUlRfU1lNQk9MKGtlcm5lbF9zb2NrX3NodXRkb3duKTsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aC5jIGIvbmV0L3N1bnJwYy9hdXRoLmMKaW5kZXggNzNhZmZiOC4uOGRjNDdmMSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoLmMKQEAgLTI2Nyw3ICsyNjcsNyBAQAogICogUnVuIG1lbW9yeSBjYWNoZSBzaHJpbmtlci4KICAqLwogc3RhdGljIGludAotcnBjYXV0aF9jYWNoZV9zaHJpbmtlcihpbnQgbnJfdG9fc2NhbiwgZ2ZwX3QgZ2ZwX21hc2spCitycGNhdXRoX2NhY2hlX3Nocmlua2VyKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLCBpbnQgbnJfdG9fc2NhbiwgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJTElTVF9IRUFEKGZyZWUpOwogCWludCByZXM7CmRpZmYgLS1naXQgYS9uZXQvdW5peC9hZl91bml4LmMgYi9uZXQvdW5peC9hZl91bml4LmMKaW5kZXggZmVmMmNjNS4uNDQxNGExOCAxMDA2NDQKLS0tIGEvbmV0L3VuaXgvYWZfdW5peC5jCisrKyBiL25ldC91bml4L2FmX3VuaXguYwpAQCAtMjgyLDcgKzI4Miw3IEBACiAJcmV0dXJuIHM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc29jayAqdW5peF9maW5kX3NvY2tldF9ieWlub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlub2RlICppKQorc3RhdGljIHN0cnVjdCBzb2NrICp1bml4X2ZpbmRfc29ja2V0X2J5aW5vZGUoc3RydWN0IGlub2RlICppKQogewogCXN0cnVjdCBzb2NrICpzOwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwpAQCAtMjkyLDkgKzI5Miw2IEBACiAJCSAgICAmdW5peF9zb2NrZXRfdGFibGVbaS0+aV9pbm8gJiAoVU5JWF9IQVNIX1NJWkUgLSAxKV0pIHsKIAkJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gdW5peF9zayhzKS0+ZGVudHJ5OwogCi0JCWlmICghbmV0X2VxKHNvY2tfbmV0KHMpLCBuZXQpKQotCQkJY29udGludWU7Ci0KIAkJaWYgKGRlbnRyeSAmJiBkZW50cnktPmRfaW5vZGUgPT0gaSkgewogCQkJc29ja19ob2xkKHMpOwogCQkJZ290byBmb3VuZDsKQEAgLTQ1MCwxMSArNDQ3LDMxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGluaXRfcGVlcmNyZWQoc3RydWN0IHNvY2sgKnNrKQoreworCXB1dF9waWQoc2stPnNrX3BlZXJfcGlkKTsKKwlpZiAoc2stPnNrX3BlZXJfY3JlZCkKKwkJcHV0X2NyZWQoc2stPnNrX3BlZXJfY3JlZCk7CisJc2stPnNrX3BlZXJfcGlkICA9IGdldF9waWQodGFza190Z2lkKGN1cnJlbnQpKTsKKwlzay0+c2tfcGVlcl9jcmVkID0gZ2V0X2N1cnJlbnRfY3JlZCgpOworfQorCitzdGF0aWMgdm9pZCBjb3B5X3BlZXJjcmVkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnBlZXJzaykKK3sKKwlwdXRfcGlkKHNrLT5za19wZWVyX3BpZCk7CisJaWYgKHNrLT5za19wZWVyX2NyZWQpCisJCXB1dF9jcmVkKHNrLT5za19wZWVyX2NyZWQpOworCXNrLT5za19wZWVyX3BpZCAgPSBnZXRfcGlkKHBlZXJzay0+c2tfcGVlcl9waWQpOworCXNrLT5za19wZWVyX2NyZWQgPSBnZXRfY3JlZChwZWVyc2stPnNrX3BlZXJfY3JlZCk7Cit9CisKIHN0YXRpYyBpbnQgdW5peF9saXN0ZW4oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGJhY2tsb2cpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3QgdW5peF9zb2NrICp1ID0gdW5peF9zayhzayk7CisJc3RydWN0IHBpZCAqb2xkX3BpZCA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGNyZWQgKm9sZF9jcmVkID0gTlVMTDsKIAogCWVyciA9IC1FT1BOT1RTVVBQOwogCWlmIChzb2NrLT50eXBlICE9IFNPQ0tfU1RSRUFNICYmIHNvY2stPnR5cGUgIT0gU09DS19TRVFQQUNLRVQpCkBAIC00NzAsMTIgKzQ4NywxNCBAQAogCXNrLT5za19tYXhfYWNrX2JhY2tsb2cJPSBiYWNrbG9nOwogCXNrLT5za19zdGF0ZQkJPSBUQ1BfTElTVEVOOwogCS8qIHNldCBjcmVkZW50aWFscyBzbyBjb25uZWN0IGNhbiBjb3B5IHRoZW0gKi8KLQlzay0+c2tfcGVlcmNyZWQucGlkCT0gdGFza190Z2lkX3ZucihjdXJyZW50KTsKLQljdXJyZW50X2V1aWRfZWdpZCgmc2stPnNrX3BlZXJjcmVkLnVpZCwgJnNrLT5za19wZWVyY3JlZC5naWQpOworCWluaXRfcGVlcmNyZWQoc2spOwogCWVyciA9IDA7CiAKIG91dF91bmxvY2s6CiAJdW5peF9zdGF0ZV91bmxvY2soc2spOworCXB1dF9waWQob2xkX3BpZCk7CisJaWYgKG9sZF9jcmVkKQorCQlwdXRfY3JlZChvbGRfY3JlZCk7CiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KQEAgLTczNiw3ICs3NTUsNyBAQAogCQllcnIgPSAtRUNPTk5SRUZVU0VEOwogCQlpZiAoIVNfSVNTT0NLKGlub2RlLT5pX21vZGUpKQogCQkJZ290byBwdXRfZmFpbDsKLQkJdSA9IHVuaXhfZmluZF9zb2NrZXRfYnlpbm9kZShuZXQsIGlub2RlKTsKKwkJdSA9IHVuaXhfZmluZF9zb2NrZXRfYnlpbm9kZShpbm9kZSk7CiAJCWlmICghdSkKIAkJCWdvdG8gcHV0X2ZhaWw7CiAKQEAgLTExNDAsOCArMTE1OSw3IEBACiAJdW5peF9wZWVyKG5ld3NrKQk9IHNrOwogCW5ld3NrLT5za19zdGF0ZQkJPSBUQ1BfRVNUQUJMSVNIRUQ7CiAJbmV3c2stPnNrX3R5cGUJCT0gc2stPnNrX3R5cGU7Ci0JbmV3c2stPnNrX3BlZXJjcmVkLnBpZAk9IHRhc2tfdGdpZF92bnIoY3VycmVudCk7Ci0JY3VycmVudF9ldWlkX2VnaWQoJm5ld3NrLT5za19wZWVyY3JlZC51aWQsICZuZXdzay0+c2tfcGVlcmNyZWQuZ2lkKTsKKwlpbml0X3BlZXJjcmVkKG5ld3NrKTsKIAluZXd1ID0gdW5peF9zayhuZXdzayk7CiAJbmV3c2stPnNrX3dxCQk9ICZuZXd1LT5wZWVyX3dxOwogCW90aGVydSA9IHVuaXhfc2sob3RoZXIpOwpAQCAtMTE1Nyw3ICsxMTc1LDcgQEAKIAl9CiAKIAkvKiBTZXQgY3JlZGVudGlhbHMgKi8KLQlzay0+c2tfcGVlcmNyZWQgPSBvdGhlci0+c2tfcGVlcmNyZWQ7CisJY29weV9wZWVyY3JlZChzaywgb3RoZXIpOwogCiAJc29jay0+c3RhdGUJPSBTU19DT05ORUNURUQ7CiAJc2stPnNrX3N0YXRlCT0gVENQX0VTVEFCTElTSEVEOwpAQCAtMTE5OSwxMCArMTIxNyw4IEBACiAJc29ja19ob2xkKHNrYik7CiAJdW5peF9wZWVyKHNrYSkgPSBza2I7CiAJdW5peF9wZWVyKHNrYikgPSBza2E7Ci0Jc2thLT5za19wZWVyY3JlZC5waWQgPSBza2ItPnNrX3BlZXJjcmVkLnBpZCA9IHRhc2tfdGdpZF92bnIoY3VycmVudCk7Ci0JY3VycmVudF9ldWlkX2VnaWQoJnNrYi0+c2tfcGVlcmNyZWQudWlkLCAmc2tiLT5za19wZWVyY3JlZC5naWQpOwotCXNrYS0+c2tfcGVlcmNyZWQudWlkID0gc2tiLT5za19wZWVyY3JlZC51aWQ7Ci0Jc2thLT5za19wZWVyY3JlZC5naWQgPSBza2ItPnNrX3BlZXJjcmVkLmdpZDsKKwlpbml0X3BlZXJjcmVkKHNrYSk7CisJaW5pdF9wZWVyY3JlZChza2IpOwogCiAJaWYgKHNrYS0+c2tfdHlwZSAhPSBTT0NLX0RHUkFNKSB7CiAJCXNrYS0+c2tfc3RhdGUgPSBUQ1BfRVNUQUJMSVNIRUQ7CkBAIC0xMjk3LDE4ICsxMzEzLDIwIEBACiAJaW50IGk7CiAKIAlzY20tPmZwID0gVU5JWENCKHNrYikuZnA7Ci0Jc2tiLT5kZXN0cnVjdG9yID0gc29ja193ZnJlZTsKIAlVTklYQ0Ioc2tiKS5mcCA9IE5VTEw7CiAKIAlmb3IgKGkgPSBzY20tPmZwLT5jb3VudC0xOyBpID49IDA7IGktLSkKIAkJdW5peF9ub3RpbmZsaWdodChzY20tPmZwLT5mcFtpXSk7CiB9CiAKLXN0YXRpYyB2b2lkIHVuaXhfZGVzdHJ1Y3RfZmRzKHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgdm9pZCB1bml4X2Rlc3RydWN0X3NjbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBzY21fY29va2llIHNjbTsKIAltZW1zZXQoJnNjbSwgMCwgc2l6ZW9mKHNjbSkpOwotCXVuaXhfZGV0YWNoX2Zkcygmc2NtLCBza2IpOworCXNjbS5waWQgID0gVU5JWENCKHNrYikucGlkOworCXNjbS5jcmVkID0gVU5JWENCKHNrYikuY3JlZDsKKwlpZiAoVU5JWENCKHNrYikuZnApCisJCXVuaXhfZGV0YWNoX2Zkcygmc2NtLCBza2IpOwogCiAJLyogQWxhcywgaXQgY2FsbHMgVkZTICovCiAJLyogU28gZnNja2luZyB3aGF0PyBmcHV0KCkgaGFkIGJlZW4gU01QLXNhZmUgc2luY2UgdGhlIGxhc3QgU3VtbWVyICovCkBAIC0xMzMxLDEwICsxMzQ5LDIyIEBACiAKIAlmb3IgKGkgPSBzY20tPmZwLT5jb3VudC0xOyBpID49IDA7IGktLSkKIAkJdW5peF9pbmZsaWdodChzY20tPmZwLT5mcFtpXSk7Ci0Jc2tiLT5kZXN0cnVjdG9yID0gdW5peF9kZXN0cnVjdF9mZHM7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdW5peF9zY21fdG9fc2tiKHN0cnVjdCBzY21fY29va2llICpzY20sIHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgc2VuZF9mZHMpCit7CisJaW50IGVyciA9IDA7CisJVU5JWENCKHNrYikucGlkICA9IGdldF9waWQoc2NtLT5waWQpOworCVVOSVhDQihza2IpLmNyZWQgPSBnZXRfY3JlZChzY20tPmNyZWQpOworCVVOSVhDQihza2IpLmZwID0gTlVMTDsKKwlpZiAoc2NtLT5mcCAmJiBzZW5kX2ZkcykKKwkJZXJyID0gdW5peF9hdHRhY2hfZmRzKHNjbSwgc2tiKTsKKworCXNrYi0+ZGVzdHJ1Y3RvciA9IHVuaXhfZGVzdHJ1Y3Rfc2NtOworCXJldHVybiBlcnI7Cit9CisKIC8qCiAgKglTZW5kIEFGX1VOSVggZGF0YS4KICAqLwpAQCAtMTM5MSwxMiArMTQyMSw5IEBACiAJaWYgKHNrYiA9PSBOVUxMKQogCQlnb3RvIG91dDsKIAotCW1lbWNweShVTklYQ1JFRFMoc2tiKSwgJnNpb2NiLT5zY20tPmNyZWRzLCBzaXplb2Yoc3RydWN0IHVjcmVkKSk7Ci0JaWYgKHNpb2NiLT5zY20tPmZwKSB7Ci0JCWVyciA9IHVuaXhfYXR0YWNoX2ZkcyhzaW9jYi0+c2NtLCBza2IpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXRfZnJlZTsKLQl9CisJZXJyID0gdW5peF9zY21fdG9fc2tiKHNpb2NiLT5zY20sIHNrYiwgdHJ1ZSk7CisJaWYgKGVycikKKwkJZ290byBvdXRfZnJlZTsKIAl1bml4X2dldF9zZWNkYXRhKHNpb2NiLT5zY20sIHNrYik7CiAKIAlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwpAQCAtMTU2NiwxNiArMTU5MywxNCBAQAogCQkgKi8KIAkJc2l6ZSA9IG1pbl90KGludCwgc2l6ZSwgc2tiX3RhaWxyb29tKHNrYikpOwogCi0JCW1lbWNweShVTklYQ1JFRFMoc2tiKSwgJnNpb2NiLT5zY20tPmNyZWRzLCBzaXplb2Yoc3RydWN0IHVjcmVkKSk7CisKIAkJLyogT25seSBzZW5kIHRoZSBmZHMgaW4gdGhlIGZpcnN0IGJ1ZmZlciAqLwotCQlpZiAoc2lvY2ItPnNjbS0+ZnAgJiYgIWZkc19zZW50KSB7Ci0JCQllcnIgPSB1bml4X2F0dGFjaF9mZHMoc2lvY2ItPnNjbSwgc2tiKTsKLQkJCWlmIChlcnIpIHsKLQkJCQlrZnJlZV9za2Ioc2tiKTsKLQkJCQlnb3RvIG91dF9lcnI7Ci0JCQl9Ci0JCQlmZHNfc2VudCA9IHRydWU7CisJCWVyciA9IHVuaXhfc2NtX3RvX3NrYihzaW9jYi0+c2NtLCBza2IsICFmZHNfc2VudCk7CisJCWlmIChlcnIpIHsKKwkJCWtmcmVlX3NrYihza2IpOworCQkJZ290byBvdXRfZXJyOwogCQl9CisJCWZkc19zZW50ID0gdHJ1ZTsKIAogCQllcnIgPSBtZW1jcHlfZnJvbWlvdmVjKHNrYl9wdXQoc2tiLCBzaXplKSwgbXNnLT5tc2dfaW92LCBzaXplKTsKIAkJaWYgKGVycikgewpAQCAtMTY5Miw3ICsxNzE3LDcgQEAKIAkJc2lvY2ItPnNjbSA9ICZ0bXBfc2NtOwogCQltZW1zZXQoJnRtcF9zY20sIDAsIHNpemVvZih0bXBfc2NtKSk7CiAJfQotCXNpb2NiLT5zY20tPmNyZWRzID0gKlVOSVhDUkVEUyhza2IpOworCXNjbV9zZXRfY3JlZChzaW9jYi0+c2NtLCBVTklYQ0Ioc2tiKS5waWQsIFVOSVhDQihza2IpLmNyZWQpOwogCXVuaXhfc2V0X3NlY2RhdGEoc2lvY2ItPnNjbSwgc2tiKTsKIAogCWlmICghKGZsYWdzICYgTVNHX1BFRUspKSB7CkBAIC0xODQxLDE0ICsxODY2LDE0IEBACiAKIAkJaWYgKGNoZWNrX2NyZWRzKSB7CiAJCQkvKiBOZXZlciBnbHVlIG1lc3NhZ2VzIGZyb20gZGlmZmVyZW50IHdyaXRlcnMgKi8KLQkJCWlmIChtZW1jbXAoVU5JWENSRURTKHNrYiksICZzaW9jYi0+c2NtLT5jcmVkcywKLQkJCQkgICBzaXplb2Yoc2lvY2ItPnNjbS0+Y3JlZHMpKSAhPSAwKSB7CisJCQlpZiAoKFVOSVhDQihza2IpLnBpZCAgIT0gc2lvY2ItPnNjbS0+cGlkKSB8fAorCQkJICAgIChVTklYQ0Ioc2tiKS5jcmVkICE9IHNpb2NiLT5zY20tPmNyZWQpKSB7CiAJCQkJc2tiX3F1ZXVlX2hlYWQoJnNrLT5za19yZWNlaXZlX3F1ZXVlLCBza2IpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9IGVsc2UgewogCQkJLyogQ29weSBjcmVkZW50aWFscyAqLwotCQkJc2lvY2ItPnNjbS0+Y3JlZHMgPSAqVU5JWENSRURTKHNrYik7CisJCQlzY21fc2V0X2NyZWQoc2lvY2ItPnNjbSwgVU5JWENCKHNrYikucGlkLCBVTklYQ0Ioc2tiKS5jcmVkKTsKIAkJCWNoZWNrX2NyZWRzID0gMTsKIAkJfQogCkBAIC0xODgxLDcgKzE5MDYsNyBAQAogCQkJCWJyZWFrOwogCQkJfQogCi0JCQlrZnJlZV9za2Ioc2tiKTsKKwkJCWNvbnN1bWVfc2tiKHNrYik7CiAKIAkJCWlmIChzaW9jYi0+c2NtLT5mcCkKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC93YW5yb3V0ZXIvd2FubWFpbi5jIGIvbmV0L3dhbnJvdXRlci93YW5tYWluLmMKaW5kZXggMjU4ZGFhOC4uMmJmMjM0MCAxMDA2NDQKLS0tIGEvbmV0L3dhbnJvdXRlci93YW5tYWluLmMKKysrIGIvbmV0L3dhbnJvdXRlci93YW5tYWluLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4JLyogc3VwcG9ydCBmb3IgbG9hZGFibGUgbW9kdWxlcyAqLwogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4JCS8qIGttYWxsb2MoKSwga2ZyZWUoKSAqLwotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgkvKiBpbmxpbmUgbWVtKiwgc3RyKiBmdW5jdGlvbnMgKi8KIApAQCAtNzEsNiArNzEsNyBAQAogICoJV0FOIGRldmljZSBJT0NUTCBoYW5kbGVycwogICovCiAKK3N0YXRpYyBERUZJTkVfTVVURVgod2Fucm91dGVyX211dGV4KTsKIHN0YXRpYyBpbnQgd2Fucm91dGVyX2RldmljZV9zZXR1cChzdHJ1Y3Qgd2FuX2RldmljZSAqd2FuZGV2LAogCQkJCSAgd2FuZGV2X2NvbmZfdCBfX3VzZXIgKnVfY29uZik7CiBzdGF0aWMgaW50IHdhbnJvdXRlcl9kZXZpY2Vfc3RhdChzdHJ1Y3Qgd2FuX2RldmljZSAqd2FuZGV2LApAQCAtMzc2LDcgKzM3Nyw3IEBACiAJaWYgKHdhbmRldi0+bWFnaWMgIT0gUk9VVEVSX01BR0lDKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmd2Fucm91dGVyX211dGV4KTsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgUk9VVEVSX1NFVFVQOgogCQllcnIgPSB3YW5yb3V0ZXJfZGV2aWNlX3NldHVwKHdhbmRldiwgZGF0YSk7CkBAIC00MDgsNyArNDA5LDcgQEAKIAkJCWVyciA9IHdhbmRldi0+aW9jdGwod2FuZGV2LCBjbWQsIGFyZyk7CiAJCWVsc2UgZXJyID0gLUVJTlZBTDsKIAl9Ci0JdW5sb2NrX2tlcm5lbCgpOworCW11dGV4X3VubG9jaygmd2Fucm91dGVyX211dGV4KTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9uZXQvd2Fucm91dGVyL3dhbnByb2MuYyBiL25ldC93YW5yb3V0ZXIvd2FucHJvYy5jCmluZGV4IGM0NGQ5NmIuLjExZjI1YzcgMTAwNjQ0Ci0tLSBhL25ldC93YW5yb3V0ZXIvd2FucHJvYy5jCisrKyBiL25ldC93YW5yb3V0ZXIvd2FucHJvYy5jCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvd2Fucm91dGVyLmg+CS8qIFdBTiByb3V0ZXIgQVBJIGRlZmluaXRpb25zICovCiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtNjYsNiArNjYsNyBAQAogICoJL3Byb2MvbmV0L3JvdXRlcgogICovCiAKK3N0YXRpYyBERUZJTkVfTVVURVgoY29uZmlnX211dGV4KTsKIHN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2Nfcm91dGVyOwogCiAvKiBTdHJpbmdzICovCkBAIC04NSw3ICs4Niw3IEBACiAJc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldjsKIAlsb2ZmX3QgbCA9ICpwb3M7CiAKLQlsb2NrX2tlcm5lbCgpOworCW11dGV4X2xvY2soJmNvbmZpZ19tdXRleCk7CiAJaWYgKCFsLS0pCiAJCXJldHVybiBTRVFfU1RBUlRfVE9LRU47CiAJZm9yICh3YW5kZXYgPSB3YW5yb3V0ZXJfcm91dGVyX2Rldmxpc3Q7IGwtLSAmJiB3YW5kZXY7CkBAIC0xMDQsNyArMTA1LDcgQEAKIHN0YXRpYyB2b2lkIHJfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiAJX19yZWxlYXNlcyhrZXJuZWxfbG9jaykKIHsKLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZjb25maWdfbXV0ZXgpOwogfQogCiBzdGF0aWMgaW50IGNvbmZpZ19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jaGFuLmMgYi9uZXQvd2lyZWxlc3MvY2hhbi5jCmluZGV4IGIwMWE2ZjYuLmQwYzkyZGQgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jaGFuLmMKKysrIGIvbmV0L3dpcmVsZXNzL2NoYW4uYwpAQCAtMzUsOCArMzUsOSBAQAogCQlpZiAoIWh0X2NhcC0+aHRfc3VwcG9ydGVkKQogCQkJcmV0dXJuIE5VTEw7CiAKLQkJaWYgKCEoaHRfY2FwLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCkgfHwKLQkJICAgIGh0X2NhcC0+Y2FwICYgSUVFRTgwMjExX0hUX0NBUF80ME1IWl9JTlRPTEVSQU5UKQorCQlpZiAoY2hhbm5lbF90eXBlICE9IE5MODAyMTFfQ0hBTl9IVDIwICYmCisJCSAgICAoIShodF9jYXAtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwKSB8fAorCQkgICAgaHRfY2FwLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQXzQwTUhaX0lOVE9MRVJBTlQpKQogCQkJcmV0dXJuIE5VTEw7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5jIGIvbmV0L3dpcmVsZXNzL2NvcmUuYwppbmRleCAzN2QwZTBhLi41NDFlMmZmIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jCisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmMKQEAgLTQ3MiwyNCArNDcyLDIyIEBACiAJLyogY2hlY2sgYW5kIHNldCB1cCBiaXRyYXRlcyAqLwogCWllZWU4MDIxMV9zZXRfYml0cmF0ZV9mbGFncyh3aXBoeSk7CiAKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisKIAlyZXMgPSBkZXZpY2VfYWRkKCZyZGV2LT53aXBoeS5kZXYpOwogCWlmIChyZXMpCi0JCXJldHVybiByZXM7CisJCWdvdG8gb3V0X3VubG9jazsKIAogCXJlcyA9IHJma2lsbF9yZWdpc3RlcihyZGV2LT5yZmtpbGwpOwogCWlmIChyZXMpCiAJCWdvdG8gb3V0X3JtX2RldjsKIAotCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKLQogCS8qIHNldCB1cCByZWd1bGF0b3J5IGluZm8gKi8KIAl3aXBoeV91cGRhdGVfcmVndWxhdG9yeSh3aXBoeSwgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkUpOwogCiAJbGlzdF9hZGRfcmN1KCZyZGV2LT5saXN0LCAmY2ZnODAyMTFfcmRldl9saXN0KTsKIAljZmc4MDIxMV9yZGV2X2xpc3RfZ2VuZXJhdGlvbisrOwogCi0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7Ci0KIAkvKiBhZGQgdG8gZGVidWdmcyAqLwogCXJkZXYtPndpcGh5LmRlYnVnZnNkaXIgPQogCQlkZWJ1Z2ZzX2NyZWF0ZV9kaXIod2lwaHlfbmFtZSgmcmRldi0+d2lwaHkpLApAQCAtNTA5LDExICs1MDcsMTUgQEAKIAl9CiAKIAljZmc4MDIxMV9kZWJ1Z2ZzX3JkZXZfYWRkKHJkZXYpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiAKLSBvdXRfcm1fZGV2Ogorb3V0X3JtX2RldjoKIAlkZXZpY2VfZGVsKCZyZGV2LT53aXBoeS5kZXYpOworCitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCXJldHVybiByZXM7CiB9CiBFWFBPUlRfU1lNQk9MKHdpcGh5X3JlZ2lzdGVyKTsKQEAgLTg5NCw3ICs4OTYsNyBAQAogfQogc3Vic3lzX2luaXRjYWxsKGNmZzgwMjExX2luaXQpOwogCi1zdGF0aWMgdm9pZCBjZmc4MDIxMV9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgY2ZnODAyMTFfZXhpdCh2b2lkKQogewogCWRlYnVnZnNfcmVtb3ZlKGllZWU4MDIxMV9kZWJ1Z2ZzX2Rpcik7CiAJbmw4MDIxMV9leGl0KCk7CkBAIC05MDUsMyArOTA3LDUyIEBACiAJZGVzdHJveV93b3JrcXVldWUoY2ZnODAyMTFfd3EpOwogfQogbW9kdWxlX2V4aXQoY2ZnODAyMTFfZXhpdCk7CisKK3N0YXRpYyBpbnQgX19fd2lwaHlfcHJpbnRrKGNvbnN0IGNoYXIgKmxldmVsLCBjb25zdCBzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJICAgc3RydWN0IHZhX2Zvcm1hdCAqdmFmKQoreworCWlmICghd2lwaHkpCisJCXJldHVybiBwcmludGsoIiVzKE5VTEwgd2lwaHkgKik6ICVwViIsIGxldmVsLCB2YWYpOworCisJcmV0dXJuIHByaW50aygiJXMlczogJXBWIiwgbGV2ZWwsIHdpcGh5X25hbWUod2lwaHkpLCB2YWYpOworfQorCitpbnQgX193aXBoeV9wcmludGsoY29uc3QgY2hhciAqbGV2ZWwsIGNvbnN0IHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCSAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXN0cnVjdCB2YV9mb3JtYXQgdmFmOworCXZhX2xpc3QgYXJnczsKKwlpbnQgcjsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisKKwl2YWYuZm10ID0gZm10OworCXZhZi52YSA9ICZhcmdzOworCisJciA9IF9fX3dpcGh5X3ByaW50ayhsZXZlbCwgd2lwaHksICZ2YWYpOworCXZhX2VuZChhcmdzKTsKKworCXJldHVybiByOworfQorRVhQT1JUX1NZTUJPTChfX3dpcGh5X3ByaW50ayk7CisKKyNkZWZpbmUgZGVmaW5lX3dpcGh5X3ByaW50a19sZXZlbChmdW5jLCBrZXJuX2xldmVsKQkJXAoraW50IGZ1bmMoY29uc3Qgc3RydWN0IHdpcGh5ICp3aXBoeSwgY29uc3QgY2hhciAqZm10LCAuLi4pCVwKK3sJCQkJCQkJCVwKKwlzdHJ1Y3QgdmFfZm9ybWF0IHZhZjsJCQkJCVwKKwl2YV9saXN0IGFyZ3M7CQkJCQkJXAorCWludCByOwkJCQkJCQlcCisJCQkJCQkJCVwKKwl2YV9zdGFydChhcmdzLCBmbXQpOwkJCQkJXAorCQkJCQkJCQlcCisJdmFmLmZtdCA9IGZtdDsJCQkJCQlcCisJdmFmLnZhID0gJmFyZ3M7CQkJCQkJXAorCQkJCQkJCQlcCisJciA9IF9fX3dpcGh5X3ByaW50ayhrZXJuX2xldmVsLCB3aXBoeSwgJnZhZik7CQlcCisJdmFfZW5kKGFyZ3MpOwkJCQkJCVwKKwkJCQkJCQkJXAorCXJldHVybiByOwkJCQkJCVwKK30JCQkJCQkJCVwKK0VYUE9SVF9TWU1CT0woZnVuYyk7CisKK2RlZmluZV93aXBoeV9wcmludGtfbGV2ZWwod2lwaHlfZGVidWcsIEtFUk5fREVCVUcpOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuaCBiL25ldC93aXJlbGVzcy9jb3JlLmgKaW5kZXggYWU5MzBhYy4uNjNkNTdhZSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuaAorKysgYi9uZXQvd2lyZWxlc3MvY29yZS5oCkBAIC0zMzksNiArMzM5LDcgQEAKIAkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKIAkJCSBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSwKKwkJCSBib29sIGNoYW5uZWxfdHlwZV92YWxpZCwKIAkJCSBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuLCB1NjQgKmNvb2tpZSk7CiAKIC8qIFNNRSAqLwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2dlbnJlZ2RiLmF3ayBiL25ldC93aXJlbGVzcy9nZW5yZWdkYi5hd2sKaW5kZXggM2NjOWU2OS4uNTNjMTQzZiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2dlbnJlZ2RiLmF3aworKysgYi9uZXQvd2lyZWxlc3MvZ2VucmVnZGIuYXdrCkBAIC0yMSw2ICsyMSw3IEBACiAJcHJpbnQgIiIKIAlwcmludCAiI2luY2x1ZGUgPGxpbnV4L25sODAyMTEuaD4iCiAJcHJpbnQgIiNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4iCisJcHJpbnQgIiNpbmNsdWRlIFwicmVnZGIuaFwiIgogCXByaW50ICIiCiAJcmVnZGIgPSAiY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ19yZWdkYltdID0ge1xuIgogfQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2lic3MuYyBiL25ldC93aXJlbGVzcy9pYnNzLmMKaW5kZXggYWRjYWJiYS4uMjdhOGNlOSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2lic3MuYworKysgYi9uZXQvd2lyZWxlc3MvaWJzcy5jCkBAIC0yNDcsOCArMjQ3LDEwIEBACiAJaWYgKCFuZXRpZl9ydW5uaW5nKHdkZXYtPm5ldGRldikpCiAJCXJldHVybiAwOwogCi0JaWYgKHdkZXYtPndleHQua2V5cykKKwlpZiAod2Rldi0+d2V4dC5rZXlzKSB7CiAJCXdkZXYtPndleHQua2V5cy0+ZGVmID0gd2Rldi0+d2V4dC5kZWZhdWx0X2tleTsKKwkJd2Rldi0+d2V4dC5rZXlzLT5kZWZtZ210ID0gd2Rldi0+d2V4dC5kZWZhdWx0X21nbXRfa2V5OworCX0KIAogCXdkZXYtPndleHQuaWJzcy5wcml2YWN5ID0gd2Rldi0+d2V4dC5kZWZhdWx0X2tleSAhPSAtMTsKIApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2xpYjgwMjExX2NyeXB0X2NjbXAuYyBiL25ldC93aXJlbGVzcy9saWI4MDIxMV9jcnlwdF9jY21wLmMKaW5kZXggYjdmYTMxZC4uZGFjYjNiNCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2xpYjgwMjExX2NyeXB0X2NjbXAuYworKysgYi9uZXQvd2lyZWxlc3MvbGliODAyMTFfY3J5cHRfY2NtcC5jCkBAIC00NjcsNyArNDY3LDYgQEAKIAkubmFtZSA9ICJDQ01QIiwKIAkuaW5pdCA9IGxpYjgwMjExX2NjbXBfaW5pdCwKIAkuZGVpbml0ID0gbGliODAyMTFfY2NtcF9kZWluaXQsCi0JLmJ1aWxkX2l2ID0gbGliODAyMTFfY2NtcF9oZHIsCiAJLmVuY3J5cHRfbXBkdSA9IGxpYjgwMjExX2NjbXBfZW5jcnlwdCwKIAkuZGVjcnlwdF9tcGR1ID0gbGliODAyMTFfY2NtcF9kZWNyeXB0LAogCS5lbmNyeXB0X21zZHUgPSBOVUxMLApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2xpYjgwMjExX2NyeXB0X3RraXAuYyBiL25ldC93aXJlbGVzcy9saWI4MDIxMV9jcnlwdF90a2lwLmMKaW5kZXggOGNiZGIzMi4uMGZlNDA1MSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2xpYjgwMjExX2NyeXB0X3RraXAuYworKysgYi9uZXQvd2lyZWxlc3MvbGliODAyMTFfY3J5cHRfdGtpcC5jCkBAIC01NzgsNyArNTc4LDcgQEAKIAl9CiAKIAlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkcjExLT5mcmFtZV9jb250cm9sKSkgewotCQloZHJbMTJdID0gbGUxNl90b19jcHUoKmllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIxMSkpCisJCWhkclsxMl0gPSBsZTE2X3RvX2NwdSgqKChfX2xlMTYgKilpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyMTEpKSkKIAkJCSYgSUVFRTgwMjExX1FPU19DVExfVElEX01BU0s7CiAJfSBlbHNlCiAJCWhkclsxMl0gPSAwOwkJLyogcHJpb3JpdHkgKi8KQEAgLTc1Nyw3ICs3NTcsNiBAQAogCS5uYW1lID0gIlRLSVAiLAogCS5pbml0ID0gbGliODAyMTFfdGtpcF9pbml0LAogCS5kZWluaXQgPSBsaWI4MDIxMV90a2lwX2RlaW5pdCwKLQkuYnVpbGRfaXYgPSBsaWI4MDIxMV90a2lwX2hkciwKIAkuZW5jcnlwdF9tcGR1ID0gbGliODAyMTFfdGtpcF9lbmNyeXB0LAogCS5kZWNyeXB0X21wZHUgPSBsaWI4MDIxMV90a2lwX2RlY3J5cHQsCiAJLmVuY3J5cHRfbXNkdSA9IGxpYjgwMjExX21pY2hhZWxfbWljX2FkZCwKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9saWI4MDIxMV9jcnlwdF93ZXAuYyBiL25ldC93aXJlbGVzcy9saWI4MDIxMV9jcnlwdF93ZXAuYwppbmRleCA2ZDQxZTA1Li5lMmU4ODg3IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvbGliODAyMTFfY3J5cHRfd2VwLmMKKysrIGIvbmV0L3dpcmVsZXNzL2xpYjgwMjExX2NyeXB0X3dlcC5jCkBAIC0yNjksNyArMjY5LDYgQEAKIAkubmFtZSA9ICJXRVAiLAogCS5pbml0ID0gbGliODAyMTFfd2VwX2luaXQsCiAJLmRlaW5pdCA9IGxpYjgwMjExX3dlcF9kZWluaXQsCi0JLmJ1aWxkX2l2ID0gbGliODAyMTFfd2VwX2J1aWxkX2l2LAogCS5lbmNyeXB0X21wZHUgPSBsaWI4MDIxMV93ZXBfZW5jcnlwdCwKIAkuZGVjcnlwdF9tcGR1ID0gbGliODAyMTFfd2VwX2RlY3J5cHQsCiAJLmVuY3J5cHRfbXNkdSA9IE5VTEwsCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvbWxtZS5jIGIvbmV0L3dpcmVsZXNzL21sbWUuYwppbmRleCA0OGVhZDZmLi5lNzRhMWEyIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvbWxtZS5jCisrKyBiL25ldC93aXJlbGVzcy9tbG1lLmMKQEAgLTQ0LDEwICs0NCwxMCBAQAogCQl9CiAJfQogCi0JV0FSTl9PTighZG9uZSk7Ci0KLQlubDgwMjExX3NlbmRfcnhfYXV0aChyZGV2LCBkZXYsIGJ1ZiwgbGVuLCBHRlBfS0VSTkVMKTsKLQljZmc4MDIxMV9zbWVfcnhfYXV0aChkZXYsIGJ1ZiwgbGVuKTsKKwlpZiAoZG9uZSkgeworCQlubDgwMjExX3NlbmRfcnhfYXV0aChyZGV2LCBkZXYsIGJ1ZiwgbGVuLCBHRlBfS0VSTkVMKTsKKwkJY2ZnODAyMTFfc21lX3J4X2F1dGgoZGV2LCBidWYsIGxlbik7CisJfQogCiAJd2Rldl91bmxvY2sod2Rldik7CiB9CkBAIC04MjcsNiArODI3LDcgQEAKIAkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKIAkJCSBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSwKKwkJCSBib29sIGNoYW5uZWxfdHlwZV92YWxpZCwKIAkJCSBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuLCB1NjQgKmNvb2tpZSkKIHsKIAlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOwpAQCAtODQ1LDggKzg0Niw5IEBACiAJCWlmICghd2Rldi0+Y3VycmVudF9ic3MgfHwKIAkJICAgIG1lbWNtcCh3ZGV2LT5jdXJyZW50X2Jzcy0+cHViLmJzc2lkLCBtZ210LT5ic3NpZCwKIAkJCSAgIEVUSF9BTEVOKSAhPSAwIHx8Ci0JCSAgICBtZW1jbXAod2Rldi0+Y3VycmVudF9ic3MtPnB1Yi5ic3NpZCwgbWdtdC0+ZGEsCi0JCQkgICBFVEhfQUxFTikgIT0gMCkKKwkJICAgICh3ZGV2LT5pZnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgorCQkgICAgIG1lbWNtcCh3ZGV2LT5jdXJyZW50X2Jzcy0+cHViLmJzc2lkLCBtZ210LT5kYSwKKwkJCSAgICBFVEhfQUxFTikgIT0gMCkpCiAJCQlyZXR1cm4gLUVOT1RDT05OOwogCX0KIApAQCAtODU1LDcgKzg1Nyw3IEBACiAKIAkvKiBUcmFuc21pdCB0aGUgQWN0aW9uIGZyYW1lIGFzIHJlcXVlc3RlZCBieSB1c2VyIHNwYWNlICovCiAJcmV0dXJuIHJkZXYtPm9wcy0+YWN0aW9uKCZyZGV2LT53aXBoeSwgZGV2LCBjaGFuLCBjaGFubmVsX3R5cGUsCi0JCQkJIGJ1ZiwgbGVuLCBjb29raWUpOworCQkJCSBjaGFubmVsX3R5cGVfdmFsaWQsIGJ1ZiwgbGVuLCBjb29raWUpOwogfQogCiBib29sIGNmZzgwMjExX3J4X2FjdGlvbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZnJlcSwgY29uc3QgdTggKmJ1ZiwKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCmluZGV4IGRiNzExNTAuLjM3OTAyYTUgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMKKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwpAQCAtMTUzLDYgKzE1Myw5IEBACiAJW05MODAyMTFfQVRUUl9DUU1dID0geyAudHlwZSA9IE5MQV9ORVNURUQsIH0sCiAJW05MODAyMTFfQVRUUl9MT0NBTF9TVEFURV9DSEFOR0VdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sCiAJW05MODAyMTFfQVRUUl9BUF9JU09MQVRFXSA9IHsgLnR5cGUgPSBOTEFfVTggfSwKKworCVtOTDgwMjExX0FUVFJfV0lQSFlfVFhfUE9XRVJfU0VUVElOR10gPSB7IC50eXBlID0gTkxBX1UzMiB9LAorCVtOTDgwMjExX0FUVFJfV0lQSFlfVFhfUE9XRVJfTEVWRUxdID0geyAudHlwZSA9IE5MQV9VMzIgfSwKIH07CiAKIC8qIHBvbGljeSBmb3IgdGhlIGF0dHJpYnV0ZXMgKi8KQEAgLTg2OSw2ICs4NzIsMzQgQEAKIAkJCWdvdG8gYmFkX3JlczsKIAl9CiAKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX1RYX1BPV0VSX1NFVFRJTkddKSB7CisJCWVudW0gbmw4MDIxMV90eF9wb3dlcl9zZXR0aW5nIHR5cGU7CisJCWludCBpZHgsIG1ibSA9IDA7CisKKwkJaWYgKCFyZGV2LT5vcHMtPnNldF90eF9wb3dlcikgeworCQkJcmVzdWx0ID0gLUVPUE5PVFNVUFA7CisJCQlnb3RvIGJhZF9yZXM7CisJCX0KKworCQlpZHggPSBOTDgwMjExX0FUVFJfV0lQSFlfVFhfUE9XRVJfU0VUVElORzsKKwkJdHlwZSA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW2lkeF0pOworCisJCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX1RYX1BPV0VSX0xFVkVMXSAmJgorCQkgICAgKHR5cGUgIT0gTkw4MDIxMV9UWF9QT1dFUl9BVVRPTUFUSUMpKSB7CisJCQlyZXN1bHQgPSAtRUlOVkFMOworCQkJZ290byBiYWRfcmVzOworCQl9CisKKwkJaWYgKHR5cGUgIT0gTkw4MDIxMV9UWF9QT1dFUl9BVVRPTUFUSUMpIHsKKwkJCWlkeCA9IE5MODAyMTFfQVRUUl9XSVBIWV9UWF9QT1dFUl9MRVZFTDsKKwkJCW1ibSA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW2lkeF0pOworCQl9CisKKwkJcmVzdWx0ID0gcmRldi0+b3BzLT5zZXRfdHhfcG93ZXIoJnJkZXYtPndpcGh5LCB0eXBlLCBtYm0pOworCQlpZiAocmVzdWx0KQorCQkJZ290byBiYWRfcmVzOworCX0KKwogCWNoYW5nZWQgPSAwOwogCiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9SRVRSWV9TSE9SVF0pIHsKQEAgLTExMDcsNyArMTEzOCw3IEBACiAJCQkgICAgICAgZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGUpCiB7CiAJaWYgKCF1c2VfNGFkZHIpIHsKLQkJaWYgKG5ldGRldiAmJiBuZXRkZXYtPmJyX3BvcnQpCisJCWlmIChuZXRkZXYgJiYgKG5ldGRldi0+cHJpdl9mbGFncyAmIElGRl9CUklER0VfUE9SVCkpCiAJCQlyZXR1cm4gLUVCVVNZOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0yNzM4LDYgKzI3NjksNyBAQAogCiAgbmxhX3B1dF9mYWlsdXJlOgogCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKKwlubG1zZ19mcmVlKG1zZyk7CiAJZXJyID0gLUVNU0dTSVpFOwogIG91dDoKIAkvKiBDbGVhbnVwICovCkBAIC0yOTI5LDYgKzI5NjEsNyBAQAogCiBubGFfcHV0X2ZhaWx1cmU6CiAJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOworCW5sbXNnX2ZyZWUobXNnKTsKIAllcnIgPSAtRU1TR1NJWkU7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CkBAIC0zOTU1LDYgKzM5ODgsNTUgQEAKIAkJfQogCX0KIAorCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfQlNTX0JBU0lDX1JBVEVTXSkgeworCQl1OCAqcmF0ZXMgPQorCQkJbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0JTU19CQVNJQ19SQVRFU10pOworCQlpbnQgbl9yYXRlcyA9CisJCQlubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9CU1NfQkFTSUNfUkFURVNdKTsKKwkJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQgPQorCQkJd2lwaHktPmJhbmRzW2lic3MuY2hhbm5lbC0+YmFuZF07CisJCWludCBpLCBqOworCisJCWlmIChuX3JhdGVzID09IDApIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBuX3JhdGVzOyBpKyspIHsKKwkJCWludCByYXRlID0gKHJhdGVzW2ldICYgMHg3ZikgKiA1OworCQkJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJCQlmb3IgKGogPSAwOyBqIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGorKykgeworCQkJCWlmIChzYmFuZC0+Yml0cmF0ZXNbal0uYml0cmF0ZSA9PSByYXRlKSB7CisJCQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQkJaWJzcy5iYXNpY19yYXRlcyB8PSBCSVQoaik7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmICghZm91bmQpIHsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJKiBJZiBubyByYXRlcyB3ZXJlIGV4cGxpY2l0bHkgY29uZmlndXJlZCwKKwkJKiB1c2UgdGhlIG1hbmRhdG9yeSByYXRlIHNldCBmb3IgMTFiIG9yCisJCSogMTFhIGZvciBtYXhpbXVtIGNvbXBhdGliaWxpdHkuCisJCSovCisJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0KKwkJCXdpcGh5LT5iYW5kc1tpYnNzLmNoYW5uZWwtPmJhbmRdOworCQlpbnQgajsKKwkJdTMyIGZsYWcgPSBpYnNzLmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWiA/CisJCQlJRUVFODAyMTFfUkFURV9NQU5EQVRPUllfQSA6CisJCQlJRUVFODAyMTFfUkFURV9NQU5EQVRPUllfQjsKKworCQlmb3IgKGogPSAwOyBqIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGorKykgeworCQkJaWYgKHNiYW5kLT5iaXRyYXRlc1tqXS5mbGFncyAmIGZsYWcpCisJCQkJaWJzcy5iYXNpY19yYXRlcyB8PSBCSVQoaik7CisJCX0KKwl9CisKIAllcnIgPSBjZmc4MDIxMV9qb2luX2lic3MocmRldiwgZGV2LCAmaWJzcywgY29ubmtleXMpOwogCiBvdXQ6CkBAIC00NjUzLDcgKzQ3MzUsOCBAQAogCWlmIChlcnIpCiAJCWdvdG8gdW5sb2NrX3J0bmw7CiAKLQlpZiAoZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCWlmIChkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCisJICAgIGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CkBAIC00NjgxLDYgKzQ3NjQsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOwogCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlID0gTkw4MDIxMV9DSEFOX05PX0hUOworCWJvb2wgY2hhbm5lbF90eXBlX3ZhbGlkID0gZmFsc2U7CiAJdTMyIGZyZXE7CiAJaW50IGVycjsKIAl2b2lkICpoZHI7CkBAIC00NzAyLDcgKzQ3ODYsOCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCWlmIChkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCisJICAgIGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CkBAIC00NzIyLDYgKzQ4MDcsNyBAQAogCQkJZXJyID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwogCQl9CisJCWNoYW5uZWxfdHlwZV92YWxpZCA9IHRydWU7CiAJfQogCiAJZnJlcSA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSk7CkBAIC00NzQ1LDYgKzQ4MzEsNyBAQAogCQlnb3RvIGZyZWVfbXNnOwogCX0KIAllcnIgPSBjZmc4MDIxMV9tbG1lX2FjdGlvbihyZGV2LCBkZXYsIGNoYW4sIGNoYW5uZWxfdHlwZSwKKwkJCQkgICBjaGFubmVsX3R5cGVfdmFsaWQsCiAJCQkJICAgbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FXSksCiAJCQkJICAgbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfRlJBTUVdKSwKIAkJCQkgICAmY29va2llKTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWcuYyBiL25ldC93aXJlbGVzcy9yZWcuYwppbmRleCA4ZjBkOTdkLi5mMTgwZGIwIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmMKKysrIGIvbmV0L3dpcmVsZXNzL3JlZy5jCkBAIC02NywyMCArNjcsMTIgQEAKIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpjZmc4MDIxMV9yZWdkb21haW47CiAKIC8qCi0gKiBXZSB1c2UgdGhpcyBhcyBhIHBsYWNlIGZvciB0aGUgcmQgc3RydWN0dXJlIGJ1aWx0IGZyb20gdGhlCi0gKiBsYXN0IHBhcnNlZCBjb3VudHJ5IElFIHRvIHJlc3QgdW50aWwgQ1JEQSBnZXRzIGJhY2sgdG8gdXMgd2l0aAotICogd2hhdCBpdCB0aGlua3Mgc2hvdWxkIGFwcGx5IGZvciB0aGUgc2FtZSBjb3VudHJ5Ci0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqY291bnRyeV9pZV9yZWdkb21haW47Ci0KLS8qCiAgKiBQcm90ZWN0cyBzdGF0aWMgcmVnLmMgY29tcG9uZW50czoKICAqICAgICAtIGNmZzgwMjExX3dvcmxkX3JlZ2RvbQogICogICAgIC0gY2ZnODAyMTFfcmVnZG9tCi0gKiAgICAgLSBjb3VudHJ5X2llX3JlZ2RvbWFpbgogICogICAgIC0gbGFzdF9yZXF1ZXN0CiAgKi8KLURFRklORV9NVVRFWChyZWdfbXV0ZXgpOworc3RhdGljIERFRklORV9NVVRFWChyZWdfbXV0ZXgpOwogI2RlZmluZSBhc3NlcnRfcmVnX2xvY2soKSBXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJnJlZ19tdXRleCkpCiAKIC8qIFVzZWQgdG8gcXVldWUgdXAgcmVndWxhdG9yeSBoaW50cyAqLwpAQCAtMjc1LDI1ICsyNjcsNiBAQAogCXJldHVybiB0cnVlOwogfQogCi0vKioKLSAqIGNvdW50cnlfaWVfaW50ZWdyaXR5X2NoYW5nZXMgLSB0ZWxscyB1cyBpZiB0aGUgY291bnRyeSBJRSBoYXMgY2hhbmdlZAotICogQGNoZWNrc3VtOiBjaGVja3N1bSBvZiBjb3VudHJ5IElFIG9mIGZpZWxkcyB3ZSBhcmUgaW50ZXJlc3RlZCBpbgotICoKLSAqIElmIHRoZSBjb3VudHJ5IElFIGhhcyBub3QgY2hhbmdlZCB5b3UgY2FuIGlnbm9yZSBpdCBzYWZlbHkuIFRoaXMgaXMKLSAqIHVzZWZ1bCB0byBkZXRlcm1pbmUgaWYgdHdvIGRldmljZXMgYXJlIHNlZWluZyB0d28gZGlmZmVyZW50IGNvdW50cnkgSUVzCi0gKiBldmVuIG9uIHRoZSBzYW1lIGFscGhhMi4gTm90ZSB0aGF0IHRoaXMgd2lsbCByZXR1cm4gZmFsc2UgaWYgbm8gSUUgaGFzCi0gKiBiZWVuIHNldCBvbiB0aGUgd2lyZWxlc3MgY29yZSB5ZXQuCi0gKi8KLXN0YXRpYyBib29sIGNvdW50cnlfaWVfaW50ZWdyaXR5X2NoYW5nZXModTMyIGNoZWNrc3VtKQotewotCS8qIElmIG5vIElFIGhhcyBiZWVuIHNldCB0aGVuIHRoZSBjaGVja3N1bSBkb2Vzbid0IGNoYW5nZSAqLwotCWlmICh1bmxpa2VseSghbGFzdF9yZXF1ZXN0LT5jb3VudHJ5X2llX2NoZWNrc3VtKSkKLQkJcmV0dXJuIGZhbHNlOwotCWlmICh1bmxpa2VseShsYXN0X3JlcXVlc3QtPmNvdW50cnlfaWVfY2hlY2tzdW0gIT0gY2hlY2tzdW0pKQotCQlyZXR1cm4gdHJ1ZTsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIHN0YXRpYyBpbnQgcmVnX2NvcHlfcmVnZChjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqKmRzdF9yZWdkLAogCQkJIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpzcmNfcmVnZCkKIHsKQEAgLTUwNiw0NzEgKzQ3OSw2IEBACiB9CiAKIC8qCi0gKiBUaGlzIGlzIGEgd29yayBhcm91bmQgZm9yIHNhbml0eSBjaGVja2luZyBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koKSdzCi0gKiB3b3JrLiBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koKSBjYW4gZm9yIGV4YW1wbGUgY3VycmVudGx5IHByb3ZpZGUgYQotICogMiBHSHogY2hhbm5lbCB3aGVuIGluIGZhY3QgYSA1IEdIeiBjaGFubmVsIHdhcyBkZXNpcmVkLiBBbiBleGFtcGxlIHdvdWxkIGJlCi0gKiBhbiBBUCBwcm92aWRpbmcgY2hhbm5lbCA4IG9uIGEgY291bnRyeSBJRSB0cmlwbGV0IHdoZW4gaXQgc2VudCB0aGlzIG9uIHRoZQotICogNSBHSHogYmFuZCwgdGhhdCBjaGFubmVsIGlzIGRlc2lnbmVkIHRvIGJlIGNoYW5uZWwgOCBvbiA1IEdIeiwgbm90IGEgMiBHSHoKLSAqIGNoYW5uZWwuCi0gKgotICogVGhpcyBjYW4gYmUgcmVtb3ZlZCBvbmNlIGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeSgpIHRha2VzIGluIGEgYmFuZC4KLSAqLwotc3RhdGljIGJvb2wgY2hhbl9pbl9iYW5kKGludCBjaGFuLCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCi17Ci0JaW50IGNlbnRlcl9mcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KGNoYW4pOwotCi0Jc3dpdGNoIChiYW5kKSB7Ci0JY2FzZSBJRUVFODAyMTFfQkFORF8yR0haOgotCQlpZiAoY2VudGVyX2ZyZXEgPD0gMjQ4NCkKLQkJCXJldHVybiB0cnVlOwotCQlyZXR1cm4gZmFsc2U7Ci0JY2FzZSBJRUVFODAyMTFfQkFORF81R0haOgotCQlpZiAoY2VudGVyX2ZyZXEgPj0gNTAwNSkKLQkJCXJldHVybiB0cnVlOwotCQlyZXR1cm4gZmFsc2U7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIGZhbHNlOwotCX0KLX0KLQotLyoKLSAqIFNvbWUgQVBzIG1heSBzZW5kIGEgY291bnRyeSBJRSB0cmlwbGV0IGZvciBlYWNoIGNoYW5uZWwgdGhleQotICogc3VwcG9ydCBhbmQgd2hpbGUgdGhpcyBpcyBjb21wbGV0ZWx5IG92ZXJraWxsIGFuZCBzaWxseSB3ZSBzdGlsbAotICogbmVlZCB0byBzdXBwb3J0IGl0LiBXZSBhdm9pZCBtYWtpbmcgYSBzaW5nbGUgcnVsZSBmb3IgZWFjaCBjaGFubmVsCi0gKiB0aG91Z2ggYW5kIHRvIGhlbHAgdXMgd2l0aCB0aGlzIHdlIHVzZSB0aGlzIGhlbHBlciB0byBmaW5kIHRoZQotICogYWN0dWFsIHN1YmJhbmQgZW5kIGNoYW5uZWwuIFRoZXNlIHR5cGUgb2YgY291bnRyeSBJRSB0cmlwbGV0Ci0gKiBzY2VuZXJpb3MgYXJlIGhhbmRsZWQgdGhlbiwgYWxsIHlpZWxkaW5nIHR3byByZWd1bGFvdHJ5IHJ1bGVzIGZyb20KLSAqIHBhcnNpbmcgYSBjb3VudHJ5IElFOgotICoKLSAqIFsxXQotICogWzJdCi0gKiBbMzZdCi0gKiBbNDBdCi0gKgotICogWzFdCi0gKiBbMi00XQotICogWzUtMTJdCi0gKiBbMzZdCi0gKiBbNDAtNDRdCi0gKgotICogWzEtNF0KLSAqIFs1LTddCi0gKiBbMzYtNDRdCi0gKiBbNDgtNjRdCi0gKgotICogWzM2LTM2XQotICogWzQwLTQwXQotICogWzQ0LTQ0XQotICogWzQ4LTQ4XQotICogWzUyLTUyXQotICogWzU2LTU2XQotICogWzYwLTYwXQotICogWzY0LTY0XQotICogWzEwMC0xMDBdCi0gKiBbMTA0LTEwNF0KLSAqIFsxMDgtMTA4XQotICogWzExMi0xMTJdCi0gKiBbMTE2LTExNl0KLSAqIFsxMjAtMTIwXQotICogWzEyNC0xMjRdCi0gKiBbMTI4LTEyOF0KLSAqIFsxMzItMTMyXQotICogWzEzNi0xMzZdCi0gKiBbMTQwLTE0MF0KLSAqCi0gKiBSZXR1cm5zIDAgaWYgdGhlIElFIGhhcyBiZWVuIGZvdW5kIHRvIGJlIGludmFsaWQgaW4gdGhlIG1pZGRsZQotICogc29tZXdoZXJlLgotICovCi1zdGF0aWMgaW50IG1heF9zdWJiYW5kX2NoYW4oZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAotCQkJICAgIGludCBvcmlnX2N1cl9jaGFuLAotCQkJICAgIGludCBvcmlnX2VuZF9jaGFubmVsLAotCQkJICAgIHM4IG9yaWdfbWF4X3Bvd2VyLAotCQkJICAgIHU4ICoqY291bnRyeV9pZSwKLQkJCSAgICB1OCAqY291bnRyeV9pZV9sZW4pCi17Ci0JdTggKnRyaXBsZXRzX3N0YXJ0ID0gKmNvdW50cnlfaWU7Ci0JdTggbGVuX2F0X3RyaXBsZXQgPSAqY291bnRyeV9pZV9sZW47Ci0JaW50IGVuZF9zdWJiYW5kX2NoYW4gPSBvcmlnX2VuZF9jaGFubmVsOwotCi0JLyoKLQkgKiBXZSdsbCBkZWFsIHdpdGggcGFkZGluZyBmb3IgdGhlIGNhbGxlciB1bmxlc3MKLQkgKiBpdHMgbm90IGltbWVkaWF0ZSBhbmQgd2UgZG9uJ3QgcHJvY2VzcyBhbnkgY2hhbm5lbHMKLQkgKi8KLQlpZiAoKmNvdW50cnlfaWVfbGVuID09IDEpIHsKLQkJKmNvdW50cnlfaWUgKz0gMTsKLQkJKmNvdW50cnlfaWVfbGVuIC09IDE7Ci0JCXJldHVybiBvcmlnX2VuZF9jaGFubmVsOwotCX0KLQotCS8qIE1vdmUgdG8gdGhlIG5leHQgdHJpcGxldCBhbmQgdGhlbiBzdGFydCBzZWFyY2ggKi8KLQkqY291bnRyeV9pZSArPSAzOwotCSpjb3VudHJ5X2llX2xlbiAtPSAzOwotCi0JaWYgKCFjaGFuX2luX2JhbmQob3JpZ19jdXJfY2hhbiwgYmFuZCkpCi0JCXJldHVybiAwOwotCi0Jd2hpbGUgKCpjb3VudHJ5X2llX2xlbiA+PSAzKSB7Ci0JCWludCBlbmRfY2hhbm5lbCA9IDA7Ci0JCXN0cnVjdCBpZWVlODAyMTFfY291bnRyeV9pZV90cmlwbGV0ICp0cmlwbGV0ID0KLQkJCShzdHJ1Y3QgaWVlZTgwMjExX2NvdW50cnlfaWVfdHJpcGxldCAqKSAqY291bnRyeV9pZTsKLQkJaW50IGN1cl9jaGFubmVsID0gMCwgbmV4dF9leHBlY3RlZF9jaGFuOwotCi0JCS8qIG1lYW5zIGxhc3QgdHJpcGxldCBpcyBjb21wbGV0ZWx5IHVucmVsYXRlZCB0byB0aGlzIG9uZSAqLwotCQlpZiAodHJpcGxldC0+ZXh0LnJlZ19leHRlbnNpb25faWQgPj0KLQkJCQlJRUVFODAyMTFfQ09VTlRSWV9FWFRFTlNJT05fSUQpIHsKLQkJCSpjb3VudHJ5X2llIC09IDM7Ci0JCQkqY291bnRyeV9pZV9sZW4gKz0gMzsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKHRyaXBsZXQtPmNoYW5zLmZpcnN0X2NoYW5uZWwgPT0gMCkgewotCQkJKmNvdW50cnlfaWUgKz0gMTsKLQkJCSpjb3VudHJ5X2llX2xlbiAtPSAxOwotCQkJaWYgKCpjb3VudHJ5X2llX2xlbiAhPSAwKQotCQkJCXJldHVybiAwOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAodHJpcGxldC0+Y2hhbnMubnVtX2NoYW5uZWxzID09IDApCi0JCQlyZXR1cm4gMDsKLQotCQkvKiBNb25pdG9uaWNhbGx5IGluY3JlYXNpbmcgY2hhbm5lbCBvcmRlciAqLwotCQlpZiAodHJpcGxldC0+Y2hhbnMuZmlyc3RfY2hhbm5lbCA8PSBlbmRfc3ViYmFuZF9jaGFuKQotCQkJcmV0dXJuIDA7Ci0KLQkJaWYgKCFjaGFuX2luX2JhbmQodHJpcGxldC0+Y2hhbnMuZmlyc3RfY2hhbm5lbCwgYmFuZCkpCi0JCQlyZXR1cm4gMDsKLQotCQkvKiAyIEdIeiAqLwotCQlpZiAodHJpcGxldC0+Y2hhbnMuZmlyc3RfY2hhbm5lbCA8PSAxNCkgewotCQkJZW5kX2NoYW5uZWwgPSB0cmlwbGV0LT5jaGFucy5maXJzdF9jaGFubmVsICsKLQkJCQl0cmlwbGV0LT5jaGFucy5udW1fY2hhbm5lbHMgLSAxOwotCQl9Ci0JCWVsc2UgewotCQkJZW5kX2NoYW5uZWwgPSAgdHJpcGxldC0+Y2hhbnMuZmlyc3RfY2hhbm5lbCArCi0JCQkJKDQgKiAodHJpcGxldC0+Y2hhbnMubnVtX2NoYW5uZWxzIC0gMSkpOwotCQl9Ci0KLQkJaWYgKCFjaGFuX2luX2JhbmQoZW5kX2NoYW5uZWwsIGJhbmQpKQotCQkJcmV0dXJuIDA7Ci0KLQkJaWYgKG9yaWdfbWF4X3Bvd2VyICE9IHRyaXBsZXQtPmNoYW5zLm1heF9wb3dlcikgewotCQkJKmNvdW50cnlfaWUgLT0gMzsKLQkJCSpjb3VudHJ5X2llX2xlbiArPSAzOwotCQkJYnJlYWs7Ci0JCX0KLQotCQljdXJfY2hhbm5lbCA9IHRyaXBsZXQtPmNoYW5zLmZpcnN0X2NoYW5uZWw7Ci0KLQkJLyogVGhlIGtleSBpcyBmaW5kaW5nIHRoZSByaWdodCBuZXh0IGV4cGVjdGVkIGNoYW5uZWwgKi8KLQkJaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKLQkJCW5leHRfZXhwZWN0ZWRfY2hhbiA9IGVuZF9zdWJiYW5kX2NoYW4gKyAxOwotCQkgZWxzZQotCQkJbmV4dF9leHBlY3RlZF9jaGFuID0gZW5kX3N1YmJhbmRfY2hhbiArIDQ7Ci0KLQkJaWYgKGN1cl9jaGFubmVsICE9IG5leHRfZXhwZWN0ZWRfY2hhbikgewotCQkJKmNvdW50cnlfaWUgLT0gMzsKLQkJCSpjb3VudHJ5X2llX2xlbiArPSAzOwotCQkJYnJlYWs7Ci0JCX0KLQotCQllbmRfc3ViYmFuZF9jaGFuID0gZW5kX2NoYW5uZWw7Ci0KLQkJLyogTW92ZSB0byB0aGUgbmV4dCBvbmUgKi8KLQkJKmNvdW50cnlfaWUgKz0gMzsKLQkJKmNvdW50cnlfaWVfbGVuIC09IDM7Ci0KLQkJLyoKLQkJICogUGFkZGluZyBuZWVkcyB0byBiZSBkZWFsdCB3aXRoIGlmIHdlIHByb2Nlc3NlZAotCQkgKiBzb21lIGNoYW5uZWxzLgotCQkgKi8KLQkJaWYgKCpjb3VudHJ5X2llX2xlbiA9PSAxKSB7Ci0JCQkqY291bnRyeV9pZSArPSAxOwotCQkJKmNvdW50cnlfaWVfbGVuIC09IDE7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIElmIHNlZW4sIHRoZSBJRSBpcyBpbnZhbGlkICovCi0JCWlmICgqY291bnRyeV9pZV9sZW4gPT0gMikKLQkJCXJldHVybiAwOwotCX0KLQotCWlmIChlbmRfc3ViYmFuZF9jaGFuID09IG9yaWdfZW5kX2NoYW5uZWwpIHsKLQkJKmNvdW50cnlfaWUgPSB0cmlwbGV0c19zdGFydDsKLQkJKmNvdW50cnlfaWVfbGVuID0gbGVuX2F0X3RyaXBsZXQ7Ci0JCXJldHVybiBvcmlnX2VuZF9jaGFubmVsOwotCX0KLQotCXJldHVybiBlbmRfc3ViYmFuZF9jaGFuOwotfQotCi0vKgotICogQ29udmVydHMgYSBjb3VudHJ5IElFIHRvIGEgcmVndWxhdG9yeSBkb21haW4uIEEgcmVndWxhdG9yeSBkb21haW4KLSAqIHN0cnVjdHVyZSBoYXMgYSBsb3Qgb2YgaW5mb3JtYXRpb24gd2hpY2ggdGhlIElFIGRvZXNuJ3QgeWV0IGhhdmUsCi0gKiBzbyBmb3IgdGhlIG90aGVyIHZhbHVlcyB3ZSB1c2UgdXBwZXIgbWF4IHZhbHVlcyBhcyB3ZSB3aWxsIGludGVyc2VjdAotICogd2l0aCBvdXIgdXNlcnNwYWNlIHJlZ3VsYXRvcnkgYWdlbnQgdG8gZ2V0IGxvd2VyIGJvdW5kcy4KLSAqLwotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpjb3VudHJ5X2llXzJfcmQoCi0JCQkJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAotCQkJCXU4ICpjb3VudHJ5X2llLAotCQkJCXU4IGNvdW50cnlfaWVfbGVuLAotCQkJCXUzMiAqY2hlY2tzdW0pCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJkID0gTlVMTDsKLQl1bnNpZ25lZCBpbnQgaSA9IDA7Ci0JY2hhciBhbHBoYTJbMl07Ci0JdTMyIGZsYWdzID0gMDsKLQl1MzIgbnVtX3J1bGVzID0gMCwgc2l6ZV9vZl9yZWdkID0gMDsKLQl1OCAqdHJpcGxldHNfc3RhcnQgPSBOVUxMOwotCXU4IGxlbl9hdF90cmlwbGV0ID0gMDsKLQkvKiB0aGUgbGFzdCBjaGFubmVsIHdlIGhhdmUgcmVnaXN0ZXJlZCBpbiBhIHN1YmJhbmQgKHRyaXBsZXQpICovCi0JaW50IGxhc3Rfc3ViX21heF9jaGFubmVsID0gMDsKLQotCSpjaGVja3N1bSA9IDB4REVBREJFRUY7Ci0KLQkvKiBDb3VudHJ5IElFIHJlcXVpcmVtZW50cyAqLwotCUJVR19PTihjb3VudHJ5X2llX2xlbiA8IElFRUU4MDIxMV9DT1VOVFJZX0lFX01JTl9MRU4gfHwKLQkJY291bnRyeV9pZV9sZW4gJiAweDAxKTsKLQotCWFscGhhMlswXSA9IGNvdW50cnlfaWVbMF07Ci0JYWxwaGEyWzFdID0gY291bnRyeV9pZVsxXTsKLQotCS8qCi0JICogVGhpcmQgb2N0ZXQgY2FuIGJlOgotCSAqICAgICdJJyAtIEluZG9vcgotCSAqICAgICdPJyAtIE91dGRvb3IKLQkgKgotCSAqICBhbnl0aGluZyBlbHNlIHdlIGFzc3VtZSBpcyBubyByZXN0cmljdGlvbnMKLQkgKi8KLQlpZiAoY291bnRyeV9pZVsyXSA9PSAnSScpCi0JCWZsYWdzID0gTkw4MDIxMV9SUkZfTk9fT1VURE9PUjsKLQllbHNlIGlmIChjb3VudHJ5X2llWzJdID09ICdPJykKLQkJZmxhZ3MgPSBOTDgwMjExX1JSRl9OT19JTkRPT1I7Ci0KLQljb3VudHJ5X2llICs9IDM7Ci0JY291bnRyeV9pZV9sZW4gLT0gMzsKLQotCXRyaXBsZXRzX3N0YXJ0ID0gY291bnRyeV9pZTsKLQlsZW5fYXRfdHJpcGxldCA9IGNvdW50cnlfaWVfbGVuOwotCi0JKmNoZWNrc3VtIF49ICgoZmxhZ3MgXiBhbHBoYTJbMF0gXiBhbHBoYTJbMV0pIDw8IDgpOwotCi0JLyoKLQkgKiBXZSBuZWVkIHRvIGJ1aWxkIGEgcmVnIHJ1bGUgZm9yIGVhY2ggdHJpcGxldCwgYnV0IGZpcnN0IHdlIG11c3QKLQkgKiBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiByZWcgcnVsZXMgd2Ugd2lsbCBuZWVkLiBXZSB3aWxsIG5lZWQgb25lCi0JICogZm9yIGVhY2ggY2hhbm5lbCBzdWJiYW5kCi0JICovCi0Jd2hpbGUgKGNvdW50cnlfaWVfbGVuID49IDMpIHsKLQkJaW50IGVuZF9jaGFubmVsID0gMDsKLQkJc3RydWN0IGllZWU4MDIxMV9jb3VudHJ5X2llX3RyaXBsZXQgKnRyaXBsZXQgPQotCQkJKHN0cnVjdCBpZWVlODAyMTFfY291bnRyeV9pZV90cmlwbGV0ICopIGNvdW50cnlfaWU7Ci0JCWludCBjdXJfc3ViX21heF9jaGFubmVsID0gMCwgY3VyX2NoYW5uZWwgPSAwOwotCi0JCWlmICh0cmlwbGV0LT5leHQucmVnX2V4dGVuc2lvbl9pZCA+PQotCQkJCUlFRUU4MDIxMV9DT1VOVFJZX0VYVEVOU0lPTl9JRCkgewotCQkJY291bnRyeV9pZSArPSAzOwotCQkJY291bnRyeV9pZV9sZW4gLT0gMzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyoKLQkJICogQVBzIGNhbiBhZGQgcGFkZGluZyB0byBtYWtlIGxlbmd0aCBkaXZpc2libGUKLQkJICogYnkgdHdvLCByZXF1aXJlZCBieSB0aGUgc3BlYy4KLQkJICovCi0JCWlmICh0cmlwbGV0LT5jaGFucy5maXJzdF9jaGFubmVsID09IDApIHsKLQkJCWNvdW50cnlfaWUrKzsKLQkJCWNvdW50cnlfaWVfbGVuLS07Ci0JCQkvKiBUaGlzIGlzIGV4cGVjdGVkIHRvIGJlIGF0IHRoZSB2ZXJ5IGVuZCBvbmx5ICovCi0JCQlpZiAoY291bnRyeV9pZV9sZW4gIT0gMCkKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKHRyaXBsZXQtPmNoYW5zLm51bV9jaGFubmVscyA9PSAwKQotCQkJcmV0dXJuIE5VTEw7Ci0KLQkJaWYgKCFjaGFuX2luX2JhbmQodHJpcGxldC0+Y2hhbnMuZmlyc3RfY2hhbm5lbCwgYmFuZCkpCi0JCQlyZXR1cm4gTlVMTDsKLQotCQkvKiAyIEdIeiAqLwotCQlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQotCQkJZW5kX2NoYW5uZWwgPSB0cmlwbGV0LT5jaGFucy5maXJzdF9jaGFubmVsICsKLQkJCQl0cmlwbGV0LT5jaGFucy5udW1fY2hhbm5lbHMgLSAxOwotCQllbHNlCi0JCQkvKgotCQkJICogNSBHSHogLS0gRm9yIGV4YW1wbGUgaW4gY291bnRyeSBJRXMgaWYgdGhlIGZpcnN0Ci0JCQkgKiBjaGFubmVsIGdpdmVuIGlzIDM2IGFuZCB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIGlzIDQKLQkJCSAqIHRoZW4gdGhlIGluZGl2aWR1YWwgY2hhbm5lbCBudW1iZXJzIGRlZmluZWQgZm9yIHRoZQotCQkJICogNSBHSHogUEhZIGJ5IHRoZXNlIHBhcmFtZXRlcnMgYXJlOiAzNiwgNDAsIDQ0LCBhbmQgNDgKLQkJCSAqIGFuZCBub3QgMzYsIDM3LCAzOCwgMzkuCi0JCQkgKgotCQkJICogU2VlOiBodHRwOi8vdGlueXVybC5jb20vMTFkLWNsYXJpZmljYXRpb24KLQkJCSAqLwotCQkJZW5kX2NoYW5uZWwgPSAgdHJpcGxldC0+Y2hhbnMuZmlyc3RfY2hhbm5lbCArCi0JCQkJKDQgKiAodHJpcGxldC0+Y2hhbnMubnVtX2NoYW5uZWxzIC0gMSkpOwotCi0JCWN1cl9jaGFubmVsID0gdHJpcGxldC0+Y2hhbnMuZmlyc3RfY2hhbm5lbDsKLQotCQkvKgotCQkgKiBFbmhhbmNlbWVudCBmb3IgQVBzIHRoYXQgc2VuZCBhIHRyaXBsZXQgZm9yIGV2ZXJ5IGNoYW5uZWwKLQkJICogb3IgZm9yIHdoYXRldmVyIHJlYXNvbiBzZW5kcyB0cmlwbGV0cyB3aXRoIG11bHRpcGxlIGNoYW5uZWxzCi0JCSAqIHNlcGFyYXRlZCB3aGVuIGluIGZhY3QgdGhleSBzaG91bGQgYmUgdG9nZXRoZXIuCi0JCSAqLwotCQllbmRfY2hhbm5lbCA9IG1heF9zdWJiYW5kX2NoYW4oYmFuZCwKLQkJCQkJICAgICAgIGN1cl9jaGFubmVsLAotCQkJCQkgICAgICAgZW5kX2NoYW5uZWwsCi0JCQkJCSAgICAgICB0cmlwbGV0LT5jaGFucy5tYXhfcG93ZXIsCi0JCQkJCSAgICAgICAmY291bnRyeV9pZSwKLQkJCQkJICAgICAgICZjb3VudHJ5X2llX2xlbik7Ci0JCWlmICghZW5kX2NoYW5uZWwpCi0JCQlyZXR1cm4gTlVMTDsKLQotCQlpZiAoIWNoYW5faW5fYmFuZChlbmRfY2hhbm5lbCwgYmFuZCkpCi0JCQlyZXR1cm4gTlVMTDsKLQotCQljdXJfc3ViX21heF9jaGFubmVsID0gZW5kX2NoYW5uZWw7Ci0KLQkJLyogQmFzaWMgc2FuaXR5IGNoZWNrICovCi0JCWlmIChjdXJfc3ViX21heF9jaGFubmVsIDwgY3VyX2NoYW5uZWwpCi0JCQlyZXR1cm4gTlVMTDsKLQotCQkvKgotCQkgKiBEbyBub3QgYWxsb3cgb3ZlcmxhcHBpbmcgY2hhbm5lbHMuIEFsc28gY2hhbm5lbHMKLQkJICogcGFzc2VkIGluIGVhY2ggc3ViYmFuZCBtdXN0IGJlIG1vbm90b25pY2FsbHkKLQkJICogaW5jcmVhc2luZwotCQkgKi8KLQkJaWYgKGxhc3Rfc3ViX21heF9jaGFubmVsKSB7Ci0JCQlpZiAoY3VyX2NoYW5uZWwgPD0gbGFzdF9zdWJfbWF4X2NoYW5uZWwpCi0JCQkJcmV0dXJuIE5VTEw7Ci0JCQlpZiAoY3VyX3N1Yl9tYXhfY2hhbm5lbCA8PSBsYXN0X3N1Yl9tYXhfY2hhbm5lbCkKLQkJCQlyZXR1cm4gTlVMTDsKLQkJfQotCi0JCS8qCi0JCSAqIFdoZW4gZG90MTFSZWd1bGF0b3J5Q2xhc3Nlc1JlcXVpcmVkIGlzIHN1cHBvcnRlZAotCQkgKiB3ZSBjYW4gdGhyb3cgZXh0IHRyaXBsZXRzIGFzIHBhcnQgb2YgdGhpcyBzb3VwLAotCQkgKiBmb3Igbm93IHdlIGRvbid0IGNhcmUgd2hlbiB0aG9zZSBjaGFuZ2UgYXMgd2UKLQkJICogZG9uJ3Qgc3VwcG9ydCB0aGVtCi0JCSAqLwotCQkqY2hlY2tzdW0gXj0gKChjdXJfY2hhbm5lbCBeIGN1cl9zdWJfbWF4X2NoYW5uZWwpIDw8IDgpIHwKLQkJICAoKGN1cl9zdWJfbWF4X2NoYW5uZWwgXiBjdXJfc3ViX21heF9jaGFubmVsKSA8PCAxNikgfAotCQkgICgodHJpcGxldC0+Y2hhbnMubWF4X3Bvd2VyIF4gY3VyX3N1Yl9tYXhfY2hhbm5lbCkgPDwgMjQpOwotCi0JCWxhc3Rfc3ViX21heF9jaGFubmVsID0gY3VyX3N1Yl9tYXhfY2hhbm5lbDsKLQotCQludW1fcnVsZXMrKzsKLQotCQlpZiAoY291bnRyeV9pZV9sZW4gPj0gMykgewotCQkJY291bnRyeV9pZSArPSAzOwotCQkJY291bnRyeV9pZV9sZW4gLT0gMzsKLQkJfQotCi0JCS8qCi0JCSAqIE5vdGU6IHRoaXMgaXMgbm90IGEgSUVFRSByZXF1aXJlbWVudCBidXQKLQkJICogc2ltcGx5IGEgbWVtb3J5IHJlcXVpcmVtZW50Ci0JCSAqLwotCQlpZiAobnVtX3J1bGVzID4gTkw4MDIxMV9NQVhfU1VQUF9SRUdfUlVMRVMpCi0JCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQljb3VudHJ5X2llID0gdHJpcGxldHNfc3RhcnQ7Ci0JY291bnRyeV9pZV9sZW4gPSBsZW5fYXRfdHJpcGxldDsKLQotCXNpemVfb2ZfcmVnZCA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbikgKwotCQkobnVtX3J1bGVzICogc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUpKTsKLQotCXJkID0ga3phbGxvYyhzaXplX29mX3JlZ2QsIEdGUF9LRVJORUwpOwotCWlmICghcmQpCi0JCXJldHVybiBOVUxMOwotCi0JcmQtPm5fcmVnX3J1bGVzID0gbnVtX3J1bGVzOwotCXJkLT5hbHBoYTJbMF0gPSBhbHBoYTJbMF07Ci0JcmQtPmFscGhhMlsxXSA9IGFscGhhMlsxXTsKLQotCS8qIFRoaXMgdGltZSBhcm91bmQgd2UgZmlsbCBpbiB0aGUgcmQgKi8KLQl3aGlsZSAoY291bnRyeV9pZV9sZW4gPj0gMykgewotCQlpbnQgZW5kX2NoYW5uZWwgPSAwOwotCQlzdHJ1Y3QgaWVlZTgwMjExX2NvdW50cnlfaWVfdHJpcGxldCAqdHJpcGxldCA9Ci0JCQkoc3RydWN0IGllZWU4MDIxMV9jb3VudHJ5X2llX3RyaXBsZXQgKikgY291bnRyeV9pZTsKLQkJc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqcmVnX3J1bGUgPSBOVUxMOwotCQlzdHJ1Y3QgaWVlZTgwMjExX2ZyZXFfcmFuZ2UgKmZyZXFfcmFuZ2UgPSBOVUxMOwotCQlzdHJ1Y3QgaWVlZTgwMjExX3Bvd2VyX3J1bGUgKnBvd2VyX3J1bGUgPSBOVUxMOwotCi0JCS8qCi0JCSAqIE11c3QgcGFyc2UgaWYgZG90MTFSZWd1bGF0b3J5Q2xhc3Nlc1JlcXVpcmVkIGlzIHRydWUsCi0JCSAqIHdlIGRvbid0IHN1cHBvcnQgdGhpcyB5ZXQKLQkJICovCi0JCWlmICh0cmlwbGV0LT5leHQucmVnX2V4dGVuc2lvbl9pZCA+PQotCQkJCUlFRUU4MDIxMV9DT1VOVFJZX0VYVEVOU0lPTl9JRCkgewotCQkJY291bnRyeV9pZSArPSAzOwotCQkJY291bnRyeV9pZV9sZW4gLT0gMzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKHRyaXBsZXQtPmNoYW5zLmZpcnN0X2NoYW5uZWwgPT0gMCkgewotCQkJY291bnRyeV9pZSsrOwotCQkJY291bnRyeV9pZV9sZW4tLTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcmVnX3J1bGUgPSAmcmQtPnJlZ19ydWxlc1tpXTsKLQkJZnJlcV9yYW5nZSA9ICZyZWdfcnVsZS0+ZnJlcV9yYW5nZTsKLQkJcG93ZXJfcnVsZSA9ICZyZWdfcnVsZS0+cG93ZXJfcnVsZTsKLQotCQlyZWdfcnVsZS0+ZmxhZ3MgPSBmbGFnczsKLQotCQkvKiAyIEdIeiAqLwotCQlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQotCQkJZW5kX2NoYW5uZWwgPSB0cmlwbGV0LT5jaGFucy5maXJzdF9jaGFubmVsICsKLQkJCQl0cmlwbGV0LT5jaGFucy5udW1fY2hhbm5lbHMgLTE7Ci0JCWVsc2UKLQkJCWVuZF9jaGFubmVsID0gIHRyaXBsZXQtPmNoYW5zLmZpcnN0X2NoYW5uZWwgKwotCQkJCSg0ICogKHRyaXBsZXQtPmNoYW5zLm51bV9jaGFubmVscyAtIDEpKTsKLQotCQllbmRfY2hhbm5lbCA9IG1heF9zdWJiYW5kX2NoYW4oYmFuZCwKLQkJCQkJICAgICAgIHRyaXBsZXQtPmNoYW5zLmZpcnN0X2NoYW5uZWwsCi0JCQkJCSAgICAgICBlbmRfY2hhbm5lbCwKLQkJCQkJICAgICAgIHRyaXBsZXQtPmNoYW5zLm1heF9wb3dlciwKLQkJCQkJICAgICAgICZjb3VudHJ5X2llLAotCQkJCQkgICAgICAgJmNvdW50cnlfaWVfbGVuKTsKLQotCQkvKgotCQkgKiBUaGUgKzEwIGlzIHNpbmNlIHRoZSByZWd1bGF0b3J5IGRvbWFpbiBleHBlY3RzCi0JCSAqIHRoZSBhY3R1YWwgYmFuZCBlZGdlLCBub3QgdGhlIGNlbnRlciBvZiBmcmVxIGZvcgotCQkgKiBpdHMgc3RhcnQgYW5kIGVuZCBmcmVxcywgYXNzdW1pbmcgMjAgTUh6IGJhbmR3aWR0aCBvbgotCQkgKiB0aGUgY2hhbm5lbHMgcGFzc2VkCi0JCSAqLwotCQlmcmVxX3JhbmdlLT5zdGFydF9mcmVxX2toeiA9Ci0JCQlNSFpfVE9fS0haKGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeSgKLQkJCQl0cmlwbGV0LT5jaGFucy5maXJzdF9jaGFubmVsKSAtIDEwKTsKLQkJZnJlcV9yYW5nZS0+ZW5kX2ZyZXFfa2h6ID0KLQkJCU1IWl9UT19LSFooaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KAotCQkJCWVuZF9jaGFubmVsKSArIDEwKTsKLQotCQkvKgotCQkgKiBUaGVzZSBhcmUgbGFyZ2UgYXJiaXRyYXJ5IHZhbHVlcyB3ZSB1c2UgdG8gaW50ZXJzZWN0IGxhdGVyLgotCQkgKiBJbmNyZW1lbnQgdGhpcyBpZiB3ZSBldmVyIHN1cHBvcnQgPj0gNDAgTUh6IGNoYW5uZWxzCi0JCSAqIGluIElFRUUgODAyLjExCi0JCSAqLwotCQlmcmVxX3JhbmdlLT5tYXhfYmFuZHdpZHRoX2toeiA9IE1IWl9UT19LSFooNDApOwotCQlwb3dlcl9ydWxlLT5tYXhfYW50ZW5uYV9nYWluID0gREJJX1RPX01CSSgxMDApOwotCQlwb3dlcl9ydWxlLT5tYXhfZWlycCA9IERCTV9UT19NQk0odHJpcGxldC0+Y2hhbnMubWF4X3Bvd2VyKTsKLQotCQlpKys7Ci0KLQkJaWYgKGNvdW50cnlfaWVfbGVuID49IDMpIHsKLQkJCWNvdW50cnlfaWUgKz0gMzsKLQkJCWNvdW50cnlfaWVfbGVuIC09IDM7Ci0JCX0KLQotCQlCVUdfT04oaSA+IE5MODAyMTFfTUFYX1NVUFBfUkVHX1JVTEVTKTsKLQl9Ci0KLQlyZXR1cm4gcmQ7Ci19Ci0KLQotLyoKICAqIEhlbHBlciBmb3IgcmVnZG9tX2ludGVyc2VjdCgpLCB0aGlzIGRvZXMgdGhlIHJlYWwKICAqIG1hdGhlbWF0aWNhbCBpbnRlcnNlY3Rpb24gZnVuCiAgKi8KQEAgLTExOTEsNyArNjk5LDYgQEAKIAogCXJldHVybiAtRUlOVkFMOwogfQotRVhQT1JUX1NZTUJPTChmcmVxX3JlZ19pbmZvKTsKIAogaW50IGZyZXFfcmVnX2luZm8oc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJICB1MzIgY2VudGVyX2ZyZXEsCkBAIC0xMjA1LDYgKzcxMiw3IEBACiAJCQkJICByZWdfcnVsZSwKIAkJCQkgIE5VTEwpOwogfQorRVhQT1JUX1NZTUJPTChmcmVxX3JlZ19pbmZvKTsKIAogLyoKICAqIE5vdGUgdGhhdCByaWdodCBub3cgd2UgYXNzdW1lIHRoZSBkZXNpcmVkIGNoYW5uZWwgYmFuZHdpZHRoCkBAIC0xMjQzLDQxICs3NTEsOCBAQAogCQkJICBkZXNpcmVkX2J3X2toeiwKIAkJCSAgJnJlZ19ydWxlKTsKIAotCWlmIChyKSB7Ci0JCS8qCi0JCSAqIFRoaXMgbWVhbnMgbm8gcmVndWxhdG9yeSBydWxlIHdhcyBmb3VuZCBpbiB0aGUgY291bnRyeSBJRQotCQkgKiB3aXRoIGEgZnJlcXVlbmN5IHJhbmdlIG9uIHRoZSBjZW50ZXJfZnJlcSdzIGJhbmQsIHNpbmNlCi0JCSAqIElFRUUtODAyLjExIGFsbG93cyBmb3IgYSBjb3VudHJ5IElFIHRvIGhhdmUgYSBzdWJzZXQgb2YgdGhlCi0JCSAqIHJlZ3VsYXRvcnkgaW5mb3JtYXRpb24gcHJvdmlkZWQgaW4gYSBjb3VudHJ5IHdlIGlnbm9yZQotCQkgKiBkaXNhYmxpbmcgdGhlIGNoYW5uZWwgdW5sZXNzIGF0IGxlYXN0IG9uZSByZWcgcnVsZSB3YXMKLQkJICogZm91bmQgb24gdGhlIGNlbnRlcl9mcmVxJ3MgYmFuZC4gRm9yIGRldGFpbHMgc2VlIHRoaXMKLQkJICogY2xhcmlmaWNhdGlvbjoKLQkJICoKLQkJICogaHR0cDovL3Rpbnl1cmwuY29tLzExZC1jbGFyaWZpY2F0aW9uCi0JCSAqLwotCQlpZiAociA9PSAtRVJBTkdFICYmCi0JCSAgICBsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PQotCQkgICAgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKLQkJCVJFR19EQkdfUFJJTlQoImNmZzgwMjExOiBMZWF2aW5nIGNoYW5uZWwgJWQgTUh6ICIKLQkJCQkiaW50YWN0IG9uICVzIC0gbm8gcnVsZSBmb3VuZCBpbiBiYW5kIG9uICIKLQkJCQkiQ291bnRyeSBJRVxuIiwKLQkJCWNoYW4tPmNlbnRlcl9mcmVxLCB3aXBoeV9uYW1lKHdpcGh5KSk7Ci0JCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIEluIHRoaXMgY2FzZSB3ZSBrbm93IHRoZSBjb3VudHJ5IElFIGhhcyBhdCBsZWFzdCBvbmUgcmVnIHJ1bGUKLQkJICogZm9yIHRoZSBiYW5kIHNvIHdlIHJlc3BlY3QgaXRzIGJhbmQgZGVmaW5pdGlvbnMKLQkJICovCi0JCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0KLQkJCSAgICBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkKLQkJCQlSRUdfREJHX1BSSU5UKCJjZmc4MDIxMTogRGlzYWJsaW5nICIKLQkJCQkJImNoYW5uZWwgJWQgTUh6IG9uICVzIGR1ZSB0byAiCi0JCQkJCSJDb3VudHJ5IElFXG4iLAotCQkJCQljaGFuLT5jZW50ZXJfZnJlcSwgd2lwaHlfbmFtZSh3aXBoeSkpOwotCQkJZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fRElTQUJMRUQ7Ci0JCQljaGFuLT5mbGFncyA9IGZsYWdzOwotCQl9CisJaWYgKHIpCiAJCXJldHVybjsKLQl9CiAKIAlwb3dlcl9ydWxlID0gJnJlZ19ydWxlLT5wb3dlcl9ydWxlOwogCWZyZXFfcmFuZ2UgPSAmcmVnX3J1bGUtPmZyZXFfcmFuZ2U7CkBAIC0xODMxLDYgKzEzMDYsNyBAQAogewogCWludCByID0gMDsKIAlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gTlVMTDsKKwllbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBpbml0aWF0b3IgPSByZWdfcmVxdWVzdC0+aW5pdGlhdG9yOwogCiAJQlVHX09OKCFyZWdfcmVxdWVzdC0+YWxwaGEyKTsKIApAQCAtMTg1MCw3ICsxMzI2LDcgQEAKIAkvKiBUaGlzIGlzIHJlcXVpcmVkIHNvIHRoYXQgdGhlIG9yaWdfKiBwYXJhbWV0ZXJzIGFyZSBzYXZlZCAqLwogCWlmIChyID09IC1FQUxSRUFEWSAmJiB3aXBoeSAmJgogCSAgICB3aXBoeS0+ZmxhZ3MgJiBXSVBIWV9GTEFHX1NUUklDVF9SRUdVTEFUT1JZKQotCQl3aXBoeV91cGRhdGVfcmVndWxhdG9yeSh3aXBoeSwgcmVnX3JlcXVlc3QtPmluaXRpYXRvcik7CisJCXdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KHdpcGh5LCBpbml0aWF0b3IpOwogb3V0OgogCW11dGV4X3VubG9jaygmcmVnX211dGV4KTsKIAltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKQEAgLTIwMDgsMzUgKzE0ODQsNiBAQAogfQogRVhQT1JUX1NZTUJPTChyZWd1bGF0b3J5X2hpbnQpOwogCi0vKiBDYWxsZXIgbXVzdCBob2xkIHJlZ19tdXRleCAqLwotc3RhdGljIGJvb2wgcmVnX3NhbWVfY291bnRyeV9pZV9oaW50KHN0cnVjdCB3aXBoeSAqd2lwaHksCi0JCQl1MzIgY291bnRyeV9pZV9jaGVja3N1bSkKLXsKLQlzdHJ1Y3Qgd2lwaHkgKnJlcXVlc3Rfd2lwaHk7Ci0KLQlhc3NlcnRfcmVnX2xvY2soKTsKLQotCWlmICh1bmxpa2VseShsYXN0X3JlcXVlc3QtPmluaXRpYXRvciAhPQotCSAgICBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkpCi0JCXJldHVybiBmYWxzZTsKLQotCXJlcXVlc3Rfd2lwaHkgPSB3aXBoeV9pZHhfdG9fd2lwaHkobGFzdF9yZXF1ZXN0LT53aXBoeV9pZHgpOwotCi0JaWYgKCFyZXF1ZXN0X3dpcGh5KQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAobGlrZWx5KHJlcXVlc3Rfd2lwaHkgIT0gd2lwaHkpKQotCQlyZXR1cm4gIWNvdW50cnlfaWVfaW50ZWdyaXR5X2NoYW5nZXMoY291bnRyeV9pZV9jaGVja3N1bSk7Ci0JLyoKLQkgKiBXZSBzaG91bGQgbm90IGhhdmUgbGV0IHRoZXNlIHRocm91Z2ggYXQgdGhpcyBwb2ludCwgdGhleQotCSAqIHNob3VsZCBoYXZlIGJlZW4gcGlja2VkIHVwIGVhcmxpZXIgYnkgdGhlIGZpcnN0IGFscGhhMiBjaGVjawotCSAqIG9uIHRoZSBkZXZpY2UKLQkgKi8KLQlpZiAoV0FSTl9PTighY291bnRyeV9pZV9pbnRlZ3JpdHlfY2hhbmdlcyhjb3VudHJ5X2llX2NoZWNrc3VtKSkpCi0JCXJldHVybiB0cnVlOwotCXJldHVybiBmYWxzZTsKLX0KLQogLyoKICAqIFdlIGhvbGQgd2Rldl9sb2NrKCkgaGVyZSBzbyB3ZSBjYW5ub3QgaG9sZCBjZmc4MDIxMV9tdXRleCgpIGFuZAogICogdGhlcmVmb3JlIGNhbm5vdCBpdGVyYXRlIG92ZXIgdGhlIHJkZXYgbGlzdCBoZXJlLgpAQCAtMjA0Niw5ICsxNDkzLDcgQEAKIAkJCSB1OCAqY291bnRyeV9pZSwKIAkJCSB1OCBjb3VudHJ5X2llX2xlbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmQgPSBOVUxMOwogCWNoYXIgYWxwaGEyWzJdOwotCXUzMiBjaGVja3N1bSA9IDA7CiAJZW51bSBlbnZpcm9ubWVudF9jYXAgZW52ID0gRU5WSVJPTl9BTlk7CiAJc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdDsKIApAQCAtMjA2NCwxNCArMTUwOSw2IEBACiAJaWYgKGNvdW50cnlfaWVfbGVuIDwgSUVFRTgwMjExX0NPVU5UUllfSUVfTUlOX0xFTikKIAkJZ290byBvdXQ7CiAKLQkvKgotCSAqIFBlbmRpbmcgY291bnRyeSBJRSBwcm9jZXNzaW5nLCB0aGlzIGNhbiBoYXBwZW4gYWZ0ZXIgd2UKLQkgKiBjYWxsIENSREEgYW5kIHdhaXQgZm9yIGEgcmVzcG9uc2UgaWYgYSBiZWFjb24gd2FzIHJlY2VpdmVkIGJlZm9yZQotCSAqIHdlIHdlcmUgYWJsZSB0byBwcm9jZXNzIHRoZSBsYXN0IHJlZ3VsYXRvcnlfaGludF8xMWQoKSBjYWxsCi0JICovCi0JaWYgKGNvdW50cnlfaWVfcmVnZG9tYWluKQotCQlnb3RvIG91dDsKLQogCWFscGhhMlswXSA9IGNvdW50cnlfaWVbMF07CiAJYWxwaGEyWzFdID0gY291bnRyeV9pZVsxXTsKIApAQCAtMjA5MCwzOSArMTUyNywxNCBAQAogCSAgICB3aXBoeV9pZHhfdmFsaWQobGFzdF9yZXF1ZXN0LT53aXBoeV9pZHgpKSkKIAkJZ290byBvdXQ7CiAKLQlyZCA9IGNvdW50cnlfaWVfMl9yZChiYW5kLCBjb3VudHJ5X2llLCBjb3VudHJ5X2llX2xlbiwgJmNoZWNrc3VtKTsKLQlpZiAoIXJkKSB7Ci0JCVJFR19EQkdfUFJJTlQoImNmZzgwMjExOiBJZ25vcmluZyBib2d1cyBjb3VudHJ5IElFXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyoKLQkgKiBUaGlzIHdpbGwgbm90IGhhcHBlbiByaWdodCBub3cgYnV0IHdlIGxlYXZlIGl0IGhlcmUgZm9yIHRoZQotCSAqIHRoZSBmdXR1cmUgd2hlbiB3ZSB3YW50IHRvIGFkZCBzdXNwZW5kL3Jlc3VtZSBzdXBwb3J0IGFuZCBoYXZpbmcKLQkgKiB0aGUgdXNlciBtb3ZlIHRvIGFub3RoZXIgY291bnRyeSBhZnRlciBkb2luZyBzbywgb3IgaGF2aW5nIHRoZSB1c2VyCi0JICogbW92ZSB0byBhbm90aGVyIEFQLiBSaWdodCBub3cgd2UganVzdCB0cnVzdCB0aGUgZmlyc3QgQVAuCi0JICoKLQkgKiBJZiB3ZSBoaXQgdGhpcyBiZWZvcmUgd2UgYWRkIHRoaXMgc3VwcG9ydCB3ZSB3YW50IHRvIGJlIGluZm9ybWVkIG9mCi0JICogaXQgYXMgaXQgd291bGQgaW5kaWNhdGUgYSBtaXN0YWtlIGluIHRoZSBjdXJyZW50IGRlc2lnbgotCSAqLwotCWlmIChXQVJOX09OKHJlZ19zYW1lX2NvdW50cnlfaWVfaGludCh3aXBoeSwgY2hlY2tzdW0pKSkKLQkJZ290byBmcmVlX3JkX291dDsKLQogCXJlcXVlc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyZXF1ZXN0KQotCQlnb3RvIGZyZWVfcmRfb3V0OwotCi0JLyoKLQkgKiBXZSBrZWVwIHRoaXMgYXJvdW5kIGZvciB3aGVuIENSREEgY29tZXMgYmFjayB3aXRoIGEgcmVzcG9uc2Ugc28KLQkgKiB3ZSBjYW4gaW50ZXJzZWN0IHdpdGggdGhhdAotCSAqLwotCWNvdW50cnlfaWVfcmVnZG9tYWluID0gcmQ7CisJCWdvdG8gb3V0OwogCiAJcmVxdWVzdC0+d2lwaHlfaWR4ID0gZ2V0X3dpcGh5X2lkeCh3aXBoeSk7Ci0JcmVxdWVzdC0+YWxwaGEyWzBdID0gcmQtPmFscGhhMlswXTsKLQlyZXF1ZXN0LT5hbHBoYTJbMV0gPSByZC0+YWxwaGEyWzFdOworCXJlcXVlc3QtPmFscGhhMlswXSA9IGFscGhhMlswXTsKKwlyZXF1ZXN0LT5hbHBoYTJbMV0gPSBhbHBoYTJbMV07CiAJcmVxdWVzdC0+aW5pdGlhdG9yID0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUU7Ci0JcmVxdWVzdC0+Y291bnRyeV9pZV9jaGVja3N1bSA9IGNoZWNrc3VtOwogCXJlcXVlc3QtPmNvdW50cnlfaWVfZW52ID0gZW52OwogCiAJbXV0ZXhfdW5sb2NrKCZyZWdfbXV0ZXgpOwpAQCAtMjEzMSw4ICsxNTQzLDYgQEAKIAogCXJldHVybjsKIAotZnJlZV9yZF9vdXQ6Ci0Ja2ZyZWUocmQpOwogb3V0OgogCW11dGV4X3VubG9jaygmcmVnX211dGV4KTsKIH0KQEAgLTIzODMsMzMgKzE3OTMsNiBAQAogCXByaW50X3JkX3J1bGVzKHJkKTsKIH0KIAotI2lmZGVmIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcKLXN0YXRpYyB2b2lkIHJlZ19jb3VudHJ5X2llX3Byb2Nlc3NfZGVidWcoCi0JY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJkLAotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpjb3VudHJ5X2llX3JlZ2RvbWFpbiwKLQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqaW50ZXJzZWN0ZWRfcmQpCi17Ci0JcHJpbnRrKEtFUk5fREVCVUcgImNmZzgwMjExOiBSZWNlaXZlZCBjb3VudHJ5IElFOlxuIik7Ci0JcHJpbnRfcmVnZG9tYWluX2luZm8oY291bnRyeV9pZV9yZWdkb21haW4pOwotCXByaW50ayhLRVJOX0RFQlVHICJjZmc4MDIxMTogQ1JEQSB0aGlua3MgdGhpcyBzaG91bGQgYXBwbGllZDpcbiIpOwotCXByaW50X3JlZ2RvbWFpbl9pbmZvKHJkKTsKLQlpZiAoaW50ZXJzZWN0ZWRfcmQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgImNmZzgwMjExOiBXZSBpbnRlcnNlY3QgYm90aCBvZiB0aGVzZSAiCi0JCQkiYW5kIGdldDpcbiIpOwotCQlwcmludF9yZWdkb21haW5faW5mbyhpbnRlcnNlY3RlZF9yZCk7Ci0JCXJldHVybjsKLQl9Ci0JcHJpbnRrKEtFUk5fREVCVUcgImNmZzgwMjExOiBJbnRlcnNlY3Rpb24gYmV0d2VlbiBib3RoIGZhaWxlZFxuIik7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHJlZ19jb3VudHJ5X2llX3Byb2Nlc3NfZGVidWcoCi0JY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJkLAotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpjb3VudHJ5X2llX3JlZ2RvbWFpbiwKLQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqaW50ZXJzZWN0ZWRfcmQpCi17Ci19Ci0jZW5kaWYKLQogLyogVGFrZXMgb3duZXJzaGlwIG9mIHJkIG9ubHkgaWYgaXQgZG9lc24ndCBmYWlsICovCiBzdGF0aWMgaW50IF9fc2V0X3JlZ2RvbShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmQpCiB7CkBAIC0yNTIxLDM0ICsxOTA0LDYgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyoKLQkgKiBDb3VudHJ5IElFIHJlcXVlc3RzIGFyZSBoYW5kbGVkIGEgYml0IGRpZmZlcmVudGx5LCB3ZSBpbnRlcnNlY3QKLQkgKiB0aGUgY291bnRyeSBJRSByZCB3aXRoIHdoYXQgQ1JEQSBiZWxpZXZlcyB0aGF0IGNvdW50cnkgc2hvdWxkIGhhdmUKLQkgKi8KLQotCS8qCi0JICogVXNlcnNwYWNlIGNvdWxkIGhhdmUgc2VudCB0d28gcmVwbGllcyB3aXRoIG9ubHkKLQkgKiBvbmUga2VybmVsIHJlcXVlc3QuIEJ5IHRoZSBzZWNvbmQgcmVwbHkgd2Ugd291bGQgaGF2ZQotCSAqIGFscmVhZHkgcHJvY2Vzc2VkIGFuZCBjb25zdW1lZCB0aGUgY291bnRyeV9pZV9yZWdkb21haW4uCi0JICovCi0JaWYgKCFjb3VudHJ5X2llX3JlZ2RvbWFpbikKLQkJcmV0dXJuIC1FQUxSRUFEWTsKLQlCVUdfT04ocmQgPT0gY291bnRyeV9pZV9yZWdkb21haW4pOwotCi0JLyoKLQkgKiBJbnRlcnNlY3Qgd2hhdCBDUkRBIHJldHVybmVkIGFuZCBvdXIgd2hhdCB3ZQotCSAqIGhhZCBidWlsdCBmcm9tIHRoZSBDb3VudHJ5IElFIHJlY2VpdmVkCi0JICovCi0KLQlpbnRlcnNlY3RlZF9yZCA9IHJlZ2RvbV9pbnRlcnNlY3QocmQsIGNvdW50cnlfaWVfcmVnZG9tYWluKTsKLQotCXJlZ19jb3VudHJ5X2llX3Byb2Nlc3NfZGVidWcocmQsCi0JCQkJICAgICBjb3VudHJ5X2llX3JlZ2RvbWFpbiwKLQkJCQkgICAgIGludGVyc2VjdGVkX3JkKTsKLQotCWtmcmVlKGNvdW50cnlfaWVfcmVnZG9tYWluKTsKLQljb3VudHJ5X2llX3JlZ2RvbWFpbiA9IE5VTEw7Ci0KIAlpZiAoIWludGVyc2VjdGVkX3JkKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMjYzMCw3ICsxOTg1LDcgQEAKIAltdXRleF91bmxvY2soJnJlZ19tdXRleCk7CiB9CiAKLWludCByZWd1bGF0b3J5X2luaXQodm9pZCkKK2ludCBfX2luaXQgcmVndWxhdG9yeV9pbml0KHZvaWQpCiB7CiAJaW50IGVyciA9IDA7CiAKQEAgLTI2NzYsNyArMjAzMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgcmVndWxhdG9yeV9leGl0KHZvaWQpCit2b2lkIC8qIF9faW5pdF9vcl9leGl0ICovIHJlZ3VsYXRvcnlfZXhpdCh2b2lkKQogewogCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlZ19yZXF1ZXN0LCAqdG1wOwogCXN0cnVjdCByZWdfYmVhY29uICpyZWdfYmVhY29uLCAqYnRtcDsKQEAgLTI2ODgsOSArMjA0Myw2IEBACiAKIAlyZXNldF9yZWdkb21haW5zKCk7CiAKLQlrZnJlZShjb3VudHJ5X2llX3JlZ2RvbWFpbik7Ci0JY291bnRyeV9pZV9yZWdkb21haW4gPSBOVUxMOwotCiAJa2ZyZWUobGFzdF9yZXF1ZXN0KTsKIAogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHJlZ19wZGV2KTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWcuaCBiL25ldC93aXJlbGVzcy9yZWcuaAppbmRleCBiMjYyMjRhLi5jNDY5NWQwIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmgKKysrIGIvbmV0L3dpcmVsZXNzL3JlZy5oCkBAIC0xMCw3ICsxMCw3IEBACiAKIHZvaWQgcmVnX2RldmljZV9yZW1vdmUoc3RydWN0IHdpcGh5ICp3aXBoeSk7CiAKLWludCByZWd1bGF0b3J5X2luaXQodm9pZCk7CitpbnQgX19pbml0IHJlZ3VsYXRvcnlfaW5pdCh2b2lkKTsKIHZvaWQgcmVndWxhdG9yeV9leGl0KHZvaWQpOwogCiBpbnQgc2V0X3JlZ2RvbShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmQpOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3NjYW4uYyBiL25ldC93aXJlbGVzcy9zY2FuLmMKaW5kZXggNTg0MDFkMi4uNWNhOGM3MSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3NjYW4uYworKysgYi9uZXQvd2lyZWxlc3Mvc2Nhbi5jCkBAIC0yNzUsNiArMjc1LDcgQEAKIHsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CiAJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzLCAqcmVzID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CiAKIAlzcGluX2xvY2tfYmgoJmRldi0+YnNzX2xvY2spOwogCkBAIC0yODMsNiArMjg0LDEwIEBACiAJCQljb250aW51ZTsKIAkJaWYgKGNoYW5uZWwgJiYgYnNzLT5wdWIuY2hhbm5lbCAhPSBjaGFubmVsKQogCQkJY29udGludWU7CisJCS8qIERvbid0IGdldCBleHBpcmVkIEJTUyBzdHJ1Y3RzICovCisJCWlmICh0aW1lX2FmdGVyKG5vdywgYnNzLT50cyArIElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUpICYmCisJCSAgICAhYXRvbWljX3JlYWQoJmJzcy0+aG9sZCkpCisJCQljb250aW51ZTsKIAkJaWYgKGlzX2JzcygmYnNzLT5wdWIsIGJzc2lkLCBzc2lkLCBzc2lkX2xlbikpIHsKIAkJCXJlcyA9IGJzczsKIAkJCWtyZWZfZ2V0KCZyZXMtPnJlZik7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc21lLmMgYi9uZXQvd2lyZWxlc3Mvc21lLmMKaW5kZXggNzIyMjJmMC4uYThjMmQ2YiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3NtZS5jCisrKyBiL25ldC93aXJlbGVzcy9zbWUuYwpAQCAtMzUsNyArMzUsNyBAQAogCWJvb2wgYXV0b19hdXRoLCBwcmV2X2Jzc2lkX3ZhbGlkOwogfTsKIAotYm9vbCBjZmc4MDIxMV9pc19hbGxfaWRsZSh2b2lkKQorc3RhdGljIGJvb2wgY2ZnODAyMTFfaXNfYWxsX2lkbGUodm9pZCkKIHsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy91dGlsLmMgYi9uZXQvd2lyZWxlc3MvdXRpbC5jCmluZGV4IDM0MTYzNzMuLjBjOGExZTggMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy91dGlsLmMKKysrIGIvbmV0L3dpcmVsZXNzL3V0aWwuYwpAQCAtNzcwLDggKzc3MCw4IEBACiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCS8qIGlmIGl0J3MgcGFydCBvZiBhIGJyaWRnZSwgcmVqZWN0IGNoYW5naW5nIHR5cGUgdG8gc3RhdGlvbi9pYnNzICovCi0JaWYgKGRldi0+YnJfcG9ydCAmJiAobnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKLQkJCSAgICAgbnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCisJaWYgKChkZXYtPnByaXZfZmxhZ3MgJiBJRkZfQlJJREdFX1BPUlQpICYmCisJICAgIChudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyB8fCBudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWlmIChudHlwZSAhPSBvdHlwZSkgewpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYwppbmRleCA5NjM0Mjk5Li5iYjVlMGE1IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYworKysgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYwpAQCAtODI5LDcgKzgyOSw3IEBACiB7CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpOwotCWVudW0gdHhfcG93ZXJfc2V0dGluZyB0eXBlOworCWVudW0gbmw4MDIxMV90eF9wb3dlcl9zZXR0aW5nIHR5cGU7CiAJaW50IGRibSA9IDA7CiAKIAlpZiAoKGRhdGEtPnR4cG93ZXIuZmxhZ3MgJiBJV19UWFBPV19UWVBFKSAhPSBJV19UWFBPV19EQk0pCkBAIC04NTIsNyArODUyLDcgQEAKIAkJCWlmIChkYXRhLT50eHBvd2VyLnZhbHVlIDwgMCkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWRibSA9IGRhdGEtPnR4cG93ZXIudmFsdWU7Ci0JCQl0eXBlID0gVFhfUE9XRVJfRklYRUQ7CisJCQl0eXBlID0gTkw4MDIxMV9UWF9QT1dFUl9GSVhFRDsKIAkJCS8qIFRPRE86IGRvIHJlZ3VsYXRvcnkgY2hlY2shICovCiAJCX0gZWxzZSB7CiAJCQkvKgpAQCAtODYwLDEwICs4NjAsMTAgQEAKIAkJCSAqIHBhc3NlZCBpbiBmcm9tIHVzZXJsYW5kLgogCQkJICovCiAJCQlpZiAoZGF0YS0+dHhwb3dlci52YWx1ZSA8IDApIHsKLQkJCQl0eXBlID0gVFhfUE9XRVJfQVVUT01BVElDOworCQkJCXR5cGUgPSBOTDgwMjExX1RYX1BPV0VSX0FVVE9NQVRJQzsKIAkJCX0gZWxzZSB7CiAJCQkJZGJtID0gZGF0YS0+dHhwb3dlci52YWx1ZTsKLQkJCQl0eXBlID0gVFhfUE9XRVJfTElNSVRFRDsKKwkJCQl0eXBlID0gTkw4MDIxMV9UWF9QT1dFUl9MSU1JVEVEOwogCQkJfQogCQl9CiAJfSBlbHNlIHsKQEAgLTg3Miw3ICs4NzIsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXR1cm4gcmRldi0+b3BzLT5zZXRfdHhfcG93ZXIod2Rldi0+d2lwaHksIHR5cGUsIGRibSk7CisJcmV0dXJuIHJkZXYtPm9wcy0+c2V0X3R4X3Bvd2VyKHdkZXYtPndpcGh5LCB0eXBlLCBEQk1fVE9fTUJNKGRibSkpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY2ZnODAyMTFfd2V4dF9zaXd0eHBvd2VyKTsKIApAQCAtMTQ3MSw2ICsxNDcxLDcgQEAKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGNmZzgwMjExX3dleHRfc2l3cG1rc2EpOwogCiBzdGF0aWMgY29uc3QgaXdfaGFuZGxlciBjZmc4MDIxMV9oYW5kbGVyc1tdID0gewogCVtJV19JT0NUTF9JRFgoU0lPQ0dJV05BTUUpXQk9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd25hbWUsCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3BvbGljeS5jIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwppbmRleCBhZjFjMTczLi4yYjNlZDdhIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3BvbGljeS5jCisrKyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKQEAgLTE1OTQsOCArMTU5NCw4IEBACiAKIAkvKiBUcnkgdG8gaW5zdGFudGlhdGUgYSBidW5kbGUgKi8KIAllcnIgPSB4ZnJtX3RtcGxfcmVzb2x2ZShwb2xzLCBudW1fcG9scywgZmwsIHhmcm0sIGZhbWlseSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJaWYgKGVyciAhPSAtRUFHQUlOKQorCWlmIChlcnIgPD0gMCkgeworCQlpZiAoZXJyICE9IDAgJiYgZXJyICE9IC1FQUdBSU4pCiAJCQlYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNT1VUUE9MRVJST1IpOwogCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCX0KQEAgLTE2NzgsNiArMTY3OCwxMyBAQAogCQkJZ290byBtYWtlX2R1bW15X2J1bmRsZTsKIAkJZHN0X2hvbGQoJnhkc3QtPnUuZHN0KTsKIAkJcmV0dXJuIG9sZGZsbzsKKwl9IGVsc2UgaWYgKG5ld194ZHN0ID09IE5VTEwpIHsKKwkJbnVtX3hmcm1zID0gMDsKKwkJaWYgKG9sZGZsbyA9PSBOVUxMKQorCQkJZ290byBtYWtlX2R1bW15X2J1bmRsZTsKKwkJeGRzdC0+bnVtX3hmcm1zID0gMDsKKwkJZHN0X2hvbGQoJnhkc3QtPnUuZHN0KTsKKwkJcmV0dXJuIG9sZGZsbzsKIAl9CiAKIAkvKiBLaWxsIHRoZSBwcmV2aW91cyBidW5kbGUgKi8KQEAgLTE3NjAsNiArMTc2NywxMCBAQAogCQkJCXhmcm1fcG9sc19wdXQocG9scywgbnVtX3BvbHMpOwogCQkJCWVyciA9IFBUUl9FUlIoeGRzdCk7CiAJCQkJZ290byBkcm9wZHN0OworCQkJfSBlbHNlIGlmICh4ZHN0ID09IE5VTEwpIHsKKwkJCQludW1feGZybXMgPSAwOworCQkJCWRyb3BfcG9scyA9IG51bV9wb2xzOworCQkJCWdvdG8gbm9fdHJhbnNmb3JtOwogCQkJfQogCiAJCQlzcGluX2xvY2tfYmgoJnhmcm1fcG9saWN5X3NrX2J1bmRsZV9sb2NrKTsKQEAgLTI0ODEsNyArMjQ5Miw4IEBACiAJaW50IHJ2OwogCiAJaWYgKHNubXBfbWliX2luaXQoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIueGZybV9zdGF0aXN0aWNzLAotCQkJICBzaXplb2Yoc3RydWN0IGxpbnV4X3hmcm1fbWliKSkgPCAwKQorCQkJICBzaXplb2Yoc3RydWN0IGxpbnV4X3hmcm1fbWliKSwKKwkJCSAgX19hbGlnbm9mX18oc3RydWN0IGxpbnV4X3hmcm1fbWliKSkgPCAwKQogCQlyZXR1cm4gLUVOT01FTTsKIAlydiA9IHhmcm1fcHJvY19pbml0KG5ldCk7CiAJaWYgKHJ2IDwgMCkKZGlmZiAtLWdpdCBhL3NhbXBsZXMva3Byb2Jlcy9rcHJvYmVfZXhhbXBsZS5jIGIvc2FtcGxlcy9rcHJvYmVzL2twcm9iZV9leGFtcGxlLmMKaW5kZXggYTY4MTk5OC4uZWJmNWUwYyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9rcHJvYmVzL2twcm9iZV9leGFtcGxlLmMKKysrIGIvc2FtcGxlcy9rcHJvYmVzL2twcm9iZV9leGFtcGxlLmMKQEAgLTMyLDYgKzMyLDExIEBACiAJCQkiIG1zciA9IDB4JWx4XG4iLAogCQlwLT5hZGRyLCByZWdzLT5uaXAsIHJlZ3MtPm1zcik7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfTUlQUworCXByaW50ayhLRVJOX0lORk8gInByZV9oYW5kbGVyOiBwLT5hZGRyID0gMHglcCwgZXBjID0gMHglbHgsIgorCQkJIiBzdGF0dXMgPSAweCVseFxuIiwKKwkJcC0+YWRkciwgcmVncy0+Y3AwX2VwYywgcmVncy0+Y3AwX3N0YXR1cyk7CisjZW5kaWYKIAogCS8qIEEgZHVtcF9zdGFjaygpIGhlcmUgd2lsbCBnaXZlIGEgc3RhY2sgYmFja3RyYWNlICovCiAJcmV0dXJuIDA7CkBAIC00OSw2ICs1NCwxMCBAQAogCXByaW50ayhLRVJOX0lORk8gInBvc3RfaGFuZGxlcjogcC0+YWRkciA9IDB4JXAsIG1zciA9IDB4JWx4XG4iLAogCQlwLT5hZGRyLCByZWdzLT5tc3IpOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX01JUFMKKwlwcmludGsoS0VSTl9JTkZPICJwb3N0X2hhbmRsZXI6IHAtPmFkZHIgPSAweCVwLCBzdGF0dXMgPSAweCVseFxuIiwKKwkJcC0+YWRkciwgcmVncy0+Y3AwX3N0YXR1cyk7CisjZW5kaWYKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUuYnVpbGQgYi9zY3JpcHRzL01ha2VmaWxlLmJ1aWxkCmluZGV4IGU0ZGViNzMuLmExYTVjZjkgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUuYnVpbGQKKysrIGIvc2NyaXB0cy9NYWtlZmlsZS5idWlsZApAQCAtMTE1LDcgKzExNSwxMCBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogIyBEZWZhdWx0IGlzIGJ1aWx0LWluLCB1bmxlc3Mgd2Uga25vdyBvdGhlcndpc2UKLW1vZGtlcm5fY2ZsYWdzID0gJChpZiAkKHBhcnQtb2YtbW9kdWxlKSwgJChDRkxBR1NfTU9EVUxFKSwgJChDRkxBR1NfS0VSTkVMKSkKK21vZGtlcm5fY2ZsYWdzID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJJChpZiAkKHBhcnQtb2YtbW9kdWxlKSwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSQoS0JVSUxEX0NGTEFHU19NT0RVTEUpICQoQ0ZMQUdTX01PRFVMRSksIFwKKwkJJChLQlVJTERfQ0ZMQUdTX0tFUk5FTCkgJChDRkxBR1NfS0VSTkVMKSkKIHF1aWV0X21vZHRhZyA6PSAkKGVtcHR5KSAgICQoZW1wdHkpCiAKICQocmVhbC1vYmpzLW0pICAgICAgICA6IHBhcnQtb2YtbW9kdWxlIDo9IHkKQEAgLTE1NiwxNCArMTU5LDE0IEBACiAKIGNtZF9nZW5zeW10eXBlcyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgJChDUFApIC1EX19HRU5LU1lNU19fICQoY19mbGFncykgJDwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICQoR0VOS1NZTVMpIC1UICRAIC1hICQoQVJDSCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKEdFTktTWU1TKSAkKGlmICQoMSksIC1UICQoMikpIC1hICQoQVJDSCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICQoaWYgJChLQlVJTERfUFJFU0VSVkUpLC1wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAkKGlmICQoMSksLXIgJChmaXJzdHdvcmQgJCh3aWxkY2FyZCAkKEA6LnN5bXR5cGVzPS5zeW1yZWYpIC9kZXYvbnVsbCkpKQorICAgICAtciAkKGZpcnN0d29yZCAkKHdpbGRjYXJkICQoMjouc3ltdHlwZXM9LnN5bXJlZikgL2Rldi9udWxsKSkKIAogcXVpZXRfY21kX2NjX3N5bXR5cGVzX2MgPSBTWU0gJChxdWlldF9tb2R0YWcpICRACiBjbWRfY2Nfc3ltdHlwZXNfYyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHNldCAtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAkKGNhbGwgY21kX2dlbnN5bXR5cGVzLCB0cnVlKSA+L2Rldi9udWxsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChjYWxsIGNtZF9nZW5zeW10eXBlcyx0cnVlLCRAKSA+L2Rldi9udWxsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHRlc3QgLXMgJEAgfHwgcm0gLWYgJEAKIAogJChvYmopLyUuc3ltdHlwZXMgOiAkKHNyYykvJS5jIEZPUkNFCkBAIC0xOTIsMTYgKzE5NSwxNiBAQAogIyAgIHRoZSBhY3R1YWwgdmFsdWUgb2YgdGhlIGNoZWNrc3VtIGdlbmVyYXRlZCBieSBnZW5rc3ltcwogCiBjbWRfY2Nfb19jID0gJChDQykgJChjX2ZsYWdzKSAtYyAtbyAkKEBEKS8udG1wXyQoQEYpICQ8Ci1jbWRfbW9kdmVyc2lvbnMgPQkJCQkJCQlcCi0JaWYgJChPQkpEVU1QKSAtaCAkKEBEKS8udG1wXyQoQEYpIHwgZ3JlcCAtcSBfX2tzeW10YWI7IHRoZW4JXAotCQkkKGNhbGwgY21kX2dlbnN5bXR5cGVzLCAkKEtCVUlMRF9TWU1UWVBFUykpCQlcCi0JCSAgICA+ICQoQEQpLy50bXBfJChARjoubz0udmVyKTsJCQkJXAotCQkJCQkJCQkJXAotCQkkKExEKSAkKExERkxBR1MpIC1yIC1vICRAICQoQEQpLy50bXBfJChARikgCQlcCi0JCQktVCAkKEBEKS8udG1wXyQoQEY6Lm89LnZlcik7CQkJXAotCQlybSAtZiAkKEBEKS8udG1wXyQoQEYpICQoQEQpLy50bXBfJChARjoubz0udmVyKTsJXAotCWVsc2UJCQkJCQkJCVwKLQkJbXYgLWYgJChARCkvLnRtcF8kKEBGKSAkQDsJCQkJXAorY21kX21vZHZlcnNpb25zID0JCQkJCQkJCVwKKwlpZiAkKE9CSkRVTVApIC1oICQoQEQpLy50bXBfJChARikgfCBncmVwIC1xIF9fa3N5bXRhYjsgdGhlbgkJXAorCQkkKGNhbGwgY21kX2dlbnN5bXR5cGVzLCQoS0JVSUxEX1NZTVRZUEVTKSwkKEA6Lm89LnN5bXR5cGVzKSkJXAorCQkgICAgPiAkKEBEKS8udG1wXyQoQEY6Lm89LnZlcik7CQkJCQlcCisJCQkJCQkJCQkJXAorCQkkKExEKSAkKExERkxBR1MpIC1yIC1vICRAICQoQEQpLy50bXBfJChARikgCQkJXAorCQkJLVQgJChARCkvLnRtcF8kKEBGOi5vPS52ZXIpOwkJCQlcCisJCXJtIC1mICQoQEQpLy50bXBfJChARikgJChARCkvLnRtcF8kKEBGOi5vPS52ZXIpOwkJXAorCWVsc2UJCQkJCQkJCQlcCisJCW12IC1mICQoQEQpLy50bXBfJChARikgJEA7CQkJCQlcCiAJZmk7CiBlbmRpZgogCkBAIC0yNDgsMTAgKzI1MSwxMCBAQAogIyBDb21waWxlIGFzc2VtYmxlciBzb3VyY2VzICguUykKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLW1vZGtlcm5fYWZsYWdzIDo9ICQoQUZMQUdTX0tFUk5FTCkKK21vZGtlcm5fYWZsYWdzIDo9ICQoS0JVSUxEX0FGTEFHU19LRVJORUwpICQoQUZMQUdTX0tFUk5FTCkKIAotJChyZWFsLW9ianMtbSkgICAgICA6IG1vZGtlcm5fYWZsYWdzIDo9ICQoQUZMQUdTX01PRFVMRSkKLSQocmVhbC1vYmpzLW06Lm89LnMpOiBtb2RrZXJuX2FmbGFncyA6PSAkKEFGTEFHU19NT0RVTEUpCiskKHJlYWwtb2Jqcy1tKSAgICAgIDogbW9ka2Vybl9hZmxhZ3MgOj0gJChLQlVJTERfQUZMQUdTX01PRFVMRSkgJChBRkxBR1NfTU9EVUxFKQorJChyZWFsLW9ianMtbToubz0ucyk6IG1vZGtlcm5fYWZsYWdzIDo9ICQoS0JVSUxEX0FGTEFHU19NT0RVTEUpICQoQUZMQUdTX01PRFVMRSkKIAogcXVpZXRfY21kX2FzX3NfUyA9IENQUCAkKHF1aWV0X21vZHRhZykgJEAKIGNtZF9hc19zX1MgICAgICAgPSAkKENQUCkgJChhX2ZsYWdzKSAgIC1vICRAICQ8IApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZS5oZWxwIGIvc2NyaXB0cy9NYWtlZmlsZS5oZWxwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMzYwOGYKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL01ha2VmaWxlLmhlbHAKQEAgLTAsMCArMSwzIEBACisKK2NoZWNrZXItaGVscDoKKwlAZWNobyAgJyAgY29jY2ljaGVjayAgICAgIC0gQ2hlY2sgd2l0aCBDb2NjaW5lbGxlLicKZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUubW9kcG9zdCBiL3NjcmlwdHMvTWFrZWZpbGUubW9kcG9zdAppbmRleCA4ZjE0YzgxLi43ZDIyMDU2IDEwMDY0NAotLS0gYS9zY3JpcHRzL01ha2VmaWxlLm1vZHBvc3QKKysrIGIvc2NyaXB0cy9NYWtlZmlsZS5tb2Rwb3N0CkBAIC0zMCw3ICszMCw3IEBACiAjICAgICAtIFNlZSBpbmNsdWRlL2xpbnV4L21vZHVsZS5oIGZvciBtb3JlIGRldGFpbHMKIAogIyBTdGVwIDQgaXMgc29sZWx5IHVzZWQgdG8gYWxsb3cgbW9kdWxlIHZlcnNpb25pbmcgaW4gZXh0ZXJuYWwgbW9kdWxlcywKLSMgd2hlcmUgdGhlIENSQyBvZiBlYWNoIG1vZHVsZSBpcyByZXRyaWV2ZWQgZnJvbSB0aGUgTW9kdWxlLnN5bWVycyBmaWxlLgorIyB3aGVyZSB0aGUgQ1JDIG9mIGVhY2ggbW9kdWxlIGlzIHJldHJpZXZlZCBmcm9tIHRoZSBNb2R1bGUuc3ltdmVycyBmaWxlLgogCiAjIEtCVUlMRF9NT0RQT1NUX1dBUk4gY2FuIGJlIHNldCB0byBhdm9pZCBlcnJvciBvdXQgaW4gY2FzZSBvZiB1bmRlZmluZWQKICMgc3ltYm9scyBpbiB0aGUgZmluYWwgbW9kdWxlIGxpbmtpbmcgc3RhZ2UKQEAgLTEwNyw3ICsxMDcsNyBAQAogbW9kbmFtZSA9ICQobm90ZGlyICQoQDoubW9kLm89KSkKIAogcXVpZXRfY21kX2NjX29fYyA9IENDICAgICAgJEAKLSAgICAgIGNtZF9jY19vX2MgPSAkKENDKSAkKGNfZmxhZ3MpICQoQ0ZMQUdTX01PRFVMRSkJXAorICAgICAgY21kX2NjX29fYyA9ICQoQ0MpICQoY19mbGFncykgJChLQlVJTERfQ0ZMQUdTX01PRFVMRSkgJChDRkxBR1NfTU9EVUxFKSBcCiAJCSAgIC1jIC1vICRAICQ8CiAKICQobW9kdWxlczoua289Lm1vZC5vKTogJS5tb2QubzogJS5tb2QuYyBGT1JDRQpAQCAtMTE3LDggKzExNyw5IEBACiAKICMgU3RlcCA2KSwgZmluYWwgbGluayBvZiB0aGUgbW9kdWxlcwogcXVpZXRfY21kX2xkX2tvX28gPSBMRCBbTV0gICRACi0gICAgICBjbWRfbGRfa29fbyA9ICQoTEQpIC1yICQoTERGTEFHUykgJChMREZMQUdTX01PRFVMRSkgLW8gJEAJCVwKLQkJCSAgJChmaWx0ZXItb3V0IEZPUkNFLCReKQorICAgICAgY21kX2xkX2tvX28gPSAkKExEKSAtciAkKExERkxBR1MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKEtCVUlMRF9MREZMQUdTX01PRFVMRSkgJChMREZMQUdTX01PRFVMRSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtbyAkQCAkKGZpbHRlci1vdXQgRk9SQ0UsJF4pCiAKICQobW9kdWxlcyk6ICUua28gOiUubyAlLm1vZC5vIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsbGRfa29fbykKZGlmZiAtLWdpdCBhL3NjcmlwdHMvY2hlY2trY29uZmlnc3ltYm9scy5zaCBiL3NjcmlwdHMvY2hlY2trY29uZmlnc3ltYm9scy5zaAppbmRleCA0NmJlM2M1Li4yY2E0OWJiIDEwMDc1NQotLS0gYS9zY3JpcHRzL2NoZWNra2NvbmZpZ3N5bWJvbHMuc2gKKysrIGIvc2NyaXB0cy9jaGVja2tjb25maWdzeW1ib2xzLnNoCkBAIC0xNCw3ICsxNCw3IEBACiBkbwogCSMgT3V0cHV0IHRoZSBiYXJlIEtjb25maWcgdmFyaWFibGUgYW5kIHRoZSBmaWxlbmFtZTsgdGhlIF9NT0RVTEUgcGFydCBhdAogCSMgdGhlIGVuZCBpcyBub3QgcmVtb3ZlZCBoZXJlICh3b3VsZCBuZWVkIHBlcmwgYW4gbm90LWh1bmdyeSByZWdleHAgZm9yIHRoYXQpLgotCXNlZCAtbmUgJ3MhXi4qXDxcKFVNTF9cKVw/Q09ORklHX1woWzAtOUEtWl9dXCtcKS4qIVwyICckaSchcCcgPCAkaQorCXNlZCAtbmUgJ3MhXi4qXDxcKFVNTF9cKVw/Q09ORklHX1woWzAtOUEtWmEtel9dXCtcKS4qIVwyICckaSchcCcgPCAkaQogZG9uZSB8IFwKICMgU21hcnQgInNvcnR8dW5pcSIgaW1wbGVtZW50ZWQgaW4gYXdrIGFuZCB0dW5lZCB0byBjb2xsZWN0IHRoZSBuYW1lcyBvZiBhbGwKICMgZmlsZXMgd2hpY2ggdXNlIGEgZ2l2ZW4gc3ltYm9sCmRpZmYgLS1naXQgYS9zY3JpcHRzL2NvY2NpY2hlY2sgYi9zY3JpcHRzL2NvY2NpY2hlY2sKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjhiY2YxZgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvY29jY2ljaGVjawpAQCAtMCwwICsxLDgwIEBACisjIS9iaW4vc2gKKworU1BBVENIPSJgd2hpY2ggJHtTUEFUQ0g6PXNwYXRjaH1gIgorCitpZiBbICIkQyIgPSAiMSIgLW8gIiRDIiA9ICIyIiBdOyB0aGVuCisgICAgT05MSU5FPTEKKworIyBUaGlzIHJlcXVpcmVzIENvY2NpbmVsbGUgPj0gMC4yLjMKKyMgICAgRkxBR1M9Ii1pZ25vcmVfdW5rbm93bl9vcHRpb25zIC12ZXJ5X3F1aWV0IgorIyAgICBPUFRJT05TPSQqCisKKyMgV29ya2Fyb3VuZCBmb3IgQ29jY2luZWxsZSA8IDAuMi4zCisgICAgRkxBR1M9Ii1JICRzcmN0cmVlL2luY2x1ZGUgLXZlcnlfcXVpZXQiCisgICAgc2hpZnQgJCgoICQjIC0gMSApKQorICAgIE9QVElPTlM9JDEKK2Vsc2UKKyAgICBPTkxJTkU9MAorICAgIEZMQUdTPSItdmVyeV9xdWlldCIKK2ZpCisKK2lmIFsgISAteCAiJFNQQVRDSCIgXTsgdGhlbgorICAgIGVjaG8gJ3NwYXRjaCBpcyBwYXJ0IG9mIHRoZSBDb2NjaW5lbGxlIHByb2plY3QgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vY29jY2luZWxsZS5saXA2LmZyLycKKyAgICBleGl0IDEKK2ZpCisKK2lmIFsgIiRNT0RFIiA9ICIiIF0gOyB0aGVuCisgICAgaWYgWyAiJE9OTElORSIgPSAiMCIgXSA7IHRoZW4KKwllY2hvICdZb3UgaGF2ZSBub3QgZXhwbGljaXRseSBzcGVjaWZ5IHRoZSBtb2RlIHRvIHVzZS4gRmFsbGJhY2sgdG8gInJlcG9ydCIuJworCWVjaG8gJ1lvdSBjYW4gc3BlY2lmeSB0aGUgbW9kZSB3aXRoICJtYWtlIGNvY2NpY2hlY2sgTU9ERT08bW9kZT4iJworCWVjaG8gJ0F2YWlsYWJsZSBtb2RlcyBhcmU6IHJlcG9ydCwgcGF0Y2gsIGNvbnRleHQsIG9yZycKKyAgICBmaQorICAgIE1PREU9InJlcG9ydCIKK2ZpCisKK2lmIFsgIiRPTkxJTkUiID0gIjAiIF0gOyB0aGVuCisgICAgZWNobyAnJworICAgIGVjaG8gJ1BsZWFzZSBjaGVjayBmb3IgZmFsc2UgcG9zaXRpdmVzIGluIHRoZSBvdXRwdXQgYmVmb3JlIHN1Ym1pdHRpbmcgYSBwYXRjaC4nCisgICAgZWNobyAnV2hlbiB1c2luZyAicGF0Y2giIG1vZGUsIGNhcmVmdWxseSByZXZpZXcgdGhlIHBhdGNoIGJlZm9yZSBzdWJtaXR0aW5nIGl0LicKKyAgICBlY2hvICcnCitmaQorCitjb2NjaW5lbGxlICgpIHsKKyAgICBDT0NDST0iJDEiCisKKyAgICBPUFQ9YGdyZXAgIk9wdGlvbiIgJENPQ0NJIHwgY3V0IC1kJzonIC1mMmAKKworIyAgIFRoZSBvcHRpb24gJy1wYXJzZV9jb2NjaScgY2FuIGJlIHVzZWQgdG8gc3ludGF4aWNhbGx5IGNoZWNrIHRoZSBTbVBMIGZpbGVzLgorIworIyAgICAkU1BBVENIIC1EICRNT0RFICRGTEFHUyAtcGFyc2VfY29jY2kgJENPQ0NJICRPUFQgPiAvZGV2L251bGwKKworICAgIGlmIFsgIiRPTkxJTkUiID0gIjAiIF0gOyB0aGVuCisKKwlGSUxFPWBlY2hvICRDT0NDSSB8IHNlZCAic3wkc3JjdHJlZS98fCJgCisKKwllY2hvICJQcm9jZXNzaW5nIGBiYXNlbmFtZSAkQ09DQ0lgIHdpdGggb3B0aW9uKHMpIFwiJE9QVFwiIgorCWVjaG8gJ01lc3NhZ2UgZXhhbXBsZSB0byBzdWJtaXQgYSBwYXRjaDonCisKKwlzZWQgLWUgJy9cL1wvXC8vIWQnIC1lICdzfF4vLy98fCcgJENPQ0NJCisKKwllY2hvICcgVGhlIHNlbWFudGljIHBhdGNoIHRoYXQgbWFrZXMgdGhpcyBjaGFuZ2UgaXMgYXZhaWxhYmxlJworCWVjaG8gIiBpbiAkRklMRS4iCisJZWNobyAnJworCWVjaG8gJyBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHNlbWFudGljIHBhdGNoaW5nIGlzIGF2YWlsYWJsZSBhdCcKKwllY2hvICcgaHR0cDovL2NvY2NpbmVsbGUubGlwNi5mci8nCisJZWNobyAnJworCisJJFNQQVRDSCAtRCAkTU9ERSAkRkxBR1MgLXNwX2ZpbGUgJENPQ0NJICRPUFQgLWRpciAkc3JjdHJlZSB8fCBleGl0IDEKKyAgICBlbHNlCisJJFNQQVRDSCAtRCAkTU9ERSAkRkxBR1MgLXNwX2ZpbGUgJENPQ0NJICRPUFQgJE9QVElPTlMgfHwgZXhpdCAxCisgICAgZmkKKworfQorCitpZiBbICIkQ09DQ0kiID0gIiIgXSA7IHRoZW4KKyAgICBmb3IgZiBpbiBgZmluZCAkc3JjdHJlZS9zY3JpcHRzL2NvY2NpbmVsbGUvIC1uYW1lICcqLmNvY2NpJyAtdHlwZSBmIHwgc29ydGA7IGRvCisJY29jY2luZWxsZSAkZgorICAgIGRvbmUKK2Vsc2UKKyAgICBjb2NjaW5lbGxlICRDT0NDSQorZmkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvY29jY2luZWxsZS9hbGxvYy9kcm9wX2ttYWxsb2NfY2FzdC5jb2NjaSBiL3NjcmlwdHMvY29jY2luZWxsZS9hbGxvYy9kcm9wX2ttYWxsb2NfY2FzdC5jb2NjaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDQ3NzFkCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9jb2NjaW5lbGxlL2FsbG9jL2Ryb3Bfa21hbGxvY19jYXN0LmNvY2NpCkBAIC0wLDAgKzEsNjcgQEAKKy8vLworLy8vIENhc3RpbmcgKHZvaWQgKikgdmFsdWUgcmV0dXJuZWQgYnkga21hbGxvYyBpcyB1c2VsZXNzCisvLy8gYXMgbWVudGlvbmVkIGluIERvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUsIENoYXAgMTQuCisvLy8KKy8vIENvbmZpZGVuY2U6IEhpZ2gKKy8vIENvcHlyaWdodDogMjAwOSwyMDEwIE5pY29sYXMgUGFsaXgsIERJS1UuICBHUEx2Mi4KKy8vIFVSTDogaHR0cDovL2NvY2NpbmVsbGUubGlwNi5mci8KKy8vIE9wdGlvbnM6IC1ub19pbmNsdWRlcyAtaW5jbHVkZV9oZWFkZXJzCisvLworLy8gS2V5d29yZHM6IGttYWxsb2MsIGt6YWxsb2MsIGtjYWxsb2MKKy8vIFZlcnNpb24gbWluOiA8IDIuNi4xMiBrbWFsbG9jCisvLyBWZXJzaW9uIG1pbjogPCAyLjYuMTIga2NhbGxvYworLy8gVmVyc2lvbiBtaW46ICAgMi42LjE0IGt6YWxsb2MKKy8vCisKK3ZpcnR1YWwgY29udGV4dAordmlydHVhbCBwYXRjaAordmlydHVhbCBvcmcKK3ZpcnR1YWwgcmVwb3J0CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIEZvciBjb250ZXh0IG1vZGUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAZGVwZW5kcyBvbiBjb250ZXh0QAordHlwZSBUOworQEAKKworKiAoVCAqKQorICBcKGttYWxsb2NcfGt6YWxsb2NcfGtjYWxsb2NcKSguLi4pCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIEZvciBwYXRjaCBtb2RlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQGRlcGVuZHMgb24gcGF0Y2hACit0eXBlIFQ7CitAQAorCistIChUICopCisgIFwoa21hbGxvY1x8a3phbGxvY1x8a2NhbGxvY1wpKC4uLikKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgRm9yIG9yZyBhbmQgcmVwb3J0IG1vZGUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAciBkZXBlbmRzIG9uIG9yZyB8fCByZXBvcnRACit0eXBlIFQ7Citwb3NpdGlvbiBwOworQEAKKworIChUQHAgKilcKGttYWxsb2NcfGt6YWxsb2NcfGtjYWxsb2NcKSguLi4pCisKK0BzY3JpcHQ6cHl0aG9uIGRlcGVuZHMgb24gb3JnQAorcCA8PCByLnA7Cit0IDw8IHIuVDsKK0BACisKK2NvY2NpbGliLm9yZy5wcmludF9zYWZlX3RvZG8ocFswXSwgdCkKKworQHNjcmlwdDpweXRob24gZGVwZW5kcyBvbiByZXBvcnRACitwIDw8IHIucDsKK3QgPDwgci5UOworQEAKKworbXNnPSJXQVJOSU5HOiBjYXN0aW5nIHZhbHVlIHJldHVybmVkIGJ5IGtbY216XWFsbG9jIHRvICglcyAqKSBpcyB1c2VsZXNzLiIgJSAodCkKK2NvY2NpbGliLnJlcG9ydC5wcmludF9yZXBvcnQocFswXSwgbXNnKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jb2NjaW5lbGxlL2FsbG9jL2t6YWxsb2Mtc2ltcGxlLmNvY2NpIGIvc2NyaXB0cy9jb2NjaW5lbGxlL2FsbG9jL2t6YWxsb2Mtc2ltcGxlLmNvY2NpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYWU4MjgKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2NvY2NpbmVsbGUvYWxsb2Mva3phbGxvYy1zaW1wbGUuY29jY2kKQEAgLTAsMCArMSw4MiBAQAorLy8vCisvLy8ga3phbGxvYyBzaG91bGQgYmUgdXNlZCByYXRoZXIgdGhhbiBrbWFsbG9jIGZvbGxvd2VkIGJ5IG1lbXNldCAwCisvLy8KKy8vIENvbmZpZGVuY2U6IEhpZ2gKKy8vIENvcHlyaWdodDogKEMpIDIwMDktMjAxMCBKdWxpYSBMYXdhbGwsIE5pY29sYXMgUGFsaXgsIERJS1UuICBHUEx2Mi4KKy8vIENvcHlyaWdodDogKEMpIDIwMDktMjAxMCBHaWxsZXMgTXVsbGVyLCBJTlJJQS9MaVA2LiAgR1BMdjIuCisvLyBVUkw6IGh0dHA6Ly9jb2NjaW5lbGxlLmxpcDYuZnIvcnVsZXMva3phbGxvYy5odG1sCisvLyBPcHRpb25zOiAtbm9faW5jbHVkZXMgLWluY2x1ZGVfaGVhZGVycworLy8KKy8vIEtleXdvcmRzOiBrbWFsbG9jLCBremFsbG9jCisvLyBWZXJzaW9uIG1pbjogPCAyLjYuMTIga21hbGxvYworLy8gVmVyc2lvbiBtaW46ICAgMi42LjE0IGt6YWxsb2MKKy8vCisKK3ZpcnR1YWwgY29udGV4dAordmlydHVhbCBwYXRjaAordmlydHVhbCBvcmcKK3ZpcnR1YWwgcmVwb3J0CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIEZvciBjb250ZXh0IG1vZGUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAZGVwZW5kcyBvbiBjb250ZXh0QAordHlwZSBULCBUMjsKK2V4cHJlc3Npb24geDsKK2V4cHJlc3Npb24gRTEsRTI7CitzdGF0ZW1lbnQgUzsKK0BACisKKyogeCA9IChUKWttYWxsb2MoRTEsRTIpOworICBpZiAoKHg9PU5VTEwpIHx8IC4uLikgUworKiBtZW1zZXQoKFQyKXgsMCxFMSk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIEZvciBwYXRjaCBtb2RlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQGRlcGVuZHMgb24gcGF0Y2hACit0eXBlIFQsIFQyOworZXhwcmVzc2lvbiB4OworZXhwcmVzc2lvbiBFMSxFMjsKK3N0YXRlbWVudCBTOworQEAKKworLSB4ID0gKFQpa21hbGxvYyhFMSxFMik7CisrIHggPSBremFsbG9jKEUxLEUyKTsKKyAgaWYgKCh4PT1OVUxMKSB8fCAuLi4pIFMKKy0gbWVtc2V0KChUMil4LDAsRTEpOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBGb3Igb3JnIG1vZGUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAciBkZXBlbmRzIG9uIG9yZyB8fCByZXBvcnRACit0eXBlIFQsIFQyOworZXhwcmVzc2lvbiB4OworZXhwcmVzc2lvbiBFMSxFMjsKK3N0YXRlbWVudCBTOworcG9zaXRpb24gcDsKK0BACisKKyB4ID0gKFQpa21hbGxvY0BwKEUxLEUyKTsKKyBpZiAoKHg9PU5VTEwpIHx8IC4uLikgUworIG1lbXNldCgoVDIpeCwwLEUxKTsKKworQHNjcmlwdDpweXRob24gZGVwZW5kcyBvbiBvcmdACitwIDw8IHIucDsKK3ggPDwgci54OworQEAKKworbXNnPSIlcyIgJSAoeCkKK21zZ19zYWZlPW1zZy5yZXBsYWNlKCJbIiwiQCgiKS5yZXBsYWNlKCJdIiwiKSIpCitjb2NjaWxpYi5vcmcucHJpbnRfdG9kbyhwWzBdLCBtc2dfc2FmZSkKKworQHNjcmlwdDpweXRob24gZGVwZW5kcyBvbiByZXBvcnRACitwIDw8IHIucDsKK3ggPDwgci54OworQEAKKworbXNnPSJXQVJOSU5HOiBremFsbG9jIHNob3VsZCBiZSB1c2VkIGZvciAlcywgaW5zdGVhZCBvZiBrbWFsbG9jL21lbXNldCIgJSAoeCkKK2NvY2NpbGliLnJlcG9ydC5wcmludF9yZXBvcnQocFswXSwgbXNnKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jb2NjaW5lbGxlL2RlcmVmX251bGwuY29jY2kgYi9zY3JpcHRzL2NvY2NpbmVsbGUvZGVyZWZfbnVsbC5jb2NjaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTY5ZDc2Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9jb2NjaW5lbGxlL2RlcmVmX251bGwuY29jY2kKQEAgLTAsMCArMSwyOTMgQEAKKy8vLworLy8vIEEgdmFyaWFibGUgaXMgZGVyZWZlcmVuY2UgdW5kZXIgYSBOVUxMIHRlc3QuCisvLy8gRXZlbiB0aG91Z2ggaXQgaXMga25vdyB0byBiZSBOVUxMLgorLy8vCisvLyBDb25maWRlbmNlOiBNb2RlcmF0ZQorLy8gQ29weXJpZ2h0OiAoQykgMjAxMCBOaWNvbGFzIFBhbGl4LCBESUtVLiAgR1BMdjIuCisvLyBDb3B5cmlnaHQ6IChDKSAyMDEwIEp1bGlhIExhd2FsbCwgRElLVS4gIEdQTHYyLgorLy8gQ29weXJpZ2h0OiAoQykgMjAxMCBHaWxsZXMgTXVsbGVyLCBJTlJJQS9MaVA2LiAgR1BMdjIuCisvLyBVUkw6IGh0dHA6Ly9jb2NjaW5lbGxlLmxpcDYuZnIvCisvLyBDb21tZW50czogLUkgLi4uIC1hbGxfaW5jbHVkZXMgY2FuIGdpdmUgbW9yZSBjb21wbGV0ZSByZXN1bHRzCisvLyBPcHRpb25zOgorCit2aXJ0dWFsIGNvbnRleHQKK3ZpcnR1YWwgcGF0Y2gKK3ZpcnR1YWwgb3JnCit2aXJ0dWFsIHJlcG9ydAorCitAaW5pdGlhbGl6ZTpweXRob24gZGVwZW5kcyBvbiAhY29udGV4dCAmJiBwYXRjaCAmJiAhb3JnICYmICFyZXBvcnRACisKK2ltcG9ydCBzeXMKK3ByaW50ID4+IHN5cy5zdGRlcnIsICJUaGlzIHNlbWFudGljIHBhdGNoIGRvZXMgbm90IHN1cHBvcnQgdGhlICdwYXRjaCcgbW9kZS4iCisKK0BkZXBlbmRzIG9uIHBhdGNoQAorQEAKKwordGhpc19ydWxlX3Nob3VsZF9uZXZlcl9tYXRjaGVzKCk7CisKK0BpZm0gZGVwZW5kcyBvbiAhcGF0Y2hACitleHByZXNzaW9uICpFOworc3RhdGVtZW50IFMxLFMyOworcG9zaXRpb24gcDE7CitAQAorCitpZkBwMSAoKEUgPT0gTlVMTCAmJiAuLi4pIHx8IC4uLikgUzEgZWxzZSBTMgorCisvLyBUaGUgZm9sbG93aW5nIHR3byBydWxlcyBhcmUgc2VwYXJhdGUsIGJlY2F1c2UgYm90aCBjYW4gbWF0Y2ggYSBzaW5nbGUKKy8vIGV4cHJlc3Npb24gaW4gZGlmZmVyZW50IHdheXMKK0BwcjEgZGVwZW5kcyBvbiAhcGF0Y2ggZXhwcmVzc2lvbkAKK2V4cHJlc3Npb24gKmlmbS5FOworaWRlbnRpZmllciBmOworcG9zaXRpb24gcDE7CitAQAorCisgKEUgIT0gTlVMTCAmJiAuLi4pID8gPCsuLi5FLT5mQHAxLi4uKz4gOiAuLi4KKworQHByMiBkZXBlbmRzIG9uICFwYXRjaCBleHByZXNzaW9uQAorZXhwcmVzc2lvbiAqaWZtLkU7CitpZGVudGlmaWVyIGY7Citwb3NpdGlvbiBwMjsKK0BACisKKygKKyAgKEUgIT0gTlVMTCkgJiYgLi4uICYmIDwrLi4uRS0+ZkBwMi4uLis+Cit8CisgIChFID09IE5VTEwpIHx8IC4uLiB8fCA8Ky4uLkUtPmZAcDIuLi4rPgorfAorIHNpemVvZig8Ky4uLkUtPmZAcDIuLi4rPikKKykKKworLy8gRm9yIG9yZyBhbmQgcmVwb3J0IG1vZGVzCisKK0ByIGRlcGVuZHMgb24gIWNvbnRleHQgJiYgIXBhdGNoICYmIChvcmcgfHwgcmVwb3J0KSBleGlzdHNACitleHByZXNzaW9uIHN1YkUgPD0gaWZtLkU7CitleHByZXNzaW9uICppZm0uRTsKK2V4cHJlc3Npb24gRTEsRTI7CitpZGVudGlmaWVyIGY7CitzdGF0ZW1lbnQgUzEsUzIsUzMsUzQ7CitpdGVyYXRvciBpdGVyOworcG9zaXRpb24gcCE9e3ByMS5wMSxwcjIucDJ9OworcG9zaXRpb24gaWZtLnAxOworQEAKKworaWZAcDEgKChFID09IE5VTEwgJiYgLi4uKSB8fCAuLi4pCit7CisgIC4uLiB3aGVuICE9IGlmICguLi4pIFMxIGVsc2UgUzIKKygKKyBpdGVyKHN1YkUsLi4uKSBTNCAvLyBubyB1c2UKK3wKKyBsaXN0X3JlbW92ZV9oZWFkKEUyLHN1YkUsLi4uKQorfAorIHN1YkUgPSBFMQorfAorIGZvcihzdWJFID0gRTE7Li4uOy4uLikgUzQKK3wKKyBzdWJFKysKK3wKKyArK3N1YkUKK3wKKyAtLXN1YkUKK3wKKyBzdWJFLS0KK3wKKyAmc3ViRQorfAorIEUtPmZAcCAvLyBiYWQgdXNlCispCisgIC4uLiB3aGVuIGFueQorICByZXR1cm4gLi4uOworfQorZWxzZSBTMworCitAc2NyaXB0OnB5dGhvbiBkZXBlbmRzIG9uICFjb250ZXh0ICYmICFwYXRjaCAmJiAhb3JnICYmIHJlcG9ydEAKK3AgPDwgci5wOworcDEgPDwgaWZtLnAxOworeCA8PCBpZm0uRTsKK0BACisKK21zZz0iRVJST1I6ICVzIGlzIE5VTEwgYnV0IGRlcmVmZXJlbmNlZC4iICUgKHgpCitjb2NjaWxpYi5yZXBvcnQucHJpbnRfcmVwb3J0KHBbMF0sIG1zZykKK2NvY2NpLmluY2x1ZGVfbWF0Y2goRmFsc2UpCisKK0BzY3JpcHQ6cHl0aG9uIGRlcGVuZHMgb24gIWNvbnRleHQgJiYgIXBhdGNoICYmIG9yZyAmJiAhcmVwb3J0QAorcCA8PCByLnA7CitwMSA8PCBpZm0ucDE7Cit4IDw8IGlmbS5FOworQEAKKworbXNnPSJFUlJPUjogJXMgaXMgTlVMTCBidXQgZGVyZWZlcmVuY2VkLiIgJSAoeCkKK21zZ19zYWZlPW1zZy5yZXBsYWNlKCJbIiwiQCgiKS5yZXBsYWNlKCJdIiwiKSIpCitjb2NjaS5wcmludF9tYWluKG1zZ19zYWZlLHApCitjb2NjaS5pbmNsdWRlX21hdGNoKEZhbHNlKQorCitAcyBkZXBlbmRzIG9uICFjb250ZXh0ICYmICFwYXRjaCAmJiAob3JnIHx8IHJlcG9ydCkgZXhpc3RzQAorZXhwcmVzc2lvbiBzdWJFIDw9IGlmbS5FOworZXhwcmVzc2lvbiAqaWZtLkU7CitleHByZXNzaW9uIEUxLEUyOworaWRlbnRpZmllciBmOworc3RhdGVtZW50IFMxLFMyLFMzLFM0OworaXRlcmF0b3IgaXRlcjsKK3Bvc2l0aW9uIHAhPXtwcjEucDEscHIyLnAyfTsKK3Bvc2l0aW9uIGlmbS5wMTsKK0BACisKK2lmQHAxICgoRSA9PSBOVUxMICYmIC4uLikgfHwgLi4uKQoreworICAuLi4gd2hlbiAhPSBpZiAoLi4uKSBTMSBlbHNlIFMyCisoCisgaXRlcihzdWJFLC4uLikgUzQgLy8gbm8gdXNlCit8CisgbGlzdF9yZW1vdmVfaGVhZChFMixzdWJFLC4uLikKK3wKKyBzdWJFID0gRTEKK3wKKyBmb3Ioc3ViRSA9IEUxOy4uLjsuLi4pIFM0Cit8Cisgc3ViRSsrCit8CisgKytzdWJFCit8CisgLS1zdWJFCit8Cisgc3ViRS0tCit8CisgJnN1YkUKK3wKKyBFLT5mQHAgLy8gYmFkIHVzZQorKQorICAuLi4gd2hlbiBhbnkKK30KK2Vsc2UgUzMKKworQHNjcmlwdDpweXRob24gZGVwZW5kcyBvbiAhY29udGV4dCAmJiAhcGF0Y2ggJiYgIW9yZyAmJiByZXBvcnRACitwIDw8IHMucDsKK3AxIDw8IGlmbS5wMTsKK3ggPDwgaWZtLkU7CitAQAorCittc2c9IkVSUk9SOiAlcyBpcyBOVUxMIGJ1dCBkZXJlZmVyZW5jZWQuIiAlICh4KQorY29jY2lsaWIucmVwb3J0LnByaW50X3JlcG9ydChwWzBdLCBtc2cpCisKK0BzY3JpcHQ6cHl0aG9uIGRlcGVuZHMgb24gIWNvbnRleHQgJiYgIXBhdGNoICYmIG9yZyAmJiAhcmVwb3J0QAorcCA8PCBzLnA7CitwMSA8PCBpZm0ucDE7Cit4IDw8IGlmbS5FOworQEAKKworbXNnPSJFUlJPUjogJXMgaXMgTlVMTCBidXQgZGVyZWZlcmVuY2VkLiIgJSAoeCkKK21zZ19zYWZlPW1zZy5yZXBsYWNlKCJbIiwiQCgiKS5yZXBsYWNlKCJdIiwiKSIpCitjb2NjaS5wcmludF9tYWluKG1zZ19zYWZlLHApCisKKy8vIEZvciBjb250ZXh0IG1vZGUKKworQGRlcGVuZHMgb24gY29udGV4dCAmJiAhcGF0Y2ggJiYgIW9yZyAmJiAhcmVwb3J0IGV4aXN0c0AKK2V4cHJlc3Npb24gc3ViRSA8PSBpZm0uRTsKK2V4cHJlc3Npb24gKmlmbS5FOworZXhwcmVzc2lvbiBFMSxFMjsKK2lkZW50aWZpZXIgZjsKK3N0YXRlbWVudCBTMSxTMixTMyxTNDsKK2l0ZXJhdG9yIGl0ZXI7Citwb3NpdGlvbiBwIT17cHIxLnAxLHByMi5wMn07Citwb3NpdGlvbiBpZm0ucDE7CitAQAorCitpZkBwMSAoKEUgPT0gTlVMTCAmJiAuLi4pIHx8IC4uLikKK3sKKyAgLi4uIHdoZW4gIT0gaWYgKC4uLikgUzEgZWxzZSBTMgorKAorIGl0ZXIoc3ViRSwuLi4pIFM0IC8vIG5vIHVzZQorfAorIGxpc3RfcmVtb3ZlX2hlYWQoRTIsc3ViRSwuLi4pCit8Cisgc3ViRSA9IEUxCit8CisgZm9yKHN1YkUgPSBFMTsuLi47Li4uKSBTNAorfAorIHN1YkUrKworfAorICsrc3ViRQorfAorIC0tc3ViRQorfAorIHN1YkUtLQorfAorICZzdWJFCit8CisqIEUtPmZAcCAvLyBiYWQgdXNlCispCisgIC4uLiB3aGVuIGFueQorICByZXR1cm4gLi4uOworfQorZWxzZSBTMworCisvLyBUaGUgZm9sbG93aW5nIHRocmVlIHJ1bGVzIGFyZSBkdXBsaWNhdGVzIG9mIGlmbSwgcHIxIGFuZCBwcjIgcmVzcGVjdGl2ZWx5LgorLy8gSXQgaXMgbmVlZCBiZWNhdXNlIHRoZSBwcmV2aW91cyBydWxlIGFzIGFscmVhZHkgbWFkZSBhICJjaGFuZ2UiLgorCitAaWZtMSBkZXBlbmRzIG9uICFwYXRjaEAKK2V4cHJlc3Npb24gKkU7CitzdGF0ZW1lbnQgUzEsUzI7Citwb3NpdGlvbiBwMTsKK0BACisKK2lmQHAxICgoRSA9PSBOVUxMICYmIC4uLikgfHwgLi4uKSBTMSBlbHNlIFMyCisKK0BwcjExIGRlcGVuZHMgb24gIXBhdGNoIGV4cHJlc3Npb25ACitleHByZXNzaW9uICppZm0xLkU7CitpZGVudGlmaWVyIGY7Citwb3NpdGlvbiBwMTsKK0BACisKKyAoRSAhPSBOVUxMICYmIC4uLikgPyA8Ky4uLkUtPmZAcDEuLi4rPiA6IC4uLgorCitAcHIxMiBkZXBlbmRzIG9uICFwYXRjaCBleHByZXNzaW9uQAorZXhwcmVzc2lvbiAqaWZtMS5FOworaWRlbnRpZmllciBmOworcG9zaXRpb24gcDI7CitAQAorCisoCisgIChFICE9IE5VTEwpICYmIC4uLiAmJiA8Ky4uLkUtPmZAcDIuLi4rPgorfAorICAoRSA9PSBOVUxMKSB8fCAuLi4gfHwgPCsuLi5FLT5mQHAyLi4uKz4KK3wKKyBzaXplb2YoPCsuLi5FLT5mQHAyLi4uKz4pCispCisKK0BkZXBlbmRzIG9uIGNvbnRleHQgJiYgIXBhdGNoICYmICFvcmcgJiYgIXJlcG9ydCBleGlzdHNACitleHByZXNzaW9uIHN1YkUgPD0gaWZtMS5FOworZXhwcmVzc2lvbiAqaWZtMS5FOworZXhwcmVzc2lvbiBFMSxFMjsKK2lkZW50aWZpZXIgZjsKK3N0YXRlbWVudCBTMSxTMixTMyxTNDsKK2l0ZXJhdG9yIGl0ZXI7Citwb3NpdGlvbiBwIT17cHIxMS5wMSxwcjEyLnAyfTsKK3Bvc2l0aW9uIGlmbTEucDE7CitAQAorCitpZkBwMSAoKEUgPT0gTlVMTCAmJiAuLi4pIHx8IC4uLikKK3sKKyAgLi4uIHdoZW4gIT0gaWYgKC4uLikgUzEgZWxzZSBTMgorKAorIGl0ZXIoc3ViRSwuLi4pIFM0IC8vIG5vIHVzZQorfAorIGxpc3RfcmVtb3ZlX2hlYWQoRTIsc3ViRSwuLi4pCit8Cisgc3ViRSA9IEUxCit8CisgZm9yKHN1YkUgPSBFMTsuLi47Li4uKSBTNAorfAorIHN1YkUrKworfAorICsrc3ViRQorfAorIC0tc3ViRQorfAorIHN1YkUtLQorfAorICZzdWJFCit8CisqIEUtPmZAcCAvLyBiYWQgdXNlCispCisgIC4uLiB3aGVuIGFueQorfQorZWxzZSBTMwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jb2NjaW5lbGxlL2Vycl9jYXN0LmNvY2NpIGIvc2NyaXB0cy9jb2NjaW5lbGxlL2Vycl9jYXN0LmNvY2NpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZTExNTAwCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9jb2NjaW5lbGxlL2Vycl9jYXN0LmNvY2NpCkBAIC0wLDAgKzEsNTYgQEAKKy8vLworLy8vIFVzZSBFUlJfQ0FTVCBpbmxpbmVkIGZ1bmN0aW9uIGluc3RlYWQgb2YgRVJSX1BUUihQVFJfRVJSKC4uLikpCisvLy8KKy8vIENvbmZpZGVuY2U6IEhpZ2gKKy8vIENvcHlyaWdodDogKEMpIDIwMDksIDIwMTAgTmljb2xhcyBQYWxpeCwgRElLVS4gIEdQTHYyLgorLy8gQ29weXJpZ2h0OiAoQykgMjAwOSwgMjAxMCBKdWxpYSBMYXdhbGwsIERJS1UuICBHUEx2Mi4KKy8vIENvcHlyaWdodDogKEMpIDIwMDksIDIwMTAgR2lsbGVzIE11bGxlciwgSU5SSUEvTGlQNi4gIEdQTHYyLgorLy8gVVJMOiBodHRwOi8vY29jY2luZWxsZS5saXA2LmZyLworLy8gT3B0aW9uczoKKy8vCisvLyBLZXl3b3JkczogRVJSX1BUUiwgUFRSX0VSUiwgRVJSX0NBU1QKKy8vIFZlcnNpb24gbWluOiAyLjYuMjUKKy8vCisKK3ZpcnR1YWwgY29udGV4dAordmlydHVhbCBwYXRjaAordmlydHVhbCBvcmcKK3ZpcnR1YWwgcmVwb3J0CisKKworQCBkZXBlbmRzIG9uIGNvbnRleHQgJiYgIXBhdGNoICYmICFvcmcgJiYgIXJlcG9ydEAKK2V4cHJlc3Npb24geDsKK0BACisKKyogRVJSX1BUUihQVFJfRVJSKHgpKQorCitAIGRlcGVuZHMgb24gIWNvbnRleHQgJiYgcGF0Y2ggJiYgIW9yZyAmJiAhcmVwb3J0IEAKK2V4cHJlc3Npb24geDsKK0BACisKKy0gRVJSX1BUUihQVFJfRVJSKHgpKQorKyBFUlJfQ0FTVCh4KQorCitAciBkZXBlbmRzIG9uICFjb250ZXh0ICYmICFwYXRjaCAmJiAob3JnIHx8IHJlcG9ydClACitleHByZXNzaW9uIHg7Citwb3NpdGlvbiBwOworQEAKKworIEVSUl9QVFJAcChQVFJfRVJSKHgpKQorCitAc2NyaXB0OnB5dGhvbiBkZXBlbmRzIG9uIG9yZ0AKK3AgPDwgci5wOworeCA8PCByLng7CitAQAorCittc2c9IldBUk5JTkcgRVJSX0NBU1QgY2FuIGJlIHVzZWQgd2l0aCAlcyIgJSAoeCkKK21zZ19zYWZlPW1zZy5yZXBsYWNlKCJbIiwiQCgiKS5yZXBsYWNlKCJdIiwiKSIpCitjb2NjaWxpYi5vcmcucHJpbnRfdG9kbyhwWzBdLCBtc2dfc2FmZSkKKworQHNjcmlwdDpweXRob24gZGVwZW5kcyBvbiByZXBvcnRACitwIDw8IHIucDsKK3ggPDwgci54OworQEAKKworbXNnPSJXQVJOSU5HOiBFUlJfQ0FTVCBjYW4gYmUgdXNlZCB3aXRoICVzIiAlICh4KQorY29jY2lsaWIucmVwb3J0LnByaW50X3JlcG9ydChwWzBdLCBtc2cpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2NvY2NpbmVsbGUvcmVzb3VyY2Vfc2l6ZS5jb2NjaSBiL3NjcmlwdHMvY29jY2luZWxsZS9yZXNvdXJjZV9zaXplLmNvY2NpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MzVhNTgKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2NvY2NpbmVsbGUvcmVzb3VyY2Vfc2l6ZS5jb2NjaQpAQCAtMCwwICsxLDkzIEBACisvLy8KKy8vLyBVc2UgcmVzb3VyY2Vfc2l6ZSBmdW5jdGlvbiBvbiByZXNvdXJjZSBvYmplY3QKKy8vLyBpbnN0ZWFkIG9mIGV4cGxpY2l0IGNvbXB1dGF0aW9uLgorLy8vCisvLyAgQ29uZmlkZW5jZTogSGlnaAorLy8gIENvcHlyaWdodDogKEMpIDIwMDksIDIwMTAgTmljb2xhcyBQYWxpeCwgRElLVS4gIEdQTHYyLgorLy8gIENvcHlyaWdodDogKEMpIDIwMDksIDIwMTAgSnVsaWEgTGF3YWxsLCBESUtVLiAgR1BMdjIuCisvLyAgQ29weXJpZ2h0OiAoQykgMjAwOSwgMjAxMCBHaWxsZXMgTXVsbGVyLCBJTlJJQS9MaVA2LiAgR1BMdjIuCisvLyAgVVJMOiBodHRwOi8vY29jY2luZWxsZS5saXA2LmZyLworLy8gIE9wdGlvbnM6CisvLworLy8gIEtleXdvcmRzOiByZXNvdXJjZV9zaXplCisvLyAgVmVyc2lvbiBtaW46IDIuNi4yNyByZXNvdXJjZV9zaXplCisvLworCit2aXJ0dWFsIGNvbnRleHQKK3ZpcnR1YWwgcGF0Y2gKK3ZpcnR1YWwgb3JnCit2aXJ0dWFsIHJlcG9ydAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBGb3IgY29udGV4dCBtb2RlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQHJfY29udGV4dCBkZXBlbmRzIG9uIGNvbnRleHQgJiYgIXBhdGNoICYmICFvcmdACitzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKK0BACisKKyogKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCkgKyAxCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIEZvciBwYXRjaCBtb2RlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQHJfcGF0Y2ggZGVwZW5kcyBvbiAhY29udGV4dCAmJiBwYXRjaCAmJiAhb3JnQAorc3RydWN0IHJlc291cmNlICpyZXM7CitAQAorCistIChyZXMtPmVuZCAtIHJlcy0+c3RhcnQpICsgMQorKyByZXNvdXJjZV9zaXplKHJlcykKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgRm9yIG9yZyBtb2RlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitAcl9vcmcgZGVwZW5kcyBvbiAhY29udGV4dCAmJiAhcGF0Y2ggJiYgKG9yZyB8fCByZXBvcnQpQAorc3RydWN0IHJlc291cmNlICpyZXM7Citwb3NpdGlvbiBwOworQEAKKworIChyZXMtPmVuZEBwIC0gcmVzLT5zdGFydCkgKyAxCisKK0ByYmFkX29yZyBkZXBlbmRzIG9uICFjb250ZXh0ICYmICFwYXRjaCAmJiAob3JnIHx8IHJlcG9ydClACitzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKK3Bvc2l0aW9uIHAgIT0gcl9vcmcucDsKK0BACisKKyByZXMtPmVuZEBwIC0gcmVzLT5zdGFydAorCitAc2NyaXB0OnB5dGhvbiBkZXBlbmRzIG9uIG9yZ0AKK3AgPDwgcl9vcmcucDsKK3ggPDwgcl9vcmcucmVzOworQEAKKworbXNnPSJFUlJPUiB3aXRoICVzIiAlICh4KQorbXNnX3NhZmU9bXNnLnJlcGxhY2UoIlsiLCJAKCIpLnJlcGxhY2UoIl0iLCIpIikKK2NvY2NpbGliLm9yZy5wcmludF90b2RvKHBbMF0sIG1zZ19zYWZlKQorCitAc2NyaXB0OnB5dGhvbiBkZXBlbmRzIG9uIHJlcG9ydEAKK3AgPDwgcl9vcmcucDsKK3ggPDwgcl9vcmcucmVzOworQEAKKworbXNnPSJFUlJPUjogTWlzc2luZyByZXNvdXJjZV9zaXplIHdpdGggJXMiICUgKHgpCitjb2NjaWxpYi5yZXBvcnQucHJpbnRfcmVwb3J0KHBbMF0sIG1zZykKKworQHNjcmlwdDpweXRob24gZGVwZW5kcyBvbiBvcmdACitwIDw8IHJiYWRfb3JnLnA7Cit4IDw8IHJiYWRfb3JnLnJlczsKK0BACisKK21zZz0iV0FSTklORyB3aXRoICVzIiAlICh4KQorbXNnX3NhZmU9bXNnLnJlcGxhY2UoIlsiLCJAKCIpLnJlcGxhY2UoIl0iLCIpIikKK2NvY2NpbGliLm9yZy5wcmludF90b2RvKHBbMF0sIG1zZ19zYWZlKQorCitAc2NyaXB0OnB5dGhvbiBkZXBlbmRzIG9uIHJlcG9ydEAKK3AgPDwgcmJhZF9vcmcucDsKK3ggPDwgcmJhZF9vcmcucmVzOworQEAKKworbXNnPSJXQVJOSU5HOiBTdXNwaWNpb3VzIGNvZGUuIHJlc291cmNlX3NpemUgaXMgbWF5YmUgbWlzc2luZyB3aXRoICVzIiAlICh4KQorY29jY2lsaWIucmVwb3J0LnByaW50X3JlcG9ydChwWzBdLCBtc2cpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2RlY29kZWNvZGUgYi9zY3JpcHRzL2RlY29kZWNvZGUKaW5kZXggOGIzMGNjMy4uMThiYTg4MSAxMDA3NTUKLS0tIGEvc2NyaXB0cy9kZWNvZGVjb2RlCisrKyBiL3NjcmlwdHMvZGVjb2RlY29kZQpAQCAtNDAsNyArNDAsNyBAQAogY29kZT1gZWNobyAkY29kZSB8IHNlZCAtZSAncy8uKkNvZGU6IC8vJ2AKIAogd2lkdGg9YGV4cHIgaW5kZXggIiRjb2RlIiAnICdgCi13aWR0aD0kWygkd2lkdGgtMSkvMl0KK3dpZHRoPSQoKCgkd2lkdGgtMSkvMikpCiBjYXNlICR3aWR0aCBpbgogMSkgdHlwZT1ieXRlIDs7CiAyKSB0eXBlPTJieXRlIDs7CkBAIC00OCwxMCArNDgsMTAgQEAKIGVzYWMKIAogZGlzYXMoKSB7Ci0JJHtDUk9TU19DT01QSUxFfWFzICRBRkxBR1MgLW8gJDEubyAkMS5zICY+IC9kZXYvbnVsbAorCSR7Q1JPU1NfQ09NUElMRX1hcyAkQUZMQUdTIC1vICQxLm8gJDEucyA+IC9kZXYvbnVsbCAyPiYxCiAKLQlpZiBbICIkQVJDSCIgPT0gImFybSIgXTsgdGhlbgotCQlpZiBbICR3aWR0aCA9PSAyIF07IHRoZW4KKwlpZiBbICIkQVJDSCIgPSAiYXJtIiBdOyB0aGVuCisJCWlmIFsgJHdpZHRoIC1lcSAyIF07IHRoZW4KIAkJCU9CSkRVTVBGTEFHUz0iLU0gZm9yY2UtdGh1bWIiCiAJCWZpCiAKQEAgLTU5LDcgKzU5LDcgQEAKIAlmaQogCiAJJHtDUk9TU19DT01QSUxFfW9iamR1bXAgJE9CSkRVTVBGTEFHUyAtUyAkMS5vIHwgXAotCQlncmVwIC12ICIvdG1wXHxEaXNhc3NlbWJseVx8XC50ZXh0XHxeJCIgJj4gJDEuZGlzCisJCWdyZXAgLXYgIi90bXBcfERpc2Fzc2VtYmx5XHxcLnRleHRcfF4kIiA+ICQxLmRpcyAyPiYxCiB9CiAKIG1hcmtlcj1gZXhwciBpbmRleCAiJGNvZGUiICJcPCJgCmRpZmYgLS1naXQgYS9zY3JpcHRzL2R0Yy9mc3RyZWUuYyBiL3NjcmlwdHMvZHRjL2ZzdHJlZS5jCmluZGV4IDc2NmIyNjkuLjhmZTFiZGYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZHRjL2ZzdHJlZS5jCisrKyBiL3NjcmlwdHMvZHRjL2ZzdHJlZS5jCkBAIC03Nyw2ICs3Nyw3IEBACiAJCWZyZWUodG1wbmFtKTsKIAl9CiAKKwljbG9zZWRpcihkKTsKIAlyZXR1cm4gdHJlZTsKIH0KIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnLy5naXRpZ25vcmUgYi9zY3JpcHRzL2tjb25maWcvLmdpdGlnbm9yZQppbmRleCA2YTM2YTc2Li42MjRmNjUwIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvLmdpdGlnbm9yZQorKysgYi9zY3JpcHRzL2tjb25maWcvLmdpdGlnbm9yZQpAQCAtMTcsNiArMTcsNyBAQAogIwogY29uZgogbWNvbmYKK25jb25mCiBxY29uZgogZ2NvbmYKIGt4Z2V0dGV4dApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlIGIvc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlCmluZGV4IDdlYTY0OWQuLmRlOTM0ZGUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZQorKysgYi9zY3JpcHRzL2tjb25maWcvTWFrZWZpbGUKQEAgLTIxLDE3ICsyMSwxNyBAQAogCSQ8ICQoS2NvbmZpZykKIAogY29uZmlnOiAkKG9iaikvY29uZgotCSQ8ICQoS2NvbmZpZykKKwkkPCAtLW9sZGFza2NvbmZpZyAkKEtjb25maWcpCiAKIG5jb25maWc6ICQob2JqKS9uY29uZgogCSQ8ICQoS2NvbmZpZykKIAogb2xkY29uZmlnOiAkKG9iaikvY29uZgotCSQ8IC1vICQoS2NvbmZpZykKKwkkPCAtLSRAICQoS2NvbmZpZykKIAogc2lsZW50b2xkY29uZmlnOiAkKG9iaikvY29uZgogCSQoUSlta2RpciAtcCBpbmNsdWRlL2dlbmVyYXRlZAotCSQ8IC1zICQoS2NvbmZpZykKKwkkPCAtLSRAICQoS2NvbmZpZykKIAogIyBpZiBubyBwYXRoIGlzIGdpdmVuLCB0aGVuIHVzZSBzcmMgZGlyZWN0b3J5IHRvIGZpbmQgZmlsZQogaWZkZWYgTFNNT0QKQEAgLTQ0LDE1ICs0NCwxNSBAQAogbG9jYWxtb2Rjb25maWc6ICQob2JqKS9zdHJlYW1saW5lX2NvbmZpZy5wbCAkKG9iaikvY29uZgogCSQoUSlta2RpciAtcCBpbmNsdWRlL2dlbmVyYXRlZAogCSQoUSlwZXJsICQ8ICQoc3JjdHJlZSkgJChLY29uZmlnKSAkKExTTU9EX0YpID4gLnRtcC5jb25maWcKLQkkKFEpaWYgWyAtZiAuY29uZmlnIF07IHRoZW4gCQkJCVwKLQkJCWNtcCAtcyAudG1wLmNvbmZpZyAuY29uZmlnIHx8CQlcCi0JCQkobXYgLWYgLmNvbmZpZyAuY29uZmlnLm9sZC4xOwkJXAotCQkJIG12IC1mIC50bXAuY29uZmlnIC5jb25maWc7CQlcCi0JCQkgJChvYmopL2NvbmYgLXMgJChLY29uZmlnKTsJCVwKLQkJCSBtdiAtZiAuY29uZmlnLm9sZC4xIC5jb25maWcub2xkKQlcCi0JZWxzZQkJCQkJCQlcCi0JCQltdiAtZiAudG1wLmNvbmZpZyAuY29uZmlnOwkJXAotCQkJJChvYmopL2NvbmYgLXMgJChLY29uZmlnKTsJCVwKKwkkKFEpaWYgWyAtZiAuY29uZmlnIF07IHRoZW4gCQkJCQlcCisJCQljbXAgLXMgLnRtcC5jb25maWcgLmNvbmZpZyB8fAkJCVwKKwkJCShtdiAtZiAuY29uZmlnIC5jb25maWcub2xkLjE7CQkJXAorCQkJIG12IC1mIC50bXAuY29uZmlnIC5jb25maWc7CQkJXAorCQkJICQob2JqKS9jb25mIC0tc2lsZW50b2xkY29uZmlnICQoS2NvbmZpZyk7CVwKKwkJCSBtdiAtZiAuY29uZmlnLm9sZC4xIC5jb25maWcub2xkKQkJXAorCWVsc2UJCQkJCQkJCVwKKwkJCW12IC1mIC50bXAuY29uZmlnIC5jb25maWc7CQkJXAorCQkJJChvYmopL2NvbmYgLS1zaWxlbnRvbGRjb25maWcgJChLY29uZmlnKTsJXAogCWZpCiAJJChRKXJtIC1mIC50bXAuY29uZmlnCiAKQEAgLTYwLDE1ICs2MCwxNSBAQAogCSQoUSlta2RpciAtcCBpbmNsdWRlL2dlbmVyYXRlZAogCSQoUSlwZXJsICQ8ICQoc3JjdHJlZSkgJChLY29uZmlnKSAkKExTTU9EX0YpID4gLnRtcC5jb25maWcKIAkkKFEpc2VkIC1pIHMvPW0vPXkvIC50bXAuY29uZmlnCi0JJChRKWlmIFsgLWYgLmNvbmZpZyBdOyB0aGVuIAkJCQlcCi0JCQljbXAgLXMgLnRtcC5jb25maWcgLmNvbmZpZyB8fAkJXAotCQkJKG12IC1mIC5jb25maWcgLmNvbmZpZy5vbGQuMTsJCVwKLQkJCSBtdiAtZiAudG1wLmNvbmZpZyAuY29uZmlnOwkJXAotCQkJICQob2JqKS9jb25mIC1zICQoS2NvbmZpZyk7CQlcCi0JCQkgbXYgLWYgLmNvbmZpZy5vbGQuMSAuY29uZmlnLm9sZCkJXAotCWVsc2UJCQkJCQkJXAotCQkJbXYgLWYgLnRtcC5jb25maWcgLmNvbmZpZzsJCVwKLQkJCSQob2JqKS9jb25mIC1zICQoS2NvbmZpZyk7CQlcCisJJChRKWlmIFsgLWYgLmNvbmZpZyBdOyB0aGVuCQkJCQlcCisJCQljbXAgLXMgLnRtcC5jb25maWcgLmNvbmZpZyB8fAkJCVwKKwkJCShtdiAtZiAuY29uZmlnIC5jb25maWcub2xkLjE7CQkJXAorCQkJIG12IC1mIC50bXAuY29uZmlnIC5jb25maWc7CQkJXAorCQkJICQob2JqKS9jb25mIC0tc2lsZW50b2xkY29uZmlnICQoS2NvbmZpZyk7CVwKKwkJCSBtdiAtZiAuY29uZmlnLm9sZC4xIC5jb25maWcub2xkKQkJXAorCWVsc2UJCQkJCQkJCVwKKwkJCW12IC1mIC50bXAuY29uZmlnIC5jb25maWc7CQkJXAorCQkJJChvYmopL2NvbmYgLS1zaWxlbnRvbGRjb25maWcgJChLY29uZmlnKTsJXAogCWZpCiAJJChRKXJtIC1mIC50bXAuY29uZmlnCiAKQEAgLTk1LDMwICs5NSwyOSBAQAogCSQoUSlybSAtZiBhcmNoL3VtL0tjb25maWcuYXJjaAogCSQoUSlybSAtZiAkKG9iaikvY29uZmlnLnBvdAogCi1QSE9OWSArPSByYW5kY29uZmlnIGFsbHllc2NvbmZpZyBhbGxub2NvbmZpZyBhbGxtb2Rjb25maWcgZGVmY29uZmlnCitQSE9OWSArPSBhbGxub2NvbmZpZyBhbGx5ZXNjb25maWcgYWxsbW9kY29uZmlnIGFsbGRlZmNvbmZpZyByYW5kY29uZmlnCiAKLXJhbmRjb25maWc6ICQob2JqKS9jb25mCi0JJDwgLXIgJChLY29uZmlnKQorYWxsbm9jb25maWcgYWxseWVzY29uZmlnIGFsbG1vZGNvbmZpZyBhbGxkZWZjb25maWcgcmFuZGNvbmZpZzogJChvYmopL2NvbmYKKwkkPCAtLSRAICQoS2NvbmZpZykKIAotYWxseWVzY29uZmlnOiAkKG9iaikvY29uZgotCSQ8IC15ICQoS2NvbmZpZykKK1BIT05ZICs9IGxpc3RuZXdjb25maWcgb2xkbm9jb25maWcgc2F2ZWRlZmNvbmZpZyBkZWZjb25maWcKIAotYWxsbm9jb25maWc6ICQob2JqKS9jb25mCi0JJDwgLW4gJChLY29uZmlnKQorbGlzdG5ld2NvbmZpZyBvbGRub2NvbmZpZzogJChvYmopL2NvbmYKKwkkPCAtLSRAICQoS2NvbmZpZykKIAotYWxsbW9kY29uZmlnOiAkKG9iaikvY29uZgotCSQ8IC1tICQoS2NvbmZpZykKK3NhdmVkZWZjb25maWc6ICQob2JqKS9jb25mCisJJDwgLS0kQD1kZWZjb25maWcgJChLY29uZmlnKQogCiBkZWZjb25maWc6ICQob2JqKS9jb25mCiBpZmVxICgkKEtCVUlMRF9ERUZDT05GSUcpLCkKLQkkPCAtZCAkKEtjb25maWcpCisJJDwgLS1kZWZjb25maWcgJChLY29uZmlnKQogZWxzZQogCUBlY2hvICIqKiogRGVmYXVsdCBjb25maWd1cmF0aW9uIGlzIGJhc2VkIG9uICckKEtCVUlMRF9ERUZDT05GSUcpJyIKLQkkKFEpJDwgLUQgYXJjaC8kKFNSQ0FSQ0gpL2NvbmZpZ3MvJChLQlVJTERfREVGQ09ORklHKSAkKEtjb25maWcpCisJJChRKSQ8IC0tZGVmY29uZmlnPWFyY2gvJChTUkNBUkNIKS9jb25maWdzLyQoS0JVSUxEX0RFRkNPTkZJRykgJChLY29uZmlnKQogZW5kaWYKIAogJV9kZWZjb25maWc6ICQob2JqKS9jb25mCi0JJChRKSQ8IC1EIGFyY2gvJChTUkNBUkNIKS9jb25maWdzLyRAICQoS2NvbmZpZykKKwkkKFEpJDwgLS1kZWZjb25maWc9YXJjaC8kKFNSQ0FSQ0gpL2NvbmZpZ3MvJEAgJChLY29uZmlnKQogCiAjIEhlbHAgdGV4dCB1c2VkIGJ5IG1ha2UgaGVscAogaGVscDoKQEAgLTEzMSwxMSArMTMwLDE1IEBACiAJQGVjaG8gICcgIGxvY2FsbW9kY29uZmlnICAtIFVwZGF0ZSBjdXJyZW50IGNvbmZpZyBkaXNhYmxpbmcgbW9kdWxlcyBub3QgbG9hZGVkJwogCUBlY2hvICAnICBsb2NhbHllc2NvbmZpZyAgLSBVcGRhdGUgY3VycmVudCBjb25maWcgY29udmVydGluZyBsb2NhbCBtb2RzIHRvIGNvcmUnCiAJQGVjaG8gICcgIHNpbGVudG9sZGNvbmZpZyAtIFNhbWUgYXMgb2xkY29uZmlnLCBidXQgcXVpZXRseSwgYWRkaXRpb25hbGx5IHVwZGF0ZSBkZXBzJwotCUBlY2hvICAnICByYW5kY29uZmlnCSAgLSBOZXcgY29uZmlnIHdpdGggcmFuZG9tIGFuc3dlciB0byBhbGwgb3B0aW9ucycKLQlAZWNobyAgJyAgZGVmY29uZmlnCSAgLSBOZXcgY29uZmlnIHdpdGggZGVmYXVsdCBhbnN3ZXIgdG8gYWxsIG9wdGlvbnMnCi0JQGVjaG8gICcgIGFsbG1vZGNvbmZpZwkgIC0gTmV3IGNvbmZpZyBzZWxlY3RpbmcgbW9kdWxlcyB3aGVuIHBvc3NpYmxlJwotCUBlY2hvICAnICBhbGx5ZXNjb25maWcJICAtIE5ldyBjb25maWcgd2hlcmUgYWxsIG9wdGlvbnMgYXJlIGFjY2VwdGVkIHdpdGggeWVzJworCUBlY2hvICAnICBkZWZjb25maWcJICAtIE5ldyBjb25maWcgd2l0aCBkZWZhdWx0IGZyb20gQVJDSCBzdXBwbGllZCBkZWZjb25maWcnCisJQGVjaG8gICcgIHNhdmVkZWZjb25maWcgICAtIFNhdmUgY3VycmVudCBjb25maWcgYXMgLi9kZWZjb25maWcgKG1pbmltYWwgY29uZmlnKScKIAlAZWNobyAgJyAgYWxsbm9jb25maWcJICAtIE5ldyBjb25maWcgd2hlcmUgYWxsIG9wdGlvbnMgYXJlIGFuc3dlcmVkIHdpdGggbm8nCisJQGVjaG8gICcgIGFsbHllc2NvbmZpZwkgIC0gTmV3IGNvbmZpZyB3aGVyZSBhbGwgb3B0aW9ucyBhcmUgYWNjZXB0ZWQgd2l0aCB5ZXMnCisJQGVjaG8gICcgIGFsbG1vZGNvbmZpZwkgIC0gTmV3IGNvbmZpZyBzZWxlY3RpbmcgbW9kdWxlcyB3aGVuIHBvc3NpYmxlJworCUBlY2hvICAnICBhbGxkZWZjb25maWcgICAgLSBOZXcgY29uZmlnIHdpdGggYWxsIHN5bWJvbHMgc2V0IHRvIGRlZmF1bHQnCisJQGVjaG8gICcgIHJhbmRjb25maWcJICAtIE5ldyBjb25maWcgd2l0aCByYW5kb20gYW5zd2VyIHRvIGFsbCBvcHRpb25zJworCUBlY2hvICAnICBsaXN0bmV3Y29uZmlnICAgLSBMaXN0IG5ldyBvcHRpb25zJworCUBlY2hvICAnICBvbGRub2NvbmZpZyAgICAgLSBTYW1lIGFzIHNpbGVudG9sZGNvbmZpZyBidXQgc2V0IG5ldyBzeW1ib2xzIHRvIG4gKHVuc2V0KScKIAogIyBseGRpYWxvZyBzdHVmZgogY2hlY2stbHhkaWFsb2cgIDo9ICQoc3JjdHJlZSkvJChzcmMpL2x4ZGlhbG9nL2NoZWNrLWx4ZGlhbG9nLnNoCmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvY29uZi5jIGIvc2NyaXB0cy9rY29uZmlnL2NvbmYuYwppbmRleCA5OTYwZDFjMy4uMjc0ZjI3MSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2NvbmYuYworKysgYi9zY3JpcHRzL2tjb25maWcvY29uZi5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KIApAQCAtMTksMTYgKzIwLDIxIEBACiBzdGF0aWMgdm9pZCBjb25mKHN0cnVjdCBtZW51ICptZW51KTsKIHN0YXRpYyB2b2lkIGNoZWNrX2NvbmYoc3RydWN0IG1lbnUgKm1lbnUpOwogCi1lbnVtIHsKLQlhc2tfYWxsLAotCWFza19uZXcsCi0JYXNrX3NpbGVudCwKLQlzZXRfZGVmYXVsdCwKLQlzZXRfeWVzLAotCXNldF9tb2QsCi0Jc2V0X25vLAotCXNldF9yYW5kb20KLX0gaW5wdXRfbW9kZSA9IGFza19hbGw7CitlbnVtIGlucHV0X21vZGUgeworCW9sZGFza2NvbmZpZywKKwlzaWxlbnRvbGRjb25maWcsCisJb2xkY29uZmlnLAorCWFsbG5vY29uZmlnLAorCWFsbHllc2NvbmZpZywKKwlhbGxtb2Rjb25maWcsCisJYWxsZGVmY29uZmlnLAorCXJhbmRjb25maWcsCisJZGVmY29uZmlnLAorCXNhdmVkZWZjb25maWcsCisJbGlzdG5ld2NvbmZpZywKKwlvbGRub2NvbmZpZywKK30gaW5wdXRfbW9kZSA9IG9sZGFza2NvbmZpZzsKKwogY2hhciAqZGVmY29uZmlnX2ZpbGU7CiAKIHN0YXRpYyBpbnQgaW5kZW50ID0gMTsKQEAgLTkzLDE0ICs5OSwxNCBAQAogCX0KIAogCXN3aXRjaCAoaW5wdXRfbW9kZSkgewotCWNhc2UgYXNrX25ldzoKLQljYXNlIGFza19zaWxlbnQ6CisJY2FzZSBvbGRjb25maWc6CisJY2FzZSBzaWxlbnRvbGRjb25maWc6CiAJCWlmIChzeW1faGFzX3ZhbHVlKHN5bSkpIHsKIAkJCXByaW50ZigiJXNcbiIsIGRlZik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQljaGVja19zdGRpbigpOwotCWNhc2UgYXNrX2FsbDoKKwljYXNlIG9sZGFza2NvbmZpZzoKIAkJZmZsdXNoKHN0ZG91dCk7CiAJCWZnZXRzKGxpbmUsIDEyOCwgc3RkaW4pOwogCQlyZXR1cm4gMTsKQEAgLTE1NiwxNCArMTYyLDEyIEBACiBzdGF0aWMgaW50IGNvbmZfc3ltKHN0cnVjdCBtZW51ICptZW51KQogewogCXN0cnVjdCBzeW1ib2wgKnN5bSA9IG1lbnUtPnN5bTsKLQlpbnQgdHlwZTsKIAl0cmlzdGF0ZSBvbGR2YWwsIG5ld3ZhbDsKIAogCXdoaWxlICgxKSB7CiAJCXByaW50ZigiJSpzJXMgIiwgaW5kZW50IC0gMSwgIiIsIF8obWVudS0+cHJvbXB0LT50ZXh0KSk7CiAJCWlmIChzeW0tPm5hbWUpCiAJCQlwcmludGYoIiglcykgIiwgc3ltLT5uYW1lKTsKLQkJdHlwZSA9IHN5bV9nZXRfdHlwZShzeW0pOwogCQlwdXRjaGFyKCdbJyk7CiAJCW9sZHZhbCA9IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKTsKIAkJc3dpdGNoIChvbGR2YWwpIHsKQEAgLTIyOCwxMSArMjMyLDkgQEAKIHsKIAlzdHJ1Y3Qgc3ltYm9sICpzeW0sICpkZWZfc3ltOwogCXN0cnVjdCBtZW51ICpjaGlsZDsKLQlpbnQgdHlwZTsKIAlib29sIGlzX25ldzsKIAogCXN5bSA9IG1lbnUtPnN5bTsKLQl0eXBlID0gc3ltX2dldF90eXBlKHN5bSk7CiAJaXNfbmV3ID0gIXN5bV9oYXNfdmFsdWUoc3ltKTsKIAlpZiAoc3ltX2lzX2NoYW5nYWJsZShzeW0pKSB7CiAJCWNvbmZfc3ltKG1lbnUpOwpAQCAtMjk0LDE1ICsyOTYsMTUgQEAKIAkJCXByaW50ZigiPyIpOwogCQlwcmludGYoIl06ICIpOwogCQlzd2l0Y2ggKGlucHV0X21vZGUpIHsKLQkJY2FzZSBhc2tfbmV3OgotCQljYXNlIGFza19zaWxlbnQ6CisJCWNhc2Ugb2xkY29uZmlnOgorCQljYXNlIHNpbGVudG9sZGNvbmZpZzoKIAkJCWlmICghaXNfbmV3KSB7CiAJCQkJY250ID0gZGVmOwogCQkJCXByaW50ZigiJWRcbiIsIGNudCk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQljaGVja19zdGRpbigpOwotCQljYXNlIGFza19hbGw6CisJCWNhc2Ugb2xkYXNrY29uZmlnOgogCQkJZmZsdXNoKHN0ZG91dCk7CiAJCQlmZ2V0cyhsaW5lLCAxMjgsIHN0ZGluKTsKIAkJCXN0cmlwKGxpbmUpOwpAQCAtMzYwLDcgKzM2MiwxMCBAQAogCiAJCXN3aXRjaCAocHJvcC0+dHlwZSkgewogCQljYXNlIFBfTUVOVToKLQkJCWlmIChpbnB1dF9tb2RlID09IGFza19zaWxlbnQgJiYgcm9vdEVudHJ5ICE9IG1lbnUpIHsKKwkJCWlmICgoaW5wdXRfbW9kZSA9PSBzaWxlbnRvbGRjb25maWcgfHwKKwkJCSAgICAgaW5wdXRfbW9kZSA9PSBsaXN0bmV3Y29uZmlnIHx8CisJCQkgICAgIGlucHV0X21vZGUgPT0gb2xkbm9jb25maWcpICYmCisJCQkgICAgcm9vdEVudHJ5ICE9IG1lbnUpIHsKIAkJCQljaGVja19jb25mKG1lbnUpOwogCQkJCXJldHVybjsKIAkJCX0KQEAgLTQxOCwxMCArNDIzLDE2IEBACiAJaWYgKHN5bSAmJiAhc3ltX2hhc192YWx1ZShzeW0pKSB7CiAJCWlmIChzeW1faXNfY2hhbmdhYmxlKHN5bSkgfHwKIAkJICAgIChzeW1faXNfY2hvaWNlKHN5bSkgJiYgc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pID09IHllcykpIHsKLQkJCWlmICghY29uZl9jbnQrKykKLQkJCQlwcmludGYoXygiKlxuKiBSZXN0YXJ0IGNvbmZpZy4uLlxuKlxuIikpOwotCQkJcm9vdEVudHJ5ID0gbWVudV9nZXRfcGFyZW50X21lbnUobWVudSk7Ci0JCQljb25mKHJvb3RFbnRyeSk7CisJCQlpZiAoaW5wdXRfbW9kZSA9PSBsaXN0bmV3Y29uZmlnKSB7CisJCQkJaWYgKHN5bS0+bmFtZSAmJiAhc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pKSB7CisJCQkJCXByaW50ZigiQ09ORklHXyVzXG4iLCBzeW0tPm5hbWUpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKCFjb25mX2NudCsrKQorCQkJCQlwcmludGYoXygiKlxuKiBSZXN0YXJ0IGNvbmZpZy4uLlxuKlxuIikpOworCQkJCXJvb3RFbnRyeSA9IG1lbnVfZ2V0X3BhcmVudF9tZW51KG1lbnUpOworCQkJCWNvbmYocm9vdEVudHJ5KTsKKwkJCX0KIAkJfQogCX0KIApAQCAtNDI5LDYgKzQ0MCwyMiBAQAogCQljaGVja19jb25mKGNoaWxkKTsKIH0KIAorc3RhdGljIHN0cnVjdCBvcHRpb24gbG9uZ19vcHRzW10gPSB7CisJeyJvbGRhc2tjb25maWciLCAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgb2xkYXNrY29uZmlnfSwKKwl7Im9sZGNvbmZpZyIsICAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBvbGRjb25maWd9LAorCXsic2lsZW50b2xkY29uZmlnIiwgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIHNpbGVudG9sZGNvbmZpZ30sCisJeyJkZWZjb25maWciLCAgICAgICBvcHRpb25hbF9hcmd1bWVudCwgTlVMTCwgZGVmY29uZmlnfSwKKwl7InNhdmVkZWZjb25maWciLCAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBzYXZlZGVmY29uZmlnfSwKKwl7ImFsbG5vY29uZmlnIiwgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBhbGxub2NvbmZpZ30sCisJeyJhbGx5ZXNjb25maWciLCAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgYWxseWVzY29uZmlnfSwKKwl7ImFsbG1vZGNvbmZpZyIsICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBhbGxtb2Rjb25maWd9LAorCXsiYWxsZGVmY29uZmlnIiwgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIGFsbGRlZmNvbmZpZ30sCisJeyJyYW5kY29uZmlnIiwgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgcmFuZGNvbmZpZ30sCisJeyJsaXN0bmV3Y29uZmlnIiwgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgbGlzdG5ld2NvbmZpZ30sCisJeyJvbGRub2NvbmZpZyIsICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgb2xkbm9jb25maWd9LAorCXtOVUxMLCAwLCBOVUxMLCAwfQorfTsKKwogaW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpCiB7CiAJaW50IG9wdDsKQEAgLTQzOSwzMiArNDY2LDE3IEBACiAJYmluZHRleHRkb21haW4oUEFDS0FHRSwgTE9DQUxFRElSKTsKIAl0ZXh0ZG9tYWluKFBBQ0tBR0UpOwogCi0Jd2hpbGUgKChvcHQgPSBnZXRvcHQoYWMsIGF2LCAib3NkRDpubXlyaCIpKSAhPSAtMSkgeworCXdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmdfb25seShhYywgYXYsICIiLCBsb25nX29wdHMsIE5VTEwpKSAhPSAtMSkgeworCQlpbnB1dF9tb2RlID0gKGVudW0gaW5wdXRfbW9kZSlvcHQ7CiAJCXN3aXRjaCAob3B0KSB7Ci0JCWNhc2UgJ28nOgotCQkJaW5wdXRfbW9kZSA9IGFza19zaWxlbnQ7Ci0JCQlicmVhazsKLQkJY2FzZSAncyc6Ci0JCQlpbnB1dF9tb2RlID0gYXNrX3NpbGVudDsKKwkJY2FzZSBzaWxlbnRvbGRjb25maWc6CiAJCQlzeW5jX2tjb25maWcgPSAxOwogCQkJYnJlYWs7Ci0JCWNhc2UgJ2QnOgotCQkJaW5wdXRfbW9kZSA9IHNldF9kZWZhdWx0OwotCQkJYnJlYWs7Ci0JCWNhc2UgJ0QnOgotCQkJaW5wdXRfbW9kZSA9IHNldF9kZWZhdWx0OworCQljYXNlIGRlZmNvbmZpZzoKKwkJY2FzZSBzYXZlZGVmY29uZmlnOgogCQkJZGVmY29uZmlnX2ZpbGUgPSBvcHRhcmc7CiAJCQlicmVhazsKLQkJY2FzZSAnbic6Ci0JCQlpbnB1dF9tb2RlID0gc2V0X25vOwotCQkJYnJlYWs7Ci0JCWNhc2UgJ20nOgotCQkJaW5wdXRfbW9kZSA9IHNldF9tb2Q7Ci0JCQlicmVhazsKLQkJY2FzZSAneSc6Ci0JCQlpbnB1dF9tb2RlID0gc2V0X3llczsKLQkJCWJyZWFrOwotCQljYXNlICdyJzoKKwkJY2FzZSByYW5kY29uZmlnOgogCQl7CiAJCQlzdHJ1Y3QgdGltZXZhbCBub3c7CiAJCQl1bnNpZ25lZCBpbnQgc2VlZDsKQEAgLTQ3NywxNyArNDg5LDEyIEBACiAKIAkJCXNlZWQgPSAodW5zaWduZWQgaW50KSgobm93LnR2X3NlYyArIDEpICogKG5vdy50dl91c2VjICsgMSkpOwogCQkJc3JhbmQoc2VlZCk7Ci0KLQkJCWlucHV0X21vZGUgPSBzZXRfcmFuZG9tOwogCQkJYnJlYWs7CiAJCX0KLQkJY2FzZSAnaCc6Ci0JCQlwcmludGYoXygiU2VlIFJFQURNRSBmb3IgdXNhZ2UgaW5mb1xuIikpOwotCQkJZXhpdCgwKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgorCQljYXNlICc/JzoKIAkJCWZwcmludGYoc3RkZXJyLCBfKCJTZWUgUkVBRE1FIGZvciB1c2FnZSBpbmZvXG4iKSk7CiAJCQlleGl0KDEpOworCQkJYnJlYWs7CiAJCX0KIAl9CiAJaWYgKGFjID09IG9wdGluZCkgewpAQCAtNTEyLDcgKzUxOSw3IEBACiAJfQogCiAJc3dpdGNoIChpbnB1dF9tb2RlKSB7Ci0JY2FzZSBzZXRfZGVmYXVsdDoKKwljYXNlIGRlZmNvbmZpZzoKIAkJaWYgKCFkZWZjb25maWdfZmlsZSkKIAkJCWRlZmNvbmZpZ19maWxlID0gY29uZl9nZXRfZGVmYXVsdF9jb25mbmFtZSgpOwogCQlpZiAoY29uZl9yZWFkKGRlZmNvbmZpZ19maWxlKSkgewpAQCAtNTIyLDI1ICs1MjksMzIgQEAKIAkJCWV4aXQoMSk7CiAJCX0KIAkJYnJlYWs7Ci0JY2FzZSBhc2tfc2lsZW50OgotCWNhc2UgYXNrX2FsbDoKLQljYXNlIGFza19uZXc6CisJY2FzZSBzYXZlZGVmY29uZmlnOgogCQljb25mX3JlYWQoTlVMTCk7CiAJCWJyZWFrOwotCWNhc2Ugc2V0X25vOgotCWNhc2Ugc2V0X21vZDoKLQljYXNlIHNldF95ZXM6Ci0JY2FzZSBzZXRfcmFuZG9tOgorCWNhc2Ugc2lsZW50b2xkY29uZmlnOgorCWNhc2Ugb2xkYXNrY29uZmlnOgorCWNhc2Ugb2xkY29uZmlnOgorCWNhc2UgbGlzdG5ld2NvbmZpZzoKKwljYXNlIG9sZG5vY29uZmlnOgorCQljb25mX3JlYWQoTlVMTCk7CisJCWJyZWFrOworCWNhc2UgYWxsbm9jb25maWc6CisJY2FzZSBhbGx5ZXNjb25maWc6CisJY2FzZSBhbGxtb2Rjb25maWc6CisJY2FzZSBhbGxkZWZjb25maWc6CisJY2FzZSByYW5kY29uZmlnOgogCQluYW1lID0gZ2V0ZW52KCJLQ09ORklHX0FMTENPTkZJRyIpOwogCQlpZiAobmFtZSAmJiAhc3RhdChuYW1lLCAmdG1wc3RhdCkpIHsKIAkJCWNvbmZfcmVhZF9zaW1wbGUobmFtZSwgU19ERUZfVVNFUik7CiAJCQlicmVhazsKIAkJfQogCQlzd2l0Y2ggKGlucHV0X21vZGUpIHsKLQkJY2FzZSBzZXRfbm86CSBuYW1lID0gImFsbG5vLmNvbmZpZyI7IGJyZWFrOwotCQljYXNlIHNldF9tb2Q6CSBuYW1lID0gImFsbG1vZC5jb25maWciOyBicmVhazsKLQkJY2FzZSBzZXRfeWVzOgkgbmFtZSA9ICJhbGx5ZXMuY29uZmlnIjsgYnJlYWs7Ci0JCWNhc2Ugc2V0X3JhbmRvbTogbmFtZSA9ICJhbGxyYW5kb20uY29uZmlnIjsgYnJlYWs7CisJCWNhc2UgYWxsbm9jb25maWc6CW5hbWUgPSAiYWxsbm8uY29uZmlnIjsgYnJlYWs7CisJCWNhc2UgYWxseWVzY29uZmlnOgluYW1lID0gImFsbHllcy5jb25maWciOyBicmVhazsKKwkJY2FzZSBhbGxtb2Rjb25maWc6CW5hbWUgPSAiYWxsbW9kLmNvbmZpZyI7IGJyZWFrOworCQljYXNlIGFsbGRlZmNvbmZpZzoJbmFtZSA9ICJhbGxkZWYuY29uZmlnIjsgYnJlYWs7CisJCWNhc2UgcmFuZGNvbmZpZzoJbmFtZSA9ICJhbGxyYW5kb20uY29uZmlnIjsgYnJlYWs7CiAJCWRlZmF1bHQ6IGJyZWFrOwogCQl9CiAJCWlmICghc3RhdChuYW1lLCAmdG1wc3RhdCkpCkBAIC01NjUsMzMgKzU3OSw0MiBAQAogCX0KIAogCXN3aXRjaCAoaW5wdXRfbW9kZSkgewotCWNhc2Ugc2V0X25vOgorCWNhc2UgYWxsbm9jb25maWc6CiAJCWNvbmZfc2V0X2FsbF9uZXdfc3ltYm9scyhkZWZfbm8pOwogCQlicmVhazsKLQljYXNlIHNldF95ZXM6CisJY2FzZSBhbGx5ZXNjb25maWc6CiAJCWNvbmZfc2V0X2FsbF9uZXdfc3ltYm9scyhkZWZfeWVzKTsKIAkJYnJlYWs7Ci0JY2FzZSBzZXRfbW9kOgorCWNhc2UgYWxsbW9kY29uZmlnOgogCQljb25mX3NldF9hbGxfbmV3X3N5bWJvbHMoZGVmX21vZCk7CiAJCWJyZWFrOwotCWNhc2Ugc2V0X3JhbmRvbToKLQkJY29uZl9zZXRfYWxsX25ld19zeW1ib2xzKGRlZl9yYW5kb20pOwotCQlicmVhazsKLQljYXNlIHNldF9kZWZhdWx0OgorCWNhc2UgYWxsZGVmY29uZmlnOgogCQljb25mX3NldF9hbGxfbmV3X3N5bWJvbHMoZGVmX2RlZmF1bHQpOwogCQlicmVhazsKLQljYXNlIGFza19uZXc6Ci0JY2FzZSBhc2tfYWxsOgorCWNhc2UgcmFuZGNvbmZpZzoKKwkJY29uZl9zZXRfYWxsX25ld19zeW1ib2xzKGRlZl9yYW5kb20pOworCQlicmVhazsKKwljYXNlIGRlZmNvbmZpZzoKKwkJY29uZl9zZXRfYWxsX25ld19zeW1ib2xzKGRlZl9kZWZhdWx0KTsKKwkJYnJlYWs7CisJY2FzZSBzYXZlZGVmY29uZmlnOgorCQlicmVhazsKKwljYXNlIG9sZGFza2NvbmZpZzoKIAkJcm9vdEVudHJ5ID0gJnJvb3RtZW51OwogCQljb25mKCZyb290bWVudSk7Ci0JCWlucHV0X21vZGUgPSBhc2tfc2lsZW50OworCQlpbnB1dF9tb2RlID0gc2lsZW50b2xkY29uZmlnOwogCQkvKiBmYWxsIHRocm91Z2ggKi8KLQljYXNlIGFza19zaWxlbnQ6CisJY2FzZSBvbGRjb25maWc6CisJY2FzZSBsaXN0bmV3Y29uZmlnOgorCWNhc2Ugb2xkbm9jb25maWc6CisJY2FzZSBzaWxlbnRvbGRjb25maWc6CiAJCS8qIFVwZGF0ZSB1bnRpbCBhIGxvb3AgY2F1c2VkIG5vIG1vcmUgY2hhbmdlcyAqLwogCQlkbyB7CiAJCQljb25mX2NudCA9IDA7CiAJCQljaGVja19jb25mKCZyb290bWVudSk7Ci0JCX0gd2hpbGUgKGNvbmZfY250KTsKKwkJfSB3aGlsZSAoY29uZl9jbnQgJiYKKwkJCSAoaW5wdXRfbW9kZSAhPSBsaXN0bmV3Y29uZmlnICYmCisJCQkgIGlucHV0X21vZGUgIT0gb2xkbm9jb25maWcpKTsKIAkJYnJlYWs7CiAJfQogCkBAIC02MDcsNyArNjMwLDEzIEBACiAJCQlmcHJpbnRmKHN0ZGVyciwgXygiXG4qKiogRXJyb3IgZHVyaW5nIHVwZGF0ZSBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uXG5cbiIpKTsKIAkJCXJldHVybiAxOwogCQl9Ci0JfSBlbHNlIHsKKwl9IGVsc2UgaWYgKGlucHV0X21vZGUgPT0gc2F2ZWRlZmNvbmZpZykgeworCQlpZiAoY29uZl93cml0ZV9kZWZjb25maWcoZGVmY29uZmlnX2ZpbGUpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgXygibioqKiBFcnJvciB3aGlsZSBzYXZpbmcgZGVmY29uZmlnIHRvOiAlc1xuXG4iKSwKKwkJCSAgICAgICAgZGVmY29uZmlnX2ZpbGUpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9IGVsc2UgaWYgKGlucHV0X21vZGUgIT0gbGlzdG5ld2NvbmZpZykgewogCQlpZiAoY29uZl93cml0ZShOVUxMKSkgewogCQkJZnByaW50ZihzdGRlcnIsIF8oIlxuKioqIEVycm9yIGR1cmluZyB3cml0aW5nIG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi5cblxuIikpOwogCQkJZXhpdCgxKTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9jb25mZGF0YS5jIGIvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKaW5kZXggYzRkZWM4MC4uZjgxZjI2MyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKQEAgLTE3MCw4ICsxNzAsMTEgQEAKIAkJaWYgKGluKQogCQkJZ290byBsb2FkOwogCQlzeW1fYWRkX2NoYW5nZV9jb3VudCgxKTsKLQkJaWYgKCFzeW1fZGVmY29uZmlnX2xpc3QpCisJCWlmICghc3ltX2RlZmNvbmZpZ19saXN0KSB7CisJCQlpZiAobW9kdWxlc19zeW0pCisJCQkJc3ltX2NhbGNfdmFsdWUobW9kdWxlc19zeW0pOwogCQkJcmV0dXJuIDE7CisJCX0KIAogCQlmb3JfYWxsX2RlZmF1bHRzKHN5bV9kZWZjb25maWdfbGlzdCwgcHJvcCkgewogCQkJaWYgKGV4cHJfY2FsY192YWx1ZShwcm9wLT52aXNpYmxlLmV4cHIpID09IG5vIHx8CkBAIC0zOTYsMTUgKzM5OSwxNDkgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogV3JpdGUgYSBTX1NUUklORyAqLworc3RhdGljIHZvaWQgY29uZl93cml0ZV9zdHJpbmcoYm9vbCBoZWFkZXJmaWxlLCBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyLCBGSUxFICpvdXQpCit7CisJaW50IGw7CisJaWYgKGhlYWRlcmZpbGUpCisJCWZwcmludGYob3V0LCAiI2RlZmluZSBDT05GSUdfJXMgXCIiLCBuYW1lKTsKKwllbHNlCisJCWZwcmludGYob3V0LCAiQ09ORklHXyVzPVwiIiwgbmFtZSk7CisKKwl3aGlsZSAoMSkgeworCQlsID0gc3RyY3NwbihzdHIsICJcIlxcIik7CisJCWlmIChsKSB7CisJCQlmd3JpdGUoc3RyLCBsLCAxLCBvdXQpOworCQkJc3RyICs9IGw7CisJCX0KKwkJaWYgKCEqc3RyKQorCQkJYnJlYWs7CisJCWZwcmludGYob3V0LCAiXFwlYyIsICpzdHIrKyk7CisJfQorCWZwdXRzKCJcIlxuIiwgb3V0KTsKK30KKworc3RhdGljIHZvaWQgY29uZl93cml0ZV9zeW1ib2woc3RydWN0IHN5bWJvbCAqc3ltLCBlbnVtIHN5bWJvbF90eXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpvdXQsIGJvb2wgd3JpdGVfbm8pCit7CisJY29uc3QgY2hhciAqc3RyOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBTX0JPT0xFQU46CisJY2FzZSBTX1RSSVNUQVRFOgorCQlzd2l0Y2ggKHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSkgeworCQljYXNlIG5vOgorCQkJaWYgKHdyaXRlX25vKQorCQkJCWZwcmludGYob3V0LCAiIyBDT05GSUdfJXMgaXMgbm90IHNldFxuIiwgc3ltLT5uYW1lKTsKKwkJCWJyZWFrOworCQljYXNlIG1vZDoKKwkJCWZwcmludGYob3V0LCAiQ09ORklHXyVzPW1cbiIsIHN5bS0+bmFtZSk7CisJCQlicmVhazsKKwkJY2FzZSB5ZXM6CisJCQlmcHJpbnRmKG91dCwgIkNPTkZJR18lcz15XG4iLCBzeW0tPm5hbWUpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTX1NUUklORzoKKwkJY29uZl93cml0ZV9zdHJpbmcoZmFsc2UsIHN5bS0+bmFtZSwgc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSwgb3V0KTsKKwkJYnJlYWs7CisJY2FzZSBTX0hFWDoKKwljYXNlIFNfSU5UOgorCQlzdHIgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOworCQlmcHJpbnRmKG91dCwgIkNPTkZJR18lcz0lc1xuIiwgc3ltLT5uYW1lLCBzdHIpOworCQlicmVhazsKKwljYXNlIFNfT1RIRVI6CisJY2FzZSBTX1VOS05PV046CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIFdyaXRlIG91dCBhIG1pbmltYWwgY29uZmlnLgorICogQWxsIHZhbHVlcyB0aGF0IGhhcyBkZWZhdWx0IHZhbHVlcyBhcmUgc2tpcHBlZCBhcyB0aGlzIGlzIHJlZHVuZGFudC4KKyAqLworaW50IGNvbmZfd3JpdGVfZGVmY29uZmlnKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1Y3QgbWVudSAqbWVudTsKKwlGSUxFICpvdXQ7CisKKwlvdXQgPSBmb3BlbihmaWxlbmFtZSwgInciKTsKKwlpZiAoIW91dCkKKwkJcmV0dXJuIDE7CisKKwlzeW1fY2xlYXJfYWxsX3ZhbGlkKCk7CisKKwkvKiBUcmF2ZXJzZSBhbGwgbWVudXMgdG8gZmluZCBhbGwgcmVsZXZhbnQgc3ltYm9scyAqLworCW1lbnUgPSByb290bWVudS5saXN0OworCisJd2hpbGUgKG1lbnUgIT0gTlVMTCkKKwl7CisJCXN5bSA9IG1lbnUtPnN5bTsKKwkJaWYgKHN5bSA9PSBOVUxMKSB7CisJCQlpZiAoIW1lbnVfaXNfdmlzaWJsZShtZW51KSkKKwkJCQlnb3RvIG5leHRfbWVudTsKKwkJfSBlbHNlIGlmICghc3ltX2lzX2Nob2ljZShzeW0pKSB7CisJCQlzeW1fY2FsY192YWx1ZShzeW0pOworCQkJaWYgKCEoc3ltLT5mbGFncyAmIFNZTUJPTF9XUklURSkpCisJCQkJZ290byBuZXh0X21lbnU7CisJCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfV1JJVEU7CisJCQkvKiBJZiB3ZSBjYW5ub3QgY2hhbmdlIHRoZSBzeW1ib2wgLSBza2lwICovCisJCQlpZiAoIXN5bV9pc19jaGFuZ2FibGUoc3ltKSkKKwkJCQlnb3RvIG5leHRfbWVudTsKKwkJCS8qIElmIHN5bWJvbCBlcXVhbHMgdG8gZGVmYXVsdCB2YWx1ZSAtIHNraXAgKi8KKwkJCWlmIChzdHJjbXAoc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSwgc3ltX2dldF9zdHJpbmdfZGVmYXVsdChzeW0pKSA9PSAwKQorCQkJCWdvdG8gbmV4dF9tZW51OworCisJCQkvKgorCQkJICogSWYgc3ltYm9sIGlzIGEgY2hvaWNlIHZhbHVlIGFuZCBlcXVhbHMgdG8gdGhlCisJCQkgKiBkZWZhdWx0IGZvciBhIGNob2ljZSAtIHNraXAuCisJCQkgKiBCdXQgb25seSBpZiB2YWx1ZSBlcXVhbCB0byAieSIuCisJCQkgKi8KKwkJCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkpIHsKKwkJCQlzdHJ1Y3Qgc3ltYm9sICpjczsKKwkJCQlzdHJ1Y3Qgc3ltYm9sICpkczsKKworCQkJCWNzID0gcHJvcF9nZXRfc3ltYm9sKHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKSk7CisJCQkJZHMgPSBzeW1fY2hvaWNlX2RlZmF1bHQoY3MpOworCQkJCWlmIChzeW0gPT0gZHMpIHsKKwkJCQkJaWYgKChzeW0tPnR5cGUgPT0gU19CT09MRUFOIHx8CisJCQkJCXN5bS0+dHlwZSA9PSBTX1RSSVNUQVRFKSAmJgorCQkJCQlzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkgPT0geWVzKQorCQkJCQkJZ290byBuZXh0X21lbnU7CisJCQkJfQorCQkJfQorCQkJY29uZl93cml0ZV9zeW1ib2woc3ltLCBzeW0tPnR5cGUsIG91dCwgdHJ1ZSk7CisJCX0KK25leHRfbWVudToKKwkJaWYgKG1lbnUtPmxpc3QgIT0gTlVMTCkgeworCQkJbWVudSA9IG1lbnUtPmxpc3Q7CisJCX0KKwkJZWxzZSBpZiAobWVudS0+bmV4dCAhPSBOVUxMKSB7CisJCQltZW51ID0gbWVudS0+bmV4dDsKKwkJfSBlbHNlIHsKKwkJCXdoaWxlICgobWVudSA9IG1lbnUtPnBhcmVudCkpIHsKKwkJCQlpZiAobWVudS0+bmV4dCAhPSBOVUxMKSB7CisJCQkJCW1lbnUgPSBtZW51LT5uZXh0OworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJZmNsb3NlKG91dCk7CisJcmV0dXJuIDA7Cit9CisKIGludCBjb25mX3dyaXRlKGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJRklMRSAqb3V0OwogCXN0cnVjdCBzeW1ib2wgKnN5bTsKIAlzdHJ1Y3QgbWVudSAqbWVudTsKIAljb25zdCBjaGFyICpiYXNlbmFtZTsKLQljaGFyIGRpcm5hbWVbMTI4XSwgdG1wbmFtZVsxMjhdLCBuZXduYW1lWzEyOF07Ci0JaW50IHR5cGUsIGw7CiAJY29uc3QgY2hhciAqc3RyOworCWNoYXIgZGlybmFtZVsxMjhdLCB0bXBuYW1lWzEyOF0sIG5ld25hbWVbMTI4XTsKKwllbnVtIHN5bWJvbF90eXBlIHR5cGU7CiAJdGltZV90IG5vdzsKIAlpbnQgdXNlX3RpbWVzdGFtcCA9IDE7CiAJY2hhciAqZW52OwpAQCAtNDg0LDUwICs2MjEsMTEgQEAKIAkJCQlpZiAobW9kdWxlc19zeW0tPmN1cnIudHJpID09IG5vKQogCQkJCQl0eXBlID0gU19CT09MRUFOOwogCQkJfQotCQkJc3dpdGNoICh0eXBlKSB7Ci0JCQljYXNlIFNfQk9PTEVBTjoKLQkJCWNhc2UgU19UUklTVEFURToKLQkJCQlzd2l0Y2ggKHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSkgewotCQkJCWNhc2Ugbm86Ci0JCQkJCWZwcmludGYob3V0LCAiIyBDT05GSUdfJXMgaXMgbm90IHNldFxuIiwgc3ltLT5uYW1lKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBtb2Q6Ci0JCQkJCWZwcmludGYob3V0LCAiQ09ORklHXyVzPW1cbiIsIHN5bS0+bmFtZSk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgeWVzOgotCQkJCQlmcHJpbnRmKG91dCwgIkNPTkZJR18lcz15XG4iLCBzeW0tPm5hbWUpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFNfU1RSSU5HOgotCQkJCXN0ciA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSk7Ci0JCQkJZnByaW50ZihvdXQsICJDT05GSUdfJXM9XCIiLCBzeW0tPm5hbWUpOwotCQkJCXdoaWxlICgxKSB7Ci0JCQkJCWwgPSBzdHJjc3BuKHN0ciwgIlwiXFwiKTsKLQkJCQkJaWYgKGwpIHsKLQkJCQkJCWZ3cml0ZShzdHIsIGwsIDEsIG91dCk7Ci0JCQkJCQlzdHIgKz0gbDsKLQkJCQkJfQotCQkJCQlpZiAoISpzdHIpCi0JCQkJCQlicmVhazsKLQkJCQkJZnByaW50ZihvdXQsICJcXCVjIiwgKnN0cisrKTsKLQkJCQl9Ci0JCQkJZnB1dHMoIlwiXG4iLCBvdXQpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBTX0hFWDoKLQkJCQlzdHIgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOwotCQkJCWlmIChzdHJbMF0gIT0gJzAnIHx8IChzdHJbMV0gIT0gJ3gnICYmIHN0clsxXSAhPSAnWCcpKSB7Ci0JCQkJCWZwcmludGYob3V0LCAiQ09ORklHXyVzPSVzXG4iLCBzeW0tPm5hbWUsIHN0cik7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgU19JTlQ6Ci0JCQkJc3RyID0gc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKTsKLQkJCQlmcHJpbnRmKG91dCwgIkNPTkZJR18lcz0lc1xuIiwgc3ltLT5uYW1lLCBzdHIpOwotCQkJCWJyZWFrOwotCQkJfQorCQkJLyogV3JpdGUgY29uZmlnIHN5bWJvbCB0byBmaWxlICovCisJCQljb25mX3dyaXRlX3N5bWJvbChzeW0sIHR5cGUsIG91dCwgdHJ1ZSk7CiAJCX0KIAotCW5leHQ6CituZXh0OgogCQlpZiAobWVudS0+bGlzdCkgewogCQkJbWVudSA9IG1lbnUtPmxpc3Q7CiAJCQljb250aW51ZTsKQEAgLTY3OSw3ICs3NzcsNyBAQAogCWNvbnN0IGNoYXIgKm5hbWU7CiAJRklMRSAqb3V0LCAqdHJpc3RhdGUsICpvdXRfaDsKIAl0aW1lX3Qgbm93OwotCWludCBpLCBsOworCWludCBpOwogCiAJc3ltX2NsZWFyX2FsbF92YWxpZCgpOwogCkBAIC03MjksNiArODI3LDExIEBACiAJCXN5bV9jYWxjX3ZhbHVlKHN5bSk7CiAJCWlmICghKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV1JJVEUpIHx8ICFzeW0tPm5hbWUpCiAJCQljb250aW51ZTsKKworCQkvKiB3cml0ZSBzeW1ib2wgdG8gY29uZmlnIGZpbGUgKi8KKwkJY29uZl93cml0ZV9zeW1ib2woc3ltLCBzeW0tPnR5cGUsIG91dCwgZmFsc2UpOworCisJCS8qIHVwZGF0ZSBhdXRvY29uZiBhbmQgdHJpc3RhdGUgZmlsZXMgKi8KIAkJc3dpdGNoIChzeW0tPnR5cGUpIHsKIAkJY2FzZSBTX0JPT0xFQU46CiAJCWNhc2UgU19UUklTVEFURToKQEAgLTczNiwxMiArODM5LDEwIEBACiAJCQljYXNlIG5vOgogCQkJCWJyZWFrOwogCQkJY2FzZSBtb2Q6Ci0JCQkJZnByaW50ZihvdXQsICJDT05GSUdfJXM9bVxuIiwgc3ltLT5uYW1lKTsKIAkJCQlmcHJpbnRmKHRyaXN0YXRlLCAiQ09ORklHXyVzPU1cbiIsIHN5bS0+bmFtZSk7CiAJCQkJZnByaW50ZihvdXRfaCwgIiNkZWZpbmUgQ09ORklHXyVzX01PRFVMRSAxXG4iLCBzeW0tPm5hbWUpOwogCQkJCWJyZWFrOwogCQkJY2FzZSB5ZXM6Ci0JCQkJZnByaW50ZihvdXQsICJDT05GSUdfJXM9eVxuIiwgc3ltLT5uYW1lKTsKIAkJCQlpZiAoc3ltLT50eXBlID09IFNfVFJJU1RBVEUpCiAJCQkJCWZwcmludGYodHJpc3RhdGUsICJDT05GSUdfJXM9WVxuIiwKIAkJCQkJCQlzeW0tPm5hbWUpOwpAQCAtNzUwLDM1ICs4NTEsMTYgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFNfU1RSSU5HOgotCQkJc3RyID0gc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKTsKLQkJCWZwcmludGYob3V0LCAiQ09ORklHXyVzPVwiIiwgc3ltLT5uYW1lKTsKLQkJCWZwcmludGYob3V0X2gsICIjZGVmaW5lIENPTkZJR18lcyBcIiIsIHN5bS0+bmFtZSk7Ci0JCQl3aGlsZSAoMSkgewotCQkJCWwgPSBzdHJjc3BuKHN0ciwgIlwiXFwiKTsKLQkJCQlpZiAobCkgewotCQkJCQlmd3JpdGUoc3RyLCBsLCAxLCBvdXQpOwotCQkJCQlmd3JpdGUoc3RyLCBsLCAxLCBvdXRfaCk7Ci0JCQkJCXN0ciArPSBsOwotCQkJCX0KLQkJCQlpZiAoISpzdHIpCi0JCQkJCWJyZWFrOwotCQkJCWZwcmludGYob3V0LCAiXFwlYyIsICpzdHIpOwotCQkJCWZwcmludGYob3V0X2gsICJcXCVjIiwgKnN0cik7Ci0JCQkJc3RyKys7Ci0JCQl9Ci0JCQlmcHV0cygiXCJcbiIsIG91dCk7Ci0JCQlmcHV0cygiXCJcbiIsIG91dF9oKTsKKwkJCWNvbmZfd3JpdGVfc3RyaW5nKHRydWUsIHN5bS0+bmFtZSwgc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSwgb3V0X2gpOwogCQkJYnJlYWs7CiAJCWNhc2UgU19IRVg6CiAJCQlzdHIgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOwogCQkJaWYgKHN0clswXSAhPSAnMCcgfHwgKHN0clsxXSAhPSAneCcgJiYgc3RyWzFdICE9ICdYJykpIHsKLQkJCQlmcHJpbnRmKG91dCwgIkNPTkZJR18lcz0lc1xuIiwgc3ltLT5uYW1lLCBzdHIpOwogCQkJCWZwcmludGYob3V0X2gsICIjZGVmaW5lIENPTkZJR18lcyAweCVzXG4iLCBzeW0tPm5hbWUsIHN0cik7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCWNhc2UgU19JTlQ6CiAJCQlzdHIgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOwotCQkJZnByaW50ZihvdXQsICJDT05GSUdfJXM9JXNcbiIsIHN5bS0+bmFtZSwgc3RyKTsKIAkJCWZwcmludGYob3V0X2gsICIjZGVmaW5lIENPTkZJR18lcyAlc1xuIiwgc3ltLT5uYW1lLCBzdHIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC04NjIsNyArOTQ0LDggQEAKIAkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSBubzsKIAkJCQlicmVhazsKIAkJCWNhc2UgZGVmX3JhbmRvbToKLQkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSAodHJpc3RhdGUpKHJhbmQoKSAlIDMpOworCQkJCWNudCA9IHN5bV9nZXRfdHlwZShzeW0pID09IFNfVFJJU1RBVEUgPyAzIDogMjsKKwkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSAodHJpc3RhdGUpKHJhbmQoKSAlIGNudCk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2V4cHIuYyBiL3NjcmlwdHMva2NvbmZpZy9leHByLmMKaW5kZXggZDgzZjIzMi4uOGYxOGUzNyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2V4cHIuYworKysgYi9zY3JpcHRzL2tjb25maWcvZXhwci5jCkBAIC0xMTIxLDcgKzExMjEsNyBAQAogCX0KIAogCXN0cl9hcHBlbmQoZ3MsIHN0cik7Ci0JaWYgKHN5bSkKKwlpZiAoc3ltICYmIHN5bS0+dHlwZSAhPSBTX1VOS05PV04pCiAJCXN0cl9wcmludGYoZ3MsICIgWz0lc10iLCBzeW1fc3RyKTsKIH0KIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2V4cHIuaCBiL3NjcmlwdHMva2NvbmZpZy9leHByLmgKaW5kZXggODkxY2Q5Yy4uNmVlMmU0ZiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2V4cHIuaAorKysgYi9zY3JpcHRzL2tjb25maWcvZXhwci5oCkBAIC04Myw2ICs4Myw3IEBACiAJdHJpc3RhdGUgdmlzaWJsZTsKIAlpbnQgZmxhZ3M7CiAJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBleHByX3ZhbHVlIGRpcl9kZXA7CiAJc3RydWN0IGV4cHJfdmFsdWUgcmV2X2RlcDsKIH07CiAKQEAgLTEzMSw2ICsxMzIsNyBAQAogCVBfU0VMRUNULCAgIC8qIHNlbGVjdCBCQVIgKi8KIAlQX1JBTkdFLCAgICAvKiByYW5nZSA3Li4xMDAgKGZvciBhIHN5bWJvbCkgKi8KIAlQX0VOViwgICAgICAvKiB2YWx1ZSBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlICovCisJUF9TWU1CT0wsICAgLyogd2hlcmUgYSBzeW1ib2wgaXMgZGVmaW5lZCAqLwogfTsKIAogc3RydWN0IHByb3BlcnR5IHsKQEAgLTE2Myw2ICsxNjUsNyBAQAogCXN0cnVjdCBzeW1ib2wgKnN5bTsKIAlzdHJ1Y3QgcHJvcGVydHkgKnByb21wdDsKIAlzdHJ1Y3QgZXhwciAqZGVwOworCXN0cnVjdCBleHByICpkaXJfZGVwOwogCXVuc2lnbmVkIGludCBmbGFnczsKIAljaGFyICpoZWxwOwogCXN0cnVjdCBmaWxlICpmaWxlOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2djb25mLmMgYi9zY3JpcHRzL2tjb25maWcvZ2NvbmYuYwppbmRleCBiZWYxMDQxLi5kNjY5ODgyIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvZ2NvbmYuYworKysgYi9zY3JpcHRzL2tjb25maWcvZ2NvbmYuYwpAQCAtMTExNCw3ICsxMTE0LDcgQEAKIAogCXJvd1tDT0xfT1BUSU9OXSA9CiAJICAgIGdfc3RyZHVwX3ByaW50ZigiJXMgJXMiLCBfKG1lbnVfZ2V0X3Byb21wdChtZW51KSksCi0JCQkgICAgc3ltICYmIHN5bV9oYXNfdmFsdWUoc3ltKSA/ICIoTkVXKSIgOiAiIik7CisJCQkgICAgc3ltICYmICFzeW1faGFzX3ZhbHVlKHN5bSkgPyAiKE5FVykiIDogIiIpOwogCiAJaWYgKG9wdF9tb2RlID09IE9QVF9BTEwgJiYgIW1lbnVfaXNfdmlzaWJsZShtZW51KSkKIAkJcm93W0NPTF9DT0xPUl0gPSBnX3N0cmR1cCgiRGFya0dyYXkiKTsKQEAgLTEzNDMsNyArMTM0Myw4IEBACiAjZW5kaWYKIAogCQlpZiAoKG9wdF9tb2RlID09IE9QVF9OT1JNQUwgJiYgIW1lbnVfaXNfdmlzaWJsZShjaGlsZDEpKSB8fAotCQkgICAgKG9wdF9tb2RlID09IE9QVF9QUk9NUFQgJiYgIW1lbnVfaGFzX3Byb21wdChjaGlsZDEpKSkgeworCQkgICAgKG9wdF9tb2RlID09IE9QVF9QUk9NUFQgJiYgIW1lbnVfaGFzX3Byb21wdChjaGlsZDEpKSB8fAorCQkgICAgKG9wdF9tb2RlID09IE9QVF9BTEwgICAgJiYgIW1lbnVfZ2V0X3Byb21wdChjaGlsZDEpKSkgewogCiAJCQkvKiByZW1vdmUgbm9kZSAqLwogCQkJaWYgKGd0a3RyZWVfaXRlcl9maW5kX25vZGUoZHN0LCBtZW51MSkgIT0gTlVMTCkgewpAQCAtMTQyNSw3ICsxNDI2LDcgQEAKIAogCQlpZiAoKG9wdF9tb2RlID09IE9QVF9OT1JNQUwgJiYgbWVudV9pc192aXNpYmxlKGNoaWxkKSkgfHwKIAkJICAgIChvcHRfbW9kZSA9PSBPUFRfUFJPTVBUICYmIG1lbnVfaGFzX3Byb21wdChjaGlsZCkpIHx8Ci0JCSAgICAob3B0X21vZGUgPT0gT1BUX0FMTCkpCisJCSAgICAob3B0X21vZGUgPT0gT1BUX0FMTCAgICAmJiBtZW51X2dldF9wcm9tcHQoY2hpbGQpKSkKIAkJCXBsYWNlX25vZGUoY2hpbGQsIGZpbGxfcm93KGNoaWxkKSk7CiAjaWZkZWYgREVCVUcKIAkJcHJpbnRmKCIlKmMlczogIiwgaW5kZW50LCAnICcsIG1lbnVfZ2V0X3Byb21wdChjaGlsZCkpOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2xrYy5oIGIvc2NyaXB0cy9rY29uZmlnL2xrYy5oCmluZGV4IGNlNjU0OWMuLjc2ZGIwNjUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9sa2MuaAorKysgYi9zY3JpcHRzL2tjb25maWcvbGtjLmgKQEAgLTEyNiw2ICsxMjYsOCBAQAogdm9pZCBzeW1fY2xlYXJfYWxsX3ZhbGlkKHZvaWQpOwogdm9pZCBzeW1fc2V0X2FsbF9jaGFuZ2VkKHZvaWQpOwogdm9pZCBzeW1fc2V0X2NoYW5nZWQoc3RydWN0IHN5bWJvbCAqc3ltKTsKK3N0cnVjdCBzeW1ib2wgKnN5bV9jaG9pY2VfZGVmYXVsdChzdHJ1Y3Qgc3ltYm9sICpzeW0pOworY29uc3QgY2hhciAqc3ltX2dldF9zdHJpbmdfZGVmYXVsdChzdHJ1Y3Qgc3ltYm9sICpzeW0pOwogc3RydWN0IHN5bWJvbCAqc3ltX2NoZWNrX2RlcHMoc3RydWN0IHN5bWJvbCAqc3ltKTsKIHN0cnVjdCBwcm9wZXJ0eSAqcHJvcF9hbGxvYyhlbnVtIHByb3BfdHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pOwogc3RydWN0IHN5bWJvbCAqcHJvcF9nZXRfc3ltYm9sKHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCk7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvbGtjX3Byb3RvLmggYi9zY3JpcHRzL2tjb25maWcvbGtjX3Byb3RvLmgKaW5kZXggN2NhZGNhZC4uOWE5NDhjOSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2xrY19wcm90by5oCisrKyBiL3NjcmlwdHMva2NvbmZpZy9sa2NfcHJvdG8uaApAQCAtMyw2ICszLDcgQEAKIFAoY29uZl9wYXJzZSx2b2lkLChjb25zdCBjaGFyICpuYW1lKSk7CiBQKGNvbmZfcmVhZCxpbnQsKGNvbnN0IGNoYXIgKm5hbWUpKTsKIFAoY29uZl9yZWFkX3NpbXBsZSxpbnQsKGNvbnN0IGNoYXIgKm5hbWUsIGludCkpOworUChjb25mX3dyaXRlX2RlZmNvbmZpZyxpbnQsKGNvbnN0IGNoYXIgKm5hbWUpKTsKIFAoY29uZl93cml0ZSxpbnQsKGNvbnN0IGNoYXIgKm5hbWUpKTsKIFAoY29uZl93cml0ZV9hdXRvY29uZixpbnQsKHZvaWQpKTsKIFAoY29uZl9nZXRfY2hhbmdlZCxib29sLCh2b2lkKSk7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvY2hlY2tsaXN0LmMgYi9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvY2hlY2tsaXN0LmMKaW5kZXggYmNjNmYxOS4uYTJlYjgwZiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrbGlzdC5jCisrKyBiL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9jaGVja2xpc3QuYwpAQCAtMzEsNiArMzEsMTAgQEAKIHN0YXRpYyB2b2lkIHByaW50X2l0ZW0oV0lORE9XICogd2luLCBpbnQgY2hvaWNlLCBpbnQgc2VsZWN0ZWQpCiB7CiAJaW50IGk7CisJY2hhciAqbGlzdF9pdGVtID0gbWFsbG9jKGxpc3Rfd2lkdGggKyAxKTsKKworCXN0cm5jcHkobGlzdF9pdGVtLCBpdGVtX3N0cigpLCBsaXN0X3dpZHRoIC0gaXRlbV94KTsKKwlsaXN0X2l0ZW1bbGlzdF93aWR0aCAtIGl0ZW1feF0gPSAnXDAnOwogCiAJLyogQ2xlYXIgJ3Jlc2lkdWUnIG9mIGxhc3QgaXRlbSAqLwogCXdhdHRyc2V0KHdpbiwgZGxnLm1lbnVib3guYXRyKTsKQEAgLTQ1LDEzICs0OSwxNCBAQAogCQl3cHJpbnR3KHdpbiwgIiglYykiLCBpdGVtX2lzX3RhZygnWCcpID8gJ1gnIDogJyAnKTsKIAogCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcudGFnX3NlbGVjdGVkLmF0ciA6IGRsZy50YWcuYXRyKTsKLQltdndhZGRjaCh3aW4sIGNob2ljZSwgaXRlbV94LCBpdGVtX3N0cigpWzBdKTsKKwltdndhZGRjaCh3aW4sIGNob2ljZSwgaXRlbV94LCBsaXN0X2l0ZW1bMF0pOwogCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcuaXRlbV9zZWxlY3RlZC5hdHIgOiBkbGcuaXRlbS5hdHIpOwotCXdhZGRzdHIod2luLCAoY2hhciAqKWl0ZW1fc3RyKCkgKyAxKTsKKwl3YWRkc3RyKHdpbiwgbGlzdF9pdGVtICsgMSk7CiAJaWYgKHNlbGVjdGVkKSB7CiAJCXdtb3ZlKHdpbiwgY2hvaWNlLCBjaGVja194ICsgMSk7CiAJCXdyZWZyZXNoKHdpbik7CiAJfQorCWZyZWUobGlzdF9pdGVtKTsKIH0KIAogLyoKQEAgLTE3NSw2ICsxODAsNyBAQAogCWNoZWNrX3ggPSAwOwogCWl0ZW1fZm9yZWFjaCgpCiAJCWNoZWNrX3ggPSBNQVgoY2hlY2tfeCwgc3RybGVuKGl0ZW1fc3RyKCkpICsgNCk7CisJY2hlY2tfeCA9IE1JTihjaGVja194LCBsaXN0X3dpZHRoKTsKIAogCWNoZWNrX3ggPSAobGlzdF93aWR0aCAtIGNoZWNrX3gpIC8gMjsKIAlpdGVtX3ggPSBjaGVja194ICsgNDsKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9tY29uZi5jIGIvc2NyaXB0cy9rY29uZmlnL21jb25mLmMKaW5kZXggMmM4M2QzMi4uZDJmNmUwNSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL21jb25mLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL21jb25mLmMKQEAgLTc0LDcgKzc0LDcgQEAKICJcbiIKICIgICBTaG9ydGN1dDogUHJlc3MgPEg+IG9yIDw/Pi5cbiIKICJcbiIKLSJvICBUbyBzaG93IGhpZGRlbiBvcHRpb25zLCBwcmVzcyA8Wj4uXG4iCisibyAgVG8gdG9nZ2xlIHRoZSBkaXNwbGF5IG9mIGhpZGRlbiBvcHRpb25zLCBwcmVzcyA8Wj4uXG4iCiAiXG4iCiAiXG4iCiAiUmFkaW9saXN0cyAgKENob2ljZSBsaXN0cylcbiIKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9tZW51LmMgYi9zY3JpcHRzL2tjb25maWcvbWVudS5jCmluZGV4IDIwMzYzMmMuLjRmYjU5MDIgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9tZW51LmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL21lbnUuYwpAQCAtNTgsNiArNTgsOCBAQAogCSpsYXN0X2VudHJ5X3B0ciA9IG1lbnU7CiAJbGFzdF9lbnRyeV9wdHIgPSAmbWVudS0+bmV4dDsKIAljdXJyZW50X2VudHJ5ID0gbWVudTsKKwlpZiAoc3ltKQorCQltZW51X2FkZF9zeW1ib2woUF9TWU1CT0wsIHN5bSwgTlVMTCk7CiB9CiAKIHZvaWQgbWVudV9lbmRfZW50cnkodm9pZCkKQEAgLTEwNSw2ICsxMDcsNyBAQAogdm9pZCBtZW51X2FkZF9kZXAoc3RydWN0IGV4cHIgKmRlcCkKIHsKIAljdXJyZW50X2VudHJ5LT5kZXAgPSBleHByX2FsbG9jX2FuZChjdXJyZW50X2VudHJ5LT5kZXAsIG1lbnVfY2hlY2tfZGVwKGRlcCkpOworCWN1cnJlbnRfZW50cnktPmRpcl9kZXAgPSBjdXJyZW50X2VudHJ5LT5kZXA7CiB9CiAKIHZvaWQgbWVudV9zZXRfdHlwZShpbnQgdHlwZSkKQEAgLTI4OCw2ICsyOTEsMTAgQEAKIAkJZm9yIChtZW51ID0gcGFyZW50LT5saXN0OyBtZW51OyBtZW51ID0gbWVudS0+bmV4dCkKIAkJCW1lbnVfZmluYWxpemUobWVudSk7CiAJfSBlbHNlIGlmIChzeW0pIHsKKwkJLyogaWdub3JlIGluaGVyaXRlZCBkZXBlbmRlbmNpZXMgZm9yIGRpcl9kZXAgKi8KKwkJc3ltLT5kaXJfZGVwLmV4cHIgPSBleHByX3RyYW5zZm9ybShleHByX2NvcHkocGFyZW50LT5kaXJfZGVwKSk7CisJCXN5bS0+ZGlyX2RlcC5leHByID0gZXhwcl9lbGltaW5hdGVfZHVwcyhzeW0tPmRpcl9kZXAuZXhwcik7CisKIAkJYmFzZWRlcCA9IHBhcmVudC0+cHJvbXB0ID8gcGFyZW50LT5wcm9tcHQtPnZpc2libGUuZXhwciA6IE5VTEw7CiAJCWJhc2VkZXAgPSBleHByX3RyYW5zX2NvbXBhcmUoYmFzZWRlcCwgRV9VTkVRVUFMLCAmc3ltYm9sX25vKTsKIAkJYmFzZWRlcCA9IGV4cHJfZWxpbWluYXRlX2R1cHMoZXhwcl90cmFuc2Zvcm0oYmFzZWRlcCkpOwpAQCAtNDE5LDkgKzQyNiwxMyBAQAogCWlmICghc3ltIHx8IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUobWVudS0+c3ltKSA9PSBubykKIAkJcmV0dXJuIGZhbHNlOwogCi0JZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KQotCQlpZiAobWVudV9pc192aXNpYmxlKGNoaWxkKSkKKwlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsKKwkJaWYgKG1lbnVfaXNfdmlzaWJsZShjaGlsZCkpIHsKKwkJCWlmIChzeW0pCisJCQkJc3ltLT5mbGFncyB8PSBTWU1CT0xfREVGX1VTRVI7CiAJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KIAogCXJldHVybiBmYWxzZTsKIH0KQEAgLTUwMSw5ICs1MTIsMTkgQEAKIAlib29sIGhpdDsKIAlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CiAKLQlpZiAoc3ltICYmIHN5bS0+bmFtZSkKKwlpZiAoc3ltICYmIHN5bS0+bmFtZSkgewogCQlzdHJfcHJpbnRmKHIsICJTeW1ib2w6ICVzIFs9JXNdXG4iLCBzeW0tPm5hbWUsCiAJCQkgICBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pKTsKKwkJc3RyX3ByaW50ZihyLCAiVHlwZSAgOiAlc1xuIiwgc3ltX3R5cGVfbmFtZShzeW0tPnR5cGUpKTsKKwkJaWYgKHN5bS0+dHlwZSA9PSBTX0lOVCB8fCBzeW0tPnR5cGUgPT0gU19IRVgpIHsKKwkJCXByb3AgPSBzeW1fZ2V0X3JhbmdlX3Byb3Aoc3ltKTsKKwkJCWlmIChwcm9wKSB7CisJCQkJc3RyX3ByaW50ZihyLCAiUmFuZ2UgOiAiKTsKKwkJCQlleHByX2dzdHJfcHJpbnQocHJvcC0+ZXhwciwgcik7CisJCQkJc3RyX2FwcGVuZChyLCAiXG4iKTsKKwkJCX0KKwkJfQorCX0KIAlmb3JfYWxsX3Byb21wdHMoc3ltLCBwcm9wKQogCQlnZXRfcHJvbXB0X3N0cihyLCBwcm9wKTsKIAloaXQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9uY29uZi5ndWkuYyBiL3NjcmlwdHMva2NvbmZpZy9uY29uZi5ndWkuYwppbmRleCAxMTVlZGI0Li5hOWQ5MzQ0IDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvbmNvbmYuZ3VpLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL25jb25mLmd1aS5jCkBAIC0yMjYsNyArMjI2LDcgQEAKIAkJaW50IGxlbiA9IGdldF9saW5lX2xlbmd0aChsaW5lKTsKIAkJc3RybmNweSh0bXAsIGxpbmUsIG1pbihsZW4sIHgpKTsKIAkJdG1wW2xlbl0gPSAnXDAnOwotCQltdndwcmludHcod2luLCBpLCAwLCB0bXApOworCQltdndwcmludHcod2luLCBpLCAwLCAiJXMiLCB0bXApOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3Fjb25mLmNjIGIvc2NyaXB0cy9rY29uZmlnL3Fjb25mLmNjCmluZGV4IDAwYzUxNTAuLjgyMGRmMmQgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9xY29uZi5jYworKysgYi9zY3JpcHRzL2tjb25maWcvcWNvbmYuY2MKQEAgLTU4LDExICs1OCwxMCBAQAogewogCVFWYWx1ZUxpc3Q8aW50PiByZXN1bHQ7CiAJUVN0cmluZ0xpc3QgZW50cnlMaXN0ID0gcmVhZExpc3RFbnRyeShrZXksIG9rKTsKLQlpZiAob2spIHsKLQkJUVN0cmluZ0xpc3Q6Okl0ZXJhdG9yIGl0OwotCQlmb3IgKGl0ID0gZW50cnlMaXN0LmJlZ2luKCk7IGl0ICE9IGVudHJ5TGlzdC5lbmQoKTsgKytpdCkKLQkJCXJlc3VsdC5wdXNoX2JhY2soKCppdCkudG9JbnQoKSk7Ci0JfQorCVFTdHJpbmdMaXN0OjpJdGVyYXRvciBpdDsKKworCWZvciAoaXQgPSBlbnRyeUxpc3QuYmVnaW4oKTsgaXQgIT0gZW50cnlMaXN0LmVuZCgpOyArK2l0KQorCQlyZXN1bHQucHVzaF9iYWNrKCgqaXQpLnRvSW50KCkpOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE0OSw3ICsxNDgsNyBAQAogCWNhc2UgU19UUklTVEFURToKIAkJY2hhciBjaDsKIAotCQlpZiAoIXN5bV9pc19jaGFuZ2FibGUoc3ltKSAmJiAhbGlzdC0+c2hvd0FsbCkgeworCQlpZiAoIXN5bV9pc19jaGFuZ2FibGUoc3ltKSAmJiBsaXN0LT5vcHRNb2RlID09IG5vcm1hbE9wdCkgewogCQkJc2V0UGl4bWFwKHByb21wdENvbElkeCwgMCk7CiAJCQlzZXRUZXh0KG5vQ29sSWR4LCBRU3RyaW5nOjpudWxsKTsKIAkJCXNldFRleHQobW9kQ29sSWR4LCBRU3RyaW5nOjpudWxsKTsKQEAgLTMyMCw3ICszMTksNyBAQAogCSAgc3ltYm9sWWVzUGl4KHhwbV9zeW1ib2xfeWVzKSwgc3ltYm9sTW9kUGl4KHhwbV9zeW1ib2xfbW9kKSwgc3ltYm9sTm9QaXgoeHBtX3N5bWJvbF9ubyksCiAJICBjaG9pY2VZZXNQaXgoeHBtX2Nob2ljZV95ZXMpLCBjaG9pY2VOb1BpeCh4cG1fY2hvaWNlX25vKSwKIAkgIG1lbnVQaXgoeHBtX21lbnUpLCBtZW51SW52UGl4KHhwbV9tZW51X2ludiksIG1lbnVCYWNrUGl4KHhwbV9tZW51YmFjayksIHZvaWRQaXgoeHBtX3ZvaWQpLAotCSAgc2hvd0FsbChmYWxzZSksIHNob3dOYW1lKGZhbHNlKSwgc2hvd1JhbmdlKGZhbHNlKSwgc2hvd0RhdGEoZmFsc2UpLAorCSAgc2hvd05hbWUoZmFsc2UpLCBzaG93UmFuZ2UoZmFsc2UpLCBzaG93RGF0YShmYWxzZSksIG9wdE1vZGUobm9ybWFsT3B0KSwKIAkgIHJvb3RFbnRyeSgwKSwgaGVhZGVyUG9wdXAoMCkKIHsKIAlpbnQgaTsKQEAgLTMzNywxMCArMzM2LDEwIEBACiAKIAlpZiAobmFtZSkgewogCQljb25maWdTZXR0aW5ncy0+YmVnaW5Hcm91cChuYW1lKTsKLQkJc2hvd0FsbCA9IGNvbmZpZ1NldHRpbmdzLT5yZWFkQm9vbEVudHJ5KCIvc2hvd0FsbCIsIGZhbHNlKTsKIAkJc2hvd05hbWUgPSBjb25maWdTZXR0aW5ncy0+cmVhZEJvb2xFbnRyeSgiL3Nob3dOYW1lIiwgZmFsc2UpOwogCQlzaG93UmFuZ2UgPSBjb25maWdTZXR0aW5ncy0+cmVhZEJvb2xFbnRyeSgiL3Nob3dSYW5nZSIsIGZhbHNlKTsKIAkJc2hvd0RhdGEgPSBjb25maWdTZXR0aW5ncy0+cmVhZEJvb2xFbnRyeSgiL3Nob3dEYXRhIiwgZmFsc2UpOworCQlvcHRNb2RlID0gKGVudW0gb3B0aW9uTW9kZSljb25maWdTZXR0aW5ncy0+cmVhZE51bUVudHJ5KCIvb3B0aW9uTW9kZSIsIGZhbHNlKTsKIAkJY29uZmlnU2V0dGluZ3MtPmVuZEdyb3VwKCk7CiAJCWNvbm5lY3QoY29uZmlnQXBwLCBTSUdOQUwoYWJvdXRUb1F1aXQoKSksIFNMT1Qoc2F2ZVNldHRpbmdzKCkpKTsKIAl9CkBAIC0zNTIsNiArMzUxLDE3IEBACiAJcmVpbml0KCk7CiB9CiAKK2Jvb2wgQ29uZmlnTGlzdDo6bWVudVNraXAoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJaWYgKG9wdE1vZGUgPT0gbm9ybWFsT3B0ICYmIG1lbnVfaXNfdmlzaWJsZShtZW51KSkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChvcHRNb2RlID09IHByb21wdE9wdCAmJiBtZW51X2hhc19wcm9tcHQobWVudSkpCisJCXJldHVybiBmYWxzZTsKKwlpZiAob3B0TW9kZSA9PSBhbGxPcHQpCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBDb25maWdMaXN0OjpyZWluaXQodm9pZCkKIHsKIAlyZW1vdmVDb2x1bW4oZGF0YUNvbElkeCk7CkBAIC0zODAsNyArMzkwLDcgQEAKIAkJY29uZmlnU2V0dGluZ3MtPndyaXRlRW50cnkoIi9zaG93TmFtZSIsIHNob3dOYW1lKTsKIAkJY29uZmlnU2V0dGluZ3MtPndyaXRlRW50cnkoIi9zaG93UmFuZ2UiLCBzaG93UmFuZ2UpOwogCQljb25maWdTZXR0aW5ncy0+d3JpdGVFbnRyeSgiL3Nob3dEYXRhIiwgc2hvd0RhdGEpOwotCQljb25maWdTZXR0aW5ncy0+d3JpdGVFbnRyeSgiL3Nob3dBbGwiLCBzaG93QWxsKTsKKwkJY29uZmlnU2V0dGluZ3MtPndyaXRlRW50cnkoIi9vcHRpb25Nb2RlIiwgKGludClvcHRNb2RlKTsKIAkJY29uZmlnU2V0dGluZ3MtPmVuZEdyb3VwKCk7CiAJfQogfQpAQCAtNjA2LDcgKzYxNiw3IEBACiAJCX0KIAogCQl2aXNpYmxlID0gbWVudV9pc192aXNpYmxlKGNoaWxkKTsKLQkJaWYgKHNob3dBbGwgfHwgdmlzaWJsZSkgeworCQlpZiAoIW1lbnVTa2lwKGNoaWxkKSkgewogCQkJaWYgKCFjaGlsZC0+c3ltICYmICFjaGlsZC0+bGlzdCAmJiAhY2hpbGQtPnByb21wdCkKIAkJCQljb250aW51ZTsKIAkJCWlmICghaXRlbSB8fCBpdGVtLT5tZW51ICE9IGNoaWxkKQpAQCAtODM1LDcgKzg0NSwxMCBAQAogCQllLT5pZ25vcmUoKTsKIH0KIAotQ29uZmlnVmlldyogQ29uZmlnVmlldzo6dmlld0xpc3Q7CitDb25maWdWaWV3KkNvbmZpZ1ZpZXc6OnZpZXdMaXN0OworUUFjdGlvbiAqQ29uZmlnVmlldzo6c2hvd05vcm1hbEFjdGlvbjsKK1FBY3Rpb24gKkNvbmZpZ1ZpZXc6OnNob3dBbGxBY3Rpb247CitRQWN0aW9uICpDb25maWdWaWV3OjpzaG93UHJvbXB0QWN0aW9uOwogCiBDb25maWdWaWV3OjpDb25maWdWaWV3KFFXaWRnZXQqIHBhcmVudCwgY29uc3QgY2hhciAqbmFtZSkKIAk6IFBhcmVudChwYXJlbnQsIG5hbWUpCkBAIC04NjAsMTMgKzg3MywxNiBAQAogCX0KIH0KIAotdm9pZCBDb25maWdWaWV3OjpzZXRTaG93QWxsKGJvb2wgYikKK3ZvaWQgQ29uZmlnVmlldzo6c2V0T3B0aW9uTW9kZShRQWN0aW9uICphY3QpCiB7Ci0JaWYgKGxpc3QtPnNob3dBbGwgIT0gYikgewotCQlsaXN0LT5zaG93QWxsID0gYjsKLQkJbGlzdC0+dXBkYXRlTGlzdEFsbCgpOwotCQllbWl0IHNob3dBbGxDaGFuZ2VkKGIpOwotCX0KKwlpZiAoYWN0ID09IHNob3dOb3JtYWxBY3Rpb24pCisJCWxpc3QtPm9wdE1vZGUgPSBub3JtYWxPcHQ7CisJZWxzZSBpZiAoYWN0ID09IHNob3dBbGxBY3Rpb24pCisJCWxpc3QtPm9wdE1vZGUgPSBhbGxPcHQ7CisJZWxzZQorCQlsaXN0LT5vcHRNb2RlID0gcHJvbXB0T3B0OworCisJbGlzdC0+dXBkYXRlTGlzdEFsbCgpOwogfQogCiB2b2lkIENvbmZpZ1ZpZXc6OnNldFNob3dOYW1lKGJvb2wgYikKQEAgLTk2NCwzNCArOTgwLDYgQEAKIAkJbWVudUluZm8oKTsKIH0KIAotdm9pZCBDb25maWdJbmZvVmlldzo6c2V0U291cmNlKGNvbnN0IFFTdHJpbmcmIG5hbWUpCi17Ci0JY29uc3QgY2hhciAqcCA9IG5hbWUubGF0aW4xKCk7Ci0KLQltZW51ID0gTlVMTDsKLQlzeW0gPSBOVUxMOwotCi0Jc3dpdGNoIChwWzBdKSB7Ci0JY2FzZSAnbSc6Ci0JCXN0cnVjdCBtZW51ICptOwotCi0JCWlmIChzc2NhbmYocCwgIm0lcCIsICZtKSA9PSAxICYmIG1lbnUgIT0gbSkgewotCQkJbWVudSA9IG07Ci0JCQltZW51SW5mbygpOwotCQkJZW1pdCBtZW51U2VsZWN0ZWQobWVudSk7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSAncyc6Ci0JCXN0cnVjdCBzeW1ib2wgKnM7Ci0KLQkJaWYgKHNzY2FuZihwLCAicyVwIiwgJnMpID09IDEgJiYgc3ltICE9IHMpIHsKLQkJCXN5bSA9IHM7Ci0JCQlzeW1ib2xJbmZvKCk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotfQotCiB2b2lkIENvbmZpZ0luZm9WaWV3OjpzeW1ib2xJbmZvKHZvaWQpCiB7CiAJUVN0cmluZyBzdHI7CkBAIC0xMzQ5LDExICsxMzM3LDI0IEBACiAJICBjb25uZWN0KHNob3dEYXRhQWN0aW9uLCBTSUdOQUwodG9nZ2xlZChib29sKSksIGNvbmZpZ1ZpZXcsIFNMT1Qoc2V0U2hvd0RhdGEoYm9vbCkpKTsKIAkgIGNvbm5lY3QoY29uZmlnVmlldywgU0lHTkFMKHNob3dEYXRhQ2hhbmdlZChib29sKSksIHNob3dEYXRhQWN0aW9uLCBTTE9UKHNldE9uKGJvb2wpKSk7CiAJICBzaG93RGF0YUFjdGlvbi0+c2V0T24oY29uZmlnTGlzdC0+c2hvd0RhdGEpOwotCVFBY3Rpb24gKnNob3dBbGxBY3Rpb24gPSBuZXcgUUFjdGlvbihOVUxMLCBfKCJTaG93IEFsbCBPcHRpb25zIiksIDAsIHRoaXMpOwotCSAgc2hvd0FsbEFjdGlvbi0+c2V0VG9nZ2xlQWN0aW9uKFRSVUUpOwotCSAgY29ubmVjdChzaG93QWxsQWN0aW9uLCBTSUdOQUwodG9nZ2xlZChib29sKSksIGNvbmZpZ1ZpZXcsIFNMT1Qoc2V0U2hvd0FsbChib29sKSkpOwotCSAgY29ubmVjdChzaG93QWxsQWN0aW9uLCBTSUdOQUwodG9nZ2xlZChib29sKSksIG1lbnVWaWV3LCBTTE9UKHNldFNob3dBbGwoYm9vbCkpKTsKLQkgIHNob3dBbGxBY3Rpb24tPnNldE9uKGNvbmZpZ0xpc3QtPnNob3dBbGwpOworCisJUUFjdGlvbkdyb3VwICpvcHRHcm91cCA9IG5ldyBRQWN0aW9uR3JvdXAodGhpcyk7CisJb3B0R3JvdXAtPnNldEV4Y2x1c2l2ZShUUlVFKTsKKwljb25uZWN0KG9wdEdyb3VwLCBTSUdOQUwoc2VsZWN0ZWQoUUFjdGlvbiAqKSksIGNvbmZpZ1ZpZXcsCisJCVNMT1Qoc2V0T3B0aW9uTW9kZShRQWN0aW9uICopKSk7CisJY29ubmVjdChvcHRHcm91cCwgU0lHTkFMKHNlbGVjdGVkKFFBY3Rpb24gKikpLCBtZW51VmlldywKKwkJU0xPVChzZXRPcHRpb25Nb2RlKFFBY3Rpb24gKikpKTsKKworCWNvbmZpZ1ZpZXctPnNob3dOb3JtYWxBY3Rpb24gPSBuZXcgUUFjdGlvbihOVUxMLCBfKCJTaG93IE5vcm1hbCBPcHRpb25zIiksIDAsIG9wdEdyb3VwKTsKKwljb25maWdWaWV3LT5zaG93QWxsQWN0aW9uID0gbmV3IFFBY3Rpb24oTlVMTCwgXygiU2hvdyBBbGwgT3B0aW9ucyIpLCAwLCBvcHRHcm91cCk7CisJY29uZmlnVmlldy0+c2hvd1Byb21wdEFjdGlvbiA9IG5ldyBRQWN0aW9uKE5VTEwsIF8oIlNob3cgUHJvbXB0IE9wdGlvbnMiKSwgMCwgb3B0R3JvdXApOworCWNvbmZpZ1ZpZXctPnNob3dOb3JtYWxBY3Rpb24tPnNldFRvZ2dsZUFjdGlvbihUUlVFKTsKKwljb25maWdWaWV3LT5zaG93Tm9ybWFsQWN0aW9uLT5zZXRPbihjb25maWdMaXN0LT5vcHRNb2RlID09IG5vcm1hbE9wdCk7CisJY29uZmlnVmlldy0+c2hvd0FsbEFjdGlvbi0+c2V0VG9nZ2xlQWN0aW9uKFRSVUUpOworCWNvbmZpZ1ZpZXctPnNob3dBbGxBY3Rpb24tPnNldE9uKGNvbmZpZ0xpc3QtPm9wdE1vZGUgPT0gYWxsT3B0KTsKKwljb25maWdWaWV3LT5zaG93UHJvbXB0QWN0aW9uLT5zZXRUb2dnbGVBY3Rpb24oVFJVRSk7CisJY29uZmlnVmlldy0+c2hvd1Byb21wdEFjdGlvbi0+c2V0T24oY29uZmlnTGlzdC0+b3B0TW9kZSA9PSBwcm9tcHRPcHQpOworCiAJUUFjdGlvbiAqc2hvd0RlYnVnQWN0aW9uID0gbmV3IFFBY3Rpb24oTlVMTCwgXygiU2hvdyBEZWJ1ZyBJbmZvIiksIDAsIHRoaXMpOwogCSAgc2hvd0RlYnVnQWN0aW9uLT5zZXRUb2dnbGVBY3Rpb24oVFJVRSk7CiAJICBjb25uZWN0KHNob3dEZWJ1Z0FjdGlvbiwgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLCBoZWxwVGV4dCwgU0xPVChzZXRTaG93RGVidWcoYm9vbCkpKTsKQEAgLTEzOTYsNyArMTM5Nyw4IEBACiAJc2hvd1JhbmdlQWN0aW9uLT5hZGRUbyhvcHRpb25NZW51KTsKIAlzaG93RGF0YUFjdGlvbi0+YWRkVG8ob3B0aW9uTWVudSk7CiAJb3B0aW9uTWVudS0+aW5zZXJ0U2VwYXJhdG9yKCk7Ci0Jc2hvd0FsbEFjdGlvbi0+YWRkVG8ob3B0aW9uTWVudSk7CisJb3B0R3JvdXAtPmFkZFRvKG9wdGlvbk1lbnUpOworCW9wdGlvbk1lbnUtPmluc2VydFNlcGFyYXRvcigpOwogCXNob3dEZWJ1Z0FjdGlvbi0+YWRkVG8ob3B0aW9uTWVudSk7CiAKIAkvLyBjcmVhdGUgaGVscCBtZW51CkBAIC0xNDkxLDcgKzE0OTMsNyBAQAogCUNvbmZpZ0xpc3QqIGxpc3QgPSBOVUxMOwogCUNvbmZpZ0l0ZW0qIGl0ZW07CiAKLQlpZiAoIW1lbnVfaXNfdmlzaWJsZShtZW51KSAmJiAhY29uZmlnVmlldy0+c2hvd0FsbCgpKQorCWlmIChjb25maWdMaXN0LT5tZW51U2tpcChtZW51KSkKIAkJcmV0dXJuOwogCiAJc3dpdGNoIChjb25maWdMaXN0LT5tb2RlKSB7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvcWNvbmYuaCBiL3NjcmlwdHMva2NvbmZpZy9xY29uZi5oCmluZGV4IGIzYjU2NTcuLjYzNmE3NGIgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9xY29uZi5oCisrKyBiL3NjcmlwdHMva2NvbmZpZy9xY29uZi5oCkBAIC00NCw2ICs0NCw5IEBACiBlbnVtIGxpc3RNb2RlIHsKIAlzaW5nbGVNb2RlLCBtZW51TW9kZSwgc3ltYm9sTW9kZSwgZnVsbE1vZGUsIGxpc3RNb2RlCiB9OworZW51bSBvcHRpb25Nb2RlIHsKKwlub3JtYWxPcHQgPSAwLCBhbGxPcHQsIHByb21wdE9wdAorfTsKIAogY2xhc3MgQ29uZmlnTGlzdCA6IHB1YmxpYyBRTGlzdFZpZXcgewogCVFfT0JKRUNUCkBAIC0xMTUsNiArMTE4LDggQEAKIAl2b2lkIHNldEFsbE9wZW4oYm9vbCBvcGVuKTsKIAl2b2lkIHNldFBhcmVudE1lbnUodm9pZCk7CiAKKwlib29sIG1lbnVTa2lwKHN0cnVjdCBtZW51ICopOworCiAJdGVtcGxhdGUgPGNsYXNzIFA+CiAJdm9pZCB1cGRhdGVNZW51TGlzdChQKiwgc3RydWN0IG1lbnUqKTsKIApAQCAtMTI0LDggKzEyOSw5IEBACiAJUVBpeG1hcCBjaG9pY2VZZXNQaXgsIGNob2ljZU5vUGl4OwogCVFQaXhtYXAgbWVudVBpeCwgbWVudUludlBpeCwgbWVudUJhY2tQaXgsIHZvaWRQaXg7CiAKLQlib29sIHNob3dBbGwsIHNob3dOYW1lLCBzaG93UmFuZ2UsIHNob3dEYXRhOworCWJvb2wgc2hvd05hbWUsIHNob3dSYW5nZSwgc2hvd0RhdGE7CiAJZW51bSBsaXN0TW9kZSBtb2RlOworCWVudW0gb3B0aW9uTW9kZSBvcHRNb2RlOwogCXN0cnVjdCBtZW51ICpyb290RW50cnk7CiAJUUNvbG9yR3JvdXAgZGlzYWJsZWRDb2xvckdyb3VwOwogCVFDb2xvckdyb3VwIGluYWN0aXZlZENvbG9yR3JvdXA7CkBAIC0yMjIsMTcgKzIyOCwxNSBAQAogCXN0YXRpYyB2b2lkIHVwZGF0ZUxpc3QoQ29uZmlnSXRlbSogaXRlbSk7CiAJc3RhdGljIHZvaWQgdXBkYXRlTGlzdEFsbCh2b2lkKTsKIAotCWJvb2wgc2hvd0FsbCh2b2lkKSBjb25zdCB7IHJldHVybiBsaXN0LT5zaG93QWxsOyB9CiAJYm9vbCBzaG93TmFtZSh2b2lkKSBjb25zdCB7IHJldHVybiBsaXN0LT5zaG93TmFtZTsgfQogCWJvb2wgc2hvd1JhbmdlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIGxpc3QtPnNob3dSYW5nZTsgfQogCWJvb2wgc2hvd0RhdGEodm9pZCkgY29uc3QgeyByZXR1cm4gbGlzdC0+c2hvd0RhdGE7IH0KIHB1YmxpYyBzbG90czoKLQl2b2lkIHNldFNob3dBbGwoYm9vbCk7CiAJdm9pZCBzZXRTaG93TmFtZShib29sKTsKIAl2b2lkIHNldFNob3dSYW5nZShib29sKTsKIAl2b2lkIHNldFNob3dEYXRhKGJvb2wpOworCXZvaWQgc2V0T3B0aW9uTW9kZShRQWN0aW9uICopOwogc2lnbmFsczoKLQl2b2lkIHNob3dBbGxDaGFuZ2VkKGJvb2wpOwogCXZvaWQgc2hvd05hbWVDaGFuZ2VkKGJvb2wpOwogCXZvaWQgc2hvd1JhbmdlQ2hhbmdlZChib29sKTsKIAl2b2lkIHNob3dEYXRhQ2hhbmdlZChib29sKTsKQEAgLTI0Miw2ICsyNDYsMTAgQEAKIAogCXN0YXRpYyBDb25maWdWaWV3KiB2aWV3TGlzdDsKIAlDb25maWdWaWV3KiBuZXh0VmlldzsKKworCXN0YXRpYyBRQWN0aW9uICpzaG93Tm9ybWFsQWN0aW9uOworCXN0YXRpYyBRQWN0aW9uICpzaG93QWxsQWN0aW9uOworCXN0YXRpYyBRQWN0aW9uICpzaG93UHJvbXB0QWN0aW9uOwogfTsKIAogY2xhc3MgQ29uZmlnSW5mb1ZpZXcgOiBwdWJsaWMgUVRleHRCcm93c2VyIHsKQEAgLTI1NCw3ICsyNjIsNiBAQAogcHVibGljIHNsb3RzOgogCXZvaWQgc2V0SW5mbyhzdHJ1Y3QgbWVudSAqbWVudSk7CiAJdm9pZCBzYXZlU2V0dGluZ3Modm9pZCk7Ci0Jdm9pZCBzZXRTb3VyY2UoY29uc3QgUVN0cmluZyYgbmFtZSk7CiAJdm9pZCBzZXRTaG93RGVidWcoYm9vbCk7CiAKIHNpZ25hbHM6CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvc3ltYm9sLmMgYi9zY3JpcHRzL2tjb25maWcvc3ltYm9sLmMKaW5kZXggMmU3YTA0OC4uZTk1NzE4ZmUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9zeW1ib2wuYworKysgYi9zY3JpcHRzL2tjb25maWcvc3ltYm9sLmMKQEAgLTIwNSw2ICsyMDUsMTYgQEAKIAl9CiAJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkKIAkJcmV0dXJuOworCS8qIGRlZmF1bHRpbmcgdG8gInllcyIgaWYgbm8gZXhwbGljaXQgImRlcGVuZHMgb24iIGFyZSBnaXZlbiAqLworCXRyaSA9IHllczsKKwlpZiAoc3ltLT5kaXJfZGVwLmV4cHIpCisJCXRyaSA9IGV4cHJfY2FsY192YWx1ZShzeW0tPmRpcl9kZXAuZXhwcik7CisJaWYgKHRyaSA9PSBtb2QpCisJCXRyaSA9IHllczsKKwlpZiAoc3ltLT5kaXJfZGVwLnRyaSAhPSB0cmkpIHsKKwkJc3ltLT5kaXJfZGVwLnRyaSA9IHRyaTsKKwkJc3ltX3NldF9jaGFuZ2VkKHN5bSk7CisJfQogCXRyaSA9IG5vOwogCWlmIChzeW0tPnJldl9kZXAuZXhwcikKIAkJdHJpID0gZXhwcl9jYWxjX3ZhbHVlKHN5bS0+cmV2X2RlcC5leHByKTsKQEAgLTIxNiw0NCArMjI2LDYzIEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHN5bWJvbCAqc3ltX2NhbGNfY2hvaWNlKHN0cnVjdCBzeW1ib2wgKnN5bSkKKy8qCisgKiBGaW5kIHRoZSBkZWZhdWx0IHN5bWJvbCBmb3IgYSBjaG9pY2UuCisgKiBGaXJzdCB0cnkgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgY2hvaWNlIHN5bWJvbAorICogTmV4dCBsb2NhdGUgdGhlIGZpcnN0IHZpc2libGUgY2hvaWNlIHZhbHVlCisgKiBSZXR1cm4gTlVMTCBpZiBub25lIHdhcyBmb3VuZAorICovCitzdHJ1Y3Qgc3ltYm9sICpzeW1fY2hvaWNlX2RlZmF1bHQoc3RydWN0IHN5bWJvbCAqc3ltKQogewogCXN0cnVjdCBzeW1ib2wgKmRlZl9zeW07CiAJc3RydWN0IHByb3BlcnR5ICpwcm9wOwogCXN0cnVjdCBleHByICplOwogCi0JLyogaXMgdGhlIHVzZXIgY2hvaWNlIHZpc2libGU/ICovCi0JZGVmX3N5bSA9IHN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbDsKLQlpZiAoZGVmX3N5bSkgewotCQlzeW1fY2FsY192aXNpYmlsaXR5KGRlZl9zeW0pOwotCQlpZiAoZGVmX3N5bS0+dmlzaWJsZSAhPSBubykKLQkJCXJldHVybiBkZWZfc3ltOwotCX0KLQogCS8qIGFueSBvZiB0aGUgZGVmYXVsdHMgdmlzaWJsZT8gKi8KIAlmb3JfYWxsX2RlZmF1bHRzKHN5bSwgcHJvcCkgewogCQlwcm9wLT52aXNpYmxlLnRyaSA9IGV4cHJfY2FsY192YWx1ZShwcm9wLT52aXNpYmxlLmV4cHIpOwogCQlpZiAocHJvcC0+dmlzaWJsZS50cmkgPT0gbm8pCiAJCQljb250aW51ZTsKIAkJZGVmX3N5bSA9IHByb3BfZ2V0X3N5bWJvbChwcm9wKTsKLQkJc3ltX2NhbGNfdmlzaWJpbGl0eShkZWZfc3ltKTsKIAkJaWYgKGRlZl9zeW0tPnZpc2libGUgIT0gbm8pCiAJCQlyZXR1cm4gZGVmX3N5bTsKIAl9CiAKIAkvKiBqdXN0IGdldCB0aGUgZmlyc3QgdmlzaWJsZSB2YWx1ZSAqLwogCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5bSk7Ci0JZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBlLCBkZWZfc3ltKSB7Ci0JCXN5bV9jYWxjX3Zpc2liaWxpdHkoZGVmX3N5bSk7CisJZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBlLCBkZWZfc3ltKQogCQlpZiAoZGVmX3N5bS0+dmlzaWJsZSAhPSBubykKIAkJCXJldHVybiBkZWZfc3ltOwotCX0KIAotCS8qIG5vIGNob2ljZT8gcmVzZXQgdHJpc3RhdGUgdmFsdWUgKi8KLQlzeW0tPmN1cnIudHJpID0gbm87CisJLyogZmFpbGVkIHRvIGxvY2F0ZSBhbnkgZGVmYXVsdHMgKi8KIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHN0cnVjdCBzeW1ib2wgKnN5bV9jYWxjX2Nob2ljZShzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3RydWN0IHN5bWJvbCAqZGVmX3N5bTsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IGV4cHIgKmU7CisKKwkvKiBmaXJzdCBjYWxjdWxhdGUgYWxsIGNob2ljZSB2YWx1ZXMnIHZpc2liaWxpdGllcyAqLworCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5bSk7CisJZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBlLCBkZWZfc3ltKQorCQlzeW1fY2FsY192aXNpYmlsaXR5KGRlZl9zeW0pOworCisJLyogaXMgdGhlIHVzZXIgY2hvaWNlIHZpc2libGU/ICovCisJZGVmX3N5bSA9IHN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbDsKKwlpZiAoZGVmX3N5bSAmJiBkZWZfc3ltLT52aXNpYmxlICE9IG5vKQorCQlyZXR1cm4gZGVmX3N5bTsKKworCWRlZl9zeW0gPSBzeW1fY2hvaWNlX2RlZmF1bHQoc3ltKTsKKworCWlmIChkZWZfc3ltID09IE5VTEwpCisJCS8qIG5vIGNob2ljZT8gcmVzZXQgdHJpc3RhdGUgdmFsdWUgKi8KKwkJc3ltLT5jdXJyLnRyaSA9IG5vOworCisJcmV0dXJuIGRlZl9zeW07Cit9CisKIHZvaWQgc3ltX2NhbGNfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKQogewogCXN0cnVjdCBzeW1ib2xfdmFsdWUgbmV3dmFsLCBvbGR2YWw7CkBAIC0zMjEsNiArMzUwLDE0IEBACiAJCQkJfQogCQkJfQogCQljYWxjX25ld3ZhbDoKKwkJCWlmIChzeW0tPmRpcl9kZXAudHJpID09IG5vICYmIHN5bS0+cmV2X2RlcC50cmkgIT0gbm8pIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIndhcm5pbmc6ICgiKTsKKwkJCQlleHByX2ZwcmludChzeW0tPnJldl9kZXAuZXhwciwgc3RkZXJyKTsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIikgc2VsZWN0cyAlcyB3aGljaCBoYXMgdW5tZXQgZGlyZWN0IGRlcGVuZGVuY2llcyAoIiwKKwkJCQkJc3ltLT5uYW1lKTsKKwkJCQlleHByX2ZwcmludChzeW0tPmRpcl9kZXAuZXhwciwgc3RkZXJyKTsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIilcbiIpOworCQkJfQogCQkJbmV3dmFsLnRyaSA9IEVYUFJfT1IobmV3dmFsLnRyaSwgc3ltLT5yZXZfZGVwLnRyaSk7CiAJCX0KIAkJaWYgKG5ld3ZhbC50cmkgPT0gbW9kICYmIHN5bV9nZXRfdHlwZShzeW0pID09IFNfQk9PTEVBTikKQEAgLTM2NSwxMiArNDAyLDEzIEBACiAKIAlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKSB7CiAJCXN0cnVjdCBzeW1ib2wgKmNob2ljZV9zeW07Ci0JCWludCBmbGFncyA9IHN5bS0+ZmxhZ3MgJiAoU1lNQk9MX0NIQU5HRUQgfCBTWU1CT0xfV1JJVEUpOwogCiAJCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5bSk7CiAJCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgY2hvaWNlX3N5bSkgewotCQkJY2hvaWNlX3N5bS0+ZmxhZ3MgfD0gZmxhZ3M7Ci0JCQlpZiAoZmxhZ3MgJiBTWU1CT0xfQ0hBTkdFRCkKKwkJCWlmICgoc3ltLT5mbGFncyAmIFNZTUJPTF9XUklURSkgJiYKKwkJCSAgICBjaG9pY2Vfc3ltLT52aXNpYmxlICE9IG5vKQorCQkJCWNob2ljZV9zeW0tPmZsYWdzIHw9IFNZTUJPTF9XUklURTsKKwkJCWlmIChzeW0tPmZsYWdzICYgU1lNQk9MX0NIQU5HRUQpCiAJCQkJc3ltX3NldF9jaGFuZ2VkKGNob2ljZV9zeW0pOwogCQl9CiAJfQpAQCAtNjIzLDYgKzY2MSw4MCBAQAogCXJldHVybiB0cnVlOwogfQogCisvKgorICogRmluZCB0aGUgZGVmYXVsdCB2YWx1ZSBhc3NvY2lhdGVkIHRvIGEgc3ltYm9sLgorICogRm9yIHRyaXN0YXRlIHN5bWJvbCBoYW5kbGUgdGhlIG1vZHVsZXM9biBjYXNlCisgKiBpbiB3aGljaCBjYXNlICJtIiBiZWNvbWVzICJ5Ii4KKyAqIElmIHRoZSBzeW1ib2wgZG9lcyBub3QgaGF2ZSBhbnkgZGVmYXVsdCB0aGVuIGZhbGxiYWNrCisgKiB0byB0aGUgZml4ZWQgZGVmYXVsdCB2YWx1ZXMuCisgKi8KK2NvbnN0IGNoYXIgKnN5bV9nZXRfc3RyaW5nX2RlZmF1bHQoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3Qgc3ltYm9sICpkczsKKwljb25zdCBjaGFyICpzdHI7CisJdHJpc3RhdGUgdmFsOworCisJc3ltX2NhbGNfdmlzaWJpbGl0eShzeW0pOworCXN5bV9jYWxjX3ZhbHVlKG1vZHVsZXNfc3ltKTsKKwl2YWwgPSBzeW1ib2xfbm8uY3Vyci50cmk7CisJc3RyID0gc3ltYm9sX2VtcHR5LmN1cnIudmFsOworCisJLyogSWYgc3ltYm9sIGhhcyBhIGRlZmF1bHQgdmFsdWUgbG9vayBpdCB1cCAqLworCXByb3AgPSBzeW1fZ2V0X2RlZmF1bHRfcHJvcChzeW0pOworCWlmIChwcm9wICE9IE5VTEwpIHsKKwkJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwkJY2FzZSBTX0JPT0xFQU46CisJCWNhc2UgU19UUklTVEFURToKKwkJCS8qIFRoZSB2aXNpYmlsaXR5IGltYXkgbGltaXQgdGhlIHZhbHVlIGZyb20geWVzID0+IG1vZCAqLworCQkJdmFsID0gRVhQUl9BTkQoZXhwcl9jYWxjX3ZhbHVlKHByb3AtPmV4cHIpLCBwcm9wLT52aXNpYmxlLnRyaSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qCisJCQkgKiBUaGUgZm9sbG93aW5nIGZhaWxzIHRvIGhhbmRsZSB0aGUgc2l0dWF0aW9uCisJCQkgKiB3aGVyZSBhIGRlZmF1bHQgdmFsdWUgaXMgZnVydGhlciBsaW1pdGVkIGJ5CisJCQkgKiB0aGUgdmFsaWQgcmFuZ2UuCisJCQkgKi8KKwkJCWRzID0gcHJvcF9nZXRfc3ltYm9sKHByb3ApOworCQkJaWYgKGRzICE9IE5VTEwpIHsKKwkJCQlzeW1fY2FsY192YWx1ZShkcyk7CisJCQkJc3RyID0gKGNvbnN0IGNoYXIgKilkcy0+Y3Vyci52YWw7CisJCQl9CisJCX0KKwl9CisKKwkvKiBIYW5kbGUgc2VsZWN0IHN0YXRlbWVudHMgKi8KKwl2YWwgPSBFWFBSX09SKHZhbCwgc3ltLT5yZXZfZGVwLnRyaSk7CisKKwkvKiB0cmFuc3Bvc2UgbW9kIHRvIHllcyBpZiBtb2R1bGVzIGFyZSBub3QgZW5hYmxlZCAqLworCWlmICh2YWwgPT0gbW9kKQorCQlpZiAoIXN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSAmJiBtb2R1bGVzX3N5bS0+Y3Vyci50cmkgPT0gbm8pCisJCQl2YWwgPSB5ZXM7CisKKwkvKiB0cmFuc3Bvc2UgbW9kIHRvIHllcyBpZiB0eXBlIGlzIGJvb2wgKi8KKwlpZiAoc3ltLT50eXBlID09IFNfQk9PTEVBTiAmJiB2YWwgPT0gbW9kKQorCQl2YWwgPSB5ZXM7CisKKwlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCWNhc2UgU19CT09MRUFOOgorCWNhc2UgU19UUklTVEFURToKKwkJc3dpdGNoICh2YWwpIHsKKwkJY2FzZSBubzogcmV0dXJuICJuIjsKKwkJY2FzZSBtb2Q6IHJldHVybiAibSI7CisJCWNhc2UgeWVzOiByZXR1cm4gInkiOworCQl9CisJY2FzZSBTX0lOVDoKKwljYXNlIFNfSEVYOgorCQlyZXR1cm4gc3RyOworCWNhc2UgU19TVFJJTkc6CisJCXJldHVybiBzdHI7CisJY2FzZSBTX09USEVSOgorCWNhc2UgU19VTktOT1dOOgorCQlicmVhazsKKwl9CisJcmV0dXJuICIiOworfQorCiBjb25zdCBjaGFyICpzeW1fZ2V0X3N0cmluZ192YWx1ZShzdHJ1Y3Qgc3ltYm9sICpzeW0pCiB7CiAJdHJpc3RhdGUgdmFsOwpAQCAtNzY1LDYgKzg3NywxMTAgQEAKIAlyZXR1cm4gc3ltX2FycjsKIH0KIAorLyoKKyAqIFdoZW4gd2UgY2hlY2sgZm9yIHJlY3Vyc2l2ZSBkZXBlbmRlbmNpZXMgd2UgdXNlIGEgc3RhY2sgdG8gc2F2ZQorICogY3VycmVudCBzdGF0ZSBzbyB3ZSBjYW4gcHJpbnQgb3V0IHJlbGV2YW50IGluZm8gdG8gdXNlci4KKyAqIFRoZSBlbnRyaWVzIGFyZSBsb2NhdGVkIG9uIHRoZSBjYWxsIHN0YWNrIHNvIG5vIG5lZWQgdG8gZnJlZSBtZW1vcnkuCisgKiBOb3RlIGluc2VyKCkgcmVtb3ZlKCkgbXVzdCBhbHdheXMgbWF0Y2ggdG8gcHJvcGVybHkgY2xlYXIgdGhlIHN0YWNrLgorICovCitzdGF0aWMgc3RydWN0IGRlcF9zdGFjayB7CisJc3RydWN0IGRlcF9zdGFjayAqcHJldiwgKm5leHQ7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3QgZXhwciAqZXhwcjsKK30gKmNoZWNrX3RvcDsKKworc3RhdGljIHZvaWQgZGVwX3N0YWNrX2luc2VydChzdHJ1Y3QgZGVwX3N0YWNrICpzdGFjaywgc3RydWN0IHN5bWJvbCAqc3ltKQoreworCW1lbXNldChzdGFjaywgMCwgc2l6ZW9mKCpzdGFjaykpOworCWlmIChjaGVja190b3ApCisJCWNoZWNrX3RvcC0+bmV4dCA9IHN0YWNrOworCXN0YWNrLT5wcmV2ID0gY2hlY2tfdG9wOworCXN0YWNrLT5zeW0gPSBzeW07CisJY2hlY2tfdG9wID0gc3RhY2s7Cit9CisKK3N0YXRpYyB2b2lkIGRlcF9zdGFja19yZW1vdmUodm9pZCkKK3sKKwljaGVja190b3AgPSBjaGVja190b3AtPnByZXY7CisJaWYgKGNoZWNrX3RvcCkKKwkJY2hlY2tfdG9wLT5uZXh0ID0gTlVMTDsKK30KKworLyoKKyAqIENhbGxlZCB3aGVuIHdlIGhhdmUgZGV0ZWN0ZWQgYSByZWN1cnNpdmUgZGVwZW5kZW5jeS4KKyAqIGNoZWNrX3RvcCBwb2ludCB0byB0aGUgdG9wIG9mIHRoZSBzdGFjdCBzbyB3ZSB1c2UKKyAqIHRoZSAtPnByZXYgcG9pbnRlciB0byBsb2NhdGUgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suCisgKi8KK3N0YXRpYyB2b2lkIHN5bV9jaGVja19wcmludF9yZWN1cnNpdmUoc3RydWN0IHN5bWJvbCAqbGFzdF9zeW0pCit7CisJc3RydWN0IGRlcF9zdGFjayAqc3RhY2s7CisJc3RydWN0IHN5bWJvbCAqc3ltLCAqbmV4dF9zeW07CisJc3RydWN0IG1lbnUgKm1lbnUgPSBOVUxMOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3QgZGVwX3N0YWNrIGN2X3N0YWNrOworCisJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUobGFzdF9zeW0pKSB7CisJCWRlcF9zdGFja19pbnNlcnQoJmN2X3N0YWNrLCBsYXN0X3N5bSk7CisJCWxhc3Rfc3ltID0gcHJvcF9nZXRfc3ltYm9sKHN5bV9nZXRfY2hvaWNlX3Byb3AobGFzdF9zeW0pKTsKKwl9CisKKwlmb3IgKHN0YWNrID0gY2hlY2tfdG9wOyBzdGFjayAhPSBOVUxMOyBzdGFjayA9IHN0YWNrLT5wcmV2KQorCQlpZiAoc3RhY2stPnN5bSA9PSBsYXN0X3N5bSkKKwkJCWJyZWFrOworCWlmICghc3RhY2spIHsKKwkJZnByaW50ZihzdGRlcnIsICJ1bmV4cGVjdGVkIHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGVycm9yXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoOyBzdGFjazsgc3RhY2sgPSBzdGFjay0+bmV4dCkgeworCQlzeW0gPSBzdGFjay0+c3ltOworCQluZXh0X3N5bSA9IHN0YWNrLT5uZXh0ID8gc3RhY2stPm5leHQtPnN5bSA6IGxhc3Rfc3ltOworCQlwcm9wID0gc3RhY2stPnByb3A7CisKKwkJLyogZm9yIGNob2ljZSB2YWx1ZXMgZmluZCB0aGUgbWVudSBlbnRyeSAodXNlZCBiZWxvdykgKi8KKwkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSB8fCBzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkpIHsKKwkJCWZvciAocHJvcCA9IHN5bS0+cHJvcDsgcHJvcDsgcHJvcCA9IHByb3AtPm5leHQpIHsKKwkJCQltZW51ID0gcHJvcC0+bWVudTsKKwkJCQlpZiAocHJvcC0+bWVudSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKHN0YWNrLT5zeW0gPT0gbGFzdF9zeW0pCisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOmVycm9yOiByZWN1cnNpdmUgZGVwZW5kZW5jeSBkZXRlY3RlZCFcbiIsCisJCQkJcHJvcC0+ZmlsZS0+bmFtZSwgcHJvcC0+bGluZW5vKTsKKwkJaWYgKHN0YWNrLT5leHByKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOlx0c3ltYm9sICVzICVzIHZhbHVlIGNvbnRhaW5zICVzXG4iLAorCQkJCXByb3AtPmZpbGUtPm5hbWUsIHByb3AtPmxpbmVubywKKwkJCQlzeW0tPm5hbWUgPyBzeW0tPm5hbWUgOiAiPGNob2ljZT4iLAorCQkJCXByb3BfZ2V0X3R5cGVfbmFtZShwcm9wLT50eXBlKSwKKwkJCQluZXh0X3N5bS0+bmFtZSA/IG5leHRfc3ltLT5uYW1lIDogIjxjaG9pY2U+Iik7CisJCX0gZWxzZSBpZiAoc3RhY2stPnByb3ApIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6XHRzeW1ib2wgJXMgZGVwZW5kcyBvbiAlc1xuIiwKKwkJCQlwcm9wLT5maWxlLT5uYW1lLCBwcm9wLT5saW5lbm8sCisJCQkJc3ltLT5uYW1lID8gc3ltLT5uYW1lIDogIjxjaG9pY2U+IiwKKwkJCQluZXh0X3N5bS0+bmFtZSA/IG5leHRfc3ltLT5uYW1lIDogIjxjaG9pY2U+Iik7CisJCX0gZWxzZSBpZiAoc3ltX2lzX2Nob2ljZShzeW0pKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOlx0Y2hvaWNlICVzIGNvbnRhaW5zIHN5bWJvbCAlc1xuIiwKKwkJCQltZW51LT5maWxlLT5uYW1lLCBtZW51LT5saW5lbm8sCisJCQkJc3ltLT5uYW1lID8gc3ltLT5uYW1lIDogIjxjaG9pY2U+IiwKKwkJCQluZXh0X3N5bS0+bmFtZSA/IG5leHRfc3ltLT5uYW1lIDogIjxjaG9pY2U+Iik7CisJCX0gZWxzZSBpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOlx0c3ltYm9sICVzIGlzIHBhcnQgb2YgY2hvaWNlICVzXG4iLAorCQkJCW1lbnUtPmZpbGUtPm5hbWUsIG1lbnUtPmxpbmVubywKKwkJCQlzeW0tPm5hbWUgPyBzeW0tPm5hbWUgOiAiPGNob2ljZT4iLAorCQkJCW5leHRfc3ltLT5uYW1lID8gbmV4dF9zeW0tPm5hbWUgOiAiPGNob2ljZT4iKTsKKwkJfSBlbHNlIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6XHRzeW1ib2wgJXMgaXMgc2VsZWN0ZWQgYnkgJXNcbiIsCisJCQkJcHJvcC0+ZmlsZS0+bmFtZSwgcHJvcC0+bGluZW5vLAorCQkJCXN5bS0+bmFtZSA/IHN5bS0+bmFtZSA6ICI8Y2hvaWNlPiIsCisJCQkJbmV4dF9zeW0tPm5hbWUgPyBuZXh0X3N5bS0+bmFtZSA6ICI8Y2hvaWNlPiIpOworCQl9CisJfQorCisJaWYgKGNoZWNrX3RvcCA9PSAmY3Zfc3RhY2spCisJCWRlcF9zdGFja19yZW1vdmUoKTsKK30KIAogc3RhdGljIHN0cnVjdCBzeW1ib2wgKnN5bV9jaGVja19leHByX2RlcHMoc3RydWN0IGV4cHIgKmUpCiB7CkBAIC04MDEsMjQgKzEwMTcsMzMgQEAKIHsKIAlzdHJ1Y3Qgc3ltYm9sICpzeW0yOwogCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3QgZGVwX3N0YWNrIHN0YWNrOworCisJZGVwX3N0YWNrX2luc2VydCgmc3RhY2ssIHN5bSk7CiAKIAlzeW0yID0gc3ltX2NoZWNrX2V4cHJfZGVwcyhzeW0tPnJldl9kZXAuZXhwcik7CiAJaWYgKHN5bTIpCi0JCXJldHVybiBzeW0yOworCQlnb3RvIG91dDsKIAogCWZvciAocHJvcCA9IHN5bS0+cHJvcDsgcHJvcDsgcHJvcCA9IHByb3AtPm5leHQpIHsKIAkJaWYgKHByb3AtPnR5cGUgPT0gUF9DSE9JQ0UgfHwgcHJvcC0+dHlwZSA9PSBQX1NFTEVDVCkKIAkJCWNvbnRpbnVlOworCQlzdGFjay5wcm9wID0gcHJvcDsKIAkJc3ltMiA9IHN5bV9jaGVja19leHByX2RlcHMocHJvcC0+dmlzaWJsZS5leHByKTsKIAkJaWYgKHN5bTIpCiAJCQlicmVhazsKIAkJaWYgKHByb3AtPnR5cGUgIT0gUF9ERUZBVUxUIHx8IHN5bV9pc19jaG9pY2Uoc3ltKSkKIAkJCWNvbnRpbnVlOworCQlzdGFjay5leHByID0gcHJvcC0+ZXhwcjsKIAkJc3ltMiA9IHN5bV9jaGVja19leHByX2RlcHMocHJvcC0+ZXhwcik7CiAJCWlmIChzeW0yKQogCQkJYnJlYWs7CisJCXN0YWNrLmV4cHIgPSBOVUxMOwogCX0KIAorb3V0OgorCWRlcF9zdGFja19yZW1vdmUoKTsKKwogCXJldHVybiBzeW0yOwogfQogCkBAIC04MjcsNiArMTA1Miw5IEBACiAJc3RydWN0IHN5bWJvbCAqc3ltLCAqc3ltMjsKIAlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CiAJc3RydWN0IGV4cHIgKmU7CisJc3RydWN0IGRlcF9zdGFjayBzdGFjazsKKworCWRlcF9zdGFja19pbnNlcnQoJnN0YWNrLCBjaG9pY2UpOwogCiAJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3AoY2hvaWNlKTsKIAlleHByX2xpc3RfZm9yX2VhY2hfc3ltKHByb3AtPmV4cHIsIGUsIHN5bSkKQEAgLTg0MCwxMCArMTA2OCw4IEBACiAKIAlleHByX2xpc3RfZm9yX2VhY2hfc3ltKHByb3AtPmV4cHIsIGUsIHN5bSkgewogCQlzeW0yID0gc3ltX2NoZWNrX3N5bV9kZXBzKHN5bSk7Ci0JCWlmIChzeW0yKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIiAtPiAlcyIsIHN5bS0+bmFtZSk7CisJCWlmIChzeW0yKQogCQkJYnJlYWs7Ci0JCX0KIAl9CiBvdXQ6CiAJZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBlLCBzeW0pCkBAIC04NTMsNiArMTA3OSw4IEBACiAJICAgIHByb3BfZ2V0X3N5bWJvbChzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5bTIpKSA9PSBjaG9pY2UpCiAJCXN5bTIgPSBjaG9pY2U7CiAKKwlkZXBfc3RhY2tfcmVtb3ZlKCk7CisKIAlyZXR1cm4gc3ltMjsKIH0KIApAQCAtODYyLDE4ICsxMDkwLDIwIEBACiAJc3RydWN0IHByb3BlcnR5ICpwcm9wOwogCiAJaWYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hFQ0spIHsKLQkJZnByaW50ZihzdGRlcnIsICIlczolZDplcnJvcjogZm91bmQgcmVjdXJzaXZlIGRlcGVuZGVuY3k6ICVzIiwKLQkJICAgICAgICBzeW0tPnByb3AtPmZpbGUtPm5hbWUsIHN5bS0+cHJvcC0+bGluZW5vLAotCQkJc3ltLT5uYW1lID8gc3ltLT5uYW1lIDogIjxjaG9pY2U+Iik7CisJCXN5bV9jaGVja19wcmludF9yZWN1cnNpdmUoc3ltKTsKIAkJcmV0dXJuIHN5bTsKIAl9CiAJaWYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hFQ0tFRCkKIAkJcmV0dXJuIE5VTEw7CiAKIAlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pKSB7CisJCXN0cnVjdCBkZXBfc3RhY2sgc3RhY2s7CisKIAkJLyogZm9yIGNob2ljZSBncm91cHMgc3RhcnQgdGhlIGNoZWNrIHdpdGggbWFpbiBjaG9pY2Ugc3ltYm9sICovCisJCWRlcF9zdGFja19pbnNlcnQoJnN0YWNrLCBzeW0pOwogCQlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pOwogCQlzeW0yID0gc3ltX2NoZWNrX2RlcHMocHJvcF9nZXRfc3ltYm9sKHByb3ApKTsKKwkJZGVwX3N0YWNrX3JlbW92ZSgpOwogCX0gZWxzZSBpZiAoc3ltX2lzX2Nob2ljZShzeW0pKSB7CiAJCXN5bTIgPSBzeW1fY2hlY2tfY2hvaWNlX2RlcHMoc3ltKTsKIAl9IGVsc2UgewpAQCAtODgyLDE0ICsxMTEyLDggQEAKIAkJc3ltLT5mbGFncyAmPSB+U1lNQk9MX0NIRUNLOwogCX0KIAotCWlmIChzeW0yKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiIC0+ICVzIiwgc3ltLT5uYW1lID8gc3ltLT5uYW1lIDogIjxjaG9pY2U+Iik7Ci0JCWlmIChzeW0yID09IHN5bSkgewotCQkJZnByaW50ZihzdGRlcnIsICJcbiIpOwotCQkJemNvbmZuZXJycysrOwotCQkJc3ltMiA9IE5VTEw7Ci0JCX0KLQl9CisJaWYgKHN5bTIgJiYgc3ltMiA9PSBzeW0pCisJCXN5bTIgPSBOVUxMOwogCiAJcmV0dXJuIHN5bTI7CiB9CkBAIC05NDMsNiArMTE2Nyw4IEBACiAJCXJldHVybiAic2VsZWN0IjsKIAljYXNlIFBfUkFOR0U6CiAJCXJldHVybiAicmFuZ2UiOworCWNhc2UgUF9TWU1CT0w6CisJCXJldHVybiAic3ltYm9sIjsKIAljYXNlIFBfVU5LTk9XTjoKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jIGIvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCmluZGV4IDU3NThhYWIuLjg4ZjNmMDcgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYworKysgYi9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKQEAgLTg4NCwxNiArODg0LDE2IEBACiAJY2hhciAqemVyb3MgPSBOVUxMOwogCiAJLyogV2UncmUgbG9va2luZyBmb3IgYSBzZWN0aW9uIHJlbGF0aXZlIHN5bWJvbCAqLwotCWlmICghc3ltLT5zdF9zaG5keCB8fCBzeW0tPnN0X3NobmR4ID49IGluZm8tPmhkci0+ZV9zaG51bSkKKwlpZiAoIXN5bS0+c3Rfc2huZHggfHwgZ2V0X3NlY2luZGV4KGluZm8sIHN5bSkgPj0gaW5mby0+bnVtX3NlY3Rpb25zKQogCQlyZXR1cm47CiAKIAkvKiBIYW5kbGUgYWxsLU5VTEwgc3ltYm9scyBhbGxvY2F0ZWQgaW50byAuYnNzICovCi0JaWYgKGluZm8tPnNlY2hkcnNbc3ltLT5zdF9zaG5keF0uc2hfdHlwZSAmIFNIVF9OT0JJVFMpIHsKKwlpZiAoaW5mby0+c2VjaGRyc1tnZXRfc2VjaW5kZXgoaW5mbywgc3ltKV0uc2hfdHlwZSAmIFNIVF9OT0JJVFMpIHsKIAkJemVyb3MgPSBjYWxsb2MoMSwgc3ltLT5zdF9zaXplKTsKIAkJc3ltdmFsID0gemVyb3M7CiAJfSBlbHNlIHsKIAkJc3ltdmFsID0gKHZvaWQgKilpbmZvLT5oZHIKLQkJCSsgaW5mby0+c2VjaGRyc1tzeW0tPnN0X3NobmR4XS5zaF9vZmZzZXQKKwkJCSsgaW5mby0+c2VjaGRyc1tnZXRfc2VjaW5kZXgoaW5mbywgc3ltKV0uc2hfb2Zmc2V0CiAJCQkrIHN5bS0+c3RfdmFsdWU7CiAJfQogCmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMgYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKaW5kZXggZjg3NzkwMC4uYzgyNzMwOSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCisrKyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYwpAQCAtMjUzLDcgKzI1Myw3IEBACiAJcmV0dXJuIGV4cG9ydF91bmtub3duOwogfQogCi1zdGF0aWMgZW51bSBleHBvcnQgZXhwb3J0X2Zyb21fc2VjKHN0cnVjdCBlbGZfaW5mbyAqZWxmLCBFbGZfU2VjdGlvbiBzZWMpCitzdGF0aWMgZW51bSBleHBvcnQgZXhwb3J0X2Zyb21fc2VjKHN0cnVjdCBlbGZfaW5mbyAqZWxmLCB1bnNpZ25lZCBpbnQgc2VjKQogewogCWlmIChzZWMgPT0gZWxmLT5leHBvcnRfc2VjKQogCQlyZXR1cm4gZXhwb3J0X3BsYWluOwpAQCAtMzczLDYgKzM3Myw4IEBACiAJRWxmX0VoZHIgKmhkcjsKIAlFbGZfU2hkciAqc2VjaGRyczsKIAlFbGZfU3ltICAqc3ltOworCWNvbnN0IGNoYXIgKnNlY3N0cmluZ3M7CisJdW5zaWduZWQgaW50IHN5bXRhYl9pZHggPSB+MFUsIHN5bXRhYl9zaG5keF9pZHggPSB+MFU7CiAKIAloZHIgPSBncmFiX2ZpbGUoZmlsZW5hbWUsICZpbmZvLT5zaXplKTsKIAlpZiAoIWhkcikgewpAQCAtNDE3LDggKzQxOSwyNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwlpZiAoaGRyLT5lX3NobnVtID09IDApIHsKKwkJLyoKKwkJICogVGhlcmUgYXJlIG1vcmUgdGhhbiA2NGsgc2VjdGlvbnMsCisJCSAqIHJlYWQgY291bnQgZnJvbSAuc2hfc2l6ZS4KKwkJICogbm90ZTogaXQgZG9lc24ndCBuZWVkIHNobmR4MnNlY2luZGV4KCkKKwkJICovCisJCWluZm8tPm51bV9zZWN0aW9ucyA9IFRPX05BVElWRShzZWNoZHJzWzBdLnNoX3NpemUpOworCX0KKwllbHNlIHsKKwkJaW5mby0+bnVtX3NlY3Rpb25zID0gaGRyLT5lX3NobnVtOworCX0KKwlpZiAoaGRyLT5lX3Noc3RybmR4ID09IFNITl9YSU5ERVgpIHsKKwkJaW5mby0+c2VjaW5kZXhfc3RyaW5ncyA9CisJCSAgICBzaG5keDJzZWNpbmRleChUT19OQVRJVkUoc2VjaGRyc1swXS5zaF9saW5rKSk7CisJfQorCWVsc2UgeworCQlpbmZvLT5zZWNpbmRleF9zdHJpbmdzID0gaGRyLT5lX3Noc3RybmR4OworCX0KKwogCS8qIEZpeCBlbmRpYW5uZXNzIGluIHNlY3Rpb24gaGVhZGVycyAqLwotCWZvciAoaSA9IDA7IGkgPCBoZHItPmVfc2hudW07IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5udW1fc2VjdGlvbnM7IGkrKykgewogCQlzZWNoZHJzW2ldLnNoX25hbWUgICAgICA9IFRPX05BVElWRShzZWNoZHJzW2ldLnNoX25hbWUpOwogCQlzZWNoZHJzW2ldLnNoX3R5cGUgICAgICA9IFRPX05BVElWRShzZWNoZHJzW2ldLnNoX3R5cGUpOwogCQlzZWNoZHJzW2ldLnNoX2ZsYWdzICAgICA9IFRPX05BVElWRShzZWNoZHJzW2ldLnNoX2ZsYWdzKTsKQEAgLTQzMSw5ICs0NTIsOCBAQAogCQlzZWNoZHJzW2ldLnNoX2VudHNpemUgICA9IFRPX05BVElWRShzZWNoZHJzW2ldLnNoX2VudHNpemUpOwogCX0KIAkvKiBGaW5kIHN5bWJvbCB0YWJsZS4gKi8KLQlmb3IgKGkgPSAxOyBpIDwgaGRyLT5lX3NobnVtOyBpKyspIHsKLQkJY29uc3QgY2hhciAqc2Vjc3RyaW5ncwotCQkJPSAodm9pZCAqKWhkciArIHNlY2hkcnNbaGRyLT5lX3Noc3RybmR4XS5zaF9vZmZzZXQ7CisJc2Vjc3RyaW5ncyA9ICh2b2lkICopaGRyICsgc2VjaGRyc1tpbmZvLT5zZWNpbmRleF9zdHJpbmdzXS5zaF9vZmZzZXQ7CisJZm9yIChpID0gMTsgaSA8IGluZm8tPm51bV9zZWN0aW9uczsgaSsrKSB7CiAJCWNvbnN0IGNoYXIgKnNlY25hbWU7CiAJCWludCBub2JpdHMgPSBzZWNoZHJzW2ldLnNoX3R5cGUgPT0gU0hUX05PQklUUzsKIApAQCAtNDYxLDE0ICs0ODEsMjYgQEAKIAkJZWxzZSBpZiAoc3RyY21wKHNlY25hbWUsICJfX2tzeW10YWJfZ3BsX2Z1dHVyZSIpID09IDApCiAJCQlpbmZvLT5leHBvcnRfZ3BsX2Z1dHVyZV9zZWMgPSBpOwogCi0JCWlmIChzZWNoZHJzW2ldLnNoX3R5cGUgIT0gU0hUX1NZTVRBQikKLQkJCWNvbnRpbnVlOworCQlpZiAoc2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9TWU1UQUIpIHsKKwkJCXVuc2lnbmVkIGludCBzaF9saW5rX2lkeDsKKwkJCXN5bXRhYl9pZHggPSBpOworCQkJaW5mby0+c3ltdGFiX3N0YXJ0ID0gKHZvaWQgKiloZHIgKworCQkJICAgIHNlY2hkcnNbaV0uc2hfb2Zmc2V0OworCQkJaW5mby0+c3ltdGFiX3N0b3AgID0gKHZvaWQgKiloZHIgKworCQkJICAgIHNlY2hkcnNbaV0uc2hfb2Zmc2V0ICsgc2VjaGRyc1tpXS5zaF9zaXplOworCQkJc2hfbGlua19pZHggPSBzaG5keDJzZWNpbmRleChzZWNoZHJzW2ldLnNoX2xpbmspOworCQkJaW5mby0+c3RydGFiICAgICAgID0gKHZvaWQgKiloZHIgKworCQkJICAgIHNlY2hkcnNbc2hfbGlua19pZHhdLnNoX29mZnNldDsKKwkJfQogCi0JCWluZm8tPnN5bXRhYl9zdGFydCA9ICh2b2lkICopaGRyICsgc2VjaGRyc1tpXS5zaF9vZmZzZXQ7Ci0JCWluZm8tPnN5bXRhYl9zdG9wICA9ICh2b2lkICopaGRyICsgc2VjaGRyc1tpXS5zaF9vZmZzZXQKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICArIHNlY2hkcnNbaV0uc2hfc2l6ZTsKLQkJaW5mby0+c3RydGFiICAgICAgID0gKHZvaWQgKiloZHIgKwotCQkJICAgICAgICAgICAgIHNlY2hkcnNbc2VjaGRyc1tpXS5zaF9saW5rXS5zaF9vZmZzZXQ7CisJCS8qIDMyYml0IHNlY3Rpb24gbm8uIHRhYmxlPyAoIm1vcmUgdGhhbiA2NGsgc2VjdGlvbnMiKSAqLworCQlpZiAoc2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9TWU1UQUJfU0hORFgpIHsKKwkJCXN5bXRhYl9zaG5keF9pZHggPSBpOworCQkJaW5mby0+c3ltdGFiX3NobmR4X3N0YXJ0ID0gKHZvaWQgKiloZHIgKworCQkJICAgIHNlY2hkcnNbaV0uc2hfb2Zmc2V0OworCQkJaW5mby0+c3ltdGFiX3NobmR4X3N0b3AgID0gKHZvaWQgKiloZHIgKworCQkJICAgIHNlY2hkcnNbaV0uc2hfb2Zmc2V0ICsgc2VjaGRyc1tpXS5zaF9zaXplOworCQl9CiAJfQogCWlmICghaW5mby0+c3ltdGFiX3N0YXJ0KQogCQlmYXRhbCgiJXMgaGFzIG5vIHN5bXRhYj9cbiIsIGZpbGVuYW1lKTsKQEAgLTQ4MCw2ICs1MTIsMjEgQEAKIAkJc3ltLT5zdF92YWx1ZSA9IFRPX05BVElWRShzeW0tPnN0X3ZhbHVlKTsKIAkJc3ltLT5zdF9zaXplICA9IFRPX05BVElWRShzeW0tPnN0X3NpemUpOwogCX0KKworCWlmIChzeW10YWJfc2huZHhfaWR4ICE9IH4wVSkgeworCQlFbGYzMl9Xb3JkICpwOworCQlpZiAoc3ltdGFiX2lkeCAhPQorCQkgICAgc2huZHgyc2VjaW5kZXgoc2VjaGRyc1tzeW10YWJfc2huZHhfaWR4XS5zaF9saW5rKSkKKwkJCWZhdGFsKCIlczogU1lNVEFCX1NITkRYIGhhcyBiYWQgc2hfbGluazogJXUhPSV1XG4iLAorCQkJICAgICAgZmlsZW5hbWUsCisJCQkgICAgICBzaG5keDJzZWNpbmRleChzZWNoZHJzW3N5bXRhYl9zaG5keF9pZHhdLnNoX2xpbmspLAorCQkJICAgICAgc3ltdGFiX2lkeCk7CisJCS8qIEZpeCBlbmRpYW5uZXNzICovCisJCWZvciAocCA9IGluZm8tPnN5bXRhYl9zaG5keF9zdGFydDsgcCA8IGluZm8tPnN5bXRhYl9zaG5keF9zdG9wOworCQkgICAgIHArKykKKwkJCSpwID0gVE9fTkFUSVZFKCpwKTsKKwl9CisKIAlyZXR1cm4gMTsKIH0KIApAQCAtNTAzLDYgKzU1MCwxMSBAQAogCQkgICAgc3RybmNtcChzeW1uYW1lLCAiX3Jlc3QzMmdwcl8iLCBzaXplb2YoIl9yZXN0MzJncHJfIikgLSAxKSA9PSAwIHx8CiAJCSAgICBzdHJuY21wKHN5bW5hbWUsICJfc2F2ZTMyZ3ByXyIsIHNpemVvZigiX3NhdmUzMmdwcl8iKSAtIDEpID09IDApCiAJCQlyZXR1cm4gMTsKKwlpZiAoaW5mby0+aGRyLT5lX21hY2hpbmUgPT0gRU1fUFBDNjQpCisJCS8qIFNwZWNpYWwgcmVnaXN0ZXIgZnVuY3Rpb24gbGlua2VkIG9uIGFsbCBtb2R1bGVzIGR1cmluZyBmaW5hbCBsaW5rIG9mIC5rbyAqLworCQlpZiAoc3RybmNtcChzeW1uYW1lLCAiX3Jlc3RncHIwXyIsIHNpemVvZigiX3Jlc3RncHIwXyIpIC0gMSkgPT0gMCB8fAorCQkgICAgc3RybmNtcChzeW1uYW1lLCAiX3NhdmVncHIwXyIsIHNpemVvZigiX3NhdmVncHIwXyIpIC0gMSkgPT0gMCkKKwkJCXJldHVybiAxOwogCS8qIERvIG5vdCBpZ25vcmUgdGhpcyBzeW1ib2wgKi8KIAlyZXR1cm4gMDsKIH0KQEAgLTUxNCw3ICs1NjYsNyBAQAogCQkJICAgICAgIEVsZl9TeW0gKnN5bSwgY29uc3QgY2hhciAqc3ltbmFtZSkKIHsKIAl1bnNpZ25lZCBpbnQgY3JjOwotCWVudW0gZXhwb3J0IGV4cG9ydCA9IGV4cG9ydF9mcm9tX3NlYyhpbmZvLCBzeW0tPnN0X3NobmR4KTsKKwllbnVtIGV4cG9ydCBleHBvcnQgPSBleHBvcnRfZnJvbV9zZWMoaW5mbywgZ2V0X3NlY2luZGV4KGluZm8sIHN5bSkpOwogCiAJc3dpdGNoIChzeW0tPnN0X3NobmR4KSB7CiAJY2FzZSBTSE5fQ09NTU9OOgpAQCAtNjU2LDE5ICs3MDgsMTkgQEAKIAkJcmV0dXJuICIodW5rbm93bikiOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqc2VjX25hbWUoc3RydWN0IGVsZl9pbmZvICplbGYsIGludCBzaG5keCkKK3N0YXRpYyBjb25zdCBjaGFyICpzZWNfbmFtZShzdHJ1Y3QgZWxmX2luZm8gKmVsZiwgaW50IHNlY2luZGV4KQogewogCUVsZl9TaGRyICpzZWNoZHJzID0gZWxmLT5zZWNoZHJzOwogCXJldHVybiAodm9pZCAqKWVsZi0+aGRyICsKLQkgICAgICAgIGVsZi0+c2VjaGRyc1tlbGYtPmhkci0+ZV9zaHN0cm5keF0uc2hfb2Zmc2V0ICsKLQkgICAgICAgIHNlY2hkcnNbc2huZHhdLnNoX25hbWU7CisJCWVsZi0+c2VjaGRyc1tlbGYtPnNlY2luZGV4X3N0cmluZ3NdLnNoX29mZnNldCArCisJCXNlY2hkcnNbc2VjaW5kZXhdLnNoX25hbWU7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzZWNoX25hbWUoc3RydWN0IGVsZl9pbmZvICplbGYsIEVsZl9TaGRyICpzZWNoZHIpCiB7CiAJcmV0dXJuICh2b2lkICopZWxmLT5oZHIgKwotCSAgICAgICAgZWxmLT5zZWNoZHJzW2VsZi0+aGRyLT5lX3Noc3RybmR4XS5zaF9vZmZzZXQgKwotCSAgICAgICAgc2VjaGRyLT5zaF9uYW1lOworCQllbGYtPnNlY2hkcnNbZWxmLT5zZWNpbmRleF9zdHJpbmdzXS5zaF9vZmZzZXQgKworCQlzZWNoZHItPnNoX25hbWU7CiB9CiAKIC8qIGlmIHN5bSBpcyBlbXB0eSBvciBwb2ludCB0byBhIHN0cmluZwpAQCAtMTA0NywxMSArMTA5OSwxNCBAQAogCUVsZl9TeW0gKm5lYXIgPSBOVUxMOwogCUVsZjY0X1N3b3JkIGRpc3RhbmNlID0gMjA7CiAJRWxmNjRfU3dvcmQgZDsKKwl1bnNpZ25lZCBpbnQgcmVsc3ltX3NlY2luZGV4OwogCiAJaWYgKHJlbHN5bS0+c3RfbmFtZSAhPSAwKQogCQlyZXR1cm4gcmVsc3ltOworCisJcmVsc3ltX3NlY2luZGV4ID0gZ2V0X3NlY2luZGV4KGVsZiwgcmVsc3ltKTsKIAlmb3IgKHN5bSA9IGVsZi0+c3ltdGFiX3N0YXJ0OyBzeW0gPCBlbGYtPnN5bXRhYl9zdG9wOyBzeW0rKykgewotCQlpZiAoc3ltLT5zdF9zaG5keCAhPSByZWxzeW0tPnN0X3NobmR4KQorCQlpZiAoZ2V0X3NlY2luZGV4KGVsZiwgc3ltKSAhPSByZWxzeW1fc2VjaW5kZXgpCiAJCQljb250aW51ZTsKIAkJaWYgKEVMRl9TVF9UWVBFKHN5bS0+c3RfaW5mbykgPT0gU1RUX1NFQ1RJT04pCiAJCQljb250aW51ZTsKQEAgLTExMTMsOSArMTE2OCw5IEBACiAJZm9yIChzeW0gPSBlbGYtPnN5bXRhYl9zdGFydDsgc3ltIDwgZWxmLT5zeW10YWJfc3RvcDsgc3ltKyspIHsKIAkJY29uc3QgY2hhciAqc3ltc2VjOwogCi0JCWlmIChzeW0tPnN0X3NobmR4ID49IFNITl9MT1JFU0VSVkUpCisJCWlmIChpc19zaG5keF9zcGVjaWFsKHN5bS0+c3Rfc2huZHgpKQogCQkJY29udGludWU7Ci0JCXN5bXNlYyA9IHNlY19uYW1lKGVsZiwgc3ltLT5zdF9zaG5keCk7CisJCXN5bXNlYyA9IHNlY19uYW1lKGVsZiwgZ2V0X3NlY2luZGV4KGVsZiwgc3ltKSk7CiAJCWlmIChzdHJjbXAoc3ltc2VjLCBzZWMpICE9IDApCiAJCQljb250aW51ZTsKIAkJaWYgKCFpc192YWxpZF9uYW1lKGVsZiwgc3ltKSkKQEAgLTEzMTEsNyArMTM2Niw3IEBACiAJY29uc3QgY2hhciAqdG9zZWM7CiAJY29uc3Qgc3RydWN0IHNlY3Rpb25jaGVjayAqbWlzbWF0Y2g7CiAKLQl0b3NlYyA9IHNlY19uYW1lKGVsZiwgc3ltLT5zdF9zaG5keCk7CisJdG9zZWMgPSBzZWNfbmFtZShlbGYsIGdldF9zZWNpbmRleChlbGYsIHN5bSkpOwogCW1pc21hdGNoID0gc2VjdGlvbl9taXNtYXRjaChmcm9tc2VjLCB0b3NlYyk7CiAJaWYgKG1pc21hdGNoKSB7CiAJCUVsZl9TeW0gKnRvOwpAQCAtMTMzOSw3ICsxMzk0LDcgQEAKIAkJCQkgICAgRWxmX1NoZHIgKnNlY2hkciwgRWxmX1JlbGEgKnIpCiB7CiAJRWxmX1NoZHIgKnNlY2hkcnMgPSBlbGYtPnNlY2hkcnM7Ci0JaW50IHNlY3Rpb24gPSBzZWNoZHItPnNoX2luZm87CisJaW50IHNlY3Rpb24gPSBzaG5keDJzZWNpbmRleChzZWNoZHItPnNoX2luZm8pOwogCiAJcmV0dXJuICh2b2lkICopZWxmLT5oZHIgKyBzZWNoZHJzW3NlY3Rpb25dLnNoX29mZnNldCArCiAJCXItPnJfb2Zmc2V0IC0gc2VjaGRyc1tzZWN0aW9uXS5zaF9hZGRyOwpAQCAtMTQ0Nyw3ICsxNTAyLDcgQEAKIAkJci5yX2FkZGVuZCA9IFRPX05BVElWRShyZWxhLT5yX2FkZGVuZCk7CiAJCXN5bSA9IGVsZi0+c3ltdGFiX3N0YXJ0ICsgcl9zeW07CiAJCS8qIFNraXAgc3BlY2lhbCBzZWN0aW9ucyAqLwotCQlpZiAoc3ltLT5zdF9zaG5keCA+PSBTSE5fTE9SRVNFUlZFKQorCQlpZiAoaXNfc2huZHhfc3BlY2lhbChzeW0tPnN0X3NobmR4KSkKIAkJCWNvbnRpbnVlOwogCQljaGVja19zZWN0aW9uX21pc21hdGNoKG1vZG5hbWUsIGVsZiwgJnIsIHN5bSwgZnJvbXNlYyk7CiAJfQpAQCAtMTUwNSw3ICsxNTYwLDcgQEAKIAkJfQogCQlzeW0gPSBlbGYtPnN5bXRhYl9zdGFydCArIHJfc3ltOwogCQkvKiBTa2lwIHNwZWNpYWwgc2VjdGlvbnMgKi8KLQkJaWYgKHN5bS0+c3Rfc2huZHggPj0gU0hOX0xPUkVTRVJWRSkKKwkJaWYgKGlzX3NobmR4X3NwZWNpYWwoc3ltLT5zdF9zaG5keCkpCiAJCQljb250aW51ZTsKIAkJY2hlY2tfc2VjdGlvbl9taXNtYXRjaChtb2RuYW1lLCBlbGYsICZyLCBzeW0sIGZyb21zZWMpOwogCX0KQEAgLTE1MzAsNyArMTU4NSw3IEBACiAJRWxmX1NoZHIgKnNlY2hkcnMgPSBlbGYtPnNlY2hkcnM7CiAKIAkvKiBXYWxrIHRocm91Z2ggYWxsIHNlY3Rpb25zICovCi0JZm9yIChpID0gMDsgaSA8IGVsZi0+aGRyLT5lX3NobnVtOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgZWxmLT5udW1fc2VjdGlvbnM7IGkrKykgewogCQljaGVja19zZWN0aW9uKG1vZG5hbWUsIGVsZiwgJmVsZi0+c2VjaGRyc1tpXSk7CiAJCS8qIFdlIHdhbnQgdG8gcHJvY2VzcyBvbmx5IHJlbG9jYXRpb24gc2VjdGlvbnMgYW5kIG5vdCAuaW5pdCAqLwogCQlpZiAoc2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9SRUxBKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5oIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5oCmluZGV4IGJlOTg3YTQuLjAzODhjZmNjIDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmgKKysrIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5oCkBAIC0xMjksOCArMTI5LDUxIEBACiAJY29uc3QgY2hhciAgICpzdHJ0YWI7CiAJY2hhcgkgICAgICptb2RpbmZvOwogCXVuc2lnbmVkIGludCBtb2RpbmZvX2xlbjsKKworCS8qIHN1cHBvcnQgZm9yIDMyYml0IHNlY3Rpb24gbnVtYmVycyAqLworCisJdW5zaWduZWQgaW50IG51bV9zZWN0aW9uczsgLyogbWF4X3NlY2luZGV4ICsgMSAqLworCXVuc2lnbmVkIGludCBzZWNpbmRleF9zdHJpbmdzOworCS8qIGlmIE50aCBzeW1ib2wgdGFibGUgZW50cnkgaGFzIC5zdF9zaG5keCA9IFNITl9YSU5ERVgsCisJICogdGFrZSBzaG5keCBmcm9tIHN5bXRhYl9zaG5keF9zdGFydFtOXSBpbnN0ZWFkICovCisJRWxmMzJfV29yZCAgICpzeW10YWJfc2huZHhfc3RhcnQ7CisJRWxmMzJfV29yZCAgICpzeW10YWJfc2huZHhfc3RvcDsKIH07CiAKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3NobmR4X3NwZWNpYWwodW5zaWduZWQgaW50IGkpCit7CisJcmV0dXJuIGkgIT0gU0hOX1hJTkRFWCAmJiBpID49IFNITl9MT1JFU0VSVkUgJiYgaSA8PSBTSE5fSElSRVNFUlZFOworfQorCisvKiBzaG5keCBpcyBpbiBbMC4uU0hOX0xPUkVTRVJWRSkgVSAoU0hOX0hJUkVTRVJWRSwgMHhmZmZmZmZmXSwgdGh1czoKKyAqIHNobmR4ID09IDAgICAgICAgICAgICAgICA8PT4gc2VjaGRyc1swXQorICogLi4uLi4uCisgKiBzaG5keCA9PSBTSE5fTE9SRVNFUlZFLTEgPD0+IHNlY2hkcnNbU0hOX0xPUkVTRVJWRS0xXQorICogc2huZHggPT0gU0hOX0hJUkVTRVJWRSsxIDw9PiBzZWNoZHJzW1NITl9MT1JFU0VSVkVdCisgKiBzaG5keCA9PSBTSE5fSElSRVNFUlZFKzIgPD0+IHNlY2hkcnNbU0hOX0xPUkVTRVJWRSsxXQorICogLi4uLi4uCisgKiBmeWk6IHN5bS0+c3Rfc2huZHggaXMgdWludDE2LCBTSE5fTE9SRVNFUlZFID0gZmYwMCwgU0hOX0hJUkVTRVJWRSA9IGZmZmYsCisgKiBzbyBiYXNpY2FsbHkgd2UgbWFwICAwMDAwLi5mZWZmIC0+IDAwMDAuLmZlZmYKKyAqICAgICAgICAgICAgICAgICAgICAgIGZmMDAuLmZmZmYgLT4gKHlvdSBhcmUgYSBiYWQgYm95LCBkb250IGRvIGl0KQorICogICAgICAgICAgICAgICAgICAgICAxMDAwMC4ueHh4eCAtPiBmZjAwLi4oeHh4eC0weDEwMCkKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2huZHgyc2VjaW5kZXgodW5zaWduZWQgaW50IGkpCit7CisJaWYgKGkgPD0gU0hOX0hJUkVTRVJWRSkKKwkJcmV0dXJuIGk7CisJcmV0dXJuIGkgLSAoU0hOX0hJUkVTRVJWRSArIDEgLSBTSE5fTE9SRVNFUlZFKTsKK30KKworLyogQWNjZXNzb3IgZm9yIHN5bS0+c3Rfc2huZHgsIGhpZGVzIHVnbGluZXNzIG9mICI2NGsgc2VjdGlvbnMiICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfc2VjaW5kZXgoY29uc3Qgc3RydWN0IGVsZl9pbmZvICppbmZvLAorCQkJCQljb25zdCBFbGZfU3ltICpzeW0pCit7CisJaWYgKHN5bS0+c3Rfc2huZHggIT0gU0hOX1hJTkRFWCkKKwkJcmV0dXJuIHN5bS0+c3Rfc2huZHg7CisJcmV0dXJuIHNobmR4MnNlY2luZGV4KGluZm8tPnN5bXRhYl9zaG5keF9zdGFydFtzeW0gLQorCQkJCQkJICAgICAgIGluZm8tPnN5bXRhYl9zdGFydF0pOworfQorCiAvKiBmaWxlMmFsaWFzLmMgKi8KIGV4dGVybiB1bnNpZ25lZCBpbnQgY3Jvc3NfYnVpbGQ7CiB2b2lkIGhhbmRsZV9tb2RkZXZ0YWJsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBlbGZfaW5mbyAqaW5mbywKZGlmZiAtLWdpdCBhL3NjcmlwdHMvcGFja2FnZS9NYWtlZmlsZSBiL3NjcmlwdHMvcGFja2FnZS9NYWtlZmlsZQppbmRleCAzYTY4MWVmLi5kMGI5MzFiIDEwMDY0NAotLS0gYS9zY3JpcHRzL3BhY2thZ2UvTWFrZWZpbGUKKysrIGIvc2NyaXB0cy9wYWNrYWdlL01ha2VmaWxlCkBAIC00NCw3ICs0NCw3IEBACiAJZmkKIAkkKE1BS0UpIGNsZWFuCiAJJChQUkVWKSBsbiAtc2YgJChzcmN0cmVlKSAkKEtFUk5FTFBBVEgpCi0JJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy9zZXRsb2NhbHZlcnNpb24gLS1zY20tb25seSA+ICQob2JqdHJlZSkvLnNjbXZlcnNpb24KKwkkKENPTkZJR19TSEVMTCkgJChzcmN0cmVlKS9zY3JpcHRzL3NldGxvY2FsdmVyc2lvbiAtLXNhdmUtc2NtdmVyc2lvbgogCSQoUFJFVikgdGFyIC1jeiAkKFJDU19UQVJfSUdOT1JFKSAtZiAkKEtFUk5FTFBBVEgpLnRhci5neiAkKEtFUk5FTFBBVEgpLy4KIAkkKFBSRVYpIHJtICQoS0VSTkVMUEFUSCkKIAlybSAtZiAkKG9ianRyZWUpLy5zY212ZXJzaW9uCkBAIC0xMTEsMTMgKzExMSwzOCBAQAogY2xlYW4tZGlycyArPSAkKG9ianRyZWUpL3Rhci1pbnN0YWxsLwogCiAKKyMgcGVyZi1wa2cgLSBnZW5lcmF0ZSBhIHNvdXJjZSB0YXJiYWxsIHdpdGggcGVyZiBzb3VyY2UKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3BlcmYtdGFyPXBlcmYtJChLRVJORUxWRVJTSU9OKQorCitxdWlldF9jbWRfcGVyZl90YXIgPSBUQVIKKyAgICAgIGNtZF9wZXJmX3RhciA9IFwKK2dpdCBhcmNoaXZlIC0tcHJlZml4PSQocGVyZi10YXIpLyBIRUFEXnt0cmVlfSAgICAgICAgICAgICAgICAgICAgICAgXAorCSQkKGNhdCAkKHNyY3RyZWUpL3Rvb2xzL3BlcmYvTUFOSUZFU1QpIC1vICQocGVyZi10YXIpLnRhcjsgIFwKK21rZGlyIC1wICQocGVyZi10YXIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZ2l0IHJldi1wYXJzZSBIRUFEID4gJChwZXJmLXRhcikvSEVBRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit0YXIgcmYgJChwZXJmLXRhcikudGFyICQocGVyZi10YXIpL0hFQUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3JtIC1yICQocGVyZi10YXIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorJChpZiAkKGZpbmRzdHJpbmcgdGFyLXNyYywkQCksLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiskKGlmICQoZmluZHN0cmluZyBiejIsJEApLGJ6aXAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyQoaWYgJChmaW5kc3RyaW5nIGd6LCRAKSxnemlwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorJChlcnJvciB1bmtub3duIHRhcmdldCAkQCkpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwktZiAtOSAkKHBlcmYtdGFyKS50YXIpCisKK3BlcmYtJXBrZzogRk9SQ0UKKwkkKGNhbGwgY21kLHBlcmZfdGFyKQorCiAjIEhlbHAgdGV4dCBkaXNwbGF5ZWQgd2hlbiBleGVjdXRpbmcgJ21ha2UgaGVscCcKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBoZWxwOiBGT1JDRQotCUBlY2hvICcgIHJwbS1wa2cgICAgICAgICAtIEJ1aWxkIGJvdGggc291cmNlIGFuZCBiaW5hcnkgUlBNIGtlcm5lbCBwYWNrYWdlcycKLQlAZWNobyAnICBiaW5ycG0tcGtnICAgICAgLSBCdWlsZCBvbmx5IHRoZSBiaW5hcnkga2VybmVsIHBhY2thZ2UnCi0JQGVjaG8gJyAgZGViLXBrZyAgICAgICAgIC0gQnVpbGQgdGhlIGtlcm5lbCBhcyBhbiBkZWIgcGFja2FnZScKLQlAZWNobyAnICB0YXItcGtnICAgICAgICAgLSBCdWlsZCB0aGUga2VybmVsIGFzIGFuIHVuY29tcHJlc3NlZCB0YXJiYWxsJwotCUBlY2hvICcgIHRhcmd6LXBrZyAgICAgICAtIEJ1aWxkIHRoZSBrZXJuZWwgYXMgYSBnemlwIGNvbXByZXNzZWQgdGFyYmFsbCcKLQlAZWNobyAnICB0YXJiejItcGtnICAgICAgLSBCdWlsZCB0aGUga2VybmVsIGFzIGEgYnppcDIgY29tcHJlc3NlZCB0YXJiYWxsJworCUBlY2hvICcgIHJwbS1wa2cgICAgICAgICAgICAgLSBCdWlsZCBib3RoIHNvdXJjZSBhbmQgYmluYXJ5IFJQTSBrZXJuZWwgcGFja2FnZXMnCisJQGVjaG8gJyAgYmlucnBtLXBrZyAgICAgICAgICAtIEJ1aWxkIG9ubHkgdGhlIGJpbmFyeSBrZXJuZWwgcGFja2FnZScKKwlAZWNobyAnICBkZWItcGtnICAgICAgICAgICAgIC0gQnVpbGQgdGhlIGtlcm5lbCBhcyBhbiBkZWIgcGFja2FnZScKKwlAZWNobyAnICB0YXItcGtnICAgICAgICAgICAgIC0gQnVpbGQgdGhlIGtlcm5lbCBhcyBhbiB1bmNvbXByZXNzZWQgdGFyYmFsbCcKKwlAZWNobyAnICB0YXJnei1wa2cgICAgICAgICAgIC0gQnVpbGQgdGhlIGtlcm5lbCBhcyBhIGd6aXAgY29tcHJlc3NlZCB0YXJiYWxsJworCUBlY2hvICcgIHRhcmJ6Mi1wa2cgICAgICAgICAgLSBCdWlsZCB0aGUga2VybmVsIGFzIGEgYnppcDIgY29tcHJlc3NlZCB0YXJiYWxsJworCUBlY2hvICcgIHBlcmYtdGFyLXNyYy1wa2cgICAgLSBCdWlsZCAkKHBlcmYtdGFyKS50YXIgc291cmNlIHRhcmJhbGwnCisJQGVjaG8gJyAgcGVyZi10YXJnei1zcmMtcGtnICAtIEJ1aWxkICQocGVyZi10YXIpLnRhci5neiBzb3VyY2UgdGFyYmFsbCcKKwlAZWNobyAnICBwZXJmLXRhcmJ6Mi1zcmMtcGtnIC0gQnVpbGQgJChwZXJmLXRhcikudGFyLmJ6MiBzb3VyY2UgdGFyYmFsbCcKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYWNrYWdlL2J1aWxkZGViIGIvc2NyaXB0cy9wYWNrYWdlL2J1aWxkZGViCmluZGV4IDA3ZjJmYmQuLjVmMWUyZmMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvcGFja2FnZS9idWlsZGRlYgorKysgYi9zY3JpcHRzL3BhY2thZ2UvYnVpbGRkZWIKQEAgLTE0OCwxMCArMTQ4LDExIEBACiAjIEdlbmVyYXRlIGEgY29udHJvbCBmaWxlCiBjYXQgPDxFT0YgPiBkZWJpYW4vY29udHJvbAogU291cmNlOiBsaW51eC11cHN0cmVhbQotU2VjdGlvbjogYWRtaW4KK1NlY3Rpb246IGtlcm5lbAogUHJpb3JpdHk6IG9wdGlvbmFsCiBNYWludGFpbmVyOiAkbWFpbnRhaW5lcgotU3RhbmRhcmRzLVZlcnNpb246IDMuOC4xCitTdGFuZGFyZHMtVmVyc2lvbjogMy44LjQKK0hvbWVwYWdlOiBodHRwOi8vd3d3Lmtlcm5lbC5vcmcvCiBFT0YKIAogaWYgWyAiJEFSQ0giID0gInVtIiBdOyB0aGVuCmRpZmYgLS1naXQgYS9zY3JpcHRzL3JlY29yZG1jb3VudC5wbCBiL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCmluZGV4IGYzYzljMGEuLjAxNzEwNjAgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCisrKyBiL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCkBAIC0zMjYsNyArMzI2LDcgQEAKICAgICAjICAgICAgICAgICAgICAgICAgICAxNDogUl9NSVBTX05PTkUgKkFCUyoKICAgICAjCSAxODogICAwMDAyMDAyMSAgICAgICAgbm9wCiAgICAgaWYgKCRpc19tb2R1bGUgZXEgIjAiKSB7Ci0JICAgICRtY291bnRfcmVnZXggPSAiXlxccyooWzAtOWEtZkEtRl0rKTouKlxcc19tY291bnRcJCI7CisJICAgICRtY291bnRfcmVnZXggPSAiXlxccyooWzAtOWEtZkEtRl0rKTogUl9NSVBTXzI2XFxzK19tY291bnRcJCI7CiAgICAgfSBlbHNlIHsKIAkgICAgJG1jb3VudF9yZWdleCA9ICJeXFxzKihbMC05YS1mQS1GXSspOiBSX01JUFNfSEkxNlxccytfbWNvdW50XCQiOwogICAgIH0KZGlmZiAtLWdpdCBhL3NjcmlwdHMvc2V0bG9jYWx2ZXJzaW9uIGIvc2NyaXB0cy9zZXRsb2NhbHZlcnNpb24KaW5kZXggZDZhODY2ZS4uNjRhOWNiNSAxMDA3NTUKLS0tIGEvc2NyaXB0cy9zZXRsb2NhbHZlcnNpb24KKysrIGIvc2NyaXB0cy9zZXRsb2NhbHZlcnNpb24KQEAgLTEwLDEzICsxMCwxMyBAQAogIwogCiB1c2FnZSgpIHsKLQllY2hvICJVc2FnZTogJDAgWy0tc2NtLW9ubHldIFtzcmN0cmVlXSIgPiYyCisJZWNobyAiVXNhZ2U6ICQwIFstLXNhdmUtc2NtdmVyc2lvbl0gW3NyY3RyZWVdIiA+JjIKIAlleGl0IDEKIH0KIAogc2NtX29ubHk9ZmFsc2UKIHNyY3RyZWU9LgotaWYgdGVzdCAiJDEiID0gIi0tc2NtLW9ubHkiOyB0aGVuCitpZiB0ZXN0ICIkMSIgPSAiLS1zYXZlLXNjbXZlcnNpb24iOyB0aGVuCiAJc2NtX29ubHk9dHJ1ZQogCXNoaWZ0CiBmaQpAQCAtMzAsMTEgKzMwLDEyIEBACiAKIHNjbV92ZXJzaW9uKCkKIHsKLQlsb2NhbCBzaG9ydD1mYWxzZQorCWxvY2FsIHNob3J0CisJc2hvcnQ9ZmFsc2UKIAogCWNkICIkc3JjdHJlZSIKIAlpZiB0ZXN0IC1lIC5zY212ZXJzaW9uOyB0aGVuCi0JCWNhdCAiJF8iCisJCWNhdCAuc2NtdmVyc2lvbgogCQlyZXR1cm4KIAlmaQogCWlmIHRlc3QgIiQxIiA9ICItLXNob3J0IjsgdGhlbgpAQCAtMTMxLDEyICsxMzIsMTUgQEAKIH0KIAogaWYgJHNjbV9vbmx5OyB0aGVuCi0Jc2NtX3ZlcnNpb24KKwlpZiB0ZXN0ICEgLWUgLnNjbXZlcnNpb247IHRoZW4KKwkJcmVzPSQoc2NtX3ZlcnNpb24pCisJCWVjaG8gIiRyZXMiID4uc2NtdmVyc2lvbgorCWZpCiAJZXhpdAogZmkKIAogaWYgdGVzdCAtZSBpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmY7IHRoZW4KLQlzb3VyY2UgIiRfIgorCS4gaW5jbHVkZS9jb25maWcvYXV0by5jb25mCiBlbHNlCiAJZWNobyAiRXJyb3I6IGtlcm5lbHJlbGVhc2Ugbm90IHZhbGlkIC0gcnVuICdtYWtlIHByZXBhcmUnIHRvIHVwZGF0ZSBpdCIKIAlleGl0IDEKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L0tjb25maWcgYi9zZWN1cml0eS9LY29uZmlnCmluZGV4IDIyNmI5NTUuLmJkNzJhZTYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L0tjb25maWcKKysrIGIvc2VjdXJpdHkvS2NvbmZpZwpAQCAtMTQwLDYgKzE0MCw3IEBACiBzb3VyY2Ugc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnCiBzb3VyY2Ugc2VjdXJpdHkvc21hY2svS2NvbmZpZwogc291cmNlIHNlY3VyaXR5L3RvbW95by9LY29uZmlnCitzb3VyY2Ugc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZwogCiBzb3VyY2Ugc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9LY29uZmlnCiAKQEAgLTE0OCw2ICsxNDksNyBAQAogCWRlZmF1bHQgREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlmIFNFQ1VSSVRZX1NFTElOVVgKIAlkZWZhdWx0IERFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaWYgU0VDVVJJVFlfU01BQ0sKIAlkZWZhdWx0IERFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlmIFNFQ1VSSVRZX1RPTU9ZTworCWRlZmF1bHQgREVGQVVMVF9TRUNVUklUWV9BUFBBUk1PUiBpZiBTRUNVUklUWV9BUFBBUk1PUgogCWRlZmF1bHQgREVGQVVMVF9TRUNVUklUWV9EQUMKIAogCWhlbHAKQEAgLTE2Myw2ICsxNjUsOSBAQAogCWNvbmZpZyBERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTwogCQlib29sICJUT01PWU8iIGlmIFNFQ1VSSVRZX1RPTU9ZTz15CiAKKwljb25maWcgREVGQVVMVF9TRUNVUklUWV9BUFBBUk1PUgorCQlib29sICJBcHBBcm1vciIgaWYgU0VDVVJJVFlfQVBQQVJNT1I9eQorCiAJY29uZmlnIERFRkFVTFRfU0VDVVJJVFlfREFDCiAJCWJvb2wgIlVuaXggRGlzY3JldGlvbmFyeSBBY2Nlc3MgQ29udHJvbHMiCiAKQEAgLTE3Myw2ICsxNzgsNyBAQAogCWRlZmF1bHQgInNlbGludXgiIGlmIERFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWAogCWRlZmF1bHQgInNtYWNrIiBpZiBERUZBVUxUX1NFQ1VSSVRZX1NNQUNLCiAJZGVmYXVsdCAidG9tb3lvIiBpZiBERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTworCWRlZmF1bHQgImFwcGFybW9yIiBpZiBERUZBVUxUX1NFQ1VSSVRZX0FQUEFSTU9SCiAJZGVmYXVsdCAiIiBpZiBERUZBVUxUX1NFQ1VSSVRZX0RBQwogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9zZWN1cml0eS9NYWtlZmlsZSBiL3NlY3VyaXR5L01ha2VmaWxlCmluZGV4IGRhMjBhMTkuLjhiYjBmZTkgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L01ha2VmaWxlCisrKyBiL3NlY3VyaXR5L01ha2VmaWxlCkBAIC02LDYgKzYsNyBAQAogc3ViZGlyLSQoQ09ORklHX1NFQ1VSSVRZX1NFTElOVVgpCSs9IHNlbGludXgKIHN1YmRpci0kKENPTkZJR19TRUNVUklUWV9TTUFDSykJCSs9IHNtYWNrCiBzdWJkaXItJChDT05GSUdfU0VDVVJJVFlfVE9NT1lPKSAgICAgICAgKz0gdG9tb3lvCitzdWJkaXItJChDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1IpCSs9IGFwcGFybW9yCiAKICMgYWx3YXlzIGVuYWJsZSBkZWZhdWx0IGNhcGFiaWxpdGllcwogb2JqLXkJCQkJCSs9IGNvbW1vbmNhcC5vCkBAIC0xOSw2ICsyMCw3IEBACiBvYmotJChDT05GSUdfU0VDVVJJVFlfU01BQ0spCQkrPSBzbWFjay9idWlsdC1pbi5vCiBvYmotJChDT05GSUdfQVVESVQpCQkJKz0gbHNtX2F1ZGl0Lm8KIG9iai0kKENPTkZJR19TRUNVUklUWV9UT01PWU8pCQkrPSB0b21veW8vYnVpbHQtaW4ubworb2JqLSQoQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SKQkJKz0gYXBwYXJtb3IvYnVpbHQtaW4ubwogb2JqLSQoQ09ORklHX0NHUk9VUF9ERVZJQ0UpCQkrPSBkZXZpY2VfY2dyb3VwLm8KIAogIyBPYmplY3QgaW50ZWdyaXR5IGZpbGUgbGlzdHMKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2FwcGFybW9yLy5naXRpZ25vcmUgYi9zZWN1cml0eS9hcHBhcm1vci8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMGE5OWYKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9hcHBhcm1vci8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsNSBAQAorIworIyBHZW5lcmF0ZWQgaW5jbHVkZSBmaWxlcworIworYWZfbmFtZXMuaAorY2FwYWJpbGl0eV9uYW1lcy5oCmRpZmYgLS1naXQgYS9zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnIGIvc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjkwMTNiCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZwpAQCAtMCwwICsxLDMxIEBACitjb25maWcgU0VDVVJJVFlfQVBQQVJNT1IKKwlib29sICJBcHBBcm1vciBzdXBwb3J0IgorCWRlcGVuZHMgb24gU0VDVVJJVFkgJiYgTkVUCisJc2VsZWN0IEFVRElUCisJc2VsZWN0IFNFQ1VSSVRZX1BBVEgKKwlzZWxlY3QgU0VDVVJJVFlGUworCXNlbGVjdCBTRUNVUklUWV9ORVRXT1JLCisJZGVmYXVsdCBuCisJaGVscAorCSAgVGhpcyBlbmFibGVzIHRoZSBBcHBBcm1vciBzZWN1cml0eSBtb2R1bGUuCisJICBSZXF1aXJlZCB1c2Vyc3BhY2UgdG9vbHMgKGlmIHRoZXkgYXJlIG5vdCBpbmNsdWRlZCBpbiB5b3VyCisJICBkaXN0cmlidXRpb24pIGFuZCBmdXJ0aGVyIGluZm9ybWF0aW9uIG1heSBiZSBmb3VuZCBhdAorCSAgaHR0cDovL2FwcGFybW9yLndpa2kua2VybmVsLm9yZworCisJICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLgorCitjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfQk9PVFBBUkFNX1ZBTFVFCisJaW50ICJBcHBBcm1vciBib290IHBhcmFtZXRlciBkZWZhdWx0IHZhbHVlIgorCWRlcGVuZHMgb24gU0VDVVJJVFlfQVBQQVJNT1IKKwlyYW5nZSAwIDEKKwlkZWZhdWx0IDEKKwloZWxwCisJICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUga2VybmVsIHBhcmFtZXRlcgorCSAgJ2FwcGFybW9yJywgd2hpY2ggYWxsb3dzIEFwcEFybW9yIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQKKyAgICAgICAgICBhdCBib290LiAgSWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvIDAgKHplcm8pLCB0aGUgQXBwQXJtb3IKKwkgIGtlcm5lbCBwYXJhbWV0ZXIgd2lsbCBkZWZhdWx0IHRvIDAsIGRpc2FibGluZyBBcHBBcm1vciBhdAorCSAgYm9vdC4gIElmIHRoaXMgb3B0aW9uIGlzIHNldCB0byAxIChvbmUpLCB0aGUgQXBwQXJtb3IKKwkgIGtlcm5lbCBwYXJhbWV0ZXIgd2lsbCBkZWZhdWx0IHRvIDEsIGVuYWJsaW5nIEFwcEFybW9yIGF0CisJICBib290LgorCisJICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciAxLgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvYXBwYXJtb3IvTWFrZWZpbGUgYi9zZWN1cml0eS9hcHBhcm1vci9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjA0ODY5Ci0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvYXBwYXJtb3IvTWFrZWZpbGUKQEAgLTAsMCArMSwyNCBAQAorIyBNYWtlZmlsZSBmb3IgQXBwQXJtb3IgTGludXggU2VjdXJpdHkgTW9kdWxlCisjCitvYmotJChDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1IpICs9IGFwcGFybW9yLm8KKworYXBwYXJtb3IteSA6PSBhcHBhcm1vcmZzLm8gYXVkaXQubyBjYXBhYmlsaXR5Lm8gY29udGV4dC5vIGlwYy5vIGxpYi5vIG1hdGNoLm8gXAorICAgICAgICAgICAgICBwYXRoLm8gZG9tYWluLm8gcG9saWN5Lm8gcG9saWN5X3VucGFjay5vIHByb2NhdHRyLm8gbHNtLm8gXAorICAgICAgICAgICAgICByZXNvdXJjZS5vIHNpZC5vIGZpbGUubworCitjbGVhbi1maWxlczogY2FwYWJpbGl0eV9uYW1lcy5oIGFmX25hbWVzLmgKKworcXVpZXRfY21kX21ha2UtY2FwcyA9IEdFTiAgICAgJEAKK2NtZF9tYWtlLWNhcHMgPSBlY2hvICJzdGF0aWMgY29uc3QgY2hhciAqY2FwYWJpbGl0eV9uYW1lc1tdID0geyIgPiAkQCA7IHNlZCAtbiAtZSAiL0NBUF9GU19NQVNLL2QiIC1lICJzL15cI2RlZmluZVsgXFx0XVxcK0NBUF9cXChbQS1aMC05X11cXCtcXClbIFxcdF1cXCtcXChbMC05XVxcK1xcKVwkJC9bXFwyXSAgPSBcIlxcMVwiLC9wIiAkPCB8IHRyIEEtWiBhLXogPj4gJEAgOyBlY2hvICJ9OyIgPj4gJEAKKworcXVpZXRfY21kX21ha2UtcmxpbSA9IEdFTiAgICAgJEAKK2NtZF9tYWtlLXJsaW0gPSBlY2hvICJzdGF0aWMgY29uc3QgY2hhciAqcmxpbV9uYW1lc1tdID0geyIgPiAkQCA7IHNlZCAtbiAtLWUgIi9BRl9NQVgvZCIgLWUgInMvXlwjIFxcP2RlZmluZVsgXFx0XVxcK1JMSU1JVF9cXChbQS1aMC05X11cXCtcXClbIFxcdF1cXCtcXChbMC05XVxcK1xcKVxcKC4qXFwpXCQkL1tcXDJdICA9IFwiXFwxXCIsL3AiICQ8IHwgdHIgQS1aIGEteiA+PiAkQCA7IGVjaG8gIn07IiA+PiAkQCA7IGVjaG8gInN0YXRpYyBjb25zdCBpbnQgcmxpbV9tYXBbXSA9IHsiID4+ICRAIDsgc2VkIC1uIC1lICIvQUZfTUFYL2QiIC1lICJzL15cIyBcXD9kZWZpbmVbIFxcdF1cXCtcXChSTElNSVRfW0EtWjAtOV9dXFwrXFwpWyBcXHRdXFwrXFwoWzAtOV1cXCtcXClcXCguKlxcKVwkJC9cXDEsL3AiICQ8ID4+ICRAIDsgZWNobyAifTsiID4+ICRACisKKyQob2JqKS9jYXBhYmlsaXR5Lm8gOiAkKG9iaikvY2FwYWJpbGl0eV9uYW1lcy5oCiskKG9iaikvcmVzb3VyY2UubyA6ICQob2JqKS9ybGltX25hbWVzLmgKKyQob2JqKS9jYXBhYmlsaXR5X25hbWVzLmggOiAkKHNyY3RyZWUpL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oCisJJChjYWxsIGNtZCxtYWtlLWNhcHMpCiskKG9iaikvYWZfbmFtZXMuaCA6ICQoc3JjdHJlZSkvaW5jbHVkZS9saW51eC9zb2NrZXQuaAorCSQoY2FsbCBjbWQsbWFrZS1hZikKKyQob2JqKS9ybGltX25hbWVzLmggOiAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtLWdlbmVyaWMvcmVzb3VyY2UuaAorCSQoY2FsbCBjbWQsbWFrZS1ybGltKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jIGIvc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMjAzMzEKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMKQEAgLTAsMCArMSwyMzkgQEAKKy8qCisgKiBBcHBBcm1vciBzZWN1cml0eSBtb2R1bGUKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgQXBwQXJtb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvYXBwYXJtb3IgaW50ZXJmYWNlIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDA4IE5vdmVsbC9TVVNFCisgKiBDb3B5cmlnaHQgMjAwOS0yMDEwIENhbm9uaWNhbCBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorCisjaW5jbHVkZSAiaW5jbHVkZS9hcHBhcm1vci5oIgorI2luY2x1ZGUgImluY2x1ZGUvYXBwYXJtb3Jmcy5oIgorI2luY2x1ZGUgImluY2x1ZGUvYXVkaXQuaCIKKyNpbmNsdWRlICJpbmNsdWRlL2NvbnRleHQuaCIKKyNpbmNsdWRlICJpbmNsdWRlL3BvbGljeS5oIgorCisvKioKKyAqIGFhX3NpbXBsZV93cml0ZV90b19idWZmZXIgLSBjb21tb24gcm91dGluZSBmb3IgZ2V0dGluZyBwb2xpY3kgZnJvbSB1c2VyCisgKiBAb3A6IG9wZXJhdGlvbiBkb2luZyB0aGUgdXNlciBidWZmZXIgY29weQorICogQHVzZXJidWY6IHVzZXIgYnVmZmVyIHRvIGNvcHkgZGF0YSBmcm9tICAoTk9UIE5VTEwpCisgKiBAYWxsb2Nfc2l6ZTogc2l6ZSBvZiB1c2VyIGJ1ZmZlcgorICogQGNvcHlfc2l6ZTogc2l6ZSBvZiBkYXRhIHRvIGNvcHkgZnJvbSB1c2VyIGJ1ZmZlcgorICogQHBvczogcG9zaXRpb24gd3JpdGUgaXMgYXQgaW4gdGhlIGZpbGUgKE5PVCBOVUxMKQorICoKKyAqIFJldHVybnM6IGtlcm5lbCBidWZmZXIgY29udGFpbmluZyBjb3B5IG9mIHVzZXIgYnVmZmVyIGRhdGEgb3IgYW4KKyAqICAgICAgICAgIEVSUl9QVFIgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGNoYXIgKmFhX3NpbXBsZV93cml0ZV90b19idWZmZXIoaW50IG9wLCBjb25zdCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKKwkJCQkgICAgICAgc2l6ZV90IGFsbG9jX3NpemUsIHNpemVfdCBjb3B5X3NpemUsCisJCQkJICAgICAgIGxvZmZfdCAqcG9zKQoreworCWNoYXIgKmRhdGE7CisKKwlpZiAoKnBvcyAhPSAwKQorCQkvKiBvbmx5IHdyaXRlcyBmcm9tIHBvcyAwLCB0aGF0IGlzIGNvbXBsZXRlIHdyaXRlcyAqLworCQlyZXR1cm4gRVJSX1BUUigtRVNQSVBFKTsKKworCS8qCisJICogRG9uJ3QgYWxsb3cgcHJvZmlsZSBsb2FkL3JlcGxhY2UvcmVtb3ZlIGZyb20gcHJvZmlsZXMgdGhhdCBkb24ndAorCSAqIGhhdmUgQ0FQX01BQ19BRE1JTgorCSAqLworCWlmICghYWFfbWF5X21hbmFnZV9wb2xpY3kob3ApKQorCQlyZXR1cm4gRVJSX1BUUigtRUFDQ0VTKTsKKworCS8qIGZyZWVkIGJ5IGNhbGxlciB0byBzaW1wbGVfd3JpdGVfdG9fYnVmZmVyICovCisJZGF0YSA9IGt2bWFsbG9jKGFsbG9jX3NpemUpOworCWlmIChkYXRhID09IE5VTEwpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJaWYgKGNvcHlfZnJvbV91c2VyKGRhdGEsIHVzZXJidWYsIGNvcHlfc2l6ZSkpIHsKKwkJa3ZmcmVlKGRhdGEpOworCQlyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTsKKwl9CisKKwlyZXR1cm4gZGF0YTsKK30KKworCisvKiAubG9hZCBmaWxlIGhvb2sgZm4gdG8gbG9hZCBwb2xpY3kgKi8KK3N0YXRpYyBzc2l6ZV90IHByb2ZpbGVfbG9hZChzdHJ1Y3QgZmlsZSAqZiwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IHNpemUsCisJCQkgICAgbG9mZl90ICpwb3MpCit7CisJY2hhciAqZGF0YTsKKwlzc2l6ZV90IGVycm9yOworCisJZGF0YSA9IGFhX3NpbXBsZV93cml0ZV90b19idWZmZXIoT1BfUFJPRl9MT0FELCBidWYsIHNpemUsIHNpemUsIHBvcyk7CisKKwllcnJvciA9IFBUUl9FUlIoZGF0YSk7CisJaWYgKCFJU19FUlIoZGF0YSkpIHsKKwkJZXJyb3IgPSBhYV9yZXBsYWNlX3Byb2ZpbGVzKGRhdGEsIHNpemUsIFBST0ZfQUREKTsKKwkJa3ZmcmVlKGRhdGEpOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWFfZnNfcHJvZmlsZV9sb2FkID0geworCS53cml0ZSA9IHByb2ZpbGVfbG9hZAorfTsKKworLyogLnJlcGxhY2UgZmlsZSBob29rIGZuIHRvIGxvYWQgYW5kL29yIHJlcGxhY2UgcG9saWN5ICovCitzdGF0aWMgc3NpemVfdCBwcm9maWxlX3JlcGxhY2Uoc3RydWN0IGZpbGUgKmYsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgICAgICAgc2l6ZV90IHNpemUsIGxvZmZfdCAqcG9zKQoreworCWNoYXIgKmRhdGE7CisJc3NpemVfdCBlcnJvcjsKKworCWRhdGEgPSBhYV9zaW1wbGVfd3JpdGVfdG9fYnVmZmVyKE9QX1BST0ZfUkVQTCwgYnVmLCBzaXplLCBzaXplLCBwb3MpOworCWVycm9yID0gUFRSX0VSUihkYXRhKTsKKwlpZiAoIUlTX0VSUihkYXRhKSkgeworCQllcnJvciA9IGFhX3JlcGxhY2VfcHJvZmlsZXMoZGF0YSwgc2l6ZSwgUFJPRl9SRVBMQUNFKTsKKwkJa3ZmcmVlKGRhdGEpOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWFfZnNfcHJvZmlsZV9yZXBsYWNlID0geworCS53cml0ZSA9IHByb2ZpbGVfcmVwbGFjZQorfTsKKworLyogLnJlbW92ZSBmaWxlIGhvb2sgZm4gdG8gcmVtb3ZlIGxvYWRlZCBwb2xpY3kgKi8KK3N0YXRpYyBzc2l6ZV90IHByb2ZpbGVfcmVtb3ZlKHN0cnVjdCBmaWxlICpmLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICAgICAgc2l6ZV90IHNpemUsIGxvZmZfdCAqcG9zKQoreworCWNoYXIgKmRhdGE7CisJc3NpemVfdCBlcnJvcjsKKworCS8qCisJICogYWFfcmVtb3ZlX3Byb2ZpbGUgbmVlZHMgYSBudWxsIHRlcm1pbmF0ZWQgc3RyaW5nIHNvIDEgZXh0cmEKKwkgKiBieXRlIGlzIGFsbG9jYXRlZCBhbmQgdGhlIGNvcGllZCBkYXRhIGlzIG51bGwgdGVybWluYXRlZC4KKwkgKi8KKwlkYXRhID0gYWFfc2ltcGxlX3dyaXRlX3RvX2J1ZmZlcihPUF9QUk9GX1JNLCBidWYsIHNpemUgKyAxLCBzaXplLCBwb3MpOworCisJZXJyb3IgPSBQVFJfRVJSKGRhdGEpOworCWlmICghSVNfRVJSKGRhdGEpKSB7CisJCWRhdGFbc2l6ZV0gPSAwOworCQllcnJvciA9IGFhX3JlbW92ZV9wcm9maWxlcyhkYXRhLCBzaXplKTsKKwkJa3ZmcmVlKGRhdGEpOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWFfZnNfcHJvZmlsZV9yZW1vdmUgPSB7CisJLndyaXRlID0gcHJvZmlsZV9yZW1vdmUKK307CisKKy8qKiBCYXNlIGZpbGUgc3lzdGVtIHNldHVwICoqLworCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqYWFfZnNfZGVudHJ5IF9faW5pdGRhdGE7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhYWZzX3JlbW92ZShjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKworCWRlbnRyeSA9IGxvb2t1cF9vbmVfbGVuKG5hbWUsIGFhX2ZzX2RlbnRyeSwgc3RybGVuKG5hbWUpKTsKKwlpZiAoIUlTX0VSUihkZW50cnkpKSB7CisJCXNlY3VyaXR5ZnNfcmVtb3ZlKGRlbnRyeSk7CisJCWRwdXQoZGVudHJ5KTsKKwl9Cit9CisKKy8qKgorICogYWFmc19jcmVhdGUgLSBjcmVhdGUgYW4gZW50cnkgaW4gdGhlIGFwcGFybW9yIGZpbGVzeXN0ZW0KKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBlbnRyeSAoTk9UIE5VTEwpCisgKiBAbWFzazogZmlsZSBwZXJtaXNzaW9uIG1hc2sgb2YgdGhlIGZpbGUKKyAqIEBmb3BzOiBmaWxlIG9wZXJhdGlvbnMgZm9yIHRoZSBmaWxlIChOT1QgTlVMTCkKKyAqCisgKiBVc2VkIGFhZnNfcmVtb3ZlIHRvIHJlbW92ZSBlbnRyaWVzIGNyZWF0ZWQgd2l0aCB0aGlzIGZuLgorICovCitzdGF0aWMgaW50IF9faW5pdCBhYWZzX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLCBpbnQgbWFzaywKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMpCit7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5OworCisJZGVudHJ5ID0gc2VjdXJpdHlmc19jcmVhdGVfZmlsZShuYW1lLCBTX0lGUkVHIHwgbWFzaywgYWFfZnNfZGVudHJ5LAorCQkJCQlOVUxMLCBmb3BzKTsKKworCXJldHVybiBJU19FUlIoZGVudHJ5KSA/IFBUUl9FUlIoZGVudHJ5KSA6IDA7Cit9CisKKy8qKgorICogYWFfZGVzdHJveV9hYWZzIC0gY2xlYW51cCBhbmQgZnJlZSBhYWZzCisgKgorICogcmVsZWFzZXMgZGVudHJpZXMgYWxsb2NhdGVkIGJ5IGFhX2NyZWF0ZV9hYWZzCisgKi8KK3ZvaWQgX19pbml0IGFhX2Rlc3Ryb3lfYWFmcyh2b2lkKQoreworCWlmIChhYV9mc19kZW50cnkpIHsKKwkJYWFmc19yZW1vdmUoIi5yZW1vdmUiKTsKKwkJYWFmc19yZW1vdmUoIi5yZXBsYWNlIik7CisJCWFhZnNfcmVtb3ZlKCIubG9hZCIpOworCisJCXNlY3VyaXR5ZnNfcmVtb3ZlKGFhX2ZzX2RlbnRyeSk7CisJCWFhX2ZzX2RlbnRyeSA9IE5VTEw7CisJfQorfQorCisvKioKKyAqIGFhX2NyZWF0ZV9hYWZzIC0gY3JlYXRlIHRoZSBhcHBhcm1vciBzZWN1cml0eSBmaWxlc3lzdGVtCisgKgorICogZGVudHJpZXMgY3JlYXRlZCBoZXJlIGFyZSByZWxlYXNlZCBieSBhYV9kZXN0cm95X2FhZnMKKyAqCisgKiBSZXR1cm5zOiBlcnJvciBvbiBmYWlsdXJlCisgKi8KK2ludCBfX2luaXQgYWFfY3JlYXRlX2FhZnModm9pZCkKK3sKKwlpbnQgZXJyb3I7CisKKwlpZiAoIWFwcGFybW9yX2luaXRpYWxpemVkKQorCQlyZXR1cm4gMDsKKworCWlmIChhYV9mc19kZW50cnkpIHsKKwkJQUFfRVJST1IoIiVzOiBBcHBBcm1vciBzZWN1cml0eWZzIGFscmVhZHkgZXhpc3RzXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUVYSVNUOworCX0KKworCWFhX2ZzX2RlbnRyeSA9IHNlY3VyaXR5ZnNfY3JlYXRlX2RpcigiYXBwYXJtb3IiLCBOVUxMKTsKKwlpZiAoSVNfRVJSKGFhX2ZzX2RlbnRyeSkpIHsKKwkJZXJyb3IgPSBQVFJfRVJSKGFhX2ZzX2RlbnRyeSk7CisJCWFhX2ZzX2RlbnRyeSA9IE5VTEw7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZXJyb3IgPSBhYWZzX2NyZWF0ZSgiLmxvYWQiLCAwNjQwLCAmYWFfZnNfcHJvZmlsZV9sb2FkKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXJyb3I7CisJZXJyb3IgPSBhYWZzX2NyZWF0ZSgiLnJlcGxhY2UiLCAwNjQwLCAmYWFfZnNfcHJvZmlsZV9yZXBsYWNlKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXJyb3I7CisJZXJyb3IgPSBhYWZzX2NyZWF0ZSgiLnJlbW92ZSIsIDA2NDAsICZhYV9mc19wcm9maWxlX3JlbW92ZSk7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycm9yOworCisJLyogVE9ETzogYWRkIHN1cHBvcnQgZm9yIGFwcGFybW9yZnNfbnVsbCBhbmQgYXBwYXJtb3Jmc19tbnQgKi8KKworCS8qIFJlcG9ydCB0aGF0IEFwcEFybW9yIGZzIGlzIGVuYWJsZWQgKi8KKwlhYV9pbmZvX21lc3NhZ2UoIkFwcEFybW9yIEZpbGVzeXN0ZW0gRW5hYmxlZCIpOworCXJldHVybiAwOworCitlcnJvcjoKKwlhYV9kZXN0cm95X2FhZnMoKTsKKwlBQV9FUlJPUigiRXJyb3IgY3JlYXRpbmcgQXBwQXJtb3Igc2VjdXJpdHlmc1xuIik7CisJcmV0dXJuIGVycm9yOworfQorCitmc19pbml0Y2FsbChhYV9jcmVhdGVfYWFmcyk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9hcHBhcm1vci9hdWRpdC5jIGIvc2VjdXJpdHkvYXBwYXJtb3IvYXVkaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjUwMmIyCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvYXBwYXJtb3IvYXVkaXQuYwpAQCAtMCwwICsxLDIxNSBAQAorLyoKKyAqIEFwcEFybW9yIHNlY3VyaXR5IG1vZHVsZQorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBBcHBBcm1vciBhdWRpdGluZyBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOCBOb3ZlbGwvU1VTRQorICogQ29weXJpZ2h0IDIwMDktMjAxMCBDYW5vbmljYWwgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKworI2luY2x1ZGUgImluY2x1ZGUvYXBwYXJtb3IuaCIKKyNpbmNsdWRlICJpbmNsdWRlL2F1ZGl0LmgiCisjaW5jbHVkZSAiaW5jbHVkZS9wb2xpY3kuaCIKKworY29uc3QgY2hhciAqb3BfdGFibGVbXSA9IHsKKwkibnVsbCIsCisKKwkic3lzY3RsIiwKKwkiY2FwYWJsZSIsCisKKwkidW5saW5rIiwKKwkibWtkaXIiLAorCSJybWRpciIsCisJIm1rbm9kIiwKKwkidHJ1bmNhdGUiLAorCSJsaW5rIiwKKwkic3ltbGluayIsCisJInJlbmFtZV9zcmMiLAorCSJyZW5hbWVfZGVzdCIsCisJImNobW9kIiwKKwkiY2hvd24iLAorCSJnZXRhdHRyIiwKKwkib3BlbiIsCisKKwkiZmlsZV9wZXJtIiwKKwkiZmlsZV9sb2NrIiwKKwkiZmlsZV9tbWFwIiwKKwkiZmlsZV9tcHJvdGVjdCIsCisKKwkiY3JlYXRlIiwKKwkicG9zdF9jcmVhdGUiLAorCSJiaW5kIiwKKwkiY29ubmVjdCIsCisJImxpc3RlbiIsCisJImFjY2VwdCIsCisJInNlbmRtc2ciLAorCSJyZWN2bXNnIiwKKwkiZ2V0c29ja25hbWUiLAorCSJnZXRwZWVybmFtZSIsCisJImdldHNvY2tvcHQiLAorCSJzZXRzb2Nrb3B0IiwKKwkic29ja2V0X3NodXRkb3duIiwKKworCSJwdHJhY2UiLAorCisJImV4ZWMiLAorCSJjaGFuZ2VfaGF0IiwKKwkiY2hhbmdlX3Byb2ZpbGUiLAorCSJjaGFuZ2Vfb25leGVjIiwKKworCSJzZXRwcm9jYXR0ciIsCisJInNldHJsaW1pdCIsCisKKwkicHJvZmlsZV9yZXBsYWNlIiwKKwkicHJvZmlsZV9sb2FkIiwKKwkicHJvZmlsZV9yZW1vdmUiCit9OworCitjb25zdCBjaGFyICphdWRpdF9tb2RlX25hbWVzW10gPSB7CisJIm5vcm1hbCIsCisJInF1aWV0X2RlbmllZCIsCisJInF1aWV0IiwKKwkibm9xdWlldCIsCisJImFsbCIKK307CisKK3N0YXRpYyBjaGFyICphYV9hdWRpdF90eXBlW10gPSB7CisJIkFVRElUIiwKKwkiQUxMT1dFRCIsCisJIkRFTklFRCIsCisJIkhJTlQiLAorCSJTVEFUVVMiLAorCSJFUlJPUiIsCisJIktJTExFRCIKK307CisKKy8qCisgKiBDdXJyZW50bHkgQXBwQXJtb3IgYXVkaXRpbmcgaXMgZmVkIHN0cmFpZ2h0IGludG8gdGhlIGF1ZGl0IGZyYW1ld29yay4KKyAqCisgKiBUT0RPOgorICogbmV0bGluayBpbnRlcmZhY2UgZm9yIGNvbXBsYWluIG1vZGUKKyAqIHVzZXIgYXVkaXRpbmcsIC0gc2VuZCB1c2VyIGF1ZGl0aW5nIHRvIG5ldGxpbmsgaW50ZXJmYWNlCisgKiBzeXN0ZW0gY29udHJvbCBvZiB3aGV0aGVyIHVzZXIgYXVkaXQgbWVzc2FnZXMgZ28gdG8gc3lzdGVtIGxvZworICovCisKKy8qKgorICogYXVkaXRfYmFzZSAtIGNvcmUgQXBwQXJtb3IgZnVuY3Rpb24uCisgKiBAYWI6IGF1ZGl0IGJ1ZmZlciB0byBmaWxsIChOT1QgTlVMTCkKKyAqIEBjYTogYXVkaXQgc3RydWN0dXJlIGNvbnRhaW5pbmcgZGF0YSB0byBhdWRpdCAoTk9UIE5VTEwpCisgKgorICogUmVjb3JkIGNvbW1vbiBBcHBBcm1vciBhdWRpdCBkYXRhIGZyb20gQHNhCisgKi8KK3N0YXRpYyB2b2lkIGF1ZGl0X3ByZShzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYiwgdm9pZCAqY2EpCit7CisJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICpzYSA9IGNhOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gc2EtPnRzayA/IHNhLT50c2sgOiBjdXJyZW50OworCisJaWYgKGFhX2dfYXVkaXRfaGVhZGVyKSB7CisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJhcHBhcm1vcj0iKTsKKwkJYXVkaXRfbG9nX3N0cmluZyhhYiwgYWFfYXVkaXRfdHlwZVtzYS0+YWFkLnR5cGVdKTsKKwl9CisKKwlpZiAoc2EtPmFhZC5vcCkgeworCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG9wZXJhdGlvbj0iKTsKKwkJYXVkaXRfbG9nX3N0cmluZyhhYiwgb3BfdGFibGVbc2EtPmFhZC5vcF0pOworCX0KKworCWlmIChzYS0+YWFkLmluZm8pIHsKKwkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBpbmZvPSIpOworCQlhdWRpdF9sb2dfc3RyaW5nKGFiLCBzYS0+YWFkLmluZm8pOworCQlpZiAoc2EtPmFhZC5lcnJvcikKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgZXJyb3I9JWQiLCBzYS0+YWFkLmVycm9yKTsKKwl9CisKKwlpZiAoc2EtPmFhZC5wcm9maWxlKSB7CisJCXN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlID0gc2EtPmFhZC5wcm9maWxlOworCQlwaWRfdCBwaWQ7CisJCXJjdV9yZWFkX2xvY2soKTsKKwkJcGlkID0gdHNrLT5yZWFsX3BhcmVudC0+cGlkOworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBwYXJlbnQ9JWQiLCBwaWQpOworCQlpZiAocHJvZmlsZS0+bnMgIT0gcm9vdF9ucykgeworCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBuYW1lc3BhY2U9Iik7CisJCQlhdWRpdF9sb2dfdW50cnVzdGVkc3RyaW5nKGFiLCBwcm9maWxlLT5ucy0+YmFzZS5obmFtZSk7CisJCX0KKwkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBwcm9maWxlPSIpOworCQlhdWRpdF9sb2dfdW50cnVzdGVkc3RyaW5nKGFiLCBwcm9maWxlLT5iYXNlLmhuYW1lKTsKKwl9CisKKwlpZiAoc2EtPmFhZC5uYW1lKSB7CisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgbmFtZT0iKTsKKwkJYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhhYiwgc2EtPmFhZC5uYW1lKTsKKwl9Cit9CisKKy8qKgorICogYWFfYXVkaXRfbXNnIC0gTG9nIGEgbWVzc2FnZSB0byB0aGUgYXVkaXQgc3Vic3lzdGVtCisgKiBAc2E6IGF1ZGl0IGV2ZW50IHN0cnVjdHVyZSAoTk9UIE5VTEwpCisgKiBAY2I6IG9wdGlvbmFsIGNhbGxiYWNrIGZuIGZvciB0eXBlIHNwZWNpZmljIGZpZWxkcyAoTUFZQkUgTlVMTCkKKyAqLwordm9pZCBhYV9hdWRpdF9tc2coaW50IHR5cGUsIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqc2EsCisJCSAgdm9pZCAoKmNiKSAoc3RydWN0IGF1ZGl0X2J1ZmZlciAqLCB2b2lkICopKQoreworCXNhLT5hYWQudHlwZSA9IHR5cGU7CisJc2EtPmxzbV9wcmVfYXVkaXQgPSBhdWRpdF9wcmU7CisJc2EtPmxzbV9wb3N0X2F1ZGl0ID0gY2I7CisJY29tbW9uX2xzbV9hdWRpdChzYSk7Cit9CisKKy8qKgorICogYWFfYXVkaXQgLSBMb2cgYSBwcm9maWxlIGJhc2VkIGF1ZGl0IGV2ZW50IHRvIHRoZSBhdWRpdCBzdWJzeXN0ZW0KKyAqIEB0eXBlOiBhdWRpdCB0eXBlIGZvciB0aGUgbWVzc2FnZQorICogQHByb2ZpbGU6IHByb2ZpbGUgdG8gY2hlY2sgYWdhaW5zdCAoTk9UIE5VTEwpCisgKiBAZ2ZwOiBhbGxvY2F0aW9uIGZsYWdzIHRvIHVzZQorICogQHNhOiBhdWRpdCBldmVudCAoTk9UIE5VTEwpCisgKiBAY2I6IG9wdGlvbmFsIGNhbGxiYWNrIGZuIGZvciB0eXBlIHNwZWNpZmljIGZpZWxkcyAoTUFZQkUgTlVMTCkKKyAqCisgKiBIYW5kbGUgZGVmYXVsdCBtZXNzYWdlIHN3aXRjaGluZyBiYXNlZCBvZmYgb2YgYXVkaXQgbW9kZSBmbGFncworICoKKyAqIFJldHVybnM6IGVycm9yIG9uIGZhaWx1cmUKKyAqLworaW50IGFhX2F1ZGl0KGludCB0eXBlLCBzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSwgZ2ZwX3QgZ2ZwLAorCSAgICAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICpzYSwKKwkgICAgIHZvaWQgKCpjYikgKHN0cnVjdCBhdWRpdF9idWZmZXIgKiwgdm9pZCAqKSkKK3sKKwlCVUdfT04oIXByb2ZpbGUpOworCisJaWYgKHR5cGUgPT0gQVVESVRfQVBQQVJNT1JfQVVUTykgeworCQlpZiAobGlrZWx5KCFzYS0+YWFkLmVycm9yKSkgeworCQkJaWYgKEFVRElUX01PREUocHJvZmlsZSkgIT0gQVVESVRfQUxMKQorCQkJCXJldHVybiAwOworCQkJdHlwZSA9IEFVRElUX0FQUEFSTU9SX0FVRElUOworCQl9IGVsc2UgaWYgKENPTVBMQUlOX01PREUocHJvZmlsZSkpCisJCQl0eXBlID0gQVVESVRfQVBQQVJNT1JfQUxMT1dFRDsKKwkJZWxzZQorCQkJdHlwZSA9IEFVRElUX0FQUEFSTU9SX0RFTklFRDsKKwl9CisJaWYgKEFVRElUX01PREUocHJvZmlsZSkgPT0gQVVESVRfUVVJRVQgfHwKKwkgICAgKHR5cGUgPT0gQVVESVRfQVBQQVJNT1JfREVOSUVEICYmCisJICAgICBBVURJVF9NT0RFKHByb2ZpbGUpID09IEFVRElUX1FVSUVUKSkKKwkJcmV0dXJuIHNhLT5hYWQuZXJyb3I7CisKKwlpZiAoS0lMTF9NT0RFKHByb2ZpbGUpICYmIHR5cGUgPT0gQVVESVRfQVBQQVJNT1JfREVOSUVEKQorCQl0eXBlID0gQVVESVRfQVBQQVJNT1JfS0lMTDsKKworCWlmICghdW5jb25maW5lZChwcm9maWxlKSkKKwkJc2EtPmFhZC5wcm9maWxlID0gcHJvZmlsZTsKKworCWFhX2F1ZGl0X21zZyh0eXBlLCBzYSwgY2IpOworCisJaWYgKHNhLT5hYWQudHlwZSA9PSBBVURJVF9BUFBBUk1PUl9LSUxMKQorCQkodm9pZClzZW5kX3NpZ19pbmZvKFNJR0tJTEwsIE5VTEwsIHNhLT50c2sgPyBzYS0+dHNrIDogY3VycmVudCk7CisKKwlpZiAoc2EtPmFhZC50eXBlID09IEFVRElUX0FQUEFSTU9SX0FMTE9XRUQpCisJCXJldHVybiBjb21wbGFpbl9lcnJvcihzYS0+YWFkLmVycm9yKTsKKworCXJldHVybiBzYS0+YWFkLmVycm9yOworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvYXBwYXJtb3IvY2FwYWJpbGl0eS5jIGIvc2VjdXJpdHkvYXBwYXJtb3IvY2FwYWJpbGl0eS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ODJjNDgKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9hcHBhcm1vci9jYXBhYmlsaXR5LmMKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBBcHBBcm1vciBzZWN1cml0eSBtb2R1bGUKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgQXBwQXJtb3IgY2FwYWJpbGl0eSBtZWRpYXRpb24gZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDggTm92ZWxsL1NVU0UKKyAqIENvcHlyaWdodCAyMDA5LTIwMTAgQ2Fub25pY2FsIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgorCisjaW5jbHVkZSAiaW5jbHVkZS9hcHBhcm1vci5oIgorI2luY2x1ZGUgImluY2x1ZGUvY2FwYWJpbGl0eS5oIgorI2luY2x1ZGUgImluY2x1ZGUvY29udGV4dC5oIgorI2luY2x1ZGUgImluY2x1ZGUvcG9saWN5LmgiCisjaW5jbHVkZSAiaW5jbHVkZS9hdWRpdC5oIgorCisvKgorICogVGFibGUgb2YgY2FwYWJpbGl0eSBuYW1lczogd2UgZ2VuZXJhdGUgaXQgZnJvbSBjYXBhYmlsaXRpZXMuaC4KKyAqLworI2luY2x1ZGUgImNhcGFiaWxpdHlfbmFtZXMuaCIKKworc3RydWN0IGF1ZGl0X2NhY2hlIHsKKwlzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZTsKKwlrZXJuZWxfY2FwX3QgY2FwczsKK307CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgYXVkaXRfY2FjaGUsIGF1ZGl0X2NhY2hlKTsKKworLyoqCisgKiBhdWRpdF9jYiAtIGNhbGwgYmFjayBmb3IgY2FwYWJpbGl0eSBjb21wb25lbnRzIG9mIGF1ZGl0IHN0cnVjdAorICogQGFiIC0gYXVkaXQgYnVmZmVyICAgKE5PVCBOVUxMKQorICogQHZhIC0gYXVkaXQgc3RydWN0IHRvIGF1ZGl0IGRhdGEgZnJvbSAgKE5PVCBOVUxMKQorICovCitzdGF0aWMgdm9pZCBhdWRpdF9jYihzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYiwgdm9pZCAqdmEpCit7CisJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICpzYSA9IHZhOworCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgY2FwbmFtZT0iKTsKKwlhdWRpdF9sb2dfdW50cnVzdGVkc3RyaW5nKGFiLCBjYXBhYmlsaXR5X25hbWVzW3NhLT51LmNhcF0pOworfQorCisvKioKKyAqIGF1ZGl0X2NhcHMgLSBhdWRpdCBhIGNhcGFiaWxpdHkKKyAqIEBwcm9maWxlOiBwcm9maWxlIGNvbmZpbmluZyB0YXNrIChOT1QgTlVMTCkKKyAqIEB0YXNrOiB0YXNrIGNhcGFiaWxpdHkgdGVzdCB3YXMgcGVyZm9ybWVkIGFnYWluc3QgKE5PVCBOVUxMKQorICogQGNhcDogY2FwYWJpbGl0eSB0ZXN0ZWQKKyAqIEBlcnJvcjogZXJyb3IgY29kZSByZXR1cm5lZCBieSB0ZXN0CisgKgorICogRG8gYXVkaXRpbmcgb2YgY2FwYWJpbGl0eSBhbmQgaGFuZGxlLCBhdWRpdC9jb21wbGFpbi9raWxsIG1vZGVzIHN3aXRjaGluZworICogYW5kIGR1cGxpY2F0ZSBtZXNzYWdlIGVsaW1pbmF0aW9uLgorICoKKyAqIFJldHVybnM6IDAgb3Igc2EtPmVycm9yIG9uIHN1Y2Nlc3MsICBlcnJvciBjb2RlIG9uIGZhaWx1cmUKKyAqLworc3RhdGljIGludCBhdWRpdF9jYXBzKHN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCSAgICAgIGludCBjYXAsIGludCBlcnJvcikKK3sKKwlzdHJ1Y3QgYXVkaXRfY2FjaGUgKmVudDsKKwlpbnQgdHlwZSA9IEFVRElUX0FQUEFSTU9SX0FVVE87CisJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIHNhOworCUNPTU1PTl9BVURJVF9EQVRBX0lOSVQoJnNhLCBDQVApOworCXNhLnRzayA9IHRhc2s7CisJc2EudS5jYXAgPSBjYXA7CisJc2EuYWFkLm9wID0gT1BfQ0FQQUJMRTsKKwlzYS5hYWQuZXJyb3IgPSBlcnJvcjsKKworCWlmIChsaWtlbHkoIWVycm9yKSkgeworCQkvKiB0ZXN0IGlmIGF1ZGl0aW5nIGlzIGJlaW5nIGZvcmNlZCAqLworCQlpZiAobGlrZWx5KChBVURJVF9NT0RFKHByb2ZpbGUpICE9IEFVRElUX0FMTCkgJiYKKwkJCSAgICFjYXBfcmFpc2VkKHByb2ZpbGUtPmNhcHMuYXVkaXQsIGNhcCkpKQorCQkJcmV0dXJuIDA7CisJCXR5cGUgPSBBVURJVF9BUFBBUk1PUl9BVURJVDsKKwl9IGVsc2UgaWYgKEtJTExfTU9ERShwcm9maWxlKSB8fAorCQkgICBjYXBfcmFpc2VkKHByb2ZpbGUtPmNhcHMua2lsbCwgY2FwKSkgeworCQl0eXBlID0gQVVESVRfQVBQQVJNT1JfS0lMTDsKKwl9IGVsc2UgaWYgKGNhcF9yYWlzZWQocHJvZmlsZS0+Y2Fwcy5xdWlldCwgY2FwKSAmJgorCQkgICBBVURJVF9NT0RFKHByb2ZpbGUpICE9IEFVRElUX05PUVVJRVQgJiYKKwkJICAgQVVESVRfTU9ERShwcm9maWxlKSAhPSBBVURJVF9BTEwpIHsKKwkJLyogcXVpZXQgYXVkaXRpbmcgKi8KKwkJcmV0dXJuIGVycm9yOworCX0KKworCS8qIERvIHNpbXBsZSBkdXBsaWNhdGUgbWVzc2FnZSBlbGltaW5hdGlvbiAqLworCWVudCA9ICZnZXRfY3B1X3ZhcihhdWRpdF9jYWNoZSk7CisJaWYgKHByb2ZpbGUgPT0gZW50LT5wcm9maWxlICYmIGNhcF9yYWlzZWQoZW50LT5jYXBzLCBjYXApKSB7CisJCXB1dF9jcHVfdmFyKGF1ZGl0X2NhY2hlKTsKKwkJaWYgKENPTVBMQUlOX01PREUocHJvZmlsZSkpCisJCQlyZXR1cm4gY29tcGxhaW5fZXJyb3IoZXJyb3IpOworCQlyZXR1cm4gZXJyb3I7CisJfSBlbHNlIHsKKwkJYWFfcHV0X3Byb2ZpbGUoZW50LT5wcm9maWxlKTsKKwkJZW50LT5wcm9maWxlID0gYWFfZ2V0X3Byb2ZpbGUocHJvZmlsZSk7CisJCWNhcF9yYWlzZShlbnQtPmNhcHMsIGNhcCk7CisJfQorCXB1dF9jcHVfdmFyKGF1ZGl0X2NhY2hlKTsKKworCXJldHVybiBhYV9hdWRpdCh0eXBlLCBwcm9maWxlLCBHRlBfQVRPTUlDLCAmc2EsIGF1ZGl0X2NiKTsKK30KKworLyoqCisgKiBwcm9maWxlX2NhcGFibGUgLSB0ZXN0IGlmIHByb2ZpbGUgYWxsb3dzIHVzZSBvZiBjYXBhYmlsaXR5IEBjYXAKKyAqIEBwcm9maWxlOiBwcm9maWxlIGJlaW5nIGVuZm9yY2VkICAgIChOT1QgTlVMTCwgTk9UIHVuY29uZmluZWQpCisgKiBAY2FwOiBjYXBhYmlsaXR5IHRvIHRlc3QgaWYgYWxsb3dlZAorICoKKyAqIFJldHVybnM6IDAgaWYgYWxsb3dlZCBlbHNlIC1FUEVSTQorICovCitzdGF0aWMgaW50IHByb2ZpbGVfY2FwYWJsZShzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSwgaW50IGNhcCkKK3sKKwlyZXR1cm4gY2FwX3JhaXNlZChwcm9maWxlLT5jYXBzLmFsbG93LCBjYXApID8gMCA6IC1FUEVSTTsKK30KKworLyoqCisgKiBhYV9jYXBhYmxlIC0gdGVzdCBwZXJtaXNzaW9uIHRvIHVzZSBjYXBhYmlsaXR5CisgKiBAdGFzazogdGFzayBkb2luZyBjYXBhYmlsaXR5IHRlc3QgYWdhaW5zdCAoTk9UIE5VTEwpCisgKiBAcHJvZmlsZTogcHJvZmlsZSBjb25maW5pbmcgQHRhc2sgKE5PVCBOVUxMKQorICogQGNhcDogY2FwYWJpbGl0eSB0byBiZSB0ZXN0ZWQKKyAqIEBhdWRpdDogd2hldGhlciBhbiBhdWRpdCByZWNvcmQgc2hvdWxkIGJlIGdlbmVyYXRlZAorICoKKyAqIExvb2sgdXAgY2FwYWJpbGl0eSBpbiBwcm9maWxlIGNhcGFiaWxpdHkgc2V0LgorICoKKyAqIFJldHVybnM6IDAgb24gc3VjY2Vzcywgb3IgZWxzZSBhbiBlcnJvciBjb2RlLgorICovCitpbnQgYWFfY2FwYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlLCBpbnQgY2FwLAorCSAgICAgICBpbnQgYXVkaXQpCit7CisJaW50IGVycm9yID0gcHJvZmlsZV9jYXBhYmxlKHByb2ZpbGUsIGNhcCk7CisKKwlpZiAoIWF1ZGl0KSB7CisJCWlmIChDT01QTEFJTl9NT0RFKHByb2ZpbGUpKQorCQkJcmV0dXJuIGNvbXBsYWluX2Vycm9yKGVycm9yKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCXJldHVybiBhdWRpdF9jYXBzKHByb2ZpbGUsIHRhc2ssIGNhcCwgZXJyb3IpOworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvYXBwYXJtb3IvY29udGV4dC5jIGIvc2VjdXJpdHkvYXBwYXJtb3IvY29udGV4dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhOWI1MDIKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9hcHBhcm1vci9jb250ZXh0LmMKQEAgLTAsMCArMSwyMTYgQEAKKy8qCisgKiBBcHBBcm1vciBzZWN1cml0eSBtb2R1bGUKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgQXBwQXJtb3IgZnVuY3Rpb25zIHVzZWQgdG8gbWFuaXB1bGF0ZSBvYmplY3Qgc2VjdXJpdHkKKyAqIGNvbnRleHRzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDA4IE5vdmVsbC9TVVNFCisgKiBDb3B5cmlnaHQgMjAwOS0yMDEwIENhbm9uaWNhbCBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqCisgKiBBcHBBcm1vciBzZXRzIGNvbmZpbmVtZW50IG9uIGV2ZXJ5IHRhc2ssIHZpYSB0aGUgdGhlIGFhX3Rhc2tfY3h0IGFuZAorICogdGhlIGFhX3Rhc2tfY3h0LnByb2ZpbGUsIGJvdGggb2Ygd2hpY2ggYXJlIHJlcXVpcmVkIGFuZCBhcmUgbm90IGFsbG93ZWQKKyAqIHRvIGJlIE5VTEwuICBUaGUgYWFfdGFza19jeHQgaXMgbm90IHJlZmVyZW5jZSBjb3VudGVkIGFuZCBpcyB1bmlxdWUKKyAqIHRvIGVhY2ggY3JlZCAod2hpY2ggaXMgcmVmZXJlbmNlIGNvdW50KS4gIFRoZSBwcm9maWxlIHBvaW50ZWQgdG8gYnkKKyAqIHRoZSB0YXNrX2N4dCBpcyByZWZlcmVuY2UgY291bnRlZC4KKyAqCisgKiBUT0RPCisgKiBJZiBhIHRhc2sgdXNlcyBjaGFuZ2VfaGF0IGl0IGN1cnJlbnRseSBkb2VzIG5vdCByZXR1cm4gdG8gdGhlIG9sZAorICogY3JlZCBvciB0YXNrIGNvbnRleHQgYnV0IGluc3RlYWQgY3JlYXRlcyBhIG5ldyBvbmUuICBJZGVhbGx5IHRoZSB0YXNrCisgKiBzaG91bGQgcmV0dXJuIHRvIHRoZSBwcmV2aW91cyBjcmVkIGlmIGl0IGhhcyBub3QgYmVlbiBtb2RpZmllZC4KKyAqCisgKi8KKworI2luY2x1ZGUgImluY2x1ZGUvY29udGV4dC5oIgorI2luY2x1ZGUgImluY2x1ZGUvcG9saWN5LmgiCisKKy8qKgorICogYWFfYWxsb2NfdGFza19jb250ZXh0IC0gYWxsb2NhdGUgYSBuZXcgdGFza19jeHQKKyAqIEBmbGFnczogZ2ZwIGZsYWdzIGZvciBhbGxvY2F0aW9uCisgKgorICogUmV0dXJuczogYWxsb2NhdGVkIGJ1ZmZlciBvciBOVUxMIG9uIGZhaWx1cmUKKyAqLworc3RydWN0IGFhX3Rhc2tfY3h0ICphYV9hbGxvY190YXNrX2NvbnRleHQoZ2ZwX3QgZmxhZ3MpCit7CisJcmV0dXJuIGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhYV90YXNrX2N4dCksIGZsYWdzKTsKK30KKworLyoqCisgKiBhYV9mcmVlX3Rhc2tfY29udGV4dCAtIGZyZWUgYSB0YXNrX2N4dAorICogQGN4dDogdGFza19jeHQgdG8gZnJlZSAoTUFZQkUgTlVMTCkKKyAqLwordm9pZCBhYV9mcmVlX3Rhc2tfY29udGV4dChzdHJ1Y3QgYWFfdGFza19jeHQgKmN4dCkKK3sKKwlpZiAoY3h0KSB7CisJCWFhX3B1dF9wcm9maWxlKGN4dC0+cHJvZmlsZSk7CisJCWFhX3B1dF9wcm9maWxlKGN4dC0+cHJldmlvdXMpOworCQlhYV9wdXRfcHJvZmlsZShjeHQtPm9uZXhlYyk7CisKKwkJa3pmcmVlKGN4dCk7CisJfQorfQorCisvKioKKyAqIGFhX2R1cF90YXNrX2NvbnRleHQgLSBkdXBsaWNhdGUgYSB0YXNrIGNvbnRleHQsIGluY3JlbWVudGluZyByZWZlcmVuY2UgY291bnRzCisgKiBAbmV3OiBhIGJsYW5rIHRhc2sgY29udGV4dCAgICAgIChOT1QgTlVMTCkKKyAqIEBvbGQ6IHRoZSB0YXNrIGNvbnRleHQgdG8gY29weSAgKE5PVCBOVUxMKQorICovCit2b2lkIGFhX2R1cF90YXNrX2NvbnRleHQoc3RydWN0IGFhX3Rhc2tfY3h0ICpuZXcsIGNvbnN0IHN0cnVjdCBhYV90YXNrX2N4dCAqb2xkKQoreworCSpuZXcgPSAqb2xkOworCWFhX2dldF9wcm9maWxlKG5ldy0+cHJvZmlsZSk7CisJYWFfZ2V0X3Byb2ZpbGUobmV3LT5wcmV2aW91cyk7CisJYWFfZ2V0X3Byb2ZpbGUobmV3LT5vbmV4ZWMpOworfQorCisvKioKKyAqIGFhX3JlcGxhY2VfY3VycmVudF9wcm9maWxlIC0gcmVwbGFjZSB0aGUgY3VycmVudCB0YXNrcyBwcm9maWxlcworICogQHByb2ZpbGU6IG5ldyBwcm9maWxlICAoTk9UIE5VTEwpCisgKgorICogUmV0dXJuczogMCBvciBlcnJvciBvbiBmYWlsdXJlCisgKi8KK2ludCBhYV9yZXBsYWNlX2N1cnJlbnRfcHJvZmlsZShzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSkKK3sKKwlzdHJ1Y3QgYWFfdGFza19jeHQgKmN4dCA9IGN1cnJlbnRfY3JlZCgpLT5zZWN1cml0eTsKKwlzdHJ1Y3QgY3JlZCAqbmV3OworCUJVR19PTighcHJvZmlsZSk7CisKKwlpZiAoY3h0LT5wcm9maWxlID09IHByb2ZpbGUpCisJCXJldHVybiAwOworCisJbmV3ICA9IHByZXBhcmVfY3JlZHMoKTsKKwlpZiAoIW5ldykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljeHQgPSBuZXctPnNlY3VyaXR5OworCWlmICh1bmNvbmZpbmVkKHByb2ZpbGUpIHx8IChjeHQtPnByb2ZpbGUtPm5zICE9IHByb2ZpbGUtPm5zKSkgeworCQkvKiBpZiBzd2l0Y2hpbmcgdG8gdW5jb25maW5lZCBvciBhIGRpZmZlcmVudCBwcm9maWxlIG5hbWVzcGFjZQorCQkgKiBjbGVhciBvdXQgY29udGV4dCBzdGF0ZQorCQkgKi8KKwkJYWFfcHV0X3Byb2ZpbGUoY3h0LT5wcmV2aW91cyk7CisJCWFhX3B1dF9wcm9maWxlKGN4dC0+b25leGVjKTsKKwkJY3h0LT5wcmV2aW91cyA9IE5VTEw7CisJCWN4dC0+b25leGVjID0gTlVMTDsKKwkJY3h0LT50b2tlbiA9IDA7CisJfQorCS8qIGJlIGNhcmVmdWwgc3dpdGNoaW5nIGN4dC0+cHJvZmlsZSwgd2hlbiByYWNpbmcgcmVwbGFjZW1lbnQgaXQKKwkgKiBpcyBwb3NzaWJsZSB0aGF0IGN4dC0+cHJvZmlsZS0+cmVwbGFjZWRieSBpcyB0aGUgcmVmZXJlbmNlIGtlZXBpbmcKKwkgKiBAcHJvZmlsZSB2YWxpZCwgc28gbWFrZSBzdXJlIHRvIGdldCBpdHMgcmVmZXJlbmNlIGJlZm9yZSBkcm9wcGluZworCSAqIHRoZSByZWZlcmVuY2Ugb24gY3h0LT5wcm9maWxlICovCisJYWFfZ2V0X3Byb2ZpbGUocHJvZmlsZSk7CisJYWFfcHV0X3Byb2ZpbGUoY3h0LT5wcm9maWxlKTsKKwljeHQtPnByb2ZpbGUgPSBwcm9maWxlOworCisJY29tbWl0X2NyZWRzKG5ldyk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYWFfc2V0X2N1cnJlbnRfb25leGVjIC0gc2V0IHRoZSB0YXNrcyBjaGFuZ2VfcHJvZmlsZSB0byBoYXBwZW4gb25leGVjCisgKiBAcHJvZmlsZTogc3lzdGVtIHByb2ZpbGUgdG8gc2V0IGF0IGV4ZWMgIChNQVlCRSBOVUxMIHRvIGNsZWFyIHZhbHVlKQorICoKKyAqIFJldHVybnM6IDAgb3IgZXJyb3Igb24gZmFpbHVyZQorICovCitpbnQgYWFfc2V0X2N1cnJlbnRfb25leGVjKHN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlKQoreworCXN0cnVjdCBhYV90YXNrX2N4dCAqY3h0OworCXN0cnVjdCBjcmVkICpuZXcgPSBwcmVwYXJlX2NyZWRzKCk7CisJaWYgKCFuZXcpCisJCXJldHVybiAtRU5PTUVNOworCisJY3h0ID0gbmV3LT5zZWN1cml0eTsKKwlhYV9nZXRfcHJvZmlsZShwcm9maWxlKTsKKwlhYV9wdXRfcHJvZmlsZShjeHQtPm9uZXhlYyk7CisJY3h0LT5vbmV4ZWMgPSBwcm9maWxlOworCisJY29tbWl0X2NyZWRzKG5ldyk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYWFfc2V0X2N1cnJlbnRfaGF0IC0gc2V0IHRoZSBjdXJyZW50IHRhc2tzIGhhdAorICogQHByb2ZpbGU6IHByb2ZpbGUgdG8gc2V0IGFzIHRoZSBjdXJyZW50IGhhdCAgKE5PVCBOVUxMKQorICogQHRva2VuOiB0b2tlbiB2YWx1ZSB0aGF0IG11c3QgYmUgc3BlY2lmaWVkIHRvIGNoYW5nZSBmcm9tIHRoZSBoYXQKKyAqCisgKiBEbyBzd2l0Y2ggb2YgdGFza3MgaGF0LiAgSWYgdGhlIHRhc2sgaXMgY3VycmVudGx5IGluIGEgaGF0CisgKiB2YWxpZGF0ZSB0aGUgdG9rZW4gdG8gbWF0Y2guCisgKgorICogUmV0dXJuczogMCBvciBlcnJvciBvbiBmYWlsdXJlCisgKi8KK2ludCBhYV9zZXRfY3VycmVudF9oYXQoc3RydWN0IGFhX3Byb2ZpbGUgKnByb2ZpbGUsIHU2NCB0b2tlbikKK3sKKwlzdHJ1Y3QgYWFfdGFza19jeHQgKmN4dDsKKwlzdHJ1Y3QgY3JlZCAqbmV3ID0gcHJlcGFyZV9jcmVkcygpOworCWlmICghbmV3KQorCQlyZXR1cm4gLUVOT01FTTsKKwlCVUdfT04oIXByb2ZpbGUpOworCisJY3h0ID0gbmV3LT5zZWN1cml0eTsKKwlpZiAoIWN4dC0+cHJldmlvdXMpIHsKKwkJLyogdHJhbnNmZXIgcmVmY291bnQgKi8KKwkJY3h0LT5wcmV2aW91cyA9IGN4dC0+cHJvZmlsZTsKKwkJY3h0LT50b2tlbiA9IHRva2VuOworCX0gZWxzZSBpZiAoY3h0LT50b2tlbiA9PSB0b2tlbikgeworCQlhYV9wdXRfcHJvZmlsZShjeHQtPnByb2ZpbGUpOworCX0gZWxzZSB7CisJCS8qIHByZXZpb3VzX3Byb2ZpbGUgJiYgY3h0LT50b2tlbiAhPSB0b2tlbiAqLworCQlhYm9ydF9jcmVkcyhuZXcpOworCQlyZXR1cm4gLUVBQ0NFUzsKKwl9CisJY3h0LT5wcm9maWxlID0gYWFfZ2V0X3Byb2ZpbGUoYWFfbmV3ZXN0X3ZlcnNpb24ocHJvZmlsZSkpOworCS8qIGNsZWFyIGV4ZWMgb24gc3dpdGNoaW5nIGNvbnRleHQgKi8KKwlhYV9wdXRfcHJvZmlsZShjeHQtPm9uZXhlYyk7CisJY3h0LT5vbmV4ZWMgPSBOVUxMOworCisJY29tbWl0X2NyZWRzKG5ldyk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYWFfcmVzdG9yZV9wcmV2aW91c19wcm9maWxlIC0gZXhpdCBmcm9tIGhhdCBjb250ZXh0IHJlc3RvcmluZyB0aGUgcHJvZmlsZQorICogQHRva2VuOiB0aGUgdG9rZW4gdGhhdCBtdXN0IGJlIG1hdGNoZWQgdG8gZXhpdCBoYXQgY29udGV4dAorICoKKyAqIEF0dGVtcHQgdG8gcmV0dXJuIG91dCBvZiBhIGhhdCB0byB0aGUgcHJldmlvdXMgcHJvZmlsZS4gIFRoZSB0b2tlbgorICogbXVzdCBtYXRjaCB0aGUgc3RvcmVkIHRva2VuIHZhbHVlLgorICoKKyAqIFJldHVybnM6IDAgb3IgZXJyb3Igb2YgZmFpbHVyZQorICovCitpbnQgYWFfcmVzdG9yZV9wcmV2aW91c19wcm9maWxlKHU2NCB0b2tlbikKK3sKKwlzdHJ1Y3QgYWFfdGFza19jeHQgKmN4dDsKKwlzdHJ1Y3QgY3JlZCAqbmV3ID0gcHJlcGFyZV9jcmVkcygpOworCWlmICghbmV3KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWN4dCA9IG5ldy0+c2VjdXJpdHk7CisJaWYgKGN4dC0+dG9rZW4gIT0gdG9rZW4pIHsKKwkJYWJvcnRfY3JlZHMobmV3KTsKKwkJcmV0dXJuIC1FQUNDRVM7CisJfQorCS8qIGlnbm9yZSByZXN0b3JlcyB3aGVuIHRoZXJlIGlzIG5vIHNhdmVkIHByb2ZpbGUgKi8KKwlpZiAoIWN4dC0+cHJldmlvdXMpIHsKKwkJYWJvcnRfY3JlZHMobmV3KTsKKwkJcmV0dXJuIDA7CisJfQorCisJYWFfcHV0X3Byb2ZpbGUoY3h0LT5wcm9maWxlKTsKKwljeHQtPnByb2ZpbGUgPSBhYV9uZXdlc3RfdmVyc2lvbihjeHQtPnByZXZpb3VzKTsKKwlCVUdfT04oIWN4dC0+cHJvZmlsZSk7CisJaWYgKHVubGlrZWx5KGN4dC0+cHJvZmlsZSAhPSBjeHQtPnByZXZpb3VzKSkgeworCQlhYV9nZXRfcHJvZmlsZShjeHQtPnByb2ZpbGUpOworCQlhYV9wdXRfcHJvZmlsZShjeHQtPnByZXZpb3VzKTsKKwl9CisJLyogY2xlYXIgZXhlYyAmJiBwcmV2IGluZm9ybWF0aW9uIHdoZW4gcmVzdG9yaW5nIHRvIHByZXZpb3VzIGNvbnRleHQgKi8KKwljeHQtPnByZXZpb3VzID0gTlVMTDsKKwljeHQtPnRva2VuID0gMDsKKwlhYV9wdXRfcHJvZmlsZShjeHQtPm9uZXhlYyk7CisJY3h0LT5vbmV4ZWMgPSBOVUxMOworCisJY29tbWl0X2NyZWRzKG5ldyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9hcHBhcm1vci9kb21haW4uYyBiL3NlY3VyaXR5L2FwcGFybW9yL2RvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MjVjNmUKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9hcHBhcm1vci9kb21haW4uYwpAQCAtMCwwICsxLDgyMyBAQAorLyoKKyAqIEFwcEFybW9yIHNlY3VyaXR5IG1vZHVsZQorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBBcHBBcm1vciBwb2xpY3kgYXR0YWNobWVudCBhbmQgZG9tYWluIHRyYW5zaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDggTm92ZWxsL1NVU0UKKyAqIENvcHlyaWdodCAyMDA5LTIwMTAgQ2Fub25pY2FsIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZmR0YWJsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvdHJhY2Vob29rLmg+CisjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KKworI2luY2x1ZGUgImluY2x1ZGUvYXVkaXQuaCIKKyNpbmNsdWRlICJpbmNsdWRlL2FwcGFybW9yZnMuaCIKKyNpbmNsdWRlICJpbmNsdWRlL2NvbnRleHQuaCIKKyNpbmNsdWRlICJpbmNsdWRlL2RvbWFpbi5oIgorI2luY2x1ZGUgImluY2x1ZGUvZmlsZS5oIgorI2luY2x1ZGUgImluY2x1ZGUvaXBjLmgiCisjaW5jbHVkZSAiaW5jbHVkZS9tYXRjaC5oIgorI2luY2x1ZGUgImluY2x1ZGUvcGF0aC5oIgorI2luY2x1ZGUgImluY2x1ZGUvcG9saWN5LmgiCisKKy8qKgorICogYWFfZnJlZV9kb21haW5fZW50cmllcyAtIGZyZWUgZW50cmllcyBpbiBhIGRvbWFpbiB0YWJsZQorICogQGRvbWFpbjogdGhlIGRvbWFpbiB0YWJsZSB0byBmcmVlICAoTUFZQkUgTlVMTCkKKyAqLwordm9pZCBhYV9mcmVlX2RvbWFpbl9lbnRyaWVzKHN0cnVjdCBhYV9kb21haW4gKmRvbWFpbikKK3sKKwlpbnQgaTsKKwlpZiAoZG9tYWluKSB7CisJCWlmICghZG9tYWluLT50YWJsZSkKKwkJCXJldHVybjsKKworCQlmb3IgKGkgPSAwOyBpIDwgZG9tYWluLT5zaXplOyBpKyspCisJCQlremZyZWUoZG9tYWluLT50YWJsZVtpXSk7CisJCWt6ZnJlZShkb21haW4tPnRhYmxlKTsKKwkJZG9tYWluLT50YWJsZSA9IE5VTEw7CisJfQorfQorCisvKioKKyAqIG1heV9jaGFuZ2VfcHRyYWNlZF9kb21haW4gLSBjaGVjayBpZiBjYW4gY2hhbmdlIHByb2ZpbGUgb24gcHRyYWNlZCB0YXNrCisgKiBAdGFzazogdGFzayB3ZSB3YW50IHRvIGNoYW5nZSBwcm9maWxlIG9mICAgKE5PVCBOVUxMKQorICogQHRvX3Byb2ZpbGU6IHByb2ZpbGUgdG8gY2hhbmdlIHRvICAoTk9UIE5VTEwpCisgKgorICogQ2hlY2sgaWYgdGhlIHRhc2sgaXMgcHRyYWNlZCBhbmQgaWYgc28gaWYgdGhlIHRyYWNpbmcgdGFzayBpcyBhbGxvd2VkCisgKiB0byB0cmFjZSB0aGUgbmV3IGRvbWFpbgorICoKKyAqIFJldHVybnM6ICUwIG9yIGVycm9yIGlmIGNoYW5nZSBub3QgYWxsb3dlZAorICovCitzdGF0aWMgaW50IG1heV9jaGFuZ2VfcHRyYWNlZF9kb21haW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCSAgICAgc3RydWN0IGFhX3Byb2ZpbGUgKnRvX3Byb2ZpbGUpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0cmFjZXI7CisJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBOVUxMOworCXN0cnVjdCBhYV9wcm9maWxlICp0cmFjZXJwID0gTlVMTDsKKwlpbnQgZXJyb3IgPSAwOworCisJcmN1X3JlYWRfbG9jaygpOworCXRyYWNlciA9IHRyYWNlaG9va190cmFjZXJfdGFzayh0YXNrKTsKKwlpZiAodHJhY2VyKSB7CisJCS8qIHJlbGVhc2VkIGJlbG93ICovCisJCWNyZWQgPSBnZXRfdGFza19jcmVkKHRyYWNlcik7CisJCXRyYWNlcnAgPSBhYV9jcmVkX3Byb2ZpbGUoY3JlZCk7CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCisJLyogbm90IHB0cmFjZWQgKi8KKwlpZiAoIXRyYWNlciB8fCB1bmNvbmZpbmVkKHRyYWNlcnApKQorCQlnb3RvIG91dDsKKworCWVycm9yID0gYWFfbWF5X3B0cmFjZSh0cmFjZXIsIHRyYWNlcnAsIHRvX3Byb2ZpbGUsIFBUUkFDRV9NT0RFX0FUVEFDSCk7CisKK291dDoKKwlpZiAoY3JlZCkKKwkJcHV0X2NyZWQoY3JlZCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogY2hhbmdlX3Byb2ZpbGVfcGVybXMgLSBmaW5kIHBlcm1pc3Npb25zIGZvciBjaGFuZ2VfcHJvZmlsZQorICogQHByb2ZpbGU6IHRoZSBjdXJyZW50IHByb2ZpbGUgIChOT1QgTlVMTCkKKyAqIEBuczogdGhlIG5hbWVzcGFjZSBiZWluZyBzd2l0Y2hlZCB0byAgKE5PVCBOVUxMKQorICogQG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBwcm9maWxlIHRvIGNoYW5nZSB0byAgKE5PVCBOVUxMKQorICogQHJlcXVlc3Q6IHJlcXVlc3RlZCBwZXJtcworICogQHN0YXJ0OiBzdGF0ZSB0byBzdGFydCBtYXRjaGluZyBpbgorICoKKyAqIFJldHVybnM6IHBlcm1pc3Npb24gc2V0CisgKi8KK3N0YXRpYyBzdHJ1Y3QgZmlsZV9wZXJtcyBjaGFuZ2VfcHJvZmlsZV9wZXJtcyhzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSwKKwkJCQkJICAgICAgc3RydWN0IGFhX25hbWVzcGFjZSAqbnMsCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHUzMiByZXF1ZXN0LAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgc3RhcnQpCit7CisJc3RydWN0IGZpbGVfcGVybXMgcGVybXM7CisJc3RydWN0IHBhdGhfY29uZCBjb25kID0geyB9OworCXVuc2lnbmVkIGludCBzdGF0ZTsKKworCWlmICh1bmNvbmZpbmVkKHByb2ZpbGUpKSB7CisJCXBlcm1zLmFsbG93ID0gQUFfTUFZX0NIQU5HRV9QUk9GSUxFIHwgQUFfTUFZX09ORVhFQzsKKwkJcGVybXMuYXVkaXQgPSBwZXJtcy5xdWlldCA9IHBlcm1zLmtpbGwgPSAwOworCQlyZXR1cm4gcGVybXM7CisJfSBlbHNlIGlmICghcHJvZmlsZS0+ZmlsZS5kZmEpIHsKKwkJcmV0dXJuIG51bGxwZXJtczsKKwl9IGVsc2UgaWYgKChucyA9PSBwcm9maWxlLT5ucykpIHsKKwkJLyogdHJ5IG1hdGNoaW5nIGFnYWluc3QgcnVsZXMgd2l0aCBvdXQgbmFtZXNwYWNlIHByZXBlbmRlZCAqLworCQlhYV9zdHJfcGVybXMocHJvZmlsZS0+ZmlsZS5kZmEsIHN0YXJ0LCBuYW1lLCAmY29uZCwgJnBlcm1zKTsKKwkJaWYgKENPTUJJTkVEX1BFUk1fTUFTSyhwZXJtcykgJiByZXF1ZXN0KQorCQkJcmV0dXJuIHBlcm1zOworCX0KKworCS8qIHRyeSBtYXRjaGluZyB3aXRoIG5hbWVzcGFjZSBuYW1lIGFuZCB0aGVuIHByb2ZpbGUgKi8KKwlzdGF0ZSA9IGFhX2RmYV9tYXRjaChwcm9maWxlLT5maWxlLmRmYSwgc3RhcnQsIG5zLT5iYXNlLm5hbWUpOworCXN0YXRlID0gYWFfZGZhX21hdGNoX2xlbihwcm9maWxlLT5maWxlLmRmYSwgc3RhdGUsICI6IiwgMSk7CisJYWFfc3RyX3Blcm1zKHByb2ZpbGUtPmZpbGUuZGZhLCBzdGF0ZSwgbmFtZSwgJmNvbmQsICZwZXJtcyk7CisKKwlyZXR1cm4gcGVybXM7Cit9CisKKy8qKgorICogX19hdHRhY2hfbWF0Y2hfIC0gZmluZCBhbiBhdHRhY2htZW50IG1hdGNoCisgKiBAbmFtZSAtIHRvIG1hdGNoIGFnYWluc3QgIChOT1QgTlVMTCkKKyAqIEBoZWFkIC0gcHJvZmlsZSBsaXN0IHRvIHdhbGsgIChOT1QgTlVMTCkKKyAqCisgKiBEbyBhIGxpbmVhciBzZWFyY2ggb24gdGhlIHByb2ZpbGVzIGluIHRoZSBsaXN0LiAgVGhlcmUgaXMgYSBtYXRjaGluZworICogcHJlZmVyZW5jZSB3aGVyZSBhbiBleGFjdCBtYXRjaCBpcyBwcmVmZXJyZWQgb3ZlciBhIG5hbWUgd2hpY2ggdXNlcworICogZXhwcmVzc2lvbnMgdG8gbWF0Y2gsIGFuZCBtYXRjaGluZyBleHByZXNzaW9ucyB3aXRoIHRoZSBncmVhdGVzdAorICogeG1hdGNoX2xlbiBhcmUgcHJlZmVycmVkLgorICoKKyAqIFJlcXVpcmVzOiBAaGVhZCBub3QgYmUgc2hhcmVkIG9yIGhhdmUgYXBwcm9wcmlhdGUgbG9ja3MgaGVsZAorICoKKyAqIFJldHVybnM6IHByb2ZpbGUgb3IgTlVMTCBpZiBubyBtYXRjaCBmb3VuZAorICovCitzdGF0aWMgc3RydWN0IGFhX3Byb2ZpbGUgKl9fYXR0YWNoX21hdGNoKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCWludCBsZW4gPSAwOworCXN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlLCAqY2FuZGlkYXRlID0gTlVMTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocHJvZmlsZSwgaGVhZCwgYmFzZS5saXN0KSB7CisJCWlmIChwcm9maWxlLT5mbGFncyAmIFBGTEFHX05VTEwpCisJCQljb250aW51ZTsKKwkJaWYgKHByb2ZpbGUtPnhtYXRjaCAmJiBwcm9maWxlLT54bWF0Y2hfbGVuID4gbGVuKSB7CisJCQl1bnNpZ25lZCBpbnQgc3RhdGUgPSBhYV9kZmFfbWF0Y2gocHJvZmlsZS0+eG1hdGNoLAorCQkJCQkJCSAgREZBX1NUQVJULCBuYW1lKTsKKwkJCXUzMiBwZXJtID0gZGZhX3VzZXJfYWxsb3cocHJvZmlsZS0+eG1hdGNoLCBzdGF0ZSk7CisJCQkvKiBhbnkgYWNjZXB0aW5nIHN0YXRlIG1lYW5zIGEgdmFsaWQgbWF0Y2guICovCisJCQlpZiAocGVybSAmIE1BWV9FWEVDKSB7CisJCQkJY2FuZGlkYXRlID0gcHJvZmlsZTsKKwkJCQlsZW4gPSBwcm9maWxlLT54bWF0Y2hfbGVuOworCQkJfQorCQl9IGVsc2UgaWYgKCFzdHJjbXAocHJvZmlsZS0+YmFzZS5uYW1lLCBuYW1lKSkKKwkJCS8qIGV4YWN0IG5vbi1yZSBtYXRjaCwgbm8gbW9yZSBzZWFyY2hpbmcgcmVxdWlyZWQgKi8KKwkJCXJldHVybiBwcm9maWxlOworCX0KKworCXJldHVybiBjYW5kaWRhdGU7Cit9CisKKy8qKgorICogZmluZF9hdHRhY2ggLSBkbyBhdHRhY2htZW50IHNlYXJjaCBmb3IgdW5jb25maW5lZCBwcm9jZXNzZXMKKyAqIEBuczogdGhlIGN1cnJlbnQgbmFtZXNwYWNlICAoTk9UIE5VTEwpCisgKiBAbGlzdDogbGlzdCB0byBzZWFyY2ggIChOT1QgTlVMTCkKKyAqIEBuYW1lOiB0aGUgZXhlY3V0YWJsZSBuYW1lIHRvIG1hdGNoIGFnYWluc3QgIChOT1QgTlVMTCkKKyAqCisgKiBSZXR1cm5zOiBwcm9maWxlIG9yIE5VTEwgaWYgbm8gbWF0Y2ggZm91bmQKKyAqLworc3RhdGljIHN0cnVjdCBhYV9wcm9maWxlICpmaW5kX2F0dGFjaChzdHJ1Y3QgYWFfbmFtZXNwYWNlICpucywKKwkJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlOworCisJcmVhZF9sb2NrKCZucy0+bG9jayk7CisJcHJvZmlsZSA9IGFhX2dldF9wcm9maWxlKF9fYXR0YWNoX21hdGNoKG5hbWUsIGxpc3QpKTsKKwlyZWFkX3VubG9jaygmbnMtPmxvY2spOworCisJcmV0dXJuIHByb2ZpbGU7Cit9CisKKy8qKgorICogc2VwYXJhdGVfZnFuYW1lIC0gc2VwYXJhdGUgdGhlIG5hbWVzcGFjZSBhbmQgcHJvZmlsZSBuYW1lcworICogQGZxbmFtZTogdGhlIGZxbmFtZSBuYW1lIHRvIHNwbGl0ICAoTk9UIE5VTEwpCisgKiBAbnNfbmFtZTogdGhlIG5hbWVzcGFjZSBuYW1lIGlmIGl0IGV4aXN0cyAgKE5PVCBOVUxMKQorICoKKyAqIFRoaXMgaXMgdGhlIHh0YWJsZSBlcXVpdmFsZW50IHJvdXRpbmUgb2YgYWFfc3BsaXRfZnFuYW1lLiAgSXQgZmluZHMgdGhlCisgKiBzcGxpdCBpbiBhbiB4dGFibGUgZnFuYW1lIHdoaWNoIGNvbnRhaW5zIGFuIGVtYmVkZGVkIFwwIGluc3RlYWQgb2YgYSA6CisgKiBpZiBhIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQuICBUaGlzIGlzIGRvbmUgc28gdGhlIHh0YWJsZSBpcyBjb25zdGFudCBhbmQKKyAqIGlzbid0IHJlLXNwbGl0IG9uIGV2ZXJ5IGxvb2t1cC4KKyAqCisgKiBFaXRoZXIgdGhlIHByb2ZpbGUgb3IgbmFtZXNwYWNlIG5hbWUgbWF5IGJlIG9wdGlvbmFsIGJ1dCBpZiB0aGUgbmFtZXNwYWNlCisgKiBpcyBzcGVjaWZpZWQgdGhlIHByb2ZpbGUgbmFtZSB0ZXJtaW5hdGlvbiBtdXN0IGJlIHByZXNlbnQuICBUaGlzIHJlc3VsdHMKKyAqIGluIHRoZSBmb2xsb3dpbmcgcG9zc2libGUgZW5jb2RpbmdzOgorICogcHJvZmlsZV9uYW1lXDAKKyAqIDpuc19uYW1lXDBwcm9maWxlX25hbWVcMAorICogOm5zX25hbWVcMFwwCisgKgorICogTk9URTogdGhlIHh0YWJsZSBmcW5hbWUgaXMgcHJlLXZhbGlkYXRlZCBhdCBsb2FkIHRpbWUgaW4gdW5wYWNrX3RyYW5zX3RhYmxlCisgKgorICogUmV0dXJuczogcHJvZmlsZSBuYW1lIGlmIGl0IGlzIHNwZWNpZmllZCBlbHNlIE5VTEwKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnNlcGFyYXRlX2ZxbmFtZShjb25zdCBjaGFyICpmcW5hbWUsIGNvbnN0IGNoYXIgKipuc19uYW1lKQoreworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwlpZiAoZnFuYW1lWzBdID09ICc6JykgeworCQkvKiBJbiB0aGlzIGNhc2UgdGhlcmUgaXMgZ3VhcmFudGVlZCB0byBiZSB0d28gXDAgdGVybWluYXRvcnMKKwkJICogaW4gdGhlIHN0cmluZy4gIFRoZXkgYXJlIHZlcmlmaWVkIGF0IGxvYWQgdGltZSBieQorCQkgKiBieSB1bnBhY2tfdHJhbnNfdGFibGUKKwkJICovCisJCSpuc19uYW1lID0gZnFuYW1lICsgMTsJCS8qIHNraXAgOiAqLworCQluYW1lID0gKm5zX25hbWUgKyBzdHJsZW4oKm5zX25hbWUpICsgMTsKKwkJaWYgKCEqbmFtZSkKKwkJCW5hbWUgPSBOVUxMOworCX0gZWxzZSB7CisJCSpuc19uYW1lID0gTlVMTDsKKwkJbmFtZSA9IGZxbmFtZTsKKwl9CisKKwlyZXR1cm4gbmFtZTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKm5leHRfbmFtZShpbnQgeHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogeF90YWJsZV9sb29rdXAgLSBsb29rdXAgYW4geCB0cmFuc2l0aW9uIG5hbWUgdmlhIHRyYW5zaXRpb24gdGFibGUKKyAqIEBwcm9maWxlOiBjdXJyZW50IHByb2ZpbGUgKE5PVCBOVUxMKQorICogQHhpbmRleDogaW5kZXggaW50byB4IHRyYW5zaXRpb24gdGFibGUKKyAqCisgKiBSZXR1cm5zOiByZWZjb3VudGVkIHByb2ZpbGUsIG9yIE5VTEwgb24gZmFpbHVyZSAoTUFZQkUgTlVMTCkKKyAqLworc3RhdGljIHN0cnVjdCBhYV9wcm9maWxlICp4X3RhYmxlX2xvb2t1cChzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSwgdTMyIHhpbmRleCkKK3sKKwlzdHJ1Y3QgYWFfcHJvZmlsZSAqbmV3X3Byb2ZpbGUgPSBOVUxMOworCXN0cnVjdCBhYV9uYW1lc3BhY2UgKm5zID0gcHJvZmlsZS0+bnM7CisJdTMyIHh0eXBlID0geGluZGV4ICYgQUFfWF9UWVBFX01BU0s7CisJaW50IGluZGV4ID0geGluZGV4ICYgQUFfWF9JTkRFWF9NQVNLOworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkvKiBpbmRleCBpcyBndWFyYW50ZWVkIHRvIGJlIGluIHJhbmdlLCB2YWxpZGF0ZWQgYXQgbG9hZCB0aW1lICovCisJZm9yIChuYW1lID0gcHJvZmlsZS0+ZmlsZS50cmFucy50YWJsZVtpbmRleF07ICFuZXdfcHJvZmlsZSAmJiBuYW1lOworCSAgICAgbmFtZSA9IG5leHRfbmFtZSh4dHlwZSwgbmFtZSkpIHsKKwkJc3RydWN0IGFhX25hbWVzcGFjZSAqbmV3X25zOworCQljb25zdCBjaGFyICp4bmFtZSA9IE5VTEw7CisKKwkJbmV3X25zID0gTlVMTDsKKwkJaWYgKHhpbmRleCAmIEFBX1hfQ0hJTEQpIHsKKwkJCS8qIHJlbGVhc2UgYnkgY2FsbGVyICovCisJCQluZXdfcHJvZmlsZSA9IGFhX2ZpbmRfY2hpbGQocHJvZmlsZSwgbmFtZSk7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmICgqbmFtZSA9PSAnOicpIHsKKwkJCS8qIHN3aXRjaGluZyBuYW1lc3BhY2UgKi8KKwkJCWNvbnN0IGNoYXIgKm5zX25hbWU7CisJCQl4bmFtZSA9IG5hbWUgPSBzZXBhcmF0ZV9mcW5hbWUobmFtZSwgJm5zX25hbWUpOworCQkJaWYgKCF4bmFtZSkKKwkJCQkvKiBubyBuYW1lIHNvIHVzZSBwcm9maWxlIG5hbWUgKi8KKwkJCQl4bmFtZSA9IHByb2ZpbGUtPmJhc2UuaG5hbWU7CisJCQlpZiAoKm5zX25hbWUgPT0gJ0AnKSB7CisJCQkJLyogVE9ETzogdmFyaWFibGUgc3VwcG9ydCAqLworCQkJCTsKKwkJCX0KKwkJCS8qIHJlbGVhc2VkIGJlbG93ICovCisJCQluZXdfbnMgPSBhYV9maW5kX25hbWVzcGFjZShucywgbnNfbmFtZSk7CisJCQlpZiAoIW5ld19ucykKKwkJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmICgqbmFtZSA9PSAnQCcpIHsKKwkJCS8qIFRPRE86IHZhcmlhYmxlIHN1cHBvcnQgKi8KKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJLyogYmFzaWMgbmFtZXNwYWNlIGxvb2t1cCAqLworCQkJeG5hbWUgPSBuYW1lOworCQl9CisKKwkJLyogcmVsZWFzZWQgYnkgY2FsbGVyICovCisJCW5ld19wcm9maWxlID0gYWFfbG9va3VwX3Byb2ZpbGUobmV3X25zID8gbmV3X25zIDogbnMsIHhuYW1lKTsKKwkJYWFfcHV0X25hbWVzcGFjZShuZXdfbnMpOworCX0KKworCS8qIHJlbGVhc2VkIGJ5IGNhbGxlciAqLworCXJldHVybiBuZXdfcHJvZmlsZTsKK30KKworLyoqCisgKiB4X3RvX3Byb2ZpbGUgLSBnZXQgdGFyZ2V0IHByb2ZpbGUgZm9yIGEgZ2l2ZW4geGluZGV4CisgKiBAcHJvZmlsZTogY3VycmVudCBwcm9maWxlICAoTk9UIE5VTEwpCisgKiBAbmFtZTogbmFtZSB0byBsb29rdXAgKE5PVCBOVUxMKQorICogQHhpbmRleDogaW5kZXggaW50byB4IHRyYW5zaXRpb24gdGFibGUKKyAqCisgKiBmaW5kIHByb2ZpbGUgZm9yIGEgdHJhbnNpdGlvbiBpbmRleAorICoKKyAqIFJldHVybnM6IHJlZmNvdW50ZWQgcHJvZmlsZSBvciBOVUxMIGlmIG5vdCBmb3VuZCBhdmFpbGFibGUKKyAqLworc3RhdGljIHN0cnVjdCBhYV9wcm9maWxlICp4X3RvX3Byb2ZpbGUoc3RydWN0IGFhX3Byb2ZpbGUgKnByb2ZpbGUsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHUzMiB4aW5kZXgpCit7CisJc3RydWN0IGFhX3Byb2ZpbGUgKm5ld19wcm9maWxlID0gTlVMTDsKKwlzdHJ1Y3QgYWFfbmFtZXNwYWNlICpucyA9IHByb2ZpbGUtPm5zOworCXUzMiB4dHlwZSA9IHhpbmRleCAmIEFBX1hfVFlQRV9NQVNLOworCisJc3dpdGNoICh4dHlwZSkgeworCWNhc2UgQUFfWF9OT05FOgorCQkvKiBmYWlsIGV4ZWMgdW5sZXNzIGl4IHx8IHV4IGZhbGxiYWNrIC0gaGFuZGxlZCBieSBjYWxsZXIgKi8KKwkJcmV0dXJuIE5VTEw7CisJY2FzZSBBQV9YX05BTUU6CisJCWlmICh4aW5kZXggJiBBQV9YX0NISUxEKQorCQkJLyogcmVsZWFzZWQgYnkgY2FsbGVyICovCisJCQluZXdfcHJvZmlsZSA9IGZpbmRfYXR0YWNoKG5zLCAmcHJvZmlsZS0+YmFzZS5wcm9maWxlcywKKwkJCQkJCSAgbmFtZSk7CisJCWVsc2UKKwkJCS8qIHJlbGVhc2VkIGJ5IGNhbGxlciAqLworCQkJbmV3X3Byb2ZpbGUgPSBmaW5kX2F0dGFjaChucywgJm5zLT5iYXNlLnByb2ZpbGVzLAorCQkJCQkJICBuYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBBQV9YX1RBQkxFOgorCQkvKiByZWxlYXNlZCBieSBjYWxsZXIgKi8KKwkJbmV3X3Byb2ZpbGUgPSB4X3RhYmxlX2xvb2t1cChwcm9maWxlLCB4aW5kZXgpOworCQlicmVhazsKKwl9CisKKwkvKiByZWxlYXNlZCBieSBjYWxsZXIgKi8KKwlyZXR1cm4gbmV3X3Byb2ZpbGU7Cit9CisKKy8qKgorICogYXBwYXJtb3JfYnBybV9zZXRfY3JlZHMgLSBzZXQgdGhlIG5ldyBjcmVkcyBvbiB0aGUgYnBybSBzdHJ1Y3QKKyAqIEBicHJtOiBiaW5wcm0gZm9yIHRoZSBleGVjICAoTk9UIE5VTEwpCisgKgorICogUmV0dXJuczogJTAgb3IgZXJyb3Igb24gZmFpbHVyZQorICovCitpbnQgYXBwYXJtb3JfYnBybV9zZXRfY3JlZHMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKK3sKKwlzdHJ1Y3QgYWFfdGFza19jeHQgKmN4dDsKKwlzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSwgKm5ld19wcm9maWxlID0gTlVMTDsKKwlzdHJ1Y3QgYWFfbmFtZXNwYWNlICpuczsKKwljaGFyICpidWZmZXIgPSBOVUxMOworCXVuc2lnbmVkIGludCBzdGF0ZTsKKwlzdHJ1Y3QgZmlsZV9wZXJtcyBwZXJtcyA9IHt9OworCXN0cnVjdCBwYXRoX2NvbmQgY29uZCA9IHsKKwkJYnBybS0+ZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV91aWQsCisJCWJwcm0tPmZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbW9kZQorCX07CisJY29uc3QgY2hhciAqbmFtZSA9IE5VTEwsICp0YXJnZXQgPSBOVUxMLCAqaW5mbyA9IE5VTEw7CisJaW50IGVycm9yID0gY2FwX2Jwcm1fc2V0X2NyZWRzKGJwcm0pOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJaWYgKGJwcm0tPmNyZWRfcHJlcGFyZWQpCisJCXJldHVybiAwOworCisJY3h0ID0gYnBybS0+Y3JlZC0+c2VjdXJpdHk7CisJQlVHX09OKCFjeHQpOworCisJcHJvZmlsZSA9IGFhX2dldF9wcm9maWxlKGFhX25ld2VzdF92ZXJzaW9uKGN4dC0+cHJvZmlsZSkpOworCS8qCisJICogZ2V0IHRoZSBuYW1lc3BhY2UgZnJvbSB0aGUgcmVwbGFjZW1lbnQgcHJvZmlsZSBhcyByZXBsYWNlbWVudAorCSAqIGNhbiBjaGFuZ2UgdGhlIG5hbWVzcGFjZQorCSAqLworCW5zID0gcHJvZmlsZS0+bnM7CisJc3RhdGUgPSBwcm9maWxlLT5maWxlLnN0YXJ0OworCisJLyogYnVmZmVyIGZyZWVkIGJlbG93LCBuYW1lIGlzIHBvaW50ZXIgaW50byBidWZmZXIgKi8KKwllcnJvciA9IGFhX2dldF9uYW1lKCZicHJtLT5maWxlLT5mX3BhdGgsIHByb2ZpbGUtPnBhdGhfZmxhZ3MsICZidWZmZXIsCisJCQkgICAgJm5hbWUpOworCWlmIChlcnJvcikgeworCQlpZiAocHJvZmlsZS0+ZmxhZ3MgJgorCQkgICAgKFBGTEFHX0lYX09OX05BTUVfRVJST1IgfCBQRkxBR19VTkNPTkZJTkVEKSkKKwkJCWVycm9yID0gMDsKKwkJaW5mbyA9ICJFeGVjIGZhaWxlZCBuYW1lIHJlc29sdXRpb24iOworCQluYW1lID0gYnBybS0+ZmlsZW5hbWU7CisJCWdvdG8gYXVkaXQ7CisJfQorCisJLyogVGVzdCBmb3Igb25leGVjIGZpcnN0IGFzIG9uZXhlYyBkaXJlY3RpdmVzIG92ZXJyaWRlIG90aGVyCisJICogeCB0cmFuc2l0aW9ucy4KKwkgKi8KKwlpZiAodW5jb25maW5lZChwcm9maWxlKSkgeworCQkvKiB1bmNvbmZpbmVkIHRhc2sgKi8KKwkJaWYgKGN4dC0+b25leGVjKQorCQkJLyogY2hhbmdlX3Byb2ZpbGUgb24gZXhlYyBhbHJlYWR5IGJlZW4gZ3JhbnRlZCAqLworCQkJbmV3X3Byb2ZpbGUgPSBhYV9nZXRfcHJvZmlsZShjeHQtPm9uZXhlYyk7CisJCWVsc2UKKwkJCW5ld19wcm9maWxlID0gZmluZF9hdHRhY2gobnMsICZucy0+YmFzZS5wcm9maWxlcywgbmFtZSk7CisJCWlmICghbmV3X3Byb2ZpbGUpCisJCQlnb3RvIGNsZWFudXA7CisJCWdvdG8gYXBwbHk7CisJfQorCisJLyogZmluZCBleGVjIHBlcm1pc3Npb25zIGZvciBuYW1lICovCisJc3RhdGUgPSBhYV9zdHJfcGVybXMocHJvZmlsZS0+ZmlsZS5kZmEsIHN0YXRlLCBuYW1lLCAmY29uZCwgJnBlcm1zKTsKKwlpZiAoY3h0LT5vbmV4ZWMpIHsKKwkJc3RydWN0IGZpbGVfcGVybXMgY3A7CisJCWluZm8gPSAiY2hhbmdlX3Byb2ZpbGUgb25leGVjIjsKKwkJaWYgKCEocGVybXMuYWxsb3cgJiBBQV9NQVlfT05FWEVDKSkKKwkJCWdvdG8gYXVkaXQ7CisKKwkJLyogdGVzdCBpZiB0aGlzIGV4ZWMgY2FuIGJlIHBhaXJlZCB3aXRoIGNoYW5nZV9wcm9maWxlIG9uZXhlYy4KKwkJICogb25leGVjIHBlcm1pc3Npb24gaXMgbGlua2VkIHRvIGV4ZWMgd2l0aCBhIHN0YW5kYXJkIHBhaXJpbmcKKwkJICogZXhlY1wwY2hhbmdlX3Byb2ZpbGUKKwkJICovCisJCXN0YXRlID0gYWFfZGZhX251bGxfdHJhbnNpdGlvbihwcm9maWxlLT5maWxlLmRmYSwgc3RhdGUpOworCQljcCA9IGNoYW5nZV9wcm9maWxlX3Blcm1zKHByb2ZpbGUsIGN4dC0+b25leGVjLT5ucywgbmFtZSwKKwkJCQkJICBBQV9NQVlfT05FWEVDLCBzdGF0ZSk7CisKKwkJaWYgKCEoY3AuYWxsb3cgJiBBQV9NQVlfT05FWEVDKSkKKwkJCWdvdG8gYXVkaXQ7CisJCW5ld19wcm9maWxlID0gYWFfZ2V0X3Byb2ZpbGUoYWFfbmV3ZXN0X3ZlcnNpb24oY3h0LT5vbmV4ZWMpKTsKKwkJZ290byBhcHBseTsKKwl9CisKKwlpZiAocGVybXMuYWxsb3cgJiBNQVlfRVhFQykgeworCQkvKiBleGVjIHBlcm1pc3Npb24gZGV0ZXJtaW5lIGhvdyB0byB0cmFuc2l0aW9uICovCisJCW5ld19wcm9maWxlID0geF90b19wcm9maWxlKHByb2ZpbGUsIG5hbWUsIHBlcm1zLnhpbmRleCk7CisJCWlmICghbmV3X3Byb2ZpbGUpIHsKKwkJCWlmIChwZXJtcy54aW5kZXggJiBBQV9YX0lOSEVSSVQpIHsKKwkJCQkvKiAocHxjfG4paXggLSBkb24ndCBjaGFuZ2UgcHJvZmlsZSBidXQgZG8KKwkJCQkgKiB1c2UgdGhlIG5ld2VzdCB2ZXJzaW9uLCB3aGljaCB3YXMgcGlja2VkCisJCQkJICogdXAgYWJvdmUgd2hlbiBnZXR0aW5nIHByb2ZpbGUKKwkJCQkgKi8KKwkJCQlpbmZvID0gIml4IGZhbGxiYWNrIjsKKwkJCQluZXdfcHJvZmlsZSA9IGFhX2dldF9wcm9maWxlKHByb2ZpbGUpOworCQkJCWdvdG8geF9jbGVhcjsKKwkJCX0gZWxzZSBpZiAocGVybXMueGluZGV4ICYgQUFfWF9VTkNPTkZJTkVEKSB7CisJCQkJbmV3X3Byb2ZpbGUgPSBhYV9nZXRfcHJvZmlsZShucy0+dW5jb25maW5lZCk7CisJCQkJaW5mbyA9ICJ1eCBmYWxsYmFjayI7CisJCQl9IGVsc2UgeworCQkJCWVycm9yID0gLUVOT0VOVDsKKwkJCQlpbmZvID0gInByb2ZpbGUgbm90IGZvdW5kIjsKKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAoQ09NUExBSU5fTU9ERShwcm9maWxlKSkgeworCQkvKiBubyBleGVjIHBlcm1pc3Npb24gLSBhcmUgd2UgaW4gbGVhcm5pbmcgbW9kZSAqLworCQluZXdfcHJvZmlsZSA9IGFhX25ld19udWxsX3Byb2ZpbGUocHJvZmlsZSwgMCk7CisJCWlmICghbmV3X3Byb2ZpbGUpIHsKKwkJCWVycm9yID0gLUVOT01FTTsKKwkJCWluZm8gPSAiY291bGQgbm90IGNyZWF0ZSBudWxsIHByb2ZpbGUiOworCQl9IGVsc2UgeworCQkJZXJyb3IgPSAtRUFDQ0VTOworCQkJdGFyZ2V0ID0gbmV3X3Byb2ZpbGUtPmJhc2UuaG5hbWU7CisJCX0KKwkJcGVybXMueGluZGV4IHw9IEFBX1hfVU5TQUZFOworCX0gZWxzZQorCQkvKiBmYWlsIGV4ZWMgKi8KKwkJZXJyb3IgPSAtRUFDQ0VTOworCisJaWYgKCFuZXdfcHJvZmlsZSkKKwkJZ290byBhdWRpdDsKKworCWlmIChicHJtLT51bnNhZmUgJiBMU01fVU5TQUZFX1NIQVJFKSB7CisJCS8qIEZJWE1FOiBjdXJyZW50bHkgZG9uJ3QgbWVkaWF0ZSBzaGFyZWQgc3RhdGUgKi8KKwkJOworCX0KKworCWlmIChicHJtLT51bnNhZmUgJiAoTFNNX1VOU0FGRV9QVFJBQ0UgfCBMU01fVU5TQUZFX1BUUkFDRV9DQVApKSB7CisJCWVycm9yID0gbWF5X2NoYW5nZV9wdHJhY2VkX2RvbWFpbihjdXJyZW50LCBuZXdfcHJvZmlsZSk7CisJCWlmIChlcnJvcikgeworCQkJYWFfcHV0X3Byb2ZpbGUobmV3X3Byb2ZpbGUpOworCQkJZ290byBhdWRpdDsKKwkJfQorCX0KKworCS8qIERldGVybWluZSBpZiBzZWN1cmUgZXhlYyBpcyBuZWVkZWQuCisJICogQ2FuIGJlIGF0IHRoaXMgcG9pbnQgZm9yIHRoZSBmb2xsb3dpbmcgcmVhc29uczoKKwkgKiAxLiB1bmNvbmZpbmVkIHN3aXRjaGluZyB0byBjb25maW5lZAorCSAqIDIuIGNvbmZpbmVkIHN3aXRjaGluZyB0byBkaWZmZXJlbnQgY29uZmluZW1lbnQKKwkgKiAzLiBjb25maW5lZCBzd2l0Y2hpbmcgdG8gdW5jb25maW5lZAorCSAqCisJICogQ2FzZXMgMiBhbmQgMyBhcmUgbWFya2VkIGFzIHJlcXVpcmluZyBzZWN1cmUgZXhlYworCSAqICh1bmxlc3MgcG9saWN5IHNwZWNpZmllZCAidW5zYWZlIGV4ZWMiKQorCSAqCisJICogYnBybS0+dW5zYWZlIGlzIHVzZWQgdG8gY2FjaGUgdGhlIEFBX1hfVU5TQUZFIHBlcm1pc3Npb24KKwkgKiB0byBhdm9pZCBoYXZpbmcgdG8gcmVjb21wdXRlIGluIHNlY3VyZWV4ZWMKKwkgKi8KKwlpZiAoIShwZXJtcy54aW5kZXggJiBBQV9YX1VOU0FGRSkpIHsKKwkJQUFfREVCVUcoInNjcnViYmluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yICVzIHByb2ZpbGU9JXNcbiIsCisJCQkgbmFtZSwgbmV3X3Byb2ZpbGUtPmJhc2UuaG5hbWUpOworCQlicHJtLT51bnNhZmUgfD0gQUFfU0VDVVJFX1hfTkVFREVEOworCX0KK2FwcGx5OgorCXRhcmdldCA9IG5ld19wcm9maWxlLT5iYXNlLmhuYW1lOworCS8qIHdoZW4gdHJhbnNpdGlvbmluZyBwcm9maWxlcyBjbGVhciB1bnNhZmUgcGVyc29uYWxpdHkgYml0cyAqLworCWJwcm0tPnBlcl9jbGVhciB8PSBQRVJfQ0xFQVJfT05fU0VUSUQ7CisKK3hfY2xlYXI6CisJYWFfcHV0X3Byb2ZpbGUoY3h0LT5wcm9maWxlKTsKKwkvKiB0cmFuc2ZlciBuZXcgcHJvZmlsZSByZWZlcmVuY2Ugd2lsbCBiZSByZWxlYXNlZCB3aGVuIGN4dCBpcyBmcmVlZCAqLworCWN4dC0+cHJvZmlsZSA9IG5ld19wcm9maWxlOworCisJLyogY2xlYXIgb3V0IGFsbCB0ZW1wb3JhcnkvdHJhbnNpdGlvbmFsIHN0YXRlIGZyb20gdGhlIGNvbnRleHQgKi8KKwlhYV9wdXRfcHJvZmlsZShjeHQtPnByZXZpb3VzKTsKKwlhYV9wdXRfcHJvZmlsZShjeHQtPm9uZXhlYyk7CisJY3h0LT5wcmV2aW91cyA9IE5VTEw7CisJY3h0LT5vbmV4ZWMgPSBOVUxMOworCWN4dC0+dG9rZW4gPSAwOworCithdWRpdDoKKwllcnJvciA9IGFhX2F1ZGl0X2ZpbGUocHJvZmlsZSwgJnBlcm1zLCBHRlBfS0VSTkVMLCBPUF9FWEVDLCBNQVlfRVhFQywKKwkJCSAgICAgIG5hbWUsIHRhcmdldCwgY29uZC51aWQsIGluZm8sIGVycm9yKTsKKworY2xlYW51cDoKKwlhYV9wdXRfcHJvZmlsZShwcm9maWxlKTsKKwlrZnJlZShidWZmZXIpOworCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIGFwcGFybW9yX2Jwcm1fc2VjdXJlZXhlYyAtIGRldGVybWluZSBpZiBzZWN1cmVleGVjIGlzIG5lZWRlZAorICogQGJwcm06IGJpbnBybSBmb3IgZXhlYyAgKE5PVCBOVUxMKQorICoKKyAqIFJldHVybnM6ICUxIGlmIHNlY3VyZWV4ZWMgaXMgbmVlZGVkIGVsc2UgJTAKKyAqLworaW50IGFwcGFybW9yX2Jwcm1fc2VjdXJlZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQoreworCWludCByZXQgPSBjYXBfYnBybV9zZWN1cmVleGVjKGJwcm0pOworCisJLyogdGhlIGRlY2lzaW9uIHRvIHVzZSBzZWN1cmUgZXhlYyBpcyBjb21wdXRlZCBpbiBzZXRfY3JlZHMKKwkgKiBhbmQgc3RvcmVkIGluIGJwcm0tPnVuc2FmZS4KKwkgKi8KKwlpZiAoIXJldCAmJiAoYnBybS0+dW5zYWZlICYgQUFfU0VDVVJFX1hfTkVFREVEKSkKKwkJcmV0ID0gMTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogYXBwYXJtb3JfYnBybV9jb21taXR0aW5nX2NyZWRzIC0gZG8gdGFzayBjbGVhbnVwIG9uIGNvbW1pdHRpbmcgbmV3IGNyZWRzCisgKiBAYnBybTogYmlucHJtIGZvciB0aGUgZXhlYyAgKE5PVCBOVUxMKQorICovCit2b2lkIGFwcGFybW9yX2Jwcm1fY29tbWl0dGluZ19jcmVkcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQoreworCXN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlID0gX19hYV9jdXJyZW50X3Byb2ZpbGUoKTsKKwlzdHJ1Y3QgYWFfdGFza19jeHQgKm5ld19jeHQgPSBicHJtLT5jcmVkLT5zZWN1cml0eTsKKworCS8qIGJhaWwgb3V0IGlmIHVuY29uZmluZWQgb3Igbm90IGNoYW5naW5nIHByb2ZpbGUgKi8KKwlpZiAoKG5ld19jeHQtPnByb2ZpbGUgPT0gcHJvZmlsZSkgfHwKKwkgICAgKHVuY29uZmluZWQobmV3X2N4dC0+cHJvZmlsZSkpKQorCQlyZXR1cm47CisKKwljdXJyZW50LT5wZGVhdGhfc2lnbmFsID0gMDsKKworCS8qIHJlc2V0IHNvZnQgbGltaXRzIGFuZCBzZXQgaGFyZCBsaW1pdHMgZm9yIHRoZSBuZXcgcHJvZmlsZSAqLworCV9fYWFfdHJhbnNpdGlvbl9ybGltaXRzKHByb2ZpbGUsIG5ld19jeHQtPnByb2ZpbGUpOworfQorCisvKioKKyAqIGFwcGFybW9yX2Jwcm1fY29tbWl0ZWRfY3JlZCAtIGRvIGNsZWFudXAgYWZ0ZXIgbmV3IGNyZWRzIGNvbW1pdHRlZAorICogQGJwcm06IGJpbnBybSBmb3IgdGhlIGV4ZWMgIChOT1QgTlVMTCkKKyAqLwordm9pZCBhcHBhcm1vcl9icHJtX2NvbW1pdHRlZF9jcmVkcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQoreworCS8qIFRPRE86IGNsZWFudXAgc2lnbmFscyAtIGlwYyBtZWRpYXRpb24gKi8KKwlyZXR1cm47Cit9CisKKy8qCisgKiBGdW5jdGlvbnMgZm9yIHNlbGYgZGlyZWN0ZWQgcHJvZmlsZSBjaGFuZ2UKKyAqLworCisvKioKKyAqIG5ld19jb21wb3VuZF9uYW1lIC0gY3JlYXRlIGFuIGhuYW1lIHdpdGggQG4yIGFwcGVuZGVkIHRvIEBuMQorICogQG4xOiBiYXNlIG9mIGhuYW1lICAoTk9UIE5VTEwpCisgKiBAbjI6IG5hbWUgdG8gYXBwZW5kIChOT1QgTlVMTCkKKyAqCisgKiBSZXR1cm5zOiBuZXcgbmFtZSBvciBOVUxMIG9uIGVycm9yCisgKi8KK3N0YXRpYyBjaGFyICpuZXdfY29tcG91bmRfbmFtZShjb25zdCBjaGFyICpuMSwgY29uc3QgY2hhciAqbjIpCit7CisJY2hhciAqbmFtZSA9IGttYWxsb2Moc3RybGVuKG4xKSArIHN0cmxlbihuMikgKyAzLCBHRlBfS0VSTkVMKTsKKwlpZiAobmFtZSkKKwkJc3ByaW50ZihuYW1lLCAiJXMvLyVzIiwgbjEsIG4yKTsKKwlyZXR1cm4gbmFtZTsKK30KKworLyoqCisgKiBhYV9jaGFuZ2VfaGF0IC0gY2hhbmdlIGhhdCB0by9mcm9tIHN1YnByb2ZpbGUKKyAqIEBoYXRzOiB2ZWN0b3Igb2YgaGF0IG5hbWVzIHRvIHRyeSBjaGFuZ2luZyBpbnRvIChNQVlCRSBOVUxMIGlmIEBjb3VudCA9PSAwKQorICogQGNvdW50OiBudW1iZXIgb2YgaGF0IG5hbWVzIGluIEBoYXRzCisgKiBAdG9rZW46IG1hZ2ljIHZhbHVlIHRvIHZhbGlkYXRlIHRoZSBoYXQgY2hhbmdlCisgKiBAcGVybXRlc3Q6IHRydWUgaWYgdGhpcyBpcyBqdXN0IGEgcGVybWlzc2lvbiB0ZXN0CisgKgorICogQ2hhbmdlIHRvIHRoZSBmaXJzdCBwcm9maWxlIHNwZWNpZmllZCBpbiBAaGF0cyB0aGF0IGV4aXN0cywgYW5kIHN0b3JlCisgKiB0aGUgQGhhdF9tYWdpYyBpbiB0aGUgY3VycmVudCB0YXNrIGNvbnRleHQuICBJZiB0aGUgY291bnQgPT0gMCBhbmQgdGhlCisgKiBAdG9rZW4gbWF0Y2hlcyB0aGF0IHN0b3JlZCBpbiB0aGUgY3VycmVudCB0YXNrIGNvbnRleHQsIHJldHVybiB0byB0aGUKKyAqIHRvcCBsZXZlbCBwcm9maWxlLgorICoKKyAqIFJldHVybnMgJTAgb24gc3VjY2VzcywgZXJyb3Igb3RoZXJ3aXNlLgorICovCitpbnQgYWFfY2hhbmdlX2hhdChjb25zdCBjaGFyICpoYXRzW10sIGludCBjb3VudCwgdTY0IHRva2VuLCBib29sIHBlcm10ZXN0KQoreworCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkOworCXN0cnVjdCBhYV90YXNrX2N4dCAqY3h0OworCXN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlLCAqcHJldmlvdXNfcHJvZmlsZSwgKmhhdCA9IE5VTEw7CisJY2hhciAqbmFtZSA9IE5VTEw7CisJaW50IGk7CisJc3RydWN0IGZpbGVfcGVybXMgcGVybXMgPSB7fTsKKwljb25zdCBjaGFyICp0YXJnZXQgPSBOVUxMLCAqaW5mbyA9IE5VTEw7CisJaW50IGVycm9yID0gMDsKKworCS8qIHJlbGVhc2VkIGJlbG93ICovCisJY3JlZCA9IGdldF9jdXJyZW50X2NyZWQoKTsKKwljeHQgPSBjcmVkLT5zZWN1cml0eTsKKwlwcm9maWxlID0gYWFfY3JlZF9wcm9maWxlKGNyZWQpOworCXByZXZpb3VzX3Byb2ZpbGUgPSBjeHQtPnByZXZpb3VzOworCisJaWYgKHVuY29uZmluZWQocHJvZmlsZSkpIHsKKwkJaW5mbyA9ICJ1bmNvbmZpbmVkIjsKKwkJZXJyb3IgPSAtRVBFUk07CisJCWdvdG8gYXVkaXQ7CisJfQorCisJaWYgKGNvdW50KSB7CisJCS8qIGF0dGVtcHRpbmcgdG8gY2hhbmdlIGludG8gYSBuZXcgaGF0IG9yIHN3aXRjaCB0byBhIHNpYmxpbmcgKi8KKwkJc3RydWN0IGFhX3Byb2ZpbGUgKnJvb3Q7CisJCXJvb3QgPSBQUk9GSUxFX0lTX0hBVChwcm9maWxlKSA/IHByb2ZpbGUtPnBhcmVudCA6IHByb2ZpbGU7CisKKwkJLyogZmluZCBmaXJzdCBtYXRjaGluZyBoYXQgKi8KKwkJZm9yIChpID0gMDsgaSA8IGNvdW50ICYmICFoYXQ7IGkrKykKKwkJCS8qIHJlbGVhc2VkIGJlbG93ICovCisJCQloYXQgPSBhYV9maW5kX2NoaWxkKHJvb3QsIGhhdHNbaV0pOworCQlpZiAoIWhhdCkgeworCQkJaWYgKCFDT01QTEFJTl9NT0RFKHJvb3QpIHx8IHBlcm10ZXN0KSB7CisJCQkJaWYgKGxpc3RfZW1wdHkoJnJvb3QtPmJhc2UucHJvZmlsZXMpKQorCQkJCQllcnJvciA9IC1FQ0hJTEQ7CisJCQkJZWxzZQorCQkJCQllcnJvciA9IC1FTk9FTlQ7CisJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJCS8qCisJCQkgKiBJbiBjb21wbGFpbiBtb2RlIGFuZCBmYWlsZWQgdG8gbWF0Y2ggYW55IGhhdHMuCisJCQkgKiBBdWRpdCB0aGUgZmFpbHVyZSBpcyBiYXNlZCBvZmYgb2YgdGhlIGZpcnN0IGhhdAorCQkJICogc3VwcGxpZWQuICBUaGlzIGlzIGRvbmUgZHVlIGhvdyB1c2Vyc3BhY2UKKwkJCSAqIGludGVyYWN0cyB3aXRoIGNoYW5nZV9oYXQuCisJCQkgKgorCQkJICogVE9ETzogQWRkIGxvZ2dpbmcgb2YgYWxsIGZhaWxlZCBoYXRzCisJCQkgKi8KKworCQkJLyogZnJlZWQgYmVsb3cgKi8KKwkJCW5hbWUgPSBuZXdfY29tcG91bmRfbmFtZShyb290LT5iYXNlLmhuYW1lLCBoYXRzWzBdKTsKKwkJCXRhcmdldCA9IG5hbWU7CisJCQkvKiByZWxlYXNlZCBiZWxvdyAqLworCQkJaGF0ID0gYWFfbmV3X251bGxfcHJvZmlsZShwcm9maWxlLCAxKTsKKwkJCWlmICghaGF0KSB7CisJCQkJaW5mbyA9ICJmYWlsZWQgbnVsbCBwcm9maWxlIGNyZWF0ZSI7CisJCQkJZXJyb3IgPSAtRU5PTUVNOworCQkJCWdvdG8gYXVkaXQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQl0YXJnZXQgPSBoYXQtPmJhc2UuaG5hbWU7CisJCQlpZiAoIVBST0ZJTEVfSVNfSEFUKGhhdCkpIHsKKwkJCQlpbmZvID0gInRhcmdldCBub3QgaGF0IjsKKwkJCQllcnJvciA9IC1FUEVSTTsKKwkJCQlnb3RvIGF1ZGl0OworCQkJfQorCQl9CisKKwkJZXJyb3IgPSBtYXlfY2hhbmdlX3B0cmFjZWRfZG9tYWluKGN1cnJlbnQsIGhhdCk7CisJCWlmIChlcnJvcikgeworCQkJaW5mbyA9ICJwdHJhY2VkIjsKKwkJCWVycm9yID0gLUVQRVJNOworCQkJZ290byBhdWRpdDsKKwkJfQorCisJCWlmICghcGVybXRlc3QpIHsKKwkJCWVycm9yID0gYWFfc2V0X2N1cnJlbnRfaGF0KGhhdCwgdG9rZW4pOworCQkJaWYgKGVycm9yID09IC1FQUNDRVMpCisJCQkJLyoga2lsbCB0YXNrIGluIGNhc2Ugb2YgYnJ1dGUgZm9yY2UgYXR0YWNrcyAqLworCQkJCXBlcm1zLmtpbGwgPSBBQV9NQVlfQ0hBTkdFSEFUOworCQkJZWxzZSBpZiAobmFtZSAmJiAhZXJyb3IpCisJCQkJLyogcmVzZXQgZXJyb3IgZm9yIGxlYXJuaW5nIG9mIG5ldyBoYXRzICovCisJCQkJZXJyb3IgPSAtRU5PRU5UOworCQl9CisJfSBlbHNlIGlmIChwcmV2aW91c19wcm9maWxlKSB7CisJCS8qIFJldHVybiB0byBzYXZlZCBwcm9maWxlLiAgS2lsbCB0YXNrIGlmIHJlc3RvcmUgZmFpbHMKKwkJICogdG8gYXZvaWQgYnJ1dGUgZm9yY2UgYXR0YWNrcworCQkgKi8KKwkJdGFyZ2V0ID0gcHJldmlvdXNfcHJvZmlsZS0+YmFzZS5obmFtZTsKKwkJZXJyb3IgPSBhYV9yZXN0b3JlX3ByZXZpb3VzX3Byb2ZpbGUodG9rZW4pOworCQlwZXJtcy5raWxsID0gQUFfTUFZX0NIQU5HRUhBVDsKKwl9IGVsc2UKKwkJLyogaWdub3JlIHJlc3RvcmVzIHdoZW4gdGhlcmUgaXMgbm8gc2F2ZWQgcHJvZmlsZSAqLworCQlnb3RvIG91dDsKKworYXVkaXQ6CisJaWYgKCFwZXJtdGVzdCkKKwkJZXJyb3IgPSBhYV9hdWRpdF9maWxlKHByb2ZpbGUsICZwZXJtcywgR0ZQX0tFUk5FTCwKKwkJCQkgICAgICBPUF9DSEFOR0VfSEFULCBBQV9NQVlfQ0hBTkdFSEFULCBOVUxMLAorCQkJCSAgICAgIHRhcmdldCwgMCwgaW5mbywgZXJyb3IpOworCitvdXQ6CisJYWFfcHV0X3Byb2ZpbGUoaGF0KTsKKwlrZnJlZShuYW1lKTsKKwlwdXRfY3JlZChjcmVkKTsKKworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBhYV9jaGFuZ2VfcHJvZmlsZSAtIHBlcmZvcm0gYSBvbmUtd2F5IHByb2ZpbGUgdHJhbnNpdGlvbgorICogQG5zX25hbWU6IG5hbWUgb2YgdGhlIHByb2ZpbGUgbmFtZXNwYWNlIHRvIGNoYW5nZSB0byAoTUFZQkUgTlVMTCkKKyAqIEBobmFtZTogbmFtZSBvZiBwcm9maWxlIHRvIGNoYW5nZSB0byAoTUFZQkUgTlVMTCkKKyAqIEBvbmV4ZWM6IHdoZXRoZXIgdGhpcyB0cmFuc2l0aW9uIGlzIHRvIHRha2UgcGxhY2UgaW1tZWRpYXRlbHkgb3IgYXQgZXhlYworICogQHBlcm10ZXN0OiB0cnVlIGlmIHRoaXMgaXMganVzdCBhIHBlcm1pc3Npb24gdGVzdAorICoKKyAqIENoYW5nZSB0byBuZXcgcHJvZmlsZSBAbmFtZS4gIFVubGlrZSB3aXRoIGhhdHMsIHRoZXJlIGlzIG5vIHdheQorICogdG8gY2hhbmdlIGJhY2suICBJZiBAbmFtZSBpc24ndCBzcGVjaWZpZWQgdGhlIGN1cnJlbnQgcHJvZmlsZSBuYW1lIGlzCisgKiB1c2VkLgorICogSWYgQG9uZXhlYyB0aGVuIHRoZSB0cmFuc2l0aW9uIGlzIGRlbGF5ZWQgdW50aWwKKyAqIHRoZSBuZXh0IGV4ZWMuCisgKgorICogUmV0dXJucyAlMCBvbiBzdWNjZXNzLCBlcnJvciBvdGhlcndpc2UuCisgKi8KK2ludCBhYV9jaGFuZ2VfcHJvZmlsZShjb25zdCBjaGFyICpuc19uYW1lLCBjb25zdCBjaGFyICpobmFtZSwgYm9vbCBvbmV4ZWMsCisJCSAgICAgIGJvb2wgcGVybXRlc3QpCit7CisJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQ7CisJc3RydWN0IGFhX3Rhc2tfY3h0ICpjeHQ7CisJc3RydWN0IGFhX3Byb2ZpbGUgKnByb2ZpbGUsICp0YXJnZXQgPSBOVUxMOworCXN0cnVjdCBhYV9uYW1lc3BhY2UgKm5zID0gTlVMTDsKKwlzdHJ1Y3QgZmlsZV9wZXJtcyBwZXJtcyA9IHt9OworCWNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMLCAqaW5mbyA9IE5VTEw7CisJaW50IG9wLCBlcnJvciA9IDA7CisJdTMyIHJlcXVlc3Q7CisKKwlpZiAoIWhuYW1lICYmICFuc19uYW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChvbmV4ZWMpIHsKKwkJcmVxdWVzdCA9IEFBX01BWV9PTkVYRUM7CisJCW9wID0gT1BfQ0hBTkdFX09ORVhFQzsKKwl9IGVsc2UgeworCQlyZXF1ZXN0ID0gQUFfTUFZX0NIQU5HRV9QUk9GSUxFOworCQlvcCA9IE9QX0NIQU5HRV9QUk9GSUxFOworCX0KKworCWNyZWQgPSBnZXRfY3VycmVudF9jcmVkKCk7CisJY3h0ID0gY3JlZC0+c2VjdXJpdHk7CisJcHJvZmlsZSA9IGFhX2NyZWRfcHJvZmlsZShjcmVkKTsKKworCWlmIChuc19uYW1lKSB7CisJCS8qIHJlbGVhc2VkIGJlbG93ICovCisJCW5zID0gYWFfZmluZF9uYW1lc3BhY2UocHJvZmlsZS0+bnMsIG5zX25hbWUpOworCQlpZiAoIW5zKSB7CisJCQkvKiB3ZSBkb24ndCBjcmVhdGUgbmV3IG5hbWVzcGFjZSBpbiBjb21wbGFpbiBtb2RlICovCisJCQluYW1lID0gbnNfbmFtZTsKKwkJCWluZm8gPSAibmFtZXNwYWNlIG5vdCBmb3VuZCI7CisJCQllcnJvciA9IC1FTk9FTlQ7CisJCQlnb3RvIGF1ZGl0OworCQl9CisJfSBlbHNlCisJCS8qIHJlbGVhc2VkIGJlbG93ICovCisJCW5zID0gYWFfZ2V0X25hbWVzcGFjZShwcm9maWxlLT5ucyk7CisKKwkvKiBpZiB0aGUgbmFtZSB3YXMgbm90IHNwZWNpZmllZCwgdXNlIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHByb2ZpbGUgKi8KKwlpZiAoIWhuYW1lKSB7CisJCWlmICh1bmNvbmZpbmVkKHByb2ZpbGUpKQorCQkJaG5hbWUgPSBucy0+dW5jb25maW5lZC0+YmFzZS5obmFtZTsKKwkJZWxzZQorCQkJaG5hbWUgPSBwcm9maWxlLT5iYXNlLmhuYW1lOworCX0KKworCXBlcm1zID0gY2hhbmdlX3Byb2ZpbGVfcGVybXMocHJvZmlsZSwgbnMsIGhuYW1lLCByZXF1ZXN0LAorCQkJCSAgICAgcHJvZmlsZS0+ZmlsZS5zdGFydCk7CisJaWYgKCEocGVybXMuYWxsb3cgJiByZXF1ZXN0KSkgeworCQllcnJvciA9IC1FQUNDRVM7CisJCWdvdG8gYXVkaXQ7CisJfQorCisJLyogcmVsZWFzZWQgYmVsb3cgKi8KKwl0YXJnZXQgPSBhYV9sb29rdXBfcHJvZmlsZShucywgaG5hbWUpOworCWlmICghdGFyZ2V0KSB7CisJCWluZm8gPSAicHJvZmlsZSBub3QgZm91bmQiOworCQllcnJvciA9IC1FTk9FTlQ7CisJCWlmIChwZXJtdGVzdCB8fCAhQ09NUExBSU5fTU9ERShwcm9maWxlKSkKKwkJCWdvdG8gYXVkaXQ7CisJCS8qIHJlbGVhc2VkIGJlbG93ICovCisJCXRhcmdldCA9IGFhX25ld19udWxsX3Byb2ZpbGUocHJvZmlsZSwgMCk7CisJCWlmICghdGFyZ2V0KSB7CisJCQlpbmZvID0gImZhaWxlZCBudWxsIHByb2ZpbGUgY3JlYXRlIjsKKwkJCWVycm9yID0gLUVOT01FTTsKKwkJCWdvdG8gYXVkaXQ7CisJCX0KKwl9CisKKwkvKiBjaGVjayBpZiB0cmFjaW5nIHRhc2sgaXMgYWxsb3dlZCB0byB0cmFjZSB0YXJnZXQgZG9tYWluICovCisJZXJyb3IgPSBtYXlfY2hhbmdlX3B0cmFjZWRfZG9tYWluKGN1cnJlbnQsIHRhcmdldCk7CisJaWYgKGVycm9yKSB7CisJCWluZm8gPSAicHRyYWNlIHByZXZlbnRzIHRyYW5zaXRpb24iOworCQlnb3RvIGF1ZGl0OworCX0KKworCWlmIChwZXJtdGVzdCkKKwkJZ290byBhdWRpdDsKKworCWlmIChvbmV4ZWMpCisJCWVycm9yID0gYWFfc2V0X2N1cnJlbnRfb25leGVjKHRhcmdldCk7CisJZWxzZQorCQllcnJvciA9IGFhX3JlcGxhY2VfY3VycmVudF9wcm9maWxlKHRhcmdldCk7CisKK2F1ZGl0OgorCWlmICghcGVybXRlc3QpCisJCWVycm9yID0gYWFfYXVkaXRfZmlsZShwcm9maWxlLCAmcGVybXMsIEdGUF9LRVJORUwsIG9wLCByZXF1ZXN0LAorCQkJCSAgICAgIG5hbWUsIGhuYW1lLCAwLCBpbmZvLCBlcnJvcik7CisKKwlhYV9wdXRfbmFtZXNwYWNlKG5zKTsKKwlhYV9wdXRfcHJvZmlsZSh0YXJnZXQpOworCXB1dF9jcmVkKGNyZWQpOworCisJcmV0dXJuIGVycm9yOworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvYXBwYXJtb3IvZmlsZS5jIGIvc2VjdXJpdHkvYXBwYXJtb3IvZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMTJkYjcKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9hcHBhcm1vci9maWxlLmMKQEAgLTAsMCArMSw0NTcgQEAKKy8qCisgKiBBcHBBcm1vciBzZWN1cml0eSBtb2R1bGUKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgQXBwQXJtb3IgbWVkaWF0aW9uIG9mIGZpbGVzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDggTm92ZWxsL1NVU0UKKyAqIENvcHlyaWdodCAyMDA5LTIwMTAgQ2Fub25pY2FsIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgImluY2x1ZGUvYXBwYXJtb3IuaCIKKyNpbmNsdWRlICJpbmNsdWRlL2F1ZGl0LmgiCisjaW5jbHVkZSAiaW5jbHVkZS9maWxlLmgiCisjaW5jbHVkZSAiaW5jbHVkZS9tYXRjaC5oIgorI2luY2x1ZGUgImluY2x1ZGUvcGF0aC5oIgorI2luY2x1ZGUgImluY2x1ZGUvcG9saWN5LmgiCisKK3N0cnVjdCBmaWxlX3Blcm1zIG51bGxwZXJtczsKKworCisvKioKKyAqIGF1ZGl0X2ZpbGVfbWFzayAtIGNvbnZlcnQgbWFzayB0byBwZXJtaXNzaW9uIHN0cmluZworICogQGJ1ZmZlcjogYnVmZmVyIHRvIHdyaXRlIHN0cmluZyB0byAoTk9UIE5VTEwpCisgKiBAbWFzazogcGVybWlzc2lvbiBtYXNrIHRvIGNvbnZlcnQKKyAqLworc3RhdGljIHZvaWQgYXVkaXRfZmlsZV9tYXNrKHN0cnVjdCBhdWRpdF9idWZmZXIgKmFiLCB1MzIgbWFzaykKK3sKKwljaGFyIHN0clsxMF07CisKKwljaGFyICptID0gc3RyOworCisJaWYgKG1hc2sgJiBBQV9FWEVDX01NQVApCisJCSptKysgPSAnbSc7CisJaWYgKG1hc2sgJiAoTUFZX1JFQUQgfCBBQV9NQVlfTUVUQV9SRUFEKSkKKwkJKm0rKyA9ICdyJzsKKwlpZiAobWFzayAmIChNQVlfV1JJVEUgfCBBQV9NQVlfTUVUQV9XUklURSB8IEFBX01BWV9DSE1PRCB8CisJCSAgICBBQV9NQVlfQ0hPV04pKQorCQkqbSsrID0gJ3cnOworCWVsc2UgaWYgKG1hc2sgJiBNQVlfQVBQRU5EKQorCQkqbSsrID0gJ2EnOworCWlmIChtYXNrICYgQUFfTUFZX0NSRUFURSkKKwkJKm0rKyA9ICdjJzsKKwlpZiAobWFzayAmIEFBX01BWV9ERUxFVEUpCisJCSptKysgPSAnZCc7CisJaWYgKG1hc2sgJiBBQV9NQVlfTElOSykKKwkJKm0rKyA9ICdsJzsKKwlpZiAobWFzayAmIEFBX01BWV9MT0NLKQorCQkqbSsrID0gJ2snOworCWlmIChtYXNrICYgTUFZX0VYRUMpCisJCSptKysgPSAneCc7CisJKm0gPSAnXDAnOworCisJYXVkaXRfbG9nX3N0cmluZyhhYiwgc3RyKTsKK30KKworLyoqCisgKiBmaWxlX2F1ZGl0X2NiIC0gY2FsbCBiYWNrIGZvciBmaWxlIHNwZWNpZmljIGF1ZGl0IGZpZWxkcworICogQGFiOiBhdWRpdF9idWZmZXIgIChOT1QgTlVMTCkKKyAqIEB2YTogYXVkaXQgc3RydWN0IHRvIGF1ZGl0IHZhbHVlcyBvZiAgKE5PVCBOVUxMKQorICovCitzdGF0aWMgdm9pZCBmaWxlX2F1ZGl0X2NiKHN0cnVjdCBhdWRpdF9idWZmZXIgKmFiLCB2b2lkICp2YSkKK3sKKwlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKnNhID0gdmE7CisJdWlkX3QgZnN1aWQgPSBjdXJyZW50X2ZzdWlkKCk7CisKKwlpZiAoc2EtPmFhZC5mcy5yZXF1ZXN0ICYgQUFfQVVESVRfRklMRV9NQVNLKSB7CisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgcmVxdWVzdGVkX21hc2s9Iik7CisJCWF1ZGl0X2ZpbGVfbWFzayhhYiwgc2EtPmFhZC5mcy5yZXF1ZXN0KTsKKwl9CisJaWYgKHNhLT5hYWQuZnMuZGVuaWVkICYgQUFfQVVESVRfRklMRV9NQVNLKSB7CisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgZGVuaWVkX21hc2s9Iik7CisJCWF1ZGl0X2ZpbGVfbWFzayhhYiwgc2EtPmFhZC5mcy5kZW5pZWQpOworCX0KKwlpZiAoc2EtPmFhZC5mcy5yZXF1ZXN0ICYgQUFfQVVESVRfRklMRV9NQVNLKSB7CisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgZnN1aWQ9JWQiLCBmc3VpZCk7CisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgb3VpZD0lZCIsIHNhLT5hYWQuZnMub3VpZCk7CisJfQorCisJaWYgKHNhLT5hYWQuZnMudGFyZ2V0KSB7CisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgdGFyZ2V0PSIpOworCQlhdWRpdF9sb2dfdW50cnVzdGVkc3RyaW5nKGFiLCBzYS0+YWFkLmZzLnRhcmdldCk7CisJfQorfQorCisvKioKKyAqIGFhX2F1ZGl0X2ZpbGUgLSBoYW5kbGUgdGhlIGF1ZGl0aW5nIG9mIGZpbGUgb3BlcmF0aW9ucworICogQHByb2ZpbGU6IHRoZSBwcm9maWxlIGJlaW5nIGVuZm9yY2VkICAoTk9UIE5VTEwpCisgKiBAcGVybXM6IHRoZSBwZXJtaXNzaW9ucyBjb21wdXRlZCBmb3IgdGhlIHJlcXVlc3QgKE5PVCBOVUxMKQorICogQGdmcDogYWxsb2NhdGlvbiBmbGFncworICogQG9wOiBvcGVyYXRpb24gYmVpbmcgbWVkaWF0ZWQKKyAqIEByZXF1ZXN0OiBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQKKyAqIEBuYW1lOiBuYW1lIG9mIG9iamVjdCBiZWluZyBtZWRpYXRlZCAoTUFZQkUgTlVMTCkKKyAqIEB0YXJnZXQ6IG5hbWUgb2YgdGFyZ2V0IChNQVlCRSBOVUxMKQorICogQG91aWQ6IG9iamVjdCB1aWQKKyAqIEBpbmZvOiBleHRyYSBpbmZvcm1hdGlvbiBtZXNzYWdlIChNQVlCRSBOVUxMKQorICogQGVycm9yOiAwIGlmIG9wZXJhdGlvbiBhbGxvd2VkIGVsc2UgZmFpbHVyZSBlcnJvciBjb2RlCisgKgorICogUmV0dXJuczogJTAgb3IgZXJyb3Igb24gZmFpbHVyZQorICovCitpbnQgYWFfYXVkaXRfZmlsZShzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSwgc3RydWN0IGZpbGVfcGVybXMgKnBlcm1zLAorCQkgIGdmcF90IGdmcCwgaW50IG9wLCB1MzIgcmVxdWVzdCwgY29uc3QgY2hhciAqbmFtZSwKKwkJICBjb25zdCBjaGFyICp0YXJnZXQsIHVpZF90IG91aWQsIGNvbnN0IGNoYXIgKmluZm8sIGludCBlcnJvcikKK3sKKwlpbnQgdHlwZSA9IEFVRElUX0FQUEFSTU9SX0FVVE87CisJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIHNhOworCUNPTU1PTl9BVURJVF9EQVRBX0lOSVQoJnNhLCBOT05FKTsKKwlzYS5hYWQub3AgPSBvcCwKKwlzYS5hYWQuZnMucmVxdWVzdCA9IHJlcXVlc3Q7CisJc2EuYWFkLm5hbWUgPSBuYW1lOworCXNhLmFhZC5mcy50YXJnZXQgPSB0YXJnZXQ7CisJc2EuYWFkLmZzLm91aWQgPSBvdWlkOworCXNhLmFhZC5pbmZvID0gaW5mbzsKKwlzYS5hYWQuZXJyb3IgPSBlcnJvcjsKKworCWlmIChsaWtlbHkoIXNhLmFhZC5lcnJvcikpIHsKKwkJdTMyIG1hc2sgPSBwZXJtcy0+YXVkaXQ7CisKKwkJaWYgKHVubGlrZWx5KEFVRElUX01PREUocHJvZmlsZSkgPT0gQVVESVRfQUxMKSkKKwkJCW1hc2sgPSAweGZmZmY7CisKKwkJLyogbWFzayBvZmYgcGVybXMgdGhhdCBhcmUgbm90IGJlaW5nIGZvcmNlIGF1ZGl0ZWQgKi8KKwkJc2EuYWFkLmZzLnJlcXVlc3QgJj0gbWFzazsKKworCQlpZiAobGlrZWx5KCFzYS5hYWQuZnMucmVxdWVzdCkpCisJCQlyZXR1cm4gMDsKKwkJdHlwZSA9IEFVRElUX0FQUEFSTU9SX0FVRElUOworCX0gZWxzZSB7CisJCS8qIG9ubHkgcmVwb3J0IHBlcm1pc3Npb25zIHRoYXQgd2VyZSBkZW5pZWQgKi8KKwkJc2EuYWFkLmZzLnJlcXVlc3QgPSBzYS5hYWQuZnMucmVxdWVzdCAmIH5wZXJtcy0+YWxsb3c7CisKKwkJaWYgKHNhLmFhZC5mcy5yZXF1ZXN0ICYgcGVybXMtPmtpbGwpCisJCQl0eXBlID0gQVVESVRfQVBQQVJNT1JfS0lMTDsKKworCQkvKiBxdWlldCBrbm93biByZWplY3RzLCBhc3N1bWVzIHF1aWV0IGFuZCBraWxsIGRvIG5vdCBvdmVybGFwICovCisJCWlmICgoc2EuYWFkLmZzLnJlcXVlc3QgJiBwZXJtcy0+cXVpZXQpICYmCisJCSAgICBBVURJVF9NT0RFKHByb2ZpbGUpICE9IEFVRElUX05PUVVJRVQgJiYKKwkJICAgIEFVRElUX01PREUocHJvZmlsZSkgIT0gQVVESVRfQUxMKQorCQkJc2EuYWFkLmZzLnJlcXVlc3QgJj0gfnBlcm1zLT5xdWlldDsKKworCQlpZiAoIXNhLmFhZC5mcy5yZXF1ZXN0KQorCQkJcmV0dXJuIENPTVBMQUlOX01PREUocHJvZmlsZSkgPyAwIDogc2EuYWFkLmVycm9yOworCX0KKworCXNhLmFhZC5mcy5kZW5pZWQgPSBzYS5hYWQuZnMucmVxdWVzdCAmIH5wZXJtcy0+YWxsb3c7CisJcmV0dXJuIGFhX2F1ZGl0KHR5cGUsIHByb2ZpbGUsIGdmcCwgJnNhLCBmaWxlX2F1ZGl0X2NiKTsKK30KKworLyoqCisgKiBtYXBfb2xkX3Blcm1zIC0gbWFwIG9sZCBmaWxlIHBlcm1zIGxheW91dCB0byB0aGUgbmV3IGxheW91dAorICogQG9sZDogcGVybWlzc2lvbiBzZXQgaW4gb2xkIG1hcHBpbmcKKyAqCisgKiBSZXR1cm5zOiBuZXcgcGVybWlzc2lvbiBtYXBwaW5nCisgKi8KK3N0YXRpYyB1MzIgbWFwX29sZF9wZXJtcyh1MzIgb2xkKQoreworCXUzMiBuZXcgPSBvbGQgJiAweGY7CisJaWYgKG9sZCAmIE1BWV9SRUFEKQorCQluZXcgfD0gQUFfTUFZX01FVEFfUkVBRDsKKwlpZiAob2xkICYgTUFZX1dSSVRFKQorCQluZXcgfD0gQUFfTUFZX01FVEFfV1JJVEUgfCBBQV9NQVlfQ1JFQVRFIHwgQUFfTUFZX0RFTEVURSB8CisJCQlBQV9NQVlfQ0hNT0QgfCBBQV9NQVlfQ0hPV047CisJaWYgKG9sZCAmIDB4MTApCisJCW5ldyB8PSBBQV9NQVlfTElOSzsKKwkvKiB0aGUgb2xkIG1hcHBpbmcgbG9jayBhbmQgbGlua19zdWJzZXQgZmxhZ3Mgd2hlcmUgb3ZlcmxhaWQKKwkgKiBhbmQgdXNlIHdhcyBkZXRlcm1pbmVkIGJ5IHBhcnQgb2YgYSBwYWlyIHRoYXQgdGhleSB3ZXJlIGluCisJICovCisJaWYgKG9sZCAmIDB4MjApCisJCW5ldyB8PSBBQV9NQVlfTE9DSyB8IEFBX0xJTktfU1VCU0VUOworCWlmIChvbGQgJiAweDQwKQkvKiBBQV9FWEVDX01NQVAgKi8KKwkJbmV3IHw9IEFBX0VYRUNfTU1BUDsKKworCW5ldyB8PSBBQV9NQVlfTUVUQV9SRUFEOworCisJcmV0dXJuIG5ldzsKK30KKworLyoqCisgKiBjb21wdXRlX3Blcm1zIC0gY29udmVydCBkZmEgY29tcHJlc3NlZCBwZXJtcyB0byBpbnRlcm5hbCBwZXJtcworICogQGRmYTogZGZhIHRvIGNvbXB1dGUgcGVybXMgZm9yICAgKE5PVCBOVUxMKQorICogQHN0YXRlOiBzdGF0ZSBpbiBkZmEKKyAqIEBjb25kOiAgY29uZGl0aW9ucyB0byBjb25zaWRlciAgKE5PVCBOVUxMKQorICoKKyAqIFRPRE86IGNvbnZlcnQgZnJvbSBkZmEgKyBzdGF0ZSB0byBwZXJtaXNzaW9uIGVudHJ5LCBkbyBjb21wdXRhdGlvbiBjb252ZXJzaW9uCisgKiAgICAgICBhdCBsb2FkIHRpbWUuCisgKgorICogUmV0dXJuczogY29tcHV0ZWQgcGVybWlzc2lvbiBzZXQKKyAqLworc3RhdGljIHN0cnVjdCBmaWxlX3Blcm1zIGNvbXB1dGVfcGVybXMoc3RydWN0IGFhX2RmYSAqZGZhLCB1bnNpZ25lZCBpbnQgc3RhdGUsCisJCQkJICAgICAgIHN0cnVjdCBwYXRoX2NvbmQgKmNvbmQpCit7CisJc3RydWN0IGZpbGVfcGVybXMgcGVybXM7CisKKwkvKiBGSVhNRTogY2hhbmdlIG92ZXIgdG8gbmV3IGRmYSBmb3JtYXQKKwkgKiBjdXJyZW50bHkgZmlsZSBwZXJtcyBhcmUgZW5jb2RlZCBpbiB0aGUgZGZhLCBuZXcgZm9ybWF0CisJICogc3BsaXRzIHRoZSBwZXJtaXNzaW9ucyBmcm9tIHRoZSBkZmEuICBUaGlzIG1hcHBpbmcgY2FuIGJlCisJICogZG9uZSBhdCBwcm9maWxlIGxvYWQKKwkgKi8KKwlwZXJtcy5raWxsID0gMDsKKworCWlmIChjdXJyZW50X2ZzdWlkKCkgPT0gY29uZC0+dWlkKSB7CisJCXBlcm1zLmFsbG93ID0gbWFwX29sZF9wZXJtcyhkZmFfdXNlcl9hbGxvdyhkZmEsIHN0YXRlKSk7CisJCXBlcm1zLmF1ZGl0ID0gbWFwX29sZF9wZXJtcyhkZmFfdXNlcl9hdWRpdChkZmEsIHN0YXRlKSk7CisJCXBlcm1zLnF1aWV0ID0gbWFwX29sZF9wZXJtcyhkZmFfdXNlcl9xdWlldChkZmEsIHN0YXRlKSk7CisJCXBlcm1zLnhpbmRleCA9IGRmYV91c2VyX3hpbmRleChkZmEsIHN0YXRlKTsKKwl9IGVsc2UgeworCQlwZXJtcy5hbGxvdyA9IG1hcF9vbGRfcGVybXMoZGZhX290aGVyX2FsbG93KGRmYSwgc3RhdGUpKTsKKwkJcGVybXMuYXVkaXQgPSBtYXBfb2xkX3Blcm1zKGRmYV9vdGhlcl9hdWRpdChkZmEsIHN0YXRlKSk7CisJCXBlcm1zLnF1aWV0ID0gbWFwX29sZF9wZXJtcyhkZmFfb3RoZXJfcXVpZXQoZGZhLCBzdGF0ZSkpOworCQlwZXJtcy54aW5kZXggPSBkZmFfb3RoZXJfeGluZGV4KGRmYSwgc3RhdGUpOworCX0KKworCS8qIGNoYW5nZV9wcm9maWxlIHdhc24ndCBkZXRlcm1pbmVkIGJ5IG93bmVyc2hpcCBpbiBvbGQgbWFwcGluZyAqLworCWlmIChBQ0NFUFRfVEFCTEUoZGZhKVtzdGF0ZV0gJiAweDgwMDAwMDAwKQorCQlwZXJtcy5hbGxvdyB8PSBBQV9NQVlfQ0hBTkdFX1BST0ZJTEU7CisKKwlyZXR1cm4gcGVybXM7Cit9CisKKy8qKgorICogYWFfc3RyX3Blcm1zIC0gZmluZCBwZXJtaXNzaW9uIHRoYXQgbWF0Y2ggQG5hbWUKKyAqIEBkZmE6IHRvIG1hdGNoIGFnYWluc3QgIChNQVlCRSBOVUxMKQorICogQHN0YXRlOiBzdGF0ZSB0byBzdGFydCBtYXRjaGluZyBpbgorICogQG5hbWU6IHN0cmluZyB0byBtYXRjaCBhZ2FpbnN0IGRmYSAgKE5PVCBOVUxMKQorICogQGNvbmQ6IGNvbmRpdGlvbnMgdG8gY29uc2lkZXIgZm9yIHBlcm1pc3Npb24gc2V0IGNvbXB1dGF0aW9uICAoTk9UIE5VTEwpCisgKiBAcGVybXM6IFJldHVybnMgLSB0aGUgcGVybWlzc2lvbnMgZm91bmQgd2hlbiBtYXRjaGluZyBAbmFtZQorICoKKyAqIFJldHVybnM6IHRoZSBmaW5hbCBzdGF0ZSBpbiBAZGZhIHdoZW4gYmVnaW5uaW5nIEBzdGFydCBhbmQgd2Fsa2luZyBAbmFtZQorICovCit1bnNpZ25lZCBpbnQgYWFfc3RyX3Blcm1zKHN0cnVjdCBhYV9kZmEgKmRmYSwgdW5zaWduZWQgaW50IHN0YXJ0LAorCQkJICBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgcGF0aF9jb25kICpjb25kLAorCQkJICBzdHJ1Y3QgZmlsZV9wZXJtcyAqcGVybXMpCit7CisJdW5zaWduZWQgaW50IHN0YXRlOworCWlmICghZGZhKSB7CisJCSpwZXJtcyA9IG51bGxwZXJtczsKKwkJcmV0dXJuIERGQV9OT01BVENIOworCX0KKworCXN0YXRlID0gYWFfZGZhX21hdGNoKGRmYSwgc3RhcnQsIG5hbWUpOworCSpwZXJtcyA9IGNvbXB1dGVfcGVybXMoZGZhLCBzdGF0ZSwgY29uZCk7CisKKwlyZXR1cm4gc3RhdGU7Cit9CisKKy8qKgorICogaXNfZGVsZXRlZCAtIHRlc3QgaWYgYSBmaWxlIGhhcyBiZWVuIGNvbXBsZXRlbHkgdW5saW5rZWQKKyAqIEBkZW50cnk6IGRlbnRyeSBvZiBmaWxlIHRvIHRlc3QgZm9yIGRlbGV0aW9uICAoTk9UIE5VTEwpCisgKgorICogUmV0dXJuczogJTEgaWYgZGVsZXRlZCBlbHNlICUwCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19kZWxldGVkKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlpZiAoZF91bmxpbmtlZChkZW50cnkpICYmIGRlbnRyeS0+ZF9pbm9kZS0+aV9ubGluayA9PSAwKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBhYV9wYXRoX3Blcm0gLSBkbyBwZXJtaXNzaW9ucyBjaGVjayAmIGF1ZGl0IGZvciBAcGF0aAorICogQG9wOiBvcGVyYXRpb24gYmVpbmcgY2hlY2tlZAorICogQHByb2ZpbGU6IHByb2ZpbGUgYmVpbmcgZW5mb3JjZWQgIChOT1QgTlVMTCkKKyAqIEBwYXRoOiBwYXRoIHRvIGNoZWNrIHBlcm1pc3Npb25zIG9mICAoTk9UIE5VTEwpCisgKiBAZmxhZ3M6IGFueSBhZGRpdGlvbmFsIHBhdGggZmxhZ3MgYmV5b25kIHdoYXQgdGhlIHByb2ZpbGUgc3BlY2lmaWVzCisgKiBAcmVxdWVzdDogcmVxdWVzdGVkIHBlcm1pc3Npb25zCisgKiBAY29uZDogY29uZGl0aW9uYWwgaW5mbyBmb3IgdGhpcyByZXF1ZXN0ICAoTk9UIE5VTEwpCisgKgorICogUmV0dXJuczogJTAgZWxzZSBlcnJvciBpZiBhY2Nlc3MgZGVuaWVkIG9yIG90aGVyIGVycm9yCisgKi8KK2ludCBhYV9wYXRoX3Blcm0oaW50IG9wLCBzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSwgc3RydWN0IHBhdGggKnBhdGgsCisJCSBpbnQgZmxhZ3MsIHUzMiByZXF1ZXN0LCBzdHJ1Y3QgcGF0aF9jb25kICpjb25kKQoreworCWNoYXIgKmJ1ZmZlciA9IE5VTEw7CisJc3RydWN0IGZpbGVfcGVybXMgcGVybXMgPSB7fTsKKwljb25zdCBjaGFyICpuYW1lLCAqaW5mbyA9IE5VTEw7CisJaW50IGVycm9yOworCisJZmxhZ3MgfD0gcHJvZmlsZS0+cGF0aF9mbGFncyB8IChTX0lTRElSKGNvbmQtPm1vZGUpID8gUEFUSF9JU19ESVIgOiAwKTsKKwllcnJvciA9IGFhX2dldF9uYW1lKHBhdGgsIGZsYWdzLCAmYnVmZmVyLCAmbmFtZSk7CisJaWYgKGVycm9yKSB7CisJCWlmIChlcnJvciA9PSAtRU5PRU5UICYmIGlzX2RlbGV0ZWQocGF0aC0+ZGVudHJ5KSkgeworCQkJLyogQWNjZXNzIHRvIG9wZW4gZmlsZXMgdGhhdCBhcmUgZGVsZXRlZCBhcmUKKwkJCSAqIGdpdmUgYSBwYXNzIChpbXBsaWNpdCBkZWxlZ2F0aW9uKQorCQkJICovCisJCQllcnJvciA9IDA7CisJCQlwZXJtcy5hbGxvdyA9IHJlcXVlc3Q7CisJCX0gZWxzZSBpZiAoZXJyb3IgPT0gLUVOT0VOVCkKKwkJCWluZm8gPSAiRmFpbGVkIG5hbWUgbG9va3VwIC0gZGVsZXRlZCBlbnRyeSI7CisJCWVsc2UgaWYgKGVycm9yID09IC1FU1RBTEUpCisJCQlpbmZvID0gIkZhaWxlZCBuYW1lIGxvb2t1cCAtIGRpc2Nvbm5lY3RlZCBwYXRoIjsKKwkJZWxzZSBpZiAoZXJyb3IgPT0gLUVOQU1FVE9PTE9ORykKKwkJCWluZm8gPSAiRmFpbGVkIG5hbWUgbG9va3VwIC0gbmFtZSB0b28gbG9uZyI7CisJCWVsc2UKKwkJCWluZm8gPSAiRmFpbGVkIG5hbWUgbG9va3VwIjsKKwl9IGVsc2UgeworCQlhYV9zdHJfcGVybXMocHJvZmlsZS0+ZmlsZS5kZmEsIHByb2ZpbGUtPmZpbGUuc3RhcnQsIG5hbWUsIGNvbmQsCisJCQkgICAgICZwZXJtcyk7CisJCWlmIChyZXF1ZXN0ICYgfnBlcm1zLmFsbG93KQorCQkJZXJyb3IgPSAtRUFDQ0VTOworCX0KKwllcnJvciA9IGFhX2F1ZGl0X2ZpbGUocHJvZmlsZSwgJnBlcm1zLCBHRlBfS0VSTkVMLCBvcCwgcmVxdWVzdCwgbmFtZSwKKwkJCSAgICAgIE5VTEwsIGNvbmQtPnVpZCwgaW5mbywgZXJyb3IpOworCWtmcmVlKGJ1ZmZlcik7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogeGluZGV4X2lzX3N1YnNldCAtIGhlbHBlciBmb3IgYWFfcGF0aF9saW5rCisgKiBAbGluazogbGluayBwZXJtaXNzaW9uIHNldAorICogQHRhcmdldDogdGFyZ2V0IHBlcm1pc3Npb24gc2V0CisgKgorICogdGVzdCB0YXJnZXQgeCBwZXJtaXNzaW9ucyBhcmUgZXF1YWwgT1IgYSBzdWJzZXQgb2YgbGluayB4IHBlcm1pc3Npb25zCisgKiB0aGlzIGlzIGRvbmUgYXMgcGFydCBvZiB0aGUgc3Vic2V0IHRlc3QsIHdoZXJlIGEgaGFyZGxpbmsgbXVzdCBoYXZlCisgKiBhIHN1YnNldCBvZiBwZXJtaXNzaW9ucyB0aGF0IHRoZSB0YXJnZXQgaGFzLgorICoKKyAqIFJldHVybnM6ICUxIGlmIHN1YnNldCBlbHNlICUwCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCB4aW5kZXhfaXNfc3Vic2V0KHUzMiBsaW5rLCB1MzIgdGFyZ2V0KQoreworCWlmICgoKGxpbmsgJiB+QUFfWF9VTlNBRkUpICE9ICh0YXJnZXQgJiB+QUFfWF9VTlNBRkUpKSB8fAorCSAgICAoKGxpbmsgJiBBQV9YX1VOU0FGRSkgJiYgISh0YXJnZXQgJiBBQV9YX1VOU0FGRSkpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisvKioKKyAqIGFhX3BhdGhfbGluayAtIEhhbmRsZSBoYXJkIGxpbmsgcGVybWlzc2lvbiBjaGVjaworICogQHByb2ZpbGU6IHRoZSBwcm9maWxlIGJlaW5nIGVuZm9yY2VkICAoTk9UIE5VTEwpCisgKiBAb2xkX2RlbnRyeTogdGhlIHRhcmdldCBkZW50cnkgIChOT1QgTlVMTCkKKyAqIEBuZXdfZGlyOiBkaXJlY3RvcnkgdGhlIG5ldyBsaW5rIHdpbGwgYmUgY3JlYXRlZCBpbiAgKE5PVCBOVUxMKQorICogQG5ld19kZW50cnk6IHRoZSBsaW5rIGJlaW5nIGNyZWF0ZWQgIChOT1QgTlVMTCkKKyAqCisgKiBIYW5kbGUgdGhlIHBlcm1pc3Npb24gdGVzdCBmb3IgYSBsaW5rICYgdGFyZ2V0IHBhaXIuICBQZXJtaXNzaW9uCisgKiBpcyBlbmNvZGVkIGFzIGEgcGFpciB3aGVyZSB0aGUgbGluayBwZXJtaXNzaW9uIGlzIGRldGVybWluZWQKKyAqIGZpcnN0LCBhbmQgaWYgYWxsb3dlZCwgdGhlIHRhcmdldCBpcyB0ZXN0ZWQuICBUaGUgdGFyZ2V0IHRlc3QKKyAqIGlzIGRvbmUgZnJvbSB0aGUgcG9pbnQgb2YgdGhlIGxpbmsgbWF0Y2ggKG5vdCBzdGFydCBvZiBERkEpCisgKiBtYWtpbmcgdGhlIHRhcmdldCBwZXJtaXNzaW9uIGRlcGVuZGVudCBvbiB0aGUgbGluayBwZXJtaXNzaW9uIG1hdGNoLgorICoKKyAqIFRoZSBzdWJzZXQgdGVzdCBpZiByZXF1aXJlZCBmb3JjZXMgdGhhdCBwZXJtaXNzaW9ucyBncmFudGVkCisgKiBvbiBsaW5rIGFyZSBhIHN1YnNldCBvZiB0aGUgcGVybWlzc2lvbiBncmFudGVkIHRvIHRhcmdldC4KKyAqCisgKiBSZXR1cm5zOiAlMCBpZiBhbGxvd2VkIGVsc2UgZXJyb3IKKyAqLworaW50IGFhX3BhdGhfbGluayhzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKKwkJIHN0cnVjdCBwYXRoICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQoreworCXN0cnVjdCBwYXRoIGxpbmsgPSB7IG5ld19kaXItPm1udCwgbmV3X2RlbnRyeSB9OworCXN0cnVjdCBwYXRoIHRhcmdldCA9IHsgbmV3X2Rpci0+bW50LCBvbGRfZGVudHJ5IH07CisJc3RydWN0IHBhdGhfY29uZCBjb25kID0geworCQlvbGRfZGVudHJ5LT5kX2lub2RlLT5pX3VpZCwKKwkJb2xkX2RlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlCisJfTsKKwljaGFyICpidWZmZXIgPSBOVUxMLCAqYnVmZmVyMiA9IE5VTEw7CisJY29uc3QgY2hhciAqbG5hbWUsICp0bmFtZSA9IE5VTEwsICppbmZvID0gTlVMTDsKKwlzdHJ1Y3QgZmlsZV9wZXJtcyBscGVybXMsIHBlcm1zOworCXUzMiByZXF1ZXN0ID0gQUFfTUFZX0xJTks7CisJdW5zaWduZWQgaW50IHN0YXRlOworCWludCBlcnJvcjsKKworCWxwZXJtcyA9IG51bGxwZXJtczsKKworCS8qIGJ1ZmZlciBmcmVlZCBiZWxvdywgbG5hbWUgaXMgcG9pbnRlciBpbiBidWZmZXIgKi8KKwllcnJvciA9IGFhX2dldF9uYW1lKCZsaW5rLCBwcm9maWxlLT5wYXRoX2ZsYWdzLCAmYnVmZmVyLCAmbG5hbWUpOworCWlmIChlcnJvcikKKwkJZ290byBhdWRpdDsKKworCS8qIGJ1ZmZlcjIgZnJlZWQgYmVsb3csIHRuYW1lIGlzIHBvaW50ZXIgaW4gYnVmZmVyMiAqLworCWVycm9yID0gYWFfZ2V0X25hbWUoJnRhcmdldCwgcHJvZmlsZS0+cGF0aF9mbGFncywgJmJ1ZmZlcjIsICZ0bmFtZSk7CisJaWYgKGVycm9yKQorCQlnb3RvIGF1ZGl0OworCisJZXJyb3IgPSAtRUFDQ0VTOworCS8qIGFhX3N0cl9wZXJtcyAtIGhhbmRsZXMgdGhlIGNhc2Ugb2YgdGhlIGRmYSBiZWluZyBOVUxMICovCisJc3RhdGUgPSBhYV9zdHJfcGVybXMocHJvZmlsZS0+ZmlsZS5kZmEsIHByb2ZpbGUtPmZpbGUuc3RhcnQsIGxuYW1lLAorCQkJICAgICAmY29uZCwgJmxwZXJtcyk7CisKKwlpZiAoIShscGVybXMuYWxsb3cgJiBBQV9NQVlfTElOSykpCisJCWdvdG8gYXVkaXQ7CisKKwkvKiB0ZXN0IHRvIHNlZSBpZiB0YXJnZXQgY2FuIGJlIHBhaXJlZCB3aXRoIGxpbmsgKi8KKwlzdGF0ZSA9IGFhX2RmYV9udWxsX3RyYW5zaXRpb24ocHJvZmlsZS0+ZmlsZS5kZmEsIHN0YXRlKTsKKwlhYV9zdHJfcGVybXMocHJvZmlsZS0+ZmlsZS5kZmEsIHN0YXRlLCB0bmFtZSwgJmNvbmQsICZwZXJtcyk7CisKKwkvKiBmb3JjZSBhdWRpdC9xdWlldCBtYXNrcyBmb3IgbGluayBhcmUgc3RvcmVkIGluIHRoZSBzZWNvbmQgZW50cnkKKwkgKiBpbiB0aGUgbGluayBwYWlyLgorCSAqLworCWxwZXJtcy5hdWRpdCA9IHBlcm1zLmF1ZGl0OworCWxwZXJtcy5xdWlldCA9IHBlcm1zLnF1aWV0OworCWxwZXJtcy5raWxsID0gcGVybXMua2lsbDsKKworCWlmICghKHBlcm1zLmFsbG93ICYgQUFfTUFZX0xJTkspKSB7CisJCWluZm8gPSAidGFyZ2V0IHJlc3RyaWN0ZWQiOworCQlnb3RvIGF1ZGl0OworCX0KKworCS8qIGRvbmUgaWYgbGluayBzdWJzZXQgdGVzdCBpcyBub3QgcmVxdWlyZWQgKi8KKwlpZiAoIShwZXJtcy5hbGxvdyAmIEFBX0xJTktfU1VCU0VUKSkKKwkJZ290byBkb25lX3Rlc3RzOworCisJLyogRG8gbGluayBwZXJtIHN1YnNldCB0ZXN0IHJlcXVpcmluZyBhbGxvd2VkIHBlcm1pc3Npb24gb24gbGluayBhcmUgYQorCSAqIHN1YnNldCBvZiB0aGUgYWxsb3dlZCBwZXJtaXNzaW9ucyBvbiB0YXJnZXQuCisJICovCisJYWFfc3RyX3Blcm1zKHByb2ZpbGUtPmZpbGUuZGZhLCBwcm9maWxlLT5maWxlLnN0YXJ0LCB0bmFtZSwgJmNvbmQsCisJCSAgICAgJnBlcm1zKTsKKworCS8qIEFBX01BWV9MSU5LIGlzIG5vdCBjb25zaWRlcmVkIGluIHRoZSBzdWJzZXQgdGVzdCAqLworCXJlcXVlc3QgPSBscGVybXMuYWxsb3cgJiB+QUFfTUFZX0xJTks7CisJbHBlcm1zLmFsbG93ICY9IHBlcm1zLmFsbG93IHwgQUFfTUFZX0xJTks7CisKKwlyZXF1ZXN0IHw9IEFBX0FVRElUX0ZJTEVfTUFTSyAmIChscGVybXMuYWxsb3cgJiB+cGVybXMuYWxsb3cpOworCWlmIChyZXF1ZXN0ICYgfmxwZXJtcy5hbGxvdykgeworCQlnb3RvIGF1ZGl0OworCX0gZWxzZSBpZiAoKGxwZXJtcy5hbGxvdyAmIE1BWV9FWEVDKSAmJgorCQkgICAheGluZGV4X2lzX3N1YnNldChscGVybXMueGluZGV4LCBwZXJtcy54aW5kZXgpKSB7CisJCWxwZXJtcy5hbGxvdyAmPSB+TUFZX0VYRUM7CisJCXJlcXVlc3QgfD0gTUFZX0VYRUM7CisJCWluZm8gPSAibGluayBub3Qgc3Vic2V0IG9mIHRhcmdldCI7CisJCWdvdG8gYXVkaXQ7CisJfQorCitkb25lX3Rlc3RzOgorCWVycm9yID0gMDsKKworYXVkaXQ6CisJZXJyb3IgPSBhYV9hdWRpdF9maWxlKHByb2ZpbGUsICZscGVybXMsIEdGUF9LRVJORUwsIE9QX0xJTkssIHJlcXVlc3QsCisJCQkgICAgICBsbmFtZSwgdG5hbWUsIGNvbmQudWlkLCBpbmZvLCBlcnJvcik7CisJa2ZyZWUoYnVmZmVyKTsKKwlrZnJlZShidWZmZXIyKTsKKworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBhYV9maWxlX3Blcm0gLSBkbyBwZXJtaXNzaW9uIHJldmFsaWRhdGlvbiBjaGVjayAmIGF1ZGl0IGZvciBAZmlsZQorICogQG9wOiBvcGVyYXRpb24gYmVpbmcgY2hlY2tlZAorICogQHByb2ZpbGU6IHByb2ZpbGUgYmVpbmcgZW5mb3JjZWQgICAoTk9UIE5VTEwpCisgKiBAZmlsZTogZmlsZSB0byByZXZhbGlkYXRlIGFjY2VzcyBwZXJtaXNzaW9ucyBvbiAgKE5PVCBOVUxMKQorICogQHJlcXVlc3Q6IHJlcXVlc3RlZCBwZXJtaXNzaW9ucworICoKKyAqIFJldHVybnM6ICUwIGlmIGFjY2VzcyBhbGxvd2VkIGVsc2UgZXJyb3IKKyAqLworaW50IGFhX2ZpbGVfcGVybShpbnQgb3AsIHN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJIHUzMiByZXF1ZXN0KQoreworCXN0cnVjdCBwYXRoX2NvbmQgY29uZCA9IHsKKwkJLnVpZCA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfdWlkLAorCQkubW9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbW9kZQorCX07CisKKwlyZXR1cm4gYWFfcGF0aF9wZXJtKG9wLCBwcm9maWxlLCAmZmlsZS0+Zl9wYXRoLCBQQVRIX0RFTEVHQVRFX0RFTEVURUQsCisJCQkgICAgcmVxdWVzdCwgJmNvbmQpOworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hcHBhcm1vci5oIGIvc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hcHBhcm1vci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4Y2NhZWEKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2FwcGFybW9yLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIEFwcEFybW9yIHNlY3VyaXR5IG1vZHVsZQorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBBcHBBcm1vciBiYXNpYyBnbG9iYWwgYW5kIGxpYiBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDA4IE5vdmVsbC9TVVNFCisgKiBDb3B5cmlnaHQgMjAwOS0yMDEwIENhbm9uaWNhbCBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX19BUFBBUk1PUl9ICisjZGVmaW5lIF9fQVBQQVJNT1JfSAorCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKworI2luY2x1ZGUgIm1hdGNoLmgiCisKKy8qIENvbnRyb2wgcGFyYW1ldGVycyBzZXR0YWJsZSB0aHJvdWdoIG1vZHVsZS9ib290IGZsYWdzICovCitleHRlcm4gZW51bSBhdWRpdF9tb2RlIGFhX2dfYXVkaXQ7CitleHRlcm4gaW50IGFhX2dfYXVkaXRfaGVhZGVyOworZXh0ZXJuIGludCBhYV9nX2RlYnVnOworZXh0ZXJuIGludCBhYV9nX2xvY2tfcG9saWN5OworZXh0ZXJuIGludCBhYV9nX2xvZ3N5c2NhbGw7CitleHRlcm4gaW50IGFhX2dfcGFyYW5vaWRfbG9hZDsKK2V4dGVybiB1bnNpZ25lZCBpbnQgYWFfZ19wYXRoX21heDsKKworLyoKKyAqIERFQlVHIHJlbWFpbnMgZ2xvYmFsIChubyBwZXIgcHJvZmlsZSBmbGFnKSBzaW5jZSBpdCBpcyBtb3N0bHkgdXNlZCBpbiBzeXNjdGwKKyAqIHdoaWNoIGlzIG5vdCByZWxhdGVkIHRvIHByb2ZpbGUgYWNjZXNzZXMuCisgKi8KKworI2RlZmluZSBBQV9ERUJVRyhmbXQsIGFyZ3MuLi4pCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKGFhX2dfZGVidWcgJiYgcHJpbnRrX3JhdGVsaW1pdCgpKQkJCVwKKwkJCXByaW50ayhLRVJOX0RFQlVHICJBcHBBcm1vcjogIiBmbXQsICMjYXJncyk7CVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIEFBX0VSUk9SKGZtdCwgYXJncy4uLikJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQkJCQkJXAorCQkJcHJpbnRrKEtFUk5fRVJSICJBcHBBcm1vcjogIiBmbXQsICMjYXJncyk7CVwKKwl9IHdoaWxlICgwKQorCisvKiBGbGFnIGluZGljYXRpbmcgd2hldGhlciBpbml0aWFsaXphdGlvbiBjb21wbGV0ZWQgKi8KK2V4dGVybiBpbnQgYXBwYXJtb3JfaW5pdGlhbGl6ZWQgX19pbml0ZGF0YTsKKworLyogZm4ncyBpbiBsaWIgKi8KK2NoYXIgKmFhX3NwbGl0X2ZxbmFtZShjaGFyICphcmdzLCBjaGFyICoqbnNfbmFtZSk7Cit2b2lkIGFhX2luZm9fbWVzc2FnZShjb25zdCBjaGFyICpzdHIpOwordm9pZCAqa3ZtYWxsb2Moc2l6ZV90IHNpemUpOwordm9pZCBrdmZyZWUodm9pZCAqYnVmZmVyKTsKKworCisvKioKKyAqIGFhX3N0cm5lcSAtIGNvbXBhcmUgbnVsbCB0ZXJtaW5hdGVkIEBzdHIgdG8gYSBub24gbnVsbCB0ZXJtaW5hdGVkIHN1YnN0cmluZworICogQHN0cjogYSBudWxsIHRlcm1pbmF0ZWQgc3RyaW5nCisgKiBAc3ViOiBhIHN1YnN0cmluZywgbm90IG5lY2Vzc2FyaWx5IG51bGwgdGVybWluYXRlZAorICogQGxlbjogbGVuZ3RoIG9mIEBzdWIgdG8gY29tcGFyZQorICoKKyAqIFRoZSBAc3RyIHN0cmluZyBtdXN0IGJlIGZ1bGwgY29uc3VtZWQgZm9yIHRoaXMgdG8gYmUgY29uc2lkZXJlZCBhIG1hdGNoCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBhYV9zdHJuZXEoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpzdWIsIGludCBsZW4pCit7CisJcmV0dXJuICFzdHJuY21wKHN0ciwgc3ViLCBsZW4pICYmICFzdHJbbGVuXTsKK30KKworLyoqCisgKiBhYV9kZmFfbnVsbF90cmFuc2l0aW9uIC0gc3RlcCB0byBuZXh0IHN0YXRlIGFmdGVyIG51bGwgY2hhcmFjdGVyCisgKiBAZGZhOiB0aGUgZGZhIHRvIG1hdGNoIGFnYWluc3QKKyAqIEBzdGFydDogdGhlIHN0YXRlIG9mIHRoZSBkZmEgdG8gc3RhcnQgbWF0Y2hpbmcgaW4KKyAqCisgKiBhYV9kZmFfbnVsbF90cmFuc2l0aW9uIHRyYW5zaXRpb25zIHRvIHRoZSBuZXh0IHN0YXRlIGFmdGVyIGEgbnVsbAorICogY2hhcmFjdGVyIHdoaWNoIGlzIG5vdCB1c2VkIGluIHN0YW5kYXJkIG1hdGNoaW5nIGFuZCBpcyBvbmx5CisgKiB1c2VkIHRvIHNlcGFyYXRlIHBhaXJzLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhYV9kZmFfbnVsbF90cmFuc2l0aW9uKHN0cnVjdCBhYV9kZmEgKmRmYSwKKwkJCQkJCSAgdW5zaWduZWQgaW50IHN0YXJ0KQoreworCS8qIHRoZSBudWxsIHRyYW5zaXRpb24gb25seSBuZWVkcyB0aGUgc3RyaW5nJ3MgbnVsbCB0ZXJtaW5hdG9yIGJ5dGUgKi8KKwlyZXR1cm4gYWFfZGZhX21hdGNoX2xlbihkZmEsIHN0YXJ0LCAiIiwgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBtZWRpYXRlZF9maWxlc3lzdGVtKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuICEoaW5vZGUtPmlfc2ItPnNfZmxhZ3MgJiBNU19OT1VTRVIpOworfQorCisjZW5kaWYgLyogX19BUFBBUk1PUl9IICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2FwcGFybW9yZnMuaCBiL3NlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvYXBwYXJtb3Jmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMWU5M2EKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2FwcGFybW9yZnMuaApAQCAtMCwwICsxLDIwIEBACisvKgorICogQXBwQXJtb3Igc2VjdXJpdHkgbW9kdWxlCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIEFwcEFybW9yIGZpbGVzeXN0ZW0gZGVmaW5pdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDggTm92ZWxsL1NVU0UKKyAqIENvcHlyaWdodCAyMDA5LTIwMTAgQ2Fub25pY2FsIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfX0FBX0FQUEFSTU9SRlNfSAorI2RlZmluZSBfX0FBX0FQUEFSTU9SRlNfSAorCitleHRlcm4gdm9pZCBfX2luaXQgYWFfZGVzdHJveV9hYWZzKHZvaWQpOworCisjZW5kaWYgLyogX19BQV9BUFBBUk1PUkZTX0ggKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvYXVkaXQuaCBiL3NlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvYXVkaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTUxNzg2Ci0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hdWRpdC5oCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQXBwQXJtb3Igc2VjdXJpdHkgbW9kdWxlCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIEFwcEFybW9yIGF1ZGl0aW5nIGZ1bmN0aW9uIGRlZmluaXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDA4IE5vdmVsbC9TVVNFCisgKiBDb3B5cmlnaHQgMjAwOS0yMDEwIENhbm9uaWNhbCBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX19BQV9BVURJVF9ICisjZGVmaW5lIF9fQUFfQVVESVRfSAorCisjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xzbV9hdWRpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSAiZmlsZS5oIgorCitzdHJ1Y3QgYWFfcHJvZmlsZTsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmF1ZGl0X21vZGVfbmFtZXNbXTsKKyNkZWZpbmUgQVVESVRfTUFYX0lOREVYIDUKKworI2RlZmluZSBBVURJVF9BUFBBUk1PUl9BVVRPIDAJLyogYXV0byBjaG9vc2UgYXVkaXQgbWVzc2FnZSB0eXBlICovCisKK2VudW0gYXVkaXRfbW9kZSB7CisJQVVESVRfTk9STUFMLAkJLyogZm9sbG93IG5vcm1hbCBhdWRpdGluZyBvZiBhY2Nlc3NlcyAqLworCUFVRElUX1FVSUVUX0RFTklFRCwJLyogcXVpZXQgYWxsIGRlbmllZCBhY2Nlc3MgbWVzc2FnZXMgKi8KKwlBVURJVF9RVUlFVCwJCS8qIHF1aWV0IGFsbCBtZXNzYWdlcyAqLworCUFVRElUX05PUVVJRVQsCQkvKiBkbyBub3QgcXVpZXQgYXVkaXQgbWVzc2FnZXMgKi8KKwlBVURJVF9BTEwJCS8qIGF1ZGl0IGFsbCBhY2Nlc3NlcyAqLworfTsKKworZW51bSBhdWRpdF90eXBlIHsKKwlBVURJVF9BUFBBUk1PUl9BVURJVCwKKwlBVURJVF9BUFBBUk1PUl9BTExPV0VELAorCUFVRElUX0FQUEFSTU9SX0RFTklFRCwKKwlBVURJVF9BUFBBUk1PUl9ISU5ULAorCUFVRElUX0FQUEFSTU9SX1NUQVRVUywKKwlBVURJVF9BUFBBUk1PUl9FUlJPUiwKKwlBVURJVF9BUFBBUk1PUl9LSUxMCit9OworCitleHRlcm4gY29uc3QgY2hhciAqb3BfdGFibGVbXTsKK2VudW0gYWFfb3BzIHsKKwlPUF9OVUxMLAorCisJT1BfU1lTQ1RMLAorCU9QX0NBUEFCTEUsCisKKwlPUF9VTkxJTkssCisJT1BfTUtESVIsCisJT1BfUk1ESVIsCisJT1BfTUtOT0QsCisJT1BfVFJVTkMsCisJT1BfTElOSywKKwlPUF9TWU1MSU5LLAorCU9QX1JFTkFNRV9TUkMsCisJT1BfUkVOQU1FX0RFU1QsCisJT1BfQ0hNT0QsCisJT1BfQ0hPV04sCisJT1BfR0VUQVRUUiwKKwlPUF9PUEVOLAorCisJT1BfRlBFUk0sCisJT1BfRkxPQ0ssCisJT1BfRk1NQVAsCisJT1BfRk1QUk9ULAorCisJT1BfQ1JFQVRFLAorCU9QX1BPU1RfQ1JFQVRFLAorCU9QX0JJTkQsCisJT1BfQ09OTkVDVCwKKwlPUF9MSVNURU4sCisJT1BfQUNDRVBULAorCU9QX1NFTkRNU0csCisJT1BfUkVDVk1TRywKKwlPUF9HRVRTT0NLTkFNRSwKKwlPUF9HRVRQRUVSTkFNRSwKKwlPUF9HRVRTT0NLT1BULAorCU9QX1NFVFNPQ0tPUFQsCisJT1BfU09DS19TSFVURE9XTiwKKworCU9QX1BUUkFDRSwKKworCU9QX0VYRUMsCisJT1BfQ0hBTkdFX0hBVCwKKwlPUF9DSEFOR0VfUFJPRklMRSwKKwlPUF9DSEFOR0VfT05FWEVDLAorCisJT1BfU0VUUFJPQ0FUVFIsCisJT1BfU0VUUkxJTUlULAorCisJT1BfUFJPRl9SRVBMLAorCU9QX1BST0ZfTE9BRCwKKwlPUF9QUk9GX1JNLAorfTsKKworCisvKiBkZWZpbmUgYSBzaG9ydCBoYW5kIGZvciBhcHBhcm1vcl9hdWRpdF9kYXRhIHBvcnRpb24gb2YgY29tbW9uX2F1ZGl0X2RhdGEgKi8KKyNkZWZpbmUgYWFkIGFwcGFybW9yX2F1ZGl0X2RhdGEKKwordm9pZCBhYV9hdWRpdF9tc2coaW50IHR5cGUsIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqc2EsCisJCSAgdm9pZCAoKmNiKSAoc3RydWN0IGF1ZGl0X2J1ZmZlciAqLCB2b2lkICopKTsKK2ludCBhYV9hdWRpdChpbnQgdHlwZSwgc3RydWN0IGFhX3Byb2ZpbGUgKnByb2ZpbGUsIGdmcF90IGdmcCwKKwkgICAgIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqc2EsCisJICAgICB2b2lkICgqY2IpIChzdHJ1Y3QgYXVkaXRfYnVmZmVyICosIHZvaWQgKikpOworCitzdGF0aWMgaW5saW5lIGludCBjb21wbGFpbl9lcnJvcihpbnQgZXJyb3IpCit7CisJaWYgKGVycm9yID09IC1FUEVSTSB8fCBlcnJvciA9PSAtRUFDQ0VTKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKyNlbmRpZiAvKiBfX0FBX0FVRElUX0ggKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvY2FwYWJpbGl0eS5oIGIvc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9jYXBhYmlsaXR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI0ZDI5NQotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvY2FwYWJpbGl0eS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBBcHBBcm1vciBzZWN1cml0eSBtb2R1bGUKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgQXBwQXJtb3IgY2FwYWJpbGl0eSBtZWRpYXRpb24gZGVmaW5pdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDggTm92ZWxsL1NVU0UKKyAqIENvcHlyaWdodCAyMDA5LTIwMTAgQ2Fub25pY2FsIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfX0FBX0NBUEFCSUxJVFlfSAorI2RlZmluZSBfX0FBX0NBUEFCSUxJVFlfSAorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworc3RydWN0IGFhX3Byb2ZpbGU7CisKKy8qIGFhX2NhcHMgLSBjb25maW5lbWVudCBkYXRhIGZvciBjYXBhYmlsaXRpZXMKKyAqIEBhbGxvd2VkOiBjYXBhYmlsaXRpZXMgbWFzaworICogQGF1ZGl0OiBjYXBzIHRoYXQgYXJlIHRvIGJlIGF1ZGl0ZWQKKyAqIEBxdWlldDogY2FwcyB0aGF0IHNob3VsZCBub3QgYmUgYXVkaXRlZAorICogQGtpbGw6IGNhcHMgdGhhdCB3aGVuIHJlcXVlc3RlZCB3aWxsIHJlc3VsdCBpbiB0aGUgdGFzayBiZWluZyBraWxsZWQKKyAqIEBleHRlbmRlZDogY2FwcyB0aGF0IGFyZSBzdWJqZWN0IGZpbmVyIGdyYWluZWQgbWVkaWF0aW9uCisgKi8KK3N0cnVjdCBhYV9jYXBzIHsKKwlrZXJuZWxfY2FwX3QgYWxsb3c7CisJa2VybmVsX2NhcF90IGF1ZGl0OworCWtlcm5lbF9jYXBfdCBxdWlldDsKKwlrZXJuZWxfY2FwX3Qga2lsbDsKKwlrZXJuZWxfY2FwX3QgZXh0ZW5kZWQ7Cit9OworCitpbnQgYWFfY2FwYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlLCBpbnQgY2FwLAorCSAgICAgICBpbnQgYXVkaXQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgYWFfZnJlZV9jYXBfcnVsZXMoc3RydWN0IGFhX2NhcHMgKmNhcHMpCit7CisJLyogTk9QICovCit9CisKKyNlbmRpZiAvKiBfX0FBX0NBUEJJTElUWV9IICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2NvbnRleHQuaCBiL3NlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5Y2JlZTQKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2NvbnRleHQuaApAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIEFwcEFybW9yIHNlY3VyaXR5IG1vZHVsZQorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBBcHBBcm1vciBjb250ZXh0cyB1c2VkIHRvIGFzc29jaWF0ZSAibGFiZWxzIiB0byBvYmplY3RzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDA4IE5vdmVsbC9TVVNFCisgKiBDb3B5cmlnaHQgMjAwOS0yMDEwIENhbm9uaWNhbCBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX19BQV9DT05URVhUX0gKKyNkZWZpbmUgX19BQV9DT05URVhUX0gKKworI2luY2x1ZGUgPGxpbnV4L2NyZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworI2luY2x1ZGUgInBvbGljeS5oIgorCisvKiBzdHJ1Y3QgYWFfZmlsZV9jeHQgLSB0aGUgQXBwQXJtb3IgY29udGV4dCB0aGUgZmlsZSB3YXMgb3BlbmVkIGluCisgKiBAcGVybXM6IHRoZSBwZXJtaXNzaW9uIHRoZSBmaWxlIHdhcyBvcGVuZWQgd2l0aAorICoKKyAqIFRoZSBmaWxlX2N4dCBjb3VsZCBjdXJyZW50bHkgYmUgZGlyZWN0bHkgc3RvcmVkIGluIGZpbGUtPmZfc2VjdXJpdHkKKyAqIGFzIHRoZSBwcm9maWxlIHJlZmVyZW5jZSBpcyBub3cgc3RvcmVkIGluIHRoZSBmX2NyZWQuICBIb3dldmVyIHRoZQorICogY3h0IHN0cnVjdCB3aWxsIGV4cGFuZCBpbiB0aGUgZnV0dXJlIHNvIHdlIGtlZXAgdGhlIHN0cnVjdC4KKyAqLworc3RydWN0IGFhX2ZpbGVfY3h0IHsKKwl1MTYgYWxsb3c7Cit9OworCisvKioKKyAqIGFhX2FsbG9jX2ZpbGVfY29udGV4dCAtIGFsbG9jYXRlIGZpbGVfY3h0CisgKiBAZ2ZwOiBnZnAgZmxhZ3MgZm9yIGFsbG9jYXRpb24KKyAqCisgKiBSZXR1cm5zOiBmaWxlX2N4dCBvciBOVUxMIG9uIGZhaWx1cmUKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgYWFfZmlsZV9jeHQgKmFhX2FsbG9jX2ZpbGVfY29udGV4dChnZnBfdCBnZnApCit7CisJcmV0dXJuIGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhYV9maWxlX2N4dCksIGdmcCk7Cit9CisKKy8qKgorICogYWFfZnJlZV9maWxlX2NvbnRleHQgLSBmcmVlIGEgZmlsZV9jeHQKKyAqIEBjeHQ6IGZpbGVfY3h0IHRvIGZyZWUgIChNQVlCRV9OVUxMKQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYWFfZnJlZV9maWxlX2NvbnRleHQoc3RydWN0IGFhX2ZpbGVfY3h0ICpjeHQpCit7CisJaWYgKGN4dCkKKwkJa3pmcmVlKGN4dCk7Cit9CisKKy8qKgorICogc3RydWN0IGFhX3Rhc2tfY3h0IC0gcHJpbWFyeSBsYWJlbCBmb3IgY29uZmluZWQgdGFza3MKKyAqIEBwcm9maWxlOiB0aGUgY3VycmVudCBwcm9maWxlICAgKE5PVCBOVUxMKQorICogQGV4ZWM6IHByb2ZpbGUgdG8gdHJhbnNpdGlvbiB0byBvbiBuZXh0IGV4ZWMgIChNQVlCRSBOVUxMKQorICogQHByZXZpb3VzOiBwcm9maWxlIHRoZSB0YXNrIG1heSByZXR1cm4gdG8gICAgIChNQVlCRSBOVUxMKQorICogQHRva2VuOiBtYWdpYyB2YWx1ZSB0aGUgdGFzayBtdXN0IGtub3cgZm9yIHJldHVybmluZyB0byBAcHJldmlvdXNfcHJvZmlsZQorICoKKyAqIENvbnRhaW5zIHRoZSB0YXNrJ3MgY3VycmVudCBwcm9maWxlICh3aGljaCBjb3VsZCBjaGFuZ2UgZHVlIHRvCisgKiBjaGFuZ2VfaGF0KS4gIFBsdXMgdGhlIGhhdF9tYWdpYyBuZWVkZWQgZHVyaW5nIGNoYW5nZV9oYXQuCisgKgorICogVE9ETzogbWFrZSBzbyBhIHRhc2sgY2FuIGJlIGNvbmZpbmVkIGJ5IGEgc3RhY2sgb2YgY29udGV4dHMKKyAqLworc3RydWN0IGFhX3Rhc2tfY3h0IHsKKwlzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZTsKKwlzdHJ1Y3QgYWFfcHJvZmlsZSAqb25leGVjOworCXN0cnVjdCBhYV9wcm9maWxlICpwcmV2aW91czsKKwl1NjQgdG9rZW47Cit9OworCitzdHJ1Y3QgYWFfdGFza19jeHQgKmFhX2FsbG9jX3Rhc2tfY29udGV4dChnZnBfdCBmbGFncyk7Cit2b2lkIGFhX2ZyZWVfdGFza19jb250ZXh0KHN0cnVjdCBhYV90YXNrX2N4dCAqY3h0KTsKK3ZvaWQgYWFfZHVwX3Rhc2tfY29udGV4dChzdHJ1Y3QgYWFfdGFza19jeHQgKm5ldywKKwkJCSBjb25zdCBzdHJ1Y3QgYWFfdGFza19jeHQgKm9sZCk7CitpbnQgYWFfcmVwbGFjZV9jdXJyZW50X3Byb2ZpbGUoc3RydWN0IGFhX3Byb2ZpbGUgKnByb2ZpbGUpOworaW50IGFhX3NldF9jdXJyZW50X29uZXhlYyhzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSk7CitpbnQgYWFfc2V0X2N1cnJlbnRfaGF0KHN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlLCB1NjQgdG9rZW4pOworaW50IGFhX3Jlc3RvcmVfcHJldmlvdXNfcHJvZmlsZSh1NjQgY29va2llKTsKKworLyoqCisgKiBfX2FhX3Rhc2tfaXNfY29uZmluZWQgLSBkZXRlcm1pbmUgaWYgQHRhc2sgaGFzIGFueSBjb25maW5lbWVudAorICogQHRhc2s6IHRhc2sgdG8gY2hlY2sgY29uZmluZW1lbnQgb2YgIChOT1QgTlVMTCkKKyAqCisgKiBJZiBAdGFzayAhPSBjdXJyZW50IG5lZWRzIHRvIGJlIGNhbGxlZCBpbiBSQ1Ugc2FmZSBjcml0aWNhbCBzZWN0aW9uCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBfX2FhX3Rhc2tfaXNfY29uZmluZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXN0cnVjdCBhYV90YXNrX2N4dCAqY3h0ID0gX190YXNrX2NyZWQodGFzayktPnNlY3VyaXR5OworCisJQlVHX09OKCFjeHQgfHwgIWN4dC0+cHJvZmlsZSk7CisJaWYgKHVuY29uZmluZWQoYWFfbmV3ZXN0X3ZlcnNpb24oY3h0LT5wcm9maWxlKSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogYWFfY3JlZF9wcm9maWxlIC0gb2J0YWluIGNyZWQncyBwcm9maWxlcworICogQGNyZWQ6IGNyZWQgdG8gb2J0YWluIHByb2ZpbGVzIGZyb20gIChOT1QgTlVMTCkKKyAqCisgKiBSZXR1cm5zOiBjb25maW5pbmcgcHJvZmlsZQorICoKKyAqIGRvZXMgTk9UIGluY3JlbWVudCByZWZlcmVuY2UgY291bnQKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfY3JlZF9wcm9maWxlKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKQoreworCXN0cnVjdCBhYV90YXNrX2N4dCAqY3h0ID0gY3JlZC0+c2VjdXJpdHk7CisJQlVHX09OKCFjeHQgfHwgIWN4dC0+cHJvZmlsZSk7CisJcmV0dXJuIGFhX25ld2VzdF92ZXJzaW9uKGN4dC0+cHJvZmlsZSk7Cit9CisKKy8qKgorICogX19hYV9jdXJyZW50X3Byb2ZpbGUgLSBmaW5kIHRoZSBjdXJyZW50IHRhc2tzIGNvbmZpbmluZyBwcm9maWxlCisgKgorICogUmV0dXJuczogdXAgdG8gZGF0ZSBjb25maW5pbmcgcHJvZmlsZSBvciB0aGUgbnMgdW5jb25maW5lZCBwcm9maWxlIChOT1QgTlVMTCkKKyAqCisgKiBUaGlzIGZuIHdpbGwgbm90IHVwZGF0ZSB0aGUgdGFza3MgY3JlZCB0byB0aGUgbW9zdCB1cCB0byBkYXRlIHZlcnNpb24KKyAqIG9mIHRoZSBwcm9maWxlIHNvIGl0IGlzIHNhZmUgdG8gY2FsbCB3aGVuIGluc2lkZSBvZiBsb2Nrcy4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgYWFfcHJvZmlsZSAqX19hYV9jdXJyZW50X3Byb2ZpbGUodm9pZCkKK3sKKwlyZXR1cm4gYWFfY3JlZF9wcm9maWxlKGN1cnJlbnRfY3JlZCgpKTsKK30KKworLyoqCisgKiBhYV9jdXJyZW50X3Byb2ZpbGUgLSBmaW5kIHRoZSBjdXJyZW50IHRhc2tzIGNvbmZpbmluZyBwcm9maWxlIGFuZCBkbyB1cGRhdGVzCisgKgorICogUmV0dXJuczogdXAgdG8gZGF0ZSBjb25maW5pbmcgcHJvZmlsZSBvciB0aGUgbnMgdW5jb25maW5lZCBwcm9maWxlIChOT1QgTlVMTCkKKyAqCisgKiBUaGlzIGZuIHdpbGwgdXBkYXRlIHRoZSB0YXNrcyBjcmVkIHN0cnVjdHVyZSBpZiB0aGUgcHJvZmlsZSBoYXMgYmVlbgorICogcmVwbGFjZWQuICBOb3Qgc2FmZSB0byBjYWxsIGluc2lkZSBsb2NrcworICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhYV9wcm9maWxlICphYV9jdXJyZW50X3Byb2ZpbGUodm9pZCkKK3sKKwljb25zdCBzdHJ1Y3QgYWFfdGFza19jeHQgKmN4dCA9IGN1cnJlbnRfY3JlZCgpLT5zZWN1cml0eTsKKwlzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZTsKKwlCVUdfT04oIWN4dCB8fCAhY3h0LT5wcm9maWxlKTsKKworCXByb2ZpbGUgPSBhYV9uZXdlc3RfdmVyc2lvbihjeHQtPnByb2ZpbGUpOworCS8qCisJICogV2hldGhlciBvciBub3QgcmVwbGFjZW1lbnQgc3VjY2VlZHMsIHVzZSBuZXdlc3QgcHJvZmlsZSBzbworCSAqIHRoZXJlIGlzIG5vIG5lZWQgdG8gdXBkYXRlIGl0IGFmdGVyIHJlcGxhY2VtZW50LgorCSAqLworCWlmICh1bmxpa2VseSgoY3h0LT5wcm9maWxlICE9IHByb2ZpbGUpKSkKKwkJYWFfcmVwbGFjZV9jdXJyZW50X3Byb2ZpbGUocHJvZmlsZSk7CisKKwlyZXR1cm4gcHJvZmlsZTsKK30KKworI2VuZGlmIC8qIF9fQUFfQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2RvbWFpbi5oIGIvc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9kb21haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTA0NDY0Ci0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9kb21haW4uaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQXBwQXJtb3Igc2VjdXJpdHkgbW9kdWxlCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIEFwcEFybW9yIHNlY3VyaXR5IGRvbWFpbiB0cmFuc2l0aW9uIGZ1bmN0aW9uIGRlZmluaXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDA4IE5vdmVsbC9TVVNFCisgKiBDb3B5cmlnaHQgMjAwOS0yMDEwIENhbm9uaWNhbCBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2lmbmRlZiBfX0FBX0RPTUFJTl9ICisjZGVmaW5lIF9fQUFfRE9NQUlOX0gKKworc3RydWN0IGFhX2RvbWFpbiB7CisJaW50IHNpemU7CisJY2hhciAqKnRhYmxlOworfTsKKworaW50IGFwcGFybW9yX2Jwcm1fc2V0X2NyZWRzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pOworaW50IGFwcGFybW9yX2Jwcm1fc2VjdXJlZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKTsKK3ZvaWQgYXBwYXJtb3JfYnBybV9jb21taXR0aW5nX2NyZWRzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pOwordm9pZCBhcHBhcm1vcl9icHJtX2NvbW1pdHRlZF9jcmVkcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKTsKKwordm9pZCBhYV9mcmVlX2RvbWFpbl9lbnRyaWVzKHN0cnVjdCBhYV9kb21haW4gKmRvbWFpbik7CitpbnQgYWFfY2hhbmdlX2hhdChjb25zdCBjaGFyICpoYXRzW10sIGludCBjb3VudCwgdTY0IHRva2VuLCBib29sIHBlcm10ZXN0KTsKK2ludCBhYV9jaGFuZ2VfcHJvZmlsZShjb25zdCBjaGFyICpuc19uYW1lLCBjb25zdCBjaGFyICpuYW1lLCBib29sIG9uZXhlYywKKwkJICAgICAgYm9vbCBwZXJtdGVzdCk7CisKKyNlbmRpZiAvKiBfX0FBX0RPTUFJTl9IICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2ZpbGUuaCBiL3NlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMzZmZWEKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2ZpbGUuaApAQCAtMCwwICsxLDIxNyBAQAorLyoKKyAqIEFwcEFybW9yIHNlY3VyaXR5IG1vZHVsZQorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBBcHBBcm1vciBmaWxlIG1lZGlhdGlvbiBmdW5jdGlvbiBkZWZpbml0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOCBOb3ZlbGwvU1VTRQorICogQ29weXJpZ2h0IDIwMDktMjAxMCBDYW5vbmljYWwgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9fQUFfRklMRV9ICisjZGVmaW5lIF9fQUFfRklMRV9ICisKKyNpbmNsdWRlIDxsaW51eC9wYXRoLmg+CisKKyNpbmNsdWRlICJkb21haW4uaCIKKyNpbmNsdWRlICJtYXRjaC5oIgorCitzdHJ1Y3QgYWFfcHJvZmlsZTsKKworLyoKKyAqIFdlIHVzZSBNQVlfRVhFQywgTUFZX1dSSVRFLCBNQVlfUkVBRCwgTUFZX0FQUEVORCBhbmQgdGhlIGZvbGxvd2luZyBmbGFncworICogZm9yIHByb2ZpbGUgcGVybWlzc2lvbnMKKyAqLworI2RlZmluZSBBQV9NQVlfQ1JFQVRFICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIEFBX01BWV9ERUxFVEUgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgQUFfTUFZX01FVEFfV1JJVEUgICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBBQV9NQVlfTUVUQV9SRUFEICAgICAgICAgICAgICAgMHgwMDgwCisKKyNkZWZpbmUgQUFfTUFZX0NITU9EICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBBQV9NQVlfQ0hPV04gICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIEFBX01BWV9MT0NLICAgICAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgQUFfRVhFQ19NTUFQICAgICAgICAgICAgICAgICAgIDB4MDgwMAorCisjZGVmaW5lIEFBX01BWV9MSU5LCQkJMHgxMDAwCisjZGVmaW5lIEFBX0xJTktfU1VCU0VUCQkJQUFfTUFZX0xPQ0sJLyogb3ZlcmxhaWQgKi8KKyNkZWZpbmUgQUFfTUFZX09ORVhFQwkJCTB4NDAwMDAwMDAJLyogZXhlYyBhbGxvd3Mgb25leGVjICovCisjZGVmaW5lIEFBX01BWV9DSEFOR0VfUFJPRklMRQkJMHg4MDAwMDAwMAorI2RlZmluZSBBQV9NQVlfQ0hBTkdFSEFUCQkweDgwMDAwMDAwCS8qIGN0cmwgYXVkaXRpbmcgb25seSAqLworCisjZGVmaW5lIEFBX0FVRElUX0ZJTEVfTUFTSwkoTUFZX1JFQUQgfCBNQVlfV1JJVEUgfCBNQVlfRVhFQyB8IE1BWV9BUFBFTkQgfFwKKwkJCQkgQUFfTUFZX0NSRUFURSB8IEFBX01BWV9ERUxFVEUgfAlcCisJCQkJIEFBX01BWV9NRVRBX1JFQUQgfCBBQV9NQVlfTUVUQV9XUklURSB8IFwKKwkJCQkgQUFfTUFZX0NITU9EIHwgQUFfTUFZX0NIT1dOIHwgQUFfTUFZX0xPQ0sgfCBcCisJCQkJIEFBX0VYRUNfTU1BUCB8IEFBX01BWV9MSU5LKQorCisvKgorICogVGhlIHhpbmRleCBpcyBicm9rZW4gaW50byAzIHBhcnRzCisgKiAtIGluZGV4IC0gYW4gaW5kZXggaW50byBlaXRoZXIgdGhlIGV4ZWMgbmFtZSB0YWJsZSBvciB0aGUgdmFyaWFibGUgdGFibGUKKyAqIC0gZXhlYyB0eXBlIC0gd2hpY2ggZGV0ZXJtaW5lcyBob3cgdGhlIGV4ZWN1dGFibGUgbmFtZSBhbmQgaW5kZXggYXJlIHVzZWQKKyAqIC0gZmxhZ3MgLSB3aGljaCBtb2RpZnkgaG93IHRoZSBkZXN0aW5hdGlvbiBuYW1lIGlzIGFwcGxpZWQKKyAqLworI2RlZmluZSBBQV9YX0lOREVYX01BU0sJCTB4MDNmZgorCisjZGVmaW5lIEFBX1hfVFlQRV9NQVNLCQkweDBjMDAKKyNkZWZpbmUgQUFfWF9UWVBFX1NISUZUCQkxMAorI2RlZmluZSBBQV9YX05PTkUJCTB4MDAwMAorI2RlZmluZSBBQV9YX05BTUUJCTB4MDQwMAkvKiB1c2UgZXhlY3V0YWJsZSBuYW1lIHB4ICovCisjZGVmaW5lIEFBX1hfVEFCTEUJCTB4MDgwMAkvKiB1c2UgYSBzcGVjaWZpZWQgbmFtZSAtPm4jICovCisKKyNkZWZpbmUgQUFfWF9VTlNBRkUJCTB4MTAwMAorI2RlZmluZSBBQV9YX0NISUxECQkweDIwMDAJLyogbWFrZSA+QUFfWF9OT05FIGFwcGx5IHRvIGNoaWxkcmVuICovCisjZGVmaW5lIEFBX1hfSU5IRVJJVAkJMHg0MDAwCisjZGVmaW5lIEFBX1hfVU5DT05GSU5FRAkJMHg4MDAwCisKKy8qIEFBX1NFQ1VSRV9YX05FRURFRCAtIGlzIHBhc3NlZCBpbiB0aGUgYnBybS0+dW5zYWZlIGZpZWxkICovCisjZGVmaW5lIEFBX1NFQ1VSRV9YX05FRURFRAkweDgwMDAKKworLyogbmVlZCB0byBtYWtlIGNvbmRpdGlvbmFsIHdoaWNoIG9uZXMgYXJlIGJlaW5nIHNldCAqLworc3RydWN0IHBhdGhfY29uZCB7CisJdWlkX3QgdWlkOworCXVtb2RlX3QgbW9kZTsKK307CisKKy8qIHN0cnVjdCBmaWxlX3Blcm1zIC0gZmlsZSBwZXJtaXNzaW9uCisgKiBAYWxsb3c6IG1hc2sgb2YgcGVybWlzc2lvbnMgdGhhdCBhcmUgYWxsb3dlZAorICogQGF1ZGl0OiBtYXNrIG9mIHBlcm1pc3Npb25zIHRvIGZvcmNlIGFuIGF1ZGl0IG1lc3NhZ2UgZm9yCisgKiBAcXVpZXQ6IG1hc2sgb2YgcGVybWlzc2lvbnMgdG8gcXVpZXQgYXVkaXQgbWVzc2FnZXMgZm9yCisgKiBAa2lsbDogbWFzayBvZiBwZXJtaXNzaW9ucyB0aGF0IHdoZW4gbWF0Y2hlZCB3aWxsIGtpbGwgdGhlIHRhc2sKKyAqIEB4aW5kZXg6IGV4ZWMgdHJhbnNpdGlvbiBpbmRleCBpZiBAYWxsb3cgY29udGFpbnMgTUFZX0VYRUMKKyAqCisgKiBUaGUgQGF1ZGl0IGFuZCBAcXVlaXQgbWFzayBzaG91bGQgYmUgbXV0dWFsbHkgZXhjbHVzaXZlLgorICovCitzdHJ1Y3QgZmlsZV9wZXJtcyB7CisJdTMyIGFsbG93OworCXUzMiBhdWRpdDsKKwl1MzIgcXVpZXQ7CisJdTMyIGtpbGw7CisJdTE2IHhpbmRleDsKK307CisKK2V4dGVybiBzdHJ1Y3QgZmlsZV9wZXJtcyBudWxscGVybXM7CisKKyNkZWZpbmUgQ09NQklORURfUEVSTV9NQVNLKFgpICgoWCkuYWxsb3cgfCAoWCkuYXVkaXQgfCAoWCkucXVpZXQgfCAoWCkua2lsbCkKKworLyogRklYTUU6IHNwbGl0IHBlcm1zIGZyb20gZGZhIGFuZCBtYXRjaCB0aGlzIHRvIGRlc2NyaXB0aW9uCisgKiAgICAgICAgYWxzbyBhZGQgZGVsZWdhdGlvbiBpbmZvLgorICovCitzdGF0aWMgaW5saW5lIHUxNiBkZmFfbWFwX3hpbmRleCh1MTYgbWFzaykKK3sKKwl1MTYgb2xkX2luZGV4ID0gKG1hc2sgPj4gMTApICYgMHhmOworCXUxNiBpbmRleCA9IDA7CisKKwlpZiAobWFzayAmIDB4MTAwKQorCQlpbmRleCB8PSBBQV9YX1VOU0FGRTsKKwlpZiAobWFzayAmIDB4MjAwKQorCQlpbmRleCB8PSBBQV9YX0lOSEVSSVQ7CisJaWYgKG1hc2sgJiAweDgwKQorCQlpbmRleCB8PSBBQV9YX1VOQ09ORklORUQ7CisKKwlpZiAob2xkX2luZGV4ID09IDEpIHsKKwkJaW5kZXggfD0gQUFfWF9VTkNPTkZJTkVEOworCX0gZWxzZSBpZiAob2xkX2luZGV4ID09IDIpIHsKKwkJaW5kZXggfD0gQUFfWF9OQU1FOworCX0gZWxzZSBpZiAob2xkX2luZGV4ID09IDMpIHsKKwkJaW5kZXggfD0gQUFfWF9OQU1FIHwgQUFfWF9DSElMRDsKKwl9IGVsc2UgeworCQlpbmRleCB8PSBBQV9YX1RBQkxFOworCQlpbmRleCB8PSBvbGRfaW5kZXggLSA0OworCX0KKworCXJldHVybiBpbmRleDsKK30KKworLyoKKyAqIG1hcCBvbGQgZGZhIGlubGluZSBwZXJtaXNzaW9ucyB0byBuZXcgZm9ybWF0CisgKi8KKyNkZWZpbmUgZGZhX3VzZXJfYWxsb3coZGZhLCBzdGF0ZSkgKCgoQUNDRVBUX1RBQkxFKGRmYSlbc3RhdGVdKSAmIDB4N2YpIHwgXAorCQkJCSAgICAoKEFDQ0VQVF9UQUJMRShkZmEpW3N0YXRlXSkgJiAweDgwMDAwMDAwKSkKKyNkZWZpbmUgZGZhX3VzZXJfYXVkaXQoZGZhLCBzdGF0ZSkgKChBQ0NFUFRfVEFCTEUyKGRmYSlbc3RhdGVdKSAmIDB4N2YpCisjZGVmaW5lIGRmYV91c2VyX3F1aWV0KGRmYSwgc3RhdGUpICgoKEFDQ0VQVF9UQUJMRTIoZGZhKVtzdGF0ZV0pID4+IDcpICYgMHg3ZikKKyNkZWZpbmUgZGZhX3VzZXJfeGluZGV4KGRmYSwgc3RhdGUpIFwKKwkoZGZhX21hcF94aW5kZXgoQUNDRVBUX1RBQkxFKGRmYSlbc3RhdGVdICYgMHgzZmZmKSkKKworI2RlZmluZSBkZmFfb3RoZXJfYWxsb3coZGZhLCBzdGF0ZSkgKCgoKEFDQ0VQVF9UQUJMRShkZmEpW3N0YXRlXSkgPj4gMTQpICYgXAorCQkJCSAgICAgIDB4N2YpIHwJCQkJXAorCQkJCSAgICAgKChBQ0NFUFRfVEFCTEUoZGZhKVtzdGF0ZV0pICYgMHg4MDAwMDAwMCkpCisjZGVmaW5lIGRmYV9vdGhlcl9hdWRpdChkZmEsIHN0YXRlKSAoKChBQ0NFUFRfVEFCTEUyKGRmYSlbc3RhdGVdKSA+PiAxNCkgJiAweDdmKQorI2RlZmluZSBkZmFfb3RoZXJfcXVpZXQoZGZhLCBzdGF0ZSkgXAorCSgoKChBQ0NFUFRfVEFCTEUyKGRmYSlbc3RhdGVdKSA+PiA3KSA+PiAxNCkgJiAweDdmKQorI2RlZmluZSBkZmFfb3RoZXJfeGluZGV4KGRmYSwgc3RhdGUpIFwKKwlkZmFfbWFwX3hpbmRleCgoQUNDRVBUX1RBQkxFKGRmYSlbc3RhdGVdID4+IDE0KSAmIDB4M2ZmZikKKworaW50IGFhX2F1ZGl0X2ZpbGUoc3RydWN0IGFhX3Byb2ZpbGUgKnByb2ZpbGUsIHN0cnVjdCBmaWxlX3Blcm1zICpwZXJtcywKKwkJICBnZnBfdCBnZnAsIGludCBvcCwgdTMyIHJlcXVlc3QsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgY29uc3QgY2hhciAqdGFyZ2V0LCB1aWRfdCBvdWlkLCBjb25zdCBjaGFyICppbmZvLCBpbnQgZXJyb3IpOworCisvKioKKyAqIHN0cnVjdCBhYV9maWxlX3J1bGVzIC0gY29tcG9uZW50cyB1c2VkIGZvciBmaWxlIHJ1bGUgcGVybWlzc2lvbnMKKyAqIEBkZmE6IGRmYSB0byBtYXRjaCBwYXRoIG5hbWVzIGFuZCBjb25kaXRpb25hbHMgYWdhaW5zdAorICogQHBlcm1zOiBwZXJtaXNzaW9uIHRhYmxlIGluZGV4ZWQgYnkgdGhlIG1hdGNoZWQgc3RhdGUgYWNjZXB0IGVudHJ5IG9mIEBkZmEKKyAqIEB0cmFuczogdHJhbnNpdGlvbiB0YWJsZSBmb3IgaW5kZXhlZCBieSBuYW1lZCB4IHRyYW5zaXRpb25zCisgKgorICogRmlsZSBwZXJtaXNzaW9uIGFyZSBkZXRlcm1pbmVkIGJ5IG1hdGNoaW5nIGEgcGF0aCBhZ2FpbnN0IEBkZmEgYW5kIHRoZW4KKyAqIHRoZW4gdXNpbmcgdGhlIHZhbHVlIG9mIHRoZSBhY2NlcHQgZW50cnkgZm9yIHRoZSBtYXRjaGluZyBzdGF0ZSBhcworICogYW4gaW5kZXggaW50byBAcGVybXMuICBJZiBhIG5hbWVkIGV4ZWMgdHJhbnNpdGlvbiBpcyByZXF1aXJlZCBpdCBpcworICogbG9va2VkIHVwIGluIHRoZSB0cmFuc2l0aW9uIHRhYmxlLgorICovCitzdHJ1Y3QgYWFfZmlsZV9ydWxlcyB7CisJdW5zaWduZWQgaW50IHN0YXJ0OworCXN0cnVjdCBhYV9kZmEgKmRmYTsKKwkvKiBzdHJ1Y3QgcGVybXMgcGVybXM7ICovCisJc3RydWN0IGFhX2RvbWFpbiB0cmFuczsKKwkvKiBUT0RPOiBhZGQgZGVsZWdhdGUgdGFibGUgKi8KK307CisKK3Vuc2lnbmVkIGludCBhYV9zdHJfcGVybXMoc3RydWN0IGFhX2RmYSAqZGZhLCB1bnNpZ25lZCBpbnQgc3RhcnQsCisJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBwYXRoX2NvbmQgKmNvbmQsCisJCQkgIHN0cnVjdCBmaWxlX3Blcm1zICpwZXJtcyk7CisKK2ludCBhYV9wYXRoX3Blcm0oaW50IG9wLCBzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSwgc3RydWN0IHBhdGggKnBhdGgsCisJCSBpbnQgZmxhZ3MsIHUzMiByZXF1ZXN0LCBzdHJ1Y3QgcGF0aF9jb25kICpjb25kKTsKKworaW50IGFhX3BhdGhfbGluayhzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKKwkJIHN0cnVjdCBwYXRoICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTsKKworaW50IGFhX2ZpbGVfcGVybShpbnQgb3AsIHN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJIHUzMiByZXF1ZXN0KTsKKworc3RhdGljIGlubGluZSB2b2lkIGFhX2ZyZWVfZmlsZV9ydWxlcyhzdHJ1Y3QgYWFfZmlsZV9ydWxlcyAqcnVsZXMpCit7CisJYWFfcHV0X2RmYShydWxlcy0+ZGZhKTsKKwlhYV9mcmVlX2RvbWFpbl9lbnRyaWVzKCZydWxlcy0+dHJhbnMpOworfQorCisjZGVmaW5lIEFDQ19GTU9ERSh4KSAoKCJcMDAwXDAwNFwwMDJcMDA2IlsoeCkmT19BQ0NNT0RFXSkgfCAoKCh4KSA8PCAxKSAmIDB4NDApKQorCisvKiBmcm9tIG5hbWVpLmMgKi8KKyNkZWZpbmUgTUFQX09QRU5fRkxBR1MoeCkgKCgoKHgpICsgMSkgJiBPX0FDQ01PREUpID8gKHgpICsgMSA6ICh4KSkKKworLyoqCisgKiBhYV9tYXBfZmlsZV9wZXJtcyAtIG1hcCBmaWxlIGZsYWdzIHRvIEFwcEFybW9yIHBlcm1pc3Npb25zCisgKiBAZmlsZTogb3BlbiBmaWxlIHRvIG1hcCBmbGFncyB0byBBcHBBcm1vciBwZXJtaXNzaW9ucworICoKKyAqIFJldHVybnM6IGFwcGFybW9yIHBlcm1pc3Npb24gc2V0IGZvciB0aGUgZmlsZQorICovCitzdGF0aWMgaW5saW5lIHUzMiBhYV9tYXBfZmlsZV90b19wZXJtcyhzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgZmxhZ3MgPSBNQVBfT1BFTl9GTEFHUyhmaWxlLT5mX2ZsYWdzKTsKKwl1MzIgcGVybXMgPSBBQ0NfRk1PREUoZmlsZS0+Zl9tb2RlKTsKKworCWlmICgoZmxhZ3MgJiBPX0FQUEVORCkgJiYgKHBlcm1zICYgTUFZX1dSSVRFKSkKKwkJcGVybXMgPSAocGVybXMgJiB+TUFZX1dSSVRFKSB8IE1BWV9BUFBFTkQ7CisJLyogdHJ1bmMgaW1wbGllcyB3cml0ZSBwZXJtaXNzaW9uICovCisJaWYgKGZsYWdzICYgT19UUlVOQykKKwkJcGVybXMgfD0gTUFZX1dSSVRFOworCWlmIChmbGFncyAmIE9fQ1JFQVQpCisJCXBlcm1zIHw9IEFBX01BWV9DUkVBVEU7CisKKwlyZXR1cm4gcGVybXM7Cit9CisKKyNlbmRpZiAvKiBfX0FBX0ZJTEVfSCAqLwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9pcGMuaCBiL3NlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvaXBjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVkYTBmYmMKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2lwYy5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBBcHBBcm1vciBzZWN1cml0eSBtb2R1bGUKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgQXBwQXJtb3IgaXBjIG1lZGlhdGlvbiBmdW5jdGlvbiBkZWZpbml0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOCBOb3ZlbGwvU1VTRQorICogQ29weXJpZ2h0IDIwMDktMjAxMCBDYW5vbmljYWwgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9fQUFfSVBDX0gKKyNkZWZpbmUgX19BQV9JUENfSAorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworc3RydWN0IGFhX3Byb2ZpbGU7CisKK2ludCBhYV9tYXlfcHRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHJhY2VyX3Rhc2ssIHN0cnVjdCBhYV9wcm9maWxlICp0cmFjZXIsCisJCSAgc3RydWN0IGFhX3Byb2ZpbGUgKnRyYWNlZSwgdW5zaWduZWQgaW50IG1vZGUpOworCitpbnQgYWFfcHRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHJhY2VyLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRyYWNlZSwKKwkgICAgICB1bnNpZ25lZCBpbnQgbW9kZSk7CisKKyNlbmRpZiAvKiBfX0FBX0lQQ19IICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL21hdGNoLmggYi9zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL21hdGNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM0YTZkMwotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvbWF0Y2guaApAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIEFwcEFybW9yIHNlY3VyaXR5IG1vZHVsZQorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBBcHBBcm1vciBwb2xpY3kgZGZhIG1hdGNoaW5nIGVuZ2luZSBkZWZpbml0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOCBOb3ZlbGwvU1VTRQorICogQ29weXJpZ2h0IDIwMDktMjAxMCBDYW5vbmljYWwgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9fQUFfTUFUQ0hfSAorI2RlZmluZSBfX0FBX01BVENIX0gKKworI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCisjZGVmaW5lIERGQV9OT01BVENICQkJMAorI2RlZmluZSBERkFfU1RBUlQJCQkxCisKKyNkZWZpbmUgREZBX1ZBTElEX1BFUk1fTUFTSwkJMHhmZmZmZmZmZgorI2RlZmluZSBERkFfVkFMSURfUEVSTTJfTUFTSwkJMHhmZmZmZmZmZgorCisvKioKKyAqIFRoZSBmb3JtYXQgdXNlZCBmb3IgdHJhbnNpdGlvbiB0YWJsZXMgaXMgYmFzZWQgb24gdGhlIEdOVSBmbGV4IHRhYmxlCisgKiBmaWxlIGZvcm1hdCAoLS10YWJsZXMtZmlsZSBvcHRpb247IHNlZSBUYWJsZSBGaWxlIEZvcm1hdCBpbiB0aGUgZmxleAorICogaW5mbyBwYWdlcyBhbmQgdGhlIGZsZXggc291cmNlcyBmb3IgZG9jdW1lbnRhdGlvbikuIFRoZSBtYWdpYyBudW1iZXIKKyAqIHVzZWQgaW4gdGhlIGhlYWRlciBpcyAweDFCNUU3ODNEIGluc3RlZCBvZiAweEYxM0M1N0IxIHRob3VnaCwgYmVjYXVzZQorICogdGhlIFlZX0lEX0NISyAoY2hlY2spIGFuZCBZWV9JRF9ERUYgKGRlZmF1bHQpIHRhYmxlcyBhcmUgdXNlZAorICogc2xpZ2h0bHkgZGlmZmVyZW50bHkgKHNlZSB0aGUgYXBwYXJtb3ItcGFyc2VyIHBhY2thZ2UpLgorICovCisKKyNkZWZpbmUgWVlUSF9NQUdJQwkweDFCNUU3ODNECisjZGVmaW5lIFlZVEhfREVGX1JFQ1VSU0UgMHgxCQkJLyogREVGIFRhYmxlIGlzIHJlY3Vyc2l2ZSAqLworCitzdHJ1Y3QgdGFibGVfc2V0X2hlYWRlciB7CisJdTMyIHRoX21hZ2ljOwkJLyogWVlUSF9NQUdJQyAqLworCXUzMiB0aF9oc2l6ZTsKKwl1MzIgdGhfc3NpemU7CisJdTE2IHRoX2ZsYWdzOworCWNoYXIgdGhfdmVyc2lvbltdOworfTsKKworLyogVGhlIFlZVERfSUQgYXJlIG9uZSBsZXNzIHRoYW4gZmxleCB0YWJsZSBtYXBwaW5ncy4gIFRoZSBmbGV4IGlkCisgKiBoYXMgMSBzdWJ0cmFjdGVkIGF0IHRhYmxlIGxvYWQgdGltZSwgdGhpcyBhbGxvd3MgdXMgdG8gZGlyZWN0bHkgdXNlIHRoZQorICogSUQncyBhcyBpbmRleGVzLgorICovCisjZGVmaW5lCVlZVERfSURfQUNDRVBUCTAKKyNkZWZpbmUgWVlURF9JRF9CQVNFCTEKKyNkZWZpbmUgWVlURF9JRF9DSEsJMgorI2RlZmluZSBZWVREX0lEX0RFRgkzCisjZGVmaW5lIFlZVERfSURfRUMJNAorI2RlZmluZSBZWVREX0lEX01FVEEJNQorI2RlZmluZSBZWVREX0lEX0FDQ0VQVDIgNgorI2RlZmluZSBZWVREX0lEX05YVAk3CisjZGVmaW5lIFlZVERfSURfVFNJWkUJOAorCisjZGVmaW5lIFlZVERfREFUQTgJMQorI2RlZmluZSBZWVREX0RBVEExNgkyCisjZGVmaW5lIFlZVERfREFUQTMyCTQKKyNkZWZpbmUgWVlURF9EQVRBNjQJOAorCisvKiBFYWNoIEFDQ0VQVDIgdGFibGUgZ2V0cyA2IGRlZGljYXRlZCBmbGFncywgWVlURF9EQVRBWCBkZWZpbmUgdGhlCisgKiBmaXJzdCBmbGFncworICovCisjZGVmaW5lIEFDQ0VQVDFfRkxBR1MoWCkgKChYKSAmIDB4M2YpCisjZGVmaW5lIEFDQ0VQVDJfRkxBR1MoWCkgQUNDRVBUMV9GTEFHUygoWCkgPj4gWVlURF9JRF9BQ0NFUFQyKQorI2RlZmluZSBUT19BQ0NFUFQxX0ZMQUcoWCkgQUNDRVBUMV9GTEFHUyhYKQorI2RlZmluZSBUT19BQ0NFUFQyX0ZMQUcoWCkgKEFDQ0VQVDFfRkxBR1MoWCkgPDwgWVlURF9JRF9BQ0NFUFQyKQorI2RlZmluZSBERkFfRkxBR19WRVJJRllfU1RBVEVTIDB4MTAwMAorCitzdHJ1Y3QgdGFibGVfaGVhZGVyIHsKKwl1MTYgdGRfaWQ7CisJdTE2IHRkX2ZsYWdzOworCXUzMiB0ZF9oaWxlbjsKKwl1MzIgdGRfbG9sZW47CisJY2hhciB0ZF9kYXRhW107Cit9OworCisjZGVmaW5lIERFRkFVTFRfVEFCTEUoREZBKSAoKHUxNiAqKSgoREZBKS0+dGFibGVzW1lZVERfSURfREVGXS0+dGRfZGF0YSkpCisjZGVmaW5lIEJBU0VfVEFCTEUoREZBKSAoKHUzMiAqKSgoREZBKS0+dGFibGVzW1lZVERfSURfQkFTRV0tPnRkX2RhdGEpKQorI2RlZmluZSBORVhUX1RBQkxFKERGQSkgKCh1MTYgKikoKERGQSktPnRhYmxlc1tZWVREX0lEX05YVF0tPnRkX2RhdGEpKQorI2RlZmluZSBDSEVDS19UQUJMRShERkEpICgodTE2ICopKChERkEpLT50YWJsZXNbWVlURF9JRF9DSEtdLT50ZF9kYXRhKSkKKyNkZWZpbmUgRVFVSVZfVEFCTEUoREZBKSAoKHU4ICopKChERkEpLT50YWJsZXNbWVlURF9JRF9FQ10tPnRkX2RhdGEpKQorI2RlZmluZSBBQ0NFUFRfVEFCTEUoREZBKSAoKHUzMiAqKSgoREZBKS0+dGFibGVzW1lZVERfSURfQUNDRVBUXS0+dGRfZGF0YSkpCisjZGVmaW5lIEFDQ0VQVF9UQUJMRTIoREZBKSAoKHUzMiAqKSgoREZBKS0+dGFibGVzW1lZVERfSURfQUNDRVBUMl0tPnRkX2RhdGEpKQorCitzdHJ1Y3QgYWFfZGZhIHsKKwlzdHJ1Y3Qga3JlZiBjb3VudDsKKwl1MTYgZmxhZ3M7CisJc3RydWN0IHRhYmxlX2hlYWRlciAqdGFibGVzW1lZVERfSURfVFNJWkVdOworfTsKKworI2RlZmluZSBieXRlX3RvX2J5dGUoWCkgKFgpCisKKyNkZWZpbmUgVU5QQUNLX0FSUkFZKFRBQkxFLCBCTE9CLCBMRU4sIFRZUEUsIE5UT0hYKSBcCisJZG8geyBcCisJCXR5cGVvZihMRU4pIF9faTsgXAorCQlUWVBFICpfX3QgPSAoVFlQRSAqKSBUQUJMRTsgXAorCQlUWVBFICpfX2IgPSAoVFlQRSAqKSBCTE9COyBcCisJCWZvciAoX19pID0gMDsgX19pIDwgTEVOOyBfX2krKykgeyBcCisJCQlfX3RbX19pXSA9IE5UT0hYKF9fYltfX2ldKTsgXAorCQl9IFwKKwl9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIHNpemVfdCB0YWJsZV9zaXplKHNpemVfdCBsZW4sIHNpemVfdCBlbF9zaXplKQoreworCXJldHVybiBBTElHTihzaXplb2Yoc3RydWN0IHRhYmxlX2hlYWRlcikgKyBsZW4gKiBlbF9zaXplLCA4KTsKK30KKworc3RydWN0IGFhX2RmYSAqYWFfZGZhX3VucGFjayh2b2lkICpibG9iLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKK3Vuc2lnbmVkIGludCBhYV9kZmFfbWF0Y2hfbGVuKHN0cnVjdCBhYV9kZmEgKmRmYSwgdW5zaWduZWQgaW50IHN0YXJ0LAorCQkJICAgICAgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKTsKK3Vuc2lnbmVkIGludCBhYV9kZmFfbWF0Y2goc3RydWN0IGFhX2RmYSAqZGZhLCB1bnNpZ25lZCBpbnQgc3RhcnQsCisJCQkgIGNvbnN0IGNoYXIgKnN0cik7Cit2b2lkIGFhX2RmYV9mcmVlX2tyZWYoc3RydWN0IGtyZWYgKmtyZWYpOworCisvKioKKyAqIGFhX3B1dF9kZmEgLSBwdXQgYSBkZmEgcmVmY291bnQKKyAqIEBkZmE6IGRmYSB0byBwdXQgcmVmY291bnQgICAoTUFZQkUgTlVMTCkKKyAqCisgKiBSZXF1aXJlczogaWYgQGRmYSAhPSBOVUxMIHRoYXQgYSB2YWxpZCByZWZjb3VudCBiZSBoZWxkCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhYV9wdXRfZGZhKHN0cnVjdCBhYV9kZmEgKmRmYSkKK3sKKwlpZiAoZGZhKQorCQlrcmVmX3B1dCgmZGZhLT5jb3VudCwgYWFfZGZhX2ZyZWVfa3JlZik7Cit9CisKKyNlbmRpZiAvKiBfX0FBX01BVENIX0ggKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvcGF0aC5oIGIvc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9wYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdiMzI3YQotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvcGF0aC5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBBcHBBcm1vciBzZWN1cml0eSBtb2R1bGUKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgQXBwQXJtb3IgYmFzaWMgcGF0aCBtYW5pcHVsYXRpb24gZnVuY3Rpb24gZGVmaW5pdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDggTm92ZWxsL1NVU0UKKyAqIENvcHlyaWdodCAyMDA5LTIwMTAgQ2Fub25pY2FsIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfX0FBX1BBVEhfSAorI2RlZmluZSBfX0FBX1BBVEhfSAorCisKK2VudW0gcGF0aF9mbGFncyB7CisJUEFUSF9JU19ESVIgPSAweDEsCQkvKiBwYXRoIGlzIGEgZGlyZWN0b3J5ICovCisJUEFUSF9DT05ORUNUX1BBVEggPSAweDQsCS8qIGNvbm5lY3QgZGlzY29ubmVjdGVkIHBhdGhzIHRvIC8gKi8KKwlQQVRIX0NIUk9PVF9SRUwgPSAweDgsCQkvKiBkbyBwYXRoIGxvb2t1cCByZWxhdGl2ZSB0byBjaHJvb3QgKi8KKwlQQVRIX0NIUk9PVF9OU0NPTk5FQ1QgPSAweDEwLAkvKiBjb25uZWN0IHBhdGhzIHRoYXQgYXJlIGF0IG5zIHJvb3QgKi8KKworCVBBVEhfREVMRUdBVEVfREVMRVRFRCA9IDB4MDgwMDAsIC8qIGRlbGVnYXRlIGRlbGV0ZWQgZmlsZXMgKi8KKwlQQVRIX01FRElBVEVfREVMRVRFRCA9IDB4MTAwMDAsCS8qIG1lZGlhdGUgZGVsZXRlZCBwYXRocyAqLworfTsKKworaW50IGFhX2dldF9uYW1lKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsIGNoYXIgKipidWZmZXIsIGNvbnN0IGNoYXIgKipuYW1lKTsKKworI2VuZGlmIC8qIF9fQUFfUEFUSF9IICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL3BvbGljeS5oIGIvc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9wb2xpY3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWRhNWNmCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9wb2xpY3kuaApAQCAtMCwwICsxLDMwNSBAQAorLyoKKyAqIEFwcEFybW9yIHNlY3VyaXR5IG1vZHVsZQorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBBcHBBcm1vciBwb2xpY3kgZGVmaW5pdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDggTm92ZWxsL1NVU0UKKyAqIENvcHlyaWdodCAyMDA5LTIwMTAgQ2Fub25pY2FsIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfX0FBX1BPTElDWV9ICisjZGVmaW5lIF9fQUFfUE9MSUNZX0gKKworI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmVkLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgorCisjaW5jbHVkZSAiYXBwYXJtb3IuaCIKKyNpbmNsdWRlICJhdWRpdC5oIgorI2luY2x1ZGUgImNhcGFiaWxpdHkuaCIKKyNpbmNsdWRlICJkb21haW4uaCIKKyNpbmNsdWRlICJmaWxlLmgiCisjaW5jbHVkZSAicmVzb3VyY2UuaCIKKworZXh0ZXJuIGNvbnN0IGNoYXIgKnByb2ZpbGVfbW9kZV9uYW1lc1tdOworI2RlZmluZSBBUFBBUk1PUl9OQU1FU19NQVhfSU5ERVggMworCisjZGVmaW5lIENPTVBMQUlOX01PREUoX3Byb2ZpbGUpCVwKKwkoKGFhX2dfcHJvZmlsZV9tb2RlID09IEFQUEFSTU9SX0NPTVBMQUlOKSB8fCBcCisJICgoX3Byb2ZpbGUpLT5tb2RlID09IEFQUEFSTU9SX0NPTVBMQUlOKSkKKworI2RlZmluZSBLSUxMX01PREUoX3Byb2ZpbGUpIFwKKwkoKGFhX2dfcHJvZmlsZV9tb2RlID09IEFQUEFSTU9SX0tJTEwpIHx8IFwKKwkgKChfcHJvZmlsZSktPm1vZGUgPT0gQVBQQVJNT1JfS0lMTCkpCisKKyNkZWZpbmUgUFJPRklMRV9JU19IQVQoX3Byb2ZpbGUpICgoX3Byb2ZpbGUpLT5mbGFncyAmIFBGTEFHX0hBVCkKKworLyoKKyAqIEZJWE1FOiBjdXJyZW50bHkgbmVlZCBhIGNsZWFuIHdheSB0byByZXBsYWNlIGFuZCByZW1vdmUgcHJvZmlsZXMgYXMgYQorICogc2V0LiAgSXQgc2hvdWxkIGJlIGRvbmUgYXQgdGhlIG5hbWVzcGFjZSBsZXZlbC4KKyAqIEVpdGhlciwgd2l0aCBhIHNldCBvZiBwcm9maWxlcyBsb2FkZWQgYXQgdGhlIG5hbWVzcGFjZSBsZXZlbCBvciB2aWEKKyAqIGEgbWFyayBhbmQgcmVtb3ZlIG1hcmtlZCBpbnRlcmZhY2UuCisgKi8KK2VudW0gcHJvZmlsZV9tb2RlIHsKKwlBUFBBUk1PUl9FTkZPUkNFLAkvKiBlbmZvcmNlIGFjY2VzcyBydWxlcyAqLworCUFQUEFSTU9SX0NPTVBMQUlOLAkvKiBhbGxvdyBhbmQgbG9nIGFjY2VzcyB2aW9sYXRpb25zICovCisJQVBQQVJNT1JfS0lMTCwJCS8qIGtpbGwgdGFzayBvbiBhY2Nlc3MgdmlvbGF0aW9uICovCit9OworCitlbnVtIHByb2ZpbGVfZmxhZ3MgeworCVBGTEFHX0hBVCA9IDEsCQkJLyogcHJvZmlsZSBpcyBhIGhhdCAqLworCVBGTEFHX1VOQ09ORklORUQgPSAyLAkJLyogcHJvZmlsZSBpcyBhbiB1bmNvbmZpbmVkIHByb2ZpbGUgKi8KKwlQRkxBR19OVUxMID0gNCwJCQkvKiBwcm9maWxlIGlzIG51bGwgbGVhcm5pbmcgcHJvZmlsZSAqLworCVBGTEFHX0lYX09OX05BTUVfRVJST1IgPSA4LAkvKiBmYWxsYmFjayB0byBpeCBvbiBuYW1lIGxvb2t1cCBmYWlsICovCisJUEZMQUdfSU1NVVRBQkxFID0gMHgxMCwJCS8qIGRvbid0IGFsbG93IGNoYW5nZXMvcmVwbGFjZW1lbnQgKi8KKwlQRkxBR19VU0VSX0RFRklORUQgPSAweDIwLAkvKiB1c2VyIGJhc2VkIHByb2ZpbGUgLSBsb3dlciBwcml2cyAqLworCVBGTEFHX05PX0xJU1RfUkVGID0gMHg0MCwJLyogbGlzdCBkb2Vzbid0IGtlZXAgcHJvZmlsZSByZWYgKi8KKwlQRkxBR19PTERfTlVMTF9UUkFOUyA9IDB4MTAwLAkvKiB1c2UgLy8gYXMgdGhlIG51bGwgdHJhbnNpdGlvbiAqLworCisJLyogVGhlc2UgZmxhZ3MgbXVzdCBjb3JyZXNwb25kIHdpdGggUEFUSF9mbGFncyAqLworCVBGTEFHX01FRElBVEVfREVMRVRFRCA9IDB4MTAwMDAsIC8qIG1lZGlhdGUgaW5zdGVhZCBkZWxlZ2F0ZSBkZWxldGVkICovCit9OworCitzdHJ1Y3QgYWFfcHJvZmlsZTsKKworLyogc3RydWN0IGFhX3BvbGljeSAtIGNvbW1vbiBwYXJ0IG9mIGJvdGggbmFtZXNwYWNlcyBhbmQgcHJvZmlsZXMKKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBvYmplY3QKKyAqIEBobmFtZSAtIFRoZSBoaWVyYXJjaGljYWwgbmFtZQorICogQGNvdW50OiByZWZlcmVuY2UgY291bnQgb2YgdGhlIG9iagorICogQGxpc3Q6IGxpc3QgcG9saWN5IG9iamVjdCBpcyBvbgorICogQHByb2ZpbGVzOiBoZWFkIG9mIHRoZSBwcm9maWxlcyBsaXN0IGNvbnRhaW5lZCBpbiB0aGUgb2JqZWN0CisgKi8KK3N0cnVjdCBhYV9wb2xpY3kgeworCWNoYXIgKm5hbWU7CisJY2hhciAqaG5hbWU7CisJc3RydWN0IGtyZWYgY291bnQ7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBsaXN0X2hlYWQgcHJvZmlsZXM7Cit9OworCisvKiBzdHJ1Y3QgYWFfbnNfYWNjdCAtIGFjY291bnRpbmcgb2YgcHJvZmlsZXMgaW4gbmFtZXNwYWNlCisgKiBAbWF4X3NpemU6IG1heGltdW0gc3BhY2UgYWxsb3dlZCBmb3IgYWxsIHByb2ZpbGVzIGluIG5hbWVzcGFjZQorICogQG1heF9jb3VudDogbWF4aW11bSBudW1iZXIgb2YgcHJvZmlsZXMgdGhhdCBjYW4gYmUgaW4gdGhpcyBuYW1lc3BhY2UKKyAqIEBzaXplOiBjdXJyZW50IHNpemUgb2YgcHJvZmlsZXMKKyAqIEBjb3VudDogY3VycmVudCBjb3VudCBvZiBwcm9maWxlcyAoaW5jbHVkZXMgbnVsbCBwcm9maWxlcykKKyAqLworc3RydWN0IGFhX25zX2FjY3QgeworCWludCBtYXhfc2l6ZTsKKwlpbnQgbWF4X2NvdW50OworCWludCBzaXplOworCWludCBjb3VudDsKK307CisKKy8qIHN0cnVjdCBhYV9uYW1lc3BhY2UgLSBuYW1lc3BhY2UgZm9yIGEgc2V0IG9mIHByb2ZpbGVzCisgKiBAYmFzZTogY29tbW9uIHBvbGljeQorICogQHBhcmVudDogcGFyZW50IG9mIG5hbWVzcGFjZQorICogQGxvY2s6IGxvY2sgZm9yIG1vZGlmeWluZyB0aGUgb2JqZWN0CisgKiBAYWNjdDogYWNjb3VudGluZyBmb3IgdGhlIG5hbWVzcGFjZQorICogQHVuY29uZmluZWQ6IHNwZWNpYWwgdW5jb25maW5lZCBwcm9maWxlIGZvciB0aGUgbmFtZXNwYWNlCisgKiBAc3ViX25zOiBsaXN0IG9mIG5hbWVzcGFjZXMgdW5kZXIgdGhlIGN1cnJlbnQgbmFtZXNwYWNlLgorICoKKyAqIEFuIGFhX25hbWVzcGFjZSBkZWZpbmVzIHRoZSBzZXQgcHJvZmlsZXMgdGhhdCBhcmUgc2VhcmNoZWQgdG8gZGV0ZXJtaW5lCisgKiB3aGljaCBwcm9maWxlIHRvIGF0dGFjaCB0byBhIHRhc2suICBQcm9maWxlcyBjYW4gbm90IGJlIHNoYXJlZCBiZXR3ZWVuCisgKiBhYV9uYW1lc3BhY2VzIGFuZCBwcm9maWxlIG5hbWVzIHdpdGhpbiBhIG5hbWVzcGFjZSBhcmUgZ3VhcmFudGVlZCB0byBiZQorICogdW5pcXVlLiAgV2hlbiBwcm9maWxlcyBpbiBzZXBhcmF0ZSBuYW1lc3BhY2VzIGhhdmUgdGhlIHNhbWUgbmFtZSB0aGV5CisgKiBhcmUgTk9UIGNvbnNpZGVyZWQgdG8gYmUgZXF1aXZhbGVudC4KKyAqCisgKiBOYW1lc3BhY2VzIGFyZSBoaWVyYXJjaGljYWwgYW5kIG9ubHkgbmFtZXNwYWNlcyBhbmQgcHJvZmlsZXMgYmVsb3cgdGhlCisgKiBjdXJyZW50IG5hbWVzcGFjZSBhcmUgdmlzaWJsZS4KKyAqCisgKiBOYW1lc3BhY2UgbmFtZXMgbXVzdCBiZSB1bmlxdWUgYW5kIGNhbiBub3QgY29udGFpbiB0aGUgY2hhcmFjdGVycyA6L1wwCisgKgorICogRklYTUUgVE9ETzogYWRkIHZzZXJ2ZXIgc3VwcG9ydCBvZiBuYW1lc3BhY2VzIChjYW4gaXQgYWxsIGJlIGRvbmUgaW4KKyAqICAgICAgICAgICAgIHVzZXJzcGFjZT8pCisgKi8KK3N0cnVjdCBhYV9uYW1lc3BhY2UgeworCXN0cnVjdCBhYV9wb2xpY3kgYmFzZTsKKwlzdHJ1Y3QgYWFfbmFtZXNwYWNlICpwYXJlbnQ7CisJcndsb2NrX3QgbG9jazsKKwlzdHJ1Y3QgYWFfbnNfYWNjdCBhY2N0OworCXN0cnVjdCBhYV9wcm9maWxlICp1bmNvbmZpbmVkOworCXN0cnVjdCBsaXN0X2hlYWQgc3ViX25zOworfTsKKworLyogc3RydWN0IGFhX3Byb2ZpbGUgLSBiYXNpYyBjb25maW5lbWVudCBkYXRhCisgKiBAYmFzZSAtIGJhc2UgY29tcG9uZW50cyBvZiB0aGUgcHJvZmlsZSAobmFtZSwgcmVmY291bnQsIGxpc3RzLCBsb2NrIC4uLikKKyAqIEBwYXJlbnQ6IHBhcmVudCBvZiBwcm9maWxlCisgKiBAbnM6IG5hbWVzcGFjZSB0aGUgcHJvZmlsZSBpcyBpbgorICogQHJlcGxhY2VkYnk6IGlzIHNldCB0byB0aGUgcHJvZmlsZSB0aGF0IHJlcGxhY2VkIHRoaXMgcHJvZmlsZQorICogQHJlbmFtZTogb3B0aW9uYWwgcHJvZmlsZSBuYW1lIHRoYXQgdGhpcyBwcm9maWxlIHJlbmFtZWQKKyAqIEB4bWF0Y2g6IG9wdGlvbmFsIGV4dGVuZGVkIG1hdGNoaW5nIGZvciB1bmNvbmZpbmVkIGV4ZWN1dGFibGVzIG5hbWVzCisgKiBAeG1hdGNoX2xlbjogeG1hdGNoIHByZWZpeCBsZW4sIHVzZWQgdG8gZGV0ZXJtaW5lIHhtYXRjaCBwcmlvcml0eQorICogQHNpZDogdGhlIHVuaXF1ZSBzZWN1cml0eSBpZCBudW1iZXIgb2YgdGhpcyBwcm9maWxlCisgKiBAYXVkaXQ6IHRoZSBhdWRpdGluZyBtb2RlIG9mIHRoZSBwcm9maWxlCisgKiBAbW9kZTogdGhlIGVuZm9yY2VtZW50IG1vZGUgb2YgdGhlIHByb2ZpbGUKKyAqIEBmbGFnczogZmxhZ3MgY29udHJvbGxpbmcgcHJvZmlsZSBiZWhhdmlvcgorICogQHBhdGhfZmxhZ3M6IGZsYWdzIGNvbnRyb2xsaW5nIHBhdGggZ2VuZXJhdGlvbiBiZWhhdmlvcgorICogQHNpemU6IHRoZSBtZW1vcnkgY29uc3VtZWQgYnkgdGhpcyBwcm9maWxlcyBydWxlcworICogQGZpbGU6IFRoZSBzZXQgb2YgcnVsZXMgZ292ZXJuaW5nIGJhc2ljIGZpbGUgYWNjZXNzIGFuZCBkb21haW4gdHJhbnNpdGlvbnMKKyAqIEBjYXBzOiBjYXBhYmlsaXRpZXMgZm9yIHRoZSBwcm9maWxlCisgKiBAcmxpbWl0czogcmxpbWl0cyBmb3IgdGhlIHByb2ZpbGUKKyAqCisgKiBUaGUgQXBwQXJtb3IgcHJvZmlsZSBjb250YWlucyB0aGUgYmFzaWMgY29uZmluZW1lbnQgZGF0YS4gIEVhY2ggcHJvZmlsZQorICogaGFzIGEgbmFtZSwgYW5kIGV4aXN0cyBpbiBhIG5hbWVzcGFjZS4gIFRoZSBAbmFtZSBhbmQgQGV4ZWNfbWF0Y2ggYXJlCisgKiB1c2VkIHRvIGRldGVybWluZSBwcm9maWxlIGF0dGFjaG1lbnQgYWdhaW5zdCB1bmNvbmZpbmVkIHRhc2tzLiAgQWxsIG90aGVyCisgKiBhdHRhY2htZW50cyBhcmUgZGV0ZXJtaW5lZCBieSBwcm9maWxlIFggdHJhbnNpdGlvbiBydWxlcy4KKyAqCisgKiBUaGUgQHJlcGxhY2VkYnkgZmllbGQgaXMgd3JpdGUgcHJvdGVjdGVkIGJ5IHRoZSBwcm9maWxlIGxvY2suICBSZWFkcworICogYXJlIGFzc3VtZWQgdG8gYmUgYXRvbWljLCBhbmQgYXJlIGRvbmUgd2l0aG91dCBsb2NraW5nLgorICoKKyAqIFByb2ZpbGVzIGhhdmUgYSBoaWVyYXJjaHkgd2hlcmUgaGF0cyBhbmQgY2hpbGRyZW4gcHJvZmlsZXMga2VlcAorICogYSByZWZlcmVuY2UgdG8gdGhlaXIgcGFyZW50LgorICoKKyAqIFByb2ZpbGUgbmFtZXMgY2FuIG5vdCBiZWdpbiB3aXRoIGEgOiBhbmQgY2FuIG5vdCBjb250YWluIHRoZSBcMAorICogY2hhcmFjdGVyLiAgSWYgYSBwcm9maWxlIG5hbWUgYmVnaW5zIHdpdGggLyBpdCB3aWxsIGJlIGNvbnNpZGVyZWQgd2hlbgorICogZGV0ZXJtaW5pbmcgcHJvZmlsZSBhdHRhY2htZW50IG9uICJ1bmNvbmZpbmVkIiB0YXNrcy4KKyAqLworc3RydWN0IGFhX3Byb2ZpbGUgeworCXN0cnVjdCBhYV9wb2xpY3kgYmFzZTsKKwlzdHJ1Y3QgYWFfcHJvZmlsZSAqcGFyZW50OworCisJc3RydWN0IGFhX25hbWVzcGFjZSAqbnM7CisJc3RydWN0IGFhX3Byb2ZpbGUgKnJlcGxhY2VkYnk7CisJY29uc3QgY2hhciAqcmVuYW1lOworCisJc3RydWN0IGFhX2RmYSAqeG1hdGNoOworCWludCB4bWF0Y2hfbGVuOworCXUzMiBzaWQ7CisJZW51bSBhdWRpdF9tb2RlIGF1ZGl0OworCWVudW0gcHJvZmlsZV9tb2RlIG1vZGU7CisJdTMyIGZsYWdzOworCXUzMiBwYXRoX2ZsYWdzOworCWludCBzaXplOworCisJc3RydWN0IGFhX2ZpbGVfcnVsZXMgZmlsZTsKKwlzdHJ1Y3QgYWFfY2FwcyBjYXBzOworCXN0cnVjdCBhYV9ybGltaXQgcmxpbWl0czsKK307CisKK2V4dGVybiBzdHJ1Y3QgYWFfbmFtZXNwYWNlICpyb290X25zOworZXh0ZXJuIGVudW0gcHJvZmlsZV9tb2RlIGFhX2dfcHJvZmlsZV9tb2RlOworCit2b2lkIGFhX2FkZF9wcm9maWxlKHN0cnVjdCBhYV9wb2xpY3kgKmNvbW1vbiwgc3RydWN0IGFhX3Byb2ZpbGUgKnByb2ZpbGUpOworCitib29sIGFhX25zX3Zpc2libGUoc3RydWN0IGFhX25hbWVzcGFjZSAqY3Vyciwgc3RydWN0IGFhX25hbWVzcGFjZSAqdmlldyk7Citjb25zdCBjaGFyICphYV9uc19uYW1lKHN0cnVjdCBhYV9uYW1lc3BhY2UgKnBhcmVudCwgc3RydWN0IGFhX25hbWVzcGFjZSAqY2hpbGQpOworaW50IGFhX2FsbG9jX3Jvb3RfbnModm9pZCk7Cit2b2lkIGFhX2ZyZWVfcm9vdF9ucyh2b2lkKTsKK3ZvaWQgYWFfZnJlZV9uYW1lc3BhY2Vfa3JlZihzdHJ1Y3Qga3JlZiAqa3JlZik7CisKK3N0cnVjdCBhYV9uYW1lc3BhY2UgKmFhX2ZpbmRfbmFtZXNwYWNlKHN0cnVjdCBhYV9uYW1lc3BhY2UgKnJvb3QsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhYV9wb2xpY3kgKmFhX2dldF9jb21tb24oc3RydWN0IGFhX3BvbGljeSAqYykKK3sKKwlpZiAoYykKKwkJa3JlZl9nZXQoJmMtPmNvdW50KTsKKworCXJldHVybiBjOworfQorCisvKioKKyAqIGFhX2dldF9uYW1lc3BhY2UgLSBpbmNyZW1lbnQgcmVmZXJlbmNlcyBjb3VudCBvbiBAbnMKKyAqIEBuczogbmFtZXNwYWNlIHRvIGluY3JlbWVudCByZWZlcmVuY2UgY291bnQgb2YgKE1BWUJFIE5VTEwpCisgKgorICogUmV0dXJuczogcG9pbnRlciB0byBAbnMsIGlmIEBucyBpcyBOVUxMIHJldHVybnMgTlVMTAorICogUmVxdWlyZXM6IEBucyBtdXN0IGJlIGhlbGQgd2l0aCB2YWxpZCByZWZjb3VudCB3aGVuIGNhbGxlZAorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhYV9uYW1lc3BhY2UgKmFhX2dldF9uYW1lc3BhY2Uoc3RydWN0IGFhX25hbWVzcGFjZSAqbnMpCit7CisJaWYgKG5zKQorCQlrcmVmX2dldCgmKG5zLT5iYXNlLmNvdW50KSk7CisKKwlyZXR1cm4gbnM7Cit9CisKKy8qKgorICogYWFfcHV0X25hbWVzcGFjZSAtIGRlY3JlbWVudCByZWZjb3VudCBvbiBAbnMKKyAqIEBuczogbmFtZXNwYWNlIHRvIHB1dCByZWZlcmVuY2Ugb2YKKyAqCisgKiBEZWNyZW1lbnQgcmVmZXJlbmNlIGNvdW50IG9mIEBucyBhbmQgaWYgbm8gbG9uZ2VyIGluIHVzZSBmcmVlIGl0CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhYV9wdXRfbmFtZXNwYWNlKHN0cnVjdCBhYV9uYW1lc3BhY2UgKm5zKQoreworCWlmIChucykKKwkJa3JlZl9wdXQoJm5zLT5iYXNlLmNvdW50LCBhYV9mcmVlX25hbWVzcGFjZV9rcmVmKTsKK30KKworc3RydWN0IGFhX3Byb2ZpbGUgKmFhX2FsbG9jX3Byb2ZpbGUoY29uc3QgY2hhciAqbmFtZSk7CitzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfbmV3X251bGxfcHJvZmlsZShzdHJ1Y3QgYWFfcHJvZmlsZSAqcGFyZW50LCBpbnQgaGF0KTsKK3ZvaWQgYWFfZnJlZV9wcm9maWxlX2tyZWYoc3RydWN0IGtyZWYgKmtyZWYpOworc3RydWN0IGFhX3Byb2ZpbGUgKmFhX2ZpbmRfY2hpbGQoc3RydWN0IGFhX3Byb2ZpbGUgKnBhcmVudCwgY29uc3QgY2hhciAqbmFtZSk7CitzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfbG9va3VwX3Byb2ZpbGUoc3RydWN0IGFhX25hbWVzcGFjZSAqbnMsIGNvbnN0IGNoYXIgKm5hbWUpOworc3RydWN0IGFhX3Byb2ZpbGUgKmFhX21hdGNoX3Byb2ZpbGUoc3RydWN0IGFhX25hbWVzcGFjZSAqbnMsIGNvbnN0IGNoYXIgKm5hbWUpOworCitzc2l6ZV90IGFhX3JlcGxhY2VfcHJvZmlsZXModm9pZCAqdWRhdGEsIHNpemVfdCBzaXplLCBib29sIG5vcmVwbGFjZSk7Citzc2l6ZV90IGFhX3JlbW92ZV9wcm9maWxlcyhjaGFyICpuYW1lLCBzaXplX3Qgc2l6ZSk7CisKKyNkZWZpbmUgUFJPRl9BREQgMQorI2RlZmluZSBQUk9GX1JFUExBQ0UgMAorCisjZGVmaW5lIHVuY29uZmluZWQoWCkgKChYKS0+ZmxhZ3MgJiBQRkxBR19VTkNPTkZJTkVEKQorCisvKioKKyAqIGFhX25ld2VzdF92ZXJzaW9uIC0gZmluZCB0aGUgbmV3ZXN0IHZlcnNpb24gb2YgQHByb2ZpbGUKKyAqIEBwcm9maWxlOiB0aGUgcHJvZmlsZSB0byBjaGVjayBmb3IgbmV3ZXIgdmVyc2lvbnMgb2YgKE5PVCBOVUxMKQorICoKKyAqIFJldHVybnM6IG5ld2VzdCB2ZXJzaW9uIG9mIEBwcm9maWxlLCBpZiBAcHJvZmlsZSBpcyB0aGUgbmV3ZXN0IHZlcnNpb24KKyAqICAgICAgICAgIHJldHVybiBAcHJvZmlsZS4KKyAqCisgKiBOT1RFOiB0aGUgcHJvZmlsZSByZXR1cm5lZCBpcyBub3QgcmVmY291bnRlZCwgVGhlIHJlZmNvdW50IG9uIEBwcm9maWxlCisgKiBtdXN0IGJlIGhlbGQgdW50aWwgdGhlIGNhbGxlciBkZWNpZGVzIHdoYXQgdG8gZG8gd2l0aCB0aGUgcmV0dXJuZWQgbmV3ZXN0CisgKiB2ZXJzaW9uLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhYV9wcm9maWxlICphYV9uZXdlc3RfdmVyc2lvbihzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSkKK3sKKwl3aGlsZSAocHJvZmlsZS0+cmVwbGFjZWRieSkKKwkJcHJvZmlsZSA9IHByb2ZpbGUtPnJlcGxhY2VkYnk7CisKKwlyZXR1cm4gcHJvZmlsZTsKK30KKworLyoqCisgKiBhYV9nZXRfcHJvZmlsZSAtIGluY3JlbWVudCByZWZjb3VudCBvbiBwcm9maWxlIEBwCisgKiBAcDogcHJvZmlsZSAgKE1BWUJFIE5VTEwpCisgKgorICogUmV0dXJuczogcG9pbnRlciB0byBAcCBpZiBAcCBpcyBOVUxMIHdpbGwgcmV0dXJuIE5VTEwKKyAqIFJlcXVpcmVzOiBAcCBtdXN0IGJlIGhlbGQgd2l0aCB2YWxpZCByZWZjb3VudCB3aGVuIGNhbGxlZAorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhYV9wcm9maWxlICphYV9nZXRfcHJvZmlsZShzdHJ1Y3QgYWFfcHJvZmlsZSAqcCkKK3sKKwlpZiAocCkKKwkJa3JlZl9nZXQoJihwLT5iYXNlLmNvdW50KSk7CisKKwlyZXR1cm4gcDsKK30KKworLyoqCisgKiBhYV9wdXRfcHJvZmlsZSAtIGRlY3JlbWVudCByZWZjb3VudCBvbiBwcm9maWxlIEBwCisgKiBAcDogcHJvZmlsZSAgKE1BWUJFIE5VTEwpCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhYV9wdXRfcHJvZmlsZShzdHJ1Y3QgYWFfcHJvZmlsZSAqcCkKK3sKKwlpZiAocCkKKwkJa3JlZl9wdXQoJnAtPmJhc2UuY291bnQsIGFhX2ZyZWVfcHJvZmlsZV9rcmVmKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgQVVESVRfTU9ERShzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSkKK3sKKwlpZiAoYWFfZ19hdWRpdCAhPSBBVURJVF9OT1JNQUwpCisJCXJldHVybiBhYV9nX2F1ZGl0OworCisJcmV0dXJuIHByb2ZpbGUtPmF1ZGl0OworfQorCitib29sIGFhX21heV9tYW5hZ2VfcG9saWN5KGludCBvcCk7CisKKyNlbmRpZiAvKiBfX0FBX1BPTElDWV9IICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL3BvbGljeV91bnBhY2suaCBiL3NlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvcG9saWN5X3VucGFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZGNjY2EKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL3BvbGljeV91bnBhY2suaApAQCAtMCwwICsxLDIwIEBACisvKgorICogQXBwQXJtb3Igc2VjdXJpdHkgbW9kdWxlCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIEFwcEFybW9yIHBvbGljeSBsb2FkaW5nIGludGVyZmFjZSBmdW5jdGlvbiBkZWZpbml0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOCBOb3ZlbGwvU1VTRQorICogQ29weXJpZ2h0IDIwMDktMjAxMCBDYW5vbmljYWwgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9fUE9MSUNZX0lOVEVSRkFDRV9ICisjZGVmaW5lIF9fUE9MSUNZX0lOVEVSRkFDRV9ICisKK3N0cnVjdCBhYV9wcm9maWxlICphYV91bnBhY2sodm9pZCAqdWRhdGEsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICoqbnMpOworCisjZW5kaWYgLyogX19QT0xJQ1lfSU5URVJGQUNFX0ggKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvcHJvY2F0dHIuaCBiL3NlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvcHJvY2F0dHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDRhYTZiCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9wcm9jYXR0ci5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBBcHBBcm1vciBzZWN1cml0eSBtb2R1bGUKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgQXBwQXJtb3IgL3Byb2MvPHBpZD4vYXR0ci8gaW50ZXJmYWNlIGZ1bmN0aW9uIGRlZmluaXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDA4IE5vdmVsbC9TVVNFCisgKiBDb3B5cmlnaHQgMjAwOS0yMDEwIENhbm9uaWNhbCBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX19BQV9QUk9DQVRUUl9ICisjZGVmaW5lIF9fQUFfUFJPQ0FUVFJfSAorCisjZGVmaW5lIEFBX0RPX1RFU1QgMQorI2RlZmluZSBBQV9PTkVYRUMgIDEKKworaW50IGFhX2dldHByb2NhdHRyKHN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlLCBjaGFyICoqc3RyaW5nKTsKK2ludCBhYV9zZXRwcm9jYXR0cl9jaGFuZ2VoYXQoY2hhciAqYXJncywgc2l6ZV90IHNpemUsIGludCB0ZXN0KTsKK2ludCBhYV9zZXRwcm9jYXR0cl9jaGFuZ2Vwcm9maWxlKGNoYXIgKmZxbmFtZSwgYm9vbCBvbmV4ZWMsIGludCB0ZXN0KTsKK2ludCBhYV9zZXRwcm9jYXR0cl9wZXJtaXBjKGNoYXIgKmZxbmFtZSk7CisKKyNlbmRpZiAvKiBfX0FBX1BST0NBVFRSX0ggKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvcmVzb3VyY2UuaCBiL3NlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvcmVzb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzg4YmU5Ci0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9yZXNvdXJjZS5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBBcHBBcm1vciBzZWN1cml0eSBtb2R1bGUKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgQXBwQXJtb3IgcmVzb3VyY2UgbGltaXRzIGZ1bmN0aW9uIGRlZmluaXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDA4IE5vdmVsbC9TVVNFCisgKiBDb3B5cmlnaHQgMjAwOS0yMDEwIENhbm9uaWNhbCBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX19BQV9SRVNPVVJDRV9ICisjZGVmaW5lIF9fQUFfUkVTT1VSQ0VfSAorCisjaW5jbHVkZSA8bGludXgvcmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCitzdHJ1Y3QgYWFfcHJvZmlsZTsKKworLyogc3RydWN0IGFhX3JsaW1pdCAtIHJsaW1pdCBzZXR0aW5ncyBmb3IgdGhlIHByb2ZpbGUKKyAqIEBtYXNrOiB3aGljaCBoYXJkIGxpbWl0cyB0byBzZXQKKyAqIEBsaW1pdHM6IHJsaW1pdCB2YWx1ZXMgdGhhdCBvdmVycmlkZSB0YXNrIGxpbWl0cworICoKKyAqIEFwcEFybW9yIHJsaW1pdHMgYXJlIHVzZWQgdG8gc2V0IGNvbmZpbmVkIHRhc2sgcmxpbWl0cy4gIE9ubHkgdGhlCisgKiBsaW1pdHMgc3BlY2lmaWVkIGluIEBtYXNrIHdpbGwgYmUgY29udHJvbGxlZCBieSBhcHBhcm1vci4KKyAqLworc3RydWN0IGFhX3JsaW1pdCB7CisJdW5zaWduZWQgaW50IG1hc2s7CisJc3RydWN0IHJsaW1pdCBsaW1pdHNbUkxJTV9OTElNSVRTXTsKK307CisKK2ludCBhYV9tYXBfcmVzb3VyY2UoaW50IHJlc291cmNlKTsKK2ludCBhYV90YXNrX3NldHJsaW1pdChzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSwgdW5zaWduZWQgaW50IHJlc291cmNlLAorCQkgICAgICBzdHJ1Y3QgcmxpbWl0ICpuZXdfcmxpbSk7CisKK3ZvaWQgX19hYV90cmFuc2l0aW9uX3JsaW1pdHMoc3RydWN0IGFhX3Byb2ZpbGUgKm9sZCwgc3RydWN0IGFhX3Byb2ZpbGUgKm5ldyk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhYV9mcmVlX3JsaW1pdF9ydWxlcyhzdHJ1Y3QgYWFfcmxpbWl0ICpybGltcykKK3sKKwkvKiBOT1AgKi8KK30KKworI2VuZGlmIC8qIF9fQUFfUkVTT1VSQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9zaWQuaCBiL3NlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvc2lkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIwZGIzNQotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvc2lkLmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIEFwcEFybW9yIHNlY3VyaXR5IG1vZHVsZQorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBBcHBBcm1vciBzZWN1cml0eSBpZGVudGlmaWVyIChzaWQpIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IDIwMDktMjAxMCBDYW5vbmljYWwgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9fQUFfU0lEX0gKKyNkZWZpbmUgX19BQV9TSURfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGFhX3Byb2ZpbGU7CisKK3UzMiBhYV9hbGxvY19zaWQodm9pZCk7Cit2b2lkIGFhX2ZyZWVfc2lkKHUzMiBzaWQpOworCisjZW5kaWYgLyogX19BQV9TSURfSCAqLwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvYXBwYXJtb3IvaXBjLmMgYi9zZWN1cml0eS9hcHBhcm1vci9pcGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDlmYWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvYXBwYXJtb3IvaXBjLmMKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBBcHBBcm1vciBzZWN1cml0eSBtb2R1bGUKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgQXBwQXJtb3IgaXBjIG1lZGlhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDA4IE5vdmVsbC9TVVNFCisgKiBDb3B5cmlnaHQgMjAwOS0yMDEwIENhbm9uaWNhbCBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9nZnAuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKworI2luY2x1ZGUgImluY2x1ZGUvYXVkaXQuaCIKKyNpbmNsdWRlICJpbmNsdWRlL2NhcGFiaWxpdHkuaCIKKyNpbmNsdWRlICJpbmNsdWRlL2NvbnRleHQuaCIKKyNpbmNsdWRlICJpbmNsdWRlL3BvbGljeS5oIgorCisvKiBjYWxsIGJhY2sgdG8gYXVkaXQgcHRyYWNlIGZpZWxkcyAqLworc3RhdGljIHZvaWQgYXVkaXRfY2Ioc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWIsIHZvaWQgKnZhKQoreworCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqc2EgPSB2YTsKKwlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIHRhcmdldD0iKTsKKwlhdWRpdF9sb2dfdW50cnVzdGVkc3RyaW5nKGFiLCBzYS0+YWFkLnRhcmdldCk7Cit9CisKKy8qKgorICogYWFfYXVkaXRfcHRyYWNlIC0gZG8gYXVkaXRpbmcgZm9yIHB0cmFjZQorICogQHByb2ZpbGU6IHByb2ZpbGUgYmVpbmcgZW5mb3JjZWQgIChOT1QgTlVMTCkKKyAqIEB0YXJnZXQ6IHByb2ZpbGUgYmVpbmcgdHJhY2VkIChOT1QgTlVMTCkKKyAqIEBlcnJvcjogZXJyb3IgY29uZGl0aW9uCisgKgorICogUmV0dXJuczogJTAgb3IgZXJyb3IgY29kZQorICovCitzdGF0aWMgaW50IGFhX2F1ZGl0X3B0cmFjZShzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSwKKwkJCSAgIHN0cnVjdCBhYV9wcm9maWxlICp0YXJnZXQsIGludCBlcnJvcikKK3sKKwlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgc2E7CisJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmc2EsIE5PTkUpOworCXNhLmFhZC5vcCA9IE9QX1BUUkFDRTsKKwlzYS5hYWQudGFyZ2V0ID0gdGFyZ2V0OworCXNhLmFhZC5lcnJvciA9IGVycm9yOworCisJcmV0dXJuIGFhX2F1ZGl0KEFVRElUX0FQUEFSTU9SX0FVVE8sIHByb2ZpbGUsIEdGUF9BVE9NSUMsICZzYSwKKwkJCWF1ZGl0X2NiKTsKK30KKworLyoqCisgKiBhYV9tYXlfcHRyYWNlIC0gdGVzdCBpZiB0cmFjZXIgdGFzayBjYW4gdHJhY2UgdGhlIHRyYWNlZQorICogQHRyYWNlcl90YXNrOiB0YXNrIHdobyB3aWxsIGRvIHRoZSB0cmFjaW5nICAoTk9UIE5VTEwpCisgKiBAdHJhY2VyOiBwcm9maWxlIG9mIHRoZSB0YXNrIGRvaW5nIHRoZSB0cmFjaW5nICAoTk9UIE5VTEwpCisgKiBAdHJhY2VlOiB0YXNrIHRvIGJlIHRyYWNlZAorICogQG1vZGU6IHdoZXRoZXIgUFRSQUNFX01PREVfUkVBRCB8fCBQVFJBQ0VfTU9ERV9BVFRBQ0gKKyAqCisgKiBSZXR1cm5zOiAlMCBlbHNlIGVycm9yIGNvZGUgaWYgcGVybWlzc2lvbiBkZW5pZWQgb3IgZXJyb3IKKyAqLworaW50IGFhX21heV9wdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0cmFjZXJfdGFzaywgc3RydWN0IGFhX3Byb2ZpbGUgKnRyYWNlciwKKwkJICBzdHJ1Y3QgYWFfcHJvZmlsZSAqdHJhY2VlLCB1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwkvKiBUT0RPOiBjdXJyZW50bHkgb25seSBiYXNlZCBvbiBjYXBhYmlsaXR5LCBub3QgZXh0ZW5kZWQgcHRyYWNlCisJICogICAgICAgcnVsZXMsCisJICogICAgICAgVGVzdCBtb2RlIGZvciBQVFJBQ0VfTU9ERV9SRUFEIHx8IFBUUkFDRV9NT0RFX0FUVEFDSAorCSAqLworCisJaWYgKHVuY29uZmluZWQodHJhY2VyKSB8fCB0cmFjZXIgPT0gdHJhY2VlKQorCQlyZXR1cm4gMDsKKwkvKiBsb2cgdGhpcyBjYXBhYmlsaXR5IHJlcXVlc3QgKi8KKwlyZXR1cm4gYWFfY2FwYWJsZSh0cmFjZXJfdGFzaywgdHJhY2VyLCBDQVBfU1lTX1BUUkFDRSwgMSk7Cit9CisKKy8qKgorICogYWFfcHRyYWNlIC0gZG8gcHRyYWNlIHBlcm1pc3Npb24gY2hlY2sgYW5kIGF1ZGl0aW5nCisgKiBAdHJhY2VyOiB0YXNrIGRvaW5nIHRoZSB0cmFjaW5nIChOT1QgTlVMTCkKKyAqIEB0cmFjZWU6IHRhc2sgYmVpbmcgdHJhY2VkIChOT1QgTlVMTCkKKyAqIEBtb2RlOiBwdHJhY2UgbW9kZSBlaXRoZXIgUFRSQUNFX01PREVfUkVBRCB8fCBQVFJBQ0VfTU9ERV9BVFRBQ0gKKyAqCisgKiBSZXR1cm5zOiAlMCBlbHNlIGVycm9yIGNvZGUgaWYgcGVybWlzc2lvbiBkZW5pZWQgb3IgZXJyb3IKKyAqLworaW50IGFhX3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRyYWNlciwgc3RydWN0IHRhc2tfc3RydWN0ICp0cmFjZWUsCisJICAgICAgdW5zaWduZWQgaW50IG1vZGUpCit7CisJLyoKKwkgKiB0cmFjZXIgY2FuIHB0cmFjZSB0cmFjZWUgd2hlbgorCSAqIC0gdHJhY2VyIGlzIHVuY29uZmluZWQgfHwKKwkgKiAgIC0gdHJhY2VyIGlzIGluIGNvbXBsYWluIG1vZGUKKwkgKiAgIC0gdHJhY2VyIGhhcyBydWxlcyBhbGxvd2luZyBpdCB0byB0cmFjZSB0cmFjZWUgY3VycmVudGx5IHRoaXMgaXM6CisJICogICAgICAgLSBjb25maW5lZCBieSB0aGUgc2FtZSBwcm9maWxlIHx8CisJICogICAgICAgLSB0cmFjZXIgcHJvZmlsZSBoYXMgQ0FQX1NZU19QVFJBQ0UKKwkgKi8KKworCXN0cnVjdCBhYV9wcm9maWxlICp0cmFjZXJfcDsKKwkvKiBjcmVkIHJlbGVhc2VkIGJlbG93ICovCisJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBnZXRfdGFza19jcmVkKHRyYWNlcik7CisJaW50IGVycm9yID0gMDsKKwl0cmFjZXJfcCA9IGFhX2NyZWRfcHJvZmlsZShjcmVkKTsKKworCWlmICghdW5jb25maW5lZCh0cmFjZXJfcCkpIHsKKwkJLyogbGNyZWQgcmVsZWFzZWQgYmVsb3cgKi8KKwkJY29uc3Qgc3RydWN0IGNyZWQgKmxjcmVkID0gZ2V0X3Rhc2tfY3JlZCh0cmFjZWUpOworCQlzdHJ1Y3QgYWFfcHJvZmlsZSAqdHJhY2VlX3AgPSBhYV9jcmVkX3Byb2ZpbGUobGNyZWQpOworCisJCWVycm9yID0gYWFfbWF5X3B0cmFjZSh0cmFjZXIsIHRyYWNlcl9wLCB0cmFjZWVfcCwgbW9kZSk7CisJCWVycm9yID0gYWFfYXVkaXRfcHRyYWNlKHRyYWNlcl9wLCB0cmFjZWVfcCwgZXJyb3IpOworCisJCXB1dF9jcmVkKGxjcmVkKTsKKwl9CisJcHV0X2NyZWQoY3JlZCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9hcHBhcm1vci9saWIuYyBiL3NlY3VyaXR5L2FwcGFybW9yL2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlODVjZGIKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9hcHBhcm1vci9saWIuYwpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIEFwcEFybW9yIHNlY3VyaXR5IG1vZHVsZQorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBiYXNpYyBjb21tb24gZnVuY3Rpb25zIHVzZWQgaW4gQXBwQXJtb3IKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOCBOb3ZlbGwvU1VTRQorICogQ29weXJpZ2h0IDIwMDktMjAxMCBDYW5vbmljYWwgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgImluY2x1ZGUvYXVkaXQuaCIKKworCisvKioKKyAqIGFhX3NwbGl0X2ZxbmFtZSAtIHNwbGl0IGEgZnFuYW1lIGludG8gYSBwcm9maWxlIGFuZCBuYW1lc3BhY2UgbmFtZQorICogQGZxbmFtZTogYSBmdWxsIHF1YWxpZmllZCBuYW1lIGluIG5hbWVzcGFjZSBwcm9maWxlIGZvcm1hdCAoTk9UIE5VTEwpCisgKiBAbnNfbmFtZTogcG9pbnRlciB0byBwb3J0aW9uIG9mIHRoZSBzdHJpbmcgY29udGFpbmluZyB0aGUgbnMgbmFtZSAoTk9UIE5VTEwpCisgKgorICogUmV0dXJuczogcHJvZmlsZSBuYW1lIG9yIE5VTEwgaWYgb25lIGlzIG5vdCBzcGVjaWZpZWQKKyAqCisgKiBTcGxpdCBhIG5hbWVzcGFjZSBuYW1lIGZyb20gYSBwcm9maWxlIG5hbWUgKHNlZSBwb2xpY3kuYyBmb3IgbmFtaW5nCisgKiBkZXNjcmlwdGlvbikuICBJZiBhIHBvcnRpb24gb2YgdGhlIG5hbWUgaXMgbWlzc2luZyBpdCByZXR1cm5zIE5VTEwgZm9yCisgKiB0aGF0IHBvcnRpb24uCisgKgorICogTk9URTogbWF5IG1vZGlmeSB0aGUgQGZxbmFtZSBzdHJpbmcuICBUaGUgcG9pbnRlcnMgcmV0dXJuZWQgcG9pbnQKKyAqICAgICAgIGludG8gdGhlIEBmcW5hbWUgc3RyaW5nLgorICovCitjaGFyICphYV9zcGxpdF9mcW5hbWUoY2hhciAqZnFuYW1lLCBjaGFyICoqbnNfbmFtZSkKK3sKKwljaGFyICpuYW1lID0gc3RyaW0oZnFuYW1lKTsKKworCSpuc19uYW1lID0gTlVMTDsKKwlpZiAobmFtZVswXSA9PSAnOicpIHsKKwkJY2hhciAqc3BsaXQgPSBzdHJjaHIoJm5hbWVbMV0sICc6Jyk7CisJCWlmIChzcGxpdCkgeworCQkJLyogb3ZlcndyaXRlICc6JyB3aXRoIFwwICovCisJCQkqc3BsaXQgPSAwOworCQkJbmFtZSA9IHNraXBfc3BhY2VzKHNwbGl0ICsgMSk7CisJCX0gZWxzZQorCQkJLyogYSBucyBuYW1lIHdpdGhvdXQgYSBmb2xsb3dpbmcgcHJvZmlsZSBpcyBhbGxvd2VkICovCisJCQluYW1lID0gTlVMTDsKKwkJKm5zX25hbWUgPSAmbmFtZVsxXTsKKwl9CisJaWYgKG5hbWUgJiYgKm5hbWUgPT0gMCkKKwkJbmFtZSA9IE5VTEw7CisKKwlyZXR1cm4gbmFtZTsKK30KKworLyoqCisgKiBhYV9pbmZvX21lc3NhZ2UgLSBsb2cgYSBub25lIHByb2ZpbGUgcmVsYXRlZCBzdGF0dXMgbWVzc2FnZQorICogQHN0cjogbWVzc2FnZSB0byBsb2cKKyAqLwordm9pZCBhYV9pbmZvX21lc3NhZ2UoY29uc3QgY2hhciAqc3RyKQoreworCWlmIChhdWRpdF9lbmFibGVkKSB7CisJCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBzYTsKKwkJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmc2EsIE5PTkUpOworCQlzYS5hYWQuaW5mbyA9IHN0cjsKKwkJYWFfYXVkaXRfbXNnKEFVRElUX0FQUEFSTU9SX1NUQVRVUywgJnNhLCBOVUxMKTsKKwl9CisJcHJpbnRrKEtFUk5fSU5GTyAiQXBwQXJtb3I6ICVzXG4iLCBzdHIpOworfQorCisvKioKKyAqIGt2bWFsbG9jIC0gZG8gYWxsb2NhdGlvbiBwcmVmZXJyaW5nIGttYWxsb2MgYnV0IGZhbGxpbmcgYmFjayB0byB2bWFsbG9jCisgKiBAc2l6ZTogc2l6ZSBvZiBhbGxvY2F0aW9uCisgKgorICogUmV0dXJuOiBhbGxvY2F0ZWQgYnVmZmVyIG9yIE5VTEwgaWYgZmFpbGVkCisgKgorICogSXQgaXMgcG9zc2libGUgdGhhdCBwb2xpY3kgYmVpbmcgbG9hZGVkIGZyb20gdGhlIHVzZXIgaXMgbGFyZ2VyIHRoYW4KKyAqIHdoYXQgY2FuIGJlIGFsbG9jYXRlZCBieSBrbWFsbG9jLCBpbiB0aG9zZSBjYXNlcyBmYWxsIGJhY2sgdG8gdm1hbGxvYy4KKyAqLwordm9pZCAqa3ZtYWxsb2Moc2l6ZV90IHNpemUpCit7CisJdm9pZCAqYnVmZmVyID0gTlVMTDsKKworCWlmIChzaXplID09IDApCisJCXJldHVybiBOVUxMOworCisJLyogZG8gbm90IGF0dGVtcHQga21hbGxvYyBpZiB3ZSBuZWVkIG1vcmUgdGhhbiAxNiBwYWdlcyBhdCBvbmNlICovCisJaWYgKHNpemUgPD0gKDE2KlBBR0VfU0laRSkpCisJCWJ1ZmZlciA9IGttYWxsb2Moc2l6ZSwgR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4pOworCWlmICghYnVmZmVyKSB7CisJCS8qIHNlZSBrdmZyZWUgZm9yIHdoeSBzaXplIG11c3QgYmUgYXQgbGVhc3Qgd29ya19zdHJ1Y3Qgc2l6ZQorCQkgKiB3aGVuIGFsbG9jYXRlZCB2aWEgdm1hbGxvYworCQkgKi8KKwkJaWYgKHNpemUgPCBzaXplb2Yoc3RydWN0IHdvcmtfc3RydWN0KSkKKwkJCXNpemUgPSBzaXplb2Yoc3RydWN0IHdvcmtfc3RydWN0KTsKKwkJYnVmZmVyID0gdm1hbGxvYyhzaXplKTsKKwl9CisJcmV0dXJuIGJ1ZmZlcjsKK30KKworLyoqCisgKiBkb192ZnJlZSAtIHdvcmtxdWV1ZSByb3V0aW5lIGZvciBmcmVlaW5nIHZtYWxsb2NlZCBtZW1vcnkKKyAqIEB3b3JrOiBkYXRhIHRvIGJlIGZyZWVkCisgKgorICogVGhlIHdvcmtfc3RydWN0IGlzIG92ZXJsYWlkIHRvIHRoZSBkYXRhIGJlaW5nIGZyZWVkLCBhcyBhdCB0aGUgcG9pbnQKKyAqIHRoZSB3b3JrIGlzIHNjaGVkdWxlZCB0aGUgZGF0YSBpcyBubyBsb25nZXIgdmFsaWQsIGJlIGl0cyBmcmVlaW5nCisgKiBuZWVkcyB0byBiZSBkZWxheWVkIHVudGlsIHNhZmUuCisgKi8KK3N0YXRpYyB2b2lkIGRvX3ZmcmVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwl2ZnJlZSh3b3JrKTsKK30KKworLyoqCisgKiBrdmZyZWUgLSBmcmVlIGFuIGFsbG9jYXRpb24gZG8gYnkga3ZtYWxsb2MKKyAqIEBidWZmZXI6IGJ1ZmZlciB0byBmcmVlIChNQVlCRV9OVUxMKQorICoKKyAqIEZyZWUgYSBidWZmZXIgYWxsb2NhdGVkIGJ5IGt2bWFsbG9jCisgKi8KK3ZvaWQga3ZmcmVlKHZvaWQgKmJ1ZmZlcikKK3sKKwlpZiAoaXNfdm1hbGxvY19hZGRyKGJ1ZmZlcikpIHsKKwkJLyogRGF0YSBpcyBubyBsb25nZXIgdmFsaWQgc28ganVzdCB1c2UgdGhlIGFsbG9jYXRlZCBzcGFjZQorCQkgKiBhcyB0aGUgd29ya19zdHJ1Y3QKKwkJICovCisJCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayA9IChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKikgYnVmZmVyOworCQlJTklUX1dPUksod29yaywgZG9fdmZyZWUpOworCQlzY2hlZHVsZV93b3JrKHdvcmspOworCX0gZWxzZQorCQlrZnJlZShidWZmZXIpOworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMgYi9zZWN1cml0eS9hcHBhcm1vci9sc20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGIzM2E4Ci0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMKQEAgLTAsMCArMSw5MzggQEAKKy8qCisgKiBBcHBBcm1vciBzZWN1cml0eSBtb2R1bGUKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgQXBwQXJtb3IgTFNNIGhvb2tzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDA4IE5vdmVsbC9TVVNFCisgKiBDb3B5cmlnaHQgMjAwOS0yMDEwIENhbm9uaWNhbCBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CisjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorCisjaW5jbHVkZSAiaW5jbHVkZS9hcHBhcm1vci5oIgorI2luY2x1ZGUgImluY2x1ZGUvYXBwYXJtb3Jmcy5oIgorI2luY2x1ZGUgImluY2x1ZGUvYXVkaXQuaCIKKyNpbmNsdWRlICJpbmNsdWRlL2NhcGFiaWxpdHkuaCIKKyNpbmNsdWRlICJpbmNsdWRlL2NvbnRleHQuaCIKKyNpbmNsdWRlICJpbmNsdWRlL2ZpbGUuaCIKKyNpbmNsdWRlICJpbmNsdWRlL2lwYy5oIgorI2luY2x1ZGUgImluY2x1ZGUvcGF0aC5oIgorI2luY2x1ZGUgImluY2x1ZGUvcG9saWN5LmgiCisjaW5jbHVkZSAiaW5jbHVkZS9wcm9jYXR0ci5oIgorCisvKiBGbGFnIGluZGljYXRpbmcgd2hldGhlciBpbml0aWFsaXphdGlvbiBjb21wbGV0ZWQgKi8KK2ludCBhcHBhcm1vcl9pbml0aWFsaXplZCBfX2luaXRkYXRhOworCisvKgorICogTFNNIGhvb2sgZnVuY3Rpb25zCisgKi8KKworLyoKKyAqIGZyZWUgdGhlIGFzc29jaWF0ZWQgYWFfdGFza19jeHQgYW5kIHB1dCBpdHMgcHJvZmlsZXMKKyAqLworc3RhdGljIHZvaWQgYXBwYXJtb3JfY3JlZF9mcmVlKHN0cnVjdCBjcmVkICpjcmVkKQoreworCWFhX2ZyZWVfdGFza19jb250ZXh0KGNyZWQtPnNlY3VyaXR5KTsKKwljcmVkLT5zZWN1cml0eSA9IE5VTEw7Cit9CisKKy8qCisgKiBhbGxvY2F0ZSB0aGUgYXBwYXJtb3IgcGFydCBvZiBibGFuayBjcmVkZW50aWFscworICovCitzdGF0aWMgaW50IGFwcGFybW9yX2NyZWRfYWxsb2NfYmxhbmsoc3RydWN0IGNyZWQgKmNyZWQsIGdmcF90IGdmcCkKK3sKKwkvKiBmcmVlZCBieSBhcHBhcm1vcl9jcmVkX2ZyZWUgKi8KKwlzdHJ1Y3QgYWFfdGFza19jeHQgKmN4dCA9IGFhX2FsbG9jX3Rhc2tfY29udGV4dChnZnApOworCWlmICghY3h0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNyZWQtPnNlY3VyaXR5ID0gY3h0OworCXJldHVybiAwOworfQorCisvKgorICogcHJlcGFyZSBuZXcgYWFfdGFza19jeHQgZm9yIG1vZGlmaWNhdGlvbiBieSBwcmVwYXJlX2NyZWQgYmxvY2sKKyAqLworc3RhdGljIGludCBhcHBhcm1vcl9jcmVkX3ByZXBhcmUoc3RydWN0IGNyZWQgKm5ldywgY29uc3Qgc3RydWN0IGNyZWQgKm9sZCwKKwkJCQkgZ2ZwX3QgZ2ZwKQoreworCS8qIGZyZWVkIGJ5IGFwcGFybW9yX2NyZWRfZnJlZSAqLworCXN0cnVjdCBhYV90YXNrX2N4dCAqY3h0ID0gYWFfYWxsb2NfdGFza19jb250ZXh0KGdmcCk7CisJaWYgKCFjeHQpCisJCXJldHVybiAtRU5PTUVNOworCisJYWFfZHVwX3Rhc2tfY29udGV4dChjeHQsIG9sZC0+c2VjdXJpdHkpOworCW5ldy0+c2VjdXJpdHkgPSBjeHQ7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB0cmFuc2ZlciB0aGUgYXBwYXJtb3IgZGF0YSB0byBhIGJsYW5rIHNldCBvZiBjcmVkcworICovCitzdGF0aWMgdm9pZCBhcHBhcm1vcl9jcmVkX3RyYW5zZmVyKHN0cnVjdCBjcmVkICpuZXcsIGNvbnN0IHN0cnVjdCBjcmVkICpvbGQpCit7CisJY29uc3Qgc3RydWN0IGFhX3Rhc2tfY3h0ICpvbGRfY3h0ID0gb2xkLT5zZWN1cml0eTsKKwlzdHJ1Y3QgYWFfdGFza19jeHQgKm5ld19jeHQgPSBuZXctPnNlY3VyaXR5OworCisJYWFfZHVwX3Rhc2tfY29udGV4dChuZXdfY3h0LCBvbGRfY3h0KTsKK30KKworc3RhdGljIGludCBhcHBhcm1vcl9wdHJhY2VfYWNjZXNzX2NoZWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsCisJCQkJCXVuc2lnbmVkIGludCBtb2RlKQoreworCWludCBlcnJvciA9IGNhcF9wdHJhY2VfYWNjZXNzX2NoZWNrKGNoaWxkLCBtb2RlKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCXJldHVybiBhYV9wdHJhY2UoY3VycmVudCwgY2hpbGQsIG1vZGUpOworfQorCitzdGF0aWMgaW50IGFwcGFybW9yX3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KQoreworCWludCBlcnJvciA9IGNhcF9wdHJhY2VfdHJhY2VtZShwYXJlbnQpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJcmV0dXJuIGFhX3B0cmFjZShwYXJlbnQsIGN1cnJlbnQsIFBUUkFDRV9NT0RFX0FUVEFDSCk7Cit9CisKKy8qIERlcml2ZWQgZnJvbSBzZWN1cml0eS9jb21tb25jYXAuYzpjYXBfY2FwZ2V0ICovCitzdGF0aWMgaW50IGFwcGFybW9yX2NhcGdldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwga2VybmVsX2NhcF90ICplZmZlY3RpdmUsCisJCQkgICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZCkKK3sKKwlzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZTsKKwljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwljcmVkID0gX190YXNrX2NyZWQodGFyZ2V0KTsKKwlwcm9maWxlID0gYWFfY3JlZF9wcm9maWxlKGNyZWQpOworCisJKmVmZmVjdGl2ZSA9IGNyZWQtPmNhcF9lZmZlY3RpdmU7CisJKmluaGVyaXRhYmxlID0gY3JlZC0+Y2FwX2luaGVyaXRhYmxlOworCSpwZXJtaXR0ZWQgPSBjcmVkLT5jYXBfcGVybWl0dGVkOworCisJaWYgKCF1bmNvbmZpbmVkKHByb2ZpbGUpKSB7CisJCSplZmZlY3RpdmUgPSBjYXBfaW50ZXJzZWN0KCplZmZlY3RpdmUsIHByb2ZpbGUtPmNhcHMuYWxsb3cpOworCQkqcGVybWl0dGVkID0gY2FwX2ludGVyc2VjdCgqcGVybWl0dGVkLCBwcm9maWxlLT5jYXBzLmFsbG93KTsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcHBhcm1vcl9jYXBhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsCisJCQkgICAgaW50IGNhcCwgaW50IGF1ZGl0KQoreworCXN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlOworCS8qIGNhcF9jYXBhYmxlIHJldHVybnMgMCBvbiBzdWNjZXNzLCBlbHNlIC1FUEVSTSAqLworCWludCBlcnJvciA9IGNhcF9jYXBhYmxlKHRhc2ssIGNyZWQsIGNhcCwgYXVkaXQpOworCWlmICghZXJyb3IpIHsKKwkJcHJvZmlsZSA9IGFhX2NyZWRfcHJvZmlsZShjcmVkKTsKKwkJaWYgKCF1bmNvbmZpbmVkKHByb2ZpbGUpKQorCQkJZXJyb3IgPSBhYV9jYXBhYmxlKHRhc2ssIHByb2ZpbGUsIGNhcCwgYXVkaXQpOworCX0KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogY29tbW9uX3Blcm0gLSBiYXNpYyBjb21tb24gcGVybWlzc2lvbiBjaGVjayB3cmFwcGVyIGZuIGZvciBwYXRocworICogQG9wOiBvcGVyYXRpb24gYmVpbmcgY2hlY2tlZAorICogQHBhdGg6IHBhdGggdG8gY2hlY2sgcGVybWlzc2lvbiBvZiAgKE5PVCBOVUxMKQorICogQG1hc2s6IHJlcXVlc3RlZCBwZXJtaXNzaW9ucyBtYXNrCisgKiBAY29uZDogY29uZGl0aW9uYWwgaW5mbyBmb3IgdGhlIHBlcm1pc3Npb24gcmVxdWVzdCAgKE5PVCBOVUxMKQorICoKKyAqIFJldHVybnM6ICUwIGVsc2UgZXJyb3IgY29kZSBpZiBlcnJvciBvciBwZXJtaXNzaW9uIGRlbmllZAorICovCitzdGF0aWMgaW50IGNvbW1vbl9wZXJtKGludCBvcCwgc3RydWN0IHBhdGggKnBhdGgsIHUzMiBtYXNrLAorCQkgICAgICAgc3RydWN0IHBhdGhfY29uZCAqY29uZCkKK3sKKwlzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZTsKKwlpbnQgZXJyb3IgPSAwOworCisJcHJvZmlsZSA9IF9fYWFfY3VycmVudF9wcm9maWxlKCk7CisJaWYgKCF1bmNvbmZpbmVkKHByb2ZpbGUpKQorCQllcnJvciA9IGFhX3BhdGhfcGVybShvcCwgcHJvZmlsZSwgcGF0aCwgMCwgbWFzaywgY29uZCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogY29tbW9uX3Blcm1fZGlyX2RlbnRyeSAtIGNvbW1vbiBwZXJtaXNzaW9uIHdyYXBwZXIgd2hlbiBwYXRoIGlzIGRpciwgZGVudHJ5CisgKiBAb3A6IG9wZXJhdGlvbiBiZWluZyBjaGVja2VkCisgKiBAZGlyOiBkaXJlY3Rvcnkgb2YgdGhlIGRlbnRyeSAgKE5PVCBOVUxMKQorICogQGRlbnRyeTogZGVudHJ5IHRvIGNoZWNrICAoTk9UIE5VTEwpCisgKiBAbWFzazogcmVxdWVzdGVkIHBlcm1pc3Npb25zIG1hc2sKKyAqIEBjb25kOiBjb25kaXRpb25hbCBpbmZvIGZvciB0aGUgcGVybWlzc2lvbiByZXF1ZXN0ICAoTk9UIE5VTEwpCisgKgorICogUmV0dXJuczogJTAgZWxzZSBlcnJvciBjb2RlIGlmIGVycm9yIG9yIHBlcm1pc3Npb24gZGVuaWVkCisgKi8KK3N0YXRpYyBpbnQgY29tbW9uX3Blcm1fZGlyX2RlbnRyeShpbnQgb3AsIHN0cnVjdCBwYXRoICpkaXIsCisJCQkJICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHUzMiBtYXNrLAorCQkJCSAgc3RydWN0IHBhdGhfY29uZCAqY29uZCkKK3sKKwlzdHJ1Y3QgcGF0aCBwYXRoID0geyBkaXItPm1udCwgZGVudHJ5IH07CisKKwlyZXR1cm4gY29tbW9uX3Blcm0ob3AsICZwYXRoLCBtYXNrLCBjb25kKTsKK30KKworLyoqCisgKiBjb21tb25fcGVybV9tbnRfZGVudHJ5IC0gY29tbW9uIHBlcm1pc3Npb24gd3JhcHBlciB3aGVuIG1udCwgZGVudHJ5CisgKiBAb3A6IG9wZXJhdGlvbiBiZWluZyBjaGVja2VkCisgKiBAbW50OiBtb3VudCBwb2ludCBvZiBkZW50cnkgKE5PVCBOVUxMKQorICogQGRlbnRyeTogZGVudHJ5IHRvIGNoZWNrICAoTk9UIE5VTEwpCisgKiBAbWFzazogcmVxdWVzdGVkIHBlcm1pc3Npb25zIG1hc2sKKyAqCisgKiBSZXR1cm5zOiAlMCBlbHNlIGVycm9yIGNvZGUgaWYgZXJyb3Igb3IgcGVybWlzc2lvbiBkZW5pZWQKKyAqLworc3RhdGljIGludCBjb21tb25fcGVybV9tbnRfZGVudHJ5KGludCBvcCwgc3RydWN0IHZmc21vdW50ICptbnQsCisJCQkJICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHUzMiBtYXNrKQoreworCXN0cnVjdCBwYXRoIHBhdGggPSB7IG1udCwgZGVudHJ5IH07CisJc3RydWN0IHBhdGhfY29uZCBjb25kID0geyBkZW50cnktPmRfaW5vZGUtPmlfdWlkLAorCQkJCSAgZGVudHJ5LT5kX2lub2RlLT5pX21vZGUKKwl9OworCisJcmV0dXJuIGNvbW1vbl9wZXJtKG9wLCAmcGF0aCwgbWFzaywgJmNvbmQpOworfQorCisvKioKKyAqIGNvbW1vbl9wZXJtX3JtIC0gY29tbW9uIHBlcm1pc3Npb24gd3JhcHBlciBmb3Igb3BlcmF0aW9ucyBkb2luZyBybQorICogQG9wOiBvcGVyYXRpb24gYmVpbmcgY2hlY2tlZAorICogQGRpcjogZGlyZWN0b3J5IHRoYXQgdGhlIGRlbnRyeSBpcyBpbiAgKE5PVCBOVUxMKQorICogQGRlbnRyeTogZGVudHJ5IGJlaW5nIHJtJ2QgIChOT1QgTlVMTCkKKyAqIEBtYXNrOiByZXF1ZXN0ZWQgcGVybWlzc2lvbiBtYXNrCisgKgorICogUmV0dXJuczogJTAgZWxzZSBlcnJvciBjb2RlIGlmIGVycm9yIG9yIHBlcm1pc3Npb24gZGVuaWVkCisgKi8KK3N0YXRpYyBpbnQgY29tbW9uX3Blcm1fcm0oaW50IG9wLCBzdHJ1Y3QgcGF0aCAqZGlyLAorCQkJICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHUzMiBtYXNrKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IHBhdGhfY29uZCBjb25kID0geyB9OworCisJaWYgKCFpbm9kZSB8fCAhZGlyLT5tbnQgfHwgIW1lZGlhdGVkX2ZpbGVzeXN0ZW0oaW5vZGUpKQorCQlyZXR1cm4gMDsKKworCWNvbmQudWlkID0gaW5vZGUtPmlfdWlkOworCWNvbmQubW9kZSA9IGlub2RlLT5pX21vZGU7CisKKwlyZXR1cm4gY29tbW9uX3Blcm1fZGlyX2RlbnRyeShvcCwgZGlyLCBkZW50cnksIG1hc2ssICZjb25kKTsKK30KKworLyoqCisgKiBjb21tb25fcGVybV9jcmVhdGUgLSBjb21tb24gcGVybWlzc2lvbiB3cmFwcGVyIGZvciBvcGVyYXRpb25zIGRvaW5nIGNyZWF0ZQorICogQG9wOiBvcGVyYXRpb24gYmVpbmcgY2hlY2tlZAorICogQGRpcjogZGlyZWN0b3J5IHRoYXQgZGVudHJ5IHdpbGwgYmUgY3JlYXRlZCBpbiAgKE5PVCBOVUxMKQorICogQGRlbnRyeTogZGVudHJ5IHRvIGNyZWF0ZSAgIChOT1QgTlVMTCkKKyAqIEBtYXNrOiByZXF1ZXN0IHBlcm1pc3Npb24gbWFzaworICogQG1vZGU6IGNyZWF0ZWQgZmlsZSBtb2RlCisgKgorICogUmV0dXJuczogJTAgZWxzZSBlcnJvciBjb2RlIGlmIGVycm9yIG9yIHBlcm1pc3Npb24gZGVuaWVkCisgKi8KK3N0YXRpYyBpbnQgY29tbW9uX3Blcm1fY3JlYXRlKGludCBvcCwgc3RydWN0IHBhdGggKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJICAgICAgdTMyIG1hc2ssIHVtb2RlX3QgbW9kZSkKK3sKKwlzdHJ1Y3QgcGF0aF9jb25kIGNvbmQgPSB7IGN1cnJlbnRfZnN1aWQoKSwgbW9kZSB9OworCisJaWYgKCFkaXItPm1udCB8fCAhbWVkaWF0ZWRfZmlsZXN5c3RlbShkaXItPmRlbnRyeS0+ZF9pbm9kZSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIGNvbW1vbl9wZXJtX2Rpcl9kZW50cnkob3AsIGRpciwgZGVudHJ5LCBtYXNrLCAmY29uZCk7Cit9CisKK3N0YXRpYyBpbnQgYXBwYXJtb3JfcGF0aF91bmxpbmsoc3RydWN0IHBhdGggKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXJldHVybiBjb21tb25fcGVybV9ybShPUF9VTkxJTkssIGRpciwgZGVudHJ5LCBBQV9NQVlfREVMRVRFKTsKK30KKworc3RhdGljIGludCBhcHBhcm1vcl9wYXRoX21rZGlyKHN0cnVjdCBwYXRoICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCSAgICAgICBpbnQgbW9kZSkKK3sKKwlyZXR1cm4gY29tbW9uX3Blcm1fY3JlYXRlKE9QX01LRElSLCBkaXIsIGRlbnRyeSwgQUFfTUFZX0NSRUFURSwKKwkJCQkgIFNfSUZESVIpOworfQorCitzdGF0aWMgaW50IGFwcGFybW9yX3BhdGhfcm1kaXIoc3RydWN0IHBhdGggKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXJldHVybiBjb21tb25fcGVybV9ybShPUF9STURJUiwgZGlyLCBkZW50cnksIEFBX01BWV9ERUxFVEUpOworfQorCitzdGF0aWMgaW50IGFwcGFybW9yX3BhdGhfbWtub2Qoc3RydWN0IHBhdGggKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJICAgICAgIGludCBtb2RlLCB1bnNpZ25lZCBpbnQgZGV2KQoreworCXJldHVybiBjb21tb25fcGVybV9jcmVhdGUoT1BfTUtOT0QsIGRpciwgZGVudHJ5LCBBQV9NQVlfQ1JFQVRFLCBtb2RlKTsKK30KKworc3RhdGljIGludCBhcHBhcm1vcl9wYXRoX3RydW5jYXRlKHN0cnVjdCBwYXRoICpwYXRoKQoreworCXN0cnVjdCBwYXRoX2NvbmQgY29uZCA9IHsgcGF0aC0+ZGVudHJ5LT5kX2lub2RlLT5pX3VpZCwKKwkJCQkgIHBhdGgtPmRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlCisJfTsKKworCWlmICghcGF0aC0+bW50IHx8ICFtZWRpYXRlZF9maWxlc3lzdGVtKHBhdGgtPmRlbnRyeS0+ZF9pbm9kZSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIGNvbW1vbl9wZXJtKE9QX1RSVU5DLCBwYXRoLCBNQVlfV1JJVEUgfCBBQV9NQVlfTUVUQV9XUklURSwKKwkJCSAgICZjb25kKTsKK30KKworc3RhdGljIGludCBhcHBhcm1vcl9wYXRoX3N5bWxpbmsoc3RydWN0IHBhdGggKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJCSBjb25zdCBjaGFyICpvbGRfbmFtZSkKK3sKKwlyZXR1cm4gY29tbW9uX3Blcm1fY3JlYXRlKE9QX1NZTUxJTkssIGRpciwgZGVudHJ5LCBBQV9NQVlfQ1JFQVRFLAorCQkJCSAgU19JRkxOSyk7Cit9CisKK3N0YXRpYyBpbnQgYXBwYXJtb3JfcGF0aF9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBwYXRoICpuZXdfZGlyLAorCQkJICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKK3sKKwlzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZTsKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKCFtZWRpYXRlZF9maWxlc3lzdGVtKG9sZF9kZW50cnktPmRfaW5vZGUpKQorCQlyZXR1cm4gMDsKKworCXByb2ZpbGUgPSBhYV9jdXJyZW50X3Byb2ZpbGUoKTsKKwlpZiAoIXVuY29uZmluZWQocHJvZmlsZSkpCisJCWVycm9yID0gYWFfcGF0aF9saW5rKHByb2ZpbGUsIG9sZF9kZW50cnksIG5ld19kaXIsIG5ld19kZW50cnkpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBhcHBhcm1vcl9wYXRoX3JlbmFtZShzdHJ1Y3QgcGF0aCAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKKwkJCQlzdHJ1Y3QgcGF0aCAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKK3sKKwlzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZTsKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKCFtZWRpYXRlZF9maWxlc3lzdGVtKG9sZF9kZW50cnktPmRfaW5vZGUpKQorCQlyZXR1cm4gMDsKKworCXByb2ZpbGUgPSBhYV9jdXJyZW50X3Byb2ZpbGUoKTsKKwlpZiAoIXVuY29uZmluZWQocHJvZmlsZSkpIHsKKwkJc3RydWN0IHBhdGggb2xkX3BhdGggPSB7IG9sZF9kaXItPm1udCwgb2xkX2RlbnRyeSB9OworCQlzdHJ1Y3QgcGF0aCBuZXdfcGF0aCA9IHsgbmV3X2Rpci0+bW50LCBuZXdfZGVudHJ5IH07CisJCXN0cnVjdCBwYXRoX2NvbmQgY29uZCA9IHsgb2xkX2RlbnRyeS0+ZF9pbm9kZS0+aV91aWQsCisJCQkJCSAgb2xkX2RlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlCisJCX07CisKKwkJZXJyb3IgPSBhYV9wYXRoX3Blcm0oT1BfUkVOQU1FX1NSQywgcHJvZmlsZSwgJm9sZF9wYXRoLCAwLAorCQkJCSAgICAgTUFZX1JFQUQgfCBBQV9NQVlfTUVUQV9SRUFEIHwgTUFZX1dSSVRFIHwKKwkJCQkgICAgIEFBX01BWV9NRVRBX1dSSVRFIHwgQUFfTUFZX0RFTEVURSwKKwkJCQkgICAgICZjb25kKTsKKwkJaWYgKCFlcnJvcikKKwkJCWVycm9yID0gYWFfcGF0aF9wZXJtKE9QX1JFTkFNRV9ERVNULCBwcm9maWxlLCAmbmV3X3BhdGgsCisJCQkJCSAgICAgMCwgTUFZX1dSSVRFIHwgQUFfTUFZX01FVEFfV1JJVEUgfAorCQkJCQkgICAgIEFBX01BWV9DUkVBVEUsICZjb25kKTsKKworCX0KKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgYXBwYXJtb3JfcGF0aF9jaG1vZChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCB2ZnNtb3VudCAqbW50LAorCQkJICAgICAgIG1vZGVfdCBtb2RlKQoreworCWlmICghbWVkaWF0ZWRfZmlsZXN5c3RlbShkZW50cnktPmRfaW5vZGUpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBjb21tb25fcGVybV9tbnRfZGVudHJ5KE9QX0NITU9ELCBtbnQsIGRlbnRyeSwgQUFfTUFZX0NITU9EKTsKK30KKworc3RhdGljIGludCBhcHBhcm1vcl9wYXRoX2Nob3duKHN0cnVjdCBwYXRoICpwYXRoLCB1aWRfdCB1aWQsIGdpZF90IGdpZCkKK3sKKwlzdHJ1Y3QgcGF0aF9jb25kIGNvbmQgPSAgeyBwYXRoLT5kZW50cnktPmRfaW5vZGUtPmlfdWlkLAorCQkJCSAgIHBhdGgtPmRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlCisJfTsKKworCWlmICghbWVkaWF0ZWRfZmlsZXN5c3RlbShwYXRoLT5kZW50cnktPmRfaW5vZGUpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBjb21tb25fcGVybShPUF9DSE9XTiwgcGF0aCwgQUFfTUFZX0NIT1dOLCAmY29uZCk7Cit9CisKK3N0YXRpYyBpbnQgYXBwYXJtb3JfaW5vZGVfZ2V0YXR0cihzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCWlmICghbWVkaWF0ZWRfZmlsZXN5c3RlbShkZW50cnktPmRfaW5vZGUpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBjb21tb25fcGVybV9tbnRfZGVudHJ5KE9QX0dFVEFUVFIsIG1udCwgZGVudHJ5LAorCQkJCSAgICAgIEFBX01BWV9NRVRBX1JFQUQpOworfQorCitzdGF0aWMgaW50IGFwcGFybW9yX2RlbnRyeV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCkKK3sKKwlzdHJ1Y3QgYWFfZmlsZV9jeHQgKmZjeHQgPSBmaWxlLT5mX3NlY3VyaXR5OworCXN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlOworCWludCBlcnJvciA9IDA7CisKKwlpZiAoIW1lZGlhdGVkX2ZpbGVzeXN0ZW0oZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkpCisJCXJldHVybiAwOworCisJLyogSWYgaW4gZXhlYywgcGVybWlzc2lvbiBpcyBoYW5kbGVkIGJ5IGJwcm0gaG9va3MuCisJICogQ2FjaGUgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGUgcHJldmlvdXMgZXhlYyBjaGVjaywgd2l0aAorCSAqIGltcGxpY2l0IHJlYWQgYW5kIGV4ZWN1dGFibGUgbW1hcCB3aGljaCBhcmUgcmVxdWlyZWQgdG8KKwkgKiBhY3R1YWxseSBleGVjdXRlIHRoZSBpbWFnZS4KKwkgKi8KKwlpZiAoY3VycmVudC0+aW5fZXhlY3ZlKSB7CisJCWZjeHQtPmFsbG93ID0gTUFZX0VYRUMgfCBNQVlfUkVBRCB8IEFBX0VYRUNfTU1BUDsKKwkJcmV0dXJuIDA7CisJfQorCisJcHJvZmlsZSA9IGFhX2NyZWRfcHJvZmlsZShjcmVkKTsKKwlpZiAoIXVuY29uZmluZWQocHJvZmlsZSkpIHsKKwkJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisJCXN0cnVjdCBwYXRoX2NvbmQgY29uZCA9IHsgaW5vZGUtPmlfdWlkLCBpbm9kZS0+aV9tb2RlIH07CisKKwkJZXJyb3IgPSBhYV9wYXRoX3Blcm0oT1BfT1BFTiwgcHJvZmlsZSwgJmZpbGUtPmZfcGF0aCwgMCwKKwkJCQkgICAgIGFhX21hcF9maWxlX3RvX3Blcm1zKGZpbGUpLCAmY29uZCk7CisJCS8qIHRvZG8gY2FjaGUgZnVsbCBhbGxvd2VkIHBlcm1pc3Npb25zIHNldCBhbmQgc3RhdGUgKi8KKwkJZmN4dC0+YWxsb3cgPSBhYV9tYXBfZmlsZV90b19wZXJtcyhmaWxlKTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgYXBwYXJtb3JfZmlsZV9hbGxvY19zZWN1cml0eShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwkvKiBmcmVlZCBieSBhcHBhcm1vcl9maWxlX2ZyZWVfc2VjdXJpdHkgKi8KKwlmaWxlLT5mX3NlY3VyaXR5ID0gYWFfYWxsb2NfZmlsZV9jb250ZXh0KEdGUF9LRVJORUwpOworCWlmICghZmlsZS0+Zl9zZWN1cml0eSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIHZvaWQgYXBwYXJtb3JfZmlsZV9mcmVlX3NlY3VyaXR5KHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBhYV9maWxlX2N4dCAqY3h0ID0gZmlsZS0+Zl9zZWN1cml0eTsKKworCWFhX2ZyZWVfZmlsZV9jb250ZXh0KGN4dCk7Cit9CisKK3N0YXRpYyBpbnQgY29tbW9uX2ZpbGVfcGVybShpbnQgb3AsIHN0cnVjdCBmaWxlICpmaWxlLCB1MzIgbWFzaykKK3sKKwlzdHJ1Y3QgYWFfZmlsZV9jeHQgKmZjeHQgPSBmaWxlLT5mX3NlY3VyaXR5OworCXN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlLCAqZnByb2ZpbGUgPSBhYV9jcmVkX3Byb2ZpbGUoZmlsZS0+Zl9jcmVkKTsKKwlpbnQgZXJyb3IgPSAwOworCisJQlVHX09OKCFmcHJvZmlsZSk7CisKKwlpZiAoIWZpbGUtPmZfcGF0aC5tbnQgfHwKKwkgICAgIW1lZGlhdGVkX2ZpbGVzeXN0ZW0oZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkpCisJCXJldHVybiAwOworCisJcHJvZmlsZSA9IF9fYWFfY3VycmVudF9wcm9maWxlKCk7CisKKwkvKiByZXZhbGlkYXRlIGFjY2VzcywgaWYgdGFzayBpcyB1bmNvbmZpbmVkLCBvciB0aGUgY2FjaGVkIGNyZWQKKwkgKiBkb2Vzbid0IG1hdGNoIG9yIGlmIHRoZSByZXF1ZXN0IGlzIGZvciBtb3JlIHBlcm1pc3Npb25zIHRoYW4KKwkgKiB3YXMgZ3JhbnRlZC4KKwkgKgorCSAqIE5vdGU6IHRoZSB0ZXN0IGZvciAhdW5jb25maW5lZChmcHJvZmlsZSkgaXMgdG8gaGFuZGxlIGZpbGUKKwkgKiAgICAgICBkZWxlZ2F0aW9uIGZyb20gdW5jb25maW5lZCB0YXNrcworCSAqLworCWlmICghdW5jb25maW5lZChwcm9maWxlKSAmJiAhdW5jb25maW5lZChmcHJvZmlsZSkgJiYKKwkgICAgKChmcHJvZmlsZSAhPSBwcm9maWxlKSB8fCAobWFzayAmIH5mY3h0LT5hbGxvdykpKQorCQllcnJvciA9IGFhX2ZpbGVfcGVybShvcCwgcHJvZmlsZSwgZmlsZSwgbWFzayk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgYXBwYXJtb3JfZmlsZV9wZXJtaXNzaW9uKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbWFzaykKK3sKKwlyZXR1cm4gY29tbW9uX2ZpbGVfcGVybShPUF9GUEVSTSwgZmlsZSwgbWFzayk7Cit9CisKK3N0YXRpYyBpbnQgYXBwYXJtb3JfZmlsZV9sb2NrKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kKQoreworCXUzMiBtYXNrID0gQUFfTUFZX0xPQ0s7CisKKwlpZiAoY21kID09IEZfV1JMQ0spCisJCW1hc2sgfD0gTUFZX1dSSVRFOworCisJcmV0dXJuIGNvbW1vbl9maWxlX3Blcm0oT1BfRkxPQ0ssIGZpbGUsIG1hc2spOworfQorCitzdGF0aWMgaW50IGNvbW1vbl9tbWFwKGludCBvcCwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcHJvdCwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5OworCWludCBtYXNrID0gMDsKKworCWlmICghZmlsZSB8fCAhZmlsZS0+Zl9zZWN1cml0eSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocHJvdCAmIFBST1RfUkVBRCkKKwkJbWFzayB8PSBNQVlfUkVBRDsKKwkvKgorCSAqIFByaXZhdGUgbWFwcGluZ3MgZG9uJ3QgcmVxdWlyZSB3cml0ZSBwZXJtcyBzaW5jZSB0aGV5IGRvbid0CisJICogd3JpdGUgYmFjayB0byB0aGUgZmlsZXMKKwkgKi8KKwlpZiAoKHByb3QgJiBQUk9UX1dSSVRFKSAmJiAhKGZsYWdzICYgTUFQX1BSSVZBVEUpKQorCQltYXNrIHw9IE1BWV9XUklURTsKKwlpZiAocHJvdCAmIFBST1RfRVhFQykKKwkJbWFzayB8PSBBQV9FWEVDX01NQVA7CisKKwlkZW50cnkgPSBmaWxlLT5mX3BhdGguZGVudHJ5OworCXJldHVybiBjb21tb25fZmlsZV9wZXJtKG9wLCBmaWxlLCBtYXNrKTsKK30KKworc3RhdGljIGludCBhcHBhcm1vcl9maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcmVxcHJvdCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBhZGRyX29ubHkpCit7CisJaW50IHJjID0gMDsKKworCS8qIGRvIERBQyBjaGVjayAqLworCXJjID0gY2FwX2ZpbGVfbW1hcChmaWxlLCByZXFwcm90LCBwcm90LCBmbGFncywgYWRkciwgYWRkcl9vbmx5KTsKKwlpZiAocmMgfHwgYWRkcl9vbmx5KQorCQlyZXR1cm4gcmM7CisKKwlyZXR1cm4gY29tbW9uX21tYXAoT1BfRk1NQVAsIGZpbGUsIHByb3QsIGZsYWdzKTsKK30KKworc3RhdGljIGludCBhcHBhcm1vcl9maWxlX21wcm90ZWN0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgdW5zaWduZWQgbG9uZyByZXFwcm90LCB1bnNpZ25lZCBsb25nIHByb3QpCit7CisJcmV0dXJuIGNvbW1vbl9tbWFwKE9QX0ZNUFJPVCwgdm1hLT52bV9maWxlLCBwcm90LAorCQkJICAgISh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKSA/IE1BUF9QUklWQVRFIDogMCk7Cit9CisKK3N0YXRpYyBpbnQgYXBwYXJtb3JfZ2V0cHJvY2F0dHIoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBjaGFyICpuYW1lLAorCQkJCWNoYXIgKip2YWx1ZSkKK3sKKwlpbnQgZXJyb3IgPSAtRU5PRU5UOworCXN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlOworCS8qIHJlbGVhc2VkIGJlbG93ICovCisJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBnZXRfdGFza19jcmVkKHRhc2spOworCXN0cnVjdCBhYV90YXNrX2N4dCAqY3h0ID0gY3JlZC0+c2VjdXJpdHk7CisJcHJvZmlsZSA9IGFhX2NyZWRfcHJvZmlsZShjcmVkKTsKKworCWlmIChzdHJjbXAobmFtZSwgImN1cnJlbnQiKSA9PSAwKQorCQllcnJvciA9IGFhX2dldHByb2NhdHRyKGFhX25ld2VzdF92ZXJzaW9uKGN4dC0+cHJvZmlsZSksCisJCQkJICAgICAgIHZhbHVlKTsKKwllbHNlIGlmIChzdHJjbXAobmFtZSwgInByZXYiKSA9PSAwICAmJiBjeHQtPnByZXZpb3VzKQorCQllcnJvciA9IGFhX2dldHByb2NhdHRyKGFhX25ld2VzdF92ZXJzaW9uKGN4dC0+cHJldmlvdXMpLAorCQkJCSAgICAgICB2YWx1ZSk7CisJZWxzZSBpZiAoc3RyY21wKG5hbWUsICJleGVjIikgPT0gMCAmJiBjeHQtPm9uZXhlYykKKwkJZXJyb3IgPSBhYV9nZXRwcm9jYXR0cihhYV9uZXdlc3RfdmVyc2lvbihjeHQtPm9uZXhlYyksCisJCQkJICAgICAgIHZhbHVlKTsKKwllbHNlCisJCWVycm9yID0gLUVJTlZBTDsKKworCXB1dF9jcmVkKGNyZWQpOworCisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IGFwcGFybW9yX3NldHByb2NhdHRyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY2hhciAqbmFtZSwKKwkJCQl2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUpCit7CisJY2hhciAqY29tbWFuZCwgKmFyZ3MgPSB2YWx1ZTsKKwlzaXplX3QgYXJnX3NpemU7CisJaW50IGVycm9yOworCisJaWYgKHNpemUgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJLyogYXJncyBwb2ludHMgdG8gYSBQQUdFX1NJWkUgYnVmZmVyLCBBcHBBcm1vciByZXF1aXJlcyB0aGF0CisJICogdGhlIGJ1ZmZlciBtdXN0IGJlIG51bGwgdGVybWluYXRlZCBvciBoYXZlIHNpemUgPD0gUEFHRV9TSVpFIC0xCisJICogc28gdGhhdCBBcHBBcm1vciBjYW4gbnVsbCB0ZXJtaW5hdGUgdGhlbQorCSAqLworCWlmIChhcmdzW3NpemUgLSAxXSAhPSAnXDAnKSB7CisJCWlmIChzaXplID09IFBBR0VfU0laRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlhcmdzW3NpemVdID0gJ1wwJzsKKwl9CisKKwkvKiB0YXNrIGNhbiBvbmx5IHdyaXRlIGl0cyBvd24gYXR0cmlidXRlcyAqLworCWlmIChjdXJyZW50ICE9IHRhc2spCisJCXJldHVybiAtRUFDQ0VTOworCisJYXJncyA9IHZhbHVlOworCWFyZ3MgPSBzdHJpbShhcmdzKTsKKwljb21tYW5kID0gc3Ryc2VwKCZhcmdzLCAiICIpOworCWlmICghYXJncykKKwkJcmV0dXJuIC1FSU5WQUw7CisJYXJncyA9IHNraXBfc3BhY2VzKGFyZ3MpOworCWlmICghKmFyZ3MpCisJCXJldHVybiAtRUlOVkFMOworCisJYXJnX3NpemUgPSBzaXplIC0gKGFyZ3MgLSAoY2hhciAqKSB2YWx1ZSk7CisJaWYgKHN0cmNtcChuYW1lLCAiY3VycmVudCIpID09IDApIHsKKwkJaWYgKHN0cmNtcChjb21tYW5kLCAiY2hhbmdlaGF0IikgPT0gMCkgeworCQkJZXJyb3IgPSBhYV9zZXRwcm9jYXR0cl9jaGFuZ2VoYXQoYXJncywgYXJnX3NpemUsCisJCQkJCQkJICFBQV9ET19URVNUKTsKKwkJfSBlbHNlIGlmIChzdHJjbXAoY29tbWFuZCwgInBlcm1oYXQiKSA9PSAwKSB7CisJCQllcnJvciA9IGFhX3NldHByb2NhdHRyX2NoYW5nZWhhdChhcmdzLCBhcmdfc2l6ZSwKKwkJCQkJCQkgQUFfRE9fVEVTVCk7CisJCX0gZWxzZSBpZiAoc3RyY21wKGNvbW1hbmQsICJjaGFuZ2Vwcm9maWxlIikgPT0gMCkgeworCQkJZXJyb3IgPSBhYV9zZXRwcm9jYXR0cl9jaGFuZ2Vwcm9maWxlKGFyZ3MsICFBQV9PTkVYRUMsCisJCQkJCQkJICAgICAhQUFfRE9fVEVTVCk7CisJCX0gZWxzZSBpZiAoc3RyY21wKGNvbW1hbmQsICJwZXJtcHJvZmlsZSIpID09IDApIHsKKwkJCWVycm9yID0gYWFfc2V0cHJvY2F0dHJfY2hhbmdlcHJvZmlsZShhcmdzLCAhQUFfT05FWEVDLAorCQkJCQkJCSAgICAgQUFfRE9fVEVTVCk7CisJCX0gZWxzZSBpZiAoc3RyY21wKGNvbW1hbmQsICJwZXJtaXBjIikgPT0gMCkgeworCQkJZXJyb3IgPSBhYV9zZXRwcm9jYXR0cl9wZXJtaXBjKGFyZ3MpOworCQl9IGVsc2UgeworCQkJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIHNhOworCQkJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmc2EsIE5PTkUpOworCQkJc2EuYWFkLm9wID0gT1BfU0VUUFJPQ0FUVFI7CisJCQlzYS5hYWQuaW5mbyA9IG5hbWU7CisJCQlzYS5hYWQuZXJyb3IgPSAtRUlOVkFMOworCQkJcmV0dXJuIGFhX2F1ZGl0KEFVRElUX0FQUEFSTU9SX0RFTklFRCwgTlVMTCwgR0ZQX0tFUk5FTCwKKwkJCQkJJnNhLCBOVUxMKTsKKwkJfQorCX0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJleGVjIikgPT0gMCkgeworCQllcnJvciA9IGFhX3NldHByb2NhdHRyX2NoYW5nZXByb2ZpbGUoYXJncywgQUFfT05FWEVDLAorCQkJCQkJICAgICAhQUFfRE9fVEVTVCk7CisJfSBlbHNlIHsKKwkJLyogb25seSBzdXBwb3J0IHRoZSAiY3VycmVudCIgYW5kICJleGVjIiBwcm9jZXNzIGF0dHJpYnV0ZXMgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICghZXJyb3IpCisJCWVycm9yID0gc2l6ZTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgYXBwYXJtb3JfdGFza19zZXRybGltaXQodW5zaWduZWQgaW50IHJlc291cmNlLAorCQkJCSAgIHN0cnVjdCBybGltaXQgKm5ld19ybGltKQoreworCXN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlID0gYWFfY3VycmVudF9wcm9maWxlKCk7CisJaW50IGVycm9yID0gMDsKKworCWlmICghdW5jb25maW5lZChwcm9maWxlKSkKKwkJZXJyb3IgPSBhYV90YXNrX3NldHJsaW1pdChwcm9maWxlLCByZXNvdXJjZSwgbmV3X3JsaW0pOworCisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgc3RydWN0IHNlY3VyaXR5X29wZXJhdGlvbnMgYXBwYXJtb3Jfb3BzID0geworCS5uYW1lID0JCQkJImFwcGFybW9yIiwKKworCS5wdHJhY2VfYWNjZXNzX2NoZWNrID0JCWFwcGFybW9yX3B0cmFjZV9hY2Nlc3NfY2hlY2ssCisJLnB0cmFjZV90cmFjZW1lID0JCWFwcGFybW9yX3B0cmFjZV90cmFjZW1lLAorCS5jYXBnZXQgPQkJCWFwcGFybW9yX2NhcGdldCwKKwkuY2FwYWJsZSA9CQkJYXBwYXJtb3JfY2FwYWJsZSwKKworCS5wYXRoX2xpbmsgPQkJCWFwcGFybW9yX3BhdGhfbGluaywKKwkucGF0aF91bmxpbmsgPQkJCWFwcGFybW9yX3BhdGhfdW5saW5rLAorCS5wYXRoX3N5bWxpbmsgPQkJCWFwcGFybW9yX3BhdGhfc3ltbGluaywKKwkucGF0aF9ta2RpciA9CQkJYXBwYXJtb3JfcGF0aF9ta2RpciwKKwkucGF0aF9ybWRpciA9CQkJYXBwYXJtb3JfcGF0aF9ybWRpciwKKwkucGF0aF9ta25vZCA9CQkJYXBwYXJtb3JfcGF0aF9ta25vZCwKKwkucGF0aF9yZW5hbWUgPQkJCWFwcGFybW9yX3BhdGhfcmVuYW1lLAorCS5wYXRoX2NobW9kID0JCQlhcHBhcm1vcl9wYXRoX2NobW9kLAorCS5wYXRoX2Nob3duID0JCQlhcHBhcm1vcl9wYXRoX2Nob3duLAorCS5wYXRoX3RydW5jYXRlID0JCWFwcGFybW9yX3BhdGhfdHJ1bmNhdGUsCisJLmRlbnRyeV9vcGVuID0JCQlhcHBhcm1vcl9kZW50cnlfb3BlbiwKKwkuaW5vZGVfZ2V0YXR0ciA9ICAgICAgICAgICAgICAgIGFwcGFybW9yX2lub2RlX2dldGF0dHIsCisKKwkuZmlsZV9wZXJtaXNzaW9uID0JCWFwcGFybW9yX2ZpbGVfcGVybWlzc2lvbiwKKwkuZmlsZV9hbGxvY19zZWN1cml0eSA9CQlhcHBhcm1vcl9maWxlX2FsbG9jX3NlY3VyaXR5LAorCS5maWxlX2ZyZWVfc2VjdXJpdHkgPQkJYXBwYXJtb3JfZmlsZV9mcmVlX3NlY3VyaXR5LAorCS5maWxlX21tYXAgPQkJCWFwcGFybW9yX2ZpbGVfbW1hcCwKKwkuZmlsZV9tcHJvdGVjdCA9CQlhcHBhcm1vcl9maWxlX21wcm90ZWN0LAorCS5maWxlX2xvY2sgPQkJCWFwcGFybW9yX2ZpbGVfbG9jaywKKworCS5nZXRwcm9jYXR0ciA9CQkJYXBwYXJtb3JfZ2V0cHJvY2F0dHIsCisJLnNldHByb2NhdHRyID0JCQlhcHBhcm1vcl9zZXRwcm9jYXR0ciwKKworCS5jcmVkX2FsbG9jX2JsYW5rID0JCWFwcGFybW9yX2NyZWRfYWxsb2NfYmxhbmssCisJLmNyZWRfZnJlZSA9CQkJYXBwYXJtb3JfY3JlZF9mcmVlLAorCS5jcmVkX3ByZXBhcmUgPQkJCWFwcGFybW9yX2NyZWRfcHJlcGFyZSwKKwkuY3JlZF90cmFuc2ZlciA9CQlhcHBhcm1vcl9jcmVkX3RyYW5zZmVyLAorCisJLmJwcm1fc2V0X2NyZWRzID0JCWFwcGFybW9yX2Jwcm1fc2V0X2NyZWRzLAorCS5icHJtX2NvbW1pdHRpbmdfY3JlZHMgPQlhcHBhcm1vcl9icHJtX2NvbW1pdHRpbmdfY3JlZHMsCisJLmJwcm1fY29tbWl0dGVkX2NyZWRzID0JCWFwcGFybW9yX2Jwcm1fY29tbWl0dGVkX2NyZWRzLAorCS5icHJtX3NlY3VyZWV4ZWMgPQkJYXBwYXJtb3JfYnBybV9zZWN1cmVleGVjLAorCisJLnRhc2tfc2V0cmxpbWl0ID0JCWFwcGFybW9yX3Rhc2tfc2V0cmxpbWl0LAorfTsKKworLyoKKyAqIEFwcEFybW9yIHN5c2ZzIG1vZHVsZSBwYXJhbWV0ZXJzCisgKi8KKworc3RhdGljIGludCBwYXJhbV9zZXRfYWFib29sKGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApOworc3RhdGljIGludCBwYXJhbV9nZXRfYWFib29sKGNoYXIgKmJ1ZmZlciwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApOworI2RlZmluZSBwYXJhbV9jaGVja19hYWJvb2wobmFtZSwgcCkgX19wYXJhbV9jaGVjayhuYW1lLCBwLCBpbnQpCisKK3N0YXRpYyBpbnQgcGFyYW1fc2V0X2FhdWludChjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKTsKK3N0YXRpYyBpbnQgcGFyYW1fZ2V0X2FhdWludChjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKTsKKyNkZWZpbmUgcGFyYW1fY2hlY2tfYWF1aW50KG5hbWUsIHApIF9fcGFyYW1fY2hlY2sobmFtZSwgcCwgaW50KQorCitzdGF0aWMgaW50IHBhcmFtX3NldF9hYWxvY2twb2xpY3koY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CitzdGF0aWMgaW50IHBhcmFtX2dldF9hYWxvY2twb2xpY3koY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CisjZGVmaW5lIHBhcmFtX2NoZWNrX2FhbG9ja3BvbGljeShuYW1lLCBwKSBfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIGludCkKKworc3RhdGljIGludCBwYXJhbV9zZXRfYXVkaXQoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CitzdGF0aWMgaW50IHBhcmFtX2dldF9hdWRpdChjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKTsKKyNkZWZpbmUgcGFyYW1fY2hlY2tfYXVkaXQobmFtZSwgcCkgX19wYXJhbV9jaGVjayhuYW1lLCBwLCBpbnQpCisKK3N0YXRpYyBpbnQgcGFyYW1fc2V0X21vZGUoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CitzdGF0aWMgaW50IHBhcmFtX2dldF9tb2RlKGNoYXIgKmJ1ZmZlciwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApOworI2RlZmluZSBwYXJhbV9jaGVja19tb2RlKG5hbWUsIHApIF9fcGFyYW1fY2hlY2sobmFtZSwgcCwgaW50KQorCisvKiBGbGFnIHZhbHVlcywgYWxzbyBjb250cm9sbGFibGUgdmlhIC9zeXMvbW9kdWxlL2FwcGFybW9yL3BhcmFtZXRlcnMKKyAqIFdlIGRlZmluZSBzcGVjaWFsIHR5cGVzIGFzIHdlIHdhbnQgdG8gZG8gYWRkaXRpb25hbCBtZWRpYXRpb24uCisgKi8KKworLyogQXBwQXJtb3IgZ2xvYmFsIGVuZm9yY2VtZW50IHN3aXRjaCAtIGNvbXBsYWluLCBlbmZvcmNlLCBraWxsICovCitlbnVtIHByb2ZpbGVfbW9kZSBhYV9nX3Byb2ZpbGVfbW9kZSA9IEFQUEFSTU9SX0VORk9SQ0U7Cittb2R1bGVfcGFyYW1fY2FsbChtb2RlLCBwYXJhbV9zZXRfbW9kZSwgcGFyYW1fZ2V0X21vZGUsCisJCSAgJmFhX2dfcHJvZmlsZV9tb2RlLCBTX0lSVVNSIHwgU19JV1VTUik7CisKKy8qIERlYnVnIG1vZGUgKi8KK2ludCBhYV9nX2RlYnVnOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBhYV9nX2RlYnVnLCBhYWJvb2wsIFNfSVJVU1IgfCBTX0lXVVNSKTsKKworLyogQXVkaXQgbW9kZSAqLworZW51bSBhdWRpdF9tb2RlIGFhX2dfYXVkaXQ7Cittb2R1bGVfcGFyYW1fY2FsbChhdWRpdCwgcGFyYW1fc2V0X2F1ZGl0LCBwYXJhbV9nZXRfYXVkaXQsCisJCSAgJmFhX2dfYXVkaXQsIFNfSVJVU1IgfCBTX0lXVVNSKTsKKworLyogRGV0ZXJtaW5lcyBpZiBhdWRpdCBoZWFkZXIgaXMgaW5jbHVkZWQgaW4gYXVkaXRlZCBtZXNzYWdlcy4gIFRoaXMKKyAqIHByb3ZpZGVzIG1vcmUgY29udGV4dCBpZiB0aGUgYXVkaXQgZGFlbW9uIGlzIG5vdCBydW5uaW5nCisgKi8KK2ludCBhYV9nX2F1ZGl0X2hlYWRlciA9IDE7Cittb2R1bGVfcGFyYW1fbmFtZWQoYXVkaXRfaGVhZGVyLCBhYV9nX2F1ZGl0X2hlYWRlciwgYWFib29sLAorCQkgICBTX0lSVVNSIHwgU19JV1VTUik7CisKKy8qIGxvY2sgb3V0IGxvYWRpbmcvcmVtb3ZhbCBvZiBwb2xpY3kKKyAqIFRPRE86IGFkZCBpbiBhdCBib290IGxvYWRpbmcgb2YgcG9saWN5LCB3aGljaCBpcyB0aGUgb25seSB3YXkgdG8KKyAqICAgICAgIGxvYWQgcG9saWN5LCBpZiBsb2NrX3BvbGljeSBpcyBzZXQKKyAqLworaW50IGFhX2dfbG9ja19wb2xpY3k7Cittb2R1bGVfcGFyYW1fbmFtZWQobG9ja19wb2xpY3ksIGFhX2dfbG9ja19wb2xpY3ksIGFhbG9ja3BvbGljeSwKKwkJICAgU19JUlVTUiB8IFNfSVdVU1IpOworCisvKiBTeXNjYWxsIGxvZ2dpbmcgbW9kZSAqLworaW50IGFhX2dfbG9nc3lzY2FsbDsKK21vZHVsZV9wYXJhbV9uYW1lZChsb2dzeXNjYWxsLCBhYV9nX2xvZ3N5c2NhbGwsIGFhYm9vbCwgU19JUlVTUiB8IFNfSVdVU1IpOworCisvKiBNYXhpbXVtIHBhdGhuYW1lIGxlbmd0aCBiZWZvcmUgYWNjZXNzZXMgd2lsbCBzdGFydCBnZXR0aW5nIHJlamVjdGVkICovCit1bnNpZ25lZCBpbnQgYWFfZ19wYXRoX21heCA9IDIgKiBQQVRIX01BWDsKK21vZHVsZV9wYXJhbV9uYW1lZChwYXRoX21heCwgYWFfZ19wYXRoX21heCwgYWF1aW50LCBTX0lSVVNSIHwgU19JV1VTUik7CisKKy8qIERldGVybWluZXMgaG93IHBhcmFub2lkIGxvYWRpbmcgb2YgcG9saWN5IGlzIGFuZCBob3cgbXVjaCB2ZXJpZmljYXRpb24KKyAqIG9uIHRoZSBsb2FkZWQgcG9saWN5IGlzIGRvbmUuCisgKi8KK2ludCBhYV9nX3BhcmFub2lkX2xvYWQgPSAxOworbW9kdWxlX3BhcmFtX25hbWVkKHBhcmFub2lkX2xvYWQsIGFhX2dfcGFyYW5vaWRfbG9hZCwgYWFib29sLAorCQkgICBTX0lSVVNSIHwgU19JV1VTUik7CisKKy8qIEJvb3QgdGltZSBkaXNhYmxlIGZsYWcgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXBwYXJtb3JfZW5hYmxlZCA9IENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9CT09UUEFSQU1fVkFMVUU7Cittb2R1bGVfcGFyYW1fbmFtZWQoZW5hYmxlZCwgYXBwYXJtb3JfZW5hYmxlZCwgYWFib29sLCBTX0lSVVNSKTsKKworc3RhdGljIGludCBfX2luaXQgYXBwYXJtb3JfZW5hYmxlZF9zZXR1cChjaGFyICpzdHIpCit7CisJdW5zaWduZWQgbG9uZyBlbmFibGVkOworCWludCBlcnJvciA9IHN0cmljdF9zdHJ0b3VsKHN0ciwgMCwgJmVuYWJsZWQpOworCWlmICghZXJyb3IpCisJCWFwcGFybW9yX2VuYWJsZWQgPSBlbmFibGVkID8gMSA6IDA7CisJcmV0dXJuIDE7Cit9CisKK19fc2V0dXAoImFwcGFybW9yPSIsIGFwcGFybW9yX2VuYWJsZWRfc2V0dXApOworCisvKiBzZXQgZ2xvYmFsIGZsYWcgdHVybmluZyBvZmYgdGhlIGFiaWxpdHkgdG8gbG9hZCBwb2xpY3kgKi8KK3N0YXRpYyBpbnQgcGFyYW1fc2V0X2FhbG9ja3BvbGljeShjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCWlmICghY2FwYWJsZShDQVBfTUFDX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwlpZiAoYWFfZ19sb2NrX3BvbGljeSkKKwkJcmV0dXJuIC1FQUNDRVM7CisJcmV0dXJuIHBhcmFtX3NldF9ib29sKHZhbCwga3ApOworfQorCitzdGF0aWMgaW50IHBhcmFtX2dldF9hYWxvY2twb2xpY3koY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlpZiAoIWNhcGFibGUoQ0FQX01BQ19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisJcmV0dXJuIHBhcmFtX2dldF9ib29sKGJ1ZmZlciwga3ApOworfQorCitzdGF0aWMgaW50IHBhcmFtX3NldF9hYWJvb2woY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlpZiAoIWNhcGFibGUoQ0FQX01BQ19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisJcmV0dXJuIHBhcmFtX3NldF9ib29sKHZhbCwga3ApOworfQorCitzdGF0aWMgaW50IHBhcmFtX2dldF9hYWJvb2woY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlpZiAoIWNhcGFibGUoQ0FQX01BQ19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisJcmV0dXJuIHBhcmFtX2dldF9ib29sKGJ1ZmZlciwga3ApOworfQorCitzdGF0aWMgaW50IHBhcmFtX3NldF9hYXVpbnQoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlpZiAoIWNhcGFibGUoQ0FQX01BQ19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisJcmV0dXJuIHBhcmFtX3NldF91aW50KHZhbCwga3ApOworfQorCitzdGF0aWMgaW50IHBhcmFtX2dldF9hYXVpbnQoY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlpZiAoIWNhcGFibGUoQ0FQX01BQ19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisJcmV0dXJuIHBhcmFtX2dldF91aW50KGJ1ZmZlciwga3ApOworfQorCitzdGF0aWMgaW50IHBhcmFtX2dldF9hdWRpdChjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCWlmICghY2FwYWJsZShDQVBfTUFDX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmICghYXBwYXJtb3JfZW5hYmxlZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gc3ByaW50ZihidWZmZXIsICIlcyIsIGF1ZGl0X21vZGVfbmFtZXNbYWFfZ19hdWRpdF0pOworfQorCitzdGF0aWMgaW50IHBhcmFtX3NldF9hdWRpdChjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCWludCBpOworCWlmICghY2FwYWJsZShDQVBfTUFDX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmICghYXBwYXJtb3JfZW5hYmxlZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXZhbCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVVESVRfTUFYX0lOREVYOyBpKyspIHsKKwkJaWYgKHN0cmNtcCh2YWwsIGF1ZGl0X21vZGVfbmFtZXNbaV0pID09IDApIHsKKwkJCWFhX2dfYXVkaXQgPSBpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBwYXJhbV9nZXRfbW9kZShjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCWlmICghY2FwYWJsZShDQVBfTUFDX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmICghYXBwYXJtb3JfZW5hYmxlZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gc3ByaW50ZihidWZmZXIsICIlcyIsIHByb2ZpbGVfbW9kZV9uYW1lc1thYV9nX3Byb2ZpbGVfbW9kZV0pOworfQorCitzdGF0aWMgaW50IHBhcmFtX3NldF9tb2RlKGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCit7CisJaW50IGk7CisJaWYgKCFjYXBhYmxlKENBUF9NQUNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCisJaWYgKCFhcHBhcm1vcl9lbmFibGVkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghdmFsKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IGkgPCBBUFBBUk1PUl9OQU1FU19NQVhfSU5ERVg7IGkrKykgeworCQlpZiAoc3RyY21wKHZhbCwgcHJvZmlsZV9tb2RlX25hbWVzW2ldKSA9PSAwKSB7CisJCQlhYV9nX3Byb2ZpbGVfbW9kZSA9IGk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCisvKgorICogQXBwQXJtb3IgaW5pdCBmdW5jdGlvbnMKKyAqLworCisvKioKKyAqIHNldF9pbml0X2N4dCAtIHNldCBhIHRhc2sgY29udGV4dCBhbmQgcHJvZmlsZSBvbiB0aGUgZmlyc3QgdGFzay4KKyAqCisgKiBUT0RPOiBhbGxvdyBzZXR0aW5nIGFuIGFsdGVybmF0ZSBwcm9maWxlIHRoYW4gdW5jb25maW5lZAorICovCitzdGF0aWMgaW50IF9faW5pdCBzZXRfaW5pdF9jeHQodm9pZCkKK3sKKwlzdHJ1Y3QgY3JlZCAqY3JlZCA9IChzdHJ1Y3QgY3JlZCAqKWN1cnJlbnQtPnJlYWxfY3JlZDsKKwlzdHJ1Y3QgYWFfdGFza19jeHQgKmN4dDsKKworCWN4dCA9IGFhX2FsbG9jX3Rhc2tfY29udGV4dChHRlBfS0VSTkVMKTsKKwlpZiAoIWN4dCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljeHQtPnByb2ZpbGUgPSBhYV9nZXRfcHJvZmlsZShyb290X25zLT51bmNvbmZpbmVkKTsKKwljcmVkLT5zZWN1cml0eSA9IGN4dDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBhcHBhcm1vcl9pbml0KHZvaWQpCit7CisJaW50IGVycm9yOworCisJaWYgKCFhcHBhcm1vcl9lbmFibGVkIHx8ICFzZWN1cml0eV9tb2R1bGVfZW5hYmxlKCZhcHBhcm1vcl9vcHMpKSB7CisJCWFhX2luZm9fbWVzc2FnZSgiQXBwQXJtb3IgZGlzYWJsZWQgYnkgYm9vdCB0aW1lIHBhcmFtZXRlciIpOworCQlhcHBhcm1vcl9lbmFibGVkID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJZXJyb3IgPSBhYV9hbGxvY19yb290X25zKCk7CisJaWYgKGVycm9yKSB7CisJCUFBX0VSUk9SKCJVbmFibGUgdG8gYWxsb2NhdGUgZGVmYXVsdCBwcm9maWxlIG5hbWVzcGFjZVxuIik7CisJCWdvdG8gYWxsb2Nfb3V0OworCX0KKworCWVycm9yID0gc2V0X2luaXRfY3h0KCk7CisJaWYgKGVycm9yKSB7CisJCUFBX0VSUk9SKCJGYWlsZWQgdG8gc2V0IGNvbnRleHQgb24gaW5pdCB0YXNrXG4iKTsKKwkJZ290byByZWdpc3Rlcl9zZWN1cml0eV9vdXQ7CisJfQorCisJZXJyb3IgPSByZWdpc3Rlcl9zZWN1cml0eSgmYXBwYXJtb3Jfb3BzKTsKKwlpZiAoZXJyb3IpIHsKKwkJQUFfRVJST1IoIlVuYWJsZSB0byByZWdpc3RlciBBcHBBcm1vclxuIik7CisJCWdvdG8gcmVnaXN0ZXJfc2VjdXJpdHlfb3V0OworCX0KKworCS8qIFJlcG9ydCB0aGF0IEFwcEFybW9yIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCAqLworCWFwcGFybW9yX2luaXRpYWxpemVkID0gMTsKKwlpZiAoYWFfZ19wcm9maWxlX21vZGUgPT0gQVBQQVJNT1JfQ09NUExBSU4pCisJCWFhX2luZm9fbWVzc2FnZSgiQXBwQXJtb3IgaW5pdGlhbGl6ZWQ6IGNvbXBsYWluIG1vZGUgZW5hYmxlZCIpOworCWVsc2UgaWYgKGFhX2dfcHJvZmlsZV9tb2RlID09IEFQUEFSTU9SX0tJTEwpCisJCWFhX2luZm9fbWVzc2FnZSgiQXBwQXJtb3IgaW5pdGlhbGl6ZWQ6IGtpbGwgbW9kZSBlbmFibGVkIik7CisJZWxzZQorCQlhYV9pbmZvX21lc3NhZ2UoIkFwcEFybW9yIGluaXRpYWxpemVkIik7CisKKwlyZXR1cm4gZXJyb3I7CisKK3JlZ2lzdGVyX3NlY3VyaXR5X291dDoKKwlhYV9mcmVlX3Jvb3RfbnMoKTsKKworYWxsb2Nfb3V0OgorCWFhX2Rlc3Ryb3lfYWFmcygpOworCisJYXBwYXJtb3JfZW5hYmxlZCA9IDA7CisJcmV0dXJuIGVycm9yOworCit9CisKK3NlY3VyaXR5X2luaXRjYWxsKGFwcGFybW9yX2luaXQpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvYXBwYXJtb3IvbWF0Y2guYyBiL3NlY3VyaXR5L2FwcGFybW9yL21hdGNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNiNGRjMQotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2FwcGFybW9yL21hdGNoLmMKQEAgLTAsMCArMSwzNTMgQEAKKy8qCisgKiBBcHBBcm1vciBzZWN1cml0eSBtb2R1bGUKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgQXBwQXJtb3IgZGZhIGJhc2VkIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBlbmdpbmUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOCBOb3ZlbGwvU1VTRQorICogQ29weXJpZ2h0IDIwMDktMjAxMCBDYW5vbmljYWwgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorCisjaW5jbHVkZSAiaW5jbHVkZS9hcHBhcm1vci5oIgorI2luY2x1ZGUgImluY2x1ZGUvbWF0Y2guaCIKKworLyoqCisgKiB1bnBhY2tfdGFibGUgLSB1bnBhY2sgYSBkZmEgdGFibGUgKG9uZSBvZiBhY2NlcHQsIGRlZmF1bHQsIGJhc2UsIG5leHQgY2hlY2spCisgKiBAYmxvYjogZGF0YSB0byB1bnBhY2sgKE5PVCBOVUxMKQorICogQGJzaXplOiBzaXplIG9mIGJsb2IKKyAqCisgKiBSZXR1cm5zOiBwb2ludGVyIHRvIHRhYmxlIGVsc2UgTlVMTCBvbiBmYWlsdXJlCisgKgorICogTk9URTogbXVzdCBiZSBmcmVlZCBieSBrdmZyZWUgKG5vdCBrbWFsbG9jKQorICovCitzdGF0aWMgc3RydWN0IHRhYmxlX2hlYWRlciAqdW5wYWNrX3RhYmxlKGNoYXIgKmJsb2IsIHNpemVfdCBic2l6ZSkKK3sKKwlzdHJ1Y3QgdGFibGVfaGVhZGVyICp0YWJsZSA9IE5VTEw7CisJc3RydWN0IHRhYmxlX2hlYWRlciB0aDsKKwlzaXplX3QgdHNpemU7CisKKwlpZiAoYnNpemUgPCBzaXplb2Yoc3RydWN0IHRhYmxlX2hlYWRlcikpCisJCWdvdG8gb3V0OworCisJLyogbG9hZGVkIHRkX2lkJ3Mgc3RhcnQgYXQgMSwgc3VidHJhY3QgMSBub3cgdG8gYXZvaWQgZG9pbmcKKwkgKiBpdCBldmVyeSB0aW1lIHdlIHVzZSB0ZF9pZCBhcyBhbiBpbmRleAorCSAqLworCXRoLnRkX2lkID0gYmUxNl90b19jcHUoKih1MTYgKikgKGJsb2IpKSAtIDE7CisJdGgudGRfZmxhZ3MgPSBiZTE2X3RvX2NwdSgqKHUxNiAqKSAoYmxvYiArIDIpKTsKKwl0aC50ZF9sb2xlbiA9IGJlMzJfdG9fY3B1KCoodTMyICopIChibG9iICsgOCkpOworCWJsb2IgKz0gc2l6ZW9mKHN0cnVjdCB0YWJsZV9oZWFkZXIpOworCisJaWYgKCEodGgudGRfZmxhZ3MgPT0gWVlURF9EQVRBMTYgfHwgdGgudGRfZmxhZ3MgPT0gWVlURF9EQVRBMzIgfHwKKwkgICAgICB0aC50ZF9mbGFncyA9PSBZWVREX0RBVEE4KSkKKwkJZ290byBvdXQ7CisKKwl0c2l6ZSA9IHRhYmxlX3NpemUodGgudGRfbG9sZW4sIHRoLnRkX2ZsYWdzKTsKKwlpZiAoYnNpemUgPCB0c2l6ZSkKKwkJZ290byBvdXQ7CisKKwl0YWJsZSA9IGt2bWFsbG9jKHRzaXplKTsKKwlpZiAodGFibGUpIHsKKwkJKnRhYmxlID0gdGg7CisJCWlmICh0aC50ZF9mbGFncyA9PSBZWVREX0RBVEE4KQorCQkJVU5QQUNLX0FSUkFZKHRhYmxlLT50ZF9kYXRhLCBibG9iLCB0aC50ZF9sb2xlbiwKKwkJCQkgICAgIHU4LCBieXRlX3RvX2J5dGUpOworCQllbHNlIGlmICh0aC50ZF9mbGFncyA9PSBZWVREX0RBVEExNikKKwkJCVVOUEFDS19BUlJBWSh0YWJsZS0+dGRfZGF0YSwgYmxvYiwgdGgudGRfbG9sZW4sCisJCQkJICAgICB1MTYsIGJlMTZfdG9fY3B1KTsKKwkJZWxzZSBpZiAodGgudGRfZmxhZ3MgPT0gWVlURF9EQVRBMzIpCisJCQlVTlBBQ0tfQVJSQVkodGFibGUtPnRkX2RhdGEsIGJsb2IsIHRoLnRkX2xvbGVuLAorCQkJCSAgICAgdTMyLCBiZTMyX3RvX2NwdSk7CisJCWVsc2UKKwkJCWdvdG8gZmFpbDsKKwl9CisKK291dDoKKwkvKiBpZiB0YWJsZSB3YXMgdm1hbGxvY2VkIG1ha2Ugc3VyZSB0aGUgcGFnZSB0YWJsZXMgYXJlIHN5bmNlZAorCSAqIGJlZm9yZSBpdCBpcyB1c2VkLCBhcyBpdCBnb2VzIGxpdmUgdG8gYWxsIGNwdXMuCisJICovCisJaWYgKGlzX3ZtYWxsb2NfYWRkcih0YWJsZSkpCisJCXZtX3VubWFwX2FsaWFzZXMoKTsKKwlyZXR1cm4gdGFibGU7CitmYWlsOgorCWt2ZnJlZSh0YWJsZSk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogdmVyaWZ5X2RmYSAtIHZlcmlmeSB0aGF0IHRyYW5zaXRpb25zIGFuZCBzdGF0ZXMgaW4gdGhlIHRhYmxlcyBhcmUgaW4gYm91bmRzLgorICogQGRmYTogZGZhIHRvIHRlc3QgIChOT1QgTlVMTCkKKyAqIEBmbGFnczogZmxhZ3MgY29udHJvbGxpbmcgd2hhdCB0eXBlIG9mIGFjY2VwdCB0YWJsZSBhcmUgYWNjZXB0YWJsZQorICoKKyAqIEFzc3VtZXMgZGZhIGhhcyBnb25lIHRocm91Z2ggdGhlIGZpcnN0IHBhc3MgdmVyaWZpY2F0aW9uIGRvbmUgYnkgdW5wYWNraW5nCisgKiBOT1RFOiB0aGlzIGRvZXMgbm90IHZhbGlkIGFjY2VwdCB0YWJsZSB2YWx1ZXMKKyAqCisgKiBSZXR1cm5zOiAlMCBlbHNlIGVycm9yIGNvZGUgb24gZmFpbHVyZSB0byB2ZXJpZnkKKyAqLworc3RhdGljIGludCB2ZXJpZnlfZGZhKHN0cnVjdCBhYV9kZmEgKmRmYSwgaW50IGZsYWdzKQoreworCXNpemVfdCBpLCBzdGF0ZV9jb3VudCwgdHJhbnNfY291bnQ7CisJaW50IGVycm9yID0gLUVQUk9UTzsKKworCS8qIGNoZWNrIHRoYXQgcmVxdWlyZWQgdGFibGVzIGV4aXN0ICovCisJaWYgKCEoZGZhLT50YWJsZXNbWVlURF9JRF9ERUZdICYmCisJICAgICAgZGZhLT50YWJsZXNbWVlURF9JRF9CQVNFXSAmJgorCSAgICAgIGRmYS0+dGFibGVzW1lZVERfSURfTlhUXSAmJiBkZmEtPnRhYmxlc1tZWVREX0lEX0NIS10pKQorCQlnb3RvIG91dDsKKworCS8qIGFjY2VwdC5zaXplID09IGRlZmF1bHQuc2l6ZSA9PSBiYXNlLnNpemUgKi8KKwlzdGF0ZV9jb3VudCA9IGRmYS0+dGFibGVzW1lZVERfSURfQkFTRV0tPnRkX2xvbGVuOworCWlmIChBQ0NFUFQxX0ZMQUdTKGZsYWdzKSkgeworCQlpZiAoIWRmYS0+dGFibGVzW1lZVERfSURfQUNDRVBUXSkKKwkJCWdvdG8gb3V0OworCQlpZiAoc3RhdGVfY291bnQgIT0gZGZhLT50YWJsZXNbWVlURF9JRF9BQ0NFUFRdLT50ZF9sb2xlbikKKwkJCWdvdG8gb3V0OworCX0KKwlpZiAoQUNDRVBUMl9GTEFHUyhmbGFncykpIHsKKwkJaWYgKCFkZmEtPnRhYmxlc1tZWVREX0lEX0FDQ0VQVDJdKQorCQkJZ290byBvdXQ7CisJCWlmIChzdGF0ZV9jb3VudCAhPSBkZmEtPnRhYmxlc1tZWVREX0lEX0FDQ0VQVDJdLT50ZF9sb2xlbikKKwkJCWdvdG8gb3V0OworCX0KKwlpZiAoc3RhdGVfY291bnQgIT0gZGZhLT50YWJsZXNbWVlURF9JRF9ERUZdLT50ZF9sb2xlbikKKwkJZ290byBvdXQ7CisKKwkvKiBuZXh0LnNpemUgPT0gY2hrLnNpemUgKi8KKwl0cmFuc19jb3VudCA9IGRmYS0+dGFibGVzW1lZVERfSURfTlhUXS0+dGRfbG9sZW47CisJaWYgKHRyYW5zX2NvdW50ICE9IGRmYS0+dGFibGVzW1lZVERfSURfQ0hLXS0+dGRfbG9sZW4pCisJCWdvdG8gb3V0OworCisJLyogaWYgZXF1aXZhbGVuY2UgY2xhc3NlcyB0aGVuIGl0cyB0YWJsZSBzaXplIG11c3QgYmUgMjU2ICovCisJaWYgKGRmYS0+dGFibGVzW1lZVERfSURfRUNdICYmCisJICAgIGRmYS0+dGFibGVzW1lZVERfSURfRUNdLT50ZF9sb2xlbiAhPSAyNTYpCisJCWdvdG8gb3V0OworCisJaWYgKGZsYWdzICYgREZBX0ZMQUdfVkVSSUZZX1NUQVRFUykgeworCQlmb3IgKGkgPSAwOyBpIDwgc3RhdGVfY291bnQ7IGkrKykgeworCQkJaWYgKERFRkFVTFRfVEFCTEUoZGZhKVtpXSA+PSBzdGF0ZV9jb3VudCkKKwkJCQlnb3RvIG91dDsKKwkJCS8qIFRPRE86IGRvIGNoZWNrIHRoYXQgREVGIHN0YXRlIHJlY3Vyc2lvbiB0ZXJtaW5hdGVzICovCisJCQlpZiAoQkFTRV9UQUJMRShkZmEpW2ldICsgMjU1ID49IHRyYW5zX2NvdW50KSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJBcHBBcm1vciBERkEgbmV4dC9jaGVjayB1cHBlciAiCisJCQkJICAgICAgICJib3VuZHMgZXJyb3JcbiIpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IHRyYW5zX2NvdW50OyBpKyspIHsKKwkJCWlmIChORVhUX1RBQkxFKGRmYSlbaV0gPj0gc3RhdGVfY291bnQpCisJCQkJZ290byBvdXQ7CisJCQlpZiAoQ0hFQ0tfVEFCTEUoZGZhKVtpXSA+PSBzdGF0ZV9jb3VudCkKKwkJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWVycm9yID0gMDsKK291dDoKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogZGZhX2ZyZWUgLSBmcmVlIGEgZGZhIGFsbG9jYXRlZCBieSBhYV9kZmFfdW5wYWNrCisgKiBAZGZhOiB0aGUgZGZhIHRvIGZyZWUgIChNQVlCRSBOVUxMKQorICoKKyAqIFJlcXVpcmVzOiByZWZlcmVuY2UgY291bnQgdG8gZGZhID09IDAKKyAqLworc3RhdGljIHZvaWQgZGZhX2ZyZWUoc3RydWN0IGFhX2RmYSAqZGZhKQoreworCWlmIChkZmEpIHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGZhLT50YWJsZXMpOyBpKyspIHsKKwkJCWt2ZnJlZShkZmEtPnRhYmxlc1tpXSk7CisJCQlkZmEtPnRhYmxlc1tpXSA9IE5VTEw7CisJCX0KKwkJa2ZyZWUoZGZhKTsKKwl9Cit9CisKKy8qKgorICogYWFfZGZhX2ZyZWVfa3JlZiAtIGZyZWUgYWFfZGZhIGJ5IGtyZWYgKGNhbGxlZCBieSBhYV9wdXRfZGZhKQorICogQGtyOiBrcmVmIGNhbGxiYWNrIGZvciBmcmVlaW5nIG9mIGEgZGZhICAoTk9UIE5VTEwpCisgKi8KK3ZvaWQgYWFfZGZhX2ZyZWVfa3JlZihzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgYWFfZGZhICpkZmEgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGFhX2RmYSwgY291bnQpOworCWRmYV9mcmVlKGRmYSk7Cit9CisKKy8qKgorICogYWFfZGZhX3VucGFjayAtIHVucGFjayB0aGUgYmluYXJ5IHRhYmxlcyBvZiBhIHNlcmlhbGl6ZWQgZGZhCisgKiBAYmxvYjogYWxpZ25lZCBzZXJpYWxpemVkIHN0cmVhbSBvZiBkYXRhIHRvIHVucGFjayAgKE5PVCBOVUxMKQorICogQHNpemU6IHNpemUgb2YgZGF0YSB0byB1bnBhY2sKKyAqIEBmbGFnczogZmxhZ3MgY29udHJvbGxpbmcgd2hhdCB0eXBlIG9mIGFjY2VwdCB0YWJsZXMgYXJlIGFjY2VwdGFibGUKKyAqCisgKiBVbnBhY2sgYSBkZmEgdGhhdCBoYXMgYmVlbiBzZXJpYWxpemVkLiAgVG8gZmluZCBpbmZvcm1hdGlvbiBvbiB0aGUgZGZhCisgKiBmb3JtYXQgbG9vayBpbiBEb2N1bWVudGF0aW9uL2FwcGFybW9yLnR4dAorICogQXNzdW1lcyB0aGUgZGZhIEBibG9iIHN0cmVhbSBoYXMgYmVlbiBhbGlnbmVkIG9uIGEgOCBieXRlIGJvdW5kcnkKKyAqCisgKiBSZXR1cm5zOiBhbiB1bnBhY2tlZCBkZmEgcmVhZHkgZm9yIG1hdGNoaW5nIG9yIEVSUl9QVFIgb24gZmFpbHVyZQorICovCitzdHJ1Y3QgYWFfZGZhICphYV9kZmFfdW5wYWNrKHZvaWQgKmJsb2IsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCit7CisJaW50IGhzaXplOworCWludCBlcnJvciA9IC1FTk9NRU07CisJY2hhciAqZGF0YSA9IGJsb2I7CisJc3RydWN0IHRhYmxlX2hlYWRlciAqdGFibGUgPSBOVUxMOworCXN0cnVjdCBhYV9kZmEgKmRmYSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhYV9kZmEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRmYSkKKwkJZ290byBmYWlsOworCisJa3JlZl9pbml0KCZkZmEtPmNvdW50KTsKKworCWVycm9yID0gLUVQUk9UTzsKKworCS8qIGdldCBkZmEgdGFibGUgc2V0IGhlYWRlciAqLworCWlmIChzaXplIDwgc2l6ZW9mKHN0cnVjdCB0YWJsZV9zZXRfaGVhZGVyKSkKKwkJZ290byBmYWlsOworCisJaWYgKG50b2hsKCoodTMyICopIGRhdGEpICE9IFlZVEhfTUFHSUMpCisJCWdvdG8gZmFpbDsKKworCWhzaXplID0gbnRvaGwoKih1MzIgKikgKGRhdGEgKyA0KSk7CisJaWYgKHNpemUgPCBoc2l6ZSkKKwkJZ290byBmYWlsOworCisJZGZhLT5mbGFncyA9IG50b2hzKCoodTE2ICopIChkYXRhICsgMTIpKTsKKwlkYXRhICs9IGhzaXplOworCXNpemUgLT0gaHNpemU7CisKKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJdGFibGUgPSB1bnBhY2tfdGFibGUoZGF0YSwgc2l6ZSk7CisJCWlmICghdGFibGUpCisJCQlnb3RvIGZhaWw7CisKKwkJc3dpdGNoICh0YWJsZS0+dGRfaWQpIHsKKwkJY2FzZSBZWVREX0lEX0FDQ0VQVDoKKwkJCWlmICghKHRhYmxlLT50ZF9mbGFncyAmIEFDQ0VQVDFfRkxBR1MoZmxhZ3MpKSkKKwkJCQlnb3RvIGZhaWw7CisJCQlicmVhazsKKwkJY2FzZSBZWVREX0lEX0FDQ0VQVDI6CisJCQlpZiAoISh0YWJsZS0+dGRfZmxhZ3MgJiBBQ0NFUFQyX0ZMQUdTKGZsYWdzKSkpCisJCQkJZ290byBmYWlsOworCQkJYnJlYWs7CisJCWNhc2UgWVlURF9JRF9CQVNFOgorCQkJaWYgKHRhYmxlLT50ZF9mbGFncyAhPSBZWVREX0RBVEEzMikKKwkJCQlnb3RvIGZhaWw7CisJCQlicmVhazsKKwkJY2FzZSBZWVREX0lEX0RFRjoKKwkJY2FzZSBZWVREX0lEX05YVDoKKwkJY2FzZSBZWVREX0lEX0NISzoKKwkJCWlmICh0YWJsZS0+dGRfZmxhZ3MgIT0gWVlURF9EQVRBMTYpCisJCQkJZ290byBmYWlsOworCQkJYnJlYWs7CisJCWNhc2UgWVlURF9JRF9FQzoKKwkJCWlmICh0YWJsZS0+dGRfZmxhZ3MgIT0gWVlURF9EQVRBOCkKKwkJCQlnb3RvIGZhaWw7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQkvKiBjaGVjayBmb3IgZHVwbGljYXRlIHRhYmxlIGVudHJ5ICovCisJCWlmIChkZmEtPnRhYmxlc1t0YWJsZS0+dGRfaWRdKQorCQkJZ290byBmYWlsOworCQlkZmEtPnRhYmxlc1t0YWJsZS0+dGRfaWRdID0gdGFibGU7CisJCWRhdGEgKz0gdGFibGVfc2l6ZSh0YWJsZS0+dGRfbG9sZW4sIHRhYmxlLT50ZF9mbGFncyk7CisJCXNpemUgLT0gdGFibGVfc2l6ZSh0YWJsZS0+dGRfbG9sZW4sIHRhYmxlLT50ZF9mbGFncyk7CisJCXRhYmxlID0gTlVMTDsKKwl9CisKKwllcnJvciA9IHZlcmlmeV9kZmEoZGZhLCBmbGFncyk7CisJaWYgKGVycm9yKQorCQlnb3RvIGZhaWw7CisKKwlyZXR1cm4gZGZhOworCitmYWlsOgorCWt2ZnJlZSh0YWJsZSk7CisJZGZhX2ZyZWUoZGZhKTsKKwlyZXR1cm4gRVJSX1BUUihlcnJvcik7Cit9CisKKy8qKgorICogYWFfZGZhX21hdGNoX2xlbiAtIHRyYXZlcnNlIEBkZmEgdG8gZmluZCBzdGF0ZSBAc3RyIHN0b3BzIGF0CisgKiBAZGZhOiB0aGUgZGZhIHRvIG1hdGNoIEBzdHIgYWdhaW5zdCAgKE5PVCBOVUxMKQorICogQHN0YXJ0OiB0aGUgc3RhdGUgb2YgdGhlIGRmYSB0byBzdGFydCBtYXRjaGluZyBpbgorICogQHN0cjogdGhlIHN0cmluZyBvZiBieXRlcyB0byBtYXRjaCBhZ2FpbnN0IHRoZSBkZmEgIChOT1QgTlVMTCkKKyAqIEBsZW46IGxlbmd0aCBvZiB0aGUgc3RyaW5nIG9mIGJ5dGVzIHRvIG1hdGNoCisgKgorICogYWFfZGZhX21hdGNoX2xlbiB3aWxsIG1hdGNoIEBzdHIgYWdhaW5zdCB0aGUgZGZhIGFuZCByZXR1cm4gdGhlIHN0YXRlIGl0CisgKiBmaW5pc2hlZCBtYXRjaGluZyBpbi4gVGhlIGZpbmFsIHN0YXRlIGNhbiBiZSB1c2VkIHRvIGxvb2sgdXAgdGhlIGFjY2VwdGluZworICogbGFiZWwsIG9yIGFzIHRoZSBzdGFydCBzdGF0ZSBvZiBhIGNvbnRpbnVpbmcgbWF0Y2guCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGhhcHBpbHkgbWF0Y2ggYWdhaW4gdGhlIDAgYnl0ZSBhbmQgb25seSBmaW5pc2hlcworICogd2hlbiBAbGVuIGlucHV0IGlzIGNvbnN1bWVkLgorICoKKyAqIFJldHVybnM6IGZpbmFsIHN0YXRlIHJlYWNoZWQgYWZ0ZXIgaW5wdXQgaXMgY29uc3VtZWQKKyAqLwordW5zaWduZWQgaW50IGFhX2RmYV9tYXRjaF9sZW4oc3RydWN0IGFhX2RmYSAqZGZhLCB1bnNpZ25lZCBpbnQgc3RhcnQsCisJCQkgICAgICBjb25zdCBjaGFyICpzdHIsIGludCBsZW4pCit7CisJdTE2ICpkZWYgPSBERUZBVUxUX1RBQkxFKGRmYSk7CisJdTMyICpiYXNlID0gQkFTRV9UQUJMRShkZmEpOworCXUxNiAqbmV4dCA9IE5FWFRfVEFCTEUoZGZhKTsKKwl1MTYgKmNoZWNrID0gQ0hFQ0tfVEFCTEUoZGZhKTsKKwl1bnNpZ25lZCBpbnQgc3RhdGUgPSBzdGFydCwgcG9zOworCisJaWYgKHN0YXRlID09IDApCisJCXJldHVybiAwOworCisJLyogY3VycmVudCBzdGF0ZSBpcyA8c3RhdGU+LCBtYXRjaGluZyBjaGFyYWN0ZXIgKnN0ciAqLworCWlmIChkZmEtPnRhYmxlc1tZWVREX0lEX0VDXSkgeworCQkvKiBFcXVpdmFsZW5jZSBjbGFzcyB0YWJsZSBkZWZpbmVkICovCisJCXU4ICplcXVpdiA9IEVRVUlWX1RBQkxFKGRmYSk7CisJCS8qIGRlZmF1bHQgaXMgZGlyZWN0IHRvIG5leHQgc3RhdGUgKi8KKwkJZm9yICg7IGxlbjsgbGVuLS0pIHsKKwkJCXBvcyA9IGJhc2Vbc3RhdGVdICsgZXF1aXZbKHU4KSAqc3RyKytdOworCQkJaWYgKGNoZWNrW3Bvc10gPT0gc3RhdGUpCisJCQkJc3RhdGUgPSBuZXh0W3Bvc107CisJCQllbHNlCisJCQkJc3RhdGUgPSBkZWZbc3RhdGVdOworCQl9CisJfSBlbHNlIHsKKwkJLyogZGVmYXVsdCBpcyBkaXJlY3QgdG8gbmV4dCBzdGF0ZSAqLworCQlmb3IgKDsgbGVuOyBsZW4tLSkgeworCQkJcG9zID0gYmFzZVtzdGF0ZV0gKyAodTgpICpzdHIrKzsKKwkJCWlmIChjaGVja1twb3NdID09IHN0YXRlKQorCQkJCXN0YXRlID0gbmV4dFtwb3NdOworCQkJZWxzZQorCQkJCXN0YXRlID0gZGVmW3N0YXRlXTsKKwkJfQorCX0KKworCXJldHVybiBzdGF0ZTsKK30KKworLyoqCisgKiBhYV9kZmFfbmV4dF9zdGF0ZSAtIHRyYXZlcnNlIEBkZmEgdG8gZmluZCBzdGF0ZSBAc3RyIHN0b3BzIGF0CisgKiBAZGZhOiB0aGUgZGZhIHRvIG1hdGNoIEBzdHIgYWdhaW5zdCAgKE5PVCBOVUxMKQorICogQHN0YXJ0OiB0aGUgc3RhdGUgb2YgdGhlIGRmYSB0byBzdGFydCBtYXRjaGluZyBpbgorICogQHN0cjogdGhlIG51bGwgdGVybWluYXRlZCBzdHJpbmcgb2YgYnl0ZXMgdG8gbWF0Y2ggYWdhaW5zdCB0aGUgZGZhIChOT1QgTlVMTCkKKyAqCisgKiBhYV9kZmFfbmV4dF9zdGF0ZSB3aWxsIG1hdGNoIEBzdHIgYWdhaW5zdCB0aGUgZGZhIGFuZCByZXR1cm4gdGhlIHN0YXRlIGl0CisgKiBmaW5pc2hlZCBtYXRjaGluZyBpbi4gVGhlIGZpbmFsIHN0YXRlIGNhbiBiZSB1c2VkIHRvIGxvb2sgdXAgdGhlIGFjY2VwdGluZworICogbGFiZWwsIG9yIGFzIHRoZSBzdGFydCBzdGF0ZSBvZiBhIGNvbnRpbnVpbmcgbWF0Y2guCisgKgorICogUmV0dXJuczogZmluYWwgc3RhdGUgcmVhY2hlZCBhZnRlciBpbnB1dCBpcyBjb25zdW1lZAorICovCit1bnNpZ25lZCBpbnQgYWFfZGZhX21hdGNoKHN0cnVjdCBhYV9kZmEgKmRmYSwgdW5zaWduZWQgaW50IHN0YXJ0LAorCQkJICBjb25zdCBjaGFyICpzdHIpCit7CisJcmV0dXJuIGFhX2RmYV9tYXRjaF9sZW4oZGZhLCBzdGFydCwgc3RyLCBzdHJsZW4oc3RyKSk7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9hcHBhcm1vci9wYXRoLmMgYi9zZWN1cml0eS9hcHBhcm1vci9wYXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZiYWI5NAotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2FwcGFybW9yL3BhdGguYwpAQCAtMCwwICsxLDIzNSBAQAorLyoKKyAqIEFwcEFybW9yIHNlY3VyaXR5IG1vZHVsZQorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBBcHBBcm1vciBmdW5jdGlvbiBmb3IgcGF0aG5hbWVzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDggTm92ZWxsL1NVU0UKKyAqIENvcHlyaWdodCAyMDA5LTIwMTAgQ2Fub25pY2FsIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CisjaW5jbHVkZSA8bGludXgvbW50X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKyNpbmNsdWRlIDxsaW51eC9uc3Byb3h5Lmg+CisjaW5jbHVkZSA8bGludXgvcGF0aC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgorCisjaW5jbHVkZSAiaW5jbHVkZS9hcHBhcm1vci5oIgorI2luY2x1ZGUgImluY2x1ZGUvcGF0aC5oIgorI2luY2x1ZGUgImluY2x1ZGUvcG9saWN5LmgiCisKKworLyogbW9kaWZpZWQgZnJvbSBkY2FjaGUuYyAqLworc3RhdGljIGludCBwcmVwZW5kKGNoYXIgKipidWZmZXIsIGludCBidWZsZW4sIGNvbnN0IGNoYXIgKnN0ciwgaW50IG5hbWVsZW4pCit7CisJYnVmbGVuIC09IG5hbWVsZW47CisJaWYgKGJ1ZmxlbiA8IDApCisJCXJldHVybiAtRU5BTUVUT09MT05HOworCSpidWZmZXIgLT0gbmFtZWxlbjsKKwltZW1jcHkoKmJ1ZmZlciwgc3RyLCBuYW1lbGVuKTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBDSFJPT1RfTlNDT05ORUNUIChQQVRIX0NIUk9PVF9SRUwgfCBQQVRIX0NIUk9PVF9OU0NPTk5FQ1QpCisKKy8qKgorICogZF9uYW1lc3BhY2VfcGF0aCAtIGxvb2t1cCBhIG5hbWUgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gcGF0aAorICogQHBhdGg6IHBhdGggdG8gbG9va3VwICAoTk9UIE5VTEwpCisgKiBAYnVmOiAgYnVmZmVyIHRvIHN0b3JlIHBhdGggdG8gIChOT1QgTlVMTCkKKyAqIEBidWZsZW46IGxlbmd0aCBvZiBAYnVmCisgKiBAbmFtZTogUmV0dXJucyAtIHBvaW50ZXIgZm9yIHN0YXJ0IG9mIHBhdGggbmFtZSB3aXRoIGluIEBidWYgKE5PVCBOVUxMKQorICogQGZsYWdzOiBmbGFncyBjb250cm9sbGluZyBwYXRoIGxvb2t1cAorICoKKyAqIEhhbmRsZSBwYXRoIG5hbWUgbG9va3VwLgorICoKKyAqIFJldHVybnM6ICUwIGVsc2UgZXJyb3IgY29kZSBpZiBwYXRoIGxvb2t1cCBmYWlscworICogICAgICAgICAgV2hlbiBubyBlcnJvciB0aGUgcGF0aCBuYW1lIGlzIHJldHVybmVkIGluIEBuYW1lIHdoaWNoIHBvaW50cyB0bworICogICAgICAgICAgdG8gYSBwb3NpdGlvbiBpbiBAYnVmCisgKi8KK3N0YXRpYyBpbnQgZF9uYW1lc3BhY2VfcGF0aChzdHJ1Y3QgcGF0aCAqcGF0aCwgY2hhciAqYnVmLCBpbnQgYnVmbGVuLAorCQkJICAgIGNoYXIgKipuYW1lLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHBhdGggcm9vdCwgdG1wOworCWNoYXIgKnJlczsKKwlpbnQgZGVsZXRlZCwgY29ubmVjdGVkOworCWludCBlcnJvciA9IDA7CisKKwkvKiBHZXQgdGhlIHJvb3Qgd2Ugd2FudCB0byByZXNvbHZlIHRvbyAqLworCWlmIChmbGFncyAmIFBBVEhfQ0hST09UX1JFTCkgeworCQkvKiByZXNvbHZlIHBhdGhzIHJlbGF0aXZlIHRvIGNocm9vdCAqLworCQlyZWFkX2xvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKKwkJcm9vdCA9IGN1cnJlbnQtPmZzLT5yb290OworCQkvKiByZWxlYXNlZCBiZWxvdyAqLworCQlwYXRoX2dldCgmcm9vdCk7CisJCXJlYWRfdW5sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CisJfSBlbHNlIHsKKwkJLyogcmVzb2x2ZSBwYXRocyByZWxhdGl2ZSB0byBuYW1lc3BhY2UgKi8KKwkJcm9vdC5tbnQgPSBjdXJyZW50LT5uc3Byb3h5LT5tbnRfbnMtPnJvb3Q7CisJCXJvb3QuZGVudHJ5ID0gcm9vdC5tbnQtPm1udF9yb290OworCQkvKiByZWxlYXNlZCBiZWxvdyAqLworCQlwYXRoX2dldCgmcm9vdCk7CisJfQorCisJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJLyogVGhlcmUgaXMgYSByYWNlIHdpbmRvdyBiZXR3ZWVuIHBhdGggbG9va3VwIGhlcmUgYW5kIHRoZQorCSAqIG5lZWQgdG8gc3RyaXAgdGhlICIgKGRlbGV0ZWQpIHN0cmluZyB0aGF0IF9fZF9wYXRoIGFwcGxpZXMKKwkgKiBEZXRlY3QgdGhlIHJhY2UgYW5kIHJlbG9va3VwIHRoZSBwYXRoCisJICoKKwkgKiBUaGUgc3RyaXBwaW5nIG9mIChkZWxldGVkKSBpcyBhIGhhY2sgdGhhdCBjb3VsZCBiZSByZW1vdmVkCisJICogd2l0aCBhbiB1cGRhdGVkIF9fZF9wYXRoCisJICovCisJZG8geworCQl0bXAgPSByb290OworCQlkZWxldGVkID0gZF91bmxpbmtlZChwYXRoLT5kZW50cnkpOworCQlyZXMgPSBfX2RfcGF0aChwYXRoLCAmdG1wLCBidWYsIGJ1Zmxlbik7CisKKwl9IHdoaWxlIChkZWxldGVkICE9IGRfdW5saW5rZWQocGF0aC0+ZGVudHJ5KSk7CisJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKworCSpuYW1lID0gcmVzOworCS8qIGhhbmRsZSBlcnJvciBjb25kaXRpb25zIC0gYW5kIHN0aWxsIGFsbG93IGEgcGFydGlhbCBwYXRoIHRvCisJICogYmUgcmV0dXJuZWQuCisJICovCisJaWYgKElTX0VSUihyZXMpKSB7CisJCWVycm9yID0gUFRSX0VSUihyZXMpOworCQkqbmFtZSA9IGJ1ZjsKKwkJZ290byBvdXQ7CisJfQorCWlmIChkZWxldGVkKSB7CisJCS8qIE9uIHNvbWUgZmlsZXN5c3RlbXMsIG5ld2x5IGFsbG9jYXRlZCBkZW50cmllcyBhcHBlYXIgdG8gdGhlCisJCSAqIHNlY3VyaXR5X3BhdGggaG9va3MgYXMgYSBkZWxldGVkIGRlbnRyeSBleGNlcHQgd2l0aG91dCBhbgorCQkgKiBpbm9kZSBhbGxvY2F0ZWQuCisJCSAqCisJCSAqIFJlbW92ZSB0aGUgYXBwZW5kZWQgZGVsZXRlZCB0ZXh0IGFuZCByZXR1cm4gYXMgc3RyaW5nIGZvcgorCQkgKiBub3JtYWwgbWVkaWF0aW9uLCBvciBhdWRpdGluZy4gIFRoZSAoZGVsZXRlZCkgc3RyaW5nIGlzCisJCSAqIGd1YXJhbnRlZWQgdG8gYmUgYWRkZWQgaW4gdGhpcyBjYXNlLCBzbyBqdXN0IHN0cmlwIGl0LgorCQkgKi8KKwkJYnVmW2J1ZmxlbiAtIDExXSA9IDA7CS8qIC0gKGxlbigiIChkZWxldGVkKSIpICtcMCkgKi8KKworCQlpZiAocGF0aC0+ZGVudHJ5LT5kX2lub2RlICYmICEoZmxhZ3MgJiBQQVRIX01FRElBVEVfREVMRVRFRCkpIHsKKwkJCWVycm9yID0gLUVOT0VOVDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogRGV0ZXJtaW5lIGlmIHRoZSBwYXRoIGlzIGNvbm5lY3RlZCB0byB0aGUgZXhwZWN0ZWQgcm9vdCAqLworCWNvbm5lY3RlZCA9IHRtcC5kZW50cnkgPT0gcm9vdC5kZW50cnkgJiYgdG1wLm1udCA9PSByb290Lm1udDsKKworCS8qIElmIHRoZSBwYXRoIGlzIG5vdCBjb25uZWN0ZWQsCisJICogY2hlY2sgaWYgaXQgaXMgYSBzeXNjdGwgYW5kIGhhbmRsZSBzcGVjaWFsbHkgZWxzZSByZW1vdmUgYW55CisJICogbGVhZGluZyAvIHRoYXQgX19kX3BhdGggbWF5IGhhdmUgcmV0dXJuZWQuCisJICogVW5sZXNzCisJICogICAgIHNwZWNpZmljYWxseSBkaXJlY3RlZCB0byBjb25uZWN0IHRoZSBwYXRoLAorCSAqIE9SCisJICogICAgIGlmIGluIGEgY2hyb290IGFuZCBkb2luZyBjaHJvb3QgcmVsYXRpdmUgcGF0aHMgYW5kIHRoZSBwYXRoCisJICogICAgIHJlc29sdmVzIHRvIHRoZSBuYW1lc3BhY2Ugcm9vdCAod291bGQgYmUgY29ubmVjdGVkIG91dHNpZGUKKwkgKiAgICAgb2YgY2hyb290KSBhbmQgc3BlY2lmaWNhbGx5IGRpcmVjdGVkIHRvIGNvbm5lY3QgcGF0aHMgdG8KKwkgKiAgICAgbmFtZXNwYWNlIHJvb3QuCisJICovCisJaWYgKCFjb25uZWN0ZWQpIHsKKwkJLyogaXMgdGhlIGRpc2Nvbm5lY3QgcGF0aCBhIHN5c2N0bD8gKi8KKwkJaWYgKHRtcC5kZW50cnktPmRfc2ItPnNfbWFnaWMgPT0gUFJPQ19TVVBFUl9NQUdJQyAmJgorCQkgICAgc3RybmNtcCgqbmFtZSwgIi9zeXMvIiwgNSkgPT0gMCkgeworCQkJLyogVE9ETzogY29udmVydCBvdmVyIHRvIHVzaW5nIGEgcGVyIG5hbWVzcGFjZQorCQkJICogY29udHJvbCBpbnN0ZWFkIG9mIGhhcmQgY29kZWQgL3Byb2MKKwkJCSAqLworCQkJZXJyb3IgPSBwcmVwZW5kKG5hbWUsICpuYW1lIC0gYnVmLCAiL3Byb2MiLCA1KTsKKwkJfSBlbHNlIGlmICghKGZsYWdzICYgUEFUSF9DT05ORUNUX1BBVEgpICYmCisJCQkgICAhKCgoZmxhZ3MgJiBDSFJPT1RfTlNDT05ORUNUKSA9PSBDSFJPT1RfTlNDT05ORUNUKSAmJgorCQkJICAgICAodG1wLm1udCA9PSBjdXJyZW50LT5uc3Byb3h5LT5tbnRfbnMtPnJvb3QgJiYKKwkJCSAgICAgIHRtcC5kZW50cnkgPT0gdG1wLm1udC0+bW50X3Jvb3QpKSkgeworCQkJLyogZGlzY29ubmVjdGVkIHBhdGgsIGRvbid0IHJldHVybiBwYXRobmFtZSBzdGFydGluZworCQkJICogd2l0aCAnLycKKwkJCSAqLworCQkJZXJyb3IgPSAtRVNUQUxFOworCQkJaWYgKCpyZXMgPT0gJy8nKQorCQkJCSpuYW1lID0gcmVzICsgMTsKKwkJfQorCX0KKworb3V0OgorCXBhdGhfcHV0KCZyb290KTsKKworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBnZXRfbmFtZV90b19idWZmZXIgLSBnZXQgdGhlIHBhdGhuYW1lIHRvIGEgYnVmZmVyIGVuc3VyZSBkaXIgLyBpcyBhcHBlbmRlZAorICogQHBhdGg6IHBhdGggdG8gZ2V0IG5hbWUgZm9yICAoTk9UIE5VTEwpCisgKiBAZmxhZ3M6IGZsYWdzIGNvbnRyb2xsaW5nIHBhdGggbG9va3VwCisgKiBAYnVmZmVyOiBidWZmZXIgdG8gcHV0IG5hbWUgaW4gIChOT1QgTlVMTCkKKyAqIEBzaXplOiBzaXplIG9mIGJ1ZmZlcgorICogQG5hbWU6IFJldHVybnMgLSBjb250YWlucyBwb3NpdGlvbiBvZiBwYXRoIG5hbWUgaW4gQGJ1ZmZlciAoTk9UIE5VTEwpCisgKgorICogUmV0dXJuczogJTAgZWxzZSBlcnJvciBvbiBmYWlsdXJlCisgKi8KK3N0YXRpYyBpbnQgZ2V0X25hbWVfdG9fYnVmZmVyKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsIGNoYXIgKmJ1ZmZlciwKKwkJCSAgICAgIGludCBzaXplLCBjaGFyICoqbmFtZSkKK3sKKwlpbnQgYWRqdXN0ID0gKGZsYWdzICYgUEFUSF9JU19ESVIpID8gMSA6IDA7CisJaW50IGVycm9yID0gZF9uYW1lc3BhY2VfcGF0aChwYXRoLCBidWZmZXIsIHNpemUgLSBhZGp1c3QsIG5hbWUsIGZsYWdzKTsKKworCWlmICghZXJyb3IgJiYgKGZsYWdzICYgUEFUSF9JU19ESVIpICYmICgqbmFtZSlbMV0gIT0gJ1wwJykKKwkJLyoKKwkJICogQXBwZW5kICIvIiB0byB0aGUgcGF0aG5hbWUuICBUaGUgcm9vdCBkaXJlY3RvcnkgaXMgYSBzcGVjaWFsCisJCSAqIGNhc2U7IGl0IGFscmVhZHkgZW5kcyBpbiBzbGFzaC4KKwkJICovCisJCXN0cmNweSgmYnVmZmVyW3NpemUgLSAyXSwgIi8iKTsKKworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBhYV9nZXRfbmFtZSAtIGNvbXB1dGUgdGhlIHBhdGhuYW1lIG9mIGEgZmlsZQorICogQHBhdGg6IHBhdGggdGhlIGZpbGUgIChOT1QgTlVMTCkKKyAqIEBmbGFnczogZmxhZ3MgY29udHJvbGxpbmcgcGF0aCBuYW1lIGdlbmVyYXRpb24KKyAqIEBidWZmZXI6IGJ1ZmZlciB0aGF0IGFhX2dldF9uYW1lKCkgYWxsb2NhdGVkICAoTk9UIE5VTEwpCisgKiBAbmFtZTogUmV0dXJucyAtIHRoZSBnZW5lcmF0ZWQgcGF0aCBuYW1lIGlmICFlcnJvciAoTk9UIE5VTEwpCisgKgorICogQG5hbWUgaXMgYSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhdGhuYW1lICh3aGljaCB1c3VhbGx5IGRpZmZlcnMKKyAqIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyKSwgb3IgTlVMTC4gIElmIHRoZXJlIGlzIGFuIGVycm9yIEBuYW1lCisgKiBtYXkgY29udGFpbiBhIHBhcnRpYWwgb3IgaW52YWxpZCBuYW1lIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGF1ZGl0IHB1cnBvc2VzLAorICogYnV0IGl0IGNhbiBub3QgYmUgdXNlZCBmb3IgbWVkaWF0aW9uLgorICoKKyAqIFdlIG5lZWQgUEFUSF9JU19ESVIgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgZmlsZSBpcyBhIGRpcmVjdG9yeSBvciBub3QKKyAqIGJlY2F1c2UgdGhlIGZpbGUgbWF5IG5vdCB5ZXQgZXhpc3QsIGFuZCBzbyB3ZSBjYW5ub3QgY2hlY2sgdGhlIGlub2RlJ3MKKyAqIGZpbGUgdHlwZS4KKyAqCisgKiBSZXR1cm5zOiAlMCBlbHNlIGVycm9yIGNvZGUgaWYgY291bGQgcmV0cmlldmUgbmFtZQorICovCitpbnQgYWFfZ2V0X25hbWUoc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncywgY2hhciAqKmJ1ZmZlciwgY29uc3QgY2hhciAqKm5hbWUpCit7CisJY2hhciAqYnVmLCAqc3RyID0gTlVMTDsKKwlpbnQgc2l6ZSA9IDI1NjsKKwlpbnQgZXJyb3I7CisKKwkqbmFtZSA9IE5VTEw7CisJKmJ1ZmZlciA9IE5VTEw7CisJZm9yICg7OykgeworCQkvKiBmcmVlZCBieSBjYWxsZXIgKi8KKwkJYnVmID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFidWYpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQllcnJvciA9IGdldF9uYW1lX3RvX2J1ZmZlcihwYXRoLCBmbGFncywgYnVmLCBzaXplLCAmc3RyKTsKKwkJaWYgKGVycm9yICE9IC1FTkFNRVRPT0xPTkcpCisJCQlicmVhazsKKworCQlrZnJlZShidWYpOworCQlzaXplIDw8PSAxOworCQlpZiAoc2l6ZSA+IGFhX2dfcGF0aF9tYXgpCisJCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKKwl9CisJKmJ1ZmZlciA9IGJ1ZjsKKwkqbmFtZSA9IHN0cjsKKworCXJldHVybiBlcnJvcjsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jIGIvc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NkYzFhZAotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jCkBAIC0wLDAgKzEsMTE4NCBAQAorLyoKKyAqIEFwcEFybW9yIHNlY3VyaXR5IG1vZHVsZQorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBBcHBBcm1vciBwb2xpY3kgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDA4IE5vdmVsbC9TVVNFCisgKiBDb3B5cmlnaHQgMjAwOS0yMDEwIENhbm9uaWNhbCBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqCisgKiBBcHBBcm1vciBwb2xpY3kgaXMgYmFzZWQgYXJvdW5kIHByb2ZpbGVzLCB3aGljaCBjb250YWluIHRoZSBydWxlcyBhCisgKiB0YXNrIGlzIGNvbmZpbmVkIGJ5LiAgRXZlcnkgdGFzayBpbiB0aGUgc3lzdGVtIGhhcyBhIHByb2ZpbGUgYXR0YWNoZWQKKyAqIHRvIGl0IGRldGVybWluZWQgZWl0aGVyIGJ5IG1hdGNoaW5nICJ1bmNvbmZpbmVkIiB0YXNrcyBhZ2FpbnN0IHRoZQorICogdmlzaWJsZSBzZXQgb2YgcHJvZmlsZXMgb3IgYnkgZm9sbG93aW5nIGEgcHJvZmlsZXMgYXR0YWNobWVudCBydWxlcy4KKyAqCisgKiBFYWNoIHByb2ZpbGUgZXhpc3RzIGluIGEgcHJvZmlsZSBuYW1lc3BhY2Ugd2hpY2ggaXMgYSBjb250YWluZXIgb2YKKyAqIHZpc2libGUgcHJvZmlsZXMuICBFYWNoIG5hbWVzcGFjZSBjb250YWlucyBhIHNwZWNpYWwgInVuY29uZmluZWQiIHByb2ZpbGUsCisgKiB3aGljaCBkb2Vzbid0IGVuZm9yY2UgYW55IGNvbmZpbmVtZW50IG9uIGEgdGFzayBiZXlvbmQgREFDLgorICoKKyAqIE5hbWVzcGFjZSBhbmQgcHJvZmlsZSBuYW1lcyBjYW4gYmUgd3JpdHRlbiB0b2dldGhlciBpbiBlaXRoZXIKKyAqIG9mIHR3byBzeW50YXhlcy4KKyAqCTpuYW1lc3BhY2U6cHJvZmlsZSAtIHVzZWQgYnkga2VybmVsIGludGVyZmFjZXMgZm9yIGVhc3kgZGV0ZWN0aW9uCisgKgluYW1lc3BhY2U6Ly9wcm9maWxlIC0gdXNlZCBieSBwb2xpY3kKKyAqCisgKiBQcm9maWxlIG5hbWVzIGNhbiBub3Qgc3RhcnQgd2l0aCA6IG9yIEAgb3IgXiBhbmQgbWF5IG5vdCBjb250YWluIFwwCisgKgorICogUmVzZXJ2ZWQgcHJvZmlsZSBuYW1lcworICoJdW5jb25maW5lZCAtIHNwZWNpYWwgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgdW5jb25maW5lZCBwcm9maWxlCisgKglpbmhlcml0IC0gc3BlY2lhbCBuYW1lIHRvIGluZGljYXRlIHByb2ZpbGUgaW5oZXJpdGFuY2UKKyAqCW51bGwtWFhYWC1ZWVlZIC0gc3BlY2lhbCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBsZWFybmluZyBwcm9maWxlcworICoKKyAqIE5hbWVzcGFjZSBuYW1lcyBtYXkgbm90IHN0YXJ0IHdpdGggLyBvciBAIGFuZCBtYXkgbm90IGNvbnRhaW4gXDAgb3IgOgorICogUmVzZXJ2ZWQgbmFtZXNwYWNlIG5hbWVzCisgKgl1c2VyLVhYWFggLSB1c2VyIGRlZmluZWQgcHJvZmlsZXMKKyAqCisgKiBhIC8vIGluIGEgcHJvZmlsZSBvciBuYW1lc3BhY2UgbmFtZSBpbmRpY2F0ZXMgYSBoaWVyYXJjaGljYWwgbmFtZSB3aXRoIHRoZQorICogbmFtZSBiZWZvcmUgdGhlIC8vIGJlaW5nIHRoZSBwYXJlbnQgYW5kIHRoZSBuYW1lIGFmdGVyIHRoZSBjaGlsZC4KKyAqCisgKiBQcm9maWxlIGFuZCBuYW1lc3BhY2UgaGllcmFyY2hpZXMgc2VydmUgdHdvIGRpZmZlcmVudCBidXQgc2ltaWxhciBwdXJwb3Nlcy4KKyAqIFRoZSBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNldCBvZiB2aXNpYmxlIHByb2ZpbGVzIHRoYXQgYXJlIGNvbnNpZGVyZWQKKyAqIGZvciBhdHRhY2htZW50LiAgVGhlIGhpZXJhcmNoeSBvZiBuYW1lc3BhY2VzIGFsbG93cyBmb3IgdmlydHVhbGl6aW5nCisgKiB0aGUgbmFtZXNwYWNlIHNvIHRoYXQgZm9yIGV4YW1wbGUgYSBjaHJvb3QgY2FuIGhhdmUgaXRzIG93biBzZXQgb2YgcHJvZmlsZXMKKyAqIHdoaWNoIG1heSBkZWZpbmUgc29tZSBsb2NhbCB1c2VyIG5hbWVzcGFjZXMuCisgKiBUaGUgcHJvZmlsZSBoaWVyYXJjaHkgc2V2ZXJzIHR3byBkaXN0aW5jdCBwdXJwb3NlcywKKyAqIC0gIGl0IGFsbG93cyBmb3Igc3ViIHByb2ZpbGVzIG9yIGhhdHMsIHdoaWNoIGFsbG93cyBhbiBhcHBsaWNhdGlvbiB0byBydW4KKyAqICAgIHN1YnByb2dyYW1zIHVuZGVyIGl0cyBvd24gcHJvZmlsZSB3aXRoIGRpZmZlcmVudCByZXN0cmljdGlvbiB0aGFuIGl0CisgKiAgICBzZWxmLCBhbmQgbm90IGhhdmUgaXQgdXNlIHRoZSBzeXN0ZW0gcHJvZmlsZS4KKyAqICAgIGVnLiBpZiBhIG1haWwgcHJvZ3JhbSBzdGFydHMgYW4gZWRpdG9yLCB0aGUgcG9saWN5IG1pZ2h0IG1ha2UgdGhlCisgKiAgICAgICAgcmVzdHJpY3Rpb25zIHRpZ2h0ZXIgb24gdGhlIGVkaXRvciB0aWdodGVyIHRoYW4gdGhlIG1haWwgcHJvZ3JhbSwKKyAqICAgICAgICBhbmQgZGVmaW5pdGVseSBkaWZmZXJlbnQgdGhhbiBnZW5lcmFsIGVkaXRvciByZXN0cmljdGlvbnMKKyAqIC0gaXQgYWxsb3dzIGZvciBiaW5hcnkgaGllcmFyY2h5IG9mIHByb2ZpbGVzLCBzbyB0aGF0IGV4ZWN1dGlvbiBoaXN0b3J5CisgKiAgIGlzIHByZXNlcnZlZC4gIFRoaXMgZmVhdHVyZSBpc24ndCBleHBsb2l0ZWQgYnkgQXBwQXJtb3IgcmVmZXJlbmNlIHBvbGljeQorICogICBidXQgaXMgYWxsb3dlZC4gIE5PVEU6IHRoaXMgaXMgY3VycmVudGx5IHN1Ym9wdGltYWwgYmVjYXVzZSBwcm9maWxlCisgKiAgIGFsaWFzaW5nIGlzIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWQgc28gdGhhdCBhIHByb2ZpbGUgZm9yIGVhY2gKKyAqICAgbGV2ZWwgbXVzdCBiZSBkZWZpbmVkLgorICogICBlZy4gL2Jpbi9iYXNoLy8vYmluL2xzIGFzIGEgbmFtZSB3b3VsZCBpbmRpY2F0ZSAvYmluL2xzIHdhcyBzdGFydGVkCisgKiAgICAgICBmcm9tIC9iaW4vYmFzaAorICoKKyAqICAgQSBwcm9maWxlIG9yIG5hbWVzcGFjZSBuYW1lIHRoYXQgY2FuIGNvbnRhaW4gb25lIG9yIG1vcmUgLy8gc2VwYXJhdG9ycworICogICBpcyByZWZlcnJlZCB0byBhcyBhbiBobmFtZSAoaGllcmFyY2hpY2FsKS4KKyAqICAgZWcuICAvYmluL2Jhc2gvL2Jpbi9scworICoKKyAqICAgQW4gZnFuYW1lIGlzIGEgbmFtZSB0aGF0IG1heSBjb250YWluIGJvdGggbmFtZXNwYWNlIGFuZCBwcm9maWxlIGhuYW1lcy4KKyAqICAgZWcuIDpuczovYmluL2Jhc2gvL2Jpbi9scworICoKKyAqIE5PVEVTOgorICogICAtIGxvY2tpbmcgb2YgcHJvZmlsZSBsaXN0cyBpcyBjdXJyZW50bHkgZmFpcmx5IGNvYXJzZS4gIEFsbCBwcm9maWxlCisgKiAgICAgbGlzdHMgd2l0aGluIGEgbmFtZXNwYWNlIHVzZSB0aGUgbmFtZXNwYWNlIGxvY2suCisgKiBGSVhNRTogbW92ZSBwcm9maWxlIGxpc3RzIHRvIHVzaW5nIHJjdV9saXN0cworICovCisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworI2luY2x1ZGUgImluY2x1ZGUvYXBwYXJtb3IuaCIKKyNpbmNsdWRlICJpbmNsdWRlL2NhcGFiaWxpdHkuaCIKKyNpbmNsdWRlICJpbmNsdWRlL2NvbnRleHQuaCIKKyNpbmNsdWRlICJpbmNsdWRlL2ZpbGUuaCIKKyNpbmNsdWRlICJpbmNsdWRlL2lwYy5oIgorI2luY2x1ZGUgImluY2x1ZGUvbWF0Y2guaCIKKyNpbmNsdWRlICJpbmNsdWRlL3BhdGguaCIKKyNpbmNsdWRlICJpbmNsdWRlL3BvbGljeS5oIgorI2luY2x1ZGUgImluY2x1ZGUvcG9saWN5X3VucGFjay5oIgorI2luY2x1ZGUgImluY2x1ZGUvcmVzb3VyY2UuaCIKKyNpbmNsdWRlICJpbmNsdWRlL3NpZC5oIgorCisKKy8qIHJvb3QgcHJvZmlsZSBuYW1lc3BhY2UgKi8KK3N0cnVjdCBhYV9uYW1lc3BhY2UgKnJvb3RfbnM7CisKK2NvbnN0IGNoYXIgKnByb2ZpbGVfbW9kZV9uYW1lc1tdID0geworCSJlbmZvcmNlIiwKKwkiY29tcGxhaW4iLAorCSJraWxsIiwKK307CisKKy8qKgorICogaG5hbWVfdGFpbCAtIGZpbmQgdGhlIGxhc3QgY29tcG9uZW50IG9mIGFuIGhuYW1lCisgKiBAbmFtZTogaG5hbWUgdG8gZmluZCB0aGUgYmFzZSBwcm9maWxlIG5hbWUgY29tcG9uZW50IG9mICAoTk9UIE5VTEwpCisgKgorICogUmV0dXJuczogdGhlIHRhaWwgKGJhc2UgcHJvZmlsZSBuYW1lKSBuYW1lIGNvbXBvbmVudCBvZiBhbiBobmFtZQorICovCitzdGF0aWMgY29uc3QgY2hhciAqaG5hbWVfdGFpbChjb25zdCBjaGFyICpobmFtZSkKK3sKKwljaGFyICpzcGxpdDsKKwlobmFtZSA9IHN0cmltKChjaGFyICopaG5hbWUpOworCWZvciAoc3BsaXQgPSBzdHJzdHIoaG5hbWUsICIvLyIpOyBzcGxpdDsgc3BsaXQgPSBzdHJzdHIoaG5hbWUsICIvLyIpKQorCQlobmFtZSA9IHNwbGl0ICsgMjsKKworCXJldHVybiBobmFtZTsKK30KKworLyoqCisgKiBwb2xpY3lfaW5pdCAtIGluaXRpYWxpemUgYSBwb2xpY3kgc3RydWN0dXJlCisgKiBAcG9saWN5OiBwb2xpY3kgdG8gaW5pdGlhbGl6ZSAgKE5PVCBOVUxMKQorICogQHByZWZpeDogcHJlZml4IG5hbWUgaWYgYW55IGlzIHJlcXVpcmVkLiAgKE1BWUJFIE5VTEwpCisgKiBAbmFtZTogbmFtZSBvZiB0aGUgcG9saWN5LCBpbml0IHdpbGwgbWFrZSBhIGNvcHkgb2YgaXQgIChOT1QgTlVMTCkKKyAqCisgKiBOb3RlOiB0aGlzIGZuIGNyZWF0ZXMgYSBjb3B5IG9mIHN0cmluZ3MgcGFzc2VkIGluCisgKgorICogUmV0dXJuczogdHJ1ZSBpZiBwb2xpY3kgaW5pdCBzdWNjZXNzZnVsCisgKi8KK3N0YXRpYyBib29sIHBvbGljeV9pbml0KHN0cnVjdCBhYV9wb2xpY3kgKnBvbGljeSwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJY29uc3QgY2hhciAqbmFtZSkKK3sKKwkvKiBmcmVlZCBieSBwb2xpY3lfZnJlZSAqLworCWlmIChwcmVmaXgpIHsKKwkJcG9saWN5LT5obmFtZSA9IGttYWxsb2Moc3RybGVuKHByZWZpeCkgKyBzdHJsZW4obmFtZSkgKyAzLAorCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKHBvbGljeS0+aG5hbWUpCisJCQlzcHJpbnRmKHBvbGljeS0+aG5hbWUsICIlcy8vJXMiLCBwcmVmaXgsIG5hbWUpOworCX0gZWxzZQorCQlwb2xpY3ktPmhuYW1lID0ga3N0cmR1cChuYW1lLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBvbGljeS0+aG5hbWUpCisJCXJldHVybiAwOworCS8qIGJhc2UubmFtZSBpcyBhIHN1YnN0cmluZyBvZiBmcW5hbWUgKi8KKwlwb2xpY3ktPm5hbWUgPSAoY2hhciAqKWhuYW1lX3RhaWwocG9saWN5LT5obmFtZSk7CisJSU5JVF9MSVNUX0hFQUQoJnBvbGljeS0+bGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnBvbGljeS0+cHJvZmlsZXMpOworCWtyZWZfaW5pdCgmcG9saWN5LT5jb3VudCk7CisKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBwb2xpY3lfZGVzdHJveSAtIGZyZWUgdGhlIGVsZW1lbnRzIHJlZmVyZW5jZWQgYnkgQHBvbGljeQorICogQHBvbGljeTogcG9saWN5IHRoYXQgaXMgdG8gaGF2ZSBpdHMgZWxlbWVudHMgZnJlZWQgIChOT1QgTlVMTCkKKyAqLworc3RhdGljIHZvaWQgcG9saWN5X2Rlc3Ryb3koc3RydWN0IGFhX3BvbGljeSAqcG9saWN5KQoreworCS8qIHN0aWxsIGNvbnRhaW5zIHByb2ZpbGVzIC0tIGludmFsaWQgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJnBvbGljeS0+cHJvZmlsZXMpKSB7CisJCUFBX0VSUk9SKCIlczogaW50ZXJuYWwgZXJyb3IsICIKKwkJCSAicG9saWN5ICclcycgc3RpbGwgY29udGFpbnMgcHJvZmlsZXNcbiIsCisJCQkgX19mdW5jX18sIHBvbGljeS0+bmFtZSk7CisJCUJVRygpOworCX0KKwlpZiAoIWxpc3RfZW1wdHkoJnBvbGljeS0+bGlzdCkpIHsKKwkJQUFfRVJST1IoIiVzOiBpbnRlcm5hbCBlcnJvciwgcG9saWN5ICclcycgc3RpbGwgb24gbGlzdFxuIiwKKwkJCSBfX2Z1bmNfXywgcG9saWN5LT5uYW1lKTsKKwkJQlVHKCk7CisJfQorCisJLyogZG9uJ3QgZnJlZSBuYW1lIGFzIGl0cyBhIHN1YnNldCBvZiBobmFtZSAqLworCWt6ZnJlZShwb2xpY3ktPmhuYW1lKTsKK30KKworLyoqCisgKiBfX3BvbGljeV9maW5kIC0gZmluZCBhIHBvbGljeSBieSBAbmFtZSBvbiBhIHBvbGljeSBsaXN0CisgKiBAaGVhZDogbGlzdCB0byBzZWFyY2ggIChOT1QgTlVMTCkKKyAqIEBuYW1lOiBuYW1lIHRvIHNlYXJjaCBmb3IgIChOT1QgTlVMTCkKKyAqCisgKiBSZXF1aXJlczogY29ycmVjdCBsb2NrcyBmb3IgdGhlIEBoZWFkIGxpc3QgYmUgaGVsZAorICoKKyAqIFJldHVybnM6IHVucmVmY291bnRlZCBwb2xpY3kgdGhhdCBtYXRjaCBAbmFtZSBvciBOVUxMIGlmIG5vdCBmb3VuZAorICovCitzdGF0aWMgc3RydWN0IGFhX3BvbGljeSAqX19wb2xpY3lfZmluZChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBhYV9wb2xpY3kgKnBvbGljeTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocG9saWN5LCBoZWFkLCBsaXN0KSB7CisJCWlmICghc3RyY21wKHBvbGljeS0+bmFtZSwgbmFtZSkpCisJCQlyZXR1cm4gcG9saWN5OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBfX3BvbGljeV9zdHJuX2ZpbmQgLSBmaW5kIGEgcG9saWN5IHRoYXQncyBuYW1lIG1hdGNoZXMgQGxlbiBjaGFycyBvZiBAc3RyCisgKiBAaGVhZDogbGlzdCB0byBzZWFyY2ggIChOT1QgTlVMTCkKKyAqIEBzdHI6IHN0cmluZyB0byBzZWFyY2ggZm9yICAoTk9UIE5VTEwpCisgKiBAbGVuOiBsZW5ndGggb2YgbWF0Y2ggcmVxdWlyZWQKKyAqCisgKiBSZXF1aXJlczogY29ycmVjdCBsb2NrcyBmb3IgdGhlIEBoZWFkIGxpc3QgYmUgaGVsZAorICoKKyAqIFJldHVybnM6IHVucmVmY291bnRlZCBwb2xpY3kgdGhhdCBtYXRjaCBAc3RyIG9yIE5VTEwgaWYgbm90IGZvdW5kCisgKgorICogaWYgQGxlbiA9PSBzdHJsZW4oQHN0cmxlbikgdGhlbiB0aGlzIGlzIGVxdWl2IHRvIF9fcG9saWN5X2ZpbmQKKyAqIG90aGVyIHdpc2UgaXQgYWxsb3dzIHNlYXJjaGluZyBmb3IgcG9saWN5IGJ5IGEgcGFydGlhbCBtYXRjaCBvZiBuYW1lCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYWFfcG9saWN5ICpfX3BvbGljeV9zdHJuX2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgYWFfcG9saWN5ICpwb2xpY3k7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvbGljeSwgaGVhZCwgbGlzdCkgeworCQlpZiAoYWFfc3RybmVxKHBvbGljeS0+bmFtZSwgc3RyLCBsZW4pKQorCQkJcmV0dXJuIHBvbGljeTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFJvdXRpbmVzIGZvciBBcHBBcm1vciBuYW1lc3BhY2VzCisgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKmhpZGRlbl9uc19uYW1lID0gIi0tLSI7CisvKioKKyAqIGFhX25zX3Zpc2libGUgLSB0ZXN0IGlmIEB2aWV3IGlzIHZpc2libGUgZnJvbSBAY3VycgorICogQGN1cnI6IG5hbWVzcGFjZSB0byB0cmVhdCBhcyB0aGUgcGFyZW50IChOT1QgTlVMTCkKKyAqIEB2aWV3OiAgbmFtZXNwYWNlIHRvIHRlc3QgaWYgdmlzaWJsZSBmcm9tIEBjdXJyIChOT1QgTlVMTCkKKyAqCisgKiBSZXR1cm5zOiB0cnVlIGlmIEB2aWV3IGlzIHZpc2libGUgZnJvbSBAY3VyciBlbHNlIGZhbHNlCisgKi8KK2Jvb2wgYWFfbnNfdmlzaWJsZShzdHJ1Y3QgYWFfbmFtZXNwYWNlICpjdXJyLCBzdHJ1Y3QgYWFfbmFtZXNwYWNlICp2aWV3KQoreworCWlmIChjdXJyID09IHZpZXcpCisJCXJldHVybiB0cnVlOworCisJZm9yICggOyB2aWV3OyB2aWV3ID0gdmlldy0+cGFyZW50KSB7CisJCWlmICh2aWV3LT5wYXJlbnQgPT0gY3VycikKKwkJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKgorICogYWFfbmFfbmFtZSAtIEZpbmQgdGhlIG5zIG5hbWUgdG8gZGlzcGxheSBmb3IgQHZpZXcgZnJvbSBAY3VycgorICogQGN1cnIgLSBjdXJyZW50IG5hbWVzcGFjZSAoTk9UIE5VTEwpCisgKiBAdmlldyAtIG5hbWVzcGFjZSBhdHRlbXB0aW5nIHRvIHZpZXcgKE5PVCBOVUxMKQorICoKKyAqIFJldHVybnM6IG5hbWUgb2YgQHZpZXcgdmlzaWJsZSBmcm9tIEBjdXJyCisgKi8KK2NvbnN0IGNoYXIgKmFhX25zX25hbWUoc3RydWN0IGFhX25hbWVzcGFjZSAqY3Vyciwgc3RydWN0IGFhX25hbWVzcGFjZSAqdmlldykKK3sKKwkvKiBpZiB2aWV3ID09IGN1cnIgdGhlbiB0aGUgbmFtZXNwYWNlIG5hbWUgaXNuJ3QgZGlzcGxheWVkICovCisJaWYgKGN1cnIgPT0gdmlldykKKwkJcmV0dXJuICIiOworCisJaWYgKGFhX25zX3Zpc2libGUoY3VyciwgdmlldykpIHsKKwkJLyogYXQgdGhpcyBwb2ludCBpZiBhIG5zIGlzIHZpc2libGUgaXQgaXMgaW4gYSB2aWV3IG5zCisJCSAqIHRodXMgdGhlIGN1cnIgbnMuaG5hbWUgaXMgYSBwcmVmaXggb2YgaXRzIG5hbWUuCisJCSAqIE9ubHkgb3V0cHV0IHRoZSB2aXJ0dWFsaXplZCBwb3J0aW9uIG9mIHRoZSBuYW1lCisJCSAqIEFkZCArIDIgdG8gc2tpcCBvdmVyIC8vIHNlcGFyYXRpbmcgY3VyciBobmFtZSBwcmVmaXgKKwkJICogZnJvbSB0aGUgdmlzaWJsZSB0YWlsIG9mIHRoZSB2aWV3cyBobmFtZQorCQkgKi8KKwkJcmV0dXJuIHZpZXctPmJhc2UuaG5hbWUgKyBzdHJsZW4oY3Vyci0+YmFzZS5obmFtZSkgKyAyOworCX0gZWxzZQorCQlyZXR1cm4gaGlkZGVuX25zX25hbWU7Cit9CisKKy8qKgorICogYWxsb2NfbmFtZXNwYWNlIC0gYWxsb2NhdGUsIGluaXRpYWxpemUgYW5kIHJldHVybiBhIG5ldyBuYW1lc3BhY2UKKyAqIEBwcmVmaXg6IHBhcmVudCBuYW1lc3BhY2UgbmFtZSAoTUFZQkUgTlVMTCkKKyAqIEBuYW1lOiBhIHByZWFsbG9jYXRlZCBuYW1lICAoTk9UIE5VTEwpCisgKgorICogUmV0dXJuczogcmVmY291bnRlZCBuYW1lc3BhY2Ugb3IgTlVMTCBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgc3RydWN0IGFhX25hbWVzcGFjZSAqYWxsb2NfbmFtZXNwYWNlKGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGFhX25hbWVzcGFjZSAqbnM7CisKKwlucyA9IGt6YWxsb2Moc2l6ZW9mKCpucyksIEdGUF9LRVJORUwpOworCUFBX0RFQlVHKCIlcyglcClcbiIsIF9fZnVuY19fLCBucyk7CisJaWYgKCFucykKKwkJcmV0dXJuIE5VTEw7CisJaWYgKCFwb2xpY3lfaW5pdCgmbnMtPmJhc2UsIHByZWZpeCwgbmFtZSkpCisJCWdvdG8gZmFpbF9uczsKKworCUlOSVRfTElTVF9IRUFEKCZucy0+c3ViX25zKTsKKwlyd2xvY2tfaW5pdCgmbnMtPmxvY2spOworCisJLyogcmVsZWFzZWQgYnkgZnJlZV9uYW1lc3BhY2UgKi8KKwlucy0+dW5jb25maW5lZCA9IGFhX2FsbG9jX3Byb2ZpbGUoInVuY29uZmluZWQiKTsKKwlpZiAoIW5zLT51bmNvbmZpbmVkKQorCQlnb3RvIGZhaWxfdW5jb25maW5lZDsKKworCW5zLT51bmNvbmZpbmVkLT5zaWQgPSBhYV9hbGxvY19zaWQoKTsKKwlucy0+dW5jb25maW5lZC0+ZmxhZ3MgPSBQRkxBR19VTkNPTkZJTkVEIHwgUEZMQUdfSVhfT05fTkFNRV9FUlJPUiB8CisJICAgIFBGTEFHX0lNTVVUQUJMRTsKKworCS8qCisJICogcmVsZWFzZWQgYnkgZnJlZV9uYW1lc3BhY2UsIGhvd2V2ZXIgX19yZW1vdmVfbmFtZXNwYWNlIGJyZWFrcworCSAqIHRoZSBjeWNsaWMgcmVmZXJlbmNlcyAobnMtPnVuY29uZmluZWQsIGFuZCB1bmNvbmZpbmVkLT5ucykgYW5kCisJICogcmVwbGFjZXMgd2l0aCByZWZzIHRvIHBhcmVudCBuYW1lc3BhY2UgdW5jb25maW5lZAorCSAqLworCW5zLT51bmNvbmZpbmVkLT5ucyA9IGFhX2dldF9uYW1lc3BhY2UobnMpOworCisJcmV0dXJuIG5zOworCitmYWlsX3VuY29uZmluZWQ6CisJa3pmcmVlKG5zLT5iYXNlLm5hbWUpOworZmFpbF9uczoKKwlremZyZWUobnMpOworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIGZyZWVfbmFtZXNwYWNlIC0gZnJlZSBhIHByb2ZpbGUgbmFtZXNwYWNlCisgKiBAbnM6IHRoZSBuYW1lc3BhY2UgdG8gZnJlZSAgKE1BWUJFIE5VTEwpCisgKgorICogUmVxdWlyZXM6IEFsbCByZWZlcmVuY2VzIHRvIHRoZSBuYW1lc3BhY2UgbXVzdCBoYXZlIGJlZW4gcHV0LCBpZiB0aGUKKyAqICAgICAgICAgICBuYW1lc3BhY2Ugd2FzIHJlZmVyZW5jZWQgYnkgYSBwcm9maWxlIGNvbmZpbmluZyBhIHRhc2ssCisgKi8KK3N0YXRpYyB2b2lkIGZyZWVfbmFtZXNwYWNlKHN0cnVjdCBhYV9uYW1lc3BhY2UgKm5zKQoreworCWlmICghbnMpCisJCXJldHVybjsKKworCXBvbGljeV9kZXN0cm95KCZucy0+YmFzZSk7CisJYWFfcHV0X25hbWVzcGFjZShucy0+cGFyZW50KTsKKworCWlmIChucy0+dW5jb25maW5lZCAmJiBucy0+dW5jb25maW5lZC0+bnMgPT0gbnMpCisJCW5zLT51bmNvbmZpbmVkLT5ucyA9IE5VTEw7CisKKwlhYV9wdXRfcHJvZmlsZShucy0+dW5jb25maW5lZCk7CisJa3pmcmVlKG5zKTsKK30KKworLyoqCisgKiBhYV9mcmVlX25hbWVzcGFjZV9rcmVmIC0gZnJlZSBhYV9uYW1lc3BhY2UgYnkga3JlZiAoc2VlIGFhX3B1dF9uYW1lc3BhY2UpCisgKiBAa3I6IGtyZWYgY2FsbGJhY2sgZm9yIGZyZWVpbmcgb2YgYSBuYW1lc3BhY2UgIChOT1QgTlVMTCkKKyAqLwordm9pZCBhYV9mcmVlX25hbWVzcGFjZV9rcmVmKHN0cnVjdCBrcmVmICprcmVmKQoreworCWZyZWVfbmFtZXNwYWNlKGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgYWFfbmFtZXNwYWNlLCBiYXNlLmNvdW50KSk7Cit9CisKKy8qKgorICogX19hYV9maW5kX25hbWVzcGFjZSAtIGZpbmQgYSBuYW1lc3BhY2Ugb24gYSBsaXN0IGJ5IEBuYW1lCisgKiBAaGVhZDogbGlzdCB0byBzZWFyY2ggZm9yIG5hbWVzcGFjZSBvbiAgKE5PVCBOVUxMKQorICogQG5hbWU6IG5hbWUgb2YgbmFtZXNwYWNlIHRvIGxvb2sgZm9yICAoTk9UIE5VTEwpCisgKgorICogUmV0dXJuczogdW5yZWZjb3VudGVkIG5hbWVzcGFjZQorICoKKyAqIFJlcXVpcmVzOiBucyBsb2NrIGJlIGhlbGQKKyAqLworc3RhdGljIHN0cnVjdCBhYV9uYW1lc3BhY2UgKl9fYWFfZmluZF9uYW1lc3BhY2Uoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKKwkJCQkJCWNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIChzdHJ1Y3QgYWFfbmFtZXNwYWNlICopX19wb2xpY3lfZmluZChoZWFkLCBuYW1lKTsKK30KKworLyoqCisgKiBhYV9maW5kX25hbWVzcGFjZSAgLSAgbG9vayB1cCBhIHByb2ZpbGUgbmFtZXNwYWNlIG9uIHRoZSBuYW1lc3BhY2UgbGlzdAorICogQHJvb3Q6IG5hbWVzcGFjZSB0byBzZWFyY2ggaW4gIChOT1QgTlVMTCkKKyAqIEBuYW1lOiBuYW1lIG9mIG5hbWVzcGFjZSB0byBmaW5kICAoTk9UIE5VTEwpCisgKgorICogUmV0dXJuczogYSByZWZjb3VudGVkIG5hbWVzcGFjZSBvbiB0aGUgbGlzdCwgb3IgTlVMTCBpZiBubyBuYW1lc3BhY2UKKyAqICAgICAgICAgIGNhbGxlZCBAbmFtZSBleGlzdHMuCisgKgorICogcmVmY291bnQgcmVsZWFzZWQgYnkgY2FsbGVyCisgKi8KK3N0cnVjdCBhYV9uYW1lc3BhY2UgKmFhX2ZpbmRfbmFtZXNwYWNlKHN0cnVjdCBhYV9uYW1lc3BhY2UgKnJvb3QsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGFhX25hbWVzcGFjZSAqbnMgPSBOVUxMOworCisJcmVhZF9sb2NrKCZyb290LT5sb2NrKTsKKwlucyA9IGFhX2dldF9uYW1lc3BhY2UoX19hYV9maW5kX25hbWVzcGFjZSgmcm9vdC0+c3ViX25zLCBuYW1lKSk7CisJcmVhZF91bmxvY2soJnJvb3QtPmxvY2spOworCisJcmV0dXJuIG5zOworfQorCisvKioKKyAqIGFhX3ByZXBhcmVfbmFtZXNwYWNlIC0gZmluZCBhbiBleGlzdGluZyBvciBjcmVhdGUgYSBuZXcgbmFtZXNwYWNlIG9mIEBuYW1lCisgKiBAbmFtZTogdGhlIG5hbWVzcGFjZSB0byBmaW5kIG9yIGFkZCAgKE1BWUJFIE5VTEwpCisgKgorICogUmV0dXJuczogcmVmY291bnRlZCBuYW1lc3BhY2Ugb3IgTlVMTCBpZiBmYWlsZWQgdG8gY3JlYXRlIG9uZQorICovCitzdGF0aWMgc3RydWN0IGFhX25hbWVzcGFjZSAqYWFfcHJlcGFyZV9uYW1lc3BhY2UoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgYWFfbmFtZXNwYWNlICpucywgKnJvb3Q7CisKKwlyb290ID0gYWFfY3VycmVudF9wcm9maWxlKCktPm5zOworCisJd3JpdGVfbG9jaygmcm9vdC0+bG9jayk7CisKKwkvKiBpZiBuYW1lIGlzbid0IHNwZWNpZmllZCB0aGUgcHJvZmlsZSBpcyBsb2FkZWQgdG8gdGhlIGN1cnJlbnQgbnMgKi8KKwlpZiAoIW5hbWUpIHsKKwkJLyogcmVsZWFzZWQgYnkgY2FsbGVyICovCisJCW5zID0gYWFfZ2V0X25hbWVzcGFjZShyb290KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogdHJ5IGFuZCBmaW5kIHRoZSBzcGVjaWZpZWQgbnMgYW5kIGlmIGl0IGRvZXNuJ3QgZXhpc3QgY3JlYXRlIGl0ICovCisJLyogcmVsZWFzZWQgYnkgY2FsbGVyICovCisJbnMgPSBhYV9nZXRfbmFtZXNwYWNlKF9fYWFfZmluZF9uYW1lc3BhY2UoJnJvb3QtPnN1Yl9ucywgbmFtZSkpOworCWlmICghbnMpIHsKKwkJLyogbmFtZXNwYWNlIG5vdCBmb3VuZCAqLworCQlzdHJ1Y3QgYWFfbmFtZXNwYWNlICpuZXdfbnM7CisJCXdyaXRlX3VubG9jaygmcm9vdC0+bG9jayk7CisJCW5ld19ucyA9IGFsbG9jX25hbWVzcGFjZShyb290LT5iYXNlLmhuYW1lLCBuYW1lKTsKKwkJaWYgKCFuZXdfbnMpCisJCQlyZXR1cm4gTlVMTDsKKwkJd3JpdGVfbG9jaygmcm9vdC0+bG9jayk7CisJCS8qIHRlc3QgZm9yIHJhY2Ugd2hlbiBuZXdfbnMgd2FzIGFsbG9jYXRlZCAqLworCQlucyA9IF9fYWFfZmluZF9uYW1lc3BhY2UoJnJvb3QtPnN1Yl9ucywgbmFtZSk7CisJCWlmICghbnMpIHsKKwkJCS8qIGFkZCBwYXJlbnQgcmVmICovCisJCQluZXdfbnMtPnBhcmVudCA9IGFhX2dldF9uYW1lc3BhY2Uocm9vdCk7CisKKwkJCWxpc3RfYWRkKCZuZXdfbnMtPmJhc2UubGlzdCwgJnJvb3QtPnN1Yl9ucyk7CisJCQkvKiBhZGQgbGlzdCByZWYgKi8KKwkJCW5zID0gYWFfZ2V0X25hbWVzcGFjZShuZXdfbnMpOworCQl9IGVsc2UgeworCQkJLyogcmFjZWQgc28gZnJlZSB0aGUgbmV3IG9uZSAqLworCQkJZnJlZV9uYW1lc3BhY2UobmV3X25zKTsKKwkJCS8qIGdldCByZWZlcmVuY2Ugb24gbmFtZXNwYWNlICovCisJCQlhYV9nZXRfbmFtZXNwYWNlKG5zKTsKKwkJfQorCX0KK291dDoKKwl3cml0ZV91bmxvY2soJnJvb3QtPmxvY2spOworCisJLyogcmV0dXJuIHJlZiAqLworCXJldHVybiBuczsKK30KKworLyoqCisgKiBfX2xpc3RfYWRkX3Byb2ZpbGUgLSBhZGQgYSBwcm9maWxlIHRvIGEgbGlzdAorICogQGxpc3Q6IGxpc3QgdG8gYWRkIGl0IHRvICAoTk9UIE5VTEwpCisgKiBAcHJvZmlsZTogdGhlIHByb2ZpbGUgdG8gYWRkICAoTk9UIE5VTEwpCisgKgorICogcmVmY291bnQgQHByb2ZpbGUsIHNob3VsZCBiZSBwdXQgYnkgX19saXN0X3JlbW92ZV9wcm9maWxlCisgKgorICogUmVxdWlyZXM6IG5hbWVzcGFjZSBsb2NrIGJlIGhlbGQsIG9yIGxpc3Qgbm90IGJlIHNoYXJlZAorICovCitzdGF0aWMgdm9pZCBfX2xpc3RfYWRkX3Byb2ZpbGUoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKKwkJCSAgICAgICBzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSkKK3sKKwlsaXN0X2FkZCgmcHJvZmlsZS0+YmFzZS5saXN0LCBsaXN0KTsKKwkvKiBnZXQgbGlzdCByZWZlcmVuY2UgKi8KKwlhYV9nZXRfcHJvZmlsZShwcm9maWxlKTsKK30KKworLyoqCisgKiBfX2xpc3RfcmVtb3ZlX3Byb2ZpbGUgLSByZW1vdmUgYSBwcm9maWxlIGZyb20gdGhlIGxpc3QgaXQgaXMgb24KKyAqIEBwcm9maWxlOiB0aGUgcHJvZmlsZSB0byByZW1vdmUgIChOT1QgTlVMTCkKKyAqCisgKiByZW1vdmUgYSBwcm9maWxlIGZyb20gdGhlIGxpc3QsIHdhcm5pbmcgZ2VuZXJhbGx5IHJlbW92YWwgc2hvdWxkCisgKiBiZSBkb25lIHdpdGggX19yZXBsYWNlX3Byb2ZpbGUgYXMgbW9zdCBwcm9maWxlIHJlbW92YWxzIGFyZQorICogcmVwbGFjZW1lbnRzIHRvIHRoZSB1bmNvbmZpbmVkIHByb2ZpbGUuCisgKgorICogcHV0IEBwcm9maWxlIGxpc3QgcmVmY291bnQKKyAqCisgKiBSZXF1aXJlczogbmFtZXNwYWNlIGxvY2sgYmUgaGVsZCwgb3IgbGlzdCBub3QgaGF2ZSBiZWVuIGxpdmUKKyAqLworc3RhdGljIHZvaWQgX19saXN0X3JlbW92ZV9wcm9maWxlKHN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlKQoreworCWxpc3RfZGVsX2luaXQoJnByb2ZpbGUtPmJhc2UubGlzdCk7CisJaWYgKCEocHJvZmlsZS0+ZmxhZ3MgJiBQRkxBR19OT19MSVNUX1JFRikpCisJCS8qIHJlbGVhc2UgbGlzdCByZWZlcmVuY2UgKi8KKwkJYWFfcHV0X3Byb2ZpbGUocHJvZmlsZSk7Cit9CisKKy8qKgorICogX19yZXBsYWNlX3Byb2ZpbGUgLSByZXBsYWNlIEBvbGQgd2l0aCBAbmV3IG9uIGEgbGlzdAorICogQG9sZDogcHJvZmlsZSB0byBiZSByZXBsYWNlZCAgKE5PVCBOVUxMKQorICogQG5ldzogcHJvZmlsZSB0byByZXBsYWNlIEBvbGQgd2l0aCAgKE5PVCBOVUxMKQorICoKKyAqIFdpbGwgZHVwbGljYXRlIGFuZCByZWZjb3VudCBlbGVtZW50cyB0aGF0IEBuZXcgaW5oZXJpdHMgZnJvbSBAb2xkCisgKiBhbmQgd2lsbCBpbmhlcml0IEBvbGQgY2hpbGRyZW4uCisgKgorICogcmVmY291bnQgQG5ldyBmb3IgbGlzdCwgcHV0IEBvbGQgbGlzdCByZWZjb3VudAorICoKKyAqIFJlcXVpcmVzOiBuYW1lc3BhY2UgbGlzdCBsb2NrIGJlIGhlbGQsIG9yIGxpc3Qgbm90IGJlIHNoYXJlZAorICovCitzdGF0aWMgdm9pZCBfX3JlcGxhY2VfcHJvZmlsZShzdHJ1Y3QgYWFfcHJvZmlsZSAqb2xkLCBzdHJ1Y3QgYWFfcHJvZmlsZSAqbmV3KQoreworCXN0cnVjdCBhYV9wb2xpY3kgKnBvbGljeTsKKwlzdHJ1Y3QgYWFfcHJvZmlsZSAqY2hpbGQsICp0bXA7CisKKwlpZiAob2xkLT5wYXJlbnQpCisJCXBvbGljeSA9ICZvbGQtPnBhcmVudC0+YmFzZTsKKwllbHNlCisJCXBvbGljeSA9ICZvbGQtPm5zLT5iYXNlOworCisJLyogcmVsZWFzZWQgd2hlbiBAbmV3IGlzIGZyZWVkICovCisJbmV3LT5wYXJlbnQgPSBhYV9nZXRfcHJvZmlsZShvbGQtPnBhcmVudCk7CisJbmV3LT5ucyA9IGFhX2dldF9uYW1lc3BhY2Uob2xkLT5ucyk7CisJbmV3LT5zaWQgPSBvbGQtPnNpZDsKKwlfX2xpc3RfYWRkX3Byb2ZpbGUoJnBvbGljeS0+cHJvZmlsZXMsIG5ldyk7CisJLyogaW5oZXJpdCBjaGlsZHJlbiAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaGlsZCwgdG1wLCAmb2xkLT5iYXNlLnByb2ZpbGVzLCBiYXNlLmxpc3QpIHsKKwkJYWFfcHV0X3Byb2ZpbGUoY2hpbGQtPnBhcmVudCk7CisJCWNoaWxkLT5wYXJlbnQgPSBhYV9nZXRfcHJvZmlsZShuZXcpOworCQkvKiBsaXN0IHJlZmNvdW50IHRyYW5zZmVycmVkIHRvIEBuZXcqLworCQlsaXN0X21vdmUoJmNoaWxkLT5iYXNlLmxpc3QsICZuZXctPmJhc2UucHJvZmlsZXMpOworCX0KKworCS8qIHJlbGVhc2VkIGJ5IGZyZWVfcHJvZmlsZSAqLworCW9sZC0+cmVwbGFjZWRieSA9IGFhX2dldF9wcm9maWxlKG5ldyk7CisJX19saXN0X3JlbW92ZV9wcm9maWxlKG9sZCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fcHJvZmlsZV9saXN0X3JlbGVhc2Uoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7CisKKy8qKgorICogX19yZW1vdmVfcHJvZmlsZSAtIHJlbW92ZSBvbGQgcHJvZmlsZSwgYW5kIGNoaWxkcmVuCisgKiBAcHJvZmlsZTogcHJvZmlsZSB0byBiZSByZXBsYWNlZCAgKE5PVCBOVUxMKQorICoKKyAqIFJlcXVpcmVzOiBuYW1lc3BhY2UgbGlzdCBsb2NrIGJlIGhlbGQsIG9yIGxpc3Qgbm90IGJlIHNoYXJlZAorICovCitzdGF0aWMgdm9pZCBfX3JlbW92ZV9wcm9maWxlKHN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlKQoreworCS8qIHJlbGVhc2UgYW55IGNoaWxkcmVuIGxpc3RzIGZpcnN0ICovCisJX19wcm9maWxlX2xpc3RfcmVsZWFzZSgmcHJvZmlsZS0+YmFzZS5wcm9maWxlcyk7CisJLyogcmVsZWFzZWQgYnkgZnJlZV9wcm9maWxlICovCisJcHJvZmlsZS0+cmVwbGFjZWRieSA9IGFhX2dldF9wcm9maWxlKHByb2ZpbGUtPm5zLT51bmNvbmZpbmVkKTsKKwlfX2xpc3RfcmVtb3ZlX3Byb2ZpbGUocHJvZmlsZSk7Cit9CisKKy8qKgorICogX19wcm9maWxlX2xpc3RfcmVsZWFzZSAtIHJlbW92ZSBhbGwgcHJvZmlsZXMgb24gdGhlIGxpc3QgYW5kIHB1dCByZWZzCisgKiBAaGVhZDogbGlzdCBvZiBwcm9maWxlcyAgKE5PVCBOVUxMKQorICoKKyAqIFJlcXVpcmVzOiBuYW1lc3BhY2UgbG9jayBiZSBoZWxkCisgKi8KK3N0YXRpYyB2b2lkIF9fcHJvZmlsZV9saXN0X3JlbGVhc2Uoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSwgKnRtcDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJvZmlsZSwgdG1wLCBoZWFkLCBiYXNlLmxpc3QpCisJCV9fcmVtb3ZlX3Byb2ZpbGUocHJvZmlsZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fbnNfbGlzdF9yZWxlYXNlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOworCisvKioKKyAqIGRlc3Ryb3lfbmFtZXNwYWNlIC0gcmVtb3ZlIGV2ZXJ5dGhpbmcgY29udGFpbmVkIGJ5IEBucworICogQG5zOiBuYW1lc3BhY2UgdG8gaGF2ZSBpdCBjb250ZW50cyByZW1vdmVkICAoTk9UIE5VTEwpCisgKi8KK3N0YXRpYyB2b2lkIGRlc3Ryb3lfbmFtZXNwYWNlKHN0cnVjdCBhYV9uYW1lc3BhY2UgKm5zKQoreworCWlmICghbnMpCisJCXJldHVybjsKKworCXdyaXRlX2xvY2soJm5zLT5sb2NrKTsKKwkvKiByZWxlYXNlIGFsbCBwcm9maWxlcyBpbiB0aGlzIG5hbWVzcGFjZSAqLworCV9fcHJvZmlsZV9saXN0X3JlbGVhc2UoJm5zLT5iYXNlLnByb2ZpbGVzKTsKKworCS8qIHJlbGVhc2UgYWxsIHN1YiBuYW1lc3BhY2VzICovCisJX19uc19saXN0X3JlbGVhc2UoJm5zLT5zdWJfbnMpOworCisJd3JpdGVfdW5sb2NrKCZucy0+bG9jayk7Cit9CisKKy8qKgorICogX19yZW1vdmVfbmFtZXNwYWNlIC0gcmVtb3ZlIGEgbmFtZXNwYWNlIGFuZCBhbGwgaXRzIGNoaWxkcmVuCisgKiBAbnM6IG5hbWVzcGFjZSB0byBiZSByZW1vdmVkICAoTk9UIE5VTEwpCisgKgorICogUmVxdWlyZXM6IG5zLT5wYXJlbnQtPmxvY2sgYmUgaGVsZCBhbmQgbnMgcmVtb3ZlZCBmcm9tIHBhcmVudC4KKyAqLworc3RhdGljIHZvaWQgX19yZW1vdmVfbmFtZXNwYWNlKHN0cnVjdCBhYV9uYW1lc3BhY2UgKm5zKQoreworCXN0cnVjdCBhYV9wcm9maWxlICp1bmNvbmZpbmVkID0gbnMtPnVuY29uZmluZWQ7CisKKwkvKiByZW1vdmUgbnMgZnJvbSBuYW1lc3BhY2UgbGlzdCAqLworCWxpc3RfZGVsX2luaXQoJm5zLT5iYXNlLmxpc3QpOworCisJLyoKKwkgKiBicmVhayB0aGUgbnMsIHVuY29uZmluZWQgcHJvZmlsZSBjeWNsaWMgcmVmZXJlbmNlIGFuZCBmb3J3YXJkCisJICogYWxsIG5ldyB1bmNvbmZpbmVkIHByb2ZpbGVzIHJlcXVlc3RzIHRvIHRoZSBwYXJlbnQgbmFtZXNwYWNlCisJICogVGhpcyB3aWxsIHJlc3VsdCBpbiBhbGwgY29uZmluZWQgdGFza3MgdGhhdCBoYXZlIGEgcHJvZmlsZQorCSAqIGJlaW5nIHJlbW92ZWQsIGluaGVyaXRpbmcgdGhlIHBhcmVudC0+dW5jb25maW5lZCBwcm9maWxlLgorCSAqLworCWlmIChucy0+cGFyZW50KQorCQlucy0+dW5jb25maW5lZCA9IGFhX2dldF9wcm9maWxlKG5zLT5wYXJlbnQtPnVuY29uZmluZWQpOworCisJZGVzdHJveV9uYW1lc3BhY2UobnMpOworCisJLyogcmVsZWFzZSBvcmlnaW5hbCBucy0+dW5jb25maW5lZCByZWYgKi8KKwlhYV9wdXRfcHJvZmlsZSh1bmNvbmZpbmVkKTsKKwkvKiByZWxlYXNlIG5zLT5iYXNlLmxpc3QgcmVmLCBmcm9tIHJlbW92YWwgYWJvdmUgKi8KKwlhYV9wdXRfbmFtZXNwYWNlKG5zKTsKK30KKworLyoqCisgKiBfX25zX2xpc3RfcmVsZWFzZSAtIHJlbW92ZSBhbGwgcHJvZmlsZSBuYW1lc3BhY2VzIG9uIHRoZSBsaXN0IHB1dCByZWZzCisgKiBAaGVhZDogbGlzdCBvZiBwcm9maWxlIG5hbWVzcGFjZXMgIChOT1QgTlVMTCkKKyAqCisgKiBSZXF1aXJlczogbmFtZXNwYWNlIGxvY2sgYmUgaGVsZAorICovCitzdGF0aWMgdm9pZCBfX25zX2xpc3RfcmVsZWFzZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXN0cnVjdCBhYV9uYW1lc3BhY2UgKm5zLCAqdG1wOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShucywgdG1wLCBoZWFkLCBiYXNlLmxpc3QpCisJCV9fcmVtb3ZlX25hbWVzcGFjZShucyk7CisKK30KKworLyoqCisgKiBhYV9hbGxvY19yb290X25zIC0gYWxsb2NhdGUgdGhlIHJvb3QgcHJvZmlsZSBuYW1lc3BhY2UKKyAqCisgKiBSZXR1cm5zOiAlMCBvbiBzdWNjZXNzIGVsc2UgZXJyb3IKKyAqCisgKi8KK2ludCBfX2luaXQgYWFfYWxsb2Nfcm9vdF9ucyh2b2lkKQoreworCS8qIHJlbGVhc2VkIGJ5IGFhX2ZyZWVfcm9vdF9ucyAtIHVzZWQgYXMgbGlzdCByZWYqLworCXJvb3RfbnMgPSBhbGxvY19uYW1lc3BhY2UoTlVMTCwgInJvb3QiKTsKKwlpZiAoIXJvb3RfbnMpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKKyAvKioKKyAgKiBhYV9mcmVlX3Jvb3RfbnMgLSBmcmVlIHRoZSByb290IHByb2ZpbGUgbmFtZXNwYWNlCisgICovCit2b2lkIF9faW5pdCBhYV9mcmVlX3Jvb3RfbnModm9pZCkKKyB7CisJIHN0cnVjdCBhYV9uYW1lc3BhY2UgKm5zID0gcm9vdF9uczsKKwkgcm9vdF9ucyA9IE5VTEw7CisKKwkgZGVzdHJveV9uYW1lc3BhY2UobnMpOworCSBhYV9wdXRfbmFtZXNwYWNlKG5zKTsKK30KKworLyoqCisgKiBhYV9hbGxvY19wcm9maWxlIC0gYWxsb2NhdGUsIGluaXRpYWxpemUgYW5kIHJldHVybiBhIG5ldyBwcm9maWxlCisgKiBAaG5hbWU6IG5hbWUgb2YgdGhlIHByb2ZpbGUgIChOT1QgTlVMTCkKKyAqCisgKiBSZXR1cm5zOiByZWZjb3VudCBwcm9maWxlIG9yIE5VTEwgb24gZmFpbHVyZQorICovCitzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfcHJvZmlsZShjb25zdCBjaGFyICpobmFtZSkKK3sKKwlzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZTsKKworCS8qIGZyZWVkIGJ5IGZyZWVfcHJvZmlsZSAtIHVzdWFsbHkgdGhyb3VnaCBhYV9wdXRfcHJvZmlsZSAqLworCXByb2ZpbGUgPSBremFsbG9jKHNpemVvZigqcHJvZmlsZSksIEdGUF9LRVJORUwpOworCWlmICghcHJvZmlsZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIXBvbGljeV9pbml0KCZwcm9maWxlLT5iYXNlLCBOVUxMLCBobmFtZSkpIHsKKwkJa3pmcmVlKHByb2ZpbGUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiByZWZjb3VudCByZWxlYXNlZCBieSBjYWxsZXIgKi8KKwlyZXR1cm4gcHJvZmlsZTsKK30KKworLyoqCisgKiBhYV9uZXdfbnVsbF9wcm9maWxlIC0gY3JlYXRlIGEgbmV3IG51bGwtWCBsZWFybmluZyBwcm9maWxlCisgKiBAcGFyZW50OiBwcm9maWxlIHRoYXQgY2F1c2VkIHRoaXMgcHJvZmlsZSB0byBiZSBjcmVhdGVkIChOT1QgTlVMTCkKKyAqIEBoYXQ6IHRydWUgaWYgdGhlIG51bGwtIGxlYXJuaW5nIHByb2ZpbGUgaXMgYSBoYXQKKyAqCisgKiBDcmVhdGUgYSBudWxsLSBjb21wbGFpbiBtb2RlIHByb2ZpbGUgdXNlZCBpbiBsZWFybmluZyBtb2RlLiAgVGhlIG5hbWUgb2YKKyAqIHRoZSBwcm9maWxlIGlzIHVuaXF1ZSBhbmQgZm9sbG93cyB0aGUgZm9ybWF0IG9mIHBhcmVudC8vbnVsbC1zaWQuCisgKgorICogbnVsbCBwcm9maWxlcyBhcmUgYWRkZWQgdG8gdGhlIHByb2ZpbGUgbGlzdCBidXQgdGhlIGxpc3QgZG9lcyBub3QKKyAqIGhvbGQgYSBjb3VudCBvbiB0aGVtIHNvIHRoYXQgdGhleSBhcmUgYXV0b21hdGljYWxseSByZWxlYXNlZCB3aGVuCisgKiBub3QgaW4gdXNlLgorICoKKyAqIFJldHVybnM6IG5ldyByZWZjb3VudGVkIHByb2ZpbGUgZWxzZSBOVUxMIG9uIGZhaWx1cmUKKyAqLworc3RydWN0IGFhX3Byb2ZpbGUgKmFhX25ld19udWxsX3Byb2ZpbGUoc3RydWN0IGFhX3Byb2ZpbGUgKnBhcmVudCwgaW50IGhhdCkKK3sKKwlzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSA9IE5VTEw7CisJY2hhciAqbmFtZTsKKwl1MzIgc2lkID0gYWFfYWxsb2Nfc2lkKCk7CisKKwkvKiBmcmVlZCBiZWxvdyAqLworCW5hbWUgPSBrbWFsbG9jKHN0cmxlbihwYXJlbnQtPmJhc2UuaG5hbWUpICsgMiArIDcgKyA4LCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5hbWUpCisJCWdvdG8gZmFpbDsKKwlzcHJpbnRmKG5hbWUsICIlcy8vbnVsbC0leCIsIHBhcmVudC0+YmFzZS5obmFtZSwgc2lkKTsKKworCXByb2ZpbGUgPSBhYV9hbGxvY19wcm9maWxlKG5hbWUpOworCWtmcmVlKG5hbWUpOworCWlmICghcHJvZmlsZSkKKwkJZ290byBmYWlsOworCisJcHJvZmlsZS0+c2lkID0gc2lkOworCXByb2ZpbGUtPm1vZGUgPSBBUFBBUk1PUl9DT01QTEFJTjsKKwlwcm9maWxlLT5mbGFncyA9IFBGTEFHX05VTEw7CisJaWYgKGhhdCkKKwkJcHJvZmlsZS0+ZmxhZ3MgfD0gUEZMQUdfSEFUOworCisJLyogcmVsZWFzZWQgb24gZnJlZV9wcm9maWxlICovCisJcHJvZmlsZS0+cGFyZW50ID0gYWFfZ2V0X3Byb2ZpbGUocGFyZW50KTsKKwlwcm9maWxlLT5ucyA9IGFhX2dldF9uYW1lc3BhY2UocGFyZW50LT5ucyk7CisKKwl3cml0ZV9sb2NrKCZwcm9maWxlLT5ucy0+bG9jayk7CisJX19saXN0X2FkZF9wcm9maWxlKCZwYXJlbnQtPmJhc2UucHJvZmlsZXMsIHByb2ZpbGUpOworCXdyaXRlX3VubG9jaygmcHJvZmlsZS0+bnMtPmxvY2spOworCisJLyogcmVmY291bnQgcmVsZWFzZWQgYnkgY2FsbGVyICovCisJcmV0dXJuIHByb2ZpbGU7CisKK2ZhaWw6CisJYWFfZnJlZV9zaWQoc2lkKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBmcmVlX3Byb2ZpbGUgLSBmcmVlIGEgcHJvZmlsZQorICogQHByb2ZpbGU6IHRoZSBwcm9maWxlIHRvIGZyZWUgIChNQVlCRSBOVUxMKQorICoKKyAqIEZyZWUgYSBwcm9maWxlLCBpdHMgaGF0cyBhbmQgbnVsbF9wcm9maWxlLiBBbGwgcmVmZXJlbmNlcyB0byB0aGUgcHJvZmlsZSwKKyAqIGl0cyBoYXRzIGFuZCBudWxsX3Byb2ZpbGUgbXVzdCBoYXZlIGJlZW4gcHV0LgorICoKKyAqIElmIHRoZSBwcm9maWxlIHdhcyByZWZlcmVuY2VkIGZyb20gYSB0YXNrIGNvbnRleHQsIGZyZWVfcHJvZmlsZSgpIHdpbGwKKyAqIGJlIGNhbGxlZCBmcm9tIGFuIHJjdSBjYWxsYmFjayByb3V0aW5lLCBzbyB3ZSBtdXN0IG5vdCBzbGVlcCBoZXJlLgorICovCitzdGF0aWMgdm9pZCBmcmVlX3Byb2ZpbGUoc3RydWN0IGFhX3Byb2ZpbGUgKnByb2ZpbGUpCit7CisJQUFfREVCVUcoIiVzKCVwKVxuIiwgX19mdW5jX18sIHByb2ZpbGUpOworCisJaWYgKCFwcm9maWxlKQorCQlyZXR1cm47CisKKwlpZiAoIWxpc3RfZW1wdHkoJnByb2ZpbGUtPmJhc2UubGlzdCkpIHsKKwkJQUFfRVJST1IoIiVzOiBpbnRlcm5hbCBlcnJvciwgIgorCQkJICJwcm9maWxlICclcycgc3RpbGwgb24gbnMgbGlzdFxuIiwKKwkJCSBfX2Z1bmNfXywgcHJvZmlsZS0+YmFzZS5uYW1lKTsKKwkJQlVHKCk7CisJfQorCisJLyogZnJlZSBjaGlsZHJlbiBwcm9maWxlcyAqLworCXBvbGljeV9kZXN0cm95KCZwcm9maWxlLT5iYXNlKTsKKwlhYV9wdXRfcHJvZmlsZShwcm9maWxlLT5wYXJlbnQpOworCisJYWFfcHV0X25hbWVzcGFjZShwcm9maWxlLT5ucyk7CisJa3pmcmVlKHByb2ZpbGUtPnJlbmFtZSk7CisKKwlhYV9mcmVlX2ZpbGVfcnVsZXMoJnByb2ZpbGUtPmZpbGUpOworCWFhX2ZyZWVfY2FwX3J1bGVzKCZwcm9maWxlLT5jYXBzKTsKKwlhYV9mcmVlX3JsaW1pdF9ydWxlcygmcHJvZmlsZS0+cmxpbWl0cyk7CisKKwlhYV9mcmVlX3NpZChwcm9maWxlLT5zaWQpOworCWFhX3B1dF9kZmEocHJvZmlsZS0+eG1hdGNoKTsKKworCWFhX3B1dF9wcm9maWxlKHByb2ZpbGUtPnJlcGxhY2VkYnkpOworCisJa3pmcmVlKHByb2ZpbGUpOworfQorCisvKioKKyAqIGFhX2ZyZWVfcHJvZmlsZV9rcmVmIC0gZnJlZSBhYV9wcm9maWxlIGJ5IGtyZWYgKGNhbGxlZCBieSBhYV9wdXRfcHJvZmlsZSkKKyAqIEBrcjoga3JlZiBjYWxsYmFjayBmb3IgZnJlZWluZyBvZiBhIHByb2ZpbGUgIChOT1QgTlVMTCkKKyAqLwordm9pZCBhYV9mcmVlX3Byb2ZpbGVfa3JlZihzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgYWFfcHJvZmlsZSAqcCA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgYWFfcHJvZmlsZSwKKwkJCQkJICAgIGJhc2UuY291bnQpOworCisJZnJlZV9wcm9maWxlKHApOworfQorCisvKiBUT0RPOiBwcm9maWxlIGFjY291bnRpbmcgLSBzZXR1cCBpbiByZW1vdmUgKi8KKworLyoqCisgKiBfX2ZpbmRfY2hpbGQgLSBmaW5kIGEgcHJvZmlsZSBvbiBAaGVhZCBsaXN0IHdpdGggYSBuYW1lIG1hdGNoaW5nIEBuYW1lCisgKiBAaGVhZDogbGlzdCB0byBzZWFyY2ggIChOT1QgTlVMTCkKKyAqIEBuYW1lOiBuYW1lIG9mIHByb2ZpbGUgKE5PVCBOVUxMKQorICoKKyAqIFJlcXVpcmVzOiBucyBsb2NrIHByb3RlY3RpbmcgbGlzdCBiZSBoZWxkCisgKgorICogUmV0dXJuczogdW5yZWZjb3VudGVkIHByb2ZpbGUgcHRyLCBvciBOVUxMIGlmIG5vdCBmb3VuZAorICovCitzdGF0aWMgc3RydWN0IGFhX3Byb2ZpbGUgKl9fZmluZF9jaGlsZChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBjb25zdCBjaGFyICpuYW1lKQoreworCXJldHVybiAoc3RydWN0IGFhX3Byb2ZpbGUgKilfX3BvbGljeV9maW5kKGhlYWQsIG5hbWUpOworfQorCisvKioKKyAqIF9fc3Rybl9maW5kX2NoaWxkIC0gZmluZCBhIHByb2ZpbGUgb24gQGhlYWQgbGlzdCB1c2luZyBzdWJzdHJpbmcgb2YgQG5hbWUKKyAqIEBoZWFkOiBsaXN0IHRvIHNlYXJjaCAgKE5PVCBOVUxMKQorICogQG5hbWU6IG5hbWUgb2YgcHJvZmlsZSAoTk9UIE5VTEwpCisgKiBAbGVuOiBsZW5ndGggb2YgQG5hbWUgc3Vic3RyaW5nIHRvIG1hdGNoCisgKgorICogUmVxdWlyZXM6IG5zIGxvY2sgcHJvdGVjdGluZyBsaXN0IGJlIGhlbGQKKyAqCisgKiBSZXR1cm5zOiB1bnJlZmNvdW50ZWQgcHJvZmlsZSBwdHIsIG9yIE5VTEwgaWYgbm90IGZvdW5kCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYWFfcHJvZmlsZSAqX19zdHJuX2ZpbmRfY2hpbGQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCit7CisJcmV0dXJuIChzdHJ1Y3QgYWFfcHJvZmlsZSAqKV9fcG9saWN5X3N0cm5fZmluZChoZWFkLCBuYW1lLCBsZW4pOworfQorCisvKioKKyAqIGFhX2ZpbmRfY2hpbGQgLSBmaW5kIGEgcHJvZmlsZSBieSBAbmFtZSBpbiBAcGFyZW50CisgKiBAcGFyZW50OiBwcm9maWxlIHRvIHNlYXJjaCAgKE5PVCBOVUxMKQorICogQG5hbWU6IHByb2ZpbGUgbmFtZSB0byBzZWFyY2ggZm9yICAoTk9UIE5VTEwpCisgKgorICogUmV0dXJuczogYSByZWZjb3VudGVkIHByb2ZpbGUgb3IgTlVMTCBpZiBub3QgZm91bmQKKyAqLworc3RydWN0IGFhX3Byb2ZpbGUgKmFhX2ZpbmRfY2hpbGQoc3RydWN0IGFhX3Byb2ZpbGUgKnBhcmVudCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZTsKKworCXJlYWRfbG9jaygmcGFyZW50LT5ucy0+bG9jayk7CisJcHJvZmlsZSA9IGFhX2dldF9wcm9maWxlKF9fZmluZF9jaGlsZCgmcGFyZW50LT5iYXNlLnByb2ZpbGVzLCBuYW1lKSk7CisJcmVhZF91bmxvY2soJnBhcmVudC0+bnMtPmxvY2spOworCisJLyogcmVmY291bnQgcmVsZWFzZWQgYnkgY2FsbGVyICovCisJcmV0dXJuIHByb2ZpbGU7Cit9CisKKy8qKgorICogX19sb29rdXBfcGFyZW50IC0gbG9va3VwIHRoZSBwYXJlbnQgb2YgYSBwcm9maWxlIG9mIG5hbWUgQGhuYW1lCisgKiBAbnM6IG5hbWVzcGFjZSB0byBsb29rdXAgcHJvZmlsZSBpbiAgKE5PVCBOVUxMKQorICogQGhuYW1lOiBoaWVyYXJjaGljYWwgcHJvZmlsZSBuYW1lIHRvIGZpbmQgcGFyZW50IG9mICAoTk9UIE5VTEwpCisgKgorICogTG9va3VwcyB1cCB0aGUgcGFyZW50IG9mIGEgZnVsbHkgcXVhbGlmaWVkIHByb2ZpbGUgbmFtZSwgdGhlIHByb2ZpbGUKKyAqIHRoYXQgbWF0Y2hlcyBobmFtZSBkb2VzIG5vdCBuZWVkIHRvIGV4aXN0LCBpbiBnZW5lcmFsIHRoaXMKKyAqIGlzIHVzZWQgdG8gbG9hZCBhIG5ldyBwcm9maWxlLgorICoKKyAqIFJlcXVpcmVzOiBucy0+bG9jayBiZSBoZWxkCisgKgorICogUmV0dXJuczogdW5yZWZjb3VudGVkIHBvbGljeSBvciBOVUxMIGlmIG5vdCBmb3VuZAorICovCitzdGF0aWMgc3RydWN0IGFhX3BvbGljeSAqX19sb29rdXBfcGFyZW50KHN0cnVjdCBhYV9uYW1lc3BhY2UgKm5zLAorCQkJCQkgY29uc3QgY2hhciAqaG5hbWUpCit7CisJc3RydWN0IGFhX3BvbGljeSAqcG9saWN5OworCXN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlID0gTlVMTDsKKwljaGFyICpzcGxpdDsKKworCXBvbGljeSA9ICZucy0+YmFzZTsKKworCWZvciAoc3BsaXQgPSBzdHJzdHIoaG5hbWUsICIvLyIpOyBzcGxpdDspIHsKKwkJcHJvZmlsZSA9IF9fc3Rybl9maW5kX2NoaWxkKCZwb2xpY3ktPnByb2ZpbGVzLCBobmFtZSwKKwkJCQkJICAgIHNwbGl0IC0gaG5hbWUpOworCQlpZiAoIXByb2ZpbGUpCisJCQlyZXR1cm4gTlVMTDsKKwkJcG9saWN5ID0gJnByb2ZpbGUtPmJhc2U7CisJCWhuYW1lID0gc3BsaXQgKyAyOworCQlzcGxpdCA9IHN0cnN0cihobmFtZSwgIi8vIik7CisJfQorCWlmICghcHJvZmlsZSkKKwkJcmV0dXJuICZucy0+YmFzZTsKKwlyZXR1cm4gJnByb2ZpbGUtPmJhc2U7Cit9CisKKy8qKgorICogX19sb29rdXBfcHJvZmlsZSAtIGxvb2t1cCB0aGUgcHJvZmlsZSBtYXRjaGluZyBAaG5hbWUKKyAqIEBiYXNlOiBiYXNlIGxpc3QgdG8gc3RhcnQgbG9va2luZyB1cCBwcm9maWxlIG5hbWUgZnJvbSAgKE5PVCBOVUxMKQorICogQGhuYW1lOiBoaWVyYXJjaGljYWwgcHJvZmlsZSBuYW1lICAoTk9UIE5VTEwpCisgKgorICogUmVxdWlyZXM6IG5zLT5sb2NrIGJlIGhlbGQKKyAqCisgKiBSZXR1cm5zOiB1bnJlZmNvdW50ZWQgcHJvZmlsZSBwb2ludGVyIG9yIE5VTEwgaWYgbm90IGZvdW5kCisgKgorICogRG8gYSByZWxhdGl2ZSBuYW1lIGxvb2t1cCwgcmVjdXJzaW5nIHRocm91Z2ggcHJvZmlsZSB0cmVlLgorICovCitzdGF0aWMgc3RydWN0IGFhX3Byb2ZpbGUgKl9fbG9va3VwX3Byb2ZpbGUoc3RydWN0IGFhX3BvbGljeSAqYmFzZSwKKwkJCQkJICAgY29uc3QgY2hhciAqaG5hbWUpCit7CisJc3RydWN0IGFhX3Byb2ZpbGUgKnByb2ZpbGUgPSBOVUxMOworCWNoYXIgKnNwbGl0OworCisJZm9yIChzcGxpdCA9IHN0cnN0cihobmFtZSwgIi8vIik7IHNwbGl0OykgeworCQlwcm9maWxlID0gX19zdHJuX2ZpbmRfY2hpbGQoJmJhc2UtPnByb2ZpbGVzLCBobmFtZSwKKwkJCQkJICAgIHNwbGl0IC0gaG5hbWUpOworCQlpZiAoIXByb2ZpbGUpCisJCQlyZXR1cm4gTlVMTDsKKworCQliYXNlID0gJnByb2ZpbGUtPmJhc2U7CisJCWhuYW1lID0gc3BsaXQgKyAyOworCQlzcGxpdCA9IHN0cnN0cihobmFtZSwgIi8vIik7CisJfQorCisJcHJvZmlsZSA9IF9fZmluZF9jaGlsZCgmYmFzZS0+cHJvZmlsZXMsIGhuYW1lKTsKKworCXJldHVybiBwcm9maWxlOworfQorCisvKioKKyAqIGFhX2xvb2t1cF9wcm9maWxlIC0gZmluZCBhIHByb2ZpbGUgYnkgaXRzIGZ1bGwgb3IgcGFydGlhbCBuYW1lCisgKiBAbnM6IHRoZSBuYW1lc3BhY2UgdG8gc3RhcnQgZnJvbSAoTk9UIE5VTEwpCisgKiBAaG5hbWU6IG5hbWUgdG8gZG8gbG9va3VwIG9uLiAgRG9lcyBub3QgY29udGFpbiBuYW1lc3BhY2UgcHJlZml4IChOT1QgTlVMTCkKKyAqCisgKiBSZXR1cm5zOiByZWZjb3VudGVkIHByb2ZpbGUgb3IgTlVMTCBpZiBub3QgZm91bmQKKyAqLworc3RydWN0IGFhX3Byb2ZpbGUgKmFhX2xvb2t1cF9wcm9maWxlKHN0cnVjdCBhYV9uYW1lc3BhY2UgKm5zLCBjb25zdCBjaGFyICpobmFtZSkKK3sKKwlzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZTsKKworCXJlYWRfbG9jaygmbnMtPmxvY2spOworCXByb2ZpbGUgPSBhYV9nZXRfcHJvZmlsZShfX2xvb2t1cF9wcm9maWxlKCZucy0+YmFzZSwgaG5hbWUpKTsKKwlyZWFkX3VubG9jaygmbnMtPmxvY2spOworCisJLyogcmVmY291bnQgcmVsZWFzZWQgYnkgY2FsbGVyICovCisJcmV0dXJuIHByb2ZpbGU7Cit9CisKKy8qKgorICogcmVwbGFjZW1lbnRfYWxsb3dlZCAtIHRlc3QgdG8gc2VlIGlmIHJlcGxhY2VtZW50IGlzIGFsbG93ZWQKKyAqIEBwcm9maWxlOiBwcm9maWxlIHRvIHRlc3QgaWYgaXQgY2FuIGJlIHJlcGxhY2VkICAoTUFZQkUgTlVMTCkKKyAqIEBub3JlcGxhY2U6IHRydWUgaWYgcmVwbGFjZW1lbnQgc2hvdWxkbid0IGJlIGFsbG93ZWQgYnV0IGFkZGl0aW9uIGlzIG9rYXkKKyAqIEBpbmZvOiBSZXR1cm5zIC0gaW5mbyBhYm91dCB3aHkgcmVwbGFjZW1lbnQgZmFpbGVkIChOT1QgTlVMTCkKKyAqCisgKiBSZXR1cm5zOiAlMCBpZiByZXBsYWNlbWVudCBhbGxvd2VkIGVsc2UgZXJyb3IgY29kZQorICovCitzdGF0aWMgaW50IHJlcGxhY2VtZW50X2FsbG93ZWQoc3RydWN0IGFhX3Byb2ZpbGUgKnByb2ZpbGUsIGludCBub3JlcGxhY2UsCisJCQkgICAgICAgY29uc3QgY2hhciAqKmluZm8pCit7CisJaWYgKHByb2ZpbGUpIHsKKwkJaWYgKHByb2ZpbGUtPmZsYWdzICYgUEZMQUdfSU1NVVRBQkxFKSB7CisJCQkqaW5mbyA9ICJjYW5ub3QgcmVwbGFjZSBpbW11dGlibGUgcHJvZmlsZSI7CisJCQlyZXR1cm4gLUVQRVJNOworCQl9IGVsc2UgaWYgKG5vcmVwbGFjZSkgeworCQkJKmluZm8gPSAicHJvZmlsZSBhbHJlYWR5IGV4aXN0cyI7CisJCQlyZXR1cm4gLUVFWElTVDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfX2FkZF9uZXdfcHJvZmlsZSAtIHNpbXBsZSB3cmFwcGVyIGFyb3VuZCBfX2xpc3RfYWRkX3Byb2ZpbGUKKyAqIEBuczogbmFtZXNwYWNlIHRoYXQgcHJvZmlsZSBpcyBiZWluZyBhZGRlZCB0byAgKE5PVCBOVUxMKQorICogQHBvbGljeTogdGhlIHBvbGljeSBjb250YWluZXIgdG8gYWRkIHRoZSBwcm9maWxlIHRvICAoTk9UIE5VTEwpCisgKiBAcHJvZmlsZTogcHJvZmlsZSB0byBhZGQgIChOT1QgTlVMTCkKKyAqCisgKiBhZGQgYSBwcm9maWxlIHRvIGEgbGlzdCBhbmQgZG8gb3RoZXIgcmVxdWlyZWQgYmFzaWMgYWxsb2NhdGlvbnMKKyAqLworc3RhdGljIHZvaWQgX19hZGRfbmV3X3Byb2ZpbGUoc3RydWN0IGFhX25hbWVzcGFjZSAqbnMsIHN0cnVjdCBhYV9wb2xpY3kgKnBvbGljeSwKKwkJCSAgICAgIHN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlKQoreworCWlmIChwb2xpY3kgIT0gJm5zLT5iYXNlKQorCQkvKiByZWxlYXNlZCBvbiBwcm9maWxlIHJlcGxhY2VtZW50IG9yIGZyZWVfcHJvZmlsZSAqLworCQlwcm9maWxlLT5wYXJlbnQgPSBhYV9nZXRfcHJvZmlsZSgoc3RydWN0IGFhX3Byb2ZpbGUgKikgcG9saWN5KTsKKwlfX2xpc3RfYWRkX3Byb2ZpbGUoJnBvbGljeS0+cHJvZmlsZXMsIHByb2ZpbGUpOworCS8qIHJlbGVhc2VkIG9uIGZyZWVfcHJvZmlsZSAqLworCXByb2ZpbGUtPnNpZCA9IGFhX2FsbG9jX3NpZCgpOworCXByb2ZpbGUtPm5zID0gYWFfZ2V0X25hbWVzcGFjZShucyk7Cit9CisKKy8qKgorICogYWFfYXVkaXRfcG9saWN5IC0gRG8gYXVkaXRpbmcgb2YgcG9saWN5IGNoYW5nZXMKKyAqIEBvcDogcG9saWN5IG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWQKKyAqIEBnZnA6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzCisgKiBAbmFtZTogbmFtZSBvZiBwcm9maWxlIGJlaW5nIG1hbmlwdWxhdGVkIChOT1QgTlVMTCkKKyAqIEBpbmZvOiBhbnkgZXh0cmEgaW5mb3JtYXRpb24gdG8gYmUgYXVkaXRlZCAoTUFZQkUgTlVMTCkKKyAqIEBlcnJvcjogZXJyb3IgY29kZQorICoKKyAqIFJldHVybnM6IHRoZSBlcnJvciB0byBiZSByZXR1cm5lZCBhZnRlciBhdWRpdCBpcyBkb25lCisgKi8KK3N0YXRpYyBpbnQgYXVkaXRfcG9saWN5KGludCBvcCwgZ2ZwX3QgZ2ZwLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICppbmZvLAorCQkJaW50IGVycm9yKQoreworCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBzYTsKKwlDT01NT05fQVVESVRfREFUQV9JTklUKCZzYSwgTk9ORSk7CisJc2EuYWFkLm9wID0gb3A7CisJc2EuYWFkLm5hbWUgPSBuYW1lOworCXNhLmFhZC5pbmZvID0gaW5mbzsKKwlzYS5hYWQuZXJyb3IgPSBlcnJvcjsKKworCXJldHVybiBhYV9hdWRpdChBVURJVF9BUFBBUk1PUl9TVEFUVVMsIF9fYWFfY3VycmVudF9wcm9maWxlKCksIGdmcCwKKwkJCSZzYSwgTlVMTCk7Cit9CisKKy8qKgorICogYWFfbWF5X21hbmFnZV9wb2xpY3kgLSBjYW4gdGhlIGN1cnJlbnQgdGFzayBtYW5hZ2UgcG9saWN5CisgKiBAb3A6IHRoZSBwb2xpY3kgbWFuaXB1bGF0aW9uIG9wZXJhdGlvbiBiZWluZyBkb25lCisgKgorICogUmV0dXJuczogdHJ1ZSBpZiB0aGUgdGFzayBpcyBhbGxvd2VkIHRvIG1hbmlwdWxhdGUgcG9saWN5CisgKi8KK2Jvb2wgYWFfbWF5X21hbmFnZV9wb2xpY3koaW50IG9wKQoreworCS8qIGNoZWNrIGlmIGxvYWRpbmcgcG9saWN5IGlzIGxvY2tlZCBvdXQgKi8KKwlpZiAoYWFfZ19sb2NrX3BvbGljeSkgeworCQlhdWRpdF9wb2xpY3kob3AsIEdGUF9LRVJORUwsIE5VTEwsICJwb2xpY3lfbG9ja2VkIiwgLUVBQ0NFUyk7CisJCXJldHVybiAwOworCX0KKworCWlmICghY2FwYWJsZShDQVBfTUFDX0FETUlOKSkgeworCQlhdWRpdF9wb2xpY3kob3AsIEdGUF9LRVJORUwsIE5VTEwsICJub3QgcG9saWN5IGFkbWluIiwgLUVBQ0NFUyk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCisvKioKKyAqIGFhX3JlcGxhY2VfcHJvZmlsZXMgLSByZXBsYWNlIHByb2ZpbGUocykgb24gdGhlIHByb2ZpbGUgbGlzdAorICogQHVkYXRhOiBzZXJpYWxpemVkIGRhdGEgc3RyZWFtICAoTk9UIE5VTEwpCisgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgc2VyaWFsaXplZCBkYXRhIHN0cmVhbQorICogQG5vcmVwbGFjZTogdHJ1ZSBpZiBvbmx5IGRvaW5nIGFkZGl0aW9uLCBubyByZXBsYWNlbWVudCBhbGxvd2VkCisgKgorICogdW5wYWNrIGFuZCByZXBsYWNlIGEgcHJvZmlsZSBvbiB0aGUgcHJvZmlsZSBsaXN0IGFuZCB1c2VzIG9mIHRoYXQgcHJvZmlsZQorICogYnkgYW55IGFhX3Rhc2tfY3h0LiAgSWYgdGhlIHByb2ZpbGUgZG9lcyBub3QgZXhpc3Qgb24gdGhlIHByb2ZpbGUgbGlzdAorICogaXQgaXMgYWRkZWQuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBkYXRhIGNvbnN1bWVkIGVsc2UgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitzc2l6ZV90IGFhX3JlcGxhY2VfcHJvZmlsZXModm9pZCAqdWRhdGEsIHNpemVfdCBzaXplLCBib29sIG5vcmVwbGFjZSkKK3sKKwlzdHJ1Y3QgYWFfcG9saWN5ICpwb2xpY3k7CisJc3RydWN0IGFhX3Byb2ZpbGUgKm9sZF9wcm9maWxlID0gTlVMTCwgKm5ld19wcm9maWxlID0gTlVMTDsKKwlzdHJ1Y3QgYWFfcHJvZmlsZSAqcmVuYW1lX3Byb2ZpbGUgPSBOVUxMOworCXN0cnVjdCBhYV9uYW1lc3BhY2UgKm5zID0gTlVMTDsKKwljb25zdCBjaGFyICpuc19uYW1lLCAqbmFtZSA9IE5VTEwsICppbmZvID0gTlVMTDsKKwlpbnQgb3AgPSBPUF9QUk9GX1JFUEw7CisJc3NpemVfdCBlcnJvcjsKKworCS8qIHJlbGVhc2VkIGJlbG93ICovCisJbmV3X3Byb2ZpbGUgPSBhYV91bnBhY2sodWRhdGEsIHNpemUsICZuc19uYW1lKTsKKwlpZiAoSVNfRVJSKG5ld19wcm9maWxlKSkgeworCQllcnJvciA9IFBUUl9FUlIobmV3X3Byb2ZpbGUpOworCQluZXdfcHJvZmlsZSA9IE5VTEw7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiByZWxlYXNlZCBiZWxvdyAqLworCW5zID0gYWFfcHJlcGFyZV9uYW1lc3BhY2UobnNfbmFtZSk7CisJaWYgKCFucykgeworCQlpbmZvID0gImZhaWxlZCB0byBwcmVwYXJlIG5hbWVzcGFjZSI7CisJCWVycm9yID0gLUVOT01FTTsKKwkJbmFtZSA9IG5zX25hbWU7CisJCWdvdG8gZmFpbDsKKwl9CisKKwluYW1lID0gbmV3X3Byb2ZpbGUtPmJhc2UuaG5hbWU7CisKKwl3cml0ZV9sb2NrKCZucy0+bG9jayk7CisJLyogbm8gcmVmIG9uIHBvbGljeSBvbmx5IHVzZSBpbnNpZGUgbG9jayAqLworCXBvbGljeSA9IF9fbG9va3VwX3BhcmVudChucywgbmV3X3Byb2ZpbGUtPmJhc2UuaG5hbWUpOworCisJaWYgKCFwb2xpY3kpIHsKKwkJaW5mbyA9ICJwYXJlbnQgZG9lcyBub3QgZXhpc3QiOworCQllcnJvciA9IC1FTk9FTlQ7CisJCWdvdG8gYXVkaXQ7CisJfQorCisJb2xkX3Byb2ZpbGUgPSBfX2ZpbmRfY2hpbGQoJnBvbGljeS0+cHJvZmlsZXMsIG5ld19wcm9maWxlLT5iYXNlLm5hbWUpOworCS8qIHJlbGVhc2VkIGJlbG93ICovCisJYWFfZ2V0X3Byb2ZpbGUob2xkX3Byb2ZpbGUpOworCisJaWYgKG5ld19wcm9maWxlLT5yZW5hbWUpIHsKKwkJcmVuYW1lX3Byb2ZpbGUgPSBfX2xvb2t1cF9wcm9maWxlKCZucy0+YmFzZSwKKwkJCQkJCSAgbmV3X3Byb2ZpbGUtPnJlbmFtZSk7CisJCS8qIHJlbGVhc2VkIGJlbG93ICovCisJCWFhX2dldF9wcm9maWxlKHJlbmFtZV9wcm9maWxlKTsKKworCQlpZiAoIXJlbmFtZV9wcm9maWxlKSB7CisJCQlpbmZvID0gInByb2ZpbGUgdG8gcmVuYW1lIGRvZXMgbm90IGV4aXN0IjsKKwkJCW5hbWUgPSBuZXdfcHJvZmlsZS0+cmVuYW1lOworCQkJZXJyb3IgPSAtRU5PRU5UOworCQkJZ290byBhdWRpdDsKKwkJfQorCX0KKworCWVycm9yID0gcmVwbGFjZW1lbnRfYWxsb3dlZChvbGRfcHJvZmlsZSwgbm9yZXBsYWNlLCAmaW5mbyk7CisJaWYgKGVycm9yKQorCQlnb3RvIGF1ZGl0OworCisJZXJyb3IgPSByZXBsYWNlbWVudF9hbGxvd2VkKHJlbmFtZV9wcm9maWxlLCBub3JlcGxhY2UsICZpbmZvKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gYXVkaXQ7CisKK2F1ZGl0OgorCWlmICghb2xkX3Byb2ZpbGUgJiYgIXJlbmFtZV9wcm9maWxlKQorCQlvcCA9IE9QX1BST0ZfTE9BRDsKKworCWVycm9yID0gYXVkaXRfcG9saWN5KG9wLCBHRlBfQVRPTUlDLCBuYW1lLCBpbmZvLCBlcnJvcik7CisKKwlpZiAoIWVycm9yKSB7CisJCWlmIChyZW5hbWVfcHJvZmlsZSkKKwkJCV9fcmVwbGFjZV9wcm9maWxlKHJlbmFtZV9wcm9maWxlLCBuZXdfcHJvZmlsZSk7CisJCWlmIChvbGRfcHJvZmlsZSkgeworCQkJLyogd2hlbiB0aGVyZSBhcmUgYm90aCByZW5hbWUgYW5kIG9sZCBwcm9maWxlcworCQkJICogaW5oZXJpdCBvbGQgcHJvZmlsZXMgc2lkCisJCQkgKi8KKwkJCWlmIChyZW5hbWVfcHJvZmlsZSkKKwkJCQlhYV9mcmVlX3NpZChuZXdfcHJvZmlsZS0+c2lkKTsKKwkJCV9fcmVwbGFjZV9wcm9maWxlKG9sZF9wcm9maWxlLCBuZXdfcHJvZmlsZSk7CisJCX0KKwkJaWYgKCEob2xkX3Byb2ZpbGUgfHwgcmVuYW1lX3Byb2ZpbGUpKQorCQkJX19hZGRfbmV3X3Byb2ZpbGUobnMsIHBvbGljeSwgbmV3X3Byb2ZpbGUpOworCX0KKwl3cml0ZV91bmxvY2soJm5zLT5sb2NrKTsKKworb3V0OgorCWFhX3B1dF9uYW1lc3BhY2UobnMpOworCWFhX3B1dF9wcm9maWxlKHJlbmFtZV9wcm9maWxlKTsKKwlhYV9wdXRfcHJvZmlsZShvbGRfcHJvZmlsZSk7CisJYWFfcHV0X3Byb2ZpbGUobmV3X3Byb2ZpbGUpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCXJldHVybiBzaXplOworCitmYWlsOgorCWVycm9yID0gYXVkaXRfcG9saWN5KG9wLCBHRlBfS0VSTkVMLCBuYW1lLCBpbmZvLCBlcnJvcik7CisJZ290byBvdXQ7Cit9CisKKy8qKgorICogYWFfcmVtb3ZlX3Byb2ZpbGVzIC0gcmVtb3ZlIHByb2ZpbGUocykgZnJvbSB0aGUgc3lzdGVtCisgKiBAZnFuYW1lOiBuYW1lIG9mIHRoZSBwcm9maWxlIG9yIG5hbWVzcGFjZSB0byByZW1vdmUgIChOT1QgTlVMTCkKKyAqIEBzaXplOiBzaXplIG9mIHRoZSBuYW1lCisgKgorICogUmVtb3ZlIGEgcHJvZmlsZSBvciBzdWIgbmFtZXNwYWNlIGZyb20gdGhlIGN1cnJlbnQgbmFtZXNwYWNlLCBzbyB0aGF0CisgKiB0aGV5IGNhbiBub3QgYmUgZm91bmQgYW55bW9yZSBhbmQgbWFyayB0aGVtIGFzIHJlcGxhY2VkIGJ5IHVuY29uZmluZWQKKyAqCisgKiBOT1RFOiByZW1vdmluZyBjb25maW5lbWVudCBkb2VzIG5vdCByZXN0b3JlIHJsaW1pdHMgdG8gcHJlY29uZmluZW1uZXQgdmFsdWVzCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBkYXRhIGNvbnN1bWUgZWxzZSBlcnJvciBjb2RlIGlmIGZhaWxzCisgKi8KK3NzaXplX3QgYWFfcmVtb3ZlX3Byb2ZpbGVzKGNoYXIgKmZxbmFtZSwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGFhX25hbWVzcGFjZSAqcm9vdCwgKm5zID0gTlVMTDsKKwlzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSA9IE5VTEw7CisJY29uc3QgY2hhciAqbmFtZSA9IGZxbmFtZSwgKmluZm8gPSBOVUxMOworCXNzaXplX3QgZXJyb3IgPSAwOworCisJaWYgKCpmcW5hbWUgPT0gMCkgeworCQlpbmZvID0gIm5vIHByb2ZpbGUgc3BlY2lmaWVkIjsKKwkJZXJyb3IgPSAtRU5PRU5UOworCQlnb3RvIGZhaWw7CisJfQorCisJcm9vdCA9IGFhX2N1cnJlbnRfcHJvZmlsZSgpLT5uczsKKworCWlmIChmcW5hbWVbMF0gPT0gJzonKSB7CisJCWNoYXIgKm5zX25hbWU7CisJCW5hbWUgPSBhYV9zcGxpdF9mcW5hbWUoZnFuYW1lLCAmbnNfbmFtZSk7CisJCWlmIChuc19uYW1lKSB7CisJCQkvKiByZWxlYXNlZCBiZWxvdyAqLworCQkJbnMgPSBhYV9maW5kX25hbWVzcGFjZShyb290LCBuc19uYW1lKTsKKwkJCWlmICghbnMpIHsKKwkJCQlpbmZvID0gIm5hbWVzcGFjZSBkb2VzIG5vdCBleGlzdCI7CisJCQkJZXJyb3IgPSAtRU5PRU5UOworCQkJCWdvdG8gZmFpbDsKKwkJCX0KKwkJfQorCX0gZWxzZQorCQkvKiByZWxlYXNlZCBiZWxvdyAqLworCQlucyA9IGFhX2dldF9uYW1lc3BhY2Uocm9vdCk7CisKKwl3cml0ZV9sb2NrKCZucy0+bG9jayk7CisJaWYgKCFuYW1lKSB7CisJCS8qIHJlbW92ZSBuYW1lc3BhY2UgLSBjYW4gb25seSBoYXBwZW4gaWYgZnFuYW1lWzBdID09ICc6JyAqLworCQlfX3JlbW92ZV9uYW1lc3BhY2UobnMpOworCX0gZWxzZSB7CisJCS8qIHJlbW92ZSBwcm9maWxlICovCisJCXByb2ZpbGUgPSBhYV9nZXRfcHJvZmlsZShfX2xvb2t1cF9wcm9maWxlKCZucy0+YmFzZSwgbmFtZSkpOworCQlpZiAoIXByb2ZpbGUpIHsKKwkJCWVycm9yID0gLUVOT0VOVDsKKwkJCWluZm8gPSAicHJvZmlsZSBkb2VzIG5vdCBleGlzdCI7CisJCQlnb3RvIGZhaWxfbnNfbG9jazsKKwkJfQorCQluYW1lID0gcHJvZmlsZS0+YmFzZS5obmFtZTsKKwkJX19yZW1vdmVfcHJvZmlsZShwcm9maWxlKTsKKwl9CisJd3JpdGVfdW5sb2NrKCZucy0+bG9jayk7CisKKwkvKiBkb24ndCBmYWlsIHJlbW92YWwgaWYgYXVkaXQgZmFpbHMgKi8KKwkodm9pZCkgYXVkaXRfcG9saWN5KE9QX1BST0ZfUk0sIEdGUF9LRVJORUwsIG5hbWUsIGluZm8sIGVycm9yKTsKKwlhYV9wdXRfbmFtZXNwYWNlKG5zKTsKKwlhYV9wdXRfcHJvZmlsZShwcm9maWxlKTsKKwlyZXR1cm4gc2l6ZTsKKworZmFpbF9uc19sb2NrOgorCXdyaXRlX3VubG9jaygmbnMtPmxvY2spOworCWFhX3B1dF9uYW1lc3BhY2UobnMpOworCitmYWlsOgorCSh2b2lkKSBhdWRpdF9wb2xpY3koT1BfUFJPRl9STSwgR0ZQX0tFUk5FTCwgbmFtZSwgaW5mbywgZXJyb3IpOworCXJldHVybiBlcnJvcjsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2FwcGFybW9yL3BvbGljeV91bnBhY2suYyBiL3NlY3VyaXR5L2FwcGFybW9yL3BvbGljeV91bnBhY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjM3MDBlCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5X3VucGFjay5jCkBAIC0wLDAgKzEsNzAzIEBACisvKgorICogQXBwQXJtb3Igc2VjdXJpdHkgbW9kdWxlCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIEFwcEFybW9yIGZ1bmN0aW9ucyBmb3IgdW5wYWNraW5nIHBvbGljeSBsb2FkZWQgZnJvbQorICogdXNlcnNwYWNlLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDA4IE5vdmVsbC9TVVNFCisgKiBDb3B5cmlnaHQgMjAwOS0yMDEwIENhbm9uaWNhbCBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIEFwcEFybW9yIHVzZXMgYSBzZXJpYWxpemVkIGJpbmFyeSBmb3JtYXQgZm9yIGxvYWRpbmcgcG9saWN5LgorICogVG8gZmluZCBwb2xpY3kgZm9ybWF0IGRvY3VtZW50YXRpb24gbG9vayBpbiBEb2N1bWVudGF0aW9uL2FwcGFybW9yLnR4dAorICogQWxsIHBvbGljeSBpcyB2YWxpZGF0ZWQgYmVmb3JlIGl0IGlzIHVzZWQuCisgKi8KKworI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKKyNpbmNsdWRlICJpbmNsdWRlL2FwcGFybW9yLmgiCisjaW5jbHVkZSAiaW5jbHVkZS9hdWRpdC5oIgorI2luY2x1ZGUgImluY2x1ZGUvY29udGV4dC5oIgorI2luY2x1ZGUgImluY2x1ZGUvbWF0Y2guaCIKKyNpbmNsdWRlICJpbmNsdWRlL3BvbGljeS5oIgorI2luY2x1ZGUgImluY2x1ZGUvcG9saWN5X3VucGFjay5oIgorI2luY2x1ZGUgImluY2x1ZGUvc2lkLmgiCisKKy8qCisgKiBUaGUgQXBwQXJtb3IgaW50ZXJmYWNlIHRyZWF0cyBkYXRhIGFzIGEgdHlwZSBieXRlIGZvbGxvd2VkIGJ5IHRoZQorICogYWN0dWFsIGRhdGEuICBUaGUgaW50ZXJmYWNlIGhhcyB0aGUgbm90aW9uIG9mIGEgYSBuYW1lZCBlbnRyeQorICogd2hpY2ggaGFzIGEgbmFtZSAoQUFfTkFNRSB0eXBlY29kZSBmb2xsb3dlZCBieSBuYW1lIHN0cmluZykgZm9sbG93ZWQgYnkKKyAqIHRoZSBlbnRyaWVzIHR5cGVjb2RlIGFuZCBkYXRhLiAgTmFtZWQgdHlwZXMgYWxsb3cgZm9yIG9wdGlvbmFsCisgKiBlbGVtZW50cyBhbmQgZXh0ZW5zaW9ucyB0byBiZSBhZGRlZCBhbmQgdGVzdGVkIGZvciB3aXRob3V0IGJyZWFraW5nCisgKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKyAqLworCitlbnVtIGFhX2NvZGUgeworCUFBX1U4LAorCUFBX1UxNiwKKwlBQV9VMzIsCisJQUFfVTY0LAorCUFBX05BTUUsCQkvKiBzYW1lIGFzIHN0cmluZyBleGNlcHQgaXQgaXMgaXRlbXMgbmFtZSAqLworCUFBX1NUUklORywKKwlBQV9CTE9CLAorCUFBX1NUUlVDVCwKKwlBQV9TVFJVQ1RFTkQsCisJQUFfTElTVCwKKwlBQV9MSVNURU5ELAorCUFBX0FSUkFZLAorCUFBX0FSUkFZRU5ELAorfTsKKworLyoKKyAqIGFhX2V4dCBpcyB0aGUgcmVhZCBvZiB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIHNlcmlhbGl6ZWQgcHJvZmlsZS4gIFRoZQorICogZGF0YSBpcyBjb3BpZWQgaW50byBhIGtlcm5lbCBidWZmZXIgaW4gYXBwYXJtb3JmcyBhbmQgdGhlbiBoYW5kZWQgb2ZmIHRvCisgKiB0aGUgdW5wYWNrIHJvdXRpbmVzLgorICovCitzdHJ1Y3QgYWFfZXh0IHsKKwl2b2lkICpzdGFydDsKKwl2b2lkICplbmQ7CisJdm9pZCAqcG9zOwkJLyogcG9pbnRlciB0byBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBidWZmZXIgKi8KKwl1MzIgdmVyc2lvbjsKK307CisKKy8qIGF1ZGl0IGNhbGxiYWNrIGZvciB1bnBhY2sgZmllbGRzICovCitzdGF0aWMgdm9pZCBhdWRpdF9jYihzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYiwgdm9pZCAqdmEpCit7CisJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICpzYSA9IHZhOworCWlmIChzYS0+YWFkLmlmYWNlLnRhcmdldCkgeworCQlzdHJ1Y3QgYWFfcHJvZmlsZSAqbmFtZSA9IHNhLT5hYWQuaWZhY2UudGFyZ2V0OworCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG5hbWU9Iik7CisJCWF1ZGl0X2xvZ191bnRydXN0ZWRzdHJpbmcoYWIsIG5hbWUtPmJhc2UuaG5hbWUpOworCX0KKwlpZiAoc2EtPmFhZC5pZmFjZS5wb3MpCisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgb2Zmc2V0PSVsZCIsIHNhLT5hYWQuaWZhY2UucG9zKTsKK30KKworLyoqCisgKiBhdWRpdF9pZmFjZSAtIGRvIGF1ZGl0IG1lc3NhZ2UgZm9yIHBvbGljeSB1bnBhY2tpbmcvbG9hZC9yZXBsYWNlL3JlbW92ZQorICogQG5ldzogcHJvZmlsZSBpZiBpdCBoYXMgYmVlbiBhbGxvY2F0ZWQgKE1BWUJFIE5VTEwpCisgKiBAbmFtZTogbmFtZSBvZiB0aGUgcHJvZmlsZSBiZWluZyBtYW5pcHVsYXRlZCAoTUFZQkUgTlVMTCkKKyAqIEBpbmZvOiBhbnkgZXh0cmEgaW5mbyBhYm91dCB0aGUgZmFpbHVyZSAoTUFZQkUgTlVMTCkKKyAqIEBlOiBidWZmZXIgcG9zaXRpb24gaW5mbyAoTk9UIE5VTEwpCisgKiBAZXJyb3I6IGVycm9yIGNvZGUKKyAqCisgKiBSZXR1cm5zOiAlMCBvciBlcnJvcgorICovCitzdGF0aWMgaW50IGF1ZGl0X2lmYWNlKHN0cnVjdCBhYV9wcm9maWxlICpuZXcsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgICBjb25zdCBjaGFyICppbmZvLCBzdHJ1Y3QgYWFfZXh0ICplLCBpbnQgZXJyb3IpCit7CisJc3RydWN0IGFhX3Byb2ZpbGUgKnByb2ZpbGUgPSBfX2FhX2N1cnJlbnRfcHJvZmlsZSgpOworCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBzYTsKKwlDT01NT05fQVVESVRfREFUQV9JTklUKCZzYSwgTk9ORSk7CisJc2EuYWFkLmlmYWNlLnBvcyA9IGUtPnBvcyAtIGUtPnN0YXJ0OworCXNhLmFhZC5pZmFjZS50YXJnZXQgPSBuZXc7CisJc2EuYWFkLm5hbWUgPSBuYW1lOworCXNhLmFhZC5pbmZvID0gaW5mbzsKKwlzYS5hYWQuZXJyb3IgPSBlcnJvcjsKKworCXJldHVybiBhYV9hdWRpdChBVURJVF9BUFBBUk1PUl9TVEFUVVMsIHByb2ZpbGUsIEdGUF9LRVJORUwsICZzYSwKKwkJCWF1ZGl0X2NiKTsKK30KKworLyogdGVzdCBpZiByZWFkIHdpbGwgYmUgaW4gcGFja2VkIGRhdGEgYm91bmRzICovCitzdGF0aWMgYm9vbCBpbmJvdW5kcyhzdHJ1Y3QgYWFfZXh0ICplLCBzaXplX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gKHNpemUgPD0gZS0+ZW5kIC0gZS0+cG9zKTsKK30KKworLyoqCisgKiBhYV91MTZfY2h1bmNrIC0gdGVzdCBhbmQgZG8gYm91bmRzIGNoZWNraW5nIGZvciBhIHUxNiBzaXplIGJhc2VkIGNodW5rCisgKiBAZTogc2VyaWFsaXplZCBkYXRhIHJlYWQgaGVhZCAoTk9UIE5VTEwpCisgKiBAY2h1bms6IHN0YXJ0IGFkZHJlc3MgZm9yIGNodW5rIG9mIGRhdGEgKE5PVCBOVUxMKQorICoKKyAqIFJldHVybnM6IHRoZSBzaXplIG9mIGNodW5rIGZvdW5kIHdpdGggdGhlIHJlYWQgaGVhZCBhdCB0aGUgZW5kIG9mIHRoZSBjaHVuay4KKyAqLworc3RhdGljIHNpemVfdCB1bnBhY2tfdTE2X2NodW5rKHN0cnVjdCBhYV9leHQgKmUsIGNoYXIgKipjaHVuaykKK3sKKwlzaXplX3Qgc2l6ZSA9IDA7CisKKwlpZiAoIWluYm91bmRzKGUsIHNpemVvZih1MTYpKSkKKwkJcmV0dXJuIDA7CisJc2l6ZSA9IGxlMTZfdG9fY3B1KGdldF91bmFsaWduZWQoKHUxNiAqKSBlLT5wb3MpKTsKKwllLT5wb3MgKz0gc2l6ZW9mKHUxNik7CisJaWYgKCFpbmJvdW5kcyhlLCBzaXplKSkKKwkJcmV0dXJuIDA7CisJKmNodW5rID0gZS0+cG9zOworCWUtPnBvcyArPSBzaXplOworCXJldHVybiBzaXplOworfQorCisvKiB1bnBhY2sgY29udHJvbCBieXRlICovCitzdGF0aWMgYm9vbCB1bnBhY2tfWChzdHJ1Y3QgYWFfZXh0ICplLCBlbnVtIGFhX2NvZGUgY29kZSkKK3sKKwlpZiAoIWluYm91bmRzKGUsIDEpKQorCQlyZXR1cm4gMDsKKwlpZiAoKih1OCAqKSBlLT5wb3MgIT0gY29kZSkKKwkJcmV0dXJuIDA7CisJZS0+cG9zKys7CisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogdW5wYWNrX25hbWVYIC0gY2hlY2sgaXMgdGhlIG5leHQgZWxlbWVudCBpcyBvZiB0eXBlIFggd2l0aCBhIG5hbWUgb2YgQG5hbWUKKyAqIEBlOiBzZXJpYWxpemVkIGRhdGEgZXh0ZW50IGluZm9ybWF0aW9uICAoTk9UIE5VTEwpCisgKiBAY29kZTogdHlwZSBjb2RlCisgKiBAbmFtZTogbmFtZSB0byBtYXRjaCB0byB0aGUgc2VyaWFsaXplZCBlbGVtZW50LiAgKE1BWUJFIE5VTEwpCisgKgorICogY2hlY2sgdGhhdCB0aGUgbmV4dCBzZXJpYWxpemVkIGRhdGEgZWxlbWVudCBpcyBvZiB0eXBlIFggYW5kIGhhcyBhIHRhZworICogbmFtZSBAbmFtZS4gIElmIEBuYW1lIGlzIHNwZWNpZmllZCB0aGVuIHRoZXJlIG11c3QgYmUgYSBtYXRjaGluZworICogbmFtZSBlbGVtZW50IGluIHRoZSBzdHJlYW0uICBJZiBAbmFtZSBpcyBOVUxMIGFueSBuYW1lIGVsZW1lbnQgd2lsbCBiZQorICogc2tpcHBlZCBhbmQgb25seSB0aGUgdHlwZWNvZGUgd2lsbCBiZSB0ZXN0ZWQuCisgKgorICogUmV0dXJucyAxIG9uIHN1Y2Nlc3MgKGJvdGggdHlwZSBjb2RlIGFuZCBuYW1lIHRlc3RzIG1hdGNoKSBhbmQgdGhlIHJlYWQKKyAqIGhlYWQgaXMgYWR2YW5jZWQgcGFzdCB0aGUgaGVhZGVycworICoKKyAqIFJldHVybnM6IDAgaWYgZWl0aGVyIG1hdGNoIGZhaWxzLCB0aGUgcmVhZCBoZWFkIGRvZXMgbm90IG1vdmUKKyAqLworc3RhdGljIGJvb2wgdW5wYWNrX25hbWVYKHN0cnVjdCBhYV9leHQgKmUsIGVudW0gYWFfY29kZSBjb2RlLCBjb25zdCBjaGFyICpuYW1lKQoreworCS8qCisJICogTWF5IG5lZWQgdG8gcmVzZXQgcG9zIGlmIG5hbWUgb3IgdHlwZSBkb2Vzbid0IG1hdGNoCisJICovCisJdm9pZCAqcG9zID0gZS0+cG9zOworCS8qCisJICogQ2hlY2sgZm9yIHByZXNlbmNlIG9mIGEgdGFnbmFtZSwgYW5kIGlmIHByZXNlbnQgbmFtZSBzaXplCisJICogQUFfTkFNRSB0YWcgdmFsdWUgaXMgYSB1MTYuCisJICovCisJaWYgKHVucGFja19YKGUsIEFBX05BTUUpKSB7CisJCWNoYXIgKnRhZyA9IE5VTEw7CisJCXNpemVfdCBzaXplID0gdW5wYWNrX3UxNl9jaHVuayhlLCAmdGFnKTsKKwkJLyogaWYgYSBuYW1lIGlzIHNwZWNpZmllZCBpdCBtdXN0IG1hdGNoLiBvdGhlcndpc2Ugc2tpcCB0YWcgKi8KKwkJaWYgKG5hbWUgJiYgKCFzaXplIHx8IHN0cmNtcChuYW1lLCB0YWcpKSkKKwkJCWdvdG8gZmFpbDsKKwl9IGVsc2UgaWYgKG5hbWUpIHsKKwkJLyogaWYgYSBuYW1lIGlzIHNwZWNpZmllZCBhbmQgdGhlcmUgaXMgbm8gbmFtZSB0YWcgZmFpbCAqLworCQlnb3RvIGZhaWw7CisJfQorCisJLyogbm93IGNoZWNrIGlmIHR5cGUgY29kZSBtYXRjaGVzICovCisJaWYgKHVucGFja19YKGUsIGNvZGUpKQorCQlyZXR1cm4gMTsKKworZmFpbDoKKwllLT5wb3MgPSBwb3M7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIHVucGFja191MzIoc3RydWN0IGFhX2V4dCAqZSwgdTMyICpkYXRhLCBjb25zdCBjaGFyICpuYW1lKQoreworCWlmICh1bnBhY2tfbmFtZVgoZSwgQUFfVTMyLCBuYW1lKSkgeworCQlpZiAoIWluYm91bmRzKGUsIHNpemVvZih1MzIpKSkKKwkJCXJldHVybiAwOworCQlpZiAoZGF0YSkKKwkJCSpkYXRhID0gbGUzMl90b19jcHUoZ2V0X3VuYWxpZ25lZCgodTMyICopIGUtPnBvcykpOworCQllLT5wb3MgKz0gc2l6ZW9mKHUzMik7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgdW5wYWNrX3U2NChzdHJ1Y3QgYWFfZXh0ICplLCB1NjQgKmRhdGEsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaWYgKHVucGFja19uYW1lWChlLCBBQV9VNjQsIG5hbWUpKSB7CisJCWlmICghaW5ib3VuZHMoZSwgc2l6ZW9mKHU2NCkpKQorCQkJcmV0dXJuIDA7CisJCWlmIChkYXRhKQorCQkJKmRhdGEgPSBsZTY0X3RvX2NwdShnZXRfdW5hbGlnbmVkKCh1NjQgKikgZS0+cG9zKSk7CisJCWUtPnBvcyArPSBzaXplb2YodTY0KTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc2l6ZV90IHVucGFja19hcnJheShzdHJ1Y3QgYWFfZXh0ICplLCBjb25zdCBjaGFyICpuYW1lKQoreworCWlmICh1bnBhY2tfbmFtZVgoZSwgQUFfQVJSQVksIG5hbWUpKSB7CisJCWludCBzaXplOworCQlpZiAoIWluYm91bmRzKGUsIHNpemVvZih1MTYpKSkKKwkJCXJldHVybiAwOworCQlzaXplID0gKGludClsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKCh1MTYgKikgZS0+cG9zKSk7CisJCWUtPnBvcyArPSBzaXplb2YodTE2KTsKKwkJcmV0dXJuIHNpemU7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc2l6ZV90IHVucGFja19ibG9iKHN0cnVjdCBhYV9leHQgKmUsIGNoYXIgKipibG9iLCBjb25zdCBjaGFyICpuYW1lKQoreworCWlmICh1bnBhY2tfbmFtZVgoZSwgQUFfQkxPQiwgbmFtZSkpIHsKKwkJdTMyIHNpemU7CisJCWlmICghaW5ib3VuZHMoZSwgc2l6ZW9mKHUzMikpKQorCQkJcmV0dXJuIDA7CisJCXNpemUgPSBsZTMyX3RvX2NwdShnZXRfdW5hbGlnbmVkKCh1MzIgKikgZS0+cG9zKSk7CisJCWUtPnBvcyArPSBzaXplb2YodTMyKTsKKwkJaWYgKGluYm91bmRzKGUsIChzaXplX3QpIHNpemUpKSB7CisJCQkqYmxvYiA9IGUtPnBvczsKKwkJCWUtPnBvcyArPSBzaXplOworCQkJcmV0dXJuIHNpemU7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdW5wYWNrX3N0cihzdHJ1Y3QgYWFfZXh0ICplLCBjb25zdCBjaGFyICoqc3RyaW5nLCBjb25zdCBjaGFyICpuYW1lKQoreworCWNoYXIgKnNyY19zdHI7CisJc2l6ZV90IHNpemUgPSAwOworCXZvaWQgKnBvcyA9IGUtPnBvczsKKwkqc3RyaW5nID0gTlVMTDsKKwlpZiAodW5wYWNrX25hbWVYKGUsIEFBX1NUUklORywgbmFtZSkpIHsKKwkJc2l6ZSA9IHVucGFja191MTZfY2h1bmsoZSwgJnNyY19zdHIpOworCQlpZiAoc2l6ZSkgeworCQkJLyogc3RyaW5ncyBhcmUgbnVsbCB0ZXJtaW5hdGVkLCBsZW5ndGggaXMgc2l6ZSAtIDEgKi8KKwkJCWlmIChzcmNfc3RyW3NpemUgLSAxXSAhPSAwKQorCQkJCWdvdG8gZmFpbDsKKwkJCSpzdHJpbmcgPSBzcmNfc3RyOworCQl9CisJfQorCXJldHVybiBzaXplOworCitmYWlsOgorCWUtPnBvcyA9IHBvczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1bnBhY2tfc3RyZHVwKHN0cnVjdCBhYV9leHQgKmUsIGNoYXIgKipzdHJpbmcsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY29uc3QgY2hhciAqdG1wOworCXZvaWQgKnBvcyA9IGUtPnBvczsKKwlpbnQgcmVzID0gdW5wYWNrX3N0cihlLCAmdG1wLCBuYW1lKTsKKwkqc3RyaW5nID0gTlVMTDsKKworCWlmICghcmVzKQorCQlyZXR1cm4gMDsKKworCSpzdHJpbmcgPSBrbWVtZHVwKHRtcCwgcmVzLCBHRlBfS0VSTkVMKTsKKwlpZiAoISpzdHJpbmcpIHsKKwkJZS0+cG9zID0gcG9zOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCisvKioKKyAqIHZlcmlmeV9hY2NlcHQgLSB2ZXJpZnkgdGhlIGFjY2VwdCB0YWJsZXMgb2YgYSBkZmEKKyAqIEBkZmE6IGRmYSB0byB2ZXJpZnkgYWNjZXB0IHRhYmxlcyBvZiAoTk9UIE5VTEwpCisgKiBAZmxhZ3M6IGZsYWdzIGdvdmVybmluZyBkZmEKKyAqCisgKiBSZXR1cm5zOiAxIGlmIHZhbGlkIGFjY2VwdCB0YWJsZXMgZWxzZSAwIGlmIGVycm9yCisgKi8KK3N0YXRpYyBib29sIHZlcmlmeV9hY2NlcHQoc3RydWN0IGFhX2RmYSAqZGZhLCBpbnQgZmxhZ3MpCit7CisJaW50IGk7CisKKwkvKiB2ZXJpZnkgYWNjZXB0IHBlcm1pc3Npb25zICovCisJZm9yIChpID0gMDsgaSA8IGRmYS0+dGFibGVzW1lZVERfSURfQUNDRVBUXS0+dGRfbG9sZW47IGkrKykgeworCQlpbnQgbW9kZSA9IEFDQ0VQVF9UQUJMRShkZmEpW2ldOworCisJCWlmIChtb2RlICYgfkRGQV9WQUxJRF9QRVJNX01BU0spCisJCQlyZXR1cm4gMDsKKworCQlpZiAoQUNDRVBUX1RBQkxFMihkZmEpW2ldICYgfkRGQV9WQUxJRF9QRVJNMl9NQVNLKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCisvKioKKyAqIHVucGFja19kZmEgLSB1bnBhY2sgYSBmaWxlIHJ1bGUgZGZhCisgKiBAZTogc2VyaWFsaXplZCBkYXRhIGV4dGVudCBpbmZvcm1hdGlvbiAoTk9UIE5VTEwpCisgKgorICogcmV0dXJucyBkZmEgb3IgRVJSX1BUUiBvciBOVUxMIGlmIG5vIGRmYQorICovCitzdGF0aWMgc3RydWN0IGFhX2RmYSAqdW5wYWNrX2RmYShzdHJ1Y3QgYWFfZXh0ICplKQoreworCWNoYXIgKmJsb2IgPSBOVUxMOworCXNpemVfdCBzaXplOworCXN0cnVjdCBhYV9kZmEgKmRmYSA9IE5VTEw7CisKKwlzaXplID0gdW5wYWNrX2Jsb2IoZSwgJmJsb2IsICJhYWRmYSIpOworCWlmIChzaXplKSB7CisJCS8qCisJCSAqIFRoZSBkZmEgaXMgYWxpZ25lZCB3aXRoIGluIHRoZSBibG9iIHRvIDggYnl0ZXMKKwkJICogZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJlYW0uCisJCSAqLworCQlzaXplX3Qgc3ogPSBibG9iIC0gKGNoYXIgKillLT5zdGFydDsKKwkJc2l6ZV90IHBhZCA9IEFMSUdOKHN6LCA4KSAtIHN6OworCQlpbnQgZmxhZ3MgPSBUT19BQ0NFUFQxX0ZMQUcoWVlURF9EQVRBMzIpIHwKKwkJCVRPX0FDQ0VQVDJfRkxBRyhZWVREX0RBVEEzMik7CisKKworCQlpZiAoYWFfZ19wYXJhbm9pZF9sb2FkKQorCQkJZmxhZ3MgfD0gREZBX0ZMQUdfVkVSSUZZX1NUQVRFUzsKKworCQlkZmEgPSBhYV9kZmFfdW5wYWNrKGJsb2IgKyBwYWQsIHNpemUgLSBwYWQsIGZsYWdzKTsKKworCQlpZiAoSVNfRVJSKGRmYSkpCisJCQlyZXR1cm4gZGZhOworCisJCWlmICghdmVyaWZ5X2FjY2VwdChkZmEsIGZsYWdzKSkKKwkJCWdvdG8gZmFpbDsKKwl9CisKKwlyZXR1cm4gZGZhOworCitmYWlsOgorCWFhX3B1dF9kZmEoZGZhKTsKKwlyZXR1cm4gRVJSX1BUUigtRVBST1RPKTsKK30KKworLyoqCisgKiB1bnBhY2tfdHJhbnNfdGFibGUgLSB1bnBhY2sgYSBwcm9maWxlIHRyYW5zaXRpb24gdGFibGUKKyAqIEBlOiBzZXJpYWxpemVkIGRhdGEgZXh0ZW50IGluZm9ybWF0aW9uICAoTk9UIE5VTEwpCisgKiBAcHJvZmlsZTogcHJvZmlsZSB0byBhZGQgdGhlIGFjY2VwdCB0YWJsZSB0byAoTk9UIE5VTEwpCisgKgorICogUmV0dXJuczogMSBpZiB0YWJsZSBzdWNjZXNmdWxseSB1bnBhY2tlZAorICovCitzdGF0aWMgYm9vbCB1bnBhY2tfdHJhbnNfdGFibGUoc3RydWN0IGFhX2V4dCAqZSwgc3RydWN0IGFhX3Byb2ZpbGUgKnByb2ZpbGUpCit7CisJdm9pZCAqcG9zID0gZS0+cG9zOworCisJLyogZXhlYyB0YWJsZSBpcyBvcHRpb25hbCAqLworCWlmICh1bnBhY2tfbmFtZVgoZSwgQUFfU1RSVUNULCAieHRhYmxlIikpIHsKKwkJaW50IGksIHNpemU7CisKKwkJc2l6ZSA9IHVucGFja19hcnJheShlLCBOVUxMKTsKKwkJLyogY3VycmVudGx5IDQgZXhlYyBiaXRzIGFuZCBlbnRyaWVzIDAtMyBhcmUgcmVzZXJ2ZWQgaXVwY3ggKi8KKwkJaWYgKHNpemUgPiAxNiAtIDQpCisJCQlnb3RvIGZhaWw7CisJCXByb2ZpbGUtPmZpbGUudHJhbnMudGFibGUgPSBremFsbG9jKHNpemVvZihjaGFyICopICogc2l6ZSwKKwkJCQkJCSAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwcm9maWxlLT5maWxlLnRyYW5zLnRhYmxlKQorCQkJZ290byBmYWlsOworCisJCXByb2ZpbGUtPmZpbGUudHJhbnMuc2l6ZSA9IHNpemU7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJCWNoYXIgKnN0cjsKKwkJCWludCBjLCBqLCBzaXplID0gdW5wYWNrX3N0cmR1cChlLCAmc3RyLCBOVUxMKTsKKwkJCS8qIHVucGFja19zdHJkdXAgdmVyaWZpZXMgdGhhdCB0aGUgbGFzdCBjaGFyYWN0ZXIgaXMKKwkJCSAqIG51bGwgdGVybWluYXRpb24gYnl0ZS4KKwkJCSAqLworCQkJaWYgKCFzaXplKQorCQkJCWdvdG8gZmFpbDsKKwkJCXByb2ZpbGUtPmZpbGUudHJhbnMudGFibGVbaV0gPSBzdHI7CisJCQkvKiB2ZXJpZnkgdGhhdCBuYW1lIGRvZXNuJ3Qgc3RhcnQgd2l0aCBzcGFjZSAqLworCQkJaWYgKGlzc3BhY2UoKnN0cikpCisJCQkJZ290byBmYWlsOworCisJCQkvKiBjb3VudCBpbnRlcm5hbCAjICBvZiBpbnRlcm5hbCBcMCAqLworCQkJZm9yIChjID0gaiA9IDA7IGogPCBzaXplIC0gMjsgaisrKSB7CisJCQkJaWYgKCFzdHJbal0pCisJCQkJCWMrKzsKKwkJCX0KKwkJCWlmICgqc3RyID09ICc6JykgeworCQkJCS8qIGJlZ2lubmluZyB3aXRoIDogcmVxdWlyZXMgYW4gZW1iZWRkZWQgXDAsCisJCQkJICogdmVyaWZ5IHRoYXQgZXhhY3RseSAxIGludGVybmFsIFwwIGV4aXN0cworCQkJCSAqIHRyYWlsaW5nIFwwIGFscmVhZHkgdmVyaWZpZWQgYnkgdW5wYWNrX3N0cmR1cAorCQkJCSAqLworCQkJCWlmIChjICE9IDEpCisJCQkJCWdvdG8gZmFpbDsKKwkJCQkvKiBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgOiBtdXN0IGJlIHZhbGlkICovCisJCQkJaWYgKCFzdHJbMV0pCisJCQkJCWdvdG8gZmFpbDsKKwkJCX0gZWxzZSBpZiAoYykKKwkJCQkvKiBmYWlsIC0gYWxsIG90aGVyIGNhc2VzIHdpdGggZW1iZWRkZWQgXDAgKi8KKwkJCQlnb3RvIGZhaWw7CisJCX0KKwkJaWYgKCF1bnBhY2tfbmFtZVgoZSwgQUFfQVJSQVlFTkQsIE5VTEwpKQorCQkJZ290byBmYWlsOworCQlpZiAoIXVucGFja19uYW1lWChlLCBBQV9TVFJVQ1RFTkQsIE5VTEwpKQorCQkJZ290byBmYWlsOworCX0KKwlyZXR1cm4gMTsKKworZmFpbDoKKwlhYV9mcmVlX2RvbWFpbl9lbnRyaWVzKCZwcm9maWxlLT5maWxlLnRyYW5zKTsKKwllLT5wb3MgPSBwb3M7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIHVucGFja19ybGltaXRzKHN0cnVjdCBhYV9leHQgKmUsIHN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlKQoreworCXZvaWQgKnBvcyA9IGUtPnBvczsKKworCS8qIHJsaW1pdHMgYXJlIG9wdGlvbmFsICovCisJaWYgKHVucGFja19uYW1lWChlLCBBQV9TVFJVQ1QsICJybGltaXRzIikpIHsKKwkJaW50IGksIHNpemU7CisJCXUzMiB0bXAgPSAwOworCQlpZiAoIXVucGFja191MzIoZSwgJnRtcCwgTlVMTCkpCisJCQlnb3RvIGZhaWw7CisJCXByb2ZpbGUtPnJsaW1pdHMubWFzayA9IHRtcDsKKworCQlzaXplID0gdW5wYWNrX2FycmF5KGUsIE5VTEwpOworCQlpZiAoc2l6ZSA+IFJMSU1fTkxJTUlUUykKKwkJCWdvdG8gZmFpbDsKKwkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQkJdTY0IHRtcCA9IDA7CisJCQlpbnQgYSA9IGFhX21hcF9yZXNvdXJjZShpKTsKKwkJCWlmICghdW5wYWNrX3U2NChlLCAmdG1wLCBOVUxMKSkKKwkJCQlnb3RvIGZhaWw7CisJCQlwcm9maWxlLT5ybGltaXRzLmxpbWl0c1thXS5ybGltX21heCA9IHRtcDsKKwkJfQorCQlpZiAoIXVucGFja19uYW1lWChlLCBBQV9BUlJBWUVORCwgTlVMTCkpCisJCQlnb3RvIGZhaWw7CisJCWlmICghdW5wYWNrX25hbWVYKGUsIEFBX1NUUlVDVEVORCwgTlVMTCkpCisJCQlnb3RvIGZhaWw7CisJfQorCXJldHVybiAxOworCitmYWlsOgorCWUtPnBvcyA9IHBvczsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB1bnBhY2tfcHJvZmlsZSAtIHVucGFjayBhIHNlcmlhbGl6ZWQgcHJvZmlsZQorICogQGU6IHNlcmlhbGl6ZWQgZGF0YSBleHRlbnQgaW5mb3JtYXRpb24gKE5PVCBOVUxMKQorICoKKyAqIE5PVEU6IHVucGFjayBwcm9maWxlIHNldHMgYXVkaXQgc3RydWN0IGlmIHRoZXJlIGlzIGEgZmFpbHVyZQorICovCitzdGF0aWMgc3RydWN0IGFhX3Byb2ZpbGUgKnVucGFja19wcm9maWxlKHN0cnVjdCBhYV9leHQgKmUpCit7CisJc3RydWN0IGFhX3Byb2ZpbGUgKnByb2ZpbGUgPSBOVUxMOworCWNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOworCWludCBlcnJvciA9IC1FUFJPVE87CisJa2VybmVsX2NhcF90IHRtcGNhcDsKKwl1MzIgdG1wOworCisJLyogY2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSByaWdodCBzdHJ1Y3QgYmVpbmcgcGFzc2VkICovCisJaWYgKCF1bnBhY2tfbmFtZVgoZSwgQUFfU1RSVUNULCAicHJvZmlsZSIpKQorCQlnb3RvIGZhaWw7CisJaWYgKCF1bnBhY2tfc3RyKGUsICZuYW1lLCBOVUxMKSkKKwkJZ290byBmYWlsOworCisJcHJvZmlsZSA9IGFhX2FsbG9jX3Byb2ZpbGUobmFtZSk7CisJaWYgKCFwcm9maWxlKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCS8qIHByb2ZpbGUgcmVuYW1pbmcgaXMgb3B0aW9uYWwgKi8KKwkodm9pZCkgdW5wYWNrX3N0cihlLCAmcHJvZmlsZS0+cmVuYW1lLCAicmVuYW1lIik7CisKKwkvKiB4bWF0Y2ggaXMgb3B0aW9uYWwgYW5kIG1heSBiZSBOVUxMICovCisJcHJvZmlsZS0+eG1hdGNoID0gdW5wYWNrX2RmYShlKTsKKwlpZiAoSVNfRVJSKHByb2ZpbGUtPnhtYXRjaCkpIHsKKwkJZXJyb3IgPSBQVFJfRVJSKHByb2ZpbGUtPnhtYXRjaCk7CisJCXByb2ZpbGUtPnhtYXRjaCA9IE5VTEw7CisJCWdvdG8gZmFpbDsKKwl9CisJLyogeG1hdGNoX2xlbiBpcyBub3Qgb3B0aW9uYWwgaWYgeG1hdGNoIGlzIHNldCAqLworCWlmIChwcm9maWxlLT54bWF0Y2gpIHsKKwkJaWYgKCF1bnBhY2tfdTMyKGUsICZ0bXAsIE5VTEwpKQorCQkJZ290byBmYWlsOworCQlwcm9maWxlLT54bWF0Y2hfbGVuID0gdG1wOworCX0KKworCS8qIHBlciBwcm9maWxlIGRlYnVnIGZsYWdzIChjb21wbGFpbiwgYXVkaXQpICovCisJaWYgKCF1bnBhY2tfbmFtZVgoZSwgQUFfU1RSVUNULCAiZmxhZ3MiKSkKKwkJZ290byBmYWlsOworCWlmICghdW5wYWNrX3UzMihlLCAmdG1wLCBOVUxMKSkKKwkJZ290byBmYWlsOworCWlmICh0bXApCisJCXByb2ZpbGUtPmZsYWdzIHw9IFBGTEFHX0hBVDsKKwlpZiAoIXVucGFja191MzIoZSwgJnRtcCwgTlVMTCkpCisJCWdvdG8gZmFpbDsKKwlpZiAodG1wKQorCQlwcm9maWxlLT5tb2RlID0gQVBQQVJNT1JfQ09NUExBSU47CisJaWYgKCF1bnBhY2tfdTMyKGUsICZ0bXAsIE5VTEwpKQorCQlnb3RvIGZhaWw7CisJaWYgKHRtcCkKKwkJcHJvZmlsZS0+YXVkaXQgPSBBVURJVF9BTEw7CisKKwlpZiAoIXVucGFja19uYW1lWChlLCBBQV9TVFJVQ1RFTkQsIE5VTEwpKQorCQlnb3RvIGZhaWw7CisKKwkvKiBwYXRoX2ZsYWdzIGlzIG9wdGlvbmFsICovCisJaWYgKHVucGFja191MzIoZSwgJnByb2ZpbGUtPnBhdGhfZmxhZ3MsICJwYXRoX2ZsYWdzIikpCisJCXByb2ZpbGUtPnBhdGhfZmxhZ3MgfD0gcHJvZmlsZS0+ZmxhZ3MgJiBQRkxBR19NRURJQVRFX0RFTEVURUQ7CisJZWxzZQorCQkvKiBzZXQgYSBkZWZhdWx0IHZhbHVlIGlmIHBhdGhfZmxhZ3MgZmllbGQgaXMgbm90IHByZXNlbnQgKi8KKwkJcHJvZmlsZS0+cGF0aF9mbGFncyA9IFBGTEFHX01FRElBVEVfREVMRVRFRDsKKworCWlmICghdW5wYWNrX3UzMihlLCAmKHByb2ZpbGUtPmNhcHMuYWxsb3cuY2FwWzBdKSwgTlVMTCkpCisJCWdvdG8gZmFpbDsKKwlpZiAoIXVucGFja191MzIoZSwgJihwcm9maWxlLT5jYXBzLmF1ZGl0LmNhcFswXSksIE5VTEwpKQorCQlnb3RvIGZhaWw7CisJaWYgKCF1bnBhY2tfdTMyKGUsICYocHJvZmlsZS0+Y2Fwcy5xdWlldC5jYXBbMF0pLCBOVUxMKSkKKwkJZ290byBmYWlsOworCWlmICghdW5wYWNrX3UzMihlLCAmdG1wY2FwLmNhcFswXSwgTlVMTCkpCisJCWdvdG8gZmFpbDsKKworCWlmICh1bnBhY2tfbmFtZVgoZSwgQUFfU1RSVUNULCAiY2FwczY0IikpIHsKKwkJLyogb3B0aW9uYWwgdXBwZXIgaGFsZiBvZiA2NCBiaXQgY2FwcyAqLworCQlpZiAoIXVucGFja191MzIoZSwgJihwcm9maWxlLT5jYXBzLmFsbG93LmNhcFsxXSksIE5VTEwpKQorCQkJZ290byBmYWlsOworCQlpZiAoIXVucGFja191MzIoZSwgJihwcm9maWxlLT5jYXBzLmF1ZGl0LmNhcFsxXSksIE5VTEwpKQorCQkJZ290byBmYWlsOworCQlpZiAoIXVucGFja191MzIoZSwgJihwcm9maWxlLT5jYXBzLnF1aWV0LmNhcFsxXSksIE5VTEwpKQorCQkJZ290byBmYWlsOworCQlpZiAoIXVucGFja191MzIoZSwgJih0bXBjYXAuY2FwWzFdKSwgTlVMTCkpCisJCQlnb3RvIGZhaWw7CisJCWlmICghdW5wYWNrX25hbWVYKGUsIEFBX1NUUlVDVEVORCwgTlVMTCkpCisJCQlnb3RvIGZhaWw7CisJfQorCisJaWYgKHVucGFja19uYW1lWChlLCBBQV9TVFJVQ1QsICJjYXBzeCIpKSB7CisJCS8qIG9wdGlvbmFsIGV4dGVuZGVkIGNhcHMgbWVkaWF0aW9uIG1hc2sgKi8KKwkJaWYgKCF1bnBhY2tfdTMyKGUsICYocHJvZmlsZS0+Y2Fwcy5leHRlbmRlZC5jYXBbMF0pLCBOVUxMKSkKKwkJCWdvdG8gZmFpbDsKKwkJaWYgKCF1bnBhY2tfdTMyKGUsICYocHJvZmlsZS0+Y2Fwcy5leHRlbmRlZC5jYXBbMV0pLCBOVUxMKSkKKwkJCWdvdG8gZmFpbDsKKwl9CisKKwlpZiAoIXVucGFja19ybGltaXRzKGUsIHByb2ZpbGUpKQorCQlnb3RvIGZhaWw7CisKKwkvKiBnZXQgZmlsZSBydWxlcyAqLworCXByb2ZpbGUtPmZpbGUuZGZhID0gdW5wYWNrX2RmYShlKTsKKwlpZiAoSVNfRVJSKHByb2ZpbGUtPmZpbGUuZGZhKSkgeworCQllcnJvciA9IFBUUl9FUlIocHJvZmlsZS0+ZmlsZS5kZmEpOworCQlwcm9maWxlLT5maWxlLmRmYSA9IE5VTEw7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlpZiAoIXVucGFja191MzIoZSwgJnByb2ZpbGUtPmZpbGUuc3RhcnQsICJkZmFfc3RhcnQiKSkKKwkJLyogZGVmYXVsdCBzdGFydCBzdGF0ZSAqLworCQlwcm9maWxlLT5maWxlLnN0YXJ0ID0gREZBX1NUQVJUOworCisJaWYgKCF1bnBhY2tfdHJhbnNfdGFibGUoZSwgcHJvZmlsZSkpCisJCWdvdG8gZmFpbDsKKworCWlmICghdW5wYWNrX25hbWVYKGUsIEFBX1NUUlVDVEVORCwgTlVMTCkpCisJCWdvdG8gZmFpbDsKKworCXJldHVybiBwcm9maWxlOworCitmYWlsOgorCWlmIChwcm9maWxlKQorCQluYW1lID0gTlVMTDsKKwllbHNlIGlmICghbmFtZSkKKwkJbmFtZSA9ICJ1bmtub3duIjsKKwlhdWRpdF9pZmFjZShwcm9maWxlLCBuYW1lLCAiZmFpbGVkIHRvIHVucGFjayBwcm9maWxlIiwgZSwgZXJyb3IpOworCWFhX3B1dF9wcm9maWxlKHByb2ZpbGUpOworCisJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOworfQorCisvKioKKyAqIHZlcmlmeV9oZWFkIC0gdW5wYWNrIHNlcmlhbGl6ZWQgc3RyZWFtIGhlYWRlcgorICogQGU6IHNlcmlhbGl6ZWQgZGF0YSByZWFkIGhlYWQgKE5PVCBOVUxMKQorICogQG5zOiBSZXR1cm5zIC0gbmFtZXNwYWNlIGlmIG9uZSBpcyBzcGVjaWZpZWQgZWxzZSBOVUxMIChOT1QgTlVMTCkKKyAqCisgKiBSZXR1cm5zOiBlcnJvciBvciAwIGlmIGhlYWRlciBpcyBnb29kCisgKi8KK3N0YXRpYyBpbnQgdmVyaWZ5X2hlYWRlcihzdHJ1Y3QgYWFfZXh0ICplLCBjb25zdCBjaGFyICoqbnMpCit7CisJaW50IGVycm9yID0gLUVQUk9UT05PU1VQUE9SVDsKKwkvKiBnZXQgdGhlIGludGVyZmFjZSB2ZXJzaW9uICovCisJaWYgKCF1bnBhY2tfdTMyKGUsICZlLT52ZXJzaW9uLCAidmVyc2lvbiIpKSB7CisJCWF1ZGl0X2lmYWNlKE5VTEwsIE5VTEwsICJpbnZhbGlkIHByb2ZpbGUgZm9ybWF0IiwgZSwgZXJyb3IpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJLyogY2hlY2sgdGhhdCB0aGUgaW50ZXJmYWNlIHZlcnNpb24gaXMgY3VycmVudGx5IHN1cHBvcnRlZCAqLworCWlmIChlLT52ZXJzaW9uICE9IDUpIHsKKwkJYXVkaXRfaWZhY2UoTlVMTCwgTlVMTCwgInVuc3VwcG9ydGVkIGludGVyZmFjZSB2ZXJzaW9uIiwgZSwKKwkJCSAgICBlcnJvcik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwkvKiByZWFkIHRoZSBuYW1lc3BhY2UgaWYgcHJlc2VudCAqLworCWlmICghdW5wYWNrX3N0cihlLCBucywgIm5hbWVzcGFjZSIpKQorCQkqbnMgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIHZlcmlmeV94aW5kZXgoaW50IHhpbmRleCwgaW50IHRhYmxlX3NpemUpCit7CisJaW50IGluZGV4LCB4dHlwZTsKKwl4dHlwZSA9IHhpbmRleCAmIEFBX1hfVFlQRV9NQVNLOworCWluZGV4ID0geGluZGV4ICYgQUFfWF9JTkRFWF9NQVNLOworCWlmICh4dHlwZSA9PSBBQV9YX1RBQkxFICYmIGluZGV4ID4gdGFibGVfc2l6ZSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qIHZlcmlmeSBkZmEgeGluZGV4ZXMgYXJlIGluIHJhbmdlIG9mIHRyYW5zaXRpb24gdGFibGVzICovCitzdGF0aWMgYm9vbCB2ZXJpZnlfZGZhX3hpbmRleChzdHJ1Y3QgYWFfZGZhICpkZmEsIGludCB0YWJsZV9zaXplKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBkZmEtPnRhYmxlc1tZWVREX0lEX0FDQ0VQVF0tPnRkX2xvbGVuOyBpKyspIHsKKwkJaWYgKCF2ZXJpZnlfeGluZGV4KGRmYV91c2VyX3hpbmRleChkZmEsIGkpLCB0YWJsZV9zaXplKSkKKwkJCXJldHVybiAwOworCQlpZiAoIXZlcmlmeV94aW5kZXgoZGZhX290aGVyX3hpbmRleChkZmEsIGkpLCB0YWJsZV9zaXplKSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiB2ZXJpZnlfcHJvZmlsZSAtIERvIHBvc3QgdW5wYWNrIGFuYWx5c2lzIHRvIHZlcmlmeSBwcm9maWxlIGNvbnNpc3RlbmN5CisgKiBAcHJvZmlsZTogcHJvZmlsZSB0byB2ZXJpZnkgKE5PVCBOVUxMKQorICoKKyAqIFJldHVybnM6IDAgaWYgcGFzc2VzIHZlcmlmaWNhdGlvbiBlbHNlIGVycm9yCisgKi8KK3N0YXRpYyBpbnQgdmVyaWZ5X3Byb2ZpbGUoc3RydWN0IGFhX3Byb2ZpbGUgKnByb2ZpbGUpCit7CisJaWYgKGFhX2dfcGFyYW5vaWRfbG9hZCkgeworCQlpZiAocHJvZmlsZS0+ZmlsZS5kZmEgJiYKKwkJICAgICF2ZXJpZnlfZGZhX3hpbmRleChwcm9maWxlLT5maWxlLmRmYSwKKwkJCQkgICAgICAgcHJvZmlsZS0+ZmlsZS50cmFucy5zaXplKSkgeworCQkJYXVkaXRfaWZhY2UocHJvZmlsZSwgTlVMTCwgIkludmFsaWQgbmFtZWQgdHJhbnNpdGlvbiIsCisJCQkJICAgIE5VTEwsIC1FUFJPVE8pOworCQkJcmV0dXJuIC1FUFJPVE87CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBhYV91bnBhY2sgLSB1bnBhY2sgcGFja2VkIGJpbmFyeSBwcm9maWxlIGRhdGEgbG9hZGVkIGZyb20gdXNlciBzcGFjZQorICogQHVkYXRhOiB1c2VyIGRhdGEgY29waWVkIHRvIGttZW0gIChOT1QgTlVMTCkKKyAqIEBzaXplOiB0aGUgc2l6ZSBvZiB0aGUgdXNlciBkYXRhCisgKiBAbnM6IFJldHVybnMgbmFtZXNwYWNlIHByb2ZpbGUgaXMgaW4gaWYgc3BlY2lmaWVkIGVsc2UgTlVMTCAoTk9UIE5VTEwpCisgKgorICogVW5wYWNrIHVzZXIgZGF0YSBhbmQgcmV0dXJuIHJlZmNvdW50ZWQgYWxsb2NhdGVkIHByb2ZpbGUgb3IgRVJSX1BUUgorICoKKyAqIFJldHVybnM6IHByb2ZpbGUgZWxzZSBlcnJvciBwb2ludGVyIGlmIGZhaWxzIHRvIHVucGFjaworICovCitzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfdW5wYWNrKHZvaWQgKnVkYXRhLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqKm5zKQoreworCXN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlID0gTlVMTDsKKwlpbnQgZXJyb3I7CisJc3RydWN0IGFhX2V4dCBlID0geworCQkuc3RhcnQgPSB1ZGF0YSwKKwkJLmVuZCA9IHVkYXRhICsgc2l6ZSwKKwkJLnBvcyA9IHVkYXRhLAorCX07CisKKwllcnJvciA9IHZlcmlmeV9oZWFkZXIoJmUsIG5zKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBFUlJfUFRSKGVycm9yKTsKKworCXByb2ZpbGUgPSB1bnBhY2tfcHJvZmlsZSgmZSk7CisJaWYgKElTX0VSUihwcm9maWxlKSkKKwkJcmV0dXJuIHByb2ZpbGU7CisKKwllcnJvciA9IHZlcmlmeV9wcm9maWxlKHByb2ZpbGUpOworCWlmIChlcnJvcikgeworCQlhYV9wdXRfcHJvZmlsZShwcm9maWxlKTsKKwkJcHJvZmlsZSA9IEVSUl9QVFIoZXJyb3IpOworCX0KKworCS8qIHJldHVybiByZWZjb3VudCAqLworCXJldHVybiBwcm9maWxlOworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvYXBwYXJtb3IvcHJvY2F0dHIuYyBiL3NlY3VyaXR5L2FwcGFybW9yL3Byb2NhdHRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRhMmNmOAotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2FwcGFybW9yL3Byb2NhdHRyLmMKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBBcHBBcm1vciBzZWN1cml0eSBtb2R1bGUKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgQXBwQXJtb3IgL3Byb2MvPHBpZD4vYXR0ci8gaW50ZXJmYWNlIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDA4IE5vdmVsbC9TVVNFCisgKiBDb3B5cmlnaHQgMjAwOS0yMDEwIENhbm9uaWNhbCBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJpbmNsdWRlL2FwcGFybW9yLmgiCisjaW5jbHVkZSAiaW5jbHVkZS9jb250ZXh0LmgiCisjaW5jbHVkZSAiaW5jbHVkZS9wb2xpY3kuaCIKKyNpbmNsdWRlICJpbmNsdWRlL2RvbWFpbi5oIgorCisKKy8qKgorICogYWFfZ2V0cHJvY2F0dHIgLSBSZXR1cm4gdGhlIHByb2ZpbGUgaW5mb3JtYXRpb24gZm9yIEBwcm9maWxlCisgKiBAcHJvZmlsZTogdGhlIHByb2ZpbGUgdG8gcHJpbnQgcHJvZmlsZSBpbmZvIGFib3V0ICAoTk9UIE5VTEwpCisgKiBAc3RyaW5nOiBSZXR1cm5zIC0gc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHByb2ZpbGUgaW5mbyAoTk9UIE5VTEwpCisgKgorICogUmV0dXJuczogbGVuZ3RoIG9mIEBzdHJpbmcgb24gc3VjY2VzcyBlbHNlIGVycm9yIG9uIGZhaWx1cmUKKyAqCisgKiBSZXF1aXJlczogcHJvZmlsZSAhPSBOVUxMCisgKgorICogQ3JlYXRlcyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lc3BhY2VfbmFtZTovL3Byb2ZpbGVfbmFtZSBmb3IKKyAqIEBwcm9maWxlLgorICoKKyAqIFJldHVybnM6IHNpemUgb2Ygc3RyaW5nIHBsYWNlZCBpbiBAc3RyaW5nIGVsc2UgZXJyb3IgY29kZSBvbiBmYWlsdXJlCisgKi8KK2ludCBhYV9nZXRwcm9jYXR0cihzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSwgY2hhciAqKnN0cmluZykKK3sKKwljaGFyICpzdHI7CisJaW50IGxlbiA9IDAsIG1vZGVfbGVuID0gMCwgbnNfbGVuID0gMCwgbmFtZV9sZW47CisJY29uc3QgY2hhciAqbW9kZV9zdHIgPSBwcm9maWxlX21vZGVfbmFtZXNbcHJvZmlsZS0+bW9kZV07CisJY29uc3QgY2hhciAqbnNfbmFtZSA9IE5VTEw7CisJc3RydWN0IGFhX25hbWVzcGFjZSAqbnMgPSBwcm9maWxlLT5uczsKKwlzdHJ1Y3QgYWFfbmFtZXNwYWNlICpjdXJyZW50X25zID0gX19hYV9jdXJyZW50X3Byb2ZpbGUoKS0+bnM7CisJY2hhciAqczsKKworCWlmICghYWFfbnNfdmlzaWJsZShjdXJyZW50X25zLCBucykpCisJCXJldHVybiAtRUFDQ0VTOworCisJbnNfbmFtZSA9IGFhX25zX25hbWUoY3VycmVudF9ucywgbnMpOworCW5zX2xlbiA9IHN0cmxlbihuc19uYW1lKTsKKworCS8qIGlmIHRoZSB2aXNpYmxlIG5zX25hbWUgaXMgPiAwIGluY3JlYXNlIHNpemUgZm9yIDogOi8vIHNlcGVyYXRvciAqLworCWlmIChuc19sZW4pCisJCW5zX2xlbiArPSA0OworCisJLyogdW5jb25maW5lZCBwcm9maWxlcyBkb24ndCBoYXZlIGEgbW9kZSBzdHJpbmcgYXBwZW5kZWQgKi8KKwlpZiAoIXVuY29uZmluZWQocHJvZmlsZSkpCisJCW1vZGVfbGVuID0gc3RybGVuKG1vZGVfc3RyKSArIDM7CS8qICsgMyBmb3IgXygpICovCisKKwluYW1lX2xlbiA9IHN0cmxlbihwcm9maWxlLT5iYXNlLmhuYW1lKTsKKwlsZW4gPSBtb2RlX2xlbiArIG5zX2xlbiArIG5hbWVfbGVuICsgMTsJICAgIC8qICsgMSBmb3IgXG4gKi8KKwlzID0gc3RyID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsJICAgIC8qICsgMSBcMCAqLworCWlmICghc3RyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChuc19sZW4pIHsKKwkJLyogc2tpcCBvdmVyIHByZWZpeCBjdXJyZW50X25zLT5iYXNlLmhuYW1lIGFuZCBzZXBhcmF0aW5nIC8vICovCisJCXNwcmludGYocywgIjolczovLyIsIG5zX25hbWUpOworCQlzICs9IG5zX2xlbjsKKwl9CisJaWYgKHVuY29uZmluZWQocHJvZmlsZSkpCisJCS8qIG1vZGUgc3RyaW5nIG5vdCBiZWluZyBhcHBlbmRlZCAqLworCQlzcHJpbnRmKHMsICIlc1xuIiwgcHJvZmlsZS0+YmFzZS5obmFtZSk7CisJZWxzZQorCQlzcHJpbnRmKHMsICIlcyAoJXMpXG4iLCBwcm9maWxlLT5iYXNlLmhuYW1lLCBtb2RlX3N0cik7CisJKnN0cmluZyA9IHN0cjsKKworCS8qIE5PVEU6IGxlbiBkb2VzIG5vdCBpbmNsdWRlIFwwIG9mIHN0cmluZywgbm90IHNhdmVkIGFzIHBhcnQgb2YgZmlsZSAqLworCXJldHVybiBsZW47Cit9CisKKy8qKgorICogc3BsaXRfdG9rZW5fZnJvbV9uYW1lIC0gc2VwYXJhdGUgYSBzdHJpbmcgb2YgZm9ybSAgPHRva2VuPl48bmFtZT4KKyAqIEBvcDogb3BlcmF0aW9uIGJlaW5nIGNoZWNrZWQKKyAqIEBhcmdzOiBzdHJpbmcgdG8gcGFyc2UgIChOT1QgTlVMTCkKKyAqIEB0b2tlbjogc3RvcmVzIHJldHVybmVkIHBhcnNlZCB0b2tlbiB2YWx1ZSAgKE5PVCBOVUxMKQorICoKKyAqIFJldHVybnM6IHN0YXJ0IHBvc2l0aW9uIG9mIG5hbWUgYWZ0ZXIgdG9rZW4gZWxzZSBOVUxMIG9uIGZhaWx1cmUKKyAqLworc3RhdGljIGNoYXIgKnNwbGl0X3Rva2VuX2Zyb21fbmFtZShpbnQgb3AsIGNoYXIgKmFyZ3MsIHU2NCAqIHRva2VuKQoreworCWNoYXIgKm5hbWU7CisKKwkqdG9rZW4gPSBzaW1wbGVfc3RydG91bGwoYXJncywgJm5hbWUsIDE2KTsKKwlpZiAoKG5hbWUgPT0gYXJncykgfHwgKm5hbWUgIT0gJ14nKSB7CisJCUFBX0VSUk9SKCIlczogSW52YWxpZCBpbnB1dCAnJXMnIiwgb3BfdGFibGVbb3BdLCBhcmdzKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJbmFtZSsrOwkJCS8qIHNraXAgXiAqLworCWlmICghKm5hbWUpCisJCW5hbWUgPSBOVUxMOworCXJldHVybiBuYW1lOworfQorCisvKioKKyAqIGFhX3NldHByb2NhdHRyX2NoYWduZWhhdCAtIGhhbmRsZSBwcm9jYXR0ciBpbnRlcmZhY2UgdG8gY2hhbmdlX2hhdAorICogQGFyZ3M6IGFyZ3MgcmVjZWl2ZWQgZnJvbSB3cml0aW5nIHRvIC9wcm9jLzxwaWQ+L2F0dHIvY3VycmVudCAoTk9UIE5VTEwpCisgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgYXJncworICogQHRlc3Q6IHRydWUgaWYgdGhpcyBpcyBhIHRlc3Qgb2YgY2hhbmdlX2hhdCBwZXJtaXNzaW9ucworICoKKyAqIFJldHVybnM6ICUwIG9yIGVycm9yIGNvZGUgaWYgY2hhbmdlX2hhdCBmYWlscworICovCitpbnQgYWFfc2V0cHJvY2F0dHJfY2hhbmdlaGF0KGNoYXIgKmFyZ3MsIHNpemVfdCBzaXplLCBpbnQgdGVzdCkKK3sKKwljaGFyICpoYXQ7CisJdTY0IHRva2VuOworCWNvbnN0IGNoYXIgKmhhdHNbMTZdOwkJLyogY3VycmVudCBoYXJkIGxpbWl0IG9uICMgb2YgbmFtZXMgKi8KKwlpbnQgY291bnQgPSAwOworCisJaGF0ID0gc3BsaXRfdG9rZW5fZnJvbV9uYW1lKE9QX0NIQU5HRV9IQVQsIGFyZ3MsICZ0b2tlbik7CisJaWYgKElTX0VSUihoYXQpKQorCQlyZXR1cm4gUFRSX0VSUihoYXQpOworCisJaWYgKCFoYXQgJiYgIXRva2VuKSB7CisJCUFBX0VSUk9SKCJjaGFuZ2VfaGF0OiBJbnZhbGlkIGlucHV0LCBOVUxMIGhhdCBhbmQgTlVMTCBtYWdpYyIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoaGF0KSB7CisJCS8qIHNldCB1cCBoYXQgbmFtZSB2ZWN0b3IsIGFyZ3MgZ3VhcmFudGVlZCBudWxsIHRlcm1pbmF0ZWQKKwkJICogYXQgYXJnc1tzaXplXSBieSBzZXRwcm9jYXR0ci4KKwkJICoKKwkJICogSWYgdGhlcmUgYXJlIG11bHRpcGxlIGhhdCBuYW1lcyBpbiB0aGUgYnVmZmVyIGVhY2ggaXMKKwkJICogc2VwYXJhdGVkIGJ5IGEgXDAuICBJZS4gdXNlcnNwYWNlIHdyaXRlcyB0aGVtIHByZSB0b2tlbml6ZWQKKwkJICovCisJCWNoYXIgKmVuZCA9IGFyZ3MgKyBzaXplOworCQlmb3IgKGNvdW50ID0gMDsgKGhhdCA8IGVuZCkgJiYgY291bnQgPCAxNjsgKytjb3VudCkgeworCQkJY2hhciAqbmV4dCA9IGhhdCArIHN0cmxlbihoYXQpICsgMTsKKwkJCWhhdHNbY291bnRdID0gaGF0OworCQkJaGF0ID0gbmV4dDsKKwkJfQorCX0KKworCUFBX0RFQlVHKCIlczogTWFnaWMgMHglbGx4IEhhdCAnJXMnXG4iLAorCQkgX19mdW5jX18sIHRva2VuLCBoYXQgPyBoYXQgOiBOVUxMKTsKKworCXJldHVybiBhYV9jaGFuZ2VfaGF0KGhhdHMsIGNvdW50LCB0b2tlbiwgdGVzdCk7Cit9CisKKy8qKgorICogYWFfc2V0cHJvY2F0dHJfY2hhbmdlcHJvZmlsZSAtIGhhbmRsZSBwcm9jYXR0ciBpbnRlcmZhY2UgdG8gY2hhbmdlcHJvZmlsZQorICogQGZxbmFtZTogYXJncyByZWNlaXZlZCBmcm9tIHdyaXR0aW5nIHRvIC9wcm9jLzxwaWQ+L2F0dHIvY3VycmVudCAoTk9UIE5VTEwpCisgKiBAb25leGVjOiB0cnVlIGlmIGNoYW5nZV9wcm9maWxlIHNob3VsZCBiZSBkZWxheWVkIHVudGlsIGV4ZWMKKyAqIEB0ZXN0OiB0cnVlIGlmIHRoaXMgaXMgYSB0ZXN0IG9mIGNoYW5nZV9wcm9maWxlIHBlcm1pc3Npb25zCisgKgorICogUmV0dXJuczogJTAgb3IgZXJyb3IgY29kZSBpZiBjaGFuZ2VfcHJvZmlsZSBmYWlscworICovCitpbnQgYWFfc2V0cHJvY2F0dHJfY2hhbmdlcHJvZmlsZShjaGFyICpmcW5hbWUsIGJvb2wgb25leGVjLCBpbnQgdGVzdCkKK3sKKwljaGFyICpuYW1lLCAqbnNfbmFtZTsKKworCW5hbWUgPSBhYV9zcGxpdF9mcW5hbWUoZnFuYW1lLCAmbnNfbmFtZSk7CisJcmV0dXJuIGFhX2NoYW5nZV9wcm9maWxlKG5zX25hbWUsIG5hbWUsIG9uZXhlYywgdGVzdCk7Cit9CisKK2ludCBhYV9zZXRwcm9jYXR0cl9wZXJtaXBjKGNoYXIgKmZxbmFtZSkKK3sKKwkvKiBUT0RPOiBhZGQgaXBjIHBlcm1pc3Npb24gcXVlcnlpbmcgKi8KKwlyZXR1cm4gLUVOT1RTVVBQOworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvYXBwYXJtb3IvcmVzb3VyY2UuYyBiL3NlY3VyaXR5L2FwcGFybW9yL3Jlc291cmNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEzNjhmMQotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2FwcGFybW9yL3Jlc291cmNlLmMKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBBcHBBcm1vciBzZWN1cml0eSBtb2R1bGUKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgQXBwQXJtb3IgcmVzb3VyY2UgbWVkaWF0aW9uIGFuZCBhdHRhY2htZW50CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDggTm92ZWxsL1NVU0UKKyAqIENvcHlyaWdodCAyMDA5LTIwMTAgQ2Fub25pY2FsIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CisKKyNpbmNsdWRlICJpbmNsdWRlL2F1ZGl0LmgiCisjaW5jbHVkZSAiaW5jbHVkZS9yZXNvdXJjZS5oIgorI2luY2x1ZGUgImluY2x1ZGUvcG9saWN5LmgiCisKKy8qCisgKiBUYWJsZSBvZiBybGltaXQgbmFtZXM6IHdlIGdlbmVyYXRlIGl0IGZyb20gcmVzb3VyY2UuaC4KKyAqLworI2luY2x1ZGUgInJsaW1fbmFtZXMuaCIKKworLyogYXVkaXQgY2FsbGJhY2sgZm9yIHJlc291cmNlIHNwZWNpZmljIGZpZWxkcyAqLworc3RhdGljIHZvaWQgYXVkaXRfY2Ioc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWIsIHZvaWQgKnZhKQoreworCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqc2EgPSB2YTsKKworCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgcmxpbWl0PSVzIHZhbHVlPSVsdSIsCisJCQkgcmxpbV9uYW1lc1tzYS0+YWFkLnJsaW0ucmxpbV0sIHNhLT5hYWQucmxpbS5tYXgpOworfQorCisvKioKKyAqIGF1ZGl0X3Jlc291cmNlIC0gYXVkaXQgc2V0dGluZyByZXNvdXJjZSBsaW1pdAorICogQHByb2ZpbGU6IHByb2ZpbGUgYmVpbmcgZW5mb3JjZWQgIChOT1QgTlVMTCkKKyAqIEByZXNvdXJlOiBybGltaXQgYmVpbmcgYXVkaXRpbmcKKyAqIEB2YWx1ZTogdmFsdWUgYmVpbmcgc2V0CisgKiBAZXJyb3I6IGVycm9yIHZhbHVlCisgKgorICogUmV0dXJuczogMCBvciBzYS0+ZXJyb3IgZWxzZSBvdGhlciBlcnJvciBjb2RlIG9uIGZhaWx1cmUKKyAqLworc3RhdGljIGludCBhdWRpdF9yZXNvdXJjZShzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSwgdW5zaWduZWQgaW50IHJlc291cmNlLAorCQkJICB1bnNpZ25lZCBsb25nIHZhbHVlLCBpbnQgZXJyb3IpCit7CisJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIHNhOworCisJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmc2EsIE5PTkUpOworCXNhLmFhZC5vcCA9IE9QX1NFVFJMSU1JVCwKKwlzYS5hYWQucmxpbS5ybGltID0gcmVzb3VyY2U7CisJc2EuYWFkLnJsaW0ubWF4ID0gdmFsdWU7CisJc2EuYWFkLmVycm9yID0gZXJyb3I7CisJcmV0dXJuIGFhX2F1ZGl0KEFVRElUX0FQUEFSTU9SX0FVVE8sIHByb2ZpbGUsIEdGUF9LRVJORUwsICZzYSwKKwkJCWF1ZGl0X2NiKTsKK30KKworLyoqCisgKiBhYV9tYXBfcmVzb3VjZSAtIG1hcCBjb21waWxlZCBwb2xpY3kgcmVzb3VyY2UgdG8gaW50ZXJuYWwgIworICogQHJlc291cmNlOiBmbGF0dGVuZWQgcG9saWN5IHJlc291cmNlIG51bWJlcgorICoKKyAqIFJldHVybnM6IHJlc291cmNlICMgZm9yIHRoZSBjdXJyZW50IGFyY2hpdGVjdHVyZS4KKyAqCisgKiBybGltaXQgcmVzb3VyY2UgY2FuIHZhcnkgYmFzZWQgb24gYXJjaGl0ZWN0dXJlLCBtYXAgdGhlIGNvbXBpbGVkIHBvbGljeQorICogcmVzb3VyY2UgIyB0byB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBhcmNoaXRlY3R1cmUuCisgKi8KK2ludCBhYV9tYXBfcmVzb3VyY2UoaW50IHJlc291cmNlKQoreworCXJldHVybiBybGltX21hcFtyZXNvdXJjZV07Cit9CisKKy8qKgorICogYWFfdGFza19zZXRybGltaXQgLSB0ZXN0IHBlcm1pc3Npb24gdG8gc2V0IGFuIHJsaW1pdAorICogQHByb2ZpbGUgLSBwcm9maWxlIGNvbmZpbmluZyB0aGUgdGFzayAgKE5PVCBOVUxMKQorICogQHJlc291cmNlIC0gdGhlIHJlc291cmNlIGJlaW5nIHNldAorICogQG5ld19ybGltIC0gdGhlIG5ldyByZXNvdXJjZSBsaW1pdCAgKE5PVCBOVUxMKQorICoKKyAqIENvbnRyb2wgcmFpc2luZyB0aGUgcHJvY2Vzc2VzIGhhcmQgbGltaXQuCisgKgorICogUmV0dXJuczogMCBvciBlcnJvciBjb2RlIGlmIHNldHRpbmcgcmVzb3VyY2UgZmFpbGVkCisgKi8KK2ludCBhYV90YXNrX3NldHJsaW1pdChzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSwgdW5zaWduZWQgaW50IHJlc291cmNlLAorCQkgICAgICBzdHJ1Y3QgcmxpbWl0ICpuZXdfcmxpbSkKK3sKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKHByb2ZpbGUtPnJsaW1pdHMubWFzayAmICgxIDw8IHJlc291cmNlKSAmJgorCSAgICBuZXdfcmxpbS0+cmxpbV9tYXggPiBwcm9maWxlLT5ybGltaXRzLmxpbWl0c1tyZXNvdXJjZV0ucmxpbV9tYXgpCisKKwkJZXJyb3IgPSBhdWRpdF9yZXNvdXJjZShwcm9maWxlLCByZXNvdXJjZSwgbmV3X3JsaW0tPnJsaW1fbWF4LAorCQkJLUVBQ0NFUyk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogX19hYV90cmFuc2l0aW9uX3JsaW1pdHMgLSBhcHBseSBuZXcgcHJvZmlsZSBybGltaXRzCisgKiBAb2xkOiBvbGQgcHJvZmlsZSBvbiB0YXNrICAoTk9UIE5VTEwpCisgKiBAbmV3OiBuZXcgcHJvZmlsZSB3aXRoIHJsaW1pdHMgdG8gYXBwbHkgIChOT1QgTlVMTCkKKyAqLwordm9pZCBfX2FhX3RyYW5zaXRpb25fcmxpbWl0cyhzdHJ1Y3QgYWFfcHJvZmlsZSAqb2xkLCBzdHJ1Y3QgYWFfcHJvZmlsZSAqbmV3KQoreworCXVuc2lnbmVkIGludCBtYXNrID0gMDsKKwlzdHJ1Y3QgcmxpbWl0ICpybGltLCAqaW5pdHJsaW07CisJaW50IGk7CisKKwkvKiBmb3IgYW55IHJsaW1pdHMgdGhlIHByb2ZpbGUgY29udHJvbGxlZCByZXNldCB0aGUgc29mdCBsaW1pdAorCSAqIHRvIHRoZSBsZXNzIG9mIHRoZSB0YXNrcyBoYXJkIGxpbWl0IGFuZCB0aGUgaW5pdCB0YXNrcyBzb2Z0IGxpbWl0CisJICovCisJaWYgKG9sZC0+cmxpbWl0cy5tYXNrKSB7CisJCWZvciAoaSA9IDAsIG1hc2sgPSAxOyBpIDwgUkxJTV9OTElNSVRTOyBpKyssIG1hc2sgPDw9IDEpIHsKKwkJCWlmIChvbGQtPnJsaW1pdHMubWFzayAmIG1hc2spIHsKKwkJCQlybGltID0gY3VycmVudC0+c2lnbmFsLT5ybGltICsgaTsKKwkJCQlpbml0cmxpbSA9IGluaXRfdGFzay5zaWduYWwtPnJsaW0gKyBpOworCQkJCXJsaW0tPnJsaW1fY3VyID0gbWluKHJsaW0tPnJsaW1fbWF4LAorCQkJCQkJICAgICBpbml0cmxpbS0+cmxpbV9jdXIpOworCQkJfQorCQl9CisJfQorCisJLyogc2V0IGFueSBuZXcgaGFyZCBsaW1pdHMgYXMgZGljdGF0ZWQgYnkgdGhlIG5ldyBwcm9maWxlICovCisJaWYgKCFuZXctPnJsaW1pdHMubWFzaykKKwkJcmV0dXJuOworCWZvciAoaSA9IDAsIG1hc2sgPSAxOyBpIDwgUkxJTV9OTElNSVRTOyBpKyssIG1hc2sgPDw9IDEpIHsKKwkJaWYgKCEobmV3LT5ybGltaXRzLm1hc2sgJiBtYXNrKSkKKwkJCWNvbnRpbnVlOworCisJCXJsaW0gPSBjdXJyZW50LT5zaWduYWwtPnJsaW0gKyBpOworCQlybGltLT5ybGltX21heCA9IG1pbihybGltLT5ybGltX21heCwKKwkJCQkgICAgIG5ldy0+cmxpbWl0cy5saW1pdHNbaV0ucmxpbV9tYXgpOworCQkvKiBzb2Z0IGxpbWl0IHNob3VsZCBub3QgZXhjZWVkIGhhcmQgbGltaXQgKi8KKwkJcmxpbS0+cmxpbV9jdXIgPSBtaW4ocmxpbS0+cmxpbV9jdXIsIHJsaW0tPnJsaW1fbWF4KTsKKwl9Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9hcHBhcm1vci9zaWQuYyBiL3NlY3VyaXR5L2FwcGFybW9yL3NpZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYjM0ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9hcHBhcm1vci9zaWQuYwpAQCAtMCwwICsxLDU1IEBACisvKgorICogQXBwQXJtb3Igc2VjdXJpdHkgbW9kdWxlCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIEFwcEFybW9yIHNlY3VyaXR5IGlkZW50aWZpZXIgKHNpZCkgbWFuaXB1bGF0aW9uIGZucworICoKKyAqIENvcHlyaWdodCAyMDA5LTIwMTAgQ2Fub25pY2FsIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKgorICoKKyAqIEFwcEFybW9yIGFsbG9jYXRlcyBhIHVuaXF1ZSBzaWQgZm9yIGV2ZXJ5IHByb2ZpbGUgbG9hZGVkLiAgSWYgYSBwcm9maWxlCisgKiBpcyByZXBsYWNlZCBpdCByZWNlaXZlcyB0aGUgc2lkIG9mIHRoZSBwcm9maWxlIGl0IGlzIHJlcGxhY2luZy4KKyAqCisgKiBUaGUgc2lkIHZhbHVlIG9mIDAgaXMgaW52YWxpZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisjaW5jbHVkZSAiaW5jbHVkZS9zaWQuaCIKKworLyogZ2xvYmFsIGNvdW50ZXIgZnJvbSB3aGljaCBzaWRzIGFyZSBhbGxvY2F0ZWQgKi8KK3N0YXRpYyB1MzIgZ2xvYmFsX3NpZDsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2lkX2xvY2spOworCisvKiBUT0RPIEZJWE1FOiBhZGQgc2lkIHRvIHByb2ZpbGUgbWFwcGluZywgYW5kIHNpZCByZWN5Y2xpbmcgKi8KKworLyoqCisgKiBhYV9hbGxvY19zaWQgLSBhbGxvY2F0ZSBhIG5ldyBzaWQgZm9yIGEgcHJvZmlsZQorICovCit1MzIgYWFfYWxsb2Nfc2lkKHZvaWQpCit7CisJdTMyIHNpZDsKKworCS8qCisJICogVE9ETyBGSVhNRTogc2lkIHJlY3ljbGluZyAtIHBhcnQgb2YgcHJvZmlsZSBtYXBwaW5nIHRhYmxlCisJICovCisJc3Bpbl9sb2NrKCZzaWRfbG9jayk7CisJc2lkID0gKCsrZ2xvYmFsX3NpZCk7CisJc3Bpbl91bmxvY2soJnNpZF9sb2NrKTsKKwlyZXR1cm4gc2lkOworfQorCisvKioKKyAqIGFhX2ZyZWVfc2lkIC0gZnJlZSBhIHNpZAorICogQHNpZDogc2lkIHRvIGZyZWUKKyAqLwordm9pZCBhYV9mcmVlX3NpZCh1MzIgc2lkKQoreworCTsJCQkvKiBOT1AgQVRNICovCit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9jYXBhYmlsaXR5LmMgYi9zZWN1cml0eS9jYXBhYmlsaXR5LmMKaW5kZXggODE2OGUzZS4uYTBiYmYzMCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvY2FwYWJpbGl0eS5jCisrKyBiL3NlY3VyaXR5L2NhcGFiaWxpdHkuYwpAQCAtMjcsNyArMjcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNhcF9icHJtX2NoZWNrX3NlY3VyaXR5IChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQorc3RhdGljIGludCBjYXBfYnBybV9jaGVja19zZWN1cml0eShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQogewogCXJldHVybiAwOwogfQpAQCAtMjY4LDggKzI2OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY2FwX3BhdGhfdHJ1bmNhdGUoc3RydWN0IHBhdGggKnBhdGgsIGxvZmZfdCBsZW5ndGgsCi0JCQkgICAgIHVuc2lnbmVkIGludCB0aW1lX2F0dHJzKQorc3RhdGljIGludCBjYXBfcGF0aF90cnVuY2F0ZShzdHJ1Y3QgcGF0aCAqcGF0aCkKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2lub2RlLmMgYi9zZWN1cml0eS9pbm9kZS5jCmluZGV4IDFjODEyZTguLjhjNzc3ZjAgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2lub2RlLmMKKysrIGIvc2VjdXJpdHkvaW5vZGUuYwpAQCAtODYsNyArODYsNyBAQAogCQkJIGludCBtb2RlLCBkZXZfdCBkZXYpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKLQlpbnQgZXJyb3IgPSAtRVBFUk07CisJaW50IGVycm9yID0gLUVOT01FTTsKIAogCWlmIChkZW50cnktPmRfaW5vZGUpCiAJCXJldHVybiAtRUVYSVNUOwpAQCAtMTY2LDYgKzE2Niw4IEBACiAJCQllcnJvciA9IG1rZGlyKHBhcmVudC0+ZF9pbm9kZSwgKmRlbnRyeSwgbW9kZSk7CiAJCWVsc2UKIAkJCWVycm9yID0gY3JlYXRlKHBhcmVudC0+ZF9pbm9kZSwgKmRlbnRyeSwgbW9kZSk7CisJCWlmIChlcnJvcikKKwkJCWRwdXQoKmRlbnRyeSk7CiAJfSBlbHNlCiAJCWVycm9yID0gUFRSX0VSUigqZGVudHJ5KTsKIAltdXRleF91bmxvY2soJnBhcmVudC0+ZF9pbm9kZS0+aV9tdXRleCk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9mcy5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfZnMuYwppbmRleCA4ZmU3MzZhLi5lZjIxYjk2IDEwMDY0NAotLS0gYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9mcy5jCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2ZzLmMKQEAgLTQ1LDcgKzQ1LDggQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX2h0YWJsZV92aW9sYXRpb25zX29wcyA9IHsKLQkucmVhZCA9IGltYV9zaG93X2h0YWJsZV92aW9sYXRpb25zCisJLnJlYWQgPSBpbWFfc2hvd19odGFibGVfdmlvbGF0aW9ucywKKwkubGxzZWVrID0gZ2VuZXJpY19maWxlX2xsc2VlaywKIH07CiAKIHN0YXRpYyBzc2l6ZV90IGltYV9zaG93X21lYXN1cmVtZW50c19jb3VudChzdHJ1Y3QgZmlsZSAqZmlscCwKQEAgLTU3LDcgKzU4LDggQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX21lYXN1cmVtZW50c19jb3VudF9vcHMgPSB7Ci0JLnJlYWQgPSBpbWFfc2hvd19tZWFzdXJlbWVudHNfY291bnQKKwkucmVhZCA9IGltYV9zaG93X21lYXN1cmVtZW50c19jb3VudCwKKwkubGxzZWVrID0gZ2VuZXJpY19maWxlX2xsc2VlaywKIH07CiAKIC8qIHJldHVybnMgcG9pbnRlciB0byBobGlzdF9ub2RlICovCkBAIC0zMTksNyArMzIxLDggQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9tZWFzdXJlX3BvbGljeV9vcHMgPSB7CiAJLm9wZW4gPSBpbWFfb3Blbl9wb2xpY3ksCiAJLndyaXRlID0gaW1hX3dyaXRlX3BvbGljeSwKLQkucmVsZWFzZSA9IGltYV9yZWxlYXNlX3BvbGljeQorCS5yZWxlYXNlID0gaW1hX3JlbGVhc2VfcG9saWN5LAorCS5sbHNlZWsgPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogfTsKIAogaW50IF9faW5pdCBpbWFfZnNfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9pbnRlcm5hbC5oIGIvc2VjdXJpdHkva2V5cy9pbnRlcm5hbC5oCmluZGV4IDM4NzgzZGMuLmFkZGI2N2IgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvaW50ZXJuYWwuaAorKysgYi9zZWN1cml0eS9rZXlzL2ludGVybmFsLmgKQEAgLTExNCw2ICsxMTQsMTAgQEAKIAkJCQkgICAgY29uc3Qgdm9pZCAqZGVzY3JpcHRpb24sCiAJCQkJICAgIGtleV9tYXRjaF9mdW5jX3QgbWF0Y2gpOwogCitleHRlcm4ga2V5X3JlZl90IHNlYXJjaF9teV9wcm9jZXNzX2tleXJpbmdzKHN0cnVjdCBrZXlfdHlwZSAqdHlwZSwKKwkJCQkJICAgIGNvbnN0IHZvaWQgKmRlc2NyaXB0aW9uLAorCQkJCQkgICAga2V5X21hdGNoX2Z1bmNfdCBtYXRjaCwKKwkJCQkJICAgIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKTsKIGV4dGVybiBrZXlfcmVmX3Qgc2VhcmNoX3Byb2Nlc3Nfa2V5cmluZ3Moc3RydWN0IGtleV90eXBlICp0eXBlLAogCQkJCQkgY29uc3Qgdm9pZCAqZGVzY3JpcHRpb24sCiAJCQkJCSBrZXlfbWF0Y2hfZnVuY190IG1hdGNoLApAQCAtMTM0LDYgKzEzOCw3IEBACiAJCQkJCXN0cnVjdCBrZXkgKmRlc3Rfa2V5cmluZywKIAkJCQkJdW5zaWduZWQgbG9uZyBmbGFncyk7CiAKK2V4dGVybiBpbnQgbG9va3VwX3VzZXJfa2V5X3Bvc3Nlc3NlZChjb25zdCBzdHJ1Y3Qga2V5ICprZXksIGNvbnN0IHZvaWQgKnRhcmdldCk7CiBleHRlcm4ga2V5X3JlZl90IGxvb2t1cF91c2VyX2tleShrZXlfc2VyaWFsX3QgaWQsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCQkJIGtleV9wZXJtX3QgcGVybSk7CiAjZGVmaW5lIEtFWV9MT09LVVBfQ1JFQVRFCTB4MDEKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMgYi9zZWN1cml0eS9rZXlzL2tleWN0bC5jCmluZGV4IDYyNjE3NDUuLmIyYjA5OTggMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMKKysrIGIvc2VjdXJpdHkva2V5cy9rZXljdGwuYwpAQCAtNTA1LDEzICs1MDUsMTEgQEAKIAogCXJldCA9IHNucHJpbnRmKHRtcGJ1ZiwgUEFHRV9TSVpFIC0gMSwKIAkJICAgICAgICIlczslZDslZDslMDh4OyVzIiwKLQkJICAgICAgIGtleV9yZWZfdG9fcHRyKGtleV9yZWYpLT50eXBlLT5uYW1lLAotCQkgICAgICAga2V5X3JlZl90b19wdHIoa2V5X3JlZiktPnVpZCwKLQkJICAgICAgIGtleV9yZWZfdG9fcHRyKGtleV9yZWYpLT5naWQsCi0JCSAgICAgICBrZXlfcmVmX3RvX3B0cihrZXlfcmVmKS0+cGVybSwKLQkJICAgICAgIGtleV9yZWZfdG9fcHRyKGtleV9yZWYpLT5kZXNjcmlwdGlvbiA/Ci0JCSAgICAgICBrZXlfcmVmX3RvX3B0cihrZXlfcmVmKS0+ZGVzY3JpcHRpb24gOiAiIgotCQkgICAgICAgKTsKKwkJICAgICAgIGtleS0+dHlwZS0+bmFtZSwKKwkJICAgICAgIGtleS0+dWlkLAorCQkgICAgICAga2V5LT5naWQsCisJCSAgICAgICBrZXktPnBlcm0sCisJCSAgICAgICBrZXktPmRlc2NyaXB0aW9uID86ICIiKTsKIAogCS8qIGluY2x1ZGUgYSBOVUwgY2hhciBhdCB0aGUgZW5kIG9mIHRoZSBkYXRhICovCiAJaWYgKHJldCA+IFBBR0VfU0laRSAtIDEpCkBAIC0xMDkxLDcgKzEwODksNyBAQAogbG9uZyBrZXljdGxfc2V0X3RpbWVvdXQoa2V5X3NlcmlhbF90IGlkLCB1bnNpZ25lZCB0aW1lb3V0KQogewogCXN0cnVjdCB0aW1lc3BlYyBub3c7Ci0Jc3RydWN0IGtleSAqa2V5OworCXN0cnVjdCBrZXkgKmtleSwgKmluc3RrZXk7CiAJa2V5X3JlZl90IGtleV9yZWY7CiAJdGltZV90IGV4cGlyeTsKIAlsb25nIHJldDsKQEAgLTEwOTksMTAgKzEwOTcsMjUgQEAKIAlrZXlfcmVmID0gbG9va3VwX3VzZXJfa2V5KGlkLCBLRVlfTE9PS1VQX0NSRUFURSB8IEtFWV9MT09LVVBfUEFSVElBTCwKIAkJCQkgIEtFWV9TRVRBVFRSKTsKIAlpZiAoSVNfRVJSKGtleV9yZWYpKSB7CisJCS8qIHNldHRpbmcgdGhlIHRpbWVvdXQgb24gYSBrZXkgdW5kZXIgY29uc3RydWN0aW9uIGlzIHBlcm1pdHRlZAorCQkgKiBpZiB3ZSBoYXZlIHRoZSBhdXRob3Jpc2F0aW9uIHRva2VuIGhhbmR5ICovCisJCWlmIChQVFJfRVJSKGtleV9yZWYpID09IC1FQUNDRVMpIHsKKwkJCWluc3RrZXkgPSBrZXlfZ2V0X2luc3RhbnRpYXRpb25fYXV0aGtleShpZCk7CisJCQlpZiAoIUlTX0VSUihpbnN0a2V5KSkgeworCQkJCWtleV9wdXQoaW5zdGtleSk7CisJCQkJa2V5X3JlZiA9IGxvb2t1cF91c2VyX2tleShpZCwKKwkJCQkJCQkgIEtFWV9MT09LVVBfUEFSVElBTCwKKwkJCQkJCQkgIDApOworCQkJCWlmICghSVNfRVJSKGtleV9yZWYpKQorCQkJCQlnb3RvIG9rYXk7CisJCQl9CisJCX0KKwogCQlyZXQgPSBQVFJfRVJSKGtleV9yZWYpOwogCQlnb3RvIGVycm9yOwogCX0KIAorb2theToKIAlrZXkgPSBrZXlfcmVmX3RvX3B0cihrZXlfcmVmKTsKIAogCS8qIG1ha2UgdGhlIGNoYW5nZXMgd2l0aCB0aGUgbG9ja3MgaGVsZCB0byBwcmV2ZW50IHJhY2VzICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3Byb2MuYyBiL3NlY3VyaXR5L2tleXMvcHJvYy5jCmluZGV4IDA2OGI2NmUuLjcwMzczOTY2IDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL3Byb2MuYworKysgYi9zZWN1cml0eS9rZXlzL3Byb2MuYwpAQCAtMTg0LDIwICsxODQsMzYgQEAKIAogc3RhdGljIGludCBwcm9jX2tleXNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CisJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKIAlzdHJ1Y3QgcmJfbm9kZSAqX3AgPSB2OwogCXN0cnVjdCBrZXkgKmtleSA9IHJiX2VudHJ5KF9wLCBzdHJ1Y3Qga2V5LCBzZXJpYWxfbm9kZSk7CiAJc3RydWN0IHRpbWVzcGVjIG5vdzsKIAl1bnNpZ25lZCBsb25nIHRpbW87CisJa2V5X3JlZl90IGtleV9yZWYsIHNrZXlfcmVmOwogCWNoYXIgeGJ1ZlsxMl07CiAJaW50IHJjOwogCisJa2V5X3JlZiA9IG1ha2Vfa2V5X3JlZihrZXksIDApOworCisJLyogZGV0ZXJtaW5lIGlmIHRoZSBrZXkgaXMgcG9zc2Vzc2VkIGJ5IHRoaXMgcHJvY2VzcyAoYSB0ZXN0IHdlIGNhbgorCSAqIHNraXAgaWYgdGhlIGtleSBkb2VzIG5vdCBpbmRpY2F0ZSB0aGUgcG9zc2Vzc29yIGNhbiB2aWV3IGl0CisJICovCisJaWYgKGtleS0+cGVybSAmIEtFWV9QT1NfVklFVykgeworCQlza2V5X3JlZiA9IHNlYXJjaF9teV9wcm9jZXNzX2tleXJpbmdzKGtleS0+dHlwZSwga2V5LAorCQkJCQkJICAgICAgbG9va3VwX3VzZXJfa2V5X3Bvc3Nlc3NlZCwKKwkJCQkJCSAgICAgIGNyZWQpOworCQlpZiAoIUlTX0VSUihza2V5X3JlZikpIHsKKwkJCWtleV9yZWZfcHV0KHNrZXlfcmVmKTsKKwkJCWtleV9yZWYgPSBtYWtlX2tleV9yZWYoa2V5LCAxKTsKKwkJfQorCX0KKwogCS8qIGNoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgdGFzayBpcyBhbGxvd2VkIHRvIHZpZXcgdGhlIGtleSAoYXNzdW1pbmcKIAkgKiBub24tcG9zc2Vzc2lvbikKIAkgKiAtIHRoZSBjYWxsZXIgaG9sZHMgYSBzcGlubG9jaywgYW5kIHRodXMgdGhlIFJDVSByZWFkIGxvY2ssIG1ha2luZyBvdXIKIAkgKiAgIGFjY2VzcyB0byBfX2N1cnJlbnRfY3JlZCgpIHNhZmUKIAkgKi8KLQlyYyA9IGtleV90YXNrX3Blcm1pc3Npb24obWFrZV9rZXlfcmVmKGtleSwgMCksIGN1cnJlbnRfY3JlZCgpLAotCQkJCSBLRVlfVklFVyk7CisJcmMgPSBrZXlfdGFza19wZXJtaXNzaW9uKGtleV9yZWYsIGNyZWQsIEtFWV9WSUVXKTsKIAlpZiAocmMgPCAwKQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9wcm9jZXNzX2tleXMuYyBiL3NlY3VyaXR5L2tleXMvcHJvY2Vzc19rZXlzLmMKaW5kZXggNmI4ZTRmZi4uZjhlNzI1MSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9wcm9jZXNzX2tleXMuYworKysgYi9zZWN1cml0eS9rZXlzL3Byb2Nlc3Nfa2V5cy5jCkBAIC0zMDksMjIgKzMwOSwxOSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICogc2VhcmNoIHRoZSBwcm9jZXNzIGtleXJpbmdzIGZvciB0aGUgZmlyc3QgbWF0Y2hpbmcga2V5CisgKiBzZWFyY2ggb25seSBteSBwcm9jZXNzIGtleXJpbmdzIGZvciB0aGUgZmlyc3QgbWF0Y2hpbmcga2V5CiAgKiAtIHdlIHVzZSB0aGUgc3VwcGxpZWQgbWF0Y2ggZnVuY3Rpb24gdG8gc2VlIGlmIHRoZSBkZXNjcmlwdGlvbiAob3Igb3RoZXIKICAqICAgZmVhdHVyZSBvZiBpbnRlcmVzdCkgbWF0Y2hlcwogICogLSB3ZSByZXR1cm4gLUVBR0FJTiBpZiB3ZSBkaWRuJ3QgZmluZCBhbnkgbWF0Y2hpbmcga2V5CiAgKiAtIHdlIHJldHVybiAtRU5PS0VZIGlmIHdlIGZvdW5kIG9ubHkgbmVnYXRpdmUgbWF0Y2hpbmcga2V5cwogICovCi1rZXlfcmVmX3Qgc2VhcmNoX3Byb2Nlc3Nfa2V5cmluZ3Moc3RydWN0IGtleV90eXBlICp0eXBlLAotCQkJCSAgY29uc3Qgdm9pZCAqZGVzY3JpcHRpb24sCi0JCQkJICBrZXlfbWF0Y2hfZnVuY190IG1hdGNoLAotCQkJCSAgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpCitrZXlfcmVmX3Qgc2VhcmNoX215X3Byb2Nlc3Nfa2V5cmluZ3Moc3RydWN0IGtleV90eXBlICp0eXBlLAorCQkJCSAgICAgY29uc3Qgdm9pZCAqZGVzY3JpcHRpb24sCisJCQkJICAgICBrZXlfbWF0Y2hfZnVuY190IG1hdGNoLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpCiB7Ci0Jc3RydWN0IHJlcXVlc3Rfa2V5X2F1dGggKnJrYTsKIAlrZXlfcmVmX3Qga2V5X3JlZiwgcmV0LCBlcnI7CiAKLQltaWdodF9zbGVlcCgpOwotCiAJLyogd2Ugd2FudCB0byByZXR1cm4gLUVBR0FJTiBvciAtRU5PS0VZIGlmIGFueSBvZiB0aGUga2V5cmluZ3Mgd2VyZQogCSAqIHNlYXJjaGFibGUsIGJ1dCB3ZSBmYWlsZWQgdG8gZmluZCBhIGtleSBvciB3ZSBmb3VuZCBhIG5lZ2F0aXZlIGtleTsKIAkgKiBvdGhlcndpc2Ugd2Ugd2FudCB0byByZXR1cm4gYSBzYW1wbGUgZXJyb3IgKHByb2JhYmx5IC1FQUNDRVMpIGlmCkBAIC00MjQsNiArNDIxLDM2IEBACiAJCX0KIAl9CiAKKwkvKiBubyBrZXkgLSBkZWNpZGUgb24gdGhlIGVycm9yIHdlJ3JlIGdvaW5nIHRvIGdvIGZvciAqLworCWtleV9yZWYgPSByZXQgPyByZXQgOiBlcnI7CisKK2ZvdW5kOgorCXJldHVybiBrZXlfcmVmOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogc2VhcmNoIHRoZSBwcm9jZXNzIGtleXJpbmdzIGZvciB0aGUgZmlyc3QgbWF0Y2hpbmcga2V5CisgKiAtIHdlIHVzZSB0aGUgc3VwcGxpZWQgbWF0Y2ggZnVuY3Rpb24gdG8gc2VlIGlmIHRoZSBkZXNjcmlwdGlvbiAob3Igb3RoZXIKKyAqICAgZmVhdHVyZSBvZiBpbnRlcmVzdCkgbWF0Y2hlcworICogLSB3ZSByZXR1cm4gLUVBR0FJTiBpZiB3ZSBkaWRuJ3QgZmluZCBhbnkgbWF0Y2hpbmcga2V5CisgKiAtIHdlIHJldHVybiAtRU5PS0VZIGlmIHdlIGZvdW5kIG9ubHkgbmVnYXRpdmUgbWF0Y2hpbmcga2V5cworICovCitrZXlfcmVmX3Qgc2VhcmNoX3Byb2Nlc3Nfa2V5cmluZ3Moc3RydWN0IGtleV90eXBlICp0eXBlLAorCQkJCSAgY29uc3Qgdm9pZCAqZGVzY3JpcHRpb24sCisJCQkJICBrZXlfbWF0Y2hfZnVuY190IG1hdGNoLAorCQkJCSAgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpCit7CisJc3RydWN0IHJlcXVlc3Rfa2V5X2F1dGggKnJrYTsKKwlrZXlfcmVmX3Qga2V5X3JlZiwgcmV0ID0gRVJSX1BUUigtRUFDQ0VTKSwgZXJyOworCisJbWlnaHRfc2xlZXAoKTsKKworCWtleV9yZWYgPSBzZWFyY2hfbXlfcHJvY2Vzc19rZXlyaW5ncyh0eXBlLCBkZXNjcmlwdGlvbiwgbWF0Y2gsIGNyZWQpOworCWlmICghSVNfRVJSKGtleV9yZWYpKQorCQlnb3RvIGZvdW5kOworCWVyciA9IGtleV9yZWY7CisKIAkvKiBpZiB0aGlzIHByb2Nlc3MgaGFzIGFuIGluc3RhbnRpYXRpb24gYXV0aG9yaXNhdGlvbiBrZXksIHRoZW4gd2UgYWxzbwogCSAqIHNlYXJjaCB0aGUga2V5cmluZ3Mgb2YgdGhlIHByb2Nlc3MgbWVudGlvbmVkIHRoZXJlCiAJICogLSB3ZSBkb24ndCBwZXJtaXQgYWNjZXNzIHRvIHJlcXVlc3Rfa2V5IGF1dGgga2V5cyB2aWEgdGhpcyBtZXRob2QKQEAgLTQ0NiwyNCArNDczLDE5IEBACiAJCQlpZiAoIUlTX0VSUihrZXlfcmVmKSkKIAkJCQlnb3RvIGZvdW5kOwogCi0JCQlzd2l0Y2ggKFBUUl9FUlIoa2V5X3JlZikpIHsKLQkJCWNhc2UgLUVBR0FJTjogLyogbm8ga2V5ICovCi0JCQkJaWYgKHJldCkKLQkJCQkJYnJlYWs7Ci0JCQljYXNlIC1FTk9LRVk6IC8qIG5lZ2F0aXZlIGtleSAqLwotCQkJCXJldCA9IGtleV9yZWY7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWVyciA9IGtleV9yZWY7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQlyZXQgPSBrZXlfcmVmOwogCQl9IGVsc2UgewogCQkJdXBfcmVhZCgmY3JlZC0+cmVxdWVzdF9rZXlfYXV0aC0+c2VtKTsKIAkJfQogCX0KIAogCS8qIG5vIGtleSAtIGRlY2lkZSBvbiB0aGUgZXJyb3Igd2UncmUgZ29pbmcgdG8gZ28gZm9yICovCi0Ja2V5X3JlZiA9IHJldCA/IHJldCA6IGVycjsKKwlpZiAoZXJyID09IEVSUl9QVFIoLUVOT0tFWSkgfHwgcmV0ID09IEVSUl9QVFIoLUVOT0tFWSkpCisJCWtleV9yZWYgPSBFUlJfUFRSKC1FTk9LRVkpOworCWVsc2UgaWYgKGVyciA9PSBFUlJfUFRSKC1FQUNDRVMpKQorCQlrZXlfcmVmID0gcmV0OworCWVsc2UKKwkJa2V5X3JlZiA9IGVycjsKIAogZm91bmQ6CiAJcmV0dXJuIGtleV9yZWY7CkBAIC00NzQsNyArNDk2LDcgQEAKIC8qCiAgKiBzZWUgaWYgdGhlIGtleSB3ZSdyZSBsb29raW5nIGF0IGlzIHRoZSB0YXJnZXQga2V5CiAgKi8KLXN0YXRpYyBpbnQgbG9va3VwX3VzZXJfa2V5X3Bvc3Nlc3NlZChjb25zdCBzdHJ1Y3Qga2V5ICprZXksIGNvbnN0IHZvaWQgKnRhcmdldCkKK2ludCBsb29rdXBfdXNlcl9rZXlfcG9zc2Vzc2VkKGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgY29uc3Qgdm9pZCAqdGFyZ2V0KQogewogCXJldHVybiBrZXkgPT0gdGFyZ2V0OwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5LmMgYi9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5LmMKaW5kZXggZjVlYzlhYy4uMDA4OGRkOCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleS5jCisrKyBiL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXkuYwpAQCAtMTQ0LDYgKzE0NCw3IEBACiAJcHJrZXkgPSAwOwogCWlmIChjcmVkLT50Z2NyZWQtPnByb2Nlc3Nfa2V5cmluZykKIAkJcHJrZXkgPSBjcmVkLT50Z2NyZWQtPnByb2Nlc3Nfa2V5cmluZy0+c2VyaWFsOworCXNwcmludGYoa2V5cmluZ19zdHJbMV0sICIlZCIsIHBya2V5KTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlzZXNzaW9uID0gcmN1X2RlcmVmZXJlbmNlKGNyZWQtPnRnY3JlZC0+c2Vzc2lvbl9rZXlyaW5nKTsKQEAgLTUzNiw2ICs1MzcsOCBAQAogCQkJICBpbnRyID8gVEFTS19JTlRFUlJVUFRJQkxFIDogVEFTS19VTklOVEVSUlVQVElCTEUpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OworCWlmICh0ZXN0X2JpdChLRVlfRkxBR19ORUdBVElWRSwgJmtleS0+ZmxhZ3MpKQorCQlyZXR1cm4gLUVOT0tFWTsKIAlyZXR1cm4ga2V5X3ZhbGlkYXRlKGtleSk7CiB9CiBFWFBPUlRfU1lNQk9MKHdhaXRfZm9yX2tleV9jb25zdHJ1Y3Rpb24pOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKaW5kZXggMzUxOTQyYS4uZThjODdiOCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuYworKysgYi9zZWN1cml0eS9zZWN1cml0eS5jCkBAIC00MTcsMTIgKzQxNywxMSBAQAogCQkJCQkgbmV3X2RlbnRyeSk7CiB9CiAKLWludCBzZWN1cml0eV9wYXRoX3RydW5jYXRlKHN0cnVjdCBwYXRoICpwYXRoLCBsb2ZmX3QgbGVuZ3RoLAotCQkJICAgdW5zaWduZWQgaW50IHRpbWVfYXR0cnMpCitpbnQgc2VjdXJpdHlfcGF0aF90cnVuY2F0ZShzdHJ1Y3QgcGF0aCAqcGF0aCkKIHsKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShwYXRoLT5kZW50cnktPmRfaW5vZGUpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIHNlY3VyaXR5X29wcy0+cGF0aF90cnVuY2F0ZShwYXRoLCBsZW5ndGgsIHRpbWVfYXR0cnMpOworCXJldHVybiBzZWN1cml0eV9vcHMtPnBhdGhfdHJ1bmNhdGUocGF0aCk7CiB9CiAKIGludCBzZWN1cml0eV9wYXRoX2NobW9kKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHZmc21vdW50ICptbnQsCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jIGIvc2VjdXJpdHkvc2VsaW51eC9hdmMuYwppbmRleCA3ZjFhMzA0Li45ZGE2NDIwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvYXZjLmMKQEAgLTI4OCw3ICsyODgsNiBAQAogCWlmICghbm9kZSkKIAkJZ290byBvdXQ7CiAKLQlJTklUX1JDVV9IRUFEKCZub2RlLT5yaGVhZCk7CiAJSU5JVF9ITElTVF9OT0RFKCZub2RlLT5saXN0KTsKIAlhdmNfY2FjaGVfc3RhdHNfaW5jcihhbGxvY2F0aW9ucyk7CiAKQEAgLTQ4OSw5ICs0ODgsMjkgQEAKIAlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgc3RhY2tfZGF0YTsKIAl1MzIgZGVuaWVkLCBhdWRpdGVkOwogCWRlbmllZCA9IHJlcXVlc3RlZCAmIH5hdmQtPmFsbG93ZWQ7Ci0JaWYgKGRlbmllZCkKKwlpZiAoZGVuaWVkKSB7CiAJCWF1ZGl0ZWQgPSBkZW5pZWQgJiBhdmQtPmF1ZGl0ZGVueTsKLQllbHNlIGlmIChyZXN1bHQpCisJCS8qCisJCSAqIGEtPnNlbGludXhfYXVkaXRfZGF0YS5hdWRpdGRlbnkgaXMgVFJJQ0tZISAgU2V0dGluZyBhIGJpdCBpbgorCQkgKiB0aGlzIGZpZWxkIG1lYW5zIHRoYXQgQU5ZIGRlbmlhbHMgc2hvdWxkIE5PVCBiZSBhdWRpdGVkIGlmCisJCSAqIHRoZSBwb2xpY3kgY29udGFpbnMgYW4gZXhwbGljaXQgZG9udGF1ZGl0IHJ1bGUgZm9yIHRoYXQKKwkJICogcGVybWlzc2lvbi4gIFRha2Ugbm90aWNlIHRoYXQgdGhpcyBpcyB1bnJlbGF0ZWQgdG8gdGhlCisJCSAqIGFjdHVhbCBwZXJtaXNzaW9ucyB0aGF0IHdlcmUgZGVuaWVkLiAgQXMgYW4gZXhhbXBsZSBsZXRzCisJCSAqIGFzc3VtZToKKwkJICoKKwkJICogZGVuaWVkID09IFJFQUQKKwkJICogYXZkLmF1ZGl0ZGVueSAmIEFDQ0VTUyA9PSAwIChub3Qgc2V0IG1lYW5zIGV4cGxpY2l0IHJ1bGUpCisJCSAqIHNlbGludXhfYXVkaXRfZGF0YS5hdWRpdGRlbnkgJiBBQ0NFU1MgPT0gMQorCQkgKgorCQkgKiBXZSB3aWxsIE5PVCBhdWRpdCB0aGUgZGVuaWFsIGV2ZW4gdGhvdWdoIHRoZSBkZW5pZWQKKwkJICogcGVybWlzc2lvbiB3YXMgUkVBRCBhbmQgdGhlIGF1ZGl0ZGVueSBjaGVja3Mgd2VyZSBmb3IKKwkJICogQUNDRVNTCisJCSAqLworCQlpZiAoYSAmJgorCQkgICAgYS0+c2VsaW51eF9hdWRpdF9kYXRhLmF1ZGl0ZGVueSAmJgorCQkgICAgIShhLT5zZWxpbnV4X2F1ZGl0X2RhdGEuYXVkaXRkZW55ICYgYXZkLT5hdWRpdGRlbnkpKQorCQkJYXVkaXRlZCA9IDA7CisJfSBlbHNlIGlmIChyZXN1bHQpCiAJCWF1ZGl0ZWQgPSBkZW5pZWQgPSByZXF1ZXN0ZWQ7CiAJZWxzZQogCQlhdWRpdGVkID0gcmVxdWVzdGVkICYgYXZkLT5hdWRpdGFsbG93OwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDVjOWYyNWIuLjliNDBmNGMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTg3LDkgKzg3LDYgQEAKICNpbmNsdWRlICJuZXRsYWJlbC5oIgogI2luY2x1ZGUgImF1ZGl0LmgiCiAKLSNkZWZpbmUgWEFUVFJfU0VMSU5VWF9TVUZGSVggInNlbGludXgiCi0jZGVmaW5lIFhBVFRSX05BTUVfU0VMSU5VWCBYQVRUUl9TRUNVUklUWV9QUkVGSVggWEFUVFJfU0VMSU5VWF9TVUZGSVgKLQogI2RlZmluZSBOVU1fU0VMX01OVF9PUFRTIDUKIAogZXh0ZXJuIGludCBzZWxpbnV4X25sbXNnX2xvb2t1cCh1MTYgc2NsYXNzLCB1MTYgbmxtc2dfdHlwZSwgdTMyICpwZXJtKTsKQEAgLTE4OCw3ICsxODUsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHUzMiBjdXJyZW50X3NpZCh2b2lkKQogewotCWNvbnN0IHN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYyA9IGN1cnJlbnRfY3JlZCgpLT5zZWN1cml0eTsKKwljb25zdCBzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKnRzZWMgPSBjdXJyZW50X3NlY3VyaXR5KCk7CiAKIAlyZXR1cm4gdHNlYy0+c2lkOwogfQpAQCAtMjc5LDMyICsyNzYsNiBAQAogCWtmcmVlKHNic2VjKTsKIH0KIAotc3RhdGljIGludCBza19hbGxvY19zZWN1cml0eShzdHJ1Y3Qgc29jayAqc2ssIGludCBmYW1pbHksIGdmcF90IHByaW9yaXR5KQotewotCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjOwotCi0Jc2tzZWMgPSBremFsbG9jKHNpemVvZigqc2tzZWMpLCBwcmlvcml0eSk7Ci0JaWYgKCFza3NlYykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlza3NlYy0+cGVlcl9zaWQgPSBTRUNJTklUU0lEX1VOTEFCRUxFRDsKLQlza3NlYy0+c2lkID0gU0VDSU5JVFNJRF9VTkxBQkVMRUQ7Ci0Jc2stPnNrX3NlY3VyaXR5ID0gc2tzZWM7Ci0KLQlzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9yZXNldChza3NlYyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc2tfZnJlZV9zZWN1cml0eShzdHJ1Y3Qgc29jayAqc2spCi17Ci0Jc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWMgPSBzay0+c2tfc2VjdXJpdHk7Ci0KLQlzay0+c2tfc2VjdXJpdHkgPSBOVUxMOwotCXNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X2ZyZWUoc2tzZWMpOwotCWtmcmVlKHNrc2VjKTsKLX0KLQogLyogVGhlIHNlY3VyaXR5IHNlcnZlciBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZQogICAgYW55IGxhYmVsaW5nIG9yIGFjY2VzcyBkZWNpc2lvbnMgY2FuIGJlIHByb3ZpZGVkLiAqLwogZXh0ZXJuIGludCBzc19pbml0aWFsaXplZDsKQEAgLTE1ODQsOCArMTU1NSw3IEBACiAJCSAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJICAgICAgdTE2IHRjbGFzcykKIHsKLQljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOwotCWNvbnN0IHN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYyA9IGNyZWQtPnNlY3VyaXR5OworCWNvbnN0IHN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYyA9IGN1cnJlbnRfc2VjdXJpdHkoKTsKIAlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICpkc2VjOwogCXN0cnVjdCBzdXBlcmJsb2NrX3NlY3VyaXR5X3N0cnVjdCAqc2JzZWM7CiAJdTMyIHNpZCwgbmV3c2lkOwpAQCAtMTgwNiwyNyArMTc3Niw5IEBACiB7CiAJdTMyIGF2ID0gZmlsZV90b19hdihmaWxlKTsKIAotCWlmIChzZWxpbnV4X3BvbGljeWNhcF9vcGVucGVybSkgewotCQltb2RlX3QgbW9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbW9kZTsKLQkJLyoKLQkJICogbG5rIGZpbGVzIGFuZCBzb2NrcyBkbyBub3QgcmVhbGx5IGhhdmUgYW4gJ29wZW4nCi0JCSAqLwotCQlpZiAoU19JU1JFRyhtb2RlKSkKLQkJCWF2IHw9IEZJTEVfX09QRU47Ci0JCWVsc2UgaWYgKFNfSVNDSFIobW9kZSkpCi0JCQlhdiB8PSBDSFJfRklMRV9fT1BFTjsKLQkJZWxzZSBpZiAoU19JU0JMSyhtb2RlKSkKLQkJCWF2IHw9IEJMS19GSUxFX19PUEVOOwotCQllbHNlIGlmIChTX0lTRklGTyhtb2RlKSkKLQkJCWF2IHw9IEZJRk9fRklMRV9fT1BFTjsKLQkJZWxzZSBpZiAoU19JU0RJUihtb2RlKSkKLQkJCWF2IHw9IERJUl9fT1BFTjsKLQkJZWxzZSBpZiAoU19JU1NPQ0sobW9kZSkpCi0JCQlhdiB8PSBTT0NLX0ZJTEVfX09QRU47Ci0JCWVsc2UKLQkJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogV0FSTklORzogaW5zaWRlICVzIHdpdGggIgotCQkJCSJ1bmtub3duIG1vZGU6JW9cbiIsIF9fZnVuY19fLCBtb2RlKTsKLQl9CisJaWYgKHNlbGludXhfcG9saWN5Y2FwX29wZW5wZXJtKQorCQlhdiB8PSBGSUxFX19PUEVOOworCiAJcmV0dXJuIGF2OwogfQogCkBAIC0yMTgzLDggKzIxMzUsNyBAQAogCiBzdGF0aWMgaW50IHNlbGludXhfYnBybV9zZWN1cmVleGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiB7Ci0JY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKLQljb25zdCBzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKnRzZWMgPSBjcmVkLT5zZWN1cml0eTsKKwljb25zdCBzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKnRzZWMgPSBjdXJyZW50X3NlY3VyaXR5KCk7CiAJdTMyIHNpZCwgb3NpZDsKIAlpbnQgYXRzZWN1cmUgPSAwOwogCkBAIC0yNTU5LDggKzI1MTAsNyBAQAogCQkJCSAgICAgICBjaGFyICoqbmFtZSwgdm9pZCAqKnZhbHVlLAogCQkJCSAgICAgICBzaXplX3QgKmxlbikKIHsKLQljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOwotCWNvbnN0IHN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYyA9IGNyZWQtPnNlY3VyaXR5OworCWNvbnN0IHN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYyA9IGN1cnJlbnRfc2VjdXJpdHkoKTsKIAlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICpkc2VjOwogCXN0cnVjdCBzdXBlcmJsb2NrX3NlY3VyaXR5X3N0cnVjdCAqc2JzZWM7CiAJdTMyIHNpZCwgbmV3c2lkLCBjbGVuOwpAQCAtMjY3NiwxNCArMjYyNiwyNiBAQAogc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKKwlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7CisJdTMyIHBlcm1zOworCWJvb2wgZnJvbV9hY2Nlc3M7CiAKLQlpZiAoIW1hc2spIHsKLQkJLyogTm8gcGVybWlzc2lvbiB0byBjaGVjay4gIEV4aXN0ZW5jZSB0ZXN0LiAqLworCWZyb21fYWNjZXNzID0gbWFzayAmIE1BWV9BQ0NFU1M7CisJbWFzayAmPSAoTUFZX1JFQUR8TUFZX1dSSVRFfE1BWV9FWEVDfE1BWV9BUFBFTkQpOworCisJLyogTm8gcGVybWlzc2lvbiB0byBjaGVjay4gIEV4aXN0ZW5jZSB0ZXN0LiAqLworCWlmICghbWFzaykKIAkJcmV0dXJuIDA7Ci0JfQogCi0JcmV0dXJuIGlub2RlX2hhc19wZXJtKGNyZWQsIGlub2RlLAotCQkJICAgICAgZmlsZV9tYXNrX3RvX2F2KGlub2RlLT5pX21vZGUsIG1hc2spLCBOVUxMKTsKKwlDT01NT05fQVVESVRfREFUQV9JTklUKCZhZCwgRlMpOworCWFkLnUuZnMuaW5vZGUgPSBpbm9kZTsKKworCWlmIChmcm9tX2FjY2VzcykKKwkJYWQuc2VsaW51eF9hdWRpdF9kYXRhLmF1ZGl0ZGVueSB8PSBGSUxFX19BVURJVF9BQ0NFU1M7CisKKwlwZXJtcyA9IGZpbGVfbWFza190b19hdihpbm9kZS0+aV9tb2RlLCBtYXNrKTsKKworCXJldHVybiBpbm9kZV9oYXNfcGVybShjcmVkLCBpbm9kZSwgcGVybXMsICZhZCk7CiB9CiAKIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICppYXR0cikKQEAgLTM2NzEsNzEgKzM2MzMsNTQgQEAKIH0KIAogLyogc29ja2V0IHNlY3VyaXR5IG9wZXJhdGlvbnMgKi8KLXN0YXRpYyBpbnQgc29ja2V0X2hhc19wZXJtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHNvY2tldCAqc29jaywKLQkJCSAgIHUzMiBwZXJtcykKKworc3RhdGljIHUzMiBzb2NrZXRfc29ja2NyZWF0ZV9zaWQoY29uc3Qgc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjKQogewotCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWM7CisJcmV0dXJuIHRzZWMtPnNvY2tjcmVhdGVfc2lkID8gOiB0c2VjLT5zaWQ7Cit9CisKK3N0YXRpYyBpbnQgc29ja19oYXNfcGVybShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBzb2NrICpzaywgdTMyIHBlcm1zKQoreworCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjID0gc2stPnNrX3NlY3VyaXR5OwogCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZDsKLQl1MzIgc2lkOwotCWludCBlcnIgPSAwOworCXUzMiB0c2lkID0gdGFza19zaWQodGFzayk7CiAKLQlpc2VjID0gU09DS19JTk9ERShzb2NrKS0+aV9zZWN1cml0eTsKLQotCWlmIChpc2VjLT5zaWQgPT0gU0VDSU5JVFNJRF9LRVJORUwpCi0JCWdvdG8gb3V0OwotCXNpZCA9IHRhc2tfc2lkKHRhc2spOworCWlmIChza3NlYy0+c2lkID09IFNFQ0lOSVRTSURfS0VSTkVMKQorCQlyZXR1cm4gMDsKIAogCUNPTU1PTl9BVURJVF9EQVRBX0lOSVQoJmFkLCBORVQpOwotCWFkLnUubmV0LnNrID0gc29jay0+c2s7Ci0JZXJyID0gYXZjX2hhc19wZXJtKHNpZCwgaXNlYy0+c2lkLCBpc2VjLT5zY2xhc3MsIHBlcm1zLCAmYWQpOworCWFkLnUubmV0LnNrID0gc2s7CiAKLW91dDoKLQlyZXR1cm4gZXJyOworCXJldHVybiBhdmNfaGFzX3Blcm0odHNpZCwgc2tzZWMtPnNpZCwgc2tzZWMtPnNjbGFzcywgcGVybXMsICZhZCk7CiB9CiAKIHN0YXRpYyBpbnQgc2VsaW51eF9zb2NrZXRfY3JlYXRlKGludCBmYW1pbHksIGludCB0eXBlLAogCQkJCSBpbnQgcHJvdG9jb2wsIGludCBrZXJuKQogewotCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7Ci0JY29uc3Qgc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjID0gY3JlZC0+c2VjdXJpdHk7Ci0JdTMyIHNpZCwgbmV3c2lkOworCWNvbnN0IHN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYyA9IGN1cnJlbnRfc2VjdXJpdHkoKTsKKwl1MzIgbmV3c2lkOwogCXUxNiBzZWNjbGFzczsKLQlpbnQgZXJyID0gMDsKIAogCWlmIChrZXJuKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIDA7CiAKLQlzaWQgPSB0c2VjLT5zaWQ7Ci0JbmV3c2lkID0gdHNlYy0+c29ja2NyZWF0ZV9zaWQgPzogc2lkOwotCisJbmV3c2lkID0gc29ja2V0X3NvY2tjcmVhdGVfc2lkKHRzZWMpOwogCXNlY2NsYXNzID0gc29ja2V0X3R5cGVfdG9fc2VjdXJpdHlfY2xhc3MoZmFtaWx5LCB0eXBlLCBwcm90b2NvbCk7Ci0JZXJyID0gYXZjX2hhc19wZXJtKHNpZCwgbmV3c2lkLCBzZWNjbGFzcywgU09DS0VUX19DUkVBVEUsIE5VTEwpOwotCi1vdXQ6Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gYXZjX2hhc19wZXJtKHRzZWMtPnNpZCwgbmV3c2lkLCBzZWNjbGFzcywgU09DS0VUX19DUkVBVEUsIE5VTEwpOwogfQogCiBzdGF0aWMgaW50IHNlbGludXhfc29ja2V0X3Bvc3RfY3JlYXRlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBmYW1pbHksCiAJCQkJICAgICAgaW50IHR5cGUsIGludCBwcm90b2NvbCwgaW50IGtlcm4pCiB7Ci0JY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKLQljb25zdCBzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKnRzZWMgPSBjcmVkLT5zZWN1cml0eTsKLQlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICppc2VjOworCWNvbnN0IHN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYyA9IGN1cnJlbnRfc2VjdXJpdHkoKTsKKwlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICppc2VjID0gU09DS19JTk9ERShzb2NrKS0+aV9zZWN1cml0eTsKIAlzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpza3NlYzsKLQl1MzIgc2lkLCBuZXdzaWQ7CiAJaW50IGVyciA9IDA7CiAKLQlzaWQgPSB0c2VjLT5zaWQ7Ci0JbmV3c2lkID0gdHNlYy0+c29ja2NyZWF0ZV9zaWQ7Ci0KLQlpc2VjID0gU09DS19JTk9ERShzb2NrKS0+aV9zZWN1cml0eTsKLQogCWlmIChrZXJuKQogCQlpc2VjLT5zaWQgPSBTRUNJTklUU0lEX0tFUk5FTDsKLQllbHNlIGlmIChuZXdzaWQpCi0JCWlzZWMtPnNpZCA9IG5ld3NpZDsKIAllbHNlCi0JCWlzZWMtPnNpZCA9IHNpZDsKKwkJaXNlYy0+c2lkID0gc29ja2V0X3NvY2tjcmVhdGVfc2lkKHRzZWMpOwogCiAJaXNlYy0+c2NsYXNzID0gc29ja2V0X3R5cGVfdG9fc2VjdXJpdHlfY2xhc3MoZmFtaWx5LCB0eXBlLCBwcm90b2NvbCk7CiAJaXNlYy0+aW5pdGlhbGl6ZWQgPSAxOwpAQCAtMzc1NiwxMCArMzcwMSwxMSBAQAogCiBzdGF0aWMgaW50IHNlbGludXhfc29ja2V0X2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICphZGRyZXNzLCBpbnQgYWRkcmxlbikKIHsKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAl1MTYgZmFtaWx5OwogCWludCBlcnI7CiAKLQllcnIgPSBzb2NrZXRfaGFzX3Blcm0oY3VycmVudCwgc29jaywgU09DS0VUX19CSU5EKTsKKwllcnIgPSBzb2NrX2hhc19wZXJtKGN1cnJlbnQsIHNrLCBTT0NLRVRfX0JJTkQpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC0zNzY4LDE5ICszNzE0LDE2IEBACiAJICogTXVsdGlwbGUgYWRkcmVzcyBiaW5kaW5nIGZvciBTQ1RQIGlzIG5vdCBzdXBwb3J0ZWQgeWV0OiB3ZSBqdXN0CiAJICogY2hlY2sgdGhlIGZpcnN0IGFkZHJlc3Mgbm93LgogCSAqLwotCWZhbWlseSA9IHNvY2stPnNrLT5za19mYW1pbHk7CisJZmFtaWx5ID0gc2stPnNrX2ZhbWlseTsKIAlpZiAoZmFtaWx5ID09IFBGX0lORVQgfHwgZmFtaWx5ID09IFBGX0lORVQ2KSB7CiAJCWNoYXIgKmFkZHJwOwotCQlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICppc2VjOworCQlzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpza3NlYyA9IHNrLT5za19zZWN1cml0eTsKIAkJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIGFkOwogCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHI0ID0gTlVMTDsKIAkJc3RydWN0IHNvY2thZGRyX2luNiAqYWRkcjYgPSBOVUxMOwogCQl1bnNpZ25lZCBzaG9ydCBzbnVtOwotCQlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAkJdTMyIHNpZCwgbm9kZV9wZXJtOwogCi0JCWlzZWMgPSBTT0NLX0lOT0RFKHNvY2spLT5pX3NlY3VyaXR5OwotCiAJCWlmIChmYW1pbHkgPT0gUEZfSU5FVCkgewogCQkJYWRkcjQgPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcmVzczsKIAkJCXNudW0gPSBudG9ocyhhZGRyNC0+c2luX3BvcnQpOwpAQCAtMzgwNCwxNSArMzc0NywxNSBAQAogCQkJCUNPTU1PTl9BVURJVF9EQVRBX0lOSVQoJmFkLCBORVQpOwogCQkJCWFkLnUubmV0LnNwb3J0ID0gaHRvbnMoc251bSk7CiAJCQkJYWQudS5uZXQuZmFtaWx5ID0gZmFtaWx5OwotCQkJCWVyciA9IGF2Y19oYXNfcGVybShpc2VjLT5zaWQsIHNpZCwKLQkJCQkJCSAgIGlzZWMtPnNjbGFzcywKKwkJCQllcnIgPSBhdmNfaGFzX3Blcm0oc2tzZWMtPnNpZCwgc2lkLAorCQkJCQkJICAgc2tzZWMtPnNjbGFzcywKIAkJCQkJCSAgIFNPQ0tFVF9fTkFNRV9CSU5ELCAmYWQpOwogCQkJCWlmIChlcnIpCiAJCQkJCWdvdG8gb3V0OwogCQkJfQogCQl9CiAKLQkJc3dpdGNoIChpc2VjLT5zY2xhc3MpIHsKKwkJc3dpdGNoIChza3NlYy0+c2NsYXNzKSB7CiAJCWNhc2UgU0VDQ0xBU1NfVENQX1NPQ0tFVDoKIAkJCW5vZGVfcGVybSA9IFRDUF9TT0NLRVRfX05PREVfQklORDsKIAkJCWJyZWFrOwpAQCAtMzg0Myw4ICszNzg2LDggQEAKIAkJZWxzZQogCQkJaXB2Nl9hZGRyX2NvcHkoJmFkLnUubmV0LnY2aW5mby5zYWRkciwgJmFkZHI2LT5zaW42X2FkZHIpOwogCi0JCWVyciA9IGF2Y19oYXNfcGVybShpc2VjLT5zaWQsIHNpZCwKLQkJCQkgICBpc2VjLT5zY2xhc3MsIG5vZGVfcGVybSwgJmFkKTsKKwkJZXJyID0gYXZjX2hhc19wZXJtKHNrc2VjLT5zaWQsIHNpZCwKKwkJCQkgICBza3NlYy0+c2NsYXNzLCBub2RlX3Blcm0sICZhZCk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKIAl9CkBAIC0zODU1LDE5ICszNzk4LDE4IEBACiBzdGF0aWMgaW50IHNlbGludXhfc29ja2V0X2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICphZGRyZXNzLCBpbnQgYWRkcmxlbikKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKLQlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICppc2VjOworCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjID0gc2stPnNrX3NlY3VyaXR5OwogCWludCBlcnI7CiAKLQllcnIgPSBzb2NrZXRfaGFzX3Blcm0oY3VycmVudCwgc29jaywgU09DS0VUX19DT05ORUNUKTsKKwllcnIgPSBzb2NrX2hhc19wZXJtKGN1cnJlbnQsIHNrLCBTT0NLRVRfX0NPTk5FQ1QpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKIAkvKgogCSAqIElmIGEgVENQIG9yIERDQ1Agc29ja2V0LCBjaGVjayBuYW1lX2Nvbm5lY3QgcGVybWlzc2lvbiBmb3IgdGhlIHBvcnQuCiAJICovCi0JaXNlYyA9IFNPQ0tfSU5PREUoc29jayktPmlfc2VjdXJpdHk7Ci0JaWYgKGlzZWMtPnNjbGFzcyA9PSBTRUNDTEFTU19UQ1BfU09DS0VUIHx8Ci0JICAgIGlzZWMtPnNjbGFzcyA9PSBTRUNDTEFTU19EQ0NQX1NPQ0tFVCkgeworCWlmIChza3NlYy0+c2NsYXNzID09IFNFQ0NMQVNTX1RDUF9TT0NLRVQgfHwKKwkgICAgc2tzZWMtPnNjbGFzcyA9PSBTRUNDTEFTU19EQ0NQX1NPQ0tFVCkgewogCQlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7CiAJCXN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkcjQgPSBOVUxMOwogCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyNiA9IE5VTEw7CkBAIC0zODkwLDEzICszODMyLDEzIEBACiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKIAotCQlwZXJtID0gKGlzZWMtPnNjbGFzcyA9PSBTRUNDTEFTU19UQ1BfU09DS0VUKSA/CisJCXBlcm0gPSAoc2tzZWMtPnNjbGFzcyA9PSBTRUNDTEFTU19UQ1BfU09DS0VUKSA/CiAJCSAgICAgICBUQ1BfU09DS0VUX19OQU1FX0NPTk5FQ1QgOiBEQ0NQX1NPQ0tFVF9fTkFNRV9DT05ORUNUOwogCiAJCUNPTU1PTl9BVURJVF9EQVRBX0lOSVQoJmFkLCBORVQpOwogCQlhZC51Lm5ldC5kcG9ydCA9IGh0b25zKHNudW0pOwogCQlhZC51Lm5ldC5mYW1pbHkgPSBzay0+c2tfZmFtaWx5OwotCQllcnIgPSBhdmNfaGFzX3Blcm0oaXNlYy0+c2lkLCBzaWQsIGlzZWMtPnNjbGFzcywgcGVybSwgJmFkKTsKKwkJZXJyID0gYXZjX2hhc19wZXJtKHNrc2VjLT5zaWQsIHNpZCwgc2tzZWMtPnNjbGFzcywgcGVybSwgJmFkKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTM5MDksNyArMzg1MSw3IEBACiAKIHN0YXRpYyBpbnQgc2VsaW51eF9zb2NrZXRfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBiYWNrbG9nKQogewotCXJldHVybiBzb2NrZXRfaGFzX3Blcm0oY3VycmVudCwgc29jaywgU09DS0VUX19MSVNURU4pOworCXJldHVybiBzb2NrX2hhc19wZXJtKGN1cnJlbnQsIHNvY2stPnNrLCBTT0NLRVRfX0xJU1RFTik7CiB9CiAKIHN0YXRpYyBpbnQgc2VsaW51eF9zb2NrZXRfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2spCkBAIC0zOTE4LDcgKzM4NjAsNyBAQAogCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWM7CiAJc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqbmV3aXNlYzsKIAotCWVyciA9IHNvY2tldF9oYXNfcGVybShjdXJyZW50LCBzb2NrLCBTT0NLRVRfX0FDQ0VQVCk7CisJZXJyID0gc29ja19oYXNfcGVybShjdXJyZW50LCBzb2NrLT5zaywgU09DS0VUX19BQ0NFUFQpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTM5MzUsMzAgKzM4NzcsMzAgQEAKIHN0YXRpYyBpbnQgc2VsaW51eF9zb2NrZXRfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csCiAJCQkJICBpbnQgc2l6ZSkKIHsKLQlyZXR1cm4gc29ja2V0X2hhc19wZXJtKGN1cnJlbnQsIHNvY2ssIFNPQ0tFVF9fV1JJVEUpOworCXJldHVybiBzb2NrX2hhc19wZXJtKGN1cnJlbnQsIHNvY2stPnNrLCBTT0NLRVRfX1dSSVRFKTsKIH0KIAogc3RhdGljIGludCBzZWxpbnV4X3NvY2tldF9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKIAkJCQkgIGludCBzaXplLCBpbnQgZmxhZ3MpCiB7Ci0JcmV0dXJuIHNvY2tldF9oYXNfcGVybShjdXJyZW50LCBzb2NrLCBTT0NLRVRfX1JFQUQpOworCXJldHVybiBzb2NrX2hhc19wZXJtKGN1cnJlbnQsIHNvY2stPnNrLCBTT0NLRVRfX1JFQUQpOwogfQogCiBzdGF0aWMgaW50IHNlbGludXhfc29ja2V0X2dldHNvY2tuYW1lKHN0cnVjdCBzb2NrZXQgKnNvY2spCiB7Ci0JcmV0dXJuIHNvY2tldF9oYXNfcGVybShjdXJyZW50LCBzb2NrLCBTT0NLRVRfX0dFVEFUVFIpOworCXJldHVybiBzb2NrX2hhc19wZXJtKGN1cnJlbnQsIHNvY2stPnNrLCBTT0NLRVRfX0dFVEFUVFIpOwogfQogCiBzdGF0aWMgaW50IHNlbGludXhfc29ja2V0X2dldHBlZXJuYW1lKHN0cnVjdCBzb2NrZXQgKnNvY2spCiB7Ci0JcmV0dXJuIHNvY2tldF9oYXNfcGVybShjdXJyZW50LCBzb2NrLCBTT0NLRVRfX0dFVEFUVFIpOworCXJldHVybiBzb2NrX2hhc19wZXJtKGN1cnJlbnQsIHNvY2stPnNrLCBTT0NLRVRfX0dFVEFUVFIpOwogfQogCiBzdGF0aWMgaW50IHNlbGludXhfc29ja2V0X3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSkKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gc29ja2V0X2hhc19wZXJtKGN1cnJlbnQsIHNvY2ssIFNPQ0tFVF9fU0VUT1BUKTsKKwllcnIgPSBzb2NrX2hhc19wZXJtKGN1cnJlbnQsIHNvY2stPnNrLCBTT0NLRVRfX1NFVE9QVCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMzk2OCw2OCArMzkxMCw1OCBAQAogc3RhdGljIGludCBzZWxpbnV4X3NvY2tldF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwKIAkJCQkgICAgIGludCBvcHRuYW1lKQogewotCXJldHVybiBzb2NrZXRfaGFzX3Blcm0oY3VycmVudCwgc29jaywgU09DS0VUX19HRVRPUFQpOworCXJldHVybiBzb2NrX2hhc19wZXJtKGN1cnJlbnQsIHNvY2stPnNrLCBTT0NLRVRfX0dFVE9QVCk7CiB9CiAKIHN0YXRpYyBpbnQgc2VsaW51eF9zb2NrZXRfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdykKIHsKLQlyZXR1cm4gc29ja2V0X2hhc19wZXJtKGN1cnJlbnQsIHNvY2ssIFNPQ0tFVF9fU0hVVERPV04pOworCXJldHVybiBzb2NrX2hhc19wZXJtKGN1cnJlbnQsIHNvY2stPnNrLCBTT0NLRVRfX1NIVVRET1dOKTsKIH0KIAogc3RhdGljIGludCBzZWxpbnV4X3NvY2tldF91bml4X3N0cmVhbV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCQkJCSAgICAgIHN0cnVjdCBzb2NrZXQgKm90aGVyLAogCQkJCQkgICAgICBzdHJ1Y3Qgc29jayAqbmV3c2spCiB7Ci0Jc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWM7Ci0Jc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqaXNlYzsKLQlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICpvdGhlcl9pc2VjOworCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjX3NvY2sgPSBzb2NrLT5zay0+c2tfc2VjdXJpdHk7CisJc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWNfb3RoZXIgPSBvdGhlci0+c2stPnNrX3NlY3VyaXR5OworCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjX25ldyA9IG5ld3NrLT5za19zZWN1cml0eTsKIAlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7CiAJaW50IGVycjsKIAotCWlzZWMgPSBTT0NLX0lOT0RFKHNvY2spLT5pX3NlY3VyaXR5OwotCW90aGVyX2lzZWMgPSBTT0NLX0lOT0RFKG90aGVyKS0+aV9zZWN1cml0eTsKLQogCUNPTU1PTl9BVURJVF9EQVRBX0lOSVQoJmFkLCBORVQpOwogCWFkLnUubmV0LnNrID0gb3RoZXItPnNrOwogCi0JZXJyID0gYXZjX2hhc19wZXJtKGlzZWMtPnNpZCwgb3RoZXJfaXNlYy0+c2lkLAotCQkJICAgaXNlYy0+c2NsYXNzLAorCWVyciA9IGF2Y19oYXNfcGVybShza3NlY19zb2NrLT5zaWQsIHNrc2VjX290aGVyLT5zaWQsCisJCQkgICBza3NlY19vdGhlci0+c2NsYXNzLAogCQkJICAgVU5JWF9TVFJFQU1fU09DS0VUX19DT05ORUNUVE8sICZhZCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCS8qIGNvbm5lY3Rpbmcgc29ja2V0ICovCi0Jc2tzZWMgPSBzb2NrLT5zay0+c2tfc2VjdXJpdHk7Ci0Jc2tzZWMtPnBlZXJfc2lkID0gb3RoZXJfaXNlYy0+c2lkOwotCiAJLyogc2VydmVyIGNoaWxkIHNvY2tldCAqLwotCXNrc2VjID0gbmV3c2stPnNrX3NlY3VyaXR5OwotCXNrc2VjLT5wZWVyX3NpZCA9IGlzZWMtPnNpZDsKLQllcnIgPSBzZWN1cml0eV9zaWRfbWxzX2NvcHkob3RoZXJfaXNlYy0+c2lkLCBza3NlYy0+cGVlcl9zaWQsICZza3NlYy0+c2lkKTsKKwlza3NlY19uZXctPnBlZXJfc2lkID0gc2tzZWNfc29jay0+c2lkOworCWVyciA9IHNlY3VyaXR5X3NpZF9tbHNfY29weShza3NlY19vdGhlci0+c2lkLCBza3NlY19zb2NrLT5zaWQsCisJCQkJICAgICZza3NlY19uZXctPnNpZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAotCXJldHVybiBlcnI7CisJLyogY29ubmVjdGluZyBzb2NrZXQgKi8KKwlza3NlY19zb2NrLT5wZWVyX3NpZCA9IHNrc2VjX25ldy0+c2lkOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc2VsaW51eF9zb2NrZXRfdW5peF9tYXlfc2VuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCQkJCQlzdHJ1Y3Qgc29ja2V0ICpvdGhlcikKIHsKLQlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICppc2VjOwotCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKm90aGVyX2lzZWM7CisJc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc3NlYyA9IHNvY2stPnNrLT5za19zZWN1cml0eTsKKwlzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpvc2VjID0gb3RoZXItPnNrLT5za19zZWN1cml0eTsKIAlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7Ci0JaW50IGVycjsKLQotCWlzZWMgPSBTT0NLX0lOT0RFKHNvY2spLT5pX3NlY3VyaXR5OwotCW90aGVyX2lzZWMgPSBTT0NLX0lOT0RFKG90aGVyKS0+aV9zZWN1cml0eTsKIAogCUNPTU1PTl9BVURJVF9EQVRBX0lOSVQoJmFkLCBORVQpOwogCWFkLnUubmV0LnNrID0gb3RoZXItPnNrOwogCi0JZXJyID0gYXZjX2hhc19wZXJtKGlzZWMtPnNpZCwgb3RoZXJfaXNlYy0+c2lkLAotCQkJICAgaXNlYy0+c2NsYXNzLCBTT0NLRVRfX1NFTkRUTywgJmFkKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGF2Y19oYXNfcGVybShzc2VjLT5zaWQsIG9zZWMtPnNpZCwgb3NlYy0+c2NsYXNzLCBTT0NLRVRfX1NFTkRUTywKKwkJCSAgICAmYWQpOwogfQogCiBzdGF0aWMgaW50IHNlbGludXhfaW5ldF9zeXNfcmN2X3NrYihpbnQgaWZpbmRleCwgY2hhciAqYWRkcnAsIHUxNiBmYW1pbHksCkBAIC00MTY4LDI2ICs0MTAwLDE4IEBACiAJaW50IGVyciA9IDA7CiAJY2hhciAqc2NvbnRleHQ7CiAJdTMyIHNjb250ZXh0X2xlbjsKLQlzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpza3NlYzsKLQlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICppc2VjOworCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjID0gc29jay0+c2stPnNrX3NlY3VyaXR5OwogCXUzMiBwZWVyX3NpZCA9IFNFQ1NJRF9OVUxMOwogCi0JaXNlYyA9IFNPQ0tfSU5PREUoc29jayktPmlfc2VjdXJpdHk7Ci0KLQlpZiAoaXNlYy0+c2NsYXNzID09IFNFQ0NMQVNTX1VOSVhfU1RSRUFNX1NPQ0tFVCB8fAotCSAgICBpc2VjLT5zY2xhc3MgPT0gU0VDQ0xBU1NfVENQX1NPQ0tFVCkgewotCQlza3NlYyA9IHNvY2stPnNrLT5za19zZWN1cml0eTsKKwlpZiAoc2tzZWMtPnNjbGFzcyA9PSBTRUNDTEFTU19VTklYX1NUUkVBTV9TT0NLRVQgfHwKKwkgICAgc2tzZWMtPnNjbGFzcyA9PSBTRUNDTEFTU19UQ1BfU09DS0VUKQogCQlwZWVyX3NpZCA9IHNrc2VjLT5wZWVyX3NpZDsKLQl9Ci0JaWYgKHBlZXJfc2lkID09IFNFQ1NJRF9OVUxMKSB7Ci0JCWVyciA9IC1FTk9QUk9UT09QVDsKLQkJZ290byBvdXQ7Ci0JfQorCWlmIChwZWVyX3NpZCA9PSBTRUNTSURfTlVMTCkKKwkJcmV0dXJuIC1FTk9QUk9UT09QVDsKIAogCWVyciA9IHNlY3VyaXR5X3NpZF90b19jb250ZXh0KHBlZXJfc2lkLCAmc2NvbnRleHQsICZzY29udGV4dF9sZW4pOwotCiAJaWYgKGVycikKLQkJZ290byBvdXQ7CisJCXJldHVybiBlcnI7CiAKIAlpZiAoc2NvbnRleHRfbGVuID4gbGVuKSB7CiAJCWVyciA9IC1FUkFOR0U7CkBAIC00MjAwLDkgKzQxMjQsNyBAQAogb3V0X2xlbjoKIAlpZiAocHV0X3VzZXIoc2NvbnRleHRfbGVuLCBvcHRsZW4pKQogCQllcnIgPSAtRUZBVUxUOwotCiAJa2ZyZWUoc2NvbnRleHQpOwotb3V0OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTQyMzQsMTIgKzQxNTYsMjcgQEAKIAogc3RhdGljIGludCBzZWxpbnV4X3NrX2FsbG9jX3NlY3VyaXR5KHN0cnVjdCBzb2NrICpzaywgaW50IGZhbWlseSwgZ2ZwX3QgcHJpb3JpdHkpCiB7Ci0JcmV0dXJuIHNrX2FsbG9jX3NlY3VyaXR5KHNrLCBmYW1pbHksIHByaW9yaXR5KTsKKwlzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpza3NlYzsKKworCXNrc2VjID0ga3phbGxvYyhzaXplb2YoKnNrc2VjKSwgcHJpb3JpdHkpOworCWlmICghc2tzZWMpCisJCXJldHVybiAtRU5PTUVNOworCisJc2tzZWMtPnBlZXJfc2lkID0gU0VDSU5JVFNJRF9VTkxBQkVMRUQ7CisJc2tzZWMtPnNpZCA9IFNFQ0lOSVRTSURfVU5MQUJFTEVEOworCXNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X3Jlc2V0KHNrc2VjKTsKKwlzay0+c2tfc2VjdXJpdHkgPSBza3NlYzsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzZWxpbnV4X3NrX2ZyZWVfc2VjdXJpdHkoc3RydWN0IHNvY2sgKnNrKQogewotCXNrX2ZyZWVfc2VjdXJpdHkoc2spOworCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjID0gc2stPnNrX3NlY3VyaXR5OworCisJc2stPnNrX3NlY3VyaXR5ID0gTlVMTDsKKwlzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9mcmVlKHNrc2VjKTsKKwlrZnJlZShza3NlYyk7CiB9CiAKIHN0YXRpYyB2b2lkIHNlbGludXhfc2tfY2xvbmVfc2VjdXJpdHkoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spCkBAIC00Mzk5LDggKzQzMzYsNyBAQAogCWludCBlcnIgPSAwOwogCXUzMiBwZXJtOwogCXN0cnVjdCBubG1zZ2hkciAqbmxoOwotCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSBzay0+c2tfc29ja2V0OwotCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWMgPSBTT0NLX0lOT0RFKHNvY2spLT5pX3NlY3VyaXR5OworCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjID0gc2stPnNrX3NlY3VyaXR5OwogCiAJaWYgKHNrYi0+bGVuIDwgTkxNU0dfU1BBQ0UoMCkpIHsKIAkJZXJyID0gLUVJTlZBTDsKQEAgLTQ0MDgsMTMgKzQzNDQsMTMgQEAKIAl9CiAJbmxoID0gbmxtc2dfaGRyKHNrYik7CiAKLQllcnIgPSBzZWxpbnV4X25sbXNnX2xvb2t1cChpc2VjLT5zY2xhc3MsIG5saC0+bmxtc2dfdHlwZSwgJnBlcm0pOworCWVyciA9IHNlbGludXhfbmxtc2dfbG9va3VwKHNrc2VjLT5zY2xhc3MsIG5saC0+bmxtc2dfdHlwZSwgJnBlcm0pOwogCWlmIChlcnIpIHsKIAkJaWYgKGVyciA9PSAtRUlOVkFMKSB7CiAJCQlhdWRpdF9sb2coY3VycmVudC0+YXVkaXRfY29udGV4dCwgR0ZQX0tFUk5FTCwgQVVESVRfU0VMSU5VWF9FUlIsCiAJCQkJICAiU0VMaW51eDogIHVucmVjb2duaXplZCBuZXRsaW5rIG1lc3NhZ2UiCiAJCQkJICAiIHR5cGU9JWh1IGZvciBzY2xhc3M9JWh1XG4iLAotCQkJCSAgbmxoLT5ubG1zZ190eXBlLCBpc2VjLT5zY2xhc3MpOworCQkJCSAgbmxoLT5ubG1zZ190eXBlLCBza3NlYy0+c2NsYXNzKTsKIAkJCWlmICghc2VsaW51eF9lbmZvcmNpbmcgfHwgc2VjdXJpdHlfZ2V0X2FsbG93X3Vua25vd24oKSkKIAkJCQllcnIgPSAwOwogCQl9CkBAIC00NDI1LDcgKzQzNjEsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQllcnIgPSBzb2NrZXRfaGFzX3Blcm0oY3VycmVudCwgc29jaywgcGVybSk7CisJZXJyID0gc29ja19oYXNfcGVybShjdXJyZW50LCBzaywgcGVybSk7CiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9jbGFzc21hcC5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2NsYXNzbWFwLmgKaW5kZXggOGIzMmU5NS4uYjRjOWViNCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2NsYXNzbWFwLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2NsYXNzbWFwLmgKQEAgLTIsNyArMiw4IEBACiAgICAgImdldGF0dHIiLCAic2V0YXR0ciIsICJsb2NrIiwgInJlbGFiZWxmcm9tIiwgInJlbGFiZWx0byIsICJhcHBlbmQiCiAKICNkZWZpbmUgQ09NTU9OX0ZJTEVfUEVSTVMgQ09NTU9OX0ZJTEVfU09DS19QRVJNUywgInVubGluayIsICJsaW5rIiwgXAotICAgICJyZW5hbWUiLCAiZXhlY3V0ZSIsICJzd2Fwb24iLCAicXVvdGFvbiIsICJtb3VudG9uIgorICAgICJyZW5hbWUiLCAiZXhlY3V0ZSIsICJzd2Fwb24iLCAicXVvdGFvbiIsICJtb3VudG9uIiwgImF1ZGl0X2FjY2VzcyIsIFwKKyAgICAib3BlbiIsICJleGVjbW9kIgogCiAjZGVmaW5lIENPTU1PTl9TT0NLX1BFUk1TIENPTU1PTl9GSUxFX1NPQ0tfUEVSTVMsICJiaW5kIiwgImNvbm5lY3QiLCBcCiAgICAgImxpc3RlbiIsICJhY2NlcHQiLCAiZ2V0b3B0IiwgInNldG9wdCIsICJzaHV0ZG93biIsICJyZWN2ZnJvbSIsICBcCkBAIC00MywyMiArNDQsMjEgQEAKIAkgICAgInF1b3RhZ2V0IiwgTlVMTCB9IH0sCiAJeyAiZmlsZSIsCiAJICB7IENPTU1PTl9GSUxFX1BFUk1TLAotCSAgICAiZXhlY3V0ZV9ub190cmFucyIsICJlbnRyeXBvaW50IiwgImV4ZWNtb2QiLCAib3BlbiIsIE5VTEwgfSB9LAorCSAgICAiZXhlY3V0ZV9ub190cmFucyIsICJlbnRyeXBvaW50IiwgTlVMTCB9IH0sCiAJeyAiZGlyIiwKIAkgIHsgQ09NTU9OX0ZJTEVfUEVSTVMsICJhZGRfbmFtZSIsICJyZW1vdmVfbmFtZSIsCi0JICAgICJyZXBhcmVudCIsICJzZWFyY2giLCAicm1kaXIiLCAib3BlbiIsIE5VTEwgfSB9LAorCSAgICAicmVwYXJlbnQiLCAic2VhcmNoIiwgInJtZGlyIiwgTlVMTCB9IH0sCiAJeyAiZmQiLCB7ICJ1c2UiLCBOVUxMIH0gfSwKIAl7ICJsbmtfZmlsZSIsCiAJICB7IENPTU1PTl9GSUxFX1BFUk1TLCBOVUxMIH0gfSwKIAl7ICJjaHJfZmlsZSIsCi0JICB7IENPTU1PTl9GSUxFX1BFUk1TLAotCSAgICAiZXhlY3V0ZV9ub190cmFucyIsICJlbnRyeXBvaW50IiwgImV4ZWNtb2QiLCAib3BlbiIsIE5VTEwgfSB9LAorCSAgeyBDT01NT05fRklMRV9QRVJNUywgTlVMTCB9IH0sCiAJeyAiYmxrX2ZpbGUiLAotCSAgeyBDT01NT05fRklMRV9QRVJNUywgIm9wZW4iLCBOVUxMIH0gfSwKKwkgIHsgQ09NTU9OX0ZJTEVfUEVSTVMsIE5VTEwgfSB9LAogCXsgInNvY2tfZmlsZSIsCi0JICB7IENPTU1PTl9GSUxFX1BFUk1TLCAib3BlbiIsIE5VTEwgfSB9LAorCSAgeyBDT01NT05fRklMRV9QRVJNUywgTlVMTCB9IH0sCiAJeyAiZmlmb19maWxlIiwKLQkgIHsgQ09NTU9OX0ZJTEVfUEVSTVMsICJvcGVuIiwgTlVMTCB9IH0sCisJICB7IENPTU1PTl9GSUxFX1BFUk1TLCBOVUxMIH0gfSwKIAl7ICJzb2NrZXQiLAogCSAgeyBDT01NT05fU09DS19QRVJNUywgTlVMTCB9IH0sCiAJeyAidGNwX3NvY2tldCIsCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L25ldG5vZGUuYyBiL3NlY3VyaXR5L3NlbGludXgvbmV0bm9kZS5jCmluZGV4IGRjOTI3OTIuLjY1ZWJmZTkgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvbmV0bm9kZS5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvbmV0bm9kZS5jCkBAIC0xODMsOCArMTgzLDYgQEAKIAkJQlVHKCk7CiAJfQogCi0JSU5JVF9SQ1VfSEVBRCgmbm9kZS0+cmN1KTsKLQogCS8qIHdlIG5lZWQgdG8gaW1wb3NlIGEgbGltaXQgb24gdGhlIGdyb3d0aCBvZiB0aGUgaGFzaCB0YWJsZSBzbyBjaGVjawogCSAqIHRoaXMgYnVja2V0IHRvIG1ha2Ugc3VyZSBpdCBpcyB3aXRoaW4gdGhlIHNwZWNpZmllZCBib3VuZHMgKi8KIAlsaXN0X2FkZF9yY3UoJm5vZGUtPmxpc3QsICZzZWxfbmV0bm9kZV9oYXNoW2lkeF0ubGlzdCk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYwppbmRleCAwMjkzODQzLi43OWExYmI2IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKQEAgLTE4NCw2ICsxODQsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2VsX2VuZm9yY2Vfb3BzID0gewogCS5yZWFkCQk9IHNlbF9yZWFkX2VuZm9yY2UsCiAJLndyaXRlCQk9IHNlbF93cml0ZV9lbmZvcmNlLAorCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIH07CiAKIHN0YXRpYyBzc2l6ZV90IHNlbF9yZWFkX2hhbmRsZV91bmtub3duKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmLApAQCAtMjAxLDYgKzIwMiw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNlbF9oYW5kbGVfdW5rbm93bl9vcHMgPSB7CiAJLnJlYWQJCT0gc2VsX3JlYWRfaGFuZGxlX3Vua25vd24sCisJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogfTsKIAogI2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RJU0FCTEUKQEAgLTI1MSw2ICsyNTMsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZWxfZGlzYWJsZV9vcHMgPSB7CiAJLndyaXRlCQk9IHNlbF93cml0ZV9kaXNhYmxlLAorCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIH07CiAKIHN0YXRpYyBzc2l6ZV90IHNlbF9yZWFkX3BvbGljeXZlcnMoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsCkBAIC0yNjUsNiArMjY4LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2VsX3BvbGljeXZlcnNfb3BzID0gewogCS5yZWFkCQk9IHNlbF9yZWFkX3BvbGljeXZlcnMsCisJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogfTsKIAogLyogZGVjbGFyYXRpb24gZm9yIHNlbF93cml0ZV9sb2FkICovCkBAIC0yODksNiArMjkzLDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2VsX21sc19vcHMgPSB7CiAJLnJlYWQJCT0gc2VsX3JlYWRfbWxzLAorCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIH07CiAKIHN0YXRpYyBzc2l6ZV90IHNlbF93cml0ZV9sb2FkKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLApAQCAtMzU2LDYgKzM2MSw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNlbF9sb2FkX29wcyA9IHsKIAkud3JpdGUJCT0gc2VsX3dyaXRlX2xvYWQsCisJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogfTsKIAogc3RhdGljIHNzaXplX3Qgc2VsX3dyaXRlX2NvbnRleHQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCkBAIC00MzcsNiArNDQzLDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNlbF9jaGVja3JlcXByb3Rfb3BzID0gewogCS5yZWFkCQk9IHNlbF9yZWFkX2NoZWNrcmVxcHJvdCwKIAkud3JpdGUJCT0gc2VsX3dyaXRlX2NoZWNrcmVxcHJvdCwKKwkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiB9OwogCiAvKgpAQCAtNDgyLDYgKzQ4OSw3IEBACiAJLndyaXRlCQk9IHNlbGludXhfdHJhbnNhY3Rpb25fd3JpdGUsCiAJLnJlYWQJCT0gc2ltcGxlX3RyYW5zYWN0aW9uX3JlYWQsCiAJLnJlbGVhc2UJPSBzaW1wbGVfdHJhbnNhY3Rpb25fcmVsZWFzZSwKKwkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiB9OwogCiAvKgpAQCAtODgzLDYgKzg5MSw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZWxfYm9vbF9vcHMgPSB7CiAJLnJlYWQJCT0gc2VsX3JlYWRfYm9vbCwKIAkud3JpdGUJCT0gc2VsX3dyaXRlX2Jvb2wsCisJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogfTsKIAogc3RhdGljIHNzaXplX3Qgc2VsX2NvbW1pdF9ib29sc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZXAsCkBAIC05MzUsNiArOTQ0LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2VsX2NvbW1pdF9ib29sc19vcHMgPSB7CiAJLndyaXRlCQk9IHNlbF9jb21taXRfYm9vbHNfd3JpdGUsCisJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogfTsKIAogc3RhdGljIHZvaWQgc2VsX3JlbW92ZV9lbnRyaWVzKHN0cnVjdCBkZW50cnkgKmRlKQpAQCAtMTEyNywxMCArMTEzNywxMiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2VsX2F2Y19jYWNoZV90aHJlc2hvbGRfb3BzID0gewogCS5yZWFkCQk9IHNlbF9yZWFkX2F2Y19jYWNoZV90aHJlc2hvbGQsCiAJLndyaXRlCQk9IHNlbF93cml0ZV9hdmNfY2FjaGVfdGhyZXNob2xkLAorCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNlbF9hdmNfaGFzaF9zdGF0c19vcHMgPSB7CiAJLnJlYWQJCT0gc2VsX3JlYWRfYXZjX2hhc2hfc3RhdHMsCisJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogfTsKIAogI2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0FWQ19TVEFUUwpAQCAtMTI1NSw2ICsxMjY3LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2VsX2luaXRjb25fb3BzID0gewogCS5yZWFkCQk9IHNlbF9yZWFkX2luaXRjb24sCisJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogfTsKIAogc3RhdGljIGludCBzZWxfbWFrZV9pbml0Y29uX2ZpbGVzKHN0cnVjdCBkZW50cnkgKmRpcikKQEAgLTEzMzAsNiArMTM0Myw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNlbF9jbGFzc19vcHMgPSB7CiAJLnJlYWQJCT0gc2VsX3JlYWRfY2xhc3MsCisJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogfTsKIAogc3RhdGljIHNzaXplX3Qgc2VsX3JlYWRfcGVybShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKQEAgLTEzNTQsNiArMTM2OCw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNlbF9wZXJtX29wcyA9IHsKIAkucmVhZAkJPSBzZWxfcmVhZF9wZXJtLAorCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIH07CiAKIHN0YXRpYyBzc2l6ZV90IHNlbF9yZWFkX3BvbGljeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKQEAgLTEzNzIsNiArMTM4Nyw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNlbF9wb2xpY3ljYXBfb3BzID0gewogCS5yZWFkCQk9IHNlbF9yZWFkX3BvbGljeWNhcCwKKwkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiB9OwogCiBzdGF0aWMgaW50IHNlbF9tYWtlX3Blcm1fZmlsZXMoY2hhciAqb2JqY2xhc3MsIGludCBjbGFzc3ZhbHVlLApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9hdnRhYi5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9hdnRhYi5jCmluZGV4IDEyMTViOGUuLjkyOTQ4MGMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3MvYXZ0YWIuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL2F2dGFiLmMKQEAgLTM0MiwyMCArMzQyLDIwIEBACiAKIAlpZiAodmVycyA8IFBPTElDWURCX1ZFUlNJT05fQVZUQUIpIHsKIAkJcmMgPSBuZXh0X2VudHJ5KGJ1ZjMyLCBmcCwgc2l6ZW9mKHUzMikpOwotCQlpZiAocmMgPCAwKSB7CisJCWlmIChyYykgewogCQkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBhdnRhYjogdHJ1bmNhdGVkIGVudHJ5XG4iKTsKLQkJCXJldHVybiAtMTsKKwkJCXJldHVybiByYzsKIAkJfQogCQlpdGVtczIgPSBsZTMyX3RvX2NwdShidWYzMlswXSk7CiAJCWlmIChpdGVtczIgPiBBUlJBWV9TSVpFKGJ1ZjMyKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBhdnRhYjogZW50cnkgb3ZlcmZsb3dcbiIpOwotCQkJcmV0dXJuIC0xOworCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJfQogCQlyYyA9IG5leHRfZW50cnkoYnVmMzIsIGZwLCBzaXplb2YodTMyKSppdGVtczIpOwotCQlpZiAocmMgPCAwKSB7CisJCWlmIChyYykgewogCQkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBhdnRhYjogdHJ1bmNhdGVkIGVudHJ5XG4iKTsKLQkJCXJldHVybiAtMTsKKwkJCXJldHVybiByYzsKIAkJfQogCQlpdGVtcyA9IDA7CiAKQEAgLTM2MywxOSArMzYzLDE5IEBACiAJCWtleS5zb3VyY2VfdHlwZSA9ICh1MTYpdmFsOwogCQlpZiAoa2V5LnNvdXJjZV90eXBlICE9IHZhbCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBhdnRhYjogdHJ1bmNhdGVkIHNvdXJjZSB0eXBlXG4iKTsKLQkJCXJldHVybiAtMTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCXZhbCA9IGxlMzJfdG9fY3B1KGJ1ZjMyW2l0ZW1zKytdKTsKIAkJa2V5LnRhcmdldF90eXBlID0gKHUxNil2YWw7CiAJCWlmIChrZXkudGFyZ2V0X3R5cGUgIT0gdmFsKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IGF2dGFiOiB0cnVuY2F0ZWQgdGFyZ2V0IHR5cGVcbiIpOwotCQkJcmV0dXJuIC0xOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJdmFsID0gbGUzMl90b19jcHUoYnVmMzJbaXRlbXMrK10pOwogCQlrZXkudGFyZ2V0X2NsYXNzID0gKHUxNil2YWw7CiAJCWlmIChrZXkudGFyZ2V0X2NsYXNzICE9IHZhbCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBhdnRhYjogdHJ1bmNhdGVkIHRhcmdldCBjbGFzc1xuIik7Ci0JCQlyZXR1cm4gLTE7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCiAJCXZhbCA9IGxlMzJfdG9fY3B1KGJ1ZjMyW2l0ZW1zKytdKTsKQEAgLTM4MywxMiArMzgzLDEyIEBACiAKIAkJaWYgKCEodmFsICYgKEFWVEFCX0FWIHwgQVZUQUJfVFlQRSkpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IGF2dGFiOiBudWxsIGVudHJ5XG4iKTsKLQkJCXJldHVybiAtMTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWlmICgodmFsICYgQVZUQUJfQVYpICYmCiAJCSAgICAodmFsICYgQVZUQUJfVFlQRSkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogYXZ0YWI6IGVudHJ5IGhhcyBib3RoIGFjY2VzcyB2ZWN0b3JzIGFuZCB0eXBlc1xuIik7Ci0JCQlyZXR1cm4gLTE7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNwZWNfb3JkZXIpOyBpKyspIHsKQEAgLTQwMywxNSArNDAzLDE1IEBACiAKIAkJaWYgKGl0ZW1zICE9IGl0ZW1zMikgewogCQkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBhdnRhYjogZW50cnkgb25seSBoYWQgJWQgaXRlbXMsIGV4cGVjdGVkICVkXG4iLCBpdGVtczIsIGl0ZW1zKTsKLQkJCXJldHVybiAtMTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCXJldHVybiAwOwogCX0KIAogCXJjID0gbmV4dF9lbnRyeShidWYxNiwgZnAsIHNpemVvZih1MTYpKjQpOwotCWlmIChyYyA8IDApIHsKKwlpZiAocmMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBhdnRhYjogdHJ1bmNhdGVkIGVudHJ5XG4iKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gcmM7CiAJfQogCiAJaXRlbXMgPSAwOwpAQCAtNDI0LDcgKzQyNCw3IEBACiAJICAgICFwb2xpY3lkYl90eXBlX2lzdmFsaWQocG9sLCBrZXkudGFyZ2V0X3R5cGUpIHx8CiAJICAgICFwb2xpY3lkYl9jbGFzc19pc3ZhbGlkKHBvbCwga2V5LnRhcmdldF9jbGFzcykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBhdnRhYjogaW52YWxpZCB0eXBlIG9yIGNsYXNzXG4iKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlzZXQgPSAwOwpAQCAtNDM0LDE5ICs0MzQsMTkgQEAKIAl9CiAJaWYgKCFzZXQgfHwgc2V0ID4gMSkgewogCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6ICBhdnRhYjogIG1vcmUgdGhhbiBvbmUgc3BlY2lmaWVyXG4iKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlyYyA9IG5leHRfZW50cnkoYnVmMzIsIGZwLCBzaXplb2YodTMyKSk7Ci0JaWYgKHJjIDwgMCkgeworCWlmIChyYykgewogCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IGF2dGFiOiB0cnVuY2F0ZWQgZW50cnlcbiIpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiByYzsKIAl9CiAJZGF0dW0uZGF0YSA9IGxlMzJfdG9fY3B1KCpidWYzMik7CiAJaWYgKChrZXkuc3BlY2lmaWVkICYgQVZUQUJfVFlQRSkgJiYKIAkgICAgIXBvbGljeWRiX3R5cGVfaXN2YWxpZChwb2wsIGRhdHVtLmRhdGEpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogYXZ0YWI6IGludmFsaWQgdHlwZVxuIik7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiBpbnNlcnRmKGEsICZrZXksICZkYXR1bSwgcCk7CiB9CkBAIC00ODcsOCArNDg3LDcgQEAKIAkJCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IGF2dGFiOiBvdXQgb2YgbWVtb3J5XG4iKTsKIAkJCWVsc2UgaWYgKHJjID09IC1FRVhJU1QpCiAJCQkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBhdnRhYjogZHVwbGljYXRlIGVudHJ5XG4iKTsKLQkJCWVsc2UKLQkJCQlyYyA9IC1FSU5WQUw7CisKIAkJCWdvdG8gYmFkOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9jb25kaXRpb25hbC5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9jb25kaXRpb25hbC5jCmluZGV4IDRhNGUzNWMuLmM5MWUxNTAgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3MvY29uZGl0aW9uYWwuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL2NvbmRpdGlvbmFsLmMKQEAgLTExNywxMCArMTE3LDE0IEBACiAKIGludCBjb25kX3BvbGljeWRiX2luaXQoc3RydWN0IHBvbGljeWRiICpwKQogeworCWludCByYzsKKwogCXAtPmJvb2xfdmFsX3RvX3N0cnVjdCA9IE5VTEw7CiAJcC0+Y29uZF9saXN0ID0gTlVMTDsKLQlpZiAoYXZ0YWJfaW5pdCgmcC0+dGVfY29uZF9hdnRhYikpCi0JCXJldHVybiAtMTsKKworCXJjID0gYXZ0YWJfaW5pdCgmcC0+dGVfY29uZF9hdnRhYik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIxOSwzNCArMjIzLDM3IEBACiAKIAlib29sZGF0dW0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY29uZF9ib29sX2RhdHVtKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFib29sZGF0dW0pCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlyYyA9IG5leHRfZW50cnkoYnVmLCBmcCwgc2l6ZW9mIGJ1Zik7Ci0JaWYgKHJjIDwgMCkKKwlpZiAocmMpCiAJCWdvdG8gZXJyOwogCiAJYm9vbGRhdHVtLT52YWx1ZSA9IGxlMzJfdG9fY3B1KGJ1ZlswXSk7CiAJYm9vbGRhdHVtLT5zdGF0ZSA9IGxlMzJfdG9fY3B1KGJ1ZlsxXSk7CiAKKwlyYyA9IC1FSU5WQUw7CiAJaWYgKCFib29sX2lzdmFsaWQoYm9vbGRhdHVtKSkKIAkJZ290byBlcnI7CiAKIAlsZW4gPSBsZTMyX3RvX2NwdShidWZbMl0pOwogCisJcmMgPSAtRU5PTUVNOwogCWtleSA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFrZXkpCiAJCWdvdG8gZXJyOwogCXJjID0gbmV4dF9lbnRyeShrZXksIGZwLCBsZW4pOwotCWlmIChyYyA8IDApCisJaWYgKHJjKQogCQlnb3RvIGVycjsKIAlrZXlbbGVuXSA9ICdcMCc7Ci0JaWYgKGhhc2h0YWJfaW5zZXJ0KGgsIGtleSwgYm9vbGRhdHVtKSkKKwlyYyA9IGhhc2h0YWJfaW5zZXJ0KGgsIGtleSwgYm9vbGRhdHVtKTsKKwlpZiAocmMpCiAJCWdvdG8gZXJyOwogCiAJcmV0dXJuIDA7CiBlcnI6CiAJY29uZF9kZXN0cm95X2Jvb2woa2V5LCBib29sZGF0dW0sIE5VTEwpOwotCXJldHVybiAtMTsKKwlyZXR1cm4gcmM7CiB9CiAKIHN0cnVjdCBjb25kX2luc2VydGZfZGF0YSB7CkBAIC0yNjMsNyArMjcwLDcgQEAKIAlzdHJ1Y3QgY29uZF9hdl9saXN0ICpvdGhlciA9IGRhdGEtPm90aGVyLCAqbGlzdCwgKmN1cjsKIAlzdHJ1Y3QgYXZ0YWJfbm9kZSAqbm9kZV9wdHI7CiAJdTggZm91bmQ7Ci0KKwlpbnQgcmMgPSAtRUlOVkFMOwogCiAJLyoKIAkgKiBGb3IgdHlwZSBydWxlcyB3ZSBoYXZlIHRvIG1ha2UgY2VydGFpbiB0aGVyZSBhcmVuJ3QgYW55CkBAIC0zMTMsMTIgKzMyMCwxNSBAQAogCW5vZGVfcHRyID0gYXZ0YWJfaW5zZXJ0X25vbnVuaXF1ZSgmcC0+dGVfY29uZF9hdnRhYiwgaywgZCk7CiAJaWYgKCFub2RlX3B0cikgewogCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IGNvdWxkIG5vdCBpbnNlcnQgcnVsZS5cbiIpOworCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gZXJyOwogCX0KIAogCWxpc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY29uZF9hdl9saXN0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFsaXN0KQorCWlmICghbGlzdCkgeworCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gZXJyOworCX0KIAogCWxpc3QtPm5vZGUgPSBub2RlX3B0cjsKIAlpZiAoIWRhdGEtPmhlYWQpCkBAIC0zMzEsNyArMzQxLDcgQEAKIGVycjoKIAljb25kX2F2X2xpc3RfZGVzdHJveShkYXRhLT5oZWFkKTsKIAlkYXRhLT5oZWFkID0gTlVMTDsKLQlyZXR1cm4gLTE7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IGNvbmRfcmVhZF9hdl9saXN0KHN0cnVjdCBwb2xpY3lkYiAqcCwgdm9pZCAqZnAsIHN0cnVjdCBjb25kX2F2X2xpc3QgKipyZXRfbGlzdCwgc3RydWN0IGNvbmRfYXZfbGlzdCAqb3RoZXIpCkBAIC0zNDUsOCArMzU1LDggQEAKIAogCWxlbiA9IDA7CiAJcmMgPSBuZXh0X2VudHJ5KGJ1ZiwgZnAsIHNpemVvZih1MzIpKTsKLQlpZiAocmMgPCAwKQotCQlyZXR1cm4gLTE7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CiAKIAlsZW4gPSBsZTMyX3RvX2NwdShidWZbMF0pOwogCWlmIChsZW4gPT0gMCkKQEAgLTM2MSw3ICszNzEsNiBAQAogCQkJCSAgICAgJmRhdGEpOwogCQlpZiAocmMpCiAJCQlyZXR1cm4gcmM7Ci0KIAl9CiAKIAkqcmV0X2xpc3QgPSBkYXRhLmhlYWQ7CkBAIC0zOTAsMjQgKzM5OSwyNSBAQAogCXN0cnVjdCBjb25kX2V4cHIgKmV4cHIgPSBOVUxMLCAqbGFzdCA9IE5VTEw7CiAKIAlyYyA9IG5leHRfZW50cnkoYnVmLCBmcCwgc2l6ZW9mKHUzMikpOwotCWlmIChyYyA8IDApCi0JCXJldHVybiAtMTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAogCW5vZGUtPmN1cl9zdGF0ZSA9IGxlMzJfdG9fY3B1KGJ1ZlswXSk7CiAKIAlsZW4gPSAwOwogCXJjID0gbmV4dF9lbnRyeShidWYsIGZwLCBzaXplb2YodTMyKSk7Ci0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIC0xOworCWlmIChyYykKKwkJcmV0dXJuIHJjOwogCiAJLyogZXhwciAqLwogCWxlbiA9IGxlMzJfdG9fY3B1KGJ1ZlswXSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKIAkJcmMgPSBuZXh0X2VudHJ5KGJ1ZiwgZnAsIHNpemVvZih1MzIpICogMik7Ci0JCWlmIChyYyA8IDApCisJCWlmIChyYykKIAkJCWdvdG8gZXJyOwogCisJCXJjID0gLUVOT01FTTsKIAkJZXhwciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjb25kX2V4cHIpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFleHByKQogCQkJZ290byBlcnI7CkBAIC00MTYsNiArNDI2LDcgQEAKIAkJZXhwci0+Ym9vbCA9IGxlMzJfdG9fY3B1KGJ1ZlsxXSk7CiAKIAkJaWYgKCFleHByX2lzdmFsaWQocCwgZXhwcikpIHsKKwkJCXJjID0gLUVJTlZBTDsKIAkJCWtmcmVlKGV4cHIpOwogCQkJZ290byBlcnI7CiAJCX0KQEAgLTQyNywxNCArNDM4LDE2IEBACiAJCWxhc3QgPSBleHByOwogCX0KIAotCWlmIChjb25kX3JlYWRfYXZfbGlzdChwLCBmcCwgJm5vZGUtPnRydWVfbGlzdCwgTlVMTCkgIT0gMCkKKwlyYyA9IGNvbmRfcmVhZF9hdl9saXN0KHAsIGZwLCAmbm9kZS0+dHJ1ZV9saXN0LCBOVUxMKTsKKwlpZiAocmMpCiAJCWdvdG8gZXJyOwotCWlmIChjb25kX3JlYWRfYXZfbGlzdChwLCBmcCwgJm5vZGUtPmZhbHNlX2xpc3QsIG5vZGUtPnRydWVfbGlzdCkgIT0gMCkKKwlyYyA9IGNvbmRfcmVhZF9hdl9saXN0KHAsIGZwLCAmbm9kZS0+ZmFsc2VfbGlzdCwgbm9kZS0+dHJ1ZV9saXN0KTsKKwlpZiAocmMpCiAJCWdvdG8gZXJyOwogCXJldHVybiAwOwogZXJyOgogCWNvbmRfbm9kZV9kZXN0cm95KG5vZGUpOwotCXJldHVybiAtMTsKKwlyZXR1cm4gcmM7CiB9CiAKIGludCBjb25kX3JlYWRfbGlzdChzdHJ1Y3QgcG9saWN5ZGIgKnAsIHZvaWQgKmZwKQpAQCAtNDQ1LDggKzQ1OCw4IEBACiAJaW50IHJjOwogCiAJcmMgPSBuZXh0X2VudHJ5KGJ1ZiwgZnAsIHNpemVvZiBidWYpOwotCWlmIChyYyA8IDApCi0JCXJldHVybiAtMTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAogCWxlbiA9IGxlMzJfdG9fY3B1KGJ1ZlswXSk7CiAKQEAgLTQ1NSwxMSArNDY4LDEzIEBACiAJCWdvdG8gZXJyOwogCiAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCXJjID0gLUVOT01FTTsKIAkJbm9kZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjb25kX25vZGUpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFub2RlKQogCQkJZ290byBlcnI7CiAKLQkJaWYgKGNvbmRfcmVhZF9ub2RlKHAsIG5vZGUsIGZwKSAhPSAwKQorCQlyYyA9IGNvbmRfcmVhZF9ub2RlKHAsIG5vZGUsIGZwKTsKKwkJaWYgKHJjKQogCQkJZ290byBlcnI7CiAKIAkJaWYgKGkgPT0gMCkKQEAgLTQ3Miw3ICs0ODcsNyBAQAogZXJyOgogCWNvbmRfbGlzdF9kZXN0cm95KHAtPmNvbmRfbGlzdCk7CiAJcC0+Y29uZF9saXN0ID0gTlVMTDsKLQlyZXR1cm4gLTE7CisJcmV0dXJuIHJjOwogfQogCiAvKiBEZXRlcm1pbmUgd2hldGhlciBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIGFyZSBncmFudGVkIGJ5IHRoZSBjb25kaXRpb25hbApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jCmluZGV4IGM1NzgwMmEuLjNhMjk3MDQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CisjaW5jbHVkZSA8bGludXgvZmxleF9hcnJheS5oPgogI2luY2x1ZGUgInNlY3VyaXR5LmgiCiAKICNpbmNsdWRlICJwb2xpY3lkYi5oIgpAQCAtNjU1LDYgKzY1Niw5IEBACiAKIHN0YXRpYyB2b2lkIG9jb250ZXh0X2Rlc3Ryb3koc3RydWN0IG9jb250ZXh0ICpjLCBpbnQgaSkKIHsKKwlpZiAoIWMpCisJCXJldHVybjsKKwogCWNvbnRleHRfZGVzdHJveSgmYy0+Y29udGV4dFswXSk7CiAJY29udGV4dF9kZXN0cm95KCZjLT5jb250ZXh0WzFdKTsKIAlpZiAoaSA9PSBPQ09OX0lTSUQgfHwgaSA9PSBPQ09OX0ZTIHx8CkBAIC03MzYsMTEgKzc0MCwxNyBAQAogCWhhc2h0YWJfbWFwKHAtPnJhbmdlX3RyLCByYW5nZV90cl9kZXN0cm95LCBOVUxMKTsKIAloYXNodGFiX2Rlc3Ryb3kocC0+cmFuZ2VfdHIpOwogCi0JaWYgKHAtPnR5cGVfYXR0cl9tYXApIHsKLQkJZm9yIChpID0gMDsgaSA8IHAtPnBfdHlwZXMubnByaW07IGkrKykKLQkJCWViaXRtYXBfZGVzdHJveSgmcC0+dHlwZV9hdHRyX21hcFtpXSk7CisJaWYgKHAtPnR5cGVfYXR0cl9tYXBfYXJyYXkpIHsKKwkJZm9yIChpID0gMDsgaSA8IHAtPnBfdHlwZXMubnByaW07IGkrKykgeworCQkJc3RydWN0IGViaXRtYXAgKmU7CisKKwkJCWUgPSBmbGV4X2FycmF5X2dldChwLT50eXBlX2F0dHJfbWFwX2FycmF5LCBpKTsKKwkJCWlmICghZSkKKwkJCQljb250aW51ZTsKKwkJCWViaXRtYXBfZGVzdHJveShlKTsKKwkJfQorCQlmbGV4X2FycmF5X2ZyZWUocC0+dHlwZV9hdHRyX21hcF9hcnJheSk7CiAJfQotCWtmcmVlKHAtPnR5cGVfYXR0cl9tYXApOwogCWViaXRtYXBfZGVzdHJveSgmcC0+cG9saWN5Y2Fwcyk7CiAJZWJpdG1hcF9kZXN0cm95KCZwLT5wZXJtaXNzaXZlX21hcCk7CiAKQEAgLTE3MDEsNiArMTcxMSwzMzMgQEAKIAlyZXR1cm4gMVUgPDwgKHBlcmRhdHVtLT52YWx1ZS0xKTsKIH0KIAorc3RhdGljIGludCByYW5nZV9yZWFkKHN0cnVjdCBwb2xpY3lkYiAqcCwgdm9pZCAqZnApCit7CisJc3RydWN0IHJhbmdlX3RyYW5zICpydCA9IE5VTEw7CisJc3RydWN0IG1sc19yYW5nZSAqciA9IE5VTEw7CisJaW50IGksIHJjOworCV9fbGUzMiBidWZbMl07CisJdTMyIG5lbDsKKworCWlmIChwLT5wb2xpY3l2ZXJzIDwgUE9MSUNZREJfVkVSU0lPTl9NTFMpCisJCXJldHVybiAwOworCisJcmMgPSBuZXh0X2VudHJ5KGJ1ZiwgZnAsIHNpemVvZih1MzIpKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0OworCisJbmVsID0gbGUzMl90b19jcHUoYnVmWzBdKTsKKwlmb3IgKGkgPSAwOyBpIDwgbmVsOyBpKyspIHsKKwkJcmMgPSAtRU5PTUVNOworCQlydCA9IGt6YWxsb2Moc2l6ZW9mKCpydCksIEdGUF9LRVJORUwpOworCQlpZiAoIXJ0KQorCQkJZ290byBvdXQ7CisKKwkJcmMgPSBuZXh0X2VudHJ5KGJ1ZiwgZnAsIChzaXplb2YodTMyKSAqIDIpKTsKKwkJaWYgKHJjKQorCQkJZ290byBvdXQ7CisKKwkJcnQtPnNvdXJjZV90eXBlID0gbGUzMl90b19jcHUoYnVmWzBdKTsKKwkJcnQtPnRhcmdldF90eXBlID0gbGUzMl90b19jcHUoYnVmWzFdKTsKKwkJaWYgKHAtPnBvbGljeXZlcnMgPj0gUE9MSUNZREJfVkVSU0lPTl9SQU5HRVRSQU5TKSB7CisJCQlyYyA9IG5leHRfZW50cnkoYnVmLCBmcCwgc2l6ZW9mKHUzMikpOworCQkJaWYgKHJjKQorCQkJCWdvdG8gb3V0OworCQkJcnQtPnRhcmdldF9jbGFzcyA9IGxlMzJfdG9fY3B1KGJ1ZlswXSk7CisJCX0gZWxzZQorCQkJcnQtPnRhcmdldF9jbGFzcyA9IHAtPnByb2Nlc3NfY2xhc3M7CisKKwkJcmMgPSAtRUlOVkFMOworCQlpZiAoIXBvbGljeWRiX3R5cGVfaXN2YWxpZChwLCBydC0+c291cmNlX3R5cGUpIHx8CisJCSAgICAhcG9saWN5ZGJfdHlwZV9pc3ZhbGlkKHAsIHJ0LT50YXJnZXRfdHlwZSkgfHwKKwkJICAgICFwb2xpY3lkYl9jbGFzc19pc3ZhbGlkKHAsIHJ0LT50YXJnZXRfY2xhc3MpKQorCQkJZ290byBvdXQ7CisKKwkJcmMgPSAtRU5PTUVNOworCQlyID0ga3phbGxvYyhzaXplb2YoKnIpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFyKQorCQkJZ290byBvdXQ7CisKKwkJcmMgPSBtbHNfcmVhZF9yYW5nZV9oZWxwZXIociwgZnApOworCQlpZiAocmMpCisJCQlnb3RvIG91dDsKKworCQlyYyA9IC1FSU5WQUw7CisJCWlmICghbWxzX3JhbmdlX2lzdmFsaWQocCwgcikpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNFTGludXg6ICByYW5nZXRyYW5zOiAgaW52YWxpZCByYW5nZVxuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXJjID0gaGFzaHRhYl9pbnNlcnQocC0+cmFuZ2VfdHIsIHJ0LCByKTsKKwkJaWYgKHJjKQorCQkJZ290byBvdXQ7CisKKwkJcnQgPSBOVUxMOworCQlyID0gTlVMTDsKKwl9CisJcmFuZ2V0cl9oYXNoX2V2YWwocC0+cmFuZ2VfdHIpOworCXJjID0gMDsKK291dDoKKwlrZnJlZShydCk7CisJa2ZyZWUocik7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGdlbmZzX3JlYWQoc3RydWN0IHBvbGljeWRiICpwLCB2b2lkICpmcCkKK3sKKwlpbnQgaSwgaiwgcmM7CisJdTMyIG5lbCwgbmVsMiwgbGVuLCBsZW4yOworCV9fbGUzMiBidWZbMV07CisJc3RydWN0IG9jb250ZXh0ICpsLCAqYzsKKwlzdHJ1Y3Qgb2NvbnRleHQgKm5ld2MgPSBOVUxMOworCXN0cnVjdCBnZW5mcyAqZ2VuZnNfcCwgKmdlbmZzOworCXN0cnVjdCBnZW5mcyAqbmV3Z2VuZnMgPSBOVUxMOworCisJcmMgPSBuZXh0X2VudHJ5KGJ1ZiwgZnAsIHNpemVvZih1MzIpKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0OworCW5lbCA9IGxlMzJfdG9fY3B1KGJ1ZlswXSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmVsOyBpKyspIHsKKwkJcmMgPSBuZXh0X2VudHJ5KGJ1ZiwgZnAsIHNpemVvZih1MzIpKTsKKwkJaWYgKHJjKQorCQkJZ290byBvdXQ7CisJCWxlbiA9IGxlMzJfdG9fY3B1KGJ1ZlswXSk7CisKKwkJcmMgPSAtRU5PTUVNOworCQluZXdnZW5mcyA9IGt6YWxsb2Moc2l6ZW9mKCpuZXdnZW5mcyksIEdGUF9LRVJORUwpOworCQlpZiAoIW5ld2dlbmZzKQorCQkJZ290byBvdXQ7CisKKwkJcmMgPSAtRU5PTUVNOworCQluZXdnZW5mcy0+ZnN0eXBlID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFuZXdnZW5mcy0+ZnN0eXBlKQorCQkJZ290byBvdXQ7CisKKwkJcmMgPSBuZXh0X2VudHJ5KG5ld2dlbmZzLT5mc3R5cGUsIGZwLCBsZW4pOworCQlpZiAocmMpCisJCQlnb3RvIG91dDsKKworCQluZXdnZW5mcy0+ZnN0eXBlW2xlbl0gPSAwOworCisJCWZvciAoZ2VuZnNfcCA9IE5VTEwsIGdlbmZzID0gcC0+Z2VuZnM7IGdlbmZzOworCQkgICAgIGdlbmZzX3AgPSBnZW5mcywgZ2VuZnMgPSBnZW5mcy0+bmV4dCkgeworCQkJcmMgPSAtRUlOVkFMOworCQkJaWYgKHN0cmNtcChuZXdnZW5mcy0+ZnN0eXBlLCBnZW5mcy0+ZnN0eXBlKSA9PSAwKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAgZHVwIGdlbmZzIGZzdHlwZSAlc1xuIiwKKwkJCQkgICAgICAgbmV3Z2VuZnMtPmZzdHlwZSk7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlpZiAoc3RyY21wKG5ld2dlbmZzLT5mc3R5cGUsIGdlbmZzLT5mc3R5cGUpIDwgMCkKKwkJCQlicmVhazsKKwkJfQorCQluZXdnZW5mcy0+bmV4dCA9IGdlbmZzOworCQlpZiAoZ2VuZnNfcCkKKwkJCWdlbmZzX3AtPm5leHQgPSBuZXdnZW5mczsKKwkJZWxzZQorCQkJcC0+Z2VuZnMgPSBuZXdnZW5mczsKKwkJZ2VuZnMgPSBuZXdnZW5mczsKKwkJbmV3Z2VuZnMgPSBOVUxMOworCisJCXJjID0gbmV4dF9lbnRyeShidWYsIGZwLCBzaXplb2YodTMyKSk7CisJCWlmIChyYykKKwkJCWdvdG8gb3V0OworCisJCW5lbDIgPSBsZTMyX3RvX2NwdShidWZbMF0pOworCQlmb3IgKGogPSAwOyBqIDwgbmVsMjsgaisrKSB7CisJCQlyYyA9IG5leHRfZW50cnkoYnVmLCBmcCwgc2l6ZW9mKHUzMikpOworCQkJaWYgKHJjKQorCQkJCWdvdG8gb3V0OworCQkJbGVuID0gbGUzMl90b19jcHUoYnVmWzBdKTsKKworCQkJcmMgPSAtRU5PTUVNOworCQkJbmV3YyA9IGt6YWxsb2Moc2l6ZW9mKCpuZXdjKSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIW5ld2MpCisJCQkJZ290byBvdXQ7CisKKwkJCXJjID0gLUVOT01FTTsKKwkJCW5ld2MtPnUubmFtZSA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIW5ld2MtPnUubmFtZSkKKwkJCQlnb3RvIG91dDsKKworCQkJcmMgPSBuZXh0X2VudHJ5KG5ld2MtPnUubmFtZSwgZnAsIGxlbik7CisJCQlpZiAocmMpCisJCQkJZ290byBvdXQ7CisJCQluZXdjLT51Lm5hbWVbbGVuXSA9IDA7CisKKwkJCXJjID0gbmV4dF9lbnRyeShidWYsIGZwLCBzaXplb2YodTMyKSk7CisJCQlpZiAocmMpCisJCQkJZ290byBvdXQ7CisKKwkJCW5ld2MtPnYuc2NsYXNzID0gbGUzMl90b19jcHUoYnVmWzBdKTsKKwkJCXJjID0gY29udGV4dF9yZWFkX2FuZF92YWxpZGF0ZSgmbmV3Yy0+Y29udGV4dFswXSwgcCwgZnApOworCQkJaWYgKHJjKQorCQkJCWdvdG8gb3V0OworCisJCQlmb3IgKGwgPSBOVUxMLCBjID0gZ2VuZnMtPmhlYWQ7IGM7CisJCQkgICAgIGwgPSBjLCBjID0gYy0+bmV4dCkgeworCQkJCXJjID0gLUVJTlZBTDsKKwkJCQlpZiAoIXN0cmNtcChuZXdjLT51Lm5hbWUsIGMtPnUubmFtZSkgJiYKKwkJCQkgICAgKCFjLT52LnNjbGFzcyB8fCAhbmV3Yy0+di5zY2xhc3MgfHwKKwkJCQkgICAgIG5ld2MtPnYuc2NsYXNzID09IGMtPnYuc2NsYXNzKSkgeworCQkJCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6ICBkdXAgZ2VuZnMgZW50cnkgKCVzLCVzKVxuIiwKKwkJCQkJICAgICAgIGdlbmZzLT5mc3R5cGUsIGMtPnUubmFtZSk7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCQlsZW4gPSBzdHJsZW4obmV3Yy0+dS5uYW1lKTsKKwkJCQlsZW4yID0gc3RybGVuKGMtPnUubmFtZSk7CisJCQkJaWYgKGxlbiA+IGxlbjIpCisJCQkJCWJyZWFrOworCQkJfQorCisJCQluZXdjLT5uZXh0ID0gYzsKKwkJCWlmIChsKQorCQkJCWwtPm5leHQgPSBuZXdjOworCQkJZWxzZQorCQkJCWdlbmZzLT5oZWFkID0gbmV3YzsKKwkJCW5ld2MgPSBOVUxMOworCQl9CisJfQorCXJjID0gMDsKK291dDoKKwlpZiAobmV3Z2VuZnMpCisJCWtmcmVlKG5ld2dlbmZzLT5mc3R5cGUpOworCWtmcmVlKG5ld2dlbmZzKTsKKwlvY29udGV4dF9kZXN0cm95KG5ld2MsIE9DT05fRlNVU0UpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IG9jb250ZXh0X3JlYWQoc3RydWN0IHBvbGljeWRiICpwLCBzdHJ1Y3QgcG9saWN5ZGJfY29tcGF0X2luZm8gKmluZm8sCisJCQkgdm9pZCAqZnApCit7CisJaW50IGksIGosIHJjOworCXUzMiBuZWwsIGxlbjsKKwlfX2xlMzIgYnVmWzNdOworCXN0cnVjdCBvY29udGV4dCAqbCwgKmM7CisJdTMyIG5vZGVidWZbOF07CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+b2Nvbl9udW07IGkrKykgeworCQlyYyA9IG5leHRfZW50cnkoYnVmLCBmcCwgc2l6ZW9mKHUzMikpOworCQlpZiAocmMpCisJCQlnb3RvIG91dDsKKwkJbmVsID0gbGUzMl90b19jcHUoYnVmWzBdKTsKKworCQlsID0gTlVMTDsKKwkJZm9yIChqID0gMDsgaiA8IG5lbDsgaisrKSB7CisJCQlyYyA9IC1FTk9NRU07CisJCQljID0ga3phbGxvYyhzaXplb2YoKmMpLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghYykKKwkJCQlnb3RvIG91dDsKKwkJCWlmIChsKQorCQkJCWwtPm5leHQgPSBjOworCQkJZWxzZQorCQkJCXAtPm9jb250ZXh0c1tpXSA9IGM7CisJCQlsID0gYzsKKworCQkJc3dpdGNoIChpKSB7CisJCQljYXNlIE9DT05fSVNJRDoKKwkJCQlyYyA9IG5leHRfZW50cnkoYnVmLCBmcCwgc2l6ZW9mKHUzMikpOworCQkJCWlmIChyYykKKwkJCQkJZ290byBvdXQ7CisKKwkJCQljLT5zaWRbMF0gPSBsZTMyX3RvX2NwdShidWZbMF0pOworCQkJCXJjID0gY29udGV4dF9yZWFkX2FuZF92YWxpZGF0ZSgmYy0+Y29udGV4dFswXSwgcCwgZnApOworCQkJCWlmIChyYykKKwkJCQkJZ290byBvdXQ7CisJCQkJYnJlYWs7CisJCQljYXNlIE9DT05fRlM6CisJCQljYXNlIE9DT05fTkVUSUY6CisJCQkJcmMgPSBuZXh0X2VudHJ5KGJ1ZiwgZnAsIHNpemVvZih1MzIpKTsKKwkJCQlpZiAocmMpCisJCQkJCWdvdG8gb3V0OworCQkJCWxlbiA9IGxlMzJfdG9fY3B1KGJ1ZlswXSk7CisKKwkJCQlyYyA9IC1FTk9NRU07CisJCQkJYy0+dS5uYW1lID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKKwkJCQlpZiAoIWMtPnUubmFtZSkKKwkJCQkJZ290byBvdXQ7CisKKwkJCQlyYyA9IG5leHRfZW50cnkoYy0+dS5uYW1lLCBmcCwgbGVuKTsKKwkJCQlpZiAocmMpCisJCQkJCWdvdG8gb3V0OworCisJCQkJYy0+dS5uYW1lW2xlbl0gPSAwOworCQkJCXJjID0gY29udGV4dF9yZWFkX2FuZF92YWxpZGF0ZSgmYy0+Y29udGV4dFswXSwgcCwgZnApOworCQkJCWlmIChyYykKKwkJCQkJZ290byBvdXQ7CisJCQkJcmMgPSBjb250ZXh0X3JlYWRfYW5kX3ZhbGlkYXRlKCZjLT5jb250ZXh0WzFdLCBwLCBmcCk7CisJCQkJaWYgKHJjKQorCQkJCQlnb3RvIG91dDsKKwkJCQlicmVhazsKKwkJCWNhc2UgT0NPTl9QT1JUOgorCQkJCXJjID0gbmV4dF9lbnRyeShidWYsIGZwLCBzaXplb2YodTMyKSozKTsKKwkJCQlpZiAocmMpCisJCQkJCWdvdG8gb3V0OworCQkJCWMtPnUucG9ydC5wcm90b2NvbCA9IGxlMzJfdG9fY3B1KGJ1ZlswXSk7CisJCQkJYy0+dS5wb3J0Lmxvd19wb3J0ID0gbGUzMl90b19jcHUoYnVmWzFdKTsKKwkJCQljLT51LnBvcnQuaGlnaF9wb3J0ID0gbGUzMl90b19jcHUoYnVmWzJdKTsKKwkJCQlyYyA9IGNvbnRleHRfcmVhZF9hbmRfdmFsaWRhdGUoJmMtPmNvbnRleHRbMF0sIHAsIGZwKTsKKwkJCQlpZiAocmMpCisJCQkJCWdvdG8gb3V0OworCQkJCWJyZWFrOworCQkJY2FzZSBPQ09OX05PREU6CisJCQkJcmMgPSBuZXh0X2VudHJ5KG5vZGVidWYsIGZwLCBzaXplb2YodTMyKSAqIDIpOworCQkJCWlmIChyYykKKwkJCQkJZ290byBvdXQ7CisJCQkJYy0+dS5ub2RlLmFkZHIgPSBub2RlYnVmWzBdOyAvKiBuZXR3b3JrIG9yZGVyICovCisJCQkJYy0+dS5ub2RlLm1hc2sgPSBub2RlYnVmWzFdOyAvKiBuZXR3b3JrIG9yZGVyICovCisJCQkJcmMgPSBjb250ZXh0X3JlYWRfYW5kX3ZhbGlkYXRlKCZjLT5jb250ZXh0WzBdLCBwLCBmcCk7CisJCQkJaWYgKHJjKQorCQkJCQlnb3RvIG91dDsKKwkJCQlicmVhazsKKwkJCWNhc2UgT0NPTl9GU1VTRToKKwkJCQlyYyA9IG5leHRfZW50cnkoYnVmLCBmcCwgc2l6ZW9mKHUzMikqMik7CisJCQkJaWYgKHJjKQorCQkJCQlnb3RvIG91dDsKKworCQkJCXJjID0gLUVJTlZBTDsKKwkJCQljLT52LmJlaGF2aW9yID0gbGUzMl90b19jcHUoYnVmWzBdKTsKKwkJCQlpZiAoYy0+di5iZWhhdmlvciA+IFNFQ1VSSVRZX0ZTX1VTRV9OT05FKQorCQkJCQlnb3RvIG91dDsKKworCQkJCXJjID0gLUVOT01FTTsKKwkJCQlsZW4gPSBsZTMyX3RvX2NwdShidWZbMV0pOworCQkJCWMtPnUubmFtZSA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJCQkJaWYgKCFjLT51Lm5hbWUpCisJCQkJCWdvdG8gb3V0OworCisJCQkJcmMgPSBuZXh0X2VudHJ5KGMtPnUubmFtZSwgZnAsIGxlbik7CisJCQkJaWYgKHJjKQorCQkJCQlnb3RvIG91dDsKKwkJCQljLT51Lm5hbWVbbGVuXSA9IDA7CisJCQkJcmMgPSBjb250ZXh0X3JlYWRfYW5kX3ZhbGlkYXRlKCZjLT5jb250ZXh0WzBdLCBwLCBmcCk7CisJCQkJaWYgKHJjKQorCQkJCQlnb3RvIG91dDsKKwkJCQlicmVhazsKKwkJCWNhc2UgT0NPTl9OT0RFNjogeworCQkJCWludCBrOworCisJCQkJcmMgPSBuZXh0X2VudHJ5KG5vZGVidWYsIGZwLCBzaXplb2YodTMyKSAqIDgpOworCQkJCWlmIChyYykKKwkJCQkJZ290byBvdXQ7CisJCQkJZm9yIChrID0gMDsgayA8IDQ7IGsrKykKKwkJCQkJYy0+dS5ub2RlNi5hZGRyW2tdID0gbm9kZWJ1ZltrXTsKKwkJCQlmb3IgKGsgPSAwOyBrIDwgNDsgaysrKQorCQkJCQljLT51Lm5vZGU2Lm1hc2tba10gPSBub2RlYnVmW2srNF07CisJCQkJcmMgPSBjb250ZXh0X3JlYWRfYW5kX3ZhbGlkYXRlKCZjLT5jb250ZXh0WzBdLCBwLCBmcCk7CisJCQkJaWYgKHJjKQorCQkJCQlnb3RvIG91dDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCX0KKwkJfQorCX0KKwlyYyA9IDA7CitvdXQ6CisJcmV0dXJuIHJjOworfQorCiAvKgogICogUmVhZCB0aGUgY29uZmlndXJhdGlvbiBkYXRhIGZyb20gYSBwb2xpY3kgZGF0YWJhc2UgYmluYXJ5CiAgKiByZXByZXNlbnRhdGlvbiBmaWxlIGludG8gYSBwb2xpY3kgZGF0YWJhc2Ugc3RydWN0dXJlLgpAQCAtMTcwOSwxNiArMjA0NiwxMiBAQAogewogCXN0cnVjdCByb2xlX2FsbG93ICpyYSwgKmxyYTsKIAlzdHJ1Y3Qgcm9sZV90cmFucyAqdHIsICpsdHI7Ci0Jc3RydWN0IG9jb250ZXh0ICpsLCAqYywgKm5ld2M7Ci0Jc3RydWN0IGdlbmZzICpnZW5mc19wLCAqZ2VuZnMsICpuZXdnZW5mczsKIAlpbnQgaSwgaiwgcmM7CiAJX19sZTMyIGJ1Zls0XTsKLQl1MzIgbm9kZWJ1Zls4XTsKLQl1MzIgbGVuLCBsZW4yLCBucHJpbSwgbmVsLCBuZWwyOworCXUzMiBsZW4sIG5wcmltLCBuZWw7CisKIAljaGFyICpwb2xpY3lkYl9zdHI7CiAJc3RydWN0IHBvbGljeWRiX2NvbXBhdF9pbmZvICppbmZvOwotCXN0cnVjdCByYW5nZV90cmFucyAqcnQ7Ci0Jc3RydWN0IG1sc19yYW5nZSAqcjsKIAogCXJjID0gcG9saWN5ZGJfaW5pdChwKTsKIAlpZiAocmMpCkBAIC0xOTE5LDI5NCArMjI1Miw0NSBAQAogCWlmICghcC0+cHJvY2Vzc190cmFuc19wZXJtcykKIAkJZ290byBiYWQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+b2Nvbl9udW07IGkrKykgewotCQlyYyA9IG5leHRfZW50cnkoYnVmLCBmcCwgc2l6ZW9mKHUzMikpOwotCQlpZiAocmMgPCAwKQotCQkJZ290byBiYWQ7Ci0JCW5lbCA9IGxlMzJfdG9fY3B1KGJ1ZlswXSk7Ci0JCWwgPSBOVUxMOwotCQlmb3IgKGogPSAwOyBqIDwgbmVsOyBqKyspIHsKLQkJCWMgPSBremFsbG9jKHNpemVvZigqYyksIEdGUF9LRVJORUwpOwotCQkJaWYgKCFjKSB7Ci0JCQkJcmMgPSAtRU5PTUVNOwotCQkJCWdvdG8gYmFkOwotCQkJfQotCQkJaWYgKGwpCi0JCQkJbC0+bmV4dCA9IGM7Ci0JCQllbHNlCi0JCQkJcC0+b2NvbnRleHRzW2ldID0gYzsKLQkJCWwgPSBjOwotCQkJcmMgPSAtRUlOVkFMOwotCQkJc3dpdGNoIChpKSB7Ci0JCQljYXNlIE9DT05fSVNJRDoKLQkJCQlyYyA9IG5leHRfZW50cnkoYnVmLCBmcCwgc2l6ZW9mKHUzMikpOwotCQkJCWlmIChyYyA8IDApCi0JCQkJCWdvdG8gYmFkOwotCQkJCWMtPnNpZFswXSA9IGxlMzJfdG9fY3B1KGJ1ZlswXSk7Ci0JCQkJcmMgPSBjb250ZXh0X3JlYWRfYW5kX3ZhbGlkYXRlKCZjLT5jb250ZXh0WzBdLCBwLCBmcCk7Ci0JCQkJaWYgKHJjKQotCQkJCQlnb3RvIGJhZDsKLQkJCQlicmVhazsKLQkJCWNhc2UgT0NPTl9GUzoKLQkJCWNhc2UgT0NPTl9ORVRJRjoKLQkJCQlyYyA9IG5leHRfZW50cnkoYnVmLCBmcCwgc2l6ZW9mKHUzMikpOwotCQkJCWlmIChyYyA8IDApCi0JCQkJCWdvdG8gYmFkOwotCQkJCWxlbiA9IGxlMzJfdG9fY3B1KGJ1ZlswXSk7Ci0JCQkJYy0+dS5uYW1lID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKLQkJCQlpZiAoIWMtPnUubmFtZSkgewotCQkJCQlyYyA9IC1FTk9NRU07Ci0JCQkJCWdvdG8gYmFkOwotCQkJCX0KLQkJCQlyYyA9IG5leHRfZW50cnkoYy0+dS5uYW1lLCBmcCwgbGVuKTsKLQkJCQlpZiAocmMgPCAwKQotCQkJCQlnb3RvIGJhZDsKLQkJCQljLT51Lm5hbWVbbGVuXSA9IDA7Ci0JCQkJcmMgPSBjb250ZXh0X3JlYWRfYW5kX3ZhbGlkYXRlKCZjLT5jb250ZXh0WzBdLCBwLCBmcCk7Ci0JCQkJaWYgKHJjKQotCQkJCQlnb3RvIGJhZDsKLQkJCQlyYyA9IGNvbnRleHRfcmVhZF9hbmRfdmFsaWRhdGUoJmMtPmNvbnRleHRbMV0sIHAsIGZwKTsKLQkJCQlpZiAocmMpCi0JCQkJCWdvdG8gYmFkOwotCQkJCWJyZWFrOwotCQkJY2FzZSBPQ09OX1BPUlQ6Ci0JCQkJcmMgPSBuZXh0X2VudHJ5KGJ1ZiwgZnAsIHNpemVvZih1MzIpKjMpOwotCQkJCWlmIChyYyA8IDApCi0JCQkJCWdvdG8gYmFkOwotCQkJCWMtPnUucG9ydC5wcm90b2NvbCA9IGxlMzJfdG9fY3B1KGJ1ZlswXSk7Ci0JCQkJYy0+dS5wb3J0Lmxvd19wb3J0ID0gbGUzMl90b19jcHUoYnVmWzFdKTsKLQkJCQljLT51LnBvcnQuaGlnaF9wb3J0ID0gbGUzMl90b19jcHUoYnVmWzJdKTsKLQkJCQlyYyA9IGNvbnRleHRfcmVhZF9hbmRfdmFsaWRhdGUoJmMtPmNvbnRleHRbMF0sIHAsIGZwKTsKLQkJCQlpZiAocmMpCi0JCQkJCWdvdG8gYmFkOwotCQkJCWJyZWFrOwotCQkJY2FzZSBPQ09OX05PREU6Ci0JCQkJcmMgPSBuZXh0X2VudHJ5KG5vZGVidWYsIGZwLCBzaXplb2YodTMyKSAqIDIpOwotCQkJCWlmIChyYyA8IDApCi0JCQkJCWdvdG8gYmFkOwotCQkJCWMtPnUubm9kZS5hZGRyID0gbm9kZWJ1ZlswXTsgLyogbmV0d29yayBvcmRlciAqLwotCQkJCWMtPnUubm9kZS5tYXNrID0gbm9kZWJ1ZlsxXTsgLyogbmV0d29yayBvcmRlciAqLwotCQkJCXJjID0gY29udGV4dF9yZWFkX2FuZF92YWxpZGF0ZSgmYy0+Y29udGV4dFswXSwgcCwgZnApOwotCQkJCWlmIChyYykKLQkJCQkJZ290byBiYWQ7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIE9DT05fRlNVU0U6Ci0JCQkJcmMgPSBuZXh0X2VudHJ5KGJ1ZiwgZnAsIHNpemVvZih1MzIpKjIpOwotCQkJCWlmIChyYyA8IDApCi0JCQkJCWdvdG8gYmFkOwotCQkJCWMtPnYuYmVoYXZpb3IgPSBsZTMyX3RvX2NwdShidWZbMF0pOwotCQkJCWlmIChjLT52LmJlaGF2aW9yID4gU0VDVVJJVFlfRlNfVVNFX05PTkUpCi0JCQkJCWdvdG8gYmFkOwotCQkJCWxlbiA9IGxlMzJfdG9fY3B1KGJ1ZlsxXSk7Ci0JCQkJYy0+dS5uYW1lID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKLQkJCQlpZiAoIWMtPnUubmFtZSkgewotCQkJCQlyYyA9IC1FTk9NRU07Ci0JCQkJCWdvdG8gYmFkOwotCQkJCX0KLQkJCQlyYyA9IG5leHRfZW50cnkoYy0+dS5uYW1lLCBmcCwgbGVuKTsKLQkJCQlpZiAocmMgPCAwKQotCQkJCQlnb3RvIGJhZDsKLQkJCQljLT51Lm5hbWVbbGVuXSA9IDA7Ci0JCQkJcmMgPSBjb250ZXh0X3JlYWRfYW5kX3ZhbGlkYXRlKCZjLT5jb250ZXh0WzBdLCBwLCBmcCk7Ci0JCQkJaWYgKHJjKQotCQkJCQlnb3RvIGJhZDsKLQkJCQlicmVhazsKLQkJCWNhc2UgT0NPTl9OT0RFNjogewotCQkJCWludCBrOwotCi0JCQkJcmMgPSBuZXh0X2VudHJ5KG5vZGVidWYsIGZwLCBzaXplb2YodTMyKSAqIDgpOwotCQkJCWlmIChyYyA8IDApCi0JCQkJCWdvdG8gYmFkOwotCQkJCWZvciAoayA9IDA7IGsgPCA0OyBrKyspCi0JCQkJCWMtPnUubm9kZTYuYWRkcltrXSA9IG5vZGVidWZba107Ci0JCQkJZm9yIChrID0gMDsgayA8IDQ7IGsrKykKLQkJCQkJYy0+dS5ub2RlNi5tYXNrW2tdID0gbm9kZWJ1ZltrKzRdOwotCQkJCWlmIChjb250ZXh0X3JlYWRfYW5kX3ZhbGlkYXRlKCZjLT5jb250ZXh0WzBdLCBwLCBmcCkpCi0JCQkJCWdvdG8gYmFkOwotCQkJCWJyZWFrOwotCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JcmMgPSBuZXh0X2VudHJ5KGJ1ZiwgZnAsIHNpemVvZih1MzIpKTsKLQlpZiAocmMgPCAwKQorCXJjID0gb2NvbnRleHRfcmVhZChwLCBpbmZvLCBmcCk7CisJaWYgKHJjKQogCQlnb3RvIGJhZDsKLQluZWwgPSBsZTMyX3RvX2NwdShidWZbMF0pOwotCWdlbmZzX3AgPSBOVUxMOwotCXJjID0gLUVJTlZBTDsKLQlmb3IgKGkgPSAwOyBpIDwgbmVsOyBpKyspIHsKLQkJcmMgPSBuZXh0X2VudHJ5KGJ1ZiwgZnAsIHNpemVvZih1MzIpKTsKLQkJaWYgKHJjIDwgMCkKLQkJCWdvdG8gYmFkOwotCQlsZW4gPSBsZTMyX3RvX2NwdShidWZbMF0pOwotCQluZXdnZW5mcyA9IGt6YWxsb2Moc2l6ZW9mKCpuZXdnZW5mcyksIEdGUF9LRVJORUwpOwotCQlpZiAoIW5ld2dlbmZzKSB7Ci0JCQlyYyA9IC1FTk9NRU07Ci0JCQlnb3RvIGJhZDsKLQkJfQogCi0JCW5ld2dlbmZzLT5mc3R5cGUgPSBrbWFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOwotCQlpZiAoIW5ld2dlbmZzLT5mc3R5cGUpIHsKLQkJCXJjID0gLUVOT01FTTsKLQkJCWtmcmVlKG5ld2dlbmZzKTsKLQkJCWdvdG8gYmFkOwotCQl9Ci0JCXJjID0gbmV4dF9lbnRyeShuZXdnZW5mcy0+ZnN0eXBlLCBmcCwgbGVuKTsKLQkJaWYgKHJjIDwgMCkgewotCQkJa2ZyZWUobmV3Z2VuZnMtPmZzdHlwZSk7Ci0JCQlrZnJlZShuZXdnZW5mcyk7Ci0JCQlnb3RvIGJhZDsKLQkJfQotCQluZXdnZW5mcy0+ZnN0eXBlW2xlbl0gPSAwOwotCQlmb3IgKGdlbmZzX3AgPSBOVUxMLCBnZW5mcyA9IHAtPmdlbmZzOyBnZW5mczsKLQkJICAgICBnZW5mc19wID0gZ2VuZnMsIGdlbmZzID0gZ2VuZnMtPm5leHQpIHsKLQkJCWlmIChzdHJjbXAobmV3Z2VuZnMtPmZzdHlwZSwgZ2VuZnMtPmZzdHlwZSkgPT0gMCkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogIGR1cCBnZW5mcyAiCi0JCQkJICAgICAgICJmc3R5cGUgJXNcbiIsIG5ld2dlbmZzLT5mc3R5cGUpOwotCQkJCWtmcmVlKG5ld2dlbmZzLT5mc3R5cGUpOwotCQkJCWtmcmVlKG5ld2dlbmZzKTsKLQkJCQlnb3RvIGJhZDsKLQkJCX0KLQkJCWlmIChzdHJjbXAobmV3Z2VuZnMtPmZzdHlwZSwgZ2VuZnMtPmZzdHlwZSkgPCAwKQotCQkJCWJyZWFrOwotCQl9Ci0JCW5ld2dlbmZzLT5uZXh0ID0gZ2VuZnM7Ci0JCWlmIChnZW5mc19wKQotCQkJZ2VuZnNfcC0+bmV4dCA9IG5ld2dlbmZzOwotCQllbHNlCi0JCQlwLT5nZW5mcyA9IG5ld2dlbmZzOwotCQlyYyA9IG5leHRfZW50cnkoYnVmLCBmcCwgc2l6ZW9mKHUzMikpOwotCQlpZiAocmMgPCAwKQotCQkJZ290byBiYWQ7Ci0JCW5lbDIgPSBsZTMyX3RvX2NwdShidWZbMF0pOwotCQlmb3IgKGogPSAwOyBqIDwgbmVsMjsgaisrKSB7Ci0JCQlyYyA9IG5leHRfZW50cnkoYnVmLCBmcCwgc2l6ZW9mKHUzMikpOwotCQkJaWYgKHJjIDwgMCkKLQkJCQlnb3RvIGJhZDsKLQkJCWxlbiA9IGxlMzJfdG9fY3B1KGJ1ZlswXSk7CisJcmMgPSBnZW5mc19yZWFkKHAsIGZwKTsKKwlpZiAocmMpCisJCWdvdG8gYmFkOwogCi0JCQluZXdjID0ga3phbGxvYyhzaXplb2YoKm5ld2MpLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghbmV3YykgewotCQkJCXJjID0gLUVOT01FTTsKLQkJCQlnb3RvIGJhZDsKLQkJCX0KKwlyYyA9IHJhbmdlX3JlYWQocCwgZnApOworCWlmIChyYykKKwkJZ290byBiYWQ7CiAKLQkJCW5ld2MtPnUubmFtZSA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIW5ld2MtPnUubmFtZSkgewotCQkJCXJjID0gLUVOT01FTTsKLQkJCQlnb3RvIGJhZF9uZXdjOwotCQkJfQotCQkJcmMgPSBuZXh0X2VudHJ5KG5ld2MtPnUubmFtZSwgZnAsIGxlbik7Ci0JCQlpZiAocmMgPCAwKQotCQkJCWdvdG8gYmFkX25ld2M7Ci0JCQluZXdjLT51Lm5hbWVbbGVuXSA9IDA7Ci0JCQlyYyA9IG5leHRfZW50cnkoYnVmLCBmcCwgc2l6ZW9mKHUzMikpOwotCQkJaWYgKHJjIDwgMCkKLQkJCQlnb3RvIGJhZF9uZXdjOwotCQkJbmV3Yy0+di5zY2xhc3MgPSBsZTMyX3RvX2NwdShidWZbMF0pOwotCQkJaWYgKGNvbnRleHRfcmVhZF9hbmRfdmFsaWRhdGUoJm5ld2MtPmNvbnRleHRbMF0sIHAsIGZwKSkKLQkJCQlnb3RvIGJhZF9uZXdjOwotCQkJZm9yIChsID0gTlVMTCwgYyA9IG5ld2dlbmZzLT5oZWFkOyBjOwotCQkJICAgICBsID0gYywgYyA9IGMtPm5leHQpIHsKLQkJCQlpZiAoIXN0cmNtcChuZXdjLT51Lm5hbWUsIGMtPnUubmFtZSkgJiYKLQkJCQkgICAgKCFjLT52LnNjbGFzcyB8fCAhbmV3Yy0+di5zY2xhc3MgfHwKLQkJCQkgICAgIG5ld2MtPnYuc2NsYXNzID09IGMtPnYuc2NsYXNzKSkgewotCQkJCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6ICBkdXAgZ2VuZnMgIgotCQkJCQkgICAgICAgImVudHJ5ICglcywlcylcbiIsCi0JCQkJCSAgICAgICBuZXdnZW5mcy0+ZnN0eXBlLCBjLT51Lm5hbWUpOwotCQkJCQlnb3RvIGJhZF9uZXdjOwotCQkJCX0KLQkJCQlsZW4gPSBzdHJsZW4obmV3Yy0+dS5uYW1lKTsKLQkJCQlsZW4yID0gc3RybGVuKGMtPnUubmFtZSk7Ci0JCQkJaWYgKGxlbiA+IGxlbjIpCi0JCQkJCWJyZWFrOwotCQkJfQorCXJjID0gLUVOT01FTTsKKwlwLT50eXBlX2F0dHJfbWFwX2FycmF5ID0gZmxleF9hcnJheV9hbGxvYyhzaXplb2Yoc3RydWN0IGViaXRtYXApLAorCQkJCQkJICBwLT5wX3R5cGVzLm5wcmltLAorCQkJCQkJICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CisJaWYgKCFwLT50eXBlX2F0dHJfbWFwX2FycmF5KQorCQlnb3RvIGJhZDsKIAotCQkJbmV3Yy0+bmV4dCA9IGM7Ci0JCQlpZiAobCkKLQkJCQlsLT5uZXh0ID0gbmV3YzsKLQkJCWVsc2UKLQkJCQluZXdnZW5mcy0+aGVhZCA9IG5ld2M7Ci0JCX0KLQl9Ci0KLQlpZiAocC0+cG9saWN5dmVycyA+PSBQT0xJQ1lEQl9WRVJTSU9OX01MUykgewotCQlpbnQgbmV3X3JhbmdldHIgPSBwLT5wb2xpY3l2ZXJzID49IFBPTElDWURCX1ZFUlNJT05fUkFOR0VUUkFOUzsKLQkJcmMgPSBuZXh0X2VudHJ5KGJ1ZiwgZnAsIHNpemVvZih1MzIpKTsKLQkJaWYgKHJjIDwgMCkKLQkJCWdvdG8gYmFkOwotCQluZWwgPSBsZTMyX3RvX2NwdShidWZbMF0pOwotCQlmb3IgKGkgPSAwOyBpIDwgbmVsOyBpKyspIHsKLQkJCXJ0ID0ga3phbGxvYyhzaXplb2YoKnJ0KSwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIXJ0KSB7Ci0JCQkJcmMgPSAtRU5PTUVNOwotCQkJCWdvdG8gYmFkOwotCQkJfQotCQkJcmMgPSBuZXh0X2VudHJ5KGJ1ZiwgZnAsIChzaXplb2YodTMyKSAqIDIpKTsKLQkJCWlmIChyYyA8IDApIHsKLQkJCQlrZnJlZShydCk7Ci0JCQkJZ290byBiYWQ7Ci0JCQl9Ci0JCQlydC0+c291cmNlX3R5cGUgPSBsZTMyX3RvX2NwdShidWZbMF0pOwotCQkJcnQtPnRhcmdldF90eXBlID0gbGUzMl90b19jcHUoYnVmWzFdKTsKLQkJCWlmIChuZXdfcmFuZ2V0cikgewotCQkJCXJjID0gbmV4dF9lbnRyeShidWYsIGZwLCBzaXplb2YodTMyKSk7Ci0JCQkJaWYgKHJjIDwgMCkgewotCQkJCQlrZnJlZShydCk7Ci0JCQkJCWdvdG8gYmFkOwotCQkJCX0KLQkJCQlydC0+dGFyZ2V0X2NsYXNzID0gbGUzMl90b19jcHUoYnVmWzBdKTsKLQkJCX0gZWxzZQotCQkJCXJ0LT50YXJnZXRfY2xhc3MgPSBwLT5wcm9jZXNzX2NsYXNzOwotCQkJaWYgKCFwb2xpY3lkYl90eXBlX2lzdmFsaWQocCwgcnQtPnNvdXJjZV90eXBlKSB8fAotCQkJICAgICFwb2xpY3lkYl90eXBlX2lzdmFsaWQocCwgcnQtPnRhcmdldF90eXBlKSB8fAotCQkJICAgICFwb2xpY3lkYl9jbGFzc19pc3ZhbGlkKHAsIHJ0LT50YXJnZXRfY2xhc3MpKSB7Ci0JCQkJa2ZyZWUocnQpOwotCQkJCXJjID0gLUVJTlZBTDsKLQkJCQlnb3RvIGJhZDsKLQkJCX0KLQkJCXIgPSBremFsbG9jKHNpemVvZigqciksIEdGUF9LRVJORUwpOwotCQkJaWYgKCFyKSB7Ci0JCQkJa2ZyZWUocnQpOwotCQkJCXJjID0gLUVOT01FTTsKLQkJCQlnb3RvIGJhZDsKLQkJCX0KLQkJCXJjID0gbWxzX3JlYWRfcmFuZ2VfaGVscGVyKHIsIGZwKTsKLQkJCWlmIChyYykgewotCQkJCWtmcmVlKHJ0KTsKLQkJCQlrZnJlZShyKTsKLQkJCQlnb3RvIGJhZDsKLQkJCX0KLQkJCWlmICghbWxzX3JhbmdlX2lzdmFsaWQocCwgcikpIHsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJTRUxpbnV4OiAgcmFuZ2V0cmFuczogIGludmFsaWQgcmFuZ2VcbiIpOwotCQkJCWtmcmVlKHJ0KTsKLQkJCQlrZnJlZShyKTsKLQkJCQlnb3RvIGJhZDsKLQkJCX0KLQkJCXJjID0gaGFzaHRhYl9pbnNlcnQocC0+cmFuZ2VfdHIsIHJ0LCByKTsKLQkJCWlmIChyYykgewotCQkJCWtmcmVlKHJ0KTsKLQkJCQlrZnJlZShyKTsKLQkJCQlnb3RvIGJhZDsKLQkJCX0KLQkJfQotCQlyYW5nZXRyX2hhc2hfZXZhbChwLT5yYW5nZV90cik7Ci0JfQotCi0JcC0+dHlwZV9hdHRyX21hcCA9IGttYWxsb2MocC0+cF90eXBlcy5ucHJpbSAqIHNpemVvZihzdHJ1Y3QgZWJpdG1hcCksIEdGUF9LRVJORUwpOwotCWlmICghcC0+dHlwZV9hdHRyX21hcCkKKwkvKiBwcmVhbGxvY2F0ZSBzbyB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZSBwdXQgZXZlciBmYWlsaW5nICovCisJcmMgPSBmbGV4X2FycmF5X3ByZWFsbG9jKHAtPnR5cGVfYXR0cl9tYXBfYXJyYXksIDAsIHAtPnBfdHlwZXMubnByaW0gLSAxLAorCQkJCSBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CisJaWYgKHJjKQogCQlnb3RvIGJhZDsKIAogCWZvciAoaSA9IDA7IGkgPCBwLT5wX3R5cGVzLm5wcmltOyBpKyspIHsKLQkJZWJpdG1hcF9pbml0KCZwLT50eXBlX2F0dHJfbWFwW2ldKTsKKwkJc3RydWN0IGViaXRtYXAgKmUgPSBmbGV4X2FycmF5X2dldChwLT50eXBlX2F0dHJfbWFwX2FycmF5LCBpKTsKKworCQlCVUdfT04oIWUpOworCQllYml0bWFwX2luaXQoZSk7CiAJCWlmIChwLT5wb2xpY3l2ZXJzID49IFBPTElDWURCX1ZFUlNJT05fQVZUQUIpIHsKLQkJCWlmIChlYml0bWFwX3JlYWQoJnAtPnR5cGVfYXR0cl9tYXBbaV0sIGZwKSkKKwkJCXJjID0gZWJpdG1hcF9yZWFkKGUsIGZwKTsKKwkJCWlmIChyYykKIAkJCQlnb3RvIGJhZDsKIAkJfQogCQkvKiBhZGQgdGhlIHR5cGUgaXRzZWxmIGFzIHRoZSBkZWdlbmVyYXRlIGNhc2UgKi8KLQkJaWYgKGViaXRtYXBfc2V0X2JpdCgmcC0+dHlwZV9hdHRyX21hcFtpXSwgaSwgMSkpCi0JCQkJZ290byBiYWQ7CisJCXJjID0gZWJpdG1hcF9zZXRfYml0KGUsIGksIDEpOworCQlpZiAocmMpCisJCQlnb3RvIGJhZDsKIAl9CiAKIAlyYyA9IHBvbGljeWRiX2JvdW5kc19zYW5pdHlfY2hlY2socCk7CkBAIC0yMjE2LDggKzIzMDAsNiBAQAogCXJjID0gMDsKIG91dDoKIAlyZXR1cm4gcmM7Ci1iYWRfbmV3YzoKLQlvY29udGV4dF9kZXN0cm95KG5ld2MsIE9DT05fRlNVU0UpOwogYmFkOgogCWlmICghcmMpCiAJCXJjID0gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuaCBiL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuaAppbmRleCAyNmQ5YWRmLi4zMTBlOTQ0IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5oCkBAIC0yNCw2ICsyNCw4IEBACiAjaWZuZGVmIF9TU19QT0xJQ1lEQl9IXwogI2RlZmluZSBfU1NfUE9MSUNZREJfSF8KIAorI2luY2x1ZGUgPGxpbnV4L2ZsZXhfYXJyYXkuaD4KKwogI2luY2x1ZGUgInN5bXRhYi5oIgogI2luY2x1ZGUgImF2dGFiLmgiCiAjaW5jbHVkZSAic2lkdGFiLmgiCkBAIC0yNDYsNyArMjQ4LDcgQEAKIAlzdHJ1Y3QgaGFzaHRhYiAqcmFuZ2VfdHI7CiAKIAkvKiB0eXBlIC0+IGF0dHJpYnV0ZSByZXZlcnNlIG1hcHBpbmcgKi8KLQlzdHJ1Y3QgZWJpdG1hcCAqdHlwZV9hdHRyX21hcDsKKwlzdHJ1Y3QgZmxleF9hcnJheSAqdHlwZV9hdHRyX21hcF9hcnJheTsKIAogCXN0cnVjdCBlYml0bWFwIHBvbGljeWNhcHM7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYyBiL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYwppbmRleCAxZGU2MGNlOS4uOWVhMmZlYyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYwpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9zZWxpbnV4Lmg+CisjaW5jbHVkZSA8bGludXgvZmxleF9hcnJheS5oPgogI2luY2x1ZGUgPG5ldC9uZXRsYWJlbC5oPgogCiAjaW5jbHVkZSAiZmxhc2suaCIKQEAgLTYyNiw4ICs2MjcsMTAgQEAKIAkgKi8KIAlhdmtleS50YXJnZXRfY2xhc3MgPSB0Y2xhc3M7CiAJYXZrZXkuc3BlY2lmaWVkID0gQVZUQUJfQVY7Ci0Jc2F0dHIgPSAmcG9saWN5ZGIudHlwZV9hdHRyX21hcFtzY29udGV4dC0+dHlwZSAtIDFdOwotCXRhdHRyID0gJnBvbGljeWRiLnR5cGVfYXR0cl9tYXBbdGNvbnRleHQtPnR5cGUgLSAxXTsKKwlzYXR0ciA9IGZsZXhfYXJyYXlfZ2V0KHBvbGljeWRiLnR5cGVfYXR0cl9tYXBfYXJyYXksIHNjb250ZXh0LT50eXBlIC0gMSk7CisJQlVHX09OKCFzYXR0cik7CisJdGF0dHIgPSBmbGV4X2FycmF5X2dldChwb2xpY3lkYi50eXBlX2F0dHJfbWFwX2FycmF5LCB0Y29udGV4dC0+dHlwZSAtIDEpOworCUJVR19PTighdGF0dHIpOwogCWViaXRtYXBfZm9yX2VhY2hfcG9zaXRpdmVfYml0KHNhdHRyLCBzbm9kZSwgaSkgewogCQllYml0bWFwX2Zvcl9lYWNoX3Bvc2l0aXZlX2JpdCh0YXR0ciwgdG5vZGUsIGopIHsKIAkJCWF2a2V5LnNvdXJjZV90eXBlID0gaSArIDE7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL3N5bXRhYi5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9zeW10YWIuYwppbmRleCBiY2Y5ZjYyLi4xNjAzMjZlIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL3N5bXRhYi5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3Mvc3ltdGFiLmMKQEAgLTM2LDcgKzM2LDcgQEAKIHsKIAlzLT50YWJsZSA9IGhhc2h0YWJfY3JlYXRlKHN5bWhhc2gsIHN5bWNtcCwgc2l6ZSk7CiAJaWYgKCFzLT50YWJsZSkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVOT01FTTsKIAlzLT5ucHJpbSA9IDA7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFjay5oIGIvc2VjdXJpdHkvc21hY2svc21hY2suaAppbmRleCBjNmU5YWNhLi40M2FlNzQ3IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9zbWFjay5oCisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrLmgKQEAgLTEyMywxNiArMTIzLDYgQEAKICNkZWZpbmUgU01LX0ZTSEFUCSJzbWFja2ZzaGF0PSIKICNkZWZpbmUgU01LX0ZTUk9PVAkic21hY2tmc3Jvb3Q9IgogCi0vKgotICogeGF0dHIgbmFtZXMKLSAqLwotI2RlZmluZSBYQVRUUl9TTUFDS19TVUZGSVgJIlNNQUNLNjQiCi0jZGVmaW5lIFhBVFRSX1NNQUNLX0lQSU4JIlNNQUNLNjRJUElOIgotI2RlZmluZSBYQVRUUl9TTUFDS19JUE9VVAkiU01BQ0s2NElQT1VUIgotI2RlZmluZSBYQVRUUl9OQU1FX1NNQUNLCVhBVFRSX1NFQ1VSSVRZX1BSRUZJWCBYQVRUUl9TTUFDS19TVUZGSVgKLSNkZWZpbmUgWEFUVFJfTkFNRV9TTUFDS0lQSU4JWEFUVFJfU0VDVVJJVFlfUFJFRklYIFhBVFRSX1NNQUNLX0lQSU4KLSNkZWZpbmUgWEFUVFJfTkFNRV9TTUFDS0lQT1VUCVhBVFRSX1NFQ1VSSVRZX1BSRUZJWCBYQVRUUl9TTUFDS19JUE9VVAotCiAjZGVmaW5lIFNNQUNLX0NJUFNPX09QVElPTiAJIi1DSVBTTyIKIAogLyoKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKaW5kZXggMGYyZmM0OC4uYzQ0OGQ1NyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKQEAgLTU5OCw2ICs1OTgsOCBAQAogc3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQogewogCXN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDsKKworCW1hc2sgJj0gKE1BWV9SRUFEfE1BWV9XUklURXxNQVlfRVhFQ3xNQVlfQVBQRU5EKTsKIAkvKgogCSAqIE5vIHBlcm1pc3Npb24gdG8gY2hlY2suIEV4aXN0ZW5jZSB0ZXN0LiBZdXAsIGl0J3MgdGhlcmUuCiAJICovCkBAIC0yMTkxLDcgKzIxOTMsNyBAQAogCiAvKioKICAqIHNtYWNrX2RfaW5zdGFudGlhdGUgLSBNYWtlIHN1cmUgdGhlIGJsb2IgaXMgY29ycmVjdCBvbiBhbiBpbm9kZQotICogQG9wdF9kZW50cnk6IHVudXNlZAorICogQG9wdF9kZW50cnk6IGRlbnRyeSB3aGVyZSBpbm9kZSB3aWxsIGJlIGF0dGFjaGVkCiAgKiBAaW5vZGU6IHRoZSBvYmplY3QKICAqCiAgKiBTZXQgdGhlIGlub2RlJ3Mgc2VjdXJpdHkgYmxvYiBpZiBpdCBoYXNuJ3QgYmVlbiBkb25lIGFscmVhZHkuCkBAIC0yMzEwLDIwICsyMzEyLDEwIEBACiAJCS8qCiAJCSAqIEdldCB0aGUgZGVudHJ5IGZvciB4YXR0ci4KIAkJICovCi0JCWlmIChvcHRfZGVudHJ5ID09IE5VTEwpIHsKLQkJCWRwID0gZF9maW5kX2FsaWFzKGlub2RlKTsKLQkJCWlmIChkcCA9PSBOVUxMKQotCQkJCWJyZWFrOwotCQl9IGVsc2UgewotCQkJZHAgPSBkZ2V0KG9wdF9kZW50cnkpOwotCQkJaWYgKGRwID09IE5VTEwpCi0JCQkJYnJlYWs7Ci0JCX0KLQorCQlkcCA9IGRnZXQob3B0X2RlbnRyeSk7CiAJCWZldGNoZWQgPSBzbWtfZmV0Y2goaW5vZGUsIGRwKTsKIAkJaWYgKGZldGNoZWQgIT0gTlVMTCkKIAkJCWZpbmFsID0gZmV0Y2hlZDsKLQogCQlkcHV0KGRwKTsKIAkJYnJlYWs7CiAJfQpAQCAtMzIyNyw3ICszMjE5LDcgQEAKIAljcmVkID0gKHN0cnVjdCBjcmVkICopIGN1cnJlbnQtPmNyZWQ7CiAJY3JlZC0+c2VjdXJpdHkgPSAmc21hY2tfa25vd25fZmxvb3Iuc21rX2tub3duOwogCi0JLyogaW5pdGlsaXplIHRoZSBzbWFja19rbm93X2xpc3QgKi8KKwkvKiBpbml0aWFsaXplIHRoZSBzbWFja19rbm93X2xpc3QgKi8KIAlpbml0X3NtYWNrX2tub3dfbGlzdCgpOwogCS8qCiAJICogSW5pdGlhbGl6ZSBsb2NrcwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL01ha2VmaWxlIGIvc2VjdXJpdHkvdG9tb3lvL01ha2VmaWxlCmluZGV4IDRmYjM5MDMuLjkxNjQwZTkgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3RvbW95by9NYWtlZmlsZQorKysgYi9zZWN1cml0eS90b21veW8vTWFrZWZpbGUKQEAgLTEgKzEgQEAKLW9iai15ID0gY29tbW9uLm8gcmVhbHBhdGgubyB0b21veW8ubyBkb21haW4ubyBmaWxlLm8gZ2MubyBwYXRoX2dyb3VwLm8KK29iai15ID0gY29tbW9uLm8gZG9tYWluLm8gZmlsZS5vIGdjLm8gZ3JvdXAubyBsb2FkX3BvbGljeS5vIG1lbW9yeS5vIG1vdW50Lm8gcmVhbHBhdGgubyBzZWN1cml0eWZzX2lmLm8gdG9tb3lvLm8gdXRpbC5vCmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vY29tbW9uLmMgYi9zZWN1cml0eS90b21veW8vY29tbW9uLmMKaW5kZXggYjVkYmRjOS4uZWY0Mzk5NSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5jCisrKyBiL3NlY3VyaXR5L3RvbW95by9jb21tb24uYwpAQCAtMyw5OSArMywxODQgQEAKICAqCiAgKiBDb21tb24gZnVuY3Rpb25zIGZvciBUT01PWU8uCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgIE5UVCBEQVRBIENPUlBPUkFUSU9OCi0gKgotICogVmVyc2lvbjogMi4yLjAgICAyMDA5LzA0LzAxCi0gKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAgIE5UVCBEQVRBIENPUlBPUkFUSU9OCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAjaW5jbHVkZSAiY29tbW9uLmgiCiAKLS8qIExvY2sgZm9yIHByb3RlY3RpbmcgcG9saWN5LiAqLwotREVGSU5FX01VVEVYKHRvbW95b19wb2xpY3lfbG9jayk7CitzdGF0aWMgc3RydWN0IHRvbW95b19wcm9maWxlIHRvbW95b19kZWZhdWx0X3Byb2ZpbGUgPSB7CisJLmxlYXJuaW5nID0gJnRvbW95b19kZWZhdWx0X3Byb2ZpbGUucHJlZmVyZW5jZSwKKwkucGVybWlzc2l2ZSA9ICZ0b21veW9fZGVmYXVsdF9wcm9maWxlLnByZWZlcmVuY2UsCisJLmVuZm9yY2luZyA9ICZ0b21veW9fZGVmYXVsdF9wcm9maWxlLnByZWZlcmVuY2UsCisJLnByZWZlcmVuY2UuZW5mb3JjaW5nX3ZlcmJvc2UgPSB0cnVlLAorCS5wcmVmZXJlbmNlLmxlYXJuaW5nX21heF9lbnRyeSA9IDIwNDgsCisJLnByZWZlcmVuY2UubGVhcm5pbmdfdmVyYm9zZSA9IGZhbHNlLAorCS5wcmVmZXJlbmNlLnBlcm1pc3NpdmVfdmVyYm9zZSA9IHRydWUKK307CiAKLS8qIEhhcyBsb2FkaW5nIHBvbGljeSBkb25lPyAqLwotYm9vbCB0b21veW9fcG9saWN5X2xvYWRlZDsKKy8qIFByb2ZpbGUgdmVyc2lvbi4gQ3VycmVudGx5IG9ubHkgMjAwOTA5MDMgaXMgZGVmaW5lZC4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdG9tb3lvX3Byb2ZpbGVfdmVyc2lvbjsKKworLyogUHJvZmlsZSB0YWJsZS4gTWVtb3J5IGlzIGFsbG9jYXRlZCBhcyBuZWVkZWQuICovCitzdGF0aWMgc3RydWN0IHRvbW95b19wcm9maWxlICp0b21veW9fcHJvZmlsZV9wdHJbVE9NT1lPX01BWF9QUk9GSUxFU107CiAKIC8qIFN0cmluZyB0YWJsZSBmb3IgZnVuY3Rpb25hbGl0eSB0aGF0IHRha2VzIDQgbW9kZXMuICovCi1zdGF0aWMgY29uc3QgY2hhciAqdG9tb3lvX21vZGVfNFs0XSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICp0b21veW9fbW9kZVs0XSA9IHsKIAkiZGlzYWJsZWQiLCAibGVhcm5pbmciLCAicGVybWlzc2l2ZSIsICJlbmZvcmNpbmciCiB9OwotLyogU3RyaW5nIHRhYmxlIGZvciBmdW5jdGlvbmFsaXR5IHRoYXQgdGFrZXMgMiBtb2Rlcy4gKi8KLXN0YXRpYyBjb25zdCBjaGFyICp0b21veW9fbW9kZV8yWzRdID0gewotCSJkaXNhYmxlZCIsICJlbmFibGVkIiwgImVuYWJsZWQiLCAiZW5hYmxlZCIKLX07CiAKLS8qCi0gKiB0b21veW9fY29udHJvbF9hcnJheSBpcyBhIHN0YXRpYyBkYXRhIHdoaWNoIGNvbnRhaW5zCi0gKgotICogICgxKSBmdW5jdGlvbmFsaXR5IG5hbWUgdXNlZCBieSAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vcHJvZmlsZSAuCi0gKiAgKDIpIGluaXRpYWwgdmFsdWVzIGZvciAic3RydWN0IHRvbW95b19wcm9maWxlIi4KLSAqICAoMykgbWF4IHZhbHVlcyBmb3IgInN0cnVjdCB0b21veW9fcHJvZmlsZSIuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgewotCWNvbnN0IGNoYXIgKmtleXdvcmQ7Ci0JdW5zaWduZWQgaW50IGN1cnJlbnRfdmFsdWU7Ci0JY29uc3QgdW5zaWduZWQgaW50IG1heF92YWx1ZTsKLX0gdG9tb3lvX2NvbnRyb2xfYXJyYXlbVE9NT1lPX01BWF9DT05UUk9MX0lOREVYXSA9IHsKLQlbVE9NT1lPX01BQ19GT1JfRklMRV0gICAgID0geyAiTUFDX0ZPUl9GSUxFIiwgICAgICAgIDAsICAgICAgIDMgfSwKLQlbVE9NT1lPX01BWF9BQ0NFUFRfRU5UUlldID0geyAiTUFYX0FDQ0VQVF9FTlRSWSIsIDIwNDgsIElOVF9NQVggfSwKLQlbVE9NT1lPX1ZFUkJPU0VdICAgICAgICAgID0geyAiVE9NT1lPX1ZFUkJPU0UiLCAgICAgIDEsICAgICAgIDEgfSwKKy8qIFN0cmluZyB0YWJsZSBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL3Byb2ZpbGUgKi8KK3N0YXRpYyBjb25zdCBjaGFyICp0b21veW9fbWFjX2tleXdvcmRzW1RPTU9ZT19NQVhfTUFDX0lOREVYCisJCQkJICAgICAgICsgVE9NT1lPX01BWF9NQUNfQ0FURUdPUllfSU5ERVhdID0geworCVtUT01PWU9fTUFDX0ZJTEVfRVhFQ1VURV0gICAgPSAiZmlsZTo6ZXhlY3V0ZSIsCisJW1RPTU9ZT19NQUNfRklMRV9PUEVOXSAgICAgICA9ICJmaWxlOjpvcGVuIiwKKwlbVE9NT1lPX01BQ19GSUxFX0NSRUFURV0gICAgID0gImZpbGU6OmNyZWF0ZSIsCisJW1RPTU9ZT19NQUNfRklMRV9VTkxJTktdICAgICA9ICJmaWxlOjp1bmxpbmsiLAorCVtUT01PWU9fTUFDX0ZJTEVfTUtESVJdICAgICAgPSAiZmlsZTo6bWtkaXIiLAorCVtUT01PWU9fTUFDX0ZJTEVfUk1ESVJdICAgICAgPSAiZmlsZTo6cm1kaXIiLAorCVtUT01PWU9fTUFDX0ZJTEVfTUtGSUZPXSAgICAgPSAiZmlsZTo6bWtmaWZvIiwKKwlbVE9NT1lPX01BQ19GSUxFX01LU09DS10gICAgID0gImZpbGU6Om1rc29jayIsCisJW1RPTU9ZT19NQUNfRklMRV9UUlVOQ0FURV0gICA9ICJmaWxlOjp0cnVuY2F0ZSIsCisJW1RPTU9ZT19NQUNfRklMRV9TWU1MSU5LXSAgICA9ICJmaWxlOjpzeW1saW5rIiwKKwlbVE9NT1lPX01BQ19GSUxFX1JFV1JJVEVdICAgID0gImZpbGU6OnJld3JpdGUiLAorCVtUT01PWU9fTUFDX0ZJTEVfTUtCTE9DS10gICAgPSAiZmlsZTo6bWtibG9jayIsCisJW1RPTU9ZT19NQUNfRklMRV9NS0NIQVJdICAgICA9ICJmaWxlOjpta2NoYXIiLAorCVtUT01PWU9fTUFDX0ZJTEVfTElOS10gICAgICAgPSAiZmlsZTo6bGluayIsCisJW1RPTU9ZT19NQUNfRklMRV9SRU5BTUVdICAgICA9ICJmaWxlOjpyZW5hbWUiLAorCVtUT01PWU9fTUFDX0ZJTEVfQ0hNT0RdICAgICAgPSAiZmlsZTo6Y2htb2QiLAorCVtUT01PWU9fTUFDX0ZJTEVfQ0hPV05dICAgICAgPSAiZmlsZTo6Y2hvd24iLAorCVtUT01PWU9fTUFDX0ZJTEVfQ0hHUlBdICAgICAgPSAiZmlsZTo6Y2hncnAiLAorCVtUT01PWU9fTUFDX0ZJTEVfSU9DVExdICAgICAgPSAiZmlsZTo6aW9jdGwiLAorCVtUT01PWU9fTUFDX0ZJTEVfQ0hST09UXSAgICAgPSAiZmlsZTo6Y2hyb290IiwKKwlbVE9NT1lPX01BQ19GSUxFX01PVU5UXSAgICAgID0gImZpbGU6Om1vdW50IiwKKwlbVE9NT1lPX01BQ19GSUxFX1VNT1VOVF0gICAgID0gImZpbGU6OnVtb3VudCIsCisJW1RPTU9ZT19NQUNfRklMRV9QSVZPVF9ST09UXSA9ICJmaWxlOjpwaXZvdF9yb290IiwKKwlbVE9NT1lPX01BWF9NQUNfSU5ERVggKyBUT01PWU9fTUFDX0NBVEVHT1JZX0ZJTEVdID0gImZpbGUiLAogfTsKIAotLyoKLSAqIHRvbW95b19wcm9maWxlIGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcgdGhlIG1vZGUgb2YgYWNjZXNzCi0gKiBjb250cm9scy4gVE9NT1lPIGhhcyA0IG1vZGVzOiBkaXNhYmxlZCwgbGVhcm5pbmcsIHBlcm1pc3NpdmUsIGVuZm9yY2luZy4KLSAqIEFuIGFkbWluaXN0cmF0b3IgY2FuIGRlZmluZSB1cCB0byAyNTYgcHJvZmlsZXMuCi0gKiBUaGUgLT5wcm9maWxlIG9mICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIiBpcyB1c2VkIGZvciByZW1lbWJlcmluZwotICogdGhlIHByb2ZpbGUncyBudW1iZXIgKDAgLSAyNTUpIGFzc2lnbmVkIHRvIHRoYXQgZG9tYWluLgotICovCi1zdGF0aWMgc3RydWN0IHRvbW95b19wcm9maWxlIHsKLQl1bnNpZ25lZCBpbnQgdmFsdWVbVE9NT1lPX01BWF9DT05UUk9MX0lOREVYXTsKLQljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqY29tbWVudDsKLX0gKnRvbW95b19wcm9maWxlX3B0cltUT01PWU9fTUFYX1BST0ZJTEVTXTsKLQogLyogUGVybWl0IHBvbGljeSBtYW5hZ2VtZW50IGJ5IG5vbi1yb290IHVzZXI/ICovCiBzdGF0aWMgYm9vbCB0b21veW9fbWFuYWdlX2J5X25vbl9yb290OwogCiAvKiBVdGlsaXR5IGZ1bmN0aW9ucy4gKi8KIAotLyogT3BlbiBvcGVyYXRpb24gZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLiAqLwotc3RhdGljIGludCB0b21veW9fb3Blbl9jb250cm9sKGNvbnN0IHU4IHR5cGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKLS8qIENsb3NlIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLiAqLwotc3RhdGljIGludCB0b21veW9fY2xvc2VfY29udHJvbChzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci0vKiBSZWFkIG9wZXJhdGlvbiBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuICovCi1zdGF0aWMgaW50IHRvbW95b19yZWFkX2NvbnRyb2woc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsCi0JCQkgICAgICAgY29uc3QgaW50IGJ1ZmZlcl9sZW4pOwotLyogV3JpdGUgb3BlcmF0aW9uIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4gKi8KLXN0YXRpYyBpbnQgdG9tb3lvX3dyaXRlX2NvbnRyb2woc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCQkJY29uc3QgaW50IGJ1ZmZlcl9sZW4pOworLyoqCisgKiB0b21veW9feWVzbm8gLSBSZXR1cm4gInllcyIgb3IgIm5vIi4KKyAqCisgKiBAdmFsdWU6IEJvb2wgdmFsdWUuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICp0b21veW9feWVzbm8oY29uc3QgdW5zaWduZWQgaW50IHZhbHVlKQoreworCXJldHVybiB2YWx1ZSA/ICJ5ZXMiIDogIm5vIjsKK30KKworc3RhdGljIHZvaWQgdG9tb3lvX2FkZHByaW50ZihjaGFyICpidWZmZXIsIGludCBsZW4sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwljb25zdCBpbnQgcG9zID0gc3RybGVuKGJ1ZmZlcik7CisJdmFfc3RhcnQoYXJncywgZm10KTsKKwl2c25wcmludGYoYnVmZmVyICsgcG9zLCBsZW4gLSBwb3MgLSAxLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKK30KIAogLyoqCi0gKiB0b21veW9fcGFyc2VfbmFtZV91bmlvbiAtIFBhcnNlIGEgdG9tb3lvX25hbWVfdW5pb24uCisgKiB0b21veW9fZmx1c2ggLSBGbHVzaCBxdWV1ZWQgc3RyaW5nIHRvIHVzZXJzcGFjZSdzIGJ1ZmZlci4KICAqCi0gKiBAZmlsZW5hbWU6IE5hbWUgb3IgbmFtZSBncm91cC4KLSAqIEBwdHI6ICAgICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19uYW1lX3VuaW9uIi4KKyAqIEBoZWFkOiAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KICAqCi0gKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgorICogUmV0dXJucyB0cnVlIGlmIGFsbCBkYXRhIHdhcyBmbHVzaGVkLCBmYWxzZSBvdGhlcndpc2UuCiAgKi8KLWJvb2wgdG9tb3lvX3BhcnNlX25hbWVfdW5pb24oY29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCQkgICAgIHN0cnVjdCB0b21veW9fbmFtZV91bmlvbiAqcHRyKQorc3RhdGljIGJvb2wgdG9tb3lvX2ZsdXNoKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQogewotCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChmaWxlbmFtZSwgMCwgMCwgMCkpCi0JCXJldHVybiBmYWxzZTsKLQlpZiAoZmlsZW5hbWVbMF0gPT0gJ0AnKSB7Ci0JCXB0ci0+Z3JvdXAgPSB0b21veW9fZ2V0X3BhdGhfZ3JvdXAoZmlsZW5hbWUgKyAxKTsKLQkJcHRyLT5pc19ncm91cCA9IHRydWU7Ci0JCXJldHVybiBwdHItPmdyb3VwICE9IE5VTEw7CisJd2hpbGUgKGhlYWQtPnIud19wb3MpIHsKKwkJY29uc3QgY2hhciAqdyA9IGhlYWQtPnIud1swXTsKKwkJaW50IGxlbiA9IHN0cmxlbih3KTsKKwkJaWYgKGxlbikgeworCQkJaWYgKGxlbiA+IGhlYWQtPnJlYWRfdXNlcl9idWZfYXZhaWwpCisJCQkJbGVuID0gaGVhZC0+cmVhZF91c2VyX2J1Zl9hdmFpbDsKKwkJCWlmICghbGVuKQorCQkJCXJldHVybiBmYWxzZTsKKwkJCWlmIChjb3B5X3RvX3VzZXIoaGVhZC0+cmVhZF91c2VyX2J1ZiwgdywgbGVuKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQloZWFkLT5yZWFkX3VzZXJfYnVmX2F2YWlsIC09IGxlbjsKKwkJCWhlYWQtPnJlYWRfdXNlcl9idWYgKz0gbGVuOworCQkJdyArPSBsZW47CisJCX0KKwkJaWYgKCp3KSB7CisJCQloZWFkLT5yLndbMF0gPSB3OworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCS8qIEFkZCAnXDAnIGZvciBxdWVyeS4gKi8KKwkJaWYgKGhlYWQtPnBvbGwpIHsKKwkJCWlmICghaGVhZC0+cmVhZF91c2VyX2J1Zl9hdmFpbCB8fAorCQkJICAgIGNvcHlfdG9fdXNlcihoZWFkLT5yZWFkX3VzZXJfYnVmLCAiIiwgMSkpCisJCQkJcmV0dXJuIGZhbHNlOworCQkJaGVhZC0+cmVhZF91c2VyX2J1Zl9hdmFpbC0tOworCQkJaGVhZC0+cmVhZF91c2VyX2J1ZisrOworCQl9CisJCWhlYWQtPnIud19wb3MtLTsKKwkJZm9yIChsZW4gPSAwOyBsZW4gPCBoZWFkLT5yLndfcG9zOyBsZW4rKykKKwkJCWhlYWQtPnIud1tsZW5dID0gaGVhZC0+ci53W2xlbiArIDFdOwogCX0KLQlwdHItPmZpbGVuYW1lID0gdG9tb3lvX2dldF9uYW1lKGZpbGVuYW1lKTsKLQlwdHItPmlzX2dyb3VwID0gZmFsc2U7Ci0JcmV0dXJuIHB0ci0+ZmlsZW5hbWUgIT0gTlVMTDsKKwloZWFkLT5yLmF2YWlsID0gMDsKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiB0b21veW9fc2V0X3N0cmluZyAtIFF1ZXVlIHN0cmluZyB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiIHN0cnVjdHVyZS4KKyAqCisgKiBAaGVhZDogICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKiBAc3RyaW5nOiBTdHJpbmcgdG8gcHJpbnQuCisgKgorICogTm90ZSB0aGF0IEBzdHJpbmcgaGFzIHRvIGJlIGtlcHQgdmFsaWQgdW50aWwgQGhlYWQgaXMga2ZyZWUoKWQuCisgKiBUaGlzIG1lYW5zIHRoYXQgY2hhcltdIGFsbG9jYXRlZCBvbiBzdGFjayBtZW1vcnkgY2Fubm90IGJlIHBhc3NlZCB0bworICogdGhpcyBmdW5jdGlvbi4gVXNlIHRvbW95b19pb19wcmludGYoKSBmb3IgY2hhcltdIGFsbG9jYXRlZCBvbiBzdGFjayBtZW1vcnkuCisgKi8KK3N0YXRpYyB2b2lkIHRvbW95b19zZXRfc3RyaW5nKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkLCBjb25zdCBjaGFyICpzdHJpbmcpCit7CisJaWYgKGhlYWQtPnIud19wb3MgPCBUT01PWU9fTUFYX0lPX1JFQURfUVVFVUUpIHsKKwkJaGVhZC0+ci53W2hlYWQtPnIud19wb3MrK10gPSBzdHJpbmc7CisJCXRvbW95b19mbHVzaChoZWFkKTsKKwl9IGVsc2UKKwkJV0FSTl9PTigxKTsKK30KKworLyoqCisgKiB0b21veW9faW9fcHJpbnRmIC0gcHJpbnRmKCkgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIiBzdHJ1Y3R1cmUuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqIEBmbXQ6ICBUaGUgcHJpbnRmKCkncyBmb3JtYXQgc3RyaW5nLCBmb2xsb3dlZCBieSBwYXJhbWV0ZXJzLgorICovCit2b2lkIHRvbW95b19pb19wcmludGYoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwlpbnQgbGVuOworCWludCBwb3MgPSBoZWFkLT5yLmF2YWlsOworCWludCBzaXplID0gaGVhZC0+cmVhZGJ1Zl9zaXplIC0gcG9zOworCWlmIChzaXplIDw9IDApCisJCXJldHVybjsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCWxlbiA9IHZzbnByaW50ZihoZWFkLT5yZWFkX2J1ZiArIHBvcywgc2l6ZSwgZm10LCBhcmdzKSArIDE7CisJdmFfZW5kKGFyZ3MpOworCWlmIChwb3MgKyBsZW4gPj0gaGVhZC0+cmVhZGJ1Zl9zaXplKSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybjsKKwl9CisJaGVhZC0+ci5hdmFpbCArPSBsZW47CisJdG9tb3lvX3NldF9zdHJpbmcoaGVhZCwgaGVhZC0+cmVhZF9idWYgKyBwb3MpOworfQorCitzdGF0aWMgdm9pZCB0b21veW9fc2V0X3NwYWNlKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCXRvbW95b19zZXRfc3RyaW5nKGhlYWQsICIgIik7Cit9CisKK3N0YXRpYyBib29sIHRvbW95b19zZXRfbGYoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJdG9tb3lvX3NldF9zdHJpbmcoaGVhZCwgIlxuIik7CisJcmV0dXJuICFoZWFkLT5yLndfcG9zOwogfQogCiAvKioKQEAgLTEwMyw4NzQgKzE4OCwyMzkgQEAKICAqCiAgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgogICogQHB0cjogIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fbmFtZV91bmlvbiIuCi0gKgotICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KICAqLwotc3RhdGljIGJvb2wgdG9tb3lvX3ByaW50X25hbWVfdW5pb24oc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsCi0JCQkJIGNvbnN0IHN0cnVjdCB0b21veW9fbmFtZV91bmlvbiAqcHRyKQorc3RhdGljIHZvaWQgdG9tb3lvX3ByaW50X25hbWVfdW5pb24oc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsCisJCQkJICAgIGNvbnN0IHN0cnVjdCB0b21veW9fbmFtZV91bmlvbiAqcHRyKQogewotCWludCBwb3MgPSBoZWFkLT5yZWFkX2F2YWlsOwotCWlmIChwb3MgJiYgaGVhZC0+cmVhZF9idWZbcG9zIC0gMV0gPT0gJyAnKQotCQloZWFkLT5yZWFkX2F2YWlsLS07Ci0JaWYgKHB0ci0+aXNfZ3JvdXApCi0JCXJldHVybiB0b21veW9faW9fcHJpbnRmKGhlYWQsICIgQCVzIiwKLQkJCQkJcHRyLT5ncm91cC0+Z3JvdXBfbmFtZS0+bmFtZSk7Ci0JcmV0dXJuIHRvbW95b19pb19wcmludGYoaGVhZCwgIiAlcyIsIHB0ci0+ZmlsZW5hbWUtPm5hbWUpOwotfQotCi0vKioKLSAqIHRvbW95b19pc19ieXRlX3JhbmdlIC0gQ2hlY2sgd2hldGhlciB0aGUgc3RyaW5nIGlzYSBcb29vIHN0eWxlIG9jdGFsIHZhbHVlLgotICoKLSAqIEBzdHI6IFBvaW50ZXIgdG8gdGhlIHN0cmluZy4KLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgQHN0ciBpcyBhIFxvb28gc3R5bGUgb2N0YWwgdmFsdWUsIGZhbHNlIG90aGVyd2lzZS4KLSAqCi0gKiBUT01PWU8gdXNlcyBcb29vIHN0eWxlIHJlcHJlc2VudGF0aW9uIGZvciAweDAxIC0gMHgyMCBhbmQgMHg3RiAtIDB4RkYuCi0gKiBUaGlzIGZ1bmN0aW9uIHZlcmlmaWVzIHRoYXQgXG9vbyBpcyBpbiB2YWxpZCByYW5nZS4KLSAqLwotc3RhdGljIGlubGluZSBib29sIHRvbW95b19pc19ieXRlX3JhbmdlKGNvbnN0IGNoYXIgKnN0cikKLXsKLQlyZXR1cm4gKnN0ciA+PSAnMCcgJiYgKnN0cisrIDw9ICczJyAmJgotCQkqc3RyID49ICcwJyAmJiAqc3RyKysgPD0gJzcnICYmCi0JCSpzdHIgPj0gJzAnICYmICpzdHIgPD0gJzcnOwotfQotCi0vKioKLSAqIHRvbW95b19pc19hbHBoYWJldF9jaGFyIC0gQ2hlY2sgd2hldGhlciB0aGUgY2hhcmFjdGVyIGlzIGFuIGFscGhhYmV0LgotICoKLSAqIEBjOiBUaGUgY2hhcmFjdGVyIHRvIGNoZWNrLgotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiBAYyBpcyBhbiBhbHBoYWJldCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGlubGluZSBib29sIHRvbW95b19pc19hbHBoYWJldF9jaGFyKGNvbnN0IGNoYXIgYykKLXsKLQlyZXR1cm4gKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSB8fCAoYyA+PSAnYScgJiYgYyA8PSAneicpOwotfQotCi0vKioKLSAqIHRvbW95b19tYWtlX2J5dGUgLSBNYWtlIGJ5dGUgdmFsdWUgZnJvbSB0aHJlZSBvY3RhbCBjaGFyYWN0ZXJzLgotICoKLSAqIEBjMTogVGhlIGZpcnN0IGNoYXJhY3Rlci4KLSAqIEBjMjogVGhlIHNlY29uZCBjaGFyYWN0ZXIuCi0gKiBAYzM6IFRoZSB0aGlyZCBjaGFyYWN0ZXIuCi0gKgotICogUmV0dXJucyBieXRlIHZhbHVlLgotICovCi1zdGF0aWMgaW5saW5lIHU4IHRvbW95b19tYWtlX2J5dGUoY29uc3QgdTggYzEsIGNvbnN0IHU4IGMyLCBjb25zdCB1OCBjMykKLXsKLQlyZXR1cm4gKChjMSAtICcwJykgPDwgNikgKyAoKGMyIC0gJzAnKSA8PCAzKSArIChjMyAtICcwJyk7Ci19Ci0KLS8qKgotICogdG9tb3lvX3N0cl9zdGFydHMgLSBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBzdHJpbmcgc3RhcnRzIHdpdGggdGhlIGdpdmVuIGtleXdvcmQuCi0gKgotICogQHNyYzogIFBvaW50ZXIgdG8gcG9pbnRlciB0byB0aGUgc3RyaW5nLgotICogQGZpbmQ6IFBvaW50ZXIgdG8gdGhlIGtleXdvcmQuCi0gKgotICogUmV0dXJucyB0cnVlIGlmIEBzcmMgc3RhcnRzIHdpdGggQGZpbmQsIGZhbHNlIG90aGVyd2lzZS4KLSAqCi0gKiBUaGUgQHNyYyBpcyB1cGRhdGVkIHRvIHBvaW50IHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIEBmaW5kCi0gKiBpZiBAc3JjIHN0YXJ0cyB3aXRoIEBmaW5kLgotICovCi1zdGF0aWMgYm9vbCB0b21veW9fc3RyX3N0YXJ0cyhjaGFyICoqc3JjLCBjb25zdCBjaGFyICpmaW5kKQotewotCWNvbnN0IGludCBsZW4gPSBzdHJsZW4oZmluZCk7Ci0JY2hhciAqdG1wID0gKnNyYzsKLQotCWlmIChzdHJuY21wKHRtcCwgZmluZCwgbGVuKSkKLQkJcmV0dXJuIGZhbHNlOwotCXRtcCArPSBsZW47Ci0JKnNyYyA9IHRtcDsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyoqCi0gKiB0b21veW9fbm9ybWFsaXplX2xpbmUgLSBGb3JtYXQgc3RyaW5nLgotICoKLSAqIEBidWZmZXI6IFRoZSBsaW5lIHRvIG5vcm1hbGl6ZS4KLSAqCi0gKiBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlcyBhcmUgcmVtb3ZlZC4KLSAqIE11bHRpcGxlIHdoaXRlc3BhY2VzIGFyZSBwYWNrZWQgaW50byBzaW5nbGUgc3BhY2UuCi0gKgotICogUmV0dXJucyBub3RoaW5nLgotICovCi1zdGF0aWMgdm9pZCB0b21veW9fbm9ybWFsaXplX2xpbmUodW5zaWduZWQgY2hhciAqYnVmZmVyKQotewotCXVuc2lnbmVkIGNoYXIgKnNwID0gYnVmZmVyOwotCXVuc2lnbmVkIGNoYXIgKmRwID0gYnVmZmVyOwotCWJvb2wgZmlyc3QgPSB0cnVlOwotCi0Jd2hpbGUgKHRvbW95b19pc19pbnZhbGlkKCpzcCkpCi0JCXNwKys7Ci0Jd2hpbGUgKCpzcCkgewotCQlpZiAoIWZpcnN0KQotCQkJKmRwKysgPSAnICc7Ci0JCWZpcnN0ID0gZmFsc2U7Ci0JCXdoaWxlICh0b21veW9faXNfdmFsaWQoKnNwKSkKLQkJCSpkcCsrID0gKnNwKys7Ci0JCXdoaWxlICh0b21veW9faXNfaW52YWxpZCgqc3ApKQotCQkJc3ArKzsKKwl0b21veW9fc2V0X3NwYWNlKGhlYWQpOworCWlmIChwdHItPmlzX2dyb3VwKSB7CisJCXRvbW95b19zZXRfc3RyaW5nKGhlYWQsICJAIik7CisJCXRvbW95b19zZXRfc3RyaW5nKGhlYWQsIHB0ci0+Z3JvdXAtPmdyb3VwX25hbWUtPm5hbWUpOworCX0gZWxzZSB7CisJCXRvbW95b19zZXRfc3RyaW5nKGhlYWQsIHB0ci0+ZmlsZW5hbWUtPm5hbWUpOwogCX0KLQkqZHAgPSAnXDAnOwogfQogCiAvKioKLSAqIHRvbW95b190b2tlbml6ZSAtIFRva2VuaXplIHN0cmluZy4KKyAqIHRvbW95b19wcmludF9udW1iZXJfdW5pb24gLSBQcmludCBhIHRvbW95b19udW1iZXJfdW5pb24uCiAgKgotICogQGJ1ZmZlcjogVGhlIGxpbmUgdG8gdG9rZW5pemUuCi0gKiBAdzogICAgICBQb2ludGVyIHRvICJjaGFyICoiLgotICogQHNpemU6ICAgU2l6ZW9mIEB3IC4KLSAqCi0gKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgorICogQGhlYWQ6ICAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqIEBwdHI6ICAgICAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX251bWJlcl91bmlvbiIuCiAgKi8KLWJvb2wgdG9tb3lvX3Rva2VuaXplKGNoYXIgKmJ1ZmZlciwgY2hhciAqd1tdLCBzaXplX3Qgc2l6ZSkKK3N0YXRpYyB2b2lkIHRvbW95b19wcmludF9udW1iZXJfdW5pb24oc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHRvbW95b19udW1iZXJfdW5pb24gKnB0cikKIHsKLQlpbnQgY291bnQgPSBzaXplIC8gc2l6ZW9mKGNoYXIgKik7Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCi0JCXdbaV0gPSAiIjsKLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQljaGFyICpjcCA9IHN0cmNocihidWZmZXIsICcgJyk7Ci0JCWlmIChjcCkKLQkJCSpjcCA9ICdcMCc7Ci0JCXdbaV0gPSBidWZmZXI7Ci0JCWlmICghY3ApCi0JCQlicmVhazsKLQkJYnVmZmVyID0gY3AgKyAxOwotCX0KLQlyZXR1cm4gaSA8IGNvdW50IHx8ICEqYnVmZmVyOwotfQotCi0vKioKLSAqIHRvbW95b19pc19jb3JyZWN0X3BhdGggLSBWYWxpZGF0ZSBhIHBhdGhuYW1lLgotICogQGZpbGVuYW1lOiAgICAgVGhlIHBhdGhuYW1lIHRvIGNoZWNrLgotICogQHN0YXJ0X3R5cGU6ICAgU2hvdWxkIHRoZSBwYXRobmFtZSBzdGFydCB3aXRoICcvJz8KLSAqICAgICAgICAgICAgICAgIDEgPSBtdXN0IC8gLTEgPSBtdXN0IG5vdCAvIDAgPSBkb24ndCBjYXJlCi0gKiBAcGF0dGVybl90eXBlOiBDYW4gdGhlIHBhdGhuYW1lIGNvbnRhaW4gYSB3aWxkY2FyZD8KLSAqICAgICAgICAgICAgICAgIDEgPSBtdXN0IC8gLTEgPSBtdXN0IG5vdCAvIDAgPSBkb24ndCBjYXJlCi0gKiBAZW5kX3R5cGU6ICAgICBTaG91bGQgdGhlIHBhdGhuYW1lIGVuZCB3aXRoICcvJz8KLSAqICAgICAgICAgICAgICAgIDEgPSBtdXN0IC8gLTEgPSBtdXN0IG5vdCAvIDAgPSBkb24ndCBjYXJlCi0gKgotICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gZmlsZW5hbWUgZm9sbG93cyB0aGUgbmFtaW5nIHJ1bGVzLgotICogUmV0dXJucyB0cnVlIGlmIEBmaWxlbmFtZSBmb2xsb3dzIHRoZSBuYW1pbmcgcnVsZXMsIGZhbHNlIG90aGVyd2lzZS4KLSAqLwotYm9vbCB0b21veW9faXNfY29ycmVjdF9wYXRoKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBzOCBzdGFydF90eXBlLAotCQkJICAgIGNvbnN0IHM4IHBhdHRlcm5fdHlwZSwgY29uc3QgczggZW5kX3R5cGUpCi17Ci0JY29uc3QgY2hhciAqY29uc3Qgc3RhcnQgPSBmaWxlbmFtZTsKLQlib29sIGluX3JlcGV0aXRpb24gPSBmYWxzZTsKLQlib29sIGNvbnRhaW5zX3BhdHRlcm4gPSBmYWxzZTsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0JdW5zaWduZWQgY2hhciBkOwotCXVuc2lnbmVkIGNoYXIgZTsKLQotCWlmICghZmlsZW5hbWUpCi0JCWdvdG8gb3V0OwotCWMgPSAqZmlsZW5hbWU7Ci0JaWYgKHN0YXJ0X3R5cGUgPT0gMSkgeyAvKiBNdXN0IHN0YXJ0IHdpdGggJy8nICovCi0JCWlmIChjICE9ICcvJykKLQkJCWdvdG8gb3V0OwotCX0gZWxzZSBpZiAoc3RhcnRfdHlwZSA9PSAtMSkgeyAvKiBNdXN0IG5vdCBzdGFydCB3aXRoICcvJyAqLwotCQlpZiAoYyA9PSAnLycpCi0JCQlnb3RvIG91dDsKLQl9Ci0JaWYgKGMpCi0JCWMgPSAqKGZpbGVuYW1lICsgc3RybGVuKGZpbGVuYW1lKSAtIDEpOwotCWlmIChlbmRfdHlwZSA9PSAxKSB7IC8qIE11c3QgZW5kIHdpdGggJy8nICovCi0JCWlmIChjICE9ICcvJykKLQkJCWdvdG8gb3V0OwotCX0gZWxzZSBpZiAoZW5kX3R5cGUgPT0gLTEpIHsgLyogTXVzdCBub3QgZW5kIHdpdGggJy8nICovCi0JCWlmIChjID09ICcvJykKLQkJCWdvdG8gb3V0OwotCX0KLQl3aGlsZSAoMSkgewotCQljID0gKmZpbGVuYW1lKys7Ci0JCWlmICghYykKLQkJCWJyZWFrOwotCQlpZiAoYyA9PSAnXFwnKSB7Ci0JCQljID0gKmZpbGVuYW1lKys7Ci0JCQlzd2l0Y2ggKGMpIHsKLQkJCWNhc2UgJ1xcJzogIC8qICJcXCIgKi8KLQkJCQljb250aW51ZTsKLQkJCWNhc2UgJyQnOiAgIC8qICJcJCIgKi8KLQkJCWNhc2UgJysnOiAgIC8qICJcKyIgKi8KLQkJCWNhc2UgJz8nOiAgIC8qICJcPyIgKi8KLQkJCWNhc2UgJyonOiAgIC8qICJcKiIgKi8KLQkJCWNhc2UgJ0AnOiAgIC8qICJcQCIgKi8KLQkJCWNhc2UgJ3gnOiAgIC8qICJceCIgKi8KLQkJCWNhc2UgJ1gnOiAgIC8qICJcWCIgKi8KLQkJCWNhc2UgJ2EnOiAgIC8qICJcYSIgKi8KLQkJCWNhc2UgJ0EnOiAgIC8qICJcQSIgKi8KLQkJCWNhc2UgJy0nOiAgIC8qICJcLSIgKi8KLQkJCQlpZiAocGF0dGVybl90eXBlID09IC0xKQotCQkJCQlicmVhazsgLyogTXVzdCBub3QgY29udGFpbiBwYXR0ZXJuICovCi0JCQkJY29udGFpbnNfcGF0dGVybiA9IHRydWU7Ci0JCQkJY29udGludWU7Ci0JCQljYXNlICd7JzogICAvKiAiL1x7IiAqLwotCQkJCWlmIChmaWxlbmFtZSAtIDMgPCBzdGFydCB8fAotCQkJCSAgICAqKGZpbGVuYW1lIC0gMykgIT0gJy8nKQotCQkJCQlicmVhazsKLQkJCQlpZiAocGF0dGVybl90eXBlID09IC0xKQotCQkJCQlicmVhazsgLyogTXVzdCBub3QgY29udGFpbiBwYXR0ZXJuICovCi0JCQkJY29udGFpbnNfcGF0dGVybiA9IHRydWU7Ci0JCQkJaW5fcmVwZXRpdGlvbiA9IHRydWU7Ci0JCQkJY29udGludWU7Ci0JCQljYXNlICd9JzogICAvKiAiXH0vIiAqLwotCQkJCWlmICgqZmlsZW5hbWUgIT0gJy8nKQotCQkJCQlicmVhazsKLQkJCQlpZiAoIWluX3JlcGV0aXRpb24pCi0JCQkJCWJyZWFrOwotCQkJCWluX3JlcGV0aXRpb24gPSBmYWxzZTsKLQkJCQljb250aW51ZTsKLQkJCWNhc2UgJzAnOiAgIC8qICJcb29vIiAqLwotCQkJY2FzZSAnMSc6Ci0JCQljYXNlICcyJzoKLQkJCWNhc2UgJzMnOgotCQkJCWQgPSAqZmlsZW5hbWUrKzsKLQkJCQlpZiAoZCA8ICcwJyB8fCBkID4gJzcnKQotCQkJCQlicmVhazsKLQkJCQllID0gKmZpbGVuYW1lKys7Ci0JCQkJaWYgKGUgPCAnMCcgfHwgZSA+ICc3JykKLQkJCQkJYnJlYWs7Ci0JCQkJYyA9IHRvbW95b19tYWtlX2J5dGUoYywgZCwgZSk7Ci0JCQkJaWYgKHRvbW95b19pc19pbnZhbGlkKGMpKQotCQkJCQljb250aW51ZTsgLyogcGF0dGVybiBpcyBub3QgXDAwMCAqLwotCQkJfQotCQkJZ290byBvdXQ7Ci0JCX0gZWxzZSBpZiAoaW5fcmVwZXRpdGlvbiAmJiBjID09ICcvJykgewotCQkJZ290byBvdXQ7Ci0JCX0gZWxzZSBpZiAodG9tb3lvX2lzX2ludmFsaWQoYykpIHsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCWlmIChwYXR0ZXJuX3R5cGUgPT0gMSkgeyAvKiBNdXN0IGNvbnRhaW4gcGF0dGVybiAqLwotCQlpZiAoIWNvbnRhaW5zX3BhdHRlcm4pCi0JCQlnb3RvIG91dDsKLQl9Ci0JaWYgKGluX3JlcGV0aXRpb24pCi0JCWdvdG8gb3V0OwotCXJldHVybiB0cnVlOwotIG91dDoKLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLS8qKgotICogdG9tb3lvX2lzX2NvcnJlY3RfZG9tYWluIC0gQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gZG9tYWlubmFtZSBmb2xsb3dzIHRoZSBuYW1pbmcgcnVsZXMuCi0gKiBAZG9tYWlubmFtZTogICBUaGUgZG9tYWlubmFtZSB0byBjaGVjay4KLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgQGRvbWFpbm5hbWUgZm9sbG93cyB0aGUgbmFtaW5nIHJ1bGVzLCBmYWxzZSBvdGhlcndpc2UuCi0gKi8KLWJvb2wgdG9tb3lvX2lzX2NvcnJlY3RfZG9tYWluKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRvbWFpbm5hbWUpCi17Ci0JdW5zaWduZWQgY2hhciBjOwotCXVuc2lnbmVkIGNoYXIgZDsKLQl1bnNpZ25lZCBjaGFyIGU7Ci0KLQlpZiAoIWRvbWFpbm5hbWUgfHwgc3RybmNtcChkb21haW5uYW1lLCBUT01PWU9fUk9PVF9OQU1FLAotCQkJCSAgIFRPTU9ZT19ST09UX05BTUVfTEVOKSkKLQkJZ290byBvdXQ7Ci0JZG9tYWlubmFtZSArPSBUT01PWU9fUk9PVF9OQU1FX0xFTjsKLQlpZiAoISpkb21haW5uYW1lKQotCQlyZXR1cm4gdHJ1ZTsKLQlkbyB7Ci0JCWlmICgqZG9tYWlubmFtZSsrICE9ICcgJykKLQkJCWdvdG8gb3V0OwotCQlpZiAoKmRvbWFpbm5hbWUrKyAhPSAnLycpCi0JCQlnb3RvIG91dDsKLQkJd2hpbGUgKChjID0gKmRvbWFpbm5hbWUpICE9ICdcMCcgJiYgYyAhPSAnICcpIHsKLQkJCWRvbWFpbm5hbWUrKzsKLQkJCWlmIChjID09ICdcXCcpIHsKLQkJCQljID0gKmRvbWFpbm5hbWUrKzsKLQkJCQlzd2l0Y2ggKChjKSkgewotCQkJCWNhc2UgJ1xcJzogIC8qICJcXCIgKi8KLQkJCQkJY29udGludWU7Ci0JCQkJY2FzZSAnMCc6ICAgLyogIlxvb28iICovCi0JCQkJY2FzZSAnMSc6Ci0JCQkJY2FzZSAnMic6Ci0JCQkJY2FzZSAnMyc6Ci0JCQkJCWQgPSAqZG9tYWlubmFtZSsrOwotCQkJCQlpZiAoZCA8ICcwJyB8fCBkID4gJzcnKQotCQkJCQkJYnJlYWs7Ci0JCQkJCWUgPSAqZG9tYWlubmFtZSsrOwotCQkJCQlpZiAoZSA8ICcwJyB8fCBlID4gJzcnKQotCQkJCQkJYnJlYWs7Ci0JCQkJCWMgPSB0b21veW9fbWFrZV9ieXRlKGMsIGQsIGUpOwotCQkJCQlpZiAodG9tb3lvX2lzX2ludmFsaWQoYykpCi0JCQkJCQkvKiBwYXR0ZXJuIGlzIG5vdCBcMDAwICovCi0JCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQkJZ290byBvdXQ7Ci0JCQl9IGVsc2UgaWYgKHRvbW95b19pc19pbnZhbGlkKGMpKSB7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCX0KLQl9IHdoaWxlICgqZG9tYWlubmFtZSk7Ci0JcmV0dXJuIHRydWU7Ci0gb3V0OgotCXJldHVybiBmYWxzZTsKLX0KLQotLyoqCi0gKiB0b21veW9faXNfZG9tYWluX2RlZiAtIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIHRva2VuIGNhbiBiZSBhIGRvbWFpbm5hbWUuCi0gKgotICogQGJ1ZmZlcjogVGhlIHRva2VuIHRvIGNoZWNrLgotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiBAYnVmZmVyIHBvc3NpYmx5IGJlIGEgZG9tYWlubmFtZSwgZmFsc2Ugb3RoZXJ3aXNlLgotICovCi1ib29sIHRvbW95b19pc19kb21haW5fZGVmKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcikKLXsKLQlyZXR1cm4gIXN0cm5jbXAoYnVmZmVyLCBUT01PWU9fUk9PVF9OQU1FLCBUT01PWU9fUk9PVF9OQU1FX0xFTik7Ci19Ci0KLS8qKgotICogdG9tb3lvX2ZpbmRfZG9tYWluIC0gRmluZCBhIGRvbWFpbiBieSB0aGUgZ2l2ZW4gbmFtZS4KLSAqCi0gKiBAZG9tYWlubmFtZTogVGhlIGRvbWFpbm5hbWUgdG8gZmluZC4KLSAqCi0gKiBSZXR1cm5zIHBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iIGlmIGZvdW5kLCBOVUxMIG90aGVyd2lzZS4KLSAqCi0gKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgotICovCi1zdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICp0b21veW9fZmluZF9kb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSkKLXsKLQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW47Ci0Jc3RydWN0IHRvbW95b19wYXRoX2luZm8gbmFtZTsKLQotCW5hbWUubmFtZSA9IGRvbWFpbm5hbWU7Ci0JdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZuYW1lKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkb21haW4sICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKLQkJaWYgKCFkb21haW4tPmlzX2RlbGV0ZWQgJiYKLQkJICAgICF0b21veW9fcGF0aGNtcCgmbmFtZSwgZG9tYWluLT5kb21haW5uYW1lKSkKLQkJCXJldHVybiBkb21haW47Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi0vKioKLSAqIHRvbW95b19jb25zdF9wYXJ0X2xlbmd0aCAtIEV2YWx1YXRlIHRoZSBpbml0aWFsIGxlbmd0aCB3aXRob3V0IGEgcGF0dGVybiBpbiBhIHRva2VuLgotICoKLSAqIEBmaWxlbmFtZTogVGhlIHN0cmluZyB0byBldmFsdWF0ZS4KLSAqCi0gKiBSZXR1cm5zIHRoZSBpbml0aWFsIGxlbmd0aCB3aXRob3V0IGEgcGF0dGVybiBpbiBAZmlsZW5hbWUuCi0gKi8KLXN0YXRpYyBpbnQgdG9tb3lvX2NvbnN0X3BhcnRfbGVuZ3RoKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQotewotCWNoYXIgYzsKLQlpbnQgbGVuID0gMDsKLQotCWlmICghZmlsZW5hbWUpCi0JCXJldHVybiAwOwotCXdoaWxlICgoYyA9ICpmaWxlbmFtZSsrKSAhPSAnXDAnKSB7Ci0JCWlmIChjICE9ICdcXCcpIHsKLQkJCWxlbisrOwotCQkJY29udGludWU7Ci0JCX0KLQkJYyA9ICpmaWxlbmFtZSsrOwotCQlzd2l0Y2ggKGMpIHsKLQkJY2FzZSAnXFwnOiAgLyogIlxcIiAqLwotCQkJbGVuICs9IDI7Ci0JCQljb250aW51ZTsKLQkJY2FzZSAnMCc6ICAgLyogIlxvb28iICovCi0JCWNhc2UgJzEnOgotCQljYXNlICcyJzoKLQkJY2FzZSAnMyc6Ci0JCQljID0gKmZpbGVuYW1lKys7Ci0JCQlpZiAoYyA8ICcwJyB8fCBjID4gJzcnKQorCXRvbW95b19zZXRfc3BhY2UoaGVhZCk7CisJaWYgKHB0ci0+aXNfZ3JvdXApIHsKKwkJdG9tb3lvX3NldF9zdHJpbmcoaGVhZCwgIkAiKTsKKwkJdG9tb3lvX3NldF9zdHJpbmcoaGVhZCwgcHRyLT5ncm91cC0+Z3JvdXBfbmFtZS0+bmFtZSk7CisJfSBlbHNlIHsKKwkJaW50IGk7CisJCXVuc2lnbmVkIGxvbmcgbWluID0gcHRyLT52YWx1ZXNbMF07CisJCWNvbnN0IHVuc2lnbmVkIGxvbmcgbWF4ID0gcHRyLT52YWx1ZXNbMV07CisJCXU4IG1pbl90eXBlID0gcHRyLT5taW5fdHlwZTsKKwkJY29uc3QgdTggbWF4X3R5cGUgPSBwdHItPm1heF90eXBlOworCQljaGFyIGJ1ZmZlclsxMjhdOworCQlidWZmZXJbMF0gPSAnXDAnOworCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCQlzd2l0Y2ggKG1pbl90eXBlKSB7CisJCQljYXNlIFRPTU9ZT19WQUxVRV9UWVBFX0hFWEFERUNJTUFMOgorCQkJCXRvbW95b19hZGRwcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwKKwkJCQkJCSAiMHglbFgiLCBtaW4pOwogCQkJCWJyZWFrOwotCQkJYyA9ICpmaWxlbmFtZSsrOwotCQkJaWYgKGMgPCAnMCcgfHwgYyA+ICc3JykKKwkJCWNhc2UgVE9NT1lPX1ZBTFVFX1RZUEVfT0NUQUw6CisJCQkJdG9tb3lvX2FkZHByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLAorCQkJCQkJICIwJWxvIiwgbWluKTsKIAkJCQlicmVhazsKLQkJCWxlbiArPSA0OwotCQkJY29udGludWU7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCXJldHVybiBsZW47Ci19Ci0KLS8qKgotICogdG9tb3lvX2ZpbGxfcGF0aF9pbmZvIC0gRmlsbCBpbiAic3RydWN0IHRvbW95b19wYXRoX2luZm8iIG1lbWJlcnMuCi0gKgotICogQHB0cjogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19wYXRoX2luZm8iIHRvIGZpbGwgaW4uCi0gKgotICogVGhlIGNhbGxlciBzZXRzICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyItPm5hbWUuCi0gKi8KLXZvaWQgdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwdHIpCi17Ci0JY29uc3QgY2hhciAqbmFtZSA9IHB0ci0+bmFtZTsKLQljb25zdCBpbnQgbGVuID0gc3RybGVuKG5hbWUpOwotCi0JcHRyLT5jb25zdF9sZW4gPSB0b21veW9fY29uc3RfcGFydF9sZW5ndGgobmFtZSk7Ci0JcHRyLT5pc19kaXIgPSBsZW4gJiYgKG5hbWVbbGVuIC0gMV0gPT0gJy8nKTsKLQlwdHItPmlzX3BhdHRlcm5lZCA9IChwdHItPmNvbnN0X2xlbiA8IGxlbik7Ci0JcHRyLT5oYXNoID0gZnVsbF9uYW1lX2hhc2gobmFtZSwgbGVuKTsKLX0KLQotLyoqCi0gKiB0b21veW9fZmlsZV9tYXRjaGVzX3BhdHRlcm4yIC0gUGF0dGVybiBtYXRjaGluZyB3aXRob3V0ICcvJyBjaGFyYWN0ZXIKLSAqIGFuZCAiXC0iIHBhdHRlcm4uCi0gKgotICogQGZpbGVuYW1lOiAgICAgVGhlIHN0YXJ0IG9mIHN0cmluZyB0byBjaGVjay4KLSAqIEBmaWxlbmFtZV9lbmQ6IFRoZSBlbmQgb2Ygc3RyaW5nIHRvIGNoZWNrLgotICogQHBhdHRlcm46ICAgICAgVGhlIHN0YXJ0IG9mIHBhdHRlcm4gdG8gY29tcGFyZS4KLSAqIEBwYXR0ZXJuX2VuZDogIFRoZSBlbmQgb2YgcGF0dGVybiB0byBjb21wYXJlLgotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiBAZmlsZW5hbWUgbWF0Y2hlcyBAcGF0dGVybiwgZmFsc2Ugb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgYm9vbCB0b21veW9fZmlsZV9tYXRjaGVzX3BhdHRlcm4yKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotCQkJCQkgY29uc3QgY2hhciAqZmlsZW5hbWVfZW5kLAotCQkJCQkgY29uc3QgY2hhciAqcGF0dGVybiwKLQkJCQkJIGNvbnN0IGNoYXIgKnBhdHRlcm5fZW5kKQotewotCXdoaWxlIChmaWxlbmFtZSA8IGZpbGVuYW1lX2VuZCAmJiBwYXR0ZXJuIDwgcGF0dGVybl9lbmQpIHsKLQkJY2hhciBjOwotCQlpZiAoKnBhdHRlcm4gIT0gJ1xcJykgewotCQkJaWYgKCpmaWxlbmFtZSsrICE9ICpwYXR0ZXJuKyspCi0JCQkJcmV0dXJuIGZhbHNlOwotCQkJY29udGludWU7Ci0JCX0KLQkJYyA9ICpmaWxlbmFtZTsKLQkJcGF0dGVybisrOwotCQlzd2l0Y2ggKCpwYXR0ZXJuKSB7Ci0JCQlpbnQgaTsKLQkJCWludCBqOwotCQljYXNlICc/JzoKLQkJCWlmIChjID09ICcvJykgewotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0gZWxzZSBpZiAoYyA9PSAnXFwnKSB7Ci0JCQkJaWYgKGZpbGVuYW1lWzFdID09ICdcXCcpCi0JCQkJCWZpbGVuYW1lKys7Ci0JCQkJZWxzZSBpZiAodG9tb3lvX2lzX2J5dGVfcmFuZ2UoZmlsZW5hbWUgKyAxKSkKLQkJCQkJZmlsZW5hbWUgKz0gMzsKLQkJCQllbHNlCi0JCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlICdcXCc6Ci0JCQlpZiAoYyAhPSAnXFwnKQotCQkJCXJldHVybiBmYWxzZTsKLQkJCWlmICgqKytmaWxlbmFtZSAhPSAnXFwnKQotCQkJCXJldHVybiBmYWxzZTsKLQkJCWJyZWFrOwotCQljYXNlICcrJzoKLQkJCWlmICghaXNkaWdpdChjKSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQlicmVhazsKLQkJY2FzZSAneCc6Ci0JCQlpZiAoIWlzeGRpZ2l0KGMpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJCWJyZWFrOwotCQljYXNlICdhJzoKLQkJCWlmICghdG9tb3lvX2lzX2FscGhhYmV0X2NoYXIoYykpCi0JCQkJcmV0dXJuIGZhbHNlOwotCQkJYnJlYWs7Ci0JCWNhc2UgJzAnOgotCQljYXNlICcxJzoKLQkJY2FzZSAnMic6Ci0JCWNhc2UgJzMnOgotCQkJaWYgKGMgPT0gJ1xcJyAmJiB0b21veW9faXNfYnl0ZV9yYW5nZShmaWxlbmFtZSArIDEpCi0JCQkgICAgJiYgc3RybmNtcChmaWxlbmFtZSArIDEsIHBhdHRlcm4sIDMpID09IDApIHsKLQkJCQlmaWxlbmFtZSArPSAzOwotCQkJCXBhdHRlcm4gKz0gMjsKKwkJCWRlZmF1bHQ6CisJCQkJdG9tb3lvX2FkZHByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLAorCQkJCQkJICIlbHUiLCBtaW4pOwogCQkJCWJyZWFrOwogCQkJfQotCQkJcmV0dXJuIGZhbHNlOyAvKiBOb3QgbWF0Y2hlZC4gKi8KLQkJY2FzZSAnKic6Ci0JCWNhc2UgJ0AnOgotCQkJZm9yIChpID0gMDsgaSA8PSBmaWxlbmFtZV9lbmQgLSBmaWxlbmFtZTsgaSsrKSB7Ci0JCQkJaWYgKHRvbW95b19maWxlX21hdGNoZXNfcGF0dGVybjIoCi0JCQkJCQkgICAgZmlsZW5hbWUgKyBpLCBmaWxlbmFtZV9lbmQsCi0JCQkJCQkgICAgcGF0dGVybiArIDEsIHBhdHRlcm5fZW5kKSkKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJYyA9IGZpbGVuYW1lW2ldOwotCQkJCWlmIChjID09ICcuJyAmJiAqcGF0dGVybiA9PSAnQCcpCi0JCQkJCWJyZWFrOwotCQkJCWlmIChjICE9ICdcXCcpCi0JCQkJCWNvbnRpbnVlOwotCQkJCWlmIChmaWxlbmFtZVtpICsgMV0gPT0gJ1xcJykKLQkJCQkJaSsrOwotCQkJCWVsc2UgaWYgKHRvbW95b19pc19ieXRlX3JhbmdlKGZpbGVuYW1lICsgaSArIDEpKQotCQkJCQlpICs9IDM7Ci0JCQkJZWxzZQotCQkJCQlicmVhazsgLyogQmFkIHBhdHRlcm4uICovCi0JCQl9Ci0JCQlyZXR1cm4gZmFsc2U7IC8qIE5vdCBtYXRjaGVkLiAqLwotCQlkZWZhdWx0OgotCQkJaiA9IDA7Ci0JCQljID0gKnBhdHRlcm47Ci0JCQlpZiAoYyA9PSAnJCcpIHsKLQkJCQl3aGlsZSAoaXNkaWdpdChmaWxlbmFtZVtqXSkpCi0JCQkJCWorKzsKLQkJCX0gZWxzZSBpZiAoYyA9PSAnWCcpIHsKLQkJCQl3aGlsZSAoaXN4ZGlnaXQoZmlsZW5hbWVbal0pKQotCQkJCQlqKys7Ci0JCQl9IGVsc2UgaWYgKGMgPT0gJ0EnKSB7Ci0JCQkJd2hpbGUgKHRvbW95b19pc19hbHBoYWJldF9jaGFyKGZpbGVuYW1lW2pdKSkKLQkJCQkJaisrOwotCQkJfQotCQkJZm9yIChpID0gMTsgaSA8PSBqOyBpKyspIHsKLQkJCQlpZiAodG9tb3lvX2ZpbGVfbWF0Y2hlc19wYXR0ZXJuMigKLQkJCQkJCSAgICBmaWxlbmFtZSArIGksIGZpbGVuYW1lX2VuZCwKLQkJCQkJCSAgICBwYXR0ZXJuICsgMSwgcGF0dGVybl9lbmQpKQotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJCXJldHVybiBmYWxzZTsgLyogTm90IG1hdGNoZWQgb3IgYmFkIHBhdHRlcm4uICovCisJCQlpZiAobWluID09IG1heCAmJiBtaW5fdHlwZSA9PSBtYXhfdHlwZSkKKwkJCQlicmVhazsKKwkJCXRvbW95b19hZGRwcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIi0iKTsKKwkJCW1pbl90eXBlID0gbWF4X3R5cGU7CisJCQltaW4gPSBtYXg7CiAJCX0KLQkJZmlsZW5hbWUrKzsKLQkJcGF0dGVybisrOworCQl0b21veW9faW9fcHJpbnRmKGhlYWQsICIlcyIsIGJ1ZmZlcik7CiAJfQotCXdoaWxlICgqcGF0dGVybiA9PSAnXFwnICYmCi0JICAgICAgICgqKHBhdHRlcm4gKyAxKSA9PSAnKicgfHwgKihwYXR0ZXJuICsgMSkgPT0gJ0AnKSkKLQkJcGF0dGVybiArPSAyOwotCXJldHVybiBmaWxlbmFtZSA9PSBmaWxlbmFtZV9lbmQgJiYgcGF0dGVybiA9PSBwYXR0ZXJuX2VuZDsKIH0KIAogLyoqCi0gKiB0b21veW9fZmlsZV9tYXRjaGVzX3BhdHRlcm4gLSBQYXR0ZXJuIG1hdGNoaW5nIHdpdGhvdXQgd2l0aG91dCAnLycgY2hhcmFjdGVyLgotICoKLSAqIEBmaWxlbmFtZTogICAgIFRoZSBzdGFydCBvZiBzdHJpbmcgdG8gY2hlY2suCi0gKiBAZmlsZW5hbWVfZW5kOiBUaGUgZW5kIG9mIHN0cmluZyB0byBjaGVjay4KLSAqIEBwYXR0ZXJuOiAgICAgIFRoZSBzdGFydCBvZiBwYXR0ZXJuIHRvIGNvbXBhcmUuCi0gKiBAcGF0dGVybl9lbmQ6ICBUaGUgZW5kIG9mIHBhdHRlcm4gdG8gY29tcGFyZS4KLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgQGZpbGVuYW1lIG1hdGNoZXMgQHBhdHRlcm4sIGZhbHNlIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGJvb2wgdG9tb3lvX2ZpbGVfbWF0Y2hlc19wYXR0ZXJuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotCQkJCQkgICBjb25zdCBjaGFyICpmaWxlbmFtZV9lbmQsCi0JCQkJCSAgIGNvbnN0IGNoYXIgKnBhdHRlcm4sCi0JCQkJCSAgIGNvbnN0IGNoYXIgKnBhdHRlcm5fZW5kKQotewotCWNvbnN0IGNoYXIgKnBhdHRlcm5fc3RhcnQgPSBwYXR0ZXJuOwotCWJvb2wgZmlyc3QgPSB0cnVlOwotCWJvb2wgcmVzdWx0OwotCi0Jd2hpbGUgKHBhdHRlcm4gPCBwYXR0ZXJuX2VuZCAtIDEpIHsKLQkJLyogU3BsaXQgYXQgIlwtIiBwYXR0ZXJuLiAqLwotCQlpZiAoKnBhdHRlcm4rKyAhPSAnXFwnIHx8ICpwYXR0ZXJuKysgIT0gJy0nKQotCQkJY29udGludWU7Ci0JCXJlc3VsdCA9IHRvbW95b19maWxlX21hdGNoZXNfcGF0dGVybjIoZmlsZW5hbWUsCi0JCQkJCQkgICAgICBmaWxlbmFtZV9lbmQsCi0JCQkJCQkgICAgICBwYXR0ZXJuX3N0YXJ0LAotCQkJCQkJICAgICAgcGF0dGVybiAtIDIpOwotCQlpZiAoZmlyc3QpCi0JCQlyZXN1bHQgPSAhcmVzdWx0OwotCQlpZiAocmVzdWx0KQotCQkJcmV0dXJuIGZhbHNlOwotCQlmaXJzdCA9IGZhbHNlOwotCQlwYXR0ZXJuX3N0YXJ0ID0gcGF0dGVybjsKLQl9Ci0JcmVzdWx0ID0gdG9tb3lvX2ZpbGVfbWF0Y2hlc19wYXR0ZXJuMihmaWxlbmFtZSwgZmlsZW5hbWVfZW5kLAotCQkJCQkgICAgICBwYXR0ZXJuX3N0YXJ0LCBwYXR0ZXJuX2VuZCk7Ci0JcmV0dXJuIGZpcnN0ID8gcmVzdWx0IDogIXJlc3VsdDsKLX0KLQotLyoqCi0gKiB0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4yIC0gRG8gcGF0aG5hbWUgcGF0dGVybiBtYXRjaGluZy4KLSAqCi0gKiBAZjogVGhlIHN0YXJ0IG9mIHN0cmluZyB0byBjaGVjay4KLSAqIEBwOiBUaGUgc3RhcnQgb2YgcGF0dGVybiB0byBjb21wYXJlLgotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiBAZiBtYXRjaGVzIEBwLCBmYWxzZSBvdGhlcndpc2UuCi0gKi8KLXN0YXRpYyBib29sIHRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybjIoY29uc3QgY2hhciAqZiwgY29uc3QgY2hhciAqcCkKLXsKLQljb25zdCBjaGFyICpmX2RlbGltaXRlcjsKLQljb25zdCBjaGFyICpwX2RlbGltaXRlcjsKLQotCXdoaWxlICgqZiAmJiAqcCkgewotCQlmX2RlbGltaXRlciA9IHN0cmNocihmLCAnLycpOwotCQlpZiAoIWZfZGVsaW1pdGVyKQotCQkJZl9kZWxpbWl0ZXIgPSBmICsgc3RybGVuKGYpOwotCQlwX2RlbGltaXRlciA9IHN0cmNocihwLCAnLycpOwotCQlpZiAoIXBfZGVsaW1pdGVyKQotCQkJcF9kZWxpbWl0ZXIgPSBwICsgc3RybGVuKHApOwotCQlpZiAoKnAgPT0gJ1xcJyAmJiAqKHAgKyAxKSA9PSAneycpCi0JCQlnb3RvIHJlY3Vyc2l2ZTsKLQkJaWYgKCF0b21veW9fZmlsZV9tYXRjaGVzX3BhdHRlcm4oZiwgZl9kZWxpbWl0ZXIsIHAsCi0JCQkJCQkgcF9kZWxpbWl0ZXIpKQotCQkJcmV0dXJuIGZhbHNlOwotCQlmID0gZl9kZWxpbWl0ZXI7Ci0JCWlmICgqZikKLQkJCWYrKzsKLQkJcCA9IHBfZGVsaW1pdGVyOwotCQlpZiAoKnApCi0JCQlwKys7Ci0JfQotCS8qIElnbm9yZSB0cmFpbGluZyAiXCoiIGFuZCAiXEAiIGluIEBwYXR0ZXJuLiAqLwotCXdoaWxlICgqcCA9PSAnXFwnICYmCi0JICAgICAgICgqKHAgKyAxKSA9PSAnKicgfHwgKihwICsgMSkgPT0gJ0AnKSkKLQkJcCArPSAyOwotCXJldHVybiAhKmYgJiYgISpwOwotIHJlY3Vyc2l2ZToKLQkvKgotCSAqIFRoZSAiXHsiIHBhdHRlcm4gaXMgcGVybWl0dGVkIG9ubHkgYWZ0ZXIgJy8nIGNoYXJhY3Rlci4KLQkgKiBUaGlzIGd1YXJhbnRlZXMgdGhhdCBiZWxvdyAiKihwIC0gMSkiIGlzIHNhZmUuCi0JICogQWxzbywgdGhlICJcfSIgcGF0dGVybiBpcyBwZXJtaXR0ZWQgb25seSBiZWZvcmUgJy8nIGNoYXJhY3RlcgotCSAqIHNvIHRoYXQgIlx7IiArICJcfSIgcGFpciB3aWxsIG5vdCBicmVhayB0aGUgIlwtIiBvcGVyYXRvci4KLQkgKi8KLQlpZiAoKihwIC0gMSkgIT0gJy8nIHx8IHBfZGVsaW1pdGVyIDw9IHAgKyAzIHx8ICpwX2RlbGltaXRlciAhPSAnLycgfHwKLQkgICAgKihwX2RlbGltaXRlciAtIDEpICE9ICd9JyB8fCAqKHBfZGVsaW1pdGVyIC0gMikgIT0gJ1xcJykKLQkJcmV0dXJuIGZhbHNlOyAvKiBCYWQgcGF0dGVybi4gKi8KLQlkbyB7Ci0JCS8qIENvbXBhcmUgY3VycmVudCBjb21wb25lbnQgd2l0aCBwYXR0ZXJuLiAqLwotCQlpZiAoIXRvbW95b19maWxlX21hdGNoZXNfcGF0dGVybihmLCBmX2RlbGltaXRlciwgcCArIDIsCi0JCQkJCQkgcF9kZWxpbWl0ZXIgLSAyKSkKLQkJCWJyZWFrOwotCQkvKiBQcm9jZWVkIHRvIG5leHQgY29tcG9uZW50LiAqLwotCQlmID0gZl9kZWxpbWl0ZXI7Ci0JCWlmICghKmYpCi0JCQlicmVhazsKLQkJZisrOwotCQkvKiBDb250aW51ZSBjb21wYXJpc29uLiAqLwotCQlpZiAodG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuMihmLCBwX2RlbGltaXRlciArIDEpKQotCQkJcmV0dXJuIHRydWU7Ci0JCWZfZGVsaW1pdGVyID0gc3RyY2hyKGYsICcvJyk7Ci0JfSB3aGlsZSAoZl9kZWxpbWl0ZXIpOwotCXJldHVybiBmYWxzZTsgLyogTm90IG1hdGNoZWQuICovCi19Ci0KLS8qKgotICogdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuIC0gQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gZmlsZW5hbWUgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybi4KLSAqCi0gKiBAZmlsZW5hbWU6IFRoZSBmaWxlbmFtZSB0byBjaGVjay4KLSAqIEBwYXR0ZXJuOiAgVGhlIHBhdHRlcm4gdG8gY29tcGFyZS4KLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgbWF0Y2hlcywgZmFsc2Ugb3RoZXJ3aXNlLgotICoKLSAqIFRoZSBmb2xsb3dpbmcgcGF0dGVybnMgYXJlIGF2YWlsYWJsZS4KLSAqICAgXFwgICAgIFwgaXRzZWxmLgotICogICBcb29vICAgT2N0YWwgcmVwcmVzZW50YXRpb24gb2YgYSBieXRlLgotICogICBcKiAgICAgWmVybyBvciBtb3JlIHJlcGV0aXRpb25zIG9mIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiAnLycuCi0gKiAgIFxAICAgICBaZXJvIG9yIG1vcmUgcmVwZXRpdGlvbnMgb2YgY2hhcmFjdGVycyBvdGhlciB0aGFuICcvJyBvciAnLicuCi0gKiAgIFw/ICAgICAxIGJ5dGUgY2hhcmFjdGVyIG90aGVyIHRoYW4gJy8nLgotICogICBcJCAgICAgT25lIG9yIG1vcmUgcmVwZXRpdGlvbnMgb2YgZGVjaW1hbCBkaWdpdHMuCi0gKiAgIFwrICAgICAxIGRlY2ltYWwgZGlnaXQuCi0gKiAgIFxYICAgICBPbmUgb3IgbW9yZSByZXBldGl0aW9ucyBvZiBoZXhhZGVjaW1hbCBkaWdpdHMuCi0gKiAgIFx4ICAgICAxIGhleGFkZWNpbWFsIGRpZ2l0LgotICogICBcQSAgICAgT25lIG9yIG1vcmUgcmVwZXRpdGlvbnMgb2YgYWxwaGFiZXQgY2hhcmFjdGVycy4KLSAqICAgXGEgICAgIDEgYWxwaGFiZXQgY2hhcmFjdGVyLgotICoKLSAqICAgXC0gICAgIFN1YnRyYWN0aW9uIG9wZXJhdG9yLgotICoKLSAqICAgL1x7ZGlyXH0vICAgJy8nICsgJ09uZSBvciBtb3JlIHJlcGV0aXRpb25zIG9mIGRpci8nIChlLmcuIC9kaXIvIC9kaXIvZGlyLwotICogICAgICAgICAgICAgICAvZGlyL2Rpci9kaXIvICkuCi0gKi8KLWJvb2wgdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuKGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSwKLQkJCQkgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnBhdHRlcm4pCi17Ci0JY29uc3QgY2hhciAqZiA9IGZpbGVuYW1lLT5uYW1lOwotCWNvbnN0IGNoYXIgKnAgPSBwYXR0ZXJuLT5uYW1lOwotCWNvbnN0IGludCBsZW4gPSBwYXR0ZXJuLT5jb25zdF9sZW47Ci0KLQkvKiBJZiBAcGF0dGVybiBkb2Vzbid0IGNvbnRhaW4gcGF0dGVybiwgSSBjYW4gdXNlIHN0cmNtcCgpLiAqLwotCWlmICghcGF0dGVybi0+aXNfcGF0dGVybmVkKQotCQlyZXR1cm4gIXRvbW95b19wYXRoY21wKGZpbGVuYW1lLCBwYXR0ZXJuKTsKLQkvKiBEb24ndCBjb21wYXJlIGRpcmVjdG9yeSBhbmQgbm9uLWRpcmVjdG9yeS4gKi8KLQlpZiAoZmlsZW5hbWUtPmlzX2RpciAhPSBwYXR0ZXJuLT5pc19kaXIpCi0JCXJldHVybiBmYWxzZTsKLQkvKiBDb21wYXJlIHRoZSBpbml0aWFsIGxlbmd0aCB3aXRob3V0IHBhdHRlcm5zLiAqLwotCWlmIChzdHJuY21wKGYsIHAsIGxlbikpCi0JCXJldHVybiBmYWxzZTsKLQlmICs9IGxlbjsKLQlwICs9IGxlbjsKLQlyZXR1cm4gdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuMihmLCBwKTsKLX0KLQotLyoqCi0gKiB0b21veW9faW9fcHJpbnRmIC0gVHJhbnNhY3Rpb25hbCBwcmludGYoKSB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiIHN0cnVjdHVyZS4KLSAqCi0gKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgotICogQGZtdDogIFRoZSBwcmludGYoKSdzIGZvcm1hdCBzdHJpbmcsIGZvbGxvd2VkIGJ5IHBhcmFtZXRlcnMuCi0gKgotICogUmV0dXJucyB0cnVlIGlmIG91dHB1dCB3YXMgd3JpdHRlbiwgZmFsc2Ugb3RoZXJ3aXNlLgotICoKLSAqIFRoZSBzbnByaW50ZigpIHdpbGwgdHJ1bmNhdGUsIGJ1dCB0b21veW9faW9fcHJpbnRmKCkgd29uJ3QuCi0gKi8KLWJvb2wgdG9tb3lvX2lvX3ByaW50ZihzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCwgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JdmFfbGlzdCBhcmdzOwotCWludCBsZW47Ci0JaW50IHBvcyA9IGhlYWQtPnJlYWRfYXZhaWw7Ci0JaW50IHNpemUgPSBoZWFkLT5yZWFkYnVmX3NpemUgLSBwb3M7Ci0KLQlpZiAoc2l6ZSA8PSAwKQotCQlyZXR1cm4gZmFsc2U7Ci0JdmFfc3RhcnQoYXJncywgZm10KTsKLQlsZW4gPSB2c25wcmludGYoaGVhZC0+cmVhZF9idWYgKyBwb3MsIHNpemUsIGZtdCwgYXJncyk7Ci0JdmFfZW5kKGFyZ3MpOwotCWlmIChwb3MgKyBsZW4gPj0gaGVhZC0+cmVhZGJ1Zl9zaXplKQotCQlyZXR1cm4gZmFsc2U7Ci0JaGVhZC0+cmVhZF9hdmFpbCArPSBsZW47Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLS8qKgotICogdG9tb3lvX2dldF9leGUgLSBHZXQgdG9tb3lvX3JlYWxwYXRoKCkgb2YgY3VycmVudCBwcm9jZXNzLgotICoKLSAqIFJldHVybnMgdGhlIHRvbW95b19yZWFscGF0aCgpIG9mIGN1cnJlbnQgcHJvY2VzcyBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHVzZXMga3phbGxvYygpLCBzbyB0aGUgY2FsbGVyIG11c3QgY2FsbCBrZnJlZSgpCi0gKiBpZiB0aGlzIGZ1bmN0aW9uIGRpZG4ndCByZXR1cm4gTlVMTC4KLSAqLwotc3RhdGljIGNvbnN0IGNoYXIgKnRvbW95b19nZXRfZXhlKHZvaWQpCi17Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQljb25zdCBjaGFyICpjcCA9IE5VTEw7Ci0KLQlpZiAoIW1tKQotCQlyZXR1cm4gTlVMTDsKLQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JZm9yICh2bWEgPSBtbS0+bW1hcDsgdm1hOyB2bWEgPSB2bWEtPnZtX25leHQpIHsKLQkJaWYgKCh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQ1VUQUJMRSkgJiYgdm1hLT52bV9maWxlKSB7Ci0JCQljcCA9IHRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgoJnZtYS0+dm1fZmlsZS0+Zl9wYXRoKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JcmV0dXJuIGNwOwotfQotCi0vKioKLSAqIHRvbW95b19nZXRfbXNnIC0gR2V0IHdhcm5pbmcgbWVzc2FnZS4KLSAqCi0gKiBAaXNfZW5mb3JjZTogSXMgaXQgZW5mb3JjaW5nIG1vZGU/Ci0gKgotICogUmV0dXJucyAiRVJST1IiIG9yICJXQVJOSU5HIi4KLSAqLwotY29uc3QgY2hhciAqdG9tb3lvX2dldF9tc2coY29uc3QgYm9vbCBpc19lbmZvcmNlKQotewotCWlmIChpc19lbmZvcmNlKQotCQlyZXR1cm4gIkVSUk9SIjsKLQllbHNlCi0JCXJldHVybiAiV0FSTklORyI7Ci19Ci0KLS8qKgotICogdG9tb3lvX2NoZWNrX2ZsYWdzIC0gQ2hlY2sgbW9kZSBmb3Igc3BlY2lmaWVkIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogQGRvbWFpbjogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCi0gKiBAaW5kZXg6ICBUaGUgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBtb2RlLgotICoKLSAqIFRPTU9ZTyBjaGVja3Mgb25seSBwcm9jZXNzIGNvbnRleHQuCi0gKiBUaGlzIGNvZGUgZGlzYWJsZXMgVE9NT1lPJ3MgZW5mb3JjZW1lbnQgaW4gY2FzZSB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20KLSAqIGludGVycnVwdCBjb250ZXh0LgotICovCi11bnNpZ25lZCBpbnQgdG9tb3lvX2NoZWNrX2ZsYWdzKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKLQkJCQljb25zdCB1OCBpbmRleCkKLXsKLQljb25zdCB1OCBwcm9maWxlID0gZG9tYWluLT5wcm9maWxlOwotCi0JaWYgKFdBUk5fT04oaW5faW50ZXJydXB0KCkpKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gdG9tb3lvX3BvbGljeV9sb2FkZWQgJiYgaW5kZXggPCBUT01PWU9fTUFYX0NPTlRST0xfSU5ERVgKLSNpZiBUT01PWU9fTUFYX1BST0ZJTEVTICE9IDI1NgotCQkmJiBwcm9maWxlIDwgVE9NT1lPX01BWF9QUk9GSUxFUwotI2VuZGlmCi0JCSYmIHRvbW95b19wcm9maWxlX3B0cltwcm9maWxlXSA/Ci0JCXRvbW95b19wcm9maWxlX3B0cltwcm9maWxlXS0+dmFsdWVbaW5kZXhdIDogMDsKLX0KLQotLyoqCi0gKiB0b21veW9fdmVyYm9zZV9tb2RlIC0gQ2hlY2sgd2hldGhlciBUT01PWU8gaXMgdmVyYm9zZSBtb2RlLgotICoKLSAqIEBkb21haW46IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiBkb21haW4gcG9saWN5IHZpb2xhdGlvbiB3YXJuaW5nIHNob3VsZCBiZSBwcmludGVkIHRvCi0gKiBjb25zb2xlLgotICovCi1ib29sIHRvbW95b192ZXJib3NlX21vZGUoY29uc3Qgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluKQotewotCXJldHVybiB0b21veW9fY2hlY2tfZmxhZ3MoZG9tYWluLCBUT01PWU9fVkVSQk9TRSkgIT0gMDsKLX0KLQotLyoqCi0gKiB0b21veW9fZG9tYWluX3F1b3RhX2lzX29rIC0gQ2hlY2sgZm9yIGRvbWFpbidzIHF1b3RhLgotICoKLSAqIEBkb21haW46IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZG9tYWluIGlzIG5vdCBleGNlZWRlZCBxdW90YSwgZmFsc2Ugb3RoZXJ3aXNlLgotICoKLSAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCi0gKi8KLWJvb2wgdG9tb3lvX2RvbWFpbl9xdW90YV9pc19vayhzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICogY29uc3QgZG9tYWluKQotewotCXVuc2lnbmVkIGludCBjb3VudCA9IDA7Ci0Jc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyOwotCi0JaWYgKCFkb21haW4pCi0JCXJldHVybiB0cnVlOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgewotCQlzd2l0Y2ggKHB0ci0+dHlwZSkgewotCQkJc3RydWN0IHRvbW95b19wYXRoX2FjbCAqYWNsOwotCQkJdTMyIHBlcm07Ci0JCQl1OCBpOwotCQljYXNlIFRPTU9ZT19UWVBFX1BBVEhfQUNMOgotCQkJYWNsID0gY29udGFpbmVyX29mKHB0ciwgc3RydWN0IHRvbW95b19wYXRoX2FjbCwgaGVhZCk7Ci0JCQlwZXJtID0gYWNsLT5wZXJtIHwgKCgodTMyKSBhY2wtPnBlcm1faGlnaCkgPDwgMTYpOwotCQkJZm9yIChpID0gMDsgaSA8IFRPTU9ZT19NQVhfUEFUSF9PUEVSQVRJT047IGkrKykKLQkJCQlpZiAocGVybSAmICgxIDw8IGkpKQotCQkJCQljb3VudCsrOwotCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9SRUFEX1dSSVRFKSkKLQkJCQljb3VudCAtPSAyOwotCQkJYnJlYWs7Ci0JCWNhc2UgVE9NT1lPX1RZUEVfUEFUSDJfQUNMOgotCQkJcGVybSA9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fcGF0aDJfYWNsLCBoZWFkKQotCQkJCS0+cGVybTsKLQkJCWZvciAoaSA9IDA7IGkgPCBUT01PWU9fTUFYX1BBVEgyX09QRVJBVElPTjsgaSsrKQotCQkJCWlmIChwZXJtICYgKDEgPDwgaSkpCi0JCQkJCWNvdW50Kys7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAoY291bnQgPCB0b21veW9fY2hlY2tfZmxhZ3MoZG9tYWluLCBUT01PWU9fTUFYX0FDQ0VQVF9FTlRSWSkpCi0JCXJldHVybiB0cnVlOwotCWlmICghZG9tYWluLT5xdW90YV93YXJuZWQpIHsKLQkJZG9tYWluLT5xdW90YV93YXJuZWQgPSB0cnVlOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJUT01PWU8tV0FSTklORzogIgotCQkgICAgICAgIkRvbWFpbiAnJXMnIGhhcyBzbyBtYW55IEFDTHMgdG8gaG9sZC4gIgotCQkgICAgICAgIlN0b3BwZWQgbGVhcm5pbmcgbW9kZS5cbiIsIGRvbWFpbi0+ZG9tYWlubmFtZS0+bmFtZSk7Ci0JfQotCXJldHVybiBmYWxzZTsKLX0KLQotLyoqCi0gKiB0b21veW9fZmluZF9vcl9hc3NpZ25fbmV3X3Byb2ZpbGUgLSBDcmVhdGUgYSBuZXcgcHJvZmlsZS4KKyAqIHRvbW95b19hc3NpZ25fcHJvZmlsZSAtIENyZWF0ZSBhIG5ldyBwcm9maWxlLgogICoKICAqIEBwcm9maWxlOiBQcm9maWxlIG51bWJlciB0byBjcmVhdGUuCiAgKgogICogUmV0dXJucyBwb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX3Byb2ZpbGUiIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgogICovCi1zdGF0aWMgc3RydWN0IHRvbW95b19wcm9maWxlICp0b21veW9fZmluZF9vcl9hc3NpZ25fbmV3X3Byb2ZpbGUoY29uc3QgdW5zaWduZWQKLQkJCQkJCQkJaW50IHByb2ZpbGUpCitzdGF0aWMgc3RydWN0IHRvbW95b19wcm9maWxlICp0b21veW9fYXNzaWduX3Byb2ZpbGUoY29uc3QgdW5zaWduZWQgaW50IHByb2ZpbGUpCiB7Ci0Jc3RydWN0IHRvbW95b19wcm9maWxlICpwdHIgPSBOVUxMOwotCWludCBpOwotCisJc3RydWN0IHRvbW95b19wcm9maWxlICpwdHI7CisJc3RydWN0IHRvbW95b19wcm9maWxlICplbnRyeTsKIAlpZiAocHJvZmlsZSA+PSBUT01PWU9fTUFYX1BST0ZJTEVTKQogCQlyZXR1cm4gTlVMTDsKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ0b21veW9fcG9saWN5X2xvY2spKQotCQlyZXR1cm4gTlVMTDsKIAlwdHIgPSB0b21veW9fcHJvZmlsZV9wdHJbcHJvZmlsZV07CiAJaWYgKHB0cikKLQkJZ290byBvazsKLQlwdHIgPSBrbWFsbG9jKHNpemVvZigqcHRyKSwgR0ZQX05PRlMpOwotCWlmICghdG9tb3lvX21lbW9yeV9vayhwdHIpKSB7Ci0JCWtmcmVlKHB0cik7Ci0JCXB0ciA9IE5VTEw7Ci0JCWdvdG8gb2s7CisJCXJldHVybiBwdHI7CisJZW50cnkgPSBremFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfTk9GUyk7CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdG9tb3lvX3BvbGljeV9sb2NrKSkKKwkJZ290byBvdXQ7CisJcHRyID0gdG9tb3lvX3Byb2ZpbGVfcHRyW3Byb2ZpbGVdOworCWlmICghcHRyICYmIHRvbW95b19tZW1vcnlfb2soZW50cnkpKSB7CisJCXB0ciA9IGVudHJ5OworCQlwdHItPmxlYXJuaW5nID0gJnRvbW95b19kZWZhdWx0X3Byb2ZpbGUucHJlZmVyZW5jZTsKKwkJcHRyLT5wZXJtaXNzaXZlID0gJnRvbW95b19kZWZhdWx0X3Byb2ZpbGUucHJlZmVyZW5jZTsKKwkJcHRyLT5lbmZvcmNpbmcgPSAmdG9tb3lvX2RlZmF1bHRfcHJvZmlsZS5wcmVmZXJlbmNlOworCQlwdHItPmRlZmF1bHRfY29uZmlnID0gVE9NT1lPX0NPTkZJR19ESVNBQkxFRDsKKwkJbWVtc2V0KHB0ci0+Y29uZmlnLCBUT01PWU9fQ09ORklHX1VTRV9ERUZBVUxULAorCQkgICAgICAgc2l6ZW9mKHB0ci0+Y29uZmlnKSk7CisJCW1iKCk7IC8qIEF2b2lkIG91dC1vZi1vcmRlciBleGVjdXRpb24uICovCisJCXRvbW95b19wcm9maWxlX3B0cltwcm9maWxlXSA9IHB0cjsKKwkJZW50cnkgPSBOVUxMOwogCX0KLQlmb3IgKGkgPSAwOyBpIDwgVE9NT1lPX01BWF9DT05UUk9MX0lOREVYOyBpKyspCi0JCXB0ci0+dmFsdWVbaV0gPSB0b21veW9fY29udHJvbF9hcnJheVtpXS5jdXJyZW50X3ZhbHVlOwotCW1iKCk7IC8qIEF2b2lkIG91dC1vZi1vcmRlciBleGVjdXRpb24uICovCi0JdG9tb3lvX3Byb2ZpbGVfcHRyW3Byb2ZpbGVdID0gcHRyOwotIG9rOgogCW11dGV4X3VubG9jaygmdG9tb3lvX3BvbGljeV9sb2NrKTsKKyBvdXQ6CisJa2ZyZWUoZW50cnkpOwogCXJldHVybiBwdHI7CiB9CiAKIC8qKgotICogdG9tb3lvX3dyaXRlX3Byb2ZpbGUgLSBXcml0ZSB0byBwcm9maWxlIHRhYmxlLgorICogdG9tb3lvX3Byb2ZpbGUgLSBGaW5kIGEgcHJvZmlsZS4KKyAqCisgKiBAcHJvZmlsZTogUHJvZmlsZSBudW1iZXIgdG8gZmluZC4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fcHJvZmlsZSIuCisgKi8KK3N0cnVjdCB0b21veW9fcHJvZmlsZSAqdG9tb3lvX3Byb2ZpbGUoY29uc3QgdTggcHJvZmlsZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX3Byb2ZpbGUgKnB0ciA9IHRvbW95b19wcm9maWxlX3B0cltwcm9maWxlXTsKKwlpZiAoIXRvbW95b19wb2xpY3lfbG9hZGVkKQorCQlyZXR1cm4gJnRvbW95b19kZWZhdWx0X3Byb2ZpbGU7CisJQlVHX09OKCFwdHIpOworCXJldHVybiBwdHI7Cit9CisKK3N0YXRpYyBzOCB0b21veW9fZmluZF95ZXNubyhjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKmZpbmQpCit7CisJY29uc3QgY2hhciAqY3AgPSBzdHJzdHIoc3RyaW5nLCBmaW5kKTsKKwlpZiAoY3ApIHsKKwkJY3AgKz0gc3RybGVuKGZpbmQpOworCQlpZiAoIXN0cm5jbXAoY3AsICI9eWVzIiwgNCkpCisJCQlyZXR1cm4gMTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAoY3AsICI9bm8iLCAzKSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIHRvbW95b19zZXRfYm9vbChib29sICpiLCBjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKmZpbmQpCit7CisJc3dpdGNoICh0b21veW9fZmluZF95ZXNubyhzdHJpbmcsIGZpbmQpKSB7CisJY2FzZSAxOgorCQkqYiA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgMDoKKwkJKmIgPSBmYWxzZTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCB0b21veW9fc2V0X3VpbnQodW5zaWduZWQgaW50ICppLCBjb25zdCBjaGFyICpzdHJpbmcsCisJCQkgICAgY29uc3QgY2hhciAqZmluZCkKK3sKKwljb25zdCBjaGFyICpjcCA9IHN0cnN0cihzdHJpbmcsIGZpbmQpOworCWlmIChjcCkKKwkJc3NjYW5mKGNwICsgc3RybGVuKGZpbmQpLCAiPSV1IiwgaSk7Cit9CisKK3N0YXRpYyB2b2lkIHRvbW95b19zZXRfcHJlZihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwKKwkJCSAgICBjb25zdCBib29sIHVzZV9kZWZhdWx0LAorCQkJICAgIHN0cnVjdCB0b21veW9fcHJvZmlsZSAqcHJvZmlsZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX3ByZWZlcmVuY2UgKipwcmVmOworCWJvb2wgKnZlcmJvc2U7CisJaWYgKCFzdHJjbXAobmFtZSwgImVuZm9yY2luZyIpKSB7CisJCWlmICh1c2VfZGVmYXVsdCkgeworCQkJcHJlZiA9ICZwcm9maWxlLT5lbmZvcmNpbmc7CisJCQlnb3RvIHNldF9kZWZhdWx0OworCQl9CisJCXByb2ZpbGUtPmVuZm9yY2luZyA9ICZwcm9maWxlLT5wcmVmZXJlbmNlOworCQl2ZXJib3NlID0gJnByb2ZpbGUtPnByZWZlcmVuY2UuZW5mb3JjaW5nX3ZlcmJvc2U7CisJCWdvdG8gc2V0X3ZlcmJvc2U7CisJfQorCWlmICghc3RyY21wKG5hbWUsICJwZXJtaXNzaXZlIikpIHsKKwkJaWYgKHVzZV9kZWZhdWx0KSB7CisJCQlwcmVmID0gJnByb2ZpbGUtPnBlcm1pc3NpdmU7CisJCQlnb3RvIHNldF9kZWZhdWx0OworCQl9CisJCXByb2ZpbGUtPnBlcm1pc3NpdmUgPSAmcHJvZmlsZS0+cHJlZmVyZW5jZTsKKwkJdmVyYm9zZSA9ICZwcm9maWxlLT5wcmVmZXJlbmNlLnBlcm1pc3NpdmVfdmVyYm9zZTsKKwkJZ290byBzZXRfdmVyYm9zZTsKKwl9CisJaWYgKCFzdHJjbXAobmFtZSwgImxlYXJuaW5nIikpIHsKKwkJaWYgKHVzZV9kZWZhdWx0KSB7CisJCQlwcmVmID0gJnByb2ZpbGUtPmxlYXJuaW5nOworCQkJZ290byBzZXRfZGVmYXVsdDsKKwkJfQorCQlwcm9maWxlLT5sZWFybmluZyA9ICZwcm9maWxlLT5wcmVmZXJlbmNlOworCQl0b21veW9fc2V0X3VpbnQoJnByb2ZpbGUtPnByZWZlcmVuY2UubGVhcm5pbmdfbWF4X2VudHJ5LCB2YWx1ZSwKKwkJCSAgICAgIm1heF9lbnRyeSIpOworCQl2ZXJib3NlID0gJnByb2ZpbGUtPnByZWZlcmVuY2UubGVhcm5pbmdfdmVyYm9zZTsKKwkJZ290byBzZXRfdmVyYm9zZTsKKwl9CisJcmV0dXJuOworIHNldF9kZWZhdWx0OgorCSpwcmVmID0gJnRvbW95b19kZWZhdWx0X3Byb2ZpbGUucHJlZmVyZW5jZTsKKwlyZXR1cm47Cisgc2V0X3ZlcmJvc2U6CisJdG9tb3lvX3NldF9ib29sKHZlcmJvc2UsIHZhbHVlLCAidmVyYm9zZSIpOworfQorCitzdGF0aWMgaW50IHRvbW95b19zZXRfbW9kZShjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwKKwkJCSAgIGNvbnN0IGJvb2wgdXNlX2RlZmF1bHQsCisJCQkgICBzdHJ1Y3QgdG9tb3lvX3Byb2ZpbGUgKnByb2ZpbGUpCit7CisJdTggaTsKKwl1OCBjb25maWc7CisJaWYgKCFzdHJjbXAobmFtZSwgIkNPTkZJRyIpKSB7CisJCWkgPSBUT01PWU9fTUFYX01BQ19JTkRFWCArIFRPTU9ZT19NQVhfTUFDX0NBVEVHT1JZX0lOREVYOworCQljb25maWcgPSBwcm9maWxlLT5kZWZhdWx0X2NvbmZpZzsKKwl9IGVsc2UgaWYgKHRvbW95b19zdHJfc3RhcnRzKCZuYW1lLCAiQ09ORklHOjoiKSkgeworCQljb25maWcgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgVE9NT1lPX01BWF9NQUNfSU5ERVgKKwkJCSAgICAgKyBUT01PWU9fTUFYX01BQ19DQVRFR09SWV9JTkRFWDsgaSsrKSB7CisJCQlpZiAoc3RyY21wKG5hbWUsIHRvbW95b19tYWNfa2V5d29yZHNbaV0pKQorCQkJCWNvbnRpbnVlOworCQkJY29uZmlnID0gcHJvZmlsZS0+Y29uZmlnW2ldOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPT0gVE9NT1lPX01BWF9NQUNfSU5ERVggKyBUT01PWU9fTUFYX01BQ19DQVRFR09SWV9JTkRFWCkKKwkJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAodXNlX2RlZmF1bHQpIHsKKwkJY29uZmlnID0gVE9NT1lPX0NPTkZJR19VU0VfREVGQVVMVDsKKwl9IGVsc2UgeworCQl1OCBtb2RlOworCQlmb3IgKG1vZGUgPSAwOyBtb2RlIDwgNDsgbW9kZSsrKQorCQkJaWYgKHN0cnN0cih2YWx1ZSwgdG9tb3lvX21vZGVbbW9kZV0pKQorCQkJCS8qCisJCQkJICogVXBkYXRlIGxvd2VyIDMgYml0cyBpbiBvcmRlciB0byBkaXN0aW5ndWlzaAorCQkJCSAqICdjb25maWcnIGZyb20gJ1RPTU9ZT19DT05GSUdfVVNFX0RFQUZVTFQnLgorCQkJCSAqLworCQkJCWNvbmZpZyA9IChjb25maWcgJiB+NykgfCBtb2RlOworCX0KKwlpZiAoaSA8IFRPTU9ZT19NQVhfTUFDX0lOREVYICsgVE9NT1lPX01BWF9NQUNfQ0FURUdPUllfSU5ERVgpCisJCXByb2ZpbGUtPmNvbmZpZ1tpXSA9IGNvbmZpZzsKKwllbHNlIGlmIChjb25maWcgIT0gVE9NT1lPX0NPTkZJR19VU0VfREVGQVVMVCkKKwkJcHJvZmlsZS0+ZGVmYXVsdF9jb25maWcgPSBjb25maWc7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX3Byb2ZpbGUgLSBXcml0ZSBwcm9maWxlIHRhYmxlLgogICoKICAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCiAgKgpAQCAtOTgwLDE1MyArNDMwLDE2NSBAQAogewogCWNoYXIgKmRhdGEgPSBoZWFkLT53cml0ZV9idWY7CiAJdW5zaWduZWQgaW50IGk7Ci0JdW5zaWduZWQgaW50IHZhbHVlOworCWJvb2wgdXNlX2RlZmF1bHQgPSBmYWxzZTsKIAljaGFyICpjcDsKIAlzdHJ1Y3QgdG9tb3lvX3Byb2ZpbGUgKnByb2ZpbGU7Ci0JdW5zaWduZWQgbG9uZyBudW07Ci0KLQljcCA9IHN0cmNocihkYXRhLCAnLScpOwotCWlmIChjcCkKLQkJKmNwID0gJ1wwJzsKLQlpZiAoc3RyaWN0X3N0cnRvdWwoZGF0YSwgMTAsICZudW0pKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoY3ApCisJaWYgKHNzY2FuZihkYXRhLCAiUFJPRklMRV9WRVJTSU9OPSV1IiwgJnRvbW95b19wcm9maWxlX3ZlcnNpb24pID09IDEpCisJCXJldHVybiAwOworCWkgPSBzaW1wbGVfc3RydG91bChkYXRhLCAmY3AsIDEwKTsKKwlpZiAoZGF0YSA9PSBjcCkgeworCQlwcm9maWxlID0gJnRvbW95b19kZWZhdWx0X3Byb2ZpbGU7CisJfSBlbHNlIHsKKwkJaWYgKCpjcCAhPSAnLScpCisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJZGF0YSA9IGNwICsgMTsKLQlwcm9maWxlID0gdG9tb3lvX2ZpbmRfb3JfYXNzaWduX25ld19wcm9maWxlKG51bSk7Ci0JaWYgKCFwcm9maWxlKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcHJvZmlsZSA9IHRvbW95b19hc3NpZ25fcHJvZmlsZShpKTsKKwkJaWYgKCFwcm9maWxlKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQogCWNwID0gc3RyY2hyKGRhdGEsICc9Jyk7CiAJaWYgKCFjcCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JKmNwID0gJ1wwJzsKKwkqY3ArKyA9ICdcMCc7CisJaWYgKHByb2ZpbGUgIT0gJnRvbW95b19kZWZhdWx0X3Byb2ZpbGUpCisJCXVzZV9kZWZhdWx0ID0gc3Ryc3RyKGNwLCAidXNlX2RlZmF1bHQiKSAhPSBOVUxMOworCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgIlBSRUZFUkVOQ0U6OiIpKSB7CisJCXRvbW95b19zZXRfcHJlZihkYXRhLCBjcCwgdXNlX2RlZmF1bHQsIHByb2ZpbGUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKHByb2ZpbGUgPT0gJnRvbW95b19kZWZhdWx0X3Byb2ZpbGUpCisJCXJldHVybiAtRUlOVkFMOwogCWlmICghc3RyY21wKGRhdGEsICJDT01NRU5UIikpIHsKIAkJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKm9sZF9jb21tZW50ID0gcHJvZmlsZS0+Y29tbWVudDsKLQkJcHJvZmlsZS0+Y29tbWVudCA9IHRvbW95b19nZXRfbmFtZShjcCArIDEpOworCQlwcm9maWxlLT5jb21tZW50ID0gdG9tb3lvX2dldF9uYW1lKGNwKTsKIAkJdG9tb3lvX3B1dF9uYW1lKG9sZF9jb21tZW50KTsKIAkJcmV0dXJuIDA7CiAJfQotCWZvciAoaSA9IDA7IGkgPCBUT01PWU9fTUFYX0NPTlRST0xfSU5ERVg7IGkrKykgewotCQlpZiAoc3RyY21wKGRhdGEsIHRvbW95b19jb250cm9sX2FycmF5W2ldLmtleXdvcmQpKQotCQkJY29udGludWU7Ci0JCWlmIChzc2NhbmYoY3AgKyAxLCAiJXUiLCAmdmFsdWUpICE9IDEpIHsKLQkJCWludCBqOwotCQkJY29uc3QgY2hhciAqKm1vZGVzOwotCQkJc3dpdGNoIChpKSB7Ci0JCQljYXNlIFRPTU9ZT19WRVJCT1NFOgotCQkJCW1vZGVzID0gdG9tb3lvX21vZGVfMjsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJbW9kZXMgPSB0b21veW9fbW9kZV80OwotCQkJCWJyZWFrOwotCQkJfQotCQkJZm9yIChqID0gMDsgaiA8IDQ7IGorKykgewotCQkJCWlmIChzdHJjbXAoY3AgKyAxLCBtb2Rlc1tqXSkpCi0JCQkJCWNvbnRpbnVlOwotCQkJCXZhbHVlID0gajsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChqID09IDQpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0gZWxzZSBpZiAodmFsdWUgPiB0b21veW9fY29udHJvbF9hcnJheVtpXS5tYXhfdmFsdWUpIHsKLQkJCXZhbHVlID0gdG9tb3lvX2NvbnRyb2xfYXJyYXlbaV0ubWF4X3ZhbHVlOwotCQl9Ci0JCXByb2ZpbGUtPnZhbHVlW2ldID0gdmFsdWU7Ci0JCXJldHVybiAwOworCXJldHVybiB0b21veW9fc2V0X21vZGUoZGF0YSwgY3AsIHVzZV9kZWZhdWx0LCBwcm9maWxlKTsKK30KKworc3RhdGljIHZvaWQgdG9tb3lvX3ByaW50X3ByZWZlcmVuY2Uoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsCisJCQkJICAgIGNvbnN0IGludCBpZHgpCit7CisJc3RydWN0IHRvbW95b19wcmVmZXJlbmNlICpwcmVmID0gJnRvbW95b19kZWZhdWx0X3Byb2ZpbGUucHJlZmVyZW5jZTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3Byb2ZpbGUgKnByb2ZpbGUgPSBpZHggPj0gMCA/CisJCXRvbW95b19wcm9maWxlX3B0cltpZHhdIDogTlVMTDsKKwljaGFyIGJ1ZmZlclsxNl0gPSAiIjsKKwlpZiAocHJvZmlsZSkgeworCQlidWZmZXJbc2l6ZW9mKGJ1ZmZlcikgLSAxXSA9ICdcMCc7CisJCXNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikgLSAxLCAiJXUtIiwgaWR4KTsKIAl9Ci0JcmV0dXJuIC1FSU5WQUw7CisJaWYgKHByb2ZpbGUpIHsKKwkJcHJlZiA9IHByb2ZpbGUtPmxlYXJuaW5nOworCQlpZiAocHJlZiA9PSAmdG9tb3lvX2RlZmF1bHRfcHJvZmlsZS5wcmVmZXJlbmNlKQorCQkJZ290byBza2lwMTsKKwl9CisJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiJXNQUkVGRVJFTkNFOjolcz17ICIKKwkJCSAidmVyYm9zZT0lcyBtYXhfZW50cnk9JXUgfVxuIiwKKwkJCSBidWZmZXIsICJsZWFybmluZyIsCisJCQkgdG9tb3lvX3llc25vKHByZWYtPmxlYXJuaW5nX3ZlcmJvc2UpLAorCQkJIHByZWYtPmxlYXJuaW5nX21heF9lbnRyeSk7Cisgc2tpcDE6CisJaWYgKHByb2ZpbGUpIHsKKwkJcHJlZiA9IHByb2ZpbGUtPnBlcm1pc3NpdmU7CisJCWlmIChwcmVmID09ICZ0b21veW9fZGVmYXVsdF9wcm9maWxlLnByZWZlcmVuY2UpCisJCQlnb3RvIHNraXAyOworCX0KKwl0b21veW9faW9fcHJpbnRmKGhlYWQsICIlc1BSRUZFUkVOQ0U6OiVzPXsgdmVyYm9zZT0lcyB9XG4iLAorCQkJIGJ1ZmZlciwgInBlcm1pc3NpdmUiLAorCQkJIHRvbW95b195ZXNubyhwcmVmLT5wZXJtaXNzaXZlX3ZlcmJvc2UpKTsKKyBza2lwMjoKKwlpZiAocHJvZmlsZSkgeworCQlwcmVmID0gcHJvZmlsZS0+ZW5mb3JjaW5nOworCQlpZiAocHJlZiA9PSAmdG9tb3lvX2RlZmF1bHRfcHJvZmlsZS5wcmVmZXJlbmNlKQorCQkJcmV0dXJuOworCX0KKwl0b21veW9faW9fcHJpbnRmKGhlYWQsICIlc1BSRUZFUkVOQ0U6OiVzPXsgdmVyYm9zZT0lcyB9XG4iLAorCQkJIGJ1ZmZlciwgImVuZm9yY2luZyIsCisJCQkgdG9tb3lvX3llc25vKHByZWYtPmVuZm9yY2luZ192ZXJib3NlKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRvbW95b19wcmludF9jb25maWcoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsIGNvbnN0IHU4IGNvbmZpZykKK3sKKwl0b21veW9faW9fcHJpbnRmKGhlYWQsICI9eyBtb2RlPSVzIH1cbiIsIHRvbW95b19tb2RlW2NvbmZpZyAmIDNdKTsKIH0KIAogLyoqCi0gKiB0b21veW9fcmVhZF9wcm9maWxlIC0gUmVhZCBmcm9tIHByb2ZpbGUgdGFibGUuCisgKiB0b21veW9fcmVhZF9wcm9maWxlIC0gUmVhZCBwcm9maWxlIHRhYmxlLgogICoKICAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCi0gKgotICogUmV0dXJucyAwLgogICovCi1zdGF0aWMgaW50IHRvbW95b19yZWFkX3Byb2ZpbGUoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCitzdGF0aWMgdm9pZCB0b21veW9fcmVhZF9wcm9maWxlKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQogewotCXN0YXRpYyBjb25zdCBpbnQgdG90YWwgPSBUT01PWU9fTUFYX0NPTlRST0xfSU5ERVggKyAxOwotCWludCBzdGVwOwotCi0JaWYgKGhlYWQtPnJlYWRfZW9mKQotCQlyZXR1cm4gMDsKLQlmb3IgKHN0ZXAgPSBoZWFkLT5yZWFkX3N0ZXA7IHN0ZXAgPCBUT01PWU9fTUFYX1BST0ZJTEVTICogdG90YWw7Ci0JICAgICBzdGVwKyspIHsKLQkJY29uc3QgdTggaW5kZXggPSBzdGVwIC8gdG90YWw7Ci0JCXU4IHR5cGUgPSBzdGVwICUgdG90YWw7Ci0JCWNvbnN0IHN0cnVjdCB0b21veW9fcHJvZmlsZSAqcHJvZmlsZQotCQkJPSB0b21veW9fcHJvZmlsZV9wdHJbaW5kZXhdOwotCQloZWFkLT5yZWFkX3N0ZXAgPSBzdGVwOwotCQlpZiAoIXByb2ZpbGUpCi0JCQljb250aW51ZTsKLQkJaWYgKCF0eXBlKSB7IC8qIFByaW50IHByb2ZpbGUnIGNvbW1lbnQgdGFnLiAqLwotCQkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsICIldS1DT01NRU5UPSVzXG4iLAotCQkJCQkgICAgICBpbmRleCwgcHJvZmlsZS0+Y29tbWVudCA/Ci0JCQkJCSAgICAgIHByb2ZpbGUtPmNvbW1lbnQtPm5hbWUgOiAiIikpCisJdTggaW5kZXg7CisJY29uc3Qgc3RydWN0IHRvbW95b19wcm9maWxlICpwcm9maWxlOworIG5leHQ6CisJaW5kZXggPSBoZWFkLT5yLmluZGV4OworCXByb2ZpbGUgPSB0b21veW9fcHJvZmlsZV9wdHJbaW5kZXhdOworCXN3aXRjaCAoaGVhZC0+ci5zdGVwKSB7CisJY2FzZSAwOgorCQl0b21veW9faW9fcHJpbnRmKGhlYWQsICJQUk9GSUxFX1ZFUlNJT049JXNcbiIsICIyMDA5MDkwMyIpOworCQl0b21veW9fcHJpbnRfcHJlZmVyZW5jZShoZWFkLCAtMSk7CisJCWhlYWQtPnIuc3RlcCsrOworCQlicmVhazsKKwljYXNlIDE6CisJCWZvciAoIDsgaGVhZC0+ci5pbmRleCA8IFRPTU9ZT19NQVhfUFJPRklMRVM7CisJCSAgICAgIGhlYWQtPnIuaW5kZXgrKykKKwkJCWlmICh0b21veW9fcHJvZmlsZV9wdHJbaGVhZC0+ci5pbmRleF0pCiAJCQkJYnJlYWs7Ci0JCQljb250aW51ZTsKKwkJaWYgKGhlYWQtPnIuaW5kZXggPT0gVE9NT1lPX01BWF9QUk9GSUxFUykKKwkJCXJldHVybjsKKwkJaGVhZC0+ci5zdGVwKys7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJeworCQkJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmNvbW1lbnQgPQorCQkJCXByb2ZpbGUtPmNvbW1lbnQ7CisJCQl0b21veW9faW9fcHJpbnRmKGhlYWQsICIldS1DT01NRU5UPSIsIGluZGV4KTsKKwkJCXRvbW95b19zZXRfc3RyaW5nKGhlYWQsIGNvbW1lbnQgPyBjb21tZW50LT5uYW1lIDogIiIpOworCQkJdG9tb3lvX3NldF9sZihoZWFkKTsKKwkJCWhlYWQtPnIuc3RlcCsrOwogCQl9Ci0JCXR5cGUtLTsKLQkJaWYgKHR5cGUgPCBUT01PWU9fTUFYX0NPTlRST0xfSU5ERVgpIHsKLQkJCWNvbnN0IHVuc2lnbmVkIGludCB2YWx1ZSA9IHByb2ZpbGUtPnZhbHVlW3R5cGVdOwotCQkJY29uc3QgY2hhciAqKm1vZGVzID0gTlVMTDsKLQkJCWNvbnN0IGNoYXIgKmtleXdvcmQKLQkJCQk9IHRvbW95b19jb250cm9sX2FycmF5W3R5cGVdLmtleXdvcmQ7Ci0JCQlzd2l0Y2ggKHRvbW95b19jb250cm9sX2FycmF5W3R5cGVdLm1heF92YWx1ZSkgewotCQkJY2FzZSAzOgotCQkJCW1vZGVzID0gdG9tb3lvX21vZGVfNDsKLQkJCQlicmVhazsKLQkJCWNhc2UgMToKLQkJCQltb2RlcyA9IHRvbW95b19tb2RlXzI7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAobW9kZXMpIHsKLQkJCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgIiV1LSVzPSVzXG4iLCBpbmRleCwKLQkJCQkJCSAgICAgIGtleXdvcmQsIG1vZGVzW3ZhbHVlXSkpCi0JCQkJCWJyZWFrOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgIiV1LSVzPSV1XG4iLCBpbmRleCwKLQkJCQkJCSAgICAgIGtleXdvcmQsIHZhbHVlKSkKLQkJCQkJYnJlYWs7Ci0JCQl9CisJCWJyZWFrOworCWNhc2UgMzoKKwkJeworCQkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiJXUtJXMiLCBpbmRleCwgIkNPTkZJRyIpOworCQkJdG9tb3lvX3ByaW50X2NvbmZpZyhoZWFkLCBwcm9maWxlLT5kZWZhdWx0X2NvbmZpZyk7CisJCQloZWFkLT5yLmJpdCA9IDA7CisJCQloZWFkLT5yLnN0ZXArKzsKIAkJfQorCQlicmVhazsKKwljYXNlIDQ6CisJCWZvciAoIDsgaGVhZC0+ci5iaXQgPCBUT01PWU9fTUFYX01BQ19JTkRFWAorCQkJICAgICAgKyBUT01PWU9fTUFYX01BQ19DQVRFR09SWV9JTkRFWDsgaGVhZC0+ci5iaXQrKykgeworCQkJY29uc3QgdTggaSA9IGhlYWQtPnIuYml0OworCQkJY29uc3QgdTggY29uZmlnID0gcHJvZmlsZS0+Y29uZmlnW2ldOworCQkJaWYgKGNvbmZpZyA9PSBUT01PWU9fQ09ORklHX1VTRV9ERUZBVUxUKQorCQkJCWNvbnRpbnVlOworCQkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiJXUtJXMlcyIsIGluZGV4LCAiQ09ORklHOjoiLAorCQkJCQkgdG9tb3lvX21hY19rZXl3b3Jkc1tpXSk7CisJCQl0b21veW9fcHJpbnRfY29uZmlnKGhlYWQsIGNvbmZpZyk7CisJCQloZWFkLT5yLmJpdCsrOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGhlYWQtPnIuYml0ID09IFRPTU9ZT19NQVhfTUFDX0lOREVYCisJCSAgICArIFRPTU9ZT19NQVhfTUFDX0NBVEVHT1JZX0lOREVYKSB7CisJCQl0b21veW9fcHJpbnRfcHJlZmVyZW5jZShoZWFkLCBpbmRleCk7CisJCQloZWFkLT5yLmluZGV4Kys7CisJCQloZWFkLT5yLnN0ZXAgPSAxOworCQl9CisJCWJyZWFrOwogCX0KLQlpZiAoc3RlcCA9PSBUT01PWU9fTUFYX1BST0ZJTEVTICogdG90YWwpCi0JCWhlYWQtPnJlYWRfZW9mID0gdHJ1ZTsKLQlyZXR1cm4gMDsKKwlpZiAodG9tb3lvX2ZsdXNoKGhlYWQpKQorCQlnb3RvIG5leHQ7CiB9CiAKLS8qCi0gKiB0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCBpcyB1c2VkIGZvciBob2xkaW5nIGxpc3Qgb2YgZG9tYWlubmFtZXMgb3IKLSAqIHByb2dyYW1zIHdoaWNoIGFyZSBwZXJtaXR0ZWQgdG8gbW9kaWZ5IGNvbmZpZ3VyYXRpb24gdmlhCi0gKiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KLSAqCi0gKiBBbiBlbnRyeSBpcyBhZGRlZCBieQotICoKLSAqICMgZWNobyAnPGtlcm5lbD4gL3NiaW4vbWluZ2V0dHkgL2Jpbi9sb2dpbiAvYmluL2Jhc2gnID4gXAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL21hbmFnZXIKLSAqICAoaWYgeW91IHdhbnQgdG8gc3BlY2lmeSBieSBhIGRvbWFpbm5hbWUpCi0gKgotICogIG9yCi0gKgotICogIyBlY2hvICcvdXNyL2xpYi9jY3MvZWRpdHBvbGljeScgPiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vbWFuYWdlcgotICogIChpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IGJ5IGEgcHJvZ3JhbSdzIGxvY2F0aW9uKQotICoKLSAqIGFuZCBpcyBkZWxldGVkIGJ5Ci0gKgotICogIyBlY2hvICdkZWxldGUgPGtlcm5lbD4gL3NiaW4vbWluZ2V0dHkgL2Jpbi9sb2dpbiAvYmluL2Jhc2gnID4gXAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL21hbmFnZXIKLSAqCi0gKiAgb3IKLSAqCi0gKiAjIGVjaG8gJ2RlbGV0ZSAvdXNyL2xpYi9jY3MvZWRpdHBvbGljeScgPiBcCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vbWFuYWdlcgotICoKLSAqIGFuZCBhbGwgZW50cmllcyBhcmUgcmV0cmlldmVkIGJ5Ci0gKgotICogIyBjYXQgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL21hbmFnZXIKLSAqLwotTElTVF9IRUFEKHRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0KTsKK3N0YXRpYyBib29sIHRvbW95b19zYW1lX21hbmFnZXIoY29uc3Qgc3RydWN0IHRvbW95b19hY2xfaGVhZCAqYSwKKwkJCQljb25zdCBzdHJ1Y3QgdG9tb3lvX2FjbF9oZWFkICpiKQoreworCXJldHVybiBjb250YWluZXJfb2YoYSwgc3RydWN0IHRvbW95b19tYW5hZ2VyLCBoZWFkKS0+bWFuYWdlciA9PQorCQljb250YWluZXJfb2YoYiwgc3RydWN0IHRvbW95b19tYW5hZ2VyLCBoZWFkKS0+bWFuYWdlcjsKK30KIAogLyoqCiAgKiB0b21veW9fdXBkYXRlX21hbmFnZXJfZW50cnkgLSBBZGQgYSBtYW5hZ2VyIGVudHJ5LgpAQCAtMTE0MSw0NyArNjAzLDI5IEBACiBzdGF0aWMgaW50IHRvbW95b191cGRhdGVfbWFuYWdlcl9lbnRyeShjb25zdCBjaGFyICptYW5hZ2VyLAogCQkJCSAgICAgICBjb25zdCBib29sIGlzX2RlbGV0ZSkKIHsKLQlzdHJ1Y3QgdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2VudHJ5ICpwdHI7Ci0Jc3RydWN0IHRvbW95b19wb2xpY3lfbWFuYWdlcl9lbnRyeSBlID0geyB9OwotCWludCBlcnJvciA9IGlzX2RlbGV0ZSA/IC1FTk9FTlQgOiAtRU5PTUVNOworCXN0cnVjdCB0b21veW9fbWFuYWdlciBlID0geyB9OworCWludCBlcnJvcjsKIAotCWlmICh0b21veW9faXNfZG9tYWluX2RlZihtYW5hZ2VyKSkgewotCQlpZiAoIXRvbW95b19pc19jb3JyZWN0X2RvbWFpbihtYW5hZ2VyKSkKKwlpZiAodG9tb3lvX2RvbWFpbl9kZWYobWFuYWdlcikpIHsKKwkJaWYgKCF0b21veW9fY29ycmVjdF9kb21haW4obWFuYWdlcikpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJZS5pc19kb21haW4gPSB0cnVlOwogCX0gZWxzZSB7Ci0JCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChtYW5hZ2VyLCAxLCAtMSwgLTEpKQorCQlpZiAoIXRvbW95b19jb3JyZWN0X3BhdGgobWFuYWdlcikpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJZS5tYW5hZ2VyID0gdG9tb3lvX2dldF9uYW1lKG1hbmFnZXIpOwogCWlmICghZS5tYW5hZ2VyKQogCQlyZXR1cm4gLUVOT01FTTsKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ0b21veW9fcG9saWN5X2xvY2spKQotCQlnb3RvIG91dDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCwgbGlzdCkgewotCQlpZiAocHRyLT5tYW5hZ2VyICE9IGUubWFuYWdlcikKLQkJCWNvbnRpbnVlOwotCQlwdHItPmlzX2RlbGV0ZWQgPSBpc19kZWxldGU7Ci0JCWVycm9yID0gMDsKLQkJYnJlYWs7Ci0JfQotCWlmICghaXNfZGVsZXRlICYmIGVycm9yKSB7Ci0JCXN0cnVjdCB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnkgKmVudHJ5ID0KLQkJCXRvbW95b19jb21taXRfb2soJmUsIHNpemVvZihlKSk7Ci0JCWlmIChlbnRyeSkgewotCQkJbGlzdF9hZGRfdGFpbF9yY3UoJmVudHJ5LT5saXN0LAotCQkJCQkgICZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCk7Ci0JCQllcnJvciA9IDA7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZ0b21veW9fcG9saWN5X2xvY2spOwotIG91dDoKKwllcnJvciA9IHRvbW95b191cGRhdGVfcG9saWN5KCZlLmhlYWQsIHNpemVvZihlKSwgaXNfZGVsZXRlLAorCQkJCSAgICAgJnRvbW95b19wb2xpY3lfbGlzdFtUT01PWU9fSURfTUFOQUdFUl0sCisJCQkJICAgICB0b21veW9fc2FtZV9tYW5hZ2VyKTsKIAl0b21veW9fcHV0X25hbWUoZS5tYW5hZ2VyKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKIC8qKgotICogdG9tb3lvX3dyaXRlX21hbmFnZXJfcG9saWN5IC0gV3JpdGUgbWFuYWdlciBwb2xpY3kuCisgKiB0b21veW9fd3JpdGVfbWFuYWdlciAtIFdyaXRlIG1hbmFnZXIgcG9saWN5LgogICoKICAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCiAgKgpAQCAtMTE4OSw3ICs2MzMsNyBAQAogICoKICAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KLXN0YXRpYyBpbnQgdG9tb3lvX3dyaXRlX21hbmFnZXJfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQorc3RhdGljIGludCB0b21veW9fd3JpdGVfbWFuYWdlcihzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKIHsKIAljaGFyICpkYXRhID0gaGVhZC0+d3JpdGVfYnVmOwogCWJvb2wgaXNfZGVsZXRlID0gdG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX0RFTEVURSk7CkBAIC0xMjAyLDQ3ICs2NDYsNDEgQEAKIH0KIAogLyoqCi0gKiB0b21veW9fcmVhZF9tYW5hZ2VyX3BvbGljeSAtIFJlYWQgbWFuYWdlciBwb2xpY3kuCisgKiB0b21veW9fcmVhZF9tYW5hZ2VyIC0gUmVhZCBtYW5hZ2VyIHBvbGljeS4KICAqCiAgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgogICoKLSAqIFJldHVybnMgMC4KLSAqCiAgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCi1zdGF0aWMgaW50IHRvbW95b19yZWFkX21hbmFnZXJfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQorc3RhdGljIHZvaWQgdG9tb3lvX3JlYWRfbWFuYWdlcihzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7Ci0JYm9vbCBkb25lID0gdHJ1ZTsKLQotCWlmIChoZWFkLT5yZWFkX2VvZikKLQkJcmV0dXJuIDA7Ci0JbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBoZWFkLT5yZWFkX3ZhcjIsCi0JCQkgICAgICZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCkgewotCQlzdHJ1Y3QgdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2VudHJ5ICpwdHI7Ci0JCXB0ciA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2VudHJ5LAotCQkJCSBsaXN0KTsKLQkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKKwlpZiAoaGVhZC0+ci5lb2YpCisJCXJldHVybjsKKwlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShoZWFkLT5yLmFjbCwKKwkJCSAgICAgJnRvbW95b19wb2xpY3lfbGlzdFtUT01PWU9fSURfTUFOQUdFUl0pIHsKKwkJc3RydWN0IHRvbW95b19tYW5hZ2VyICpwdHIgPQorCQkJbGlzdF9lbnRyeShoZWFkLT5yLmFjbCwgdHlwZW9mKCpwdHIpLCBoZWFkLmxpc3QpOworCQlpZiAocHRyLT5oZWFkLmlzX2RlbGV0ZWQpCiAJCQljb250aW51ZTsKLQkJZG9uZSA9IHRvbW95b19pb19wcmludGYoaGVhZCwgIiVzXG4iLCBwdHItPm1hbmFnZXItPm5hbWUpOwotCQlpZiAoIWRvbmUpCi0JCQlicmVhazsKKwkJaWYgKCF0b21veW9fZmx1c2goaGVhZCkpCisJCQlyZXR1cm47CisJCXRvbW95b19zZXRfc3RyaW5nKGhlYWQsIHB0ci0+bWFuYWdlci0+bmFtZSk7CisJCXRvbW95b19zZXRfbGYoaGVhZCk7CiAJfQotCWhlYWQtPnJlYWRfZW9mID0gZG9uZTsKLQlyZXR1cm4gMDsKKwloZWFkLT5yLmVvZiA9IHRydWU7CiB9CiAKIC8qKgotICogdG9tb3lvX2lzX3BvbGljeV9tYW5hZ2VyIC0gQ2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBwcm9jZXNzIGlzIGEgcG9saWN5IG1hbmFnZXIuCisgKiB0b21veW9fbWFuYWdlciAtIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgcHJvY2VzcyBpcyBhIHBvbGljeSBtYW5hZ2VyLgogICoKICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBwcm9jZXNzIGlzIHBlcm1pdHRlZCB0byBtb2RpZnkgcG9saWN5CiAgKiB2aWEgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCiAgKgogICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwotc3RhdGljIGJvb2wgdG9tb3lvX2lzX3BvbGljeV9tYW5hZ2VyKHZvaWQpCitzdGF0aWMgYm9vbCB0b21veW9fbWFuYWdlcih2b2lkKQogewotCXN0cnVjdCB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnkgKnB0cjsKKwlzdHJ1Y3QgdG9tb3lvX21hbmFnZXIgKnB0cjsKIAljb25zdCBjaGFyICpleGU7CiAJY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gY3VycmVudDsKIAljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZG9tYWlubmFtZSA9IHRvbW95b19kb21haW4oKS0+ZG9tYWlubmFtZTsKQEAgLTEyNTIsOCArNjkwLDkgQEAKIAkJcmV0dXJuIHRydWU7CiAJaWYgKCF0b21veW9fbWFuYWdlX2J5X25vbl9yb290ICYmICh0YXNrLT5jcmVkLT51aWQgfHwgdGFzay0+Y3JlZC0+ZXVpZCkpCiAJCXJldHVybiBmYWxzZTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCwgbGlzdCkgewotCQlpZiAoIXB0ci0+aXNfZGVsZXRlZCAmJiBwdHItPmlzX2RvbWFpbgorCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJnRvbW95b19wb2xpY3lfbGlzdFtUT01PWU9fSURfTUFOQUdFUl0sCisJCQkJaGVhZC5saXN0KSB7CisJCWlmICghcHRyLT5oZWFkLmlzX2RlbGV0ZWQgJiYgcHRyLT5pc19kb21haW4KIAkJICAgICYmICF0b21veW9fcGF0aGNtcChkb21haW5uYW1lLCBwdHItPm1hbmFnZXIpKSB7CiAJCQlmb3VuZCA9IHRydWU7CiAJCQlicmVhazsKQEAgLTEyNjQsOCArNzAzLDkgQEAKIAlleGUgPSB0b21veW9fZ2V0X2V4ZSgpOwogCWlmICghZXhlKQogCQlyZXR1cm4gZmFsc2U7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QsIGxpc3QpIHsKLQkJaWYgKCFwdHItPmlzX2RlbGV0ZWQgJiYgIXB0ci0+aXNfZG9tYWluCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmdG9tb3lvX3BvbGljeV9saXN0W1RPTU9ZT19JRF9NQU5BR0VSXSwKKwkJCQloZWFkLmxpc3QpIHsKKwkJaWYgKCFwdHItPmhlYWQuaXNfZGVsZXRlZCAmJiAhcHRyLT5pc19kb21haW4KIAkJICAgICYmICFzdHJjbXAoZXhlLCBwdHItPm1hbmFnZXItPm5hbWUpKSB7CiAJCQlmb3VuZCA9IHRydWU7CiAJCQlicmVhazsKQEAgLTEyODUsNyArNzI1LDcgQEAKIH0KIAogLyoqCi0gKiB0b21veW9faXNfc2VsZWN0X29uZSAtIFBhcnNlIHNlbGVjdCBjb21tYW5kLgorICogdG9tb3lvX3NlbGVjdF9vbmUgLSBQYXJzZSBzZWxlY3QgY29tbWFuZC4KICAqCiAgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgogICogQGRhdGE6IFN0cmluZyB0byBwYXJzZS4KQEAgLTEyOTQsMjMgKzczNCwzMSBAQAogICoKICAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KLXN0YXRpYyBib29sIHRvbW95b19pc19zZWxlY3Rfb25lKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkLAotCQkJCSBjb25zdCBjaGFyICpkYXRhKQorc3RhdGljIGJvb2wgdG9tb3lvX3NlbGVjdF9vbmUoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsIGNvbnN0IGNoYXIgKmRhdGEpCiB7CiAJdW5zaWduZWQgaW50IHBpZDsKIAlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4gPSBOVUxMOworCWJvb2wgZ2xvYmFsX3BpZCA9IGZhbHNlOwogCi0JaWYgKHNzY2FuZihkYXRhLCAicGlkPSV1IiwgJnBpZCkgPT0gMSkgeworCWlmICghc3RyY21wKGRhdGEsICJhbGxvd19leGVjdXRlIikpIHsKKwkJaGVhZC0+ci5wcmludF9leGVjdXRlX29ubHkgPSB0cnVlOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJaWYgKHNzY2FuZihkYXRhLCAicGlkPSV1IiwgJnBpZCkgPT0gMSB8fAorCSAgICAoZ2xvYmFsX3BpZCA9IHRydWUsIHNzY2FuZihkYXRhLCAiZ2xvYmFsLXBpZD0ldSIsICZwaWQpID09IDEpKSB7CiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKIAkJcmN1X3JlYWRfbG9jaygpOwogCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwotCQlwID0gZmluZF90YXNrX2J5X3ZwaWQocGlkKTsKKwkJaWYgKGdsb2JhbF9waWQpCisJCQlwID0gZmluZF90YXNrX2J5X3BpZF9ucyhwaWQsICZpbml0X3BpZF9ucyk7CisJCWVsc2UKKwkJCXAgPSBmaW5kX3Rhc2tfYnlfdnBpZChwaWQpOwogCQlpZiAocCkKIAkJCWRvbWFpbiA9IHRvbW95b19yZWFsX2RvbWFpbihwKTsKIAkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9IGVsc2UgaWYgKCFzdHJuY21wKGRhdGEsICJkb21haW49IiwgNykpIHsKLQkJaWYgKHRvbW95b19pc19kb21haW5fZGVmKGRhdGEgKyA3KSkKKwkJaWYgKHRvbW95b19kb21haW5fZGVmKGRhdGEgKyA3KSkKIAkJCWRvbWFpbiA9IHRvbW95b19maW5kX2RvbWFpbihkYXRhICsgNyk7CiAJfSBlbHNlCiAJCXJldHVybiBmYWxzZTsKQEAgLTEzMTgsMjQgKzc2NiwxMyBAQAogCS8qIEFjY2Vzc2luZyByZWFkX2J1ZiBpcyBzYWZlIGJlY2F1c2UgaGVhZC0+aW9fc2VtIGlzIGhlbGQuICovCiAJaWYgKCFoZWFkLT5yZWFkX2J1ZikKIAkJcmV0dXJuIHRydWU7IC8qIERvIG5vdGhpbmcgaWYgb3BlbihPX1dST05MWSkuICovCi0JaGVhZC0+cmVhZF9hdmFpbCA9IDA7CisJbWVtc2V0KCZoZWFkLT5yLCAwLCBzaXplb2YoaGVhZC0+cikpOworCWhlYWQtPnIucHJpbnRfdGhpc19kb21haW5fb25seSA9IHRydWU7CisJaGVhZC0+ci5lb2YgPSAhZG9tYWluOworCWhlYWQtPnIuZG9tYWluID0gJmRvbWFpbi0+bGlzdDsKIAl0b21veW9faW9fcHJpbnRmKGhlYWQsICIjIHNlbGVjdCAlc1xuIiwgZGF0YSk7Ci0JaGVhZC0+cmVhZF9zaW5nbGVfZG9tYWluID0gdHJ1ZTsKLQloZWFkLT5yZWFkX2VvZiA9ICFkb21haW47Ci0JaWYgKGRvbWFpbikgewotCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkOwotCQloZWFkLT5yZWFkX3ZhcjEgPSBOVUxMOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7Ci0JCQlpZiAoZCA9PSBkb21haW4pCi0JCQkJYnJlYWs7Ci0JCQloZWFkLT5yZWFkX3ZhcjEgPSAmZC0+bGlzdDsKLQkJfQotCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOwotCQloZWFkLT5yZWFkX2JpdCA9IDA7Ci0JCWhlYWQtPnJlYWRfc3RlcCA9IDA7Ci0JCWlmIChkb21haW4tPmlzX2RlbGV0ZWQpCi0JCQl0b21veW9faW9fcHJpbnRmKGhlYWQsICIjIFRoaXMgaXMgYSBkZWxldGVkIGRvbWFpbi5cbiIpOwotCX0KKwlpZiAoZG9tYWluICYmIGRvbWFpbi0+aXNfZGVsZXRlZCkKKwkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiIyBUaGlzIGlzIGEgZGVsZXRlZCBkb21haW4uXG4iKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTM3Myw3ICs4MTAsNyBAQAogfQogCiAvKioKLSAqIHRvbW95b193cml0ZV9kb21haW5fcG9saWN5IC0gV3JpdGUgZG9tYWluIHBvbGljeS4KKyAqIHRvbW95b193cml0ZV9kb21haW4yIC0gV3JpdGUgZG9tYWluIHBvbGljeS4KICAqCiAgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgogICoKQEAgLTEzODEsNyArODE4LDI0IEBACiAgKgogICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwotc3RhdGljIGludCB0b21veW9fd3JpdGVfZG9tYWluX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3N0YXRpYyBpbnQgdG9tb3lvX3dyaXRlX2RvbWFpbjIoY2hhciAqZGF0YSwgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJCWNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfQUxMT1dfTU9VTlQpKQorCQlyZXR1cm4gdG9tb3lvX3dyaXRlX21vdW50KGRhdGEsIGRvbWFpbiwgaXNfZGVsZXRlKTsKKwlyZXR1cm4gdG9tb3lvX3dyaXRlX2ZpbGUoZGF0YSwgZG9tYWluLCBpc19kZWxldGUpOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9kb21haW4gLSBXcml0ZSBkb21haW4gcG9saWN5LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgorICovCitzdGF0aWMgaW50IHRvbW95b193cml0ZV9kb21haW4oc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCiB7CiAJY2hhciAqZGF0YSA9IGhlYWQtPndyaXRlX2J1ZjsKIAlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4gPSBoZWFkLT53cml0ZV92YXIxOwpAQCAtMTM5MywxOSArODQ3LDE5IEBACiAJCWlzX2RlbGV0ZSA9IHRydWU7CiAJZWxzZSBpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX1NFTEVDVCkpCiAJCWlzX3NlbGVjdCA9IHRydWU7Ci0JaWYgKGlzX3NlbGVjdCAmJiB0b21veW9faXNfc2VsZWN0X29uZShoZWFkLCBkYXRhKSkKKwlpZiAoaXNfc2VsZWN0ICYmIHRvbW95b19zZWxlY3Rfb25lKGhlYWQsIGRhdGEpKQogCQlyZXR1cm4gMDsKIAkvKiBEb24ndCBhbGxvdyB1cGRhdGluZyBwb2xpY2llcyBieSBub24gbWFuYWdlciBwcm9ncmFtcy4gKi8KLQlpZiAoIXRvbW95b19pc19wb2xpY3lfbWFuYWdlcigpKQorCWlmICghdG9tb3lvX21hbmFnZXIoKSkKIAkJcmV0dXJuIC1FUEVSTTsKLQlpZiAodG9tb3lvX2lzX2RvbWFpbl9kZWYoZGF0YSkpIHsKKwlpZiAodG9tb3lvX2RvbWFpbl9kZWYoZGF0YSkpIHsKIAkJZG9tYWluID0gTlVMTDsKIAkJaWYgKGlzX2RlbGV0ZSkKIAkJCXRvbW95b19kZWxldGVfZG9tYWluKGRhdGEpOwogCQllbHNlIGlmIChpc19zZWxlY3QpCiAJCQlkb21haW4gPSB0b21veW9fZmluZF9kb21haW4oZGF0YSk7CiAJCWVsc2UKLQkJCWRvbWFpbiA9IHRvbW95b19maW5kX29yX2Fzc2lnbl9uZXdfZG9tYWluKGRhdGEsIDApOworCQkJZG9tYWluID0gdG9tb3lvX2Fzc2lnbl9kb21haW4oZGF0YSwgMCk7CiAJCWhlYWQtPndyaXRlX3ZhcjEgPSBkb21haW47CiAJCXJldHVybiAwOwogCX0KQEAgLTE0MjIsMTc5ICs4NzYsMTk4IEBACiAJCWRvbWFpbi0+aWdub3JlX2dsb2JhbF9hbGxvd19yZWFkID0gIWlzX2RlbGV0ZTsKIAkJcmV0dXJuIDA7CiAJfQotCXJldHVybiB0b21veW9fd3JpdGVfZmlsZV9wb2xpY3koZGF0YSwgZG9tYWluLCBpc19kZWxldGUpOworCWlmICghc3RyY21wKGRhdGEsIFRPTU9ZT19LRVlXT1JEX1FVT1RBX0VYQ0VFREVEKSkgeworCQlkb21haW4tPnF1b3RhX3dhcm5lZCA9ICFpc19kZWxldGU7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChkYXRhLCBUT01PWU9fS0VZV09SRF9UUkFOU0lUSU9OX0ZBSUxFRCkpIHsKKwkJZG9tYWluLT50cmFuc2l0aW9uX2ZhaWxlZCA9ICFpc19kZWxldGU7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gdG9tb3lvX3dyaXRlX2RvbWFpbjIoZGF0YSwgZG9tYWluLCBpc19kZWxldGUpOwogfQogCiAvKioKLSAqIHRvbW95b19wcmludF9wYXRoX2FjbCAtIFByaW50IGEgc2luZ2xlIHBhdGggQUNMIGVudHJ5LgorICogdG9tb3lvX2ZucyAtIEZpbmQgbmV4dCBzZXQgYml0LgogICoKLSAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCi0gKiBAcHRyOiAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19wYXRoX2FjbCIuCisgKiBAcGVybTogOCBiaXRzIHZhbHVlLgorICogQGJpdDogIEZpcnN0IGJpdCB0byBmaW5kLgogICoKLSAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKiBSZXR1cm5zIG5leHQgb24tYml0IG9uIHN1Y2Nlc3MsIDggb3RoZXJ3aXNlLgogICovCi1zdGF0aWMgYm9vbCB0b21veW9fcHJpbnRfcGF0aF9hY2woc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsCi0JCQkJICBzdHJ1Y3QgdG9tb3lvX3BhdGhfYWNsICpwdHIpCitzdGF0aWMgdTggdG9tb3lvX2Zucyhjb25zdCB1OCBwZXJtLCB1OCBiaXQpCiB7Ci0JaW50IHBvczsKLQl1OCBiaXQ7Ci0JY29uc3QgdTMyIHBlcm0gPSBwdHItPnBlcm0gfCAoKCh1MzIpIHB0ci0+cGVybV9oaWdoKSA8PCAxNik7Ci0KLQlmb3IgKGJpdCA9IGhlYWQtPnJlYWRfYml0OyBiaXQgPCBUT01PWU9fTUFYX1BBVEhfT1BFUkFUSU9OOyBiaXQrKykgewotCQlpZiAoIShwZXJtICYgKDEgPDwgYml0KSkpCi0JCQljb250aW51ZTsKLQkJLyogUHJpbnQgInJlYWQvd3JpdGUiIGluc3RlYWQgb2YgInJlYWQiIGFuZCAid3JpdGUiLiAqLwotCQlpZiAoKGJpdCA9PSBUT01PWU9fVFlQRV9SRUFEIHx8IGJpdCA9PSBUT01PWU9fVFlQRV9XUklURSkKLQkJICAgICYmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURSkpKQotCQkJY29udGludWU7Ci0JCXBvcyA9IGhlYWQtPnJlYWRfYXZhaWw7Ci0JCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiYWxsb3dfJXMgIiwKLQkJCQkgICAgICB0b21veW9fcGF0aDJrZXl3b3JkKGJpdCkpIHx8Ci0JCSAgICAhdG9tb3lvX3ByaW50X25hbWVfdW5pb24oaGVhZCwgJnB0ci0+bmFtZSkgfHwKLQkJICAgICF0b21veW9faW9fcHJpbnRmKGhlYWQsICJcbiIpKQotCQkJZ290byBvdXQ7Ci0JfQotCWhlYWQtPnJlYWRfYml0ID0gMDsKLQlyZXR1cm4gdHJ1ZTsKLSBvdXQ6Ci0JaGVhZC0+cmVhZF9iaXQgPSBiaXQ7Ci0JaGVhZC0+cmVhZF9hdmFpbCA9IHBvczsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLS8qKgotICogdG9tb3lvX3ByaW50X3BhdGgyX2FjbCAtIFByaW50IGEgZG91YmxlIHBhdGggQUNMIGVudHJ5LgotICoKLSAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCi0gKiBAcHRyOiAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19wYXRoMl9hY2wiLgotICoKLSAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCi0gKi8KLXN0YXRpYyBib29sIHRvbW95b19wcmludF9wYXRoMl9hY2woc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsCi0JCQkJICAgc3RydWN0IHRvbW95b19wYXRoMl9hY2wgKnB0cikKLXsKLQlpbnQgcG9zOwotCWNvbnN0IHU4IHBlcm0gPSBwdHItPnBlcm07Ci0JdTggYml0OwotCi0JZm9yIChiaXQgPSBoZWFkLT5yZWFkX2JpdDsgYml0IDwgVE9NT1lPX01BWF9QQVRIMl9PUEVSQVRJT047IGJpdCsrKSB7Ci0JCWlmICghKHBlcm0gJiAoMSA8PCBiaXQpKSkKLQkJCWNvbnRpbnVlOwotCQlwb3MgPSBoZWFkLT5yZWFkX2F2YWlsOwotCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgImFsbG93XyVzICIsCi0JCQkJICAgICAgdG9tb3lvX3BhdGgyMmtleXdvcmQoYml0KSkgfHwKLQkJICAgICF0b21veW9fcHJpbnRfbmFtZV91bmlvbihoZWFkLCAmcHRyLT5uYW1lMSkgfHwKLQkJICAgICF0b21veW9fcHJpbnRfbmFtZV91bmlvbihoZWFkLCAmcHRyLT5uYW1lMikgfHwKLQkJICAgICF0b21veW9faW9fcHJpbnRmKGhlYWQsICJcbiIpKQotCQkJZ290byBvdXQ7Ci0JfQotCWhlYWQtPnJlYWRfYml0ID0gMDsKLQlyZXR1cm4gdHJ1ZTsKLSBvdXQ6Ci0JaGVhZC0+cmVhZF9iaXQgPSBiaXQ7Ci0JaGVhZC0+cmVhZF9hdmFpbCA9IHBvczsKLQlyZXR1cm4gZmFsc2U7CisJZm9yICggOyBiaXQgPCA4OyBiaXQrKykKKwkJaWYgKHBlcm0gJiAoMSA8PCBiaXQpKQorCQkJYnJlYWs7CisJcmV0dXJuIGJpdDsKIH0KIAogLyoqCiAgKiB0b21veW9fcHJpbnRfZW50cnkgLSBQcmludCBhbiBBQ0wgZW50cnkuCiAgKgogICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KLSAqIEBwdHI6ICBQb2ludGVyIHRvIGFuIEFDTCBlbnRyeS4KKyAqIEBhY2w6ICBQb2ludGVyIHRvIGFuIEFDTCBlbnRyeS4KICAqCiAgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgogICovCiBzdGF0aWMgYm9vbCB0b21veW9fcHJpbnRfZW50cnkoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsCi0JCQkgICAgICAgc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyKQorCQkJICAgICAgIHN0cnVjdCB0b21veW9fYWNsX2luZm8gKmFjbCkKIHsKLQljb25zdCB1OCBhY2xfdHlwZSA9IHB0ci0+dHlwZTsKKwljb25zdCB1OCBhY2xfdHlwZSA9IGFjbC0+dHlwZTsKKwl1OCBiaXQ7CiAKLQlpZiAoYWNsX3R5cGUgPT0gVE9NT1lPX1RZUEVfUEFUSF9BQ0wpIHsKLQkJc3RydWN0IHRvbW95b19wYXRoX2FjbCAqYWNsCi0JCQk9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fcGF0aF9hY2wsIGhlYWQpOwotCQlyZXR1cm4gdG9tb3lvX3ByaW50X3BhdGhfYWNsKGhlYWQsIGFjbCk7CisJaWYgKGFjbC0+aXNfZGVsZXRlZCkKKwkJcmV0dXJuIHRydWU7CisgbmV4dDoKKwliaXQgPSBoZWFkLT5yLmJpdDsKKwlpZiAoIXRvbW95b19mbHVzaChoZWFkKSkKKwkJcmV0dXJuIGZhbHNlOworCWVsc2UgaWYgKGFjbF90eXBlID09IFRPTU9ZT19UWVBFX1BBVEhfQUNMKSB7CisJCXN0cnVjdCB0b21veW9fcGF0aF9hY2wgKnB0ciA9CisJCQljb250YWluZXJfb2YoYWNsLCB0eXBlb2YoKnB0ciksIGhlYWQpOworCQljb25zdCB1MTYgcGVybSA9IHB0ci0+cGVybTsKKwkJZm9yICggOyBiaXQgPCBUT01PWU9fTUFYX1BBVEhfT1BFUkFUSU9OOyBiaXQrKykgeworCQkJaWYgKCEocGVybSAmICgxIDw8IGJpdCkpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGhlYWQtPnIucHJpbnRfZXhlY3V0ZV9vbmx5ICYmCisJCQkgICAgYml0ICE9IFRPTU9ZT19UWVBFX0VYRUNVVEUpCisJCQkJY29udGludWU7CisJCQkvKiBQcmludCAicmVhZC93cml0ZSIgaW5zdGVhZCBvZiAicmVhZCIgYW5kICJ3cml0ZSIuICovCisJCQlpZiAoKGJpdCA9PSBUT01PWU9fVFlQRV9SRUFEIHx8CisJCQkgICAgIGJpdCA9PSBUT01PWU9fVFlQRV9XUklURSkKKwkJCSAgICAmJiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEUpKSkKKwkJCQljb250aW51ZTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChiaXQgPj0gVE9NT1lPX01BWF9QQVRIX09QRVJBVElPTikKKwkJCWdvdG8gZG9uZTsKKwkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiYWxsb3dfJXMiLCB0b21veW9fcGF0aF9rZXl3b3JkW2JpdF0pOworCQl0b21veW9fcHJpbnRfbmFtZV91bmlvbihoZWFkLCAmcHRyLT5uYW1lKTsKKwl9IGVsc2UgaWYgKGhlYWQtPnIucHJpbnRfZXhlY3V0ZV9vbmx5KSB7CisJCXJldHVybiB0cnVlOworCX0gZWxzZSBpZiAoYWNsX3R5cGUgPT0gVE9NT1lPX1RZUEVfUEFUSDJfQUNMKSB7CisJCXN0cnVjdCB0b21veW9fcGF0aDJfYWNsICpwdHIgPQorCQkJY29udGFpbmVyX29mKGFjbCwgdHlwZW9mKCpwdHIpLCBoZWFkKTsKKwkJYml0ID0gdG9tb3lvX2ZucyhwdHItPnBlcm0sIGJpdCk7CisJCWlmIChiaXQgPj0gVE9NT1lPX01BWF9QQVRIMl9PUEVSQVRJT04pCisJCQlnb3RvIGRvbmU7CisJCXRvbW95b19pb19wcmludGYoaGVhZCwgImFsbG93XyVzIiwgdG9tb3lvX3BhdGgyX2tleXdvcmRbYml0XSk7CisJCXRvbW95b19wcmludF9uYW1lX3VuaW9uKGhlYWQsICZwdHItPm5hbWUxKTsKKwkJdG9tb3lvX3ByaW50X25hbWVfdW5pb24oaGVhZCwgJnB0ci0+bmFtZTIpOworCX0gZWxzZSBpZiAoYWNsX3R5cGUgPT0gVE9NT1lPX1RZUEVfUEFUSF9OVU1CRVJfQUNMKSB7CisJCXN0cnVjdCB0b21veW9fcGF0aF9udW1iZXJfYWNsICpwdHIgPQorCQkJY29udGFpbmVyX29mKGFjbCwgdHlwZW9mKCpwdHIpLCBoZWFkKTsKKwkJYml0ID0gdG9tb3lvX2ZucyhwdHItPnBlcm0sIGJpdCk7CisJCWlmIChiaXQgPj0gVE9NT1lPX01BWF9QQVRIX05VTUJFUl9PUEVSQVRJT04pCisJCQlnb3RvIGRvbmU7CisJCXRvbW95b19pb19wcmludGYoaGVhZCwgImFsbG93XyVzIiwKKwkJCQkgdG9tb3lvX3BhdGhfbnVtYmVyX2tleXdvcmRbYml0XSk7CisJCXRvbW95b19wcmludF9uYW1lX3VuaW9uKGhlYWQsICZwdHItPm5hbWUpOworCQl0b21veW9fcHJpbnRfbnVtYmVyX3VuaW9uKGhlYWQsICZwdHItPm51bWJlcik7CisJfSBlbHNlIGlmIChhY2xfdHlwZSA9PSBUT01PWU9fVFlQRV9NS0RFVl9BQ0wpIHsKKwkJc3RydWN0IHRvbW95b19ta2Rldl9hY2wgKnB0ciA9CisJCQljb250YWluZXJfb2YoYWNsLCB0eXBlb2YoKnB0ciksIGhlYWQpOworCQliaXQgPSB0b21veW9fZm5zKHB0ci0+cGVybSwgYml0KTsKKwkJaWYgKGJpdCA+PSBUT01PWU9fTUFYX01LREVWX09QRVJBVElPTikKKwkJCWdvdG8gZG9uZTsKKwkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiYWxsb3dfJXMiLCB0b21veW9fbWtkZXZfa2V5d29yZFtiaXRdKTsKKwkJdG9tb3lvX3ByaW50X25hbWVfdW5pb24oaGVhZCwgJnB0ci0+bmFtZSk7CisJCXRvbW95b19wcmludF9udW1iZXJfdW5pb24oaGVhZCwgJnB0ci0+bW9kZSk7CisJCXRvbW95b19wcmludF9udW1iZXJfdW5pb24oaGVhZCwgJnB0ci0+bWFqb3IpOworCQl0b21veW9fcHJpbnRfbnVtYmVyX3VuaW9uKGhlYWQsICZwdHItPm1pbm9yKTsKKwl9IGVsc2UgaWYgKGFjbF90eXBlID09IFRPTU9ZT19UWVBFX01PVU5UX0FDTCkgeworCQlzdHJ1Y3QgdG9tb3lvX21vdW50X2FjbCAqcHRyID0KKwkJCWNvbnRhaW5lcl9vZihhY2wsIHR5cGVvZigqcHRyKSwgaGVhZCk7CisJCXRvbW95b19pb19wcmludGYoaGVhZCwgImFsbG93X21vdW50Iik7CisJCXRvbW95b19wcmludF9uYW1lX3VuaW9uKGhlYWQsICZwdHItPmRldl9uYW1lKTsKKwkJdG9tb3lvX3ByaW50X25hbWVfdW5pb24oaGVhZCwgJnB0ci0+ZGlyX25hbWUpOworCQl0b21veW9fcHJpbnRfbmFtZV91bmlvbihoZWFkLCAmcHRyLT5mc190eXBlKTsKKwkJdG9tb3lvX3ByaW50X251bWJlcl91bmlvbihoZWFkLCAmcHRyLT5mbGFncyk7CiAJfQotCWlmIChhY2xfdHlwZSA9PSBUT01PWU9fVFlQRV9QQVRIMl9BQ0wpIHsKLQkJc3RydWN0IHRvbW95b19wYXRoMl9hY2wgKmFjbAotCQkJPSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX3BhdGgyX2FjbCwgaGVhZCk7Ci0JCXJldHVybiB0b21veW9fcHJpbnRfcGF0aDJfYWNsKGhlYWQsIGFjbCk7Ci0JfQotCUJVRygpOyAvKiBUaGlzIG11c3Qgbm90IGhhcHBlbi4gKi8KLQlyZXR1cm4gZmFsc2U7CisJaGVhZC0+ci5iaXQgPSBiaXQgKyAxOworCXRvbW95b19pb19wcmludGYoaGVhZCwgIlxuIik7CisJaWYgKGFjbF90eXBlICE9IFRPTU9ZT19UWVBFX01PVU5UX0FDTCkKKwkJZ290byBuZXh0OworIGRvbmU6CisJaGVhZC0+ci5iaXQgPSAwOworCXJldHVybiB0cnVlOwogfQogCiAvKioKLSAqIHRvbW95b19yZWFkX2RvbWFpbl9wb2xpY3kgLSBSZWFkIGRvbWFpbiBwb2xpY3kuCisgKiB0b21veW9fcmVhZF9kb21haW4yIC0gUmVhZCBkb21haW4gcG9saWN5LgorICoKKyAqIEBoZWFkOiAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqIEBkb21haW46IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCisgKgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgdG9tb3lvX3JlYWRfZG9tYWluMihzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCwKKwkJCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4pCit7CisJbGlzdF9mb3JfZWFjaF9jb29raWUoaGVhZC0+ci5hY2wsICZkb21haW4tPmFjbF9pbmZvX2xpc3QpIHsKKwkJc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyID0KKwkJCWxpc3RfZW50cnkoaGVhZC0+ci5hY2wsIHR5cGVvZigqcHRyKSwgbGlzdCk7CisJCWlmICghdG9tb3lvX3ByaW50X2VudHJ5KGhlYWQsIHB0cikpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCWhlYWQtPnIuYWNsID0gTlVMTDsKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9kb21haW4gLSBSZWFkIGRvbWFpbiBwb2xpY3kuCiAgKgogICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KICAqCi0gKiBSZXR1cm5zIDAuCi0gKgogICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwotc3RhdGljIGludCB0b21veW9fcmVhZF9kb21haW5fcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQorc3RhdGljIHZvaWQgdG9tb3lvX3JlYWRfZG9tYWluKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKmRwb3M7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqYXBvczsKLQlib29sIGRvbmUgPSB0cnVlOwotCi0JaWYgKGhlYWQtPnJlYWRfZW9mKQotCQlyZXR1cm4gMDsKLQlpZiAoaGVhZC0+cmVhZF9zdGVwID09IDApCi0JCWhlYWQtPnJlYWRfc3RlcCA9IDE7Ci0JbGlzdF9mb3JfZWFjaF9jb29raWUoZHBvcywgaGVhZC0+cmVhZF92YXIxLCAmdG9tb3lvX2RvbWFpbl9saXN0KSB7Ci0JCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbjsKLQkJY29uc3QgY2hhciAqcXVvdGFfZXhjZWVkZWQgPSAiIjsKLQkJY29uc3QgY2hhciAqdHJhbnNpdGlvbl9mYWlsZWQgPSAiIjsKLQkJY29uc3QgY2hhciAqaWdub3JlX2dsb2JhbF9hbGxvd19yZWFkID0gIiI7Ci0JCWRvbWFpbiA9IGxpc3RfZW50cnkoZHBvcywgc3RydWN0IHRvbW95b19kb21haW5faW5mbywgbGlzdCk7Ci0JCWlmIChoZWFkLT5yZWFkX3N0ZXAgIT0gMSkKLQkJCWdvdG8gYWNsX2xvb3A7Ci0JCWlmIChkb21haW4tPmlzX2RlbGV0ZWQgJiYgIWhlYWQtPnJlYWRfc2luZ2xlX2RvbWFpbikKLQkJCWNvbnRpbnVlOwotCQkvKiBQcmludCBkb21haW5uYW1lIGFuZCBmbGFncy4gKi8KLQkJaWYgKGRvbWFpbi0+cXVvdGFfd2FybmVkKQotCQkJcXVvdGFfZXhjZWVkZWQgPSAicXVvdGFfZXhjZWVkZWRcbiI7Ci0JCWlmIChkb21haW4tPnRyYW5zaXRpb25fZmFpbGVkKQotCQkJdHJhbnNpdGlvbl9mYWlsZWQgPSAidHJhbnNpdGlvbl9mYWlsZWRcbiI7Ci0JCWlmIChkb21haW4tPmlnbm9yZV9nbG9iYWxfYWxsb3dfcmVhZCkKLQkJCWlnbm9yZV9nbG9iYWxfYWxsb3dfcmVhZAotCQkJCT0gVE9NT1lPX0tFWVdPUkRfSUdOT1JFX0dMT0JBTF9BTExPV19SRUFEICJcbiI7Ci0JCWRvbmUgPSB0b21veW9faW9fcHJpbnRmKGhlYWQsICIlc1xuIiBUT01PWU9fS0VZV09SRF9VU0VfUFJPRklMRQotCQkJCQkiJXVcbiVzJXMlc1xuIiwKLQkJCQkJZG9tYWluLT5kb21haW5uYW1lLT5uYW1lLAotCQkJCQlkb21haW4tPnByb2ZpbGUsIHF1b3RhX2V4Y2VlZGVkLAotCQkJCQl0cmFuc2l0aW9uX2ZhaWxlZCwKLQkJCQkJaWdub3JlX2dsb2JhbF9hbGxvd19yZWFkKTsKLQkJaWYgKCFkb25lKQotCQkJYnJlYWs7Ci0JCWhlYWQtPnJlYWRfc3RlcCA9IDI7Ci1hY2xfbG9vcDoKLQkJaWYgKGhlYWQtPnJlYWRfc3RlcCA9PSAzKQotCQkJZ290byB0YWlsX21hcms7Ci0JCS8qIFByaW50IEFDTCBlbnRyaWVzIGluIHRoZSBkb21haW4uICovCi0JCWxpc3RfZm9yX2VhY2hfY29va2llKGFwb3MsIGhlYWQtPnJlYWRfdmFyMiwKLQkJCQkgICAgICZkb21haW4tPmFjbF9pbmZvX2xpc3QpIHsKLQkJCXN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cgotCQkJCT0gbGlzdF9lbnRyeShhcG9zLCBzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvLAotCQkJCQkgICAgIGxpc3QpOwotCQkJZG9uZSA9IHRvbW95b19wcmludF9lbnRyeShoZWFkLCBwdHIpOwotCQkJaWYgKCFkb25lKQotCQkJCWJyZWFrOworCWlmIChoZWFkLT5yLmVvZikKKwkJcmV0dXJuOworCWxpc3RfZm9yX2VhY2hfY29va2llKGhlYWQtPnIuZG9tYWluLCAmdG9tb3lvX2RvbWFpbl9saXN0KSB7CisJCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiA9CisJCQlsaXN0X2VudHJ5KGhlYWQtPnIuZG9tYWluLCB0eXBlb2YoKmRvbWFpbiksIGxpc3QpOworCQlzd2l0Y2ggKGhlYWQtPnIuc3RlcCkgeworCQljYXNlIDA6CisJCQlpZiAoZG9tYWluLT5pc19kZWxldGVkICYmCisJCQkgICAgIWhlYWQtPnIucHJpbnRfdGhpc19kb21haW5fb25seSkKKwkJCQljb250aW51ZTsKKwkJCS8qIFByaW50IGRvbWFpbm5hbWUgYW5kIGZsYWdzLiAqLworCQkJdG9tb3lvX3NldF9zdHJpbmcoaGVhZCwgZG9tYWluLT5kb21haW5uYW1lLT5uYW1lKTsKKwkJCXRvbW95b19zZXRfbGYoaGVhZCk7CisJCQl0b21veW9faW9fcHJpbnRmKGhlYWQsCisJCQkJCSBUT01PWU9fS0VZV09SRF9VU0VfUFJPRklMRSAiJXVcbiIsCisJCQkJCSBkb21haW4tPnByb2ZpbGUpOworCQkJaWYgKGRvbWFpbi0+cXVvdGFfd2FybmVkKQorCQkJCXRvbW95b19zZXRfc3RyaW5nKGhlYWQsICJxdW90YV9leGNlZWRlZFxuIik7CisJCQlpZiAoZG9tYWluLT50cmFuc2l0aW9uX2ZhaWxlZCkKKwkJCQl0b21veW9fc2V0X3N0cmluZyhoZWFkLCAidHJhbnNpdGlvbl9mYWlsZWRcbiIpOworCQkJaWYgKGRvbWFpbi0+aWdub3JlX2dsb2JhbF9hbGxvd19yZWFkKQorCQkJCXRvbW95b19zZXRfc3RyaW5nKGhlYWQsCisJCQkJICAgICAgIFRPTU9ZT19LRVlXT1JEX0lHTk9SRV9HTE9CQUxfQUxMT1dfUkVBRAorCQkJCQkJICAiXG4iKTsKKwkJCWhlYWQtPnIuc3RlcCsrOworCQkJdG9tb3lvX3NldF9sZihoZWFkKTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIDE6CisJCQlpZiAoIXRvbW95b19yZWFkX2RvbWFpbjIoaGVhZCwgZG9tYWluKSkKKwkJCQlyZXR1cm47CisJCQloZWFkLT5yLnN0ZXArKzsKKwkJCWlmICghdG9tb3lvX3NldF9sZihoZWFkKSkKKwkJCQlyZXR1cm47CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJY2FzZSAyOgorCQkJaGVhZC0+ci5zdGVwID0gMDsKKwkJCWlmIChoZWFkLT5yLnByaW50X3RoaXNfZG9tYWluX29ubHkpCisJCQkJZ290byBkb25lOwogCQl9Ci0JCWlmICghZG9uZSkKLQkJCWJyZWFrOwotCQloZWFkLT5yZWFkX3N0ZXAgPSAzOwotdGFpbF9tYXJrOgotCQlkb25lID0gdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiXG4iKTsKLQkJaWYgKCFkb25lKQotCQkJYnJlYWs7Ci0JCWhlYWQtPnJlYWRfc3RlcCA9IDE7Ci0JCWlmIChoZWFkLT5yZWFkX3NpbmdsZV9kb21haW4pCi0JCQlicmVhazsKIAl9Ci0JaGVhZC0+cmVhZF9lb2YgPSBkb25lOwotCXJldHVybiAwOworIGRvbmU6CisJaGVhZC0+ci5lb2YgPSB0cnVlOwogfQogCiAvKioKQEAgLTE2MDcsNyArMTA4MCw3IEBACiAgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gZG9pbmcKICAqCiAgKiAgICAgKCBlY2hvICJzZWxlY3QgIiAkZG9tYWlubmFtZTsgZWNobyAidXNlX3Byb2ZpbGUgIiAkcHJvZmlsZSApIHwKLSAqICAgICAvdXNyL2xpYi9jY3MvbG9hZHBvbGljeSAtZAorICogICAgIC91c3Ivc2Jpbi90b21veW8tbG9hZHBvbGljeSAtZAogICoKICAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KQEAgLTE2NDYsMjUgKzExMTksMjIgQEAKICAqCiAgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCi1zdGF0aWMgaW50IHRvbW95b19yZWFkX2RvbWFpbl9wcm9maWxlKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQorc3RhdGljIHZvaWQgdG9tb3lvX3JlYWRfZG9tYWluX3Byb2ZpbGUoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zOwotCWJvb2wgZG9uZSA9IHRydWU7Ci0KLQlpZiAoaGVhZC0+cmVhZF9lb2YpCi0JCXJldHVybiAwOwotCWxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgaGVhZC0+cmVhZF92YXIxLCAmdG9tb3lvX2RvbWFpbl9saXN0KSB7Ci0JCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbjsKLQkJZG9tYWluID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8sIGxpc3QpOworCWlmIChoZWFkLT5yLmVvZikKKwkJcmV0dXJuOworCWxpc3RfZm9yX2VhY2hfY29va2llKGhlYWQtPnIuZG9tYWluLCAmdG9tb3lvX2RvbWFpbl9saXN0KSB7CisJCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiA9CisJCQlsaXN0X2VudHJ5KGhlYWQtPnIuZG9tYWluLCB0eXBlb2YoKmRvbWFpbiksIGxpc3QpOwogCQlpZiAoZG9tYWluLT5pc19kZWxldGVkKQogCQkJY29udGludWU7Ci0JCWRvbmUgPSB0b21veW9faW9fcHJpbnRmKGhlYWQsICIldSAlc1xuIiwgZG9tYWluLT5wcm9maWxlLAotCQkJCQlkb21haW4tPmRvbWFpbm5hbWUtPm5hbWUpOwotCQlpZiAoIWRvbmUpCi0JCQlicmVhazsKKwkJaWYgKCF0b21veW9fZmx1c2goaGVhZCkpCisJCQlyZXR1cm47CisJCXRvbW95b19pb19wcmludGYoaGVhZCwgIiV1ICIsIGRvbWFpbi0+cHJvZmlsZSk7CisJCXRvbW95b19zZXRfc3RyaW5nKGhlYWQsIGRvbWFpbi0+ZG9tYWlubmFtZS0+bmFtZSk7CisJCXRvbW95b19zZXRfbGYoaGVhZCk7CiAJfQotCWhlYWQtPnJlYWRfZW9mID0gZG9uZTsKLQlyZXR1cm4gMDsKKwloZWFkLT5yLmVvZiA9IHRydWU7CiB9CiAKIC8qKgpAQCAtMTY3NiwxMSArMTE0Niw3IEBACiAgKi8KIHN0YXRpYyBpbnQgdG9tb3lvX3dyaXRlX3BpZChzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKIHsKLQl1bnNpZ25lZCBsb25nIHBpZDsKLQkvKiBObyBlcnJvciBjaGVjay4gKi8KLQlzdHJpY3Rfc3RydG91bChoZWFkLT53cml0ZV9idWYsIDEwLCAmcGlkKTsKLQloZWFkLT5yZWFkX3N0ZXAgPSAoaW50KSBwaWQ7Ci0JaGVhZC0+cmVhZF9lb2YgPSBmYWxzZTsKKwloZWFkLT5yLmVvZiA9IGZhbHNlOwogCXJldHVybiAwOwogfQogCkBAIC0xNjk0LDI5ICsxMTYwLDU3IEBACiAgKiBUaGUgUElEIGlzIHNwZWNpZmllZCBieSB0b21veW9fd3JpdGVfcGlkKCkgc28gdGhhdCB0aGUgdXNlciBjYW4gb2J0YWluCiAgKiB1c2luZyByZWFkKCkvd3JpdGUoKSBpbnRlcmZhY2UgcmF0aGVyIHRoYW4gc3lzY3RsKCkgaW50ZXJmYWNlLgogICovCi1zdGF0aWMgaW50IHRvbW95b19yZWFkX3BpZChzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3N0YXRpYyB2b2lkIHRvbW95b19yZWFkX3BpZChzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKIHsKLQlpZiAoaGVhZC0+cmVhZF9hdmFpbCA9PSAwICYmICFoZWFkLT5yZWFkX2VvZikgewotCQljb25zdCBpbnQgcGlkID0gaGVhZC0+cmVhZF9zdGVwOwotCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7Ci0JCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiA9IE5VTEw7Ci0JCXJjdV9yZWFkX2xvY2soKTsKLQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQkJcCA9IGZpbmRfdGFza19ieV92cGlkKHBpZCk7Ci0JCWlmIChwKQotCQkJZG9tYWluID0gdG9tb3lvX3JlYWxfZG9tYWluKHApOwotCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlpZiAoZG9tYWluKQotCQkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiJWQgJXUgJXMiLCBwaWQsIGRvbWFpbi0+cHJvZmlsZSwKLQkJCQkJIGRvbWFpbi0+ZG9tYWlubmFtZS0+bmFtZSk7Ci0JCWhlYWQtPnJlYWRfZW9mID0gdHJ1ZTsKKwljaGFyICpidWYgPSBoZWFkLT53cml0ZV9idWY7CisJYm9vbCBnbG9iYWxfcGlkID0gZmFsc2U7CisJdW5zaWduZWQgaW50IHBpZDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluID0gTlVMTDsKKworCS8qIEFjY2Vzc2luZyB3cml0ZV9idWYgaXMgc2FmZSBiZWNhdXNlIGhlYWQtPmlvX3NlbSBpcyBoZWxkLiAqLworCWlmICghYnVmKSB7CisJCWhlYWQtPnIuZW9mID0gdHJ1ZTsKKwkJcmV0dXJuOyAvKiBEbyBub3RoaW5nIGlmIG9wZW4oT19SRE9OTFkpLiAqLwogCX0KLQlyZXR1cm4gMDsKKwlpZiAoaGVhZC0+ci53X3BvcyB8fCBoZWFkLT5yLmVvZikKKwkJcmV0dXJuOworCWhlYWQtPnIuZW9mID0gdHJ1ZTsKKwlpZiAodG9tb3lvX3N0cl9zdGFydHMoJmJ1ZiwgImdsb2JhbC1waWQgIikpCisJCWdsb2JhbF9waWQgPSB0cnVlOworCXBpZCA9ICh1bnNpZ25lZCBpbnQpIHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworCXJjdV9yZWFkX2xvY2soKTsKKwlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCWlmIChnbG9iYWxfcGlkKQorCQlwID0gZmluZF90YXNrX2J5X3BpZF9ucyhwaWQsICZpbml0X3BpZF9ucyk7CisJZWxzZQorCQlwID0gZmluZF90YXNrX2J5X3ZwaWQocGlkKTsKKwlpZiAocCkKKwkJZG9tYWluID0gdG9tb3lvX3JlYWxfZG9tYWluKHApOworCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlpZiAoIWRvbWFpbikKKwkJcmV0dXJuOworCXRvbW95b19pb19wcmludGYoaGVhZCwgIiV1ICV1ICIsIHBpZCwgZG9tYWluLT5wcm9maWxlKTsKKwl0b21veW9fc2V0X3N0cmluZyhoZWFkLCBkb21haW4tPmRvbWFpbm5hbWUtPm5hbWUpOwogfQogCitzdGF0aWMgY29uc3QgY2hhciAqdG9tb3lvX3RyYW5zaXRpb25fdHlwZVtUT01PWU9fTUFYX1RSQU5TSVRJT05fVFlQRV0gPSB7CisJW1RPTU9ZT19UUkFOU0lUSU9OX0NPTlRST0xfTk9fSU5JVElBTElaRV0KKwk9IFRPTU9ZT19LRVlXT1JEX05PX0lOSVRJQUxJWkVfRE9NQUlOLAorCVtUT01PWU9fVFJBTlNJVElPTl9DT05UUk9MX0lOSVRJQUxJWkVdCisJPSBUT01PWU9fS0VZV09SRF9JTklUSUFMSVpFX0RPTUFJTiwKKwlbVE9NT1lPX1RSQU5TSVRJT05fQ09OVFJPTF9OT19LRUVQXSA9IFRPTU9ZT19LRVlXT1JEX05PX0tFRVBfRE9NQUlOLAorCVtUT01PWU9fVFJBTlNJVElPTl9DT05UUk9MX0tFRVBdID0gVE9NT1lPX0tFWVdPUkRfS0VFUF9ET01BSU4KK307CisKK3N0YXRpYyBjb25zdCBjaGFyICp0b21veW9fZ3JvdXBfbmFtZVtUT01PWU9fTUFYX0dST1VQXSA9IHsKKwlbVE9NT1lPX1BBVEhfR1JPVVBdID0gVE9NT1lPX0tFWVdPUkRfUEFUSF9HUk9VUCwKKwlbVE9NT1lPX05VTUJFUl9HUk9VUF0gPSBUT01PWU9fS0VZV09SRF9OVU1CRVJfR1JPVVAKK307CisKIC8qKgotICogdG9tb3lvX3dyaXRlX2V4Y2VwdGlvbl9wb2xpY3kgLSBXcml0ZSBleGNlcHRpb24gcG9saWN5LgorICogdG9tb3lvX3dyaXRlX2V4Y2VwdGlvbiAtIFdyaXRlIGV4Y2VwdGlvbiBwb2xpY3kuCiAgKgogICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KICAqCkBAIC0xNzI0LDE4NiArMTIxOCw1MjMgQEAKICAqCiAgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCi1zdGF0aWMgaW50IHRvbW95b193cml0ZV9leGNlcHRpb25fcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQorc3RhdGljIGludCB0b21veW9fd3JpdGVfZXhjZXB0aW9uKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQogewogCWNoYXIgKmRhdGEgPSBoZWFkLT53cml0ZV9idWY7CiAJYm9vbCBpc19kZWxldGUgPSB0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfREVMRVRFKTsKKwl1OCBpOworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgeworCQljb25zdCBjaGFyICprZXl3b3JkOworCQlpbnQgKCp3cml0ZSkgKGNoYXIgKiwgY29uc3QgYm9vbCk7CisJfSB0b21veW9fY2FsbGJhY2tbNF0gPSB7CisJCXsgVE9NT1lPX0tFWVdPUkRfQUdHUkVHQVRPUiwgdG9tb3lvX3dyaXRlX2FnZ3JlZ2F0b3IgfSwKKwkJeyBUT01PWU9fS0VZV09SRF9GSUxFX1BBVFRFUk4sIHRvbW95b193cml0ZV9wYXR0ZXJuIH0sCisJCXsgVE9NT1lPX0tFWVdPUkRfREVOWV9SRVdSSVRFLCB0b21veW9fd3JpdGVfbm9fcmV3cml0ZSB9LAorCQl7IFRPTU9ZT19LRVlXT1JEX0FMTE9XX1JFQUQsIHRvbW95b193cml0ZV9nbG9iYWxseV9yZWFkYWJsZSB9LAorCX07CiAKLQlpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX0tFRVBfRE9NQUlOKSkKLQkJcmV0dXJuIHRvbW95b193cml0ZV9kb21haW5fa2VlcGVyX3BvbGljeShkYXRhLCBmYWxzZSwKLQkJCQkJCQkgaXNfZGVsZXRlKTsKLQlpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX05PX0tFRVBfRE9NQUlOKSkKLQkJcmV0dXJuIHRvbW95b193cml0ZV9kb21haW5fa2VlcGVyX3BvbGljeShkYXRhLCB0cnVlLCBpc19kZWxldGUpOwotCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfSU5JVElBTElaRV9ET01BSU4pKQotCQlyZXR1cm4gdG9tb3lvX3dyaXRlX2RvbWFpbl9pbml0aWFsaXplcl9wb2xpY3koZGF0YSwgZmFsc2UsCi0JCQkJCQkJICAgICAgaXNfZGVsZXRlKTsKLQlpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX05PX0lOSVRJQUxJWkVfRE9NQUlOKSkKLQkJcmV0dXJuIHRvbW95b193cml0ZV9kb21haW5faW5pdGlhbGl6ZXJfcG9saWN5KGRhdGEsIHRydWUsCi0JCQkJCQkJICAgICAgaXNfZGVsZXRlKTsKLQlpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX0FMSUFTKSkKLQkJcmV0dXJuIHRvbW95b193cml0ZV9hbGlhc19wb2xpY3koZGF0YSwgaXNfZGVsZXRlKTsKLQlpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX0FMTE9XX1JFQUQpKQotCQlyZXR1cm4gdG9tb3lvX3dyaXRlX2dsb2JhbGx5X3JlYWRhYmxlX3BvbGljeShkYXRhLCBpc19kZWxldGUpOwotCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfRklMRV9QQVRURVJOKSkKLQkJcmV0dXJuIHRvbW95b193cml0ZV9wYXR0ZXJuX3BvbGljeShkYXRhLCBpc19kZWxldGUpOwotCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfREVOWV9SRVdSSVRFKSkKLQkJcmV0dXJuIHRvbW95b193cml0ZV9ub19yZXdyaXRlX3BvbGljeShkYXRhLCBpc19kZWxldGUpOwotCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfUEFUSF9HUk9VUCkpCi0JCXJldHVybiB0b21veW9fd3JpdGVfcGF0aF9ncm91cF9wb2xpY3koZGF0YSwgaXNfZGVsZXRlKTsKKwlmb3IgKGkgPSAwOyBpIDwgVE9NT1lPX01BWF9UUkFOU0lUSU9OX1RZUEU7IGkrKykKKwkJaWYgKHRvbW95b19zdHJfc3RhcnRzKCZkYXRhLCB0b21veW9fdHJhbnNpdGlvbl90eXBlW2ldKSkKKwkJCXJldHVybiB0b21veW9fd3JpdGVfdHJhbnNpdGlvbl9jb250cm9sKGRhdGEsIGlzX2RlbGV0ZSwKKwkJCQkJCQkgICAgICAgaSk7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJaWYgKHRvbW95b19zdHJfc3RhcnRzKCZkYXRhLCB0b21veW9fY2FsbGJhY2tbaV0ua2V5d29yZCkpCisJCQlyZXR1cm4gdG9tb3lvX2NhbGxiYWNrW2ldLndyaXRlKGRhdGEsIGlzX2RlbGV0ZSk7CisJZm9yIChpID0gMDsgaSA8IFRPTU9ZT19NQVhfR1JPVVA7IGkrKykKKwkJaWYgKHRvbW95b19zdHJfc3RhcnRzKCZkYXRhLCB0b21veW9fZ3JvdXBfbmFtZVtpXSkpCisJCQlyZXR1cm4gdG9tb3lvX3dyaXRlX2dyb3VwKGRhdGEsIGlzX2RlbGV0ZSwgaSk7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIC8qKgotICogdG9tb3lvX3JlYWRfZXhjZXB0aW9uX3BvbGljeSAtIFJlYWQgZXhjZXB0aW9uIHBvbGljeS4KKyAqIHRvbW95b19yZWFkX2dyb3VwIC0gUmVhZCAic3RydWN0IHRvbW95b19wYXRoX2dyb3VwIi8ic3RydWN0IHRvbW95b19udW1iZXJfZ3JvdXAiIGxpc3QuCiAgKgogICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqIEBpZHg6ICBJbmRleCBudW1iZXIuCiAgKgotICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgb3RoZXJ3aXNlLgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KICAqCiAgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCi1zdGF0aWMgaW50IHRvbW95b19yZWFkX2V4Y2VwdGlvbl9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCitzdGF0aWMgYm9vbCB0b21veW9fcmVhZF9ncm91cChzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCwgY29uc3QgaW50IGlkeCkKIHsKLQlpZiAoIWhlYWQtPnJlYWRfZW9mKSB7Ci0JCXN3aXRjaCAoaGVhZC0+cmVhZF9zdGVwKSB7Ci0JCWNhc2UgMDoKLQkJCWhlYWQtPnJlYWRfdmFyMiA9IE5VTEw7Ci0JCQloZWFkLT5yZWFkX3N0ZXAgPSAxOwotCQljYXNlIDE6Ci0JCQlpZiAoIXRvbW95b19yZWFkX2RvbWFpbl9rZWVwZXJfcG9saWN5KGhlYWQpKQotCQkJCWJyZWFrOwotCQkJaGVhZC0+cmVhZF92YXIyID0gTlVMTDsKLQkJCWhlYWQtPnJlYWRfc3RlcCA9IDI7Ci0JCWNhc2UgMjoKLQkJCWlmICghdG9tb3lvX3JlYWRfZ2xvYmFsbHlfcmVhZGFibGVfcG9saWN5KGhlYWQpKQotCQkJCWJyZWFrOwotCQkJaGVhZC0+cmVhZF92YXIyID0gTlVMTDsKLQkJCWhlYWQtPnJlYWRfc3RlcCA9IDM7Ci0JCWNhc2UgMzoKLQkJCWhlYWQtPnJlYWRfdmFyMiA9IE5VTEw7Ci0JCQloZWFkLT5yZWFkX3N0ZXAgPSA0OwotCQljYXNlIDQ6Ci0JCQlpZiAoIXRvbW95b19yZWFkX2RvbWFpbl9pbml0aWFsaXplcl9wb2xpY3koaGVhZCkpCi0JCQkJYnJlYWs7Ci0JCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOwotCQkJaGVhZC0+cmVhZF9zdGVwID0gNTsKLQkJY2FzZSA1OgotCQkJaWYgKCF0b21veW9fcmVhZF9hbGlhc19wb2xpY3koaGVhZCkpCi0JCQkJYnJlYWs7Ci0JCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOwotCQkJaGVhZC0+cmVhZF9zdGVwID0gNjsKLQkJY2FzZSA2OgotCQkJaGVhZC0+cmVhZF92YXIyID0gTlVMTDsKLQkJCWhlYWQtPnJlYWRfc3RlcCA9IDc7Ci0JCWNhc2UgNzoKLQkJCWlmICghdG9tb3lvX3JlYWRfZmlsZV9wYXR0ZXJuKGhlYWQpKQotCQkJCWJyZWFrOwotCQkJaGVhZC0+cmVhZF92YXIyID0gTlVMTDsKLQkJCWhlYWQtPnJlYWRfc3RlcCA9IDg7Ci0JCWNhc2UgODoKLQkJCWlmICghdG9tb3lvX3JlYWRfbm9fcmV3cml0ZV9wb2xpY3koaGVhZCkpCi0JCQkJYnJlYWs7Ci0JCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOwotCQkJaGVhZC0+cmVhZF9zdGVwID0gOTsKLQkJY2FzZSA5OgotCQkJaWYgKCF0b21veW9fcmVhZF9wYXRoX2dyb3VwX3BvbGljeShoZWFkKSkKLQkJCQlicmVhazsKLQkJCWhlYWQtPnJlYWRfdmFyMSA9IE5VTEw7Ci0JCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOwotCQkJaGVhZC0+cmVhZF9zdGVwID0gMTA7Ci0JCWNhc2UgMTA6Ci0JCQloZWFkLT5yZWFkX2VvZiA9IHRydWU7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOworCWxpc3RfZm9yX2VhY2hfY29va2llKGhlYWQtPnIuZ3JvdXAsICZ0b21veW9fZ3JvdXBfbGlzdFtpZHhdKSB7CisJCXN0cnVjdCB0b21veW9fZ3JvdXAgKmdyb3VwID0KKwkJCWxpc3RfZW50cnkoaGVhZC0+ci5ncm91cCwgdHlwZW9mKCpncm91cCksIGxpc3QpOworCQlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShoZWFkLT5yLmFjbCwgJmdyb3VwLT5tZW1iZXJfbGlzdCkgeworCQkJc3RydWN0IHRvbW95b19hY2xfaGVhZCAqcHRyID0KKwkJCQlsaXN0X2VudHJ5KGhlYWQtPnIuYWNsLCB0eXBlb2YoKnB0ciksIGxpc3QpOworCQkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKKwkJCQljb250aW51ZTsKKwkJCWlmICghdG9tb3lvX2ZsdXNoKGhlYWQpKQorCQkJCXJldHVybiBmYWxzZTsKKwkJCXRvbW95b19zZXRfc3RyaW5nKGhlYWQsIHRvbW95b19ncm91cF9uYW1lW2lkeF0pOworCQkJdG9tb3lvX3NldF9zdHJpbmcoaGVhZCwgZ3JvdXAtPmdyb3VwX25hbWUtPm5hbWUpOworCQkJaWYgKGlkeCA9PSBUT01PWU9fUEFUSF9HUk9VUCkgeworCQkJCXRvbW95b19zZXRfc3BhY2UoaGVhZCk7CisJCQkJdG9tb3lvX3NldF9zdHJpbmcoaGVhZCwgY29udGFpbmVyX29mCisJCQkJCSAgICAgICAocHRyLCBzdHJ1Y3QgdG9tb3lvX3BhdGhfZ3JvdXAsCisJCQkJCQloZWFkKS0+bWVtYmVyX25hbWUtPm5hbWUpOworCQkJfSBlbHNlIGlmIChpZHggPT0gVE9NT1lPX05VTUJFUl9HUk9VUCkgeworCQkJCXRvbW95b19wcmludF9udW1iZXJfdW5pb24oaGVhZCwgJmNvbnRhaW5lcl9vZgorCQkJCQkJCSAgKHB0ciwKKwkJCQkJCSAgIHN0cnVjdCB0b21veW9fbnVtYmVyX2dyb3VwLAorCQkJCQkJCSAgIGhlYWQpLT5udW1iZXIpOworCQkJfQorCQkJdG9tb3lvX3NldF9sZihoZWFkKTsKIAkJfQorCQloZWFkLT5yLmFjbCA9IE5VTEw7CiAJfQotCXJldHVybiAwOwotfQotCi0vKiBwYXRoIHRvIHBvbGljeSBsb2FkZXIgKi8KLXN0YXRpYyBjb25zdCBjaGFyICp0b21veW9fbG9hZGVyID0gIi9zYmluL3RvbW95by1pbml0IjsKLQotLyoqCi0gKiB0b21veW9fcG9saWN5X2xvYWRlcl9leGlzdHMgLSBDaGVjayB3aGV0aGVyIC9zYmluL3RvbW95by1pbml0IGV4aXN0cy4KLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgL3NiaW4vdG9tb3lvLWluaXQgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2UuCi0gKi8KLXN0YXRpYyBib29sIHRvbW95b19wb2xpY3lfbG9hZGVyX2V4aXN0cyh2b2lkKQotewotCS8qCi0JICogRG9uJ3QgYWN0aXZhdGUgTUFDIGlmIHRoZSBwb2xpY3kgbG9hZGVyIGRvZXNuJ3QgZXhpc3QuCi0JICogSWYgdGhlIGluaXRyZCBpbmNsdWRlcyAvc2Jpbi9pbml0IGJ1dCByZWFsLXJvb3QtZGV2IGhhcyBub3QKLQkgKiBtb3VudGVkIG9uIC8geWV0LCBhY3RpdmF0aW5nIE1BQyB3aWxsIGJsb2NrIHRoZSBzeXN0ZW0gc2luY2UKLQkgKiBwb2xpY2llcyBhcmUgbm90IGxvYWRlZCB5ZXQuCi0JICogVGh1cywgbGV0IGRvX2V4ZWN2ZSgpIGNhbGwgdGhpcyBmdW5jdGlvbiBldmVyeXRpbWUuCi0JICovCi0Jc3RydWN0IHBhdGggcGF0aDsKLQotCWlmIChrZXJuX3BhdGgodG9tb3lvX2xvYWRlciwgTE9PS1VQX0ZPTExPVywgJnBhdGgpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIk5vdCBhY3RpdmF0aW5nIE1hbmRhdG9yeSBBY2Nlc3MgQ29udHJvbCBub3cgIgotCQkgICAgICAgInNpbmNlICVzIGRvZXNuJ3QgZXhpc3QuXG4iLCB0b21veW9fbG9hZGVyKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlwYXRoX3B1dCgmcGF0aCk7CisJaGVhZC0+ci5ncm91cCA9IE5VTEw7CiAJcmV0dXJuIHRydWU7CiB9CiAKIC8qKgotICogdG9tb3lvX2xvYWRfcG9saWN5IC0gUnVuIGV4dGVybmFsIHBvbGljeSBsb2FkZXIgdG8gbG9hZCBwb2xpY3kuCisgKiB0b21veW9fcmVhZF9wb2xpY3kgLSBSZWFkICJzdHJ1Y3QgdG9tb3lvXy4uLl9lbnRyeSIgbGlzdC4KICAqCi0gKiBAZmlsZW5hbWU6IFRoZSBwcm9ncmFtIGFib3V0IHRvIHN0YXJ0LgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqIEBpZHg6ICBJbmRleCBudW1iZXIuCiAgKgotICogVGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciBAZmlsZW5hbWUgaXMgL3NiaW4vaW5pdCAsIGFuZCBpZiBzbwotICogaW52b2tlIC9zYmluL3RvbW95by1pbml0IGFuZCB3YWl0IGZvciB0aGUgdGVybWluYXRpb24gb2YgL3NiaW4vdG9tb3lvLWluaXQKLSAqIGFuZCB0aGVuIGNvbnRpbnVlcyBpbnZvY2F0aW9uIG9mIC9zYmluL2luaXQuCi0gKiAvc2Jpbi90b21veW8taW5pdCByZWFkcyBwb2xpY3kgZmlsZXMgaW4gL2V0Yy90b21veW8vIGRpcmVjdG9yeSBhbmQKLSAqIHdyaXRlcyB0byAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZXMuCisgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgogICoKLSAqIFJldHVybnMgbm90aGluZy4KKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KLXZvaWQgdG9tb3lvX2xvYWRfcG9saWN5KGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorc3RhdGljIGJvb2wgdG9tb3lvX3JlYWRfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkLCBjb25zdCBpbnQgaWR4KQogewotCWNoYXIgKmFyZ3ZbMl07Ci0JY2hhciAqZW52cFszXTsKLQotCWlmICh0b21veW9fcG9saWN5X2xvYWRlZCkKLQkJcmV0dXJuOwotCS8qCi0JICogQ2hlY2sgZmlsZW5hbWUgaXMgL3NiaW4vaW5pdCBvciAvc2Jpbi90b21veW8tc3RhcnQuCi0JICogL3NiaW4vdG9tb3lvLXN0YXJ0IGlzIGEgZHVtbXkgZmlsZW5hbWUgaW4gY2FzZSB3aGVyZSAvc2Jpbi9pbml0IGNhbid0Ci0JICogYmUgcGFzc2VkLgotCSAqIFlvdSBjYW4gY3JlYXRlIC9zYmluL3RvbW95by1zdGFydCBieQotCSAqICJsbiAtcyAvYmluL3RydWUgL3NiaW4vdG9tb3lvLXN0YXJ0Ii4KLQkgKi8KLQlpZiAoc3RyY21wKGZpbGVuYW1lLCAiL3NiaW4vaW5pdCIpICYmCi0JICAgIHN0cmNtcChmaWxlbmFtZSwgIi9zYmluL3RvbW95by1zdGFydCIpKQotCQlyZXR1cm47Ci0JaWYgKCF0b21veW9fcG9saWN5X2xvYWRlcl9leGlzdHMoKSkKLQkJcmV0dXJuOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiQ2FsbGluZyAlcyB0byBsb2FkIHBvbGljeS4gUGxlYXNlIHdhaXQuXG4iLAotCSAgICAgICB0b21veW9fbG9hZGVyKTsKLQlhcmd2WzBdID0gKGNoYXIgKikgdG9tb3lvX2xvYWRlcjsKLQlhcmd2WzFdID0gTlVMTDsKLQllbnZwWzBdID0gIkhPTUU9LyI7Ci0JZW52cFsxXSA9ICJQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluIjsKLQllbnZwWzJdID0gTlVMTDsKLQljYWxsX3VzZXJtb2RlaGVscGVyKGFyZ3ZbMF0sIGFyZ3YsIGVudnAsIDEpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiVE9NT1lPOiAyLjIuMCAgIDIwMDkvMDQvMDFcbiIpOwotCXByaW50ayhLRVJOX0lORk8gIk1hbmRhdG9yeSBBY2Nlc3MgQ29udHJvbCBhY3RpdmF0ZWQuXG4iKTsKLQl0b21veW9fcG9saWN5X2xvYWRlZCA9IHRydWU7Ci0JeyAvKiBDaGVjayBhbGwgcHJvZmlsZXMgY3VycmVudGx5IGFzc2lnbmVkIHRvIGRvbWFpbnMgYXJlIGRlZmluZWQuICovCi0JCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbjsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZG9tYWluLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7Ci0JCQljb25zdCB1OCBwcm9maWxlID0gZG9tYWluLT5wcm9maWxlOwotCQkJaWYgKHRvbW95b19wcm9maWxlX3B0cltwcm9maWxlXSkKLQkJCQljb250aW51ZTsKLQkJCXBhbmljKCJQcm9maWxlICV1ICh1c2VkIGJ5ICclcycpIG5vdCBkZWZpbmVkLlxuIiwKLQkJCSAgICAgIHByb2ZpbGUsIGRvbWFpbi0+ZG9tYWlubmFtZS0+bmFtZSk7CisJbGlzdF9mb3JfZWFjaF9jb29raWUoaGVhZC0+ci5hY2wsICZ0b21veW9fcG9saWN5X2xpc3RbaWR4XSkgeworCQlzdHJ1Y3QgdG9tb3lvX2FjbF9oZWFkICphY2wgPQorCQkJY29udGFpbmVyX29mKGhlYWQtPnIuYWNsLCB0eXBlb2YoKmFjbCksIGxpc3QpOworCQlpZiAoYWNsLT5pc19kZWxldGVkKQorCQkJY29udGludWU7CisJCWlmICghdG9tb3lvX2ZsdXNoKGhlYWQpKQorCQkJcmV0dXJuIGZhbHNlOworCQlzd2l0Y2ggKGlkeCkgeworCQljYXNlIFRPTU9ZT19JRF9UUkFOU0lUSU9OX0NPTlRST0w6CisJCQl7CisJCQkJc3RydWN0IHRvbW95b190cmFuc2l0aW9uX2NvbnRyb2wgKnB0ciA9CisJCQkJCWNvbnRhaW5lcl9vZihhY2wsIHR5cGVvZigqcHRyKSwgaGVhZCk7CisJCQkJdG9tb3lvX3NldF9zdHJpbmcoaGVhZCwKKwkJCQkJCSAgdG9tb3lvX3RyYW5zaXRpb25fdHlwZQorCQkJCQkJICBbcHRyLT50eXBlXSk7CisJCQkJaWYgKHB0ci0+cHJvZ3JhbSkKKwkJCQkJdG9tb3lvX3NldF9zdHJpbmcoaGVhZCwKKwkJCQkJCQkgIHB0ci0+cHJvZ3JhbS0+bmFtZSk7CisJCQkJaWYgKHB0ci0+cHJvZ3JhbSAmJiBwdHItPmRvbWFpbm5hbWUpCisJCQkJCXRvbW95b19zZXRfc3RyaW5nKGhlYWQsICIgZnJvbSAiKTsKKwkJCQlpZiAocHRyLT5kb21haW5uYW1lKQorCQkJCQl0b21veW9fc2V0X3N0cmluZyhoZWFkLAorCQkJCQkJCSAgcHRyLT5kb21haW5uYW1lLT4KKwkJCQkJCQkgIG5hbWUpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVE9NT1lPX0lEX0dMT0JBTExZX1JFQURBQkxFOgorCQkJeworCQkJCXN0cnVjdCB0b21veW9fcmVhZGFibGVfZmlsZSAqcHRyID0KKwkJCQkJY29udGFpbmVyX29mKGFjbCwgdHlwZW9mKCpwdHIpLCBoZWFkKTsKKwkJCQl0b21veW9fc2V0X3N0cmluZyhoZWFkLAorCQkJCQkJICBUT01PWU9fS0VZV09SRF9BTExPV19SRUFEKTsKKwkJCQl0b21veW9fc2V0X3N0cmluZyhoZWFkLCBwdHItPmZpbGVuYW1lLT5uYW1lKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRPTU9ZT19JRF9BR0dSRUdBVE9SOgorCQkJeworCQkJCXN0cnVjdCB0b21veW9fYWdncmVnYXRvciAqcHRyID0KKwkJCQkJY29udGFpbmVyX29mKGFjbCwgdHlwZW9mKCpwdHIpLCBoZWFkKTsKKwkJCQl0b21veW9fc2V0X3N0cmluZyhoZWFkLAorCQkJCQkJICBUT01PWU9fS0VZV09SRF9BR0dSRUdBVE9SKTsKKwkJCQl0b21veW9fc2V0X3N0cmluZyhoZWFkLAorCQkJCQkJICBwdHItPm9yaWdpbmFsX25hbWUtPm5hbWUpOworCQkJCXRvbW95b19zZXRfc3BhY2UoaGVhZCk7CisJCQkJdG9tb3lvX3NldF9zdHJpbmcoaGVhZCwKKwkJCQkJICAgICAgIHB0ci0+YWdncmVnYXRlZF9uYW1lLT5uYW1lKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRPTU9ZT19JRF9QQVRURVJOOgorCQkJeworCQkJCXN0cnVjdCB0b21veW9fbm9fcGF0dGVybiAqcHRyID0KKwkJCQkJY29udGFpbmVyX29mKGFjbCwgdHlwZW9mKCpwdHIpLCBoZWFkKTsKKwkJCQl0b21veW9fc2V0X3N0cmluZyhoZWFkLAorCQkJCQkJICBUT01PWU9fS0VZV09SRF9GSUxFX1BBVFRFUk4pOworCQkJCXRvbW95b19zZXRfc3RyaW5nKGhlYWQsIHB0ci0+cGF0dGVybi0+bmFtZSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUT01PWU9fSURfTk9fUkVXUklURToKKwkJCXsKKwkJCQlzdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGUgKnB0ciA9CisJCQkJCWNvbnRhaW5lcl9vZihhY2wsIHR5cGVvZigqcHRyKSwgaGVhZCk7CisJCQkJdG9tb3lvX3NldF9zdHJpbmcoaGVhZCwKKwkJCQkJCSAgVE9NT1lPX0tFWVdPUkRfREVOWV9SRVdSSVRFKTsKKwkJCQl0b21veW9fc2V0X3N0cmluZyhoZWFkLCBwdHItPnBhdHRlcm4tPm5hbWUpOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljb250aW51ZTsKIAkJfQorCQl0b21veW9fc2V0X2xmKGhlYWQpOwogCX0KKwloZWFkLT5yLmFjbCA9IE5VTEw7CisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfZXhjZXB0aW9uIC0gUmVhZCBleGNlcHRpb24gcG9saWN5LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KKyAqLworc3RhdGljIHZvaWQgdG9tb3lvX3JlYWRfZXhjZXB0aW9uKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCWlmIChoZWFkLT5yLmVvZikKKwkJcmV0dXJuOworCXdoaWxlIChoZWFkLT5yLnN0ZXAgPCBUT01PWU9fTUFYX1BPTElDWSAmJgorCSAgICAgICB0b21veW9fcmVhZF9wb2xpY3koaGVhZCwgaGVhZC0+ci5zdGVwKSkKKwkJaGVhZC0+ci5zdGVwKys7CisJaWYgKGhlYWQtPnIuc3RlcCA8IFRPTU9ZT19NQVhfUE9MSUNZKQorCQlyZXR1cm47CisJd2hpbGUgKGhlYWQtPnIuc3RlcCA8IFRPTU9ZT19NQVhfUE9MSUNZICsgVE9NT1lPX01BWF9HUk9VUCAmJgorCSAgICAgICB0b21veW9fcmVhZF9ncm91cChoZWFkLCBoZWFkLT5yLnN0ZXAgLSBUT01PWU9fTUFYX1BPTElDWSkpCisJCWhlYWQtPnIuc3RlcCsrOworCWlmIChoZWFkLT5yLnN0ZXAgPCBUT01PWU9fTUFYX1BPTElDWSArIFRPTU9ZT19NQVhfR1JPVVApCisJCXJldHVybjsKKwloZWFkLT5yLmVvZiA9IHRydWU7Cit9CisKKy8qKgorICogdG9tb3lvX3ByaW50X2hlYWRlciAtIEdldCBoZWFkZXIgbGluZSBvZiBhdWRpdCBsb2cuCisgKgorICogQHI6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fcmVxdWVzdF9pbmZvIi4KKyAqCisgKiBSZXR1cm5zIHN0cmluZyByZXByZXNlbnRhdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHVzZXMga21hbGxvYygpLCBzbyBjYWxsZXIgbXVzdCBrZnJlZSgpIGlmIHRoaXMgZnVuY3Rpb24KKyAqIGRpZG4ndCByZXR1cm4gTlVMTC4KKyAqLworc3RhdGljIGNoYXIgKnRvbW95b19wcmludF9oZWFkZXIoc3RydWN0IHRvbW95b19yZXF1ZXN0X2luZm8gKnIpCit7CisJc3RydWN0IHRpbWV2YWwgdHY7CisJY29uc3QgcGlkX3QgZ3BpZCA9IHRhc2tfcGlkX25yKGN1cnJlbnQpOworCXN0YXRpYyBjb25zdCBpbnQgdG9tb3lvX2J1ZmZlcl9sZW4gPSA0MDk2OworCWNoYXIgKmJ1ZmZlciA9IGttYWxsb2ModG9tb3lvX2J1ZmZlcl9sZW4sIEdGUF9OT0ZTKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIE5VTEw7CisJZG9fZ2V0dGltZW9mZGF5KCZ0dik7CisJc25wcmludGYoYnVmZmVyLCB0b21veW9fYnVmZmVyX2xlbiAtIDEsCisJCSAiI3RpbWVzdGFtcD0lbHUgcHJvZmlsZT0ldSBtb2RlPSVzIChnbG9iYWwtcGlkPSV1KSIKKwkJICIgdGFzaz17IHBpZD0ldSBwcGlkPSV1IHVpZD0ldSBnaWQ9JXUgZXVpZD0ldSIKKwkJICIgZWdpZD0ldSBzdWlkPSV1IHNnaWQ9JXUgZnN1aWQ9JXUgZnNnaWQ9JXUgfSIsCisJCSB0di50dl9zZWMsIHItPnByb2ZpbGUsIHRvbW95b19tb2RlW3ItPm1vZGVdLCBncGlkLAorCQkgKHBpZF90KSBzeXNfZ2V0cGlkKCksIChwaWRfdCkgc3lzX2dldHBwaWQoKSwKKwkJIGN1cnJlbnRfdWlkKCksIGN1cnJlbnRfZ2lkKCksIGN1cnJlbnRfZXVpZCgpLAorCQkgY3VycmVudF9lZ2lkKCksIGN1cnJlbnRfc3VpZCgpLCBjdXJyZW50X3NnaWQoKSwKKwkJIGN1cnJlbnRfZnN1aWQoKSwgY3VycmVudF9mc2dpZCgpKTsKKwlyZXR1cm4gYnVmZmVyOworfQorCisvKioKKyAqIHRvbW95b19pbml0X2F1ZGl0X2xvZyAtIEFsbG9jYXRlIGJ1ZmZlciBmb3IgYXVkaXQgbG9ncy4KKyAqCisgKiBAbGVuOiBSZXF1aXJlZCBzaXplLgorICogQHI6ICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19yZXF1ZXN0X2luZm8iLgorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byBhbGxvY2F0ZWQgbWVtb3J5LgorICoKKyAqIFRoZSBAbGVuIGlzIHVwZGF0ZWQgdG8gYWRkIHRoZSBoZWFkZXIgbGluZXMnIHNpemUgb24gc3VjY2Vzcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHVzZXMga3phbGxvYygpLCBzbyBjYWxsZXIgbXVzdCBrZnJlZSgpIGlmIHRoaXMgZnVuY3Rpb24KKyAqIGRpZG4ndCByZXR1cm4gTlVMTC4KKyAqLworc3RhdGljIGNoYXIgKnRvbW95b19pbml0X2F1ZGl0X2xvZyhpbnQgKmxlbiwgc3RydWN0IHRvbW95b19yZXF1ZXN0X2luZm8gKnIpCit7CisJY2hhciAqYnVmID0gTlVMTDsKKwljb25zdCBjaGFyICpoZWFkZXI7CisJY29uc3QgY2hhciAqZG9tYWlubmFtZTsKKwlpZiAoIXItPmRvbWFpbikKKwkJci0+ZG9tYWluID0gdG9tb3lvX2RvbWFpbigpOworCWRvbWFpbm5hbWUgPSByLT5kb21haW4tPmRvbWFpbm5hbWUtPm5hbWU7CisJaGVhZGVyID0gdG9tb3lvX3ByaW50X2hlYWRlcihyKTsKKwlpZiAoIWhlYWRlcikKKwkJcmV0dXJuIE5VTEw7CisJKmxlbiArPSBzdHJsZW4oZG9tYWlubmFtZSkgKyBzdHJsZW4oaGVhZGVyKSArIDEwOworCWJ1ZiA9IGt6YWxsb2MoKmxlbiwgR0ZQX05PRlMpOworCWlmIChidWYpCisJCXNucHJpbnRmKGJ1ZiwgKCpsZW4pIC0gMSwgIiVzXG4lc1xuIiwgaGVhZGVyLCBkb21haW5uYW1lKTsKKwlrZnJlZShoZWFkZXIpOworCXJldHVybiBidWY7Cit9CisKKy8qIFdhaXQgcXVldWUgZm9yIHRvbW95b19xdWVyeV9saXN0LiAqLworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHRvbW95b19xdWVyeV93YWl0KTsKKworLyogTG9jayBmb3IgbWFuaXB1bGF0aW5nIHRvbW95b19xdWVyeV9saXN0LiAqLworc3RhdGljIERFRklORV9TUElOTE9DSyh0b21veW9fcXVlcnlfbGlzdF9sb2NrKTsKKworLyogU3RydWN0dXJlIGZvciBxdWVyeS4gKi8KK3N0cnVjdCB0b21veW9fcXVlcnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljaGFyICpxdWVyeTsKKwlpbnQgcXVlcnlfbGVuOworCXVuc2lnbmVkIGludCBzZXJpYWw7CisJaW50IHRpbWVyOworCWludCBhbnN3ZXI7Cit9OworCisvKiBUaGUgbGlzdCBmb3IgInN0cnVjdCB0b21veW9fcXVlcnkiLiAqLworc3RhdGljIExJU1RfSEVBRCh0b21veW9fcXVlcnlfbGlzdCk7CisKKy8qCisgKiBOdW1iZXIgb2YgInN0cnVjdCBmaWxlIiByZWZlcnJpbmcgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL3F1ZXJ5CisgKiBpbnRlcmZhY2UuCisgKi8KK3N0YXRpYyBhdG9taWNfdCB0b21veW9fcXVlcnlfb2JzZXJ2ZXJzID0gQVRPTUlDX0lOSVQoMCk7CisKKy8qKgorICogdG9tb3lvX3N1cGVydmlzb3IgLSBBc2sgZm9yIHRoZSBzdXBlcnZpc29yJ3MgZGVjaXNpb24uCisgKgorICogQHI6ICAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fcmVxdWVzdF9pbmZvIi4KKyAqIEBmbXQ6ICAgICBUaGUgcHJpbnRmKCkncyBmb3JtYXQgc3RyaW5nLCBmb2xsb3dlZCBieSBwYXJhbWV0ZXJzLgorICoKKyAqIFJldHVybnMgMCBpZiB0aGUgc3VwZXJ2aXNvciBkZWNpZGVkIHRvIHBlcm1pdCB0aGUgYWNjZXNzIHJlcXVlc3Qgd2hpY2gKKyAqIHZpb2xhdGVkIHRoZSBwb2xpY3kgaW4gZW5mb3JjaW5nIG1vZGUsIFRPTU9ZT19SRVRSWV9SRVFVRVNUIGlmIHRoZQorICogc3VwZXJ2aXNvciBkZWNpZGVkIHRvIHJldHJ5IHRoZSBhY2Nlc3MgcmVxdWVzdCB3aGljaCB2aW9sYXRlZCB0aGUgcG9saWN5IGluCisgKiBlbmZvcmNpbmcgbW9kZSwgMCBpZiBpdCBpcyBub3QgaW4gZW5mb3JjaW5nIG1vZGUsIC1FUEVSTSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fc3VwZXJ2aXNvcihzdHJ1Y3QgdG9tb3lvX3JlcXVlc3RfaW5mbyAqciwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCWludCBlcnJvciA9IC1FUEVSTTsKKwlpbnQgcG9zOworCWludCBsZW47CisJc3RhdGljIHVuc2lnbmVkIGludCB0b21veW9fc2VyaWFsOworCXN0cnVjdCB0b21veW9fcXVlcnkgKmVudHJ5ID0gTlVMTDsKKwlib29sIHF1b3RhX2V4Y2VlZGVkID0gZmFsc2U7CisJY2hhciAqaGVhZGVyOworCXN3aXRjaCAoci0+bW9kZSkgeworCQljaGFyICpidWZmZXI7CisJY2FzZSBUT01PWU9fQ09ORklHX0xFQVJOSU5HOgorCQlpZiAoIXRvbW95b19kb21haW5fcXVvdGFfaXNfb2socikpCisJCQlyZXR1cm4gMDsKKwkJdmFfc3RhcnQoYXJncywgZm10KTsKKwkJbGVuID0gdnNucHJpbnRmKChjaGFyICopICZwb3MsIHNpemVvZihwb3MpIC0gMSwgZm10LCBhcmdzKSArIDQ7CisJCXZhX2VuZChhcmdzKTsKKwkJYnVmZmVyID0ga21hbGxvYyhsZW4sIEdGUF9OT0ZTKTsKKwkJaWYgKCFidWZmZXIpCisJCQlyZXR1cm4gMDsKKwkJdmFfc3RhcnQoYXJncywgZm10KTsKKwkJdnNucHJpbnRmKGJ1ZmZlciwgbGVuIC0gMSwgZm10LCBhcmdzKTsKKwkJdmFfZW5kKGFyZ3MpOworCQl0b21veW9fbm9ybWFsaXplX2xpbmUoYnVmZmVyKTsKKwkJdG9tb3lvX3dyaXRlX2RvbWFpbjIoYnVmZmVyLCByLT5kb21haW4sIGZhbHNlKTsKKwkJa2ZyZWUoYnVmZmVyKTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBUT01PWU9fQ09ORklHX1BFUk1JU1NJVkU6CisJCXJldHVybiAwOworCX0KKwlpZiAoIXItPmRvbWFpbikKKwkJci0+ZG9tYWluID0gdG9tb3lvX2RvbWFpbigpOworCWlmICghYXRvbWljX3JlYWQoJnRvbW95b19xdWVyeV9vYnNlcnZlcnMpKQorCQlyZXR1cm4gLUVQRVJNOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJbGVuID0gdnNucHJpbnRmKChjaGFyICopICZwb3MsIHNpemVvZihwb3MpIC0gMSwgZm10LCBhcmdzKSArIDMyOworCXZhX2VuZChhcmdzKTsKKwloZWFkZXIgPSB0b21veW9faW5pdF9hdWRpdF9sb2coJmxlbiwgcik7CisJaWYgKCFoZWFkZXIpCisJCWdvdG8gb3V0OworCWVudHJ5ID0ga3phbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX05PRlMpOworCWlmICghZW50cnkpCisJCWdvdG8gb3V0OworCWVudHJ5LT5xdWVyeSA9IGt6YWxsb2MobGVuLCBHRlBfTk9GUyk7CisJaWYgKCFlbnRyeS0+cXVlcnkpCisJCWdvdG8gb3V0OworCWxlbiA9IGtzaXplKGVudHJ5LT5xdWVyeSk7CisJc3Bpbl9sb2NrKCZ0b21veW9fcXVlcnlfbGlzdF9sb2NrKTsKKwlpZiAodG9tb3lvX3F1b3RhX2Zvcl9xdWVyeSAmJiB0b21veW9fcXVlcnlfbWVtb3J5X3NpemUgKyBsZW4gKworCSAgICBzaXplb2YoKmVudHJ5KSA+PSB0b21veW9fcXVvdGFfZm9yX3F1ZXJ5KSB7CisJCXF1b3RhX2V4Y2VlZGVkID0gdHJ1ZTsKKwl9IGVsc2UgeworCQl0b21veW9fcXVlcnlfbWVtb3J5X3NpemUgKz0gbGVuICsgc2l6ZW9mKCplbnRyeSk7CisJCWVudHJ5LT5zZXJpYWwgPSB0b21veW9fc2VyaWFsKys7CisJfQorCXNwaW5fdW5sb2NrKCZ0b21veW9fcXVlcnlfbGlzdF9sb2NrKTsKKwlpZiAocXVvdGFfZXhjZWVkZWQpCisJCWdvdG8gb3V0OworCXBvcyA9IHNucHJpbnRmKGVudHJ5LT5xdWVyeSwgbGVuIC0gMSwgIlEldS0laHVcbiVzIiwKKwkJICAgICAgIGVudHJ5LT5zZXJpYWwsIHItPnJldHJ5LCBoZWFkZXIpOworCWtmcmVlKGhlYWRlcik7CisJaGVhZGVyID0gTlVMTDsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCXZzbnByaW50ZihlbnRyeS0+cXVlcnkgKyBwb3MsIGxlbiAtIDEgLSBwb3MsIGZtdCwgYXJncyk7CisJZW50cnktPnF1ZXJ5X2xlbiA9IHN0cmxlbihlbnRyeS0+cXVlcnkpICsgMTsKKwl2YV9lbmQoYXJncyk7CisJc3Bpbl9sb2NrKCZ0b21veW9fcXVlcnlfbGlzdF9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bGlzdCwgJnRvbW95b19xdWVyeV9saXN0KTsKKwlzcGluX3VubG9jaygmdG9tb3lvX3F1ZXJ5X2xpc3RfbG9jayk7CisJLyogR2l2ZSAxMCBzZWNvbmRzIGZvciBzdXBlcnZpc29yJ3Mgb3Bpbmlvbi4gKi8KKwlmb3IgKGVudHJ5LT50aW1lciA9IDA7CisJICAgICBhdG9taWNfcmVhZCgmdG9tb3lvX3F1ZXJ5X29ic2VydmVycykgJiYgZW50cnktPnRpbWVyIDwgMTAwOworCSAgICAgZW50cnktPnRpbWVyKyspIHsKKwkJd2FrZV91cCgmdG9tb3lvX3F1ZXJ5X3dhaXQpOworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlzY2hlZHVsZV90aW1lb3V0KEhaIC8gMTApOworCQlpZiAoZW50cnktPmFuc3dlcikKKwkJCWJyZWFrOworCX0KKwlzcGluX2xvY2soJnRvbW95b19xdWVyeV9saXN0X2xvY2spOworCWxpc3RfZGVsKCZlbnRyeS0+bGlzdCk7CisJdG9tb3lvX3F1ZXJ5X21lbW9yeV9zaXplIC09IGxlbiArIHNpemVvZigqZW50cnkpOworCXNwaW5fdW5sb2NrKCZ0b21veW9fcXVlcnlfbGlzdF9sb2NrKTsKKwlzd2l0Y2ggKGVudHJ5LT5hbnN3ZXIpIHsKKwljYXNlIDM6IC8qIEFza2VkIHRvIHJldHJ5IGJ5IGFkbWluaXN0cmF0b3IuICovCisJCWVycm9yID0gVE9NT1lPX1JFVFJZX1JFUVVFU1Q7CisJCXItPnJldHJ5Kys7CisJCWJyZWFrOworCWNhc2UgMToKKwkJLyogR3JhbnRlZCBieSBhZG1pbmlzdHJhdG9yLiAqLworCQllcnJvciA9IDA7CisJCWJyZWFrOworCWNhc2UgMDoKKwkJLyogVGltZWQgb3V0LiAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBSZWplY3RlZCBieSBhZG1pbmlzdHJhdG9yLiAqLworCQlicmVhazsKKwl9Cisgb3V0OgorCWlmIChlbnRyeSkKKwkJa2ZyZWUoZW50cnktPnF1ZXJ5KTsKKwlrZnJlZShlbnRyeSk7CisJa2ZyZWUoaGVhZGVyKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX3BvbGxfcXVlcnkgLSBwb2xsKCkgZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9xdWVyeS4KKyAqCisgKiBAZmlsZTogUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgorICogQHdhaXQ6IFBvaW50ZXIgdG8gInBvbGxfdGFibGUiLgorICoKKyAqIFJldHVybnMgUE9MTElOIHwgUE9MTFJETk9STSB3aGVuIHJlYWR5IHRvIHJlYWQsIDAgb3RoZXJ3aXNlLgorICoKKyAqIFdhaXRzIGZvciBhY2Nlc3MgcmVxdWVzdHMgd2hpY2ggdmlvbGF0ZWQgcG9saWN5IGluIGVuZm9yY2luZyBtb2RlLgorICovCitzdGF0aWMgaW50IHRvbW95b19wb2xsX3F1ZXJ5KHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKKwlib29sIGZvdW5kID0gZmFsc2U7CisJdTggaTsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCXNwaW5fbG9jaygmdG9tb3lvX3F1ZXJ5X2xpc3RfbG9jayk7CisJCWxpc3RfZm9yX2VhY2godG1wLCAmdG9tb3lvX3F1ZXJ5X2xpc3QpIHsKKwkJCXN0cnVjdCB0b21veW9fcXVlcnkgKnB0ciA9CisJCQkJbGlzdF9lbnRyeSh0bXAsIHR5cGVvZigqcHRyKSwgbGlzdCk7CisJCQlpZiAocHRyLT5hbnN3ZXIpCisJCQkJY29udGludWU7CisJCQlmb3VuZCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCQlzcGluX3VubG9jaygmdG9tb3lvX3F1ZXJ5X2xpc3RfbG9jayk7CisJCWlmIChmb3VuZCkKKwkJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOworCQlpZiAoaSkKKwkJCWJyZWFrOworCQlwb2xsX3dhaXQoZmlsZSwgJnRvbW95b19xdWVyeV93YWl0LCB3YWl0KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfcXVlcnkgLSBSZWFkIGFjY2VzcyByZXF1ZXN0cyB3aGljaCB2aW9sYXRlZCBwb2xpY3kgaW4gZW5mb3JjaW5nIG1vZGUuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqLworc3RhdGljIHZvaWQgdG9tb3lvX3JlYWRfcXVlcnkoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCWludCBwb3MgPSAwOworCWludCBsZW4gPSAwOworCWNoYXIgKmJ1ZjsKKwlpZiAoaGVhZC0+ci53X3BvcykKKwkJcmV0dXJuOworCWlmIChoZWFkLT5yZWFkX2J1ZikgeworCQlrZnJlZShoZWFkLT5yZWFkX2J1Zik7CisJCWhlYWQtPnJlYWRfYnVmID0gTlVMTDsKKwl9CisJc3Bpbl9sb2NrKCZ0b21veW9fcXVlcnlfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoKHRtcCwgJnRvbW95b19xdWVyeV9saXN0KSB7CisJCXN0cnVjdCB0b21veW9fcXVlcnkgKnB0ciA9IGxpc3RfZW50cnkodG1wLCB0eXBlb2YoKnB0ciksIGxpc3QpOworCQlpZiAocHRyLT5hbnN3ZXIpCisJCQljb250aW51ZTsKKwkJaWYgKHBvcysrICE9IGhlYWQtPnIucXVlcnlfaW5kZXgpCisJCQljb250aW51ZTsKKwkJbGVuID0gcHRyLT5xdWVyeV9sZW47CisJCWJyZWFrOworCX0KKwlzcGluX3VubG9jaygmdG9tb3lvX3F1ZXJ5X2xpc3RfbG9jayk7CisJaWYgKCFsZW4pIHsKKwkJaGVhZC0+ci5xdWVyeV9pbmRleCA9IDA7CisJCXJldHVybjsKKwl9CisJYnVmID0ga3phbGxvYyhsZW4sIEdGUF9OT0ZTKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuOworCXBvcyA9IDA7CisJc3Bpbl9sb2NrKCZ0b21veW9fcXVlcnlfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoKHRtcCwgJnRvbW95b19xdWVyeV9saXN0KSB7CisJCXN0cnVjdCB0b21veW9fcXVlcnkgKnB0ciA9IGxpc3RfZW50cnkodG1wLCB0eXBlb2YoKnB0ciksIGxpc3QpOworCQlpZiAocHRyLT5hbnN3ZXIpCisJCQljb250aW51ZTsKKwkJaWYgKHBvcysrICE9IGhlYWQtPnIucXVlcnlfaW5kZXgpCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogU29tZSBxdWVyeSBjYW4gYmUgc2tpcHBlZCBiZWNhdXNlIHRvbW95b19xdWVyeV9saXN0CisJCSAqIGNhbiBjaGFuZ2UsIGJ1dCBJIGRvbid0IGNhcmUuCisJCSAqLworCQlpZiAobGVuID09IHB0ci0+cXVlcnlfbGVuKQorCQkJbWVtbW92ZShidWYsIHB0ci0+cXVlcnksIGxlbik7CisJCWJyZWFrOworCX0KKwlzcGluX3VubG9jaygmdG9tb3lvX3F1ZXJ5X2xpc3RfbG9jayk7CisJaWYgKGJ1ZlswXSkgeworCQloZWFkLT5yZWFkX2J1ZiA9IGJ1ZjsKKwkJaGVhZC0+ci53W2hlYWQtPnIud19wb3MrK10gPSBidWY7CisJCWhlYWQtPnIucXVlcnlfaW5kZXgrKzsKKwl9IGVsc2UgeworCQlrZnJlZShidWYpOworCX0KK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfYW5zd2VyIC0gV3JpdGUgdGhlIHN1cGVydmlzb3IncyBkZWNpc2lvbi4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRUlOVkFMIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fd3JpdGVfYW5zd2VyKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCWNoYXIgKmRhdGEgPSBoZWFkLT53cml0ZV9idWY7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCXVuc2lnbmVkIGludCBzZXJpYWw7CisJdW5zaWduZWQgaW50IGFuc3dlcjsKKwlzcGluX2xvY2soJnRvbW95b19xdWVyeV9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2godG1wLCAmdG9tb3lvX3F1ZXJ5X2xpc3QpIHsKKwkJc3RydWN0IHRvbW95b19xdWVyeSAqcHRyID0gbGlzdF9lbnRyeSh0bXAsIHR5cGVvZigqcHRyKSwgbGlzdCk7CisJCXB0ci0+dGltZXIgPSAwOworCX0KKwlzcGluX3VubG9jaygmdG9tb3lvX3F1ZXJ5X2xpc3RfbG9jayk7CisJaWYgKHNzY2FuZihkYXRhLCAiQSV1PSV1IiwgJnNlcmlhbCwgJmFuc3dlcikgIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3Bpbl9sb2NrKCZ0b21veW9fcXVlcnlfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoKHRtcCwgJnRvbW95b19xdWVyeV9saXN0KSB7CisJCXN0cnVjdCB0b21veW9fcXVlcnkgKnB0ciA9IGxpc3RfZW50cnkodG1wLCB0eXBlb2YoKnB0ciksIGxpc3QpOworCQlpZiAocHRyLT5zZXJpYWwgIT0gc2VyaWFsKQorCQkJY29udGludWU7CisJCWlmICghcHRyLT5hbnN3ZXIpCisJCQlwdHItPmFuc3dlciA9IGFuc3dlcjsKKwkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrKCZ0b21veW9fcXVlcnlfbGlzdF9sb2NrKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0xOTEzLDEzICsxNzQ0LDEyIEBACiAgKgogICogUmV0dXJucyB2ZXJzaW9uIGluZm9ybWF0aW9uLgogICovCi1zdGF0aWMgaW50IHRvbW95b19yZWFkX3ZlcnNpb24oc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCitzdGF0aWMgdm9pZCB0b21veW9fcmVhZF92ZXJzaW9uKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQogewotCWlmICghaGVhZC0+cmVhZF9lb2YpIHsKLQkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiMi4yLjAiKTsKLQkJaGVhZC0+cmVhZF9lb2YgPSB0cnVlOworCWlmICghaGVhZC0+ci5lb2YpIHsKKwkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiMi4zLjAiKTsKKwkJaGVhZC0+ci5lb2YgPSB0cnVlOwogCX0KLQlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0xOTI5LDE4ICsxNzU5LDE3IEBACiAgKgogICogUmV0dXJucyB0aGUgY3VycmVudCBwcm9jZXNzJ3MgZG9tYWlubmFtZS4KICAqLwotc3RhdGljIGludCB0b21veW9fcmVhZF9zZWxmX2RvbWFpbihzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3N0YXRpYyB2b2lkIHRvbW95b19yZWFkX3NlbGZfZG9tYWluKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQogewotCWlmICghaGVhZC0+cmVhZF9lb2YpIHsKKwlpZiAoIWhlYWQtPnIuZW9mKSB7CiAJCS8qCiAJCSAqIHRvbW95b19kb21haW4oKS0+ZG9tYWlubmFtZSAhPSBOVUxMCiAJCSAqIGJlY2F1c2UgZXZlcnkgcHJvY2VzcyBiZWxvbmdzIHRvIGEgZG9tYWluIGFuZAogCQkgKiB0aGUgZG9tYWluJ3MgbmFtZSBjYW5ub3QgYmUgTlVMTC4KIAkJICovCiAJCXRvbW95b19pb19wcmludGYoaGVhZCwgIiVzIiwgdG9tb3lvX2RvbWFpbigpLT5kb21haW5uYW1lLT5uYW1lKTsKLQkJaGVhZC0+cmVhZF9lb2YgPSB0cnVlOworCQloZWFkLT5yLmVvZiA9IHRydWU7CiAJfQotCXJldHVybiAwOwogfQogCiAvKioKQEAgLTE5NTMsMjMgKzE3ODIsMjQgQEAKICAqCiAgKiBDYWxsZXIgYWNxdWlyZXMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCi1zdGF0aWMgaW50IHRvbW95b19vcGVuX2NvbnRyb2woY29uc3QgdTggdHlwZSwgc3RydWN0IGZpbGUgKmZpbGUpCitpbnQgdG9tb3lvX29wZW5fY29udHJvbChjb25zdCB1OCB0eXBlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCA9IGt6YWxsb2Moc2l6ZW9mKCpoZWFkKSwgR0ZQX05PRlMpOwogCiAJaWYgKCFoZWFkKQogCQlyZXR1cm4gLUVOT01FTTsKIAltdXRleF9pbml0KCZoZWFkLT5pb19zZW0pOworCWhlYWQtPnR5cGUgPSB0eXBlOwogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgVE9NT1lPX0RPTUFJTlBPTElDWToKIAkJLyogL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL2RvbWFpbl9wb2xpY3kgKi8KLQkJaGVhZC0+d3JpdGUgPSB0b21veW9fd3JpdGVfZG9tYWluX3BvbGljeTsKLQkJaGVhZC0+cmVhZCA9IHRvbW95b19yZWFkX2RvbWFpbl9wb2xpY3k7CisJCWhlYWQtPndyaXRlID0gdG9tb3lvX3dyaXRlX2RvbWFpbjsKKwkJaGVhZC0+cmVhZCA9IHRvbW95b19yZWFkX2RvbWFpbjsKIAkJYnJlYWs7CiAJY2FzZSBUT01PWU9fRVhDRVBUSU9OUE9MSUNZOgogCQkvKiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vZXhjZXB0aW9uX3BvbGljeSAqLwotCQloZWFkLT53cml0ZSA9IHRvbW95b193cml0ZV9leGNlcHRpb25fcG9saWN5OwotCQloZWFkLT5yZWFkID0gdG9tb3lvX3JlYWRfZXhjZXB0aW9uX3BvbGljeTsKKwkJaGVhZC0+d3JpdGUgPSB0b21veW9fd3JpdGVfZXhjZXB0aW9uOworCQloZWFkLT5yZWFkID0gdG9tb3lvX3JlYWRfZXhjZXB0aW9uOwogCQlicmVhazsKIAljYXNlIFRPTU9ZT19TRUxGRE9NQUlOOgogCQkvKiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vc2VsZl9kb21haW4gKi8KQEAgLTIwMDEsMTAgKzE4MzEsMTUgQEAKIAkJaGVhZC0+d3JpdGUgPSB0b21veW9fd3JpdGVfcHJvZmlsZTsKIAkJaGVhZC0+cmVhZCA9IHRvbW95b19yZWFkX3Byb2ZpbGU7CiAJCWJyZWFrOworCWNhc2UgVE9NT1lPX1FVRVJZOiAvKiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vcXVlcnkgKi8KKwkJaGVhZC0+cG9sbCA9IHRvbW95b19wb2xsX3F1ZXJ5OworCQloZWFkLT53cml0ZSA9IHRvbW95b193cml0ZV9hbnN3ZXI7CisJCWhlYWQtPnJlYWQgPSB0b21veW9fcmVhZF9xdWVyeTsKKwkJYnJlYWs7CiAJY2FzZSBUT01PWU9fTUFOQUdFUjoKIAkJLyogL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL21hbmFnZXIgKi8KLQkJaGVhZC0+d3JpdGUgPSB0b21veW9fd3JpdGVfbWFuYWdlcl9wb2xpY3k7Ci0JCWhlYWQtPnJlYWQgPSB0b21veW9fcmVhZF9tYW5hZ2VyX3BvbGljeTsKKwkJaGVhZC0+d3JpdGUgPSB0b21veW9fd3JpdGVfbWFuYWdlcjsKKwkJaGVhZC0+cmVhZCA9IHRvbW95b19yZWFkX21hbmFnZXI7CiAJCWJyZWFrOwogCX0KIAlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSkgewpAQCAtMjAxMyw3ICsxODQ4LDkgQEAKIAkJICogZm9yIHJlYWRpbmcuCiAJCSAqLwogCQloZWFkLT5yZWFkID0gTlVMTDsKLQl9IGVsc2UgeworCQloZWFkLT5wb2xsID0gTlVMTDsKKwl9IGVsc2UgaWYgKCFoZWFkLT5wb2xsKSB7CisJCS8qIERvbid0IGFsbG9jYXRlIHJlYWRfYnVmIGZvciBwb2xsKCkgYWNjZXNzLiAqLwogCQlpZiAoIWhlYWQtPnJlYWRidWZfc2l6ZSkKIAkJCWhlYWQtPnJlYWRidWZfc2l6ZSA9IDQwOTYgKiAyOwogCQloZWFkLT5yZWFkX2J1ZiA9IGt6YWxsb2MoaGVhZC0+cmVhZGJ1Zl9zaXplLCBHRlBfTk9GUyk7CkBAIC0yMDM3LDcgKzE4NzQsOCBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAl9Ci0JaGVhZC0+cmVhZGVyX2lkeCA9IHRvbW95b19yZWFkX2xvY2soKTsKKwlpZiAodHlwZSAhPSBUT01PWU9fUVVFUlkpCisJCWhlYWQtPnJlYWRlcl9pZHggPSB0b21veW9fcmVhZF9sb2NrKCk7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gaGVhZDsKIAkvKgogCSAqIENhbGwgdGhlIGhhbmRsZXIgbm93IGlmIHRoZSBmaWxlIGlzCkBAIC0yMDQ4LDEwICsxODg2LDM1IEBACiAJICovCiAJaWYgKHR5cGUgPT0gVE9NT1lPX1NFTEZET01BSU4pCiAJCXRvbW95b19yZWFkX2NvbnRyb2woZmlsZSwgTlVMTCwgMCk7CisJLyoKKwkgKiBJZiB0aGUgZmlsZSBpcyAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vcXVlcnkgLCBpbmNyZW1lbnQgdGhlCisJICogb2JzZXJ2ZXIgY291bnRlci4KKwkgKiBUaGUgb2JzZXJiZXIgY291bnRlciBpcyB1c2VkIGJ5IHRvbW95b19zdXBlcnZpc29yKCkgdG8gc2VlIGlmCisJICogdGhlcmUgaXMgc29tZSBwcm9jZXNzIG1vbml0b3JpbmcgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL3F1ZXJ5LgorCSAqLworCWVsc2UgaWYgKHR5cGUgPT0gVE9NT1lPX1FVRVJZKQorCQlhdG9taWNfaW5jKCZ0b21veW9fcXVlcnlfb2JzZXJ2ZXJzKTsKIAlyZXR1cm4gMDsKIH0KIAogLyoqCisgKiB0b21veW9fcG9sbF9jb250cm9sIC0gcG9sbCgpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBAZmlsZTogUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgorICogQHdhaXQ6IFBvaW50ZXIgdG8gInBvbGxfdGFibGUiLgorICoKKyAqIFdhaXRzIGZvciByZWFkIHJlYWRpbmVzcy4KKyAqIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9xdWVyeSBpcyBoYW5kbGVkIGJ5IC91c3Ivc2Jpbi90b21veW8tcXVlcnlkIC4KKyAqLworaW50IHRvbW95b19wb2xsX2NvbnRyb2woc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaWYgKCFoZWFkLT5wb2xsKQorCQlyZXR1cm4gLUVOT1NZUzsKKwlyZXR1cm4gaGVhZC0+cG9sbChmaWxlLCB3YWl0KTsKK30KKworLyoqCiAgKiB0b21veW9fcmVhZF9jb250cm9sIC0gcmVhZCgpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KICAqCiAgKiBAZmlsZTogICAgICAgUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgpAQCAtMjA2MiwzNiArMTkyNSwyMyBAQAogICoKICAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KLXN0YXRpYyBpbnQgdG9tb3lvX3JlYWRfY29udHJvbChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJCSAgICAgICBjb25zdCBpbnQgYnVmZmVyX2xlbikKK2ludCB0b21veW9fcmVhZF9jb250cm9sKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJY29uc3QgaW50IGJ1ZmZlcl9sZW4pCiB7Ci0JaW50IGxlbiA9IDA7CisJaW50IGxlbjsKIAlzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQljaGFyICpjcDsKIAogCWlmICghaGVhZC0+cmVhZCkKIAkJcmV0dXJuIC1FTk9TWVM7CiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaGVhZC0+aW9fc2VtKSkKIAkJcmV0dXJuIC1FSU5UUjsKLQkvKiBDYWxsIHRoZSBwb2xpY3kgaGFuZGxlci4gKi8KLQlsZW4gPSBoZWFkLT5yZWFkKGhlYWQpOwotCWlmIChsZW4gPCAwKQotCQlnb3RvIG91dDsKLQkvKiBXcml0ZSB0byBidWZmZXIuICovCi0JbGVuID0gaGVhZC0+cmVhZF9hdmFpbDsKLQlpZiAobGVuID4gYnVmZmVyX2xlbikKLQkJbGVuID0gYnVmZmVyX2xlbjsKLQlpZiAoIWxlbikKLQkJZ290byBvdXQ7Ci0JLyogaGVhZC0+cmVhZF9idWYgY2hhbmdlcyBieSBzb21lIGZ1bmN0aW9ucy4gKi8KLQljcCA9IGhlYWQtPnJlYWRfYnVmOwotCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyLCBjcCwgbGVuKSkgewotCQlsZW4gPSAtRUZBVUxUOwotCQlnb3RvIG91dDsKLQl9Ci0JaGVhZC0+cmVhZF9hdmFpbCAtPSBsZW47Ci0JbWVtbW92ZShjcCwgY3AgKyBsZW4sIGhlYWQtPnJlYWRfYXZhaWwpOwotIG91dDoKKwloZWFkLT5yZWFkX3VzZXJfYnVmID0gYnVmZmVyOworCWhlYWQtPnJlYWRfdXNlcl9idWZfYXZhaWwgPSBidWZmZXJfbGVuOworCWlmICh0b21veW9fZmx1c2goaGVhZCkpCisJCS8qIENhbGwgdGhlIHBvbGljeSBoYW5kbGVyLiAqLworCQloZWFkLT5yZWFkKGhlYWQpOworCXRvbW95b19mbHVzaChoZWFkKTsKKwlsZW4gPSBoZWFkLT5yZWFkX3VzZXJfYnVmIC0gYnVmZmVyOwogCW11dGV4X3VubG9jaygmaGVhZC0+aW9fc2VtKTsKIAlyZXR1cm4gbGVuOwogfQpAQCAtMjEwNyw4ICsxOTU3LDggQEAKICAqCiAgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCi1zdGF0aWMgaW50IHRvbW95b193cml0ZV9jb250cm9sKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJCWNvbnN0IGludCBidWZmZXJfbGVuKQoraW50IHRvbW95b193cml0ZV9jb250cm9sKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJIGNvbnN0IGludCBidWZmZXJfbGVuKQogewogCXN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWludCBlcnJvciA9IGJ1ZmZlcl9sZW47CkBAIC0yMTIxLDggKzE5NzEsNyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAkvKiBEb24ndCBhbGxvdyB1cGRhdGluZyBwb2xpY2llcyBieSBub24gbWFuYWdlciBwcm9ncmFtcy4gKi8KIAlpZiAoaGVhZC0+d3JpdGUgIT0gdG9tb3lvX3dyaXRlX3BpZCAmJgotCSAgICBoZWFkLT53cml0ZSAhPSB0b21veW9fd3JpdGVfZG9tYWluX3BvbGljeSAmJgotCSAgICAhdG9tb3lvX2lzX3BvbGljeV9tYW5hZ2VyKCkpCisJICAgIGhlYWQtPndyaXRlICE9IHRvbW95b193cml0ZV9kb21haW4gJiYgIXRvbW95b19tYW5hZ2VyKCkpCiAJCXJldHVybiAtRVBFUk07CiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaGVhZC0+aW9fc2VtKSkKIAkJcmV0dXJuIC1FSU5UUjsKQEAgLTIxNTksMTIgKzIwMDgsMTkgQEAKICAqCiAgKiBDYWxsZXIgbG9vc2VzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwotc3RhdGljIGludCB0b21veW9fY2xvc2VfY29udHJvbChzdHJ1Y3QgZmlsZSAqZmlsZSkKK2ludCB0b21veW9fY2xvc2VfY29udHJvbChzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAljb25zdCBib29sIGlzX3dyaXRlID0gISFoZWFkLT53cml0ZV9idWY7CiAKLQl0b21veW9fcmVhZF91bmxvY2soaGVhZC0+cmVhZGVyX2lkeCk7CisJLyoKKwkgKiBJZiB0aGUgZmlsZSBpcyAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vcXVlcnkgLCBkZWNyZW1lbnQgdGhlCisJICogb2JzZXJ2ZXIgY291bnRlci4KKwkgKi8KKwlpZiAoaGVhZC0+dHlwZSA9PSBUT01PWU9fUVVFUlkpCisJCWF0b21pY19kZWMoJnRvbW95b19xdWVyeV9vYnNlcnZlcnMpOworCWVsc2UKKwkJdG9tb3lvX3JlYWRfdW5sb2NrKGhlYWQtPnJlYWRlcl9pZHgpOwogCS8qIFJlbGVhc2UgbWVtb3J5IHVzZWQgZm9yIHBvbGljeSBJL08uICovCiAJa2ZyZWUoaGVhZC0+cmVhZF9idWYpOwogCWhlYWQtPnJlYWRfYnVmID0gTlVMTDsKQEAgLTIxNzksMTI5ICsyMDM1LDI1IEBACiB9CiAKIC8qKgotICogdG9tb3lvX29wZW4gLSBvcGVuKCkgZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLgotICoKLSAqIEBpbm9kZTogUG9pbnRlciB0byAic3RydWN0IGlub2RlIi4KLSAqIEBmaWxlOiAgUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKiB0b21veW9fY2hlY2tfcHJvZmlsZSAtIENoZWNrIGFsbCBwcm9maWxlcyBjdXJyZW50bHkgYXNzaWduZWQgdG8gZG9tYWlucyBhcmUgZGVmaW5lZC4KICAqLwotc3RhdGljIGludCB0b21veW9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3ZvaWQgdG9tb3lvX2NoZWNrX3Byb2ZpbGUodm9pZCkKIHsKLQljb25zdCBpbnQga2V5ID0gKCh1OCAqKSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX3ByaXZhdGUpCi0JCS0gKCh1OCAqKSBOVUxMKTsKLQlyZXR1cm4gdG9tb3lvX29wZW5fY29udHJvbChrZXksIGZpbGUpOworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbjsKKwljb25zdCBpbnQgaWR4ID0gdG9tb3lvX3JlYWRfbG9jaygpOworCXRvbW95b19wb2xpY3lfbG9hZGVkID0gdHJ1ZTsKKwkvKiBDaGVjayBhbGwgcHJvZmlsZXMgY3VycmVudGx5IGFzc2lnbmVkIHRvIGRvbWFpbnMgYXJlIGRlZmluZWQuICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZG9tYWluLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7CisJCWNvbnN0IHU4IHByb2ZpbGUgPSBkb21haW4tPnByb2ZpbGU7CisJCWlmICh0b21veW9fcHJvZmlsZV9wdHJbcHJvZmlsZV0pCisJCQljb250aW51ZTsKKwkJcGFuaWMoIlByb2ZpbGUgJXUgKHVzZWQgYnkgJyVzJykgbm90IGRlZmluZWQuXG4iLAorCQkgICAgICBwcm9maWxlLCBkb21haW4tPmRvbWFpbm5hbWUtPm5hbWUpOworCX0KKwl0b21veW9fcmVhZF91bmxvY2soaWR4KTsKKwlpZiAodG9tb3lvX3Byb2ZpbGVfdmVyc2lvbiAhPSAyMDA5MDkwMykKKwkJcGFuaWMoIlByb2ZpbGUgdmVyc2lvbiAldSBpcyBub3Qgc3VwcG9ydGVkLlxuIiwKKwkJICAgICAgdG9tb3lvX3Byb2ZpbGVfdmVyc2lvbik7CisJcHJpbnRrKEtFUk5fSU5GTyAiVE9NT1lPOiAyLjMuMFxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiTWFuZGF0b3J5IEFjY2VzcyBDb250cm9sIGFjdGl2YXRlZC5cbiIpOwogfQotCi0vKioKLSAqIHRvbW95b19yZWxlYXNlIC0gY2xvc2UoKSBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCi0gKgotICogQGlub2RlOiBQb2ludGVyIHRvICJzdHJ1Y3QgaW5vZGUiLgotICogQGZpbGU6ICBQb2ludGVyIHRvICJzdHJ1Y3QgZmlsZSIuCi0gKgotICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGludCB0b21veW9fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gdG9tb3lvX2Nsb3NlX2NvbnRyb2woZmlsZSk7Ci19Ci0KLS8qKgotICogdG9tb3lvX3JlYWQgLSByZWFkKCkgZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLgotICoKLSAqIEBmaWxlOiAgUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgotICogQGJ1ZjogICBQb2ludGVyIHRvIGJ1ZmZlci4KLSAqIEBjb3VudDogU2l6ZSBvZiBAYnVmLgotICogQHBwb3M6ICBVbnVzZWQuCi0gKgotICogUmV0dXJucyBieXRlcyByZWFkIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIHNzaXplX3QgdG9tb3lvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKLQkJCSAgIGxvZmZfdCAqcHBvcykKLXsKLQlyZXR1cm4gdG9tb3lvX3JlYWRfY29udHJvbChmaWxlLCBidWYsIGNvdW50KTsKLX0KLQotLyoqCi0gKiB0b21veW9fd3JpdGUgLSB3cml0ZSgpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KLSAqCi0gKiBAZmlsZTogIFBvaW50ZXIgdG8gInN0cnVjdCBmaWxlIi4KLSAqIEBidWY6ICAgUG9pbnRlciB0byBidWZmZXIuCi0gKiBAY291bnQ6IFNpemUgb2YgQGJ1Zi4KLSAqIEBwcG9zOiAgVW51c2VkLgotICoKLSAqIFJldHVybnMgQGNvdW50IG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIHNzaXplX3QgdG9tb3lvX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAotCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXJldHVybiB0b21veW9fd3JpdGVfY29udHJvbChmaWxlLCBidWYsIGNvdW50KTsKLX0KLQotLyoKLSAqIHRvbW95b19vcGVyYXRpb25zIGlzIGEgInN0cnVjdCBmaWxlX29wZXJhdGlvbnMiIHdoaWNoIGlzIHVzZWQgZm9yIGhhbmRsaW5nCi0gKiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KLSAqCi0gKiBTb21lIGZpbGVzIHVuZGVyIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gZGlyZWN0b3J5IGFjY2VwdCBvcGVuKE9fUkRXUikuCi0gKiBTZWUgdG9tb3lvX2lvX2J1ZmZlciBmb3IgaW50ZXJuYWxzLgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0b21veW9fb3BlcmF0aW9ucyA9IHsKLQkub3BlbiAgICA9IHRvbW95b19vcGVuLAotCS5yZWxlYXNlID0gdG9tb3lvX3JlbGVhc2UsCi0JLnJlYWQgICAgPSB0b21veW9fcmVhZCwKLQkud3JpdGUgICA9IHRvbW95b193cml0ZSwKLX07Ci0KLS8qKgotICogdG9tb3lvX2NyZWF0ZV9lbnRyeSAtIENyZWF0ZSBpbnRlcmZhY2UgZmlsZXMgdW5kZXIgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBkaXJlY3RvcnkuCi0gKgotICogQG5hbWU6ICAgVGhlIG5hbWUgb2YgdGhlIGludGVyZmFjZSBmaWxlLgotICogQG1vZGU6ICAgVGhlIHBlcm1pc3Npb24gb2YgdGhlIGludGVyZmFjZSBmaWxlLgotICogQHBhcmVudDogVGhlIHBhcmVudCBkaXJlY3RvcnkuCi0gKiBAa2V5OiAgICBUeXBlIG9mIGludGVyZmFjZS4KLSAqCi0gKiBSZXR1cm5zIG5vdGhpbmcuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCB0b21veW9fY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IG1vZGVfdCBtb2RlLAotCQkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIGNvbnN0IHU4IGtleSkKLXsKLQlzZWN1cml0eWZzX2NyZWF0ZV9maWxlKG5hbWUsIG1vZGUsIHBhcmVudCwgKCh1OCAqKSBOVUxMKSArIGtleSwKLQkJCSAgICAgICAmdG9tb3lvX29wZXJhdGlvbnMpOwotfQotCi0vKioKLSAqIHRvbW95b19pbml0ZXJmYWNlX2luaXQgLSBJbml0aWFsaXplIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLgotICoKLSAqIFJldHVybnMgMC4KLSAqLwotc3RhdGljIGludCBfX2luaXQgdG9tb3lvX2luaXRlcmZhY2VfaW5pdCh2b2lkKQotewotCXN0cnVjdCBkZW50cnkgKnRvbW95b19kaXI7Ci0KLQkvKiBEb24ndCBjcmVhdGUgc2VjdXJpdHlmcyBlbnRyaWVzIHVubGVzcyByZWdpc3RlcmVkLiAqLwotCWlmIChjdXJyZW50X2NyZWQoKS0+c2VjdXJpdHkgIT0gJnRvbW95b19rZXJuZWxfZG9tYWluKQotCQlyZXR1cm4gMDsKLQotCXRvbW95b19kaXIgPSBzZWN1cml0eWZzX2NyZWF0ZV9kaXIoInRvbW95byIsIE5VTEwpOwotCXRvbW95b19jcmVhdGVfZW50cnkoImRvbWFpbl9wb2xpY3kiLCAgICAwNjAwLCB0b21veW9fZGlyLAotCQkJICAgIFRPTU9ZT19ET01BSU5QT0xJQ1kpOwotCXRvbW95b19jcmVhdGVfZW50cnkoImV4Y2VwdGlvbl9wb2xpY3kiLCAwNjAwLCB0b21veW9fZGlyLAotCQkJICAgIFRPTU9ZT19FWENFUFRJT05QT0xJQ1kpOwotCXRvbW95b19jcmVhdGVfZW50cnkoInNlbGZfZG9tYWluIiwgICAgICAwNDAwLCB0b21veW9fZGlyLAotCQkJICAgIFRPTU9ZT19TRUxGRE9NQUlOKTsKLQl0b21veW9fY3JlYXRlX2VudHJ5KCIuZG9tYWluX3N0YXR1cyIsICAgMDYwMCwgdG9tb3lvX2RpciwKLQkJCSAgICBUT01PWU9fRE9NQUlOX1NUQVRVUyk7Ci0JdG9tb3lvX2NyZWF0ZV9lbnRyeSgiLnByb2Nlc3Nfc3RhdHVzIiwgIDA2MDAsIHRvbW95b19kaXIsCi0JCQkgICAgVE9NT1lPX1BST0NFU1NfU1RBVFVTKTsKLQl0b21veW9fY3JlYXRlX2VudHJ5KCJtZW1pbmZvIiwgICAgICAgICAgMDYwMCwgdG9tb3lvX2RpciwKLQkJCSAgICBUT01PWU9fTUVNSU5GTyk7Ci0JdG9tb3lvX2NyZWF0ZV9lbnRyeSgicHJvZmlsZSIsICAgICAgICAgIDA2MDAsIHRvbW95b19kaXIsCi0JCQkgICAgVE9NT1lPX1BST0ZJTEUpOwotCXRvbW95b19jcmVhdGVfZW50cnkoIm1hbmFnZXIiLCAgICAgICAgICAwNjAwLCB0b21veW9fZGlyLAotCQkJICAgIFRPTU9ZT19NQU5BR0VSKTsKLQl0b21veW9fY3JlYXRlX2VudHJ5KCJ2ZXJzaW9uIiwgICAgICAgICAgMDQwMCwgdG9tb3lvX2RpciwKLQkJCSAgICBUT01PWU9fVkVSU0lPTik7Ci0JcmV0dXJuIDA7Ci19Ci0KLWZzX2luaXRjYWxsKHRvbW95b19pbml0ZXJmYWNlX2luaXQpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5oIGIvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5oCmluZGV4IDlmMWFlNWUuLjA0NDU0Y2I3YiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5oCisrKyBiL3NlY3VyaXR5L3RvbW95by9jb21tb24uaApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NyZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiBzdHJ1Y3QgbGludXhfYmlucHJtOwogCiAvKioqKioqKioqKiBDb25zdGFudHMgZGVmaW5pdGlvbnMuICoqKioqKioqKiovCkBAIC0zMiwyMCArMzMsNDQgQEAKICNkZWZpbmUgVE9NT1lPX0hBU0hfQklUUyAgOAogI2RlZmluZSBUT01PWU9fTUFYX0hBU0ggKDF1PDxUT01PWU9fSEFTSF9CSVRTKQogCi0vKgotICogVGhpcyBpcyB0aGUgbWF4IGxlbmd0aCBvZiBhIHRva2VuLgotICoKLSAqIEEgdG9rZW4gY29uc2lzdHMgb2Ygb25seSBBU0NJSSBwcmludGFibGUgY2hhcmFjdGVycy4KLSAqIE5vbiBwcmludGFibGUgY2hhcmFjdGVycyBpbiBhIHRva2VuIGlzIHJlcHJlc2VudGVkIGluIFxvb28gc3R5bGUKLSAqIG9jdGFsIHN0cmluZy4gVGh1cywgXCBpdHNlbGYgaXMgcmVwcmVzZW50ZWQgYXMgXFwuCi0gKi8KLSNkZWZpbmUgVE9NT1lPX01BWF9QQVRITkFNRV9MRU4gNDAwMAorI2RlZmluZSBUT01PWU9fRVhFQ19UTVBTSVpFICAgICA0MDk2CiAKIC8qIFByb2ZpbGUgbnVtYmVyIGlzIGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCAyNTUuICovCiAjZGVmaW5lIFRPTU9ZT19NQVhfUFJPRklMRVMgMjU2CiAKK2VudW0gdG9tb3lvX21vZGVfaW5kZXggeworCVRPTU9ZT19DT05GSUdfRElTQUJMRUQsCisJVE9NT1lPX0NPTkZJR19MRUFSTklORywKKwlUT01PWU9fQ09ORklHX1BFUk1JU1NJVkUsCisJVE9NT1lPX0NPTkZJR19FTkZPUkNJTkcsCisJVE9NT1lPX0NPTkZJR19VU0VfREVGQVVMVCA9IDI1NQorfTsKKworZW51bSB0b21veW9fcG9saWN5X2lkIHsKKwlUT01PWU9fSURfR1JPVVAsCisJVE9NT1lPX0lEX1BBVEhfR1JPVVAsCisJVE9NT1lPX0lEX05VTUJFUl9HUk9VUCwKKwlUT01PWU9fSURfVFJBTlNJVElPTl9DT05UUk9MLAorCVRPTU9ZT19JRF9BR0dSRUdBVE9SLAorCVRPTU9ZT19JRF9HTE9CQUxMWV9SRUFEQUJMRSwKKwlUT01PWU9fSURfUEFUVEVSTiwKKwlUT01PWU9fSURfTk9fUkVXUklURSwKKwlUT01PWU9fSURfTUFOQUdFUiwKKwlUT01PWU9fSURfTkFNRSwKKwlUT01PWU9fSURfQUNMLAorCVRPTU9ZT19JRF9ET01BSU4sCisJVE9NT1lPX01BWF9QT0xJQ1kKK307CisKK2VudW0gdG9tb3lvX2dyb3VwX2lkIHsKKwlUT01PWU9fUEFUSF9HUk9VUCwKKwlUT01PWU9fTlVNQkVSX0dST1VQLAorCVRPTU9ZT19NQVhfR1JPVVAKK307CisKIC8qIEtleXdvcmRzIGZvciBBQ0xzLiAqLwotI2RlZmluZSBUT01PWU9fS0VZV09SRF9BTElBUyAgICAgICAgICAgICAgICAgICAgICJhbGlhcyAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0FHR1JFR0FUT1IgICAgICAgICAgICAgICAgImFnZ3JlZ2F0b3IgIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9BTExPV19NT1VOVCAgICAgICAgICAgICAgICJhbGxvd19tb3VudCAiCiAjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0FMTE9XX1JFQUQgICAgICAgICAgICAgICAgImFsbG93X3JlYWQgIgogI2RlZmluZSBUT01PWU9fS0VZV09SRF9ERUxFVEUgICAgICAgICAgICAgICAgICAgICJkZWxldGUgIgogI2RlZmluZSBUT01PWU9fS0VZV09SRF9ERU5ZX1JFV1JJVEUgICAgICAgICAgICAgICJkZW55X3Jld3JpdGUgIgpAQCAtNTUsMzYgKzgwLDUxIEBACiAjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX05PX0lOSVRJQUxJWkVfRE9NQUlOICAgICAgIm5vX2luaXRpYWxpemVfZG9tYWluICIKICNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfTk9fS0VFUF9ET01BSU4gICAgICAgICAgICAibm9fa2VlcF9kb21haW4gIgogI2RlZmluZSBUT01PWU9fS0VZV09SRF9QQVRIX0dST1VQICAgICAgICAgICAgICAgICJwYXRoX2dyb3VwICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfTlVNQkVSX0dST1VQICAgICAgICAgICAgICAibnVtYmVyX2dyb3VwICIKICNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfU0VMRUNUICAgICAgICAgICAgICAgICAgICAic2VsZWN0ICIKICNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfVVNFX1BST0ZJTEUgICAgICAgICAgICAgICAidXNlX3Byb2ZpbGUgIgogI2RlZmluZSBUT01PWU9fS0VZV09SRF9JR05PUkVfR0xPQkFMX0FMTE9XX1JFQUQgICJpZ25vcmVfZ2xvYmFsX2FsbG93X3JlYWQiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX1FVT1RBX0VYQ0VFREVEICAgICAgICAgICAgInF1b3RhX2V4Y2VlZGVkIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9UUkFOU0lUSU9OX0ZBSUxFRCAgICAgICAgICJ0cmFuc2l0aW9uX2ZhaWxlZCIKIC8qIEEgZG9tYWluIGRlZmluaXRpb24gc3RhcnRzIHdpdGggPGtlcm5lbD4uICovCiAjZGVmaW5lIFRPTU9ZT19ST09UX05BTUUgICAgICAgICAgICAgICAgICAgICAgICAgIjxrZXJuZWw+IgogI2RlZmluZSBUT01PWU9fUk9PVF9OQU1FX0xFTiAgICAgICAgICAgICAgICAgICAgIChzaXplb2YoVE9NT1lPX1JPT1RfTkFNRSkgLSAxKQogCi0vKiBJbmRleCBudW1iZXJzIGZvciBBY2Nlc3MgQ29udHJvbHMuICovCi1lbnVtIHRvbW95b19tYWNfaW5kZXggewotCVRPTU9ZT19NQUNfRk9SX0ZJTEUsICAvKiBkb21haW5fcG9saWN5LmNvbmYgKi8KLQlUT01PWU9fTUFYX0FDQ0VQVF9FTlRSWSwKLQlUT01PWU9fVkVSQk9TRSwKLQlUT01PWU9fTUFYX0NPTlRST0xfSU5ERVgKKy8qIFZhbHVlIHR5cGUgZGVmaW5pdGlvbi4gKi8KKyNkZWZpbmUgVE9NT1lPX1ZBTFVFX1RZUEVfSU5WQUxJRCAgICAgMAorI2RlZmluZSBUT01PWU9fVkFMVUVfVFlQRV9ERUNJTUFMICAgICAxCisjZGVmaW5lIFRPTU9ZT19WQUxVRV9UWVBFX09DVEFMICAgICAgIDIKKyNkZWZpbmUgVE9NT1lPX1ZBTFVFX1RZUEVfSEVYQURFQ0lNQUwgMworCitlbnVtIHRvbW95b190cmFuc2l0aW9uX3R5cGUgeworCS8qIERvIG5vdCBjaGFuZ2UgdGhpcyBvcmRlciwgKi8KKwlUT01PWU9fVFJBTlNJVElPTl9DT05UUk9MX05PX0lOSVRJQUxJWkUsCisJVE9NT1lPX1RSQU5TSVRJT05fQ09OVFJPTF9JTklUSUFMSVpFLAorCVRPTU9ZT19UUkFOU0lUSU9OX0NPTlRST0xfTk9fS0VFUCwKKwlUT01PWU9fVFJBTlNJVElPTl9DT05UUk9MX0tFRVAsCisJVE9NT1lPX01BWF9UUkFOU0lUSU9OX1RZUEUKIH07CiAKIC8qIEluZGV4IG51bWJlcnMgZm9yIEFjY2VzcyBDb250cm9scy4gKi8KIGVudW0gdG9tb3lvX2FjbF9lbnRyeV90eXBlX2luZGV4IHsKIAlUT01PWU9fVFlQRV9QQVRIX0FDTCwKIAlUT01PWU9fVFlQRV9QQVRIMl9BQ0wsCisJVE9NT1lPX1RZUEVfUEFUSF9OVU1CRVJfQUNMLAorCVRPTU9ZT19UWVBFX01LREVWX0FDTCwKKwlUT01PWU9fVFlQRV9NT1VOVF9BQ0wsCiB9OwogCiAvKiBJbmRleCBudW1iZXJzIGZvciBGaWxlIENvbnRyb2xzLiAqLwogCiAvKgotICogVFlQRV9SRUFEX1dSSVRFX0FDTCBpcyBzcGVjaWFsLiBUWVBFX1JFQURfV1JJVEVfQUNMIGlzIGF1dG9tYXRpY2FsbHkgc2V0Ci0gKiBpZiBib3RoIFRZUEVfUkVBRF9BQ0wgYW5kIFRZUEVfV1JJVEVfQUNMIGFyZSBzZXQuIEJvdGggVFlQRV9SRUFEX0FDTCBhbmQKLSAqIFRZUEVfV1JJVEVfQUNMIGFyZSBhdXRvbWF0aWNhbGx5IHNldCBpZiBUWVBFX1JFQURfV1JJVEVfQUNMIGlzIHNldC4KLSAqIFRZUEVfUkVBRF9XUklURV9BQ0wgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIGlmIGVpdGhlciBUWVBFX1JFQURfQUNMIG9yCi0gKiBUWVBFX1dSSVRFX0FDTCBpcyBjbGVhcmVkLiBCb3RoIFRZUEVfUkVBRF9BQ0wgYW5kIFRZUEVfV1JJVEVfQUNMIGFyZQotICogYXV0b21hdGljYWxseSBjbGVhcmVkIGlmIFRZUEVfUkVBRF9XUklURV9BQ0wgaXMgY2xlYXJlZC4KKyAqIFRPTU9ZT19UWVBFX1JFQURfV1JJVEUgaXMgc3BlY2lhbC4gVE9NT1lPX1RZUEVfUkVBRF9XUklURSBpcyBhdXRvbWF0aWNhbGx5CisgKiBzZXQgaWYgYm90aCBUT01PWU9fVFlQRV9SRUFEIGFuZCBUT01PWU9fVFlQRV9XUklURSBhcmUgc2V0LgorICogQm90aCBUT01PWU9fVFlQRV9SRUFEIGFuZCBUT01PWU9fVFlQRV9XUklURSBhcmUgYXV0b21hdGljYWxseSBzZXQgaWYKKyAqIFRPTU9ZT19UWVBFX1JFQURfV1JJVEUgaXMgc2V0LgorICogVE9NT1lPX1RZUEVfUkVBRF9XUklURSBpcyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgaWYgZWl0aGVyIFRPTU9ZT19UWVBFX1JFQUQKKyAqIG9yIFRPTU9ZT19UWVBFX1dSSVRFIGlzIGNsZWFyZWQuCisgKiBCb3RoIFRPTU9ZT19UWVBFX1JFQUQgYW5kIFRPTU9ZT19UWVBFX1dSSVRFIGFyZSBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgaWYKKyAqIFRPTU9ZT19UWVBFX1JFQURfV1JJVEUgaXMgY2xlYXJlZC4KICAqLwogCiBlbnVtIHRvbW95b19wYXRoX2FjbF9pbmRleCB7CkBAIC05MiwyNyArMTMyLDI0IEBACiAJVE9NT1lPX1RZUEVfRVhFQ1VURSwKIAlUT01PWU9fVFlQRV9SRUFELAogCVRPTU9ZT19UWVBFX1dSSVRFLAotCVRPTU9ZT19UWVBFX0NSRUFURSwKIAlUT01PWU9fVFlQRV9VTkxJTkssCi0JVE9NT1lPX1RZUEVfTUtESVIsCiAJVE9NT1lPX1RZUEVfUk1ESVIsCi0JVE9NT1lPX1RZUEVfTUtGSUZPLAotCVRPTU9ZT19UWVBFX01LU09DSywKLQlUT01PWU9fVFlQRV9NS0JMT0NLLAotCVRPTU9ZT19UWVBFX01LQ0hBUiwKIAlUT01PWU9fVFlQRV9UUlVOQ0FURSwKIAlUT01PWU9fVFlQRV9TWU1MSU5LLAogCVRPTU9ZT19UWVBFX1JFV1JJVEUsCi0JVE9NT1lPX1RZUEVfSU9DVEwsCi0JVE9NT1lPX1RZUEVfQ0hNT0QsCi0JVE9NT1lPX1RZUEVfQ0hPV04sCi0JVE9NT1lPX1RZUEVfQ0hHUlAsCiAJVE9NT1lPX1RZUEVfQ0hST09ULAotCVRPTU9ZT19UWVBFX01PVU5ULAogCVRPTU9ZT19UWVBFX1VNT1VOVCwKIAlUT01PWU9fTUFYX1BBVEhfT1BFUkFUSU9OCiB9OwogCisjZGVmaW5lIFRPTU9ZT19SV19NQVNLICgoMSA8PCBUT01PWU9fVFlQRV9SRUFEKSB8ICgxIDw8IFRPTU9ZT19UWVBFX1dSSVRFKSkKKworZW51bSB0b21veW9fbWtkZXZfYWNsX2luZGV4IHsKKwlUT01PWU9fVFlQRV9NS0JMT0NLLAorCVRPTU9ZT19UWVBFX01LQ0hBUiwKKwlUT01PWU9fTUFYX01LREVWX09QRVJBVElPTgorfTsKKwogZW51bSB0b21veW9fcGF0aDJfYWNsX2luZGV4IHsKIAlUT01PWU9fVFlQRV9MSU5LLAogCVRPTU9ZT19UWVBFX1JFTkFNRSwKQEAgLTEyMCw2ICsxNTcsMTggQEAKIAlUT01PWU9fTUFYX1BBVEgyX09QRVJBVElPTgogfTsKIAorZW51bSB0b21veW9fcGF0aF9udW1iZXJfYWNsX2luZGV4IHsKKwlUT01PWU9fVFlQRV9DUkVBVEUsCisJVE9NT1lPX1RZUEVfTUtESVIsCisJVE9NT1lPX1RZUEVfTUtGSUZPLAorCVRPTU9ZT19UWVBFX01LU09DSywKKwlUT01PWU9fVFlQRV9JT0NUTCwKKwlUT01PWU9fVFlQRV9DSE1PRCwKKwlUT01PWU9fVFlQRV9DSE9XTiwKKwlUT01PWU9fVFlQRV9DSEdSUCwKKwlUT01PWU9fTUFYX1BBVEhfTlVNQkVSX09QRVJBVElPTgorfTsKKwogZW51bSB0b21veW9fc2VjdXJpdHlmc19pbnRlcmZhY2VfaW5kZXggewogCVRPTU9ZT19ET01BSU5QT0xJQ1ksCiAJVE9NT1lPX0VYQ0VQVElPTlBPTElDWSwKQEAgLTEyOSwyMCArMTc4LDEwOSBAQAogCVRPTU9ZT19TRUxGRE9NQUlOLAogCVRPTU9ZT19WRVJTSU9OLAogCVRPTU9ZT19QUk9GSUxFLAorCVRPTU9ZT19RVUVSWSwKIAlUT01PWU9fTUFOQUdFUgogfTsKIAorZW51bSB0b21veW9fbWFjX2luZGV4IHsKKwlUT01PWU9fTUFDX0ZJTEVfRVhFQ1VURSwKKwlUT01PWU9fTUFDX0ZJTEVfT1BFTiwKKwlUT01PWU9fTUFDX0ZJTEVfQ1JFQVRFLAorCVRPTU9ZT19NQUNfRklMRV9VTkxJTkssCisJVE9NT1lPX01BQ19GSUxFX01LRElSLAorCVRPTU9ZT19NQUNfRklMRV9STURJUiwKKwlUT01PWU9fTUFDX0ZJTEVfTUtGSUZPLAorCVRPTU9ZT19NQUNfRklMRV9NS1NPQ0ssCisJVE9NT1lPX01BQ19GSUxFX1RSVU5DQVRFLAorCVRPTU9ZT19NQUNfRklMRV9TWU1MSU5LLAorCVRPTU9ZT19NQUNfRklMRV9SRVdSSVRFLAorCVRPTU9ZT19NQUNfRklMRV9NS0JMT0NLLAorCVRPTU9ZT19NQUNfRklMRV9NS0NIQVIsCisJVE9NT1lPX01BQ19GSUxFX0xJTkssCisJVE9NT1lPX01BQ19GSUxFX1JFTkFNRSwKKwlUT01PWU9fTUFDX0ZJTEVfQ0hNT0QsCisJVE9NT1lPX01BQ19GSUxFX0NIT1dOLAorCVRPTU9ZT19NQUNfRklMRV9DSEdSUCwKKwlUT01PWU9fTUFDX0ZJTEVfSU9DVEwsCisJVE9NT1lPX01BQ19GSUxFX0NIUk9PVCwKKwlUT01PWU9fTUFDX0ZJTEVfTU9VTlQsCisJVE9NT1lPX01BQ19GSUxFX1VNT1VOVCwKKwlUT01PWU9fTUFDX0ZJTEVfUElWT1RfUk9PVCwKKwlUT01PWU9fTUFYX01BQ19JTkRFWAorfTsKKworZW51bSB0b21veW9fbWFjX2NhdGVnb3J5X2luZGV4IHsKKwlUT01PWU9fTUFDX0NBVEVHT1JZX0ZJTEUsCisJVE9NT1lPX01BWF9NQUNfQ0FURUdPUllfSU5ERVgKK307CisKKyNkZWZpbmUgVE9NT1lPX1JFVFJZX1JFUVVFU1QgMSAvKiBSZXRyeSB0aGlzIHJlcXVlc3QuICovCisKIC8qKioqKioqKioqIFN0cnVjdHVyZSBkZWZpbml0aW9ucy4gKioqKioqKioqKi8KIAogLyoKLSAqIHRvbW95b19wYWdlX2J1ZmZlciBpcyBhIHN0cnVjdHVyZSB3aGljaCBpcyB1c2VkIGZvciBob2xkaW5nIGEgcGF0aG5hbWUKLSAqIG9idGFpbmVkIGZyb20gInN0cnVjdCBkZW50cnkiIGFuZCAic3RydWN0IHZmc21vdW50IiBwYWlyLgotICogQXMgb2Ygbm93LCBpdCBpcyA0MDk2IGJ5dGVzLiBJZiB1c2VycyBjb21wbGFpbiB0aGF0IDQwOTYgYnl0ZXMgaXMgdG9vIHNtYWxsCi0gKiAoYmVjYXVzZSBUT01PWU8gZXNjYXBlcyBub24gQVNDSUkgcHJpbnRhYmxlIGNoYXJhY3RlcnMgdXNpbmcgXG9vbyBmb3JtYXQpLAotICogd2Ugd2lsbCBtYWtlIHRoZSBidWZmZXIgbGFyZ2VyLgorICogdG9tb3lvX2FjbF9oZWFkIGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcgZWxlbWVudHMgbm90IGluCisgKiBkb21haW4gcG9saWN5LgorICogSXQgaGFzIGZvbGxvd2luZyBmaWVsZHMuCisgKgorICogICgxKSAibGlzdCIgd2hpY2ggaXMgbGlua2VkIHRvIHRvbW95b19wb2xpY3lfbGlzdFtdIC4KKyAqICAoMikgImlzX2RlbGV0ZWQiIGlzIGEgYm9vbCB3aGljaCBpcyB0cnVlIGlmIG1hcmtlZCBhcyBkZWxldGVkLCBmYWxzZQorICogICAgICBvdGhlcndpc2UuCiAgKi8KLXN0cnVjdCB0b21veW9fcGFnZV9idWZmZXIgewotCWNoYXIgYnVmZmVyWzQwOTZdOworc3RydWN0IHRvbW95b19hY2xfaGVhZCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWJvb2wgaXNfZGVsZXRlZDsKK30gX19wYWNrZWQ7CisKKy8qCisgKiB0b21veW9fcmVxdWVzdF9pbmZvIGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcKKyAqCisgKiAoMSkgRG9tYWluIGluZm9ybWF0aW9uIG9mIGN1cnJlbnQgcHJvY2Vzcy4KKyAqICgyKSBIb3cgbWFueSByZXRyaWVzIGFyZSBtYWRlIGZvciB0aGlzIHJlcXVlc3QuCisgKiAoMykgUHJvZmlsZSBudW1iZXIgdXNlZCBmb3IgdGhpcyByZXF1ZXN0LgorICogKDQpIEFjY2VzcyBjb250cm9sIG1vZGUgb2YgdGhlIHByb2ZpbGUuCisgKi8KK3N0cnVjdCB0b21veW9fcmVxdWVzdF9pbmZvIHsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW47CisJLyogRm9yIGhvbGRpbmcgcGFyYW1ldGVycy4gKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWU7CisJCQkvKiBGb3IgdXNpbmcgd2lsZGNhcmRzIGF0IHRvbW95b19maW5kX25leHRfZG9tYWluKCkuICovCisJCQljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqbWF0Y2hlZF9wYXRoOworCQkJdTggb3BlcmF0aW9uOworCQl9IHBhdGg7CisJCXN0cnVjdCB7CisJCQljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUxOworCQkJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lMjsKKwkJCXU4IG9wZXJhdGlvbjsKKwkJfSBwYXRoMjsKKwkJc3RydWN0IHsKKwkJCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZTsKKwkJCXVuc2lnbmVkIGludCBtb2RlOworCQkJdW5zaWduZWQgaW50IG1ham9yOworCQkJdW5zaWduZWQgaW50IG1pbm9yOworCQkJdTggb3BlcmF0aW9uOworCQl9IG1rZGV2OworCQlzdHJ1Y3QgeworCQkJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lOworCQkJdW5zaWduZWQgbG9uZyBudW1iZXI7CisJCQl1OCBvcGVyYXRpb247CisJCX0gcGF0aF9udW1iZXI7CisJCXN0cnVjdCB7CisJCQljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqdHlwZTsKKwkJCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpkaXI7CisJCQljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZGV2OworCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJCWludCBuZWVkX2RldjsKKwkJfSBtb3VudDsKKwl9IHBhcmFtOworCXU4IHBhcmFtX3R5cGU7CisJYm9vbCBncmFudGVkOworCXU4IHJldHJ5OworCXU4IHByb2ZpbGU7CisJdTggbW9kZTsgLyogT25lIG9mIHRvbW95b19tb2RlX2luZGV4IC4gKi8KKwl1OCB0eXBlOwogfTsKIAogLyoKQEAgLTE3NCw0NSArMzEyLDMxIEBACiB9OwogCiAvKgotICogdG9tb3lvX25hbWVfZW50cnkgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgbGlua2luZworICogdG9tb3lvX25hbWUgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgbGlua2luZwogICogInN0cnVjdCB0b21veW9fcGF0aF9pbmZvIiBpbnRvIHRvbW95b19uYW1lX2xpc3QgLgogICovCi1zdHJ1Y3QgdG9tb3lvX25hbWVfZW50cnkgeworc3RydWN0IHRvbW95b19uYW1lIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJYXRvbWljX3QgdXNlcnM7CiAJc3RydWN0IHRvbW95b19wYXRoX2luZm8gZW50cnk7CiB9OwogCi0vKgotICogdG9tb3lvX3BhdGhfaW5mb193aXRoX2RhdGEgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZyBhCi0gKiBwYXRobmFtZSBvYnRhaW5lZCBmcm9tICJzdHJ1Y3QgZGVudHJ5IiBhbmQgInN0cnVjdCB2ZnNtb3VudCIgcGFpci4KLSAqCi0gKiAic3RydWN0IHRvbW95b19wYXRoX2luZm9fd2l0aF9kYXRhIiBjb25zaXN0cyBvZiAic3RydWN0IHRvbW95b19wYXRoX2luZm8iCi0gKiBhbmQgYnVmZmVyIGZvciB0aGUgcGF0aG5hbWUsIHdoaWxlICJzdHJ1Y3QgdG9tb3lvX3BhZ2VfYnVmZmVyIiBjb25zaXN0cyBvZgotICogYnVmZmVyIGZvciB0aGUgcGF0aG5hbWUgb25seS4KLSAqCi0gKiAic3RydWN0IHRvbW95b19wYXRoX2luZm9fd2l0aF9kYXRhIiBpcyBpbnRlbmRlZCB0byBhbGxvdyBUT01PWU8gdG8gcmVsZWFzZQotICogYm90aCAic3RydWN0IHRvbW95b19wYXRoX2luZm8iIGFuZCBidWZmZXIgZm9yIHRoZSBwYXRobmFtZSBieSBzaW5nbGUga2ZyZWUoKQotICogc28gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIHJldHVybiB0d28gcG9pbnRlcnMgdG8gdGhlIGNhbGxlci4gSWYgdGhlIGNhbGxlcgotICogcHV0cyAic3RydWN0IHRvbW95b19wYXRoX2luZm8iIG9uIHN0YWNrIG1lbW9yeSwgd2Ugd2lsbCBiZSBhYmxlIHRvIHJlbW92ZQotICogInN0cnVjdCB0b21veW9fcGF0aF9pbmZvX3dpdGhfZGF0YSIuCi0gKi8KLXN0cnVjdCB0b21veW9fcGF0aF9pbmZvX3dpdGhfZGF0YSB7Ci0JLyogS2VlcCAiaGVhZCIgZmlyc3QsIGZvciB0aGlzIHBvaW50ZXIgaXMgcGFzc2VkIHRvIGtmcmVlKCkuICovCi0Jc3RydWN0IHRvbW95b19wYXRoX2luZm8gaGVhZDsKLQljaGFyIGJhcnJpZXIxWzE2XTsgLyogU2FmZWd1YXJkIGZvciBvdmVycnVuLiAqLwotCWNoYXIgYm9keVtUT01PWU9fTUFYX1BBVEhOQU1FX0xFTl07Ci0JY2hhciBiYXJyaWVyMlsxNl07IC8qIFNhZmVndWFyZCBmb3Igb3ZlcnJ1bi4gKi8KLX07Ci0KIHN0cnVjdCB0b21veW9fbmFtZV91bmlvbiB7CiAJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lOwotCXN0cnVjdCB0b21veW9fcGF0aF9ncm91cCAqZ3JvdXA7CisJc3RydWN0IHRvbW95b19ncm91cCAqZ3JvdXA7CiAJdTggaXNfZ3JvdXA7CiB9OwogCi0vKiBTdHJ1Y3R1cmUgZm9yICJwYXRoX2dyb3VwIiBkaXJlY3RpdmUuICovCi1zdHJ1Y3QgdG9tb3lvX3BhdGhfZ3JvdXAgeworc3RydWN0IHRvbW95b19udW1iZXJfdW5pb24geworCXVuc2lnbmVkIGxvbmcgdmFsdWVzWzJdOworCXN0cnVjdCB0b21veW9fZ3JvdXAgKmdyb3VwOworCXU4IG1pbl90eXBlOworCXU4IG1heF90eXBlOworCXU4IGlzX2dyb3VwOworfTsKKworLyogU3RydWN0dXJlIGZvciAicGF0aF9ncm91cCIvIm51bWJlcl9ncm91cCIgZGlyZWN0aXZlLiAqLworc3RydWN0IHRvbW95b19ncm91cCB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpncm91cF9uYW1lOwogCXN0cnVjdCBsaXN0X2hlYWQgbWVtYmVyX2xpc3Q7CkBAIC0yMjAsMjggKzM0NCwzNSBAQAogfTsKIAogLyogU3RydWN0dXJlIGZvciAicGF0aF9ncm91cCIgZGlyZWN0aXZlLiAqLwotc3RydWN0IHRvbW95b19wYXRoX2dyb3VwX21lbWJlciB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCWJvb2wgaXNfZGVsZXRlZDsKK3N0cnVjdCB0b21veW9fcGF0aF9ncm91cCB7CisJc3RydWN0IHRvbW95b19hY2xfaGVhZCBoZWFkOwogCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICptZW1iZXJfbmFtZTsKIH07CiAKKy8qIFN0cnVjdHVyZSBmb3IgIm51bWJlcl9ncm91cCIgZGlyZWN0aXZlLiAqLworc3RydWN0IHRvbW95b19udW1iZXJfZ3JvdXAgeworCXN0cnVjdCB0b21veW9fYWNsX2hlYWQgaGVhZDsKKwlzdHJ1Y3QgdG9tb3lvX251bWJlcl91bmlvbiBudW1iZXI7Cit9OworCiAvKgogICogdG9tb3lvX2FjbF9pbmZvIGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcKICAqCiAgKiAgKDEpICJsaXN0IiB3aGljaCBpcyBsaW5rZWQgdG8gdGhlIC0+YWNsX2luZm9fbGlzdCBvZgogICogICAgICAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIKLSAqICAoMikgInR5cGUiIHdoaWNoIHRlbGxzIHR5cGUgb2YgdGhlIGVudHJ5IChlaXRoZXIKLSAqICAgICAgInN0cnVjdCB0b21veW9fcGF0aF9hY2wiIG9yICJzdHJ1Y3QgdG9tb3lvX3BhdGgyX2FjbCIpLgorICogICgyKSAiaXNfZGVsZXRlZCIgaXMgYSBib29sIHdoaWNoIGlzIHRydWUgaWYgdGhpcyBkb21haW4gaXMgbWFya2VkIGFzCisgKiAgICAgICJkZWxldGVkIiwgZmFsc2Ugb3RoZXJ3aXNlLgorICogICgzKSAidHlwZSIgd2hpY2ggdGVsbHMgdHlwZSBvZiB0aGUgZW50cnkuCiAgKgogICogUGFja2luZyAic3RydWN0IHRvbW95b19hY2xfaW5mbyIgYWxsb3dzCi0gKiAic3RydWN0IHRvbW95b19wYXRoX2FjbCIgdG8gZW1iZWQgInU4IiArICJ1MTYiIGFuZAotICogInN0cnVjdCB0b21veW9fcGF0aDJfYWNsIiB0byBlbWJlZCAidTgiCi0gKiB3aXRob3V0IGVubGFyZ2luZyB0aGVpciBzdHJ1Y3R1cmUgc2l6ZS4KKyAqICJzdHJ1Y3QgdG9tb3lvX3BhdGhfYWNsIiB0byBlbWJlZCAidTE2IiBhbmQgInN0cnVjdCB0b21veW9fcGF0aDJfYWNsIgorICogInN0cnVjdCB0b21veW9fcGF0aF9udW1iZXJfYWNsIiAic3RydWN0IHRvbW95b19ta2Rldl9hY2wiIHRvIGVtYmVkCisgKiAidTgiIHdpdGhvdXQgZW5sYXJnaW5nIHRoZWlyIHN0cnVjdHVyZSBzaXplLgogICovCiBzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JdTggdHlwZTsKKwlib29sIGlzX2RlbGV0ZWQ7CisJdTggdHlwZTsgLyogPSBvbmUgb2YgdmFsdWVzIGluICJlbnVtIHRvbW95b19hY2xfZW50cnlfdHlwZV9pbmRleCIuICovCiB9IF9fcGFja2VkOwogCiAvKgpAQCAtMjk5LDIwICs0MzAsNjIgQEAKICAqICAoMykgIm5hbWUiIGlzIHRoZSBwYXRobmFtZS4KICAqCiAgKiBEaXJlY3RpdmVzIGhlbGQgYnkgdGhpcyBzdHJ1Y3R1cmUgYXJlICJhbGxvd19yZWFkL3dyaXRlIiwgImFsbG93X2V4ZWN1dGUiLAotICogImFsbG93X3JlYWQiLCAiYWxsb3dfd3JpdGUiLCAiYWxsb3dfY3JlYXRlIiwgImFsbG93X3VubGluayIsICJhbGxvd19ta2RpciIsCi0gKiAiYWxsb3dfcm1kaXIiLCAiYWxsb3dfbWtmaWZvIiwgImFsbG93X21rc29jayIsICJhbGxvd19ta2Jsb2NrIiwKLSAqICJhbGxvd19ta2NoYXIiLCAiYWxsb3dfdHJ1bmNhdGUiLCAiYWxsb3dfc3ltbGluayIsICJhbGxvd19yZXdyaXRlIiwKLSAqICJhbGxvd19jaG1vZCIsICJhbGxvd19jaG93biIsICJhbGxvd19jaGdycCIsICJhbGxvd19jaHJvb3QiLCAiYWxsb3dfbW91bnQiCi0gKiBhbmQgImFsbG93X3VubW91bnQiLgorICogImFsbG93X3JlYWQiLCAiYWxsb3dfd3JpdGUiLCAiYWxsb3dfdW5saW5rIiwgImFsbG93X3JtZGlyIiwKKyAqICJhbGxvd190cnVuY2F0ZSIsICJhbGxvd19zeW1saW5rIiwgImFsbG93X3Jld3JpdGUiLCAiYWxsb3dfY2hyb290IiBhbmQKKyAqICJhbGxvd191bm1vdW50Ii4KICAqLwogc3RydWN0IHRvbW95b19wYXRoX2FjbCB7CiAJc3RydWN0IHRvbW95b19hY2xfaW5mbyBoZWFkOyAvKiB0eXBlID0gVE9NT1lPX1RZUEVfUEFUSF9BQ0wgKi8KLQl1OCBwZXJtX2hpZ2g7CiAJdTE2IHBlcm07CiAJc3RydWN0IHRvbW95b19uYW1lX3VuaW9uIG5hbWU7CiB9OwogCiAvKgorICogdG9tb3lvX3BhdGhfbnVtYmVyX2FjbCBpcyBhIHN0cnVjdHVyZSB3aGljaCBpcyB1c2VkIGZvciBob2xkaW5nIGFuCisgKiBlbnRyeSB3aXRoIG9uZSBwYXRobmFtZSBhbmQgb25lIG51bWJlciBvcGVyYXRpb24uCisgKiBJdCBoYXMgZm9sbG93aW5nIGZpZWxkcy4KKyAqCisgKiAgKDEpICJoZWFkIiB3aGljaCBpcyBhICJzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvIi4KKyAqICAoMikgInBlcm0iIHdoaWNoIGlzIGEgYml0bWFzayBvZiBwZXJtaXR0ZWQgb3BlcmF0aW9ucy4KKyAqICAoMykgIm5hbWUiIGlzIHRoZSBwYXRobmFtZS4KKyAqICAoNCkgIm51bWJlciIgaXMgdGhlIG51bWVyaWMgdmFsdWUuCisgKgorICogRGlyZWN0aXZlcyBoZWxkIGJ5IHRoaXMgc3RydWN0dXJlIGFyZSAiYWxsb3dfY3JlYXRlIiwgImFsbG93X21rZGlyIiwKKyAqICJhbGxvd19pb2N0bCIsICJhbGxvd19ta2ZpZm8iLCAiYWxsb3dfbWtzb2NrIiwgImFsbG93X2NobW9kIiwgImFsbG93X2Nob3duIgorICogYW5kICJhbGxvd19jaGdycCIuCisgKgorICovCitzdHJ1Y3QgdG9tb3lvX3BhdGhfbnVtYmVyX2FjbCB7CisJc3RydWN0IHRvbW95b19hY2xfaW5mbyBoZWFkOyAvKiB0eXBlID0gVE9NT1lPX1RZUEVfUEFUSF9OVU1CRVJfQUNMICovCisJdTggcGVybTsKKwlzdHJ1Y3QgdG9tb3lvX25hbWVfdW5pb24gbmFtZTsKKwlzdHJ1Y3QgdG9tb3lvX251bWJlcl91bmlvbiBudW1iZXI7Cit9OworCisvKgorICogdG9tb3lvX21rZGV2X2FjbCBpcyBhIHN0cnVjdHVyZSB3aGljaCBpcyB1c2VkIGZvciBob2xkaW5nIGFuCisgKiBlbnRyeSB3aXRoIG9uZSBwYXRobmFtZSBhbmQgdGhyZWUgbnVtYmVycyBvcGVyYXRpb24uCisgKiBJdCBoYXMgZm9sbG93aW5nIGZpZWxkcy4KKyAqCisgKiAgKDEpICJoZWFkIiB3aGljaCBpcyBhICJzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvIi4KKyAqICAoMikgInBlcm0iIHdoaWNoIGlzIGEgYml0bWFzayBvZiBwZXJtaXR0ZWQgb3BlcmF0aW9ucy4KKyAqICAoMykgIm1vZGUiIGlzIHRoZSBjcmVhdGUgbW9kZS4KKyAqICAoNCkgIm1ham9yIiBpcyB0aGUgbWFqb3IgbnVtYmVyIG9mIGRldmljZSBub2RlLgorICogICg1KSAibWlub3IiIGlzIHRoZSBtaW5vciBudW1iZXIgb2YgZGV2aWNlIG5vZGUuCisgKgorICogRGlyZWN0aXZlcyBoZWxkIGJ5IHRoaXMgc3RydWN0dXJlIGFyZSAiYWxsb3dfbWtjaGFyIiwgImFsbG93X21rYmxvY2siLgorICoKKyAqLworc3RydWN0IHRvbW95b19ta2Rldl9hY2wgeworCXN0cnVjdCB0b21veW9fYWNsX2luZm8gaGVhZDsgLyogdHlwZSA9IFRPTU9ZT19UWVBFX01LREVWX0FDTCAqLworCXU4IHBlcm07CisJc3RydWN0IHRvbW95b19uYW1lX3VuaW9uIG5hbWU7CisJc3RydWN0IHRvbW95b19udW1iZXJfdW5pb24gbW9kZTsKKwlzdHJ1Y3QgdG9tb3lvX251bWJlcl91bmlvbiBtYWpvcjsKKwlzdHJ1Y3QgdG9tb3lvX251bWJlcl91bmlvbiBtaW5vcjsKK307CisKKy8qCiAgKiB0b21veW9fcGF0aDJfYWNsIGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcgYW4KICAqIGVudHJ5IHdpdGggdHdvIHBhdGhuYW1lcyBvcGVyYXRpb24gKGkuZS4gbGluaygpLCByZW5hbWUoKSBhbmQgcGl2b3Rfcm9vdCgpKS4KICAqIEl0IGhhcyBmb2xsb3dpbmcgZmllbGRzLgpAQCAtMzMzLDUzICs1MDYsNjEgQEAKIH07CiAKIC8qCi0gKiB0b21veW9faW9fYnVmZmVyIGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIHJlYWRpbmcgYW5kIG1vZGlmeWluZwotICogY29uZmlndXJhdGlvbiB2aWEgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCi0gKiBJdCBoYXMgbWFueSBmaWVsZHMuIC0+cmVhZF92YXIxICwgLT5yZWFkX3ZhcjIgLCAtPndyaXRlX3ZhcjEgYXJlIHVzZWQgYXMKLSAqIGN1cnNvcnMuCisgKiB0b21veW9fbW91bnRfYWNsIGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcgYW4KKyAqIGVudHJ5IGZvciBtb3VudCBvcGVyYXRpb24uCisgKiBJdCBoYXMgZm9sbG93aW5nIGZpZWxkcy4KICAqCi0gKiBTaW5jZSB0aGUgY29udGVudCBvZiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vZG9tYWluX3BvbGljeSBpcyBhIGxpc3Qgb2YKLSAqICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIiBlbnRyaWVzIGFuZCBlYWNoICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIgotICogZW50cnkgaGFzIGEgbGlzdCBvZiAic3RydWN0IHRvbW95b19hY2xfaW5mbyIsIHdlIG5lZWQgdHdvIGN1cnNvcnMgd2hlbgotICogcmVhZGluZyAob25lIGlzIGZvciB0cmF2ZXJzaW5nIHRvbW95b19kb21haW5fbGlzdCBhbmQgdGhlIG90aGVyIGlzIGZvcgotICogdHJhdmVyc2luZyAic3RydWN0IHRvbW95b19hY2xfaW5mbyItPmFjbF9pbmZvX2xpc3QgKS4KKyAqICAoMSkgImhlYWQiIHdoaWNoIGlzIGEgInN0cnVjdCB0b21veW9fYWNsX2luZm8iLgorICogICgyKSAiZGV2X25hbWUiIGlzIHRoZSBkZXZpY2UgbmFtZS4KKyAqICAoMykgImRpcl9uYW1lIiBpcyB0aGUgbW91bnQgcG9pbnQuCisgKiAgKDQpICJmc190eXBlIiBpcyB0aGUgZmlsZXN5c3RlbSB0eXBlLgorICogICg1KSAiZmxhZ3MiIGlzIHRoZSBtb3VudCBmbGFncy4KICAqCi0gKiBJZiBhIGxpbmUgd3JpdHRlbiB0byAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vZG9tYWluX3BvbGljeSBzdGFydHMgd2l0aAotICogInNlbGVjdCAiLCBUT01PWU8gc2Vla3MgdGhlIGN1cnNvciAtPnJlYWRfdmFyMSBhbmQgLT53cml0ZV92YXIxIHRvIHRoZQotICogZG9tYWluIHdpdGggdGhlIGRvbWFpbm5hbWUgc3BlY2lmaWVkIGJ5IHRoZSByZXN0IG9mIHRoYXQgbGluZSAoTlVMTCBpcyBzZXQKLSAqIGlmIHNlZWsgZmFpbGVkKS4KLSAqIElmIGEgbGluZSB3cml0dGVuIHRvIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9kb21haW5fcG9saWN5IHN0YXJ0cyB3aXRoCi0gKiAiZGVsZXRlICIsIFRPTU9ZTyBkZWxldGVzIGFuIGVudHJ5IG9yIGEgZG9tYWluIHNwZWNpZmllZCBieSB0aGUgcmVzdCBvZiB0aGF0Ci0gKiBsaW5lICgtPndyaXRlX3ZhcjEgaXMgc2V0IHRvIE5VTEwgaWYgYSBkb21haW4gd2FzIGRlbGV0ZWQpLgotICogSWYgYSBsaW5lIHdyaXR0ZW4gdG8gL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL2RvbWFpbl9wb2xpY3kgc3RhcnRzIHdpdGgKLSAqIG5laXRoZXIgInNlbGVjdCAiIG5vciAiZGVsZXRlICIsIGFuIGVudHJ5IG9yIGEgZG9tYWluIHNwZWNpZmllZCBieSB0aGF0IGxpbmUKLSAqIGlzIGFwcGVuZGVkLgorICogRGlyZWN0aXZlIGhlbGQgYnkgdGhpcyBzdHJ1Y3R1cmUgaXMgImFsbG93X21vdW50Ii4KKyAqLworc3RydWN0IHRvbW95b19tb3VudF9hY2wgeworCXN0cnVjdCB0b21veW9fYWNsX2luZm8gaGVhZDsgLyogdHlwZSA9IFRPTU9ZT19UWVBFX01PVU5UX0FDTCAqLworCXN0cnVjdCB0b21veW9fbmFtZV91bmlvbiBkZXZfbmFtZTsKKwlzdHJ1Y3QgdG9tb3lvX25hbWVfdW5pb24gZGlyX25hbWU7CisJc3RydWN0IHRvbW95b19uYW1lX3VuaW9uIGZzX3R5cGU7CisJc3RydWN0IHRvbW95b19udW1iZXJfdW5pb24gZmxhZ3M7Cit9OworCisjZGVmaW5lIFRPTU9ZT19NQVhfSU9fUkVBRF9RVUVVRSAzMgorCisvKgorICogU3RydWN0dXJlIGZvciByZWFkaW5nL3dyaXRpbmcgcG9saWN5IHZpYSAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8KKyAqIGludGVyZmFjZXMuCiAgKi8KIHN0cnVjdCB0b21veW9faW9fYnVmZmVyIHsKLQlpbnQgKCpyZWFkKSAoc3RydWN0IHRvbW95b19pb19idWZmZXIgKik7CisJdm9pZCAoKnJlYWQpIChzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqKTsKIAlpbnQgKCp3cml0ZSkgKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICopOworCWludCAoKnBvbGwpIChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCk7CiAJLyogRXhjbHVzaXZlIGxvY2sgZm9yIHRoaXMgc3RydWN0dXJlLiAgICovCiAJc3RydWN0IG11dGV4IGlvX3NlbTsKIAkvKiBJbmRleCByZXR1cm5lZCBieSB0b21veW9fcmVhZF9sb2NrKCkuICovCiAJaW50IHJlYWRlcl9pZHg7Ci0JLyogVGhlIHBvc2l0aW9uIGN1cnJlbnRseSByZWFkaW5nIGZyb20uICovCi0Jc3RydWN0IGxpc3RfaGVhZCAqcmVhZF92YXIxOwotCS8qIEV4dHJhIHZhcmlhYmxlcyBmb3IgcmVhZGluZy4gICAgICAgICAqLwotCXN0cnVjdCBsaXN0X2hlYWQgKnJlYWRfdmFyMjsKKwljaGFyIF9fdXNlciAqcmVhZF91c2VyX2J1ZjsKKwlpbnQgcmVhZF91c2VyX2J1Zl9hdmFpbDsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgbGlzdF9oZWFkICpkb21haW47CisJCXN0cnVjdCBsaXN0X2hlYWQgKmdyb3VwOworCQlzdHJ1Y3QgbGlzdF9oZWFkICphY2w7CisJCWludCBhdmFpbDsKKwkJaW50IHN0ZXA7CisJCWludCBxdWVyeV9pbmRleDsKKwkJdTE2IGluZGV4OworCQl1OCBiaXQ7CisJCXU4IHdfcG9zOworCQlib29sIGVvZjsKKwkJYm9vbCBwcmludF90aGlzX2RvbWFpbl9vbmx5OworCQlib29sIHByaW50X2V4ZWN1dGVfb25seTsKKwkJY29uc3QgY2hhciAqd1tUT01PWU9fTUFYX0lPX1JFQURfUVVFVUVdOworCX0gcjsKIAkvKiBUaGUgcG9zaXRpb24gY3VycmVudGx5IHdyaXRpbmcgdG8uICAgKi8KIAlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICp3cml0ZV92YXIxOwotCS8qIFRoZSBzdGVwIGZvciByZWFkaW5nLiAgICAgICAgICAgICAgICAqLwotCWludCByZWFkX3N0ZXA7CiAJLyogQnVmZmVyIGZvciByZWFkaW5nLiAgICAgICAgICAgICAgICAgICovCiAJY2hhciAqcmVhZF9idWY7Ci0JLyogRU9GIGZsYWcgZm9yIHJlYWRpbmcuICAgICAgICAgICAgICAgICovCi0JYm9vbCByZWFkX2VvZjsKLQkvKiBSZWFkIGRvbWFpbiBBQ0wgb2Ygc3BlY2lmaWVkIFBJRD8gICAgKi8KLQlib29sIHJlYWRfc2luZ2xlX2RvbWFpbjsKLQkvKiBFeHRyYSB2YXJpYWJsZSBmb3IgcmVhZGluZy4gICAgICAgICAgKi8KLQl1OCByZWFkX2JpdDsKLQkvKiBCeXRlcyBhdmFpbGFibGUgZm9yIHJlYWRpbmcuICAgICAgICAgKi8KLQlpbnQgcmVhZF9hdmFpbDsKIAkvKiBTaXplIG9mIHJlYWQgYnVmZmVyLiAgICAgICAgICAgICAgICAgKi8KIAlpbnQgcmVhZGJ1Zl9zaXplOwogCS8qIEJ1ZmZlciBmb3Igd3JpdGluZy4gICAgICAgICAgICAgICAgICAqLwpAQCAtMzg4LDIxNSArNTY5LDIwMyBAQAogCWludCB3cml0ZV9hdmFpbDsKIAkvKiBTaXplIG9mIHdyaXRlIGJ1ZmZlci4gICAgICAgICAgICAgICAgKi8KIAlpbnQgd3JpdGVidWZfc2l6ZTsKKwkvKiBUeXBlIG9mIHRoaXMgaW50ZXJmYWNlLiAgICAgICAgICAgICAgKi8KKwl1OCB0eXBlOwogfTsKIAogLyoKLSAqIHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5IGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcKKyAqIHRvbW95b19yZWFkYWJsZV9maWxlIGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcKICAqICJhbGxvd19yZWFkIiBlbnRyaWVzLgogICogSXQgaGFzIGZvbGxvd2luZyBmaWVsZHMuCiAgKgotICogICgxKSAibGlzdCIgd2hpY2ggaXMgbGlua2VkIHRvIHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0IC4KKyAqICAoMSkgImhlYWQiIGlzICJzdHJ1Y3QgdG9tb3lvX2FjbF9oZWFkIi4KICAqICAoMikgImZpbGVuYW1lIiBpcyBhIHBhdGhuYW1lIHdoaWNoIGlzIGFsbG93ZWQgdG8gb3BlbihPX1JET05MWSkuCi0gKiAgKDMpICJpc19kZWxldGVkIiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiBtYXJrZWQgYXMgZGVsZXRlZCwgZmFsc2UKLSAqICAgICAgb3RoZXJ3aXNlLgogICovCi1zdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK3N0cnVjdCB0b21veW9fcmVhZGFibGVfZmlsZSB7CisJc3RydWN0IHRvbW95b19hY2xfaGVhZCBoZWFkOwogCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZTsKLQlib29sIGlzX2RlbGV0ZWQ7CiB9OwogCiAvKgotICogdG9tb3lvX3BhdHRlcm5fZW50cnkgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZwotICogInRvbW95b19wYXR0ZXJuX2xpc3QiIGVudHJpZXMuCisgKiB0b21veW9fbm9fcGF0dGVybiBpcyBhIHN0cnVjdHVyZSB3aGljaCBpcyB1c2VkIGZvciBob2xkaW5nCisgKiAiZmlsZV9wYXR0ZXJuIiBlbnRyaWVzLgogICogSXQgaGFzIGZvbGxvd2luZyBmaWVsZHMuCiAgKgotICogICgxKSAibGlzdCIgd2hpY2ggaXMgbGlua2VkIHRvIHRvbW95b19wYXR0ZXJuX2xpc3QgLgorICogICgxKSAiaGVhZCIgaXMgInN0cnVjdCB0b21veW9fYWNsX2hlYWQiLgogICogICgyKSAicGF0dGVybiIgaXMgYSBwYXRobmFtZSBwYXR0ZXJuIHdoaWNoIGlzIHVzZWQgZm9yIGNvbnZlcnRpbmcgcGF0aG5hbWVzCiAgKiAgICAgIHRvIHBhdGhuYW1lIHBhdHRlcm5zIGR1cmluZyBsZWFybmluZyBtb2RlLgotICogICgzKSAiaXNfZGVsZXRlZCIgaXMgYSBib29sIHdoaWNoIGlzIHRydWUgaWYgbWFya2VkIGFzIGRlbGV0ZWQsIGZhbHNlCi0gKiAgICAgIG90aGVyd2lzZS4KICAqLwotc3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CitzdHJ1Y3QgdG9tb3lvX25vX3BhdHRlcm4geworCXN0cnVjdCB0b21veW9fYWNsX2hlYWQgaGVhZDsKIAljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcGF0dGVybjsKLQlib29sIGlzX2RlbGV0ZWQ7CiB9OwogCiAvKgotICogdG9tb3lvX25vX3Jld3JpdGVfZW50cnkgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZworICogdG9tb3lvX25vX3Jld3JpdGUgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZwogICogImRlbnlfcmV3cml0ZSIgZW50cmllcy4KICAqIEl0IGhhcyBmb2xsb3dpbmcgZmllbGRzLgogICoKLSAqICAoMSkgImxpc3QiIHdoaWNoIGlzIGxpbmtlZCB0byB0b21veW9fbm9fcmV3cml0ZV9saXN0IC4KKyAqICAoMSkgImhlYWQiIGlzICJzdHJ1Y3QgdG9tb3lvX2FjbF9oZWFkIi4KICAqICAoMikgInBhdHRlcm4iIGlzIGEgcGF0aG5hbWUgd2hpY2ggaXMgYnkgZGVmYXVsdCBub3QgcGVybWl0dGVkIHRvIG1vZGlmeQogICogICAgICBhbHJlYWR5IGV4aXN0aW5nIGNvbnRlbnQuCi0gKiAgKDMpICJpc19kZWxldGVkIiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiBtYXJrZWQgYXMgZGVsZXRlZCwgZmFsc2UKLSAqICAgICAgb3RoZXJ3aXNlLgogICovCi1zdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGVfZW50cnkgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK3N0cnVjdCB0b21veW9fbm9fcmV3cml0ZSB7CisJc3RydWN0IHRvbW95b19hY2xfaGVhZCBoZWFkOwogCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwYXR0ZXJuOwotCWJvb2wgaXNfZGVsZXRlZDsKIH07CiAKIC8qCi0gKiB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5IGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcKLSAqICJpbml0aWFsaXplX2RvbWFpbiIgYW5kICJub19pbml0aWFsaXplX2RvbWFpbiIgZW50cmllcy4KKyAqIHRvbW95b190cmFuc2l0aW9uX2NvbnRyb2wgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZworICogImluaXRpYWxpemVfZG9tYWluIi8ibm9faW5pdGlhbGl6ZV9kb21haW4iLyJrZWVwX2RvbWFpbiIvIm5vX2tlZXBfZG9tYWluIgorICogZW50cmllcy4KICAqIEl0IGhhcyBmb2xsb3dpbmcgZmllbGRzLgogICoKLSAqICAoMSkgImxpc3QiIHdoaWNoIGlzIGxpbmtlZCB0byB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3QgLgotICogICgyKSAiZG9tYWlubmFtZSIgd2hpY2ggaXMgImEgZG9tYWlubmFtZSIgb3IgInRoZSBsYXN0IGNvbXBvbmVudCBvZiBhCi0gKiAgICAgIGRvbWFpbm5hbWUiLiBUaGlzIGZpZWxkIGlzIE5VTEwgaWYgImZyb20iIGNsYXVzZSBpcyBub3Qgc3BlY2lmaWVkLgotICogICgzKSAicHJvZ3JhbSIgd2hpY2ggaXMgYSBwcm9ncmFtJ3MgcGF0aG5hbWUuCi0gKiAgKDQpICJpc19kZWxldGVkIiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiBtYXJrZWQgYXMgZGVsZXRlZCwgZmFsc2UKLSAqICAgICAgb3RoZXJ3aXNlLgotICogICg1KSAiaXNfbm90IiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiAibm9faW5pdGlhbGl6ZV9kb21haW4iLCBmYWxzZQotICogICAgICBvdGhlcndpc2UuCi0gKiAgKDYpICJpc19sYXN0X25hbWUiIGlzIGEgYm9vbCB3aGljaCBpcyB0cnVlIGlmICJkb21haW5uYW1lIiBpcyAidGhlIGxhc3QKKyAqICAoMSkgImhlYWQiIGlzICJzdHJ1Y3QgdG9tb3lvX2FjbF9oZWFkIi4KKyAqICAoMikgInR5cGUiIGlzIHR5cGUgb2YgdGhpcyBlbnRyeS4KKyAqICAoMykgImlzX2xhc3RfbmFtZSIgaXMgYSBib29sIHdoaWNoIGlzIHRydWUgaWYgImRvbWFpbm5hbWUiIGlzICJ0aGUgbGFzdAogICogICAgICBjb21wb25lbnQgb2YgYSBkb21haW5uYW1lIiwgZmFsc2Ugb3RoZXJ3aXNlLgotICovCi1zdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpkb21haW5uYW1lOyAgICAvKiBUaGlzIG1heSBiZSBOVUxMICovCi0JY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnByb2dyYW07Ci0JYm9vbCBpc19kZWxldGVkOwotCWJvb2wgaXNfbm90OyAgICAgICAvKiBUcnVlIGlmIHRoaXMgZW50cnkgaXMgIm5vX2luaXRpYWxpemVfZG9tYWluIi4gICovCi0JLyogVHJ1ZSBpZiB0aGUgZG9tYWlubmFtZSBpcyB0b21veW9fZ2V0X2xhc3RfbmFtZSgpLiAqLwotCWJvb2wgaXNfbGFzdF9uYW1lOwotfTsKLQotLyoKLSAqIHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5IGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcKLSAqICJrZWVwX2RvbWFpbiIgYW5kICJub19rZWVwX2RvbWFpbiIgZW50cmllcy4KLSAqIEl0IGhhcyBmb2xsb3dpbmcgZmllbGRzLgotICoKLSAqICAoMSkgImxpc3QiIHdoaWNoIGlzIGxpbmtlZCB0byB0b21veW9fZG9tYWluX2tlZXBlcl9saXN0IC4KLSAqICAoMikgImRvbWFpbm5hbWUiIHdoaWNoIGlzICJhIGRvbWFpbm5hbWUiIG9yICJ0aGUgbGFzdCBjb21wb25lbnQgb2YgYQorICogICg0KSAiZG9tYWlubmFtZSIgd2hpY2ggaXMgImEgZG9tYWlubmFtZSIgb3IgInRoZSBsYXN0IGNvbXBvbmVudCBvZiBhCiAgKiAgICAgIGRvbWFpbm5hbWUiLgotICogICgzKSAicHJvZ3JhbSIgd2hpY2ggaXMgYSBwcm9ncmFtJ3MgcGF0aG5hbWUuCi0gKiAgICAgIFRoaXMgZmllbGQgaXMgTlVMTCBpZiAiZnJvbSIgY2xhdXNlIGlzIG5vdCBzcGVjaWZpZWQuCi0gKiAgKDQpICJpc19kZWxldGVkIiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiBtYXJrZWQgYXMgZGVsZXRlZCwgZmFsc2UKLSAqICAgICAgb3RoZXJ3aXNlLgotICogICg1KSAiaXNfbm90IiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiAibm9faW5pdGlhbGl6ZV9kb21haW4iLCBmYWxzZQotICogICAgICBvdGhlcndpc2UuCi0gKiAgKDYpICJpc19sYXN0X25hbWUiIGlzIGEgYm9vbCB3aGljaCBpcyB0cnVlIGlmICJkb21haW5uYW1lIiBpcyAidGhlIGxhc3QKLSAqICAgICAgY29tcG9uZW50IG9mIGEgZG9tYWlubmFtZSIsIGZhbHNlIG90aGVyd2lzZS4KKyAqICAoNSkgInByb2dyYW0iIHdoaWNoIGlzIGEgcHJvZ3JhbSdzIHBhdGhuYW1lLgogICovCi1zdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZG9tYWlubmFtZTsKLQljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcHJvZ3JhbTsgICAgICAgLyogVGhpcyBtYXkgYmUgTlVMTCAqLwotCWJvb2wgaXNfZGVsZXRlZDsKLQlib29sIGlzX25vdDsgICAgICAgLyogVHJ1ZSBpZiB0aGlzIGVudHJ5IGlzICJub19rZWVwX2RvbWFpbiIuICAgICAgICAqLworc3RydWN0IHRvbW95b190cmFuc2l0aW9uX2NvbnRyb2wgeworCXN0cnVjdCB0b21veW9fYWNsX2hlYWQgaGVhZDsKKwl1OCB0eXBlOyAvKiBPbmUgb2YgdmFsdWVzIGluICJlbnVtIHRvbW95b190cmFuc2l0aW9uX3R5cGUiLiAgKi8KIAkvKiBUcnVlIGlmIHRoZSBkb21haW5uYW1lIGlzIHRvbW95b19nZXRfbGFzdF9uYW1lKCkuICovCiAJYm9vbCBpc19sYXN0X25hbWU7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmRvbWFpbm5hbWU7IC8qIE1heWJlIE5VTEwgKi8KKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcHJvZ3JhbTsgICAgLyogTWF5YmUgTlVMTCAqLwogfTsKIAogLyoKLSAqIHRvbW95b19hbGlhc19lbnRyeSBpcyBhIHN0cnVjdHVyZSB3aGljaCBpcyB1c2VkIGZvciBob2xkaW5nICJhbGlhcyIgZW50cmllcy4KKyAqIHRvbW95b19hZ2dyZWdhdG9yIGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcKKyAqICJhZ2dyZWdhdG9yIiBlbnRyaWVzLgogICogSXQgaGFzIGZvbGxvd2luZyBmaWVsZHMuCiAgKgotICogICgxKSAibGlzdCIgd2hpY2ggaXMgbGlua2VkIHRvIHRvbW95b19hbGlhc19saXN0IC4KLSAqICAoMikgIm9yaWdpbmFsX25hbWUiIHdoaWNoIGlzIGEgZGVyZWZlcmVuY2VkIHBhdGhuYW1lLgotICogICgzKSAiYWxpYXNlZF9uYW1lIiB3aGljaCBpcyBhIHN5bWxpbmsncyBwYXRobmFtZS4KLSAqICAoNCkgImlzX2RlbGV0ZWQiIGlzIGEgYm9vbCB3aGljaCBpcyB0cnVlIGlmIG1hcmtlZCBhcyBkZWxldGVkLCBmYWxzZQotICogICAgICBvdGhlcndpc2UuCisgKiAgKDEpICJoZWFkIiBpcyAic3RydWN0IHRvbW95b19hY2xfaGVhZCIuCisgKiAgKDIpICJvcmlnaW5hbF9uYW1lIiB3aGljaCBpcyBvcmlnaW5hbGx5IHJlcXVlc3RlZCBuYW1lLgorICogICgzKSAiYWdncmVnYXRlZF9uYW1lIiB3aGljaCBpcyBuYW1lIHRvIHJld3JpdGUuCiAgKi8KLXN0cnVjdCB0b21veW9fYWxpYXNfZW50cnkgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK3N0cnVjdCB0b21veW9fYWdncmVnYXRvciB7CisJc3RydWN0IHRvbW95b19hY2xfaGVhZCBoZWFkOwogCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpvcmlnaW5hbF9uYW1lOwotCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICphbGlhc2VkX25hbWU7Ci0JYm9vbCBpc19kZWxldGVkOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICphZ2dyZWdhdGVkX25hbWU7CiB9OwogCiAvKgotICogdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2VudHJ5IGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcgbGlzdCBvZgorICogdG9tb3lvX21hbmFnZXIgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZyBsaXN0IG9mCiAgKiBkb21haW5uYW1lcyBvciBwcm9ncmFtcyB3aGljaCBhcmUgcGVybWl0dGVkIHRvIG1vZGlmeSBjb25maWd1cmF0aW9uIHZpYQogICogL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCiAgKiBJdCBoYXMgZm9sbG93aW5nIGZpZWxkcy4KICAqCi0gKiAgKDEpICJsaXN0IiB3aGljaCBpcyBsaW5rZWQgdG8gdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QgLgotICogICgyKSAibWFuYWdlciIgaXMgYSBkb21haW5uYW1lIG9yIGEgcHJvZ3JhbSdzIHBhdGhuYW1lLgotICogICgzKSAiaXNfZG9tYWluIiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiAibWFuYWdlciIgaXMgYSBkb21haW5uYW1lLCBmYWxzZQorICogICgxKSAiaGVhZCIgaXMgInN0cnVjdCB0b21veW9fYWNsX2hlYWQiLgorICogICgyKSAiaXNfZG9tYWluIiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiAibWFuYWdlciIgaXMgYSBkb21haW5uYW1lLCBmYWxzZQogICogICAgICBvdGhlcndpc2UuCi0gKiAgKDQpICJpc19kZWxldGVkIiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiBtYXJrZWQgYXMgZGVsZXRlZCwgZmFsc2UKLSAqICAgICAgb3RoZXJ3aXNlLgorICogICgzKSAibWFuYWdlciIgaXMgYSBkb21haW5uYW1lIG9yIGEgcHJvZ3JhbSdzIHBhdGhuYW1lLgogICovCi1zdHJ1Y3QgdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2VudHJ5IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CitzdHJ1Y3QgdG9tb3lvX21hbmFnZXIgeworCXN0cnVjdCB0b21veW9fYWNsX2hlYWQgaGVhZDsKKwlib29sIGlzX2RvbWFpbjsgIC8qIFRydWUgaWYgbWFuYWdlciBpcyBhIGRvbWFpbm5hbWUuICovCiAJLyogQSBwYXRoIHRvIHByb2dyYW0gb3IgYSBkb21haW5uYW1lLiAqLwogCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICptYW5hZ2VyOwotCWJvb2wgaXNfZG9tYWluOyAgLyogVHJ1ZSBpZiBtYW5hZ2VyIGlzIGEgZG9tYWlubmFtZS4gKi8KLQlib29sIGlzX2RlbGV0ZWQ7IC8qIFRydWUgaWYgdGhpcyBlbnRyeSBpcyBkZWxldGVkLiAqLworfTsKKworc3RydWN0IHRvbW95b19wcmVmZXJlbmNlIHsKKwl1bnNpZ25lZCBpbnQgbGVhcm5pbmdfbWF4X2VudHJ5OworCWJvb2wgZW5mb3JjaW5nX3ZlcmJvc2U7CisJYm9vbCBsZWFybmluZ192ZXJib3NlOworCWJvb2wgcGVybWlzc2l2ZV92ZXJib3NlOworfTsKKworc3RydWN0IHRvbW95b19wcm9maWxlIHsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqY29tbWVudDsKKwlzdHJ1Y3QgdG9tb3lvX3ByZWZlcmVuY2UgKmxlYXJuaW5nOworCXN0cnVjdCB0b21veW9fcHJlZmVyZW5jZSAqcGVybWlzc2l2ZTsKKwlzdHJ1Y3QgdG9tb3lvX3ByZWZlcmVuY2UgKmVuZm9yY2luZzsKKwlzdHJ1Y3QgdG9tb3lvX3ByZWZlcmVuY2UgcHJlZmVyZW5jZTsKKwl1OCBkZWZhdWx0X2NvbmZpZzsKKwl1OCBjb25maWdbVE9NT1lPX01BWF9NQUNfSU5ERVggKyBUT01PWU9fTUFYX01BQ19DQVRFR09SWV9JTkRFWF07CiB9OwogCiAvKioqKioqKioqKiBGdW5jdGlvbiBwcm90b3R5cGVzLiAqKioqKioqKioqLwogCi0vKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBuYW1lIG1hdGNoZXMgdGhlIGdpdmVuIG5hbWVfdW5pb24uICovCi1ib29sIHRvbW95b19jb21wYXJlX25hbWVfdW5pb24oY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKm5hbWUsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IHRvbW95b19uYW1lX3VuaW9uICpwdHIpOworZXh0ZXJuIGFzbWxpbmthZ2UgbG9uZyBzeXNfZ2V0cGlkKHZvaWQpOworZXh0ZXJuIGFzbWxpbmthZ2UgbG9uZyBzeXNfZ2V0cHBpZCh2b2lkKTsKKworLyogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gc3RyaW5nIHN0YXJ0cyB3aXRoIHRoZSBnaXZlbiBrZXl3b3JkLiAqLworYm9vbCB0b21veW9fc3RyX3N0YXJ0cyhjaGFyICoqc3JjLCBjb25zdCBjaGFyICpmaW5kKTsKKy8qIEdldCB0b21veW9fcmVhbHBhdGgoKSBvZiBjdXJyZW50IHByb2Nlc3MuICovCitjb25zdCBjaGFyICp0b21veW9fZ2V0X2V4ZSh2b2lkKTsKKy8qIEZvcm1hdCBzdHJpbmcuICovCit2b2lkIHRvbW95b19ub3JtYWxpemVfbGluZSh1bnNpZ25lZCBjaGFyICpidWZmZXIpOworLyogUHJpbnQgd2FybmluZyBvciBlcnJvciBtZXNzYWdlIG9uIGNvbnNvbGUuICovCit2b2lkIHRvbW95b193YXJuX2xvZyhzdHJ1Y3QgdG9tb3lvX3JlcXVlc3RfaW5mbyAqciwgY29uc3QgY2hhciAqZm10LCAuLi4pCisgICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQocHJpbnRmLCAyLCAzKSkpOworLyogQ2hlY2sgYWxsIHByb2ZpbGVzIGN1cnJlbnRseSBhc3NpZ25lZCB0byBkb21haW5zIGFyZSBkZWZpbmVkLiAqLwordm9pZCB0b21veW9fY2hlY2tfcHJvZmlsZSh2b2lkKTsKKy8qIE9wZW4gb3BlcmF0aW9uIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4gKi8KK2ludCB0b21veW9fb3Blbl9jb250cm9sKGNvbnN0IHU4IHR5cGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKKy8qIENsb3NlIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLiAqLworaW50IHRvbW95b19jbG9zZV9jb250cm9sKHN0cnVjdCBmaWxlICpmaWxlKTsKKy8qIFBvbGwgb3BlcmF0aW9uIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4gKi8KK2ludCB0b21veW9fcG9sbF9jb250cm9sKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KTsKKy8qIFJlYWQgb3BlcmF0aW9uIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4gKi8KK2ludCB0b21veW9fcmVhZF9jb250cm9sKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJY29uc3QgaW50IGJ1ZmZlcl9sZW4pOworLyogV3JpdGUgb3BlcmF0aW9uIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4gKi8KK2ludCB0b21veW9fd3JpdGVfY29udHJvbChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCSBjb25zdCBpbnQgYnVmZmVyX2xlbik7CiAvKiBDaGVjayB3aGV0aGVyIHRoZSBkb21haW4gaGFzIHRvbyBtYW55IEFDTCBlbnRyaWVzIHRvIGhvbGQuICovCi1ib29sIHRvbW95b19kb21haW5fcXVvdGFfaXNfb2soc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqIGNvbnN0IGRvbWFpbik7Ci0vKiBUcmFuc2FjdGlvbmFsIHNwcmludGYoKSBmb3IgcG9saWN5IGR1bXAuICovCi1ib29sIHRvbW95b19pb19wcmludGYoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorYm9vbCB0b21veW9fZG9tYWluX3F1b3RhX2lzX29rKHN0cnVjdCB0b21veW9fcmVxdWVzdF9pbmZvICpyKTsKKy8qIFByaW50IG91dCBvZiBtZW1vcnkgd2FybmluZyBtZXNzYWdlLiAqLwordm9pZCB0b21veW9fd2Fybl9vb20oY29uc3QgY2hhciAqZnVuY3Rpb24pOworLyogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbmFtZSBtYXRjaGVzIHRoZSBnaXZlbiBuYW1lX3VuaW9uLiAqLworY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKgordG9tb3lvX2NvbXBhcmVfbmFtZV91bmlvbihjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqbmFtZSwKKwkJCSAgY29uc3Qgc3RydWN0IHRvbW95b19uYW1lX3VuaW9uICpwdHIpOworLyogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbnVtYmVyIG1hdGNoZXMgdGhlIGdpdmVuIG51bWJlcl91bmlvbi4gKi8KK2Jvb2wgdG9tb3lvX2NvbXBhcmVfbnVtYmVyX3VuaW9uKGNvbnN0IHVuc2lnbmVkIGxvbmcgdmFsdWUsCisJCQkJIGNvbnN0IHN0cnVjdCB0b21veW9fbnVtYmVyX3VuaW9uICpwdHIpOworaW50IHRvbW95b19nZXRfbW9kZShjb25zdCB1OCBwcm9maWxlLCBjb25zdCB1OCBpbmRleCk7Cit2b2lkIHRvbW95b19pb19wcmludGYoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogCV9fYXR0cmlidXRlX18gKChmb3JtYXQocHJpbnRmLCAyLCAzKSkpOwogLyogQ2hlY2sgd2hldGhlciB0aGUgZG9tYWlubmFtZSBpcyBjb3JyZWN0LiAqLwotYm9vbCB0b21veW9faXNfY29ycmVjdF9kb21haW4oY29uc3QgdW5zaWduZWQgY2hhciAqZG9tYWlubmFtZSk7Citib29sIHRvbW95b19jb3JyZWN0X2RvbWFpbihjb25zdCB1bnNpZ25lZCBjaGFyICpkb21haW5uYW1lKTsKIC8qIENoZWNrIHdoZXRoZXIgdGhlIHRva2VuIGlzIGNvcnJlY3QuICovCi1ib29sIHRvbW95b19pc19jb3JyZWN0X3BhdGgoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IHM4IHN0YXJ0X3R5cGUsCi0JCQkgICAgY29uc3QgczggcGF0dGVybl90eXBlLCBjb25zdCBzOCBlbmRfdHlwZSk7Citib29sIHRvbW95b19jb3JyZWN0X3BhdGgoY29uc3QgY2hhciAqZmlsZW5hbWUpOworYm9vbCB0b21veW9fY29ycmVjdF93b3JkKGNvbnN0IGNoYXIgKnN0cmluZyk7CiAvKiBDaGVjayB3aGV0aGVyIHRoZSB0b2tlbiBjYW4gYmUgYSBkb21haW5uYW1lLiAqLwotYm9vbCB0b21veW9faXNfZG9tYWluX2RlZihjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIpOworYm9vbCB0b21veW9fZG9tYWluX2RlZihjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIpOwogYm9vbCB0b21veW9fcGFyc2VfbmFtZV91bmlvbihjb25zdCBjaGFyICpmaWxlbmFtZSwKIAkJCSAgICAgc3RydWN0IHRvbW95b19uYW1lX3VuaW9uICpwdHIpOwogLyogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gZmlsZW5hbWUgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0aF9ncm91cC4gKi8KLWJvb2wgdG9tb3lvX3BhdGhfbWF0Y2hlc19ncm91cChjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcGF0aG5hbWUsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2dyb3VwICpncm91cCwKLQkJCSAgICAgICBjb25zdCBib29sIG1heV91c2VfcGF0dGVybik7Citjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqCit0b21veW9fcGF0aF9tYXRjaGVzX2dyb3VwKGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwYXRobmFtZSwKKwkJCSAgY29uc3Qgc3RydWN0IHRvbW95b19ncm91cCAqZ3JvdXApOworLyogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gdmFsdWUgbWF0Y2hlcyB0aGUgZ2l2ZW4gbnVtYmVyX2dyb3VwLiAqLworYm9vbCB0b21veW9fbnVtYmVyX21hdGNoZXNfZ3JvdXAoY29uc3QgdW5zaWduZWQgbG9uZyBtaW4sCisJCQkJIGNvbnN0IHVuc2lnbmVkIGxvbmcgbWF4LAorCQkJCSBjb25zdCBzdHJ1Y3QgdG9tb3lvX2dyb3VwICpncm91cCk7CiAvKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBmaWxlbmFtZSBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuLiAqLwogYm9vbCB0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4oY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lLAogCQkJCSBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcGF0dGVybik7Ci0vKiBSZWFkICJhbGlhcyIgZW50cnkgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KLWJvb2wgdG9tb3lvX3JlYWRfYWxpYXNfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKTsKLS8qCi0gKiBSZWFkICJpbml0aWFsaXplX2RvbWFpbiIgYW5kICJub19pbml0aWFsaXplX2RvbWFpbiIgZW50cnkKLSAqIGluIGV4Y2VwdGlvbiBwb2xpY3kuCi0gKi8KLWJvb2wgdG9tb3lvX3JlYWRfZG9tYWluX2luaXRpYWxpemVyX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCk7Ci0vKiBSZWFkICJrZWVwX2RvbWFpbiIgYW5kICJub19rZWVwX2RvbWFpbiIgZW50cnkgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KLWJvb2wgdG9tb3lvX3JlYWRfZG9tYWluX2tlZXBlcl9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOwotLyogUmVhZCAiZmlsZV9wYXR0ZXJuIiBlbnRyeSBpbiBleGNlcHRpb24gcG9saWN5LiAqLwotYm9vbCB0b21veW9fcmVhZF9maWxlX3BhdHRlcm4oc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOwotLyogUmVhZCAicGF0aF9ncm91cCIgZW50cnkgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KLWJvb2wgdG9tb3lvX3JlYWRfcGF0aF9ncm91cF9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOwotLyogUmVhZCAiYWxsb3dfcmVhZCIgZW50cnkgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KLWJvb2wgdG9tb3lvX3JlYWRfZ2xvYmFsbHlfcmVhZGFibGVfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKTsKLS8qIFJlYWQgImRlbnlfcmV3cml0ZSIgZW50cnkgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KLWJvb2wgdG9tb3lvX3JlYWRfbm9fcmV3cml0ZV9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOworCitib29sIHRvbW95b19wYXJzZV9udW1iZXJfdW5pb24oY2hhciAqZGF0YSwgc3RydWN0IHRvbW95b19udW1iZXJfdW5pb24gKm51bSk7CiAvKiBUb2tlbml6ZSBhIGxpbmUuICovCiBib29sIHRvbW95b190b2tlbml6ZShjaGFyICpidWZmZXIsIGNoYXIgKndbXSwgc2l6ZV90IHNpemUpOwogLyogV3JpdGUgZG9tYWluIHBvbGljeSB2aW9sYXRpb24gd2FybmluZyBtZXNzYWdlIHRvIGNvbnNvbGU/ICovCiBib29sIHRvbW95b192ZXJib3NlX21vZGUoY29uc3Qgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluKTsKLS8qIENvbnZlcnQgZG91YmxlIHBhdGggb3BlcmF0aW9uIHRvIG9wZXJhdGlvbiBuYW1lLiAqLwotY29uc3QgY2hhciAqdG9tb3lvX3BhdGgyMmtleXdvcmQoY29uc3QgdTggb3BlcmF0aW9uKTsKLS8qIEdldCB0aGUgbGFzdCBjb21wb25lbnQgb2YgdGhlIGdpdmVuIGRvbWFpbm5hbWUuICovCi1jb25zdCBjaGFyICp0b21veW9fZ2V0X2xhc3RfbmFtZShjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4pOwotLyogR2V0IHdhcm5pbmcgbWVzc2FnZS4gKi8KLWNvbnN0IGNoYXIgKnRvbW95b19nZXRfbXNnKGNvbnN0IGJvb2wgaXNfZW5mb3JjZSk7Ci0vKiBDb252ZXJ0IHNpbmdsZSBwYXRoIG9wZXJhdGlvbiB0byBvcGVyYXRpb24gbmFtZS4gKi8KLWNvbnN0IGNoYXIgKnRvbW95b19wYXRoMmtleXdvcmQoY29uc3QgdTggb3BlcmF0aW9uKTsKLS8qIENyZWF0ZSAiYWxpYXMiIGVudHJ5IGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCi1pbnQgdG9tb3lvX3dyaXRlX2FsaWFzX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSk7Ci0vKgotICogQ3JlYXRlICJpbml0aWFsaXplX2RvbWFpbiIgYW5kICJub19pbml0aWFsaXplX2RvbWFpbiIgZW50cnkKLSAqIGluIGV4Y2VwdGlvbiBwb2xpY3kuCi0gKi8KLWludCB0b21veW9fd3JpdGVfZG9tYWluX2luaXRpYWxpemVyX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX25vdCwKLQkJCQkJICAgY29uc3QgYm9vbCBpc19kZWxldGUpOwotLyogQ3JlYXRlICJrZWVwX2RvbWFpbiIgYW5kICJub19rZWVwX2RvbWFpbiIgZW50cnkgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KLWludCB0b21veW9fd3JpdGVfZG9tYWluX2tlZXBlcl9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19ub3QsCi0JCQkJICAgICAgY29uc3QgYm9vbCBpc19kZWxldGUpOworLyogRmlsbCAic3RydWN0IHRvbW95b19yZXF1ZXN0X2luZm8iLiAqLworaW50IHRvbW95b19pbml0X3JlcXVlc3RfaW5mbyhzdHJ1Y3QgdG9tb3lvX3JlcXVlc3RfaW5mbyAqciwKKwkJCSAgICAgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgICBjb25zdCB1OCBpbmRleCk7CisvKiBDaGVjayBwZXJtaXNzaW9uIGZvciBtb3VudCBvcGVyYXRpb24uICovCitpbnQgdG9tb3lvX21vdW50X3Blcm1pc3Npb24oY2hhciAqZGV2X25hbWUsIHN0cnVjdCBwYXRoICpwYXRoLCBjaGFyICp0eXBlLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZvaWQgKmRhdGFfcGFnZSk7CisvKiBDcmVhdGUgImFnZ3JlZ2F0b3IiIGVudHJ5IGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCitpbnQgdG9tb3lvX3dyaXRlX2FnZ3JlZ2F0b3IoY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19kZWxldGUpOworaW50IHRvbW95b193cml0ZV90cmFuc2l0aW9uX2NvbnRyb2woY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19kZWxldGUsCisJCQkJICAgIGNvbnN0IHU4IHR5cGUpOwogLyoKICAqIENyZWF0ZSAiYWxsb3dfcmVhZC93cml0ZSIsICJhbGxvd19leGVjdXRlIiwgImFsbG93X3JlYWQiLCAiYWxsb3dfd3JpdGUiLAogICogImFsbG93X2NyZWF0ZSIsICJhbGxvd191bmxpbmsiLCAiYWxsb3dfbWtkaXIiLCAiYWxsb3dfcm1kaXIiLApAQCAtNjA0LDI1ICs3NzMsMzEgQEAKICAqICJhbGxvd190cnVuY2F0ZSIsICJhbGxvd19zeW1saW5rIiwgImFsbG93X3Jld3JpdGUiLCAiYWxsb3dfcmVuYW1lIiBhbmQKICAqICJhbGxvd19saW5rIiBlbnRyeSBpbiBkb21haW4gcG9saWN5LgogICovCi1pbnQgdG9tb3lvX3dyaXRlX2ZpbGVfcG9saWN5KGNoYXIgKmRhdGEsIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKLQkJCSAgICAgY29uc3QgYm9vbCBpc19kZWxldGUpOworaW50IHRvbW95b193cml0ZV9maWxlKGNoYXIgKmRhdGEsIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJICAgICAgY29uc3QgYm9vbCBpc19kZWxldGUpOwogLyogQ3JlYXRlICJhbGxvd19yZWFkIiBlbnRyeSBpbiBleGNlcHRpb24gcG9saWN5LiAqLwotaW50IHRvbW95b193cml0ZV9nbG9iYWxseV9yZWFkYWJsZV9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19kZWxldGUpOworaW50IHRvbW95b193cml0ZV9nbG9iYWxseV9yZWFkYWJsZShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSk7CisvKiBDcmVhdGUgImFsbG93X21vdW50IiBlbnRyeSBpbiBkb21haW4gcG9saWN5LiAqLworaW50IHRvbW95b193cml0ZV9tb3VudChjaGFyICpkYXRhLCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCSAgICAgICBjb25zdCBib29sIGlzX2RlbGV0ZSk7CiAvKiBDcmVhdGUgImRlbnlfcmV3cml0ZSIgZW50cnkgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KLWludCB0b21veW9fd3JpdGVfbm9fcmV3cml0ZV9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19kZWxldGUpOworaW50IHRvbW95b193cml0ZV9ub19yZXdyaXRlKGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlKTsKIC8qIENyZWF0ZSAiZmlsZV9wYXR0ZXJuIiBlbnRyeSBpbiBleGNlcHRpb24gcG9saWN5LiAqLwotaW50IHRvbW95b193cml0ZV9wYXR0ZXJuX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSk7Ci0vKiBDcmVhdGUgInBhdGhfZ3JvdXAiIGVudHJ5IGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCi1pbnQgdG9tb3lvX3dyaXRlX3BhdGhfZ3JvdXBfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlKTsKK2ludCB0b21veW9fd3JpdGVfcGF0dGVybihjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSk7CisvKiBDcmVhdGUgInBhdGhfZ3JvdXAiLyJudW1iZXJfZ3JvdXAiIGVudHJ5IGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCitpbnQgdG9tb3lvX3dyaXRlX2dyb3VwKGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlLCBjb25zdCB1OCB0eXBlKTsKK2ludCB0b21veW9fc3VwZXJ2aXNvcihzdHJ1Y3QgdG9tb3lvX3JlcXVlc3RfaW5mbyAqciwgY29uc3QgY2hhciAqZm10LCAuLi4pCisgICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQocHJpbnRmLCAyLCAzKSkpOwogLyogRmluZCBhIGRvbWFpbiBieSB0aGUgZ2l2ZW4gbmFtZS4gKi8KIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKnRvbW95b19maW5kX2RvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKIC8qIEZpbmQgb3IgY3JlYXRlIGEgZG9tYWluIGJ5IHRoZSBnaXZlbiBuYW1lLiAqLwotc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqdG9tb3lvX2ZpbmRfb3JfYXNzaWduX25ld19kb21haW4oY29uc3QgY2hhciAqCi0JCQkJCQkJICAgIGRvbWFpbm5hbWUsCi0JCQkJCQkJICAgIGNvbnN0IHU4IHByb2ZpbGUpOwotCi0vKiBBbGxvY2F0ZSBtZW1vcnkgZm9yICJzdHJ1Y3QgdG9tb3lvX3BhdGhfZ3JvdXAiLiAqLwotc3RydWN0IHRvbW95b19wYXRoX2dyb3VwICp0b21veW9fZ2V0X3BhdGhfZ3JvdXAoY29uc3QgY2hhciAqZ3JvdXBfbmFtZSk7CitzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICp0b21veW9fYXNzaWduX2RvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorCQkJCQkJY29uc3QgdTggcHJvZmlsZSk7CitzdHJ1Y3QgdG9tb3lvX3Byb2ZpbGUgKnRvbW95b19wcm9maWxlKGNvbnN0IHU4IHByb2ZpbGUpOworLyoKKyAqIEFsbG9jYXRlIG1lbW9yeSBmb3IgInN0cnVjdCB0b21veW9fcGF0aF9ncm91cCIvInN0cnVjdCB0b21veW9fbnVtYmVyX2dyb3VwIi4KKyAqLworc3RydWN0IHRvbW95b19ncm91cCAqdG9tb3lvX2dldF9ncm91cChjb25zdCBjaGFyICpncm91cF9uYW1lLCBjb25zdCB1OCB0eXBlKTsKIAogLyogQ2hlY2sgbW9kZSBmb3Igc3BlY2lmaWVkIGZ1bmN0aW9uYWxpdHkuICovCiB1bnNpZ25lZCBpbnQgdG9tb3lvX2NoZWNrX2ZsYWdzKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKQEAgLTYzMiwyNSArODA3LDIzIEBACiAvKiBSdW4gcG9saWN5IGxvYWRlciB3aGVuIC9zYmluL2luaXQgc3RhcnRzLiAqLwogdm9pZCB0b21veW9fbG9hZF9wb2xpY3koY29uc3QgY2hhciAqZmlsZW5hbWUpOwogCit2b2lkIHRvbW95b19wdXRfbnVtYmVyX3VuaW9uKHN0cnVjdCB0b21veW9fbnVtYmVyX3VuaW9uICpwdHIpOworCiAvKiBDb252ZXJ0IGJpbmFyeSBzdHJpbmcgdG8gYXNjaWkgc3RyaW5nLiAqLwotaW50IHRvbW95b19lbmNvZGUoY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuLCBjb25zdCBjaGFyICpzdHIpOwotCi0vKiBSZXR1cm5zIHJlYWxwYXRoKDMpIG9mIHRoZSBnaXZlbiBwYXRobmFtZSBidXQgaWdub3JlcyBjaHJvb3QnZWQgcm9vdC4gKi8KLWludCB0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoMihzdHJ1Y3QgcGF0aCAqcGF0aCwgY2hhciAqbmV3bmFtZSwKLQkJCSAgICAgICBpbnQgbmV3bmFtZV9sZW4pOworY2hhciAqdG9tb3lvX2VuY29kZShjb25zdCBjaGFyICpzdHIpOwogCiAvKgotICogUmV0dXJucyByZWFscGF0aCgzKSBvZiB0aGUgZ2l2ZW4gcGF0aG5hbWUgYnV0IGlnbm9yZXMgY2hyb290J2VkIHJvb3QuCi0gKiBUaGVzZSBmdW5jdGlvbnMgdXNlIGt6YWxsb2MoKSwgc28gdGhlIGNhbGxlciBtdXN0IGNhbGwga2ZyZWUoKQotICogaWYgdGhlc2UgZnVuY3Rpb25zIGRpZG4ndCByZXR1cm4gTlVMTC4KLSAqLwotY2hhciAqdG9tb3lvX3JlYWxwYXRoKGNvbnN0IGNoYXIgKnBhdGhuYW1lKTsKLS8qCi0gKiBTYW1lIHdpdGggdG9tb3lvX3JlYWxwYXRoKCkgZXhjZXB0IHRoYXQgaXQgZG9lc24ndCBmb2xsb3cgdGhlIGZpbmFsIHN5bWxpbmsuCisgKiBSZXR1cm5zIHJlYWxwYXRoKDMpIG9mIHRoZSBnaXZlbiBwYXRobmFtZSBleGNlcHQgdGhhdAorICogaWdub3JlcyBjaHJvb3QnZWQgcm9vdCBhbmQgZG9lcyBub3QgZm9sbG93IHRoZSBmaW5hbCBzeW1saW5rLgogICovCiBjaGFyICp0b21veW9fcmVhbHBhdGhfbm9mb2xsb3coY29uc3QgY2hhciAqcGF0aG5hbWUpOwotLyogU2FtZSB3aXRoIHRvbW95b19yZWFscGF0aCgpIGV4Y2VwdCB0aGF0IHRoZSBwYXRobmFtZSBpcyBhbHJlYWR5IHNvbHZlZC4gKi8KKy8qCisgKiBSZXR1cm5zIHJlYWxwYXRoKDMpIG9mIHRoZSBnaXZlbiBwYXRobmFtZSBleGNlcHQgdGhhdAorICogaWdub3JlcyBjaHJvb3QnZWQgcm9vdCBhbmQgdGhlIHBhdGhuYW1lIGlzIGFscmVhZHkgc29sdmVkLgorICovCiBjaGFyICp0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoKHN0cnVjdCBwYXRoICpwYXRoKTsKKy8qIEdldCBwYXR0ZXJuZWQgcGF0aG5hbWUuICovCitjb25zdCBjaGFyICp0b21veW9fcGF0dGVybihjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUpOwogCiAvKiBDaGVjayBtZW1vcnkgcXVvdGEuICovCiBib29sIHRvbW95b19tZW1vcnlfb2sodm9pZCAqcHRyKTsKQEAgLTY2MywyMyArODM2LDI5IEBACiBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqdG9tb3lvX2dldF9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpOwogCiAvKiBDaGVjayBmb3IgbWVtb3J5IHVzYWdlLiAqLwotaW50IHRvbW95b19yZWFkX21lbW9yeV9jb3VudGVyKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKTsKK3ZvaWQgdG9tb3lvX3JlYWRfbWVtb3J5X2NvdW50ZXIoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOwogCiAvKiBTZXQgbWVtb3J5IHF1b3RhLiAqLwogaW50IHRvbW95b193cml0ZV9tZW1vcnlfcXVvdGEoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOwogCi0vKiBJbml0aWFsaXplIHJlYWxwYXRoIHJlbGF0ZWQgY29kZS4gKi8KLXZvaWQgX19pbml0IHRvbW95b19yZWFscGF0aF9pbml0KHZvaWQpOwotaW50IHRvbW95b19jaGVja19leGVjX3Blcm0oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorLyogSW5pdGlhbGl6ZSBtbSByZWxhdGVkIGNvZGUuICovCit2b2lkIF9faW5pdCB0b21veW9fbW1faW5pdCh2b2lkKTsKK2ludCB0b21veW9fcGF0aF9wZXJtaXNzaW9uKHN0cnVjdCB0b21veW9fcmVxdWVzdF9pbmZvICpyLCB1OCBvcGVyYXRpb24sCiAJCQkgICBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUpOwogaW50IHRvbW95b19jaGVja19vcGVuX3Blcm1pc3Npb24oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAogCQkJCSBzdHJ1Y3QgcGF0aCAqcGF0aCwgY29uc3QgaW50IGZsYWcpOworaW50IHRvbW95b19wYXRoX251bWJlcl9wZXJtKGNvbnN0IHU4IG9wZXJhdGlvbiwgc3RydWN0IHBhdGggKnBhdGgsCisJCQkgICAgdW5zaWduZWQgbG9uZyBudW1iZXIpOworaW50IHRvbW95b19ta2Rldl9wZXJtKGNvbnN0IHU4IG9wZXJhdGlvbiwgc3RydWN0IHBhdGggKnBhdGgsCisJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBtb2RlLCB1bnNpZ25lZCBpbnQgZGV2KTsKIGludCB0b21veW9fcGF0aF9wZXJtKGNvbnN0IHU4IG9wZXJhdGlvbiwgc3RydWN0IHBhdGggKnBhdGgpOwogaW50IHRvbW95b19wYXRoMl9wZXJtKGNvbnN0IHU4IG9wZXJhdGlvbiwgc3RydWN0IHBhdGggKnBhdGgxLAogCQkgICAgICBzdHJ1Y3QgcGF0aCAqcGF0aDIpOwotaW50IHRvbW95b19jaGVja19yZXdyaXRlX3Blcm1pc3Npb24oc3RydWN0IGZpbGUgKmZpbHApOwogaW50IHRvbW95b19maW5kX25leHRfZG9tYWluKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pOwogCit2b2lkIHRvbW95b19wcmludF91bG9uZyhjaGFyICpidWZmZXIsIGNvbnN0IGludCBidWZmZXJfbGVuLAorCQkJY29uc3QgdW5zaWduZWQgbG9uZyB2YWx1ZSwgY29uc3QgdTggdHlwZSk7CisKIC8qIERyb3AgcmVmY291bnQgb24gdG9tb3lvX25hbWVfdW5pb24uICovCiB2b2lkIHRvbW95b19wdXRfbmFtZV91bmlvbihzdHJ1Y3QgdG9tb3lvX25hbWVfdW5pb24gKnB0cik7CiAKQEAgLTY4OCw2ICs4NjcsMjUgQEAKIAogdm9pZCB0b21veW9fbWVtb3J5X2ZyZWUodm9pZCAqcHRyKTsKIAoraW50IHRvbW95b191cGRhdGVfZG9tYWluKHN0cnVjdCB0b21veW9fYWNsX2luZm8gKm5ld19lbnRyeSwgY29uc3QgaW50IHNpemUsCisJCQkgYm9vbCBpc19kZWxldGUsIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCSBib29sICgqY2hlY2tfZHVwbGljYXRlKSAoY29uc3Qgc3RydWN0IHRvbW95b19hY2xfaW5mbworCQkJCQkJICAqLAorCQkJCQkJICBjb25zdCBzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvCisJCQkJCQkgICopLAorCQkJIGJvb2wgKCptZXJnZV9kdXBsaWNhdGUpIChzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICosCisJCQkJCQkgIHN0cnVjdCB0b21veW9fYWNsX2luZm8gKiwKKwkJCQkJCSAgY29uc3QgYm9vbCkpOworaW50IHRvbW95b191cGRhdGVfcG9saWN5KHN0cnVjdCB0b21veW9fYWNsX2hlYWQgKm5ld19lbnRyeSwgY29uc3QgaW50IHNpemUsCisJCQkgYm9vbCBpc19kZWxldGUsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCisJCQkgYm9vbCAoKmNoZWNrX2R1cGxpY2F0ZSkgKGNvbnN0IHN0cnVjdCB0b21veW9fYWNsX2hlYWQKKwkJCQkJCSAgKiwKKwkJCQkJCSAgY29uc3Qgc3RydWN0IHRvbW95b19hY2xfaGVhZAorCQkJCQkJICAqKSk7Cit2b2lkIHRvbW95b19jaGVja19hY2woc3RydWN0IHRvbW95b19yZXF1ZXN0X2luZm8gKnIsCisJCSAgICAgIGJvb2wgKCpjaGVja19lbnRyeSkgKHN0cnVjdCB0b21veW9fcmVxdWVzdF9pbmZvICosCisJCQkJCSAgIGNvbnN0IHN0cnVjdCB0b21veW9fYWNsX2luZm8gKikpOworCiAvKioqKioqKioqKiBFeHRlcm5hbCB2YXJpYWJsZSBkZWZpbml0aW9ucy4gKioqKioqKioqKi8KIAogLyogTG9jayBmb3IgR0MuICovCkBAIC02OTYsMTQgKzg5NCw4IEBACiAvKiBUaGUgbGlzdCBmb3IgInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLiAqLwogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgdG9tb3lvX2RvbWFpbl9saXN0OwogCi1leHRlcm4gc3RydWN0IGxpc3RfaGVhZCB0b21veW9fcGF0aF9ncm91cF9saXN0OwotZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0OwotZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdDsKLWV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHRvbW95b19hbGlhc19saXN0OwotZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3Q7Ci1leHRlcm4gc3RydWN0IGxpc3RfaGVhZCB0b21veW9fcGF0dGVybl9saXN0OwotZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgdG9tb3lvX25vX3Jld3JpdGVfbGlzdDsKLWV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0OworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgdG9tb3lvX3BvbGljeV9saXN0W1RPTU9ZT19NQVhfUE9MSUNZXTsKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHRvbW95b19ncm91cF9saXN0W1RPTU9ZT19NQVhfR1JPVVBdOwogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgdG9tb3lvX25hbWVfbGlzdFtUT01PWU9fTUFYX0hBU0hdOwogCiAvKiBMb2NrIGZvciBwcm90ZWN0aW5nIHBvbGljeS4gKi8KQEAgLTcxNSw2ICs5MDcsMTQgQEAKIC8qIFRoZSBrZXJuZWwncyBkb21haW4uICovCiBleHRlcm4gc3RydWN0IHRvbW95b19kb21haW5faW5mbyB0b21veW9fa2VybmVsX2RvbWFpbjsKIAorZXh0ZXJuIGNvbnN0IGNoYXIgKnRvbW95b19wYXRoX2tleXdvcmRbVE9NT1lPX01BWF9QQVRIX09QRVJBVElPTl07CitleHRlcm4gY29uc3QgY2hhciAqdG9tb3lvX21rZGV2X2tleXdvcmRbVE9NT1lPX01BWF9NS0RFVl9PUEVSQVRJT05dOworZXh0ZXJuIGNvbnN0IGNoYXIgKnRvbW95b19wYXRoMl9rZXl3b3JkW1RPTU9ZT19NQVhfUEFUSDJfT1BFUkFUSU9OXTsKK2V4dGVybiBjb25zdCBjaGFyICp0b21veW9fcGF0aF9udW1iZXJfa2V5d29yZFtUT01PWU9fTUFYX1BBVEhfTlVNQkVSX09QRVJBVElPTl07CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgdG9tb3lvX3F1b3RhX2Zvcl9xdWVyeTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgdG9tb3lvX3F1ZXJ5X21lbW9yeV9zaXplOworCiAvKioqKioqKioqKiBJbmxpbmVkIGZ1bmN0aW9ucy4gKioqKioqKioqKi8KIAogc3RhdGljIGlubGluZSBpbnQgdG9tb3lvX3JlYWRfbG9jayh2b2lkKQpAQCAtNzM1LDI1ICs5MzUsMjUgQEAKIH0KIAogLyoqCi0gKiB0b21veW9faXNfdmFsaWQgLSBDaGVjayB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgaXMgYSB2YWxpZCBjaGFyLgorICogdG9tb3lvX3ZhbGlkIC0gQ2hlY2sgd2hldGhlciB0aGUgY2hhcmFjdGVyIGlzIGEgdmFsaWQgY2hhci4KICAqCiAgKiBAYzogVGhlIGNoYXJhY3RlciB0byBjaGVjay4KICAqCiAgKiBSZXR1cm5zIHRydWUgaWYgQGMgaXMgYSB2YWxpZCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4KICAqLwotc3RhdGljIGlubGluZSBib29sIHRvbW95b19pc192YWxpZChjb25zdCB1bnNpZ25lZCBjaGFyIGMpCitzdGF0aWMgaW5saW5lIGJvb2wgdG9tb3lvX3ZhbGlkKGNvbnN0IHVuc2lnbmVkIGNoYXIgYykKIHsKIAlyZXR1cm4gYyA+ICcgJyAmJiBjIDwgMTI3OwogfQogCiAvKioKLSAqIHRvbW95b19pc19pbnZhbGlkIC0gQ2hlY2sgd2hldGhlciB0aGUgY2hhcmFjdGVyIGlzIGFuIGludmFsaWQgY2hhci4KKyAqIHRvbW95b19pbnZhbGlkIC0gQ2hlY2sgd2hldGhlciB0aGUgY2hhcmFjdGVyIGlzIGFuIGludmFsaWQgY2hhci4KICAqCiAgKiBAYzogVGhlIGNoYXJhY3RlciB0byBjaGVjay4KICAqCiAgKiBSZXR1cm5zIHRydWUgaWYgQGMgaXMgYW4gaW52YWxpZCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4KICAqLwotc3RhdGljIGlubGluZSBib29sIHRvbW95b19pc19pbnZhbGlkKGNvbnN0IHVuc2lnbmVkIGNoYXIgYykKK3N0YXRpYyBpbmxpbmUgYm9vbCB0b21veW9faW52YWxpZChjb25zdCB1bnNpZ25lZCBjaGFyIGMpCiB7CiAJcmV0dXJuIGMgJiYgKGMgPD0gJyAnIHx8IGMgPj0gMTI3KTsKIH0KQEAgLTc2MSwxMyArOTYxLDEzIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgdG9tb3lvX3B1dF9uYW1lKGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpuYW1lKQogewogCWlmIChuYW1lKSB7Ci0JCXN0cnVjdCB0b21veW9fbmFtZV9lbnRyeSAqcHRyID0KLQkJCWNvbnRhaW5lcl9vZihuYW1lLCBzdHJ1Y3QgdG9tb3lvX25hbWVfZW50cnksIGVudHJ5KTsKKwkJc3RydWN0IHRvbW95b19uYW1lICpwdHIgPQorCQkJY29udGFpbmVyX29mKG5hbWUsIHR5cGVvZigqcHRyKSwgZW50cnkpOwogCQlhdG9taWNfZGVjKCZwdHItPnVzZXJzKTsKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB0b21veW9fcHV0X3BhdGhfZ3JvdXAoc3RydWN0IHRvbW95b19wYXRoX2dyb3VwICpncm91cCkKK3N0YXRpYyBpbmxpbmUgdm9pZCB0b21veW9fcHV0X2dyb3VwKHN0cnVjdCB0b21veW9fZ3JvdXAgKmdyb3VwKQogewogCWlmIChncm91cCkKIAkJYXRvbWljX2RlYygmZ3JvdXAtPnVzZXJzKTsKQEAgLTc4NCw3NSArOTg0LDM1IEBACiAJcmV0dXJuIHRhc2tfY3JlZF94eHgodGFzaywgc2VjdXJpdHkpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgdG9tb3lvX2lzX3NhbWVfYWNsX2hlYWQoY29uc3Qgc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcDEsCitzdGF0aWMgaW5saW5lIGJvb2wgdG9tb3lvX3NhbWVfYWNsX2hlYWQoY29uc3Qgc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcDEsCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCB0b21veW9fYWNsX2luZm8gKnAyKQogewogCXJldHVybiBwMS0+dHlwZSA9PSBwMi0+dHlwZTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHRvbW95b19pc19zYW1lX25hbWVfdW5pb24KK3N0YXRpYyBpbmxpbmUgYm9vbCB0b21veW9fc2FtZV9uYW1lX3VuaW9uCiAoY29uc3Qgc3RydWN0IHRvbW95b19uYW1lX3VuaW9uICpwMSwgY29uc3Qgc3RydWN0IHRvbW95b19uYW1lX3VuaW9uICpwMikKIHsKIAlyZXR1cm4gcDEtPmZpbGVuYW1lID09IHAyLT5maWxlbmFtZSAmJiBwMS0+Z3JvdXAgPT0gcDItPmdyb3VwICYmCiAJCXAxLT5pc19ncm91cCA9PSBwMi0+aXNfZ3JvdXA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCB0b21veW9faXNfc2FtZV9wYXRoX2FjbChjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfYWNsICpwMSwKLQkJCQkJICAgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2FjbCAqcDIpCitzdGF0aWMgaW5saW5lIGJvb2wgdG9tb3lvX3NhbWVfbnVtYmVyX3VuaW9uCisoY29uc3Qgc3RydWN0IHRvbW95b19udW1iZXJfdW5pb24gKnAxLCBjb25zdCBzdHJ1Y3QgdG9tb3lvX251bWJlcl91bmlvbiAqcDIpCiB7Ci0JcmV0dXJuIHRvbW95b19pc19zYW1lX2FjbF9oZWFkKCZwMS0+aGVhZCwgJnAyLT5oZWFkKSAmJgotCQl0b21veW9faXNfc2FtZV9uYW1lX3VuaW9uKCZwMS0+bmFtZSwgJnAyLT5uYW1lKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHRvbW95b19pc19zYW1lX3BhdGgyX2FjbChjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGgyX2FjbCAqcDEsCi0JCQkJCSAgICBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGgyX2FjbCAqcDIpCi17Ci0JcmV0dXJuIHRvbW95b19pc19zYW1lX2FjbF9oZWFkKCZwMS0+aGVhZCwgJnAyLT5oZWFkKSAmJgotCQl0b21veW9faXNfc2FtZV9uYW1lX3VuaW9uKCZwMS0+bmFtZTEsICZwMi0+bmFtZTEpICYmCi0JCXRvbW95b19pc19zYW1lX25hbWVfdW5pb24oJnAxLT5uYW1lMiwgJnAyLT5uYW1lMik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCB0b21veW9faXNfc2FtZV9kb21haW5faW5pdGlhbGl6ZXJfZW50cnkKLShjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSAqcDEsCi0gY29uc3Qgc3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkgKnAyKQotewotCXJldHVybiBwMS0+aXNfbm90ID09IHAyLT5pc19ub3QgJiYgcDEtPmlzX2xhc3RfbmFtZSA9PSBwMi0+aXNfbGFzdF9uYW1lCi0JCSYmIHAxLT5kb21haW5uYW1lID09IHAyLT5kb21haW5uYW1lCi0JCSYmIHAxLT5wcm9ncmFtID09IHAyLT5wcm9ncmFtOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgdG9tb3lvX2lzX3NhbWVfZG9tYWluX2tlZXBlcl9lbnRyeQotKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSAqcDEsCi0gY29uc3Qgc3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5ICpwMikKLXsKLQlyZXR1cm4gcDEtPmlzX25vdCA9PSBwMi0+aXNfbm90ICYmIHAxLT5pc19sYXN0X25hbWUgPT0gcDItPmlzX2xhc3RfbmFtZQotCQkmJiBwMS0+ZG9tYWlubmFtZSA9PSBwMi0+ZG9tYWlubmFtZQotCQkmJiBwMS0+cHJvZ3JhbSA9PSBwMi0+cHJvZ3JhbTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHRvbW95b19pc19zYW1lX2FsaWFzX2VudHJ5Ci0oY29uc3Qgc3RydWN0IHRvbW95b19hbGlhc19lbnRyeSAqcDEsIGNvbnN0IHN0cnVjdCB0b21veW9fYWxpYXNfZW50cnkgKnAyKQotewotCXJldHVybiBwMS0+b3JpZ2luYWxfbmFtZSA9PSBwMi0+b3JpZ2luYWxfbmFtZSAmJgotCQlwMS0+YWxpYXNlZF9uYW1lID09IHAyLT5hbGlhc2VkX25hbWU7CisJcmV0dXJuIHAxLT52YWx1ZXNbMF0gPT0gcDItPnZhbHVlc1swXSAmJiBwMS0+dmFsdWVzWzFdID09IHAyLT52YWx1ZXNbMV0KKwkJJiYgcDEtPmdyb3VwID09IHAyLT5ncm91cCAmJiBwMS0+bWluX3R5cGUgPT0gcDItPm1pbl90eXBlICYmCisJCXAxLT5tYXhfdHlwZSA9PSBwMi0+bWF4X3R5cGUgJiYgcDEtPmlzX2dyb3VwID09IHAyLT5pc19ncm91cDsKIH0KIAogLyoqCiAgKiBsaXN0X2Zvcl9lYWNoX2Nvb2tpZSAtIGl0ZXJhdGUgb3ZlciBhIGxpc3Qgd2l0aCBjb29raWUuCiAgKiBAcG9zOiAgICAgICAgdGhlICZzdHJ1Y3QgbGlzdF9oZWFkIHRvIHVzZSBhcyBhIGxvb3AgY3Vyc29yLgotICogQGNvb2tpZTogICAgIHRoZSAmc3RydWN0IGxpc3RfaGVhZCB0byB1c2UgYXMgYSBjb29raWUuCiAgKiBAaGVhZDogICAgICAgdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KLSAqCi0gKiBTYW1lIHdpdGggbGlzdF9mb3JfZWFjaF9yY3UoKSBleGNlcHQgdGhhdCB0aGlzIHByaW1pdGl2ZSB1c2VzIEBjb29raWUKLSAqIHNvIHRoYXQgd2UgY2FuIGNvbnRpbnVlIGl0ZXJhdGlvbi4KLSAqIEBjb29raWUgbXVzdCBiZSBOVUxMIHdoZW4gaXRlcmF0aW9uIHN0YXJ0cywgYW5kIEBjb29raWUgd2lsbCBiZWNvbWUKLSAqIE5VTEwgd2hlbiBpdGVyYXRpb24gZmluaXNoZXMuCiAgKi8KLSNkZWZpbmUgbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBjb29raWUsIGhlYWQpCQkJCVwKLQlmb3IgKCh7IGlmICghY29va2llKQkJCQkJCVwKLQkJCQkgICAgIGNvb2tpZSA9IGhlYWQ7IH0pLAkJCVwKLQkJICAgICBwb3MgPSByY3VfZGVyZWZlcmVuY2UoKGNvb2tpZSktPm5leHQpOwkJXAotCSAgICAgcHJlZmV0Y2gocG9zLT5uZXh0KSwgcG9zICE9IChoZWFkKSB8fCAoKGNvb2tpZSkgPSBOVUxMKTsJXAotCSAgICAgKGNvb2tpZSkgPSBwb3MsIHBvcyA9IHJjdV9kZXJlZmVyZW5jZShwb3MtPm5leHQpKQorI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2Nvb2tpZShwb3MsIGhlYWQpCQkJCQlcCisJaWYgKCFwb3MpCQkJCQkJCVwKKwkJcG9zID0gIHNyY3VfZGVyZWZlcmVuY2UoKGhlYWQpLT5uZXh0LCAmdG9tb3lvX3NzKTsJXAorCWZvciAoIDsgcG9zICE9IChoZWFkKTsgcG9zID0gc3JjdV9kZXJlZmVyZW5jZShwb3MtPm5leHQsICZ0b21veW9fc3MpKQogCiAjZW5kaWYgLyogIWRlZmluZWQoX1NFQ1VSSVRZX1RPTU9ZT19DT01NT05fSCkgKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9kb21haW4uYyBiL3NlY3VyaXR5L3RvbW95by9kb21haW4uYwppbmRleCBjZDhiYTQ0Li4zNTM4ODQwIDEwMDY0NAotLS0gYS9zZWN1cml0eS90b21veW8vZG9tYWluLmMKKysrIGIvc2VjdXJpdHkvdG9tb3lvL2RvbWFpbi5jCkBAIC0xLDEyICsxLDkgQEAKIC8qCiAgKiBzZWN1cml0eS90b21veW8vZG9tYWluLmMKICAqCi0gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgRG9tYWluLUJhc2VkIE1hbmRhdG9yeSBBY2Nlc3MgQ29udHJvbC4KKyAqIERvbWFpbiB0cmFuc2l0aW9uIGZ1bmN0aW9ucyBmb3IgVE9NT1lPLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5ICBOVFQgREFUQSBDT1JQT1JBVElPTgotICoKLSAqIFZlcnNpb246IDIuMi4wICAgMjAwOS8wNC8wMQotICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDEwICBOVFQgREFUQSBDT1JQT1JBVElPTgogICovCiAKICNpbmNsdWRlICJjb21tb24uaCIKQEAgLTE4LDM2NiArMTUsMTkxIEBACiAvKiBUaGUgaW5pdGlhbCBkb21haW4uICovCiBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIHRvbW95b19rZXJuZWxfZG9tYWluOwogCi0vKgotICogdG9tb3lvX2RvbWFpbl9saXN0IGlzIHVzZWQgZm9yIGhvbGRpbmcgbGlzdCBvZiBkb21haW5zLgotICogVGhlIC0+YWNsX2luZm9fbGlzdCBvZiAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIgaXMgdXNlZCBmb3IgaG9sZGluZwotICogcGVybWlzc2lvbnMgKGUuZy4gImFsbG93X3JlYWQgL2xpYi9saWJjLTIuNS5zbyIpIGdpdmVuIHRvIGVhY2ggZG9tYWluLgotICoKLSAqIEFuIGVudHJ5IGlzIGFkZGVkIGJ5Ci0gKgotICogIyAoIGVjaG8gIjxrZXJuZWw+IjsgZWNobyAiYWxsb3dfZXhlY3V0ZSAvc2Jpbi9pbml0IiApID4gXAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL2RvbWFpbl9wb2xpY3kKLSAqCi0gKiBhbmQgaXMgZGVsZXRlZCBieQotICoKLSAqICMgKCBlY2hvICI8a2VybmVsPiI7IGVjaG8gImRlbGV0ZSBhbGxvd19leGVjdXRlIC9zYmluL2luaXQiICkgPiBcCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vZG9tYWluX3BvbGljeQotICoKLSAqIGFuZCBhbGwgZW50cmllcyBhcmUgcmV0cmlldmVkIGJ5Ci0gKgotICogIyBjYXQgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL2RvbWFpbl9wb2xpY3kKLSAqCi0gKiBBIGRvbWFpbiBpcyBhZGRlZCBieQotICoKLSAqICMgZWNobyAiPGtlcm5lbD4iID4gL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL2RvbWFpbl9wb2xpY3kKLSAqCi0gKiBhbmQgaXMgZGVsZXRlZCBieQotICoKLSAqICMgZWNobyAiZGVsZXRlIDxrZXJuZWw+IiA+IC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9kb21haW5fcG9saWN5Ci0gKgotICogYW5kIGFsbCBkb21haW5zIGFyZSByZXRyaWV2ZWQgYnkKLSAqCi0gKiAjIGdyZXAgJ148a2VybmVsPicgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL2RvbWFpbl9wb2xpY3kKLSAqCi0gKiBOb3JtYWxseSwgYSBkb21haW5uYW1lIGlzIG1vbm90b25pY2FsbHkgZ2V0dGluZyBsb25nZXIgYmVjYXVzZSBhIGRvbWFpbm5hbWUKLSAqIHdoaWNoIHRoZSBwcm9jZXNzIHdpbGwgYmVsb25nIHRvIGlmIGFuIGV4ZWN2ZSgpIG9wZXJhdGlvbiBzdWNjZWVkcyBpcwotICogZGVmaW5lZCBhcyBhIGNvbmNhdGVuYXRpb24gb2YgImN1cnJlbnQgZG9tYWlubmFtZSIgKyAicGF0aG5hbWUgcGFzc2VkIHRvCi0gKiBleGVjdmUoKSIuCi0gKiBTZWUgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0IGFuZCB0b21veW9fZG9tYWluX2tlZXBlcl9saXN0IGZvcgotICogZXhjZXB0aW9ucy4KLSAqLwotTElTVF9IRUFEKHRvbW95b19kb21haW5fbGlzdCk7Ci0KIC8qKgotICogdG9tb3lvX2dldF9sYXN0X25hbWUgLSBHZXQgbGFzdCBjb21wb25lbnQgb2YgYSBkb21haW5uYW1lLgorICogdG9tb3lvX3VwZGF0ZV9wb2xpY3kgLSBVcGRhdGUgYW4gZW50cnkgZm9yIGV4Y2VwdGlvbiBwb2xpY3kuCiAgKgotICogQGRvbWFpbjogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCi0gKgotICogUmV0dXJucyB0aGUgbGFzdCBjb21wb25lbnQgb2YgdGhlIGRvbWFpbm5hbWUuCi0gKi8KLWNvbnN0IGNoYXIgKnRvbW95b19nZXRfbGFzdF9uYW1lKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbikKLXsKLQljb25zdCBjaGFyICpjcDAgPSBkb21haW4tPmRvbWFpbm5hbWUtPm5hbWU7Ci0JY29uc3QgY2hhciAqY3AxID0gc3RycmNocihjcDAsICcgJyk7Ci0KLQlpZiAoY3AxKQotCQlyZXR1cm4gY3AxICsgMTsKLQlyZXR1cm4gY3AwOwotfQotCi0vKgotICogdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0IGlzIHVzZWQgZm9yIGhvbGRpbmcgbGlzdCBvZiBwcm9ncmFtcyB3aGljaAotICogdHJpZ2dlcnMgcmVpbml0aWFsaXphdGlvbiBvZiBkb21haW5uYW1lLiBOb3JtYWxseSwgYSBkb21haW5uYW1lIGlzCi0gKiBtb25vdG9uaWNhbGx5IGdldHRpbmcgbG9uZ2VyLiBCdXQgc29tZXRpbWVzLCB3ZSByZXN0YXJ0IGRhZW1vbiBwcm9ncmFtcy4KLSAqIEl0IHdvdWxkIGJlIGNvbnZlbmllbnQgZm9yIHVzIHRoYXQgImEgZGFlbW9uIHN0YXJ0ZWQgdXBvbiBzeXN0ZW0gYm9vdCIgYW5kCi0gKiAidGhlIGRhZW1vbiByZXN0YXJ0ZWQgZnJvbSBjb25zb2xlIiBiZWxvbmcgdG8gdGhlIHNhbWUgZG9tYWluLiBUaHVzLCBUT01PWU8KLSAqIHByb3ZpZGVzIGEgd2F5IHRvIHNob3J0ZW4gZG9tYWlubmFtZXMuCi0gKgotICogQW4gZW50cnkgaXMgYWRkZWQgYnkKLSAqCi0gKiAjIGVjaG8gJ2luaXRpYWxpemVfZG9tYWluIC91c3Ivc2Jpbi9odHRwZCcgPiBcCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vZXhjZXB0aW9uX3BvbGljeQotICoKLSAqIGFuZCBpcyBkZWxldGVkIGJ5Ci0gKgotICogIyBlY2hvICdkZWxldGUgaW5pdGlhbGl6ZV9kb21haW4gL3Vzci9zYmluL2h0dHBkJyA+IFwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9leGNlcHRpb25fcG9saWN5Ci0gKgotICogYW5kIGFsbCBlbnRyaWVzIGFyZSByZXRyaWV2ZWQgYnkKLSAqCi0gKiAjIGdyZXAgXmluaXRpYWxpemVfZG9tYWluIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9leGNlcHRpb25fcG9saWN5Ci0gKgotICogSW4gdGhlIGV4YW1wbGUgYWJvdmUsIC91c3Ivc2Jpbi9odHRwZCB3aWxsIGJlbG9uZyB0bwotICogIjxrZXJuZWw+IC91c3Ivc2Jpbi9odHRwZCIgZG9tYWluLgotICoKLSAqIFlvdSBtYXkgc3BlY2lmeSBhIGRvbWFpbm5hbWUgdXNpbmcgImZyb20iIGtleXdvcmQuCi0gKiAiaW5pdGlhbGl6ZV9kb21haW4gL3Vzci9zYmluL2h0dHBkIGZyb20gPGtlcm5lbD4gL2V0Yy9yYy5kL2luaXQuZC9odHRwZCIKLSAqIHdpbGwgY2F1c2UgIi91c3Ivc2Jpbi9odHRwZCIgZXhlY3V0ZWQgZnJvbSAiPGtlcm5lbD4gL2V0Yy9yYy5kL2luaXQuZC9odHRwZCIKLSAqIGRvbWFpbiB0byBiZWxvbmcgdG8gIjxrZXJuZWw+IC91c3Ivc2Jpbi9odHRwZCIgZG9tYWluLgotICoKLSAqIFlvdSBtYXkgYWRkICJub18iIHByZWZpeCB0byAiaW5pdGlhbGl6ZV9kb21haW4iLgotICogImluaXRpYWxpemVfZG9tYWluIC91c3Ivc2Jpbi9odHRwZCIgYW5kCi0gKiAibm9faW5pdGlhbGl6ZV9kb21haW4gL3Vzci9zYmluL2h0dHBkIGZyb20gPGtlcm5lbD4gL2V0Yy9yYy5kL2luaXQuZC9odHRwZCIKLSAqIHdpbGwgY2F1c2UgIi91c3Ivc2Jpbi9odHRwZCIgdG8gYmVsb25nIHRvICI8a2VybmVsPiAvdXNyL3NiaW4vaHR0cGQiIGRvbWFpbgotICogdW5sZXNzIGV4ZWN1dGVkIGZyb20gIjxrZXJuZWw+IC9ldGMvcmMuZC9pbml0LmQvaHR0cGQiIGRvbWFpbi4KLSAqLwotTElTVF9IRUFEKHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdCk7Ci0KLS8qKgotICogdG9tb3lvX3VwZGF0ZV9kb21haW5faW5pdGlhbGl6ZXJfZW50cnkgLSBVcGRhdGUgInN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5IiBsaXN0LgotICoKLSAqIEBkb21haW5uYW1lOiBUaGUgbmFtZSBvZiBkb21haW4uIE1heSBiZSBOVUxMLgotICogQHByb2dyYW06ICAgIFRoZSBuYW1lIG9mIHByb2dyYW0uCi0gKiBAaXNfbm90OiAgICAgVHJ1ZSBpZiBpdCBpcyAibm9faW5pdGlhbGl6ZV9kb21haW4iIGVudHJ5LgotICogQGlzX2RlbGV0ZTogIFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqIEBuZXdfZW50cnk6ICAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fYWNsX2luZm8iLgorICogQHNpemU6ICAgICAgICAgICAgU2l6ZSBvZiBAbmV3X2VudHJ5IGluIGJ5dGVzLgorICogQGlzX2RlbGV0ZTogICAgICAgVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICogQGxpc3Q6ICAgICAgICAgICAgUG9pbnRlciB0byAic3RydWN0IGxpc3RfaGVhZCIuCisgKiBAY2hlY2tfZHVwbGljYXRlOiBDYWxsYmFjayBmdW5jdGlvbiB0byBmaW5kIGR1cGxpY2F0ZWQgZW50cnkuCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KICAqCiAgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCi1zdGF0aWMgaW50IHRvbW95b191cGRhdGVfZG9tYWluX2luaXRpYWxpemVyX2VudHJ5KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCi0JCQkJCQkgIGNvbnN0IGNoYXIgKnByb2dyYW0sCi0JCQkJCQkgIGNvbnN0IGJvb2wgaXNfbm90LAotCQkJCQkJICBjb25zdCBib29sIGlzX2RlbGV0ZSkKK2ludCB0b21veW9fdXBkYXRlX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2FjbF9oZWFkICpuZXdfZW50cnksIGNvbnN0IGludCBzaXplLAorCQkJIGJvb2wgaXNfZGVsZXRlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorCQkJIGJvb2wgKCpjaGVja19kdXBsaWNhdGUpIChjb25zdCBzdHJ1Y3QgdG9tb3lvX2FjbF9oZWFkCisJCQkJCQkgICosCisJCQkJCQkgIGNvbnN0IHN0cnVjdCB0b21veW9fYWNsX2hlYWQKKwkJCQkJCSAgKikpCiB7Ci0Jc3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkgKnB0cjsKLQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSBlID0geyAuaXNfbm90ID0gaXNfbm90IH07CiAJaW50IGVycm9yID0gaXNfZGVsZXRlID8gLUVOT0VOVCA6IC1FTk9NRU07CisJc3RydWN0IHRvbW95b19hY2xfaGVhZCAqZW50cnk7CiAKLQlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgocHJvZ3JhbSwgMSwgLTEsIC0xKSkKLQkJcmV0dXJuIC1FSU5WQUw7IC8qIE5vIHBhdHRlcm5zIGFsbG93ZWQuICovCi0JaWYgKGRvbWFpbm5hbWUpIHsKLQkJaWYgKCF0b21veW9faXNfZG9tYWluX2RlZihkb21haW5uYW1lKSAmJgotCQkgICAgdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChkb21haW5uYW1lLCAxLCAtMSwgLTEpKQotCQkJZS5pc19sYXN0X25hbWUgPSB0cnVlOwotCQllbHNlIGlmICghdG9tb3lvX2lzX2NvcnJlY3RfZG9tYWluKGRvbWFpbm5hbWUpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWUuZG9tYWlubmFtZSA9IHRvbW95b19nZXRfbmFtZShkb21haW5uYW1lKTsKLQkJaWYgKCFlLmRvbWFpbm5hbWUpCi0JCQlnb3RvIG91dDsKLQl9Ci0JZS5wcm9ncmFtID0gdG9tb3lvX2dldF9uYW1lKHByb2dyYW0pOwotCWlmICghZS5wcm9ncmFtKQotCQlnb3RvIG91dDsKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ0b21veW9fcG9saWN5X2xvY2spKQotCQlnb3RvIG91dDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3QsIGxpc3QpIHsKLQkJaWYgKCF0b21veW9faXNfc2FtZV9kb21haW5faW5pdGlhbGl6ZXJfZW50cnkocHRyLCAmZSkpCisJCXJldHVybiAtRU5PTUVNOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCBsaXN0LCBsaXN0KSB7CisJCWlmICghY2hlY2tfZHVwbGljYXRlKGVudHJ5LCBuZXdfZW50cnkpKQogCQkJY29udGludWU7Ci0JCXB0ci0+aXNfZGVsZXRlZCA9IGlzX2RlbGV0ZTsKKwkJZW50cnktPmlzX2RlbGV0ZWQgPSBpc19kZWxldGU7CiAJCWVycm9yID0gMDsKIAkJYnJlYWs7CiAJfQotCWlmICghaXNfZGVsZXRlICYmIGVycm9yKSB7Ci0JCXN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5ICplbnRyeSA9Ci0JCQl0b21veW9fY29tbWl0X29rKCZlLCBzaXplb2YoZSkpOworCWlmIChlcnJvciAmJiAhaXNfZGVsZXRlKSB7CisJCWVudHJ5ID0gdG9tb3lvX2NvbW1pdF9vayhuZXdfZW50cnksIHNpemUpOwogCQlpZiAoZW50cnkpIHsKLQkJCWxpc3RfYWRkX3RhaWxfcmN1KCZlbnRyeS0+bGlzdCwKLQkJCQkJICAmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0KTsKKwkJCWxpc3RfYWRkX3RhaWxfcmN1KCZlbnRyeS0+bGlzdCwgbGlzdCk7CiAJCQllcnJvciA9IDA7CiAJCX0KIAl9CiAJbXV0ZXhfdW5sb2NrKCZ0b21veW9fcG9saWN5X2xvY2spOwotIG91dDoKLQl0b21veW9fcHV0X25hbWUoZS5kb21haW5uYW1lKTsKLQl0b21veW9fcHV0X25hbWUoZS5wcm9ncmFtKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKIC8qKgotICogdG9tb3lvX3JlYWRfZG9tYWluX2luaXRpYWxpemVyX3BvbGljeSAtIFJlYWQgInN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5IiBsaXN0LgorICogdG9tb3lvX3VwZGF0ZV9kb21haW4gLSBVcGRhdGUgYW4gZW50cnkgZm9yIGRvbWFpbiBwb2xpY3kuCiAgKgotICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KLSAqCi0gKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgotICoKLSAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCi0gKi8KLWJvb2wgdG9tb3lvX3JlYWRfZG9tYWluX2luaXRpYWxpemVyX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7Ci0JYm9vbCBkb25lID0gdHJ1ZTsKLQotCWxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgaGVhZC0+cmVhZF92YXIyLAotCQkJICAgICAmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0KSB7Ci0JCWNvbnN0IGNoYXIgKm5vOwotCQljb25zdCBjaGFyICpmcm9tID0gIiI7Ci0JCWNvbnN0IGNoYXIgKmRvbWFpbiA9ICIiOwotCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSAqcHRyOwotCQlwdHIgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnksCi0JCQkJICBsaXN0KTsKLQkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKLQkJCWNvbnRpbnVlOwotCQlubyA9IHB0ci0+aXNfbm90ID8gIm5vXyIgOiAiIjsKLQkJaWYgKHB0ci0+ZG9tYWlubmFtZSkgewotCQkJZnJvbSA9ICIgZnJvbSAiOwotCQkJZG9tYWluID0gcHRyLT5kb21haW5uYW1lLT5uYW1lOwotCQl9Ci0JCWRvbmUgPSB0b21veW9faW9fcHJpbnRmKGhlYWQsCi0JCQkJCSIlcyIgVE9NT1lPX0tFWVdPUkRfSU5JVElBTElaRV9ET01BSU4KLQkJCQkJIiVzJXMlc1xuIiwgbm8sIHB0ci0+cHJvZ3JhbS0+bmFtZSwKLQkJCQkJZnJvbSwgZG9tYWluKTsKLQkJaWYgKCFkb25lKQotCQkJYnJlYWs7Ci0JfQotCXJldHVybiBkb25lOwotfQotCi0vKioKLSAqIHRvbW95b193cml0ZV9kb21haW5faW5pdGlhbGl6ZXJfcG9saWN5IC0gV3JpdGUgInN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5IiBsaXN0LgotICoKLSAqIEBkYXRhOiAgICAgIFN0cmluZyB0byBwYXJzZS4KLSAqIEBpc19ub3Q6ICAgIFRydWUgaWYgaXQgaXMgIm5vX2luaXRpYWxpemVfZG9tYWluIiBlbnRyeS4KLSAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqIEBuZXdfZW50cnk6ICAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fYWNsX2luZm8iLgorICogQHNpemU6ICAgICAgICAgICAgU2l6ZSBvZiBAbmV3X2VudHJ5IGluIGJ5dGVzLgorICogQGlzX2RlbGV0ZTogICAgICAgVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICogQGRvbWFpbjogICAgICAgICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAY2hlY2tfZHVwbGljYXRlOiBDYWxsYmFjayBmdW5jdGlvbiB0byBmaW5kIGR1cGxpY2F0ZWQgZW50cnkuCisgKiBAbWVyZ2VfZHVwbGljYXRlOiBDYWxsYmFjayBmdW5jdGlvbiB0byBtZXJnZSBkdXBsaWNhdGVkIGVudHJ5LgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCiAgKgogICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwotaW50IHRvbW95b193cml0ZV9kb21haW5faW5pdGlhbGl6ZXJfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfbm90LAotCQkJCQkgICBjb25zdCBib29sIGlzX2RlbGV0ZSkKK2ludCB0b21veW9fdXBkYXRlX2RvbWFpbihzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpuZXdfZW50cnksIGNvbnN0IGludCBzaXplLAorCQkJIGJvb2wgaXNfZGVsZXRlLCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkgYm9vbCAoKmNoZWNrX2R1cGxpY2F0ZSkgKGNvbnN0IHN0cnVjdCB0b21veW9fYWNsX2luZm8KKwkJCQkJCSAgKiwKKwkJCQkJCSAgY29uc3Qgc3RydWN0IHRvbW95b19hY2xfaW5mbworCQkJCQkJICAqKSwKKwkJCSBib29sICgqbWVyZ2VfZHVwbGljYXRlKSAoc3RydWN0IHRvbW95b19hY2xfaW5mbyAqLAorCQkJCQkJICBzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICosCisJCQkJCQkgIGNvbnN0IGJvb2wpKQogewotCWNoYXIgKmNwID0gc3Ryc3RyKGRhdGEsICIgZnJvbSAiKTsKKwlpbnQgZXJyb3IgPSBpc19kZWxldGUgPyAtRU5PRU5UIDogLUVOT01FTTsKKwlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICplbnRyeTsKIAotCWlmIChjcCkgewotCQkqY3AgPSAnXDAnOwotCQlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9kb21haW5faW5pdGlhbGl6ZXJfZW50cnkoY3AgKyA2LCBkYXRhLAotCQkJCQkJCSAgICAgIGlzX25vdCwKLQkJCQkJCQkgICAgICBpc19kZWxldGUpOworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnRvbW95b19wb2xpY3lfbG9jaykpCisJCXJldHVybiBlcnJvcjsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgeworCQlpZiAoIWNoZWNrX2R1cGxpY2F0ZShlbnRyeSwgbmV3X2VudHJ5KSkKKwkJCWNvbnRpbnVlOworCQlpZiAobWVyZ2VfZHVwbGljYXRlKQorCQkJZW50cnktPmlzX2RlbGV0ZWQgPSBtZXJnZV9kdXBsaWNhdGUoZW50cnksIG5ld19lbnRyeSwKKwkJCQkJCQkgICAgaXNfZGVsZXRlKTsKKwkJZWxzZQorCQkJZW50cnktPmlzX2RlbGV0ZWQgPSBpc19kZWxldGU7CisJCWVycm9yID0gMDsKKwkJYnJlYWs7CiAJfQotCXJldHVybiB0b21veW9fdXBkYXRlX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeShOVUxMLCBkYXRhLCBpc19ub3QsCi0JCQkJCQkgICAgICBpc19kZWxldGUpOworCWlmIChlcnJvciAmJiAhaXNfZGVsZXRlKSB7CisJCWVudHJ5ID0gdG9tb3lvX2NvbW1pdF9vayhuZXdfZW50cnksIHNpemUpOworCQlpZiAoZW50cnkpIHsKKwkJCWxpc3RfYWRkX3RhaWxfcmN1KCZlbnRyeS0+bGlzdCwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCk7CisJCQllcnJvciA9IDA7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZ0b21veW9fcG9saWN5X2xvY2spOworCXJldHVybiBlcnJvcjsKK30KKwordm9pZCB0b21veW9fY2hlY2tfYWNsKHN0cnVjdCB0b21veW9fcmVxdWVzdF9pbmZvICpyLAorCQkgICAgICBib29sICgqY2hlY2tfZW50cnkpIChzdHJ1Y3QgdG9tb3lvX3JlcXVlc3RfaW5mbyAqLAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICopKQoreworCWNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiA9IHItPmRvbWFpbjsKKwlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHI7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHB0ci0+aXNfZGVsZXRlZCB8fCBwdHItPnR5cGUgIT0gci0+cGFyYW1fdHlwZSkKKwkJCWNvbnRpbnVlOworCQlpZiAoY2hlY2tfZW50cnkociwgcHRyKSkgeworCQkJci0+Z3JhbnRlZCA9IHRydWU7CisJCQlyZXR1cm47CisJCX0KKwl9CisJci0+Z3JhbnRlZCA9IGZhbHNlOworfQorCisvKiBUaGUgbGlzdCBmb3IgInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLiAqLworTElTVF9IRUFEKHRvbW95b19kb21haW5fbGlzdCk7CisKK3N0cnVjdCBsaXN0X2hlYWQgdG9tb3lvX3BvbGljeV9saXN0W1RPTU9ZT19NQVhfUE9MSUNZXTsKK3N0cnVjdCBsaXN0X2hlYWQgdG9tb3lvX2dyb3VwX2xpc3RbVE9NT1lPX01BWF9HUk9VUF07CisKKy8qKgorICogdG9tb3lvX2xhc3Rfd29yZCAtIEdldCBsYXN0IGNvbXBvbmVudCBvZiBhIGRvbWFpbm5hbWUuCisgKgorICogQGRvbWFpbm5hbWU6IERvbWFpbm5hbWUgdG8gY2hlY2suCisgKgorICogUmV0dXJucyB0aGUgbGFzdCB3b3JkIG9mIEBkb21haW5uYW1lLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqdG9tb3lvX2xhc3Rfd29yZChjb25zdCBjaGFyICpuYW1lKQoreworICAgICAgICBjb25zdCBjaGFyICpjcCA9IHN0cnJjaHIobmFtZSwgJyAnKTsKKyAgICAgICAgaWYgKGNwKQorICAgICAgICAgICAgICAgIHJldHVybiBjcCArIDE7CisgICAgICAgIHJldHVybiBuYW1lOworfQorCitzdGF0aWMgYm9vbCB0b21veW9fc2FtZV90cmFuc2l0aW9uX2NvbnRyb2woY29uc3Qgc3RydWN0IHRvbW95b19hY2xfaGVhZCAqYSwKKwkJCQkJICAgY29uc3Qgc3RydWN0IHRvbW95b19hY2xfaGVhZCAqYikKK3sKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3RyYW5zaXRpb25fY29udHJvbCAqcDEgPSBjb250YWluZXJfb2YoYSwKKwkJCQkJCQkJICB0eXBlb2YoKnAxKSwKKwkJCQkJCQkJICBoZWFkKTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3RyYW5zaXRpb25fY29udHJvbCAqcDIgPSBjb250YWluZXJfb2YoYiwKKwkJCQkJCQkJICB0eXBlb2YoKnAyKSwKKwkJCQkJCQkJICBoZWFkKTsKKwlyZXR1cm4gcDEtPnR5cGUgPT0gcDItPnR5cGUgJiYgcDEtPmlzX2xhc3RfbmFtZSA9PSBwMi0+aXNfbGFzdF9uYW1lCisJCSYmIHAxLT5kb21haW5uYW1lID09IHAyLT5kb21haW5uYW1lCisJCSYmIHAxLT5wcm9ncmFtID09IHAyLT5wcm9ncmFtOwogfQogCiAvKioKLSAqIHRvbW95b19pc19kb21haW5faW5pdGlhbGl6ZXIgLSBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBwcm9ncmFtIGNhdXNlcyBkb21haW5uYW1lIHJlaW5pdGlhbGl6YXRpb24uCisgKiB0b21veW9fdXBkYXRlX3RyYW5zaXRpb25fY29udHJvbF9lbnRyeSAtIFVwZGF0ZSAic3RydWN0IHRvbW95b190cmFuc2l0aW9uX2NvbnRyb2wiIGxpc3QuCiAgKgotICogQGRvbWFpbm5hbWU6IFRoZSBuYW1lIG9mIGRvbWFpbi4KLSAqIEBwcm9ncmFtOiAgICBUaGUgbmFtZSBvZiBwcm9ncmFtLgotICogQGxhc3RfbmFtZTogIFRoZSBsYXN0IGNvbXBvbmVudCBvZiBAZG9tYWlubmFtZS4KLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgZXhlY3V0aW5nIEBwcm9ncmFtIHJlaW5pdGlhbGl6ZXMgZG9tYWluIHRyYW5zaXRpb24sCi0gKiBmYWxzZSBvdGhlcndpc2UuCi0gKgotICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KLSAqLwotc3RhdGljIGJvb2wgdG9tb3lvX2lzX2RvbWFpbl9pbml0aWFsaXplcihjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqCi0JCQkJCSBkb21haW5uYW1lLAotCQkJCQkgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnByb2dyYW0sCi0JCQkJCSBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqCi0JCQkJCSBsYXN0X25hbWUpCi17Ci0Jc3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkgKnB0cjsKLQlib29sIGZsYWcgPSBmYWxzZTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJnRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdCwgbGlzdCkgewotCQlpZiAocHRyLT5pc19kZWxldGVkKQotCQkJY29udGludWU7Ci0JCWlmIChwdHItPmRvbWFpbm5hbWUpIHsKLQkJCWlmICghcHRyLT5pc19sYXN0X25hbWUpIHsKLQkJCQlpZiAocHRyLT5kb21haW5uYW1lICE9IGRvbWFpbm5hbWUpCi0JCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAodG9tb3lvX3BhdGhjbXAocHRyLT5kb21haW5uYW1lLCBsYXN0X25hbWUpKQotCQkJCQljb250aW51ZTsKLQkJCX0KLQkJfQotCQlpZiAodG9tb3lvX3BhdGhjbXAocHRyLT5wcm9ncmFtLCBwcm9ncmFtKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAocHRyLT5pc19ub3QpIHsKLQkJCWZsYWcgPSBmYWxzZTsKLQkJCWJyZWFrOwotCQl9Ci0JCWZsYWcgPSB0cnVlOwotCX0KLQlyZXR1cm4gZmxhZzsKLX0KLQotLyoKLSAqIHRvbW95b19kb21haW5fa2VlcGVyX2xpc3QgaXMgdXNlZCBmb3IgaG9sZGluZyBsaXN0IG9mIGRvbWFpbm5hbWVzIHdoaWNoCi0gKiBzdXBwcmVzc2VzIGRvbWFpbiB0cmFuc2l0aW9uLiBOb3JtYWxseSwgYSBkb21haW5uYW1lIGlzIG1vbm90b25pY2FsbHkKLSAqIGdldHRpbmcgbG9uZ2VyLiBCdXQgc29tZXRpbWVzLCB3ZSB3YW50IHRvIHN1cHByZXNzIGRvbWFpbiB0cmFuc2l0aW9uLgotICogSXQgd291bGQgYmUgY29udmVuaWVudCBmb3IgdXMgdGhhdCBwcm9ncmFtcyBleGVjdXRlZCBmcm9tIGEgbG9naW4gc2Vzc2lvbgotICogYmVsb25nIHRvIHRoZSBzYW1lIGRvbWFpbi4gVGh1cywgVE9NT1lPIHByb3ZpZGVzIGEgd2F5IHRvIHN1cHByZXNzIGRvbWFpbgotICogdHJhbnNpdGlvbi4KLSAqCi0gKiBBbiBlbnRyeSBpcyBhZGRlZCBieQotICoKLSAqICMgZWNobyAna2VlcF9kb21haW4gPGtlcm5lbD4gL3Vzci9zYmluL3NzaGQgL2Jpbi9iYXNoJyA+IFwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL2V4Y2VwdGlvbl9wb2xpY3kKLSAqCi0gKiBhbmQgaXMgZGVsZXRlZCBieQotICoKLSAqICMgZWNobyAnZGVsZXRlIGtlZXBfZG9tYWluIDxrZXJuZWw+IC91c3Ivc2Jpbi9zc2hkIC9iaW4vYmFzaCcgPiBcCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9leGNlcHRpb25fcG9saWN5Ci0gKgotICogYW5kIGFsbCBlbnRyaWVzIGFyZSByZXRyaWV2ZWQgYnkKLSAqCi0gKiAjIGdyZXAgXmtlZXBfZG9tYWluIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9leGNlcHRpb25fcG9saWN5Ci0gKgotICogSW4gdGhlIGV4YW1wbGUgYWJvdmUsIGFueSBwcm9jZXNzIHdoaWNoIGJlbG9uZ3MgdG8KLSAqICI8a2VybmVsPiAvdXNyL3NiaW4vc3NoZCAvYmluL2Jhc2giIGRvbWFpbiB3aWxsIHJlbWFpbiBpbiB0aGF0IGRvbWFpbiwKLSAqIHVubGVzcyBleHBsaWNpdGx5IHNwZWNpZmllZCBieSAiaW5pdGlhbGl6ZV9kb21haW4iIG9yICJub19rZWVwX2RvbWFpbiIuCi0gKgotICogWW91IG1heSBzcGVjaWZ5IGEgcHJvZ3JhbSB1c2luZyAiZnJvbSIga2V5d29yZC4KLSAqICJrZWVwX2RvbWFpbiAvYmluL3B3ZCBmcm9tIDxrZXJuZWw+IC91c3Ivc2Jpbi9zc2hkIC9iaW4vYmFzaCIKLSAqIHdpbGwgY2F1c2UgIi9iaW4vcHdkIiBleGVjdXRlZCBmcm9tICI8a2VybmVsPiAvdXNyL3NiaW4vc3NoZCAvYmluL2Jhc2giCi0gKiBkb21haW4gdG8gcmVtYWluIGluICI8a2VybmVsPiAvdXNyL3NiaW4vc3NoZCAvYmluL2Jhc2giIGRvbWFpbi4KLSAqCi0gKiBZb3UgbWF5IGFkZCAibm9fIiBwcmVmaXggdG8gImtlZXBfZG9tYWluIi4KLSAqICJrZWVwX2RvbWFpbiA8a2VybmVsPiAvdXNyL3NiaW4vc3NoZCAvYmluL2Jhc2giIGFuZAotICogIm5vX2tlZXBfZG9tYWluIC91c3IvYmluL3Bhc3N3ZCBmcm9tIDxrZXJuZWw+IC91c3Ivc2Jpbi9zc2hkIC9iaW4vYmFzaCIgd2lsbAotICogY2F1c2UgIi91c3IvYmluL3Bhc3N3ZCIgdG8gYmVsb25nIHRvCi0gKiAiPGtlcm5lbD4gL3Vzci9zYmluL3NzaGQgL2Jpbi9iYXNoIC91c3IvYmluL3Bhc3N3ZCIgZG9tYWluLCB1bmxlc3MKLSAqIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGJ5ICJpbml0aWFsaXplX2RvbWFpbiIuCi0gKi8KLUxJU1RfSEVBRCh0b21veW9fZG9tYWluX2tlZXBlcl9saXN0KTsKLQotLyoqCi0gKiB0b21veW9fdXBkYXRlX2RvbWFpbl9rZWVwZXJfZW50cnkgLSBVcGRhdGUgInN0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSIgbGlzdC4KLSAqCi0gKiBAZG9tYWlubmFtZTogVGhlIG5hbWUgb2YgZG9tYWluLgotICogQHByb2dyYW06ICAgIFRoZSBuYW1lIG9mIHByb2dyYW0uIE1heSBiZSBOVUxMLgotICogQGlzX25vdDogICAgIFRydWUgaWYgaXQgaXMgIm5vX2tlZXBfZG9tYWluIiBlbnRyeS4KKyAqIEBkb21haW5uYW1lOiBUaGUgbmFtZSBvZiBkb21haW4uIE1heWJlIE5VTEwuCisgKiBAcHJvZ3JhbTogICAgVGhlIG5hbWUgb2YgcHJvZ3JhbS4gTWF5YmUgTlVMTC4KKyAqIEB0eXBlOiAgICAgICBUeXBlIG9mIHRyYW5zaXRpb24uCiAgKiBAaXNfZGVsZXRlOiAgVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCi0gKgotICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwotc3RhdGljIGludCB0b21veW9fdXBkYXRlX2RvbWFpbl9rZWVwZXJfZW50cnkoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKLQkJCQkJICAgICBjb25zdCBjaGFyICpwcm9ncmFtLAotCQkJCQkgICAgIGNvbnN0IGJvb2wgaXNfbm90LAotCQkJCQkgICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQorc3RhdGljIGludCB0b21veW9fdXBkYXRlX3RyYW5zaXRpb25fY29udHJvbF9lbnRyeShjb25zdCBjaGFyICpkb21haW5uYW1lLAorCQkJCQkJICBjb25zdCBjaGFyICpwcm9ncmFtLAorCQkJCQkJICBjb25zdCB1OCB0eXBlLAorCQkJCQkJICBjb25zdCBib29sIGlzX2RlbGV0ZSkKIHsKLQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkgKnB0cjsKLQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkgZSA9IHsgLmlzX25vdCA9IGlzX25vdCB9OworCXN0cnVjdCB0b21veW9fdHJhbnNpdGlvbl9jb250cm9sIGUgPSB7IC50eXBlID0gdHlwZSB9OwogCWludCBlcnJvciA9IGlzX2RlbGV0ZSA/IC1FTk9FTlQgOiAtRU5PTUVNOwotCi0JaWYgKCF0b21veW9faXNfZG9tYWluX2RlZihkb21haW5uYW1lKSAmJgotCSAgICB0b21veW9faXNfY29ycmVjdF9wYXRoKGRvbWFpbm5hbWUsIDEsIC0xLCAtMSkpCi0JCWUuaXNfbGFzdF9uYW1lID0gdHJ1ZTsKLQllbHNlIGlmICghdG9tb3lvX2lzX2NvcnJlY3RfZG9tYWluKGRvbWFpbm5hbWUpKQotCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAocHJvZ3JhbSkgewotCQlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgocHJvZ3JhbSwgMSwgLTEsIC0xKSkKKwkJaWYgKCF0b21veW9fY29ycmVjdF9wYXRoKHByb2dyYW0pKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWUucHJvZ3JhbSA9IHRvbW95b19nZXRfbmFtZShwcm9ncmFtKTsKIAkJaWYgKCFlLnByb2dyYW0pCiAJCQlnb3RvIG91dDsKIAl9Ci0JZS5kb21haW5uYW1lID0gdG9tb3lvX2dldF9uYW1lKGRvbWFpbm5hbWUpOwotCWlmICghZS5kb21haW5uYW1lKQotCQlnb3RvIG91dDsKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ0b21veW9fcG9saWN5X2xvY2spKQotCQlnb3RvIG91dDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0LCBsaXN0KSB7Ci0JCWlmICghdG9tb3lvX2lzX3NhbWVfZG9tYWluX2tlZXBlcl9lbnRyeShwdHIsICZlKSkKLQkJCWNvbnRpbnVlOwotCQlwdHItPmlzX2RlbGV0ZWQgPSBpc19kZWxldGU7Ci0JCWVycm9yID0gMDsKLQkJYnJlYWs7Ci0JfQotCWlmICghaXNfZGVsZXRlICYmIGVycm9yKSB7Ci0JCXN0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSAqZW50cnkgPQotCQkJdG9tb3lvX2NvbW1pdF9vaygmZSwgc2l6ZW9mKGUpKTsKLQkJaWYgKGVudHJ5KSB7Ci0JCQlsaXN0X2FkZF90YWlsX3JjdSgmZW50cnktPmxpc3QsCi0JCQkJCSAgJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3QpOwotCQkJZXJyb3IgPSAwOworCWlmIChkb21haW5uYW1lKSB7CisJCWlmICghdG9tb3lvX2NvcnJlY3RfZG9tYWluKGRvbWFpbm5hbWUpKSB7CisJCQlpZiAoIXRvbW95b19jb3JyZWN0X3BhdGgoZG9tYWlubmFtZSkpCisJCQkJZ290byBvdXQ7CisJCQllLmlzX2xhc3RfbmFtZSA9IHRydWU7CiAJCX0KKwkJZS5kb21haW5uYW1lID0gdG9tb3lvX2dldF9uYW1lKGRvbWFpbm5hbWUpOworCQlpZiAoIWUuZG9tYWlubmFtZSkKKwkJCWdvdG8gb3V0OwogCX0KLQltdXRleF91bmxvY2soJnRvbW95b19wb2xpY3lfbG9jayk7CisJZXJyb3IgPSB0b21veW9fdXBkYXRlX3BvbGljeSgmZS5oZWFkLCBzaXplb2YoZSksIGlzX2RlbGV0ZSwKKwkJCQkgICAgICZ0b21veW9fcG9saWN5X2xpc3QKKwkJCQkgICAgIFtUT01PWU9fSURfVFJBTlNJVElPTl9DT05UUk9MXSwKKwkJCQkgICAgIHRvbW95b19zYW1lX3RyYW5zaXRpb25fY29udHJvbCk7CiAgb3V0OgogCXRvbW95b19wdXRfbmFtZShlLmRvbWFpbm5hbWUpOwogCXRvbW95b19wdXRfbmFtZShlLnByb2dyYW0pOwpAQCAtMzg1LDIxOSArMjA3LDEzMyBAQAogfQogCiAvKioKLSAqIHRvbW95b193cml0ZV9kb21haW5fa2VlcGVyX3BvbGljeSAtIFdyaXRlICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkiIGxpc3QuCisgKiB0b21veW9fd3JpdGVfdHJhbnNpdGlvbl9jb250cm9sIC0gV3JpdGUgInN0cnVjdCB0b21veW9fdHJhbnNpdGlvbl9jb250cm9sIiBsaXN0LgogICoKICAqIEBkYXRhOiAgICAgIFN0cmluZyB0byBwYXJzZS4KLSAqIEBpc19ub3Q6ICAgIFRydWUgaWYgaXQgaXMgIm5vX2tlZXBfZG9tYWluIiBlbnRyeS4KICAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqIEB0eXBlOiAgICAgIFR5cGUgb2YgdGhpcyBlbnRyeS4KICAqCi0gKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KICAqLwotaW50IHRvbW95b193cml0ZV9kb21haW5fa2VlcGVyX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX25vdCwKLQkJCQkgICAgICBjb25zdCBib29sIGlzX2RlbGV0ZSkKK2ludCB0b21veW9fd3JpdGVfdHJhbnNpdGlvbl9jb250cm9sKGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlLAorCQkJCSAgICBjb25zdCB1OCB0eXBlKQogewotCWNoYXIgKmNwID0gc3Ryc3RyKGRhdGEsICIgZnJvbSAiKTsKLQotCWlmIChjcCkgewotCQkqY3AgPSAnXDAnOwotCQlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9kb21haW5fa2VlcGVyX2VudHJ5KGNwICsgNiwgZGF0YSwgaXNfbm90LAotCQkJCQkJCSBpc19kZWxldGUpOworCWNoYXIgKmRvbWFpbm5hbWUgPSBzdHJzdHIoZGF0YSwgIiBmcm9tICIpOworCWlmIChkb21haW5uYW1lKSB7CisJCSpkb21haW5uYW1lID0gJ1wwJzsKKwkJZG9tYWlubmFtZSArPSA2OworCX0gZWxzZSBpZiAodHlwZSA9PSBUT01PWU9fVFJBTlNJVElPTl9DT05UUk9MX05PX0tFRVAgfHwKKwkJICAgdHlwZSA9PSBUT01PWU9fVFJBTlNJVElPTl9DT05UUk9MX0tFRVApIHsKKwkJZG9tYWlubmFtZSA9IGRhdGE7CisJCWRhdGEgPSBOVUxMOwogCX0KLQlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9kb21haW5fa2VlcGVyX2VudHJ5KGRhdGEsIE5VTEwsIGlzX25vdCwgaXNfZGVsZXRlKTsKKwlyZXR1cm4gdG9tb3lvX3VwZGF0ZV90cmFuc2l0aW9uX2NvbnRyb2xfZW50cnkoZG9tYWlubmFtZSwgZGF0YSwgdHlwZSwKKwkJCQkJCSAgICAgIGlzX2RlbGV0ZSk7CiB9CiAKIC8qKgotICogdG9tb3lvX3JlYWRfZG9tYWluX2tlZXBlcl9wb2xpY3kgLSBSZWFkICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkiIGxpc3QuCi0gKgotICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KLSAqCi0gKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgotICoKLSAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCi0gKi8KLWJvb2wgdG9tb3lvX3JlYWRfZG9tYWluX2tlZXBlcl9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zOwotCWJvb2wgZG9uZSA9IHRydWU7Ci0KLQlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShwb3MsIGhlYWQtPnJlYWRfdmFyMiwKLQkJCSAgICAgJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3QpIHsKLQkJc3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5ICpwdHI7Ci0JCWNvbnN0IGNoYXIgKm5vOwotCQljb25zdCBjaGFyICpmcm9tID0gIiI7Ci0JCWNvbnN0IGNoYXIgKnByb2dyYW0gPSAiIjsKLQotCQlwdHIgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5LCBsaXN0KTsKLQkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKLQkJCWNvbnRpbnVlOwotCQlubyA9IHB0ci0+aXNfbm90ID8gIm5vXyIgOiAiIjsKLQkJaWYgKHB0ci0+cHJvZ3JhbSkgewotCQkJZnJvbSA9ICIgZnJvbSAiOwotCQkJcHJvZ3JhbSA9IHB0ci0+cHJvZ3JhbS0+bmFtZTsKLQkJfQotCQlkb25lID0gdG9tb3lvX2lvX3ByaW50ZihoZWFkLAotCQkJCQkiJXMiIFRPTU9ZT19LRVlXT1JEX0tFRVBfRE9NQUlOCi0JCQkJCSIlcyVzJXNcbiIsIG5vLCBwcm9ncmFtLCBmcm9tLAotCQkJCQlwdHItPmRvbWFpbm5hbWUtPm5hbWUpOwotCQlpZiAoIWRvbmUpCi0JCQlicmVhazsKLQl9Ci0JcmV0dXJuIGRvbmU7Ci19Ci0KLS8qKgotICogdG9tb3lvX2lzX2RvbWFpbl9rZWVwZXIgLSBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBwcm9ncmFtIGNhdXNlcyBkb21haW4gdHJhbnNpdGlvbiBzdXBwcmVzc2lvbi4KKyAqIHRvbW95b190cmFuc2l0aW9uX3R5cGUgLSBHZXQgZG9tYWluIHRyYW5zaXRpb24gdHlwZS4KICAqCiAgKiBAZG9tYWlubmFtZTogVGhlIG5hbWUgb2YgZG9tYWluLgogICogQHByb2dyYW06ICAgIFRoZSBuYW1lIG9mIHByb2dyYW0uCi0gKiBAbGFzdF9uYW1lOiAgVGhlIGxhc3QgY29tcG9uZW50IG9mIEBkb21haW5uYW1lLgogICoKLSAqIFJldHVybnMgdHJ1ZSBpZiBleGVjdXRpbmcgQHByb2dyYW0gc3VwcmVzc2VzIGRvbWFpbiB0cmFuc2l0aW9uLAotICogZmFsc2Ugb3RoZXJ3aXNlLgorICogUmV0dXJucyBUT01PWU9fVFJBTlNJVElPTl9DT05UUk9MX0lOSVRJQUxJWkUgaWYgZXhlY3V0aW5nIEBwcm9ncmFtCisgKiByZWluaXRpYWxpemVzIGRvbWFpbiB0cmFuc2l0aW9uLCBUT01PWU9fVFJBTlNJVElPTl9DT05UUk9MX0tFRVAgaWYgZXhlY3V0aW5nCisgKiBAcHJvZ3JhbSBzdXBwcmVzc2VzIGRvbWFpbiB0cmFuc2l0aW9uLCBvdGhlcnMgb3RoZXJ3aXNlLgogICoKICAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KLXN0YXRpYyBib29sIHRvbW95b19pc19kb21haW5fa2VlcGVyKGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpkb21haW5uYW1lLAotCQkJCSAgICBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcHJvZ3JhbSwKLQkJCQkgICAgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmxhc3RfbmFtZSkKK3N0YXRpYyB1OCB0b21veW9fdHJhbnNpdGlvbl90eXBlKGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpkb21haW5uYW1lLAorCQkJCSBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcHJvZ3JhbSkKIHsKLQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkgKnB0cjsKLQlib29sIGZsYWcgPSBmYWxzZTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3QsIGxpc3QpIHsKLQkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIXB0ci0+aXNfbGFzdF9uYW1lKSB7Ci0JCQlpZiAocHRyLT5kb21haW5uYW1lICE9IGRvbWFpbm5hbWUpCisJY29uc3Qgc3RydWN0IHRvbW95b190cmFuc2l0aW9uX2NvbnRyb2wgKnB0cjsKKwljb25zdCBjaGFyICpsYXN0X25hbWUgPSB0b21veW9fbGFzdF93b3JkKGRvbWFpbm5hbWUtPm5hbWUpOworCXU4IHR5cGU7CisJZm9yICh0eXBlID0gMDsgdHlwZSA8IFRPTU9ZT19NQVhfVFJBTlNJVElPTl9UWVBFOyB0eXBlKyspIHsKKyBuZXh0OgorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fcG9saWN5X2xpc3QKKwkJCQkJW1RPTU9ZT19JRF9UUkFOU0lUSU9OX0NPTlRST0xdLAorCQkJCQloZWFkLmxpc3QpIHsKKwkJCWlmIChwdHItPmhlYWQuaXNfZGVsZXRlZCB8fCBwdHItPnR5cGUgIT0gdHlwZSkKIAkJCQljb250aW51ZTsKLQkJfSBlbHNlIHsKLQkJCWlmICh0b21veW9fcGF0aGNtcChwdHItPmRvbWFpbm5hbWUsIGxhc3RfbmFtZSkpCisJCQlpZiAocHRyLT5kb21haW5uYW1lKSB7CisJCQkJaWYgKCFwdHItPmlzX2xhc3RfbmFtZSkgeworCQkJCQlpZiAocHRyLT5kb21haW5uYW1lICE9IGRvbWFpbm5hbWUpCisJCQkJCQljb250aW51ZTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKgorCQkJCQkgKiBVc2UgZGlyZWN0IHN0cmNtcCgpIHNpbmNlIHRoaXMgaXMKKwkJCQkJICogdW5saWtlbHkgdXNlZC4KKwkJCQkJICovCisJCQkJCWlmIChzdHJjbXAocHRyLT5kb21haW5uYW1lLT5uYW1lLAorCQkJCQkJICAgbGFzdF9uYW1lKSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJCWlmIChwdHItPnByb2dyYW0gJiYKKwkJCSAgICB0b21veW9fcGF0aGNtcChwdHItPnByb2dyYW0sIHByb2dyYW0pKQogCQkJCWNvbnRpbnVlOworCQkJaWYgKHR5cGUgPT0gVE9NT1lPX1RSQU5TSVRJT05fQ09OVFJPTF9OT19JTklUSUFMSVpFKSB7CisJCQkJLyoKKwkJCQkgKiBEbyBub3QgY2hlY2sgZm9yIGluaXRpYWxpemVfZG9tYWluIGlmCisJCQkJICogbm9faW5pdGlhbGl6ZV9kb21haW4gbWF0Y2hlZC4KKwkJCQkgKi8KKwkJCQl0eXBlID0gVE9NT1lPX1RSQU5TSVRJT05fQ09OVFJPTF9OT19LRUVQOworCQkJCWdvdG8gbmV4dDsKKwkJCX0KKwkJCWdvdG8gZG9uZTsKIAkJfQotCQlpZiAocHRyLT5wcm9ncmFtICYmIHRvbW95b19wYXRoY21wKHB0ci0+cHJvZ3JhbSwgcHJvZ3JhbSkpCi0JCQljb250aW51ZTsKLQkJaWYgKHB0ci0+aXNfbm90KSB7Ci0JCQlmbGFnID0gZmFsc2U7Ci0JCQlicmVhazsKLQkJfQotCQlmbGFnID0gdHJ1ZTsKIAl9Ci0JcmV0dXJuIGZsYWc7CisgZG9uZToKKwlyZXR1cm4gdHlwZTsKIH0KIAotLyoKLSAqIHRvbW95b19hbGlhc19saXN0IGlzIHVzZWQgZm9yIGhvbGRpbmcgbGlzdCBvZiBzeW1saW5rJ3MgcGF0aG5hbWVzIHdoaWNoIGFyZQotICogYWxsb3dlZCB0byBiZSBwYXNzZWQgdG8gYW4gZXhlY3ZlKCkgcmVxdWVzdC4gTm9ybWFsbHksIHRoZSBkb21haW5uYW1lIHdoaWNoCi0gKiB0aGUgY3VycmVudCBwcm9jZXNzIHdpbGwgYmVsb25nIHRvIGFmdGVyIGV4ZWN2ZSgpIHN1Y2NlZWRzIGlzIGNhbGN1bGF0ZWQKLSAqIHVzaW5nIGRlcmVmZXJlbmNlZCBwYXRobmFtZXMuIEJ1dCBzb21lIHByb2dyYW1zIGJlaGF2ZSBkaWZmZXJlbnRseSBkZXBlbmRpbmcKLSAqIG9uIHRoZSBuYW1lIHBhc3NlZCB0byBhcmd2WzBdLiBGb3IgYnVzeWJveCwgY2FsY3VsYXRpbmcgZG9tYWlubmFtZSB1c2luZwotICogZGVyZWZlcmVuY2VkIHBhdGhuYW1lcyB3aWxsIGNhdXNlIGFsbCBwcm9ncmFtcyBpbiB0aGUgYnVzeWJveCB0byBiZWxvbmcgdG8KLSAqIHRoZSBzYW1lIGRvbWFpbi4gVGh1cywgVE9NT1lPIHByb3ZpZGVzIGEgd2F5IHRvIGFsbG93IHVzZSBvZiBzeW1saW5rJ3MKLSAqIHBhdGhuYW1lIGZvciBjaGVja2luZyBleGVjdmUoKSdzIHBlcm1pc3Npb24gYW5kIGNhbGN1bGF0aW5nIGRvbWFpbm5hbWUgd2hpY2gKLSAqIHRoZSBjdXJyZW50IHByb2Nlc3Mgd2lsbCBiZWxvbmcgdG8gYWZ0ZXIgZXhlY3ZlKCkgc3VjY2VlZHMuCi0gKgotICogQW4gZW50cnkgaXMgYWRkZWQgYnkKLSAqCi0gKiAjIGVjaG8gJ2FsaWFzIC9iaW4vYnVzeWJveCAvYmluL2NhdCcgPiBcCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vZXhjZXB0aW9uX3BvbGljeQotICoKLSAqIGFuZCBpcyBkZWxldGVkIGJ5Ci0gKgotICogIyBlY2hvICdkZWxldGUgYWxpYXMgL2Jpbi9idXN5Ym94IC9iaW4vY2F0JyA+IFwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9leGNlcHRpb25fcG9saWN5Ci0gKgotICogYW5kIGFsbCBlbnRyaWVzIGFyZSByZXRyaWV2ZWQgYnkKLSAqCi0gKiAjIGdyZXAgXmFsaWFzIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9leGNlcHRpb25fcG9saWN5Ci0gKgotICogSW4gdGhlIGV4YW1wbGUgYWJvdmUsIGlmIC9iaW4vY2F0IGlzIGEgc3ltbGluayB0byAvYmluL2J1c3lib3ggYW5kIGV4ZWN1dGlvbgotICogb2YgL2Jpbi9jYXQgaXMgcmVxdWVzdGVkLCBwZXJtaXNzaW9uIGlzIGNoZWNrZWQgZm9yIC9iaW4vY2F0IHJhdGhlciB0aGFuCi0gKiAvYmluL2J1c3lib3ggYW5kIGRvbWFpbm5hbWUgd2hpY2ggdGhlIGN1cnJlbnQgcHJvY2VzcyB3aWxsIGJlbG9uZyB0byBhZnRlcgotICogZXhlY3ZlKCkgc3VjY2VlZHMgaXMgY2FsY3VsYXRlZCB1c2luZyAvYmluL2NhdCByYXRoZXIgdGhhbiAvYmluL2J1c3lib3ggLgotICovCi1MSVNUX0hFQUQodG9tb3lvX2FsaWFzX2xpc3QpOworc3RhdGljIGJvb2wgdG9tb3lvX3NhbWVfYWdncmVnYXRvcihjb25zdCBzdHJ1Y3QgdG9tb3lvX2FjbF9oZWFkICphLAorCQkJCSAgIGNvbnN0IHN0cnVjdCB0b21veW9fYWNsX2hlYWQgKmIpCit7CisJY29uc3Qgc3RydWN0IHRvbW95b19hZ2dyZWdhdG9yICpwMSA9IGNvbnRhaW5lcl9vZihhLCB0eXBlb2YoKnAxKSwgaGVhZCk7CisJY29uc3Qgc3RydWN0IHRvbW95b19hZ2dyZWdhdG9yICpwMiA9IGNvbnRhaW5lcl9vZihiLCB0eXBlb2YoKnAyKSwgaGVhZCk7CisJcmV0dXJuIHAxLT5vcmlnaW5hbF9uYW1lID09IHAyLT5vcmlnaW5hbF9uYW1lICYmCisJCXAxLT5hZ2dyZWdhdGVkX25hbWUgPT0gcDItPmFnZ3JlZ2F0ZWRfbmFtZTsKK30KIAogLyoqCi0gKiB0b21veW9fdXBkYXRlX2FsaWFzX2VudHJ5IC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5IiBsaXN0LgorICogdG9tb3lvX3VwZGF0ZV9hZ2dyZWdhdG9yX2VudHJ5IC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX2FnZ3JlZ2F0b3IiIGxpc3QuCiAgKgotICogQG9yaWdpbmFsX25hbWU6IFRoZSBvcmlnaW5hbCBwcm9ncmFtJ3MgcmVhbCBuYW1lLgotICogQGFsaWFzZWRfbmFtZTogIFRoZSBzeW1ib2xpYyBwcm9ncmFtJ3Mgc3ltYm9saWMgbGluaydzIG5hbWUuCi0gKiBAaXNfZGVsZXRlOiAgICAgVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICogQG9yaWdpbmFsX25hbWU6ICAgVGhlIG9yaWdpbmFsIHByb2dyYW0ncyBuYW1lLgorICogQGFnZ3JlZ2F0ZWRfbmFtZTogVGhlIHByb2dyYW0gbmFtZSB0byB1c2UuCisgKiBAaXNfZGVsZXRlOiAgICAgICBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KICAqCiAgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCi1zdGF0aWMgaW50IHRvbW95b191cGRhdGVfYWxpYXNfZW50cnkoY29uc3QgY2hhciAqb3JpZ2luYWxfbmFtZSwKLQkJCQkgICAgIGNvbnN0IGNoYXIgKmFsaWFzZWRfbmFtZSwKLQkJCQkgICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQorc3RhdGljIGludCB0b21veW9fdXBkYXRlX2FnZ3JlZ2F0b3JfZW50cnkoY29uc3QgY2hhciAqb3JpZ2luYWxfbmFtZSwKKwkJCQkJICBjb25zdCBjaGFyICphZ2dyZWdhdGVkX25hbWUsCisJCQkJCSAgY29uc3QgYm9vbCBpc19kZWxldGUpCiB7Ci0Jc3RydWN0IHRvbW95b19hbGlhc19lbnRyeSAqcHRyOwotCXN0cnVjdCB0b21veW9fYWxpYXNfZW50cnkgZSA9IHsgfTsKKwlzdHJ1Y3QgdG9tb3lvX2FnZ3JlZ2F0b3IgZSA9IHsgfTsKIAlpbnQgZXJyb3IgPSBpc19kZWxldGUgPyAtRU5PRU5UIDogLUVOT01FTTsKIAotCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChvcmlnaW5hbF9uYW1lLCAxLCAtMSwgLTEpIHx8Ci0JICAgICF0b21veW9faXNfY29ycmVjdF9wYXRoKGFsaWFzZWRfbmFtZSwgMSwgLTEsIC0xKSkKLQkJcmV0dXJuIC1FSU5WQUw7IC8qIE5vIHBhdHRlcm5zIGFsbG93ZWQuICovCisJaWYgKCF0b21veW9fY29ycmVjdF9wYXRoKG9yaWdpbmFsX25hbWUpIHx8CisJICAgICF0b21veW9fY29ycmVjdF9wYXRoKGFnZ3JlZ2F0ZWRfbmFtZSkpCisJCXJldHVybiAtRUlOVkFMOwogCWUub3JpZ2luYWxfbmFtZSA9IHRvbW95b19nZXRfbmFtZShvcmlnaW5hbF9uYW1lKTsKLQllLmFsaWFzZWRfbmFtZSA9IHRvbW95b19nZXRfbmFtZShhbGlhc2VkX25hbWUpOwotCWlmICghZS5vcmlnaW5hbF9uYW1lIHx8ICFlLmFsaWFzZWRfbmFtZSkKKwllLmFnZ3JlZ2F0ZWRfbmFtZSA9IHRvbW95b19nZXRfbmFtZShhZ2dyZWdhdGVkX25hbWUpOworCWlmICghZS5vcmlnaW5hbF9uYW1lIHx8ICFlLmFnZ3JlZ2F0ZWRfbmFtZSB8fAorCSAgICBlLmFnZ3JlZ2F0ZWRfbmFtZS0+aXNfcGF0dGVybmVkKSAvKiBObyBwYXR0ZXJucyBhbGxvd2VkLiAqLwogCQlnb3RvIG91dDsKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ0b21veW9fcG9saWN5X2xvY2spKQotCQlnb3RvIG91dDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fYWxpYXNfbGlzdCwgbGlzdCkgewotCQlpZiAoIXRvbW95b19pc19zYW1lX2FsaWFzX2VudHJ5KHB0ciwgJmUpKQotCQkJY29udGludWU7Ci0JCXB0ci0+aXNfZGVsZXRlZCA9IGlzX2RlbGV0ZTsKLQkJZXJyb3IgPSAwOwotCQlicmVhazsKLQl9Ci0JaWYgKCFpc19kZWxldGUgJiYgZXJyb3IpIHsKLQkJc3RydWN0IHRvbW95b19hbGlhc19lbnRyeSAqZW50cnkgPQotCQkJdG9tb3lvX2NvbW1pdF9vaygmZSwgc2l6ZW9mKGUpKTsKLQkJaWYgKGVudHJ5KSB7Ci0JCQlsaXN0X2FkZF90YWlsX3JjdSgmZW50cnktPmxpc3QsICZ0b21veW9fYWxpYXNfbGlzdCk7Ci0JCQllcnJvciA9IDA7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZ0b21veW9fcG9saWN5X2xvY2spOworCWVycm9yID0gdG9tb3lvX3VwZGF0ZV9wb2xpY3koJmUuaGVhZCwgc2l6ZW9mKGUpLCBpc19kZWxldGUsCisJCQkJICAgICAmdG9tb3lvX3BvbGljeV9saXN0W1RPTU9ZT19JRF9BR0dSRUdBVE9SXSwKKwkJCQkgICAgIHRvbW95b19zYW1lX2FnZ3JlZ2F0b3IpOwogIG91dDoKIAl0b21veW9fcHV0X25hbWUoZS5vcmlnaW5hbF9uYW1lKTsKLQl0b21veW9fcHV0X25hbWUoZS5hbGlhc2VkX25hbWUpOworCXRvbW95b19wdXRfbmFtZShlLmFnZ3JlZ2F0ZWRfbmFtZSk7CiAJcmV0dXJuIGVycm9yOwogfQogCiAvKioKLSAqIHRvbW95b19yZWFkX2FsaWFzX3BvbGljeSAtIFJlYWQgInN0cnVjdCB0b21veW9fYWxpYXNfZW50cnkiIGxpc3QuCi0gKgotICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KLSAqCi0gKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgotICoKLSAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCi0gKi8KLWJvb2wgdG9tb3lvX3JlYWRfYWxpYXNfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKLQlib29sIGRvbmUgPSB0cnVlOwotCi0JbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBoZWFkLT5yZWFkX3ZhcjIsICZ0b21veW9fYWxpYXNfbGlzdCkgewotCQlzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5ICpwdHI7Ci0KLQkJcHRyID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCB0b21veW9fYWxpYXNfZW50cnksIGxpc3QpOwotCQlpZiAocHRyLT5pc19kZWxldGVkKQotCQkJY29udGludWU7Ci0JCWRvbmUgPSB0b21veW9faW9fcHJpbnRmKGhlYWQsIFRPTU9ZT19LRVlXT1JEX0FMSUFTICIlcyAlc1xuIiwKLQkJCQkJcHRyLT5vcmlnaW5hbF9uYW1lLT5uYW1lLAotCQkJCQlwdHItPmFsaWFzZWRfbmFtZS0+bmFtZSk7Ci0JCWlmICghZG9uZSkKLQkJCWJyZWFrOwotCX0KLQlyZXR1cm4gZG9uZTsKLX0KLQotLyoqCi0gKiB0b21veW9fd3JpdGVfYWxpYXNfcG9saWN5IC0gV3JpdGUgInN0cnVjdCB0b21veW9fYWxpYXNfZW50cnkiIGxpc3QuCisgKiB0b21veW9fd3JpdGVfYWdncmVnYXRvciAtIFdyaXRlICJzdHJ1Y3QgdG9tb3lvX2FnZ3JlZ2F0b3IiIGxpc3QuCiAgKgogICogQGRhdGE6ICAgICAgU3RyaW5nIHRvIHBhcnNlLgogICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgpAQCAtNjA2LDE4ICszNDIsMTggQEAKICAqCiAgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCi1pbnQgdG9tb3lvX3dyaXRlX2FsaWFzX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSkKK2ludCB0b21veW9fd3JpdGVfYWdncmVnYXRvcihjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSkKIHsKIAljaGFyICpjcCA9IHN0cmNocihkYXRhLCAnICcpOwogCiAJaWYgKCFjcCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJKmNwKysgPSAnXDAnOwotCXJldHVybiB0b21veW9fdXBkYXRlX2FsaWFzX2VudHJ5KGRhdGEsIGNwLCBpc19kZWxldGUpOworCXJldHVybiB0b21veW9fdXBkYXRlX2FnZ3JlZ2F0b3JfZW50cnkoZGF0YSwgY3AsIGlzX2RlbGV0ZSk7CiB9CiAKIC8qKgotICogdG9tb3lvX2ZpbmRfb3JfYXNzaWduX25ld19kb21haW4gLSBDcmVhdGUgYSBkb21haW4uCisgKiB0b21veW9fYXNzaWduX2RvbWFpbiAtIENyZWF0ZSBhIGRvbWFpbi4KICAqCiAgKiBAZG9tYWlubmFtZTogVGhlIG5hbWUgb2YgZG9tYWluLgogICogQHByb2ZpbGU6ICAgIFByb2ZpbGUgbnVtYmVyIHRvIGFzc2lnbiBpZiB0aGUgZG9tYWluIHdhcyBuZXdseSBjcmVhdGVkLgpAQCAtNjI2LDE2ICszNjIsMTUgQEAKICAqCiAgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCi1zdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICp0b21veW9fZmluZF9vcl9hc3NpZ25fbmV3X2RvbWFpbihjb25zdCBjaGFyICoKLQkJCQkJCQkgICAgZG9tYWlubmFtZSwKLQkJCQkJCQkgICAgY29uc3QgdTggcHJvZmlsZSkKK3N0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKnRvbW95b19hc3NpZ25fZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisJCQkJCQljb25zdCB1OCBwcm9maWxlKQogewogCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmVudHJ5OwogCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiA9IE5VTEw7CiAJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX2RvbWFpbm5hbWU7CiAJYm9vbCBmb3VuZCA9IGZhbHNlOwogCi0JaWYgKCF0b21veW9faXNfY29ycmVjdF9kb21haW4oZG9tYWlubmFtZSkpCisJaWYgKCF0b21veW9fY29ycmVjdF9kb21haW4oZG9tYWlubmFtZSkpCiAJCXJldHVybiBOVUxMOwogCXNhdmVkX2RvbWFpbm5hbWUgPSB0b21veW9fZ2V0X25hbWUoZG9tYWlubmFtZSk7CiAJaWYgKCFzYXZlZF9kb21haW5uYW1lKQpAQCAtNjc4LDExNiArNDEzLDExOCBAQAogICovCiBpbnQgdG9tb3lvX2ZpbmRfbmV4dF9kb21haW4oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIHsKLQkvKgotCSAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBzaXplIG9mIGJ1ZmZlciByZXR1cm5lZCBieQotCSAqIHRvbW95b19yZWFscGF0aCgpID0gVE9NT1lPX01BWF9QQVRITkFNRV9MRU4uCi0JICovCi0Jc3RydWN0IHRvbW95b19wYWdlX2J1ZmZlciAqdG1wID0ga3phbGxvYyhzaXplb2YoKnRtcCksIEdGUF9OT0ZTKTsKKwlzdHJ1Y3QgdG9tb3lvX3JlcXVlc3RfaW5mbyByOworCWNoYXIgKnRtcCA9IGt6YWxsb2MoVE9NT1lPX0VYRUNfVE1QU0laRSwgR0ZQX05PRlMpOwogCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKm9sZF9kb21haW4gPSB0b21veW9fZG9tYWluKCk7CiAJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluID0gTlVMTDsKLQljb25zdCBjaGFyICpvbGRfZG9tYWluX25hbWUgPSBvbGRfZG9tYWluLT5kb21haW5uYW1lLT5uYW1lOwogCWNvbnN0IGNoYXIgKm9yaWdpbmFsX25hbWUgPSBicHJtLT5maWxlbmFtZTsKLQljaGFyICpuZXdfZG9tYWluX25hbWUgPSBOVUxMOwotCWNoYXIgKnJlYWxfcHJvZ3JhbV9uYW1lID0gTlVMTDsKLQljaGFyICpzeW1saW5rX3Byb2dyYW1fbmFtZSA9IE5VTEw7Ci0JY29uc3QgdTggbW9kZSA9IHRvbW95b19jaGVja19mbGFncyhvbGRfZG9tYWluLCBUT01PWU9fTUFDX0ZPUl9GSUxFKTsKLQljb25zdCBib29sIGlzX2VuZm9yY2UgPSAobW9kZSA9PSAzKTsKKwl1OCBtb2RlOworCWJvb2wgaXNfZW5mb3JjZTsKIAlpbnQgcmV0dmFsID0gLUVOT01FTTsKLQlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyByOyAvKiByZWFsIG5hbWUgKi8KLQlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBzOyAvKiBzeW1saW5rIG5hbWUgKi8KLQlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBsOyAvKiBsYXN0IG5hbWUgKi8KLQlzdGF0aWMgYm9vbCBpbml0aWFsaXplZDsKKwlib29sIG5lZWRfa2ZyZWUgPSBmYWxzZTsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBybiA9IHsgfTsgLyogcmVhbCBuYW1lICovCiAKKwltb2RlID0gdG9tb3lvX2luaXRfcmVxdWVzdF9pbmZvKCZyLCBOVUxMLCBUT01PWU9fTUFDX0ZJTEVfRVhFQ1VURSk7CisJaXNfZW5mb3JjZSA9IChtb2RlID09IFRPTU9ZT19DT05GSUdfRU5GT1JDSU5HKTsKIAlpZiAoIXRtcCkKIAkJZ290byBvdXQ7CiAKLQlpZiAoIWluaXRpYWxpemVkKSB7Ci0JCS8qCi0JCSAqIEJ1aWx0LWluIGluaXRpYWxpemVycy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBwb2xpY2llcyBhcmUKLQkJICogbm90IGxvYWRlZCB1bnRpbCBzdGFydGluZyAvc2Jpbi9pbml0LgotCQkgKi8KLQkJdG9tb3lvX3VwZGF0ZV9kb21haW5faW5pdGlhbGl6ZXJfZW50cnkoTlVMTCwgIi9zYmluL2hvdHBsdWciLAotCQkJCQkJICAgICAgIGZhbHNlLCBmYWxzZSk7Ci0JCXRvbW95b191cGRhdGVfZG9tYWluX2luaXRpYWxpemVyX2VudHJ5KE5VTEwsICIvc2Jpbi9tb2Rwcm9iZSIsCi0JCQkJCQkgICAgICAgZmFsc2UsIGZhbHNlKTsKLQkJaW5pdGlhbGl6ZWQgPSB0cnVlOworIHJldHJ5OgorCWlmIChuZWVkX2tmcmVlKSB7CisJCWtmcmVlKHJuLm5hbWUpOworCQluZWVkX2tmcmVlID0gZmFsc2U7CiAJfQotCi0JLyogR2V0IHRvbW95b19yZWFscGF0aCBvZiBwcm9ncmFtLiAqLworCS8qIEdldCBzeW1saW5rJ3MgcGF0aG5hbWUgb2YgcHJvZ3JhbS4gKi8KIAlyZXR2YWwgPSAtRU5PRU5UOwotCS8qIEkgaG9wZSB0b21veW9fcmVhbHBhdGgoKSB3b24ndCBmYWlsIHdpdGggLUVOT01FTS4gKi8KLQlyZWFsX3Byb2dyYW1fbmFtZSA9IHRvbW95b19yZWFscGF0aChvcmlnaW5hbF9uYW1lKTsKLQlpZiAoIXJlYWxfcHJvZ3JhbV9uYW1lKQorCXJuLm5hbWUgPSB0b21veW9fcmVhbHBhdGhfbm9mb2xsb3cob3JpZ2luYWxfbmFtZSk7CisJaWYgKCFybi5uYW1lKQogCQlnb3RvIG91dDsKLQkvKiBHZXQgdG9tb3lvX3JlYWxwYXRoIG9mIHN5bWJvbGljIGxpbmsuICovCi0Jc3ltbGlua19wcm9ncmFtX25hbWUgPSB0b21veW9fcmVhbHBhdGhfbm9mb2xsb3cob3JpZ2luYWxfbmFtZSk7Ci0JaWYgKCFzeW1saW5rX3Byb2dyYW1fbmFtZSkKLQkJZ290byBvdXQ7CisJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZybik7CisJbmVlZF9rZnJlZSA9IHRydWU7CiAKLQlyLm5hbWUgPSByZWFsX3Byb2dyYW1fbmFtZTsKLQl0b21veW9fZmlsbF9wYXRoX2luZm8oJnIpOwotCXMubmFtZSA9IHN5bWxpbmtfcHJvZ3JhbV9uYW1lOwotCXRvbW95b19maWxsX3BhdGhfaW5mbygmcyk7Ci0JbC5uYW1lID0gdG9tb3lvX2dldF9sYXN0X25hbWUob2xkX2RvbWFpbik7Ci0JdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZsKTsKLQotCS8qIENoZWNrICdhbGlhcycgZGlyZWN0aXZlLiAqLwotCWlmICh0b21veW9fcGF0aGNtcCgmciwgJnMpKSB7Ci0JCXN0cnVjdCB0b21veW9fYWxpYXNfZW50cnkgKnB0cjsKLQkJLyogSXMgdGhpcyBwcm9ncmFtIGFsbG93ZWQgdG8gYmUgY2FsbGVkIHZpYSBzeW1ib2xpYyBsaW5rcz8gKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmdG9tb3lvX2FsaWFzX2xpc3QsIGxpc3QpIHsKLQkJCWlmIChwdHItPmlzX2RlbGV0ZWQgfHwKLQkJCSAgICB0b21veW9fcGF0aGNtcCgmciwgcHRyLT5vcmlnaW5hbF9uYW1lKSB8fAotCQkJICAgIHRvbW95b19wYXRoY21wKCZzLCBwdHItPmFsaWFzZWRfbmFtZSkpCisJLyogQ2hlY2sgJ2FnZ3JlZ2F0b3InIGRpcmVjdGl2ZS4gKi8KKwl7CisJCXN0cnVjdCB0b21veW9fYWdncmVnYXRvciAqcHRyOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fcG9saWN5X2xpc3QKKwkJCQkJW1RPTU9ZT19JRF9BR0dSRUdBVE9SXSwgaGVhZC5saXN0KSB7CisJCQlpZiAocHRyLT5oZWFkLmlzX2RlbGV0ZWQgfHwKKwkJCSAgICAhdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuKCZybiwKKwkJCQkJCQkgcHRyLT5vcmlnaW5hbF9uYW1lKSkKIAkJCQljb250aW51ZTsKLQkJCW1lbXNldChyZWFsX3Byb2dyYW1fbmFtZSwgMCwgVE9NT1lPX01BWF9QQVRITkFNRV9MRU4pOwotCQkJc3RybmNweShyZWFsX3Byb2dyYW1fbmFtZSwgcHRyLT5hbGlhc2VkX25hbWUtPm5hbWUsCi0JCQkJVE9NT1lPX01BWF9QQVRITkFNRV9MRU4gLSAxKTsKLQkJCXRvbW95b19maWxsX3BhdGhfaW5mbygmcik7CisJCQlrZnJlZShybi5uYW1lKTsKKwkJCW5lZWRfa2ZyZWUgPSBmYWxzZTsKKwkJCS8qIFRoaXMgaXMgT0sgYmVjYXVzZSBpdCBpcyByZWFkIG9ubHkuICovCisJCQlybiA9ICpwdHItPmFnZ3JlZ2F0ZWRfbmFtZTsKIAkJCWJyZWFrOwogCQl9CiAJfQogCiAJLyogQ2hlY2sgZXhlY3V0ZSBwZXJtaXNzaW9uLiAqLwotCXJldHZhbCA9IHRvbW95b19jaGVja19leGVjX3Blcm0ob2xkX2RvbWFpbiwgJnIpOworCXJldHZhbCA9IHRvbW95b19wYXRoX3Blcm1pc3Npb24oJnIsIFRPTU9ZT19UWVBFX0VYRUNVVEUsICZybik7CisJaWYgKHJldHZhbCA9PSBUT01PWU9fUkVUUllfUkVRVUVTVCkKKwkJZ290byByZXRyeTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBvdXQ7CisJLyoKKwkgKiBUbyBiZSBhYmxlIHRvIHNwZWNpZnkgZG9tYWlubmFtZXMgd2l0aCB3aWxkY2FyZHMsIHVzZSB0aGUKKwkgKiBwYXRobmFtZSBzcGVjaWZpZWQgaW4gdGhlIHBvbGljeSAod2hpY2ggbWF5IGNvbnRhaW4KKwkgKiB3aWxkY2FyZCkgcmF0aGVyIHRoYW4gdGhlIHBhdGhuYW1lIHBhc3NlZCB0byBleGVjdmUoKQorCSAqICh3aGljaCBuZXZlciBjb250YWlucyB3aWxkY2FyZCkuCisJICovCisJaWYgKHIucGFyYW0ucGF0aC5tYXRjaGVkX3BhdGgpIHsKKwkJaWYgKG5lZWRfa2ZyZWUpCisJCQlrZnJlZShybi5uYW1lKTsKKwkJbmVlZF9rZnJlZSA9IGZhbHNlOworCQkvKiBUaGlzIGlzIE9LIGJlY2F1c2UgaXQgaXMgcmVhZCBvbmx5LiAqLworCQlybiA9ICpyLnBhcmFtLnBhdGgubWF0Y2hlZF9wYXRoOworCX0KIAotCW5ld19kb21haW5fbmFtZSA9IHRtcC0+YnVmZmVyOwotCWlmICh0b21veW9faXNfZG9tYWluX2luaXRpYWxpemVyKG9sZF9kb21haW4tPmRvbWFpbm5hbWUsICZyLCAmbCkpIHsKKwkvKiBDYWxjdWxhdGUgZG9tYWluIHRvIHRyYW5zaXQgdG8uICovCisJc3dpdGNoICh0b21veW9fdHJhbnNpdGlvbl90eXBlKG9sZF9kb21haW4tPmRvbWFpbm5hbWUsICZybikpIHsKKwljYXNlIFRPTU9ZT19UUkFOU0lUSU9OX0NPTlRST0xfSU5JVElBTElaRToKIAkJLyogVHJhbnNpdCB0byB0aGUgY2hpbGQgb2YgdG9tb3lvX2tlcm5lbF9kb21haW4gZG9tYWluLiAqLwotCQlzbnByaW50ZihuZXdfZG9tYWluX25hbWUsIFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOICsgMSwKLQkJCSBUT01PWU9fUk9PVF9OQU1FICIgIiAiJXMiLCByZWFsX3Byb2dyYW1fbmFtZSk7Ci0JfSBlbHNlIGlmIChvbGRfZG9tYWluID09ICZ0b21veW9fa2VybmVsX2RvbWFpbiAmJgotCQkgICAhdG9tb3lvX3BvbGljeV9sb2FkZWQpIHsKLQkJLyoKLQkJICogTmVlZG4ndCB0byB0cmFuc2l0IGZyb20ga2VybmVsIGRvbWFpbiBiZWZvcmUgc3RhcnRpbmcKLQkJICogL3NiaW4vaW5pdC4gQnV0IHRyYW5zaXQgZnJvbSBrZXJuZWwgZG9tYWluIGlmIGV4ZWN1dGluZwotCQkgKiBpbml0aWFsaXplcnMgYmVjYXVzZSB0aGV5IG1pZ2h0IHN0YXJ0IGJlZm9yZSAvc2Jpbi9pbml0LgotCQkgKi8KLQkJZG9tYWluID0gb2xkX2RvbWFpbjsKLQl9IGVsc2UgaWYgKHRvbW95b19pc19kb21haW5fa2VlcGVyKG9sZF9kb21haW4tPmRvbWFpbm5hbWUsICZyLCAmbCkpIHsKKwkJc25wcmludGYodG1wLCBUT01PWU9fRVhFQ19UTVBTSVpFIC0gMSwgVE9NT1lPX1JPT1RfTkFNRSAiICIKKwkJCSAiJXMiLCBybi5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBUT01PWU9fVFJBTlNJVElPTl9DT05UUk9MX0tFRVA6CiAJCS8qIEtlZXAgY3VycmVudCBkb21haW4uICovCiAJCWRvbWFpbiA9IG9sZF9kb21haW47Ci0JfSBlbHNlIHsKLQkJLyogTm9ybWFsIGRvbWFpbiB0cmFuc2l0aW9uLiAqLwotCQlzbnByaW50ZihuZXdfZG9tYWluX25hbWUsIFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOICsgMSwKLQkJCSAiJXMgJXMiLCBvbGRfZG9tYWluX25hbWUsIHJlYWxfcHJvZ3JhbV9uYW1lKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKG9sZF9kb21haW4gPT0gJnRvbW95b19rZXJuZWxfZG9tYWluICYmCisJCSAgICAhdG9tb3lvX3BvbGljeV9sb2FkZWQpIHsKKwkJCS8qCisJCQkgKiBOZWVkbid0IHRvIHRyYW5zaXQgZnJvbSBrZXJuZWwgZG9tYWluIGJlZm9yZQorCQkJICogc3RhcnRpbmcgL3NiaW4vaW5pdC4gQnV0IHRyYW5zaXQgZnJvbSBrZXJuZWwgZG9tYWluCisJCQkgKiBpZiBleGVjdXRpbmcgaW5pdGlhbGl6ZXJzIGJlY2F1c2UgdGhleSBtaWdodCBzdGFydAorCQkJICogYmVmb3JlIC9zYmluL2luaXQuCisJCQkgKi8KKwkJCWRvbWFpbiA9IG9sZF9kb21haW47CisJCX0gZWxzZSB7CisJCQkvKiBOb3JtYWwgZG9tYWluIHRyYW5zaXRpb24uICovCisJCQlzbnByaW50Zih0bXAsIFRPTU9ZT19FWEVDX1RNUFNJWkUgLSAxLCAiJXMgJXMiLAorCQkJCSBvbGRfZG9tYWluLT5kb21haW5uYW1lLT5uYW1lLCBybi5uYW1lKTsKKwkJfQorCQlicmVhazsKIAl9Ci0JaWYgKGRvbWFpbiB8fCBzdHJsZW4obmV3X2RvbWFpbl9uYW1lKSA+PSBUT01PWU9fTUFYX1BBVEhOQU1FX0xFTikKKwlpZiAoZG9tYWluIHx8IHN0cmxlbih0bXApID49IFRPTU9ZT19FWEVDX1RNUFNJWkUgLSAxMCkKIAkJZ290byBkb25lOwotCWRvbWFpbiA9IHRvbW95b19maW5kX2RvbWFpbihuZXdfZG9tYWluX25hbWUpOworCWRvbWFpbiA9IHRvbW95b19maW5kX2RvbWFpbih0bXApOwogCWlmIChkb21haW4pCiAJCWdvdG8gZG9uZTsKLQlpZiAoaXNfZW5mb3JjZSkKLQkJZ290byBkb25lOwotCWRvbWFpbiA9IHRvbW95b19maW5kX29yX2Fzc2lnbl9uZXdfZG9tYWluKG5ld19kb21haW5fbmFtZSwKLQkJCQkJCSAgb2xkX2RvbWFpbi0+cHJvZmlsZSk7CisJaWYgKGlzX2VuZm9yY2UpIHsKKwkJaW50IGVycm9yID0gdG9tb3lvX3N1cGVydmlzb3IoJnIsICIjIHdhbnRzIHRvIGNyZWF0ZSBkb21haW5cbiIKKwkJCQkJICAgICAgIiVzXG4iLCB0bXApOworCQlpZiAoZXJyb3IgPT0gVE9NT1lPX1JFVFJZX1JFUVVFU1QpCisJCQlnb3RvIHJldHJ5OworCQlpZiAoZXJyb3IgPCAwKQorCQkJZ290byBkb25lOworCX0KKwlkb21haW4gPSB0b21veW9fYXNzaWduX2RvbWFpbih0bXAsIG9sZF9kb21haW4tPnByb2ZpbGUpOwogIGRvbmU6CiAJaWYgKGRvbWFpbikKIAkJZ290byBvdXQ7Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiVE9NT1lPLUVSUk9SOiBEb21haW4gJyVzJyBub3QgZGVmaW5lZC5cbiIsCi0JICAgICAgIG5ld19kb21haW5fbmFtZSk7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiVE9NT1lPLUVSUk9SOiBEb21haW4gJyVzJyBub3QgZGVmaW5lZC5cbiIsIHRtcCk7CiAJaWYgKGlzX2VuZm9yY2UpCiAJCXJldHZhbCA9IC1FUEVSTTsKIAllbHNlCkBAIC03OTgsOCArNTM1LDggQEAKIAkvKiBVcGRhdGUgcmVmZXJlbmNlIGNvdW50IG9uICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4gKi8KIAlhdG9taWNfaW5jKCZkb21haW4tPnVzZXJzKTsKIAlicHJtLT5jcmVkLT5zZWN1cml0eSA9IGRvbWFpbjsKLQlrZnJlZShyZWFsX3Byb2dyYW1fbmFtZSk7Ci0Ja2ZyZWUoc3ltbGlua19wcm9ncmFtX25hbWUpOworCWlmIChuZWVkX2tmcmVlKQorCQlrZnJlZShybi5uYW1lKTsKIAlrZnJlZSh0bXApOwogCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vZmlsZS5jIGIvc2VjdXJpdHkvdG9tb3lvL2ZpbGUuYwppbmRleCAxYzZmODIzLi45ZDMyZjE4IDEwMDY0NAotLS0gYS9zZWN1cml0eS90b21veW8vZmlsZS5jCisrKyBiL3NlY3VyaXR5L3RvbW95by9maWxlLmMKQEAgLTEsNDggKzEsODggQEAKIC8qCiAgKiBzZWN1cml0eS90b21veW8vZmlsZS5jCiAgKgotICogSW1wbGVtZW50YXRpb24gb2YgdGhlIERvbWFpbi1CYXNlZCBNYW5kYXRvcnkgQWNjZXNzIENvbnRyb2wuCisgKiBQYXRobmFtZSByZXN0cmljdGlvbiBmdW5jdGlvbnMuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgIE5UVCBEQVRBIENPUlBPUkFUSU9OCi0gKgotICogVmVyc2lvbjogMi4yLjAgICAyMDA5LzA0LzAxCi0gKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAgIE5UVCBEQVRBIENPUlBPUkFUSU9OCiAgKi8KIAogI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAotLyogS2V5d29yZCBhcnJheSBmb3Igc2luZ2xlIHBhdGggb3BlcmF0aW9ucy4gKi8KLXN0YXRpYyBjb25zdCBjaGFyICp0b21veW9fcGF0aF9rZXl3b3JkW1RPTU9ZT19NQVhfUEFUSF9PUEVSQVRJT05dID0geworLyogS2V5d29yZCBhcnJheSBmb3Igb3BlcmF0aW9ucyB3aXRoIG9uZSBwYXRobmFtZS4gKi8KK2NvbnN0IGNoYXIgKnRvbW95b19wYXRoX2tleXdvcmRbVE9NT1lPX01BWF9QQVRIX09QRVJBVElPTl0gPSB7CiAJW1RPTU9ZT19UWVBFX1JFQURfV1JJVEVdID0gInJlYWQvd3JpdGUiLAogCVtUT01PWU9fVFlQRV9FWEVDVVRFXSAgICA9ICJleGVjdXRlIiwKIAlbVE9NT1lPX1RZUEVfUkVBRF0gICAgICAgPSAicmVhZCIsCiAJW1RPTU9ZT19UWVBFX1dSSVRFXSAgICAgID0gIndyaXRlIiwKLQlbVE9NT1lPX1RZUEVfQ1JFQVRFXSAgICAgPSAiY3JlYXRlIiwKIAlbVE9NT1lPX1RZUEVfVU5MSU5LXSAgICAgPSAidW5saW5rIiwKLQlbVE9NT1lPX1RZUEVfTUtESVJdICAgICAgPSAibWtkaXIiLAogCVtUT01PWU9fVFlQRV9STURJUl0gICAgICA9ICJybWRpciIsCi0JW1RPTU9ZT19UWVBFX01LRklGT10gICAgID0gIm1rZmlmbyIsCi0JW1RPTU9ZT19UWVBFX01LU09DS10gICAgID0gIm1rc29jayIsCi0JW1RPTU9ZT19UWVBFX01LQkxPQ0tdICAgID0gIm1rYmxvY2siLAotCVtUT01PWU9fVFlQRV9NS0NIQVJdICAgICA9ICJta2NoYXIiLAogCVtUT01PWU9fVFlQRV9UUlVOQ0FURV0gICA9ICJ0cnVuY2F0ZSIsCiAJW1RPTU9ZT19UWVBFX1NZTUxJTktdICAgID0gInN5bWxpbmsiLAogCVtUT01PWU9fVFlQRV9SRVdSSVRFXSAgICA9ICJyZXdyaXRlIiwKKwlbVE9NT1lPX1RZUEVfQ0hST09UXSAgICAgPSAiY2hyb290IiwKKwlbVE9NT1lPX1RZUEVfVU1PVU5UXSAgICAgPSAidW5tb3VudCIsCit9OworCisvKiBLZXl3b3JkIGFycmF5IGZvciBvcGVyYXRpb25zIHdpdGggb25lIHBhdGhuYW1lIGFuZCB0aHJlZSBudW1iZXJzLiAqLworY29uc3QgY2hhciAqdG9tb3lvX21rZGV2X2tleXdvcmRbVE9NT1lPX01BWF9NS0RFVl9PUEVSQVRJT05dID0geworCVtUT01PWU9fVFlQRV9NS0JMT0NLXSAgICA9ICJta2Jsb2NrIiwKKwlbVE9NT1lPX1RZUEVfTUtDSEFSXSAgICAgPSAibWtjaGFyIiwKK307CisKKy8qIEtleXdvcmQgYXJyYXkgZm9yIG9wZXJhdGlvbnMgd2l0aCB0d28gcGF0aG5hbWVzLiAqLworY29uc3QgY2hhciAqdG9tb3lvX3BhdGgyX2tleXdvcmRbVE9NT1lPX01BWF9QQVRIMl9PUEVSQVRJT05dID0geworCVtUT01PWU9fVFlQRV9MSU5LXSAgICAgICA9ICJsaW5rIiwKKwlbVE9NT1lPX1RZUEVfUkVOQU1FXSAgICAgPSAicmVuYW1lIiwKKwlbVE9NT1lPX1RZUEVfUElWT1RfUk9PVF0gPSAicGl2b3Rfcm9vdCIsCit9OworCisvKiBLZXl3b3JkIGFycmF5IGZvciBvcGVyYXRpb25zIHdpdGggb25lIHBhdGhuYW1lIGFuZCBvbmUgbnVtYmVyLiAqLworY29uc3QgY2hhciAqdG9tb3lvX3BhdGhfbnVtYmVyX2tleXdvcmRbVE9NT1lPX01BWF9QQVRIX05VTUJFUl9PUEVSQVRJT05dID0geworCVtUT01PWU9fVFlQRV9DUkVBVEVdICAgICA9ICJjcmVhdGUiLAorCVtUT01PWU9fVFlQRV9NS0RJUl0gICAgICA9ICJta2RpciIsCisJW1RPTU9ZT19UWVBFX01LRklGT10gICAgID0gIm1rZmlmbyIsCisJW1RPTU9ZT19UWVBFX01LU09DS10gICAgID0gIm1rc29jayIsCiAJW1RPTU9ZT19UWVBFX0lPQ1RMXSAgICAgID0gImlvY3RsIiwKIAlbVE9NT1lPX1RZUEVfQ0hNT0RdICAgICAgPSAiY2htb2QiLAogCVtUT01PWU9fVFlQRV9DSE9XTl0gICAgICA9ICJjaG93biIsCiAJW1RPTU9ZT19UWVBFX0NIR1JQXSAgICAgID0gImNoZ3JwIiwKLQlbVE9NT1lPX1RZUEVfQ0hST09UXSAgICAgPSAiY2hyb290IiwKLQlbVE9NT1lPX1RZUEVfTU9VTlRdICAgICAgPSAibW91bnQiLAotCVtUT01PWU9fVFlQRV9VTU9VTlRdICAgICA9ICJ1bm1vdW50IiwKIH07CiAKLS8qIEtleXdvcmQgYXJyYXkgZm9yIGRvdWJsZSBwYXRoIG9wZXJhdGlvbnMuICovCi1zdGF0aWMgY29uc3QgY2hhciAqdG9tb3lvX3BhdGgyX2tleXdvcmRbVE9NT1lPX01BWF9QQVRIMl9PUEVSQVRJT05dID0gewotCVtUT01PWU9fVFlQRV9MSU5LXSAgICA9ICJsaW5rIiwKLQlbVE9NT1lPX1RZUEVfUkVOQU1FXSAgPSAicmVuYW1lIiwKLQlbVE9NT1lPX1RZUEVfUElWT1RfUk9PVF0gPSAicGl2b3Rfcm9vdCIsCitzdGF0aWMgY29uc3QgdTggdG9tb3lvX3AybWFjW1RPTU9ZT19NQVhfUEFUSF9PUEVSQVRJT05dID0geworCVtUT01PWU9fVFlQRV9SRUFEX1dSSVRFXSA9IFRPTU9ZT19NQUNfRklMRV9PUEVOLAorCVtUT01PWU9fVFlQRV9FWEVDVVRFXSAgICA9IFRPTU9ZT19NQUNfRklMRV9FWEVDVVRFLAorCVtUT01PWU9fVFlQRV9SRUFEXSAgICAgICA9IFRPTU9ZT19NQUNfRklMRV9PUEVOLAorCVtUT01PWU9fVFlQRV9XUklURV0gICAgICA9IFRPTU9ZT19NQUNfRklMRV9PUEVOLAorCVtUT01PWU9fVFlQRV9VTkxJTktdICAgICA9IFRPTU9ZT19NQUNfRklMRV9VTkxJTkssCisJW1RPTU9ZT19UWVBFX1JNRElSXSAgICAgID0gVE9NT1lPX01BQ19GSUxFX1JNRElSLAorCVtUT01PWU9fVFlQRV9UUlVOQ0FURV0gICA9IFRPTU9ZT19NQUNfRklMRV9UUlVOQ0FURSwKKwlbVE9NT1lPX1RZUEVfU1lNTElOS10gICAgPSBUT01PWU9fTUFDX0ZJTEVfU1lNTElOSywKKwlbVE9NT1lPX1RZUEVfUkVXUklURV0gICAgPSBUT01PWU9fTUFDX0ZJTEVfUkVXUklURSwKKwlbVE9NT1lPX1RZUEVfQ0hST09UXSAgICAgPSBUT01PWU9fTUFDX0ZJTEVfQ0hST09ULAorCVtUT01PWU9fVFlQRV9VTU9VTlRdICAgICA9IFRPTU9ZT19NQUNfRklMRV9VTU9VTlQsCit9OworCitzdGF0aWMgY29uc3QgdTggdG9tb3lvX3Bubm4ybWFjW1RPTU9ZT19NQVhfTUtERVZfT1BFUkFUSU9OXSA9IHsKKwlbVE9NT1lPX1RZUEVfTUtCTE9DS10gPSBUT01PWU9fTUFDX0ZJTEVfTUtCTE9DSywKKwlbVE9NT1lPX1RZUEVfTUtDSEFSXSAgPSBUT01PWU9fTUFDX0ZJTEVfTUtDSEFSLAorfTsKKworc3RhdGljIGNvbnN0IHU4IHRvbW95b19wcDJtYWNbVE9NT1lPX01BWF9QQVRIMl9PUEVSQVRJT05dID0geworCVtUT01PWU9fVFlQRV9MSU5LXSAgICAgICA9IFRPTU9ZT19NQUNfRklMRV9MSU5LLAorCVtUT01PWU9fVFlQRV9SRU5BTUVdICAgICA9IFRPTU9ZT19NQUNfRklMRV9SRU5BTUUsCisJW1RPTU9ZT19UWVBFX1BJVk9UX1JPT1RdID0gVE9NT1lPX01BQ19GSUxFX1BJVk9UX1JPT1QsCit9OworCitzdGF0aWMgY29uc3QgdTggdG9tb3lvX3BuMm1hY1tUT01PWU9fTUFYX1BBVEhfTlVNQkVSX09QRVJBVElPTl0gPSB7CisJW1RPTU9ZT19UWVBFX0NSRUFURV0gPSBUT01PWU9fTUFDX0ZJTEVfQ1JFQVRFLAorCVtUT01PWU9fVFlQRV9NS0RJUl0gID0gVE9NT1lPX01BQ19GSUxFX01LRElSLAorCVtUT01PWU9fVFlQRV9NS0ZJRk9dID0gVE9NT1lPX01BQ19GSUxFX01LRklGTywKKwlbVE9NT1lPX1RZUEVfTUtTT0NLXSA9IFRPTU9ZT19NQUNfRklMRV9NS1NPQ0ssCisJW1RPTU9ZT19UWVBFX0lPQ1RMXSAgPSBUT01PWU9fTUFDX0ZJTEVfSU9DVEwsCisJW1RPTU9ZT19UWVBFX0NITU9EXSAgPSBUT01PWU9fTUFDX0ZJTEVfQ0hNT0QsCisJW1RPTU9ZT19UWVBFX0NIT1dOXSAgPSBUT01PWU9fTUFDX0ZJTEVfQ0hPV04sCisJW1RPTU9ZT19UWVBFX0NIR1JQXSAgPSBUT01PWU9fTUFDX0ZJTEVfQ0hHUlAsCiB9OwogCiB2b2lkIHRvbW95b19wdXRfbmFtZV91bmlvbihzdHJ1Y3QgdG9tb3lvX25hbWVfdW5pb24gKnB0cikKQEAgLTUwLDU2ICs5MCw0NSBAQAogCWlmICghcHRyKQogCQlyZXR1cm47CiAJaWYgKHB0ci0+aXNfZ3JvdXApCi0JCXRvbW95b19wdXRfcGF0aF9ncm91cChwdHItPmdyb3VwKTsKKwkJdG9tb3lvX3B1dF9ncm91cChwdHItPmdyb3VwKTsKIAllbHNlCiAJCXRvbW95b19wdXRfbmFtZShwdHItPmZpbGVuYW1lKTsKIH0KIAotYm9vbCB0b21veW9fY29tcGFyZV9uYW1lX3VuaW9uKGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpuYW1lLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCB0b21veW9fbmFtZV91bmlvbiAqcHRyKQorY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKgordG9tb3lvX2NvbXBhcmVfbmFtZV91bmlvbihjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqbmFtZSwKKwkJCSAgY29uc3Qgc3RydWN0IHRvbW95b19uYW1lX3VuaW9uICpwdHIpCiB7CiAJaWYgKHB0ci0+aXNfZ3JvdXApCi0JCXJldHVybiB0b21veW9fcGF0aF9tYXRjaGVzX2dyb3VwKG5hbWUsIHB0ci0+Z3JvdXAsIDEpOwotCXJldHVybiB0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4obmFtZSwgcHRyLT5maWxlbmFtZSk7CisJCXJldHVybiB0b21veW9fcGF0aF9tYXRjaGVzX2dyb3VwKG5hbWUsIHB0ci0+Z3JvdXApOworCWlmICh0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4obmFtZSwgcHRyLT5maWxlbmFtZSkpCisJCXJldHVybiBwdHItPmZpbGVuYW1lOworCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgYm9vbCB0b21veW9fY29tcGFyZV9uYW1lX3VuaW9uX3BhdHRlcm4oY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8KLQkJCQkJICAgICAgKm5hbWUsCi0JCQkJCSAgICAgIGNvbnN0IHN0cnVjdCB0b21veW9fbmFtZV91bmlvbgotCQkJCQkgICAgICAqcHRyLCBjb25zdCBib29sIG1heV91c2VfcGF0dGVybikKK3ZvaWQgdG9tb3lvX3B1dF9udW1iZXJfdW5pb24oc3RydWN0IHRvbW95b19udW1iZXJfdW5pb24gKnB0cikKK3sKKwlpZiAocHRyICYmIHB0ci0+aXNfZ3JvdXApCisJCXRvbW95b19wdXRfZ3JvdXAocHRyLT5ncm91cCk7Cit9CisKK2Jvb2wgdG9tb3lvX2NvbXBhcmVfbnVtYmVyX3VuaW9uKGNvbnN0IHVuc2lnbmVkIGxvbmcgdmFsdWUsCisJCQkJIGNvbnN0IHN0cnVjdCB0b21veW9fbnVtYmVyX3VuaW9uICpwdHIpCiB7CiAJaWYgKHB0ci0+aXNfZ3JvdXApCi0JCXJldHVybiB0b21veW9fcGF0aF9tYXRjaGVzX2dyb3VwKG5hbWUsIHB0ci0+Z3JvdXAsCi0JCQkJCQkgbWF5X3VzZV9wYXR0ZXJuKTsKLQlpZiAobWF5X3VzZV9wYXR0ZXJuIHx8ICFwdHItPmZpbGVuYW1lLT5pc19wYXR0ZXJuZWQpCi0JCXJldHVybiB0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4obmFtZSwgcHRyLT5maWxlbmFtZSk7Ci0JcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gdG9tb3lvX251bWJlcl9tYXRjaGVzX2dyb3VwKHZhbHVlLCB2YWx1ZSwgcHRyLT5ncm91cCk7CisJcmV0dXJuIHZhbHVlID49IHB0ci0+dmFsdWVzWzBdICYmIHZhbHVlIDw9IHB0ci0+dmFsdWVzWzFdOwogfQogCi0vKioKLSAqIHRvbW95b19wYXRoMmtleXdvcmQgLSBHZXQgdGhlIG5hbWUgb2Ygc2luZ2xlIHBhdGggb3BlcmF0aW9uLgotICoKLSAqIEBvcGVyYXRpb246IFR5cGUgb2Ygb3BlcmF0aW9uLgotICoKLSAqIFJldHVybnMgdGhlIG5hbWUgb2Ygc2luZ2xlIHBhdGggb3BlcmF0aW9uLgotICovCi1jb25zdCBjaGFyICp0b21veW9fcGF0aDJrZXl3b3JkKGNvbnN0IHU4IG9wZXJhdGlvbikKK3N0YXRpYyB2b2lkIHRvbW95b19hZGRfc2xhc2goc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmJ1ZikKIHsKLQlyZXR1cm4gKG9wZXJhdGlvbiA8IFRPTU9ZT19NQVhfUEFUSF9PUEVSQVRJT04pCi0JCT8gdG9tb3lvX3BhdGhfa2V5d29yZFtvcGVyYXRpb25dIDogTlVMTDsKLX0KLQotLyoqCi0gKiB0b21veW9fcGF0aDIya2V5d29yZCAtIEdldCB0aGUgbmFtZSBvZiBkb3VibGUgcGF0aCBvcGVyYXRpb24uCi0gKgotICogQG9wZXJhdGlvbjogVHlwZSBvZiBvcGVyYXRpb24uCi0gKgotICogUmV0dXJucyB0aGUgbmFtZSBvZiBkb3VibGUgcGF0aCBvcGVyYXRpb24uCi0gKi8KLWNvbnN0IGNoYXIgKnRvbW95b19wYXRoMjJrZXl3b3JkKGNvbnN0IHU4IG9wZXJhdGlvbikKLXsKLQlyZXR1cm4gKG9wZXJhdGlvbiA8IFRPTU9ZT19NQVhfUEFUSDJfT1BFUkFUSU9OKQotCQk/IHRvbW95b19wYXRoMl9rZXl3b3JkW29wZXJhdGlvbl0gOiBOVUxMOworCWlmIChidWYtPmlzX2RpcikKKwkJcmV0dXJuOworCS8qCisJICogVGhpcyBpcyBPSyBiZWNhdXNlIHRvbW95b19lbmNvZGUoKSByZXNlcnZlcyBzcGFjZSBmb3IgYXBwZW5kaW5nICIvIi4KKwkgKi8KKwlzdHJjYXQoKGNoYXIgKikgYnVmLT5uYW1lLCAiLyIpOworCXRvbW95b19maWxsX3BhdGhfaW5mbyhidWYpOwogfQogCiAvKioKQEAgLTEyMSw2OSArMTUwLDEzNCBAQAogfQogCiAvKioKLSAqIHRvbW95b19nZXRfcGF0aCAtIEdldCByZWFscGF0aC4KKyAqIHRvbW95b19nZXRfcmVhbHBhdGggLSBHZXQgcmVhbHBhdGguCiAgKgorICogQGJ1ZjogIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fcGF0aF9pbmZvIi4KICAqIEBwYXRoOiBQb2ludGVyIHRvICJzdHJ1Y3QgcGF0aCIuCiAgKgotICogUmV0dXJucyBwb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyIgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgogICovCi1zdGF0aWMgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnRvbW95b19nZXRfcGF0aChzdHJ1Y3QgcGF0aCAqcGF0aCkKK3N0YXRpYyBib29sIHRvbW95b19nZXRfcmVhbHBhdGgoc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmJ1Ziwgc3RydWN0IHBhdGggKnBhdGgpCiB7Ci0JaW50IGVycm9yOwotCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvX3dpdGhfZGF0YSAqYnVmID0ga3phbGxvYyhzaXplb2YoKmJ1ZiksCi0JCQkJCQkJIEdGUF9OT0ZTKTsKLQotCWlmICghYnVmKQotCQlyZXR1cm4gTlVMTDsKLQkvKiBSZXNlcnZlIG9uZSBieXRlIGZvciBhcHBlbmRpbmcgIi8iLiAqLwotCWVycm9yID0gdG9tb3lvX3JlYWxwYXRoX2Zyb21fcGF0aDIocGF0aCwgYnVmLT5ib2R5LAotCQkJCQkgICBzaXplb2YoYnVmLT5ib2R5KSAtIDIpOwotCWlmICghZXJyb3IpIHsKLQkJYnVmLT5oZWFkLm5hbWUgPSBidWYtPmJvZHk7Ci0JCXRvbW95b19maWxsX3BhdGhfaW5mbygmYnVmLT5oZWFkKTsKLQkJcmV0dXJuICZidWYtPmhlYWQ7CisJYnVmLT5uYW1lID0gdG9tb3lvX3JlYWxwYXRoX2Zyb21fcGF0aChwYXRoKTsKKwlpZiAoYnVmLT5uYW1lKSB7CisJCXRvbW95b19maWxsX3BhdGhfaW5mbyhidWYpOworCQlyZXR1cm4gdHJ1ZTsKIAl9Ci0Ja2ZyZWUoYnVmKTsKLQlyZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW50IHRvbW95b191cGRhdGVfcGF0aDJfYWNsKGNvbnN0IHU4IHR5cGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lMSwKLQkJCQkgICBjb25zdCBjaGFyICpmaWxlbmFtZTIsCi0JCQkJICAgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqY29uc3QgZG9tYWluLAotCQkJCSAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKTsKLXN0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9wYXRoX2FjbChjb25zdCB1OCB0eXBlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKLQkJCQkgIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmNvbnN0IGRvbWFpbiwKLQkJCQkgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKTsKLQotLyoKLSAqIHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0IGlzIHVzZWQgZm9yIGhvbGRpbmcgbGlzdCBvZiBwYXRobmFtZXMgd2hpY2gKLSAqIGFyZSBieSBkZWZhdWx0IGFsbG93ZWQgdG8gYmUgb3BlbigpZWQgZm9yIHJlYWRpbmcgYnkgYW55IHByb2Nlc3MuCisvKioKKyAqIHRvbW95b19hdWRpdF9wYXRoX2xvZyAtIEF1ZGl0IHBhdGggcmVxdWVzdCBsb2cuCiAgKgotICogQW4gZW50cnkgaXMgYWRkZWQgYnkKKyAqIEByOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX3JlcXVlc3RfaW5mbyIuCiAgKgotICogIyBlY2hvICdhbGxvd19yZWFkIC9saWIvbGliYy0yLjUuc28nID4gXAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL2V4Y2VwdGlvbl9wb2xpY3kKLSAqCi0gKiBhbmQgaXMgZGVsZXRlZCBieQotICoKLSAqICMgZWNobyAnZGVsZXRlIGFsbG93X3JlYWQgL2xpYi9saWJjLTIuNS5zbycgPiBcCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vZXhjZXB0aW9uX3BvbGljeQotICoKLSAqIGFuZCBhbGwgZW50cmllcyBhcmUgcmV0cmlldmVkIGJ5Ci0gKgotICogIyBncmVwIF5hbGxvd19yZWFkIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9leGNlcHRpb25fcG9saWN5Ci0gKgotICogSW4gdGhlIGV4YW1wbGUgYWJvdmUsIGFueSBwcm9jZXNzIGlzIGFsbG93ZWQgdG8KLSAqIG9wZW4oIi9saWIvbGliYy0yLjUuc28iLCBPX1JET05MWSkuCi0gKiBPbmUgZXhjZXB0aW9uIGlzLCBpZiB0aGUgZG9tYWluIHdoaWNoIGN1cnJlbnQgcHJvY2VzcyBiZWxvbmdzIHRvIGlzIG1hcmtlZAotICogYXMgImlnbm9yZV9nbG9iYWxfYWxsb3dfcmVhZCIsIGN1cnJlbnQgcHJvY2VzcyBjYW4ndCBkbyBzbyB1bmxlc3MgZXhwbGljaXRseQotICogZ2l2ZW4gImFsbG93X3JlYWQgL2xpYi9saWJjLTIuNS5zbyIgdG8gdGhlIGRvbWFpbiB3aGljaCBjdXJyZW50IHByb2Nlc3MKLSAqIGJlbG9uZ3MgdG8uCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgogICovCi1MSVNUX0hFQUQodG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3QpOworc3RhdGljIGludCB0b21veW9fYXVkaXRfcGF0aF9sb2coc3RydWN0IHRvbW95b19yZXF1ZXN0X2luZm8gKnIpCit7CisJY29uc3QgY2hhciAqb3BlcmF0aW9uID0gdG9tb3lvX3BhdGhfa2V5d29yZFtyLT5wYXJhbS5wYXRoLm9wZXJhdGlvbl07CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lID0gci0+cGFyYW0ucGF0aC5maWxlbmFtZTsKKwlpZiAoci0+Z3JhbnRlZCkKKwkJcmV0dXJuIDA7CisJdG9tb3lvX3dhcm5fbG9nKHIsICIlcyAlcyIsIG9wZXJhdGlvbiwgZmlsZW5hbWUtPm5hbWUpOworCXJldHVybiB0b21veW9fc3VwZXJ2aXNvcihyLCAiYWxsb3dfJXMgJXNcbiIsIG9wZXJhdGlvbiwKKwkJCQkgdG9tb3lvX3BhdHRlcm4oZmlsZW5hbWUpKTsKK30KIAogLyoqCi0gKiB0b21veW9fdXBkYXRlX2dsb2JhbGx5X3JlYWRhYmxlX2VudHJ5IC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkiIGxpc3QuCisgKiB0b21veW9fYXVkaXRfcGF0aDJfbG9nIC0gQXVkaXQgcGF0aC9wYXRoIHJlcXVlc3QgbG9nLgorICoKKyAqIEByOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX3JlcXVlc3RfaW5mbyIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fYXVkaXRfcGF0aDJfbG9nKHN0cnVjdCB0b21veW9fcmVxdWVzdF9pbmZvICpyKQoreworCWNvbnN0IGNoYXIgKm9wZXJhdGlvbiA9IHRvbW95b19wYXRoMl9rZXl3b3JkW3ItPnBhcmFtLnBhdGgyLm9wZXJhdGlvbl07CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lMSA9IHItPnBhcmFtLnBhdGgyLmZpbGVuYW1lMTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUyID0gci0+cGFyYW0ucGF0aDIuZmlsZW5hbWUyOworCWlmIChyLT5ncmFudGVkKQorCQlyZXR1cm4gMDsKKwl0b21veW9fd2Fybl9sb2cociwgIiVzICVzICVzIiwgb3BlcmF0aW9uLCBmaWxlbmFtZTEtPm5hbWUsCisJCQlmaWxlbmFtZTItPm5hbWUpOworCXJldHVybiB0b21veW9fc3VwZXJ2aXNvcihyLCAiYWxsb3dfJXMgJXMgJXNcbiIsIG9wZXJhdGlvbiwKKwkJCQkgdG9tb3lvX3BhdHRlcm4oZmlsZW5hbWUxKSwKKwkJCQkgdG9tb3lvX3BhdHRlcm4oZmlsZW5hbWUyKSk7Cit9CisKKy8qKgorICogdG9tb3lvX2F1ZGl0X21rZGV2X2xvZyAtIEF1ZGl0IHBhdGgvbnVtYmVyL251bWJlci9udW1iZXIgcmVxdWVzdCBsb2cuCisgKgorICogQHI6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fcmVxdWVzdF9pbmZvIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19hdWRpdF9ta2Rldl9sb2coc3RydWN0IHRvbW95b19yZXF1ZXN0X2luZm8gKnIpCit7CisJY29uc3QgY2hhciAqb3BlcmF0aW9uID0gdG9tb3lvX21rZGV2X2tleXdvcmRbci0+cGFyYW0ubWtkZXYub3BlcmF0aW9uXTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUgPSByLT5wYXJhbS5ta2Rldi5maWxlbmFtZTsKKwljb25zdCB1bnNpZ25lZCBpbnQgbWFqb3IgPSByLT5wYXJhbS5ta2Rldi5tYWpvcjsKKwljb25zdCB1bnNpZ25lZCBpbnQgbWlub3IgPSByLT5wYXJhbS5ta2Rldi5taW5vcjsKKwljb25zdCB1bnNpZ25lZCBpbnQgbW9kZSA9IHItPnBhcmFtLm1rZGV2Lm1vZGU7CisJaWYgKHItPmdyYW50ZWQpCisJCXJldHVybiAwOworCXRvbW95b193YXJuX2xvZyhyLCAiJXMgJXMgMCVvICV1ICV1Iiwgb3BlcmF0aW9uLCBmaWxlbmFtZS0+bmFtZSwgbW9kZSwKKwkJCW1ham9yLCBtaW5vcik7CisJcmV0dXJuIHRvbW95b19zdXBlcnZpc29yKHIsICJhbGxvd18lcyAlcyAwJW8gJXUgJXVcbiIsIG9wZXJhdGlvbiwKKwkJCQkgdG9tb3lvX3BhdHRlcm4oZmlsZW5hbWUpLCBtb2RlLCBtYWpvciwgbWlub3IpOworfQorCisvKioKKyAqIHRvbW95b19hdWRpdF9wYXRoX251bWJlcl9sb2cgLSBBdWRpdCBwYXRoL251bWJlciByZXF1ZXN0IGxvZy4KKyAqCisgKiBAcjogICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fcmVxdWVzdF9pbmZvIi4KKyAqIEBlcnJvcjogRXJyb3IgY29kZS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19hdWRpdF9wYXRoX251bWJlcl9sb2coc3RydWN0IHRvbW95b19yZXF1ZXN0X2luZm8gKnIpCit7CisJY29uc3QgdTggdHlwZSA9IHItPnBhcmFtLnBhdGhfbnVtYmVyLm9wZXJhdGlvbjsKKwl1OCByYWRpeDsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUgPSByLT5wYXJhbS5wYXRoX251bWJlci5maWxlbmFtZTsKKwljb25zdCBjaGFyICpvcGVyYXRpb24gPSB0b21veW9fcGF0aF9udW1iZXJfa2V5d29yZFt0eXBlXTsKKwljaGFyIGJ1ZmZlcls2NF07CisJaWYgKHItPmdyYW50ZWQpCisJCXJldHVybiAwOworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgVE9NT1lPX1RZUEVfQ1JFQVRFOgorCWNhc2UgVE9NT1lPX1RZUEVfTUtESVI6CisJY2FzZSBUT01PWU9fVFlQRV9NS0ZJRk86CisJY2FzZSBUT01PWU9fVFlQRV9NS1NPQ0s6CisJY2FzZSBUT01PWU9fVFlQRV9DSE1PRDoKKwkJcmFkaXggPSBUT01PWU9fVkFMVUVfVFlQRV9PQ1RBTDsKKwkJYnJlYWs7CisJY2FzZSBUT01PWU9fVFlQRV9JT0NUTDoKKwkJcmFkaXggPSBUT01PWU9fVkFMVUVfVFlQRV9IRVhBREVDSU1BTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmFkaXggPSBUT01PWU9fVkFMVUVfVFlQRV9ERUNJTUFMOworCQlicmVhazsKKwl9CisJdG9tb3lvX3ByaW50X3Vsb25nKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIHItPnBhcmFtLnBhdGhfbnVtYmVyLm51bWJlciwKKwkJCSAgIHJhZGl4KTsKKwl0b21veW9fd2Fybl9sb2cociwgIiVzICVzICVzIiwgb3BlcmF0aW9uLCBmaWxlbmFtZS0+bmFtZSwgYnVmZmVyKTsKKwlyZXR1cm4gdG9tb3lvX3N1cGVydmlzb3IociwgImFsbG93XyVzICVzICVzXG4iLCBvcGVyYXRpb24sCisJCQkJIHRvbW95b19wYXR0ZXJuKGZpbGVuYW1lKSwgYnVmZmVyKTsKK30KKworc3RhdGljIGJvb2wgdG9tb3lvX3NhbWVfZ2xvYmFsbHlfcmVhZGFibGUoY29uc3Qgc3RydWN0IHRvbW95b19hY2xfaGVhZCAqYSwKKwkJCQkJICBjb25zdCBzdHJ1Y3QgdG9tb3lvX2FjbF9oZWFkICpiKQoreworCXJldHVybiBjb250YWluZXJfb2YoYSwgc3RydWN0IHRvbW95b19yZWFkYWJsZV9maWxlLAorCQkJICAgIGhlYWQpLT5maWxlbmFtZSA9PQorCQljb250YWluZXJfb2YoYiwgc3RydWN0IHRvbW95b19yZWFkYWJsZV9maWxlLAorCQkJICAgICBoZWFkKS0+ZmlsZW5hbWU7Cit9CisKKy8qKgorICogdG9tb3lvX3VwZGF0ZV9nbG9iYWxseV9yZWFkYWJsZV9lbnRyeSAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19yZWFkYWJsZV9maWxlIiBsaXN0LgogICoKICAqIEBmaWxlbmFtZTogIEZpbGVuYW1lIHVuY29uZGl0aW9uYWxseSBwZXJtaXR0ZWQgdG8gb3BlbigpIGZvciByZWFkaW5nLgogICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgpAQCAtMTk1LDQxICsyODksMjQgQEAKIHN0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9nbG9iYWxseV9yZWFkYWJsZV9lbnRyeShjb25zdCBjaGFyICpmaWxlbmFtZSwKIAkJCQkJCSBjb25zdCBib29sIGlzX2RlbGV0ZSkKIHsKLQlzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkgKnB0cjsKLQlzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkgZSA9IHsgfTsKLQlpbnQgZXJyb3IgPSBpc19kZWxldGUgPyAtRU5PRU5UIDogLUVOT01FTTsKKwlzdHJ1Y3QgdG9tb3lvX3JlYWRhYmxlX2ZpbGUgZSA9IHsgfTsKKwlpbnQgZXJyb3I7CiAKLQlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgoZmlsZW5hbWUsIDEsIDAsIC0xKSkKKwlpZiAoIXRvbW95b19jb3JyZWN0X3dvcmQoZmlsZW5hbWUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAllLmZpbGVuYW1lID0gdG9tb3lvX2dldF9uYW1lKGZpbGVuYW1lKTsKIAlpZiAoIWUuZmlsZW5hbWUpCiAJCXJldHVybiAtRU5PTUVNOwotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnRvbW95b19wb2xpY3lfbG9jaykpCi0JCWdvdG8gb3V0OwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0LCBsaXN0KSB7Ci0JCWlmIChwdHItPmZpbGVuYW1lICE9IGUuZmlsZW5hbWUpCi0JCQljb250aW51ZTsKLQkJcHRyLT5pc19kZWxldGVkID0gaXNfZGVsZXRlOwotCQllcnJvciA9IDA7Ci0JCWJyZWFrOwotCX0KLQlpZiAoIWlzX2RlbGV0ZSAmJiBlcnJvcikgewotCQlzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkgKmVudHJ5ID0KLQkJCXRvbW95b19jb21taXRfb2soJmUsIHNpemVvZihlKSk7Ci0JCWlmIChlbnRyeSkgewotCQkJbGlzdF9hZGRfdGFpbF9yY3UoJmVudHJ5LT5saXN0LAotCQkJCQkgICZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdCk7Ci0JCQllcnJvciA9IDA7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZ0b21veW9fcG9saWN5X2xvY2spOwotIG91dDoKKwllcnJvciA9IHRvbW95b191cGRhdGVfcG9saWN5KCZlLmhlYWQsIHNpemVvZihlKSwgaXNfZGVsZXRlLAorCQkJCSAgICAgJnRvbW95b19wb2xpY3lfbGlzdAorCQkJCSAgICAgW1RPTU9ZT19JRF9HTE9CQUxMWV9SRUFEQUJMRV0sCisJCQkJICAgICB0b21veW9fc2FtZV9nbG9iYWxseV9yZWFkYWJsZSk7CiAJdG9tb3lvX3B1dF9uYW1lKGUuZmlsZW5hbWUpOwogCXJldHVybiBlcnJvcjsKIH0KIAogLyoqCi0gKiB0b21veW9faXNfZ2xvYmFsbHlfcmVhZGFibGVfZmlsZSAtIENoZWNrIGlmIHRoZSBmaWxlIGlzIHVuY29uZGl0aW9ubmFseSBwZXJtaXR0ZWQgdG8gYmUgb3BlbigpZWQgZm9yIHJlYWRpbmcuCisgKiB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZSAtIENoZWNrIGlmIHRoZSBmaWxlIGlzIHVuY29uZGl0aW9ubmFseSBwZXJtaXR0ZWQgdG8gYmUgb3BlbigpZWQgZm9yIHJlYWRpbmcuCiAgKgogICogQGZpbGVuYW1lOiBUaGUgZmlsZW5hbWUgdG8gY2hlY2suCiAgKgpAQCAtMjM3LDE0ICszMTQsMTUgQEAKICAqCiAgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCi1zdGF0aWMgYm9vbCB0b21veW9faXNfZ2xvYmFsbHlfcmVhZGFibGVfZmlsZShjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqCitzdGF0aWMgYm9vbCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZShjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqCiAJCQkJCSAgICAgZmlsZW5hbWUpCiB7Ci0Jc3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5ICpwdHI7CisJc3RydWN0IHRvbW95b19yZWFkYWJsZV9maWxlICpwdHI7CiAJYm9vbCBmb3VuZCA9IGZhbHNlOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3QsIGxpc3QpIHsKLQkJaWYgKCFwdHItPmlzX2RlbGV0ZWQgJiYKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fcG9saWN5X2xpc3QKKwkJCQlbVE9NT1lPX0lEX0dMT0JBTExZX1JFQURBQkxFXSwgaGVhZC5saXN0KSB7CisJCWlmICghcHRyLT5oZWFkLmlzX2RlbGV0ZWQgJiYKIAkJICAgIHRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybihmaWxlbmFtZSwgcHRyLT5maWxlbmFtZSkpIHsKIAkJCWZvdW5kID0gdHJ1ZTsKIAkJCWJyZWFrOwpAQCAtMjU0LDcgKzMzMiw3IEBACiB9CiAKIC8qKgotICogdG9tb3lvX3dyaXRlX2dsb2JhbGx5X3JlYWRhYmxlX3BvbGljeSAtIFdyaXRlICJzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkiIGxpc3QuCisgKiB0b21veW9fd3JpdGVfZ2xvYmFsbHlfcmVhZGFibGUgLSBXcml0ZSAic3RydWN0IHRvbW95b19yZWFkYWJsZV9maWxlIiBsaXN0LgogICoKICAqIEBkYXRhOiAgICAgIFN0cmluZyB0byBwYXJzZS4KICAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KQEAgLTI2Myw3NCArMzQxLDIwIEBACiAgKgogICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwotaW50IHRvbW95b193cml0ZV9nbG9iYWxseV9yZWFkYWJsZV9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19kZWxldGUpCitpbnQgdG9tb3lvX3dyaXRlX2dsb2JhbGx5X3JlYWRhYmxlKGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQogewogCXJldHVybiB0b21veW9fdXBkYXRlX2dsb2JhbGx5X3JlYWRhYmxlX2VudHJ5KGRhdGEsIGlzX2RlbGV0ZSk7CiB9CiAKLS8qKgotICogdG9tb3lvX3JlYWRfZ2xvYmFsbHlfcmVhZGFibGVfcG9saWN5IC0gUmVhZCAic3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5IiBsaXN0LgotICoKLSAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCi0gKgotICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KLSAqCi0gKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgotICovCi1ib29sIHRvbW95b19yZWFkX2dsb2JhbGx5X3JlYWRhYmxlX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3N0YXRpYyBib29sIHRvbW95b19zYW1lX3BhdHRlcm4oY29uc3Qgc3RydWN0IHRvbW95b19hY2xfaGVhZCAqYSwKKwkJCQljb25zdCBzdHJ1Y3QgdG9tb3lvX2FjbF9oZWFkICpiKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKLQlib29sIGRvbmUgPSB0cnVlOwotCi0JbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBoZWFkLT5yZWFkX3ZhcjIsCi0JCQkgICAgICZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdCkgewotCQlzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkgKnB0cjsKLQkJcHRyID0gbGlzdF9lbnRyeShwb3MsCi0JCQkJIHN0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSwKLQkJCQkgbGlzdCk7Ci0JCWlmIChwdHItPmlzX2RlbGV0ZWQpCi0JCQljb250aW51ZTsKLQkJZG9uZSA9IHRvbW95b19pb19wcmludGYoaGVhZCwgVE9NT1lPX0tFWVdPUkRfQUxMT1dfUkVBRCAiJXNcbiIsCi0JCQkJCXB0ci0+ZmlsZW5hbWUtPm5hbWUpOwotCQlpZiAoIWRvbmUpCi0JCQlicmVhazsKLQl9Ci0JcmV0dXJuIGRvbmU7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihhLCBzdHJ1Y3QgdG9tb3lvX25vX3BhdHRlcm4sIGhlYWQpLT5wYXR0ZXJuID09CisJCWNvbnRhaW5lcl9vZihiLCBzdHJ1Y3QgdG9tb3lvX25vX3BhdHRlcm4sIGhlYWQpLT5wYXR0ZXJuOwogfQogCi0vKiB0b21veW9fcGF0dGVybl9saXN0IGlzIHVzZWQgZm9yIGhvbGRpbmcgbGlzdCBvZiBwYXRobmFtZXMgd2hpY2ggYXJlIHVzZWQgZm9yCi0gKiBjb252ZXJ0aW5nIHBhdGhuYW1lcyB0byBwYXRobmFtZSBwYXR0ZXJucyBkdXJpbmcgbGVhcm5pbmcgbW9kZS4KLSAqCi0gKiBBbiBlbnRyeSBpcyBhZGRlZCBieQotICoKLSAqICMgZWNobyAnZmlsZV9wYXR0ZXJuIC9wcm9jL1wkL21vdW50cycgPiBcCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL2V4Y2VwdGlvbl9wb2xpY3kKLSAqCi0gKiBhbmQgaXMgZGVsZXRlZCBieQotICoKLSAqICMgZWNobyAnZGVsZXRlIGZpbGVfcGF0dGVybiAvcHJvYy9cJC9tb3VudHMnID4gXAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9leGNlcHRpb25fcG9saWN5Ci0gKgotICogYW5kIGFsbCBlbnRyaWVzIGFyZSByZXRyaWV2ZWQgYnkKLSAqCi0gKiAjIGdyZXAgXmZpbGVfcGF0dGVybiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vZXhjZXB0aW9uX3BvbGljeQotICoKLSAqIEluIHRoZSBleGFtcGxlIGFib3ZlLCBpZiBhIHByb2Nlc3Mgd2hpY2ggYmVsb25ncyB0byBhIGRvbWFpbiB3aGljaCBpcyBpbgotICogbGVhcm5pbmcgbW9kZSByZXF1ZXN0ZWQgb3BlbigiL3Byb2MvMS9tb3VudHMiLCBPX1JET05MWSksCi0gKiAiYWxsb3dfcmVhZCAvcHJvYy9cJC9tb3VudHMiIGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gdGhlIGRvbWFpbiB3aGljaCB0aGF0Ci0gKiBwcm9jZXNzIGJlbG9uZ3MgdG8uCi0gKgotICogSXQgaXMgbm90IGEgZGVzaXJhYmxlIGJlaGF2aW9yIHRoYXQgd2UgaGF2ZSB0byB1c2UgL3Byb2MvXCQvIGluc3RlYWQgb2YKLSAqIC9wcm9jL3NlbGYvIHdoZW4gY3VycmVudCBwcm9jZXNzIG5lZWRzIHRvIGFjY2VzcyBvbmx5IGN1cnJlbnQgcHJvY2VzcydzCi0gKiBpbmZvcm1hdGlvbi4gQXMgb2Ygbm93LCBMU00gdmVyc2lvbiBvZiBUT01PWU8gaXMgdXNpbmcgX19kX3BhdGgoKSBmb3IKLSAqIGNhbGN1bGF0aW5nIHBhdGhuYW1lLiBOb24gTFNNIHZlcnNpb24gb2YgVE9NT1lPIGlzIHVzaW5nIGl0cyBvd24gZnVuY3Rpb24KLSAqIHdoaWNoIHByZXRlbmRzIGFzIGlmIC9wcm9jL3NlbGYvIGlzIG5vdCBhIHN5bWxpbms7IHNvIHRoYXQgd2UgY2FuIGZvcmJpZAotICogY3VycmVudCBwcm9jZXNzIGZyb20gYWNjZXNzaW5nIG90aGVyIHByb2Nlc3MncyBpbmZvcm1hdGlvbi4KLSAqLwotTElTVF9IRUFEKHRvbW95b19wYXR0ZXJuX2xpc3QpOwotCiAvKioKLSAqIHRvbW95b191cGRhdGVfZmlsZV9wYXR0ZXJuX2VudHJ5IC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnkiIGxpc3QuCisgKiB0b21veW9fdXBkYXRlX2ZpbGVfcGF0dGVybl9lbnRyeSAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19ub19wYXR0ZXJuIiBsaXN0LgogICoKICAqIEBwYXR0ZXJuOiAgIFBhdGhuYW1lIHBhdHRlcm4uCiAgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCkBAIC0zNDIsMzkgKzM2NiwyMyBAQAogc3RhdGljIGludCB0b21veW9fdXBkYXRlX2ZpbGVfcGF0dGVybl9lbnRyeShjb25zdCBjaGFyICpwYXR0ZXJuLAogCQkJCQkgICAgY29uc3QgYm9vbCBpc19kZWxldGUpCiB7Ci0Jc3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5ICpwdHI7Ci0Jc3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5IGUgPSB7IC5wYXR0ZXJuID0gdG9tb3lvX2dldF9uYW1lKHBhdHRlcm4pIH07Ci0JaW50IGVycm9yID0gaXNfZGVsZXRlID8gLUVOT0VOVCA6IC1FTk9NRU07CisJc3RydWN0IHRvbW95b19ub19wYXR0ZXJuIGUgPSB7IH07CisJaW50IGVycm9yOwogCisJaWYgKCF0b21veW9fY29ycmVjdF93b3JkKHBhdHRlcm4pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllLnBhdHRlcm4gPSB0b21veW9fZ2V0X25hbWUocGF0dGVybik7CiAJaWYgKCFlLnBhdHRlcm4pCi0JCXJldHVybiBlcnJvcjsKLQlpZiAoIWUucGF0dGVybi0+aXNfcGF0dGVybmVkKQotCQlnb3RvIG91dDsKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ0b21veW9fcG9saWN5X2xvY2spKQotCQlnb3RvIG91dDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fcGF0dGVybl9saXN0LCBsaXN0KSB7Ci0JCWlmIChlLnBhdHRlcm4gIT0gcHRyLT5wYXR0ZXJuKQotCQkJY29udGludWU7Ci0JCXB0ci0+aXNfZGVsZXRlZCA9IGlzX2RlbGV0ZTsKLQkJZXJyb3IgPSAwOwotCQlicmVhazsKLQl9Ci0JaWYgKCFpc19kZWxldGUgJiYgZXJyb3IpIHsKLQkJc3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5ICplbnRyeSA9Ci0JCQl0b21veW9fY29tbWl0X29rKCZlLCBzaXplb2YoZSkpOwotCQlpZiAoZW50cnkpIHsKLQkJCWxpc3RfYWRkX3RhaWxfcmN1KCZlbnRyeS0+bGlzdCwgJnRvbW95b19wYXR0ZXJuX2xpc3QpOwotCQkJZXJyb3IgPSAwOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmdG9tb3lvX3BvbGljeV9sb2NrKTsKLSBvdXQ6CisJCXJldHVybiAtRU5PTUVNOworCWVycm9yID0gdG9tb3lvX3VwZGF0ZV9wb2xpY3koJmUuaGVhZCwgc2l6ZW9mKGUpLCBpc19kZWxldGUsCisJCQkJICAgICAmdG9tb3lvX3BvbGljeV9saXN0W1RPTU9ZT19JRF9QQVRURVJOXSwKKwkJCQkgICAgIHRvbW95b19zYW1lX3BhdHRlcm4pOwogCXRvbW95b19wdXRfbmFtZShlLnBhdHRlcm4pOwogCXJldHVybiBlcnJvcjsKIH0KIAogLyoqCi0gKiB0b21veW9fZ2V0X2ZpbGVfcGF0dGVybiAtIEdldCBwYXR0ZXJuZWQgcGF0aG5hbWUuCisgKiB0b21veW9fcGF0dGVybiAtIEdldCBwYXR0ZXJuZWQgcGF0aG5hbWUuCiAgKgogICogQGZpbGVuYW1lOiBUaGUgZmlsZW5hbWUgdG8gZmluZCBwYXR0ZXJuZWQgcGF0aG5hbWUuCiAgKgpAQCAtMzgyLDE0ICszOTAsMTQgQEAKICAqCiAgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKgotdG9tb3lvX2dldF9maWxlX3BhdHRlcm4oY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lKQorY29uc3QgY2hhciAqdG9tb3lvX3BhdHRlcm4oY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lKQogewotCXN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSAqcHRyOworCXN0cnVjdCB0b21veW9fbm9fcGF0dGVybiAqcHRyOwogCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwYXR0ZXJuID0gTlVMTDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJnRvbW95b19wYXR0ZXJuX2xpc3QsIGxpc3QpIHsKLQkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fcG9saWN5X2xpc3RbVE9NT1lPX0lEX1BBVFRFUk5dLAorCQkJCWhlYWQubGlzdCkgeworCQlpZiAocHRyLT5oZWFkLmlzX2RlbGV0ZWQpCiAJCQljb250aW51ZTsKIAkJaWYgKCF0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4oZmlsZW5hbWUsIHB0ci0+cGF0dGVybikpCiAJCQljb250aW51ZTsKQEAgLTQwMywxMSArNDExLDExIEBACiAJfQogCWlmIChwYXR0ZXJuKQogCQlmaWxlbmFtZSA9IHBhdHRlcm47Ci0JcmV0dXJuIGZpbGVuYW1lOworCXJldHVybiBmaWxlbmFtZS0+bmFtZTsKIH0KIAogLyoqCi0gKiB0b21veW9fd3JpdGVfcGF0dGVybl9wb2xpY3kgLSBXcml0ZSAic3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5IiBsaXN0LgorICogdG9tb3lvX3dyaXRlX3BhdHRlcm4gLSBXcml0ZSAic3RydWN0IHRvbW95b19ub19wYXR0ZXJuIiBsaXN0LgogICoKICAqIEBkYXRhOiAgICAgIFN0cmluZyB0byBwYXJzZS4KICAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KQEAgLTQxNiw3MSArNDI0LDIxIEBACiAgKgogICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwotaW50IHRvbW95b193cml0ZV9wYXR0ZXJuX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSkKK2ludCB0b21veW9fd3JpdGVfcGF0dGVybihjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSkKIHsKIAlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9maWxlX3BhdHRlcm5fZW50cnkoZGF0YSwgaXNfZGVsZXRlKTsKIH0KIAotLyoqCi0gKiB0b21veW9fcmVhZF9maWxlX3BhdHRlcm4gLSBSZWFkICJzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnkiIGxpc3QuCi0gKgotICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KLSAqCi0gKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgotICoKLSAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCi0gKi8KLWJvb2wgdG9tb3lvX3JlYWRfZmlsZV9wYXR0ZXJuKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQorc3RhdGljIGJvb2wgdG9tb3lvX3NhbWVfbm9fcmV3cml0ZShjb25zdCBzdHJ1Y3QgdG9tb3lvX2FjbF9oZWFkICphLAorCQkJCSAgIGNvbnN0IHN0cnVjdCB0b21veW9fYWNsX2hlYWQgKmIpCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zOwotCWJvb2wgZG9uZSA9IHRydWU7Ci0KLQlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShwb3MsIGhlYWQtPnJlYWRfdmFyMiwgJnRvbW95b19wYXR0ZXJuX2xpc3QpIHsKLQkJc3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5ICpwdHI7Ci0JCXB0ciA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnksIGxpc3QpOwotCQlpZiAocHRyLT5pc19kZWxldGVkKQotCQkJY29udGludWU7Ci0JCWRvbmUgPSB0b21veW9faW9fcHJpbnRmKGhlYWQsIFRPTU9ZT19LRVlXT1JEX0ZJTEVfUEFUVEVSTgotCQkJCQkiJXNcbiIsIHB0ci0+cGF0dGVybi0+bmFtZSk7Ci0JCWlmICghZG9uZSkKLQkJCWJyZWFrOwotCX0KLQlyZXR1cm4gZG9uZTsKKwlyZXR1cm4gY29udGFpbmVyX29mKGEsIHN0cnVjdCB0b21veW9fbm9fcmV3cml0ZSwgaGVhZCktPnBhdHRlcm4KKwkJPT0gY29udGFpbmVyX29mKGIsIHN0cnVjdCB0b21veW9fbm9fcmV3cml0ZSwgaGVhZCkKKwkJLT5wYXR0ZXJuOwogfQogCi0vKgotICogdG9tb3lvX25vX3Jld3JpdGVfbGlzdCBpcyB1c2VkIGZvciBob2xkaW5nIGxpc3Qgb2YgcGF0aG5hbWVzIHdoaWNoIGFyZSBieQotICogZGVmYXVsdCBmb3JiaWRkZW4gdG8gbW9kaWZ5IGFscmVhZHkgd3JpdHRlbiBjb250ZW50IG9mIGEgZmlsZS4KLSAqCi0gKiBBbiBlbnRyeSBpcyBhZGRlZCBieQotICoKLSAqICMgZWNobyAnZGVueV9yZXdyaXRlIC92YXIvbG9nL21lc3NhZ2VzJyA+IFwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL2V4Y2VwdGlvbl9wb2xpY3kKLSAqCi0gKiBhbmQgaXMgZGVsZXRlZCBieQotICoKLSAqICMgZWNobyAnZGVsZXRlIGRlbnlfcmV3cml0ZSAvdmFyL2xvZy9tZXNzYWdlcycgPiBcCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9leGNlcHRpb25fcG9saWN5Ci0gKgotICogYW5kIGFsbCBlbnRyaWVzIGFyZSByZXRyaWV2ZWQgYnkKLSAqCi0gKiAjIGdyZXAgXmRlbnlfcmV3cml0ZSAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vZXhjZXB0aW9uX3BvbGljeQotICoKLSAqIEluIHRoZSBleGFtcGxlIGFib3ZlLCBpZiBhIHByb2Nlc3MgcmVxdWVzdGVkIHRvIHJld3JpdGUgL3Zhci9sb2cvbWVzc2FnZXMgLAotICogdGhlIHByb2Nlc3MgY2FuJ3QgcmV3cml0ZSB1bmxlc3MgdGhlIGRvbWFpbiB3aGljaCB0aGF0IHByb2Nlc3MgYmVsb25ncyB0bwotICogaGFzICJhbGxvd19yZXdyaXRlIC92YXIvbG9nL21lc3NhZ2VzIiBlbnRyeS4KLSAqCi0gKiBJdCBpcyBub3QgYSBkZXNpcmFibGUgYmVoYXZpb3IgdGhhdCB3ZSBoYXZlIHRvIGFkZCAiXDA0MChkZWxldGVkKSIgc3VmZml4Ci0gKiB3aGVuIHdlIHdhbnQgdG8gYWxsb3cgcmV3cml0aW5nIGFscmVhZHkgdW5saW5rKCllZCBmaWxlLiBBcyBvZiBub3csCi0gKiBMU00gdmVyc2lvbiBvZiBUT01PWU8gaXMgdXNpbmcgX19kX3BhdGgoKSBmb3IgY2FsY3VsYXRpbmcgcGF0aG5hbWUuCi0gKiBOb24gTFNNIHZlcnNpb24gb2YgVE9NT1lPIGlzIHVzaW5nIGl0cyBvd24gZnVuY3Rpb24gd2hpY2ggZG9lc24ndCBhcHBlbmQKLSAqICIgKGRlbGV0ZWQpIiBzdWZmaXggaWYgdGhlIGZpbGUgaXMgYWxyZWFkeSB1bmxpbmsoKWVkOyBzbyB0aGF0IHdlIGRvbid0Ci0gKiBuZWVkIHRvIHdvcnJ5IHdoZXRoZXIgdGhlIGZpbGUgaXMgYWxyZWFkeSB1bmxpbmsoKWVkIG9yIG5vdC4KLSAqLwotTElTVF9IRUFEKHRvbW95b19ub19yZXdyaXRlX2xpc3QpOwotCiAvKioKLSAqIHRvbW95b191cGRhdGVfbm9fcmV3cml0ZV9lbnRyeSAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5IiBsaXN0LgorICogdG9tb3lvX3VwZGF0ZV9ub19yZXdyaXRlX2VudHJ5IC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGUiIGxpc3QuCiAgKgogICogQHBhdHRlcm46ICAgUGF0aG5hbWUgcGF0dGVybiB0aGF0IGFyZSBub3QgcmV3cml0YWJsZSBieSBkZWZhdWx0LgogICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgpAQCAtNDkyLDQxICs0NTAsMjMgQEAKIHN0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9ub19yZXdyaXRlX2VudHJ5KGNvbnN0IGNoYXIgKnBhdHRlcm4sCiAJCQkJCSAgY29uc3QgYm9vbCBpc19kZWxldGUpCiB7Ci0Jc3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5ICpwdHI7Ci0Jc3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5IGUgPSB7IH07Ci0JaW50IGVycm9yID0gaXNfZGVsZXRlID8gLUVOT0VOVCA6IC1FTk9NRU07CisJc3RydWN0IHRvbW95b19ub19yZXdyaXRlIGUgPSB7IH07CisJaW50IGVycm9yOwogCi0JaWYgKCF0b21veW9faXNfY29ycmVjdF9wYXRoKHBhdHRlcm4sIDAsIDAsIDApKQorCWlmICghdG9tb3lvX2NvcnJlY3Rfd29yZChwYXR0ZXJuKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZS5wYXR0ZXJuID0gdG9tb3lvX2dldF9uYW1lKHBhdHRlcm4pOwogCWlmICghZS5wYXR0ZXJuKQotCQlyZXR1cm4gZXJyb3I7Ci0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdG9tb3lvX3BvbGljeV9sb2NrKSkKLQkJZ290byBvdXQ7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmdG9tb3lvX25vX3Jld3JpdGVfbGlzdCwgbGlzdCkgewotCQlpZiAocHRyLT5wYXR0ZXJuICE9IGUucGF0dGVybikKLQkJCWNvbnRpbnVlOwotCQlwdHItPmlzX2RlbGV0ZWQgPSBpc19kZWxldGU7Ci0JCWVycm9yID0gMDsKLQkJYnJlYWs7Ci0JfQotCWlmICghaXNfZGVsZXRlICYmIGVycm9yKSB7Ci0JCXN0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSAqZW50cnkgPQotCQkJdG9tb3lvX2NvbW1pdF9vaygmZSwgc2l6ZW9mKGUpKTsKLQkJaWYgKGVudHJ5KSB7Ci0JCQlsaXN0X2FkZF90YWlsX3JjdSgmZW50cnktPmxpc3QsCi0JCQkJCSAgJnRvbW95b19ub19yZXdyaXRlX2xpc3QpOwotCQkJZXJyb3IgPSAwOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmdG9tb3lvX3BvbGljeV9sb2NrKTsKLSBvdXQ6CisJCXJldHVybiAtRU5PTUVNOworCWVycm9yID0gdG9tb3lvX3VwZGF0ZV9wb2xpY3koJmUuaGVhZCwgc2l6ZW9mKGUpLCBpc19kZWxldGUsCisJCQkJICAgICAmdG9tb3lvX3BvbGljeV9saXN0W1RPTU9ZT19JRF9OT19SRVdSSVRFXSwKKwkJCQkgICAgIHRvbW95b19zYW1lX25vX3Jld3JpdGUpOwogCXRvbW95b19wdXRfbmFtZShlLnBhdHRlcm4pOwogCXJldHVybiBlcnJvcjsKIH0KIAogLyoqCi0gKiB0b21veW9faXNfbm9fcmV3cml0ZV9maWxlIC0gQ2hlY2sgaWYgdGhlIGdpdmVuIHBhdGhuYW1lIGlzIG5vdCBwZXJtaXR0ZWQgdG8gYmUgcmV3cml0ZWQuCisgKiB0b21veW9fbm9fcmV3cml0ZV9maWxlIC0gQ2hlY2sgaWYgdGhlIGdpdmVuIHBhdGhuYW1lIGlzIG5vdCBwZXJtaXR0ZWQgdG8gYmUgcmV3cml0ZWQuCiAgKgogICogQGZpbGVuYW1lOiBGaWxlbmFtZSB0byBjaGVjay4KICAqCkBAIC01MzUsMTMgKzQ3NSwxNCBAQAogICoKICAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KLXN0YXRpYyBib29sIHRvbW95b19pc19ub19yZXdyaXRlX2ZpbGUoY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lKQorc3RhdGljIGJvb2wgdG9tb3lvX25vX3Jld3JpdGVfZmlsZShjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUpCiB7Ci0Jc3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5ICpwdHI7CisJc3RydWN0IHRvbW95b19ub19yZXdyaXRlICpwdHI7CiAJYm9vbCBmb3VuZCA9IGZhbHNlOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmdG9tb3lvX25vX3Jld3JpdGVfbGlzdCwgbGlzdCkgewotCQlpZiAocHRyLT5pc19kZWxldGVkKQorCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJnRvbW95b19wb2xpY3lfbGlzdFtUT01PWU9fSURfTk9fUkVXUklURV0sCisJCQkJaGVhZC5saXN0KSB7CisJCWlmIChwdHItPmhlYWQuaXNfZGVsZXRlZCkKIAkJCWNvbnRpbnVlOwogCQlpZiAoIXRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybihmaWxlbmFtZSwgcHRyLT5wYXR0ZXJuKSkKIAkJCWNvbnRpbnVlOwpAQCAtNTUyLDcgKzQ5Myw3IEBACiB9CiAKIC8qKgotICogdG9tb3lvX3dyaXRlX25vX3Jld3JpdGVfcG9saWN5IC0gV3JpdGUgInN0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSIgbGlzdC4KKyAqIHRvbW95b193cml0ZV9ub19yZXdyaXRlIC0gV3JpdGUgInN0cnVjdCB0b21veW9fbm9fcmV3cml0ZSIgbGlzdC4KICAqCiAgKiBAZGF0YTogICAgICBTdHJpbmcgdG8gcGFyc2UuCiAgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCkBAIC01NjEsMjU2ICs1MDIsOTYgQEAKICAqCiAgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCi1pbnQgdG9tb3lvX3dyaXRlX25vX3Jld3JpdGVfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoraW50IHRvbW95b193cml0ZV9ub19yZXdyaXRlKGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQogewogCXJldHVybiB0b21veW9fdXBkYXRlX25vX3Jld3JpdGVfZW50cnkoZGF0YSwgaXNfZGVsZXRlKTsKIH0KIAotLyoqCi0gKiB0b21veW9fcmVhZF9ub19yZXdyaXRlX3BvbGljeSAtIFJlYWQgInN0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSIgbGlzdC4KLSAqCi0gKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgotICoKLSAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCi0gKgotICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KLSAqLwotYm9vbCB0b21veW9fcmVhZF9ub19yZXdyaXRlX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3N0YXRpYyBib29sIHRvbW95b19jaGVja19wYXRoX2FjbChzdHJ1Y3QgdG9tb3lvX3JlcXVlc3RfaW5mbyAqciwKKwkJCQkgIGNvbnN0IHN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cikKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7Ci0JYm9vbCBkb25lID0gdHJ1ZTsKLQotCWxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgaGVhZC0+cmVhZF92YXIyLCAmdG9tb3lvX25vX3Jld3JpdGVfbGlzdCkgewotCQlzdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGVfZW50cnkgKnB0cjsKLQkJcHRyID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSwgbGlzdCk7Ci0JCWlmIChwdHItPmlzX2RlbGV0ZWQpCi0JCQljb250aW51ZTsKLQkJZG9uZSA9IHRvbW95b19pb19wcmludGYoaGVhZCwgVE9NT1lPX0tFWVdPUkRfREVOWV9SRVdSSVRFCi0JCQkJCSIlc1xuIiwgcHRyLT5wYXR0ZXJuLT5uYW1lKTsKLQkJaWYgKCFkb25lKQotCQkJYnJlYWs7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2FjbCAqYWNsID0gY29udGFpbmVyX29mKHB0ciwgdHlwZW9mKCphY2wpLAorCQkJCQkJCSBoZWFkKTsKKwlpZiAoYWNsLT5wZXJtICYgKDEgPDwgci0+cGFyYW0ucGF0aC5vcGVyYXRpb24pKSB7CisJCXItPnBhcmFtLnBhdGgubWF0Y2hlZF9wYXRoID0KKwkJCXRvbW95b19jb21wYXJlX25hbWVfdW5pb24oci0+cGFyYW0ucGF0aC5maWxlbmFtZSwKKwkJCQkJCSAgJmFjbC0+bmFtZSk7CisJCXJldHVybiByLT5wYXJhbS5wYXRoLm1hdGNoZWRfcGF0aCAhPSBOVUxMOwogCX0KLQlyZXR1cm4gZG9uZTsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKLS8qKgotICogdG9tb3lvX3VwZGF0ZV9maWxlX2FjbCAtIFVwZGF0ZSBmaWxlJ3MgcmVhZC93cml0ZS9leGVjdXRlIEFDTC4KLSAqCi0gKiBAZmlsZW5hbWU6ICBGaWxlbmFtZS4KLSAqIEBwZXJtOiAgICAgIFBlcm1pc3Npb24gKGJldHdlZW4gMSB0byA3KS4KLSAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgotICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCi0gKgotICogVGhpcyBpcyBsZWdhY3kgc3VwcG9ydCBpbnRlcmZhY2UgZm9yIG9sZGVyIHBvbGljeSBzeW50YXguCi0gKiBDdXJyZW50IHBvbGljeSBzeW50YXggdXNlcyAiYWxsb3dfcmVhZC93cml0ZSIgaW5zdGVhZCBvZiAiNiIsCi0gKiAiYWxsb3dfcmVhZCIgaW5zdGVhZCBvZiAiNCIsICJhbGxvd193cml0ZSIgaW5zdGVhZCBvZiAiMiIsCi0gKiAiYWxsb3dfZXhlY3V0ZSIgaW5zdGVhZCBvZiAiMSIuCi0gKgotICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KLSAqLwotc3RhdGljIGludCB0b21veW9fdXBkYXRlX2ZpbGVfYWNsKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1OCBwZXJtLAotCQkJCSAgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqIGNvbnN0IGRvbWFpbiwKK3N0YXRpYyBib29sIHRvbW95b19jaGVja19wYXRoX251bWJlcl9hY2woc3RydWN0IHRvbW95b19yZXF1ZXN0X2luZm8gKnIsCisJCQkJCSBjb25zdCBzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHIpCit7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX251bWJlcl9hY2wgKmFjbCA9CisJCWNvbnRhaW5lcl9vZihwdHIsIHR5cGVvZigqYWNsKSwgaGVhZCk7CisJcmV0dXJuIChhY2wtPnBlcm0gJiAoMSA8PCByLT5wYXJhbS5wYXRoX251bWJlci5vcGVyYXRpb24pKSAmJgorCQl0b21veW9fY29tcGFyZV9udW1iZXJfdW5pb24oci0+cGFyYW0ucGF0aF9udW1iZXIubnVtYmVyLAorCQkJCQkgICAgJmFjbC0+bnVtYmVyKSAmJgorCQl0b21veW9fY29tcGFyZV9uYW1lX3VuaW9uKHItPnBhcmFtLnBhdGhfbnVtYmVyLmZpbGVuYW1lLAorCQkJCQkgICZhY2wtPm5hbWUpOworfQorCitzdGF0aWMgYm9vbCB0b21veW9fY2hlY2tfcGF0aDJfYWNsKHN0cnVjdCB0b21veW9fcmVxdWVzdF9pbmZvICpyLAorCQkJCSAgIGNvbnN0IHN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cikKK3sKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGgyX2FjbCAqYWNsID0KKwkJY29udGFpbmVyX29mKHB0ciwgdHlwZW9mKCphY2wpLCBoZWFkKTsKKwlyZXR1cm4gKGFjbC0+cGVybSAmICgxIDw8IHItPnBhcmFtLnBhdGgyLm9wZXJhdGlvbikpICYmCisJCXRvbW95b19jb21wYXJlX25hbWVfdW5pb24oci0+cGFyYW0ucGF0aDIuZmlsZW5hbWUxLCAmYWNsLT5uYW1lMSkKKwkJJiYgdG9tb3lvX2NvbXBhcmVfbmFtZV91bmlvbihyLT5wYXJhbS5wYXRoMi5maWxlbmFtZTIsCisJCQkJCSAgICAgJmFjbC0+bmFtZTIpOworfQorCitzdGF0aWMgYm9vbCB0b21veW9fY2hlY2tfbWtkZXZfYWNsKHN0cnVjdCB0b21veW9fcmVxdWVzdF9pbmZvICpyLAorCQkJCWNvbnN0IHN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cikKK3sKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX21rZGV2X2FjbCAqYWNsID0KKwkJY29udGFpbmVyX29mKHB0ciwgdHlwZW9mKCphY2wpLCBoZWFkKTsKKwlyZXR1cm4gKGFjbC0+cGVybSAmICgxIDw8IHItPnBhcmFtLm1rZGV2Lm9wZXJhdGlvbikpICYmCisJCXRvbW95b19jb21wYXJlX251bWJlcl91bmlvbihyLT5wYXJhbS5ta2Rldi5tb2RlLAorCQkJCQkgICAgJmFjbC0+bW9kZSkgJiYKKwkJdG9tb3lvX2NvbXBhcmVfbnVtYmVyX3VuaW9uKHItPnBhcmFtLm1rZGV2Lm1ham9yLAorCQkJCQkgICAgJmFjbC0+bWFqb3IpICYmCisJCXRvbW95b19jb21wYXJlX251bWJlcl91bmlvbihyLT5wYXJhbS5ta2Rldi5taW5vciwKKwkJCQkJICAgICZhY2wtPm1pbm9yKSAmJgorCQl0b21veW9fY29tcGFyZV9uYW1lX3VuaW9uKHItPnBhcmFtLm1rZGV2LmZpbGVuYW1lLAorCQkJCQkgICZhY2wtPm5hbWUpOworfQorCitzdGF0aWMgYm9vbCB0b21veW9fc2FtZV9wYXRoX2FjbChjb25zdCBzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICphLAorCQkJCSBjb25zdCBzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpiKQoreworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9hY2wgKnAxID0gY29udGFpbmVyX29mKGEsIHR5cGVvZigqcDEpLCBoZWFkKTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfYWNsICpwMiA9IGNvbnRhaW5lcl9vZihiLCB0eXBlb2YoKnAyKSwgaGVhZCk7CisJcmV0dXJuIHRvbW95b19zYW1lX2FjbF9oZWFkKCZwMS0+aGVhZCwgJnAyLT5oZWFkKSAmJgorCQl0b21veW9fc2FtZV9uYW1lX3VuaW9uKCZwMS0+bmFtZSwgJnAyLT5uYW1lKTsKK30KKworc3RhdGljIGJvb2wgdG9tb3lvX21lcmdlX3BhdGhfYWNsKHN0cnVjdCB0b21veW9fYWNsX2luZm8gKmEsCisJCQkJICBzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpiLAogCQkJCSAgY29uc3QgYm9vbCBpc19kZWxldGUpCiB7Ci0JaWYgKHBlcm0gPiA3IHx8ICFwZXJtKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogSW52YWxpZCBwZXJtaXNzaW9uICclZCAlcydcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgcGVybSwgZmlsZW5hbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwl1MTYgKiBjb25zdCBhX3Blcm0gPSAmY29udGFpbmVyX29mKGEsIHN0cnVjdCB0b21veW9fcGF0aF9hY2wsIGhlYWQpCisJCS0+cGVybTsKKwl1MTYgcGVybSA9ICphX3Blcm07CisJY29uc3QgdTE2IGJfcGVybSA9IGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3QgdG9tb3lvX3BhdGhfYWNsLCBoZWFkKS0+cGVybTsKKwlpZiAoaXNfZGVsZXRlKSB7CisJCXBlcm0gJj0gfmJfcGVybTsKKwkJaWYgKChwZXJtICYgVE9NT1lPX1JXX01BU0spICE9IFRPTU9ZT19SV19NQVNLKQorCQkJcGVybSAmPSB+KDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURSk7CisJCWVsc2UgaWYgKCEocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEUpKSkKKwkJCXBlcm0gJj0gflRPTU9ZT19SV19NQVNLOworCX0gZWxzZSB7CisJCXBlcm0gfD0gYl9wZXJtOworCQlpZiAoKHBlcm0gJiBUT01PWU9fUldfTUFTSykgPT0gVE9NT1lPX1JXX01BU0spCisJCQlwZXJtIHw9ICgxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEUpOworCQllbHNlIGlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURSkpCisJCQlwZXJtIHw9IFRPTU9ZT19SV19NQVNLOwogCX0KLQlpZiAoZmlsZW5hbWVbMF0gIT0gJ0AnICYmIHRvbW95b19zdHJlbmRzd2l0aChmaWxlbmFtZSwgIi8iKSkKLQkJLyoKLQkJICogT25seSAnYWxsb3dfbWtkaXInIGFuZCAnYWxsb3dfcm1kaXInIGFyZSB2YWxpZCBmb3IKLQkJICogZGlyZWN0b3J5IHBlcm1pc3Npb25zLgotCQkgKi8KLQkJcmV0dXJuIDA7Ci0JaWYgKHBlcm0gJiA0KQotCQl0b21veW9fdXBkYXRlX3BhdGhfYWNsKFRPTU9ZT19UWVBFX1JFQUQsIGZpbGVuYW1lLCBkb21haW4sCi0JCQkJICAgICAgIGlzX2RlbGV0ZSk7Ci0JaWYgKHBlcm0gJiAyKQotCQl0b21veW9fdXBkYXRlX3BhdGhfYWNsKFRPTU9ZT19UWVBFX1dSSVRFLCBmaWxlbmFtZSwgZG9tYWluLAotCQkJCSAgICAgICBpc19kZWxldGUpOwotCWlmIChwZXJtICYgMSkKLQkJdG9tb3lvX3VwZGF0ZV9wYXRoX2FjbChUT01PWU9fVFlQRV9FWEVDVVRFLCBmaWxlbmFtZSwgZG9tYWluLAotCQkJCSAgICAgICBpc19kZWxldGUpOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqIHRvbW95b19wYXRoX2FjbDIgLSBDaGVjayBwZXJtaXNzaW9uIGZvciBzaW5nbGUgcGF0aCBvcGVyYXRpb24uCi0gKgotICogQGRvbWFpbjogICAgICAgICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCi0gKiBAZmlsZW5hbWU6ICAgICAgICBGaWxlbmFtZSB0byBjaGVjay4KLSAqIEBwZXJtOiAgICAgICAgICAgIFBlcm1pc3Npb24uCi0gKiBAbWF5X3VzZV9wYXR0ZXJuOiBUcnVlIGlmIHBhdHRlcm5lZCBBQ0wgaXMgcGVybWl0dGVkLgotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRVBFUk0gb3RoZXJ3aXNlLgotICoKLSAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCi0gKi8KLXN0YXRpYyBpbnQgdG9tb3lvX3BhdGhfYWNsMihjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCi0JCQkgICAgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lLAotCQkJICAgIGNvbnN0IHUzMiBwZXJtLCBjb25zdCBib29sIG1heV91c2VfcGF0dGVybikKLXsKLQlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHI7Ci0JaW50IGVycm9yID0gLUVQRVJNOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmZG9tYWluLT5hY2xfaW5mb19saXN0LCBsaXN0KSB7Ci0JCXN0cnVjdCB0b21veW9fcGF0aF9hY2wgKmFjbDsKLQkJaWYgKHB0ci0+dHlwZSAhPSBUT01PWU9fVFlQRV9QQVRIX0FDTCkKLQkJCWNvbnRpbnVlOwotCQlhY2wgPSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX3BhdGhfYWNsLCBoZWFkKTsKLQkJaWYgKHBlcm0gPD0gMHhGRkZGKSB7Ci0JCQlpZiAoIShhY2wtPnBlcm0gJiBwZXJtKSkKLQkJCQljb250aW51ZTsKLQkJfSBlbHNlIHsKLQkJCWlmICghKGFjbC0+cGVybV9oaWdoICYgKHBlcm0gPj4gMTYpKSkKLQkJCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXRvbW95b19jb21wYXJlX25hbWVfdW5pb25fcGF0dGVybihmaWxlbmFtZSwgJmFjbC0+bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXlfdXNlX3BhdHRlcm4pKQotCQkJY29udGludWU7Ci0JCWVycm9yID0gMDsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiBlcnJvcjsKLX0KLQotLyoqCi0gKiB0b21veW9fY2hlY2tfZmlsZV9hY2wgLSBDaGVjayBwZXJtaXNzaW9uIGZvciBvcGVuaW5nIGZpbGVzLgotICoKLSAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgotICogQGZpbGVuYW1lOiAgRmlsZW5hbWUgdG8gY2hlY2suCi0gKiBAb3BlcmF0aW9uOiBNb2RlICgicmVhZCIgb3IgIndyaXRlIiBvciAicmVhZC93cml0ZSIgb3IgImV4ZWN1dGUiKS4KLSAqCi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVQRVJNIG90aGVyd2lzZS4KLSAqCi0gKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgotICovCi1zdGF0aWMgaW50IHRvbW95b19jaGVja19maWxlX2FjbChjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCi0JCQkJIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSwKLQkJCQkgY29uc3QgdTggb3BlcmF0aW9uKQotewotCXUzMiBwZXJtID0gMDsKLQotCWlmICghdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSkpCi0JCXJldHVybiAwOwotCWlmIChvcGVyYXRpb24gPT0gNikKLQkJcGVybSA9IDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURTsKLQllbHNlIGlmIChvcGVyYXRpb24gPT0gNCkKLQkJcGVybSA9IDEgPDwgVE9NT1lPX1RZUEVfUkVBRDsKLQllbHNlIGlmIChvcGVyYXRpb24gPT0gMikKLQkJcGVybSA9IDEgPDwgVE9NT1lPX1RZUEVfV1JJVEU7Ci0JZWxzZSBpZiAob3BlcmF0aW9uID09IDEpCi0JCXBlcm0gPSAxIDw8IFRPTU9ZT19UWVBFX0VYRUNVVEU7Ci0JZWxzZQotCQlCVUcoKTsKLQlyZXR1cm4gdG9tb3lvX3BhdGhfYWNsMihkb21haW4sIGZpbGVuYW1lLCBwZXJtLCBvcGVyYXRpb24gIT0gMSk7Ci19Ci0KLS8qKgotICogdG9tb3lvX2NoZWNrX2ZpbGVfcGVybTIgLSBDaGVjayBwZXJtaXNzaW9uIGZvciBvcGVuaW5nIGZpbGVzLgotICoKLSAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgotICogQGZpbGVuYW1lOiAgRmlsZW5hbWUgdG8gY2hlY2suCi0gKiBAcGVybTogICAgICBNb2RlICgicmVhZCIgb3IgIndyaXRlIiBvciAicmVhZC93cml0ZSIgb3IgImV4ZWN1dGUiKS4KLSAqIEBvcGVyYXRpb246IE9wZXJhdGlvbiBuYW1lIHBhc3NlZCB1c2VkIGZvciB2ZXJib3NlIG1vZGUuCi0gKiBAbW9kZTogICAgICBBY2Nlc3MgY29udHJvbCBtb2RlLgotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCi0gKgotICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KLSAqLwotc3RhdGljIGludCB0b21veW9fY2hlY2tfZmlsZV9wZXJtMihzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICogY29uc3QgZG9tYWluLAotCQkJCSAgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSwKLQkJCQkgICBjb25zdCB1OCBwZXJtLCBjb25zdCBjaGFyICpvcGVyYXRpb24sCi0JCQkJICAgY29uc3QgdTggbW9kZSkKLXsKLQljb25zdCBib29sIGlzX2VuZm9yY2UgPSAobW9kZSA9PSAzKTsKLQljb25zdCBjaGFyICptc2cgPSAiPHVua25vd24+IjsKLQlpbnQgZXJyb3IgPSAwOwotCi0JaWYgKCFmaWxlbmFtZSkKLQkJcmV0dXJuIDA7Ci0JZXJyb3IgPSB0b21veW9fY2hlY2tfZmlsZV9hY2woZG9tYWluLCBmaWxlbmFtZSwgcGVybSk7Ci0JaWYgKGVycm9yICYmIHBlcm0gPT0gNCAmJiAhZG9tYWluLT5pZ25vcmVfZ2xvYmFsX2FsbG93X3JlYWQKLQkgICAgJiYgdG9tb3lvX2lzX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGUoZmlsZW5hbWUpKQotCQllcnJvciA9IDA7Ci0JaWYgKHBlcm0gPT0gNikKLQkJbXNnID0gdG9tb3lvX3BhdGgya2V5d29yZChUT01PWU9fVFlQRV9SRUFEX1dSSVRFKTsKLQllbHNlIGlmIChwZXJtID09IDQpCi0JCW1zZyA9IHRvbW95b19wYXRoMmtleXdvcmQoVE9NT1lPX1RZUEVfUkVBRCk7Ci0JZWxzZSBpZiAocGVybSA9PSAyKQotCQltc2cgPSB0b21veW9fcGF0aDJrZXl3b3JkKFRPTU9ZT19UWVBFX1dSSVRFKTsKLQllbHNlIGlmIChwZXJtID09IDEpCi0JCW1zZyA9IHRvbW95b19wYXRoMmtleXdvcmQoVE9NT1lPX1RZUEVfRVhFQ1VURSk7Ci0JZWxzZQotCQlCVUcoKTsKLQlpZiAoIWVycm9yKQotCQlyZXR1cm4gMDsKLQlpZiAodG9tb3lvX3ZlcmJvc2VfbW9kZShkb21haW4pKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJUT01PWU8tJXM6IEFjY2VzcyAnJXMoJXMpICVzJyBkZW5pZWQgIgotCQkgICAgICAgImZvciAlc1xuIiwgdG9tb3lvX2dldF9tc2coaXNfZW5mb3JjZSksIG1zZywgb3BlcmF0aW9uLAotCQkgICAgICAgZmlsZW5hbWUtPm5hbWUsIHRvbW95b19nZXRfbGFzdF9uYW1lKGRvbWFpbikpOwotCWlmIChpc19lbmZvcmNlKQotCQlyZXR1cm4gZXJyb3I7Ci0JaWYgKG1vZGUgPT0gMSAmJiB0b21veW9fZG9tYWluX3F1b3RhX2lzX29rKGRvbWFpbikpIHsKLQkJLyogRG9uJ3QgdXNlIHBhdHRlcm5zIGZvciBleGVjdXRlIHBlcm1pc3Npb24uICovCi0JCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwYXR0ZXJuZWRfZmlsZSA9IChwZXJtICE9IDEpID8KLQkJCXRvbW95b19nZXRfZmlsZV9wYXR0ZXJuKGZpbGVuYW1lKSA6IGZpbGVuYW1lOwotCQl0b21veW9fdXBkYXRlX2ZpbGVfYWNsKHBhdHRlcm5lZF9maWxlLT5uYW1lLCBwZXJtLAotCQkJCSAgICAgICBkb21haW4sIGZhbHNlKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogdG9tb3lvX3dyaXRlX2ZpbGVfcG9saWN5IC0gVXBkYXRlIGZpbGUgcmVsYXRlZCBsaXN0LgotICoKLSAqIEBkYXRhOiAgICAgIFN0cmluZyB0byBwYXJzZS4KLSAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgotICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCi0gKgotICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KLSAqLwotaW50IHRvbW95b193cml0ZV9maWxlX3BvbGljeShjaGFyICpkYXRhLCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCi0JCQkgICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQotewotCWNoYXIgKmZpbGVuYW1lID0gc3RyY2hyKGRhdGEsICcgJyk7Ci0JY2hhciAqZmlsZW5hbWUyOwotCXVuc2lnbmVkIGludCBwZXJtOwotCXU4IHR5cGU7Ci0KLQlpZiAoIWZpbGVuYW1lKQotCQlyZXR1cm4gLUVJTlZBTDsKLQkqZmlsZW5hbWUrKyA9ICdcMCc7Ci0JaWYgKHNzY2FuZihkYXRhLCAiJXUiLCAmcGVybSkgPT0gMSkKLQkJcmV0dXJuIHRvbW95b191cGRhdGVfZmlsZV9hY2woZmlsZW5hbWUsICh1OCkgcGVybSwgZG9tYWluLAotCQkJCQkgICAgICBpc19kZWxldGUpOwotCWlmIChzdHJuY21wKGRhdGEsICJhbGxvd18iLCA2KSkKLQkJZ290byBvdXQ7Ci0JZGF0YSArPSA2OwotCWZvciAodHlwZSA9IDA7IHR5cGUgPCBUT01PWU9fTUFYX1BBVEhfT1BFUkFUSU9OOyB0eXBlKyspIHsKLQkJaWYgKHN0cmNtcChkYXRhLCB0b21veW9fcGF0aF9rZXl3b3JkW3R5cGVdKSkKLQkJCWNvbnRpbnVlOwotCQlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9wYXRoX2FjbCh0eXBlLCBmaWxlbmFtZSwgZG9tYWluLAotCQkJCQkgICAgICBpc19kZWxldGUpOwotCX0KLQlmaWxlbmFtZTIgPSBzdHJjaHIoZmlsZW5hbWUsICcgJyk7Ci0JaWYgKCFmaWxlbmFtZTIpCi0JCWdvdG8gb3V0OwotCSpmaWxlbmFtZTIrKyA9ICdcMCc7Ci0JZm9yICh0eXBlID0gMDsgdHlwZSA8IFRPTU9ZT19NQVhfUEFUSDJfT1BFUkFUSU9OOyB0eXBlKyspIHsKLQkJaWYgKHN0cmNtcChkYXRhLCB0b21veW9fcGF0aDJfa2V5d29yZFt0eXBlXSkpCi0JCQljb250aW51ZTsKLQkJcmV0dXJuIHRvbW95b191cGRhdGVfcGF0aDJfYWNsKHR5cGUsIGZpbGVuYW1lLCBmaWxlbmFtZTIsCi0JCQkJCSAgICAgICBkb21haW4sIGlzX2RlbGV0ZSk7Ci0JfQotIG91dDoKLQlyZXR1cm4gLUVJTlZBTDsKKwkqYV9wZXJtID0gcGVybTsKKwlyZXR1cm4gIXBlcm07CiB9CiAKIC8qKgpAQCAtODI2LDcwICs2MDcsMTIzIEBACiAgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBzdGF0aWMgaW50IHRvbW95b191cGRhdGVfcGF0aF9hY2woY29uc3QgdTggdHlwZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCQkJICBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpjb25zdCBkb21haW4sCisJCQkJICBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICogY29uc3QgZG9tYWluLAogCQkJCSAgY29uc3QgYm9vbCBpc19kZWxldGUpCiB7Ci0Jc3RhdGljIGNvbnN0IHUzMiB0b21veW9fcndfbWFzayA9Ci0JCSgxIDw8IFRPTU9ZT19UWVBFX1JFQUQpIHwgKDEgPDwgVE9NT1lPX1RZUEVfV1JJVEUpOwotCWNvbnN0IHUzMiBwZXJtID0gMSA8PCB0eXBlOwotCXN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cjsKIAlzdHJ1Y3QgdG9tb3lvX3BhdGhfYWNsIGUgPSB7CiAJCS5oZWFkLnR5cGUgPSBUT01PWU9fVFlQRV9QQVRIX0FDTCwKLQkJLnBlcm1faGlnaCA9IHBlcm0gPj4gMTYsCi0JCS5wZXJtID0gcGVybQorCQkucGVybSA9IDEgPDwgdHlwZQogCX07Ci0JaW50IGVycm9yID0gaXNfZGVsZXRlID8gLUVOT0VOVCA6IC1FTk9NRU07Ci0KLQlpZiAodHlwZSA9PSBUT01PWU9fVFlQRV9SRUFEX1dSSVRFKQotCQllLnBlcm0gfD0gdG9tb3lvX3J3X21hc2s7Ci0JaWYgKCFkb21haW4pCi0JCXJldHVybiAtRUlOVkFMOworCWludCBlcnJvcjsKKwlpZiAoZS5wZXJtID09ICgxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEUpKQorCQllLnBlcm0gfD0gVE9NT1lPX1JXX01BU0s7CiAJaWYgKCF0b21veW9fcGFyc2VfbmFtZV91bmlvbihmaWxlbmFtZSwgJmUubmFtZSkpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnRvbW95b19wb2xpY3lfbG9jaykpCi0JCWdvdG8gb3V0OwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgewotCQlzdHJ1Y3QgdG9tb3lvX3BhdGhfYWNsICphY2wgPQotCQkJY29udGFpbmVyX29mKHB0ciwgc3RydWN0IHRvbW95b19wYXRoX2FjbCwgaGVhZCk7Ci0JCWlmICghdG9tb3lvX2lzX3NhbWVfcGF0aF9hY2woYWNsLCAmZSkpCi0JCQljb250aW51ZTsKLQkJaWYgKGlzX2RlbGV0ZSkgewotCQkJaWYgKHBlcm0gPD0gMHhGRkZGKQotCQkJCWFjbC0+cGVybSAmPSB+cGVybTsKLQkJCWVsc2UKLQkJCQlhY2wtPnBlcm1faGlnaCAmPSB+KHBlcm0gPj4gMTYpOwotCQkJaWYgKChhY2wtPnBlcm0gJiB0b21veW9fcndfbWFzaykgIT0gdG9tb3lvX3J3X21hc2spCi0JCQkJYWNsLT5wZXJtICY9IH4oMSA8PCBUT01PWU9fVFlQRV9SRUFEX1dSSVRFKTsKLQkJCWVsc2UgaWYgKCEoYWNsLT5wZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURSkpKQotCQkJCWFjbC0+cGVybSAmPSB+dG9tb3lvX3J3X21hc2s7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAocGVybSA8PSAweEZGRkYpCi0JCQkJYWNsLT5wZXJtIHw9IHBlcm07Ci0JCQllbHNlCi0JCQkJYWNsLT5wZXJtX2hpZ2ggfD0gKHBlcm0gPj4gMTYpOwotCQkJaWYgKChhY2wtPnBlcm0gJiB0b21veW9fcndfbWFzaykgPT0gdG9tb3lvX3J3X21hc2spCi0JCQkJYWNsLT5wZXJtIHw9IDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURTsKLQkJCWVsc2UgaWYgKGFjbC0+cGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEUpKQotCQkJCWFjbC0+cGVybSB8PSB0b21veW9fcndfbWFzazsKLQkJfQotCQllcnJvciA9IDA7Ci0JCWJyZWFrOwotCX0KLQlpZiAoIWlzX2RlbGV0ZSAmJiBlcnJvcikgewotCQlzdHJ1Y3QgdG9tb3lvX3BhdGhfYWNsICplbnRyeSA9Ci0JCQl0b21veW9fY29tbWl0X29rKCZlLCBzaXplb2YoZSkpOwotCQlpZiAoZW50cnkpIHsKLQkJCWxpc3RfYWRkX3RhaWxfcmN1KCZlbnRyeS0+aGVhZC5saXN0LAotCQkJCQkgICZkb21haW4tPmFjbF9pbmZvX2xpc3QpOwotCQkJZXJyb3IgPSAwOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmdG9tb3lvX3BvbGljeV9sb2NrKTsKLSBvdXQ6CisJZXJyb3IgPSB0b21veW9fdXBkYXRlX2RvbWFpbigmZS5oZWFkLCBzaXplb2YoZSksIGlzX2RlbGV0ZSwgZG9tYWluLAorCQkJCSAgICAgdG9tb3lvX3NhbWVfcGF0aF9hY2wsCisJCQkJICAgICB0b21veW9fbWVyZ2VfcGF0aF9hY2wpOwogCXRvbW95b19wdXRfbmFtZV91bmlvbigmZS5uYW1lKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyBib29sIHRvbW95b19zYW1lX21rZGV2X2FjbChjb25zdCBzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICphLAorCQkJCQkgY29uc3Qgc3RydWN0IHRvbW95b19hY2xfaW5mbyAqYikKK3sKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX21rZGV2X2FjbCAqcDEgPSBjb250YWluZXJfb2YoYSwgdHlwZW9mKCpwMSksCisJCQkJCQkJCWhlYWQpOworCWNvbnN0IHN0cnVjdCB0b21veW9fbWtkZXZfYWNsICpwMiA9IGNvbnRhaW5lcl9vZihiLCB0eXBlb2YoKnAyKSwKKwkJCQkJCQkJaGVhZCk7CisJcmV0dXJuIHRvbW95b19zYW1lX2FjbF9oZWFkKCZwMS0+aGVhZCwgJnAyLT5oZWFkKQorCQkmJiB0b21veW9fc2FtZV9uYW1lX3VuaW9uKCZwMS0+bmFtZSwgJnAyLT5uYW1lKQorCQkmJiB0b21veW9fc2FtZV9udW1iZXJfdW5pb24oJnAxLT5tb2RlLCAmcDItPm1vZGUpCisJCSYmIHRvbW95b19zYW1lX251bWJlcl91bmlvbigmcDEtPm1ham9yLCAmcDItPm1ham9yKQorCQkmJiB0b21veW9fc2FtZV9udW1iZXJfdW5pb24oJnAxLT5taW5vciwgJnAyLT5taW5vcik7Cit9CisKK3N0YXRpYyBib29sIHRvbW95b19tZXJnZV9ta2Rldl9hY2woc3RydWN0IHRvbW95b19hY2xfaW5mbyAqYSwKKwkJCQkJICBzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpiLAorCQkJCQkgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCXU4ICpjb25zdCBhX3Blcm0gPSAmY29udGFpbmVyX29mKGEsIHN0cnVjdCB0b21veW9fbWtkZXZfYWNsLAorCQkJCQkgaGVhZCktPnBlcm07CisJdTggcGVybSA9ICphX3Blcm07CisJY29uc3QgdTggYl9wZXJtID0gY29udGFpbmVyX29mKGIsIHN0cnVjdCB0b21veW9fbWtkZXZfYWNsLCBoZWFkKQorCQktPnBlcm07CisJaWYgKGlzX2RlbGV0ZSkKKwkJcGVybSAmPSB+Yl9wZXJtOworCWVsc2UKKwkJcGVybSB8PSBiX3Blcm07CisJKmFfcGVybSA9IHBlcm07CisJcmV0dXJuICFwZXJtOworfQorCisvKioKKyAqIHRvbW95b191cGRhdGVfbWtkZXZfYWNsIC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX21rZGV2X2FjbCIgbGlzdC4KKyAqCisgKiBAdHlwZTogICAgICBUeXBlIG9mIG9wZXJhdGlvbi4KKyAqIEBmaWxlbmFtZTogIEZpbGVuYW1lLgorICogQG1vZGU6ICAgICAgQ3JlYXRlIG1vZGUuCisgKiBAbWFqb3I6ICAgICBEZXZpY2UgbWFqb3IgbnVtYmVyLgorICogQG1pbm9yOiAgICAgRGV2aWNlIG1pbm9yIG51bWJlci4KKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KKyAqLworc3RhdGljIGludCB0b21veW9fdXBkYXRlX21rZGV2X2FjbChjb25zdCB1OCB0eXBlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCQkJICBjaGFyICptb2RlLCBjaGFyICptYWpvciwgY2hhciAqbWlub3IsCisJCQkJCSAgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqIGNvbnN0CisJCQkJCSAgZG9tYWluLCBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX21rZGV2X2FjbCBlID0geworCQkuaGVhZC50eXBlID0gVE9NT1lPX1RZUEVfTUtERVZfQUNMLAorCQkucGVybSA9IDEgPDwgdHlwZQorCX07CisJaW50IGVycm9yID0gaXNfZGVsZXRlID8gLUVOT0VOVCA6IC1FTk9NRU07CisJaWYgKCF0b21veW9fcGFyc2VfbmFtZV91bmlvbihmaWxlbmFtZSwgJmUubmFtZSkgfHwKKwkgICAgIXRvbW95b19wYXJzZV9udW1iZXJfdW5pb24obW9kZSwgJmUubW9kZSkgfHwKKwkgICAgIXRvbW95b19wYXJzZV9udW1iZXJfdW5pb24obWFqb3IsICZlLm1ham9yKSB8fAorCSAgICAhdG9tb3lvX3BhcnNlX251bWJlcl91bmlvbihtaW5vciwgJmUubWlub3IpKQorCQlnb3RvIG91dDsKKwllcnJvciA9IHRvbW95b191cGRhdGVfZG9tYWluKCZlLmhlYWQsIHNpemVvZihlKSwgaXNfZGVsZXRlLCBkb21haW4sCisJCQkJICAgICB0b21veW9fc2FtZV9ta2Rldl9hY2wsCisJCQkJICAgICB0b21veW9fbWVyZ2VfbWtkZXZfYWNsKTsKKyBvdXQ6CisJdG9tb3lvX3B1dF9uYW1lX3VuaW9uKCZlLm5hbWUpOworCXRvbW95b19wdXRfbnVtYmVyX3VuaW9uKCZlLm1vZGUpOworCXRvbW95b19wdXRfbnVtYmVyX3VuaW9uKCZlLm1ham9yKTsKKwl0b21veW9fcHV0X251bWJlcl91bmlvbigmZS5taW5vcik7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgYm9vbCB0b21veW9fc2FtZV9wYXRoMl9hY2woY29uc3Qgc3RydWN0IHRvbW95b19hY2xfaW5mbyAqYSwKKwkJCQkgIGNvbnN0IHN0cnVjdCB0b21veW9fYWNsX2luZm8gKmIpCit7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoMl9hY2wgKnAxID0gY29udGFpbmVyX29mKGEsIHR5cGVvZigqcDEpLCBoZWFkKTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGgyX2FjbCAqcDIgPSBjb250YWluZXJfb2YoYiwgdHlwZW9mKCpwMiksIGhlYWQpOworCXJldHVybiB0b21veW9fc2FtZV9hY2xfaGVhZCgmcDEtPmhlYWQsICZwMi0+aGVhZCkKKwkJJiYgdG9tb3lvX3NhbWVfbmFtZV91bmlvbigmcDEtPm5hbWUxLCAmcDItPm5hbWUxKQorCQkmJiB0b21veW9fc2FtZV9uYW1lX3VuaW9uKCZwMS0+bmFtZTIsICZwMi0+bmFtZTIpOworfQorCitzdGF0aWMgYm9vbCB0b21veW9fbWVyZ2VfcGF0aDJfYWNsKHN0cnVjdCB0b21veW9fYWNsX2luZm8gKmEsCisJCQkJICAgc3RydWN0IHRvbW95b19hY2xfaW5mbyAqYiwKKwkJCQkgICBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwl1OCAqIGNvbnN0IGFfcGVybSA9ICZjb250YWluZXJfb2YoYSwgc3RydWN0IHRvbW95b19wYXRoMl9hY2wsIGhlYWQpCisJCS0+cGVybTsKKwl1OCBwZXJtID0gKmFfcGVybTsKKwljb25zdCB1OCBiX3Blcm0gPSBjb250YWluZXJfb2YoYiwgc3RydWN0IHRvbW95b19wYXRoMl9hY2wsIGhlYWQpLT5wZXJtOworCWlmIChpc19kZWxldGUpCisJCXBlcm0gJj0gfmJfcGVybTsKKwllbHNlCisJCXBlcm0gfD0gYl9wZXJtOworCSphX3Blcm0gPSBwZXJtOworCXJldHVybiAhcGVybTsKK30KKwogLyoqCiAgKiB0b21veW9fdXBkYXRlX3BhdGgyX2FjbCAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19wYXRoMl9hY2wiIGxpc3QuCiAgKgpAQCAtOTA1LDQ2ICs3MzksMjAgQEAKICAqLwogc3RhdGljIGludCB0b21veW9fdXBkYXRlX3BhdGgyX2FjbChjb25zdCB1OCB0eXBlLCBjb25zdCBjaGFyICpmaWxlbmFtZTEsCiAJCQkJICAgY29uc3QgY2hhciAqZmlsZW5hbWUyLAotCQkJCSAgIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmNvbnN0IGRvbWFpbiwKKwkJCQkgICBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICogY29uc3QgZG9tYWluLAogCQkJCSAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQogewotCWNvbnN0IHU4IHBlcm0gPSAxIDw8IHR5cGU7CiAJc3RydWN0IHRvbW95b19wYXRoMl9hY2wgZSA9IHsKIAkJLmhlYWQudHlwZSA9IFRPTU9ZT19UWVBFX1BBVEgyX0FDTCwKLQkJLnBlcm0gPSBwZXJtCisJCS5wZXJtID0gMSA8PCB0eXBlCiAJfTsKLQlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHI7CiAJaW50IGVycm9yID0gaXNfZGVsZXRlID8gLUVOT0VOVCA6IC1FTk9NRU07Ci0KLQlpZiAoIWRvbWFpbikKLQkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCF0b21veW9fcGFyc2VfbmFtZV91bmlvbihmaWxlbmFtZTEsICZlLm5hbWUxKSB8fAogCSAgICAhdG9tb3lvX3BhcnNlX25hbWVfdW5pb24oZmlsZW5hbWUyLCAmZS5uYW1lMikpCiAJCWdvdG8gb3V0OwotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnRvbW95b19wb2xpY3lfbG9jaykpCi0JCWdvdG8gb3V0OwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgewotCQlzdHJ1Y3QgdG9tb3lvX3BhdGgyX2FjbCAqYWNsID0KLQkJCWNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fcGF0aDJfYWNsLCBoZWFkKTsKLQkJaWYgKCF0b21veW9faXNfc2FtZV9wYXRoMl9hY2woYWNsLCAmZSkpCi0JCQljb250aW51ZTsKLQkJaWYgKGlzX2RlbGV0ZSkKLQkJCWFjbC0+cGVybSAmPSB+cGVybTsKLQkJZWxzZQotCQkJYWNsLT5wZXJtIHw9IHBlcm07Ci0JCWVycm9yID0gMDsKLQkJYnJlYWs7Ci0JfQotCWlmICghaXNfZGVsZXRlICYmIGVycm9yKSB7Ci0JCXN0cnVjdCB0b21veW9fcGF0aDJfYWNsICplbnRyeSA9Ci0JCQl0b21veW9fY29tbWl0X29rKCZlLCBzaXplb2YoZSkpOwotCQlpZiAoZW50cnkpIHsKLQkJCWxpc3RfYWRkX3RhaWxfcmN1KCZlbnRyeS0+aGVhZC5saXN0LAotCQkJCQkgICZkb21haW4tPmFjbF9pbmZvX2xpc3QpOwotCQkJZXJyb3IgPSAwOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmdG9tb3lvX3BvbGljeV9sb2NrKTsKKwllcnJvciA9IHRvbW95b191cGRhdGVfZG9tYWluKCZlLmhlYWQsIHNpemVvZihlKSwgaXNfZGVsZXRlLCBkb21haW4sCisJCQkJICAgICB0b21veW9fc2FtZV9wYXRoMl9hY2wsCisJCQkJICAgICB0b21veW9fbWVyZ2VfcGF0aDJfYWNsKTsKICBvdXQ6CiAJdG9tb3lvX3B1dF9uYW1lX3VuaW9uKCZlLm5hbWUxKTsKIAl0b21veW9fcHV0X25hbWVfdW5pb24oJmUubmFtZTIpOwpAQCAtOTUyLDEzNCArNzYwLDE1OCBAQAogfQogCiAvKioKLSAqIHRvbW95b19wYXRoX2FjbCAtIENoZWNrIHBlcm1pc3Npb24gZm9yIHNpbmdsZSBwYXRoIG9wZXJhdGlvbi4KKyAqIHRvbW95b19wYXRoX3Blcm1pc3Npb24gLSBDaGVjayBwZXJtaXNzaW9uIGZvciBzaW5nbGUgcGF0aCBvcGVyYXRpb24uCiAgKgotICogQGRvbWFpbjogICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KLSAqIEB0eXBlOiAgICAgVHlwZSBvZiBvcGVyYXRpb24uCi0gKiBAZmlsZW5hbWU6IEZpbGVuYW1lIHRvIGNoZWNrLgotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCi0gKgotICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KLSAqLwotc3RhdGljIGludCB0b21veW9fcGF0aF9hY2woc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLCBjb25zdCB1OCB0eXBlLAotCQkJICAgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lKQotewotCWlmICghdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSkpCi0JCXJldHVybiAwOwotCXJldHVybiB0b21veW9fcGF0aF9hY2wyKGRvbWFpbiwgZmlsZW5hbWUsIDEgPDwgdHlwZSwgMSk7Ci19Ci0KLS8qKgotICogdG9tb3lvX3BhdGgyX2FjbCAtIENoZWNrIHBlcm1pc3Npb24gZm9yIGRvdWJsZSBwYXRoIG9wZXJhdGlvbi4KLSAqCi0gKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KLSAqIEB0eXBlOiAgICAgIFR5cGUgb2Ygb3BlcmF0aW9uLgotICogQGZpbGVuYW1lMTogRmlyc3QgZmlsZW5hbWUgdG8gY2hlY2suCi0gKiBAZmlsZW5hbWUyOiBTZWNvbmQgZmlsZW5hbWUgdG8gY2hlY2suCi0gKgotICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FUEVSTSBvdGhlcndpc2UuCi0gKgotICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KLSAqLwotc3RhdGljIGludCB0b21veW9fcGF0aDJfYWNsKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKLQkJCSAgICBjb25zdCB1OCB0eXBlLAotCQkJICAgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZTEsCi0JCQkgICAgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lMikKLXsKLQlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHI7Ci0JY29uc3QgdTggcGVybSA9IDEgPDwgdHlwZTsKLQlpbnQgZXJyb3IgPSAtRVBFUk07Ci0KLQlpZiAoIXRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19NQUNfRk9SX0ZJTEUpKQotCQlyZXR1cm4gMDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKLQkJc3RydWN0IHRvbW95b19wYXRoMl9hY2wgKmFjbDsKLQkJaWYgKHB0ci0+dHlwZSAhPSBUT01PWU9fVFlQRV9QQVRIMl9BQ0wpCi0JCQljb250aW51ZTsKLQkJYWNsID0gY29udGFpbmVyX29mKHB0ciwgc3RydWN0IHRvbW95b19wYXRoMl9hY2wsIGhlYWQpOwotCQlpZiAoIShhY2wtPnBlcm0gJiBwZXJtKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIXRvbW95b19jb21wYXJlX25hbWVfdW5pb24oZmlsZW5hbWUxLCAmYWNsLT5uYW1lMSkpCi0JCQljb250aW51ZTsKLQkJaWYgKCF0b21veW9fY29tcGFyZV9uYW1lX3VuaW9uKGZpbGVuYW1lMiwgJmFjbC0+bmFtZTIpKQotCQkJY29udGludWU7Ci0JCWVycm9yID0gMDsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiBlcnJvcjsKLX0KLQotLyoqCi0gKiB0b21veW9fcGF0aF9wZXJtaXNzaW9uMiAtIENoZWNrIHBlcm1pc3Npb24gZm9yIHNpbmdsZSBwYXRoIG9wZXJhdGlvbi4KLSAqCi0gKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEByOiAgICAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fcmVxdWVzdF9pbmZvIi4KICAqIEBvcGVyYXRpb246IFR5cGUgb2Ygb3BlcmF0aW9uLgogICogQGZpbGVuYW1lOiAgRmlsZW5hbWUgdG8gY2hlY2suCi0gKiBAbW9kZTogICAgICBBY2Nlc3MgY29udHJvbCBtb2RlLgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCiAgKgogICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwotc3RhdGljIGludCB0b21veW9fcGF0aF9wZXJtaXNzaW9uMihzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpjb25zdCBkb21haW4sCi0JCQkJICAgdTggb3BlcmF0aW9uLAotCQkJCSAgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSwKLQkJCQkgICBjb25zdCB1OCBtb2RlKQoraW50IHRvbW95b19wYXRoX3Blcm1pc3Npb24oc3RydWN0IHRvbW95b19yZXF1ZXN0X2luZm8gKnIsIHU4IG9wZXJhdGlvbiwKKwkJCSAgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSkKIHsKLQljb25zdCBjaGFyICptc2c7CiAJaW50IGVycm9yOwotCWNvbnN0IGJvb2wgaXNfZW5mb3JjZSA9IChtb2RlID09IDMpOwogCi0JaWYgKCFtb2RlKQotCQlyZXR1cm4gMDsKICBuZXh0OgotCWVycm9yID0gdG9tb3lvX3BhdGhfYWNsKGRvbWFpbiwgb3BlcmF0aW9uLCBmaWxlbmFtZSk7Ci0JbXNnID0gdG9tb3lvX3BhdGgya2V5d29yZChvcGVyYXRpb24pOwotCWlmICghZXJyb3IpCi0JCWdvdG8gb2s7Ci0JaWYgKHRvbW95b192ZXJib3NlX21vZGUoZG9tYWluKSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVE9NT1lPLSVzOiBBY2Nlc3MgJyVzICVzJyBkZW5pZWQgZm9yICVzXG4iLAotCQkgICAgICAgdG9tb3lvX2dldF9tc2coaXNfZW5mb3JjZSksIG1zZywgZmlsZW5hbWUtPm5hbWUsCi0JCSAgICAgICB0b21veW9fZ2V0X2xhc3RfbmFtZShkb21haW4pKTsKLQlpZiAobW9kZSA9PSAxICYmIHRvbW95b19kb21haW5fcXVvdGFfaXNfb2soZG9tYWluKSkgewotCQljb25zdCBjaGFyICpuYW1lID0gdG9tb3lvX2dldF9maWxlX3BhdHRlcm4oZmlsZW5hbWUpLT5uYW1lOwotCQl0b21veW9fdXBkYXRlX3BhdGhfYWNsKG9wZXJhdGlvbiwgbmFtZSwgZG9tYWluLCBmYWxzZSk7Ci0JfQotCWlmICghaXNfZW5mb3JjZSkKLQkJZXJyb3IgPSAwOwotIG9rOgorCXItPnR5cGUgPSB0b21veW9fcDJtYWNbb3BlcmF0aW9uXTsKKwlyLT5tb2RlID0gdG9tb3lvX2dldF9tb2RlKHItPnByb2ZpbGUsIHItPnR5cGUpOworCWlmIChyLT5tb2RlID09IFRPTU9ZT19DT05GSUdfRElTQUJMRUQpCisJCXJldHVybiAwOworCXItPnBhcmFtX3R5cGUgPSBUT01PWU9fVFlQRV9QQVRIX0FDTDsKKwlyLT5wYXJhbS5wYXRoLmZpbGVuYW1lID0gZmlsZW5hbWU7CisJci0+cGFyYW0ucGF0aC5vcGVyYXRpb24gPSBvcGVyYXRpb247CisJZG8geworCQl0b21veW9fY2hlY2tfYWNsKHIsIHRvbW95b19jaGVja19wYXRoX2FjbCk7CisJCWlmICghci0+Z3JhbnRlZCAmJiBvcGVyYXRpb24gPT0gVE9NT1lPX1RZUEVfUkVBRCAmJgorCQkgICAgIXItPmRvbWFpbi0+aWdub3JlX2dsb2JhbF9hbGxvd19yZWFkICYmCisJCSAgICB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZShmaWxlbmFtZSkpCisJCQlyLT5ncmFudGVkID0gdHJ1ZTsKKwkJZXJyb3IgPSB0b21veW9fYXVkaXRfcGF0aF9sb2cocik7CisJCS8qCisJCSAqIERvIG5vdCByZXRyeSBmb3IgZXhlY3V0ZSByZXF1ZXN0LCBmb3IgYWxpYXMgbWF5IGhhdmUKKwkJICogY2hhbmdlZC4KKwkJICovCisJfSB3aGlsZSAoZXJyb3IgPT0gVE9NT1lPX1JFVFJZX1JFUVVFU1QgJiYKKwkJIG9wZXJhdGlvbiAhPSBUT01PWU9fVFlQRV9FWEVDVVRFKTsKIAkvKgogCSAqIFNpbmNlICJhbGxvd190cnVuY2F0ZSIgZG9lc24ndCBpbXBseSAiYWxsb3dfcmV3cml0ZSIgcGVybWlzc2lvbiwKIAkgKiB3ZSBuZWVkIHRvIGNoZWNrICJhbGxvd19yZXdyaXRlIiBwZXJtaXNzaW9uIGlmIHRoZSBmaWxlbmFtZSBpcwogCSAqIHNwZWNpZmllZCBieSAiZGVueV9yZXdyaXRlIiBrZXl3b3JkLgogCSAqLwogCWlmICghZXJyb3IgJiYgb3BlcmF0aW9uID09IFRPTU9ZT19UWVBFX1RSVU5DQVRFICYmCi0JICAgIHRvbW95b19pc19ub19yZXdyaXRlX2ZpbGUoZmlsZW5hbWUpKSB7CisJICAgIHRvbW95b19ub19yZXdyaXRlX2ZpbGUoZmlsZW5hbWUpKSB7CiAJCW9wZXJhdGlvbiA9IFRPTU9ZT19UWVBFX1JFV1JJVEU7CiAJCWdvdG8gbmV4dDsKIAl9CiAJcmV0dXJuIGVycm9yOwogfQogCi0vKioKLSAqIHRvbW95b19jaGVja19leGVjX3Blcm0gLSBDaGVjayBwZXJtaXNzaW9uIGZvciAiZXhlY3V0ZSIuCi0gKgotICogQGRvbWFpbjogICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KLSAqIEBmaWxlbmFtZTogQ2hlY2sgcGVybWlzc2lvbiBmb3IgImV4ZWN1dGUiLgotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZXZhbHVlIG90aGVyd2lzZS4KLSAqCi0gKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgotICovCi1pbnQgdG9tb3lvX2NoZWNrX2V4ZWNfcGVybShzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCi0JCQkgICBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUpCitzdGF0aWMgYm9vbCB0b21veW9fc2FtZV9wYXRoX251bWJlcl9hY2woY29uc3Qgc3RydWN0IHRvbW95b19hY2xfaW5mbyAqYSwKKwkJCQkJY29uc3Qgc3RydWN0IHRvbW95b19hY2xfaW5mbyAqYikKIHsKLQljb25zdCB1OCBtb2RlID0gdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSk7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX251bWJlcl9hY2wgKnAxID0gY29udGFpbmVyX29mKGEsIHR5cGVvZigqcDEpLAorCQkJCQkJCSAgICAgICBoZWFkKTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfbnVtYmVyX2FjbCAqcDIgPSBjb250YWluZXJfb2YoYiwgdHlwZW9mKCpwMiksCisJCQkJCQkJICAgICAgIGhlYWQpOworCXJldHVybiB0b21veW9fc2FtZV9hY2xfaGVhZCgmcDEtPmhlYWQsICZwMi0+aGVhZCkKKwkJJiYgdG9tb3lvX3NhbWVfbmFtZV91bmlvbigmcDEtPm5hbWUsICZwMi0+bmFtZSkKKwkJJiYgdG9tb3lvX3NhbWVfbnVtYmVyX3VuaW9uKCZwMS0+bnVtYmVyLCAmcDItPm51bWJlcik7Cit9CiAKLQlpZiAoIW1vZGUpCitzdGF0aWMgYm9vbCB0b21veW9fbWVyZ2VfcGF0aF9udW1iZXJfYWNsKHN0cnVjdCB0b21veW9fYWNsX2luZm8gKmEsCisJCQkJCSBzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpiLAorCQkJCQkgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJdTggKiBjb25zdCBhX3Blcm0gPSAmY29udGFpbmVyX29mKGEsIHN0cnVjdCB0b21veW9fcGF0aF9udW1iZXJfYWNsLAorCQkJCQkgIGhlYWQpLT5wZXJtOworCXU4IHBlcm0gPSAqYV9wZXJtOworCWNvbnN0IHU4IGJfcGVybSA9IGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3QgdG9tb3lvX3BhdGhfbnVtYmVyX2FjbCwgaGVhZCkKKwkJLT5wZXJtOworCWlmIChpc19kZWxldGUpCisJCXBlcm0gJj0gfmJfcGVybTsKKwllbHNlCisJCXBlcm0gfD0gYl9wZXJtOworCSphX3Blcm0gPSBwZXJtOworCXJldHVybiAhcGVybTsKK30KKworLyoqCisgKiB0b21veW9fdXBkYXRlX3BhdGhfbnVtYmVyX2FjbCAtIFVwZGF0ZSBpb2N0bC9jaG1vZC9jaG93bi9jaGdycCBBQ0wuCisgKgorICogQHR5cGU6ICAgICAgVHlwZSBvZiBvcGVyYXRpb24uCisgKiBAZmlsZW5hbWU6ICBGaWxlbmFtZS4KKyAqIEBudW1iZXI6ICAgIE51bWJlci4KKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9wYXRoX251bWJlcl9hY2woY29uc3QgdTggdHlwZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJCSBjaGFyICpudW1iZXIsCisJCQkJCSBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICogY29uc3QKKwkJCQkJIGRvbWFpbiwKKwkJCQkJIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCXN0cnVjdCB0b21veW9fcGF0aF9udW1iZXJfYWNsIGUgPSB7CisJCS5oZWFkLnR5cGUgPSBUT01PWU9fVFlQRV9QQVRIX05VTUJFUl9BQ0wsCisJCS5wZXJtID0gMSA8PCB0eXBlCisJfTsKKwlpbnQgZXJyb3IgPSBpc19kZWxldGUgPyAtRU5PRU5UIDogLUVOT01FTTsKKwlpZiAoIXRvbW95b19wYXJzZV9uYW1lX3VuaW9uKGZpbGVuYW1lLCAmZS5uYW1lKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCF0b21veW9fcGFyc2VfbnVtYmVyX3VuaW9uKG51bWJlciwgJmUubnVtYmVyKSkKKwkJZ290byBvdXQ7CisJZXJyb3IgPSB0b21veW9fdXBkYXRlX2RvbWFpbigmZS5oZWFkLCBzaXplb2YoZSksIGlzX2RlbGV0ZSwgZG9tYWluLAorCQkJCSAgICAgdG9tb3lvX3NhbWVfcGF0aF9udW1iZXJfYWNsLAorCQkJCSAgICAgdG9tb3lvX21lcmdlX3BhdGhfbnVtYmVyX2FjbCk7Cisgb3V0OgorCXRvbW95b19wdXRfbmFtZV91bmlvbigmZS5uYW1lKTsKKwl0b21veW9fcHV0X251bWJlcl91bmlvbigmZS5udW1iZXIpOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fcGF0aF9udW1iZXJfcGVybSAtIENoZWNrIHBlcm1pc3Npb24gZm9yICJjcmVhdGUiLCAibWtkaXIiLCAibWtmaWZvIiwgIm1rc29jayIsICJpb2N0bCIsICJjaG1vZCIsICJjaG93biIsICJjaGdycCIuCisgKgorICogQHR5cGU6ICAgVHlwZSBvZiBvcGVyYXRpb24uCisgKiBAcGF0aDogICBQb2ludGVyIHRvICJzdHJ1Y3QgcGF0aCIuCisgKiBAbnVtYmVyOiBOdW1iZXIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b19wYXRoX251bWJlcl9wZXJtKGNvbnN0IHU4IHR5cGUsIHN0cnVjdCBwYXRoICpwYXRoLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgbnVtYmVyKQoreworCXN0cnVjdCB0b21veW9fcmVxdWVzdF9pbmZvIHI7CisJaW50IGVycm9yID0gLUVOT01FTTsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBidWY7CisJaW50IGlkeDsKKworCWlmICh0b21veW9faW5pdF9yZXF1ZXN0X2luZm8oJnIsIE5VTEwsIHRvbW95b19wbjJtYWNbdHlwZV0pCisJICAgID09IFRPTU9ZT19DT05GSUdfRElTQUJMRUQgfHwgIXBhdGgtPm1udCB8fCAhcGF0aC0+ZGVudHJ5KQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gdG9tb3lvX2NoZWNrX2ZpbGVfcGVybTIoZG9tYWluLCBmaWxlbmFtZSwgMSwgImRvX2V4ZWN2ZSIsIG1vZGUpOworCWlkeCA9IHRvbW95b19yZWFkX2xvY2soKTsKKwlpZiAoIXRvbW95b19nZXRfcmVhbHBhdGgoJmJ1ZiwgcGF0aCkpCisJCWdvdG8gb3V0OworCWlmICh0eXBlID09IFRPTU9ZT19UWVBFX01LRElSKQorCQl0b21veW9fYWRkX3NsYXNoKCZidWYpOworCXIucGFyYW1fdHlwZSA9IFRPTU9ZT19UWVBFX1BBVEhfTlVNQkVSX0FDTDsKKwlyLnBhcmFtLnBhdGhfbnVtYmVyLm9wZXJhdGlvbiA9IHR5cGU7CisJci5wYXJhbS5wYXRoX251bWJlci5maWxlbmFtZSA9ICZidWY7CisJci5wYXJhbS5wYXRoX251bWJlci5udW1iZXIgPSBudW1iZXI7CisJZG8geworCQl0b21veW9fY2hlY2tfYWNsKCZyLCB0b21veW9fY2hlY2tfcGF0aF9udW1iZXJfYWNsKTsKKwkJZXJyb3IgPSB0b21veW9fYXVkaXRfcGF0aF9udW1iZXJfbG9nKCZyKTsKKwl9IHdoaWxlIChlcnJvciA9PSBUT01PWU9fUkVUUllfUkVRVUVTVCk7CisJa2ZyZWUoYnVmLm5hbWUpOworIG91dDoKKwl0b21veW9fcmVhZF91bmxvY2soaWR4KTsKKwlpZiAoci5tb2RlICE9IFRPTU9ZT19DT05GSUdfRU5GT1JDSU5HKQorCQllcnJvciA9IDA7CisJcmV0dXJuIGVycm9yOwogfQogCiAvKioKQEAgLTEwOTYsMjQgKzkyOCwxNyBAQAogewogCWNvbnN0IHU4IGFjY19tb2RlID0gQUNDX01PREUoZmxhZyk7CiAJaW50IGVycm9yID0gLUVOT01FTTsKLQlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqYnVmOwotCWNvbnN0IHU4IG1vZGUgPSB0b21veW9fY2hlY2tfZmxhZ3MoZG9tYWluLCBUT01PWU9fTUFDX0ZPUl9GSUxFKTsKLQljb25zdCBib29sIGlzX2VuZm9yY2UgPSAobW9kZSA9PSAzKTsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBidWY7CisJc3RydWN0IHRvbW95b19yZXF1ZXN0X2luZm8gcjsKIAlpbnQgaWR4OwogCi0JaWYgKCFtb2RlIHx8ICFwYXRoLT5tbnQpCisJaWYgKCFwYXRoLT5tbnQgfHwKKwkgICAgKHBhdGgtPmRlbnRyeS0+ZF9pbm9kZSAmJiBTX0lTRElSKHBhdGgtPmRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkpCiAJCXJldHVybiAwOwotCWlmIChhY2NfbW9kZSA9PSAwKQotCQlyZXR1cm4gMDsKLQlpZiAocGF0aC0+ZGVudHJ5LT5kX2lub2RlICYmIFNfSVNESVIocGF0aC0+ZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQotCQkvKgotCQkgKiBJIGRvbid0IGNoZWNrIGRpcmVjdG9yaWVzIGhlcmUgYmVjYXVzZSBta2RpcigpIGFuZCBybWRpcigpCi0JCSAqIGRvbid0IGNhbGwgbWUuCi0JCSAqLwotCQlyZXR1cm4gMDsKKwlidWYubmFtZSA9IE5VTEw7CisJci5tb2RlID0gVE9NT1lPX0NPTkZJR19ESVNBQkxFRDsKIAlpZHggPSB0b21veW9fcmVhZF9sb2NrKCk7Ci0JYnVmID0gdG9tb3lvX2dldF9wYXRoKHBhdGgpOwotCWlmICghYnVmKQorCWlmICghdG9tb3lvX2dldF9yZWFscGF0aCgmYnVmLCBwYXRoKSkKIAkJZ290byBvdXQ7CiAJZXJyb3IgPSAwOwogCS8qCkBAIC0xMTIxLDI4ICs5NDYsNDMgQEAKIAkgKiB3ZSBuZWVkIHRvIGNoZWNrICJhbGxvd19yZXdyaXRlIiBwZXJtaXNzaW9uIHdoZW4gdGhlIGZpbGVuYW1lIGlzIG5vdAogCSAqIG9wZW5lZCBmb3IgYXBwZW5kIG1vZGUgb3IgdGhlIGZpbGVuYW1lIGlzIHRydW5jYXRlZCBhdCBvcGVuIHRpbWUuCiAJICovCi0JaWYgKChhY2NfbW9kZSAmIE1BWV9XUklURSkgJiYKLQkgICAgKChmbGFnICYgT19UUlVOQykgfHwgIShmbGFnICYgT19BUFBFTkQpKSAmJgotCSAgICAodG9tb3lvX2lzX25vX3Jld3JpdGVfZmlsZShidWYpKSkgewotCQllcnJvciA9IHRvbW95b19wYXRoX3Blcm1pc3Npb24yKGRvbWFpbiwgVE9NT1lPX1RZUEVfUkVXUklURSwKLQkJCQkJCWJ1ZiwgbW9kZSk7CisJaWYgKChhY2NfbW9kZSAmIE1BWV9XUklURSkgJiYgIShmbGFnICYgT19BUFBFTkQpCisJICAgICYmIHRvbW95b19pbml0X3JlcXVlc3RfaW5mbygmciwgZG9tYWluLCBUT01PWU9fTUFDX0ZJTEVfUkVXUklURSkKKwkgICAgIT0gVE9NT1lPX0NPTkZJR19ESVNBQkxFRCkgeworCQlpZiAoIXRvbW95b19nZXRfcmVhbHBhdGgoJmJ1ZiwgcGF0aCkpIHsKKwkJCWVycm9yID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmICh0b21veW9fbm9fcmV3cml0ZV9maWxlKCZidWYpKQorCQkJZXJyb3IgPSB0b21veW9fcGF0aF9wZXJtaXNzaW9uKCZyLCBUT01PWU9fVFlQRV9SRVdSSVRFLAorCQkJCQkJICAgICAgICZidWYpOwogCX0KLQlpZiAoIWVycm9yKQotCQllcnJvciA9IHRvbW95b19jaGVja19maWxlX3Blcm0yKGRvbWFpbiwgYnVmLCBhY2NfbW9kZSwgIm9wZW4iLAotCQkJCQkJbW9kZSk7Ci0JaWYgKCFlcnJvciAmJiAoZmxhZyAmIE9fVFJVTkMpKQotCQllcnJvciA9IHRvbW95b19wYXRoX3Blcm1pc3Npb24yKGRvbWFpbiwgVE9NT1lPX1RZUEVfVFJVTkNBVEUsCi0JCQkJCQlidWYsIG1vZGUpOworCWlmICghZXJyb3IgJiYgYWNjX21vZGUgJiYKKwkgICAgdG9tb3lvX2luaXRfcmVxdWVzdF9pbmZvKCZyLCBkb21haW4sIFRPTU9ZT19NQUNfRklMRV9PUEVOKQorCSAgICAhPSBUT01PWU9fQ09ORklHX0RJU0FCTEVEKSB7CisJCXU4IG9wZXJhdGlvbjsKKwkJaWYgKCFidWYubmFtZSAmJiAhdG9tb3lvX2dldF9yZWFscGF0aCgmYnVmLCBwYXRoKSkgeworCQkJZXJyb3IgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKGFjY19tb2RlID09IChNQVlfUkVBRCB8IE1BWV9XUklURSkpCisJCQlvcGVyYXRpb24gPSBUT01PWU9fVFlQRV9SRUFEX1dSSVRFOworCQllbHNlIGlmIChhY2NfbW9kZSA9PSBNQVlfUkVBRCkKKwkJCW9wZXJhdGlvbiA9IFRPTU9ZT19UWVBFX1JFQUQ7CisJCWVsc2UKKwkJCW9wZXJhdGlvbiA9IFRPTU9ZT19UWVBFX1dSSVRFOworCQllcnJvciA9IHRvbW95b19wYXRoX3Blcm1pc3Npb24oJnIsIG9wZXJhdGlvbiwgJmJ1Zik7CisJfQogIG91dDoKLQlrZnJlZShidWYpOworCWtmcmVlKGJ1Zi5uYW1lKTsKIAl0b21veW9fcmVhZF91bmxvY2soaWR4KTsKLQlpZiAoIWlzX2VuZm9yY2UpCisJaWYgKHIubW9kZSAhPSBUT01PWU9fQ09ORklHX0VORk9SQ0lORykKIAkJZXJyb3IgPSAwOwogCXJldHVybiBlcnJvcjsKIH0KIAogLyoqCi0gKiB0b21veW9fcGF0aF9wZXJtIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3IgImNyZWF0ZSIsICJ1bmxpbmsiLCAibWtkaXIiLCAicm1kaXIiLCAibWtmaWZvIiwgIm1rc29jayIsICJta2Jsb2NrIiwgIm1rY2hhciIsICJ0cnVuY2F0ZSIsICJzeW1saW5rIiwgImlvY3RsIiwgImNobW9kIiwgImNob3duIiwgImNoZ3JwIiwgImNocm9vdCIsICJtb3VudCIgYW5kICJ1bm1vdW50Ii4KKyAqIHRvbW95b19wYXRoX3Blcm0gLSBDaGVjayBwZXJtaXNzaW9uIGZvciAidW5saW5rIiwgInJtZGlyIiwgInRydW5jYXRlIiwgInN5bWxpbmsiLCAicmV3cml0ZSIsICJjaHJvb3QiIGFuZCAidW5tb3VudCIuCiAgKgogICogQG9wZXJhdGlvbjogVHlwZSBvZiBvcGVyYXRpb24uCiAgKiBAcGF0aDogICAgICBQb2ludGVyIHRvICJzdHJ1Y3QgcGF0aCIuCkBAIC0xMTUyLDcxICs5OTIsNzkgQEAKIGludCB0b21veW9fcGF0aF9wZXJtKGNvbnN0IHU4IG9wZXJhdGlvbiwgc3RydWN0IHBhdGggKnBhdGgpCiB7CiAJaW50IGVycm9yID0gLUVOT01FTTsKLQlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqYnVmOwotCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiA9IHRvbW95b19kb21haW4oKTsKLQljb25zdCB1OCBtb2RlID0gdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSk7Ci0JY29uc3QgYm9vbCBpc19lbmZvcmNlID0gKG1vZGUgPT0gMyk7CisJc3RydWN0IHRvbW95b19wYXRoX2luZm8gYnVmOworCXN0cnVjdCB0b21veW9fcmVxdWVzdF9pbmZvIHI7CiAJaW50IGlkeDsKIAotCWlmICghbW9kZSB8fCAhcGF0aC0+bW50KQorCWlmICghcGF0aC0+bW50KQogCQlyZXR1cm4gMDsKKwlpZiAodG9tb3lvX2luaXRfcmVxdWVzdF9pbmZvKCZyLCBOVUxMLCB0b21veW9fcDJtYWNbb3BlcmF0aW9uXSkKKwkgICAgPT0gVE9NT1lPX0NPTkZJR19ESVNBQkxFRCkKKwkJcmV0dXJuIDA7CisJYnVmLm5hbWUgPSBOVUxMOwogCWlkeCA9IHRvbW95b19yZWFkX2xvY2soKTsKLQlidWYgPSB0b21veW9fZ2V0X3BhdGgocGF0aCk7Ci0JaWYgKCFidWYpCisJaWYgKCF0b21veW9fZ2V0X3JlYWxwYXRoKCZidWYsIHBhdGgpKQogCQlnb3RvIG91dDsKIAlzd2l0Y2ggKG9wZXJhdGlvbikgewotCWNhc2UgVE9NT1lPX1RZUEVfTUtESVI6CisJY2FzZSBUT01PWU9fVFlQRV9SRVdSSVRFOgorCQlpZiAoIXRvbW95b19ub19yZXdyaXRlX2ZpbGUoJmJ1ZikpIHsKKwkJCWVycm9yID0gMDsKKwkJCWdvdG8gb3V0OworCQl9CisJCWJyZWFrOwogCWNhc2UgVE9NT1lPX1RZUEVfUk1ESVI6CiAJY2FzZSBUT01PWU9fVFlQRV9DSFJPT1Q6Ci0JCWlmICghYnVmLT5pc19kaXIpIHsKLQkJCS8qCi0JCQkgKiB0b21veW9fZ2V0X3BhdGgoKSByZXNlcnZlcyBzcGFjZSBmb3IgYXBwZW5kaW5nICIvLiIKLQkJCSAqLwotCQkJc3RyY2F0KChjaGFyICopIGJ1Zi0+bmFtZSwgIi8iKTsKLQkJCXRvbW95b19maWxsX3BhdGhfaW5mbyhidWYpOwotCQl9CisJY2FzZSBUT01PWU9fVFlQRV9VTU9VTlQ6CisJCXRvbW95b19hZGRfc2xhc2goJmJ1Zik7CisJCWJyZWFrOwogCX0KLQllcnJvciA9IHRvbW95b19wYXRoX3Blcm1pc3Npb24yKGRvbWFpbiwgb3BlcmF0aW9uLCBidWYsIG1vZGUpOworCWVycm9yID0gdG9tb3lvX3BhdGhfcGVybWlzc2lvbigmciwgb3BlcmF0aW9uLCAmYnVmKTsKICBvdXQ6Ci0Ja2ZyZWUoYnVmKTsKKwlrZnJlZShidWYubmFtZSk7CiAJdG9tb3lvX3JlYWRfdW5sb2NrKGlkeCk7Ci0JaWYgKCFpc19lbmZvcmNlKQorCWlmIChyLm1vZGUgIT0gVE9NT1lPX0NPTkZJR19FTkZPUkNJTkcpCiAJCWVycm9yID0gMDsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKIC8qKgotICogdG9tb3lvX2NoZWNrX3Jld3JpdGVfcGVybWlzc2lvbiAtIENoZWNrIHBlcm1pc3Npb24gZm9yICJyZXdyaXRlIi4KKyAqIHRvbW95b19ta2Rldl9wZXJtIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3IgIm1rYmxvY2siIGFuZCAibWtjaGFyIi4KICAqCi0gKiBAZmlscDogUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgorICogQG9wZXJhdGlvbjogVHlwZSBvZiBvcGVyYXRpb24uIChUT01PWU9fVFlQRV9NS0NIQVIgb3IgVE9NT1lPX1RZUEVfTUtCTE9DSykKKyAqIEBwYXRoOiAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCBwYXRoIi4KKyAqIEBtb2RlOiAgICAgIENyZWF0ZSBtb2RlLgorICogQGRldjogICAgICAgRGV2aWNlIG51bWJlci4KICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgogICovCi1pbnQgdG9tb3lvX2NoZWNrX3Jld3JpdGVfcGVybWlzc2lvbihzdHJ1Y3QgZmlsZSAqZmlscCkKK2ludCB0b21veW9fbWtkZXZfcGVybShjb25zdCB1OCBvcGVyYXRpb24sIHN0cnVjdCBwYXRoICpwYXRoLAorCQkJICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbW9kZSwgdW5zaWduZWQgaW50IGRldikKIHsKKwlzdHJ1Y3QgdG9tb3lvX3JlcXVlc3RfaW5mbyByOwogCWludCBlcnJvciA9IC1FTk9NRU07Ci0Jc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluID0gdG9tb3lvX2RvbWFpbigpOwotCWNvbnN0IHU4IG1vZGUgPSB0b21veW9fY2hlY2tfZmxhZ3MoZG9tYWluLCBUT01PWU9fTUFDX0ZPUl9GSUxFKTsKLQljb25zdCBib29sIGlzX2VuZm9yY2UgPSAobW9kZSA9PSAzKTsKLQlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqYnVmOworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvIGJ1ZjsKIAlpbnQgaWR4OwogCi0JaWYgKCFtb2RlIHx8ICFmaWxwLT5mX3BhdGgubW50KQorCWlmICghcGF0aC0+bW50IHx8CisJICAgIHRvbW95b19pbml0X3JlcXVlc3RfaW5mbygmciwgTlVMTCwgdG9tb3lvX3Bubm4ybWFjW29wZXJhdGlvbl0pCisJICAgID09IFRPTU9ZT19DT05GSUdfRElTQUJMRUQpCiAJCXJldHVybiAwOwotCiAJaWR4ID0gdG9tb3lvX3JlYWRfbG9jaygpOwotCWJ1ZiA9IHRvbW95b19nZXRfcGF0aCgmZmlscC0+Zl9wYXRoKTsKLQlpZiAoIWJ1ZikKLQkJZ290byBvdXQ7Ci0JaWYgKCF0b21veW9faXNfbm9fcmV3cml0ZV9maWxlKGJ1ZikpIHsKLQkJZXJyb3IgPSAwOwotCQlnb3RvIG91dDsKKwllcnJvciA9IC1FTk9NRU07CisJaWYgKHRvbW95b19nZXRfcmVhbHBhdGgoJmJ1ZiwgcGF0aCkpIHsKKwkJZGV2ID0gbmV3X2RlY29kZV9kZXYoZGV2KTsKKwkJci5wYXJhbV90eXBlID0gVE9NT1lPX1RZUEVfTUtERVZfQUNMOworCQlyLnBhcmFtLm1rZGV2LmZpbGVuYW1lID0gJmJ1ZjsKKwkJci5wYXJhbS5ta2Rldi5vcGVyYXRpb24gPSBvcGVyYXRpb247CisJCXIucGFyYW0ubWtkZXYubW9kZSA9IG1vZGU7CisJCXIucGFyYW0ubWtkZXYubWFqb3IgPSBNQUpPUihkZXYpOworCQlyLnBhcmFtLm1rZGV2Lm1pbm9yID0gTUlOT1IoZGV2KTsKKwkJdG9tb3lvX2NoZWNrX2FjbCgmciwgdG9tb3lvX2NoZWNrX21rZGV2X2FjbCk7CisJCWVycm9yID0gdG9tb3lvX2F1ZGl0X21rZGV2X2xvZygmcik7CisJCWtmcmVlKGJ1Zi5uYW1lKTsKIAl9Ci0JZXJyb3IgPSB0b21veW9fcGF0aF9wZXJtaXNzaW9uMihkb21haW4sIFRPTU9ZT19UWVBFX1JFV1JJVEUsIGJ1ZiwgbW9kZSk7Ci0gb3V0OgotCWtmcmVlKGJ1Zik7CiAJdG9tb3lvX3JlYWRfdW5sb2NrKGlkeCk7Ci0JaWYgKCFpc19lbmZvcmNlKQorCWlmIChyLm1vZGUgIT0gVE9NT1lPX0NPTkZJR19FTkZPUkNJTkcpCiAJCWVycm9yID0gMDsKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0xMjM0LDU2ICsxMDgyLDk5IEBACiAJCSAgICAgIHN0cnVjdCBwYXRoICpwYXRoMikKIHsKIAlpbnQgZXJyb3IgPSAtRU5PTUVNOwotCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpidWYxLCAqYnVmMjsKLQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4gPSB0b21veW9fZG9tYWluKCk7Ci0JY29uc3QgdTggbW9kZSA9IHRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19NQUNfRk9SX0ZJTEUpOwotCWNvbnN0IGJvb2wgaXNfZW5mb3JjZSA9IChtb2RlID09IDMpOwotCWNvbnN0IGNoYXIgKm1zZzsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBidWYxOworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvIGJ1ZjI7CisJc3RydWN0IHRvbW95b19yZXF1ZXN0X2luZm8gcjsKIAlpbnQgaWR4OwogCi0JaWYgKCFtb2RlIHx8ICFwYXRoMS0+bW50IHx8ICFwYXRoMi0+bW50KQorCWlmICghcGF0aDEtPm1udCB8fCAhcGF0aDItPm1udCB8fAorCSAgICB0b21veW9faW5pdF9yZXF1ZXN0X2luZm8oJnIsIE5VTEwsIHRvbW95b19wcDJtYWNbb3BlcmF0aW9uXSkKKwkgICAgPT0gVE9NT1lPX0NPTkZJR19ESVNBQkxFRCkKIAkJcmV0dXJuIDA7CisJYnVmMS5uYW1lID0gTlVMTDsKKwlidWYyLm5hbWUgPSBOVUxMOwogCWlkeCA9IHRvbW95b19yZWFkX2xvY2soKTsKLQlidWYxID0gdG9tb3lvX2dldF9wYXRoKHBhdGgxKTsKLQlidWYyID0gdG9tb3lvX2dldF9wYXRoKHBhdGgyKTsKLQlpZiAoIWJ1ZjEgfHwgIWJ1ZjIpCisJaWYgKCF0b21veW9fZ2V0X3JlYWxwYXRoKCZidWYxLCBwYXRoMSkgfHwKKwkgICAgIXRvbW95b19nZXRfcmVhbHBhdGgoJmJ1ZjIsIHBhdGgyKSkKIAkJZ290byBvdXQ7Ci0JewotCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBwYXRoMS0+ZGVudHJ5OwotCQlpZiAoZGVudHJ5LT5kX2lub2RlICYmIFNfSVNESVIoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKSB7Ci0JCQkvKgotCQkJICogdG9tb3lvX2dldF9wYXRoKCkgcmVzZXJ2ZXMgc3BhY2UgZm9yIGFwcGVuZGluZyAiLy4iCi0JCQkgKi8KLQkJCWlmICghYnVmMS0+aXNfZGlyKSB7Ci0JCQkJc3RyY2F0KChjaGFyICopIGJ1ZjEtPm5hbWUsICIvIik7Ci0JCQkJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKGJ1ZjEpOwotCQkJfQotCQkJaWYgKCFidWYyLT5pc19kaXIpIHsKLQkJCQlzdHJjYXQoKGNoYXIgKikgYnVmMi0+bmFtZSwgIi8iKTsKLQkJCQl0b21veW9fZmlsbF9wYXRoX2luZm8oYnVmMik7Ci0JCQl9Ci0JCX0KLQl9Ci0JZXJyb3IgPSB0b21veW9fcGF0aDJfYWNsKGRvbWFpbiwgb3BlcmF0aW9uLCBidWYxLCBidWYyKTsKLQltc2cgPSB0b21veW9fcGF0aDIya2V5d29yZChvcGVyYXRpb24pOwotCWlmICghZXJyb3IpCi0JCWdvdG8gb3V0OwotCWlmICh0b21veW9fdmVyYm9zZV9tb2RlKGRvbWFpbikpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlRPTU9ZTy0lczogQWNjZXNzICclcyAlcyAlcycgIgotCQkgICAgICAgImRlbmllZCBmb3IgJXNcbiIsIHRvbW95b19nZXRfbXNnKGlzX2VuZm9yY2UpLAotCQkgICAgICAgbXNnLCBidWYxLT5uYW1lLCBidWYyLT5uYW1lLAotCQkgICAgICAgdG9tb3lvX2dldF9sYXN0X25hbWUoZG9tYWluKSk7Ci0JaWYgKG1vZGUgPT0gMSAmJiB0b21veW9fZG9tYWluX3F1b3RhX2lzX29rKGRvbWFpbikpIHsKLQkJY29uc3QgY2hhciAqbmFtZTEgPSB0b21veW9fZ2V0X2ZpbGVfcGF0dGVybihidWYxKS0+bmFtZTsKLQkJY29uc3QgY2hhciAqbmFtZTIgPSB0b21veW9fZ2V0X2ZpbGVfcGF0dGVybihidWYyKS0+bmFtZTsKLQkJdG9tb3lvX3VwZGF0ZV9wYXRoMl9hY2wob3BlcmF0aW9uLCBuYW1lMSwgbmFtZTIsIGRvbWFpbiwKLQkJCQkJZmFsc2UpOwotCX0KKwlzd2l0Y2ggKG9wZXJhdGlvbikgeworCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisJY2FzZSBUT01PWU9fVFlQRV9SRU5BTUU6CisgICAgICAgIGNhc2UgVE9NT1lPX1RZUEVfTElOSzoKKwkJZGVudHJ5ID0gcGF0aDEtPmRlbnRyeTsKKwkgICAgICAgIGlmICghZGVudHJ5LT5kX2lub2RlIHx8ICFTX0lTRElSKGRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgICAgICBjYXNlIFRPTU9ZT19UWVBFX1BJVk9UX1JPT1Q6CisgICAgICAgICAgICAgICAgdG9tb3lvX2FkZF9zbGFzaCgmYnVmMSk7CisgICAgICAgICAgICAgICAgdG9tb3lvX2FkZF9zbGFzaCgmYnVmMik7CisJCWJyZWFrOworICAgICAgICB9CisJci5wYXJhbV90eXBlID0gVE9NT1lPX1RZUEVfUEFUSDJfQUNMOworCXIucGFyYW0ucGF0aDIub3BlcmF0aW9uID0gb3BlcmF0aW9uOworCXIucGFyYW0ucGF0aDIuZmlsZW5hbWUxID0gJmJ1ZjE7CisJci5wYXJhbS5wYXRoMi5maWxlbmFtZTIgPSAmYnVmMjsKKwlkbyB7CisJCXRvbW95b19jaGVja19hY2woJnIsIHRvbW95b19jaGVja19wYXRoMl9hY2wpOworCQllcnJvciA9IHRvbW95b19hdWRpdF9wYXRoMl9sb2coJnIpOworCX0gd2hpbGUgKGVycm9yID09IFRPTU9ZT19SRVRSWV9SRVFVRVNUKTsKICBvdXQ6Ci0Ja2ZyZWUoYnVmMSk7Ci0Ja2ZyZWUoYnVmMik7CisJa2ZyZWUoYnVmMS5uYW1lKTsKKwlrZnJlZShidWYyLm5hbWUpOwogCXRvbW95b19yZWFkX3VubG9jayhpZHgpOwotCWlmICghaXNfZW5mb3JjZSkKKwlpZiAoci5tb2RlICE9IFRPTU9ZT19DT05GSUdfRU5GT1JDSU5HKQogCQllcnJvciA9IDA7CiAJcmV0dXJuIGVycm9yOwogfQorCisvKioKKyAqIHRvbW95b193cml0ZV9maWxlIC0gVXBkYXRlIGZpbGUgcmVsYXRlZCBsaXN0LgorICoKKyAqIEBkYXRhOiAgICAgIFN0cmluZyB0byBwYXJzZS4KKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KKyAqLworaW50IHRvbW95b193cml0ZV9maWxlKGNoYXIgKmRhdGEsIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJICAgICAgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJY2hhciAqd1s1XTsKKwl1OCB0eXBlOworCWlmICghdG9tb3lvX3Rva2VuaXplKGRhdGEsIHcsIHNpemVvZih3KSkgfHwgIXdbMV1bMF0pCisJCXJldHVybiAtRUlOVkFMOworCWlmIChzdHJuY21wKHdbMF0sICJhbGxvd18iLCA2KSkKKwkJZ290byBvdXQ7CisJd1swXSArPSA2OworCWZvciAodHlwZSA9IDA7IHR5cGUgPCBUT01PWU9fTUFYX1BBVEhfT1BFUkFUSU9OOyB0eXBlKyspIHsKKwkJaWYgKHN0cmNtcCh3WzBdLCB0b21veW9fcGF0aF9rZXl3b3JkW3R5cGVdKSkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9wYXRoX2FjbCh0eXBlLCB3WzFdLCBkb21haW4sIGlzX2RlbGV0ZSk7CisJfQorCWlmICghd1syXVswXSkKKwkJZ290byBvdXQ7CisJZm9yICh0eXBlID0gMDsgdHlwZSA8IFRPTU9ZT19NQVhfUEFUSDJfT1BFUkFUSU9OOyB0eXBlKyspIHsKKwkJaWYgKHN0cmNtcCh3WzBdLCB0b21veW9fcGF0aDJfa2V5d29yZFt0eXBlXSkpCisJCQljb250aW51ZTsKKwkJcmV0dXJuIHRvbW95b191cGRhdGVfcGF0aDJfYWNsKHR5cGUsIHdbMV0sIHdbMl0sIGRvbWFpbiwKKwkJCQkJICAgICAgIGlzX2RlbGV0ZSk7CisJfQorCWZvciAodHlwZSA9IDA7IHR5cGUgPCBUT01PWU9fTUFYX1BBVEhfTlVNQkVSX09QRVJBVElPTjsgdHlwZSsrKSB7CisJCWlmIChzdHJjbXAod1swXSwgdG9tb3lvX3BhdGhfbnVtYmVyX2tleXdvcmRbdHlwZV0pKQorCQkJY29udGludWU7CisJCXJldHVybiB0b21veW9fdXBkYXRlX3BhdGhfbnVtYmVyX2FjbCh0eXBlLCB3WzFdLCB3WzJdLCBkb21haW4sCisJCQkJCQkgICAgIGlzX2RlbGV0ZSk7CisJfQorCWlmICghd1szXVswXSB8fCAhd1s0XVswXSkKKwkJZ290byBvdXQ7CisJZm9yICh0eXBlID0gMDsgdHlwZSA8IFRPTU9ZT19NQVhfTUtERVZfT1BFUkFUSU9OOyB0eXBlKyspIHsKKwkJaWYgKHN0cmNtcCh3WzBdLCB0b21veW9fbWtkZXZfa2V5d29yZFt0eXBlXSkpCisJCQljb250aW51ZTsKKwkJcmV0dXJuIHRvbW95b191cGRhdGVfbWtkZXZfYWNsKHR5cGUsIHdbMV0sIHdbMl0sIHdbM10sCisJCQkJCSAgICAgICB3WzRdLCBkb21haW4sIGlzX2RlbGV0ZSk7CisJfQorIG91dDoKKwlyZXR1cm4gLUVJTlZBTDsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9nYy5jIGIvc2VjdXJpdHkvdG9tb3lvL2djLmMKaW5kZXggYjljYzcxYi4uYTg3N2U0YyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvdG9tb3lvL2djLmMKKysrIGIvc2VjdXJpdHkvdG9tb3lvL2djLmMKQEAgLTExLDgzICsxMSw3NSBAQAogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKLWVudW0gdG9tb3lvX2djX2lkIHsKLQlUT01PWU9fSURfUEFUSF9HUk9VUCwKLQlUT01PWU9fSURfUEFUSF9HUk9VUF9NRU1CRVIsCi0JVE9NT1lPX0lEX0RPTUFJTl9JTklUSUFMSVpFUiwKLQlUT01PWU9fSURfRE9NQUlOX0tFRVBFUiwKLQlUT01PWU9fSURfQUxJQVMsCi0JVE9NT1lPX0lEX0dMT0JBTExZX1JFQURBQkxFLAotCVRPTU9ZT19JRF9QQVRURVJOLAotCVRPTU9ZT19JRF9OT19SRVdSSVRFLAotCVRPTU9ZT19JRF9NQU5BR0VSLAotCVRPTU9ZT19JRF9OQU1FLAotCVRPTU9ZT19JRF9BQ0wsCi0JVE9NT1lPX0lEX0RPTUFJTgotfTsKLQotc3RydWN0IHRvbW95b19nY19lbnRyeSB7CitzdHJ1Y3QgdG9tb3lvX2djIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJaW50IHR5cGU7Ci0Jdm9pZCAqZWxlbWVudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50OwogfTsKIHN0YXRpYyBMSVNUX0hFQUQodG9tb3lvX2djX3F1ZXVlKTsKIHN0YXRpYyBERUZJTkVfTVVURVgodG9tb3lvX2djX211dGV4KTsKIAogLyogQ2FsbGVyIGhvbGRzIHRvbW95b19wb2xpY3lfbG9jayBtdXRleC4gKi8KLXN0YXRpYyBib29sIHRvbW95b19hZGRfdG9fZ2MoY29uc3QgaW50IHR5cGUsIHZvaWQgKmVsZW1lbnQpCitzdGF0aWMgYm9vbCB0b21veW9fYWRkX3RvX2djKGNvbnN0IGludCB0eXBlLCBzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50KQogewotCXN0cnVjdCB0b21veW9fZ2NfZW50cnkgKmVudHJ5ID0ga3phbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0FUT01JQyk7CisJc3RydWN0IHRvbW95b19nYyAqZW50cnkgPSBremFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWVudHJ5KQogCQlyZXR1cm4gZmFsc2U7CiAJZW50cnktPnR5cGUgPSB0eXBlOwogCWVudHJ5LT5lbGVtZW50ID0gZWxlbWVudDsKIAlsaXN0X2FkZCgmZW50cnktPmxpc3QsICZ0b21veW9fZ2NfcXVldWUpOworCWxpc3RfZGVsX3JjdShlbGVtZW50KTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgdG9tb3lvX2RlbF9hbGxvd19yZWFkCi0oc3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5ICpwdHIpCitzdGF0aWMgdm9pZCB0b21veW9fZGVsX2FsbG93X3JlYWQoc3RydWN0IGxpc3RfaGVhZCAqZWxlbWVudCkKIHsKKwlzdHJ1Y3QgdG9tb3lvX3JlYWRhYmxlX2ZpbGUgKnB0ciA9CisJCWNvbnRhaW5lcl9vZihlbGVtZW50LCB0eXBlb2YoKnB0ciksIGhlYWQubGlzdCk7CiAJdG9tb3lvX3B1dF9uYW1lKHB0ci0+ZmlsZW5hbWUpOwogfQogCi1zdGF0aWMgdm9pZCB0b21veW9fZGVsX2ZpbGVfcGF0dGVybihzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnkgKnB0cikKK3N0YXRpYyB2b2lkIHRvbW95b19kZWxfZmlsZV9wYXR0ZXJuKHN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQpCiB7CisJc3RydWN0IHRvbW95b19ub19wYXR0ZXJuICpwdHIgPQorCQljb250YWluZXJfb2YoZWxlbWVudCwgdHlwZW9mKCpwdHIpLCBoZWFkLmxpc3QpOwogCXRvbW95b19wdXRfbmFtZShwdHItPnBhdHRlcm4pOwogfQogCi1zdGF0aWMgdm9pZCB0b21veW9fZGVsX25vX3Jld3JpdGUoc3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5ICpwdHIpCitzdGF0aWMgdm9pZCB0b21veW9fZGVsX25vX3Jld3JpdGUoc3RydWN0IGxpc3RfaGVhZCAqZWxlbWVudCkKIHsKKwlzdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGUgKnB0ciA9CisJCWNvbnRhaW5lcl9vZihlbGVtZW50LCB0eXBlb2YoKnB0ciksIGhlYWQubGlzdCk7CiAJdG9tb3lvX3B1dF9uYW1lKHB0ci0+cGF0dGVybik7CiB9CiAKLXN0YXRpYyB2b2lkIHRvbW95b19kZWxfZG9tYWluX2luaXRpYWxpemVyCi0oc3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkgKnB0cikKK3N0YXRpYyB2b2lkIHRvbW95b19kZWxfdHJhbnNpdGlvbl9jb250cm9sKHN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQpCiB7CisJc3RydWN0IHRvbW95b190cmFuc2l0aW9uX2NvbnRyb2wgKnB0ciA9CisJCWNvbnRhaW5lcl9vZihlbGVtZW50LCB0eXBlb2YoKnB0ciksIGhlYWQubGlzdCk7CiAJdG9tb3lvX3B1dF9uYW1lKHB0ci0+ZG9tYWlubmFtZSk7CiAJdG9tb3lvX3B1dF9uYW1lKHB0ci0+cHJvZ3JhbSk7CiB9CiAKLXN0YXRpYyB2b2lkIHRvbW95b19kZWxfZG9tYWluX2tlZXBlcihzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkgKnB0cikKK3N0YXRpYyB2b2lkIHRvbW95b19kZWxfYWdncmVnYXRvcihzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50KQogewotCXRvbW95b19wdXRfbmFtZShwdHItPmRvbWFpbm5hbWUpOwotCXRvbW95b19wdXRfbmFtZShwdHItPnByb2dyYW0pOwotfQotCi1zdGF0aWMgdm9pZCB0b21veW9fZGVsX2FsaWFzKHN0cnVjdCB0b21veW9fYWxpYXNfZW50cnkgKnB0cikKLXsKKwlzdHJ1Y3QgdG9tb3lvX2FnZ3JlZ2F0b3IgKnB0ciA9CisJCWNvbnRhaW5lcl9vZihlbGVtZW50LCB0eXBlb2YoKnB0ciksIGhlYWQubGlzdCk7CiAJdG9tb3lvX3B1dF9uYW1lKHB0ci0+b3JpZ2luYWxfbmFtZSk7Ci0JdG9tb3lvX3B1dF9uYW1lKHB0ci0+YWxpYXNlZF9uYW1lKTsKKwl0b21veW9fcHV0X25hbWUocHRyLT5hZ2dyZWdhdGVkX25hbWUpOwogfQogCi1zdGF0aWMgdm9pZCB0b21veW9fZGVsX21hbmFnZXIoc3RydWN0IHRvbW95b19wb2xpY3lfbWFuYWdlcl9lbnRyeSAqcHRyKQorc3RhdGljIHZvaWQgdG9tb3lvX2RlbF9tYW5hZ2VyKHN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQpCiB7CisJc3RydWN0IHRvbW95b19tYW5hZ2VyICpwdHIgPQorCQljb250YWluZXJfb2YoZWxlbWVudCwgdHlwZW9mKCpwdHIpLCBoZWFkLmxpc3QpOwogCXRvbW95b19wdXRfbmFtZShwdHItPm1hbmFnZXIpOwogfQogCi1zdGF0aWMgdm9pZCB0b21veW9fZGVsX2FjbChzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICphY2wpCitzdGF0aWMgdm9pZCB0b21veW9fZGVsX2FjbChzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50KQogeworCXN0cnVjdCB0b21veW9fYWNsX2luZm8gKmFjbCA9CisJCWNvbnRhaW5lcl9vZihlbGVtZW50LCB0eXBlb2YoKmFjbCksIGxpc3QpOwogCXN3aXRjaCAoYWNsLT50eXBlKSB7CiAJY2FzZSBUT01PWU9fVFlQRV9QQVRIX0FDTDoKIAkJewpAQCAtMTA0LDE0ICs5Niw0MSBAQAogCQkJdG9tb3lvX3B1dF9uYW1lX3VuaW9uKCZlbnRyeS0+bmFtZTIpOwogCQl9CiAJCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlVua25vd24gdHlwZVxuIik7CisJY2FzZSBUT01PWU9fVFlQRV9QQVRIX05VTUJFUl9BQ0w6CisJCXsKKwkJCXN0cnVjdCB0b21veW9fcGF0aF9udW1iZXJfYWNsICplbnRyeQorCQkJCT0gY29udGFpbmVyX29mKGFjbCwgdHlwZW9mKCplbnRyeSksIGhlYWQpOworCQkJdG9tb3lvX3B1dF9uYW1lX3VuaW9uKCZlbnRyeS0+bmFtZSk7CisJCQl0b21veW9fcHV0X251bWJlcl91bmlvbigmZW50cnktPm51bWJlcik7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBUT01PWU9fVFlQRV9NS0RFVl9BQ0w6CisJCXsKKwkJCXN0cnVjdCB0b21veW9fbWtkZXZfYWNsICplbnRyeQorCQkJCT0gY29udGFpbmVyX29mKGFjbCwgdHlwZW9mKCplbnRyeSksIGhlYWQpOworCQkJdG9tb3lvX3B1dF9uYW1lX3VuaW9uKCZlbnRyeS0+bmFtZSk7CisJCQl0b21veW9fcHV0X251bWJlcl91bmlvbigmZW50cnktPm1vZGUpOworCQkJdG9tb3lvX3B1dF9udW1iZXJfdW5pb24oJmVudHJ5LT5tYWpvcik7CisJCQl0b21veW9fcHV0X251bWJlcl91bmlvbigmZW50cnktPm1pbm9yKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFRPTU9ZT19UWVBFX01PVU5UX0FDTDoKKwkJeworCQkJc3RydWN0IHRvbW95b19tb3VudF9hY2wgKmVudHJ5CisJCQkJPSBjb250YWluZXJfb2YoYWNsLCB0eXBlb2YoKmVudHJ5KSwgaGVhZCk7CisJCQl0b21veW9fcHV0X25hbWVfdW5pb24oJmVudHJ5LT5kZXZfbmFtZSk7CisJCQl0b21veW9fcHV0X25hbWVfdW5pb24oJmVudHJ5LT5kaXJfbmFtZSk7CisJCQl0b21veW9fcHV0X25hbWVfdW5pb24oJmVudHJ5LT5mc190eXBlKTsKKwkJCXRvbW95b19wdXRfbnVtYmVyX3VuaW9uKCZlbnRyeS0+ZmxhZ3MpOworCQl9CiAJCWJyZWFrOwogCX0KIH0KIAotc3RhdGljIGJvb2wgdG9tb3lvX2RlbF9kb21haW4oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluKQorc3RhdGljIGJvb2wgdG9tb3lvX2RlbF9kb21haW4oc3RydWN0IGxpc3RfaGVhZCAqZWxlbWVudCkKIHsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4gPQorCQljb250YWluZXJfb2YoZWxlbWVudCwgdHlwZW9mKCpkb21haW4pLCBsaXN0KTsKIAlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICphY2w7CiAJc3RydWN0IHRvbW95b19hY2xfaW5mbyAqdG1wOwogCS8qCkBAIC0xMzksNyArMTU4LDcgQEAKIAlpZiAoYXRvbWljX3JlYWQoJmRvbWFpbi0+dXNlcnMpKQogCQlyZXR1cm4gZmFsc2U7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGFjbCwgdG1wLCAmZG9tYWluLT5hY2xfaW5mb19saXN0LCBsaXN0KSB7Ci0JCXRvbW95b19kZWxfYWNsKGFjbCk7CisJCXRvbW95b19kZWxfYWNsKCZhY2wtPmxpc3QpOwogCQl0b21veW9fbWVtb3J5X2ZyZWUoYWNsKTsKIAl9CiAJdG9tb3lvX3B1dF9uYW1lKGRvbWFpbi0+ZG9tYWlubmFtZSk7CkBAIC0xNDcsMTM1ICsxNjYsNzAgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCB0b21veW9fZGVsX25hbWUoY29uc3Qgc3RydWN0IHRvbW95b19uYW1lX2VudHJ5ICpwdHIpCitzdGF0aWMgdm9pZCB0b21veW9fZGVsX25hbWUoc3RydWN0IGxpc3RfaGVhZCAqZWxlbWVudCkKIHsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX25hbWUgKnB0ciA9CisJCWNvbnRhaW5lcl9vZihlbGVtZW50LCB0eXBlb2YoKnB0ciksIGxpc3QpOwogfQogCi1zdGF0aWMgdm9pZCB0b21veW9fZGVsX3BhdGhfZ3JvdXBfbWVtYmVyKHN0cnVjdCB0b21veW9fcGF0aF9ncm91cF9tZW1iZXIKLQkJCQkJICptZW1iZXIpCitzdGF0aWMgdm9pZCB0b21veW9fZGVsX3BhdGhfZ3JvdXAoc3RydWN0IGxpc3RfaGVhZCAqZWxlbWVudCkKIHsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfZ3JvdXAgKm1lbWJlciA9CisJCWNvbnRhaW5lcl9vZihlbGVtZW50LCB0eXBlb2YoKm1lbWJlciksIGhlYWQubGlzdCk7CiAJdG9tb3lvX3B1dF9uYW1lKG1lbWJlci0+bWVtYmVyX25hbWUpOwogfQogCi1zdGF0aWMgdm9pZCB0b21veW9fZGVsX3BhdGhfZ3JvdXAoc3RydWN0IHRvbW95b19wYXRoX2dyb3VwICpncm91cCkKK3N0YXRpYyB2b2lkIHRvbW95b19kZWxfZ3JvdXAoc3RydWN0IGxpc3RfaGVhZCAqZWxlbWVudCkKIHsKKwlzdHJ1Y3QgdG9tb3lvX2dyb3VwICpncm91cCA9CisJCWNvbnRhaW5lcl9vZihlbGVtZW50LCB0eXBlb2YoKmdyb3VwKSwgbGlzdCk7CiAJdG9tb3lvX3B1dF9uYW1lKGdyb3VwLT5ncm91cF9uYW1lKTsKIH0KIAorc3RhdGljIHZvaWQgdG9tb3lvX2RlbF9udW1iZXJfZ3JvdXAoc3RydWN0IGxpc3RfaGVhZCAqZWxlbWVudCkKK3sKKwlzdHJ1Y3QgdG9tb3lvX251bWJlcl9ncm91cCAqbWVtYmVyID0KKwkJY29udGFpbmVyX29mKGVsZW1lbnQsIHR5cGVvZigqbWVtYmVyKSwgaGVhZC5saXN0KTsKK30KKworc3RhdGljIGJvb2wgdG9tb3lvX2NvbGxlY3RfbWVtYmVyKHN0cnVjdCBsaXN0X2hlYWQgKm1lbWJlcl9saXN0LCBpbnQgaWQpCit7CisJc3RydWN0IHRvbW95b19hY2xfaGVhZCAqbWVtYmVyOworCWxpc3RfZm9yX2VhY2hfZW50cnkobWVtYmVyLCBtZW1iZXJfbGlzdCwgbGlzdCkgeworCQlpZiAoIW1lbWJlci0+aXNfZGVsZXRlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXRvbW95b19hZGRfdG9fZ2MoaWQsICZtZW1iZXItPmxpc3QpKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKyAgICAgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHRvbW95b19jb2xsZWN0X2FjbChzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4pCit7CisJc3RydWN0IHRvbW95b19hY2xfaW5mbyAqYWNsOworCWxpc3RfZm9yX2VhY2hfZW50cnkoYWNsLCAmZG9tYWluLT5hY2xfaW5mb19saXN0LCBsaXN0KSB7CisJCWlmICghYWNsLT5pc19kZWxldGVkKQorCQkJY29udGludWU7CisJCWlmICghdG9tb3lvX2FkZF90b19nYyhUT01PWU9fSURfQUNMLCAmYWNsLT5saXN0KSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyB2b2lkIHRvbW95b19jb2xsZWN0X2VudHJ5KHZvaWQpCiB7CisJaW50IGk7CiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdG9tb3lvX3BvbGljeV9sb2NrKSkKIAkJcmV0dXJuOwotCXsKLQkJc3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5ICpwdHI7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0LAotCQkJCQlsaXN0KSB7Ci0JCQlpZiAoIXB0ci0+aXNfZGVsZXRlZCkKLQkJCQljb250aW51ZTsKLQkJCWlmICh0b21veW9fYWRkX3RvX2djKFRPTU9ZT19JRF9HTE9CQUxMWV9SRUFEQUJMRSwgcHRyKSkKLQkJCQlsaXN0X2RlbF9yY3UoJnB0ci0+bGlzdCk7Ci0JCQllbHNlCi0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JewotCQlzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnkgKnB0cjsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmdG9tb3lvX3BhdHRlcm5fbGlzdCwgbGlzdCkgewotCQkJaWYgKCFwdHItPmlzX2RlbGV0ZWQpCi0JCQkJY29udGludWU7Ci0JCQlpZiAodG9tb3lvX2FkZF90b19nYyhUT01PWU9fSURfUEFUVEVSTiwgcHRyKSkKLQkJCQlsaXN0X2RlbF9yY3UoJnB0ci0+bGlzdCk7Ci0JCQllbHNlCi0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JewotCQlzdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGVfZW50cnkgKnB0cjsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmdG9tb3lvX25vX3Jld3JpdGVfbGlzdCwgbGlzdCkgewotCQkJaWYgKCFwdHItPmlzX2RlbGV0ZWQpCi0JCQkJY29udGludWU7Ci0JCQlpZiAodG9tb3lvX2FkZF90b19nYyhUT01PWU9fSURfTk9fUkVXUklURSwgcHRyKSkKLQkJCQlsaXN0X2RlbF9yY3UoJnB0ci0+bGlzdCk7Ci0JCQllbHNlCi0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JewotCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSAqcHRyOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3QsCi0JCQkJCWxpc3QpIHsKLQkJCWlmICghcHRyLT5pc19kZWxldGVkKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKHRvbW95b19hZGRfdG9fZ2MoVE9NT1lPX0lEX0RPTUFJTl9JTklUSUFMSVpFUiwgcHRyKSkKLQkJCQlsaXN0X2RlbF9yY3UoJnB0ci0+bGlzdCk7Ci0JCQllbHNlCi0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JewotCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkgKnB0cjsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdCwgbGlzdCkgewotCQkJaWYgKCFwdHItPmlzX2RlbGV0ZWQpCi0JCQkJY29udGludWU7Ci0JCQlpZiAodG9tb3lvX2FkZF90b19nYyhUT01PWU9fSURfRE9NQUlOX0tFRVBFUiwgcHRyKSkKLQkJCQlsaXN0X2RlbF9yY3UoJnB0ci0+bGlzdCk7Ci0JCQllbHNlCi0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JewotCQlzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5ICpwdHI7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJnRvbW95b19hbGlhc19saXN0LCBsaXN0KSB7Ci0JCQlpZiAoIXB0ci0+aXNfZGVsZXRlZCkKLQkJCQljb250aW51ZTsKLQkJCWlmICh0b21veW9fYWRkX3RvX2djKFRPTU9ZT19JRF9BTElBUywgcHRyKSkKLQkJCQlsaXN0X2RlbF9yY3UoJnB0ci0+bGlzdCk7Ci0JCQllbHNlCi0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JewotCQlzdHJ1Y3QgdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2VudHJ5ICpwdHI7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0LAotCQkJCQlsaXN0KSB7Ci0JCQlpZiAoIXB0ci0+aXNfZGVsZXRlZCkKLQkJCQljb250aW51ZTsKLQkJCWlmICh0b21veW9fYWRkX3RvX2djKFRPTU9ZT19JRF9NQU5BR0VSLCBwdHIpKQotCQkJCWxpc3RfZGVsX3JjdSgmcHRyLT5saXN0KTsKLQkJCWVsc2UKLQkJCQlicmVhazsKLQkJfQorCWZvciAoaSA9IDA7IGkgPCBUT01PWU9fTUFYX1BPTElDWTsgaSsrKSB7CisJCWlmICghdG9tb3lvX2NvbGxlY3RfbWVtYmVyKCZ0b21veW9fcG9saWN5X2xpc3RbaV0sIGkpKQorCQkJZ290byB1bmxvY2s7CiAJfQogCXsKIAkJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkb21haW4sICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKLQkJCXN0cnVjdCB0b21veW9fYWNsX2luZm8gKmFjbDsKLQkJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGFjbCwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwKLQkJCQkJCWxpc3QpIHsKLQkJCQlzd2l0Y2ggKGFjbC0+dHlwZSkgewotCQkJCWNhc2UgVE9NT1lPX1RZUEVfUEFUSF9BQ0w6Ci0JCQkJCWlmIChjb250YWluZXJfb2YoYWNsLAotCQkJCQkgc3RydWN0IHRvbW95b19wYXRoX2FjbCwKLQkJCQkJCQkgaGVhZCktPnBlcm0gfHwKLQkJCQkJICAgIGNvbnRhaW5lcl9vZihhY2wsCi0JCQkJCSBzdHJ1Y3QgdG9tb3lvX3BhdGhfYWNsLAotCQkJCQkJCSBoZWFkKS0+cGVybV9oaWdoKQotCQkJCQkJY29udGludWU7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgVE9NT1lPX1RZUEVfUEFUSDJfQUNMOgotCQkJCQlpZiAoY29udGFpbmVyX29mKGFjbCwKLQkJCQkJIHN0cnVjdCB0b21veW9fcGF0aDJfYWNsLAotCQkJCQkJCSBoZWFkKS0+cGVybSkKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQkJaWYgKHRvbW95b19hZGRfdG9fZ2MoVE9NT1lPX0lEX0FDTCwgYWNsKSkKLQkJCQkJbGlzdF9kZWxfcmN1KCZhY2wtPmxpc3QpOwotCQkJCWVsc2UKLQkJCQkJYnJlYWs7Ci0JCQl9CisJCQlpZiAoIXRvbW95b19jb2xsZWN0X2FjbChkb21haW4pKQorCQkJCWdvdG8gdW5sb2NrOwogCQkJaWYgKCFkb21haW4tPmlzX2RlbGV0ZWQgfHwgYXRvbWljX3JlYWQoJmRvbWFpbi0+dXNlcnMpKQogCQkJCWNvbnRpbnVlOwogCQkJLyoKQEAgLTI4MywxMDQgKzIzNyw5MiBAQAogCQkJICogcmVmZXIgdGhpcyBkb21haW4gYWZ0ZXIgc3VjY2Vzc2Z1bCBleGVjdmUoKS4KIAkJCSAqIFdlIHJlY2hlY2sgZG9tYWluLT51c2VycyBhZnRlciBTUkNVIHN5bmNocm9uaXphdGlvbi4KIAkJCSAqLwotCQkJaWYgKHRvbW95b19hZGRfdG9fZ2MoVE9NT1lPX0lEX0RPTUFJTiwgZG9tYWluKSkKLQkJCQlsaXN0X2RlbF9yY3UoJmRvbWFpbi0+bGlzdCk7Ci0JCQllbHNlCi0JCQkJYnJlYWs7CisJCQlpZiAoIXRvbW95b19hZGRfdG9fZ2MoVE9NT1lPX0lEX0RPTUFJTiwgJmRvbWFpbi0+bGlzdCkpCisJCQkJZ290byB1bmxvY2s7CiAJCX0KIAl9Ci0JewotCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSA8IFRPTU9ZT19NQVhfSEFTSDsgaSsrKSB7Ci0JCQlzdHJ1Y3QgdG9tb3lvX25hbWVfZW50cnkgKnB0cjsKLQkJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJnRvbW95b19uYW1lX2xpc3RbaV0sCi0JCQkJCQlsaXN0KSB7Ci0JCQkJaWYgKGF0b21pY19yZWFkKCZwdHItPnVzZXJzKSkKLQkJCQkJY29udGludWU7Ci0JCQkJaWYgKHRvbW95b19hZGRfdG9fZ2MoVE9NT1lPX0lEX05BTUUsIHB0cikpCi0JCQkJCWxpc3RfZGVsX3JjdSgmcHRyLT5saXN0KTsKLQkJCQllbHNlIHsKLQkJCQkJaSA9IFRPTU9ZT19NQVhfSEFTSDsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQorCWZvciAoaSA9IDA7IGkgPCBUT01PWU9fTUFYX0hBU0g7IGkrKykgeworCQlzdHJ1Y3QgdG9tb3lvX25hbWUgKnB0cjsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmdG9tb3lvX25hbWVfbGlzdFtpXSwgbGlzdCkgeworCQkJaWYgKGF0b21pY19yZWFkKCZwdHItPnVzZXJzKSkKKwkJCQljb250aW51ZTsKKwkJCWlmICghdG9tb3lvX2FkZF90b19nYyhUT01PWU9fSURfTkFNRSwgJnB0ci0+bGlzdCkpCisJCQkJZ290byB1bmxvY2s7CiAJCX0KIAl9Ci0JewotCQlzdHJ1Y3QgdG9tb3lvX3BhdGhfZ3JvdXAgKmdyb3VwOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShncm91cCwgJnRvbW95b19wYXRoX2dyb3VwX2xpc3QsIGxpc3QpIHsKLQkJCXN0cnVjdCB0b21veW9fcGF0aF9ncm91cF9tZW1iZXIgKm1lbWJlcjsKLQkJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG1lbWJlciwgJmdyb3VwLT5tZW1iZXJfbGlzdCwKLQkJCQkJCWxpc3QpIHsKLQkJCQlpZiAoIW1lbWJlci0+aXNfZGVsZXRlZCkKLQkJCQkJY29udGludWU7Ci0JCQkJaWYgKHRvbW95b19hZGRfdG9fZ2MoVE9NT1lPX0lEX1BBVEhfR1JPVVBfTUVNQkVSLAotCQkJCQkJICAgICBtZW1iZXIpKQotCQkJCQlsaXN0X2RlbF9yY3UoJm1lbWJlci0+bGlzdCk7Ci0JCQkJZWxzZQotCQkJCQlicmVhazsKLQkJCX0KKwlmb3IgKGkgPSAwOyBpIDwgVE9NT1lPX01BWF9HUk9VUDsgaSsrKSB7CisJCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QgPSAmdG9tb3lvX2dyb3VwX2xpc3RbaV07CisJCWludCBpZDsKKwkJc3RydWN0IHRvbW95b19ncm91cCAqZ3JvdXA7CisJCXN3aXRjaCAoaSkgeworCQljYXNlIDA6CisJCQlpZCA9IFRPTU9ZT19JRF9QQVRIX0dST1VQOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpZCA9IFRPTU9ZT19JRF9OVU1CRVJfR1JPVVA7CisJCQlicmVhazsKKwkJfQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGdyb3VwLCBsaXN0LCBsaXN0KSB7CisJCQlpZiAoIXRvbW95b19jb2xsZWN0X21lbWJlcigmZ3JvdXAtPm1lbWJlcl9saXN0LCBpZCkpCisJCQkJZ290byB1bmxvY2s7CiAJCQlpZiAoIWxpc3RfZW1wdHkoJmdyb3VwLT5tZW1iZXJfbGlzdCkgfHwKIAkJCSAgICBhdG9taWNfcmVhZCgmZ3JvdXAtPnVzZXJzKSkKIAkJCQljb250aW51ZTsKLQkJCWlmICh0b21veW9fYWRkX3RvX2djKFRPTU9ZT19JRF9QQVRIX0dST1VQLCBncm91cCkpCi0JCQkJbGlzdF9kZWxfcmN1KCZncm91cC0+bGlzdCk7Ci0JCQllbHNlCi0JCQkJYnJlYWs7CisJCQlpZiAoIXRvbW95b19hZGRfdG9fZ2MoVE9NT1lPX0lEX0dST1VQLCAmZ3JvdXAtPmxpc3QpKQorCQkJCWdvdG8gdW5sb2NrOwogCQl9CiAJfQorIHVubG9jazoKIAltdXRleF91bmxvY2soJnRvbW95b19wb2xpY3lfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIHRvbW95b19rZnJlZV9lbnRyeSh2b2lkKQogewotCXN0cnVjdCB0b21veW9fZ2NfZW50cnkgKnA7Ci0Jc3RydWN0IHRvbW95b19nY19lbnRyeSAqdG1wOworCXN0cnVjdCB0b21veW9fZ2MgKnA7CisJc3RydWN0IHRvbW95b19nYyAqdG1wOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIHRtcCwgJnRvbW95b19nY19xdWV1ZSwgbGlzdCkgeworCQlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50ID0gcC0+ZWxlbWVudDsKIAkJc3dpdGNoIChwLT50eXBlKSB7Ci0JCWNhc2UgVE9NT1lPX0lEX0RPTUFJTl9JTklUSUFMSVpFUjoKLQkJCXRvbW95b19kZWxfZG9tYWluX2luaXRpYWxpemVyKHAtPmVsZW1lbnQpOworCQljYXNlIFRPTU9ZT19JRF9UUkFOU0lUSU9OX0NPTlRST0w6CisJCQl0b21veW9fZGVsX3RyYW5zaXRpb25fY29udHJvbChlbGVtZW50KTsKIAkJCWJyZWFrOwotCQljYXNlIFRPTU9ZT19JRF9ET01BSU5fS0VFUEVSOgotCQkJdG9tb3lvX2RlbF9kb21haW5fa2VlcGVyKHAtPmVsZW1lbnQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVE9NT1lPX0lEX0FMSUFTOgotCQkJdG9tb3lvX2RlbF9hbGlhcyhwLT5lbGVtZW50KTsKKwkJY2FzZSBUT01PWU9fSURfQUdHUkVHQVRPUjoKKwkJCXRvbW95b19kZWxfYWdncmVnYXRvcihlbGVtZW50KTsKIAkJCWJyZWFrOwogCQljYXNlIFRPTU9ZT19JRF9HTE9CQUxMWV9SRUFEQUJMRToKLQkJCXRvbW95b19kZWxfYWxsb3dfcmVhZChwLT5lbGVtZW50KTsKKwkJCXRvbW95b19kZWxfYWxsb3dfcmVhZChlbGVtZW50KTsKIAkJCWJyZWFrOwogCQljYXNlIFRPTU9ZT19JRF9QQVRURVJOOgotCQkJdG9tb3lvX2RlbF9maWxlX3BhdHRlcm4ocC0+ZWxlbWVudCk7CisJCQl0b21veW9fZGVsX2ZpbGVfcGF0dGVybihlbGVtZW50KTsKIAkJCWJyZWFrOwogCQljYXNlIFRPTU9ZT19JRF9OT19SRVdSSVRFOgotCQkJdG9tb3lvX2RlbF9ub19yZXdyaXRlKHAtPmVsZW1lbnQpOworCQkJdG9tb3lvX2RlbF9ub19yZXdyaXRlKGVsZW1lbnQpOwogCQkJYnJlYWs7CiAJCWNhc2UgVE9NT1lPX0lEX01BTkFHRVI6Ci0JCQl0b21veW9fZGVsX21hbmFnZXIocC0+ZWxlbWVudCk7CisJCQl0b21veW9fZGVsX21hbmFnZXIoZWxlbWVudCk7CiAJCQlicmVhazsKIAkJY2FzZSBUT01PWU9fSURfTkFNRToKLQkJCXRvbW95b19kZWxfbmFtZShwLT5lbGVtZW50KTsKKwkJCXRvbW95b19kZWxfbmFtZShlbGVtZW50KTsKIAkJCWJyZWFrOwogCQljYXNlIFRPTU9ZT19JRF9BQ0w6Ci0JCQl0b21veW9fZGVsX2FjbChwLT5lbGVtZW50KTsKKwkJCXRvbW95b19kZWxfYWNsKGVsZW1lbnQpOwogCQkJYnJlYWs7CiAJCWNhc2UgVE9NT1lPX0lEX0RPTUFJTjoKLQkJCWlmICghdG9tb3lvX2RlbF9kb21haW4ocC0+ZWxlbWVudCkpCisJCQlpZiAoIXRvbW95b19kZWxfZG9tYWluKGVsZW1lbnQpKQogCQkJCWNvbnRpbnVlOwogCQkJYnJlYWs7Ci0JCWNhc2UgVE9NT1lPX0lEX1BBVEhfR1JPVVBfTUVNQkVSOgotCQkJdG9tb3lvX2RlbF9wYXRoX2dyb3VwX21lbWJlcihwLT5lbGVtZW50KTsKLQkJCWJyZWFrOwogCQljYXNlIFRPTU9ZT19JRF9QQVRIX0dST1VQOgotCQkJdG9tb3lvX2RlbF9wYXRoX2dyb3VwKHAtPmVsZW1lbnQpOworCQkJdG9tb3lvX2RlbF9wYXRoX2dyb3VwKGVsZW1lbnQpOwogCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmtub3duIHR5cGVcbiIpOworCQljYXNlIFRPTU9ZT19JRF9HUk9VUDoKKwkJCXRvbW95b19kZWxfZ3JvdXAoZWxlbWVudCk7CisJCQlicmVhazsKKwkJY2FzZSBUT01PWU9fSURfTlVNQkVSX0dST1VQOgorCQkJdG9tb3lvX2RlbF9udW1iZXJfZ3JvdXAoZWxlbWVudCk7CiAJCQlicmVhazsKIAkJfQotCQl0b21veW9fbWVtb3J5X2ZyZWUocC0+ZWxlbWVudCk7CisJCXRvbW95b19tZW1vcnlfZnJlZShlbGVtZW50KTsKIAkJbGlzdF9kZWwoJnAtPmxpc3QpOwogCQlrZnJlZShwKTsKIAl9CmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vZ3JvdXAuYyBiL3NlY3VyaXR5L3RvbW95by9ncm91cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NDM1MmMKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS90b21veW8vZ3JvdXAuYwpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIHNlY3VyaXR5L3RvbW95by9ncm91cC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAgIE5UVCBEQVRBIENPUlBPUkFUSU9OCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKworc3RhdGljIGJvb2wgdG9tb3lvX3NhbWVfcGF0aF9ncm91cChjb25zdCBzdHJ1Y3QgdG9tb3lvX2FjbF9oZWFkICphLAorCQkJCWNvbnN0IHN0cnVjdCB0b21veW9fYWNsX2hlYWQgKmIpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihhLCBzdHJ1Y3QgdG9tb3lvX3BhdGhfZ3JvdXAsIGhlYWQpLT5tZW1iZXJfbmFtZSA9PQorCQljb250YWluZXJfb2YoYiwgc3RydWN0IHRvbW95b19wYXRoX2dyb3VwLCBoZWFkKS0+bWVtYmVyX25hbWU7Cit9CisKK3N0YXRpYyBib29sIHRvbW95b19zYW1lX251bWJlcl9ncm91cChjb25zdCBzdHJ1Y3QgdG9tb3lvX2FjbF9oZWFkICphLAorCQkJCSAgY29uc3Qgc3RydWN0IHRvbW95b19hY2xfaGVhZCAqYikKK3sKKwlyZXR1cm4gIW1lbWNtcCgmY29udGFpbmVyX29mKGEsIHN0cnVjdCB0b21veW9fbnVtYmVyX2dyb3VwLCBoZWFkKQorCQkgICAgICAgLT5udW1iZXIsCisJCSAgICAgICAmY29udGFpbmVyX29mKGIsIHN0cnVjdCB0b21veW9fbnVtYmVyX2dyb3VwLCBoZWFkKQorCQkgICAgICAgLT5udW1iZXIsCisJCSAgICAgICBzaXplb2YoY29udGFpbmVyX29mKGEsIHN0cnVjdCB0b21veW9fbnVtYmVyX2dyb3VwLCBoZWFkKQorCQkJICAgICAgLT5udW1iZXIpKTsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfZ3JvdXAgLSBXcml0ZSAic3RydWN0IHRvbW95b19wYXRoX2dyb3VwIi8ic3RydWN0IHRvbW95b19udW1iZXJfZ3JvdXAiIGxpc3QuCisgKgorICogQGRhdGE6ICAgICAgU3RyaW5nIHRvIHBhcnNlLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICogQHR5cGU6ICAgICAgVHlwZSBvZiB0aGlzIGdyb3VwLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fd3JpdGVfZ3JvdXAoY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19kZWxldGUsIGNvbnN0IHU4IHR5cGUpCit7CisJc3RydWN0IHRvbW95b19ncm91cCAqZ3JvdXA7CisJc3RydWN0IGxpc3RfaGVhZCAqbWVtYmVyOworCWNoYXIgKndbMl07CisJaW50IGVycm9yID0gLUVJTlZBTDsKKwlpZiAoIXRvbW95b190b2tlbml6ZShkYXRhLCB3LCBzaXplb2YodykpIHx8ICF3WzFdWzBdKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlncm91cCA9IHRvbW95b19nZXRfZ3JvdXAod1swXSwgdHlwZSk7CisJaWYgKCFncm91cCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtYmVyID0gJmdyb3VwLT5tZW1iZXJfbGlzdDsKKwlpZiAodHlwZSA9PSBUT01PWU9fUEFUSF9HUk9VUCkgeworCQlzdHJ1Y3QgdG9tb3lvX3BhdGhfZ3JvdXAgZSA9IHsgfTsKKwkJZS5tZW1iZXJfbmFtZSA9IHRvbW95b19nZXRfbmFtZSh3WzFdKTsKKwkJaWYgKCFlLm1lbWJlcl9uYW1lKSB7CisJCQllcnJvciA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCQllcnJvciA9IHRvbW95b191cGRhdGVfcG9saWN5KCZlLmhlYWQsIHNpemVvZihlKSwgaXNfZGVsZXRlLAorCQkJCQkgICAgIG1lbWJlciwgdG9tb3lvX3NhbWVfcGF0aF9ncm91cCk7CisJCXRvbW95b19wdXRfbmFtZShlLm1lbWJlcl9uYW1lKTsKKwl9IGVsc2UgaWYgKHR5cGUgPT0gVE9NT1lPX05VTUJFUl9HUk9VUCkgeworCQlzdHJ1Y3QgdG9tb3lvX251bWJlcl9ncm91cCBlID0geyB9OworCQlpZiAod1sxXVswXSA9PSAnQCcKKwkJICAgIHx8ICF0b21veW9fcGFyc2VfbnVtYmVyX3VuaW9uKHdbMV0sICZlLm51bWJlcikKKwkJICAgIHx8IGUubnVtYmVyLnZhbHVlc1swXSA+IGUubnVtYmVyLnZhbHVlc1sxXSkKKwkJCWdvdG8gb3V0OworCQllcnJvciA9IHRvbW95b191cGRhdGVfcG9saWN5KCZlLmhlYWQsIHNpemVvZihlKSwgaXNfZGVsZXRlLAorCQkJCQkgICAgIG1lbWJlciwgdG9tb3lvX3NhbWVfbnVtYmVyX2dyb3VwKTsKKwkJLyoKKwkJICogdG9tb3lvX3B1dF9udW1iZXJfdW5pb24oKSBpcyBub3QgbmVlZGVkIGJlY2F1c2UKKwkJICogd1sxXVswXSAhPSAnQCcuCisJCSAqLworCX0KKyBvdXQ6CisJdG9tb3lvX3B1dF9ncm91cChncm91cCk7CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19wYXRoX21hdGNoZXNfZ3JvdXAgLSBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBwYXRobmFtZSBtYXRjaGVzIG1lbWJlcnMgb2YgdGhlIGdpdmVuIHBhdGhuYW1lIGdyb3VwLgorICoKKyAqIEBwYXRobmFtZTogICAgICAgIFRoZSBuYW1lIG9mIHBhdGhuYW1lLgorICogQGdyb3VwOiAgICAgICAgICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19wYXRoX2dyb3VwIi4KKyAqCisgKiBSZXR1cm5zIG1hdGNoZWQgbWVtYmVyJ3MgcGF0aG5hbWUgaWYgQHBhdGhuYW1lIG1hdGNoZXMgcGF0aG5hbWVzIGluIEBncm91cCwKKyAqIE5VTEwgb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCisgKi8KK2NvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICoKK3RvbW95b19wYXRoX21hdGNoZXNfZ3JvdXAoY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnBhdGhuYW1lLAorCQkJICBjb25zdCBzdHJ1Y3QgdG9tb3lvX2dyb3VwICpncm91cCkKK3sKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfZ3JvdXAgKm1lbWJlcjsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShtZW1iZXIsICZncm91cC0+bWVtYmVyX2xpc3QsIGhlYWQubGlzdCkgeworCQlpZiAobWVtYmVyLT5oZWFkLmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKCF0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4ocGF0aG5hbWUsIG1lbWJlci0+bWVtYmVyX25hbWUpKQorCQkJY29udGludWU7CisJCXJldHVybiBtZW1iZXItPm1lbWJlcl9uYW1lOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiB0b21veW9fbnVtYmVyX21hdGNoZXNfZ3JvdXAgLSBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBudW1iZXIgbWF0Y2hlcyBtZW1iZXJzIG9mIHRoZSBnaXZlbiBudW1iZXIgZ3JvdXAuCisgKgorICogQG1pbjogICBNaW4gbnVtYmVyLgorICogQG1heDogICBNYXggbnVtYmVyLgorICogQGdyb3VwOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX251bWJlcl9ncm91cCIuCisgKgorICogUmV0dXJucyB0cnVlIGlmIEBtaW4gYW5kIEBtYXggcGFydGlhbGx5IG92ZXJsYXBzIEBncm91cCwgZmFsc2Ugb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCisgKi8KK2Jvb2wgdG9tb3lvX251bWJlcl9tYXRjaGVzX2dyb3VwKGNvbnN0IHVuc2lnbmVkIGxvbmcgbWluLAorCQkJCSBjb25zdCB1bnNpZ25lZCBsb25nIG1heCwKKwkJCQkgY29uc3Qgc3RydWN0IHRvbW95b19ncm91cCAqZ3JvdXApCit7CisJc3RydWN0IHRvbW95b19udW1iZXJfZ3JvdXAgKm1lbWJlcjsKKwlib29sIG1hdGNoZWQgPSBmYWxzZTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShtZW1iZXIsICZncm91cC0+bWVtYmVyX2xpc3QsIGhlYWQubGlzdCkgeworCQlpZiAobWVtYmVyLT5oZWFkLmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKG1pbiA+IG1lbWJlci0+bnVtYmVyLnZhbHVlc1sxXSB8fAorCQkgICAgbWF4IDwgbWVtYmVyLT5udW1iZXIudmFsdWVzWzBdKQorCQkJY29udGludWU7CisJCW1hdGNoZWQgPSB0cnVlOworCQlicmVhazsKKwl9CisJcmV0dXJuIG1hdGNoZWQ7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vbG9hZF9wb2xpY3kuYyBiL3NlY3VyaXR5L3RvbW95by9sb2FkX3BvbGljeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYWRhN2MKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS90b21veW8vbG9hZF9wb2xpY3kuYwpAQCAtMCwwICsxLDgxIEBACisvKgorICogc2VjdXJpdHkvdG9tb3lvL2xvYWRfcG9saWN5LmMKKyAqCisgKiBQb2xpY3kgbG9hZGVyIGxhdW5jaGVyIGZvciBUT01PWU8uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAgIE5UVCBEQVRBIENPUlBPUkFUSU9OCisgKi8KKworI2luY2x1ZGUgImNvbW1vbi5oIgorCisvKiBwYXRoIHRvIHBvbGljeSBsb2FkZXIgKi8KK3N0YXRpYyBjb25zdCBjaGFyICp0b21veW9fbG9hZGVyID0gIi9zYmluL3RvbW95by1pbml0IjsKKworLyoqCisgKiB0b21veW9fcG9saWN5X2xvYWRlcl9leGlzdHMgLSBDaGVjayB3aGV0aGVyIC9zYmluL3RvbW95by1pbml0IGV4aXN0cy4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgL3NiaW4vdG9tb3lvLWluaXQgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19wb2xpY3lfbG9hZGVyX2V4aXN0cyh2b2lkKQoreworCS8qCisJICogRG9uJ3QgYWN0aXZhdGUgTUFDIGlmIHRoZSBwb2xpY3kgbG9hZGVyIGRvZXNuJ3QgZXhpc3QuCisJICogSWYgdGhlIGluaXRyZCBpbmNsdWRlcyAvc2Jpbi9pbml0IGJ1dCByZWFsLXJvb3QtZGV2IGhhcyBub3QKKwkgKiBtb3VudGVkIG9uIC8geWV0LCBhY3RpdmF0aW5nIE1BQyB3aWxsIGJsb2NrIHRoZSBzeXN0ZW0gc2luY2UKKwkgKiBwb2xpY2llcyBhcmUgbm90IGxvYWRlZCB5ZXQuCisJICogVGh1cywgbGV0IGRvX2V4ZWN2ZSgpIGNhbGwgdGhpcyBmdW5jdGlvbiBldmVyeXRpbWUuCisJICovCisJc3RydWN0IHBhdGggcGF0aDsKKworCWlmIChrZXJuX3BhdGgodG9tb3lvX2xvYWRlciwgTE9PS1VQX0ZPTExPVywgJnBhdGgpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIk5vdCBhY3RpdmF0aW5nIE1hbmRhdG9yeSBBY2Nlc3MgQ29udHJvbCBub3cgIgorCQkgICAgICAgInNpbmNlICVzIGRvZXNuJ3QgZXhpc3QuXG4iLCB0b21veW9fbG9hZGVyKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlwYXRoX3B1dCgmcGF0aCk7CisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogdG9tb3lvX2xvYWRfcG9saWN5IC0gUnVuIGV4dGVybmFsIHBvbGljeSBsb2FkZXIgdG8gbG9hZCBwb2xpY3kuCisgKgorICogQGZpbGVuYW1lOiBUaGUgcHJvZ3JhbSBhYm91dCB0byBzdGFydC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIEBmaWxlbmFtZSBpcyAvc2Jpbi9pbml0ICwgYW5kIGlmIHNvCisgKiBpbnZva2UgL3NiaW4vdG9tb3lvLWluaXQgYW5kIHdhaXQgZm9yIHRoZSB0ZXJtaW5hdGlvbiBvZiAvc2Jpbi90b21veW8taW5pdAorICogYW5kIHRoZW4gY29udGludWVzIGludm9jYXRpb24gb2YgL3NiaW4vaW5pdC4KKyAqIC9zYmluL3RvbW95by1pbml0IHJlYWRzIHBvbGljeSBmaWxlcyBpbiAvZXRjL3RvbW95by8gZGlyZWN0b3J5IGFuZAorICogd3JpdGVzIHRvIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlcy4KKyAqCisgKiBSZXR1cm5zIG5vdGhpbmcuCisgKi8KK3ZvaWQgdG9tb3lvX2xvYWRfcG9saWN5KGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWNoYXIgKmFyZ3ZbMl07CisJY2hhciAqZW52cFszXTsKKworCWlmICh0b21veW9fcG9saWN5X2xvYWRlZCkKKwkJcmV0dXJuOworCS8qCisJICogQ2hlY2sgZmlsZW5hbWUgaXMgL3NiaW4vaW5pdCBvciAvc2Jpbi90b21veW8tc3RhcnQuCisJICogL3NiaW4vdG9tb3lvLXN0YXJ0IGlzIGEgZHVtbXkgZmlsZW5hbWUgaW4gY2FzZSB3aGVyZSAvc2Jpbi9pbml0IGNhbid0CisJICogYmUgcGFzc2VkLgorCSAqIFlvdSBjYW4gY3JlYXRlIC9zYmluL3RvbW95by1zdGFydCBieQorCSAqICJsbiAtcyAvYmluL3RydWUgL3NiaW4vdG9tb3lvLXN0YXJ0Ii4KKwkgKi8KKwlpZiAoc3RyY21wKGZpbGVuYW1lLCAiL3NiaW4vaW5pdCIpICYmCisJICAgIHN0cmNtcChmaWxlbmFtZSwgIi9zYmluL3RvbW95by1zdGFydCIpKQorCQlyZXR1cm47CisJaWYgKCF0b21veW9fcG9saWN5X2xvYWRlcl9leGlzdHMoKSkKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fSU5GTyAiQ2FsbGluZyAlcyB0byBsb2FkIHBvbGljeS4gUGxlYXNlIHdhaXQuXG4iLAorCSAgICAgICB0b21veW9fbG9hZGVyKTsKKwlhcmd2WzBdID0gKGNoYXIgKikgdG9tb3lvX2xvYWRlcjsKKwlhcmd2WzFdID0gTlVMTDsKKwllbnZwWzBdID0gIkhPTUU9LyI7CisJZW52cFsxXSA9ICJQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluIjsKKwllbnZwWzJdID0gTlVMTDsKKwljYWxsX3VzZXJtb2RlaGVscGVyKGFyZ3ZbMF0sIGFyZ3YsIGVudnAsIDEpOworCXRvbW95b19jaGVja19wcm9maWxlKCk7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vbWVtb3J5LmMgYi9zZWN1cml0eS90b21veW8vbWVtb3J5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk3NjEyNgotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9tZW1vcnkuYwpAQCAtMCwwICsxLDI4MiBAQAorLyoKKyAqIHNlY3VyaXR5L3RvbW95by9tZW1vcnkuYworICoKKyAqIE1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBmb3IgVE9NT1lPLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDEwICBOVFQgREFUQSBDT1JQT1JBVElPTgorICovCisKKyNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorCisvKioKKyAqIHRvbW95b193YXJuX29vbSAtIFByaW50IG91dCBvZiBtZW1vcnkgd2FybmluZyBtZXNzYWdlLgorICoKKyAqIEBmdW5jdGlvbjogRnVuY3Rpb24ncyBuYW1lLgorICovCit2b2lkIHRvbW95b193YXJuX29vbShjb25zdCBjaGFyICpmdW5jdGlvbikKK3sKKwkvKiBSZWR1Y2UgZXJyb3IgbWVzc2FnZXMuICovCisJc3RhdGljIHBpZF90IHRvbW95b19sYXN0X3BpZDsKKwljb25zdCBwaWRfdCBwaWQgPSBjdXJyZW50LT5waWQ7CisJaWYgKHRvbW95b19sYXN0X3BpZCAhPSBwaWQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRVJST1I6IE91dCBvZiBtZW1vcnkgYXQgJXMuXG4iLAorCQkgICAgICAgZnVuY3Rpb24pOworCQl0b21veW9fbGFzdF9waWQgPSBwaWQ7CisJfQorCWlmICghdG9tb3lvX3BvbGljeV9sb2FkZWQpCisJCXBhbmljKCJNQUMgSW5pdGlhbGl6YXRpb24gZmFpbGVkLlxuIik7Cit9CisKKy8qIE1lbW9yeSBhbGxvY2F0ZWQgZm9yIHBvbGljeS4gKi8KK3N0YXRpYyBhdG9taWNfdCB0b21veW9fcG9saWN5X21lbW9yeV9zaXplOworLyogUXVvdGEgZm9yIGhvbGRpbmcgcG9saWN5LiAqLworc3RhdGljIHVuc2lnbmVkIGludCB0b21veW9fcXVvdGFfZm9yX3BvbGljeTsKKworLyoqCisgKiB0b21veW9fbWVtb3J5X29rIC0gQ2hlY2sgbWVtb3J5IHF1b3RhLgorICoKKyAqIEBwdHI6IFBvaW50ZXIgdG8gYWxsb2NhdGVkIG1lbW9yeS4KKyAqCisgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBAcHRyIGlzIG5vdCBOVUxMIGFuZCBxdW90YSBub3QgZXhjZWVkZWQsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbCB0b21veW9fbWVtb3J5X29rKHZvaWQgKnB0cikKK3sKKwlzaXplX3QgcyA9IHB0ciA/IGtzaXplKHB0cikgOiAwOworCWF0b21pY19hZGQocywgJnRvbW95b19wb2xpY3lfbWVtb3J5X3NpemUpOworCWlmIChwdHIgJiYgKCF0b21veW9fcXVvdGFfZm9yX3BvbGljeSB8fAorCQkgICAgYXRvbWljX3JlYWQoJnRvbW95b19wb2xpY3lfbWVtb3J5X3NpemUpCisJCSAgICA8PSB0b21veW9fcXVvdGFfZm9yX3BvbGljeSkpIHsKKwkJbWVtc2V0KHB0ciwgMCwgcyk7CisJCXJldHVybiB0cnVlOworCX0KKwlhdG9taWNfc3ViKHMsICZ0b21veW9fcG9saWN5X21lbW9yeV9zaXplKTsKKwl0b21veW9fd2Fybl9vb20oX19mdW5jX18pOworCXJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiB0b21veW9fY29tbWl0X29rIC0gQ2hlY2sgbWVtb3J5IHF1b3RhLgorICoKKyAqIEBkYXRhOiAgIERhdGEgdG8gY29weSBmcm9tLgorICogQHNpemU6ICAgU2l6ZSBpbiBieXRlLgorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byBhbGxvY2F0ZWQgbWVtb3J5IG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICogQGRhdGEgaXMgemVyby1jbGVhcmVkIG9uIHN1Y2Nlc3MuCisgKi8KK3ZvaWQgKnRvbW95b19jb21taXRfb2sodm9pZCAqZGF0YSwgY29uc3QgdW5zaWduZWQgaW50IHNpemUpCit7CisJdm9pZCAqcHRyID0ga3phbGxvYyhzaXplLCBHRlBfTk9GUyk7CisJaWYgKHRvbW95b19tZW1vcnlfb2socHRyKSkgeworCQltZW1tb3ZlKHB0ciwgZGF0YSwgc2l6ZSk7CisJCW1lbXNldChkYXRhLCAwLCBzaXplKTsKKwkJcmV0dXJuIHB0cjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogdG9tb3lvX21lbW9yeV9mcmVlIC0gRnJlZSBtZW1vcnkgZm9yIGVsZW1lbnRzLgorICoKKyAqIEBwdHI6ICBQb2ludGVyIHRvIGFsbG9jYXRlZCBtZW1vcnkuCisgKi8KK3ZvaWQgdG9tb3lvX21lbW9yeV9mcmVlKHZvaWQgKnB0cikKK3sKKwlhdG9taWNfc3ViKGtzaXplKHB0ciksICZ0b21veW9fcG9saWN5X21lbW9yeV9zaXplKTsKKwlrZnJlZShwdHIpOworfQorCisvKioKKyAqIHRvbW95b19nZXRfZ3JvdXAgLSBBbGxvY2F0ZSBtZW1vcnkgZm9yICJzdHJ1Y3QgdG9tb3lvX3BhdGhfZ3JvdXAiLyJzdHJ1Y3QgdG9tb3lvX251bWJlcl9ncm91cCIuCisgKgorICogQGdyb3VwX25hbWU6IFRoZSBuYW1lIG9mIGFkZHJlc3MgZ3JvdXAuCisgKiBAaWR4OiAgICAgICAgSW5kZXggbnVtYmVyLgorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byAic3RydWN0IHRvbW95b19ncm91cCIgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKi8KK3N0cnVjdCB0b21veW9fZ3JvdXAgKnRvbW95b19nZXRfZ3JvdXAoY29uc3QgY2hhciAqZ3JvdXBfbmFtZSwgY29uc3QgdTggaWR4KQoreworCXN0cnVjdCB0b21veW9fZ3JvdXAgZSA9IHsgfTsKKwlzdHJ1Y3QgdG9tb3lvX2dyb3VwICpncm91cCA9IE5VTEw7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCWlmICghdG9tb3lvX2NvcnJlY3Rfd29yZChncm91cF9uYW1lKSB8fCBpZHggPj0gVE9NT1lPX01BWF9HUk9VUCkKKwkJcmV0dXJuIE5VTEw7CisJZS5ncm91cF9uYW1lID0gdG9tb3lvX2dldF9uYW1lKGdyb3VwX25hbWUpOworCWlmICghZS5ncm91cF9uYW1lKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ0b21veW9fcG9saWN5X2xvY2spKQorCQlnb3RvIG91dDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGdyb3VwLCAmdG9tb3lvX2dyb3VwX2xpc3RbaWR4XSwgbGlzdCkgeworCQlpZiAoZS5ncm91cF9uYW1lICE9IGdyb3VwLT5ncm91cF9uYW1lKQorCQkJY29udGludWU7CisJCWF0b21pY19pbmMoJmdyb3VwLT51c2Vycyk7CisJCWZvdW5kID0gdHJ1ZTsKKwkJYnJlYWs7CisJfQorCWlmICghZm91bmQpIHsKKwkJc3RydWN0IHRvbW95b19ncm91cCAqZW50cnkgPSB0b21veW9fY29tbWl0X29rKCZlLCBzaXplb2YoZSkpOworCQlpZiAoZW50cnkpIHsKKwkJCUlOSVRfTElTVF9IRUFEKCZlbnRyeS0+bWVtYmVyX2xpc3QpOworCQkJYXRvbWljX3NldCgmZW50cnktPnVzZXJzLCAxKTsKKwkJCWxpc3RfYWRkX3RhaWxfcmN1KCZlbnRyeS0+bGlzdCwKKwkJCQkJICAmdG9tb3lvX2dyb3VwX2xpc3RbaWR4XSk7CisJCQlncm91cCA9IGVudHJ5OworCQkJZm91bmQgPSB0cnVlOworCQl9CisJfQorCW11dGV4X3VubG9jaygmdG9tb3lvX3BvbGljeV9sb2NrKTsKKyBvdXQ6CisJdG9tb3lvX3B1dF9uYW1lKGUuZ3JvdXBfbmFtZSk7CisJcmV0dXJuIGZvdW5kID8gZ3JvdXAgOiBOVUxMOworfQorCisvKgorICogdG9tb3lvX25hbWVfbGlzdCBpcyB1c2VkIGZvciBob2xkaW5nIHN0cmluZyBkYXRhIHVzZWQgYnkgVE9NT1lPLgorICogU2luY2Ugc2FtZSBzdHJpbmcgZGF0YSBpcyBsaWtlbHkgdXNlZCBmb3IgbXVsdGlwbGUgdGltZXMgKGUuZy4KKyAqICIvbGliL2xpYmMtMi41LnNvIiksIFRPTU9ZTyBzaGFyZXMgc3RyaW5nIGRhdGEgaW4gdGhlIGZvcm0gb2YKKyAqICJjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqIi4KKyAqLworc3RydWN0IGxpc3RfaGVhZCB0b21veW9fbmFtZV9saXN0W1RPTU9ZT19NQVhfSEFTSF07CisKKy8qKgorICogdG9tb3lvX2dldF9uYW1lIC0gQWxsb2NhdGUgcGVybWFuZW50IG1lbW9yeSBmb3Igc3RyaW5nIGRhdGEuCisgKgorICogQG5hbWU6IFRoZSBzdHJpbmcgdG8gc3RvcmUgaW50byB0aGUgcGVybWVybmVudCBtZW1vcnkuCisgKgorICogUmV0dXJucyBwb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyIgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKi8KK2NvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICp0b21veW9fZ2V0X25hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX25hbWUgKnB0cjsKKwl1bnNpZ25lZCBpbnQgaGFzaDsKKwlpbnQgbGVuOworCWludCBhbGxvY2F0ZWRfbGVuOworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CisKKwlpZiAoIW5hbWUpCisJCXJldHVybiBOVUxMOworCWxlbiA9IHN0cmxlbihuYW1lKSArIDE7CisJaGFzaCA9IGZ1bGxfbmFtZV9oYXNoKChjb25zdCB1bnNpZ25lZCBjaGFyICopIG5hbWUsIGxlbiAtIDEpOworCWhlYWQgPSAmdG9tb3lvX25hbWVfbGlzdFtoYXNoX2xvbmcoaGFzaCwgVE9NT1lPX0hBU0hfQklUUyldOworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnRvbW95b19wb2xpY3lfbG9jaykpCisJCXJldHVybiBOVUxMOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCBoZWFkLCBsaXN0KSB7CisJCWlmIChoYXNoICE9IHB0ci0+ZW50cnkuaGFzaCB8fCBzdHJjbXAobmFtZSwgcHRyLT5lbnRyeS5uYW1lKSkKKwkJCWNvbnRpbnVlOworCQlhdG9taWNfaW5jKCZwdHItPnVzZXJzKTsKKwkJZ290byBvdXQ7CisJfQorCXB0ciA9IGt6YWxsb2Moc2l6ZW9mKCpwdHIpICsgbGVuLCBHRlBfTk9GUyk7CisJYWxsb2NhdGVkX2xlbiA9IHB0ciA/IGtzaXplKHB0cikgOiAwOworCWlmICghcHRyIHx8ICh0b21veW9fcXVvdGFfZm9yX3BvbGljeSAmJgorCQkgICAgIGF0b21pY19yZWFkKCZ0b21veW9fcG9saWN5X21lbW9yeV9zaXplKSArIGFsbG9jYXRlZF9sZW4KKwkJICAgICA+IHRvbW95b19xdW90YV9mb3JfcG9saWN5KSkgeworCQlrZnJlZShwdHIpOworCQlwdHIgPSBOVUxMOworCQl0b21veW9fd2Fybl9vb20oX19mdW5jX18pOworCQlnb3RvIG91dDsKKwl9CisJYXRvbWljX2FkZChhbGxvY2F0ZWRfbGVuLCAmdG9tb3lvX3BvbGljeV9tZW1vcnlfc2l6ZSk7CisJcHRyLT5lbnRyeS5uYW1lID0gKChjaGFyICopIHB0cikgKyBzaXplb2YoKnB0cik7CisJbWVtbW92ZSgoY2hhciAqKSBwdHItPmVudHJ5Lm5hbWUsIG5hbWUsIGxlbik7CisJYXRvbWljX3NldCgmcHRyLT51c2VycywgMSk7CisJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZwdHItPmVudHJ5KTsKKwlsaXN0X2FkZF90YWlsKCZwdHItPmxpc3QsIGhlYWQpOworIG91dDoKKwltdXRleF91bmxvY2soJnRvbW95b19wb2xpY3lfbG9jayk7CisJcmV0dXJuIHB0ciA/ICZwdHItPmVudHJ5IDogTlVMTDsKK30KKworLyoqCisgKiB0b21veW9fbW1faW5pdCAtIEluaXRpYWxpemUgbW0gcmVsYXRlZCBjb2RlLgorICovCit2b2lkIF9faW5pdCB0b21veW9fbW1faW5pdCh2b2lkKQoreworCWludCBpZHg7CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IFRPTU9ZT19NQVhfUE9MSUNZOyBpZHgrKykKKwkJSU5JVF9MSVNUX0hFQUQoJnRvbW95b19wb2xpY3lfbGlzdFtpZHhdKTsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IFRPTU9ZT19NQVhfR1JPVVA7IGlkeCsrKQorCQlJTklUX0xJU1RfSEVBRCgmdG9tb3lvX2dyb3VwX2xpc3RbaWR4XSk7CisJZm9yIChpZHggPSAwOyBpZHggPCBUT01PWU9fTUFYX0hBU0g7IGlkeCsrKQorCQlJTklUX0xJU1RfSEVBRCgmdG9tb3lvX25hbWVfbGlzdFtpZHhdKTsKKwlJTklUX0xJU1RfSEVBRCgmdG9tb3lvX2tlcm5lbF9kb21haW4uYWNsX2luZm9fbGlzdCk7CisJdG9tb3lvX2tlcm5lbF9kb21haW4uZG9tYWlubmFtZSA9IHRvbW95b19nZXRfbmFtZShUT01PWU9fUk9PVF9OQU1FKTsKKwlsaXN0X2FkZF90YWlsX3JjdSgmdG9tb3lvX2tlcm5lbF9kb21haW4ubGlzdCwgJnRvbW95b19kb21haW5fbGlzdCk7CisJaWR4ID0gdG9tb3lvX3JlYWRfbG9jaygpOworCWlmICh0b21veW9fZmluZF9kb21haW4oVE9NT1lPX1JPT1RfTkFNRSkgIT0gJnRvbW95b19rZXJuZWxfZG9tYWluKQorCQlwYW5pYygiQ2FuJ3QgcmVnaXN0ZXIgdG9tb3lvX2tlcm5lbF9kb21haW4iKTsKKwl7CisJCS8qIExvYWQgYnVpbHQtaW4gcG9saWN5LiAqLworCQl0b21veW9fd3JpdGVfdHJhbnNpdGlvbl9jb250cm9sKCIvc2Jpbi9ob3RwbHVnIiwgZmFsc2UsCisJCQkJCVRPTU9ZT19UUkFOU0lUSU9OX0NPTlRST0xfSU5JVElBTElaRSk7CisJCXRvbW95b193cml0ZV90cmFuc2l0aW9uX2NvbnRyb2woIi9zYmluL21vZHByb2JlIiwgZmFsc2UsCisJCQkJCVRPTU9ZT19UUkFOU0lUSU9OX0NPTlRST0xfSU5JVElBTElaRSk7CisJfQorCXRvbW95b19yZWFkX3VubG9jayhpZHgpOworfQorCisKKy8qIE1lbW9yeSBhbGxvY2F0ZWQgZm9yIHF1ZXJ5IGxpc3RzLiAqLwordW5zaWduZWQgaW50IHRvbW95b19xdWVyeV9tZW1vcnlfc2l6ZTsKKy8qIFF1b3RhIGZvciBob2xkaW5nIHF1ZXJ5IGxpc3RzLiAqLwordW5zaWduZWQgaW50IHRvbW95b19xdW90YV9mb3JfcXVlcnk7CisKKy8qKgorICogdG9tb3lvX3JlYWRfbWVtb3J5X2NvdW50ZXIgLSBDaGVjayBmb3IgbWVtb3J5IHVzYWdlIGluIGJ5dGVzLgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyBtZW1vcnkgdXNhZ2UuCisgKi8KK3ZvaWQgdG9tb3lvX3JlYWRfbWVtb3J5X2NvdW50ZXIoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJaWYgKCFoZWFkLT5yLmVvZikgeworCQljb25zdCB1bnNpZ25lZCBpbnQgcG9saWN5CisJCQk9IGF0b21pY19yZWFkKCZ0b21veW9fcG9saWN5X21lbW9yeV9zaXplKTsKKwkJY29uc3QgdW5zaWduZWQgaW50IHF1ZXJ5ID0gdG9tb3lvX3F1ZXJ5X21lbW9yeV9zaXplOworCQljaGFyIGJ1ZmZlcls2NF07CisKKwkJbWVtc2V0KGJ1ZmZlciwgMCwgc2l6ZW9mKGJ1ZmZlcikpOworCQlpZiAodG9tb3lvX3F1b3RhX2Zvcl9wb2xpY3kpCisJCQlzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpIC0gMSwKKwkJCQkgIiAgIChRdW90YTogJTEwdSkiLAorCQkJCSB0b21veW9fcXVvdGFfZm9yX3BvbGljeSk7CisJCWVsc2UKKwkJCWJ1ZmZlclswXSA9ICdcMCc7CisJCXRvbW95b19pb19wcmludGYoaGVhZCwgIlBvbGljeTogICAgICAgJTEwdSVzXG4iLCBwb2xpY3ksCisJCQkJIGJ1ZmZlcik7CisJCWlmICh0b21veW9fcXVvdGFfZm9yX3F1ZXJ5KQorCQkJc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSAtIDEsCisJCQkJICIgICAoUXVvdGE6ICUxMHUpIiwKKwkJCQkgdG9tb3lvX3F1b3RhX2Zvcl9xdWVyeSk7CisJCWVsc2UKKwkJCWJ1ZmZlclswXSA9ICdcMCc7CisJCXRvbW95b19pb19wcmludGYoaGVhZCwgIlF1ZXJ5IGxpc3RzOiAgJTEwdSVzXG4iLCBxdWVyeSwKKwkJCQkgYnVmZmVyKTsKKwkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiVG90YWw6ICAgICAgICAlMTB1XG4iLCBwb2xpY3kgKyBxdWVyeSk7CisJCWhlYWQtPnIuZW9mID0gdHJ1ZTsKKwl9Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX21lbW9yeV9xdW90YSAtIFNldCBtZW1vcnkgcXVvdGEuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIDAuCisgKi8KK2ludCB0b21veW9fd3JpdGVfbWVtb3J5X3F1b3RhKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCWNoYXIgKmRhdGEgPSBoZWFkLT53cml0ZV9idWY7CisJdW5zaWduZWQgaW50IHNpemU7CisKKwlpZiAoc3NjYW5mKGRhdGEsICJQb2xpY3k6ICV1IiwgJnNpemUpID09IDEpCisJCXRvbW95b19xdW90YV9mb3JfcG9saWN5ID0gc2l6ZTsKKwllbHNlIGlmIChzc2NhbmYoZGF0YSwgIlF1ZXJ5IGxpc3RzOiAldSIsICZzaXplKSA9PSAxKQorCQl0b21veW9fcXVvdGFfZm9yX3F1ZXJ5ID0gc2l6ZTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9tb3VudC5jIGIvc2VjdXJpdHkvdG9tb3lvL21vdW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJiZjhjMgotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9tb3VudC5jCkBAIC0wLDAgKzEsMjg0IEBACisvKgorICogc2VjdXJpdHkvdG9tb3lvL21vdW50LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCAgTlRUIERBVEEgQ09SUE9SQVRJT04KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorCisvKiBLZXl3b3JkcyBmb3IgbW91bnQgcmVzdHJpY3Rpb25zLiAqLworCisvKiBBbGxvdyB0byBjYWxsICdtb3VudCAtLWJpbmQgL3NvdXJjZV9kaXIgL2Rlc3RfZGlyJyAqLworI2RlZmluZSBUT01PWU9fTU9VTlRfQklORF9LRVlXT1JEICAgICAgICAgICAgICAgICAgICAgICAgIi0tYmluZCIKKy8qIEFsbG93IHRvIGNhbGwgJ21vdW50IC0tbW92ZSAvb2xkX2RpciAgICAvbmV3X2RpciAnICovCisjZGVmaW5lIFRPTU9ZT19NT1VOVF9NT1ZFX0tFWVdPUkQgICAgICAgICAgICAgICAgICAgICAgICAiLS1tb3ZlIgorLyogQWxsb3cgdG8gY2FsbCAnbW91bnQgLW8gcmVtb3VudCAvZGlyICAgICAgICAgICAgICcgKi8KKyNkZWZpbmUgVE9NT1lPX01PVU5UX1JFTU9VTlRfS0VZV09SRCAgICAgICAgICAgICAgICAgICAgICItLXJlbW91bnQiCisvKiBBbGxvdyB0byBjYWxsICdtb3VudCAtLW1ha2UtdW5iaW5kYWJsZSAvZGlyJyAgICAgICAqLworI2RlZmluZSBUT01PWU9fTU9VTlRfTUFLRV9VTkJJTkRBQkxFX0tFWVdPUkQgICAgICAgICAgICAgIi0tbWFrZS11bmJpbmRhYmxlIgorLyogQWxsb3cgdG8gY2FsbCAnbW91bnQgLS1tYWtlLXByaXZhdGUgL2RpcicgICAgICAgICAgKi8KKyNkZWZpbmUgVE9NT1lPX01PVU5UX01BS0VfUFJJVkFURV9LRVlXT1JEICAgICAgICAgICAgICAgICItLW1ha2UtcHJpdmF0ZSIKKy8qIEFsbG93IHRvIGNhbGwgJ21vdW50IC0tbWFrZS1zbGF2ZSAvZGlyJyAgICAgICAgICAgICovCisjZGVmaW5lIFRPTU9ZT19NT1VOVF9NQUtFX1NMQVZFX0tFWVdPUkQgICAgICAgICAgICAgICAgICAiLS1tYWtlLXNsYXZlIgorLyogQWxsb3cgdG8gY2FsbCAnbW91bnQgLS1tYWtlLXNoYXJlZCAvZGlyJyAgICAgICAgICAgKi8KKyNkZWZpbmUgVE9NT1lPX01PVU5UX01BS0VfU0hBUkVEX0tFWVdPUkQgICAgICAgICAgICAgICAgICItLW1ha2Utc2hhcmVkIgorCisvKioKKyAqIHRvbW95b19hdWRpdF9tb3VudF9sb2cgLSBBdWRpdCBtb3VudCBsb2cuCisgKgorICogQHI6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fcmVxdWVzdF9pbmZvIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19hdWRpdF9tb3VudF9sb2coc3RydWN0IHRvbW95b19yZXF1ZXN0X2luZm8gKnIpCit7CisJY29uc3QgY2hhciAqZGV2ID0gci0+cGFyYW0ubW91bnQuZGV2LT5uYW1lOworCWNvbnN0IGNoYXIgKmRpciA9IHItPnBhcmFtLm1vdW50LmRpci0+bmFtZTsKKwljb25zdCBjaGFyICp0eXBlID0gci0+cGFyYW0ubW91bnQudHlwZS0+bmFtZTsKKwljb25zdCB1bnNpZ25lZCBsb25nIGZsYWdzID0gci0+cGFyYW0ubW91bnQuZmxhZ3M7CisJaWYgKHItPmdyYW50ZWQpCisJCXJldHVybiAwOworCWlmICghc3RyY21wKHR5cGUsIFRPTU9ZT19NT1VOVF9SRU1PVU5UX0tFWVdPUkQpKQorCQl0b21veW9fd2Fybl9sb2cociwgIm1vdW50IC1vIHJlbW91bnQgJXMgMHglbFgiLCBkaXIsIGZsYWdzKTsKKwllbHNlIGlmICghc3RyY21wKHR5cGUsIFRPTU9ZT19NT1VOVF9CSU5EX0tFWVdPUkQpCisJCSB8fCAhc3RyY21wKHR5cGUsIFRPTU9ZT19NT1VOVF9NT1ZFX0tFWVdPUkQpKQorCQl0b21veW9fd2Fybl9sb2cociwgIm1vdW50ICVzICVzICVzIDB4JWxYIiwgdHlwZSwgZGV2LCBkaXIsCisJCQkJZmxhZ3MpOworCWVsc2UgaWYgKCFzdHJjbXAodHlwZSwgVE9NT1lPX01PVU5UX01BS0VfVU5CSU5EQUJMRV9LRVlXT1JEKSB8fAorCQkgIXN0cmNtcCh0eXBlLCBUT01PWU9fTU9VTlRfTUFLRV9QUklWQVRFX0tFWVdPUkQpIHx8CisJCSAhc3RyY21wKHR5cGUsIFRPTU9ZT19NT1VOVF9NQUtFX1NMQVZFX0tFWVdPUkQpIHx8CisJCSAhc3RyY21wKHR5cGUsIFRPTU9ZT19NT1VOVF9NQUtFX1NIQVJFRF9LRVlXT1JEKSkKKwkJdG9tb3lvX3dhcm5fbG9nKHIsICJtb3VudCAlcyAlcyAweCVsWCIsIHR5cGUsIGRpciwgZmxhZ3MpOworCWVsc2UKKwkJdG9tb3lvX3dhcm5fbG9nKHIsICJtb3VudCAtdCAlcyAlcyAlcyAweCVsWCIsIHR5cGUsIGRldiwgZGlyLAorCQkJCWZsYWdzKTsKKwlyZXR1cm4gdG9tb3lvX3N1cGVydmlzb3IociwKKwkJCQkgVE9NT1lPX0tFWVdPUkRfQUxMT1dfTU9VTlQgIiVzICVzICVzIDB4JWxYXG4iLAorCQkJCSB0b21veW9fcGF0dGVybihyLT5wYXJhbS5tb3VudC5kZXYpLAorCQkJCSB0b21veW9fcGF0dGVybihyLT5wYXJhbS5tb3VudC5kaXIpLCB0eXBlLAorCQkJCSBmbGFncyk7Cit9CisKK3N0YXRpYyBib29sIHRvbW95b19jaGVja19tb3VudF9hY2woc3RydWN0IHRvbW95b19yZXF1ZXN0X2luZm8gKnIsCisJCQkJICAgY29uc3Qgc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyKQoreworCWNvbnN0IHN0cnVjdCB0b21veW9fbW91bnRfYWNsICphY2wgPQorCQljb250YWluZXJfb2YocHRyLCB0eXBlb2YoKmFjbCksIGhlYWQpOworCXJldHVybiB0b21veW9fY29tcGFyZV9udW1iZXJfdW5pb24oci0+cGFyYW0ubW91bnQuZmxhZ3MsICZhY2wtPmZsYWdzKSAmJgorCQl0b21veW9fY29tcGFyZV9uYW1lX3VuaW9uKHItPnBhcmFtLm1vdW50LnR5cGUsICZhY2wtPmZzX3R5cGUpICYmCisJCXRvbW95b19jb21wYXJlX25hbWVfdW5pb24oci0+cGFyYW0ubW91bnQuZGlyLCAmYWNsLT5kaXJfbmFtZSkgJiYKKwkJKCFyLT5wYXJhbS5tb3VudC5uZWVkX2RldiB8fAorCQkgdG9tb3lvX2NvbXBhcmVfbmFtZV91bmlvbihyLT5wYXJhbS5tb3VudC5kZXYsICZhY2wtPmRldl9uYW1lKSk7Cit9CisKKy8qKgorICogdG9tb3lvX21vdW50X2FjbCAtIENoZWNrIHBlcm1pc3Npb24gZm9yIG1vdW50KCkgb3BlcmF0aW9uLgorICoKKyAqIEByOiAgICAgICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19yZXF1ZXN0X2luZm8iLgorICogQGRldl9uYW1lOiBOYW1lIG9mIGRldmljZSBmaWxlLgorICogQGRpcjogICAgICBQb2ludGVyIHRvICJzdHJ1Y3QgcGF0aCIuCisgKiBAdHlwZTogICAgIE5hbWUgb2YgZmlsZXN5c3RlbSB0eXBlLgorICogQGZsYWdzOiAgICBNb3VudCBvcHRpb25zLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KKyAqLworc3RhdGljIGludCB0b21veW9fbW91bnRfYWNsKHN0cnVjdCB0b21veW9fcmVxdWVzdF9pbmZvICpyLCBjaGFyICpkZXZfbmFtZSwKKwkJCSAgICBzdHJ1Y3QgcGF0aCAqZGlyLCBjaGFyICp0eXBlLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBwYXRoIHBhdGg7CisJc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzdHlwZSA9IE5VTEw7CisJY29uc3QgY2hhciAqcmVxdWVzdGVkX3R5cGUgPSBOVUxMOworCWNvbnN0IGNoYXIgKnJlcXVlc3RlZF9kaXJfbmFtZSA9IE5VTEw7CisJY29uc3QgY2hhciAqcmVxdWVzdGVkX2Rldl9uYW1lID0gTlVMTDsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBydHlwZTsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyByZGV2OworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvIHJkaXI7CisJaW50IG5lZWRfZGV2ID0gMDsKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCisJLyogR2V0IGZzdHlwZS4gKi8KKwlyZXF1ZXN0ZWRfdHlwZSA9IHRvbW95b19lbmNvZGUodHlwZSk7CisJaWYgKCFyZXF1ZXN0ZWRfdHlwZSkKKwkJZ290byBvdXQ7CisJcnR5cGUubmFtZSA9IHJlcXVlc3RlZF90eXBlOworCXRvbW95b19maWxsX3BhdGhfaW5mbygmcnR5cGUpOworCisJLyogR2V0IG1vdW50IHBvaW50LiAqLworCXJlcXVlc3RlZF9kaXJfbmFtZSA9IHRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgoZGlyKTsKKwlpZiAoIXJlcXVlc3RlZF9kaXJfbmFtZSkgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlyZGlyLm5hbWUgPSByZXF1ZXN0ZWRfZGlyX25hbWU7CisJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZyZGlyKTsKKworCS8qIENvbXBhcmUgZnMgbmFtZS4gKi8KKwlpZiAoIXN0cmNtcCh0eXBlLCBUT01PWU9fTU9VTlRfUkVNT1VOVF9LRVlXT1JEKSkgeworCQkvKiBkZXZfbmFtZSBpcyBpZ25vcmVkLiAqLworCX0gZWxzZSBpZiAoIXN0cmNtcCh0eXBlLCBUT01PWU9fTU9VTlRfTUFLRV9VTkJJTkRBQkxFX0tFWVdPUkQpIHx8CisJCSAgICFzdHJjbXAodHlwZSwgVE9NT1lPX01PVU5UX01BS0VfUFJJVkFURV9LRVlXT1JEKSB8fAorCQkgICAhc3RyY21wKHR5cGUsIFRPTU9ZT19NT1VOVF9NQUtFX1NMQVZFX0tFWVdPUkQpIHx8CisJCSAgICFzdHJjbXAodHlwZSwgVE9NT1lPX01PVU5UX01BS0VfU0hBUkVEX0tFWVdPUkQpKSB7CisJCS8qIGRldl9uYW1lIGlzIGlnbm9yZWQuICovCisJfSBlbHNlIGlmICghc3RyY21wKHR5cGUsIFRPTU9ZT19NT1VOVF9CSU5EX0tFWVdPUkQpIHx8CisJCSAgICFzdHJjbXAodHlwZSwgVE9NT1lPX01PVU5UX01PVkVfS0VZV09SRCkpIHsKKwkJbmVlZF9kZXYgPSAtMTsgLyogZGV2X25hbWUgaXMgYSBkaXJlY3RvcnkgKi8KKwl9IGVsc2UgeworCQlmc3R5cGUgPSBnZXRfZnNfdHlwZSh0eXBlKTsKKwkJaWYgKCFmc3R5cGUpIHsKKwkJCWVycm9yID0gLUVOT0RFVjsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChmc3R5cGUtPmZzX2ZsYWdzICYgRlNfUkVRVUlSRVNfREVWKQorCQkJLyogZGV2X25hbWUgaXMgYSBibG9jayBkZXZpY2UgZmlsZS4gKi8KKwkJCW5lZWRfZGV2ID0gMTsKKwl9CisJaWYgKG5lZWRfZGV2KSB7CisJCS8qIEdldCBtb3VudCBwb2ludCBvciBkZXZpY2UgZmlsZS4gKi8KKwkJaWYgKGtlcm5fcGF0aChkZXZfbmFtZSwgTE9PS1VQX0ZPTExPVywgJnBhdGgpKSB7CisJCQllcnJvciA9IC1FTk9FTlQ7CisJCQlnb3RvIG91dDsKKwkJfQorCQlyZXF1ZXN0ZWRfZGV2X25hbWUgPSB0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoKCZwYXRoKTsKKwkJaWYgKCFyZXF1ZXN0ZWRfZGV2X25hbWUpIHsKKwkJCWVycm9yID0gLUVOT0VOVDsKKwkJCWdvdG8gb3V0OworCQl9CisJfSBlbHNlIHsKKwkJLyogTWFwIGRldl9uYW1lIHRvICI8TlVMTD4iIGlmIG5vIGRldl9uYW1lIGdpdmVuLiAqLworCQlpZiAoIWRldl9uYW1lKQorCQkJZGV2X25hbWUgPSAiPE5VTEw+IjsKKwkJcmVxdWVzdGVkX2Rldl9uYW1lID0gdG9tb3lvX2VuY29kZShkZXZfbmFtZSk7CisJCWlmICghcmVxdWVzdGVkX2Rldl9uYW1lKSB7CisJCQllcnJvciA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwlyZGV2Lm5hbWUgPSByZXF1ZXN0ZWRfZGV2X25hbWU7CisJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZyZGV2KTsKKwlyLT5wYXJhbV90eXBlID0gVE9NT1lPX1RZUEVfTU9VTlRfQUNMOworCXItPnBhcmFtLm1vdW50Lm5lZWRfZGV2ID0gbmVlZF9kZXY7CisJci0+cGFyYW0ubW91bnQuZGV2ID0gJnJkZXY7CisJci0+cGFyYW0ubW91bnQuZGlyID0gJnJkaXI7CisJci0+cGFyYW0ubW91bnQudHlwZSA9ICZydHlwZTsKKwlyLT5wYXJhbS5tb3VudC5mbGFncyA9IGZsYWdzOworCWRvIHsKKwkJdG9tb3lvX2NoZWNrX2FjbChyLCB0b21veW9fY2hlY2tfbW91bnRfYWNsKTsKKwkJZXJyb3IgPSB0b21veW9fYXVkaXRfbW91bnRfbG9nKHIpOworCX0gd2hpbGUgKGVycm9yID09IFRPTU9ZT19SRVRSWV9SRVFVRVNUKTsKKyBvdXQ6CisJa2ZyZWUocmVxdWVzdGVkX2Rldl9uYW1lKTsKKwlrZnJlZShyZXF1ZXN0ZWRfZGlyX25hbWUpOworCWlmIChmc3R5cGUpCisJCXB1dF9maWxlc3lzdGVtKGZzdHlwZSk7CisJa2ZyZWUocmVxdWVzdGVkX3R5cGUpOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fbW91bnRfcGVybWlzc2lvbiAtIENoZWNrIHBlcm1pc3Npb24gZm9yIG1vdW50KCkgb3BlcmF0aW9uLgorICoKKyAqIEBkZXZfbmFtZTogIE5hbWUgb2YgZGV2aWNlIGZpbGUuCisgKiBAcGF0aDogICAgICBQb2ludGVyIHRvICJzdHJ1Y3QgcGF0aCIuCisgKiBAdHlwZTogICAgICBOYW1lIG9mIGZpbGVzeXN0ZW0gdHlwZS4gTWF5IGJlIE5VTEwuCisgKiBAZmxhZ3M6ICAgICBNb3VudCBvcHRpb25zLgorICogQGRhdGFfcGFnZTogT3B0aW9uYWwgZGF0YS4gTWF5IGJlIE5VTEwuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b19tb3VudF9wZXJtaXNzaW9uKGNoYXIgKmRldl9uYW1lLCBzdHJ1Y3QgcGF0aCAqcGF0aCwgY2hhciAqdHlwZSwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpkYXRhX3BhZ2UpCit7CisJc3RydWN0IHRvbW95b19yZXF1ZXN0X2luZm8gcjsKKwlpbnQgZXJyb3I7CisJaW50IGlkeDsKKworCWlmICh0b21veW9faW5pdF9yZXF1ZXN0X2luZm8oJnIsIE5VTEwsIFRPTU9ZT19NQUNfRklMRV9NT1VOVCkKKwkgICAgPT0gVE9NT1lPX0NPTkZJR19ESVNBQkxFRCkKKwkJcmV0dXJuIDA7CisJaWYgKChmbGFncyAmIE1TX01HQ19NU0spID09IE1TX01HQ19WQUwpCisJCWZsYWdzICY9IH5NU19NR0NfTVNLOworCWlmIChmbGFncyAmIE1TX1JFTU9VTlQpIHsKKwkJdHlwZSA9IFRPTU9ZT19NT1VOVF9SRU1PVU5UX0tFWVdPUkQ7CisJCWZsYWdzICY9IH5NU19SRU1PVU5UOworCX0KKwlpZiAoZmxhZ3MgJiBNU19NT1ZFKSB7CisJCXR5cGUgPSBUT01PWU9fTU9VTlRfTU9WRV9LRVlXT1JEOworCQlmbGFncyAmPSB+TVNfTU9WRTsKKwl9CisJaWYgKGZsYWdzICYgTVNfQklORCkgeworCQl0eXBlID0gVE9NT1lPX01PVU5UX0JJTkRfS0VZV09SRDsKKwkJZmxhZ3MgJj0gfk1TX0JJTkQ7CisJfQorCWlmIChmbGFncyAmIE1TX1VOQklOREFCTEUpIHsKKwkJdHlwZSA9IFRPTU9ZT19NT1VOVF9NQUtFX1VOQklOREFCTEVfS0VZV09SRDsKKwkJZmxhZ3MgJj0gfk1TX1VOQklOREFCTEU7CisJfQorCWlmIChmbGFncyAmIE1TX1BSSVZBVEUpIHsKKwkJdHlwZSA9IFRPTU9ZT19NT1VOVF9NQUtFX1BSSVZBVEVfS0VZV09SRDsKKwkJZmxhZ3MgJj0gfk1TX1BSSVZBVEU7CisJfQorCWlmIChmbGFncyAmIE1TX1NMQVZFKSB7CisJCXR5cGUgPSBUT01PWU9fTU9VTlRfTUFLRV9TTEFWRV9LRVlXT1JEOworCQlmbGFncyAmPSB+TVNfU0xBVkU7CisJfQorCWlmIChmbGFncyAmIE1TX1NIQVJFRCkgeworCQl0eXBlID0gVE9NT1lPX01PVU5UX01BS0VfU0hBUkVEX0tFWVdPUkQ7CisJCWZsYWdzICY9IH5NU19TSEFSRUQ7CisJfQorCWlmICghdHlwZSkKKwkJdHlwZSA9ICI8TlVMTD4iOworCWlkeCA9IHRvbW95b19yZWFkX2xvY2soKTsKKwllcnJvciA9IHRvbW95b19tb3VudF9hY2woJnIsIGRldl9uYW1lLCBwYXRoLCB0eXBlLCBmbGFncyk7CisJdG9tb3lvX3JlYWRfdW5sb2NrKGlkeCk7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgYm9vbCB0b21veW9fc2FtZV9tb3VudF9hY2woY29uc3Qgc3RydWN0IHRvbW95b19hY2xfaW5mbyAqYSwKKwkJCQkgIGNvbnN0IHN0cnVjdCB0b21veW9fYWNsX2luZm8gKmIpCit7CisJY29uc3Qgc3RydWN0IHRvbW95b19tb3VudF9hY2wgKnAxID0gY29udGFpbmVyX29mKGEsIHR5cGVvZigqcDEpLCBoZWFkKTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX21vdW50X2FjbCAqcDIgPSBjb250YWluZXJfb2YoYiwgdHlwZW9mKCpwMiksIGhlYWQpOworCXJldHVybiB0b21veW9fc2FtZV9hY2xfaGVhZCgmcDEtPmhlYWQsICZwMi0+aGVhZCkgJiYKKwkJdG9tb3lvX3NhbWVfbmFtZV91bmlvbigmcDEtPmRldl9uYW1lLCAmcDItPmRldl9uYW1lKSAmJgorCQl0b21veW9fc2FtZV9uYW1lX3VuaW9uKCZwMS0+ZGlyX25hbWUsICZwMi0+ZGlyX25hbWUpICYmCisJCXRvbW95b19zYW1lX25hbWVfdW5pb24oJnAxLT5mc190eXBlLCAmcDItPmZzX3R5cGUpICYmCisJCXRvbW95b19zYW1lX251bWJlcl91bmlvbigmcDEtPmZsYWdzLCAmcDItPmZsYWdzKTsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfbW91bnQgLSBXcml0ZSAic3RydWN0IHRvbW95b19tb3VudF9hY2wiIGxpc3QuCisgKgorICogQGRhdGE6ICAgICAgU3RyaW5nIHRvIHBhcnNlLgorICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgorICovCitpbnQgdG9tb3lvX3dyaXRlX21vdW50KGNoYXIgKmRhdGEsIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJICAgICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCXN0cnVjdCB0b21veW9fbW91bnRfYWNsIGUgPSB7IC5oZWFkLnR5cGUgPSBUT01PWU9fVFlQRV9NT1VOVF9BQ0wgfTsKKwlpbnQgZXJyb3IgPSBpc19kZWxldGUgPyAtRU5PRU5UIDogLUVOT01FTTsKKwljaGFyICp3WzRdOworCWlmICghdG9tb3lvX3Rva2VuaXplKGRhdGEsIHcsIHNpemVvZih3KSkgfHwgIXdbM11bMF0pCisJCXJldHVybiAtRUlOVkFMOworCWlmICghdG9tb3lvX3BhcnNlX25hbWVfdW5pb24od1swXSwgJmUuZGV2X25hbWUpIHx8CisJICAgICF0b21veW9fcGFyc2VfbmFtZV91bmlvbih3WzFdLCAmZS5kaXJfbmFtZSkgfHwKKwkgICAgIXRvbW95b19wYXJzZV9uYW1lX3VuaW9uKHdbMl0sICZlLmZzX3R5cGUpIHx8CisJICAgICF0b21veW9fcGFyc2VfbnVtYmVyX3VuaW9uKHdbM10sICZlLmZsYWdzKSkKKwkJZ290byBvdXQ7CisJZXJyb3IgPSB0b21veW9fdXBkYXRlX2RvbWFpbigmZS5oZWFkLCBzaXplb2YoZSksIGlzX2RlbGV0ZSwgZG9tYWluLAorCQkJCSAgICAgdG9tb3lvX3NhbWVfbW91bnRfYWNsLCBOVUxMKTsKKyBvdXQ6CisJdG9tb3lvX3B1dF9uYW1lX3VuaW9uKCZlLmRldl9uYW1lKTsKKwl0b21veW9fcHV0X25hbWVfdW5pb24oJmUuZGlyX25hbWUpOworCXRvbW95b19wdXRfbmFtZV91bmlvbigmZS5mc190eXBlKTsKKwl0b21veW9fcHV0X251bWJlcl91bmlvbigmZS5mbGFncyk7CisJcmV0dXJuIGVycm9yOworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL3BhdGhfZ3JvdXAuYyBiL3NlY3VyaXR5L3RvbW95by9wYXRoX2dyb3VwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ODgwNDEuLjAwMDAwMDAKLS0tIGEvc2VjdXJpdHkvdG9tb3lvL3BhdGhfZ3JvdXAuYworKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0vKgotICogc2VjdXJpdHkvdG9tb3lvL3BhdGhfZ3JvdXAuYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5ICBOVFQgREFUQSBDT1JQT1JBVElPTgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSAiY29tbW9uLmgiCi0vKiBUaGUgbGlzdCBmb3IgInN0cnVjdCBjY3NfcGF0aF9ncm91cCIuICovCi1MSVNUX0hFQUQodG9tb3lvX3BhdGhfZ3JvdXBfbGlzdCk7Ci0KLS8qKgotICogdG9tb3lvX2dldF9wYXRoX2dyb3VwIC0gQWxsb2NhdGUgbWVtb3J5IGZvciAic3RydWN0IHRvbW95b19wYXRoX2dyb3VwIi4KLSAqCi0gKiBAZ3JvdXBfbmFtZTogVGhlIG5hbWUgb2YgcGF0aG5hbWUgZ3JvdXAuCi0gKgotICogUmV0dXJucyBwb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX3BhdGhfZ3JvdXAiIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgotICovCi1zdHJ1Y3QgdG9tb3lvX3BhdGhfZ3JvdXAgKnRvbW95b19nZXRfcGF0aF9ncm91cChjb25zdCBjaGFyICpncm91cF9uYW1lKQotewotCXN0cnVjdCB0b21veW9fcGF0aF9ncm91cCAqZW50cnkgPSBOVUxMOwotCXN0cnVjdCB0b21veW9fcGF0aF9ncm91cCAqZ3JvdXAgPSBOVUxMOwotCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9ncm91cF9uYW1lOwotCWludCBlcnJvciA9IC1FTk9NRU07Ci0JaWYgKCF0b21veW9faXNfY29ycmVjdF9wYXRoKGdyb3VwX25hbWUsIDAsIDAsIDApIHx8Ci0JICAgICFncm91cF9uYW1lWzBdKQotCQlyZXR1cm4gTlVMTDsKLQlzYXZlZF9ncm91cF9uYW1lID0gdG9tb3lvX2dldF9uYW1lKGdyb3VwX25hbWUpOwotCWlmICghc2F2ZWRfZ3JvdXBfbmFtZSkKLQkJcmV0dXJuIE5VTEw7Ci0JZW50cnkgPSBremFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfTk9GUyk7Ci0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdG9tb3lvX3BvbGljeV9sb2NrKSkKLQkJZ290byBvdXQ7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZ3JvdXAsICZ0b21veW9fcGF0aF9ncm91cF9saXN0LCBsaXN0KSB7Ci0JCWlmIChzYXZlZF9ncm91cF9uYW1lICE9IGdyb3VwLT5ncm91cF9uYW1lKQotCQkJY29udGludWU7Ci0JCWF0b21pY19pbmMoJmdyb3VwLT51c2Vycyk7Ci0JCWVycm9yID0gMDsKLQkJYnJlYWs7Ci0JfQotCWlmIChlcnJvciAmJiB0b21veW9fbWVtb3J5X29rKGVudHJ5KSkgewotCQlJTklUX0xJU1RfSEVBRCgmZW50cnktPm1lbWJlcl9saXN0KTsKLQkJZW50cnktPmdyb3VwX25hbWUgPSBzYXZlZF9ncm91cF9uYW1lOwotCQlzYXZlZF9ncm91cF9uYW1lID0gTlVMTDsKLQkJYXRvbWljX3NldCgmZW50cnktPnVzZXJzLCAxKTsKLQkJbGlzdF9hZGRfdGFpbF9yY3UoJmVudHJ5LT5saXN0LCAmdG9tb3lvX3BhdGhfZ3JvdXBfbGlzdCk7Ci0JCWdyb3VwID0gZW50cnk7Ci0JCWVudHJ5ID0gTlVMTDsKLQkJZXJyb3IgPSAwOwotCX0KLQltdXRleF91bmxvY2soJnRvbW95b19wb2xpY3lfbG9jayk7Ci0gb3V0OgotCXRvbW95b19wdXRfbmFtZShzYXZlZF9ncm91cF9uYW1lKTsKLQlrZnJlZShlbnRyeSk7Ci0JcmV0dXJuICFlcnJvciA/IGdyb3VwIDogTlVMTDsKLX0KLQotLyoqCi0gKiB0b21veW9fd3JpdGVfcGF0aF9ncm91cF9wb2xpY3kgLSBXcml0ZSAic3RydWN0IHRvbW95b19wYXRoX2dyb3VwIiBsaXN0LgotICoKLSAqIEBkYXRhOiAgICAgIFN0cmluZyB0byBwYXJzZS4KLSAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KLSAqCi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmFnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgotICovCi1pbnQgdG9tb3lvX3dyaXRlX3BhdGhfZ3JvdXBfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQotewotCXN0cnVjdCB0b21veW9fcGF0aF9ncm91cCAqZ3JvdXA7Ci0Jc3RydWN0IHRvbW95b19wYXRoX2dyb3VwX21lbWJlciAqbWVtYmVyOwotCXN0cnVjdCB0b21veW9fcGF0aF9ncm91cF9tZW1iZXIgZSA9IHsgfTsKLQlpbnQgZXJyb3IgPSBpc19kZWxldGUgPyAtRU5PRU5UIDogLUVOT01FTTsKLQljaGFyICp3WzJdOwotCWlmICghdG9tb3lvX3Rva2VuaXplKGRhdGEsIHcsIHNpemVvZih3KSkgfHwgIXdbMV1bMF0pCi0JCXJldHVybiAtRUlOVkFMOwotCWdyb3VwID0gdG9tb3lvX2dldF9wYXRoX2dyb3VwKHdbMF0pOwotCWlmICghZ3JvdXApCi0JCXJldHVybiAtRU5PTUVNOwotCWUubWVtYmVyX25hbWUgPSB0b21veW9fZ2V0X25hbWUod1sxXSk7Ci0JaWYgKCFlLm1lbWJlcl9uYW1lKQotCQlnb3RvIG91dDsKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ0b21veW9fcG9saWN5X2xvY2spKQotCQlnb3RvIG91dDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShtZW1iZXIsICZncm91cC0+bWVtYmVyX2xpc3QsIGxpc3QpIHsKLQkJaWYgKG1lbWJlci0+bWVtYmVyX25hbWUgIT0gZS5tZW1iZXJfbmFtZSkKLQkJCWNvbnRpbnVlOwotCQltZW1iZXItPmlzX2RlbGV0ZWQgPSBpc19kZWxldGU7Ci0JCWVycm9yID0gMDsKLQkJYnJlYWs7Ci0JfQotCWlmICghaXNfZGVsZXRlICYmIGVycm9yKSB7Ci0JCXN0cnVjdCB0b21veW9fcGF0aF9ncm91cF9tZW1iZXIgKmVudHJ5ID0KLQkJCXRvbW95b19jb21taXRfb2soJmUsIHNpemVvZihlKSk7Ci0JCWlmIChlbnRyeSkgewotCQkJbGlzdF9hZGRfdGFpbF9yY3UoJmVudHJ5LT5saXN0LCAmZ3JvdXAtPm1lbWJlcl9saXN0KTsKLQkJCWVycm9yID0gMDsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJnRvbW95b19wb2xpY3lfbG9jayk7Ci0gb3V0OgotCXRvbW95b19wdXRfbmFtZShlLm1lbWJlcl9uYW1lKTsKLQl0b21veW9fcHV0X3BhdGhfZ3JvdXAoZ3JvdXApOwotCXJldHVybiBlcnJvcjsKLX0KLQotLyoqCi0gKiB0b21veW9fcmVhZF9wYXRoX2dyb3VwX3BvbGljeSAtIFJlYWQgInN0cnVjdCB0b21veW9fcGF0aF9ncm91cCIgbGlzdC4KLSAqCi0gKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgotICoKLSAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCi0gKgotICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KLSAqLwotYm9vbCB0b21veW9fcmVhZF9wYXRoX2dyb3VwX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpncG9zOwotCXN0cnVjdCBsaXN0X2hlYWQgKm1wb3M7Ci0JbGlzdF9mb3JfZWFjaF9jb29raWUoZ3BvcywgaGVhZC0+cmVhZF92YXIxLCAmdG9tb3lvX3BhdGhfZ3JvdXBfbGlzdCkgewotCQlzdHJ1Y3QgdG9tb3lvX3BhdGhfZ3JvdXAgKmdyb3VwOwotCQlncm91cCA9IGxpc3RfZW50cnkoZ3Bvcywgc3RydWN0IHRvbW95b19wYXRoX2dyb3VwLCBsaXN0KTsKLQkJbGlzdF9mb3JfZWFjaF9jb29raWUobXBvcywgaGVhZC0+cmVhZF92YXIyLAotCQkJCSAgICAgJmdyb3VwLT5tZW1iZXJfbGlzdCkgewotCQkJc3RydWN0IHRvbW95b19wYXRoX2dyb3VwX21lbWJlciAqbWVtYmVyOwotCQkJbWVtYmVyID0gbGlzdF9lbnRyeShtcG9zLAotCQkJCQkgICAgc3RydWN0IHRvbW95b19wYXRoX2dyb3VwX21lbWJlciwKLQkJCQkJICAgIGxpc3QpOwotCQkJaWYgKG1lbWJlci0+aXNfZGVsZXRlZCkKLQkJCQljb250aW51ZTsKLQkJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCBUT01PWU9fS0VZV09SRF9QQVRIX0dST1VQCi0JCQkJCSAgICAgICIlcyAlc1xuIiwKLQkJCQkJICAgICAgZ3JvdXAtPmdyb3VwX25hbWUtPm5hbWUsCi0JCQkJCSAgICAgIG1lbWJlci0+bWVtYmVyX25hbWUtPm5hbWUpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyoqCi0gKiB0b21veW9fcGF0aF9tYXRjaGVzX2dyb3VwIC0gQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gcGF0aG5hbWUgbWF0Y2hlcyBtZW1iZXJzIG9mIHRoZSBnaXZlbiBwYXRobmFtZSBncm91cC4KLSAqCi0gKiBAcGF0aG5hbWU6ICAgICAgICBUaGUgbmFtZSBvZiBwYXRobmFtZS4KLSAqIEBncm91cDogICAgICAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fcGF0aF9ncm91cCIuCi0gKiBAbWF5X3VzZV9wYXR0ZXJuOiBUcnVlIGlmIHdpbGQgY2FyZCBpcyBwZXJtaXR0ZWQuCi0gKgotICogUmV0dXJucyB0cnVlIGlmIEBwYXRobmFtZSBtYXRjaGVzIHBhdGhuYW1lcyBpbiBAZ3JvdXAsIGZhbHNlIG90aGVyd2lzZS4KLSAqCi0gKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgotICovCi1ib29sIHRvbW95b19wYXRoX21hdGNoZXNfZ3JvdXAoY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnBhdGhuYW1lLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9ncm91cCAqZ3JvdXAsCi0JCQkgICAgICAgY29uc3QgYm9vbCBtYXlfdXNlX3BhdHRlcm4pCi17Ci0Jc3RydWN0IHRvbW95b19wYXRoX2dyb3VwX21lbWJlciAqbWVtYmVyOwotCWJvb2wgbWF0Y2hlZCA9IGZhbHNlOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG1lbWJlciwgJmdyb3VwLT5tZW1iZXJfbGlzdCwgbGlzdCkgewotCQlpZiAobWVtYmVyLT5pc19kZWxldGVkKQotCQkJY29udGludWU7Ci0JCWlmICghbWVtYmVyLT5tZW1iZXJfbmFtZS0+aXNfcGF0dGVybmVkKSB7Ci0JCQlpZiAodG9tb3lvX3BhdGhjbXAocGF0aG5hbWUsIG1lbWJlci0+bWVtYmVyX25hbWUpKQotCQkJCWNvbnRpbnVlOwotCQl9IGVsc2UgaWYgKG1heV91c2VfcGF0dGVybikgewotCQkJaWYgKCF0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4ocGF0aG5hbWUsCi0JCQkJCQkJIG1lbWJlci0+bWVtYmVyX25hbWUpKQotCQkJCWNvbnRpbnVlOwotCQl9IGVsc2UKLQkJCWNvbnRpbnVlOwotCQltYXRjaGVkID0gdHJ1ZTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiBtYXRjaGVkOwotfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmMgYi9zZWN1cml0eS90b21veW8vcmVhbHBhdGguYwppbmRleCBkMWI5NmYwLi5lZDhjY2Q2IDEwMDY0NAotLS0gYS9zZWN1cml0eS90b21veW8vcmVhbHBhdGguYworKysgYi9zZWN1cml0eS90b21veW8vcmVhbHBhdGguYwpAQCAtMSwxMzAgKzEsNzEgQEAKIC8qCiAgKiBzZWN1cml0eS90b21veW8vcmVhbHBhdGguYwogICoKLSAqIEdldCB0aGUgY2Fub25pY2FsaXplZCBhYnNvbHV0ZSBwYXRobmFtZXMuIFRoZSBiYXNpcyBmb3IgVE9NT1lPLgorICogUGF0aG5hbWUgY2FsY3VsYXRpb24gZnVuY3Rpb25zIGZvciBUT01PWU8uCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgIE5UVCBEQVRBIENPUlBPUkFUSU9OCi0gKgotICogVmVyc2lvbjogMi4yLjAgICAyMDA5LzA0LzAxCi0gKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAgIE5UVCBEQVRBIENPUlBPUkFUSU9OCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9tbnRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSAiY29tbW9uLmgiCiAKIC8qKgogICogdG9tb3lvX2VuY29kZTogQ29udmVydCBiaW5hcnkgc3RyaW5nIHRvIGFzY2lpIHN0cmluZy4KICAqCi0gKiBAYnVmZmVyOiAgQnVmZmVyIGZvciBBU0NJSSBzdHJpbmcuCi0gKiBAYnVmbGVuOiAgU2l6ZSBvZiBAYnVmZmVyLgotICogQHN0cjogICAgIEJpbmFyeSBzdHJpbmcuCisgKiBAc3RyOiBTdHJpbmcgaW4gYmluYXJ5IGZvcm1hdC4KICAqCi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVOT01FTSBvdGhlcndpc2UuCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gQHN0ciBpbiBhc2NpaSBmb3JtYXQgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKgorICogVGhpcyBmdW5jdGlvbiB1c2VzIGt6YWxsb2MoKSwgc28gY2FsbGVyIG11c3Qga2ZyZWUoKSBpZiB0aGlzIGZ1bmN0aW9uCisgKiBkaWRuJ3QgcmV0dXJuIE5VTEwuCiAgKi8KLWludCB0b21veW9fZW5jb2RlKGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbiwgY29uc3QgY2hhciAqc3RyKQorY2hhciAqdG9tb3lvX2VuY29kZShjb25zdCBjaGFyICpzdHIpCiB7Ci0Jd2hpbGUgKDEpIHsKLQkJY29uc3QgdW5zaWduZWQgY2hhciBjID0gKih1bnNpZ25lZCBjaGFyICopIHN0cisrOworCWludCBsZW4gPSAwOworCWNvbnN0IGNoYXIgKnAgPSBzdHI7CisJY2hhciAqY3A7CisJY2hhciAqY3AwOwogCi0JCWlmICh0b21veW9faXNfdmFsaWQoYykpIHsKLQkJCWlmICgtLWJ1ZmxlbiA8PSAwKQotCQkJCWJyZWFrOwotCQkJKmJ1ZmZlcisrID0gKGNoYXIpIGM7Ci0JCQlpZiAoYyAhPSAnXFwnKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKC0tYnVmbGVuIDw9IDApCi0JCQkJYnJlYWs7Ci0JCQkqYnVmZmVyKysgPSAoY2hhcikgYzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghYykgewotCQkJaWYgKC0tYnVmbGVuIDw9IDApCi0JCQkJYnJlYWs7Ci0JCQkqYnVmZmVyID0gJ1wwJzsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWJ1ZmxlbiAtPSA0OwotCQlpZiAoYnVmbGVuIDw9IDApCi0JCQlicmVhazsKLQkJKmJ1ZmZlcisrID0gJ1xcJzsKLQkJKmJ1ZmZlcisrID0gKGMgPj4gNikgKyAnMCc7Ci0JCSpidWZmZXIrKyA9ICgoYyA+PiAzKSAmIDcpICsgJzAnOwotCQkqYnVmZmVyKysgPSAoYyAmIDcpICsgJzAnOworCWlmICghcCkKKwkJcmV0dXJuIE5VTEw7CisJd2hpbGUgKCpwKSB7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgYyA9ICpwKys7CisJCWlmIChjID09ICdcXCcpCisJCQlsZW4gKz0gMjsKKwkJZWxzZSBpZiAoYyA+ICcgJyAmJiBjIDwgMTI3KQorCQkJbGVuKys7CisJCWVsc2UKKwkJCWxlbiArPSA0OwogCX0KLQlyZXR1cm4gLUVOT01FTTsKLX0KKwlsZW4rKzsKKwkvKiBSZXNlcnZlIHNwYWNlIGZvciBhcHBlbmRpbmcgIi8iLiAqLworCWNwID0ga3phbGxvYyhsZW4gKyAxMCwgR0ZQX05PRlMpOworCWlmICghY3ApCisJCXJldHVybiBOVUxMOworCWNwMCA9IGNwOworCXAgPSBzdHI7CisJd2hpbGUgKCpwKSB7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgYyA9ICpwKys7CiAKLS8qKgotICogdG9tb3lvX3JlYWxwYXRoX2Zyb21fcGF0aDIgLSBSZXR1cm5zIHJlYWxwYXRoKDMpIG9mIHRoZSBnaXZlbiBkZW50cnkgYnV0IGlnbm9yZXMgY2hyb290J2VkIHJvb3QuCi0gKgotICogQHBhdGg6ICAgICAgICBQb2ludGVyIHRvICJzdHJ1Y3QgcGF0aCIuCi0gKiBAbmV3bmFtZTogICAgIFBvaW50ZXIgdG8gYnVmZmVyIHRvIHJldHVybiB2YWx1ZSBpbi4KLSAqIEBuZXduYW1lX2xlbjogU2l6ZSBvZiBAbmV3bmFtZS4KLSAqCi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgotICoKLSAqIElmIGRlbnRyeSBpcyBhIGRpcmVjdG9yeSwgdHJhaWxpbmcgJy8nIGlzIGFwcGVuZGVkLgotICogQ2hhcmFjdGVycyBvdXQgb2YgMHgyMCA8IGMgPCAweDdGIHJhbmdlIGFyZSBjb252ZXJ0ZWQgdG8KLSAqIFxvb28gc3R5bGUgb2N0YWwgc3RyaW5nLgotICogQ2hhcmFjdGVyIFwgaXMgY29udmVydGVkIHRvIFxcIHN0cmluZy4KLSAqLwotaW50IHRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgyKHN0cnVjdCBwYXRoICpwYXRoLCBjaGFyICpuZXduYW1lLAotCQkJICAgICAgIGludCBuZXduYW1lX2xlbikKLXsKLQlpbnQgZXJyb3IgPSAtRU5PTUVNOwotCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IHBhdGgtPmRlbnRyeTsKLQljaGFyICpzcDsKLQotCWlmICghZGVudHJ5IHx8ICFwYXRoLT5tbnQgfHwgIW5ld25hbWUgfHwgbmV3bmFtZV9sZW4gPD0gMjA0OCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGRlbnRyeS0+ZF9vcCAmJiBkZW50cnktPmRfb3AtPmRfZG5hbWUpIHsKLQkJLyogRm9yICJzb2NrZXQ6W1wkXSIgYW5kICJwaXBlOltcJF0iLiAqLwotCQlzdGF0aWMgY29uc3QgaW50IG9mZnNldCA9IDE1MzY7Ci0JCXNwID0gZGVudHJ5LT5kX29wLT5kX2RuYW1lKGRlbnRyeSwgbmV3bmFtZSArIG9mZnNldCwKLQkJCQkJICAgbmV3bmFtZV9sZW4gLSBvZmZzZXQpOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCBwYXRoIG5zX3Jvb3QgPSB7Lm1udCA9IE5VTEwsIC5kZW50cnkgPSBOVUxMfTsKLQotCQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKLQkJLyogZ28gdG8gd2hhdGV2ZXIgbmFtZXNwYWNlIHJvb3Qgd2UgYXJlIHVuZGVyICovCi0JCXNwID0gX19kX3BhdGgocGF0aCwgJm5zX3Jvb3QsIG5ld25hbWUsIG5ld25hbWVfbGVuKTsKLQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKLQkJLyogUHJlcGVuZCAiL3Byb2MiIHByZWZpeCBpZiB1c2luZyBpbnRlcm5hbCBwcm9jIHZmcyBtb3VudC4gKi8KLQkJaWYgKCFJU19FUlIoc3ApICYmIChwYXRoLT5tbnQtPm1udF9mbGFncyAmIE1OVF9JTlRFUk5BTCkgJiYKLQkJICAgIChwYXRoLT5tbnQtPm1udF9zYi0+c19tYWdpYyA9PSBQUk9DX1NVUEVSX01BR0lDKSkgewotCQkJc3AgLT0gNTsKLQkJCWlmIChzcCA+PSBuZXduYW1lKQotCQkJCW1lbWNweShzcCwgIi9wcm9jIiwgNSk7Ci0JCQllbHNlCi0JCQkJc3AgPSBFUlJfUFRSKC1FTk9NRU0pOworCQlpZiAoYyA9PSAnXFwnKSB7CisJCQkqY3ArKyA9ICdcXCc7CisJCQkqY3ArKyA9ICdcXCc7CisJCX0gZWxzZSBpZiAoYyA+ICcgJyAmJiBjIDwgMTI3KSB7CisJCQkqY3ArKyA9IGM7CisJCX0gZWxzZSB7CisJCQkqY3ArKyA9ICdcXCc7CisJCQkqY3ArKyA9IChjID4+IDYpICsgJzAnOworCQkJKmNwKysgPSAoKGMgPj4gMykgJiA3KSArICcwJzsKKwkJCSpjcCsrID0gKGMgJiA3KSArICcwJzsKIAkJfQogCX0KLQlpZiAoSVNfRVJSKHNwKSkKLQkJZXJyb3IgPSBQVFJfRVJSKHNwKTsKLQllbHNlCi0JCWVycm9yID0gdG9tb3lvX2VuY29kZShuZXduYW1lLCBzcCAtIG5ld25hbWUsIHNwKTsKLQkvKiBBcHBlbmQgdHJhaWxpbmcgJy8nIGlmIGRlbnRyeSBpcyBhIGRpcmVjdG9yeS4gKi8KLQlpZiAoIWVycm9yICYmIGRlbnRyeS0+ZF9pbm9kZSAmJiBTX0lTRElSKGRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKQotCSAgICAmJiAqbmV3bmFtZSkgewotCQlzcCA9IG5ld25hbWUgKyBzdHJsZW4obmV3bmFtZSk7Ci0JCWlmICgqKHNwIC0gMSkgIT0gJy8nKSB7Ci0JCQlpZiAoc3AgPCBuZXduYW1lICsgbmV3bmFtZV9sZW4gLSA0KSB7Ci0JCQkJKnNwKysgPSAnLyc7Ci0JCQkJKnNwID0gJ1wwJzsKLQkJCX0gZWxzZSB7Ci0JCQkJZXJyb3IgPSAtRU5PTUVNOwotCQkJfQotCQl9Ci0JfQotCWlmIChlcnJvcikKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAidG9tb3lvX3JlYWxwYXRoOiBQYXRobmFtZSB0b28gbG9uZy5cbiIpOwotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gY3AwOwogfQogCiAvKioKQEAgLTEzNCw0MSArNzUsOTAgQEAKICAqCiAgKiBSZXR1cm5zIHRoZSByZWFscGF0aCBvZiB0aGUgZ2l2ZW4gQHBhdGggb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCiAgKgorICogSWYgZGVudHJ5IGlzIGEgZGlyZWN0b3J5LCB0cmFpbGluZyAnLycgaXMgYXBwZW5kZWQuCisgKiBDaGFyYWN0ZXJzIG91dCBvZiAweDIwIDwgYyA8IDB4N0YgcmFuZ2UgYXJlIGNvbnZlcnRlZCB0bworICogXG9vbyBzdHlsZSBvY3RhbCBzdHJpbmcuCisgKiBDaGFyYWN0ZXIgXCBpcyBjb252ZXJ0ZWQgdG8gXFwgc3RyaW5nLgorICoKICAqIFRoZXNlIGZ1bmN0aW9ucyB1c2Uga3phbGxvYygpLCBzbyB0aGUgY2FsbGVyIG11c3QgY2FsbCBrZnJlZSgpCiAgKiBpZiB0aGVzZSBmdW5jdGlvbnMgZGlkbid0IHJldHVybiBOVUxMLgogICovCiBjaGFyICp0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoKHN0cnVjdCBwYXRoICpwYXRoKQogewotCWNoYXIgKmJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0b21veW9fcGFnZV9idWZmZXIpLCBHRlBfTk9GUyk7Ci0KLQlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB0b21veW9fcGFnZV9idWZmZXIpCi0JCSAgICAgPD0gVE9NT1lPX01BWF9QQVRITkFNRV9MRU4gLSAxKTsKLQlpZiAoIWJ1ZikKKwljaGFyICpidWYgPSBOVUxMOworCWNoYXIgKm5hbWUgPSBOVUxMOworCXVuc2lnbmVkIGludCBidWZfbGVuID0gUEFHRV9TSVpFIC8gMjsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBwYXRoLT5kZW50cnk7CisJYm9vbCBpc19kaXI7CisJaWYgKCFkZW50cnkpCiAJCXJldHVybiBOVUxMOwotCWlmICh0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoMihwYXRoLCBidWYsCi0JCQkJICAgICAgIFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOIC0gMSkgPT0gMCkKLQkJcmV0dXJuIGJ1ZjsKLQlrZnJlZShidWYpOwotCXJldHVybiBOVUxMOwotfQotCi0vKioKLSAqIHRvbW95b19yZWFscGF0aCAtIEdldCByZWFscGF0aCBvZiBhIHBhdGhuYW1lLgotICoKLSAqIEBwYXRobmFtZTogVGhlIHBhdGhuYW1lIHRvIHNvbHZlLgotICoKLSAqIFJldHVybnMgdGhlIHJlYWxwYXRoIG9mIEBwYXRobmFtZSBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KLSAqLwotY2hhciAqdG9tb3lvX3JlYWxwYXRoKGNvbnN0IGNoYXIgKnBhdGhuYW1lKQotewotCXN0cnVjdCBwYXRoIHBhdGg7Ci0KLQlpZiAocGF0aG5hbWUgJiYga2Vybl9wYXRoKHBhdGhuYW1lLCBMT09LVVBfRk9MTE9XLCAmcGF0aCkgPT0gMCkgewotCQljaGFyICpidWYgPSB0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoKCZwYXRoKTsKLQkJcGF0aF9wdXQoJnBhdGgpOwotCQlyZXR1cm4gYnVmOworCWlzX2RpciA9IGRlbnRyeS0+ZF9pbm9kZSAmJiBTX0lTRElSKGRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKTsKKwl3aGlsZSAoMSkgeworCQlzdHJ1Y3QgcGF0aCBuc19yb290ID0geyAubW50ID0gTlVMTCwgLmRlbnRyeSA9IE5VTEwgfTsKKwkJY2hhciAqcG9zOworCQlidWZfbGVuIDw8PSAxOworCQlrZnJlZShidWYpOworCQlidWYgPSBrbWFsbG9jKGJ1Zl9sZW4sIEdGUF9OT0ZTKTsKKwkJaWYgKCFidWYpCisJCQlicmVhazsKKwkJLyogR2V0IGJldHRlciBuYW1lIGZvciBzb2NrZXQuICovCisJCWlmIChkZW50cnktPmRfc2IgJiYgZGVudHJ5LT5kX3NiLT5zX21hZ2ljID09IFNPQ0tGU19NQUdJQykgeworCQkJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwkJCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSBpbm9kZSA/IFNPQ0tFVF9JKGlub2RlKSA6IE5VTEw7CisJCQlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrID8gc29jay0+c2sgOiBOVUxMOworCQkJaWYgKHNrKSB7CisJCQkJc25wcmludGYoYnVmLCBidWZfbGVuIC0gMSwgInNvY2tldDpbZmFtaWx5PSV1OiIKKwkJCQkJICJ0eXBlPSV1OnByb3RvY29sPSV1XSIsIHNrLT5za19mYW1pbHksCisJCQkJCSBzay0+c2tfdHlwZSwgc2stPnNrX3Byb3RvY29sKTsKKwkJCX0gZWxzZSB7CisJCQkJc25wcmludGYoYnVmLCBidWZfbGVuIC0gMSwgInNvY2tldDpbdW5rbm93bl0iKTsKKwkJCX0KKwkJCW5hbWUgPSB0b21veW9fZW5jb2RlKGJ1Zik7CisJCQlicmVhazsKKwkJfQorCQkvKiBGb3IgInNvY2tldDpbXCRdIiBhbmQgInBpcGU6W1wkXSIuICovCisJCWlmIChkZW50cnktPmRfb3AgJiYgZGVudHJ5LT5kX29wLT5kX2RuYW1lKSB7CisJCQlwb3MgPSBkZW50cnktPmRfb3AtPmRfZG5hbWUoZGVudHJ5LCBidWYsIGJ1Zl9sZW4gLSAxKTsKKwkJCWlmIChJU19FUlIocG9zKSkKKwkJCQljb250aW51ZTsKKwkJCW5hbWUgPSB0b21veW9fZW5jb2RlKHBvcyk7CisJCQlicmVhazsKKwkJfQorCQkvKiBJZiB3ZSBkb24ndCBoYXZlIGEgdmZzbW91bnQsIHdlIGNhbid0IGNhbGN1bGF0ZS4gKi8KKwkJaWYgKCFwYXRoLT5tbnQpCisJCQlicmVhazsKKwkJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJCS8qIGdvIHRvIHdoYXRldmVyIG5hbWVzcGFjZSByb290IHdlIGFyZSB1bmRlciAqLworCQlwb3MgPSBfX2RfcGF0aChwYXRoLCAmbnNfcm9vdCwgYnVmLCBidWZfbGVuKTsKKwkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwkJLyogUHJlcGVuZCAiL3Byb2MiIHByZWZpeCBpZiB1c2luZyBpbnRlcm5hbCBwcm9jIHZmcyBtb3VudC4gKi8KKwkJaWYgKCFJU19FUlIocG9zKSAmJiAocGF0aC0+bW50LT5tbnRfZmxhZ3MgJiBNTlRfSU5URVJOQUwpICYmCisJCSAgICAocGF0aC0+bW50LT5tbnRfc2ItPnNfbWFnaWMgPT0gUFJPQ19TVVBFUl9NQUdJQykpIHsKKwkJCXBvcyAtPSA1OworCQkJaWYgKHBvcyA+PSBidWYpCisJCQkJbWVtY3B5KHBvcywgIi9wcm9jIiwgNSk7CisJCQllbHNlCisJCQkJcG9zID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJfQorCQlpZiAoSVNfRVJSKHBvcykpCisJCQljb250aW51ZTsKKwkJbmFtZSA9IHRvbW95b19lbmNvZGUocG9zKTsKKwkJYnJlYWs7CiAJfQotCXJldHVybiBOVUxMOworCWtmcmVlKGJ1Zik7CisJaWYgKCFuYW1lKQorCQl0b21veW9fd2Fybl9vb20oX19mdW5jX18pOworCWVsc2UgaWYgKGlzX2RpciAmJiAqbmFtZSkgeworCQkvKiBBcHBlbmQgdHJhaWxpbmcgJy8nIGlmIGRlbnRyeSBpcyBhIGRpcmVjdG9yeS4gKi8KKwkJY2hhciAqcG9zID0gbmFtZSArIHN0cmxlbihuYW1lKSAtIDE7CisJCWlmICgqcG9zICE9ICcvJykKKwkJCS8qCisJCQkgKiBUaGlzIGlzIE9LIGJlY2F1c2UgdG9tb3lvX2VuY29kZSgpIHJlc2VydmVzIHNwYWNlCisJCQkgKiBmb3IgYXBwZW5kaW5nICIvIi4KKwkJCSAqLworCQkJKisrcG9zID0gJy8nOworCX0KKwlyZXR1cm4gbmFtZTsKIH0KIAogLyoqCkBAIC0xODksMTkxICsxNzksMyBAQAogCX0KIAlyZXR1cm4gTlVMTDsKIH0KLQotLyogTWVtb3J5IGFsbG9jYXRlZCBmb3Igbm9uLXN0cmluZyBkYXRhLiAqLwotc3RhdGljIGF0b21pY190IHRvbW95b19wb2xpY3lfbWVtb3J5X3NpemU7Ci0vKiBRdW90YSBmb3IgaG9sZGluZyBwb2xpY3kuICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHRvbW95b19xdW90YV9mb3JfcG9saWN5OwotCi0vKioKLSAqIHRvbW95b19tZW1vcnlfb2sgLSBDaGVjayBtZW1vcnkgcXVvdGEuCi0gKgotICogQHB0cjogUG9pbnRlciB0byBhbGxvY2F0ZWQgbWVtb3J5LgotICoKLSAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCi0gKgotICogQ2FsbGVyIGhvbGRzIHRvbW95b19wb2xpY3lfbG9jay4KLSAqIE1lbW9yeSBwb2ludGVkIGJ5IEBwdHIgd2lsbCBiZSB6ZXJvZWQgb24gc3VjY2Vzcy4KLSAqLwotYm9vbCB0b21veW9fbWVtb3J5X29rKHZvaWQgKnB0cikKLXsKLQlpbnQgYWxsb2NhdGVkX2xlbiA9IHB0ciA/IGtzaXplKHB0cikgOiAwOwotCWF0b21pY19hZGQoYWxsb2NhdGVkX2xlbiwgJnRvbW95b19wb2xpY3lfbWVtb3J5X3NpemUpOwotCWlmIChwdHIgJiYgKCF0b21veW9fcXVvdGFfZm9yX3BvbGljeSB8fAotCQkgICAgYXRvbWljX3JlYWQoJnRvbW95b19wb2xpY3lfbWVtb3J5X3NpemUpCi0JCSAgICA8PSB0b21veW9fcXVvdGFfZm9yX3BvbGljeSkpIHsKLQkJbWVtc2V0KHB0ciwgMCwgYWxsb2NhdGVkX2xlbik7Ci0JCXJldHVybiB0cnVlOwotCX0KLQlwcmludGsoS0VSTl9XQVJOSU5HICJFUlJPUjogT3V0IG9mIG1lbW9yeSAiCi0JICAgICAgICJmb3IgdG9tb3lvX2FsbG9jX2VsZW1lbnQoKS5cbiIpOwotCWlmICghdG9tb3lvX3BvbGljeV9sb2FkZWQpCi0JCXBhbmljKCJNQUMgSW5pdGlhbGl6YXRpb24gZmFpbGVkLlxuIik7Ci0JcmV0dXJuIGZhbHNlOwotfQotCi0vKioKLSAqIHRvbW95b19jb21taXRfb2sgLSBDaGVjayBtZW1vcnkgcXVvdGEuCi0gKgotICogQGRhdGE6ICAgRGF0YSB0byBjb3B5IGZyb20uCi0gKiBAc2l6ZTogICBTaXplIGluIGJ5dGUuCi0gKgotICogUmV0dXJucyBwb2ludGVyIHRvIGFsbG9jYXRlZCBtZW1vcnkgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCi0gKi8KLXZvaWQgKnRvbW95b19jb21taXRfb2sodm9pZCAqZGF0YSwgY29uc3QgdW5zaWduZWQgaW50IHNpemUpCi17Ci0Jdm9pZCAqcHRyID0ga3phbGxvYyhzaXplLCBHRlBfTk9GUyk7Ci0JaWYgKHRvbW95b19tZW1vcnlfb2socHRyKSkgewotCQltZW1tb3ZlKHB0ciwgZGF0YSwgc2l6ZSk7Ci0JCW1lbXNldChkYXRhLCAwLCBzaXplKTsKLQkJcmV0dXJuIHB0cjsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qKgotICogdG9tb3lvX21lbW9yeV9mcmVlIC0gRnJlZSBtZW1vcnkgZm9yIGVsZW1lbnRzLgotICoKLSAqIEBwdHI6ICBQb2ludGVyIHRvIGFsbG9jYXRlZCBtZW1vcnkuCi0gKi8KLXZvaWQgdG9tb3lvX21lbW9yeV9mcmVlKHZvaWQgKnB0cikKLXsKLQlhdG9taWNfc3ViKGtzaXplKHB0ciksICZ0b21veW9fcG9saWN5X21lbW9yeV9zaXplKTsKLQlrZnJlZShwdHIpOwotfQotCi0vKgotICogdG9tb3lvX25hbWVfbGlzdCBpcyB1c2VkIGZvciBob2xkaW5nIHN0cmluZyBkYXRhIHVzZWQgYnkgVE9NT1lPLgotICogU2luY2Ugc2FtZSBzdHJpbmcgZGF0YSBpcyBsaWtlbHkgdXNlZCBmb3IgbXVsdGlwbGUgdGltZXMgKGUuZy4KLSAqICIvbGliL2xpYmMtMi41LnNvIiksIFRPTU9ZTyBzaGFyZXMgc3RyaW5nIGRhdGEgaW4gdGhlIGZvcm0gb2YKLSAqICJjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqIi4KLSAqLwotc3RydWN0IGxpc3RfaGVhZCB0b21veW9fbmFtZV9saXN0W1RPTU9ZT19NQVhfSEFTSF07Ci0KLS8qKgotICogdG9tb3lvX2dldF9uYW1lIC0gQWxsb2NhdGUgcGVybWFuZW50IG1lbW9yeSBmb3Igc3RyaW5nIGRhdGEuCi0gKgotICogQG5hbWU6IFRoZSBzdHJpbmcgdG8gc3RvcmUgaW50byB0aGUgcGVybWVybmVudCBtZW1vcnkuCi0gKgotICogUmV0dXJucyBwb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyIgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCi0gKi8KLWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICp0b21veW9fZ2V0X25hbWUoY29uc3QgY2hhciAqbmFtZSkKLXsKLQlzdHJ1Y3QgdG9tb3lvX25hbWVfZW50cnkgKnB0cjsKLQl1bnNpZ25lZCBpbnQgaGFzaDsKLQlpbnQgbGVuOwotCWludCBhbGxvY2F0ZWRfbGVuOwotCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7Ci0KLQlpZiAoIW5hbWUpCi0JCXJldHVybiBOVUxMOwotCWxlbiA9IHN0cmxlbihuYW1lKSArIDE7Ci0JaGFzaCA9IGZ1bGxfbmFtZV9oYXNoKChjb25zdCB1bnNpZ25lZCBjaGFyICopIG5hbWUsIGxlbiAtIDEpOwotCWhlYWQgPSAmdG9tb3lvX25hbWVfbGlzdFtoYXNoX2xvbmcoaGFzaCwgVE9NT1lPX0hBU0hfQklUUyldOwotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnRvbW95b19wb2xpY3lfbG9jaykpCi0JCXJldHVybiBOVUxMOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCBoZWFkLCBsaXN0KSB7Ci0JCWlmIChoYXNoICE9IHB0ci0+ZW50cnkuaGFzaCB8fCBzdHJjbXAobmFtZSwgcHRyLT5lbnRyeS5uYW1lKSkKLQkJCWNvbnRpbnVlOwotCQlhdG9taWNfaW5jKCZwdHItPnVzZXJzKTsKLQkJZ290byBvdXQ7Ci0JfQotCXB0ciA9IGt6YWxsb2Moc2l6ZW9mKCpwdHIpICsgbGVuLCBHRlBfTk9GUyk7Ci0JYWxsb2NhdGVkX2xlbiA9IHB0ciA/IGtzaXplKHB0cikgOiAwOwotCWlmICghcHRyIHx8ICh0b21veW9fcXVvdGFfZm9yX3BvbGljeSAmJgotCQkgICAgIGF0b21pY19yZWFkKCZ0b21veW9fcG9saWN5X21lbW9yeV9zaXplKSArIGFsbG9jYXRlZF9sZW4KLQkJICAgICA+IHRvbW95b19xdW90YV9mb3JfcG9saWN5KSkgewotCQlrZnJlZShwdHIpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJFUlJPUjogT3V0IG9mIG1lbW9yeSAiCi0JCSAgICAgICAiZm9yIHRvbW95b19nZXRfbmFtZSgpLlxuIik7Ci0JCWlmICghdG9tb3lvX3BvbGljeV9sb2FkZWQpCi0JCQlwYW5pYygiTUFDIEluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOwotCQlwdHIgPSBOVUxMOwotCQlnb3RvIG91dDsKLQl9Ci0JYXRvbWljX2FkZChhbGxvY2F0ZWRfbGVuLCAmdG9tb3lvX3BvbGljeV9tZW1vcnlfc2l6ZSk7Ci0JcHRyLT5lbnRyeS5uYW1lID0gKChjaGFyICopIHB0cikgKyBzaXplb2YoKnB0cik7Ci0JbWVtbW92ZSgoY2hhciAqKSBwdHItPmVudHJ5Lm5hbWUsIG5hbWUsIGxlbik7Ci0JYXRvbWljX3NldCgmcHRyLT51c2VycywgMSk7Ci0JdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZwdHItPmVudHJ5KTsKLQlsaXN0X2FkZF90YWlsKCZwdHItPmxpc3QsIGhlYWQpOwotIG91dDoKLQltdXRleF91bmxvY2soJnRvbW95b19wb2xpY3lfbG9jayk7Ci0JcmV0dXJuIHB0ciA/ICZwdHItPmVudHJ5IDogTlVMTDsKLX0KLQotLyoqCi0gKiB0b21veW9fcmVhbHBhdGhfaW5pdCAtIEluaXRpYWxpemUgcmVhbHBhdGggcmVsYXRlZCBjb2RlLgotICovCi12b2lkIF9faW5pdCB0b21veW9fcmVhbHBhdGhfaW5pdCh2b2lkKQotewotCWludCBpOwotCi0JQlVJTERfQlVHX09OKFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOID4gUEFUSF9NQVgpOwotCWZvciAoaSA9IDA7IGkgPCBUT01PWU9fTUFYX0hBU0g7IGkrKykKLQkJSU5JVF9MSVNUX0hFQUQoJnRvbW95b19uYW1lX2xpc3RbaV0pOwotCUlOSVRfTElTVF9IRUFEKCZ0b21veW9fa2VybmVsX2RvbWFpbi5hY2xfaW5mb19saXN0KTsKLQl0b21veW9fa2VybmVsX2RvbWFpbi5kb21haW5uYW1lID0gdG9tb3lvX2dldF9uYW1lKFRPTU9ZT19ST09UX05BTUUpOwotCS8qCi0JICogdG9tb3lvX3JlYWRfbG9jaygpIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzCi0JICogY2FsbGVkIGJlZm9yZSB0aGUgZmlyc3QgImRlbGV0ZSIgcmVxdWVzdC4KLQkgKi8KLQlsaXN0X2FkZF90YWlsX3JjdSgmdG9tb3lvX2tlcm5lbF9kb21haW4ubGlzdCwgJnRvbW95b19kb21haW5fbGlzdCk7Ci0JaWYgKHRvbW95b19maW5kX2RvbWFpbihUT01PWU9fUk9PVF9OQU1FKSAhPSAmdG9tb3lvX2tlcm5lbF9kb21haW4pCi0JCXBhbmljKCJDYW4ndCByZWdpc3RlciB0b21veW9fa2VybmVsX2RvbWFpbiIpOwotfQotCi0vKioKLSAqIHRvbW95b19yZWFkX21lbW9yeV9jb3VudGVyIC0gQ2hlY2sgZm9yIG1lbW9yeSB1c2FnZSBpbiBieXRlcy4KLSAqCi0gKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgotICoKLSAqIFJldHVybnMgbWVtb3J5IHVzYWdlLgotICovCi1pbnQgdG9tb3lvX3JlYWRfbWVtb3J5X2NvdW50ZXIoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCi17Ci0JaWYgKCFoZWFkLT5yZWFkX2VvZikgewotCQljb25zdCB1bnNpZ25lZCBpbnQgcG9saWN5Ci0JCQk9IGF0b21pY19yZWFkKCZ0b21veW9fcG9saWN5X21lbW9yeV9zaXplKTsKLQkJY2hhciBidWZmZXJbNjRdOwotCi0JCW1lbXNldChidWZmZXIsIDAsIHNpemVvZihidWZmZXIpKTsKLQkJaWYgKHRvbW95b19xdW90YV9mb3JfcG9saWN5KQotCQkJc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSAtIDEsCi0JCQkJICIgICAoUXVvdGE6ICUxMHUpIiwKLQkJCQkgdG9tb3lvX3F1b3RhX2Zvcl9wb2xpY3kpOwotCQllbHNlCi0JCQlidWZmZXJbMF0gPSAnXDAnOwotCQl0b21veW9faW9fcHJpbnRmKGhlYWQsICJQb2xpY3k6ICAlMTB1JXNcbiIsIHBvbGljeSwgYnVmZmVyKTsKLQkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiVG90YWw6ICAgJTEwdVxuIiwgcG9saWN5KTsKLQkJaGVhZC0+cmVhZF9lb2YgPSB0cnVlOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiB0b21veW9fd3JpdGVfbWVtb3J5X3F1b3RhIC0gU2V0IG1lbW9yeSBxdW90YS4KLSAqCi0gKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgotICoKLSAqIFJldHVybnMgMC4KLSAqLwotaW50IHRvbW95b193cml0ZV9tZW1vcnlfcXVvdGEoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCi17Ci0JY2hhciAqZGF0YSA9IGhlYWQtPndyaXRlX2J1ZjsKLQl1bnNpZ25lZCBpbnQgc2l6ZTsKLQotCWlmIChzc2NhbmYoZGF0YSwgIlBvbGljeTogJXUiLCAmc2l6ZSkgPT0gMSkKLQkJdG9tb3lvX3F1b3RhX2Zvcl9wb2xpY3kgPSBzaXplOwotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL3NlY3VyaXR5ZnNfaWYuYyBiL3NlY3VyaXR5L3RvbW95by9zZWN1cml0eWZzX2lmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQzZDU1NQotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9zZWN1cml0eWZzX2lmLmMKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBzZWN1cml0eS90b21veW8vY29tbW9uLmMKKyAqCisgKiBTZWN1cml0eWZzIGludGVyZmFjZSBmb3IgVE9NT1lPLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDEwICBOVFQgREFUQSBDT1JQT1JBVElPTgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorCisvKioKKyAqIHRvbW95b19vcGVuIC0gb3BlbigpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBAaW5vZGU6IFBvaW50ZXIgdG8gInN0cnVjdCBpbm9kZSIuCisgKiBAZmlsZTogIFBvaW50ZXIgdG8gInN0cnVjdCBmaWxlIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWNvbnN0IGludCBrZXkgPSAoKHU4ICopIGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfcHJpdmF0ZSkKKwkJLSAoKHU4ICopIE5VTEwpOworCXJldHVybiB0b21veW9fb3Blbl9jb250cm9sKGtleSwgZmlsZSk7Cit9CisKKy8qKgorICogdG9tb3lvX3JlbGVhc2UgLSBjbG9zZSgpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBAaW5vZGU6IFBvaW50ZXIgdG8gInN0cnVjdCBpbm9kZSIuCisgKiBAZmlsZTogIFBvaW50ZXIgdG8gInN0cnVjdCBmaWxlIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiB0b21veW9fY2xvc2VfY29udHJvbChmaWxlKTsKK30KKworLyoqCisgKiB0b21veW9fcG9sbCAtIHBvbGwoKSBmb3IgL3Byb2MvY2NzLyBpbnRlcmZhY2UuCisgKgorICogQGZpbGU6IFBvaW50ZXIgdG8gInN0cnVjdCBmaWxlIi4KKyAqIEB3YWl0OiBQb2ludGVyIHRvICJwb2xsX3RhYmxlIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHRvbW95b19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXJldHVybiB0b21veW9fcG9sbF9jb250cm9sKGZpbGUsIHdhaXQpOworfQorCisvKioKKyAqIHRvbW95b19yZWFkIC0gcmVhZCgpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBAZmlsZTogIFBvaW50ZXIgdG8gInN0cnVjdCBmaWxlIi4KKyAqIEBidWY6ICAgUG9pbnRlciB0byBidWZmZXIuCisgKiBAY291bnQ6IFNpemUgb2YgQGJ1Zi4KKyAqIEBwcG9zOiAgVW51c2VkLgorICoKKyAqIFJldHVybnMgYnl0ZXMgcmVhZCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHRvbW95b19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsCisJCQkgICBsb2ZmX3QgKnBwb3MpCit7CisJcmV0dXJuIHRvbW95b19yZWFkX2NvbnRyb2woZmlsZSwgYnVmLCBjb3VudCk7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlIC0gd3JpdGUoKSBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKgorICogQGZpbGU6ICBQb2ludGVyIHRvICJzdHJ1Y3QgZmlsZSIuCisgKiBAYnVmOiAgIFBvaW50ZXIgdG8gYnVmZmVyLgorICogQGNvdW50OiBTaXplIG9mIEBidWYuCisgKiBAcHBvczogIFVudXNlZC4KKyAqCisgKiBSZXR1cm5zIEBjb3VudCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHRvbW95b193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlyZXR1cm4gdG9tb3lvX3dyaXRlX2NvbnRyb2woZmlsZSwgYnVmLCBjb3VudCk7Cit9CisKKy8qCisgKiB0b21veW9fb3BlcmF0aW9ucyBpcyBhICJzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIiB3aGljaCBpcyB1c2VkIGZvciBoYW5kbGluZworICogL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKgorICogU29tZSBmaWxlcyB1bmRlciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGRpcmVjdG9yeSBhY2NlcHQgb3BlbihPX1JEV1IpLgorICogU2VlIHRvbW95b19pb19idWZmZXIgZm9yIGludGVybmFscy4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdG9tb3lvX29wZXJhdGlvbnMgPSB7CisJLm9wZW4gICAgPSB0b21veW9fb3BlbiwKKwkucmVsZWFzZSA9IHRvbW95b19yZWxlYXNlLAorCS5wb2xsICAgID0gdG9tb3lvX3BvbGwsCisJLnJlYWQgICAgPSB0b21veW9fcmVhZCwKKwkud3JpdGUgICA9IHRvbW95b193cml0ZSwKKwkubGxzZWVrICA9IG5vb3BfbGxzZWVrLAorfTsKKworLyoqCisgKiB0b21veW9fY3JlYXRlX2VudHJ5IC0gQ3JlYXRlIGludGVyZmFjZSBmaWxlcyB1bmRlciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGRpcmVjdG9yeS4KKyAqCisgKiBAbmFtZTogICBUaGUgbmFtZSBvZiB0aGUgaW50ZXJmYWNlIGZpbGUuCisgKiBAbW9kZTogICBUaGUgcGVybWlzc2lvbiBvZiB0aGUgaW50ZXJmYWNlIGZpbGUuCisgKiBAcGFyZW50OiBUaGUgcGFyZW50IGRpcmVjdG9yeS4KKyAqIEBrZXk6ICAgIFR5cGUgb2YgaW50ZXJmYWNlLgorICoKKyAqIFJldHVybnMgbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHRvbW95b19jcmVhdGVfZW50cnkoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgbW9kZV90IG1vZGUsCisJCQkJICAgICAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwgY29uc3QgdTgga2V5KQoreworCXNlY3VyaXR5ZnNfY3JlYXRlX2ZpbGUobmFtZSwgbW9kZSwgcGFyZW50LCAoKHU4ICopIE5VTEwpICsga2V5LAorCQkJICAgICAgICZ0b21veW9fb3BlcmF0aW9ucyk7Cit9CisKKy8qKgorICogdG9tb3lvX2luaXRlcmZhY2VfaW5pdCAtIEluaXRpYWxpemUgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKgorICogUmV0dXJucyAwLgorICovCitzdGF0aWMgaW50IF9faW5pdCB0b21veW9faW5pdGVyZmFjZV9pbml0KHZvaWQpCit7CisJc3RydWN0IGRlbnRyeSAqdG9tb3lvX2RpcjsKKworCS8qIERvbid0IGNyZWF0ZSBzZWN1cml0eWZzIGVudHJpZXMgdW5sZXNzIHJlZ2lzdGVyZWQuICovCisJaWYgKGN1cnJlbnRfY3JlZCgpLT5zZWN1cml0eSAhPSAmdG9tb3lvX2tlcm5lbF9kb21haW4pCisJCXJldHVybiAwOworCisJdG9tb3lvX2RpciA9IHNlY3VyaXR5ZnNfY3JlYXRlX2RpcigidG9tb3lvIiwgTlVMTCk7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgicXVlcnkiLCAgICAgICAgICAgIDA2MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX1FVRVJZKTsKKwl0b21veW9fY3JlYXRlX2VudHJ5KCJkb21haW5fcG9saWN5IiwgICAgMDYwMCwgdG9tb3lvX2RpciwKKwkJCSAgICBUT01PWU9fRE9NQUlOUE9MSUNZKTsKKwl0b21veW9fY3JlYXRlX2VudHJ5KCJleGNlcHRpb25fcG9saWN5IiwgMDYwMCwgdG9tb3lvX2RpciwKKwkJCSAgICBUT01PWU9fRVhDRVBUSU9OUE9MSUNZKTsKKwl0b21veW9fY3JlYXRlX2VudHJ5KCJzZWxmX2RvbWFpbiIsICAgICAgMDQwMCwgdG9tb3lvX2RpciwKKwkJCSAgICBUT01PWU9fU0VMRkRPTUFJTik7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgiLmRvbWFpbl9zdGF0dXMiLCAgIDA2MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX0RPTUFJTl9TVEFUVVMpOworCXRvbW95b19jcmVhdGVfZW50cnkoIi5wcm9jZXNzX3N0YXR1cyIsICAwNjAwLCB0b21veW9fZGlyLAorCQkJICAgIFRPTU9ZT19QUk9DRVNTX1NUQVRVUyk7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgibWVtaW5mbyIsICAgICAgICAgIDA2MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX01FTUlORk8pOworCXRvbW95b19jcmVhdGVfZW50cnkoInByb2ZpbGUiLCAgICAgICAgICAwNjAwLCB0b21veW9fZGlyLAorCQkJICAgIFRPTU9ZT19QUk9GSUxFKTsKKwl0b21veW9fY3JlYXRlX2VudHJ5KCJtYW5hZ2VyIiwgICAgICAgICAgMDYwMCwgdG9tb3lvX2RpciwKKwkJCSAgICBUT01PWU9fTUFOQUdFUik7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgidmVyc2lvbiIsICAgICAgICAgIDA0MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX1ZFUlNJT04pOworCXJldHVybiAwOworfQorCitmc19pbml0Y2FsbCh0b21veW9faW5pdGVyZmFjZV9pbml0KTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by90b21veW8uYyBiL3NlY3VyaXR5L3RvbW95by90b21veW8uYwppbmRleCBkZWRkOTdkLi45NWQzZjk1IDEwMDY0NAotLS0gYS9zZWN1cml0eS90b21veW8vdG9tb3lvLmMKKysrIGIvc2VjdXJpdHkvdG9tb3lvL3RvbW95by5jCkBAIC0zLDEwICszLDcgQEAKICAqCiAgKiBMU00gaG9va3MgZm9yIFRPTU9ZTyBMaW51eC4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSAgTlRUIERBVEEgQ09SUE9SQVRJT04KLSAqCi0gKiBWZXJzaW9uOiAyLjIuMCAgIDIwMDkvMDQvMDEKLSAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCAgTlRUIERBVEEgQ09SUE9SQVRJT04KICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KQEAgLTk2LDggKzkzLDcgQEAKIAlyZXR1cm4gdG9tb3lvX2NoZWNrX29wZW5fcGVybWlzc2lvbihkb21haW4sICZicHJtLT5maWxlLT5mX3BhdGgsIE9fUkRPTkxZKTsKIH0KIAotc3RhdGljIGludCB0b21veW9fcGF0aF90cnVuY2F0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgbG9mZl90IGxlbmd0aCwKLQkJCQl1bnNpZ25lZCBpbnQgdGltZV9hdHRycykKK3N0YXRpYyBpbnQgdG9tb3lvX3BhdGhfdHJ1bmNhdGUoc3RydWN0IHBhdGggKnBhdGgpCiB7CiAJcmV0dXJuIHRvbW95b19wYXRoX3Blcm0oVE9NT1lPX1RZUEVfVFJVTkNBVEUsIHBhdGgpOwogfQpAQCAtMTEyLDcgKzEwOCw4IEBACiAJCQkgICAgIGludCBtb2RlKQogewogCXN0cnVjdCBwYXRoIHBhdGggPSB7IHBhcmVudC0+bW50LCBkZW50cnkgfTsKLQlyZXR1cm4gdG9tb3lvX3BhdGhfcGVybShUT01PWU9fVFlQRV9NS0RJUiwgJnBhdGgpOworCXJldHVybiB0b21veW9fcGF0aF9udW1iZXJfcGVybShUT01PWU9fVFlQRV9NS0RJUiwgJnBhdGgsCisJCQkJICAgICAgIG1vZGUgJiBTX0lBTExVR08pOwogfQogCiBzdGF0aWMgaW50IHRvbW95b19wYXRoX3JtZGlyKHN0cnVjdCBwYXRoICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKQEAgLTEzMyw2ICsxMzAsNyBAQAogewogCXN0cnVjdCBwYXRoIHBhdGggPSB7IHBhcmVudC0+bW50LCBkZW50cnkgfTsKIAlpbnQgdHlwZSA9IFRPTU9ZT19UWVBFX0NSRUFURTsKKwljb25zdCB1bnNpZ25lZCBpbnQgcGVybSA9IG1vZGUgJiBTX0lBTExVR087CiAKIAlzd2l0Y2ggKG1vZGUgJiBTX0lGTVQpIHsKIAljYXNlIFNfSUZDSFI6CkBAIC0xNDEsNiArMTM5LDEyIEBACiAJY2FzZSBTX0lGQkxLOgogCQl0eXBlID0gVE9NT1lPX1RZUEVfTUtCTE9DSzsKIAkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ290byBub19kZXY7CisJfQorCXJldHVybiB0b21veW9fbWtkZXZfcGVybSh0eXBlLCAmcGF0aCwgcGVybSwgZGV2KTsKKyBub19kZXY6CisJc3dpdGNoIChtb2RlICYgU19JRk1UKSB7CiAJY2FzZSBTX0lGSUZPOgogCQl0eXBlID0gVE9NT1lPX1RZUEVfTUtGSUZPOwogCQlicmVhazsKQEAgLTE0OCw3ICsxNTIsNyBAQAogCQl0eXBlID0gVE9NT1lPX1RZUEVfTUtTT0NLOwogCQlicmVhazsKIAl9Ci0JcmV0dXJuIHRvbW95b19wYXRoX3Blcm0odHlwZSwgJnBhdGgpOworCXJldHVybiB0b21veW9fcGF0aF9udW1iZXJfcGVybSh0eXBlLCAmcGF0aCwgcGVybSk7CiB9CiAKIHN0YXRpYyBpbnQgdG9tb3lvX3BhdGhfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgcGF0aCAqbmV3X2RpciwKQEAgLTE3Myw3ICsxNzcsNyBAQAogCQkJICAgICB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlpZiAoY21kID09IEZfU0VURkwgJiYgKChhcmcgXiBmaWxlLT5mX2ZsYWdzKSAmIE9fQVBQRU5EKSkKLQkJcmV0dXJuIHRvbW95b19jaGVja19yZXdyaXRlX3Blcm1pc3Npb24oZmlsZSk7CisJCXJldHVybiB0b21veW9fcGF0aF9wZXJtKFRPTU9ZT19UWVBFX1JFV1JJVEUsICZmaWxlLT5mX3BhdGgpOwogCXJldHVybiAwOwogfQogCkBAIC0xODksMjMgKzE5MywyNCBAQAogc3RhdGljIGludCB0b21veW9fZmlsZV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JcmV0dXJuIHRvbW95b19wYXRoX3Blcm0oVE9NT1lPX1RZUEVfSU9DVEwsICZmaWxlLT5mX3BhdGgpOworCXJldHVybiB0b21veW9fcGF0aF9udW1iZXJfcGVybShUT01PWU9fVFlQRV9JT0NUTCwgJmZpbGUtPmZfcGF0aCwgY21kKTsKIH0KIAogc3RhdGljIGludCB0b21veW9fcGF0aF9jaG1vZChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCB2ZnNtb3VudCAqbW50LAogCQkJICAgICBtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgcGF0aCBwYXRoID0geyBtbnQsIGRlbnRyeSB9OwotCXJldHVybiB0b21veW9fcGF0aF9wZXJtKFRPTU9ZT19UWVBFX0NITU9ELCAmcGF0aCk7CisJcmV0dXJuIHRvbW95b19wYXRoX251bWJlcl9wZXJtKFRPTU9ZT19UWVBFX0NITU9ELCAmcGF0aCwKKwkJCQkgICAgICAgbW9kZSAmIFNfSUFMTFVHTyk7CiB9CiAKIHN0YXRpYyBpbnQgdG9tb3lvX3BhdGhfY2hvd24oc3RydWN0IHBhdGggKnBhdGgsIHVpZF90IHVpZCwgZ2lkX3QgZ2lkKQogewogCWludCBlcnJvciA9IDA7CiAJaWYgKHVpZCAhPSAodWlkX3QpIC0xKQotCQllcnJvciA9IHRvbW95b19wYXRoX3Blcm0oVE9NT1lPX1RZUEVfQ0hPV04sIHBhdGgpOworCQllcnJvciA9IHRvbW95b19wYXRoX251bWJlcl9wZXJtKFRPTU9ZT19UWVBFX0NIT1dOLCBwYXRoLCB1aWQpOwogCWlmICghZXJyb3IgJiYgZ2lkICE9IChnaWRfdCkgLTEpCi0JCWVycm9yID0gdG9tb3lvX3BhdGhfcGVybShUT01PWU9fVFlQRV9DSEdSUCwgcGF0aCk7CisJCWVycm9yID0gdG9tb3lvX3BhdGhfbnVtYmVyX3Blcm0oVE9NT1lPX1RZUEVfQ0hHUlAsIHBhdGgsIGdpZCk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0yMTcsNyArMjIyLDcgQEAKIHN0YXRpYyBpbnQgdG9tb3lvX3NiX21vdW50KGNoYXIgKmRldl9uYW1lLCBzdHJ1Y3QgcGF0aCAqcGF0aCwKIAkJCSAgIGNoYXIgKnR5cGUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZvaWQgKmRhdGEpCiB7Ci0JcmV0dXJuIHRvbW95b19wYXRoX3Blcm0oVE9NT1lPX1RZUEVfTU9VTlQsIHBhdGgpOworCXJldHVybiB0b21veW9fbW91bnRfcGVybWlzc2lvbihkZXZfbmFtZSwgcGF0aCwgdHlwZSwgZmxhZ3MsIGRhdGEpOwogfQogCiBzdGF0aWMgaW50IHRvbW95b19zYl91bW91bnQoc3RydWN0IHZmc21vdW50ICptbnQsIGludCBmbGFncykKQEAgLTI3Nyw3ICsyODIsNyBAQAogCQlwYW5pYygiRmFpbHVyZSByZWdpc3RlcmluZyBUT01PWU8gTGludXgiKTsKIAlwcmludGsoS0VSTl9JTkZPICJUT01PWU8gTGludXggaW5pdGlhbGl6ZWRcbiIpOwogCWNyZWQtPnNlY3VyaXR5ID0gJnRvbW95b19rZXJuZWxfZG9tYWluOwotCXRvbW95b19yZWFscGF0aF9pbml0KCk7CisJdG9tb3lvX21tX2luaXQoKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL3V0aWwuYyBiL3NlY3VyaXR5L3RvbW95by91dGlsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJmYzFlZQotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by91dGlsLmMKQEAgLTAsMCArMSw5NjMgQEAKKy8qCisgKiBzZWN1cml0eS90b21veW8vdXRpbC5jCisgKgorICogVXRpbGl0eSBmdW5jdGlvbnMgZm9yIFRPTU9ZTy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCAgTlRUIERBVEEgQ09SUE9SQVRJT04KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorCisvKiBMb2NrIGZvciBwcm90ZWN0aW5nIHBvbGljeS4gKi8KK0RFRklORV9NVVRFWCh0b21veW9fcG9saWN5X2xvY2spOworCisvKiBIYXMgL3NiaW4vaW5pdCBzdGFydGVkPyAqLworYm9vbCB0b21veW9fcG9saWN5X2xvYWRlZDsKKworLyoqCisgKiB0b21veW9fcGFyc2VfdWxvbmcgLSBQYXJzZSBhbiAidW5zaWduZWQgbG9uZyIgdmFsdWUuCisgKgorICogQHJlc3VsdDogUG9pbnRlciB0byAidW5zaWduZWQgbG9uZyIuCisgKiBAc3RyOiAgICBQb2ludGVyIHRvIHN0cmluZyB0byBwYXJzZS4KKyAqCisgKiBSZXR1cm5zIHZhbHVlIHR5cGUgb24gc3VjY2VzcywgMCBvdGhlcndpc2UuCisgKgorICogVGhlIEBzcmMgaXMgdXBkYXRlZCB0byBwb2ludCB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSB2YWx1ZQorICogb24gc3VjY2Vzcy4KKyAqLworc3RhdGljIHU4IHRvbW95b19wYXJzZV91bG9uZyh1bnNpZ25lZCBsb25nICpyZXN1bHQsIGNoYXIgKipzdHIpCit7CisJY29uc3QgY2hhciAqY3AgPSAqc3RyOworCWNoYXIgKmVwOworCWludCBiYXNlID0gMTA7CisJaWYgKCpjcCA9PSAnMCcpIHsKKwkJY2hhciBjID0gKihjcCArIDEpOworCQlpZiAoYyA9PSAneCcgfHwgYyA9PSAnWCcpIHsKKwkJCWJhc2UgPSAxNjsKKwkJCWNwICs9IDI7CisJCX0gZWxzZSBpZiAoYyA+PSAnMCcgJiYgYyA8PSAnNycpIHsKKwkJCWJhc2UgPSA4OworCQkJY3ArKzsKKwkJfQorCX0KKwkqcmVzdWx0ID0gc2ltcGxlX3N0cnRvdWwoY3AsICZlcCwgYmFzZSk7CisJaWYgKGNwID09IGVwKQorCQlyZXR1cm4gMDsKKwkqc3RyID0gZXA7CisJc3dpdGNoIChiYXNlKSB7CisJY2FzZSAxNjoKKwkJcmV0dXJuIFRPTU9ZT19WQUxVRV9UWVBFX0hFWEFERUNJTUFMOworCWNhc2UgODoKKwkJcmV0dXJuIFRPTU9ZT19WQUxVRV9UWVBFX09DVEFMOworCWRlZmF1bHQ6CisJCXJldHVybiBUT01PWU9fVkFMVUVfVFlQRV9ERUNJTUFMOworCX0KK30KKworLyoqCisgKiB0b21veW9fcHJpbnRfdWxvbmcgLSBQcmludCBhbiAidW5zaWduZWQgbG9uZyIgdmFsdWUuCisgKgorICogQGJ1ZmZlcjogICAgIFBvaW50ZXIgdG8gYnVmZmVyLgorICogQGJ1ZmZlcl9sZW46IFNpemUgb2YgQGJ1ZmZlci4KKyAqIEB2YWx1ZTogICAgICBBbiAidW5zaWduZWQgbG9uZyIgdmFsdWUuCisgKiBAdHlwZTogICAgICAgVHlwZSBvZiBAdmFsdWUuCisgKgorICogUmV0dXJucyBub3RoaW5nLgorICovCit2b2lkIHRvbW95b19wcmludF91bG9uZyhjaGFyICpidWZmZXIsIGNvbnN0IGludCBidWZmZXJfbGVuLAorCQkJY29uc3QgdW5zaWduZWQgbG9uZyB2YWx1ZSwgY29uc3QgdTggdHlwZSkKK3sKKwlpZiAodHlwZSA9PSBUT01PWU9fVkFMVUVfVFlQRV9ERUNJTUFMKQorCQlzbnByaW50ZihidWZmZXIsIGJ1ZmZlcl9sZW4sICIlbHUiLCB2YWx1ZSk7CisJZWxzZSBpZiAodHlwZSA9PSBUT01PWU9fVkFMVUVfVFlQRV9PQ1RBTCkKKwkJc25wcmludGYoYnVmZmVyLCBidWZmZXJfbGVuLCAiMCVsbyIsIHZhbHVlKTsKKwllbHNlIGlmICh0eXBlID09IFRPTU9ZT19WQUxVRV9UWVBFX0hFWEFERUNJTUFMKQorCQlzbnByaW50ZihidWZmZXIsIGJ1ZmZlcl9sZW4sICIweCVsWCIsIHZhbHVlKTsKKwllbHNlCisJCXNucHJpbnRmKGJ1ZmZlciwgYnVmZmVyX2xlbiwgInR5cGUoJXUpIiwgdHlwZSk7Cit9CisKKy8qKgorICogdG9tb3lvX3BhcnNlX25hbWVfdW5pb24gLSBQYXJzZSBhIHRvbW95b19uYW1lX3VuaW9uLgorICoKKyAqIEBmaWxlbmFtZTogTmFtZSBvciBuYW1lIGdyb3VwLgorICogQHB0cjogICAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX25hbWVfdW5pb24iLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX3BhcnNlX25hbWVfdW5pb24oY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkgICAgIHN0cnVjdCB0b21veW9fbmFtZV91bmlvbiAqcHRyKQoreworCWlmICghdG9tb3lvX2NvcnJlY3Rfd29yZChmaWxlbmFtZSkpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoZmlsZW5hbWVbMF0gPT0gJ0AnKSB7CisJCXB0ci0+Z3JvdXAgPSB0b21veW9fZ2V0X2dyb3VwKGZpbGVuYW1lICsgMSwgVE9NT1lPX1BBVEhfR1JPVVApOworCQlwdHItPmlzX2dyb3VwID0gdHJ1ZTsKKwkJcmV0dXJuIHB0ci0+Z3JvdXAgIT0gTlVMTDsKKwl9CisJcHRyLT5maWxlbmFtZSA9IHRvbW95b19nZXRfbmFtZShmaWxlbmFtZSk7CisJcHRyLT5pc19ncm91cCA9IGZhbHNlOworCXJldHVybiBwdHItPmZpbGVuYW1lICE9IE5VTEw7Cit9CisKKy8qKgorICogdG9tb3lvX3BhcnNlX251bWJlcl91bmlvbiAtIFBhcnNlIGEgdG9tb3lvX251bWJlcl91bmlvbi4KKyAqCisgKiBAZGF0YTogTnVtYmVyIG9yIG51bWJlciByYW5nZSBvciBudW1iZXIgZ3JvdXAuCisgKiBAcHRyOiAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19udW1iZXJfdW5pb24iLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX3BhcnNlX251bWJlcl91bmlvbihjaGFyICpkYXRhLCBzdHJ1Y3QgdG9tb3lvX251bWJlcl91bmlvbiAqbnVtKQoreworCXU4IHR5cGU7CisJdW5zaWduZWQgbG9uZyB2OworCW1lbXNldChudW0sIDAsIHNpemVvZigqbnVtKSk7CisJaWYgKGRhdGFbMF0gPT0gJ0AnKSB7CisJCWlmICghdG9tb3lvX2NvcnJlY3Rfd29yZChkYXRhKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJbnVtLT5ncm91cCA9IHRvbW95b19nZXRfZ3JvdXAoZGF0YSArIDEsIFRPTU9ZT19OVU1CRVJfR1JPVVApOworCQludW0tPmlzX2dyb3VwID0gdHJ1ZTsKKwkJcmV0dXJuIG51bS0+Z3JvdXAgIT0gTlVMTDsKKwl9CisJdHlwZSA9IHRvbW95b19wYXJzZV91bG9uZygmdiwgJmRhdGEpOworCWlmICghdHlwZSkKKwkJcmV0dXJuIGZhbHNlOworCW51bS0+dmFsdWVzWzBdID0gdjsKKwludW0tPm1pbl90eXBlID0gdHlwZTsKKwlpZiAoISpkYXRhKSB7CisJCW51bS0+dmFsdWVzWzFdID0gdjsKKwkJbnVtLT5tYXhfdHlwZSA9IHR5cGU7CisJCXJldHVybiB0cnVlOworCX0KKwlpZiAoKmRhdGErKyAhPSAnLScpCisJCXJldHVybiBmYWxzZTsKKwl0eXBlID0gdG9tb3lvX3BhcnNlX3Vsb25nKCZ2LCAmZGF0YSk7CisJaWYgKCF0eXBlIHx8ICpkYXRhKQorCQlyZXR1cm4gZmFsc2U7CisJbnVtLT52YWx1ZXNbMV0gPSB2OworCW51bS0+bWF4X3R5cGUgPSB0eXBlOworCXJldHVybiB0cnVlOworfQorCisvKioKKyAqIHRvbW95b19ieXRlX3JhbmdlIC0gQ2hlY2sgd2hldGhlciB0aGUgc3RyaW5nIGlzIGEgXG9vbyBzdHlsZSBvY3RhbCB2YWx1ZS4KKyAqCisgKiBAc3RyOiBQb2ludGVyIHRvIHRoZSBzdHJpbmcuCisgKgorICogUmV0dXJucyB0cnVlIGlmIEBzdHIgaXMgYSBcb29vIHN0eWxlIG9jdGFsIHZhbHVlLCBmYWxzZSBvdGhlcndpc2UuCisgKgorICogVE9NT1lPIHVzZXMgXG9vbyBzdHlsZSByZXByZXNlbnRhdGlvbiBmb3IgMHgwMSAtIDB4MjAgYW5kIDB4N0YgLSAweEZGLgorICogVGhpcyBmdW5jdGlvbiB2ZXJpZmllcyB0aGF0IFxvb28gaXMgaW4gdmFsaWQgcmFuZ2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCB0b21veW9fYnl0ZV9yYW5nZShjb25zdCBjaGFyICpzdHIpCit7CisJcmV0dXJuICpzdHIgPj0gJzAnICYmICpzdHIrKyA8PSAnMycgJiYKKwkJKnN0ciA+PSAnMCcgJiYgKnN0cisrIDw9ICc3JyAmJgorCQkqc3RyID49ICcwJyAmJiAqc3RyIDw9ICc3JzsKK30KKworLyoqCisgKiB0b21veW9fYWxwaGFiZXRfY2hhciAtIENoZWNrIHdoZXRoZXIgdGhlIGNoYXJhY3RlciBpcyBhbiBhbHBoYWJldC4KKyAqCisgKiBAYzogVGhlIGNoYXJhY3RlciB0byBjaGVjay4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQGMgaXMgYW4gYWxwaGFiZXQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCB0b21veW9fYWxwaGFiZXRfY2hhcihjb25zdCBjaGFyIGMpCit7CisJcmV0dXJuIChjID49ICdBJyAmJiBjIDw9ICdaJykgfHwgKGMgPj0gJ2EnICYmIGMgPD0gJ3onKTsKK30KKworLyoqCisgKiB0b21veW9fbWFrZV9ieXRlIC0gTWFrZSBieXRlIHZhbHVlIGZyb20gdGhyZWUgb2N0YWwgY2hhcmFjdGVycy4KKyAqCisgKiBAYzE6IFRoZSBmaXJzdCBjaGFyYWN0ZXIuCisgKiBAYzI6IFRoZSBzZWNvbmQgY2hhcmFjdGVyLgorICogQGMzOiBUaGUgdGhpcmQgY2hhcmFjdGVyLgorICoKKyAqIFJldHVybnMgYnl0ZSB2YWx1ZS4KKyAqLworc3RhdGljIGlubGluZSB1OCB0b21veW9fbWFrZV9ieXRlKGNvbnN0IHU4IGMxLCBjb25zdCB1OCBjMiwgY29uc3QgdTggYzMpCit7CisJcmV0dXJuICgoYzEgLSAnMCcpIDw8IDYpICsgKChjMiAtICcwJykgPDwgMykgKyAoYzMgLSAnMCcpOworfQorCisvKioKKyAqIHRvbW95b19zdHJfc3RhcnRzIC0gQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gc3RyaW5nIHN0YXJ0cyB3aXRoIHRoZSBnaXZlbiBrZXl3b3JkLgorICoKKyAqIEBzcmM6ICBQb2ludGVyIHRvIHBvaW50ZXIgdG8gdGhlIHN0cmluZy4KKyAqIEBmaW5kOiBQb2ludGVyIHRvIHRoZSBrZXl3b3JkLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBAc3JjIHN0YXJ0cyB3aXRoIEBmaW5kLCBmYWxzZSBvdGhlcndpc2UuCisgKgorICogVGhlIEBzcmMgaXMgdXBkYXRlZCB0byBwb2ludCB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBAZmluZAorICogaWYgQHNyYyBzdGFydHMgd2l0aCBAZmluZC4KKyAqLworYm9vbCB0b21veW9fc3RyX3N0YXJ0cyhjaGFyICoqc3JjLCBjb25zdCBjaGFyICpmaW5kKQoreworCWNvbnN0IGludCBsZW4gPSBzdHJsZW4oZmluZCk7CisJY2hhciAqdG1wID0gKnNyYzsKKworCWlmIChzdHJuY21wKHRtcCwgZmluZCwgbGVuKSkKKwkJcmV0dXJuIGZhbHNlOworCXRtcCArPSBsZW47CisJKnNyYyA9IHRtcDsKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiB0b21veW9fbm9ybWFsaXplX2xpbmUgLSBGb3JtYXQgc3RyaW5nLgorICoKKyAqIEBidWZmZXI6IFRoZSBsaW5lIHRvIG5vcm1hbGl6ZS4KKyAqCisgKiBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlcyBhcmUgcmVtb3ZlZC4KKyAqIE11bHRpcGxlIHdoaXRlc3BhY2VzIGFyZSBwYWNrZWQgaW50byBzaW5nbGUgc3BhY2UuCisgKgorICogUmV0dXJucyBub3RoaW5nLgorICovCit2b2lkIHRvbW95b19ub3JtYWxpemVfbGluZSh1bnNpZ25lZCBjaGFyICpidWZmZXIpCit7CisJdW5zaWduZWQgY2hhciAqc3AgPSBidWZmZXI7CisJdW5zaWduZWQgY2hhciAqZHAgPSBidWZmZXI7CisJYm9vbCBmaXJzdCA9IHRydWU7CisKKwl3aGlsZSAodG9tb3lvX2ludmFsaWQoKnNwKSkKKwkJc3ArKzsKKwl3aGlsZSAoKnNwKSB7CisJCWlmICghZmlyc3QpCisJCQkqZHArKyA9ICcgJzsKKwkJZmlyc3QgPSBmYWxzZTsKKwkJd2hpbGUgKHRvbW95b192YWxpZCgqc3ApKQorCQkJKmRwKysgPSAqc3ArKzsKKwkJd2hpbGUgKHRvbW95b19pbnZhbGlkKCpzcCkpCisJCQlzcCsrOworCX0KKwkqZHAgPSAnXDAnOworfQorCisvKioKKyAqIHRvbW95b190b2tlbml6ZSAtIFRva2VuaXplIHN0cmluZy4KKyAqCisgKiBAYnVmZmVyOiBUaGUgbGluZSB0byB0b2tlbml6ZS4KKyAqIEB3OiAgICAgIFBvaW50ZXIgdG8gImNoYXIgKiIuCisgKiBAc2l6ZTogICBTaXplb2YgQHcgLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX3Rva2VuaXplKGNoYXIgKmJ1ZmZlciwgY2hhciAqd1tdLCBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgY291bnQgPSBzaXplIC8gc2l6ZW9mKGNoYXIgKik7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisJCXdbaV0gPSAiIjsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQljaGFyICpjcCA9IHN0cmNocihidWZmZXIsICcgJyk7CisJCWlmIChjcCkKKwkJCSpjcCA9ICdcMCc7CisJCXdbaV0gPSBidWZmZXI7CisJCWlmICghY3ApCisJCQlicmVhazsKKwkJYnVmZmVyID0gY3AgKyAxOworCX0KKwlyZXR1cm4gaSA8IGNvdW50IHx8ICEqYnVmZmVyOworfQorCisvKioKKyAqIHRvbW95b19jb3JyZWN0X3dvcmQyIC0gVmFsaWRhdGUgYSBzdHJpbmcuCisgKgorICogQHN0cmluZzogVGhlIHN0cmluZyB0byBjaGVjay4gTWF5IGJlIG5vbi0nXDAnLXRlcm1pbmF0ZWQuCisgKiBAbGVuOiAgICBMZW5ndGggb2YgQHN0cmluZy4KKyAqCisgKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBzdHJpbmcgZm9sbG93cyB0aGUgbmFtaW5nIHJ1bGVzLgorICogUmV0dXJucyB0cnVlIGlmIEBzdHJpbmcgZm9sbG93cyB0aGUgbmFtaW5nIHJ1bGVzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19jb3JyZWN0X3dvcmQyKGNvbnN0IGNoYXIgKnN0cmluZywgc2l6ZV90IGxlbikKK3sKKwljb25zdCBjaGFyICpjb25zdCBzdGFydCA9IHN0cmluZzsKKwlib29sIGluX3JlcGV0aXRpb24gPSBmYWxzZTsKKwl1bnNpZ25lZCBjaGFyIGM7CisJdW5zaWduZWQgY2hhciBkOworCXVuc2lnbmVkIGNoYXIgZTsKKwlpZiAoIWxlbikKKwkJZ290byBvdXQ7CisJd2hpbGUgKGxlbi0tKSB7CisJCWMgPSAqc3RyaW5nKys7CisJCWlmIChjID09ICdcXCcpIHsKKwkJCWlmICghbGVuLS0pCisJCQkJZ290byBvdXQ7CisJCQljID0gKnN0cmluZysrOworCQkJc3dpdGNoIChjKSB7CisJCQljYXNlICdcXCc6ICAvKiAiXFwiICovCisJCQkJY29udGludWU7CisJCQljYXNlICckJzogICAvKiAiXCQiICovCisJCQljYXNlICcrJzogICAvKiAiXCsiICovCisJCQljYXNlICc/JzogICAvKiAiXD8iICovCisJCQljYXNlICcqJzogICAvKiAiXCoiICovCisJCQljYXNlICdAJzogICAvKiAiXEAiICovCisJCQljYXNlICd4JzogICAvKiAiXHgiICovCisJCQljYXNlICdYJzogICAvKiAiXFgiICovCisJCQljYXNlICdhJzogICAvKiAiXGEiICovCisJCQljYXNlICdBJzogICAvKiAiXEEiICovCisJCQljYXNlICctJzogICAvKiAiXC0iICovCisJCQkJY29udGludWU7CisJCQljYXNlICd7JzogICAvKiAiL1x7IiAqLworCQkJCWlmIChzdHJpbmcgLSAzIDwgc3RhcnQgfHwgKihzdHJpbmcgLSAzKSAhPSAnLycpCisJCQkJCWJyZWFrOworCQkJCWluX3JlcGV0aXRpb24gPSB0cnVlOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnfSc6ICAgLyogIlx9LyIgKi8KKwkJCQlpZiAoKnN0cmluZyAhPSAnLycpCisJCQkJCWJyZWFrOworCQkJCWlmICghaW5fcmVwZXRpdGlvbikKKwkJCQkJYnJlYWs7CisJCQkJaW5fcmVwZXRpdGlvbiA9IGZhbHNlOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnMCc6ICAgLyogIlxvb28iICovCisJCQljYXNlICcxJzoKKwkJCWNhc2UgJzInOgorCQkJY2FzZSAnMyc6CisJCQkJaWYgKCFsZW4tLSB8fCAhbGVuLS0pCisJCQkJCWJyZWFrOworCQkJCWQgPSAqc3RyaW5nKys7CisJCQkJZSA9ICpzdHJpbmcrKzsKKwkJCQlpZiAoZCA8ICcwJyB8fCBkID4gJzcnIHx8IGUgPCAnMCcgfHwgZSA+ICc3JykKKwkJCQkJYnJlYWs7CisJCQkJYyA9IHRvbW95b19tYWtlX2J5dGUoYywgZCwgZSk7CisJCQkJaWYgKHRvbW95b19pbnZhbGlkKGMpKQorCQkJCQljb250aW51ZTsgLyogcGF0dGVybiBpcyBub3QgXDAwMCAqLworCQkJfQorCQkJZ290byBvdXQ7CisJCX0gZWxzZSBpZiAoaW5fcmVwZXRpdGlvbiAmJiBjID09ICcvJykgeworCQkJZ290byBvdXQ7CisJCX0gZWxzZSBpZiAodG9tb3lvX2ludmFsaWQoYykpIHsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCWlmIChpbl9yZXBldGl0aW9uKQorCQlnb3RvIG91dDsKKwlyZXR1cm4gdHJ1ZTsKKyBvdXQ6CisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIHRvbW95b19jb3JyZWN0X3dvcmQgLSBWYWxpZGF0ZSBhIHN0cmluZy4KKyAqCisgKiBAc3RyaW5nOiBUaGUgc3RyaW5nIHRvIGNoZWNrLgorICoKKyAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIHN0cmluZyBmb2xsb3dzIHRoZSBuYW1pbmcgcnVsZXMuCisgKiBSZXR1cm5zIHRydWUgaWYgQHN0cmluZyBmb2xsb3dzIHRoZSBuYW1pbmcgcnVsZXMsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbCB0b21veW9fY29ycmVjdF93b3JkKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKwlyZXR1cm4gdG9tb3lvX2NvcnJlY3Rfd29yZDIoc3RyaW5nLCBzdHJsZW4oc3RyaW5nKSk7Cit9CisKKy8qKgorICogdG9tb3lvX2NvcnJlY3RfcGF0aCAtIFZhbGlkYXRlIGEgcGF0aG5hbWUuCisgKgorICogQGZpbGVuYW1lOiBUaGUgcGF0aG5hbWUgdG8gY2hlY2suCisgKgorICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gcGF0aG5hbWUgZm9sbG93cyB0aGUgbmFtaW5nIHJ1bGVzLgorICogUmV0dXJucyB0cnVlIGlmIEBmaWxlbmFtZSBmb2xsb3dzIHRoZSBuYW1pbmcgcnVsZXMsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbCB0b21veW9fY29ycmVjdF9wYXRoKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXJldHVybiAqZmlsZW5hbWUgPT0gJy8nICYmIHRvbW95b19jb3JyZWN0X3dvcmQoZmlsZW5hbWUpOworfQorCisvKioKKyAqIHRvbW95b19jb3JyZWN0X2RvbWFpbiAtIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGRvbWFpbm5hbWUgZm9sbG93cyB0aGUgbmFtaW5nIHJ1bGVzLgorICoKKyAqIEBkb21haW5uYW1lOiBUaGUgZG9tYWlubmFtZSB0byBjaGVjay4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQGRvbWFpbm5hbWUgZm9sbG93cyB0aGUgbmFtaW5nIHJ1bGVzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX2NvcnJlY3RfZG9tYWluKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRvbWFpbm5hbWUpCit7CisJaWYgKCFkb21haW5uYW1lIHx8IHN0cm5jbXAoZG9tYWlubmFtZSwgVE9NT1lPX1JPT1RfTkFNRSwKKwkJCQkgICBUT01PWU9fUk9PVF9OQU1FX0xFTikpCisJCWdvdG8gb3V0OworCWRvbWFpbm5hbWUgKz0gVE9NT1lPX1JPT1RfTkFNRV9MRU47CisJaWYgKCEqZG9tYWlubmFtZSkKKwkJcmV0dXJuIHRydWU7CisJaWYgKCpkb21haW5uYW1lKysgIT0gJyAnKQorCQlnb3RvIG91dDsKKwl3aGlsZSAoMSkgeworCQljb25zdCB1bnNpZ25lZCBjaGFyICpjcCA9IHN0cmNocihkb21haW5uYW1lLCAnICcpOworCQlpZiAoIWNwKQorCQkJYnJlYWs7CisJCWlmICgqZG9tYWlubmFtZSAhPSAnLycgfHwKKwkJICAgICF0b21veW9fY29ycmVjdF93b3JkMihkb21haW5uYW1lLCBjcCAtIGRvbWFpbm5hbWUgLSAxKSkKKwkJCWdvdG8gb3V0OworCQlkb21haW5uYW1lID0gY3AgKyAxOworCX0KKwlyZXR1cm4gdG9tb3lvX2NvcnJlY3RfcGF0aChkb21haW5uYW1lKTsKKyBvdXQ6CisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIHRvbW95b19kb21haW5fZGVmIC0gQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gdG9rZW4gY2FuIGJlIGEgZG9tYWlubmFtZS4KKyAqCisgKiBAYnVmZmVyOiBUaGUgdG9rZW4gdG8gY2hlY2suCisgKgorICogUmV0dXJucyB0cnVlIGlmIEBidWZmZXIgcG9zc2libHkgYmUgYSBkb21haW5uYW1lLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX2RvbWFpbl9kZWYoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyKQoreworCXJldHVybiAhc3RybmNtcChidWZmZXIsIFRPTU9ZT19ST09UX05BTUUsIFRPTU9ZT19ST09UX05BTUVfTEVOKTsKK30KKworLyoqCisgKiB0b21veW9fZmluZF9kb21haW4gLSBGaW5kIGEgZG9tYWluIGJ5IHRoZSBnaXZlbiBuYW1lLgorICoKKyAqIEBkb21haW5uYW1lOiBUaGUgZG9tYWlubmFtZSB0byBmaW5kLgorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIgaWYgZm91bmQsIE5VTEwgb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCisgKi8KK3N0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKnRvbW95b19maW5kX2RvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKQoreworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbjsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBuYW1lOworCisJbmFtZS5uYW1lID0gZG9tYWlubmFtZTsKKwl0b21veW9fZmlsbF9wYXRoX2luZm8oJm5hbWUpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRvbWFpbiwgJnRvbW95b19kb21haW5fbGlzdCwgbGlzdCkgeworCQlpZiAoIWRvbWFpbi0+aXNfZGVsZXRlZCAmJgorCQkgICAgIXRvbW95b19wYXRoY21wKCZuYW1lLCBkb21haW4tPmRvbWFpbm5hbWUpKQorCQkJcmV0dXJuIGRvbWFpbjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogdG9tb3lvX2NvbnN0X3BhcnRfbGVuZ3RoIC0gRXZhbHVhdGUgdGhlIGluaXRpYWwgbGVuZ3RoIHdpdGhvdXQgYSBwYXR0ZXJuIGluIGEgdG9rZW4uCisgKgorICogQGZpbGVuYW1lOiBUaGUgc3RyaW5nIHRvIGV2YWx1YXRlLgorICoKKyAqIFJldHVybnMgdGhlIGluaXRpYWwgbGVuZ3RoIHdpdGhvdXQgYSBwYXR0ZXJuIGluIEBmaWxlbmFtZS4KKyAqLworc3RhdGljIGludCB0b21veW9fY29uc3RfcGFydF9sZW5ndGgoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJY2hhciBjOworCWludCBsZW4gPSAwOworCisJaWYgKCFmaWxlbmFtZSkKKwkJcmV0dXJuIDA7CisJd2hpbGUgKChjID0gKmZpbGVuYW1lKyspICE9ICdcMCcpIHsKKwkJaWYgKGMgIT0gJ1xcJykgeworCQkJbGVuKys7CisJCQljb250aW51ZTsKKwkJfQorCQljID0gKmZpbGVuYW1lKys7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdcXCc6ICAvKiAiXFwiICovCisJCQlsZW4gKz0gMjsKKwkJCWNvbnRpbnVlOworCQljYXNlICcwJzogICAvKiAiXG9vbyIgKi8KKwkJY2FzZSAnMSc6CisJCWNhc2UgJzInOgorCQljYXNlICczJzoKKwkJCWMgPSAqZmlsZW5hbWUrKzsKKwkJCWlmIChjIDwgJzAnIHx8IGMgPiAnNycpCisJCQkJYnJlYWs7CisJCQljID0gKmZpbGVuYW1lKys7CisJCQlpZiAoYyA8ICcwJyB8fCBjID4gJzcnKQorCQkJCWJyZWFrOworCQkJbGVuICs9IDQ7CisJCQljb250aW51ZTsKKwkJfQorCQlicmVhazsKKwl9CisJcmV0dXJuIGxlbjsKK30KKworLyoqCisgKiB0b21veW9fZmlsbF9wYXRoX2luZm8gLSBGaWxsIGluICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyIgbWVtYmVycy4KKyAqCisgKiBAcHRyOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyIgdG8gZmlsbCBpbi4KKyAqCisgKiBUaGUgY2FsbGVyIHNldHMgInN0cnVjdCB0b21veW9fcGF0aF9pbmZvIi0+bmFtZS4KKyAqLwordm9pZCB0b21veW9fZmlsbF9wYXRoX2luZm8oc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnB0cikKK3sKKwljb25zdCBjaGFyICpuYW1lID0gcHRyLT5uYW1lOworCWNvbnN0IGludCBsZW4gPSBzdHJsZW4obmFtZSk7CisKKwlwdHItPmNvbnN0X2xlbiA9IHRvbW95b19jb25zdF9wYXJ0X2xlbmd0aChuYW1lKTsKKwlwdHItPmlzX2RpciA9IGxlbiAmJiAobmFtZVtsZW4gLSAxXSA9PSAnLycpOworCXB0ci0+aXNfcGF0dGVybmVkID0gKHB0ci0+Y29uc3RfbGVuIDwgbGVuKTsKKwlwdHItPmhhc2ggPSBmdWxsX25hbWVfaGFzaChuYW1lLCBsZW4pOworfQorCisvKioKKyAqIHRvbW95b19maWxlX21hdGNoZXNfcGF0dGVybjIgLSBQYXR0ZXJuIG1hdGNoaW5nIHdpdGhvdXQgJy8nIGNoYXJhY3RlciBhbmQgIlwtIiBwYXR0ZXJuLgorICoKKyAqIEBmaWxlbmFtZTogICAgIFRoZSBzdGFydCBvZiBzdHJpbmcgdG8gY2hlY2suCisgKiBAZmlsZW5hbWVfZW5kOiBUaGUgZW5kIG9mIHN0cmluZyB0byBjaGVjay4KKyAqIEBwYXR0ZXJuOiAgICAgIFRoZSBzdGFydCBvZiBwYXR0ZXJuIHRvIGNvbXBhcmUuCisgKiBAcGF0dGVybl9lbmQ6ICBUaGUgZW5kIG9mIHBhdHRlcm4gdG8gY29tcGFyZS4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQGZpbGVuYW1lIG1hdGNoZXMgQHBhdHRlcm4sIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgdG9tb3lvX2ZpbGVfbWF0Y2hlc19wYXR0ZXJuMihjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCQkJIGNvbnN0IGNoYXIgKmZpbGVuYW1lX2VuZCwKKwkJCQkJIGNvbnN0IGNoYXIgKnBhdHRlcm4sCisJCQkJCSBjb25zdCBjaGFyICpwYXR0ZXJuX2VuZCkKK3sKKwl3aGlsZSAoZmlsZW5hbWUgPCBmaWxlbmFtZV9lbmQgJiYgcGF0dGVybiA8IHBhdHRlcm5fZW5kKSB7CisJCWNoYXIgYzsKKwkJaWYgKCpwYXR0ZXJuICE9ICdcXCcpIHsKKwkJCWlmICgqZmlsZW5hbWUrKyAhPSAqcGF0dGVybisrKQorCQkJCXJldHVybiBmYWxzZTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWMgPSAqZmlsZW5hbWU7CisJCXBhdHRlcm4rKzsKKwkJc3dpdGNoICgqcGF0dGVybikgeworCQkJaW50IGk7CisJCQlpbnQgajsKKwkJY2FzZSAnPyc6CisJCQlpZiAoYyA9PSAnLycpIHsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKGMgPT0gJ1xcJykgeworCQkJCWlmIChmaWxlbmFtZVsxXSA9PSAnXFwnKQorCQkJCQlmaWxlbmFtZSsrOworCQkJCWVsc2UgaWYgKHRvbW95b19ieXRlX3JhbmdlKGZpbGVuYW1lICsgMSkpCisJCQkJCWZpbGVuYW1lICs9IDM7CisJCQkJZWxzZQorCQkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnXFwnOgorCQkJaWYgKGMgIT0gJ1xcJykKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQlpZiAoKisrZmlsZW5hbWUgIT0gJ1xcJykKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQlicmVhazsKKwkJY2FzZSAnKyc6CisJCQlpZiAoIWlzZGlnaXQoYykpCisJCQkJcmV0dXJuIGZhbHNlOworCQkJYnJlYWs7CisJCWNhc2UgJ3gnOgorCQkJaWYgKCFpc3hkaWdpdChjKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQlicmVhazsKKwkJY2FzZSAnYSc6CisJCQlpZiAoIXRvbW95b19hbHBoYWJldF9jaGFyKGMpKQorCQkJCXJldHVybiBmYWxzZTsKKwkJCWJyZWFrOworCQljYXNlICcwJzoKKwkJY2FzZSAnMSc6CisJCWNhc2UgJzInOgorCQljYXNlICczJzoKKwkJCWlmIChjID09ICdcXCcgJiYgdG9tb3lvX2J5dGVfcmFuZ2UoZmlsZW5hbWUgKyAxKQorCQkJICAgICYmIHN0cm5jbXAoZmlsZW5hbWUgKyAxLCBwYXR0ZXJuLCAzKSA9PSAwKSB7CisJCQkJZmlsZW5hbWUgKz0gMzsKKwkJCQlwYXR0ZXJuICs9IDI7CisJCQkJYnJlYWs7CisJCQl9CisJCQlyZXR1cm4gZmFsc2U7IC8qIE5vdCBtYXRjaGVkLiAqLworCQljYXNlICcqJzoKKwkJY2FzZSAnQCc6CisJCQlmb3IgKGkgPSAwOyBpIDw9IGZpbGVuYW1lX2VuZCAtIGZpbGVuYW1lOyBpKyspIHsKKwkJCQlpZiAodG9tb3lvX2ZpbGVfbWF0Y2hlc19wYXR0ZXJuMigKKwkJCQkJCSAgICBmaWxlbmFtZSArIGksIGZpbGVuYW1lX2VuZCwKKwkJCQkJCSAgICBwYXR0ZXJuICsgMSwgcGF0dGVybl9lbmQpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQljID0gZmlsZW5hbWVbaV07CisJCQkJaWYgKGMgPT0gJy4nICYmICpwYXR0ZXJuID09ICdAJykKKwkJCQkJYnJlYWs7CisJCQkJaWYgKGMgIT0gJ1xcJykKKwkJCQkJY29udGludWU7CisJCQkJaWYgKGZpbGVuYW1lW2kgKyAxXSA9PSAnXFwnKQorCQkJCQlpKys7CisJCQkJZWxzZSBpZiAodG9tb3lvX2J5dGVfcmFuZ2UoZmlsZW5hbWUgKyBpICsgMSkpCisJCQkJCWkgKz0gMzsKKwkJCQllbHNlCisJCQkJCWJyZWFrOyAvKiBCYWQgcGF0dGVybi4gKi8KKwkJCX0KKwkJCXJldHVybiBmYWxzZTsgLyogTm90IG1hdGNoZWQuICovCisJCWRlZmF1bHQ6CisJCQlqID0gMDsKKwkJCWMgPSAqcGF0dGVybjsKKwkJCWlmIChjID09ICckJykgeworCQkJCXdoaWxlIChpc2RpZ2l0KGZpbGVuYW1lW2pdKSkKKwkJCQkJaisrOworCQkJfSBlbHNlIGlmIChjID09ICdYJykgeworCQkJCXdoaWxlIChpc3hkaWdpdChmaWxlbmFtZVtqXSkpCisJCQkJCWorKzsKKwkJCX0gZWxzZSBpZiAoYyA9PSAnQScpIHsKKwkJCQl3aGlsZSAodG9tb3lvX2FscGhhYmV0X2NoYXIoZmlsZW5hbWVbal0pKQorCQkJCQlqKys7CisJCQl9CisJCQlmb3IgKGkgPSAxOyBpIDw9IGo7IGkrKykgeworCQkJCWlmICh0b21veW9fZmlsZV9tYXRjaGVzX3BhdHRlcm4yKAorCQkJCQkJICAgIGZpbGVuYW1lICsgaSwgZmlsZW5hbWVfZW5kLAorCQkJCQkJICAgIHBhdHRlcm4gKyAxLCBwYXR0ZXJuX2VuZCkpCisJCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJcmV0dXJuIGZhbHNlOyAvKiBOb3QgbWF0Y2hlZCBvciBiYWQgcGF0dGVybi4gKi8KKwkJfQorCQlmaWxlbmFtZSsrOworCQlwYXR0ZXJuKys7CisJfQorCXdoaWxlICgqcGF0dGVybiA9PSAnXFwnICYmCisJICAgICAgICgqKHBhdHRlcm4gKyAxKSA9PSAnKicgfHwgKihwYXR0ZXJuICsgMSkgPT0gJ0AnKSkKKwkJcGF0dGVybiArPSAyOworCXJldHVybiBmaWxlbmFtZSA9PSBmaWxlbmFtZV9lbmQgJiYgcGF0dGVybiA9PSBwYXR0ZXJuX2VuZDsKK30KKworLyoqCisgKiB0b21veW9fZmlsZV9tYXRjaGVzX3BhdHRlcm4gLSBQYXR0ZXJuIG1hdGNoaW5nIHdpdGhvdXQgJy8nIGNoYXJhY3Rlci4KKyAqCisgKiBAZmlsZW5hbWU6ICAgICBUaGUgc3RhcnQgb2Ygc3RyaW5nIHRvIGNoZWNrLgorICogQGZpbGVuYW1lX2VuZDogVGhlIGVuZCBvZiBzdHJpbmcgdG8gY2hlY2suCisgKiBAcGF0dGVybjogICAgICBUaGUgc3RhcnQgb2YgcGF0dGVybiB0byBjb21wYXJlLgorICogQHBhdHRlcm5fZW5kOiAgVGhlIGVuZCBvZiBwYXR0ZXJuIHRvIGNvbXBhcmUuCisgKgorICogUmV0dXJucyB0cnVlIGlmIEBmaWxlbmFtZSBtYXRjaGVzIEBwYXR0ZXJuLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19maWxlX21hdGNoZXNfcGF0dGVybihjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCQkJY29uc3QgY2hhciAqZmlsZW5hbWVfZW5kLAorCQkJCQljb25zdCBjaGFyICpwYXR0ZXJuLAorCQkJCQljb25zdCBjaGFyICpwYXR0ZXJuX2VuZCkKK3sKKwljb25zdCBjaGFyICpwYXR0ZXJuX3N0YXJ0ID0gcGF0dGVybjsKKwlib29sIGZpcnN0ID0gdHJ1ZTsKKwlib29sIHJlc3VsdDsKKworCXdoaWxlIChwYXR0ZXJuIDwgcGF0dGVybl9lbmQgLSAxKSB7CisJCS8qIFNwbGl0IGF0ICJcLSIgcGF0dGVybi4gKi8KKwkJaWYgKCpwYXR0ZXJuKysgIT0gJ1xcJyB8fCAqcGF0dGVybisrICE9ICctJykKKwkJCWNvbnRpbnVlOworCQlyZXN1bHQgPSB0b21veW9fZmlsZV9tYXRjaGVzX3BhdHRlcm4yKGZpbGVuYW1lLAorCQkJCQkJICAgICAgZmlsZW5hbWVfZW5kLAorCQkJCQkJICAgICAgcGF0dGVybl9zdGFydCwKKwkJCQkJCSAgICAgIHBhdHRlcm4gLSAyKTsKKwkJaWYgKGZpcnN0KQorCQkJcmVzdWx0ID0gIXJlc3VsdDsKKwkJaWYgKHJlc3VsdCkKKwkJCXJldHVybiBmYWxzZTsKKwkJZmlyc3QgPSBmYWxzZTsKKwkJcGF0dGVybl9zdGFydCA9IHBhdHRlcm47CisJfQorCXJlc3VsdCA9IHRvbW95b19maWxlX21hdGNoZXNfcGF0dGVybjIoZmlsZW5hbWUsIGZpbGVuYW1lX2VuZCwKKwkJCQkJICAgICAgcGF0dGVybl9zdGFydCwgcGF0dGVybl9lbmQpOworCXJldHVybiBmaXJzdCA/IHJlc3VsdCA6ICFyZXN1bHQ7Cit9CisKKy8qKgorICogdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuMiAtIERvIHBhdGhuYW1lIHBhdHRlcm4gbWF0Y2hpbmcuCisgKgorICogQGY6IFRoZSBzdGFydCBvZiBzdHJpbmcgdG8gY2hlY2suCisgKiBAcDogVGhlIHN0YXJ0IG9mIHBhdHRlcm4gdG8gY29tcGFyZS4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQGYgbWF0Y2hlcyBAcCwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4yKGNvbnN0IGNoYXIgKmYsIGNvbnN0IGNoYXIgKnApCit7CisJY29uc3QgY2hhciAqZl9kZWxpbWl0ZXI7CisJY29uc3QgY2hhciAqcF9kZWxpbWl0ZXI7CisKKwl3aGlsZSAoKmYgJiYgKnApIHsKKwkJZl9kZWxpbWl0ZXIgPSBzdHJjaHIoZiwgJy8nKTsKKwkJaWYgKCFmX2RlbGltaXRlcikKKwkJCWZfZGVsaW1pdGVyID0gZiArIHN0cmxlbihmKTsKKwkJcF9kZWxpbWl0ZXIgPSBzdHJjaHIocCwgJy8nKTsKKwkJaWYgKCFwX2RlbGltaXRlcikKKwkJCXBfZGVsaW1pdGVyID0gcCArIHN0cmxlbihwKTsKKwkJaWYgKCpwID09ICdcXCcgJiYgKihwICsgMSkgPT0gJ3snKQorCQkJZ290byByZWN1cnNpdmU7CisJCWlmICghdG9tb3lvX2ZpbGVfbWF0Y2hlc19wYXR0ZXJuKGYsIGZfZGVsaW1pdGVyLCBwLAorCQkJCQkJIHBfZGVsaW1pdGVyKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJZiA9IGZfZGVsaW1pdGVyOworCQlpZiAoKmYpCisJCQlmKys7CisJCXAgPSBwX2RlbGltaXRlcjsKKwkJaWYgKCpwKQorCQkJcCsrOworCX0KKwkvKiBJZ25vcmUgdHJhaWxpbmcgIlwqIiBhbmQgIlxAIiBpbiBAcGF0dGVybi4gKi8KKwl3aGlsZSAoKnAgPT0gJ1xcJyAmJgorCSAgICAgICAoKihwICsgMSkgPT0gJyonIHx8ICoocCArIDEpID09ICdAJykpCisJCXAgKz0gMjsKKwlyZXR1cm4gISpmICYmICEqcDsKKyByZWN1cnNpdmU6CisJLyoKKwkgKiBUaGUgIlx7IiBwYXR0ZXJuIGlzIHBlcm1pdHRlZCBvbmx5IGFmdGVyICcvJyBjaGFyYWN0ZXIuCisJICogVGhpcyBndWFyYW50ZWVzIHRoYXQgYmVsb3cgIioocCAtIDEpIiBpcyBzYWZlLgorCSAqIEFsc28sIHRoZSAiXH0iIHBhdHRlcm4gaXMgcGVybWl0dGVkIG9ubHkgYmVmb3JlICcvJyBjaGFyYWN0ZXIKKwkgKiBzbyB0aGF0ICJceyIgKyAiXH0iIHBhaXIgd2lsbCBub3QgYnJlYWsgdGhlICJcLSIgb3BlcmF0b3IuCisJICovCisJaWYgKCoocCAtIDEpICE9ICcvJyB8fCBwX2RlbGltaXRlciA8PSBwICsgMyB8fCAqcF9kZWxpbWl0ZXIgIT0gJy8nIHx8CisJICAgICoocF9kZWxpbWl0ZXIgLSAxKSAhPSAnfScgfHwgKihwX2RlbGltaXRlciAtIDIpICE9ICdcXCcpCisJCXJldHVybiBmYWxzZTsgLyogQmFkIHBhdHRlcm4uICovCisJZG8geworCQkvKiBDb21wYXJlIGN1cnJlbnQgY29tcG9uZW50IHdpdGggcGF0dGVybi4gKi8KKwkJaWYgKCF0b21veW9fZmlsZV9tYXRjaGVzX3BhdHRlcm4oZiwgZl9kZWxpbWl0ZXIsIHAgKyAyLAorCQkJCQkJIHBfZGVsaW1pdGVyIC0gMikpCisJCQlicmVhazsKKwkJLyogUHJvY2VlZCB0byBuZXh0IGNvbXBvbmVudC4gKi8KKwkJZiA9IGZfZGVsaW1pdGVyOworCQlpZiAoISpmKQorCQkJYnJlYWs7CisJCWYrKzsKKwkJLyogQ29udGludWUgY29tcGFyaXNvbi4gKi8KKwkJaWYgKHRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybjIoZiwgcF9kZWxpbWl0ZXIgKyAxKSkKKwkJCXJldHVybiB0cnVlOworCQlmX2RlbGltaXRlciA9IHN0cmNocihmLCAnLycpOworCX0gd2hpbGUgKGZfZGVsaW1pdGVyKTsKKwlyZXR1cm4gZmFsc2U7IC8qIE5vdCBtYXRjaGVkLiAqLworfQorCisvKioKKyAqIHRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybiAtIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGZpbGVuYW1lIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4uCisgKgorICogQGZpbGVuYW1lOiBUaGUgZmlsZW5hbWUgdG8gY2hlY2suCisgKiBAcGF0dGVybjogIFRoZSBwYXR0ZXJuIHRvIGNvbXBhcmUuCisgKgorICogUmV0dXJucyB0cnVlIGlmIG1hdGNoZXMsIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBUaGUgZm9sbG93aW5nIHBhdHRlcm5zIGFyZSBhdmFpbGFibGUuCisgKiAgIFxcICAgICBcIGl0c2VsZi4KKyAqICAgXG9vbyAgIE9jdGFsIHJlcHJlc2VudGF0aW9uIG9mIGEgYnl0ZS4KKyAqICAgXCogICAgIFplcm8gb3IgbW9yZSByZXBldGl0aW9ucyBvZiBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gJy8nLgorICogICBcQCAgICAgWmVybyBvciBtb3JlIHJlcGV0aXRpb25zIG9mIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiAnLycgb3IgJy4nLgorICogICBcPyAgICAgMSBieXRlIGNoYXJhY3RlciBvdGhlciB0aGFuICcvJy4KKyAqICAgXCQgICAgIE9uZSBvciBtb3JlIHJlcGV0aXRpb25zIG9mIGRlY2ltYWwgZGlnaXRzLgorICogICBcKyAgICAgMSBkZWNpbWFsIGRpZ2l0LgorICogICBcWCAgICAgT25lIG9yIG1vcmUgcmVwZXRpdGlvbnMgb2YgaGV4YWRlY2ltYWwgZGlnaXRzLgorICogICBceCAgICAgMSBoZXhhZGVjaW1hbCBkaWdpdC4KKyAqICAgXEEgICAgIE9uZSBvciBtb3JlIHJlcGV0aXRpb25zIG9mIGFscGhhYmV0IGNoYXJhY3RlcnMuCisgKiAgIFxhICAgICAxIGFscGhhYmV0IGNoYXJhY3Rlci4KKyAqCisgKiAgIFwtICAgICBTdWJ0cmFjdGlvbiBvcGVyYXRvci4KKyAqCisgKiAgIC9ce2Rpclx9LyAgICcvJyArICdPbmUgb3IgbW9yZSByZXBldGl0aW9ucyBvZiBkaXIvJyAoZS5nLiAvZGlyLyAvZGlyL2Rpci8KKyAqICAgICAgICAgICAgICAgL2Rpci9kaXIvZGlyLyApLgorICovCitib29sIHRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybihjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUsCisJCQkJIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwYXR0ZXJuKQoreworCWNvbnN0IGNoYXIgKmYgPSBmaWxlbmFtZS0+bmFtZTsKKwljb25zdCBjaGFyICpwID0gcGF0dGVybi0+bmFtZTsKKwljb25zdCBpbnQgbGVuID0gcGF0dGVybi0+Y29uc3RfbGVuOworCisJLyogSWYgQHBhdHRlcm4gZG9lc24ndCBjb250YWluIHBhdHRlcm4sIEkgY2FuIHVzZSBzdHJjbXAoKS4gKi8KKwlpZiAoIXBhdHRlcm4tPmlzX3BhdHRlcm5lZCkKKwkJcmV0dXJuICF0b21veW9fcGF0aGNtcChmaWxlbmFtZSwgcGF0dGVybik7CisJLyogRG9uJ3QgY29tcGFyZSBkaXJlY3RvcnkgYW5kIG5vbi1kaXJlY3RvcnkuICovCisJaWYgKGZpbGVuYW1lLT5pc19kaXIgIT0gcGF0dGVybi0+aXNfZGlyKQorCQlyZXR1cm4gZmFsc2U7CisJLyogQ29tcGFyZSB0aGUgaW5pdGlhbCBsZW5ndGggd2l0aG91dCBwYXR0ZXJucy4gKi8KKwlpZiAoc3RybmNtcChmLCBwLCBsZW4pKQorCQlyZXR1cm4gZmFsc2U7CisJZiArPSBsZW47CisJcCArPSBsZW47CisJcmV0dXJuIHRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybjIoZiwgcCk7Cit9CisKKy8qKgorICogdG9tb3lvX2dldF9leGUgLSBHZXQgdG9tb3lvX3JlYWxwYXRoKCkgb2YgY3VycmVudCBwcm9jZXNzLgorICoKKyAqIFJldHVybnMgdGhlIHRvbW95b19yZWFscGF0aCgpIG9mIGN1cnJlbnQgcHJvY2VzcyBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHVzZXMga3phbGxvYygpLCBzbyB0aGUgY2FsbGVyIG11c3QgY2FsbCBrZnJlZSgpCisgKiBpZiB0aGlzIGZ1bmN0aW9uIGRpZG4ndCByZXR1cm4gTlVMTC4KKyAqLworY29uc3QgY2hhciAqdG9tb3lvX2dldF9leGUodm9pZCkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCWNvbnN0IGNoYXIgKmNwID0gTlVMTDsKKworCWlmICghbW0pCisJCXJldHVybiBOVUxMOworCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlmb3IgKHZtYSA9IG1tLT5tbWFwOyB2bWE7IHZtYSA9IHZtYS0+dm1fbmV4dCkgeworCQlpZiAoKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDVVRBQkxFKSAmJiB2bWEtPnZtX2ZpbGUpIHsKKwkJCWNwID0gdG9tb3lvX3JlYWxwYXRoX2Zyb21fcGF0aCgmdm1hLT52bV9maWxlLT5mX3BhdGgpOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlyZXR1cm4gY3A7Cit9CisKKy8qKgorICogdG9tb3lvX2dldF9tb2RlIC0gR2V0IE1BQyBtb2RlLgorICoKKyAqIEBwcm9maWxlOiBQcm9maWxlIG51bWJlci4KKyAqIEBpbmRleDogICBJbmRleCBudW1iZXIgb2YgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBSZXR1cm5zIG1vZGUuCisgKi8KK2ludCB0b21veW9fZ2V0X21vZGUoY29uc3QgdTggcHJvZmlsZSwgY29uc3QgdTggaW5kZXgpCit7CisJdTggbW9kZTsKKwljb25zdCB1OCBjYXRlZ29yeSA9IFRPTU9ZT19NQUNfQ0FURUdPUllfRklMRTsKKwlpZiAoIXRvbW95b19wb2xpY3lfbG9hZGVkKQorCQlyZXR1cm4gVE9NT1lPX0NPTkZJR19ESVNBQkxFRDsKKwltb2RlID0gdG9tb3lvX3Byb2ZpbGUocHJvZmlsZSktPmNvbmZpZ1tpbmRleF07CisJaWYgKG1vZGUgPT0gVE9NT1lPX0NPTkZJR19VU0VfREVGQVVMVCkKKwkJbW9kZSA9IHRvbW95b19wcm9maWxlKHByb2ZpbGUpLT5jb25maWdbY2F0ZWdvcnldOworCWlmIChtb2RlID09IFRPTU9ZT19DT05GSUdfVVNFX0RFRkFVTFQpCisJCW1vZGUgPSB0b21veW9fcHJvZmlsZShwcm9maWxlKS0+ZGVmYXVsdF9jb25maWc7CisJcmV0dXJuIG1vZGUgJiAzOworfQorCisvKioKKyAqIHRvbW95b19pbml0X3JlcXVlc3RfaW5mbyAtIEluaXRpYWxpemUgInN0cnVjdCB0b21veW9fcmVxdWVzdF9pbmZvIiBtZW1iZXJzLgorICoKKyAqIEByOiAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fcmVxdWVzdF9pbmZvIiB0byBpbml0aWFsaXplLgorICogQGRvbWFpbjogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuIE5VTEwgZm9yIHRvbW95b19kb21haW4oKS4KKyAqIEBpbmRleDogIEluZGV4IG51bWJlciBvZiBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFJldHVybnMgbW9kZS4KKyAqLworaW50IHRvbW95b19pbml0X3JlcXVlc3RfaW5mbyhzdHJ1Y3QgdG9tb3lvX3JlcXVlc3RfaW5mbyAqciwKKwkJCSAgICAgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLCBjb25zdCB1OCBpbmRleCkKK3sKKwl1OCBwcm9maWxlOworCW1lbXNldChyLCAwLCBzaXplb2YoKnIpKTsKKwlpZiAoIWRvbWFpbikKKwkJZG9tYWluID0gdG9tb3lvX2RvbWFpbigpOworCXItPmRvbWFpbiA9IGRvbWFpbjsKKwlwcm9maWxlID0gZG9tYWluLT5wcm9maWxlOworCXItPnByb2ZpbGUgPSBwcm9maWxlOworCXItPnR5cGUgPSBpbmRleDsKKwlyLT5tb2RlID0gdG9tb3lvX2dldF9tb2RlKHByb2ZpbGUsIGluZGV4KTsKKwlyZXR1cm4gci0+bW9kZTsKK30KKworLyoqCisgKiB0b21veW9fbGFzdF93b3JkIC0gR2V0IGxhc3QgY29tcG9uZW50IG9mIGEgbGluZS4KKyAqCisgKiBAbGluZTogQSBsaW5lLgorICoKKyAqIFJldHVybnMgdGhlIGxhc3Qgd29yZCBvZiBhIGxpbmUuCisgKi8KK2NvbnN0IGNoYXIgKnRvbW95b19sYXN0X3dvcmQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwljb25zdCBjaGFyICpjcCA9IHN0cnJjaHIobmFtZSwgJyAnKTsKKwlpZiAoY3ApCisJCXJldHVybiBjcCArIDE7CisJcmV0dXJuIG5hbWU7Cit9CisKKy8qKgorICogdG9tb3lvX3dhcm5fbG9nIC0gUHJpbnQgd2FybmluZyBvciBlcnJvciBtZXNzYWdlIG9uIGNvbnNvbGUuCisgKgorICogQHI6ICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19yZXF1ZXN0X2luZm8iLgorICogQGZtdDogVGhlIHByaW50ZigpJ3MgZm9ybWF0IHN0cmluZywgZm9sbG93ZWQgYnkgcGFyYW1ldGVycy4KKyAqLwordm9pZCB0b21veW9fd2Fybl9sb2coc3RydWN0IHRvbW95b19yZXF1ZXN0X2luZm8gKnIsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwljaGFyICpidWZmZXI7CisJY29uc3Qgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqIGNvbnN0IGRvbWFpbiA9IHItPmRvbWFpbjsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3Byb2ZpbGUgKnByb2ZpbGUgPSB0b21veW9fcHJvZmlsZShkb21haW4tPnByb2ZpbGUpOworCXN3aXRjaCAoci0+bW9kZSkgeworCWNhc2UgVE9NT1lPX0NPTkZJR19FTkZPUkNJTkc6CisJCWlmICghcHJvZmlsZS0+ZW5mb3JjaW5nLT5lbmZvcmNpbmdfdmVyYm9zZSkKKwkJCXJldHVybjsKKwkJYnJlYWs7CisJY2FzZSBUT01PWU9fQ09ORklHX1BFUk1JU1NJVkU6CisJCWlmICghcHJvZmlsZS0+cGVybWlzc2l2ZS0+cGVybWlzc2l2ZV92ZXJib3NlKQorCQkJcmV0dXJuOworCQlicmVhazsKKwljYXNlIFRPTU9ZT19DT05GSUdfTEVBUk5JTkc6CisJCWlmICghcHJvZmlsZS0+bGVhcm5pbmctPmxlYXJuaW5nX3ZlcmJvc2UpCisJCQlyZXR1cm47CisJCWJyZWFrOworCX0KKwlidWZmZXIgPSBrbWFsbG9jKDQwOTYsIEdGUF9OT0ZTKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJdnNucHJpbnRmKGJ1ZmZlciwgNDA5NSwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJYnVmZmVyWzQwOTVdID0gJ1wwJzsKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQWNjZXNzICVzIGRlbmllZCBmb3IgJXNcbiIsCisJICAgICAgIHItPm1vZGUgPT0gVE9NT1lPX0NPTkZJR19FTkZPUkNJTkcgPyAiRVJST1IiIDogIldBUk5JTkciLCBidWZmZXIsCisJICAgICAgIHRvbW95b19sYXN0X3dvcmQoZG9tYWluLT5kb21haW5uYW1lLT5uYW1lKSk7CisJa2ZyZWUoYnVmZmVyKTsKK30KKworLyoqCisgKiB0b21veW9fZG9tYWluX3F1b3RhX2lzX29rIC0gQ2hlY2sgZm9yIGRvbWFpbidzIHF1b3RhLgorICoKKyAqIEByOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX3JlcXVlc3RfaW5mbyIuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBkb21haW4gaXMgbm90IGV4Y2VlZGVkIHF1b3RhLCBmYWxzZSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KKyAqLworYm9vbCB0b21veW9fZG9tYWluX3F1b3RhX2lzX29rKHN0cnVjdCB0b21veW9fcmVxdWVzdF9pbmZvICpyKQoreworCXVuc2lnbmVkIGludCBjb3VudCA9IDA7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluID0gci0+ZG9tYWluOworCXN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cjsKKworCWlmIChyLT5tb2RlICE9IFRPTU9ZT19DT05GSUdfTEVBUk5JTkcpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoIWRvbWFpbikKKwkJcmV0dXJuIHRydWU7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmZG9tYWluLT5hY2xfaW5mb19saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJc3dpdGNoIChwdHItPnR5cGUpIHsKKwkJCXUxNiBwZXJtOworCQkJdTggaTsKKwkJY2FzZSBUT01PWU9fVFlQRV9QQVRIX0FDTDoKKwkJCXBlcm0gPSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX3BhdGhfYWNsLCBoZWFkKQorCQkJCS0+cGVybTsKKwkJCWZvciAoaSA9IDA7IGkgPCBUT01PWU9fTUFYX1BBVEhfT1BFUkFUSU9OOyBpKyspCisJCQkJaWYgKHBlcm0gJiAoMSA8PCBpKSkKKwkJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURSkpCisJCQkJY291bnQgLT0gMjsKKwkJCWJyZWFrOworCQljYXNlIFRPTU9ZT19UWVBFX1BBVEgyX0FDTDoKKwkJCXBlcm0gPSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX3BhdGgyX2FjbCwgaGVhZCkKKwkJCQktPnBlcm07CisJCQlmb3IgKGkgPSAwOyBpIDwgVE9NT1lPX01BWF9QQVRIMl9PUEVSQVRJT047IGkrKykKKwkJCQlpZiAocGVybSAmICgxIDw8IGkpKQorCQkJCQljb3VudCsrOworCQkJYnJlYWs7CisJCWNhc2UgVE9NT1lPX1RZUEVfUEFUSF9OVU1CRVJfQUNMOgorCQkJcGVybSA9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fcGF0aF9udW1iZXJfYWNsLAorCQkJCQkgICAgaGVhZCktPnBlcm07CisJCQlmb3IgKGkgPSAwOyBpIDwgVE9NT1lPX01BWF9QQVRIX05VTUJFUl9PUEVSQVRJT047IGkrKykKKwkJCQlpZiAocGVybSAmICgxIDw8IGkpKQorCQkJCQljb3VudCsrOworCQkJYnJlYWs7CisJCWNhc2UgVE9NT1lPX1RZUEVfTUtERVZfQUNMOgorCQkJcGVybSA9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fbWtkZXZfYWNsLAorCQkJCQkgICAgaGVhZCktPnBlcm07CisJCQlmb3IgKGkgPSAwOyBpIDwgVE9NT1lPX01BWF9NS0RFVl9PUEVSQVRJT047IGkrKykKKwkJCQlpZiAocGVybSAmICgxIDw8IGkpKQorCQkJCQljb3VudCsrOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljb3VudCsrOworCQl9CisJfQorCWlmIChjb3VudCA8IHRvbW95b19wcm9maWxlKGRvbWFpbi0+cHJvZmlsZSktPmxlYXJuaW5nLT4KKwkgICAgbGVhcm5pbmdfbWF4X2VudHJ5KQorCQlyZXR1cm4gdHJ1ZTsKKwlpZiAoIWRvbWFpbi0+cXVvdGFfd2FybmVkKSB7CisJCWRvbWFpbi0+cXVvdGFfd2FybmVkID0gdHJ1ZTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVE9NT1lPLVdBUk5JTkc6ICIKKwkJICAgICAgICJEb21haW4gJyVzJyBoYXMgc28gbWFueSBBQ0xzIHRvIGhvbGQuICIKKwkJICAgICAgICJTdG9wcGVkIGxlYXJuaW5nIG1vZGUuXG4iLCBkb21haW4tPmRvbWFpbm5hbWUtPm5hbWUpOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYyBiL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCmluZGV4IDMwM2FjMDQuLmEzYjJhNjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCkBAIC00NTEsMTMgKzQ1MSwxMSBAQAogCXNuZF9wY21fdGltZXJfcmVzb2x1dGlvbl9jaGFuZ2Uoc3Vic3RyZWFtKTsKIAlydW50aW1lLT5zdGF0dXMtPnN0YXRlID0gU05EUlZfUENNX1NUQVRFX1NFVFVQOwogCi0JaWYgKHN1YnN0cmVhbS0+bGF0ZW5jeV9wbV9xb3NfcmVxKSB7Ci0JCXBtX3Fvc19yZW1vdmVfcmVxdWVzdChzdWJzdHJlYW0tPmxhdGVuY3lfcG1fcW9zX3JlcSk7Ci0JCXN1YnN0cmVhbS0+bGF0ZW5jeV9wbV9xb3NfcmVxID0gTlVMTDsKLQl9CisJaWYgKHBtX3Fvc19yZXF1ZXN0X2FjdGl2ZSgmc3Vic3RyZWFtLT5sYXRlbmN5X3BtX3Fvc19yZXEpKQorCQlwbV9xb3NfcmVtb3ZlX3JlcXVlc3QoJnN1YnN0cmVhbS0+bGF0ZW5jeV9wbV9xb3NfcmVxKTsKIAlpZiAoKHVzZWNzID0gcGVyaW9kX3RvX3VzZWNzKHJ1bnRpbWUpKSA+PSAwKQotCQlzdWJzdHJlYW0tPmxhdGVuY3lfcG1fcW9zX3JlcSA9IHBtX3Fvc19hZGRfcmVxdWVzdCgKLQkJCQkJUE1fUU9TX0NQVV9ETUFfTEFURU5DWSwgdXNlY3MpOworCQlwbV9xb3NfYWRkX3JlcXVlc3QoJnN1YnN0cmVhbS0+bGF0ZW5jeV9wbV9xb3NfcmVxLAorCQkJCSAgIFBNX1FPU19DUFVfRE1BX0xBVEVOQ1ksIHVzZWNzKTsKIAlyZXR1cm4gMDsKICBfZXJyb3I6CiAJLyogaGFyZHdhcmUgbWlnaHQgYmUgdW51c2VhYmxlIGZyb20gdGhpcyB0aW1lLApAQCAtNTEyLDggKzUxMCw3IEBACiAJaWYgKHN1YnN0cmVhbS0+b3BzLT5od19mcmVlKQogCQlyZXN1bHQgPSBzdWJzdHJlYW0tPm9wcy0+aHdfZnJlZShzdWJzdHJlYW0pOwogCXJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPSBTTkRSVl9QQ01fU1RBVEVfT1BFTjsKLQlwbV9xb3NfcmVtb3ZlX3JlcXVlc3Qoc3Vic3RyZWFtLT5sYXRlbmN5X3BtX3Fvc19yZXEpOwotCXN1YnN0cmVhbS0+bGF0ZW5jeV9wbV9xb3NfcmVxID0gTlVMTDsKKwlwbV9xb3NfcmVtb3ZlX3JlcXVlc3QoJnN1YnN0cmVhbS0+bGF0ZW5jeV9wbV9xb3NfcmVxKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL0tjb25maWcgYi9zb3VuZC9kcml2ZXJzL0tjb25maWcKaW5kZXggODQ3MTRhNi4uYzI5MGNlZSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9LY29uZmlnCisrKyBiL3NvdW5kL2RyaXZlcnMvS2NvbmZpZwpAQCAtMTU1LDcgKzE1NSw3IEBACiAJc2VsZWN0IFNORF9BQzk3X0NPREVDCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZQotCSAgb3BiX2FjOTdfY29udHJvbGxlcl9yZWZfdjFfMDBfYSBpcCBjb3JlIGZvdW5kIGluIFhpbGlueCcgTUw0MDMKKwkgIG9wYl9hYzk3X2NvbnRyb2xsZXJfcmVmX3YxXzAwX2EgaXAgY29yZSBmb3VuZCBpbiBYaWxpbngncyBNTDQwMwogCSAgcmVmZXJlbmNlIGRlc2lnbi4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKaW5kZXggYTNkNjM4Yy4uYmEyMDk4ZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCkBAIC03ODQsNiArNzg0LDkgQEAKIAkJcGluLT5uaWQgPSBuaWQ7CiAJCXBpbi0+Y2ZnID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCiAJCQkJCSAgICAgIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwkJcGluLT5jdHJsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCisJCQkJCSAgICAgICBBQ19WRVJCX0dFVF9QSU5fV0lER0VUX0NPTlRST0wsCisJCQkJCSAgICAgICAwKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC05MTIsMTUgKzkxNSwzOCBAQAogdm9pZCBzbmRfaGRhX3NodXR1cF9waW5zKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCWludCBpOworCS8qIGRvbid0IHNodXQgdXAgcGlucyB3aGVuIHVubG9hZGluZyB0aGUgZHJpdmVyOyBvdGhlcndpc2UgaXQgYnJlYWtzCisJICogdGhlIGRlZmF1bHQgcGluIHNldHVwIGF0IHRoZSBuZXh0IGxvYWQgb2YgdGhlIGRyaXZlcgorCSAqLworCWlmIChjb2RlYy0+YnVzLT5zaHV0ZG93bikKKwkJcmV0dXJuOwogCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+aW5pdF9waW5zLnVzZWQ7IGkrKykgewogCQlzdHJ1Y3QgaGRhX3BpbmNmZyAqcGluID0gc25kX2FycmF5X2VsZW0oJmNvZGVjLT5pbml0X3BpbnMsIGkpOwogCQkvKiB1c2UgcmVhZCBoZXJlIGZvciBzeW5jaW5nIGFmdGVyIGlzc3VpbmcgZWFjaCB2ZXJiICovCiAJCXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgcGluLT5uaWQsIDAsCiAJCQkJICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwKTsKIAl9CisJY29kZWMtPnBpbnNfc2h1dHVwID0gMTsKIH0KIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfc2h1dHVwX3BpbnMpOwogCisvKiBSZXN0b3JlIHRoZSBwaW4gY29udHJvbHMgY2xlYXJlZCBwcmV2aW91c2x5IHZpYSBzbmRfaGRhX3NodXR1cF9waW5zKCkgKi8KK3N0YXRpYyB2b2lkIHJlc3RvcmVfc2h1dHVwX3BpbnMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJaW50IGk7CisJaWYgKCFjb2RlYy0+cGluc19zaHV0dXApCisJCXJldHVybjsKKwlpZiAoY29kZWMtPmJ1cy0+c2h1dGRvd24pCisJCXJldHVybjsKKwlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPmluaXRfcGlucy51c2VkOyBpKyspIHsKKwkJc3RydWN0IGhkYV9waW5jZmcgKnBpbiA9IHNuZF9hcnJheV9lbGVtKCZjb2RlYy0+aW5pdF9waW5zLCBpKTsKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluLT5uaWQsIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKKwkJCQkgICAgcGluLT5jdHJsKTsKKwl9CisJY29kZWMtPnBpbnNfc2h1dHVwID0gMDsKK30KKwogc3RhdGljIHZvaWQgaW5pdF9oZGFfY2FjaGUoc3RydWN0IGhkYV9jYWNoZV9yZWMgKmNhY2hlLAogCQkJICAgdW5zaWduZWQgaW50IHJlY29yZF9zaXplKTsKIHN0YXRpYyB2b2lkIGZyZWVfaGRhX2NhY2hlKHN0cnVjdCBoZGFfY2FjaGVfcmVjICpjYWNoZSk7CkBAIC0yOTA3LDYgKzI5MzMsNyBAQAogCQkJICAgIGNvZGVjLT5hZmcgPyBjb2RlYy0+YWZnIDogY29kZWMtPm1mZywKIAkJCSAgICBBQ19QV1JTVF9EMCk7CiAJcmVzdG9yZV9waW5jZmdzKGNvZGVjKTsgLyogcmVzdG9yZSBhbGwgY3VycmVudCBwaW4gY29uZmlncyAqLworCXJlc3RvcmVfc2h1dHVwX3BpbnMoY29kZWMpOwogCWhkYV9leGVjX2luaXRfdmVyYnMoY29kZWMpOwogCWlmIChjb2RlYy0+cGF0Y2hfb3BzLnJlc3VtZSkKIAkJY29kZWMtPnBhdGNoX29wcy5yZXN1bWUoY29kZWMpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaCBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmgKaW5kZXggNDllOTM5ZS4uNTk5MWQxNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaAorKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5oCkBAIC04MjEsNiArODIxLDcgQEAKIAl1bnNpZ25lZCBpbnQgcGluX2FtcF93b3JrYXJvdW5kOjE7IC8qIHBpbiBvdXQtYW1wIHRha2VzIGluZGV4CiAJCQkJCSAgICAqIChlLmcuIENvbmV4YW50IGNvZGVjcykKIAkJCQkJICAgICovCisJdW5zaWduZWQgaW50IHBpbnNfc2h1dHVwOjE7CS8qIHBpbnMgYXJlIHNodXQgdXAgKi8KIAl1bnNpZ25lZCBpbnQgbm9fdHJpZ2dlcl9zZW5zZToxOyAvKiBkb24ndCB0cmlnZ2VyIGF0IHBpbi1zZW5zaW5nICovCiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQogCXVuc2lnbmVkIGludCBwb3dlcl9vbiA6MTsJLyogY3VycmVudCAoZ2xvYmFsKSBwb3dlci1zdGF0ZSAqLwpAQCAtODk3LDcgKzg5OCw5IEBACiAvKiB0aGUgc3RydWN0IGZvciBjb2RlYy0+cGluX2NvbmZpZ3MgKi8KIHN0cnVjdCBoZGFfcGluY2ZnIHsKIAloZGFfbmlkX3QgbmlkOwotCXVuc2lnbmVkIGludCBjZmc7CisJdW5zaWduZWQgY2hhciBjdHJsOwkvKiBjdXJyZW50IHBpbiBjb250cm9sIHZhbHVlICovCisJdW5zaWduZWQgY2hhciBwYWQ7CS8qIHJlc2VydmVkICovCisJdW5zaWduZWQgaW50IGNmZzsJLyogZGVmYXVsdCBjb25maWd1cmF0aW9uICovCiB9OwogCiB1bnNpZ25lZCBpbnQgc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9oZG1pLmMKaW5kZXggODYwNjdlZTcuLjJmYzUzOTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jCkBAIC01Miw2ICs1MiwxMCBAQAogCSAqLwogCXN0cnVjdCBoZGFfbXVsdGlfb3V0IG11bHRpb3V0OwogCXVuc2lnbmVkIGludCBjb2RlY190eXBlOworCisJLyogbWlzYyBmbGFncyAqLworCS8qIFBEIGJpdCBpbmRpY2F0ZXMgb25seSB0aGUgdXBkYXRlLCBub3QgdGhlIGN1cnJlbnQgc3RhdGUgKi8KKwl1bnNpZ25lZCBpbnQgb2xkX3Bpbl9kZXRlY3Q6MTsKIH07CiAKIApAQCAtNjE2LDYgKzYyMCw5IEBACiAgKiBVbnNvbGljaXRlZCBldmVudHMKICAqLwogCitzdGF0aWMgdm9pZCBoZG1pX3ByZXNlbnRfc2Vuc2Uoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW5fbmlkLAorCQkJICAgICAgIHN0cnVjdCBoZG1pX2VsZCAqZWxkKTsKKwogc3RhdGljIHZvaWQgaGRtaV9pbnRyaW5zaWNfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCiB7CiAJc3RydWN0IGhkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtNjMyLDYgKzYzOSwxMiBAQAogCWlmIChpbmRleCA8IDApCiAJCXJldHVybjsKIAorCWlmIChzcGVjLT5vbGRfcGluX2RldGVjdCkgeworCQlpZiAocGluZCkKKwkJCWhkbWlfcHJlc2VudF9zZW5zZShjb2RlYywgdGFnLCAmc3BlYy0+c2lua19lbGRbaW5kZXhdKTsKKwkJcGluZCA9IHNwZWMtPnNpbmtfZWxkW2luZGV4XS5tb25pdG9yX3ByZXNlbnQ7CisJfQorCiAJc3BlYy0+c2lua19lbGRbaW5kZXhdLm1vbml0b3JfcHJlc2VudCA9IHBpbmQ7CiAJc3BlYy0+c2lua19lbGRbaW5kZXhdLmVsZF92YWxpZCA9IGVsZHY7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfbnZoZG1pLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX252aGRtaS5jCmluZGV4IDNjMTBjMGIuLmIwNjUyYWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfbnZoZG1pLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9udmhkbWkuYwpAQCAtNDc4LDYgKzQ3OCw3IEBACiAKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAJc3BlYy0+Y29kZWNfdHlwZSA9IEhEQV9DT0RFQ19OVklESUFfTUNQODk7CisJc3BlYy0+b2xkX3Bpbl9kZXRlY3QgPSAxOwogCiAJaWYgKGhkbWlfcGFyc2VfY29kZWMoY29kZWMpIDwgMCkgewogCQljb2RlYy0+c3BlYyA9IE5VTEw7CkBAIC01MDgsNiArNTA5LDcgQEAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSA4OwogCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gbnZoZG1pX21hc3Rlcl9jb25fbmlkXzd4OwogCXNwZWMtPmNvZGVjX3R5cGUgPSBIREFfQ09ERUNfTlZJRElBX01DUDdYOworCXNwZWMtPm9sZF9waW5fZGV0ZWN0ID0gMTsKIAogCWNvZGVjLT5wYXRjaF9vcHMgPSBudmhkbWlfcGF0Y2hfb3BzXzhjaF83eDsKIApAQCAtNTI4LDYgKzUzMCw3IEBACiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKIAlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IG52aGRtaV9tYXN0ZXJfY29uX25pZF83eDsKIAlzcGVjLT5jb2RlY190eXBlID0gSERBX0NPREVDX05WSURJQV9NQ1A3WDsKKwlzcGVjLT5vbGRfcGluX2RldGVjdCA9IDE7CiAKIAljb2RlYy0+cGF0Y2hfb3BzID0gbnZoZG1pX3BhdGNoX29wc18yY2g7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKaW5kZXggZjFjZTdkNy4uNTk2ZWEyZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKQEAgLTEyNjcsNiArMTI2Nyw4IEBACiAJdW5zaWduZWQgbmlkID0gMDsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAorCXNwZWMtPmNkZWZpbmUuZW5hYmxlX3BjYmVlcCA9IDE7IC8qIGFzc3VtZSBhbHdheXMgZW5hYmxlZCAqLworCiAJYXNzID0gY29kZWMtPnN1YnN5c3RlbV9pZCAmIDB4ZmZmZjsKIAlpZiAoYXNzICE9IGNvZGVjLT5idXMtPnBjaS0+c3Vic3lzdGVtX2RldmljZSAmJiAoYXNzICYgMSkpCiAJCWdvdG8gZG9fc2t1OwpAQCAtMjU0Nyw3ICsyNTQ5LDcgQEAKIHN0YXRpYyBpbnQgYWxjX2J1aWxkX2NvbnRyb2xzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7CisJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCA9IE5VTEw7CiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CiAJaW50IGksIGosIGVycjsKIAl1bnNpZ25lZCBpbnQgdTsKQEAgLTUxNzgsOCArNTE4MCwyNCBAQAogI2lmZGVmIENPTkZJR19TTkRfSERBX0lOUFVUX0JFRVAKICNkZWZpbmUgc2V0X2JlZXBfYW1wKHNwZWMsIG5pZCwgaWR4LCBkaXIpIFwKIAkoKHNwZWMpLT5iZWVwX2FtcCA9IEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAzLCBpZHgsIGRpcikpCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBiZWVwX3doaXRlX2xpc3RbXSA9IHsKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MjlmLCAiQVNVUyIsIDEpLAorCXt9Cit9OworCitzdGF0aWMgaW5saW5lIGludCBoYXNfY2RlZmluZV9iZWVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrICpxOworCXEgPSBzbmRfcGNpX3F1aXJrX2xvb2t1cChjb2RlYy0+YnVzLT5wY2ksIGJlZXBfd2hpdGVfbGlzdCk7CisJaWYgKHEpCisJCXJldHVybiBxLT52YWx1ZTsKKwlyZXR1cm4gc3BlYy0+Y2RlZmluZS5lbmFibGVfcGNiZWVwOworfQogI2Vsc2UKICNkZWZpbmUgc2V0X2JlZXBfYW1wKHNwZWMsIG5pZCwgaWR4LCBkaXIpIC8qIE5PUCAqLworI2RlZmluZSBoYXNfY2RlZmluZV9iZWVwKGNvZGVjKQkJMAogI2VuZGlmCiAKIC8qCkBAIC05NDg2LDYgKzk1MDQsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDZiLCAweDNlMDAsICJpTWFjIDI0IEFsdW1pbnVtIiwgQUxDODg1X0lNQUMyNCksCiAJU05EX1BDSV9RVUlSSygweDEwNmIsIDB4NDkwMCwgImlNYWMgOSwxIEFsdW1pbnVtIiwgQUxDODg1X0lNQUM5MSksCiAJU05EX1BDSV9RVUlSSygweDEwNmIsIDB4M2YwMCwgIk1hY2Jvb2sgNSwxIiwgQUxDODg1X01CNSksCisJU05EX1BDSV9RVUlSSygweDEwNmIsIDB4NGEwMCwgIk1hY2Jvb2sgNSwyIiwgQUxDODg1X01CNSksCiAJLyogRklYTUU6IEhQIGphY2sgc2Vuc2Ugc2VlbXMgbm90IHdvcmtpbmcgZm9yIE1CUCA1LDEgb3IgNSwyLAogCSAqIHNvIGFwcGFyZW50bHkgbm8gcGVyZmVjdCBzb2x1dGlvbiB5ZXQKIAkgKi8KQEAgLTEwNTYzLDEwICsxMDU4MiwxMiBAQAogCQl9CiAJfQogCi0JZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJYWxjX2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gZXJyOworCWlmIChoYXNfY2RlZmluZV9iZWVwKGNvZGVjKSkgeworCQllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWFsY19mcmVlKGNvZGVjKTsKKwkJCXJldHVybiBlcnI7CisJCX0KIAl9CiAKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzg4Ml9BVVRPKQpAQCAtMTA2MTYsNyArMTA2MzcsNyBAQAogCiAJc2V0X2NhcHR1cmVfbWl4ZXIoY29kZWMpOwogCi0JaWYgKHNwZWMtPmNkZWZpbmUuZW5hYmxlX3BjYmVlcCkKKwlpZiAoaGFzX2NkZWZpbmVfYmVlcChjb2RlYykpCiAJCXNldF9iZWVwX2FtcChzcGVjLCAweDBiLCAweDA1LCBIREFfSU5QVVQpOwogCiAJaWYgKGJvYXJkX2NvbmZpZyA9PSBBTEM4ODJfQVVUTykKQEAgLTEyNDMyLDcgKzEyNDUzLDcgQEAKIAkJfQogCX0KIAotCWlmICghc3BlYy0+bm9fYW5hbG9nKSB7CisJaWYgKCFzcGVjLT5ub19hbmFsb2cgJiYgaGFzX2NkZWZpbmVfYmVlcChjb2RlYykpIHsKIAkJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MSk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlhbGNfZnJlZShjb2RlYyk7CkBAIC0xMjQ4Myw3ICsxMjUwNCw3IEBACiAJfQogCWlmICghc3BlYy0+Y2FwX21peGVyICYmICFzcGVjLT5ub19hbmFsb2cpCiAJCXNldF9jYXB0dXJlX21peGVyKGNvZGVjKTsKLQlpZiAoIXNwZWMtPm5vX2FuYWxvZyAmJiBzcGVjLT5jZGVmaW5lLmVuYWJsZV9wY2JlZXApCisJaWYgKCFzcGVjLT5ub19hbmFsb2cgJiYgaGFzX2NkZWZpbmVfYmVlcChjb2RlYykpCiAJCXNldF9iZWVwX2FtcChzcGVjLCAweDBiLCAweDA1LCBIREFfSU5QVVQpOwogCiAJc3BlYy0+dm1hc3Rlcl9uaWQgPSAweDBjOwpAQCAtMTQ0NTUsMTAgKzE0NDc2LDEyIEBACiAJCX0KIAl9CiAKLQllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxKTsKLQlpZiAoZXJyIDwgMCkgewotCQlhbGNfZnJlZShjb2RlYyk7Ci0JCXJldHVybiBlcnI7CisJaWYgKGhhc19jZGVmaW5lX2JlZXAoY29kZWMpKSB7CisJCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEpOworCQlpZiAoZXJyIDwgMCkgeworCQkJYWxjX2ZyZWUoY29kZWMpOworCQkJcmV0dXJuIGVycjsKKwkJfQogCX0KIAogCWlmIChib2FyZF9jb25maWcgIT0gQUxDMjY5X0FVVE8pCkBAIC0xNDQ5MSw3ICsxNDUxNCw3IEBACiAKIAlpZiAoIXNwZWMtPmNhcF9taXhlcikKIAkJc2V0X2NhcHR1cmVfbWl4ZXIoY29kZWMpOwotCWlmIChzcGVjLT5jZGVmaW5lLmVuYWJsZV9wY2JlZXApCisJaWYgKGhhc19jZGVmaW5lX2JlZXAoY29kZWMpKQogCQlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNCwgSERBX0lOUFVUKTsKIAogCWlmIChib2FyZF9jb25maWcgPT0gQUxDMjY5X0FVVE8pCkBAIC0xODY4OCwxMCArMTg3MTEsMTIgQEAKIAkJfQogCX0KIAotCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEpOwotCWlmIChlcnIgPCAwKSB7Ci0JCWFsY19mcmVlKGNvZGVjKTsKLQkJcmV0dXJuIGVycjsKKwlpZiAoaGFzX2NkZWZpbmVfYmVlcChjb2RlYykpIHsKKwkJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlhbGNfZnJlZShjb2RlYyk7CisJCQlyZXR1cm4gZXJyOworCQl9CiAJfQogCiAJaWYgKGJvYXJkX2NvbmZpZyAhPSBBTEM2NjJfQVVUTykKQEAgLTE4NzEzLDcgKzE4NzM4LDcgQEAKIAlpZiAoIXNwZWMtPmNhcF9taXhlcikKIAkJc2V0X2NhcHR1cmVfbWl4ZXIoY29kZWMpOwogCi0JaWYgKHNwZWMtPmNkZWZpbmUuZW5hYmxlX3BjYmVlcCkgeworCWlmIChoYXNfY2RlZmluZV9iZWVwKGNvZGVjKSkgewogCQlzd2l0Y2ggKGNvZGVjLT52ZW5kb3JfaWQpIHsKIAkJY2FzZSAweDEwZWMwNjYyOgogCQkJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50X21haW4uYyBiL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnRfbWFpbi5jCmluZGV4IDZkOTQzZjYuLjI4NzBhNGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnRfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnRfbWFpbi5jCkBAIC0xMDU1LDcgKzEwNTUsNyBAQAogCiAJc3Bpbl9sb2NrX2lycSgmdHJpZGVudC0+cmVnX2xvY2spOwogCi0JLy8gSW5pdGlsaXplIHRoZSBjaGFubmVsIGFuZCBzZXQgY2hhbm5lbCBNb2RlCisJLy8gSW5pdGlhbGl6ZSB0aGUgY2hhbm5lbCBhbmQgc2V0IGNoYW5uZWwgTW9kZQogCW91dGIoMCwgVFJJRF9SRUcodHJpZGVudCwgTEVHQUNZX0RNQVIxNSkpOwogCiAJLy8gU2V0IERNQSBjaGFubmVsIG9wZXJhdGlvbiBtb2RlIHJlZ2lzdGVyCmRpZmYgLS1naXQgYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5jIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuYwppbmRleCBkZjExMGRmLi43YWI5MTc0IDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5jCisrKyBiL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMKQEAgLTEzOSw4ICsxMzksOCBAQAogCXBkYWNmLT5wX2RldiA9IGxpbms7CiAJbGluay0+cHJpdiA9IHBkYWNmOwogCi0JbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLQlsaW5rLT5pby5OdW1Qb3J0czEgPSAxNjsKKwlsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJbGluay0+cmVzb3VyY2VbMF0tPmVuZCA9IDE2OwogCiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJRIHwgQ09ORl9FTkFCTEVfUFVMU0VfSVJROwogCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJc25kX3ByaW50ZGQoS0VSTl9ERUJVRyAicGRhY2ZfY29uZmlnIGNhbGxlZFxuIik7CiAJbGluay0+Y29uZi5Db25maWdJbmRleCA9IDB4NTsKIAotCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluayk7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsZWQ7CiAKQEAgLTIzMSw3ICsyMzEsOCBAQAogCWlmIChyZXQpCiAJCWdvdG8gZmFpbGVkOwogCi0JaWYgKHNuZF9wZGFjZl9hc3NpZ25fcmVzb3VyY2VzKHBkYWNmLCBsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlycSkgPCAwKQorCWlmIChzbmRfcGRhY2ZfYXNzaWduX3Jlc291cmNlcyhwZGFjZiwgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0LAorCQkJCQlsaW5rLT5pcnEpIDwgMCkKIAkJZ290byBmYWlsZWQ7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmggYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5oCmluZGV4IGEwYTdlYzYuLjVjYzNlNDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmgKKysrIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuaApAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jIGIvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmMKaW5kZXggNjI0YjQ3YS4uYTZlZGZjMyAxMDA2NDQKLS0tIGEvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmMKKysrIGIvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmMKQEAgLTE1OSw4ICsxNTksOCBAQAogCXZ4cC0+cF9kZXYgPSBsaW5rOwogCWxpbmstPnByaXYgPSBjaGlwOwogCi0JbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLQlsaW5rLT5pby5OdW1Qb3J0czEgPSAxNjsKKwlsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJbGluay0+cmVzb3VyY2VbMF0tPmVuZCA9IDE2OwogCiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwpAQCAtMjI2LDcgKzIyNiw3IEBACiAJCXN0cmNweShjaGlwLT5jYXJkLT5kcml2ZXIsIHZ4cDQ0MF9ody5uYW1lKTsKIAl9CiAKLQlyZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmspOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbGVkOwogCkBAIC0yNDEsNyArMjQxLDggQEAKIAljaGlwLT5kZXYgPSAmbGluay0+ZGV2OwogCXNuZF9jYXJkX3NldF9kZXYoY2hpcC0+Y2FyZCwgY2hpcC0+ZGV2KTsKIAotCWlmIChzbmRfdnhwb2NrZXRfYXNzaWduX3Jlc291cmNlcyhjaGlwLCBsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlycSkgPCAwKQorCWlmIChzbmRfdnhwb2NrZXRfYXNzaWduX3Jlc291cmNlcyhjaGlwLCBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQsCisJCQkJCQlsaW5rLT5pcnEpIDwgMCkKIAkJZ290byBmYWlsZWQ7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5oIGIvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmgKaW5kZXggZWE0ZGYxNi4uZDkxMTA2NiAxMDA2NDQKLS0tIGEvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmgKKysrIGIvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmgKQEAgLTIzLDcgKzIzLDYgQEAKIAogI2luY2x1ZGUgPHNvdW5kL3Z4X2NvcmUuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdTF4L3BzYy1pMnMuYyBiL3NvdW5kL3NvYy9hdTF4L3BzYy1pMnMuYwppbmRleCA0OTViZTZlLi4yNDQ1NGM5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXUxeC9wc2MtaTJzLmMKKysrIGIvc291bmQvc29jL2F1MXgvcHNjLWkycy5jCkBAIC0zMDAsNyArMzAwLDcgQEAKIH07CiBFWFBPUlRfU1lNQk9MKGF1MXhwc2NfaTJzX2RhaSk7CiAKLXN0YXRpYyBpbnQgX19pbml0IGF1MXhwc2NfaTJzX2RydnByb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhdTF4cHNjX2kyc19kcnZwcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCByZXNvdXJjZSAqcjsKIAl1bnNpZ25lZCBsb25nIHNlbDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZyBiL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZwppbmRleCAzMWFjNTUzLi41ZGEzMGViIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcKKysrIGIvc291bmQvc29jL2NvZGVjcy9LY29uZmlnCkBAIC04Myw4ICs4Myw4IEBACiAKIGNvbmZpZyBTTkRfU09DX1dNX0hVQlMKIAl0cmlzdGF0ZQotCWRlZmF1bHQgeSBpZiBTTkRfU09DX1dNODk5Mz15Ci0JZGVmYXVsdCBtIGlmIFNORF9TT0NfV004OTkzPW0KKwlkZWZhdWx0IHkgaWYgU05EX1NPQ19XTTg5OTM9eSB8fCBTTkRfU09DX1dNODk5ND15CisJZGVmYXVsdCBtIGlmIFNORF9TT0NfV004OTkzPW0gfHwgU05EX1NPQ19XTTg5OTQ9bQogCiBjb25maWcgU05EX1NPQ19BQzk3X0NPREVDCiAJdHJpc3RhdGUKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzI3LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODcyNy5jCmluZGV4IDEwNzI2MjEuLjlkMWRmMjYyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODcyNy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzI3LmMKQEAgLTEyNyw2ICsxMjcsOCBAQAogCQlnb3RvIGVycl9jb2RlYzsKIAl9CiAKKwlyZXR1cm4gMDsKKwogZXJyX2NvZGVjOgogCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CiBlcnI6CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODc3Ni5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3NzYuYwppbmRleCA3ZTRhNjI3Li40ZTIxMmVkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODc3Ni5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204Nzc2LmMKQEAgLTk0LDcgKzk0LDYgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODc3Nl9kYXBtX3dpZGdldHNbXSA9IHsKIFNORF9TT0NfREFQTV9JTlBVVCgiQVVYIiksCi1TTkRfU09DX0RBUE1fSU5QVVQoIkFVWCIpLAogCiBTTkRfU09DX0RBUE1fSU5QVVQoIkFJTjEiKSwKIFNORF9TT0NfREFQTV9JTlBVVCgiQUlOMiIpLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5ODguYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTg4LmMKaW5kZXggMDQxN2RhZS4uMTlhZDU5MCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5ODguYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk4OC5jCkBAIC04ODUsNyArODg1LDYgQEAKIAlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmd204OTg4X2RhaSk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBEQUk6ICVkXG4iLCByZXQpOwotCQlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoY29kZWMpOwogCQlnb3RvIGVycl9jb2RlYzsKIAl9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvbXBjODYxMF9ocGNkLmMgYi9zb3VuZC9zb2MvZnNsL21wYzg2MTBfaHBjZC5jCmluZGV4IDZhMjc2NGUuLjNhNTAxMDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvbXBjODYxMF9ocGNkLmMKKysrIGIvc291bmQvc29jL2ZzbC9tcGM4NjEwX2hwY2QuYwpAQCAtNDYsNyArNDYsNyBAQAogfTsKIAogLyoqCi0gKiBtcGM4NjEwX2hwY2RfbWFjaGluZV9wcm9iZTogaW5pdGFsaXplIHRoZSBib2FyZAorICogbXBjODYxMF9ocGNkX21hY2hpbmVfcHJvYmU6IGluaXRpYWxpemUgdGhlIGJvYXJkCiAgKgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBwbGF0Zm9ybV9kZXZpY2VfYWRkKCkgaXMgY2FsbGVkLiAgSXQgaXMgdXNlZAogICogdG8gaW5pdGlhbGl6ZSB0aGUgYm9hcmQtc3BlY2lmaWMgaGFyZHdhcmUuCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L2lteC1zc2kuYyBiL3NvdW5kL3NvYy9pbXgvaW14LXNzaS5jCmluZGV4IDgwYjRmZWUuLjRmZDEzZDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbXgvaW14LXNzaS5jCisrKyBiL3NvdW5kL3NvYy9pbXgvaW14LXNzaS5jCkBAIC0yMyw3ICsyMyw3IEBACiAgKiBiZXR3ZWVuIHBjbSBkYXRhIGFuZCBHUElPIHN0YXR1cyBkYXRhIGNoYW5nZXMuIE91ciBGSVEgaGFuZGxlciBpcyBub3QKICAqIGFibGUgdG8gaGFuZGxlIHRoaXMsIGhlbmNlIHRoaXMgZHJpdmVyIG9ubHkgd29ya3Mgd2l0aCA0ODAwMEh6IHNhbXBsaW5nCiAgKiByYXRlLgotICogUmVhZGluZyBhbmQgd3JpdGluZyBBQzk3IHJlZ2lzdGVycyBpcyBhbm90aGVyIGNoYWxsYW5nZS4gVGhlIGNvcmUKKyAqIFJlYWRpbmcgYW5kIHdyaXRpbmcgQUM5NyByZWdpc3RlcnMgaXMgYW5vdGhlciBjaGFsbGVuZ2UuIFRoZSBjb3JlCiAgKiBwcm92aWRlcyB1cyBzdGF0dXMgYml0cyB3aGVuIHRoZSByZWFkIHJlZ2lzdGVyIGlzIHVwZGF0ZWQgd2l0aCAqYW5vdGhlcioKICAqIHZhbHVlLiBXaGVuIHdlIHJlYWQgdGhlIHNhbWUgcmVnaXN0ZXIgdHdvIHRpbWVzIChhbmQgdGhlIHJlZ2lzdGVyIHN0aWxsCiAgKiBjb250YWlucyB0aGUgc2FtZSB2YWx1ZSkgdGhlc2Ugc3RhdHVzIGJpdHMgYXJlIG5vdCBzZXQuIFdlIHdvcmsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9mc2kuYyBiL3NvdW5kL3NvYy9zaC9mc2kuYwppbmRleCAzMzk2YTBkLi5lYzRhY2FjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2gvZnNpLmMKKysrIGIvc291bmQvc29jL3NoL2ZzaS5jCkBAIC02ODMsMjAgKzY4MywxNSBAQAogCiAJLyogY2xvY2sgaW52ZXJzaW9uIChDS0cyKSAqLwogCWRhdGEgPSAwOwotCXN3aXRjaCAoU0hfRlNJX0lOVkVSU0lPTl9NQVNLICYgZmxhZ3MpIHsKLQljYXNlIFNIX0ZTSV9MUk1fSU5WOgotCQlkYXRhID0gMSA8PCAxMjsKLQkJYnJlYWs7Ci0JY2FzZSBTSF9GU0lfQlJNX0lOVjoKLQkJZGF0YSA9IDEgPDwgODsKLQkJYnJlYWs7Ci0JY2FzZSBTSF9GU0lfTFJTX0lOVjoKLQkJZGF0YSA9IDEgPDwgNDsKLQkJYnJlYWs7Ci0JY2FzZSBTSF9GU0lfQlJTX0lOVjoKLQkJZGF0YSA9IDEgPDwgMDsKLQkJYnJlYWs7Ci0JfQorCWlmIChTSF9GU0lfTFJNX0lOViAmIGZsYWdzKQorCQlkYXRhIHw9IDEgPDwgMTI7CisJaWYgKFNIX0ZTSV9CUk1fSU5WICYgZmxhZ3MpCisJCWRhdGEgfD0gMSA8PCA4OworCWlmIChTSF9GU0lfTFJTX0lOViAmIGZsYWdzKQorCQlkYXRhIHw9IDEgPDwgNDsKKwlpZiAoU0hfRlNJX0JSU19JTlYgJiBmbGFncykKKwkJZGF0YSB8PSAxIDw8IDA7CisKIAlmc2lfcmVnX3dyaXRlKGZzaSwgQ0tHMiwgZGF0YSk7CiAKIAkvKiBkbyBmbXQsIGRpIGZtdCAqLwpAQCAtNzI2LDE1ICs3MjEsMTUgQEAKIAkJYnJlYWs7CiAJY2FzZSBTSF9GU0lfRk1UX1RETToKIAkJbXNnID0gIlRETSI7Ci0JCWRhdGEgPSBDUl9GTVQoQ1JfVERNKSB8IChmc2ktPmNoYW4gLSAxKTsKIAkJZnNpLT5jaGFuID0gaXNfcGxheSA/CiAJCQlTSF9GU0lfR0VUX0NIX08oZmxhZ3MpIDogU0hfRlNJX0dFVF9DSF9JKGZsYWdzKTsKKwkJZGF0YSA9IENSX0ZNVChDUl9URE0pIHwgKGZzaS0+Y2hhbiAtIDEpOwogCQlicmVhazsKIAljYXNlIFNIX0ZTSV9GTVRfVERNX0RFTEFZOgogCQltc2cgPSAiVERNIERlbGF5IjsKLQkJZGF0YSA9IENSX0ZNVChDUl9URE1fRCkgfCAoZnNpLT5jaGFuIC0gMSk7CiAJCWZzaS0+Y2hhbiA9IGlzX3BsYXkgPwogCQkJU0hfRlNJX0dFVF9DSF9PKGZsYWdzKSA6IFNIX0ZTSV9HRVRfQ0hfSShmbGFncyk7CisJCWRhdGEgPSBDUl9GTVQoQ1JfVERNX0QpIHwgKGZzaS0+Y2hhbiAtIDEpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKGRhaS0+ZGV2LCAidW5rbm93biBmb3JtYXQuXG4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtY29yZS5jIGIvc291bmQvc29jL3NvYy1jb3JlLmMKaW5kZXggOTk4NTY5ZC4uZTA0OGUwOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1jb3JlLmMKKysrIGIvc291bmQvc29jL3NvYy1jb3JlLmMKQEAgLTEzMDcsNyArMTMwNyw3IEBACiB9CiAKIC8qCi0gKiBBdHRlbXB0IHRvIGluaXRpYWxpc2UgYW55IHVuaW5pdGFsaXNlZCBjYXJkcy4gIE11c3QgYmUgY2FsbGVkIHdpdGgKKyAqIEF0dGVtcHQgdG8gaW5pdGlhbGlzZSBhbnkgdW5pbml0aWFsaXNlZCBjYXJkcy4gIE11c3QgYmUgY2FsbGVkIHdpdGgKICAqIGNsaWVudF9tdXRleC4KICAqLwogc3RhdGljIHZvaWQgc25kX3NvY19pbnN0YW50aWF0ZV9jYXJkcyh2b2lkKQpkaWZmIC0tZ2l0IGEvc291bmQvc3BhcmMvYW1kNzkzMC5jIGIvc291bmQvc3BhcmMvYW1kNzkzMC5jCmluZGV4IDcxMjIxZmQuLjllYjFhNGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NwYXJjL2FtZDc5MzAuYworKysgYi9zb3VuZC9zcGFyYy9hbWQ3OTMwLmMKQEAgLTEwMTAsNyArMTAxMCw3IEBACiAJc3RydWN0IHNuZF9hbWQ3OTMwICphbWQ7CiAJaW50IGVyciwgaXJxOwogCi0JaXJxID0gb3AtPmlycXNbMF07CisJaXJxID0gb3AtPmFyY2hkYXRhLmlycXNbMF07CiAKIAlpZiAoZGV2X251bSA+PSBTTkRSVl9DQVJEUykKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xMDc1LDcgKzEwNzUsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhbWQ3OTMwX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gb2ZfcmVnaXN0ZXJfZHJpdmVyKCZhbWQ3OTMwX3NidXNfZHJpdmVyLCAmb2ZfYnVzX3R5cGUpOworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmFtZDc5MzBfc2J1c19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYW1kNzkzMF9leGl0KHZvaWQpCkBAIC0xMDkyLDcgKzEwOTIsNyBAQAogCiAJYW1kNzkzMF9saXN0ID0gTlVMTDsKIAotCW9mX3VucmVnaXN0ZXJfZHJpdmVyKCZhbWQ3OTMwX3NidXNfZHJpdmVyKTsKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmYW1kNzkzMF9zYnVzX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGFtZDc5MzBfaW5pdCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zcGFyYy9jczQyMzEuYyBiL3NvdW5kL3NwYXJjL2NzNDIzMS5jCmluZGV4IGZiNGM2ZjIuLjY4NTcwZWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NwYXJjL2NzNDIzMS5jCisrKyBiL3NvdW5kL3NwYXJjL2NzNDIzMS5jCkBAIC0xODMyLDE0ICsxODMyLDE0IEBACiAJY2hpcC0+Y19kbWEucmVxdWVzdCA9IHNidXNfZG1hX3JlcXVlc3Q7CiAJY2hpcC0+Y19kbWEuYWRkcmVzcyA9IHNidXNfZG1hX2FkZHI7CiAKLQlpZiAocmVxdWVzdF9pcnEob3AtPmlycXNbMF0sIHNuZF9jczQyMzFfc2J1c19pbnRlcnJ1cHQsCisJaWYgKHJlcXVlc3RfaXJxKG9wLT5hcmNoZGF0YS5pcnFzWzBdLCBzbmRfY3M0MjMxX3NidXNfaW50ZXJydXB0LAogCQkJSVJRRl9TSEFSRUQsICJjczQyMzEiLCBjaGlwKSkgewogCQlzbmRfcHJpbnRkZCgiY3M0MjMxLSVkOiBVbmFibGUgdG8gZ3JhYiBTQlVTIElSUSAlZFxuIiwKLQkJCSAgICBkZXYsIG9wLT5pcnFzWzBdKTsKKwkJCSAgICBkZXYsIG9wLT5hcmNoZGF0YS5pcnFzWzBdKTsKIAkJc25kX2NzNDIzMV9zYnVzX2ZyZWUoY2hpcCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQotCWNoaXAtPmlycVswXSA9IG9wLT5pcnFzWzBdOworCWNoaXAtPmlycVswXSA9IG9wLT5hcmNoZGF0YS5pcnFzWzBdOwogCiAJaWYgKHNuZF9jczQyMzFfcHJvYmUoY2hpcCkgPCAwKSB7CiAJCXNuZF9jczQyMzFfc2J1c19mcmVlKGNoaXApOwpAQCAtMTg3MCw3ICsxODcwLDcgQEAKIAkJY2FyZC0+c2hvcnRuYW1lLAogCQlycC0+ZmxhZ3MgJiAweGZmTCwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZylycC0+c3RhcnQsCi0JCW9wLT5pcnFzWzBdKTsKKwkJb3AtPmFyY2hkYXRhLmlycXNbMF0pOwogCiAJZXJyID0gc25kX2NzNDIzMV9zYnVzX2NyZWF0ZShjYXJkLCBvcCwgZGV2KTsKIAlpZiAoZXJyIDwgMCkgewpAQCAtMTk3OSwxMiArMTk3OSwxMiBAQAogCWNoaXAtPmNfZG1hLmVidXNfaW5mby5mbGFncyA9IEVCVVNfRE1BX0ZMQUdfVVNFX0VCRE1BX0hBTkRMRVI7CiAJY2hpcC0+Y19kbWEuZWJ1c19pbmZvLmNhbGxiYWNrID0gc25kX2NzNDIzMV9lYnVzX2NhcHR1cmVfY2FsbGJhY2s7CiAJY2hpcC0+Y19kbWEuZWJ1c19pbmZvLmNsaWVudF9jb29raWUgPSBjaGlwOwotCWNoaXAtPmNfZG1hLmVidXNfaW5mby5pcnEgPSBvcC0+aXJxc1swXTsKKwljaGlwLT5jX2RtYS5lYnVzX2luZm8uaXJxID0gb3AtPmFyY2hkYXRhLmlycXNbMF07CiAJc3RyY3B5KGNoaXAtPnBfZG1hLmVidXNfaW5mby5uYW1lLCAiY3M0MjMxKHBsYXkpIik7CiAJY2hpcC0+cF9kbWEuZWJ1c19pbmZvLmZsYWdzID0gRUJVU19ETUFfRkxBR19VU0VfRUJETUFfSEFORExFUjsKIAljaGlwLT5wX2RtYS5lYnVzX2luZm8uY2FsbGJhY2sgPSBzbmRfY3M0MjMxX2VidXNfcGxheV9jYWxsYmFjazsKIAljaGlwLT5wX2RtYS5lYnVzX2luZm8uY2xpZW50X2Nvb2tpZSA9IGNoaXA7Ci0JY2hpcC0+cF9kbWEuZWJ1c19pbmZvLmlycSA9IG9wLT5pcnFzWzFdOworCWNoaXAtPnBfZG1hLmVidXNfaW5mby5pcnEgPSBvcC0+YXJjaGRhdGEuaXJxc1sxXTsKIAogCWNoaXAtPnBfZG1hLnByZXBhcmUgPSBfZWJ1c19kbWFfcHJlcGFyZTsKIAljaGlwLT5wX2RtYS5lbmFibGUgPSBfZWJ1c19kbWFfZW5hYmxlOwpAQCAtMjA2MCw3ICsyMDYwLDcgQEAKIAlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgYXQgMHglbGx4LCBpcnEgJWQiLAogCQljYXJkLT5zaG9ydG5hbWUsCiAJCW9wLT5yZXNvdXJjZVswXS5zdGFydCwKLQkJb3AtPmlycXNbMF0pOworCQlvcC0+YXJjaGRhdGEuaXJxc1swXSk7CiAKIAllcnIgPSBzbmRfY3M0MjMxX2VidXNfY3JlYXRlKGNhcmQsIG9wLCBkZXYpOwogCWlmIChlcnIgPCAwKSB7CkBAIC0yMTIwLDEyICsyMTIwLDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGNzNDIzMV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIG9mX3JlZ2lzdGVyX2RyaXZlcigmY3M0MjMxX2RyaXZlciwgJm9mX2J1c190eXBlKTsKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZjczQyMzFfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNzNDIzMV9leGl0KHZvaWQpCiB7Ci0Jb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoJmNzNDIzMV9kcml2ZXIpOworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZjczQyMzFfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoY3M0MjMxX2luaXQpOwpkaWZmIC0tZ2l0IGEvc291bmQvc3BhcmMvZGJyaS5jIGIvc291bmQvc3BhcmMvZGJyaS5jCmluZGV4IDE1NTdiZjEuLmM0MjE5MDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NwYXJjL2RicmkuYworKysgYi9zb3VuZC9zcGFyYy9kYnJpLmMKQEAgLTI2MDgsNyArMjYwOCw3IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWlycSA9IG9wLT5pcnFzWzBdOworCWlycSA9IG9wLT5hcmNoZGF0YS5pcnFzWzBdOwogCWlmIChpcnEgPD0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgIkRCUkktJWQ6IE5vIElSUS5cbiIsIGRldik7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtMjY5OSwxMiArMjY5OSwxMiBAQAogLyogUHJvYmUgZm9yIHRoZSBkYnJpIGNoaXAgYW5kIHRoZW4gYXR0YWNoIHRoZSBkcml2ZXIuICovCiBzdGF0aWMgaW50IF9faW5pdCBkYnJpX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gb2ZfcmVnaXN0ZXJfZHJpdmVyKCZkYnJpX3NidXNfZHJpdmVyLCAmb2ZfYnVzX3R5cGUpOworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmRicmlfc2J1c19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZGJyaV9leGl0KHZvaWQpCiB7Ci0Jb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoJmRicmlfc2J1c19kcml2ZXIpOworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZkYnJpX3NidXNfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoZGJyaV9pbml0KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9taXhlci5jIGIvc291bmQvdXNiL21peGVyLmMKaW5kZXggNjkzOWQwZjUuLjczNmQxMzQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9taXhlci5jCisrKyBiL3NvdW5kL3VzYi9taXhlci5jCkBAIC0xMTA3LDYgKzExMDcsMTkgQEAKIAkJfQogCQlicmVhazsKIAorCWNhc2UgVVNCX0lEKDB4MDQ2ZCwgMHgwODA5KToKKwljYXNlIFVTQl9JRCgweDA0NmQsIDB4MDk5MSk6CisJLyogTW9zdCBhdWRpbyB1c2IgZGV2aWNlcyBsaWUgYWJvdXQgdm9sdW1lIHJlc29sdXRpb24uCisJICogTW9zdCBMb2dpdGVjaCB3ZWJjYW1zIGhhdmUgcmVzID0gMzg0LgorCSAqIFByb2JvbHkgdGhlcmUgaXMgc29tZSBsb2dpdGVjaCBtYWdpYyBiZWhpbmQgdGhpcyBudW1iZXIgLS1maXNob3IKKwkgKi8KKwkJaWYgKCFzdHJjbXAoa2N0bC0+aWQubmFtZSwgIk1pYyBDYXB0dXJlIFZvbHVtZSIpKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTworCQkJCSJzZXQgcmVzb2x1dGlvbiBxdWlyazogY3ZhbC0+cmVzID0gMzg0XG4iKTsKKwkJCWN2YWwtPnJlcyA9IDM4NDsKKwkJfQorCQlicmVhazsKKwogCX0KIAogCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiWyVkXSBGVSBbJXNdIGNoID0gJWQsIHZhbCA9ICVkLyVkLyVkXG4iLApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3BjbS5jIGIvc291bmQvdXNiL3BjbS5jCmluZGV4IDQ1NjgyOTguLjM2MzRjZWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9wY20uYworKysgYi9zb3VuZC91c2IvcGNtLmMKQEAgLTYzNiw3ICs2MzYsNyBAQAogCQltaW5fZGF0YWludGVydmFsID0gbWluKG1pbl9kYXRhaW50ZXJ2YWwsIGZwLT5kYXRhaW50ZXJ2YWwpOwogCX0KIAlpZiAobWluX2RhdGFpbnRlcnZhbCA9PSAweGZmKSB7Ci0JCWh3Y19kZWJ1ZygiICAtLT4gZ2V0IGVtdHB5XG4iKTsKKwkJaHdjX2RlYnVnKCIgIC0tPiBnZXQgZW1wdHlcbiIpOwogCQlpdC0+ZW1wdHkgPSAxOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS90b29scy9wZXJmLy5naXRpZ25vcmUgYi90b29scy9wZXJmLy5naXRpZ25vcmUKaW5kZXggZTFkNjBkNy4uY2I0MzI4OSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi8uZ2l0aWdub3JlCisrKyBiL3Rvb2xzL3BlcmYvLmdpdGlnbm9yZQpAQCAtMTgsMyArMTgsNSBAQAogdGFncwogVEFHUwogY3Njb3BlKgorY29uZmlnLm1haworY29uZmlnLm1hay5hdXRvZ2VuCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1idWlsZGlkLWNhY2hlLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWJ1aWxkaWQtY2FjaGUudHh0CmluZGV4IDVkMWE5NTAuLmMxMDU3NzAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWJ1aWxkaWQtY2FjaGUudHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWJ1aWxkaWQtY2FjaGUudHh0CkBAIC0xMiw5ICsxMiw5IEBACiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQotVGhpcyBjb21tYW5kIG1hbmFnZXMgdGhlIGJ1aWxkLWlkIGNhY2hlLiBJdCBjYW4gYWRkIGFuZCByZW1vdmUgZmlsZXMgdG8gdGhlCi1jYWNoZS4gSW4gdGhlIGZ1dHVyZSBpdCBzaG91bGQgYXMgd2VsbCBwdXJnZSBvbGRlciBlbnRyaWVzLCBzZXQgdXBwZXIgbGltaXRzCi1mb3IgdGhlIHNwYWNlIHVzZWQgYnkgdGhlIGNhY2hlLCBldGMuCitUaGlzIGNvbW1hbmQgbWFuYWdlcyB0aGUgYnVpbGQtaWQgY2FjaGUuIEl0IGNhbiBhZGQgYW5kIHJlbW92ZSBmaWxlcyB0by9mcm9tCit0aGUgY2FjaGUuIEluIHRoZSBmdXR1cmUgaXQgc2hvdWxkIGFzIHdlbGwgcHVyZ2Ugb2xkZXIgZW50cmllcywgc2V0IHVwcGVyCitsaW1pdHMgZm9yIHRoZSBzcGFjZSB1c2VkIGJ5IHRoZSBjYWNoZSwgZXRjLgogCiBPUFRJT05TCiAtLS0tLS0tCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgICAgIEFkZCBzcGVjaWZpZWQgZmlsZSB0byB0aGUgY2FjaGUuCiAtcjo6CiAtLXJlbW92ZT06OgotICAgICAgICBSZW1vdmUgc3BlY2lmaWVkIGZpbGUgdG8gdGhlIGNhY2hlLgorICAgICAgICBSZW1vdmUgc3BlY2lmaWVkIGZpbGUgZnJvbSB0aGUgY2FjaGUuCiAtdjo6CiAtLXZlcmJvc2U6OgogCUJlIG1vcmUgdmVyYm9zZS4KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXByb2JlLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXByb2JlLnR4dAppbmRleCA5NGEyNThjLi4yN2Q1MmRhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1wcm9iZS50eHQKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcHJvYmUudHh0CkBAIC0zMSw2ICszMSwxMCBAQAogLS12bWxpbnV4PVBBVEg6OgogCVNwZWNpZnkgdm1saW51eCBwYXRoIHdoaWNoIGhhcyBkZWJ1Z2luZm8gKER3YXJmIGJpbmFyeSkuCiAKKy1zOjoKKy0tc291cmNlPVBBVEg6OgorCVNwZWNpZnkgcGF0aCB0byBrZXJuZWwgc291cmNlLgorCiAtdjo6CiAtLXZlcmJvc2U6OgogICAgICAgICBCZSBtb3JlIHZlcmJvc2UgKHNob3cgcGFyc2VkIGFyZ3VtZW50cywgZXRjKS4KQEAgLTkwLDggKzk0LDggQEAKIAogIFtOQU1FPV1MT0NBTFZBUnwkcmV0dmFsfCVSRUd8QFNZTUJPTFs6VFlQRV0KIAotJ05BTUUnIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGlzIGFyZ3VtZW50IChvcHRpb25hbCkuIFlvdSBjYW4gdXNlIHRoZSBuYW1lIG9mIGxvY2FsIHZhcmlhYmxlLCBsb2NhbCBkYXRhIHN0cnVjdHVyZSBtZW1iZXIgKGUuZy4gdmFyLT5maWVsZCwgdmFyLmZpZWxkMiksIG9yIGtwcm9iZS10cmFjZXIgYXJndW1lbnQgZm9ybWF0IChlLmcuICRyZXR2YWwsICVheCwgZXRjKS4gTm90ZSB0aGF0IHRoZSBuYW1lIG9mIHRoaXMgYXJndW1lbnQgd2lsbCBiZSBzZXQgYXMgdGhlIGxhc3QgbWVtYmVyIG5hbWUgaWYgeW91IHNwZWNpZnkgYSBsb2NhbCBkYXRhIHN0cnVjdHVyZSBtZW1iZXIgKGUuZy4gZmllbGQyIGZvciAndmFyLT5maWVsZDEuZmllbGQyJy4pCi0nVFlQRScgY2FzdHMgdGhlIHR5cGUgb2YgdGhpcyBhcmd1bWVudCAob3B0aW9uYWwpLiBJZiBvbWl0dGVkLCBwZXJmIHByb2JlIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIGJhc2VkIG9uIGRlYnVnaW5mby4KKydOQU1FJyBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhpcyBhcmd1bWVudCAob3B0aW9uYWwpLiBZb3UgY2FuIHVzZSB0aGUgbmFtZSBvZiBsb2NhbCB2YXJpYWJsZSwgbG9jYWwgZGF0YSBzdHJ1Y3R1cmUgbWVtYmVyIChlLmcuIHZhci0+ZmllbGQsIHZhci5maWVsZDIpLCBsb2NhbCBhcnJheSB3aXRoIGZpeGVkIGluZGV4IChlLmcuIGFycmF5WzFdLCB2YXItPmFycmF5WzBdLCB2YXItPnBvaW50ZXJbMl0pLCBvciBrcHJvYmUtdHJhY2VyIGFyZ3VtZW50IGZvcm1hdCAoZS5nLiAkcmV0dmFsLCAlYXgsIGV0YykuIE5vdGUgdGhhdCB0aGUgbmFtZSBvZiB0aGlzIGFyZ3VtZW50IHdpbGwgYmUgc2V0IGFzIHRoZSBsYXN0IG1lbWJlciBuYW1lIGlmIHlvdSBzcGVjaWZ5IGEgbG9jYWwgZGF0YSBzdHJ1Y3R1cmUgbWVtYmVyIChlLmcuIGZpZWxkMiBmb3IgJ3Zhci0+ZmllbGQxLmZpZWxkMicuKQorJ1RZUEUnIGNhc3RzIHRoZSB0eXBlIG9mIHRoaXMgYXJndW1lbnQgKG9wdGlvbmFsKS4gSWYgb21pdHRlZCwgcGVyZiBwcm9iZSBhdXRvbWF0aWNhbGx5IHNldCB0aGUgdHlwZSBiYXNlZCBvbiBkZWJ1Z2luZm8uIFlvdSBjYW4gc3BlY2lmeSAnc3RyaW5nJyB0eXBlIG9ubHkgZm9yIHRoZSBsb2NhbCB2YXJpYWJsZSBvciBzdHJ1Y3R1cmUgbWVtYmVyIHdoaWNoIGlzIGFuIGFycmF5IG9mIG9yIGEgcG9pbnRlciB0byAnY2hhcicgb3IgJ3Vuc2lnbmVkIGNoYXInIHR5cGUuCiAKIExJTkUgU1lOVEFYCiAtLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVjb3JkLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlY29yZC50eHQKaW5kZXggMzRlMjU1Zi4uM2VlMjdkYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVjb3JkLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZWNvcmQudHh0CkBAIC0xMDMsNiArMTAzLDE5IEBACiAtLXJhdy1zYW1wbGVzOjoKIENvbGxlY3QgcmF3IHNhbXBsZSByZWNvcmRzIGZyb20gYWxsIG9wZW5lZCBjb3VudGVycyAoZGVmYXVsdCBmb3IgdHJhY2Vwb2ludCBjb3VudGVycykuCiAKKy1DOjoKKy0tY3B1OjoKK0NvbGxlY3Qgc2FtcGxlcyBvbmx5IG9uIHRoZSBsaXN0IG9mIGNwdXMgcHJvdmlkZWQuIE11bHRpcGxlIENQVXMgY2FuIGJlIHByb3ZpZGVkIGFzIGEKK2NvbW1hLXNwZXJhdGVkIGxpc3Qgd2l0aCBubyBzcGFjZTogMCwxLiBSYW5nZXMgb2YgQ1BVcyBhcmUgc3BlY2lmaWVkIHdpdGggLTogMC0yLgorSW4gcGVyLXRocmVhZCBtb2RlIHdpdGggaW5oZXJpdGFuY2UgbW9kZSBvbiAoZGVmYXVsdCksIHNhbXBsZXMgYXJlIGNhcHR1cmVkIG9ubHkgd2hlbgordGhlIHRocmVhZCBleGVjdXRlcyBvbiB0aGUgZGVzaWduYXRlZCBDUFVzLiBEZWZhdWx0IGlzIHRvIG1vbml0b3IgYWxsIENQVXMuCisKKy1OOjoKKy0tbm8tYnVpbGRpZC1jYWNoZTo6CitEbyBub3QgdXBkYXRlIHRoZSBidWlsaWQgY2FjaGUuIFRoaXMgc2F2ZXMgc29tZSBvdmVyaGVhZCBpbiBzaXR1YXRpb25zCit3aGVyZSB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIHBlcmYuZGF0YSBmaWxlICh3aGljaCBpbmNsdWRlcyBidWlsZGlkcykKK2lzIHN1ZmZpY2llbnQuCisKIFNFRSBBTFNPCiAtLS0tLS0tLQogbGlua3BlcmY6cGVyZi1zdGF0WzFdLCBsaW5rcGVyZjpwZXJmLWxpc3RbMV0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXN0YXQudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtc3RhdC50eHQKaW5kZXggOTA5ZmE3Ni4uNGIzYTJkNCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtc3RhdC50eHQKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtc3RhdC50eHQKQEAgLTQ2LDYgKzQ2LDEzIEBACiAtQjo6CiAgICAgICAgIHByaW50IGxhcmdlIG51bWJlcnMgd2l0aCB0aG91c2FuZHMnIHNlcGFyYXRvcnMgYWNjb3JkaW5nIHRvIGxvY2FsZQogCistQzo6CistLWNwdT06OgorQ291bnQgb25seSBvbiB0aGUgbGlzdCBvZiBjcHVzIHByb3ZpZGVkLiBNdWx0aXBsZSBDUFVzIGNhbiBiZSBwcm92aWRlZCBhcyBhCitjb21tYS1zcGVyYXRlZCBsaXN0IHdpdGggbm8gc3BhY2U6IDAsMS4gUmFuZ2VzIG9mIENQVXMgYXJlIHNwZWNpZmllZCB3aXRoIC06IDAtMi4KK0luIHBlci10aHJlYWQgbW9kZSwgdGhpcyBvcHRpb24gaXMgaWdub3JlZC4gVGhlIC1hIG9wdGlvbiBpcyBzdGlsbCBuZWNlc3NhcnkKK3RvIGFjdGl2YXRlIHN5c3RlbS13aWRlIG1vbml0b3JpbmcuIERlZmF1bHQgaXMgdG8gY291bnQgb24gYWxsIENQVXMuCisKIEVYQU1QTEVTCiAtLS0tLS0tLQogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10b3AudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdG9wLnR4dAppbmRleCA3ODViOWZjLi4xZjk2ODc2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10b3AudHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRvcC50eHQKQEAgLTI1LDkgKzI1LDExIEBACiAtLWNvdW50PTxjb3VudD46OgogCUV2ZW50IHBlcmlvZCB0byBzYW1wbGUuCiAKLS1DIDxjcHU+OjoKLS0tQ1BVPTxjcHU+OjoKLQlDUFUgdG8gcHJvZmlsZS4KKy1DIDxjcHUtbGlzdD46OgorLS1jcHU9PGNwdT46OgorTW9uaXRvciBvbmx5IG9uIHRoZSBsaXN0IG9mIGNwdXMgcHJvdmlkZWQuIE11bHRpcGxlIENQVXMgY2FuIGJlIHByb3ZpZGVkIGFzIGEKK2NvbW1hLXNwZXJhdGVkIGxpc3Qgd2l0aCBubyBzcGFjZTogMCwxLiBSYW5nZXMgb2YgQ1BVcyBhcmUgc3BlY2lmaWVkIHdpdGggLTogMC0yLgorRGVmYXVsdCBpcyB0byBtb25pdG9yIGFsbCBDUFVTLgogCiAtZCA8c2Vjb25kcz46OgogLS1kZWxheT08c2Vjb25kcz46OgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NQU5JRkVTVCBiL3Rvb2xzL3BlcmYvTUFOSUZFU1QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM3ZmMwYwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvTUFOSUZFU1QKQEAgLTAsMCArMSwxMiBAQAordG9vbHMvcGVyZgoraW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKK2luY2x1ZGUvbGludXgvcmJ0cmVlLmgKK2luY2x1ZGUvbGludXgvbGlzdC5oCitpbmNsdWRlL2xpbnV4L2hhc2guaAoraW5jbHVkZS9saW51eC9zdHJpbmdpZnkuaAorbGliL3JidHJlZS5jCitpbmNsdWRlL2xpbnV4L3N3YWIuaAorYXJjaC8qL2luY2x1ZGUvYXNtL3VuaXN0ZCouaAoraW5jbHVkZS9saW51eC9wb2lzb24uaAoraW5jbHVkZS9saW51eC9tYWdpYy5oCitpbmNsdWRlL2xpbnV4L2h3X2JyZWFrcG9pbnQuaApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZSBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKaW5kZXggM2Q4ZjMxZS4uMjZmNjI2ZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZQorKysgYi90b29scy9wZXJmL01ha2VmaWxlCkBAIC0yODUsMTQgKzI4NSwxMCBAQAogCVFVSUVUX1NUREVSUiA9ICI+L2Rldi9udWxsIDI+JjEiCiBlbmRpZgogCi1CSVRCVUNLRVQgPSAiL2Rldi9udWxsIgorLWluY2x1ZGUgZmVhdHVyZS10ZXN0cy5tYWsKIAotaWZuZXEgKCQoc2hlbGwgc2ggLWMgIihlY2hvICdcI2luY2x1ZGUgPHN0ZGlvLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyByZXR1cm4gcHV0cyhcImhpXCIpOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtbyAkKEJJVEJVQ0tFVCkgIiQoUVVJRVRfU1RERVJSKSIgJiYgZWNobyB5IiksIHkpCi0JQklUQlVDS0VUID0gLnBlcmYuZGV2Lm51bGwKLWVuZGlmCi0KLWlmZXEgKCQoc2hlbGwgc2ggLWMgImVjaG8gJ2ludCBmb28odm9pZCkge2NoYXIgWFsyXTsgcmV0dXJuIDM7fScgfCAkKENDKSAteCBjIC1jIC1XZXJyb3IgLWZzdGFjay1wcm90ZWN0b3ItYWxsIC0gLW8gJChCSVRCVUNLRVQpICIkKFFVSUVUX1NUREVSUikiICYmIGVjaG8geSIpLCB5KQotICBDRkxBR1MgOj0gJChDRkxBR1MpIC1mc3RhY2stcHJvdGVjdG9yLWFsbAoraWZlcSAoJChjYWxsIHRyeS1jYywkKFNPVVJDRV9IRUxMTyksLVdlcnJvciAtZnN0YWNrLXByb3RlY3Rvci1hbGwpLHkpCisJQ0ZMQUdTIDo9ICQoQ0ZMQUdTKSAtZnN0YWNrLXByb3RlY3Rvci1hbGwKIGVuZGlmCiAKIApAQCAtNTA4LDcgKzUwNCw4IEBACiAtaW5jbHVkZSBjb25maWcubWFrCiAKIGlmbmRlZiBOT19EV0FSRgotaWZuZXEgKCQoc2hlbGwgc2ggLWMgIihlY2hvICdcI2luY2x1ZGUgPGR3YXJmLmg+JzsgZWNobyAnXCNpbmNsdWRlIDxsaWJkdy5oPic7IGVjaG8gJ1wjaW5jbHVkZSA8dmVyc2lvbi5oPic7IGVjaG8gJ1wjaWZuZGVmIF9FTEZVVElMU19QUkVSRVEnOyBlY2hvICdcI2Vycm9yJzsgZWNobyAnXCNlbmRpZic7IGVjaG8gJ2ludCBtYWluKHZvaWQpIHsgRHdhcmYgKmRiZzsgZGJnID0gZHdhcmZfYmVnaW4oMCwgRFdBUkZfQ19SRUFEKTsgcmV0dXJuIChsb25nKWRiZzsgfScpIHwgJChDQykgLXggYyAtICQoQUxMX0NGTEFHUykgLUkvdXNyL2luY2x1ZGUvZWxmdXRpbHMgLWxkdyAtbGVsZiAtbyAkKEJJVEJVQ0tFVCkgJChBTExfTERGTEFHUykgJChFWFRMSUJTKSAiJChRVUlFVF9TVERFUlIpIiAmJiBlY2hvIHkiKSwgeSkKK0ZMQUdTX0RXQVJGPSQoQUxMX0NGTEFHUykgLUkvdXNyL2luY2x1ZGUvZWxmdXRpbHMgLWxkdyAtbGVsZiAkKEFMTF9MREZMQUdTKSAkKEVYVExJQlMpCitpZm5lcSAoJChjYWxsIHRyeS1jYywkKFNPVVJDRV9EV0FSRiksJChGTEFHU19EV0FSRikpLHkpCiAJbXNnIDo9ICQod2FybmluZyBObyBsaWJkdy5oIGZvdW5kIG9yIG9sZCBsaWJkdy5oIGZvdW5kIG9yIGVsZnV0aWxzIGlzIG9sZGVyIHRoYW4gMC4xMzgsIGRpc2FibGVzIGR3YXJmIHN1cHBvcnQuIFBsZWFzZSBpbnN0YWxsIG5ldyBlbGZ1dGlscy1kZXZlbC9saWJkdy1kZXYpOwogCU5PX0RXQVJGIDo9IDEKIGVuZGlmICMgRHdhcmYgc3VwcG9ydApAQCAtNTM2LDE2ICs1MzMsMTggQEAKIAlCQVNJQ19DRkxBR1MgKz0gLUkkKE9VVFBVVCkKIGVuZGlmCiAKLWlmZXEgKCQoc2hlbGwgc2ggLWMgIihlY2hvICdcI2luY2x1ZGUgPGxpYmVsZi5oPic7IGVjaG8gJ2ludCBtYWluKHZvaWQpIHsgRWxmICogZWxmID0gZWxmX2JlZ2luKDAsIEVMRl9DX1JFQUQsIDApOyByZXR1cm4gKGxvbmcpZWxmOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtbyAkKEJJVEJVQ0tFVCkgJChBTExfTERGTEFHUykgJChFWFRMSUJTKSAiJChRVUlFVF9TVERFUlIpIiAmJiBlY2hvIHkiKSwgeSkKLWlmbmVxICgkKHNoZWxsIHNoIC1jICIoZWNobyAnXCNpbmNsdWRlIDxnbnUvbGliYy12ZXJzaW9uLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBjb25zdCBjaGFyICogdmVyc2lvbiA9IGdudV9nZXRfbGliY192ZXJzaW9uKCk7IHJldHVybiAobG9uZyl2ZXJzaW9uOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtbyAkKEJJVEJVQ0tFVCkgJChBTExfTERGTEFHUykgJChFWFRMSUJTKSAiJChRVUlFVF9TVERFUlIpIiAmJiBlY2hvIHkiKSwgeSkKLQltc2cgOj0gJChlcnJvciBObyBnbnUvbGliYy12ZXJzaW9uLmggZm91bmQsIHBsZWFzZSBpbnN0YWxsIGdsaWJjLWRldltlbF0vZ2xpYmMtc3RhdGljKTsKK0ZMQUdTX0xJQkVMRj0kKEFMTF9DRkxBR1MpICQoQUxMX0xERkxBR1MpICQoRVhUTElCUykKK2lmbmVxICgkKGNhbGwgdHJ5LWNjLCQoU09VUkNFX0xJQkVMRiksJChGTEFHU19MSUJFTEYpKSx5KQorCUZMQUdTX0dMSUJDPSQoQUxMX0NGTEFHUykgJChBTExfTERGTEFHUykKKwlpZm5lcSAoJChjYWxsIHRyeS1jYywkKFNPVVJDRV9HTElCQyksJChGTEFHU19HTElCQykpLHkpCisJCW1zZyA6PSAkKGVycm9yIE5vIGdudS9saWJjLXZlcnNpb24uaCBmb3VuZCwgcGxlYXNlIGluc3RhbGwgZ2xpYmMtZGV2W2VsXS9nbGliYy1zdGF0aWMpOworCWVsc2UKKwkJbXNnIDo9ICQoZXJyb3IgTm8gbGliZWxmLmgvbGliZWxmIGZvdW5kLCBwbGVhc2UgaW5zdGFsbCBsaWJlbGYtZGV2L2VsZnV0aWxzLWxpYmVsZi1kZXZlbCk7CisJZW5kaWYKIGVuZGlmCiAKLQlpZm5lcSAoJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8bGliZWxmLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBFbGYgKiBlbGYgPSBlbGZfYmVnaW4oMCwgRUxGX0NfUkVBRF9NTUFQLCAwKTsgcmV0dXJuIChsb25nKWVsZjsgfScpIHwgJChDQykgLXggYyAtICQoQUxMX0NGTEFHUykgLW8gJChCSVRCVUNLRVQpICQoQUxMX0xERkxBR1MpICQoRVhUTElCUykgIiQoUVVJRVRfU1RERVJSKSIgJiYgZWNobyB5IiksIHkpCi0JCUJBU0lDX0NGTEFHUyArPSAtRExJQkVMRl9OT19NTUFQCi0JZW5kaWYKLWVsc2UKLQltc2cgOj0gJChlcnJvciBObyBsaWJlbGYuaC9saWJlbGYgZm91bmQsIHBsZWFzZSBpbnN0YWxsIGxpYmVsZi1kZXYvZWxmdXRpbHMtbGliZWxmLWRldmVsIGFuZCBnbGliYy1kZXZbZWxdKTsKK2lmbmVxICgkKGNhbGwgdHJ5LWNjLCQoU09VUkNFX0VMRl9NTUFQKSwkKEZMQUdTX0NPTU1PTikpLHkpCisJQkFTSUNfQ0ZMQUdTICs9IC1ETElCRUxGX05PX01NQVAKIGVuZGlmCiAKIGlmbmRlZiBOT19EV0FSRgpAQCAtNTYxLDY5ICs1NjAsODAgQEAKIGlmZGVmIE5PX05FV1QKIAlCQVNJQ19DRkxBR1MgKz0gLUROT19ORVdUX1NVUFBPUlQKIGVsc2UKLWlmbmVxICgkKHNoZWxsIHNoIC1jICIoZWNobyAnXCNpbmNsdWRlIDxuZXd0Lmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBuZXd0SW5pdCgpOyBuZXd0Q2xzKCk7IHJldHVybiBuZXd0RmluaXNoZWQoKTsgfScpIHwgJChDQykgLXggYyAtICQoQUxMX0NGTEFHUykgLURfTEFSR0VGSUxFNjRfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLWxuZXd0IC1vICQoQklUQlVDS0VUKSAkKEFMTF9MREZMQUdTKSAkKEVYVExJQlMpICIkKFFVSUVUX1NUREVSUikiICYmIGVjaG8geSIpLCB5KQotCW1zZyA6PSAkKHdhcm5pbmcgbmV3dCBub3QgZm91bmQsIGRpc2FibGVzIFRVSSBzdXBwb3J0LiBQbGVhc2UgaW5zdGFsbCBuZXd0LWRldmVsIG9yIGxpYm5ld3QtZGV2KTsKLQlCQVNJQ19DRkxBR1MgKz0gLUROT19ORVdUX1NVUFBPUlQKLWVsc2UKLQkjIEZlZG9yYSBoYXMgL3Vzci9pbmNsdWRlL3NsYW5nL3NsYW5nLmgsIGJ1dCB1YnVudHUgL3Vzci9pbmNsdWRlL3NsYW5nLmgKLQlCQVNJQ19DRkxBR1MgKz0gLUkvdXNyL2luY2x1ZGUvc2xhbmcKLQlFWFRMSUJTICs9IC1sbmV3dCAtbHNsYW5nCi0JTElCX09CSlMgKz0gJChPVVRQVVQpdXRpbC9uZXd0Lm8KLWVuZGlmCi1lbmRpZiAjIE5PX05FV1QKLQotaWZuZGVmIE5PX0xJQlBFUkwKLVBFUkxfRU1CRURfTERPUFRTID0gYHBlcmwgLU1FeHRVdGlsczo6RW1iZWQgLWUgbGRvcHRzIDI+L2Rldi9udWxsYAotUEVSTF9FTUJFRF9DQ09QVFMgPSBgcGVybCAtTUV4dFV0aWxzOjpFbWJlZCAtZSBjY29wdHMgMj4vZGV2L251bGxgCisJRkxBR1NfTkVXVD0kKEFMTF9DRkxBR1MpICQoQUxMX0xERkxBR1MpICQoRVhUTElCUykgLWxuZXd0CisJaWZuZXEgKCQoY2FsbCB0cnktY2MsJChTT1VSQ0VfTkVXVCksJChGTEFHU19ORVdUKSkseSkKKwkJbXNnIDo9ICQod2FybmluZyBuZXd0IG5vdCBmb3VuZCwgZGlzYWJsZXMgVFVJIHN1cHBvcnQuIFBsZWFzZSBpbnN0YWxsIG5ld3QtZGV2ZWwgb3IgbGlibmV3dC1kZXYpOworCQlCQVNJQ19DRkxBR1MgKz0gLUROT19ORVdUX1NVUFBPUlQKKwllbHNlCisJCSMgRmVkb3JhIGhhcyAvdXNyL2luY2x1ZGUvc2xhbmcvc2xhbmcuaCwgYnV0IHVidW50dSAvdXNyL2luY2x1ZGUvc2xhbmcuaAorCQlCQVNJQ19DRkxBR1MgKz0gLUkvdXNyL2luY2x1ZGUvc2xhbmcKKwkJRVhUTElCUyArPSAtbG5ld3QgLWxzbGFuZworCQlMSUJfT0JKUyArPSAkKE9VVFBVVCl1dGlsL25ld3QubworCWVuZGlmCiBlbmRpZgogCi1pZm5lcSAoJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8RVhURVJOLmg+JzsgZWNobyAnXCNpbmNsdWRlIDxwZXJsLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBwZXJsX2FsbG9jKCk7IHJldHVybiAwOyB9JykgfCAkKENDKSAteCBjIC0gJChQRVJMX0VNQkVEX0NDT1BUUykgLW8gJChCSVRCVUNLRVQpICQoUEVSTF9FTUJFRF9MRE9QVFMpID4gL2Rldi9udWxsIDI+JjEgJiYgZWNobyB5IiksIHkpCitpZmRlZiBOT19MSUJQRVJMCiAJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fTElCUEVSTAogZWxzZQotCUFMTF9MREZMQUdTICs9ICQoUEVSTF9FTUJFRF9MRE9QVFMpCi0JTElCX09CSlMgKz0gJChPVVRQVVQpdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1wZXJsLm8KLQlMSUJfT0JKUyArPSAkKE9VVFBVVClzY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQubworCVBFUkxfRU1CRURfTERPUFRTID0gYHBlcmwgLU1FeHRVdGlsczo6RW1iZWQgLWUgbGRvcHRzIDI+L2Rldi9udWxsYAorCVBFUkxfRU1CRURfQ0NPUFRTID0gYHBlcmwgLU1FeHRVdGlsczo6RW1iZWQgLWUgY2NvcHRzIDI+L2Rldi9udWxsYAorCUZMQUdTX1BFUkxfRU1CRUQ9JChQRVJMX0VNQkVEX0NDT1BUUykgJChQRVJMX0VNQkVEX0xET1BUUykKKworCWlmbmVxICgkKGNhbGwgdHJ5LWNjLCQoU09VUkNFX1BFUkxfRU1CRUQpLCQoRkxBR1NfUEVSTF9FTUJFRCkpLHkpCisJCUJBU0lDX0NGTEFHUyArPSAtRE5PX0xJQlBFUkwKKwllbHNlCisJCUFMTF9MREZMQUdTICs9ICQoUEVSTF9FTUJFRF9MRE9QVFMpCisJCUxJQl9PQkpTICs9ICQoT1VUUFVUKXV0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcGVybC5vCisJCUxJQl9PQkpTICs9ICQoT1VUUFVUKXNjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5vCisJZW5kaWYKIGVuZGlmCiAKLWlmbmRlZiBOT19MSUJQWVRIT04KLVBZVEhPTl9FTUJFRF9MRE9QVFMgPSBgcHl0aG9uLWNvbmZpZyAtLWxkZmxhZ3MgMj4vZGV2L251bGxgCi1QWVRIT05fRU1CRURfQ0NPUFRTID0gYHB5dGhvbi1jb25maWcgLS1jZmxhZ3MgMj4vZGV2L251bGxgCi1lbmRpZgotCi1pZm5lcSAoJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8UHl0aG9uLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBQeV9Jbml0aWFsaXplKCk7IHJldHVybiAwOyB9JykgfCAkKENDKSAteCBjIC0gJChQWVRIT05fRU1CRURfQ0NPUFRTKSAtbyAkKEJJVEJVQ0tFVCkgJChQWVRIT05fRU1CRURfTERPUFRTKSA+IC9kZXYvbnVsbCAyPiYxICYmIGVjaG8geSIpLCB5KQoraWZkZWYgTk9fTElCUFlUSE9OCiAJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fTElCUFlUSE9OCiBlbHNlCi0JQUxMX0xERkxBR1MgKz0gJChQWVRIT05fRU1CRURfTERPUFRTKQotCUxJQl9PQkpTICs9ICQoT1VUUFVUKXV0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcHl0aG9uLm8KLQlMSUJfT0JKUyArPSAkKE9VVFBVVClzY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5vCisJUFlUSE9OX0VNQkVEX0xET1BUUyA9IGBweXRob24tY29uZmlnIC0tbGRmbGFncyAyPi9kZXYvbnVsbGAKKwlQWVRIT05fRU1CRURfQ0NPUFRTID0gYHB5dGhvbi1jb25maWcgLS1jZmxhZ3MgMj4vZGV2L251bGxgCisJRkxBR1NfUFlUSE9OX0VNQkVEPSQoUFlUSE9OX0VNQkVEX0NDT1BUUykgJChQWVRIT05fRU1CRURfTERPUFRTKQorCWlmbmVxICgkKGNhbGwgdHJ5LWNjLCQoU09VUkNFX1BZVEhPTl9FTUJFRCksJChGTEFHU19QWVRIT05fRU1CRUQpKSx5KQorCQlCQVNJQ19DRkxBR1MgKz0gLUROT19MSUJQWVRIT04KKwllbHNlCisJCUFMTF9MREZMQUdTICs9ICQoUFlUSE9OX0VNQkVEX0xET1BUUykKKwkJTElCX09CSlMgKz0gJChPVVRQVVQpdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1weXRob24ubworCQlMSUJfT0JKUyArPSAkKE9VVFBVVClzY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5vCisJZW5kaWYKIGVuZGlmCiAKIGlmZGVmIE5PX0RFTUFOR0xFCiAJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fREVNQU5HTEUKLWVsc2UgaWZkZWYgSEFWRV9DUExVU19ERU1BTkdMRQotCUVYVExJQlMgKz0gLWxpYmVydHkKLQlCQVNJQ19DRkxBR1MgKz0gLURIQVZFX0NQTFVTX0RFTUFOR0xFCiBlbHNlCi0JaGFzX2JmZCA6PSAkKHNoZWxsIHNoIC1jICIoZWNobyAnXCNpbmNsdWRlIDxiZmQuaD4nOyBlY2hvICdpbnQgbWFpbih2b2lkKSB7IGJmZF9kZW1hbmdsZSgwLCAwLCAwKTsgcmV0dXJuIDA7IH0nKSB8ICQoQ0MpIC14IGMgLSAkKEFMTF9DRkxBR1MpIC1vICQoQklUQlVDS0VUKSAkKEFMTF9MREZMQUdTKSAkKEVYVExJQlMpIC1sYmZkICIkKFFVSUVUX1NUREVSUikiICYmIGVjaG8geSIpCi0KLQlpZmVxICgkKGhhc19iZmQpLHkpCi0JCUVYVExJQlMgKz0gLWxiZmQKLQllbHNlCi0JCWhhc19iZmRfaWJlcnR5IDo9ICQoc2hlbGwgc2ggLWMgIihlY2hvICdcI2luY2x1ZGUgPGJmZC5oPic7IGVjaG8gJ2ludCBtYWluKHZvaWQpIHsgYmZkX2RlbWFuZ2xlKDAsIDAsIDApOyByZXR1cm4gMDsgfScpIHwgJChDQykgLXggYyAtICQoQUxMX0NGTEFHUykgLW8gJChCSVRCVUNLRVQpICQoQUxMX0xERkxBR1MpICQoRVhUTElCUykgLWxiZmQgLWxpYmVydHkgIiQoUVVJRVRfU1RERVJSKSIgJiYgZWNobyB5IikKLQkJaWZlcSAoJChoYXNfYmZkX2liZXJ0eSkseSkKLQkJCUVYVExJQlMgKz0gLWxiZmQgLWxpYmVydHkKKyAgICAgICAgaWZkZWYgSEFWRV9DUExVU19ERU1BTkdMRQorCQlFWFRMSUJTICs9IC1saWJlcnR5CisJCUJBU0lDX0NGTEFHUyArPSAtREhBVkVfQ1BMVVNfREVNQU5HTEUKKyAgICAgICAgZWxzZQorCQlGTEFHU19CRkQ9JChBTExfQ0ZMQUdTKSAkKEFMTF9MREZMQUdTKSAkKEVYVExJQlMpIC1sYmZkCisJCWhhc19iZmQgOj0gJChjYWxsIHRyeS1jYywkKFNPVVJDRV9CRkQpLCQoRkxBR1NfQkZEKSkKKwkJaWZlcSAoJChoYXNfYmZkKSx5KQorCQkJRVhUTElCUyArPSAtbGJmZAogCQllbHNlCi0JCQloYXNfYmZkX2liZXJ0eV96IDo9ICQoc2hlbGwgc2ggLWMgIihlY2hvICdcI2luY2x1ZGUgPGJmZC5oPic7IGVjaG8gJ2ludCBtYWluKHZvaWQpIHsgYmZkX2RlbWFuZ2xlKDAsIDAsIDApOyByZXR1cm4gMDsgfScpIHwgJChDQykgLXggYyAtICQoQUxMX0NGTEFHUykgLW8gJChCSVRCVUNLRVQpICQoQUxMX0xERkxBR1MpICQoRVhUTElCUykgLWxiZmQgLWxpYmVydHkgLWx6ICIkKFFVSUVUX1NUREVSUikiICYmIGVjaG8geSIpCi0JCQlpZmVxICgkKGhhc19iZmRfaWJlcnR5X3opLHkpCi0JCQkJRVhUTElCUyArPSAtbGJmZCAtbGliZXJ0eSAtbHoKKwkJCUZMQUdTX0JGRF9JQkVSVFk9JChGTEFHU19CRkQpIC1saWJlcnR5CisJCQloYXNfYmZkX2liZXJ0eSA6PSAkKGNhbGwgdHJ5LWNjLCQoU09VUkNFX0JGRCksJChGTEFHU19CRkRfSUJFUlRZKSkKKwkJCWlmZXEgKCQoaGFzX2JmZF9pYmVydHkpLHkpCisJCQkJRVhUTElCUyArPSAtbGJmZCAtbGliZXJ0eQogCQkJZWxzZQotCQkJCWhhc19jcGx1c19kZW1hbmdsZSA6PSAkKHNoZWxsIHNoIC1jICIoZWNobyAnZXh0ZXJuIGNoYXIgKmNwbHVzX2RlbWFuZ2xlKGNvbnN0IGNoYXIgKiwgaW50KTsnOyBlY2hvICdpbnQgbWFpbih2b2lkKSB7IGNwbHVzX2RlbWFuZ2xlKDAsIDApOyByZXR1cm4gMDsgfScpIHwgJChDQykgLXggYyAtICQoQUxMX0NGTEFHUykgLW8gJChCSVRCVUNLRVQpICQoQUxMX0xERkxBR1MpICQoRVhUTElCUykgLWxpYmVydHkgIiQoUVVJRVRfU1RERVJSKSIgJiYgZWNobyB5IikKLQkJCQlpZmVxICgkKGhhc19jcGx1c19kZW1hbmdsZSkseSkKLQkJCQkJRVhUTElCUyArPSAtbGliZXJ0eQotCQkJCQlCQVNJQ19DRkxBR1MgKz0gLURIQVZFX0NQTFVTX0RFTUFOR0xFCisJCQkJRkxBR1NfQkZEX0lCRVJUWV9aPSQoRkxBR1NfQkZEX0lCRVJUWSkgLWx6CisJCQkJaGFzX2JmZF9pYmVydHlfeiA6PSAkKGNhbGwgdHJ5LWNjLCQoU09VUkNFX0JGRCksJChGTEFHU19CRkRfSUJFUlRZX1opKQorCQkJCWlmZXEgKCQoaGFzX2JmZF9pYmVydHlfeikseSkKKwkJCQkJRVhUTElCUyArPSAtbGJmZCAtbGliZXJ0eSAtbHoKIAkJCQllbHNlCi0JCQkJCW1zZyA6PSAkKHdhcm5pbmcgTm8gYmZkLmgvbGliYmZkIGZvdW5kLCBpbnN0YWxsIGJpbnV0aWxzLWRldltlbF0vemxpYi1zdGF0aWMgdG8gZ2FpbiBzeW1ib2wgZGVtYW5nbGluZykKLQkJCQkJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fREVNQU5HTEUKKwkJCQkJRkxBR1NfQ1BMVVNfREVNQU5HTEU9JChBTExfQ0ZMQUdTKSAkKEFMTF9MREZMQUdTKSAkKEVYVExJQlMpIC1saWJlcnR5CisJCQkJCWhhc19jcGx1c19kZW1hbmdsZSA6PSAkKGNhbGwgdHJ5LWNjLCQoU09VUkNFX0NQTFVTX0RFTUFOR0xFKSwkKEZMQUdTX0NQTFVTX0RFTUFOR0xFKSkKKwkJCQkJaWZlcSAoJChoYXNfY3BsdXNfZGVtYW5nbGUpLHkpCisJCQkJCQlFWFRMSUJTICs9IC1saWJlcnR5CisJCQkJCQlCQVNJQ19DRkxBR1MgKz0gLURIQVZFX0NQTFVTX0RFTUFOR0xFCisJCQkJCWVsc2UKKwkJCQkJCW1zZyA6PSAkKHdhcm5pbmcgTm8gYmZkLmgvbGliYmZkIGZvdW5kLCBpbnN0YWxsIGJpbnV0aWxzLWRldltlbF0vemxpYi1zdGF0aWMgdG8gZ2FpbiBzeW1ib2wgZGVtYW5nbGluZykKKwkJCQkJCUJBU0lDX0NGTEFHUyArPSAtRE5PX0RFTUFOR0xFCisJCQkJCWVuZGlmCiAJCQkJZW5kaWYKIAkJCWVuZGlmCiAJCWVuZGlmCkBAIC04NjUsNyArODc1LDcgQEAKIAogU0hFTEwgPSAkKFNIRUxMX1BBVEgpCiAKLWFsbDo6IC5wZXJmLmRldi5udWxsIHNoZWxsX2NvbXBhdGliaWxpdHlfdGVzdCAkKEFMTF9QUk9HUkFNUykgJChCVUlMVF9JTlMpICQoT1RIRVJfUFJPR1JBTVMpICQoT1VUUFVUKVBFUkYtQlVJTEQtT1BUSU9OUworYWxsOjogc2hlbGxfY29tcGF0aWJpbGl0eV90ZXN0ICQoQUxMX1BST0dSQU1TKSAkKEJVSUxUX0lOUykgJChPVEhFUl9QUk9HUkFNUykgJChPVVRQVVQpUEVSRi1CVUlMRC1PUFRJT05TCiBpZm5lcSAoLCRYKQogCSQoZm9yZWFjaCBwLCQocGF0c3Vic3QgJSRYLCUsJChmaWx0ZXIgJSRYLCQoQUxMX1BST0dSQU1TKSAkKEJVSUxUX0lOUykgcGVyZiRYKSksIHRlc3QgJyRwJyAtZWYgJyRwJFgnIHx8ICQoUk0pICckcCc7KQogZW5kaWYKQEAgLTExOTUsMTEgKzEyMDUsNiBAQAogLlBIT05ZOiAuRk9SQ0UtUEVSRi1WRVJTSU9OLUZJTEUgVEFHUyB0YWdzIGNzY29wZSAuRk9SQ0UtUEVSRi1DRkxBR1MKIC5QSE9OWTogLkZPUkNFLVBFUkYtQlVJTEQtT1BUSU9OUwogCi0ucGVyZi5kZXYubnVsbDoKLQkJdG91Y2ggLnBlcmYuZGV2Lm51bGwKLQotLklOVEVSTUVESUFURToJLnBlcmYuZGV2Lm51bGwKLQogIyMjIE1ha2Ugc3VyZSBidWlsdC1pbnMgZG8gbm90IGhhdmUgZHVwcyBhbmQgbGlzdGVkIGluIHBlcmYuYwogIwogY2hlY2stYnVpbHRpbnM6OgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9hcmNoL2FybS9NYWtlZmlsZSBiL3Rvb2xzL3BlcmYvYXJjaC9hcm0vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUxMzBiNTAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL2FyY2gvYXJtL01ha2VmaWxlCkBAIC0wLDAgKzEsNCBAQAoraWZuZGVmIE5PX0RXQVJGCitQRVJGX0hBVkVfRFdBUkZfUkVHUyA6PSAxCitMSUJfT0JKUyArPSAkKE9VVFBVVClhcmNoLyQoQVJDSCkvdXRpbC9kd2FyZi1yZWdzLm8KK2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2FyY2gvYXJtL3V0aWwvZHdhcmYtcmVncy5jIGIvdG9vbHMvcGVyZi9hcmNoL2FybS91dGlsL2R3YXJmLXJlZ3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmY2NDUwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9hcmNoL2FybS91dGlsL2R3YXJmLXJlZ3MuYwpAQCAtMCwwICsxLDY0IEBACisvKgorICogTWFwcGluZyBvZiBEV0FSRiBkZWJ1ZyByZWdpc3RlciBudW1iZXJzIGludG8gcmVnaXN0ZXIgbmFtZXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFdpbGwgRGVhY29uLCBBUk0gTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpYmlvLmg+CisjaW5jbHVkZSA8ZHdhcmYtcmVncy5oPgorCitzdHJ1Y3QgcHRfcmVnc19kd2FyZm51bSB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBpbnQgZHdhcmZudW07Cit9OworCisjZGVmaW5lIFNUUihzKSAjcworI2RlZmluZSBSRUdfRFdBUkZOVU1fTkFNRShyLCBudW0pIHsubmFtZSA9IHIsIC5kd2FyZm51bSA9IG51bX0KKyNkZWZpbmUgR1BSX0RXQVJGTlVNX05BTUUobnVtKSBcCisJey5uYW1lID0gU1RSKCVyIyNudW0pLCAuZHdhcmZudW0gPSBudW19CisjZGVmaW5lIFJFR19EV0FSRk5VTV9FTkQgey5uYW1lID0gTlVMTCwgLmR3YXJmbnVtID0gMH0KKworLyoKKyAqIFJlZmVyZW5jZToKKyAqIGh0dHA6Ly9pbmZvY2VudGVyLmFybS5jb20vaGVscC90b3BpYy9jb20uYXJtLmRvYy5paGkwMDQwYS9JSEkwMDQwQV9hYWR3YXJmLnBkZgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHB0X3JlZ3NfZHdhcmZudW0gcmVnZHdhcmZudW1fdGFibGVbXSA9IHsKKwlHUFJfRFdBUkZOVU1fTkFNRSgwKSwKKwlHUFJfRFdBUkZOVU1fTkFNRSgxKSwKKwlHUFJfRFdBUkZOVU1fTkFNRSgyKSwKKwlHUFJfRFdBUkZOVU1fTkFNRSgzKSwKKwlHUFJfRFdBUkZOVU1fTkFNRSg0KSwKKwlHUFJfRFdBUkZOVU1fTkFNRSg1KSwKKwlHUFJfRFdBUkZOVU1fTkFNRSg2KSwKKwlHUFJfRFdBUkZOVU1fTkFNRSg3KSwKKwlHUFJfRFdBUkZOVU1fTkFNRSg4KSwKKwlHUFJfRFdBUkZOVU1fTkFNRSg5KSwKKwlHUFJfRFdBUkZOVU1fTkFNRSgxMCksCisJUkVHX0RXQVJGTlVNX05BTUUoIiVmcCIsIDExKSwKKwlSRUdfRFdBUkZOVU1fTkFNRSgiJWlwIiwgMTIpLAorCVJFR19EV0FSRk5VTV9OQU1FKCIlc3AiLCAxMyksCisJUkVHX0RXQVJGTlVNX05BTUUoIiVsciIsIDE0KSwKKwlSRUdfRFdBUkZOVU1fTkFNRSgiJXBjIiwgMTUpLAorCVJFR19EV0FSRk5VTV9FTkQsCit9OworCisvKioKKyAqIGdldF9hcmNoX3JlZ3N0cigpIC0gbG9va3VwIHJlZ2lzdGVyIG5hbWUgZnJvbSBpdCdzIERXQVJGIHJlZ2lzdGVyIG51bWJlcgorICogQG46CXRoZSBEV0FSRiByZWdpc3RlciBudW1iZXIKKyAqCisgKiBnZXRfYXJjaF9yZWdzdHIoKSByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSByZWdpc3RlciBpbiBzdHJ1Y3QKKyAqIHJlZ2R3YXJmbnVtX3RhYmxlIGZyb20gaXQncyBEV0FSRiByZWdpc3RlciBudW1iZXIuIElmIHRoZSByZWdpc3RlciBpcyBub3QKKyAqIGZvdW5kIGluIHRoZSB0YWJsZSwgdGhpcyByZXR1cm5zIE5VTEw7CisgKi8KK2NvbnN0IGNoYXIgKmdldF9hcmNoX3JlZ3N0cih1bnNpZ25lZCBpbnQgbikKK3sKKwljb25zdCBzdHJ1Y3QgcHRfcmVnc19kd2FyZm51bSAqcm9mZjsKKwlmb3IgKHJvZmYgPSByZWdkd2FyZm51bV90YWJsZTsgcm9mZi0+bmFtZSAhPSBOVUxMOyByb2ZmKyspCisJCWlmIChyb2ZmLT5kd2FyZm51bSA9PSBuKQorCQkJcmV0dXJuIHJvZmYtPm5hbWU7CisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2FyY2gvc2gvTWFrZWZpbGUgYi90b29scy9wZXJmL2FyY2gvc2gvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUxMzBiNTAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL2FyY2gvc2gvTWFrZWZpbGUKQEAgLTAsMCArMSw0IEBACitpZm5kZWYgTk9fRFdBUkYKK1BFUkZfSEFWRV9EV0FSRl9SRUdTIDo9IDEKK0xJQl9PQkpTICs9ICQoT1VUUFVUKWFyY2gvJChBUkNIKS91dGlsL2R3YXJmLXJlZ3MubworZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYXJjaC9zaC91dGlsL2R3YXJmLXJlZ3MuYyBiL3Rvb2xzL3BlcmYvYXJjaC9zaC91dGlsL2R3YXJmLXJlZ3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTFlZGIwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9hcmNoL3NoL3V0aWwvZHdhcmYtcmVncy5jCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBNYXBwaW5nIG9mIERXQVJGIGRlYnVnIHJlZ2lzdGVyIG51bWJlcnMgaW50byByZWdpc3RlciBuYW1lcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTWF0dCBGbGVtaW5nIDxtYXR0QGNvbnNvbGUtcGltcHMub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaWJpby5oPgorI2luY2x1ZGUgPGR3YXJmLXJlZ3MuaD4KKworLyoKKyAqIEdlbmVyaWMgZHdhcmYgYW5hbHlzaXMgaGVscGVycworICovCisKKyNkZWZpbmUgU0hfTUFYX1JFR1MgMTgKK2NvbnN0IGNoYXIgKnNoX3JlZ3NfdGFibGVbU0hfTUFYX1JFR1NdID0geworCSJyMCIsCisJInIxIiwKKwkicjIiLAorCSJyMyIsCisJInI0IiwKKwkicjUiLAorCSJyNiIsCisJInI3IiwKKwkicjgiLAorCSJyOSIsCisJInIxMCIsCisJInIxMSIsCisJInIxMiIsCisJInIxMyIsCisJInIxNCIsCisJInIxNSIsCisJInBjIiwKKwkicHIiLAorfTsKKworLyogUmV0dXJuIGFyY2hpdGVjdHVyZSBkZXBlbmRlbnQgcmVnaXN0ZXIgc3RyaW5nIChmb3Iga3Byb2JlLXRyYWNlcikgKi8KK2NvbnN0IGNoYXIgKmdldF9hcmNoX3JlZ3N0cih1bnNpZ25lZCBpbnQgbikKK3sKKwlyZXR1cm4gKG4gPD0gU0hfTUFYX1JFR1MpID8gc2hfcmVnc190YWJsZVtuXSA6IE5VTEw7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2FyY2gvc3BhcmMvTWFrZWZpbGUgYi90b29scy9wZXJmL2FyY2gvc3BhcmMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUxMzBiNTAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL2FyY2gvc3BhcmMvTWFrZWZpbGUKQEAgLTAsMCArMSw0IEBACitpZm5kZWYgTk9fRFdBUkYKK1BFUkZfSEFWRV9EV0FSRl9SRUdTIDo9IDEKK0xJQl9PQkpTICs9ICQoT1VUUFVUKWFyY2gvJChBUkNIKS91dGlsL2R3YXJmLXJlZ3MubworZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYXJjaC9zcGFyYy91dGlsL2R3YXJmLXJlZ3MuYyBiL3Rvb2xzL3BlcmYvYXJjaC9zcGFyYy91dGlsL2R3YXJmLXJlZ3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWI4ODQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9hcmNoL3NwYXJjL3V0aWwvZHdhcmYtcmVncy5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBNYXBwaW5nIG9mIERXQVJGIGRlYnVnIHJlZ2lzdGVyIG51bWJlcnMgaW50byByZWdpc3RlciBuYW1lcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpYmlvLmg+CisjaW5jbHVkZSA8ZHdhcmYtcmVncy5oPgorCisjZGVmaW5lIFNQQVJDX01BWF9SRUdTCTk2CisKK2NvbnN0IGNoYXIgKnNwYXJjX3JlZ3NfdGFibGVbU1BBUkNfTUFYX1JFR1NdID0geworCSIlZzAiLCAiJWcxIiwgIiVnMiIsICIlZzMiLCAiJWc0IiwgIiVnNSIsICIlZzYiLCAiJWc3IiwKKwkiJW8wIiwgIiVvMSIsICIlbzIiLCAiJW8zIiwgIiVvNCIsICIlbzUiLCAiJXNwIiwgIiVvNyIsCisJIiVsMCIsICIlbDEiLCAiJWwyIiwgIiVsMyIsICIlbDQiLCAiJWw1IiwgIiVsNiIsICIlbDciLAorCSIlaTAiLCAiJWkxIiwgIiVpMiIsICIlaTMiLCAiJWk0IiwgIiVpNSIsICIlZnAiLCAiJWk3IiwKKwkiJWYwIiwgIiVmMSIsICIlZjIiLCAiJWYzIiwgIiVmNCIsICIlZjUiLCAiJWY2IiwgIiVmNyIsCisJIiVmOCIsICIlZjkiLCAiJWYxMCIsICIlZjExIiwgIiVmMTIiLCAiJWYxMyIsICIlZjE0IiwgIiVmMTUiLAorCSIlZjE2IiwgIiVmMTciLCAiJWYxOCIsICIlZjE5IiwgIiVmMjAiLCAiJWYyMSIsICIlZjIyIiwgIiVmMjMiLAorCSIlZjI0IiwgIiVmMjUiLCAiJWYyNiIsICIlZjI3IiwgIiVmMjgiLCAiJWYyOSIsICIlZjMwIiwgIiVmMzEiLAorCSIlZjMyIiwgIiVmMzMiLCAiJWYzNCIsICIlZjM1IiwgIiVmMzYiLCAiJWYzNyIsICIlZjM4IiwgIiVmMzkiLAorCSIlZjQwIiwgIiVmNDEiLCAiJWY0MiIsICIlZjQzIiwgIiVmNDQiLCAiJWY0NSIsICIlZjQ2IiwgIiVmNDciLAorCSIlZjQ4IiwgIiVmNDkiLCAiJWY1MCIsICIlZjUxIiwgIiVmNTIiLCAiJWY1MyIsICIlZjU0IiwgIiVmNTUiLAorCSIlZjU2IiwgIiVmNTciLCAiJWY1OCIsICIlZjU5IiwgIiVmNjAiLCAiJWY2MSIsICIlZjYyIiwgIiVmNjMiLAorfTsKKworLyoqCisgKiBnZXRfYXJjaF9yZWdzdHIoKSAtIGxvb2t1cCByZWdpc3RlciBuYW1lIGZyb20gaXQncyBEV0FSRiByZWdpc3RlciBudW1iZXIKKyAqIEBuOgl0aGUgRFdBUkYgcmVnaXN0ZXIgbnVtYmVyCisgKgorICogZ2V0X2FyY2hfcmVnc3RyKCkgcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgcmVnaXN0ZXIgaW4gc3RydWN0CisgKiByZWdkd2FyZm51bV90YWJsZSBmcm9tIGl0J3MgRFdBUkYgcmVnaXN0ZXIgbnVtYmVyLiBJZiB0aGUgcmVnaXN0ZXIgaXMgbm90CisgKiBmb3VuZCBpbiB0aGUgdGFibGUsIHRoaXMgcmV0dXJucyBOVUxMOworICovCitjb25zdCBjaGFyICpnZXRfYXJjaF9yZWdzdHIodW5zaWduZWQgaW50IG4pCit7CisJcmV0dXJuIChuIDw9IFNQQVJDX01BWF9SRUdTKSA/IHNwYXJjX3JlZ3NfdGFibGVbbl0gOiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwppbmRleCA5NmRiNTI0Li5mZDIwNjcwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwpAQCAtNjEsMTEgKzYxLDkgQEAKIHN0YXRpYyBpbnQgcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCiB7CiAJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7CisJc3RydWN0IHNhbXBsZV9kYXRhIGRhdGE7CiAKLQlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkOiAlI0x4XG4iLCBldmVudC0+aGVhZGVyLm1pc2MsCi0JCSAgICBldmVudC0+aXAucGlkLCBldmVudC0+aXAuaXApOwotCi0JaWYgKGV2ZW50X19wcmVwcm9jZXNzX3NhbXBsZShldmVudCwgc2Vzc2lvbiwgJmFsLCBOVUxMKSA8IDApIHsKKwlpZiAoZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLCAmYWwsICZkYXRhLCBOVUxMKSA8IDApIHsKIAkJcHJfd2FybmluZygicHJvYmxlbSBwcm9jZXNzaW5nICVkIGV2ZW50LCBza2lwcGluZyBpdC5cbiIsCiAJCQkgICBldmVudC0+aGVhZGVyLnR5cGUpOwogCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tYnVpbGRpZC1jYWNoZS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtY2FjaGUuYwppbmRleCBmOGUzZDE4Li4yOWFkMjBlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tYnVpbGRpZC1jYWNoZS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWNhY2hlLmMKQEAgLTc4LDggKzc4LDcgQEAKIAlzdHJ1Y3Qgc3RyX25vZGUgKnBvczsKIAljaGFyIGRlYnVnZGlyW1BBVEhfTUFYXTsKIAotCXNucHJpbnRmKGRlYnVnZGlyLCBzaXplb2YoZGVidWdkaXIpLCAiJXMvJXMiLCBnZXRlbnYoIkhPTUUiKSwKLQkJIERFQlVHX0NBQ0hFX0RJUik7CisJc25wcmludGYoZGVidWdkaXIsIHNpemVvZihkZWJ1Z2RpciksICIlcyIsIGJ1aWxkaWRfZGlyKTsKIAogCWlmIChhZGRfbmFtZV9saXN0X3N0cikgewogCQlsaXN0ID0gc3RybGlzdF9fbmV3KHRydWUsIGFkZF9uYW1lX2xpc3Rfc3RyKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWxpc3QuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWxpc3QuYwppbmRleCA5OTg5MDcyLi40NGE0N2UxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tYnVpbGRpZC1saXN0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtbGlzdC5jCkBAIC00MywxMCArNDMsOCBAQAogCWlmIChzZXNzaW9uID09IE5VTEwpCiAJCXJldHVybiAtMTsKIAotCWlmICh3aXRoX2hpdHMpIHsKLQkJc3ltYm9sX2NvbmYuZnVsbF9wYXRocyA9IHRydWU7CisJaWYgKHdpdGhfaGl0cykKIAkJcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzZXNzaW9uLCAmYnVpbGRfaWRfX21hcmtfZHNvX2hpdF9vcHMpOwotCX0KIAogCXBlcmZfc2Vzc2lvbl9fZnByaW50Zl9kc29zX2J1aWxkaWQoc2Vzc2lvbiwgc3Rkb3V0LCB3aXRoX2hpdHMpOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tZGlmZi5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWRpZmYuYwppbmRleCBhNmUyZmRjLi5mY2ExZDQ0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tZGlmZi5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMKQEAgLTM1LDEwICszNSw3IEBACiAJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7CiAJc3RydWN0IHNhbXBsZV9kYXRhIGRhdGEgPSB7IC5wZXJpb2QgPSAxLCB9OwogCi0JZHVtcF9wcmludGYoIihJUCwgJWQpOiAlZDogJSNMeFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAotCQkgICAgZXZlbnQtPmlwLnBpZCwgZXZlbnQtPmlwLmlwKTsKLQotCWlmIChldmVudF9fcHJlcHJvY2Vzc19zYW1wbGUoZXZlbnQsIHNlc3Npb24sICZhbCwgTlVMTCkgPCAwKSB7CisJaWYgKGV2ZW50X19wcmVwcm9jZXNzX3NhbXBsZShldmVudCwgc2Vzc2lvbiwgJmFsLCAmZGF0YSwgTlVMTCkgPCAwKSB7CiAJCXByX3dhcm5pbmcoInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLAogCQkJICAgZXZlbnQtPmhlYWRlci50eXBlKTsKIAkJcmV0dXJuIC0xOwpAQCAtNDcsOCArNDQsNiBAQAogCWlmIChhbC5maWx0ZXJlZCB8fCBhbC5zeW0gPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKLQlldmVudF9fcGFyc2Vfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLT5zYW1wbGVfdHlwZSwgJmRhdGEpOwotCiAJaWYgKGhpc3RzX19hZGRfZW50cnkoJnNlc3Npb24tPmhpc3RzLCAmYWwsIGRhdGEucGVyaW9kKSkgewogCQlwcl93YXJuaW5nKCJwcm9ibGVtIGluY3JlbWVudGluZyBzeW1ib2wgcGVyaW9kLCBza2lwcGluZyBldmVudFxuIik7CiAJCXJldHVybiAtMTsKQEAgLTE4NSw4ICsxODAsNiBAQAogCU9QVF9CT09MRUFOKCdmJywgImZvcmNlIiwgJmZvcmNlLCAiZG9uJ3QgY29tcGxhaW4sIGRvIGl0IiksCiAJT1BUX0JPT0xFQU4oJ20nLCAibW9kdWxlcyIsICZzeW1ib2xfY29uZi51c2VfbW9kdWxlcywKIAkJICAgICJsb2FkIG1vZHVsZSBzeW1ib2xzIC0gV0FSTklORzogdXNlIG9ubHkgd2l0aCAtayBhbmQgTElWRSBrZXJuZWwiKSwKLQlPUFRfQk9PTEVBTignUCcsICJmdWxsLXBhdGhzIiwgJnN5bWJvbF9jb25mLmZ1bGxfcGF0aHMsCi0JCSAgICAiRG9uJ3Qgc2hvcnRlbiB0aGUgcGF0aG5hbWVzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGN3ZCIpLAogCU9QVF9TVFJJTkcoJ2QnLCAiZHNvcyIsICZzeW1ib2xfY29uZi5kc29fbGlzdF9zdHIsICJkc29bLGRzby4uLl0iLAogCQkgICAib25seSBjb25zaWRlciBzeW1ib2xzIGluIHRoZXNlIGRzb3MiKSwKIAlPUFRfU1RSSU5HKCdDJywgImNvbW1zIiwgJnN5bWJvbF9jb25mLmNvbW1fbGlzdF9zdHIsICJjb21tWyxjb21tLi4uXSIsCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcHJvYmUuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCmluZGV4IGU0YTRkYTMuLjE5OWQ1ZTEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCkBAIC0xODIsNiArMTgyLDggQEAKIAkJICAgICAiU2hvdyBzb3VyY2UgY29kZSBsaW5lcy4iLCBvcHRfc2hvd19saW5lcyksCiAJT1BUX1NUUklORygnaycsICJ2bWxpbnV4IiwgJnN5bWJvbF9jb25mLnZtbGludXhfbmFtZSwKIAkJICAgImZpbGUiLCAidm1saW51eCBwYXRobmFtZSIpLAorCU9QVF9TVFJJTkcoJ3MnLCAic291cmNlIiwgJnN5bWJvbF9jb25mLnNvdXJjZV9wcmVmaXgsCisJCSAgICJkaXJlY3RvcnkiLCAicGF0aCB0byBrZXJuZWwgc291cmNlIiksCiAjZW5kaWYKIAlPUFRfX0RSWV9SVU4oJnByb2JlX2V2ZW50X2RyeV9ydW4pLAogCU9QVF9JTlRFR0VSKCdcMCcsICJtYXgtcHJvYmVzIiwgJnBhcmFtcy5tYXhfcHJvYmVfcG9pbnRzLApAQCAtMjY1LDQgKzI2NywzIEBACiAJfQogCXJldHVybiAwOwogfQotCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKaW5kZXggNzExNzQ1Zi4uZmY3N2I4MCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYwpAQCAtNDksNyArNDksNiBAQAogc3RhdGljIGludAkJCXJlYWx0aW1lX3ByaW8JCQk9ICAgICAgMDsKIHN0YXRpYyBib29sCQkJcmF3X3NhbXBsZXMJCQk9ICBmYWxzZTsKIHN0YXRpYyBib29sCQkJc3lzdGVtX3dpZGUJCQk9ICBmYWxzZTsKLXN0YXRpYyBpbnQJCQlwcm9maWxlX2NwdQkJCT0gICAgIC0xOwogc3RhdGljIHBpZF90CQkJdGFyZ2V0X3BpZAkJCT0gICAgIC0xOwogc3RhdGljIHBpZF90CQkJdGFyZ2V0X3RpZAkJCT0gICAgIC0xOwogc3RhdGljIHBpZF90CQkJKmFsbF90aWRzCQkJPSAgICAgIE5VTEw7CkBAIC02MSw2ICs2MCw3IEBACiBzdGF0aWMgYm9vbAkJCWluaGVyaXRfc3RhdAkJCT0gIGZhbHNlOwogc3RhdGljIGJvb2wJCQlub19zYW1wbGVzCQkJPSAgZmFsc2U7CiBzdGF0aWMgYm9vbAkJCXNhbXBsZV9hZGRyZXNzCQkJPSAgZmFsc2U7CitzdGF0aWMgYm9vbAkJCW5vX2J1aWxkaWQJCQk9ICBmYWxzZTsKIAogc3RhdGljIGxvbmcJCQlzYW1wbGVzCQkJCT0gICAgICAwOwogc3RhdGljIHU2NAkJCWJ5dGVzX3dyaXR0ZW4JCQk9ICAgICAgMDsKQEAgLTc0LDYgKzc0LDcgQEAKIHN0YXRpYyBvZmZfdAkJCXBvc3RfcHJvY2Vzc2luZ19vZmZzZXQ7CiAKIHN0YXRpYyBzdHJ1Y3QgcGVyZl9zZXNzaW9uCSpzZXNzaW9uOworc3RhdGljIGNvbnN0IGNoYXIJCSpjcHVfbGlzdDsKIAogc3RydWN0IG1tYXBfZGF0YSB7CiAJaW50CQkJY291bnRlcjsKQEAgLTI2OCwxMiArMjY5LDE3IEBACiAJaWYgKGluaGVyaXRfc3RhdCkKIAkJYXR0ci0+aW5oZXJpdF9zdGF0ID0gMTsKIAotCWlmIChzYW1wbGVfYWRkcmVzcykKKwlpZiAoc2FtcGxlX2FkZHJlc3MpIHsKIAkJYXR0ci0+c2FtcGxlX3R5cGUJfD0gUEVSRl9TQU1QTEVfQUREUjsKKwkJYXR0ci0+bW1hcF9kYXRhID0gdHJhY2s7CisJfQogCiAJaWYgKGNhbGxfZ3JhcGgpCiAJCWF0dHItPnNhbXBsZV90eXBlCXw9IFBFUkZfU0FNUExFX0NBTExDSEFJTjsKIAorCWlmIChzeXN0ZW1fd2lkZSkKKwkJYXR0ci0+c2FtcGxlX3R5cGUJfD0gUEVSRl9TQU1QTEVfQ1BVOworCiAJaWYgKHJhd19zYW1wbGVzKSB7CiAJCWF0dHItPnNhbXBsZV90eXBlCXw9IFBFUkZfU0FNUExFX1RJTUU7CiAJCWF0dHItPnNhbXBsZV90eXBlCXw9IFBFUkZfU0FNUExFX1JBVzsKQEAgLTMwMCw3ICszMDYsNyBAQAogCQkJCWRpZSgiUGVybWlzc2lvbiBlcnJvciAtIGFyZSB5b3Ugcm9vdD9cbiIKIAkJCQkJIlx0IENvbnNpZGVyIHR3ZWFraW5nIgogCQkJCQkiIC9wcm9jL3N5cy9rZXJuZWwvcGVyZl9ldmVudF9wYXJhbm9pZC5cbiIpOwotCQkJZWxzZSBpZiAoZXJyID09ICBFTk9ERVYgJiYgcHJvZmlsZV9jcHUgIT0gLTEpIHsKKwkJCWVsc2UgaWYgKGVyciA9PSAgRU5PREVWICYmIGNwdV9saXN0KSB7CiAJCQkJZGllKCJObyBzdWNoIGRldmljZSAtIGRpZCB5b3Ugc3BlY2lmeSIKIAkJCQkJIiBhbiBvdXQtb2YtcmFuZ2UgcHJvZmlsZSBDUFU/XG4iKTsKIAkJCX0KQEAgLTQzMywxNCArNDM5LDE0IEBACiAKIAkJcHJvY2Vzc19idWlsZGlkcygpOwogCQlwZXJmX2hlYWRlcl9fd3JpdGUoJnNlc3Npb24tPmhlYWRlciwgb3V0cHV0LCB0cnVlKTsKKwkJcGVyZl9zZXNzaW9uX19kZWxldGUoc2Vzc2lvbik7CisJCXN5bWJvbF9fZXhpdCgpOwogCX0KIH0KIAogc3RhdGljIHZvaWQgZXZlbnRfX3N5bnRoZXNpemVfZ3Vlc3Rfb3Moc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIHZvaWQgKmRhdGEpCiB7CiAJaW50IGVycjsKLQljaGFyICpndWVzdF9rYWxsc3ltczsKLQljaGFyIHBhdGhbUEFUSF9NQVhdOwogCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnBzZXNzaW9uID0gZGF0YTsKIAogCWlmIChtYWNoaW5lX19pc19ob3N0KG1hY2hpbmUpKQpAQCAtNDYwLDEzICs0NjYsNiBAQAogCQlwcl9lcnIoIkNvdWxkbid0IHJlY29yZCBndWVzdCBrZXJuZWwgWyVkXSdzIHJlZmVyZW5jZSIKIAkJICAgICAgICIgcmVsb2NhdGlvbiBzeW1ib2wuXG4iLCBtYWNoaW5lLT5waWQpOwogCi0JaWYgKG1hY2hpbmVfX2lzX2RlZmF1bHRfZ3Vlc3QobWFjaGluZSkpCi0JCWd1ZXN0X2thbGxzeW1zID0gKGNoYXIgKikgc3ltYm9sX2NvbmYuZGVmYXVsdF9ndWVzdF9rYWxsc3ltczsKLQllbHNlIHsKLQkJc3ByaW50ZihwYXRoLCAiJXMvcHJvYy9rYWxsc3ltcyIsIG1hY2hpbmUtPnJvb3RfZGlyKTsKLQkJZ3Vlc3Rfa2FsbHN5bXMgPSBwYXRoOwotCX0KLQogCS8qCiAJICogV2UgdXNlIF9zdGV4dCBmb3IgZ3Vlc3Qga2VybmVsIGJlY2F1c2UgZ3Vlc3Qga2VybmVsJ3MgL3Byb2Mva2FsbHN5bXMKIAkgKiBoYXZlIG5vIF90ZXh0IHNvbWV0aW1lcy4KQEAgLTU2MSwxMiArNTYwLDE1IEBACiAJaWYgKCFmaWxlX25ldykgewogCQllcnIgPSBwZXJmX2hlYWRlcl9fcmVhZChzZXNzaW9uLCBvdXRwdXQpOwogCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7CisJCQlnb3RvIG91dF9kZWxldGVfc2Vzc2lvbjsKIAl9CiAKIAlpZiAoaGF2ZV90cmFjZXBvaW50cyhhdHRycywgbnJfY291bnRlcnMpKQogCQlwZXJmX2hlYWRlcl9fc2V0X2ZlYXQoJnNlc3Npb24tPmhlYWRlciwgSEVBREVSX1RSQUNFX0lORk8pOwogCisJLyoKKyAJICogcGVyZl9zZXNzaW9uX19kZWxldGUoc2Vzc2lvbikgd2lsbCBiZSBjYWxsZWQgYXQgYXRleGl0X2hlYWRlcigpCisJICovCiAJYXRleGl0KGF0ZXhpdF9oZWFkZXIpOwogCiAJaWYgKGZvcmtzKSB7CkBAIC02MjIsMTAgKzYyNCwxNSBAQAogCQljbG9zZShjaGlsZF9yZWFkeV9waXBlWzBdKTsKIAl9CiAKLQlpZiAoKCFzeXN0ZW1fd2lkZSAmJiBub19pbmhlcml0KSB8fCBwcm9maWxlX2NwdSAhPSAtMSkgewotCQlvcGVuX2NvdW50ZXJzKHByb2ZpbGVfY3B1KTsKKwlucl9jcHVzID0gcmVhZF9jcHVfbWFwKGNwdV9saXN0KTsKKwlpZiAobnJfY3B1cyA8IDEpIHsKKwkJcGVycm9yKCJmYWlsZWQgdG8gY29sbGVjdCBudW1iZXIgb2YgQ1BVc1xuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoIXN5c3RlbV93aWRlICYmIG5vX2luaGVyaXQgJiYgIWNwdV9saXN0KSB7CisJCW9wZW5fY291bnRlcnMoLTEpOwogCX0gZWxzZSB7Ci0JCW5yX2NwdXMgPSByZWFkX2NwdV9tYXAoKTsKIAkJZm9yIChpID0gMDsgaSA8IG5yX2NwdXM7IGkrKykKIAkJCW9wZW5fY291bnRlcnMoY3B1bWFwW2ldKTsKIAl9CkBAIC03MDQsNyArNzExLDcgQEAKIAlpZiAocGVyZl9ndWVzdCkKIAkJcGVyZl9zZXNzaW9uX19wcm9jZXNzX21hY2hpbmVzKHNlc3Npb24sIGV2ZW50X19zeW50aGVzaXplX2d1ZXN0X29zKTsKIAotCWlmICghc3lzdGVtX3dpZGUgJiYgcHJvZmlsZV9jcHUgPT0gLTEpCisJaWYgKCFzeXN0ZW1fd2lkZSkKIAkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHRhcmdldF90aWQsIHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQsCiAJCQkJCSBzZXNzaW9uKTsKIAllbHNlCkBAIC03NjYsNiArNzczLDEwIEBACiAJCWJ5dGVzX3dyaXR0ZW4gLyAyNCk7CiAKIAlyZXR1cm4gMDsKKworb3V0X2RlbGV0ZV9zZXNzaW9uOgorCXBlcmZfc2Vzc2lvbl9fZGVsZXRlKHNlc3Npb24pOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVjb3JkX3VzYWdlW10gPSB7CkBAIC03OTQsOCArODA1LDggQEAKIAkJCSAgICAic3lzdGVtLXdpZGUgY29sbGVjdGlvbiBmcm9tIGFsbCBDUFVzIiksCiAJT1BUX0JPT0xFQU4oJ0EnLCAiYXBwZW5kIiwgJmFwcGVuZF9maWxlLAogCQkJICAgICJhcHBlbmQgdG8gdGhlIG91dHB1dCBmaWxlIHRvIGRvIGluY3JlbWVudGFsIHByb2ZpbGluZyIpLAotCU9QVF9JTlRFR0VSKCdDJywgInByb2ZpbGVfY3B1IiwgJnByb2ZpbGVfY3B1LAotCQkJICAgICJDUFUgdG8gcHJvZmlsZSBvbiIpLAorCU9QVF9TVFJJTkcoJ0MnLCAiY3B1IiwgJmNwdV9saXN0LCAiY3B1IiwKKwkJICAgICJsaXN0IG9mIGNwdXMgdG8gbW9uaXRvciIpLAogCU9QVF9CT09MRUFOKCdmJywgImZvcmNlIiwgJmZvcmNlLAogCQkJIm92ZXJ3cml0ZSBleGlzdGluZyBkYXRhIGZpbGUgKGRlcHJlY2F0ZWQpIiksCiAJT1BUX1U2NCgnYycsICJjb3VudCIsICZ1c2VyX2ludGVydmFsLCAiZXZlbnQgcGVyaW9kIHRvIHNhbXBsZSIpLApAQCAtODE1LDE3ICs4MjYsMTkgQEAKIAkJICAgICJTYW1wbGUgYWRkcmVzc2VzIiksCiAJT1BUX0JPT0xFQU4oJ24nLCAibm8tc2FtcGxlcyIsICZub19zYW1wbGVzLAogCQkgICAgImRvbid0IHNhbXBsZSIpLAorCU9QVF9CT09MRUFOKCdOJywgIm5vLWJ1aWxkaWQtY2FjaGUiLCAmbm9fYnVpbGRpZCwKKwkJICAgICJkbyBub3QgdXBkYXRlIHRoZSBidWlsZGlkIGNhY2hlIiksCiAJT1BUX0VORCgpCiB9OwogCiBpbnQgY21kX3JlY29yZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCBfX3VzZWQpCiB7Ci0JaW50IGksajsKKwlpbnQgaSwgaiwgZXJyID0gLUVOT01FTTsKIAogCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIHJlY29yZF91c2FnZSwKIAkJCSAgICBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKIAlpZiAoIWFyZ2MgJiYgdGFyZ2V0X3BpZCA9PSAtMSAmJiB0YXJnZXRfdGlkID09IC0xICYmCi0JCSFzeXN0ZW1fd2lkZSAmJiBwcm9maWxlX2NwdSA9PSAtMSkKKwkJIXN5c3RlbV93aWRlICYmICFjcHVfbGlzdCkKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKHJlY29yZF91c2FnZSwgb3B0aW9ucyk7CiAKIAlpZiAoZm9yY2UgJiYgYXBwZW5kX2ZpbGUpIHsKQEAgLTgzOSw2ICs4NTIsOCBAQAogCX0KIAogCXN5bWJvbF9faW5pdCgpOworCWlmIChub19idWlsZGlkKQorCQlkaXNhYmxlX2J1aWxkaWRfY2FjaGUoKTsKIAogCWlmICghbnJfY291bnRlcnMpIHsKIAkJbnJfY291bnRlcnMJPSAxOwpAQCAtODU3LDcgKzg3Miw3IEBACiAJfSBlbHNlIHsKIAkJYWxsX3RpZHM9bWFsbG9jKHNpemVvZihwaWRfdCkpOwogCQlpZiAoIWFsbF90aWRzKQotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlnb3RvIG91dF9zeW1ib2xfZXhpdDsKIAogCQlhbGxfdGlkc1swXSA9IHRhcmdldF90aWQ7CiAJCXRocmVhZF9udW0gPSAxOwpAQCAtODY3LDEzICs4ODIsMTMgQEAKIAkJZm9yIChqID0gMDsgaiA8IE1BWF9DT1VOVEVSUzsgaisrKSB7CiAJCQlmZFtpXVtqXSA9IG1hbGxvYyhzaXplb2YoaW50KSp0aHJlYWRfbnVtKTsKIAkJCWlmICghZmRbaV1bal0pCi0JCQkJcmV0dXJuIC1FTk9NRU07CisJCQkJZ290byBvdXRfZnJlZV9mZDsKIAkJfQogCX0KIAlldmVudF9hcnJheSA9IG1hbGxvYygKIAkJc2l6ZW9mKHN0cnVjdCBwb2xsZmQpKk1BWF9OUl9DUFVTKk1BWF9DT1VOVEVSUyp0aHJlYWRfbnVtKTsKIAlpZiAoIWV2ZW50X2FycmF5KQotCQlyZXR1cm4gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZV9mZDsKIAogCWlmICh1c2VyX2ludGVydmFsICE9IFVMTE9OR19NQVgpCiAJCWRlZmF1bHRfaW50ZXJ2YWwgPSB1c2VyX2ludGVydmFsOwpAQCAtODg5LDggKzkwNCwyMiBAQAogCQlkZWZhdWx0X2ludGVydmFsID0gZnJlcTsKIAl9IGVsc2UgewogCQlmcHJpbnRmKHN0ZGVyciwgImZyZXF1ZW5jeSBhbmQgY291bnQgYXJlIHplcm8sIGFib3J0aW5nXG4iKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dF9mcmVlX2V2ZW50X2FycmF5OwogCX0KIAotCXJldHVybiBfX2NtZF9yZWNvcmQoYXJnYywgYXJndik7CisJZXJyID0gX19jbWRfcmVjb3JkKGFyZ2MsIGFyZ3YpOworCitvdXRfZnJlZV9ldmVudF9hcnJheToKKwlmcmVlKGV2ZW50X2FycmF5KTsKK291dF9mcmVlX2ZkOgorCWZvciAoaSA9IDA7IGkgPCBNQVhfTlJfQ1BVUzsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBNQVhfQ09VTlRFUlM7IGorKykKKwkJCWZyZWUoZmRbaV1bal0pOworCX0KKwlmcmVlKGFsbF90aWRzKTsKKwlhbGxfdGlkcyA9IE5VTEw7CitvdXRfc3ltYm9sX2V4aXQ6CisJc3ltYm9sX19leGl0KCk7CisJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwppbmRleCAzNTkyMDU3Li4yZjRiOTI5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIAkJZ290byBvdXRfZnJlZV9zeW1zOwogCWVyciA9IDA7CiAJaWYgKHN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4pIHsKLQkJZXJyID0gYXBwZW5kX2NoYWluKGhlLT5jYWxsY2hhaW4sIGRhdGEtPmNhbGxjaGFpbiwgc3ltcyk7CisJCWVyciA9IGFwcGVuZF9jaGFpbihoZS0+Y2FsbGNoYWluLCBkYXRhLT5jYWxsY2hhaW4sIHN5bXMsIGRhdGEtPnBlcmlvZCk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dF9mcmVlX3N5bXM7CiAJfQpAQCAtMTU1LDMwICsxNTUsNyBAQAogCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOwogCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHI7CiAKLQlldmVudF9fcGFyc2Vfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLT5zYW1wbGVfdHlwZSwgJmRhdGEpOwotCi0JZHVtcF9wcmludGYoIihJUCwgJWQpOiAlZC8lZDogJSNMeCBwZXJpb2Q6ICVMZFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAotCQkgICAgZGF0YS5waWQsIGRhdGEudGlkLCBkYXRhLmlwLCBkYXRhLnBlcmlvZCk7Ci0KLQlpZiAoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9DQUxMQ0hBSU4pIHsKLQkJdW5zaWduZWQgaW50IGk7Ci0KLQkJZHVtcF9wcmludGYoIi4uLiBjaGFpbjogbnI6JUx1XG4iLCBkYXRhLmNhbGxjaGFpbi0+bnIpOwotCi0JCWlmICghaXBfY2FsbGNoYWluX192YWxpZChkYXRhLmNhbGxjaGFpbiwgZXZlbnQpKSB7Ci0JCQlwcl9kZWJ1ZygiY2FsbC1jaGFpbiBwcm9ibGVtIHdpdGggZXZlbnQsICIKLQkJCQkgInNraXBwaW5nIGl0LlxuIik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCWlmIChkdW1wX3RyYWNlKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgZGF0YS5jYWxsY2hhaW4tPm5yOyBpKyspCi0JCQkJZHVtcF9wcmludGYoIi4uLi4uICUyZDogJTAxNkx4XG4iLAotCQkJCQkgICAgaSwgZGF0YS5jYWxsY2hhaW4tPmlwc1tpXSk7Ci0JCX0KLQl9Ci0KLQlpZiAoZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLCAmYWwsIE5VTEwpIDwgMCkgeworCWlmIChldmVudF9fcHJlcHJvY2Vzc19zYW1wbGUoZXZlbnQsIHNlc3Npb24sICZhbCwgJmRhdGEsIE5VTEwpIDwgMCkgewogCQlmcHJpbnRmKHN0ZGVyciwgInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLAogCQkJZXZlbnQtPmhlYWRlci50eXBlKTsKIAkJcmV0dXJuIC0xOwpAQCAtNDY0LDggKzQ0MSw2IEBACiAJCSAgICJwcmV0dHkgcHJpbnRpbmcgc3R5bGUga2V5OiBub3JtYWwgcmF3IiksCiAJT1BUX1NUUklORygncycsICJzb3J0IiwgJnNvcnRfb3JkZXIsICJrZXlbLGtleTIuLi5dIiwKIAkJICAgInNvcnQgYnkga2V5KHMpOiBwaWQsIGNvbW0sIGRzbywgc3ltYm9sLCBwYXJlbnQiKSwKLQlPUFRfQk9PTEVBTignUCcsICJmdWxsLXBhdGhzIiwgJnN5bWJvbF9jb25mLmZ1bGxfcGF0aHMsCi0JCSAgICAiRG9uJ3Qgc2hvcnRlbiB0aGUgcGF0aG5hbWVzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGN3ZCIpLAogCU9QVF9CT09MRUFOKDAsICJzaG93Y3B1dXRpbGl6YXRpb24iLCAmc3ltYm9sX2NvbmYuc2hvd19jcHVfdXRpbGl6YXRpb24sCiAJCSAgICAiU2hvdyBzYW1wbGUgcGVyY2VudGFnZSBmb3IgZGlmZmVyZW50IGNwdSBtb2RlcyIpLAogCU9QVF9TVFJJTkcoJ3AnLCAicGFyZW50IiwgJnBhcmVudF9wYXR0ZXJuLCAicmVnZXgiLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKaW5kZXggOWEzOWNhMy4uYTZiNGQ0NCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCkBAIC02OSw3ICs2OSw3IEBACiB9OwogCiBzdGF0aWMgYm9vbAkJCXN5c3RlbV93aWRlCQkJPSAgZmFsc2U7Ci1zdGF0aWMgdW5zaWduZWQgaW50CQlucl9jcHVzCQkJCT0gIDA7CitzdGF0aWMgaW50CQkJbnJfY3B1cwkJCQk9ICAwOwogc3RhdGljIGludAkJCXJ1bl9pZHgJCQkJPSAgMDsKIAogc3RhdGljIGludAkJCXJ1bl9jb3VudAkJCT0gIDE7CkBAIC04Miw2ICs4Miw3IEBACiBzdGF0aWMgcGlkX3QJCQljaGlsZF9waWQJCQk9IC0xOwogc3RhdGljIGJvb2wJCQludWxsX3J1bgkJCT0gIGZhbHNlOwogc3RhdGljIGJvb2wJCQliaWdfbnVtCQkJCT0gIGZhbHNlOworc3RhdGljIGNvbnN0IGNoYXIJCSpjcHVfbGlzdDsKIAogCiBzdGF0aWMgaW50CQkJKmZkW01BWF9OUl9DUFVTXVtNQVhfQ09VTlRFUlNdOwpAQCAtMTU4LDcgKzE1OSw3IEBACiAJCQkJICAgIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfUlVOTklORzsKIAogCWlmIChzeXN0ZW1fd2lkZSkgewotCQl1bnNpZ25lZCBpbnQgY3B1OworCQlpbnQgY3B1OwogCiAJCWZvciAoY3B1ID0gMDsgY3B1IDwgbnJfY3B1czsgY3B1KyspIHsKIAkJCWZkW2NwdV1bY291bnRlcl1bMF0gPSBzeXNfcGVyZl9ldmVudF9vcGVuKGF0dHIsCkBAIC0yMDgsNyArMjA5LDcgQEAKIHN0YXRpYyB2b2lkIHJlYWRfY291bnRlcihpbnQgY291bnRlcikKIHsKIAl1NjQgY291bnRbM10sIHNpbmdsZV9jb3VudFszXTsKLQl1bnNpZ25lZCBpbnQgY3B1OworCWludCBjcHU7CiAJc2l6ZV90IHJlcywgbnY7CiAJaW50IHNjYWxlZDsKIAlpbnQgaSwgdGhyZWFkOwpAQCAtNTQyLDYgKzU0Myw4IEBACiAJCSAgICAibnVsbCBydW4gLSBkb250IHN0YXJ0IGFueSBjb3VudGVycyIpLAogCU9QVF9CT09MRUFOKCdCJywgImJpZy1udW0iLCAmYmlnX251bSwKIAkJICAgICJwcmludCBsYXJnZSBudW1iZXJzIHdpdGggdGhvdXNhbmRzXCcgc2VwYXJhdG9ycyIpLAorCU9QVF9TVFJJTkcoJ0MnLCAiY3B1IiwgJmNwdV9saXN0LCAiY3B1IiwKKwkJICAgICJsaXN0IG9mIGNwdXMgdG8gbW9uaXRvciBpbiBzeXN0ZW0td2lkZSIpLAogCU9QVF9FTkQoKQogfTsKIApAQCAtNTY2LDEwICs1NjksMTMgQEAKIAl9CiAKIAlpZiAoc3lzdGVtX3dpZGUpCi0JCW5yX2NwdXMgPSByZWFkX2NwdV9tYXAoKTsKKwkJbnJfY3B1cyA9IHJlYWRfY3B1X21hcChjcHVfbGlzdCk7CiAJZWxzZQogCQlucl9jcHVzID0gMTsKIAorCWlmIChucl9jcHVzIDwgMSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHN0YXRfdXNhZ2UsIG9wdGlvbnMpOworCiAJaWYgKHRhcmdldF9waWQgIT0gLTEpIHsKIAkJdGFyZ2V0X3RpZCA9IHRhcmdldF9waWQ7CiAJCXRocmVhZF9udW0gPSBmaW5kX2FsbF90aWQodGFyZ2V0X3BpZCwgJmFsbF90aWRzKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYwppbmRleCA1YTUyZWQ5Li41MTYxNjE5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdGltZWNoYXJ0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jCkBAIC0zMDAsOCArMzAwLDkgQEAKIAogc3RydWN0IHBvd2VyX2VudHJ5IHsKIAlzdHJ1Y3QgdHJhY2VfZW50cnkgdGU7Ci0JczY0CXR5cGU7Ci0JczY0CXZhbHVlOworCXU2NAl0eXBlOworCXU2NAl2YWx1ZTsKKwl1NjQJY3B1X2lkOwogfTsKIAogI2RlZmluZSBUQVNLX0NPTU1fTEVOIDE2CkBAIC00OTgsMTMgKzQ5OSwxMyBAQAogCQkJcmV0dXJuIDA7CiAKIAkJaWYgKHN0cmNtcChldmVudF9zdHIsICJwb3dlcjpwb3dlcl9zdGFydCIpID09IDApCi0JCQljX3N0YXRlX3N0YXJ0KGRhdGEuY3B1LCBkYXRhLnRpbWUsIHBlLT52YWx1ZSk7CisJCQljX3N0YXRlX3N0YXJ0KHBlLT5jcHVfaWQsIGRhdGEudGltZSwgcGUtPnZhbHVlKTsKIAogCQlpZiAoc3RyY21wKGV2ZW50X3N0ciwgInBvd2VyOnBvd2VyX2VuZCIpID09IDApCi0JCQljX3N0YXRlX2VuZChkYXRhLmNwdSwgZGF0YS50aW1lKTsKKwkJCWNfc3RhdGVfZW5kKHBlLT5jcHVfaWQsIGRhdGEudGltZSk7CiAKIAkJaWYgKHN0cmNtcChldmVudF9zdHIsICJwb3dlcjpwb3dlcl9mcmVxdWVuY3kiKSA9PSAwKQotCQkJcF9zdGF0ZV9jaGFuZ2UoZGF0YS5jcHUsIGRhdGEudGltZSwgcGUtPnZhbHVlKTsKKwkJCXBfc3RhdGVfY2hhbmdlKHBlLT5jcHVfaWQsIGRhdGEudGltZSwgcGUtPnZhbHVlKTsKIAogCQlpZiAoc3RyY21wKGV2ZW50X3N0ciwgInNjaGVkOnNjaGVkX3dha2V1cCIpID09IDApCiAJCQlzY2hlZF93YWtldXAoZGF0YS5jcHUsIGRhdGEudGltZSwgZGF0YS5waWQsIHRlKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYwppbmRleCBhNjZmNDI3Li5iNTEzZTQwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCkBAIC0xMDIsNiArMTAyLDcgQEAKIHN0YXRpYyBpbnQJCQlzeW1fcGNudF9maWx0ZXIJCQk9ICAgICAgNTsKIHN0YXRpYyBpbnQJCQlzeW1fY291bnRlcgkJCT0gICAgICAwOwogc3RhdGljIGludAkJCWRpc3BsYXlfd2VpZ2h0ZWQJCT0gICAgIC0xOworc3RhdGljIGNvbnN0IGNoYXIJCSpjcHVfbGlzdDsKIAogLyoKICAqIFN5bWJvbHMKQEAgLTk4Miw2ICs5ODMsNyBAQAogCXU2NCBpcCA9IHNlbGYtPmlwLmlwOwogCXN0cnVjdCBzeW1fZW50cnkgKnN5bWU7CiAJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7CisJc3RydWN0IHNhbXBsZV9kYXRhIGRhdGE7CiAJc3RydWN0IG1hY2hpbmUgKm1hY2hpbmU7CiAJdTggb3JpZ2luID0gc2VsZi0+aGVhZGVyLm1pc2MgJiBQRVJGX1JFQ09SRF9NSVNDX0NQVU1PREVfTUFTSzsKIApAQCAtMTAyNCw3ICsxMDI2LDggQEAKIAlpZiAoc2VsZi0+aGVhZGVyLm1pc2MgJiBQRVJGX1JFQ09SRF9NSVNDX0VYQUNUX0lQKQogCQlleGFjdF9zYW1wbGVzKys7CiAKLQlpZiAoZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlKHNlbGYsIHNlc3Npb24sICZhbCwgc3ltYm9sX2ZpbHRlcikgPCAwIHx8CisJaWYgKGV2ZW50X19wcmVwcm9jZXNzX3NhbXBsZShzZWxmLCBzZXNzaW9uLCAmYWwsICZkYXRhLAorCQkJCSAgICAgc3ltYm9sX2ZpbHRlcikgPCAwIHx8CiAJICAgIGFsLmZpbHRlcmVkKQogCQlyZXR1cm47CiAKQEAgLTEwNzksMjYgKzEwODIsNiBAQAogCX0KIH0KIAotc3RhdGljIGludCBldmVudF9fcHJvY2VzcyhldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKLXsKLQlzd2l0Y2ggKGV2ZW50LT5oZWFkZXIudHlwZSkgewotCWNhc2UgUEVSRl9SRUNPUkRfQ09NTToKLQkJZXZlbnRfX3Byb2Nlc3NfY29tbShldmVudCwgc2Vzc2lvbik7Ci0JCWJyZWFrOwotCWNhc2UgUEVSRl9SRUNPUkRfTU1BUDoKLQkJZXZlbnRfX3Byb2Nlc3NfbW1hcChldmVudCwgc2Vzc2lvbik7Ci0JCWJyZWFrOwotCWNhc2UgUEVSRl9SRUNPUkRfRk9SSzoKLQljYXNlIFBFUkZfUkVDT1JEX0VYSVQ6Ci0JCWV2ZW50X19wcm9jZXNzX3Rhc2soZXZlbnQsIHNlc3Npb24pOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RydWN0IG1tYXBfZGF0YSB7CiAJaW50CQkJY291bnRlcjsKIAl2b2lkCQkJKmJhc2U7CkBAIC0xMzUxLDggKzEzMzQsOCBAQAogCQkgICAgInByb2ZpbGUgZXZlbnRzIG9uIGV4aXN0aW5nIHRocmVhZCBpZCIpLAogCU9QVF9CT09MRUFOKCdhJywgImFsbC1jcHVzIiwgJnN5c3RlbV93aWRlLAogCQkJICAgICJzeXN0ZW0td2lkZSBjb2xsZWN0aW9uIGZyb20gYWxsIENQVXMiKSwKLQlPUFRfSU5URUdFUignQycsICJDUFUiLCAmcHJvZmlsZV9jcHUsCi0JCSAgICAiQ1BVIHRvIHByb2ZpbGUgb24iKSwKKwlPUFRfU1RSSU5HKCdDJywgImNwdSIsICZjcHVfbGlzdCwgImNwdSIsCisJCSAgICAibGlzdCBvZiBjcHVzIHRvIG1vbml0b3IiKSwKIAlPUFRfU1RSSU5HKCdrJywgInZtbGludXgiLCAmc3ltYm9sX2NvbmYudm1saW51eF9uYW1lLAogCQkgICAiZmlsZSIsICJ2bWxpbnV4IHBhdGhuYW1lIiksCiAJT1BUX0JPT0xFQU4oJ0snLCAiaGlkZV9rZXJuZWxfc3ltYm9scyIsICZoaWRlX2tlcm5lbF9zeW1ib2xzLApAQCAtMTQyOCwxMCArMTQxMSwxMCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIENQVSBhbmQgUElEIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgKi8KLQlpZiAodGFyZ2V0X3RpZCA+IDAgJiYgcHJvZmlsZV9jcHUgIT0gLTEpIHsKKwlpZiAodGFyZ2V0X3RpZCA+IDAgJiYgY3B1X2xpc3QpIHsKIAkJcHJpbnRmKCJXQVJOSU5HOiBQSUQgc3dpdGNoIG92ZXJyaWRpbmcgQ1BVXG4iKTsKIAkJc2xlZXAoMSk7Ci0JCXByb2ZpbGVfY3B1ID0gLTE7CisJCWNwdV9saXN0ID0gTlVMTDsKIAl9CiAKIAlpZiAoIW5yX2NvdW50ZXJzKQpAQCAtMTQ2OSwxMCArMTQ1MiwxMyBAQAogCQlhdHRyc1tjb3VudGVyXS5zYW1wbGVfcGVyaW9kID0gZGVmYXVsdF9pbnRlcnZhbDsKIAl9CiAKLQlpZiAodGFyZ2V0X3RpZCAhPSAtMSB8fCBwcm9maWxlX2NwdSAhPSAtMSkKKwlpZiAodGFyZ2V0X3RpZCAhPSAtMSkKIAkJbnJfY3B1cyA9IDE7CiAJZWxzZQotCQlucl9jcHVzID0gcmVhZF9jcHVfbWFwKCk7CisJCW5yX2NwdXMgPSByZWFkX2NwdV9tYXAoY3B1X2xpc3QpOworCisJaWYgKG5yX2NwdXMgPCAxKQorCQl1c2FnZV93aXRoX29wdGlvbnModG9wX3VzYWdlLCBvcHRpb25zKTsKIAogCWdldF90ZXJtX2RpbWVuc2lvbnMoJndpbnNpemUpOwogCWlmIChwcmludF9lbnRyaWVzID09IDApIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKaW5kZXggZGRkZjNmMC4uMjk0ZGE3MiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKQEAgLTExLDggKzExLDkgQEAKIAogc3RhdGljIGNoYXIgY29uc3QJCSpzY3JpcHRfbmFtZTsKIHN0YXRpYyBjaGFyIGNvbnN0CQkqZ2VuZXJhdGVfc2NyaXB0X2xhbmc7Ci1zdGF0aWMgYm9vbAkJCWRlYnVnX29yZGVyaW5nOworc3RhdGljIGJvb2wJCQlkZWJ1Z19tb2RlOwogc3RhdGljIHU2NAkJCWxhc3RfdGltZXN0YW1wOworc3RhdGljIHU2NAkJCW5yX3Vub3JkZXJlZDsKIAogc3RhdGljIGludCBkZWZhdWx0X3N0YXJ0X3NjcmlwdChjb25zdCBjaGFyICpzY3JpcHQgX191bnVzZWQsCiAJCQkJaW50IGFyZ2MgX191bnVzZWQsCkBAIC05MSwxMyArOTIsMTUgQEAKIAl9CiAKIAlpZiAoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcpIHsKLQkJaWYgKGRlYnVnX29yZGVyaW5nKSB7CisJCWlmIChkZWJ1Z19tb2RlKSB7CiAJCQlpZiAoZGF0YS50aW1lIDwgbGFzdF90aW1lc3RhbXApIHsKIAkJCQlwcl9lcnIoIlNhbXBsZXMgbWlzb3JkZXJlZCwgcHJldmlvdXM6ICVsbHUgIgogCQkJCQkidGhpczogJWxsdVxuIiwgbGFzdF90aW1lc3RhbXAsCiAJCQkJCWRhdGEudGltZSk7CisJCQkJbnJfdW5vcmRlcmVkKys7CiAJCQl9CiAJCQlsYXN0X3RpbWVzdGFtcCA9IGRhdGEudGltZTsKKwkJCXJldHVybiAwOwogCQl9CiAJCS8qCiAJCSAqIEZJWE1FOiBiZXR0ZXIgcmVzb2x2ZSBmcm9tIHBpZCBmcm9tIHRoZSBzdHJ1Y3QgdHJhY2VfZW50cnkKQEAgLTExMyw2ICsxMTYsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHU2NCBucl9sb3N0OworCitzdGF0aWMgaW50IHByb2Nlc3NfbG9zdF9ldmVudChldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiBfX3VzZWQpCit7CisJbnJfbG9zdCArPSBldmVudC0+bG9zdC5sb3N0OworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgZXZlbnRfb3BzID0gewogCS5zYW1wbGUJPSBwcm9jZXNzX3NhbXBsZV9ldmVudCwKIAkuY29tbQk9IGV2ZW50X19wcm9jZXNzX2NvbW0sCkBAIC0xMjAsNiArMTMyLDcgQEAKIAkuZXZlbnRfdHlwZSA9IGV2ZW50X19wcm9jZXNzX2V2ZW50X3R5cGUsCiAJLnRyYWNpbmdfZGF0YSA9IGV2ZW50X19wcm9jZXNzX3RyYWNpbmdfZGF0YSwKIAkuYnVpbGRfaWQgPSBldmVudF9fcHJvY2Vzc19idWlsZF9pZCwKKwkubG9zdCA9IHByb2Nlc3NfbG9zdF9ldmVudCwKIAkub3JkZXJlZF9zYW1wbGVzID0gdHJ1ZSwKIH07CiAKQEAgLTEzMiw5ICsxNDUsMTggQEAKIAogc3RhdGljIGludCBfX2NtZF90cmFjZShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogeworCWludCByZXQ7CisKIAlzaWduYWwoU0lHSU5ULCBzaWdfaGFuZGxlcik7CiAKLQlyZXR1cm4gcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzZXNzaW9uLCAmZXZlbnRfb3BzKTsKKwlyZXQgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZldmVudF9vcHMpOworCisJaWYgKGRlYnVnX21vZGUpIHsKKwkJcHJfZXJyKCJNaXNvcmRlcmVkIHRpbWVzdGFtcHM6ICVsbHVcbiIsIG5yX3Vub3JkZXJlZCk7CisJCXByX2VycigiTG9zdCBldmVudHM6ICVsbHVcbiIsIG5yX2xvc3QpOworCX0KKworCXJldHVybiByZXQ7CiB9CiAKIHN0cnVjdCBzY3JpcHRfc3BlYyB7CkBAIC01NDQsOCArNTY2LDggQEAKIAkJICAgImdlbmVyYXRlIHBlcmYtdHJhY2UueHggc2NyaXB0IGluIHNwZWNpZmllZCBsYW5ndWFnZSIpLAogCU9QVF9TVFJJTkcoJ2knLCAiaW5wdXQiLCAmaW5wdXRfbmFtZSwgImZpbGUiLAogCQkgICAgImlucHV0IGZpbGUgbmFtZSIpLAotCU9QVF9CT09MRUFOKCdkJywgImRlYnVnLW9yZGVyaW5nIiwgJmRlYnVnX29yZGVyaW5nLAotCQkgICAiY2hlY2sgdGhhdCBzYW1wbGVzIHRpbWUgb3JkZXJpbmcgaXMgbW9ub3RvbmljIiksCisJT1BUX0JPT0xFQU4oJ2QnLCAiZGVidWctbW9kZSIsICZkZWJ1Z19tb2RlLAorCQkgICAiZG8gdmFyaW91cyBjaGVja3MgbGlrZSBzYW1wbGVzIG9yZGVyaW5nIGFuZCBsb3N0IGV2ZW50cyIpLAogCiAJT1BUX0VORCgpCiB9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9mZWF0dXJlLXRlc3RzLm1hayBiL3Rvb2xzL3BlcmYvZmVhdHVyZS10ZXN0cy5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRiNjhlNgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvZmVhdHVyZS10ZXN0cy5tYWsKQEAgLTAsMCArMSwxMTkgQEAKK2RlZmluZSBTT1VSQ0VfSEVMTE8KKyNpbmNsdWRlIDxzdGRpby5oPgoraW50IG1haW4odm9pZCkKK3sKKwlyZXR1cm4gcHV0cyhcImhpXCIpOworfQorZW5kZWYKKworaWZuZGVmIE5PX0RXQVJGCitkZWZpbmUgU09VUkNFX0RXQVJGCisjaW5jbHVkZSA8ZHdhcmYuaD4KKyNpbmNsdWRlIDxsaWJkdy5oPgorI2luY2x1ZGUgPHZlcnNpb24uaD4KKyNpZm5kZWYgX0VMRlVUSUxTX1BSRVJFUQorI2Vycm9yCisjZW5kaWYKKworaW50IG1haW4odm9pZCkKK3sKKwlEd2FyZiAqZGJnID0gZHdhcmZfYmVnaW4oMCwgRFdBUkZfQ19SRUFEKTsKKwlyZXR1cm4gKGxvbmcpZGJnOworfQorZW5kZWYKK2VuZGlmCisKK2RlZmluZSBTT1VSQ0VfTElCRUxGCisjaW5jbHVkZSA8bGliZWxmLmg+CisKK2ludCBtYWluKHZvaWQpCit7CisJRWxmICplbGYgPSBlbGZfYmVnaW4oMCwgRUxGX0NfUkVBRCwgMCk7CisJcmV0dXJuIChsb25nKWVsZjsKK30KK2VuZGVmCisKK2RlZmluZSBTT1VSQ0VfR0xJQkMKKyNpbmNsdWRlIDxnbnUvbGliYy12ZXJzaW9uLmg+CisKK2ludCBtYWluKHZvaWQpCit7CisJY29uc3QgY2hhciAqdmVyc2lvbiA9IGdudV9nZXRfbGliY192ZXJzaW9uKCk7CisJcmV0dXJuIChsb25nKXZlcnNpb247Cit9CitlbmRlZgorCitkZWZpbmUgU09VUkNFX0VMRl9NTUFQCisjaW5jbHVkZSA8bGliZWxmLmg+CitpbnQgbWFpbih2b2lkKQoreworCUVsZiAqZWxmID0gZWxmX2JlZ2luKDAsIEVMRl9DX1JFQURfTU1BUCwgMCk7CisJcmV0dXJuIChsb25nKWVsZjsKK30KK2VuZGVmCisKK2lmbmRlZiBOT19ORVdUCitkZWZpbmUgU09VUkNFX05FV1QKKyNpbmNsdWRlIDxuZXd0Lmg+CisKK2ludCBtYWluKHZvaWQpCit7CisJbmV3dEluaXQoKTsKKwluZXd0Q2xzKCk7CisJcmV0dXJuIG5ld3RGaW5pc2hlZCgpOworfQorZW5kZWYKK2VuZGlmCisKK2lmbmRlZiBOT19MSUJQRVJMCitkZWZpbmUgU09VUkNFX1BFUkxfRU1CRUQKKyNpbmNsdWRlIDxFWFRFUk4uaD4KKyNpbmNsdWRlIDxwZXJsLmg+CisKK2ludCBtYWluKHZvaWQpCit7CitwZXJsX2FsbG9jKCk7CityZXR1cm4gMDsKK30KK2VuZGVmCitlbmRpZgorCitpZm5kZWYgTk9fTElCUFlUSE9OCitkZWZpbmUgU09VUkNFX1BZVEhPTl9FTUJFRAorI2luY2x1ZGUgPFB5dGhvbi5oPgorCitpbnQgbWFpbih2b2lkKQoreworCVB5X0luaXRpYWxpemUoKTsKKwlyZXR1cm4gMDsKK30KK2VuZGVmCitlbmRpZgorCitkZWZpbmUgU09VUkNFX0JGRAorI2luY2x1ZGUgPGJmZC5oPgorCitpbnQgbWFpbih2b2lkKQoreworCWJmZF9kZW1hbmdsZSgwLCAwLCAwKTsKKwlyZXR1cm4gMDsKK30KK2VuZGVmCisKK2RlZmluZSBTT1VSQ0VfQ1BMVVNfREVNQU5HTEUKK2V4dGVybiBjaGFyICpjcGx1c19kZW1hbmdsZShjb25zdCBjaGFyICosIGludCk7CisKK2ludCBtYWluKHZvaWQpCit7CisJY3BsdXNfZGVtYW5nbGUoMCwgMCk7CisJcmV0dXJuIDA7Cit9CitlbmRlZgorCisjIHRyeS1jYworIyBVc2FnZTogb3B0aW9uID0gJChjYWxsIHRyeS1jYywgc291cmNlLXRvLWJ1aWxkLCBjYy1vcHRpb25zKQordHJ5LWNjID0gJChzaGVsbCBzaCAtYwkJCQkJCSAgXAorCSdUTVA9IiQoVE1QT1VUKS4kJCQkIjsJCQkgCQkgIFwKKwkgZWNobyAiJCgxKSIgfAkJCQkJCSAgXAorCSAkKENDKSAteCBjIC0gJCgyKSAtbyAiJCRUTVAiID4gL2Rldi9udWxsIDI+JjEgJiYgZWNobyB5OyBcCisJIHJtIC1mICIkJFRNUCInKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9wZXJmLWFyY2hpdmUuc2ggYi90b29scy9wZXJmL3BlcmYtYXJjaGl2ZS5zaAppbmRleCAyZTdhNGY0Li42NzdlNTlkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3BlcmYtYXJjaGl2ZS5zaAorKysgYi90b29scy9wZXJmL3BlcmYtYXJjaGl2ZS5zaApAQCAtNyw3ICs3LDE3IEBACiAJUEVSRl9EQVRBPSQxCiBmaQogCi1ERUJVR0RJUj1+Ly5kZWJ1Zy8KKyMKKyMgUEVSRl9CVUlMRElEX0RJUiBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXQgYnkgcGVyZgorIyBwYXRoIHRvIGJ1aWxkaWQgZGlyZWN0b3J5LCBkZWZhdWx0IHRvICRIT01FLy5kZWJ1ZworIworaWYgWyAteiAkUEVSRl9CVUlMRElEX0RJUiBdOyB0aGVuCisJUEVSRl9CVUlMRElEX0RJUj1+Ly5kZWJ1Zy8KK2Vsc2UKKyAgICAgICAgIyBhcHBlbmQgLyB0byBtYWtlIHN1YnN0aXR1dGlvbnMgd29yaworICAgICAgICBQRVJGX0JVSUxESURfRElSPSRQRVJGX0JVSUxESURfRElSLworZmkKKwogQlVJTERJRFM9JChta3RlbXAgL3RtcC9wZXJmLWFyY2hpdmUtYnVpbGRpZHMuWFhYWFhYKQogTk9CVUlMRElEPTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKIApAQCAtMjIsMTMgKzMyLDEzIEBACiAKIGN1dCAtZCAnICcgLWYgMSAkQlVJTERJRFMgfCBcCiB3aGlsZSByZWFkIGJ1aWxkX2lkIDsgZG8KLQlsaW5rbmFtZT0kREVCVUdESVIuYnVpbGQtaWQvJHtidWlsZF9pZDowOjJ9LyR7YnVpbGRfaWQ6Mn0KKwlsaW5rbmFtZT0kUEVSRl9CVUlMRElEX0RJUi5idWlsZC1pZC8ke2J1aWxkX2lkOjA6Mn0vJHtidWlsZF9pZDoyfQogCWZpbGVuYW1lPSQocmVhZGxpbmsgLWYgJGxpbmtuYW1lKQotCWVjaG8gJHtsaW5rbmFtZSMkREVCVUdESVJ9ID4+ICRNQU5JRkVTVAotCWVjaG8gJHtmaWxlbmFtZSMkREVCVUdESVJ9ID4+ICRNQU5JRkVTVAorCWVjaG8gJHtsaW5rbmFtZSMkUEVSRl9CVUlMRElEX0RJUn0gPj4gJE1BTklGRVNUCisJZWNobyAke2ZpbGVuYW1lIyRQRVJGX0JVSUxESURfRElSfSA+PiAkTUFOSUZFU1QKIGRvbmUKIAotdGFyIGNmaiAkUEVSRl9EQVRBLnRhci5iejIgLUMgJERFQlVHRElSIC1UICRNQU5JRkVTVAordGFyIGNmaiAkUEVSRl9EQVRBLnRhci5iejIgLUMgJFBFUkZfQlVJTERJRF9ESVIgLVQgJE1BTklGRVNUCiBybSAtZiAkTUFOSUZFU1QgJEJVSUxESURTCiBlY2hvIC1lICJOb3cgcGxlYXNlIHJ1bjpcbiIKIGVjaG8gLWUgIiQgdGFyIHh2ZiAkUEVSRl9EQVRBLnRhci5iejIgLUMgfi8uZGVidWdcbiIKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvcGVyZi5jIGIvdG9vbHMvcGVyZi9wZXJmLmMKaW5kZXggNmU0ODcxMS4uY2RkNmMwMyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9wZXJmLmMKKysrIGIvdG9vbHMvcGVyZi9wZXJmLmMKQEAgLTQ1OCw2ICs0NTgsOCBAQAogCWhhbmRsZV9vcHRpb25zKCZhcmd2LCAmYXJnYywgTlVMTCk7CiAJY29tbWl0X3BhZ2VyX2Nob2ljZSgpOwogCXNldF9kZWJ1Z2ZzX3BhdGgoKTsKKwlzZXRfYnVpbGRpZF9kaXIoKTsKKwogCWlmIChhcmdjID4gMCkgewogCQlpZiAoIXByZWZpeGNtcChhcmd2WzBdLCAiLS0iKSkKIAkJCWFyZ3ZbMF0gKz0gMjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL0NvcmUucHkgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZS9Db3JlLnB5CmluZGV4IDFkYzQ2NGUuLmFhZDc1MjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL0NvcmUucHkKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvQ29yZS5weQpAQCAtODksMyArODksMzMgQEAKIAkgICAgdmFsdWUgJj0gfmlkeAogCiAgICAgcmV0dXJuIHN0cmluZworCisKK2RlZiB0YXNrU3RhdGUoc3RhdGUpOgorCXN0YXRlcyA9IHsKKwkJMCA6ICJSIiwKKwkJMSA6ICJTIiwKKwkJMiA6ICJEIiwKKwkJNjQ6ICJERUFEIgorCX0KKworCWlmIHN0YXRlIG5vdCBpbiBzdGF0ZXM6CisJCXJldHVybiAiVW5rbm93biIKKworCXJldHVybiBzdGF0ZXNbc3RhdGVdCisKKworY2xhc3MgRXZlbnRIZWFkZXJzOgorCWRlZiBfX2luaXRfXyhzZWxmLCBjb21tb25fY3B1LCBjb21tb25fc2VjcywgY29tbW9uX25zZWNzLAorCQkgICAgIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tKToKKwkJc2VsZi5jcHUgPSBjb21tb25fY3B1CisJCXNlbGYuc2VjcyA9IGNvbW1vbl9zZWNzCisJCXNlbGYubnNlY3MgPSBjb21tb25fbnNlY3MKKwkJc2VsZi5waWQgPSBjb21tb25fcGlkCisJCXNlbGYuY29tbSA9IGNvbW1vbl9jb21tCisKKwlkZWYgdHMoc2VsZik6CisJCXJldHVybiAoc2VsZi5zZWNzICogKDEwICoqIDkpKSArIHNlbGYubnNlY3MKKworCWRlZiB0c19mb3JtYXQoc2VsZik6CisJCXJldHVybiAiJWQuJWQiICUgKHNlbGYuc2VjcywgaW50KHNlbGYubnNlY3MgLyAxMDAwKSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL1NjaGVkR3VpLnB5IGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvU2NoZWRHdWkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU5YTU2ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL1NjaGVkR3VpLnB5CkBAIC0wLDAgKzEsMTg0IEBACisjIFNjaGVkR3VpLnB5IC0gUHl0aG9uIGV4dGVuc2lvbiBmb3IgcGVyZiB0cmFjZSwgYmFzaWMgR1VJIGNvZGUgZm9yCisjCQl0cmFjZXMgZHJhd2luZyBhbmQgb3ZlcnZpZXcuCisjCisjIENvcHlyaWdodCAoQykgMjAxMCBieSBGcmVkZXJpYyBXZWlzYmVja2VyIDxmd2Vpc2JlY0BnbWFpbC5jb20+CisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbAorIyBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbi4KKworCit0cnk6CisJaW1wb3J0IHd4CitleGNlcHQgSW1wb3J0RXJyb3I6CisJcmFpc2UgSW1wb3J0RXJyb3IsICJZb3UgbmVlZCB0byBpbnN0YWxsIHRoZSB3eHB5dGhvbiBsaWIgZm9yIHRoaXMgc2NyaXB0IgorCisKK2NsYXNzIFJvb3RGcmFtZSh3eC5GcmFtZSk6CisJWV9PRkZTRVQgPSAxMDAKKwlSRUNUX0hFSUdIVCA9IDEwMAorCVJFQ1RfU1BBQ0UgPSA1MAorCUVWRU5UX01BUktJTkdfV0lEVEggPSA1CisKKwlkZWYgX19pbml0X18oc2VsZiwgc2NoZWRfdHJhY2VyLCB0aXRsZSwgcGFyZW50ID0gTm9uZSwgaWQgPSAtMSk6CisJCXd4LkZyYW1lLl9faW5pdF9fKHNlbGYsIHBhcmVudCwgaWQsIHRpdGxlKQorCisJCShzZWxmLnNjcmVlbl93aWR0aCwgc2VsZi5zY3JlZW5faGVpZ2h0KSA9IHd4LkdldERpc3BsYXlTaXplKCkKKwkJc2VsZi5zY3JlZW5fd2lkdGggLT0gMTAKKwkJc2VsZi5zY3JlZW5faGVpZ2h0IC09IDEwCisJCXNlbGYuem9vbSA9IDAuNQorCQlzZWxmLnNjcm9sbF9zY2FsZSA9IDIwCisJCXNlbGYuc2NoZWRfdHJhY2VyID0gc2NoZWRfdHJhY2VyCisJCXNlbGYuc2NoZWRfdHJhY2VyLnNldF9yb290X3dpbihzZWxmKQorCQkoc2VsZi50c19zdGFydCwgc2VsZi50c19lbmQpID0gc2NoZWRfdHJhY2VyLmludGVydmFsKCkKKwkJc2VsZi51cGRhdGVfd2lkdGhfdmlydHVhbCgpCisJCXNlbGYubnJfcmVjdHMgPSBzY2hlZF90cmFjZXIubnJfcmVjdGFuZ2xlcygpICsgMQorCQlzZWxmLmhlaWdodF92aXJ0dWFsID0gUm9vdEZyYW1lLllfT0ZGU0VUICsgKHNlbGYubnJfcmVjdHMgKiAoUm9vdEZyYW1lLlJFQ1RfSEVJR0hUICsgUm9vdEZyYW1lLlJFQ1RfU1BBQ0UpKQorCisJCSMgd2hvbGUgd2luZG93IHBhbmVsCisJCXNlbGYucGFuZWwgPSB3eC5QYW5lbChzZWxmLCBzaXplPShzZWxmLnNjcmVlbl93aWR0aCwgc2VsZi5zY3JlZW5faGVpZ2h0KSkKKworCQkjIHNjcm9sbGFibGUgY29udGFpbmVyCisJCXNlbGYuc2Nyb2xsID0gd3guU2Nyb2xsZWRXaW5kb3coc2VsZi5wYW5lbCkKKwkJc2VsZi5zY3JvbGwuU2V0U2Nyb2xsYmFycyhzZWxmLnNjcm9sbF9zY2FsZSwgc2VsZi5zY3JvbGxfc2NhbGUsIHNlbGYud2lkdGhfdmlydHVhbCAvIHNlbGYuc2Nyb2xsX3NjYWxlLCBzZWxmLmhlaWdodF92aXJ0dWFsIC8gc2VsZi5zY3JvbGxfc2NhbGUpCisJCXNlbGYuc2Nyb2xsLkVuYWJsZVNjcm9sbGluZyhUcnVlLCBUcnVlKQorCQlzZWxmLnNjcm9sbC5TZXRGb2N1cygpCisKKwkJIyBzY3JvbGxhYmxlIGRyYXdpbmcgYXJlYQorCQlzZWxmLnNjcm9sbF9wYW5lbCA9IHd4LlBhbmVsKHNlbGYuc2Nyb2xsLCBzaXplPShzZWxmLnNjcmVlbl93aWR0aCAtIDE1LCBzZWxmLnNjcmVlbl9oZWlnaHQgLyAyKSkKKwkJc2VsZi5zY3JvbGxfcGFuZWwuQmluZCh3eC5FVlRfUEFJTlQsIHNlbGYub25fcGFpbnQpCisJCXNlbGYuc2Nyb2xsX3BhbmVsLkJpbmQod3guRVZUX0tFWV9ET1dOLCBzZWxmLm9uX2tleV9wcmVzcykKKwkJc2VsZi5zY3JvbGxfcGFuZWwuQmluZCh3eC5FVlRfTEVGVF9ET1dOLCBzZWxmLm9uX21vdXNlX2Rvd24pCisJCXNlbGYuc2Nyb2xsLkJpbmQod3guRVZUX1BBSU5ULCBzZWxmLm9uX3BhaW50KQorCQlzZWxmLnNjcm9sbC5CaW5kKHd4LkVWVF9LRVlfRE9XTiwgc2VsZi5vbl9rZXlfcHJlc3MpCisJCXNlbGYuc2Nyb2xsLkJpbmQod3guRVZUX0xFRlRfRE9XTiwgc2VsZi5vbl9tb3VzZV9kb3duKQorCisJCXNlbGYuc2Nyb2xsLkZpdCgpCisJCXNlbGYuRml0KCkKKworCQlzZWxmLnNjcm9sbF9wYW5lbC5TZXREaW1lbnNpb25zKC0xLCAtMSwgc2VsZi53aWR0aF92aXJ0dWFsLCBzZWxmLmhlaWdodF92aXJ0dWFsLCB3eC5TSVpFX1VTRV9FWElTVElORykKKworCQlzZWxmLnR4dCA9IE5vbmUKKworCQlzZWxmLlNob3coVHJ1ZSkKKworCWRlZiB1c190b19weChzZWxmLCB2YWwpOgorCQlyZXR1cm4gdmFsIC8gKDEwICoqIDMpICogc2VsZi56b29tCisKKwlkZWYgcHhfdG9fdXMoc2VsZiwgdmFsKToKKwkJcmV0dXJuICh2YWwgLyBzZWxmLnpvb20pICogKDEwICoqIDMpCisKKwlkZWYgc2Nyb2xsX3N0YXJ0KHNlbGYpOgorCQkoeCwgeSkgPSBzZWxmLnNjcm9sbC5HZXRWaWV3U3RhcnQoKQorCQlyZXR1cm4gKHggKiBzZWxmLnNjcm9sbF9zY2FsZSwgeSAqIHNlbGYuc2Nyb2xsX3NjYWxlKQorCisJZGVmIHNjcm9sbF9zdGFydF91cyhzZWxmKToKKwkJKHgsIHkpID0gc2VsZi5zY3JvbGxfc3RhcnQoKQorCQlyZXR1cm4gc2VsZi5weF90b191cyh4KQorCisJZGVmIHBhaW50X3JlY3RhbmdsZV96b25lKHNlbGYsIG5yLCBjb2xvciwgdG9wX2NvbG9yLCBzdGFydCwgZW5kKToKKwkJb2Zmc2V0X3B4ID0gc2VsZi51c190b19weChzdGFydCAtIHNlbGYudHNfc3RhcnQpCisJCXdpZHRoX3B4ID0gc2VsZi51c190b19weChlbmQgLSBzZWxmLnRzX3N0YXJ0KQorCisJCW9mZnNldF9weSA9IFJvb3RGcmFtZS5ZX09GRlNFVCArIChuciAqIChSb290RnJhbWUuUkVDVF9IRUlHSFQgKyBSb290RnJhbWUuUkVDVF9TUEFDRSkpCisJCXdpZHRoX3B5ID0gUm9vdEZyYW1lLlJFQ1RfSEVJR0hUCisKKwkJZGMgPSBzZWxmLmRjCisKKwkJaWYgdG9wX2NvbG9yIGlzIG5vdCBOb25lOgorCQkJKHIsIGcsIGIpID0gdG9wX2NvbG9yCisJCQl0b3BfY29sb3IgPSB3eC5Db2xvdXIociwgZywgYikKKwkJCWJydXNoID0gd3guQnJ1c2godG9wX2NvbG9yLCB3eC5TT0xJRCkKKwkJCWRjLlNldEJydXNoKGJydXNoKQorCQkJZGMuRHJhd1JlY3RhbmdsZShvZmZzZXRfcHgsIG9mZnNldF9weSwgd2lkdGhfcHgsIFJvb3RGcmFtZS5FVkVOVF9NQVJLSU5HX1dJRFRIKQorCQkJd2lkdGhfcHkgLT0gUm9vdEZyYW1lLkVWRU5UX01BUktJTkdfV0lEVEgKKwkJCW9mZnNldF9weSArPSBSb290RnJhbWUuRVZFTlRfTUFSS0lOR19XSURUSAorCisJCShyICxnLCBiKSA9IGNvbG9yCisJCWNvbG9yID0gd3guQ29sb3VyKHIsIGcsIGIpCisJCWJydXNoID0gd3guQnJ1c2goY29sb3IsIHd4LlNPTElEKQorCQlkYy5TZXRCcnVzaChicnVzaCkKKwkJZGMuRHJhd1JlY3RhbmdsZShvZmZzZXRfcHgsIG9mZnNldF9weSwgd2lkdGhfcHgsIHdpZHRoX3B5KQorCisJZGVmIHVwZGF0ZV9yZWN0YW5nbGVzKHNlbGYsIGRjLCBzdGFydCwgZW5kKToKKwkJc3RhcnQgKz0gc2VsZi50c19zdGFydAorCQllbmQgKz0gc2VsZi50c19zdGFydAorCQlzZWxmLnNjaGVkX3RyYWNlci5maWxsX3pvbmUoc3RhcnQsIGVuZCkKKworCWRlZiBvbl9wYWludChzZWxmLCBldmVudCk6CisJCWRjID0gd3guUGFpbnREQyhzZWxmLnNjcm9sbF9wYW5lbCkKKwkJc2VsZi5kYyA9IGRjCisKKwkJd2lkdGggPSBtaW4oc2VsZi53aWR0aF92aXJ0dWFsLCBzZWxmLnNjcmVlbl93aWR0aCkKKwkJKHgsIHkpID0gc2VsZi5zY3JvbGxfc3RhcnQoKQorCQlzdGFydCA9IHNlbGYucHhfdG9fdXMoeCkKKwkJZW5kID0gc2VsZi5weF90b191cyh4ICsgd2lkdGgpCisJCXNlbGYudXBkYXRlX3JlY3RhbmdsZXMoZGMsIHN0YXJ0LCBlbmQpCisKKwlkZWYgcmVjdF9mcm9tX3lwaXhlbChzZWxmLCB5KToKKwkJeSAtPSBSb290RnJhbWUuWV9PRkZTRVQKKwkJcmVjdCA9IHkgLyAoUm9vdEZyYW1lLlJFQ1RfSEVJR0hUICsgUm9vdEZyYW1lLlJFQ1RfU1BBQ0UpCisJCWhlaWdodCA9IHkgJSAoUm9vdEZyYW1lLlJFQ1RfSEVJR0hUICsgUm9vdEZyYW1lLlJFQ1RfU1BBQ0UpCisKKwkJaWYgcmVjdCA8IDAgb3IgcmVjdCA+IHNlbGYubnJfcmVjdHMgLSAxIG9yIGhlaWdodCA+IFJvb3RGcmFtZS5SRUNUX0hFSUdIVDoKKwkJCXJldHVybiAtMQorCisJCXJldHVybiByZWN0CisKKwlkZWYgdXBkYXRlX3N1bW1hcnkoc2VsZiwgdHh0KToKKwkJaWYgc2VsZi50eHQ6CisJCQlzZWxmLnR4dC5EZXN0cm95KCkKKwkJc2VsZi50eHQgPSB3eC5TdGF0aWNUZXh0KHNlbGYucGFuZWwsIC0xLCB0eHQsICgwLCAoc2VsZi5zY3JlZW5faGVpZ2h0IC8gMikgKyA1MCkpCisKKworCWRlZiBvbl9tb3VzZV9kb3duKHNlbGYsIGV2ZW50KToKKwkJKHgsIHkpID0gZXZlbnQuR2V0UG9zaXRpb25UdXBsZSgpCisJCXJlY3QgPSBzZWxmLnJlY3RfZnJvbV95cGl4ZWwoeSkKKwkJaWYgcmVjdCA9PSAtMToKKwkJCXJldHVybgorCisJCXQgPSBzZWxmLnB4X3RvX3VzKHgpICsgc2VsZi50c19zdGFydAorCisJCXNlbGYuc2NoZWRfdHJhY2VyLm1vdXNlX2Rvd24ocmVjdCwgdCkKKworCisJZGVmIHVwZGF0ZV93aWR0aF92aXJ0dWFsKHNlbGYpOgorCQlzZWxmLndpZHRoX3ZpcnR1YWwgPSBzZWxmLnVzX3RvX3B4KHNlbGYudHNfZW5kIC0gc2VsZi50c19zdGFydCkKKworCWRlZiBfX3pvb20oc2VsZiwgeCk6CisJCXNlbGYudXBkYXRlX3dpZHRoX3ZpcnR1YWwoKQorCQkoeHBvcywgeXBvcykgPSBzZWxmLnNjcm9sbC5HZXRWaWV3U3RhcnQoKQorCQl4cG9zID0gc2VsZi51c190b19weCh4KSAvIHNlbGYuc2Nyb2xsX3NjYWxlCisJCXNlbGYuc2Nyb2xsLlNldFNjcm9sbGJhcnMoc2VsZi5zY3JvbGxfc2NhbGUsIHNlbGYuc2Nyb2xsX3NjYWxlLCBzZWxmLndpZHRoX3ZpcnR1YWwgLyBzZWxmLnNjcm9sbF9zY2FsZSwgc2VsZi5oZWlnaHRfdmlydHVhbCAvIHNlbGYuc2Nyb2xsX3NjYWxlLCB4cG9zLCB5cG9zKQorCQlzZWxmLlJlZnJlc2goKQorCisJZGVmIHpvb21faW4oc2VsZik6CisJCXggPSBzZWxmLnNjcm9sbF9zdGFydF91cygpCisJCXNlbGYuem9vbSAqPSAyCisJCXNlbGYuX196b29tKHgpCisKKwlkZWYgem9vbV9vdXQoc2VsZik6CisJCXggPSBzZWxmLnNjcm9sbF9zdGFydF91cygpCisJCXNlbGYuem9vbSAvPSAyCisJCXNlbGYuX196b29tKHgpCisKKworCWRlZiBvbl9rZXlfcHJlc3Moc2VsZiwgZXZlbnQpOgorCQlrZXkgPSBldmVudC5HZXRSYXdLZXlDb2RlKCkKKwkJaWYga2V5ID09IG9yZCgiKyIpOgorCQkJc2VsZi56b29tX2luKCkKKwkJCXJldHVybgorCQlpZiBrZXkgPT0gb3JkKCItIik6CisJCQlzZWxmLnpvb21fb3V0KCkKKwkJCXJldHVybgorCisJCWtleSA9IGV2ZW50LkdldEtleUNvZGUoKQorCQkoeCwgeSkgPSBzZWxmLnNjcm9sbC5HZXRWaWV3U3RhcnQoKQorCQlpZiBrZXkgPT0gd3guV1hLX1JJR0hUOgorCQkJc2VsZi5zY3JvbGwuU2Nyb2xsKHggKyAxLCB5KQorCQllbGlmIGtleSA9PSB3eC5XWEtfTEVGVDoKKwkJCXNlbGYuc2Nyb2xsLlNjcm9sbCh4IC0gMSwgeSkKKwkJZWxpZiBrZXkgPT0gd3guV1hLX0RPV046CisJCQlzZWxmLnNjcm9sbC5TY3JvbGwoeCwgeSArIDEpCisJCWVsaWYga2V5ID09IHd4LldYS19VUDoKKwkJCXNlbGYuc2Nyb2xsLlNjcm9sbCh4LCB5IC0gMSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL3NjaGVkLW1pZ3JhdGlvbi1yZWNvcmQgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zY2hlZC1taWdyYXRpb24tcmVjb3JkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YTNlOWIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zY2hlZC1taWdyYXRpb24tcmVjb3JkCkBAIC0wLDAgKzEsMiBAQAorIyEvYmluL2Jhc2gKK3BlcmYgcmVjb3JkIC1tIDE2Mzg0IC1hIC1lIHNjaGVkOnNjaGVkX3dha2V1cCAtZSBzY2hlZDpzY2hlZF93YWtldXBfbmV3IC1lIHNjaGVkOnNjaGVkX3N3aXRjaCAtZSBzY2hlZDpzY2hlZF9taWdyYXRlX3Rhc2sgJEAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL3NjaGVkLW1pZ3JhdGlvbi1yZXBvcnQgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zY2hlZC1taWdyYXRpb24tcmVwb3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZDA1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zY2hlZC1taWdyYXRpb24tcmVwb3J0CkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL2Jhc2gKKyMgZGVzY3JpcHRpb246IHNjaGVkIG1pZ3JhdGlvbiBvdmVydmlldworcGVyZiB0cmFjZSAkQCAtcyB+L2xpYmV4ZWMvcGVyZi1jb3JlL3NjcmlwdHMvcHl0aG9uL3NjaGVkLW1pZ3JhdGlvbi5weQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zY2hlZC1taWdyYXRpb24ucHkgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL3NjaGVkLW1pZ3JhdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTM0MzgzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zY2hlZC1taWdyYXRpb24ucHkKQEAgLTAsMCArMSw0NjEgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisjCisjIENwdSB0YXNrIG1pZ3JhdGlvbiBvdmVydmlldyB0b3kKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWRlcmljIFdlaXNiZWNrZXIgPGZ3ZWlzYmVjQGdtYWlsLmNvbT4KKyMKKyMgcGVyZiB0cmFjZSBldmVudCBoYW5kbGVycyBoYXZlIGJlZW4gZ2VuZXJhdGVkIGJ5IHBlcmYgdHJhY2UgLWcgcHl0aG9uCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbAorIyBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbi4KKworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKK2Zyb20gVXNlckxpc3QgaW1wb3J0IFVzZXJMaXN0CisKK3N5cy5wYXRoLmFwcGVuZChvcy5lbnZpcm9uWydQRVJGX0VYRUNfUEFUSCddICsgXAorCScvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlJykKK3N5cy5wYXRoLmFwcGVuZCgnc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlJykKKworZnJvbSBwZXJmX3RyYWNlX2NvbnRleHQgaW1wb3J0ICoKK2Zyb20gQ29yZSBpbXBvcnQgKgorZnJvbSBTY2hlZEd1aSBpbXBvcnQgKgorCisKK3RocmVhZHMgPSB7IDAgOiAiaWRsZSJ9CisKK2RlZiB0aHJlYWRfbmFtZShwaWQpOgorCXJldHVybiAiJXM6JWQiICUgKHRocmVhZHNbcGlkXSwgcGlkKQorCitjbGFzcyBSdW5xdWV1ZUV2ZW50VW5rbm93bjoKKwlAc3RhdGljbWV0aG9kCisJZGVmIGNvbG9yKCk6CisJCXJldHVybiBOb25lCisKKwlkZWYgX19yZXByX18oc2VsZik6CisJCXJldHVybiAidW5rbm93biIKKworY2xhc3MgUnVucXVldWVFdmVudFNsZWVwOgorCUBzdGF0aWNtZXRob2QKKwlkZWYgY29sb3IoKToKKwkJcmV0dXJuICgwLCAwLCAweGZmKQorCisJZGVmIF9faW5pdF9fKHNlbGYsIHNsZWVwZXIpOgorCQlzZWxmLnNsZWVwZXIgPSBzbGVlcGVyCisKKwlkZWYgX19yZXByX18oc2VsZik6CisJCXJldHVybiAiJXMgZ29uZSB0byBzbGVlcCIgJSB0aHJlYWRfbmFtZShzZWxmLnNsZWVwZXIpCisKK2NsYXNzIFJ1bnF1ZXVlRXZlbnRXYWtldXA6CisJQHN0YXRpY21ldGhvZAorCWRlZiBjb2xvcigpOgorCQlyZXR1cm4gKDB4ZmYsIDB4ZmYsIDApCisKKwlkZWYgX19pbml0X18oc2VsZiwgd2FrZWUpOgorCQlzZWxmLndha2VlID0gd2FrZWUKKworCWRlZiBfX3JlcHJfXyhzZWxmKToKKwkJcmV0dXJuICIlcyB3b2tlIHVwIiAlIHRocmVhZF9uYW1lKHNlbGYud2FrZWUpCisKK2NsYXNzIFJ1bnF1ZXVlRXZlbnRGb3JrOgorCUBzdGF0aWNtZXRob2QKKwlkZWYgY29sb3IoKToKKwkJcmV0dXJuICgwLCAweGZmLCAwKQorCisJZGVmIF9faW5pdF9fKHNlbGYsIGNoaWxkKToKKwkJc2VsZi5jaGlsZCA9IGNoaWxkCisKKwlkZWYgX19yZXByX18oc2VsZik6CisJCXJldHVybiAibmV3IGZvcmtlZCB0YXNrICVzIiAlIHRocmVhZF9uYW1lKHNlbGYuY2hpbGQpCisKK2NsYXNzIFJ1bnF1ZXVlTWlncmF0ZUluOgorCUBzdGF0aWNtZXRob2QKKwlkZWYgY29sb3IoKToKKwkJcmV0dXJuICgwLCAweGYwLCAweGZmKQorCisJZGVmIF9faW5pdF9fKHNlbGYsIG5ldyk6CisJCXNlbGYubmV3ID0gbmV3CisKKwlkZWYgX19yZXByX18oc2VsZik6CisJCXJldHVybiAidGFzayBtaWdyYXRlZCBpbiAlcyIgJSB0aHJlYWRfbmFtZShzZWxmLm5ldykKKworY2xhc3MgUnVucXVldWVNaWdyYXRlT3V0OgorCUBzdGF0aWNtZXRob2QKKwlkZWYgY29sb3IoKToKKwkJcmV0dXJuICgweGZmLCAwLCAweGZmKQorCisJZGVmIF9faW5pdF9fKHNlbGYsIG9sZCk6CisJCXNlbGYub2xkID0gb2xkCisKKwlkZWYgX19yZXByX18oc2VsZik6CisJCXJldHVybiAidGFzayBtaWdyYXRlZCBvdXQgJXMiICUgdGhyZWFkX25hbWUoc2VsZi5vbGQpCisKK2NsYXNzIFJ1bnF1ZXVlU25hcHNob3Q6CisJZGVmIF9faW5pdF9fKHNlbGYsIHRhc2tzID0gWzBdLCBldmVudCA9IFJ1bnF1ZXVlRXZlbnRVbmtub3duKCkpOgorCQlzZWxmLnRhc2tzID0gdHVwbGUodGFza3MpCisJCXNlbGYuZXZlbnQgPSBldmVudAorCisJZGVmIHNjaGVkX3N3aXRjaChzZWxmLCBwcmV2LCBwcmV2X3N0YXRlLCBuZXh0KToKKwkJZXZlbnQgPSBSdW5xdWV1ZUV2ZW50VW5rbm93bigpCisKKwkJaWYgdGFza1N0YXRlKHByZXZfc3RhdGUpID09ICJSIiBhbmQgbmV4dCBpbiBzZWxmLnRhc2tzIFwKKwkJCWFuZCBwcmV2IGluIHNlbGYudGFza3M6CisJCQlyZXR1cm4gc2VsZgorCisJCWlmIHRhc2tTdGF0ZShwcmV2X3N0YXRlKSAhPSAiUiI6CisJCQlldmVudCA9IFJ1bnF1ZXVlRXZlbnRTbGVlcChwcmV2KQorCisJCW5leHRfdGFza3MgPSBsaXN0KHNlbGYudGFza3NbOl0pCisJCWlmIHByZXYgaW4gc2VsZi50YXNrczoKKwkJCWlmIHRhc2tTdGF0ZShwcmV2X3N0YXRlKSAhPSAiUiI6CisJCQkJbmV4dF90YXNrcy5yZW1vdmUocHJldikKKwkJZWxpZiB0YXNrU3RhdGUocHJldl9zdGF0ZSkgPT0gIlIiOgorCQkJbmV4dF90YXNrcy5hcHBlbmQocHJldikKKworCQlpZiBuZXh0IG5vdCBpbiBuZXh0X3Rhc2tzOgorCQkJbmV4dF90YXNrcy5hcHBlbmQobmV4dCkKKworCQlyZXR1cm4gUnVucXVldWVTbmFwc2hvdChuZXh0X3Rhc2tzLCBldmVudCkKKworCWRlZiBtaWdyYXRlX291dChzZWxmLCBvbGQpOgorCQlpZiBvbGQgbm90IGluIHNlbGYudGFza3M6CisJCQlyZXR1cm4gc2VsZgorCQluZXh0X3Rhc2tzID0gW3Rhc2sgZm9yIHRhc2sgaW4gc2VsZi50YXNrcyBpZiB0YXNrICE9IG9sZF0KKworCQlyZXR1cm4gUnVucXVldWVTbmFwc2hvdChuZXh0X3Rhc2tzLCBSdW5xdWV1ZU1pZ3JhdGVPdXQob2xkKSkKKworCWRlZiBfX21pZ3JhdGVfaW4oc2VsZiwgbmV3LCBldmVudCk6CisJCWlmIG5ldyBpbiBzZWxmLnRhc2tzOgorCQkJc2VsZi5ldmVudCA9IGV2ZW50CisJCQlyZXR1cm4gc2VsZgorCQluZXh0X3Rhc2tzID0gc2VsZi50YXNrc1s6XSArIHR1cGxlKFtuZXddKQorCisJCXJldHVybiBSdW5xdWV1ZVNuYXBzaG90KG5leHRfdGFza3MsIGV2ZW50KQorCisJZGVmIG1pZ3JhdGVfaW4oc2VsZiwgbmV3KToKKwkJcmV0dXJuIHNlbGYuX19taWdyYXRlX2luKG5ldywgUnVucXVldWVNaWdyYXRlSW4obmV3KSkKKworCWRlZiB3YWtlX3VwKHNlbGYsIG5ldyk6CisJCXJldHVybiBzZWxmLl9fbWlncmF0ZV9pbihuZXcsIFJ1bnF1ZXVlRXZlbnRXYWtldXAobmV3KSkKKworCWRlZiB3YWtlX3VwX25ldyhzZWxmLCBuZXcpOgorCQlyZXR1cm4gc2VsZi5fX21pZ3JhdGVfaW4obmV3LCBSdW5xdWV1ZUV2ZW50Rm9yayhuZXcpKQorCisJZGVmIGxvYWQoc2VsZik6CisJCSIiIiBQcm92aWRlIHRoZSBudW1iZXIgb2YgdGFza3Mgb24gdGhlIHJ1bnF1ZXVlLgorCQkgICAgRG9uJ3QgY291bnQgaWRsZSIiIgorCQlyZXR1cm4gbGVuKHNlbGYudGFza3MpIC0gMQorCisJZGVmIF9fcmVwcl9fKHNlbGYpOgorCQlyZXQgPSBzZWxmLnRhc2tzLl9fcmVwcl9fKCkKKwkJcmV0ICs9IHNlbGYub3JpZ2luX3Rvc3RyaW5nKCkKKworCQlyZXR1cm4gcmV0CisKK2NsYXNzIFRpbWVTbGljZToKKwlkZWYgX19pbml0X18oc2VsZiwgc3RhcnQsIHByZXYpOgorCQlzZWxmLnN0YXJ0ID0gc3RhcnQKKwkJc2VsZi5wcmV2ID0gcHJldgorCQlzZWxmLmVuZCA9IHN0YXJ0CisJCSMgY3B1cyB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQKKwkJc2VsZi5ldmVudF9jcHVzID0gW10KKwkJaWYgcHJldiBpcyBub3QgTm9uZToKKwkJCXNlbGYudG90YWxfbG9hZCA9IHByZXYudG90YWxfbG9hZAorCQkJc2VsZi5ycXMgPSBwcmV2LnJxcy5jb3B5KCkKKwkJZWxzZToKKwkJCXNlbGYucnFzID0gZGVmYXVsdGRpY3QoUnVucXVldWVTbmFwc2hvdCkKKwkJCXNlbGYudG90YWxfbG9hZCA9IDAKKworCWRlZiBfX3VwZGF0ZV90b3RhbF9sb2FkKHNlbGYsIG9sZF9ycSwgbmV3X3JxKToKKwkJZGlmZiA9IG5ld19ycS5sb2FkKCkgLSBvbGRfcnEubG9hZCgpCisJCXNlbGYudG90YWxfbG9hZCArPSBkaWZmCisKKwlkZWYgc2NoZWRfc3dpdGNoKHNlbGYsIHRzX2xpc3QsIHByZXYsIHByZXZfc3RhdGUsIG5leHQsIGNwdSk6CisJCW9sZF9ycSA9IHNlbGYucHJldi5ycXNbY3B1XQorCQluZXdfcnEgPSBvbGRfcnEuc2NoZWRfc3dpdGNoKHByZXYsIHByZXZfc3RhdGUsIG5leHQpCisKKwkJaWYgb2xkX3JxIGlzIG5ld19ycToKKwkJCXJldHVybgorCisJCXNlbGYucnFzW2NwdV0gPSBuZXdfcnEKKwkJc2VsZi5fX3VwZGF0ZV90b3RhbF9sb2FkKG9sZF9ycSwgbmV3X3JxKQorCQl0c19saXN0LmFwcGVuZChzZWxmKQorCQlzZWxmLmV2ZW50X2NwdXMgPSBbY3B1XQorCisJZGVmIG1pZ3JhdGUoc2VsZiwgdHNfbGlzdCwgbmV3LCBvbGRfY3B1LCBuZXdfY3B1KToKKwkJaWYgb2xkX2NwdSA9PSBuZXdfY3B1OgorCQkJcmV0dXJuCisJCW9sZF9ycSA9IHNlbGYucHJldi5ycXNbb2xkX2NwdV0KKwkJb3V0X3JxID0gb2xkX3JxLm1pZ3JhdGVfb3V0KG5ldykKKwkJc2VsZi5ycXNbb2xkX2NwdV0gPSBvdXRfcnEKKwkJc2VsZi5fX3VwZGF0ZV90b3RhbF9sb2FkKG9sZF9ycSwgb3V0X3JxKQorCisJCW5ld19ycSA9IHNlbGYucHJldi5ycXNbbmV3X2NwdV0KKwkJaW5fcnEgPSBuZXdfcnEubWlncmF0ZV9pbihuZXcpCisJCXNlbGYucnFzW25ld19jcHVdID0gaW5fcnEKKwkJc2VsZi5fX3VwZGF0ZV90b3RhbF9sb2FkKG5ld19ycSwgaW5fcnEpCisKKwkJdHNfbGlzdC5hcHBlbmQoc2VsZikKKworCQlpZiBvbGRfcnEgaXMgbm90IG91dF9ycToKKwkJCXNlbGYuZXZlbnRfY3B1cy5hcHBlbmQob2xkX2NwdSkKKwkJc2VsZi5ldmVudF9jcHVzLmFwcGVuZChuZXdfY3B1KQorCisJZGVmIHdha2VfdXAoc2VsZiwgdHNfbGlzdCwgcGlkLCBjcHUsIGZvcmspOgorCQlvbGRfcnEgPSBzZWxmLnByZXYucnFzW2NwdV0KKwkJaWYgZm9yazoKKwkJCW5ld19ycSA9IG9sZF9ycS53YWtlX3VwX25ldyhwaWQpCisJCWVsc2U6CisJCQluZXdfcnEgPSBvbGRfcnEud2FrZV91cChwaWQpCisKKwkJaWYgbmV3X3JxIGlzIG9sZF9ycToKKwkJCXJldHVybgorCQlzZWxmLnJxc1tjcHVdID0gbmV3X3JxCisJCXNlbGYuX191cGRhdGVfdG90YWxfbG9hZChvbGRfcnEsIG5ld19ycSkKKwkJdHNfbGlzdC5hcHBlbmQoc2VsZikKKwkJc2VsZi5ldmVudF9jcHVzID0gW2NwdV0KKworCWRlZiBuZXh0KHNlbGYsIHQpOgorCQlzZWxmLmVuZCA9IHQKKwkJcmV0dXJuIFRpbWVTbGljZSh0LCBzZWxmKQorCitjbGFzcyBUaW1lU2xpY2VMaXN0KFVzZXJMaXN0KToKKwlkZWYgX19pbml0X18oc2VsZiwgYXJnID0gW10pOgorCQlzZWxmLmRhdGEgPSBhcmcKKworCWRlZiBnZXRfdGltZV9zbGljZShzZWxmLCB0cyk6CisJCWlmIGxlbihzZWxmLmRhdGEpID09IDA6CisJCQlzbGljZSA9IFRpbWVTbGljZSh0cywgVGltZVNsaWNlKC0xLCBOb25lKSkKKwkJZWxzZToKKwkJCXNsaWNlID0gc2VsZi5kYXRhWy0xXS5uZXh0KHRzKQorCQlyZXR1cm4gc2xpY2UKKworCWRlZiBmaW5kX3RpbWVfc2xpY2Uoc2VsZiwgdHMpOgorCQlzdGFydCA9IDAKKwkJZW5kID0gbGVuKHNlbGYuZGF0YSkKKwkJZm91bmQgPSAtMQorCQlzZWFyY2hpbmcgPSBUcnVlCisJCXdoaWxlIHNlYXJjaGluZzoKKwkJCWlmIHN0YXJ0ID09IGVuZCBvciBzdGFydCA9PSBlbmQgLSAxOgorCQkJCXNlYXJjaGluZyA9IEZhbHNlCisKKwkJCWkgPSAoZW5kICsgc3RhcnQpIC8gMgorCQkJaWYgc2VsZi5kYXRhW2ldLnN0YXJ0IDw9IHRzIGFuZCBzZWxmLmRhdGFbaV0uZW5kID49IHRzOgorCQkJCWZvdW5kID0gaQorCQkJCWVuZCA9IGkKKwkJCQljb250aW51ZQorCisJCQlpZiBzZWxmLmRhdGFbaV0uZW5kIDwgdHM6CisJCQkJc3RhcnQgPSBpCisKKwkJCWVsaWYgc2VsZi5kYXRhW2ldLnN0YXJ0ID4gdHM6CisJCQkJZW5kID0gaQorCisJCXJldHVybiBmb3VuZAorCisJZGVmIHNldF9yb290X3dpbihzZWxmLCB3aW4pOgorCQlzZWxmLnJvb3Rfd2luID0gd2luCisKKwlkZWYgbW91c2VfZG93bihzZWxmLCBjcHUsIHQpOgorCQlpZHggPSBzZWxmLmZpbmRfdGltZV9zbGljZSh0KQorCQlpZiBpZHggPT0gLTE6CisJCQlyZXR1cm4KKworCQl0cyA9IHNlbGZbaWR4XQorCQlycSA9IHRzLnJxc1tjcHVdCisJCXJhdyA9ICJDUFU6ICVkXG4iICUgY3B1CisJCXJhdyArPSAiTGFzdCBldmVudCA6ICVzXG4iICUgcnEuZXZlbnQuX19yZXByX18oKQorCQlyYXcgKz0gIlRpbWVzdGFtcCA6ICVkLiUwNmRcbiIgJSAodHMuc3RhcnQgLyAoMTAgKiogOSksICh0cy5zdGFydCAlICgxMCAqKiA5KSkgLyAxMDAwKQorCQlyYXcgKz0gIkR1cmF0aW9uIDogJTZkIHVzXG4iICUgKCh0cy5lbmQgLSB0cy5zdGFydCkgLyAoMTAgKiogNikpCisJCXJhdyArPSAiTG9hZCA9ICVkXG4iICUgcnEubG9hZCgpCisJCWZvciB0IGluIHJxLnRhc2tzOgorCQkJcmF3ICs9ICIlcyBcbiIgJSB0aHJlYWRfbmFtZSh0KQorCisJCXNlbGYucm9vdF93aW4udXBkYXRlX3N1bW1hcnkocmF3KQorCisJZGVmIHVwZGF0ZV9yZWN0YW5nbGVfY3B1KHNlbGYsIHNsaWNlLCBjcHUpOgorCQlycSA9IHNsaWNlLnJxc1tjcHVdCisKKwkJaWYgc2xpY2UudG90YWxfbG9hZCAhPSAwOgorCQkJbG9hZF9yYXRlID0gcnEubG9hZCgpIC8gZmxvYXQoc2xpY2UudG90YWxfbG9hZCkKKwkJZWxzZToKKwkJCWxvYWRfcmF0ZSA9IDAKKworCQlyZWRfcG93ZXIgPSBpbnQoMHhmZiAtICgweGZmICogbG9hZF9yYXRlKSkKKwkJY29sb3IgPSAoMHhmZiwgcmVkX3Bvd2VyLCByZWRfcG93ZXIpCisKKwkJdG9wX2NvbG9yID0gTm9uZQorCisJCWlmIGNwdSBpbiBzbGljZS5ldmVudF9jcHVzOgorCQkJdG9wX2NvbG9yID0gcnEuZXZlbnQuY29sb3IoKQorCisJCXNlbGYucm9vdF93aW4ucGFpbnRfcmVjdGFuZ2xlX3pvbmUoY3B1LCBjb2xvciwgdG9wX2NvbG9yLCBzbGljZS5zdGFydCwgc2xpY2UuZW5kKQorCisJZGVmIGZpbGxfem9uZShzZWxmLCBzdGFydCwgZW5kKToKKwkJaSA9IHNlbGYuZmluZF90aW1lX3NsaWNlKHN0YXJ0KQorCQlpZiBpID09IC0xOgorCQkJcmV0dXJuCisKKwkJZm9yIGkgaW4geHJhbmdlKGksIGxlbihzZWxmLmRhdGEpKToKKwkJCXRpbWVzbGljZSA9IHNlbGYuZGF0YVtpXQorCQkJaWYgdGltZXNsaWNlLnN0YXJ0ID4gZW5kOgorCQkJCXJldHVybgorCisJCQlmb3IgY3B1IGluIHRpbWVzbGljZS5ycXM6CisJCQkJc2VsZi51cGRhdGVfcmVjdGFuZ2xlX2NwdSh0aW1lc2xpY2UsIGNwdSkKKworCWRlZiBpbnRlcnZhbChzZWxmKToKKwkJaWYgbGVuKHNlbGYuZGF0YSkgPT0gMDoKKwkJCXJldHVybiAoMCwgMCkKKworCQlyZXR1cm4gKHNlbGYuZGF0YVswXS5zdGFydCwgc2VsZi5kYXRhWy0xXS5lbmQpCisKKwlkZWYgbnJfcmVjdGFuZ2xlcyhzZWxmKToKKwkJbGFzdF90cyA9IHNlbGYuZGF0YVstMV0KKwkJbWF4X2NwdSA9IDAKKwkJZm9yIGNwdSBpbiBsYXN0X3RzLnJxczoKKwkJCWlmIGNwdSA+IG1heF9jcHU6CisJCQkJbWF4X2NwdSA9IGNwdQorCQlyZXR1cm4gbWF4X2NwdQorCisKK2NsYXNzIFNjaGVkRXZlbnRQcm94eToKKwlkZWYgX19pbml0X18oc2VsZik6CisJCXNlbGYuY3VycmVudF90c2sgPSBkZWZhdWx0ZGljdChsYW1iZGEgOiAtMSkKKwkJc2VsZi50aW1lc2xpY2VzID0gVGltZVNsaWNlTGlzdCgpCisKKwlkZWYgc2NoZWRfc3dpdGNoKHNlbGYsIGhlYWRlcnMsIHByZXZfY29tbSwgcHJldl9waWQsIHByZXZfcHJpbywgcHJldl9zdGF0ZSwKKwkJCSBuZXh0X2NvbW0sIG5leHRfcGlkLCBuZXh0X3ByaW8pOgorCQkiIiIgRW5zdXJlIHRoZSB0YXNrIHdlIHNjaGVkIG91dCB0aGlzIGNwdSBpcyByZWFsbHkgdGhlIG9uZQorCQkgICAgd2UgbG9nZ2VkLiBPdGhlcndpc2Ugd2UgbWF5IGhhdmUgbWlzc2VkIHRyYWNlcyAiIiIKKworCQlvbl9jcHVfdGFzayA9IHNlbGYuY3VycmVudF90c2tbaGVhZGVycy5jcHVdCisKKwkJaWYgb25fY3B1X3Rhc2sgIT0gLTEgYW5kIG9uX2NwdV90YXNrICE9IHByZXZfcGlkOgorCQkJcHJpbnQgIlNjaGVkIHN3aXRjaCBldmVudCByZWplY3RlZCB0czogJXMgY3B1OiAlZCBwcmV2OiAlcyglZCkgbmV4dDogJXMoJWQpIiAlIFwKKwkJCQkoaGVhZGVycy50c19mb3JtYXQoKSwgaGVhZGVycy5jcHUsIHByZXZfY29tbSwgcHJldl9waWQsIG5leHRfY29tbSwgbmV4dF9waWQpCisKKwkJdGhyZWFkc1twcmV2X3BpZF0gPSBwcmV2X2NvbW0KKwkJdGhyZWFkc1tuZXh0X3BpZF0gPSBuZXh0X2NvbW0KKwkJc2VsZi5jdXJyZW50X3Rza1toZWFkZXJzLmNwdV0gPSBuZXh0X3BpZAorCisJCXRzID0gc2VsZi50aW1lc2xpY2VzLmdldF90aW1lX3NsaWNlKGhlYWRlcnMudHMoKSkKKwkJdHMuc2NoZWRfc3dpdGNoKHNlbGYudGltZXNsaWNlcywgcHJldl9waWQsIHByZXZfc3RhdGUsIG5leHRfcGlkLCBoZWFkZXJzLmNwdSkKKworCWRlZiBtaWdyYXRlKHNlbGYsIGhlYWRlcnMsIHBpZCwgcHJpbywgb3JpZ19jcHUsIGRlc3RfY3B1KToKKwkJdHMgPSBzZWxmLnRpbWVzbGljZXMuZ2V0X3RpbWVfc2xpY2UoaGVhZGVycy50cygpKQorCQl0cy5taWdyYXRlKHNlbGYudGltZXNsaWNlcywgcGlkLCBvcmlnX2NwdSwgZGVzdF9jcHUpCisKKwlkZWYgd2FrZV91cChzZWxmLCBoZWFkZXJzLCBjb21tLCBwaWQsIHN1Y2Nlc3MsIHRhcmdldF9jcHUsIGZvcmspOgorCQlpZiBzdWNjZXNzID09IDA6CisJCQlyZXR1cm4KKwkJdHMgPSBzZWxmLnRpbWVzbGljZXMuZ2V0X3RpbWVfc2xpY2UoaGVhZGVycy50cygpKQorCQl0cy53YWtlX3VwKHNlbGYudGltZXNsaWNlcywgcGlkLCB0YXJnZXRfY3B1LCBmb3JrKQorCisKK2RlZiB0cmFjZV9iZWdpbigpOgorCWdsb2JhbCBwYXJzZXIKKwlwYXJzZXIgPSBTY2hlZEV2ZW50UHJveHkoKQorCitkZWYgdHJhY2VfZW5kKCk6CisJYXBwID0gd3guQXBwKEZhbHNlKQorCXRpbWVzbGljZXMgPSBwYXJzZXIudGltZXNsaWNlcworCWZyYW1lID0gUm9vdEZyYW1lKHRpbWVzbGljZXMsICJNaWdyYXRpb24iKQorCWFwcC5NYWluTG9vcCgpCisKK2RlZiBzY2hlZF9fc2NoZWRfc3RhdF9ydW50aW1lKGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsCisJY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0sCisJY29tbSwgcGlkLCBydW50aW1lLCB2cnVudGltZSk6CisJcGFzcworCitkZWYgc2NoZWRfX3NjaGVkX3N0YXRfaW93YWl0KGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsCisJY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0sCisJY29tbSwgcGlkLCBkZWxheSk6CisJcGFzcworCitkZWYgc2NoZWRfX3NjaGVkX3N0YXRfc2xlZXAoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwljb21tLCBwaWQsIGRlbGF5KToKKwlwYXNzCisKK2RlZiBzY2hlZF9fc2NoZWRfc3RhdF93YWl0KGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsCisJY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0sCisJY29tbSwgcGlkLCBkZWxheSk6CisJcGFzcworCitkZWYgc2NoZWRfX3NjaGVkX3Byb2Nlc3NfZm9yayhldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LAorCWNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tLAorCXBhcmVudF9jb21tLCBwYXJlbnRfcGlkLCBjaGlsZF9jb21tLCBjaGlsZF9waWQpOgorCXBhc3MKKworZGVmIHNjaGVkX19zY2hlZF9wcm9jZXNzX3dhaXQoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwljb21tLCBwaWQsIHByaW8pOgorCXBhc3MKKworZGVmIHNjaGVkX19zY2hlZF9wcm9jZXNzX2V4aXQoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwljb21tLCBwaWQsIHByaW8pOgorCXBhc3MKKworZGVmIHNjaGVkX19zY2hlZF9wcm9jZXNzX2ZyZWUoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwljb21tLCBwaWQsIHByaW8pOgorCXBhc3MKKworZGVmIHNjaGVkX19zY2hlZF9taWdyYXRlX3Rhc2soZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwljb21tLCBwaWQsIHByaW8sIG9yaWdfY3B1LAorCWRlc3RfY3B1KToKKwloZWFkZXJzID0gRXZlbnRIZWFkZXJzKGNvbW1vbl9jcHUsIGNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsCisJCQkJY29tbW9uX3BpZCwgY29tbW9uX2NvbW0pCisJcGFyc2VyLm1pZ3JhdGUoaGVhZGVycywgcGlkLCBwcmlvLCBvcmlnX2NwdSwgZGVzdF9jcHUpCisKK2RlZiBzY2hlZF9fc2NoZWRfc3dpdGNoKGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsCisJY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0sCisJcHJldl9jb21tLCBwcmV2X3BpZCwgcHJldl9wcmlvLCBwcmV2X3N0YXRlLAorCW5leHRfY29tbSwgbmV4dF9waWQsIG5leHRfcHJpbyk6CisKKwloZWFkZXJzID0gRXZlbnRIZWFkZXJzKGNvbW1vbl9jcHUsIGNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsCisJCQkJY29tbW9uX3BpZCwgY29tbW9uX2NvbW0pCisJcGFyc2VyLnNjaGVkX3N3aXRjaChoZWFkZXJzLCBwcmV2X2NvbW0sIHByZXZfcGlkLCBwcmV2X3ByaW8sIHByZXZfc3RhdGUsCisJCQkgbmV4dF9jb21tLCBuZXh0X3BpZCwgbmV4dF9wcmlvKQorCitkZWYgc2NoZWRfX3NjaGVkX3dha2V1cF9uZXcoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwljb21tLCBwaWQsIHByaW8sIHN1Y2Nlc3MsCisJdGFyZ2V0X2NwdSk6CisJaGVhZGVycyA9IEV2ZW50SGVhZGVycyhjb21tb25fY3B1LCBjb21tb25fc2VjcywgY29tbW9uX25zZWNzLAorCQkJCWNvbW1vbl9waWQsIGNvbW1vbl9jb21tKQorCXBhcnNlci53YWtlX3VwKGhlYWRlcnMsIGNvbW0sIHBpZCwgc3VjY2VzcywgdGFyZ2V0X2NwdSwgMSkKKworZGVmIHNjaGVkX19zY2hlZF93YWtldXAoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwljb21tLCBwaWQsIHByaW8sIHN1Y2Nlc3MsCisJdGFyZ2V0X2NwdSk6CisJaGVhZGVycyA9IEV2ZW50SGVhZGVycyhjb21tb25fY3B1LCBjb21tb25fc2VjcywgY29tbW9uX25zZWNzLAorCQkJCWNvbW1vbl9waWQsIGNvbW1vbl9jb21tKQorCXBhcnNlci53YWtlX3VwKGhlYWRlcnMsIGNvbW0sIHBpZCwgc3VjY2VzcywgdGFyZ2V0X2NwdSwgMCkKKworZGVmIHNjaGVkX19zY2hlZF93YWl0X3Rhc2soZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwljb21tLCBwaWQsIHByaW8pOgorCXBhc3MKKworZGVmIHNjaGVkX19zY2hlZF9rdGhyZWFkX3N0b3BfcmV0KGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsCisJY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0sCisJcmV0KToKKwlwYXNzCisKK2RlZiBzY2hlZF9fc2NoZWRfa3RocmVhZF9zdG9wKGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsCisJY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0sCisJY29tbSwgcGlkKToKKwlwYXNzCisKK2RlZiB0cmFjZV91bmhhbmRsZWQoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwgY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywKKwkJY29tbW9uX3BpZCwgY29tbW9uX2NvbW0pOgorCXBhc3MKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOIGIvdG9vbHMvcGVyZi91dGlsL1BFUkYtVkVSU0lPTi1HRU4KaW5kZXggNDllY2U3OS4uOTdkNzY1NiAxMDA3NTUKLS0tIGEvdG9vbHMvcGVyZi91dGlsL1BFUkYtVkVSU0lPTi1HRU4KKysrIGIvdG9vbHMvcGVyZi91dGlsL1BFUkYtVkVSU0lPTi1HRU4KQEAgLTUsMTcgKzUsMTMgQEAKIGZpCiAKIEdWRj0ke09VVFBVVH1QRVJGLVZFUlNJT04tRklMRQotREVGX1ZFUj12MC4wLjIuUEVSRgogCiBMRj0nCiAnCiAKLSMgRmlyc3Qgc2VlIGlmIHRoZXJlIGlzIGEgdmVyc2lvbiBmaWxlIChpbmNsdWRlZCBpbiByZWxlYXNlIHRhcmJhbGxzKSwKLSMgdGhlbiB0cnkgZ2l0LWRlc2NyaWJlLCB0aGVuIGRlZmF1bHQuCi1pZiB0ZXN0IC1mIHZlcnNpb24KLXRoZW4KLQlWTj0kKGNhdCB2ZXJzaW9uKSB8fCBWTj0iJERFRl9WRVIiCi1lbGlmIHRlc3QgLWQgLmdpdCAtbyAtZiAuZ2l0ICYmCisjIEZpcnN0IGNoZWNrIGlmIHRoZXJlIGlzIGEgLmdpdCB0byBnZXQgdGhlIHZlcnNpb24gZnJvbSBnaXQgZGVzY3JpYmUKKyMgb3RoZXJ3aXNlIHRyeSB0byBnZXQgdGhlIHZlcnNpb24gZnJvbSB0aGUga2VybmVsIG1ha2VmaWxlCitpZiB0ZXN0IC1kIC4uLy4uLy5naXQgLW8gLWYgLi4vLi4vLmdpdCAmJgogCVZOPSQoZ2l0IGRlc2NyaWJlIC0tYWJicmV2PTQgSEVBRCAyPi9kZXYvbnVsbCkgJiYKIAljYXNlICIkVk4iIGluCiAJKiRMRiopIChleGl0IDEpIDs7CkBAIC0yNyw3ICsyMywxMiBAQAogdGhlbgogCVZOPSQoZWNobyAiJFZOIiB8IHNlZCAtZSAncy8tLy4vZycpOwogZWxzZQotCVZOPSIkREVGX1ZFUiIKKwlldmFsIGBncmVwICdeVkVSU0lPTlxzKj0nIC4uLy4uL01ha2VmaWxlfHRyIC1kICcgJ2AKKwlldmFsIGBncmVwICdeUEFUQ0hMRVZFTFxzKj0nIC4uLy4uL01ha2VmaWxlfHRyIC1kICcgJ2AKKwlldmFsIGBncmVwICdeU1VCTEVWRUxccyo9JyAuLi8uLi9NYWtlZmlsZXx0ciAtZCAnICdgCisJZXZhbCBgZ3JlcCAnXkVYVFJBVkVSU0lPTlxzKj0nIC4uLy4uL01ha2VmaWxlfHRyIC1kICcgJ2AKKworCVZOPSIke1ZFUlNJT059LiR7UEFUQ0hMRVZFTH0uJHtTVUJMRVZFTH0ke0VYVFJBVkVSU0lPTn0iCiBmaQogCiBWTj0kKGV4cHIgIiRWTiIgOiB2KidcKC4qXCknKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2J1aWxkLWlkLmMgYi90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuYwppbmRleCA3MGM1Y2Y4Li5lNDM3ZWRiIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuYworKysgYi90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgImV2ZW50LmgiCiAjaW5jbHVkZSAic3ltYm9sLmgiCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSAiZGVidWcuaCIKIAogc3RhdGljIGludCBidWlsZF9pZF9fbWFya19kc29faGl0KGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewpAQCAtMzQsMjggKzM1LDQzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZXZlbnRfX2V4aXRfZGVsX3RocmVhZChldmVudF90ICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQoreworCXN0cnVjdCB0aHJlYWQgKnRocmVhZCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBzZWxmLT5mb3JrLnRpZCk7CisKKwlkdW1wX3ByaW50ZigiKCVkOiVkKTooJWQ6JWQpXG4iLCBzZWxmLT5mb3JrLnBpZCwgc2VsZi0+Zm9yay50aWQsCisJCSAgICBzZWxmLT5mb3JrLnBwaWQsIHNlbGYtPmZvcmsucHRpZCk7CisKKwlpZiAodGhyZWFkKSB7CisJCXJiX2VyYXNlKCZ0aHJlYWQtPnJiX25vZGUsICZzZXNzaW9uLT50aHJlYWRzKTsKKwkJc2Vzc2lvbi0+bGFzdF9tYXRjaCA9IE5VTEw7CisJCXRocmVhZF9fZGVsZXRlKHRocmVhZCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0cnVjdCBwZXJmX2V2ZW50X29wcyBidWlsZF9pZF9fbWFya19kc29faGl0X29wcyA9IHsKIAkuc2FtcGxlCT0gYnVpbGRfaWRfX21hcmtfZHNvX2hpdCwKIAkubW1hcAk9IGV2ZW50X19wcm9jZXNzX21tYXAsCiAJLmZvcmsJPSBldmVudF9fcHJvY2Vzc190YXNrLAorCS5leGl0CT0gZXZlbnRfX2V4aXRfZGVsX3RocmVhZCwKIH07CiAKIGNoYXIgKmRzb19fYnVpbGRfaWRfZmlsZW5hbWUoc3RydWN0IGRzbyAqc2VsZiwgY2hhciAqYmYsIHNpemVfdCBzaXplKQogewogCWNoYXIgYnVpbGRfaWRfaGV4W0JVSUxEX0lEX1NJWkUgKiAyICsgMV07Ci0JY29uc3QgY2hhciAqaG9tZTsKIAogCWlmICghc2VsZi0+aGFzX2J1aWxkX2lkKQogCQlyZXR1cm4gTlVMTDsKIAogCWJ1aWxkX2lkX19zcHJpbnRmKHNlbGYtPmJ1aWxkX2lkLCBzaXplb2Yoc2VsZi0+YnVpbGRfaWQpLCBidWlsZF9pZF9oZXgpOwotCWhvbWUgPSBnZXRlbnYoIkhPTUUiKTsKIAlpZiAoYmYgPT0gTlVMTCkgewotCQlpZiAoYXNwcmludGYoJmJmLCAiJXMvJXMvLmJ1aWxkLWlkLyUuMnMvJXMiLCBob21lLAotCQkJICAgICBERUJVR19DQUNIRV9ESVIsIGJ1aWxkX2lkX2hleCwgYnVpbGRfaWRfaGV4ICsgMikgPCAwKQorCQlpZiAoYXNwcmludGYoJmJmLCAiJXMvLmJ1aWxkLWlkLyUuMnMvJXMiLCBidWlsZGlkX2RpciwKKwkJCSAgICAgYnVpbGRfaWRfaGV4LCBidWlsZF9pZF9oZXggKyAyKSA8IDApCiAJCQlyZXR1cm4gTlVMTDsKIAl9IGVsc2UKLQkJc25wcmludGYoYmYsIHNpemUsICIlcy8lcy8uYnVpbGQtaWQvJS4ycy8lcyIsIGhvbWUsCi0JCQkgREVCVUdfQ0FDSEVfRElSLCBidWlsZF9pZF9oZXgsIGJ1aWxkX2lkX2hleCArIDIpOworCQlzbnByaW50ZihiZiwgc2l6ZSwgIiVzLy5idWlsZC1pZC8lLjJzLyVzIiwgYnVpbGRpZF9kaXIsCisJCQkgYnVpbGRfaWRfaGV4LCBidWlsZF9pZF9oZXggKyAyKTsKIAlyZXR1cm4gYmY7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvY2FjaGUuaCBiL3Rvb2xzL3BlcmYvdXRpbC9jYWNoZS5oCmluZGV4IDY1ZmU2NjQuLjI3ZTllYmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9jYWNoZS5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9jYWNoZS5oCkBAIC0yMyw2ICsyMyw3IEBACiBleHRlcm4gaW50IHBlcmZfY29uZmlnX2ludChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiBleHRlcm4gaW50IHBlcmZfY29uZmlnX2Jvb2woY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogZXh0ZXJuIGludCBjb25maWdfZXJyb3Jfbm9uYm9vbChjb25zdCBjaGFyICopOworZXh0ZXJuIGNvbnN0IGNoYXIgKnBlcmZfY29uZmlnX2Rpcm5hbWUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogCiAvKiBwYWdlci5jICovCiBleHRlcm4gdm9pZCBzZXR1cF9wYWdlcih2b2lkKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uYyBiL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uYwppbmRleCA2MmI2OWFkLi5mMjMxZjQzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5jCkBAIC0xOCw3ICsxOCw3IEBACiAjaW5jbHVkZSAidXRpbC5oIgogI2luY2x1ZGUgImNhbGxjaGFpbi5oIgogCi1ib29sIGlwX2NhbGxjaGFpbl9fdmFsaWQoc3RydWN0IGlwX2NhbGxjaGFpbiAqY2hhaW4sIGV2ZW50X3QgKmV2ZW50KQorYm9vbCBpcF9jYWxsY2hhaW5fX3ZhbGlkKHN0cnVjdCBpcF9jYWxsY2hhaW4gKmNoYWluLCBjb25zdCBldmVudF90ICpldmVudCkKIHsKIAl1bnNpZ25lZCBpbnQgY2hhaW5fc2l6ZSA9IGV2ZW50LT5oZWFkZXIuc2l6ZTsKIAljaGFpbl9zaXplIC09ICh1bnNpZ25lZCBsb25nKSZldmVudC0+aXAuX19tb3JlX2RhdGEgLSAodW5zaWduZWQgbG9uZylldmVudDsKQEAgLTIzMCw3ICsyMzAsNyBAQAogCiBzdGF0aWMgdm9pZAogYWRkX2NoaWxkKHN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqcGFyZW50LCBzdHJ1Y3QgcmVzb2x2ZWRfY2hhaW4gKmNoYWluLAotCSAgaW50IHN0YXJ0KQorCSAgaW50IHN0YXJ0LCB1NjQgcGVyaW9kKQogewogCXN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqbmV3OwogCkBAIC0yMzgsNyArMjM4LDcgQEAKIAlmaWxsX25vZGUobmV3LCBjaGFpbiwgc3RhcnQpOwogCiAJbmV3LT5jaGlsZHJlbl9oaXQgPSAwOwotCW5ldy0+aGl0ID0gMTsKKwluZXctPmhpdCA9IHBlcmlvZDsKIH0KIAogLyoKQEAgLTI0OCw3ICsyNDgsOCBAQAogICovCiBzdGF0aWMgdm9pZAogc3BsaXRfYWRkX2NoaWxkKHN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqcGFyZW50LCBzdHJ1Y3QgcmVzb2x2ZWRfY2hhaW4gKmNoYWluLAotCQlzdHJ1Y3QgY2FsbGNoYWluX2xpc3QgKnRvX3NwbGl0LCBpbnQgaWR4X3BhcmVudHMsIGludCBpZHhfbG9jYWwpCisJCXN0cnVjdCBjYWxsY2hhaW5fbGlzdCAqdG9fc3BsaXQsIGludCBpZHhfcGFyZW50cywgaW50IGlkeF9sb2NhbCwKKwkJdTY0IHBlcmlvZCkKIHsKIAlzdHJ1Y3QgY2FsbGNoYWluX25vZGUgKm5ldzsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpvbGRfdGFpbDsKQEAgLTI3NSw0MSArMjc2LDQxIEBACiAJLyogY3JlYXRlIGEgbmV3IGNoaWxkIGZvciB0aGUgbmV3IGJyYW5jaCBpZiBhbnkgKi8KIAlpZiAoaWR4X3RvdGFsIDwgY2hhaW4tPm5yKSB7CiAJCXBhcmVudC0+aGl0ID0gMDsKLQkJYWRkX2NoaWxkKHBhcmVudCwgY2hhaW4sIGlkeF90b3RhbCk7Ci0JCXBhcmVudC0+Y2hpbGRyZW5faGl0Kys7CisJCWFkZF9jaGlsZChwYXJlbnQsIGNoYWluLCBpZHhfdG90YWwsIHBlcmlvZCk7CisJCXBhcmVudC0+Y2hpbGRyZW5faGl0ICs9IHBlcmlvZDsKIAl9IGVsc2UgewotCQlwYXJlbnQtPmhpdCA9IDE7CisJCXBhcmVudC0+aGl0ID0gcGVyaW9kOwogCX0KIH0KIAogc3RhdGljIGludAogX19hcHBlbmRfY2hhaW4oc3RydWN0IGNhbGxjaGFpbl9ub2RlICpyb290LCBzdHJ1Y3QgcmVzb2x2ZWRfY2hhaW4gKmNoYWluLAotCSAgICAgICB1bnNpZ25lZCBpbnQgc3RhcnQpOworCSAgICAgICB1bnNpZ25lZCBpbnQgc3RhcnQsIHU2NCBwZXJpb2QpOwogCiBzdGF0aWMgdm9pZAogX19hcHBlbmRfY2hhaW5fY2hpbGRyZW4oc3RydWN0IGNhbGxjaGFpbl9ub2RlICpyb290LAogCQkJc3RydWN0IHJlc29sdmVkX2NoYWluICpjaGFpbiwKLQkJCXVuc2lnbmVkIGludCBzdGFydCkKKwkJCXVuc2lnbmVkIGludCBzdGFydCwgdTY0IHBlcmlvZCkKIHsKIAlzdHJ1Y3QgY2FsbGNoYWluX25vZGUgKnJub2RlOwogCiAJLyogbG9va3VwIGluIGNoaWxkcmVucyAqLwogCWNoYWluX2Zvcl9lYWNoX2NoaWxkKHJub2RlLCByb290KSB7Ci0JCXVuc2lnbmVkIGludCByZXQgPSBfX2FwcGVuZF9jaGFpbihybm9kZSwgY2hhaW4sIHN0YXJ0KTsKKwkJdW5zaWduZWQgaW50IHJldCA9IF9fYXBwZW5kX2NoYWluKHJub2RlLCBjaGFpbiwgc3RhcnQsIHBlcmlvZCk7CiAKIAkJaWYgKCFyZXQpCiAJCQlnb3RvIGluY19jaGlsZHJlbl9oaXQ7CiAJfQogCS8qIG5vdGhpbmcgaW4gY2hpbGRyZW4sIGFkZCB0byB0aGUgY3VycmVudCBub2RlICovCi0JYWRkX2NoaWxkKHJvb3QsIGNoYWluLCBzdGFydCk7CisJYWRkX2NoaWxkKHJvb3QsIGNoYWluLCBzdGFydCwgcGVyaW9kKTsKIAogaW5jX2NoaWxkcmVuX2hpdDoKLQlyb290LT5jaGlsZHJlbl9oaXQrKzsKKwlyb290LT5jaGlsZHJlbl9oaXQgKz0gcGVyaW9kOwogfQogCiBzdGF0aWMgaW50CiBfX2FwcGVuZF9jaGFpbihzdHJ1Y3QgY2FsbGNoYWluX25vZGUgKnJvb3QsIHN0cnVjdCByZXNvbHZlZF9jaGFpbiAqY2hhaW4sCi0JICAgICAgIHVuc2lnbmVkIGludCBzdGFydCkKKwkgICAgICAgdW5zaWduZWQgaW50IHN0YXJ0LCB1NjQgcGVyaW9kKQogewogCXN0cnVjdCBjYWxsY2hhaW5fbGlzdCAqY25vZGU7CiAJdW5zaWduZWQgaW50IGkgPSBzdGFydDsKQEAgLTM0NSwxOCArMzQ2LDE4IEBACiAKIAkvKiB3ZSBtYXRjaCBvbmx5IGEgcGFydCBvZiB0aGUgbm9kZS4gU3BsaXQgaXQgYW5kIGFkZCB0aGUgbmV3IGNoYWluICovCiAJaWYgKGkgLSBzdGFydCA8IHJvb3QtPnZhbF9ucikgewotCQlzcGxpdF9hZGRfY2hpbGQocm9vdCwgY2hhaW4sIGNub2RlLCBzdGFydCwgaSAtIHN0YXJ0KTsKKwkJc3BsaXRfYWRkX2NoaWxkKHJvb3QsIGNoYWluLCBjbm9kZSwgc3RhcnQsIGkgLSBzdGFydCwgcGVyaW9kKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJLyogd2UgbWF0Y2ggMTAwJSBvZiB0aGUgcGF0aCwgaW5jcmVtZW50IHRoZSBoaXQgKi8KIAlpZiAoaSAtIHN0YXJ0ID09IHJvb3QtPnZhbF9uciAmJiBpID09IGNoYWluLT5ucikgewotCQlyb290LT5oaXQrKzsKKwkJcm9vdC0+aGl0ICs9IHBlcmlvZDsKIAkJcmV0dXJuIDA7CiAJfQogCiAJLyogV2UgbWF0Y2ggdGhlIG5vZGUgYW5kIHN0aWxsIGhhdmUgYSBwYXJ0IHJlbWFpbmluZyAqLwotCV9fYXBwZW5kX2NoYWluX2NoaWxkcmVuKHJvb3QsIGNoYWluLCBpKTsKKwlfX2FwcGVuZF9jaGFpbl9jaGlsZHJlbihyb290LCBjaGFpbiwgaSwgcGVyaW9kKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzgwLDcgKzM4MSw3IEBACiAKIAogaW50IGFwcGVuZF9jaGFpbihzdHJ1Y3QgY2FsbGNoYWluX25vZGUgKnJvb3QsIHN0cnVjdCBpcF9jYWxsY2hhaW4gKmNoYWluLAotCQkgc3RydWN0IG1hcF9zeW1ib2wgKnN5bXMpCisJCSBzdHJ1Y3QgbWFwX3N5bWJvbCAqc3ltcywgdTY0IHBlcmlvZCkKIHsKIAlzdHJ1Y3QgcmVzb2x2ZWRfY2hhaW4gKmZpbHRlcmVkOwogCkBAIC0zOTcsNyArMzk4LDcgQEAKIAlpZiAoIWZpbHRlcmVkLT5ucikKIAkJZ290byBlbmQ7CiAKLQlfX2FwcGVuZF9jaGFpbl9jaGlsZHJlbihyb290LCBmaWx0ZXJlZCwgMCk7CisJX19hcHBlbmRfY2hhaW5fY2hpbGRyZW4ocm9vdCwgZmlsdGVyZWQsIDAsIHBlcmlvZCk7CiBlbmQ6CiAJZnJlZShmaWx0ZXJlZCk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uaCBiL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uaAppbmRleCAxY2E3M2U0Li42MjRhOTZjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5oCkBAIC00OSw2ICs0OSw5IEBACiAJSU5JVF9MSVNUX0hFQUQoJm5vZGUtPmJyb3RoZXJzKTsKIAlJTklUX0xJU1RfSEVBRCgmbm9kZS0+Y2hpbGRyZW4pOwogCUlOSVRfTElTVF9IRUFEKCZub2RlLT52YWwpOworCisJbm9kZS0+cGFyZW50ID0gTlVMTDsKKwlub2RlLT5oaXQgPSAwOwogfQogCiBzdGF0aWMgaW5saW5lIHU2NCBjdW11bF9oaXRzKHN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqbm9kZSkKQEAgLTU4LDcgKzYxLDcgQEAKIAogaW50IHJlZ2lzdGVyX2NhbGxjaGFpbl9wYXJhbShzdHJ1Y3QgY2FsbGNoYWluX3BhcmFtICpwYXJhbSk7CiBpbnQgYXBwZW5kX2NoYWluKHN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqcm9vdCwgc3RydWN0IGlwX2NhbGxjaGFpbiAqY2hhaW4sCi0JCSBzdHJ1Y3QgbWFwX3N5bWJvbCAqc3ltcyk7CisJCSBzdHJ1Y3QgbWFwX3N5bWJvbCAqc3ltcywgdTY0IHBlcmlvZCk7CiAKLWJvb2wgaXBfY2FsbGNoYWluX192YWxpZChzdHJ1Y3QgaXBfY2FsbGNoYWluICpjaGFpbiwgZXZlbnRfdCAqZXZlbnQpOworYm9vbCBpcF9jYWxsY2hhaW5fX3ZhbGlkKHN0cnVjdCBpcF9jYWxsY2hhaW4gKmNoYWluLCBjb25zdCBldmVudF90ICpldmVudCk7CiAjZW5kaWYJLyogX19QRVJGX0NBTExDSEFJTl9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvY29uZmlnLmMgYi90b29scy9wZXJmL3V0aWwvY29uZmlnLmMKaW5kZXggZGFiZTg5Mi4uZTAyZDc4YyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2NvbmZpZy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9jb25maWcuYwpAQCAtMTEsNiArMTEsMTEgQEAKIAogI2RlZmluZSBNQVhOQU1FICgyNTYpCiAKKyNkZWZpbmUgREVCVUdfQ0FDSEVfRElSICIuZGVidWciCisKKworY2hhciBidWlsZGlkX2RpcltNQVhQQVRITEVOXTsgLyogcm9vdCBkaXIgZm9yIGJ1aWxkaWQsIGJpbmFyeSBjYWNoZSAqLworCiBzdGF0aWMgRklMRSAqY29uZmlnX2ZpbGU7CiBzdGF0aWMgY29uc3QgY2hhciAqY29uZmlnX2ZpbGVfbmFtZTsKIHN0YXRpYyBpbnQgY29uZmlnX2xpbmVucjsKQEAgLTEyNyw3ICsxMzIsNyBAQAogCQkJYnJlYWs7CiAJCWlmICghaXNrZXljaGFyKGMpKQogCQkJYnJlYWs7Ci0JCW5hbWVbbGVuKytdID0gdG9sb3dlcihjKTsKKwkJbmFtZVtsZW4rK10gPSBjOwogCQlpZiAobGVuID49IE1BWE5BTUUpCiAJCQlyZXR1cm4gLTE7CiAJfQpAQCAtMzI3LDYgKzMzMiwxMyBAQAogCXJldHVybiAhIXBlcmZfY29uZmlnX2Jvb2xfb3JfaW50KG5hbWUsIHZhbHVlLCAmZGlzY2FyZCk7CiB9CiAKK2NvbnN0IGNoYXIgKnBlcmZfY29uZmlnX2Rpcm5hbWUoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCFuYW1lKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gdmFsdWU7Cit9CisKIHN0YXRpYyBpbnQgcGVyZl9kZWZhdWx0X2NvcmVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciBfX3VzZWQsIGNvbnN0IGNoYXIgKnZhbHVlIF9fdXNlZCkKIHsKIAkvKiBBZGQgb3RoZXIgY29uZmlnIHZhcmlhYmxlcyBoZXJlIGFuZCB0byBEb2N1bWVudGF0aW9uL2NvbmZpZy50eHQuICovCkBAIC00MjgsMyArNDQwLDUzIEBACiB7CiAJcmV0dXJuIGVycm9yKCJNaXNzaW5nIHZhbHVlIGZvciAnJXMnIiwgdmFyKTsKIH0KKworc3RydWN0IGJ1aWxkaWRfZGlyX2NvbmZpZyB7CisJY2hhciAqZGlyOworfTsKKworc3RhdGljIGludCBidWlsZGlkX2Rpcl9jb21tYW5kX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLAorCQkJCSAgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGJ1aWxkaWRfZGlyX2NvbmZpZyAqYyA9IGRhdGE7CisJY29uc3QgY2hhciAqdjsKKworCS8qIHNhbWUgZGlyIGZvciBhbGwgY29tbWFuZHMgKi8KKwlpZiAoIXByZWZpeGNtcCh2YXIsICJidWlsZGlkLiIpICYmICFzdHJjbXAodmFyICsgOCwgImRpciIpKSB7CisJCXYgPSBwZXJmX2NvbmZpZ19kaXJuYW1lKHZhciwgdmFsdWUpOworCQlpZiAoIXYpCisJCQlyZXR1cm4gLTE7CisJCXN0cm5jcHkoYy0+ZGlyLCB2LCBNQVhQQVRITEVOLTEpOworCQljLT5kaXJbTUFYUEFUSExFTi0xXSA9ICdcMCc7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjaGVja19idWlsZGlkX2Rpcl9jb25maWcodm9pZCkKK3sKKwlzdHJ1Y3QgYnVpbGRpZF9kaXJfY29uZmlnIGM7CisJYy5kaXIgPSBidWlsZGlkX2RpcjsKKwlwZXJmX2NvbmZpZyhidWlsZGlkX2Rpcl9jb21tYW5kX2NvbmZpZywgJmMpOworfQorCit2b2lkIHNldF9idWlsZGlkX2Rpcih2b2lkKQoreworCWJ1aWxkaWRfZGlyWzBdID0gJ1wwJzsKKworCS8qIHRyeSBjb25maWcgZmlsZSAqLworCWNoZWNrX2J1aWxkaWRfZGlyX2NvbmZpZygpOworCisJLyogZGVmYXVsdCB0byAkSE9NRS8uZGVidWcgKi8KKwlpZiAoYnVpbGRpZF9kaXJbMF0gPT0gJ1wwJykgeworCQljaGFyICp2ID0gZ2V0ZW52KCJIT01FIik7CisJCWlmICh2KSB7CisJCQlzbnByaW50ZihidWlsZGlkX2RpciwgTUFYUEFUSExFTi0xLCAiJXMvJXMiLAorCQkJCSB2LCBERUJVR19DQUNIRV9ESVIpOworCQl9IGVsc2UgeworCQkJc3RybmNweShidWlsZGlkX2RpciwgREVCVUdfQ0FDSEVfRElSLCBNQVhQQVRITEVOLTEpOworCQl9CisJCWJ1aWxkaWRfZGlyW01BWFBBVEhMRU4tMV0gPSAnXDAnOworCX0KKwkvKiBmb3IgY29tbXVuaWNhdGluZyB3aXRoIGV4dGVybmFsIGNvbW1hbmRzICovCisJc2V0ZW52KCJQRVJGX0JVSUxESURfRElSIiwgYnVpbGRpZF9kaXIsIDEpOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2NwdW1hcC5jIGIvdG9vbHMvcGVyZi91dGlsL2NwdW1hcC5jCmluZGV4IDRlMDE0OTAuLjBmOWI4ZDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9jcHVtYXAuYworKysgYi90b29scy9wZXJmL3V0aWwvY3B1bWFwLmMKQEAgLTIwLDcgKzIwLDcgQEAKIAlyZXR1cm4gbnJfY3B1czsKIH0KIAotaW50IHJlYWRfY3B1X21hcCh2b2lkKQorc3RhdGljIGludCByZWFkX2FsbF9jcHVfbWFwKHZvaWQpCiB7CiAJRklMRSAqb25sbmY7CiAJaW50IG5yX2NwdXMgPSAwOwpAQCAtNTcsMyArNTcsNTggQEAKIAogCXJldHVybiBkZWZhdWx0X2NwdV9tYXAoKTsKIH0KKworaW50IHJlYWRfY3B1X21hcChjb25zdCBjaGFyICpjcHVfbGlzdCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X2NwdSwgZW5kX2NwdSA9IDA7CisJY2hhciAqcCA9IE5VTEw7CisJaW50IGksIG5yX2NwdXMgPSAwOworCisJaWYgKCFjcHVfbGlzdCkKKwkJcmV0dXJuIHJlYWRfYWxsX2NwdV9tYXAoKTsKKworCWlmICghaXNkaWdpdCgqY3B1X2xpc3QpKQorCQlnb3RvIGludmFsaWQ7CisKKwl3aGlsZSAoaXNkaWdpdCgqY3B1X2xpc3QpKSB7CisJCXAgPSBOVUxMOworCQlzdGFydF9jcHUgPSBzdHJ0b3VsKGNwdV9saXN0LCAmcCwgMCk7CisJCWlmIChzdGFydF9jcHUgPj0gSU5UX01BWAorCQkgICAgfHwgKCpwICE9ICdcMCcgJiYgKnAgIT0gJywnICYmICpwICE9ICctJykpCisJCQlnb3RvIGludmFsaWQ7CisKKwkJaWYgKCpwID09ICctJykgeworCQkJY3B1X2xpc3QgPSArK3A7CisJCQlwID0gTlVMTDsKKwkJCWVuZF9jcHUgPSBzdHJ0b3VsKGNwdV9saXN0LCAmcCwgMCk7CisKKwkJCWlmIChlbmRfY3B1ID49IElOVF9NQVggfHwgKCpwICE9ICdcMCcgJiYgKnAgIT0gJywnKSkKKwkJCQlnb3RvIGludmFsaWQ7CisKKwkJCWlmIChlbmRfY3B1IDwgc3RhcnRfY3B1KQorCQkJCWdvdG8gaW52YWxpZDsKKwkJfSBlbHNlIHsKKwkJCWVuZF9jcHUgPSBzdGFydF9jcHU7CisJCX0KKworCQlmb3IgKDsgc3RhcnRfY3B1IDw9IGVuZF9jcHU7IHN0YXJ0X2NwdSsrKSB7CisJCQkvKiBjaGVjayBmb3IgZHVwbGljYXRlcyAqLworCQkJZm9yIChpID0gMDsgaSA8IG5yX2NwdXM7IGkrKykKKwkJCQlpZiAoY3B1bWFwW2ldID09IChpbnQpc3RhcnRfY3B1KQorCQkJCQlnb3RvIGludmFsaWQ7CisKKwkJCWFzc2VydChucl9jcHVzIDwgTUFYX05SX0NQVVMpOworCQkJY3B1bWFwW25yX2NwdXMrK10gPSAoaW50KXN0YXJ0X2NwdTsKKwkJfQorCQlpZiAoKnApCisJCQkrK3A7CisKKwkJY3B1X2xpc3QgPSBwOworCX0KKwlpZiAobnJfY3B1cyA+IDApCisJCXJldHVybiBucl9jcHVzOworCisJcmV0dXJuIGRlZmF1bHRfY3B1X21hcCgpOworaW52YWxpZDoKKwlyZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvY3B1bWFwLmggYi90b29scy9wZXJmL3V0aWwvY3B1bWFwLmgKaW5kZXggODZjNzhiYi4uM2U2MGY1NiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2NwdW1hcC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9jcHVtYXAuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX19QRVJGX0NQVU1BUF9ICiAjZGVmaW5lIF9fUEVSRl9DUFVNQVBfSAogCi1leHRlcm4gaW50IHJlYWRfY3B1X21hcCh2b2lkKTsKK2V4dGVybiBpbnQgcmVhZF9jcHVfbWFwKGNvbnN0IGNoYXIgKmNwdV9saXN0KTsKIGV4dGVybiBpbnQgY3B1bWFwW107CiAKICNlbmRpZiAvKiBfX1BFUkZfQ1BVTUFQX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5jIGIvdG9vbHMvcGVyZi91dGlsL2RlYnVnLmMKaW5kZXggNmNkZGZmMi4uMzE4ZGFiMSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2RlYnVnLmMKQEAgLTg2LDEyICs4NiwxMCBAQAogCQkJZHVtcF9wcmludGZfY29sb3IoIiAgIiwgY29sb3IpOwogCQkJZm9yIChqID0gMDsgaiA8IDE1LShpICYgMTUpOyBqKyspCiAJCQkJZHVtcF9wcmludGZfY29sb3IoIiAgICIsIGNvbG9yKTsKLQkJCWZvciAoaiA9IDA7IGogPCAoaSAmIDE1KTsgaisrKSB7Ci0JCQkJaWYgKGlzcHJpbnQocmF3X2V2ZW50W2ktMTUral0pKQotCQkJCQlkdW1wX3ByaW50Zl9jb2xvcigiJWMiLCBjb2xvciwKLQkJCQkJCQkgIHJhd19ldmVudFtpLTE1K2pdKTsKLQkJCQllbHNlCi0JCQkJCWR1bXBfcHJpbnRmX2NvbG9yKCIuIiwgY29sb3IpOworCQkJZm9yIChqID0gaSAmIH4xNTsgaiA8PSBpOyBqKyspIHsKKwkJCQlkdW1wX3ByaW50Zl9jb2xvcigiJWMiLCBjb2xvciwKKwkJCQkJCWlzcHJpbnQocmF3X2V2ZW50W2pdKSA/CisJCQkJCQlyYXdfZXZlbnRbal0gOiAnLicpOwogCQkJfQogCQkJZHVtcF9wcmludGZfY29sb3IoIlxuIiwgY29sb3IpOwogCQl9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZlbnQuYyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jCmluZGV4IDJmYmY2YTQuLmRhYjllNzUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jCkBAIC0xNTEsNyArMTUxLDYgQEAKIAkJCWNvbnRpbnVlOwogCQlwYmYgKz0gbiArIDM7CiAJCWlmICgqcGJmID09ICd4JykgeyAvKiB2bV9leGVjICovCi0JCQl1NjQgdm1fcGdvZmY7CiAJCQljaGFyICpleGVjbmFtZSA9IHN0cmNocihiZiwgJy8nKTsKIAogCQkJLyogQ2F0Y2ggVkRTTyAqLwpAQCAtMTYyLDEyICsxNjEsNyBAQAogCQkJCWNvbnRpbnVlOwogCiAJCQlwYmYgKz0gMzsKLQkJCW4gPSBoZXgydTY0KHBiZiwgJnZtX3Bnb2ZmKTsKLQkJCS8qIHBnb2ZmIGlzIGluIGJ5dGVzLCBub3QgcGFnZXMgKi8KLQkJCWlmIChuID49IDApCi0JCQkJZXYubW1hcC5wZ29mZiA9IHZtX3Bnb2ZmIDw8IGdldHBhZ2VzaXplKCk7Ci0JCQllbHNlCi0JCQkJZXYubW1hcC5wZ29mZiA9IDA7CisJCQluID0gaGV4MnU2NChwYmYsICZldi5tbWFwLnBnb2ZmKTsKIAogCQkJc2l6ZSA9IHN0cmxlbihleGVjbmFtZSk7CiAJCQlleGVjbmFtZVtzaXplIC0gMV0gPSAnXDAnOyAvKiBSZW1vdmUgXG4gKi8KQEAgLTM0MCwzMCArMzM0LDI5IEBACiAJcmV0dXJuIHByb2Nlc3MoJmV2LCBzZXNzaW9uKTsKIH0KIAotc3RhdGljIHZvaWQgdGhyZWFkX19jb21tX2FkanVzdChzdHJ1Y3QgdGhyZWFkICpzZWxmKQorc3RhdGljIHZvaWQgdGhyZWFkX19jb21tX2FkanVzdChzdHJ1Y3QgdGhyZWFkICpzZWxmLCBzdHJ1Y3QgaGlzdHMgKmhpc3RzKQogewogCWNoYXIgKmNvbW0gPSBzZWxmLT5jb21tOwogCiAJaWYgKCFzeW1ib2xfY29uZi5jb2xfd2lkdGhfbGlzdF9zdHIgJiYgIXN5bWJvbF9jb25mLmZpZWxkX3NlcCAmJgogCSAgICAoIXN5bWJvbF9jb25mLmNvbW1fbGlzdCB8fAogCSAgICAgc3RybGlzdF9faGFzX2VudHJ5KHN5bWJvbF9jb25mLmNvbW1fbGlzdCwgY29tbSkpKSB7Ci0JCXVuc2lnbmVkIGludCBzbGVuID0gc3RybGVuKGNvbW0pOworCQl1MTYgc2xlbiA9IHN0cmxlbihjb21tKTsKIAotCQlpZiAoc2xlbiA+IGNvbW1zX19jb2xfd2lkdGgpIHsKLQkJCWNvbW1zX19jb2xfd2lkdGggPSBzbGVuOwotCQkJdGhyZWFkc19fY29sX3dpZHRoID0gc2xlbiArIDY7Ci0JCX0KKwkJaWYgKGhpc3RzX19uZXdfY29sX2xlbihoaXN0cywgSElTVENfQ09NTSwgc2xlbikpCisJCQloaXN0c19fc2V0X2NvbF9sZW4oaGlzdHMsIEhJU1RDX1RIUkVBRCwgc2xlbiArIDYpOwogCX0KIH0KIAotc3RhdGljIGludCB0aHJlYWRfX3NldF9jb21tX2FkanVzdChzdHJ1Y3QgdGhyZWFkICpzZWxmLCBjb25zdCBjaGFyICpjb21tKQorc3RhdGljIGludCB0aHJlYWRfX3NldF9jb21tX2FkanVzdChzdHJ1Y3QgdGhyZWFkICpzZWxmLCBjb25zdCBjaGFyICpjb21tLAorCQkJCSAgIHN0cnVjdCBoaXN0cyAqaGlzdHMpCiB7CiAJaW50IHJldCA9IHRocmVhZF9fc2V0X2NvbW0oc2VsZiwgY29tbSk7CiAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JdGhyZWFkX19jb21tX2FkanVzdChzZWxmKTsKKwl0aHJlYWRfX2NvbW1fYWRqdXN0KHNlbGYsIGhpc3RzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzc0LDcgKzM2Nyw4IEBACiAKIAlkdW1wX3ByaW50ZigiOiAlczolZFxuIiwgc2VsZi0+Y29tbS5jb21tLCBzZWxmLT5jb21tLnRpZCk7CiAKLQlpZiAodGhyZWFkID09IE5VTEwgfHwgdGhyZWFkX19zZXRfY29tbV9hZGp1c3QodGhyZWFkLCBzZWxmLT5jb21tLmNvbW0pKSB7CisJaWYgKHRocmVhZCA9PSBOVUxMIHx8IHRocmVhZF9fc2V0X2NvbW1fYWRqdXN0KHRocmVhZCwgc2VsZi0+Y29tbS5jb21tLAorCQkJCQkJICAgICAgJnNlc3Npb24tPmhpc3RzKSkgewogCQlkdW1wX3ByaW50ZigicHJvYmxlbSBwcm9jZXNzaW5nIFBFUkZfUkVDT1JEX0NPTU0sIHNraXBwaW5nIGV2ZW50LlxuIik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC00NTYsNiArNDUwLDcgQEAKIAkJCWdvdG8gb3V0X3Byb2JsZW07CiAKIAkJbWFwLT5kc28tPnNob3J0X25hbWUgPSBuYW1lOworCQltYXAtPmRzby0+c25hbWVfYWxsb2MgPSAxOwogCQltYXAtPmVuZCA9IG1hcC0+c3RhcnQgKyBzZWxmLT5tbWFwLmxlbjsKIAl9IGVsc2UgaWYgKGlzX2tlcm5lbF9tbWFwKSB7CiAJCWNvbnN0IGNoYXIgKnN5bWJvbF9uYW1lID0gKHNlbGYtPm1tYXAuZmlsZW5hbWUgKwpAQCAtNTE0LDEyICs1MDksMTMgQEAKIAlpZiAobWFjaGluZSA9PSBOVUxMKQogCQlnb3RvIG91dF9wcm9ibGVtOwogCXRocmVhZCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBzZWxmLT5tbWFwLnBpZCk7CisJaWYgKHRocmVhZCA9PSBOVUxMKQorCQlnb3RvIG91dF9wcm9ibGVtOwogCW1hcCA9IG1hcF9fbmV3KCZtYWNoaW5lLT51c2VyX2Rzb3MsIHNlbGYtPm1tYXAuc3RhcnQsCiAJCQlzZWxmLT5tbWFwLmxlbiwgc2VsZi0+bW1hcC5wZ29mZiwKIAkJCXNlbGYtPm1tYXAucGlkLCBzZWxmLT5tbWFwLmZpbGVuYW1lLAotCQkJTUFQX19GVU5DVElPTiwgc2Vzc2lvbi0+Y3dkLCBzZXNzaW9uLT5jd2RsZW4pOwotCi0JaWYgKHRocmVhZCA9PSBOVUxMIHx8IG1hcCA9PSBOVUxMKQorCQkJTUFQX19GVU5DVElPTik7CisJaWYgKG1hcCA9PSBOVUxMKQogCQlnb3RvIG91dF9wcm9ibGVtOwogCiAJdGhyZWFkX19pbnNlcnRfbWFwKHRocmVhZCwgbWFwKTsKQEAgLTU1Miw2ICs1NDgsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IGV2ZW50X19wcm9jZXNzKGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQoreworCXN3aXRjaCAoZXZlbnQtPmhlYWRlci50eXBlKSB7CisJY2FzZSBQRVJGX1JFQ09SRF9DT01NOgorCQlldmVudF9fcHJvY2Vzc19jb21tKGV2ZW50LCBzZXNzaW9uKTsKKwkJYnJlYWs7CisJY2FzZSBQRVJGX1JFQ09SRF9NTUFQOgorCQlldmVudF9fcHJvY2Vzc19tbWFwKGV2ZW50LCBzZXNzaW9uKTsKKwkJYnJlYWs7CisJY2FzZSBQRVJGX1JFQ09SRF9GT1JLOgorCWNhc2UgUEVSRl9SRUNPUkRfRVhJVDoKKwkJZXZlbnRfX3Byb2Nlc3NfdGFzayhldmVudCwgc2Vzc2lvbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCiB2b2lkIHRocmVhZF9fZmluZF9hZGRyX21hcChzdHJ1Y3QgdGhyZWFkICpzZWxmLAogCQkJICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgdTggY3B1bW9kZSwKIAkJCSAgIGVudW0gbWFwX3R5cGUgdHlwZSwgcGlkX3QgcGlkLCB1NjQgYWRkciwKQEAgLTY0MSwyNyArNjU3LDQ5IEBACiAJCWFsLT5zeW0gPSBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBkc29fX2NhbGNfY29sX3dpZHRoKHN0cnVjdCBkc28gKnNlbGYpCitzdGF0aWMgdm9pZCBkc29fX2NhbGNfY29sX3dpZHRoKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBoaXN0cyAqaGlzdHMpCiB7CiAJaWYgKCFzeW1ib2xfY29uZi5jb2xfd2lkdGhfbGlzdF9zdHIgJiYgIXN5bWJvbF9jb25mLmZpZWxkX3NlcCAmJgogCSAgICAoIXN5bWJvbF9jb25mLmRzb19saXN0IHx8CiAJICAgICBzdHJsaXN0X19oYXNfZW50cnkoc3ltYm9sX2NvbmYuZHNvX2xpc3QsIHNlbGYtPm5hbWUpKSkgewotCQl1MTYgc2xlbiA9IHNlbGYtPnNob3J0X25hbWVfbGVuOwotCQlpZiAodmVyYm9zZSkKLQkJCXNsZW4gPSBzZWxmLT5sb25nX25hbWVfbGVuOwotCQlpZiAoZHNvc19fY29sX3dpZHRoIDwgc2xlbikKLQkJCWRzb3NfX2NvbF93aWR0aCA9IHNsZW47CisJCXUxNiBzbGVuID0gZHNvX19uYW1lX2xlbihzZWxmKTsKKwkJaGlzdHNfX25ld19jb2xfbGVuKGhpc3RzLCBISVNUQ19EU08sIHNsZW4pOwogCX0KIAogCXNlbGYtPnNsZW5fY2FsY3VsYXRlZCA9IDE7CiB9CiAKIGludCBldmVudF9fcHJlcHJvY2Vzc19zYW1wbGUoY29uc3QgZXZlbnRfdCAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKLQkJCSAgICAgc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQorCQkJICAgICBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwsIHN0cnVjdCBzYW1wbGVfZGF0YSAqZGF0YSwKKwkJCSAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKIAl1OCBjcHVtb2RlID0gc2VsZi0+aGVhZGVyLm1pc2MgJiBQRVJGX1JFQ09SRF9NSVNDX0NQVU1PREVfTUFTSzsKLQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgc2VsZi0+aXAucGlkKTsKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQ7CiAKKwlldmVudF9fcGFyc2Vfc2FtcGxlKHNlbGYsIHNlc3Npb24tPnNhbXBsZV90eXBlLCBkYXRhKTsKKworCWR1bXBfcHJpbnRmKCIoSVAsICVkKTogJWQvJWQ6ICUjTHggcGVyaW9kOiAlTGQgY3B1OiVkXG4iLAorCQkgICAgc2VsZi0+aGVhZGVyLm1pc2MsIGRhdGEtPnBpZCwgZGF0YS0+dGlkLCBkYXRhLT5pcCwKKwkJICAgIGRhdGEtPnBlcmlvZCwgZGF0YS0+Y3B1KTsKKworCWlmIChzZXNzaW9uLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NBTExDSEFJTikgeworCQl1bnNpZ25lZCBpbnQgaTsKKworCQlkdW1wX3ByaW50ZigiLi4uIGNoYWluOiBucjolTHVcbiIsIGRhdGEtPmNhbGxjaGFpbi0+bnIpOworCisJCWlmICghaXBfY2FsbGNoYWluX192YWxpZChkYXRhLT5jYWxsY2hhaW4sIHNlbGYpKSB7CisJCQlwcl9kZWJ1ZygiY2FsbC1jaGFpbiBwcm9ibGVtIHdpdGggZXZlbnQsICIKKwkJCQkgInNraXBwaW5nIGl0LlxuIik7CisJCQlnb3RvIG91dF9maWx0ZXJlZDsKKwkJfQorCisJCWlmIChkdW1wX3RyYWNlKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+Y2FsbGNoYWluLT5ucjsgaSsrKQorCQkJCWR1bXBfcHJpbnRmKCIuLi4uLiAlMmQ6ICUwMTZMeFxuIiwKKwkJCQkJICAgIGksIGRhdGEtPmNhbGxjaGFpbi0+aXBzW2ldKTsKKwkJfQorCX0KKwl0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgc2VsZi0+aXAucGlkKTsKIAlpZiAodGhyZWFkID09IE5VTEwpCiAJCXJldHVybiAtMTsKIApAQCAtNjg3LDYgKzcyNSw3IEBACiAJCSAgICBhbC0+bWFwID8gYWwtPm1hcC0+ZHNvLT5sb25nX25hbWUgOgogCQkJYWwtPmxldmVsID09ICdIJyA/ICJbaHlwZXJ2aXNvcl0iIDogIjxub3QgZm91bmQ+Iik7CiAJYWwtPnN5bSA9IE5VTEw7CisJYWwtPmNwdSA9IGRhdGEtPmNwdTsKIAogCWlmIChhbC0+bWFwKSB7CiAJCWlmIChzeW1ib2xfY29uZi5kc29fbGlzdCAmJgpAQCAtNzAzLDE2ICs3NDIsMTcgQEAKIAkJICogc2FtcGxlZC4KIAkJICovCiAJCWlmICghc29ydF9kc28uZWxpZGUgJiYgIWFsLT5tYXAtPmRzby0+c2xlbl9jYWxjdWxhdGVkKQotCQkJZHNvX19jYWxjX2NvbF93aWR0aChhbC0+bWFwLT5kc28pOworCQkJZHNvX19jYWxjX2NvbF93aWR0aChhbC0+bWFwLT5kc28sICZzZXNzaW9uLT5oaXN0cyk7CiAKIAkJYWwtPnN5bSA9IG1hcF9fZmluZF9zeW1ib2woYWwtPm1hcCwgYWwtPmFkZHIsIGZpbHRlcik7CiAJfSBlbHNlIHsKIAkJY29uc3QgdW5zaWduZWQgaW50IHVucmVzb2x2ZWRfY29sX3dpZHRoID0gQklUU19QRVJfTE9ORyAvIDQ7CiAKLQkJaWYgKGRzb3NfX2NvbF93aWR0aCA8IHVucmVzb2x2ZWRfY29sX3dpZHRoICYmCisJCWlmIChoaXN0c19fY29sX2xlbigmc2Vzc2lvbi0+aGlzdHMsIEhJU1RDX0RTTykgPCB1bnJlc29sdmVkX2NvbF93aWR0aCAmJgogCQkgICAgIXN5bWJvbF9jb25mLmNvbF93aWR0aF9saXN0X3N0ciAmJiAhc3ltYm9sX2NvbmYuZmllbGRfc2VwICYmCiAJCSAgICAhc3ltYm9sX2NvbmYuZHNvX2xpc3QpCi0JCQlkc29zX19jb2xfd2lkdGggPSB1bnJlc29sdmVkX2NvbF93aWR0aDsKKwkJCWhpc3RzX19zZXRfY29sX2xlbigmc2Vzc2lvbi0+aGlzdHMsIEhJU1RDX0RTTywKKwkJCQkJICAgdW5yZXNvbHZlZF9jb2xfd2lkdGgpOwogCX0KIAogCWlmIChzeW1ib2xfY29uZi5zeW1fbGlzdCAmJiBhbC0+c3ltICYmCkBAIC03MjYsOSArNzY2LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGV2ZW50X19wYXJzZV9zYW1wbGUoZXZlbnRfdCAqZXZlbnQsIHU2NCB0eXBlLCBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKmRhdGEpCitpbnQgZXZlbnRfX3BhcnNlX3NhbXBsZShjb25zdCBldmVudF90ICpldmVudCwgdTY0IHR5cGUsIHN0cnVjdCBzYW1wbGVfZGF0YSAqZGF0YSkKIHsKLQl1NjQgKmFycmF5ID0gZXZlbnQtPnNhbXBsZS5hcnJheTsKKwljb25zdCB1NjQgKmFycmF5ID0gZXZlbnQtPnNhbXBsZS5hcnJheTsKIAogCWlmICh0eXBlICYgUEVSRl9TQU1QTEVfSVApIHsKIAkJZGF0YS0+aXAgPSBldmVudC0+aXAuaXA7CkBAIC03NjcsNyArODA3LDggQEAKIAkJdTMyICpwID0gKHUzMiAqKWFycmF5OwogCQlkYXRhLT5jcHUgPSAqcDsKIAkJYXJyYXkrKzsKLQl9CisJfSBlbHNlCisJCWRhdGEtPmNwdSA9IC0xOwogCiAJaWYgKHR5cGUgJiBQRVJGX1NBTVBMRV9QRVJJT0QpIHsKIAkJZGF0YS0+cGVyaW9kID0gKmFycmF5OwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmggYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaAppbmRleCA4NTc3MDg1Li44ZTc5MGRhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuaAorKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaApAQCAtMTU0LDExICsxNTQsMTMgQEAKIGludCBldmVudF9fcHJvY2Vzc19sb3N0KGV2ZW50X3QgKnNlbGYsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOwogaW50IGV2ZW50X19wcm9jZXNzX21tYXAoZXZlbnRfdCAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CiBpbnQgZXZlbnRfX3Byb2Nlc3NfdGFzayhldmVudF90ICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKK2ludCBldmVudF9fcHJvY2VzcyhldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CiAKIHN0cnVjdCBhZGRyX2xvY2F0aW9uOwogaW50IGV2ZW50X19wcmVwcm9jZXNzX3NhbXBsZShjb25zdCBldmVudF90ICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAotCQkJICAgICBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOwotaW50IGV2ZW50X19wYXJzZV9zYW1wbGUoZXZlbnRfdCAqZXZlbnQsIHU2NCB0eXBlLCBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKmRhdGEpOworCQkJICAgICBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwsIHN0cnVjdCBzYW1wbGVfZGF0YSAqZGF0YSwKKwkJCSAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CitpbnQgZXZlbnRfX3BhcnNlX3NhbXBsZShjb25zdCBldmVudF90ICpldmVudCwgdTY0IHR5cGUsIHN0cnVjdCBzYW1wbGVfZGF0YSAqZGF0YSk7CiAKIGV4dGVybiBjb25zdCBjaGFyICpldmVudF9fbmFtZVtdOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMgYi90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMKaW5kZXggMWY2MjQzNS4uZDdlNjdiMSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYwpAQCAtMTYsNiArMTYsOCBAQAogI2luY2x1ZGUgInN5bWJvbC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAKK3N0YXRpYyBib29sIG5vX2J1aWxkaWRfY2FjaGUgPSBmYWxzZTsKKwogLyoKICAqIENyZWF0ZSBuZXcgcGVyZi5kYXRhIGhlYWRlciBhdHRyaWJ1dGU6CiAgKi8KQEAgLTM4NSw4ICszODcsNyBAQAogCWludCByZXQ7CiAJY2hhciBkZWJ1Z2RpcltQQVRIX01BWF07CiAKLQlzbnByaW50ZihkZWJ1Z2Rpciwgc2l6ZW9mKGRlYnVnZGlyKSwgIiVzLyVzIiwgZ2V0ZW52KCJIT01FIiksCi0JCSBERUJVR19DQUNIRV9ESVIpOworCXNucHJpbnRmKGRlYnVnZGlyLCBzaXplb2YoZGVidWdkaXIpLCAiJXMiLCBidWlsZGlkX2Rpcik7CiAKIAlpZiAobWtkaXIoZGVidWdkaXIsIDA3NTUpICE9IDAgJiYgZXJybm8gIT0gRUVYSVNUKQogCQlyZXR1cm4gLTE7CkBAIC00NzEsNyArNDcyLDggQEAKIAkJfQogCQlidWlsZGlkX3NlYy0+c2l6ZSA9IGxzZWVrKGZkLCAwLCBTRUVLX0NVUikgLQogCQkJCQkgIGJ1aWxkaWRfc2VjLT5vZmZzZXQ7Ci0JCXBlcmZfc2Vzc2lvbl9fY2FjaGVfYnVpbGRfaWRzKHNlc3Npb24pOworCQlpZiAoIW5vX2J1aWxkaWRfY2FjaGUpCisJCQlwZXJmX3Nlc3Npb25fX2NhY2hlX2J1aWxkX2lkcyhzZXNzaW9uKTsKIAl9CiAKIAlsc2VlayhmZCwgc2VjX3N0YXJ0LCBTRUVLX1NFVCk7CkBAIC0xMTkwLDMgKzExOTIsOCBAQAogCQkJCSBzZXNzaW9uKTsKIAlyZXR1cm4gMDsKIH0KKwordm9pZCBkaXNhYmxlX2J1aWxkaWRfY2FjaGUodm9pZCkKK3sKKwlub19idWlsZGlkX2NhY2hlID0gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmMgYi90b29scy9wZXJmL3V0aWwvaGlzdC5jCmluZGV4IDA3Zjg5YjY2Li5lNzI2M2Q0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGlzdC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmMKQEAgLTUsMTEgKzUsNjEgQEAKICNpbmNsdWRlICJzb3J0LmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogCitlbnVtIGhpc3RfZmlsdGVyIHsKKwlISVNUX0ZJTFRFUl9fRFNPLAorCUhJU1RfRklMVEVSX19USFJFQUQsCisJSElTVF9GSUxURVJfX1BBUkVOVCwKK307CisKIHN0cnVjdCBjYWxsY2hhaW5fcGFyYW0JY2FsbGNoYWluX3BhcmFtID0gewogCS5tb2RlCT0gQ0hBSU5fR1JBUEhfUkVMLAogCS5taW5fcGVyY2VudCA9IDAuNQogfTsKIAordTE2IGhpc3RzX19jb2xfbGVuKHN0cnVjdCBoaXN0cyAqc2VsZiwgZW51bSBoaXN0X2NvbHVtbiBjb2wpCit7CisJcmV0dXJuIHNlbGYtPmNvbF9sZW5bY29sXTsKK30KKwordm9pZCBoaXN0c19fc2V0X2NvbF9sZW4oc3RydWN0IGhpc3RzICpzZWxmLCBlbnVtIGhpc3RfY29sdW1uIGNvbCwgdTE2IGxlbikKK3sKKwlzZWxmLT5jb2xfbGVuW2NvbF0gPSBsZW47Cit9CisKK2Jvb2wgaGlzdHNfX25ld19jb2xfbGVuKHN0cnVjdCBoaXN0cyAqc2VsZiwgZW51bSBoaXN0X2NvbHVtbiBjb2wsIHUxNiBsZW4pCit7CisJaWYgKGxlbiA+IGhpc3RzX19jb2xfbGVuKHNlbGYsIGNvbCkpIHsKKwkJaGlzdHNfX3NldF9jb2xfbGVuKHNlbGYsIGNvbCwgbGVuKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgaGlzdHNfX3Jlc2V0X2NvbF9sZW4oc3RydWN0IGhpc3RzICpzZWxmKQoreworCWVudW0gaGlzdF9jb2x1bW4gY29sOworCisJZm9yIChjb2wgPSAwOyBjb2wgPCBISVNUQ19OUl9DT0xTOyArK2NvbCkKKwkJaGlzdHNfX3NldF9jb2xfbGVuKHNlbGYsIGNvbCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGhpc3RzX19jYWxjX2NvbF9sZW4oc3RydWN0IGhpc3RzICpzZWxmLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqaCkKK3sKKwl1MTYgbGVuOworCisJaWYgKGgtPm1zLnN5bSkKKwkJaGlzdHNfX25ld19jb2xfbGVuKHNlbGYsIEhJU1RDX1NZTUJPTCwgaC0+bXMuc3ltLT5uYW1lbGVuKTsKKworCWxlbiA9IHRocmVhZF9fY29tbV9sZW4oaC0+dGhyZWFkKTsKKwlpZiAoaGlzdHNfX25ld19jb2xfbGVuKHNlbGYsIEhJU1RDX0NPTU0sIGxlbikpCisJCWhpc3RzX19zZXRfY29sX2xlbihzZWxmLCBISVNUQ19USFJFQUQsIGxlbiArIDYpOworCisJaWYgKGgtPm1zLm1hcCkgeworCQlsZW4gPSBkc29fX25hbWVfbGVuKGgtPm1zLm1hcC0+ZHNvKTsKKwkJaGlzdHNfX25ld19jb2xfbGVuKHNlbGYsIEhJU1RDX0RTTywgbGVuKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIGhpc3RfZW50cnlfX2FkZF9jcHVtb2RlX3BlcmlvZChzdHJ1Y3QgaGlzdF9lbnRyeSAqc2VsZiwKIAkJCQkJICAgdW5zaWduZWQgaW50IGNwdW1vZGUsIHU2NCBwZXJpb2QpCiB7CkBAIC00Myw2ICs5Myw4IEBACiAJaWYgKHNlbGYgIT0gTlVMTCkgewogCQkqc2VsZiA9ICp0ZW1wbGF0ZTsKIAkJc2VsZi0+bnJfZXZlbnRzID0gMTsKKwkJaWYgKHNlbGYtPm1zLm1hcCkKKwkJCXNlbGYtPm1zLm1hcC0+cmVmZXJlbmNlZCA9IHRydWU7CiAJCWlmIChzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluKQogCQkJY2FsbGNoYWluX2luaXQoc2VsZi0+Y2FsbGNoYWluKTsKIAl9CkBAIC01MCwxMSArMTAyLDE5IEBACiAJcmV0dXJuIHNlbGY7CiB9CiAKLXN0YXRpYyB2b2lkIGhpc3RzX19pbmNfbnJfZW50cmllcyhzdHJ1Y3QgaGlzdHMgKnNlbGYsIHN0cnVjdCBoaXN0X2VudHJ5ICplbnRyeSkKK3N0YXRpYyB2b2lkIGhpc3RzX19pbmNfbnJfZW50cmllcyhzdHJ1Y3QgaGlzdHMgKnNlbGYsIHN0cnVjdCBoaXN0X2VudHJ5ICpoKQogewotCWlmIChlbnRyeS0+bXMuc3ltICYmIHNlbGYtPm1heF9zeW1fbmFtZWxlbiA8IGVudHJ5LT5tcy5zeW0tPm5hbWVsZW4pCi0JCXNlbGYtPm1heF9zeW1fbmFtZWxlbiA9IGVudHJ5LT5tcy5zeW0tPm5hbWVsZW47Ci0JKytzZWxmLT5ucl9lbnRyaWVzOworCWlmICghaC0+ZmlsdGVyZWQpIHsKKwkJaGlzdHNfX2NhbGNfY29sX2xlbihzZWxmLCBoKTsKKwkJKytzZWxmLT5ucl9lbnRyaWVzOworCX0KK30KKworc3RhdGljIHU4IHN5bWJvbF9fcGFyZW50X2ZpbHRlcihjb25zdCBzdHJ1Y3Qgc3ltYm9sICpwYXJlbnQpCit7CisJaWYgKHN5bWJvbF9jb25mLmV4Y2x1ZGVfb3RoZXIgJiYgcGFyZW50ID09IE5VTEwpCisJCXJldHVybiAxIDw8IEhJU1RfRklMVEVSX19QQVJFTlQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0cnVjdCBoaXN0X2VudHJ5ICpfX2hpc3RzX19hZGRfZW50cnkoc3RydWN0IGhpc3RzICpzZWxmLApAQCAtNzAsMTAgKzEzMCwxMiBAQAogCQkJLm1hcAk9IGFsLT5tYXAsCiAJCQkuc3ltCT0gYWwtPnN5bSwKIAkJfSwKKwkJLmNwdQk9IGFsLT5jcHUsCiAJCS5pcAk9IGFsLT5hZGRyLAogCQkubGV2ZWwJPSBhbC0+bGV2ZWwsCiAJCS5wZXJpb2QJPSBwZXJpb2QsCiAJCS5wYXJlbnQgPSBzeW1fcGFyZW50LAorCQkuZmlsdGVyZWQgPSBzeW1ib2xfX3BhcmVudF9maWx0ZXIoc3ltX3BhcmVudCksCiAJfTsKIAlpbnQgY21wOwogCkBAIC0xOTEsNyArMjUzLDcgQEAKIAl0bXAgPSBSQl9ST09UOwogCW5leHQgPSByYl9maXJzdCgmc2VsZi0+ZW50cmllcyk7CiAJc2VsZi0+bnJfZW50cmllcyA9IDA7Ci0Jc2VsZi0+bWF4X3N5bV9uYW1lbGVuID0gMDsKKwloaXN0c19fcmVzZXRfY29sX2xlbihzZWxmKTsKIAogCXdoaWxlIChuZXh0KSB7CiAJCW4gPSByYl9lbnRyeShuZXh0LCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CkBAIC0yNDgsNyArMzEwLDcgQEAKIAluZXh0ID0gcmJfZmlyc3QoJnNlbGYtPmVudHJpZXMpOwogCiAJc2VsZi0+bnJfZW50cmllcyA9IDA7Ci0Jc2VsZi0+bWF4X3N5bV9uYW1lbGVuID0gMDsKKwloaXN0c19fcmVzZXRfY29sX2xlbihzZWxmKTsKIAogCXdoaWxlIChuZXh0KSB7CiAJCW4gPSByYl9lbnRyeShuZXh0LCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CkBAIC01MTUsOCArNTc3LDkgQEAKIH0KIAogaW50IGhpc3RfZW50cnlfX3NucHJpbnRmKHN0cnVjdCBoaXN0X2VudHJ5ICpzZWxmLCBjaGFyICpzLCBzaXplX3Qgc2l6ZSwKLQkJCSBzdHJ1Y3QgaGlzdHMgKnBhaXJfaGlzdHMsIGJvb2wgc2hvd19kaXNwbGFjZW1lbnQsCi0JCQkgbG9uZyBkaXNwbGFjZW1lbnQsIGJvb2wgY29sb3IsIHU2NCBzZXNzaW9uX3RvdGFsKQorCQkJIHN0cnVjdCBoaXN0cyAqaGlzdHMsIHN0cnVjdCBoaXN0cyAqcGFpcl9oaXN0cywKKwkJCSBib29sIHNob3dfZGlzcGxhY2VtZW50LCBsb25nIGRpc3BsYWNlbWVudCwKKwkJCSBib29sIGNvbG9yLCB1NjQgc2Vzc2lvbl90b3RhbCkKIHsKIAlzdHJ1Y3Qgc29ydF9lbnRyeSAqc2U7CiAJdTY0IHBlcmlvZCwgdG90YWwsIHBlcmlvZF9zeXMsIHBlcmlvZF91cywgcGVyaW9kX2d1ZXN0X3N5cywgcGVyaW9kX2d1ZXN0X3VzOwpAQCAtNjIwLDI0ICs2ODMsMjUgQEAKIAogCQlyZXQgKz0gc25wcmludGYocyArIHJldCwgc2l6ZSAtIHJldCwgIiVzIiwgc2VwID86ICIgICIpOwogCQlyZXQgKz0gc2UtPnNlX3NucHJpbnRmKHNlbGYsIHMgKyByZXQsIHNpemUgLSByZXQsCi0JCQkJICAgICAgIHNlLT5zZV93aWR0aCA/ICpzZS0+c2Vfd2lkdGggOiAwKTsKKwkJCQkgICAgICAgaGlzdHNfX2NvbF9sZW4oaGlzdHMsIHNlLT5zZV93aWR0aF9pZHgpKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgaGlzdF9lbnRyeV9fZnByaW50ZihzdHJ1Y3QgaGlzdF9lbnRyeSAqc2VsZiwgc3RydWN0IGhpc3RzICpwYWlyX2hpc3RzLAotCQkJYm9vbCBzaG93X2Rpc3BsYWNlbWVudCwgbG9uZyBkaXNwbGFjZW1lbnQsIEZJTEUgKmZwLAotCQkJdTY0IHNlc3Npb25fdG90YWwpCitpbnQgaGlzdF9lbnRyeV9fZnByaW50ZihzdHJ1Y3QgaGlzdF9lbnRyeSAqc2VsZiwgc3RydWN0IGhpc3RzICpoaXN0cywKKwkJCXN0cnVjdCBoaXN0cyAqcGFpcl9oaXN0cywgYm9vbCBzaG93X2Rpc3BsYWNlbWVudCwKKwkJCWxvbmcgZGlzcGxhY2VtZW50LCBGSUxFICpmcCwgdTY0IHNlc3Npb25fdG90YWwpCiB7CiAJY2hhciBiZls1MTJdOwotCWhpc3RfZW50cnlfX3NucHJpbnRmKHNlbGYsIGJmLCBzaXplb2YoYmYpLCBwYWlyX2hpc3RzLAorCWhpc3RfZW50cnlfX3NucHJpbnRmKHNlbGYsIGJmLCBzaXplb2YoYmYpLCBoaXN0cywgcGFpcl9oaXN0cywKIAkJCSAgICAgc2hvd19kaXNwbGFjZW1lbnQsIGRpc3BsYWNlbWVudCwKIAkJCSAgICAgdHJ1ZSwgc2Vzc2lvbl90b3RhbCk7CiAJcmV0dXJuIGZwcmludGYoZnAsICIlc1xuIiwgYmYpOwogfQogCi1zdGF0aWMgc2l6ZV90IGhpc3RfZW50cnlfX2ZwcmludGZfY2FsbGNoYWluKHN0cnVjdCBoaXN0X2VudHJ5ICpzZWxmLCBGSUxFICpmcCwKK3N0YXRpYyBzaXplX3QgaGlzdF9lbnRyeV9fZnByaW50Zl9jYWxsY2hhaW4oc3RydWN0IGhpc3RfZW50cnkgKnNlbGYsCisJCQkJCSAgICBzdHJ1Y3QgaGlzdHMgKmhpc3RzLCBGSUxFICpmcCwKIAkJCQkJICAgIHU2NCBzZXNzaW9uX3RvdGFsKQogewogCWludCBsZWZ0X21hcmdpbiA9IDA7CkBAIC02NDUsNyArNzA5LDcgQEAKIAlpZiAoc29ydF9fZmlyc3RfZGltZW5zaW9uID09IFNPUlRfQ09NTSkgewogCQlzdHJ1Y3Qgc29ydF9lbnRyeSAqc2UgPSBsaXN0X2ZpcnN0X2VudHJ5KCZoaXN0X2VudHJ5X19zb3J0X2xpc3QsCiAJCQkJCQkJIHR5cGVvZigqc2UpLCBsaXN0KTsKLQkJbGVmdF9tYXJnaW4gPSBzZS0+c2Vfd2lkdGggPyAqc2UtPnNlX3dpZHRoIDogMDsKKwkJbGVmdF9tYXJnaW4gPSBoaXN0c19fY29sX2xlbihoaXN0cywgc2UtPnNlX3dpZHRoX2lkeCk7CiAJCWxlZnRfbWFyZ2luIC09IHRocmVhZF9fY29tbV9sZW4oc2VsZi0+dGhyZWFkKTsKIAl9CiAKQEAgLTcxNiwxNyArNzgwLDE3IEBACiAJCQljb250aW51ZTsKIAkJfQogCQl3aWR0aCA9IHN0cmxlbihzZS0+c2VfaGVhZGVyKTsKLQkJaWYgKHNlLT5zZV93aWR0aCkgewotCQkJaWYgKHN5bWJvbF9jb25mLmNvbF93aWR0aF9saXN0X3N0cikgewotCQkJCWlmIChjb2xfd2lkdGgpIHsKLQkJCQkJKnNlLT5zZV93aWR0aCA9IGF0b2koY29sX3dpZHRoKTsKLQkJCQkJY29sX3dpZHRoID0gc3RyY2hyKGNvbF93aWR0aCwgJywnKTsKLQkJCQkJaWYgKGNvbF93aWR0aCkKLQkJCQkJCSsrY29sX3dpZHRoOwotCQkJCX0KKwkJaWYgKHN5bWJvbF9jb25mLmNvbF93aWR0aF9saXN0X3N0cikgeworCQkJaWYgKGNvbF93aWR0aCkgeworCQkJCWhpc3RzX19zZXRfY29sX2xlbihzZWxmLCBzZS0+c2Vfd2lkdGhfaWR4LAorCQkJCQkJICAgYXRvaShjb2xfd2lkdGgpKTsKKwkJCQljb2xfd2lkdGggPSBzdHJjaHIoY29sX3dpZHRoLCAnLCcpOworCQkJCWlmIChjb2xfd2lkdGgpCisJCQkJCSsrY29sX3dpZHRoOwogCQkJfQotCQkJd2lkdGggPSAqc2UtPnNlX3dpZHRoID0gbWF4KCpzZS0+c2Vfd2lkdGgsIHdpZHRoKTsKIAkJfQorCQlpZiAoIWhpc3RzX19uZXdfY29sX2xlbihzZWxmLCBzZS0+c2Vfd2lkdGhfaWR4LCB3aWR0aCkpCisJCQl3aWR0aCA9IGhpc3RzX19jb2xfbGVuKHNlbGYsIHNlLT5zZV93aWR0aF9pZHgpOwogCQlmcHJpbnRmKGZwLCAiICAlKnMiLCB3aWR0aCwgc2UtPnNlX2hlYWRlcik7CiAJfQogCWZwcmludGYoZnAsICJcbiIpOwpAQCAtNzQ5LDkgKzgxMyw4IEBACiAJCQljb250aW51ZTsKIAogCQlmcHJpbnRmKGZwLCAiICAiKTsKLQkJaWYgKHNlLT5zZV93aWR0aCkKLQkJCXdpZHRoID0gKnNlLT5zZV93aWR0aDsKLQkJZWxzZQorCQl3aWR0aCA9IGhpc3RzX19jb2xfbGVuKHNlbGYsIHNlLT5zZV93aWR0aF9pZHgpOworCQlpZiAod2lkdGggPT0gMCkKIAkJCXdpZHRoID0gc3RybGVuKHNlLT5zZV9oZWFkZXIpOwogCQlmb3IgKGkgPSAwOyBpIDwgd2lkdGg7IGkrKykKIAkJCWZwcmludGYoZnAsICIuIik7CkBAIC03NzEsMTIgKzgzNCwxMiBAQAogCQkJCWRpc3BsYWNlbWVudCA9IDA7CiAJCQkrK3Bvc2l0aW9uOwogCQl9Ci0JCXJldCArPSBoaXN0X2VudHJ5X19mcHJpbnRmKGgsIHBhaXIsIHNob3dfZGlzcGxhY2VtZW50LAorCQlyZXQgKz0gaGlzdF9lbnRyeV9fZnByaW50ZihoLCBzZWxmLCBwYWlyLCBzaG93X2Rpc3BsYWNlbWVudCwKIAkJCQkJICAgZGlzcGxhY2VtZW50LCBmcCwgc2VsZi0+c3RhdHMudG90YWxfcGVyaW9kKTsKIAogCQlpZiAoc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbikKLQkJCXJldCArPSBoaXN0X2VudHJ5X19mcHJpbnRmX2NhbGxjaGFpbihoLCBmcCwgc2VsZi0+c3RhdHMudG90YWxfcGVyaW9kKTsKLQorCQkJcmV0ICs9IGhpc3RfZW50cnlfX2ZwcmludGZfY2FsbGNoYWluKGgsIHNlbGYsIGZwLAorCQkJCQkJCSAgICAgc2VsZi0+c3RhdHMudG90YWxfcGVyaW9kKTsKIAkJaWYgKGgtPm1zLm1hcCA9PSBOVUxMICYmIHZlcmJvc2UgPiAxKSB7CiAJCQlfX21hcF9ncm91cHNfX2ZwcmludGZfbWFwcygmaC0+dGhyZWFkLT5tZywKIAkJCQkJCSAgIE1BUF9fRlVOQ1RJT04sIHZlcmJvc2UsIGZwKTsKQEAgLTc4OSwxMCArODUyLDQ5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotZW51bSBoaXN0X2ZpbHRlciB7Ci0JSElTVF9GSUxURVJfX0RTTywKLQlISVNUX0ZJTFRFUl9fVEhSRUFELAotfTsKKy8qCisgKiBTZWUgaGlzdHNfX2ZwcmludGYgdG8gbWF0Y2ggdGhlIGNvbHVtbiB3aWR0aHMKKyAqLwordW5zaWduZWQgaW50IGhpc3RzX19zb3J0X2xpc3Rfd2lkdGgoc3RydWN0IGhpc3RzICpzZWxmKQoreworCXN0cnVjdCBzb3J0X2VudHJ5ICpzZTsKKwlpbnQgcmV0ID0gOTsgLyogdG90YWwgJSAqLworCisJaWYgKHN5bWJvbF9jb25mLnNob3dfY3B1X3V0aWxpemF0aW9uKSB7CisJCXJldCArPSA3OyAvKiBjb3VudF9zeXMgJSAqLworCQlyZXQgKz0gNjsgLyogY291bnRfdXMgJSAqLworCQlpZiAocGVyZl9ndWVzdCkgeworCQkJcmV0ICs9IDEzOyAvKiBjb3VudF9ndWVzdF9zeXMgJSAqLworCQkJcmV0ICs9IDEyOyAvKiBjb3VudF9ndWVzdF91cyAlICovCisJCX0KKwl9CisKKwlpZiAoc3ltYm9sX2NvbmYuc2hvd19ucl9zYW1wbGVzKQorCQlyZXQgKz0gMTE7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNlLCAmaGlzdF9lbnRyeV9fc29ydF9saXN0LCBsaXN0KQorCQlpZiAoIXNlLT5lbGlkZSkKKwkJCXJldCArPSAyICsgaGlzdHNfX2NvbF9sZW4oc2VsZiwgc2UtPnNlX3dpZHRoX2lkeCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBoaXN0c19fcmVtb3ZlX2VudHJ5X2ZpbHRlcihzdHJ1Y3QgaGlzdHMgKnNlbGYsIHN0cnVjdCBoaXN0X2VudHJ5ICpoLAorCQkJCSAgICAgICBlbnVtIGhpc3RfZmlsdGVyIGZpbHRlcikKK3sKKwloLT5maWx0ZXJlZCAmPSB+KDEgPDwgZmlsdGVyKTsKKwlpZiAoaC0+ZmlsdGVyZWQpCisJCXJldHVybjsKKworCSsrc2VsZi0+bnJfZW50cmllczsKKwlpZiAoaC0+bXMudW5mb2xkZWQpCisJCXNlbGYtPm5yX2VudHJpZXMgKz0gaC0+bnJfcm93czsKKwloLT5yb3dfb2Zmc2V0ID0gMDsKKwlzZWxmLT5zdGF0cy50b3RhbF9wZXJpb2QgKz0gaC0+cGVyaW9kOworCXNlbGYtPnN0YXRzLm5yX2V2ZW50c1tQRVJGX1JFQ09SRF9TQU1QTEVdICs9IGgtPm5yX2V2ZW50czsKKworCWhpc3RzX19jYWxjX2NvbF9sZW4oc2VsZiwgaCk7Cit9CiAKIHZvaWQgaGlzdHNfX2ZpbHRlcl9ieV9kc28oc3RydWN0IGhpc3RzICpzZWxmLCBjb25zdCBzdHJ1Y3QgZHNvICpkc28pCiB7CkBAIC04MDAsNyArOTAyLDcgQEAKIAogCXNlbGYtPm5yX2VudHJpZXMgPSBzZWxmLT5zdGF0cy50b3RhbF9wZXJpb2QgPSAwOwogCXNlbGYtPnN0YXRzLm5yX2V2ZW50c1tQRVJGX1JFQ09SRF9TQU1QTEVdID0gMDsKLQlzZWxmLT5tYXhfc3ltX25hbWVsZW4gPSAwOworCWhpc3RzX19yZXNldF9jb2xfbGVuKHNlbGYpOwogCiAJZm9yIChuZCA9IHJiX2ZpcnN0KCZzZWxmLT5lbnRyaWVzKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKIAkJc3RydWN0IGhpc3RfZW50cnkgKmggPSByYl9lbnRyeShuZCwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOwpAQCAtODEzLDE1ICs5MTUsNyBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQloLT5maWx0ZXJlZCAmPSB+KDEgPDwgSElTVF9GSUxURVJfX0RTTyk7Ci0JCWlmICghaC0+ZmlsdGVyZWQpIHsKLQkJCSsrc2VsZi0+bnJfZW50cmllczsKLQkJCXNlbGYtPnN0YXRzLnRvdGFsX3BlcmlvZCArPSBoLT5wZXJpb2Q7Ci0JCQlzZWxmLT5zdGF0cy5ucl9ldmVudHNbUEVSRl9SRUNPUkRfU0FNUExFXSArPSBoLT5ucl9ldmVudHM7Ci0JCQlpZiAoaC0+bXMuc3ltICYmCi0JCQkgICAgc2VsZi0+bWF4X3N5bV9uYW1lbGVuIDwgaC0+bXMuc3ltLT5uYW1lbGVuKQotCQkJCXNlbGYtPm1heF9zeW1fbmFtZWxlbiA9IGgtPm1zLnN5bS0+bmFtZWxlbjsKLQkJfQorCQloaXN0c19fcmVtb3ZlX2VudHJ5X2ZpbHRlcihzZWxmLCBoLCBISVNUX0ZJTFRFUl9fRFNPKTsKIAl9CiB9CiAKQEAgLTgzMSw3ICs5MjUsNyBAQAogCiAJc2VsZi0+bnJfZW50cmllcyA9IHNlbGYtPnN0YXRzLnRvdGFsX3BlcmlvZCA9IDA7CiAJc2VsZi0+c3RhdHMubnJfZXZlbnRzW1BFUkZfUkVDT1JEX1NBTVBMRV0gPSAwOwotCXNlbGYtPm1heF9zeW1fbmFtZWxlbiA9IDA7CisJaGlzdHNfX3Jlc2V0X2NvbF9sZW4oc2VsZik7CiAKIAlmb3IgKG5kID0gcmJfZmlyc3QoJnNlbGYtPmVudHJpZXMpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgewogCQlzdHJ1Y3QgaGlzdF9lbnRyeSAqaCA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CkBAIC04NDAsMTUgKzkzNCw4IEBACiAJCQloLT5maWx0ZXJlZCB8PSAoMSA8PCBISVNUX0ZJTFRFUl9fVEhSRUFEKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWgtPmZpbHRlcmVkICY9IH4oMSA8PCBISVNUX0ZJTFRFUl9fVEhSRUFEKTsKLQkJaWYgKCFoLT5maWx0ZXJlZCkgewotCQkJKytzZWxmLT5ucl9lbnRyaWVzOwotCQkJc2VsZi0+c3RhdHMudG90YWxfcGVyaW9kICs9IGgtPnBlcmlvZDsKLQkJCXNlbGYtPnN0YXRzLm5yX2V2ZW50c1tQRVJGX1JFQ09SRF9TQU1QTEVdICs9IGgtPm5yX2V2ZW50czsKLQkJCWlmIChoLT5tcy5zeW0gJiYKLQkJCSAgICBzZWxmLT5tYXhfc3ltX25hbWVsZW4gPCBoLT5tcy5zeW0tPm5hbWVsZW4pCi0JCQkJc2VsZi0+bWF4X3N5bV9uYW1lbGVuID0gaC0+bXMuc3ltLT5uYW1lbGVuOwotCQl9CisKKwkJaGlzdHNfX3JlbW92ZV9lbnRyeV9maWx0ZXIoc2VsZiwgaCwgSElTVF9GSUxURVJfX1RIUkVBRCk7CiAJfQogfQogCkBAIC05NjUsMTMgKzEwNTIsMTcgQEAKIAkJICogUGFyc2UgaGV4YSBhZGRyZXNzZXMgZm9sbG93ZWQgYnkgJzonCiAJCSAqLwogCQlsaW5lX2lwID0gc3RydG91bGwodG1wLCAmdG1wMiwgMTYpOwotCQlpZiAoKnRtcDIgIT0gJzonIHx8IHRtcCA9PSB0bXAyKQorCQlpZiAoKnRtcDIgIT0gJzonIHx8IHRtcCA9PSB0bXAyIHx8IHRtcDJbMV0gPT0gJ1wwJykKIAkJCWxpbmVfaXAgPSAtMTsKIAl9CiAKIAlpZiAobGluZV9pcCAhPSAtMSkgewotCQl1NjQgc3RhcnQgPSBtYXBfX3JpcF8yb2JqZHVtcChzZWxmLT5tcy5tYXAsIHN5bS0+c3RhcnQpOworCQl1NjQgc3RhcnQgPSBtYXBfX3JpcF8yb2JqZHVtcChzZWxmLT5tcy5tYXAsIHN5bS0+c3RhcnQpLAorCQkgICAgZW5kID0gbWFwX19yaXBfMm9iamR1bXAoc2VsZi0+bXMubWFwLCBzeW0tPmVuZCk7CisKIAkJb2Zmc2V0ID0gbGluZV9pcCAtIHN0YXJ0OworCQlpZiAob2Zmc2V0IDwgMCB8fCAodTY0KWxpbmVfaXAgPiBlbmQpCisJCQlvZmZzZXQgPSAtMTsKIAl9CiAKIAlvYmpkdW1wX2xpbmUgPSBvYmpkdW1wX2xpbmVfX25ldyhvZmZzZXQsIGxpbmUpOwpAQCAtMTAzNyw3ICsxMTI4LDcgQEAKIAkJIGRzbywgZHNvLT5sb25nX25hbWUsIHN5bSwgc3ltLT5uYW1lKTsKIAogCXNucHJpbnRmKGNvbW1hbmQsIHNpemVvZihjb21tYW5kKSwKLQkJICJvYmpkdW1wIC0tc3RhcnQtYWRkcmVzcz0weCUwMTZMeCAtLXN0b3AtYWRkcmVzcz0weCUwMTZMeCAtZFMgJXN8Z3JlcCAtdiAlc3xleHBhbmQiLAorCQkgIm9iamR1bXAgLS1zdGFydC1hZGRyZXNzPTB4JTAxNkx4IC0tc3RvcC1hZGRyZXNzPTB4JTAxNkx4IC1kUyAtQyAlc3xncmVwIC12ICVzfGV4cGFuZCIsCiAJCSBtYXBfX3JpcF8yb2JqZHVtcChtYXAsIHN5bS0+c3RhcnQpLAogCQkgbWFwX19yaXBfMm9iamR1bXAobWFwLCBzeW0tPmVuZCksCiAJCSBmaWxlbmFtZSwgZmlsZW5hbWUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2hpc3QuaCBiL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmgKaW5kZXggODNmYTMzYS4uNjVhNDhkYiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2hpc3QuaAorKysgYi90b29scy9wZXJmL3V0aWwvaGlzdC5oCkBAIC01Niw2ICs1NiwxNiBAQAogCXUzMiBucl91bmtub3duX2V2ZW50czsKIH07CiAKK2VudW0gaGlzdF9jb2x1bW4geworCUhJU1RDX1NZTUJPTCwKKwlISVNUQ19EU08sCisJSElTVENfVEhSRUFELAorCUhJU1RDX0NPTU0sCisJSElTVENfUEFSRU5ULAorCUhJU1RDX0NQVSwKKwlISVNUQ19OUl9DT0xTLCAvKiBMYXN0IGVudHJ5ICovCit9OworCiBzdHJ1Y3QgaGlzdHMgewogCXN0cnVjdCByYl9ub2RlCQlyYl9ub2RlOwogCXN0cnVjdCByYl9yb290CQllbnRyaWVzOwpAQCAtNjQsNyArNzQsNyBAQAogCXU2NAkJCWNvbmZpZzsKIAl1NjQJCQlldmVudF9zdHJlYW07CiAJdTMyCQkJdHlwZTsKLQl1MzIJCQltYXhfc3ltX25hbWVsZW47CisJdTE2CQkJY29sX2xlbltISVNUQ19OUl9DT0xTXTsKIH07CiAKIHN0cnVjdCBoaXN0X2VudHJ5ICpfX2hpc3RzX19hZGRfZW50cnkoc3RydWN0IGhpc3RzICpzZWxmLApAQCAtNzIsMTIgKzgyLDEzIEBACiAJCQkJICAgICAgc3RydWN0IHN5bWJvbCAqcGFyZW50LCB1NjQgcGVyaW9kKTsKIGV4dGVybiBpbnQ2NF90IGhpc3RfZW50cnlfX2NtcChzdHJ1Y3QgaGlzdF9lbnRyeSAqLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqKTsKIGV4dGVybiBpbnQ2NF90IGhpc3RfZW50cnlfX2NvbGxhcHNlKHN0cnVjdCBoaXN0X2VudHJ5ICosIHN0cnVjdCBoaXN0X2VudHJ5ICopOwotaW50IGhpc3RfZW50cnlfX2ZwcmludGYoc3RydWN0IGhpc3RfZW50cnkgKnNlbGYsIHN0cnVjdCBoaXN0cyAqcGFpcl9oaXN0cywKLQkJCWJvb2wgc2hvd19kaXNwbGFjZW1lbnQsIGxvbmcgZGlzcGxhY2VtZW50LCBGSUxFICpmcCwKLQkJCXU2NCB0b3RhbCk7CitpbnQgaGlzdF9lbnRyeV9fZnByaW50ZihzdHJ1Y3QgaGlzdF9lbnRyeSAqc2VsZiwgc3RydWN0IGhpc3RzICpoaXN0cywKKwkJCXN0cnVjdCBoaXN0cyAqcGFpcl9oaXN0cywgYm9vbCBzaG93X2Rpc3BsYWNlbWVudCwKKwkJCWxvbmcgZGlzcGxhY2VtZW50LCBGSUxFICpmcCwgdTY0IHRvdGFsKTsKIGludCBoaXN0X2VudHJ5X19zbnByaW50ZihzdHJ1Y3QgaGlzdF9lbnRyeSAqc2VsZiwgY2hhciAqYmYsIHNpemVfdCBzaXplLAotCQkJIHN0cnVjdCBoaXN0cyAqcGFpcl9oaXN0cywgYm9vbCBzaG93X2Rpc3BsYWNlbWVudCwKLQkJCSBsb25nIGRpc3BsYWNlbWVudCwgYm9vbCBjb2xvciwgdTY0IHRvdGFsKTsKKwkJCSBzdHJ1Y3QgaGlzdHMgKmhpc3RzLCBzdHJ1Y3QgaGlzdHMgKnBhaXJfaGlzdHMsCisJCQkgYm9vbCBzaG93X2Rpc3BsYWNlbWVudCwgbG9uZyBkaXNwbGFjZW1lbnQsCisJCQkgYm9vbCBjb2xvciwgdTY0IHRvdGFsKTsKIHZvaWQgaGlzdF9lbnRyeV9fZnJlZShzdHJ1Y3QgaGlzdF9lbnRyeSAqKTsKIAogdm9pZCBoaXN0c19fb3V0cHV0X3Jlc29ydChzdHJ1Y3QgaGlzdHMgKnNlbGYpOwpAQCAtOTUsNiArMTA2LDEwIEBACiB2b2lkIGhpc3RzX19maWx0ZXJfYnlfZHNvKHN0cnVjdCBoaXN0cyAqc2VsZiwgY29uc3Qgc3RydWN0IGRzbyAqZHNvKTsKIHZvaWQgaGlzdHNfX2ZpbHRlcl9ieV90aHJlYWQoc3RydWN0IGhpc3RzICpzZWxmLCBjb25zdCBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpOwogCit1MTYgaGlzdHNfX2NvbF9sZW4oc3RydWN0IGhpc3RzICpzZWxmLCBlbnVtIGhpc3RfY29sdW1uIGNvbCk7Cit2b2lkIGhpc3RzX19zZXRfY29sX2xlbihzdHJ1Y3QgaGlzdHMgKnNlbGYsIGVudW0gaGlzdF9jb2x1bW4gY29sLCB1MTYgbGVuKTsKK2Jvb2wgaGlzdHNfX25ld19jb2xfbGVuKHN0cnVjdCBoaXN0cyAqc2VsZiwgZW51bSBoaXN0X2NvbHVtbiBjb2wsIHUxNiBsZW4pOworCiAjaWZkZWYgTk9fTkVXVF9TVVBQT1JUCiBzdGF0aWMgaW5saW5lIGludCBoaXN0c19fYnJvd3NlKHN0cnVjdCBoaXN0cyAqc2VsZiBfX3VzZWQsCiAJCQkJY29uc3QgY2hhciAqaGVscGxpbmUgX191c2VkLApAQCAtMTI2LDQgKzE0MSw3IEBACiAKIGludCBoaXN0c19fdHVpX2Jyb3dzZV90cmVlKHN0cnVjdCByYl9yb290ICpzZWxmLCBjb25zdCBjaGFyICpoZWxwKTsKICNlbmRpZgorCit1bnNpZ25lZCBpbnQgaGlzdHNfX3NvcnRfbGlzdF93aWR0aChzdHJ1Y3QgaGlzdHMgKnNlbGYpOworCiAjZW5kaWYJLyogX19QRVJGX0hJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL21hcC5jIGIvdG9vbHMvcGVyZi91dGlsL21hcC5jCmluZGV4IGU2NzJmMmYuLjNhN2ViNmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYworKysgYi90b29scy9wZXJmL3V0aWwvbWFwLmMKQEAgLTE3LDE2ICsxNyw2IEBACiAJcmV0dXJuIHN0cmNtcChmaWxlbmFtZSwgIi8vYW5vbiIpID09IDA7CiB9CiAKLXN0YXRpYyBpbnQgc3RyY29tbW9uKGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBjaGFyICpjd2QsIGludCBjd2RsZW4pCi17Ci0JaW50IG4gPSAwOwotCi0Jd2hpbGUgKG4gPCBjd2RsZW4gJiYgcGF0aG5hbWVbbl0gPT0gY3dkW25dKQotCQkrK247Ci0KLQlyZXR1cm4gbjsKLX0KLQogdm9pZCBtYXBfX2luaXQoc3RydWN0IG1hcCAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlLAogCSAgICAgICB1NjQgc3RhcnQsIHU2NCBlbmQsIHU2NCBwZ29mZiwgc3RydWN0IGRzbyAqZHNvKQogewpAQCAtMzksMTEgKzI5LDEyIEBACiAJc2VsZi0+dW5tYXBfaXAgPSBtYXBfX3VubWFwX2lwOwogCVJCX0NMRUFSX05PREUoJnNlbGYtPnJiX25vZGUpOwogCXNlbGYtPmdyb3VwcyAgID0gTlVMTDsKKwlzZWxmLT5yZWZlcmVuY2VkID0gZmFsc2U7CiB9CiAKIHN0cnVjdCBtYXAgKm1hcF9fbmV3KHN0cnVjdCBsaXN0X2hlYWQgKmRzb3NfX2xpc3QsIHU2NCBzdGFydCwgdTY0IGxlbiwKIAkJICAgICB1NjQgcGdvZmYsIHUzMiBwaWQsIGNoYXIgKmZpbGVuYW1lLAotCQkgICAgIGVudW0gbWFwX3R5cGUgdHlwZSwgY2hhciAqY3dkLCBpbnQgY3dkbGVuKQorCQkgICAgIGVudW0gbWFwX3R5cGUgdHlwZSkKIHsKIAlzdHJ1Y3QgbWFwICpzZWxmID0gbWFsbG9jKHNpemVvZigqc2VsZikpOwogCkBAIC01MiwxNiArNDMsNiBAQAogCQlzdHJ1Y3QgZHNvICpkc287CiAJCWludCBhbm9uOwogCi0JCWlmIChjd2QpIHsKLQkJCWludCBuID0gc3RyY29tbW9uKGZpbGVuYW1lLCBjd2QsIGN3ZGxlbik7Ci0KLQkJCWlmIChuID09IGN3ZGxlbikgewotCQkJCXNucHJpbnRmKG5ld2ZpbGVuYW1lLCBzaXplb2YobmV3ZmlsZW5hbWUpLAotCQkJCQkgIi4lcyIsIGZpbGVuYW1lICsgbik7Ci0JCQkJZmlsZW5hbWUgPSBuZXdmaWxlbmFtZTsKLQkJCX0KLQkJfQotCiAJCWFub24gPSBpc19hbm9uX21lbW9yeShmaWxlbmFtZSk7CiAKIAkJaWYgKGFub24pIHsKQEAgLTI0OCw2ICsyMjksMzkgQEAKIAlzZWxmLT5tYWNoaW5lID0gTlVMTDsKIH0KIAorc3RhdGljIHZvaWQgbWFwc19fZGVsZXRlKHN0cnVjdCByYl9yb290ICpzZWxmKQoreworCXN0cnVjdCByYl9ub2RlICpuZXh0ID0gcmJfZmlyc3Qoc2VsZik7CisKKwl3aGlsZSAobmV4dCkgeworCQlzdHJ1Y3QgbWFwICpwb3MgPSByYl9lbnRyeShuZXh0LCBzdHJ1Y3QgbWFwLCByYl9ub2RlKTsKKworCQluZXh0ID0gcmJfbmV4dCgmcG9zLT5yYl9ub2RlKTsKKwkJcmJfZXJhc2UoJnBvcy0+cmJfbm9kZSwgc2VsZik7CisJCW1hcF9fZGVsZXRlKHBvcyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBtYXBzX19kZWxldGVfcmVtb3ZlZChzdHJ1Y3QgbGlzdF9oZWFkICpzZWxmKQoreworCXN0cnVjdCBtYXAgKnBvcywgKm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCBuLCBzZWxmLCBub2RlKSB7CisJCWxpc3RfZGVsKCZwb3MtPm5vZGUpOworCQltYXBfX2RlbGV0ZShwb3MpOworCX0KK30KKwordm9pZCBtYXBfZ3JvdXBzX19leGl0KHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BUF9fTlJfVFlQRVM7ICsraSkgeworCQltYXBzX19kZWxldGUoJnNlbGYtPm1hcHNbaV0pOworCQltYXBzX19kZWxldGVfcmVtb3ZlZCgmc2VsZi0+cmVtb3ZlZF9tYXBzW2ldKTsKKwl9Cit9CisKIHZvaWQgbWFwX2dyb3Vwc19fZmx1c2goc3RydWN0IG1hcF9ncm91cHMgKnNlbGYpCiB7CiAJaW50IHR5cGU7CkBAIC0zNzQsNiArMzg4LDcgQEAKIHsKIAlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZzZWxmLT5tYXBzW21hcC0+dHlwZV07CiAJc3RydWN0IHJiX25vZGUgKm5leHQgPSByYl9maXJzdChyb290KTsKKwlpbnQgZXJyID0gMDsKIAogCXdoaWxlIChuZXh0KSB7CiAJCXN0cnVjdCBtYXAgKnBvcyA9IHJiX2VudHJ5KG5leHQsIHN0cnVjdCBtYXAsIHJiX25vZGUpOwpAQCAtMzkwLDIwICs0MDUsMTYgQEAKIAogCQlyYl9lcmFzZSgmcG9zLT5yYl9ub2RlLCByb290KTsKIAkJLyoKLQkJICogV2UgbWF5IGhhdmUgcmVmZXJlbmNlcyB0byB0aGlzIG1hcCwgZm9yIGluc3RhbmNlIGluIHNvbWUKLQkJICogaGlzdF9lbnRyeSBpbnN0YW5jZXMsIHNvIGp1c3QgbW92ZSB0aGVtIHRvIGEgc2VwYXJhdGUKLQkJICogbGlzdC4KLQkJICovCi0JCWxpc3RfYWRkX3RhaWwoJnBvcy0+bm9kZSwgJnNlbGYtPnJlbW92ZWRfbWFwc1ttYXAtPnR5cGVdKTsKLQkJLyoKIAkJICogTm93IGNoZWNrIGlmIHdlIG5lZWQgdG8gY3JlYXRlIG5ldyBtYXBzIGZvciBhcmVhcyBub3QKIAkJICogb3ZlcmxhcHBlZCBieSB0aGUgbmV3IG1hcDoKIAkJICovCiAJCWlmIChtYXAtPnN0YXJ0ID4gcG9zLT5zdGFydCkgewogCQkJc3RydWN0IG1hcCAqYmVmb3JlID0gbWFwX19jbG9uZShwb3MpOwogCi0JCQlpZiAoYmVmb3JlID09IE5VTEwpCi0JCQkJcmV0dXJuIC1FTk9NRU07CisJCQlpZiAoYmVmb3JlID09IE5VTEwpIHsKKwkJCQllcnIgPSAtRU5PTUVNOworCQkJCWdvdG8gbW92ZV9tYXA7CisJCQl9CiAKIAkJCWJlZm9yZS0+ZW5kID0gbWFwLT5zdGFydCAtIDE7CiAJCQltYXBfZ3JvdXBzX19pbnNlcnQoc2VsZiwgYmVmb3JlKTsKQEAgLTQxNCwxNCArNDI1LDI3IEBACiAJCWlmIChtYXAtPmVuZCA8IHBvcy0+ZW5kKSB7CiAJCQlzdHJ1Y3QgbWFwICphZnRlciA9IG1hcF9fY2xvbmUocG9zKTsKIAotCQkJaWYgKGFmdGVyID09IE5VTEwpCi0JCQkJcmV0dXJuIC1FTk9NRU07CisJCQlpZiAoYWZ0ZXIgPT0gTlVMTCkgeworCQkJCWVyciA9IC1FTk9NRU07CisJCQkJZ290byBtb3ZlX21hcDsKKwkJCX0KIAogCQkJYWZ0ZXItPnN0YXJ0ID0gbWFwLT5lbmQgKyAxOwogCQkJbWFwX2dyb3Vwc19faW5zZXJ0KHNlbGYsIGFmdGVyKTsKIAkJCWlmICh2ZXJib3NlID49IDIpCiAJCQkJbWFwX19mcHJpbnRmKGFmdGVyLCBmcCk7CiAJCX0KK21vdmVfbWFwOgorCQkvKgorCQkgKiBJZiB3ZSBoYXZlIHJlZmVyZW5jZXMsIGp1c3QgbW92ZSB0aGVtIHRvIGEgc2VwYXJhdGUgbGlzdC4KKwkJICovCisJCWlmIChwb3MtPnJlZmVyZW5jZWQpCisJCQlsaXN0X2FkZF90YWlsKCZwb3MtPm5vZGUsICZzZWxmLT5yZW1vdmVkX21hcHNbbWFwLT50eXBlXSk7CisJCWVsc2UKKwkJCW1hcF9fZGVsZXRlKHBvcyk7CisKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00OTMsNiArNTE3LDExIEBACiAJcmJfaW5zZXJ0X2NvbG9yKCZtYXAtPnJiX25vZGUsIG1hcHMpOwogfQogCit2b2lkIG1hcHNfX3JlbW92ZShzdHJ1Y3QgcmJfcm9vdCAqc2VsZiwgc3RydWN0IG1hcCAqbWFwKQoreworCXJiX2VyYXNlKCZtYXAtPnJiX25vZGUsIHNlbGYpOworfQorCiBzdHJ1Y3QgbWFwICptYXBzX19maW5kKHN0cnVjdCByYl9yb290ICptYXBzLCB1NjQgaXApCiB7CiAJc3RydWN0IHJiX25vZGUgKipwID0gJm1hcHMtPnJiX25vZGU7CkBAIC01MjYsNiArNTU1LDMxIEBACiAJcmV0dXJuIHNlbGYtPnJvb3RfZGlyID09IE5VTEwgPyAtRU5PTUVNIDogMDsKIH0KIAorc3RhdGljIHZvaWQgZHNvc19fZGVsZXRlKHN0cnVjdCBsaXN0X2hlYWQgKnNlbGYpCit7CisJc3RydWN0IGRzbyAqcG9zLCAqbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIG4sIHNlbGYsIG5vZGUpIHsKKwkJbGlzdF9kZWwoJnBvcy0+bm9kZSk7CisJCWRzb19fZGVsZXRlKHBvcyk7CisJfQorfQorCit2b2lkIG1hY2hpbmVfX2V4aXQoc3RydWN0IG1hY2hpbmUgKnNlbGYpCit7CisJbWFwX2dyb3Vwc19fZXhpdCgmc2VsZi0+a21hcHMpOworCWRzb3NfX2RlbGV0ZSgmc2VsZi0+dXNlcl9kc29zKTsKKwlkc29zX19kZWxldGUoJnNlbGYtPmtlcm5lbF9kc29zKTsKKwlmcmVlKHNlbGYtPnJvb3RfZGlyKTsKKwlzZWxmLT5yb290X2RpciA9IE5VTEw7Cit9CisKK3ZvaWQgbWFjaGluZV9fZGVsZXRlKHN0cnVjdCBtYWNoaW5lICpzZWxmKQoreworCW1hY2hpbmVfX2V4aXQoc2VsZik7CisJZnJlZShzZWxmKTsKK30KKwogc3RydWN0IG1hY2hpbmUgKm1hY2hpbmVzX19hZGQoc3RydWN0IHJiX3Jvb3QgKnNlbGYsIHBpZF90IHBpZCwKIAkJCSAgICAgIGNvbnN0IGNoYXIgKnJvb3RfZGlyKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL21hcC5oIGIvdG9vbHMvcGVyZi91dGlsL21hcC5oCmluZGV4IGYzOTEzNDUuLjc4NTc1NzkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9tYXAuaAorKysgYi90b29scy9wZXJmL3V0aWwvbWFwLmgKQEAgLTI5LDcgKzI5LDggQEAKIAl9OwogCXU2NAkJCXN0YXJ0OwogCXU2NAkJCWVuZDsKLQllbnVtIG1hcF90eXBlCQl0eXBlOworCXU4IC8qIGVudW0gbWFwX3R5cGUgKi8JdHlwZTsKKwlib29sCQkJcmVmZXJlbmNlZDsKIAl1MzIJCQlwcml2OwogCXU2NAkJCXBnb2ZmOwogCkBAIC0xMDYsNyArMTA3LDcgQEAKIAkgICAgICAgdTY0IHN0YXJ0LCB1NjQgZW5kLCB1NjQgcGdvZmYsIHN0cnVjdCBkc28gKmRzbyk7CiBzdHJ1Y3QgbWFwICptYXBfX25ldyhzdHJ1Y3QgbGlzdF9oZWFkICpkc29zX19saXN0LCB1NjQgc3RhcnQsIHU2NCBsZW4sCiAJCSAgICAgdTY0IHBnb2ZmLCB1MzIgcGlkLCBjaGFyICpmaWxlbmFtZSwKLQkJICAgICBlbnVtIG1hcF90eXBlIHR5cGUsIGNoYXIgKmN3ZCwgaW50IGN3ZGxlbik7CisJCSAgICAgZW51bSBtYXBfdHlwZSB0eXBlKTsKIHZvaWQgbWFwX19kZWxldGUoc3RydWN0IG1hcCAqc2VsZik7CiBzdHJ1Y3QgbWFwICptYXBfX2Nsb25lKHN0cnVjdCBtYXAgKnNlbGYpOwogaW50IG1hcF9fb3ZlcmxhcChzdHJ1Y3QgbWFwICpsLCBzdHJ1Y3QgbWFwICpyKTsKQEAgLTEyNSw4ICsxMjYsMTAgQEAKIHNpemVfdCBfX21hcF9ncm91cHNfX2ZwcmludGZfbWFwcyhzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwKIAkJCQkgIGVudW0gbWFwX3R5cGUgdHlwZSwgaW50IHZlcmJvc2UsIEZJTEUgKmZwKTsKIHZvaWQgbWFwc19faW5zZXJ0KHN0cnVjdCByYl9yb290ICptYXBzLCBzdHJ1Y3QgbWFwICptYXApOwordm9pZCBtYXBzX19yZW1vdmUoc3RydWN0IHJiX3Jvb3QgKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCk7CiBzdHJ1Y3QgbWFwICptYXBzX19maW5kKHN0cnVjdCByYl9yb290ICptYXBzLCB1NjQgYWRkcik7CiB2b2lkIG1hcF9ncm91cHNfX2luaXQoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYpOwordm9pZCBtYXBfZ3JvdXBzX19leGl0KHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmKTsKIGludCBtYXBfZ3JvdXBzX19jbG9uZShzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwKIAkJICAgICAgc3RydWN0IG1hcF9ncm91cHMgKnBhcmVudCwgZW51bSBtYXBfdHlwZSB0eXBlKTsKIHNpemVfdCBtYXBfZ3JvdXBzX19mcHJpbnRmKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLCBpbnQgdmVyYm9zZSwgRklMRSAqZnApOwpAQCAtMTQyLDYgKzE0NSw4IEBACiBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZXNfX2ZpbmRuZXcoc3RydWN0IHJiX3Jvb3QgKnNlbGYsIHBpZF90IHBpZCk7CiBjaGFyICptYWNoaW5lX19tbWFwX25hbWUoc3RydWN0IG1hY2hpbmUgKnNlbGYsIGNoYXIgKmJmLCBzaXplX3Qgc2l6ZSk7CiBpbnQgbWFjaGluZV9faW5pdChzdHJ1Y3QgbWFjaGluZSAqc2VsZiwgY29uc3QgY2hhciAqcm9vdF9kaXIsIHBpZF90IHBpZCk7Cit2b2lkIG1hY2hpbmVfX2V4aXQoc3RydWN0IG1hY2hpbmUgKnNlbGYpOwordm9pZCBtYWNoaW5lX19kZWxldGUoc3RydWN0IG1hY2hpbmUgKnNlbGYpOwogCiAvKgogICogRGVmYXVsdCBndWVzdCBrZXJuZWwgaXMgZGVmaW5lZCBieSBwYXJhbWV0ZXIgLS1ndWVzdGthbGxzeW1zCkBAIC0xNjMsNiArMTY4LDExIEBACiAJbWFwLT5ncm91cHMgPSBzZWxmOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgbWFwX2dyb3Vwc19fcmVtb3ZlKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLCBzdHJ1Y3QgbWFwICptYXApCit7CisJbWFwc19fcmVtb3ZlKCZzZWxmLT5tYXBzW21hcC0+dHlwZV0sIG1hcCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1hcCAqbWFwX2dyb3Vwc19fZmluZChzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwKIAkJCQkJICAgZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkcikKIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9uZXd0LmMgYi90b29scy9wZXJmL3V0aWwvbmV3dC5jCmluZGV4IDc1MzdjYTEuLjkxZGU5OWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9uZXd0LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL25ld3QuYwpAQCAtMTEsNiArMTEsNyBAQAogI2RlZmluZSBIQVZFX0xPTkdfTE9ORyBfX0dMSUJDX0hBVkVfTE9OR19MT05HCiAjZW5kaWYKICNpbmNsdWRlIDxzbGFuZy5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPG5ld3QuaD4KICNpbmNsdWRlIDxzeXMvdHR5ZGVmYXVsdHMuaD4KQEAgLTI3OCw5ICsyNzksNDggQEAKIAl2b2lkCQkqZmlyc3RfdmlzaWJsZV9lbnRyeSwgKmVudHJpZXM7CiAJdTE2CQl0b3AsIGxlZnQsIHdpZHRoLCBoZWlnaHQ7CiAJdm9pZAkJKnByaXY7CisJdW5zaWduZWQgaW50CSgqcmVmcmVzaF9lbnRyaWVzKShzdHJ1Y3QgdWlfYnJvd3NlciAqc2VsZik7CisJdm9pZAkJKCpzZWVrKShzdHJ1Y3QgdWlfYnJvd3NlciAqc2VsZiwKKwkJCQlvZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpOwogCXUzMgkJbnJfZW50cmllczsKIH07CiAKK3N0YXRpYyB2b2lkIHVpX2Jyb3dzZXJfX2xpc3RfaGVhZF9zZWVrKHN0cnVjdCB1aV9icm93c2VyICpzZWxmLAorCQkJCSAgICAgICBvZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9IHNlbGYtPmVudHJpZXM7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCisJc3dpdGNoICh3aGVuY2UpIHsKKwljYXNlIFNFRUtfU0VUOgorCQlwb3MgPSBoZWFkLT5uZXh0OworCQlicmVhazsKKwljYXNlIFNFRUtfQ1VSOgorCQlwb3MgPSBzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5OworCQlicmVhazsKKwljYXNlIFNFRUtfRU5EOgorCQlwb3MgPSBoZWFkLT5wcmV2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJaWYgKG9mZnNldCA+IDApIHsKKwkJd2hpbGUgKG9mZnNldC0tICE9IDApCisJCQlwb3MgPSBwb3MtPm5leHQ7CisJfSBlbHNlIHsKKwkJd2hpbGUgKG9mZnNldCsrICE9IDApCisJCQlwb3MgPSBwb3MtPnByZXY7CisJfQorCisJc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeSA9IHBvczsKK30KKworc3RhdGljIGJvb2wgdWlfYnJvd3Nlcl9faXNfY3VycmVudF9lbnRyeShzdHJ1Y3QgdWlfYnJvd3NlciAqc2VsZiwgdW5zaWduZWQgcm93KQoreworCXJldHVybiAoc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeV9pZHggKyByb3cpID09IHNlbGYtPmluZGV4OworfQorCiBzdGF0aWMgdm9pZCB1aV9icm93c2VyX19yZWZyZXNoX2RpbWVuc2lvbnMoc3RydWN0IHVpX2Jyb3dzZXIgKnNlbGYpCiB7CiAJaW50IGNvbHMsIHJvd3M7CkBAIC0yOTcsOCArMzM3LDM2IEBACiAKIHN0YXRpYyB2b2lkIHVpX2Jyb3dzZXJfX3Jlc2V0X2luZGV4KHN0cnVjdCB1aV9icm93c2VyICpzZWxmKQogewotICAgICAgICBzZWxmLT5pbmRleCA9IHNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnlfaWR4ID0gMDsKLSAgICAgICAgc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeSA9IE5VTEw7CisJc2VsZi0+aW5kZXggPSBzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5X2lkeCA9IDA7CisJc2VsZi0+c2VlayhzZWxmLCAwLCBTRUVLX1NFVCk7Cit9CisKK3N0YXRpYyBpbnQgdWlfYnJvd3Nlcl9fc2hvdyhzdHJ1Y3QgdWlfYnJvd3NlciAqc2VsZiwgY29uc3QgY2hhciAqdGl0bGUpCit7CisJaWYgKHNlbGYtPmZvcm0gIT0gTlVMTCkgeworCQluZXd0Rm9ybURlc3Ryb3koc2VsZi0+Zm9ybSk7CisJCW5ld3RQb3BXaW5kb3coKTsKKwl9CisJdWlfYnJvd3Nlcl9fcmVmcmVzaF9kaW1lbnNpb25zKHNlbGYpOworCW5ld3RDZW50ZXJlZFdpbmRvdyhzZWxmLT53aWR0aCwgc2VsZi0+aGVpZ2h0LCB0aXRsZSk7CisJc2VsZi0+Zm9ybSA9IG5ld3RfZm9ybV9fbmV3KCk7CisJaWYgKHNlbGYtPmZvcm0gPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJc2VsZi0+c2IgPSBuZXd0VmVydGljYWxTY3JvbGxiYXIoc2VsZi0+d2lkdGgsIDAsIHNlbGYtPmhlaWdodCwKKwkJCQkJIEhFX0NPTE9SU0VUX05PUk1BTCwKKwkJCQkJIEhFX0NPTE9SU0VUX1NFTEVDVEVEKTsKKwlpZiAoc2VsZi0+c2IgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJbmV3dEZvcm1BZGRIb3RLZXkoc2VsZi0+Zm9ybSwgTkVXVF9LRVlfVVApOworCW5ld3RGb3JtQWRkSG90S2V5KHNlbGYtPmZvcm0sIE5FV1RfS0VZX0RPV04pOworCW5ld3RGb3JtQWRkSG90S2V5KHNlbGYtPmZvcm0sIE5FV1RfS0VZX1BHVVApOworCW5ld3RGb3JtQWRkSG90S2V5KHNlbGYtPmZvcm0sIE5FV1RfS0VZX1BHRE4pOworCW5ld3RGb3JtQWRkSG90S2V5KHNlbGYtPmZvcm0sIE5FV1RfS0VZX0hPTUUpOworCW5ld3RGb3JtQWRkSG90S2V5KHNlbGYtPmZvcm0sIE5FV1RfS0VZX0VORCk7CisJbmV3dEZvcm1BZGRDb21wb25lbnQoc2VsZi0+Zm9ybSwgc2VsZi0+c2IpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG9iamR1bXBfbGluZV9fc2hvdyhzdHJ1Y3Qgb2JqZHVtcF9saW5lICpzZWxmLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLApAQCAtMzUyLDI2ICs0MjAsMTAgQEAKIAogc3RhdGljIGludCB1aV9icm93c2VyX19yZWZyZXNoX2VudHJpZXMoc3RydWN0IHVpX2Jyb3dzZXIgKnNlbGYpCiB7Ci0Jc3RydWN0IG9iamR1bXBfbGluZSAqcG9zOwotCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSBzZWxmLT5lbnRyaWVzOwotCXN0cnVjdCBoaXN0X2VudHJ5ICpoZSA9IHNlbGYtPnByaXY7Ci0JaW50IHJvdyA9IDA7Ci0JaW50IGxlbiA9IGhlLT5tcy5zeW0tPmVuZCAtIGhlLT5tcy5zeW0tPnN0YXJ0OworCWludCByb3c7CiAKLQlpZiAoc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeSA9PSBOVUxMIHx8IHNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnkgPT0gc2VsZi0+ZW50cmllcykKLSAgICAgICAgICAgICAgICBzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5ID0gaGVhZC0+bmV4dDsKLQotCXBvcyA9IGxpc3RfZW50cnkoc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeSwgc3RydWN0IG9iamR1bXBfbGluZSwgbm9kZSk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20ocG9zLCBoZWFkLCBub2RlKSB7Ci0JCWJvb2wgY3VycmVudF9lbnRyeSA9IChzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5X2lkeCArIHJvdykgPT0gc2VsZi0+aW5kZXg7Ci0JCVNMc21nX2dvdG9yYyhzZWxmLT50b3AgKyByb3csIHNlbGYtPmxlZnQpOwotCQlvYmpkdW1wX2xpbmVfX3Nob3cocG9zLCBoZWFkLCBzZWxmLT53aWR0aCwKLQkJCQkgICBoZSwgbGVuLCBjdXJyZW50X2VudHJ5KTsKLQkJaWYgKCsrcm93ID09IHNlbGYtPmhlaWdodCkKLQkJCWJyZWFrOwotCX0KLQorCW5ld3RTY3JvbGxiYXJTZXQoc2VsZi0+c2IsIHNlbGYtPmluZGV4LCBzZWxmLT5ucl9lbnRyaWVzIC0gMSk7CisJcm93ID0gc2VsZi0+cmVmcmVzaF9lbnRyaWVzKHNlbGYpOwogCVNMc21nX3NldF9jb2xvcihIRV9DT0xPUlNFVF9OT1JNQUwpOwogCVNMc21nX2ZpbGxfcmVnaW9uKHNlbGYtPnRvcCArIHJvdywgc2VsZi0+bGVmdCwKIAkJCSAgc2VsZi0+aGVpZ2h0IC0gcm93LCBzZWxmLT53aWR0aCwgJyAnKTsKQEAgLTM3OSw0MiArNDMxLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdWlfYnJvd3Nlcl9fcnVuKHN0cnVjdCB1aV9icm93c2VyICpzZWxmLCBjb25zdCBjaGFyICp0aXRsZSwKLQkJCSAgIHN0cnVjdCBuZXd0RXhpdFN0cnVjdCAqZXMpCitzdGF0aWMgaW50IHVpX2Jyb3dzZXJfX3J1bihzdHJ1Y3QgdWlfYnJvd3NlciAqc2VsZiwgc3RydWN0IG5ld3RFeGl0U3RydWN0ICplcykKIHsKLQlpZiAoc2VsZi0+Zm9ybSkgewotCQluZXd0Rm9ybURlc3Ryb3koc2VsZi0+Zm9ybSk7Ci0JCW5ld3RQb3BXaW5kb3coKTsKLQl9Ci0KLQl1aV9icm93c2VyX19yZWZyZXNoX2RpbWVuc2lvbnMoc2VsZik7Ci0JbmV3dENlbnRlcmVkV2luZG93KHNlbGYtPndpZHRoICsgMiwgc2VsZi0+aGVpZ2h0LCB0aXRsZSk7Ci0Jc2VsZi0+Zm9ybSA9IG5ld3RfZm9ybV9fbmV3KCk7Ci0JaWYgKHNlbGYtPmZvcm0gPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCi0Jc2VsZi0+c2IgPSBuZXd0VmVydGljYWxTY3JvbGxiYXIoc2VsZi0+d2lkdGggKyAxLCAwLCBzZWxmLT5oZWlnaHQsCi0JCQkJCSBIRV9DT0xPUlNFVF9OT1JNQUwsCi0JCQkJCSBIRV9DT0xPUlNFVF9TRUxFQ1RFRCk7Ci0JaWYgKHNlbGYtPnNiID09IE5VTEwpCi0JCXJldHVybiAtMTsKLQotCW5ld3RGb3JtQWRkSG90S2V5KHNlbGYtPmZvcm0sIE5FV1RfS0VZX1VQKTsKLQluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5mb3JtLCBORVdUX0tFWV9ET1dOKTsKLQluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5mb3JtLCBORVdUX0tFWV9QR1VQKTsKLQluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5mb3JtLCBORVdUX0tFWV9QR0ROKTsKLQluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5mb3JtLCAnICcpOwotCW5ld3RGb3JtQWRkSG90S2V5KHNlbGYtPmZvcm0sIE5FV1RfS0VZX0hPTUUpOwotCW5ld3RGb3JtQWRkSG90S2V5KHNlbGYtPmZvcm0sIE5FV1RfS0VZX0VORCk7Ci0JbmV3dEZvcm1BZGRIb3RLZXkoc2VsZi0+Zm9ybSwgTkVXVF9LRVlfVEFCKTsKLQluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5mb3JtLCBORVdUX0tFWV9SSUdIVCk7Ci0KIAlpZiAodWlfYnJvd3Nlcl9fcmVmcmVzaF9lbnRyaWVzKHNlbGYpIDwgMCkKIAkJcmV0dXJuIC0xOwotCW5ld3RGb3JtQWRkQ29tcG9uZW50KHNlbGYtPmZvcm0sIHNlbGYtPnNiKTsKIAogCXdoaWxlICgxKSB7Ci0JCXVuc2lnbmVkIGludCBvZmZzZXQ7CisJCW9mZl90IG9mZnNldDsKIAogCQluZXd0Rm9ybVJ1bihzZWxmLT5mb3JtLCBlcyk7CiAKQEAgLTQyOCw5ICs0NTEsOCBAQAogCQkJCWJyZWFrOwogCQkJKytzZWxmLT5pbmRleDsKIAkJCWlmIChzZWxmLT5pbmRleCA9PSBzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5X2lkeCArIHNlbGYtPmhlaWdodCkgewotCQkJCXN0cnVjdCBsaXN0X2hlYWQgKnBvcyA9IHNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnk7CiAJCQkJKytzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5X2lkeDsKLQkJCQlzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5ID0gcG9zLT5uZXh0OworCQkJCXNlbGYtPnNlZWsoc2VsZiwgKzEsIFNFRUtfQ1VSKTsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIE5FV1RfS0VZX1VQOgpAQCAtNDM4LDkgKzQ2MCw4IEBACiAJCQkJYnJlYWs7CiAJCQktLXNlbGYtPmluZGV4OwogCQkJaWYgKHNlbGYtPmluZGV4IDwgc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeV9pZHgpIHsKLQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MgPSBzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5OwogCQkJCS0tc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeV9pZHg7Ci0JCQkJc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeSA9IHBvcy0+cHJldjsKKwkJCQlzZWxmLT5zZWVrKHNlbGYsIC0xLCBTRUVLX0NVUik7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBORVdUX0tFWV9QR0ROOgpAQCAtNDUzLDEyICs0NzQsNyBAQAogCQkJCW9mZnNldCA9IHNlbGYtPm5yX2VudHJpZXMgLSAxIC0gc2VsZi0+aW5kZXg7CiAJCQlzZWxmLT5pbmRleCArPSBvZmZzZXQ7CiAJCQlzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5X2lkeCArPSBvZmZzZXQ7Ci0KLQkJCXdoaWxlIChvZmZzZXQtLSkgewotCQkJCXN0cnVjdCBsaXN0X2hlYWQgKnBvcyA9IHNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnk7Ci0JCQkJc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeSA9IHBvcy0+bmV4dDsKLQkJCX0KLQorCQkJc2VsZi0+c2VlayhzZWxmLCArb2Zmc2V0LCBTRUVLX0NVUik7CiAJCQlicmVhazsKIAkJY2FzZSBORVdUX0tFWV9QR1VQOgogCQkJaWYgKHNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnlfaWR4ID09IDApCkBAIC00NzEsMzYgKzQ4NywyMiBAQAogCiAJCQlzZWxmLT5pbmRleCAtPSBvZmZzZXQ7CiAJCQlzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5X2lkeCAtPSBvZmZzZXQ7Ci0KLQkJCXdoaWxlIChvZmZzZXQtLSkgewotCQkJCXN0cnVjdCBsaXN0X2hlYWQgKnBvcyA9IHNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnk7Ci0JCQkJc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeSA9IHBvcy0+cHJldjsKLQkJCX0KKwkJCXNlbGYtPnNlZWsoc2VsZiwgLW9mZnNldCwgU0VFS19DVVIpOwogCQkJYnJlYWs7CiAJCWNhc2UgTkVXVF9LRVlfSE9NRToKIAkJCXVpX2Jyb3dzZXJfX3Jlc2V0X2luZGV4KHNlbGYpOwogCQkJYnJlYWs7Ci0JCWNhc2UgTkVXVF9LRVlfRU5EOiB7Ci0JCQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gc2VsZi0+ZW50cmllczsKKwkJY2FzZSBORVdUX0tFWV9FTkQ6CiAJCQlvZmZzZXQgPSBzZWxmLT5oZWlnaHQgLSAxOworCQkJaWYgKG9mZnNldCA+PSBzZWxmLT5ucl9lbnRyaWVzKQorCQkJCW9mZnNldCA9IHNlbGYtPm5yX2VudHJpZXMgLSAxOwogCi0JCQlpZiAob2Zmc2V0ID4gc2VsZi0+bnJfZW50cmllcykKLQkJCQlvZmZzZXQgPSBzZWxmLT5ucl9lbnRyaWVzOwotCi0JCQlzZWxmLT5pbmRleCA9IHNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnlfaWR4ID0gc2VsZi0+bnJfZW50cmllcyAtIDEgLSBvZmZzZXQ7Ci0JCQlzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5ID0gaGVhZC0+cHJldjsKLQkJCXdoaWxlIChvZmZzZXQtLSAhPSAwKSB7Ci0JCQkJc3RydWN0IGxpc3RfaGVhZCAqcG9zID0gc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeTsKLQkJCQlzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5ID0gcG9zLT5wcmV2OwotCQkJfQotCQl9CisJCQlzZWxmLT5pbmRleCA9IHNlbGYtPm5yX2VudHJpZXMgLSAxOworCQkJc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeV9pZHggPSBzZWxmLT5pbmRleCAtIG9mZnNldDsKKwkJCXNlbGYtPnNlZWsoc2VsZiwgLW9mZnNldCwgU0VFS19FTkQpOwogCQkJYnJlYWs7Ci0JCWNhc2UgTkVXVF9LRVlfUklHSFQ6Ci0JCWNhc2UgTkVXVF9LRVlfTEVGVDoKLQkJY2FzZSBORVdUX0tFWV9UQUI6Ci0JCQlyZXR1cm4gZXMtPnUua2V5OwogCQlkZWZhdWx0OgotCQkJY29udGludWU7CisJCQlyZXR1cm4gZXMtPnUua2V5OwogCQl9CiAJCWlmICh1aV9icm93c2VyX19yZWZyZXNoX2VudHJpZXMoc2VsZikgPCAwKQogCQkJcmV0dXJuIC0xOwpAQCAtNTA4LDM4ICs1MTAsNiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogV2hlbiBkZWJ1Z2dpbmcgbmV3dCBwcm9ibGVtcyBpdCB3YXMgdXNlZnVsIHRvIGJlIGFibGUgdG8gInVucm9sbCIKLSAqIHRoZSBjYWxscyB0byBuZXd0Q2hlY2tCb3hUcmVlQWRke0FycmF5LEl0ZW19LCBzbyB0aGF0IHdlIGNhbiBnZW5lcmF0ZQotICogYSBzb3VyY2UgZmlsZSB3aXRoIHRoZSBzZXF1ZW5jZSBvZiBjYWxscyB0byB0aGVzZSBtZXRob2RzLCB0byB0aGVuCi0gKiB0d2VhayB0aGUgYXJyYXlzIHRvIGdldCB0aGUgaW50ZW5kZWQgcmVzdWx0cywgc28gSSdtIGtlZXBpbmcgdGhpcyBjb2RlCi0gKiBoZXJlLCBtYXkgYmUgdXNlZnVsIGFnYWluIGluIHRoZSBmdXR1cmUuCi0gKi8KLSN1bmRlZiBORVdUX0RFQlVHCi0KLXN0YXRpYyB2b2lkIG5ld3RfY2hlY2tib3hfdHJlZV9fYWRkKG5ld3RDb21wb25lbnQgdHJlZSwgY29uc3QgY2hhciAqc3RyLAotCQkJCSAgICB2b2lkICpwcml2LCBpbnQgKmluZGV4ZXMpCi17Ci0jaWZkZWYgTkVXVF9ERUJVRwotCS8qIFByaW50IHRoZSBuZXd0Q2hlY2tib3hUcmVlQWRkQXJyYXkgdG8gdGlua2VyIHdpdGggaXRzIGluZGV4IGFycmF5cyAqLwotCWludCBpID0gMCwgbGVuID0gNDAgLSBzdHJsZW4oc3RyKTsKLQotCWZwcmludGYoc3RkZXJyLAotCQkiXHRuZXd0Q2hlY2tib3hUcmVlQWRkSXRlbSh0cmVlLCAlKi4qc1wiJXNcIiwgKHZvaWQgKiklcCwgMCwgIiwKLQkJbGVuLCBsZW4sICIgIiwgc3RyLCBwcml2KTsKLQl3aGlsZSAoaW5kZXhlc1tpXSAhPSBORVdUX0FSR19MQVNUKSB7Ci0JCWlmIChpbmRleGVzW2ldICE9IE5FV1RfQVJHX0FQUEVORCkKLQkJCWZwcmludGYoc3RkZXJyLCAiICVkLCIsIGluZGV4ZXNbaV0pOwotCQllbHNlCi0JCQlmcHJpbnRmKHN0ZGVyciwgIiAlcywiLCAiTkVXVF9BUkdfQVBQRU5EIik7Ci0JCSsraTsKLQl9Ci0JZnByaW50ZihzdGRlcnIsICIgJXMiLCAiIE5FV1RfQVJHX0xBU1QpO1xuIik7Ci0JZmZsdXNoKHN0ZGVycik7Ci0jZW5kaWYKLQluZXd0Q2hlY2tib3hUcmVlQWRkQXJyYXkodHJlZSwgc3RyLCBwcml2LCAwLCBpbmRleGVzKTsKLX0KLQogc3RhdGljIGNoYXIgKmNhbGxjaGFpbl9saXN0X19zeW1fbmFtZShzdHJ1Y3QgY2FsbGNoYWluX2xpc3QgKnNlbGYsCiAJCQkJICAgICAgY2hhciAqYmYsIHNpemVfdCBiZnNpemUpCiB7CkBAIC01NTAsMTQ0ICs1MjAsMjkgQEAKIAlyZXR1cm4gYmY7CiB9CiAKLXN0YXRpYyB2b2lkIF9fY2FsbGNoYWluX19hcHBlbmRfZ3JhcGhfYnJvd3NlcihzdHJ1Y3QgY2FsbGNoYWluX25vZGUgKnNlbGYsCi0JCQkJCSAgICAgIG5ld3RDb21wb25lbnQgdHJlZSwgdTY0IHRvdGFsLAotCQkJCQkgICAgICBpbnQgKmluZGV4ZXMsIGludCBkZXB0aCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGlzdF9lbnRyeV9fYW5ub3RhdGVfYnJvd3Nlcl9yZWZyZXNoKHN0cnVjdCB1aV9icm93c2VyICpzZWxmKQogewotCXN0cnVjdCByYl9ub2RlICpub2RlOwotCXU2NCBuZXdfdG90YWwsIHJlbWFpbmluZzsKLQlpbnQgaWR4ID0gMDsKKwlzdHJ1Y3Qgb2JqZHVtcF9saW5lICpwb3M7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9IHNlbGYtPmVudHJpZXM7CisJc3RydWN0IGhpc3RfZW50cnkgKmhlID0gc2VsZi0+cHJpdjsKKwlpbnQgcm93ID0gMDsKKwlpbnQgbGVuID0gaGUtPm1zLnN5bS0+ZW5kIC0gaGUtPm1zLnN5bS0+c3RhcnQ7CiAKLQlpZiAoY2FsbGNoYWluX3BhcmFtLm1vZGUgPT0gQ0hBSU5fR1JBUEhfUkVMKQotCQluZXdfdG90YWwgPSBzZWxmLT5jaGlsZHJlbl9oaXQ7Ci0JZWxzZQotCQluZXdfdG90YWwgPSB0b3RhbDsKKwlpZiAoc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeSA9PSBOVUxMIHx8IHNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnkgPT0gc2VsZi0+ZW50cmllcykKKyAgICAgICAgICAgICAgICBzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5ID0gaGVhZC0+bmV4dDsKIAotCXJlbWFpbmluZyA9IG5ld190b3RhbDsKLQlub2RlID0gcmJfZmlyc3QoJnNlbGYtPnJiX3Jvb3QpOwotCXdoaWxlIChub2RlKSB7Ci0JCXN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqY2hpbGQgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgY2FsbGNoYWluX25vZGUsIHJiX25vZGUpOwotCQlzdHJ1Y3QgcmJfbm9kZSAqbmV4dCA9IHJiX25leHQobm9kZSk7Ci0JCXU2NCBjdW11bCA9IGN1bXVsX2hpdHMoY2hpbGQpOwotCQlzdHJ1Y3QgY2FsbGNoYWluX2xpc3QgKmNoYWluOwotCQlpbnQgZmlyc3QgPSB0cnVlLCBwcmludGVkID0gMDsKLQkJaW50IGNoYWluX2lkeCA9IC0xOwotCQlyZW1haW5pbmcgLT0gY3VtdWw7CisJcG9zID0gbGlzdF9lbnRyeShzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5LCBzdHJ1Y3Qgb2JqZHVtcF9saW5lLCBub2RlKTsKIAotCQlpbmRleGVzW2RlcHRoXSA9IE5FV1RfQVJHX0FQUEVORDsKLQkJaW5kZXhlc1tkZXB0aCArIDFdID0gTkVXVF9BUkdfTEFTVDsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYWluLCAmY2hpbGQtPnZhbCwgbGlzdCkgewotCQkJY2hhciBpcHN0cltCSVRTX1BFUl9MT05HIC8gNCArIDFdLAotCQkJICAgICAqYWxsb2Nfc3RyID0gTlVMTDsKLQkJCWNvbnN0IGNoYXIgKnN0ciA9IGNhbGxjaGFpbl9saXN0X19zeW1fbmFtZShjaGFpbiwgaXBzdHIsIHNpemVvZihpcHN0cikpOwotCi0JCQlpZiAoZmlyc3QpIHsKLQkJCQlkb3VibGUgcGVyY2VudCA9IGN1bXVsICogMTAwLjAgLyBuZXdfdG90YWw7Ci0KLQkJCQlmaXJzdCA9IGZhbHNlOwotCQkJCWlmIChhc3ByaW50ZigmYWxsb2Nfc3RyLCAiJTIuMmYlJSAlcyIsIHBlcmNlbnQsIHN0cikgPCAwKQotCQkJCQlzdHIgPSAiTm90IGVub3VnaCBtZW1vcnkhIjsKLQkJCQllbHNlCi0JCQkJCXN0ciA9IGFsbG9jX3N0cjsKLQkJCX0gZWxzZSB7Ci0JCQkJaW5kZXhlc1tkZXB0aF0gPSBpZHg7Ci0JCQkJaW5kZXhlc1tkZXB0aCArIDFdID0gTkVXVF9BUkdfQVBQRU5EOwotCQkJCWluZGV4ZXNbZGVwdGggKyAyXSA9IE5FV1RfQVJHX0xBU1Q7Ci0JCQkJKytjaGFpbl9pZHg7Ci0JCQl9Ci0JCQluZXd0X2NoZWNrYm94X3RyZWVfX2FkZCh0cmVlLCBzdHIsICZjaGFpbi0+bXMsIGluZGV4ZXMpOwotCQkJZnJlZShhbGxvY19zdHIpOwotCQkJKytwcmludGVkOwotCQl9Ci0KLQkJaW5kZXhlc1tkZXB0aF0gPSBpZHg7Ci0JCWlmIChjaGFpbl9pZHggIT0gLTEpCi0JCQlpbmRleGVzW2RlcHRoICsgMV0gPSBjaGFpbl9pZHg7Ci0JCWlmIChwcmludGVkICE9IDApCi0JCQkrK2lkeDsKLQkJX19jYWxsY2hhaW5fX2FwcGVuZF9ncmFwaF9icm93c2VyKGNoaWxkLCB0cmVlLCBuZXdfdG90YWwsIGluZGV4ZXMsCi0JCQkJCQkgIGRlcHRoICsgKGNoYWluX2lkeCAhPSAtMSA/IDIgOiAxKSk7Ci0JCW5vZGUgPSBuZXh0OwotCX0KLX0KLQotc3RhdGljIHZvaWQgY2FsbGNoYWluX19hcHBlbmRfZ3JhcGhfYnJvd3NlcihzdHJ1Y3QgY2FsbGNoYWluX25vZGUgKnNlbGYsCi0JCQkJCSAgICBuZXd0Q29tcG9uZW50IHRyZWUsIHU2NCB0b3RhbCwKLQkJCQkJICAgIGludCAqaW5kZXhlcywgaW50IHBhcmVudF9pZHgpCi17Ci0Jc3RydWN0IGNhbGxjaGFpbl9saXN0ICpjaGFpbjsKLQlpbnQgaSA9IDA7Ci0KLQlpbmRleGVzWzFdID0gTkVXVF9BUkdfQVBQRU5EOwotCWluZGV4ZXNbMl0gPSBORVdUX0FSR19MQVNUOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjaGFpbiwgJnNlbGYtPnZhbCwgbGlzdCkgewotCQljaGFyIGlwc3RyW0JJVFNfUEVSX0xPTkcgLyA0ICsgMV0sICpzdHI7Ci0KLQkJaWYgKGNoYWluLT5pcCA+PSBQRVJGX0NPTlRFWFRfTUFYKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFpKysgJiYgc29ydF9fZmlyc3RfZGltZW5zaW9uID09IFNPUlRfU1lNKQotCQkJY29udGludWU7Ci0KLQkJc3RyID0gY2FsbGNoYWluX2xpc3RfX3N5bV9uYW1lKGNoYWluLCBpcHN0ciwgc2l6ZW9mKGlwc3RyKSk7Ci0JCW5ld3RfY2hlY2tib3hfdHJlZV9fYWRkKHRyZWUsIHN0ciwgJmNoYWluLT5tcywgaW5kZXhlcyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tKHBvcywgaGVhZCwgbm9kZSkgeworCQlib29sIGN1cnJlbnRfZW50cnkgPSB1aV9icm93c2VyX19pc19jdXJyZW50X2VudHJ5KHNlbGYsIHJvdyk7CisJCVNMc21nX2dvdG9yYyhzZWxmLT50b3AgKyByb3csIHNlbGYtPmxlZnQpOworCQlvYmpkdW1wX2xpbmVfX3Nob3cocG9zLCBoZWFkLCBzZWxmLT53aWR0aCwKKwkJCQkgICBoZSwgbGVuLCBjdXJyZW50X2VudHJ5KTsKKwkJaWYgKCsrcm93ID09IHNlbGYtPmhlaWdodCkKKwkJCWJyZWFrOwogCX0KIAotCWluZGV4ZXNbMV0gPSBwYXJlbnRfaWR4OwotCWluZGV4ZXNbMl0gPSBORVdUX0FSR19BUFBFTkQ7Ci0JaW5kZXhlc1szXSA9IE5FV1RfQVJHX0xBU1Q7Ci0JX19jYWxsY2hhaW5fX2FwcGVuZF9ncmFwaF9icm93c2VyKHNlbGYsIHRyZWUsIHRvdGFsLCBpbmRleGVzLCAyKTsKLX0KLQotc3RhdGljIHZvaWQgaGlzdF9lbnRyeV9fYXBwZW5kX2NhbGxjaGFpbl9icm93c2VyKHN0cnVjdCBoaXN0X2VudHJ5ICpzZWxmLAotCQkJCQkJIG5ld3RDb21wb25lbnQgdHJlZSwgdTY0IHRvdGFsLCBpbnQgcGFyZW50X2lkeCkKLXsKLQlzdHJ1Y3QgcmJfbm9kZSAqcmJfbm9kZTsKLQlpbnQgaW5kZXhlc1sxMDI0XSA9IHsgWzBdID0gcGFyZW50X2lkeCwgfTsKLQlpbnQgaWR4ID0gMDsKLQlzdHJ1Y3QgY2FsbGNoYWluX25vZGUgKmNoYWluOwotCi0JcmJfbm9kZSA9IHJiX2ZpcnN0KCZzZWxmLT5zb3J0ZWRfY2hhaW4pOwotCXdoaWxlIChyYl9ub2RlKSB7Ci0JCWNoYWluID0gcmJfZW50cnkocmJfbm9kZSwgc3RydWN0IGNhbGxjaGFpbl9ub2RlLCByYl9ub2RlKTsKLQkJc3dpdGNoIChjYWxsY2hhaW5fcGFyYW0ubW9kZSkgewotCQljYXNlIENIQUlOX0ZMQVQ6Ci0JCQlicmVhazsKLQkJY2FzZSBDSEFJTl9HUkFQSF9BQlM6IC8qIGZhbGxkb3duICovCi0JCWNhc2UgQ0hBSU5fR1JBUEhfUkVMOgotCQkJY2FsbGNoYWluX19hcHBlbmRfZ3JhcGhfYnJvd3NlcihjaGFpbiwgdHJlZSwgdG90YWwsIGluZGV4ZXMsIGlkeCsrKTsKLQkJCWJyZWFrOwotCQljYXNlIENIQUlOX05PTkU6Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQlyYl9ub2RlID0gcmJfbmV4dChyYl9ub2RlKTsKLQl9Ci19Ci0KLXN0YXRpYyBzaXplX3QgaGlzdF9lbnRyeV9fYXBwZW5kX2Jyb3dzZXIoc3RydWN0IGhpc3RfZW50cnkgKnNlbGYsCi0JCQkJCSBuZXd0Q29tcG9uZW50IHRyZWUsIHU2NCB0b3RhbCkKLXsKLQljaGFyIHNbMjU2XTsKLQlzaXplX3QgcmV0OwotCi0JaWYgKHN5bWJvbF9jb25mLmV4Y2x1ZGVfb3RoZXIgJiYgIXNlbGYtPnBhcmVudCkKLQkJcmV0dXJuIDA7Ci0KLQlyZXQgPSBoaXN0X2VudHJ5X19zbnByaW50ZihzZWxmLCBzLCBzaXplb2YocyksIE5VTEwsCi0JCQkJICAgZmFsc2UsIDAsIGZhbHNlLCB0b3RhbCk7Ci0JaWYgKHN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4pIHsKLQkJaW50IGluZGV4ZXNbMl07Ci0KLQkJaW5kZXhlc1swXSA9IE5FV1RfQVJHX0FQUEVORDsKLQkJaW5kZXhlc1sxXSA9IE5FV1RfQVJHX0xBU1Q7Ci0JCW5ld3RfY2hlY2tib3hfdHJlZV9fYWRkKHRyZWUsIHMsICZzZWxmLT5tcywgaW5kZXhlcyk7Ci0JfSBlbHNlCi0JCW5ld3RMaXN0Ym94QXBwZW5kRW50cnkodHJlZSwgcywgJnNlbGYtPm1zKTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIHJvdzsKIH0KIAogaW50IGhpc3RfZW50cnlfX3R1aV9hbm5vdGF0ZShzdHJ1Y3QgaGlzdF9lbnRyeSAqc2VsZikKQEAgLTcxMiw3ICs1NjcsOSBAQAogCXVpX2hlbHBsaW5lX19wdXNoKCJQcmVzcyA8LSBvciBFU0MgdG8gZXhpdCIpOwogCiAJbWVtc2V0KCZicm93c2VyLCAwLCBzaXplb2YoYnJvd3NlcikpOwotCWJyb3dzZXIuZW50cmllcyA9ICZoZWFkOworCWJyb3dzZXIuZW50cmllcwkJPSAmaGVhZDsKKwlicm93c2VyLnJlZnJlc2hfZW50cmllcyA9IGhpc3RfZW50cnlfX2Fubm90YXRlX2Jyb3dzZXJfcmVmcmVzaDsKKwlicm93c2VyLnNlZWsJCT0gdWlfYnJvd3Nlcl9fbGlzdF9oZWFkX3NlZWs7CiAJYnJvd3Nlci5wcml2ID0gc2VsZjsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJmhlYWQsIG5vZGUpIHsKIAkJc2l6ZV90IGxpbmVfbGVuID0gc3RybGVuKHBvcy0+bGluZSk7CkBAIC03MjIsNyArNTc5LDkgQEAKIAl9CiAKIAlicm93c2VyLndpZHRoICs9IDE4OyAvKiBQZXJjZW50YWdlICovCi0JcmV0ID0gdWlfYnJvd3Nlcl9fcnVuKCZicm93c2VyLCBzZWxmLT5tcy5zeW0tPm5hbWUsICZlcyk7CisJdWlfYnJvd3Nlcl9fc2hvdygmYnJvd3Nlciwgc2VsZi0+bXMuc3ltLT5uYW1lKTsKKwluZXd0Rm9ybUFkZEhvdEtleShicm93c2VyLmZvcm0sICcgJyk7CisJcmV0ID0gdWlfYnJvd3Nlcl9fcnVuKCZicm93c2VyLCAmZXMpOwogCW5ld3RGb3JtRGVzdHJveShicm93c2VyLmZvcm0pOwogCW5ld3RQb3BXaW5kb3coKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCBuLCAmaGVhZCwgbm9kZSkgewpAQCAtNzMzLDE1NyArNTkyLDQ4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGNvbnN0IHZvaWQgKm5ld3RfX3N5bWJvbF90cmVlX2dldF9jdXJyZW50KG5ld3RDb21wb25lbnQgc2VsZikKLXsKLQlpZiAoc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbikKLQkJcmV0dXJuIG5ld3RDaGVja2JveFRyZWVHZXRDdXJyZW50KHNlbGYpOwotCXJldHVybiBuZXd0TGlzdGJveEdldEN1cnJlbnQoc2VsZik7Ci19Ci0KLXN0YXRpYyB2b2lkIGhpc3RfYnJvd3Nlcl9fc2VsZWN0aW9uKG5ld3RDb21wb25lbnQgc2VsZiwgdm9pZCAqZGF0YSkKLXsKLQljb25zdCBzdHJ1Y3QgbWFwX3N5bWJvbCAqKnN5bWJvbF9wdHIgPSBkYXRhOwotCSpzeW1ib2xfcHRyID0gbmV3dF9fc3ltYm9sX3RyZWVfZ2V0X2N1cnJlbnQoc2VsZik7Ci19Ci0KIHN0cnVjdCBoaXN0X2Jyb3dzZXIgewotCW5ld3RDb21wb25lbnQJCWZvcm0sIHRyZWU7Ci0JY29uc3Qgc3RydWN0IG1hcF9zeW1ib2wgKnNlbGVjdGlvbjsKKwlzdHJ1Y3QgdWlfYnJvd3NlciAgIGI7CisJc3RydWN0IGhpc3RzCSAgICAqaGlzdHM7CisJc3RydWN0IGhpc3RfZW50cnkgICAqaGVfc2VsZWN0aW9uOworCXN0cnVjdCBtYXBfc3ltYm9sICAgKnNlbGVjdGlvbjsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGlzdF9icm93c2VyICpoaXN0X2Jyb3dzZXJfX25ldyh2b2lkKQotewotCXN0cnVjdCBoaXN0X2Jyb3dzZXIgKnNlbGYgPSBtYWxsb2Moc2l6ZW9mKCpzZWxmKSk7CitzdGF0aWMgdm9pZCBoaXN0X2Jyb3dzZXJfX3Jlc2V0KHN0cnVjdCBoaXN0X2Jyb3dzZXIgKnNlbGYpOworc3RhdGljIGludCBoaXN0X2Jyb3dzZXJfX3J1bihzdHJ1Y3QgaGlzdF9icm93c2VyICpzZWxmLCBjb25zdCBjaGFyICp0aXRsZSwKKwkJCSAgICAgc3RydWN0IG5ld3RFeGl0U3RydWN0ICplcyk7CitzdGF0aWMgdW5zaWduZWQgaW50IGhpc3RfYnJvd3Nlcl9fcmVmcmVzaF9lbnRyaWVzKHN0cnVjdCB1aV9icm93c2VyICpzZWxmKTsKK3N0YXRpYyB2b2lkIHVpX2Jyb3dzZXJfX2hpc3RzX3NlZWsoc3RydWN0IHVpX2Jyb3dzZXIgKnNlbGYsCisJCQkJICAgb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKTsKIAotCWlmIChzZWxmICE9IE5VTEwpCi0JCXNlbGYtPmZvcm0gPSBOVUxMOworc3RhdGljIHN0cnVjdCBoaXN0X2Jyb3dzZXIgKmhpc3RfYnJvd3Nlcl9fbmV3KHN0cnVjdCBoaXN0cyAqaGlzdHMpCit7CisJc3RydWN0IGhpc3RfYnJvd3NlciAqc2VsZiA9IHphbGxvYyhzaXplb2YoKnNlbGYpKTsKKworCWlmIChzZWxmKSB7CisJCXNlbGYtPmhpc3RzID0gaGlzdHM7CisJCXNlbGYtPmIucmVmcmVzaF9lbnRyaWVzID0gaGlzdF9icm93c2VyX19yZWZyZXNoX2VudHJpZXM7CisJCXNlbGYtPmIuc2VlayA9IHVpX2Jyb3dzZXJfX2hpc3RzX3NlZWs7CisJfQogCiAJcmV0dXJuIHNlbGY7CiB9CiAKIHN0YXRpYyB2b2lkIGhpc3RfYnJvd3Nlcl9fZGVsZXRlKHN0cnVjdCBoaXN0X2Jyb3dzZXIgKnNlbGYpCiB7Ci0JbmV3dEZvcm1EZXN0cm95KHNlbGYtPmZvcm0pOworCW5ld3RGb3JtRGVzdHJveShzZWxmLT5iLmZvcm0pOwogCW5ld3RQb3BXaW5kb3coKTsKIAlmcmVlKHNlbGYpOwogfQogCi1zdGF0aWMgaW50IGhpc3RfYnJvd3Nlcl9fcG9wdWxhdGUoc3RydWN0IGhpc3RfYnJvd3NlciAqc2VsZiwgc3RydWN0IGhpc3RzICpoaXN0cywKLQkJCQkgIGNvbnN0IGNoYXIgKnRpdGxlKQotewotCWludCBtYXhfbGVuID0gMCwgaWR4LCBjb2xzLCByb3dzOwotCXN0cnVjdCB1aV9wcm9ncmVzcyAqcHJvZ3Jlc3M7Ci0Jc3RydWN0IHJiX25vZGUgKm5kOwotCXU2NCBjdXJyX2hpc3QgPSAwOwotCWNoYXIgc2VxW10gPSAiLiIsIHVuaXQ7Ci0JY2hhciBzdHJbMjU2XTsKLQl1bnNpZ25lZCBsb25nIG5yX2V2ZW50cyA9IGhpc3RzLT5zdGF0cy5ucl9ldmVudHNbUEVSRl9SRUNPUkRfU0FNUExFXTsKLQotCWlmIChzZWxmLT5mb3JtKSB7Ci0JCW5ld3RGb3JtRGVzdHJveShzZWxmLT5mb3JtKTsKLQkJbmV3dFBvcFdpbmRvdygpOwotCX0KLQotCW5yX2V2ZW50cyA9IGNvbnZlcnRfdW5pdChucl9ldmVudHMsICZ1bml0KTsKLQlzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiRXZlbnRzOiAlbHUlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotCQkgbnJfZXZlbnRzLCB1bml0KTsKLQluZXd0RHJhd1Jvb3RUZXh0KDAsIDAsIHN0cik7Ci0KLQluZXd0R2V0U2NyZWVuU2l6ZShOVUxMLCAmcm93cyk7Ci0KLQlpZiAoc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbikKLQkJc2VsZi0+dHJlZSA9IG5ld3RDaGVja2JveFRyZWVNdWx0aSgwLCAwLCByb3dzIC0gNSwgc2VxLAotCQkJCQkJICAgTkVXVF9GTEFHX1NDUk9MTCk7Ci0JZWxzZQotCQlzZWxmLT50cmVlID0gbmV3dExpc3Rib3goMCwgMCwgcm93cyAtIDUsCi0JCQkJCShORVdUX0ZMQUdfU0NST0xMIHwKLQkJCQkJIE5FV1RfRkxBR19SRVRVUk5FWElUKSk7Ci0KLQluZXd0Q29tcG9uZW50QWRkQ2FsbGJhY2soc2VsZi0+dHJlZSwgaGlzdF9icm93c2VyX19zZWxlY3Rpb24sCi0JCQkJICZzZWxmLT5zZWxlY3Rpb24pOwotCi0JcHJvZ3Jlc3MgPSB1aV9wcm9ncmVzc19fbmV3KCJBZGRpbmcgZW50cmllcyB0byB0aGUgYnJvd3Nlci4uLiIsCi0JCQkJICAgIGhpc3RzLT5ucl9lbnRyaWVzKTsKLQlpZiAocHJvZ3Jlc3MgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCi0JaWR4ID0gMDsKLQlmb3IgKG5kID0gcmJfZmlyc3QoJmhpc3RzLT5lbnRyaWVzKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKLQkJc3RydWN0IGhpc3RfZW50cnkgKmggPSByYl9lbnRyeShuZCwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOwotCQlpbnQgbGVuOwotCi0JCWlmIChoLT5maWx0ZXJlZCkKLQkJCWNvbnRpbnVlOwotCi0JCWxlbiA9IGhpc3RfZW50cnlfX2FwcGVuZF9icm93c2VyKGgsIHNlbGYtPnRyZWUsIGhpc3RzLT5zdGF0cy50b3RhbF9wZXJpb2QpOwotCQlpZiAobGVuID4gbWF4X2xlbikKLQkJCW1heF9sZW4gPSBsZW47Ci0JCWlmIChzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluKQotCQkJaGlzdF9lbnRyeV9fYXBwZW5kX2NhbGxjaGFpbl9icm93c2VyKGgsIHNlbGYtPnRyZWUsCi0JCQkJCQkJICAgICBoaXN0cy0+c3RhdHMudG90YWxfcGVyaW9kLCBpZHgrKyk7Ci0JCSsrY3Vycl9oaXN0OwotCQlpZiAoY3Vycl9oaXN0ICUgNSkKLQkJCXVpX3Byb2dyZXNzX191cGRhdGUocHJvZ3Jlc3MsIGN1cnJfaGlzdCk7Ci0JfQotCi0JdWlfcHJvZ3Jlc3NfX2RlbGV0ZShwcm9ncmVzcyk7Ci0KLQluZXd0R2V0U2NyZWVuU2l6ZSgmY29scywgJnJvd3MpOwotCi0JaWYgKG1heF9sZW4gPiBjb2xzKQotCQltYXhfbGVuID0gY29scyAtIDM7Ci0KLQlpZiAoIXN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4pCi0JCW5ld3RMaXN0Ym94U2V0V2lkdGgoc2VsZi0+dHJlZSwgbWF4X2xlbik7Ci0KLQluZXd0Q2VudGVyZWRXaW5kb3cobWF4X2xlbiArIChzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluID8gNSA6IDApLAotCQkJICAgcm93cyAtIDUsIHRpdGxlKTsKLQlzZWxmLT5mb3JtID0gbmV3dF9mb3JtX19uZXcoKTsKLQlpZiAoc2VsZi0+Zm9ybSA9PSBOVUxMKQotCQlyZXR1cm4gLTE7Ci0KLQluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5mb3JtLCAnQScpOwotCW5ld3RGb3JtQWRkSG90S2V5KHNlbGYtPmZvcm0sICdhJyk7Ci0JbmV3dEZvcm1BZGRIb3RLZXkoc2VsZi0+Zm9ybSwgJ0QnKTsKLQluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5mb3JtLCAnZCcpOwotCW5ld3RGb3JtQWRkSG90S2V5KHNlbGYtPmZvcm0sICdUJyk7Ci0JbmV3dEZvcm1BZGRIb3RLZXkoc2VsZi0+Zm9ybSwgJ3QnKTsKLQluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5mb3JtLCAnPycpOwotCW5ld3RGb3JtQWRkSG90S2V5KHNlbGYtPmZvcm0sICdIJyk7Ci0JbmV3dEZvcm1BZGRIb3RLZXkoc2VsZi0+Zm9ybSwgJ2gnKTsKLQluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5mb3JtLCBORVdUX0tFWV9GMSk7Ci0JbmV3dEZvcm1BZGRIb3RLZXkoc2VsZi0+Zm9ybSwgTkVXVF9LRVlfUklHSFQpOwotCW5ld3RGb3JtQWRkSG90S2V5KHNlbGYtPmZvcm0sIE5FV1RfS0VZX1RBQik7Ci0JbmV3dEZvcm1BZGRIb3RLZXkoc2VsZi0+Zm9ybSwgTkVXVF9LRVlfVU5UQUIpOwotCW5ld3RGb3JtQWRkQ29tcG9uZW50cyhzZWxmLT5mb3JtLCBzZWxmLT50cmVlLCBOVUxMKTsKLQlzZWxmLT5zZWxlY3Rpb24gPSBuZXd0X19zeW1ib2xfdHJlZV9nZXRfY3VycmVudChzZWxmLT50cmVlKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IGhpc3RfZW50cnkgKmhpc3RfYnJvd3Nlcl9fc2VsZWN0ZWRfZW50cnkoc3RydWN0IGhpc3RfYnJvd3NlciAqc2VsZikKIHsKLQlpbnQgKmluZGV4ZXM7Ci0KLQlpZiAoIXN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4pCi0JCWdvdG8gb3V0OwotCi0JaW5kZXhlcyA9IG5ld3RDaGVja2JveFRyZWVGaW5kSXRlbShzZWxmLT50cmVlLCAodm9pZCAqKXNlbGYtPnNlbGVjdGlvbik7Ci0JaWYgKGluZGV4ZXMpIHsKLQkJYm9vbCBpc19oaXN0X2VudHJ5ID0gaW5kZXhlc1sxXSA9PSBORVdUX0FSR19MQVNUOwotCQlmcmVlKGluZGV4ZXMpOwotCQlpZiAoaXNfaGlzdF9lbnRyeSkKLQkJCWdvdG8gb3V0OwotCX0KLQlyZXR1cm4gTlVMTDsKLW91dDoKLQlyZXR1cm4gY29udGFpbmVyX29mKHNlbGYtPnNlbGVjdGlvbiwgc3RydWN0IGhpc3RfZW50cnksIG1zKTsKKwlyZXR1cm4gc2VsZi0+aGVfc2VsZWN0aW9uOwogfQogCiBzdGF0aWMgc3RydWN0IHRocmVhZCAqaGlzdF9icm93c2VyX19zZWxlY3RlZF90aHJlYWQoc3RydWN0IGhpc3RfYnJvd3NlciAqc2VsZikKIHsKLQlzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUgPSBoaXN0X2Jyb3dzZXJfX3NlbGVjdGVkX2VudHJ5KHNlbGYpOwotCXJldHVybiBoZSA/IGhlLT50aHJlYWQgOiBOVUxMOworCXJldHVybiBzZWxmLT5oZV9zZWxlY3Rpb24tPnRocmVhZDsKIH0KIAogc3RhdGljIGludCBoaXN0X2Jyb3dzZXJfX3RpdGxlKGNoYXIgKmJmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZXZfbmFtZSwKQEAgLTkwNSw3ICs2NTUsNyBAQAogCiBpbnQgaGlzdHNfX2Jyb3dzZShzdHJ1Y3QgaGlzdHMgKnNlbGYsIGNvbnN0IGNoYXIgKmhlbHBsaW5lLCBjb25zdCBjaGFyICpldl9uYW1lKQogewotCXN0cnVjdCBoaXN0X2Jyb3dzZXIgKmJyb3dzZXIgPSBoaXN0X2Jyb3dzZXJfX25ldygpOworCXN0cnVjdCBoaXN0X2Jyb3dzZXIgKmJyb3dzZXIgPSBoaXN0X2Jyb3dzZXJfX25ldyhzZWxmKTsKIAlzdHJ1Y3QgcHN0YWNrICpmc3RhY2s7CiAJY29uc3Qgc3RydWN0IHRocmVhZCAqdGhyZWFkX2ZpbHRlciA9IE5VTEw7CiAJY29uc3Qgc3RydWN0IGRzbyAqZHNvX2ZpbHRlciA9IE5VTEw7CkBAIC05MjQsOCArNjc0LDYgQEAKIAogCWhpc3RfYnJvd3Nlcl9fdGl0bGUobXNnLCBzaXplb2YobXNnKSwgZXZfbmFtZSwKIAkJCSAgICBkc29fZmlsdGVyLCB0aHJlYWRfZmlsdGVyKTsKLQlpZiAoaGlzdF9icm93c2VyX19wb3B1bGF0ZShicm93c2VyLCBzZWxmLCBtc2cpIDwgMCkKLQkJZ290byBvdXRfZnJlZV9zdGFjazsKIAogCXdoaWxlICgxKSB7CiAJCWNvbnN0IHN0cnVjdCB0aHJlYWQgKnRocmVhZDsKQEAgLTkzNCw3ICs2ODIsOCBAQAogCQlpbnQgbnJfb3B0aW9ucyA9IDAsIGNob2ljZSA9IDAsIGksCiAJCSAgICBhbm5vdGF0ZSA9IC0yLCB6b29tX2RzbyA9IC0yLCB6b29tX3RocmVhZCA9IC0yOwogCi0JCW5ld3RGb3JtUnVuKGJyb3dzZXItPmZvcm0sICZlcyk7CisJCWlmIChoaXN0X2Jyb3dzZXJfX3J1bihicm93c2VyLCBtc2csICZlcykpCisJCQlicmVhazsKIAogCQl0aHJlYWQgPSBoaXN0X2Jyb3dzZXJfX3NlbGVjdGVkX3RocmVhZChicm93c2VyKTsKIAkJZHNvID0gYnJvd3Nlci0+c2VsZWN0aW9uLT5tYXAgPyBicm93c2VyLT5zZWxlY3Rpb24tPm1hcC0+ZHNvIDogTlVMTDsKQEAgLTEwNjksOCArODE4LDcgQEAKIAkJCWhpc3RzX19maWx0ZXJfYnlfZHNvKHNlbGYsIGRzb19maWx0ZXIpOwogCQkJaGlzdF9icm93c2VyX190aXRsZShtc2csIHNpemVvZihtc2cpLCBldl9uYW1lLAogCQkJCQkgICAgZHNvX2ZpbHRlciwgdGhyZWFkX2ZpbHRlcik7Ci0JCQlpZiAoaGlzdF9icm93c2VyX19wb3B1bGF0ZShicm93c2VyLCBzZWxmLCBtc2cpIDwgMCkKLQkJCQlnb3RvIG91dDsKKwkJCWhpc3RfYnJvd3Nlcl9fcmVzZXQoYnJvd3Nlcik7CiAJCX0gZWxzZSBpZiAoY2hvaWNlID09IHpvb21fdGhyZWFkKSB7CiB6b29tX3RocmVhZDoKIAkJCWlmICh0aHJlYWRfZmlsdGVyKSB7CkBAIC0xMDg4LDggKzgzNiw3IEBACiAJCQloaXN0c19fZmlsdGVyX2J5X3RocmVhZChzZWxmLCB0aHJlYWRfZmlsdGVyKTsKIAkJCWhpc3RfYnJvd3Nlcl9fdGl0bGUobXNnLCBzaXplb2YobXNnKSwgZXZfbmFtZSwKIAkJCQkJICAgIGRzb19maWx0ZXIsIHRocmVhZF9maWx0ZXIpOwotCQkJaWYgKGhpc3RfYnJvd3Nlcl9fcG9wdWxhdGUoYnJvd3Nlciwgc2VsZiwgbXNnKSA8IDApCi0JCQkJZ290byBvdXQ7CisJCQloaXN0X2Jyb3dzZXJfX3Jlc2V0KGJyb3dzZXIpOwogCQl9CiAJfQogb3V0X2ZyZWVfc3RhY2s6CkBAIC0xMTQ1LDYgKzg5MiwxMyBAQAogCSJibHVlIiwJICAgICAibGlnaHRncmF5IiwKIH07CiAKK3N0YXRpYyB2b2lkIG5ld3Rfc3VzcGVuZCh2b2lkICpkIF9fdXNlZCkKK3sKKwluZXd0U3VzcGVuZCgpOworCXJhaXNlKFNJR1RTVFApOworCW5ld3RSZXN1bWUoKTsKK30KKwogdm9pZCBzZXR1cF9icm93c2VyKHZvaWQpCiB7CiAJc3RydWN0IG5ld3RQZXJjZW50VHJlZUNvbG9ycyAqYyA9ICZkZWZhdWx0UGVyY2VudFRyZWVDb2xvcnM7CkBAIC0xMTU4LDYgKzkxMiw3IEBACiAJdXNlX2Jyb3dzZXIgPSAxOwogCW5ld3RJbml0KCk7CiAJbmV3dENscygpOworCW5ld3RTZXRTdXNwZW5kQ2FsbGJhY2sobmV3dF9zdXNwZW5kLCBOVUxMKTsKIAl1aV9oZWxwbGluZV9fcHV0cygiICIpOwogCXNsdHRfc2V0X2NvbG9yKEhFX0NPTE9SU0VUX1RPUCwgTlVMTCwgYy0+dG9wQ29sb3JGZywgYy0+dG9wQ29sb3JCZyk7CiAJc2x0dF9zZXRfY29sb3IoSEVfQ09MT1JTRVRfTUVESVVNLCBOVUxMLCBjLT5tZWRpdW1Db2xvckZnLCBjLT5tZWRpdW1Db2xvckJnKTsKQEAgLTExNzYsMyArOTMxLDYzOCBAQAogCQluZXd0RmluaXNoZWQoKTsKIAl9CiB9CisKK3N0YXRpYyB2b2lkIGhpc3RfYnJvd3Nlcl9fcmVmcmVzaF9kaW1lbnNpb25zKHN0cnVjdCBoaXN0X2Jyb3dzZXIgKnNlbGYpCit7CisJLyogMyA9PSArLy0gdG9nZ2xlIHN5bWJvbCBiZWZvcmUgYWN0dWFsIGhpc3RfZW50cnkgcmVuZGVyaW5nICovCisJc2VsZi0+Yi53aWR0aCA9IDMgKyAoaGlzdHNfX3NvcnRfbGlzdF93aWR0aChzZWxmLT5oaXN0cykgKworCQkJICAgICBzaXplb2YoIltrXSIpKTsKK30KKworc3RhdGljIHZvaWQgaGlzdF9icm93c2VyX19yZXNldChzdHJ1Y3QgaGlzdF9icm93c2VyICpzZWxmKQoreworCXNlbGYtPmIubnJfZW50cmllcyA9IHNlbGYtPmhpc3RzLT5ucl9lbnRyaWVzOworCWhpc3RfYnJvd3Nlcl9fcmVmcmVzaF9kaW1lbnNpb25zKHNlbGYpOworCXVpX2Jyb3dzZXJfX3Jlc2V0X2luZGV4KCZzZWxmLT5iKTsKK30KKworc3RhdGljIGNoYXIgdHJlZV9fZm9sZGVkX3NpZ24oYm9vbCB1bmZvbGRlZCkKK3sKKwlyZXR1cm4gdW5mb2xkZWQgPyAnLScgOiAnKyc7Cit9CisKK3N0YXRpYyBjaGFyIG1hcF9zeW1ib2xfX2ZvbGRlZChjb25zdCBzdHJ1Y3QgbWFwX3N5bWJvbCAqc2VsZikKK3sKKwlyZXR1cm4gc2VsZi0+aGFzX2NoaWxkcmVuID8gdHJlZV9fZm9sZGVkX3NpZ24oc2VsZi0+dW5mb2xkZWQpIDogJyAnOworfQorCitzdGF0aWMgY2hhciBoaXN0X2VudHJ5X19mb2xkZWQoY29uc3Qgc3RydWN0IGhpc3RfZW50cnkgKnNlbGYpCit7CisJcmV0dXJuIG1hcF9zeW1ib2xfX2ZvbGRlZCgmc2VsZi0+bXMpOworfQorCitzdGF0aWMgY2hhciBjYWxsY2hhaW5fbGlzdF9fZm9sZGVkKGNvbnN0IHN0cnVjdCBjYWxsY2hhaW5fbGlzdCAqc2VsZikKK3sKKwlyZXR1cm4gbWFwX3N5bWJvbF9fZm9sZGVkKCZzZWxmLT5tcyk7Cit9CisKK3N0YXRpYyBib29sIG1hcF9zeW1ib2xfX3RvZ2dsZV9mb2xkKHN0cnVjdCBtYXBfc3ltYm9sICpzZWxmKQoreworCWlmICghc2VsZi0+aGFzX2NoaWxkcmVuKQorCQlyZXR1cm4gZmFsc2U7CisKKwlzZWxmLT51bmZvbGRlZCA9ICFzZWxmLT51bmZvbGRlZDsKKwlyZXR1cm4gdHJ1ZTsKK30KKworI2RlZmluZSBMRVZFTF9PRkZTRVRfU1RFUCAzCisKK3N0YXRpYyBpbnQgaGlzdF9icm93c2VyX19zaG93X2NhbGxjaGFpbl9ub2RlX3JiX3RyZWUoc3RydWN0IGhpc3RfYnJvd3NlciAqc2VsZiwKKwkJCQkJCSAgICAgc3RydWN0IGNhbGxjaGFpbl9ub2RlICpjaGFpbl9ub2RlLAorCQkJCQkJICAgICB1NjQgdG90YWwsIGludCBsZXZlbCwKKwkJCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgcm93LAorCQkJCQkJICAgICBvZmZfdCAqcm93X29mZnNldCwKKwkJCQkJCSAgICAgYm9vbCAqaXNfY3VycmVudF9lbnRyeSkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKwlpbnQgZmlyc3Rfcm93ID0gcm93LCB3aWR0aCwgb2Zmc2V0ID0gbGV2ZWwgKiBMRVZFTF9PRkZTRVRfU1RFUDsKKwl1NjQgbmV3X3RvdGFsLCByZW1haW5pbmc7CisKKwlpZiAoY2FsbGNoYWluX3BhcmFtLm1vZGUgPT0gQ0hBSU5fR1JBUEhfUkVMKQorCQluZXdfdG90YWwgPSBjaGFpbl9ub2RlLT5jaGlsZHJlbl9oaXQ7CisJZWxzZQorCQluZXdfdG90YWwgPSB0b3RhbDsKKworCXJlbWFpbmluZyA9IG5ld190b3RhbDsKKwlub2RlID0gcmJfZmlyc3QoJmNoYWluX25vZGUtPnJiX3Jvb3QpOworCXdoaWxlIChub2RlKSB7CisJCXN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqY2hpbGQgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgY2FsbGNoYWluX25vZGUsIHJiX25vZGUpOworCQlzdHJ1Y3QgcmJfbm9kZSAqbmV4dCA9IHJiX25leHQobm9kZSk7CisJCXU2NCBjdW11bCA9IGN1bXVsX2hpdHMoY2hpbGQpOworCQlzdHJ1Y3QgY2FsbGNoYWluX2xpc3QgKmNoYWluOworCQljaGFyIGZvbGRlZF9zaWduID0gJyAnOworCQlpbnQgZmlyc3QgPSB0cnVlOworCQlpbnQgZXh0cmFfb2Zmc2V0ID0gMDsKKworCQlyZW1haW5pbmcgLT0gY3VtdWw7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGFpbiwgJmNoaWxkLT52YWwsIGxpc3QpIHsKKwkJCWNoYXIgaXBzdHJbQklUU19QRVJfTE9ORyAvIDQgKyAxXSwgKmFsbG9jX3N0cjsKKwkJCWNvbnN0IGNoYXIgKnN0cjsKKwkJCWludCBjb2xvcjsKKwkJCWJvb2wgd2FzX2ZpcnN0ID0gZmlyc3Q7CisKKwkJCWlmIChmaXJzdCkgeworCQkJCWZpcnN0ID0gZmFsc2U7CisJCQkJY2hhaW4tPm1zLmhhc19jaGlsZHJlbiA9IGNoYWluLT5saXN0Lm5leHQgIT0gJmNoaWxkLT52YWwgfHwKKwkJCQkJCQkgcmJfZmlyc3QoJmNoaWxkLT5yYl9yb290KSAhPSBOVUxMOworCQkJfSBlbHNlIHsKKwkJCQlleHRyYV9vZmZzZXQgPSBMRVZFTF9PRkZTRVRfU1RFUDsKKwkJCQljaGFpbi0+bXMuaGFzX2NoaWxkcmVuID0gY2hhaW4tPmxpc3QubmV4dCA9PSAmY2hpbGQtPnZhbCAmJgorCQkJCQkJCSByYl9maXJzdCgmY2hpbGQtPnJiX3Jvb3QpICE9IE5VTEw7CisJCQl9CisKKwkJCWZvbGRlZF9zaWduID0gY2FsbGNoYWluX2xpc3RfX2ZvbGRlZChjaGFpbik7CisJCQlpZiAoKnJvd19vZmZzZXQgIT0gMCkgeworCQkJCS0tKnJvd19vZmZzZXQ7CisJCQkJZ290byBkb19uZXh0OworCQkJfQorCisJCQlhbGxvY19zdHIgPSBOVUxMOworCQkJc3RyID0gY2FsbGNoYWluX2xpc3RfX3N5bV9uYW1lKGNoYWluLCBpcHN0ciwgc2l6ZW9mKGlwc3RyKSk7CisJCQlpZiAod2FzX2ZpcnN0KSB7CisJCQkJZG91YmxlIHBlcmNlbnQgPSBjdW11bCAqIDEwMC4wIC8gbmV3X3RvdGFsOworCisJCQkJaWYgKGFzcHJpbnRmKCZhbGxvY19zdHIsICIlMi4yZiUlICVzIiwgcGVyY2VudCwgc3RyKSA8IDApCisJCQkJCXN0ciA9ICJOb3QgZW5vdWdoIG1lbW9yeSEiOworCQkJCWVsc2UKKwkJCQkJc3RyID0gYWxsb2Nfc3RyOworCQkJfQorCisJCQljb2xvciA9IEhFX0NPTE9SU0VUX05PUk1BTDsKKwkJCXdpZHRoID0gc2VsZi0+Yi53aWR0aCAtIChvZmZzZXQgKyBleHRyYV9vZmZzZXQgKyAyKTsKKwkJCWlmICh1aV9icm93c2VyX19pc19jdXJyZW50X2VudHJ5KCZzZWxmLT5iLCByb3cpKSB7CisJCQkJc2VsZi0+c2VsZWN0aW9uID0gJmNoYWluLT5tczsKKwkJCQljb2xvciA9IEhFX0NPTE9SU0VUX1NFTEVDVEVEOworCQkJCSppc19jdXJyZW50X2VudHJ5ID0gdHJ1ZTsKKwkJCX0KKworCQkJU0xzbWdfc2V0X2NvbG9yKGNvbG9yKTsKKwkJCVNMc21nX2dvdG9yYyhzZWxmLT5iLnRvcCArIHJvdywgc2VsZi0+Yi5sZWZ0KTsKKwkJCXNsc21nX3dyaXRlX25zdHJpbmcoIiAiLCBvZmZzZXQgKyBleHRyYV9vZmZzZXQpOworCQkJc2xzbWdfcHJpbnRmKCIlYyAiLCBmb2xkZWRfc2lnbik7CisJCQlzbHNtZ193cml0ZV9uc3RyaW5nKHN0ciwgd2lkdGgpOworCQkJZnJlZShhbGxvY19zdHIpOworCisJCQlpZiAoKytyb3cgPT0gc2VsZi0+Yi5oZWlnaHQpCisJCQkJZ290byBvdXQ7Citkb19uZXh0OgorCQkJaWYgKGZvbGRlZF9zaWduID09ICcrJykKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChmb2xkZWRfc2lnbiA9PSAnLScpIHsKKwkJCWNvbnN0IGludCBuZXdfbGV2ZWwgPSBsZXZlbCArIChleHRyYV9vZmZzZXQgPyAyIDogMSk7CisJCQlyb3cgKz0gaGlzdF9icm93c2VyX19zaG93X2NhbGxjaGFpbl9ub2RlX3JiX3RyZWUoc2VsZiwgY2hpbGQsIG5ld190b3RhbCwKKwkJCQkJCQkJCSBuZXdfbGV2ZWwsIHJvdywgcm93X29mZnNldCwKKwkJCQkJCQkJCSBpc19jdXJyZW50X2VudHJ5KTsKKwkJfQorCQlpZiAocm93ID09IHNlbGYtPmIuaGVpZ2h0KQorCQkJZ290byBvdXQ7CisJCW5vZGUgPSBuZXh0OworCX0KK291dDoKKwlyZXR1cm4gcm93IC0gZmlyc3Rfcm93OworfQorCitzdGF0aWMgaW50IGhpc3RfYnJvd3Nlcl9fc2hvd19jYWxsY2hhaW5fbm9kZShzdHJ1Y3QgaGlzdF9icm93c2VyICpzZWxmLAorCQkJCQkgICAgIHN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqbm9kZSwKKwkJCQkJICAgICBpbnQgbGV2ZWwsIHVuc2lnbmVkIHNob3J0IHJvdywKKwkJCQkJICAgICBvZmZfdCAqcm93X29mZnNldCwKKwkJCQkJICAgICBib29sICppc19jdXJyZW50X2VudHJ5KQoreworCXN0cnVjdCBjYWxsY2hhaW5fbGlzdCAqY2hhaW47CisJaW50IGZpcnN0X3JvdyA9IHJvdywKKwkgICAgIG9mZnNldCA9IGxldmVsICogTEVWRUxfT0ZGU0VUX1NURVAsCisJICAgICB3aWR0aCA9IHNlbGYtPmIud2lkdGggLSBvZmZzZXQ7CisJY2hhciBmb2xkZWRfc2lnbiA9ICcgJzsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhaW4sICZub2RlLT52YWwsIGxpc3QpIHsKKwkJY2hhciBpcHN0cltCSVRTX1BFUl9MT05HIC8gNCArIDFdLCAqczsKKwkJaW50IGNvbG9yOworCQkvKgorCQkgKiBGSVhNRTogVGhpcyBzaG91bGQgYmUgbW92ZWQgdG8gc29tZXdoZXJlIGVsc2UsCisJCSAqIHByb2JhYmx5IHdoZW4gdGhlIGNhbGxjaGFpbiBpcyBjcmVhdGVkLCBzbyBhcyBub3QgdG8KKwkJICogdHJhdmVyc2UgaXQgYWxsIG92ZXIgYWdhaW4KKwkJICovCisJCWNoYWluLT5tcy5oYXNfY2hpbGRyZW4gPSByYl9maXJzdCgmbm9kZS0+cmJfcm9vdCkgIT0gTlVMTDsKKwkJZm9sZGVkX3NpZ24gPSBjYWxsY2hhaW5fbGlzdF9fZm9sZGVkKGNoYWluKTsKKworCQlpZiAoKnJvd19vZmZzZXQgIT0gMCkgeworCQkJLS0qcm93X29mZnNldDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY29sb3IgPSBIRV9DT0xPUlNFVF9OT1JNQUw7CisJCWlmICh1aV9icm93c2VyX19pc19jdXJyZW50X2VudHJ5KCZzZWxmLT5iLCByb3cpKSB7CisJCQlzZWxmLT5zZWxlY3Rpb24gPSAmY2hhaW4tPm1zOworCQkJY29sb3IgPSBIRV9DT0xPUlNFVF9TRUxFQ1RFRDsKKwkJCSppc19jdXJyZW50X2VudHJ5ID0gdHJ1ZTsKKwkJfQorCisJCXMgPSBjYWxsY2hhaW5fbGlzdF9fc3ltX25hbWUoY2hhaW4sIGlwc3RyLCBzaXplb2YoaXBzdHIpKTsKKwkJU0xzbWdfZ290b3JjKHNlbGYtPmIudG9wICsgcm93LCBzZWxmLT5iLmxlZnQpOworCQlTTHNtZ19zZXRfY29sb3IoY29sb3IpOworCQlzbHNtZ193cml0ZV9uc3RyaW5nKCIgIiwgb2Zmc2V0KTsKKwkJc2xzbWdfcHJpbnRmKCIlYyAiLCBmb2xkZWRfc2lnbik7CisJCXNsc21nX3dyaXRlX25zdHJpbmcocywgd2lkdGggLSAyKTsKKworCQlpZiAoKytyb3cgPT0gc2VsZi0+Yi5oZWlnaHQpCisJCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZm9sZGVkX3NpZ24gPT0gJy0nKQorCQlyb3cgKz0gaGlzdF9icm93c2VyX19zaG93X2NhbGxjaGFpbl9ub2RlX3JiX3RyZWUoc2VsZiwgbm9kZSwKKwkJCQkJCQkJIHNlbGYtPmhpc3RzLT5zdGF0cy50b3RhbF9wZXJpb2QsCisJCQkJCQkJCSBsZXZlbCArIDEsIHJvdywKKwkJCQkJCQkJIHJvd19vZmZzZXQsCisJCQkJCQkJCSBpc19jdXJyZW50X2VudHJ5KTsKK291dDoKKwlyZXR1cm4gcm93IC0gZmlyc3Rfcm93OworfQorCitzdGF0aWMgaW50IGhpc3RfYnJvd3Nlcl9fc2hvd19jYWxsY2hhaW4oc3RydWN0IGhpc3RfYnJvd3NlciAqc2VsZiwKKwkJCQkJc3RydWN0IHJiX3Jvb3QgKmNoYWluLAorCQkJCQlpbnQgbGV2ZWwsIHVuc2lnbmVkIHNob3J0IHJvdywKKwkJCQkJb2ZmX3QgKnJvd19vZmZzZXQsCisJCQkJCWJvb2wgKmlzX2N1cnJlbnRfZW50cnkpCit7CisJc3RydWN0IHJiX25vZGUgKm5kOworCWludCBmaXJzdF9yb3cgPSByb3c7CisKKwlmb3IgKG5kID0gcmJfZmlyc3QoY2hhaW4pOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgeworCQlzdHJ1Y3QgY2FsbGNoYWluX25vZGUgKm5vZGUgPSByYl9lbnRyeShuZCwgc3RydWN0IGNhbGxjaGFpbl9ub2RlLCByYl9ub2RlKTsKKworCQlyb3cgKz0gaGlzdF9icm93c2VyX19zaG93X2NhbGxjaGFpbl9ub2RlKHNlbGYsIG5vZGUsIGxldmVsLAorCQkJCQkJCSByb3csIHJvd19vZmZzZXQsCisJCQkJCQkJIGlzX2N1cnJlbnRfZW50cnkpOworCQlpZiAocm93ID09IHNlbGYtPmIuaGVpZ2h0KQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJvdyAtIGZpcnN0X3JvdzsKK30KKworc3RhdGljIGludCBoaXN0X2Jyb3dzZXJfX3Nob3dfZW50cnkoc3RydWN0IGhpc3RfYnJvd3NlciAqc2VsZiwKKwkJCQkgICAgc3RydWN0IGhpc3RfZW50cnkgKmVudHJ5LAorCQkJCSAgICB1bnNpZ25lZCBzaG9ydCByb3cpCit7CisJY2hhciBzWzI1Nl07CisJZG91YmxlIHBlcmNlbnQ7CisJaW50IHByaW50ZWQgPSAwOworCWludCBjb2xvciwgd2lkdGggPSBzZWxmLT5iLndpZHRoOworCWNoYXIgZm9sZGVkX3NpZ24gPSAnICc7CisJYm9vbCBjdXJyZW50X2VudHJ5ID0gdWlfYnJvd3Nlcl9faXNfY3VycmVudF9lbnRyeSgmc2VsZi0+Yiwgcm93KTsKKwlvZmZfdCByb3dfb2Zmc2V0ID0gZW50cnktPnJvd19vZmZzZXQ7CisKKwlpZiAoY3VycmVudF9lbnRyeSkgeworCQlzZWxmLT5oZV9zZWxlY3Rpb24gPSBlbnRyeTsKKwkJc2VsZi0+c2VsZWN0aW9uID0gJmVudHJ5LT5tczsKKwl9CisKKwlpZiAoc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbikgeworCQllbnRyeS0+bXMuaGFzX2NoaWxkcmVuID0gIVJCX0VNUFRZX1JPT1QoJmVudHJ5LT5zb3J0ZWRfY2hhaW4pOworCQlmb2xkZWRfc2lnbiA9IGhpc3RfZW50cnlfX2ZvbGRlZChlbnRyeSk7CisJfQorCisJaWYgKHJvd19vZmZzZXQgPT0gMCkgeworCQloaXN0X2VudHJ5X19zbnByaW50ZihlbnRyeSwgcywgc2l6ZW9mKHMpLCBzZWxmLT5oaXN0cywgTlVMTCwgZmFsc2UsCisJCQkJICAgICAwLCBmYWxzZSwgc2VsZi0+aGlzdHMtPnN0YXRzLnRvdGFsX3BlcmlvZCk7CisJCXBlcmNlbnQgPSAoZW50cnktPnBlcmlvZCAqIDEwMC4wKSAvIHNlbGYtPmhpc3RzLT5zdGF0cy50b3RhbF9wZXJpb2Q7CisKKwkJY29sb3IgPSBIRV9DT0xPUlNFVF9TRUxFQ1RFRDsKKwkJaWYgKCFjdXJyZW50X2VudHJ5KSB7CisJCQlpZiAocGVyY2VudCA+PSBNSU5fUkVEKQorCQkJCWNvbG9yID0gSEVfQ09MT1JTRVRfVE9QOworCQkJZWxzZSBpZiAocGVyY2VudCA+PSBNSU5fR1JFRU4pCisJCQkJY29sb3IgPSBIRV9DT0xPUlNFVF9NRURJVU07CisJCQllbHNlCisJCQkJY29sb3IgPSBIRV9DT0xPUlNFVF9OT1JNQUw7CisJCX0KKworCQlTTHNtZ19zZXRfY29sb3IoY29sb3IpOworCQlTTHNtZ19nb3RvcmMoc2VsZi0+Yi50b3AgKyByb3csIHNlbGYtPmIubGVmdCk7CisJCWlmIChzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluKSB7CisJCQlzbHNtZ19wcmludGYoIiVjICIsIGZvbGRlZF9zaWduKTsKKwkJCXdpZHRoIC09IDI7CisJCX0KKwkJc2xzbWdfd3JpdGVfbnN0cmluZyhzLCB3aWR0aCk7CisJCSsrcm93OworCQkrK3ByaW50ZWQ7CisJfSBlbHNlCisJCS0tcm93X29mZnNldDsKKworCWlmIChmb2xkZWRfc2lnbiA9PSAnLScgJiYgcm93ICE9IHNlbGYtPmIuaGVpZ2h0KSB7CisJCXByaW50ZWQgKz0gaGlzdF9icm93c2VyX19zaG93X2NhbGxjaGFpbihzZWxmLCAmZW50cnktPnNvcnRlZF9jaGFpbiwKKwkJCQkJCQkxLCByb3csICZyb3dfb2Zmc2V0LAorCQkJCQkJCSZjdXJyZW50X2VudHJ5KTsKKwkJaWYgKGN1cnJlbnRfZW50cnkpCisJCQlzZWxmLT5oZV9zZWxlY3Rpb24gPSBlbnRyeTsKKwl9CisKKwlyZXR1cm4gcHJpbnRlZDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBoaXN0X2Jyb3dzZXJfX3JlZnJlc2hfZW50cmllcyhzdHJ1Y3QgdWlfYnJvd3NlciAqc2VsZikKK3sKKwl1bnNpZ25lZCByb3cgPSAwOworCXN0cnVjdCByYl9ub2RlICpuZDsKKwlzdHJ1Y3QgaGlzdF9icm93c2VyICpoYiA9IGNvbnRhaW5lcl9vZihzZWxmLCBzdHJ1Y3QgaGlzdF9icm93c2VyLCBiKTsKKworCWlmIChzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5ID09IE5VTEwpCisJCXNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnkgPSByYl9maXJzdCgmaGItPmhpc3RzLT5lbnRyaWVzKTsKKworCWZvciAobmQgPSBzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5OyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgeworCQlzdHJ1Y3QgaGlzdF9lbnRyeSAqaCA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CisKKwkJaWYgKGgtPmZpbHRlcmVkKQorCQkJY29udGludWU7CisKKwkJcm93ICs9IGhpc3RfYnJvd3Nlcl9fc2hvd19lbnRyeShoYiwgaCwgcm93KTsKKwkJaWYgKHJvdyA9PSBzZWxmLT5oZWlnaHQpCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcm93OworfQorCitzdGF0aWMgdm9pZCBjYWxsY2hhaW5fbm9kZV9faW5pdF9oYXZlX2NoaWxkcmVuX3JiX3RyZWUoc3RydWN0IGNhbGxjaGFpbl9ub2RlICpzZWxmKQoreworCXN0cnVjdCByYl9ub2RlICpuZCA9IHJiX2ZpcnN0KCZzZWxmLT5yYl9yb290KTsKKworCWZvciAobmQgPSByYl9maXJzdCgmc2VsZi0+cmJfcm9vdCk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7CisJCXN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqY2hpbGQgPSByYl9lbnRyeShuZCwgc3RydWN0IGNhbGxjaGFpbl9ub2RlLCByYl9ub2RlKTsKKwkJc3RydWN0IGNhbGxjaGFpbl9saXN0ICpjaGFpbjsKKwkJaW50IGZpcnN0ID0gdHJ1ZTsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYWluLCAmY2hpbGQtPnZhbCwgbGlzdCkgeworCQkJaWYgKGZpcnN0KSB7CisJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCQljaGFpbi0+bXMuaGFzX2NoaWxkcmVuID0gY2hhaW4tPmxpc3QubmV4dCAhPSAmY2hpbGQtPnZhbCB8fAorCQkJCQkJCSByYl9maXJzdCgmY2hpbGQtPnJiX3Jvb3QpICE9IE5VTEw7CisJCQl9IGVsc2UKKwkJCQljaGFpbi0+bXMuaGFzX2NoaWxkcmVuID0gY2hhaW4tPmxpc3QubmV4dCA9PSAmY2hpbGQtPnZhbCAmJgorCQkJCQkJCSByYl9maXJzdCgmY2hpbGQtPnJiX3Jvb3QpICE9IE5VTEw7CisJCX0KKworCQljYWxsY2hhaW5fbm9kZV9faW5pdF9oYXZlX2NoaWxkcmVuX3JiX3RyZWUoY2hpbGQpOworCX0KK30KKworc3RhdGljIHZvaWQgY2FsbGNoYWluX25vZGVfX2luaXRfaGF2ZV9jaGlsZHJlbihzdHJ1Y3QgY2FsbGNoYWluX25vZGUgKnNlbGYpCit7CisJc3RydWN0IGNhbGxjaGFpbl9saXN0ICpjaGFpbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhaW4sICZzZWxmLT52YWwsIGxpc3QpCisJCWNoYWluLT5tcy5oYXNfY2hpbGRyZW4gPSByYl9maXJzdCgmc2VsZi0+cmJfcm9vdCkgIT0gTlVMTDsKKworCWNhbGxjaGFpbl9ub2RlX19pbml0X2hhdmVfY2hpbGRyZW5fcmJfdHJlZShzZWxmKTsKK30KKworc3RhdGljIHZvaWQgY2FsbGNoYWluX19pbml0X2hhdmVfY2hpbGRyZW4oc3RydWN0IHJiX3Jvb3QgKnNlbGYpCit7CisJc3RydWN0IHJiX25vZGUgKm5kOworCisJZm9yIChuZCA9IHJiX2ZpcnN0KHNlbGYpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgeworCQlzdHJ1Y3QgY2FsbGNoYWluX25vZGUgKm5vZGUgPSByYl9lbnRyeShuZCwgc3RydWN0IGNhbGxjaGFpbl9ub2RlLCByYl9ub2RlKTsKKwkJY2FsbGNoYWluX25vZGVfX2luaXRfaGF2ZV9jaGlsZHJlbihub2RlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhpc3RfZW50cnlfX2luaXRfaGF2ZV9jaGlsZHJlbihzdHJ1Y3QgaGlzdF9lbnRyeSAqc2VsZikKK3sKKwlpZiAoIXNlbGYtPmluaXRfaGF2ZV9jaGlsZHJlbikgeworCQljYWxsY2hhaW5fX2luaXRfaGF2ZV9jaGlsZHJlbigmc2VsZi0+c29ydGVkX2NoYWluKTsKKwkJc2VsZi0+aW5pdF9oYXZlX2NoaWxkcmVuID0gdHJ1ZTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmJfbm9kZSAqaGlzdHNfX2ZpbHRlcl9lbnRyaWVzKHN0cnVjdCByYl9ub2RlICpuZCkKK3sKKwl3aGlsZSAobmQgIT0gTlVMTCkgeworCQlzdHJ1Y3QgaGlzdF9lbnRyeSAqaCA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CisJCWlmICghaC0+ZmlsdGVyZWQpCisJCQlyZXR1cm4gbmQ7CisKKwkJbmQgPSByYl9uZXh0KG5kKTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCByYl9ub2RlICpoaXN0c19fZmlsdGVyX3ByZXZfZW50cmllcyhzdHJ1Y3QgcmJfbm9kZSAqbmQpCit7CisJd2hpbGUgKG5kICE9IE5VTEwpIHsKKwkJc3RydWN0IGhpc3RfZW50cnkgKmggPSByYl9lbnRyeShuZCwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOworCQlpZiAoIWgtPmZpbHRlcmVkKQorCQkJcmV0dXJuIG5kOworCisJCW5kID0gcmJfcHJldihuZCk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHVpX2Jyb3dzZXJfX2hpc3RzX3NlZWsoc3RydWN0IHVpX2Jyb3dzZXIgKnNlbGYsCisJCQkJICAgb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKQoreworCXN0cnVjdCBoaXN0X2VudHJ5ICpoOworCXN0cnVjdCByYl9ub2RlICpuZDsKKwlib29sIGZpcnN0ID0gdHJ1ZTsKKworCXN3aXRjaCAod2hlbmNlKSB7CisJY2FzZSBTRUVLX1NFVDoKKwkJbmQgPSBoaXN0c19fZmlsdGVyX2VudHJpZXMocmJfZmlyc3Qoc2VsZi0+ZW50cmllcykpOworCQlicmVhazsKKwljYXNlIFNFRUtfQ1VSOgorCQluZCA9IHNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnk7CisJCWdvdG8gZG9fb2Zmc2V0OworCWNhc2UgU0VFS19FTkQ6CisJCW5kID0gaGlzdHNfX2ZpbHRlcl9wcmV2X2VudHJpZXMocmJfbGFzdChzZWxmLT5lbnRyaWVzKSk7CisJCWZpcnN0ID0gZmFsc2U7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIE1vdmVzIG5vdCByZWxhdGl2ZSB0byB0aGUgZmlyc3QgdmlzaWJsZSBlbnRyeSBpbnZhbGlkYXRlcyBpdHMKKwkgKiByb3dfb2Zmc2V0OgorCSAqLworCWggPSByYl9lbnRyeShzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5LCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CisJaC0+cm93X29mZnNldCA9IDA7CisKKwkvKgorCSAqIEhlcmUgd2UgaGF2ZSB0byBjaGVjayBpZiBuZCBpcyBleHBhbmRlZCAoKyksIGlmIGl0IGlzIHdlIGNhbid0IGdvCisJICogdGhlIG5leHQgdG9wIGxldmVsIGhpc3RfZW50cnksIGluc3RlYWQgd2UgbXVzdCBjb21wdXRlIGFuIG9mZnNldCBvZgorCSAqIHdoYXQgX25vdF8gdG8gc2hvdyBhbmQgbm90IGNoYW5nZSB0aGUgZmlyc3QgdmlzaWJsZSBlbnRyeS4KKwkgKgorCSAqIFRoaXMgb2Zmc2V0IGluY3JlbWVudHMgd2hlbiB3ZSBhcmUgZ29pbmcgZnJvbSB0b3AgdG8gYm90dG9tIGFuZAorCSAqIGRlY3JlYXNlcyB3aGVuIHdlJ3JlIGdvaW5nIGZyb20gYm90dG9tIHRvIHRvcC4KKwkgKgorCSAqIEFzIHdlIGRvbid0IGhhdmUgYmFja3BvaW50ZXJzIHRvIHRoZSB0b3AgbGV2ZWwgaW4gdGhlIGNhbGxjaGFpbnMKKwkgKiBzdHJ1Y3R1cmUsIHdlIG5lZWQgdG8gYWx3YXlzIHByaW50IHRoZSB3aG9sZSBoaXN0X2VudHJ5IGNhbGxjaGFpbiwKKwkgKiBza2lwcGluZyB0aGUgZmlyc3Qgb25lcyB0aGF0IGFyZSBiZWZvcmUgdGhlIGZpcnN0IHZpc2libGUgZW50cnkKKwkgKiBhbmQgc3RvcCB3aGVuIHdlIHByaW50ZWQgZW5vdWdoIGxpbmVzIHRvIGZpbGwgdGhlIHNjcmVlbi4KKwkgKi8KK2RvX29mZnNldDoKKwlpZiAob2Zmc2V0ID4gMCkgeworCQlkbyB7CisJCQloID0gcmJfZW50cnkobmQsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKKwkJCWlmIChoLT5tcy51bmZvbGRlZCkgeworCQkJCXUxNiByZW1haW5pbmcgPSBoLT5ucl9yb3dzIC0gaC0+cm93X29mZnNldDsKKwkJCQlpZiAob2Zmc2V0ID4gcmVtYWluaW5nKSB7CisJCQkJCW9mZnNldCAtPSByZW1haW5pbmc7CisJCQkJCWgtPnJvd19vZmZzZXQgPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCWgtPnJvd19vZmZzZXQgKz0gb2Zmc2V0OworCQkJCQlvZmZzZXQgPSAwOworCQkJCQlzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5ID0gbmQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCW5kID0gaGlzdHNfX2ZpbHRlcl9lbnRyaWVzKHJiX25leHQobmQpKTsKKwkJCWlmIChuZCA9PSBOVUxMKQorCQkJCWJyZWFrOworCQkJLS1vZmZzZXQ7CisJCQlzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5ID0gbmQ7CisJCX0gd2hpbGUgKG9mZnNldCAhPSAwKTsKKwl9IGVsc2UgaWYgKG9mZnNldCA8IDApIHsKKwkJd2hpbGUgKDEpIHsKKwkJCWggPSByYl9lbnRyeShuZCwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOworCQkJaWYgKGgtPm1zLnVuZm9sZGVkKSB7CisJCQkJaWYgKGZpcnN0KSB7CisJCQkJCWlmICgtb2Zmc2V0ID4gaC0+cm93X29mZnNldCkgeworCQkJCQkJb2Zmc2V0ICs9IGgtPnJvd19vZmZzZXQ7CisJCQkJCQloLT5yb3dfb2Zmc2V0ID0gMDsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWgtPnJvd19vZmZzZXQgKz0gb2Zmc2V0OworCQkJCQkJb2Zmc2V0ID0gMDsKKwkJCQkJCXNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnkgPSBuZDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKC1vZmZzZXQgPiBoLT5ucl9yb3dzKSB7CisJCQkJCQlvZmZzZXQgKz0gaC0+bnJfcm93czsKKwkJCQkJCWgtPnJvd19vZmZzZXQgPSAwOworCQkJCQl9IGVsc2UgeworCQkJCQkJaC0+cm93X29mZnNldCA9IGgtPm5yX3Jvd3MgKyBvZmZzZXQ7CisJCQkJCQlvZmZzZXQgPSAwOworCQkJCQkJc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeSA9IG5kOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCW5kID0gaGlzdHNfX2ZpbHRlcl9wcmV2X2VudHJpZXMocmJfcHJldihuZCkpOworCQkJaWYgKG5kID09IE5VTEwpCisJCQkJYnJlYWs7CisJCQkrK29mZnNldDsKKwkJCXNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnkgPSBuZDsKKwkJCWlmIChvZmZzZXQgPT0gMCkgeworCQkJCS8qCisJCQkJICogTGFzdCB1bmZpbHRlcmVkIGhpc3RfZW50cnksIGNoZWNrIGlmIGl0IGlzCisJCQkJICogdW5mb2xkZWQsIGlmIGl0IGlzIHRoZW4gd2Ugc2hvdWxkIGhhdmUKKwkJCQkgKiByb3dfb2Zmc2V0IGF0IGl0cyBsYXN0IGVudHJ5LgorCQkJCSAqLworCQkJCWggPSByYl9lbnRyeShuZCwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOworCQkJCWlmIChoLT5tcy51bmZvbGRlZCkKKwkJCQkJaC0+cm93X29mZnNldCA9IGgtPm5yX3Jvd3M7CisJCQkJYnJlYWs7CisJCQl9CisJCQlmaXJzdCA9IGZhbHNlOworCQl9CisJfSBlbHNlIHsKKwkJc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeSA9IG5kOworCQloID0gcmJfZW50cnkobmQsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKKwkJaC0+cm93X29mZnNldCA9IDA7CisJfQorfQorCitzdGF0aWMgaW50IGNhbGxjaGFpbl9ub2RlX19jb3VudF9yb3dzX3JiX3RyZWUoc3RydWN0IGNhbGxjaGFpbl9ub2RlICpzZWxmKQoreworCWludCBuID0gMDsKKwlzdHJ1Y3QgcmJfbm9kZSAqbmQ7CisKKwlmb3IgKG5kID0gcmJfZmlyc3QoJnNlbGYtPnJiX3Jvb3QpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgeworCQlzdHJ1Y3QgY2FsbGNoYWluX25vZGUgKmNoaWxkID0gcmJfZW50cnkobmQsIHN0cnVjdCBjYWxsY2hhaW5fbm9kZSwgcmJfbm9kZSk7CisJCXN0cnVjdCBjYWxsY2hhaW5fbGlzdCAqY2hhaW47CisJCWNoYXIgZm9sZGVkX3NpZ24gPSAnICc7IC8qIE5vIGNoaWxkcmVuICovCisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGFpbiwgJmNoaWxkLT52YWwsIGxpc3QpIHsKKwkJCSsrbjsKKwkJCS8qIFdlIG5lZWQgdGhpcyBiZWNhdXNlIHdlIG1heSBub3QgaGF2ZSBjaGlsZHJlbiAqLworCQkJZm9sZGVkX3NpZ24gPSBjYWxsY2hhaW5fbGlzdF9fZm9sZGVkKGNoYWluKTsKKwkJCWlmIChmb2xkZWRfc2lnbiA9PSAnKycpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZm9sZGVkX3NpZ24gPT0gJy0nKSAvKiBIYXZlIGNoaWxkcmVuIGFuZCB0aGV5J3JlIHVuZm9sZGVkICovCisJCQluICs9IGNhbGxjaGFpbl9ub2RlX19jb3VudF9yb3dzX3JiX3RyZWUoY2hpbGQpOworCX0KKworCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IGNhbGxjaGFpbl9ub2RlX19jb3VudF9yb3dzKHN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqbm9kZSkKK3sKKwlzdHJ1Y3QgY2FsbGNoYWluX2xpc3QgKmNoYWluOworCWJvb2wgdW5mb2xkZWQgPSBmYWxzZTsKKwlpbnQgbiA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYWluLCAmbm9kZS0+dmFsLCBsaXN0KSB7CisJCSsrbjsKKwkJdW5mb2xkZWQgPSBjaGFpbi0+bXMudW5mb2xkZWQ7CisJfQorCisJaWYgKHVuZm9sZGVkKQorCQluICs9IGNhbGxjaGFpbl9ub2RlX19jb3VudF9yb3dzX3JiX3RyZWUobm9kZSk7CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBjYWxsY2hhaW5fX2NvdW50X3Jvd3Moc3RydWN0IHJiX3Jvb3QgKmNoYWluKQoreworCXN0cnVjdCByYl9ub2RlICpuZDsKKwlpbnQgbiA9IDA7CisKKwlmb3IgKG5kID0gcmJfZmlyc3QoY2hhaW4pOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgeworCQlzdHJ1Y3QgY2FsbGNoYWluX25vZGUgKm5vZGUgPSByYl9lbnRyeShuZCwgc3RydWN0IGNhbGxjaGFpbl9ub2RlLCByYl9ub2RlKTsKKwkJbiArPSBjYWxsY2hhaW5fbm9kZV9fY291bnRfcm93cyhub2RlKTsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGJvb2wgaGlzdF9icm93c2VyX190b2dnbGVfZm9sZChzdHJ1Y3QgaGlzdF9icm93c2VyICpzZWxmKQoreworCWlmIChtYXBfc3ltYm9sX190b2dnbGVfZm9sZChzZWxmLT5zZWxlY3Rpb24pKSB7CisJCXN0cnVjdCBoaXN0X2VudHJ5ICpoZSA9IHNlbGYtPmhlX3NlbGVjdGlvbjsKKworCQloaXN0X2VudHJ5X19pbml0X2hhdmVfY2hpbGRyZW4oaGUpOworCQlzZWxmLT5oaXN0cy0+bnJfZW50cmllcyAtPSBoZS0+bnJfcm93czsKKworCQlpZiAoaGUtPm1zLnVuZm9sZGVkKQorCQkJaGUtPm5yX3Jvd3MgPSBjYWxsY2hhaW5fX2NvdW50X3Jvd3MoJmhlLT5zb3J0ZWRfY2hhaW4pOworCQllbHNlCisJCQloZS0+bnJfcm93cyA9IDA7CisJCXNlbGYtPmhpc3RzLT5ucl9lbnRyaWVzICs9IGhlLT5ucl9yb3dzOworCQlzZWxmLT5iLm5yX2VudHJpZXMgPSBzZWxmLT5oaXN0cy0+bnJfZW50cmllczsKKworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKiBJZiBpdCBkb2Vzbid0IGhhdmUgY2hpbGRyZW4sIG5vIHRvZ2dsaW5nIHBlcmZvcm1lZCAqLworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGludCBoaXN0X2Jyb3dzZXJfX3J1bihzdHJ1Y3QgaGlzdF9icm93c2VyICpzZWxmLCBjb25zdCBjaGFyICp0aXRsZSwKKwkJCSAgICAgc3RydWN0IG5ld3RFeGl0U3RydWN0ICplcykKK3sKKwljaGFyIHN0clsyNTZdLCB1bml0OworCXVuc2lnbmVkIGxvbmcgbnJfZXZlbnRzID0gc2VsZi0+aGlzdHMtPnN0YXRzLm5yX2V2ZW50c1tQRVJGX1JFQ09SRF9TQU1QTEVdOworCisJc2VsZi0+Yi5lbnRyaWVzID0gJnNlbGYtPmhpc3RzLT5lbnRyaWVzOworCXNlbGYtPmIubnJfZW50cmllcyA9IHNlbGYtPmhpc3RzLT5ucl9lbnRyaWVzOworCisJaGlzdF9icm93c2VyX19yZWZyZXNoX2RpbWVuc2lvbnMoc2VsZik7CisKKwlucl9ldmVudHMgPSBjb252ZXJ0X3VuaXQobnJfZXZlbnRzLCAmdW5pdCk7CisJc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIkV2ZW50czogJWx1JWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKKwkJIG5yX2V2ZW50cywgdW5pdCk7CisJbmV3dERyYXdSb290VGV4dCgwLCAwLCBzdHIpOworCisJaWYgKHVpX2Jyb3dzZXJfX3Nob3coJnNlbGYtPmIsIHRpdGxlKSA8IDApCisJCXJldHVybiAtMTsKKworCW5ld3RGb3JtQWRkSG90S2V5KHNlbGYtPmIuZm9ybSwgJ0EnKTsKKwluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5iLmZvcm0sICdhJyk7CisJbmV3dEZvcm1BZGRIb3RLZXkoc2VsZi0+Yi5mb3JtLCAnPycpOworCW5ld3RGb3JtQWRkSG90S2V5KHNlbGYtPmIuZm9ybSwgJ2gnKTsKKwluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5iLmZvcm0sICdIJyk7CisJbmV3dEZvcm1BZGRIb3RLZXkoc2VsZi0+Yi5mb3JtLCAnZCcpOworCisJbmV3dEZvcm1BZGRIb3RLZXkoc2VsZi0+Yi5mb3JtLCBORVdUX0tFWV9MRUZUKTsKKwluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5iLmZvcm0sIE5FV1RfS0VZX1JJR0hUKTsKKwluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5iLmZvcm0sIE5FV1RfS0VZX0VOVEVSKTsKKworCXdoaWxlICgxKSB7CisJCXVpX2Jyb3dzZXJfX3J1bigmc2VsZi0+YiwgZXMpOworCisJCWlmIChlcy0+cmVhc29uICE9IE5FV1RfRVhJVF9IT1RLRVkpCisJCQlicmVhazsKKwkJc3dpdGNoIChlcy0+dS5rZXkpIHsKKwkJY2FzZSAnZCc6IHsgLyogRGVidWcgKi8KKwkJCXN0YXRpYyBpbnQgc2VxOworCQkJc3RydWN0IGhpc3RfZW50cnkgKmggPSByYl9lbnRyeShzZWxmLT5iLmZpcnN0X3Zpc2libGVfZW50cnksCisJCQkJCQkJc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOworCQkJdWlfaGVscGxpbmVfX3BvcCgpOworCQkJdWlfaGVscGxpbmVfX2ZwdXNoKCIlZDogbnJfZW50PSglZCwlZCksIGhlaWdodD0lZCwgaWR4PSVkLCBmdmU6IGlkeD0lZCwgcm93X29mZj0lZCwgbnJvd3M9JWQiLAorCQkJCQkgICBzZXErKywgc2VsZi0+Yi5ucl9lbnRyaWVzLAorCQkJCQkgICBzZWxmLT5oaXN0cy0+bnJfZW50cmllcywKKwkJCQkJICAgc2VsZi0+Yi5oZWlnaHQsCisJCQkJCSAgIHNlbGYtPmIuaW5kZXgsCisJCQkJCSAgIHNlbGYtPmIuZmlyc3RfdmlzaWJsZV9lbnRyeV9pZHgsCisJCQkJCSAgIGgtPnJvd19vZmZzZXQsIGgtPm5yX3Jvd3MpOworCQl9CisJCQljb250aW51ZTsKKwkJY2FzZSBORVdUX0tFWV9FTlRFUjoKKwkJCWlmIChoaXN0X2Jyb3dzZXJfX3RvZ2dsZV9mb2xkKHNlbGYpKQorCQkJCWJyZWFrOworCQkJLyogZmFsbCB0aHJ1ICovCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYwppbmRleCA5YmYwZjQwLi40YWY1YmQ1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCkBAIC02MDIsOCArNjAyLDE1IEBACiAJCQlyZXR1cm4gRVZUX0ZBSUxFRDsKIAl9CiAKLQkvKiBXZSBzaG91bGQgZmluZCBhIG5pY2Ugd2F5IHRvIG92ZXJyaWRlIHRoZSBhY2Nlc3MgdHlwZSAqLwotCWF0dHItPmJwX2xlbiA9IEhXX0JSRUFLUE9JTlRfTEVOXzQ7CisJLyoKKwkgKiBXZSBzaG91bGQgZmluZCBhIG5pY2Ugd2F5IHRvIG92ZXJyaWRlIHRoZSBhY2Nlc3MgbGVuZ3RoCisJICogUHJvdmlkZSBzb21lIGRlZmF1bHRzIGZvciBub3cKKwkgKi8KKwlpZiAoYXR0ci0+YnBfdHlwZSA9PSBIV19CUkVBS1BPSU5UX1gpCisJCWF0dHItPmJwX2xlbiA9IHNpemVvZihsb25nKTsKKwllbHNlCisJCWF0dHItPmJwX2xlbiA9IEhXX0JSRUFLUE9JTlRfTEVOXzQ7CisKIAlhdHRyLT50eXBlID0gUEVSRl9UWVBFX0JSRUFLUE9JTlQ7CiAKIAlyZXR1cm4gRVZUX0hBTkRMRUQ7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCmluZGV4IDkxNGM2NzAuLjJlNjY1Y2IgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIHByb2JlLWV2ZW50LmMgOiBwZXJmLXByb2JlIGRlZmluaXRpb24gdG8ga3Byb2JlX2V2ZW50cyBmb3JtYXQgY29udmVydGVyCisgKiBwcm9iZS1ldmVudC5jIDogcGVyZi1wcm9iZSBkZWZpbml0aW9uIHRvIHByb2JlX2V2ZW50cyBmb3JtYXQgY29udmVydGVyCiAgKgogICogV3JpdHRlbiBieSBNYXNhbWkgSGlyYW1hdHN1IDxtaGlyYW1hdEByZWRoYXQuY29tPgogICoKQEAgLTEyMCw4ICsxMjAsMTEgQEAKIAlyZXR1cm4gb3BlbihtYWNoaW5lLnZtbGludXhfbWFwc1tNQVBfX0ZVTkNUSU9OXS0+ZHNvLT5sb25nX25hbWUsIE9fUkRPTkxZKTsKIH0KIAotLyogQ29udmVydCB0cmFjZSBwb2ludCB0byBwcm9iZSBwb2ludCB3aXRoIGRlYnVnaW5mbyAqLwotc3RhdGljIGludCBjb252ZXJ0X3RvX3BlcmZfcHJvYmVfcG9pbnQoc3RydWN0IGtwcm9iZV90cmFjZV9wb2ludCAqdHAsCisvKgorICogQ29udmVydCB0cmFjZSBwb2ludCB0byBwcm9iZSBwb2ludCB3aXRoIGRlYnVnaW5mbworICogQ3VycmVudGx5IG9ubHkgaGFuZGxlcyBrcHJvYmVzLgorICovCitzdGF0aWMgaW50IGtwcm9iZV9jb252ZXJ0X3RvX3BlcmZfcHJvYmUoc3RydWN0IHByb2JlX3RyYWNlX3BvaW50ICp0cCwKIAkJCQkgICAgICAgc3RydWN0IHBlcmZfcHJvYmVfcG9pbnQgKnBwKQogewogCXN0cnVjdCBzeW1ib2wgKnN5bTsKQEAgLTE1MSw4ICsxNTQsOCBAQAogfQogCiAvKiBUcnkgdG8gZmluZCBwZXJmX3Byb2JlX2V2ZW50IHdpdGggZGVidWdpbmZvICovCi1zdGF0aWMgaW50IHRyeV90b19maW5kX2twcm9iZV90cmFjZV9ldmVudHMoc3RydWN0IHBlcmZfcHJvYmVfZXZlbnQgKnBldiwKLQkJCQkJICAgc3RydWN0IGtwcm9iZV90cmFjZV9ldmVudCAqKnRldnMsCitzdGF0aWMgaW50IHRyeV90b19maW5kX3Byb2JlX3RyYWNlX2V2ZW50cyhzdHJ1Y3QgcGVyZl9wcm9iZV9ldmVudCAqcGV2LAorCQkJCQkgICBzdHJ1Y3QgcHJvYmVfdHJhY2VfZXZlbnQgKip0ZXZzLAogCQkJCQkgICBpbnQgbWF4X3RldnMpCiB7CiAJYm9vbCBuZWVkX2R3YXJmID0gcGVyZl9wcm9iZV9ldmVudF9uZWVkX2R3YXJmKHBldik7CkBAIC0xNjksMTEgKzE3MiwxMSBAQAogCX0KIAogCS8qIFNlYXJjaGluZyB0cmFjZSBldmVudHMgY29ycmVzcG9uZGluZyB0byBwcm9iZSBldmVudCAqLwotCW50ZXZzID0gZmluZF9rcHJvYmVfdHJhY2VfZXZlbnRzKGZkLCBwZXYsIHRldnMsIG1heF90ZXZzKTsKKwludGV2cyA9IGZpbmRfcHJvYmVfdHJhY2VfZXZlbnRzKGZkLCBwZXYsIHRldnMsIG1heF90ZXZzKTsKIAljbG9zZShmZCk7CiAKIAlpZiAobnRldnMgPiAwKSB7CS8qIFN1Y2NlZWRlZCB0byBmaW5kIHRyYWNlIGV2ZW50cyAqLwotCQlwcl9kZWJ1ZygiZmluZCAlZCBrcHJvYmVfdHJhY2VfZXZlbnRzLlxuIiwgbnRldnMpOworCQlwcl9kZWJ1ZygiZmluZCAlZCBwcm9iZV90cmFjZV9ldmVudHMuXG4iLCBudGV2cyk7CiAJCXJldHVybiBudGV2czsKIAl9CiAKQEAgLTE5NSw2ICsxOTgsNjUgQEAKIAlyZXR1cm4gbnRldnM7CiB9CiAKKy8qCisgKiBGaW5kIGEgc3JjIGZpbGUgZnJvbSBhIERXQVJGIHRhZyBwYXRoLiBQcmVwZW5kIG9wdGlvbmFsIHNvdXJjZSBwYXRoIHByZWZpeAorICogYW5kIGNob3Agb2ZmIGxlYWRpbmcgZGlyZWN0b3JpZXMgdGhhdCBkbyBub3QgZXhpc3QuIFJlc3VsdCBpcyBwYXNzZWQgYmFjayBhcworICogYSBuZXdseSBhbGxvY2F0ZWQgcGF0aCBvbiBzdWNjZXNzLgorICogUmV0dXJuIDAgaWYgZmlsZSB3YXMgZm91bmQgYW5kIHJlYWRhYmxlLCAtZXJybm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IGdldF9yZWFsX3BhdGgoY29uc3QgY2hhciAqcmF3X3BhdGgsIGNvbnN0IGNoYXIgKmNvbXBfZGlyLAorCQkJIGNoYXIgKipuZXdfcGF0aCkKK3sKKwljb25zdCBjaGFyICpwcmVmaXggPSBzeW1ib2xfY29uZi5zb3VyY2VfcHJlZml4OworCisJaWYgKCFwcmVmaXgpIHsKKwkJaWYgKHJhd19wYXRoWzBdICE9ICcvJyAmJiBjb21wX2RpcikKKwkJCS8qIElmIG5vdCBhbiBhYnNvbHV0ZSBwYXRoLCB0cnkgdG8gdXNlIGNvbXBfZGlyICovCisJCQlwcmVmaXggPSBjb21wX2RpcjsKKwkJZWxzZSB7CisJCQlpZiAoYWNjZXNzKHJhd19wYXRoLCBSX09LKSA9PSAwKSB7CisJCQkJKm5ld19wYXRoID0gc3RyZHVwKHJhd19wYXRoKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0gZWxzZQorCQkJCXJldHVybiAtZXJybm87CisJCX0KKwl9CisKKwkqbmV3X3BhdGggPSBtYWxsb2MoKHN0cmxlbihwcmVmaXgpICsgc3RybGVuKHJhd19wYXRoKSArIDIpKTsKKwlpZiAoISpuZXdfcGF0aCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKDs7KSB7CisJCXNwcmludGYoKm5ld19wYXRoLCAiJXMvJXMiLCBwcmVmaXgsIHJhd19wYXRoKTsKKworCQlpZiAoYWNjZXNzKCpuZXdfcGF0aCwgUl9PSykgPT0gMCkKKwkJCXJldHVybiAwOworCisJCWlmICghc3ltYm9sX2NvbmYuc291cmNlX3ByZWZpeCkKKwkJCS8qIEluIGNhc2Ugb2Ygc2VhcmNoaW5nIGNvbXBfZGlyLCBkb24ndCByZXRyeSAqLworCQkJcmV0dXJuIC1lcnJubzsKKworCQlzd2l0Y2ggKGVycm5vKSB7CisJCWNhc2UgRU5BTUVUT09MT05HOgorCQljYXNlIEVOT0VOVDoKKwkJY2FzZSBFUk9GUzoKKwkJY2FzZSBFRkFVTFQ6CisJCQlyYXdfcGF0aCA9IHN0cmNocigrK3Jhd19wYXRoLCAnLycpOworCQkJaWYgKCFyYXdfcGF0aCkgeworCQkJCWZyZWUoKm5ld19wYXRoKTsKKwkJCQkqbmV3X3BhdGggPSBOVUxMOworCQkJCXJldHVybiAtRU5PRU5UOworCQkJfQorCQkJY29udGludWU7CisKKwkJZGVmYXVsdDoKKwkJCWZyZWUoKm5ld19wYXRoKTsKKwkJCSpuZXdfcGF0aCA9IE5VTEw7CisJCQlyZXR1cm4gLWVycm5vOworCQl9CisJfQorfQorCiAjZGVmaW5lIExJTkVCVUZfU0laRSAyNTYKICNkZWZpbmUgTlJfQURESVRJT05BTF9MSU5FUyAyCiAKQEAgLTI0NCw2ICszMDYsNyBAQAogCXN0cnVjdCBsaW5lX25vZGUgKmxuOwogCUZJTEUgKmZwOwogCWludCBmZCwgcmV0OworCWNoYXIgKnRtcDsKIAogCS8qIFNlYXJjaCBhIGxpbmUgcmFuZ2UgKi8KIAlyZXQgPSBpbml0X3ZtbGludXgoKTsKQEAgLTI2Niw2ICszMjksMTUgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwkvKiBDb252ZXJ0IHNvdXJjZSBmaWxlIHBhdGggKi8KKwl0bXAgPSBsci0+cGF0aDsKKwlyZXQgPSBnZXRfcmVhbF9wYXRoKHRtcCwgbHItPmNvbXBfZGlyLCAmbHItPnBhdGgpOworCWZyZWUodG1wKTsJLyogRnJlZSBvbGQgcGF0aCAqLworCWlmIChyZXQgPCAwKSB7CisJCXByX3dhcm5pbmcoIkZhaWxlZCB0byBmaW5kIHNvdXJjZSBmaWxlLiAoJWQpXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwogCXNldHVwX3BhZ2VyKCk7CiAKIAlpZiAobHItPmZ1bmN0aW9uKQpAQCAtMzA4LDggKzM4MCw4IEBACiAKICNlbHNlCS8qICFEV0FSRl9TVVBQT1JUICovCiAKLXN0YXRpYyBpbnQgY29udmVydF90b19wZXJmX3Byb2JlX3BvaW50KHN0cnVjdCBrcHJvYmVfdHJhY2VfcG9pbnQgKnRwLAotCQkJCQlzdHJ1Y3QgcGVyZl9wcm9iZV9wb2ludCAqcHApCitzdGF0aWMgaW50IGtwcm9iZV9jb252ZXJ0X3RvX3BlcmZfcHJvYmUoc3RydWN0IHByb2JlX3RyYWNlX3BvaW50ICp0cCwKKwkJCQkgICAgICAgc3RydWN0IHBlcmZfcHJvYmVfcG9pbnQgKnBwKQogewogCXBwLT5mdW5jdGlvbiA9IHN0cmR1cCh0cC0+c3ltYm9sKTsKIAlpZiAocHAtPmZ1bmN0aW9uID09IE5VTEwpCkBAIC0zMjAsOCArMzkyLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0cnlfdG9fZmluZF9rcHJvYmVfdHJhY2VfZXZlbnRzKHN0cnVjdCBwZXJmX3Byb2JlX2V2ZW50ICpwZXYsCi0JCQkJc3RydWN0IGtwcm9iZV90cmFjZV9ldmVudCAqKnRldnMgX191bnVzZWQsCitzdGF0aWMgaW50IHRyeV90b19maW5kX3Byb2JlX3RyYWNlX2V2ZW50cyhzdHJ1Y3QgcGVyZl9wcm9iZV9ldmVudCAqcGV2LAorCQkJCXN0cnVjdCBwcm9iZV90cmFjZV9ldmVudCAqKnRldnMgX191bnVzZWQsCiAJCQkJaW50IG1heF90ZXZzIF9fdW51c2VkKQogewogCWlmIChwZXJmX3Byb2JlX2V2ZW50X25lZWRfZHdhcmYocGV2KSkgewpAQCAtNTU3LDcgKzYyOSw3IEBACiAvKiBQYXJzZSBwZXJmLXByb2JlIGV2ZW50IGFyZ3VtZW50ICovCiBzdGF0aWMgaW50IHBhcnNlX3BlcmZfcHJvYmVfYXJnKGNoYXIgKnN0ciwgc3RydWN0IHBlcmZfcHJvYmVfYXJnICphcmcpCiB7Ci0JY2hhciAqdG1wOworCWNoYXIgKnRtcCwgKmdvb2RuYW1lOwogCXN0cnVjdCBwZXJmX3Byb2JlX2FyZ19maWVsZCAqKmZpZWxkcDsKIAogCXByX2RlYnVnKCJwYXJzaW5nIGFyZzogJXMgaW50byAiLCBzdHIpOwpAQCAtNTgwLDcgKzY1Miw3IEBACiAJCXByX2RlYnVnKCJ0eXBlOiVzICIsIGFyZy0+dHlwZSk7CiAJfQogCi0JdG1wID0gc3RycGJyayhzdHIsICItLiIpOworCXRtcCA9IHN0cnBicmsoc3RyLCAiLS5bIik7CiAJaWYgKCFpc19jX3Zhcm5hbWUoc3RyKSB8fCAhdG1wKSB7CiAJCS8qIEEgdmFyaWFibGUsIHJlZ2lzdGVyLCBzeW1ib2wgb3Igc3BlY2lhbCB2YWx1ZSAqLwogCQlhcmctPnZhciA9IHN0cmR1cChzdHIpOwpAQCAtNTkwLDEwICs2NjIsMTEgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyogU3RydWN0dXJlIGZpZWxkcyAqLworCS8qIFN0cnVjdHVyZSBmaWVsZHMgb3IgYXJyYXkgZWxlbWVudCAqLwogCWFyZy0+dmFyID0gc3RybmR1cChzdHIsIHRtcCAtIHN0cik7CiAJaWYgKGFyZy0+dmFyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOworCWdvb2RuYW1lID0gYXJnLT52YXI7CiAJcHJfZGVidWcoIiVzLCAiLCBhcmctPnZhcik7CiAJZmllbGRwID0gJmFyZy0+ZmllbGQ7CiAKQEAgLTYwMSwyMiArNjc0LDM4IEBACiAJCSpmaWVsZHAgPSB6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwZXJmX3Byb2JlX2FyZ19maWVsZCkpOwogCQlpZiAoKmZpZWxkcCA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWlmICgqdG1wID09ICcuJykgewotCQkJc3RyID0gdG1wICsgMTsKLQkJCSgqZmllbGRwKS0+cmVmID0gZmFsc2U7Ci0JCX0gZWxzZSBpZiAodG1wWzFdID09ICc+JykgewotCQkJc3RyID0gdG1wICsgMjsKKwkJaWYgKCp0bXAgPT0gJ1snKSB7CS8qIEFycmF5ICovCisJCQlzdHIgPSB0bXA7CisJCQkoKmZpZWxkcCktPmluZGV4ID0gc3RydG9sKHN0ciArIDEsICZ0bXAsIDApOwogCQkJKCpmaWVsZHApLT5yZWYgPSB0cnVlOwotCQl9IGVsc2UgewotCQkJc2VtYW50aWNfZXJyb3IoIkFyZ3VtZW50IHBhcnNlIGVycm9yOiAlc1xuIiwgc3RyKTsKLQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKCp0bXAgIT0gJ10nIHx8IHRtcCA9PSBzdHIgKyAxKSB7CisJCQkJc2VtYW50aWNfZXJyb3IoIkFycmF5IGluZGV4IG11c3QgYmUgYSIKKwkJCQkJCSIgbnVtYmVyLlxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQl0bXArKzsKKwkJCWlmICgqdG1wID09ICdcMCcpCisJCQkJdG1wID0gTlVMTDsKKwkJfSBlbHNlIHsJCS8qIFN0cnVjdHVyZSAqLworCQkJaWYgKCp0bXAgPT0gJy4nKSB7CisJCQkJc3RyID0gdG1wICsgMTsKKwkJCQkoKmZpZWxkcCktPnJlZiA9IGZhbHNlOworCQkJfSBlbHNlIGlmICh0bXBbMV0gPT0gJz4nKSB7CisJCQkJc3RyID0gdG1wICsgMjsKKwkJCQkoKmZpZWxkcCktPnJlZiA9IHRydWU7CisJCQl9IGVsc2UgeworCQkJCXNlbWFudGljX2Vycm9yKCJBcmd1bWVudCBwYXJzZSBlcnJvcjogJXNcbiIsCisJCQkJCSAgICAgICBzdHIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJdG1wID0gc3RycGJyayhzdHIsICItLlsiKTsKIAkJfQotCi0JCXRtcCA9IHN0cnBicmsoc3RyLCAiLS4iKTsKIAkJaWYgKHRtcCkgewogCQkJKCpmaWVsZHApLT5uYW1lID0gc3RybmR1cChzdHIsIHRtcCAtIHN0cik7CiAJCQlpZiAoKCpmaWVsZHApLT5uYW1lID09IE5VTEwpCiAJCQkJcmV0dXJuIC1FTk9NRU07CisJCQlpZiAoKnN0ciAhPSAnWycpCisJCQkJZ29vZG5hbWUgPSAoKmZpZWxkcCktPm5hbWU7CiAJCQlwcl9kZWJ1ZygiJXMoJWQpLCAiLCAoKmZpZWxkcCktPm5hbWUsICgqZmllbGRwKS0+cmVmKTsKIAkJCWZpZWxkcCA9ICYoKmZpZWxkcCktPm5leHQ7CiAJCX0KQEAgLTYyNCwxMSArNzEzLDEzIEBACiAJKCpmaWVsZHApLT5uYW1lID0gc3RyZHVwKHN0cik7CiAJaWYgKCgqZmllbGRwKS0+bmFtZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoKnN0ciAhPSAnWycpCisJCWdvb2RuYW1lID0gKCpmaWVsZHApLT5uYW1lOwogCXByX2RlYnVnKCIlcyglZClcbiIsICgqZmllbGRwKS0+bmFtZSwgKCpmaWVsZHApLT5yZWYpOwogCi0JLyogSWYgbm8gbmFtZSBpcyBzcGVjaWZpZWQsIHNldCB0aGUgbGFzdCBmaWVsZCBuYW1lICovCisJLyogSWYgbm8gbmFtZSBpcyBzcGVjaWZpZWQsIHNldCB0aGUgbGFzdCBmaWVsZCBuYW1lIChub3QgYXJyYXkgaW5kZXgpKi8KIAlpZiAoIWFyZy0+bmFtZSkgewotCQlhcmctPm5hbWUgPSBzdHJkdXAoKCpmaWVsZHApLT5uYW1lKTsKKwkJYXJnLT5uYW1lID0gc3RyZHVwKGdvb2RuYW1lKTsKIAkJaWYgKGFyZy0+bmFtZSA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtNjkzLDE2ICs3ODQsMTcgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLS8qIFBhcnNlIGtwcm9iZV9ldmVudHMgZXZlbnQgaW50byBzdHJ1Y3QgcHJvYmVfcG9pbnQgKi8KLWludCBwYXJzZV9rcHJvYmVfdHJhY2VfY29tbWFuZChjb25zdCBjaGFyICpjbWQsIHN0cnVjdCBrcHJvYmVfdHJhY2VfZXZlbnQgKnRldikKKy8qIFBhcnNlIHByb2JlX2V2ZW50cyBldmVudCBpbnRvIHN0cnVjdCBwcm9iZV9wb2ludCAqLworc3RhdGljIGludCBwYXJzZV9wcm9iZV90cmFjZV9jb21tYW5kKGNvbnN0IGNoYXIgKmNtZCwKKwkJCQkJc3RydWN0IHByb2JlX3RyYWNlX2V2ZW50ICp0ZXYpCiB7Ci0Jc3RydWN0IGtwcm9iZV90cmFjZV9wb2ludCAqdHAgPSAmdGV2LT5wb2ludDsKKwlzdHJ1Y3QgcHJvYmVfdHJhY2VfcG9pbnQgKnRwID0gJnRldi0+cG9pbnQ7CiAJY2hhciBwcjsKIAljaGFyICpwOwogCWludCByZXQsIGksIGFyZ2M7CiAJY2hhciAqKmFyZ3Y7CiAKLQlwcl9kZWJ1ZygiUGFyc2luZyBrcHJvYmVfZXZlbnRzOiAlc1xuIiwgY21kKTsKKwlwcl9kZWJ1ZygiUGFyc2luZyBwcm9iZV9ldmVudHM6ICVzXG4iLCBjbWQpOwogCWFyZ3YgPSBhcmd2X3NwbGl0KGNtZCwgJmFyZ2MpOwogCWlmICghYXJndikgewogCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIHNwbGl0IGFyZ3VtZW50cy5cbiIpOwpAQCAtNzM0LDcgKzgyNiw3IEBACiAJCXRwLT5vZmZzZXQgPSAwOwogCiAJdGV2LT5uYXJncyA9IGFyZ2MgLSAyOwotCXRldi0+YXJncyA9IHphbGxvYyhzaXplb2Yoc3RydWN0IGtwcm9iZV90cmFjZV9hcmcpICogdGV2LT5uYXJncyk7CisJdGV2LT5hcmdzID0gemFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvYmVfdHJhY2VfYXJnKSAqIHRldi0+bmFyZ3MpOwogCWlmICh0ZXYtPmFyZ3MgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKQEAgLTc3Niw4ICs4NjgsMTEgQEAKIAlsZW4gLT0gcmV0OwogCiAJd2hpbGUgKGZpZWxkKSB7Ci0JCXJldCA9IGVfc25wcmludGYodG1wLCBsZW4sICIlcyVzIiwgZmllbGQtPnJlZiA/ICItPiIgOiAiLiIsCi0JCQkJIGZpZWxkLT5uYW1lKTsKKwkJaWYgKGZpZWxkLT5uYW1lWzBdID09ICdbJykKKwkJCXJldCA9IGVfc25wcmludGYodG1wLCBsZW4sICIlcyIsIGZpZWxkLT5uYW1lKTsKKwkJZWxzZQorCQkJcmV0ID0gZV9zbnByaW50Zih0bXAsIGxlbiwgIiVzJXMiLAorCQkJCQkgZmllbGQtPnJlZiA/ICItPiIgOiAiLiIsIGZpZWxkLT5uYW1lKTsKIAkJaWYgKHJldCA8PSAwKQogCQkJZ290byBlcnJvcjsKIAkJdG1wICs9IHJldDsKQEAgLTg3NywxMyArOTcyLDEzIEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBfX3N5bnRoZXNpemVfa3Byb2JlX3RyYWNlX2FyZ19yZWYoc3RydWN0IGtwcm9iZV90cmFjZV9hcmdfcmVmICpyZWYsCitzdGF0aWMgaW50IF9fc3ludGhlc2l6ZV9wcm9iZV90cmFjZV9hcmdfcmVmKHN0cnVjdCBwcm9iZV90cmFjZV9hcmdfcmVmICpyZWYsCiAJCQkJCSAgICAgY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4sCiAJCQkJCSAgICAgaW50IGRlcHRoKQogewogCWludCByZXQ7CiAJaWYgKHJlZi0+bmV4dCkgewotCQlkZXB0aCA9IF9fc3ludGhlc2l6ZV9rcHJvYmVfdHJhY2VfYXJnX3JlZihyZWYtPm5leHQsIGJ1ZiwKKwkJZGVwdGggPSBfX3N5bnRoZXNpemVfcHJvYmVfdHJhY2VfYXJnX3JlZihyZWYtPm5leHQsIGJ1ZiwKIAkJCQkJCQkgYnVmbGVuLCBkZXB0aCArIDEpOwogCQlpZiAoZGVwdGggPCAwKQogCQkJZ290byBvdXQ7CkBAIC05MDEsOSArOTk2LDEwIEBACiAKIH0KIAotc3RhdGljIGludCBzeW50aGVzaXplX2twcm9iZV90cmFjZV9hcmcoc3RydWN0IGtwcm9iZV90cmFjZV9hcmcgKmFyZywKK3N0YXRpYyBpbnQgc3ludGhlc2l6ZV9wcm9iZV90cmFjZV9hcmcoc3RydWN0IHByb2JlX3RyYWNlX2FyZyAqYXJnLAogCQkJCSAgICAgICBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCiB7CisJc3RydWN0IHByb2JlX3RyYWNlX2FyZ19yZWYgKnJlZiA9IGFyZy0+cmVmOwogCWludCByZXQsIGRlcHRoID0gMDsKIAljaGFyICp0bXAgPSBidWY7CiAKQEAgLTkxNywxNiArMTAxMywyNCBAQAogCWJ1ZiArPSByZXQ7CiAJYnVmbGVuIC09IHJldDsKIAorCS8qIFNwZWNpYWwgY2FzZTogQFhYWCAqLworCWlmIChhcmctPnZhbHVlWzBdID09ICdAJyAmJiBhcmctPnJlZikKKwkJCXJlZiA9IHJlZi0+bmV4dDsKKwogCS8qIERlcmVmZXJlbmNpbmcgYXJndW1lbnRzICovCi0JaWYgKGFyZy0+cmVmKSB7Ci0JCWRlcHRoID0gX19zeW50aGVzaXplX2twcm9iZV90cmFjZV9hcmdfcmVmKGFyZy0+cmVmLCAmYnVmLAorCWlmIChyZWYpIHsKKwkJZGVwdGggPSBfX3N5bnRoZXNpemVfcHJvYmVfdHJhY2VfYXJnX3JlZihyZWYsICZidWYsCiAJCQkJCQkJICAmYnVmbGVuLCAxKTsKIAkJaWYgKGRlcHRoIDwgMCkKIAkJCXJldHVybiBkZXB0aDsKIAl9CiAKIAkvKiBQcmludCBhcmd1bWVudCB2YWx1ZSAqLwotCXJldCA9IGVfc25wcmludGYoYnVmLCBidWZsZW4sICIlcyIsIGFyZy0+dmFsdWUpOworCWlmIChhcmctPnZhbHVlWzBdID09ICdAJyAmJiBhcmctPnJlZikKKwkJcmV0ID0gZV9zbnByaW50ZihidWYsIGJ1ZmxlbiwgIiVzJStsZCIsIGFyZy0+dmFsdWUsCisJCQkJIGFyZy0+cmVmLT5vZmZzZXQpOworCWVsc2UKKwkJcmV0ID0gZV9zbnByaW50ZihidWYsIGJ1ZmxlbiwgIiVzIiwgYXJnLT52YWx1ZSk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAJYnVmICs9IHJldDsKQEAgLTk1MSw5ICsxMDU1LDkgQEAKIAlyZXR1cm4gYnVmIC0gdG1wOwogfQogCi1jaGFyICpzeW50aGVzaXplX2twcm9iZV90cmFjZV9jb21tYW5kKHN0cnVjdCBrcHJvYmVfdHJhY2VfZXZlbnQgKnRldikKK2NoYXIgKnN5bnRoZXNpemVfcHJvYmVfdHJhY2VfY29tbWFuZChzdHJ1Y3QgcHJvYmVfdHJhY2VfZXZlbnQgKnRldikKIHsKLQlzdHJ1Y3Qga3Byb2JlX3RyYWNlX3BvaW50ICp0cCA9ICZ0ZXYtPnBvaW50OworCXN0cnVjdCBwcm9iZV90cmFjZV9wb2ludCAqdHAgPSAmdGV2LT5wb2ludDsKIAljaGFyICpidWY7CiAJaW50IGksIGxlbiwgcmV0OwogCkBAIC05NjksNyArMTA3Myw3IEBACiAJCWdvdG8gZXJyb3I7CiAKIAlmb3IgKGkgPSAwOyBpIDwgdGV2LT5uYXJnczsgaSsrKSB7Ci0JCXJldCA9IHN5bnRoZXNpemVfa3Byb2JlX3RyYWNlX2FyZygmdGV2LT5hcmdzW2ldLCBidWYgKyBsZW4sCisJCXJldCA9IHN5bnRoZXNpemVfcHJvYmVfdHJhY2VfYXJnKCZ0ZXYtPmFyZ3NbaV0sIGJ1ZiArIGxlbiwKIAkJCQkJCSAgTUFYX0NNRExFTiAtIGxlbik7CiAJCWlmIChyZXQgPD0gMCkKIAkJCWdvdG8gZXJyb3I7CkBAIC05ODIsNyArMTA4Niw3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLWludCBjb252ZXJ0X3RvX3BlcmZfcHJvYmVfZXZlbnQoc3RydWN0IGtwcm9iZV90cmFjZV9ldmVudCAqdGV2LAorc3RhdGljIGludCBjb252ZXJ0X3RvX3BlcmZfcHJvYmVfZXZlbnQoc3RydWN0IHByb2JlX3RyYWNlX2V2ZW50ICp0ZXYsCiAJCQkJc3RydWN0IHBlcmZfcHJvYmVfZXZlbnQgKnBldikKIHsKIAljaGFyIGJ1Zls2NF0gPSAiIjsKQEAgLTk5NSw3ICsxMDk5LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBDb252ZXJ0IHRyYWNlX3BvaW50IHRvIHByb2JlX3BvaW50ICovCi0JcmV0ID0gY29udmVydF90b19wZXJmX3Byb2JlX3BvaW50KCZ0ZXYtPnBvaW50LCAmcGV2LT5wb2ludCk7CisJcmV0ID0ga3Byb2JlX2NvbnZlcnRfdG9fcGVyZl9wcm9iZSgmdGV2LT5wb2ludCwgJnBldi0+cG9pbnQpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0xMDA4LDcgKzExMTIsNyBAQAogCQlpZiAodGV2LT5hcmdzW2ldLm5hbWUpCiAJCQlwZXYtPmFyZ3NbaV0ubmFtZSA9IHN0cmR1cCh0ZXYtPmFyZ3NbaV0ubmFtZSk7CiAJCWVsc2UgewotCQkJcmV0ID0gc3ludGhlc2l6ZV9rcHJvYmVfdHJhY2VfYXJnKCZ0ZXYtPmFyZ3NbaV0sCisJCQlyZXQgPSBzeW50aGVzaXplX3Byb2JlX3RyYWNlX2FyZygmdGV2LT5hcmdzW2ldLAogCQkJCQkJCSAgYnVmLCA2NCk7CiAJCQlwZXYtPmFyZ3NbaV0ubmFtZSA9IHN0cmR1cChidWYpOwogCQl9CkBAIC0xMDU5LDkgKzExNjMsOSBAQAogCW1lbXNldChwZXYsIDAsIHNpemVvZigqcGV2KSk7CiB9CiAKLXZvaWQgY2xlYXJfa3Byb2JlX3RyYWNlX2V2ZW50KHN0cnVjdCBrcHJvYmVfdHJhY2VfZXZlbnQgKnRldikKK3N0YXRpYyB2b2lkIGNsZWFyX3Byb2JlX3RyYWNlX2V2ZW50KHN0cnVjdCBwcm9iZV90cmFjZV9ldmVudCAqdGV2KQogewotCXN0cnVjdCBrcHJvYmVfdHJhY2VfYXJnX3JlZiAqcmVmLCAqbmV4dDsKKwlzdHJ1Y3QgcHJvYmVfdHJhY2VfYXJnX3JlZiAqcmVmLCAqbmV4dDsKIAlpbnQgaTsKIAogCWlmICh0ZXYtPmV2ZW50KQpAQCAtMTEyMiw3ICsxMjI2LDcgQEAKIH0KIAogLyogR2V0IHJhdyBzdHJpbmcgbGlzdCBvZiBjdXJyZW50IGtwcm9iZV9ldmVudHMgKi8KLXN0YXRpYyBzdHJ1Y3Qgc3RybGlzdCAqZ2V0X2twcm9iZV90cmFjZV9jb21tYW5kX3Jhd2xpc3QoaW50IGZkKQorc3RhdGljIHN0cnVjdCBzdHJsaXN0ICpnZXRfcHJvYmVfdHJhY2VfY29tbWFuZF9yYXdsaXN0KGludCBmZCkKIHsKIAlpbnQgcmV0LCBpZHg7CiAJRklMRSAqZnA7CkBAIC0xMTkwLDcgKzEyOTQsNyBAQAogaW50IHNob3dfcGVyZl9wcm9iZV9ldmVudHModm9pZCkKIHsKIAlpbnQgZmQsIHJldDsKLQlzdHJ1Y3Qga3Byb2JlX3RyYWNlX2V2ZW50IHRldjsKKwlzdHJ1Y3QgcHJvYmVfdHJhY2VfZXZlbnQgdGV2OwogCXN0cnVjdCBwZXJmX3Byb2JlX2V2ZW50IHBldjsKIAlzdHJ1Y3Qgc3RybGlzdCAqcmF3bGlzdDsKIAlzdHJ1Y3Qgc3RyX25vZGUgKmVudDsKQEAgLTEyMDcsMjAgKzEzMTEsMjAgQEAKIAlpZiAoZmQgPCAwKQogCQlyZXR1cm4gZmQ7CiAKLQlyYXdsaXN0ID0gZ2V0X2twcm9iZV90cmFjZV9jb21tYW5kX3Jhd2xpc3QoZmQpOworCXJhd2xpc3QgPSBnZXRfcHJvYmVfdHJhY2VfY29tbWFuZF9yYXdsaXN0KGZkKTsKIAljbG9zZShmZCk7CiAJaWYgKCFyYXdsaXN0KQogCQlyZXR1cm4gLUVOT0VOVDsKIAogCXN0cmxpc3RfX2Zvcl9lYWNoKGVudCwgcmF3bGlzdCkgewotCQlyZXQgPSBwYXJzZV9rcHJvYmVfdHJhY2VfY29tbWFuZChlbnQtPnMsICZ0ZXYpOworCQlyZXQgPSBwYXJzZV9wcm9iZV90cmFjZV9jb21tYW5kKGVudC0+cywgJnRldik7CiAJCWlmIChyZXQgPj0gMCkgewogCQkJcmV0ID0gY29udmVydF90b19wZXJmX3Byb2JlX2V2ZW50KCZ0ZXYsICZwZXYpOwogCQkJaWYgKHJldCA+PSAwKQogCQkJCXJldCA9IHNob3dfcGVyZl9wcm9iZV9ldmVudCgmcGV2KTsKIAkJfQogCQljbGVhcl9wZXJmX3Byb2JlX2V2ZW50KCZwZXYpOwotCQljbGVhcl9rcHJvYmVfdHJhY2VfZXZlbnQoJnRldik7CisJCWNsZWFyX3Byb2JlX3RyYWNlX2V2ZW50KCZ0ZXYpOwogCQlpZiAocmV0IDwgMCkKIAkJCWJyZWFrOwogCX0KQEAgLTEyMzAsMjAgKzEzMzQsMTkgQEAKIH0KIAogLyogR2V0IGN1cnJlbnQgcGVyZi1wcm9iZSBldmVudCBuYW1lcyAqLwotc3RhdGljIHN0cnVjdCBzdHJsaXN0ICpnZXRfa3Byb2JlX3RyYWNlX2V2ZW50X25hbWVzKGludCBmZCwgYm9vbCBpbmNsdWRlX2dyb3VwKQorc3RhdGljIHN0cnVjdCBzdHJsaXN0ICpnZXRfcHJvYmVfdHJhY2VfZXZlbnRfbmFtZXMoaW50IGZkLCBib29sIGluY2x1ZGVfZ3JvdXApCiB7CiAJY2hhciBidWZbMTI4XTsKIAlzdHJ1Y3Qgc3RybGlzdCAqc2wsICpyYXdsaXN0OwogCXN0cnVjdCBzdHJfbm9kZSAqZW50OwotCXN0cnVjdCBrcHJvYmVfdHJhY2VfZXZlbnQgdGV2OworCXN0cnVjdCBwcm9iZV90cmFjZV9ldmVudCB0ZXY7CiAJaW50IHJldCA9IDA7CiAKIAltZW1zZXQoJnRldiwgMCwgc2l6ZW9mKHRldikpOwotCi0JcmF3bGlzdCA9IGdldF9rcHJvYmVfdHJhY2VfY29tbWFuZF9yYXdsaXN0KGZkKTsKKwlyYXdsaXN0ID0gZ2V0X3Byb2JlX3RyYWNlX2NvbW1hbmRfcmF3bGlzdChmZCk7CiAJc2wgPSBzdHJsaXN0X19uZXcodHJ1ZSwgTlVMTCk7CiAJc3RybGlzdF9fZm9yX2VhY2goZW50LCByYXdsaXN0KSB7Ci0JCXJldCA9IHBhcnNlX2twcm9iZV90cmFjZV9jb21tYW5kKGVudC0+cywgJnRldik7CisJCXJldCA9IHBhcnNlX3Byb2JlX3RyYWNlX2NvbW1hbmQoZW50LT5zLCAmdGV2KTsKIAkJaWYgKHJldCA8IDApCiAJCQlicmVhazsKIAkJaWYgKGluY2x1ZGVfZ3JvdXApIHsKQEAgLTEyNTMsNyArMTM1Niw3IEBACiAJCQkJcmV0ID0gc3RybGlzdF9fYWRkKHNsLCBidWYpOwogCQl9IGVsc2UKIAkJCXJldCA9IHN0cmxpc3RfX2FkZChzbCwgdGV2LmV2ZW50KTsKLQkJY2xlYXJfa3Byb2JlX3RyYWNlX2V2ZW50KCZ0ZXYpOworCQljbGVhcl9wcm9iZV90cmFjZV9ldmVudCgmdGV2KTsKIAkJaWYgKHJldCA8IDApCiAJCQlicmVhazsKIAl9CkBAIC0xMjY2LDEzICsxMzY5LDEzIEBACiAJcmV0dXJuIHNsOwogfQogCi1zdGF0aWMgaW50IHdyaXRlX2twcm9iZV90cmFjZV9ldmVudChpbnQgZmQsIHN0cnVjdCBrcHJvYmVfdHJhY2VfZXZlbnQgKnRldikKK3N0YXRpYyBpbnQgd3JpdGVfcHJvYmVfdHJhY2VfZXZlbnQoaW50IGZkLCBzdHJ1Y3QgcHJvYmVfdHJhY2VfZXZlbnQgKnRldikKIHsKIAlpbnQgcmV0ID0gMDsKLQljaGFyICpidWYgPSBzeW50aGVzaXplX2twcm9iZV90cmFjZV9jb21tYW5kKHRldik7CisJY2hhciAqYnVmID0gc3ludGhlc2l6ZV9wcm9iZV90cmFjZV9jb21tYW5kKHRldik7CiAKIAlpZiAoIWJ1ZikgewotCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIHN5bnRoZXNpemUga3Byb2JlIHRyYWNlIGV2ZW50LlxuIik7CisJCXByX2RlYnVnKCJGYWlsZWQgdG8gc3ludGhlc2l6ZSBwcm9iZSB0cmFjZSBldmVudC5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTEzMjUsMTIgKzE0MjgsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IF9fYWRkX2twcm9iZV90cmFjZV9ldmVudHMoc3RydWN0IHBlcmZfcHJvYmVfZXZlbnQgKnBldiwKLQkJCQkgICAgIHN0cnVjdCBrcHJvYmVfdHJhY2VfZXZlbnQgKnRldnMsCitzdGF0aWMgaW50IF9fYWRkX3Byb2JlX3RyYWNlX2V2ZW50cyhzdHJ1Y3QgcGVyZl9wcm9iZV9ldmVudCAqcGV2LAorCQkJCSAgICAgc3RydWN0IHByb2JlX3RyYWNlX2V2ZW50ICp0ZXZzLAogCQkJCSAgICAgaW50IG50ZXZzLCBib29sIGFsbG93X3N1ZmZpeCkKIHsKIAlpbnQgaSwgZmQsIHJldDsKLQlzdHJ1Y3Qga3Byb2JlX3RyYWNlX2V2ZW50ICp0ZXYgPSBOVUxMOworCXN0cnVjdCBwcm9iZV90cmFjZV9ldmVudCAqdGV2ID0gTlVMTDsKIAljaGFyIGJ1Zls2NF07CiAJY29uc3QgY2hhciAqZXZlbnQsICpncm91cDsKIAlzdHJ1Y3Qgc3RybGlzdCAqbmFtZWxpc3Q7CkBAIC0xMzM5LDcgKzE0NDIsNyBAQAogCWlmIChmZCA8IDApCiAJCXJldHVybiBmZDsKIAkvKiBHZXQgY3VycmVudCBldmVudCBuYW1lcyAqLwotCW5hbWVsaXN0ID0gZ2V0X2twcm9iZV90cmFjZV9ldmVudF9uYW1lcyhmZCwgZmFsc2UpOworCW5hbWVsaXN0ID0gZ2V0X3Byb2JlX3RyYWNlX2V2ZW50X25hbWVzKGZkLCBmYWxzZSk7CiAJaWYgKCFuYW1lbGlzdCkgewogCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIGdldCBjdXJyZW50IGV2ZW50IGxpc3QuXG4iKTsKIAkJcmV0dXJuIC1FSU87CkBAIC0xMzc0LDcgKzE0NzcsNyBAQAogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWJyZWFrOwogCQl9Ci0JCXJldCA9IHdyaXRlX2twcm9iZV90cmFjZV9ldmVudChmZCwgdGV2KTsKKwkJcmV0ID0gd3JpdGVfcHJvYmVfdHJhY2VfZXZlbnQoZmQsIHRldik7CiAJCWlmIChyZXQgPCAwKQogCQkJYnJlYWs7CiAJCS8qIEFkZCBhZGRlZCBldmVudCBuYW1lIHRvIG5hbWVsaXN0ICovCkBAIC0xNDExLDIxICsxNTE0LDIxIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBjb252ZXJ0X3RvX2twcm9iZV90cmFjZV9ldmVudHMoc3RydWN0IHBlcmZfcHJvYmVfZXZlbnQgKnBldiwKLQkJCQkJICBzdHJ1Y3Qga3Byb2JlX3RyYWNlX2V2ZW50ICoqdGV2cywKK3N0YXRpYyBpbnQgY29udmVydF90b19wcm9iZV90cmFjZV9ldmVudHMoc3RydWN0IHBlcmZfcHJvYmVfZXZlbnQgKnBldiwKKwkJCQkJICBzdHJ1Y3QgcHJvYmVfdHJhY2VfZXZlbnQgKip0ZXZzLAogCQkJCQkgIGludCBtYXhfdGV2cykKIHsKIAlzdHJ1Y3Qgc3ltYm9sICpzeW07CiAJaW50IHJldCA9IDAsIGk7Ci0Jc3RydWN0IGtwcm9iZV90cmFjZV9ldmVudCAqdGV2OworCXN0cnVjdCBwcm9iZV90cmFjZV9ldmVudCAqdGV2OwogCiAJLyogQ29udmVydCBwZXJmX3Byb2JlX2V2ZW50IHdpdGggZGVidWdpbmZvICovCi0JcmV0ID0gdHJ5X3RvX2ZpbmRfa3Byb2JlX3RyYWNlX2V2ZW50cyhwZXYsIHRldnMsIG1heF90ZXZzKTsKKwlyZXQgPSB0cnlfdG9fZmluZF9wcm9iZV90cmFjZV9ldmVudHMocGV2LCB0ZXZzLCBtYXhfdGV2cyk7CiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCiAJLyogQWxsb2NhdGUgdHJhY2UgZXZlbnQgYnVmZmVyICovCi0JdGV2ID0gKnRldnMgPSB6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrcHJvYmVfdHJhY2VfZXZlbnQpKTsKKwl0ZXYgPSAqdGV2cyA9IHphbGxvYyhzaXplb2Yoc3RydWN0IHByb2JlX3RyYWNlX2V2ZW50KSk7CiAJaWYgKHRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTQzOCw3ICsxNTQxLDcgQEAKIAl0ZXYtPnBvaW50Lm9mZnNldCA9IHBldi0+cG9pbnQub2Zmc2V0OwogCXRldi0+bmFyZ3MgPSBwZXYtPm5hcmdzOwogCWlmICh0ZXYtPm5hcmdzKSB7Ci0JCXRldi0+YXJncyA9IHphbGxvYyhzaXplb2Yoc3RydWN0IGtwcm9iZV90cmFjZV9hcmcpCisJCXRldi0+YXJncyA9IHphbGxvYyhzaXplb2Yoc3RydWN0IHByb2JlX3RyYWNlX2FyZykKIAkJCQkgICAqIHRldi0+bmFyZ3MpOwogCQlpZiAodGV2LT5hcmdzID09IE5VTEwpIHsKIAkJCXJldCA9IC1FTk9NRU07CkBAIC0xNDc5LDcgKzE1ODIsNyBAQAogCiAJcmV0dXJuIDE7CiBlcnJvcjoKLQljbGVhcl9rcHJvYmVfdHJhY2VfZXZlbnQodGV2KTsKKwljbGVhcl9wcm9iZV90cmFjZV9ldmVudCh0ZXYpOwogCWZyZWUodGV2KTsKIAkqdGV2cyA9IE5VTEw7CiAJcmV0dXJuIHJldDsKQEAgLTE0ODcsNyArMTU5MCw3IEBACiAKIHN0cnVjdCBfX2V2ZW50X3BhY2thZ2UgewogCXN0cnVjdCBwZXJmX3Byb2JlX2V2ZW50CQkqcGV2OwotCXN0cnVjdCBrcHJvYmVfdHJhY2VfZXZlbnQJKnRldnM7CisJc3RydWN0IHByb2JlX3RyYWNlX2V2ZW50CSp0ZXZzOwogCWludAkJCQludGV2czsKIH07CiAKQEAgLTE1MTAsNyArMTYxMyw3IEBACiAJZm9yIChpID0gMDsgaSA8IG5wZXZzOyBpKyspIHsKIAkJcGtnc1tpXS5wZXYgPSAmcGV2c1tpXTsKIAkJLyogQ29udmVydCB3aXRoIG9yIHdpdGhvdXQgZGVidWdpbmZvICovCi0JCXJldCAgPSBjb252ZXJ0X3RvX2twcm9iZV90cmFjZV9ldmVudHMocGtnc1tpXS5wZXYsCisJCXJldCAgPSBjb252ZXJ0X3RvX3Byb2JlX3RyYWNlX2V2ZW50cyhwa2dzW2ldLnBldiwKIAkJCQkJCSAgICAgICZwa2dzW2ldLnRldnMsIG1heF90ZXZzKTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIGVuZDsKQEAgLTE1MTksMjQgKzE2MjIsMjQgQEAKIAogCS8qIExvb3AgMjogYWRkIGFsbCBldmVudHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnBldnMgJiYgcmV0ID49IDA7IGkrKykKLQkJcmV0ID0gX19hZGRfa3Byb2JlX3RyYWNlX2V2ZW50cyhwa2dzW2ldLnBldiwgcGtnc1tpXS50ZXZzLAorCQlyZXQgPSBfX2FkZF9wcm9iZV90cmFjZV9ldmVudHMocGtnc1tpXS5wZXYsIHBrZ3NbaV0udGV2cywKIAkJCQkJCXBrZ3NbaV0ubnRldnMsIGZvcmNlX2FkZCk7CiBlbmQ6CiAJLyogTG9vcCAzOiBjbGVhbnVwIHRyYWNlIGV2ZW50cyAgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnBldnM7IGkrKykKIAkJZm9yIChqID0gMDsgaiA8IHBrZ3NbaV0ubnRldnM7IGorKykKLQkJCWNsZWFyX2twcm9iZV90cmFjZV9ldmVudCgmcGtnc1tpXS50ZXZzW2pdKTsKKwkJCWNsZWFyX3Byb2JlX3RyYWNlX2V2ZW50KCZwa2dzW2ldLnRldnNbal0pOwogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfX2RlbF90cmFjZV9rcHJvYmVfZXZlbnQoaW50IGZkLCBzdHJ1Y3Qgc3RyX25vZGUgKmVudCkKK3N0YXRpYyBpbnQgX19kZWxfdHJhY2VfcHJvYmVfZXZlbnQoaW50IGZkLCBzdHJ1Y3Qgc3RyX25vZGUgKmVudCkKIHsKIAljaGFyICpwOwogCWNoYXIgYnVmWzEyOF07CiAJaW50IHJldDsKIAotCS8qIENvbnZlcnQgZnJvbSBwZXJmLXByb2JlIGV2ZW50IHRvIHRyYWNlLWtwcm9iZSBldmVudCAqLworCS8qIENvbnZlcnQgZnJvbSBwZXJmLXByb2JlIGV2ZW50IHRvIHRyYWNlLXByb2JlIGV2ZW50ICovCiAJcmV0ID0gZV9zbnByaW50ZihidWYsIDEyOCwgIi06JXMiLCBlbnQtPnMpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycm9yOwpAQCAtMTU2Miw3ICsxNjY1LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGRlbF90cmFjZV9rcHJvYmVfZXZlbnQoaW50IGZkLCBjb25zdCBjaGFyICpncm91cCwKK3N0YXRpYyBpbnQgZGVsX3RyYWNlX3Byb2JlX2V2ZW50KGludCBmZCwgY29uc3QgY2hhciAqZ3JvdXAsCiAJCQkJICBjb25zdCBjaGFyICpldmVudCwgc3RydWN0IHN0cmxpc3QgKm5hbWVsaXN0KQogewogCWNoYXIgYnVmWzEyOF07CkBAIC0xNTc5LDcgKzE2ODIsNyBAQAogCQlzdHJsaXN0X19mb3JfZWFjaF9zYWZlKGVudCwgbiwgbmFtZWxpc3QpCiAJCQlpZiAoc3RyZ2xvYm1hdGNoKGVudC0+cywgYnVmKSkgewogCQkJCWZvdW5kKys7Ci0JCQkJcmV0ID0gX19kZWxfdHJhY2Vfa3Byb2JlX2V2ZW50KGZkLCBlbnQpOworCQkJCXJldCA9IF9fZGVsX3RyYWNlX3Byb2JlX2V2ZW50KGZkLCBlbnQpOwogCQkJCWlmIChyZXQgPCAwKQogCQkJCQlicmVhazsKIAkJCQlzdHJsaXN0X19yZW1vdmUobmFtZWxpc3QsIGVudCk7CkBAIC0xNTg4LDcgKzE2OTEsNyBAQAogCQllbnQgPSBzdHJsaXN0X19maW5kKG5hbWVsaXN0LCBidWYpOwogCQlpZiAoZW50KSB7CiAJCQlmb3VuZCsrOwotCQkJcmV0ID0gX19kZWxfdHJhY2Vfa3Byb2JlX2V2ZW50KGZkLCBlbnQpOworCQkJcmV0ID0gX19kZWxfdHJhY2VfcHJvYmVfZXZlbnQoZmQsIGVudCk7CiAJCQlpZiAocmV0ID49IDApCiAJCQkJc3RybGlzdF9fcmVtb3ZlKG5hbWVsaXN0LCBlbnQpOwogCQl9CkBAIC0xNjEyLDcgKzE3MTUsNyBAQAogCQlyZXR1cm4gZmQ7CiAKIAkvKiBHZXQgY3VycmVudCBldmVudCBuYW1lcyAqLwotCW5hbWVsaXN0ID0gZ2V0X2twcm9iZV90cmFjZV9ldmVudF9uYW1lcyhmZCwgdHJ1ZSk7CisJbmFtZWxpc3QgPSBnZXRfcHJvYmVfdHJhY2VfZXZlbnRfbmFtZXMoZmQsIHRydWUpOwogCWlmIChuYW1lbGlzdCA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTYzMyw3ICsxNzM2LDcgQEAKIAkJCWV2ZW50ID0gc3RyOwogCQl9CiAJCXByX2RlYnVnKCJHcm91cDogJXMsIEV2ZW50OiAlc1xuIiwgZ3JvdXAsIGV2ZW50KTsKLQkJcmV0ID0gZGVsX3RyYWNlX2twcm9iZV9ldmVudChmZCwgZ3JvdXAsIGV2ZW50LCBuYW1lbGlzdCk7CisJCXJldCA9IGRlbF90cmFjZV9wcm9iZV9ldmVudChmZCwgZ3JvdXAsIGV2ZW50LCBuYW1lbGlzdCk7CiAJCWZyZWUoc3RyKTsKIAkJaWYgKHJldCA8IDApCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5oIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmgKaW5kZXggZTlkYjFhMi4uNWFmMzkyNCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmgKQEAgLTcsMzMgKzcsMzMgQEAKIGV4dGVybiBib29sIHByb2JlX2V2ZW50X2RyeV9ydW47CiAKIC8qIGtwcm9iZS10cmFjZXIgdHJhY2luZyBwb2ludCAqLwotc3RydWN0IGtwcm9iZV90cmFjZV9wb2ludCB7CitzdHJ1Y3QgcHJvYmVfdHJhY2VfcG9pbnQgewogCWNoYXIJCSpzeW1ib2w7CS8qIEJhc2Ugc3ltYm9sICovCiAJdW5zaWduZWQgbG9uZwlvZmZzZXQ7CQkvKiBPZmZzZXQgZnJvbSBzeW1ib2wgKi8KIAlib29sCQlyZXRwcm9iZTsJLyogUmV0dXJuIHByb2JlIGZsYWcgKi8KIH07CiAKLS8qIGtwcm9iZS10cmFjZXIgdHJhY2luZyBhcmd1bWVudCByZWZlcmVuY2luZyBvZmZzZXQgKi8KLXN0cnVjdCBrcHJvYmVfdHJhY2VfYXJnX3JlZiB7Ci0Jc3RydWN0IGtwcm9iZV90cmFjZV9hcmdfcmVmCSpuZXh0OwkvKiBOZXh0IHJlZmVyZW5jZSAqLworLyogcHJvYmUtdHJhY2VyIHRyYWNpbmcgYXJndW1lbnQgcmVmZXJlbmNpbmcgb2Zmc2V0ICovCitzdHJ1Y3QgcHJvYmVfdHJhY2VfYXJnX3JlZiB7CisJc3RydWN0IHByb2JlX3RyYWNlX2FyZ19yZWYJKm5leHQ7CS8qIE5leHQgcmVmZXJlbmNlICovCiAJbG9uZwkJCQlvZmZzZXQ7CS8qIE9mZnNldCB2YWx1ZSAqLwogfTsKIAogLyoga3Byb2JlLXRyYWNlciB0cmFjaW5nIGFyZ3VtZW50ICovCi1zdHJ1Y3Qga3Byb2JlX3RyYWNlX2FyZyB7CitzdHJ1Y3QgcHJvYmVfdHJhY2VfYXJnIHsKIAljaGFyCQkJCSpuYW1lOwkvKiBBcmd1bWVudCBuYW1lICovCiAJY2hhcgkJCQkqdmFsdWU7CS8qIEJhc2UgdmFsdWUgKi8KIAljaGFyCQkJCSp0eXBlOwkvKiBUeXBlIG5hbWUgKi8KLQlzdHJ1Y3Qga3Byb2JlX3RyYWNlX2FyZ19yZWYJKnJlZjsJLyogUmVmZXJlbmNpbmcgb2Zmc2V0ICovCisJc3RydWN0IHByb2JlX3RyYWNlX2FyZ19yZWYJKnJlZjsJLyogUmVmZXJlbmNpbmcgb2Zmc2V0ICovCiB9OwogCiAvKiBrcHJvYmUtdHJhY2VyIHRyYWNpbmcgZXZlbnQgKHBvaW50ICsgYXJnKSAqLwotc3RydWN0IGtwcm9iZV90cmFjZV9ldmVudCB7CitzdHJ1Y3QgcHJvYmVfdHJhY2VfZXZlbnQgewogCWNoYXIJCQkJKmV2ZW50OwkvKiBFdmVudCBuYW1lICovCiAJY2hhcgkJCQkqZ3JvdXA7CS8qIEdyb3VwIG5hbWUgKi8KLQlzdHJ1Y3Qga3Byb2JlX3RyYWNlX3BvaW50CXBvaW50OwkvKiBUcmFjZSBwb2ludCAqLworCXN0cnVjdCBwcm9iZV90cmFjZV9wb2ludAlwb2ludDsJLyogVHJhY2UgcG9pbnQgKi8KIAlpbnQJCQkJbmFyZ3M7CS8qIE51bWJlciBvZiBhcmdzICovCi0Jc3RydWN0IGtwcm9iZV90cmFjZV9hcmcJCSphcmdzOwkvKiBBcmd1bWVudHMgKi8KKwlzdHJ1Y3QgcHJvYmVfdHJhY2VfYXJnCQkqYXJnczsJLyogQXJndW1lbnRzICovCiB9OwogCiAvKiBQZXJmIHByb2JlIHByb2JpbmcgcG9pbnQgKi8KQEAgLTUwLDYgKzUwLDcgQEAKIHN0cnVjdCBwZXJmX3Byb2JlX2FyZ19maWVsZCB7CiAJc3RydWN0IHBlcmZfcHJvYmVfYXJnX2ZpZWxkCSpuZXh0OwkvKiBOZXh0IGZpZWxkICovCiAJY2hhcgkJCQkqbmFtZTsJLyogTmFtZSBvZiB0aGUgZmllbGQgKi8KKwlsb25nCQkJCWluZGV4OwkvKiBBcnJheSBpbmRleCBudW1iZXIgKi8KIAlib29sCQkJCXJlZjsJLyogUmVmZXJlbmNpbmcgZmxhZyAqLwogfTsKIApAQCAtODUsMzEgKzg2LDI1IEBACiAJaW50CQkJZW5kOwkJLyogRW5kIGxpbmUgbnVtYmVyICovCiAJaW50CQkJb2Zmc2V0OwkJLyogU3RhcnQgbGluZSBvZmZzZXQgKi8KIAljaGFyCQkJKnBhdGg7CQkvKiBSZWFsIHBhdGggbmFtZSAqLworCWNoYXIJCQkqY29tcF9kaXI7CS8qIENvbXBpbGUgZGlyZWN0b3J5ICovCiAJc3RydWN0IGxpc3RfaGVhZAlsaW5lX2xpc3Q7CS8qIFZpc2libGUgbGluZXMgKi8KIH07CiAKIC8qIENvbW1hbmQgc3RyaW5nIHRvIGV2ZW50cyAqLwogZXh0ZXJuIGludCBwYXJzZV9wZXJmX3Byb2JlX2NvbW1hbmQoY29uc3QgY2hhciAqY21kLAogCQkJCSAgICBzdHJ1Y3QgcGVyZl9wcm9iZV9ldmVudCAqcGV2KTsKLWV4dGVybiBpbnQgcGFyc2Vfa3Byb2JlX3RyYWNlX2NvbW1hbmQoY29uc3QgY2hhciAqY21kLAotCQkJCSAgICAgIHN0cnVjdCBrcHJvYmVfdHJhY2VfZXZlbnQgKnRldik7CiAKIC8qIEV2ZW50cyB0byBjb21tYW5kIHN0cmluZyAqLwogZXh0ZXJuIGNoYXIgKnN5bnRoZXNpemVfcGVyZl9wcm9iZV9jb21tYW5kKHN0cnVjdCBwZXJmX3Byb2JlX2V2ZW50ICpwZXYpOwotZXh0ZXJuIGNoYXIgKnN5bnRoZXNpemVfa3Byb2JlX3RyYWNlX2NvbW1hbmQoc3RydWN0IGtwcm9iZV90cmFjZV9ldmVudCAqdGV2KTsKK2V4dGVybiBjaGFyICpzeW50aGVzaXplX3Byb2JlX3RyYWNlX2NvbW1hbmQoc3RydWN0IHByb2JlX3RyYWNlX2V2ZW50ICp0ZXYpOwogZXh0ZXJuIGludCBzeW50aGVzaXplX3BlcmZfcHJvYmVfYXJnKHN0cnVjdCBwZXJmX3Byb2JlX2FyZyAqcGEsIGNoYXIgKmJ1ZiwKIAkJCQkgICAgIHNpemVfdCBsZW4pOwogCiAvKiBDaGVjayB0aGUgcGVyZl9wcm9iZV9ldmVudCBuZWVkcyBkZWJ1Z2luZm8gKi8KIGV4dGVybiBib29sIHBlcmZfcHJvYmVfZXZlbnRfbmVlZF9kd2FyZihzdHJ1Y3QgcGVyZl9wcm9iZV9ldmVudCAqcGV2KTsKIAotLyogQ29udmVydCBmcm9tIGtwcm9iZV90cmFjZV9ldmVudCB0byBwZXJmX3Byb2JlX2V2ZW50ICovCi1leHRlcm4gaW50IGNvbnZlcnRfdG9fcGVyZl9wcm9iZV9ldmVudChzdHJ1Y3Qga3Byb2JlX3RyYWNlX2V2ZW50ICp0ZXYsCi0JCQkJICAgICAgIHN0cnVjdCBwZXJmX3Byb2JlX2V2ZW50ICpwZXYpOwotCiAvKiBSZWxlYXNlIGV2ZW50IGNvbnRlbnRzICovCiBleHRlcm4gdm9pZCBjbGVhcl9wZXJmX3Byb2JlX2V2ZW50KHN0cnVjdCBwZXJmX3Byb2JlX2V2ZW50ICpwZXYpOwotZXh0ZXJuIHZvaWQgY2xlYXJfa3Byb2JlX3RyYWNlX2V2ZW50KHN0cnVjdCBrcHJvYmVfdHJhY2VfZXZlbnQgKnRldik7CiAKIC8qIENvbW1hbmQgc3RyaW5nIHRvIGxpbmUtcmFuZ2UgKi8KIGV4dGVybiBpbnQgcGFyc2VfbGluZV9yYW5nZV9kZXNjKGNvbnN0IGNoYXIgKmNtZCwgc3RydWN0IGxpbmVfcmFuZ2UgKmxyKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYwppbmRleCBkOTY0Y2IxLi44NDBmMWFhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiZXZlbnQuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJzeW1ib2wuaCIKICNpbmNsdWRlICJwcm9iZS1maW5kZXIuaCIKIAogLyogS3Byb2JlIHRyYWNlciBiYXNpYyB0eXBlIGlzIHVwIHRvIHU2NCAqLwpAQCAtMTQzLDEyICsxNDQsMjEgQEAKIAlyZXR1cm4gc3JjOwogfQogCisvKiBHZXQgRFdfQVRfY29tcF9kaXIgKHNob3VsZCBiZSBOVUxMIHdpdGggb2xkZXIgZ2NjKSAqLworc3RhdGljIGNvbnN0IGNoYXIgKmN1X2dldF9jb21wX2RpcihEd2FyZl9EaWUgKmN1X2RpZSkKK3sKKwlEd2FyZl9BdHRyaWJ1dGUgYXR0cjsKKwlpZiAoZHdhcmZfYXR0cihjdV9kaWUsIERXX0FUX2NvbXBfZGlyLCAmYXR0cikgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGR3YXJmX2Zvcm1zdHJpbmcoJmF0dHIpOworfQorCiAvKiBDb21wYXJlIGRpZW5hbWUgYW5kIHRuYW1lICovCiBzdGF0aWMgYm9vbCBkaWVfY29tcGFyZV9uYW1lKER3YXJmX0RpZSAqZHdfZGllLCBjb25zdCBjaGFyICp0bmFtZSkKIHsKIAljb25zdCBjaGFyICpuYW1lOwogCW5hbWUgPSBkd2FyZl9kaWVuYW1lKGR3X2RpZSk7Ci0JcmV0dXJuIG5hbWUgPyBzdHJjbXAodG5hbWUsIG5hbWUpIDogLTE7CisJcmV0dXJuIG5hbWUgPyAoc3RyY21wKHRuYW1lLCBuYW1lKSA9PSAwKSA6IGZhbHNlOwogfQogCiAvKiBHZXQgdHlwZSBkaWUsIGJ1dCBza2lwIHF1YWxpZmllcnMgYW5kIHR5cGVkZWYgKi8KQEAgLTMxOSw3ICszMjksNyBAQAogCXRhZyA9IGR3YXJmX3RhZyhkaWVfbWVtKTsKIAlpZiAoKHRhZyA9PSBEV19UQUdfZm9ybWFsX3BhcmFtZXRlciB8fAogCSAgICAgdGFnID09IERXX1RBR192YXJpYWJsZSkgJiYKLQkgICAgKGRpZV9jb21wYXJlX25hbWUoZGllX21lbSwgbmFtZSkgPT0gMCkpCisJICAgIGRpZV9jb21wYXJlX25hbWUoZGllX21lbSwgbmFtZSkpCiAJCXJldHVybiBESUVfRklORF9DQl9GT1VORDsKIAogCXJldHVybiBESUVfRklORF9DQl9DT05USU5VRTsKQEAgLTMzOCw3ICszNDgsNyBAQAogCWNvbnN0IGNoYXIgKm5hbWUgPSBkYXRhOwogCiAJaWYgKChkd2FyZl90YWcoZGllX21lbSkgPT0gRFdfVEFHX21lbWJlcikgJiYKLQkgICAgKGRpZV9jb21wYXJlX25hbWUoZGllX21lbSwgbmFtZSkgPT0gMCkpCisJICAgIGRpZV9jb21wYXJlX25hbWUoZGllX21lbSwgbmFtZSkpCiAJCXJldHVybiBESUVfRklORF9DQl9GT1VORDsKIAogCXJldHVybiBESUVfRklORF9DQl9TSUJMSU5HOwpAQCAtMzU2LDE0ICszNjYsNTAgQEAKICAqIFByb2JlIGZpbmRlciByZWxhdGVkIGZ1bmN0aW9ucwogICovCiAKLS8qIFNob3cgYSBsb2NhdGlvbiAqLwotc3RhdGljIGludCBjb252ZXJ0X2xvY2F0aW9uKER3YXJmX09wICpvcCwgc3RydWN0IHByb2JlX2ZpbmRlciAqcGYpCitzdGF0aWMgc3RydWN0IHByb2JlX3RyYWNlX2FyZ19yZWYgKmFsbG9jX3RyYWNlX2FyZ19yZWYobG9uZyBvZmZzKQogeworCXN0cnVjdCBwcm9iZV90cmFjZV9hcmdfcmVmICpyZWY7CisJcmVmID0gemFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvYmVfdHJhY2VfYXJnX3JlZikpOworCWlmIChyZWYgIT0gTlVMTCkKKwkJcmVmLT5vZmZzZXQgPSBvZmZzOworCXJldHVybiByZWY7Cit9CisKKy8qIFNob3cgYSBsb2NhdGlvbiAqLworc3RhdGljIGludCBjb252ZXJ0X3ZhcmlhYmxlX2xvY2F0aW9uKER3YXJmX0RpZSAqdnJfZGllLCBzdHJ1Y3QgcHJvYmVfZmluZGVyICpwZikKK3sKKwlEd2FyZl9BdHRyaWJ1dGUgYXR0cjsKKwlEd2FyZl9PcCAqb3A7CisJc2l6ZV90IG5vcHM7CiAJdW5zaWduZWQgaW50IHJlZ247CiAJRHdhcmZfV29yZCBvZmZzID0gMDsKIAlib29sIHJlZiA9IGZhbHNlOwogCWNvbnN0IGNoYXIgKnJlZ3M7Ci0Jc3RydWN0IGtwcm9iZV90cmFjZV9hcmcgKnR2YXIgPSBwZi0+dHZhcjsKKwlzdHJ1Y3QgcHJvYmVfdHJhY2VfYXJnICp0dmFyID0gcGYtPnR2YXI7CisJaW50IHJldDsKKworCS8qIFRPRE86IGhhbmRsZSBtb3JlIHRoYW4gMSBleHBycyAqLworCWlmIChkd2FyZl9hdHRyKHZyX2RpZSwgRFdfQVRfbG9jYXRpb24sICZhdHRyKSA9PSBOVUxMIHx8CisJICAgIGR3YXJmX2dldGxvY2F0aW9uX2FkZHIoJmF0dHIsIHBmLT5hZGRyLCAmb3AsICZub3BzLCAxKSA8PSAwIHx8CisJICAgIG5vcHMgPT0gMCkgeworCQkvKiBUT0RPOiBTdXBwb3J0IGNvbnN0X3ZhbHVlICovCisJCXByX2VycigiRmFpbGVkIHRvIGZpbmQgdGhlIGxvY2F0aW9uIG9mICVzIGF0IHRoaXMgYWRkcmVzcy5cbiIKKwkJICAgICAgICIgUGVyaGFwcywgaXQgaGFzIGJlZW4gb3B0aW1pemVkIG91dC5cbiIsIHBmLT5wdmFyLT52YXIpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlpZiAob3AtPmF0b20gPT0gRFdfT1BfYWRkcikgeworCQkvKiBTdGF0aWMgdmFyaWFibGVzIG9uIG1lbW9yeSAobm90IHN0YWNrKSwgbWFrZSBAdmFybmFtZSAqLworCQlyZXQgPSBzdHJsZW4oZHdhcmZfZGllbmFtZSh2cl9kaWUpKTsKKwkJdHZhci0+dmFsdWUgPSB6YWxsb2MocmV0ICsgMik7CisJCWlmICh0dmFyLT52YWx1ZSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXNucHJpbnRmKHR2YXItPnZhbHVlLCByZXQgKyAyLCAiQCVzIiwgZHdhcmZfZGllbmFtZSh2cl9kaWUpKTsKKwkJdHZhci0+cmVmID0gYWxsb2NfdHJhY2VfYXJnX3JlZigobG9uZylvZmZzKTsKKwkJaWYgKHR2YXItPnJlZiA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiAwOworCX0KIAogCS8qIElmIHRoaXMgaXMgYmFzZWQgb24gZnJhbWUgYnVmZmVyLCBzZXQgdGhlIG9mZnNldCAqLwogCWlmIChvcC0+YXRvbSA9PSBEV19PUF9mYnJlZykgewpAQCAtNDA1LDI3ICs0NTEsNzIgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAocmVmKSB7Ci0JCXR2YXItPnJlZiA9IHphbGxvYyhzaXplb2Yoc3RydWN0IGtwcm9iZV90cmFjZV9hcmdfcmVmKSk7CisJCXR2YXItPnJlZiA9IGFsbG9jX3RyYWNlX2FyZ19yZWYoKGxvbmcpb2Zmcyk7CiAJCWlmICh0dmFyLT5yZWYgPT0gTlVMTCkKIAkJCXJldHVybiAtRU5PTUVNOwotCQl0dmFyLT5yZWYtPm9mZnNldCA9IChsb25nKW9mZnM7CiAJfQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGNvbnZlcnRfdmFyaWFibGVfdHlwZShEd2FyZl9EaWUgKnZyX2RpZSwKLQkJCQkgc3RydWN0IGtwcm9iZV90cmFjZV9hcmcgKnRhcmcpCisJCQkJIHN0cnVjdCBwcm9iZV90cmFjZV9hcmcgKnR2YXIsCisJCQkJIGNvbnN0IGNoYXIgKmNhc3QpCiB7CisJc3RydWN0IHByb2JlX3RyYWNlX2FyZ19yZWYgKipyZWZfcHRyID0gJnR2YXItPnJlZjsKIAlEd2FyZl9EaWUgdHlwZTsKIAljaGFyIGJ1ZlsxNl07CiAJaW50IHJldDsKIAorCS8qIFRPRE86IGNoZWNrIGFsbCB0eXBlcyAqLworCWlmIChjYXN0ICYmIHN0cmNtcChjYXN0LCAic3RyaW5nIikgIT0gMCkgeworCQkvKiBOb24gc3RyaW5nIHR5cGUgaXMgT0sgKi8KKwkJdHZhci0+dHlwZSA9IHN0cmR1cChjYXN0KTsKKwkJcmV0dXJuICh0dmFyLT50eXBlID09IE5VTEwpID8gLUVOT01FTSA6IDA7CisJfQorCiAJaWYgKGRpZV9nZXRfcmVhbF90eXBlKHZyX2RpZSwgJnR5cGUpID09IE5VTEwpIHsKIAkJcHJfd2FybmluZygiRmFpbGVkIHRvIGdldCBhIHR5cGUgaW5mb3JtYXRpb24gb2YgJXMuXG4iLAogCQkJICAgZHdhcmZfZGllbmFtZSh2cl9kaWUpKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCisJcHJfZGVidWcoIiVzIHR5cGUgaXMgJXMuXG4iLAorCQkgZHdhcmZfZGllbmFtZSh2cl9kaWUpLCBkd2FyZl9kaWVuYW1lKCZ0eXBlKSk7CisKKwlpZiAoY2FzdCAmJiBzdHJjbXAoY2FzdCwgInN0cmluZyIpID09IDApIHsJLyogU3RyaW5nIHR5cGUgKi8KKwkJcmV0ID0gZHdhcmZfdGFnKCZ0eXBlKTsKKwkJaWYgKHJldCAhPSBEV19UQUdfcG9pbnRlcl90eXBlICYmCisJCSAgICByZXQgIT0gRFdfVEFHX2FycmF5X3R5cGUpIHsKKwkJCXByX3dhcm5pbmcoIkZhaWxlZCB0byBjYXN0IGludG8gc3RyaW5nOiAiCisJCQkJICAgIiVzKCVzKSBpcyBub3QgYSBwb2ludGVyIG5vciBhcnJheS4iLAorCQkJCSAgIGR3YXJmX2RpZW5hbWUodnJfZGllKSwgZHdhcmZfZGllbmFtZSgmdHlwZSkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKHJldCA9PSBEV19UQUdfcG9pbnRlcl90eXBlKSB7CisJCQlpZiAoZGllX2dldF9yZWFsX3R5cGUoJnR5cGUsICZ0eXBlKSA9PSBOVUxMKSB7CisJCQkJcHJfd2FybmluZygiRmFpbGVkIHRvIGdldCBhIHR5cGUgaW5mb3JtYXRpb24uIik7CisJCQkJcmV0dXJuIC1FTk9FTlQ7CisJCQl9CisJCQl3aGlsZSAoKnJlZl9wdHIpCisJCQkJcmVmX3B0ciA9ICYoKnJlZl9wdHIpLT5uZXh0OworCQkJLyogQWRkIG5ldyByZWZlcmVuY2Ugd2l0aCBvZmZzZXQgKzAgKi8KKwkJCSpyZWZfcHRyID0gemFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvYmVfdHJhY2VfYXJnX3JlZikpOworCQkJaWYgKCpyZWZfcHRyID09IE5VTEwpIHsKKwkJCQlwcl93YXJuaW5nKCJPdXQgb2YgbWVtb3J5IGVycm9yXG4iKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJfQorCQlpZiAoIWRpZV9jb21wYXJlX25hbWUoJnR5cGUsICJjaGFyIikgJiYKKwkJICAgICFkaWVfY29tcGFyZV9uYW1lKCZ0eXBlLCAidW5zaWduZWQgY2hhciIpKSB7CisJCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gY2FzdCBpbnRvIHN0cmluZzogIgorCQkJCSAgICIlcyBpcyBub3QgKHVuc2lnbmVkKSBjaGFyICouIiwKKwkJCQkgICBkd2FyZl9kaWVuYW1lKHZyX2RpZSkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJdHZhci0+dHlwZSA9IHN0cmR1cChjYXN0KTsKKwkJcmV0dXJuICh0dmFyLT50eXBlID09IE5VTEwpID8gLUVOT01FTSA6IDA7CisJfQorCiAJcmV0ID0gZGllX2dldF9ieXRlX3NpemUoJnR5cGUpICogODsKIAlpZiAocmV0KSB7CiAJCS8qIENoZWNrIHRoZSBiaXR3aWR0aCAqLwpAQCAtNDQ1LDggKzUzNiw4IEBACiAJCQkJICAgc3RyZXJyb3IoLXJldCkpOwogCQkJcmV0dXJuIHJldDsKIAkJfQotCQl0YXJnLT50eXBlID0gc3RyZHVwKGJ1Zik7Ci0JCWlmICh0YXJnLT50eXBlID09IE5VTEwpCisJCXR2YXItPnR5cGUgPSBzdHJkdXAoYnVmKTsKKwkJaWYgKHR2YXItPnR5cGUgPT0gTlVMTCkKIAkJCXJldHVybiAtRU5PTUVNOwogCX0KIAlyZXR1cm4gMDsKQEAgLTQ1NCwyMiArNTQ1LDUwIEBACiAKIHN0YXRpYyBpbnQgY29udmVydF92YXJpYWJsZV9maWVsZHMoRHdhcmZfRGllICp2cl9kaWUsIGNvbnN0IGNoYXIgKnZhcm5hbWUsCiAJCQkJICAgIHN0cnVjdCBwZXJmX3Byb2JlX2FyZ19maWVsZCAqZmllbGQsCi0JCQkJICAgIHN0cnVjdCBrcHJvYmVfdHJhY2VfYXJnX3JlZiAqKnJlZl9wdHIsCisJCQkJICAgIHN0cnVjdCBwcm9iZV90cmFjZV9hcmdfcmVmICoqcmVmX3B0ciwKIAkJCQkgICAgRHdhcmZfRGllICpkaWVfbWVtKQogewotCXN0cnVjdCBrcHJvYmVfdHJhY2VfYXJnX3JlZiAqcmVmID0gKnJlZl9wdHI7CisJc3RydWN0IHByb2JlX3RyYWNlX2FyZ19yZWYgKnJlZiA9ICpyZWZfcHRyOwogCUR3YXJmX0RpZSB0eXBlOwogCUR3YXJmX1dvcmQgb2ZmczsKLQlpbnQgcmV0OworCWludCByZXQsIHRhZzsKIAogCXByX2RlYnVnKCJjb252ZXJ0aW5nICVzIGluICVzXG4iLCBmaWVsZC0+bmFtZSwgdmFybmFtZSk7CiAJaWYgKGRpZV9nZXRfcmVhbF90eXBlKHZyX2RpZSwgJnR5cGUpID09IE5VTEwpIHsKIAkJcHJfd2FybmluZygiRmFpbGVkIHRvIGdldCB0aGUgdHlwZSBvZiAlcy5cbiIsIHZhcm5hbWUpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CisJcHJfZGVidWcyKCJWYXIgcmVhbCB0eXBlOiAoJXgpXG4iLCAodW5zaWduZWQpZHdhcmZfZGllb2Zmc2V0KCZ0eXBlKSk7CisJdGFnID0gZHdhcmZfdGFnKCZ0eXBlKTsKIAotCS8qIENoZWNrIHRoZSBwb2ludGVyIGFuZCBkZXJlZmVyZW5jZSAqLwotCWlmIChkd2FyZl90YWcoJnR5cGUpID09IERXX1RBR19wb2ludGVyX3R5cGUpIHsKKwlpZiAoZmllbGQtPm5hbWVbMF0gPT0gJ1snICYmCisJICAgICh0YWcgPT0gRFdfVEFHX2FycmF5X3R5cGUgfHwgdGFnID09IERXX1RBR19wb2ludGVyX3R5cGUpKSB7CisJCWlmIChmaWVsZC0+bmV4dCkKKwkJCS8qIFNhdmUgb3JpZ2luYWwgdHlwZSBmb3IgbmV4dCBmaWVsZCAqLworCQkJbWVtY3B5KGRpZV9tZW0sICZ0eXBlLCBzaXplb2YoKmRpZV9tZW0pKTsKKwkJLyogR2V0IHRoZSB0eXBlIG9mIHRoaXMgYXJyYXkgKi8KKwkJaWYgKGRpZV9nZXRfcmVhbF90eXBlKCZ0eXBlLCAmdHlwZSkgPT0gTlVMTCkgeworCQkJcHJfd2FybmluZygiRmFpbGVkIHRvIGdldCB0aGUgdHlwZSBvZiAlcy5cbiIsIHZhcm5hbWUpOworCQkJcmV0dXJuIC1FTk9FTlQ7CisJCX0KKwkJcHJfZGVidWcyKCJBcnJheSByZWFsIHR5cGU6ICgleClcbiIsCisJCQkgKHVuc2lnbmVkKWR3YXJmX2RpZW9mZnNldCgmdHlwZSkpOworCQlpZiAodGFnID09IERXX1RBR19wb2ludGVyX3R5cGUpIHsKKwkJCXJlZiA9IHphbGxvYyhzaXplb2Yoc3RydWN0IHByb2JlX3RyYWNlX2FyZ19yZWYpKTsKKwkJCWlmIChyZWYgPT0gTlVMTCkKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCWlmICgqcmVmX3B0cikKKwkJCQkoKnJlZl9wdHIpLT5uZXh0ID0gcmVmOworCQkJZWxzZQorCQkJCSpyZWZfcHRyID0gcmVmOworCQl9CisJCXJlZi0+b2Zmc2V0ICs9IGRpZV9nZXRfYnl0ZV9zaXplKCZ0eXBlKSAqIGZpZWxkLT5pbmRleDsKKwkJaWYgKCFmaWVsZC0+bmV4dCkKKwkJCS8qIFNhdmUgdnJfZGllIGZvciBjb252ZXJ0aW5nIHR5cGVzICovCisJCQltZW1jcHkoZGllX21lbSwgdnJfZGllLCBzaXplb2YoKmRpZV9tZW0pKTsKKwkJZ290byBuZXh0OworCX0gZWxzZSBpZiAodGFnID09IERXX1RBR19wb2ludGVyX3R5cGUpIHsKKwkJLyogQ2hlY2sgdGhlIHBvaW50ZXIgYW5kIGRlcmVmZXJlbmNlICovCiAJCWlmICghZmllbGQtPnJlZikgewogCQkJcHJfZXJyKCJTZW1hbnRpYyBlcnJvcjogJXMgbXVzdCBiZSByZWZlcnJlZCBieSAnLT4nXG4iLAogCQkJICAgICAgIGZpZWxkLT5uYW1lKTsKQEAgLTQ4Niw3ICs2MDUsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlyZWYgPSB6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrcHJvYmVfdHJhY2VfYXJnX3JlZikpOworCQlyZWYgPSB6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9iZV90cmFjZV9hcmdfcmVmKSk7CiAJCWlmIChyZWYgPT0gTlVMTCkKIAkJCXJldHVybiAtRU5PTUVNOwogCQlpZiAoKnJlZl9wdHIpCkBAIC00OTUsMTAgKzYxNCwxNSBAQAogCQkJKnJlZl9wdHIgPSByZWY7CiAJfSBlbHNlIHsKIAkJLyogVmVyaWZ5IGl0IGlzIGEgZGF0YSBzdHJ1Y3R1cmUgICovCi0JCWlmIChkd2FyZl90YWcoJnR5cGUpICE9IERXX1RBR19zdHJ1Y3R1cmVfdHlwZSkgeworCQlpZiAodGFnICE9IERXX1RBR19zdHJ1Y3R1cmVfdHlwZSkgewogCQkJcHJfd2FybmluZygiJXMgaXMgbm90IGEgZGF0YSBzdHJ1Y3R1cmUuXG4iLCB2YXJuYW1lKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CisJCWlmIChmaWVsZC0+bmFtZVswXSA9PSAnWycpIHsKKwkJCXByX2VycigiU2VtYW50aWMgZXJyb3I6ICVzIGlzIG5vdCBhIHBvaW50b3Igbm9yIGFycmF5LiIsCisJCQkgICAgICAgdmFybmFtZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCQlpZiAoZmllbGQtPnJlZikgewogCQkJcHJfZXJyKCJTZW1hbnRpYyBlcnJvcjogJXMgbXVzdCBiZSByZWZlcnJlZCBieSAnLidcbiIsCiAJCQkgICAgICAgZmllbGQtPm5hbWUpOwpAQCAtNTI1LDYgKzY0OSw3IEBACiAJfQogCXJlZi0+b2Zmc2V0ICs9IChsb25nKW9mZnM7CiAKK25leHQ6CiAJLyogQ29udmVydGluZyBuZXh0IGZpZWxkICovCiAJaWYgKGZpZWxkLT5uZXh0KQogCQlyZXR1cm4gY29udmVydF92YXJpYWJsZV9maWVsZHMoZGllX21lbSwgZmllbGQtPm5hbWUsCkBAIC01MzYsNTEgKzY2MSwzMiBAQAogLyogU2hvdyBhIHZhcmlhYmxlcyBpbiBrcHJvYmUgZXZlbnQgZm9ybWF0ICovCiBzdGF0aWMgaW50IGNvbnZlcnRfdmFyaWFibGUoRHdhcmZfRGllICp2cl9kaWUsIHN0cnVjdCBwcm9iZV9maW5kZXIgKnBmKQogewotCUR3YXJmX0F0dHJpYnV0ZSBhdHRyOwogCUR3YXJmX0RpZSBkaWVfbWVtOwotCUR3YXJmX09wICpleHByOwotCXNpemVfdCBuZXhwcjsKIAlpbnQgcmV0OwogCi0JaWYgKGR3YXJmX2F0dHIodnJfZGllLCBEV19BVF9sb2NhdGlvbiwgJmF0dHIpID09IE5VTEwpCi0JCWdvdG8gZXJyb3I7Ci0JLyogVE9ETzogaGFuZGxlIG1vcmUgdGhhbiAxIGV4cHJzICovCi0JcmV0ID0gZHdhcmZfZ2V0bG9jYXRpb25fYWRkcigmYXR0ciwgcGYtPmFkZHIsICZleHByLCAmbmV4cHIsIDEpOwotCWlmIChyZXQgPD0gMCB8fCBuZXhwciA9PSAwKQotCQlnb3RvIGVycm9yOworCXByX2RlYnVnKCJDb252ZXJ0aW5nIHZhcmlhYmxlICVzIGludG8gdHJhY2UgZXZlbnQuXG4iLAorCQkgZHdhcmZfZGllbmFtZSh2cl9kaWUpKTsKIAotCXJldCA9IGNvbnZlcnRfbG9jYXRpb24oZXhwciwgcGYpOworCXJldCA9IGNvbnZlcnRfdmFyaWFibGVfbG9jYXRpb24odnJfZGllLCBwZik7CiAJaWYgKHJldCA9PSAwICYmIHBmLT5wdmFyLT5maWVsZCkgewogCQlyZXQgPSBjb252ZXJ0X3ZhcmlhYmxlX2ZpZWxkcyh2cl9kaWUsIHBmLT5wdmFyLT52YXIsCiAJCQkJCSAgICAgIHBmLT5wdmFyLT5maWVsZCwgJnBmLT50dmFyLT5yZWYsCiAJCQkJCSAgICAgICZkaWVfbWVtKTsKIAkJdnJfZGllID0gJmRpZV9tZW07CiAJfQotCWlmIChyZXQgPT0gMCkgewotCQlpZiAocGYtPnB2YXItPnR5cGUpIHsKLQkJCXBmLT50dmFyLT50eXBlID0gc3RyZHVwKHBmLT5wdmFyLT50eXBlKTsKLQkJCWlmIChwZi0+dHZhci0+dHlwZSA9PSBOVUxMKQotCQkJCXJldCA9IC1FTk9NRU07Ci0JCX0gZWxzZQotCQkJcmV0ID0gY29udmVydF92YXJpYWJsZV90eXBlKHZyX2RpZSwgcGYtPnR2YXIpOwotCX0KKwlpZiAocmV0ID09IDApCisJCXJldCA9IGNvbnZlcnRfdmFyaWFibGVfdHlwZSh2cl9kaWUsIHBmLT50dmFyLCBwZi0+cHZhci0+dHlwZSk7CiAJLyogKmV4cHIgd2lsbCBiZSBjYWNoZWQgaW4gbGliZHcuIERvbid0IGZyZWUgaXQuICovCiAJcmV0dXJuIHJldDsKLWVycm9yOgotCS8qIFRPRE86IFN1cHBvcnQgY29uc3RfdmFsdWUgKi8KLQlwcl9lcnIoIkZhaWxlZCB0byBmaW5kIHRoZSBsb2NhdGlvbiBvZiAlcyBhdCB0aGlzIGFkZHJlc3MuXG4iCi0JICAgICAgICIgUGVyaGFwcywgaXQgaGFzIGJlZW4gb3B0aW1pemVkIG91dC5cbiIsIHBmLT5wdmFyLT52YXIpOwotCXJldHVybiAtRU5PRU5UOwogfQogCiAvKiBGaW5kIGEgdmFyaWFibGUgaW4gYSBzdWJwcm9ncmFtIGRpZSAqLwogc3RhdGljIGludCBmaW5kX3ZhcmlhYmxlKER3YXJmX0RpZSAqc3BfZGllLCBzdHJ1Y3QgcHJvYmVfZmluZGVyICpwZikKIHsKLQlEd2FyZl9EaWUgdnJfZGllOworCUR3YXJmX0RpZSB2cl9kaWUsICpzY29wZXM7CiAJY2hhciBidWZbMzJdLCAqcHRyOwotCWludCByZXQ7CisJaW50IHJldCwgbnNjb3BlczsKIAotCS8qIFRPRE86IFN1cHBvcnQgYXJyYXlzICovCiAJaWYgKHBmLT5wdmFyLT5uYW1lKQogCQlwZi0+dHZhci0+bmFtZSA9IHN0cmR1cChwZi0+cHZhci0+bmFtZSk7CiAJZWxzZSB7CkBAIC02MDcsMTggKzcxMywzMiBAQAogCXByX2RlYnVnKCJTZWFyY2hpbmcgJyVzJyB2YXJpYWJsZSBpbiBjb250ZXh0LlxuIiwKIAkJIHBmLT5wdmFyLT52YXIpOwogCS8qIFNlYXJjaCBjaGlsZCBkaWUgZm9yIGxvY2FsIHZhcmlhYmxlcyBhbmQgcGFyYW1ldGVycy4gKi8KLQlpZiAoIWRpZV9maW5kX3ZhcmlhYmxlKHNwX2RpZSwgcGYtPnB2YXItPnZhciwgJnZyX2RpZSkpIHsKKwlpZiAoZGllX2ZpbmRfdmFyaWFibGUoc3BfZGllLCBwZi0+cHZhci0+dmFyLCAmdnJfZGllKSkKKwkJcmV0ID0gY29udmVydF92YXJpYWJsZSgmdnJfZGllLCBwZik7CisJZWxzZSB7CisJCS8qIFNlYXJjaCB1cHBlciBjbGFzcyAqLworCQluc2NvcGVzID0gZHdhcmZfZ2V0c2NvcGVzX2RpZShzcF9kaWUsICZzY29wZXMpOworCQlpZiAobnNjb3BlcyA+IDApIHsKKwkJCXJldCA9IGR3YXJmX2dldHNjb3BldmFyKHNjb3BlcywgbnNjb3BlcywgcGYtPnB2YXItPnZhciwKKwkJCQkJCTAsIE5VTEwsIDAsIDAsICZ2cl9kaWUpOworCQkJaWYgKHJldCA+PSAwKQorCQkJCXJldCA9IGNvbnZlcnRfdmFyaWFibGUoJnZyX2RpZSwgcGYpOworCQkJZWxzZQorCQkJCXJldCA9IC1FTk9FTlQ7CisJCQlmcmVlKHNjb3Blcyk7CisJCX0gZWxzZQorCQkJcmV0ID0gLUVOT0VOVDsKKwl9CisJaWYgKHJldCA8IDApCiAJCXByX3dhcm5pbmcoIkZhaWxlZCB0byBmaW5kICclcycgaW4gdGhpcyBmdW5jdGlvbi5cbiIsCiAJCQkgICBwZi0+cHZhci0+dmFyKTsKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0JfQotCXJldHVybiBjb252ZXJ0X3ZhcmlhYmxlKCZ2cl9kaWUsIHBmKTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKiBTaG93IGEgcHJvYmUgcG9pbnQgdG8gb3V0cHV0IGJ1ZmZlciAqLwogc3RhdGljIGludCBjb252ZXJ0X3Byb2JlX3BvaW50KER3YXJmX0RpZSAqc3BfZGllLCBzdHJ1Y3QgcHJvYmVfZmluZGVyICpwZikKIHsKLQlzdHJ1Y3Qga3Byb2JlX3RyYWNlX2V2ZW50ICp0ZXY7CisJc3RydWN0IHByb2JlX3RyYWNlX2V2ZW50ICp0ZXY7CiAJRHdhcmZfQWRkciBlYWRkcjsKIAlEd2FyZl9EaWUgZGllX21lbTsKIAljb25zdCBjaGFyICpuYW1lOwpAQCAtNjgzLDcgKzgwMyw3IEBACiAKIAkvKiBGaW5kIGVhY2ggYXJndW1lbnQgKi8KIAl0ZXYtPm5hcmdzID0gcGYtPnBldi0+bmFyZ3M7Ci0JdGV2LT5hcmdzID0gemFsbG9jKHNpemVvZihzdHJ1Y3Qga3Byb2JlX3RyYWNlX2FyZykgKiB0ZXYtPm5hcmdzKTsKKwl0ZXYtPmFyZ3MgPSB6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9iZV90cmFjZV9hcmcpICogdGV2LT5uYXJncyk7CiAJaWYgKHRldi0+YXJncyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlmb3IgKGkgPSAwOyBpIDwgcGYtPnBldi0+bmFyZ3M7IGkrKykgewpAQCAtODk3LDcgKzEwMTcsNyBAQAogCiAJLyogQ2hlY2sgdGFnIGFuZCBkaWVuYW1lICovCiAJaWYgKGR3YXJmX3RhZyhzcF9kaWUpICE9IERXX1RBR19zdWJwcm9ncmFtIHx8Ci0JICAgIGRpZV9jb21wYXJlX25hbWUoc3BfZGllLCBwcC0+ZnVuY3Rpb24pICE9IDApCisJICAgICFkaWVfY29tcGFyZV9uYW1lKHNwX2RpZSwgcHAtPmZ1bmN0aW9uKSkKIAkJcmV0dXJuIERXQVJGX0NCX09LOwogCiAJcGYtPmZuYW1lID0gZHdhcmZfZGVjbF9maWxlKHNwX2RpZSk7CkBAIC05NDAsOSArMTA2MCw5IEBACiAJcmV0dXJuIF9wYXJhbS5yZXR2YWw7CiB9CiAKLS8qIEZpbmQga3Byb2JlX3RyYWNlX2V2ZW50cyBzcGVjaWZpZWQgYnkgcGVyZl9wcm9iZV9ldmVudCBmcm9tIGRlYnVnaW5mbyAqLwotaW50IGZpbmRfa3Byb2JlX3RyYWNlX2V2ZW50cyhpbnQgZmQsIHN0cnVjdCBwZXJmX3Byb2JlX2V2ZW50ICpwZXYsCi0JCQkgICAgIHN0cnVjdCBrcHJvYmVfdHJhY2VfZXZlbnQgKip0ZXZzLCBpbnQgbWF4X3RldnMpCisvKiBGaW5kIHByb2JlX3RyYWNlX2V2ZW50cyBzcGVjaWZpZWQgYnkgcGVyZl9wcm9iZV9ldmVudCBmcm9tIGRlYnVnaW5mbyAqLworaW50IGZpbmRfcHJvYmVfdHJhY2VfZXZlbnRzKGludCBmZCwgc3RydWN0IHBlcmZfcHJvYmVfZXZlbnQgKnBldiwKKwkJCSAgICAgc3RydWN0IHByb2JlX3RyYWNlX2V2ZW50ICoqdGV2cywgaW50IG1heF90ZXZzKQogewogCXN0cnVjdCBwcm9iZV9maW5kZXIgcGYgPSB7LnBldiA9IHBldiwgLm1heF90ZXZzID0gbWF4X3RldnN9OwogCXN0cnVjdCBwZXJmX3Byb2JlX3BvaW50ICpwcCA9ICZwZXYtPnBvaW50OwpAQCAtOTUyLDcgKzEwNzIsNyBAQAogCUR3YXJmICpkYmc7CiAJaW50IHJldCA9IDA7CiAKLQlwZi50ZXZzID0gemFsbG9jKHNpemVvZihzdHJ1Y3Qga3Byb2JlX3RyYWNlX2V2ZW50KSAqIG1heF90ZXZzKTsKKwlwZi50ZXZzID0gemFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvYmVfdHJhY2VfZXZlbnQpICogbWF4X3RldnMpOwogCWlmIChwZi50ZXZzID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCSp0ZXZzID0gcGYudGV2czsKQEAgLTEwOTYsNyArMTIxNiw3IEBACiBzdGF0aWMgaW50IGxpbmVfcmFuZ2VfYWRkX2xpbmUoY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBpbnQgbGluZW5vLAogCQkJICAgICAgIHN0cnVjdCBsaW5lX3JhbmdlICpscikKIHsKLQkvKiBDb3B5IHJlYWwgcGF0aCAqLworCS8qIENvcHkgc291cmNlIHBhdGggKi8KIAlpZiAoIWxyLT5wYXRoKSB7CiAJCWxyLT5wYXRoID0gc3RyZHVwKHNyYyk7CiAJCWlmIChsci0+cGF0aCA9PSBOVUxMKQpAQCAtMTIyMCw3ICsxMzQwLDcgQEAKIAlzdHJ1Y3QgbGluZV9yYW5nZSAqbHIgPSBsZi0+bHI7CiAKIAlpZiAoZHdhcmZfdGFnKHNwX2RpZSkgPT0gRFdfVEFHX3N1YnByb2dyYW0gJiYKLQkgICAgZGllX2NvbXBhcmVfbmFtZShzcF9kaWUsIGxyLT5mdW5jdGlvbikgPT0gMCkgeworCSAgICBkaWVfY29tcGFyZV9uYW1lKHNwX2RpZSwgbHItPmZ1bmN0aW9uKSkgewogCQlsZi0+Zm5hbWUgPSBkd2FyZl9kZWNsX2ZpbGUoc3BfZGllKTsKIAkJZHdhcmZfZGVjbF9saW5lKHNwX2RpZSwgJmxyLT5vZmZzZXQpOwogCQlwcl9kZWJ1ZygiZm5hbWU6ICVzLCBsaW5lbm86JWRcbiIsIGxmLT5mbmFtZSwgbHItPm9mZnNldCk7CkBAIC0xMjYzLDYgKzEzODMsNyBAQAogCXNpemVfdCBjdWhsOwogCUR3YXJmX0RpZSAqZGllcDsKIAlEd2FyZiAqZGJnOworCWNvbnN0IGNoYXIgKmNvbXBfZGlyOwogCiAJZGJnID0gZHdhcmZfYmVnaW4oZmQsIERXQVJGX0NfUkVBRCk7CiAJaWYgKCFkYmcpIHsKQEAgLTEyOTgsNyArMTQxOSwxOCBAQAogCQl9CiAJCW9mZiA9IG5vZmY7CiAJfQotCXByX2RlYnVnKCJwYXRoOiAlbHhcbiIsICh1bnNpZ25lZCBsb25nKWxyLT5wYXRoKTsKKworCS8qIFN0b3JlIGNvbXBfZGlyICovCisJaWYgKGxmLmZvdW5kKSB7CisJCWNvbXBfZGlyID0gY3VfZ2V0X2NvbXBfZGlyKCZsZi5jdV9kaWUpOworCQlpZiAoY29tcF9kaXIpIHsKKwkJCWxyLT5jb21wX2RpciA9IHN0cmR1cChjb21wX2Rpcik7CisJCQlpZiAoIWxyLT5jb21wX2RpcikKKwkJCQlyZXQgPSAtRU5PTUVNOworCQl9CisJfQorCisJcHJfZGVidWcoInBhdGg6ICVzXG4iLCBsci0+cGF0aCk7CiAJZHdhcmZfZW5kKGRiZyk7CiAKIAlyZXR1cm4gKHJldCA8IDApID8gcmV0IDogbGYuZm91bmQ7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmggYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmgKaW5kZXggZTFmNjFkYy4uNDUwN2Q1MSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuaApAQCAtMTYsOSArMTYsOSBAQAogfQogCiAjaWZkZWYgRFdBUkZfU1VQUE9SVAotLyogRmluZCBrcHJvYmVfdHJhY2VfZXZlbnRzIHNwZWNpZmllZCBieSBwZXJmX3Byb2JlX2V2ZW50IGZyb20gZGVidWdpbmZvICovCi1leHRlcm4gaW50IGZpbmRfa3Byb2JlX3RyYWNlX2V2ZW50cyhpbnQgZmQsIHN0cnVjdCBwZXJmX3Byb2JlX2V2ZW50ICpwZXYsCi0JCQkJICAgIHN0cnVjdCBrcHJvYmVfdHJhY2VfZXZlbnQgKip0ZXZzLAorLyogRmluZCBwcm9iZV90cmFjZV9ldmVudHMgc3BlY2lmaWVkIGJ5IHBlcmZfcHJvYmVfZXZlbnQgZnJvbSBkZWJ1Z2luZm8gKi8KK2V4dGVybiBpbnQgZmluZF9wcm9iZV90cmFjZV9ldmVudHMoaW50IGZkLCBzdHJ1Y3QgcGVyZl9wcm9iZV9ldmVudCAqcGV2LAorCQkJCSAgICBzdHJ1Y3QgcHJvYmVfdHJhY2VfZXZlbnQgKip0ZXZzLAogCQkJCSAgICBpbnQgbWF4X3RldnMpOwogCiAvKiBGaW5kIGEgcGVyZl9wcm9iZV9wb2ludCBmcm9tIGRlYnVnaW5mbyAqLwpAQCAtMzMsNyArMzMsNyBAQAogCiBzdHJ1Y3QgcHJvYmVfZmluZGVyIHsKIAlzdHJ1Y3QgcGVyZl9wcm9iZV9ldmVudAkqcGV2OwkJLyogVGFyZ2V0IHByb2JlIGV2ZW50ICovCi0Jc3RydWN0IGtwcm9iZV90cmFjZV9ldmVudCAqdGV2czsJLyogUmVzdWx0IHRyYWNlIGV2ZW50cyAqLworCXN0cnVjdCBwcm9iZV90cmFjZV9ldmVudCAqdGV2czsJCS8qIFJlc3VsdCB0cmFjZSBldmVudHMgKi8KIAlpbnQJCQludGV2czsJCS8qIE51bWJlciBvZiB0cmFjZSBldmVudHMgKi8KIAlpbnQJCQltYXhfdGV2czsJLyogTWF4IG51bWJlciBvZiB0cmFjZSBldmVudHMgKi8KIApAQCAtNTAsNyArNTAsNyBAQAogI2VuZGlmCiAJRHdhcmZfT3AJCSpmYl9vcHM7CS8qIEZyYW1lIGJhc2UgYXR0cmlidXRlICovCiAJc3RydWN0IHBlcmZfcHJvYmVfYXJnCSpwdmFyOwkJLyogQ3VycmVudCB0YXJnZXQgdmFyaWFibGUgKi8KLQlzdHJ1Y3Qga3Byb2JlX3RyYWNlX2FyZwkqdHZhcjsJCS8qIEN1cnJlbnQgcmVzdWx0IHZhcmlhYmxlICovCisJc3RydWN0IHByb2JlX3RyYWNlX2FyZwkqdHZhcjsJCS8qIEN1cnJlbnQgcmVzdWx0IHZhcmlhYmxlICovCiB9OwogCiBzdHJ1Y3QgbGluZV9maW5kZXIgewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKaW5kZXggYzQyMmNkNi4uZmE5ZDY1MiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYworKysgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCkBAIC0yNyw4ICsyNywxMCBAQAogCiAJc2VsZi0+ZmQgPSBvcGVuKHNlbGYtPmZpbGVuYW1lLCBPX1JET05MWSk7CiAJaWYgKHNlbGYtPmZkIDwgMCkgewotCQlwcl9lcnIoImZhaWxlZCB0byBvcGVuIGZpbGU6ICVzIiwgc2VsZi0+ZmlsZW5hbWUpOwotCQlpZiAoIXN0cmNtcChzZWxmLT5maWxlbmFtZSwgInBlcmYuZGF0YSIpKQorCQlpbnQgZXJyID0gZXJybm87CisKKwkJcHJfZXJyKCJmYWlsZWQgdG8gb3BlbiAlczogJXMiLCBzZWxmLT5maWxlbmFtZSwgc3RyZXJyb3IoZXJyKSk7CisJCWlmIChlcnIgPT0gRU5PRU5UICYmICFzdHJjbXAoc2VsZi0+ZmlsZW5hbWUsICJwZXJmLmRhdGEiKSkKIAkJCXByX2VycigiICAodHJ5ICdwZXJmIHJlY29yZCcgZmlyc3QpIik7CiAJCXByX2VycigiXG4iKTsKIAkJcmV0dXJuIC1lcnJubzsKQEAgLTc3LDYgKzc5LDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgcGVyZl9zZXNzaW9uX19kZXN0cm95X2tlcm5lbF9tYXBzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCit7CisJbWFjaGluZV9fZGVzdHJveV9rZXJuZWxfbWFwcygmc2VsZi0+aG9zdF9tYWNoaW5lKTsKKwltYWNoaW5lc19fZGVzdHJveV9ndWVzdF9rZXJuZWxfbWFwcygmc2VsZi0+bWFjaGluZXMpOworfQorCiBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpwZXJmX3Nlc3Npb25fX25ldyhjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IG1vZGUsIGJvb2wgZm9yY2UsIGJvb2wgcmVwaXBlKQogewogCXNpemVfdCBsZW4gPSBmaWxlbmFtZSA/IHN0cmxlbihmaWxlbmFtZSkgKyAxIDogMDsKQEAgLTk0LDggKzEwMiw2IEBACiAJc2VsZi0+aGlzdHNfdHJlZSA9IFJCX1JPT1Q7CiAJc2VsZi0+bGFzdF9tYXRjaCA9IE5VTEw7CiAJc2VsZi0+bW1hcF93aW5kb3cgPSAzMjsKLQlzZWxmLT5jd2QgPSBOVUxMOwotCXNlbGYtPmN3ZGxlbiA9IDA7CiAJc2VsZi0+bWFjaGluZXMgPSBSQl9ST09UOwogCXNlbGYtPnJlcGlwZSA9IHJlcGlwZTsKIAlJTklUX0xJU1RfSEVBRCgmc2VsZi0+b3JkZXJlZF9zYW1wbGVzLnNhbXBsZXNfaGVhZCk7CkBAIC0xMjQsMTYgKzEzMCw0MyBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgdm9pZCBwZXJmX3Nlc3Npb25fX2RlbGV0ZV9kZWFkX3RocmVhZHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZikKK3sKKwlzdHJ1Y3QgdGhyZWFkICpuLCAqdDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0LCBuLCAmc2VsZi0+ZGVhZF90aHJlYWRzLCBub2RlKSB7CisJCWxpc3RfZGVsKCZ0LT5ub2RlKTsKKwkJdGhyZWFkX19kZWxldGUodCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwZXJmX3Nlc3Npb25fX2RlbGV0ZV90aHJlYWRzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCit7CisJc3RydWN0IHJiX25vZGUgKm5kID0gcmJfZmlyc3QoJnNlbGYtPnRocmVhZHMpOworCisJd2hpbGUgKG5kKSB7CisJCXN0cnVjdCB0aHJlYWQgKnQgPSByYl9lbnRyeShuZCwgc3RydWN0IHRocmVhZCwgcmJfbm9kZSk7CisKKwkJcmJfZXJhc2UoJnQtPnJiX25vZGUsICZzZWxmLT50aHJlYWRzKTsKKwkJbmQgPSByYl9uZXh0KG5kKTsKKwkJdGhyZWFkX19kZWxldGUodCk7CisJfQorfQorCiB2b2lkIHBlcmZfc2Vzc2lvbl9fZGVsZXRlKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCiB7CiAJcGVyZl9oZWFkZXJfX2V4aXQoJnNlbGYtPmhlYWRlcik7CisJcGVyZl9zZXNzaW9uX19kZXN0cm95X2tlcm5lbF9tYXBzKHNlbGYpOworCXBlcmZfc2Vzc2lvbl9fZGVsZXRlX2RlYWRfdGhyZWFkcyhzZWxmKTsKKwlwZXJmX3Nlc3Npb25fX2RlbGV0ZV90aHJlYWRzKHNlbGYpOworCW1hY2hpbmVfX2V4aXQoJnNlbGYtPmhvc3RfbWFjaGluZSk7CiAJY2xvc2Uoc2VsZi0+ZmQpOwotCWZyZWUoc2VsZi0+Y3dkKTsKIAlmcmVlKHNlbGYpOwogfQogCiB2b2lkIHBlcmZfc2Vzc2lvbl9fcmVtb3ZlX3RocmVhZChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLCBzdHJ1Y3QgdGhyZWFkICp0aCkKIHsKKwlzZWxmLT5sYXN0X21hdGNoID0gTlVMTDsKIAlyYl9lcmFzZSgmdGgtPnJiX25vZGUsICZzZWxmLT50aHJlYWRzKTsKIAkvKgogCSAqIFdlIG1heSBoYXZlIHJlZmVyZW5jZXMgdG8gdGhpcyB0aHJlYWQsIGZvciBpbnN0YW5jZSBpbiBzb21lIGhpc3RfZW50cnkKQEAgLTgzMCwyMyArODYzLDYgQEAKIAlpZiAocGVyZl9zZXNzaW9uX19yZWdpc3Rlcl9pZGxlX3RocmVhZChzZWxmKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmICghc3ltYm9sX2NvbmYuZnVsbF9wYXRocykgewotCQljaGFyIGJmW1BBVEhfTUFYXTsKLQotCQlpZiAoZ2V0Y3dkKGJmLCBzaXplb2YoYmYpKSA9PSBOVUxMKSB7Ci0JCQllcnIgPSAtZXJybm87Ci1vdXRfZ2V0Y3dkX2VycjoKLQkJCXByX2VycigiZmFpbGVkIHRvIGdldCB0aGUgY3VycmVudCBkaXJlY3RvcnlcbiIpOwotCQkJZ290byBvdXRfZXJyOwotCQl9Ci0JCXNlbGYtPmN3ZCA9IHN0cmR1cChiZik7Ci0JCWlmIChzZWxmLT5jd2QgPT0gTlVMTCkgewotCQkJZXJyID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0X2dldGN3ZF9lcnI7Ci0JCX0KLQkJc2VsZi0+Y3dkbGVuID0gc3RybGVuKHNlbGYtPmN3ZCk7Ci0JfQotCiAJaWYgKCFzZWxmLT5mZF9waXBlKQogCQllcnIgPSBfX3BlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc2VsZiwKIAkJCQkJCSAgICAgc2VsZi0+aGVhZGVyLmRhdGFfb2Zmc2V0LApAQCAtODU0LDcgKzg3MCw3IEBACiAJCQkJCQkgICAgIHNlbGYtPnNpemUsIG9wcyk7CiAJZWxzZQogCQllcnIgPSBfX3BlcmZfc2Vzc2lvbl9fcHJvY2Vzc19waXBlX2V2ZW50cyhzZWxmLCBvcHMpOwotb3V0X2VycjoKKwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zb3J0LmMgYi90b29scy9wZXJmL3V0aWwvc29ydC5jCmluZGV4IDIzMTZjYjUuLjFjNjFhNGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zb3J0LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3NvcnQuYwpAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlICJzb3J0LmgiCisjaW5jbHVkZSAiaGlzdC5oIgogCiByZWdleF90CQlwYXJlbnRfcmVnZXg7CiBjb25zdCBjaGFyCWRlZmF1bHRfcGFyZW50X3BhdHRlcm5bXSA9ICJec3lzX3xeZG9fcGFnZV9mYXVsdCI7CkBAIC0xMCwxMCArMTEsNiBAQAogCiBlbnVtIHNvcnRfdHlwZQlzb3J0X19maXJzdF9kaW1lbnNpb247CiAKLXVuc2lnbmVkIGludCBkc29zX19jb2xfd2lkdGg7Ci11bnNpZ25lZCBpbnQgY29tbXNfX2NvbF93aWR0aDsKLXVuc2lnbmVkIGludCB0aHJlYWRzX19jb2xfd2lkdGg7Ci1zdGF0aWMgdW5zaWduZWQgaW50IHBhcmVudF9zeW1ib2xfX2NvbF93aWR0aDsKIGNoYXIgKiBmaWVsZF9zZXA7CiAKIExJU1RfSEVBRChoaXN0X2VudHJ5X19zb3J0X2xpc3QpOwpAQCAtMjgsMTIgKzI1LDE0IEBACiAJCQkJICAgIHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgd2lkdGgpOwogc3RhdGljIGludCBoaXN0X2VudHJ5X19wYXJlbnRfc25wcmludGYoc3RydWN0IGhpc3RfZW50cnkgKnNlbGYsIGNoYXIgKmJmLAogCQkJCSAgICAgICBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgaW50IHdpZHRoKTsKK3N0YXRpYyBpbnQgaGlzdF9lbnRyeV9fY3B1X3NucHJpbnRmKHN0cnVjdCBoaXN0X2VudHJ5ICpzZWxmLCBjaGFyICpiZiwKKwkJCQkgICAgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGludCB3aWR0aCk7CiAKIHN0cnVjdCBzb3J0X2VudHJ5IHNvcnRfdGhyZWFkID0gewogCS5zZV9oZWFkZXIJPSAiQ29tbWFuZDogIFBpZCIsCiAJLnNlX2NtcAkJPSBzb3J0X190aHJlYWRfY21wLAogCS5zZV9zbnByaW50Zgk9IGhpc3RfZW50cnlfX3RocmVhZF9zbnByaW50ZiwKLQkuc2Vfd2lkdGgJPSAmdGhyZWFkc19fY29sX3dpZHRoLAorCS5zZV93aWR0aF9pZHgJPSBISVNUQ19USFJFQUQsCiB9OwogCiBzdHJ1Y3Qgc29ydF9lbnRyeSBzb3J0X2NvbW0gPSB7CkBAIC00MSwyNyArNDAsMzUgQEAKIAkuc2VfY21wCQk9IHNvcnRfX2NvbW1fY21wLAogCS5zZV9jb2xsYXBzZQk9IHNvcnRfX2NvbW1fY29sbGFwc2UsCiAJLnNlX3NucHJpbnRmCT0gaGlzdF9lbnRyeV9fY29tbV9zbnByaW50ZiwKLQkuc2Vfd2lkdGgJPSAmY29tbXNfX2NvbF93aWR0aCwKKwkuc2Vfd2lkdGhfaWR4CT0gSElTVENfQ09NTSwKIH07CiAKIHN0cnVjdCBzb3J0X2VudHJ5IHNvcnRfZHNvID0gewogCS5zZV9oZWFkZXIJPSAiU2hhcmVkIE9iamVjdCIsCiAJLnNlX2NtcAkJPSBzb3J0X19kc29fY21wLAogCS5zZV9zbnByaW50Zgk9IGhpc3RfZW50cnlfX2Rzb19zbnByaW50ZiwKLQkuc2Vfd2lkdGgJPSAmZHNvc19fY29sX3dpZHRoLAorCS5zZV93aWR0aF9pZHgJPSBISVNUQ19EU08sCiB9OwogCiBzdHJ1Y3Qgc29ydF9lbnRyeSBzb3J0X3N5bSA9IHsKIAkuc2VfaGVhZGVyCT0gIlN5bWJvbCIsCiAJLnNlX2NtcAkJPSBzb3J0X19zeW1fY21wLAogCS5zZV9zbnByaW50Zgk9IGhpc3RfZW50cnlfX3N5bV9zbnByaW50ZiwKKwkuc2Vfd2lkdGhfaWR4CT0gSElTVENfU1lNQk9MLAogfTsKIAogc3RydWN0IHNvcnRfZW50cnkgc29ydF9wYXJlbnQgPSB7CiAJLnNlX2hlYWRlcgk9ICJQYXJlbnQgc3ltYm9sIiwKIAkuc2VfY21wCQk9IHNvcnRfX3BhcmVudF9jbXAsCiAJLnNlX3NucHJpbnRmCT0gaGlzdF9lbnRyeV9fcGFyZW50X3NucHJpbnRmLAotCS5zZV93aWR0aAk9ICZwYXJlbnRfc3ltYm9sX19jb2xfd2lkdGgsCisJLnNlX3dpZHRoX2lkeAk9IEhJU1RDX1BBUkVOVCwKK307CisgCitzdHJ1Y3Qgc29ydF9lbnRyeSBzb3J0X2NwdSA9IHsKKwkuc2VfaGVhZGVyICAgICAgPSAiQ1BVIiwKKwkuc2VfY21wCSAgICAgICAgPSBzb3J0X19jcHVfY21wLAorCS5zZV9zbnByaW50ZiAgICA9IGhpc3RfZW50cnlfX2NwdV9zbnByaW50ZiwKKwkuc2Vfd2lkdGhfaWR4CT0gSElTVENfQ1BVLAogfTsKIAogc3RydWN0IHNvcnRfZGltZW5zaW9uIHsKQEAgLTc2LDYgKzgzLDcgQEAKIAl7IC5uYW1lID0gImRzbyIsCS5lbnRyeSA9ICZzb3J0X2RzbywJfSwKIAl7IC5uYW1lID0gInN5bWJvbCIsCS5lbnRyeSA9ICZzb3J0X3N5bSwJfSwKIAl7IC5uYW1lID0gInBhcmVudCIsCS5lbnRyeSA9ICZzb3J0X3BhcmVudCwJfSwKKwl7IC5uYW1lID0gImNwdSIsCS5lbnRyeSA9ICZzb3J0X2NwdSwJfSwKIH07CiAKIGludDY0X3QgY21wX251bGwodm9pZCAqbCwgdm9pZCAqcikKQEAgLTI0Miw2ICsyNTAsMjAgQEAKIAkJCSAgICAgIHNlbGYtPnBhcmVudCA/IHNlbGYtPnBhcmVudC0+bmFtZSA6ICJbb3RoZXJdIik7CiB9CiAKKy8qIC0tc29ydCBjcHUgKi8KKworaW50NjRfdAorc29ydF9fY3B1X2NtcChzdHJ1Y3QgaGlzdF9lbnRyeSAqbGVmdCwgc3RydWN0IGhpc3RfZW50cnkgKnJpZ2h0KQoreworCXJldHVybiByaWdodC0+Y3B1IC0gbGVmdC0+Y3B1OworfQorCitzdGF0aWMgaW50IGhpc3RfZW50cnlfX2NwdV9zbnByaW50ZihzdHJ1Y3QgaGlzdF9lbnRyeSAqc2VsZiwgY2hhciAqYmYsCisJCQkJICAgICAgIHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgd2lkdGgpCit7CisJcmV0dXJuIHJlcHNlcF9zbnByaW50ZihiZiwgc2l6ZSwgIiUtKmQiLCB3aWR0aCwgc2VsZi0+Y3B1KTsKK30KKwogaW50IHNvcnRfZGltZW5zaW9uX19hZGQoY29uc3QgY2hhciAqdG9rKQogewogCXVuc2lnbmVkIGludCBpOwpAQCAtMjgxLDYgKzMwMyw4IEBACiAJCQkJc29ydF9fZmlyc3RfZGltZW5zaW9uID0gU09SVF9TWU07CiAJCQllbHNlIGlmICghc3RyY21wKHNkLT5uYW1lLCAicGFyZW50IikpCiAJCQkJc29ydF9fZmlyc3RfZGltZW5zaW9uID0gU09SVF9QQVJFTlQ7CisJCQllbHNlIGlmICghc3RyY21wKHNkLT5uYW1lLCAiY3B1IikpCisJCQkJc29ydF9fZmlyc3RfZGltZW5zaW9uID0gU09SVF9DUFU7CiAJCX0KIAogCQlsaXN0X2FkZF90YWlsKCZzZC0+ZW50cnktPmxpc3QsICZoaXN0X2VudHJ5X19zb3J0X2xpc3QpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3NvcnQuaCBiL3Rvb2xzL3BlcmYvdXRpbC9zb3J0LmgKaW5kZXggMGQ2MWM0MC4uNDZlNTMxZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3NvcnQuaAorKysgYi90b29scy9wZXJmL3V0aWwvc29ydC5oCkBAIC0zNiwxMSArMzYsMTQgQEAKIGV4dGVybiBzdHJ1Y3Qgc29ydF9lbnRyeSBzb3J0X2RzbzsKIGV4dGVybiBzdHJ1Y3Qgc29ydF9lbnRyeSBzb3J0X3N5bTsKIGV4dGVybiBzdHJ1Y3Qgc29ydF9lbnRyeSBzb3J0X3BhcmVudDsKLWV4dGVybiB1bnNpZ25lZCBpbnQgZHNvc19fY29sX3dpZHRoOwotZXh0ZXJuIHVuc2lnbmVkIGludCBjb21tc19fY29sX3dpZHRoOwotZXh0ZXJuIHVuc2lnbmVkIGludCB0aHJlYWRzX19jb2xfd2lkdGg7CiBleHRlcm4gZW51bSBzb3J0X3R5cGUgc29ydF9fZmlyc3RfZGltZW5zaW9uOwogCisvKioKKyAqIHN0cnVjdCBoaXN0X2VudHJ5IC0gaGlzdG9ncmFtIGVudHJ5CisgKgorICogQHJvd19vZmZzZXQgLSBvZmZzZXQgZnJvbSB0aGUgZmlyc3QgY2FsbGNoYWluIGV4cGFuZGVkIHRvIGFwcGVhciBvbiBzY3JlZW4KKyAqIEBucl9yb3dzIC0gcm93cyBleHBhbmRlZCBpbiBjYWxsY2hhaW4sIHJlY2FsY3VsYXRlZCBvbiBmb2xkaW5nL3VuZm9sZGluZworICovCiBzdHJ1Y3QgaGlzdF9lbnRyeSB7CiAJc3RydWN0IHJiX25vZGUJCXJiX25vZGU7CiAJdTY0CQkJcGVyaW9kOwpAQCAtNTEsNyArNTQsMTQgQEAKIAlzdHJ1Y3QgbWFwX3N5bWJvbAltczsKIAlzdHJ1Y3QgdGhyZWFkCQkqdGhyZWFkOwogCXU2NAkJCWlwOworCXMzMgkJCWNwdTsKIAl1MzIJCQlucl9ldmVudHM7CisKKwkvKiBYWFggVGhlc2UgdHdvIHNob3VsZCBtb3ZlIHRvIHNvbWUgdHJlZSB3aWRnZXQgbGliICovCisJdTE2CQkJcm93X29mZnNldDsKKwl1MTYJCQlucl9yb3dzOworCisJYm9vbAkJCWluaXRfaGF2ZV9jaGlsZHJlbjsKIAljaGFyCQkJbGV2ZWw7CiAJdTgJCQlmaWx0ZXJlZDsKIAlzdHJ1Y3Qgc3ltYm9sCQkqcGFyZW50OwpAQCAtNjgsNyArNzgsOCBAQAogCVNPUlRfQ09NTSwKIAlTT1JUX0RTTywKIAlTT1JUX1NZTSwKLQlTT1JUX1BBUkVOVAorCVNPUlRfUEFSRU5ULAorCVNPUlRfQ1BVLAogfTsKIAogLyoKQEAgLTg0LDcgKzk1LDcgQEAKIAlpbnQ2NF90ICgqc2VfY29sbGFwc2UpKHN0cnVjdCBoaXN0X2VudHJ5ICosIHN0cnVjdCBoaXN0X2VudHJ5ICopOwogCWludAkoKnNlX3NucHJpbnRmKShzdHJ1Y3QgaGlzdF9lbnRyeSAqc2VsZiwgY2hhciAqYmYsIHNpemVfdCBzaXplLAogCQkJICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCk7Ci0JdW5zaWduZWQgaW50ICpzZV93aWR0aDsKKwl1OAlzZV93aWR0aF9pZHg7CiAJYm9vbAllbGlkZTsKIH07CiAKQEAgLTEwNCw2ICsxMTUsNyBAQAogZXh0ZXJuIGludDY0X3Qgc29ydF9fZHNvX2NtcChzdHJ1Y3QgaGlzdF9lbnRyeSAqLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqKTsKIGV4dGVybiBpbnQ2NF90IHNvcnRfX3N5bV9jbXAoc3RydWN0IGhpc3RfZW50cnkgKiwgc3RydWN0IGhpc3RfZW50cnkgKik7CiBleHRlcm4gaW50NjRfdCBzb3J0X19wYXJlbnRfY21wKHN0cnVjdCBoaXN0X2VudHJ5ICosIHN0cnVjdCBoaXN0X2VudHJ5ICopOworaW50NjRfdCBzb3J0X19jcHVfY21wKHN0cnVjdCBoaXN0X2VudHJ5ICpsZWZ0LCBzdHJ1Y3QgaGlzdF9lbnRyeSAqcmlnaHQpOwogZXh0ZXJuIHNpemVfdCBzb3J0X19wYXJlbnRfcHJpbnQoRklMRSAqLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqLCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIGludCBzb3J0X2RpbWVuc2lvbl9fYWRkKGNvbnN0IGNoYXIgKik7CiB2b2lkIHNvcnRfZW50cnlfX3NldHVwX2VsaWRlKHN0cnVjdCBzb3J0X2VudHJ5ICpzZWxmLCBzdHJ1Y3Qgc3RybGlzdCAqbGlzdCwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYwppbmRleCBiNjNlNTcxLi42ZjBkZDkwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlICJidWlsZC1pZC5oIgorI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAic3ltYm9sLmgiCiAjaW5jbHVkZSAic3RybGlzdC5oIgogCkBAIC0yNSw2ICsyNiw4IEBACiAjZGVmaW5lIE5UX0dOVV9CVUlMRF9JRCAzCiAjZW5kaWYKIAorc3RhdGljIGJvb2wgZHNvX19idWlsZF9pZF9lcXVhbChjb25zdCBzdHJ1Y3QgZHNvICpzZWxmLCB1OCAqYnVpbGRfaWQpOworc3RhdGljIGludCBlbGZfcmVhZF9idWlsZF9pZChFbGYgKmVsZiwgdm9pZCAqYmYsIHNpemVfdCBzaXplKTsKIHN0YXRpYyB2b2lkIGRzb3NfX2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3QgZHNvICpkc28pOwogc3RhdGljIHN0cnVjdCBtYXAgKm1hcF9fbmV3Mih1NjQgc3RhcnQsIHN0cnVjdCBkc28gKmRzbywgZW51bSBtYXBfdHlwZSB0eXBlKTsKIHN0YXRpYyBpbnQgZHNvX19sb2FkX2tlcm5lbF9zeW0oc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLApAQCAtNDAsNiArNDMsMTQgQEAKIAkudHJ5X3ZtbGludXhfcGF0aCA9IHRydWUsCiB9OwogCitpbnQgZHNvX19uYW1lX2xlbihjb25zdCBzdHJ1Y3QgZHNvICpzZWxmKQoreworCWlmICh2ZXJib3NlKQorCQlyZXR1cm4gc2VsZi0+bG9uZ19uYW1lX2xlbjsKKworCXJldHVybiBzZWxmLT5zaG9ydF9uYW1lX2xlbjsKK30KKwogYm9vbCBkc29fX2xvYWRlZChjb25zdCBzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpCiB7CiAJcmV0dXJuIHNlbGYtPmxvYWRlZCAmICgxIDw8IHR5cGUpOwpAQCAtMjE1LDcgKzIyNiw5IEBACiAJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IE1BUF9fTlJfVFlQRVM7ICsraSkKIAkJc3ltYm9sc19fZGVsZXRlKCZzZWxmLT5zeW1ib2xzW2ldKTsKLQlpZiAoc2VsZi0+bG9uZ19uYW1lICE9IHNlbGYtPm5hbWUpCisJaWYgKHNlbGYtPnNuYW1lX2FsbG9jKQorCQlmcmVlKChjaGFyICopc2VsZi0+c2hvcnRfbmFtZSk7CisJaWYgKHNlbGYtPmxuYW1lX2FsbG9jKQogCQlmcmVlKHNlbGYtPmxvbmdfbmFtZSk7CiAJZnJlZShzZWxmKTsKIH0KQEAgLTkzMyw4ICs5NDYsMjggQEAKIAl9CiB9CiAKK3N0YXRpYyBzaXplX3QgZWxmX2FkZHJfdG9faW5kZXgoRWxmICplbGYsIEdFbGZfQWRkciBhZGRyKQoreworCUVsZl9TY24gKnNlYyA9IE5VTEw7CisJR0VsZl9TaGRyIHNoZHI7CisJc2l6ZV90IGNudCA9IDE7CisKKwl3aGlsZSAoKHNlYyA9IGVsZl9uZXh0c2NuKGVsZiwgc2VjKSkgIT0gTlVMTCkgeworCQlnZWxmX2dldHNoZHIoc2VjLCAmc2hkcik7CisKKwkJaWYgKChhZGRyID49IHNoZHIuc2hfYWRkcikgJiYKKwkJICAgIChhZGRyIDwgKHNoZHIuc2hfYWRkciArIHNoZHIuc2hfc2l6ZSkpKQorCQkJcmV0dXJuIGNudDsKKworCQkrK2NudDsKKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKIHN0YXRpYyBpbnQgZHNvX19sb2FkX3N5bShzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgaW50IGZkLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyLCBpbnQga21vZHVsZSkKKwkJCSBpbnQgZmQsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIsIGludCBrbW9kdWxlLAorCQkJIGludCB3YW50X3N5bXRhYikKIHsKIAlzdHJ1Y3Qga21hcCAqa21hcCA9IHNlbGYtPmtlcm5lbCA/IG1hcF9fa21hcChtYXApIDogTlVMTDsKIAlzdHJ1Y3QgbWFwICpjdXJyX21hcCA9IG1hcDsKQEAgLTk0NCwzMSArOTc3LDUxIEBACiAJaW50IGVyciA9IC0xOwogCXVpbnQzMl90IGlkeDsKIAlHRWxmX0VoZHIgZWhkcjsKLQlHRWxmX1NoZHIgc2hkcjsKLQlFbGZfRGF0YSAqc3ltczsKKwlHRWxmX1NoZHIgc2hkciwgb3Bkc2hkcjsKKwlFbGZfRGF0YSAqc3ltcywgKm9wZGRhdGEgPSBOVUxMOwogCUdFbGZfU3ltIHN5bTsKLQlFbGZfU2NuICpzZWMsICpzZWNfc3RybmR4OworCUVsZl9TY24gKnNlYywgKnNlY19zdHJuZHgsICpvcGRzZWM7CiAJRWxmICplbGY7CiAJaW50IG5yID0gMDsKKwlzaXplX3Qgb3BkaWR4ID0gMDsKIAogCWVsZiA9IGVsZl9iZWdpbihmZCwgUEVSRl9FTEZfQ19SRUFEX01NQVAsIE5VTEwpOwogCWlmIChlbGYgPT0gTlVMTCkgewotCQlwcl9lcnIoIiVzOiBjYW5ub3QgcmVhZCAlcyBFTEYgZmlsZS5cbiIsIF9fZnVuY19fLCBuYW1lKTsKKwkJcHJfZGVidWcoIiVzOiBjYW5ub3QgcmVhZCAlcyBFTEYgZmlsZS5cbiIsIF9fZnVuY19fLCBuYW1lKTsKIAkJZ290byBvdXRfY2xvc2U7CiAJfQogCiAJaWYgKGdlbGZfZ2V0ZWhkcihlbGYsICZlaGRyKSA9PSBOVUxMKSB7Ci0JCXByX2VycigiJXM6IGNhbm5vdCBnZXQgZWxmIGhlYWRlci5cbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiVzOiBjYW5ub3QgZ2V0IGVsZiBoZWFkZXIuXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gb3V0X2VsZl9lbmQ7CiAJfQogCisJLyogQWx3YXlzIHJlamVjdCBpbWFnZXMgd2l0aCBhIG1pc21hdGNoZWQgYnVpbGQtaWQ6ICovCisJaWYgKHNlbGYtPmhhc19idWlsZF9pZCkgeworCQl1OCBidWlsZF9pZFtCVUlMRF9JRF9TSVpFXTsKKworCQlpZiAoZWxmX3JlYWRfYnVpbGRfaWQoZWxmLCBidWlsZF9pZCwKKwkJCQkgICAgICBCVUlMRF9JRF9TSVpFKSAhPSBCVUlMRF9JRF9TSVpFKQorCQkJZ290byBvdXRfZWxmX2VuZDsKKworCQlpZiAoIWRzb19fYnVpbGRfaWRfZXF1YWwoc2VsZiwgYnVpbGRfaWQpKQorCQkJZ290byBvdXRfZWxmX2VuZDsKKwl9CisKIAlzZWMgPSBlbGZfc2VjdGlvbl9ieV9uYW1lKGVsZiwgJmVoZHIsICZzaGRyLCAiLnN5bXRhYiIsIE5VTEwpOwogCWlmIChzZWMgPT0gTlVMTCkgeworCQlpZiAod2FudF9zeW10YWIpCisJCQlnb3RvIG91dF9lbGZfZW5kOworCiAJCXNlYyA9IGVsZl9zZWN0aW9uX2J5X25hbWUoZWxmLCAmZWhkciwgJnNoZHIsICIuZHluc3ltIiwgTlVMTCk7CiAJCWlmIChzZWMgPT0gTlVMTCkKIAkJCWdvdG8gb3V0X2VsZl9lbmQ7CiAJfQogCisJb3Bkc2VjID0gZWxmX3NlY3Rpb25fYnlfbmFtZShlbGYsICZlaGRyLCAmb3Bkc2hkciwgIi5vcGQiLCAmb3BkaWR4KTsKKwlpZiAob3Bkc2VjKQorCQlvcGRkYXRhID0gZWxmX3Jhd2RhdGEob3Bkc2VjLCBOVUxMKTsKKwogCXN5bXMgPSBlbGZfZ2V0ZGF0YShzZWMsIE5VTEwpOwogCWlmIChzeW1zID09IE5VTEwpCiAJCWdvdG8gb3V0X2VsZl9lbmQ7CkBAIC0xMDEzLDYgKzEwNjYsMTMgQEAKIAkJaWYgKCFpc19sYWJlbCAmJiAhZWxmX3N5bV9faXNfYSgmc3ltLCBtYXAtPnR5cGUpKQogCQkJY29udGludWU7CiAKKwkJaWYgKG9wZHNlYyAmJiBzeW0uc3Rfc2huZHggPT0gb3BkaWR4KSB7CisJCQl1MzIgb2Zmc2V0ID0gc3ltLnN0X3ZhbHVlIC0gb3Bkc2hkci5zaF9hZGRyOworCQkJdTY0ICpvcGQgPSBvcGRkYXRhLT5kX2J1ZiArIG9mZnNldDsKKwkJCXN5bS5zdF92YWx1ZSA9ICpvcGQ7CisJCQlzeW0uc3Rfc2huZHggPSBlbGZfYWRkcl90b19pbmRleChlbGYsIHN5bS5zdF92YWx1ZSk7CisJCX0KKwogCQlzZWMgPSBlbGZfZ2V0c2NuKGVsZiwgc3ltLnN0X3NobmR4KTsKIAkJaWYgKCFzZWMpCiAJCQlnb3RvIG91dF9lbGZfZW5kOwpAQCAtMTE1MSwzNyArMTIxMSwyNiBAQAogICovCiAjZGVmaW5lIE5PVEVfQUxJR04obikgKCgobikgKyAzKSAmIC00VSkKIAotaW50IGZpbGVuYW1lX19yZWFkX2J1aWxkX2lkKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB2b2lkICpiZiwgc2l6ZV90IHNpemUpCitzdGF0aWMgaW50IGVsZl9yZWFkX2J1aWxkX2lkKEVsZiAqZWxmLCB2b2lkICpiZiwgc2l6ZV90IHNpemUpCiB7Ci0JaW50IGZkLCBlcnIgPSAtMTsKKwlpbnQgZXJyID0gLTE7CiAJR0VsZl9FaGRyIGVoZHI7CiAJR0VsZl9TaGRyIHNoZHI7CiAJRWxmX0RhdGEgKmRhdGE7CiAJRWxmX1NjbiAqc2VjOwogCUVsZl9LaW5kIGVrOwogCXZvaWQgKnB0cjsKLQlFbGYgKmVsZjsKIAogCWlmIChzaXplIDwgQlVJTERfSURfU0laRSkKIAkJZ290byBvdXQ7CiAKLQlmZCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRPTkxZKTsKLQlpZiAoZmQgPCAwKQotCQlnb3RvIG91dDsKLQotCWVsZiA9IGVsZl9iZWdpbihmZCwgUEVSRl9FTEZfQ19SRUFEX01NQVAsIE5VTEwpOwotCWlmIChlbGYgPT0gTlVMTCkgewotCQlwcl9kZWJ1ZzIoIiVzOiBjYW5ub3QgcmVhZCAlcyBFTEYgZmlsZS5cbiIsIF9fZnVuY19fLCBmaWxlbmFtZSk7Ci0JCWdvdG8gb3V0X2Nsb3NlOwotCX0KLQogCWVrID0gZWxmX2tpbmQoZWxmKTsKIAlpZiAoZWsgIT0gRUxGX0tfRUxGKQotCQlnb3RvIG91dF9lbGZfZW5kOworCQlnb3RvIG91dDsKIAogCWlmIChnZWxmX2dldGVoZHIoZWxmLCAmZWhkcikgPT0gTlVMTCkgewogCQlwcl9lcnIoIiVzOiBjYW5ub3QgZ2V0IGVsZiBoZWFkZXIuXG4iLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gb3V0X2VsZl9lbmQ7CisJCWdvdG8gb3V0OwogCX0KIAogCXNlYyA9IGVsZl9zZWN0aW9uX2J5X25hbWUoZWxmLCAmZWhkciwgJnNoZHIsCkBAIC0xMTkwLDEyICsxMjM5LDEyIEBACiAJCXNlYyA9IGVsZl9zZWN0aW9uX2J5X25hbWUoZWxmLCAmZWhkciwgJnNoZHIsCiAJCQkJCSAgIi5ub3RlcyIsIE5VTEwpOwogCQlpZiAoc2VjID09IE5VTEwpCi0JCQlnb3RvIG91dF9lbGZfZW5kOworCQkJZ290byBvdXQ7CiAJfQogCiAJZGF0YSA9IGVsZl9nZXRkYXRhKHNlYywgTlVMTCk7CiAJaWYgKGRhdGEgPT0gTlVMTCkKLQkJZ290byBvdXRfZWxmX2VuZDsKKwkJZ290byBvdXQ7CiAKIAlwdHIgPSBkYXRhLT5kX2J1ZjsKIAl3aGlsZSAocHRyIDwgKGRhdGEtPmRfYnVmICsgZGF0YS0+ZF9zaXplKSkgewpAQCAtMTIxNyw3ICsxMjY2LDMxIEBACiAJCX0KIAkJcHRyICs9IGRlc2NzejsKIAl9Ci1vdXRfZWxmX2VuZDoKKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK2ludCBmaWxlbmFtZV9fcmVhZF9idWlsZF9pZChjb25zdCBjaGFyICpmaWxlbmFtZSwgdm9pZCAqYmYsIHNpemVfdCBzaXplKQoreworCWludCBmZCwgZXJyID0gLTE7CisJRWxmICplbGY7CisKKwlpZiAoc2l6ZSA8IEJVSUxEX0lEX1NJWkUpCisJCWdvdG8gb3V0OworCisJZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJZ290byBvdXQ7CisKKwllbGYgPSBlbGZfYmVnaW4oZmQsIFBFUkZfRUxGX0NfUkVBRF9NTUFQLCBOVUxMKTsKKwlpZiAoZWxmID09IE5VTEwpIHsKKwkJcHJfZGVidWcyKCIlczogY2Fubm90IHJlYWQgJXMgRUxGIGZpbGUuXG4iLCBfX2Z1bmNfXywgZmlsZW5hbWUpOworCQlnb3RvIG91dF9jbG9zZTsKKwl9CisKKwllcnIgPSBlbGZfcmVhZF9idWlsZF9pZChlbGYsIGJmLCBzaXplKTsKKwogCWVsZl9lbmQoZWxmKTsKIG91dF9jbG9zZToKIAljbG9zZShmZCk7CkBAIC0xMjkzLDExICsxMzY2LDExIEBACiB7CiAJaW50IHNpemUgPSBQQVRIX01BWDsKIAljaGFyICpuYW1lOwotCXU4IGJ1aWxkX2lkW0JVSUxEX0lEX1NJWkVdOwogCWludCByZXQgPSAtMTsKIAlpbnQgZmQ7CiAJc3RydWN0IG1hY2hpbmUgKm1hY2hpbmU7CiAJY29uc3QgY2hhciAqcm9vdF9kaXI7CisJaW50IHdhbnRfc3ltdGFiOwogCiAJZHNvX19zZXRfbG9hZGVkKHNlbGYsIG1hcC0+dHlwZSk7CiAKQEAgLTEzMjQsMTMgKzEzOTcsMTggQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlzZWxmLT5vcmlnaW4gPSBEU09fX09SSUdfQlVJTERfSURfQ0FDSEU7Ci0JaWYgKGRzb19fYnVpbGRfaWRfZmlsZW5hbWUoc2VsZiwgbmFtZSwgc2l6ZSkgIT0gTlVMTCkKLQkJZ290byBvcGVuX2ZpbGU7Ci1tb3JlOgotCWRvIHsKLQkJc2VsZi0+b3JpZ2luKys7CisJLyogSXRlcmF0ZSBvdmVyIGNhbmRpZGF0ZSBkZWJ1ZyBpbWFnZXMuCisJICogT24gdGhlIGZpcnN0IHBhc3MsIG9ubHkgbG9hZCBpbWFnZXMgaWYgdGhleSBoYXZlIGEgZnVsbCBzeW10YWIuCisJICogRmFpbGluZyB0aGF0LCBkbyBhIHNlY29uZCBwYXNzIHdoZXJlIHdlIGFjY2VwdCAuZHluc3ltIGFsc28KKwkgKi8KKwlmb3IgKHNlbGYtPm9yaWdpbiA9IERTT19fT1JJR19CVUlMRF9JRF9DQUNIRSwgd2FudF9zeW10YWIgPSAxOworCSAgICAgc2VsZi0+b3JpZ2luICE9IERTT19fT1JJR19OT1RfRk9VTkQ7CisJICAgICBzZWxmLT5vcmlnaW4rKykgewogCQlzd2l0Y2ggKHNlbGYtPm9yaWdpbikgeworCQljYXNlIERTT19fT1JJR19CVUlMRF9JRF9DQUNIRToKKwkJCWlmIChkc29fX2J1aWxkX2lkX2ZpbGVuYW1lKHNlbGYsIG5hbWUsIHNpemUpID09IE5VTEwpCisJCQkJY29udGludWU7CisJCQlicmVhazsKIAkJY2FzZSBEU09fX09SSUdfRkVET1JBOgogCQkJc25wcmludGYobmFtZSwgc2l6ZSwgIi91c3IvbGliL2RlYnVnJXMuZGVidWciLAogCQkJCSBzZWxmLT5sb25nX25hbWUpOwpAQCAtMTMzOSwyMSArMTQxNywyMCBAQAogCQkJc25wcmludGYobmFtZSwgc2l6ZSwgIi91c3IvbGliL2RlYnVnJXMiLAogCQkJCSBzZWxmLT5sb25nX25hbWUpOwogCQkJYnJlYWs7Ci0JCWNhc2UgRFNPX19PUklHX0JVSUxESUQ6Ci0JCQlpZiAoZmlsZW5hbWVfX3JlYWRfYnVpbGRfaWQoc2VsZi0+bG9uZ19uYW1lLCBidWlsZF9pZCwKLQkJCQkJCSAgICBzaXplb2YoYnVpbGRfaWQpKSkgewotCQkJCWNoYXIgYnVpbGRfaWRfaGV4W0JVSUxEX0lEX1NJWkUgKiAyICsgMV07Ci0JCQkJYnVpbGRfaWRfX3NwcmludGYoYnVpbGRfaWQsIHNpemVvZihidWlsZF9pZCksCi0JCQkJCQkgIGJ1aWxkX2lkX2hleCk7Ci0JCQkJc25wcmludGYobmFtZSwgc2l6ZSwKLQkJCQkJICIvdXNyL2xpYi9kZWJ1Zy8uYnVpbGQtaWQvJS4ycy8lcy5kZWJ1ZyIsCi0JCQkJCWJ1aWxkX2lkX2hleCwgYnVpbGRfaWRfaGV4ICsgMik7Ci0JCQkJaWYgKHNlbGYtPmhhc19idWlsZF9pZCkKLQkJCQkJZ290byBjb21wYXJlX2J1aWxkX2lkOwotCQkJCWJyZWFrOworCQljYXNlIERTT19fT1JJR19CVUlMRElEOiB7CisJCQljaGFyIGJ1aWxkX2lkX2hleFtCVUlMRF9JRF9TSVpFICogMiArIDFdOworCisJCQlpZiAoIXNlbGYtPmhhc19idWlsZF9pZCkKKwkJCQljb250aW51ZTsKKworCQkJYnVpbGRfaWRfX3NwcmludGYoc2VsZi0+YnVpbGRfaWQsCisJCQkJCSAgc2l6ZW9mKHNlbGYtPmJ1aWxkX2lkKSwKKwkJCQkJICBidWlsZF9pZF9oZXgpOworCQkJc25wcmludGYobmFtZSwgc2l6ZSwKKwkJCQkgIi91c3IvbGliL2RlYnVnLy5idWlsZC1pZC8lLjJzLyVzLmRlYnVnIiwKKwkJCQkgYnVpbGRfaWRfaGV4LCBidWlsZF9pZF9oZXggKyAyKTsKIAkJCX0KLQkJCXNlbGYtPm9yaWdpbisrOwotCQkJLyogRmFsbCB0aHJ1ICovCisJCQlicmVhazsKIAkJY2FzZSBEU09fX09SSUdfRFNPOgogCQkJc25wcmludGYobmFtZSwgc2l6ZSwgIiVzIiwgc2VsZi0+bG9uZ19uYW1lKTsKIAkJCWJyZWFrOwpAQCAtMTM2NiwzNiArMTQ0Myw0MSBAQAogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCWdvdG8gb3V0OworCQkJLyoKKwkJCSAqIElmIHdlIHdhbnRlZCBhIGZ1bGwgc3ltdGFiIGJ1dCBubyBpbWFnZSBoYWQgb25lLAorCQkJICogcmVsYXggb3VyIHJlcXVpcmVtZW50cyBhbmQgcmVwZWF0IHRoZSBzZWFyY2guCisJCQkgKi8KKwkJCWlmICh3YW50X3N5bXRhYikgeworCQkJCXdhbnRfc3ltdGFiID0gMDsKKwkJCQlzZWxmLT5vcmlnaW4gPSBEU09fX09SSUdfQlVJTERfSURfQ0FDSEU7CisJCQl9IGVsc2UKKwkJCQljb250aW51ZTsKIAkJfQogCi0JCWlmIChzZWxmLT5oYXNfYnVpbGRfaWQpIHsKLQkJCWlmIChmaWxlbmFtZV9fcmVhZF9idWlsZF9pZChuYW1lLCBidWlsZF9pZCwKLQkJCQkJCSAgICBzaXplb2YoYnVpbGRfaWQpKSA8IDApCi0JCQkJZ290byBtb3JlOwotY29tcGFyZV9idWlsZF9pZDoKLQkJCWlmICghZHNvX19idWlsZF9pZF9lcXVhbChzZWxmLCBidWlsZF9pZCkpCi0JCQkJZ290byBtb3JlOwotCQl9Ci1vcGVuX2ZpbGU6CisJCS8qIE5hbWUgaXMgbm93IHRoZSBuYW1lIG9mIHRoZSBuZXh0IGltYWdlIHRvIHRyeSAqLwogCQlmZCA9IG9wZW4obmFtZSwgT19SRE9OTFkpOwotCX0gd2hpbGUgKGZkIDwgMCk7CisJCWlmIChmZCA8IDApCisJCQljb250aW51ZTsKIAotCXJldCA9IGRzb19fbG9hZF9zeW0oc2VsZiwgbWFwLCBuYW1lLCBmZCwgZmlsdGVyLCAwKTsKLQljbG9zZShmZCk7CisJCXJldCA9IGRzb19fbG9hZF9zeW0oc2VsZiwgbWFwLCBuYW1lLCBmZCwgZmlsdGVyLCAwLAorCQkJCSAgICB3YW50X3N5bXRhYik7CisJCWNsb3NlKGZkKTsKIAotCS8qCi0JICogU29tZSBwZW9wbGUgc2VlbSB0byBoYXZlIGRlYnVnaW5mbyBmaWxlcyBfV0lUSE9VVF8gZGVidWcgaW5mbyE/IT8KLQkgKi8KLQlpZiAoIXJldCkKLQkJZ290byBtb3JlOworCQkvKgorCQkgKiBTb21lIHBlb3BsZSBzZWVtIHRvIGhhdmUgZGVidWdpbmZvIGZpbGVzIF9XSVRIT1VUXyBkZWJ1ZworCQkgKiBpbmZvIT8hPworCQkgKi8KKwkJaWYgKCFyZXQpCisJCQljb250aW51ZTsKIAotCWlmIChyZXQgPiAwKSB7Ci0JCWludCBucl9wbHQgPSBkc29fX3N5bnRoZXNpemVfcGx0X3N5bWJvbHMoc2VsZiwgbWFwLCBmaWx0ZXIpOwotCQlpZiAobnJfcGx0ID4gMCkKLQkJCXJldCArPSBucl9wbHQ7CisJCWlmIChyZXQgPiAwKSB7CisJCQlpbnQgbnJfcGx0ID0gZHNvX19zeW50aGVzaXplX3BsdF9zeW1ib2xzKHNlbGYsIG1hcCwgZmlsdGVyKTsKKwkJCWlmIChucl9wbHQgPiAwKQorCQkJCXJldCArPSBucl9wbHQ7CisJCQlicmVhazsKKwkJfQogCX0KLW91dDoKKwogCWZyZWUobmFtZSk7CiAJaWYgKHJldCA8IDAgJiYgc3Ryc3RyKHNlbGYtPm5hbWUsICIgKGRlbGV0ZWQpIikgIT0gTlVMTCkKIAkJcmV0dXJuIDA7CkBAIC0xNDQzLDYgKzE1MjUsNyBAQAogewogCXN0cnVjdCBkaXJlbnQgKmRlbnQ7CiAJRElSICpkaXIgPSBvcGVuZGlyKGRpcl9uYW1lKTsKKwlpbnQgcmV0ID0gMDsKIAogCWlmICghZGlyKSB7CiAJCXByX2RlYnVnKCIlczogY2Fubm90IG9wZW4gJXMgZGlyXG4iLCBfX2Z1bmNfXywgZGlyX25hbWUpOwpAQCAtMTQ2NSw4ICsxNTQ4LDkgQEAKIAogCQkJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXMvJXMiLAogCQkJCSBkaXJfbmFtZSwgZGVudC0+ZF9uYW1lKTsKLQkJCWlmIChtYXBfZ3JvdXBzX19zZXRfbW9kdWxlc19wYXRoX2RpcihzZWxmLCBwYXRoKSA8IDApCi0JCQkJZ290byBmYWlsdXJlOworCQkJcmV0ID0gbWFwX2dyb3Vwc19fc2V0X21vZHVsZXNfcGF0aF9kaXIoc2VsZiwgcGF0aCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dDsKIAkJfSBlbHNlIHsKIAkJCWNoYXIgKmRvdCA9IHN0cnJjaHIoZGVudC0+ZF9uYW1lLCAnLicpLAogCQkJICAgICBkc29fbmFtZVtQQVRIX01BWF07CkBAIC0xNDg3LDE3ICsxNTcxLDE5IEBACiAJCQkJIGRpcl9uYW1lLCBkZW50LT5kX25hbWUpOwogCiAJCQlsb25nX25hbWUgPSBzdHJkdXAocGF0aCk7Ci0JCQlpZiAobG9uZ19uYW1lID09IE5VTEwpCi0JCQkJZ290byBmYWlsdXJlOworCQkJaWYgKGxvbmdfbmFtZSA9PSBOVUxMKSB7CisJCQkJcmV0ID0gLTE7CisJCQkJZ290byBvdXQ7CisJCQl9CiAJCQlkc29fX3NldF9sb25nX25hbWUobWFwLT5kc28sIGxvbmdfbmFtZSk7CisJCQltYXAtPmRzby0+bG5hbWVfYWxsb2MgPSAxOwogCQkJZHNvX19rZXJuZWxfbW9kdWxlX2dldF9idWlsZF9pZChtYXAtPmRzbywgIiIpOwogCQl9CiAJfQogCi0JcmV0dXJuIDA7Ci1mYWlsdXJlOgorb3V0OgogCWNsb3NlZGlyKGRpcik7Ci0JcmV0dXJuIC0xOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBjaGFyICpnZXRfa2VybmVsX3ZlcnNpb24oY29uc3QgY2hhciAqcm9vdF9kaXIpCkBAIC0xNjUzLDM2ICsxNzM5LDEyIEBACiB7CiAJaW50IGVyciA9IC0xLCBmZDsKIAotCWlmIChzZWxmLT5oYXNfYnVpbGRfaWQpIHsKLQkJdTggYnVpbGRfaWRbQlVJTERfSURfU0laRV07Ci0KLQkJaWYgKGZpbGVuYW1lX19yZWFkX2J1aWxkX2lkKHZtbGludXgsIGJ1aWxkX2lkLAotCQkJCQkgICAgc2l6ZW9mKGJ1aWxkX2lkKSkgPCAwKSB7Ci0JCQlwcl9kZWJ1ZygiTm8gYnVpbGRfaWQgaW4gJXMsIGlnbm9yaW5nIGl0XG4iLCB2bWxpbnV4KTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQlpZiAoIWRzb19fYnVpbGRfaWRfZXF1YWwoc2VsZiwgYnVpbGRfaWQpKSB7Ci0JCQljaGFyIGV4cGVjdGVkX2J1aWxkX2lkW0JVSUxEX0lEX1NJWkUgKiAyICsgMV0sCi0JCQkgICAgIHZtbGludXhfYnVpbGRfaWRbQlVJTERfSURfU0laRSAqIDIgKyAxXTsKLQotCQkJYnVpbGRfaWRfX3NwcmludGYoc2VsZi0+YnVpbGRfaWQsCi0JCQkJCSAgc2l6ZW9mKHNlbGYtPmJ1aWxkX2lkKSwKLQkJCQkJICBleHBlY3RlZF9idWlsZF9pZCk7Ci0JCQlidWlsZF9pZF9fc3ByaW50ZihidWlsZF9pZCwgc2l6ZW9mKGJ1aWxkX2lkKSwKLQkJCQkJICB2bWxpbnV4X2J1aWxkX2lkKTsKLQkJCXByX2RlYnVnKCJidWlsZF9pZCBpbiAlcyBpcyAlcyB3aGlsZSBleHBlY3RlZCBpcyAlcywgIgotCQkJCSAiaWdub3JpbmcgaXRcbiIsIHZtbGludXgsIHZtbGludXhfYnVpbGRfaWQsCi0JCQkJIGV4cGVjdGVkX2J1aWxkX2lkKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCX0KLQogCWZkID0gb3Blbih2bWxpbnV4LCBPX1JET05MWSk7CiAJaWYgKGZkIDwgMCkKIAkJcmV0dXJuIC0xOwogCiAJZHNvX19zZXRfbG9hZGVkKHNlbGYsIG1hcC0+dHlwZSk7Ci0JZXJyID0gZHNvX19sb2FkX3N5bShzZWxmLCBtYXAsIHZtbGludXgsIGZkLCBmaWx0ZXIsIDApOworCWVyciA9IGRzb19fbG9hZF9zeW0oc2VsZiwgbWFwLCB2bWxpbnV4LCBmZCwgZmlsdGVyLCAwLCAwKTsKIAljbG9zZShmZCk7CiAKIAlpZiAoZXJyID4gMCkKQEAgLTIwNDUsNiArMjEwNywzNiBAQAogCXJldHVybiAwOwogfQogCit2b2lkIG1hY2hpbmVfX2Rlc3Ryb3lfa2VybmVsX21hcHMoc3RydWN0IG1hY2hpbmUgKnNlbGYpCit7CisJZW51bSBtYXBfdHlwZSB0eXBlOworCisJZm9yICh0eXBlID0gMDsgdHlwZSA8IE1BUF9fTlJfVFlQRVM7ICsrdHlwZSkgeworCQlzdHJ1Y3Qga21hcCAqa21hcDsKKworCQlpZiAoc2VsZi0+dm1saW51eF9tYXBzW3R5cGVdID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlrbWFwID0gbWFwX19rbWFwKHNlbGYtPnZtbGludXhfbWFwc1t0eXBlXSk7CisJCW1hcF9ncm91cHNfX3JlbW92ZSgmc2VsZi0+a21hcHMsIHNlbGYtPnZtbGludXhfbWFwc1t0eXBlXSk7CisJCWlmIChrbWFwLT5yZWZfcmVsb2Nfc3ltKSB7CisJCQkvKgorCQkJICogcmVmX3JlbG9jX3N5bSBpcyBzaGFyZWQgYW1vbmcgYWxsIG1hcHMsIHNvIGZyZWUganVzdAorCQkJICogb24gb25lIG9mIHRoZW0uCisJCQkgKi8KKwkJCWlmICh0eXBlID09IE1BUF9fRlVOQ1RJT04pIHsKKwkJCQlmcmVlKChjaGFyICopa21hcC0+cmVmX3JlbG9jX3N5bS0+bmFtZSk7CisJCQkJa21hcC0+cmVmX3JlbG9jX3N5bS0+bmFtZSA9IE5VTEw7CisJCQkJZnJlZShrbWFwLT5yZWZfcmVsb2Nfc3ltKTsKKwkJCX0KKwkJCWttYXAtPnJlZl9yZWxvY19zeW0gPSBOVUxMOworCQl9CisKKwkJbWFwX19kZWxldGUoc2VsZi0+dm1saW51eF9tYXBzW3R5cGVdKTsKKwkJc2VsZi0+dm1saW51eF9tYXBzW3R5cGVdID0gTlVMTDsKKwl9Cit9CisKIGludCBtYWNoaW5lX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IG1hY2hpbmUgKnNlbGYpCiB7CiAJc3RydWN0IGRzbyAqa2VybmVsID0gbWFjaGluZV9fY3JlYXRlX2tlcm5lbChzZWxmKTsKQEAgLTIxODYsNiArMjI3OCwxNSBAQAogCXJldHVybiAtMTsKIH0KIAordm9pZCBzeW1ib2xfX2V4aXQodm9pZCkKK3sKKwlzdHJsaXN0X19kZWxldGUoc3ltYm9sX2NvbmYuc3ltX2xpc3QpOworCXN0cmxpc3RfX2RlbGV0ZShzeW1ib2xfY29uZi5kc29fbGlzdCk7CisJc3RybGlzdF9fZGVsZXRlKHN5bWJvbF9jb25mLmNvbW1fbGlzdCk7CisJdm1saW51eF9wYXRoX19leGl0KCk7CisJc3ltYm9sX2NvbmYuc3ltX2xpc3QgPSBzeW1ib2xfY29uZi5kc29fbGlzdCA9IHN5bWJvbF9jb25mLmNvbW1fbGlzdCA9IE5VTEw7Cit9CisKIGludCBtYWNoaW5lc19fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCByYl9yb290ICpzZWxmLCBwaWRfdCBwaWQpCiB7CiAJc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUgPSBtYWNoaW5lc19fZmluZG5ldyhzZWxmLCBwaWQpOwpAQCAtMjI4MCw2ICsyMzgxLDE5IEBACiAJcmV0dXJuIHJldDsKIH0KIAordm9pZCBtYWNoaW5lc19fZGVzdHJveV9ndWVzdF9rZXJuZWxfbWFwcyhzdHJ1Y3QgcmJfcm9vdCAqc2VsZikKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbmV4dCA9IHJiX2ZpcnN0KHNlbGYpOworCisJd2hpbGUgKG5leHQpIHsKKwkJc3RydWN0IG1hY2hpbmUgKnBvcyA9IHJiX2VudHJ5KG5leHQsIHN0cnVjdCBtYWNoaW5lLCByYl9ub2RlKTsKKworCQluZXh0ID0gcmJfbmV4dCgmcG9zLT5yYl9ub2RlKTsKKwkJcmJfZXJhc2UoJnBvcy0+cmJfbm9kZSwgc2VsZik7CisJCW1hY2hpbmVfX2RlbGV0ZShwb3MpOworCX0KK30KKwogaW50IG1hY2hpbmVfX2xvYWRfa2FsbHN5bXMoc3RydWN0IG1hY2hpbmUgKnNlbGYsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCQkJICAgZW51bSBtYXBfdHlwZSB0eXBlLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCmluZGV4IDVlMDJkMmMuLjkwNmJlMjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaAorKysgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKQEAgLTksOCArOSw2IEBACiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KIAotI2RlZmluZSBERUJVR19DQUNIRV9ESVIgIi5kZWJ1ZyIKLQogI2lmZGVmIEhBVkVfQ1BMVVNfREVNQU5HTEUKIGV4dGVybiBjaGFyICpjcGx1c19kZW1hbmdsZShjb25zdCBjaGFyICosIGludCk7CiAKQEAgLTcwLDkgKzY4LDkgQEAKIAkJCXNob3dfbnJfc2FtcGxlcywKIAkJCXVzZV9jYWxsY2hhaW4sCiAJCQlleGNsdWRlX290aGVyLAotCQkJZnVsbF9wYXRocywKIAkJCXNob3dfY3B1X3V0aWxpemF0aW9uOwogCWNvbnN0IGNoYXIJKnZtbGludXhfbmFtZSwKKwkJCSpzb3VyY2VfcHJlZml4LAogCQkJKmZpZWxkX3NlcDsKIAljb25zdCBjaGFyCSpkZWZhdWx0X2d1ZXN0X3ZtbGludXhfbmFtZSwKIAkJCSpkZWZhdWx0X2d1ZXN0X2thbGxzeW1zLApAQCAtMTAzLDYgKzEwMSw4IEBACiBzdHJ1Y3QgbWFwX3N5bWJvbCB7CiAJc3RydWN0IG1hcCAgICAqbWFwOwogCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlib29sCSAgICAgIHVuZm9sZGVkOworCWJvb2wJICAgICAgaGFzX2NoaWxkcmVuOwogfTsKIAogc3RydWN0IGFkZHJfbG9jYXRpb24gewpAQCAtMTEyLDcgKzExMiw4IEBACiAJdTY0CSAgICAgIGFkZHI7CiAJY2hhcgkgICAgICBsZXZlbDsKIAlib29sCSAgICAgIGZpbHRlcmVkOwotCXVuc2lnbmVkIGludCAgY3B1bW9kZTsKKwl1OAkgICAgICBjcHVtb2RlOworCXMzMgkgICAgICBjcHU7CiB9OwogCiBlbnVtIGRzb19rZXJuZWxfdHlwZSB7CkBAIC0xMjUsMTIgKzEyNiwxNCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKIAlzdHJ1Y3QgcmJfcm9vdAkgc3ltYm9sc1tNQVBfX05SX1RZUEVTXTsKIAlzdHJ1Y3QgcmJfcm9vdAkgc3ltYm9sX25hbWVzW01BUF9fTlJfVFlQRVNdOworCWVudW0gZHNvX2tlcm5lbF90eXBlCWtlcm5lbDsKIAl1OAkJIGFkanVzdF9zeW1ib2xzOjE7CiAJdTgJCSBzbGVuX2NhbGN1bGF0ZWQ6MTsKIAl1OAkJIGhhc19idWlsZF9pZDoxOwotCWVudW0gZHNvX2tlcm5lbF90eXBlCWtlcm5lbDsKIAl1OAkJIGhpdDoxOwogCXU4CQkgYW5ub3RhdGVfd2FybmVkOjE7CisJdTgJCSBzbmFtZV9hbGxvYzoxOworCXU4CQkgbG5hbWVfYWxsb2M6MTsKIAl1bnNpZ25lZCBjaGFyCSBvcmlnaW47CiAJdTgJCSBzb3J0ZWRfYnlfbmFtZTsKIAl1OAkJIGxvYWRlZDsKQEAgLTE0Niw2ICsxNDksOCBAQAogc3RydWN0IGRzbyAqZHNvX19uZXdfa2VybmVsKGNvbnN0IGNoYXIgKm5hbWUpOwogdm9pZCBkc29fX2RlbGV0ZShzdHJ1Y3QgZHNvICpzZWxmKTsKIAoraW50IGRzb19fbmFtZV9sZW4oY29uc3Qgc3RydWN0IGRzbyAqc2VsZik7CisKIGJvb2wgZHNvX19sb2FkZWQoY29uc3Qgc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlKTsKIGJvb2wgZHNvX19zb3J0ZWRfYnlfbmFtZShjb25zdCBzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpOwogCkBAIC0yMDcsMTMgKzIxMiwxNiBAQAogCQkgICAgaW50ICgqcHJvY2Vzc19zeW1ib2wpKHZvaWQgKmFyZywgY29uc3QgY2hhciAqbmFtZSwKIAkJCQkJICBjaGFyIHR5cGUsIHU2NCBzdGFydCkpOwogCit2b2lkIG1hY2hpbmVfX2Rlc3Ryb3lfa2VybmVsX21hcHMoc3RydWN0IG1hY2hpbmUgKnNlbGYpOwogaW50IF9fbWFjaGluZV9fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCBtYWNoaW5lICpzZWxmLCBzdHJ1Y3QgZHNvICprZXJuZWwpOwogaW50IG1hY2hpbmVfX2NyZWF0ZV9rZXJuZWxfbWFwcyhzdHJ1Y3QgbWFjaGluZSAqc2VsZik7CiAKIGludCBtYWNoaW5lc19fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCByYl9yb290ICpzZWxmLCBwaWRfdCBwaWQpOwogaW50IG1hY2hpbmVzX19jcmVhdGVfZ3Vlc3Rfa2VybmVsX21hcHMoc3RydWN0IHJiX3Jvb3QgKnNlbGYpOwordm9pZCBtYWNoaW5lc19fZGVzdHJveV9ndWVzdF9rZXJuZWxfbWFwcyhzdHJ1Y3QgcmJfcm9vdCAqc2VsZik7CiAKIGludCBzeW1ib2xfX2luaXQodm9pZCk7Cit2b2lkIHN5bWJvbF9fZXhpdCh2b2lkKTsKIGJvb2wgc3ltYm9sX3R5cGVfX2lzX2EoY2hhciBzeW1ib2xfdHlwZSwgZW51bSBtYXBfdHlwZSBtYXBfdHlwZSk7CiAKIHNpemVfdCBtYWNoaW5lX19mcHJpbnRmX3ZtbGludXhfcGF0aChzdHJ1Y3QgbWFjaGluZSAqc2VsZiwgRklMRSAqZnApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5jIGIvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5jCmluZGV4IDlhNDQ4YjQuLjhjNzJkODggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuYworKysgYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmMKQEAgLTYyLDYgKzYyLDEzIEBACiAJcmV0dXJuIHNlbGY7CiB9CiAKK3ZvaWQgdGhyZWFkX19kZWxldGUoc3RydWN0IHRocmVhZCAqc2VsZikKK3sKKwltYXBfZ3JvdXBzX19leGl0KCZzZWxmLT5tZyk7CisJZnJlZShzZWxmLT5jb21tKTsKKwlmcmVlKHNlbGYpOworfQorCiBpbnQgdGhyZWFkX19zZXRfY29tbShzdHJ1Y3QgdGhyZWFkICpzZWxmLCBjb25zdCBjaGFyICpjb21tKQogewogCWludCBlcnI7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdGhyZWFkLmggYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmgKaW5kZXggZWU2YmJjZi4uNjg4NTAwZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuaApAQCAtMjAsNiArMjAsOCBAQAogCiBzdHJ1Y3QgcGVyZl9zZXNzaW9uOwogCit2b2lkIHRocmVhZF9fZGVsZXRlKHN0cnVjdCB0aHJlYWQgKnNlbGYpOworCiBpbnQgZmluZF9hbGxfdGlkKGludCBwaWQsIHBpZF90ICoqIGFsbF90aWQpOwogaW50IHRocmVhZF9fc2V0X2NvbW0oc3RydWN0IHRocmVhZCAqc2VsZiwgY29uc3QgY2hhciAqY29tbSk7CiBpbnQgdGhyZWFkX19jb21tX2xlbihzdHJ1Y3QgdGhyZWFkICpzZWxmKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmggYi90b29scy9wZXJmL3V0aWwvdXRpbC5oCmluZGV4IDRlOGI2YjAuLmYzODBmZWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3V0aWwuaApAQCAtODksNiArODksNyBAQAogCiBleHRlcm4gY29uc3QgY2hhciAqZ3JhcGhfbGluZTsKIGV4dGVybiBjb25zdCBjaGFyICpncmFwaF9kb3R0ZWRfbGluZTsKK2V4dGVybiBjaGFyIGJ1aWxkaWRfZGlyW107CiAKIC8qIE9uIG1vc3Qgc3lzdGVtcyA8bGltaXRzLmg+IHdvdWxkIGhhdmUgZ2l2ZW4gdXMgdGhpcywgYnV0CiAgKiBub3Qgb24gc29tZSBzeXN0ZW1zIChlLmcuIEdOVS9IdXJkKS4KQEAgLTE1Miw2ICsxNTMsOCBAQAogZXh0ZXJuIHZvaWQgc2V0X2RpZV9yb3V0aW5lKHZvaWQgKCpyb3V0aW5lKShjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKSBOT1JFVFVSTik7CiAKIGV4dGVybiBpbnQgcHJlZml4Y21wKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiB2b2lkIHNldF9idWlsZGlkX2Rpcih2b2lkKTsKK2V4dGVybiB2b2lkIGRpc2FibGVfYnVpbGRpZF9jYWNoZSh2b2lkKTsKIAogc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpza2lwX3ByZWZpeChjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2Fzc2lnbmVkLWRldi5jIGIvdmlydC9rdm0vYXNzaWduZWQtZGV2LmMKaW5kZXggNGQxMGIxZS4uN2M5ODkyOCAxMDA2NDQKLS0tIGEvdmlydC9rdm0vYXNzaWduZWQtZGV2LmMKKysrIGIvdmlydC9rdm0vYXNzaWduZWQtZGV2LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAtIGRldmljZSBhc3NpZ25tZW50IHN1cHBvcnQKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtOSBSZWQgSGF0LCBJbmMKKyAqIENvcHlyaWdodCAoQykgMjAxMCBSZWQgSGF0LCBJbmMuIGFuZC9vciBpdHMgYWZmaWxpYXRlcy4KICAqCiAgKiBUaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMLCB2ZXJzaW9uIDIuICBTZWUKICAqIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCkBAIC01OCwxMiArNTgsMTAgQEAKIHN0YXRpYyB2b2lkIGt2bV9hc3NpZ25lZF9kZXZfaW50ZXJydXB0X3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsICphc3NpZ25lZF9kZXY7Ci0Jc3RydWN0IGt2bSAqa3ZtOwogCWludCBpOwogCiAJYXNzaWduZWRfZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCwKIAkJCQkgICAgaW50ZXJydXB0X3dvcmspOwotCWt2bSA9IGFzc2lnbmVkX2Rldi0+a3ZtOwogCiAJc3Bpbl9sb2NrX2lycSgmYXNzaWduZWRfZGV2LT5hc3NpZ25lZF9kZXZfbG9jayk7CiAJaWYgKGFzc2lnbmVkX2Rldi0+aXJxX3JlcXVlc3RlZF90eXBlICYgS1ZNX0RFVl9JUlFfSE9TVF9NU0lYKSB7CkBAIC00NDgsOSArNDQ2LDYgQEAKIAlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKm1hdGNoOwogCXVuc2lnbmVkIGxvbmcgaG9zdF9pcnFfdHlwZSwgZ3Vlc3RfaXJxX3R5cGU7CiAKLQlpZiAoIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpCi0JCXJldHVybiAtRVBFUk07Ci0KIAlpZiAoIWlycWNoaXBfaW5fa2VybmVsKGt2bSkpCiAJCXJldHVybiByOwogCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9jb2FsZXNjZWRfbW1pby5jIGIvdmlydC9rdm0vY29hbGVzY2VkX21taW8uYwppbmRleCA1Mzg1MDE3Li5mYzg0ODc1IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9jb2FsZXNjZWRfbW1pby5jCisrKyBiL3ZpcnQva3ZtL2NvYWxlc2NlZF9tbWlvLmMKQEAgLTIsNiArMiw3IEBACiAgKiBLVk0gY29hbGVzY2VkIE1NSU8KICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDggQnVsbCBTLkEuUy4KKyAqIENvcHlyaWdodCAyMDA5IFJlZCBIYXQsIEluYy4gYW5kL29yIGl0cyBhZmZpbGlhdGVzLgogICoKICAqICBBdXRob3I6IExhdXJlbnQgVml2aWVyIDxMYXVyZW50LlZpdmllckBidWxsLm5ldD4KICAqCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ldmVudGZkLmMgYi92aXJ0L2t2bS9ldmVudGZkLmMKaW5kZXggYjgxZjBlYi4uNjZjZjY1YiAxMDA2NDQKLS0tIGEvdmlydC9rdm0vZXZlbnRmZC5jCisrKyBiL3ZpcnQva3ZtL2V2ZW50ZmQuYwpAQCAtMiw2ICsyLDcgQEAKICAqIGt2bSBldmVudGZkIHN1cHBvcnQgLSB1c2UgZXZlbnRmZCBvYmplY3RzIHRvIHNpZ25hbCB2YXJpb3VzIEtWTSBldmVudHMKICAqCiAgKiBDb3B5cmlnaHQgMjAwOSBOb3ZlbGwuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMTAgUmVkIEhhdCwgSW5jLiBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuCiAgKgogICogQXV0aG9yOgogICoJR3JlZ29yeSBIYXNraW5zIDxnaGFza2luc0Bub3ZlbGwuY29tPgpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vaW9hcGljLmMgYi92aXJ0L2t2bS9pb2FwaWMuYwppbmRleCAzNTAwZGVlLi4wYjlkZjgzIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9pb2FwaWMuYworKysgYi92aXJ0L2t2bS9pb2FwaWMuYwpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxICBNYW5kcmFrZVNvZnQgUy5BLgorICogIENvcHlyaWdodCAyMDEwIFJlZCBIYXQsIEluYy4gYW5kL29yIGl0cyBhZmZpbGlhdGVzLgogICoKICAqICAgIE1hbmRyYWtlU29mdCBTLkEuCiAgKiAgICA0MywgcnVlIGQnQWJvdWtpcgpAQCAtMTUxLDcgKzE1Miw3IEBACiAJCXVwZGF0ZV9oYW5kbGVkX3ZlY3RvcnMoaW9hcGljKTsKIAkJbWFza19hZnRlciA9IGUtPmZpZWxkcy5tYXNrOwogCQlpZiAobWFza19iZWZvcmUgIT0gbWFza19hZnRlcikKLQkJCWt2bV9maXJlX21hc2tfbm90aWZpZXJzKGlvYXBpYy0+a3ZtLCBpbmRleCwgbWFza19hZnRlcik7CisJCQlrdm1fZmlyZV9tYXNrX25vdGlmaWVycyhpb2FwaWMtPmt2bSwgS1ZNX0lSUUNISVBfSU9BUElDLCBpbmRleCwgbWFza19hZnRlcik7CiAJCWlmIChlLT5maWVsZHMudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHCiAJCSAgICAmJiBpb2FwaWMtPmlyciAmICgxIDw8IGluZGV4KSkKIAkJCWlvYXBpY19zZXJ2aWNlKGlvYXBpYywgaW5kZXgpOwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vaW9tbXUuYyBiL3ZpcnQva3ZtL2lvbW11LmMKaW5kZXggOTYwNDhlZS4uNjJhOWNhZiAxMDA2NDQKLS0tIGEvdmlydC9rdm0vaW9tbXUuYworKysgYi92aXJ0L2t2bS9pb21tdS5jCkBAIC0xNiw2ICsxNiw4IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDggSW50ZWwgQ29ycG9yYXRpb24KICAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24sIDIwMDgKKyAqIENvcHlyaWdodCAyMDEwIFJlZCBIYXQsIEluYy4gYW5kL29yIGl0cyBhZmZpbGlhdGVzLgorICoKICAqIEF1dGhvcjogQWxsZW4gTS4gS2F5IDxhbGxlbi5tLmtheUBpbnRlbC5jb20+CiAgKiBBdXRob3I6IFdlaWRvbmcgSGFuIDx3ZWlkb25nLmhhbkBpbnRlbC5jb20+CiAgKiBBdXRob3I6IEJlbi1BbWkgWWFzc291ciA8YmVuYW1pQGlsLmlibS5jb20+CkBAIC0xMDYsNyArMTA4LDcgQEAKIAkJCSAgICAgIGdldF9vcmRlcihwYWdlX3NpemUpLCBmbGFncyk7CiAJCWlmIChyKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImt2bV9pb21tdV9tYXBfYWRkcmVzczoiCi0JCQkgICAgICAgImlvbW11IGZhaWxlZCB0byBtYXAgcGZuPSVseFxuIiwgcGZuKTsKKwkJCSAgICAgICAiaW9tbXUgZmFpbGVkIHRvIG1hcCBwZm49JWxseFxuIiwgcGZuKTsKIAkJCWdvdG8gdW5tYXBfcGFnZXM7CiAJCX0KIApAQCAtMTI0LDkgKzEyNiwxMCBAQAogCiBzdGF0aWMgaW50IGt2bV9pb21tdV9tYXBfbWVtc2xvdHMoc3RydWN0IGt2bSAqa3ZtKQogewotCWludCBpLCByID0gMDsKKwlpbnQgaSwgaWR4LCByID0gMDsKIAlzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90czsKIAorCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZrdm0tPnNyY3UpOwogCXNsb3RzID0ga3ZtX21lbXNsb3RzKGt2bSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2xvdHMtPm5tZW1zbG90czsgaSsrKSB7CkBAIC0xMzQsNiArMTM3LDcgQEAKIAkJaWYgKHIpCiAJCQlicmVhazsKIAl9CisJc3JjdV9yZWFkX3VubG9jaygma3ZtLT5zcmN1LCBpZHgpOwogCiAJcmV0dXJuIHI7CiB9CkBAIC0yODMsMTUgKzI4NywxNyBAQAogCiBzdGF0aWMgaW50IGt2bV9pb21tdV91bm1hcF9tZW1zbG90cyhzdHJ1Y3Qga3ZtICprdm0pCiB7Ci0JaW50IGk7CisJaW50IGksIGlkeDsKIAlzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90czsKIAorCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZrdm0tPnNyY3UpOwogCXNsb3RzID0ga3ZtX21lbXNsb3RzKGt2bSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2xvdHMtPm5tZW1zbG90czsgaSsrKSB7CiAJCWt2bV9pb21tdV9wdXRfcGFnZXMoa3ZtLCBzbG90cy0+bWVtc2xvdHNbaV0uYmFzZV9nZm4sCiAJCQkJICAgIHNsb3RzLT5tZW1zbG90c1tpXS5ucGFnZXMpOwogCX0KKwlzcmN1X3JlYWRfdW5sb2NrKCZrdm0tPnNyY3UsIGlkeCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2lycV9jb21tLmMgYi92aXJ0L2t2bS9pcnFfY29tbS5jCmluZGV4IGEwZTg4ODAuLjM2OWUzODAgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2lycV9jb21tLmMKKysrIGIvdmlydC9rdm0vaXJxX2NvbW0uYwpAQCAtMTcsNiArMTcsNyBAQAogICogQXV0aG9yczoKICAqICAgWWFvenUgKEVkZGllKSBEb25nIDxFZGRpZS5kb25nQGludGVsLmNvbT4KICAqCisgKiBDb3B5cmlnaHQgMjAxMCBSZWQgSGF0LCBJbmMuIGFuZC9vciBpdHMgYWZmaWxhdGVzLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgpAQCAtOTksNyArMTAwLDcgQEAKIAkJCWlmIChyIDwgMCkKIAkJCQlyID0gMDsKIAkJCXIgKz0ga3ZtX2FwaWNfc2V0X2lycSh2Y3B1LCBpcnEpOwotCQl9IGVsc2UgeworCQl9IGVsc2UgaWYgKGt2bV9sYXBpY19lbmFibGVkKHZjcHUpKSB7CiAJCQlpZiAoIWxvd2VzdCkKIAkJCQlsb3dlc3QgPSB2Y3B1OwogCQkJZWxzZSBpZiAoa3ZtX2FwaWNfY29tcGFyZV9wcmlvKHZjcHUsIGxvd2VzdCkgPCAwKQpAQCAtMjc4LDE1ICsyNzksMTkgQEAKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIH0KIAotdm9pZCBrdm1fZmlyZV9tYXNrX25vdGlmaWVycyhzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnEsIGJvb2wgbWFzaykKK3ZvaWQga3ZtX2ZpcmVfbWFza19ub3RpZmllcnMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpcnFjaGlwLCB1bnNpZ25lZCBwaW4sCisJCQkgICAgIGJvb2wgbWFzaykKIHsKIAlzdHJ1Y3Qga3ZtX2lycV9tYXNrX25vdGlmaWVyICpraW1uOwogCXN0cnVjdCBobGlzdF9ub2RlICpuOworCWludCBnc2k7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGtpbW4sIG4sICZrdm0tPm1hc2tfbm90aWZpZXJfbGlzdCwgbGluaykKLQkJaWYgKGtpbW4tPmlycSA9PSBpcnEpCi0JCQlraW1uLT5mdW5jKGtpbW4sIG1hc2spOworCWdzaSA9IHJjdV9kZXJlZmVyZW5jZShrdm0tPmlycV9yb3V0aW5nKS0+Y2hpcFtpcnFjaGlwXVtwaW5dOworCWlmIChnc2kgIT0gLTEpCisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShraW1uLCBuLCAma3ZtLT5tYXNrX25vdGlmaWVyX2xpc3QsIGxpbmspCisJCQlpZiAoa2ltbi0+aXJxID09IGdzaSkKKwkJCQlraW1uLT5mdW5jKGtpbW4sIG1hc2spOwogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCBmMDMyODA2Li5iNzhiNzk0IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jCisrKyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKQEAgLTUsNiArNSw3IEBACiAgKiBtYWNoaW5lcyB3aXRob3V0IGVtdWxhdGlvbiBvciBiaW5hcnkgdHJhbnNsYXRpb24uCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA2IFF1bXJhbmV0LCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxMCBSZWQgSGF0LCBJbmMuIGFuZC9vciBpdHMgYWZmaWxhdGVzLgogICoKICAqIEF1dGhvcnM6CiAgKiAgIEF2aSBLaXZpdHkgICA8YXZpQHF1bXJhbmV0LmNvbT4KQEAgLTkyLDYgKzkzLDEyIEBACiAKIHN0YXRpYyBib29sIGxhcmdlcGFnZXNfZW5hYmxlZCA9IHRydWU7CiAKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqaHdwb2lzb25fcGFnZTsKK3N0YXRpYyBwZm5fdCBod3BvaXNvbl9wZm47CisKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqZmF1bHRfcGFnZTsKK3N0YXRpYyBwZm5fdCBmYXVsdF9wZm47CisKIGlubGluZSBpbnQga3ZtX2lzX21taW9fcGZuKHBmbl90IHBmbikKIHsKIAlpZiAocGZuX3ZhbGlkKHBmbikpIHsKQEAgLTE0MSw3ICsxNDgsNyBAQAogCXJhd19zcGluX2xvY2soJmt2bS0+cmVxdWVzdHNfbG9jayk7CiAJbWUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKSB7Ci0JCWlmICh0ZXN0X2FuZF9zZXRfYml0KHJlcSwgJnZjcHUtPnJlcXVlc3RzKSkKKwkJaWYgKGt2bV9tYWtlX2NoZWNrX3JlcXVlc3QocmVxLCB2Y3B1KSkKIAkJCWNvbnRpbnVlOwogCQljcHUgPSB2Y3B1LT5jcHU7CiAJCWlmIChjcHVzICE9IE5VTEwgJiYgY3B1ICE9IC0xICYmIGNwdSAhPSBtZSkKQEAgLTU2Niw2ICs1NzMsNyBAQAogCiAJbmV3ID0gb2xkID0gKm1lbXNsb3Q7CiAKKwluZXcuaWQgPSBtZW0tPnNsb3Q7CiAJbmV3LmJhc2VfZ2ZuID0gYmFzZV9nZm47CiAJbmV3Lm5wYWdlcyA9IG5wYWdlczsKIAluZXcuZmxhZ3MgPSBtZW0tPmZsYWdzOwpAQCAtNTk2LDcgKzYwNCw3IEBACiAJLyogQWxsb2NhdGUgaWYgYSBzbG90IGlzIGJlaW5nIGNyZWF0ZWQgKi8KICNpZm5kZWYgQ09ORklHX1MzOTAKIAlpZiAobnBhZ2VzICYmICFuZXcucm1hcCkgewotCQluZXcucm1hcCA9IHZtYWxsb2MobnBhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopKTsKKwkJbmV3LnJtYXAgPSB2bWFsbG9jKG5wYWdlcyAqIHNpemVvZigqbmV3LnJtYXApKTsKIAogCQlpZiAoIW5ldy5ybWFwKQogCQkJZ290byBvdXRfZnJlZTsKQEAgLTYyMSw5ICs2MjksOSBAQAogCQlpZiAobmV3LmxwYWdlX2luZm9baV0pCiAJCQljb250aW51ZTsKIAotCQlscGFnZXMgPSAxICsgKGJhc2VfZ2ZuICsgbnBhZ2VzIC0gMSkgLwotCQkJICAgICBLVk1fUEFHRVNfUEVSX0hQQUdFKGxldmVsKTsKLQkJbHBhZ2VzIC09IGJhc2VfZ2ZuIC8gS1ZNX1BBR0VTX1BFUl9IUEFHRShsZXZlbCk7CisJCWxwYWdlcyA9IDEgKyAoKGJhc2VfZ2ZuICsgbnBhZ2VzIC0gMSkKKwkJCSAgICAgPj4gS1ZNX0hQQUdFX0dGTl9TSElGVChsZXZlbCkpOworCQlscGFnZXMgLT0gYmFzZV9nZm4gPj4gS1ZNX0hQQUdFX0dGTl9TSElGVChsZXZlbCk7CiAKIAkJbmV3LmxwYWdlX2luZm9baV0gPSB2bWFsbG9jKGxwYWdlcyAqIHNpemVvZigqbmV3LmxwYWdlX2luZm9baV0pKTsKIApAQCAtNjMzLDkgKzY0MSw5IEBACiAJCW1lbXNldChuZXcubHBhZ2VfaW5mb1tpXSwgMCwKIAkJICAgICAgIGxwYWdlcyAqIHNpemVvZigqbmV3LmxwYWdlX2luZm9baV0pKTsKIAotCQlpZiAoYmFzZV9nZm4gJSBLVk1fUEFHRVNfUEVSX0hQQUdFKGxldmVsKSkKKwkJaWYgKGJhc2VfZ2ZuICYgKEtWTV9QQUdFU19QRVJfSFBBR0UobGV2ZWwpIC0gMSkpCiAJCQluZXcubHBhZ2VfaW5mb1tpXVswXS53cml0ZV9jb3VudCA9IDE7Ci0JCWlmICgoYmFzZV9nZm4rbnBhZ2VzKSAlIEtWTV9QQUdFU19QRVJfSFBBR0UobGV2ZWwpKQorCQlpZiAoKGJhc2VfZ2ZuK25wYWdlcykgJiAoS1ZNX1BBR0VTX1BFUl9IUEFHRShsZXZlbCkgLSAxKSkKIAkJCW5ldy5scGFnZV9pbmZvW2ldW2xwYWdlcyAtIDFdLndyaXRlX2NvdW50ID0gMTsKIAkJdWdmbiA9IG5ldy51c2Vyc3BhY2VfYWRkciA+PiBQQUdFX1NISUZUOwogCQkvKgpAQCAtODEwLDE2ICs4MTgsMjggQEAKIAogaW50IGlzX2Vycm9yX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JcmV0dXJuIHBhZ2UgPT0gYmFkX3BhZ2U7CisJcmV0dXJuIHBhZ2UgPT0gYmFkX3BhZ2UgfHwgcGFnZSA9PSBod3BvaXNvbl9wYWdlIHx8IHBhZ2UgPT0gZmF1bHRfcGFnZTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzX2Vycm9yX3BhZ2UpOwogCiBpbnQgaXNfZXJyb3JfcGZuKHBmbl90IHBmbikKIHsKLQlyZXR1cm4gcGZuID09IGJhZF9wZm47CisJcmV0dXJuIHBmbiA9PSBiYWRfcGZuIHx8IHBmbiA9PSBod3BvaXNvbl9wZm4gfHwgcGZuID09IGZhdWx0X3BmbjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzX2Vycm9yX3Bmbik7CiAKK2ludCBpc19od3BvaXNvbl9wZm4ocGZuX3QgcGZuKQoreworCXJldHVybiBwZm4gPT0gaHdwb2lzb25fcGZuOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXNfaHdwb2lzb25fcGZuKTsKKworaW50IGlzX2ZhdWx0X3BmbihwZm5fdCBwZm4pCit7CisJcmV0dXJuIHBmbiA9PSBmYXVsdF9wZm47Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpc19mYXVsdF9wZm4pOworCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYmFkX2h2YSh2b2lkKQogewogCXJldHVybiBQQUdFX09GRlNFVDsKQEAgLTgzMSw3ICs4NTEsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2lzX2Vycm9yX2h2YSk7CiAKLXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKmdmbl90b19tZW1zbG90X3VuYWxpYXNlZChzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbikKK3N0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKmdmbl90b19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQogewogCWludCBpOwogCXN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzID0ga3ZtX21lbXNsb3RzKGt2bSk7CkBAIC04NDUsMjAgKzg2NSwxMyBAQAogCX0KIAlyZXR1cm4gTlVMTDsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGdmbl90b19tZW1zbG90X3VuYWxpYXNlZCk7Ci0KLXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKmdmbl90b19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQotewotCWdmbiA9IHVuYWxpYXNfZ2ZuKGt2bSwgZ2ZuKTsKLQlyZXR1cm4gZ2ZuX3RvX21lbXNsb3RfdW5hbGlhc2VkKGt2bSwgZ2ZuKTsKLX0KK0VYUE9SVF9TWU1CT0xfR1BMKGdmbl90b19tZW1zbG90KTsKIAogaW50IGt2bV9pc192aXNpYmxlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbikKIHsKIAlpbnQgaTsKIAlzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cyA9IGt2bV9tZW1zbG90cyhrdm0pOwogCi0JZ2ZuID0gdW5hbGlhc19nZm5faW5zdGFudGlhdGlvbihrdm0sIGdmbik7CiAJZm9yIChpID0gMDsgaSA8IEtWTV9NRU1PUllfU0xPVFM7ICsraSkgewogCQlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90ID0gJnNsb3RzLT5tZW1zbG90c1tpXTsKIApAQCAtOTAzLDcgKzkxNiw2IEBACiAJc3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHMgPSBrdm1fbWVtc2xvdHMoa3ZtKTsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90ID0gTlVMTDsKIAotCWdmbiA9IHVuYWxpYXNfZ2ZuKGt2bSwgZ2ZuKTsKIAlmb3IgKGkgPSAwOyBpIDwgc2xvdHMtPm5tZW1zbG90czsgKytpKSB7CiAJCW1lbXNsb3QgPSAmc2xvdHMtPm1lbXNsb3RzW2ldOwogCkBAIC05MjQsOCArOTM2LDcgQEAKIHsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90OwogCi0JZ2ZuID0gdW5hbGlhc19nZm5faW5zdGFudGlhdGlvbihrdm0sIGdmbik7Ci0Jc2xvdCA9IGdmbl90b19tZW1zbG90X3VuYWxpYXNlZChrdm0sIGdmbik7CisJc2xvdCA9IGdmbl90b19tZW1zbG90KGt2bSwgZ2ZuKTsKIAlpZiAoIXNsb3QgfHwgc2xvdC0+ZmxhZ3MgJiBLVk1fTUVNU0xPVF9JTlZBTElEKQogCQlyZXR1cm4gYmFkX2h2YSgpOwogCXJldHVybiBnZm5fdG9faHZhX21lbXNsb3Qoc2xvdCwgZ2ZuKTsKQEAgLTk0NiwxMyArOTU3LDE5IEBACiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCiAJCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwkJaWYgKGlzX2h3cG9pc29uX2FkZHJlc3MoYWRkcikpIHsKKwkJCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJCQlnZXRfcGFnZShod3BvaXNvbl9wYWdlKTsKKwkJCXJldHVybiBwYWdlX3RvX3Bmbihod3BvaXNvbl9wYWdlKTsKKwkJfQorCiAJCXZtYSA9IGZpbmRfdm1hKGN1cnJlbnQtPm1tLCBhZGRyKTsKIAogCQlpZiAodm1hID09IE5VTEwgfHwgYWRkciA8IHZtYS0+dm1fc3RhcnQgfHwKIAkJICAgICEodm1hLT52bV9mbGFncyAmIFZNX1BGTk1BUCkpIHsKIAkJCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0JCQlnZXRfcGFnZShiYWRfcGFnZSk7Ci0JCQlyZXR1cm4gcGFnZV90b19wZm4oYmFkX3BhZ2UpOworCQkJZ2V0X3BhZ2UoZmF1bHRfcGFnZSk7CisJCQlyZXR1cm4gcGFnZV90b19wZm4oZmF1bHRfcGFnZSk7CiAJCX0KIAogCQlwZm4gPSAoKGFkZHIgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUKSArIHZtYS0+dm1fcGdvZmY7CkBAIC0xMTg3LDggKzEyMDQsNyBAQAogewogCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7CiAKLQlnZm4gPSB1bmFsaWFzX2dmbihrdm0sIGdmbik7Ci0JbWVtc2xvdCA9IGdmbl90b19tZW1zbG90X3VuYWxpYXNlZChrdm0sIGdmbik7CisJbWVtc2xvdCA9IGdmbl90b19tZW1zbG90KGt2bSwgZ2ZuKTsKIAlpZiAobWVtc2xvdCAmJiBtZW1zbG90LT5kaXJ0eV9iaXRtYXApIHsKIAkJdW5zaWduZWQgbG9uZyByZWxfZ2ZuID0gZ2ZuIC0gbWVtc2xvdC0+YmFzZV9nZm47CiAKQEAgLTEyMDcsNyArMTIyMyw3IEBACiAJCXByZXBhcmVfdG9fd2FpdCgmdmNwdS0+d3EsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwogCiAJCWlmIChrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHZjcHUpKSB7Ci0JCQlzZXRfYml0KEtWTV9SRVFfVU5IQUxULCAmdmNwdS0+cmVxdWVzdHMpOworCQkJa3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1VOSEFMVCwgdmNwdSk7CiAJCQlicmVhazsKIAkJfQogCQlpZiAoa3ZtX2NwdV9oYXNfcGVuZGluZ190aW1lcih2Y3B1KSkKQEAgLTEzNzgsNiArMTM5NCwxOCBAQAogCiAJaWYgKHZjcHUtPmt2bS0+bW0gIT0gY3VycmVudC0+bW0pCiAJCXJldHVybiAtRUlPOworCisjaWYgZGVmaW5lZChDT05GSUdfUzM5MCkgfHwgZGVmaW5lZChDT05GSUdfUFBDKQorCS8qCisJICogU3BlY2lhbCBjYXNlczogdmNwdSBpb2N0bHMgdGhhdCBhcmUgYXN5bmNocm9ub3VzIHRvIHZjcHUgZXhlY3V0aW9uLAorCSAqIHNvIHZjcHVfbG9hZCgpIHdvdWxkIGJyZWFrIGl0LgorCSAqLworCWlmIChpb2N0bCA9PSBLVk1fUzM5MF9JTlRFUlJVUFQgfHwgaW9jdGwgPT0gS1ZNX0lOVEVSUlVQVCkKKwkJcmV0dXJuIGt2bV9hcmNoX3ZjcHVfaW9jdGwoZmlscCwgaW9jdGwsIGFyZyk7CisjZW5kaWYKKworCisJdmNwdV9sb2FkKHZjcHUpOwogCXN3aXRjaCAoaW9jdGwpIHsKIAljYXNlIEtWTV9SVU46CiAJCXIgPSAtRUlOVkFMOwpAQCAtMTUyMCw3ICsxNTQ4LDcgQEAKIAkJCQlnb3RvIG91dDsKIAkJCXAgPSAmc2lnc2V0OwogCQl9Ci0JCXIgPSBrdm1fdmNwdV9pb2N0bF9zZXRfc2lnbWFzayh2Y3B1LCAmc2lnc2V0KTsKKwkJciA9IGt2bV92Y3B1X2lvY3RsX3NldF9zaWdtYXNrKHZjcHUsIHApOwogCQlicmVhazsKIAl9CiAJY2FzZSBLVk1fR0VUX0ZQVTogewpAQCAtMTU1NSw2ICsxNTgzLDcgQEAKIAkJciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGwoZmlscCwgaW9jdGwsIGFyZyk7CiAJfQogb3V0OgorCXZjcHVfcHV0KHZjcHUpOwogCWtmcmVlKGZwdSk7CiAJa2ZyZWUoa3ZtX3NyZWdzKTsKIAlyZXR1cm4gcjsKQEAgLTIxOTcsNiArMjIyNiwyNCBAQAogCiAJYmFkX3BmbiA9IHBhZ2VfdG9fcGZuKGJhZF9wYWdlKTsKIAorCWh3cG9pc29uX3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKKworCWlmIChod3BvaXNvbl9wYWdlID09IE5VTEwpIHsKKwkJciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2ZyZWVfMDsKKwl9CisKKwlod3BvaXNvbl9wZm4gPSBwYWdlX3RvX3Bmbihod3BvaXNvbl9wYWdlKTsKKworCWZhdWx0X3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKKworCWlmIChmYXVsdF9wYWdlID09IE5VTEwpIHsKKwkJciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2ZyZWVfMDsKKwl9CisKKwlmYXVsdF9wZm4gPSBwYWdlX3RvX3BmbihmYXVsdF9wYWdlKTsKKwogCWlmICghemFsbG9jX2NwdW1hc2tfdmFyKCZjcHVzX2hhcmR3YXJlX2VuYWJsZWQsIEdGUF9LRVJORUwpKSB7CiAJCXIgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9mcmVlXzA7CkBAIC0yMjY5LDYgKzIzMTYsMTAgQEAKIG91dF9mcmVlXzBhOgogCWZyZWVfY3B1bWFza192YXIoY3B1c19oYXJkd2FyZV9lbmFibGVkKTsKIG91dF9mcmVlXzA6CisJaWYgKGZhdWx0X3BhZ2UpCisJCV9fZnJlZV9wYWdlKGZhdWx0X3BhZ2UpOworCWlmIChod3BvaXNvbl9wYWdlKQorCQlfX2ZyZWVfcGFnZShod3BvaXNvbl9wYWdlKTsKIAlfX2ZyZWVfcGFnZShiYWRfcGFnZSk7CiBvdXQ6CiAJa3ZtX2FyY2hfZXhpdCgpOwpAQCAtMjI5MCw2ICsyMzQxLDcgQEAKIAlrdm1fYXJjaF9oYXJkd2FyZV91bnNldHVwKCk7CiAJa3ZtX2FyY2hfZXhpdCgpOwogCWZyZWVfY3B1bWFza192YXIoY3B1c19oYXJkd2FyZV9lbmFibGVkKTsKKwlfX2ZyZWVfcGFnZShod3BvaXNvbl9wYWdlKTsKIAlfX2ZyZWVfcGFnZShiYWRfcGFnZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fZXhpdCk7Cg==